diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index fcf5fd48e2..c46942d0c2 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -1452,7 +1452,7 @@ components: format: int64 type: integer PageSize: - description: Size for a given page. The maximum allowed value is 100. + description: Number of items to return per page. The maximum allowed value is 100. in: query name: page[size] required: false @@ -7702,7 +7702,7 @@ components: description: An arbitrary object value with additional properties. type: object AnyValueString: - description: A scalar string value. + description: A scalar value represented as a string. type: string ApiID: description: API identifier. diff --git a/datadog_api_client/__init__.py b/datadog_api_client/__init__.py new file mode 100644 index 0000000000..4a6b58de3f --- /dev/null +++ b/datadog_api_client/__init__.py @@ -0,0 +1,9 @@ +# 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 datadog_api_client.api_client import ApiClient, AsyncApiClient, ThreadedApiClient +from datadog_api_client.configuration import Configuration + + +__all__ = ["ApiClient", "AsyncApiClient", "ThreadedApiClient", "Configuration"] \ No newline at end of file diff --git a/datadog_api_client/api_client.py b/datadog_api_client/api_client.py new file mode 100644 index 0000000000..5cad79d1a7 --- /dev/null +++ b/datadog_api_client/api_client.py @@ -0,0 +1,915 @@ +# 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. + +import json +import atexit +import mimetypes +import warnings +import multiprocessing +from multiprocessing.pool import ThreadPool +import io +import os +import re +from typing import Any, Dict, Optional, List, Tuple, Union +from typing_extensions import Self +from urllib.parse import quote +from urllib3.fields import RequestField # type: ignore + + +from datadog_api_client import rest +from datadog_api_client.configuration import Configuration +from datadog_api_client.exceptions import ApiTypeError, ApiValueError +from datadog_api_client.model_utils import ( + check_allowed_values, + check_validations, + deserialize_file, + file_type, + data_to_dict, + get_file_data_and_close_file, + validate_and_convert_types, + get_attribute_from_path, + set_attribute_from_path, +) + + +class ApiClient: + """Generic API client for OpenAPI client library builds. + + OpenAPI generic API client. This client handles the client- + server communication, and is invariant across implementations. Specifics of + the methods and models for each application are generated from the OpenAPI + templates. + + :param configuration: Configuration object for this client + :param header_name: A header to pass when making calls to the API. + :param header_value: A header value to pass when making calls to + the API. + """ + + def __init__(self, configuration: Configuration): + self.configuration = configuration + + self.rest_client = self._build_rest_client() + self.default_headers = {} + if self.configuration.compress: + self.default_headers["Accept-Encoding"] = "gzip" + # Set default User-Agent. + self.user_agent = user_agent() + + # Initialize delegated token config if delegated auth is configured + self._delegated_token_config = None + if (self.configuration.delegated_auth_provider is not None and + self.configuration.delegated_auth_org_uuid is not None): + from datadog_api_client.delegated_auth import DelegatedTokenConfig + self._delegated_token_config = DelegatedTokenConfig( + org_uuid=self.configuration.delegated_auth_org_uuid, + provider="aws", + provider_auth=self.configuration.delegated_auth_provider, + ) + + def __enter__(self) -> Self: + return self + + def __exit__(self, exc_type, exc_value, traceback) -> None: + self.close() + + def close(self) -> None: + self.rest_client.pool_manager.clear() + + def _build_rest_client(self): + return rest.RESTClientObject(self.configuration) + + @property + def user_agent(self) -> str: + """User agent for this API client""" + return self.default_headers["User-Agent"] + + @user_agent.setter + def user_agent(self, value: str) -> None: + self.default_headers["User-Agent"] = value + + def set_default_header(self, header_name: str, header_value: str) -> None: + self.default_headers[header_name] = header_value + + def _call_api( + self, + method: str, + url: str, + query_params: Optional[List[Tuple[str, Any]]] = None, + header_params: Optional[Dict[str, Any]] = None, + body: Optional[Any] = None, + post_params: Optional[List[Tuple[str, Any]]] = None, + response_type: Optional[Tuple[Any]] = None, + return_http_data_only: Optional[bool] = None, + preload_content: bool = True, + request_timeout: Optional[Union[int, float, Tuple[Union[int, float], Union[int, float]]]] = None, + check_type: Optional[bool] = None, + ): + # perform request and return response + response = self.rest_client.request( + method, + url, + query_params=query_params, + headers=header_params, + post_params=post_params, + body=body, + preload_content=preload_content, + request_timeout=request_timeout, + ) + + if not preload_content: + return response + + # deserialize response data + if response_type: + if response_type == (file_type,): + content_disposition = response.headers.get("Content-Disposition") + return_data = deserialize_file( + response.data, self.configuration.temp_folder_path, content_disposition=content_disposition + ) + else: + encoding = "utf-8" + content_type = response.headers.get("Content-Type") + if content_type is not None: + match = re.search(r"charset=([a-zA-Z\-\d]+)[\s\;]?", content_type) + if match: + encoding = match.group(1) + response_data = response.data.decode(encoding) + + return_data = self.deserialize(response_data, response_type, check_type) + else: + return_data = None + + if return_http_data_only: + return return_data + return (return_data, response.status, dict(response.headers)) + + def parameters_to_multipart(self, params): + """Get parameters as list of tuples, formatting as json if value is dict. + + :param params: Parameters as list of two-tuples. + + :return: Parameters as list of tuple or urllib3.fields.RequestField + """ + new_params = [] + for k, v in params.items() if isinstance(params, dict) else params: + if isinstance(v, dict): # v is instance of collection_type, formatting as application/json + v = json.dumps(v, ensure_ascii=False).encode("utf-8") + field = RequestField(k, v) + field.make_multipart(content_type="application/json; charset=utf-8") + new_params.append(field) + else: + new_params.append((k, v)) + return new_params + + def deserialize(self, response_data: str, response_type: Any, check_type: Optional[bool]): + """Deserializes response into an object. + + :param response_data: Response data to be deserialized. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param check_type: boolean, whether to check the types of the data + received from the server + :type check_type: bool + + :return: deserialized object. + """ + # fetch data from response object + try: + received_data = json.loads(response_data) + except ValueError: + received_data = response_data + + # store our data under the key of 'received_data' so users have some + # context if they are deserializing a string and the data type is wrong + deserialized_data = validate_and_convert_types( + received_data, response_type, ["received_data"], True, check_type, + configuration=self.configuration, + ) + return deserialized_data + + def call_api( + self, + resource_path: str, + method: str, + path_params: Optional[Dict[str, Any]] = None, + query_params: Optional[List[Tuple[str, Any]]] = None, + header_params: Optional[Dict[str, Any]] = None, + body: Optional[Any] = None, + post_params: Optional[List[Tuple[str, Any]]] = None, + files: Optional[Dict[str, List[io.FileIO]]] = None, + response_type: Optional[Tuple[Any]] = None, + return_http_data_only: Optional[bool] = None, + collection_formats: Optional[Dict[str, str]] = None, + preload_content: bool = True, + request_timeout: Optional[Union[int, float, Tuple[Union[int, float], Union[int, float]]]] = None, + host: Optional[str] = None, + check_type: Optional[bool] = None, + ): + """Makes the HTTP request (synchronous) and returns deserialized data. + + :param resource_path: Path to method endpoint. + :param method: Method to call. + :param path_params: Path parameters in the url. + :param query_params: Query parameters in the url. + :param header_params: Header parameters to be + placed in the request header. + :param body: Request body. + :param post_params dict: Request post form parameters, + for `application/x-www-form-urlencoded`, `multipart/form-data`. + :param response_type: For the response, a tuple containing: + valid classes + a list containing valid classes (for list schemas) + a dict containing a tuple of valid classes as the value + Example values: + (str,) + (Pet,) + (float, none_type) + ([int, none_type],) + ({str: (bool, str, int, float, date, datetime, str, none_type)},) + :param files: key -> field name, value -> a list of open file + objects for `multipart/form-data`. + :type files: dict + :param return_http_data_only: response data without head status code + and headers + :type return_http_data_only: bool, optional + :param collection_formats: dict of collection formats for path, query, + header, and post parameters. + :type collection_formats: dict, optional + :param preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :type preload_content: bool, optional + :param request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param check_type: boolean describing if the data back from the server + should have its type checked. + :type check_type: bool, optional + :return: the HTTP response. + """ + # header parameters + header_params = header_params or {} + header_params.update(self.default_headers) + if header_params: + header_params = data_to_dict(header_params) + header_params = dict(self.parameters_to_tuples(header_params, collection_formats)) + + # path parameters + if path_params: + path_params = data_to_dict(path_params) + for k, v in self.parameters_to_tuples(path_params, collection_formats): + # specified safe chars, encode everything + resource_path = resource_path.replace( + f"{{{k}}}", quote(str(v), safe=self.configuration.safe_chars_for_path_param) + ) + + # query parameters + if query_params: + query_params = data_to_dict(query_params) + query_params = self.parameters_to_tuples(query_params, collection_formats) + + # post parameters + if post_params or files: + post_params = post_params or [] + post_params = data_to_dict(post_params) + post_params = self.parameters_to_tuples(post_params, collection_formats) + post_params.extend(self.files_parameters(files)) + if header_params["Content-Type"].startswith("multipart"): + post_params = self.parameters_to_multipart(post_params) + + # body + if body: + body = data_to_dict(body) + + # request url + if host is None: + url = self.configuration.host + resource_path + else: + # use server/host defined in path or operation instead + url = host + resource_path + + return self._call_api( + method, + url, + query_params, + header_params, + body, + post_params, + response_type, + return_http_data_only, + preload_content, + request_timeout, + check_type, + ) + + def call_api_paginated( + self, + resource_path: str, + method: str, + pagination: dict, + response_type: Optional[Tuple[Any]] = None, + request_timeout: Optional[Union[int, float, Tuple[Union[int, float], Union[int, float]]]] = None, + host: Optional[str] = None, + check_type: Optional[bool] = None, + ): + if "page_param" in pagination: + page_start = pagination.get("page_start", 0) + set_attribute_from_path( + pagination["kwargs"], + pagination["page_param"], + page_start, + pagination["endpoint"].params_map, + ) + params = pagination["endpoint"].gather_params(pagination["kwargs"]) + while True: + response = self.call_api( + resource_path, + method, + params["path"], + params["query"], + params["header"], + body=params["body"], + post_params=params["form"], + files=params["file"], + response_type=response_type, + check_type=check_type, + return_http_data_only=True, + preload_content=True, + request_timeout=request_timeout, + host=host, + collection_formats=params["collection_format"], + ) + results = get_attribute_from_path(response, pagination.get("results_path")) + for item in results: + yield item + if "cursor_param" in pagination: + if len(results) == 0 or not get_attribute_from_path(response, pagination["cursor_path"], default=""): + break + elif len(results) < pagination["limit_value"]: + break + + params = self._update_paginated_params(pagination, response) + + def _update_paginated_params(self, pagination, response): + if "page_offset_param" in pagination: + set_attribute_from_path( + pagination["kwargs"], + pagination["page_offset_param"], + get_attribute_from_path(pagination["kwargs"], pagination["page_offset_param"], 0) + + pagination["limit_value"], + pagination["endpoint"].params_map, + ) + elif "page_param" in pagination: + page_start = pagination.get("page_start", 0) + set_attribute_from_path( + pagination["kwargs"], + pagination["page_param"], + get_attribute_from_path(pagination["kwargs"], pagination["page_param"], page_start) + 1, + pagination["endpoint"].params_map, + ) + else: + set_attribute_from_path( + pagination["kwargs"], + pagination["cursor_param"], + get_attribute_from_path(response, pagination["cursor_path"]), + pagination["endpoint"].params_map, + ) + + return pagination["endpoint"].gather_params(pagination["kwargs"]) + + def parameters_to_tuples(self, params, collection_formats) -> List[Tuple[str, Any]]: + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: Parameters as list of tuples, collections formatted + """ + new_params: List[Tuple[str, str]] = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance(params, dict) else params: + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == "multi": + new_params.extend((k, value) for value in v) + else: + if collection_format == "ssv": + delimiter = " " + elif collection_format == "tsv": + delimiter = "\t" + elif collection_format == "pipes": + delimiter = "|" + else: # csv is the default + delimiter = "," + new_params.append((k, delimiter.join(str(value) for value in v))) + else: + if isinstance(v, bool): + v = json.dumps(v) + new_params.append((k, v)) + return new_params + + def files_parameters(self, files: Optional[Dict[str, List[io.FileIO]]] = None): + """Builds form parameters. + + :param files: None or a dict with key=param_name and + value is a list of open file objects + :return: List of tuples of form parameters with file data + """ + if files is None: + return [] + + params = [] + for param_name, file_instances in files.items(): + if file_instances is None: + # if the file field is nullable, skip None values + continue + for file_instance in file_instances: + if file_instance is None: + # if the file field is nullable, skip None values + continue + if file_instance.closed is True: + raise ApiValueError( + "Cannot read a closed file. The passed in file_type " "for %s must be open." % param_name + ) + filename = os.path.basename(str(file_instance.name)) + filedata = get_file_data_and_close_file(file_instance) + mimetype = mimetypes.guess_type(filename)[0] or "application/octet-stream" + params.append(tuple([param_name, tuple([filename, filedata, mimetype])])) + + return params + + def select_header_accept(self, accepts: List[str]) -> str: + """Returns `Accept` based on an array of accepts provided. + + :param accepts: List of headers. + :return: Accept (e.g. application/json). + """ + return ", ".join(accepts) + + def select_header_content_type(self, content_types: List[str]) -> str: + """Returns `Content-Type` based on an array of content_types provided. + + :param content_types: List of content-types. + :return: Content-Type (e.g. application/json). + """ + if not content_types: + return "application/json" + + content_types = [x.lower() for x in content_types] + + if "application/json" in content_types or "*/*" in content_types: + return "application/json" + return content_types[0] + + def use_delegated_token_auth(self, headers: Dict[str, Any]) -> None: + """Use delegated token authentication if configured. + + :param headers: Header parameters dict to be updated. + :raises: ApiValueError if delegated token authentication fails + """ + # Skip if no delegated token config + if self._delegated_token_config is None: + return + + # Check if we need to get or refresh the token + if (self.configuration._delegated_token_credentials is None or + self.configuration._delegated_token_credentials.is_expired()): + + # Get new token from provider, passing the API configuration + try: + self.configuration._delegated_token_credentials = self.configuration.delegated_auth_provider.authenticate( + self._delegated_token_config, self.configuration + ) + except Exception as e: + raise ApiValueError(f"Failed to get delegated token: {str(e)}") + + # Set the Authorization header with the delegated token + token = self.configuration._delegated_token_credentials.delegated_token + headers["Authorization"] = f"Bearer {token}" + + +class ThreadedApiClient(ApiClient): + + _pool = None + + def __init__(self, configuration: Configuration, pool_threads: int = 1): + self.pool_threads = pool_threads + self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 + super().__init__(configuration) + + def _build_rest_client(self): + return rest.RESTClientObject(self.configuration, maxsize=self.connection_pool_maxsize) + + def close(self) -> None: + self.rest_client.pool_manager.clear() + if self._pool: + self._pool.close() + self._pool.join() + self._pool = None + if hasattr(atexit, "unregister"): + atexit.unregister(self.close) + + @property + def pool(self) -> ThreadPool: + """Create thread pool on first request + avoids instantiating unused threadpool for blocking clients. + """ + if self._pool is None: + atexit.register(self.close) + self._pool = ThreadPool(self.pool_threads) + return self._pool + + def _call_api( + self, + method: str, + url: str, + query_params: Optional[List[Tuple[str, Any]]] = None, + header_params: Optional[Dict[str, Any]] = None, + body: Optional[Any] = None, + post_params: Optional[List[Tuple[str, Any]]] = None, + response_type: Optional[Tuple[Any]] = None, + return_http_data_only: Optional[bool] = None, + preload_content: bool = True, + request_timeout: Optional[Union[int, float, Tuple]] = None, + check_type: Optional[bool] = None, + ): + return self.pool.apply_async( + super()._call_api, + ( + method, + url, + query_params, + header_params, + body, + post_params, + response_type, + return_http_data_only, + preload_content, + request_timeout, + check_type, + ), + ) + + +class AsyncApiClient(ApiClient): + def _build_rest_client(self): + return rest.AsyncRESTClientObject(self.configuration) + + async def __aenter__(self) -> Self: + return self + + async def __aexit__(self, exc_type, exc, tb): + if exc: + raise exc + await self.rest_client._client.__aexit__(exc_type, exc, tb) + + def close(self): + self.rest_client.close() + + async def _call_api( + self, + method: str, + url: str, + query_params: Optional[List[Tuple[str, Any]]] = None, + header_params: Optional[Dict[str, Any]] = None, + body: Optional[Any] = None, + post_params: Optional[List[Tuple[str, Any]]] = None, + response_type: Optional[Tuple[Any]] = None, + return_http_data_only: Optional[bool] = None, + preload_content: bool = True, + request_timeout: Optional[Union[int, float, Tuple[Union[int, float], Union[int, float]]]] = None, + check_type: Optional[bool] = None, + ): + + # perform request and return response + response = await self.rest_client.request( + method, + url, + query_params=query_params, + headers=header_params, + post_params=post_params, + body=body, + preload_content=preload_content, + request_timeout=request_timeout, + ) + + if not preload_content: + return response + + # deserialize response data + if response_type: + if response_type == (file_type,): + content_disposition = response.headers.get("Content-Disposition") + response_data = await response.content() + return_data = deserialize_file( + response_data, self.configuration.temp_folder_path, content_disposition=content_disposition + ) + else: + response_data = await response.text() + + return_data = self.deserialize(response_data, response_type, check_type) + else: + return_data = None + + if return_http_data_only: + return return_data + return (return_data, response.status_code, response.headers) + + async def call_api_paginated( + self, + resource_path: str, + method: str, + pagination: dict, + response_type: Optional[Tuple[Any]] = None, + request_timeout: Optional[Union[int, float, Tuple[Union[int, float], Union[int, float]]]] = None, + host: Optional[str] = None, + check_type: Optional[bool] = None, + ): + params = pagination["endpoint"].gather_params(pagination["kwargs"]) + while True: + response = await self.call_api( + resource_path, + method, + params["path"], + params["query"], + params["header"], + body=params["body"], + post_params=params["form"], + files=params["file"], + response_type=response_type, + check_type=check_type, + return_http_data_only=True, + preload_content=True, + request_timeout=request_timeout, + host=host, + collection_formats=params["collection_format"], + ) + results = get_attribute_from_path(response, pagination.get("results_path")) + for item in results: + yield item + if "cursor_param" in pagination: + if len(results) == 0 or not get_attribute_from_path(response, pagination["cursor_path"], default=""): + break + elif len(results) < pagination["limit_value"]: + break + + params = self._update_paginated_params(pagination, response) + + +class Endpoint: + def __init__( + self, + settings: Dict[str, Any], + params_map: Dict[str, Dict[str, Any]], + headers_map: Dict[str, List[str]], + api_client: ApiClient, + ): + """Creates an endpoint. + + :param settings: See below key value pairs: + 'response_type' (tuple/None): response type + 'auth' (list): a list of auth type keys + 'endpoint_path' (str): the endpoint path + 'operation_id' (str): endpoint string identifier + 'http_method' (str): POST/PUT/PATCH/GET etc + 'servers' (list): list of str servers that this endpoint is at + 'version' (str): the API version + :type settings: dict + :param params_map: See below key value pairs: + 'required' (bool): whether the parameter is required + 'nullable' (bool): whether the parameter is nullable + 'validations' (dict): the validations dictionaries + 'allowed_values' (dict): the allowed values (enum) dictionaries + 'openapi_types' (dict): param_name to openapi type + 'attribute' (str): camelCase name + 'location' (str): 'body', 'file', 'form', 'header', 'path', 'query' + 'collection_format' (str): `csv` etc. + :type params_map: dict + :param headers_map: See below key value pairs: + 'accept' (list): list of Accept header strings + 'content_type' (list): list of Content-Type header strings + :type headers_map: dict + :param api_client API client instance. + :type api_client: ApiClient + """ + self.settings = settings + self.params_map = params_map + self.headers_map = headers_map + self.api_client = api_client + + def _validate_inputs(self, kwargs): + for param in kwargs: + param_map = self.params_map[param] + allowed_values = param_map.get("allowed_values") + if allowed_values: + check_allowed_values(list(allowed_values.values()), param, kwargs[param]) + + validations = param_map.get("validation") + if validations: + check_validations(validations, param, kwargs[param], configuration=self.api_client.configuration) + + if not self.api_client.configuration.check_input_type: + return + + for key, value in kwargs.items(): + fixed_val = validate_and_convert_types( + value, + self.params_map[key]["openapi_types"], + [key], + self.api_client.configuration.spec_property_naming, + self.api_client.configuration.check_input_type, + configuration=self.api_client.configuration, + ) + kwargs[key] = fixed_val + + def gather_params(self, kwargs): + params = {"body": None, "collection_format": {}, "file": {}, "form": [], "header": {}, "path": {}, "query": []} + + for param_name, param_value in kwargs.items(): + param_map = self.params_map[param_name] + param_location = param_map.get("location") + if param_location is None: + continue + if param_location: + if param_location == "body": + params["body"] = param_value + continue + base_name = param_map["attribute"] + openapi_types = param_map["openapi_types"] + if param_location == "form" and openapi_types == (file_type,): + params["file"][param_name] = [param_value] + elif param_location == "form" and openapi_types == ([file_type],): + # param_value is already a list + params["file"][param_name] = param_value + elif param_location in {"form", "query"}: + param_value_full = (base_name, param_value) + params[param_location].append(param_value_full) + if param_location not in {"form", "query"}: + params[param_location][base_name] = param_value + collection_format = param_map.get("collection_format") + if collection_format: + params["collection_format"][base_name] = collection_format + + accept_headers_list = self.headers_map["accept"] + if accept_headers_list: + params["header"]["Accept"] = self.api_client.select_header_accept(accept_headers_list) + + content_type_headers_list = self.headers_map.get("content_type") + if content_type_headers_list: + header_list = self.api_client.select_header_content_type(content_type_headers_list) + params["header"]["Content-Type"] = header_list + + self.update_params_for_auth(params["header"], params["query"]) + + return params + + def _validate_and_get_host(self, kwargs): + is_unstable = self.api_client.configuration.unstable_operations.get( + "{}.{}".format(self.settings["version"], self.settings["operation_id"]) + ) + if is_unstable: + warnings.warn("Using unstable operation '{0}'".format(self.settings["operation_id"])) + elif is_unstable is False: + raise ApiValueError("Unstable operation '{0}' is disabled".format(self.settings["operation_id"])) + + servers = self.settings.get("servers") + try: + index = self.api_client.configuration.server_operation_index.get( + self.settings["operation_id"], self.api_client.configuration.server_index + ) + server_variables = self.api_client.configuration.server_operation_variables.get( + self.settings["operation_id"], self.api_client.configuration.server_variables + ) + host = self.api_client.configuration.get_host_from_settings( + index, variables=server_variables, servers=servers + ) + except IndexError: + if servers: + raise ApiValueError("Invalid host index. Must be 0 <= index < %s" % len(servers)) + host = None + + for key, value in kwargs.items(): + if key not in self.params_map: + raise ApiTypeError( + "Got an unexpected parameter '%s'" " to method `%s`" % (key, self.settings["operation_id"]) + ) + # only throw this nullable ApiValueError if check_input_type + # is False, if check_input_type==True we catch this case + # in self._validate_inputs + if ( + not self.params_map[key].get("nullable") + and value is None + and not self.api_client.configuration.check_input_type + ): + raise ApiValueError( + "Value may not be None for non-nullable parameter `%s`" + " when calling `%s`" % (key, self.settings["operation_id"]) + ) + + for key, param_map in self.params_map.items(): + if param_map.get("required") and key not in kwargs: + raise ApiValueError( + "Missing the required parameter `%s` when calling " "`%s`" % (key, self.settings["operation_id"]) + ) + + self._validate_inputs(kwargs) + + return host + + def call_with_http_info(self, **kwargs): + host = self._validate_and_get_host(kwargs) + + params = self.gather_params(kwargs) + + return self.api_client.call_api( + self.settings["endpoint_path"], + self.settings["http_method"], + params["path"], + params["query"], + params["header"], + body=params["body"], + post_params=params["form"], + files=params["file"], + response_type=self.settings["response_type"], + check_type=self.api_client.configuration.check_return_type, + return_http_data_only=self.api_client.configuration.return_http_data_only, + preload_content=self.api_client.configuration.preload_content, + request_timeout=self.api_client.configuration.request_timeout, + host=host, + collection_formats=params["collection_format"], + ) + + def call_with_http_info_paginated(self, pagination): + host = self._validate_and_get_host(pagination["kwargs"]) + + return self.api_client.call_api_paginated( + self.settings["endpoint_path"], + self.settings["http_method"], + response_type=self.settings["response_type"], + check_type=self.api_client.configuration.check_return_type, + request_timeout=self.api_client.configuration.request_timeout, + host=host, + pagination=pagination + ) + + def update_params_for_auth(self, headers, queries) -> None: + """Updates header and query params based on authentication setting. + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + """ + if not self.settings["auth"]: + return + + # check if endpoint uses appKeyAuth and if delegated token config is available + has_app_key_auth = "appKeyAuth" in self.settings["auth"] + + # Check if delegated auth is configured (using our actual attributes) + has_delegated_auth = ( + hasattr(self.api_client.configuration, 'delegated_auth_provider') and + self.api_client.configuration.delegated_auth_provider is not None and + hasattr(self.api_client.configuration, 'delegated_auth_org_uuid') and + self.api_client.configuration.delegated_auth_org_uuid is not None + ) + + if has_app_key_auth and has_delegated_auth: + # Use delegated token authentication + self.api_client.use_delegated_token_auth(headers) + else: + # Use regular authentication + for auth in self.settings["auth"]: + auth_setting = self.api_client.configuration.auth_settings().get(auth) + if auth_setting: + if auth_setting["in"] == "header": + if auth_setting["type"] != "http-signature": + if auth_setting["value"] is None: + raise ApiValueError("Invalid authentication token for {}".format(auth_setting["key"])) + headers[auth_setting["key"]] = auth_setting["value"] + elif auth_setting["in"] == "query": + queries.append((auth_setting["key"], auth_setting["value"])) + else: + raise ApiValueError("Authentication token must be in `query` or `header`") + + +def user_agent() -> str: + """Generate default User-Agent header.""" + import platform + from datadog_api_client.version import __version__ + + return "datadog-api-client-python/{version} (python {py}; os {os}; arch {arch})".format( + version=__version__, + py=platform.python_version(), + os=platform.system(), + arch=platform.machine(), + ) diff --git a/datadog_api_client/aws.py b/datadog_api_client/aws.py new file mode 100644 index 0000000000..8b40ff8a02 --- /dev/null +++ b/datadog_api_client/aws.py @@ -0,0 +1,265 @@ +# 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. + +import base64 +import hashlib +import hmac +import json +import os +import platform +from datetime import datetime +from typing import Dict, List, Optional, Tuple +from urllib.parse import quote +from datadog_api_client.version import __version__ + +from datadog_api_client.configuration import Configuration +from datadog_api_client.delegated_auth import DelegatedTokenProvider, DelegatedTokenConfig, DelegatedTokenCredentials, get_delegated_token +from datadog_api_client.exceptions import ApiValueError + + +# AWS specific constants +AWS_ACCESS_KEY_ID_NAME = "AWS_ACCESS_KEY_ID" +AWS_SECRET_ACCESS_KEY_NAME = "AWS_SECRET_ACCESS_KEY" +AWS_SESSION_TOKEN_NAME = "AWS_SESSION_TOKEN" + +AMZ_DATE_HEADER = "X-Amz-Date" +AMZ_TOKEN_HEADER = "X-Amz-Security-Token" +AMZ_DATE_FORMAT = "%Y%m%d" +AMZ_DATE_TIME_FORMAT = "%Y%m%dT%H%M%SZ" +DEFAULT_REGION = "us-east-1" +DEFAULT_STS_HOST = "sts.amazonaws.com" +REGIONAL_STS_HOST = "sts.{}.amazonaws.com" +SERVICE = "sts" +ALGORITHM = "AWS4-HMAC-SHA256" +AWS4_REQUEST = "aws4_request" +GET_CALLER_IDENTITY_BODY = "Action=GetCallerIdentity&Version=2011-06-15" + +# Common Headers +ORG_ID_HEADER = "x-ddog-org-id" +HOST_HEADER = "host" +APPLICATION_FORM = "application/x-www-form-urlencoded; charset=utf-8" + +PROVIDER_AWS = "aws" + + +class AWSCredentials: + """AWS credentials for authentication.""" + + def __init__(self, access_key_id: str, secret_access_key: str, session_token: str): + self.access_key_id = access_key_id + self.secret_access_key = secret_access_key + self.session_token = session_token + + +class SigningData: + """Data structure for AWS signing information.""" + + def __init__(self, headers_encoded: str, body_encoded: str, url_encoded: str, method: str): + self.headers_encoded = headers_encoded + self.body_encoded = body_encoded + self.url_encoded = url_encoded + self.method = method + + +class AWSAuth(DelegatedTokenProvider): + """AWS authentication provider for delegated tokens.""" + + def __init__(self, aws_region: Optional[str] = None): + super().__init__() + self.aws_region = aws_region + + def authenticate(self, config: DelegatedTokenConfig, api_config: Configuration) -> DelegatedTokenCredentials: + """Authenticate using AWS credentials and return delegated token credentials. + + :param config: Delegated token configuration + :param api_config: API client configuration with host and other settings + :return: DelegatedTokenCredentials object + :raises: ApiValueError if authentication fails + """ + # Check org UUID first + if not config or not config.org_uuid: + raise ApiValueError("Missing org UUID in config") + + # Get local AWS Credentials + creds = self.get_credentials() + + # Use the credentials to generate the signing data + data = self.generate_aws_auth_data(config.org_uuid, creds) + + # Generate the auth string passed to the token endpoint + auth_string = f"{data.body_encoded}|{data.headers_encoded}|{data.method}|{data.url_encoded}" + + # Pass the api_config and self (provider) to get_delegated_token for REST client caching + auth_response = get_delegated_token(config.org_uuid, auth_string, api_config, self) + return auth_response + + def get_credentials(self) -> AWSCredentials: + """Get AWS credentials from environment variables. + + :return: AWSCredentials object + :raises: ApiValueError if credentials are missing + """ + access_key = os.getenv(AWS_ACCESS_KEY_ID_NAME) + secret_key = os.getenv(AWS_SECRET_ACCESS_KEY_NAME) + session_token = os.getenv(AWS_SESSION_TOKEN_NAME) + + if not access_key or not secret_key or not session_token: + raise ApiValueError("Missing AWS credentials. Please set AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_SESSION_TOKEN environment variables.") + + return AWSCredentials( + access_key_id=access_key, + secret_access_key=secret_key, + session_token=session_token + ) + + def _get_connection_parameters(self) -> Tuple[str, str, str]: + """Get connection parameters for AWS STS. + + :return: Tuple of (sts_full_url, region, host) + """ + region = self.aws_region or DEFAULT_REGION + + if self.aws_region: + host = REGIONAL_STS_HOST.format(region) + else: + host = DEFAULT_STS_HOST + + sts_full_url = f"https://{host}" + return sts_full_url, region, host + + def generate_aws_auth_data(self, org_uuid: str, creds: AWSCredentials) -> SigningData: + """Generate AWS authentication data for signing. + + :param org_uuid: Organization UUID + :param creds: AWS credentials + :return: SigningData object + :raises: ApiValueError if generation fails + """ + if not org_uuid: + raise ApiValueError("Missing org UUID") + + if not creds or not creds.access_key_id or not creds.secret_access_key or not creds.session_token: + raise ApiValueError("Missing AWS credentials") + + sts_full_url, region, host = self._get_connection_parameters() + + now = datetime.utcnow() + + request_body = GET_CALLER_IDENTITY_BODY + payload_hash = hashlib.sha256(request_body.encode('utf-8')).hexdigest() + + # Create the headers that factor into the signing algorithm + header_map = { + "Content-Length": [str(len(request_body))], + "Content-Type": [APPLICATION_FORM], + AMZ_DATE_HEADER: [now.strftime(AMZ_DATE_TIME_FORMAT)], + ORG_ID_HEADER: [org_uuid], + AMZ_TOKEN_HEADER: [creds.session_token], + HOST_HEADER: [host], + } + + # Create canonical headers + header_arr = [] + signed_headers_arr = [] + + for k, v in header_map.items(): + lowered_header_name = k.lower() + header_arr.append(f"{lowered_header_name}:{','.join(v)}") + signed_headers_arr.append(lowered_header_name) + + header_arr.sort() + signed_headers_arr.sort() + signed_headers = ";".join(signed_headers_arr) + + canonical_request = "\n".join([ + "POST", + "/", + "", # No query string + "\n".join(header_arr) + "\n", + signed_headers, + payload_hash, + ]) + + # Create the string to sign + hash_canonical_request = hashlib.sha256(canonical_request.encode('utf-8')).hexdigest() + credential_scope = "/".join([ + now.strftime(AMZ_DATE_FORMAT), + region, + SERVICE, + AWS4_REQUEST, + ]) + + string_to_sign = self._make_signature( + now, + credential_scope, + hash_canonical_request, + region, + SERVICE, + creds.secret_access_key, + ALGORITHM, + ) + + # Create the authorization header + credential = f"{creds.access_key_id}/{credential_scope}" + auth_header = f"{ALGORITHM} Credential={credential}, SignedHeaders={signed_headers}, Signature={string_to_sign}" + + header_map["Authorization"] = [auth_header] + header_map["User-Agent"] = [self._get_user_agent()] + + headers_json = json.dumps(header_map, separators=(',', ':')) + + return SigningData( + headers_encoded=base64.b64encode(headers_json.encode('utf-8')).decode('utf-8'), + body_encoded=base64.b64encode(request_body.encode('utf-8')).decode('utf-8'), + method="POST", + url_encoded=base64.b64encode(sts_full_url.encode('utf-8')).decode('utf-8') + ) + + def _make_signature(self, t: datetime, credential_scope: str, payload_hash: str, + region: str, service: str, secret_access_key: str, algorithm: str) -> str: + """Create AWS signature. + + :param t: Current datetime + :param credential_scope: Credential scope string + :param payload_hash: Hash of the canonical request + :param region: AWS region + :param service: AWS service name + :param secret_access_key: AWS secret access key + :param algorithm: Signing algorithm + :return: Signature string + """ + # Create the string to sign + string_to_sign = "\n".join([ + algorithm, + t.strftime(AMZ_DATE_TIME_FORMAT), + credential_scope, + payload_hash, + ]) + + # Create the signing key + k_date = self._hmac256(t.strftime(AMZ_DATE_FORMAT), f"AWS4{secret_access_key}".encode('utf-8')) + k_region = self._hmac256(region, k_date) + k_service = self._hmac256(service, k_region) + k_signing = self._hmac256(AWS4_REQUEST, k_service) + + # Sign the string + signature = self._hmac256(string_to_sign, k_signing) + return signature.hex() + + def _hmac256(self, data: str, key: bytes) -> bytes: + """Create HMAC-SHA256 hash. + + :param data: Data to hash + :param key: Key for HMAC + :return: HMAC hash bytes + """ + return hmac.new(key, data.encode('utf-8'), hashlib.sha256).digest() + + def _get_user_agent(self) -> str: + """Get user agent string. + + :return: User agent string + """ + + return f"datadog-api-client-python/{__version__} (python {platform.python_version()}; os {platform.system()}; arch {platform.machine()})" \ No newline at end of file diff --git a/datadog_api_client/configuration.py b/datadog_api_client/configuration.py new file mode 100644 index 0000000000..a70c07e318 --- /dev/null +++ b/datadog_api_client/configuration.py @@ -0,0 +1,1119 @@ +# 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. + +import copy +import logging +import os +import urllib3 # type: ignore + +from http import client as http_client +from datadog_api_client.exceptions import ApiValueError + + +JSON_SCHEMA_VALIDATION_KEYWORDS = { + "multipleOf", + "maximum", + "exclusiveMaximum", + "minimum", + "exclusiveMinimum", + "maxLength", + "minLength", + "pattern", + "maxItems", + "minItems", +} + + +class _UnstableOperations: + + def __init__(self, values): + self.values = values + + def get(self, key, default=None): + if key in self: + return self[key] + return default + + def __getitem__(self, key): + if key in self.values: + return self.values[key] + for version in ("v1", "v2"): + version_key = f"{version}.{key}" + if version_key in self.values: + return self.values[version_key] + raise KeyError(f"Unknown unstable operation {key}") + + def __setitem__(self, key, value): + if key in self.values: + self.values[key] = value + for version in ("v1", "v2"): + version_key = f"{version}.{key}" + if version_key in self.values: + self.values[version_key] = value + break + else: + raise KeyError(f"Unknown unstable operation {key}") + + def __contains__(self, key): + if key in self.values: + return True + for version in ("v1", "v2"): + version_key = f"{version}.{key}" + if version_key in self.values: + return True + return False + + +class Configuration: + """ + :param host: Base url. + :param api_key: Dict to store API key(s). + Each entry in the dict specifies an API key. + The dict key is the name of the security scheme in the OAS specification. + The dict value is the API key secret. + :param api_key_prefix: Dict to store API prefix (e.g. Bearer). + The dict key is the name of the security scheme in the OAS specification. + The dict value is an API key prefix when generating the auth data. + :param username: Username for HTTP basic authentication. + :param password: Password for HTTP basic authentication. + :param discard_unknown_keys: Boolean value indicating whether to discard + unknown properties. A server may send a response that includes additional + properties that are not known by the client in the following scenarios: + + 1. The OpenAPI document is incomplete, i.e. it does not match the server + implementation. + 2. The client was generated using an older version of the OpenAPI document + and the server has been upgraded since then. + + If a schema in the OpenAPI document defines the additionalProperties + attribute, then all undeclared properties received by the server are injected + into the additional properties map. In that case, there are undeclared + properties, and nothing to discard. + :param disabled_client_side_validations: Comma-separated list of + JSON schema validation keywords to disable JSON schema structural validation + rules. The following keywords may be specified: multipleOf, maximum, + exclusiveMaximum, minimum, exclusiveMinimum, maxLength, minLength, pattern, + maxItems, minItems. + By default, the validation is performed for data generated locally by the client + and data received from the server, independent of any validation performed by + the server side. If the input data does not satisfy the JSON schema validation + rules specified in the OpenAPI document, an exception is raised. + If disabled_client_side_validations is set, structural validation is + disabled. This can be useful to troubleshoot data validation problem, such as + when the OpenAPI document validation rules do not match the actual API data + received by the server. + :type disabled_client_side_validations: str + :param server_index: Index to servers configuration. + :param server_variables: Mapping with string values to replace variables in + templated server configuration. The validation of enums is performed for + variables with defined enum values before. + :param server_operation_index: Mapping from operation ID to an index to + server configuration. + :param server_operation_variables: Mapping from operation ID to a mapping with + string values to replace variables in templated server configuration. + The validation of enums is performed for variables with defined enum values before. + :param ssl_ca_cert: The path to a file of concatenated CA certificates + in PEM format. + :param compress: Boolean indicating whether encoded responses are accepted or not. + :type compress: bool + :param return_http_data_only: Response data without head status + code and headers. Default is True. + :type return_http_data_only: bool + :param preload_content: If False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + :type preload_content: bool + :param request_timeout: Timeout setting for this request. If one + number is provided, it will be total request timeout. It can also be a + pair (tuple) of (connection, read) timeouts. Default is None. + :type request_timeout: float/tuple + :param check_input_type: Specifies if type checking should be done on + the data sent to the server. Default is True. + :type check_input_type: bool + :param check_return_type: Specifies if type checking should be done + on the data received from the server. Default is True. + :type check_return_type: bool + :param spec_property_naming: Whether names in properties are expected to respect the spec or use snake case. + :type spec_property_naming: bool + :param enable_retry: If set, the client will retry requests on backend errors (5xx status codes), and 429. + On 429 if will use the returned headers to wait until the next requests, otherwise it will retry using + the backoff factor. + :type enable_retry: bool + :param retry_backoff_factor: Factor used to space out retried requests on backend errors. + :type retry_backoff_factor: float + :param max_retries: The maximum number of times a single request can be retried. + :type max_retries: int + :param retry_policy: Custom retry policy instance (e.g., urllib3.util.Retry). If provided, this overrides + the default retry behavior and the enable_retry, retry_backoff_factor, and max_retries settings. + :type retry_policy: urllib3.util.Retry + :param delegated_auth_provider: The delegated authentication provider (e.g., 'aws' for AWS). + :type delegated_auth_provider: str + :param delegated_auth_org_uuid: The organization UUID for delegated authentication. + :type delegated_auth_org_uuid: str + """ + + def __init__( + self, + host=None, + api_key=None, + api_key_prefix=None, + access_token=None, + username=None, + password=None, + discard_unknown_keys=True, + disabled_client_side_validations="", + server_index=None, + server_variables=None, + server_operation_index=None, + server_operation_variables=None, + ssl_ca_cert=None, + compress=True, + return_http_data_only=True, + preload_content=True, + request_timeout=None, + check_input_type=True, + check_return_type=True, + spec_property_naming=False, + enable_retry=False, + retry_backoff_factor=2, + max_retries=3, + retry_policy=None, + delegated_auth_provider=None, + delegated_auth_org_uuid=None, + ): + """Constructor.""" + self._base_path = "https://api.datadoghq.com" if host is None else host + self.server_index = 0 if server_index is None and host is None else server_index + self.server_operation_index = server_operation_index or {} + self.server_variables = server_variables or {} + self.server_operation_variables = server_operation_variables or {} + self.temp_folder_path = None + + # Authentication Settings + self.access_token = access_token + self.api_key = {} + if api_key: + self.api_key = api_key + + self.api_key_prefix = {} + if api_key_prefix: + self.api_key_prefix = api_key_prefix + + self.refresh_api_key_hook = None + self.username = username + self.password = password + self.discard_unknown_keys = discard_unknown_keys + self.disabled_client_side_validations = disabled_client_side_validations + self.logger = {} + self.logger["package_logger"] = logging.getLogger("datadog_api_client") + self.logger["urllib3_logger"] = logging.getLogger("urllib3") + self.logger_format = "%(asctime)s %(levelname)s %(message)s" + self.logger_stream_handler = None + self.logger_file_handler = None + self.logger_file = None + self.debug = False + + self.verify_ssl = True + self.ssl_ca_cert = ssl_ca_cert + self.cert_file = None + self.key_file = None + self.assert_hostname = None + + self.proxy = None + self.proxy_headers = None + self.safe_chars_for_path_param = "" + # Enable client side validation + self.client_side_validation = True + + # Options to pass down to the underlying urllib3 socket + self.socket_options = None + + # Will translate to a Accept-Encoding header + self.compress = compress + + self.return_http_data_only = return_http_data_only + self.preload_content = preload_content + self.request_timeout = request_timeout + self.check_input_type = check_input_type + self.check_return_type = check_return_type + self.spec_property_naming = spec_property_naming + + # Options for http retry + self.enable_retry = enable_retry + self.retry_backoff_factor = retry_backoff_factor + self.max_retries = max_retries + self.retry_policy = retry_policy + + # Keep track of unstable operations + self.unstable_operations = _UnstableOperations({ + "v2.create_fleet_schedule": False, + "v2.delete_fleet_schedule": False, + "v2.list_fleet_agent_tracers": False, + "v2.list_fleet_tracers": False, + "v2.trigger_fleet_schedule": False, + "v2.update_fleet_schedule": False, + "v2.aggregate_llm_obs_experimentation": False, + "v2.batch_update_llm_obs_dataset": False, + "v2.clone_llm_obs_dataset": False, + "v2.create_llm_obs_annotation_queue": False, + "v2.create_llm_obs_annotation_queue_interactions": False, + "v2.create_llm_obs_dataset": False, + "v2.create_llm_obs_dataset_records": False, + "v2.create_llm_obs_experiment": False, + "v2.create_llm_obs_experiment_events": False, + "v2.create_llm_obs_integration_inference": False, + "v2.create_llm_obs_project": False, + "v2.create_llm_obs_prompt": False, + "v2.create_llm_obs_prompt_version": False, + "v2.delete_llm_obs_annotation_queue": False, + "v2.delete_llm_obs_annotation_queue_interactions": False, + "v2.delete_llm_obs_annotations": False, + "v2.delete_llm_obs_custom_eval_config": False, + "v2.delete_llm_obs_data": False, + "v2.delete_llm_obs_dataset_records": False, + "v2.delete_llm_obs_datasets": False, + "v2.delete_llm_obs_experiments": False, + "v2.delete_llm_obs_patterns_config": False, + "v2.delete_llm_obs_projects": False, + "v2.delete_llm_obs_prompt": False, + "v2.export_llm_obs_dataset": False, + "v2.get_llm_obs_annotated_interactions": False, + "v2.get_llm_obs_annotated_interactions_by_trace_i_ds": False, + "v2.get_llm_obs_annotation_queue_label_schema": False, + "v2.get_llm_obs_custom_eval_config": False, + "v2.get_llm_obs_dataset_draft_state": False, + "v2.get_llm_obs_patterns_config": False, + "v2.get_llm_obs_patterns_run_status": False, + "v2.get_llm_obs_prompt": False, + "v2.get_llm_obs_prompt_version": False, + "v2.list_llm_obs_annotation_queues": False, + "v2.list_llm_obs_custom_eval_configs": False, + "v2.list_llm_obs_dataset_records": False, + "v2.list_llm_obs_datasets": False, + "v2.list_llm_obs_dataset_versions": False, + "v2.list_llm_obs_experiment_events": False, + "v2.list_llm_obs_experiment_events_v1": False, + "v2.list_llm_obs_experiment_events_v2": False, + "v2.list_llm_obs_experiments": False, + "v2.list_llm_obs_integration_accounts": False, + "v2.list_llm_obs_integration_models": False, + "v2.list_llm_obs_patterns_clustered_points": False, + "v2.list_llm_obs_patterns_configs": False, + "v2.list_llm_obs_patterns_runs": False, + "v2.list_llm_obs_patterns_topics": False, + "v2.list_llm_obs_patterns_topics_with_clustered_points": False, + "v2.list_llm_obs_projects": False, + "v2.list_llm_obs_prompts": False, + "v2.list_llm_obs_prompt_versions": False, + "v2.list_llm_obs_spans": False, + "v2.lock_llm_obs_dataset_draft_state": False, + "v2.restore_llm_obs_dataset_version": False, + "v2.search_llm_obs_experimentation": False, + "v2.search_llm_obs_spans": False, + "v2.simple_search_llm_obs_experimentation": False, + "v2.trigger_llm_obs_patterns": False, + "v2.unlock_llm_obs_dataset_draft_state": False, + "v2.update_llm_obs_annotation_queue": False, + "v2.update_llm_obs_annotation_queue_label_schema": False, + "v2.update_llm_obs_custom_eval_config": False, + "v2.update_llm_obs_dataset": False, + "v2.update_llm_obs_dataset_records": False, + "v2.update_llm_obs_experiment": False, + "v2.update_llm_obs_project": False, + "v2.update_llm_obs_prompt": False, + "v2.update_llm_obs_prompt_version": False, + "v2.upload_llm_obs_dataset_records_file": False, + "v2.upsert_llm_obs_annotations": False, + "v2.upsert_llm_obs_patterns_config": False, + "v2.create_annotation": False, + "v2.delete_annotation": False, + "v2.get_page_annotations": False, + "v2.list_annotations": False, + "v2.update_annotation": False, + "v2.anonymize_users": False, + "v2.validate": False, + "v2.create_open_api": False, + "v2.delete_open_api": False, + "v2.get_open_api": False, + "v2.list_apis": False, + "v2.update_open_api": False, + "v2.get_investigation": False, + "v2.list_investigations": False, + "v2.trigger_investigation": False, + "v2.create_change_request": False, + "v2.create_change_request_branch": False, + "v2.delete_change_request_decision": False, + "v2.get_change_request": False, + "v2.update_change_request": False, + "v2.update_change_request_decision": False, + "v2.create_aws_cloud_auth_persona_mapping": False, + "v2.delete_aws_cloud_auth_persona_mapping": False, + "v2.get_aws_cloud_auth_persona_mapping": False, + "v2.list_aws_cloud_auth_persona_mappings": False, + "v2.activate_content_pack": False, + "v2.activate_integration": False, + "v2.batch_get_security_monitoring_dataset_dependencies": False, + "v2.bulk_create_sample_log_generation_subscriptions": False, + "v2.bulk_export_security_monitoring_terraform_resources": False, + "v2.cancel_historical_job": False, + "v2.convert_job_result_to_signal": False, + "v2.convert_security_monitoring_terraform_resource": False, + "v2.create_io_c_triage_state": False, + "v2.create_sample_log_generation_subscription": False, + "v2.create_security_findings_automation_due_date_rule": False, + "v2.create_security_findings_automation_mute_rule": False, + "v2.create_security_findings_automation_ticket_creation_rule": False, + "v2.create_security_monitoring_dataset": False, + "v2.create_security_monitoring_integration_config": False, + "v2.create_static_analysis_ast": False, + "v2.create_static_analysis_server_analysis": False, + "v2.deactivate_content_pack": False, + "v2.deactivate_integration": False, + "v2.delete_historical_job": False, + "v2.delete_sample_log_generation_subscription": False, + "v2.delete_security_findings_automation_due_date_rule": False, + "v2.delete_security_findings_automation_mute_rule": False, + "v2.delete_security_findings_automation_ticket_creation_rule": False, + "v2.delete_security_monitoring_dataset": False, + "v2.delete_security_monitoring_integration_config": False, + "v2.export_security_monitoring_terraform_resource": False, + "v2.get_content_packs_states": False, + "v2.get_entity_context": False, + "v2.get_entra_id_azure_app_registrations": False, + "v2.get_finding": False, + "v2.get_historical_job": False, + "v2.get_indicator_of_compromise": False, + "v2.get_rule_version_history": False, + "v2.get_secrets_rules": False, + "v2.get_security_findings_automation_due_date_rule": False, + "v2.get_security_findings_automation_mute_rule": False, + "v2.get_security_findings_automation_ticket_creation_rule": False, + "v2.get_security_monitoring_dataset": False, + "v2.get_security_monitoring_dataset_by_version": False, + "v2.get_security_monitoring_dataset_version_history": False, + "v2.get_security_monitoring_histsignal": False, + "v2.get_security_monitoring_histsignals_by_job_id": False, + "v2.get_security_monitoring_integration_config": False, + "v2.get_signal_entities": False, + "v2.get_single_entity_context": False, + "v2.get_static_analysis_default_rulesets": False, + "v2.get_static_analysis_node_types": False, + "v2.get_static_analysis_ruleset": False, + "v2.get_static_analysis_tree_sitter_wasm": False, + "v2.import_security_vulnerabilities": False, + "v2.list_findings": False, + "v2.list_historical_jobs": False, + "v2.list_indicators_of_compromise": False, + "v2.list_multiple_rulesets": False, + "v2.list_sample_log_generation_subscriptions": False, + "v2.list_scanned_assets_metadata": False, + "v2.list_security_findings_automation_due_date_rules": False, + "v2.list_security_findings_automation_mute_rules": False, + "v2.list_security_findings_automation_ticket_creation_rules": False, + "v2.list_security_monitoring_datasets": False, + "v2.list_security_monitoring_histsignals": False, + "v2.list_security_monitoring_integration_configs": False, + "v2.list_static_analysis_codegen_rulesets": False, + "v2.list_vulnerabilities": False, + "v2.list_vulnerable_assets": False, + "v2.reorder_security_findings_automation_due_date_rules": False, + "v2.reorder_security_findings_automation_mute_rules": False, + "v2.reorder_security_findings_automation_ticket_creation_rules": False, + "v2.restore_security_monitoring_rule": False, + "v2.run_historical_job": False, + "v2.search_security_monitoring_histsignals": False, + "v2.update_findings_assignee": False, + "v2.update_security_findings_automation_due_date_rule": False, + "v2.update_security_findings_automation_mute_rule": False, + "v2.update_security_findings_automation_ticket_creation_rule": False, + "v2.update_security_monitoring_dataset": False, + "v2.update_security_monitoring_integration_config": False, + "v2.validate_security_monitoring_integration_config": False, + "v2.validate_security_monitoring_integration_credentials": False, + "v2.get_code_coverage_branch_summary": False, + "v2.get_code_coverage_commit_summary": False, + "v2.get_rule_based_view": False, + "v2.get_commitments_commitment_list": False, + "v2.get_commitments_coverage_scalar": False, + "v2.get_commitments_coverage_timeseries": False, + "v2.get_commitments_on_demand_hotspots_scalar": False, + "v2.get_commitments_savings_scalar": False, + "v2.get_commitments_savings_timeseries": False, + "v2.get_commitments_utilization_scalar": False, + "v2.get_commitments_utilization_timeseries": False, + "v2.get_cost_anomaly": False, + "v2.get_cost_tag_metadata_currency": False, + "v2.list_cost_anomalies": False, + "v2.list_cost_tag_key_sources": False, + "v2.list_cost_tag_metadata": False, + "v2.list_cost_tag_metadata_metrics": False, + "v2.list_cost_tag_metadata_months": False, + "v2.list_cost_tag_metadata_orchestrators": False, + "v2.search_cost_recommendations": False, + "v2.create_ownership_feedback": False, + "v2.get_ownership_evidence": False, + "v2.get_ownership_inference": False, + "v2.get_ownership_settings": False, + "v2.get_ownership_untagged_findings": False, + "v2.list_ownership_history": False, + "v2.list_ownership_history_by_owner_type": False, + "v2.list_ownership_inferences": False, + "v2.post_ownership_settings": False, + "v2.get_csm_agentless_host_facet_info": False, + "v2.get_csm_unified_host_facet_info": False, + "v2.list_csm_agentless_host_facets": False, + "v2.list_csm_agentless_hosts": False, + "v2.list_csm_unified_host_facets": False, + "v2.list_csm_unified_hosts": False, + "v2.list_shared_dashboards_by_dashboard_id": False, + "v2.create_dashboard_secure_embed": False, + "v2.delete_dashboard_secure_embed": False, + "v2.get_dashboard_secure_embed": False, + "v2.update_dashboard_secure_embed": False, + "v2.get_dashboard_usage": False, + "v2.list_dashboards_usage": False, + "v2.get_data_observability_monitor_run_status": False, + "v2.run_data_observability_monitor": False, + "v2.create_dataset": False, + "v2.delete_dataset": False, + "v2.get_all_datasets": False, + "v2.get_dataset": False, + "v2.update_dataset": False, + "v2.cancel_data_deletion_request": False, + "v2.create_data_deletion_request": False, + "v2.get_data_deletion_requests": False, + "v2.create_deployment_gate": False, + "v2.create_deployment_rule": False, + "v2.delete_deployment_gate": False, + "v2.delete_deployment_rule": False, + "v2.get_deployment_gate": False, + "v2.get_deployment_gate_rules": False, + "v2.get_deployment_gates_evaluation_result": False, + "v2.get_deployment_rule": False, + "v2.list_deployment_gates": False, + "v2.trigger_deployment_gates_evaluation": False, + "v2.update_deployment_gate": False, + "v2.update_deployment_rule": False, + "v2.patch_dora_deployment_by_version": False, + "v2.clone_form": False, + "v2.create_and_publish_form": False, + "v2.create_form": False, + "v2.delete_form": False, + "v2.get_form": False, + "v2.list_forms": False, + "v2.publish_form": False, + "v2.update_form": False, + "v2.upsert_and_publish_form_version": False, + "v2.upsert_form_version": False, + "v2.update_org_saml_configurations": False, + "v2.get_governance_config": False, + "v2.get_governance_control": False, + "v2.get_governance_control_notification_settings": False, + "v2.get_governance_detection": False, + "v2.get_governance_notification_settings": False, + "v2.list_governance_control_detections": False, + "v2.list_governance_controls": False, + "v2.list_governance_insights": False, + "v2.mitigate_governance_detections": False, + "v2.update_governance_control": False, + "v2.update_governance_control_notification_settings": False, + "v2.update_governance_detection": False, + "v2.update_governance_notification_settings": False, + "v2.create_hamr_org_connection": False, + "v2.get_hamr_org_connection": False, + "v2.delete_entity_integration_config": False, + "v2.get_entity_integration_config": False, + "v2.update_entity_integration_config": False, + "v2.create_global_incident_handle": False, + "v2.create_incident": False, + "v2.create_incident_attachment": False, + "v2.create_incident_configuration": False, + "v2.create_incident_google_chat_configuration": False, + "v2.create_incident_google_meet_configuration": False, + "v2.create_incident_impact_field": False, + "v2.create_incident_integration": False, + "v2.create_incident_notification_rule": False, + "v2.create_incident_notification_template": False, + "v2.create_incident_postmortem_attachment": False, + "v2.create_incident_postmortem_template": False, + "v2.create_incident_responder": False, + "v2.create_incident_rule": False, + "v2.create_incident_service_now_record": False, + "v2.create_incident_todo": False, + "v2.create_incident_type": False, + "v2.create_incident_user_defined_field": False, + "v2.create_incident_user_defined_role": False, + "v2.create_on_call_page_from_incident": False, + "v2.create_page_from_incident": False, + "v2.create_timestamp_override": False, + "v2.delete_global_incident_handle": False, + "v2.delete_incident": False, + "v2.delete_incident_attachment": False, + "v2.delete_incident_impact_field": False, + "v2.delete_incident_integration": False, + "v2.delete_incident_notification_rule": False, + "v2.delete_incident_notification_template": False, + "v2.delete_incident_postmortem_template": False, + "v2.delete_incident_responder": False, + "v2.delete_incident_rule": False, + "v2.delete_incident_todo": False, + "v2.delete_incident_type": False, + "v2.delete_incident_user_defined_field": False, + "v2.delete_incident_user_defined_role": False, + "v2.delete_timestamp_override": False, + "v2.get_global_incident_settings": False, + "v2.get_incident": False, + "v2.get_incident_ai_postmortem": False, + "v2.get_incident_integration": False, + "v2.get_incident_notification_rule": False, + "v2.get_incident_notification_template": False, + "v2.get_incident_postmortem_template": False, + "v2.get_incident_responder": False, + "v2.get_incident_rule": False, + "v2.get_incident_todo": False, + "v2.get_incident_type": False, + "v2.get_incident_user_defined_field": False, + "v2.get_incident_user_defined_role": False, + "v2.get_org_settings_by_incident_type": False, + "v2.import_incident": False, + "v2.link_page_to_incident": False, + "v2.list_global_incident_handles": False, + "v2.list_incident_attachments": False, + "v2.list_incident_impact_fields": False, + "v2.list_incident_integrations": False, + "v2.list_incident_notification_rules": False, + "v2.list_incident_notification_templates": False, + "v2.list_incident_postmortem_templates": False, + "v2.list_incident_responders": False, + "v2.list_incident_rules": False, + "v2.list_incidents": False, + "v2.list_incident_todos": False, + "v2.list_incident_types": False, + "v2.list_incident_user_defined_fields": False, + "v2.list_incident_user_defined_roles": False, + "v2.list_org_settings": False, + "v2.list_timestamp_overrides": False, + "v2.patch_incident_impact": False, + "v2.search_incidents": False, + "v2.update_global_incident_handle": False, + "v2.update_global_incident_settings": False, + "v2.update_incident": False, + "v2.update_incident_attachment": False, + "v2.update_incident_configuration": False, + "v2.update_incident_google_chat_configuration": False, + "v2.update_incident_google_meet_configuration": False, + "v2.update_incident_impact_field": False, + "v2.update_incident_integration": False, + "v2.update_incident_notification_rule": False, + "v2.update_incident_notification_template": False, + "v2.update_incident_postmortem_template": False, + "v2.update_incident_rule": False, + "v2.update_incident_todo": False, + "v2.update_incident_type": False, + "v2.update_incident_user_defined_field": False, + "v2.update_incident_user_defined_role": False, + "v2.update_timestamp_override": False, + "v2.create_aws_account_ccm_config": False, + "v2.delete_aws_account_ccm_config": False, + "v2.get_aws_account_ccm_config": False, + "v2.get_aws_metric_name_filter_preview": False, + "v2.preview_aws_metric_name_filter": False, + "v2.update_aws_account_ccm_config": False, + "v2.validate_awsccm_config": False, + "v2.create_jira_issue_template": False, + "v2.delete_jira_account": False, + "v2.delete_jira_issue_template": False, + "v2.get_jira_issue_template": False, + "v2.list_jira_accounts": False, + "v2.list_jira_issue_templates": False, + "v2.update_jira_issue_template": False, + "v2.create_tenancy_config": False, + "v2.get_tenancy_configs": False, + "v2.add_role_to_restriction_query": False, + "v2.create_restriction_query": False, + "v2.delete_restriction_query": False, + "v2.get_restriction_query": False, + "v2.get_role_restriction_query": False, + "v2.list_restriction_queries": False, + "v2.list_restriction_query_roles": False, + "v2.list_user_restriction_queries": False, + "v2.remove_role_from_restriction_query": False, + "v2.replace_restriction_query": False, + "v2.update_restriction_query": False, + "v2.create_historical_metrics_configuration": False, + "v2.create_tag_indexing_rule": False, + "v2.create_tag_indexing_rule_exemption": False, + "v2.delete_historical_metrics_configuration": False, + "v2.delete_tag_indexing_rule": False, + "v2.delete_tag_indexing_rule_exemption": False, + "v2.get_historical_metrics_configuration": False, + "v2.get_tag_indexing_rule": False, + "v2.get_tag_indexing_rule_exemption": False, + "v2.list_tag_indexing_rules": False, + "v2.list_tag_indexing_rules_for_metric": False, + "v2.reorder_tag_indexing_rules": False, + "v2.update_tag_indexing_rule": False, + "v2.delete_model_lab_run": False, + "v2.get_model_lab_artifact_content": False, + "v2.get_model_lab_project": False, + "v2.get_model_lab_run": False, + "v2.list_model_lab_project_artifacts": False, + "v2.list_model_lab_project_facet_keys": False, + "v2.list_model_lab_project_facet_values": False, + "v2.list_model_lab_projects": False, + "v2.list_model_lab_run_artifacts": False, + "v2.list_model_lab_run_facet_keys": False, + "v2.list_model_lab_run_facet_values": False, + "v2.list_model_lab_runs": False, + "v2.pin_model_lab_run": False, + "v2.star_model_lab_project": False, + "v2.unpin_model_lab_run": False, + "v2.unstar_model_lab_project": False, + "v2.create_monitor_user_template": False, + "v2.delete_monitor_user_template": False, + "v2.get_monitor_user_template": False, + "v2.list_monitor_user_templates": False, + "v2.update_monitor_user_template": False, + "v2.validate_existing_monitor_user_template": False, + "v2.validate_monitor_user_template": False, + "v2.list_network_health_insights": False, + "v2.delete_scopes_restriction": False, + "v2.get_o_auth2_well_known_sites": False, + "v2.get_scopes_restriction": False, + "v2.register_o_auth_client": False, + "v2.upsert_scopes_restriction": False, + "v2.disable_customer_org": False, + "v2.bulk_update_org_group_memberships": False, + "v2.create_org_group": False, + "v2.create_org_group_policy": False, + "v2.create_org_group_policy_override": False, + "v2.delete_org_group": False, + "v2.delete_org_group_policy": False, + "v2.delete_org_group_policy_override": False, + "v2.get_org_group": False, + "v2.get_org_group_membership": False, + "v2.get_org_group_policy": False, + "v2.get_org_group_policy_override": False, + "v2.list_org_group_memberships": False, + "v2.list_org_group_policies": False, + "v2.list_org_group_policy_configs": False, + "v2.list_org_group_policy_overrides": False, + "v2.list_org_group_policy_suggestions": False, + "v2.list_org_groups": False, + "v2.update_org_group": False, + "v2.update_org_group_membership": False, + "v2.update_org_group_policy": False, + "v2.update_org_group_policy_override": False, + "v2.list_role_templates": False, + "v2.create_connection": False, + "v2.delete_connection": False, + "v2.get_account_facet_info": False, + "v2.get_mapping": False, + "v2.get_user_facet_info": False, + "v2.list_connections": False, + "v2.query_accounts": False, + "v2.query_event_filtered_users": False, + "v2.query_users": False, + "v2.update_connection": False, + "v2.get_pruned_trace_by_id": False, + "v2.get_trace_by_id": False, + "v2.get_asm_service_by_name": False, + "v2.get_rum_sdk_config": False, + "v2.update_rum_sdk_config": False, + "v2.create_report_schedule": False, + "v2.patch_report_schedule": False, + "v2.delete_sourcemaps": False, + "v2.get_service_repository_info": False, + "v2.get_sourcemaps": False, + "v2.list_sourcemaps": False, + "v2.restore_sourcemaps": False, + "v2.create_rum_config": False, + "v2.get_rum_config": False, + "v2.update_rum_config": False, + "v2.create_rum_operation": False, + "v2.create_rum_operation_strong_link": False, + "v2.delete_rum_operation": False, + "v2.delete_rum_operation_strong_link": False, + "v2.get_rum_operation": False, + "v2.get_rum_operation_by_name": False, + "v2.list_rum_operations": False, + "v2.update_rum_operation": False, + "v2.update_rum_operation_strong_link": False, + "v2.query_aggregated_long_tasks": False, + "v2.query_aggregated_signals_problems": False, + "v2.query_aggregated_waterfall": False, + "v2.create_scorecard_outcomes_batch": False, + "v2.get_entity_risk_score": False, + "v2.list_entity_risk_scores": False, + "v2.create_slo_report_job": False, + "v2.get_slo_report": False, + "v2.get_slo_report_job_status": False, + "v2.get_slo_status": False, + "v2.create_snapshot": False, + "v2.get_spa_recommendations": False, + "v2.get_spa_recommendations_with_shard": False, + "v2.create_ai_custom_rule": False, + "v2.create_ai_custom_rule_revision": False, + "v2.create_ai_custom_ruleset": False, + "v2.create_ai_memory_violation_result": False, + "v2.create_custom_rule": False, + "v2.create_custom_rule_revision": False, + "v2.create_custom_ruleset": False, + "v2.create_sca_resolve_vulnerable_symbols": False, + "v2.create_sca_result": False, + "v2.create_sca_scan": False, + "v2.delete_ai_custom_rule": False, + "v2.delete_ai_custom_ruleset": False, + "v2.delete_ai_memory_violation_result": False, + "v2.delete_custom_rule": False, + "v2.delete_custom_ruleset": False, + "v2.get_ai_custom_rule": False, + "v2.get_ai_custom_rule_revision": False, + "v2.get_ai_custom_ruleset": False, + "v2.get_custom_rule": False, + "v2.get_custom_rule_revision": False, + "v2.get_custom_ruleset": False, + "v2.get_sca_scan": False, + "v2.list_ai_custom_rule_revisions": False, + "v2.list_ai_custom_rulesets": False, + "v2.list_ai_memory_violation_results": False, + "v2.list_ai_prompts": False, + "v2.list_custom_rule_revisions": False, + "v2.list_custom_rulesets": False, + "v2.list_sca_licenses": False, + "v2.revert_custom_rule_revision": False, + "v2.update_ai_custom_ruleset": False, + "v2.update_custom_ruleset": False, + "v2.create_tag_policy": False, + "v2.delete_tag_policy": False, + "v2.get_tag_policy": False, + "v2.get_tag_policy_score": False, + "v2.list_tag_policies": False, + "v2.update_tag_policy": False, + "v2.add_member_team": False, + "v2.list_member_teams": False, + "v2.remove_member_team": False, + "v2.create_web_integration_account": False, + "v2.delete_web_integration_account": False, + "v2.get_web_integration_account": False, + "v2.list_web_integration_accounts": False, + "v2.update_web_integration_account": False, + }) + + # Delegated token configuration + self.delegated_token_config = None + self.delegated_auth_provider = delegated_auth_provider + self.delegated_auth_org_uuid = delegated_auth_org_uuid + self._delegated_token_credentials = None + + # Load default values from environment + if "DD_SITE" in os.environ: + self.server_variables["site"] = os.environ["DD_SITE"] + if "DD_API_KEY" in os.environ and not self.api_key.get("apiKeyAuth"): + self.api_key["apiKeyAuth"] = os.environ["DD_API_KEY"] + if "DD_APP_KEY" in os.environ and not self.api_key.get("appKeyAuth"): + self.api_key["appKeyAuth"] = os.environ["DD_APP_KEY"] + + def __deepcopy__(self, memo): + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.__dict__.items(): + if k not in ("logger", "logger_file_handler"): + setattr(result, k, copy.deepcopy(v, memo)) + # Shallow copy of loggers + result.logger = copy.copy(self.logger) + # Use setters to configure loggers + result.logger_file = self.logger_file + result.debug = self.debug + return result + + def __setattr__(self, name, value): + object.__setattr__(self, name, value) + if name == "disabled_client_side_validations": + s = set(filter(None, value.split(","))) + for v in s: + if v not in JSON_SCHEMA_VALIDATION_KEYWORDS: + raise ApiValueError("Invalid keyword: '{0}''".format(v)) + self._disabled_client_side_validations = s + + @property + def logger_file(self): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :return: The logger_file path. + :rtype: str + """ + return self._logger_file + + @logger_file.setter + def logger_file(self, value): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type value: str + """ + self._logger_file = value + if self._logger_file: + # If set logging file, + # then add file handler and remove stream handler. + self.logger_file_handler = logging.FileHandler(self._logger_file) + self.logger_file_handler.setFormatter(self.logger_formatter) + for _, logger in self.logger.items(): + logger.addHandler(self.logger_file_handler) + + @property + def debug(self): + """Debug status. + + :return: The debug status, True or False. + :rtype: bool + """ + return self._debug + + @debug.setter + def debug(self, value): + """Debug status. + + :param value: The debug status, True or False. + :type value: bool + """ + self._debug = value + if self._debug: + # if debug status is True, turn on debug logging + for _, logger in self.logger.items(): + logger.setLevel(logging.DEBUG) + # turn on http_client debug + http_client.HTTPConnection.debuglevel = 1 + else: + # if debug status is False, turn off debug logging, + # setting log level to default `logging.WARNING` + for _, logger in self.logger.items(): + logger.setLevel(logging.WARNING) + # turn off http_client debug + http_client.HTTPConnection.debuglevel = 0 + + @property + def logger_format(self): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :return: The format string. + :rtype: str + """ + return self._logger_format + + @logger_format.setter + def logger_format(self, value): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type value: str + """ + self._logger_format = value + self.logger_formatter = logging.Formatter(self._logger_format) + + @property + def retry_backoff_factor(self): + """Retry backoff factor. + + :return: The backoff factor, float + :rtype: float + """ + return self._retry_backoff_factor + + @retry_backoff_factor.setter + def retry_backoff_factor(self, value): + """Retry backoff factor. + + :param value: The backoff factor used to calculate intervals between retry attempts + :type value: float + """ + if value < 2: + raise ValueError("Retry backoff factor cannot be smaller than 2") + self._retry_backoff_factor = value + + def get_api_key_with_prefix(self, identifier, alias=None): + """Gets API key (with prefix if set). + + :param identifier: The identifier of apiKey. + :param alias: The alternative identifier of apiKey. + + :return: The token for api key authentication. + """ + if self.refresh_api_key_hook is not None: + self.refresh_api_key_hook(self) + key = self.api_key.get(identifier, self.api_key.get(alias) if alias is not None else None) + if key: + prefix = self.api_key_prefix.get(identifier) + if prefix: + return "%s %s" % (prefix, key) + return key + + def get_basic_auth_token(self): + """Gets HTTP basic authentication header (string). + + :return: The token for basic HTTP authentication. + """ + username = "" + if self.username is not None: + username = self.username + password = "" + if self.password is not None: + password = self.password + return urllib3.util.make_headers(basic_auth=username + ":" + password).get("authorization") + + def get_host_settings(self): + """Gets an array of host settings + + :return: An array of host settings + """ + return [ + { + "url": "https://{subdomain}.{site}", + "description": "No description provided", + "variables": { + "site": { + "description": "The regional site for Datadog customers.", + "default_value": "datadoghq.com", + "enum_values": [ + "datadoghq.com", + "us3.datadoghq.com", + "us5.datadoghq.com", + "ap1.datadoghq.com", + "ap2.datadoghq.com", + "uk1.datadoghq.com", + "datadoghq.eu", + "ddog-gov.com", + "us2.ddog-gov.com", + "uk1.datadoghq.com", + ], + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "api", + }, + }, + }, + { + "url": "{protocol}://{name}", + "description": "No description provided", + "variables": { + "name": { + "description": "Full site DNS name.", + "default_value": "api.datadoghq.com", + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.{site}", + "description": "No description provided", + "variables": { + "site": { + "description": "Any Datadog deployment.", + "default_value": "datadoghq.com", + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "api", + }, + }, + }, + ] + + def get_host_from_settings(self, index, variables=None, servers=None): + """Gets host URL based on the index and variables. + + :param index: Array index of the host settings. + :param variables: Hash of variable and the corresponding value. + :param servers: An array of host settings or None. + + :return: URL based on host settings. + """ + if index is None: + return self._base_path + + variables = {} if variables is None else variables + servers = self.get_host_settings() if servers is None else servers + + try: + server = servers[index] + except IndexError: + raise ValueError( + "Invalid index {} when selecting the host settings. " + "Must be less than {}".format(index, len(servers)) + ) + + url = server["url"] + + # go through variables and replace placeholders + for variable_name, variable in server.get("variables", {}).items(): + used_value = variables.get(variable_name, variable["default_value"]) + + if "enum_values" in variable and used_value not in variable["enum_values"]: + raise ValueError( + "The variable `{}` in the host URL has invalid value " + "{}. Must be {}.".format(variable_name, variables[variable_name], variable["enum_values"]) + ) + + url = url.replace(f"{{{variable_name}}}", used_value) + + return url + + @property + def host(self): + """Return generated host.""" + return self.get_host_from_settings(self.server_index, variables=self.server_variables) + + @host.setter + def host(self, value): + """Fix base path.""" + self._base_path = value + self.server_index = None + + def auth_settings(self): + """Gets Auth Settings dict for api client. + + :return: The Auth Settings information dict. + """ + auth = {} + if self.access_token is not None: + auth["AuthZ"] = { + "type": "oauth2", + "in": "header", + "key": "Authorization", + "value": "Bearer " + self.access_token, + } + if "apiKeyAuth" in self.api_key: + auth["apiKeyAuth"] = { + "type": "api_key", + "in": "header", + "key": "DD-API-KEY", + "value": self.get_api_key_with_prefix( + "apiKeyAuth", + ), + } + if "appKeyAuth" in self.api_key: + auth["appKeyAuth"] = { + "type": "api_key", + "in": "header", + "key": "DD-APPLICATION-KEY", + "value": self.get_api_key_with_prefix( + "appKeyAuth", + ), + } + return auth diff --git a/datadog_api_client/delegated_auth.py b/datadog_api_client/delegated_auth.py new file mode 100644 index 0000000000..f1a060e664 --- /dev/null +++ b/datadog_api_client/delegated_auth.py @@ -0,0 +1,161 @@ +# 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. + +import json +import time +from datetime import datetime, timedelta +from typing import Optional +from urllib.parse import urljoin + +from datadog_api_client import rest +from datadog_api_client.configuration import Configuration +from datadog_api_client.exceptions import ApiValueError + + +TOKEN_URL_ENDPOINT = "/api/v2/delegated-token" +AUTHORIZATION_TYPE = "Delegated" +APPLICATION_JSON = "application/json" + + +class DelegatedTokenCredentials: + """Credentials for delegated token authentication.""" + + def __init__(self, org_uuid: str, delegated_token: str, delegated_proof: str, expiration: datetime): + self.org_uuid = org_uuid + self.delegated_token = delegated_token + self.delegated_proof = delegated_proof + self.expiration = expiration + + def is_expired(self) -> bool: + """Check if the token is expired.""" + return datetime.now() >= self.expiration + + +class DelegatedTokenConfig: + """Configuration for delegated token authentication.""" + + def __init__(self, org_uuid: str, provider: str, provider_auth: 'DelegatedTokenProvider'): + self.org_uuid = org_uuid + self.provider = provider + self.provider_auth = provider_auth + + +class DelegatedTokenProvider: + """Abstract base class for delegated token providers.""" + + def __init__(self): + self._rest_client = None + + def authenticate(self, config: DelegatedTokenConfig, api_config: Configuration) -> DelegatedTokenCredentials: + """Authenticate and return delegated token credentials. + + :param config: Delegated token configuration + :param api_config: API client configuration with host and other settings + :return: DelegatedTokenCredentials object + """ + raise NotImplementedError("Subclasses must implement authenticate method") + + +def get_delegated_token(org_uuid: str, delegated_auth_proof: str, config: Configuration, provider=None) -> DelegatedTokenCredentials: + """Get a delegated token from the Datadog API. + + :param org_uuid: Organization UUID + :param delegated_auth_proof: Authentication proof string + :param config: Configuration object with host and other settings + :param provider: Optional provider instance that may have a cached REST client + :return: DelegatedTokenCredentials object + :raises: ApiValueError if the request fails + """ + url = get_delegated_token_url(config) + + # Use provider's cached REST client if available, otherwise create a new one + if provider and hasattr(provider, '_rest_client') and provider._rest_client is not None: + rest_client = provider._rest_client + else: + rest_client = rest.RESTClientObject(config) + # Cache it in the provider if provided + if provider: + provider._rest_client = rest_client + + headers = { + "Content-Type": APPLICATION_JSON, + "Authorization": f"{AUTHORIZATION_TYPE} {delegated_auth_proof}", + "Content-Length": "0" + } + + try: + response = rest_client.request( + method="POST", + url=url, + headers=headers, + body="", + preload_content=True + ) + + if response.status != 200: + raise ApiValueError(f"Failed to get token: {response.status}") + + response_data = response.data.decode('utf-8') + creds = parse_delegated_token_response(response_data, org_uuid, delegated_auth_proof) + return creds + + except Exception as e: + raise ApiValueError(f"Failed to get delegated token: {str(e)}") + + +def parse_delegated_token_response(response_data: str, org_uuid: str, delegated_auth_proof: str) -> DelegatedTokenCredentials: + """Parse the delegated token response. + + :param response_data: JSON response data as string + :param org_uuid: Organization UUID + :param delegated_auth_proof: Authentication proof string + :return: DelegatedTokenCredentials object + :raises: ApiValueError if parsing fails + """ + try: + token_response = json.loads(response_data) + except json.JSONDecodeError as e: + raise ApiValueError(f"Failed to parse token response: {str(e)}") + + # Get attributes from the response + data_response = token_response.get("data") + if not data_response: + raise ApiValueError(f"Failed to get data from response: {token_response}") + + attributes = data_response.get("attributes") + if not attributes: + raise ApiValueError(f"Failed to get attributes from response: {token_response}") + + # Get the access token from the response + token = attributes.get("access_token") + if not token: + raise ApiValueError(f"Failed to get token from response: {token_response}") + + # get expiration time from the response, default to 15 min + expiration_time = datetime.now() + timedelta(minutes=15) + expires_str = attributes.get("expires") + if expires_str: + try: + expiration_int = int(expires_str) + expiration_time = datetime.fromtimestamp(expiration_int) + except (ValueError, TypeError): + # Use default expiration if parsing fails + pass + + return DelegatedTokenCredentials( + org_uuid=org_uuid, + delegated_token=token, + delegated_proof=delegated_auth_proof, + expiration=expiration_time + ) + + +def get_delegated_token_url(config: Configuration) -> str: + """Get the URL for the delegated token endpoint. + + :param config: Configuration object + :return: Full URL for the delegated token endpoint + """ + base_url = config.host + return urljoin(base_url, TOKEN_URL_ENDPOINT) \ No newline at end of file diff --git a/datadog_api_client/exceptions.py b/datadog_api_client/exceptions.py new file mode 100644 index 0000000000..39cf939067 --- /dev/null +++ b/datadog_api_client/exceptions.py @@ -0,0 +1,146 @@ +# 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. + +import json + + +class OpenApiException(Exception): + """The base exception class for all OpenAPIExceptions""" + + +class ApiTypeError(OpenApiException, TypeError): + def __init__(self, msg, path_to_item=None, valid_classes=None, key_type=None): + """Raises an exception for TypeErrors. + + :param msg: The exception message. + :type msg: str + :param path_to_item: A list of keys an indices to get to the + current_item None if unset. + :type path_to_item: list + :param valid_classes: The primitive classes that current item should + be an instance of None if unset. + :type valid_classes: tuple + :param key_type: False if our value is a value in a dict True if + it is a key in a dict False if our item is an item in a list None if unset. + :type key_type: bool + """ + self.path_to_item = path_to_item + self.valid_classes = valid_classes + self.key_type = key_type + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiTypeError, self).__init__(full_msg) + + +class ApiValueError(OpenApiException, ValueError): + def __init__(self, msg, path_to_item=None): + """ + :param msg: The exception message. + :type msg: str + + :param path_to_item: The path to the exception in the received_data + dict. None if unset. + :type path_to_item: list + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiValueError, self).__init__(full_msg) + + +class ApiAttributeError(OpenApiException, AttributeError): + def __init__(self, msg, path_to_item=None): + """ + Raised when an attribute reference or assignment fails. + + :param msg: The exception message. + :type msg: str + + :param path_to_item: The path to the exception in the received_data + dict. None if unset. + :type path_to_item: list + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiAttributeError, self).__init__(full_msg) + + +class ApiKeyError(OpenApiException, KeyError): + def __init__(self, msg, path_to_item=None): + """ + :param msg: The exception message. + :type msg: str + + :param path_to_item: The path to the exception in the received_data + dict. None if unset. + :type path_to_item: list + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiKeyError, self).__init__(full_msg) + + +class ApiException(OpenApiException): + def __init__(self, status=None, reason=None, http_resp=None): + if http_resp: + self.status = http_resp.status + self.reason = http_resp.reason + try: + self.body = json.loads(http_resp.data) + except Exception: + self.body = http_resp.data.decode("utf-8") + self.headers = dict(http_resp.headers) + else: + self.status = status + self.reason = reason + self.body = None + self.headers = None + + def __str__(self): + """Custom error messages for exception""" + error_message = "({0})\n" "Reason: {1}\n".format(self.status, self.reason) + if self.headers: + error_message += "HTTP response headers: {0}\n".format(self.headers) + + if self.body: + error_message += "HTTP response body: {0}\n".format(self.body) + + return error_message + + +class NotFoundException(ApiException): + def __init__(self, status=None, reason=None, http_resp=None): + super(NotFoundException, self).__init__(status, reason, http_resp) + + +class UnauthorizedException(ApiException): + def __init__(self, status=None, reason=None, http_resp=None): + super(UnauthorizedException, self).__init__(status, reason, http_resp) + + +class ForbiddenException(ApiException): + def __init__(self, status=None, reason=None, http_resp=None): + super(ForbiddenException, self).__init__(status, reason, http_resp) + + +class ServiceException(ApiException): + def __init__(self, status=None, reason=None, http_resp=None): + super(ServiceException, self).__init__(status, reason, http_resp) + + +def render_path(path_to_item): + """Returns a string representation of a path""" + result = "" + for pth in path_to_item: + if isinstance(pth, int): + result += "[{0}]".format(pth) + else: + result += "['{0}']".format(pth) + return result diff --git a/datadog_api_client/model_utils.py b/datadog_api_client/model_utils.py new file mode 100644 index 0000000000..3ba0bac1a3 --- /dev/null +++ b/datadog_api_client/model_utils.py @@ -0,0 +1,1880 @@ +# 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 contextlib import suppress +from datetime import date, datetime +from uuid import UUID +import enum +from functools import lru_cache +import inspect +import io +import os +import pprint +import re +import tempfile +from types import MappingProxyType +from typing import Collection, Mapping, Union, overload +from typing_extensions import Final, Self + +from dateutil.parser import parse + +from datadog_api_client.exceptions import ( + ApiKeyError, + ApiAttributeError, + ApiTypeError, + ApiValueError, +) + +none_type = type(None) +file_type = io.IOBase +empty_dict = MappingProxyType({}) # type: ignore + + +def _make_hashable(obj): + """Convert potentially unhashable objects to hashable representations for caching.""" + if isinstance(obj, (list, tuple)): + return tuple(_make_hashable(item) for item in obj) + elif isinstance(obj, dict): + return tuple(sorted((_make_hashable(k), _make_hashable(v)) for k, v in obj.items())) + elif isinstance(obj, set): + return tuple(sorted(_make_hashable(item) for item in obj)) + else: + try: + hash(obj) + return obj + except TypeError: + return str(obj) + + +class UnsetType(enum.Enum): + unset = 0 + + +unset: Final = UnsetType.unset + + +class cached_property(object): + # This caches the result of the function call for fn with no inputs + # use this as a decorator on function methods that you want converted + # into cached properties + result_key = "_results" + + def __init__(self, fn): + self._fn = fn + + def __get__(self, instance, cls=None): + if self.result_key in vars(self): + return vars(self)[self.result_key] + else: + result = self._fn(instance) + setattr(self, self.result_key, result) + return result + + +PRIMITIVE_TYPES = (list, float, int, bool, datetime, date, str, UUID, file_type) + + +def allows_single_value_input(cls): + """ + This function returns True if the input composed schema model or any + descendant model allows a value only input. + """ + if issubclass(cls, ModelSimple) or cls in PRIMITIVE_TYPES: + return True + elif issubclass(cls, ModelComposed): + if not cls._composed_schemas["oneOf"]: + return False + return any( + isinstance(c, list) or allows_single_value_input(c) for c in cls._composed_schemas["oneOf"] + ) + return False + + +def composed_model_input_classes(cls): + """ + This function returns a list of the possible models that can be accepted as + inputs. + """ + # Handle list types (e.g., [str], [float]) + if isinstance(cls, list): + return [cls] + if issubclass(cls, ModelSimple) or cls in PRIMITIVE_TYPES: + return [cls] + elif issubclass(cls, ModelNormal): + return [cls] + elif issubclass(cls, ModelComposed): + if not cls._composed_schemas["oneOf"]: + return [] + input_classes = [] + for c in cls._composed_schemas["oneOf"]: + input_classes.extend(composed_model_input_classes(c)) + return input_classes + return [] + + +class OpenApiModel: + """The base class for all OpenAPIModels. + + :var attribute_map: The key is attribute name and the value is json + key in definition. + :type attribute_map: dict + :var validations: The key is the name of the attribute. The value is a dict + that stores validations for max_length, min_length, max_items, + min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum, + inclusive_minimum, and regex. + :type validations: dict + :var additional_properties_type: A tuple of classes accepted + as additional properties values. + :type additional_properties_type: tuple + """ + + _composed_schemas = empty_dict + + additional_properties_type = (bool, date, datetime, dict, float, int, list, str, UUID, none_type,) + + attribute_map: Mapping[str, str] = empty_dict + + _nullable = False + + validations: Mapping[str, Mapping[str, Union[int, float]]] = empty_dict + + openapi_types = empty_dict + + read_only_vars: Collection[str] = frozenset() + + def set_attribute(self, name, value): + # this is only used to set properties on self + + path_to_item = [] + if self._path_to_item: + path_to_item.extend(self._path_to_item) + path_to_item.append(name) + + if name in self.openapi_types: + required_types_mixed = self.openapi_types[name] + elif self.additional_properties_type is None: + raise ApiAttributeError("{0} has no attribute '{1}'".format(type(self).__name__, name), path_to_item) + elif self.additional_properties_type is not None: + required_types_mixed = self.additional_properties_type + + if get_simple_class(name) != str: + error_msg = type_error_message(var_name=name, var_value=name, valid_classes=(str,), key_type=True) + raise ApiTypeError(error_msg, path_to_item=path_to_item, valid_classes=(str,), key_type=True) + + if self._check_type and value is not None: + value = validate_and_convert_types( + value, + required_types_mixed, + path_to_item, + self._spec_property_naming, + self._check_type, + configuration=self._configuration, + ) + if isinstance(value, list): + for x in value: + if isinstance(x, UnparsedObject) or (isinstance(x, OpenApiModel) and x._unparsed): + self._unparsed = True + if name in self.validations: + check_validations(self.validations[name], name, value, self._configuration) + self.__dict__["_data_store"][name] = value + if isinstance(value, OpenApiModel) and value._unparsed: + self._unparsed = True + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other + + def __setattr__(self, attr, value): + """Set the value of an attribute using dot notation: `instance.attr = val`.""" + self[attr] = value + + def __getattr__(self, attr): + """Get the value of an attribute using dot notation: `instance.attr`.""" + return self.__getitem__(attr) + + @overload + def __new__(cls, arg: None) -> None: # type: ignore + ... + + @overload + def __new__(cls, arg: "ModelComposed") -> Self: + ... + + @overload + def __new__(cls, *args, **kwargs) -> Self: + ... + + def __new__(cls, *args, **kwargs): + if len(args) == 1: + arg = args[0] + if arg is None and is_type_nullable(cls): + # The input data is the 'null' value and the type is nullable. + return None + + if issubclass(cls, ModelComposed) and allows_single_value_input(cls): + model_kwargs = {} + oneof_instance = get_oneof_instance(cls, model_kwargs, kwargs, model_arg=arg) + return oneof_instance + + return super().__new__(cls) + + def __init__(self, kwargs): + """ + :param _check_type: If True, values for parameters in openapi_types + will be type checked and a TypeError will be raised if the wrong type is input. + Defaults to True. + :type _check_type: bool + :param _path_to_item: This is a list of keys or values to drill down to + the model in received_data when deserializing a response. + :type _path_to_item: tuple/list + :param _spec_property_naming: True if the variable names in the input + data are serialized names, as specified in the OpenAPI document. False if the + variable names in the input data are pythonic names, e.g. snake case (default). + :type _spec_property_naming: bool + :param _configuration: The instance to use when deserializing a + file_type parameter. If passed, type conversion is attempted If omitted no + type conversion is done. + :type _configuration: Configuration + """ + _check_type = kwargs.pop("_check_type", True) + _spec_property_naming = kwargs.pop("_spec_property_naming", False) + _path_to_item = kwargs.pop("_path_to_item", ()) + _configuration = kwargs.pop("_configuration", None) + + self._data_store = {} + self._check_type = _check_type + self._spec_property_naming = _spec_property_naming + self._path_to_item = _path_to_item + self._configuration = _configuration + self._unparsed = False + + def _check_pos_args(self, args): + if args: + raise ApiTypeError( + "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." + % ( + args, + self.__class__.__name__, + ), + path_to_item=self._path_to_item, + valid_classes=(self.__class__,), + ) + + def _check_kw_args(self, kwargs): + if kwargs: + raise ApiTypeError( + "Invalid named arguments=%s passed to %s. Remove those invalid named arguments." + % ( + kwargs, + self.__class__.__name__, + ), + path_to_item=self._path_to_item, + valid_classes=(self.__class__,), + ) + + +class ModelSimple(OpenApiModel): + """ + The parent class of models whose type != object in their + swagger/openapi. + + :var allowed_values: Set of allowed values. + :type allowed_values: set + """ + + allowed_values: Collection[Union[str, int]] = frozenset() + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_unparsed", + ] + ) + + def __init__(self, value, **kwargs): + super().__init__(kwargs) + self.value = value + self._check_kw_args(kwargs) + + def __setitem__(self, name, value): + """Set the value of an attribute using square-bracket notation: `instance[attr] = val`.""" + if name in self.required_properties: + self.__dict__[name] = value + return + + if self.allowed_values and name == "value": + try: + check_allowed_values(self.allowed_values, name, value) + except ApiValueError: + self.__dict__["_data_store"][name] = value + self._unparsed = True + return + + self.set_attribute(name, value) + + def get(self, name, default=None): + """Returns the value of an attribute or some default value if the attribute was not set.""" + if name in self.required_properties: + return self.__dict__[name] + + return self.__dict__["_data_store"].get(name, default) + + def __getitem__(self, name): + """Get the value of an attribute using square-bracket notation: `instance[attr]`.""" + if name in self: + return self.get(name) + + raise ApiAttributeError( + "{0} has no attribute '{1}'".format(type(self).__name__, name), [e for e in (self._path_to_item, name) if e] + ) + + def __contains__(self, name): + """Used by `in` operator to check if an attribute value was set in an instance: `'attr' in instance`.""" + if name in self.required_properties: + return name in self.__dict__ + + return name in self.__dict__["_data_store"] + + def to_str(self): + """Returns the string representation of the model""" + return str(self.value) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + this_val = self._data_store["value"] + that_val = other._data_store["value"] + return this_val == that_val + + +class ModelNormal(OpenApiModel): + """ + The parent class of models whose type == object in their swagger/openapi. + """ + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_unparsed", + ] + ) + + def __setitem__(self, name, value): + """Set the value of an attribute using square-bracket notation: `instance[attr] = val`.""" + if name in self.required_properties: + self.__dict__[name] = value + return + + self.set_attribute(name, value) + + def get(self, name, default=None): + """Returns the value of an attribute or some default value if the attribute was not set.""" + if name in self.required_properties: + return self.__dict__[name] + + return self.__dict__["_data_store"].get(name, default) + + def __getitem__(self, name): + """Get the value of an attribute using square-bracket notation: `instance[attr]`.""" + if name in self: + return self.get(name) + + raise ApiAttributeError( + "{0} has no attribute '{1}'".format(type(self).__name__, name), [e for e in (self._path_to_item, name) if e] + ) + + def __contains__(self, name): + """Used by `in` operator to check if an attribute value was set in an instance: `'attr' in instance`.""" + if name in self.required_properties: + return name in self.__dict__ + + return name in self.__dict__["_data_store"] + + def to_dict(self): + """Returns the model properties as a dict""" + return model_to_dict(self, serialize=False) + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + if not set(self._data_store.keys()) == set(other._data_store.keys()): + return False + for _var_name, this_val in self._data_store.items(): + that_val = other._data_store[_var_name] + if this_val != that_val: + return False + return True + + def __init__(self, kwargs): + super().__init__(kwargs) + for var_name, var_value in kwargs.items(): + setattr(self, var_name, var_value) + if not self._spec_property_naming and var_name in self.read_only_vars: + raise ApiAttributeError(f"`{var_name}` is a read-only attribute.") + + +class ModelComposed(OpenApiModel): + """ + The parent class of models whose type == object in their swagger/openapi + and have oneOf. + + When one sets a property we use var_name_to_model_instances to store the value in + the correct class instances + run any type checking + validation code. + When one gets a property we use var_name_to_model_instances to get the value + from the correct class instances. + This allows multiple composed schemas to contain the same property with additive + constraints on the value. + + :var _composed_schemas: Stores the oneOf classes. + :type _composed_schemas: dict + :var _composed_instances: Stores a list of instances of the composed schemas + defined in _composed_schemas. When properties are accessed in the self instance, + they are returned from the self._data_store or the data stores in the instances + in self._composed_schemas. + :type _composed_schemas: list + :var _var_name_to_model_instances: Map between a variable name on self and + the composed instances (self included) which contain that data. + :type _var_name_to_model_instances: dict + """ + + required_properties = set( + [ + "_data_store", + "_check_type", + "_spec_property_naming", + "_path_to_item", + "_configuration", + "_composed_instances", + "_var_name_to_model_instances", + "_additional_properties_model_instances", + "_unparsed", + ] + ) + + def __init__(self, kwargs): + super().__init__(kwargs) + constant_args = { + "_check_type": self._check_type, + "_path_to_item": self._path_to_item, + "_spec_property_naming": self._spec_property_naming, + "_configuration": self._configuration, + } + composed_info = validate_get_composed_info(constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + self._unparsed = any(isinstance(composed_instance, UnparsedObject) + for composed_instance in self._composed_instances) + + def __setitem__(self, name, value): + """Set the value of an attribute using square-bracket notation: `instance[attr] = val`.""" + if name in self.required_properties: + self.__dict__[name] = value + return + + # Set attribute on composed instances + for model_instance in self._composed_instances: + setattr(model_instance, name, value) + if name not in self._var_name_to_model_instances: + # we assigned an additional property + self.__dict__["_var_name_to_model_instances"][name] = self._composed_instances + [self] + return None + + __unset_attribute_value__ = object() + + def get(self, name, default=None): + """Returns the value of an attribute or some default value if the attribute was not set.""" + if name in self.required_properties: + return self.__dict__[name] + + # get the attribute from the correct instance + model_instances = self._var_name_to_model_instances.get(name) + values = [] + # A composed model stores self and child (oneof) models under + # self._var_name_to_model_instances. + # Any property must exist in self and all model instances + # The value stored in all model instances must be the same + if model_instances: + for model_instance in model_instances: + if name in model_instance._data_store: + v = model_instance._data_store[name] + if v not in values: + values.append(v) + len_values = len(values) + if len_values == 0: + return default + elif len_values == 1: + return values[0] + elif len_values > 1: + raise ApiValueError( + "Values stored for property {0} in {1} differ when looking " + "at self and self's composed instances. All values must be " + "the same".format(name, type(self).__name__), + [e for e in (self._path_to_item, name) if e], + ) + + def __getitem__(self, name): + """Get the value of an attribute using square-bracket notation: `instance[attr]`.""" + value = self.get(name, self.__unset_attribute_value__) + if value is self.__unset_attribute_value__: + raise ApiAttributeError( + "{0} has no attribute '{1}'".format(type(self).__name__, name), + [e for e in (self._path_to_item, name) if e], + ) + return value + + def __contains__(self, name): + """Used by `in` operator to check if an attribute value was set in an instance: `'attr' in instance`.""" + + if name in self.required_properties: + return name in self.__dict__ + + model_instances = self._var_name_to_model_instances.get(name, self._additional_properties_model_instances) + + if model_instances: + for model_instance in model_instances: + if name in model_instance._data_store: + return True + + return False + + def to_dict(self): + """Returns the model properties as a dict""" + return model_to_dict(self, serialize=False) + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def get_oneof_instance(self): + """Returns the oneOf instance""" + return self._composed_instances[0] + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, self.__class__): + return False + + if not set(self._data_store.keys()) == set(other._data_store.keys()): + return False + for _var_name, this_val in self._data_store.items(): + that_val = other._data_store[_var_name] + if this_val != that_val: + return False + return True + + +COERCION_INDEX_BY_TYPE = { + ModelComposed: 0, + ModelNormal: 1, + ModelSimple: 2, + none_type: 3, # The type of 'None'. + list: 4, + dict: 5, + float: 6, + int: 7, + bool: 8, + datetime: 9, + date: 10, + str: 11, + UUID: 12, + file_type: 13, # 'file_type' is an alias for the built-in 'file' or 'io.IOBase' type. +} + +# these are used to limit what type conversions we try to do +# when we have a valid type already and we want to try converting +# to another type +UPCONVERSION_TYPE_PAIRS = ( + (str, datetime), + (str, date), + # (str, UUID), # Strings shouldn't always be converted to UUIDs, only when the format is a UUID explicitly. + (int, float), # A float may be serialized as an integer, e.g. '3' is a valid serialized float. + (list, ModelComposed), + (dict, ModelComposed), + (bool, ModelComposed), + (str, ModelComposed), + (int, ModelComposed), + (float, ModelComposed), + (list, ModelComposed), + (list, ModelNormal), + (dict, ModelNormal), + (bool, ModelSimple), + (str, ModelSimple), + (int, ModelSimple), + (float, ModelSimple), + (list, ModelSimple), +) + +COERCIBLE_TYPE_PAIRS = { + False: ( # client instantiation of a model with client data + # (dict, ModelComposed), + # (list, ModelComposed), + # (dict, ModelNormal), + # (list, ModelNormal), + # (str, ModelSimple), + # (int, ModelSimple), + # (float, ModelSimple), + # (list, ModelSimple), + # (str, int), + # (str, float), + # (str, datetime), + # (str, date), + # (int, str), + # (float, str), + ), + True: ( # server -> client data + (dict, ModelComposed), + (list, ModelComposed), + (dict, ModelNormal), + (list, ModelNormal), + (bool, ModelSimple), + (str, ModelSimple), + (int, ModelSimple), + (float, ModelSimple), + (list, ModelSimple), + # (str, int), + # (str, float), + (str, datetime), + (str, date), + (str, UUID), + # (int, str), + # (float, str), + (str, file_type), + ), +} + + +def get_simple_class(input_value): + """Returns an input_value's simple class that we will use for type checking. + + :param input_value: The item for which we will return the simple class. + :type input_value: class/class_instance + """ + if isinstance(input_value, type): + # input_value is a class + return input_value + elif isinstance(input_value, tuple): + return tuple + elif isinstance(input_value, list): + return list + elif isinstance(input_value, dict): + return dict + elif input_value is None: + return none_type + elif isinstance(input_value, file_type): + return file_type + elif isinstance(input_value, bool): + # this must be higher than the int check because + # isinstance(True, int) == True + return bool + elif isinstance(input_value, int): + return int + elif isinstance(input_value, datetime): + # this must be higher than the date check because + # isinstance(datetime_instance, date) == True + return datetime + elif isinstance(input_value, date): + return date + elif isinstance(input_value, str): + return str + elif isinstance(input_value, UUID): + return UUID + return type(input_value) + + +def check_allowed_values(allowed_values, input_variable, input_values): + """Raises an exception if the input_values are not allowed. + + :type allowed_values: set + :param input_variable: The name of the input variable. + :type input_variable: str + :param input_values: The values that we are checking to see if they are in + allowed_values. + :type input_values: list/str/int/float/date/datetime/uuid + """ + if isinstance(input_values, list) and not set(input_values).issubset(allowed_values): + invalid_values = (", ".join(map(str, set(input_values) - allowed_values)),) + raise ApiValueError( + "Invalid values for `%s` [%s], must be a subset of [%s]" + % (input_variable, invalid_values, ", ".join(str(v) for v in allowed_values)) + ) + elif isinstance(input_values, dict) and not set(input_values.keys()).issubset(allowed_values): + invalid_values = ", ".join(map(str, set(input_values.keys()) - allowed_values)) + raise ApiValueError( + "Invalid keys in `%s` [%s], must be a subset of [%s]" + % (input_variable, invalid_values, ", ".join(str(v) for v in allowed_values)) + ) + elif not isinstance(input_values, (list, dict)) and input_values not in allowed_values: + raise ApiValueError( + "Invalid value for `%s` (%s), must be one of %s" % (input_variable, input_values, allowed_values) + ) + + +def is_json_validation_enabled(schema_keyword, configuration=None): + """ + Returns True if JSON schema validation is enabled for the specified + validation keyword. This can be used to skip JSON schema structural validation + as requested in the configuration. + + :param schema_keyword: The name of a JSON schema validation keyword. + :type schema_keyword: string + :param configuration: The configuration instance. + :type configuration: Configuration + """ + return ( + configuration is None + or not hasattr(configuration, "_disabled_client_side_validations") + or schema_keyword not in configuration._disabled_client_side_validations + ) + + +def check_validations(validations, input_variable, input_values, configuration=None): + """Raises an exception if the input_values are invalid. + + :param validations: The validation dictionary. + :type validations: dict + :param input_variable: The name of the input variable. + :type input_variable: str + :param input_values: The values that we are checking. + :type input_values: list/str/int/float/date/datetime/uuid + :param configuration: The configuration instance. + :type configuration: Configuration + """ + if input_values is None: + return + + if ( + is_json_validation_enabled("multipleOf", configuration) + and "multiple_of" in validations + and isinstance(input_values, (int, float)) + and not (float(input_values) / validations["multiple_of"]).is_integer() + ): + # Note 'multipleOf' will be as good as the floating point arithmetic. + raise ApiValueError( + "Invalid value for `%s`, value must be a multiple of " "`%s`" % (input_variable, validations["multiple_of"]) + ) + + if ( + is_json_validation_enabled("maxLength", configuration) + and "max_length" in validations + and len(input_values) > validations["max_length"] + ): + raise ApiValueError( + "Invalid value for `%s`, length must be less than or equal to " + "`%s`" % (input_variable, validations["max_length"]) + ) + + if ( + is_json_validation_enabled("minLength", configuration) + and "min_length" in validations + and len(input_values) < validations["min_length"] + ): + raise ApiValueError( + "Invalid value for `%s`, length must be greater than or equal to " + "`%s`" % (input_variable, validations["min_length"]) + ) + + if ( + is_json_validation_enabled("maxItems", configuration) + and "max_items" in validations + and len(input_values) > validations["max_items"] + ): + raise ApiValueError( + "Invalid value for `%s`, number of items must be less than or " + "equal to `%s`" % (input_variable, validations["max_items"]) + ) + + if ( + is_json_validation_enabled("minItems", configuration) + and "min_items" in validations + and len(input_values) < validations["min_items"] + ): + raise ValueError( + "Invalid value for `%s`, number of items must be greater than or " + "equal to `%s`" % (input_variable, validations["min_items"]) + ) + + items = ("exclusive_maximum", "inclusive_maximum", "exclusive_minimum", "inclusive_minimum") + if any(item in validations for item in items): + if isinstance(input_values, list): + max_val = max(input_values) + min_val = min(input_values) + elif isinstance(input_values, dict): + max_val = max(input_values.values()) + min_val = min(input_values.values()) + else: + max_val = input_values + min_val = input_values + + if ( + is_json_validation_enabled("exclusiveMaximum", configuration) + and "exclusive_maximum" in validations + and max_val >= validations["exclusive_maximum"] + ): + raise ApiValueError( + "Invalid value for `%s`, must be a value less than `%s`" + % (input_variable, validations["exclusive_maximum"]) + ) + + if ( + is_json_validation_enabled("maximum", configuration) + and "inclusive_maximum" in validations + and max_val > validations["inclusive_maximum"] + ): + raise ApiValueError( + "Invalid value for `%s`, must be a value less than or equal to " + "`%s`" % (input_variable, validations["inclusive_maximum"]) + ) + + if ( + is_json_validation_enabled("exclusiveMinimum", configuration) + and "exclusive_minimum" in validations + and min_val <= validations["exclusive_minimum"] + ): + raise ApiValueError( + "Invalid value for `%s`, must be a value greater than `%s`" + % (input_variable, validations["exclusive_maximum"]) + ) + + if ( + is_json_validation_enabled("minimum", configuration) + and "inclusive_minimum" in validations + and min_val < validations["inclusive_minimum"] + ): + raise ApiValueError( + "Invalid value for `%s`, must be a value greater than or equal " + "to `%s`" % (input_variable, validations["inclusive_minimum"]) + ) + flags = validations.get("regex", {}).get("flags", 0) + if ( + is_json_validation_enabled("pattern", configuration) + and "regex" in validations + and not re.search(validations["regex"]["pattern"], input_values, flags=flags) + ): + err_msg = r"Invalid value for `%s`, must match regular expression `%s`" % ( + input_variable, + validations["regex"]["pattern"], + ) + if flags != 0: + # Don't print the regex flags if the flags are not + # specified in the OAS document. + err_msg = r"%s with flags=`%s`" % (err_msg, flags) + raise ApiValueError(err_msg) + + +def order_response_types(required_types): + """Returns the required types sorted in coercion order. + + :param required_types: Collection of classes or instance of + list or dict with class information inside it. + :type required_types: list/tuple + + :return: Coercion order sorted collection of classes or instance + of list or dict with class information inside it. + :rtype: list + """ + def index_getter(class_or_instance): + if isinstance(class_or_instance, list): + return COERCION_INDEX_BY_TYPE[list] + elif isinstance(class_or_instance, dict): + return COERCION_INDEX_BY_TYPE[dict] + elif inspect.isclass(class_or_instance) and issubclass(class_or_instance, ModelComposed): + return COERCION_INDEX_BY_TYPE[ModelComposed] + elif inspect.isclass(class_or_instance) and issubclass(class_or_instance, ModelNormal): + return COERCION_INDEX_BY_TYPE[ModelNormal] + elif inspect.isclass(class_or_instance) and issubclass(class_or_instance, ModelSimple): + return COERCION_INDEX_BY_TYPE[ModelSimple] + elif class_or_instance in COERCION_INDEX_BY_TYPE: + return COERCION_INDEX_BY_TYPE[class_or_instance] + raise ApiValueError("Unsupported type: %s" % class_or_instance) + + sorted_types = sorted(required_types, key=index_getter) + return tuple(sorted_types) + + +def remove_uncoercible(required_types_classes, current_item, spec_property_naming, must_convert=True): + """Only keeps the type conversions that are possible. + + :param required_types_classes: Classes that are required, these should be + ordered by COERCION_INDEX_BY_TYPE. + :type required_types_classes: tuple + :param spec_property_naming: True if the variable names in the input data + are serialized names as specified in the OpenAPI document. False if the + variables names in the input data are python variable names in PEP-8 snake + case. + :type spec_property_naming: bool + :param current_item: The current item (input data) to be converted. + + :param must_convert: If True the item to convert is of the wrong type and + we want a big list of coercibles if False, we want a limited list of coercibles. + :type must_convert: bool + + :return: The remaining coercible required types, classes only. + :rtype: list + """ + current_type_simple = get_simple_class(current_item) + return list(_remove_uncoercible_impl(required_types_classes, current_type_simple, spec_property_naming, must_convert)) + + +def _remove_uncoercible_impl(required_types_classes, current_type_simple, spec_property_naming, must_convert=True): + """Implementation of remove_uncoercible logic.""" + results_classes = [] + for required_type_class in required_types_classes: + # convert our models to OpenApiModel + required_type_class_simplified = required_type_class + if isinstance(required_type_class_simplified, type): + if issubclass(required_type_class_simplified, ModelComposed): + required_type_class_simplified = ModelComposed + elif issubclass(required_type_class_simplified, ModelNormal): + required_type_class_simplified = ModelNormal + elif issubclass(required_type_class_simplified, ModelSimple): + required_type_class_simplified = ModelSimple + + if required_type_class_simplified == current_type_simple: + # don't consider converting to one's own class + continue + + class_pair = (current_type_simple, required_type_class_simplified) + if must_convert and class_pair in COERCIBLE_TYPE_PAIRS[spec_property_naming]: + results_classes.append(required_type_class) + elif class_pair in UPCONVERSION_TYPE_PAIRS: + results_classes.append(required_type_class) + return tuple(results_classes) + + +def get_possible_classes(cls, from_server_context): + possible_classes = [cls] + if from_server_context: + return possible_classes + if issubclass(cls, ModelComposed): + possible_classes.extend(composed_model_input_classes(cls)) + return possible_classes + + +_type_classes_cache: dict = {} + + +def get_required_type_classes(required_types_mixed, spec_property_naming): + """Converts the tuple required_types into a tuple and a dict described below. + + :param required_types_mixed: Will contain either classes or instance of + list or dict. + :type required_types_mixed: tuple/list + :param spec_property_naming: if True these values came from the server, and + we use the data types in our endpoints. If False, we are client side and we + need to include oneOf classes inside the data types in our endpoints. + :type spec_property_naming: bool + + :return (valid_classes, dict_valid_class_to_child_types_mixed): + valid_classes (tuple): The valid classes that the current item should be. + dict_valid_class_to_child_types_mixed (dict): + + valid_class (class): This is the key. + child_types_mixed (list/dict/tuple): Describes the valid child types. + + :rtype: tuple + """ + cache_key = (_make_hashable(required_types_mixed), spec_property_naming) + result = _type_classes_cache.get(cache_key) + if result is None: + result = _get_required_type_classes_impl(required_types_mixed, spec_property_naming) + _type_classes_cache[cache_key] = result + return result + + +def _get_required_type_classes_impl(required_types_mixed, spec_property_naming): + """Implementation of get_required_type_classes without caching.""" + valid_classes = [] + child_req_types_by_current_type = {} + for required_type in required_types_mixed: + if isinstance(required_type, list): + valid_classes.append(list) + child_req_types_by_current_type[list] = required_type + elif isinstance(required_type, tuple): + valid_classes.append(tuple) + child_req_types_by_current_type[tuple] = required_type + elif isinstance(required_type, dict): + valid_classes.append(dict) + child_req_types_by_current_type[dict] = required_type[str] + else: + valid_classes.extend(get_possible_classes(required_type, spec_property_naming)) + return tuple(valid_classes), child_req_types_by_current_type + + +def change_keys_js_to_python(input_dict, model_class): + """ + Converts from javascript_key keys in the input_dict to python_keys in + the output dict using the mapping in model_class. + If the input_dict contains a key which does not declared in the model_class, + the key is added to the output dict as is. The assumption is the model_class + may have undeclared properties (additionalProperties attribute in the OAS + document). + """ + if issubclass(model_class, ModelComposed): + attribute_map = {} + for t in model_class._composed_schemas.get("oneOf", ()): + if not isinstance(t, list) and issubclass(t, OpenApiModel): + attribute_map.update(t.attribute_map) + elif not getattr(model_class, "attribute_map", None): + return input_dict + else: + attribute_map = model_class.attribute_map + output_dict = {} + reversed_attr_map = {value: key for key, value in attribute_map.items()} + for javascript_key, value in input_dict.items(): + python_key = reversed_attr_map.get(javascript_key) + if python_key is None: + # if the key is unknown, it is in error or it is an + # additionalProperties variable + python_key = javascript_key + output_dict[python_key] = value + return output_dict + + +def get_type_error(var_value, path_to_item, valid_classes, key_type=False): + error_msg = type_error_message( + var_name=path_to_item[-1], var_value=var_value, valid_classes=valid_classes, key_type=key_type + ) + return ApiTypeError(error_msg, path_to_item=path_to_item, valid_classes=valid_classes, key_type=key_type) + + +def deserialize_primitive(data, klass, path_to_item): + """Deserializes string to primitive type. + + :type data: str/int/float + :param klass: The class to convert to. + :type klass: str/class + + :rtype: int, float, str, bool, date, datetime, UUID + """ + additional_message = "" + try: + if klass in {datetime, date}: + additional_message = ( + "If you need your parameter to have a fallback " + "string value, please set its type as `type: {}` in your " + "spec. That allows the value to be any type. " + ) + if klass == datetime: + if len(data) < 8: + raise ValueError("This is not a datetime") + # The string should be in iso8601 datetime format. + parsed_datetime = parse(data) + date_only = ( + parsed_datetime.hour == parsed_datetime.minute == parsed_datetime.second == 0 + and parsed_datetime.tzinfo is None + and 8 <= len(data) <= 10 + ) + if date_only: + raise ValueError("This is a date, not a datetime") + return parsed_datetime + elif klass == date: + if len(data) < 8: + raise ValueError("This is not a date") + return parse(data).date() + else: + if isinstance(data, str) and klass == UUID: + try: + converted_value = UUID(data) + except ValueError: + raise ValueError("This is not an UUID") + if isinstance(data, str) and klass == float: + converted_value = float(data) + if str(converted_value) != data: + # '7' -> 7.0 -> '7.0' != '7' + raise ValueError("This is not a float") + else: + converted_value = klass(data) + return converted_value + except (OverflowError, ValueError) as ex: + # parse can raise OverflowError + raise ApiValueError( + "{0}Failed to parse {1} as {2}".format(additional_message, repr(data), klass.__name__), + path_to_item=path_to_item, + ) from ex + + +def deserialize_model(model_data, model_class, path_to_item, check_type, configuration, spec_property_naming): + """Deserializes model_data to model instance. + + :param model_data: Data to instantiate the model. + :type model_data: int/str/float/bool/none_type/list/dict + :param model_class: The model class. + :type model_class: OpenApiModel + :param path_to_item: Path to the model in the received data. + :type path_to_item: list + :param check_type: Whether to check the data tupe for the values in + the model. + :type check_type: bool + :param configuration: The instance to use to convert files. + :type configuration: Configuration + :param spec_property_naming: True if the variable names in the input + data are serialized names as specified in the OpenAPI document. + False if the variables names in the input data are python + variable names in PEP-8 snake case. + :type spec_property_naming: bool + + :return: The model instance. + """ + + kw_args = dict( + _check_type=check_type, + _path_to_item=path_to_item, + _configuration=configuration, + _spec_property_naming=spec_property_naming, + ) + + if issubclass(model_class, ModelSimple): + return model_class(model_data, **kw_args) + elif isinstance(model_data, list): + if issubclass(model_class, ModelComposed) and allows_single_value_input(model_class): + return model_class(model_data, **kw_args) + else: + return model_class(*model_data, **kw_args) + elif isinstance(model_data, dict): + kw_args.update(change_keys_js_to_python(model_data, model_class)) + return model_class(**kw_args) + elif isinstance(model_data, PRIMITIVE_TYPES): + return model_class(model_data, **kw_args) + + +def deserialize_file(response_data, temp_folder_path, content_disposition=None): + """Deserializes body to file. + + Saves response body into a file in a temporary folder, using the filename + from the `Content-Disposition` header if provided. + + :param response_data: The file data to write. + :type response_data: str + :param temp_folder_path: The directory in which the client creates temporary files. + :type temp_folder_path: str + :param content_disposition: The value of the Content-Disposition + header. + :type content_disposition: str + + :return: The deserialized file which is open. The user is responsible for + closing and reading the file. + :rtype: file_type + """ + fd, path = tempfile.mkstemp(dir=temp_folder_path) + os.close(fd) + os.remove(path) + + if content_disposition: + filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', content_disposition).group(1) + path = os.path.join(os.path.dirname(path), filename) + + with open(path, "wb") as f: + if isinstance(response_data, str): + # change str to bytes so we can write it + response_data = response_data.encode("utf-8") + f.write(response_data) + + f = open(path, "rb") + return f + + +def attempt_convert_item( + input_value, + valid_classes, + path_to_item, + configuration, + spec_property_naming, + key_type=False, + must_convert=False, + check_type=True, +): + """ + :param input_value: The data to convert. + :param valid_classes: The classes that are valid. + :param path_to_item: The path to the item to convert. + :type path_to_item: list + :param configuration: The instance to use to convert files. + :type configuration: Configuration + :param spec_property_naming: True if the variable names in the input data + are serialized names as specified in the OpenAPI document. False if the + variables names in the input data are python variable names in PEP-8 snake + case. + :type spec_property_naming: bool + :param key_type: If True we need to convert a key type (not supported) + :type key_type: bool + :param must_convert: If True we must convert. + :type must_convert: bool + :param check_type: If True we check the type or the returned data in + ModelComposed/ModelNormal/ModelSimple instances. + :type check_type: bool + """ + valid_classes_ordered = order_response_types(valid_classes) + valid_classes_coercible = remove_uncoercible(valid_classes_ordered, input_value, spec_property_naming) + if not valid_classes_coercible or key_type: + # we do not handle keytype errors, json will take care + # of this for us + if configuration is None or not configuration.discard_unknown_keys: + raise get_type_error(input_value, path_to_item, valid_classes, key_type=key_type) + for valid_class in valid_classes_coercible: + try: + if issubclass(valid_class, OpenApiModel): + return deserialize_model( + input_value, valid_class, path_to_item, check_type, configuration, spec_property_naming + ) + elif valid_class == file_type: + return deserialize_file(input_value, configuration.temp_folder_path) + return deserialize_primitive(input_value, valid_class, path_to_item) + except (ApiTypeError, ApiValueError, ApiKeyError) as conversion_exc: + if must_convert: + raise conversion_exc + # if we have conversion errors when must_convert == False + # we ignore the exception and move on to the next class + continue + if must_convert: + raise get_type_error(input_value, path_to_item, valid_classes, key_type=key_type) + # we were unable to convert, must_convert == False + return input_value + + +def is_type_nullable(input_type): + """ + Returns True if None is an allowed value for the specified input_type. + + A type is nullable if at least one of the following conditions is True: + + 1. The OAS 'nullable' attribute has been specified, + 2. The type is the 'null' type, + 3. The type is a oneOf composed schema, and a child schema is + the 'null' type. + + :param input_type: The class of the input_value that we are checking. + :type input_type: type + + :rtype: bool + """ + if input_type is none_type: + return True + if issubclass(input_type, OpenApiModel) and input_type._nullable: + return True + if issubclass(input_type, ModelComposed): + # If oneOf, check if the 'null' type is one of the allowed types. + for t in input_type._composed_schemas.get("oneOf", ()): + if is_type_nullable(t): + return True + return False + + +def is_valid_type(input_class_simple, valid_classes): + """ + :param input_class_simple: The class of the input_value that we are checking. + :type input_class_simple: class: + :param valid_classes: The valid classes that the current item should be. + :type valid_classes: tuple + + :rtype: bool + """ + valid_type = input_class_simple in valid_classes + if not valid_type and (issubclass(input_class_simple, OpenApiModel) or input_class_simple is none_type): + for valid_class in valid_classes: + if input_class_simple is none_type and is_type_nullable(valid_class): + # Schema is oneOf and the 'null' type is one of the allowed types. + return True + if issubclass(valid_class, OpenApiModel): + continue + return valid_type + + +def validate_and_convert_types( + input_value, required_types_mixed, path_to_item, spec_property_naming, check_type, configuration=None +): + """Raises a TypeError is there is a problem, otherwise returns value. + + :param input_value: The data to validate/convert. + :param required_types_mixed: A list of valid classes, or a list tuples of + valid classes, or a dict where the value is a tuple of value classes. + :type required_types_mixed: list/dict/tuple + :param path_to_item: The path to the data being validated this stores a + list of keys or indices to get to the data being validated. + :type path_to_item: list + :param spec_property_naming: True if the variable names in the input + data are serialized names as specified in the OpenAPI document. False + if the variables names in the input data are python variable names in PEP-8 + snake case. + :type spec_property_naming: bool + :param check_type: If True, type will be checked and conversion + will be attempted. + :type check_type: bool + :param configuration:: The configuration class to use when converting + file_type items. + :type configuration: Configuration + + :return: The correctly typed value. + + :raise: ApiTypeError + """ + results = get_required_type_classes(required_types_mixed, spec_property_naming) + valid_classes, child_req_types_by_current_type = results + + input_class_simple = get_simple_class(input_value) + valid_type = is_valid_type(input_class_simple, valid_classes) + if not valid_type: + # if input_value is not valid_type try to convert it + return attempt_convert_item( + input_value, + valid_classes, + path_to_item, + configuration, + spec_property_naming, + must_convert=True, + check_type=check_type, + ) + + # input_value's type is in valid_classes + if len(valid_classes) > 1 and configuration: + # there are valid classes which are not the current class + valid_classes_coercible = remove_uncoercible( + valid_classes, input_value, spec_property_naming, must_convert=False + ) + # Preserve integer precision past 2^53: skip the (int, float) upconversion + # when `int` is already a valid target. Without this guard, the loop below + # would call `float(big_int)` for additionalProperties (whose default + # `additional_properties_type` contains both float and int) and silently + # round any integer above 2^53 to the nearest float64 representation. + if type(input_value) is int and int in valid_classes and float in valid_classes_coercible: + valid_classes_coercible = [c for c in valid_classes_coercible if c is not float] + if valid_classes_coercible: + return attempt_convert_item( + input_value, + valid_classes_coercible, + path_to_item, + configuration, + spec_property_naming, + check_type=check_type, + ) + + if child_req_types_by_current_type == {}: + # all types are of the required types and there are no more inner + # variables left to look at + return input_value + inner_required_types = child_req_types_by_current_type.get(type(input_value)) + if inner_required_types is None: + # for this type, there are not more inner variables left to look at + return input_value + if isinstance(input_value, list): + if input_value == []: + # allow an empty list + return input_value + result = [] + for index, inner_value in enumerate(input_value): + path_to_item.append(index) + try: + result.append( + validate_and_convert_types( + inner_value, + inner_required_types, + path_to_item, + spec_property_naming, + check_type, + configuration=configuration, + ) + ) + except TypeError: + result.append(UnparsedObject(**inner_value)) + finally: + # Restore path state + path_to_item.pop() + return result + elif isinstance(input_value, dict): + if input_value == {}: + # allow an empty dict + return input_value + result = {} + for inner_key, inner_val in input_value.items(): + path_to_item.append(inner_key) + try: + if get_simple_class(inner_key) != str: + raise get_type_error(inner_key, path_to_item, valid_classes, key_type=True) + result[inner_key] = validate_and_convert_types( + inner_val, + inner_required_types, + path_to_item, + spec_property_naming, + check_type, + configuration=configuration, + ) + finally: + # Restore path state + path_to_item.pop() + return result + return input_value + + +def get_file_data_and_close_file(file_instance: io.IOBase) -> bytes: + file_data = file_instance.read() + file_instance.close() + return file_data + + +def data_to_dict(instance, serialize=True): + """Prepares data for transmission before it is sent with the rest client. + + If obj is None, return None. + If obj is str, int, long, float, bool, return directly. + If obj is datetime.datetime, datetime.date convert to string in iso8601 format. + If obj is list, sanitize each element in the list. + If obj is dict, return the dict. + If obj is OpenAPI model, return the properties dict. + If obj is io.IOBase, return the bytes. + + :param obj: The data to serialize. + :param serialize: If True, return data safe for wire. Forwarded to model_to_dict. + :type serialize: bool + :return: The serialized form of data. + """ + if isinstance(instance, (ModelNormal, ModelComposed)): + return {key: data_to_dict(val) for key, val in model_to_dict(instance, serialize).items()} + elif isinstance(instance, io.IOBase): + return get_file_data_and_close_file(instance) + elif isinstance(instance, (str, int, float, bool)) or instance is None: + return instance + elif isinstance(instance, (datetime, date)): + if not serialize: + return instance + if getattr(instance, "tzinfo", None) is not None: + return instance.isoformat() + return "{}Z".format(instance.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3]) + elif isinstance(instance, UUID): + if not serialize: + return instance + return str(instance) + elif isinstance(instance, ModelSimple): + return data_to_dict(instance.value) + elif isinstance(instance, (list, tuple)): + return [data_to_dict(item) for item in instance] + if isinstance(instance, dict): + return {key: data_to_dict(val) for key, val in instance.items()} + raise ApiValueError("Unable to handle type {}".format(instance.__class__.__name__)) + + +def model_to_dict(model_instance, serialize=True): + """Returns the model properties as a dict. + + :param model_instance: The model instance that will be converted to a dict. + :param serialize: If True, the keys in the dict will be values from + attribute_map. + :type serialize: bool + """ + result = {} + + model_instances = [model_instance] + model = model_instance + while model._composed_schemas: + model_instances.extend(model._composed_instances) + model = model.get_oneof_instance() + + seen_json_attribute_names = set() + used_fallback_python_attribute_names = set() + py_to_json_map = {} + for model_instance in model_instances: + for attr, value in model_instance._data_store.items(): + if serialize: + # we use get here because additional property key names do not + # exist in attribute_map + try: + attr = model_instance.attribute_map[attr] + py_to_json_map.update(model_instance.attribute_map) + seen_json_attribute_names.add(attr) + except KeyError: + used_fallback_python_attribute_names.add(attr) + result[attr] = data_to_dict(value, serialize) + if serialize: + for python_key in used_fallback_python_attribute_names: + json_key = py_to_json_map.get(python_key) + if json_key is None: + continue + if python_key == json_key: + continue + json_key_assigned_no_need_for_python_key = json_key in seen_json_attribute_names + if json_key_assigned_no_need_for_python_key: + del result[python_key] + + return result + + +def type_error_message(var_value=None, var_name=None, valid_classes=None, key_type=None): + """ + :param var_value: The variable which has the type error. + :param var_name: The name of the variable which has the type error. + :type var_name: str + :param valid_classes: The accepted classes for current_item's value. + :type valid_classes: tuple + :param key_type: False if our value is a value in a dict True if it is a + key in a dict False if our item is an item in a list. + :type key_type: bool + """ + key_or_value = "value" + if key_type: + key_or_value = "key" + valid_classes_phrase = get_valid_classes_phrase(valid_classes) + msg = "Invalid type for variable '{0}'. Required {1} type {2} and " "passed type was {3}".format( + var_name, + key_or_value, + valid_classes_phrase, + type(var_value).__name__, + ) + return msg + + +def get_valid_classes_phrase(input_classes): + """Returns a string phrase describing what types are allowed.""" + all_class_names = [cls.__name__ for cls in input_classes] + all_class_names.sort() + if len(all_class_names) == 1: + return "is {0}".format(all_class_names[0]) + return "is one of [{0}]".format(", ".join(all_class_names)) + + +_discriminator_map_cache: dict = {} + + +def _build_discriminator_map(cls): + """ + Build a map from type-discriminator string to oneOf class for a ModelComposed + class, using the 'type' field's ModelSimple allowed_values. Returns None if + the oneOf list doesn't uniformly use a type discriminator. + Result is cached per class. + """ + cached = _discriminator_map_cache.get(cls, unset) + if cached is not unset: + return cached + + disc_map = {} + try: + for oneof_class in cls._composed_schemas.get("oneOf", ()): + if oneof_class is none_type or isinstance(oneof_class, list): + continue + ot = getattr(oneof_class, "openapi_types", None) + if ot is None: + disc_map = None + break + type_types = ot.get("type") + if type_types is None: + disc_map = None + break + matched = False + for type_cls in type_types: + if ( + isinstance(type_cls, type) + and issubclass(type_cls, ModelSimple) + and type_cls.allowed_values + ): + conflicted = False + for val in type_cls.allowed_values: + if val in disc_map and disc_map[val] is not oneof_class: + disc_map = None + conflicted = True + break + disc_map[val] = oneof_class + if conflicted: + break + matched = True + break + if not matched: + disc_map = None + break + except Exception: + disc_map = None + + result = disc_map if disc_map else None + _discriminator_map_cache[cls] = result + return result + + +def get_oneof_instance(cls, model_kwargs, constant_kwargs, model_arg=None): + """ + Find the oneOf schema that matches the input data (e.g. payload). + If exactly one schema matches the input data, an instance of that schema + is returned. + If zero or more than one schema match the input data, an exception is raised. + In OAS 3.x, the payload MUST, by validation, match exactly one of the + schemas described by oneOf. + + :param cls: The class we are handling. + :param model_kwargs: var_name to var_value. + The input data, e.g. the payload that must match a oneOf schema + in the OpenAPI document. + :type model_kwargs: dict + :param constant_kwargs: var_name to var_value + args that every model requires, including configuration, server + and path to item. + :type constant_kwargs: dict + :param model_arg: The value to assign to a primitive class or ModelSimple class. + Notes: + - this is only passed in when oneOf includes types which are not object + - None is used to suppress handling of model_arg, nullable models are handled in __new__ + :type model_arg: int, float, bool, str, date, datetime, ModelSimple, UUID, None + """ + if len(cls._composed_schemas["oneOf"]) == 0: + return None + + # Fast path: use type discriminator when all oneOf classes have a unique 'type' value. + # Pure optimisation — on any failure falls through to the full O(N) scan below so + # behaviour is identical to the original; never short-circuits to UnparsedObject here. + if model_arg is None and model_kwargs: + disc_map = _build_discriminator_map(cls) + if disc_map is not None: + type_val = model_kwargs.get("type") + if type_val is not None and type_val in disc_map: + oneof_class = disc_map[type_val] + with suppress(Exception): + if constant_kwargs.get("_spec_property_naming"): + oneof_instance = oneof_class( + **change_keys_js_to_python(model_kwargs, oneof_class), **constant_kwargs + ) + else: + oneof_instance = oneof_class(**model_kwargs, **constant_kwargs) + if not oneof_instance._unparsed: + return oneof_instance + + oneof_instances = [] + # Iterate over each oneOf schema and determine if the input data + # matches the oneOf schemas. + for oneof_class in cls._composed_schemas["oneOf"]: + # The composed oneOf schema allows the 'null' type and the input data + # is the null value. This is a OAS >= 3.1 feature. + if oneof_class is none_type: + # skip none_types because we are deserializing dict data. + # none_type deserialization is handled in the __new__ method + continue + + single_value_input = allows_single_value_input(oneof_class) if not isinstance(oneof_class, list) else True + + with suppress(Exception): + if not single_value_input: + if model_arg is not None and not isinstance(model_arg, dict): + # A non-mapping input (list or scalar) cannot match an object schema. + continue + if constant_kwargs.get("_spec_property_naming"): + oneof_instance = oneof_class( + **change_keys_js_to_python(model_kwargs, oneof_class), **constant_kwargs + ) + else: + oneof_instance = oneof_class(**model_kwargs, **constant_kwargs) + if not oneof_instance._unparsed: + oneof_instances.append(oneof_instance) + else: + if isinstance(oneof_class, list): + oneof_class = oneof_class[0] + if model_arg is None and not model_kwargs: + # Empty data + oneof_instances.append([]) + continue + if not isinstance(model_arg, list): + # A non-array input cannot match a list schema. + continue + + # Check if inner type is primitive - follows same pattern as complex objects: + # https://github.com/DataDog/datadog-api-client-python/blob/008536d34760ce096e118edc54df613d82194529/.generator/src/generator/templates/model_utils.j2#L1590-L1599 + if oneof_class in PRIMITIVE_TYPES: + # Handle list of primitives (e.g., [str], [float]) + list_oneof_instance = [] + for arg in model_arg: + oneof_instance = validate_and_convert_types( + arg, + (oneof_class,), + constant_kwargs.get("_path_to_item", ()), + constant_kwargs.get("_spec_property_naming", False), + constant_kwargs.get("_check_type", True), + configuration=constant_kwargs.get("_configuration"), + ) + list_oneof_instance.append(oneof_instance) + oneof_instances.append(list_oneof_instance) + elif inspect.isclass(oneof_class) and issubclass(oneof_class, ModelSimple): + # Handle list of ModelSimple + list_oneof_instance = [oneof_class(arg, **constant_kwargs) for arg in model_arg] + if not any(item._unparsed for item in list_oneof_instance): + oneof_instances.append(list_oneof_instance) + else: + # Handle list of complex objects (ModelNormal, ModelComposed). + # Mapping items are unpacked as keyword arguments; scalar items + # are passed positionally so a composed item schema that accepts + # primitives (e.g. AnyValueItem) can resolve them. + spec_property_naming = constant_kwargs.get("_spec_property_naming") + list_oneof_instance = [] + for arg in model_arg: + if not isinstance(arg, dict): + item = oneof_class(arg, **constant_kwargs) + elif spec_property_naming: + item = oneof_class(**change_keys_js_to_python(arg, oneof_class), **constant_kwargs) + else: + item = oneof_class(**arg, **constant_kwargs) + list_oneof_instance.append(item) + if not any(getattr(item, "_unparsed", False) for item in list_oneof_instance): + oneof_instances.append(list_oneof_instance) + elif issubclass(oneof_class, ModelSimple): + if model_arg is not None: + oneof_instance = oneof_class(model_arg, **constant_kwargs) + if not oneof_instance._unparsed: + oneof_instances.append(oneof_instance) + elif oneof_class in PRIMITIVE_TYPES: + oneof_instance = validate_and_convert_types( + model_arg, + (oneof_class,), + constant_kwargs.get("_path_to_item", ()), + constant_kwargs.get("_spec_property_naming", False), + constant_kwargs.get("_check_type", True), + configuration=constant_kwargs.get("_configuration"), + ) + oneof_instances.append(oneof_instance) + if len(oneof_instances) != 1: + return UnparsedObject(**model_kwargs) + return oneof_instances[0] + + +def get_discarded_args(self, composed_instances, model_args): + """ + Gathers the args that were discarded by configuration.discard_unknown_keys + """ + model_arg_keys = model_args.keys() + discarded_args = set() + # arguments passed to self were already converted to python names + # before __init__ was called + for instance in composed_instances: + # Collect Python and spec key names without recursing into values. + # model_to_dict would serialize the full sub-tree just to get keys. + model_instances = [instance] + model = instance + while model._composed_schemas: + model_instances.extend(model._composed_instances) + model = model.get_oneof_instance() + + all_keys = set() + for model_inst in model_instances: + attr_map = getattr(model_inst, "attribute_map", {}) + for attr in model_inst._data_store: + all_keys.add(attr) + all_keys.add(attr_map.get(attr, attr)) + + discarded_keys = model_arg_keys - all_keys + discarded_args.update(discarded_keys) + return discarded_args + + +def validate_get_composed_info(constant_args, model_args, self): + """ + For composed schemas, generate schema instances for all schemas in the + oneOf definition. If additional properties are allowed, also assign + those properties on all matched schemas that contain additionalProperties. + Openapi schemas are python classes. + + Exceptions are raised if: + - 0 or > 1 oneOf schema matches the model_args input data + + :param constant_args: These are the args that every model requires. + :type constant_args: dict + :param model_args: These are the required and optional spec args that + were passed in to make this model. + :type model_args: dict + :param self: The class that we are instantiating. This class contains + self._composed_schemas. + :type self: class + + :return: + composed_instances (list): the composed instances which are not + self + var_name_to_model_instances (dict): a dict going from var_name + to the model_instance which holds that var_name + the model_instance may be self or an instance of one of the + classes in self.composed_instances() + additional_properties_model_instances (list): a list of the + model instances which have the property + additional_properties_type. This list can include self + :rtype: list + """ + # Create composed_instances + composed_instances = [] + oneof_instance = get_oneof_instance(self.__class__, model_args, constant_args) + if oneof_instance is not None and not isinstance(oneof_instance, list): + composed_instances.append(oneof_instance) + + additional_properties_model_instances = [] + if self.additional_properties_type is not None: + additional_properties_model_instances = [self] + + discarded_args = get_discarded_args(self, composed_instances, model_args) + + # Map variable names to composed_instances + var_name_to_model_instances = {} + for prop_name in model_args: + if prop_name not in discarded_args: + var_name_to_model_instances[prop_name] = [self] + composed_instances + + return [composed_instances, var_name_to_model_instances, additional_properties_model_instances, discarded_args] + + +class UnparsedObject(ModelNormal): + """A model for an oneOf we don't know about.""" + + required_properties = set( + [ + "_data_store", + "_unparsed", + ] + ) + + def __init__(self, **kwargs): + + self._data_store = {} + self._unparsed = True + + for var_name, var_value in kwargs.items(): + self.__dict__[var_name] = var_value + self.__dict__["_data_store"][var_name] = var_value + + +def get_attribute_from_path(obj, path, default=None): + """Return an attribute at `path` from the passed object.""" + if not path: + return obj + for elt in path.split("."): + try: + obj = obj[elt] + except (KeyError, AttributeError): + if default is None: + raise + return default + return obj + + +def set_attribute_from_path(obj, path, value, params_map): + """Set an attribute at `path` with the given value.""" + elts = path.split(".") + last = elts.pop(-1) + root = None + for i, elt in enumerate(elts): + if i: + root = root.openapi_types[elt][0] + else: + root = params_map[elt]["openapi_types"][0] + try: + obj = obj[elt] + except (KeyError, AttributeError): + obj = root() + obj[last] = value \ No newline at end of file diff --git a/datadog_api_client/py.typed b/datadog_api_client/py.typed new file mode 100644 index 0000000000..e69de29bb2 diff --git a/datadog_api_client/rest.py b/datadog_api_client/rest.py new file mode 100644 index 0000000000..ed4fe46793 --- /dev/null +++ b/datadog_api_client/rest.py @@ -0,0 +1,350 @@ +# 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. + +import json +import logging +import re +import ssl +from urllib.parse import urlencode +import zlib +import urllib3 # type: ignore + +from datadog_api_client.exceptions import ( + ApiException, + UnauthorizedException, + ForbiddenException, + NotFoundException, + ServiceException, + ApiValueError, +) + + +logger = logging.getLogger(__name__) + + +RETRY_AFTER_STATUS_CODES = frozenset([408, 429, 500, 501, 502, 503, 504, 505, 506, 507, 509, 510, 511, 512]) +RETRY_ALLOWED_METHODS = frozenset(["GET", "PUT", "DELETE", "POST", "PATCH"]) + + +class ClientRetry(urllib3.util.Retry): + RETRY_AFTER_STATUS_CODES = RETRY_AFTER_STATUS_CODES + DEFAULT_ALLOWED_METHODS = RETRY_ALLOWED_METHODS + + def get_retry_after(self, response): + """ + This method overrides the default "Retry-after" header and uses dd's X-Ratelimit-Reset header + and gets the value of X-Ratelimit-Reset in seconds. + """ + retry_after = response.headers.get("X-Ratelimit-Reset") + + if retry_after is None: + return None + return self.parse_retry_after(retry_after) + + def is_retry(self, method, status_code, has_retry_after=False): + if method not in self.DEFAULT_ALLOWED_METHODS: + return False + + if self.status_forcelist and status_code in self.status_forcelist: + return True + return self.total and self.respect_retry_after_header and (status_code in self.RETRY_AFTER_STATUS_CODES) + + +class RESTClientObject: + def __init__(self, configuration, pools_size=4, maxsize=4): + # urllib3.PoolManager will pass all kw parameters to connectionpool + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 + # maxsize is the number of requests to host that are allowed in parallel + # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html + + # cert_reqs + if configuration.verify_ssl: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + + addition_pool_args = {} + if configuration.assert_hostname is not None: + addition_pool_args["assert_hostname"] = configuration.assert_hostname + + if configuration.retry_policy is not None: + addition_pool_args["retries"] = configuration.retry_policy + elif configuration.enable_retry: + retries = ClientRetry( + total = configuration.max_retries, + backoff_factor = configuration.retry_backoff_factor, + ) + addition_pool_args["retries"] = retries + + if configuration.socket_options is not None: + addition_pool_args["socket_options"] = configuration.socket_options + + # https pool manager + if configuration.proxy: + self.pool_manager = urllib3.ProxyManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + proxy_headers=configuration.proxy_headers, + **addition_pool_args + ) + else: + self.pool_manager = urllib3.PoolManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + **addition_pool_args + ) + + def request( + self, + method, + url, + query_params=None, + headers=None, + body=None, + post_params=None, + preload_content=True, + request_timeout=None, + ): + """Perform requests. + + :param method: http request method + :param url: http request url + :param query_params: query parameters in the url + :param headers: http request headers + :param body: request json body, for `application/json` + :param post_params: request post parameters, + `application/x-www-form-urlencoded` + and `multipart/form-data` + :param preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :param request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + """ + method = method.upper() + + if post_params and body: + raise ApiValueError("body parameter cannot be used with post_params parameter.") + + post_params = post_params or {} + headers = headers or {} + + timeout = None + if request_timeout: + if isinstance(request_timeout, (int, float)): + timeout = urllib3.Timeout(total=request_timeout) + elif isinstance(request_timeout, tuple) and len(request_timeout) == 2: + timeout = urllib3.Timeout(connect=request_timeout[0], read=request_timeout[1]) + + try: + request_kwargs = {} + # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` + if method in ("POST", "PUT", "PATCH", "OPTIONS", "DELETE"): + # Only set a default Content-Type for POST, PUT, PATCH and OPTIONS requests + if method != "DELETE" and "Content-Type" not in headers and body is not None: + headers["Content-Type"] = "application/json" + if query_params: + url += "?" + urlencode(query_params) + if "Content-Type" not in headers or re.search("json", headers["Content-Type"], re.IGNORECASE): + request_body = None + if body is not None: + request_body = json.dumps(body) + if headers.get("Content-Encoding") == "gzip": + compressor = zlib.compressobj(wbits=16 + zlib.MAX_WBITS) + request_body = compressor.compress(request_body.encode("utf-8")) + compressor.flush() + elif headers.get("Content-Encoding") == "deflate": + request_body = zlib.compress(request_body.encode("utf-8")) + elif headers.get("Content-Encoding") == "zstd1": + import zstandard as zstd + + compressor = zstd.ZstdCompressor() + request_body = compressor.compress(request_body.encode("utf-8")) + request_kwargs["body"] = request_body + elif headers["Content-Type"] == "application/x-www-form-urlencoded": + request_kwargs["encode_multipart"] = False + request_kwargs["fields"] = post_params + elif headers["Content-Type"] == "multipart/form-data": + # must del headers['Content-Type'], or the correct + # Content-Type which generated by urllib3 will be + # overwritten. + del headers["Content-Type"] + request_kwargs["encode_multipart"] = True + request_kwargs["fields"] = post_params + # Pass a `string` parameter directly in the body to support + # other content types than Json when `body` argument is + # provided in serialized form + elif isinstance(body, (str, bytes)): + request_kwargs["body"] = body + else: + # Cannot generate the request from given parameters + msg = """Cannot prepare a request message for provided + arguments. Please check that your arguments match + declared content type.""" + raise ApiException(status=0, reason=msg) + # For `GET`, `HEAD` + else: + request_kwargs["fields"] = query_params + r = self.pool_manager.request( + method, url, preload_content=preload_content, timeout=timeout, headers=headers, **request_kwargs + ) + except urllib3.exceptions.SSLError as e: + msg = "{0}\n{1}".format(type(e).__name__, str(e)) + raise ApiException(status=0, reason=msg) + + if preload_content: + # log response body + logger.debug("response body: %s", r.data) + + if not 200 <= r.status <= 299: + if r.status == 401: + raise UnauthorizedException(http_resp=r) + + if r.status == 403: + raise ForbiddenException(http_resp=r) + + if r.status == 404: + raise NotFoundException(http_resp=r) + + if 500 <= r.status <= 599: + raise ServiceException(http_resp=r) + + raise ApiException(http_resp=r) + + return r + + +class _AioSonicResponseWrapper: + def __init__(self, response, data): + self.response = response + self.status = response.status_code + self.reason = response.response_initial.get("reason") + self.data = data + self.headers = response.headers.copy() + + +class AsyncRESTClientObject: + def __init__(self, configuration): + import aiosonic # type: ignore + + proxy = None + if configuration.proxy: + proxy = aiosonic.Proxy(configuration.proxy, configuration.proxy_headers) + self._client = aiosonic.HTTPClient(proxy=proxy, verify_ssl=configuration.verify_ssl) + self._configuration = configuration + + def close(self): + # aiosonic doesn't close its clients + pass + + def _retry(self, method, response, counter): + if (not self._configuration.enable_retry + or counter >= self._configuration.max_retries + or method not in RETRY_ALLOWED_METHODS + or response.status_code not in RETRY_AFTER_STATUS_CODES): + return 0 + retry_after = response.headers.get("X-Ratelimit-Reset") + if retry_after is None: + return self._configuration.retry_backoff_factor * (2 ** (counter)) + return int(retry_after) + + async def request( + self, + method, + url, + query_params=None, + headers=None, + body=None, + post_params=None, + preload_content=True, + request_timeout=None, + ): + """Perform requests. + + :param method: http request method + :param url: http request url + :param query_params: query parameters in the url + :param headers: http request headers + :param body: request json body, for `application/json` + :param post_params: request post parameters, + `application/x-www-form-urlencoded` + and `multipart/form-data` + :param preload_content: if False, the raw HTTP response object will + be returned without reading/decoding response + data. Default is True. + :param request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + """ + assert not post_params, "not supported for now" + if request_timeout is not None: + from aiosonic.timeout import Timeouts # type: ignore + + if isinstance(request_timeout, (int, float)): + request_timeout = Timeouts(request_timeout=request_timeout) + else: + request_timeout = Timeouts(sock_connect=request_timeout[0], sock_read=request_timeout[1]) + request_body = None + if ( + "Content-Type" not in headers + or re.search("json", headers["Content-Type"], re.IGNORECASE) + and body is not None + ): + request_body = json.dumps(body) + if headers.get("Content-Encoding") == "gzip": + compress = zlib.compressobj(wbits=16 + zlib.MAX_WBITS) + request_body = compress.compress(request_body.encode("utf-8")) + compress.flush() + elif headers.get("Content-Encoding") == "deflate": + request_body = zlib.compress(request_body.encode("utf-8")) + elif headers.get("Content-Encoding") == "zstd1": + import zstandard as zstd + + compressor = zstd.ZstdCompressor() + request_body = compressor.compress(request_body.encode("utf-8")) + counter = 0 + while True: + response = await self._client.request( + url, method, headers, query_params, request_body, timeouts=request_timeout + ) + retry = self._retry(method, response, counter) + if not retry: + break + import asyncio + + await asyncio.sleep(retry) + counter += 1 + + if not 200 <= response.status_code <= 299: + data = b"" + if preload_content: + data = await response.content() + r = _AioSonicResponseWrapper(response, data) + + if response.status_code == 401: + raise UnauthorizedException(http_resp=r) + + if response.status_code == 403: + raise ForbiddenException(http_resp=r) + + if response.status_code == 404: + raise NotFoundException(http_resp=r) + + if 500 <= response.status_code <= 599: + raise ServiceException(http_resp=r) + + raise ApiException(http_resp=r) + + return response diff --git a/datadog_api_client/v1/__init__.py b/datadog_api_client/v1/__init__.py new file mode 100644 index 0000000000..0d508b1a42 --- /dev/null +++ b/datadog_api_client/v1/__init__.py @@ -0,0 +1,13 @@ +# 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 datadog_api_client.api_client import ApiClient, AsyncApiClient +from datadog_api_client.configuration import Configuration +from datadog_api_client.exceptions import ( + OpenApiException, ApiAttributeError, ApiTypeError, ApiValueError, ApiKeyError, ApiException) + + +__all__ = ["ApiClient", "AsyncApiClient", "Configuration", "OpenApiException", + "ApiAttributeError", "ApiTypeError", "ApiValueError", "ApiKeyError", + "ApiException"] \ No newline at end of file diff --git a/datadog_api_client/v1/api/__init__.py b/datadog_api_client/v1/api/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/datadog_api_client/v1/api/authentication_api.py b/datadog_api_client/v1/api/authentication_api.py new file mode 100644 index 0000000000..cc45d4cadf --- /dev/null +++ b/datadog_api_client/v1/api/authentication_api.py @@ -0,0 +1,68 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.authentication_validation_response import AuthenticationValidationResponse + + +class AuthenticationApi: + """ + All requests to Datadog’s API must be authenticated. + Requests that write data require reporting access and require an ``API key``. + Requests that read data require full access and also require an ``application key``. + + **Note:** All Datadog API clients are configured by default to consume Datadog US site APIs. + If you are on the Datadog EU site, set the environment variable ``DATADOG_HOST`` to + ``https://api.datadoghq.eu`` or override this value directly when creating your client. + + `Manage your account’s API and application keys `_ in Datadog, and see the `API and Application Keys page `_ in the documentation. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._validate_endpoint = _Endpoint( + settings={ + "response_type": (AuthenticationValidationResponse,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v1/validate", + "operation_id": "validate", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def validate(self, ) -> AuthenticationValidationResponse: + """Validate API key. + + Check if the API key (not the APP key) is valid. If invalid, a 403 is returned. + + :rtype: AuthenticationValidationResponse + """ + kwargs: Dict[str, Any] = {} + return self._validate_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/aws_integration_api.py b/datadog_api_client/v1/api/aws_integration_api.py new file mode 100644 index 0000000000..29405fbba3 --- /dev/null +++ b/datadog_api_client/v1/api/aws_integration_api.py @@ -0,0 +1,539 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.aws_account_delete_request import AWSAccountDeleteRequest +from datadog_api_client.v1.model.aws_account_list_response import AWSAccountListResponse +from datadog_api_client.v1.model.aws_account_create_response import AWSAccountCreateResponse +from datadog_api_client.v1.model.aws_account import AWSAccount +from datadog_api_client.v1.model.aws_event_bridge_delete_response import AWSEventBridgeDeleteResponse +from datadog_api_client.v1.model.aws_event_bridge_delete_request import AWSEventBridgeDeleteRequest +from datadog_api_client.v1.model.aws_event_bridge_list_response import AWSEventBridgeListResponse +from datadog_api_client.v1.model.aws_event_bridge_create_response import AWSEventBridgeCreateResponse +from datadog_api_client.v1.model.aws_event_bridge_create_request import AWSEventBridgeCreateRequest +from datadog_api_client.v1.model.aws_tag_filter_delete_request import AWSTagFilterDeleteRequest +from datadog_api_client.v1.model.aws_tag_filter_list_response import AWSTagFilterListResponse +from datadog_api_client.v1.model.aws_tag_filter_create_request import AWSTagFilterCreateRequest + + +class AWSIntegrationApi: + """ + Configure your Datadog-AWS integration directly through the Datadog API. + For more information, see the `AWS integration page `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_aws_account_endpoint = _Endpoint( + settings={ + "response_type": (AWSAccountCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws", + "operation_id": "create_aws_account", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_aws_event_bridge_source_endpoint = _Endpoint( + settings={ + "response_type": (AWSEventBridgeCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/event_bridge", + "operation_id": "create_aws_event_bridge_source", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSEventBridgeCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_aws_tag_filter_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/filtering", + "operation_id": "create_aws_tag_filter", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSTagFilterCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_new_aws_external_id_endpoint = _Endpoint( + settings={ + "response_type": (AWSAccountCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/generate_new_external_id", + "operation_id": "create_new_aws_external_id", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_aws_account_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws", + "operation_id": "delete_aws_account", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSAccountDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_aws_event_bridge_source_endpoint = _Endpoint( + settings={ + "response_type": (AWSEventBridgeDeleteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/event_bridge", + "operation_id": "delete_aws_event_bridge_source", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSEventBridgeDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_aws_tag_filter_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/filtering", + "operation_id": "delete_aws_tag_filter", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSTagFilterDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_available_aws_namespaces_endpoint = _Endpoint( + settings={ + "response_type": ([str],), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/available_namespace_rules", + "operation_id": "list_available_aws_namespaces", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_accounts_endpoint = _Endpoint( + settings={ + "response_type": (AWSAccountListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws", + "operation_id": "list_aws_accounts", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "account_id": { + "openapi_types": (str,), + "attribute": "account_id", + "location": "query", + }, + "role_name": { + "openapi_types": (str,), + "attribute": "role_name", + "location": "query", + }, + "access_key_id": { + "openapi_types": (str,), + "attribute": "access_key_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_event_bridge_sources_endpoint = _Endpoint( + settings={ + "response_type": (AWSEventBridgeListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/event_bridge", + "operation_id": "list_aws_event_bridge_sources", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_tag_filters_endpoint = _Endpoint( + settings={ + "response_type": (AWSTagFilterListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/filtering", + "operation_id": "list_aws_tag_filters", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_aws_account_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws", + "operation_id": "update_aws_account", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "account_id": { + "openapi_types": (str,), + "attribute": "account_id", + "location": "query", + }, + "role_name": { + "openapi_types": (str,), + "attribute": "role_name", + "location": "query", + }, + "access_key_id": { + "openapi_types": (str,), + "attribute": "access_key_id", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (AWSAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_aws_account(self, body: AWSAccount, ) -> AWSAccountCreateResponse: + """Create an AWS integration. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoints instead.** Create a Datadog-Amazon Web Services integration. + Using the ``POST`` method updates your integration configuration + by adding your new configuration to the existing one in your Datadog organization. + A unique AWS Account ID for role based authentication. + + :param body: AWS Request Object + :type body: AWSAccount + :rtype: AWSAccountCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_aws_account is deprecated", DeprecationWarning, stacklevel=2) + return self._create_aws_account_endpoint.call_with_http_info(**kwargs) + + def create_aws_event_bridge_source(self, body: AWSEventBridgeCreateRequest, ) -> AWSEventBridgeCreateResponse: + """Create an Amazon EventBridge source. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoints instead.** Create an Amazon EventBridge source. + + :param body: Create an Amazon EventBridge source for an AWS account with a given name and region. + :type body: AWSEventBridgeCreateRequest + :rtype: AWSEventBridgeCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_aws_event_bridge_source is deprecated", DeprecationWarning, stacklevel=2) + return self._create_aws_event_bridge_source_endpoint.call_with_http_info(**kwargs) + + def create_aws_tag_filter(self, body: AWSTagFilterCreateRequest, ) -> dict: + """Set an AWS tag filter. **Deprecated**. + + Set an AWS tag filter. + + :param body: Set an AWS tag filter using an ``aws_account_identifier`` , ``namespace`` , and filtering string. + Namespace options are ``application_elb`` , ``elb`` , ``lambda`` , ``network_elb`` , ``rds`` , ``sqs`` , and ``custom``. + :type body: AWSTagFilterCreateRequest + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_aws_tag_filter is deprecated", DeprecationWarning, stacklevel=2) + return self._create_aws_tag_filter_endpoint.call_with_http_info(**kwargs) + + def create_new_aws_external_id(self, body: AWSAccount, ) -> AWSAccountCreateResponse: + """Generate a new external ID. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoints instead.** Generate a new AWS external ID for a given AWS account ID and role name pair. + + :param body: Your Datadog role delegation name. + For more information about your AWS account Role name, + see the `Datadog AWS integration configuration info `_. + :type body: AWSAccount + :rtype: AWSAccountCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_new_aws_external_id is deprecated", DeprecationWarning, stacklevel=2) + return self._create_new_aws_external_id_endpoint.call_with_http_info(**kwargs) + + def delete_aws_account(self, body: AWSAccountDeleteRequest, ) -> dict: + """Delete an AWS integration. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoints instead.** Delete a Datadog-AWS integration matching the specified ``account_id`` and ``role_name parameters``. + + :param body: AWS request object + :type body: AWSAccountDeleteRequest + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("delete_aws_account is deprecated", DeprecationWarning, stacklevel=2) + return self._delete_aws_account_endpoint.call_with_http_info(**kwargs) + + def delete_aws_event_bridge_source(self, body: AWSEventBridgeDeleteRequest, ) -> AWSEventBridgeDeleteResponse: + """Delete an Amazon EventBridge source. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoints instead.** Delete an Amazon EventBridge source. + + :param body: Delete the Amazon EventBridge source with the given name, region, and associated AWS account. + :type body: AWSEventBridgeDeleteRequest + :rtype: AWSEventBridgeDeleteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("delete_aws_event_bridge_source is deprecated", DeprecationWarning, stacklevel=2) + return self._delete_aws_event_bridge_source_endpoint.call_with_http_info(**kwargs) + + def delete_aws_tag_filter(self, body: AWSTagFilterDeleteRequest, ) -> dict: + """Delete a tag filtering entry. **Deprecated**. + + Delete a tag filtering entry. + + :param body: Delete a tag filtering entry for a given AWS account and ``dd-aws`` namespace. + :type body: AWSTagFilterDeleteRequest + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("delete_aws_tag_filter is deprecated", DeprecationWarning, stacklevel=2) + return self._delete_aws_tag_filter_endpoint.call_with_http_info(**kwargs) + + def list_available_aws_namespaces(self, ) -> List[str]: + """List namespace rules. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoints instead.** List all namespace rules for a given Datadog-AWS integration. This endpoint takes no arguments. + + :rtype: [str] + """ + kwargs: Dict[str, Any] = {} + warnings.warn("list_available_aws_namespaces is deprecated", DeprecationWarning, stacklevel=2) + return self._list_available_aws_namespaces_endpoint.call_with_http_info(**kwargs) + + def list_aws_accounts(self, *, account_id: Union[str, UnsetType]=unset, role_name: Union[str, UnsetType]=unset, access_key_id: Union[str, UnsetType]=unset, ) -> AWSAccountListResponse: + """List all AWS integrations. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoints instead.** List all Datadog-AWS integrations available in your Datadog organization. + + :param account_id: Only return AWS accounts that matches this ``account_id``. + :type account_id: str, optional + :param role_name: Only return AWS accounts that matches this role_name. + :type role_name: str, optional + :param access_key_id: Only return AWS accounts that matches this ``access_key_id``. + :type access_key_id: str, optional + :rtype: AWSAccountListResponse + """ + kwargs: Dict[str, Any] = {} + if account_id is not unset: + kwargs["account_id"] = account_id + + if role_name is not unset: + kwargs["role_name"] = role_name + + if access_key_id is not unset: + kwargs["access_key_id"] = access_key_id + + warnings.warn("list_aws_accounts is deprecated", DeprecationWarning, stacklevel=2) + return self._list_aws_accounts_endpoint.call_with_http_info(**kwargs) + + def list_aws_event_bridge_sources(self, ) -> AWSEventBridgeListResponse: + """Get all Amazon EventBridge sources. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoints instead.** Get all Amazon EventBridge sources. + + :rtype: AWSEventBridgeListResponse + """ + kwargs: Dict[str, Any] = {} + warnings.warn("list_aws_event_bridge_sources is deprecated", DeprecationWarning, stacklevel=2) + return self._list_aws_event_bridge_sources_endpoint.call_with_http_info(**kwargs) + + def list_aws_tag_filters(self, account_id: str, ) -> AWSTagFilterListResponse: + """Get all AWS tag filters. **Deprecated**. + + Get all AWS tag filters. + + :param account_id: Only return AWS filters that matches this ``account_id``. + :type account_id: str + :rtype: AWSTagFilterListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + warnings.warn("list_aws_tag_filters is deprecated", DeprecationWarning, stacklevel=2) + return self._list_aws_tag_filters_endpoint.call_with_http_info(**kwargs) + + def update_aws_account(self, body: AWSAccount, *, account_id: Union[str, UnsetType]=unset, role_name: Union[str, UnsetType]=unset, access_key_id: Union[str, UnsetType]=unset, ) -> dict: + """Update an AWS integration. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoints instead.** Update a Datadog-Amazon Web Services integration. + + :param body: AWS request object + :type body: AWSAccount + :param account_id: Only return AWS accounts that matches this ``account_id``. + :type account_id: str, optional + :param role_name: Only return AWS accounts that match this ``role_name``. + Required if ``account_id`` is specified. + :type role_name: str, optional + :param access_key_id: Only return AWS accounts that matches this ``access_key_id``. + Required if none of the other two options are specified. + :type access_key_id: str, optional + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + if account_id is not unset: + kwargs["account_id"] = account_id + + if role_name is not unset: + kwargs["role_name"] = role_name + + if access_key_id is not unset: + kwargs["access_key_id"] = access_key_id + + kwargs["body"] = body + + warnings.warn("update_aws_account is deprecated", DeprecationWarning, stacklevel=2) + return self._update_aws_account_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/aws_logs_integration_api.py b/datadog_api_client/v1/api/aws_logs_integration_api.py new file mode 100644 index 0000000000..e6561b4411 --- /dev/null +++ b/datadog_api_client/v1/api/aws_logs_integration_api.py @@ -0,0 +1,296 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.aws_account_and_lambda_request import AWSAccountAndLambdaRequest +from datadog_api_client.v1.model.aws_logs_list_response import AWSLogsListResponse +from datadog_api_client.v1.model.aws_logs_async_response import AWSLogsAsyncResponse +from datadog_api_client.v1.model.aws_logs_list_services_response import AWSLogsListServicesResponse +from datadog_api_client.v1.model.aws_logs_services_request import AWSLogsServicesRequest + + +class AWSLogsIntegrationApi: + """ + Configure your Datadog-AWS-Logs integration directly through Datadog API. + For more information, see the `AWS integration page `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._check_aws_logs_lambda_async_endpoint = _Endpoint( + settings={ + "response_type": (AWSLogsAsyncResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/logs/check_async", + "operation_id": "check_aws_logs_lambda_async", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSAccountAndLambdaRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._check_aws_logs_services_async_endpoint = _Endpoint( + settings={ + "response_type": (AWSLogsAsyncResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/logs/services_async", + "operation_id": "check_aws_logs_services_async", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSLogsServicesRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_aws_lambda_arn_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/logs", + "operation_id": "create_aws_lambda_arn", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSAccountAndLambdaRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_aws_lambda_arn_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/logs", + "operation_id": "delete_aws_lambda_arn", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSAccountAndLambdaRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._enable_aws_log_services_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/logs/services", + "operation_id": "enable_aws_log_services", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSLogsServicesRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_aws_logs_integrations_endpoint = _Endpoint( + settings={ + "response_type": ([AWSLogsListResponse],), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/logs", + "operation_id": "list_aws_logs_integrations", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_logs_services_endpoint = _Endpoint( + settings={ + "response_type": ([AWSLogsListServicesResponse],), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/aws/logs/services", + "operation_id": "list_aws_logs_services", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def check_aws_logs_lambda_async(self, body: AWSAccountAndLambdaRequest, ) -> AWSLogsAsyncResponse: + """Check that an AWS Lambda Function exists. + + Test if permissions are present to add a log-forwarding triggers for the given services and AWS account. The input + is the same as for Enable an AWS service log collection. Subsequent requests will always repeat the above, so this + endpoint can be polled intermittently instead of blocking. + + * Returns a status of 'created' when it's checking if the Lambda exists in the account. + * Returns a status of 'waiting' while checking. + * Returns a status of 'checked and ok' if the Lambda exists. + * Returns a status of 'error' if the Lambda does not exist. + + :param body: Check AWS Log Lambda Async request body. + :type body: AWSAccountAndLambdaRequest + :rtype: AWSLogsAsyncResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._check_aws_logs_lambda_async_endpoint.call_with_http_info(**kwargs) + + def check_aws_logs_services_async(self, body: AWSLogsServicesRequest, ) -> AWSLogsAsyncResponse: + """Check permissions for log services. + + Test if permissions are present to add log-forwarding triggers for the + given services and AWS account. Input is the same as for ``EnableAWSLogServices``. + Done async, so can be repeatedly polled in a non-blocking fashion until + the async request completes. + + * Returns a status of ``created`` when it's checking if the permissions exists + in the AWS account. + * Returns a status of ``waiting`` while checking. + * Returns a status of ``checked and ok`` if the Lambda exists. + * Returns a status of ``error`` if the Lambda does not exist. + + :param body: Check AWS Logs Async Services request body. + :type body: AWSLogsServicesRequest + :rtype: AWSLogsAsyncResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._check_aws_logs_services_async_endpoint.call_with_http_info(**kwargs) + + def create_aws_lambda_arn(self, body: AWSAccountAndLambdaRequest, ) -> dict: + """Add AWS Log Lambda ARN. + + Attach the Lambda ARN of the Lambda created for the Datadog-AWS log collection to your AWS account ID to enable log collection. + + :param body: AWS Log Lambda Async request body. + :type body: AWSAccountAndLambdaRequest + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_aws_lambda_arn_endpoint.call_with_http_info(**kwargs) + + def delete_aws_lambda_arn(self, body: AWSAccountAndLambdaRequest, ) -> dict: + """Delete an AWS Logs integration. + + Delete a Datadog-AWS logs configuration by removing the specific Lambda ARN associated with a given AWS account. + + :param body: Delete AWS Lambda ARN request body. + :type body: AWSAccountAndLambdaRequest + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_aws_lambda_arn_endpoint.call_with_http_info(**kwargs) + + def enable_aws_log_services(self, body: AWSLogsServicesRequest, ) -> dict: + """Enable an AWS Logs integration. **Deprecated**. + + Enable automatic log collection for a list of services. This should be run after running ``CreateAWSLambdaARN`` to save the configuration. + + :param body: Enable AWS Log Services request body. + :type body: AWSLogsServicesRequest + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("enable_aws_log_services is deprecated", DeprecationWarning, stacklevel=2) + return self._enable_aws_log_services_endpoint.call_with_http_info(**kwargs) + + def list_aws_logs_integrations(self, ) -> List[AWSLogsListResponse]: + """List all AWS Logs integrations. **Deprecated**. + + List all Datadog-AWS Logs integrations configured in your Datadog account. + + :rtype: [AWSLogsListResponse] + """ + kwargs: Dict[str, Any] = {} + warnings.warn("list_aws_logs_integrations is deprecated", DeprecationWarning, stacklevel=2) + return self._list_aws_logs_integrations_endpoint.call_with_http_info(**kwargs) + + def list_aws_logs_services(self, ) -> List[AWSLogsListServicesResponse]: + """Get list of AWS log ready services. **Deprecated**. + + **This endpoint is deprecated - use the V2 endpoint instead.** Get the list of current AWS services that Datadog offers automatic log collection. Use returned service IDs with the services parameter for the Enable an AWS service log collection API endpoint. + + :rtype: [AWSLogsListServicesResponse] + """ + kwargs: Dict[str, Any] = {} + warnings.warn("list_aws_logs_services is deprecated", DeprecationWarning, stacklevel=2) + return self._list_aws_logs_services_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/azure_integration_api.py b/datadog_api_client/v1/api/azure_integration_api.py new file mode 100644 index 0000000000..a23d200c2d --- /dev/null +++ b/datadog_api_client/v1/api/azure_integration_api.py @@ -0,0 +1,218 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.azure_account import AzureAccount +from datadog_api_client.v1.model.azure_account_list_response import AzureAccountListResponse + + +class AzureIntegrationApi: + """ + Configure your Datadog-Azure integration directly through the Datadog API. + For more information, see the `Datadog-Azure integration page `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_azure_integration_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/azure", + "operation_id": "create_azure_integration", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AzureAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_azure_integration_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/azure", + "operation_id": "delete_azure_integration", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AzureAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_azure_integration_endpoint = _Endpoint( + settings={ + "response_type": (AzureAccountListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/azure", + "operation_id": "list_azure_integration", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_azure_host_filters_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/azure/host_filters", + "operation_id": "update_azure_host_filters", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AzureAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_azure_integration_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/azure", + "operation_id": "update_azure_integration", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AzureAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_azure_integration(self, body: AzureAccount, ) -> dict: + """Create an Azure integration. + + Create a Datadog-Azure integration. + + Using the ``POST`` method updates your integration configuration by adding your new + configuration to the existing one in your Datadog organization. + + Using the ``PUT`` method updates your integration configuration by replacing your + current configuration with the new one sent to your Datadog organization. + + :param body: Create a Datadog-Azure integration for your Datadog account request body. + :type body: AzureAccount + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_azure_integration_endpoint.call_with_http_info(**kwargs) + + def delete_azure_integration(self, body: AzureAccount, ) -> dict: + """Delete an Azure integration. + + Delete a given Datadog-Azure integration from your Datadog account. + + :param body: Delete a given Datadog-Azure integration request body. + :type body: AzureAccount + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_azure_integration_endpoint.call_with_http_info(**kwargs) + + def list_azure_integration(self, ) -> AzureAccountListResponse: + """List all Azure integrations. + + List all Datadog-Azure integrations configured in your Datadog account. + + :rtype: AzureAccountListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_azure_integration_endpoint.call_with_http_info(**kwargs) + + def update_azure_host_filters(self, body: AzureAccount, ) -> dict: + """Update Azure integration host filters. + + Update the defined list of host filters for a given Datadog-Azure integration. + + :param body: Update a Datadog-Azure integration's host filters request body. + :type body: AzureAccount + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_azure_host_filters_endpoint.call_with_http_info(**kwargs) + + def update_azure_integration(self, body: AzureAccount, ) -> dict: + """Update an Azure integration. + + Update a Datadog-Azure integration. Requires an existing ``tenant_name`` and ``client_id``. + Any other fields supplied will overwrite existing values. To overwrite ``tenant_name`` or ``client_id`` , + use ``new_tenant_name`` and ``new_client_id``. To leave a field unchanged, do not supply that field in the payload. + + :param body: Update a Datadog-Azure integration request body. + :type body: AzureAccount + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_azure_integration_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/dashboard_lists_api.py b/datadog_api_client/v1/api/dashboard_lists_api.py new file mode 100644 index 0000000000..f520020484 --- /dev/null +++ b/datadog_api_client/v1/api/dashboard_lists_api.py @@ -0,0 +1,222 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.dashboard_list_list_response import DashboardListListResponse +from datadog_api_client.v1.model.dashboard_list import DashboardList +from datadog_api_client.v1.model.dashboard_list_delete_response import DashboardListDeleteResponse + + +class DashboardListsApi: + """ + Interact with your dashboard lists through the API to + organize, find, and share all of your dashboards with your team and + organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_dashboard_list_endpoint = _Endpoint( + settings={ + "response_type": (DashboardList,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/lists/manual", + "operation_id": "create_dashboard_list", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DashboardList,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_dashboard_list_endpoint = _Endpoint( + settings={ + "response_type": (DashboardListDeleteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/lists/manual/{list_id}", + "operation_id": "delete_dashboard_list", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "list_id": { + "required": True, + "openapi_types": (int,), + "attribute": "list_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_dashboard_list_endpoint = _Endpoint( + settings={ + "response_type": (DashboardList,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/lists/manual/{list_id}", + "operation_id": "get_dashboard_list", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "list_id": { + "required": True, + "openapi_types": (int,), + "attribute": "list_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_dashboard_lists_endpoint = _Endpoint( + settings={ + "response_type": (DashboardListListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/lists/manual", + "operation_id": "list_dashboard_lists", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_dashboard_list_endpoint = _Endpoint( + settings={ + "response_type": (DashboardList,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/lists/manual/{list_id}", + "operation_id": "update_dashboard_list", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "list_id": { + "required": True, + "openapi_types": (int,), + "attribute": "list_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (DashboardList,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_dashboard_list(self, body: DashboardList, ) -> DashboardList: + """Create a dashboard list. + + Create an empty dashboard list. + + :param body: Create a dashboard list request body. + :type body: DashboardList + :rtype: DashboardList + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_dashboard_list_endpoint.call_with_http_info(**kwargs) + + def delete_dashboard_list(self, list_id: int, ) -> DashboardListDeleteResponse: + """Delete a dashboard list. + + Delete a dashboard list. + + :param list_id: ID of the dashboard list to delete. + :type list_id: int + :rtype: DashboardListDeleteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["list_id"] = list_id + + return self._delete_dashboard_list_endpoint.call_with_http_info(**kwargs) + + def get_dashboard_list(self, list_id: int, ) -> DashboardList: + """Get a dashboard list. + + Fetch an existing dashboard list's definition. + + :param list_id: ID of the dashboard list to fetch. + :type list_id: int + :rtype: DashboardList + """ + kwargs: Dict[str, Any] = {} + kwargs["list_id"] = list_id + + return self._get_dashboard_list_endpoint.call_with_http_info(**kwargs) + + def list_dashboard_lists(self, ) -> DashboardListListResponse: + """Get all dashboard lists. + + Fetch all of your existing dashboard list definitions. + + :rtype: DashboardListListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_dashboard_lists_endpoint.call_with_http_info(**kwargs) + + def update_dashboard_list(self, list_id: int, body: DashboardList, ) -> DashboardList: + """Update a dashboard list. + + Update the name of a dashboard list. + + :param list_id: ID of the dashboard list to update. + :type list_id: int + :param body: Update a dashboard list request body. + :type body: DashboardList + :rtype: DashboardList + """ + kwargs: Dict[str, Any] = {} + kwargs["list_id"] = list_id + + kwargs["body"] = body + + return self._update_dashboard_list_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/dashboards_api.py b/datadog_api_client/v1/api/dashboards_api.py new file mode 100644 index 0000000000..2cb38b3b8d --- /dev/null +++ b/datadog_api_client/v1/api/dashboards_api.py @@ -0,0 +1,700 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.dashboard_bulk_delete_request import DashboardBulkDeleteRequest +from datadog_api_client.v1.model.dashboard_summary import DashboardSummary +from datadog_api_client.v1.model.dashboard_summary_definition import DashboardSummaryDefinition +from datadog_api_client.v1.model.dashboard_restore_request import DashboardRestoreRequest +from datadog_api_client.v1.model.dashboard import Dashboard +from datadog_api_client.v1.model.shared_dashboard import SharedDashboard +from datadog_api_client.v1.model.delete_shared_dashboard_response import DeleteSharedDashboardResponse +from datadog_api_client.v1.model.shared_dashboard_update_request import SharedDashboardUpdateRequest +from datadog_api_client.v1.model.shared_dashboard_invites import SharedDashboardInvites +from datadog_api_client.v1.model.dashboard_delete_response import DashboardDeleteResponse + + +class DashboardsApi: + """ + Manage all your dashboards, as well as access to your shared dashboards, through the API. See the `Dashboards page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_dashboard_endpoint = _Endpoint( + settings={ + "response_type": (Dashboard,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard", + "operation_id": "create_dashboard", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (Dashboard,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_public_dashboard_endpoint = _Endpoint( + settings={ + "response_type": (SharedDashboard,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/public", + "operation_id": "create_public_dashboard", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SharedDashboard,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_dashboard_endpoint = _Endpoint( + settings={ + "response_type": (DashboardDeleteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/{dashboard_id}", + "operation_id": "delete_dashboard", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "dashboard_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dashboard_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_dashboards_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard", + "operation_id": "delete_dashboards", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DashboardBulkDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_public_dashboard_endpoint = _Endpoint( + settings={ + "response_type": (DeleteSharedDashboardResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/public/{token}", + "operation_id": "delete_public_dashboard", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "token": { + "required": True, + "openapi_types": (str,), + "attribute": "token", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_public_dashboard_invitation_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/public/{token}/invitation", + "operation_id": "delete_public_dashboard_invitation", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "token": { + "required": True, + "openapi_types": (str,), + "attribute": "token", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SharedDashboardInvites,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_dashboard_endpoint = _Endpoint( + settings={ + "response_type": (Dashboard,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/{dashboard_id}", + "operation_id": "get_dashboard", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "dashboard_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dashboard_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_public_dashboard_endpoint = _Endpoint( + settings={ + "response_type": (SharedDashboard,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/public/{token}", + "operation_id": "get_public_dashboard", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "token": { + "required": True, + "openapi_types": (str,), + "attribute": "token", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_public_dashboard_invitations_endpoint = _Endpoint( + settings={ + "response_type": (SharedDashboardInvites,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/public/{token}/invitation", + "operation_id": "get_public_dashboard_invitations", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "token": { + "required": True, + "openapi_types": (str,), + "attribute": "token", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page_size", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page_number", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_dashboards_endpoint = _Endpoint( + settings={ + "response_type": (DashboardSummary,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard", + "operation_id": "list_dashboards", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "filter_shared": { + "openapi_types": (bool,), + "attribute": "filter[shared]", + "location": "query", + }, + "filter_deleted": { + "openapi_types": (bool,), + "attribute": "filter[deleted]", + "location": "query", + }, + "count": { + "openapi_types": (int,), + "attribute": "count", + "location": "query", + }, + "start": { + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._restore_dashboards_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard", + "operation_id": "restore_dashboards", + "http_method": "PATCH", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DashboardRestoreRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._send_public_dashboard_invitation_endpoint = _Endpoint( + settings={ + "response_type": (SharedDashboardInvites,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/public/{token}/invitation", + "operation_id": "send_public_dashboard_invitation", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "token": { + "required": True, + "openapi_types": (str,), + "attribute": "token", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SharedDashboardInvites,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_dashboard_endpoint = _Endpoint( + settings={ + "response_type": (Dashboard,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/{dashboard_id}", + "operation_id": "update_dashboard", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "dashboard_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dashboard_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (Dashboard,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_public_dashboard_endpoint = _Endpoint( + settings={ + "response_type": (SharedDashboard,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/dashboard/public/{token}", + "operation_id": "update_public_dashboard", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "token": { + "required": True, + "openapi_types": (str,), + "attribute": "token", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SharedDashboardUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_dashboard(self, body: Dashboard, ) -> Dashboard: + """Create a new dashboard. + + Create a dashboard using the specified options. When defining queries in your widgets, take note of which queries should have the ``as_count()`` or ``as_rate()`` modifiers appended. + Refer to the following `documentation `_ for more information on these modifiers. + + :param body: Create a dashboard request body. + :type body: Dashboard + :rtype: Dashboard + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_dashboard_endpoint.call_with_http_info(**kwargs) + + def create_public_dashboard(self, body: SharedDashboard, ) -> SharedDashboard: + """Create a shared dashboard. + + Share a specified private dashboard, generating a URL at which it can be publicly viewed. + + :param body: Create a shared dashboard request body. + :type body: SharedDashboard + :rtype: SharedDashboard + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_public_dashboard_endpoint.call_with_http_info(**kwargs) + + def delete_dashboard(self, dashboard_id: str, ) -> DashboardDeleteResponse: + """Delete a dashboard. + + Delete a dashboard using the specified ID. + + :param dashboard_id: The ID of the dashboard. + :type dashboard_id: str + :rtype: DashboardDeleteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_id"] = dashboard_id + + return self._delete_dashboard_endpoint.call_with_http_info(**kwargs) + + def delete_dashboards(self, body: DashboardBulkDeleteRequest, ) -> None: + """Delete dashboards. + + Delete dashboards using the specified IDs. If there are any failures, no dashboards will be deleted (partial success is not allowed). + + :param body: Delete dashboards request body. + :type body: DashboardBulkDeleteRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_dashboards_endpoint.call_with_http_info(**kwargs) + + def delete_public_dashboard(self, token: str, ) -> DeleteSharedDashboardResponse: + """Revoke a shared dashboard URL. + + Revoke the public URL for a dashboard (rendering it private) associated with the specified token. + + :param token: The token of the shared dashboard. + :type token: str + :rtype: DeleteSharedDashboardResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["token"] = token + + return self._delete_public_dashboard_endpoint.call_with_http_info(**kwargs) + + def delete_public_dashboard_invitation(self, token: str, body: SharedDashboardInvites, ) -> None: + """Revoke shared dashboard invitations. + + Revoke previously sent invitation emails and active sessions used to access a given shared dashboard for specific email addresses. + + :param token: The token of the shared dashboard. + :type token: str + :param body: Shared Dashboard Invitation deletion request body. + :type body: SharedDashboardInvites + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["token"] = token + + kwargs["body"] = body + + return self._delete_public_dashboard_invitation_endpoint.call_with_http_info(**kwargs) + + def get_dashboard(self, dashboard_id: str, ) -> Dashboard: + """Get a dashboard. + + Get a dashboard using the specified ID. + + :param dashboard_id: The ID of the dashboard. + :type dashboard_id: str + :rtype: Dashboard + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_id"] = dashboard_id + + return self._get_dashboard_endpoint.call_with_http_info(**kwargs) + + def get_public_dashboard(self, token: str, ) -> SharedDashboard: + """Get a shared dashboard. + + Fetch an existing shared dashboard's sharing metadata associated with the specified token. + + :param token: The token of the shared dashboard. Generated when a dashboard is shared. + :type token: str + :rtype: SharedDashboard + """ + kwargs: Dict[str, Any] = {} + kwargs["token"] = token + + return self._get_public_dashboard_endpoint.call_with_http_info(**kwargs) + + def get_public_dashboard_invitations(self, token: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> SharedDashboardInvites: + """Get all invitations for a shared dashboard. + + Describe the invitations that exist for the given shared dashboard (paginated). + + :param token: Token of the shared dashboard for which to fetch invitations. + :type token: str + :param page_size: The number of records to return in a single request. + :type page_size: int, optional + :param page_number: The page to access (base 0). + :type page_number: int, optional + :rtype: SharedDashboardInvites + """ + kwargs: Dict[str, Any] = {} + kwargs["token"] = token + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._get_public_dashboard_invitations_endpoint.call_with_http_info(**kwargs) + + def list_dashboards(self, *, filter_shared: Union[bool, UnsetType]=unset, filter_deleted: Union[bool, UnsetType]=unset, count: Union[int, UnsetType]=unset, start: Union[int, UnsetType]=unset, ) -> DashboardSummary: + """Get all dashboards. + + Get all dashboards. + + **Note** : This query will only return custom created or cloned dashboards. + This query will not return preset dashboards. + + :param filter_shared: When ``true`` , this query only returns shared custom created + or cloned dashboards. + :type filter_shared: bool, optional + :param filter_deleted: When ``true`` , this query returns only deleted custom-created + or cloned dashboards. This parameter is incompatible with ``filter[shared]``. + :type filter_deleted: bool, optional + :param count: The maximum number of dashboards returned in the list. + :type count: int, optional + :param start: The specific offset to use as the beginning of the returned response. + :type start: int, optional + :rtype: DashboardSummary + """ + kwargs: Dict[str, Any] = {} + if filter_shared is not unset: + kwargs["filter_shared"] = filter_shared + + if filter_deleted is not unset: + kwargs["filter_deleted"] = filter_deleted + + if count is not unset: + kwargs["count"] = count + + if start is not unset: + kwargs["start"] = start + + return self._list_dashboards_endpoint.call_with_http_info(**kwargs) + + def list_dashboards_with_pagination(self, *, filter_shared: Union[bool, UnsetType]=unset, filter_deleted: Union[bool, UnsetType]=unset, count: Union[int, UnsetType]=unset, start: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[DashboardSummaryDefinition]: + """Get all dashboards. + + Provide a paginated version of :meth:`list_dashboards`, returning all items. + + :param filter_shared: When ``true`` , this query only returns shared custom created + or cloned dashboards. + :type filter_shared: bool, optional + :param filter_deleted: When ``true`` , this query returns only deleted custom-created + or cloned dashboards. This parameter is incompatible with ``filter[shared]``. + :type filter_deleted: bool, optional + :param count: The maximum number of dashboards returned in the list. + :type count: int, optional + :param start: The specific offset to use as the beginning of the returned response. + :type start: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[DashboardSummaryDefinition] + """ + kwargs: Dict[str, Any] = {} + if filter_shared is not unset: + kwargs["filter_shared"] = filter_shared + + if filter_deleted is not unset: + kwargs["filter_deleted"] = filter_deleted + + if count is not unset: + kwargs["count"] = count + + if start is not unset: + kwargs["start"] = start + + local_page_size = get_attribute_from_path(kwargs, "count", 100) + endpoint = self._list_dashboards_endpoint + set_attribute_from_path(kwargs, "count", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "dashboards", + "page_offset_param": "start", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def restore_dashboards(self, body: DashboardRestoreRequest, ) -> None: + """Restore deleted dashboards. + + Restore dashboards using the specified IDs. If there are any failures, no dashboards will be restored (partial success is not allowed). + + :param body: Restore dashboards request body. + :type body: DashboardRestoreRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._restore_dashboards_endpoint.call_with_http_info(**kwargs) + + def send_public_dashboard_invitation(self, token: str, body: SharedDashboardInvites, ) -> SharedDashboardInvites: + """Send shared dashboard invitation email. + + Send emails to specified email addresses containing links to access a given authenticated shared dashboard. Email addresses must already belong to the authenticated shared dashboard's share_list. + + :param token: The token of the shared dashboard. + :type token: str + :param body: Shared Dashboard Invitation request body. + :type body: SharedDashboardInvites + :rtype: SharedDashboardInvites + """ + kwargs: Dict[str, Any] = {} + kwargs["token"] = token + + kwargs["body"] = body + + return self._send_public_dashboard_invitation_endpoint.call_with_http_info(**kwargs) + + def update_dashboard(self, dashboard_id: str, body: Dashboard, ) -> Dashboard: + """Update a dashboard. + + Update a dashboard using the specified ID. + + :param dashboard_id: The ID of the dashboard. + :type dashboard_id: str + :param body: Update Dashboard request body. + :type body: Dashboard + :rtype: Dashboard + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_id"] = dashboard_id + + kwargs["body"] = body + + return self._update_dashboard_endpoint.call_with_http_info(**kwargs) + + def update_public_dashboard(self, token: str, body: SharedDashboardUpdateRequest, ) -> SharedDashboard: + """Update a shared dashboard. + + Update a shared dashboard associated with the specified token. + + :param token: The token of the shared dashboard. + :type token: str + :param body: Update Dashboard request body. + :type body: SharedDashboardUpdateRequest + :rtype: SharedDashboard + """ + kwargs: Dict[str, Any] = {} + kwargs["token"] = token + + kwargs["body"] = body + + return self._update_public_dashboard_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/downtimes_api.py b/datadog_api_client/v1/api/downtimes_api.py new file mode 100644 index 0000000000..a59e973f67 --- /dev/null +++ b/datadog_api_client/v1/api/downtimes_api.py @@ -0,0 +1,326 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.downtime import Downtime +from datadog_api_client.v1.model.canceled_downtimes_ids import CanceledDowntimesIds +from datadog_api_client.v1.model.cancel_downtimes_by_scope_request import CancelDowntimesByScopeRequest + + +class DowntimesApi: + """ + `Downtiming `_ gives + you greater control over monitor notifications by allowing you to globally exclude + scopes from alerting. Downtime settings, which can be scheduled with start and + end times, prevent all alerting related to specified Datadog tags. + + **Note:** ``curl`` commands require `url encoding `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._cancel_downtime_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/downtime/{downtime_id}", + "operation_id": "cancel_downtime", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (int,), + "attribute": "downtime_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._cancel_downtimes_by_scope_endpoint = _Endpoint( + settings={ + "response_type": (CanceledDowntimesIds,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/downtime/cancel/by_scope", + "operation_id": "cancel_downtimes_by_scope", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CancelDowntimesByScopeRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_downtime_endpoint = _Endpoint( + settings={ + "response_type": (Downtime,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/downtime", + "operation_id": "create_downtime", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (Downtime,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_downtime_endpoint = _Endpoint( + settings={ + "response_type": (Downtime,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/downtime/{downtime_id}", + "operation_id": "get_downtime", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (int,), + "attribute": "downtime_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_downtimes_endpoint = _Endpoint( + settings={ + "response_type": ([Downtime],), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/downtime", + "operation_id": "list_downtimes", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "current_only": { + "openapi_types": (bool,), + "attribute": "current_only", + "location": "query", + }, + "with_creator": { + "openapi_types": (bool,), + "attribute": "with_creator", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_monitor_downtimes_endpoint = _Endpoint( + settings={ + "response_type": ([Downtime],), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor/{monitor_id}/downtimes", + "operation_id": "list_monitor_downtimes", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "monitor_id": { + "required": True, + "openapi_types": (int,), + "attribute": "monitor_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_downtime_endpoint = _Endpoint( + settings={ + "response_type": (Downtime,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/downtime/{downtime_id}", + "operation_id": "update_downtime", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (int,), + "attribute": "downtime_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (Downtime,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def cancel_downtime(self, downtime_id: int, ) -> None: + """Cancel a downtime. **Deprecated**. + + Cancel a downtime. **Note:** This endpoint has been deprecated. Please use v2 endpoints. + + :param downtime_id: ID of the downtime to cancel. + :type downtime_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + warnings.warn("cancel_downtime is deprecated", DeprecationWarning, stacklevel=2) + return self._cancel_downtime_endpoint.call_with_http_info(**kwargs) + + def cancel_downtimes_by_scope(self, body: CancelDowntimesByScopeRequest, ) -> CanceledDowntimesIds: + """Cancel downtimes by scope. **Deprecated**. + + Delete all downtimes that match the scope of ``X``. **Note:** This only interacts with Downtimes created using v1 endpoints. This endpoint has been deprecated and will not be replaced. Please use v2 endpoints to find and cancel downtimes. + + :param body: Scope to cancel downtimes for. + :type body: CancelDowntimesByScopeRequest + :rtype: CanceledDowntimesIds + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("cancel_downtimes_by_scope is deprecated", DeprecationWarning, stacklevel=2) + return self._cancel_downtimes_by_scope_endpoint.call_with_http_info(**kwargs) + + def create_downtime(self, body: Downtime, ) -> Downtime: + """Schedule a downtime. **Deprecated**. + + Schedule a downtime. **Note:** This endpoint has been deprecated. Please use v2 endpoints. + + :param body: Schedule a downtime request body. + :type body: Downtime + :rtype: Downtime + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_downtime is deprecated", DeprecationWarning, stacklevel=2) + return self._create_downtime_endpoint.call_with_http_info(**kwargs) + + def get_downtime(self, downtime_id: int, ) -> Downtime: + """Get a downtime. **Deprecated**. + + Get downtime detail by ``downtime_id``. **Note:** This endpoint has been deprecated. Please use v2 endpoints. + + :param downtime_id: ID of the downtime to fetch. + :type downtime_id: int + :rtype: Downtime + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + warnings.warn("get_downtime is deprecated", DeprecationWarning, stacklevel=2) + return self._get_downtime_endpoint.call_with_http_info(**kwargs) + + def list_downtimes(self, *, current_only: Union[bool, UnsetType]=unset, with_creator: Union[bool, UnsetType]=unset, ) -> List[Downtime]: + """Get all downtimes. **Deprecated**. + + Get all scheduled downtimes. **Note:** This endpoint has been deprecated. Please use v2 endpoints. + + :param current_only: Only return downtimes that are active when the request is made. + :type current_only: bool, optional + :param with_creator: Return creator information. + :type with_creator: bool, optional + :rtype: [Downtime] + """ + kwargs: Dict[str, Any] = {} + if current_only is not unset: + kwargs["current_only"] = current_only + + if with_creator is not unset: + kwargs["with_creator"] = with_creator + + warnings.warn("list_downtimes is deprecated", DeprecationWarning, stacklevel=2) + return self._list_downtimes_endpoint.call_with_http_info(**kwargs) + + def list_monitor_downtimes(self, monitor_id: int, ) -> List[Downtime]: + """Get active downtimes for a monitor. **Deprecated**. + + Get all active v1 downtimes for the specified monitor. **Note:** This endpoint has been deprecated. Please use v2 endpoints. + + :param monitor_id: The id of the monitor + :type monitor_id: int + :rtype: [Downtime] + """ + kwargs: Dict[str, Any] = {} + kwargs["monitor_id"] = monitor_id + + warnings.warn("list_monitor_downtimes is deprecated", DeprecationWarning, stacklevel=2) + return self._list_monitor_downtimes_endpoint.call_with_http_info(**kwargs) + + def update_downtime(self, downtime_id: int, body: Downtime, ) -> Downtime: + """Update a downtime. **Deprecated**. + + Update a single downtime by ``downtime_id``. **Note:** This endpoint has been deprecated. Please use v2 endpoints. + + :param downtime_id: ID of the downtime to update. + :type downtime_id: int + :param body: Update a downtime request body. + :type body: Downtime + :rtype: Downtime + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + kwargs["body"] = body + + warnings.warn("update_downtime is deprecated", DeprecationWarning, stacklevel=2) + return self._update_downtime_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/events_api.py b/datadog_api_client/v1/api/events_api.py new file mode 100644 index 0000000000..e69fdc40a7 --- /dev/null +++ b/datadog_api_client/v1/api/events_api.py @@ -0,0 +1,242 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.event_list_response import EventListResponse +from datadog_api_client.v1.model.event_priority import EventPriority +from datadog_api_client.v1.model.event_create_response import EventCreateResponse +from datadog_api_client.v1.model.event_create_request import EventCreateRequest +from datadog_api_client.v1.model.event_response import EventResponse + + +class EventsApi: + """ + The Event Management API allows you to programmatically post events to the Events Explorer and fetch events from the Events Explorer. See the `Event Management page `_ for more information. + + **Update to Datadog monitor events aggregation_key starting March 1, 2025:** The Datadog monitor events ``aggregation_key`` is unique to each Monitor ID. Starting March 1st, this key will also include Monitor Group, making it unique per *Monitor ID and Monitor Group*. If you're using monitor events ``aggregation_key`` in dashboard queries or the Event API, you must migrate to use ``@monitor.id``. Reach out to `support `_ if you have any question. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_event_endpoint = _Endpoint( + settings={ + "response_type": (EventCreateResponse,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v1/events", + "operation_id": "create_event", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (EventCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_event_endpoint = _Endpoint( + settings={ + "response_type": (EventResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/events/{event_id}", + "operation_id": "get_event", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "event_id": { + "required": True, + "openapi_types": (int,), + "attribute": "event_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_events_endpoint = _Endpoint( + settings={ + "response_type": (EventListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/events", + "operation_id": "list_events", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "priority": { + "openapi_types": (EventPriority,), + "attribute": "priority", + "location": "query", + }, + "sources": { + "openapi_types": (str,), + "attribute": "sources", + "location": "query", + }, + "tags": { + "openapi_types": (str,), + "attribute": "tags", + "location": "query", + }, + "unaggregated": { + "openapi_types": (bool,), + "attribute": "unaggregated", + "location": "query", + }, + "exclude_aggregate": { + "openapi_types": (bool,), + "attribute": "exclude_aggregate", + "location": "query", + }, + "page": { + "validation": { + "inclusive_maximum": 2147483647, + }, + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def create_event(self, body: EventCreateRequest, ) -> EventCreateResponse: + """Post an event. + + This endpoint allows you to post events to the stream. + Tag them, set priority and event aggregate them with other events. + + :param body: Event request object + :type body: EventCreateRequest + :rtype: EventCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_event_endpoint.call_with_http_info(**kwargs) + + def get_event(self, event_id: int, ) -> EventResponse: + """Get an event. + + This endpoint allows you to query for event details. + + **Note** : If the event you’re querying contains markdown formatting of any kind, + you may see characters such as ``%`` , ``\\`` , ``n`` in your output. + + :param event_id: The ID of the event. + :type event_id: int + :rtype: EventResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["event_id"] = event_id + + return self._get_event_endpoint.call_with_http_info(**kwargs) + + def list_events(self, start: int, end: int, *, priority: Union[EventPriority, UnsetType]=unset, sources: Union[str, UnsetType]=unset, tags: Union[str, UnsetType]=unset, unaggregated: Union[bool, UnsetType]=unset, exclude_aggregate: Union[bool, UnsetType]=unset, page: Union[int, UnsetType]=unset, ) -> EventListResponse: + """Get a list of events. + + The event stream can be queried and filtered by time, priority, sources and tags. + + **Notes** : + + * + If the event you’re querying contains markdown formatting of any kind, + you may see characters such as ``%`` , ``\\`` , ``n`` in your output. + + * + This endpoint returns a maximum of ``1000`` most recent results. To return additional results, + identify the last timestamp of the last result and set that as the ``end`` query time to + paginate the results. You can also use the page parameter to specify which set of ``1000`` results to return. + + :param start: POSIX timestamp. + :type start: int + :param end: POSIX timestamp. + :type end: int + :param priority: Priority of your events, either ``low`` or ``normal``. + :type priority: EventPriority, optional + :param sources: A comma separated string of sources. + :type sources: str, optional + :param tags: A comma separated list indicating what tags, if any, should be used to filter the list of events. + :type tags: str, optional + :param unaggregated: Set unaggregated to ``true`` to return all events within the specified [ ``start`` , ``end`` ] timeframe. + Otherwise if an event is aggregated to a parent event with a timestamp outside of the timeframe, + it won't be available in the output. Aggregated events with ``is_aggregate=true`` in the response will still be returned unless exclude_aggregate is set to ``true.`` + :type unaggregated: bool, optional + :param exclude_aggregate: Set ``exclude_aggregate`` to ``true`` to only return unaggregated events where ``is_aggregate=false`` in the response. If the ``exclude_aggregate`` parameter is set to ``true`` , + then the unaggregated parameter is ignored and will be ``true`` by default. + :type exclude_aggregate: bool, optional + :param page: By default 1000 results are returned per request. Set page to the number of the page to return with ``0`` being the first page. The page parameter can only be used + when either unaggregated or exclude_aggregate is set to ``true.`` + :type page: int, optional + :rtype: EventListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start"] = start + + kwargs["end"] = end + + if priority is not unset: + kwargs["priority"] = priority + + if sources is not unset: + kwargs["sources"] = sources + + if tags is not unset: + kwargs["tags"] = tags + + if unaggregated is not unset: + kwargs["unaggregated"] = unaggregated + + if exclude_aggregate is not unset: + kwargs["exclude_aggregate"] = exclude_aggregate + + if page is not unset: + kwargs["page"] = page + + return self._list_events_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/gcp_integration_api.py b/datadog_api_client/v1/api/gcp_integration_api.py new file mode 100644 index 0000000000..654af2ee04 --- /dev/null +++ b/datadog_api_client/v1/api/gcp_integration_api.py @@ -0,0 +1,180 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.gcp_account import GCPAccount +from datadog_api_client.v1.model.gcp_account_list_response import GCPAccountListResponse + + +class GCPIntegrationApi: + """ + Configure your Datadog-Google Cloud Platform (GCP) integration directly + through the Datadog API. Read more about the `Datadog-Google Cloud Platform integration `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_gcp_integration_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/gcp", + "operation_id": "create_gcp_integration", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GCPAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_gcp_integration_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/gcp", + "operation_id": "delete_gcp_integration", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GCPAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_gcp_integration_endpoint = _Endpoint( + settings={ + "response_type": (GCPAccountListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/gcp", + "operation_id": "list_gcp_integration", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_gcp_integration_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/gcp", + "operation_id": "update_gcp_integration", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GCPAccount,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_gcp_integration(self, body: GCPAccount, ) -> dict: + """Create a GCP integration. **Deprecated**. + + This endpoint is deprecated – use the V2 endpoints instead. Create a Datadog-GCP integration. + + :param body: Create a Datadog-GCP integration. + :type body: GCPAccount + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_gcp_integration is deprecated", DeprecationWarning, stacklevel=2) + return self._create_gcp_integration_endpoint.call_with_http_info(**kwargs) + + def delete_gcp_integration(self, body: GCPAccount, ) -> dict: + """Delete a GCP integration. **Deprecated**. + + This endpoint is deprecated – use the V2 endpoints instead. Delete a given Datadog-GCP integration. + + :param body: Delete a given Datadog-GCP integration. + :type body: GCPAccount + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("delete_gcp_integration is deprecated", DeprecationWarning, stacklevel=2) + return self._delete_gcp_integration_endpoint.call_with_http_info(**kwargs) + + def list_gcp_integration(self, ) -> GCPAccountListResponse: + """List all GCP integrations. **Deprecated**. + + This endpoint is deprecated – use the V2 endpoints instead. List all Datadog-GCP integrations configured in your Datadog account. + + :rtype: GCPAccountListResponse + """ + kwargs: Dict[str, Any] = {} + warnings.warn("list_gcp_integration is deprecated", DeprecationWarning, stacklevel=2) + return self._list_gcp_integration_endpoint.call_with_http_info(**kwargs) + + def update_gcp_integration(self, body: GCPAccount, ) -> dict: + """Update a GCP integration. **Deprecated**. + + This endpoint is deprecated – use the V2 endpoints instead. Update a Datadog-GCP integrations host_filters and/or auto-mute. + Requires a ``project_id`` and ``client_email`` , however these fields cannot be updated. + If you need to update these fields, delete and use the create ( ``POST`` ) endpoint. + The unspecified fields will keep their original values. + + :param body: Update a Datadog-GCP integration. + :type body: GCPAccount + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("update_gcp_integration is deprecated", DeprecationWarning, stacklevel=2) + return self._update_gcp_integration_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/hosts_api.py b/datadog_api_client/v1/api/hosts_api.py new file mode 100644 index 0000000000..7af496c640 --- /dev/null +++ b/datadog_api_client/v1/api/hosts_api.py @@ -0,0 +1,270 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.host_mute_response import HostMuteResponse +from datadog_api_client.v1.model.host_mute_settings import HostMuteSettings +from datadog_api_client.v1.model.host_list_response import HostListResponse +from datadog_api_client.v1.model.host_totals import HostTotals + + +class HostsApi: + """ + Get information about your infrastructure hosts in Datadog, and mute or unmute any notifications from your hosts. See the `Infrastructure page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_host_totals_endpoint = _Endpoint( + settings={ + "response_type": (HostTotals,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/hosts/totals", + "operation_id": "get_host_totals", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "_from": { + "openapi_types": (int,), + "attribute": "from", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_hosts_endpoint = _Endpoint( + settings={ + "response_type": (HostListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/hosts", + "operation_id": "list_hosts", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "sort_field": { + "openapi_types": (str,), + "attribute": "sort_field", + "location": "query", + }, + "sort_dir": { + "openapi_types": (str,), + "attribute": "sort_dir", + "location": "query", + }, + "start": { + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "count": { + "openapi_types": (int,), + "attribute": "count", + "location": "query", + }, + "_from": { + "openapi_types": (int,), + "attribute": "from", + "location": "query", + }, + "include_muted_hosts_data": { + "openapi_types": (bool,), + "attribute": "include_muted_hosts_data", + "location": "query", + }, + "include_hosts_metadata": { + "openapi_types": (bool,), + "attribute": "include_hosts_metadata", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._mute_host_endpoint = _Endpoint( + settings={ + "response_type": (HostMuteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/host/{host_name}/mute", + "operation_id": "mute_host", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "host_name": { + "required": True, + "openapi_types": (str,), + "attribute": "host_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (HostMuteSettings,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._unmute_host_endpoint = _Endpoint( + settings={ + "response_type": (HostMuteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/host/{host_name}/unmute", + "operation_id": "unmute_host", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "host_name": { + "required": True, + "openapi_types": (str,), + "attribute": "host_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_host_totals(self, *, _from: Union[int, UnsetType]=unset, ) -> HostTotals: + """Get the total number of active hosts. + + This endpoint returns the total number of active and up hosts in your Datadog account. + Active means the host has reported in the past hour, and up means it has reported in the past two hours. + + :param _from: Number of seconds from which you want to get total number of active hosts. + :type _from: int, optional + :rtype: HostTotals + """ + kwargs: Dict[str, Any] = {} + if _from is not unset: + kwargs["_from"] = _from + + return self._get_host_totals_endpoint.call_with_http_info(**kwargs) + + def list_hosts(self, *, filter: Union[str, UnsetType]=unset, sort_field: Union[str, UnsetType]=unset, sort_dir: Union[str, UnsetType]=unset, start: Union[int, UnsetType]=unset, count: Union[int, UnsetType]=unset, _from: Union[int, UnsetType]=unset, include_muted_hosts_data: Union[bool, UnsetType]=unset, include_hosts_metadata: Union[bool, UnsetType]=unset, ) -> HostListResponse: + """Get all hosts for your organization. + + This endpoint allows searching for hosts by name, alias, or tag. + Hosts live within the past 3 hours are included by default. + Retention is 7 days. + Results are paginated with a max of 1000 results at a time. + **Note:** If the host is an Amazon EC2 instance, ``id`` is replaced with ``aws_id`` in the response. + **Note** : To enrich the data returned by this endpoint with security scans, see the new `api/v2/security/scanned-assets-metadata `_ endpoint. + + :param filter: String to filter search results. + :type filter: str, optional + :param sort_field: Sort hosts by this field. + :type sort_field: str, optional + :param sort_dir: Direction of sort. Options include ``asc`` and ``desc``. + :type sort_dir: str, optional + :param start: Specify the starting point for the host search results. For example, if you set ``count`` to 100 and the first 100 results have already been returned, you can set ``start`` to ``101`` to get the next 100 results. + :type start: int, optional + :param count: Number of hosts to return. Max 1000. + :type count: int, optional + :param _from: Number of seconds since UNIX epoch from which you want to search your hosts. + :type _from: int, optional + :param include_muted_hosts_data: Include information on the muted status of hosts and when the mute expires. + :type include_muted_hosts_data: bool, optional + :param include_hosts_metadata: Include additional metadata about the hosts (agent_version, machine, platform, processor, etc.). + :type include_hosts_metadata: bool, optional + :rtype: HostListResponse + """ + kwargs: Dict[str, Any] = {} + if filter is not unset: + kwargs["filter"] = filter + + if sort_field is not unset: + kwargs["sort_field"] = sort_field + + if sort_dir is not unset: + kwargs["sort_dir"] = sort_dir + + if start is not unset: + kwargs["start"] = start + + if count is not unset: + kwargs["count"] = count + + if _from is not unset: + kwargs["_from"] = _from + + if include_muted_hosts_data is not unset: + kwargs["include_muted_hosts_data"] = include_muted_hosts_data + + if include_hosts_metadata is not unset: + kwargs["include_hosts_metadata"] = include_hosts_metadata + + return self._list_hosts_endpoint.call_with_http_info(**kwargs) + + def mute_host(self, host_name: str, body: HostMuteSettings, ) -> HostMuteResponse: + """Mute a host. + + Mute a host. **Note:** This creates a `Downtime V2 `_ for the host. + + :param host_name: Name of the host to mute. + :type host_name: str + :param body: Mute a host request body. + :type body: HostMuteSettings + :rtype: HostMuteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["host_name"] = host_name + + kwargs["body"] = body + + return self._mute_host_endpoint.call_with_http_info(**kwargs) + + def unmute_host(self, host_name: str, ) -> HostMuteResponse: + """Unmute a host. + + Unmutes a host. This endpoint takes no JSON arguments. + + :param host_name: Name of the host to unmute. + :type host_name: str + :rtype: HostMuteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["host_name"] = host_name + + return self._unmute_host_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/ip_ranges_api.py b/datadog_api_client/v1/api/ip_ranges_api.py new file mode 100644 index 0000000000..f1eb72fcf3 --- /dev/null +++ b/datadog_api_client/v1/api/ip_ranges_api.py @@ -0,0 +1,108 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.ip_ranges import IPRanges + + +class IPRangesApi: + """ + Get a list of IP prefixes belonging to Datadog. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_ip_ranges_endpoint = _Endpoint( + settings={ + "response_type": (IPRanges,), + "auth": [], + "endpoint_path": "/", + "operation_id": "get_ip_ranges", + "http_method": "GET", + "version": "v1", + "servers": [ + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "The regional site for Datadog customers.", + "default_value": "datadoghq.com", + "enum_values": [ + "datadoghq.com", + "us3.datadoghq.com", + "us5.datadoghq.com", + "ap1.datadoghq.com", + "ap2.datadoghq.com", + "uk1.datadoghq.com", + "datadoghq.eu", + "ddog-gov.com", + "us2.ddog-gov.com", + ], + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "ip-ranges", + }, + }, + }, + { + "url": "{protocol}://{name}", + "variables": { + "name": { + "description": "Full site DNS name.", + "default_value": "ip-ranges.datadoghq.com", + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.datadoghq.com", + "variables": { + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "ip-ranges", + }, + }, + }, + ], + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_ip_ranges(self, ) -> IPRanges: + """List IP Ranges. + + Get information about Datadog IP ranges. + + :rtype: IPRanges + """ + kwargs: Dict[str, Any] = {} + return self._get_ip_ranges_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/key_management_api.py b/datadog_api_client/v1/api/key_management_api.py new file mode 100644 index 0000000000..2ff2085897 --- /dev/null +++ b/datadog_api_client/v1/api/key_management_api.py @@ -0,0 +1,435 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.api_key_list_response import ApiKeyListResponse +from datadog_api_client.v1.model.api_key_response import ApiKeyResponse +from datadog_api_client.v1.model.api_key import ApiKey +from datadog_api_client.v1.model.application_key_list_response import ApplicationKeyListResponse +from datadog_api_client.v1.model.application_key_response import ApplicationKeyResponse +from datadog_api_client.v1.model.application_key import ApplicationKey + + +class KeyManagementApi: + """ + Manage your Datadog API and application keys. You need an API key and an + application key for a user with the required permissions to interact with these endpoints. + + Consult the following pages to view and manage your keys: + + * `API Keys `_ + * `Application Keys `_ + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_api_key_endpoint = _Endpoint( + settings={ + "response_type": (ApiKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/api_key", + "operation_id": "create_api_key", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ApiKey,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/application_key", + "operation_id": "create_application_key", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ApplicationKey,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_api_key_endpoint = _Endpoint( + settings={ + "response_type": (ApiKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/api_key/{key}", + "operation_id": "delete_api_key", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "key": { + "required": True, + "openapi_types": (str,), + "attribute": "key", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/application_key/{key}", + "operation_id": "delete_application_key", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "key": { + "required": True, + "openapi_types": (str,), + "attribute": "key", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_api_key_endpoint = _Endpoint( + settings={ + "response_type": (ApiKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/api_key/{key}", + "operation_id": "get_api_key", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "key": { + "required": True, + "openapi_types": (str,), + "attribute": "key", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/application_key/{key}", + "operation_id": "get_application_key", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "key": { + "required": True, + "openapi_types": (str,), + "attribute": "key", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_api_keys_endpoint = _Endpoint( + settings={ + "response_type": (ApiKeyListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/api_key", + "operation_id": "list_api_keys", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_application_keys_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/application_key", + "operation_id": "list_application_keys", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_api_key_endpoint = _Endpoint( + settings={ + "response_type": (ApiKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/api_key/{key}", + "operation_id": "update_api_key", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "key": { + "required": True, + "openapi_types": (str,), + "attribute": "key", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ApiKey,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/application_key/{key}", + "operation_id": "update_application_key", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "key": { + "required": True, + "openapi_types": (str,), + "attribute": "key", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ApplicationKey,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_api_key(self, body: ApiKey, ) -> ApiKeyResponse: + """Create an API key. + + Creates an API key with a given name. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :type body: ApiKey + :rtype: ApiKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_api_key_endpoint.call_with_http_info(**kwargs) + + def create_application_key(self, body: ApplicationKey, ) -> ApplicationKeyResponse: + """Create an application key. + + Create an application key with a given name. + This endpoint is disabled for organizations in `One-Time Read mode `_. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :type body: ApplicationKey + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_application_key_endpoint.call_with_http_info(**kwargs) + + def delete_api_key(self, key: str, ) -> ApiKeyResponse: + """Delete an API key. + + Delete a given API key. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :param key: The specific API key you are working with. + :type key: str + :rtype: ApiKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["key"] = key + + return self._delete_api_key_endpoint.call_with_http_info(**kwargs) + + def delete_application_key(self, key: str, ) -> ApplicationKeyResponse: + """Delete an application key. + + Delete a given application key. + This endpoint is disabled for organizations in `One-Time Read mode `_. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :param key: The specific APP key you are working with. + :type key: str + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["key"] = key + + return self._delete_application_key_endpoint.call_with_http_info(**kwargs) + + def get_api_key(self, key: str, ) -> ApiKeyResponse: + """Get API key. + + Get a given API key. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :param key: The specific API key you are working with. + :type key: str + :rtype: ApiKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["key"] = key + + return self._get_api_key_endpoint.call_with_http_info(**kwargs) + + def get_application_key(self, key: str, ) -> ApplicationKeyResponse: + """Get an application key. + + Get a given application key. + This endpoint is disabled for organizations in `One-Time Read mode `_. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :param key: The specific APP key you are working with. + :type key: str + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["key"] = key + + return self._get_application_key_endpoint.call_with_http_info(**kwargs) + + def list_api_keys(self, ) -> ApiKeyListResponse: + """Get all API keys. + + Get all API keys available for your account. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :rtype: ApiKeyListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_api_keys_endpoint.call_with_http_info(**kwargs) + + def list_application_keys(self, ) -> ApplicationKeyListResponse: + """Get all application keys. + + Get all application keys available for your Datadog account. + This endpoint is disabled for organizations in `One-Time Read mode `_. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :rtype: ApplicationKeyListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_application_keys_endpoint.call_with_http_info(**kwargs) + + def update_api_key(self, key: str, body: ApiKey, ) -> ApiKeyResponse: + """Edit an API key. + + Edit an API key name. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :param key: The specific API key you are working with. + :type key: str + :type body: ApiKey + :rtype: ApiKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["key"] = key + + kwargs["body"] = body + + return self._update_api_key_endpoint.call_with_http_info(**kwargs) + + def update_application_key(self, key: str, body: ApplicationKey, ) -> ApplicationKeyResponse: + """Edit an application key. + + Edit an application key name. + This endpoint is disabled for organizations in `One-Time Read mode `_. + + **Note** : This endpoint is disabled for the Government sites (US1-FED and US2-FED). Use the `V2 Key Management `_ endpoints instead. + + :param key: The specific APP key you are working with. + :type key: str + :type body: ApplicationKey + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["key"] = key + + kwargs["body"] = body + + return self._update_application_key_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/logs_api.py b/datadog_api_client/v1/api/logs_api.py new file mode 100644 index 0000000000..508b2aff4f --- /dev/null +++ b/datadog_api_client/v1/api/logs_api.py @@ -0,0 +1,212 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.logs_list_response import LogsListResponse +from datadog_api_client.v1.model.logs_list_request import LogsListRequest +from datadog_api_client.v1.model.content_encoding import ContentEncoding +from datadog_api_client.v1.model.http_log import HTTPLog +from datadog_api_client.v1.model.http_log_item import HTTPLogItem + + +class LogsApi: + """ + Search your logs and send them to your Datadog platform over HTTP. See the `Log Management page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_logs_endpoint = _Endpoint( + settings={ + "response_type": (LogsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/logs-queries/list", + "operation_id": "list_logs", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LogsListRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._submit_log_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/v1/input", + "operation_id": "submit_log", + "http_method": "POST", + "version": "v1", + "servers": [ + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "The regional site for Datadog customers.", + "default_value": "datadoghq.com", + "enum_values": [ + "datadoghq.com", + "us3.datadoghq.com", + "us5.datadoghq.com", + "ap1.datadoghq.com", + "ap2.datadoghq.com", + "uk1.datadoghq.com", + "datadoghq.eu", + "ddog-gov.com", + "us2.ddog-gov.com", + ], + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "http-intake.logs", + }, + }, + }, + { + "url": "{protocol}://{name}", + "variables": { + "name": { + "description": "Full site DNS name.", + "default_value": "http-intake.logs.datadoghq.com", + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "Any Datadog deployment.", + "default_value": "datadoghq.com", + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "http-intake.logs", + }, + }, + }, + ], + }, + params_map={ + "content_encoding": { + "openapi_types": (ContentEncoding,), + "attribute": "Content-Encoding", + "location": "header", + }, + "ddtags": { + "openapi_types": (str,), + "attribute": "ddtags", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (HTTPLog,), + "location": "body", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json", "application/json;simple", "application/logplex-1", "text/plain"] + }, + api_client=api_client, + ) + + def list_logs(self, body: LogsListRequest, ) -> LogsListResponse: + """Search logs. + + List endpoint returns logs that match a log search query. + `Results are paginated `_. + + If you are considering archiving logs for your organization, + consider use of the Datadog archive capabilities instead of the log list API. + See `Datadog Logs Archive documentation `_. + + **Note** : This endpoint is enabled by default for logs customers. To disable it, contact `Datadog support `_. + + :param body: Logs filter + :type body: LogsListRequest + :rtype: LogsListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._list_logs_endpoint.call_with_http_info(**kwargs) + + def submit_log(self, body: HTTPLog, *, content_encoding: Union[ContentEncoding, UnsetType]=unset, ddtags: Union[str, UnsetType]=unset, ) -> dict: + """Send logs. **Deprecated**. + + Send your logs to your Datadog platform over HTTP. Limits per HTTP request are: + + * Maximum content size per payload (uncompressed): 5MB + * Maximum size for a single log: 1MB + * Maximum array size if sending multiple logs in an array: 1000 entries + + Any log exceeding 1MB is accepted and truncated by Datadog: + + * For a single log request, the API truncates the log at 1MB and returns a 2xx. + * For a multi-logs request, the API processes all logs, truncates only logs larger than 1MB, and returns a 2xx. + + Datadog recommends sending your logs compressed. + Add the ``Content-Encoding: gzip`` header to the request when sending compressed logs. + + The status codes answered by the HTTP API are: + + * 200: OK + * 400: Bad request (likely an issue in the payload formatting) + * 403: Permission issue (likely using an invalid API Key) + * 413: Payload too large (batch is above 5MB uncompressed) + * 5xx: Internal error, request should be retried after some time + + :param body: Log to send (JSON format). + :type body: HTTPLog + :param content_encoding: HTTP header used to compress the media-type. + :type content_encoding: ContentEncoding, optional + :param ddtags: Log tags can be passed as query parameters with ``text/plain`` content type. + :type ddtags: str, optional + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + if content_encoding is not unset: + kwargs["content_encoding"] = content_encoding + + if ddtags is not unset: + kwargs["ddtags"] = ddtags + + kwargs["body"] = body + + warnings.warn("submit_log is deprecated", DeprecationWarning, stacklevel=2) + return self._submit_log_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/logs_indexes_api.py b/datadog_api_client/v1/api/logs_indexes_api.py new file mode 100644 index 0000000000..1ab3ca98cd --- /dev/null +++ b/datadog_api_client/v1/api/logs_indexes_api.py @@ -0,0 +1,292 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.logs_indexes_order import LogsIndexesOrder +from datadog_api_client.v1.model.logs_index_list_response import LogsIndexListResponse +from datadog_api_client.v1.model.logs_index import LogsIndex +from datadog_api_client.v1.model.logs_index_update_request import LogsIndexUpdateRequest + + +class LogsIndexesApi: + """ + Manage configuration of `log indexes `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_logs_index_endpoint = _Endpoint( + settings={ + "response_type": (LogsIndex,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/indexes", + "operation_id": "create_logs_index", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LogsIndex,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_logs_index_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/indexes/{name}", + "operation_id": "delete_logs_index", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "name": { + "required": True, + "openapi_types": (str,), + "attribute": "name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_logs_index_endpoint = _Endpoint( + settings={ + "response_type": (LogsIndex,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/indexes/{name}", + "operation_id": "get_logs_index", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "name": { + "required": True, + "openapi_types": (str,), + "attribute": "name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_logs_index_order_endpoint = _Endpoint( + settings={ + "response_type": (LogsIndexesOrder,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/index-order", + "operation_id": "get_logs_index_order", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_log_indexes_endpoint = _Endpoint( + settings={ + "response_type": (LogsIndexListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/indexes", + "operation_id": "list_log_indexes", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_logs_index_endpoint = _Endpoint( + settings={ + "response_type": (LogsIndex,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/indexes/{name}", + "operation_id": "update_logs_index", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "name": { + "required": True, + "openapi_types": (str,), + "attribute": "name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LogsIndexUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_logs_index_order_endpoint = _Endpoint( + settings={ + "response_type": (LogsIndexesOrder,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/index-order", + "operation_id": "update_logs_index_order", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LogsIndexesOrder,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_logs_index(self, body: LogsIndex, ) -> LogsIndex: + """Create an index. + + Creates a new index. Returns the Index object passed in the request body when the request is successful. + + :param body: Object containing the new index. + :type body: LogsIndex + :rtype: LogsIndex + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_logs_index_endpoint.call_with_http_info(**kwargs) + + def delete_logs_index(self, name: str, ) -> None: + """Delete an index. + + Delete an existing index from your organization. Index deletions are permanent and cannot be reverted. + You cannot recreate an index with the same name as deleted ones. + + :param name: Name of the log index. + :type name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["name"] = name + + return self._delete_logs_index_endpoint.call_with_http_info(**kwargs) + + def get_logs_index(self, name: str, ) -> LogsIndex: + """Get an index. + + Get one log index from your organization. This endpoint takes no JSON arguments. + + :param name: Name of the log index. + :type name: str + :rtype: LogsIndex + """ + kwargs: Dict[str, Any] = {} + kwargs["name"] = name + + return self._get_logs_index_endpoint.call_with_http_info(**kwargs) + + def get_logs_index_order(self, ) -> LogsIndexesOrder: + """Get indexes order. + + Get the current order of your log indexes. This endpoint takes no JSON arguments. + + :rtype: LogsIndexesOrder + """ + kwargs: Dict[str, Any] = {} + return self._get_logs_index_order_endpoint.call_with_http_info(**kwargs) + + def list_log_indexes(self, ) -> LogsIndexListResponse: + """Get all indexes. + + The Index object describes the configuration of a log index. + This endpoint returns an array of the ``LogIndex`` objects of your organization. + + :rtype: LogsIndexListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_log_indexes_endpoint.call_with_http_info(**kwargs) + + def update_logs_index(self, name: str, body: LogsIndexUpdateRequest, ) -> LogsIndex: + """Update an index. + + Update an index as identified by its name. + Returns the Index object passed in the request body when the request is successful. + + Using the ``PUT`` method updates your index's configuration by **replacing** + your current configuration with the new one sent to your Datadog organization. + + :param name: Name of the log index. + :type name: str + :param body: Object containing the new ``LogsIndexUpdateRequest``. + :type body: LogsIndexUpdateRequest + :rtype: LogsIndex + """ + kwargs: Dict[str, Any] = {} + kwargs["name"] = name + + kwargs["body"] = body + + return self._update_logs_index_endpoint.call_with_http_info(**kwargs) + + def update_logs_index_order(self, body: LogsIndexesOrder, ) -> LogsIndexesOrder: + """Update indexes order. + + This endpoint updates the index order of your organization. + It returns the index order object passed in the request body when the request is successful. + + :param body: Object containing the new ordered list of index names + :type body: LogsIndexesOrder + :rtype: LogsIndexesOrder + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_logs_index_order_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/logs_pipelines_api.py b/datadog_api_client/v1/api/logs_pipelines_api.py new file mode 100644 index 0000000000..d2336807b2 --- /dev/null +++ b/datadog_api_client/v1/api/logs_pipelines_api.py @@ -0,0 +1,318 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.logs_pipelines_order import LogsPipelinesOrder +from datadog_api_client.v1.model.logs_pipeline_list import LogsPipelineList +from datadog_api_client.v1.model.logs_pipeline import LogsPipeline + + +class LogsPipelinesApi: + """ + Pipelines and processors operate on incoming logs, parsing + and transforming them into structured attributes for easier querying. + + * + See the `pipelines configuration page `_ + for a list of the pipelines and processors currently configured in web UI. + + * + Additional API-related information about processors can be found in the + `processors documentation `_. + + * + For more information about Pipelines, see the + `pipeline documentation `_. + + **Notes:** + + **Grok parsing rules may effect JSON output and require + returned data to be configured before using in a request.** + For example, if you are using the data returned from a + request for another request body, and have a parsing rule + that uses a regex pattern like ``\s`` for spaces, you will + need to configure all escaped spaces as ``%{space}`` to use + in the body data. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_logs_pipeline_endpoint = _Endpoint( + settings={ + "response_type": (LogsPipeline,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/pipelines", + "operation_id": "create_logs_pipeline", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LogsPipeline,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_logs_pipeline_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/pipelines/{pipeline_id}", + "operation_id": "delete_logs_pipeline", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "pipeline_id": { + "required": True, + "openapi_types": (str,), + "attribute": "pipeline_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_logs_pipeline_endpoint = _Endpoint( + settings={ + "response_type": (LogsPipeline,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/pipelines/{pipeline_id}", + "operation_id": "get_logs_pipeline", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "pipeline_id": { + "required": True, + "openapi_types": (str,), + "attribute": "pipeline_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_logs_pipeline_order_endpoint = _Endpoint( + settings={ + "response_type": (LogsPipelinesOrder,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/pipeline-order", + "operation_id": "get_logs_pipeline_order", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_logs_pipelines_endpoint = _Endpoint( + settings={ + "response_type": (LogsPipelineList,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/pipelines", + "operation_id": "list_logs_pipelines", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_logs_pipeline_endpoint = _Endpoint( + settings={ + "response_type": (LogsPipeline,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/pipelines/{pipeline_id}", + "operation_id": "update_logs_pipeline", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "pipeline_id": { + "required": True, + "openapi_types": (str,), + "attribute": "pipeline_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LogsPipeline,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_logs_pipeline_order_endpoint = _Endpoint( + settings={ + "response_type": (LogsPipelinesOrder,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/logs/config/pipeline-order", + "operation_id": "update_logs_pipeline_order", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LogsPipelinesOrder,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_logs_pipeline(self, body: LogsPipeline, ) -> LogsPipeline: + """Create a pipeline. + + Create a pipeline in your organization. + + :param body: Definition of the new pipeline. + :type body: LogsPipeline + :rtype: LogsPipeline + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_logs_pipeline_endpoint.call_with_http_info(**kwargs) + + def delete_logs_pipeline(self, pipeline_id: str, ) -> None: + """Delete a pipeline. + + Delete a given pipeline from your organization. + This endpoint takes no JSON arguments. + + :param pipeline_id: ID of the pipeline to delete. + :type pipeline_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["pipeline_id"] = pipeline_id + + return self._delete_logs_pipeline_endpoint.call_with_http_info(**kwargs) + + def get_logs_pipeline(self, pipeline_id: str, ) -> LogsPipeline: + """Get a pipeline. + + Get a specific pipeline from your organization. + This endpoint takes no JSON arguments. + + :param pipeline_id: ID of the pipeline to get. + :type pipeline_id: str + :rtype: LogsPipeline + """ + kwargs: Dict[str, Any] = {} + kwargs["pipeline_id"] = pipeline_id + + return self._get_logs_pipeline_endpoint.call_with_http_info(**kwargs) + + def get_logs_pipeline_order(self, ) -> LogsPipelinesOrder: + """Get pipeline order. + + Get the current order of your pipelines. + This endpoint takes no JSON arguments. + + :rtype: LogsPipelinesOrder + """ + kwargs: Dict[str, Any] = {} + return self._get_logs_pipeline_order_endpoint.call_with_http_info(**kwargs) + + def list_logs_pipelines(self, ) -> LogsPipelineList: + """Get all pipelines. + + Get all pipelines from your organization. + This endpoint takes no JSON arguments. + + :rtype: LogsPipelineList + """ + kwargs: Dict[str, Any] = {} + return self._list_logs_pipelines_endpoint.call_with_http_info(**kwargs) + + def update_logs_pipeline(self, pipeline_id: str, body: LogsPipeline, ) -> LogsPipeline: + """Update a pipeline. + + Update a given pipeline configuration to change it’s processors or their order. + + **Note** : Using this method updates your pipeline configuration by **replacing** + your current configuration with the new one sent to your Datadog organization. + + :param pipeline_id: ID of the pipeline to delete. + :type pipeline_id: str + :param body: New definition of the pipeline. + :type body: LogsPipeline + :rtype: LogsPipeline + """ + kwargs: Dict[str, Any] = {} + kwargs["pipeline_id"] = pipeline_id + + kwargs["body"] = body + + return self._update_logs_pipeline_endpoint.call_with_http_info(**kwargs) + + def update_logs_pipeline_order(self, body: LogsPipelinesOrder, ) -> LogsPipelinesOrder: + """Update pipeline order. + + Update the order of your pipelines. Since logs are processed sequentially, reordering a pipeline may change + the structure and content of the data processed by other pipelines and their processors. + + **Note** : Using the ``PUT`` method updates your pipeline order by replacing your current order + with the new one sent to your Datadog organization. + + :param body: Object containing the new ordered list of pipeline IDs. + :type body: LogsPipelinesOrder + :rtype: LogsPipelinesOrder + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_logs_pipeline_order_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/metrics_api.py b/datadog_api_client/v1/api/metrics_api.py new file mode 100644 index 0000000000..fe3863a981 --- /dev/null +++ b/datadog_api_client/v1/api/metrics_api.py @@ -0,0 +1,397 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.intake_payload_accepted import IntakePayloadAccepted +from datadog_api_client.v1.model.distribution_points_content_encoding import DistributionPointsContentEncoding +from datadog_api_client.v1.model.distribution_points_payload import DistributionPointsPayload +from datadog_api_client.v1.model.metrics_list_response import MetricsListResponse +from datadog_api_client.v1.model.metric_metadata import MetricMetadata +from datadog_api_client.v1.model.metrics_query_response import MetricsQueryResponse +from datadog_api_client.v1.model.metric_search_response import MetricSearchResponse +from datadog_api_client.v1.model.metric_content_encoding import MetricContentEncoding +from datadog_api_client.v1.model.metrics_payload import MetricsPayload + + +class MetricsApi: + """ + The metrics endpoint allows you to: + + * Post metrics data so it can be graphed on Datadog’s dashboards + * Query metrics from any time period + * Modify tag configurations for metrics + * View tags and volumes for metrics + + **Note** : A graph can only contain a set number of points + and as the timeframe over which a metric is viewed increases, + aggregation between points occurs to stay below that set number. + + The Post, Patch, and Delete ``manage_tags`` API methods can only be performed by + a user who has the ``Manage Tags for Metrics`` permission. + + See the `Metrics page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_metric_metadata_endpoint = _Endpoint( + settings={ + "response_type": (MetricMetadata,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/metrics/{metric_name}", + "operation_id": "get_metric_metadata", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_active_metrics_endpoint = _Endpoint( + settings={ + "response_type": (MetricsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/metrics", + "operation_id": "list_active_metrics", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "_from": { + "required": True, + "openapi_types": (int,), + "attribute": "from", + "location": "query", + }, + "host": { + "openapi_types": (str,), + "attribute": "host", + "location": "query", + }, + "tag_filter": { + "openapi_types": (str,), + "attribute": "tag_filter", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_metrics_endpoint = _Endpoint( + settings={ + "response_type": (MetricSearchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/search", + "operation_id": "list_metrics", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "q": { + "required": True, + "openapi_types": (str,), + "attribute": "q", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._query_metrics_endpoint = _Endpoint( + settings={ + "response_type": (MetricsQueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/query", + "operation_id": "query_metrics", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "_from": { + "required": True, + "openapi_types": (int,), + "attribute": "from", + "location": "query", + }, + "to": { + "required": True, + "openapi_types": (int,), + "attribute": "to", + "location": "query", + }, + "query": { + "required": True, + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._submit_distribution_points_endpoint = _Endpoint( + settings={ + "response_type": (IntakePayloadAccepted,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v1/distribution_points", + "operation_id": "submit_distribution_points", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "content_encoding": { + "openapi_types": (DistributionPointsContentEncoding,), + "attribute": "Content-Encoding", + "location": "header", + }, + "body": { + "required": True, + "openapi_types": (DistributionPointsPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["text/json", "application/json"], + "content_type": ["text/json"] + }, + api_client=api_client, + ) + + self._submit_metrics_endpoint = _Endpoint( + settings={ + "response_type": (IntakePayloadAccepted,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v1/series", + "operation_id": "submit_metrics", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "content_encoding": { + "openapi_types": (MetricContentEncoding,), + "attribute": "Content-Encoding", + "location": "header", + }, + "body": { + "required": True, + "openapi_types": (MetricsPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["text/json", "application/json"], + "content_type": ["text/json"] + }, + api_client=api_client, + ) + + self._update_metric_metadata_endpoint = _Endpoint( + settings={ + "response_type": (MetricMetadata,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/metrics/{metric_name}", + "operation_id": "update_metric_metadata", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MetricMetadata,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def get_metric_metadata(self, metric_name: str, ) -> MetricMetadata: + """Get metric metadata. + + Get metadata about a specific metric. + + :param metric_name: Name of the metric for which to get metadata. + :type metric_name: str + :rtype: MetricMetadata + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._get_metric_metadata_endpoint.call_with_http_info(**kwargs) + + def list_active_metrics(self, _from: int, *, host: Union[str, UnsetType]=unset, tag_filter: Union[str, UnsetType]=unset, ) -> MetricsListResponse: + """Get active metrics list. + + Get the list of actively reporting metrics from a given time until now. + + :param _from: Seconds since the Unix epoch. + :type _from: int + :param host: Hostname for filtering the list of metrics returned. + If set, metrics retrieved are those with the corresponding hostname tag. + :type host: str, optional + :param tag_filter: Filter metrics that have been submitted with the given tags. Supports boolean and wildcard expressions. + Cannot be combined with other filters. + :type tag_filter: str, optional + :rtype: MetricsListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["_from"] = _from + + if host is not unset: + kwargs["host"] = host + + if tag_filter is not unset: + kwargs["tag_filter"] = tag_filter + + return self._list_active_metrics_endpoint.call_with_http_info(**kwargs) + + def list_metrics(self, q: str, ) -> MetricSearchResponse: + """Search metrics. **Deprecated**. + + **Note** : This endpoint is deprecated. Use ``/api/v2/metrics`` instead. + + Search for metrics from the last 24 hours in Datadog. + + :param q: Query string to search metrics upon. Can optionally be prefixed with ``metrics:``. + :type q: str + :rtype: MetricSearchResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["q"] = q + + warnings.warn("list_metrics is deprecated", DeprecationWarning, stacklevel=2) + return self._list_metrics_endpoint.call_with_http_info(**kwargs) + + def query_metrics(self, _from: int, to: int, query: str, ) -> MetricsQueryResponse: + """Query timeseries points. + + Query timeseries points. + + :param _from: Start of the queried time period, seconds since the Unix epoch. + :type _from: int + :param to: End of the queried time period, seconds since the Unix epoch. + :type to: int + :param query: Query string. + :type query: str + :rtype: MetricsQueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["_from"] = _from + + kwargs["to"] = to + + kwargs["query"] = query + + return self._query_metrics_endpoint.call_with_http_info(**kwargs) + + def submit_distribution_points(self, body: DistributionPointsPayload, *, content_encoding: Union[DistributionPointsContentEncoding, UnsetType]=unset, ) -> IntakePayloadAccepted: + """Submit distribution points. + + The distribution points end-point allows you to post distribution data that can be graphed on Datadog’s dashboards. + + :type body: DistributionPointsPayload + :param content_encoding: HTTP header used to compress the media-type. + :type content_encoding: DistributionPointsContentEncoding, optional + :rtype: IntakePayloadAccepted + """ + kwargs: Dict[str, Any] = {} + if content_encoding is not unset: + kwargs["content_encoding"] = content_encoding + + kwargs["body"] = body + + return self._submit_distribution_points_endpoint.call_with_http_info(**kwargs) + + def submit_metrics(self, body: MetricsPayload, *, content_encoding: Union[MetricContentEncoding, UnsetType]=unset, ) -> IntakePayloadAccepted: + """Submit metrics. + + The metrics end-point allows you to post time-series data that can be graphed on Datadog’s dashboards. + The maximum payload size is 3.2 megabytes (3200000 bytes). Compressed payloads must have a decompressed size of less than 62 megabytes (62914560 bytes). + + If you’re submitting metrics directly to the Datadog API without using DogStatsD, expect: + + * 64 bits for the timestamp + * 64 bits for the value + * 40 bytes for the metric names + * 50 bytes for the timeseries + * The full payload is approximately 100 bytes. However, with the DogStatsD API, + compression is applied, which reduces the payload size. + + :type body: MetricsPayload + :param content_encoding: HTTP header used to compress the media-type. + :type content_encoding: MetricContentEncoding, optional + :rtype: IntakePayloadAccepted + """ + kwargs: Dict[str, Any] = {} + if content_encoding is not unset: + kwargs["content_encoding"] = content_encoding + + kwargs["body"] = body + + return self._submit_metrics_endpoint.call_with_http_info(**kwargs) + + def update_metric_metadata(self, metric_name: str, body: MetricMetadata, ) -> MetricMetadata: + """Edit metric metadata. + + Edit metadata of a specific metric. Find out more about `supported types `_. + + :param metric_name: Name of the metric for which to edit metadata. + :type metric_name: str + :param body: New metadata. + :type body: MetricMetadata + :rtype: MetricMetadata + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + kwargs["body"] = body + + return self._update_metric_metadata_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/monitors_api.py b/datadog_api_client/v1/api/monitors_api.py new file mode 100644 index 0000000000..25b3ea3a0d --- /dev/null +++ b/datadog_api_client/v1/api/monitors_api.py @@ -0,0 +1,939 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.monitor import Monitor +from datadog_api_client.v1.model.check_can_delete_monitor_response import CheckCanDeleteMonitorResponse +from datadog_api_client.v1.model.monitor_group_search_response import MonitorGroupSearchResponse +from datadog_api_client.v1.model.monitor_search_response import MonitorSearchResponse +from datadog_api_client.v1.model.deleted_monitor import DeletedMonitor +from datadog_api_client.v1.model.monitor_update_request import MonitorUpdateRequest + + +class MonitorsApi: + """ + `Monitors `_ allow you to watch a metric or check that you care about and + notifies your team when a defined threshold has exceeded. + + For more information, see `Creating Monitors `_. + + **Note:** ``curl`` commands require `url encoding `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._check_can_delete_monitor_endpoint = _Endpoint( + settings={ + "response_type": (CheckCanDeleteMonitorResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor/can_delete", + "operation_id": "check_can_delete_monitor", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "monitor_ids": { + "required": True, + "openapi_types": ([int],), + "attribute": "monitor_ids", + "location": "query", + "collection_format": "csv", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._create_monitor_endpoint = _Endpoint( + settings={ + "response_type": (Monitor,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor", + "operation_id": "create_monitor", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (Monitor,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_monitor_endpoint = _Endpoint( + settings={ + "response_type": (DeletedMonitor,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor/{monitor_id}", + "operation_id": "delete_monitor", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "monitor_id": { + "required": True, + "openapi_types": (int,), + "attribute": "monitor_id", + "location": "path", + }, + "force": { + "openapi_types": (str,), + "attribute": "force", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_monitor_endpoint = _Endpoint( + settings={ + "response_type": (Monitor,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor/{monitor_id}", + "operation_id": "get_monitor", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "monitor_id": { + "required": True, + "openapi_types": (int,), + "attribute": "monitor_id", + "location": "path", + }, + "group_states": { + "openapi_types": (str,), + "attribute": "group_states", + "location": "query", + }, + "with_downtimes": { + "openapi_types": (bool,), + "attribute": "with_downtimes", + "location": "query", + }, + "with_assets": { + "openapi_types": (bool,), + "attribute": "with_assets", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_monitors_endpoint = _Endpoint( + settings={ + "response_type": ([Monitor],), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor", + "operation_id": "list_monitors", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "group_states": { + "openapi_types": (str,), + "attribute": "group_states", + "location": "query", + }, + "name": { + "openapi_types": (str,), + "attribute": "name", + "location": "query", + }, + "tags": { + "openapi_types": (str,), + "attribute": "tags", + "location": "query", + }, + "monitor_tags": { + "openapi_types": (str,), + "attribute": "monitor_tags", + "location": "query", + }, + "with_downtimes": { + "openapi_types": (bool,), + "attribute": "with_downtimes", + "location": "query", + }, + "id_offset": { + "openapi_types": (int,), + "attribute": "id_offset", + "location": "query", + }, + "page": { + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page_size", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_monitor_groups_endpoint = _Endpoint( + settings={ + "response_type": (MonitorGroupSearchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor/groups/search", + "operation_id": "search_monitor_groups", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "page": { + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "per_page": { + "openapi_types": (int,), + "attribute": "per_page", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_monitors_endpoint = _Endpoint( + settings={ + "response_type": (MonitorSearchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor/search", + "operation_id": "search_monitors", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "page": { + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "per_page": { + "openapi_types": (int,), + "attribute": "per_page", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_monitor_endpoint = _Endpoint( + settings={ + "response_type": (Monitor,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor/{monitor_id}", + "operation_id": "update_monitor", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "monitor_id": { + "required": True, + "openapi_types": (int,), + "attribute": "monitor_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MonitorUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_existing_monitor_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor/{monitor_id}/validate", + "operation_id": "validate_existing_monitor", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "monitor_id": { + "required": True, + "openapi_types": (int,), + "attribute": "monitor_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (Monitor,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_monitor_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/monitor/validate", + "operation_id": "validate_monitor", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (Monitor,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def check_can_delete_monitor(self, monitor_ids: List[int], ) -> CheckCanDeleteMonitorResponse: + """Check if a monitor can be deleted. + + Check if the given monitors can be deleted. + + :param monitor_ids: The IDs of the monitor to check. + :type monitor_ids: [int] + :rtype: CheckCanDeleteMonitorResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["monitor_ids"] = monitor_ids + + return self._check_can_delete_monitor_endpoint.call_with_http_info(**kwargs) + + def create_monitor(self, body: Monitor, ) -> Monitor: + """Create a monitor. + + Create a monitor using the specified options. + + **Monitor Types** + + The type of monitor chosen from: + + * anomaly: ``query alert`` + * APM: ``query alert`` or ``trace-analytics alert`` + * composite: ``composite`` + * custom: ``service check`` + * forecast: ``query alert`` + * host: ``service check`` + * integration: ``query alert`` or ``service check`` + * live process: ``process alert`` + * logs: ``log alert`` + * metric: ``query alert`` + * network: ``service check`` + * outlier: ``query alert`` + * process: ``service check`` + * rum: ``rum alert`` + * SLO: ``slo alert`` + * watchdog: ``event-v2 alert`` + * event-v2: ``event-v2 alert`` + * audit: ``audit alert`` + * error-tracking: ``error-tracking alert`` + * database-monitoring: ``database-monitoring alert`` + * network-performance: ``network-performance alert`` + * cloud cost: ``cost alert`` + * network-path: ``network-path alert`` + + **Notes** : + + * Synthetic monitors are created through the Synthetics API. See the `Synthetics API `_ documentation for more information. + * Log monitors require an unscoped App Key. + + **Query Types** + + **Metric Alert Query** + + Example: ``time_aggr(time_window):space_aggr:metric{tags} [by {key}] operator #`` + + * ``time_aggr`` : avg, sum, max, min, change, or pct_change + * ``time_window`` : ``last_#m`` (with ``#`` between 1 and 10080 depending on the monitor type) or ``last_#h`` (with ``#`` between 1 and 168 depending on the monitor type) or ``last_1d`` , or ``last_1w`` + * ``space_aggr`` : avg, sum, min, or max + * ``tags`` : one or more tags (comma-separated), or * + * `key`: a 'key' in key:value tag syntax; defines a separate alert for each tag in the group (multi-alert) + * ``operator`` : <, <=, >, >=, ==, or != + * ``#`` : an integer or decimal number used to set the threshold + + To use a dynamic threshold on a metric monitor with a formula query, replace ``#`` with the ``threshold`` keyword + (for example, ``... > threshold`` ) and provide the threshold as a query via ``critical_query`` on ``options.thresholds``. + This feature is in preview. + + If you are using the ``_change_`` or ``_pct_change_`` time aggregator, instead use ``change_aggr(time_aggr(time_window), + timeshift):space_aggr:metric{tags} [by {key}] operator #`` with: + + * ``change_aggr`` change, pct_change + * ``time_aggr`` avg, sum, max, min `Learn more `_ + * ``time_window`` last_#m (between 1 and 2880 depending on the monitor type), last_#h (between 1 and 48 depending on the monitor type), or last_#d (1 or 2) + * ``timeshift`` #m_ago (5, 10, 15, or 30), #h_ago (1, 2, or 4), or 1d_ago + + Use this to create an outlier monitor using the following query: + ``avg(last_30m):outliers(avg:system.cpu.user{role:es-events-data} by {host}, 'dbscan', 7) > 0`` + + **Service Check Query** + + Example: ``"check".over(tags).last(count).by(group).count_by_status()`` + + * ``check`` name of the check, for example ``datadog.agent.up`` + * ``tags`` one or more quoted tags (comma-separated), or "*". for example: ``.over("env:prod", "role:db")`` ; ``over`` cannot be blank. + * ``count`` must be at greater than or equal to your max threshold (defined in the ``options`` ). It is limited to 100. + For example, if you've specified to notify on 1 critical, 3 ok, and 2 warn statuses, ``count`` should be at least 3. + * ``group`` must be specified for check monitors. Per-check grouping is already explicitly known for some service checks. + For example, Postgres integration monitors are tagged by ``db`` , ``host`` , and ``port`` , and Network monitors by ``host`` , ``instance`` , and ``url``. See `Service Checks `_ documentation for more information. + + **Event Alert Query** + + **Note:** The Event Alert Query has been replaced by the Event V2 Alert Query. For more information, see the `Event Migration guide `_. + + **Event V2 Alert Query** + + Example: ``events(query).rollup(rollup_method[, measure]).last(time_window) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``rollup_method`` The stats roll-up method - supports ``count`` , ``avg`` and ``cardinality``. + * ``measure`` For ``avg`` and cardinality ``rollup_method`` - specify the measure or the facet name you want to use. + * ``time_window`` #m (between 1 and 2880), #h (between 1 and 48). + * ``operator`` ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=``. + * ``#`` an integer or decimal number used to set the threshold. + + **Process Alert Query** + + Example: ``processes(search).over(tags).rollup('count').last(timeframe) operator #`` + + * ``search`` free text search string for querying processes. + Matching processes match results on the `Live Processes `_ page. + * ``tags`` one or more tags (comma-separated) + * ``timeframe`` the timeframe to roll up the counts. Examples: 10m, 4h. Supported timeframes: s, m, h and d + * ``operator`` <, <=, >, >=, ==, or != + * ``#`` an integer or decimal number used to set the threshold + + **Logs Alert Query** + + Example: ``logs(query).index(index_name).rollup(rollup_method[, measure]).last(time_window) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``index_name`` For multi-index organizations, the log index in which the request is performed. + * ``rollup_method`` The stats roll-up method - supports ``count`` , ``avg`` and ``cardinality``. + * ``measure`` For ``avg`` and cardinality ``rollup_method`` - specify the measure or the facet name you want to use. + * ``time_window`` #m (between 1 and 2880), #h (between 1 and 48). + * ``operator`` ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=``. + * ``#`` an integer or decimal number used to set the threshold. + + **Composite Query** + + Example: ``12345 && 67890`` , where ``12345`` and ``67890`` are the IDs of non-composite monitors + + * ``name`` [ *required* , *default* = **dynamic, based on query** ]: The name of the alert. + * ``message`` [ *required* , *default* = **dynamic, based on query** ]: A message to include with notifications for this monitor. + Email notifications can be sent to specific users by using the same '@username' notation as events. + * ``tags`` [ *optional* , *default* = **empty list** ]: A list of tags to associate with your monitor. + When getting all monitor details via the API, use the ``monitor_tags`` argument to filter results by these tags. + It is only available via the API and isn't visible or editable in the Datadog UI. + + **SLO Alert Query** + + Example: ``error_budget("slo_id").over("time_window") operator #`` + + * ``slo_id`` : The alphanumeric SLO ID of the SLO you are configuring the alert for. + * `time_window`: The time window of the SLO target you wish to alert on. Valid options: ``7d`` , ``30d`` , ``90d``. + * ``operator`` : ``>=`` or ``>`` + + **Audit Alert Query** + + Example: ``audits(query).rollup(rollup_method[, measure]).last(time_window) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``rollup_method`` The stats roll-up method - supports ``count`` , ``avg`` and ``cardinality``. + * ``measure`` For ``avg`` and cardinality ``rollup_method`` - specify the measure or the facet name you want to use. + * ``time_window`` #m (between 1 and 2880), #h (between 1 and 48). + * ``operator`` ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=``. + * ``#`` an integer or decimal number used to set the threshold. + + **CI Pipelines Alert Query** + + Example: ``ci-pipelines(query).rollup(rollup_method[, measure]).last(time_window) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``rollup_method`` The stats roll-up method - supports ``count`` , ``avg`` , and ``cardinality``. + * ``measure`` For ``avg`` and cardinality ``rollup_method`` - specify the measure or the facet name you want to use. + * ``time_window`` #m (between 1 and 2880), #h (between 1 and 48). + * ``operator`` ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=``. + * ``#`` an integer or decimal number used to set the threshold. + + **CI Tests Alert Query** + + Example: ``ci-tests(query).rollup(rollup_method[, measure]).last(time_window) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``rollup_method`` The stats roll-up method - supports ``count`` , ``avg`` , and ``cardinality``. + * ``measure`` For ``avg`` and cardinality ``rollup_method`` - specify the measure or the facet name you want to use. + * ``time_window`` #m (between 1 and 2880), #h (between 1 and 48). + * ``operator`` ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=``. + * ``#`` an integer or decimal number used to set the threshold. + + **Error Tracking Alert Query** + + "New issue" example: ``error-tracking(query).source(issue_source).new().rollup(rollup_method[, measure]).by(group_by).last(time_window) operator #`` + "High impact issue" example: ``error-tracking(query).source(issue_source).impact().rollup(rollup_method[, measure]).by(group_by).last(time_window) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``issue_source`` The issue source - supports ``all`` , ``browser`` , ``mobile`` and ``backend`` and defaults to ``all`` if omitted. + * ``rollup_method`` The stats roll-up method - supports ``count`` , ``avg`` , and ``cardinality`` and defaults to ``count`` if omitted. + * ``measure`` For ``avg`` and cardinality ``rollup_method`` - specify the measure or the facet name you want to use. + * ``group by`` Comma-separated list of attributes to group by - should contain at least ``issue.id``. + * ``time_window`` #m (between 1 and 2880), #h (between 1 and 48). + * ``operator`` ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=``. + * ``#`` an integer or decimal number used to set the threshold. + + **Database Monitoring Alert Query** + + Example: ``database-monitoring(query).rollup(rollup_method[, measure]).last(time_window) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``rollup_method`` The stats roll-up method - supports ``count`` , ``avg`` , and ``cardinality``. + * ``measure`` For ``avg`` and cardinality ``rollup_method`` - specify the measure or the facet name you want to use. + * ``time_window`` #m (between 1 and 2880), #h (between 1 and 48). + * ``operator`` ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=``. + * ``#`` an integer or decimal number used to set the threshold. + + **Network Performance Alert Query** + + Example: ``network-performance(query).rollup(rollup_method[, measure]).last(time_window) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``rollup_method`` The stats roll-up method - supports ``count`` , ``avg`` , and ``cardinality``. + * ``measure`` For ``avg`` and cardinality ``rollup_method`` - specify the measure or the facet name you want to use. + * ``time_window`` #m (between 1 and 2880), #h (between 1 and 48). + * ``operator`` ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=``. + * ``#`` an integer or decimal number used to set the threshold. + + **Cost Alert Query** + + Example: ``formula(query).timeframe_type(time_window).function(parameter) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``timeframe_type`` The timeframe type to evaluate the cost + .. code-block:: + + - for `forecast` supports `current` + - for `change`, `anomaly`, `threshold` supports `last` + + * ``time_window`` - supports daily roll-up e.g. ``7d`` + * ``function`` - [optional, defaults to ``threshold`` monitor if omitted] supports ``change`` , ``anomaly`` , ``forecast`` + * ``parameter`` Specify the parameter of the type + + * for ``change`` : + + * supports ``relative`` , ``absolute`` + * [optional] supports ``#`` , where ``#`` is an integer or decimal number used to set the threshold + + * for ``anomaly`` : + + * supports ``direction=both`` , ``direction=above`` , ``direction=below`` + * [optional] supports ``threshold=#`` , where ``#`` is an integer or decimal number used to set the threshold + + * ``operator`` + + * for ``threshold`` supports ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=`` + * for ``change`` supports ``>`` , ``<`` + * for ``anomaly`` supports ``>=`` + * for ``forecast`` supports ``>`` + + * ``#`` an integer or decimal number used to set the threshold. + + **Network Path Alert Query** + + Example: ``network-path(query).index(index_name).rollup(rollup_method[, measure]).last(time_window) operator #`` + + * ``query`` The search query - following the `Log search syntax `_. + * ``index_name`` The data type to monitor on - supports ``netpath-path`` and ``netpath-hop``. + * ``rollup_method`` The stats roll-up method - supports ``count`` , ``avg`` , and ``cardinality``. + * ``measure`` For ``avg`` and cardinality ``rollup_method`` - specify the measure or the facet name you want to use. + * ``time_window`` #m (between 1 and 2880), #h (between 1 and 48). + * ``operator`` ``<`` , ``<=`` , ``>`` , ``>=`` , ``==`` , or ``!=``. + * ``#`` an integer or decimal number used to set the threshold. + + :param body: Create a monitor request body. + :type body: Monitor + :rtype: Monitor + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_monitor_endpoint.call_with_http_info(**kwargs) + + def delete_monitor(self, monitor_id: int, *, force: Union[str, UnsetType]=unset, ) -> DeletedMonitor: + """Delete a monitor. + + Delete the specified monitor + + :param monitor_id: The ID of the monitor. + :type monitor_id: int + :param force: Delete the monitor even if it's referenced by other resources (for example SLO, composite monitor). + :type force: str, optional + :rtype: DeletedMonitor + """ + kwargs: Dict[str, Any] = {} + kwargs["monitor_id"] = monitor_id + + if force is not unset: + kwargs["force"] = force + + return self._delete_monitor_endpoint.call_with_http_info(**kwargs) + + def get_monitor(self, monitor_id: int, *, group_states: Union[str, UnsetType]=unset, with_downtimes: Union[bool, UnsetType]=unset, with_assets: Union[bool, UnsetType]=unset, ) -> Monitor: + """Get a monitor's details. + + Get details about the specified monitor from your organization. + + :param monitor_id: The ID of the monitor + :type monitor_id: int + :param group_states: When specified, shows additional information about the group states. Choose one or more from ``all`` , ``alert`` , ``warn`` , and ``no data``. + :type group_states: str, optional + :param with_downtimes: If this argument is set to true, then the returned data includes all current active downtimes for the monitor. + :type with_downtimes: bool, optional + :param with_assets: If this argument is set to ``true`` , the returned data includes all assets tied to this monitor. + :type with_assets: bool, optional + :rtype: Monitor + """ + kwargs: Dict[str, Any] = {} + kwargs["monitor_id"] = monitor_id + + if group_states is not unset: + kwargs["group_states"] = group_states + + if with_downtimes is not unset: + kwargs["with_downtimes"] = with_downtimes + + if with_assets is not unset: + kwargs["with_assets"] = with_assets + + return self._get_monitor_endpoint.call_with_http_info(**kwargs) + + def list_monitors(self, *, group_states: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, tags: Union[str, UnsetType]=unset, monitor_tags: Union[str, UnsetType]=unset, with_downtimes: Union[bool, UnsetType]=unset, id_offset: Union[int, UnsetType]=unset, page: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> List[Monitor]: + """Get all monitors. + + Get all monitors from your organization. + + :param group_states: When specified, shows additional information about the group states. + Choose one or more from ``all`` , ``alert`` , ``warn`` , and ``no data``. + :type group_states: str, optional + :param name: A string to filter monitors by name. + :type name: str, optional + :param tags: A comma separated list indicating what tags, if any, should be used to filter the list of monitors by scope. + For example, ``host:host0``. + :type tags: str, optional + :param monitor_tags: A comma separated list indicating what service and/or custom tags, if any, should be used to filter the list of monitors. + Tags created in the Datadog UI automatically have the service key prepended. For example, ``service:my-app``. + :type monitor_tags: str, optional + :param with_downtimes: If this argument is set to true, then the returned data includes all current active downtimes for each monitor. + :type with_downtimes: bool, optional + :param id_offset: Use this parameter for paginating through large sets of monitors. Start with a value of zero, make a request, set the value to the last ID of result set, and then repeat until the response is empty. + :type id_offset: int, optional + :param page: The page to start paginating from. If this argument is not specified, the request returns all monitors without pagination. + :type page: int, optional + :param page_size: The number of monitors to return per page. If the page argument is not specified, the default behavior returns all monitors without a ``page_size`` limit. However, if page is specified and ``page_size`` is not, the argument defaults to 100. + :type page_size: int, optional + :rtype: [Monitor] + """ + kwargs: Dict[str, Any] = {} + if group_states is not unset: + kwargs["group_states"] = group_states + + if name is not unset: + kwargs["name"] = name + + if tags is not unset: + kwargs["tags"] = tags + + if monitor_tags is not unset: + kwargs["monitor_tags"] = monitor_tags + + if with_downtimes is not unset: + kwargs["with_downtimes"] = with_downtimes + + if id_offset is not unset: + kwargs["id_offset"] = id_offset + + if page is not unset: + kwargs["page"] = page + + if page_size is not unset: + kwargs["page_size"] = page_size + + return self._list_monitors_endpoint.call_with_http_info(**kwargs) + + def list_monitors_with_pagination(self, *, group_states: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, tags: Union[str, UnsetType]=unset, monitor_tags: Union[str, UnsetType]=unset, with_downtimes: Union[bool, UnsetType]=unset, id_offset: Union[int, UnsetType]=unset, page: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[Monitor]: + """Get all monitors. + + Provide a paginated version of :meth:`list_monitors`, returning all items. + + :param group_states: When specified, shows additional information about the group states. + Choose one or more from ``all`` , ``alert`` , ``warn`` , and ``no data``. + :type group_states: str, optional + :param name: A string to filter monitors by name. + :type name: str, optional + :param tags: A comma separated list indicating what tags, if any, should be used to filter the list of monitors by scope. + For example, ``host:host0``. + :type tags: str, optional + :param monitor_tags: A comma separated list indicating what service and/or custom tags, if any, should be used to filter the list of monitors. + Tags created in the Datadog UI automatically have the service key prepended. For example, ``service:my-app``. + :type monitor_tags: str, optional + :param with_downtimes: If this argument is set to true, then the returned data includes all current active downtimes for each monitor. + :type with_downtimes: bool, optional + :param id_offset: Use this parameter for paginating through large sets of monitors. Start with a value of zero, make a request, set the value to the last ID of result set, and then repeat until the response is empty. + :type id_offset: int, optional + :param page: The page to start paginating from. If this argument is not specified, the request returns all monitors without pagination. + :type page: int, optional + :param page_size: The number of monitors to return per page. If the page argument is not specified, the default behavior returns all monitors without a ``page_size`` limit. However, if page is specified and ``page_size`` is not, the argument defaults to 100. + :type page_size: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[Monitor] + """ + kwargs: Dict[str, Any] = {} + if group_states is not unset: + kwargs["group_states"] = group_states + + if name is not unset: + kwargs["name"] = name + + if tags is not unset: + kwargs["tags"] = tags + + if monitor_tags is not unset: + kwargs["monitor_tags"] = monitor_tags + + if with_downtimes is not unset: + kwargs["with_downtimes"] = with_downtimes + + if id_offset is not unset: + kwargs["id_offset"] = id_offset + + if page is not unset: + kwargs["page"] = page + + if page_size is not unset: + kwargs["page_size"] = page_size + + local_page_size = get_attribute_from_path(kwargs, "page_size", 100) + endpoint = self._list_monitors_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "page_param": "page", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def search_monitor_groups(self, *, query: Union[str, UnsetType]=unset, page: Union[int, UnsetType]=unset, per_page: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, ) -> MonitorGroupSearchResponse: + """Monitors group search. + + Search and filter your monitor groups details. + + :param query: After entering a search query on the `Triggered Monitors page `_ , use the query parameter value in the + URL of the page as a value for this parameter. For more information, see the `Manage Monitors documentation `_. + + The query can contain any number of space-separated monitor attributes, for instance: ``query="type:metric group_status:alert"``. + :type query: str, optional + :param page: Page to start paginating from. + :type page: int, optional + :param per_page: Number of monitors to return per page. + :type per_page: int, optional + :param sort: String for sort order, composed of field and sort order separate by a comma, for example ``name,asc``. Supported sort directions: ``asc`` , ``desc``. Supported fields: + + * ``name`` + * ``status`` + * ``tags`` + :type sort: str, optional + :rtype: MonitorGroupSearchResponse + """ + kwargs: Dict[str, Any] = {} + if query is not unset: + kwargs["query"] = query + + if page is not unset: + kwargs["page"] = page + + if per_page is not unset: + kwargs["per_page"] = per_page + + if sort is not unset: + kwargs["sort"] = sort + + return self._search_monitor_groups_endpoint.call_with_http_info(**kwargs) + + def search_monitors(self, *, query: Union[str, UnsetType]=unset, page: Union[int, UnsetType]=unset, per_page: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, ) -> MonitorSearchResponse: + """Monitors search. + + Search and filter your monitors details. + + :param query: After entering a search query in your `Manage Monitor page `_ use the query parameter value in the + URL of the page as value for this parameter. Consult the dedicated `manage monitor documentation `_ + page to learn more. + + The query can contain any number of space-separated monitor attributes, for instance ``query="type:metric status:alert"``. + :type query: str, optional + :param page: Page to start paginating from. + :type page: int, optional + :param per_page: Number of monitors to return per page. + :type per_page: int, optional + :param sort: String for sort order, composed of field and sort order separate by a comma, for example ``name,asc``. Supported sort directions: ``asc`` , ``desc``. Supported fields: + + * ``name`` + * ``status`` + * ``tags`` + :type sort: str, optional + :rtype: MonitorSearchResponse + """ + kwargs: Dict[str, Any] = {} + if query is not unset: + kwargs["query"] = query + + if page is not unset: + kwargs["page"] = page + + if per_page is not unset: + kwargs["per_page"] = per_page + + if sort is not unset: + kwargs["sort"] = sort + + return self._search_monitors_endpoint.call_with_http_info(**kwargs) + + def update_monitor(self, monitor_id: int, body: MonitorUpdateRequest, ) -> Monitor: + """Edit a monitor. + + Edit the specified monitor. + + :param monitor_id: The ID of the monitor. + :type monitor_id: int + :param body: Edit a monitor request body. + :type body: MonitorUpdateRequest + :rtype: Monitor + """ + kwargs: Dict[str, Any] = {} + kwargs["monitor_id"] = monitor_id + + kwargs["body"] = body + + return self._update_monitor_endpoint.call_with_http_info(**kwargs) + + def validate_existing_monitor(self, monitor_id: int, body: Monitor, ) -> dict: + """Validate an existing monitor. + + Validate the monitor provided in the request. + + **Note** : Log monitors require an unscoped App Key and ``logs_read_data`` permission. + + :param monitor_id: The ID of the monitor + :type monitor_id: int + :param body: Monitor request object + :type body: Monitor + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["monitor_id"] = monitor_id + + kwargs["body"] = body + + return self._validate_existing_monitor_endpoint.call_with_http_info(**kwargs) + + def validate_monitor(self, body: Monitor, ) -> dict: + """Validate a monitor. + + Validate the monitor provided in the request. + + **Note** : Log monitors require an unscoped App Key and ``logs_read_data`` permission. + + :param body: Monitor request object + :type body: Monitor + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._validate_monitor_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/notebooks_api.py b/datadog_api_client/v1/api/notebooks_api.py new file mode 100644 index 0000000000..70477ec81e --- /dev/null +++ b/datadog_api_client/v1/api/notebooks_api.py @@ -0,0 +1,397 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.notebooks_response import NotebooksResponse +from datadog_api_client.v1.model.notebooks_response_data import NotebooksResponseData +from datadog_api_client.v1.model.notebook_response import NotebookResponse +from datadog_api_client.v1.model.notebook_create_request import NotebookCreateRequest +from datadog_api_client.v1.model.notebook_update_request import NotebookUpdateRequest + + +class NotebooksApi: + """ + Interact with your notebooks through the API to make it easier to organize, find, and + share all of your notebooks with your team and organization. For more information, see the + `Notebooks documentation `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_notebook_endpoint = _Endpoint( + settings={ + "response_type": (NotebookResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/notebooks", + "operation_id": "create_notebook", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (NotebookCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_notebook_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/notebooks/{notebook_id}", + "operation_id": "delete_notebook", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "notebook_id": { + "required": True, + "openapi_types": (int,), + "attribute": "notebook_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_notebook_endpoint = _Endpoint( + settings={ + "response_type": (NotebookResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/notebooks/{notebook_id}", + "operation_id": "get_notebook", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "notebook_id": { + "required": True, + "openapi_types": (int,), + "attribute": "notebook_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_notebooks_endpoint = _Endpoint( + settings={ + "response_type": (NotebooksResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/notebooks", + "operation_id": "list_notebooks", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "author_handle": { + "openapi_types": (str,), + "attribute": "author_handle", + "location": "query", + }, + "exclude_author_handle": { + "openapi_types": (str,), + "attribute": "exclude_author_handle", + "location": "query", + }, + "start": { + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "count": { + "openapi_types": (int,), + "attribute": "count", + "location": "query", + }, + "sort_field": { + "openapi_types": (str,), + "attribute": "sort_field", + "location": "query", + }, + "sort_dir": { + "openapi_types": (str,), + "attribute": "sort_dir", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "include_cells": { + "openapi_types": (bool,), + "attribute": "include_cells", + "location": "query", + }, + "is_template": { + "openapi_types": (bool,), + "attribute": "is_template", + "location": "query", + }, + "type": { + "openapi_types": (str,), + "attribute": "type", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_notebook_endpoint = _Endpoint( + settings={ + "response_type": (NotebookResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/notebooks/{notebook_id}", + "operation_id": "update_notebook", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "notebook_id": { + "required": True, + "openapi_types": (int,), + "attribute": "notebook_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (NotebookUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_notebook(self, body: NotebookCreateRequest, ) -> NotebookResponse: + """Create a notebook. + + Create a notebook using the specified options. + + :param body: The JSON description of the notebook you want to create. + :type body: NotebookCreateRequest + :rtype: NotebookResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_notebook_endpoint.call_with_http_info(**kwargs) + + def delete_notebook(self, notebook_id: int, ) -> None: + """Delete a notebook. + + Delete a notebook using the specified ID. + + :param notebook_id: Unique ID, assigned when you create the notebook. + :type notebook_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["notebook_id"] = notebook_id + + return self._delete_notebook_endpoint.call_with_http_info(**kwargs) + + def get_notebook(self, notebook_id: int, ) -> NotebookResponse: + """Get a notebook. + + Get a notebook using the specified notebook ID. + + :param notebook_id: Unique ID, assigned when you create the notebook. + :type notebook_id: int + :rtype: NotebookResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["notebook_id"] = notebook_id + + return self._get_notebook_endpoint.call_with_http_info(**kwargs) + + def list_notebooks(self, *, author_handle: Union[str, UnsetType]=unset, exclude_author_handle: Union[str, UnsetType]=unset, start: Union[int, UnsetType]=unset, count: Union[int, UnsetType]=unset, sort_field: Union[str, UnsetType]=unset, sort_dir: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, include_cells: Union[bool, UnsetType]=unset, is_template: Union[bool, UnsetType]=unset, type: Union[str, UnsetType]=unset, ) -> NotebooksResponse: + """Get all notebooks. + + Get all notebooks. This can also be used to search for notebooks with a particular ``query`` in the notebook + ``name`` or author ``handle``. + + :param author_handle: Return notebooks created by the given ``author_handle``. + :type author_handle: str, optional + :param exclude_author_handle: Return notebooks not created by the given ``author_handle``. + :type exclude_author_handle: str, optional + :param start: The index of the first notebook you want returned. + :type start: int, optional + :param count: The number of notebooks to be returned. + :type count: int, optional + :param sort_field: Sort by field ``modified`` , ``name`` , or ``created``. + :type sort_field: str, optional + :param sort_dir: Sort by direction ``asc`` or ``desc``. + :type sort_dir: str, optional + :param query: Return only notebooks with ``query`` string in notebook name or author handle. + :type query: str, optional + :param include_cells: Value of ``false`` excludes the ``cells`` and global ``time`` for each notebook. + :type include_cells: bool, optional + :param is_template: True value returns only template notebooks. Default is false (returns only non-template notebooks). + :type is_template: bool, optional + :param type: If type is provided, returns only notebooks with that metadata type. Default does not have type filtering. + :type type: str, optional + :rtype: NotebooksResponse + """ + kwargs: Dict[str, Any] = {} + if author_handle is not unset: + kwargs["author_handle"] = author_handle + + if exclude_author_handle is not unset: + kwargs["exclude_author_handle"] = exclude_author_handle + + if start is not unset: + kwargs["start"] = start + + if count is not unset: + kwargs["count"] = count + + if sort_field is not unset: + kwargs["sort_field"] = sort_field + + if sort_dir is not unset: + kwargs["sort_dir"] = sort_dir + + if query is not unset: + kwargs["query"] = query + + if include_cells is not unset: + kwargs["include_cells"] = include_cells + + if is_template is not unset: + kwargs["is_template"] = is_template + + if type is not unset: + kwargs["type"] = type + + return self._list_notebooks_endpoint.call_with_http_info(**kwargs) + + def list_notebooks_with_pagination(self, *, author_handle: Union[str, UnsetType]=unset, exclude_author_handle: Union[str, UnsetType]=unset, start: Union[int, UnsetType]=unset, count: Union[int, UnsetType]=unset, sort_field: Union[str, UnsetType]=unset, sort_dir: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, include_cells: Union[bool, UnsetType]=unset, is_template: Union[bool, UnsetType]=unset, type: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[NotebooksResponseData]: + """Get all notebooks. + + Provide a paginated version of :meth:`list_notebooks`, returning all items. + + :param author_handle: Return notebooks created by the given ``author_handle``. + :type author_handle: str, optional + :param exclude_author_handle: Return notebooks not created by the given ``author_handle``. + :type exclude_author_handle: str, optional + :param start: The index of the first notebook you want returned. + :type start: int, optional + :param count: The number of notebooks to be returned. + :type count: int, optional + :param sort_field: Sort by field ``modified`` , ``name`` , or ``created``. + :type sort_field: str, optional + :param sort_dir: Sort by direction ``asc`` or ``desc``. + :type sort_dir: str, optional + :param query: Return only notebooks with ``query`` string in notebook name or author handle. + :type query: str, optional + :param include_cells: Value of ``false`` excludes the ``cells`` and global ``time`` for each notebook. + :type include_cells: bool, optional + :param is_template: True value returns only template notebooks. Default is false (returns only non-template notebooks). + :type is_template: bool, optional + :param type: If type is provided, returns only notebooks with that metadata type. Default does not have type filtering. + :type type: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[NotebooksResponseData] + """ + kwargs: Dict[str, Any] = {} + if author_handle is not unset: + kwargs["author_handle"] = author_handle + + if exclude_author_handle is not unset: + kwargs["exclude_author_handle"] = exclude_author_handle + + if start is not unset: + kwargs["start"] = start + + if count is not unset: + kwargs["count"] = count + + if sort_field is not unset: + kwargs["sort_field"] = sort_field + + if sort_dir is not unset: + kwargs["sort_dir"] = sort_dir + + if query is not unset: + kwargs["query"] = query + + if include_cells is not unset: + kwargs["include_cells"] = include_cells + + if is_template is not unset: + kwargs["is_template"] = is_template + + if type is not unset: + kwargs["type"] = type + + local_page_size = get_attribute_from_path(kwargs, "count", 100) + endpoint = self._list_notebooks_endpoint + set_attribute_from_path(kwargs, "count", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "start", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_notebook(self, notebook_id: int, body: NotebookUpdateRequest, ) -> NotebookResponse: + """Update a notebook. + + Update a notebook using the specified ID. + + :param notebook_id: Unique ID, assigned when you create the notebook. + :type notebook_id: int + :param body: Update notebook request body. + :type body: NotebookUpdateRequest + :rtype: NotebookResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["notebook_id"] = notebook_id + + kwargs["body"] = body + + return self._update_notebook_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/organizations_api.py b/datadog_api_client/v1/api/organizations_api.py new file mode 100644 index 0000000000..11b4a52dc2 --- /dev/null +++ b/datadog_api_client/v1/api/organizations_api.py @@ -0,0 +1,288 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.organization_list_response import OrganizationListResponse +from datadog_api_client.v1.model.organization_create_response import OrganizationCreateResponse +from datadog_api_client.v1.model.organization_create_body import OrganizationCreateBody +from datadog_api_client.v1.model.organization_response import OrganizationResponse +from datadog_api_client.v1.model.organization import Organization +from datadog_api_client.v1.model.org_downgraded_response import OrgDowngradedResponse +from datadog_api_client.v1.model.idp_response import IdpResponse +from datadog_api_client.v1.model.idp_form_data import IdpFormData + + +class OrganizationsApi: + """ + Create, edit, and manage your organizations. Read more about `multi-org accounts `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_child_org_endpoint = _Endpoint( + settings={ + "response_type": (OrganizationCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/org", + "operation_id": "create_child_org", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OrganizationCreateBody,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._downgrade_org_endpoint = _Endpoint( + settings={ + "response_type": (OrgDowngradedResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/org/{public_id}/downgrade", + "operation_id": "downgrade_org", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_org_endpoint = _Endpoint( + settings={ + "response_type": (OrganizationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/org/{public_id}", + "operation_id": "get_org", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_orgs_endpoint = _Endpoint( + settings={ + "response_type": (OrganizationListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/org", + "operation_id": "list_orgs", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_org_endpoint = _Endpoint( + settings={ + "response_type": (OrganizationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/org/{public_id}", + "operation_id": "update_org", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (Organization,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upload_idp_for_org_endpoint = _Endpoint( + settings={ + "response_type": (IdpResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/org/{public_id}/idp_metadata", + "operation_id": "upload_idp_for_org", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "idp_file": { + "required": True, + "openapi_types": (file_type,), + "attribute": "idp_file", + "location": "form", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["multipart/form-data"] + }, + api_client=api_client, + ) + + def create_child_org(self, body: OrganizationCreateBody, ) -> OrganizationCreateResponse: + """Create a child organization. + + Create a child organization. + + This endpoint requires the + `multi-organization account `_ + feature and must be enabled by + `contacting support `_. + + Once a new child organization is created, you can interact with it + by using the ``org.public_id`` , ``api_key.key`` , and + ``application_key.hash`` provided in the response. + + :param body: Organization object that needs to be created + :type body: OrganizationCreateBody + :rtype: OrganizationCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_child_org_endpoint.call_with_http_info(**kwargs) + + def downgrade_org(self, public_id: str, ) -> OrgDowngradedResponse: + """Spin-off Child Organization. + + Only available for MSP customers. Removes a child organization from the hierarchy of the master organization and places the child organization on a 30-day trial. + + :param public_id: The ``public_id`` of the organization you are operating within. + :type public_id: str + :rtype: OrgDowngradedResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._downgrade_org_endpoint.call_with_http_info(**kwargs) + + def get_org(self, public_id: str, ) -> OrganizationResponse: + """Get organization information. + + Get organization information. + + :param public_id: The ``public_id`` of the organization you are operating within. + :type public_id: str + :rtype: OrganizationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_org_endpoint.call_with_http_info(**kwargs) + + def list_orgs(self, ) -> OrganizationListResponse: + """List your managed organizations. + + This endpoint returns data on your top-level organization. + + :rtype: OrganizationListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_orgs_endpoint.call_with_http_info(**kwargs) + + def update_org(self, public_id: str, body: Organization, ) -> OrganizationResponse: + """Update your organization. + + Update your organization. + + :param public_id: The ``public_id`` of the organization you are operating within. + :type public_id: str + :type body: Organization + :rtype: OrganizationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._update_org_endpoint.call_with_http_info(**kwargs) + + def upload_idp_for_org(self, public_id: str, idp_file: file_type, ) -> IdpResponse: + """Upload IdP metadata. + + There are a couple of options for updating the Identity Provider (IdP) + metadata from your SAML IdP. + + * + **Multipart Form-Data** : Post the IdP metadata file using a form post. + + * + **XML Body:** Post the IdP metadata file as the body of the request. + + :param public_id: The ``public_id`` of the organization you are operating with + :type public_id: str + :param idp_file: The path to the XML metadata file you wish to upload. + :type idp_file: file_type + :rtype: IdpResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["idp_file"] = idp_file + + return self._upload_idp_for_org_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/pager_duty_integration_api.py b/datadog_api_client/v1/api/pager_duty_integration_api.py new file mode 100644 index 0000000000..aecbf4753a --- /dev/null +++ b/datadog_api_client/v1/api/pager_duty_integration_api.py @@ -0,0 +1,194 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.pager_duty_service_name import PagerDutyServiceName +from datadog_api_client.v1.model.pager_duty_service import PagerDutyService +from datadog_api_client.v1.model.pager_duty_service_key import PagerDutyServiceKey + + +class PagerDutyIntegrationApi: + """ + Configure your `Datadog-PagerDuty integration `_ + directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_pager_duty_integration_service_endpoint = _Endpoint( + settings={ + "response_type": (PagerDutyServiceName,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/pagerduty/configuration/services", + "operation_id": "create_pager_duty_integration_service", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (PagerDutyService,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_pager_duty_integration_service_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/pagerduty/configuration/services/{service_name}", + "operation_id": "delete_pager_duty_integration_service", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "service_name": { + "required": True, + "openapi_types": (str,), + "attribute": "service_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_pager_duty_integration_service_endpoint = _Endpoint( + settings={ + "response_type": (PagerDutyServiceName,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/pagerduty/configuration/services/{service_name}", + "operation_id": "get_pager_duty_integration_service", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "service_name": { + "required": True, + "openapi_types": (str,), + "attribute": "service_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_pager_duty_integration_service_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/pagerduty/configuration/services/{service_name}", + "operation_id": "update_pager_duty_integration_service", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "service_name": { + "required": True, + "openapi_types": (str,), + "attribute": "service_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PagerDutyServiceKey,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_pager_duty_integration_service(self, body: PagerDutyService, ) -> PagerDutyServiceName: + """Create a new service object. + + Create a new service object in the PagerDuty integration. + + :param body: Create a new service object request body. + :type body: PagerDutyService + :rtype: PagerDutyServiceName + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_pager_duty_integration_service_endpoint.call_with_http_info(**kwargs) + + def delete_pager_duty_integration_service(self, service_name: str, ) -> None: + """Delete a single service object. + + Delete a single service object in the Datadog-PagerDuty integration. + + :param service_name: The service name + :type service_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["service_name"] = service_name + + return self._delete_pager_duty_integration_service_endpoint.call_with_http_info(**kwargs) + + def get_pager_duty_integration_service(self, service_name: str, ) -> PagerDutyServiceName: + """Get a single service object. + + Get service name in the Datadog-PagerDuty integration. + + :param service_name: The service name. + :type service_name: str + :rtype: PagerDutyServiceName + """ + kwargs: Dict[str, Any] = {} + kwargs["service_name"] = service_name + + return self._get_pager_duty_integration_service_endpoint.call_with_http_info(**kwargs) + + def update_pager_duty_integration_service(self, service_name: str, body: PagerDutyServiceKey, ) -> None: + """Update a single service object. + + Update a single service object in the Datadog-PagerDuty integration. + + :param service_name: The service name + :type service_name: str + :param body: Update an existing service object request body. + :type body: PagerDutyServiceKey + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["service_name"] = service_name + + kwargs["body"] = body + + return self._update_pager_duty_integration_service_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/security_monitoring_api.py b/datadog_api_client/v1/api/security_monitoring_api.py new file mode 100644 index 0000000000..91f0ce3254 --- /dev/null +++ b/datadog_api_client/v1/api/security_monitoring_api.py @@ -0,0 +1,179 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.successful_signal_update_response import SuccessfulSignalUpdateResponse +from datadog_api_client.v1.model.add_signal_to_incident_request import AddSignalToIncidentRequest +from datadog_api_client.v1.model.signal_assignee_update_request import SignalAssigneeUpdateRequest +from datadog_api_client.v1.model.signal_state_update_request import SignalStateUpdateRequest + + +class SecurityMonitoringApi: + """ + Create and manage your security rules, signals, filters, and more. See the `Datadog Security page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._add_security_monitoring_signal_to_incident_endpoint = _Endpoint( + settings={ + "response_type": (SuccessfulSignalUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/security_analytics/signals/{signal_id}/add_to_incident", + "operation_id": "add_security_monitoring_signal_to_incident", + "http_method": "PATCH", + "version": "v1", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AddSignalToIncidentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._edit_security_monitoring_signal_assignee_endpoint = _Endpoint( + settings={ + "response_type": (SuccessfulSignalUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/security_analytics/signals/{signal_id}/assignee", + "operation_id": "edit_security_monitoring_signal_assignee", + "http_method": "PATCH", + "version": "v1", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SignalAssigneeUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._edit_security_monitoring_signal_state_endpoint = _Endpoint( + settings={ + "response_type": (SuccessfulSignalUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/security_analytics/signals/{signal_id}/state", + "operation_id": "edit_security_monitoring_signal_state", + "http_method": "PATCH", + "version": "v1", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SignalStateUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def add_security_monitoring_signal_to_incident(self, signal_id: str, body: AddSignalToIncidentRequest, ) -> SuccessfulSignalUpdateResponse: + """Add a security signal to an incident. + + Add a security signal to an incident. This makes it possible to search for signals by incident within the signal explorer and to view the signals on the incident timeline. + + :param signal_id: The ID of the signal. + :type signal_id: str + :param body: Attributes describing the signal update. + :type body: AddSignalToIncidentRequest + :rtype: SuccessfulSignalUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + kwargs["body"] = body + + return self._add_security_monitoring_signal_to_incident_endpoint.call_with_http_info(**kwargs) + + def edit_security_monitoring_signal_assignee(self, signal_id: str, body: SignalAssigneeUpdateRequest, ) -> SuccessfulSignalUpdateResponse: + """Modify the triage assignee of a security signal. **Deprecated**. + + This endpoint is deprecated - Modify the triage assignee of a security signal. + + :param signal_id: The ID of the signal. + :type signal_id: str + :param body: Attributes describing the signal update. + :type body: SignalAssigneeUpdateRequest + :rtype: SuccessfulSignalUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + kwargs["body"] = body + + warnings.warn("edit_security_monitoring_signal_assignee is deprecated", DeprecationWarning, stacklevel=2) + return self._edit_security_monitoring_signal_assignee_endpoint.call_with_http_info(**kwargs) + + def edit_security_monitoring_signal_state(self, signal_id: str, body: SignalStateUpdateRequest, ) -> SuccessfulSignalUpdateResponse: + """Change the triage state of a security signal. **Deprecated**. + + This endpoint is deprecated - Change the triage state of a security signal. + + :param signal_id: The ID of the signal. + :type signal_id: str + :param body: Attributes describing the signal update. + :type body: SignalStateUpdateRequest + :rtype: SuccessfulSignalUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + kwargs["body"] = body + + warnings.warn("edit_security_monitoring_signal_state is deprecated", DeprecationWarning, stacklevel=2) + return self._edit_security_monitoring_signal_state_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/service_checks_api.py b/datadog_api_client/v1/api/service_checks_api.py new file mode 100644 index 0000000000..32ebc79b38 --- /dev/null +++ b/datadog_api_client/v1/api/service_checks_api.py @@ -0,0 +1,88 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.intake_payload_accepted import IntakePayloadAccepted +from datadog_api_client.v1.model.service_checks import ServiceChecks +from datadog_api_client.v1.model.service_check import ServiceCheck + + +class ServiceChecksApi: + """ + The service check endpoint allows you to post check statuses for use with monitors. + Service check messages are limited to 500 characters. If a check is posted with a message + containing more than 500 characters, only the first 500 characters are displayed. Messages + are limited for checks with a Critical or Warning status, they are dropped for checks with + an OK status. + + * `Read more about Service Check monitors `_. + * `Read more about Process Check monitors `_. + * `Read more about Network monitors `_. + * `Read more about Custom Check monitors `_. + * `Read more about Service Checks and status codes `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._submit_service_check_endpoint = _Endpoint( + settings={ + "response_type": (IntakePayloadAccepted,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v1/check_run", + "operation_id": "submit_service_check", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ServiceChecks,), + "location": "body", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["text/json", "application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def submit_service_check(self, body: ServiceChecks, ) -> IntakePayloadAccepted: + """Submit a Service Check. + + Submit a list of Service Checks. + + **Notes** : + + * A valid API key is required. + * Service checks can be submitted up to 10 minutes in the past. + + :param body: Service Check request body. + :type body: ServiceChecks + :rtype: IntakePayloadAccepted + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._submit_service_check_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/service_level_objective_corrections_api.py b/datadog_api_client/v1/api/service_level_objective_corrections_api.py new file mode 100644 index 0000000000..788283e2a8 --- /dev/null +++ b/datadog_api_client/v1/api/service_level_objective_corrections_api.py @@ -0,0 +1,278 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.slo_correction_list_response import SLOCorrectionListResponse +from datadog_api_client.v1.model.slo_correction import SLOCorrection +from datadog_api_client.v1.model.slo_correction_response import SLOCorrectionResponse +from datadog_api_client.v1.model.slo_correction_create_request import SLOCorrectionCreateRequest +from datadog_api_client.v1.model.slo_correction_update_request import SLOCorrectionUpdateRequest + + +class ServiceLevelObjectiveCorrectionsApi: + """ + SLO Status Corrections allow you to prevent specific time periods from negatively impacting + your SLO’s status and error budget. You can use Status Corrections for various purposes, such + as removing planned maintenance windows, non-business hours, or other time periods that do + not correspond to genuine issues. See `SLO status corrections `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_slo_correction_endpoint = _Endpoint( + settings={ + "response_type": (SLOCorrectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/correction", + "operation_id": "create_slo_correction", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SLOCorrectionCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_slo_correction_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/slo/correction/{slo_correction_id}", + "operation_id": "delete_slo_correction", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "slo_correction_id": { + "required": True, + "openapi_types": (str,), + "attribute": "slo_correction_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_slo_correction_endpoint = _Endpoint( + settings={ + "response_type": (SLOCorrectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/slo/correction/{slo_correction_id}", + "operation_id": "get_slo_correction", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "slo_correction_id": { + "required": True, + "openapi_types": (str,), + "attribute": "slo_correction_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_slo_correction_endpoint = _Endpoint( + settings={ + "response_type": (SLOCorrectionListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/correction", + "operation_id": "list_slo_correction", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "offset": { + "openapi_types": (int,), + "attribute": "offset", + "location": "query", + }, + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_slo_correction_endpoint = _Endpoint( + settings={ + "response_type": (SLOCorrectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/slo/correction/{slo_correction_id}", + "operation_id": "update_slo_correction", + "http_method": "PATCH", + "version": "v1", + }, + params_map={ + "slo_correction_id": { + "required": True, + "openapi_types": (str,), + "attribute": "slo_correction_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SLOCorrectionUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_slo_correction(self, body: SLOCorrectionCreateRequest, ) -> SLOCorrectionResponse: + """Create an SLO correction. + + Create an SLO correction. Use ``slo_id`` to apply the correction to a single SLO, or ``slo_query`` to apply the + correction to SLOs that match a query. Exactly one of ``slo_id`` or ``slo_query`` is required. + + :param body: Create an SLO Correction + :type body: SLOCorrectionCreateRequest + :rtype: SLOCorrectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_slo_correction_endpoint.call_with_http_info(**kwargs) + + def delete_slo_correction(self, slo_correction_id: str, ) -> None: + """Delete an SLO correction. + + Permanently delete the specified SLO correction object. + + :param slo_correction_id: The ID of the SLO correction object. + :type slo_correction_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["slo_correction_id"] = slo_correction_id + + return self._delete_slo_correction_endpoint.call_with_http_info(**kwargs) + + def get_slo_correction(self, slo_correction_id: str, ) -> SLOCorrectionResponse: + """Get an SLO correction for an SLO. + + Get an SLO correction. + + :param slo_correction_id: The ID of the SLO correction object. + :type slo_correction_id: str + :rtype: SLOCorrectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["slo_correction_id"] = slo_correction_id + + return self._get_slo_correction_endpoint.call_with_http_info(**kwargs) + + def list_slo_correction(self, *, offset: Union[int, UnsetType]=unset, limit: Union[int, UnsetType]=unset, ) -> SLOCorrectionListResponse: + """Get all SLO corrections. + + Get all Service Level Objective corrections. + + :param offset: The specific offset to use as the beginning of the returned response. + :type offset: int, optional + :param limit: The number of SLO corrections to return in the response. Default is 25. + :type limit: int, optional + :rtype: SLOCorrectionListResponse + """ + kwargs: Dict[str, Any] = {} + if offset is not unset: + kwargs["offset"] = offset + + if limit is not unset: + kwargs["limit"] = limit + + return self._list_slo_correction_endpoint.call_with_http_info(**kwargs) + + def list_slo_correction_with_pagination(self, *, offset: Union[int, UnsetType]=unset, limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[SLOCorrection]: + """Get all SLO corrections. + + Provide a paginated version of :meth:`list_slo_correction`, returning all items. + + :param offset: The specific offset to use as the beginning of the returned response. + :type offset: int, optional + :param limit: The number of SLO corrections to return in the response. Default is 25. + :type limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[SLOCorrection] + """ + kwargs: Dict[str, Any] = {} + if offset is not unset: + kwargs["offset"] = offset + + if limit is not unset: + kwargs["limit"] = limit + + local_page_size = get_attribute_from_path(kwargs, "limit", 25) + endpoint = self._list_slo_correction_endpoint + set_attribute_from_path(kwargs, "limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_slo_correction(self, slo_correction_id: str, body: SLOCorrectionUpdateRequest, ) -> SLOCorrectionResponse: + """Update an SLO correction. + + Update the specified SLO correction object. + + :param slo_correction_id: The ID of the SLO correction object. + :type slo_correction_id: str + :param body: The edited SLO correction object. + :type body: SLOCorrectionUpdateRequest + :rtype: SLOCorrectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["slo_correction_id"] = slo_correction_id + + kwargs["body"] = body + + return self._update_slo_correction_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/service_level_objectives_api.py b/datadog_api_client/v1/api/service_level_objectives_api.py new file mode 100644 index 0000000000..6fb025d6a4 --- /dev/null +++ b/datadog_api_client/v1/api/service_level_objectives_api.py @@ -0,0 +1,642 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.slo_list_response import SLOListResponse +from datadog_api_client.v1.model.service_level_objective import ServiceLevelObjective +from datadog_api_client.v1.model.service_level_objective_request import ServiceLevelObjectiveRequest +from datadog_api_client.v1.model.slo_bulk_delete_response import SLOBulkDeleteResponse +from datadog_api_client.v1.model.slo_bulk_delete import SLOBulkDelete +from datadog_api_client.v1.model.check_can_delete_slo_response import CheckCanDeleteSLOResponse +from datadog_api_client.v1.model.search_slo_response import SearchSLOResponse +from datadog_api_client.v1.model.slo_delete_response import SLODeleteResponse +from datadog_api_client.v1.model.slo_response import SLOResponse +from datadog_api_client.v1.model.slo_correction_list_response import SLOCorrectionListResponse +from datadog_api_client.v1.model.slo_history_response import SLOHistoryResponse + + +class ServiceLevelObjectivesApi: + """ + `Service Level Objectives `_ + (or SLOs) are a key part of the site reliability engineering toolkit. + SLOs provide a framework for defining clear targets around application performance, + which ultimately help teams provide a consistent customer experience, + balance feature development with platform stability, + and improve communication with internal and external users. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._check_can_delete_slo_endpoint = _Endpoint( + settings={ + "response_type": (CheckCanDeleteSLOResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/can_delete", + "operation_id": "check_can_delete_slo", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "ids": { + "required": True, + "openapi_types": (str,), + "attribute": "ids", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._create_slo_endpoint = _Endpoint( + settings={ + "response_type": (SLOListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo", + "operation_id": "create_slo", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ServiceLevelObjectiveRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_slo_endpoint = _Endpoint( + settings={ + "response_type": (SLODeleteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/{slo_id}", + "operation_id": "delete_slo", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "slo_id": { + "required": True, + "openapi_types": (str,), + "attribute": "slo_id", + "location": "path", + }, + "force": { + "openapi_types": (str,), + "attribute": "force", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_slo_timeframe_in_bulk_endpoint = _Endpoint( + settings={ + "response_type": (SLOBulkDeleteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/bulk_delete", + "operation_id": "delete_slo_timeframe_in_bulk", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SLOBulkDelete,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_slo_endpoint = _Endpoint( + settings={ + "response_type": (SLOResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/{slo_id}", + "operation_id": "get_slo", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "slo_id": { + "required": True, + "openapi_types": (str,), + "attribute": "slo_id", + "location": "path", + }, + "with_configured_alert_ids": { + "openapi_types": (bool,), + "attribute": "with_configured_alert_ids", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_slo_corrections_endpoint = _Endpoint( + settings={ + "response_type": (SLOCorrectionListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/{slo_id}/corrections", + "operation_id": "get_slo_corrections", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "slo_id": { + "required": True, + "openapi_types": (str,), + "attribute": "slo_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_slo_history_endpoint = _Endpoint( + settings={ + "response_type": (SLOHistoryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/{slo_id}/history", + "operation_id": "get_slo_history", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "slo_id": { + "required": True, + "openapi_types": (str,), + "attribute": "slo_id", + "location": "path", + }, + "from_ts": { + "required": True, + "openapi_types": (int,), + "attribute": "from_ts", + "location": "query", + }, + "to_ts": { + "required": True, + "openapi_types": (int,), + "attribute": "to_ts", + "location": "query", + }, + "target": { + "validation": { + "exclusive_maximum": 100, + "exclusive_minimum": 0, + }, + "openapi_types": (float,), + "attribute": "target", + "location": "query", + }, + "apply_correction": { + "openapi_types": (bool,), + "attribute": "apply_correction", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_slos_endpoint = _Endpoint( + settings={ + "response_type": (SLOListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo", + "operation_id": "list_slos", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "ids": { + "openapi_types": (str,), + "attribute": "ids", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "tags_query": { + "openapi_types": (str,), + "attribute": "tags_query", + "location": "query", + }, + "metrics_query": { + "openapi_types": (str,), + "attribute": "metrics_query", + "location": "query", + }, + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "offset": { + "openapi_types": (int,), + "attribute": "offset", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_slo_endpoint = _Endpoint( + settings={ + "response_type": (SearchSLOResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/search", + "operation_id": "search_slo", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "include_facets": { + "openapi_types": (bool,), + "attribute": "include_facets", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_slo_endpoint = _Endpoint( + settings={ + "response_type": (SLOListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/slo/{slo_id}", + "operation_id": "update_slo", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "slo_id": { + "required": True, + "openapi_types": (str,), + "attribute": "slo_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ServiceLevelObjective,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def check_can_delete_slo(self, ids: str, ) -> CheckCanDeleteSLOResponse: + """Check if SLOs can be safely deleted. + + Check if an SLO can be safely deleted. For example, + assure an SLO can be deleted without disrupting a dashboard. + + :param ids: A comma separated list of the IDs of the service level objectives objects. + :type ids: str + :rtype: CheckCanDeleteSLOResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ids"] = ids + + return self._check_can_delete_slo_endpoint.call_with_http_info(**kwargs) + + def create_slo(self, body: ServiceLevelObjectiveRequest, ) -> SLOListResponse: + """Create an SLO object. + + Create a service level objective object. + + :param body: Service level objective request object. + :type body: ServiceLevelObjectiveRequest + :rtype: SLOListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_slo_endpoint.call_with_http_info(**kwargs) + + def delete_slo(self, slo_id: str, *, force: Union[str, UnsetType]=unset, ) -> SLODeleteResponse: + """Delete an SLO. + + Permanently delete the specified service level objective object. + + If an SLO is used in a dashboard, the ``DELETE /v1/slo/`` endpoint returns + a 409 conflict error because the SLO is referenced in a dashboard. + + :param slo_id: The ID of the service level objective. + :type slo_id: str + :param force: Delete the monitor even if it's referenced by other resources (for example SLO, composite monitor). + :type force: str, optional + :rtype: SLODeleteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["slo_id"] = slo_id + + if force is not unset: + kwargs["force"] = force + + return self._delete_slo_endpoint.call_with_http_info(**kwargs) + + def delete_slo_timeframe_in_bulk(self, body: SLOBulkDelete, ) -> SLOBulkDeleteResponse: + """Bulk Delete SLO Timeframes. + + Delete (or partially delete) multiple service level objective objects. + + This endpoint facilitates deletion of one or more thresholds for one or more + service level objective objects. If all thresholds are deleted, the service level + objective object is deleted as well. + + :param body: Delete multiple service level objective objects request body. + :type body: SLOBulkDelete + :rtype: SLOBulkDeleteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_slo_timeframe_in_bulk_endpoint.call_with_http_info(**kwargs) + + def get_slo(self, slo_id: str, *, with_configured_alert_ids: Union[bool, UnsetType]=unset, ) -> SLOResponse: + """Get an SLO's details. + + Get a service level objective object. + + :param slo_id: The ID of the service level objective object. + :type slo_id: str + :param with_configured_alert_ids: Get the IDs of SLO monitors that reference this SLO. + :type with_configured_alert_ids: bool, optional + :rtype: SLOResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["slo_id"] = slo_id + + if with_configured_alert_ids is not unset: + kwargs["with_configured_alert_ids"] = with_configured_alert_ids + + return self._get_slo_endpoint.call_with_http_info(**kwargs) + + def get_slo_corrections(self, slo_id: str, ) -> SLOCorrectionListResponse: + """Get Corrections For an SLO. + + Get corrections applied to an SLO + + :param slo_id: The ID of the service level objective object. + :type slo_id: str + :rtype: SLOCorrectionListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["slo_id"] = slo_id + + return self._get_slo_corrections_endpoint.call_with_http_info(**kwargs) + + def get_slo_history(self, slo_id: str, from_ts: int, to_ts: int, *, target: Union[float, UnsetType]=unset, apply_correction: Union[bool, UnsetType]=unset, ) -> SLOHistoryResponse: + """Get an SLO's history. + + Get a specific SLO’s history, regardless of its SLO type. + + The detailed history data is structured according to the source data type. + For example, metric data is included for event SLOs that use + the metric source, and monitor SLO types include the monitor transition history. + + **Note:** There are different response formats for event based and time based SLOs. + Examples of both are shown. + + :param slo_id: The ID of the service level objective object. + :type slo_id: str + :param from_ts: The ``from`` timestamp for the query window in epoch seconds. + :type from_ts: int + :param to_ts: The ``to`` timestamp for the query window in epoch seconds. + :type to_ts: int + :param target: The SLO target. If ``target`` is passed in, the response will include the remaining error budget and a timeframe value of ``custom``. + :type target: float, optional + :param apply_correction: Defaults to ``true``. If any SLO corrections are applied and this parameter is set to ``false`` , + then the corrections will not be applied and the SLI values will not be affected. + :type apply_correction: bool, optional + :rtype: SLOHistoryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["slo_id"] = slo_id + + kwargs["from_ts"] = from_ts + + kwargs["to_ts"] = to_ts + + if target is not unset: + kwargs["target"] = target + + if apply_correction is not unset: + kwargs["apply_correction"] = apply_correction + + return self._get_slo_history_endpoint.call_with_http_info(**kwargs) + + def list_slos(self, *, ids: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, tags_query: Union[str, UnsetType]=unset, metrics_query: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, ) -> SLOListResponse: + """Get all SLOs. + + Get a list of service level objective objects for your organization. + + :param ids: A comma separated list of the IDs of the service level objectives objects. + :type ids: str, optional + :param query: The query string to filter results based on SLO names. + :type query: str, optional + :param tags_query: The query string to filter results based on a single SLO tag. + :type tags_query: str, optional + :param metrics_query: The query string to filter results based on SLO numerator and denominator. + :type metrics_query: str, optional + :param limit: The number of SLOs to return in the response. + :type limit: int, optional + :param offset: The specific offset to use as the beginning of the returned response. + :type offset: int, optional + :rtype: SLOListResponse + """ + kwargs: Dict[str, Any] = {} + if ids is not unset: + kwargs["ids"] = ids + + if query is not unset: + kwargs["query"] = query + + if tags_query is not unset: + kwargs["tags_query"] = tags_query + + if metrics_query is not unset: + kwargs["metrics_query"] = metrics_query + + if limit is not unset: + kwargs["limit"] = limit + + if offset is not unset: + kwargs["offset"] = offset + + return self._list_slos_endpoint.call_with_http_info(**kwargs) + + def list_slos_with_pagination(self, *, ids: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, tags_query: Union[str, UnsetType]=unset, metrics_query: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[ServiceLevelObjective]: + """Get all SLOs. + + Provide a paginated version of :meth:`list_slos`, returning all items. + + :param ids: A comma separated list of the IDs of the service level objectives objects. + :type ids: str, optional + :param query: The query string to filter results based on SLO names. + :type query: str, optional + :param tags_query: The query string to filter results based on a single SLO tag. + :type tags_query: str, optional + :param metrics_query: The query string to filter results based on SLO numerator and denominator. + :type metrics_query: str, optional + :param limit: The number of SLOs to return in the response. + :type limit: int, optional + :param offset: The specific offset to use as the beginning of the returned response. + :type offset: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[ServiceLevelObjective] + """ + kwargs: Dict[str, Any] = {} + if ids is not unset: + kwargs["ids"] = ids + + if query is not unset: + kwargs["query"] = query + + if tags_query is not unset: + kwargs["tags_query"] = tags_query + + if metrics_query is not unset: + kwargs["metrics_query"] = metrics_query + + if limit is not unset: + kwargs["limit"] = limit + + if offset is not unset: + kwargs["offset"] = offset + + local_page_size = get_attribute_from_path(kwargs, "limit", 1000) + endpoint = self._list_slos_endpoint + set_attribute_from_path(kwargs, "limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def search_slo(self, *, query: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, include_facets: Union[bool, UnsetType]=unset, ) -> SearchSLOResponse: + """Search for SLOs. + + Get a list of service level objective objects for your organization. + + :param query: The query string to filter results based on SLO names. + Some examples of queries include ``service:`` + and ````. + :type query: str, optional + :param page_size: The number of files to return in the response ``[default=10]``. + :type page_size: int, optional + :param page_number: The identifier of the first page to return. This parameter is used for the pagination feature ``[default=0]``. + :type page_number: int, optional + :param include_facets: Whether or not to return facet information in the response ``[default=false]``. + :type include_facets: bool, optional + :rtype: SearchSLOResponse + """ + kwargs: Dict[str, Any] = {} + if query is not unset: + kwargs["query"] = query + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if include_facets is not unset: + kwargs["include_facets"] = include_facets + + return self._search_slo_endpoint.call_with_http_info(**kwargs) + + def update_slo(self, slo_id: str, body: ServiceLevelObjective, ) -> SLOListResponse: + """Update an SLO. + + Update the specified service level objective object. + + :param slo_id: The ID of the service level objective object. + :type slo_id: str + :param body: The edited service level objective request object. + :type body: ServiceLevelObjective + :rtype: SLOListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["slo_id"] = slo_id + + kwargs["body"] = body + + return self._update_slo_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/slack_integration_api.py b/datadog_api_client/v1/api/slack_integration_api.py new file mode 100644 index 0000000000..933ecc4aba --- /dev/null +++ b/datadog_api_client/v1/api/slack_integration_api.py @@ -0,0 +1,270 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.slack_integration_channels import SlackIntegrationChannels +from datadog_api_client.v1.model.slack_integration_channel import SlackIntegrationChannel + + +class SlackIntegrationApi: + """ + Configure your `Datadog-Slack integration `_ + directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_slack_integration_channel_endpoint = _Endpoint( + settings={ + "response_type": (SlackIntegrationChannel,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/slack/configuration/accounts/{account_name}/channels", + "operation_id": "create_slack_integration_channel", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "account_name": { + "required": True, + "openapi_types": (str,), + "attribute": "account_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SlackIntegrationChannel,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_slack_integration_channel_endpoint = _Endpoint( + settings={ + "response_type": (SlackIntegrationChannel,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/slack/configuration/accounts/{account_name}/channels/{channel_name}", + "operation_id": "get_slack_integration_channel", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "account_name": { + "required": True, + "openapi_types": (str,), + "attribute": "account_name", + "location": "path", + }, + "channel_name": { + "required": True, + "openapi_types": (str,), + "attribute": "channel_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_slack_integration_channels_endpoint = _Endpoint( + settings={ + "response_type": (SlackIntegrationChannels,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/slack/configuration/accounts/{account_name}/channels", + "operation_id": "get_slack_integration_channels", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "account_name": { + "required": True, + "openapi_types": (str,), + "attribute": "account_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._remove_slack_integration_channel_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/slack/configuration/accounts/{account_name}/channels/{channel_name}", + "operation_id": "remove_slack_integration_channel", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "account_name": { + "required": True, + "openapi_types": (str,), + "attribute": "account_name", + "location": "path", + }, + "channel_name": { + "required": True, + "openapi_types": (str,), + "attribute": "channel_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._update_slack_integration_channel_endpoint = _Endpoint( + settings={ + "response_type": (SlackIntegrationChannel,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/slack/configuration/accounts/{account_name}/channels/{channel_name}", + "operation_id": "update_slack_integration_channel", + "http_method": "PATCH", + "version": "v1", + }, + params_map={ + "account_name": { + "required": True, + "openapi_types": (str,), + "attribute": "account_name", + "location": "path", + }, + "channel_name": { + "required": True, + "openapi_types": (str,), + "attribute": "channel_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SlackIntegrationChannel,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_slack_integration_channel(self, account_name: str, body: SlackIntegrationChannel, ) -> SlackIntegrationChannel: + """Create a Slack integration channel. + + Add a channel to your Datadog-Slack integration. + + :param account_name: Your Slack account name. + :type account_name: str + :param body: Payload describing Slack channel to be created + :type body: SlackIntegrationChannel + :rtype: SlackIntegrationChannel + """ + kwargs: Dict[str, Any] = {} + kwargs["account_name"] = account_name + + kwargs["body"] = body + + return self._create_slack_integration_channel_endpoint.call_with_http_info(**kwargs) + + def get_slack_integration_channel(self, account_name: str, channel_name: str, ) -> SlackIntegrationChannel: + """Get a Slack integration channel. + + Get a channel configured for your Datadog-Slack integration. + + :param account_name: Your Slack account name. + :type account_name: str + :param channel_name: The name of the Slack channel being operated on. + :type channel_name: str + :rtype: SlackIntegrationChannel + """ + kwargs: Dict[str, Any] = {} + kwargs["account_name"] = account_name + + kwargs["channel_name"] = channel_name + + return self._get_slack_integration_channel_endpoint.call_with_http_info(**kwargs) + + def get_slack_integration_channels(self, account_name: str, ) -> SlackIntegrationChannels: + """Get all channels in a Slack integration. + + Get a list of all channels configured for your Datadog-Slack integration. + + :param account_name: Your Slack account name. + :type account_name: str + :rtype: SlackIntegrationChannels + """ + kwargs: Dict[str, Any] = {} + kwargs["account_name"] = account_name + + return self._get_slack_integration_channels_endpoint.call_with_http_info(**kwargs) + + def remove_slack_integration_channel(self, account_name: str, channel_name: str, ) -> None: + """Remove a Slack integration channel. + + Remove a channel from your Datadog-Slack integration. + + :param account_name: Your Slack account name. + :type account_name: str + :param channel_name: The name of the Slack channel being operated on. + :type channel_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_name"] = account_name + + kwargs["channel_name"] = channel_name + + return self._remove_slack_integration_channel_endpoint.call_with_http_info(**kwargs) + + def update_slack_integration_channel(self, account_name: str, channel_name: str, body: SlackIntegrationChannel, ) -> SlackIntegrationChannel: + """Update a Slack integration channel. + + Update a channel used in your Datadog-Slack integration. + + :param account_name: Your Slack account name. + :type account_name: str + :param channel_name: The name of the Slack channel being operated on. + :type channel_name: str + :param body: Payload describing fields and values to be updated. + :type body: SlackIntegrationChannel + :rtype: SlackIntegrationChannel + """ + kwargs: Dict[str, Any] = {} + kwargs["account_name"] = account_name + + kwargs["channel_name"] = channel_name + + kwargs["body"] = body + + return self._update_slack_integration_channel_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/snapshots_api.py b/datadog_api_client/v1/api/snapshots_api.py new file mode 100644 index 0000000000..df983d459c --- /dev/null +++ b/datadog_api_client/v1/api/snapshots_api.py @@ -0,0 +1,144 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.graph_snapshot import GraphSnapshot + + +class SnapshotsApi: + """ + Take graph snapshots using the API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_graph_snapshot_endpoint = _Endpoint( + settings={ + "response_type": (GraphSnapshot,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/graph/snapshot", + "operation_id": "get_graph_snapshot", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "metric_query": { + "openapi_types": (str,), + "attribute": "metric_query", + "location": "query", + }, + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "event_query": { + "openapi_types": (str,), + "attribute": "event_query", + "location": "query", + }, + "graph_def": { + "openapi_types": (str,), + "attribute": "graph_def", + "location": "query", + }, + "title": { + "openapi_types": (str,), + "attribute": "title", + "location": "query", + }, + "height": { + "openapi_types": (int,), + "attribute": "height", + "location": "query", + }, + "width": { + "openapi_types": (int,), + "attribute": "width", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_graph_snapshot(self, start: int, end: int, *, metric_query: Union[str, UnsetType]=unset, event_query: Union[str, UnsetType]=unset, graph_def: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, height: Union[int, UnsetType]=unset, width: Union[int, UnsetType]=unset, ) -> GraphSnapshot: + """Take graph snapshots. + + Take graph snapshots. Snapshots are PNG images generated by rendering a specified widget in a web page and capturing it once the data is available. The image is then uploaded to cloud storage. + + **Note** : When a snapshot is created, there is some delay before it is available. + + :param start: The POSIX timestamp of the start of the query in seconds. + :type start: int + :param end: The POSIX timestamp of the end of the query in seconds. + :type end: int + :param metric_query: The metric query. + :type metric_query: str, optional + :param event_query: A query that adds event bands to the graph. + :type event_query: str, optional + :param graph_def: A JSON document defining the graph. ``graph_def`` can be used instead of ``metric_query``. + The JSON document uses the `grammar defined here `_ + and should be formatted to a single line then URL encoded. + :type graph_def: str, optional + :param title: A title for the graph. If no title is specified, the graph does not have a title. + :type title: str, optional + :param height: The height of the graph. If no height is specified, the graph's original height is used. + :type height: int, optional + :param width: The width of the graph. If no width is specified, the graph's original width is used. + :type width: int, optional + :rtype: GraphSnapshot + """ + kwargs: Dict[str, Any] = {} + if metric_query is not unset: + kwargs["metric_query"] = metric_query + + kwargs["start"] = start + + kwargs["end"] = end + + if event_query is not unset: + kwargs["event_query"] = event_query + + if graph_def is not unset: + kwargs["graph_def"] = graph_def + + if title is not unset: + kwargs["title"] = title + + if height is not unset: + kwargs["height"] = height + + if width is not unset: + kwargs["width"] = width + + return self._get_graph_snapshot_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/synthetics_api.py b/datadog_api_client/v1/api/synthetics_api.py new file mode 100644 index 0000000000..c68e308a55 --- /dev/null +++ b/datadog_api_client/v1/api/synthetics_api.py @@ -0,0 +1,1547 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.synthetics_batch_details import SyntheticsBatchDetails +from datadog_api_client.v1.model.synthetics_locations import SyntheticsLocations +from datadog_api_client.v1.model.synthetics_private_location_creation_response import SyntheticsPrivateLocationCreationResponse +from datadog_api_client.v1.model.synthetics_private_location import SyntheticsPrivateLocation +from datadog_api_client.v1.model.synthetics_default_locations import SyntheticsDefaultLocations +from datadog_api_client.v1.model.synthetics_list_tests_response import SyntheticsListTestsResponse +from datadog_api_client.v1.model.synthetics_test_details_without_steps import SyntheticsTestDetailsWithoutSteps +from datadog_api_client.v1.model.synthetics_api_test import SyntheticsAPITest +from datadog_api_client.v1.model.synthetics_browser_test import SyntheticsBrowserTest +from datadog_api_client.v1.model.synthetics_get_browser_test_latest_results_response import SyntheticsGetBrowserTestLatestResultsResponse +from datadog_api_client.v1.model.synthetics_browser_test_result_full import SyntheticsBrowserTestResultFull +from datadog_api_client.v1.model.synthetics_delete_tests_response import SyntheticsDeleteTestsResponse +from datadog_api_client.v1.model.synthetics_delete_tests_payload import SyntheticsDeleteTestsPayload +from datadog_api_client.v1.model.synthetics_mobile_test import SyntheticsMobileTest +from datadog_api_client.v1.model.synthetics_trigger_ci_tests_response import SyntheticsTriggerCITestsResponse +from datadog_api_client.v1.model.synthetics_trigger_body import SyntheticsTriggerBody +from datadog_api_client.v1.model.synthetics_ci_test_body import SyntheticsCITestBody +from datadog_api_client.v1.model.synthetics_test_uptime import SyntheticsTestUptime +from datadog_api_client.v1.model.synthetics_fetch_uptimes_payload import SyntheticsFetchUptimesPayload +from datadog_api_client.v1.model.synthetics_test_details import SyntheticsTestDetails +from datadog_api_client.v1.model.synthetics_patch_test_body import SyntheticsPatchTestBody +from datadog_api_client.v1.model.synthetics_get_api_test_latest_results_response import SyntheticsGetAPITestLatestResultsResponse +from datadog_api_client.v1.model.synthetics_api_test_result_full import SyntheticsAPITestResultFull +from datadog_api_client.v1.model.synthetics_update_test_pause_status_payload import SyntheticsUpdateTestPauseStatusPayload +from datadog_api_client.v1.model.synthetics_list_global_variables_response import SyntheticsListGlobalVariablesResponse +from datadog_api_client.v1.model.synthetics_global_variable import SyntheticsGlobalVariable +from datadog_api_client.v1.model.synthetics_global_variable_request import SyntheticsGlobalVariableRequest + + +class SyntheticsApi: + """ + Synthetic tests use simulated requests and actions so you can monitor the availability and performance of systems and applications. Datadog supports the following types of synthetic tests: + + * `API tests `_ + * `Browser tests `_ + * `Network Path tests `_ + * `Mobile Application tests `_ + + You can use the Datadog API to create, manage, and organize tests and test suites programmatically. + + For more information, see the `Synthetic Monitoring documentation `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_global_variable_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsGlobalVariable,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/variables", + "operation_id": "create_global_variable", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsGlobalVariableRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_private_location_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsPrivateLocationCreationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/private-locations", + "operation_id": "create_private_location", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsPrivateLocation,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_synthetics_api_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsAPITest,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/api", + "operation_id": "create_synthetics_api_test", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsAPITest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_synthetics_browser_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsBrowserTest,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/browser", + "operation_id": "create_synthetics_browser_test", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsBrowserTest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_synthetics_mobile_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsMobileTest,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/mobile", + "operation_id": "create_synthetics_mobile_test", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsMobileTest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_global_variable_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/variables/{variable_id}", + "operation_id": "delete_global_variable", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "variable_id": { + "required": True, + "openapi_types": (str,), + "attribute": "variable_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_private_location_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/private-locations/{location_id}", + "operation_id": "delete_private_location", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "location_id": { + "required": True, + "openapi_types": (str,), + "attribute": "location_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_tests_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsDeleteTestsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/delete", + "operation_id": "delete_tests", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsDeleteTestsPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._edit_global_variable_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsGlobalVariable,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/variables/{variable_id}", + "operation_id": "edit_global_variable", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "variable_id": { + "required": True, + "openapi_types": (str,), + "attribute": "variable_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsGlobalVariableRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._fetch_uptimes_endpoint = _Endpoint( + settings={ + "response_type": ([SyntheticsTestUptime],), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/uptimes", + "operation_id": "fetch_uptimes", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsFetchUptimesPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_api_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsAPITest,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/api/{public_id}", + "operation_id": "get_api_test", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_api_test_latest_results_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsGetAPITestLatestResultsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/{public_id}/results", + "operation_id": "get_api_test_latest_results", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "from_ts": { + "openapi_types": (int,), + "attribute": "from_ts", + "location": "query", + }, + "to_ts": { + "openapi_types": (int,), + "attribute": "to_ts", + "location": "query", + }, + "probe_dc": { + "openapi_types": ([str],), + "attribute": "probe_dc", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_api_test_result_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsAPITestResultFull,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/{public_id}/results/{result_id}", + "operation_id": "get_api_test_result", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "result_id": { + "required": True, + "openapi_types": (str,), + "attribute": "result_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_browser_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsBrowserTest,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/browser/{public_id}", + "operation_id": "get_browser_test", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_browser_test_latest_results_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsGetBrowserTestLatestResultsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/browser/{public_id}/results", + "operation_id": "get_browser_test_latest_results", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "from_ts": { + "openapi_types": (int,), + "attribute": "from_ts", + "location": "query", + }, + "to_ts": { + "openapi_types": (int,), + "attribute": "to_ts", + "location": "query", + }, + "probe_dc": { + "openapi_types": ([str],), + "attribute": "probe_dc", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_browser_test_result_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsBrowserTestResultFull,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/browser/{public_id}/results/{result_id}", + "operation_id": "get_browser_test_result", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "result_id": { + "required": True, + "openapi_types": (str,), + "attribute": "result_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_global_variable_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsGlobalVariable,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/variables/{variable_id}", + "operation_id": "get_global_variable", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "variable_id": { + "required": True, + "openapi_types": (str,), + "attribute": "variable_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_mobile_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsMobileTest,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/mobile/{public_id}", + "operation_id": "get_mobile_test", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_private_location_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsPrivateLocation,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/private-locations/{location_id}", + "operation_id": "get_private_location", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "location_id": { + "required": True, + "openapi_types": (str,), + "attribute": "location_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_synthetics_ci_batch_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsBatchDetails,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/ci/batch/{batch_id}", + "operation_id": "get_synthetics_ci_batch", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "batch_id": { + "required": True, + "openapi_types": (str,), + "attribute": "batch_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_synthetics_default_locations_endpoint = _Endpoint( + settings={ + "response_type": ([str],), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/synthetics/settings/default_locations", + "operation_id": "get_synthetics_default_locations", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestDetailsWithoutSteps,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/{public_id}", + "operation_id": "get_test", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_global_variables_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsListGlobalVariablesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/variables", + "operation_id": "list_global_variables", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_locations_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsLocations,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/locations", + "operation_id": "list_locations", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tests_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsListTestsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests", + "operation_id": "list_tests", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page_size", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page_number", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._patch_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestDetails,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/{public_id}", + "operation_id": "patch_test", + "http_method": "PATCH", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsPatchTestBody,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_tests_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsListTestsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/search", + "operation_id": "search_tests", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "text": { + "openapi_types": (str,), + "attribute": "text", + "location": "query", + }, + "include_full_config": { + "openapi_types": (bool,), + "attribute": "include_full_config", + "location": "query", + }, + "facets_only": { + "openapi_types": (bool,), + "attribute": "facets_only", + "location": "query", + }, + "start": { + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "count": { + "openapi_types": (int,), + "attribute": "count", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._trigger_ci_tests_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTriggerCITestsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/trigger/ci", + "operation_id": "trigger_ci_tests", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsCITestBody,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._trigger_tests_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTriggerCITestsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/trigger", + "operation_id": "trigger_tests", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsTriggerBody,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_api_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsAPITest,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/api/{public_id}", + "operation_id": "update_api_test", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsAPITest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_browser_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsBrowserTest,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/browser/{public_id}", + "operation_id": "update_browser_test", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsBrowserTest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_mobile_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsMobileTest,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/mobile/{public_id}", + "operation_id": "update_mobile_test", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsMobileTest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_private_location_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsPrivateLocation,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/private-locations/{location_id}", + "operation_id": "update_private_location", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "location_id": { + "required": True, + "openapi_types": (str,), + "attribute": "location_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsPrivateLocation,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_test_pause_status_endpoint = _Endpoint( + settings={ + "response_type": (bool,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/synthetics/tests/{public_id}/status", + "operation_id": "update_test_pause_status", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsUpdateTestPauseStatusPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_global_variable(self, body: SyntheticsGlobalVariableRequest, ) -> SyntheticsGlobalVariable: + """Create a global variable. + + Create a Synthetic global variable. + + :param body: Details of the global variable to create. + :type body: SyntheticsGlobalVariableRequest + :rtype: SyntheticsGlobalVariable + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_global_variable_endpoint.call_with_http_info(**kwargs) + + def create_private_location(self, body: SyntheticsPrivateLocation, ) -> SyntheticsPrivateLocationCreationResponse: + """Create a private location. + + Create a new Synthetic private location. + + :param body: Details of the private location to create. + :type body: SyntheticsPrivateLocation + :rtype: SyntheticsPrivateLocationCreationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_private_location_endpoint.call_with_http_info(**kwargs) + + def create_synthetics_api_test(self, body: SyntheticsAPITest, ) -> SyntheticsAPITest: + """Create an API test. + + Create a Synthetic API test. + + :param body: Details of the test to create. + :type body: SyntheticsAPITest + :rtype: SyntheticsAPITest + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_synthetics_api_test_endpoint.call_with_http_info(**kwargs) + + def create_synthetics_browser_test(self, body: SyntheticsBrowserTest, ) -> SyntheticsBrowserTest: + """Create a browser test. + + Create a Synthetic browser test. + + :param body: Details of the test to create. + :type body: SyntheticsBrowserTest + :rtype: SyntheticsBrowserTest + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_synthetics_browser_test_endpoint.call_with_http_info(**kwargs) + + def create_synthetics_mobile_test(self, body: SyntheticsMobileTest, ) -> SyntheticsMobileTest: + """Create a mobile test. + + Create a Synthetic mobile test. + + :param body: Details of the test to create. + :type body: SyntheticsMobileTest + :rtype: SyntheticsMobileTest + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_synthetics_mobile_test_endpoint.call_with_http_info(**kwargs) + + def delete_global_variable(self, variable_id: str, ) -> None: + """Delete a global variable. + + Delete a Synthetic global variable. + + :param variable_id: The ID of the global variable. + :type variable_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["variable_id"] = variable_id + + return self._delete_global_variable_endpoint.call_with_http_info(**kwargs) + + def delete_private_location(self, location_id: str, ) -> None: + """Delete a private location. + + Delete a Synthetic private location. + + :param location_id: The ID of the private location. + :type location_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["location_id"] = location_id + + return self._delete_private_location_endpoint.call_with_http_info(**kwargs) + + def delete_tests(self, body: SyntheticsDeleteTestsPayload, ) -> SyntheticsDeleteTestsResponse: + """Delete tests. + + Delete multiple Synthetic tests by ID. + + :param body: Public ID list of the Synthetic tests to be deleted. + :type body: SyntheticsDeleteTestsPayload + :rtype: SyntheticsDeleteTestsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_tests_endpoint.call_with_http_info(**kwargs) + + def edit_global_variable(self, variable_id: str, body: SyntheticsGlobalVariableRequest, ) -> SyntheticsGlobalVariable: + """Edit a global variable. + + Edit a Synthetic global variable. + + :param variable_id: The ID of the global variable. + :type variable_id: str + :param body: Details of the global variable to update. + :type body: SyntheticsGlobalVariableRequest + :rtype: SyntheticsGlobalVariable + """ + kwargs: Dict[str, Any] = {} + kwargs["variable_id"] = variable_id + + kwargs["body"] = body + + return self._edit_global_variable_endpoint.call_with_http_info(**kwargs) + + def fetch_uptimes(self, body: SyntheticsFetchUptimesPayload, ) -> List[SyntheticsTestUptime]: + """Fetch uptime for multiple tests. + + Fetch uptime for multiple Synthetic tests by ID. + + :param body: Public ID list of the Synthetic tests and timeframe. + :type body: SyntheticsFetchUptimesPayload + :rtype: [SyntheticsTestUptime] + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._fetch_uptimes_endpoint.call_with_http_info(**kwargs) + + def get_api_test(self, public_id: str, ) -> SyntheticsAPITest: + """Get an API test. + + Get the detailed configuration associated with + a Synthetic API test. + + :param public_id: The public ID of the test to get details from. + :type public_id: str + :rtype: SyntheticsAPITest + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_api_test_endpoint.call_with_http_info(**kwargs) + + def get_api_test_latest_results(self, public_id: str, *, from_ts: Union[int, UnsetType]=unset, to_ts: Union[int, UnsetType]=unset, probe_dc: Union[List[str], UnsetType]=unset, ) -> SyntheticsGetAPITestLatestResultsResponse: + """Get an API test's latest results summaries. + + Get the last 150 test results summaries for a given Synthetic API test. + + :param public_id: The public ID of the test for which to search results for. + :type public_id: str + :param from_ts: Timestamp in milliseconds from which to start querying results. + :type from_ts: int, optional + :param to_ts: Timestamp in milliseconds up to which to query results. + :type to_ts: int, optional + :param probe_dc: Locations for which to query results. + :type probe_dc: [str], optional + :rtype: SyntheticsGetAPITestLatestResultsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + if from_ts is not unset: + kwargs["from_ts"] = from_ts + + if to_ts is not unset: + kwargs["to_ts"] = to_ts + + if probe_dc is not unset: + kwargs["probe_dc"] = probe_dc + + return self._get_api_test_latest_results_endpoint.call_with_http_info(**kwargs) + + def get_api_test_result(self, public_id: str, result_id: str, ) -> SyntheticsAPITestResultFull: + """Get an API test result. + + Get a specific full result from a given Synthetic API test. + + :param public_id: The public ID of the API test to which the target result belongs. + :type public_id: str + :param result_id: The ID of the result to get. + :type result_id: str + :rtype: SyntheticsAPITestResultFull + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["result_id"] = result_id + + return self._get_api_test_result_endpoint.call_with_http_info(**kwargs) + + def get_browser_test(self, public_id: str, ) -> SyntheticsBrowserTest: + """Get a browser test. + + Get the detailed configuration (including steps) associated with + a Synthetic browser test. + + :param public_id: The public ID of the test to get details from. + :type public_id: str + :rtype: SyntheticsBrowserTest + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_browser_test_endpoint.call_with_http_info(**kwargs) + + def get_browser_test_latest_results(self, public_id: str, *, from_ts: Union[int, UnsetType]=unset, to_ts: Union[int, UnsetType]=unset, probe_dc: Union[List[str], UnsetType]=unset, ) -> SyntheticsGetBrowserTestLatestResultsResponse: + """Get a browser test's latest results summaries. + + Get the last 150 test results summaries for a given Synthetic browser test. + + :param public_id: The public ID of the browser test for which to search results + for. + :type public_id: str + :param from_ts: Timestamp in milliseconds from which to start querying results. + :type from_ts: int, optional + :param to_ts: Timestamp in milliseconds up to which to query results. + :type to_ts: int, optional + :param probe_dc: Locations for which to query results. + :type probe_dc: [str], optional + :rtype: SyntheticsGetBrowserTestLatestResultsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + if from_ts is not unset: + kwargs["from_ts"] = from_ts + + if to_ts is not unset: + kwargs["to_ts"] = to_ts + + if probe_dc is not unset: + kwargs["probe_dc"] = probe_dc + + return self._get_browser_test_latest_results_endpoint.call_with_http_info(**kwargs) + + def get_browser_test_result(self, public_id: str, result_id: str, ) -> SyntheticsBrowserTestResultFull: + """Get a browser test result. + + Get a specific full result from a given Synthetic browser test. + + :param public_id: The public ID of the browser test to which the target result + belongs. + :type public_id: str + :param result_id: The ID of the result to get. + :type result_id: str + :rtype: SyntheticsBrowserTestResultFull + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["result_id"] = result_id + + return self._get_browser_test_result_endpoint.call_with_http_info(**kwargs) + + def get_global_variable(self, variable_id: str, ) -> SyntheticsGlobalVariable: + """Get a global variable. + + Get the detailed configuration of a global variable. + + :param variable_id: The ID of the global variable. + :type variable_id: str + :rtype: SyntheticsGlobalVariable + """ + kwargs: Dict[str, Any] = {} + kwargs["variable_id"] = variable_id + + return self._get_global_variable_endpoint.call_with_http_info(**kwargs) + + def get_mobile_test(self, public_id: str, ) -> SyntheticsMobileTest: + """Get a mobile test. + + Get the detailed configuration associated with + a Synthetic mobile test. + + :param public_id: The public ID of the test to get details from. + :type public_id: str + :rtype: SyntheticsMobileTest + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_mobile_test_endpoint.call_with_http_info(**kwargs) + + def get_private_location(self, location_id: str, ) -> SyntheticsPrivateLocation: + """Get a private location. + + Get a Synthetic private location. + + :param location_id: The ID of the private location. + :type location_id: str + :rtype: SyntheticsPrivateLocation + """ + kwargs: Dict[str, Any] = {} + kwargs["location_id"] = location_id + + return self._get_private_location_endpoint.call_with_http_info(**kwargs) + + def get_synthetics_ci_batch(self, batch_id: str, ) -> SyntheticsBatchDetails: + """Get details of batch. + + Get a batch's updated details. + + :param batch_id: The ID of the batch. + :type batch_id: str + :rtype: SyntheticsBatchDetails + """ + kwargs: Dict[str, Any] = {} + kwargs["batch_id"] = batch_id + + return self._get_synthetics_ci_batch_endpoint.call_with_http_info(**kwargs) + + def get_synthetics_default_locations(self, ) -> List[str]: + """Get the default locations. + + Get the default locations settings. + + :rtype: [str] + """ + kwargs: Dict[str, Any] = {} + return self._get_synthetics_default_locations_endpoint.call_with_http_info(**kwargs) + + def get_test(self, public_id: str, ) -> SyntheticsTestDetailsWithoutSteps: + """Get a test configuration. + + Get the detailed configuration associated with a Synthetic test. + + :param public_id: The public ID of the test to get details from. + :type public_id: str + :rtype: SyntheticsTestDetailsWithoutSteps + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_test_endpoint.call_with_http_info(**kwargs) + + def list_global_variables(self, ) -> SyntheticsListGlobalVariablesResponse: + """Get all global variables. + + Get the list of all Synthetic global variables. + + :rtype: SyntheticsListGlobalVariablesResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_global_variables_endpoint.call_with_http_info(**kwargs) + + def list_locations(self, ) -> SyntheticsLocations: + """Get all locations (public and private). + + Get the list of public and private locations available for Synthetic + tests. No arguments required. + + :rtype: SyntheticsLocations + """ + kwargs: Dict[str, Any] = {} + return self._list_locations_endpoint.call_with_http_info(**kwargs) + + def list_tests(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> SyntheticsListTestsResponse: + """Get the list of all Synthetic tests. + + Get the list of all Synthetic tests. + + :param page_size: Used for pagination. The number of tests returned in the page. + :type page_size: int, optional + :param page_number: Used for pagination. Which page you want to retrieve. Starts at zero. + :type page_number: int, optional + :rtype: SyntheticsListTestsResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_tests_endpoint.call_with_http_info(**kwargs) + + def list_tests_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[SyntheticsTestDetailsWithoutSteps]: + """Get the list of all Synthetic tests. + + Provide a paginated version of :meth:`list_tests`, returning all items. + + :param page_size: Used for pagination. The number of tests returned in the page. + :type page_size: int, optional + :param page_number: Used for pagination. Which page you want to retrieve. Starts at zero. + :type page_number: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[SyntheticsTestDetailsWithoutSteps] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + local_page_size = get_attribute_from_path(kwargs, "page_size", 100) + endpoint = self._list_tests_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "tests", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def patch_test(self, public_id: str, body: SyntheticsPatchTestBody, ) -> SyntheticsTestDetails: + """Patch a Synthetic test. + + Patch the configuration of a Synthetic test with partial data. + + :param public_id: The public ID of the test to patch. + :type public_id: str + :param body: `JSON Patch `_ compliant list of operations + :type body: SyntheticsPatchTestBody + :rtype: SyntheticsTestDetails + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._patch_test_endpoint.call_with_http_info(**kwargs) + + def search_tests(self, *, text: Union[str, UnsetType]=unset, include_full_config: Union[bool, UnsetType]=unset, facets_only: Union[bool, UnsetType]=unset, start: Union[int, UnsetType]=unset, count: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, ) -> SyntheticsListTestsResponse: + """Search Synthetic tests. + + Search for Synthetic tests. + + :param text: The search query. + :type text: str, optional + :param include_full_config: If true, include the full configuration for each test in the response. + :type include_full_config: bool, optional + :param facets_only: If true, return only facets instead of full test details. + :type facets_only: bool, optional + :param start: The offset from which to start returning results. + :type start: int, optional + :param count: The maximum number of results to return. + :type count: int, optional + :param sort: The sort order for the results (e.g., ``name,asc`` or ``name,desc`` ). + :type sort: str, optional + :rtype: SyntheticsListTestsResponse + """ + kwargs: Dict[str, Any] = {} + if text is not unset: + kwargs["text"] = text + + if include_full_config is not unset: + kwargs["include_full_config"] = include_full_config + + if facets_only is not unset: + kwargs["facets_only"] = facets_only + + if start is not unset: + kwargs["start"] = start + + if count is not unset: + kwargs["count"] = count + + if sort is not unset: + kwargs["sort"] = sort + + return self._search_tests_endpoint.call_with_http_info(**kwargs) + + def trigger_ci_tests(self, body: SyntheticsCITestBody, ) -> SyntheticsTriggerCITestsResponse: + """Trigger tests from CI/CD pipelines. + + Trigger a set of Synthetic tests for continuous integration. + + :param body: Details of the test to trigger. + :type body: SyntheticsCITestBody + :rtype: SyntheticsTriggerCITestsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._trigger_ci_tests_endpoint.call_with_http_info(**kwargs) + + def trigger_tests(self, body: SyntheticsTriggerBody, ) -> SyntheticsTriggerCITestsResponse: + """Trigger Synthetic tests. + + Trigger a set of Synthetic tests. + + :param body: The identifiers of the tests to trigger. + :type body: SyntheticsTriggerBody + :rtype: SyntheticsTriggerCITestsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._trigger_tests_endpoint.call_with_http_info(**kwargs) + + def update_api_test(self, public_id: str, body: SyntheticsAPITest, ) -> SyntheticsAPITest: + """Edit an API test. + + Edit the configuration of a Synthetic API test. + + :param public_id: The public ID of the test to get details from. + :type public_id: str + :param body: New test details to be saved. + :type body: SyntheticsAPITest + :rtype: SyntheticsAPITest + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._update_api_test_endpoint.call_with_http_info(**kwargs) + + def update_browser_test(self, public_id: str, body: SyntheticsBrowserTest, ) -> SyntheticsBrowserTest: + """Edit a browser test. + + Edit the configuration of a Synthetic browser test. + + :param public_id: The public ID of the test to edit. + :type public_id: str + :param body: New test details to be saved. + :type body: SyntheticsBrowserTest + :rtype: SyntheticsBrowserTest + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._update_browser_test_endpoint.call_with_http_info(**kwargs) + + def update_mobile_test(self, public_id: str, body: SyntheticsMobileTest, ) -> SyntheticsMobileTest: + """Edit a mobile test. + + Edit the configuration of a Synthetic mobile test. + + :param public_id: The public ID of the test to get details from. + :type public_id: str + :param body: New test details to be saved. + :type body: SyntheticsMobileTest + :rtype: SyntheticsMobileTest + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._update_mobile_test_endpoint.call_with_http_info(**kwargs) + + def update_private_location(self, location_id: str, body: SyntheticsPrivateLocation, ) -> SyntheticsPrivateLocation: + """Edit a private location. + + Edit a Synthetic private location. + + :param location_id: The ID of the private location. + :type location_id: str + :param body: Details of the private location to be updated. + :type body: SyntheticsPrivateLocation + :rtype: SyntheticsPrivateLocation + """ + kwargs: Dict[str, Any] = {} + kwargs["location_id"] = location_id + + kwargs["body"] = body + + return self._update_private_location_endpoint.call_with_http_info(**kwargs) + + def update_test_pause_status(self, public_id: str, body: SyntheticsUpdateTestPauseStatusPayload, ) -> bool: + """Pause or start a test. + + Pause or start a Synthetic test by changing the status. + + :param public_id: The public ID of the Synthetic test to update. + :type public_id: str + :param body: Status to set the given Synthetic test to. + :type body: SyntheticsUpdateTestPauseStatusPayload + :rtype: bool + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._update_test_pause_status_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/tags_api.py b/datadog_api_client/v1/api/tags_api.py new file mode 100644 index 0000000000..20cee8d716 --- /dev/null +++ b/datadog_api_client/v1/api/tags_api.py @@ -0,0 +1,292 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.tag_to_hosts import TagToHosts +from datadog_api_client.v1.model.host_tags import HostTags + + +class TagsApi: + """ + The tag endpoint allows you to assign tags to hosts, + for example: ``role:database``. Those tags are applied to + all metrics sent by the host. Refer to hosts by name + ( ``yourhost.example.com`` ) when fetching and applying + tags to a particular host. + + The component of your infrastructure responsible for a tag is identified + by a source. For example, some valid sources include nagios, hudson, jenkins, + users, feed, chef, puppet, git, bitbucket, fabric, capistrano, etc. Find a complete list of source type names under `API Source Attributes `_. + + Read more about tags on `Getting Started with Tags `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_host_tags_endpoint = _Endpoint( + settings={ + "response_type": (HostTags,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/tags/hosts/{host_name}", + "operation_id": "create_host_tags", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "host_name": { + "required": True, + "openapi_types": (str,), + "attribute": "host_name", + "location": "path", + }, + "source": { + "openapi_types": (str,), + "attribute": "source", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (HostTags,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_host_tags_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/tags/hosts/{host_name}", + "operation_id": "delete_host_tags", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "host_name": { + "required": True, + "openapi_types": (str,), + "attribute": "host_name", + "location": "path", + }, + "source": { + "openapi_types": (str,), + "attribute": "source", + "location": "query", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_host_tags_endpoint = _Endpoint( + settings={ + "response_type": (HostTags,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/tags/hosts/{host_name}", + "operation_id": "get_host_tags", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "host_name": { + "required": True, + "openapi_types": (str,), + "attribute": "host_name", + "location": "path", + }, + "source": { + "openapi_types": (str,), + "attribute": "source", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_host_tags_endpoint = _Endpoint( + settings={ + "response_type": (TagToHosts,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/tags/hosts", + "operation_id": "list_host_tags", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "source": { + "openapi_types": (str,), + "attribute": "source", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_host_tags_endpoint = _Endpoint( + settings={ + "response_type": (HostTags,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/tags/hosts/{host_name}", + "operation_id": "update_host_tags", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "host_name": { + "required": True, + "openapi_types": (str,), + "attribute": "host_name", + "location": "path", + }, + "source": { + "openapi_types": (str,), + "attribute": "source", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (HostTags,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_host_tags(self, host_name: str, body: HostTags, *, source: Union[str, UnsetType]=unset, ) -> HostTags: + """Add tags to a host. + + This endpoint allows you to add new tags to a host, + optionally specifying what source these tags come from. If tags already exist, appends new tags to the tag list. If no source is specified, defaults to "user". + + :param host_name: Specified host name to add new tags + :type host_name: str + :param body: Update host tags request body. + :type body: HostTags + :param source: Source to add tags. `Complete list of source attribute values `_. Use "user" source for custom-defined tags. If no source is specified, defaults to "user". + :type source: str, optional + :rtype: HostTags + """ + kwargs: Dict[str, Any] = {} + kwargs["host_name"] = host_name + + if source is not unset: + kwargs["source"] = source + + kwargs["body"] = body + + return self._create_host_tags_endpoint.call_with_http_info(**kwargs) + + def delete_host_tags(self, host_name: str, *, source: Union[str, UnsetType]=unset, ) -> None: + """Remove host tags. + + This endpoint allows you to remove all tags + for a single host. If no source is specified, only deletes from the source "User". + + :param host_name: Specified host name to delete tags + :type host_name: str + :param source: Source of the tags to be deleted. `Complete list of source attribute values `_. Use "user" source for custom-defined tags. + :type source: str, optional + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["host_name"] = host_name + + if source is not unset: + kwargs["source"] = source + + return self._delete_host_tags_endpoint.call_with_http_info(**kwargs) + + def get_host_tags(self, host_name: str, *, source: Union[str, UnsetType]=unset, ) -> HostTags: + """Get Host Tags. + + Return the list of tags that apply to a given host. + + :param host_name: Name of the host to retrieve tags for + :type host_name: str + :param source: Source to filter. `Complete list of source attribute values `_. Use "user" source for custom-defined tags. + :type source: str, optional + :rtype: HostTags + """ + kwargs: Dict[str, Any] = {} + kwargs["host_name"] = host_name + + if source is not unset: + kwargs["source"] = source + + return self._get_host_tags_endpoint.call_with_http_info(**kwargs) + + def list_host_tags(self, *, source: Union[str, UnsetType]=unset, ) -> TagToHosts: + """Get All Host Tags. + + Returns a mapping of tags to hosts. For each tag, the response returns a list of host names that contain this tag. There is a restriction of 10k total host names from the org that can be attached to tags and returned. + + :param source: Source to filter. `Complete list of source attribute values `_. Use "user" source for custom-defined tags. + :type source: str, optional + :rtype: TagToHosts + """ + kwargs: Dict[str, Any] = {} + if source is not unset: + kwargs["source"] = source + + return self._list_host_tags_endpoint.call_with_http_info(**kwargs) + + def update_host_tags(self, host_name: str, body: HostTags, *, source: Union[str, UnsetType]=unset, ) -> HostTags: + """Update host tags. + + This endpoint allows you to update/replace all tags in + an integration source with those supplied in the request. + + :param host_name: Specified host name to change tags + :type host_name: str + :param body: Add tags to host + :type body: HostTags + :param source: Source to update tags. `Complete list of source attribute values `_. Use "user" source for custom-defined tags. If no source specified, defaults to "user". + :type source: str, optional + :rtype: HostTags + """ + kwargs: Dict[str, Any] = {} + kwargs["host_name"] = host_name + + if source is not unset: + kwargs["source"] = source + + kwargs["body"] = body + + return self._update_host_tags_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/usage_metering_api.py b/datadog_api_client/v1/api/usage_metering_api.py new file mode 100644 index 0000000000..d4fe32731a --- /dev/null +++ b/datadog_api_client/v1/api/usage_metering_api.py @@ -0,0 +1,2152 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.usage_custom_reports_response import UsageCustomReportsResponse +from datadog_api_client.v1.model.usage_sort_direction import UsageSortDirection +from datadog_api_client.v1.model.usage_sort import UsageSort +from datadog_api_client.v1.model.usage_specified_custom_reports_response import UsageSpecifiedCustomReportsResponse +from datadog_api_client.v1.model.usage_analyzed_logs_response import UsageAnalyzedLogsResponse +from datadog_api_client.v1.model.usage_audit_logs_response import UsageAuditLogsResponse +from datadog_api_client.v1.model.usage_lambda_response import UsageLambdaResponse +from datadog_api_client.v1.model.usage_billable_summary_response import UsageBillableSummaryResponse +from datadog_api_client.v1.model.usage_ci_visibility_response import UsageCIVisibilityResponse +from datadog_api_client.v1.model.usage_cloud_security_posture_management_response import UsageCloudSecurityPostureManagementResponse +from datadog_api_client.v1.model.usage_cws_response import UsageCWSResponse +from datadog_api_client.v1.model.usage_dbm_response import UsageDBMResponse +from datadog_api_client.v1.model.usage_fargate_response import UsageFargateResponse +from datadog_api_client.v1.model.usage_hosts_response import UsageHostsResponse +from datadog_api_client.v1.model.hourly_usage_attribution_response import HourlyUsageAttributionResponse +from datadog_api_client.v1.model.hourly_usage_attribution_usage_type import HourlyUsageAttributionUsageType +from datadog_api_client.v1.model.usage_incident_management_response import UsageIncidentManagementResponse +from datadog_api_client.v1.model.usage_indexed_spans_response import UsageIndexedSpansResponse +from datadog_api_client.v1.model.usage_ingested_spans_response import UsageIngestedSpansResponse +from datadog_api_client.v1.model.usage_iot_response import UsageIoTResponse +from datadog_api_client.v1.model.usage_logs_response import UsageLogsResponse +from datadog_api_client.v1.model.usage_logs_by_retention_response import UsageLogsByRetentionResponse +from datadog_api_client.v1.model.usage_logs_by_index_response import UsageLogsByIndexResponse +from datadog_api_client.v1.model.monthly_usage_attribution_response import MonthlyUsageAttributionResponse +from datadog_api_client.v1.model.monthly_usage_attribution_supported_metrics import MonthlyUsageAttributionSupportedMetrics +from datadog_api_client.v1.model.usage_network_flows_response import UsageNetworkFlowsResponse +from datadog_api_client.v1.model.usage_network_hosts_response import UsageNetworkHostsResponse +from datadog_api_client.v1.model.usage_online_archive_response import UsageOnlineArchiveResponse +from datadog_api_client.v1.model.usage_profiling_response import UsageProfilingResponse +from datadog_api_client.v1.model.usage_rum_units_response import UsageRumUnitsResponse +from datadog_api_client.v1.model.usage_rum_sessions_response import UsageRumSessionsResponse +from datadog_api_client.v1.model.usage_sds_response import UsageSDSResponse +from datadog_api_client.v1.model.usage_snmp_response import UsageSNMPResponse +from datadog_api_client.v1.model.usage_summary_response import UsageSummaryResponse +from datadog_api_client.v1.model.usage_synthetics_response import UsageSyntheticsResponse +from datadog_api_client.v1.model.usage_synthetics_api_response import UsageSyntheticsAPIResponse +from datadog_api_client.v1.model.usage_synthetics_browser_response import UsageSyntheticsBrowserResponse +from datadog_api_client.v1.model.usage_timeseries_response import UsageTimeseriesResponse +from datadog_api_client.v1.model.usage_top_avg_metrics_response import UsageTopAvgMetricsResponse + + +class UsageMeteringApi: + """ + The usage metering API allows you to get hourly, daily, and + monthly usage across multiple facets of Datadog. + This API is available to all Pro and Enterprise customers. + + **Note** : Usage data is delayed by up to 72 hours from when it was incurred. + It is retained for 15 months. + + You can retrieve up to 24 hours of hourly usage data for multiple organizations, + and up to two months of hourly usage data for a single organization in one request. + Learn more on the `usage details documentation `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_daily_custom_reports_endpoint = _Endpoint( + settings={ + "response_type": (UsageCustomReportsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/daily_custom_reports", + "operation_id": "get_daily_custom_reports", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort_dir": { + "openapi_types": (UsageSortDirection,), + "attribute": "sort_dir", + "location": "query", + }, + "sort": { + "openapi_types": (UsageSort,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_hourly_usage_attribution_endpoint = _Endpoint( + settings={ + "response_type": (HourlyUsageAttributionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/hourly-attribution", + "operation_id": "get_hourly_usage_attribution", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + "usage_type": { + "required": True, + "openapi_types": (HourlyUsageAttributionUsageType,), + "attribute": "usage_type", + "location": "query", + }, + "next_record_id": { + "openapi_types": (str,), + "attribute": "next_record_id", + "location": "query", + }, + "tag_breakdown_keys": { + "openapi_types": (str,), + "attribute": "tag_breakdown_keys", + "location": "query", + }, + "include_descendants": { + "openapi_types": (bool,), + "attribute": "include_descendants", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_incident_management_endpoint = _Endpoint( + settings={ + "response_type": (UsageIncidentManagementResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/incident-management", + "operation_id": "get_incident_management", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_ingested_spans_endpoint = _Endpoint( + settings={ + "response_type": (UsageIngestedSpansResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/ingested-spans", + "operation_id": "get_ingested_spans", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_monthly_custom_reports_endpoint = _Endpoint( + settings={ + "response_type": (UsageCustomReportsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/monthly_custom_reports", + "operation_id": "get_monthly_custom_reports", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort_dir": { + "openapi_types": (UsageSortDirection,), + "attribute": "sort_dir", + "location": "query", + }, + "sort": { + "openapi_types": (UsageSort,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_monthly_usage_attribution_endpoint = _Endpoint( + settings={ + "response_type": (MonthlyUsageAttributionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/monthly-attribution", + "operation_id": "get_monthly_usage_attribution", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_month": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_month", + "location": "query", + }, + "end_month": { + "openapi_types": (datetime,), + "attribute": "end_month", + "location": "query", + }, + "fields": { + "required": True, + "openapi_types": (MonthlyUsageAttributionSupportedMetrics,), + "attribute": "fields", + "location": "query", + }, + "sort_direction": { + "openapi_types": (UsageSortDirection,), + "attribute": "sort_direction", + "location": "query", + }, + "sort_name": { + "openapi_types": (MonthlyUsageAttributionSupportedMetrics,), + "attribute": "sort_name", + "location": "query", + }, + "tag_breakdown_keys": { + "openapi_types": (str,), + "attribute": "tag_breakdown_keys", + "location": "query", + }, + "next_record_id": { + "openapi_types": (str,), + "attribute": "next_record_id", + "location": "query", + }, + "include_descendants": { + "openapi_types": (bool,), + "attribute": "include_descendants", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_specified_daily_custom_reports_endpoint = _Endpoint( + settings={ + "response_type": (UsageSpecifiedCustomReportsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/daily_custom_reports/{report_id}", + "operation_id": "get_specified_daily_custom_reports", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "report_id": { + "required": True, + "openapi_types": (str,), + "attribute": "report_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_specified_monthly_custom_reports_endpoint = _Endpoint( + settings={ + "response_type": (UsageSpecifiedCustomReportsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/monthly_custom_reports/{report_id}", + "operation_id": "get_specified_monthly_custom_reports", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "report_id": { + "required": True, + "openapi_types": (str,), + "attribute": "report_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_analyzed_logs_endpoint = _Endpoint( + settings={ + "response_type": (UsageAnalyzedLogsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/analyzed_logs", + "operation_id": "get_usage_analyzed_logs", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_audit_logs_endpoint = _Endpoint( + settings={ + "response_type": (UsageAuditLogsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/audit_logs", + "operation_id": "get_usage_audit_logs", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_billable_summary_endpoint = _Endpoint( + settings={ + "response_type": (UsageBillableSummaryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/billable-summary", + "operation_id": "get_usage_billable_summary", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "month": { + "openapi_types": (datetime,), + "attribute": "month", + "location": "query", + }, + "include_connected_accounts": { + "openapi_types": (bool,), + "attribute": "include_connected_accounts", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_ci_app_endpoint = _Endpoint( + settings={ + "response_type": (UsageCIVisibilityResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/ci-app", + "operation_id": "get_usage_ci_app", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_cloud_security_posture_management_endpoint = _Endpoint( + settings={ + "response_type": (UsageCloudSecurityPostureManagementResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/cspm", + "operation_id": "get_usage_cloud_security_posture_management", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_cws_endpoint = _Endpoint( + settings={ + "response_type": (UsageCWSResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/cws", + "operation_id": "get_usage_cws", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_dbm_endpoint = _Endpoint( + settings={ + "response_type": (UsageDBMResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/dbm", + "operation_id": "get_usage_dbm", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_fargate_endpoint = _Endpoint( + settings={ + "response_type": (UsageFargateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/fargate", + "operation_id": "get_usage_fargate", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_hosts_endpoint = _Endpoint( + settings={ + "response_type": (UsageHostsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/hosts", + "operation_id": "get_usage_hosts", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_indexed_spans_endpoint = _Endpoint( + settings={ + "response_type": (UsageIndexedSpansResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/indexed-spans", + "operation_id": "get_usage_indexed_spans", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_internet_of_things_endpoint = _Endpoint( + settings={ + "response_type": (UsageIoTResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/iot", + "operation_id": "get_usage_internet_of_things", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_lambda_endpoint = _Endpoint( + settings={ + "response_type": (UsageLambdaResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/aws_lambda", + "operation_id": "get_usage_lambda", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_logs_endpoint = _Endpoint( + settings={ + "response_type": (UsageLogsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/logs", + "operation_id": "get_usage_logs", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_logs_by_index_endpoint = _Endpoint( + settings={ + "response_type": (UsageLogsByIndexResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/logs_by_index", + "operation_id": "get_usage_logs_by_index", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + "index_name": { + "openapi_types": ([str],), + "attribute": "index_name", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_logs_by_retention_endpoint = _Endpoint( + settings={ + "response_type": (UsageLogsByRetentionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/logs-by-retention", + "operation_id": "get_usage_logs_by_retention", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_network_flows_endpoint = _Endpoint( + settings={ + "response_type": (UsageNetworkFlowsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/network_flows", + "operation_id": "get_usage_network_flows", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_network_hosts_endpoint = _Endpoint( + settings={ + "response_type": (UsageNetworkHostsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/network_hosts", + "operation_id": "get_usage_network_hosts", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_online_archive_endpoint = _Endpoint( + settings={ + "response_type": (UsageOnlineArchiveResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/online-archive", + "operation_id": "get_usage_online_archive", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_profiling_endpoint = _Endpoint( + settings={ + "response_type": (UsageProfilingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/profiling", + "operation_id": "get_usage_profiling", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_rum_sessions_endpoint = _Endpoint( + settings={ + "response_type": (UsageRumSessionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/rum_sessions", + "operation_id": "get_usage_rum_sessions", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + "type": { + "openapi_types": (str,), + "attribute": "type", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_rum_units_endpoint = _Endpoint( + settings={ + "response_type": (UsageRumUnitsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/rum", + "operation_id": "get_usage_rum_units", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_sds_endpoint = _Endpoint( + settings={ + "response_type": (UsageSDSResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/sds", + "operation_id": "get_usage_sds", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_snmp_endpoint = _Endpoint( + settings={ + "response_type": (UsageSNMPResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/snmp", + "operation_id": "get_usage_snmp", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_summary_endpoint = _Endpoint( + settings={ + "response_type": (UsageSummaryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/summary", + "operation_id": "get_usage_summary", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_month": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_month", + "location": "query", + }, + "end_month": { + "openapi_types": (datetime,), + "attribute": "end_month", + "location": "query", + }, + "include_org_details": { + "openapi_types": (bool,), + "attribute": "include_org_details", + "location": "query", + }, + "include_connected_accounts": { + "openapi_types": (bool,), + "attribute": "include_connected_accounts", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_synthetics_endpoint = _Endpoint( + settings={ + "response_type": (UsageSyntheticsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/synthetics", + "operation_id": "get_usage_synthetics", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_synthetics_api_endpoint = _Endpoint( + settings={ + "response_type": (UsageSyntheticsAPIResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/synthetics_api", + "operation_id": "get_usage_synthetics_api", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_synthetics_browser_endpoint = _Endpoint( + settings={ + "response_type": (UsageSyntheticsBrowserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/synthetics_browser", + "operation_id": "get_usage_synthetics_browser", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_timeseries_endpoint = _Endpoint( + settings={ + "response_type": (UsageTimeseriesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/timeseries", + "operation_id": "get_usage_timeseries", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_top_avg_metrics_endpoint = _Endpoint( + settings={ + "response_type": (UsageTopAvgMetricsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/usage/top_avg_metrics", + "operation_id": "get_usage_top_avg_metrics", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "month": { + "openapi_types": (datetime,), + "attribute": "month", + "location": "query", + }, + "day": { + "openapi_types": (datetime,), + "attribute": "day", + "location": "query", + }, + "names": { + "openapi_types": ([str],), + "attribute": "names", + "location": "query", + "collection_format": "multi", + }, + "limit": { + "validation": { + "inclusive_maximum": 5000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "next_record_id": { + "openapi_types": (str,), + "attribute": "next_record_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + def get_daily_custom_reports(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort_dir: Union[UsageSortDirection, UnsetType]=unset, sort: Union[UsageSort, UnsetType]=unset, ) -> UsageCustomReportsResponse: + """Get the list of available daily custom reports. **Deprecated**. + + Get daily custom reports. + **Note:** This endpoint will be fully deprecated on December 1, 2022. + Refer to `Migrating from v1 to v2 of the Usage Attribution API `_ for the associated migration guide. + + :param page_size: The number of files to return in the response. ``[default=60]``. + :type page_size: int, optional + :param page_number: The identifier of the first page to return. This parameter is used for the pagination feature ``[default=0]``. + :type page_number: int, optional + :param sort_dir: The direction to sort by: ``[desc, asc]``. + :type sort_dir: UsageSortDirection, optional + :param sort: The field to sort by: ``[computed_on, size, start_date, end_date]``. + :type sort: UsageSort, optional + :rtype: UsageCustomReportsResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort_dir is not unset: + kwargs["sort_dir"] = sort_dir + + if sort is not unset: + kwargs["sort"] = sort + + warnings.warn("get_daily_custom_reports is deprecated", DeprecationWarning, stacklevel=2) + return self._get_daily_custom_reports_endpoint.call_with_http_info(**kwargs) + + def get_hourly_usage_attribution(self, start_hr: datetime, usage_type: HourlyUsageAttributionUsageType, *, end_hr: Union[datetime, UnsetType]=unset, next_record_id: Union[str, UnsetType]=unset, tag_breakdown_keys: Union[str, UnsetType]=unset, include_descendants: Union[bool, UnsetType]=unset, ) -> HourlyUsageAttributionResponse: + """Get hourly usage attribution. + + Get hourly usage attribution. Multi-region data is available starting March 1, 2023. + + This API endpoint is paginated. To make sure you receive all records, check if the value of ``next_record_id`` is + set in the response. If it is, make another request and pass ``next_record_id`` as a parameter. + Pseudo code example: + + .. code-block:: + + response := GetHourlyUsageAttribution(start_month) + cursor := response.metadata.pagination.next_record_id + WHILE cursor != null BEGIN + sleep(5 seconds) # Avoid running into rate limit + response := GetHourlyUsageAttribution(start_month, next_record_id=cursor) + cursor := response.metadata.pagination.next_record_id + END + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param usage_type: Usage type to retrieve. Usage types are in the format ``_usage``. + Example: ``infra_host_usage`` + To obtain the complete list of active usage types that can be used to replace + ```` in the field names, make a request to the `Get usage attribution types API `_. + :type usage_type: HourlyUsageAttributionUsageType + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :param next_record_id: List following results with a next_record_id provided in the previous query. + :type next_record_id: str, optional + :param tag_breakdown_keys: Comma separated list of tags used to group usage. If no value is provided the usage will not be broken down by tags. + + To see which tags are available, look for the value of ``tag_config_source`` in the API response. + :type tag_breakdown_keys: str, optional + :param include_descendants: Include child org usage in the response. Defaults to ``true``. + :type include_descendants: bool, optional + :rtype: HourlyUsageAttributionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + kwargs["usage_type"] = usage_type + + if next_record_id is not unset: + kwargs["next_record_id"] = next_record_id + + if tag_breakdown_keys is not unset: + kwargs["tag_breakdown_keys"] = tag_breakdown_keys + + if include_descendants is not unset: + kwargs["include_descendants"] = include_descendants + + return self._get_hourly_usage_attribution_endpoint.call_with_http_info(**kwargs) + + def get_incident_management(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageIncidentManagementResponse: + """Get hourly usage for incident management. **Deprecated**. + + Get hourly usage for incident management. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageIncidentManagementResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_incident_management is deprecated", DeprecationWarning, stacklevel=2) + return self._get_incident_management_endpoint.call_with_http_info(**kwargs) + + def get_ingested_spans(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageIngestedSpansResponse: + """Get hourly usage for ingested spans. **Deprecated**. + + Get hourly usage for ingested spans. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageIngestedSpansResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_ingested_spans is deprecated", DeprecationWarning, stacklevel=2) + return self._get_ingested_spans_endpoint.call_with_http_info(**kwargs) + + def get_monthly_custom_reports(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort_dir: Union[UsageSortDirection, UnsetType]=unset, sort: Union[UsageSort, UnsetType]=unset, ) -> UsageCustomReportsResponse: + """Get the list of available monthly custom reports. **Deprecated**. + + Get monthly custom reports. + **Note:** This endpoint will be fully deprecated on December 1, 2022. + Refer to `Migrating from v1 to v2 of the Usage Attribution API `_ for the associated migration guide. + + :param page_size: The number of files to return in the response ``[default=60].`` + :type page_size: int, optional + :param page_number: The identifier of the first page to return. This parameter is used for the pagination feature ``[default=0]``. + :type page_number: int, optional + :param sort_dir: The direction to sort by: ``[desc, asc]``. + :type sort_dir: UsageSortDirection, optional + :param sort: The field to sort by: ``[computed_on, size, start_date, end_date]``. + :type sort: UsageSort, optional + :rtype: UsageCustomReportsResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort_dir is not unset: + kwargs["sort_dir"] = sort_dir + + if sort is not unset: + kwargs["sort"] = sort + + warnings.warn("get_monthly_custom_reports is deprecated", DeprecationWarning, stacklevel=2) + return self._get_monthly_custom_reports_endpoint.call_with_http_info(**kwargs) + + def get_monthly_usage_attribution(self, start_month: datetime, fields: MonthlyUsageAttributionSupportedMetrics, *, end_month: Union[datetime, UnsetType]=unset, sort_direction: Union[UsageSortDirection, UnsetType]=unset, sort_name: Union[MonthlyUsageAttributionSupportedMetrics, UnsetType]=unset, tag_breakdown_keys: Union[str, UnsetType]=unset, next_record_id: Union[str, UnsetType]=unset, include_descendants: Union[bool, UnsetType]=unset, ) -> MonthlyUsageAttributionResponse: + """Get monthly usage attribution. + + Get monthly usage attribution. Multi-region data is available starting March 1, 2023. + + This API endpoint is paginated. To make sure you receive all records, check if the value of ``next_record_id`` is + set in the response. If it is, make another request and pass ``next_record_id`` as a parameter. + Pseudo code example: + + .. code-block:: + + response := GetMonthlyUsageAttribution(start_month) + cursor := response.metadata.pagination.next_record_id + WHILE cursor != null BEGIN + sleep(5 seconds) # Avoid running into rate limit + response := GetMonthlyUsageAttribution(start_month, next_record_id=cursor) + cursor := response.metadata.pagination.next_record_id + END + + :param start_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for usage beginning in this month. + Maximum of 15 months ago. + :type start_month: datetime + :param fields: Comma-separated list of usage types to return, or ``*`` for all usage types. + Usage types are in the format ``_usage`` and ``_percentage``. + Example: ``infra_host_usage,infra_host_percentage`` + To obtain the complete list of usage attribution types that can be used to replace + ```` in the field names, make a request to the `Get usage attribution types API `_. + :type fields: MonthlyUsageAttributionSupportedMetrics + :param end_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for usage ending this month. + :type end_month: datetime, optional + :param sort_direction: The direction to sort by: ``[desc, asc]``. + :type sort_direction: UsageSortDirection, optional + :param sort_name: The field to sort by. Sort fields are in the format ``_usage``. + Example: ``infra_host_usage`` + To obtain the complete list of usage attribution types that can be used to replace + ```` in the field names, make a request to the `Get usage attribution types API `_. + :type sort_name: MonthlyUsageAttributionSupportedMetrics, optional + :param tag_breakdown_keys: Comma separated list of tag keys used to group usage. If no value is provided the usage will not be broken down by tags. + + To see which tags are available, look for the value of ``tag_config_source`` in the API response. + :type tag_breakdown_keys: str, optional + :param next_record_id: List following results with a next_record_id provided in the previous query. + :type next_record_id: str, optional + :param include_descendants: Include child org usage in the response. Defaults to ``true``. + :type include_descendants: bool, optional + :rtype: MonthlyUsageAttributionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_month"] = start_month + + if end_month is not unset: + kwargs["end_month"] = end_month + + kwargs["fields"] = fields + + if sort_direction is not unset: + kwargs["sort_direction"] = sort_direction + + if sort_name is not unset: + kwargs["sort_name"] = sort_name + + if tag_breakdown_keys is not unset: + kwargs["tag_breakdown_keys"] = tag_breakdown_keys + + if next_record_id is not unset: + kwargs["next_record_id"] = next_record_id + + if include_descendants is not unset: + kwargs["include_descendants"] = include_descendants + + return self._get_monthly_usage_attribution_endpoint.call_with_http_info(**kwargs) + + def get_specified_daily_custom_reports(self, report_id: str, ) -> UsageSpecifiedCustomReportsResponse: + """Get specified daily custom reports. **Deprecated**. + + Get specified daily custom reports. + **Note:** This endpoint will be fully deprecated on December 1, 2022. + Refer to `Migrating from v1 to v2 of the Usage Attribution API `_ for the associated migration guide. + + :param report_id: Date of the report in the format ``YYYY-MM-DD``. + :type report_id: str + :rtype: UsageSpecifiedCustomReportsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["report_id"] = report_id + + warnings.warn("get_specified_daily_custom_reports is deprecated", DeprecationWarning, stacklevel=2) + return self._get_specified_daily_custom_reports_endpoint.call_with_http_info(**kwargs) + + def get_specified_monthly_custom_reports(self, report_id: str, ) -> UsageSpecifiedCustomReportsResponse: + """Get specified monthly custom reports. **Deprecated**. + + Get specified monthly custom reports. + **Note:** This endpoint will be fully deprecated on December 1, 2022. + Refer to `Migrating from v1 to v2 of the Usage Attribution API `_ for the associated migration guide. + + :param report_id: Date of the report in the format ``YYYY-MM-DD``. + :type report_id: str + :rtype: UsageSpecifiedCustomReportsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["report_id"] = report_id + + warnings.warn("get_specified_monthly_custom_reports is deprecated", DeprecationWarning, stacklevel=2) + return self._get_specified_monthly_custom_reports_endpoint.call_with_http_info(**kwargs) + + def get_usage_analyzed_logs(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageAnalyzedLogsResponse: + """Get hourly usage for analyzed logs. **Deprecated**. + + Get hourly usage for analyzed logs (Security Monitoring). + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageAnalyzedLogsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_analyzed_logs is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_analyzed_logs_endpoint.call_with_http_info(**kwargs) + + def get_usage_audit_logs(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageAuditLogsResponse: + """Get hourly usage for audit logs. **Deprecated**. + + Get hourly usage for audit logs. + **Note:** This endpoint has been deprecated. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageAuditLogsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_audit_logs is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_audit_logs_endpoint.call_with_http_info(**kwargs) + + def get_usage_billable_summary(self, *, month: Union[datetime, UnsetType]=unset, include_connected_accounts: Union[bool, UnsetType]=unset, ) -> UsageBillableSummaryResponse: + """Get billable usage across your account. + + Get billable usage across your account. + + This endpoint is only accessible for `parent-level organizations `_. + + :param month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for usage starting this month. + :type month: datetime, optional + :param include_connected_accounts: Boolean to specify whether to include accounts connected to the current account as partner customers in the Datadog partner network program. Defaults to ``false``. + :type include_connected_accounts: bool, optional + :rtype: UsageBillableSummaryResponse + """ + kwargs: Dict[str, Any] = {} + if month is not unset: + kwargs["month"] = month + + if include_connected_accounts is not unset: + kwargs["include_connected_accounts"] = include_connected_accounts + + return self._get_usage_billable_summary_endpoint.call_with_http_info(**kwargs) + + def get_usage_ci_app(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageCIVisibilityResponse: + """Get hourly usage for CI visibility. **Deprecated**. + + Get hourly usage for CI visibility (tests, pipeline, and spans). + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageCIVisibilityResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_ci_app is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_ci_app_endpoint.call_with_http_info(**kwargs) + + def get_usage_cloud_security_posture_management(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageCloudSecurityPostureManagementResponse: + """Get hourly usage for CSM Pro. **Deprecated**. + + Get hourly usage for cloud security management (CSM) pro. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageCloudSecurityPostureManagementResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_cloud_security_posture_management is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_cloud_security_posture_management_endpoint.call_with_http_info(**kwargs) + + def get_usage_cws(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageCWSResponse: + """Get hourly usage for cloud workload security. **Deprecated**. + + Get hourly usage for cloud workload security. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageCWSResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_cws is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_cws_endpoint.call_with_http_info(**kwargs) + + def get_usage_dbm(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageDBMResponse: + """Get hourly usage for database monitoring. **Deprecated**. + + Get hourly usage for database monitoring + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageDBMResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_dbm is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_dbm_endpoint.call_with_http_info(**kwargs) + + def get_usage_fargate(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageFargateResponse: + """Get hourly usage for Fargate. **Deprecated**. + + Get hourly usage for `Fargate `_. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageFargateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_fargate is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_fargate_endpoint.call_with_http_info(**kwargs) + + def get_usage_hosts(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageHostsResponse: + """Get hourly usage for hosts and containers. **Deprecated**. + + Get hourly usage for hosts and containers. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageHostsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_hosts is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_hosts_endpoint.call_with_http_info(**kwargs) + + def get_usage_indexed_spans(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageIndexedSpansResponse: + """Get hourly usage for indexed spans. **Deprecated**. + + Get hourly usage for indexed spans. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageIndexedSpansResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_indexed_spans is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_indexed_spans_endpoint.call_with_http_info(**kwargs) + + def get_usage_internet_of_things(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageIoTResponse: + """Get hourly usage for IoT. **Deprecated**. + + Get hourly usage for IoT. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageIoTResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_internet_of_things is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_internet_of_things_endpoint.call_with_http_info(**kwargs) + + def get_usage_lambda(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageLambdaResponse: + """Get hourly usage for Lambda. **Deprecated**. + + Get hourly usage for Lambda. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageLambdaResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_lambda is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_lambda_endpoint.call_with_http_info(**kwargs) + + def get_usage_logs(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageLogsResponse: + """Get hourly usage for logs. **Deprecated**. + + Get hourly usage for logs. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageLogsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_logs is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_logs_endpoint.call_with_http_info(**kwargs) + + def get_usage_logs_by_index(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, index_name: Union[List[str], UnsetType]=unset, ) -> UsageLogsByIndexResponse: + """Get hourly usage for logs by index. + + Get hourly usage for logs by index. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :param index_name: Comma-separated list of log index names. + :type index_name: [str], optional + :rtype: UsageLogsByIndexResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + if index_name is not unset: + kwargs["index_name"] = index_name + + return self._get_usage_logs_by_index_endpoint.call_with_http_info(**kwargs) + + def get_usage_logs_by_retention(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageLogsByRetentionResponse: + """Get hourly logs usage by retention. **Deprecated**. + + Get hourly usage for indexed logs by retention period. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageLogsByRetentionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_logs_by_retention is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_logs_by_retention_endpoint.call_with_http_info(**kwargs) + + def get_usage_network_flows(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageNetworkFlowsResponse: + """get hourly usage for network flows. **Deprecated**. + + Get hourly usage for network flows. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageNetworkFlowsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_network_flows is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_network_flows_endpoint.call_with_http_info(**kwargs) + + def get_usage_network_hosts(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageNetworkHostsResponse: + """Get hourly usage for network hosts. **Deprecated**. + + Get hourly usage for network hosts. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageNetworkHostsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_network_hosts is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_network_hosts_endpoint.call_with_http_info(**kwargs) + + def get_usage_online_archive(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageOnlineArchiveResponse: + """Get hourly usage for online archive. **Deprecated**. + + Get hourly usage for online archive. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageOnlineArchiveResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_online_archive is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_online_archive_endpoint.call_with_http_info(**kwargs) + + def get_usage_profiling(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageProfilingResponse: + """Get hourly usage for profiled hosts. **Deprecated**. + + Get hourly usage for profiled hosts. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageProfilingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_profiling is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_profiling_endpoint.call_with_http_info(**kwargs) + + def get_usage_rum_sessions(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, type: Union[str, UnsetType]=unset, ) -> UsageRumSessionsResponse: + """Get hourly usage for RUM sessions. **Deprecated**. + + Get hourly usage for `RUM `_ Sessions. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :param type: RUM type: ``[browser, mobile]``. Defaults to ``browser``. + :type type: str, optional + :rtype: UsageRumSessionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + if type is not unset: + kwargs["type"] = type + + warnings.warn("get_usage_rum_sessions is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_rum_sessions_endpoint.call_with_http_info(**kwargs) + + def get_usage_rum_units(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageRumUnitsResponse: + """Get hourly usage for RUM units. **Deprecated**. + + Get hourly usage for `RUM `_ Units. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageRumUnitsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_rum_units is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_rum_units_endpoint.call_with_http_info(**kwargs) + + def get_usage_sds(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageSDSResponse: + """Get hourly usage for sensitive data scanner. **Deprecated**. + + Get hourly usage for sensitive data scanner. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageSDSResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_sds is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_sds_endpoint.call_with_http_info(**kwargs) + + def get_usage_snmp(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageSNMPResponse: + """Get hourly usage for SNMP devices. **Deprecated**. + + Get hourly usage for SNMP devices. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageSNMPResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_snmp is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_snmp_endpoint.call_with_http_info(**kwargs) + + def get_usage_summary(self, start_month: datetime, *, end_month: Union[datetime, UnsetType]=unset, include_org_details: Union[bool, UnsetType]=unset, include_connected_accounts: Union[bool, UnsetType]=unset, ) -> UsageSummaryResponse: + """Get usage across your account. + + Get all usage across your account. + + For SDK users only: all fields on ``UsageSummaryResponse`` , ``UsageSummaryDate`` , and + ``UsageSummaryDateOrg`` are accessible through each object's ``additionalProperties`` map. + Existing typed-field getters are unchanged. New billing dimensions will not have + typed-field getters. Use + `Get available fields for usage summary `_ + to enumerate every available key at each response level. + + This endpoint is only accessible for `parent-level organizations `_. + + :param start_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for usage beginning in this month. + Maximum of 15 months ago. + :type start_month: datetime + :param end_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for usage ending this month. + :type end_month: datetime, optional + :param include_org_details: Include usage summaries for each sub-org. + :type include_org_details: bool, optional + :param include_connected_accounts: Boolean to specify whether to include accounts connected to the current account as partner customers in the Datadog partner network program. Defaults to ``false``. + :type include_connected_accounts: bool, optional + :rtype: UsageSummaryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_month"] = start_month + + if end_month is not unset: + kwargs["end_month"] = end_month + + if include_org_details is not unset: + kwargs["include_org_details"] = include_org_details + + if include_connected_accounts is not unset: + kwargs["include_connected_accounts"] = include_connected_accounts + + return self._get_usage_summary_endpoint.call_with_http_info(**kwargs) + + def get_usage_synthetics(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageSyntheticsResponse: + """Get hourly usage for synthetics checks. **Deprecated**. + + Get hourly usage for `synthetics checks `_. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageSyntheticsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_synthetics is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_synthetics_endpoint.call_with_http_info(**kwargs) + + def get_usage_synthetics_api(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageSyntheticsAPIResponse: + """Get hourly usage for synthetics API checks. **Deprecated**. + + Get hourly usage for `synthetics API checks `_. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageSyntheticsAPIResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_synthetics_api is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_synthetics_api_endpoint.call_with_http_info(**kwargs) + + def get_usage_synthetics_browser(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageSyntheticsBrowserResponse: + """Get hourly usage for synthetics browser checks. **Deprecated**. + + Get hourly usage for synthetics browser checks. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageSyntheticsBrowserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_synthetics_browser is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_synthetics_browser_endpoint.call_with_http_info(**kwargs) + + def get_usage_timeseries(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageTimeseriesResponse: + """Get hourly usage for custom metrics. **Deprecated**. + + Get hourly usage for `custom metrics `_. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_. Refer to `Migrating from the V1 Hourly Usage APIs to V2 `_ for the associated migration guide. + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageTimeseriesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_timeseries is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_timeseries_endpoint.call_with_http_info(**kwargs) + + def get_usage_top_avg_metrics(self, *, month: Union[datetime, UnsetType]=unset, day: Union[datetime, UnsetType]=unset, names: Union[List[str], UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_record_id: Union[str, UnsetType]=unset, ) -> UsageTopAvgMetricsResponse: + """Get all custom metrics by hourly average. + + Get all `custom metrics `_ by hourly average. Use the month parameter to get a month-to-date data resolution or use the day parameter to get a daily resolution. One of the two is required, and only one of the two is allowed. + + :param month: Datetime in ISO-8601 format, UTC, precise to month: [YYYY-MM] for usage beginning at this hour. (Either month or day should be specified, but not both) + :type month: datetime, optional + :param day: Datetime in ISO-8601 format, UTC, precise to day: [YYYY-MM-DD] for usage beginning at this hour. (Either month or day should be specified, but not both) + :type day: datetime, optional + :param names: Comma-separated list of metric names. + :type names: [str], optional + :param limit: Maximum number of results to return (between 1 and 5000) - defaults to 500 results if limit not specified. + :type limit: int, optional + :param next_record_id: List following results with a next_record_id provided in the previous query. + :type next_record_id: str, optional + :rtype: UsageTopAvgMetricsResponse + """ + kwargs: Dict[str, Any] = {} + if month is not unset: + kwargs["month"] = month + + if day is not unset: + kwargs["day"] = day + + if names is not unset: + kwargs["names"] = names + + if limit is not unset: + kwargs["limit"] = limit + + if next_record_id is not unset: + kwargs["next_record_id"] = next_record_id + + return self._get_usage_top_avg_metrics_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/users_api.py b/datadog_api_client/v1/api/users_api.py new file mode 100644 index 0000000000..935d56b39a --- /dev/null +++ b/datadog_api_client/v1/api/users_api.py @@ -0,0 +1,229 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.user_list_response import UserListResponse +from datadog_api_client.v1.model.user_response import UserResponse +from datadog_api_client.v1.model.user import User +from datadog_api_client.v1.model.user_disable_response import UserDisableResponse + + +class UsersApi: + """ + Create, edit, and disable users. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_user_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/user", + "operation_id": "create_user", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (User,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._disable_user_endpoint = _Endpoint( + settings={ + "response_type": (UserDisableResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/user/{user_handle}", + "operation_id": "disable_user", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "user_handle": { + "required": True, + "openapi_types": (str,), + "attribute": "user_handle", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_user_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/user/{user_handle}", + "operation_id": "get_user", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "user_handle": { + "required": True, + "openapi_types": (str,), + "attribute": "user_handle", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_users_endpoint = _Endpoint( + settings={ + "response_type": (UserListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/user", + "operation_id": "list_users", + "http_method": "GET", + "version": "v1", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_user_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/user/{user_handle}", + "operation_id": "update_user", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "user_handle": { + "required": True, + "openapi_types": (str,), + "attribute": "user_handle", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (User,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_user(self, body: User, ) -> UserResponse: + """Create a user. + + Create a user for your organization. + + **Note** : Users can only be created with the admin access role + if application keys belong to administrators. + + :param body: User object that needs to be created. + :type body: User + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_user_endpoint.call_with_http_info(**kwargs) + + def disable_user(self, user_handle: str, ) -> UserDisableResponse: + """Disable a user. + + Delete a user from an organization. + + **Note** : This endpoint can only be used with application keys belonging to + administrators. + + :param user_handle: The handle of the user. + :type user_handle: str + :rtype: UserDisableResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_handle"] = user_handle + + return self._disable_user_endpoint.call_with_http_info(**kwargs) + + def get_user(self, user_handle: str, ) -> UserResponse: + """Get user details. + + Get a user's details. + + :param user_handle: The ID of the user. + :type user_handle: str + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_handle"] = user_handle + + return self._get_user_endpoint.call_with_http_info(**kwargs) + + def list_users(self, ) -> UserListResponse: + """List all users. + + List all users for your organization. + + :rtype: UserListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_users_endpoint.call_with_http_info(**kwargs) + + def update_user(self, user_handle: str, body: User, ) -> UserResponse: + """Update a user. + + Update a user information. + + **Note** : It can only be used with application keys belonging to administrators. + + :param user_handle: The ID of the user. + :type user_handle: str + :param body: Description of the update. + :type body: User + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_handle"] = user_handle + + kwargs["body"] = body + + return self._update_user_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/api/webhooks_integration_api.py b/datadog_api_client/v1/api/webhooks_integration_api.py new file mode 100644 index 0000000000..9fdadff1ea --- /dev/null +++ b/datadog_api_client/v1/api/webhooks_integration_api.py @@ -0,0 +1,357 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v1.model.webhooks_integration_custom_variable_response import WebhooksIntegrationCustomVariableResponse +from datadog_api_client.v1.model.webhooks_integration_custom_variable import WebhooksIntegrationCustomVariable +from datadog_api_client.v1.model.webhooks_integration_custom_variable_update_request import WebhooksIntegrationCustomVariableUpdateRequest +from datadog_api_client.v1.model.webhooks_integration import WebhooksIntegration +from datadog_api_client.v1.model.webhooks_integration_update_request import WebhooksIntegrationUpdateRequest + + +class WebhooksIntegrationApi: + """ + Configure your Datadog-Webhooks integration directly through the Datadog API. + See the `Webhooks integration page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_webhooks_integration_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksIntegration,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v1/integration/webhooks/configuration/webhooks", + "operation_id": "create_webhooks_integration", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (WebhooksIntegration,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_webhooks_integration_custom_variable_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksIntegrationCustomVariableResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/webhooks/configuration/custom-variables", + "operation_id": "create_webhooks_integration_custom_variable", + "http_method": "POST", + "version": "v1", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (WebhooksIntegrationCustomVariable,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_webhooks_integration_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/webhooks/configuration/webhooks/{webhook_name}", + "operation_id": "delete_webhooks_integration", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "webhook_name": { + "required": True, + "openapi_types": (str,), + "attribute": "webhook_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_webhooks_integration_custom_variable_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/webhooks/configuration/custom-variables/{custom_variable_name}", + "operation_id": "delete_webhooks_integration_custom_variable", + "http_method": "DELETE", + "version": "v1", + }, + params_map={ + "custom_variable_name": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_variable_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_webhooks_integration_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksIntegration,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/webhooks/configuration/webhooks/{webhook_name}", + "operation_id": "get_webhooks_integration", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "webhook_name": { + "required": True, + "openapi_types": (str,), + "attribute": "webhook_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_webhooks_integration_custom_variable_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksIntegrationCustomVariableResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/webhooks/configuration/custom-variables/{custom_variable_name}", + "operation_id": "get_webhooks_integration_custom_variable", + "http_method": "GET", + "version": "v1", + }, + params_map={ + "custom_variable_name": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_variable_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_webhooks_integration_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksIntegration,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/webhooks/configuration/webhooks/{webhook_name}", + "operation_id": "update_webhooks_integration", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "webhook_name": { + "required": True, + "openapi_types": (str,), + "attribute": "webhook_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (WebhooksIntegrationUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_webhooks_integration_custom_variable_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksIntegrationCustomVariableResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v1/integration/webhooks/configuration/custom-variables/{custom_variable_name}", + "operation_id": "update_webhooks_integration_custom_variable", + "http_method": "PUT", + "version": "v1", + }, + params_map={ + "custom_variable_name": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_variable_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (WebhooksIntegrationCustomVariableUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_webhooks_integration(self, body: WebhooksIntegration, ) -> WebhooksIntegration: + """Create a webhooks integration. + + Creates an endpoint with the name ````. + + :param body: Create a webhooks integration request body. + :type body: WebhooksIntegration + :rtype: WebhooksIntegration + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_webhooks_integration_endpoint.call_with_http_info(**kwargs) + + def create_webhooks_integration_custom_variable(self, body: WebhooksIntegrationCustomVariable, ) -> WebhooksIntegrationCustomVariableResponse: + """Create a custom variable. + + Creates an endpoint with the name ````. + + :param body: Define a custom variable request body. + :type body: WebhooksIntegrationCustomVariable + :rtype: WebhooksIntegrationCustomVariableResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_webhooks_integration_custom_variable_endpoint.call_with_http_info(**kwargs) + + def delete_webhooks_integration(self, webhook_name: str, ) -> None: + """Delete a webhook. + + Deletes the endpoint with the name ````. This action cannot be undone. + + :param webhook_name: The name of the webhook. + :type webhook_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["webhook_name"] = webhook_name + + return self._delete_webhooks_integration_endpoint.call_with_http_info(**kwargs) + + def delete_webhooks_integration_custom_variable(self, custom_variable_name: str, ) -> None: + """Delete a custom variable. + + Deletes the endpoint with the name ````. + + :param custom_variable_name: The name of the custom variable. + :type custom_variable_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["custom_variable_name"] = custom_variable_name + + return self._delete_webhooks_integration_custom_variable_endpoint.call_with_http_info(**kwargs) + + def get_webhooks_integration(self, webhook_name: str, ) -> WebhooksIntegration: + """Get a webhook integration. + + Gets the content of the webhook with the name ````. + + :param webhook_name: The name of the webhook. + :type webhook_name: str + :rtype: WebhooksIntegration + """ + kwargs: Dict[str, Any] = {} + kwargs["webhook_name"] = webhook_name + + return self._get_webhooks_integration_endpoint.call_with_http_info(**kwargs) + + def get_webhooks_integration_custom_variable(self, custom_variable_name: str, ) -> WebhooksIntegrationCustomVariableResponse: + """Get a custom variable. + + Shows the content of the custom variable with the name ````. + + If the custom variable is secret, the value does not return in the + response payload. + + :param custom_variable_name: The name of the custom variable. + :type custom_variable_name: str + :rtype: WebhooksIntegrationCustomVariableResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["custom_variable_name"] = custom_variable_name + + return self._get_webhooks_integration_custom_variable_endpoint.call_with_http_info(**kwargs) + + def update_webhooks_integration(self, webhook_name: str, body: WebhooksIntegrationUpdateRequest, ) -> WebhooksIntegration: + """Update a webhook. + + Updates the endpoint with the name ````. + + :param webhook_name: The name of the webhook. + :type webhook_name: str + :param body: Update an existing Datadog-Webhooks integration. + :type body: WebhooksIntegrationUpdateRequest + :rtype: WebhooksIntegration + """ + kwargs: Dict[str, Any] = {} + kwargs["webhook_name"] = webhook_name + + kwargs["body"] = body + + return self._update_webhooks_integration_endpoint.call_with_http_info(**kwargs) + + def update_webhooks_integration_custom_variable(self, custom_variable_name: str, body: WebhooksIntegrationCustomVariableUpdateRequest, ) -> WebhooksIntegrationCustomVariableResponse: + """Update a custom variable. + + Updates the endpoint with the name ````. + + :param custom_variable_name: The name of the custom variable. + :type custom_variable_name: str + :param body: Update an existing custom variable request body. + :type body: WebhooksIntegrationCustomVariableUpdateRequest + :rtype: WebhooksIntegrationCustomVariableResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["custom_variable_name"] = custom_variable_name + + kwargs["body"] = body + + return self._update_webhooks_integration_custom_variable_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v1/apis/__init__.py b/datadog_api_client/v1/apis/__init__.py new file mode 100644 index 0000000000..2c82808429 --- /dev/null +++ b/datadog_api_client/v1/apis/__init__.py @@ -0,0 +1,67 @@ + +from datadog_api_client.v1.api.aws_integration_api import AWSIntegrationApi +from datadog_api_client.v1.api.aws_logs_integration_api import AWSLogsIntegrationApi +from datadog_api_client.v1.api.authentication_api import AuthenticationApi +from datadog_api_client.v1.api.azure_integration_api import AzureIntegrationApi +from datadog_api_client.v1.api.dashboard_lists_api import DashboardListsApi +from datadog_api_client.v1.api.dashboards_api import DashboardsApi +from datadog_api_client.v1.api.downtimes_api import DowntimesApi +from datadog_api_client.v1.api.events_api import EventsApi +from datadog_api_client.v1.api.gcp_integration_api import GCPIntegrationApi +from datadog_api_client.v1.api.hosts_api import HostsApi +from datadog_api_client.v1.api.ip_ranges_api import IPRangesApi +from datadog_api_client.v1.api.key_management_api import KeyManagementApi +from datadog_api_client.v1.api.logs_api import LogsApi +from datadog_api_client.v1.api.logs_indexes_api import LogsIndexesApi +from datadog_api_client.v1.api.logs_pipelines_api import LogsPipelinesApi +from datadog_api_client.v1.api.metrics_api import MetricsApi +from datadog_api_client.v1.api.monitors_api import MonitorsApi +from datadog_api_client.v1.api.notebooks_api import NotebooksApi +from datadog_api_client.v1.api.organizations_api import OrganizationsApi +from datadog_api_client.v1.api.pager_duty_integration_api import PagerDutyIntegrationApi +from datadog_api_client.v1.api.security_monitoring_api import SecurityMonitoringApi +from datadog_api_client.v1.api.service_checks_api import ServiceChecksApi +from datadog_api_client.v1.api.service_level_objective_corrections_api import ServiceLevelObjectiveCorrectionsApi +from datadog_api_client.v1.api.service_level_objectives_api import ServiceLevelObjectivesApi +from datadog_api_client.v1.api.slack_integration_api import SlackIntegrationApi +from datadog_api_client.v1.api.snapshots_api import SnapshotsApi +from datadog_api_client.v1.api.synthetics_api import SyntheticsApi +from datadog_api_client.v1.api.tags_api import TagsApi +from datadog_api_client.v1.api.usage_metering_api import UsageMeteringApi +from datadog_api_client.v1.api.users_api import UsersApi +from datadog_api_client.v1.api.webhooks_integration_api import WebhooksIntegrationApi + + +__all__ = [ + "AWSIntegrationApi", + "AWSLogsIntegrationApi", + "AuthenticationApi", + "AzureIntegrationApi", + "DashboardListsApi", + "DashboardsApi", + "DowntimesApi", + "EventsApi", + "GCPIntegrationApi", + "HostsApi", + "IPRangesApi", + "KeyManagementApi", + "LogsApi", + "LogsIndexesApi", + "LogsPipelinesApi", + "MetricsApi", + "MonitorsApi", + "NotebooksApi", + "OrganizationsApi", + "PagerDutyIntegrationApi", + "SecurityMonitoringApi", + "ServiceChecksApi", + "ServiceLevelObjectiveCorrectionsApi", + "ServiceLevelObjectivesApi", + "SlackIntegrationApi", + "SnapshotsApi", + "SyntheticsApi", + "TagsApi", + "UsageMeteringApi", + "UsersApi", + "WebhooksIntegrationApi", +] \ No newline at end of file diff --git a/datadog_api_client/v1/model/__init__.py b/datadog_api_client/v1/model/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/datadog_api_client/v1/model/access_role.py b/datadog_api_client/v1/model/access_role.py new file mode 100644 index 0000000000..7412a907d8 --- /dev/null +++ b/datadog_api_client/v1/model/access_role.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AccessRole(ModelSimple): + """ + The access role of the user. Options are **st** (standard user), **adm** (admin user), or **ro** (read-only user). + + :param value: Must be one of ["st", "adm", "ro", "ERROR"]. + :type value: str + """ + + allowed_values = { + "st", + "adm", + "ro", + "ERROR", + } + STANDARD: ClassVar["AccessRole"] + ADMIN: ClassVar["AccessRole"] + READ_ONLY: ClassVar["AccessRole"] + ERROR: ClassVar["AccessRole"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AccessRole.STANDARD = AccessRole("st") +AccessRole.ADMIN = AccessRole("adm") +AccessRole.READ_ONLY = AccessRole("ro") +AccessRole.ERROR = AccessRole("ERROR") diff --git a/datadog_api_client/v1/model/add_signal_to_incident_request.py b/datadog_api_client/v1/model/add_signal_to_incident_request.py new file mode 100644 index 0000000000..b6dd3c9c51 --- /dev/null +++ b/datadog_api_client/v1/model/add_signal_to_incident_request.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AddSignalToIncidentRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "add_to_signal_timeline": (bool,), + "incident_id": (int,), + "version": (int,), + } + attribute_map = { + "add_to_signal_timeline": "add_to_signal_timeline", + "incident_id": "incident_id", + "version": "version", + } + + def __init__(self_, incident_id: int, add_to_signal_timeline: Union[bool, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes describing which incident to add the signal to. + + :param add_to_signal_timeline: Whether to post the signal on the incident timeline. + :type add_to_signal_timeline: bool, optional + + :param incident_id: Public ID attribute of the incident to which the signal will be added. + :type incident_id: int + + :param version: Version of the updated signal. If server side version is higher, update will be rejected. + :type version: int, optional + """ + if add_to_signal_timeline is not unset: + kwargs["add_to_signal_timeline"] = add_to_signal_timeline + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.incident_id = incident_id diff --git a/datadog_api_client/v1/model/agent_check.py b/datadog_api_client/v1/model/agent_check.py new file mode 100644 index 0000000000..9e8e54a69d --- /dev/null +++ b/datadog_api_client/v1/model/agent_check.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AgentCheck(ModelSimple): + """ + Array of strings. + + + :type value: [bool, date, datetime, dict, float, int, list, str, UUID, none_type] + """ + + + + @cached_property + def openapi_types(_): + return { + "value": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + } diff --git a/datadog_api_client/v1/model/alert_graph_widget_definition.py b/datadog_api_client/v1/model/alert_graph_widget_definition.py new file mode 100644 index 0000000000..517788e941 --- /dev/null +++ b/datadog_api_client/v1/model/alert_graph_widget_definition.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.alert_graph_widget_definition_type import AlertGraphWidgetDefinitionType + from datadog_api_client.v1.model.widget_viz_type import WidgetVizType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class AlertGraphWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.alert_graph_widget_definition_type import AlertGraphWidgetDefinitionType + from datadog_api_client.v1.model.widget_viz_type import WidgetVizType + return { + "alert_id": (str,), + "description": (str,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (AlertGraphWidgetDefinitionType,), + "viz_type": (WidgetVizType,), + } + attribute_map = { + "alert_id": "alert_id", + "description": "description", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "viz_type": "viz_type", + } + + def __init__(self_, alert_id: str, type: AlertGraphWidgetDefinitionType, viz_type: WidgetVizType, description: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + Alert graphs are timeseries graphs showing the current status of any monitor defined on your system. + + :param alert_id: ID of the alert to use in the widget. + :type alert_id: str + + :param description: The description of the widget. + :type description: str, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: The title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the alert graph widget. + :type type: AlertGraphWidgetDefinitionType + + :param viz_type: Whether to display the Alert Graph as a timeseries or a top list. + :type viz_type: WidgetVizType + """ + if description is not unset: + kwargs["description"] = description + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.alert_id = alert_id + self_.type = type + self_.viz_type = viz_type diff --git a/datadog_api_client/v1/model/alert_graph_widget_definition_type.py b/datadog_api_client/v1/model/alert_graph_widget_definition_type.py new file mode 100644 index 0000000000..7f7fdce222 --- /dev/null +++ b/datadog_api_client/v1/model/alert_graph_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AlertGraphWidgetDefinitionType(ModelSimple): + """ + Type of the alert graph widget. + + :param value: If omitted defaults to "alert_graph". Must be one of ["alert_graph"]. + :type value: str + """ + + allowed_values = { + "alert_graph", + } + ALERT_GRAPH: ClassVar["AlertGraphWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AlertGraphWidgetDefinitionType.ALERT_GRAPH = AlertGraphWidgetDefinitionType("alert_graph") diff --git a/datadog_api_client/v1/model/alert_value_widget_definition.py b/datadog_api_client/v1/model/alert_value_widget_definition.py new file mode 100644 index 0000000000..8494c0d0bb --- /dev/null +++ b/datadog_api_client/v1/model/alert_value_widget_definition.py @@ -0,0 +1,105 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.alert_value_widget_definition_type import AlertValueWidgetDefinitionType + +class AlertValueWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.alert_value_widget_definition_type import AlertValueWidgetDefinitionType + return { + "alert_id": (str,), + "description": (str,), + "precision": (int,), + "text_align": (WidgetTextAlign,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (AlertValueWidgetDefinitionType,), + "unit": (str,), + } + attribute_map = { + "alert_id": "alert_id", + "description": "description", + "precision": "precision", + "text_align": "text_align", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "unit": "unit", + } + + def __init__(self_, alert_id: str, type: AlertValueWidgetDefinitionType, description: Union[str, UnsetType]=unset, precision: Union[int, UnsetType]=unset, text_align: Union[WidgetTextAlign, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, unit: Union[str, UnsetType]=unset, **kwargs): + """ + Alert values are query values showing the current value of the metric in any monitor defined on your system. + + :param alert_id: ID of the alert to use in the widget. + :type alert_id: str + + :param description: The description of the widget. + :type description: str, optional + + :param precision: Number of decimal to show. If not defined, will use the raw value. + :type precision: int, optional + + :param text_align: How to align the text on the widget. + :type text_align: WidgetTextAlign, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of value in the widget. + :type title_size: str, optional + + :param type: Type of the alert value widget. + :type type: AlertValueWidgetDefinitionType + + :param unit: Unit to display with the value. + :type unit: str, optional + """ + if description is not unset: + kwargs["description"] = description + if precision is not unset: + kwargs["precision"] = precision + if text_align is not unset: + kwargs["text_align"] = text_align + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + + self_.alert_id = alert_id + self_.type = type diff --git a/datadog_api_client/v1/model/alert_value_widget_definition_type.py b/datadog_api_client/v1/model/alert_value_widget_definition_type.py new file mode 100644 index 0000000000..88757f02b6 --- /dev/null +++ b/datadog_api_client/v1/model/alert_value_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AlertValueWidgetDefinitionType(ModelSimple): + """ + Type of the alert value widget. + + :param value: If omitted defaults to "alert_value". Must be one of ["alert_value"]. + :type value: str + """ + + allowed_values = { + "alert_value", + } + ALERT_VALUE: ClassVar["AlertValueWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AlertValueWidgetDefinitionType.ALERT_VALUE = AlertValueWidgetDefinitionType("alert_value") diff --git a/datadog_api_client/v1/model/api_error_response.py b/datadog_api_client/v1/model/api_error_response.py new file mode 100644 index 0000000000..e97283c486 --- /dev/null +++ b/datadog_api_client/v1/model/api_error_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class APIErrorResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "errors": ([str],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: List[str], **kwargs): + """ + Error response object. + + :param errors: Array of errors returned by the API. + :type errors: [str] + """ + super().__init__(kwargs) + + + self_.errors = errors diff --git a/datadog_api_client/v1/model/api_key.py b/datadog_api_client/v1/model/api_key.py new file mode 100644 index 0000000000..c65ecc23d9 --- /dev/null +++ b/datadog_api_client/v1/model/api_key.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApiKey(ModelNormal): + validations = { + "key": { + "max_length": 32, + "min_length": 32, + }, + } + @cached_property + def openapi_types(_): + return { + "created": (str,), + "created_by": (str,), + "key": (str,), + "name": (str,), + } + attribute_map = { + "created": "created", + "created_by": "created_by", + "key": "key", + "name": "name", + } + read_only_vars = { + "created", + "created_by", + "key", + } + + def __init__(self_, created: Union[str, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, key: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Datadog API key. + + :param created: Date of creation of the API key. + :type created: str, optional + + :param created_by: Datadog user handle that created the API key. + :type created_by: str, optional + + :param key: API key. + :type key: str, optional + + :param name: Name of your API key. + :type name: str, optional + """ + if created is not unset: + kwargs["created"] = created + if created_by is not unset: + kwargs["created_by"] = created_by + if key is not unset: + kwargs["key"] = key + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/api_key_list_response.py b/datadog_api_client/v1/model/api_key_list_response.py new file mode 100644 index 0000000000..6a7b2fde17 --- /dev/null +++ b/datadog_api_client/v1/model/api_key_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.api_key import ApiKey + +class ApiKeyListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.api_key import ApiKey + return { + "api_keys": ([ApiKey],), + } + attribute_map = { + "api_keys": "api_keys", + } + + def __init__(self_, api_keys: Union[List[ApiKey], UnsetType]=unset, **kwargs): + """ + List of API and application keys available for a given organization. + + :param api_keys: Array of API keys. + :type api_keys: [ApiKey], optional + """ + if api_keys is not unset: + kwargs["api_keys"] = api_keys + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/api_key_response.py b/datadog_api_client/v1/model/api_key_response.py new file mode 100644 index 0000000000..b15a5738b1 --- /dev/null +++ b/datadog_api_client/v1/model/api_key_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.api_key import ApiKey + +class ApiKeyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.api_key import ApiKey + return { + "api_key": (ApiKey,), + } + attribute_map = { + "api_key": "api_key", + } + + def __init__(self_, api_key: Union[ApiKey, UnsetType]=unset, **kwargs): + """ + An API key with its associated metadata. + + :param api_key: Datadog API key. + :type api_key: ApiKey, optional + """ + if api_key is not unset: + kwargs["api_key"] = api_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/apm_stats_query_column_type.py b/datadog_api_client/v1/model/apm_stats_query_column_type.py new file mode 100644 index 0000000000..eb82857427 --- /dev/null +++ b/datadog_api_client/v1/model/apm_stats_query_column_type.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.table_widget_cell_display_mode import TableWidgetCellDisplayMode + from datadog_api_client.v1.model.widget_sort import WidgetSort + +class ApmStatsQueryColumnType(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.table_widget_cell_display_mode import TableWidgetCellDisplayMode + from datadog_api_client.v1.model.widget_sort import WidgetSort + return { + "alias": (str,), + "cell_display_mode": (TableWidgetCellDisplayMode,), + "name": (str,), + "order": (WidgetSort,), + } + attribute_map = { + "alias": "alias", + "cell_display_mode": "cell_display_mode", + "name": "name", + "order": "order", + } + + def __init__(self_, name: str, alias: Union[str, UnsetType]=unset, cell_display_mode: Union[TableWidgetCellDisplayMode, UnsetType]=unset, order: Union[WidgetSort, UnsetType]=unset, **kwargs): + """ + Column properties. + + :param alias: A user-assigned alias for the column. + :type alias: str, optional + + :param cell_display_mode: Define a display mode for the table cell. + :type cell_display_mode: TableWidgetCellDisplayMode, optional + + :param name: Column name. + :type name: str + + :param order: Widget sorting methods. + :type order: WidgetSort, optional + """ + if alias is not unset: + kwargs["alias"] = alias + if cell_display_mode is not unset: + kwargs["cell_display_mode"] = cell_display_mode + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v1/model/apm_stats_query_definition.py b/datadog_api_client/v1/model/apm_stats_query_definition.py new file mode 100644 index 0000000000..fa3f4b62d3 --- /dev/null +++ b/datadog_api_client/v1/model/apm_stats_query_definition.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.apm_stats_query_column_type import ApmStatsQueryColumnType + from datadog_api_client.v1.model.apm_stats_query_row_type import ApmStatsQueryRowType + +class ApmStatsQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.apm_stats_query_column_type import ApmStatsQueryColumnType + from datadog_api_client.v1.model.apm_stats_query_row_type import ApmStatsQueryRowType + return { + "columns": ([ApmStatsQueryColumnType],), + "env": (str,), + "name": (str,), + "primary_tag": (str,), + "resource": (str,), + "row_type": (ApmStatsQueryRowType,), + "service": (str,), + } + attribute_map = { + "columns": "columns", + "env": "env", + "name": "name", + "primary_tag": "primary_tag", + "resource": "resource", + "row_type": "row_type", + "service": "service", + } + + def __init__(self_, env: str, name: str, primary_tag: str, row_type: ApmStatsQueryRowType, service: str, columns: Union[List[ApmStatsQueryColumnType], UnsetType]=unset, resource: Union[str, UnsetType]=unset, **kwargs): + """ + The APM stats query for table and distributions widgets. + + :param columns: Column properties used by the front end for display. + :type columns: [ApmStatsQueryColumnType], optional + + :param env: Environment name. + :type env: str + + :param name: Operation name associated with service. + :type name: str + + :param primary_tag: The organization's host group name and value. + :type primary_tag: str + + :param resource: Resource name. + :type resource: str, optional + + :param row_type: The level of detail for the request. + :type row_type: ApmStatsQueryRowType + + :param service: Service name. + :type service: str + """ + if columns is not unset: + kwargs["columns"] = columns + if resource is not unset: + kwargs["resource"] = resource + super().__init__(kwargs) + + + self_.env = env + self_.name = name + self_.primary_tag = primary_tag + self_.row_type = row_type + self_.service = service diff --git a/datadog_api_client/v1/model/apm_stats_query_row_type.py b/datadog_api_client/v1/model/apm_stats_query_row_type.py new file mode 100644 index 0000000000..e7968b34d9 --- /dev/null +++ b/datadog_api_client/v1/model/apm_stats_query_row_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApmStatsQueryRowType(ModelSimple): + """ + The level of detail for the request. + + :param value: Must be one of ["service", "resource", "span"]. + :type value: str + """ + + allowed_values = { + "service", + "resource", + "span", + } + SERVICE: ClassVar["ApmStatsQueryRowType"] + RESOURCE: ClassVar["ApmStatsQueryRowType"] + SPAN: ClassVar["ApmStatsQueryRowType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApmStatsQueryRowType.SERVICE = ApmStatsQueryRowType("service") +ApmStatsQueryRowType.RESOURCE = ApmStatsQueryRowType("resource") +ApmStatsQueryRowType.SPAN = ApmStatsQueryRowType("span") diff --git a/datadog_api_client/v1/model/application_key.py b/datadog_api_client/v1/model/application_key.py new file mode 100644 index 0000000000..f0faa0c048 --- /dev/null +++ b/datadog_api_client/v1/model/application_key.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationKey(ModelNormal): + validations = { + "hash": { + "max_length": 40, + "min_length": 40, + }, + } + @cached_property + def openapi_types(_): + return { + "hash": (str,), + "name": (str,), + "owner": (str,), + } + attribute_map = { + "hash": "hash", + "name": "name", + "owner": "owner", + } + read_only_vars = { + "hash", + "owner", + } + + def __init__(self_, hash: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, owner: Union[str, UnsetType]=unset, **kwargs): + """ + An application key with its associated metadata. + + :param hash: Hash of an application key. + :type hash: str, optional + + :param name: Name of an application key. + :type name: str, optional + + :param owner: Owner of an application key. + :type owner: str, optional + """ + if hash is not unset: + kwargs["hash"] = hash + if name is not unset: + kwargs["name"] = name + if owner is not unset: + kwargs["owner"] = owner + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/application_key_list_response.py b/datadog_api_client/v1/model/application_key_list_response.py new file mode 100644 index 0000000000..758431be0a --- /dev/null +++ b/datadog_api_client/v1/model/application_key_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.application_key import ApplicationKey + +class ApplicationKeyListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.application_key import ApplicationKey + return { + "application_keys": ([ApplicationKey],), + } + attribute_map = { + "application_keys": "application_keys", + } + + def __init__(self_, application_keys: Union[List[ApplicationKey], UnsetType]=unset, **kwargs): + """ + An application key response. + + :param application_keys: Array of application keys. + :type application_keys: [ApplicationKey], optional + """ + if application_keys is not unset: + kwargs["application_keys"] = application_keys + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/application_key_response.py b/datadog_api_client/v1/model/application_key_response.py new file mode 100644 index 0000000000..8211959411 --- /dev/null +++ b/datadog_api_client/v1/model/application_key_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.application_key import ApplicationKey + +class ApplicationKeyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.application_key import ApplicationKey + return { + "application_key": (ApplicationKey,), + } + attribute_map = { + "application_key": "application_key", + } + + def __init__(self_, application_key: Union[ApplicationKey, UnsetType]=unset, **kwargs): + """ + An application key response. + + :param application_key: An application key with its associated metadata. + :type application_key: ApplicationKey, optional + """ + if application_key is not unset: + kwargs["application_key"] = application_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/authentication_validation_response.py b/datadog_api_client/v1/model/authentication_validation_response.py new file mode 100644 index 0000000000..d66238697c --- /dev/null +++ b/datadog_api_client/v1/model/authentication_validation_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuthenticationValidationResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "valid": (bool,), + } + attribute_map = { + "valid": "valid", + } + read_only_vars = { + "valid", + } + + def __init__(self_, valid: Union[bool, UnsetType]=unset, **kwargs): + """ + Represent validation endpoint responses. + + :param valid: Return ``true`` if the authentication response is valid. + :type valid: bool, optional + """ + if valid is not unset: + kwargs["valid"] = valid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_account.py b/datadog_api_client/v1/model/aws_account.py new file mode 100644 index 0000000000..fdf101647c --- /dev/null +++ b/datadog_api_client/v1/model/aws_account.py @@ -0,0 +1,134 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSAccount(ModelNormal): + @cached_property + def openapi_types(_): + return { + "access_key_id": (str,), + "account_id": (str,), + "account_specific_namespace_rules": ({str: (bool,)},), + "cspm_resource_collection_enabled": (bool,), + "excluded_regions": ([str],), + "extended_resource_collection_enabled": (bool,), + "filter_tags": ([str],), + "host_tags": ([str],), + "metrics_collection_enabled": (bool,), + "resource_collection_enabled": (bool,), + "role_name": (str,), + "secret_access_key": (str,), + } + attribute_map = { + "access_key_id": "access_key_id", + "account_id": "account_id", + "account_specific_namespace_rules": "account_specific_namespace_rules", + "cspm_resource_collection_enabled": "cspm_resource_collection_enabled", + "excluded_regions": "excluded_regions", + "extended_resource_collection_enabled": "extended_resource_collection_enabled", + "filter_tags": "filter_tags", + "host_tags": "host_tags", + "metrics_collection_enabled": "metrics_collection_enabled", + "resource_collection_enabled": "resource_collection_enabled", + "role_name": "role_name", + "secret_access_key": "secret_access_key", + } + + def __init__(self_, access_key_id: Union[str, UnsetType]=unset, account_id: Union[str, UnsetType]=unset, account_specific_namespace_rules: Union[Dict[str, bool], UnsetType]=unset, cspm_resource_collection_enabled: Union[bool, UnsetType]=unset, excluded_regions: Union[List[str], UnsetType]=unset, extended_resource_collection_enabled: Union[bool, UnsetType]=unset, filter_tags: Union[List[str], UnsetType]=unset, host_tags: Union[List[str], UnsetType]=unset, metrics_collection_enabled: Union[bool, UnsetType]=unset, resource_collection_enabled: Union[bool, UnsetType]=unset, role_name: Union[str, UnsetType]=unset, secret_access_key: Union[str, UnsetType]=unset, **kwargs): + """ + Returns the AWS account associated with this integration. + + :param access_key_id: Your AWS access key ID. Only required if your AWS account is a GovCloud or China account. + :type access_key_id: str, optional + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str, optional + + :param account_specific_namespace_rules: An object (in the form ``{"namespace1":true/false, "namespace2":true/false}`` ) containing user-supplied overrides + for AWS namespace metric collection. **Important** : This field only contains namespaces explicitly configured through API calls, + not the comprehensive enabled or disabled status of all namespaces. If a namespace is absent from this field, it uses Datadog's + internal defaults (all namespaces enabled by default, except ``AWS/SQS`` , ``AWS/ElasticMapReduce`` , and ``AWS/Usage`` ). + For a complete view of all namespace statuses, use the V2 AWS Integration API instead. + :type account_specific_namespace_rules: {str: (bool,)}, optional + + :param cspm_resource_collection_enabled: Whether Datadog collects cloud security posture management resources from your AWS account. This includes additional resources not covered under the general ``resource_collection``. + :type cspm_resource_collection_enabled: bool, optional + + :param excluded_regions: An array of `AWS regions `_ + to exclude from metrics collection. + :type excluded_regions: [str], optional + + :param extended_resource_collection_enabled: Whether Datadog collects additional attributes and configuration information about the resources in your AWS account. Required for ``cspm_resource_collection``. + :type extended_resource_collection_enabled: bool, optional + + :param filter_tags: The array of EC2 tags (in the form ``key:value`` ) defines a filter that Datadog uses when collecting metrics from EC2. + Wildcards, such as ``?`` (for single characters) and ``*`` (for multiple characters) can also be used. + Only hosts that match one of the defined tags + will be imported into Datadog. The rest will be ignored. + Host matching a given tag can also be excluded by adding ``!`` before the tag. + For example, ``env:production,instance-type:c1.*,!region:us-east-1`` + :type filter_tags: [str], optional + + :param host_tags: Array of tags (in the form ``key:value`` ) to add to all hosts + and metrics reporting through this integration. + :type host_tags: [str], optional + + :param metrics_collection_enabled: Whether Datadog collects metrics for this AWS account. + :type metrics_collection_enabled: bool, optional + + :param resource_collection_enabled: Deprecated in favor of 'extended_resource_collection_enabled'. Whether Datadog collects a standard set of resources from your AWS account. **Deprecated**. + :type resource_collection_enabled: bool, optional + + :param role_name: Your Datadog role delegation name. + :type role_name: str, optional + + :param secret_access_key: Your AWS secret access key. Only required if your AWS account is a GovCloud or China account. + :type secret_access_key: str, optional + """ + if access_key_id is not unset: + kwargs["access_key_id"] = access_key_id + if account_id is not unset: + kwargs["account_id"] = account_id + if account_specific_namespace_rules is not unset: + kwargs["account_specific_namespace_rules"] = account_specific_namespace_rules + if cspm_resource_collection_enabled is not unset: + kwargs["cspm_resource_collection_enabled"] = cspm_resource_collection_enabled + if excluded_regions is not unset: + kwargs["excluded_regions"] = excluded_regions + if extended_resource_collection_enabled is not unset: + kwargs["extended_resource_collection_enabled"] = extended_resource_collection_enabled + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + if host_tags is not unset: + kwargs["host_tags"] = host_tags + if metrics_collection_enabled is not unset: + kwargs["metrics_collection_enabled"] = metrics_collection_enabled + if resource_collection_enabled is not unset: + kwargs["resource_collection_enabled"] = resource_collection_enabled + if role_name is not unset: + kwargs["role_name"] = role_name + if secret_access_key is not unset: + kwargs["secret_access_key"] = secret_access_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_account_and_lambda_request.py b/datadog_api_client/v1/model/aws_account_and_lambda_request.py new file mode 100644 index 0000000000..40d7f9f559 --- /dev/null +++ b/datadog_api_client/v1/model/aws_account_and_lambda_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSAccountAndLambdaRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "lambda_arn": (str,), + } + attribute_map = { + "account_id": "account_id", + "lambda_arn": "lambda_arn", + } + + def __init__(self_, account_id: str, lambda_arn: str, **kwargs): + """ + AWS account ID and Lambda ARN. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str + + :param lambda_arn: ARN of the Datadog Lambda created during the Datadog-Amazon Web services Log collection setup. + :type lambda_arn: str + """ + super().__init__(kwargs) + + + self_.account_id = account_id + self_.lambda_arn = lambda_arn diff --git a/datadog_api_client/v1/model/aws_account_create_response.py b/datadog_api_client/v1/model/aws_account_create_response.py new file mode 100644 index 0000000000..98fc9bae05 --- /dev/null +++ b/datadog_api_client/v1/model/aws_account_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSAccountCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "external_id": (str,), + } + attribute_map = { + "external_id": "external_id", + } + + def __init__(self_, external_id: Union[str, UnsetType]=unset, **kwargs): + """ + The Response returned by the AWS Create Account call. + + :param external_id: AWS external_id. + :type external_id: str, optional + """ + if external_id is not unset: + kwargs["external_id"] = external_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_account_delete_request.py b/datadog_api_client/v1/model/aws_account_delete_request.py new file mode 100644 index 0000000000..30e2a0a5be --- /dev/null +++ b/datadog_api_client/v1/model/aws_account_delete_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSAccountDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "access_key_id": (str,), + "account_id": (str,), + "role_name": (str,), + } + attribute_map = { + "access_key_id": "access_key_id", + "account_id": "account_id", + "role_name": "role_name", + } + + def __init__(self_, access_key_id: Union[str, UnsetType]=unset, account_id: Union[str, UnsetType]=unset, role_name: Union[str, UnsetType]=unset, **kwargs): + """ + List of AWS accounts to delete. + + :param access_key_id: Your AWS access key ID. Only required if your AWS account is a GovCloud or China account. + :type access_key_id: str, optional + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str, optional + + :param role_name: Your Datadog role delegation name. + :type role_name: str, optional + """ + if access_key_id is not unset: + kwargs["access_key_id"] = access_key_id + if account_id is not unset: + kwargs["account_id"] = account_id + if role_name is not unset: + kwargs["role_name"] = role_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_account_list_response.py b/datadog_api_client/v1/model/aws_account_list_response.py new file mode 100644 index 0000000000..4843ea400e --- /dev/null +++ b/datadog_api_client/v1/model/aws_account_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_account import AWSAccount + +class AWSAccountListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_account import AWSAccount + return { + "accounts": ([AWSAccount],), + } + attribute_map = { + "accounts": "accounts", + } + + def __init__(self_, accounts: Union[List[AWSAccount], UnsetType]=unset, **kwargs): + """ + List of enabled AWS accounts. + + :param accounts: List of enabled AWS accounts. + :type accounts: [AWSAccount], optional + """ + if accounts is not unset: + kwargs["accounts"] = accounts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_event_bridge_account_configuration.py b/datadog_api_client/v1/model/aws_event_bridge_account_configuration.py new file mode 100644 index 0000000000..c60ad84e3d --- /dev/null +++ b/datadog_api_client/v1/model/aws_event_bridge_account_configuration.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_event_bridge_source import AWSEventBridgeSource + +class AWSEventBridgeAccountConfiguration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_event_bridge_source import AWSEventBridgeSource + return { + "account_id": (str,), + "event_hubs": ([AWSEventBridgeSource],), + "tags": ([str],), + } + attribute_map = { + "account_id": "accountId", + "event_hubs": "eventHubs", + "tags": "tags", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, event_hubs: Union[List[AWSEventBridgeSource], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The EventBridge configuration for one AWS account. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str, optional + + :param event_hubs: Array of AWS event sources associated with this account. + :type event_hubs: [AWSEventBridgeSource], optional + + :param tags: Array of tags (in the form ``key:value`` ) which are added to all hosts + and metrics reporting through the main AWS integration. + :type tags: [str], optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if event_hubs is not unset: + kwargs["event_hubs"] = event_hubs + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_event_bridge_create_request.py b/datadog_api_client/v1/model/aws_event_bridge_create_request.py new file mode 100644 index 0000000000..fb03a58730 --- /dev/null +++ b/datadog_api_client/v1/model/aws_event_bridge_create_request.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSEventBridgeCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "create_event_bus": (bool,), + "event_generator_name": (str,), + "region": (str,), + } + attribute_map = { + "account_id": "account_id", + "create_event_bus": "create_event_bus", + "event_generator_name": "event_generator_name", + "region": "region", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, create_event_bus: Union[bool, UnsetType]=unset, event_generator_name: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, **kwargs): + """ + An object used to create an EventBridge source. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str, optional + + :param create_event_bus: True if Datadog should create the event bus in addition to the event + source. Requires the ``events:CreateEventBus`` permission. + :type create_event_bus: bool, optional + + :param event_generator_name: The given part of the event source name, which is then combined with an + assigned suffix to form the full name. + :type event_generator_name: str, optional + + :param region: The event source's `AWS region `_. + :type region: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if create_event_bus is not unset: + kwargs["create_event_bus"] = create_event_bus + if event_generator_name is not unset: + kwargs["event_generator_name"] = event_generator_name + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_event_bridge_create_response.py b/datadog_api_client/v1/model/aws_event_bridge_create_response.py new file mode 100644 index 0000000000..a87d5522f2 --- /dev/null +++ b/datadog_api_client/v1/model/aws_event_bridge_create_response.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_event_bridge_create_status import AWSEventBridgeCreateStatus + +class AWSEventBridgeCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_event_bridge_create_status import AWSEventBridgeCreateStatus + return { + "event_source_name": (str,), + "has_bus": (bool,), + "region": (str,), + "status": (AWSEventBridgeCreateStatus,), + } + attribute_map = { + "event_source_name": "event_source_name", + "has_bus": "has_bus", + "region": "region", + "status": "status", + } + + def __init__(self_, event_source_name: Union[str, UnsetType]=unset, has_bus: Union[bool, UnsetType]=unset, region: Union[str, UnsetType]=unset, status: Union[AWSEventBridgeCreateStatus, UnsetType]=unset, **kwargs): + """ + A created EventBridge source. + + :param event_source_name: The event source name. + :type event_source_name: str, optional + + :param has_bus: True if the event bus was created in addition to the source. + :type has_bus: bool, optional + + :param region: The event source's `AWS region `_. + :type region: str, optional + + :param status: The event source status "created". + :type status: AWSEventBridgeCreateStatus, optional + """ + if event_source_name is not unset: + kwargs["event_source_name"] = event_source_name + if has_bus is not unset: + kwargs["has_bus"] = has_bus + if region is not unset: + kwargs["region"] = region + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_event_bridge_create_status.py b/datadog_api_client/v1/model/aws_event_bridge_create_status.py new file mode 100644 index 0000000000..1fb56a2ccb --- /dev/null +++ b/datadog_api_client/v1/model/aws_event_bridge_create_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSEventBridgeCreateStatus(ModelSimple): + """ + The event source status "created". + + :param value: If omitted defaults to "created". Must be one of ["created"]. + :type value: str + """ + + allowed_values = { + "created", + } + CREATED: ClassVar["AWSEventBridgeCreateStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSEventBridgeCreateStatus.CREATED = AWSEventBridgeCreateStatus("created") diff --git a/datadog_api_client/v1/model/aws_event_bridge_delete_request.py b/datadog_api_client/v1/model/aws_event_bridge_delete_request.py new file mode 100644 index 0000000000..0c443dcd5b --- /dev/null +++ b/datadog_api_client/v1/model/aws_event_bridge_delete_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSEventBridgeDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "event_generator_name": (str,), + "region": (str,), + } + attribute_map = { + "account_id": "account_id", + "event_generator_name": "event_generator_name", + "region": "region", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, event_generator_name: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, **kwargs): + """ + An object used to delete an EventBridge source. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str, optional + + :param event_generator_name: The event source name. + :type event_generator_name: str, optional + + :param region: The event source's `AWS region `_. + :type region: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if event_generator_name is not unset: + kwargs["event_generator_name"] = event_generator_name + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_event_bridge_delete_response.py b/datadog_api_client/v1/model/aws_event_bridge_delete_response.py new file mode 100644 index 0000000000..d670febec9 --- /dev/null +++ b/datadog_api_client/v1/model/aws_event_bridge_delete_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_event_bridge_delete_status import AWSEventBridgeDeleteStatus + +class AWSEventBridgeDeleteResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_event_bridge_delete_status import AWSEventBridgeDeleteStatus + return { + "status": (AWSEventBridgeDeleteStatus,), + } + attribute_map = { + "status": "status", + } + + def __init__(self_, status: Union[AWSEventBridgeDeleteStatus, UnsetType]=unset, **kwargs): + """ + An indicator of the successful deletion of an EventBridge source. + + :param status: The event source status "empty". + :type status: AWSEventBridgeDeleteStatus, optional + """ + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_event_bridge_delete_status.py b/datadog_api_client/v1/model/aws_event_bridge_delete_status.py new file mode 100644 index 0000000000..202838d7cb --- /dev/null +++ b/datadog_api_client/v1/model/aws_event_bridge_delete_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSEventBridgeDeleteStatus(ModelSimple): + """ + The event source status "empty". + + :param value: If omitted defaults to "empty". Must be one of ["empty"]. + :type value: str + """ + + allowed_values = { + "empty", + } + EMPTY: ClassVar["AWSEventBridgeDeleteStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSEventBridgeDeleteStatus.EMPTY = AWSEventBridgeDeleteStatus("empty") diff --git a/datadog_api_client/v1/model/aws_event_bridge_list_response.py b/datadog_api_client/v1/model/aws_event_bridge_list_response.py new file mode 100644 index 0000000000..daecc8830c --- /dev/null +++ b/datadog_api_client/v1/model/aws_event_bridge_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_event_bridge_account_configuration import AWSEventBridgeAccountConfiguration + +class AWSEventBridgeListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_event_bridge_account_configuration import AWSEventBridgeAccountConfiguration + return { + "accounts": ([AWSEventBridgeAccountConfiguration],), + "is_installed": (bool,), + } + attribute_map = { + "accounts": "accounts", + "is_installed": "isInstalled", + } + + def __init__(self_, accounts: Union[List[AWSEventBridgeAccountConfiguration], UnsetType]=unset, is_installed: Union[bool, UnsetType]=unset, **kwargs): + """ + An object describing the EventBridge configuration for multiple accounts. + + :param accounts: List of accounts with their event sources. + :type accounts: [AWSEventBridgeAccountConfiguration], optional + + :param is_installed: True if the EventBridge sub-integration is enabled for your organization. + :type is_installed: bool, optional + """ + if accounts is not unset: + kwargs["accounts"] = accounts + if is_installed is not unset: + kwargs["is_installed"] = is_installed + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_event_bridge_source.py b/datadog_api_client/v1/model/aws_event_bridge_source.py new file mode 100644 index 0000000000..0ff7bedd96 --- /dev/null +++ b/datadog_api_client/v1/model/aws_event_bridge_source.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSEventBridgeSource(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "region": (str,), + } + attribute_map = { + "name": "name", + "region": "region", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, **kwargs): + """ + An EventBridge source. + + :param name: The event source name. + :type name: str, optional + + :param region: The event source's `AWS region `_. + :type region: str, optional + """ + if name is not unset: + kwargs["name"] = name + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_logs_async_error.py b/datadog_api_client/v1/model/aws_logs_async_error.py new file mode 100644 index 0000000000..c3d0798785 --- /dev/null +++ b/datadog_api_client/v1/model/aws_logs_async_error.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSLogsAsyncError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "message": (str,), + } + attribute_map = { + "code": "code", + "message": "message", + } + + def __init__(self_, code: Union[str, UnsetType]=unset, message: Union[str, UnsetType]=unset, **kwargs): + """ + Description of errors. + + :param code: Code properties + :type code: str, optional + + :param message: Message content. + :type message: str, optional + """ + if code is not unset: + kwargs["code"] = code + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_logs_async_response.py b/datadog_api_client/v1/model/aws_logs_async_response.py new file mode 100644 index 0000000000..b524b4385e --- /dev/null +++ b/datadog_api_client/v1/model/aws_logs_async_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_logs_async_error import AWSLogsAsyncError + +class AWSLogsAsyncResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_logs_async_error import AWSLogsAsyncError + return { + "errors": ([AWSLogsAsyncError],), + "status": (str,), + } + attribute_map = { + "errors": "errors", + "status": "status", + } + + def __init__(self_, errors: Union[List[AWSLogsAsyncError], UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + A list of all Datadog-AWS logs integrations available in your Datadog organization. + + :param errors: List of errors. + :type errors: [AWSLogsAsyncError], optional + + :param status: Status of the properties. + :type status: str, optional + """ + if errors is not unset: + kwargs["errors"] = errors + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_logs_lambda.py b/datadog_api_client/v1/model/aws_logs_lambda.py new file mode 100644 index 0000000000..cd46222f80 --- /dev/null +++ b/datadog_api_client/v1/model/aws_logs_lambda.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSLogsLambda(ModelNormal): + @cached_property + def openapi_types(_): + return { + "arn": (str,), + } + attribute_map = { + "arn": "arn", + } + + def __init__(self_, arn: Union[str, UnsetType]=unset, **kwargs): + """ + Description of the Lambdas. + + :param arn: Available ARN IDs. + :type arn: str, optional + """ + if arn is not unset: + kwargs["arn"] = arn + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_logs_list_response.py b/datadog_api_client/v1/model/aws_logs_list_response.py new file mode 100644 index 0000000000..ede7c3ee03 --- /dev/null +++ b/datadog_api_client/v1/model/aws_logs_list_response.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_logs_lambda import AWSLogsLambda + +class AWSLogsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_logs_lambda import AWSLogsLambda + return { + "account_id": (str,), + "lambdas": ([AWSLogsLambda],), + "services": ([str],), + } + attribute_map = { + "account_id": "account_id", + "lambdas": "lambdas", + "services": "services", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, lambdas: Union[List[AWSLogsLambda], UnsetType]=unset, services: Union[List[str], UnsetType]=unset, **kwargs): + """ + A list of all Datadog-AWS logs integrations available in your Datadog organization. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str, optional + + :param lambdas: List of ARNs configured in your Datadog account. + :type lambdas: [AWSLogsLambda], optional + + :param services: Array of services IDs. + :type services: [str], optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if lambdas is not unset: + kwargs["lambdas"] = lambdas + if services is not unset: + kwargs["services"] = services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_logs_list_services_response.py b/datadog_api_client/v1/model/aws_logs_list_services_response.py new file mode 100644 index 0000000000..2bec0a279e --- /dev/null +++ b/datadog_api_client/v1/model/aws_logs_list_services_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSLogsListServicesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "label": (str,), + } + attribute_map = { + "id": "id", + "label": "label", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, label: Union[str, UnsetType]=unset, **kwargs): + """ + The list of current AWS services for which Datadog offers automatic log collection. + + :param id: Key value in returned object. + :type id: str, optional + + :param label: Name of service available for configuration with Datadog logs. + :type label: str, optional + """ + if id is not unset: + kwargs["id"] = id + if label is not unset: + kwargs["label"] = label + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_logs_services_request.py b/datadog_api_client/v1/model/aws_logs_services_request.py new file mode 100644 index 0000000000..3c7bd1c481 --- /dev/null +++ b/datadog_api_client/v1/model/aws_logs_services_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSLogsServicesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "services": ([str],), + } + attribute_map = { + "account_id": "account_id", + "services": "services", + } + + def __init__(self_, account_id: str, services: List[str], **kwargs): + """ + A list of current AWS services for which Datadog offers automatic log collection. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str + + :param services: Array of services IDs set to enable automatic log collection. Discover the list of available services with the get list of AWS log ready services API endpoint. + :type services: [str] + """ + super().__init__(kwargs) + + + self_.account_id = account_id + self_.services = services diff --git a/datadog_api_client/v1/model/aws_namespace.py b/datadog_api_client/v1/model/aws_namespace.py new file mode 100644 index 0000000000..b2e8d27ca4 --- /dev/null +++ b/datadog_api_client/v1/model/aws_namespace.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSNamespace(ModelSimple): + """ + The namespace associated with the tag filter entry. + + :param value: Must be one of ["elb", "application_elb", "sqs", "rds", "custom", "network_elb", "lambda", "step_functions"]. + :type value: str + """ + + allowed_values = { + "elb", + "application_elb", + "sqs", + "rds", + "custom", + "network_elb", + "lambda", + "step_functions", + } + ELB: ClassVar["AWSNamespace"] + APPLICATION_ELB: ClassVar["AWSNamespace"] + SQS: ClassVar["AWSNamespace"] + RDS: ClassVar["AWSNamespace"] + CUSTOM: ClassVar["AWSNamespace"] + NETWORK_ELB: ClassVar["AWSNamespace"] + LAMBDA: ClassVar["AWSNamespace"] + STEP_FUNCTIONS: ClassVar["AWSNamespace"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSNamespace.ELB = AWSNamespace("elb") +AWSNamespace.APPLICATION_ELB = AWSNamespace("application_elb") +AWSNamespace.SQS = AWSNamespace("sqs") +AWSNamespace.RDS = AWSNamespace("rds") +AWSNamespace.CUSTOM = AWSNamespace("custom") +AWSNamespace.NETWORK_ELB = AWSNamespace("network_elb") +AWSNamespace.LAMBDA = AWSNamespace("lambda") +AWSNamespace.STEP_FUNCTIONS = AWSNamespace("step_functions") diff --git a/datadog_api_client/v1/model/aws_tag_filter.py b/datadog_api_client/v1/model/aws_tag_filter.py new file mode 100644 index 0000000000..64becb2986 --- /dev/null +++ b/datadog_api_client/v1/model/aws_tag_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_namespace import AWSNamespace + +class AWSTagFilter(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_namespace import AWSNamespace + return { + "namespace": (AWSNamespace,), + "tag_filter_str": (str,), + } + attribute_map = { + "namespace": "namespace", + "tag_filter_str": "tag_filter_str", + } + + def __init__(self_, namespace: Union[AWSNamespace, UnsetType]=unset, tag_filter_str: Union[str, UnsetType]=unset, **kwargs): + """ + A tag filter. + + :param namespace: The namespace associated with the tag filter entry. + :type namespace: AWSNamespace, optional + + :param tag_filter_str: The tag filter string. + :type tag_filter_str: str, optional + """ + if namespace is not unset: + kwargs["namespace"] = namespace + if tag_filter_str is not unset: + kwargs["tag_filter_str"] = tag_filter_str + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_tag_filter_create_request.py b/datadog_api_client/v1/model/aws_tag_filter_create_request.py new file mode 100644 index 0000000000..977ba6a160 --- /dev/null +++ b/datadog_api_client/v1/model/aws_tag_filter_create_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_namespace import AWSNamespace + +class AWSTagFilterCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_namespace import AWSNamespace + return { + "account_id": (str,), + "namespace": (AWSNamespace,), + "tag_filter_str": (str,), + } + attribute_map = { + "account_id": "account_id", + "namespace": "namespace", + "tag_filter_str": "tag_filter_str", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, namespace: Union[AWSNamespace, UnsetType]=unset, tag_filter_str: Union[str, UnsetType]=unset, **kwargs): + """ + The objects used to set an AWS tag filter. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str, optional + + :param namespace: The namespace associated with the tag filter entry. + :type namespace: AWSNamespace, optional + + :param tag_filter_str: The tag filter string. + :type tag_filter_str: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if namespace is not unset: + kwargs["namespace"] = namespace + if tag_filter_str is not unset: + kwargs["tag_filter_str"] = tag_filter_str + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_tag_filter_delete_request.py b/datadog_api_client/v1/model/aws_tag_filter_delete_request.py new file mode 100644 index 0000000000..34f39cc3a2 --- /dev/null +++ b/datadog_api_client/v1/model/aws_tag_filter_delete_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_namespace import AWSNamespace + +class AWSTagFilterDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_namespace import AWSNamespace + return { + "account_id": (str,), + "namespace": (AWSNamespace,), + } + attribute_map = { + "account_id": "account_id", + "namespace": "namespace", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, namespace: Union[AWSNamespace, UnsetType]=unset, **kwargs): + """ + The objects used to delete an AWS tag filter entry. + + :param account_id: The unique identifier of your AWS account. + :type account_id: str, optional + + :param namespace: The namespace associated with the tag filter entry. + :type namespace: AWSNamespace, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if namespace is not unset: + kwargs["namespace"] = namespace + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/aws_tag_filter_list_response.py b/datadog_api_client/v1/model/aws_tag_filter_list_response.py new file mode 100644 index 0000000000..4479fd116b --- /dev/null +++ b/datadog_api_client/v1/model/aws_tag_filter_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.aws_tag_filter import AWSTagFilter + +class AWSTagFilterListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.aws_tag_filter import AWSTagFilter + return { + "filters": ([AWSTagFilter],), + } + attribute_map = { + "filters": "filters", + } + + def __init__(self_, filters: Union[List[AWSTagFilter], UnsetType]=unset, **kwargs): + """ + An array of tag filter rules by ``namespace`` and tag filter string. + + :param filters: An array of tag filters. + :type filters: [AWSTagFilter], optional + """ + if filters is not unset: + kwargs["filters"] = filters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/azure_account.py b/datadog_api_client/v1/model/azure_account.py new file mode 100644 index 0000000000..322cacf618 --- /dev/null +++ b/datadog_api_client/v1/model/azure_account.py @@ -0,0 +1,172 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.resource_provider_config import ResourceProviderConfig + +class AzureAccount(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.resource_provider_config import ResourceProviderConfig + return { + "app_service_plan_filters": (str,), + "automute": (bool,), + "client_id": (str,), + "client_secret": (str,), + "container_app_filters": (str,), + "cspm_enabled": (bool,), + "custom_metrics_enabled": (bool,), + "errors": ([str],), + "host_filters": (str,), + "metrics_enabled": (bool,), + "metrics_enabled_default": (bool,), + "new_client_id": (str,), + "new_tenant_name": (str,), + "resource_collection_enabled": (bool,), + "resource_provider_configs": ([ResourceProviderConfig],), + "secretless_auth_enabled": (bool,), + "tenant_name": (str,), + "usage_metrics_enabled": (bool,), + } + attribute_map = { + "app_service_plan_filters": "app_service_plan_filters", + "automute": "automute", + "client_id": "client_id", + "client_secret": "client_secret", + "container_app_filters": "container_app_filters", + "cspm_enabled": "cspm_enabled", + "custom_metrics_enabled": "custom_metrics_enabled", + "errors": "errors", + "host_filters": "host_filters", + "metrics_enabled": "metrics_enabled", + "metrics_enabled_default": "metrics_enabled_default", + "new_client_id": "new_client_id", + "new_tenant_name": "new_tenant_name", + "resource_collection_enabled": "resource_collection_enabled", + "resource_provider_configs": "resource_provider_configs", + "secretless_auth_enabled": "secretless_auth_enabled", + "tenant_name": "tenant_name", + "usage_metrics_enabled": "usage_metrics_enabled", + } + + def __init__(self_, app_service_plan_filters: Union[str, UnsetType]=unset, automute: Union[bool, UnsetType]=unset, client_id: Union[str, UnsetType]=unset, client_secret: Union[str, UnsetType]=unset, container_app_filters: Union[str, UnsetType]=unset, cspm_enabled: Union[bool, UnsetType]=unset, custom_metrics_enabled: Union[bool, UnsetType]=unset, errors: Union[List[str], UnsetType]=unset, host_filters: Union[str, UnsetType]=unset, metrics_enabled: Union[bool, UnsetType]=unset, metrics_enabled_default: Union[bool, UnsetType]=unset, new_client_id: Union[str, UnsetType]=unset, new_tenant_name: Union[str, UnsetType]=unset, resource_collection_enabled: Union[bool, UnsetType]=unset, resource_provider_configs: Union[List[ResourceProviderConfig], UnsetType]=unset, secretless_auth_enabled: Union[bool, UnsetType]=unset, tenant_name: Union[str, UnsetType]=unset, usage_metrics_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Datadog-Azure integrations configured for your organization. + + :param app_service_plan_filters: Limit the Azure app service plans that are pulled into Datadog using tags. + Only app service plans that match one of the defined tags are imported into Datadog. + :type app_service_plan_filters: str, optional + + :param automute: Silence monitors for expected Azure VM shutdowns. + :type automute: bool, optional + + :param client_id: Your Azure web application ID. + :type client_id: str, optional + + :param client_secret: Your Azure web application secret key. + :type client_secret: str, optional + + :param container_app_filters: Limit the Azure container apps that are pulled into Datadog using tags. + Only container apps that match one of the defined tags are imported into Datadog. + :type container_app_filters: str, optional + + :param cspm_enabled: When enabled, Datadog’s Cloud Security Management product scans resource configurations monitored by this app registration. + Note: This requires resource_collection_enabled to be set to true. + :type cspm_enabled: bool, optional + + :param custom_metrics_enabled: Enable custom metrics for your organization. + :type custom_metrics_enabled: bool, optional + + :param errors: Errors in your configuration. + :type errors: [str], optional + + :param host_filters: Limit the Azure instances that are pulled into Datadog by using tags. + Only hosts that match one of the defined tags are imported into Datadog. + :type host_filters: str, optional + + :param metrics_enabled: Enable Azure metrics for your organization. + :type metrics_enabled: bool, optional + + :param metrics_enabled_default: Enable Azure metrics for your organization for resource providers where no resource provider config is specified. + :type metrics_enabled_default: bool, optional + + :param new_client_id: Your New Azure web application ID. + :type new_client_id: str, optional + + :param new_tenant_name: Your New Azure Active Directory ID. + :type new_tenant_name: str, optional + + :param resource_collection_enabled: When enabled, Datadog collects metadata and configuration info from cloud resources (compute instances, databases, load balancers, etc.) monitored by this app registration. + :type resource_collection_enabled: bool, optional + + :param resource_provider_configs: Configuration settings applied to resources from the specified Azure resource providers. + :type resource_provider_configs: [ResourceProviderConfig], optional + + :param secretless_auth_enabled: (Preview) When enabled, Datadog authenticates with this app registration using federated workload identity credentials instead of a client secret. + :type secretless_auth_enabled: bool, optional + + :param tenant_name: Your Azure Active Directory ID. + :type tenant_name: str, optional + + :param usage_metrics_enabled: Enable azure.usage metrics for your organization. + :type usage_metrics_enabled: bool, optional + """ + if app_service_plan_filters is not unset: + kwargs["app_service_plan_filters"] = app_service_plan_filters + if automute is not unset: + kwargs["automute"] = automute + if client_id is not unset: + kwargs["client_id"] = client_id + if client_secret is not unset: + kwargs["client_secret"] = client_secret + if container_app_filters is not unset: + kwargs["container_app_filters"] = container_app_filters + if cspm_enabled is not unset: + kwargs["cspm_enabled"] = cspm_enabled + if custom_metrics_enabled is not unset: + kwargs["custom_metrics_enabled"] = custom_metrics_enabled + if errors is not unset: + kwargs["errors"] = errors + if host_filters is not unset: + kwargs["host_filters"] = host_filters + if metrics_enabled is not unset: + kwargs["metrics_enabled"] = metrics_enabled + if metrics_enabled_default is not unset: + kwargs["metrics_enabled_default"] = metrics_enabled_default + if new_client_id is not unset: + kwargs["new_client_id"] = new_client_id + if new_tenant_name is not unset: + kwargs["new_tenant_name"] = new_tenant_name + if resource_collection_enabled is not unset: + kwargs["resource_collection_enabled"] = resource_collection_enabled + if resource_provider_configs is not unset: + kwargs["resource_provider_configs"] = resource_provider_configs + if secretless_auth_enabled is not unset: + kwargs["secretless_auth_enabled"] = secretless_auth_enabled + if tenant_name is not unset: + kwargs["tenant_name"] = tenant_name + if usage_metrics_enabled is not unset: + kwargs["usage_metrics_enabled"] = usage_metrics_enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/azure_account_list_response.py b/datadog_api_client/v1/model/azure_account_list_response.py new file mode 100644 index 0000000000..36d58cc474 --- /dev/null +++ b/datadog_api_client/v1/model/azure_account_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AzureAccountListResponse(ModelSimple): + """ + Accounts configured for your organization. + + + :type value: [AzureAccount] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.azure_account import AzureAccount + return { + "value": ([AzureAccount],), + } diff --git a/datadog_api_client/v1/model/bar_chart_widget_definition.py b/datadog_api_client/v1/model/bar_chart_widget_definition.py new file mode 100644 index 0000000000..01088ad03e --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_definition.py @@ -0,0 +1,139 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.bar_chart_widget_request import BarChartWidgetRequest + from datadog_api_client.v1.model.bar_chart_widget_style import BarChartWidgetStyle + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.bar_chart_widget_definition_type import BarChartWidgetDefinitionType + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + from datadog_api_client.v1.model.bar_chart_widget_stacked import BarChartWidgetStacked + from datadog_api_client.v1.model.bar_chart_widget_flat import BarChartWidgetFlat + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class BarChartWidgetDefinition(ModelNormal): + validations = { + "requests": { + "max_items": 1, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.bar_chart_widget_request import BarChartWidgetRequest + from datadog_api_client.v1.model.bar_chart_widget_style import BarChartWidgetStyle + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.bar_chart_widget_definition_type import BarChartWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "requests": ([BarChartWidgetRequest],), + "style": (BarChartWidgetStyle,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (BarChartWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "requests": "requests", + "style": "style", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[BarChartWidgetRequest], type: BarChartWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, style: Union[BarChartWidgetStyle, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The bar chart visualization displays categorical data using vertical bars, allowing you to compare values across different groups. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param requests: List of bar chart widget requests. + :type requests: [BarChartWidgetRequest] + + :param style: Style customization for a bar chart widget. + :type style: BarChartWidgetStyle, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the bar chart widget. + :type type: BarChartWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if style is not unset: + kwargs["style"] = style + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/bar_chart_widget_definition_type.py b/datadog_api_client/v1/model/bar_chart_widget_definition_type.py new file mode 100644 index 0000000000..2ed22db591 --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BarChartWidgetDefinitionType(ModelSimple): + """ + Type of the bar chart widget. + + :param value: If omitted defaults to "bar_chart". Must be one of ["bar_chart"]. + :type value: str + """ + + allowed_values = { + "bar_chart", + } + BAR_CHART: ClassVar["BarChartWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BarChartWidgetDefinitionType.BAR_CHART = BarChartWidgetDefinitionType("bar_chart") diff --git a/datadog_api_client/v1/model/bar_chart_widget_display.py b/datadog_api_client/v1/model/bar_chart_widget_display.py new file mode 100644 index 0000000000..00aea54543 --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_display.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BarChartWidgetDisplay(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Bar chart widget display options. + + :param legend: Bar chart widget stacked legend behavior. + :type legend: BarChartWidgetLegend, optional + + :param type: Bar chart widget stacked display type. + :type type: BarChartWidgetStackedType + """ + 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.v1.model.bar_chart_widget_stacked import BarChartWidgetStacked + from datadog_api_client.v1.model.bar_chart_widget_flat import BarChartWidgetFlat + return { + "oneOf": [ + BarChartWidgetStacked, + BarChartWidgetFlat, + ], + } diff --git a/datadog_api_client/v1/model/bar_chart_widget_flat.py b/datadog_api_client/v1/model/bar_chart_widget_flat.py new file mode 100644 index 0000000000..704fe0ce4c --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_flat.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.bar_chart_widget_flat_type import BarChartWidgetFlatType + +class BarChartWidgetFlat(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.bar_chart_widget_flat_type import BarChartWidgetFlatType + return { + "type": (BarChartWidgetFlatType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: BarChartWidgetFlatType, **kwargs): + """ + Bar chart widget flat display. + + :param type: Bar chart widget flat display type. + :type type: BarChartWidgetFlatType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/bar_chart_widget_flat_type.py b/datadog_api_client/v1/model/bar_chart_widget_flat_type.py new file mode 100644 index 0000000000..384a2b5a62 --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_flat_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BarChartWidgetFlatType(ModelSimple): + """ + Bar chart widget flat display type. + + :param value: If omitted defaults to "flat". Must be one of ["flat"]. + :type value: str + """ + + allowed_values = { + "flat", + } + FLAT: ClassVar["BarChartWidgetFlatType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BarChartWidgetFlatType.FLAT = BarChartWidgetFlatType("flat") diff --git a/datadog_api_client/v1/model/bar_chart_widget_legend.py b/datadog_api_client/v1/model/bar_chart_widget_legend.py new file mode 100644 index 0000000000..ac52a607cf --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_legend.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BarChartWidgetLegend(ModelSimple): + """ + Bar chart widget stacked legend behavior. + + :param value: Must be one of ["automatic", "inline", "none"]. + :type value: str + """ + + allowed_values = { + "automatic", + "inline", + "none", + } + AUTOMATIC: ClassVar["BarChartWidgetLegend"] + INLINE: ClassVar["BarChartWidgetLegend"] + NONE: ClassVar["BarChartWidgetLegend"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BarChartWidgetLegend.AUTOMATIC = BarChartWidgetLegend("automatic") +BarChartWidgetLegend.INLINE = BarChartWidgetLegend("inline") +BarChartWidgetLegend.NONE = BarChartWidgetLegend("none") diff --git a/datadog_api_client/v1/model/bar_chart_widget_request.py b/datadog_api_client/v1/model/bar_chart_widget_request.py new file mode 100644 index 0000000000..2a5a9b7058 --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_request.py @@ -0,0 +1,183 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + +class BarChartWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle + return { + "apm_query": (LogQueryDefinition,), + "audit_query": (LogQueryDefinition,), + "conditional_formats": ([WidgetConditionalFormat],), + "event_query": (LogQueryDefinition,), + "formulas": ([WidgetFormula],), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + "sort": (WidgetSortBy,), + "style": (WidgetRequestStyle,), + } + attribute_map = { + "apm_query": "apm_query", + "audit_query": "audit_query", + "conditional_formats": "conditional_formats", + "event_query": "event_query", + "formulas": "formulas", + "log_query": "log_query", + "network_query": "network_query", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "queries": "queries", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + "sort": "sort", + "style": "style", + } + + def __init__(self_, apm_query: Union[LogQueryDefinition, UnsetType]=unset, audit_query: Union[LogQueryDefinition, UnsetType]=unset, conditional_formats: Union[List[WidgetConditionalFormat], UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, sort: Union[WidgetSortBy, UnsetType]=unset, style: Union[WidgetRequestStyle, UnsetType]=unset, **kwargs): + """ + Updated bar chart widget. + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param audit_query: The log query. + :type audit_query: LogQueryDefinition, optional + + :param conditional_formats: List of conditional formats. + :type conditional_formats: [WidgetConditionalFormat], optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Widget query. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param sort: The controls for sorting the widget. + :type sort: WidgetSortBy, optional + + :param style: Define request widget style. + :type style: WidgetRequestStyle, optional + """ + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if audit_query is not unset: + kwargs["audit_query"] = audit_query + if conditional_formats is not unset: + kwargs["conditional_formats"] = conditional_formats + if event_query is not unset: + kwargs["event_query"] = event_query + if formulas is not unset: + kwargs["formulas"] = formulas + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + if sort is not unset: + kwargs["sort"] = sort + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/bar_chart_widget_scaling.py b/datadog_api_client/v1/model/bar_chart_widget_scaling.py new file mode 100644 index 0000000000..ce83c921b5 --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_scaling.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BarChartWidgetScaling(ModelSimple): + """ + Bar chart widget scaling definition. + + :param value: Must be one of ["absolute", "relative"]. + :type value: str + """ + + allowed_values = { + "absolute", + "relative", + } + ABSOLUTE: ClassVar["BarChartWidgetScaling"] + RELATIVE: ClassVar["BarChartWidgetScaling"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BarChartWidgetScaling.ABSOLUTE = BarChartWidgetScaling("absolute") +BarChartWidgetScaling.RELATIVE = BarChartWidgetScaling("relative") diff --git a/datadog_api_client/v1/model/bar_chart_widget_stacked.py b/datadog_api_client/v1/model/bar_chart_widget_stacked.py new file mode 100644 index 0000000000..8460dd8d53 --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_stacked.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.bar_chart_widget_legend import BarChartWidgetLegend + from datadog_api_client.v1.model.bar_chart_widget_stacked_type import BarChartWidgetStackedType + +class BarChartWidgetStacked(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.bar_chart_widget_legend import BarChartWidgetLegend + from datadog_api_client.v1.model.bar_chart_widget_stacked_type import BarChartWidgetStackedType + return { + "legend": (BarChartWidgetLegend,), + "type": (BarChartWidgetStackedType,), + } + attribute_map = { + "legend": "legend", + "type": "type", + } + + def __init__(self_, type: BarChartWidgetStackedType, legend: Union[BarChartWidgetLegend, UnsetType]=unset, **kwargs): + """ + Bar chart widget stacked display options. + + :param legend: Bar chart widget stacked legend behavior. + :type legend: BarChartWidgetLegend, optional + + :param type: Bar chart widget stacked display type. + :type type: BarChartWidgetStackedType + """ + if legend is not unset: + kwargs["legend"] = legend + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/bar_chart_widget_stacked_type.py b/datadog_api_client/v1/model/bar_chart_widget_stacked_type.py new file mode 100644 index 0000000000..533829c02e --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_stacked_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BarChartWidgetStackedType(ModelSimple): + """ + Bar chart widget stacked display type. + + :param value: If omitted defaults to "stacked". Must be one of ["stacked"]. + :type value: str + """ + + allowed_values = { + "stacked", + } + STACKED: ClassVar["BarChartWidgetStackedType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BarChartWidgetStackedType.STACKED = BarChartWidgetStackedType("stacked") diff --git a/datadog_api_client/v1/model/bar_chart_widget_style.py b/datadog_api_client/v1/model/bar_chart_widget_style.py new file mode 100644 index 0000000000..648bfcca41 --- /dev/null +++ b/datadog_api_client/v1/model/bar_chart_widget_style.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.bar_chart_widget_display import BarChartWidgetDisplay + from datadog_api_client.v1.model.bar_chart_widget_scaling import BarChartWidgetScaling + from datadog_api_client.v1.model.bar_chart_widget_stacked import BarChartWidgetStacked + from datadog_api_client.v1.model.bar_chart_widget_flat import BarChartWidgetFlat + +class BarChartWidgetStyle(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.bar_chart_widget_display import BarChartWidgetDisplay + from datadog_api_client.v1.model.bar_chart_widget_scaling import BarChartWidgetScaling + return { + "display": (BarChartWidgetDisplay,), + "palette": (str,), + "scaling": (BarChartWidgetScaling,), + } + attribute_map = { + "display": "display", + "palette": "palette", + "scaling": "scaling", + } + + def __init__(self_, display: Union[BarChartWidgetDisplay, BarChartWidgetStacked, BarChartWidgetFlat, UnsetType]=unset, palette: Union[str, UnsetType]=unset, scaling: Union[BarChartWidgetScaling, UnsetType]=unset, **kwargs): + """ + Style customization for a bar chart widget. + + :param display: Bar chart widget display options. + :type display: BarChartWidgetDisplay, optional + + :param palette: Color palette to apply to the widget. + :type palette: str, optional + + :param scaling: Bar chart widget scaling definition. + :type scaling: BarChartWidgetScaling, optional + """ + if display is not unset: + kwargs["display"] = display + if palette is not unset: + kwargs["palette"] = palette + if scaling is not unset: + kwargs["scaling"] = scaling + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/calendar_interval.py b/datadog_api_client/v1/model/calendar_interval.py new file mode 100644 index 0000000000..ba819f847a --- /dev/null +++ b/datadog_api_client/v1/model/calendar_interval.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.calendar_interval_type import CalendarIntervalType + +class CalendarInterval(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.calendar_interval_type import CalendarIntervalType + return { + "alignment": (str,), + "quantity": (int,), + "timezone": (str,), + "type": (CalendarIntervalType,), + } + attribute_map = { + "alignment": "alignment", + "quantity": "quantity", + "timezone": "timezone", + "type": "type", + } + + def __init__(self_, type: CalendarIntervalType, alignment: Union[str, UnsetType]=unset, quantity: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Calendar interval definition. + + :param alignment: Alignment of the interval. Valid values depend on the interval type. For ``day`` , use hours (for example, ``1am`` , ``2pm`` , or ``14`` ). For ``week`` , use day names (for example, ``monday`` ). For ``month`` , use day-of-month ordinals (for example, ``1st`` , ``15th`` ). For ``year`` or ``quarter`` , use month names (for example, ``january`` ). + :type alignment: str, optional + + :param quantity: Quantity of the interval. + :type quantity: int, optional + + :param timezone: Timezone for the interval. + :type timezone: str, optional + + :param type: Type of calendar interval. + :type type: CalendarIntervalType + """ + if alignment is not unset: + kwargs["alignment"] = alignment + if quantity is not unset: + kwargs["quantity"] = quantity + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/calendar_interval_type.py b/datadog_api_client/v1/model/calendar_interval_type.py new file mode 100644 index 0000000000..c598fffd2d --- /dev/null +++ b/datadog_api_client/v1/model/calendar_interval_type.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CalendarIntervalType(ModelSimple): + """ + Type of calendar interval. + + :param value: Must be one of ["day", "week", "month", "year", "quarter", "minute", "hour"]. + :type value: str + """ + + allowed_values = { + "day", + "week", + "month", + "year", + "quarter", + "minute", + "hour", + } + DAY: ClassVar["CalendarIntervalType"] + WEEK: ClassVar["CalendarIntervalType"] + MONTH: ClassVar["CalendarIntervalType"] + YEAR: ClassVar["CalendarIntervalType"] + QUARTER: ClassVar["CalendarIntervalType"] + MINUTE: ClassVar["CalendarIntervalType"] + HOUR: ClassVar["CalendarIntervalType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CalendarIntervalType.DAY = CalendarIntervalType("day") +CalendarIntervalType.WEEK = CalendarIntervalType("week") +CalendarIntervalType.MONTH = CalendarIntervalType("month") +CalendarIntervalType.YEAR = CalendarIntervalType("year") +CalendarIntervalType.QUARTER = CalendarIntervalType("quarter") +CalendarIntervalType.MINUTE = CalendarIntervalType("minute") +CalendarIntervalType.HOUR = CalendarIntervalType("hour") diff --git a/datadog_api_client/v1/model/cancel_downtimes_by_scope_request.py b/datadog_api_client/v1/model/cancel_downtimes_by_scope_request.py new file mode 100644 index 0000000000..0fafe8b9f9 --- /dev/null +++ b/datadog_api_client/v1/model/cancel_downtimes_by_scope_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CancelDowntimesByScopeRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "scope": (str,), + } + attribute_map = { + "scope": "scope", + } + + def __init__(self_, scope: str, **kwargs): + """ + Cancel downtimes according to scope. + + :param scope: The scope(s) to which the downtime applies and must be in ``key:value`` format. For example, ``host:app2``. + Provide multiple scopes as a comma-separated list like ``env:dev,env:prod``. + The resulting downtime applies to sources that matches ALL provided scopes ( ``env:dev`` **AND** ``env:prod`` ). + :type scope: str + """ + super().__init__(kwargs) + + + self_.scope = scope diff --git a/datadog_api_client/v1/model/canceled_downtimes_ids.py b/datadog_api_client/v1/model/canceled_downtimes_ids.py new file mode 100644 index 0000000000..5f37aef6b5 --- /dev/null +++ b/datadog_api_client/v1/model/canceled_downtimes_ids.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CanceledDowntimesIds(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cancelled_ids": ([int],), + } + attribute_map = { + "cancelled_ids": "cancelled_ids", + } + + def __init__(self_, cancelled_ids: Union[List[int], UnsetType]=unset, **kwargs): + """ + Object containing array of IDs of canceled downtimes. + + :param cancelled_ids: ID of downtimes that were canceled. + :type cancelled_ids: [int], optional + """ + if cancelled_ids is not unset: + kwargs["cancelled_ids"] = cancelled_ids + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/change_widget_definition.py b/datadog_api_client/v1/model/change_widget_definition.py new file mode 100644 index 0000000000..f116d09694 --- /dev/null +++ b/datadog_api_client/v1/model/change_widget_definition.py @@ -0,0 +1,129 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.change_widget_request import ChangeWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.change_widget_definition_type import ChangeWidgetDefinitionType + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class ChangeWidgetDefinition(ModelNormal): + validations = { + "requests": { + "max_items": 1, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.change_widget_request import ChangeWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.change_widget_definition_type import ChangeWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "requests": ([ChangeWidgetRequest],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (ChangeWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[ChangeWidgetRequest], type: ChangeWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The Change graph shows you the change in a value over the time period chosen. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param requests: Array of one request object to display in the widget. + + See the dedicated `Request JSON schema documentation `_ + to learn how to build the ``REQUEST_SCHEMA``. + :type requests: [ChangeWidgetRequest] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the change widget. + :type type: ChangeWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/change_widget_definition_type.py b/datadog_api_client/v1/model/change_widget_definition_type.py new file mode 100644 index 0000000000..ed7f60e2f6 --- /dev/null +++ b/datadog_api_client/v1/model/change_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeWidgetDefinitionType(ModelSimple): + """ + Type of the change widget. + + :param value: If omitted defaults to "change". Must be one of ["change"]. + :type value: str + """ + + allowed_values = { + "change", + } + CHANGE: ClassVar["ChangeWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeWidgetDefinitionType.CHANGE = ChangeWidgetDefinitionType("change") diff --git a/datadog_api_client/v1/model/change_widget_request.py b/datadog_api_client/v1/model/change_widget_request.py new file mode 100644 index 0000000000..ec4c0b9afc --- /dev/null +++ b/datadog_api_client/v1/model/change_widget_request.py @@ -0,0 +1,197 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_change_type import WidgetChangeType + from datadog_api_client.v1.model.widget_compare_to import WidgetCompareTo + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.widget_order_by import WidgetOrderBy + from datadog_api_client.v1.model.widget_sort import WidgetSort + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class ChangeWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_change_type import WidgetChangeType + from datadog_api_client.v1.model.widget_compare_to import WidgetCompareTo + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.widget_order_by import WidgetOrderBy + from datadog_api_client.v1.model.widget_sort import WidgetSort + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + return { + "apm_query": (LogQueryDefinition,), + "change_type": (WidgetChangeType,), + "compare_to": (WidgetCompareTo,), + "event_query": (LogQueryDefinition,), + "formulas": ([WidgetFormula],), + "increase_good": (bool,), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "order_by": (WidgetOrderBy,), + "order_dir": (WidgetSort,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + "show_present": (bool,), + } + attribute_map = { + "apm_query": "apm_query", + "change_type": "change_type", + "compare_to": "compare_to", + "event_query": "event_query", + "formulas": "formulas", + "increase_good": "increase_good", + "log_query": "log_query", + "network_query": "network_query", + "order_by": "order_by", + "order_dir": "order_dir", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "queries": "queries", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + "show_present": "show_present", + } + + def __init__(self_, apm_query: Union[LogQueryDefinition, UnsetType]=unset, change_type: Union[WidgetChangeType, UnsetType]=unset, compare_to: Union[WidgetCompareTo, UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, increase_good: Union[bool, UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, order_by: Union[WidgetOrderBy, UnsetType]=unset, order_dir: Union[WidgetSort, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, show_present: Union[bool, UnsetType]=unset, **kwargs): + """ + Updated change widget. + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param change_type: Show the absolute or the relative change. + :type change_type: WidgetChangeType, optional + + :param compare_to: Timeframe used for the change comparison. + :type compare_to: WidgetCompareTo, optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param increase_good: Whether to show increase as good. + :type increase_good: bool, optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param order_by: What to order by. + :type order_by: WidgetOrderBy, optional + + :param order_dir: Widget sorting methods. + :type order_dir: WidgetSort, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Query definition. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param show_present: Whether to show the present value. + :type show_present: bool, optional + """ + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if change_type is not unset: + kwargs["change_type"] = change_type + if compare_to is not unset: + kwargs["compare_to"] = compare_to + if event_query is not unset: + kwargs["event_query"] = event_query + if formulas is not unset: + kwargs["formulas"] = formulas + if increase_good is not unset: + kwargs["increase_good"] = increase_good + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if order_by is not unset: + kwargs["order_by"] = order_by + if order_dir is not unset: + kwargs["order_dir"] = order_dir + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + if show_present is not unset: + kwargs["show_present"] = show_present + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/check_can_delete_monitor_response.py b/datadog_api_client/v1/model/check_can_delete_monitor_response.py new file mode 100644 index 0000000000..97ee06e0b2 --- /dev/null +++ b/datadog_api_client/v1/model/check_can_delete_monitor_response.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.check_can_delete_monitor_response_data import CheckCanDeleteMonitorResponseData + +class CheckCanDeleteMonitorResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.check_can_delete_monitor_response_data import CheckCanDeleteMonitorResponseData + return { + "data": (CheckCanDeleteMonitorResponseData,), + "errors": ({str: ([str],)}, none_type), + } + attribute_map = { + "data": "data", + "errors": "errors", + } + + def __init__(self_, data: CheckCanDeleteMonitorResponseData, errors: Union[Dict[str, List[str]], none_type, UnsetType]=unset, **kwargs): + """ + Response of monitor IDs that can or can't be safely deleted. + + :param data: Wrapper object with the list of monitor IDs. + :type data: CheckCanDeleteMonitorResponseData + + :param errors: A mapping of Monitor ID to strings denoting where it's used. + :type errors: {str: ([str],)}, none_type, optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v1/model/check_can_delete_monitor_response_data.py b/datadog_api_client/v1/model/check_can_delete_monitor_response_data.py new file mode 100644 index 0000000000..9f05cc918b --- /dev/null +++ b/datadog_api_client/v1/model/check_can_delete_monitor_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CheckCanDeleteMonitorResponseData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ok": ([int],), + } + attribute_map = { + "ok": "ok", + } + + def __init__(self_, ok: Union[List[int], UnsetType]=unset, **kwargs): + """ + Wrapper object with the list of monitor IDs. + + :param ok: An array of Monitor IDs that can be safely deleted. + :type ok: [int], optional + """ + if ok is not unset: + kwargs["ok"] = ok + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/check_can_delete_slo_response.py b/datadog_api_client/v1/model/check_can_delete_slo_response.py new file mode 100644 index 0000000000..7a5ca898a8 --- /dev/null +++ b/datadog_api_client/v1/model/check_can_delete_slo_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.check_can_delete_slo_response_data import CheckCanDeleteSLOResponseData + +class CheckCanDeleteSLOResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.check_can_delete_slo_response_data import CheckCanDeleteSLOResponseData + return { + "data": (CheckCanDeleteSLOResponseData,), + "errors": ({str: (str,)},), + } + attribute_map = { + "data": "data", + "errors": "errors", + } + + def __init__(self_, data: Union[CheckCanDeleteSLOResponseData, UnsetType]=unset, errors: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + A service level objective response containing the requested object. + + :param data: An array of service level objective objects. + :type data: CheckCanDeleteSLOResponseData, optional + + :param errors: A mapping of SLO id to it's current usages. + :type errors: {str: (str,)}, optional + """ + if data is not unset: + kwargs["data"] = data + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/check_can_delete_slo_response_data.py b/datadog_api_client/v1/model/check_can_delete_slo_response_data.py new file mode 100644 index 0000000000..32e16cbc09 --- /dev/null +++ b/datadog_api_client/v1/model/check_can_delete_slo_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CheckCanDeleteSLOResponseData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ok": ([str],), + } + attribute_map = { + "ok": "ok", + } + + def __init__(self_, ok: Union[List[str], UnsetType]=unset, **kwargs): + """ + An array of service level objective objects. + + :param ok: An array of SLO IDs that can be safely deleted. + :type ok: [str], optional + """ + if ok is not unset: + kwargs["ok"] = ok + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/check_status_widget_definition.py b/datadog_api_client/v1/model/check_status_widget_definition.py new file mode 100644 index 0000000000..91312d0ba2 --- /dev/null +++ b/datadog_api_client/v1/model/check_status_widget_definition.py @@ -0,0 +1,125 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_grouping import WidgetGrouping + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.check_status_widget_definition_type import CheckStatusWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class CheckStatusWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_grouping import WidgetGrouping + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.check_status_widget_definition_type import CheckStatusWidgetDefinitionType + return { + "check": (str,), + "description": (str,), + "group": (str,), + "group_by": ([str],), + "grouping": (WidgetGrouping,), + "tags": ([str],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (CheckStatusWidgetDefinitionType,), + } + attribute_map = { + "check": "check", + "description": "description", + "group": "group", + "group_by": "group_by", + "grouping": "grouping", + "tags": "tags", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, check: str, grouping: WidgetGrouping, type: CheckStatusWidgetDefinitionType, description: Union[str, UnsetType]=unset, group: Union[str, UnsetType]=unset, group_by: Union[List[str], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + Check status shows the current status or number of results for any check performed. + + :param check: Name of the check to use in the widget. + :type check: str + + :param description: The description of the widget. + :type description: str, optional + + :param group: Group reporting a single check. + :type group: str, optional + + :param group_by: List of tag prefixes to group by in the case of a cluster check. + :type group_by: [str], optional + + :param grouping: The kind of grouping to use. + :type grouping: WidgetGrouping + + :param tags: List of tags used to filter the groups reporting a cluster check. + :type tags: [str], optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the check status widget. + :type type: CheckStatusWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if group is not unset: + kwargs["group"] = group + if group_by is not unset: + kwargs["group_by"] = group_by + if tags is not unset: + kwargs["tags"] = tags + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.check = check + self_.grouping = grouping + self_.type = type diff --git a/datadog_api_client/v1/model/check_status_widget_definition_type.py b/datadog_api_client/v1/model/check_status_widget_definition_type.py new file mode 100644 index 0000000000..1029eedd3c --- /dev/null +++ b/datadog_api_client/v1/model/check_status_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CheckStatusWidgetDefinitionType(ModelSimple): + """ + Type of the check status widget. + + :param value: If omitted defaults to "check_status". Must be one of ["check_status"]. + :type value: str + """ + + allowed_values = { + "check_status", + } + CHECK_STATUS: ClassVar["CheckStatusWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CheckStatusWidgetDefinitionType.CHECK_STATUS = CheckStatusWidgetDefinitionType("check_status") diff --git a/datadog_api_client/v1/model/cohort_widget_definition.py b/datadog_api_client/v1/model/cohort_widget_definition.py new file mode 100644 index 0000000000..3994bd3f13 --- /dev/null +++ b/datadog_api_client/v1/model/cohort_widget_definition.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_grid_request import RetentionGridRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.cohort_widget_definition_type import CohortWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class CohortWidgetDefinition(ModelNormal): + validations = { + "requests": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_grid_request import RetentionGridRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.cohort_widget_definition_type import CohortWidgetDefinitionType + return { + "description": (str,), + "requests": ([RetentionGridRequest],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (CohortWidgetDefinitionType,), + } + attribute_map = { + "description": "description", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[RetentionGridRequest], type: CohortWidgetDefinitionType, description: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The cohort widget visualizes user retention over time. + + :param description: The description of the widget. + :type description: str, optional + + :param requests: List of Cohort widget requests. + :type requests: [RetentionGridRequest] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the Cohort widget. + :type type: CohortWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/cohort_widget_definition_type.py b/datadog_api_client/v1/model/cohort_widget_definition_type.py new file mode 100644 index 0000000000..4e68a1ea63 --- /dev/null +++ b/datadog_api_client/v1/model/cohort_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CohortWidgetDefinitionType(ModelSimple): + """ + Type of the Cohort widget. + + :param value: If omitted defaults to "cohort". Must be one of ["cohort"]. + :type value: str + """ + + allowed_values = { + "cohort", + } + COHORT: ClassVar["CohortWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CohortWidgetDefinitionType.COHORT = CohortWidgetDefinitionType("cohort") diff --git a/datadog_api_client/v1/model/comparison_custom_timeframe.py b/datadog_api_client/v1/model/comparison_custom_timeframe.py new file mode 100644 index 0000000000..f5e0ca7cc0 --- /dev/null +++ b/datadog_api_client/v1/model/comparison_custom_timeframe.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ComparisonCustomTimeframe(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (int,), + "to": (int,), + } + attribute_map = { + "_from": "from", + "to": "to", + } + + def __init__(self_, _from: int, to: int, **kwargs): + """ + Fixed time range for a ``custom_timeframe`` comparison. + + :param _from: Start time in milliseconds since epoch. + :type _from: int + + :param to: End time in milliseconds since epoch. + :type to: int + """ + super().__init__(kwargs) + + + self_._from = _from + self_.to = to diff --git a/datadog_api_client/v1/model/comparison_duration.py b/datadog_api_client/v1/model/comparison_duration.py new file mode 100644 index 0000000000..8017f07b0f --- /dev/null +++ b/datadog_api_client/v1/model/comparison_duration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.comparison_custom_timeframe import ComparisonCustomTimeframe + from datadog_api_client.v1.model.comparison_duration_type import ComparisonDurationType + +class ComparisonDuration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.comparison_custom_timeframe import ComparisonCustomTimeframe + from datadog_api_client.v1.model.comparison_duration_type import ComparisonDurationType + return { + "custom_timeframe": (ComparisonCustomTimeframe,), + "type": (ComparisonDurationType,), + } + attribute_map = { + "custom_timeframe": "custom_timeframe", + "type": "type", + } + + def __init__(self_, type: ComparisonDurationType, custom_timeframe: Union[ComparisonCustomTimeframe, UnsetType]=unset, **kwargs): + """ + The comparison period. Use a preset ``type`` value or set ``type`` to ``custom_timeframe`` and provide ``custom_timeframe`` with explicit millisecond epoch bounds. + + :param custom_timeframe: Fixed time range for a ``custom_timeframe`` comparison. + :type custom_timeframe: ComparisonCustomTimeframe, optional + + :param type: The comparison window type. + :type type: ComparisonDurationType + """ + if custom_timeframe is not unset: + kwargs["custom_timeframe"] = custom_timeframe + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/comparison_duration_type.py b/datadog_api_client/v1/model/comparison_duration_type.py new file mode 100644 index 0000000000..d1f75466bc --- /dev/null +++ b/datadog_api_client/v1/model/comparison_duration_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ComparisonDurationType(ModelSimple): + """ + The comparison window type. + + :param value: Must be one of ["previous_timeframe", "custom_timeframe", "previous_day", "previous_week", "previous_month"]. + :type value: str + """ + + allowed_values = { + "previous_timeframe", + "custom_timeframe", + "previous_day", + "previous_week", + "previous_month", + } + PREVIOUS_TIMEFRAME: ClassVar["ComparisonDurationType"] + CUSTOM_TIMEFRAME: ClassVar["ComparisonDurationType"] + PREVIOUS_DAY: ClassVar["ComparisonDurationType"] + PREVIOUS_WEEK: ClassVar["ComparisonDurationType"] + PREVIOUS_MONTH: ClassVar["ComparisonDurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ComparisonDurationType.PREVIOUS_TIMEFRAME = ComparisonDurationType("previous_timeframe") +ComparisonDurationType.CUSTOM_TIMEFRAME = ComparisonDurationType("custom_timeframe") +ComparisonDurationType.PREVIOUS_DAY = ComparisonDurationType("previous_day") +ComparisonDurationType.PREVIOUS_WEEK = ComparisonDurationType("previous_week") +ComparisonDurationType.PREVIOUS_MONTH = ComparisonDurationType("previous_month") diff --git a/datadog_api_client/v1/model/content_encoding.py b/datadog_api_client/v1/model/content_encoding.py new file mode 100644 index 0000000000..c01b1539e3 --- /dev/null +++ b/datadog_api_client/v1/model/content_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ContentEncoding(ModelSimple): + """ + HTTP header used to compress the media-type. + + :param value: Must be one of ["gzip", "deflate"]. + :type value: str + """ + + allowed_values = { + "gzip", + "deflate", + } + GZIP: ClassVar["ContentEncoding"] + DEFLATE: ClassVar["ContentEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ContentEncoding.GZIP = ContentEncoding("gzip") +ContentEncoding.DEFLATE = ContentEncoding("deflate") diff --git a/datadog_api_client/v1/model/creator.py b/datadog_api_client/v1/model/creator.py new file mode 100644 index 0000000000..d023053e67 --- /dev/null +++ b/datadog_api_client/v1/model/creator.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Creator(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "name": (str, none_type), + } + attribute_map = { + "email": "email", + "handle": "handle", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Object describing the creator of the shared element. + + :param email: Email of the creator. + :type email: str, optional + + :param handle: Handle of the creator. + :type handle: str, optional + + :param name: Name of the creator. + :type name: str, none_type, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/dashboard.py b/datadog_api_client/v1/model/dashboard.py new file mode 100644 index 0000000000..01a348eff5 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard.py @@ -0,0 +1,248 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_default_timeframe_setting import DashboardDefaultTimeframeSetting + from datadog_api_client.v1.model.dashboard_layout_type import DashboardLayoutType + from datadog_api_client.v1.model.dashboard_reflow_type import DashboardReflowType + from datadog_api_client.v1.model.dashboard_tab import DashboardTab + from datadog_api_client.v1.model.dashboard_template_variable_preset import DashboardTemplateVariablePreset + from datadog_api_client.v1.model.dashboard_template_variable import DashboardTemplateVariable + from datadog_api_client.v1.model.widget import Widget + from datadog_api_client.v1.model.dashboard_live_timeframe import DashboardLiveTimeframe + from datadog_api_client.v1.model.dashboard_fixed_timeframe import DashboardFixedTimeframe + from datadog_api_client.v1.model.alert_graph_widget_definition import AlertGraphWidgetDefinition + from datadog_api_client.v1.model.alert_value_widget_definition import AlertValueWidgetDefinition + from datadog_api_client.v1.model.bar_chart_widget_definition import BarChartWidgetDefinition + from datadog_api_client.v1.model.change_widget_definition import ChangeWidgetDefinition + from datadog_api_client.v1.model.check_status_widget_definition import CheckStatusWidgetDefinition + from datadog_api_client.v1.model.cohort_widget_definition import CohortWidgetDefinition + from datadog_api_client.v1.model.distribution_widget_definition import DistributionWidgetDefinition + from datadog_api_client.v1.model.event_stream_widget_definition import EventStreamWidgetDefinition + from datadog_api_client.v1.model.event_timeline_widget_definition import EventTimelineWidgetDefinition + from datadog_api_client.v1.model.free_text_widget_definition import FreeTextWidgetDefinition + from datadog_api_client.v1.model.funnel_widget_definition import FunnelWidgetDefinition + from datadog_api_client.v1.model.product_analytics_funnel_widget_definition import ProductAnalyticsFunnelWidgetDefinition + from datadog_api_client.v1.model.geomap_widget_definition import GeomapWidgetDefinition + from datadog_api_client.v1.model.group_widget_definition import GroupWidgetDefinition + from datadog_api_client.v1.model.heat_map_widget_definition import HeatMapWidgetDefinition + from datadog_api_client.v1.model.host_map_widget_definition import HostMapWidgetDefinition + from datadog_api_client.v1.model.i_frame_widget_definition import IFrameWidgetDefinition + from datadog_api_client.v1.model.image_widget_definition import ImageWidgetDefinition + from datadog_api_client.v1.model.list_stream_widget_definition import ListStreamWidgetDefinition + from datadog_api_client.v1.model.log_stream_widget_definition import LogStreamWidgetDefinition + from datadog_api_client.v1.model.monitor_summary_widget_definition import MonitorSummaryWidgetDefinition + from datadog_api_client.v1.model.note_widget_definition import NoteWidgetDefinition + from datadog_api_client.v1.model.powerpack_widget_definition import PowerpackWidgetDefinition + from datadog_api_client.v1.model.point_plot_widget_definition import PointPlotWidgetDefinition + from datadog_api_client.v1.model.query_value_widget_definition import QueryValueWidgetDefinition + from datadog_api_client.v1.model.retention_curve_widget_definition import RetentionCurveWidgetDefinition + from datadog_api_client.v1.model.run_workflow_widget_definition import RunWorkflowWidgetDefinition + from datadog_api_client.v1.model.slo_list_widget_definition import SLOListWidgetDefinition + from datadog_api_client.v1.model.slo_widget_definition import SLOWidgetDefinition + from datadog_api_client.v1.model.scatter_plot_widget_definition import ScatterPlotWidgetDefinition + from datadog_api_client.v1.model.sankey_widget_definition import SankeyWidgetDefinition + from datadog_api_client.v1.model.service_map_widget_definition import ServiceMapWidgetDefinition + from datadog_api_client.v1.model.service_summary_widget_definition import ServiceSummaryWidgetDefinition + from datadog_api_client.v1.model.split_graph_widget_definition import SplitGraphWidgetDefinition + from datadog_api_client.v1.model.sunburst_widget_definition import SunburstWidgetDefinition + from datadog_api_client.v1.model.table_widget_definition import TableWidgetDefinition + from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition + from datadog_api_client.v1.model.toplist_widget_definition import ToplistWidgetDefinition + from datadog_api_client.v1.model.topology_map_widget_definition import TopologyMapWidgetDefinition + from datadog_api_client.v1.model.tree_map_widget_definition import TreeMapWidgetDefinition + from datadog_api_client.v1.model.wildcard_widget_definition import WildcardWidgetDefinition + +class Dashboard(ModelNormal): + validations = { + "tabs": { + "max_items": 100, + }, + "tags": { + "max_items": 5, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_default_timeframe_setting import DashboardDefaultTimeframeSetting + from datadog_api_client.v1.model.dashboard_layout_type import DashboardLayoutType + from datadog_api_client.v1.model.dashboard_reflow_type import DashboardReflowType + from datadog_api_client.v1.model.dashboard_tab import DashboardTab + from datadog_api_client.v1.model.dashboard_template_variable_preset import DashboardTemplateVariablePreset + from datadog_api_client.v1.model.dashboard_template_variable import DashboardTemplateVariable + from datadog_api_client.v1.model.widget import Widget + return { + "author_handle": (str,), + "author_name": (str, none_type), + "created_at": (datetime,), + "default_timeframe": (DashboardDefaultTimeframeSetting,), + "description": (str, none_type), + "id": (str,), + "is_read_only": (bool,), + "layout_type": (DashboardLayoutType,), + "modified_at": (datetime,), + "notify_list": ([str], none_type), + "reflow_type": (DashboardReflowType,), + "restricted_roles": ([str],), + "tabs": ([DashboardTab], none_type), + "tags": ([str], none_type), + "template_variable_presets": ([DashboardTemplateVariablePreset], none_type), + "template_variables": ([DashboardTemplateVariable], none_type), + "title": (str,), + "url": (str,), + "widgets": ([Widget],), + } + attribute_map = { + "author_handle": "author_handle", + "author_name": "author_name", + "created_at": "created_at", + "default_timeframe": "default_timeframe", + "description": "description", + "id": "id", + "is_read_only": "is_read_only", + "layout_type": "layout_type", + "modified_at": "modified_at", + "notify_list": "notify_list", + "reflow_type": "reflow_type", + "restricted_roles": "restricted_roles", + "tabs": "tabs", + "tags": "tags", + "template_variable_presets": "template_variable_presets", + "template_variables": "template_variables", + "title": "title", + "url": "url", + "widgets": "widgets", + } + read_only_vars = { + "author_handle", + "author_name", + "created_at", + "id", + "modified_at", + "url", + } + + def __init__(self_, layout_type: DashboardLayoutType, title: str, widgets: List[Widget], author_handle: Union[str, UnsetType]=unset, author_name: Union[str, none_type, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, default_timeframe: Union[DashboardDefaultTimeframeSetting, DashboardLiveTimeframe, DashboardFixedTimeframe, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_read_only: Union[bool, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, notify_list: Union[List[str], none_type, UnsetType]=unset, reflow_type: Union[DashboardReflowType, UnsetType]=unset, restricted_roles: Union[List[str], UnsetType]=unset, tabs: Union[List[DashboardTab], none_type, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, template_variable_presets: Union[List[DashboardTemplateVariablePreset], none_type, UnsetType]=unset, template_variables: Union[List[DashboardTemplateVariable], none_type, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + A dashboard is Datadog’s tool for visually tracking, analyzing, and displaying + key performance metrics, which enable you to monitor the health of your infrastructure. + + :param author_handle: Identifier of the dashboard author. + :type author_handle: str, optional + + :param author_name: Name of the dashboard author. + :type author_name: str, none_type, optional + + :param created_at: Creation date of the dashboard. + :type created_at: datetime, optional + + :param default_timeframe: The default timeframe applied when opening the dashboard. Set to ``null`` to clear the dashboard's default timeframe. + :type default_timeframe: DashboardDefaultTimeframeSetting, optional + + :param description: Description of the dashboard. + :type description: str, none_type, optional + + :param id: ID of the dashboard. + :type id: str, optional + + :param is_read_only: Whether this dashboard is read-only. If True, only the author and admins can make changes to it. + + This property is deprecated; please use the `Restriction Policies API `_ instead to manage write authorization for individual dashboards. **Deprecated**. + :type is_read_only: bool, optional + + :param layout_type: Layout type of the dashboard. + :type layout_type: DashboardLayoutType + + :param modified_at: Modification date of the dashboard. + :type modified_at: datetime, optional + + :param notify_list: List of handles of users to notify when changes are made to this dashboard. + :type notify_list: [str], none_type, optional + + :param reflow_type: Reflow type for a **new dashboard layout** dashboard. Set this only when layout type is 'ordered'. + If set to 'fixed', the dashboard expects all widgets to have a layout, and if it's set to 'auto', + widgets should not have layouts. + :type reflow_type: DashboardReflowType, optional + + :param restricted_roles: A list of role identifiers. Only the author and users associated with at least one of these roles can edit this dashboard. + :type restricted_roles: [str], optional + + :param tabs: List of tabs for organizing dashboard widgets into groups. + :type tabs: [DashboardTab], none_type, optional + + :param tags: List of team names representing ownership of a dashboard. + :type tags: [str], none_type, optional + + :param template_variable_presets: Array of template variables saved views. + :type template_variable_presets: [DashboardTemplateVariablePreset], none_type, optional + + :param template_variables: List of template variables for this dashboard. + :type template_variables: [DashboardTemplateVariable], none_type, optional + + :param title: Title of the dashboard. + :type title: str + + :param url: The URL of the dashboard. + :type url: str, optional + + :param widgets: List of widgets to display on the dashboard. + :type widgets: [Widget] + """ + if author_handle is not unset: + kwargs["author_handle"] = author_handle + if author_name is not unset: + kwargs["author_name"] = author_name + if created_at is not unset: + kwargs["created_at"] = created_at + if default_timeframe is not unset: + kwargs["default_timeframe"] = default_timeframe + if description is not unset: + kwargs["description"] = description + if id is not unset: + kwargs["id"] = id + if is_read_only is not unset: + kwargs["is_read_only"] = is_read_only + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if notify_list is not unset: + kwargs["notify_list"] = notify_list + if reflow_type is not unset: + kwargs["reflow_type"] = reflow_type + if restricted_roles is not unset: + kwargs["restricted_roles"] = restricted_roles + if tabs is not unset: + kwargs["tabs"] = tabs + if tags is not unset: + kwargs["tags"] = tags + if template_variable_presets is not unset: + kwargs["template_variable_presets"] = template_variable_presets + if template_variables is not unset: + kwargs["template_variables"] = template_variables + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + + self_.layout_type = layout_type + self_.title = title + self_.widgets = widgets diff --git a/datadog_api_client/v1/model/dashboard_bulk_action_data.py b/datadog_api_client/v1/model/dashboard_bulk_action_data.py new file mode 100644 index 0000000000..8b4f6909cb --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_bulk_action_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_resource_type import DashboardResourceType + +class DashboardBulkActionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_resource_type import DashboardResourceType + return { + "id": (str,), + "type": (DashboardResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: DashboardResourceType, **kwargs): + """ + Dashboard bulk action request data. + + :param id: Dashboard resource ID. + :type id: str + + :param type: Dashboard resource type. + :type type: DashboardResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v1/model/dashboard_bulk_action_data_list.py b/datadog_api_client/v1/model/dashboard_bulk_action_data_list.py new file mode 100644 index 0000000000..b6c7c5bce4 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_bulk_action_data_list.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DashboardBulkActionDataList(ModelSimple): + """ + List of dashboard bulk action request data objects. + + + :type value: [DashboardBulkActionData] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_bulk_action_data import DashboardBulkActionData + return { + "value": ([DashboardBulkActionData],), + } diff --git a/datadog_api_client/v1/model/dashboard_bulk_delete_request.py b/datadog_api_client/v1/model/dashboard_bulk_delete_request.py new file mode 100644 index 0000000000..a927813dcd --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_bulk_delete_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_bulk_action_data_list import DashboardBulkActionDataList + +class DashboardBulkDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_bulk_action_data_list import DashboardBulkActionDataList + return { + "data": (DashboardBulkActionDataList,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DashboardBulkActionDataList, **kwargs): + """ + Dashboard bulk delete request body. + + :param data: List of dashboard bulk action request data objects. + :type data: DashboardBulkActionDataList + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v1/model/dashboard_default_timeframe_setting.py b/datadog_api_client/v1/model/dashboard_default_timeframe_setting.py new file mode 100644 index 0000000000..59e9a6693e --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_default_timeframe_setting.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DashboardDefaultTimeframeSetting(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The default timeframe applied when opening the dashboard. Set to ``null`` to clear the dashboard's default timeframe. + + :param type: Type of live timeframe. + :type type: DashboardLiveTimeframeType + + :param unit: Unit of the time span. + :type unit: WidgetLiveSpanUnit + + :param value: Value of the live timeframe span. + :type value: int + + :param _from: Start time in milliseconds since epoch. + :type _from: int + + :param to: End time in milliseconds since epoch. + :type to: int + """ + 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.v1.model.dashboard_live_timeframe import DashboardLiveTimeframe + from datadog_api_client.v1.model.dashboard_fixed_timeframe import DashboardFixedTimeframe + return { + "oneOf": [ + DashboardLiveTimeframe, + DashboardFixedTimeframe, + ], + } diff --git a/datadog_api_client/v1/model/dashboard_delete_response.py b/datadog_api_client/v1/model/dashboard_delete_response.py new file mode 100644 index 0000000000..5298d137b5 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_delete_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DashboardDeleteResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_dashboard_id": (str,), + } + attribute_map = { + "deleted_dashboard_id": "deleted_dashboard_id", + } + + def __init__(self_, deleted_dashboard_id: Union[str, UnsetType]=unset, **kwargs): + """ + Response from the delete dashboard call. + + :param deleted_dashboard_id: ID of the deleted dashboard. + :type deleted_dashboard_id: str, optional + """ + if deleted_dashboard_id is not unset: + kwargs["deleted_dashboard_id"] = deleted_dashboard_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/dashboard_fixed_timeframe.py b/datadog_api_client/v1/model/dashboard_fixed_timeframe.py new file mode 100644 index 0000000000..21d417a984 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_fixed_timeframe.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_fixed_timeframe_type import DashboardFixedTimeframeType + +class DashboardFixedTimeframe(ModelNormal): + validations = { + "_from": { + "inclusive_minimum": 0, + }, + "to": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_fixed_timeframe_type import DashboardFixedTimeframeType + return { + "_from": (int,), + "to": (int,), + "type": (DashboardFixedTimeframeType,), + } + attribute_map = { + "_from": "from", + "to": "to", + "type": "type", + } + + def __init__(self_, _from: int, to: int, type: DashboardFixedTimeframeType, **kwargs): + """ + A fixed dashboard timeframe. + + :param _from: Start time in milliseconds since epoch. + :type _from: int + + :param to: End time in milliseconds since epoch. + :type to: int + + :param type: Type of fixed timeframe. + :type type: DashboardFixedTimeframeType + """ + super().__init__(kwargs) + + + self_._from = _from + self_.to = to + self_.type = type diff --git a/datadog_api_client/v1/model/dashboard_fixed_timeframe_type.py b/datadog_api_client/v1/model/dashboard_fixed_timeframe_type.py new file mode 100644 index 0000000000..eb4d2510d3 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_fixed_timeframe_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardFixedTimeframeType(ModelSimple): + """ + Type of fixed timeframe. + + :param value: If omitted defaults to "fixed". Must be one of ["fixed"]. + :type value: str + """ + + allowed_values = { + "fixed", + } + FIXED: ClassVar["DashboardFixedTimeframeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardFixedTimeframeType.FIXED = DashboardFixedTimeframeType("fixed") diff --git a/datadog_api_client/v1/model/dashboard_global_time.py b/datadog_api_client/v1/model/dashboard_global_time.py new file mode 100644 index 0000000000..1ce47a3784 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_global_time.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_global_time_live_span import DashboardGlobalTimeLiveSpan + +class DashboardGlobalTime(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_global_time_live_span import DashboardGlobalTimeLiveSpan + return { + "live_span": (DashboardGlobalTimeLiveSpan,), + } + attribute_map = { + "live_span": "live_span", + } + + def __init__(self_, live_span: Union[DashboardGlobalTimeLiveSpan, UnsetType]=unset, **kwargs): + """ + Object containing the live span selection for the dashboard. + + :param live_span: Dashboard global time live_span selection + :type live_span: DashboardGlobalTimeLiveSpan, optional + """ + if live_span is not unset: + kwargs["live_span"] = live_span + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/dashboard_global_time_live_span.py b/datadog_api_client/v1/model/dashboard_global_time_live_span.py new file mode 100644 index 0000000000..297096dde7 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_global_time_live_span.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardGlobalTimeLiveSpan(ModelSimple): + """ + Dashboard global time live_span selection + + :param value: Must be one of ["15m", "1h", "4h", "1d", "2d", "1w", "1mo", "3mo"]. + :type value: str + """ + + allowed_values = { + "15m", + "1h", + "4h", + "1d", + "2d", + "1w", + "1mo", + "3mo", + } + PAST_FIFTEEN_MINUTES: ClassVar["DashboardGlobalTimeLiveSpan"] + PAST_ONE_HOUR: ClassVar["DashboardGlobalTimeLiveSpan"] + PAST_FOUR_HOURS: ClassVar["DashboardGlobalTimeLiveSpan"] + PAST_ONE_DAY: ClassVar["DashboardGlobalTimeLiveSpan"] + PAST_TWO_DAYS: ClassVar["DashboardGlobalTimeLiveSpan"] + PAST_ONE_WEEK: ClassVar["DashboardGlobalTimeLiveSpan"] + PAST_ONE_MONTH: ClassVar["DashboardGlobalTimeLiveSpan"] + PAST_THREE_MONTHS: ClassVar["DashboardGlobalTimeLiveSpan"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardGlobalTimeLiveSpan.PAST_FIFTEEN_MINUTES = DashboardGlobalTimeLiveSpan("15m") +DashboardGlobalTimeLiveSpan.PAST_ONE_HOUR = DashboardGlobalTimeLiveSpan("1h") +DashboardGlobalTimeLiveSpan.PAST_FOUR_HOURS = DashboardGlobalTimeLiveSpan("4h") +DashboardGlobalTimeLiveSpan.PAST_ONE_DAY = DashboardGlobalTimeLiveSpan("1d") +DashboardGlobalTimeLiveSpan.PAST_TWO_DAYS = DashboardGlobalTimeLiveSpan("2d") +DashboardGlobalTimeLiveSpan.PAST_ONE_WEEK = DashboardGlobalTimeLiveSpan("1w") +DashboardGlobalTimeLiveSpan.PAST_ONE_MONTH = DashboardGlobalTimeLiveSpan("1mo") +DashboardGlobalTimeLiveSpan.PAST_THREE_MONTHS = DashboardGlobalTimeLiveSpan("3mo") diff --git a/datadog_api_client/v1/model/dashboard_invite_type.py b/datadog_api_client/v1/model/dashboard_invite_type.py new file mode 100644 index 0000000000..dcd76022e1 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_invite_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardInviteType(ModelSimple): + """ + Type for shared dashboard invitation request body. + + :param value: If omitted defaults to "public_dashboard_invitation". Must be one of ["public_dashboard_invitation"]. + :type value: str + """ + + allowed_values = { + "public_dashboard_invitation", + } + PUBLIC_DASHBOARD_INVITATION: ClassVar["DashboardInviteType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardInviteType.PUBLIC_DASHBOARD_INVITATION = DashboardInviteType("public_dashboard_invitation") diff --git a/datadog_api_client/v1/model/dashboard_layout_type.py b/datadog_api_client/v1/model/dashboard_layout_type.py new file mode 100644 index 0000000000..037c409e94 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_layout_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardLayoutType(ModelSimple): + """ + Layout type of the dashboard. + + :param value: Must be one of ["ordered", "free"]. + :type value: str + """ + + allowed_values = { + "ordered", + "free", + } + ORDERED: ClassVar["DashboardLayoutType"] + FREE: ClassVar["DashboardLayoutType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardLayoutType.ORDERED = DashboardLayoutType("ordered") +DashboardLayoutType.FREE = DashboardLayoutType("free") diff --git a/datadog_api_client/v1/model/dashboard_list.py b/datadog_api_client/v1/model/dashboard_list.py new file mode 100644 index 0000000000..be129e268f --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_list.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.creator import Creator + +class DashboardList(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.creator import Creator + return { + "author": (Creator,), + "created": (datetime,), + "dashboard_count": (int,), + "id": (int,), + "is_favorite": (bool,), + "modified": (datetime,), + "name": (str,), + "type": (str,), + } + attribute_map = { + "author": "author", + "created": "created", + "dashboard_count": "dashboard_count", + "id": "id", + "is_favorite": "is_favorite", + "modified": "modified", + "name": "name", + "type": "type", + } + read_only_vars = { + "author", + "created", + "dashboard_count", + "id", + "is_favorite", + "modified", + "type", + } + + def __init__(self_, name: str, author: Union[Creator, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, dashboard_count: Union[int, UnsetType]=unset, id: Union[int, UnsetType]=unset, is_favorite: Union[bool, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Your Datadog Dashboards. + + :param author: Object describing the creator of the shared element. + :type author: Creator, optional + + :param created: Date of creation of the dashboard list. + :type created: datetime, optional + + :param dashboard_count: The number of dashboards in the list. + :type dashboard_count: int, optional + + :param id: The ID of the dashboard list. + :type id: int, optional + + :param is_favorite: Whether or not the list is in the favorites. + :type is_favorite: bool, optional + + :param modified: Date of last edition of the dashboard list. + :type modified: datetime, optional + + :param name: The name of the dashboard list. + :type name: str + + :param type: The type of dashboard list. + :type type: str, optional + """ + if author is not unset: + kwargs["author"] = author + if created is not unset: + kwargs["created"] = created + if dashboard_count is not unset: + kwargs["dashboard_count"] = dashboard_count + if id is not unset: + kwargs["id"] = id + if is_favorite is not unset: + kwargs["is_favorite"] = is_favorite + if modified is not unset: + kwargs["modified"] = modified + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v1/model/dashboard_list_delete_response.py b/datadog_api_client/v1/model/dashboard_list_delete_response.py new file mode 100644 index 0000000000..30db35e4f9 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_list_delete_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DashboardListDeleteResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_dashboard_list_id": (int,), + } + attribute_map = { + "deleted_dashboard_list_id": "deleted_dashboard_list_id", + } + + def __init__(self_, deleted_dashboard_list_id: Union[int, UnsetType]=unset, **kwargs): + """ + Deleted dashboard details. + + :param deleted_dashboard_list_id: ID of the deleted dashboard list. + :type deleted_dashboard_list_id: int, optional + """ + if deleted_dashboard_list_id is not unset: + kwargs["deleted_dashboard_list_id"] = deleted_dashboard_list_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/dashboard_list_list_response.py b/datadog_api_client/v1/model/dashboard_list_list_response.py new file mode 100644 index 0000000000..d7860c472d --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_list_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_list import DashboardList + +class DashboardListListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_list import DashboardList + return { + "dashboard_lists": ([DashboardList],), + } + attribute_map = { + "dashboard_lists": "dashboard_lists", + } + + def __init__(self_, dashboard_lists: Union[List[DashboardList], UnsetType]=unset, **kwargs): + """ + Information on your dashboard lists. + + :param dashboard_lists: List of all your dashboard lists. + :type dashboard_lists: [DashboardList], optional + """ + if dashboard_lists is not unset: + kwargs["dashboard_lists"] = dashboard_lists + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/dashboard_live_timeframe.py b/datadog_api_client/v1/model/dashboard_live_timeframe.py new file mode 100644 index 0000000000..e14a238315 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_live_timeframe.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_live_timeframe_type import DashboardLiveTimeframeType + from datadog_api_client.v1.model.widget_live_span_unit import WidgetLiveSpanUnit + +class DashboardLiveTimeframe(ModelNormal): + validations = { + "value": { + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_live_timeframe_type import DashboardLiveTimeframeType + from datadog_api_client.v1.model.widget_live_span_unit import WidgetLiveSpanUnit + return { + "type": (DashboardLiveTimeframeType,), + "unit": (WidgetLiveSpanUnit,), + "value": (int,), + } + attribute_map = { + "type": "type", + "unit": "unit", + "value": "value", + } + + def __init__(self_, type: DashboardLiveTimeframeType, unit: WidgetLiveSpanUnit, value: int, **kwargs): + """ + A live dashboard timeframe. + + :param type: Type of live timeframe. + :type type: DashboardLiveTimeframeType + + :param unit: Unit of the time span. + :type unit: WidgetLiveSpanUnit + + :param value: Value of the live timeframe span. + :type value: int + """ + super().__init__(kwargs) + + + self_.type = type + self_.unit = unit + self_.value = value diff --git a/datadog_api_client/v1/model/dashboard_live_timeframe_type.py b/datadog_api_client/v1/model/dashboard_live_timeframe_type.py new file mode 100644 index 0000000000..42d4ce60b6 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_live_timeframe_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardLiveTimeframeType(ModelSimple): + """ + Type of live timeframe. + + :param value: If omitted defaults to "live". Must be one of ["live"]. + :type value: str + """ + + allowed_values = { + "live", + } + LIVE: ClassVar["DashboardLiveTimeframeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardLiveTimeframeType.LIVE = DashboardLiveTimeframeType("live") diff --git a/datadog_api_client/v1/model/dashboard_reflow_type.py b/datadog_api_client/v1/model/dashboard_reflow_type.py new file mode 100644 index 0000000000..57767d48d7 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_reflow_type.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardReflowType(ModelSimple): + """ + Reflow type for a **new dashboard layout** dashboard. Set this only when layout type is 'ordered'. + If set to 'fixed', the dashboard expects all widgets to have a layout, and if it's set to 'auto', + widgets should not have layouts. + + :param value: Must be one of ["auto", "fixed"]. + :type value: str + """ + + allowed_values = { + "auto", + "fixed", + } + AUTO: ClassVar["DashboardReflowType"] + FIXED: ClassVar["DashboardReflowType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardReflowType.AUTO = DashboardReflowType("auto") +DashboardReflowType.FIXED = DashboardReflowType("fixed") diff --git a/datadog_api_client/v1/model/dashboard_resource_type.py b/datadog_api_client/v1/model/dashboard_resource_type.py new file mode 100644 index 0000000000..6ab355089e --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardResourceType(ModelSimple): + """ + Dashboard resource type. + + :param value: If omitted defaults to "dashboard". Must be one of ["dashboard"]. + :type value: str + """ + + allowed_values = { + "dashboard", + } + DASHBOARD: ClassVar["DashboardResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardResourceType.DASHBOARD = DashboardResourceType("dashboard") diff --git a/datadog_api_client/v1/model/dashboard_restore_request.py b/datadog_api_client/v1/model/dashboard_restore_request.py new file mode 100644 index 0000000000..c59d36330e --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_restore_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_bulk_action_data_list import DashboardBulkActionDataList + +class DashboardRestoreRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_bulk_action_data_list import DashboardBulkActionDataList + return { + "data": (DashboardBulkActionDataList,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DashboardBulkActionDataList, **kwargs): + """ + Dashboard restore request body. + + :param data: List of dashboard bulk action request data objects. + :type data: DashboardBulkActionDataList + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v1/model/dashboard_share_type.py b/datadog_api_client/v1/model/dashboard_share_type.py new file mode 100644 index 0000000000..41ba45c0e5 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_share_type.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardShareType(ModelSimple): + """ + Type of sharing access (either open to anyone who has the public URL or invite-only). + + :param value: Must be one of ["open", "invite", "embed"]. + :type value: str + """ + + allowed_values = { + "open", + "invite", + "embed", + } + OPEN: ClassVar["DashboardShareType"] + INVITE: ClassVar["DashboardShareType"] + EMBED: ClassVar["DashboardShareType"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardShareType.OPEN = DashboardShareType("open") +DashboardShareType.INVITE = DashboardShareType("invite") +DashboardShareType.EMBED = DashboardShareType("embed") diff --git a/datadog_api_client/v1/model/dashboard_summary.py b/datadog_api_client/v1/model/dashboard_summary.py new file mode 100644 index 0000000000..147a19530c --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_summary.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_summary_definition import DashboardSummaryDefinition + +class DashboardSummary(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_summary_definition import DashboardSummaryDefinition + return { + "dashboards": ([DashboardSummaryDefinition],), + } + attribute_map = { + "dashboards": "dashboards", + } + + def __init__(self_, dashboards: Union[List[DashboardSummaryDefinition], UnsetType]=unset, **kwargs): + """ + Dashboard summary response. + + :param dashboards: List of dashboard definitions. + :type dashboards: [DashboardSummaryDefinition], optional + """ + if dashboards is not unset: + kwargs["dashboards"] = dashboards + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/dashboard_summary_definition.py b/datadog_api_client/v1/model/dashboard_summary_definition.py new file mode 100644 index 0000000000..7d7e09ea79 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_summary_definition.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_layout_type import DashboardLayoutType + +class DashboardSummaryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_layout_type import DashboardLayoutType + return { + "author_handle": (str,), + "created_at": (datetime,), + "description": (str, none_type), + "id": (str,), + "is_read_only": (bool,), + "layout_type": (DashboardLayoutType,), + "modified_at": (datetime,), + "title": (str,), + "url": (str,), + } + attribute_map = { + "author_handle": "author_handle", + "created_at": "created_at", + "description": "description", + "id": "id", + "is_read_only": "is_read_only", + "layout_type": "layout_type", + "modified_at": "modified_at", + "title": "title", + "url": "url", + } + + def __init__(self_, author_handle: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_read_only: Union[bool, UnsetType]=unset, layout_type: Union[DashboardLayoutType, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, title: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Dashboard definition. + + :param author_handle: Identifier of the dashboard author. + :type author_handle: str, optional + + :param created_at: Creation date of the dashboard. + :type created_at: datetime, optional + + :param description: Description of the dashboard. + :type description: str, none_type, optional + + :param id: Dashboard identifier. + :type id: str, optional + + :param is_read_only: Whether this dashboard is read-only. If True, only the author and admins can make changes to it. + + This property is deprecated; please use the `Restriction Policies API `_ instead to manage write authorization for individual dashboards. **Deprecated**. + :type is_read_only: bool, optional + + :param layout_type: Layout type of the dashboard. + :type layout_type: DashboardLayoutType, optional + + :param modified_at: Modification date of the dashboard. + :type modified_at: datetime, optional + + :param title: Title of the dashboard. + :type title: str, optional + + :param url: URL of the dashboard. + :type url: str, optional + """ + if author_handle is not unset: + kwargs["author_handle"] = author_handle + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if id is not unset: + kwargs["id"] = id + if is_read_only is not unset: + kwargs["is_read_only"] = is_read_only + if layout_type is not unset: + kwargs["layout_type"] = layout_type + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if title is not unset: + kwargs["title"] = title + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/dashboard_tab.py b/datadog_api_client/v1/model/dashboard_tab.py new file mode 100644 index 0000000000..33971f38c0 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_tab.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DashboardTab(ModelNormal): + validations = { + "name": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "id": (UUID,), + "name": (str,), + "widget_ids": ([int],), + } + attribute_map = { + "id": "id", + "name": "name", + "widget_ids": "widget_ids", + } + + def __init__(self_, id: UUID, name: str, widget_ids: List[int], **kwargs): + """ + Dashboard tab for organizing widgets. + + :param id: UUID of the tab. + :type id: UUID + + :param name: Name of the tab. + :type name: str + + :param widget_ids: List of widget IDs belonging to this tab. The backend also accepts positional references in @N format (1-indexed) as a convenience for Terraform and other declarative tools. + :type widget_ids: [int] + """ + super().__init__(kwargs) + + + self_.id = id + self_.name = name + self_.widget_ids = widget_ids diff --git a/datadog_api_client/v1/model/dashboard_template_variable.py b/datadog_api_client/v1/model/dashboard_template_variable.py new file mode 100644 index 0000000000..e422d236ce --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_template_variable.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DashboardTemplateVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "available_values": ([str], none_type), + "default": (str, none_type), + "defaults": ([str],), + "name": (str,), + "prefix": (str, none_type), + "type": (str, none_type), + } + attribute_map = { + "available_values": "available_values", + "default": "default", + "defaults": "defaults", + "name": "name", + "prefix": "prefix", + "type": "type", + } + + def __init__(self_, name: str, available_values: Union[List[str], none_type, UnsetType]=unset, default: Union[str, none_type, UnsetType]=unset, defaults: Union[List[str], UnsetType]=unset, prefix: Union[str, none_type, UnsetType]=unset, type: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Template variable. + + :param available_values: The list of values that the template variable drop-down is limited to. + :type available_values: [str], none_type, optional + + :param default: (deprecated) The default value for the template variable on dashboard load. Cannot be used in conjunction with ``defaults``. **Deprecated**. + :type default: str, none_type, optional + + :param defaults: One or many default values for template variables on load. If more than one default is specified, they will be unioned together with ``OR``. Cannot be used in conjunction with ``default``. + :type defaults: [str], optional + + :param name: The name of the variable. + :type name: str + + :param prefix: The tag prefix associated with the variable. Only tags with this prefix appear in the variable drop-down. + :type prefix: str, none_type, optional + + :param type: The type of variable. This is to differentiate between filter variables (interpolated in query) and group by variables (interpolated into group by). + :type type: str, none_type, optional + """ + if available_values is not unset: + kwargs["available_values"] = available_values + if default is not unset: + kwargs["default"] = default + if defaults is not unset: + kwargs["defaults"] = defaults + if prefix is not unset: + kwargs["prefix"] = prefix + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v1/model/dashboard_template_variable_preset.py b/datadog_api_client/v1/model/dashboard_template_variable_preset.py new file mode 100644 index 0000000000..01acbcad3a --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_template_variable_preset.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_template_variable_preset_value import DashboardTemplateVariablePresetValue + +class DashboardTemplateVariablePreset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_template_variable_preset_value import DashboardTemplateVariablePresetValue + return { + "name": (str,), + "template_variables": ([DashboardTemplateVariablePresetValue],), + } + attribute_map = { + "name": "name", + "template_variables": "template_variables", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, template_variables: Union[List[DashboardTemplateVariablePresetValue], UnsetType]=unset, **kwargs): + """ + Template variables saved views. + + :param name: The name of the variable. + :type name: str, optional + + :param template_variables: List of variables. + :type template_variables: [DashboardTemplateVariablePresetValue], optional + """ + if name is not unset: + kwargs["name"] = name + if template_variables is not unset: + kwargs["template_variables"] = template_variables + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/dashboard_template_variable_preset_value.py b/datadog_api_client/v1/model/dashboard_template_variable_preset_value.py new file mode 100644 index 0000000000..870455e0de --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_template_variable_preset_value.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DashboardTemplateVariablePresetValue(ModelNormal): + validations = { + "values": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + "values": ([str],), + } + attribute_map = { + "name": "name", + "value": "value", + "values": "values", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, values: Union[List[str], UnsetType]=unset, **kwargs): + """ + Template variables saved views. + + :param name: The name of the variable. + :type name: str, optional + + :param value: (deprecated) The value of the template variable within the saved view. Cannot be used in conjunction with ``values``. **Deprecated**. + :type value: str, optional + + :param values: One or many template variable values within the saved view, which will be unioned together using ``OR`` if more than one is specified. Cannot be used in conjunction with ``value``. + :type values: [str], optional + """ + if name is not unset: + kwargs["name"] = name + if value is not unset: + kwargs["value"] = value + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/dashboard_type.py b/datadog_api_client/v1/model/dashboard_type.py new file mode 100644 index 0000000000..ef65ca1254 --- /dev/null +++ b/datadog_api_client/v1/model/dashboard_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardType(ModelSimple): + """ + The type of the associated private dashboard. + + :param value: Must be one of ["custom_timeboard", "custom_screenboard"]. + :type value: str + """ + + allowed_values = { + "custom_timeboard", + "custom_screenboard", + } + CUSTOM_TIMEBOARD: ClassVar["DashboardType"] + CUSTOM_SCREENBOARD: ClassVar["DashboardType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardType.CUSTOM_TIMEBOARD = DashboardType("custom_timeboard") +DashboardType.CUSTOM_SCREENBOARD = DashboardType("custom_screenboard") diff --git a/datadog_api_client/v1/model/data_projection_query.py b/datadog_api_client/v1/model/data_projection_query.py new file mode 100644 index 0000000000..1a57b95703 --- /dev/null +++ b/datadog_api_client/v1/model/data_projection_query.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DataProjectionQuery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "data_source": (str,), + "indexes": ([str],), + "query_string": (str,), + "storage": (str,), + } + attribute_map = { + "data_source": "data_source", + "indexes": "indexes", + "query_string": "query_string", + "storage": "storage", + } + + def __init__(self_, data_source: str, query_string: str, indexes: Union[List[str], UnsetType]=unset, storage: Union[str, UnsetType]=unset, **kwargs): + """ + Query configuration for a data projection request. + + :param data_source: Data source for the query. + :type data_source: str + + :param indexes: List of indexes to query. + :type indexes: [str], optional + + :param query_string: The query string to filter events. + :type query_string: str + + :param storage: Storage location for the query. + :type storage: str, optional + """ + if indexes is not unset: + kwargs["indexes"] = indexes + if storage is not unset: + kwargs["storage"] = storage + super().__init__(kwargs) + + + self_.data_source = data_source + self_.query_string = query_string diff --git a/datadog_api_client/v1/model/data_projection_request_type.py b/datadog_api_client/v1/model/data_projection_request_type.py new file mode 100644 index 0000000000..ad7a267bb4 --- /dev/null +++ b/datadog_api_client/v1/model/data_projection_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DataProjectionRequestType(ModelSimple): + """ + Type of a data projection request. + + :param value: If omitted defaults to "data_projection". Must be one of ["data_projection"]. + :type value: str + """ + + allowed_values = { + "data_projection", + } + DATA_PROJECTION: ClassVar["DataProjectionRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DataProjectionRequestType.DATA_PROJECTION = DataProjectionRequestType("data_projection") diff --git a/datadog_api_client/v1/model/dataset_list_query.py b/datadog_api_client/v1/model/dataset_list_query.py new file mode 100644 index 0000000000..3af586e02d --- /dev/null +++ b/datadog_api_client/v1/model/dataset_list_query.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dataset_list_query_data_source_type import DatasetListQueryDataSourceType + from datadog_api_client.v1.model.published_dataset_provider import PublishedDatasetProvider + from datadog_api_client.v1.model.dataset_list_query_sort import DatasetListQuerySort + +class DatasetListQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dataset_list_query_data_source_type import DatasetListQueryDataSourceType + from datadog_api_client.v1.model.published_dataset_provider import PublishedDatasetProvider + from datadog_api_client.v1.model.dataset_list_query_sort import DatasetListQuerySort + return { + "data_source": (DatasetListQueryDataSourceType,), + "dataset_id": (str,), + "dataset_provider": (PublishedDatasetProvider,), + "filter": (str,), + "limit": (int,), + "sort": (DatasetListQuerySort,), + } + attribute_map = { + "data_source": "data_source", + "dataset_id": "dataset_id", + "dataset_provider": "dataset_provider", + "filter": "filter", + "limit": "limit", + "sort": "sort", + } + + def __init__(self_, data_source: DatasetListQueryDataSourceType, dataset_id: str, dataset_provider: PublishedDatasetProvider, filter: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, sort: Union[DatasetListQuerySort, UnsetType]=unset, **kwargs): + """ + Query that lists the rows of a published dataset (a DDSQL query) without aggregation. + + :param data_source: Identifies this as a published-dataset list query. + :type data_source: DatasetListQueryDataSourceType + + :param dataset_id: ID of the published dataset to query. + :type dataset_id: str + + :param dataset_provider: Product page that published the dataset queried by a ``DatasetListQuery``. ``ddsql_query`` is the only provider currently supported for host map widgets. + :type dataset_provider: PublishedDatasetProvider + + :param filter: Filter applied to the dataset's rows, using events-style search syntax. + :type filter: str, optional + + :param limit: Maximum number of rows to return from the dataset query. + :type limit: int, optional + + :param sort: Sort configuration for a ``DatasetListQuery``. + :type sort: DatasetListQuerySort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + + self_.data_source = data_source + self_.dataset_id = dataset_id + self_.dataset_provider = dataset_provider diff --git a/datadog_api_client/v1/model/dataset_list_query_data_source_type.py b/datadog_api_client/v1/model/dataset_list_query_data_source_type.py new file mode 100644 index 0000000000..1af20f4a5c --- /dev/null +++ b/datadog_api_client/v1/model/dataset_list_query_data_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DatasetListQueryDataSourceType(ModelSimple): + """ + Identifies this as a published-dataset list query. + + :param value: If omitted defaults to "dataset". Must be one of ["dataset"]. + :type value: str + """ + + allowed_values = { + "dataset", + } + DATASET: ClassVar["DatasetListQueryDataSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DatasetListQueryDataSourceType.DATASET = DatasetListQueryDataSourceType("dataset") diff --git a/datadog_api_client/v1/model/dataset_list_query_sort.py b/datadog_api_client/v1/model/dataset_list_query_sort.py new file mode 100644 index 0000000000..5e7351e030 --- /dev/null +++ b/datadog_api_client/v1/model/dataset_list_query_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dataset_list_query_sort_field import DatasetListQuerySortField + +class DatasetListQuerySort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dataset_list_query_sort_field import DatasetListQuerySortField + return { + "fields": ([DatasetListQuerySortField],), + } + attribute_map = { + "fields": "fields", + } + + def __init__(self_, fields: List[DatasetListQuerySortField], **kwargs): + """ + Sort configuration for a ``DatasetListQuery``. + + :param fields: List of fields to sort the rows by, applied in order. + :type fields: [DatasetListQuerySortField] + """ + super().__init__(kwargs) + + + self_.fields = fields diff --git a/datadog_api_client/v1/model/dataset_list_query_sort_field.py b/datadog_api_client/v1/model/dataset_list_query_sort_field.py new file mode 100644 index 0000000000..d648b87fce --- /dev/null +++ b/datadog_api_client/v1/model/dataset_list_query_sort_field.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + +class DatasetListQuerySortField(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + return { + "name": (str,), + "order": (QuerySortOrder,), + } + attribute_map = { + "name": "name", + "order": "order", + } + + def __init__(self_, name: str, order: QuerySortOrder, **kwargs): + """ + A single sort directive for a ``DatasetListQuery``. + + :param name: Name of the field to sort on. + :type name: str + + :param order: Direction of sort. + :type order: QuerySortOrder + """ + super().__init__(kwargs) + + + self_.name = name + self_.order = order diff --git a/datadog_api_client/v1/model/delete_shared_dashboard_response.py b/datadog_api_client/v1/model/delete_shared_dashboard_response.py new file mode 100644 index 0000000000..c32847f412 --- /dev/null +++ b/datadog_api_client/v1/model/delete_shared_dashboard_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeleteSharedDashboardResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_public_dashboard_token": (str,), + } + attribute_map = { + "deleted_public_dashboard_token": "deleted_public_dashboard_token", + } + + def __init__(self_, deleted_public_dashboard_token: Union[str, UnsetType]=unset, **kwargs): + """ + Response containing token of deleted shared dashboard. + + :param deleted_public_dashboard_token: Token associated with the shared dashboard that was revoked. + :type deleted_public_dashboard_token: str, optional + """ + if deleted_public_dashboard_token is not unset: + kwargs["deleted_public_dashboard_token"] = deleted_public_dashboard_token + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/deleted_monitor.py b/datadog_api_client/v1/model/deleted_monitor.py new file mode 100644 index 0000000000..a77e61f354 --- /dev/null +++ b/datadog_api_client/v1/model/deleted_monitor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeletedMonitor(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_monitor_id": (int,), + } + attribute_map = { + "deleted_monitor_id": "deleted_monitor_id", + } + + def __init__(self_, deleted_monitor_id: Union[int, UnsetType]=unset, **kwargs): + """ + Response from the delete monitor call. + + :param deleted_monitor_id: ID of the deleted monitor. + :type deleted_monitor_id: int, optional + """ + if deleted_monitor_id is not unset: + kwargs["deleted_monitor_id"] = deleted_monitor_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/distribution_point.py b/datadog_api_client/v1/model/distribution_point.py new file mode 100644 index 0000000000..64420095d2 --- /dev/null +++ b/datadog_api_client/v1/model/distribution_point.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DistributionPoint(ModelSimple): + """ + Array of distribution points. + + + :type value: [float, [float]] + """ + + + validations = { + "value": { + "max_items": 2, + "min_items": 2, + }, + } + + @cached_property + def openapi_types(_): + return { + "value": ([float, [float]],), + } diff --git a/datadog_api_client/v1/model/distribution_points_content_encoding.py b/datadog_api_client/v1/model/distribution_points_content_encoding.py new file mode 100644 index 0000000000..aee6fa4908 --- /dev/null +++ b/datadog_api_client/v1/model/distribution_points_content_encoding.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DistributionPointsContentEncoding(ModelSimple): + """ + HTTP header used to compress the media-type. + + :param value: If omitted defaults to "deflate". Must be one of ["deflate"]. + :type value: str + """ + + allowed_values = { + "deflate", + } + DEFLATE: ClassVar["DistributionPointsContentEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DistributionPointsContentEncoding.DEFLATE = DistributionPointsContentEncoding("deflate") diff --git a/datadog_api_client/v1/model/distribution_points_payload.py b/datadog_api_client/v1/model/distribution_points_payload.py new file mode 100644 index 0000000000..5a3ddf94c5 --- /dev/null +++ b/datadog_api_client/v1/model/distribution_points_payload.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.distribution_points_series import DistributionPointsSeries + +class DistributionPointsPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.distribution_points_series import DistributionPointsSeries + return { + "series": ([DistributionPointsSeries],), + } + attribute_map = { + "series": "series", + } + + def __init__(self_, series: List[DistributionPointsSeries], **kwargs): + """ + The distribution points payload. + + :param series: A list of distribution points series to submit to Datadog. + :type series: [DistributionPointsSeries] + """ + super().__init__(kwargs) + + + self_.series = series diff --git a/datadog_api_client/v1/model/distribution_points_series.py b/datadog_api_client/v1/model/distribution_points_series.py new file mode 100644 index 0000000000..ca45c34eeb --- /dev/null +++ b/datadog_api_client/v1/model/distribution_points_series.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.distribution_point import DistributionPoint + from datadog_api_client.v1.model.distribution_points_type import DistributionPointsType + +class DistributionPointsSeries(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.distribution_point import DistributionPoint + from datadog_api_client.v1.model.distribution_points_type import DistributionPointsType + return { + "host": (str,), + "metric": (str,), + "points": ([DistributionPoint],), + "tags": ([str],), + "type": (DistributionPointsType,), + } + attribute_map = { + "host": "host", + "metric": "metric", + "points": "points", + "tags": "tags", + "type": "type", + } + + def __init__(self_, metric: str, points: List[DistributionPoint], host: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[DistributionPointsType, UnsetType]=unset, **kwargs): + """ + A distribution points metric to submit to Datadog. + + :param host: The name of the host that produced the distribution point metric. + :type host: str, optional + + :param metric: The name of the distribution points metric. + :type metric: str + + :param points: Points relating to the distribution point metric. All points must be tuples with timestamp and a list of values (cannot be a string). Timestamps should be in POSIX time in seconds. + :type points: [DistributionPoint] + + :param tags: A list of tags associated with the distribution point metric. + :type tags: [str], optional + + :param type: The type of the distribution point. + :type type: DistributionPointsType, optional + """ + if host is not unset: + kwargs["host"] = host + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.metric = metric + self_.points = points diff --git a/datadog_api_client/v1/model/distribution_points_type.py b/datadog_api_client/v1/model/distribution_points_type.py new file mode 100644 index 0000000000..42e760007a --- /dev/null +++ b/datadog_api_client/v1/model/distribution_points_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DistributionPointsType(ModelSimple): + """ + The type of the distribution point. + + :param value: If omitted defaults to "distribution". Must be one of ["distribution"]. + :type value: str + """ + + allowed_values = { + "distribution", + } + DISTRIBUTION: ClassVar["DistributionPointsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DistributionPointsType.DISTRIBUTION = DistributionPointsType("distribution") diff --git a/datadog_api_client/v1/model/distribution_widget_definition.py b/datadog_api_client/v1/model/distribution_widget_definition.py new file mode 100644 index 0000000000..8da3598270 --- /dev/null +++ b/datadog_api_client/v1/model/distribution_widget_definition.py @@ -0,0 +1,172 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_marker import WidgetMarker + from datadog_api_client.v1.model.distribution_widget_request import DistributionWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.distribution_widget_definition_type import DistributionWidgetDefinitionType + from datadog_api_client.v1.model.distribution_widget_x_axis import DistributionWidgetXAxis + from datadog_api_client.v1.model.distribution_widget_y_axis import DistributionWidgetYAxis + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class DistributionWidgetDefinition(ModelNormal): + validations = { + "requests": { + "max_items": 1, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_marker import WidgetMarker + from datadog_api_client.v1.model.distribution_widget_request import DistributionWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.distribution_widget_definition_type import DistributionWidgetDefinitionType + from datadog_api_client.v1.model.distribution_widget_x_axis import DistributionWidgetXAxis + from datadog_api_client.v1.model.distribution_widget_y_axis import DistributionWidgetYAxis + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "legend_size": (str,), + "markers": ([WidgetMarker],), + "requests": ([DistributionWidgetRequest],), + "show_legend": (bool,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (DistributionWidgetDefinitionType,), + "xaxis": (DistributionWidgetXAxis,), + "yaxis": (DistributionWidgetYAxis,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "legend_size": "legend_size", + "markers": "markers", + "requests": "requests", + "show_legend": "show_legend", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "xaxis": "xaxis", + "yaxis": "yaxis", + } + + def __init__(self_, requests: List[DistributionWidgetRequest], type: DistributionWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, legend_size: Union[str, UnsetType]=unset, markers: Union[List[WidgetMarker], UnsetType]=unset, show_legend: Union[bool, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, xaxis: Union[DistributionWidgetXAxis, UnsetType]=unset, yaxis: Union[DistributionWidgetYAxis, UnsetType]=unset, **kwargs): + """ + The Distribution visualization is another way of showing metrics + aggregated across one or several tags, such as hosts. + Unlike the heat map, a distribution graph’s x-axis is quantity rather than time. + + :param custom_links: A list of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param legend_size: (Deprecated) The widget legend was replaced by a tooltip and sidebar. **Deprecated**. + :type legend_size: str, optional + + :param markers: List of markers. + :type markers: [WidgetMarker], optional + + :param requests: Array of one request object to display in the widget. + + See the dedicated `Request JSON schema documentation `_ + to learn how to build the ``REQUEST_SCHEMA``. + :type requests: [DistributionWidgetRequest] + + :param show_legend: (Deprecated) The widget legend was replaced by a tooltip and sidebar. **Deprecated**. + :type show_legend: bool, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the distribution widget. + :type type: DistributionWidgetDefinitionType + + :param xaxis: X Axis controls for the distribution widget. + :type xaxis: DistributionWidgetXAxis, optional + + :param yaxis: Y Axis controls for the distribution widget. + :type yaxis: DistributionWidgetYAxis, optional + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if legend_size is not unset: + kwargs["legend_size"] = legend_size + if markers is not unset: + kwargs["markers"] = markers + if show_legend is not unset: + kwargs["show_legend"] = show_legend + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + if xaxis is not unset: + kwargs["xaxis"] = xaxis + if yaxis is not unset: + kwargs["yaxis"] = yaxis + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/distribution_widget_definition_type.py b/datadog_api_client/v1/model/distribution_widget_definition_type.py new file mode 100644 index 0000000000..49c58493ee --- /dev/null +++ b/datadog_api_client/v1/model/distribution_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DistributionWidgetDefinitionType(ModelSimple): + """ + Type of the distribution widget. + + :param value: If omitted defaults to "distribution". Must be one of ["distribution"]. + :type value: str + """ + + allowed_values = { + "distribution", + } + DISTRIBUTION: ClassVar["DistributionWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DistributionWidgetDefinitionType.DISTRIBUTION = DistributionWidgetDefinitionType("distribution") diff --git a/datadog_api_client/v1/model/distribution_widget_histogram_request_query.py b/datadog_api_client/v1/model/distribution_widget_histogram_request_query.py new file mode 100644 index 0000000000..98581bae2a --- /dev/null +++ b/datadog_api_client/v1/model/distribution_widget_histogram_request_query.py @@ -0,0 +1,124 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DistributionWidgetHistogramRequestQuery(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Query definition for Distribution Widget Histogram Request + + :param aggregator: The aggregation methods available for metrics queries. + :type aggregator: FormulaAndFunctionMetricAggregation, optional + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data source for metrics queries. + :type data_source: FormulaAndFunctionMetricDataSource + + :param name: Name of the query for use in formulas. + :type name: str + + :param query: Metrics query definition. + :type query: str + + :param semantic_mode: Semantic mode for metrics queries. This determines how metrics from different sources are combined or displayed. + :type semantic_mode: FormulaAndFunctionMetricSemanticMode, optional + + :param compute: Compute options. + :type compute: FormulaAndFunctionEventQueryDefinitionCompute + + :param group_by: Group by configuration for a formula and functions events query. Accepts either a list of facet objects or a flat object that specifies a list of facet fields. + :type group_by: FormulaAndFunctionEventQueryGroupByConfig, optional + + :param indexes: An array of index names to query in the stream. Omit or use `[]` to query all indexes at once. + :type indexes: [str], optional + + :param search: Search options. + :type search: FormulaAndFunctionEventQueryDefinitionSearch, optional + + :param storage: Option for storage location. Feature in Private Beta. + :type storage: str, optional + + :param env: APM environment. + :type env: str + + :param operation_name: Name of operation on service. + :type operation_name: str, optional + + :param primary_tag_name: Name of the second primary tag used within APM. Required when `primary_tag_value` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog + :type primary_tag_name: str, optional + + :param primary_tag_value: Value of the second primary tag by which to filter APM data. `primary_tag_name` must also be specified. + :type primary_tag_value: str, optional + + :param resource_name: APM resource name. + :type resource_name: str, optional + + :param service: APM service name. + :type service: str + + :param stat: APM resource stat name. + :type stat: FormulaAndFunctionApmResourceStatName + + :param operation_mode: Optional operation mode to aggregate across operation names. + :type operation_mode: str, optional + + :param peer_tags: Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, peer.s3.bucket, etc.). + :type peer_tags: [str], optional + + :param query_filter: Additional filters for the query using metrics query syntax (e.g., env, primary_tag). + :type query_filter: str, optional + + :param resource_hash: The hash of a specific resource to filter by. + :type resource_hash: str, optional + + :param span_kind: Describes the relationship between the span, its parents, and its children in a trace. + :type span_kind: FormulaAndFunctionApmMetricsSpanKind, 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.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + return { + "oneOf": [ + FormulaAndFunctionMetricQueryDefinition, + FormulaAndFunctionEventQueryDefinition, + FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, + ], + } diff --git a/datadog_api_client/v1/model/distribution_widget_request.py b/datadog_api_client/v1/model/distribution_widget_request.py new file mode 100644 index 0000000000..b8ed27eb21 --- /dev/null +++ b/datadog_api_client/v1/model/distribution_widget_request.py @@ -0,0 +1,183 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.apm_stats_query_definition import ApmStatsQueryDefinition + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.distribution_widget_histogram_request_query import DistributionWidgetHistogramRequestQuery + from datadog_api_client.v1.model.widget_histogram_request_type import WidgetHistogramRequestType + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_style import WidgetStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class DistributionWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.apm_stats_query_definition import ApmStatsQueryDefinition + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.distribution_widget_histogram_request_query import DistributionWidgetHistogramRequestQuery + from datadog_api_client.v1.model.widget_histogram_request_type import WidgetHistogramRequestType + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_style import WidgetStyle + return { + "apm_query": (LogQueryDefinition,), + "apm_stats_query": (ApmStatsQueryDefinition,), + "event_query": (LogQueryDefinition,), + "formulas": ([WidgetFormula],), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "query": (DistributionWidgetHistogramRequestQuery,), + "request_type": (WidgetHistogramRequestType,), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + "style": (WidgetStyle,), + } + attribute_map = { + "apm_query": "apm_query", + "apm_stats_query": "apm_stats_query", + "event_query": "event_query", + "formulas": "formulas", + "log_query": "log_query", + "network_query": "network_query", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "queries": "queries", + "query": "query", + "request_type": "request_type", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + "style": "style", + } + + def __init__(self_, apm_query: Union[LogQueryDefinition, UnsetType]=unset, apm_stats_query: Union[ApmStatsQueryDefinition, UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, query: Union[DistributionWidgetHistogramRequestQuery, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, UnsetType]=unset, request_type: Union[WidgetHistogramRequestType, UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, style: Union[WidgetStyle, UnsetType]=unset, **kwargs): + """ + Updated distribution widget. + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param apm_stats_query: The APM stats query for table and distributions widgets. + :type apm_stats_query: ApmStatsQueryDefinition, optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Widget query. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param query: Query definition for Distribution Widget Histogram Request + :type query: DistributionWidgetHistogramRequestQuery, optional + + :param request_type: Request type for distribution of point values for distribution metrics. Query space aggregator must be ``histogram:`` for points distributions. + :type request_type: WidgetHistogramRequestType, optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param style: Widget style definition. + :type style: WidgetStyle, optional + """ + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if apm_stats_query is not unset: + kwargs["apm_stats_query"] = apm_stats_query + if event_query is not unset: + kwargs["event_query"] = event_query + if formulas is not unset: + kwargs["formulas"] = formulas + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if query is not unset: + kwargs["query"] = query + if request_type is not unset: + kwargs["request_type"] = request_type + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/distribution_widget_x_axis.py b/datadog_api_client/v1/model/distribution_widget_x_axis.py new file mode 100644 index 0000000000..1b1ef3573a --- /dev/null +++ b/datadog_api_client/v1/model/distribution_widget_x_axis.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DistributionWidgetXAxis(ModelNormal): + validations = { + "num_buckets": { + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "include_zero": (bool,), + "max": (str,), + "min": (str,), + "num_buckets": (int,), + "scale": (str,), + } + attribute_map = { + "include_zero": "include_zero", + "max": "max", + "min": "min", + "num_buckets": "num_buckets", + "scale": "scale", + } + + def __init__(self_, include_zero: Union[bool, UnsetType]=unset, max: Union[str, UnsetType]=unset, min: Union[str, UnsetType]=unset, num_buckets: Union[int, UnsetType]=unset, scale: Union[str, UnsetType]=unset, **kwargs): + """ + X Axis controls for the distribution widget. + + :param include_zero: True includes zero. + :type include_zero: bool, optional + + :param max: Specifies maximum value to show on the x-axis. It takes a number, percentile (p90 === 90th percentile), or auto for default behavior. + :type max: str, optional + + :param min: Specifies minimum value to show on the x-axis. It takes a number, percentile (p90 === 90th percentile), or auto for default behavior. + :type min: str, optional + + :param num_buckets: Number of value buckets to target, also known as the resolution of the value bins. + :type num_buckets: int, optional + + :param scale: Specifies the scale type. Possible values are ``linear``. + :type scale: str, optional + """ + if include_zero is not unset: + kwargs["include_zero"] = include_zero + if max is not unset: + kwargs["max"] = max + if min is not unset: + kwargs["min"] = min + if num_buckets is not unset: + kwargs["num_buckets"] = num_buckets + if scale is not unset: + kwargs["scale"] = scale + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/distribution_widget_y_axis.py b/datadog_api_client/v1/model/distribution_widget_y_axis.py new file mode 100644 index 0000000000..7a2834e0d4 --- /dev/null +++ b/datadog_api_client/v1/model/distribution_widget_y_axis.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DistributionWidgetYAxis(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_zero": (bool,), + "label": (str,), + "max": (str,), + "min": (str,), + "scale": (str,), + } + attribute_map = { + "include_zero": "include_zero", + "label": "label", + "max": "max", + "min": "min", + "scale": "scale", + } + + def __init__(self_, include_zero: Union[bool, UnsetType]=unset, label: Union[str, UnsetType]=unset, max: Union[str, UnsetType]=unset, min: Union[str, UnsetType]=unset, scale: Union[str, UnsetType]=unset, **kwargs): + """ + Y Axis controls for the distribution widget. + + :param include_zero: True includes zero. + :type include_zero: bool, optional + + :param label: The label of the axis to display on the graph. + :type label: str, optional + + :param max: Specifies the maximum value to show on the y-axis. It takes a number, or auto for default behavior. + :type max: str, optional + + :param min: Specifies minimum value to show on the y-axis. It takes a number, or auto for default behavior. + :type min: str, optional + + :param scale: Specifies the scale type. Possible values are ``linear`` or ``log``. + :type scale: str, optional + """ + if include_zero is not unset: + kwargs["include_zero"] = include_zero + if label is not unset: + kwargs["label"] = label + if max is not unset: + kwargs["max"] = max + if min is not unset: + kwargs["min"] = min + if scale is not unset: + kwargs["scale"] = scale + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/downtime.py b/datadog_api_client/v1/model/downtime.py new file mode 100644 index 0000000000..813125e564 --- /dev/null +++ b/datadog_api_client/v1/model/downtime.py @@ -0,0 +1,226 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.downtime_child import DowntimeChild + from datadog_api_client.v1.model.notify_end_state import NotifyEndState + from datadog_api_client.v1.model.notify_end_type import NotifyEndType + from datadog_api_client.v1.model.downtime_recurrence import DowntimeRecurrence + +class Downtime(ModelNormal): + validations = { + "creator_id": { + "inclusive_maximum": 2147483647, + }, + "downtime_type": { + "inclusive_maximum": 2147483647, + }, + "updater_id": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.downtime_child import DowntimeChild + from datadog_api_client.v1.model.notify_end_state import NotifyEndState + from datadog_api_client.v1.model.notify_end_type import NotifyEndType + from datadog_api_client.v1.model.downtime_recurrence import DowntimeRecurrence + return { + "active": (bool,), + "active_child": (DowntimeChild,), + "canceled": (int, none_type), + "creator_id": (int,), + "disabled": (bool,), + "downtime_type": (int,), + "end": (int, none_type), + "id": (int,), + "message": (str, none_type), + "monitor_id": (int, none_type), + "monitor_tags": ([str],), + "mute_first_recovery_notification": (bool,), + "notify_end_states": ([NotifyEndState],), + "notify_end_types": ([NotifyEndType],), + "parent_id": (int, none_type), + "recurrence": (DowntimeRecurrence,), + "scope": ([str],), + "start": (int,), + "timezone": (str,), + "updater_id": (int, none_type), + } + attribute_map = { + "active": "active", + "active_child": "active_child", + "canceled": "canceled", + "creator_id": "creator_id", + "disabled": "disabled", + "downtime_type": "downtime_type", + "end": "end", + "id": "id", + "message": "message", + "monitor_id": "monitor_id", + "monitor_tags": "monitor_tags", + "mute_first_recovery_notification": "mute_first_recovery_notification", + "notify_end_states": "notify_end_states", + "notify_end_types": "notify_end_types", + "parent_id": "parent_id", + "recurrence": "recurrence", + "scope": "scope", + "start": "start", + "timezone": "timezone", + "updater_id": "updater_id", + } + read_only_vars = { + "active", + "active_child", + "canceled", + "creator_id", + "downtime_type", + "id", + "updater_id", + } + + def __init__(self_, active: Union[bool, UnsetType]=unset, active_child: Union[DowntimeChild, none_type, UnsetType]=unset, canceled: Union[int, none_type, UnsetType]=unset, creator_id: Union[int, UnsetType]=unset, disabled: Union[bool, UnsetType]=unset, downtime_type: Union[int, UnsetType]=unset, end: Union[int, none_type, UnsetType]=unset, id: Union[int, UnsetType]=unset, message: Union[str, none_type, UnsetType]=unset, monitor_id: Union[int, none_type, UnsetType]=unset, monitor_tags: Union[List[str], UnsetType]=unset, mute_first_recovery_notification: Union[bool, UnsetType]=unset, notify_end_states: Union[List[NotifyEndState], UnsetType]=unset, notify_end_types: Union[List[NotifyEndType], UnsetType]=unset, parent_id: Union[int, none_type, UnsetType]=unset, recurrence: Union[DowntimeRecurrence, none_type, UnsetType]=unset, scope: Union[List[str], UnsetType]=unset, start: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, updater_id: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Downtiming gives you greater control over monitor notifications by + allowing you to globally exclude scopes from alerting. + Downtime settings, which can be scheduled with start and end times, + prevent all alerting related to specified Datadog tags. + + :param active: If a scheduled downtime currently exists. + :type active: bool, optional + + :param active_child: The downtime object definition of the active child for the original parent recurring downtime. This + field will only exist on recurring downtimes. + :type active_child: DowntimeChild, none_type, optional + + :param canceled: If a scheduled downtime is canceled. + :type canceled: int, none_type, optional + + :param creator_id: User ID of the downtime creator. + :type creator_id: int, optional + + :param disabled: If a downtime has been disabled. + :type disabled: bool, optional + + :param downtime_type: ``0`` for a downtime applied on ``*`` or all, + ``1`` when the downtime is only scoped to hosts, + or ``2`` when the downtime is scoped to anything but hosts. + :type downtime_type: int, optional + + :param end: POSIX timestamp to end the downtime. If not provided, + the downtime is in effect indefinitely until you cancel it. + :type end: int, none_type, optional + + :param id: The downtime ID. + :type id: int, optional + + :param message: A message to include with notifications for this downtime. + Email notifications can be sent to specific users by using the same ``@username`` notation as events. + :type message: str, none_type, optional + + :param monitor_id: A single monitor to which the downtime applies. + If not provided, the downtime applies to all monitors. + :type monitor_id: int, none_type, optional + + :param monitor_tags: A comma-separated list of monitor tags. For example, tags that are applied directly to monitors, + not tags that are used in monitor queries (which are filtered by the scope parameter), to which the downtime applies. + The resulting downtime applies to monitors that match ALL provided monitor tags. + For example, ``service:postgres`` **AND** ``team:frontend``. + :type monitor_tags: [str], optional + + :param mute_first_recovery_notification: If the first recovery notification during a downtime should be muted. + :type mute_first_recovery_notification: bool, optional + + :param notify_end_states: States for which ``notify_end_types`` sends out notifications for. + :type notify_end_states: [NotifyEndState], optional + + :param notify_end_types: If set, notifies if a monitor is in an alert-worthy state ( ``ALERT`` , ``WARNING`` , or ``NO DATA`` ) + when this downtime expires or is canceled. Applied to monitors that change states during + the downtime (such as from ``OK`` to ``ALERT`` , ``WARNING`` , or ``NO DATA`` ), and to monitors that + already have an alert-worthy state when downtime begins. + :type notify_end_types: [NotifyEndType], optional + + :param parent_id: ID of the parent Downtime. + :type parent_id: int, none_type, optional + + :param recurrence: An object defining the recurrence of the downtime. + :type recurrence: DowntimeRecurrence, none_type, optional + + :param scope: The scope(s) to which the downtime applies and must be in ``key:value`` format. For example, ``host:app2``. + Provide multiple scopes as a comma-separated list like ``env:dev,env:prod``. + The resulting downtime applies to sources that matches ALL provided scopes ( ``env:dev`` **AND** ``env:prod`` ). + :type scope: [str], optional + + :param start: POSIX timestamp to start the downtime. + If not provided, the downtime starts the moment it is created. + :type start: int, optional + + :param timezone: The timezone in which to display the downtime's start and end times in Datadog applications. + :type timezone: str, optional + + :param updater_id: ID of the last user that updated the downtime. + :type updater_id: int, none_type, optional + """ + if active is not unset: + kwargs["active"] = active + if active_child is not unset: + kwargs["active_child"] = active_child + if canceled is not unset: + kwargs["canceled"] = canceled + if creator_id is not unset: + kwargs["creator_id"] = creator_id + if disabled is not unset: + kwargs["disabled"] = disabled + if downtime_type is not unset: + kwargs["downtime_type"] = downtime_type + if end is not unset: + kwargs["end"] = end + if id is not unset: + kwargs["id"] = id + if message is not unset: + kwargs["message"] = message + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if monitor_tags is not unset: + kwargs["monitor_tags"] = monitor_tags + if mute_first_recovery_notification is not unset: + kwargs["mute_first_recovery_notification"] = mute_first_recovery_notification + if notify_end_states is not unset: + kwargs["notify_end_states"] = notify_end_states + if notify_end_types is not unset: + kwargs["notify_end_types"] = notify_end_types + if parent_id is not unset: + kwargs["parent_id"] = parent_id + if recurrence is not unset: + kwargs["recurrence"] = recurrence + if scope is not unset: + kwargs["scope"] = scope + if start is not unset: + kwargs["start"] = start + if timezone is not unset: + kwargs["timezone"] = timezone + if updater_id is not unset: + kwargs["updater_id"] = updater_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/downtime_child.py b/datadog_api_client/v1/model/downtime_child.py new file mode 100644 index 0000000000..ff67b6d6bc --- /dev/null +++ b/datadog_api_client/v1/model/downtime_child.py @@ -0,0 +1,214 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notify_end_state import NotifyEndState + from datadog_api_client.v1.model.notify_end_type import NotifyEndType + from datadog_api_client.v1.model.downtime_recurrence import DowntimeRecurrence + +class DowntimeChild(ModelNormal): + validations = { + "creator_id": { + "inclusive_maximum": 2147483647, + }, + "downtime_type": { + "inclusive_maximum": 2147483647, + }, + "updater_id": { + "inclusive_maximum": 2147483647, + }, + } + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notify_end_state import NotifyEndState + from datadog_api_client.v1.model.notify_end_type import NotifyEndType + from datadog_api_client.v1.model.downtime_recurrence import DowntimeRecurrence + return { + "active": (bool,), + "canceled": (int, none_type), + "creator_id": (int,), + "disabled": (bool,), + "downtime_type": (int,), + "end": (int, none_type), + "id": (int,), + "message": (str, none_type), + "monitor_id": (int, none_type), + "monitor_tags": ([str],), + "mute_first_recovery_notification": (bool,), + "notify_end_states": ([NotifyEndState],), + "notify_end_types": ([NotifyEndType],), + "parent_id": (int, none_type), + "recurrence": (DowntimeRecurrence,), + "scope": ([str],), + "start": (int,), + "timezone": (str,), + "updater_id": (int, none_type), + } + attribute_map = { + "active": "active", + "canceled": "canceled", + "creator_id": "creator_id", + "disabled": "disabled", + "downtime_type": "downtime_type", + "end": "end", + "id": "id", + "message": "message", + "monitor_id": "monitor_id", + "monitor_tags": "monitor_tags", + "mute_first_recovery_notification": "mute_first_recovery_notification", + "notify_end_states": "notify_end_states", + "notify_end_types": "notify_end_types", + "parent_id": "parent_id", + "recurrence": "recurrence", + "scope": "scope", + "start": "start", + "timezone": "timezone", + "updater_id": "updater_id", + } + read_only_vars = { + "active", + "canceled", + "creator_id", + "downtime_type", + "id", + "updater_id", + } + + def __init__(self_, active: Union[bool, UnsetType]=unset, canceled: Union[int, none_type, UnsetType]=unset, creator_id: Union[int, UnsetType]=unset, disabled: Union[bool, UnsetType]=unset, downtime_type: Union[int, UnsetType]=unset, end: Union[int, none_type, UnsetType]=unset, id: Union[int, UnsetType]=unset, message: Union[str, none_type, UnsetType]=unset, monitor_id: Union[int, none_type, UnsetType]=unset, monitor_tags: Union[List[str], UnsetType]=unset, mute_first_recovery_notification: Union[bool, UnsetType]=unset, notify_end_states: Union[List[NotifyEndState], UnsetType]=unset, notify_end_types: Union[List[NotifyEndType], UnsetType]=unset, parent_id: Union[int, none_type, UnsetType]=unset, recurrence: Union[DowntimeRecurrence, none_type, UnsetType]=unset, scope: Union[List[str], UnsetType]=unset, start: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, updater_id: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + The downtime object definition of the active child for the original parent recurring downtime. This + field will only exist on recurring downtimes. + + :param active: If a scheduled downtime currently exists. + :type active: bool, optional + + :param canceled: If a scheduled downtime is canceled. + :type canceled: int, none_type, optional + + :param creator_id: User ID of the downtime creator. + :type creator_id: int, optional + + :param disabled: If a downtime has been disabled. + :type disabled: bool, optional + + :param downtime_type: ``0`` for a downtime applied on ``*`` or all, + ``1`` when the downtime is only scoped to hosts, + or ``2`` when the downtime is scoped to anything but hosts. + :type downtime_type: int, optional + + :param end: POSIX timestamp to end the downtime. If not provided, + the downtime is in effect indefinitely until you cancel it. + :type end: int, none_type, optional + + :param id: The downtime ID. + :type id: int, optional + + :param message: A message to include with notifications for this downtime. + Email notifications can be sent to specific users by using the same ``@username`` notation as events. + :type message: str, none_type, optional + + :param monitor_id: A single monitor to which the downtime applies. + If not provided, the downtime applies to all monitors. + :type monitor_id: int, none_type, optional + + :param monitor_tags: A comma-separated list of monitor tags. For example, tags that are applied directly to monitors, + not tags that are used in monitor queries (which are filtered by the scope parameter), to which the downtime applies. + The resulting downtime applies to monitors that match ALL provided monitor tags. + For example, ``service:postgres`` **AND** ``team:frontend``. + :type monitor_tags: [str], optional + + :param mute_first_recovery_notification: If the first recovery notification during a downtime should be muted. + :type mute_first_recovery_notification: bool, optional + + :param notify_end_states: States for which ``notify_end_types`` sends out notifications for. + :type notify_end_states: [NotifyEndState], optional + + :param notify_end_types: If set, notifies if a monitor is in an alert-worthy state ( ``ALERT`` , ``WARNING`` , or ``NO DATA`` ) + when this downtime expires or is canceled. Applied to monitors that change states during + the downtime (such as from ``OK`` to ``ALERT`` , ``WARNING`` , or ``NO DATA`` ), and to monitors that + already have an alert-worthy state when downtime begins. + :type notify_end_types: [NotifyEndType], optional + + :param parent_id: ID of the parent Downtime. + :type parent_id: int, none_type, optional + + :param recurrence: An object defining the recurrence of the downtime. + :type recurrence: DowntimeRecurrence, none_type, optional + + :param scope: The scope(s) to which the downtime applies and must be in ``key:value`` format. For example, ``host:app2``. + Provide multiple scopes as a comma-separated list like ``env:dev,env:prod``. + The resulting downtime applies to sources that matches ALL provided scopes ( ``env:dev`` **AND** ``env:prod`` ). + :type scope: [str], optional + + :param start: POSIX timestamp to start the downtime. + If not provided, the downtime starts the moment it is created. + :type start: int, optional + + :param timezone: The timezone in which to display the downtime's start and end times in Datadog applications. + :type timezone: str, optional + + :param updater_id: ID of the last user that updated the downtime. + :type updater_id: int, none_type, optional + """ + if active is not unset: + kwargs["active"] = active + if canceled is not unset: + kwargs["canceled"] = canceled + if creator_id is not unset: + kwargs["creator_id"] = creator_id + if disabled is not unset: + kwargs["disabled"] = disabled + if downtime_type is not unset: + kwargs["downtime_type"] = downtime_type + if end is not unset: + kwargs["end"] = end + if id is not unset: + kwargs["id"] = id + if message is not unset: + kwargs["message"] = message + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if monitor_tags is not unset: + kwargs["monitor_tags"] = monitor_tags + if mute_first_recovery_notification is not unset: + kwargs["mute_first_recovery_notification"] = mute_first_recovery_notification + if notify_end_states is not unset: + kwargs["notify_end_states"] = notify_end_states + if notify_end_types is not unset: + kwargs["notify_end_types"] = notify_end_types + if parent_id is not unset: + kwargs["parent_id"] = parent_id + if recurrence is not unset: + kwargs["recurrence"] = recurrence + if scope is not unset: + kwargs["scope"] = scope + if start is not unset: + kwargs["start"] = start + if timezone is not unset: + kwargs["timezone"] = timezone + if updater_id is not unset: + kwargs["updater_id"] = updater_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/downtime_recurrence.py b/datadog_api_client/v1/model/downtime_recurrence.py new file mode 100644 index 0000000000..6674732b2b --- /dev/null +++ b/datadog_api_client/v1/model/downtime_recurrence.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeRecurrence(ModelNormal): + validations = { + "period": { + "inclusive_maximum": 2147483647, + }, + "until_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + _nullable = True + @cached_property + def openapi_types(_): + return { + "period": (int,), + "rrule": (str,), + "type": (str,), + "until_date": (int, none_type), + "until_occurrences": (int, none_type), + "week_days": ([str], none_type), + } + attribute_map = { + "period": "period", + "rrule": "rrule", + "type": "type", + "until_date": "until_date", + "until_occurrences": "until_occurrences", + "week_days": "week_days", + } + + def __init__(self_, period: Union[int, UnsetType]=unset, rrule: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, until_date: Union[int, none_type, UnsetType]=unset, until_occurrences: Union[int, none_type, UnsetType]=unset, week_days: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + An object defining the recurrence of the downtime. + + :param period: How often to repeat as an integer. + For example, to repeat every 3 days, select a type of ``days`` and a period of ``3``. + :type period: int, optional + + :param rrule: The ``RRULE`` standard for defining recurring events ( **requires to set "type" to rrule** ) + For example, to have a recurring event on the first day of each month, set the type to ``rrule`` and set the ``FREQ`` to ``MONTHLY`` and ``BYMONTHDAY`` to ``1``. + Most common ``rrule`` options from the `iCalendar Spec `_ are supported. + + **Note** : Attributes specifying the duration in ``RRULE`` are not supported (for example, ``DTSTART`` , ``DTEND`` , ``DURATION`` ). + More examples available in this `downtime guide `_ + :type rrule: str, optional + + :param type: The type of recurrence. Choose from ``days`` , ``weeks`` , ``months`` , ``years`` , ``rrule``. + :type type: str, optional + + :param until_date: The date at which the recurrence should end as a POSIX timestamp. + ``until_occurences`` and ``until_date`` are mutually exclusive. + :type until_date: int, none_type, optional + + :param until_occurrences: How many times the downtime is rescheduled. + ``until_occurences`` and ``until_date`` are mutually exclusive. + :type until_occurrences: int, none_type, optional + + :param week_days: A list of week days to repeat on. Choose from ``Mon`` , ``Tue`` , ``Wed`` , ``Thu`` , ``Fri`` , ``Sat`` or ``Sun``. + Only applicable when type is weeks. First letter must be capitalized. + :type week_days: [str], none_type, optional + """ + if period is not unset: + kwargs["period"] = period + if rrule is not unset: + kwargs["rrule"] = rrule + if type is not unset: + kwargs["type"] = type + if until_date is not unset: + kwargs["until_date"] = until_date + if until_occurrences is not unset: + kwargs["until_occurrences"] = until_occurrences + if week_days is not unset: + kwargs["week_days"] = week_days + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/event.py b/datadog_api_client/v1/model/event.py new file mode 100644 index 0000000000..5918fcec0c --- /dev/null +++ b/datadog_api_client/v1/model/event.py @@ -0,0 +1,154 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.event_alert_type import EventAlertType + from datadog_api_client.v1.model.event_priority import EventPriority + +class Event(ModelNormal): + validations = { + "text": { + "max_length": 4000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.event_alert_type import EventAlertType + from datadog_api_client.v1.model.event_priority import EventPriority + return { + "alert_type": (EventAlertType,), + "date_happened": (int,), + "device_name": (str,), + "host": (str,), + "id": (int,), + "id_str": (str,), + "payload": (str,), + "priority": (EventPriority,), + "source_type_name": (str,), + "tags": ([str],), + "text": (str,), + "title": (str,), + "url": (str,), + } + attribute_map = { + "alert_type": "alert_type", + "date_happened": "date_happened", + "device_name": "device_name", + "host": "host", + "id": "id", + "id_str": "id_str", + "payload": "payload", + "priority": "priority", + "source_type_name": "source_type_name", + "tags": "tags", + "text": "text", + "title": "title", + "url": "url", + } + read_only_vars = { + "id", + "id_str", + "payload", + "url", + } + + def __init__(self_, alert_type: Union[EventAlertType, UnsetType]=unset, date_happened: Union[int, UnsetType]=unset, device_name: Union[str, UnsetType]=unset, host: Union[str, UnsetType]=unset, id: Union[int, UnsetType]=unset, id_str: Union[str, UnsetType]=unset, payload: Union[str, UnsetType]=unset, priority: Union[EventPriority, none_type, UnsetType]=unset, source_type_name: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, text: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Object representing an event. + + :param alert_type: If an alert event is enabled, set its type. + For example, ``error`` , ``warning`` , ``info`` , ``success`` , ``user_update`` , + ``recommendation`` , and ``snapshot``. + :type alert_type: EventAlertType, optional + + :param date_happened: POSIX timestamp of the event. Must be sent as an integer (that is no quotes). + Limited to events up to 18 hours in the past and two hours in the future. + :type date_happened: int, optional + + :param device_name: A device name. + :type device_name: str, optional + + :param host: Host name to associate with the event. + Any tags associated with the host are also applied to this event. + :type host: str, optional + + :param id: Integer ID of the event. + :type id: int, optional + + :param id_str: Handling IDs as large 64-bit numbers can cause loss of accuracy issues with some programming languages. + Instead, use the string representation of the Event ID to avoid losing accuracy. + :type id_str: str, optional + + :param payload: Payload of the event. + :type payload: str, optional + + :param priority: The priority of the event. For example, ``normal`` or ``low``. + :type priority: EventPriority, none_type, optional + + :param source_type_name: The type of event being posted. Option examples include nagios, hudson, jenkins, my_apps, chef, puppet, git, bitbucket, etc. + The list of standard source attribute values `available here `_. + :type source_type_name: str, optional + + :param tags: A list of tags to apply to the event. + :type tags: [str], optional + + :param text: The body of the event. Limited to 4000 characters. The text supports markdown. + To use markdown in the event text, start the text block with ``%%% \\n`` and end the text block with ``\\n %%%``. + Use ``msg_text`` with the Datadog Ruby library. + :type text: str, optional + + :param title: The event title. + :type title: str, optional + + :param url: URL of the event. + :type url: str, optional + """ + if alert_type is not unset: + kwargs["alert_type"] = alert_type + if date_happened is not unset: + kwargs["date_happened"] = date_happened + if device_name is not unset: + kwargs["device_name"] = device_name + if host is not unset: + kwargs["host"] = host + if id is not unset: + kwargs["id"] = id + if id_str is not unset: + kwargs["id_str"] = id_str + if payload is not unset: + kwargs["payload"] = payload + if priority is not unset: + kwargs["priority"] = priority + if source_type_name is not unset: + kwargs["source_type_name"] = source_type_name + if tags is not unset: + kwargs["tags"] = tags + if text is not unset: + kwargs["text"] = text + if title is not unset: + kwargs["title"] = title + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/event_alert_type.py b/datadog_api_client/v1/model/event_alert_type.py new file mode 100644 index 0000000000..2926a6ab47 --- /dev/null +++ b/datadog_api_client/v1/model/event_alert_type.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventAlertType(ModelSimple): + """ + If an alert event is enabled, set its type. + For example, `error`, `warning`, `info`, `success`, `user_update`, + `recommendation`, and `snapshot`. + + :param value: Must be one of ["error", "warning", "info", "success", "user_update", "recommendation", "snapshot"]. + :type value: str + """ + + allowed_values = { + "error", + "warning", + "info", + "success", + "user_update", + "recommendation", + "snapshot", + } + ERROR: ClassVar["EventAlertType"] + WARNING: ClassVar["EventAlertType"] + INFO: ClassVar["EventAlertType"] + SUCCESS: ClassVar["EventAlertType"] + USER_UPDATE: ClassVar["EventAlertType"] + RECOMMENDATION: ClassVar["EventAlertType"] + SNAPSHOT: ClassVar["EventAlertType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventAlertType.ERROR = EventAlertType("error") +EventAlertType.WARNING = EventAlertType("warning") +EventAlertType.INFO = EventAlertType("info") +EventAlertType.SUCCESS = EventAlertType("success") +EventAlertType.USER_UPDATE = EventAlertType("user_update") +EventAlertType.RECOMMENDATION = EventAlertType("recommendation") +EventAlertType.SNAPSHOT = EventAlertType("snapshot") diff --git a/datadog_api_client/v1/model/event_create_request.py b/datadog_api_client/v1/model/event_create_request.py new file mode 100644 index 0000000000..aeb874e8eb --- /dev/null +++ b/datadog_api_client/v1/model/event_create_request.py @@ -0,0 +1,135 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.event_alert_type import EventAlertType + from datadog_api_client.v1.model.event_priority import EventPriority + +class EventCreateRequest(ModelNormal): + validations = { + "aggregation_key": { + "max_length": 100, + }, + "text": { + "max_length": 4000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.event_alert_type import EventAlertType + from datadog_api_client.v1.model.event_priority import EventPriority + return { + "aggregation_key": (str,), + "alert_type": (EventAlertType,), + "date_happened": (int,), + "device_name": (str,), + "host": (str,), + "priority": (EventPriority,), + "related_event_id": (int,), + "source_type_name": (str,), + "tags": ([str],), + "text": (str,), + "title": (str,), + } + attribute_map = { + "aggregation_key": "aggregation_key", + "alert_type": "alert_type", + "date_happened": "date_happened", + "device_name": "device_name", + "host": "host", + "priority": "priority", + "related_event_id": "related_event_id", + "source_type_name": "source_type_name", + "tags": "tags", + "text": "text", + "title": "title", + } + + def __init__(self_, text: str, title: str, aggregation_key: Union[str, UnsetType]=unset, alert_type: Union[EventAlertType, UnsetType]=unset, date_happened: Union[int, UnsetType]=unset, device_name: Union[str, UnsetType]=unset, host: Union[str, UnsetType]=unset, priority: Union[EventPriority, none_type, UnsetType]=unset, related_event_id: Union[int, UnsetType]=unset, source_type_name: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object representing an event. + + :param aggregation_key: An arbitrary string to use for aggregation. Limited to 100 characters. + If you specify a key, all events using that key are grouped together in the Event Stream. + :type aggregation_key: str, optional + + :param alert_type: If an alert event is enabled, set its type. + For example, ``error`` , ``warning`` , ``info`` , ``success`` , ``user_update`` , + ``recommendation`` , and ``snapshot``. + :type alert_type: EventAlertType, optional + + :param date_happened: POSIX timestamp of the event. Must be sent as an integer (that is no quotes). + Limited to events no older than 18 hours + :type date_happened: int, optional + + :param device_name: A device name. + :type device_name: str, optional + + :param host: Host name to associate with the event. + Any tags associated with the host are also applied to this event. + :type host: str, optional + + :param priority: The priority of the event. For example, ``normal`` or ``low``. + :type priority: EventPriority, none_type, optional + + :param related_event_id: ID of the parent event. Must be sent as an integer (that is no quotes). + :type related_event_id: int, optional + + :param source_type_name: The type of event being posted. Option examples include nagios, hudson, jenkins, my_apps, chef, puppet, git, bitbucket, etc. + A complete list of source attribute values `available here `_. + :type source_type_name: str, optional + + :param tags: A list of tags to apply to the event. + :type tags: [str], optional + + :param text: The body of the event. Limited to 4000 characters. The text supports markdown. + To use markdown in the event text, start the text block with ``%%% \\n`` and end the text block with ``\\n %%%``. + Use ``msg_text`` with the Datadog Ruby library. + :type text: str + + :param title: The event title. + :type title: str + """ + if aggregation_key is not unset: + kwargs["aggregation_key"] = aggregation_key + if alert_type is not unset: + kwargs["alert_type"] = alert_type + if date_happened is not unset: + kwargs["date_happened"] = date_happened + if device_name is not unset: + kwargs["device_name"] = device_name + if host is not unset: + kwargs["host"] = host + if priority is not unset: + kwargs["priority"] = priority + if related_event_id is not unset: + kwargs["related_event_id"] = related_event_id + if source_type_name is not unset: + kwargs["source_type_name"] = source_type_name + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.text = text + self_.title = title diff --git a/datadog_api_client/v1/model/event_create_response.py b/datadog_api_client/v1/model/event_create_response.py new file mode 100644 index 0000000000..6041257a0e --- /dev/null +++ b/datadog_api_client/v1/model/event_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.event import Event + +class EventCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.event import Event + return { + "event": (Event,), + "status": (str,), + } + attribute_map = { + "event": "event", + "status": "status", + } + + def __init__(self_, event: Union[Event, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing an event response. + + :param event: Object representing an event. + :type event: Event, optional + + :param status: A status. + :type status: str, optional + """ + if event is not unset: + kwargs["event"] = event + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/event_list_response.py b/datadog_api_client/v1/model/event_list_response.py new file mode 100644 index 0000000000..2e5b1616e1 --- /dev/null +++ b/datadog_api_client/v1/model/event_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.event import Event + +class EventListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.event import Event + return { + "events": ([Event],), + "status": (str,), + } + attribute_map = { + "events": "events", + "status": "status", + } + + def __init__(self_, events: Union[List[Event], UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + An event list response. + + :param events: An array of events. + :type events: [Event], optional + + :param status: A status. + :type status: str, optional + """ + if events is not unset: + kwargs["events"] = events + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/event_priority.py b/datadog_api_client/v1/model/event_priority.py new file mode 100644 index 0000000000..08d18384d5 --- /dev/null +++ b/datadog_api_client/v1/model/event_priority.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventPriority(ModelSimple): + """ + The priority of the event. For example, `normal` or `low`. + + :param value: Must be one of ["normal", "low"]. + :type value: str + """ + + allowed_values = { + "normal", + "low", + } + NORMAL: ClassVar["EventPriority"] + LOW: ClassVar["EventPriority"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventPriority.NORMAL = EventPriority("normal") +EventPriority.LOW = EventPriority("low") diff --git a/datadog_api_client/v1/model/event_query_definition.py b/datadog_api_client/v1/model/event_query_definition.py new file mode 100644 index 0000000000..7aa18009ee --- /dev/null +++ b/datadog_api_client/v1/model/event_query_definition.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + return { + "search": (str,), + "tags_execution": (str,), + } + attribute_map = { + "search": "search", + "tags_execution": "tags_execution", + } + + def __init__(self_, search: str, tags_execution: str, **kwargs): + """ + The event query. + + :param search: The query being made on the event. + :type search: str + + :param tags_execution: The execution method for multi-value filters. Can be either and or or. + :type tags_execution: str + """ + super().__init__(kwargs) + + + self_.search = search + self_.tags_execution = tags_execution diff --git a/datadog_api_client/v1/model/event_response.py b/datadog_api_client/v1/model/event_response.py new file mode 100644 index 0000000000..4a910b9dee --- /dev/null +++ b/datadog_api_client/v1/model/event_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.event import Event + +class EventResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.event import Event + return { + "event": (Event,), + "status": (str,), + } + attribute_map = { + "event": "event", + "status": "status", + } + + def __init__(self_, event: Union[Event, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing an event response. + + :param event: Object representing an event. + :type event: Event, optional + + :param status: A status. + :type status: str, optional + """ + if event is not unset: + kwargs["event"] = event + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/event_stream_widget_definition.py b/datadog_api_client/v1/model/event_stream_widget_definition.py new file mode 100644 index 0000000000..ba3a8d8cd1 --- /dev/null +++ b/datadog_api_client/v1/model/event_stream_widget_definition.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_event_size import WidgetEventSize + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.event_stream_widget_definition_type import EventStreamWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class EventStreamWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_event_size import WidgetEventSize + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.event_stream_widget_definition_type import EventStreamWidgetDefinitionType + return { + "description": (str,), + "event_size": (WidgetEventSize,), + "query": (str,), + "tags_execution": (str,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (EventStreamWidgetDefinitionType,), + } + attribute_map = { + "description": "description", + "event_size": "event_size", + "query": "query", + "tags_execution": "tags_execution", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, query: str, type: EventStreamWidgetDefinitionType, description: Union[str, UnsetType]=unset, event_size: Union[WidgetEventSize, UnsetType]=unset, tags_execution: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The event stream is a widget version of the stream of events + on the Event Stream view. Only available on FREE layout dashboards. + + :param description: The description of the widget. + :type description: str, optional + + :param event_size: Size to use to display an event. + :type event_size: WidgetEventSize, optional + + :param query: Query to filter the event stream with. + :type query: str + + :param tags_execution: The execution method for multi-value filters. Can be either and or or. + :type tags_execution: str, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the event stream widget. + :type type: EventStreamWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if event_size is not unset: + kwargs["event_size"] = event_size + if tags_execution is not unset: + kwargs["tags_execution"] = tags_execution + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.query = query + self_.type = type diff --git a/datadog_api_client/v1/model/event_stream_widget_definition_type.py b/datadog_api_client/v1/model/event_stream_widget_definition_type.py new file mode 100644 index 0000000000..cf7bc27d50 --- /dev/null +++ b/datadog_api_client/v1/model/event_stream_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventStreamWidgetDefinitionType(ModelSimple): + """ + Type of the event stream widget. + + :param value: If omitted defaults to "event_stream". Must be one of ["event_stream"]. + :type value: str + """ + + allowed_values = { + "event_stream", + } + EVENT_STREAM: ClassVar["EventStreamWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventStreamWidgetDefinitionType.EVENT_STREAM = EventStreamWidgetDefinitionType("event_stream") diff --git a/datadog_api_client/v1/model/event_timeline_widget_definition.py b/datadog_api_client/v1/model/event_timeline_widget_definition.py new file mode 100644 index 0000000000..3b40f75409 --- /dev/null +++ b/datadog_api_client/v1/model/event_timeline_widget_definition.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.event_timeline_widget_definition_type import EventTimelineWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class EventTimelineWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.event_timeline_widget_definition_type import EventTimelineWidgetDefinitionType + return { + "description": (str,), + "query": (str,), + "tags_execution": (str,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (EventTimelineWidgetDefinitionType,), + } + attribute_map = { + "description": "description", + "query": "query", + "tags_execution": "tags_execution", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, query: str, type: EventTimelineWidgetDefinitionType, description: Union[str, UnsetType]=unset, tags_execution: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The event timeline is a widget version of the timeline that appears at the top of the Event Stream view. Only available on FREE layout dashboards. + + :param description: The description of the widget. + :type description: str, optional + + :param query: Query to filter the event timeline with. + :type query: str + + :param tags_execution: The execution method for multi-value filters. Can be either and or or. + :type tags_execution: str, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the event timeline widget. + :type type: EventTimelineWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if tags_execution is not unset: + kwargs["tags_execution"] = tags_execution + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.query = query + self_.type = type diff --git a/datadog_api_client/v1/model/event_timeline_widget_definition_type.py b/datadog_api_client/v1/model/event_timeline_widget_definition_type.py new file mode 100644 index 0000000000..4a717c4e39 --- /dev/null +++ b/datadog_api_client/v1/model/event_timeline_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventTimelineWidgetDefinitionType(ModelSimple): + """ + Type of the event timeline widget. + + :param value: If omitted defaults to "event_timeline". Must be one of ["event_timeline"]. + :type value: str + """ + + allowed_values = { + "event_timeline", + } + EVENT_TIMELINE: ClassVar["EventTimelineWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventTimelineWidgetDefinitionType.EVENT_TIMELINE = EventTimelineWidgetDefinitionType("event_timeline") diff --git a/datadog_api_client/v1/model/events_aggregation.py b/datadog_api_client/v1/model/events_aggregation.py new file mode 100644 index 0000000000..9007f84a54 --- /dev/null +++ b/datadog_api_client/v1/model/events_aggregation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventsAggregation(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The type of aggregation that can be performed on events-based queries. + """ + 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 + return { + "oneOf": [ + str, + str, + ], + } diff --git a/datadog_api_client/v1/model/events_aggregation_value.py b/datadog_api_client/v1/model/events_aggregation_value.py new file mode 100644 index 0000000000..a2631c4748 --- /dev/null +++ b/datadog_api_client/v1/model/events_aggregation_value.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventsAggregationValue(ModelSimple): + """ + Standard aggregation types for events-based queries. + + :param value: Must be one of ["avg", "cardinality", "count", "delta", "earliest", "latest", "max", "median", "min", "most_frequent", "sum"]. + :type value: str + """ + + allowed_values = { + "avg", + "cardinality", + "count", + "delta", + "earliest", + "latest", + "max", + "median", + "min", + "most_frequent", + "sum", + } + AVG: ClassVar["EventsAggregationValue"] + CARDINALITY: ClassVar["EventsAggregationValue"] + COUNT: ClassVar["EventsAggregationValue"] + DELTA: ClassVar["EventsAggregationValue"] + EARLIEST: ClassVar["EventsAggregationValue"] + LATEST: ClassVar["EventsAggregationValue"] + MAX: ClassVar["EventsAggregationValue"] + MEDIAN: ClassVar["EventsAggregationValue"] + MIN: ClassVar["EventsAggregationValue"] + MOST_FREQUENT: ClassVar["EventsAggregationValue"] + SUM: ClassVar["EventsAggregationValue"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventsAggregationValue.AVG = EventsAggregationValue("avg") +EventsAggregationValue.CARDINALITY = EventsAggregationValue("cardinality") +EventsAggregationValue.COUNT = EventsAggregationValue("count") +EventsAggregationValue.DELTA = EventsAggregationValue("delta") +EventsAggregationValue.EARLIEST = EventsAggregationValue("earliest") +EventsAggregationValue.LATEST = EventsAggregationValue("latest") +EventsAggregationValue.MAX = EventsAggregationValue("max") +EventsAggregationValue.MEDIAN = EventsAggregationValue("median") +EventsAggregationValue.MIN = EventsAggregationValue("min") +EventsAggregationValue.MOST_FREQUENT = EventsAggregationValue("most_frequent") +EventsAggregationValue.SUM = EventsAggregationValue("sum") diff --git a/datadog_api_client/v1/model/formula_and_function_apm_dependency_stat_name.py b/datadog_api_client/v1/model/formula_and_function_apm_dependency_stat_name.py new file mode 100644 index 0000000000..64960347a0 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_dependency_stat_name.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionApmDependencyStatName(ModelSimple): + """ + APM statistic. + + :param value: Must be one of ["avg_duration", "avg_root_duration", "avg_spans_per_trace", "error_rate", "pct_exec_time", "pct_of_traces", "total_traces_count"]. + :type value: str + """ + + allowed_values = { + "avg_duration", + "avg_root_duration", + "avg_spans_per_trace", + "error_rate", + "pct_exec_time", + "pct_of_traces", + "total_traces_count", + } + AVG_DURATION: ClassVar["FormulaAndFunctionApmDependencyStatName"] + AVG_ROOT_DURATION: ClassVar["FormulaAndFunctionApmDependencyStatName"] + AVG_SPANS_PER_TRACE: ClassVar["FormulaAndFunctionApmDependencyStatName"] + ERROR_RATE: ClassVar["FormulaAndFunctionApmDependencyStatName"] + PCT_EXEC_TIME: ClassVar["FormulaAndFunctionApmDependencyStatName"] + PCT_OF_TRACES: ClassVar["FormulaAndFunctionApmDependencyStatName"] + TOTAL_TRACES_COUNT: ClassVar["FormulaAndFunctionApmDependencyStatName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionApmDependencyStatName.AVG_DURATION = FormulaAndFunctionApmDependencyStatName("avg_duration") +FormulaAndFunctionApmDependencyStatName.AVG_ROOT_DURATION = FormulaAndFunctionApmDependencyStatName("avg_root_duration") +FormulaAndFunctionApmDependencyStatName.AVG_SPANS_PER_TRACE = FormulaAndFunctionApmDependencyStatName("avg_spans_per_trace") +FormulaAndFunctionApmDependencyStatName.ERROR_RATE = FormulaAndFunctionApmDependencyStatName("error_rate") +FormulaAndFunctionApmDependencyStatName.PCT_EXEC_TIME = FormulaAndFunctionApmDependencyStatName("pct_exec_time") +FormulaAndFunctionApmDependencyStatName.PCT_OF_TRACES = FormulaAndFunctionApmDependencyStatName("pct_of_traces") +FormulaAndFunctionApmDependencyStatName.TOTAL_TRACES_COUNT = FormulaAndFunctionApmDependencyStatName("total_traces_count") diff --git a/datadog_api_client/v1/model/formula_and_function_apm_dependency_stats_data_source.py b/datadog_api_client/v1/model/formula_and_function_apm_dependency_stats_data_source.py new file mode 100644 index 0000000000..ef7141c4fc --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_dependency_stats_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionApmDependencyStatsDataSource(ModelSimple): + """ + Data source for APM dependency stats queries. + + :param value: If omitted defaults to "apm_dependency_stats". Must be one of ["apm_dependency_stats"]. + :type value: str + """ + + allowed_values = { + "apm_dependency_stats", + } + APM_DEPENDENCY_STATS: ClassVar["FormulaAndFunctionApmDependencyStatsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionApmDependencyStatsDataSource.APM_DEPENDENCY_STATS = FormulaAndFunctionApmDependencyStatsDataSource("apm_dependency_stats") diff --git a/datadog_api_client/v1/model/formula_and_function_apm_dependency_stats_query_definition.py b/datadog_api_client/v1/model/formula_and_function_apm_dependency_stats_query_definition.py new file mode 100644 index 0000000000..2117100d90 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_dependency_stats_query_definition.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_data_source import FormulaAndFunctionApmDependencyStatsDataSource + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stat_name import FormulaAndFunctionApmDependencyStatName + +class FormulaAndFunctionApmDependencyStatsQueryDefinition(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_data_source import FormulaAndFunctionApmDependencyStatsDataSource + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stat_name import FormulaAndFunctionApmDependencyStatName + return { + "cross_org_uuids": ([str],), + "data_source": (FormulaAndFunctionApmDependencyStatsDataSource,), + "env": (str,), + "is_upstream": (bool,), + "name": (str,), + "operation_name": (str,), + "primary_tag_name": (str,), + "primary_tag_value": (str,), + "resource_name": (str,), + "service": (str,), + "stat": (FormulaAndFunctionApmDependencyStatName,), + } + attribute_map = { + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "env": "env", + "is_upstream": "is_upstream", + "name": "name", + "operation_name": "operation_name", + "primary_tag_name": "primary_tag_name", + "primary_tag_value": "primary_tag_value", + "resource_name": "resource_name", + "service": "service", + "stat": "stat", + } + + def __init__(self_, data_source: FormulaAndFunctionApmDependencyStatsDataSource, env: str, name: str, operation_name: str, resource_name: str, service: str, stat: FormulaAndFunctionApmDependencyStatName, cross_org_uuids: Union[List[str], UnsetType]=unset, is_upstream: Union[bool, UnsetType]=unset, primary_tag_name: Union[str, UnsetType]=unset, primary_tag_value: Union[str, UnsetType]=unset, **kwargs): + """ + A formula and functions APM dependency stats query. + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data source for APM dependency stats queries. + :type data_source: FormulaAndFunctionApmDependencyStatsDataSource + + :param env: APM environment. + :type env: str + + :param is_upstream: Determines whether stats for upstream or downstream dependencies should be queried. + :type is_upstream: bool, optional + + :param name: Name of query to use in formulas. + :type name: str + + :param operation_name: Name of operation on service. + :type operation_name: str + + :param primary_tag_name: The name of the second primary tag used within APM; required when ``primary_tag_value`` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog. + :type primary_tag_name: str, optional + + :param primary_tag_value: Filter APM data by the second primary tag. ``primary_tag_name`` must also be specified. + :type primary_tag_value: str, optional + + :param resource_name: APM resource. + :type resource_name: str + + :param service: APM service. + :type service: str + + :param stat: APM statistic. + :type stat: FormulaAndFunctionApmDependencyStatName + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if is_upstream is not unset: + kwargs["is_upstream"] = is_upstream + if primary_tag_name is not unset: + kwargs["primary_tag_name"] = primary_tag_name + if primary_tag_value is not unset: + kwargs["primary_tag_value"] = primary_tag_value + super().__init__(kwargs) + + + self_.data_source = data_source + self_.env = env + self_.name = name + self_.operation_name = operation_name + self_.resource_name = resource_name + self_.service = service + self_.stat = stat diff --git a/datadog_api_client/v1/model/formula_and_function_apm_metric_stat_name.py b/datadog_api_client/v1/model/formula_and_function_apm_metric_stat_name.py new file mode 100644 index 0000000000..7647c1479c --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_metric_stat_name.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionApmMetricStatName(ModelSimple): + """ + APM metric stat name. + + :param value: Must be one of ["errors", "error_rate", "errors_per_second", "latency_avg", "latency_max", "latency_p50", "latency_p75", "latency_p90", "latency_p95", "latency_p99", "latency_p999", "latency_distribution", "hits", "hits_per_second", "total_time", "apdex"]. + :type value: str + """ + + allowed_values = { + "errors", + "error_rate", + "errors_per_second", + "latency_avg", + "latency_max", + "latency_p50", + "latency_p75", + "latency_p90", + "latency_p95", + "latency_p99", + "latency_p999", + "latency_distribution", + "hits", + "hits_per_second", + "total_time", + "apdex", + } + ERRORS: ClassVar["FormulaAndFunctionApmMetricStatName"] + ERROR_RATE: ClassVar["FormulaAndFunctionApmMetricStatName"] + ERRORS_PER_SECOND: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_AVG: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_MAX: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P50: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P75: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P90: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P95: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P99: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_P999: ClassVar["FormulaAndFunctionApmMetricStatName"] + LATENCY_DISTRIBUTION: ClassVar["FormulaAndFunctionApmMetricStatName"] + HITS: ClassVar["FormulaAndFunctionApmMetricStatName"] + HITS_PER_SECOND: ClassVar["FormulaAndFunctionApmMetricStatName"] + TOTAL_TIME: ClassVar["FormulaAndFunctionApmMetricStatName"] + APDEX: ClassVar["FormulaAndFunctionApmMetricStatName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionApmMetricStatName.ERRORS = FormulaAndFunctionApmMetricStatName("errors") +FormulaAndFunctionApmMetricStatName.ERROR_RATE = FormulaAndFunctionApmMetricStatName("error_rate") +FormulaAndFunctionApmMetricStatName.ERRORS_PER_SECOND = FormulaAndFunctionApmMetricStatName("errors_per_second") +FormulaAndFunctionApmMetricStatName.LATENCY_AVG = FormulaAndFunctionApmMetricStatName("latency_avg") +FormulaAndFunctionApmMetricStatName.LATENCY_MAX = FormulaAndFunctionApmMetricStatName("latency_max") +FormulaAndFunctionApmMetricStatName.LATENCY_P50 = FormulaAndFunctionApmMetricStatName("latency_p50") +FormulaAndFunctionApmMetricStatName.LATENCY_P75 = FormulaAndFunctionApmMetricStatName("latency_p75") +FormulaAndFunctionApmMetricStatName.LATENCY_P90 = FormulaAndFunctionApmMetricStatName("latency_p90") +FormulaAndFunctionApmMetricStatName.LATENCY_P95 = FormulaAndFunctionApmMetricStatName("latency_p95") +FormulaAndFunctionApmMetricStatName.LATENCY_P99 = FormulaAndFunctionApmMetricStatName("latency_p99") +FormulaAndFunctionApmMetricStatName.LATENCY_P999 = FormulaAndFunctionApmMetricStatName("latency_p999") +FormulaAndFunctionApmMetricStatName.LATENCY_DISTRIBUTION = FormulaAndFunctionApmMetricStatName("latency_distribution") +FormulaAndFunctionApmMetricStatName.HITS = FormulaAndFunctionApmMetricStatName("hits") +FormulaAndFunctionApmMetricStatName.HITS_PER_SECOND = FormulaAndFunctionApmMetricStatName("hits_per_second") +FormulaAndFunctionApmMetricStatName.TOTAL_TIME = FormulaAndFunctionApmMetricStatName("total_time") +FormulaAndFunctionApmMetricStatName.APDEX = FormulaAndFunctionApmMetricStatName("apdex") diff --git a/datadog_api_client/v1/model/formula_and_function_apm_metrics_data_source.py b/datadog_api_client/v1/model/formula_and_function_apm_metrics_data_source.py new file mode 100644 index 0000000000..30da8d41d3 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_metrics_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionApmMetricsDataSource(ModelSimple): + """ + Data source for APM metrics queries. + + :param value: If omitted defaults to "apm_metrics". Must be one of ["apm_metrics"]. + :type value: str + """ + + allowed_values = { + "apm_metrics", + } + APM_METRICS: ClassVar["FormulaAndFunctionApmMetricsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionApmMetricsDataSource.APM_METRICS = FormulaAndFunctionApmMetricsDataSource("apm_metrics") diff --git a/datadog_api_client/v1/model/formula_and_function_apm_metrics_query_definition.py b/datadog_api_client/v1/model/formula_and_function_apm_metrics_query_definition.py new file mode 100644 index 0000000000..0a96706119 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_metrics_query_definition.py @@ -0,0 +1,127 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_apm_metrics_data_source import FormulaAndFunctionApmMetricsDataSource + from datadog_api_client.v1.model.formula_and_function_apm_metrics_span_kind import FormulaAndFunctionApmMetricsSpanKind + from datadog_api_client.v1.model.formula_and_function_apm_metric_stat_name import FormulaAndFunctionApmMetricStatName + +class FormulaAndFunctionApmMetricsQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_apm_metrics_data_source import FormulaAndFunctionApmMetricsDataSource + from datadog_api_client.v1.model.formula_and_function_apm_metrics_span_kind import FormulaAndFunctionApmMetricsSpanKind + from datadog_api_client.v1.model.formula_and_function_apm_metric_stat_name import FormulaAndFunctionApmMetricStatName + return { + "data_source": (FormulaAndFunctionApmMetricsDataSource,), + "group_by": ([str],), + "name": (str,), + "operation_mode": (str,), + "operation_name": (str,), + "peer_tags": ([str],), + "query_filter": (str,), + "resource_hash": (str,), + "resource_name": (str,), + "service": (str,), + "span_kind": (FormulaAndFunctionApmMetricsSpanKind,), + "stat": (FormulaAndFunctionApmMetricStatName,), + } + attribute_map = { + "data_source": "data_source", + "group_by": "group_by", + "name": "name", + "operation_mode": "operation_mode", + "operation_name": "operation_name", + "peer_tags": "peer_tags", + "query_filter": "query_filter", + "resource_hash": "resource_hash", + "resource_name": "resource_name", + "service": "service", + "span_kind": "span_kind", + "stat": "stat", + } + + def __init__(self_, data_source: FormulaAndFunctionApmMetricsDataSource, name: str, stat: FormulaAndFunctionApmMetricStatName, group_by: Union[List[str], UnsetType]=unset, operation_mode: Union[str, UnsetType]=unset, operation_name: Union[str, UnsetType]=unset, peer_tags: Union[List[str], UnsetType]=unset, query_filter: Union[str, UnsetType]=unset, resource_hash: Union[str, UnsetType]=unset, resource_name: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, span_kind: Union[FormulaAndFunctionApmMetricsSpanKind, UnsetType]=unset, **kwargs): + """ + A formula and functions APM metrics query. + + :param data_source: Data source for APM metrics queries. + :type data_source: FormulaAndFunctionApmMetricsDataSource + + :param group_by: Optional fields to group the query results by. + :type group_by: [str], optional + + :param name: Name of this query to use in formulas. + :type name: str + + :param operation_mode: Optional operation mode to aggregate across operation names. + :type operation_mode: str, optional + + :param operation_name: Name of operation on service. If not provided, the primary operation name is used. + :type operation_name: str, optional + + :param peer_tags: Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, peer.s3.bucket, etc.). + :type peer_tags: [str], optional + + :param query_filter: Additional filters for the query using metrics query syntax (e.g., env, primary_tag). + :type query_filter: str, optional + + :param resource_hash: The hash of a specific resource to filter by. + :type resource_hash: str, optional + + :param resource_name: The full name of a specific resource to filter by. + :type resource_name: str, optional + + :param service: APM service name. + :type service: str, optional + + :param span_kind: Describes the relationship between the span, its parents, and its children in a trace. + :type span_kind: FormulaAndFunctionApmMetricsSpanKind, optional + + :param stat: APM metric stat name. + :type stat: FormulaAndFunctionApmMetricStatName + """ + if group_by is not unset: + kwargs["group_by"] = group_by + if operation_mode is not unset: + kwargs["operation_mode"] = operation_mode + if operation_name is not unset: + kwargs["operation_name"] = operation_name + if peer_tags is not unset: + kwargs["peer_tags"] = peer_tags + if query_filter is not unset: + kwargs["query_filter"] = query_filter + if resource_hash is not unset: + kwargs["resource_hash"] = resource_hash + if resource_name is not unset: + kwargs["resource_name"] = resource_name + if service is not unset: + kwargs["service"] = service + if span_kind is not unset: + kwargs["span_kind"] = span_kind + super().__init__(kwargs) + + + self_.data_source = data_source + self_.name = name + self_.stat = stat diff --git a/datadog_api_client/v1/model/formula_and_function_apm_metrics_span_kind.py b/datadog_api_client/v1/model/formula_and_function_apm_metrics_span_kind.py new file mode 100644 index 0000000000..c1c88ba7ce --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_metrics_span_kind.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionApmMetricsSpanKind(ModelSimple): + """ + Describes the relationship between the span, its parents, and its children in a trace. + + :param value: Must be one of ["consumer", "server", "client", "producer", "internal"]. + :type value: str + """ + + allowed_values = { + "consumer", + "server", + "client", + "producer", + "internal", + } + CONSUMER: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + SERVER: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + CLIENT: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + PRODUCER: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + INTERNAL: ClassVar["FormulaAndFunctionApmMetricsSpanKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionApmMetricsSpanKind.CONSUMER = FormulaAndFunctionApmMetricsSpanKind("consumer") +FormulaAndFunctionApmMetricsSpanKind.SERVER = FormulaAndFunctionApmMetricsSpanKind("server") +FormulaAndFunctionApmMetricsSpanKind.CLIENT = FormulaAndFunctionApmMetricsSpanKind("client") +FormulaAndFunctionApmMetricsSpanKind.PRODUCER = FormulaAndFunctionApmMetricsSpanKind("producer") +FormulaAndFunctionApmMetricsSpanKind.INTERNAL = FormulaAndFunctionApmMetricsSpanKind("internal") diff --git a/datadog_api_client/v1/model/formula_and_function_apm_resource_stat_name.py b/datadog_api_client/v1/model/formula_and_function_apm_resource_stat_name.py new file mode 100644 index 0000000000..0e63ebacac --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_resource_stat_name.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionApmResourceStatName(ModelSimple): + """ + APM resource stat name. + + :param value: Must be one of ["errors", "error_rate", "hits", "latency_avg", "latency_distribution", "latency_max", "latency_p50", "latency_p75", "latency_p90", "latency_p95", "latency_p99"]. + :type value: str + """ + + allowed_values = { + "errors", + "error_rate", + "hits", + "latency_avg", + "latency_distribution", + "latency_max", + "latency_p50", + "latency_p75", + "latency_p90", + "latency_p95", + "latency_p99", + } + ERRORS: ClassVar["FormulaAndFunctionApmResourceStatName"] + ERROR_RATE: ClassVar["FormulaAndFunctionApmResourceStatName"] + HITS: ClassVar["FormulaAndFunctionApmResourceStatName"] + LATENCY_AVG: ClassVar["FormulaAndFunctionApmResourceStatName"] + LATENCY_DISTRIBUTION: ClassVar["FormulaAndFunctionApmResourceStatName"] + LATENCY_MAX: ClassVar["FormulaAndFunctionApmResourceStatName"] + LATENCY_P50: ClassVar["FormulaAndFunctionApmResourceStatName"] + LATENCY_P75: ClassVar["FormulaAndFunctionApmResourceStatName"] + LATENCY_P90: ClassVar["FormulaAndFunctionApmResourceStatName"] + LATENCY_P95: ClassVar["FormulaAndFunctionApmResourceStatName"] + LATENCY_P99: ClassVar["FormulaAndFunctionApmResourceStatName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionApmResourceStatName.ERRORS = FormulaAndFunctionApmResourceStatName("errors") +FormulaAndFunctionApmResourceStatName.ERROR_RATE = FormulaAndFunctionApmResourceStatName("error_rate") +FormulaAndFunctionApmResourceStatName.HITS = FormulaAndFunctionApmResourceStatName("hits") +FormulaAndFunctionApmResourceStatName.LATENCY_AVG = FormulaAndFunctionApmResourceStatName("latency_avg") +FormulaAndFunctionApmResourceStatName.LATENCY_DISTRIBUTION = FormulaAndFunctionApmResourceStatName("latency_distribution") +FormulaAndFunctionApmResourceStatName.LATENCY_MAX = FormulaAndFunctionApmResourceStatName("latency_max") +FormulaAndFunctionApmResourceStatName.LATENCY_P50 = FormulaAndFunctionApmResourceStatName("latency_p50") +FormulaAndFunctionApmResourceStatName.LATENCY_P75 = FormulaAndFunctionApmResourceStatName("latency_p75") +FormulaAndFunctionApmResourceStatName.LATENCY_P90 = FormulaAndFunctionApmResourceStatName("latency_p90") +FormulaAndFunctionApmResourceStatName.LATENCY_P95 = FormulaAndFunctionApmResourceStatName("latency_p95") +FormulaAndFunctionApmResourceStatName.LATENCY_P99 = FormulaAndFunctionApmResourceStatName("latency_p99") diff --git a/datadog_api_client/v1/model/formula_and_function_apm_resource_stats_data_source.py b/datadog_api_client/v1/model/formula_and_function_apm_resource_stats_data_source.py new file mode 100644 index 0000000000..dbe8a3a79e --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_resource_stats_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionApmResourceStatsDataSource(ModelSimple): + """ + Data source for APM resource stats queries. + + :param value: If omitted defaults to "apm_resource_stats". Must be one of ["apm_resource_stats"]. + :type value: str + """ + + allowed_values = { + "apm_resource_stats", + } + APM_RESOURCE_STATS: ClassVar["FormulaAndFunctionApmResourceStatsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionApmResourceStatsDataSource.APM_RESOURCE_STATS = FormulaAndFunctionApmResourceStatsDataSource("apm_resource_stats") diff --git a/datadog_api_client/v1/model/formula_and_function_apm_resource_stats_query_definition.py b/datadog_api_client/v1/model/formula_and_function_apm_resource_stats_query_definition.py new file mode 100644 index 0000000000..9546a305a7 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_apm_resource_stats_query_definition.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_data_source import FormulaAndFunctionApmResourceStatsDataSource + from datadog_api_client.v1.model.formula_and_function_apm_resource_stat_name import FormulaAndFunctionApmResourceStatName + +class FormulaAndFunctionApmResourceStatsQueryDefinition(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_data_source import FormulaAndFunctionApmResourceStatsDataSource + from datadog_api_client.v1.model.formula_and_function_apm_resource_stat_name import FormulaAndFunctionApmResourceStatName + return { + "cross_org_uuids": ([str],), + "data_source": (FormulaAndFunctionApmResourceStatsDataSource,), + "env": (str,), + "group_by": ([str],), + "name": (str,), + "operation_name": (str,), + "primary_tag_name": (str,), + "primary_tag_value": (str,), + "resource_name": (str,), + "service": (str,), + "stat": (FormulaAndFunctionApmResourceStatName,), + } + attribute_map = { + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "env": "env", + "group_by": "group_by", + "name": "name", + "operation_name": "operation_name", + "primary_tag_name": "primary_tag_name", + "primary_tag_value": "primary_tag_value", + "resource_name": "resource_name", + "service": "service", + "stat": "stat", + } + + def __init__(self_, data_source: FormulaAndFunctionApmResourceStatsDataSource, env: str, name: str, service: str, stat: FormulaAndFunctionApmResourceStatName, cross_org_uuids: Union[List[str], UnsetType]=unset, group_by: Union[List[str], UnsetType]=unset, operation_name: Union[str, UnsetType]=unset, primary_tag_name: Union[str, UnsetType]=unset, primary_tag_value: Union[str, UnsetType]=unset, resource_name: Union[str, UnsetType]=unset, **kwargs): + """ + APM resource stats query using formulas and functions. Deprecated - Use ``apm_metrics`` query type instead. + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data source for APM resource stats queries. + :type data_source: FormulaAndFunctionApmResourceStatsDataSource + + :param env: APM environment. + :type env: str + + :param group_by: Array of fields to group results by. + :type group_by: [str], optional + + :param name: Name of this query to use in formulas. + :type name: str + + :param operation_name: Name of operation on service. + :type operation_name: str, optional + + :param primary_tag_name: Name of the second primary tag used within APM. Required when ``primary_tag_value`` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog + :type primary_tag_name: str, optional + + :param primary_tag_value: Value of the second primary tag by which to filter APM data. ``primary_tag_name`` must also be specified. + :type primary_tag_value: str, optional + + :param resource_name: APM resource name. + :type resource_name: str, optional + + :param service: APM service name. + :type service: str + + :param stat: APM resource stat name. + :type stat: FormulaAndFunctionApmResourceStatName + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if group_by is not unset: + kwargs["group_by"] = group_by + if operation_name is not unset: + kwargs["operation_name"] = operation_name + if primary_tag_name is not unset: + kwargs["primary_tag_name"] = primary_tag_name + if primary_tag_value is not unset: + kwargs["primary_tag_value"] = primary_tag_value + if resource_name is not unset: + kwargs["resource_name"] = resource_name + super().__init__(kwargs) + + + self_.data_source = data_source + self_.env = env + self_.name = name + self_.service = service + self_.stat = stat diff --git a/datadog_api_client/v1/model/formula_and_function_cloud_cost_data_source.py b/datadog_api_client/v1/model/formula_and_function_cloud_cost_data_source.py new file mode 100644 index 0000000000..5bd28468e1 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_cloud_cost_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionCloudCostDataSource(ModelSimple): + """ + Data source for Cloud Cost queries. + + :param value: If omitted defaults to "cloud_cost". Must be one of ["cloud_cost"]. + :type value: str + """ + + allowed_values = { + "cloud_cost", + } + CLOUD_COST: ClassVar["FormulaAndFunctionCloudCostDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionCloudCostDataSource.CLOUD_COST = FormulaAndFunctionCloudCostDataSource("cloud_cost") diff --git a/datadog_api_client/v1/model/formula_and_function_cloud_cost_query_definition.py b/datadog_api_client/v1/model/formula_and_function_cloud_cost_query_definition.py new file mode 100644 index 0000000000..f843985293 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_cloud_cost_query_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_aggregator import WidgetAggregator + from datadog_api_client.v1.model.formula_and_function_cloud_cost_data_source import FormulaAndFunctionCloudCostDataSource + +class FormulaAndFunctionCloudCostQueryDefinition(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_aggregator import WidgetAggregator + from datadog_api_client.v1.model.formula_and_function_cloud_cost_data_source import FormulaAndFunctionCloudCostDataSource + return { + "aggregator": (WidgetAggregator,), + "cross_org_uuids": ([str],), + "data_source": (FormulaAndFunctionCloudCostDataSource,), + "name": (str,), + "query": (str,), + } + attribute_map = { + "aggregator": "aggregator", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "name": "name", + "query": "query", + } + + def __init__(self_, data_source: FormulaAndFunctionCloudCostDataSource, name: str, query: str, aggregator: Union[WidgetAggregator, UnsetType]=unset, cross_org_uuids: Union[List[str], UnsetType]=unset, **kwargs): + """ + A formula and functions Cloud Cost query. + + :param aggregator: Aggregator used for the request. + :type aggregator: WidgetAggregator, optional + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data source for Cloud Cost queries. + :type data_source: FormulaAndFunctionCloudCostDataSource + + :param name: Name of the query for use in formulas. + :type name: str + + :param query: Query for Cloud Cost data. + :type query: str + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + super().__init__(kwargs) + + + self_.data_source = data_source + self_.name = name + self_.query = query diff --git a/datadog_api_client/v1/model/formula_and_function_event_aggregation.py b/datadog_api_client/v1/model/formula_and_function_event_aggregation.py new file mode 100644 index 0000000000..5e4c2be604 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_event_aggregation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionEventAggregation(ModelSimple): + """ + Aggregation methods for event platform queries. + + :param value: Must be one of ["count", "cardinality", "median", "pc75", "pc90", "pc95", "pc98", "pc99", "sum", "min", "max", "avg"]. + :type value: str + """ + + allowed_values = { + "count", + "cardinality", + "median", + "pc75", + "pc90", + "pc95", + "pc98", + "pc99", + "sum", + "min", + "max", + "avg", + } + COUNT: ClassVar["FormulaAndFunctionEventAggregation"] + CARDINALITY: ClassVar["FormulaAndFunctionEventAggregation"] + MEDIAN: ClassVar["FormulaAndFunctionEventAggregation"] + PC75: ClassVar["FormulaAndFunctionEventAggregation"] + PC90: ClassVar["FormulaAndFunctionEventAggregation"] + PC95: ClassVar["FormulaAndFunctionEventAggregation"] + PC98: ClassVar["FormulaAndFunctionEventAggregation"] + PC99: ClassVar["FormulaAndFunctionEventAggregation"] + SUM: ClassVar["FormulaAndFunctionEventAggregation"] + MIN: ClassVar["FormulaAndFunctionEventAggregation"] + MAX: ClassVar["FormulaAndFunctionEventAggregation"] + AVG: ClassVar["FormulaAndFunctionEventAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionEventAggregation.COUNT = FormulaAndFunctionEventAggregation("count") +FormulaAndFunctionEventAggregation.CARDINALITY = FormulaAndFunctionEventAggregation("cardinality") +FormulaAndFunctionEventAggregation.MEDIAN = FormulaAndFunctionEventAggregation("median") +FormulaAndFunctionEventAggregation.PC75 = FormulaAndFunctionEventAggregation("pc75") +FormulaAndFunctionEventAggregation.PC90 = FormulaAndFunctionEventAggregation("pc90") +FormulaAndFunctionEventAggregation.PC95 = FormulaAndFunctionEventAggregation("pc95") +FormulaAndFunctionEventAggregation.PC98 = FormulaAndFunctionEventAggregation("pc98") +FormulaAndFunctionEventAggregation.PC99 = FormulaAndFunctionEventAggregation("pc99") +FormulaAndFunctionEventAggregation.SUM = FormulaAndFunctionEventAggregation("sum") +FormulaAndFunctionEventAggregation.MIN = FormulaAndFunctionEventAggregation("min") +FormulaAndFunctionEventAggregation.MAX = FormulaAndFunctionEventAggregation("max") +FormulaAndFunctionEventAggregation.AVG = FormulaAndFunctionEventAggregation("avg") diff --git a/datadog_api_client/v1/model/formula_and_function_event_query_definition.py b/datadog_api_client/v1/model/formula_and_function_event_query_definition.py new file mode 100644 index 0000000000..f86a2969e2 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_event_query_definition.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_event_query_definition_compute import FormulaAndFunctionEventQueryDefinitionCompute + from datadog_api_client.v1.model.formula_and_function_events_data_source import FormulaAndFunctionEventsDataSource + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_config import FormulaAndFunctionEventQueryGroupByConfig + from datadog_api_client.v1.model.formula_and_function_event_query_definition_search import FormulaAndFunctionEventQueryDefinitionSearch + from datadog_api_client.v1.model.formula_and_function_event_query_group_by import FormulaAndFunctionEventQueryGroupBy + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_fields import FormulaAndFunctionEventQueryGroupByFields + +class FormulaAndFunctionEventQueryDefinition(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_event_query_definition_compute import FormulaAndFunctionEventQueryDefinitionCompute + from datadog_api_client.v1.model.formula_and_function_events_data_source import FormulaAndFunctionEventsDataSource + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_config import FormulaAndFunctionEventQueryGroupByConfig + from datadog_api_client.v1.model.formula_and_function_event_query_definition_search import FormulaAndFunctionEventQueryDefinitionSearch + return { + "compute": (FormulaAndFunctionEventQueryDefinitionCompute,), + "cross_org_uuids": ([str],), + "data_source": (FormulaAndFunctionEventsDataSource,), + "group_by": (FormulaAndFunctionEventQueryGroupByConfig,), + "indexes": ([str],), + "name": (str,), + "search": (FormulaAndFunctionEventQueryDefinitionSearch,), + "storage": (str,), + } + attribute_map = { + "compute": "compute", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "group_by": "group_by", + "indexes": "indexes", + "name": "name", + "search": "search", + "storage": "storage", + } + + def __init__(self_, compute: FormulaAndFunctionEventQueryDefinitionCompute, data_source: FormulaAndFunctionEventsDataSource, name: str, cross_org_uuids: Union[List[str], UnsetType]=unset, group_by: Union[FormulaAndFunctionEventQueryGroupByConfig, List[FormulaAndFunctionEventQueryGroupBy], FormulaAndFunctionEventQueryGroupByFields, UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, search: Union[FormulaAndFunctionEventQueryDefinitionSearch, UnsetType]=unset, storage: Union[str, UnsetType]=unset, **kwargs): + """ + A formula and functions events query. + + :param compute: Compute options. + :type compute: FormulaAndFunctionEventQueryDefinitionCompute + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data source for event platform-based queries. + :type data_source: FormulaAndFunctionEventsDataSource + + :param group_by: Group by configuration for a formula and functions events query. Accepts either a list of facet objects or a flat object that specifies a list of facet fields. + :type group_by: FormulaAndFunctionEventQueryGroupByConfig, optional + + :param indexes: An array of index names to query in the stream. Omit or use ``[]`` to query all indexes at once. + :type indexes: [str], optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param search: Search options. + :type search: FormulaAndFunctionEventQueryDefinitionSearch, optional + + :param storage: Option for storage location. Feature in Private Beta. + :type storage: str, optional + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if group_by is not unset: + kwargs["group_by"] = group_by + if indexes is not unset: + kwargs["indexes"] = indexes + if search is not unset: + kwargs["search"] = search + if storage is not unset: + kwargs["storage"] = storage + super().__init__(kwargs) + + + self_.compute = compute + self_.data_source = data_source + self_.name = name diff --git a/datadog_api_client/v1/model/formula_and_function_event_query_definition_compute.py b/datadog_api_client/v1/model/formula_and_function_event_query_definition_compute.py new file mode 100644 index 0000000000..bc3d8d5678 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_event_query_definition_compute.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_event_aggregation import FormulaAndFunctionEventAggregation + +class FormulaAndFunctionEventQueryDefinitionCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_event_aggregation import FormulaAndFunctionEventAggregation + return { + "aggregation": (FormulaAndFunctionEventAggregation,), + "interval": (int,), + "metric": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + } + + def __init__(self_, aggregation: FormulaAndFunctionEventAggregation, interval: Union[int, UnsetType]=unset, metric: Union[str, UnsetType]=unset, **kwargs): + """ + Compute options. + + :param aggregation: Aggregation methods for event platform queries. + :type aggregation: FormulaAndFunctionEventAggregation + + :param interval: A time interval in milliseconds. + :type interval: int, optional + + :param metric: Measurable attribute to compute. + :type metric: str, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v1/model/formula_and_function_event_query_definition_search.py b/datadog_api_client/v1/model/formula_and_function_event_query_definition_search.py new file mode 100644 index 0000000000..e40c15e4a4 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_event_query_definition_search.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FormulaAndFunctionEventQueryDefinitionSearch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: str, **kwargs): + """ + Search options. + + :param query: Events search string. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v1/model/formula_and_function_event_query_group_by.py b/datadog_api_client/v1/model/formula_and_function_event_query_group_by.py new file mode 100644 index 0000000000..cf8d2d10ed --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_event_query_group_by.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_sort import FormulaAndFunctionEventQueryGroupBySort + +class FormulaAndFunctionEventQueryGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_sort import FormulaAndFunctionEventQueryGroupBySort + return { + "facet": (str,), + "limit": (int,), + "sort": (FormulaAndFunctionEventQueryGroupBySort,), + } + attribute_map = { + "facet": "facet", + "limit": "limit", + "sort": "sort", + } + + def __init__(self_, facet: str, limit: Union[int, UnsetType]=unset, sort: Union[FormulaAndFunctionEventQueryGroupBySort, UnsetType]=unset, **kwargs): + """ + List of objects used to group by. + + :param facet: Event facet. + :type facet: str + + :param limit: Number of groups to return. + :type limit: int, optional + + :param sort: Options for sorting group by results. + :type sort: FormulaAndFunctionEventQueryGroupBySort, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v1/model/formula_and_function_event_query_group_by_config.py b/datadog_api_client/v1/model/formula_and_function_event_query_group_by_config.py new file mode 100644 index 0000000000..245a22e515 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_event_query_group_by_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FormulaAndFunctionEventQueryGroupByConfig(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Group by configuration for a formula and functions events query. Accepts either a list of facet objects or a flat object that specifies a list of facet fields. + + :param fields: List of event facets to group by. + :type fields: [str] + + :param limit: Number of groups to return. + :type limit: int, optional + + :param sort: Options for sorting group by results. + :type sort: FormulaAndFunctionEventQueryGroupBySort, 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.v1.model.formula_and_function_event_query_group_by import FormulaAndFunctionEventQueryGroupBy + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_fields import FormulaAndFunctionEventQueryGroupByFields + return { + "oneOf": [ + [FormulaAndFunctionEventQueryGroupBy], + FormulaAndFunctionEventQueryGroupByFields, + ], + } diff --git a/datadog_api_client/v1/model/formula_and_function_event_query_group_by_fields.py b/datadog_api_client/v1/model/formula_and_function_event_query_group_by_fields.py new file mode 100644 index 0000000000..44cce6018d --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_event_query_group_by_fields.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_sort import FormulaAndFunctionEventQueryGroupBySort + +class FormulaAndFunctionEventQueryGroupByFields(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_sort import FormulaAndFunctionEventQueryGroupBySort + return { + "fields": ([str],), + "limit": (int,), + "sort": (FormulaAndFunctionEventQueryGroupBySort,), + } + attribute_map = { + "fields": "fields", + "limit": "limit", + "sort": "sort", + } + + def __init__(self_, fields: List[str], limit: Union[int, UnsetType]=unset, sort: Union[FormulaAndFunctionEventQueryGroupBySort, UnsetType]=unset, **kwargs): + """ + Flat group by configuration using multiple event facet fields. + + :param fields: List of event facets to group by. + :type fields: [str] + + :param limit: Number of groups to return. + :type limit: int, optional + + :param sort: Options for sorting group by results. + :type sort: FormulaAndFunctionEventQueryGroupBySort, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + + self_.fields = fields diff --git a/datadog_api_client/v1/model/formula_and_function_event_query_group_by_sort.py b/datadog_api_client/v1/model/formula_and_function_event_query_group_by_sort.py new file mode 100644 index 0000000000..76630ee818 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_event_query_group_by_sort.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_event_aggregation import FormulaAndFunctionEventAggregation + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + +class FormulaAndFunctionEventQueryGroupBySort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_event_aggregation import FormulaAndFunctionEventAggregation + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + return { + "aggregation": (FormulaAndFunctionEventAggregation,), + "metric": (str,), + "order": (QuerySortOrder,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + "order": "order", + } + + def __init__(self_, aggregation: FormulaAndFunctionEventAggregation, metric: Union[str, UnsetType]=unset, order: Union[QuerySortOrder, UnsetType]=unset, **kwargs): + """ + Options for sorting group by results. + + :param aggregation: Aggregation methods for event platform queries. + :type aggregation: FormulaAndFunctionEventAggregation + + :param metric: Metric used for sorting group by results. + :type metric: str, optional + + :param order: Direction of sort. + :type order: QuerySortOrder, optional + """ + if metric is not unset: + kwargs["metric"] = metric + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v1/model/formula_and_function_events_data_source.py b/datadog_api_client/v1/model/formula_and_function_events_data_source.py new file mode 100644 index 0000000000..f6ca187a5b --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_events_data_source.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionEventsDataSource(ModelSimple): + """ + Data source for event platform-based queries. + + :param value: Must be one of ["logs", "spans", "network", "rum", "security_signals", "profiles", "audit", "events", "ci_tests", "ci_pipelines", "incident_analytics", "product_analytics", "on_call_events", "errors", "llm_observability"]. + :type value: str + """ + + allowed_values = { + "logs", + "spans", + "network", + "rum", + "security_signals", + "profiles", + "audit", + "events", + "ci_tests", + "ci_pipelines", + "incident_analytics", + "product_analytics", + "on_call_events", + "errors", + "llm_observability", + } + LOGS: ClassVar["FormulaAndFunctionEventsDataSource"] + SPANS: ClassVar["FormulaAndFunctionEventsDataSource"] + NETWORK: ClassVar["FormulaAndFunctionEventsDataSource"] + RUM: ClassVar["FormulaAndFunctionEventsDataSource"] + SECURITY_SIGNALS: ClassVar["FormulaAndFunctionEventsDataSource"] + PROFILES: ClassVar["FormulaAndFunctionEventsDataSource"] + AUDIT: ClassVar["FormulaAndFunctionEventsDataSource"] + EVENTS: ClassVar["FormulaAndFunctionEventsDataSource"] + CI_TESTS: ClassVar["FormulaAndFunctionEventsDataSource"] + CI_PIPELINES: ClassVar["FormulaAndFunctionEventsDataSource"] + INCIDENT_ANALYTICS: ClassVar["FormulaAndFunctionEventsDataSource"] + PRODUCT_ANALYTICS: ClassVar["FormulaAndFunctionEventsDataSource"] + ON_CALL_EVENTS: ClassVar["FormulaAndFunctionEventsDataSource"] + ERRORS: ClassVar["FormulaAndFunctionEventsDataSource"] + LLM_OBSERVABILITY: ClassVar["FormulaAndFunctionEventsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionEventsDataSource.LOGS = FormulaAndFunctionEventsDataSource("logs") +FormulaAndFunctionEventsDataSource.SPANS = FormulaAndFunctionEventsDataSource("spans") +FormulaAndFunctionEventsDataSource.NETWORK = FormulaAndFunctionEventsDataSource("network") +FormulaAndFunctionEventsDataSource.RUM = FormulaAndFunctionEventsDataSource("rum") +FormulaAndFunctionEventsDataSource.SECURITY_SIGNALS = FormulaAndFunctionEventsDataSource("security_signals") +FormulaAndFunctionEventsDataSource.PROFILES = FormulaAndFunctionEventsDataSource("profiles") +FormulaAndFunctionEventsDataSource.AUDIT = FormulaAndFunctionEventsDataSource("audit") +FormulaAndFunctionEventsDataSource.EVENTS = FormulaAndFunctionEventsDataSource("events") +FormulaAndFunctionEventsDataSource.CI_TESTS = FormulaAndFunctionEventsDataSource("ci_tests") +FormulaAndFunctionEventsDataSource.CI_PIPELINES = FormulaAndFunctionEventsDataSource("ci_pipelines") +FormulaAndFunctionEventsDataSource.INCIDENT_ANALYTICS = FormulaAndFunctionEventsDataSource("incident_analytics") +FormulaAndFunctionEventsDataSource.PRODUCT_ANALYTICS = FormulaAndFunctionEventsDataSource("product_analytics") +FormulaAndFunctionEventsDataSource.ON_CALL_EVENTS = FormulaAndFunctionEventsDataSource("on_call_events") +FormulaAndFunctionEventsDataSource.ERRORS = FormulaAndFunctionEventsDataSource("errors") +FormulaAndFunctionEventsDataSource.LLM_OBSERVABILITY = FormulaAndFunctionEventsDataSource("llm_observability") diff --git a/datadog_api_client/v1/model/formula_and_function_metric_aggregation.py b/datadog_api_client/v1/model/formula_and_function_metric_aggregation.py new file mode 100644 index 0000000000..9fd3ee72bc --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_metric_aggregation.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionMetricAggregation(ModelSimple): + """ + The aggregation methods available for metrics queries. + + :param value: Must be one of ["avg", "min", "max", "sum", "last", "area", "l2norm", "percentile"]. + :type value: str + """ + + allowed_values = { + "avg", + "min", + "max", + "sum", + "last", + "area", + "l2norm", + "percentile", + } + AVG: ClassVar["FormulaAndFunctionMetricAggregation"] + MIN: ClassVar["FormulaAndFunctionMetricAggregation"] + MAX: ClassVar["FormulaAndFunctionMetricAggregation"] + SUM: ClassVar["FormulaAndFunctionMetricAggregation"] + LAST: ClassVar["FormulaAndFunctionMetricAggregation"] + AREA: ClassVar["FormulaAndFunctionMetricAggregation"] + L2NORM: ClassVar["FormulaAndFunctionMetricAggregation"] + PERCENTILE: ClassVar["FormulaAndFunctionMetricAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionMetricAggregation.AVG = FormulaAndFunctionMetricAggregation("avg") +FormulaAndFunctionMetricAggregation.MIN = FormulaAndFunctionMetricAggregation("min") +FormulaAndFunctionMetricAggregation.MAX = FormulaAndFunctionMetricAggregation("max") +FormulaAndFunctionMetricAggregation.SUM = FormulaAndFunctionMetricAggregation("sum") +FormulaAndFunctionMetricAggregation.LAST = FormulaAndFunctionMetricAggregation("last") +FormulaAndFunctionMetricAggregation.AREA = FormulaAndFunctionMetricAggregation("area") +FormulaAndFunctionMetricAggregation.L2NORM = FormulaAndFunctionMetricAggregation("l2norm") +FormulaAndFunctionMetricAggregation.PERCENTILE = FormulaAndFunctionMetricAggregation("percentile") diff --git a/datadog_api_client/v1/model/formula_and_function_metric_data_source.py b/datadog_api_client/v1/model/formula_and_function_metric_data_source.py new file mode 100644 index 0000000000..95330033dc --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_metric_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionMetricDataSource(ModelSimple): + """ + Data source for metrics queries. + + :param value: If omitted defaults to "metrics". Must be one of ["metrics"]. + :type value: str + """ + + allowed_values = { + "metrics", + } + METRICS: ClassVar["FormulaAndFunctionMetricDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionMetricDataSource.METRICS = FormulaAndFunctionMetricDataSource("metrics") diff --git a/datadog_api_client/v1/model/formula_and_function_metric_query_definition.py b/datadog_api_client/v1/model/formula_and_function_metric_query_definition.py new file mode 100644 index 0000000000..8d69eb2585 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_metric_query_definition.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_metric_aggregation import FormulaAndFunctionMetricAggregation + from datadog_api_client.v1.model.formula_and_function_metric_data_source import FormulaAndFunctionMetricDataSource + from datadog_api_client.v1.model.formula_and_function_metric_semantic_mode import FormulaAndFunctionMetricSemanticMode + +class FormulaAndFunctionMetricQueryDefinition(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_metric_aggregation import FormulaAndFunctionMetricAggregation + from datadog_api_client.v1.model.formula_and_function_metric_data_source import FormulaAndFunctionMetricDataSource + from datadog_api_client.v1.model.formula_and_function_metric_semantic_mode import FormulaAndFunctionMetricSemanticMode + return { + "aggregator": (FormulaAndFunctionMetricAggregation,), + "cross_org_uuids": ([str],), + "data_source": (FormulaAndFunctionMetricDataSource,), + "name": (str,), + "query": (str,), + "semantic_mode": (FormulaAndFunctionMetricSemanticMode,), + } + attribute_map = { + "aggregator": "aggregator", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "name": "name", + "query": "query", + "semantic_mode": "semantic_mode", + } + + def __init__(self_, data_source: FormulaAndFunctionMetricDataSource, name: str, query: str, aggregator: Union[FormulaAndFunctionMetricAggregation, UnsetType]=unset, cross_org_uuids: Union[List[str], UnsetType]=unset, semantic_mode: Union[FormulaAndFunctionMetricSemanticMode, UnsetType]=unset, **kwargs): + """ + A formula and functions metrics query. + + :param aggregator: The aggregation methods available for metrics queries. + :type aggregator: FormulaAndFunctionMetricAggregation, optional + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data source for metrics queries. + :type data_source: FormulaAndFunctionMetricDataSource + + :param name: Name of the query for use in formulas. + :type name: str + + :param query: Metrics query definition. + :type query: str + + :param semantic_mode: Semantic mode for metrics queries. This determines how metrics from different sources are combined or displayed. + :type semantic_mode: FormulaAndFunctionMetricSemanticMode, optional + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if semantic_mode is not unset: + kwargs["semantic_mode"] = semantic_mode + super().__init__(kwargs) + + + self_.data_source = data_source + self_.name = name + self_.query = query diff --git a/datadog_api_client/v1/model/formula_and_function_metric_semantic_mode.py b/datadog_api_client/v1/model/formula_and_function_metric_semantic_mode.py new file mode 100644 index 0000000000..e724b404ee --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_metric_semantic_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionMetricSemanticMode(ModelSimple): + """ + Semantic mode for metrics queries. This determines how metrics from different sources are combined or displayed. + + :param value: Must be one of ["combined", "native"]. + :type value: str + """ + + allowed_values = { + "combined", + "native", + } + COMBINED: ClassVar["FormulaAndFunctionMetricSemanticMode"] + NATIVE: ClassVar["FormulaAndFunctionMetricSemanticMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionMetricSemanticMode.COMBINED = FormulaAndFunctionMetricSemanticMode("combined") +FormulaAndFunctionMetricSemanticMode.NATIVE = FormulaAndFunctionMetricSemanticMode("native") diff --git a/datadog_api_client/v1/model/formula_and_function_process_query_data_source.py b/datadog_api_client/v1/model/formula_and_function_process_query_data_source.py new file mode 100644 index 0000000000..b48258d96c --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_process_query_data_source.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionProcessQueryDataSource(ModelSimple): + """ + Data sources that rely on the process backend. + + :param value: Must be one of ["process", "container"]. + :type value: str + """ + + allowed_values = { + "process", + "container", + } + PROCESS: ClassVar["FormulaAndFunctionProcessQueryDataSource"] + CONTAINER: ClassVar["FormulaAndFunctionProcessQueryDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionProcessQueryDataSource.PROCESS = FormulaAndFunctionProcessQueryDataSource("process") +FormulaAndFunctionProcessQueryDataSource.CONTAINER = FormulaAndFunctionProcessQueryDataSource("container") diff --git a/datadog_api_client/v1/model/formula_and_function_process_query_definition.py b/datadog_api_client/v1/model/formula_and_function_process_query_definition.py new file mode 100644 index 0000000000..31bc0a8c52 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_process_query_definition.py @@ -0,0 +1,118 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_metric_aggregation import FormulaAndFunctionMetricAggregation + from datadog_api_client.v1.model.formula_and_function_process_query_data_source import FormulaAndFunctionProcessQueryDataSource + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + +class FormulaAndFunctionProcessQueryDefinition(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_metric_aggregation import FormulaAndFunctionMetricAggregation + from datadog_api_client.v1.model.formula_and_function_process_query_data_source import FormulaAndFunctionProcessQueryDataSource + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + return { + "aggregator": (FormulaAndFunctionMetricAggregation,), + "cross_org_uuids": ([str],), + "data_source": (FormulaAndFunctionProcessQueryDataSource,), + "is_normalized_cpu": (bool,), + "limit": (int,), + "metric": (str,), + "name": (str,), + "sort": (QuerySortOrder,), + "tag_filters": ([str],), + "text_filter": (str,), + } + attribute_map = { + "aggregator": "aggregator", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "is_normalized_cpu": "is_normalized_cpu", + "limit": "limit", + "metric": "metric", + "name": "name", + "sort": "sort", + "tag_filters": "tag_filters", + "text_filter": "text_filter", + } + + def __init__(self_, data_source: FormulaAndFunctionProcessQueryDataSource, metric: str, name: str, aggregator: Union[FormulaAndFunctionMetricAggregation, UnsetType]=unset, cross_org_uuids: Union[List[str], UnsetType]=unset, is_normalized_cpu: Union[bool, UnsetType]=unset, limit: Union[int, UnsetType]=unset, sort: Union[QuerySortOrder, UnsetType]=unset, tag_filters: Union[List[str], UnsetType]=unset, text_filter: Union[str, UnsetType]=unset, **kwargs): + """ + Process query using formulas and functions. + + :param aggregator: The aggregation methods available for metrics queries. + :type aggregator: FormulaAndFunctionMetricAggregation, optional + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data sources that rely on the process backend. + :type data_source: FormulaAndFunctionProcessQueryDataSource + + :param is_normalized_cpu: Whether to normalize the CPU percentages. + :type is_normalized_cpu: bool, optional + + :param limit: Number of hits to return. + :type limit: int, optional + + :param metric: Process metric name. + :type metric: str + + :param name: Name of query for use in formulas. + :type name: str + + :param sort: Direction of sort. + :type sort: QuerySortOrder, optional + + :param tag_filters: An array of tags to filter by. + :type tag_filters: [str], optional + + :param text_filter: Text to use as filter. + :type text_filter: str, optional + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if is_normalized_cpu is not unset: + kwargs["is_normalized_cpu"] = is_normalized_cpu + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + if tag_filters is not unset: + kwargs["tag_filters"] = tag_filters + if text_filter is not unset: + kwargs["text_filter"] = text_filter + super().__init__(kwargs) + + + self_.data_source = data_source + self_.metric = metric + self_.name = name diff --git a/datadog_api_client/v1/model/formula_and_function_product_analytics_extended_data_source.py b/datadog_api_client/v1/model/formula_and_function_product_analytics_extended_data_source.py new file mode 100644 index 0000000000..d5e7fc1b1e --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_product_analytics_extended_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionProductAnalyticsExtendedDataSource(ModelSimple): + """ + Data source for Product Analytics Extended queries. + + :param value: If omitted defaults to "product_analytics_extended". Must be one of ["product_analytics_extended"]. + :type value: str + """ + + allowed_values = { + "product_analytics_extended", + } + PRODUCT_ANALYTICS_EXTENDED: ClassVar["FormulaAndFunctionProductAnalyticsExtendedDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionProductAnalyticsExtendedDataSource.PRODUCT_ANALYTICS_EXTENDED = FormulaAndFunctionProductAnalyticsExtendedDataSource("product_analytics_extended") diff --git a/datadog_api_client/v1/model/formula_and_function_product_analytics_extended_query_definition.py b/datadog_api_client/v1/model/formula_and_function_product_analytics_extended_query_definition.py new file mode 100644 index 0000000000..3a1ae19c45 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_product_analytics_extended_query_definition.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + from datadog_api_client.v1.model.product_analytics_extended_compute import ProductAnalyticsExtendedCompute + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_data_source import FormulaAndFunctionProductAnalyticsExtendedDataSource + from datadog_api_client.v1.model.product_analytics_extended_group_by import ProductAnalyticsExtendedGroupBy + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition_indexes_items import FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems + from datadog_api_client.v1.model.product_analytics_base_query import ProductAnalyticsBaseQuery + +class FormulaAndFunctionProductAnalyticsExtendedQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + from datadog_api_client.v1.model.product_analytics_extended_compute import ProductAnalyticsExtendedCompute + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_data_source import FormulaAndFunctionProductAnalyticsExtendedDataSource + from datadog_api_client.v1.model.product_analytics_extended_group_by import ProductAnalyticsExtendedGroupBy + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition_indexes_items import FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems + from datadog_api_client.v1.model.product_analytics_base_query import ProductAnalyticsBaseQuery + return { + "audience_filters": (ProductAnalyticsAudienceFilters,), + "compute": (ProductAnalyticsExtendedCompute,), + "data_source": (FormulaAndFunctionProductAnalyticsExtendedDataSource,), + "group_by": ([ProductAnalyticsExtendedGroupBy],), + "indexes": ([FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems],), + "name": (str,), + "query": (ProductAnalyticsBaseQuery,), + } + attribute_map = { + "audience_filters": "audience_filters", + "compute": "compute", + "data_source": "data_source", + "group_by": "group_by", + "indexes": "indexes", + "name": "name", + "query": "query", + } + + def __init__(self_, compute: ProductAnalyticsExtendedCompute, data_source: FormulaAndFunctionProductAnalyticsExtendedDataSource, name: str, query: ProductAnalyticsBaseQuery, audience_filters: Union[ProductAnalyticsAudienceFilters, UnsetType]=unset, group_by: Union[List[ProductAnalyticsExtendedGroupBy], UnsetType]=unset, indexes: Union[List[FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems], UnsetType]=unset, **kwargs): + """ + A formula and functions Product Analytics Extended query for advanced analytics features. + + :param audience_filters: Product Analytics/RUM audience filters. + :type audience_filters: ProductAnalyticsAudienceFilters, optional + + :param compute: Compute configuration for Product Analytics Extended queries. + :type compute: ProductAnalyticsExtendedCompute + + :param data_source: Data source for Product Analytics Extended queries. + :type data_source: FormulaAndFunctionProductAnalyticsExtendedDataSource + + :param group_by: Group by configuration. + :type group_by: [ProductAnalyticsExtendedGroupBy], optional + + :param indexes: Event indexes to query. + :type indexes: [FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems], optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param query: Product Analytics event query. + :type query: ProductAnalyticsBaseQuery + """ + if audience_filters is not unset: + kwargs["audience_filters"] = audience_filters + if group_by is not unset: + kwargs["group_by"] = group_by + if indexes is not unset: + kwargs["indexes"] = indexes + super().__init__(kwargs) + + + self_.compute = compute + self_.data_source = data_source + self_.name = name + self_.query = query diff --git a/datadog_api_client/v1/model/formula_and_function_product_analytics_extended_query_definition_indexes_items.py b/datadog_api_client/v1/model/formula_and_function_product_analytics_extended_query_definition_indexes_items.py new file mode 100644 index 0000000000..f93a3d7800 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_product_analytics_extended_query_definition_indexes_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems(ModelSimple): + """ + Use `"*"` to query all indexes. + + :param value: If omitted defaults to "*". Must be one of ["*"]. + :type value: str + """ + + allowed_values = { + "*", + } + ALL: ClassVar["FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems.ALL = FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems("*") diff --git a/datadog_api_client/v1/model/formula_and_function_query_definition.py b/datadog_api_client/v1/model/formula_and_function_query_definition.py new file mode 100644 index 0000000000..4cae81381d --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_query_definition.py @@ -0,0 +1,177 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FormulaAndFunctionQueryDefinition(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A formula and function query. + + :param aggregator: The aggregation methods available for metrics queries. + :type aggregator: FormulaAndFunctionMetricAggregation, optional + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data source for metrics queries. + :type data_source: FormulaAndFunctionMetricDataSource + + :param name: Name of the query for use in formulas. + :type name: str + + :param query: Metrics query definition. + :type query: str + + :param semantic_mode: Semantic mode for metrics queries. This determines how metrics from different sources are combined or displayed. + :type semantic_mode: FormulaAndFunctionMetricSemanticMode, optional + + :param compute: Compute options. + :type compute: FormulaAndFunctionEventQueryDefinitionCompute + + :param group_by: Group by configuration for a formula and functions events query. Accepts either a list of facet objects or a flat object that specifies a list of facet fields. + :type group_by: FormulaAndFunctionEventQueryGroupByConfig, optional + + :param indexes: An array of index names to query in the stream. Omit or use `[]` to query all indexes at once. + :type indexes: [str], optional + + :param search: Search options. + :type search: FormulaAndFunctionEventQueryDefinitionSearch, optional + + :param storage: Option for storage location. Feature in Private Beta. + :type storage: str, optional + + :param is_normalized_cpu: Whether to normalize the CPU percentages. + :type is_normalized_cpu: bool, optional + + :param limit: Number of hits to return. + :type limit: int, optional + + :param metric: Process metric name. + :type metric: str + + :param sort: Direction of sort. + :type sort: QuerySortOrder, optional + + :param tag_filters: An array of tags to filter by. + :type tag_filters: [str], optional + + :param text_filter: Text to use as filter. + :type text_filter: str, optional + + :param env: APM environment. + :type env: str + + :param is_upstream: Determines whether stats for upstream or downstream dependencies should be queried. + :type is_upstream: bool, optional + + :param operation_name: Name of operation on service. + :type operation_name: str + + :param primary_tag_name: The name of the second primary tag used within APM; required when `primary_tag_value` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog. + :type primary_tag_name: str, optional + + :param primary_tag_value: Filter APM data by the second primary tag. `primary_tag_name` must also be specified. + :type primary_tag_value: str, optional + + :param resource_name: APM resource. + :type resource_name: str + + :param service: APM service. + :type service: str + + :param stat: APM statistic. + :type stat: FormulaAndFunctionApmDependencyStatName + + :param operation_mode: Optional operation mode to aggregate across operation names. + :type operation_mode: str, optional + + :param peer_tags: Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, peer.s3.bucket, etc.). + :type peer_tags: [str], optional + + :param query_filter: Additional filters for the query using metrics query syntax (e.g., env, primary_tag). + :type query_filter: str, optional + + :param resource_hash: The hash of a specific resource to filter by. + :type resource_hash: str, optional + + :param span_kind: Describes the relationship between the span, its parents, and its children in a trace. + :type span_kind: FormulaAndFunctionApmMetricsSpanKind, optional + + :param additional_query_filters: Additional filters applied to the SLO query. + :type additional_query_filters: str, optional + + :param group_mode: Group mode to query measures. + :type group_mode: FormulaAndFunctionSLOGroupMode, optional + + :param measure: SLO measures queries. + :type measure: FormulaAndFunctionSLOMeasure + + :param slo_id: ID of an SLO to query measures. + :type slo_id: str + + :param slo_query_type: Name of the query for use in formulas. + :type slo_query_type: FormulaAndFunctionSLOQueryType, optional + + :param audience_filters: Product Analytics/RUM audience filters. + :type audience_filters: ProductAnalyticsAudienceFilters, 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.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + return { + "oneOf": [ + FormulaAndFunctionMetricQueryDefinition, + FormulaAndFunctionEventQueryDefinition, + FormulaAndFunctionProcessQueryDefinition, + FormulaAndFunctionApmDependencyStatsQueryDefinition, + FormulaAndFunctionApmResourceStatsQueryDefinition, + FormulaAndFunctionApmMetricsQueryDefinition, + FormulaAndFunctionSLOQueryDefinition, + FormulaAndFunctionCloudCostQueryDefinition, + FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, + FormulaAndFunctionUserJourneyQueryDefinition, + FormulaAndFunctionRetentionQueryDefinition, + ], + } diff --git a/datadog_api_client/v1/model/formula_and_function_response_format.py b/datadog_api_client/v1/model/formula_and_function_response_format.py new file mode 100644 index 0000000000..357741aa56 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_response_format.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionResponseFormat(ModelSimple): + """ + Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + + :param value: Must be one of ["timeseries", "scalar", "event_list"]. + :type value: str + """ + + allowed_values = { + "timeseries", + "scalar", + "event_list", + } + TIMESERIES: ClassVar["FormulaAndFunctionResponseFormat"] + SCALAR: ClassVar["FormulaAndFunctionResponseFormat"] + EVENT_LIST: ClassVar["FormulaAndFunctionResponseFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionResponseFormat.TIMESERIES = FormulaAndFunctionResponseFormat("timeseries") +FormulaAndFunctionResponseFormat.SCALAR = FormulaAndFunctionResponseFormat("scalar") +FormulaAndFunctionResponseFormat.EVENT_LIST = FormulaAndFunctionResponseFormat("event_list") diff --git a/datadog_api_client/v1/model/formula_and_function_retention_query_definition.py b/datadog_api_client/v1/model/formula_and_function_retention_query_definition.py new file mode 100644 index 0000000000..d59586cdd5 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_retention_query_definition.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_compute import RetentionCompute + from datadog_api_client.v1.model.retention_data_source import RetentionDataSource + from datadog_api_client.v1.model.retention_group_by import RetentionGroupBy + from datadog_api_client.v1.model.retention_search import RetentionSearch + +class FormulaAndFunctionRetentionQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_compute import RetentionCompute + from datadog_api_client.v1.model.retention_data_source import RetentionDataSource + from datadog_api_client.v1.model.retention_group_by import RetentionGroupBy + from datadog_api_client.v1.model.retention_search import RetentionSearch + return { + "compute": (RetentionCompute,), + "data_source": (RetentionDataSource,), + "group_by": ([RetentionGroupBy],), + "name": (str,), + "search": (RetentionSearch,), + } + attribute_map = { + "compute": "compute", + "data_source": "data_source", + "group_by": "group_by", + "name": "name", + "search": "search", + } + + def __init__(self_, compute: RetentionCompute, data_source: RetentionDataSource, name: str, search: RetentionSearch, group_by: Union[List[RetentionGroupBy], UnsetType]=unset, **kwargs): + """ + A formula and functions Retention query for defining timeseries and scalar visualizations. + + :param compute: Compute configuration for retention queries. + :type compute: RetentionCompute + + :param data_source: Data source for retention queries. + :type data_source: RetentionDataSource + + :param group_by: Group by configuration. + :type group_by: [RetentionGroupBy], optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param search: Search configuration for retention queries. + :type search: RetentionSearch + """ + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + + self_.compute = compute + self_.data_source = data_source + self_.name = name + self_.search = search diff --git a/datadog_api_client/v1/model/formula_and_function_slo_data_source.py b/datadog_api_client/v1/model/formula_and_function_slo_data_source.py new file mode 100644 index 0000000000..c278cca3b6 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_slo_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionSLODataSource(ModelSimple): + """ + Data source for SLO measures queries. + + :param value: If omitted defaults to "slo". Must be one of ["slo"]. + :type value: str + """ + + allowed_values = { + "slo", + } + SLO: ClassVar["FormulaAndFunctionSLODataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionSLODataSource.SLO = FormulaAndFunctionSLODataSource("slo") diff --git a/datadog_api_client/v1/model/formula_and_function_slo_group_mode.py b/datadog_api_client/v1/model/formula_and_function_slo_group_mode.py new file mode 100644 index 0000000000..1a62dd149c --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_slo_group_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionSLOGroupMode(ModelSimple): + """ + Group mode to query measures. + + :param value: Must be one of ["overall", "components"]. + :type value: str + """ + + allowed_values = { + "overall", + "components", + } + OVERALL: ClassVar["FormulaAndFunctionSLOGroupMode"] + COMPONENTS: ClassVar["FormulaAndFunctionSLOGroupMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionSLOGroupMode.OVERALL = FormulaAndFunctionSLOGroupMode("overall") +FormulaAndFunctionSLOGroupMode.COMPONENTS = FormulaAndFunctionSLOGroupMode("components") diff --git a/datadog_api_client/v1/model/formula_and_function_slo_measure.py b/datadog_api_client/v1/model/formula_and_function_slo_measure.py new file mode 100644 index 0000000000..55c0d33cdb --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_slo_measure.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionSLOMeasure(ModelSimple): + """ + SLO measures queries. + + :param value: Must be one of ["good_events", "bad_events", "good_minutes", "bad_minutes", "slo_status", "error_budget_remaining", "burn_rate", "error_budget_burndown"]. + :type value: str + """ + + allowed_values = { + "good_events", + "bad_events", + "good_minutes", + "bad_minutes", + "slo_status", + "error_budget_remaining", + "burn_rate", + "error_budget_burndown", + } + GOOD_EVENTS: ClassVar["FormulaAndFunctionSLOMeasure"] + BAD_EVENTS: ClassVar["FormulaAndFunctionSLOMeasure"] + GOOD_MINUTES: ClassVar["FormulaAndFunctionSLOMeasure"] + BAD_MINUTES: ClassVar["FormulaAndFunctionSLOMeasure"] + SLO_STATUS: ClassVar["FormulaAndFunctionSLOMeasure"] + ERROR_BUDGET_REMAINING: ClassVar["FormulaAndFunctionSLOMeasure"] + BURN_RATE: ClassVar["FormulaAndFunctionSLOMeasure"] + ERROR_BUDGET_BURNDOWN: ClassVar["FormulaAndFunctionSLOMeasure"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionSLOMeasure.GOOD_EVENTS = FormulaAndFunctionSLOMeasure("good_events") +FormulaAndFunctionSLOMeasure.BAD_EVENTS = FormulaAndFunctionSLOMeasure("bad_events") +FormulaAndFunctionSLOMeasure.GOOD_MINUTES = FormulaAndFunctionSLOMeasure("good_minutes") +FormulaAndFunctionSLOMeasure.BAD_MINUTES = FormulaAndFunctionSLOMeasure("bad_minutes") +FormulaAndFunctionSLOMeasure.SLO_STATUS = FormulaAndFunctionSLOMeasure("slo_status") +FormulaAndFunctionSLOMeasure.ERROR_BUDGET_REMAINING = FormulaAndFunctionSLOMeasure("error_budget_remaining") +FormulaAndFunctionSLOMeasure.BURN_RATE = FormulaAndFunctionSLOMeasure("burn_rate") +FormulaAndFunctionSLOMeasure.ERROR_BUDGET_BURNDOWN = FormulaAndFunctionSLOMeasure("error_budget_burndown") diff --git a/datadog_api_client/v1/model/formula_and_function_slo_query_definition.py b/datadog_api_client/v1/model/formula_and_function_slo_query_definition.py new file mode 100644 index 0000000000..5dd0c5f001 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_slo_query_definition.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_slo_data_source import FormulaAndFunctionSLODataSource + from datadog_api_client.v1.model.formula_and_function_slo_group_mode import FormulaAndFunctionSLOGroupMode + from datadog_api_client.v1.model.formula_and_function_slo_measure import FormulaAndFunctionSLOMeasure + from datadog_api_client.v1.model.formula_and_function_slo_query_type import FormulaAndFunctionSLOQueryType + +class FormulaAndFunctionSLOQueryDefinition(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_slo_data_source import FormulaAndFunctionSLODataSource + from datadog_api_client.v1.model.formula_and_function_slo_group_mode import FormulaAndFunctionSLOGroupMode + from datadog_api_client.v1.model.formula_and_function_slo_measure import FormulaAndFunctionSLOMeasure + from datadog_api_client.v1.model.formula_and_function_slo_query_type import FormulaAndFunctionSLOQueryType + return { + "additional_query_filters": (str,), + "cross_org_uuids": ([str],), + "data_source": (FormulaAndFunctionSLODataSource,), + "group_mode": (FormulaAndFunctionSLOGroupMode,), + "measure": (FormulaAndFunctionSLOMeasure,), + "name": (str,), + "slo_id": (str,), + "slo_query_type": (FormulaAndFunctionSLOQueryType,), + } + attribute_map = { + "additional_query_filters": "additional_query_filters", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "group_mode": "group_mode", + "measure": "measure", + "name": "name", + "slo_id": "slo_id", + "slo_query_type": "slo_query_type", + } + + def __init__(self_, data_source: FormulaAndFunctionSLODataSource, measure: FormulaAndFunctionSLOMeasure, slo_id: str, additional_query_filters: Union[str, UnsetType]=unset, cross_org_uuids: Union[List[str], UnsetType]=unset, group_mode: Union[FormulaAndFunctionSLOGroupMode, UnsetType]=unset, name: Union[str, UnsetType]=unset, slo_query_type: Union[FormulaAndFunctionSLOQueryType, UnsetType]=unset, **kwargs): + """ + A formula and functions metrics query. + + :param additional_query_filters: Additional filters applied to the SLO query. + :type additional_query_filters: str, optional + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data source for SLO measures queries. + :type data_source: FormulaAndFunctionSLODataSource + + :param group_mode: Group mode to query measures. + :type group_mode: FormulaAndFunctionSLOGroupMode, optional + + :param measure: SLO measures queries. + :type measure: FormulaAndFunctionSLOMeasure + + :param name: Name of the query for use in formulas. + :type name: str, optional + + :param slo_id: ID of an SLO to query measures. + :type slo_id: str + + :param slo_query_type: Name of the query for use in formulas. + :type slo_query_type: FormulaAndFunctionSLOQueryType, optional + """ + if additional_query_filters is not unset: + kwargs["additional_query_filters"] = additional_query_filters + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if group_mode is not unset: + kwargs["group_mode"] = group_mode + if name is not unset: + kwargs["name"] = name + if slo_query_type is not unset: + kwargs["slo_query_type"] = slo_query_type + super().__init__(kwargs) + + + self_.data_source = data_source + self_.measure = measure + self_.slo_id = slo_id diff --git a/datadog_api_client/v1/model/formula_and_function_slo_query_type.py b/datadog_api_client/v1/model/formula_and_function_slo_query_type.py new file mode 100644 index 0000000000..e1c1969758 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_slo_query_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaAndFunctionSLOQueryType(ModelSimple): + """ + Name of the query for use in formulas. + + :param value: Must be one of ["metric", "monitor", "time_slice"]. + :type value: str + """ + + allowed_values = { + "metric", + "monitor", + "time_slice", + } + METRIC: ClassVar["FormulaAndFunctionSLOQueryType"] + MONITOR: ClassVar["FormulaAndFunctionSLOQueryType"] + TIME_SLICE: ClassVar["FormulaAndFunctionSLOQueryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaAndFunctionSLOQueryType.METRIC = FormulaAndFunctionSLOQueryType("metric") +FormulaAndFunctionSLOQueryType.MONITOR = FormulaAndFunctionSLOQueryType("monitor") +FormulaAndFunctionSLOQueryType.TIME_SLICE = FormulaAndFunctionSLOQueryType("time_slice") diff --git a/datadog_api_client/v1/model/formula_and_function_user_journey_query_definition.py b/datadog_api_client/v1/model/formula_and_function_user_journey_query_definition.py new file mode 100644 index 0000000000..e0c9835689 --- /dev/null +++ b/datadog_api_client/v1/model/formula_and_function_user_journey_query_definition.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.user_journey_formula_compute import UserJourneyFormulaCompute + from datadog_api_client.v1.model.product_analytics_funnel_data_source import ProductAnalyticsFunnelDataSource + from datadog_api_client.v1.model.user_journey_formula_group_by import UserJourneyFormulaGroupBy + from datadog_api_client.v1.model.user_journey_search import UserJourneySearch + +class FormulaAndFunctionUserJourneyQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.user_journey_formula_compute import UserJourneyFormulaCompute + from datadog_api_client.v1.model.product_analytics_funnel_data_source import ProductAnalyticsFunnelDataSource + from datadog_api_client.v1.model.user_journey_formula_group_by import UserJourneyFormulaGroupBy + from datadog_api_client.v1.model.user_journey_search import UserJourneySearch + return { + "compute": (UserJourneyFormulaCompute,), + "data_source": (ProductAnalyticsFunnelDataSource,), + "group_by": ([UserJourneyFormulaGroupBy],), + "name": (str,), + "search": (UserJourneySearch,), + } + attribute_map = { + "compute": "compute", + "data_source": "data_source", + "group_by": "group_by", + "name": "name", + "search": "search", + } + + def __init__(self_, compute: UserJourneyFormulaCompute, data_source: ProductAnalyticsFunnelDataSource, name: str, search: UserJourneySearch, group_by: Union[List[UserJourneyFormulaGroupBy], UnsetType]=unset, **kwargs): + """ + A formula and functions User Journey query for defining funnel, timeseries, and scalar visualizations over journey data. + + :param compute: Compute configuration for User Journey formula queries. + :type compute: UserJourneyFormulaCompute + + :param data_source: Data source for user journey funnel queries. + :type data_source: ProductAnalyticsFunnelDataSource + + :param group_by: Group by configuration. + :type group_by: [UserJourneyFormulaGroupBy], optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param search: User journey search configuration. + :type search: UserJourneySearch + """ + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + + self_.compute = compute + self_.data_source = data_source + self_.name = name + self_.search = search diff --git a/datadog_api_client/v1/model/formula_type.py b/datadog_api_client/v1/model/formula_type.py new file mode 100644 index 0000000000..1e49c77f46 --- /dev/null +++ b/datadog_api_client/v1/model/formula_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormulaType(ModelSimple): + """ + Set the sort type to formula. + + :param value: If omitted defaults to "formula". Must be one of ["formula"]. + :type value: str + """ + + allowed_values = { + "formula", + } + FORMULA: ClassVar["FormulaType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormulaType.FORMULA = FormulaType("formula") diff --git a/datadog_api_client/v1/model/free_text_widget_definition.py b/datadog_api_client/v1/model/free_text_widget_definition.py new file mode 100644 index 0000000000..25f2c22904 --- /dev/null +++ b/datadog_api_client/v1/model/free_text_widget_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.free_text_widget_definition_type import FreeTextWidgetDefinitionType + +class FreeTextWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.free_text_widget_definition_type import FreeTextWidgetDefinitionType + return { + "background_color": (str,), + "color": (str,), + "font_size": (str,), + "text": (str,), + "text_align": (WidgetTextAlign,), + "type": (FreeTextWidgetDefinitionType,), + } + attribute_map = { + "background_color": "background_color", + "color": "color", + "font_size": "font_size", + "text": "text", + "text_align": "text_align", + "type": "type", + } + + def __init__(self_, text: str, type: FreeTextWidgetDefinitionType, background_color: Union[str, UnsetType]=unset, color: Union[str, UnsetType]=unset, font_size: Union[str, UnsetType]=unset, text_align: Union[WidgetTextAlign, UnsetType]=unset, **kwargs): + """ + Free text is a widget that allows you to add headings to your dashboard. Commonly used to state the overall purpose of the dashboard. + + :param background_color: Background color of the widget. Supported values are ``white`` , ``blue`` , ``purple`` , ``pink`` , ``orange`` , ``yellow`` , ``green`` , ``gray`` , ``vivid_blue`` , ``vivid_purple`` , ``vivid_pink`` , ``vivid_orange`` , ``vivid_yellow`` , ``vivid_green`` , and ``transparent``. + :type background_color: str, optional + + :param color: Color of the text. + :type color: str, optional + + :param font_size: Size of the text. + :type font_size: str, optional + + :param text: Text to display. + :type text: str + + :param text_align: How to align the text on the widget. + :type text_align: WidgetTextAlign, optional + + :param type: Type of the free text widget. + :type type: FreeTextWidgetDefinitionType + """ + if background_color is not unset: + kwargs["background_color"] = background_color + if color is not unset: + kwargs["color"] = color + if font_size is not unset: + kwargs["font_size"] = font_size + if text_align is not unset: + kwargs["text_align"] = text_align + super().__init__(kwargs) + + + self_.text = text + self_.type = type diff --git a/datadog_api_client/v1/model/free_text_widget_definition_type.py b/datadog_api_client/v1/model/free_text_widget_definition_type.py new file mode 100644 index 0000000000..2ab7eb4d75 --- /dev/null +++ b/datadog_api_client/v1/model/free_text_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FreeTextWidgetDefinitionType(ModelSimple): + """ + Type of the free text widget. + + :param value: If omitted defaults to "free_text". Must be one of ["free_text"]. + :type value: str + """ + + allowed_values = { + "free_text", + } + FREE_TEXT: ClassVar["FreeTextWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FreeTextWidgetDefinitionType.FREE_TEXT = FreeTextWidgetDefinitionType("free_text") diff --git a/datadog_api_client/v1/model/funnel_comparison_custom_timeframe.py b/datadog_api_client/v1/model/funnel_comparison_custom_timeframe.py new file mode 100644 index 0000000000..b8c654f8fc --- /dev/null +++ b/datadog_api_client/v1/model/funnel_comparison_custom_timeframe.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FunnelComparisonCustomTimeframe(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "_from": (float,), + "to": (float,), + } + attribute_map = { + "_from": "from", + "to": "to", + } + + def __init__(self_, _from: float, to: float, **kwargs): + """ + Custom timeframe for funnel comparison. + + :param _from: Start of the custom timeframe. + :type _from: float + + :param to: End of the custom timeframe. + :type to: float + """ + super().__init__(kwargs) + + + self_._from = _from + self_.to = to diff --git a/datadog_api_client/v1/model/funnel_comparison_duration.py b/datadog_api_client/v1/model/funnel_comparison_duration.py new file mode 100644 index 0000000000..1617242156 --- /dev/null +++ b/datadog_api_client/v1/model/funnel_comparison_duration.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.funnel_comparison_custom_timeframe import FunnelComparisonCustomTimeframe + from datadog_api_client.v1.model.funnel_comparison_duration_type import FunnelComparisonDurationType + +class FunnelComparisonDuration(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.funnel_comparison_custom_timeframe import FunnelComparisonCustomTimeframe + from datadog_api_client.v1.model.funnel_comparison_duration_type import FunnelComparisonDurationType + return { + "custom_timeframe": (FunnelComparisonCustomTimeframe,), + "type": (FunnelComparisonDurationType,), + } + attribute_map = { + "custom_timeframe": "custom_timeframe", + "type": "type", + } + + def __init__(self_, type: FunnelComparisonDurationType, custom_timeframe: Union[FunnelComparisonCustomTimeframe, UnsetType]=unset, **kwargs): + """ + Comparison time configuration for funnel widgets. + + :param custom_timeframe: Custom timeframe for funnel comparison. + :type custom_timeframe: FunnelComparisonCustomTimeframe, optional + + :param type: Type of comparison duration. + :type type: FunnelComparisonDurationType + """ + if custom_timeframe is not unset: + kwargs["custom_timeframe"] = custom_timeframe + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/funnel_comparison_duration_type.py b/datadog_api_client/v1/model/funnel_comparison_duration_type.py new file mode 100644 index 0000000000..66ba85e06a --- /dev/null +++ b/datadog_api_client/v1/model/funnel_comparison_duration_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FunnelComparisonDurationType(ModelSimple): + """ + Type of comparison duration. + + :param value: Must be one of ["previous_timeframe", "custom_timeframe", "previous_day", "previous_week", "previous_month"]. + :type value: str + """ + + allowed_values = { + "previous_timeframe", + "custom_timeframe", + "previous_day", + "previous_week", + "previous_month", + } + PREVIOUS_TIMEFRAME: ClassVar["FunnelComparisonDurationType"] + CUSTOM_TIMEFRAME: ClassVar["FunnelComparisonDurationType"] + PREVIOUS_DAY: ClassVar["FunnelComparisonDurationType"] + PREVIOUS_WEEK: ClassVar["FunnelComparisonDurationType"] + PREVIOUS_MONTH: ClassVar["FunnelComparisonDurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FunnelComparisonDurationType.PREVIOUS_TIMEFRAME = FunnelComparisonDurationType("previous_timeframe") +FunnelComparisonDurationType.CUSTOM_TIMEFRAME = FunnelComparisonDurationType("custom_timeframe") +FunnelComparisonDurationType.PREVIOUS_DAY = FunnelComparisonDurationType("previous_day") +FunnelComparisonDurationType.PREVIOUS_WEEK = FunnelComparisonDurationType("previous_week") +FunnelComparisonDurationType.PREVIOUS_MONTH = FunnelComparisonDurationType("previous_month") diff --git a/datadog_api_client/v1/model/funnel_grouped_display.py b/datadog_api_client/v1/model/funnel_grouped_display.py new file mode 100644 index 0000000000..5cbbe9862d --- /dev/null +++ b/datadog_api_client/v1/model/funnel_grouped_display.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FunnelGroupedDisplay(ModelSimple): + """ + Display mode for grouped funnel results. + + :param value: Must be one of ["stacked", "side_by_side"]. + :type value: str + """ + + allowed_values = { + "stacked", + "side_by_side", + } + STACKED: ClassVar["FunnelGroupedDisplay"] + SIDE_BY_SIDE: ClassVar["FunnelGroupedDisplay"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FunnelGroupedDisplay.STACKED = FunnelGroupedDisplay("stacked") +FunnelGroupedDisplay.SIDE_BY_SIDE = FunnelGroupedDisplay("side_by_side") diff --git a/datadog_api_client/v1/model/funnel_query.py b/datadog_api_client/v1/model/funnel_query.py new file mode 100644 index 0000000000..9f95a4fda4 --- /dev/null +++ b/datadog_api_client/v1/model/funnel_query.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.funnel_source import FunnelSource + from datadog_api_client.v1.model.funnel_step import FunnelStep + +class FunnelQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.funnel_source import FunnelSource + from datadog_api_client.v1.model.funnel_step import FunnelStep + return { + "data_source": (FunnelSource,), + "query_string": (str,), + "steps": ([FunnelStep],), + } + attribute_map = { + "data_source": "data_source", + "query_string": "query_string", + "steps": "steps", + } + + def __init__(self_, data_source: FunnelSource, query_string: str, steps: List[FunnelStep], **kwargs): + """ + Updated funnel widget. + + :param data_source: Source from which to query items to display in the funnel. + :type data_source: FunnelSource + + :param query_string: The widget query. + :type query_string: str + + :param steps: List of funnel steps. + :type steps: [FunnelStep] + """ + super().__init__(kwargs) + + + self_.data_source = data_source + self_.query_string = query_string + self_.steps = steps diff --git a/datadog_api_client/v1/model/funnel_request_type.py b/datadog_api_client/v1/model/funnel_request_type.py new file mode 100644 index 0000000000..735af72713 --- /dev/null +++ b/datadog_api_client/v1/model/funnel_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FunnelRequestType(ModelSimple): + """ + Widget request type. + + :param value: If omitted defaults to "funnel". Must be one of ["funnel"]. + :type value: str + """ + + allowed_values = { + "funnel", + } + FUNNEL: ClassVar["FunnelRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FunnelRequestType.FUNNEL = FunnelRequestType("funnel") diff --git a/datadog_api_client/v1/model/funnel_source.py b/datadog_api_client/v1/model/funnel_source.py new file mode 100644 index 0000000000..02a2e80fae --- /dev/null +++ b/datadog_api_client/v1/model/funnel_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FunnelSource(ModelSimple): + """ + Source from which to query items to display in the funnel. + + :param value: If omitted defaults to "rum". Must be one of ["rum"]. + :type value: str + """ + + allowed_values = { + "rum", + } + RUM: ClassVar["FunnelSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FunnelSource.RUM = FunnelSource("rum") diff --git a/datadog_api_client/v1/model/funnel_step.py b/datadog_api_client/v1/model/funnel_step.py new file mode 100644 index 0000000000..b2639d273d --- /dev/null +++ b/datadog_api_client/v1/model/funnel_step.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FunnelStep(ModelNormal): + @cached_property + def openapi_types(_): + return { + "facet": (str,), + "value": (str,), + } + attribute_map = { + "facet": "facet", + "value": "value", + } + + def __init__(self_, facet: str, value: str, **kwargs): + """ + The funnel step. + + :param facet: The facet of the step. + :type facet: str + + :param value: The value of the step. + :type value: str + """ + super().__init__(kwargs) + + + self_.facet = facet + self_.value = value diff --git a/datadog_api_client/v1/model/funnel_widget_definition.py b/datadog_api_client/v1/model/funnel_widget_definition.py new file mode 100644 index 0000000000..92025a985d --- /dev/null +++ b/datadog_api_client/v1/model/funnel_widget_definition.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.funnel_grouped_display import FunnelGroupedDisplay + from datadog_api_client.v1.model.funnel_widget_request import FunnelWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.funnel_widget_definition_type import FunnelWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class FunnelWidgetDefinition(ModelNormal): + validations = { + "requests": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.funnel_grouped_display import FunnelGroupedDisplay + from datadog_api_client.v1.model.funnel_widget_request import FunnelWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.funnel_widget_definition_type import FunnelWidgetDefinitionType + return { + "description": (str,), + "grouped_display": (FunnelGroupedDisplay,), + "requests": ([FunnelWidgetRequest],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (FunnelWidgetDefinitionType,), + } + attribute_map = { + "description": "description", + "grouped_display": "grouped_display", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[FunnelWidgetRequest], type: FunnelWidgetDefinitionType, description: Union[str, UnsetType]=unset, grouped_display: Union[FunnelGroupedDisplay, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The funnel visualization displays a funnel of user sessions that maps a sequence of view navigation and user interaction in your application. + + :param description: The description of the widget. + :type description: str, optional + + :param grouped_display: Display mode for grouped funnel results. + :type grouped_display: FunnelGroupedDisplay, optional + + :param requests: Request payload used to query items. + :type requests: [FunnelWidgetRequest] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: The title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: The size of the title. + :type title_size: str, optional + + :param type: Type of funnel widget. + :type type: FunnelWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if grouped_display is not unset: + kwargs["grouped_display"] = grouped_display + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/funnel_widget_definition_type.py b/datadog_api_client/v1/model/funnel_widget_definition_type.py new file mode 100644 index 0000000000..4992d732d8 --- /dev/null +++ b/datadog_api_client/v1/model/funnel_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FunnelWidgetDefinitionType(ModelSimple): + """ + Type of funnel widget. + + :param value: If omitted defaults to "funnel". Must be one of ["funnel"]. + :type value: str + """ + + allowed_values = { + "funnel", + } + FUNNEL: ClassVar["FunnelWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FunnelWidgetDefinitionType.FUNNEL = FunnelWidgetDefinitionType("funnel") diff --git a/datadog_api_client/v1/model/funnel_widget_request.py b/datadog_api_client/v1/model/funnel_widget_request.py new file mode 100644 index 0000000000..45c5ab29bc --- /dev/null +++ b/datadog_api_client/v1/model/funnel_widget_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.funnel_query import FunnelQuery + from datadog_api_client.v1.model.funnel_request_type import FunnelRequestType + +class FunnelWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.funnel_query import FunnelQuery + from datadog_api_client.v1.model.funnel_request_type import FunnelRequestType + return { + "query": (FunnelQuery,), + "request_type": (FunnelRequestType,), + } + attribute_map = { + "query": "query", + "request_type": "request_type", + } + + def __init__(self_, query: FunnelQuery, request_type: FunnelRequestType, **kwargs): + """ + Updated funnel widget. + + :param query: Updated funnel widget. + :type query: FunnelQuery + + :param request_type: Widget request type. + :type request_type: FunnelRequestType + """ + super().__init__(kwargs) + + + self_.query = query + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/gcp_account.py b/datadog_api_client/v1/model/gcp_account.py new file mode 100644 index 0000000000..44862495ee --- /dev/null +++ b/datadog_api_client/v1/model/gcp_account.py @@ -0,0 +1,180 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.gcp_monitored_resource_config import GCPMonitoredResourceConfig + +class GCPAccount(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.gcp_monitored_resource_config import GCPMonitoredResourceConfig + return { + "auth_provider_x509_cert_url": (str,), + "auth_uri": (str,), + "automute": (bool,), + "client_email": (str,), + "client_id": (str,), + "client_x509_cert_url": (str,), + "cloud_run_revision_filters": ([str],), + "errors": ([str],), + "host_filters": (str,), + "is_cspm_enabled": (bool,), + "is_resource_change_collection_enabled": (bool,), + "is_security_command_center_enabled": (bool,), + "monitored_resource_configs": ([GCPMonitoredResourceConfig],), + "private_key": (str,), + "private_key_id": (str,), + "project_id": (str,), + "resource_collection_enabled": (bool,), + "token_uri": (str,), + "type": (str,), + } + attribute_map = { + "auth_provider_x509_cert_url": "auth_provider_x509_cert_url", + "auth_uri": "auth_uri", + "automute": "automute", + "client_email": "client_email", + "client_id": "client_id", + "client_x509_cert_url": "client_x509_cert_url", + "cloud_run_revision_filters": "cloud_run_revision_filters", + "errors": "errors", + "host_filters": "host_filters", + "is_cspm_enabled": "is_cspm_enabled", + "is_resource_change_collection_enabled": "is_resource_change_collection_enabled", + "is_security_command_center_enabled": "is_security_command_center_enabled", + "monitored_resource_configs": "monitored_resource_configs", + "private_key": "private_key", + "private_key_id": "private_key_id", + "project_id": "project_id", + "resource_collection_enabled": "resource_collection_enabled", + "token_uri": "token_uri", + "type": "type", + } + + def __init__(self_, auth_provider_x509_cert_url: Union[str, UnsetType]=unset, auth_uri: Union[str, UnsetType]=unset, automute: Union[bool, UnsetType]=unset, client_email: Union[str, UnsetType]=unset, client_id: Union[str, UnsetType]=unset, client_x509_cert_url: Union[str, UnsetType]=unset, cloud_run_revision_filters: Union[List[str], UnsetType]=unset, errors: Union[List[str], UnsetType]=unset, host_filters: Union[str, UnsetType]=unset, is_cspm_enabled: Union[bool, UnsetType]=unset, is_resource_change_collection_enabled: Union[bool, UnsetType]=unset, is_security_command_center_enabled: Union[bool, UnsetType]=unset, monitored_resource_configs: Union[List[GCPMonitoredResourceConfig], UnsetType]=unset, private_key: Union[str, UnsetType]=unset, private_key_id: Union[str, UnsetType]=unset, project_id: Union[str, UnsetType]=unset, resource_collection_enabled: Union[bool, UnsetType]=unset, token_uri: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Your Google Cloud Platform Account. + + :param auth_provider_x509_cert_url: Should be ``https://www.googleapis.com/oauth2/v1/certs``. + :type auth_provider_x509_cert_url: str, optional + + :param auth_uri: Should be ``https://accounts.google.com/o/oauth2/auth``. + :type auth_uri: str, optional + + :param automute: Silence monitors for expected GCE instance shutdowns. + :type automute: bool, optional + + :param client_email: Your email found in your JSON service account key. + :type client_email: str, optional + + :param client_id: Your ID found in your JSON service account key. + :type client_id: str, optional + + :param client_x509_cert_url: Should be ``https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL`` + where ``$CLIENT_EMAIL`` is the email found in your JSON service account key. + :type client_x509_cert_url: str, optional + + :param cloud_run_revision_filters: List of filters to limit the Cloud Run revisions that are pulled into Datadog by using tags. + Only Cloud Run revision resources that apply to specified filters are imported into Datadog. + **Note:** This field is deprecated. Instead, use ``monitored_resource_configs`` with ``type=cloud_run_revision`` **Deprecated**. + :type cloud_run_revision_filters: [str], optional + + :param errors: An array of errors. + :type errors: [str], optional + + :param host_filters: A comma-separated list of filters to limit the VM instances that are pulled into Datadog by using tags. + Only VM instance resources that apply to specified filters are imported into Datadog. + **Note:** This field is deprecated. Instead, use ``monitored_resource_configs`` with ``type=gce_instance`` **Deprecated**. + :type host_filters: str, optional + + :param is_cspm_enabled: When enabled, Datadog will activate the Cloud Security Monitoring product for this service account. Note: This requires resource_collection_enabled to be set to true. + :type is_cspm_enabled: bool, optional + + :param is_resource_change_collection_enabled: When enabled, Datadog scans for all resource change data in your Google Cloud environment. + :type is_resource_change_collection_enabled: bool, optional + + :param is_security_command_center_enabled: When enabled, Datadog will attempt to collect Security Command Center Findings. Note: This requires additional permissions on the service account. + :type is_security_command_center_enabled: bool, optional + + :param monitored_resource_configs: Configurations for GCP monitored resources. + :type monitored_resource_configs: [GCPMonitoredResourceConfig], optional + + :param private_key: Your private key name found in your JSON service account key. + :type private_key: str, optional + + :param private_key_id: Your private key ID found in your JSON service account key. + :type private_key_id: str, optional + + :param project_id: Your Google Cloud project ID found in your JSON service account key. + :type project_id: str, optional + + :param resource_collection_enabled: When enabled, Datadog scans for all resources in your GCP environment. + :type resource_collection_enabled: bool, optional + + :param token_uri: Should be ``https://accounts.google.com/o/oauth2/token``. + :type token_uri: str, optional + + :param type: The value for service_account found in your JSON service account key. + :type type: str, optional + """ + if auth_provider_x509_cert_url is not unset: + kwargs["auth_provider_x509_cert_url"] = auth_provider_x509_cert_url + if auth_uri is not unset: + kwargs["auth_uri"] = auth_uri + if automute is not unset: + kwargs["automute"] = automute + if client_email is not unset: + kwargs["client_email"] = client_email + if client_id is not unset: + kwargs["client_id"] = client_id + if client_x509_cert_url is not unset: + kwargs["client_x509_cert_url"] = client_x509_cert_url + if cloud_run_revision_filters is not unset: + kwargs["cloud_run_revision_filters"] = cloud_run_revision_filters + if errors is not unset: + kwargs["errors"] = errors + if host_filters is not unset: + kwargs["host_filters"] = host_filters + if is_cspm_enabled is not unset: + kwargs["is_cspm_enabled"] = is_cspm_enabled + if is_resource_change_collection_enabled is not unset: + kwargs["is_resource_change_collection_enabled"] = is_resource_change_collection_enabled + if is_security_command_center_enabled is not unset: + kwargs["is_security_command_center_enabled"] = is_security_command_center_enabled + if monitored_resource_configs is not unset: + kwargs["monitored_resource_configs"] = monitored_resource_configs + if private_key is not unset: + kwargs["private_key"] = private_key + if private_key_id is not unset: + kwargs["private_key_id"] = private_key_id + if project_id is not unset: + kwargs["project_id"] = project_id + if resource_collection_enabled is not unset: + kwargs["resource_collection_enabled"] = resource_collection_enabled + if token_uri is not unset: + kwargs["token_uri"] = token_uri + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/gcp_account_list_response.py b/datadog_api_client/v1/model/gcp_account_list_response.py new file mode 100644 index 0000000000..a0fc48d073 --- /dev/null +++ b/datadog_api_client/v1/model/gcp_account_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GCPAccountListResponse(ModelSimple): + """ + Array of GCP account responses. + + + :type value: [GCPAccount] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.gcp_account import GCPAccount + return { + "value": ([GCPAccount],), + } diff --git a/datadog_api_client/v1/model/gcp_monitored_resource_config.py b/datadog_api_client/v1/model/gcp_monitored_resource_config.py new file mode 100644 index 0000000000..5725b279d8 --- /dev/null +++ b/datadog_api_client/v1/model/gcp_monitored_resource_config.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.gcp_monitored_resource_config_type import GCPMonitoredResourceConfigType + +class GCPMonitoredResourceConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.gcp_monitored_resource_config_type import GCPMonitoredResourceConfigType + return { + "filters": ([str],), + "type": (GCPMonitoredResourceConfigType,), + } + attribute_map = { + "filters": "filters", + "type": "type", + } + + def __init__(self_, filters: Union[List[str], UnsetType]=unset, type: Union[GCPMonitoredResourceConfigType, UnsetType]=unset, **kwargs): + """ + Configuration for a GCP monitored resource. + + :param filters: List of filters to limit the monitored resources that are pulled into Datadog by using tags. + Only monitored resources that apply to specified filters are imported into Datadog. + :type filters: [str], optional + + :param type: The GCP monitored resource type. Only a subset of resource types are supported. + :type type: GCPMonitoredResourceConfigType, optional + """ + if filters is not unset: + kwargs["filters"] = filters + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/gcp_monitored_resource_config_type.py b/datadog_api_client/v1/model/gcp_monitored_resource_config_type.py new file mode 100644 index 0000000000..7a999c8f8a --- /dev/null +++ b/datadog_api_client/v1/model/gcp_monitored_resource_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GCPMonitoredResourceConfigType(ModelSimple): + """ + The GCP monitored resource type. Only a subset of resource types are supported. + + :param value: Must be one of ["cloud_function", "cloud_run_revision", "gce_instance"]. + :type value: str + """ + + allowed_values = { + "cloud_function", + "cloud_run_revision", + "gce_instance", + } + CLOUD_FUNCTION: ClassVar["GCPMonitoredResourceConfigType"] + CLOUD_RUN_REVISION: ClassVar["GCPMonitoredResourceConfigType"] + GCE_INSTANCE: ClassVar["GCPMonitoredResourceConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GCPMonitoredResourceConfigType.CLOUD_FUNCTION = GCPMonitoredResourceConfigType("cloud_function") +GCPMonitoredResourceConfigType.CLOUD_RUN_REVISION = GCPMonitoredResourceConfigType("cloud_run_revision") +GCPMonitoredResourceConfigType.GCE_INSTANCE = GCPMonitoredResourceConfigType("gce_instance") diff --git a/datadog_api_client/v1/model/geomap_widget_definition.py b/datadog_api_client/v1/model/geomap_widget_definition.py new file mode 100644 index 0000000000..664d5470e4 --- /dev/null +++ b/datadog_api_client/v1/model/geomap_widget_definition.py @@ -0,0 +1,148 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.geomap_widget_request import GeomapWidgetRequest + from datadog_api_client.v1.model.geomap_widget_definition_style import GeomapWidgetDefinitionStyle + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.geomap_widget_definition_type import GeomapWidgetDefinitionType + from datadog_api_client.v1.model.geomap_widget_definition_view import GeomapWidgetDefinitionView + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + from datadog_api_client.v1.model.table_widget_text_format_replace_all import TableWidgetTextFormatReplaceAll + from datadog_api_client.v1.model.table_widget_text_format_replace_substring import TableWidgetTextFormatReplaceSubstring + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class GeomapWidgetDefinition(ModelNormal): + validations = { + "requests": { + "max_items": 2, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.geomap_widget_request import GeomapWidgetRequest + from datadog_api_client.v1.model.geomap_widget_definition_style import GeomapWidgetDefinitionStyle + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.geomap_widget_definition_type import GeomapWidgetDefinitionType + from datadog_api_client.v1.model.geomap_widget_definition_view import GeomapWidgetDefinitionView + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "requests": ([GeomapWidgetRequest],), + "style": (GeomapWidgetDefinitionStyle,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (GeomapWidgetDefinitionType,), + "view": (GeomapWidgetDefinitionView,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "requests": "requests", + "style": "style", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "view": "view", + } + + def __init__(self_, requests: List[GeomapWidgetRequest], style: GeomapWidgetDefinitionStyle, type: GeomapWidgetDefinitionType, view: GeomapWidgetDefinitionView, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + This visualization displays a series of values by country on a world map. + + :param custom_links: A list of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param requests: Array of request objects to display in the widget. May include an optional request for the region layer and/or an optional request for the points layer. Region layer requests must contain a ``group-by`` tag whose value is a country ISO code. + See the `Request JSON schema documentation `_ + for information about building the ``REQUEST_SCHEMA``. + :type requests: [GeomapWidgetRequest] + + :param style: The style to apply to the widget. + :type style: GeomapWidgetDefinitionStyle + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: The title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: The size of the title. + :type title_size: str, optional + + :param type: Type of the geomap widget. + :type type: GeomapWidgetDefinitionType + + :param view: The view of the world that the map should render. + :type view: GeomapWidgetDefinitionView + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.style = style + self_.type = type + self_.view = view diff --git a/datadog_api_client/v1/model/geomap_widget_definition_style.py b/datadog_api_client/v1/model/geomap_widget_definition_style.py new file mode 100644 index 0000000000..01083a25d6 --- /dev/null +++ b/datadog_api_client/v1/model/geomap_widget_definition_style.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GeomapWidgetDefinitionStyle(ModelNormal): + @cached_property + def openapi_types(_): + return { + "palette": (str,), + "palette_flip": (bool,), + } + attribute_map = { + "palette": "palette", + "palette_flip": "palette_flip", + } + + def __init__(self_, palette: str, palette_flip: bool, **kwargs): + """ + The style to apply to the widget. + + :param palette: The color palette to apply to the widget. + :type palette: str + + :param palette_flip: Whether to flip the palette tones. + :type palette_flip: bool + """ + super().__init__(kwargs) + + + self_.palette = palette + self_.palette_flip = palette_flip diff --git a/datadog_api_client/v1/model/geomap_widget_definition_type.py b/datadog_api_client/v1/model/geomap_widget_definition_type.py new file mode 100644 index 0000000000..17cc220cf0 --- /dev/null +++ b/datadog_api_client/v1/model/geomap_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GeomapWidgetDefinitionType(ModelSimple): + """ + Type of the geomap widget. + + :param value: If omitted defaults to "geomap". Must be one of ["geomap"]. + :type value: str + """ + + allowed_values = { + "geomap", + } + GEOMAP: ClassVar["GeomapWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GeomapWidgetDefinitionType.GEOMAP = GeomapWidgetDefinitionType("geomap") diff --git a/datadog_api_client/v1/model/geomap_widget_definition_view.py b/datadog_api_client/v1/model/geomap_widget_definition_view.py new file mode 100644 index 0000000000..cb9e626c4f --- /dev/null +++ b/datadog_api_client/v1/model/geomap_widget_definition_view.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GeomapWidgetDefinitionView(ModelNormal): + @cached_property + def openapi_types(_): + return { + "focus": (str,), + } + attribute_map = { + "focus": "focus", + } + + def __init__(self_, focus: str, **kwargs): + """ + The view of the world that the map should render. + + :param focus: The 2-letter ISO code of a country to focus the map on, or ``WORLD`` for global view, or a region ( ``EMEA`` , ``APAC`` , ``LATAM`` ), or a continent ( ``NORTH_AMERICA`` , ``SOUTH_AMERICA`` , ``EUROPE`` , ``AFRICA`` , ``ASIA`` , ``OCEANIA`` ). + :type focus: str + """ + super().__init__(kwargs) + + + self_.focus = focus diff --git a/datadog_api_client/v1/model/geomap_widget_request.py b/datadog_api_client/v1/model/geomap_widget_request.py new file mode 100644 index 0000000000..4454ff8f7f --- /dev/null +++ b/datadog_api_client/v1/model/geomap_widget_request.py @@ -0,0 +1,168 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.list_stream_column import ListStreamColumn + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.list_stream_query import ListStreamQuery + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.geomap_widget_request_style import GeomapWidgetRequestStyle + from datadog_api_client.v1.model.table_widget_text_format_rule import TableWidgetTextFormatRule + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + from datadog_api_client.v1.model.table_widget_text_format_replace_all import TableWidgetTextFormatReplaceAll + from datadog_api_client.v1.model.table_widget_text_format_replace_substring import TableWidgetTextFormatReplaceSubstring + +class GeomapWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.list_stream_column import ListStreamColumn + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.list_stream_query import ListStreamQuery + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.geomap_widget_request_style import GeomapWidgetRequestStyle + from datadog_api_client.v1.model.table_widget_text_format_rule import TableWidgetTextFormatRule + return { + "columns": ([ListStreamColumn],), + "conditional_formats": ([WidgetConditionalFormat],), + "formulas": ([WidgetFormula],), + "log_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "query": (ListStreamQuery,), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + "sort": (WidgetSortBy,), + "style": (GeomapWidgetRequestStyle,), + "text_formats": ([TableWidgetTextFormatRule],), + } + attribute_map = { + "columns": "columns", + "conditional_formats": "conditional_formats", + "formulas": "formulas", + "log_query": "log_query", + "q": "q", + "queries": "queries", + "query": "query", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + "sort": "sort", + "style": "style", + "text_formats": "text_formats", + } + + def __init__(self_, columns: Union[List[ListStreamColumn], UnsetType]=unset, conditional_formats: Union[List[WidgetConditionalFormat], UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, query: Union[ListStreamQuery, UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, sort: Union[WidgetSortBy, UnsetType]=unset, style: Union[GeomapWidgetRequestStyle, UnsetType]=unset, text_formats: Union[List[TableWidgetTextFormatRule], UnsetType]=unset, **kwargs): + """ + An updated geomap widget. + + :param columns: Widget columns. + :type columns: [ListStreamColumn], optional + + :param conditional_formats: Threshold (numeric) conditional formatting rules may be used by a regions layer. + :type conditional_formats: [WidgetConditionalFormat], optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param q: The widget metrics query. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param query: Updated list stream widget. + :type query: ListStreamQuery, optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param sort: The controls for sorting the widget. + :type sort: WidgetSortBy, optional + + :param style: The style to apply to the request for points layer. + :type style: GeomapWidgetRequestStyle, optional + + :param text_formats: Text formatting rules may be used by a points layer. + :type text_formats: [TableWidgetTextFormatRule], optional + """ + if columns is not unset: + kwargs["columns"] = columns + if conditional_formats is not unset: + kwargs["conditional_formats"] = conditional_formats + if formulas is not unset: + kwargs["formulas"] = formulas + if log_query is not unset: + kwargs["log_query"] = log_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if query is not unset: + kwargs["query"] = query + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + if sort is not unset: + kwargs["sort"] = sort + if style is not unset: + kwargs["style"] = style + if text_formats is not unset: + kwargs["text_formats"] = text_formats + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/geomap_widget_request_style.py b/datadog_api_client/v1/model/geomap_widget_request_style.py new file mode 100644 index 0000000000..aa45201a47 --- /dev/null +++ b/datadog_api_client/v1/model/geomap_widget_request_style.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GeomapWidgetRequestStyle(ModelNormal): + @cached_property + def openapi_types(_): + return { + "color_by": (str,), + } + attribute_map = { + "color_by": "color_by", + } + + def __init__(self_, color_by: Union[str, UnsetType]=unset, **kwargs): + """ + The style to apply to the request for points layer. + + :param color_by: The category to color the points by. + :type color_by: str, optional + """ + if color_by is not unset: + kwargs["color_by"] = color_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/graph_snapshot.py b/datadog_api_client/v1/model/graph_snapshot.py new file mode 100644 index 0000000000..9b17937c8a --- /dev/null +++ b/datadog_api_client/v1/model/graph_snapshot.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GraphSnapshot(ModelNormal): + @cached_property + def openapi_types(_): + return { + "graph_def": (str,), + "metric_query": (str,), + "snapshot_url": (str,), + } + attribute_map = { + "graph_def": "graph_def", + "metric_query": "metric_query", + "snapshot_url": "snapshot_url", + } + + def __init__(self_, graph_def: Union[str, UnsetType]=unset, metric_query: Union[str, UnsetType]=unset, snapshot_url: Union[str, UnsetType]=unset, **kwargs): + """ + Object representing a graph snapshot. + + :param graph_def: A JSON document defining the graph. ``graph_def`` can be used instead of ``metric_query``. + The JSON document uses the `grammar defined here `_ + and should be formatted to a single line then URL encoded. + :type graph_def: str, optional + + :param metric_query: The metric query. One of ``metric_query`` or ``graph_def`` is required. + :type metric_query: str, optional + + :param snapshot_url: URL of your `graph snapshot `_. + :type snapshot_url: str, optional + """ + if graph_def is not unset: + kwargs["graph_def"] = graph_def + if metric_query is not unset: + kwargs["metric_query"] = metric_query + if snapshot_url is not unset: + kwargs["snapshot_url"] = snapshot_url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/group_type.py b/datadog_api_client/v1/model/group_type.py new file mode 100644 index 0000000000..ea2d1879a6 --- /dev/null +++ b/datadog_api_client/v1/model/group_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GroupType(ModelSimple): + """ + Set the sort type to group. + + :param value: If omitted defaults to "group". Must be one of ["group"]. + :type value: str + """ + + allowed_values = { + "group", + } + GROUP: ClassVar["GroupType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GroupType.GROUP = GroupType("group") diff --git a/datadog_api_client/v1/model/group_widget_definition.py b/datadog_api_client/v1/model/group_widget_definition.py new file mode 100644 index 0000000000..5e8bd11bb2 --- /dev/null +++ b/datadog_api_client/v1/model/group_widget_definition.py @@ -0,0 +1,141 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_layout_type import WidgetLayoutType + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.group_widget_definition_type import GroupWidgetDefinitionType + from datadog_api_client.v1.model.widget import Widget + from datadog_api_client.v1.model.alert_graph_widget_definition import AlertGraphWidgetDefinition + from datadog_api_client.v1.model.alert_value_widget_definition import AlertValueWidgetDefinition + from datadog_api_client.v1.model.bar_chart_widget_definition import BarChartWidgetDefinition + from datadog_api_client.v1.model.change_widget_definition import ChangeWidgetDefinition + from datadog_api_client.v1.model.check_status_widget_definition import CheckStatusWidgetDefinition + from datadog_api_client.v1.model.cohort_widget_definition import CohortWidgetDefinition + from datadog_api_client.v1.model.distribution_widget_definition import DistributionWidgetDefinition + from datadog_api_client.v1.model.event_stream_widget_definition import EventStreamWidgetDefinition + from datadog_api_client.v1.model.event_timeline_widget_definition import EventTimelineWidgetDefinition + from datadog_api_client.v1.model.free_text_widget_definition import FreeTextWidgetDefinition + from datadog_api_client.v1.model.funnel_widget_definition import FunnelWidgetDefinition + from datadog_api_client.v1.model.product_analytics_funnel_widget_definition import ProductAnalyticsFunnelWidgetDefinition + from datadog_api_client.v1.model.geomap_widget_definition import GeomapWidgetDefinition + from datadog_api_client.v1.model.heat_map_widget_definition import HeatMapWidgetDefinition + from datadog_api_client.v1.model.host_map_widget_definition import HostMapWidgetDefinition + from datadog_api_client.v1.model.i_frame_widget_definition import IFrameWidgetDefinition + from datadog_api_client.v1.model.image_widget_definition import ImageWidgetDefinition + from datadog_api_client.v1.model.list_stream_widget_definition import ListStreamWidgetDefinition + from datadog_api_client.v1.model.log_stream_widget_definition import LogStreamWidgetDefinition + from datadog_api_client.v1.model.monitor_summary_widget_definition import MonitorSummaryWidgetDefinition + from datadog_api_client.v1.model.note_widget_definition import NoteWidgetDefinition + from datadog_api_client.v1.model.powerpack_widget_definition import PowerpackWidgetDefinition + from datadog_api_client.v1.model.point_plot_widget_definition import PointPlotWidgetDefinition + from datadog_api_client.v1.model.query_value_widget_definition import QueryValueWidgetDefinition + from datadog_api_client.v1.model.retention_curve_widget_definition import RetentionCurveWidgetDefinition + from datadog_api_client.v1.model.run_workflow_widget_definition import RunWorkflowWidgetDefinition + from datadog_api_client.v1.model.slo_list_widget_definition import SLOListWidgetDefinition + from datadog_api_client.v1.model.slo_widget_definition import SLOWidgetDefinition + from datadog_api_client.v1.model.scatter_plot_widget_definition import ScatterPlotWidgetDefinition + from datadog_api_client.v1.model.sankey_widget_definition import SankeyWidgetDefinition + from datadog_api_client.v1.model.service_map_widget_definition import ServiceMapWidgetDefinition + from datadog_api_client.v1.model.service_summary_widget_definition import ServiceSummaryWidgetDefinition + from datadog_api_client.v1.model.split_graph_widget_definition import SplitGraphWidgetDefinition + from datadog_api_client.v1.model.sunburst_widget_definition import SunburstWidgetDefinition + from datadog_api_client.v1.model.table_widget_definition import TableWidgetDefinition + from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition + from datadog_api_client.v1.model.toplist_widget_definition import ToplistWidgetDefinition + from datadog_api_client.v1.model.topology_map_widget_definition import TopologyMapWidgetDefinition + from datadog_api_client.v1.model.tree_map_widget_definition import TreeMapWidgetDefinition + from datadog_api_client.v1.model.wildcard_widget_definition import WildcardWidgetDefinition + +class GroupWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_layout_type import WidgetLayoutType + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.group_widget_definition_type import GroupWidgetDefinitionType + from datadog_api_client.v1.model.widget import Widget + return { + "background_color": (str,), + "banner_img": (str,), + "layout_type": (WidgetLayoutType,), + "show_title": (bool,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "type": (GroupWidgetDefinitionType,), + "widgets": ([Widget],), + } + attribute_map = { + "background_color": "background_color", + "banner_img": "banner_img", + "layout_type": "layout_type", + "show_title": "show_title", + "title": "title", + "title_align": "title_align", + "type": "type", + "widgets": "widgets", + } + + def __init__(self_, layout_type: WidgetLayoutType, type: GroupWidgetDefinitionType, widgets: List[Widget], background_color: Union[str, UnsetType]=unset, banner_img: Union[str, UnsetType]=unset, show_title: Union[bool, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, **kwargs): + """ + The group widget allows you to keep similar graphs together on your dashboard. Each group has a custom header, can hold one to many graphs, and is collapsible. + + :param background_color: Background color of the widget. Supported values are ``white`` , ``blue`` , ``purple`` , ``pink`` , ``orange`` , ``yellow`` , ``green`` , ``gray`` , ``vivid_blue`` , ``vivid_purple`` , ``vivid_pink`` , ``vivid_orange`` , ``vivid_yellow`` , ``vivid_green`` , and ``transparent``. + :type background_color: str, optional + + :param banner_img: URL of image to display as a banner for the group. + :type banner_img: str, optional + + :param layout_type: Layout type of the group. + :type layout_type: WidgetLayoutType + + :param show_title: Whether to show the title or not. + :type show_title: bool, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param type: Type of the group widget. + :type type: GroupWidgetDefinitionType + + :param widgets: List of widget groups. + :type widgets: [Widget] + """ + if background_color is not unset: + kwargs["background_color"] = background_color + if banner_img is not unset: + kwargs["banner_img"] = banner_img + if show_title is not unset: + kwargs["show_title"] = show_title + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + super().__init__(kwargs) + + + self_.layout_type = layout_type + self_.type = type + self_.widgets = widgets diff --git a/datadog_api_client/v1/model/group_widget_definition_type.py b/datadog_api_client/v1/model/group_widget_definition_type.py new file mode 100644 index 0000000000..b7354e2ac1 --- /dev/null +++ b/datadog_api_client/v1/model/group_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GroupWidgetDefinitionType(ModelSimple): + """ + Type of the group widget. + + :param value: If omitted defaults to "group". Must be one of ["group"]. + :type value: str + """ + + allowed_values = { + "group", + } + GROUP: ClassVar["GroupWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GroupWidgetDefinitionType.GROUP = GroupWidgetDefinitionType("group") diff --git a/datadog_api_client/v1/model/heat_map_widget_definition.py b/datadog_api_client/v1/model/heat_map_widget_definition.py new file mode 100644 index 0000000000..2401963628 --- /dev/null +++ b/datadog_api_client/v1/model/heat_map_widget_definition.py @@ -0,0 +1,176 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_event import WidgetEvent + from datadog_api_client.v1.model.widget_marker import WidgetMarker + from datadog_api_client.v1.model.heat_map_widget_request import HeatMapWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.heat_map_widget_definition_type import HeatMapWidgetDefinitionType + from datadog_api_client.v1.model.heat_map_widget_x_axis import HeatMapWidgetXAxis + from datadog_api_client.v1.model.widget_axis import WidgetAxis + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class HeatMapWidgetDefinition(ModelNormal): + validations = { + "requests": { + "max_items": 1, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_event import WidgetEvent + from datadog_api_client.v1.model.widget_marker import WidgetMarker + from datadog_api_client.v1.model.heat_map_widget_request import HeatMapWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.heat_map_widget_definition_type import HeatMapWidgetDefinitionType + from datadog_api_client.v1.model.heat_map_widget_x_axis import HeatMapWidgetXAxis + from datadog_api_client.v1.model.widget_axis import WidgetAxis + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "events": ([WidgetEvent],), + "legend_size": (str,), + "markers": ([WidgetMarker],), + "requests": ([HeatMapWidgetRequest],), + "show_legend": (bool,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (HeatMapWidgetDefinitionType,), + "xaxis": (HeatMapWidgetXAxis,), + "yaxis": (WidgetAxis,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "events": "events", + "legend_size": "legend_size", + "markers": "markers", + "requests": "requests", + "show_legend": "show_legend", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "xaxis": "xaxis", + "yaxis": "yaxis", + } + + def __init__(self_, requests: List[HeatMapWidgetRequest], type: HeatMapWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, events: Union[List[WidgetEvent], UnsetType]=unset, legend_size: Union[str, UnsetType]=unset, markers: Union[List[WidgetMarker], UnsetType]=unset, show_legend: Union[bool, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, xaxis: Union[HeatMapWidgetXAxis, UnsetType]=unset, yaxis: Union[WidgetAxis, UnsetType]=unset, **kwargs): + """ + The heat map visualization shows metrics aggregated across many tags, such as hosts. The more hosts that have a particular value, the darker that square is. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param events: List of widget events. Deprecated - Use ``overlay`` request type instead. **Deprecated**. + :type events: [WidgetEvent], optional + + :param legend_size: Available legend sizes for a widget. Should be one of "0", "2", "4", "8", "16", or "auto". + :type legend_size: str, optional + + :param markers: List of markers. + :type markers: [WidgetMarker], optional + + :param requests: List of widget types. + :type requests: [HeatMapWidgetRequest] + + :param show_legend: Whether or not to display the legend on this widget. + :type show_legend: bool, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the heat map widget. + :type type: HeatMapWidgetDefinitionType + + :param xaxis: X Axis controls for the heat map widget. + :type xaxis: HeatMapWidgetXAxis, optional + + :param yaxis: Axis controls for the widget. + :type yaxis: WidgetAxis, optional + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if events is not unset: + kwargs["events"] = events + if legend_size is not unset: + kwargs["legend_size"] = legend_size + if markers is not unset: + kwargs["markers"] = markers + if show_legend is not unset: + kwargs["show_legend"] = show_legend + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + if xaxis is not unset: + kwargs["xaxis"] = xaxis + if yaxis is not unset: + kwargs["yaxis"] = yaxis + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/heat_map_widget_definition_type.py b/datadog_api_client/v1/model/heat_map_widget_definition_type.py new file mode 100644 index 0000000000..d63a6c7ccf --- /dev/null +++ b/datadog_api_client/v1/model/heat_map_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HeatMapWidgetDefinitionType(ModelSimple): + """ + Type of the heat map widget. + + :param value: If omitted defaults to "heatmap". Must be one of ["heatmap"]. + :type value: str + """ + + allowed_values = { + "heatmap", + } + HEATMAP: ClassVar["HeatMapWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HeatMapWidgetDefinitionType.HEATMAP = HeatMapWidgetDefinitionType("heatmap") diff --git a/datadog_api_client/v1/model/heat_map_widget_request.py b/datadog_api_client/v1/model/heat_map_widget_request.py new file mode 100644 index 0000000000..dbd56e7368 --- /dev/null +++ b/datadog_api_client/v1/model/heat_map_widget_request.py @@ -0,0 +1,176 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.event_query_definition import EventQueryDefinition + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.widget_histogram_request_type import WidgetHistogramRequestType + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_style import WidgetStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class HeatMapWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.event_query_definition import EventQueryDefinition + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.widget_histogram_request_type import WidgetHistogramRequestType + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_style import WidgetStyle + return { + "apm_query": (LogQueryDefinition,), + "event_query": (EventQueryDefinition,), + "formulas": ([WidgetFormula],), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "query": (FormulaAndFunctionMetricQueryDefinition,), + "request_type": (WidgetHistogramRequestType,), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + "style": (WidgetStyle,), + } + attribute_map = { + "apm_query": "apm_query", + "event_query": "event_query", + "formulas": "formulas", + "log_query": "log_query", + "network_query": "network_query", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "queries": "queries", + "query": "query", + "request_type": "request_type", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + "style": "style", + } + + def __init__(self_, apm_query: Union[LogQueryDefinition, UnsetType]=unset, event_query: Union[EventQueryDefinition, UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, query: Union[FormulaAndFunctionMetricQueryDefinition, UnsetType]=unset, request_type: Union[WidgetHistogramRequestType, UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, style: Union[WidgetStyle, UnsetType]=unset, **kwargs): + """ + Updated heat map widget. + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param event_query: The event query. + :type event_query: EventQueryDefinition, optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Widget query. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param query: A formula and functions metrics query. + :type query: FormulaAndFunctionMetricQueryDefinition, optional + + :param request_type: Request type for distribution of point values for distribution metrics. Query space aggregator must be ``histogram:`` for points distributions. + :type request_type: WidgetHistogramRequestType, optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param style: Widget style definition. + :type style: WidgetStyle, optional + """ + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if event_query is not unset: + kwargs["event_query"] = event_query + if formulas is not unset: + kwargs["formulas"] = formulas + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if query is not unset: + kwargs["query"] = query + if request_type is not unset: + kwargs["request_type"] = request_type + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/heat_map_widget_x_axis.py b/datadog_api_client/v1/model/heat_map_widget_x_axis.py new file mode 100644 index 0000000000..6d6b6410b3 --- /dev/null +++ b/datadog_api_client/v1/model/heat_map_widget_x_axis.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HeatMapWidgetXAxis(ModelNormal): + @cached_property + def openapi_types(_): + return { + "num_buckets": (int,), + } + attribute_map = { + "num_buckets": "num_buckets", + } + + def __init__(self_, num_buckets: Union[int, UnsetType]=unset, **kwargs): + """ + X Axis controls for the heat map widget. + + :param num_buckets: Number of time buckets to target, also known as the resolution + of the time bins. This is only applicable for distribution of + points (group distributions use the roll-up modifier). + :type num_buckets: int, optional + """ + if num_buckets is not unset: + kwargs["num_buckets"] = num_buckets + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host.py b/datadog_api_client/v1/model/host.py new file mode 100644 index 0000000000..16febef5b2 --- /dev/null +++ b/datadog_api_client/v1/model/host.py @@ -0,0 +1,142 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.host_meta import HostMeta + from datadog_api_client.v1.model.host_metrics import HostMetrics + +class Host(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.host_meta import HostMeta + from datadog_api_client.v1.model.host_metrics import HostMetrics + return { + "aliases": ([str],), + "apps": ([str],), + "aws_name": (str,), + "host_name": (str,), + "id": (int,), + "is_muted": (bool,), + "last_reported_time": (int,), + "meta": (HostMeta,), + "metrics": (HostMetrics,), + "mute_timeout": (int, none_type), + "name": (str,), + "sources": ([str],), + "tags_by_source": ({str: ([str],)},), + "up": (bool,), + } + attribute_map = { + "aliases": "aliases", + "apps": "apps", + "aws_name": "aws_name", + "host_name": "host_name", + "id": "id", + "is_muted": "is_muted", + "last_reported_time": "last_reported_time", + "meta": "meta", + "metrics": "metrics", + "mute_timeout": "mute_timeout", + "name": "name", + "sources": "sources", + "tags_by_source": "tags_by_source", + "up": "up", + } + + def __init__(self_, aliases: Union[List[str], UnsetType]=unset, apps: Union[List[str], UnsetType]=unset, aws_name: Union[str, UnsetType]=unset, host_name: Union[str, UnsetType]=unset, id: Union[int, UnsetType]=unset, is_muted: Union[bool, UnsetType]=unset, last_reported_time: Union[int, UnsetType]=unset, meta: Union[HostMeta, UnsetType]=unset, metrics: Union[HostMetrics, UnsetType]=unset, mute_timeout: Union[int, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, sources: Union[List[str], UnsetType]=unset, tags_by_source: Union[Dict[str, List[str]], UnsetType]=unset, up: Union[bool, UnsetType]=unset, **kwargs): + """ + Object representing a host. + + :param aliases: Host aliases collected by Datadog. + :type aliases: [str], optional + + :param apps: The Datadog integrations reporting metrics for the host. + :type apps: [str], optional + + :param aws_name: AWS name of your host. + :type aws_name: str, optional + + :param host_name: The host name. + :type host_name: str, optional + + :param id: The host ID. + :type id: int, optional + + :param is_muted: If a host is muted or unmuted. + :type is_muted: bool, optional + + :param last_reported_time: Last time the host reported a metric data point. + :type last_reported_time: int, optional + + :param meta: Metadata associated with your host. + :type meta: HostMeta, optional + + :param metrics: Host Metrics collected. + :type metrics: HostMetrics, optional + + :param mute_timeout: Timeout of the mute applied to your host. + :type mute_timeout: int, none_type, optional + + :param name: The host name. + :type name: str, optional + + :param sources: Source or cloud provider associated with your host. + :type sources: [str], optional + + :param tags_by_source: List of tags for each source (AWS, Datadog Agent, Chef..). + :type tags_by_source: {str: ([str],)}, optional + + :param up: Displays UP when the expected metrics are received and displays ``???`` if no metrics are received. + :type up: bool, optional + """ + if aliases is not unset: + kwargs["aliases"] = aliases + if apps is not unset: + kwargs["apps"] = apps + if aws_name is not unset: + kwargs["aws_name"] = aws_name + if host_name is not unset: + kwargs["host_name"] = host_name + if id is not unset: + kwargs["id"] = id + if is_muted is not unset: + kwargs["is_muted"] = is_muted + if last_reported_time is not unset: + kwargs["last_reported_time"] = last_reported_time + if meta is not unset: + kwargs["meta"] = meta + if metrics is not unset: + kwargs["metrics"] = metrics + if mute_timeout is not unset: + kwargs["mute_timeout"] = mute_timeout + if name is not unset: + kwargs["name"] = name + if sources is not unset: + kwargs["sources"] = sources + if tags_by_source is not unset: + kwargs["tags_by_source"] = tags_by_source + if up is not unset: + kwargs["up"] = up + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_list_response.py b/datadog_api_client/v1/model/host_list_response.py new file mode 100644 index 0000000000..ac0a397384 --- /dev/null +++ b/datadog_api_client/v1/model/host_list_response.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.host import Host + +class HostListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.host import Host + return { + "host_list": ([Host],), + "total_matching": (int,), + "total_returned": (int,), + } + attribute_map = { + "host_list": "host_list", + "total_matching": "total_matching", + "total_returned": "total_returned", + } + + def __init__(self_, host_list: Union[List[Host], UnsetType]=unset, total_matching: Union[int, UnsetType]=unset, total_returned: Union[int, UnsetType]=unset, **kwargs): + """ + Response with Host information from Datadog. + + :param host_list: Array of hosts. + :type host_list: [Host], optional + + :param total_matching: Number of host matching the query. + :type total_matching: int, optional + + :param total_returned: Number of host returned. + :type total_returned: int, optional + """ + if host_list is not unset: + kwargs["host_list"] = host_list + if total_matching is not unset: + kwargs["total_matching"] = total_matching + if total_returned is not unset: + kwargs["total_returned"] = total_returned + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_map_request.py b/datadog_api_client/v1/model/host_map_request.py new file mode 100644 index 0000000000..6528068b33 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_request.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + +class HostMapRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + return { + "apm_query": (LogQueryDefinition,), + "event_query": (LogQueryDefinition,), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + } + attribute_map = { + "apm_query": "apm_query", + "event_query": "event_query", + "log_query": "log_query", + "network_query": "network_query", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "rum_query": "rum_query", + "security_query": "security_query", + } + + def __init__(self_, apm_query: Union[LogQueryDefinition, UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, **kwargs): + """ + Deprecated - Legacy metric-based host map request. Use the infrastructure-backed ( ``request_type: infrastructure_hostmap`` ) or DDSQL ( ``request_type: data_projection`` ) format instead. + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Query definition. + :type q: str, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + """ + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if event_query is not unset: + kwargs["event_query"] = event_query + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_map_widget_definition.py b/datadog_api_client/v1/model/host_map_widget_definition.py new file mode 100644 index 0000000000..e35db97edc --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_definition.py @@ -0,0 +1,161 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_node_type import WidgetNodeType + from datadog_api_client.v1.model.host_map_widget_definition_requests import HostMapWidgetDefinitionRequests + from datadog_api_client.v1.model.host_map_widget_definition_style import HostMapWidgetDefinitionStyle + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.host_map_widget_definition_type import HostMapWidgetDefinitionType + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class HostMapWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_node_type import WidgetNodeType + from datadog_api_client.v1.model.host_map_widget_definition_requests import HostMapWidgetDefinitionRequests + from datadog_api_client.v1.model.host_map_widget_definition_style import HostMapWidgetDefinitionStyle + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.host_map_widget_definition_type import HostMapWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "group": ([str],), + "no_group_hosts": (bool,), + "no_metric_hosts": (bool,), + "node_type": (WidgetNodeType,), + "notes": (str,), + "requests": (HostMapWidgetDefinitionRequests,), + "scope": ([str],), + "style": (HostMapWidgetDefinitionStyle,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (HostMapWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "group": "group", + "no_group_hosts": "no_group_hosts", + "no_metric_hosts": "no_metric_hosts", + "node_type": "node_type", + "notes": "notes", + "requests": "requests", + "scope": "scope", + "style": "style", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: HostMapWidgetDefinitionRequests, type: HostMapWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, group: Union[List[str], UnsetType]=unset, no_group_hosts: Union[bool, UnsetType]=unset, no_metric_hosts: Union[bool, UnsetType]=unset, node_type: Union[WidgetNodeType, UnsetType]=unset, notes: Union[str, UnsetType]=unset, scope: Union[List[str], UnsetType]=unset, style: Union[HostMapWidgetDefinitionStyle, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The host map widget graphs any metric across your hosts using the same visualization available from the main Host Map page. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param group: Deprecated - Only used by the legacy metric-based format. Use ``group_by`` (infrastructure) or a ``group`` dimension (DDSQL) inside ``requests`` instead. **Deprecated**. + :type group: [str], optional + + :param no_group_hosts: Deprecated - Only used by the legacy metric-based format. Use ``no_group_hosts`` inside ``requests`` instead. **Deprecated**. + :type no_group_hosts: bool, optional + + :param no_metric_hosts: Deprecated - Only used by the legacy metric-based format. Use ``no_metric_hosts`` inside ``requests`` instead. **Deprecated**. + :type no_metric_hosts: bool, optional + + :param node_type: Which type of node to use in the map. + :type node_type: WidgetNodeType, optional + + :param notes: Notes on the title. + :type notes: str, optional + + :param requests: Query definition for the host map widget. Supports three mutually exclusive formats distinguished by `request_type`: the deprecated legacy metric-based format (`fill`/`size`, no `request_type`), the infrastructure-backed format (`request_type: infrastructure_hostmap ``), and the DDSQL published-dataset format (`` request_type: data_projection`). + :type requests: HostMapWidgetDefinitionRequests + + :param scope: Deprecated - Only used by the legacy metric-based format. Use ``filter`` inside ``requests`` instead. **Deprecated**. + :type scope: [str], optional + + :param style: Deprecated - The style to apply to the legacy metric-based host map widget. Use ``HostMapWidgetInfrastructureStyle`` instead. **Deprecated**. + :type style: HostMapWidgetDefinitionStyle, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the host map widget. + :type type: HostMapWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if group is not unset: + kwargs["group"] = group + if no_group_hosts is not unset: + kwargs["no_group_hosts"] = no_group_hosts + if no_metric_hosts is not unset: + kwargs["no_metric_hosts"] = no_metric_hosts + if node_type is not unset: + kwargs["node_type"] = node_type + if notes is not unset: + kwargs["notes"] = notes + if scope is not unset: + kwargs["scope"] = scope + if style is not unset: + kwargs["style"] = style + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/host_map_widget_definition_request_type.py b/datadog_api_client/v1/model/host_map_widget_definition_request_type.py new file mode 100644 index 0000000000..b62fd6388f --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_definition_request_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HostMapWidgetDefinitionRequestType(ModelSimple): + """ + Identifies which host map request format the sibling fields on `HostMapWidgetDefinitionRequests` describe: an infrastructure-backed request or a DDSQL published-dataset request. + + :param value: Must be one of ["infrastructure_hostmap", "data_projection"]. + :type value: str + """ + + allowed_values = { + "infrastructure_hostmap", + "data_projection", + } + INFRASTRUCTURE_HOSTMAP: ClassVar["HostMapWidgetDefinitionRequestType"] + DATA_PROJECTION: ClassVar["HostMapWidgetDefinitionRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HostMapWidgetDefinitionRequestType.INFRASTRUCTURE_HOSTMAP = HostMapWidgetDefinitionRequestType("infrastructure_hostmap") +HostMapWidgetDefinitionRequestType.DATA_PROJECTION = HostMapWidgetDefinitionRequestType("data_projection") diff --git a/datadog_api_client/v1/model/host_map_widget_definition_requests.py b/datadog_api_client/v1/model/host_map_widget_definition_requests.py new file mode 100644 index 0000000000..cdf9bb76ff --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_definition_requests.py @@ -0,0 +1,181 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.host_map_widget_infrastructure_request import HostMapWidgetInfrastructureRequest + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.host_map_widget_scalar_request import HostMapWidgetScalarRequest + from datadog_api_client.v1.model.host_map_request import HostMapRequest + from datadog_api_client.v1.model.host_map_widget_group_by import HostMapWidgetGroupBy + from datadog_api_client.v1.model.host_map_widget_node_type import HostMapWidgetNodeType + from datadog_api_client.v1.model.host_map_widget_projection import HostMapWidgetProjection + from datadog_api_client.v1.model.dataset_list_query import DatasetListQuery + from datadog_api_client.v1.model.host_map_widget_definition_request_type import HostMapWidgetDefinitionRequestType + from datadog_api_client.v1.model.host_map_widget_infrastructure_style import HostMapWidgetInfrastructureStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class HostMapWidgetDefinitionRequests(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.host_map_widget_infrastructure_request import HostMapWidgetInfrastructureRequest + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.host_map_widget_scalar_request import HostMapWidgetScalarRequest + from datadog_api_client.v1.model.host_map_request import HostMapRequest + from datadog_api_client.v1.model.host_map_widget_group_by import HostMapWidgetGroupBy + from datadog_api_client.v1.model.host_map_widget_node_type import HostMapWidgetNodeType + from datadog_api_client.v1.model.host_map_widget_projection import HostMapWidgetProjection + from datadog_api_client.v1.model.dataset_list_query import DatasetListQuery + from datadog_api_client.v1.model.host_map_widget_definition_request_type import HostMapWidgetDefinitionRequestType + from datadog_api_client.v1.model.host_map_widget_infrastructure_style import HostMapWidgetInfrastructureStyle + return { + "child": (HostMapWidgetInfrastructureRequest,), + "conditional_formats": ([WidgetConditionalFormat],), + "enrichments": ([HostMapWidgetScalarRequest],), + "fill": (HostMapRequest,), + "filter": (str,), + "group_by": ([HostMapWidgetGroupBy],), + "limit": (int,), + "no_group_hosts": (bool,), + "no_metric_hosts": (bool,), + "node_type": (HostMapWidgetNodeType,), + "projection": (HostMapWidgetProjection,), + "query": (DatasetListQuery,), + "request_type": (HostMapWidgetDefinitionRequestType,), + "size": (HostMapRequest,), + "style": (HostMapWidgetInfrastructureStyle,), + } + attribute_map = { + "child": "child", + "conditional_formats": "conditional_formats", + "enrichments": "enrichments", + "fill": "fill", + "filter": "filter", + "group_by": "group_by", + "limit": "limit", + "no_group_hosts": "no_group_hosts", + "no_metric_hosts": "no_metric_hosts", + "node_type": "node_type", + "projection": "projection", + "query": "query", + "request_type": "request_type", + "size": "size", + "style": "style", + } + + def __init__(self_, child: Union[HostMapWidgetInfrastructureRequest, UnsetType]=unset, conditional_formats: Union[List[WidgetConditionalFormat], UnsetType]=unset, enrichments: Union[List[HostMapWidgetScalarRequest], UnsetType]=unset, fill: Union[HostMapRequest, UnsetType]=unset, filter: Union[str, UnsetType]=unset, group_by: Union[List[HostMapWidgetGroupBy], UnsetType]=unset, limit: Union[int, UnsetType]=unset, no_group_hosts: Union[bool, UnsetType]=unset, no_metric_hosts: Union[bool, UnsetType]=unset, node_type: Union[HostMapWidgetNodeType, UnsetType]=unset, projection: Union[HostMapWidgetProjection, UnsetType]=unset, query: Union[DatasetListQuery, UnsetType]=unset, request_type: Union[HostMapWidgetDefinitionRequestType, UnsetType]=unset, size: Union[HostMapRequest, UnsetType]=unset, style: Union[HostMapWidgetInfrastructureStyle, UnsetType]=unset, **kwargs): + """ + Query definition for the host map widget. Supports three mutually exclusive formats distinguished by `request_type`: the deprecated legacy metric-based format (`fill`/`size`, no `request_type`), the infrastructure-backed format (`request_type: infrastructure_hostmap ``), and the DDSQL published-dataset format (`` request_type: data_projection`). + + :param child: Infrastructure-backed request for the host map widget. Supports entity-based + visualization with metric query enrichments, tag-based filtering, flexible grouping, + and hierarchical views. + :type child: HostMapWidgetInfrastructureRequest, optional + + :param conditional_formats: List of conditional formatting rules applied to fill values. + :type conditional_formats: [WidgetConditionalFormat], optional + + :param enrichments: Metric or event queries joined to the entity set. Each formula specifies a visual dimension. Only used by the infrastructure-backed format. + :type enrichments: [HostMapWidgetScalarRequest], optional + + :param fill: Deprecated - Legacy metric-based host map request. Use the infrastructure-backed ( ``request_type: infrastructure_hostmap`` ) or DDSQL ( ``request_type: data_projection`` ) format instead. **Deprecated**. + :type fill: HostMapRequest, optional + + :param filter: Filter string for the entity set in tag format (for example, ``env:prod`` ). Only used by the infrastructure-backed format. + :type filter: str, optional + + :param group_by: Defines how entities are grouped into tiles. The ordering of entries implies + the grouping hierarchy. Only used by the infrastructure-backed format. + :type group_by: [HostMapWidgetGroupBy], optional + + :param limit: Maximum number of rows to return from the dataset query. Only used by the DDSQL format. + :type limit: int, optional + + :param no_group_hosts: Whether to hide entities that have no group assignment. + :type no_group_hosts: bool, optional + + :param no_metric_hosts: Whether to hide entities that have no enrichment data. + :type no_metric_hosts: bool, optional + + :param node_type: Which type of infrastructure entity to visualize in the host map. + :type node_type: HostMapWidgetNodeType, optional + + :param projection: Projection for the DDSQL host map request. Maps dataset columns to map dimensions: ``node`` identifies the entity, repeated ``group`` entries define the grouping hierarchy (outermost first), and ``fill`` / ``size`` drive the tile color and size. + :type projection: HostMapWidgetProjection, optional + + :param query: Query that lists the rows of a published dataset (a DDSQL query) without aggregation. + :type query: DatasetListQuery, optional + + :param request_type: Identifies which host map request format the sibling fields on ``HostMapWidgetDefinitionRequests`` describe: an infrastructure-backed request or a DDSQL published-dataset request. + :type request_type: HostMapWidgetDefinitionRequestType, optional + + :param size: Deprecated - Legacy metric-based host map request. Use the infrastructure-backed ( ``request_type: infrastructure_hostmap`` ) or DDSQL ( ``request_type: data_projection`` ) format instead. **Deprecated**. + :type size: HostMapRequest, optional + + :param style: Style configuration for the infrastructure host map. + :type style: HostMapWidgetInfrastructureStyle, optional + """ + if child is not unset: + kwargs["child"] = child + if conditional_formats is not unset: + kwargs["conditional_formats"] = conditional_formats + if enrichments is not unset: + kwargs["enrichments"] = enrichments + if fill is not unset: + kwargs["fill"] = fill + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if limit is not unset: + kwargs["limit"] = limit + if no_group_hosts is not unset: + kwargs["no_group_hosts"] = no_group_hosts + if no_metric_hosts is not unset: + kwargs["no_metric_hosts"] = no_metric_hosts + if node_type is not unset: + kwargs["node_type"] = node_type + if projection is not unset: + kwargs["projection"] = projection + if query is not unset: + kwargs["query"] = query + if request_type is not unset: + kwargs["request_type"] = request_type + if size is not unset: + kwargs["size"] = size + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_map_widget_definition_style.py b/datadog_api_client/v1/model/host_map_widget_definition_style.py new file mode 100644 index 0000000000..0e1ec39f14 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_definition_style.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HostMapWidgetDefinitionStyle(ModelNormal): + @cached_property + def openapi_types(_): + return { + "fill_max": (str,), + "fill_min": (str,), + "palette": (str,), + "palette_flip": (bool,), + } + attribute_map = { + "fill_max": "fill_max", + "fill_min": "fill_min", + "palette": "palette", + "palette_flip": "palette_flip", + } + + def __init__(self_, fill_max: Union[str, UnsetType]=unset, fill_min: Union[str, UnsetType]=unset, palette: Union[str, UnsetType]=unset, palette_flip: Union[bool, UnsetType]=unset, **kwargs): + """ + Deprecated - The style to apply to the legacy metric-based host map widget. Use ``HostMapWidgetInfrastructureStyle`` instead. + + :param fill_max: Max value to use to color the map. + :type fill_max: str, optional + + :param fill_min: Min value to use to color the map. + :type fill_min: str, optional + + :param palette: Color palette to apply to the widget. + :type palette: str, optional + + :param palette_flip: Whether to flip the palette tones. + :type palette_flip: bool, optional + """ + if fill_max is not unset: + kwargs["fill_max"] = fill_max + if fill_min is not unset: + kwargs["fill_min"] = fill_min + if palette is not unset: + kwargs["palette"] = palette + if palette_flip is not unset: + kwargs["palette_flip"] = palette_flip + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_map_widget_definition_type.py b/datadog_api_client/v1/model/host_map_widget_definition_type.py new file mode 100644 index 0000000000..5563147245 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HostMapWidgetDefinitionType(ModelSimple): + """ + Type of the host map widget. + + :param value: If omitted defaults to "hostmap". Must be one of ["hostmap"]. + :type value: str + """ + + allowed_values = { + "hostmap", + } + HOSTMAP: ClassVar["HostMapWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HostMapWidgetDefinitionType.HOSTMAP = HostMapWidgetDefinitionType("hostmap") diff --git a/datadog_api_client/v1/model/host_map_widget_dimension.py b/datadog_api_client/v1/model/host_map_widget_dimension.py new file mode 100644 index 0000000000..6004f81481 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_dimension.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HostMapWidgetDimension(ModelSimple): + """ + Visual dimension for the host map widget. Used both by infrastructure-backed formulas and by DDSQL projection columns; `group` is only meaningful for DDSQL projection columns, where repeated entries define the grouping hierarchy. + + :param value: Must be one of ["node", "fill", "size", "group"]. + :type value: str + """ + + allowed_values = { + "node", + "fill", + "size", + "group", + } + NODE: ClassVar["HostMapWidgetDimension"] + FILL: ClassVar["HostMapWidgetDimension"] + SIZE: ClassVar["HostMapWidgetDimension"] + GROUP: ClassVar["HostMapWidgetDimension"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HostMapWidgetDimension.NODE = HostMapWidgetDimension("node") +HostMapWidgetDimension.FILL = HostMapWidgetDimension("fill") +HostMapWidgetDimension.SIZE = HostMapWidgetDimension("size") +HostMapWidgetDimension.GROUP = HostMapWidgetDimension("group") diff --git a/datadog_api_client/v1/model/host_map_widget_formula.py b/datadog_api_client/v1/model/host_map_widget_formula.py new file mode 100644 index 0000000000..bbc063adc3 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_formula.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.host_map_widget_dimension import HostMapWidgetDimension + from datadog_api_client.v1.model.widget_number_format import WidgetNumberFormat + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + +class HostMapWidgetFormula(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.host_map_widget_dimension import HostMapWidgetDimension + from datadog_api_client.v1.model.widget_number_format import WidgetNumberFormat + return { + "alias": (str,), + "dimension": (HostMapWidgetDimension,), + "formula": (str,), + "number_format": (WidgetNumberFormat,), + } + attribute_map = { + "alias": "alias", + "dimension": "dimension", + "formula": "formula", + "number_format": "number_format", + } + + def __init__(self_, dimension: HostMapWidgetDimension, formula: str, alias: Union[str, UnsetType]=unset, number_format: Union[WidgetNumberFormat, UnsetType]=unset, **kwargs): + """ + Formula for the infrastructure host map widget that specifies both the expression + and the visual dimension it populates. + + :param alias: Expression alias. + :type alias: str, optional + + :param dimension: Visual dimension for the host map widget. Used both by infrastructure-backed formulas and by DDSQL projection columns; ``group`` is only meaningful for DDSQL projection columns, where repeated entries define the grouping hierarchy. + :type dimension: HostMapWidgetDimension + + :param formula: String expression built from queries, formulas, and functions. + :type formula: str + + :param number_format: Number format options for the widget. + :type number_format: WidgetNumberFormat, optional + """ + if alias is not unset: + kwargs["alias"] = alias + if number_format is not unset: + kwargs["number_format"] = number_format + super().__init__(kwargs) + + + self_.dimension = dimension + self_.formula = formula diff --git a/datadog_api_client/v1/model/host_map_widget_group_by.py b/datadog_api_client/v1/model/host_map_widget_group_by.py new file mode 100644 index 0000000000..98a144be34 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_group_by.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HostMapWidgetGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "column": (str,), + "key": (str,), + } + attribute_map = { + "column": "column", + "key": "key", + } + + def __init__(self_, column: str, key: Union[str, UnsetType]=unset, **kwargs): + """ + Defines a grouping dimension for the infrastructure host map. + + :param column: Column name from the entity table (for example, ``cloud_provider`` , ``tags`` , ``labels`` ). + :type column: str + + :param key: Key within the column for nested attribute types (for example, ``service`` within ``tags`` ). + :type key: str, optional + """ + if key is not unset: + kwargs["key"] = key + super().__init__(kwargs) + + + self_.column = column diff --git a/datadog_api_client/v1/model/host_map_widget_infrastructure_request.py b/datadog_api_client/v1/model/host_map_widget_infrastructure_request.py new file mode 100644 index 0000000000..853f53b5d8 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_infrastructure_request.py @@ -0,0 +1,137 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.host_map_widget_infrastructure_request_leaf import HostMapWidgetInfrastructureRequestLeaf + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.host_map_widget_scalar_request import HostMapWidgetScalarRequest + from datadog_api_client.v1.model.host_map_widget_group_by import HostMapWidgetGroupBy + from datadog_api_client.v1.model.host_map_widget_node_type import HostMapWidgetNodeType + from datadog_api_client.v1.model.host_map_widget_infrastructure_request_request_type import HostMapWidgetInfrastructureRequestRequestType + from datadog_api_client.v1.model.host_map_widget_infrastructure_style import HostMapWidgetInfrastructureStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class HostMapWidgetInfrastructureRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.host_map_widget_infrastructure_request_leaf import HostMapWidgetInfrastructureRequestLeaf + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.host_map_widget_scalar_request import HostMapWidgetScalarRequest + from datadog_api_client.v1.model.host_map_widget_group_by import HostMapWidgetGroupBy + from datadog_api_client.v1.model.host_map_widget_node_type import HostMapWidgetNodeType + from datadog_api_client.v1.model.host_map_widget_infrastructure_request_request_type import HostMapWidgetInfrastructureRequestRequestType + from datadog_api_client.v1.model.host_map_widget_infrastructure_style import HostMapWidgetInfrastructureStyle + return { + "child": (HostMapWidgetInfrastructureRequestLeaf,), + "conditional_formats": ([WidgetConditionalFormat],), + "enrichments": ([HostMapWidgetScalarRequest],), + "filter": (str,), + "group_by": ([HostMapWidgetGroupBy],), + "no_group_hosts": (bool,), + "no_metric_hosts": (bool,), + "node_type": (HostMapWidgetNodeType,), + "request_type": (HostMapWidgetInfrastructureRequestRequestType,), + "style": (HostMapWidgetInfrastructureStyle,), + } + attribute_map = { + "child": "child", + "conditional_formats": "conditional_formats", + "enrichments": "enrichments", + "filter": "filter", + "group_by": "group_by", + "no_group_hosts": "no_group_hosts", + "no_metric_hosts": "no_metric_hosts", + "node_type": "node_type", + "request_type": "request_type", + "style": "style", + } + + def __init__(self_, enrichments: List[HostMapWidgetScalarRequest], node_type: HostMapWidgetNodeType, request_type: HostMapWidgetInfrastructureRequestRequestType, child: Union[HostMapWidgetInfrastructureRequestLeaf, UnsetType]=unset, conditional_formats: Union[List[WidgetConditionalFormat], UnsetType]=unset, filter: Union[str, UnsetType]=unset, group_by: Union[List[HostMapWidgetGroupBy], UnsetType]=unset, no_group_hosts: Union[bool, UnsetType]=unset, no_metric_hosts: Union[bool, UnsetType]=unset, style: Union[HostMapWidgetInfrastructureStyle, UnsetType]=unset, **kwargs): + """ + Infrastructure-backed request for the host map widget. Supports entity-based + visualization with metric query enrichments, tag-based filtering, flexible grouping, + and hierarchical views. + + :param child: Infrastructure-backed host map child request (leaf node, no further nesting supported). + :type child: HostMapWidgetInfrastructureRequestLeaf, optional + + :param conditional_formats: List of conditional formatting rules applied to fill values. + :type conditional_formats: [WidgetConditionalFormat], optional + + :param enrichments: Metric or event queries joined to the entity set. Each formula specifies a visual dimension. + :type enrichments: [HostMapWidgetScalarRequest] + + :param filter: Filter string for the entity set in tag format (for example, ``env:prod`` ). + :type filter: str, optional + + :param group_by: Defines how entities are grouped into tiles. The ordering of entries implies + the grouping hierarchy. + :type group_by: [HostMapWidgetGroupBy], optional + + :param no_group_hosts: Whether to hide entities that have no group assignment. + :type no_group_hosts: bool, optional + + :param no_metric_hosts: Whether to hide entities that have no enrichment data. + :type no_metric_hosts: bool, optional + + :param node_type: Which type of infrastructure entity to visualize in the host map. + :type node_type: HostMapWidgetNodeType + + :param request_type: Identifies this as an infrastructure-backed host map request. + :type request_type: HostMapWidgetInfrastructureRequestRequestType + + :param style: Style configuration for the infrastructure host map. + :type style: HostMapWidgetInfrastructureStyle, optional + """ + if child is not unset: + kwargs["child"] = child + if conditional_formats is not unset: + kwargs["conditional_formats"] = conditional_formats + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if no_group_hosts is not unset: + kwargs["no_group_hosts"] = no_group_hosts + if no_metric_hosts is not unset: + kwargs["no_metric_hosts"] = no_metric_hosts + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + + self_.enrichments = enrichments + self_.node_type = node_type + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/host_map_widget_infrastructure_request_leaf.py b/datadog_api_client/v1/model/host_map_widget_infrastructure_request_leaf.py new file mode 100644 index 0000000000..c471fd6e7a --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_infrastructure_request_leaf.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.host_map_widget_scalar_request import HostMapWidgetScalarRequest + from datadog_api_client.v1.model.host_map_widget_group_by import HostMapWidgetGroupBy + from datadog_api_client.v1.model.host_map_widget_node_type import HostMapWidgetNodeType + from datadog_api_client.v1.model.host_map_widget_infrastructure_request_request_type import HostMapWidgetInfrastructureRequestRequestType + from datadog_api_client.v1.model.host_map_widget_infrastructure_style import HostMapWidgetInfrastructureStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class HostMapWidgetInfrastructureRequestLeaf(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.host_map_widget_scalar_request import HostMapWidgetScalarRequest + from datadog_api_client.v1.model.host_map_widget_group_by import HostMapWidgetGroupBy + from datadog_api_client.v1.model.host_map_widget_node_type import HostMapWidgetNodeType + from datadog_api_client.v1.model.host_map_widget_infrastructure_request_request_type import HostMapWidgetInfrastructureRequestRequestType + from datadog_api_client.v1.model.host_map_widget_infrastructure_style import HostMapWidgetInfrastructureStyle + return { + "conditional_formats": ([WidgetConditionalFormat],), + "enrichments": ([HostMapWidgetScalarRequest],), + "filter": (str,), + "group_by": ([HostMapWidgetGroupBy],), + "no_group_hosts": (bool,), + "no_metric_hosts": (bool,), + "node_type": (HostMapWidgetNodeType,), + "request_type": (HostMapWidgetInfrastructureRequestRequestType,), + "style": (HostMapWidgetInfrastructureStyle,), + } + attribute_map = { + "conditional_formats": "conditional_formats", + "enrichments": "enrichments", + "filter": "filter", + "group_by": "group_by", + "no_group_hosts": "no_group_hosts", + "no_metric_hosts": "no_metric_hosts", + "node_type": "node_type", + "request_type": "request_type", + "style": "style", + } + + def __init__(self_, enrichments: List[HostMapWidgetScalarRequest], node_type: HostMapWidgetNodeType, request_type: HostMapWidgetInfrastructureRequestRequestType, conditional_formats: Union[List[WidgetConditionalFormat], UnsetType]=unset, filter: Union[str, UnsetType]=unset, group_by: Union[List[HostMapWidgetGroupBy], UnsetType]=unset, no_group_hosts: Union[bool, UnsetType]=unset, no_metric_hosts: Union[bool, UnsetType]=unset, style: Union[HostMapWidgetInfrastructureStyle, UnsetType]=unset, **kwargs): + """ + Infrastructure-backed host map child request (leaf node, no further nesting supported). + + :param conditional_formats: List of conditional formatting rules applied to fill values. + :type conditional_formats: [WidgetConditionalFormat], optional + + :param enrichments: Metric or event queries joined to the entity set. Each formula specifies a visual dimension. + :type enrichments: [HostMapWidgetScalarRequest] + + :param filter: Filter string for the entity set in tag format (for example, ``env:prod`` ). + :type filter: str, optional + + :param group_by: Defines how entities are grouped into tiles. The ordering of entries implies + the grouping hierarchy. + :type group_by: [HostMapWidgetGroupBy], optional + + :param no_group_hosts: Whether to hide entities that have no group assignment. + :type no_group_hosts: bool, optional + + :param no_metric_hosts: Whether to hide entities that have no enrichment data. + :type no_metric_hosts: bool, optional + + :param node_type: Which type of infrastructure entity to visualize in the host map. + :type node_type: HostMapWidgetNodeType + + :param request_type: Identifies this as an infrastructure-backed host map request. + :type request_type: HostMapWidgetInfrastructureRequestRequestType + + :param style: Style configuration for the infrastructure host map. + :type style: HostMapWidgetInfrastructureStyle, optional + """ + if conditional_formats is not unset: + kwargs["conditional_formats"] = conditional_formats + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if no_group_hosts is not unset: + kwargs["no_group_hosts"] = no_group_hosts + if no_metric_hosts is not unset: + kwargs["no_metric_hosts"] = no_metric_hosts + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + + self_.enrichments = enrichments + self_.node_type = node_type + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/host_map_widget_infrastructure_request_request_type.py b/datadog_api_client/v1/model/host_map_widget_infrastructure_request_request_type.py new file mode 100644 index 0000000000..95a1c0617a --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_infrastructure_request_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HostMapWidgetInfrastructureRequestRequestType(ModelSimple): + """ + Identifies this as an infrastructure-backed host map request. + + :param value: If omitted defaults to "infrastructure_hostmap". Must be one of ["infrastructure_hostmap"]. + :type value: str + """ + + allowed_values = { + "infrastructure_hostmap", + } + INFRASTRUCTURE_HOSTMAP: ClassVar["HostMapWidgetInfrastructureRequestRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HostMapWidgetInfrastructureRequestRequestType.INFRASTRUCTURE_HOSTMAP = HostMapWidgetInfrastructureRequestRequestType("infrastructure_hostmap") diff --git a/datadog_api_client/v1/model/host_map_widget_infrastructure_style.py b/datadog_api_client/v1/model/host_map_widget_infrastructure_style.py new file mode 100644 index 0000000000..4e9fec16d6 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_infrastructure_style.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HostMapWidgetInfrastructureStyle(ModelNormal): + @cached_property + def openapi_types(_): + return { + "fill_max": (float,), + "fill_min": (float,), + "palette": (str,), + "palette_flip": (bool,), + } + attribute_map = { + "fill_max": "fill_max", + "fill_min": "fill_min", + "palette": "palette", + "palette_flip": "palette_flip", + } + + def __init__(self_, fill_max: Union[float, UnsetType]=unset, fill_min: Union[float, UnsetType]=unset, palette: Union[str, UnsetType]=unset, palette_flip: Union[bool, UnsetType]=unset, **kwargs): + """ + Style configuration for the infrastructure host map. + + :param fill_max: Maximum value for the fill color scale. Omit to use automatic scaling. + :type fill_max: float, optional + + :param fill_min: Minimum value for the fill color scale. Omit to use automatic scaling. + :type fill_min: float, optional + + :param palette: Color palette name or alias. + :type palette: str, optional + + :param palette_flip: Whether to invert the color palette. + :type palette_flip: bool, optional + """ + if fill_max is not unset: + kwargs["fill_max"] = fill_max + if fill_min is not unset: + kwargs["fill_min"] = fill_min + if palette is not unset: + kwargs["palette"] = palette + if palette_flip is not unset: + kwargs["palette_flip"] = palette_flip + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_map_widget_node_type.py b/datadog_api_client/v1/model/host_map_widget_node_type.py new file mode 100644 index 0000000000..878859a171 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_node_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HostMapWidgetNodeType(ModelSimple): + """ + Which type of infrastructure entity to visualize in the host map. + + :param value: Must be one of ["host", "container", "pod", "cluster"]. + :type value: str + """ + + allowed_values = { + "host", + "container", + "pod", + "cluster", + } + HOST: ClassVar["HostMapWidgetNodeType"] + CONTAINER: ClassVar["HostMapWidgetNodeType"] + POD: ClassVar["HostMapWidgetNodeType"] + CLUSTER: ClassVar["HostMapWidgetNodeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HostMapWidgetNodeType.HOST = HostMapWidgetNodeType("host") +HostMapWidgetNodeType.CONTAINER = HostMapWidgetNodeType("container") +HostMapWidgetNodeType.POD = HostMapWidgetNodeType("pod") +HostMapWidgetNodeType.CLUSTER = HostMapWidgetNodeType("cluster") diff --git a/datadog_api_client/v1/model/host_map_widget_projection.py b/datadog_api_client/v1/model/host_map_widget_projection.py new file mode 100644 index 0000000000..b544c7b142 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_projection.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.host_map_widget_projection_dimension_mapping import HostMapWidgetProjectionDimensionMapping + from datadog_api_client.v1.model.host_map_widget_projection_type import HostMapWidgetProjectionType + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + +class HostMapWidgetProjection(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.host_map_widget_projection_dimension_mapping import HostMapWidgetProjectionDimensionMapping + from datadog_api_client.v1.model.host_map_widget_projection_type import HostMapWidgetProjectionType + return { + "dimensions": ([HostMapWidgetProjectionDimensionMapping],), + "type": (HostMapWidgetProjectionType,), + } + attribute_map = { + "dimensions": "dimensions", + "type": "type", + } + + def __init__(self_, dimensions: List[HostMapWidgetProjectionDimensionMapping], type: HostMapWidgetProjectionType, **kwargs): + """ + Projection for the DDSQL host map request. Maps dataset columns to map dimensions: ``node`` identifies the entity, repeated ``group`` entries define the grouping hierarchy (outermost first), and ``fill`` / ``size`` drive the tile color and size. + + :param dimensions: List of column-to-dimension mappings for the projection. + :type dimensions: [HostMapWidgetProjectionDimensionMapping] + + :param type: Type of the host map projection. + :type type: HostMapWidgetProjectionType + """ + super().__init__(kwargs) + + + self_.dimensions = dimensions + self_.type = type diff --git a/datadog_api_client/v1/model/host_map_widget_projection_dimension_mapping.py b/datadog_api_client/v1/model/host_map_widget_projection_dimension_mapping.py new file mode 100644 index 0000000000..30947153a0 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_projection_dimension_mapping.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.host_map_widget_dimension import HostMapWidgetDimension + from datadog_api_client.v1.model.widget_number_format import WidgetNumberFormat + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + +class HostMapWidgetProjectionDimensionMapping(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.host_map_widget_dimension import HostMapWidgetDimension + from datadog_api_client.v1.model.widget_number_format import WidgetNumberFormat + return { + "alias": (str,), + "column": (str,), + "dimension": (HostMapWidgetDimension,), + "number_format": (WidgetNumberFormat,), + } + attribute_map = { + "alias": "alias", + "column": "column", + "dimension": "dimension", + "number_format": "number_format", + } + + def __init__(self_, column: str, dimension: HostMapWidgetDimension, alias: Union[str, UnsetType]=unset, number_format: Union[WidgetNumberFormat, UnsetType]=unset, **kwargs): + """ + Maps a dataset column to a host map visual dimension. + + :param alias: Alias used to label the column instead of its name. + :type alias: str, optional + + :param column: Source column name from the dataset. + :type column: str + + :param dimension: Visual dimension for the host map widget. Used both by infrastructure-backed formulas and by DDSQL projection columns; ``group`` is only meaningful for DDSQL projection columns, where repeated entries define the grouping hierarchy. + :type dimension: HostMapWidgetDimension + + :param number_format: Number format options for the widget. + :type number_format: WidgetNumberFormat, optional + """ + if alias is not unset: + kwargs["alias"] = alias + if number_format is not unset: + kwargs["number_format"] = number_format + super().__init__(kwargs) + + + self_.column = column + self_.dimension = dimension diff --git a/datadog_api_client/v1/model/host_map_widget_projection_type.py b/datadog_api_client/v1/model/host_map_widget_projection_type.py new file mode 100644 index 0000000000..5c94cad951 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_projection_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HostMapWidgetProjectionType(ModelSimple): + """ + Type of the host map projection. + + :param value: If omitted defaults to "hostmap". Must be one of ["hostmap"]. + :type value: str + """ + + allowed_values = { + "hostmap", + } + HOSTMAP: ClassVar["HostMapWidgetProjectionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HostMapWidgetProjectionType.HOSTMAP = HostMapWidgetProjectionType("hostmap") diff --git a/datadog_api_client/v1/model/host_map_widget_scalar_request.py b/datadog_api_client/v1/model/host_map_widget_scalar_request.py new file mode 100644 index 0000000000..2f7b8eb816 --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_scalar_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.host_map_widget_formula import HostMapWidgetFormula + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.host_map_widget_scalar_request_response_format import HostMapWidgetScalarRequestResponseFormat + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class HostMapWidgetScalarRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.host_map_widget_formula import HostMapWidgetFormula + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.host_map_widget_scalar_request_response_format import HostMapWidgetScalarRequestResponseFormat + return { + "formulas": ([HostMapWidgetFormula],), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (HostMapWidgetScalarRequestResponseFormat,), + } + attribute_map = { + "formulas": "formulas", + "queries": "queries", + "response_format": "response_format", + } + + def __init__(self_, formulas: List[HostMapWidgetFormula], queries: List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], response_format: HostMapWidgetScalarRequestResponseFormat, **kwargs): + """ + Scalar formula request for the infrastructure host map widget. Each formula specifies + which visual dimension it drives. + + :param formulas: List of formulas that operate on queries, each assigned to a visual dimension. + :type formulas: [HostMapWidgetFormula] + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition] + + :param response_format: Response format for the scalar formula request. Only ``scalar`` is supported. + :type response_format: HostMapWidgetScalarRequestResponseFormat + """ + super().__init__(kwargs) + + + self_.formulas = formulas + self_.queries = queries + self_.response_format = response_format diff --git a/datadog_api_client/v1/model/host_map_widget_scalar_request_response_format.py b/datadog_api_client/v1/model/host_map_widget_scalar_request_response_format.py new file mode 100644 index 0000000000..343a09b18d --- /dev/null +++ b/datadog_api_client/v1/model/host_map_widget_scalar_request_response_format.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HostMapWidgetScalarRequestResponseFormat(ModelSimple): + """ + Response format for the scalar formula request. Only `scalar` is supported. + + :param value: If omitted defaults to "scalar". Must be one of ["scalar"]. + :type value: str + """ + + allowed_values = { + "scalar", + } + SCALAR: ClassVar["HostMapWidgetScalarRequestResponseFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HostMapWidgetScalarRequestResponseFormat.SCALAR = HostMapWidgetScalarRequestResponseFormat("scalar") diff --git a/datadog_api_client/v1/model/host_meta.py b/datadog_api_client/v1/model/host_meta.py new file mode 100644 index 0000000000..fb0bb6febf --- /dev/null +++ b/datadog_api_client/v1/model/host_meta.py @@ -0,0 +1,149 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.agent_check import AgentCheck + from datadog_api_client.v1.model.host_meta_install_method import HostMetaInstallMethod + +class HostMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.agent_check import AgentCheck + from datadog_api_client.v1.model.host_meta_install_method import HostMetaInstallMethod + return { + "agent_checks": ([AgentCheck],), + "agent_version": (str,), + "cpu_cores": (int,), + "fbsd_v": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + "gohai": (str,), + "install_method": (HostMetaInstallMethod,), + "mac_v": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + "machine": (str,), + "nix_v": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + "platform": (str,), + "processor": (str,), + "python_v": (str,), + "socket_fqdn": (str,), + "socket_hostname": (str,), + "win_v": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + } + attribute_map = { + "agent_checks": "agent_checks", + "agent_version": "agent_version", + "cpu_cores": "cpuCores", + "fbsd_v": "fbsdV", + "gohai": "gohai", + "install_method": "install_method", + "mac_v": "macV", + "machine": "machine", + "nix_v": "nixV", + "platform": "platform", + "processor": "processor", + "python_v": "pythonV", + "socket_fqdn": "socket-fqdn", + "socket_hostname": "socket-hostname", + "win_v": "winV", + } + + def __init__(self_, agent_checks: Union[List[AgentCheck], UnsetType]=unset, agent_version: Union[str, UnsetType]=unset, cpu_cores: Union[int, UnsetType]=unset, fbsd_v: Union[List[Any], UnsetType]=unset, gohai: Union[str, UnsetType]=unset, install_method: Union[HostMetaInstallMethod, UnsetType]=unset, mac_v: Union[List[Any], UnsetType]=unset, machine: Union[str, UnsetType]=unset, nix_v: Union[List[Any], UnsetType]=unset, platform: Union[str, UnsetType]=unset, processor: Union[str, UnsetType]=unset, python_v: Union[str, UnsetType]=unset, socket_fqdn: Union[str, UnsetType]=unset, socket_hostname: Union[str, UnsetType]=unset, win_v: Union[List[Any], UnsetType]=unset, **kwargs): + """ + Metadata associated with your host. + + :param agent_checks: A list of Agent checks running on the host. + :type agent_checks: [AgentCheck], optional + + :param agent_version: The Datadog Agent version. + :type agent_version: str, optional + + :param cpu_cores: The number of cores. + :type cpu_cores: int, optional + + :param fbsd_v: An array of Mac versions. + :type fbsd_v: [bool, date, datetime, dict, float, int, list, str, UUID, none_type], optional + + :param gohai: JSON string containing system information. + :type gohai: str, optional + + :param install_method: Agent install method. + :type install_method: HostMetaInstallMethod, optional + + :param mac_v: An array of Mac versions. + :type mac_v: [bool, date, datetime, dict, float, int, list, str, UUID, none_type], optional + + :param machine: The machine architecture. + :type machine: str, optional + + :param nix_v: Array of Unix versions. + :type nix_v: [bool, date, datetime, dict, float, int, list, str, UUID, none_type], optional + + :param platform: The OS platform. + :type platform: str, optional + + :param processor: The processor. + :type processor: str, optional + + :param python_v: The Python version. + :type python_v: str, optional + + :param socket_fqdn: The socket fqdn. + :type socket_fqdn: str, optional + + :param socket_hostname: The socket hostname. + :type socket_hostname: str, optional + + :param win_v: An array of Windows versions. + :type win_v: [bool, date, datetime, dict, float, int, list, str, UUID, none_type], optional + """ + if agent_checks is not unset: + kwargs["agent_checks"] = agent_checks + if agent_version is not unset: + kwargs["agent_version"] = agent_version + if cpu_cores is not unset: + kwargs["cpu_cores"] = cpu_cores + if fbsd_v is not unset: + kwargs["fbsd_v"] = fbsd_v + if gohai is not unset: + kwargs["gohai"] = gohai + if install_method is not unset: + kwargs["install_method"] = install_method + if mac_v is not unset: + kwargs["mac_v"] = mac_v + if machine is not unset: + kwargs["machine"] = machine + if nix_v is not unset: + kwargs["nix_v"] = nix_v + if platform is not unset: + kwargs["platform"] = platform + if processor is not unset: + kwargs["processor"] = processor + if python_v is not unset: + kwargs["python_v"] = python_v + if socket_fqdn is not unset: + kwargs["socket_fqdn"] = socket_fqdn + if socket_hostname is not unset: + kwargs["socket_hostname"] = socket_hostname + if win_v is not unset: + kwargs["win_v"] = win_v + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_meta_install_method.py b/datadog_api_client/v1/model/host_meta_install_method.py new file mode 100644 index 0000000000..758991ac38 --- /dev/null +++ b/datadog_api_client/v1/model/host_meta_install_method.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HostMetaInstallMethod(ModelNormal): + @cached_property + def openapi_types(_): + return { + "installer_version": (str,), + "tool": (str,), + "tool_version": (str,), + } + attribute_map = { + "installer_version": "installer_version", + "tool": "tool", + "tool_version": "tool_version", + } + + def __init__(self_, installer_version: Union[str, UnsetType]=unset, tool: Union[str, UnsetType]=unset, tool_version: Union[str, UnsetType]=unset, **kwargs): + """ + Agent install method. + + :param installer_version: The installer version. + :type installer_version: str, optional + + :param tool: Tool used to install the agent. + :type tool: str, optional + + :param tool_version: The tool version. + :type tool_version: str, optional + """ + if installer_version is not unset: + kwargs["installer_version"] = installer_version + if tool is not unset: + kwargs["tool"] = tool + if tool_version is not unset: + kwargs["tool_version"] = tool_version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_metrics.py b/datadog_api_client/v1/model/host_metrics.py new file mode 100644 index 0000000000..19561f98e4 --- /dev/null +++ b/datadog_api_client/v1/model/host_metrics.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HostMetrics(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cpu": (float,), + "iowait": (float,), + "load": (float,), + } + attribute_map = { + "cpu": "cpu", + "iowait": "iowait", + "load": "load", + } + + def __init__(self_, cpu: Union[float, UnsetType]=unset, iowait: Union[float, UnsetType]=unset, load: Union[float, UnsetType]=unset, **kwargs): + """ + Host Metrics collected. + + :param cpu: The percent of CPU used (everything but idle). + :type cpu: float, optional + + :param iowait: The percent of CPU spent waiting on the IO (not reported for all platforms). + :type iowait: float, optional + + :param load: The system load over the last 15 minutes. + :type load: float, optional + """ + if cpu is not unset: + kwargs["cpu"] = cpu + if iowait is not unset: + kwargs["iowait"] = iowait + if load is not unset: + kwargs["load"] = load + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_mute_response.py b/datadog_api_client/v1/model/host_mute_response.py new file mode 100644 index 0000000000..c137633f9d --- /dev/null +++ b/datadog_api_client/v1/model/host_mute_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HostMuteResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "action": (str,), + "end": (int,), + "hostname": (str,), + "message": (str,), + } + attribute_map = { + "action": "action", + "end": "end", + "hostname": "hostname", + "message": "message", + } + + def __init__(self_, action: Union[str, UnsetType]=unset, end: Union[int, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, message: Union[str, UnsetType]=unset, **kwargs): + """ + Response with the list of muted host for your organization. + + :param action: Action applied to the hosts. + :type action: str, optional + + :param end: POSIX timestamp in seconds when the host is unmuted. + :type end: int, optional + + :param hostname: The host name. + :type hostname: str, optional + + :param message: Message associated with the mute. + :type message: str, optional + """ + if action is not unset: + kwargs["action"] = action + if end is not unset: + kwargs["end"] = end + if hostname is not unset: + kwargs["hostname"] = hostname + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_mute_settings.py b/datadog_api_client/v1/model/host_mute_settings.py new file mode 100644 index 0000000000..e7e75d784b --- /dev/null +++ b/datadog_api_client/v1/model/host_mute_settings.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HostMuteSettings(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (int,), + "message": (str,), + "override": (bool,), + } + attribute_map = { + "end": "end", + "message": "message", + "override": "override", + } + + def __init__(self_, end: Union[int, UnsetType]=unset, message: Union[str, UnsetType]=unset, override: Union[bool, UnsetType]=unset, **kwargs): + """ + Combination of settings to mute a host. + + :param end: POSIX timestamp in seconds when the host is unmuted. If omitted, the host remains muted until explicitly unmuted. + :type end: int, optional + + :param message: Message to associate with the muting of this host. + :type message: str, optional + + :param override: If true and the host is already muted, replaces existing host mute settings. + :type override: bool, optional + """ + if end is not unset: + kwargs["end"] = end + if message is not unset: + kwargs["message"] = message + if override is not unset: + kwargs["override"] = override + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_tags.py b/datadog_api_client/v1/model/host_tags.py new file mode 100644 index 0000000000..a8c3d15449 --- /dev/null +++ b/datadog_api_client/v1/model/host_tags.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HostTags(ModelNormal): + @cached_property + def openapi_types(_): + return { + "host": (str,), + "tags": ([str],), + } + attribute_map = { + "host": "host", + "tags": "tags", + } + + def __init__(self_, host: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Host name and an array of its tags + + :param host: Your host name. + :type host: str, optional + + :param tags: A list of tags associated with a host. + :type tags: [str], optional + """ + if host is not unset: + kwargs["host"] = host + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/host_totals.py b/datadog_api_client/v1/model/host_totals.py new file mode 100644 index 0000000000..1166f14076 --- /dev/null +++ b/datadog_api_client/v1/model/host_totals.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HostTotals(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_active": (int,), + "total_up": (int,), + } + attribute_map = { + "total_active": "total_active", + "total_up": "total_up", + } + + def __init__(self_, total_active: Union[int, UnsetType]=unset, total_up: Union[int, UnsetType]=unset, **kwargs): + """ + Total number of host currently monitored by Datadog. + + :param total_active: Total number of active host (UP and ???) reporting to Datadog. + :type total_active: int, optional + + :param total_up: Number of host that are UP and reporting to Datadog. + :type total_up: int, optional + """ + if total_active is not unset: + kwargs["total_active"] = total_active + if total_up is not unset: + kwargs["total_up"] = total_up + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/hourly_usage_attribution_body.py b/datadog_api_client/v1/model/hourly_usage_attribution_body.py new file mode 100644 index 0000000000..b56ed2d216 --- /dev/null +++ b/datadog_api_client/v1/model/hourly_usage_attribution_body.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_attribution_tag_names import UsageAttributionTagNames + from datadog_api_client.v1.model.hourly_usage_attribution_usage_type import HourlyUsageAttributionUsageType + +class HourlyUsageAttributionBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_attribution_tag_names import UsageAttributionTagNames + from datadog_api_client.v1.model.hourly_usage_attribution_usage_type import HourlyUsageAttributionUsageType + return { + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + "region": (str,), + "tag_config_source": (str,), + "tags": (UsageAttributionTagNames,), + "total_usage_sum": (float,), + "updated_at": (str,), + "usage_type": (HourlyUsageAttributionUsageType,), + } + attribute_map = { + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + "region": "region", + "tag_config_source": "tag_config_source", + "tags": "tags", + "total_usage_sum": "total_usage_sum", + "updated_at": "updated_at", + "usage_type": "usage_type", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, tag_config_source: Union[str, UnsetType]=unset, tags: Union[UsageAttributionTagNames, none_type, UnsetType]=unset, total_usage_sum: Union[float, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, usage_type: Union[HourlyUsageAttributionUsageType, UnsetType]=unset, **kwargs): + """ + The usage for one set of tags for one hour. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The name of the organization. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param region: The region of the Datadog instance that the organization belongs to. + :type region: str, optional + + :param tag_config_source: The source of the usage attribution tag configuration and the selected tags in the format of ``::://////``. + :type tag_config_source: str, optional + + :param tags: Tag keys and values. + + A ``null`` value here means that the requested tag breakdown cannot be applied because it does not match the `tags + configured for usage attribution `_. + In this scenario the API returns the total usage, not broken down by tags. + :type tags: UsageAttributionTagNames, none_type, optional + + :param total_usage_sum: Total product usage for the given tags within the hour. + :type total_usage_sum: float, optional + + :param updated_at: Shows the most recent hour in the current month for all organizations where usages are calculated. + :type updated_at: str, optional + + :param usage_type: Supported products for hourly usage attribution requests. Usage types are in the format ``_usage``. + To obtain the complete list of valid usage types, make a request to the `Get usage attribution types API `_. + :type usage_type: HourlyUsageAttributionUsageType, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if region is not unset: + kwargs["region"] = region + if tag_config_source is not unset: + kwargs["tag_config_source"] = tag_config_source + if tags is not unset: + kwargs["tags"] = tags + if total_usage_sum is not unset: + kwargs["total_usage_sum"] = total_usage_sum + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if usage_type is not unset: + kwargs["usage_type"] = usage_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/hourly_usage_attribution_metadata.py b/datadog_api_client/v1/model/hourly_usage_attribution_metadata.py new file mode 100644 index 0000000000..1699b19a87 --- /dev/null +++ b/datadog_api_client/v1/model/hourly_usage_attribution_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.hourly_usage_attribution_pagination import HourlyUsageAttributionPagination + +class HourlyUsageAttributionMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.hourly_usage_attribution_pagination import HourlyUsageAttributionPagination + return { + "pagination": (HourlyUsageAttributionPagination,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[HourlyUsageAttributionPagination, UnsetType]=unset, **kwargs): + """ + The object containing document metadata. + + :param pagination: The metadata for the current pagination. + :type pagination: HourlyUsageAttributionPagination, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/hourly_usage_attribution_pagination.py b/datadog_api_client/v1/model/hourly_usage_attribution_pagination.py new file mode 100644 index 0000000000..aa7d8901e0 --- /dev/null +++ b/datadog_api_client/v1/model/hourly_usage_attribution_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HourlyUsageAttributionPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_record_id": (str, none_type), + } + attribute_map = { + "next_record_id": "next_record_id", + } + + def __init__(self_, next_record_id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The metadata for the current pagination. + + :param next_record_id: The cursor to get the next results (if any). To make the next request, use the same parameters and add ``next_record_id``. + :type next_record_id: str, none_type, optional + """ + if next_record_id is not unset: + kwargs["next_record_id"] = next_record_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/hourly_usage_attribution_response.py b/datadog_api_client/v1/model/hourly_usage_attribution_response.py new file mode 100644 index 0000000000..2904b5291b --- /dev/null +++ b/datadog_api_client/v1/model/hourly_usage_attribution_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.hourly_usage_attribution_metadata import HourlyUsageAttributionMetadata + from datadog_api_client.v1.model.hourly_usage_attribution_body import HourlyUsageAttributionBody + +class HourlyUsageAttributionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.hourly_usage_attribution_metadata import HourlyUsageAttributionMetadata + from datadog_api_client.v1.model.hourly_usage_attribution_body import HourlyUsageAttributionBody + return { + "metadata": (HourlyUsageAttributionMetadata,), + "usage": ([HourlyUsageAttributionBody],), + } + attribute_map = { + "metadata": "metadata", + "usage": "usage", + } + + def __init__(self_, metadata: Union[HourlyUsageAttributionMetadata, UnsetType]=unset, usage: Union[List[HourlyUsageAttributionBody], UnsetType]=unset, **kwargs): + """ + Response containing the hourly usage attribution by tag(s). + + :param metadata: The object containing document metadata. + :type metadata: HourlyUsageAttributionMetadata, optional + + :param usage: Get the hourly usage attribution by tag(s). + :type usage: [HourlyUsageAttributionBody], optional + """ + if metadata is not unset: + kwargs["metadata"] = metadata + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/hourly_usage_attribution_usage_type.py b/datadog_api_client/v1/model/hourly_usage_attribution_usage_type.py new file mode 100644 index 0000000000..1a3cc56060 --- /dev/null +++ b/datadog_api_client/v1/model/hourly_usage_attribution_usage_type.py @@ -0,0 +1,310 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HourlyUsageAttributionUsageType(ModelSimple): + """ + Supported products for hourly usage attribution requests. Usage types are in the format `_usage`. + To obtain the complete list of valid usage types, make a request to the [Get usage attribution types API](https://docs.datadoghq.com/api/latest/usage-metering/#get-usage-attribution-types). + + :param value: Must be one of ["api_usage", "apm_fargate_usage", "apm_host_usage", "apm_usm_usage", "appsec_fargate_usage", "appsec_usage", "asm_serverless_traced_invocations_usage", "asm_serverless_traced_invocations_percentage", "bits_ai_investigations_usage", "browser_usage", "ci_code_coverage_committers_percentage", "ci_code_coverage_committers_usage", "ci_pipeline_indexed_spans_usage", "ci_test_indexed_spans_usage", "ci_visibility_itr_usage", "cloud_siem_usage", "code_security_host_usage", "container_excl_agent_usage", "container_usage", "cspm_containers_usage", "cspm_hosts_usage", "custom_event_usage", "custom_ingested_timeseries_usage", "custom_timeseries_usage", "cws_containers_usage", "cws_fargate_task_usage", "cws_hosts_usage", "data_jobs_monitoring_usage", "data_stream_monitoring_usage", "dbm_hosts_usage", "dbm_queries_usage", "error_tracking_usage", "error_tracking_percentage", "estimated_indexed_spans_usage", "estimated_ingested_spans_usage", "fargate_usage", "flex_logs_starter", "flex_stored_logs", "functions_usage", "incident_management_monthly_active_users_usage", "indexed_spans_usage", "infra_host_usage", "infra_host_basic_usage", "ingested_logs_bytes_usage", "ingested_spans_bytes_usage", "invocations_usage", "lambda_traced_invocations_usage", "llm_observability_usage", "llm_spans_usage", "logs_indexed_15day_usage", "logs_indexed_180day_usage", "logs_indexed_1day_usage", "logs_indexed_30day_usage", "logs_indexed_360day_usage", "logs_indexed_3day_usage", "logs_indexed_45day_usage", "logs_indexed_60day_usage", "logs_indexed_7day_usage", "logs_indexed_90day_usage", "logs_indexed_custom_retention_usage", "mobile_app_testing_usage", "ndm_netflow_usage", "npm_host_usage", "network_device_wireless_usage", "obs_pipeline_bytes_usage", "obs_pipelines_vcpu_usage", "online_archive_usage", "product_analytics_session_usage", "profiled_container_usage", "profiled_fargate_usage", "profiled_host_usage", "published_app", "rum_browser_mobile_sessions_usage", "rum_ingested_usage", "rum_investigate_usage", "rum_replay_sessions_usage", "rum_session_replay_add_on_usage", "sca_fargate_usage", "sds_scanned_bytes_usage", "serverless_apps_usage", "serverless_apps_apm_usage", "siem_12mo_retention_usage", "siem_6mo_retention_usage", "siem_analyzed_logs_add_on_usage", "siem_ingested_bytes_usage", "snmp_usage", "universal_service_monitoring_usage", "vuln_management_hosts_usage", "workflow_executions_usage"]. + :type value: str + """ + + allowed_values = { + "api_usage", + "apm_fargate_usage", + "apm_host_usage", + "apm_usm_usage", + "appsec_fargate_usage", + "appsec_usage", + "asm_serverless_traced_invocations_usage", + "asm_serverless_traced_invocations_percentage", + "bits_ai_investigations_usage", + "browser_usage", + "ci_code_coverage_committers_percentage", + "ci_code_coverage_committers_usage", + "ci_pipeline_indexed_spans_usage", + "ci_test_indexed_spans_usage", + "ci_visibility_itr_usage", + "cloud_siem_usage", + "code_security_host_usage", + "container_excl_agent_usage", + "container_usage", + "cspm_containers_usage", + "cspm_hosts_usage", + "custom_event_usage", + "custom_ingested_timeseries_usage", + "custom_timeseries_usage", + "cws_containers_usage", + "cws_fargate_task_usage", + "cws_hosts_usage", + "data_jobs_monitoring_usage", + "data_stream_monitoring_usage", + "dbm_hosts_usage", + "dbm_queries_usage", + "error_tracking_usage", + "error_tracking_percentage", + "estimated_indexed_spans_usage", + "estimated_ingested_spans_usage", + "fargate_usage", + "flex_logs_starter", + "flex_stored_logs", + "functions_usage", + "incident_management_monthly_active_users_usage", + "indexed_spans_usage", + "infra_host_usage", + "infra_host_basic_usage", + "ingested_logs_bytes_usage", + "ingested_spans_bytes_usage", + "invocations_usage", + "lambda_traced_invocations_usage", + "llm_observability_usage", + "llm_spans_usage", + "logs_indexed_15day_usage", + "logs_indexed_180day_usage", + "logs_indexed_1day_usage", + "logs_indexed_30day_usage", + "logs_indexed_360day_usage", + "logs_indexed_3day_usage", + "logs_indexed_45day_usage", + "logs_indexed_60day_usage", + "logs_indexed_7day_usage", + "logs_indexed_90day_usage", + "logs_indexed_custom_retention_usage", + "mobile_app_testing_usage", + "ndm_netflow_usage", + "npm_host_usage", + "network_device_wireless_usage", + "obs_pipeline_bytes_usage", + "obs_pipelines_vcpu_usage", + "online_archive_usage", + "product_analytics_session_usage", + "profiled_container_usage", + "profiled_fargate_usage", + "profiled_host_usage", + "published_app", + "rum_browser_mobile_sessions_usage", + "rum_ingested_usage", + "rum_investigate_usage", + "rum_replay_sessions_usage", + "rum_session_replay_add_on_usage", + "sca_fargate_usage", + "sds_scanned_bytes_usage", + "serverless_apps_usage", + "serverless_apps_apm_usage", + "siem_12mo_retention_usage", + "siem_6mo_retention_usage", + "siem_analyzed_logs_add_on_usage", + "siem_ingested_bytes_usage", + "snmp_usage", + "universal_service_monitoring_usage", + "vuln_management_hosts_usage", + "workflow_executions_usage", + } + API_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + APM_FARGATE_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + APM_HOST_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + APM_USM_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + APPSEC_FARGATE_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + APPSEC_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + ASM_SERVERLESS_TRACED_INVOCATIONS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + ASM_SERVERLESS_TRACED_INVOCATIONS_PERCENTAGE: ClassVar["HourlyUsageAttributionUsageType"] + BITS_AI_INVESTIGATIONS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + BROWSER_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CI_CODE_COVERAGE_COMMITTERS_PERCENTAGE: ClassVar["HourlyUsageAttributionUsageType"] + CI_CODE_COVERAGE_COMMITTERS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CI_PIPELINE_INDEXED_SPANS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CI_TEST_INDEXED_SPANS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CI_VISIBILITY_ITR_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CLOUD_SIEM_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CODE_SECURITY_HOST_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CONTAINER_EXCL_AGENT_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CONTAINER_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CSPM_CONTAINERS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CSPM_HOSTS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CUSTOM_EVENT_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CUSTOM_INGESTED_TIMESERIES_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CUSTOM_TIMESERIES_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CWS_CONTAINERS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CWS_FARGATE_TASK_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + CWS_HOSTS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + DATA_JOBS_MONITORING_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + DATA_STREAM_MONITORING_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + DBM_HOSTS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + DBM_QUERIES_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + ERROR_TRACKING_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + ERROR_TRACKING_PERCENTAGE: ClassVar["HourlyUsageAttributionUsageType"] + ESTIMATED_INDEXED_SPANS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + ESTIMATED_INGESTED_SPANS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + FARGATE_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + FLEX_LOGS_STARTER: ClassVar["HourlyUsageAttributionUsageType"] + FLEX_STORED_LOGS: ClassVar["HourlyUsageAttributionUsageType"] + FUNCTIONS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + INCIDENT_MANAGEMENT_MONTHLY_ACTIVE_USERS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + INDEXED_SPANS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + INFRA_HOST_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + INFRA_HOST_BASIC_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + INGESTED_LOGS_BYTES_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + INGESTED_SPANS_BYTES_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + INVOCATIONS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LAMBDA_TRACED_INVOCATIONS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LLM_OBSERVABILITY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LLM_SPANS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_15DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_180DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_1DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_30DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_360DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_3DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_45DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_60DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_7DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_90DAY_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + LOGS_INDEXED_CUSTOM_RETENTION_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + MOBILE_APP_TESTING_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + NDM_NETFLOW_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + NETWORK_DEVICE_WIRELESS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + NPM_HOST_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + OBS_PIPELINE_BYTES_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + OBS_PIPELINE_VCPU_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + ONLINE_ARCHIVE_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + PRODUCT_ANALYTICS_SESSION_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + PROFILED_CONTAINER_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + PROFILED_FARGATE_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + PROFILED_HOST_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + PUBLISHED_APP_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + RUM_BROWSER_MOBILE_SESSIONS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + RUM_INGESTED_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + RUM_INVESTIGATE_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + RUM_REPLAY_SESSIONS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + RUM_SESSION_REPLAY_ADD_ON_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + SCA_FARGATE_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + SDS_SCANNED_BYTES_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + SERVERLESS_APPS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + SERVERLESS_APPS_APM_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + SIEM_12MO_RETENTION_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + SIEM_6MO_RETENTION_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + SIEM_ANALYZED_LOGS_ADD_ON_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + SIEM_INGESTED_BYTES_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + SNMP_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + UNIVERSAL_SERVICE_MONITORING_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + VULN_MANAGEMENT_HOSTS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + WORKFLOW_EXECUTIONS_USAGE: ClassVar["HourlyUsageAttributionUsageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HourlyUsageAttributionUsageType.API_USAGE = HourlyUsageAttributionUsageType("api_usage") +HourlyUsageAttributionUsageType.APM_FARGATE_USAGE = HourlyUsageAttributionUsageType("apm_fargate_usage") +HourlyUsageAttributionUsageType.APM_HOST_USAGE = HourlyUsageAttributionUsageType("apm_host_usage") +HourlyUsageAttributionUsageType.APM_USM_USAGE = HourlyUsageAttributionUsageType("apm_usm_usage") +HourlyUsageAttributionUsageType.APPSEC_FARGATE_USAGE = HourlyUsageAttributionUsageType("appsec_fargate_usage") +HourlyUsageAttributionUsageType.APPSEC_USAGE = HourlyUsageAttributionUsageType("appsec_usage") +HourlyUsageAttributionUsageType.ASM_SERVERLESS_TRACED_INVOCATIONS_USAGE = HourlyUsageAttributionUsageType("asm_serverless_traced_invocations_usage") +HourlyUsageAttributionUsageType.ASM_SERVERLESS_TRACED_INVOCATIONS_PERCENTAGE = HourlyUsageAttributionUsageType("asm_serverless_traced_invocations_percentage") +HourlyUsageAttributionUsageType.BITS_AI_INVESTIGATIONS_USAGE = HourlyUsageAttributionUsageType("bits_ai_investigations_usage") +HourlyUsageAttributionUsageType.BROWSER_USAGE = HourlyUsageAttributionUsageType("browser_usage") +HourlyUsageAttributionUsageType.CI_CODE_COVERAGE_COMMITTERS_PERCENTAGE = HourlyUsageAttributionUsageType("ci_code_coverage_committers_percentage") +HourlyUsageAttributionUsageType.CI_CODE_COVERAGE_COMMITTERS_USAGE = HourlyUsageAttributionUsageType("ci_code_coverage_committers_usage") +HourlyUsageAttributionUsageType.CI_PIPELINE_INDEXED_SPANS_USAGE = HourlyUsageAttributionUsageType("ci_pipeline_indexed_spans_usage") +HourlyUsageAttributionUsageType.CI_TEST_INDEXED_SPANS_USAGE = HourlyUsageAttributionUsageType("ci_test_indexed_spans_usage") +HourlyUsageAttributionUsageType.CI_VISIBILITY_ITR_USAGE = HourlyUsageAttributionUsageType("ci_visibility_itr_usage") +HourlyUsageAttributionUsageType.CLOUD_SIEM_USAGE = HourlyUsageAttributionUsageType("cloud_siem_usage") +HourlyUsageAttributionUsageType.CODE_SECURITY_HOST_USAGE = HourlyUsageAttributionUsageType("code_security_host_usage") +HourlyUsageAttributionUsageType.CONTAINER_EXCL_AGENT_USAGE = HourlyUsageAttributionUsageType("container_excl_agent_usage") +HourlyUsageAttributionUsageType.CONTAINER_USAGE = HourlyUsageAttributionUsageType("container_usage") +HourlyUsageAttributionUsageType.CSPM_CONTAINERS_USAGE = HourlyUsageAttributionUsageType("cspm_containers_usage") +HourlyUsageAttributionUsageType.CSPM_HOSTS_USAGE = HourlyUsageAttributionUsageType("cspm_hosts_usage") +HourlyUsageAttributionUsageType.CUSTOM_EVENT_USAGE = HourlyUsageAttributionUsageType("custom_event_usage") +HourlyUsageAttributionUsageType.CUSTOM_INGESTED_TIMESERIES_USAGE = HourlyUsageAttributionUsageType("custom_ingested_timeseries_usage") +HourlyUsageAttributionUsageType.CUSTOM_TIMESERIES_USAGE = HourlyUsageAttributionUsageType("custom_timeseries_usage") +HourlyUsageAttributionUsageType.CWS_CONTAINERS_USAGE = HourlyUsageAttributionUsageType("cws_containers_usage") +HourlyUsageAttributionUsageType.CWS_FARGATE_TASK_USAGE = HourlyUsageAttributionUsageType("cws_fargate_task_usage") +HourlyUsageAttributionUsageType.CWS_HOSTS_USAGE = HourlyUsageAttributionUsageType("cws_hosts_usage") +HourlyUsageAttributionUsageType.DATA_JOBS_MONITORING_USAGE = HourlyUsageAttributionUsageType("data_jobs_monitoring_usage") +HourlyUsageAttributionUsageType.DATA_STREAM_MONITORING_USAGE = HourlyUsageAttributionUsageType("data_stream_monitoring_usage") +HourlyUsageAttributionUsageType.DBM_HOSTS_USAGE = HourlyUsageAttributionUsageType("dbm_hosts_usage") +HourlyUsageAttributionUsageType.DBM_QUERIES_USAGE = HourlyUsageAttributionUsageType("dbm_queries_usage") +HourlyUsageAttributionUsageType.ERROR_TRACKING_USAGE = HourlyUsageAttributionUsageType("error_tracking_usage") +HourlyUsageAttributionUsageType.ERROR_TRACKING_PERCENTAGE = HourlyUsageAttributionUsageType("error_tracking_percentage") +HourlyUsageAttributionUsageType.ESTIMATED_INDEXED_SPANS_USAGE = HourlyUsageAttributionUsageType("estimated_indexed_spans_usage") +HourlyUsageAttributionUsageType.ESTIMATED_INGESTED_SPANS_USAGE = HourlyUsageAttributionUsageType("estimated_ingested_spans_usage") +HourlyUsageAttributionUsageType.FARGATE_USAGE = HourlyUsageAttributionUsageType("fargate_usage") +HourlyUsageAttributionUsageType.FLEX_LOGS_STARTER = HourlyUsageAttributionUsageType("flex_logs_starter") +HourlyUsageAttributionUsageType.FLEX_STORED_LOGS = HourlyUsageAttributionUsageType("flex_stored_logs") +HourlyUsageAttributionUsageType.FUNCTIONS_USAGE = HourlyUsageAttributionUsageType("functions_usage") +HourlyUsageAttributionUsageType.INCIDENT_MANAGEMENT_MONTHLY_ACTIVE_USERS_USAGE = HourlyUsageAttributionUsageType("incident_management_monthly_active_users_usage") +HourlyUsageAttributionUsageType.INDEXED_SPANS_USAGE = HourlyUsageAttributionUsageType("indexed_spans_usage") +HourlyUsageAttributionUsageType.INFRA_HOST_USAGE = HourlyUsageAttributionUsageType("infra_host_usage") +HourlyUsageAttributionUsageType.INFRA_HOST_BASIC_USAGE = HourlyUsageAttributionUsageType("infra_host_basic_usage") +HourlyUsageAttributionUsageType.INGESTED_LOGS_BYTES_USAGE = HourlyUsageAttributionUsageType("ingested_logs_bytes_usage") +HourlyUsageAttributionUsageType.INGESTED_SPANS_BYTES_USAGE = HourlyUsageAttributionUsageType("ingested_spans_bytes_usage") +HourlyUsageAttributionUsageType.INVOCATIONS_USAGE = HourlyUsageAttributionUsageType("invocations_usage") +HourlyUsageAttributionUsageType.LAMBDA_TRACED_INVOCATIONS_USAGE = HourlyUsageAttributionUsageType("lambda_traced_invocations_usage") +HourlyUsageAttributionUsageType.LLM_OBSERVABILITY_USAGE = HourlyUsageAttributionUsageType("llm_observability_usage") +HourlyUsageAttributionUsageType.LLM_SPANS_USAGE = HourlyUsageAttributionUsageType("llm_spans_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_15DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_15day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_180DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_180day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_1DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_1day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_30DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_30day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_360DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_360day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_3DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_3day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_45DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_45day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_60DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_60day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_7DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_7day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_90DAY_USAGE = HourlyUsageAttributionUsageType("logs_indexed_90day_usage") +HourlyUsageAttributionUsageType.LOGS_INDEXED_CUSTOM_RETENTION_USAGE = HourlyUsageAttributionUsageType("logs_indexed_custom_retention_usage") +HourlyUsageAttributionUsageType.MOBILE_APP_TESTING_USAGE = HourlyUsageAttributionUsageType("mobile_app_testing_usage") +HourlyUsageAttributionUsageType.NDM_NETFLOW_USAGE = HourlyUsageAttributionUsageType("ndm_netflow_usage") +HourlyUsageAttributionUsageType.NETWORK_DEVICE_WIRELESS_USAGE = HourlyUsageAttributionUsageType("npm_host_usage") +HourlyUsageAttributionUsageType.NPM_HOST_USAGE = HourlyUsageAttributionUsageType("network_device_wireless_usage") +HourlyUsageAttributionUsageType.OBS_PIPELINE_BYTES_USAGE = HourlyUsageAttributionUsageType("obs_pipeline_bytes_usage") +HourlyUsageAttributionUsageType.OBS_PIPELINE_VCPU_USAGE = HourlyUsageAttributionUsageType("obs_pipelines_vcpu_usage") +HourlyUsageAttributionUsageType.ONLINE_ARCHIVE_USAGE = HourlyUsageAttributionUsageType("online_archive_usage") +HourlyUsageAttributionUsageType.PRODUCT_ANALYTICS_SESSION_USAGE = HourlyUsageAttributionUsageType("product_analytics_session_usage") +HourlyUsageAttributionUsageType.PROFILED_CONTAINER_USAGE = HourlyUsageAttributionUsageType("profiled_container_usage") +HourlyUsageAttributionUsageType.PROFILED_FARGATE_USAGE = HourlyUsageAttributionUsageType("profiled_fargate_usage") +HourlyUsageAttributionUsageType.PROFILED_HOST_USAGE = HourlyUsageAttributionUsageType("profiled_host_usage") +HourlyUsageAttributionUsageType.PUBLISHED_APP_USAGE = HourlyUsageAttributionUsageType("published_app") +HourlyUsageAttributionUsageType.RUM_BROWSER_MOBILE_SESSIONS_USAGE = HourlyUsageAttributionUsageType("rum_browser_mobile_sessions_usage") +HourlyUsageAttributionUsageType.RUM_INGESTED_USAGE = HourlyUsageAttributionUsageType("rum_ingested_usage") +HourlyUsageAttributionUsageType.RUM_INVESTIGATE_USAGE = HourlyUsageAttributionUsageType("rum_investigate_usage") +HourlyUsageAttributionUsageType.RUM_REPLAY_SESSIONS_USAGE = HourlyUsageAttributionUsageType("rum_replay_sessions_usage") +HourlyUsageAttributionUsageType.RUM_SESSION_REPLAY_ADD_ON_USAGE = HourlyUsageAttributionUsageType("rum_session_replay_add_on_usage") +HourlyUsageAttributionUsageType.SCA_FARGATE_USAGE = HourlyUsageAttributionUsageType("sca_fargate_usage") +HourlyUsageAttributionUsageType.SDS_SCANNED_BYTES_USAGE = HourlyUsageAttributionUsageType("sds_scanned_bytes_usage") +HourlyUsageAttributionUsageType.SERVERLESS_APPS_USAGE = HourlyUsageAttributionUsageType("serverless_apps_usage") +HourlyUsageAttributionUsageType.SERVERLESS_APPS_APM_USAGE = HourlyUsageAttributionUsageType("serverless_apps_apm_usage") +HourlyUsageAttributionUsageType.SIEM_12MO_RETENTION_USAGE = HourlyUsageAttributionUsageType("siem_12mo_retention_usage") +HourlyUsageAttributionUsageType.SIEM_6MO_RETENTION_USAGE = HourlyUsageAttributionUsageType("siem_6mo_retention_usage") +HourlyUsageAttributionUsageType.SIEM_ANALYZED_LOGS_ADD_ON_USAGE = HourlyUsageAttributionUsageType("siem_analyzed_logs_add_on_usage") +HourlyUsageAttributionUsageType.SIEM_INGESTED_BYTES_USAGE = HourlyUsageAttributionUsageType("siem_ingested_bytes_usage") +HourlyUsageAttributionUsageType.SNMP_USAGE = HourlyUsageAttributionUsageType("snmp_usage") +HourlyUsageAttributionUsageType.UNIVERSAL_SERVICE_MONITORING_USAGE = HourlyUsageAttributionUsageType("universal_service_monitoring_usage") +HourlyUsageAttributionUsageType.VULN_MANAGEMENT_HOSTS_USAGE = HourlyUsageAttributionUsageType("vuln_management_hosts_usage") +HourlyUsageAttributionUsageType.WORKFLOW_EXECUTIONS_USAGE = HourlyUsageAttributionUsageType("workflow_executions_usage") diff --git a/datadog_api_client/v1/model/http_log.py b/datadog_api_client/v1/model/http_log.py new file mode 100644 index 0000000000..99de1d9fe5 --- /dev/null +++ b/datadog_api_client/v1/model/http_log.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPLog(ModelSimple): + """ + Structured log message. + + + :type value: [HTTPLogItem] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.http_log_item import HTTPLogItem + return { + "value": ([HTTPLogItem],), + } diff --git a/datadog_api_client/v1/model/http_log_error.py b/datadog_api_client/v1/model/http_log_error.py new file mode 100644 index 0000000000..c13e26c290 --- /dev/null +++ b/datadog_api_client/v1/model/http_log_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPLogError(ModelNormal): + validations = { + "code": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "code": (int,), + "message": (str,), + } + attribute_map = { + "code": "code", + "message": "message", + } + + def __init__(self_, code: int, message: str, **kwargs): + """ + Invalid query performed. + + :param code: Error code. + :type code: int + + :param message: Error message. + :type message: str + """ + super().__init__(kwargs) + + + self_.code = code + self_.message = message diff --git a/datadog_api_client/v1/model/http_log_item.py b/datadog_api_client/v1/model/http_log_item.py new file mode 100644 index 0000000000..d42939a404 --- /dev/null +++ b/datadog_api_client/v1/model/http_log_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPLogItem(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + @cached_property + def openapi_types(_): + return { + "ddsource": (str,), + "ddtags": (str,), + "hostname": (str,), + "message": (str,), + "service": (str,), + } + attribute_map = { + "ddsource": "ddsource", + "ddtags": "ddtags", + "hostname": "hostname", + "message": "message", + "service": "service", + } + + def __init__(self_, message: str, ddsource: Union[str, UnsetType]=unset, ddtags: Union[str, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, **kwargs): + """ + Logs that are sent over HTTP. + + :param ddsource: The integration name associated with your log: the technology from which the log originated. + When it matches an integration name, Datadog automatically installs the corresponding parsers and facets. + See `reserved attributes `_. + :type ddsource: str, optional + + :param ddtags: Tags associated with your logs. + :type ddtags: str, optional + + :param hostname: The name of the originating host of the log. + :type hostname: str, optional + + :param message: The message `reserved attribute `_ + of your log. By default, Datadog ingests the value of the message attribute as the body of the log entry. + That value is then highlighted and displayed in the Logstream, where it is indexed for full text search. + :type message: str + + :param service: The name of the application or service generating the log events. + It is used to switch from Logs to APM, so make sure you define the same value when you use both products. + See `reserved attributes `_. + :type service: str, optional + """ + if ddsource is not unset: + kwargs["ddsource"] = ddsource + if ddtags is not unset: + kwargs["ddtags"] = ddtags + if hostname is not unset: + kwargs["hostname"] = hostname + if service is not unset: + kwargs["service"] = service + super().__init__(kwargs) + + + self_.message = message diff --git a/datadog_api_client/v1/model/i_frame_widget_definition.py b/datadog_api_client/v1/model/i_frame_widget_definition.py new file mode 100644 index 0000000000..b237adbb29 --- /dev/null +++ b/datadog_api_client/v1/model/i_frame_widget_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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.i_frame_widget_definition_type import IFrameWidgetDefinitionType + +class IFrameWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.i_frame_widget_definition_type import IFrameWidgetDefinitionType + return { + "type": (IFrameWidgetDefinitionType,), + "url": (str,), + } + attribute_map = { + "type": "type", + "url": "url", + } + + def __init__(self_, type: IFrameWidgetDefinitionType, url: str, **kwargs): + """ + The iframe widget allows you to embed a portion of any other web page on your dashboard. + + :param type: Type of the iframe widget. + :type type: IFrameWidgetDefinitionType + + :param url: URL of the iframe. + :type url: str + """ + super().__init__(kwargs) + + + self_.type = type + self_.url = url diff --git a/datadog_api_client/v1/model/i_frame_widget_definition_type.py b/datadog_api_client/v1/model/i_frame_widget_definition_type.py new file mode 100644 index 0000000000..30fc513e9d --- /dev/null +++ b/datadog_api_client/v1/model/i_frame_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IFrameWidgetDefinitionType(ModelSimple): + """ + Type of the iframe widget. + + :param value: If omitted defaults to "iframe". Must be one of ["iframe"]. + :type value: str + """ + + allowed_values = { + "iframe", + } + IFRAME: ClassVar["IFrameWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IFrameWidgetDefinitionType.IFRAME = IFrameWidgetDefinitionType("iframe") diff --git a/datadog_api_client/v1/model/idp_form_data.py b/datadog_api_client/v1/model/idp_form_data.py new file mode 100644 index 0000000000..b41207ad05 --- /dev/null +++ b/datadog_api_client/v1/model/idp_form_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IdpFormData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "idp_file": (file_type,), + } + attribute_map = { + "idp_file": "idp_file", + } + + def __init__(self_, idp_file: file_type, **kwargs): + """ + Object describing the IdP configuration. + + :param idp_file: The path to the XML metadata file you wish to upload. + :type idp_file: file_type + """ + super().__init__(kwargs) + + + self_.idp_file = idp_file diff --git a/datadog_api_client/v1/model/idp_response.py b/datadog_api_client/v1/model/idp_response.py new file mode 100644 index 0000000000..5015a67d43 --- /dev/null +++ b/datadog_api_client/v1/model/idp_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IdpResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": (str,), + } + attribute_map = { + "message": "message", + } + + def __init__(self_, message: str, **kwargs): + """ + The IdP response object. + + :param message: Identity provider response. + :type message: str + """ + super().__init__(kwargs) + + + self_.message = message diff --git a/datadog_api_client/v1/model/image_widget_definition.py b/datadog_api_client/v1/model/image_widget_definition.py new file mode 100644 index 0000000000..4f37a61f3c --- /dev/null +++ b/datadog_api_client/v1/model/image_widget_definition.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_horizontal_align import WidgetHorizontalAlign + from datadog_api_client.v1.model.widget_margin import WidgetMargin + from datadog_api_client.v1.model.widget_image_sizing import WidgetImageSizing + from datadog_api_client.v1.model.image_widget_definition_type import ImageWidgetDefinitionType + from datadog_api_client.v1.model.widget_vertical_align import WidgetVerticalAlign + +class ImageWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_horizontal_align import WidgetHorizontalAlign + from datadog_api_client.v1.model.widget_margin import WidgetMargin + from datadog_api_client.v1.model.widget_image_sizing import WidgetImageSizing + from datadog_api_client.v1.model.image_widget_definition_type import ImageWidgetDefinitionType + from datadog_api_client.v1.model.widget_vertical_align import WidgetVerticalAlign + return { + "has_background": (bool,), + "has_border": (bool,), + "horizontal_align": (WidgetHorizontalAlign,), + "margin": (WidgetMargin,), + "sizing": (WidgetImageSizing,), + "type": (ImageWidgetDefinitionType,), + "url": (str,), + "url_dark_theme": (str,), + "vertical_align": (WidgetVerticalAlign,), + } + attribute_map = { + "has_background": "has_background", + "has_border": "has_border", + "horizontal_align": "horizontal_align", + "margin": "margin", + "sizing": "sizing", + "type": "type", + "url": "url", + "url_dark_theme": "url_dark_theme", + "vertical_align": "vertical_align", + } + + def __init__(self_, type: ImageWidgetDefinitionType, url: str, has_background: Union[bool, UnsetType]=unset, has_border: Union[bool, UnsetType]=unset, horizontal_align: Union[WidgetHorizontalAlign, UnsetType]=unset, margin: Union[WidgetMargin, UnsetType]=unset, sizing: Union[WidgetImageSizing, UnsetType]=unset, url_dark_theme: Union[str, UnsetType]=unset, vertical_align: Union[WidgetVerticalAlign, UnsetType]=unset, **kwargs): + """ + The image widget allows you to embed an image on your dashboard. An image can be a PNG, JPG, or animated GIF. + + :param has_background: Whether to display a background or not. + :type has_background: bool, optional + + :param has_border: Whether to display a border or not. + :type has_border: bool, optional + + :param horizontal_align: Horizontal alignment. + :type horizontal_align: WidgetHorizontalAlign, optional + + :param margin: Size of the margins around the image. + **Note** : ``small`` and ``large`` values are deprecated. + :type margin: WidgetMargin, optional + + :param sizing: How to size the image on the widget. The values are based on the image ``object-fit`` CSS properties. + **Note** : ``zoom`` , ``fit`` and ``center`` values are deprecated. + :type sizing: WidgetImageSizing, optional + + :param type: Type of the image widget. + :type type: ImageWidgetDefinitionType + + :param url: URL of the image. + :type url: str + + :param url_dark_theme: URL of the image in dark mode. + :type url_dark_theme: str, optional + + :param vertical_align: Vertical alignment. + :type vertical_align: WidgetVerticalAlign, optional + """ + if has_background is not unset: + kwargs["has_background"] = has_background + if has_border is not unset: + kwargs["has_border"] = has_border + if horizontal_align is not unset: + kwargs["horizontal_align"] = horizontal_align + if margin is not unset: + kwargs["margin"] = margin + if sizing is not unset: + kwargs["sizing"] = sizing + if url_dark_theme is not unset: + kwargs["url_dark_theme"] = url_dark_theme + if vertical_align is not unset: + kwargs["vertical_align"] = vertical_align + super().__init__(kwargs) + + + self_.type = type + self_.url = url diff --git a/datadog_api_client/v1/model/image_widget_definition_type.py b/datadog_api_client/v1/model/image_widget_definition_type.py new file mode 100644 index 0000000000..618c79c0fb --- /dev/null +++ b/datadog_api_client/v1/model/image_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ImageWidgetDefinitionType(ModelSimple): + """ + Type of the image widget. + + :param value: If omitted defaults to "image". Must be one of ["image"]. + :type value: str + """ + + allowed_values = { + "image", + } + IMAGE: ClassVar["ImageWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ImageWidgetDefinitionType.IMAGE = ImageWidgetDefinitionType("image") diff --git a/datadog_api_client/v1/model/intake_payload_accepted.py b/datadog_api_client/v1/model/intake_payload_accepted.py new file mode 100644 index 0000000000..60fcac7c91 --- /dev/null +++ b/datadog_api_client/v1/model/intake_payload_accepted.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntakePayloadAccepted(ModelNormal): + @cached_property + def openapi_types(_): + return { + "status": (str,), + } + attribute_map = { + "status": "status", + } + + def __init__(self_, status: Union[str, UnsetType]=unset, **kwargs): + """ + The payload accepted for intake. + + :param status: The status of the intake payload. + :type status: str, optional + """ + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_agents.py b/datadog_api_client/v1/model/ip_prefixes_agents.py new file mode 100644 index 0000000000..3c886f3c22 --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_agents.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesAgents(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for the Agent endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_api.py b/datadog_api_client/v1/model/ip_prefixes_api.py new file mode 100644 index 0000000000..e1948426f0 --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_api.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesAPI(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for the API endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_apm.py b/datadog_api_client/v1/model/ip_prefixes_apm.py new file mode 100644 index 0000000000..24e9f70fc4 --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_apm.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesAPM(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for the APM endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_global.py b/datadog_api_client/v1/model/ip_prefixes_global.py new file mode 100644 index 0000000000..136085cc3f --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_global.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesGlobal(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for all Datadog endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_logs.py b/datadog_api_client/v1/model/ip_prefixes_logs.py new file mode 100644 index 0000000000..778f412be3 --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_logs.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesLogs(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for the Logs endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_orchestrator.py b/datadog_api_client/v1/model/ip_prefixes_orchestrator.py new file mode 100644 index 0000000000..dc3b0562e3 --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_orchestrator.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesOrchestrator(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for the Orchestrator endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_process.py b/datadog_api_client/v1/model/ip_prefixes_process.py new file mode 100644 index 0000000000..fcfec4bdce --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_process.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesProcess(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for the Process endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_remote_configuration.py b/datadog_api_client/v1/model/ip_prefixes_remote_configuration.py new file mode 100644 index 0000000000..64aea90a7b --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_remote_configuration.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesRemoteConfiguration(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for the Remote Configuration endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_synthetics.py b/datadog_api_client/v1/model/ip_prefixes_synthetics.py new file mode 100644 index 0000000000..de66ecff8e --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_synthetics.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesSynthetics(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv4_by_location": ({str: ([str],)},), + "prefixes_ipv6": ([str],), + "prefixes_ipv6_by_location": ({str: ([str],)},), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv4_by_location": "prefixes_ipv4_by_location", + "prefixes_ipv6": "prefixes_ipv6", + "prefixes_ipv6_by_location": "prefixes_ipv6_by_location", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv4_by_location: Union[Dict[str, List[str]], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, prefixes_ipv6_by_location: Union[Dict[str, List[str]], UnsetType]=unset, **kwargs): + """ + Available prefix information for the Synthetics endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv4_by_location: List of IPv4 prefixes by location. + :type prefixes_ipv4_by_location: {str: ([str],)}, optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + + :param prefixes_ipv6_by_location: List of IPv6 prefixes by location. + :type prefixes_ipv6_by_location: {str: ([str],)}, optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv4_by_location is not unset: + kwargs["prefixes_ipv4_by_location"] = prefixes_ipv4_by_location + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + if prefixes_ipv6_by_location is not unset: + kwargs["prefixes_ipv6_by_location"] = prefixes_ipv6_by_location + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_synthetics_private_locations.py b/datadog_api_client/v1/model/ip_prefixes_synthetics_private_locations.py new file mode 100644 index 0000000000..2de406b24a --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_synthetics_private_locations.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesSyntheticsPrivateLocations(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for the Synthetics Private Locations endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_prefixes_webhooks.py b/datadog_api_client/v1/model/ip_prefixes_webhooks.py new file mode 100644 index 0000000000..4d198342b2 --- /dev/null +++ b/datadog_api_client/v1/model/ip_prefixes_webhooks.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPPrefixesWebhooks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "prefixes_ipv4": ([str],), + "prefixes_ipv6": ([str],), + } + attribute_map = { + "prefixes_ipv4": "prefixes_ipv4", + "prefixes_ipv6": "prefixes_ipv6", + } + + def __init__(self_, prefixes_ipv4: Union[List[str], UnsetType]=unset, prefixes_ipv6: Union[List[str], UnsetType]=unset, **kwargs): + """ + Available prefix information for the Webhook endpoints. + + :param prefixes_ipv4: List of IPv4 prefixes. + :type prefixes_ipv4: [str], optional + + :param prefixes_ipv6: List of IPv6 prefixes. + :type prefixes_ipv6: [str], optional + """ + if prefixes_ipv4 is not unset: + kwargs["prefixes_ipv4"] = prefixes_ipv4 + if prefixes_ipv6 is not unset: + kwargs["prefixes_ipv6"] = prefixes_ipv6 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/ip_ranges.py b/datadog_api_client/v1/model/ip_ranges.py new file mode 100644 index 0000000000..f6752b8b18 --- /dev/null +++ b/datadog_api_client/v1/model/ip_ranges.py @@ -0,0 +1,153 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.ip_prefixes_agents import IPPrefixesAgents + from datadog_api_client.v1.model.ip_prefixes_api import IPPrefixesAPI + from datadog_api_client.v1.model.ip_prefixes_apm import IPPrefixesAPM + from datadog_api_client.v1.model.ip_prefixes_global import IPPrefixesGlobal + from datadog_api_client.v1.model.ip_prefixes_logs import IPPrefixesLogs + from datadog_api_client.v1.model.ip_prefixes_orchestrator import IPPrefixesOrchestrator + from datadog_api_client.v1.model.ip_prefixes_process import IPPrefixesProcess + from datadog_api_client.v1.model.ip_prefixes_remote_configuration import IPPrefixesRemoteConfiguration + from datadog_api_client.v1.model.ip_prefixes_synthetics import IPPrefixesSynthetics + from datadog_api_client.v1.model.ip_prefixes_synthetics_private_locations import IPPrefixesSyntheticsPrivateLocations + from datadog_api_client.v1.model.ip_prefixes_webhooks import IPPrefixesWebhooks + +class IPRanges(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.ip_prefixes_agents import IPPrefixesAgents + from datadog_api_client.v1.model.ip_prefixes_api import IPPrefixesAPI + from datadog_api_client.v1.model.ip_prefixes_apm import IPPrefixesAPM + from datadog_api_client.v1.model.ip_prefixes_global import IPPrefixesGlobal + from datadog_api_client.v1.model.ip_prefixes_logs import IPPrefixesLogs + from datadog_api_client.v1.model.ip_prefixes_orchestrator import IPPrefixesOrchestrator + from datadog_api_client.v1.model.ip_prefixes_process import IPPrefixesProcess + from datadog_api_client.v1.model.ip_prefixes_remote_configuration import IPPrefixesRemoteConfiguration + from datadog_api_client.v1.model.ip_prefixes_synthetics import IPPrefixesSynthetics + from datadog_api_client.v1.model.ip_prefixes_synthetics_private_locations import IPPrefixesSyntheticsPrivateLocations + from datadog_api_client.v1.model.ip_prefixes_webhooks import IPPrefixesWebhooks + return { + "agents": (IPPrefixesAgents,), + "api": (IPPrefixesAPI,), + "apm": (IPPrefixesAPM,), + "_global": (IPPrefixesGlobal,), + "logs": (IPPrefixesLogs,), + "modified": (str,), + "orchestrator": (IPPrefixesOrchestrator,), + "process": (IPPrefixesProcess,), + "remote_configuration": (IPPrefixesRemoteConfiguration,), + "synthetics": (IPPrefixesSynthetics,), + "synthetics_private_locations": (IPPrefixesSyntheticsPrivateLocations,), + "version": (int,), + "webhooks": (IPPrefixesWebhooks,), + } + attribute_map = { + "agents": "agents", + "api": "api", + "apm": "apm", + "_global": "global", + "logs": "logs", + "modified": "modified", + "orchestrator": "orchestrator", + "process": "process", + "remote_configuration": "remote-configuration", + "synthetics": "synthetics", + "synthetics_private_locations": "synthetics-private-locations", + "version": "version", + "webhooks": "webhooks", + } + + def __init__(self_, agents: Union[IPPrefixesAgents, UnsetType]=unset, api: Union[IPPrefixesAPI, UnsetType]=unset, apm: Union[IPPrefixesAPM, UnsetType]=unset, _global: Union[IPPrefixesGlobal, UnsetType]=unset, logs: Union[IPPrefixesLogs, UnsetType]=unset, modified: Union[str, UnsetType]=unset, orchestrator: Union[IPPrefixesOrchestrator, UnsetType]=unset, process: Union[IPPrefixesProcess, UnsetType]=unset, remote_configuration: Union[IPPrefixesRemoteConfiguration, UnsetType]=unset, synthetics: Union[IPPrefixesSynthetics, UnsetType]=unset, synthetics_private_locations: Union[IPPrefixesSyntheticsPrivateLocations, UnsetType]=unset, version: Union[int, UnsetType]=unset, webhooks: Union[IPPrefixesWebhooks, UnsetType]=unset, **kwargs): + """ + IP ranges. + + :param agents: Available prefix information for the Agent endpoints. + :type agents: IPPrefixesAgents, optional + + :param api: Available prefix information for the API endpoints. + :type api: IPPrefixesAPI, optional + + :param apm: Available prefix information for the APM endpoints. + :type apm: IPPrefixesAPM, optional + + :param _global: Available prefix information for all Datadog endpoints. + :type _global: IPPrefixesGlobal, optional + + :param logs: Available prefix information for the Logs endpoints. + :type logs: IPPrefixesLogs, optional + + :param modified: Date when last updated, in the form ``YYYY-MM-DD-hh-mm-ss``. + :type modified: str, optional + + :param orchestrator: Available prefix information for the Orchestrator endpoints. + :type orchestrator: IPPrefixesOrchestrator, optional + + :param process: Available prefix information for the Process endpoints. + :type process: IPPrefixesProcess, optional + + :param remote_configuration: Available prefix information for the Remote Configuration endpoints. + :type remote_configuration: IPPrefixesRemoteConfiguration, optional + + :param synthetics: Available prefix information for the Synthetics endpoints. + :type synthetics: IPPrefixesSynthetics, optional + + :param synthetics_private_locations: Available prefix information for the Synthetics Private Locations endpoints. + :type synthetics_private_locations: IPPrefixesSyntheticsPrivateLocations, optional + + :param version: Version of the IP list. + :type version: int, optional + + :param webhooks: Available prefix information for the Webhook endpoints. + :type webhooks: IPPrefixesWebhooks, optional + """ + if agents is not unset: + kwargs["agents"] = agents + if api is not unset: + kwargs["api"] = api + if apm is not unset: + kwargs["apm"] = apm + if _global is not unset: + kwargs["_global"] = _global + if logs is not unset: + kwargs["logs"] = logs + if modified is not unset: + kwargs["modified"] = modified + if orchestrator is not unset: + kwargs["orchestrator"] = orchestrator + if process is not unset: + kwargs["process"] = process + if remote_configuration is not unset: + kwargs["remote_configuration"] = remote_configuration + if synthetics is not unset: + kwargs["synthetics"] = synthetics + if synthetics_private_locations is not unset: + kwargs["synthetics_private_locations"] = synthetics_private_locations + if version is not unset: + kwargs["version"] = version + if webhooks is not unset: + kwargs["webhooks"] = webhooks + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/list_stream_column.py b/datadog_api_client/v1/model/list_stream_column.py new file mode 100644 index 0000000000..36d19e57c6 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_column.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.list_stream_column_width import ListStreamColumnWidth + +class ListStreamColumn(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.list_stream_column_width import ListStreamColumnWidth + return { + "field": (str,), + "width": (ListStreamColumnWidth,), + } + attribute_map = { + "field": "field", + "width": "width", + } + + def __init__(self_, field: str, width: ListStreamColumnWidth, **kwargs): + """ + Widget column. + + :param field: Widget column field. + :type field: str + + :param width: Widget column width. + :type width: ListStreamColumnWidth + """ + super().__init__(kwargs) + + + self_.field = field + self_.width = width diff --git a/datadog_api_client/v1/model/list_stream_column_width.py b/datadog_api_client/v1/model/list_stream_column_width.py new file mode 100644 index 0000000000..bcdc475352 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_column_width.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListStreamColumnWidth(ModelSimple): + """ + Widget column width. + + :param value: Must be one of ["auto", "compact", "full"]. + :type value: str + """ + + allowed_values = { + "auto", + "compact", + "full", + } + AUTO: ClassVar["ListStreamColumnWidth"] + COMPACT: ClassVar["ListStreamColumnWidth"] + FULL: ClassVar["ListStreamColumnWidth"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListStreamColumnWidth.AUTO = ListStreamColumnWidth("auto") +ListStreamColumnWidth.COMPACT = ListStreamColumnWidth("compact") +ListStreamColumnWidth.FULL = ListStreamColumnWidth("full") diff --git a/datadog_api_client/v1/model/list_stream_compute_aggregation.py b/datadog_api_client/v1/model/list_stream_compute_aggregation.py new file mode 100644 index 0000000000..32f09dbc11 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_compute_aggregation.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListStreamComputeAggregation(ModelSimple): + """ + Aggregation value. + + :param value: Must be one of ["count", "cardinality", "median", "pc75", "pc90", "pc95", "pc98", "pc99", "sum", "min", "max", "avg", "earliest", "latest", "most_frequent"]. + :type value: str + """ + + allowed_values = { + "count", + "cardinality", + "median", + "pc75", + "pc90", + "pc95", + "pc98", + "pc99", + "sum", + "min", + "max", + "avg", + "earliest", + "latest", + "most_frequent", + } + COUNT: ClassVar["ListStreamComputeAggregation"] + CARDINALITY: ClassVar["ListStreamComputeAggregation"] + MEDIAN: ClassVar["ListStreamComputeAggregation"] + PC75: ClassVar["ListStreamComputeAggregation"] + PC90: ClassVar["ListStreamComputeAggregation"] + PC95: ClassVar["ListStreamComputeAggregation"] + PC98: ClassVar["ListStreamComputeAggregation"] + PC99: ClassVar["ListStreamComputeAggregation"] + SUM: ClassVar["ListStreamComputeAggregation"] + MIN: ClassVar["ListStreamComputeAggregation"] + MAX: ClassVar["ListStreamComputeAggregation"] + AVG: ClassVar["ListStreamComputeAggregation"] + EARLIEST: ClassVar["ListStreamComputeAggregation"] + LATEST: ClassVar["ListStreamComputeAggregation"] + MOST_FREQUENT: ClassVar["ListStreamComputeAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListStreamComputeAggregation.COUNT = ListStreamComputeAggregation("count") +ListStreamComputeAggregation.CARDINALITY = ListStreamComputeAggregation("cardinality") +ListStreamComputeAggregation.MEDIAN = ListStreamComputeAggregation("median") +ListStreamComputeAggregation.PC75 = ListStreamComputeAggregation("pc75") +ListStreamComputeAggregation.PC90 = ListStreamComputeAggregation("pc90") +ListStreamComputeAggregation.PC95 = ListStreamComputeAggregation("pc95") +ListStreamComputeAggregation.PC98 = ListStreamComputeAggregation("pc98") +ListStreamComputeAggregation.PC99 = ListStreamComputeAggregation("pc99") +ListStreamComputeAggregation.SUM = ListStreamComputeAggregation("sum") +ListStreamComputeAggregation.MIN = ListStreamComputeAggregation("min") +ListStreamComputeAggregation.MAX = ListStreamComputeAggregation("max") +ListStreamComputeAggregation.AVG = ListStreamComputeAggregation("avg") +ListStreamComputeAggregation.EARLIEST = ListStreamComputeAggregation("earliest") +ListStreamComputeAggregation.LATEST = ListStreamComputeAggregation("latest") +ListStreamComputeAggregation.MOST_FREQUENT = ListStreamComputeAggregation("most_frequent") diff --git a/datadog_api_client/v1/model/list_stream_compute_items.py b/datadog_api_client/v1/model/list_stream_compute_items.py new file mode 100644 index 0000000000..4b780cd464 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_compute_items.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.list_stream_compute_aggregation import ListStreamComputeAggregation + +class ListStreamComputeItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.list_stream_compute_aggregation import ListStreamComputeAggregation + return { + "aggregation": (ListStreamComputeAggregation,), + "facet": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "facet": "facet", + } + + def __init__(self_, aggregation: ListStreamComputeAggregation, facet: Union[str, UnsetType]=unset, **kwargs): + """ + List of facets and aggregations which to compute. + + :param aggregation: Aggregation value. + :type aggregation: ListStreamComputeAggregation + + :param facet: Facet name. + :type facet: str, optional + """ + if facet is not unset: + kwargs["facet"] = facet + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v1/model/list_stream_group_by_items.py b/datadog_api_client/v1/model/list_stream_group_by_items.py new file mode 100644 index 0000000000..b22c8e6f4c --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_group_by_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListStreamGroupByItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "facet": (str,), + } + attribute_map = { + "facet": "facet", + } + + def __init__(self_, facet: str, **kwargs): + """ + List of facets on which to group. + + :param facet: Facet name. + :type facet: str + """ + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v1/model/list_stream_issue_persona.py b/datadog_api_client/v1/model/list_stream_issue_persona.py new file mode 100644 index 0000000000..9c876d3d38 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_issue_persona.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListStreamIssuePersona(ModelSimple): + """ + Persona filter for the `issue_stream` data source. + + :param value: Must be one of ["all", "browser", "mobile", "backend"]. + :type value: str + """ + + allowed_values = { + "all", + "browser", + "mobile", + "backend", + } + ALL: ClassVar["ListStreamIssuePersona"] + BROWSER: ClassVar["ListStreamIssuePersona"] + MOBILE: ClassVar["ListStreamIssuePersona"] + BACKEND: ClassVar["ListStreamIssuePersona"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListStreamIssuePersona.ALL = ListStreamIssuePersona("all") +ListStreamIssuePersona.BROWSER = ListStreamIssuePersona("browser") +ListStreamIssuePersona.MOBILE = ListStreamIssuePersona("mobile") +ListStreamIssuePersona.BACKEND = ListStreamIssuePersona("backend") diff --git a/datadog_api_client/v1/model/list_stream_issue_state.py b/datadog_api_client/v1/model/list_stream_issue_state.py new file mode 100644 index 0000000000..53c34a4264 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_issue_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListStreamIssueState(ModelSimple): + """ + Issue state filter for the `issue_stream` data source. + + :param value: Must be one of ["OPEN", "IGNORED", "ACKNOWLEDGED", "RESOLVED"]. + :type value: str + """ + + allowed_values = { + "OPEN", + "IGNORED", + "ACKNOWLEDGED", + "RESOLVED", + } + OPEN: ClassVar["ListStreamIssueState"] + IGNORED: ClassVar["ListStreamIssueState"] + ACKNOWLEDGED: ClassVar["ListStreamIssueState"] + RESOLVED: ClassVar["ListStreamIssueState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListStreamIssueState.OPEN = ListStreamIssueState("OPEN") +ListStreamIssueState.IGNORED = ListStreamIssueState("IGNORED") +ListStreamIssueState.ACKNOWLEDGED = ListStreamIssueState("ACKNOWLEDGED") +ListStreamIssueState.RESOLVED = ListStreamIssueState("RESOLVED") diff --git a/datadog_api_client/v1/model/list_stream_query.py b/datadog_api_client/v1/model/list_stream_query.py new file mode 100644 index 0000000000..785acd8471 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_query.py @@ -0,0 +1,169 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.list_stream_compute_items import ListStreamComputeItems + from datadog_api_client.v1.model.list_stream_source import ListStreamSource + from datadog_api_client.v1.model.widget_event_size import WidgetEventSize + from datadog_api_client.v1.model.list_stream_group_by_items import ListStreamGroupByItems + from datadog_api_client.v1.model.list_stream_issue_persona import ListStreamIssuePersona + from datadog_api_client.v1.model.widget_field_sort import WidgetFieldSort + from datadog_api_client.v1.model.list_stream_issue_state import ListStreamIssueState + from datadog_api_client.v1.model.list_stream_query_version import ListStreamQueryVersion + +class ListStreamQuery(ModelNormal): + validations = { + "compute": { + "max_items": 5, + "min_items": 1, + }, + "group_by": { + "max_items": 4, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.list_stream_compute_items import ListStreamComputeItems + from datadog_api_client.v1.model.list_stream_source import ListStreamSource + from datadog_api_client.v1.model.widget_event_size import WidgetEventSize + from datadog_api_client.v1.model.list_stream_group_by_items import ListStreamGroupByItems + from datadog_api_client.v1.model.list_stream_issue_persona import ListStreamIssuePersona + from datadog_api_client.v1.model.widget_field_sort import WidgetFieldSort + from datadog_api_client.v1.model.list_stream_issue_state import ListStreamIssueState + from datadog_api_client.v1.model.list_stream_query_version import ListStreamQueryVersion + return { + "assignee_uuids": ([str],), + "clustering_pattern_field_path": (str,), + "compute": ([ListStreamComputeItems],), + "data_source": (ListStreamSource,), + "event_size": (WidgetEventSize,), + "group_by": ([ListStreamGroupByItems],), + "indexes": ([str],), + "persona": (ListStreamIssuePersona,), + "query_string": (str,), + "sort": (WidgetFieldSort,), + "states": ([ListStreamIssueState],), + "storage": (str,), + "suspected_causes": ([str],), + "team_handles": ([str],), + "version": (ListStreamQueryVersion,), + } + attribute_map = { + "assignee_uuids": "assignee_uuids", + "clustering_pattern_field_path": "clustering_pattern_field_path", + "compute": "compute", + "data_source": "data_source", + "event_size": "event_size", + "group_by": "group_by", + "indexes": "indexes", + "persona": "persona", + "query_string": "query_string", + "sort": "sort", + "states": "states", + "storage": "storage", + "suspected_causes": "suspected_causes", + "team_handles": "team_handles", + "version": "version", + } + + def __init__(self_, data_source: ListStreamSource, query_string: str, assignee_uuids: Union[List[str], UnsetType]=unset, clustering_pattern_field_path: Union[str, UnsetType]=unset, compute: Union[List[ListStreamComputeItems], UnsetType]=unset, event_size: Union[WidgetEventSize, UnsetType]=unset, group_by: Union[List[ListStreamGroupByItems], UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, persona: Union[ListStreamIssuePersona, UnsetType]=unset, sort: Union[WidgetFieldSort, UnsetType]=unset, states: Union[List[ListStreamIssueState], UnsetType]=unset, storage: Union[str, UnsetType]=unset, suspected_causes: Union[List[str], UnsetType]=unset, team_handles: Union[List[str], UnsetType]=unset, version: Union[ListStreamQueryVersion, UnsetType]=unset, **kwargs): + """ + Updated list stream widget. + + :param assignee_uuids: Filter by assignee UUIDs. Usable only with ``issue_stream``. + :type assignee_uuids: [str], optional + + :param clustering_pattern_field_path: Specifies the field for logs pattern clustering. Usable only with logs_pattern_stream. + :type clustering_pattern_field_path: str, optional + + :param compute: Compute configuration for the List Stream Widget. Compute can be used only with the logs_transaction_stream (from 1 to 5 items) list stream source. + :type compute: [ListStreamComputeItems], optional + + :param data_source: Source from which to query items to display in the stream. apm_issue_stream, rum_issue_stream, and logs_issue_stream are deprecated. Use issue_stream instead. + :type data_source: ListStreamSource + + :param event_size: Size to use to display an event. + :type event_size: WidgetEventSize, optional + + :param group_by: Group by configuration for the List Stream Widget. Group by can be used only with logs_pattern_stream (up to 4 items) or logs_transaction_stream (one group by item is required) list stream source. + :type group_by: [ListStreamGroupByItems], optional + + :param indexes: List of indexes. + :type indexes: [str], optional + + :param persona: Persona filter for the ``issue_stream`` data source. + :type persona: ListStreamIssuePersona, optional + + :param query_string: Widget query. + :type query_string: str + + :param sort: Which column and order to sort by + :type sort: WidgetFieldSort, optional + + :param states: Filter by issue states. Usable only with ``issue_stream``. + :type states: [ListStreamIssueState], optional + + :param storage: Option for storage location. Feature in Private Beta. + :type storage: str, optional + + :param suspected_causes: Filter by suspected causes. Usable only with ``issue_stream``. + :type suspected_causes: [str], optional + + :param team_handles: Filter by team handles. Usable only with ``issue_stream``. + :type team_handles: [str], optional + + :param version: Version of the query for the logs transaction stream widget. When omitted, v1 query behavior is + preserved. Set to ``sequential_query`` to use v2 behavior. **This feature is in Preview.** + :type version: ListStreamQueryVersion, optional + """ + if assignee_uuids is not unset: + kwargs["assignee_uuids"] = assignee_uuids + if clustering_pattern_field_path is not unset: + kwargs["clustering_pattern_field_path"] = clustering_pattern_field_path + if compute is not unset: + kwargs["compute"] = compute + if event_size is not unset: + kwargs["event_size"] = event_size + if group_by is not unset: + kwargs["group_by"] = group_by + if indexes is not unset: + kwargs["indexes"] = indexes + if persona is not unset: + kwargs["persona"] = persona + if sort is not unset: + kwargs["sort"] = sort + if states is not unset: + kwargs["states"] = states + if storage is not unset: + kwargs["storage"] = storage + if suspected_causes is not unset: + kwargs["suspected_causes"] = suspected_causes + if team_handles is not unset: + kwargs["team_handles"] = team_handles + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.data_source = data_source + self_.query_string = query_string diff --git a/datadog_api_client/v1/model/list_stream_query_version.py b/datadog_api_client/v1/model/list_stream_query_version.py new file mode 100644 index 0000000000..4f62a9ce09 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_query_version.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListStreamQueryVersion(ModelSimple): + """ + Version of the query for the logs transaction stream widget. When omitted, v1 query behavior is + preserved. Set to `sequential_query` to use v2 behavior. **This feature is in Preview.** + + :param value: If omitted defaults to "sequential_query". Must be one of ["sequential_query"]. + :type value: str + """ + + allowed_values = { + "sequential_query", + } + SEQUENTIAL_QUERY: ClassVar["ListStreamQueryVersion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListStreamQueryVersion.SEQUENTIAL_QUERY = ListStreamQueryVersion("sequential_query") diff --git a/datadog_api_client/v1/model/list_stream_response_format.py b/datadog_api_client/v1/model/list_stream_response_format.py new file mode 100644 index 0000000000..30692db162 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_response_format.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListStreamResponseFormat(ModelSimple): + """ + Widget response format. + + :param value: If omitted defaults to "event_list". Must be one of ["event_list"]. + :type value: str + """ + + allowed_values = { + "event_list", + } + EVENT_LIST: ClassVar["ListStreamResponseFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListStreamResponseFormat.EVENT_LIST = ListStreamResponseFormat("event_list") diff --git a/datadog_api_client/v1/model/list_stream_source.py b/datadog_api_client/v1/model/list_stream_source.py new file mode 100644 index 0000000000..9cdb99475d --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_source.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListStreamSource(ModelSimple): + """ + Source from which to query items to display in the stream. apm_issue_stream, rum_issue_stream, and logs_issue_stream are deprecated. Use issue_stream instead. + + :param value: If omitted defaults to "logs_stream". Must be one of ["logs_stream", "audit_stream", "ci_pipeline_stream", "ci_test_stream", "rum_issue_stream", "apm_issue_stream", "trace_stream", "logs_issue_stream", "logs_pattern_stream", "logs_transaction_stream", "event_stream", "rum_stream", "llm_observability_stream", "issue_stream", "security_runtime_stream", "security_signals_stream", "incidents_stream"]. + :type value: str + """ + + allowed_values = { + "logs_stream", + "audit_stream", + "ci_pipeline_stream", + "ci_test_stream", + "rum_issue_stream", + "apm_issue_stream", + "trace_stream", + "logs_issue_stream", + "logs_pattern_stream", + "logs_transaction_stream", + "event_stream", + "rum_stream", + "llm_observability_stream", + "issue_stream", + "security_runtime_stream", + "security_signals_stream", + "incidents_stream", + } + LOGS_STREAM: ClassVar["ListStreamSource"] + AUDIT_STREAM: ClassVar["ListStreamSource"] + CI_PIPELINE_STREAM: ClassVar["ListStreamSource"] + CI_TEST_STREAM: ClassVar["ListStreamSource"] + RUM_ISSUE_STREAM: ClassVar["ListStreamSource"] + APM_ISSUE_STREAM: ClassVar["ListStreamSource"] + TRACE_STREAM: ClassVar["ListStreamSource"] + LOGS_ISSUE_STREAM: ClassVar["ListStreamSource"] + LOGS_PATTERN_STREAM: ClassVar["ListStreamSource"] + LOGS_TRANSACTION_STREAM: ClassVar["ListStreamSource"] + EVENT_STREAM: ClassVar["ListStreamSource"] + RUM_STREAM: ClassVar["ListStreamSource"] + LLM_OBSERVABILITY_STREAM: ClassVar["ListStreamSource"] + ISSUE_STREAM: ClassVar["ListStreamSource"] + SECURITY_RUNTIME_STREAM: ClassVar["ListStreamSource"] + SECURITY_SIGNALS_STREAM: ClassVar["ListStreamSource"] + INCIDENTS_STREAM: ClassVar["ListStreamSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListStreamSource.LOGS_STREAM = ListStreamSource("logs_stream") +ListStreamSource.AUDIT_STREAM = ListStreamSource("audit_stream") +ListStreamSource.CI_PIPELINE_STREAM = ListStreamSource("ci_pipeline_stream") +ListStreamSource.CI_TEST_STREAM = ListStreamSource("ci_test_stream") +ListStreamSource.RUM_ISSUE_STREAM = ListStreamSource("rum_issue_stream") +ListStreamSource.APM_ISSUE_STREAM = ListStreamSource("apm_issue_stream") +ListStreamSource.TRACE_STREAM = ListStreamSource("trace_stream") +ListStreamSource.LOGS_ISSUE_STREAM = ListStreamSource("logs_issue_stream") +ListStreamSource.LOGS_PATTERN_STREAM = ListStreamSource("logs_pattern_stream") +ListStreamSource.LOGS_TRANSACTION_STREAM = ListStreamSource("logs_transaction_stream") +ListStreamSource.EVENT_STREAM = ListStreamSource("event_stream") +ListStreamSource.RUM_STREAM = ListStreamSource("rum_stream") +ListStreamSource.LLM_OBSERVABILITY_STREAM = ListStreamSource("llm_observability_stream") +ListStreamSource.ISSUE_STREAM = ListStreamSource("issue_stream") +ListStreamSource.SECURITY_RUNTIME_STREAM = ListStreamSource("security_runtime_stream") +ListStreamSource.SECURITY_SIGNALS_STREAM = ListStreamSource("security_signals_stream") +ListStreamSource.INCIDENTS_STREAM = ListStreamSource("incidents_stream") diff --git a/datadog_api_client/v1/model/list_stream_widget_definition.py b/datadog_api_client/v1/model/list_stream_widget_definition.py new file mode 100644 index 0000000000..210aba0833 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_widget_definition.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.list_stream_widget_request import ListStreamWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.list_stream_widget_definition_type import ListStreamWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class ListStreamWidgetDefinition(ModelNormal): + validations = { + "requests": { + "max_items": 1, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.list_stream_widget_request import ListStreamWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.list_stream_widget_definition_type import ListStreamWidgetDefinitionType + return { + "description": (str,), + "legend_size": (str,), + "requests": ([ListStreamWidgetRequest],), + "show_legend": (bool,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (ListStreamWidgetDefinitionType,), + } + attribute_map = { + "description": "description", + "legend_size": "legend_size", + "requests": "requests", + "show_legend": "show_legend", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[ListStreamWidgetRequest], type: ListStreamWidgetDefinitionType, description: Union[str, UnsetType]=unset, legend_size: Union[str, UnsetType]=unset, show_legend: Union[bool, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The list stream visualization displays a table of recent events in your application that + match a search criteria using user-defined columns. + + :param description: The description of the widget. + :type description: str, optional + + :param legend_size: Available legend sizes for a widget. Should be one of "0", "2", "4", "8", "16", or "auto". + :type legend_size: str, optional + + :param requests: Request payload used to query items. + :type requests: [ListStreamWidgetRequest] + + :param show_legend: Whether or not to display the legend on this widget. + :type show_legend: bool, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the list stream widget. + :type type: ListStreamWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if legend_size is not unset: + kwargs["legend_size"] = legend_size + if show_legend is not unset: + kwargs["show_legend"] = show_legend + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/list_stream_widget_definition_type.py b/datadog_api_client/v1/model/list_stream_widget_definition_type.py new file mode 100644 index 0000000000..fa3cdb53cb --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListStreamWidgetDefinitionType(ModelSimple): + """ + Type of the list stream widget. + + :param value: If omitted defaults to "list_stream". Must be one of ["list_stream"]. + :type value: str + """ + + allowed_values = { + "list_stream", + } + LIST_STREAM: ClassVar["ListStreamWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListStreamWidgetDefinitionType.LIST_STREAM = ListStreamWidgetDefinitionType("list_stream") diff --git a/datadog_api_client/v1/model/list_stream_widget_request.py b/datadog_api_client/v1/model/list_stream_widget_request.py new file mode 100644 index 0000000000..77cec5efe2 --- /dev/null +++ b/datadog_api_client/v1/model/list_stream_widget_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.list_stream_column import ListStreamColumn + from datadog_api_client.v1.model.list_stream_query import ListStreamQuery + from datadog_api_client.v1.model.list_stream_response_format import ListStreamResponseFormat + +class ListStreamWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.list_stream_column import ListStreamColumn + from datadog_api_client.v1.model.list_stream_query import ListStreamQuery + from datadog_api_client.v1.model.list_stream_response_format import ListStreamResponseFormat + return { + "columns": ([ListStreamColumn],), + "query": (ListStreamQuery,), + "response_format": (ListStreamResponseFormat,), + } + attribute_map = { + "columns": "columns", + "query": "query", + "response_format": "response_format", + } + + def __init__(self_, columns: List[ListStreamColumn], query: ListStreamQuery, response_format: ListStreamResponseFormat, **kwargs): + """ + Updated list stream widget. + + :param columns: Widget columns. + :type columns: [ListStreamColumn] + + :param query: Updated list stream widget. + :type query: ListStreamQuery + + :param response_format: Widget response format. + :type response_format: ListStreamResponseFormat + """ + super().__init__(kwargs) + + + self_.columns = columns + self_.query = query + self_.response_format = response_format diff --git a/datadog_api_client/v1/model/log.py b/datadog_api_client/v1/model/log.py new file mode 100644 index 0000000000..049d0efc31 --- /dev/null +++ b/datadog_api_client/v1/model/log.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_content import LogContent + +class Log(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_content import LogContent + return { + "content": (LogContent,), + "id": (str,), + } + attribute_map = { + "content": "content", + "id": "id", + } + + def __init__(self_, content: Union[LogContent, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Object describing a log after being processed and stored by Datadog. + + :param content: JSON object containing all log attributes and their associated values. + :type content: LogContent, optional + + :param id: ID of the Log. + :type id: str, optional + """ + if content is not unset: + kwargs["content"] = content + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/log_content.py b/datadog_api_client/v1/model/log_content.py new file mode 100644 index 0000000000..afd62d44fe --- /dev/null +++ b/datadog_api_client/v1/model/log_content.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogContent(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "host": (str,), + "message": (str,), + "service": (str,), + "tags": ([str],), + "timestamp": (datetime,), + } + attribute_map = { + "attributes": "attributes", + "host": "host", + "message": "message", + "service": "service", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, host: Union[str, UnsetType]=unset, message: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[datetime, UnsetType]=unset, **kwargs): + """ + JSON object containing all log attributes and their associated values. + + :param attributes: JSON object of attributes from your log. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param host: Name of the machine from where the logs are being sent. + :type host: str, optional + + :param message: The message `reserved attribute `_ + of your log. By default, Datadog ingests the value of the message attribute as the body of the log entry. + That value is then highlighted and displayed in the Logstream, where it is indexed for full text search. + :type message: str, optional + + :param service: The name of the application or service generating the log events. + It is used to switch from Logs to APM, so make sure you define the same + value when you use both products. + :type service: str, optional + + :param tags: Array of tags associated with your log. + :type tags: [str], optional + + :param timestamp: Timestamp of your log. + :type timestamp: datetime, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if host is not unset: + kwargs["host"] = host + if message is not unset: + kwargs["message"] = message + if service is not unset: + kwargs["service"] = service + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/log_query_definition.py b/datadog_api_client/v1/model/log_query_definition.py new file mode 100644 index 0000000000..d5db184400 --- /dev/null +++ b/datadog_api_client/v1/model/log_query_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_query_compute import LogsQueryCompute + from datadog_api_client.v1.model.log_query_definition_group_by import LogQueryDefinitionGroupBy + from datadog_api_client.v1.model.log_query_definition_search import LogQueryDefinitionSearch + +class LogQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_query_compute import LogsQueryCompute + from datadog_api_client.v1.model.log_query_definition_group_by import LogQueryDefinitionGroupBy + from datadog_api_client.v1.model.log_query_definition_search import LogQueryDefinitionSearch + return { + "compute": (LogsQueryCompute,), + "group_by": ([LogQueryDefinitionGroupBy],), + "index": (str,), + "multi_compute": ([LogsQueryCompute],), + "search": (LogQueryDefinitionSearch,), + } + attribute_map = { + "compute": "compute", + "group_by": "group_by", + "index": "index", + "multi_compute": "multi_compute", + "search": "search", + } + + def __init__(self_, compute: Union[LogsQueryCompute, UnsetType]=unset, group_by: Union[List[LogQueryDefinitionGroupBy], UnsetType]=unset, index: Union[str, UnsetType]=unset, multi_compute: Union[List[LogsQueryCompute], UnsetType]=unset, search: Union[LogQueryDefinitionSearch, UnsetType]=unset, **kwargs): + """ + The log query. + + :param compute: Define computation for a log query. + :type compute: LogsQueryCompute, optional + + :param group_by: List of tag prefixes to group by in the case of a cluster check. + :type group_by: [LogQueryDefinitionGroupBy], optional + + :param index: A coma separated-list of index names. Use "*" query all indexes at once. `Multiple Indexes `_ + :type index: str, optional + + :param multi_compute: This field is mutually exclusive with ``compute``. + :type multi_compute: [LogsQueryCompute], optional + + :param search: The query being made on the logs. + :type search: LogQueryDefinitionSearch, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if group_by is not unset: + kwargs["group_by"] = group_by + if index is not unset: + kwargs["index"] = index + if multi_compute is not unset: + kwargs["multi_compute"] = multi_compute + if search is not unset: + kwargs["search"] = search + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/log_query_definition_group_by.py b/datadog_api_client/v1/model/log_query_definition_group_by.py new file mode 100644 index 0000000000..972f91046b --- /dev/null +++ b/datadog_api_client/v1/model/log_query_definition_group_by.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_query_definition_group_by_sort import LogQueryDefinitionGroupBySort + +class LogQueryDefinitionGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_query_definition_group_by_sort import LogQueryDefinitionGroupBySort + return { + "facet": (str,), + "limit": (int,), + "sort": (LogQueryDefinitionGroupBySort,), + } + attribute_map = { + "facet": "facet", + "limit": "limit", + "sort": "sort", + } + + def __init__(self_, facet: str, limit: Union[int, UnsetType]=unset, sort: Union[LogQueryDefinitionGroupBySort, UnsetType]=unset, **kwargs): + """ + Defined items in the group. + + :param facet: Facet name. + :type facet: str + + :param limit: Maximum number of items in the group. + :type limit: int, optional + + :param sort: Define a sorting method. + :type sort: LogQueryDefinitionGroupBySort, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v1/model/log_query_definition_group_by_sort.py b/datadog_api_client/v1/model/log_query_definition_group_by_sort.py new file mode 100644 index 0000000000..4d2d16f7a4 --- /dev/null +++ b/datadog_api_client/v1/model/log_query_definition_group_by_sort.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_sort import WidgetSort + +class LogQueryDefinitionGroupBySort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_sort import WidgetSort + return { + "aggregation": (str,), + "facet": (str,), + "order": (WidgetSort,), + } + attribute_map = { + "aggregation": "aggregation", + "facet": "facet", + "order": "order", + } + + def __init__(self_, aggregation: str, order: WidgetSort, facet: Union[str, UnsetType]=unset, **kwargs): + """ + Define a sorting method. + + :param aggregation: The aggregation method. + :type aggregation: str + + :param facet: Facet name. + :type facet: str, optional + + :param order: Widget sorting methods. + :type order: WidgetSort + """ + if facet is not unset: + kwargs["facet"] = facet + super().__init__(kwargs) + + + self_.aggregation = aggregation + self_.order = order diff --git a/datadog_api_client/v1/model/log_query_definition_search.py b/datadog_api_client/v1/model/log_query_definition_search.py new file mode 100644 index 0000000000..1bbb17e023 --- /dev/null +++ b/datadog_api_client/v1/model/log_query_definition_search.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogQueryDefinitionSearch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: str, **kwargs): + """ + The query being made on the logs. + + :param query: Search value to apply. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v1/model/log_stream_widget_definition.py b/datadog_api_client/v1/model/log_stream_widget_definition.py new file mode 100644 index 0000000000..8a7bde1ff1 --- /dev/null +++ b/datadog_api_client/v1/model/log_stream_widget_definition.py @@ -0,0 +1,150 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_message_display import WidgetMessageDisplay + from datadog_api_client.v1.model.widget_field_sort import WidgetFieldSort + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.log_stream_widget_definition_type import LogStreamWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class LogStreamWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_message_display import WidgetMessageDisplay + from datadog_api_client.v1.model.widget_field_sort import WidgetFieldSort + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.log_stream_widget_definition_type import LogStreamWidgetDefinitionType + return { + "columns": ([str],), + "description": (str,), + "indexes": ([str],), + "logset": (str,), + "message_display": (WidgetMessageDisplay,), + "query": (str,), + "show_date_column": (bool,), + "show_message_column": (bool,), + "sort": (WidgetFieldSort,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (LogStreamWidgetDefinitionType,), + } + attribute_map = { + "columns": "columns", + "description": "description", + "indexes": "indexes", + "logset": "logset", + "message_display": "message_display", + "query": "query", + "show_date_column": "show_date_column", + "show_message_column": "show_message_column", + "sort": "sort", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, type: LogStreamWidgetDefinitionType, columns: Union[List[str], UnsetType]=unset, description: Union[str, UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, logset: Union[str, UnsetType]=unset, message_display: Union[WidgetMessageDisplay, UnsetType]=unset, query: Union[str, UnsetType]=unset, show_date_column: Union[bool, UnsetType]=unset, show_message_column: Union[bool, UnsetType]=unset, sort: Union[WidgetFieldSort, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The Log Stream displays a log flow matching the defined query. + + :param columns: Which columns to display on the widget. + :type columns: [str], optional + + :param description: The description of the widget. + :type description: str, optional + + :param indexes: An array of index names to query in the stream. Use [] to query all indexes at once. + :type indexes: [str], optional + + :param logset: ID of the log set to use. **Deprecated**. + :type logset: str, optional + + :param message_display: Amount of log lines to display + :type message_display: WidgetMessageDisplay, optional + + :param query: Query to filter the log stream with. + :type query: str, optional + + :param show_date_column: Whether to show the date column or not + :type show_date_column: bool, optional + + :param show_message_column: Whether to show the message column or not + :type show_message_column: bool, optional + + :param sort: Which column and order to sort by + :type sort: WidgetFieldSort, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the log stream widget. + :type type: LogStreamWidgetDefinitionType + """ + if columns is not unset: + kwargs["columns"] = columns + if description is not unset: + kwargs["description"] = description + if indexes is not unset: + kwargs["indexes"] = indexes + if logset is not unset: + kwargs["logset"] = logset + if message_display is not unset: + kwargs["message_display"] = message_display + if query is not unset: + kwargs["query"] = query + if show_date_column is not unset: + kwargs["show_date_column"] = show_date_column + if show_message_column is not unset: + kwargs["show_message_column"] = show_message_column + if sort is not unset: + kwargs["sort"] = sort + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/log_stream_widget_definition_type.py b/datadog_api_client/v1/model/log_stream_widget_definition_type.py new file mode 100644 index 0000000000..2ae165a0ec --- /dev/null +++ b/datadog_api_client/v1/model/log_stream_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogStreamWidgetDefinitionType(ModelSimple): + """ + Type of the log stream widget. + + :param value: If omitted defaults to "log_stream". Must be one of ["log_stream"]. + :type value: str + """ + + allowed_values = { + "log_stream", + } + LOG_STREAM: ClassVar["LogStreamWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogStreamWidgetDefinitionType.LOG_STREAM = LogStreamWidgetDefinitionType("log_stream") diff --git a/datadog_api_client/v1/model/logs_api_error.py b/datadog_api_client/v1/model/logs_api_error.py new file mode 100644 index 0000000000..ffc5b1a390 --- /dev/null +++ b/datadog_api_client/v1/model/logs_api_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsAPIError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "details": ([LogsAPIError],), + "message": (str,), + } + attribute_map = { + "code": "code", + "details": "details", + "message": "message", + } + + def __init__(self_, code: Union[str, UnsetType]=unset, details: Union[List[LogsAPIError], UnsetType]=unset, message: Union[str, UnsetType]=unset, **kwargs): + """ + Error returned by the Logs API + + :param code: Code identifying the error + :type code: str, optional + + :param details: Additional error details + :type details: [LogsAPIError], optional + + :param message: Error message + :type message: str, optional + """ + if code is not unset: + kwargs["code"] = code + if details is not unset: + kwargs["details"] = details + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_api_error_response.py b/datadog_api_client/v1/model/logs_api_error_response.py new file mode 100644 index 0000000000..df338c47b0 --- /dev/null +++ b/datadog_api_client/v1/model/logs_api_error_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_api_error import LogsAPIError + +class LogsAPIErrorResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_api_error import LogsAPIError + return { + "error": (LogsAPIError,), + } + attribute_map = { + "error": "error", + } + + def __init__(self_, error: Union[LogsAPIError, UnsetType]=unset, **kwargs): + """ + Response returned by the Logs API when errors occur. + + :param error: Error returned by the Logs API + :type error: LogsAPIError, optional + """ + if error is not unset: + kwargs["error"] = error + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_api_limit_reached_response.py b/datadog_api_client/v1/model/logs_api_limit_reached_response.py new file mode 100644 index 0000000000..81ac00357d --- /dev/null +++ b/datadog_api_client/v1/model/logs_api_limit_reached_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_api_error import LogsAPIError + +class LogsAPILimitReachedResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_api_error import LogsAPIError + return { + "error": (LogsAPIError,), + } + attribute_map = { + "error": "error", + } + + def __init__(self_, error: Union[LogsAPIError, UnsetType]=unset, **kwargs): + """ + Response returned by the Logs API when the max limit has been reached. + + :param error: Error returned by the Logs API + :type error: LogsAPIError, optional + """ + if error is not unset: + kwargs["error"] = error + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_arithmetic_processor.py b/datadog_api_client/v1/model/logs_arithmetic_processor.py new file mode 100644 index 0000000000..6c82f5800f --- /dev/null +++ b/datadog_api_client/v1/model/logs_arithmetic_processor.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_arithmetic_processor_type import LogsArithmeticProcessorType + +class LogsArithmeticProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_arithmetic_processor_type import LogsArithmeticProcessorType + return { + "expression": (str,), + "is_enabled": (bool,), + "is_replace_missing": (bool,), + "name": (str,), + "target": (str,), + "type": (LogsArithmeticProcessorType,), + } + attribute_map = { + "expression": "expression", + "is_enabled": "is_enabled", + "is_replace_missing": "is_replace_missing", + "name": "name", + "target": "target", + "type": "type", + } + + def __init__(self_, expression: str, target: str, type: LogsArithmeticProcessorType, is_enabled: Union[bool, UnsetType]=unset, is_replace_missing: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Use the Arithmetic Processor to add a new attribute (without spaces or special characters + in the new attribute name) to a log with the result of the provided formula. + This enables you to remap different time attributes with different units into a single attribute, + or to compute operations on attributes within the same log. + + The formula can use parentheses and the basic arithmetic operators ``-`` , ``+`` , ``*`` , ``/``. + + By default, the calculation is skipped if an attribute is missing. + Select “Replace missing attribute by 0” to automatically populate + missing attribute values with 0 to ensure that the calculation is done. + An attribute is missing if it is not found in the log attributes, + or if it cannot be converted to a number. + + *Notes* : + + * The operator ``-`` needs to be space split in the formula as it can also be contained in attribute names. + * If the target attribute already exists, it is overwritten by the result of the formula. + * Results are rounded up to the 9th decimal. For example, if the result of the formula is ``0.1234567891`` , + the actual value stored for the attribute is ``0.123456789``. + * If you need to scale a unit of measure, + see `Scale Filter `_. + + :param expression: Arithmetic operation between one or more log attributes. + :type expression: str + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param is_replace_missing: If ``true`` , it replaces all missing attributes of expression by ``0`` , ``false`` + skip the operation if an attribute is missing. + :type is_replace_missing: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param target: Name of the attribute that contains the result of the arithmetic operation. + :type target: str + + :param type: Type of logs arithmetic processor. + :type type: LogsArithmeticProcessorType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if is_replace_missing is not unset: + kwargs["is_replace_missing"] = is_replace_missing + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.expression = expression + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_arithmetic_processor_type.py b/datadog_api_client/v1/model/logs_arithmetic_processor_type.py new file mode 100644 index 0000000000..11cbe7609a --- /dev/null +++ b/datadog_api_client/v1/model/logs_arithmetic_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArithmeticProcessorType(ModelSimple): + """ + Type of logs arithmetic processor. + + :param value: If omitted defaults to "arithmetic-processor". Must be one of ["arithmetic-processor"]. + :type value: str + """ + + allowed_values = { + "arithmetic-processor", + } + ARITHMETIC_PROCESSOR: ClassVar["LogsArithmeticProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArithmeticProcessorType.ARITHMETIC_PROCESSOR = LogsArithmeticProcessorType("arithmetic-processor") diff --git a/datadog_api_client/v1/model/logs_array_map_arithmetic_sub_processor.py b/datadog_api_client/v1/model/logs_array_map_arithmetic_sub_processor.py new file mode 100644 index 0000000000..aee2b46703 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_map_arithmetic_sub_processor.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_arithmetic_processor_type import LogsArithmeticProcessorType + +class LogsArrayMapArithmeticSubProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_arithmetic_processor_type import LogsArithmeticProcessorType + return { + "expression": (str,), + "is_replace_missing": (bool,), + "name": (str,), + "target": (str,), + "type": (LogsArithmeticProcessorType,), + } + attribute_map = { + "expression": "expression", + "is_replace_missing": "is_replace_missing", + "name": "name", + "target": "target", + "type": "type", + } + + def __init__(self_, expression: str, target: str, type: LogsArithmeticProcessorType, is_replace_missing: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + An arithmetic sub-processor for use inside an array-map processor. + Unlike the top-level arithmetic processor, ``is_enabled`` is not supported. + + :param expression: Arithmetic operation to perform. + :type expression: str + + :param is_replace_missing: Replace missing attribute values with 0. + :type is_replace_missing: bool, optional + + :param name: Name of the sub-processor. + :type name: str, optional + + :param target: Target attribute path for the result. + :type target: str + + :param type: Type of logs arithmetic processor. + :type type: LogsArithmeticProcessorType + """ + if is_replace_missing is not unset: + kwargs["is_replace_missing"] = is_replace_missing + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.expression = expression + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_array_map_attribute_remapper.py b/datadog_api_client/v1/model/logs_array_map_attribute_remapper.py new file mode 100644 index 0000000000..3d0399bff1 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_map_attribute_remapper.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.target_format_type import TargetFormatType + from datadog_api_client.v1.model.logs_attribute_remapper_type import LogsAttributeRemapperType + +class LogsArrayMapAttributeRemapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.target_format_type import TargetFormatType + from datadog_api_client.v1.model.logs_attribute_remapper_type import LogsAttributeRemapperType + return { + "name": (str,), + "override_on_conflict": (bool,), + "preserve_source": (bool,), + "sources": ([str],), + "target": (str,), + "target_format": (TargetFormatType,), + "type": (LogsAttributeRemapperType,), + } + attribute_map = { + "name": "name", + "override_on_conflict": "override_on_conflict", + "preserve_source": "preserve_source", + "sources": "sources", + "target": "target", + "target_format": "target_format", + "type": "type", + } + + def __init__(self_, sources: List[str], target: str, type: LogsAttributeRemapperType, name: Union[str, UnsetType]=unset, override_on_conflict: Union[bool, UnsetType]=unset, preserve_source: Union[bool, UnsetType]=unset, target_format: Union[TargetFormatType, UnsetType]=unset, **kwargs): + """ + An attribute remapper sub-processor for use inside an array-map processor. + Unlike the top-level attribute remapper, ``is_enabled`` , ``source_type`` , and + ``target_type`` are not supported. + + :param name: Name of the sub-processor. + :type name: str, optional + + :param override_on_conflict: Override the target element if already set. + :type override_on_conflict: bool, optional + + :param preserve_source: Remove or preserve the remapped source element. + :type preserve_source: bool, optional + + :param sources: Array of source attribute paths. + :type sources: [str] + + :param target: Target attribute path. + :type target: str + + :param target_format: If the ``target_type`` of the remapper is ``attribute`` , try to cast the value to a new specific type. + If the cast is not possible, the original type is kept. ``string`` , ``integer`` , or ``double`` are the possible types. + If the ``target_type`` is ``tag`` , this parameter may not be specified. + :type target_format: TargetFormatType, optional + + :param type: Type of logs attribute remapper. + :type type: LogsAttributeRemapperType + """ + if name is not unset: + kwargs["name"] = name + if override_on_conflict is not unset: + kwargs["override_on_conflict"] = override_on_conflict + if preserve_source is not unset: + kwargs["preserve_source"] = preserve_source + if target_format is not unset: + kwargs["target_format"] = target_format + super().__init__(kwargs) + + + self_.sources = sources + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_array_map_category_sub_processor.py b/datadog_api_client/v1/model/logs_array_map_category_sub_processor.py new file mode 100644 index 0000000000..74cbc83d3b --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_map_category_sub_processor.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_category_processor_category import LogsCategoryProcessorCategory + from datadog_api_client.v1.model.logs_category_processor_type import LogsCategoryProcessorType + +class LogsArrayMapCategorySubProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_category_processor_category import LogsCategoryProcessorCategory + from datadog_api_client.v1.model.logs_category_processor_type import LogsCategoryProcessorType + return { + "categories": ([LogsCategoryProcessorCategory],), + "name": (str,), + "target": (str,), + "type": (LogsCategoryProcessorType,), + } + attribute_map = { + "categories": "categories", + "name": "name", + "target": "target", + "type": "type", + } + + def __init__(self_, categories: List[LogsCategoryProcessorCategory], target: str, type: LogsCategoryProcessorType, name: Union[str, UnsetType]=unset, **kwargs): + """ + A category sub-processor for use inside an array-map processor. + Unlike the top-level category processor, ``is_enabled`` is not supported. + + :param categories: Array of filters to match against a log and the corresponding value to assign. + :type categories: [LogsCategoryProcessorCategory] + + :param name: Name of the sub-processor. + :type name: str, optional + + :param target: Target attribute path for the category value. + :type target: str + + :param type: Type of logs category processor. + :type type: LogsCategoryProcessorType + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.categories = categories + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_array_map_processor.py b/datadog_api_client/v1/model/logs_array_map_processor.py new file mode 100644 index 0000000000..7976645321 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_map_processor.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_array_map_sub_processor import LogsArrayMapSubProcessor + from datadog_api_client.v1.model.logs_array_map_processor_type import LogsArrayMapProcessorType + from datadog_api_client.v1.model.logs_array_map_attribute_remapper import LogsArrayMapAttributeRemapper + from datadog_api_client.v1.model.logs_array_map_arithmetic_sub_processor import LogsArrayMapArithmeticSubProcessor + from datadog_api_client.v1.model.logs_array_map_string_builder_sub_processor import LogsArrayMapStringBuilderSubProcessor + from datadog_api_client.v1.model.logs_array_map_category_sub_processor import LogsArrayMapCategorySubProcessor + +class LogsArrayMapProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_array_map_sub_processor import LogsArrayMapSubProcessor + from datadog_api_client.v1.model.logs_array_map_processor_type import LogsArrayMapProcessorType + return { + "is_enabled": (bool,), + "name": (str,), + "preserve_source": (bool,), + "processors": ([LogsArrayMapSubProcessor],), + "source": (str,), + "target": (str,), + "type": (LogsArrayMapProcessorType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "preserve_source": "preserve_source", + "processors": "processors", + "source": "source", + "target": "target", + "type": "type", + } + + def __init__(self_, processors: List[Union[LogsArrayMapSubProcessor, LogsArrayMapAttributeRemapper, LogsArrayMapArithmeticSubProcessor, LogsArrayMapStringBuilderSubProcessor, LogsArrayMapCategorySubProcessor]], source: str, target: str, type: LogsArrayMapProcessorType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, preserve_source: Union[bool, UnsetType]=unset, **kwargs): + """ + The array-map processor transforms each element of a source array by applying + sub-processors in order and collecting the results into a target array. + Results can be written to a new array, to the source array (in-place), or to + an existing target array. Sub-processors can read from ``$sourceElem.`` + (object element field), bare ``$sourceElem`` (primitive element), or any parent + log attribute path. Sub-processors write to ``$targetElem.`` (object + output field) or bare ``$targetElem`` (primitive output). + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param preserve_source: When ``false`` and ``source != target`` , the source attribute is removed after + processing. Cannot be ``false`` when ``source == target``. + :type preserve_source: bool, optional + + :param processors: Sub-processors applied to each element. Allowed types: ``attribute-remapper`` , + ``string-builder-processor`` , ``arithmetic-processor`` , ``category-processor``. + :type processors: [LogsArrayMapSubProcessor] + + :param source: Attribute path of the source array. Elements are read-only via ``$sourceElem`` + inside sub-processors. + :type source: str + + :param target: Attribute path of the output array. Sub-processors write to ``$targetElem`` + (or ``$targetElem.`` ) to build each output element. + :type target: str + + :param type: Type of logs array-map processor. + :type type: LogsArrayMapProcessorType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if preserve_source is not unset: + kwargs["preserve_source"] = preserve_source + super().__init__(kwargs) + + + self_.processors = processors + self_.source = source + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_array_map_processor_type.py b/datadog_api_client/v1/model/logs_array_map_processor_type.py new file mode 100644 index 0000000000..5998370bea --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_map_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArrayMapProcessorType(ModelSimple): + """ + Type of logs array-map processor. + + :param value: If omitted defaults to "array-map-processor". Must be one of ["array-map-processor"]. + :type value: str + """ + + allowed_values = { + "array-map-processor", + } + ARRAY_MAP_PROCESSOR: ClassVar["LogsArrayMapProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArrayMapProcessorType.ARRAY_MAP_PROCESSOR = LogsArrayMapProcessorType("array-map-processor") diff --git a/datadog_api_client/v1/model/logs_array_map_string_builder_sub_processor.py b/datadog_api_client/v1/model/logs_array_map_string_builder_sub_processor.py new file mode 100644 index 0000000000..2c5eac972b --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_map_string_builder_sub_processor.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_string_builder_processor_type import LogsStringBuilderProcessorType + +class LogsArrayMapStringBuilderSubProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_string_builder_processor_type import LogsStringBuilderProcessorType + return { + "is_replace_missing": (bool,), + "name": (str,), + "target": (str,), + "template": (str,), + "type": (LogsStringBuilderProcessorType,), + } + attribute_map = { + "is_replace_missing": "is_replace_missing", + "name": "name", + "target": "target", + "template": "template", + "type": "type", + } + + def __init__(self_, target: str, template: str, type: LogsStringBuilderProcessorType, is_replace_missing: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A string builder sub-processor for use inside an array-map processor. + Unlike the top-level string builder processor, ``is_enabled`` is not supported. + + :param is_replace_missing: Replace missing attribute values with an empty string. + :type is_replace_missing: bool, optional + + :param name: Name of the sub-processor. + :type name: str, optional + + :param target: Target attribute path for the result. + :type target: str + + :param template: Formula with one or more attributes and raw text. + :type template: str + + :param type: Type of logs string builder processor. + :type type: LogsStringBuilderProcessorType + """ + if is_replace_missing is not unset: + kwargs["is_replace_missing"] = is_replace_missing + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.target = target + self_.template = template + self_.type = type diff --git a/datadog_api_client/v1/model/logs_array_map_sub_processor.py b/datadog_api_client/v1/model/logs_array_map_sub_processor.py new file mode 100644 index 0000000000..5c536eac23 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_map_sub_processor.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArrayMapSubProcessor(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A sub-processor used inside an array-map processor. + Allowed types: ``attribute-remapper`` , ``string-builder-processor`` , + ``arithmetic-processor`` , ``category-processor``. + + :param name: Name of the sub-processor. + :type name: str, optional + + :param override_on_conflict: Override the target element if already set. + :type override_on_conflict: bool, optional + + :param preserve_source: Remove or preserve the remapped source element. + :type preserve_source: bool, optional + + :param sources: Array of source attribute paths. + :type sources: [str] + + :param target: Target attribute path. + :type target: str + + :param target_format: If the `target_type` of the remapper is `attribute`, try to cast the value to a new specific type. + If the cast is not possible, the original type is kept. `string`, `integer`, or `double` are the possible types. + If the `target_type` is `tag`, this parameter may not be specified. + :type target_format: TargetFormatType, optional + + :param type: Type of logs attribute remapper. + :type type: LogsAttributeRemapperType + + :param expression: Arithmetic operation to perform. + :type expression: str + + :param is_replace_missing: Replace missing attribute values with 0. + :type is_replace_missing: bool, optional + + :param template: Formula with one or more attributes and raw text. + :type template: str + + :param categories: Array of filters to match against a log and the corresponding value to assign. + :type categories: [LogsCategoryProcessorCategory] + """ + 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.v1.model.logs_array_map_attribute_remapper import LogsArrayMapAttributeRemapper + from datadog_api_client.v1.model.logs_array_map_arithmetic_sub_processor import LogsArrayMapArithmeticSubProcessor + from datadog_api_client.v1.model.logs_array_map_string_builder_sub_processor import LogsArrayMapStringBuilderSubProcessor + from datadog_api_client.v1.model.logs_array_map_category_sub_processor import LogsArrayMapCategorySubProcessor + return { + "oneOf": [ + LogsArrayMapAttributeRemapper, + LogsArrayMapArithmeticSubProcessor, + LogsArrayMapStringBuilderSubProcessor, + LogsArrayMapCategorySubProcessor, + ], + } diff --git a/datadog_api_client/v1/model/logs_array_processor.py b/datadog_api_client/v1/model/logs_array_processor.py new file mode 100644 index 0000000000..1638329b20 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_array_processor_operation import LogsArrayProcessorOperation + from datadog_api_client.v1.model.logs_array_processor_type import LogsArrayProcessorType + from datadog_api_client.v1.model.logs_array_processor_operation_append import LogsArrayProcessorOperationAppend + from datadog_api_client.v1.model.logs_array_processor_operation_length import LogsArrayProcessorOperationLength + from datadog_api_client.v1.model.logs_array_processor_operation_select import LogsArrayProcessorOperationSelect + from datadog_api_client.v1.model.logs_array_processor_operation_extract_key_value import LogsArrayProcessorOperationExtractKeyValue + +class LogsArrayProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_array_processor_operation import LogsArrayProcessorOperation + from datadog_api_client.v1.model.logs_array_processor_type import LogsArrayProcessorType + return { + "is_enabled": (bool,), + "name": (str,), + "operation": (LogsArrayProcessorOperation,), + "type": (LogsArrayProcessorType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "operation": "operation", + "type": "type", + } + + def __init__(self_, operation: Union[LogsArrayProcessorOperation, LogsArrayProcessorOperationAppend, LogsArrayProcessorOperationLength, LogsArrayProcessorOperationSelect, LogsArrayProcessorOperationExtractKeyValue], type: LogsArrayProcessorType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A processor for extracting, aggregating, or transforming values from JSON arrays within your logs. + Supported operations are: + + * Select value from matching element + * Compute array length + * Append a value to an array + * Extract key-value pairs from an array + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param operation: Configuration of the array processor operation to perform. + :type operation: LogsArrayProcessorOperation + + :param type: Type of logs array processor. + :type type: LogsArrayProcessorType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.operation = operation + self_.type = type diff --git a/datadog_api_client/v1/model/logs_array_processor_operation.py b/datadog_api_client/v1/model/logs_array_processor_operation.py new file mode 100644 index 0000000000..724e0e0eac --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_operation.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArrayProcessorOperation(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Configuration of the array processor operation to perform. + + :param preserve_source: Remove or preserve the remapped source element. + :type preserve_source: bool, optional + + :param source: Attribute path containing the value to append. + :type source: str + + :param target: Attribute path of the array to append to. + :type target: str + + :param type: Operation type. + :type type: LogsArrayProcessorOperationAppendType + + :param filter: Filter condition expressed as `key:value` used to find the matching element. + :type filter: str + + :param value_to_extract: Key of the value to extract from the matching element. + :type value_to_extract: str + + :param key_to_extract: Key of the attribute in each array element that holds the name to use for the extracted attribute. + :type key_to_extract: str + + :param override_on_conflict: Whether to override the target element if it's already set. + :type override_on_conflict: bool, 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.v1.model.logs_array_processor_operation_append import LogsArrayProcessorOperationAppend + from datadog_api_client.v1.model.logs_array_processor_operation_length import LogsArrayProcessorOperationLength + from datadog_api_client.v1.model.logs_array_processor_operation_select import LogsArrayProcessorOperationSelect + from datadog_api_client.v1.model.logs_array_processor_operation_extract_key_value import LogsArrayProcessorOperationExtractKeyValue + return { + "oneOf": [ + LogsArrayProcessorOperationAppend, + LogsArrayProcessorOperationLength, + LogsArrayProcessorOperationSelect, + LogsArrayProcessorOperationExtractKeyValue, + ], + } diff --git a/datadog_api_client/v1/model/logs_array_processor_operation_append.py b/datadog_api_client/v1/model/logs_array_processor_operation_append.py new file mode 100644 index 0000000000..f0eb59a5ec --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_operation_append.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_array_processor_operation_append_type import LogsArrayProcessorOperationAppendType + +class LogsArrayProcessorOperationAppend(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_array_processor_operation_append_type import LogsArrayProcessorOperationAppendType + return { + "preserve_source": (bool,), + "source": (str,), + "target": (str,), + "type": (LogsArrayProcessorOperationAppendType,), + } + attribute_map = { + "preserve_source": "preserve_source", + "source": "source", + "target": "target", + "type": "type", + } + + def __init__(self_, source: str, target: str, type: LogsArrayProcessorOperationAppendType, preserve_source: Union[bool, UnsetType]=unset, **kwargs): + """ + Operation that appends a value to a target array attribute. + + :param preserve_source: Remove or preserve the remapped source element. + :type preserve_source: bool, optional + + :param source: Attribute path containing the value to append. + :type source: str + + :param target: Attribute path of the array to append to. + :type target: str + + :param type: Operation type. + :type type: LogsArrayProcessorOperationAppendType + """ + if preserve_source is not unset: + kwargs["preserve_source"] = preserve_source + super().__init__(kwargs) + + + self_.source = source + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_array_processor_operation_append_type.py b/datadog_api_client/v1/model/logs_array_processor_operation_append_type.py new file mode 100644 index 0000000000..e6312f8a06 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_operation_append_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArrayProcessorOperationAppendType(ModelSimple): + """ + Operation type. + + :param value: If omitted defaults to "append". Must be one of ["append"]. + :type value: str + """ + + allowed_values = { + "append", + } + APPEND: ClassVar["LogsArrayProcessorOperationAppendType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArrayProcessorOperationAppendType.APPEND = LogsArrayProcessorOperationAppendType("append") diff --git a/datadog_api_client/v1/model/logs_array_processor_operation_extract_key_value.py b/datadog_api_client/v1/model/logs_array_processor_operation_extract_key_value.py new file mode 100644 index 0000000000..224e75e4a3 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_operation_extract_key_value.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_array_processor_operation_extract_key_value_type import LogsArrayProcessorOperationExtractKeyValueType + +class LogsArrayProcessorOperationExtractKeyValue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_array_processor_operation_extract_key_value_type import LogsArrayProcessorOperationExtractKeyValueType + return { + "key_to_extract": (str,), + "override_on_conflict": (bool,), + "source": (str,), + "target": (str,), + "type": (LogsArrayProcessorOperationExtractKeyValueType,), + "value_to_extract": (str,), + } + attribute_map = { + "key_to_extract": "key_to_extract", + "override_on_conflict": "override_on_conflict", + "source": "source", + "target": "target", + "type": "type", + "value_to_extract": "value_to_extract", + } + + def __init__(self_, key_to_extract: str, source: str, type: LogsArrayProcessorOperationExtractKeyValueType, value_to_extract: str, override_on_conflict: Union[bool, UnsetType]=unset, target: Union[str, UnsetType]=unset, **kwargs): + """ + Operation that extracts key-value pairs from a ``source`` array and stores the result in the ``target`` attribute. + + :param key_to_extract: Key of the attribute in each array element that holds the name to use for the extracted attribute. + :type key_to_extract: str + + :param override_on_conflict: Whether to override the target element if it's already set. + :type override_on_conflict: bool, optional + + :param source: Attribute path of the array to extract key-value pairs from. + :type source: str + + :param target: Attribute that receives the extracted key-value pairs. If not specified, the extracted attributes are added at the root level of the log. + :type target: str, optional + + :param type: Operation type. + :type type: LogsArrayProcessorOperationExtractKeyValueType + + :param value_to_extract: Key of the attribute in each array element that holds the value to use for the extracted attribute. + :type value_to_extract: str + """ + if override_on_conflict is not unset: + kwargs["override_on_conflict"] = override_on_conflict + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + + self_.key_to_extract = key_to_extract + self_.source = source + self_.type = type + self_.value_to_extract = value_to_extract diff --git a/datadog_api_client/v1/model/logs_array_processor_operation_extract_key_value_type.py b/datadog_api_client/v1/model/logs_array_processor_operation_extract_key_value_type.py new file mode 100644 index 0000000000..f273ffbeb3 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_operation_extract_key_value_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArrayProcessorOperationExtractKeyValueType(ModelSimple): + """ + Operation type. + + :param value: If omitted defaults to "key-value". Must be one of ["key-value"]. + :type value: str + """ + + allowed_values = { + "key-value", + } + KEY_VALUE: ClassVar["LogsArrayProcessorOperationExtractKeyValueType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArrayProcessorOperationExtractKeyValueType.KEY_VALUE = LogsArrayProcessorOperationExtractKeyValueType("key-value") diff --git a/datadog_api_client/v1/model/logs_array_processor_operation_length.py b/datadog_api_client/v1/model/logs_array_processor_operation_length.py new file mode 100644 index 0000000000..7a7d358701 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_operation_length.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_array_processor_operation_length_type import LogsArrayProcessorOperationLengthType + +class LogsArrayProcessorOperationLength(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_array_processor_operation_length_type import LogsArrayProcessorOperationLengthType + return { + "source": (str,), + "target": (str,), + "type": (LogsArrayProcessorOperationLengthType,), + } + attribute_map = { + "source": "source", + "target": "target", + "type": "type", + } + + def __init__(self_, source: str, target: str, type: LogsArrayProcessorOperationLengthType, **kwargs): + """ + Operation that computes the length of a ``source`` array and stores the result in the ``target`` attribute. + + :param source: Attribute path of the array to measure. + :type source: str + + :param target: Attribute that receives the computed length. + :type target: str + + :param type: Operation type. + :type type: LogsArrayProcessorOperationLengthType + """ + super().__init__(kwargs) + + + self_.source = source + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_array_processor_operation_length_type.py b/datadog_api_client/v1/model/logs_array_processor_operation_length_type.py new file mode 100644 index 0000000000..505b03a5bb --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_operation_length_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArrayProcessorOperationLengthType(ModelSimple): + """ + Operation type. + + :param value: If omitted defaults to "length". Must be one of ["length"]. + :type value: str + """ + + allowed_values = { + "length", + } + LENGTH: ClassVar["LogsArrayProcessorOperationLengthType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArrayProcessorOperationLengthType.LENGTH = LogsArrayProcessorOperationLengthType("length") diff --git a/datadog_api_client/v1/model/logs_array_processor_operation_select.py b/datadog_api_client/v1/model/logs_array_processor_operation_select.py new file mode 100644 index 0000000000..7784b548ba --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_operation_select.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_array_processor_operation_select_type import LogsArrayProcessorOperationSelectType + +class LogsArrayProcessorOperationSelect(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_array_processor_operation_select_type import LogsArrayProcessorOperationSelectType + return { + "filter": (str,), + "source": (str,), + "target": (str,), + "type": (LogsArrayProcessorOperationSelectType,), + "value_to_extract": (str,), + } + attribute_map = { + "filter": "filter", + "source": "source", + "target": "target", + "type": "type", + "value_to_extract": "value_to_extract", + } + + def __init__(self_, filter: str, source: str, target: str, type: LogsArrayProcessorOperationSelectType, value_to_extract: str, **kwargs): + """ + Operation that finds an object in a ``source`` array using a ``filter`` , and then extracts a specific value into the ``target`` attribute. + + :param filter: Filter condition expressed as ``key:value`` used to find the matching element. + :type filter: str + + :param source: Attribute path of the array to search into. + :type source: str + + :param target: Attribute that receives the extracted value. + :type target: str + + :param type: Operation type. + :type type: LogsArrayProcessorOperationSelectType + + :param value_to_extract: Key of the value to extract from the matching element. + :type value_to_extract: str + """ + super().__init__(kwargs) + + + self_.filter = filter + self_.source = source + self_.target = target + self_.type = type + self_.value_to_extract = value_to_extract diff --git a/datadog_api_client/v1/model/logs_array_processor_operation_select_type.py b/datadog_api_client/v1/model/logs_array_processor_operation_select_type.py new file mode 100644 index 0000000000..3072428a61 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_operation_select_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArrayProcessorOperationSelectType(ModelSimple): + """ + Operation type. + + :param value: If omitted defaults to "select". Must be one of ["select"]. + :type value: str + """ + + allowed_values = { + "select", + } + SELECT: ClassVar["LogsArrayProcessorOperationSelectType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArrayProcessorOperationSelectType.SELECT = LogsArrayProcessorOperationSelectType("select") diff --git a/datadog_api_client/v1/model/logs_array_processor_type.py b/datadog_api_client/v1/model/logs_array_processor_type.py new file mode 100644 index 0000000000..652da63a85 --- /dev/null +++ b/datadog_api_client/v1/model/logs_array_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArrayProcessorType(ModelSimple): + """ + Type of logs array processor. + + :param value: If omitted defaults to "array-processor". Must be one of ["array-processor"]. + :type value: str + """ + + allowed_values = { + "array-processor", + } + ARRAY_PROCESSOR: ClassVar["LogsArrayProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArrayProcessorType.ARRAY_PROCESSOR = LogsArrayProcessorType("array-processor") diff --git a/datadog_api_client/v1/model/logs_attribute_remapper.py b/datadog_api_client/v1/model/logs_attribute_remapper.py new file mode 100644 index 0000000000..295924ccda --- /dev/null +++ b/datadog_api_client/v1/model/logs_attribute_remapper.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.target_format_type import TargetFormatType + from datadog_api_client.v1.model.logs_attribute_remapper_type import LogsAttributeRemapperType + +class LogsAttributeRemapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.target_format_type import TargetFormatType + from datadog_api_client.v1.model.logs_attribute_remapper_type import LogsAttributeRemapperType + return { + "is_enabled": (bool,), + "name": (str,), + "override_on_conflict": (bool,), + "preserve_source": (bool,), + "source_type": (str,), + "sources": ([str],), + "target": (str,), + "target_format": (TargetFormatType,), + "target_type": (str,), + "type": (LogsAttributeRemapperType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "override_on_conflict": "override_on_conflict", + "preserve_source": "preserve_source", + "source_type": "source_type", + "sources": "sources", + "target": "target", + "target_format": "target_format", + "target_type": "target_type", + "type": "type", + } + + def __init__(self_, sources: List[str], target: str, type: LogsAttributeRemapperType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, override_on_conflict: Union[bool, UnsetType]=unset, preserve_source: Union[bool, UnsetType]=unset, source_type: Union[str, UnsetType]=unset, target_format: Union[TargetFormatType, UnsetType]=unset, target_type: Union[str, UnsetType]=unset, **kwargs): + """ + The remapper processor remaps any source attribute(s) or tag to another target attribute or tag. + Constraints on the tag/attribute name are explained in the `Tag Best Practice documentation `_. + Some additional constraints are applied as ``:`` or ``,`` are not allowed in the target tag/attribute name. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param override_on_conflict: Whether to override the target element if it's already set. + :type override_on_conflict: bool, optional + + :param preserve_source: Remove or preserve the remapped source element. + :type preserve_source: bool, optional + + :param source_type: Defines if the sources are from log ``attribute`` or ``tag``. + :type source_type: str, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param target: Final attribute or tag name to remap the sources to. + :type target: str + + :param target_format: If the ``target_type`` of the remapper is ``attribute`` , try to cast the value to a new specific type. + If the cast is not possible, the original type is kept. ``string`` , ``integer`` , or ``double`` are the possible types. + If the ``target_type`` is ``tag`` , this parameter may not be specified. + :type target_format: TargetFormatType, optional + + :param target_type: Defines if the final attribute or tag name is from log ``attribute`` or ``tag``. + :type target_type: str, optional + + :param type: Type of logs attribute remapper. + :type type: LogsAttributeRemapperType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if override_on_conflict is not unset: + kwargs["override_on_conflict"] = override_on_conflict + if preserve_source is not unset: + kwargs["preserve_source"] = preserve_source + if source_type is not unset: + kwargs["source_type"] = source_type + if target_format is not unset: + kwargs["target_format"] = target_format + if target_type is not unset: + kwargs["target_type"] = target_type + super().__init__(kwargs) + + + self_.sources = sources + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_attribute_remapper_type.py b/datadog_api_client/v1/model/logs_attribute_remapper_type.py new file mode 100644 index 0000000000..76af49e63f --- /dev/null +++ b/datadog_api_client/v1/model/logs_attribute_remapper_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsAttributeRemapperType(ModelSimple): + """ + Type of logs attribute remapper. + + :param value: If omitted defaults to "attribute-remapper". Must be one of ["attribute-remapper"]. + :type value: str + """ + + allowed_values = { + "attribute-remapper", + } + ATTRIBUTE_REMAPPER: ClassVar["LogsAttributeRemapperType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsAttributeRemapperType.ATTRIBUTE_REMAPPER = LogsAttributeRemapperType("attribute-remapper") diff --git a/datadog_api_client/v1/model/logs_by_retention.py b/datadog_api_client/v1/model/logs_by_retention.py new file mode 100644 index 0000000000..3792f360cb --- /dev/null +++ b/datadog_api_client/v1/model/logs_by_retention.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_by_retention_orgs import LogsByRetentionOrgs + from datadog_api_client.v1.model.logs_retention_agg_sum_usage import LogsRetentionAggSumUsage + from datadog_api_client.v1.model.logs_by_retention_monthly_usage import LogsByRetentionMonthlyUsage + +class LogsByRetention(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_by_retention_orgs import LogsByRetentionOrgs + from datadog_api_client.v1.model.logs_retention_agg_sum_usage import LogsRetentionAggSumUsage + from datadog_api_client.v1.model.logs_by_retention_monthly_usage import LogsByRetentionMonthlyUsage + return { + "orgs": (LogsByRetentionOrgs,), + "usage": ([LogsRetentionAggSumUsage],), + "usage_by_month": (LogsByRetentionMonthlyUsage,), + } + attribute_map = { + "orgs": "orgs", + "usage": "usage", + "usage_by_month": "usage_by_month", + } + + def __init__(self_, orgs: Union[LogsByRetentionOrgs, UnsetType]=unset, usage: Union[List[LogsRetentionAggSumUsage], UnsetType]=unset, usage_by_month: Union[LogsByRetentionMonthlyUsage, UnsetType]=unset, **kwargs): + """ + Object containing logs usage data broken down by retention period. + + :param orgs: Indexed logs usage summary for each organization for each retention period with usage. + :type orgs: LogsByRetentionOrgs, optional + + :param usage: Aggregated index logs usage for each retention period with usage. + :type usage: [LogsRetentionAggSumUsage], optional + + :param usage_by_month: Object containing a summary of indexed logs usage by retention period for a single month. + :type usage_by_month: LogsByRetentionMonthlyUsage, optional + """ + if orgs is not unset: + kwargs["orgs"] = orgs + if usage is not unset: + kwargs["usage"] = usage + if usage_by_month is not unset: + kwargs["usage_by_month"] = usage_by_month + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_by_retention_monthly_usage.py b/datadog_api_client/v1/model/logs_by_retention_monthly_usage.py new file mode 100644 index 0000000000..d44757d13c --- /dev/null +++ b/datadog_api_client/v1/model/logs_by_retention_monthly_usage.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_retention_sum_usage import LogsRetentionSumUsage + +class LogsByRetentionMonthlyUsage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_retention_sum_usage import LogsRetentionSumUsage + return { + "date": (datetime,), + "usage": ([LogsRetentionSumUsage],), + } + attribute_map = { + "date": "date", + "usage": "usage", + } + + def __init__(self_, date: Union[datetime, UnsetType]=unset, usage: Union[List[LogsRetentionSumUsage], UnsetType]=unset, **kwargs): + """ + Object containing a summary of indexed logs usage by retention period for a single month. + + :param date: The month for the usage. + :type date: datetime, optional + + :param usage: Indexed logs usage for each active retention for the month. + :type usage: [LogsRetentionSumUsage], optional + """ + if date is not unset: + kwargs["date"] = date + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_by_retention_org_usage.py b/datadog_api_client/v1/model/logs_by_retention_org_usage.py new file mode 100644 index 0000000000..de7f412c0d --- /dev/null +++ b/datadog_api_client/v1/model/logs_by_retention_org_usage.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_retention_sum_usage import LogsRetentionSumUsage + +class LogsByRetentionOrgUsage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_retention_sum_usage import LogsRetentionSumUsage + return { + "usage": ([LogsRetentionSumUsage],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[LogsRetentionSumUsage], UnsetType]=unset, **kwargs): + """ + Indexed logs usage by retention for a single organization. + + :param usage: Indexed logs usage for each active retention for the organization. + :type usage: [LogsRetentionSumUsage], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_by_retention_orgs.py b/datadog_api_client/v1/model/logs_by_retention_orgs.py new file mode 100644 index 0000000000..530b524070 --- /dev/null +++ b/datadog_api_client/v1/model/logs_by_retention_orgs.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_by_retention_org_usage import LogsByRetentionOrgUsage + +class LogsByRetentionOrgs(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_by_retention_org_usage import LogsByRetentionOrgUsage + return { + "usage": ([LogsByRetentionOrgUsage],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[LogsByRetentionOrgUsage], UnsetType]=unset, **kwargs): + """ + Indexed logs usage summary for each organization for each retention period with usage. + + :param usage: Indexed logs usage summary for each organization. + :type usage: [LogsByRetentionOrgUsage], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_category_processor.py b/datadog_api_client/v1/model/logs_category_processor.py new file mode 100644 index 0000000000..32ef95c15c --- /dev/null +++ b/datadog_api_client/v1/model/logs_category_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_category_processor_category import LogsCategoryProcessorCategory + from datadog_api_client.v1.model.logs_category_processor_type import LogsCategoryProcessorType + +class LogsCategoryProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_category_processor_category import LogsCategoryProcessorCategory + from datadog_api_client.v1.model.logs_category_processor_type import LogsCategoryProcessorType + return { + "categories": ([LogsCategoryProcessorCategory],), + "is_enabled": (bool,), + "name": (str,), + "target": (str,), + "type": (LogsCategoryProcessorType,), + } + attribute_map = { + "categories": "categories", + "is_enabled": "is_enabled", + "name": "name", + "target": "target", + "type": "type", + } + + def __init__(self_, categories: List[LogsCategoryProcessorCategory], target: str, type: LogsCategoryProcessorType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Use the Category Processor to add a new attribute (without spaces or special characters in the new attribute name) + to a log matching a provided search query. Use categories to create groups for an analytical view. + For example, URL groups, machine groups, environments, and response time buckets. + + **Notes** : + + * The syntax of the query is the one of Logs Explorer search bar. + The query can be done on any log attribute or tag, whether it is a facet or not. + Wildcards can also be used inside your query. + * Once the log has matched one of the Processor queries, it stops. + Make sure they are properly ordered in case a log could match several queries. + * The names of the categories must be unique. + * Once defined in the Category Processor, you can map categories to log status using the Log Status Remapper. + + :param categories: Array of filters to match or not a log and their + corresponding ``name`` to assign a custom value to the log. + :type categories: [LogsCategoryProcessorCategory] + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param target: Name of the target attribute which value is defined by the matching category. + :type target: str + + :param type: Type of logs category processor. + :type type: LogsCategoryProcessorType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.categories = categories + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_category_processor_category.py b/datadog_api_client/v1/model/logs_category_processor_category.py new file mode 100644 index 0000000000..eaa6a42bb9 --- /dev/null +++ b/datadog_api_client/v1/model/logs_category_processor_category.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_filter import LogsFilter + +class LogsCategoryProcessorCategory(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_filter import LogsFilter + return { + "filter": (LogsFilter,), + "name": (str,), + } + attribute_map = { + "filter": "filter", + "name": "name", + } + + def __init__(self_, filter: Union[LogsFilter, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Object describing the logs filter. + + :param filter: Filter for logs. + :type filter: LogsFilter, optional + + :param name: Value to assign to the target attribute. + :type name: str, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_category_processor_type.py b/datadog_api_client/v1/model/logs_category_processor_type.py new file mode 100644 index 0000000000..43dc4c89e6 --- /dev/null +++ b/datadog_api_client/v1/model/logs_category_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsCategoryProcessorType(ModelSimple): + """ + Type of logs category processor. + + :param value: If omitted defaults to "category-processor". Must be one of ["category-processor"]. + :type value: str + """ + + allowed_values = { + "category-processor", + } + CATEGORY_PROCESSOR: ClassVar["LogsCategoryProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsCategoryProcessorType.CATEGORY_PROCESSOR = LogsCategoryProcessorType("category-processor") diff --git a/datadog_api_client/v1/model/logs_daily_limit_reset.py b/datadog_api_client/v1/model/logs_daily_limit_reset.py new file mode 100644 index 0000000000..61ba6f4618 --- /dev/null +++ b/datadog_api_client/v1/model/logs_daily_limit_reset.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsDailyLimitReset(ModelNormal): + @cached_property + def openapi_types(_): + return { + "reset_time": (str,), + "reset_utc_offset": (str,), + } + attribute_map = { + "reset_time": "reset_time", + "reset_utc_offset": "reset_utc_offset", + } + + def __init__(self_, reset_time: Union[str, UnsetType]=unset, reset_utc_offset: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing options to override the default daily limit reset time. + + :param reset_time: String in ``HH:00`` format representing the time of day the daily limit should be reset. The hours must be between 00 and 23 (inclusive). + :type reset_time: str, optional + + :param reset_utc_offset: String in ``(-|+)HH:00`` format representing the UTC offset to apply to the given reset time. The hours must be between -12 and +14 (inclusive). + :type reset_utc_offset: str, optional + """ + if reset_time is not unset: + kwargs["reset_time"] = reset_time + if reset_utc_offset is not unset: + kwargs["reset_utc_offset"] = reset_utc_offset + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_date_remapper.py b/datadog_api_client/v1/model/logs_date_remapper.py new file mode 100644 index 0000000000..cdc879d319 --- /dev/null +++ b/datadog_api_client/v1/model/logs_date_remapper.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_date_remapper_type import LogsDateRemapperType + +class LogsDateRemapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_date_remapper_type import LogsDateRemapperType + return { + "is_enabled": (bool,), + "name": (str,), + "sources": ([str],), + "type": (LogsDateRemapperType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "sources": "sources", + "type": "type", + } + + def __init__(self_, sources: List[str], type: LogsDateRemapperType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + As Datadog receives logs, it timestamps them using the value(s) from any of these default attributes. + + * ``timestamp`` + * ``date`` + * ``_timestamp`` + * ``Timestamp`` + * ``eventTime`` + * + ``published_date`` + + If your logs put their dates in an attribute not in this list, + use the log date Remapper Processor to define their date attribute as the official log timestamp. + The recognized date formats are ISO8601, UNIX (the milliseconds EPOCH format), and RFC3164. + + **Note:** If your logs don’t contain any of the default attributes + and you haven’t defined your own date attribute, Datadog timestamps + the logs with the date it received them. + + If multiple log date remapper processors can be applied to a given log, + only the first one (according to the pipelines order) is taken into account. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param type: Type of logs date remapper. + :type type: LogsDateRemapperType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.sources = sources + self_.type = type diff --git a/datadog_api_client/v1/model/logs_date_remapper_type.py b/datadog_api_client/v1/model/logs_date_remapper_type.py new file mode 100644 index 0000000000..d98ae1a16f --- /dev/null +++ b/datadog_api_client/v1/model/logs_date_remapper_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsDateRemapperType(ModelSimple): + """ + Type of logs date remapper. + + :param value: If omitted defaults to "date-remapper". Must be one of ["date-remapper"]. + :type value: str + """ + + allowed_values = { + "date-remapper", + } + DATE_REMAPPER: ClassVar["LogsDateRemapperType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsDateRemapperType.DATE_REMAPPER = LogsDateRemapperType("date-remapper") diff --git a/datadog_api_client/v1/model/logs_decoder_processor.py b/datadog_api_client/v1/model/logs_decoder_processor.py new file mode 100644 index 0000000000..cf98db3422 --- /dev/null +++ b/datadog_api_client/v1/model/logs_decoder_processor.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_decoder_processor_binary_to_text_encoding import LogsDecoderProcessorBinaryToTextEncoding + from datadog_api_client.v1.model.logs_decoder_processor_input_representation import LogsDecoderProcessorInputRepresentation + from datadog_api_client.v1.model.logs_decoder_processor_type import LogsDecoderProcessorType + +class LogsDecoderProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_decoder_processor_binary_to_text_encoding import LogsDecoderProcessorBinaryToTextEncoding + from datadog_api_client.v1.model.logs_decoder_processor_input_representation import LogsDecoderProcessorInputRepresentation + from datadog_api_client.v1.model.logs_decoder_processor_type import LogsDecoderProcessorType + return { + "binary_to_text_encoding": (LogsDecoderProcessorBinaryToTextEncoding,), + "input_representation": (LogsDecoderProcessorInputRepresentation,), + "is_enabled": (bool,), + "name": (str,), + "source": (str,), + "target": (str,), + "type": (LogsDecoderProcessorType,), + } + attribute_map = { + "binary_to_text_encoding": "binary_to_text_encoding", + "input_representation": "input_representation", + "is_enabled": "is_enabled", + "name": "name", + "source": "source", + "target": "target", + "type": "type", + } + + def __init__(self_, binary_to_text_encoding: LogsDecoderProcessorBinaryToTextEncoding, input_representation: LogsDecoderProcessorInputRepresentation, source: str, target: str, type: LogsDecoderProcessorType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The decoder processor decodes any source attribute containing a + base64/base16-encoded UTF-8/ASCII string back to its original value, storing the + result in a target attribute. + + :param binary_to_text_encoding: The encoding used to represent the binary data. + :type binary_to_text_encoding: LogsDecoderProcessorBinaryToTextEncoding + + :param input_representation: The original representation of input string. + :type input_representation: LogsDecoderProcessorInputRepresentation + + :param is_enabled: Whether the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param source: Name of the log attribute with the encoded data. + :type source: str + + :param target: Name of the log attribute that contains the decoded data. + :type target: str + + :param type: Type of logs decoder processor. + :type type: LogsDecoderProcessorType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.binary_to_text_encoding = binary_to_text_encoding + self_.input_representation = input_representation + self_.source = source + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_decoder_processor_binary_to_text_encoding.py b/datadog_api_client/v1/model/logs_decoder_processor_binary_to_text_encoding.py new file mode 100644 index 0000000000..9038c3bf31 --- /dev/null +++ b/datadog_api_client/v1/model/logs_decoder_processor_binary_to_text_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsDecoderProcessorBinaryToTextEncoding(ModelSimple): + """ + The encoding used to represent the binary data. + + :param value: Must be one of ["base64", "base16"]. + :type value: str + """ + + allowed_values = { + "base64", + "base16", + } + BASE64: ClassVar["LogsDecoderProcessorBinaryToTextEncoding"] + BASE16: ClassVar["LogsDecoderProcessorBinaryToTextEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsDecoderProcessorBinaryToTextEncoding.BASE64 = LogsDecoderProcessorBinaryToTextEncoding("base64") +LogsDecoderProcessorBinaryToTextEncoding.BASE16 = LogsDecoderProcessorBinaryToTextEncoding("base16") diff --git a/datadog_api_client/v1/model/logs_decoder_processor_input_representation.py b/datadog_api_client/v1/model/logs_decoder_processor_input_representation.py new file mode 100644 index 0000000000..71e5268b17 --- /dev/null +++ b/datadog_api_client/v1/model/logs_decoder_processor_input_representation.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsDecoderProcessorInputRepresentation(ModelSimple): + """ + The original representation of input string. + + :param value: Must be one of ["utf_8", "integer"]. + :type value: str + """ + + allowed_values = { + "utf_8", + "integer", + } + UTF_8: ClassVar["LogsDecoderProcessorInputRepresentation"] + INTEGER: ClassVar["LogsDecoderProcessorInputRepresentation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsDecoderProcessorInputRepresentation.UTF_8 = LogsDecoderProcessorInputRepresentation("utf_8") +LogsDecoderProcessorInputRepresentation.INTEGER = LogsDecoderProcessorInputRepresentation("integer") diff --git a/datadog_api_client/v1/model/logs_decoder_processor_type.py b/datadog_api_client/v1/model/logs_decoder_processor_type.py new file mode 100644 index 0000000000..b32649a29d --- /dev/null +++ b/datadog_api_client/v1/model/logs_decoder_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsDecoderProcessorType(ModelSimple): + """ + Type of logs decoder processor. + + :param value: If omitted defaults to "decoder-processor". Must be one of ["decoder-processor"]. + :type value: str + """ + + allowed_values = { + "decoder-processor", + } + DECODER_PROCESSOR: ClassVar["LogsDecoderProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsDecoderProcessorType.DECODER_PROCESSOR = LogsDecoderProcessorType("decoder-processor") diff --git a/datadog_api_client/v1/model/logs_exclude_attribute_processor.py b/datadog_api_client/v1/model/logs_exclude_attribute_processor.py new file mode 100644 index 0000000000..03206e79ad --- /dev/null +++ b/datadog_api_client/v1/model/logs_exclude_attribute_processor.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_exclude_attribute_processor_type import LogsExcludeAttributeProcessorType + +class LogsExcludeAttributeProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_exclude_attribute_processor_type import LogsExcludeAttributeProcessorType + return { + "attribute_to_exclude": (str,), + "is_enabled": (bool,), + "name": (str,), + "type": (LogsExcludeAttributeProcessorType,), + } + attribute_map = { + "attribute_to_exclude": "attribute_to_exclude", + "is_enabled": "is_enabled", + "name": "name", + "type": "type", + } + + def __init__(self_, attribute_to_exclude: str, type: LogsExcludeAttributeProcessorType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Use this processor to remove an attribute from a log during processing. + The processor strips the specified attribute from the log event, which is useful + when the attribute contains sensitive data or is no longer needed downstream. + + :param attribute_to_exclude: Name of the log attribute to remove from the log event. + :type attribute_to_exclude: str + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param type: Type of logs exclude attribute processor. + :type type: LogsExcludeAttributeProcessorType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.attribute_to_exclude = attribute_to_exclude + self_.type = type diff --git a/datadog_api_client/v1/model/logs_exclude_attribute_processor_type.py b/datadog_api_client/v1/model/logs_exclude_attribute_processor_type.py new file mode 100644 index 0000000000..32c87e5c72 --- /dev/null +++ b/datadog_api_client/v1/model/logs_exclude_attribute_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsExcludeAttributeProcessorType(ModelSimple): + """ + Type of logs exclude attribute processor. + + :param value: If omitted defaults to "exclude-attribute". Must be one of ["exclude-attribute"]. + :type value: str + """ + + allowed_values = { + "exclude-attribute", + } + EXCLUDE_ATTRIBUTE: ClassVar["LogsExcludeAttributeProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsExcludeAttributeProcessorType.EXCLUDE_ATTRIBUTE = LogsExcludeAttributeProcessorType("exclude-attribute") diff --git a/datadog_api_client/v1/model/logs_exclusion.py b/datadog_api_client/v1/model/logs_exclusion.py new file mode 100644 index 0000000000..29d001a255 --- /dev/null +++ b/datadog_api_client/v1/model/logs_exclusion.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_exclusion_filter import LogsExclusionFilter + +class LogsExclusion(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_exclusion_filter import LogsExclusionFilter + return { + "filter": (LogsExclusionFilter,), + "is_enabled": (bool,), + "name": (str,), + } + attribute_map = { + "filter": "filter", + "is_enabled": "is_enabled", + "name": "name", + } + + def __init__(self_, name: str, filter: Union[LogsExclusionFilter, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Represents the index exclusion filter object from configuration API. + + :param filter: Exclusion filter is defined by a query, a sampling rule, and a active/inactive toggle. + :type filter: LogsExclusionFilter, optional + + :param is_enabled: Whether or not the exclusion filter is active. + :type is_enabled: bool, optional + + :param name: Name of the index exclusion filter. + :type name: str + """ + if filter is not unset: + kwargs["filter"] = filter + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v1/model/logs_exclusion_filter.py b/datadog_api_client/v1/model/logs_exclusion_filter.py new file mode 100644 index 0000000000..ae9ab4e57a --- /dev/null +++ b/datadog_api_client/v1/model/logs_exclusion_filter.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsExclusionFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + "sample_attribute": (str,), + "sample_rate": (float,), + } + attribute_map = { + "query": "query", + "sample_attribute": "sample_attribute", + "sample_rate": "sample_rate", + } + + def __init__(self_, sample_rate: float, query: Union[str, UnsetType]=unset, sample_attribute: Union[str, UnsetType]=unset, **kwargs): + """ + Exclusion filter is defined by a query, a sampling rule, and a active/inactive toggle. + + :param query: Default query is ``*`` , meaning all logs flowing in the index would be excluded. + Scope down exclusion filter to only a subset of logs with a log query. + :type query: str, optional + + :param sample_attribute: Sample attribute to use for the sampling of logs going through this exclusion filter. + When set, only the logs with the specified attribute are sampled. + :type sample_attribute: str, optional + + :param sample_rate: Sample rate to apply to logs going through this exclusion filter, + a value of 1.0 excludes all logs matching the query. + :type sample_rate: float + """ + if query is not unset: + kwargs["query"] = query + if sample_attribute is not unset: + kwargs["sample_attribute"] = sample_attribute + super().__init__(kwargs) + + + self_.sample_rate = sample_rate diff --git a/datadog_api_client/v1/model/logs_filter.py b/datadog_api_client/v1/model/logs_filter.py new file mode 100644 index 0000000000..2cd3afe129 --- /dev/null +++ b/datadog_api_client/v1/model/logs_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + Filter for logs. + + :param query: The filter query. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_geo_ip_parser.py b/datadog_api_client/v1/model/logs_geo_ip_parser.py new file mode 100644 index 0000000000..aae8aa7c05 --- /dev/null +++ b/datadog_api_client/v1/model/logs_geo_ip_parser.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_geo_ip_parser_type import LogsGeoIPParserType + +class LogsGeoIPParser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_geo_ip_parser_type import LogsGeoIPParserType + return { + "is_enabled": (bool,), + "name": (str,), + "sources": ([str],), + "target": (str,), + "type": (LogsGeoIPParserType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "sources": "sources", + "target": "target", + "type": "type", + } + + def __init__(self_, type: LogsGeoIPParserType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The GeoIP parser takes an IP address attribute and extracts if available + the Continent, Country, Subdivision, and City information in the target attribute path. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param target: Name of the parent attribute that contains all the extracted details from the ``sources``. + :type target: str + + :param type: Type of GeoIP parser. + :type type: LogsGeoIPParserType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + sources = kwargs.get("sources", ['network.client.ip']) + target = kwargs.get("target", "network.client.geoip") + + + self_.sources = sources + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_geo_ip_parser_type.py b/datadog_api_client/v1/model/logs_geo_ip_parser_type.py new file mode 100644 index 0000000000..1c29808bbd --- /dev/null +++ b/datadog_api_client/v1/model/logs_geo_ip_parser_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsGeoIPParserType(ModelSimple): + """ + Type of GeoIP parser. + + :param value: If omitted defaults to "geo-ip-parser". Must be one of ["geo-ip-parser"]. + :type value: str + """ + + allowed_values = { + "geo-ip-parser", + } + GEO_IP_PARSER: ClassVar["LogsGeoIPParserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsGeoIPParserType.GEO_IP_PARSER = LogsGeoIPParserType("geo-ip-parser") diff --git a/datadog_api_client/v1/model/logs_grok_parser.py b/datadog_api_client/v1/model/logs_grok_parser.py new file mode 100644 index 0000000000..4c37a6c94c --- /dev/null +++ b/datadog_api_client/v1/model/logs_grok_parser.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_grok_parser_rules import LogsGrokParserRules + from datadog_api_client.v1.model.logs_grok_parser_type import LogsGrokParserType + +class LogsGrokParser(ModelNormal): + validations = { + "samples": { + "max_items": 5, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_grok_parser_rules import LogsGrokParserRules + from datadog_api_client.v1.model.logs_grok_parser_type import LogsGrokParserType + return { + "grok": (LogsGrokParserRules,), + "is_enabled": (bool,), + "name": (str,), + "samples": ([str],), + "source": (str,), + "type": (LogsGrokParserType,), + } + attribute_map = { + "grok": "grok", + "is_enabled": "is_enabled", + "name": "name", + "samples": "samples", + "source": "source", + "type": "type", + } + + def __init__(self_, grok: LogsGrokParserRules, type: LogsGrokParserType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, samples: Union[List[str], UnsetType]=unset, **kwargs): + """ + Create custom grok rules to parse the full message or `a specific attribute of your raw event `_. + For more information, see the `parsing section `_. + + :param grok: Set of rules for the grok parser. + :type grok: LogsGrokParserRules + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param samples: List of sample logs to test this grok parser. + :type samples: [str], optional + + :param source: Name of the log attribute to parse. + :type source: str + + :param type: Type of logs grok parser. + :type type: LogsGrokParserType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if samples is not unset: + kwargs["samples"] = samples + super().__init__(kwargs) + source = kwargs.get("source", "message") + + + self_.grok = grok + self_.source = source + self_.type = type diff --git a/datadog_api_client/v1/model/logs_grok_parser_rules.py b/datadog_api_client/v1/model/logs_grok_parser_rules.py new file mode 100644 index 0000000000..184b062df0 --- /dev/null +++ b/datadog_api_client/v1/model/logs_grok_parser_rules.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsGrokParserRules(ModelNormal): + @cached_property + def openapi_types(_): + return { + "match_rules": (str,), + "support_rules": (str,), + } + attribute_map = { + "match_rules": "match_rules", + "support_rules": "support_rules", + } + + def __init__(self_, match_rules: str, support_rules: Union[str, UnsetType]=unset, **kwargs): + """ + Set of rules for the grok parser. + + :param match_rules: List of match rules for the grok parser, separated by a new line. + :type match_rules: str + + :param support_rules: List of support rules for the grok parser, separated by a new line. + :type support_rules: str, optional + """ + if support_rules is not unset: + kwargs["support_rules"] = support_rules + super().__init__(kwargs) + + + self_.match_rules = match_rules diff --git a/datadog_api_client/v1/model/logs_grok_parser_type.py b/datadog_api_client/v1/model/logs_grok_parser_type.py new file mode 100644 index 0000000000..2bdf037d13 --- /dev/null +++ b/datadog_api_client/v1/model/logs_grok_parser_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsGrokParserType(ModelSimple): + """ + Type of logs grok parser. + + :param value: If omitted defaults to "grok-parser". Must be one of ["grok-parser"]. + :type value: str + """ + + allowed_values = { + "grok-parser", + } + GROK_PARSER: ClassVar["LogsGrokParserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsGrokParserType.GROK_PARSER = LogsGrokParserType("grok-parser") diff --git a/datadog_api_client/v1/model/logs_index.py b/datadog_api_client/v1/model/logs_index.py new file mode 100644 index 0000000000..3d0e73f36a --- /dev/null +++ b/datadog_api_client/v1/model/logs_index.py @@ -0,0 +1,130 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_daily_limit_reset import LogsDailyLimitReset + from datadog_api_client.v1.model.logs_exclusion import LogsExclusion + from datadog_api_client.v1.model.logs_filter import LogsFilter + +class LogsIndex(ModelNormal): + validations = { + "daily_limit_warning_threshold_percentage": { + "inclusive_maximum": 99.99, + "inclusive_minimum": 50, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_daily_limit_reset import LogsDailyLimitReset + from datadog_api_client.v1.model.logs_exclusion import LogsExclusion + from datadog_api_client.v1.model.logs_filter import LogsFilter + return { + "daily_limit": (int,), + "daily_limit_reset": (LogsDailyLimitReset,), + "daily_limit_warning_threshold_percentage": (float,), + "exclusion_filters": ([LogsExclusion],), + "filter": (LogsFilter,), + "is_rate_limited": (bool,), + "name": (str,), + "num_flex_logs_retention_days": (int,), + "num_retention_days": (int,), + "tags": ([str],), + } + attribute_map = { + "daily_limit": "daily_limit", + "daily_limit_reset": "daily_limit_reset", + "daily_limit_warning_threshold_percentage": "daily_limit_warning_threshold_percentage", + "exclusion_filters": "exclusion_filters", + "filter": "filter", + "is_rate_limited": "is_rate_limited", + "name": "name", + "num_flex_logs_retention_days": "num_flex_logs_retention_days", + "num_retention_days": "num_retention_days", + "tags": "tags", + } + read_only_vars = { + "is_rate_limited", + } + + def __init__(self_, filter: LogsFilter, name: str, daily_limit: Union[int, UnsetType]=unset, daily_limit_reset: Union[LogsDailyLimitReset, UnsetType]=unset, daily_limit_warning_threshold_percentage: Union[float, UnsetType]=unset, exclusion_filters: Union[List[LogsExclusion], UnsetType]=unset, is_rate_limited: Union[bool, UnsetType]=unset, num_flex_logs_retention_days: Union[int, UnsetType]=unset, num_retention_days: Union[int, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object describing a Datadog Log index. + + :param daily_limit: The number of log events you can send in this index per day before you are rate-limited. + :type daily_limit: int, optional + + :param daily_limit_reset: Object containing options to override the default daily limit reset time. + :type daily_limit_reset: LogsDailyLimitReset, optional + + :param daily_limit_warning_threshold_percentage: A percentage threshold of the daily quota at which a Datadog warning event is generated. + :type daily_limit_warning_threshold_percentage: float, optional + + :param exclusion_filters: An array of exclusion objects. The logs are tested against the query of each filter, + following the order of the array. Only the first matching active exclusion matters, + others (if any) are ignored. + :type exclusion_filters: [LogsExclusion], optional + + :param filter: Filter for logs. + :type filter: LogsFilter + + :param is_rate_limited: A boolean stating if the index is rate limited, meaning more logs than the daily limit have been sent. + Rate limit is reset every-day at 2pm UTC. + :type is_rate_limited: bool, optional + + :param name: The name of the index. + :type name: str + + :param num_flex_logs_retention_days: The total number of days logs are stored in Standard and Flex Tier before being deleted from the index. + If Standard Tier is enabled on this index, logs are first retained in Standard Tier for the number of days specified through ``num_retention_days`` , + and then stored in Flex Tier until the number of days specified in ``num_flex_logs_retention_days`` is reached. + The available values depend on retention plans specified in your organization's contract/subscriptions. + :type num_flex_logs_retention_days: int, optional + + :param num_retention_days: The number of days logs are stored in Standard Tier before aging into the Flex Tier or being deleted from the index. + The available values depend on retention plans specified in your organization's contract/subscriptions. + :type num_retention_days: int, optional + + :param tags: A list of tags associated with the index. Tags must be in ``key:value`` format. + :type tags: [str], optional + """ + if daily_limit is not unset: + kwargs["daily_limit"] = daily_limit + if daily_limit_reset is not unset: + kwargs["daily_limit_reset"] = daily_limit_reset + if daily_limit_warning_threshold_percentage is not unset: + kwargs["daily_limit_warning_threshold_percentage"] = daily_limit_warning_threshold_percentage + if exclusion_filters is not unset: + kwargs["exclusion_filters"] = exclusion_filters + if is_rate_limited is not unset: + kwargs["is_rate_limited"] = is_rate_limited + if num_flex_logs_retention_days is not unset: + kwargs["num_flex_logs_retention_days"] = num_flex_logs_retention_days + if num_retention_days is not unset: + kwargs["num_retention_days"] = num_retention_days + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.filter = filter + self_.name = name diff --git a/datadog_api_client/v1/model/logs_index_list_response.py b/datadog_api_client/v1/model/logs_index_list_response.py new file mode 100644 index 0000000000..ec453b9200 --- /dev/null +++ b/datadog_api_client/v1/model/logs_index_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_index import LogsIndex + +class LogsIndexListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_index import LogsIndex + return { + "indexes": ([LogsIndex],), + } + attribute_map = { + "indexes": "indexes", + } + + def __init__(self_, indexes: Union[List[LogsIndex], UnsetType]=unset, **kwargs): + """ + Object with all Index configurations for a given organization. + + :param indexes: Array of Log index configurations. + :type indexes: [LogsIndex], optional + """ + if indexes is not unset: + kwargs["indexes"] = indexes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_index_update_request.py b/datadog_api_client/v1/model/logs_index_update_request.py new file mode 100644 index 0000000000..4f457cf368 --- /dev/null +++ b/datadog_api_client/v1/model/logs_index_update_request.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_daily_limit_reset import LogsDailyLimitReset + from datadog_api_client.v1.model.logs_exclusion import LogsExclusion + from datadog_api_client.v1.model.logs_filter import LogsFilter + +class LogsIndexUpdateRequest(ModelNormal): + validations = { + "daily_limit_warning_threshold_percentage": { + "inclusive_maximum": 99.99, + "inclusive_minimum": 50, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_daily_limit_reset import LogsDailyLimitReset + from datadog_api_client.v1.model.logs_exclusion import LogsExclusion + from datadog_api_client.v1.model.logs_filter import LogsFilter + return { + "daily_limit": (int,), + "daily_limit_reset": (LogsDailyLimitReset,), + "daily_limit_warning_threshold_percentage": (float,), + "disable_daily_limit": (bool,), + "exclusion_filters": ([LogsExclusion],), + "filter": (LogsFilter,), + "num_flex_logs_retention_days": (int,), + "num_retention_days": (int,), + "tags": ([str],), + } + attribute_map = { + "daily_limit": "daily_limit", + "daily_limit_reset": "daily_limit_reset", + "daily_limit_warning_threshold_percentage": "daily_limit_warning_threshold_percentage", + "disable_daily_limit": "disable_daily_limit", + "exclusion_filters": "exclusion_filters", + "filter": "filter", + "num_flex_logs_retention_days": "num_flex_logs_retention_days", + "num_retention_days": "num_retention_days", + "tags": "tags", + } + + def __init__(self_, filter: LogsFilter, daily_limit: Union[int, UnsetType]=unset, daily_limit_reset: Union[LogsDailyLimitReset, UnsetType]=unset, daily_limit_warning_threshold_percentage: Union[float, UnsetType]=unset, disable_daily_limit: Union[bool, UnsetType]=unset, exclusion_filters: Union[List[LogsExclusion], UnsetType]=unset, num_flex_logs_retention_days: Union[int, UnsetType]=unset, num_retention_days: Union[int, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object for updating a Datadog Log index. + + :param daily_limit: The number of log events you can send in this index per day before you are rate-limited. + :type daily_limit: int, optional + + :param daily_limit_reset: Object containing options to override the default daily limit reset time. + :type daily_limit_reset: LogsDailyLimitReset, optional + + :param daily_limit_warning_threshold_percentage: A percentage threshold of the daily quota at which a Datadog warning event is generated. + :type daily_limit_warning_threshold_percentage: float, optional + + :param disable_daily_limit: If true, sets the ``daily_limit`` value to null and the index is not limited on a daily basis (any + specified ``daily_limit`` value in the request is ignored). If false or omitted, the index's current + ``daily_limit`` is maintained. + :type disable_daily_limit: bool, optional + + :param exclusion_filters: An array of exclusion objects. The logs are tested against the query of each filter, + following the order of the array. Only the first matching active exclusion matters, + others (if any) are ignored. + :type exclusion_filters: [LogsExclusion], optional + + :param filter: Filter for logs. + :type filter: LogsFilter + + :param num_flex_logs_retention_days: The total number of days logs are stored in Standard and Flex Tier before being deleted from the index. + If Standard Tier is enabled on this index, logs are first retained in Standard Tier for the number of days specified through ``num_retention_days`` , + and then stored in Flex Tier until the number of days specified in ``num_flex_logs_retention_days`` is reached. + The available values depend on retention plans specified in your organization's contract/subscriptions. + + **Note** : Changing this value affects all logs already in this index. It may also affect billing. + :type num_flex_logs_retention_days: int, optional + + :param num_retention_days: The number of days logs are stored in Standard Tier before aging into the Flex Tier or being deleted from the index. + The available values depend on retention plans specified in your organization's contract/subscriptions. + + **Note** : Changing this value affects all logs already in this index. It may also affect billing. + :type num_retention_days: int, optional + + :param tags: A list of tags associated with the index. Tags must be in ``key:value`` format. + :type tags: [str], optional + """ + if daily_limit is not unset: + kwargs["daily_limit"] = daily_limit + if daily_limit_reset is not unset: + kwargs["daily_limit_reset"] = daily_limit_reset + if daily_limit_warning_threshold_percentage is not unset: + kwargs["daily_limit_warning_threshold_percentage"] = daily_limit_warning_threshold_percentage + if disable_daily_limit is not unset: + kwargs["disable_daily_limit"] = disable_daily_limit + if exclusion_filters is not unset: + kwargs["exclusion_filters"] = exclusion_filters + if num_flex_logs_retention_days is not unset: + kwargs["num_flex_logs_retention_days"] = num_flex_logs_retention_days + if num_retention_days is not unset: + kwargs["num_retention_days"] = num_retention_days + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.filter = filter diff --git a/datadog_api_client/v1/model/logs_indexes_order.py b/datadog_api_client/v1/model/logs_indexes_order.py new file mode 100644 index 0000000000..dab76a8877 --- /dev/null +++ b/datadog_api_client/v1/model/logs_indexes_order.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsIndexesOrder(ModelNormal): + @cached_property + def openapi_types(_): + return { + "index_names": ([str],), + } + attribute_map = { + "index_names": "index_names", + } + + def __init__(self_, index_names: List[str], **kwargs): + """ + Object containing the ordered list of log index names. + + :param index_names: Array of strings identifying by their name(s) the index(es) of your organization. + Logs are tested against the query filter of each index one by one, following the order of the array. + Logs are eventually stored in the first matching index. + :type index_names: [str] + """ + super().__init__(kwargs) + + + self_.index_names = index_names diff --git a/datadog_api_client/v1/model/logs_list_request.py b/datadog_api_client/v1/model/logs_list_request.py new file mode 100644 index 0000000000..bdcd1e4b6d --- /dev/null +++ b/datadog_api_client/v1/model/logs_list_request.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_sort import LogsSort + from datadog_api_client.v1.model.logs_list_request_time import LogsListRequestTime + +class LogsListRequest(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_sort import LogsSort + from datadog_api_client.v1.model.logs_list_request_time import LogsListRequestTime + return { + "index": (str,), + "limit": (int,), + "query": (str,), + "sort": (LogsSort,), + "start_at": (str,), + "time": (LogsListRequestTime,), + } + attribute_map = { + "index": "index", + "limit": "limit", + "query": "query", + "sort": "sort", + "start_at": "startAt", + "time": "time", + } + + def __init__(self_, time: LogsListRequestTime, index: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, sort: Union[LogsSort, UnsetType]=unset, start_at: Union[str, UnsetType]=unset, **kwargs): + """ + Object to send with the request to retrieve a list of logs from your Organization. + + :param index: The log index on which the request is performed. For multi-index organizations, + the default is all live indexes. Historical indexes of rehydrated logs must be specified. + :type index: str, optional + + :param limit: Number of logs return in the response. + :type limit: int, optional + + :param query: The search query - following the log search syntax. + :type query: str, optional + + :param sort: Time-ascending ``asc`` or time-descending ``desc`` results. + :type sort: LogsSort, optional + + :param start_at: Hash identifier of the first log to return in the list, available in a log ``id`` attribute. + This parameter is used for the pagination feature. + + **Note** : This parameter is ignored if the corresponding log + is out of the scope of the specified time window. + :type start_at: str, optional + + :param time: Timeframe to retrieve the log from. + :type time: LogsListRequestTime + """ + if index is not unset: + kwargs["index"] = index + if limit is not unset: + kwargs["limit"] = limit + if query is not unset: + kwargs["query"] = query + if sort is not unset: + kwargs["sort"] = sort + if start_at is not unset: + kwargs["start_at"] = start_at + super().__init__(kwargs) + + + self_.time = time diff --git a/datadog_api_client/v1/model/logs_list_request_time.py b/datadog_api_client/v1/model/logs_list_request_time.py new file mode 100644 index 0000000000..3374b86a70 --- /dev/null +++ b/datadog_api_client/v1/model/logs_list_request_time.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsListRequestTime(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (datetime,), + "timezone": (str,), + "to": (datetime,), + } + attribute_map = { + "_from": "from", + "timezone": "timezone", + "to": "to", + } + + def __init__(self_, _from: datetime, to: datetime, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Timeframe to retrieve the log from. + + :param _from: Minimum timestamp for requested logs. + :type _from: datetime + + :param timezone: Timezone can be specified both as an offset (for example "UTC+03:00") + or a regional zone (for example "Europe/Paris"). + :type timezone: str, optional + + :param to: Maximum timestamp for requested logs. + :type to: datetime + """ + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + + self_._from = _from + self_.to = to diff --git a/datadog_api_client/v1/model/logs_list_response.py b/datadog_api_client/v1/model/logs_list_response.py new file mode 100644 index 0000000000..f7d26a874a --- /dev/null +++ b/datadog_api_client/v1/model/logs_list_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log import Log + +class LogsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log import Log + return { + "logs": ([Log],), + "next_log_id": (str, none_type), + "status": (str,), + } + attribute_map = { + "logs": "logs", + "next_log_id": "nextLogId", + "status": "status", + } + + def __init__(self_, logs: Union[List[Log], UnsetType]=unset, next_log_id: Union[str, none_type, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Response object with all logs matching the request and pagination information. + + :param logs: Array of logs matching the request and the ``nextLogId`` if sent. + :type logs: [Log], optional + + :param next_log_id: Hash identifier of the next log to return in the list. + This parameter is used for the pagination feature. + :type next_log_id: str, none_type, optional + + :param status: Status of the response. + :type status: str, optional + """ + if logs is not unset: + kwargs["logs"] = logs + if next_log_id is not unset: + kwargs["next_log_id"] = next_log_id + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_lookup_processor.py b/datadog_api_client/v1/model/logs_lookup_processor.py new file mode 100644 index 0000000000..d6173ef417 --- /dev/null +++ b/datadog_api_client/v1/model/logs_lookup_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_lookup_processor_type import LogsLookupProcessorType + +class LogsLookupProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_lookup_processor_type import LogsLookupProcessorType + return { + "default_lookup": (str,), + "is_enabled": (bool,), + "lookup_table": ([str],), + "name": (str,), + "source": (str,), + "target": (str,), + "type": (LogsLookupProcessorType,), + } + attribute_map = { + "default_lookup": "default_lookup", + "is_enabled": "is_enabled", + "lookup_table": "lookup_table", + "name": "name", + "source": "source", + "target": "target", + "type": "type", + } + + def __init__(self_, lookup_table: List[str], source: str, target: str, type: LogsLookupProcessorType, default_lookup: Union[str, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Use the Lookup Processor to define a mapping between a log attribute + and a human readable value saved in the processors mapping table. + For example, you can use the Lookup Processor to map an internal service ID + into a human readable service name. Alternatively, you could also use it to check + if the MAC address that just attempted to connect to the production + environment belongs to your list of stolen machines. + + :param default_lookup: Value to set the target attribute if the source value is not found in the list. + :type default_lookup: str, optional + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param lookup_table: Mapping table of values for the source attribute and their associated target attribute values, + formatted as ``["source_key1,target_value1", "source_key2,target_value2"]`` + :type lookup_table: [str] + + :param name: Name of the processor. + :type name: str, optional + + :param source: Source attribute used to perform the lookup. + :type source: str + + :param target: Name of the attribute that contains the corresponding value in the mapping list + or the ``default_lookup`` if not found in the mapping list. + :type target: str + + :param type: Type of logs lookup processor. + :type type: LogsLookupProcessorType + """ + if default_lookup is not unset: + kwargs["default_lookup"] = default_lookup + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.lookup_table = lookup_table + self_.source = source + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_lookup_processor_type.py b/datadog_api_client/v1/model/logs_lookup_processor_type.py new file mode 100644 index 0000000000..4de57f2ffa --- /dev/null +++ b/datadog_api_client/v1/model/logs_lookup_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsLookupProcessorType(ModelSimple): + """ + Type of logs lookup processor. + + :param value: If omitted defaults to "lookup-processor". Must be one of ["lookup-processor"]. + :type value: str + """ + + allowed_values = { + "lookup-processor", + } + LOOKUP_PROCESSOR: ClassVar["LogsLookupProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsLookupProcessorType.LOOKUP_PROCESSOR = LogsLookupProcessorType("lookup-processor") diff --git a/datadog_api_client/v1/model/logs_message_remapper.py b/datadog_api_client/v1/model/logs_message_remapper.py new file mode 100644 index 0000000000..4f9dc78594 --- /dev/null +++ b/datadog_api_client/v1/model/logs_message_remapper.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_message_remapper_type import LogsMessageRemapperType + +class LogsMessageRemapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_message_remapper_type import LogsMessageRemapperType + return { + "is_enabled": (bool,), + "name": (str,), + "sources": ([str],), + "type": (LogsMessageRemapperType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "sources": "sources", + "type": "type", + } + + def __init__(self_, type: LogsMessageRemapperType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The message is a key attribute in Datadog. + It is displayed in the message column of the Log Explorer and you can do full string search on it. + Use this Processor to define one or more attributes as the official log message. + + **Note:** If multiple log message remapper processors can be applied to a given log, + only the first one (according to the pipeline order) is taken into account. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param type: Type of logs message remapper. + :type type: LogsMessageRemapperType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + sources = kwargs.get("sources", ['msg']) + + + self_.sources = sources + self_.type = type diff --git a/datadog_api_client/v1/model/logs_message_remapper_type.py b/datadog_api_client/v1/model/logs_message_remapper_type.py new file mode 100644 index 0000000000..625f2292f3 --- /dev/null +++ b/datadog_api_client/v1/model/logs_message_remapper_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsMessageRemapperType(ModelSimple): + """ + Type of logs message remapper. + + :param value: If omitted defaults to "message-remapper". Must be one of ["message-remapper"]. + :type value: str + """ + + allowed_values = { + "message-remapper", + } + MESSAGE_REMAPPER: ClassVar["LogsMessageRemapperType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsMessageRemapperType.MESSAGE_REMAPPER = LogsMessageRemapperType("message-remapper") diff --git a/datadog_api_client/v1/model/logs_pipeline.py b/datadog_api_client/v1/model/logs_pipeline.py new file mode 100644 index 0000000000..a01a42bd11 --- /dev/null +++ b/datadog_api_client/v1/model/logs_pipeline.py @@ -0,0 +1,137 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_filter import LogsFilter + from datadog_api_client.v1.model.logs_processor import LogsProcessor + from datadog_api_client.v1.model.logs_grok_parser import LogsGrokParser + from datadog_api_client.v1.model.logs_date_remapper import LogsDateRemapper + from datadog_api_client.v1.model.logs_status_remapper import LogsStatusRemapper + from datadog_api_client.v1.model.logs_service_remapper import LogsServiceRemapper + from datadog_api_client.v1.model.logs_message_remapper import LogsMessageRemapper + from datadog_api_client.v1.model.logs_attribute_remapper import LogsAttributeRemapper + from datadog_api_client.v1.model.logs_url_parser import LogsURLParser + from datadog_api_client.v1.model.logs_user_agent_parser import LogsUserAgentParser + from datadog_api_client.v1.model.logs_category_processor import LogsCategoryProcessor + from datadog_api_client.v1.model.logs_arithmetic_processor import LogsArithmeticProcessor + from datadog_api_client.v1.model.logs_string_builder_processor import LogsStringBuilderProcessor + from datadog_api_client.v1.model.logs_pipeline_processor import LogsPipelineProcessor + from datadog_api_client.v1.model.logs_geo_ip_parser import LogsGeoIPParser + from datadog_api_client.v1.model.logs_lookup_processor import LogsLookupProcessor + from datadog_api_client.v1.model.reference_table_logs_lookup_processor import ReferenceTableLogsLookupProcessor + from datadog_api_client.v1.model.logs_trace_remapper import LogsTraceRemapper + from datadog_api_client.v1.model.logs_span_remapper import LogsSpanRemapper + from datadog_api_client.v1.model.logs_array_processor import LogsArrayProcessor + from datadog_api_client.v1.model.logs_decoder_processor import LogsDecoderProcessor + from datadog_api_client.v1.model.logs_schema_processor import LogsSchemaProcessor + from datadog_api_client.v1.model.logs_exclude_attribute_processor import LogsExcludeAttributeProcessor + from datadog_api_client.v1.model.logs_array_map_processor import LogsArrayMapProcessor + +class LogsPipeline(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_filter import LogsFilter + from datadog_api_client.v1.model.logs_processor import LogsProcessor + return { + "description": (str,), + "filter": (LogsFilter,), + "id": (str,), + "is_enabled": (bool,), + "is_read_only": (bool,), + "name": (str,), + "processors": ([LogsProcessor],), + "tags": ([str],), + "type": (str,), + } + attribute_map = { + "description": "description", + "filter": "filter", + "id": "id", + "is_enabled": "is_enabled", + "is_read_only": "is_read_only", + "name": "name", + "processors": "processors", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "id", + "is_read_only", + "type", + } + + def __init__(self_, name: str, description: Union[str, UnsetType]=unset, filter: Union[LogsFilter, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, is_read_only: Union[bool, UnsetType]=unset, processors: Union[List[Union[LogsProcessor, LogsGrokParser, LogsDateRemapper, LogsStatusRemapper, LogsServiceRemapper, LogsMessageRemapper, LogsAttributeRemapper, LogsURLParser, LogsUserAgentParser, LogsCategoryProcessor, LogsArithmeticProcessor, LogsStringBuilderProcessor, LogsPipelineProcessor, LogsGeoIPParser, LogsLookupProcessor, ReferenceTableLogsLookupProcessor, LogsTraceRemapper, LogsSpanRemapper, LogsArrayProcessor, LogsDecoderProcessor, LogsSchemaProcessor, LogsExcludeAttributeProcessor, LogsArrayMapProcessor]], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Pipelines and processors operate on incoming logs, + parsing and transforming them into structured attributes for easier querying. + + **Note** : These endpoints are only available for admin users. + Make sure to use an application key created by an admin. + + :param description: A description of the pipeline. + :type description: str, optional + + :param filter: Filter for logs. + :type filter: LogsFilter, optional + + :param id: ID of the pipeline. + :type id: str, optional + + :param is_enabled: Whether or not the pipeline is enabled. + :type is_enabled: bool, optional + + :param is_read_only: Whether or not the pipeline can be edited. + :type is_read_only: bool, optional + + :param name: Name of the pipeline. + :type name: str + + :param processors: Ordered list of processors in this pipeline. + :type processors: [LogsProcessor], optional + + :param tags: A list of tags associated with the pipeline. + :type tags: [str], optional + + :param type: Type of pipeline. + :type type: str, optional + """ + if description is not unset: + kwargs["description"] = description + if filter is not unset: + kwargs["filter"] = filter + if id is not unset: + kwargs["id"] = id + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if is_read_only is not unset: + kwargs["is_read_only"] = is_read_only + if processors is not unset: + kwargs["processors"] = processors + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v1/model/logs_pipeline_list.py b/datadog_api_client/v1/model/logs_pipeline_list.py new file mode 100644 index 0000000000..0d0b149655 --- /dev/null +++ b/datadog_api_client/v1/model/logs_pipeline_list.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsPipelineList(ModelSimple): + """ + Array of all log pipeline objects configured for the organization. + + + :type value: [LogsPipeline] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_pipeline import LogsPipeline + return { + "value": ([LogsPipeline],), + } diff --git a/datadog_api_client/v1/model/logs_pipeline_processor.py b/datadog_api_client/v1/model/logs_pipeline_processor.py new file mode 100644 index 0000000000..2d24308ccb --- /dev/null +++ b/datadog_api_client/v1/model/logs_pipeline_processor.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_filter import LogsFilter + from datadog_api_client.v1.model.logs_processor import LogsProcessor + from datadog_api_client.v1.model.logs_pipeline_processor_type import LogsPipelineProcessorType + from datadog_api_client.v1.model.logs_grok_parser import LogsGrokParser + from datadog_api_client.v1.model.logs_date_remapper import LogsDateRemapper + from datadog_api_client.v1.model.logs_status_remapper import LogsStatusRemapper + from datadog_api_client.v1.model.logs_service_remapper import LogsServiceRemapper + from datadog_api_client.v1.model.logs_message_remapper import LogsMessageRemapper + from datadog_api_client.v1.model.logs_attribute_remapper import LogsAttributeRemapper + from datadog_api_client.v1.model.logs_url_parser import LogsURLParser + from datadog_api_client.v1.model.logs_user_agent_parser import LogsUserAgentParser + from datadog_api_client.v1.model.logs_category_processor import LogsCategoryProcessor + from datadog_api_client.v1.model.logs_arithmetic_processor import LogsArithmeticProcessor + from datadog_api_client.v1.model.logs_string_builder_processor import LogsStringBuilderProcessor + from datadog_api_client.v1.model.logs_geo_ip_parser import LogsGeoIPParser + from datadog_api_client.v1.model.logs_lookup_processor import LogsLookupProcessor + from datadog_api_client.v1.model.reference_table_logs_lookup_processor import ReferenceTableLogsLookupProcessor + from datadog_api_client.v1.model.logs_trace_remapper import LogsTraceRemapper + from datadog_api_client.v1.model.logs_span_remapper import LogsSpanRemapper + from datadog_api_client.v1.model.logs_array_processor import LogsArrayProcessor + from datadog_api_client.v1.model.logs_decoder_processor import LogsDecoderProcessor + from datadog_api_client.v1.model.logs_schema_processor import LogsSchemaProcessor + from datadog_api_client.v1.model.logs_exclude_attribute_processor import LogsExcludeAttributeProcessor + from datadog_api_client.v1.model.logs_array_map_processor import LogsArrayMapProcessor + +class LogsPipelineProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_filter import LogsFilter + from datadog_api_client.v1.model.logs_processor import LogsProcessor + from datadog_api_client.v1.model.logs_pipeline_processor_type import LogsPipelineProcessorType + return { + "description": (str,), + "filter": (LogsFilter,), + "is_enabled": (bool,), + "name": (str,), + "processors": ([LogsProcessor],), + "tags": ([str],), + "type": (LogsPipelineProcessorType,), + } + attribute_map = { + "description": "description", + "filter": "filter", + "is_enabled": "is_enabled", + "name": "name", + "processors": "processors", + "tags": "tags", + "type": "type", + } + + def __init__(self_, type: LogsPipelineProcessorType, description: Union[str, UnsetType]=unset, filter: Union[LogsFilter, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, processors: Union[List[Union[LogsProcessor, LogsGrokParser, LogsDateRemapper, LogsStatusRemapper, LogsServiceRemapper, LogsMessageRemapper, LogsAttributeRemapper, LogsURLParser, LogsUserAgentParser, LogsCategoryProcessor, LogsArithmeticProcessor, LogsStringBuilderProcessor, LogsPipelineProcessor, LogsGeoIPParser, LogsLookupProcessor, ReferenceTableLogsLookupProcessor, LogsTraceRemapper, LogsSpanRemapper, LogsArrayProcessor, LogsDecoderProcessor, LogsSchemaProcessor, LogsExcludeAttributeProcessor, LogsArrayMapProcessor]], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Nested Pipelines are pipelines within a pipeline. Use Nested Pipelines to split the processing into two steps. + For example, first use a high-level filtering such as team and then a second level of filtering based on the + integration, service, or any other tag or attribute. + + A pipeline can contain Nested Pipelines and Processors whereas a Nested Pipeline can only contain Processors. + + :param description: A description of the pipeline. + :type description: str, optional + + :param filter: Filter for logs. + :type filter: LogsFilter, optional + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param processors: Ordered list of processors in this pipeline. + :type processors: [LogsProcessor], optional + + :param tags: A list of tags associated with the pipeline. + :type tags: [str], optional + + :param type: Type of logs pipeline processor. + :type type: LogsPipelineProcessorType + """ + if description is not unset: + kwargs["description"] = description + if filter is not unset: + kwargs["filter"] = filter + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if processors is not unset: + kwargs["processors"] = processors + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/logs_pipeline_processor_type.py b/datadog_api_client/v1/model/logs_pipeline_processor_type.py new file mode 100644 index 0000000000..0d4eb60143 --- /dev/null +++ b/datadog_api_client/v1/model/logs_pipeline_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsPipelineProcessorType(ModelSimple): + """ + Type of logs pipeline processor. + + :param value: If omitted defaults to "pipeline". Must be one of ["pipeline"]. + :type value: str + """ + + allowed_values = { + "pipeline", + } + PIPELINE: ClassVar["LogsPipelineProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsPipelineProcessorType.PIPELINE = LogsPipelineProcessorType("pipeline") diff --git a/datadog_api_client/v1/model/logs_pipelines_order.py b/datadog_api_client/v1/model/logs_pipelines_order.py new file mode 100644 index 0000000000..77b0ad9006 --- /dev/null +++ b/datadog_api_client/v1/model/logs_pipelines_order.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsPipelinesOrder(ModelNormal): + @cached_property + def openapi_types(_): + return { + "pipeline_ids": ([str],), + } + attribute_map = { + "pipeline_ids": "pipeline_ids", + } + + def __init__(self_, pipeline_ids: List[str], **kwargs): + """ + Object containing the ordered list of pipeline IDs. + + :param pipeline_ids: Ordered Array of ```` strings, the order of pipeline IDs in the array + define the overall Pipelines order for Datadog. + :type pipeline_ids: [str] + """ + super().__init__(kwargs) + + + self_.pipeline_ids = pipeline_ids diff --git a/datadog_api_client/v1/model/logs_processor.py b/datadog_api_client/v1/model/logs_processor.py new file mode 100644 index 0000000000..3fe25b97d9 --- /dev/null +++ b/datadog_api_client/v1/model/logs_processor.py @@ -0,0 +1,192 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsProcessor(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Definition of a logs processor. + + :param grok: Set of rules for the grok parser. + :type grok: LogsGrokParserRules + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param samples: List of sample logs to test this grok parser. + :type samples: [str], optional + + :param source: Name of the log attribute to parse. + :type source: str + + :param type: Type of logs grok parser. + :type type: LogsGrokParserType + + :param sources: Array of source attributes. + :type sources: [str] + + :param override_on_conflict: Whether to override the target element if it's already set. + :type override_on_conflict: bool, optional + + :param preserve_source: Remove or preserve the remapped source element. + :type preserve_source: bool, optional + + :param source_type: Defines if the sources are from log `attribute` or `tag`. + :type source_type: str, optional + + :param target: Final attribute or tag name to remap the sources to. + :type target: str + + :param target_format: If the `target_type` of the remapper is `attribute`, try to cast the value to a new specific type. + If the cast is not possible, the original type is kept. `string`, `integer`, or `double` are the possible types. + If the `target_type` is `tag`, this parameter may not be specified. + :type target_format: TargetFormatType, optional + + :param target_type: Defines if the final attribute or tag name is from log `attribute` or `tag`. + :type target_type: str, optional + + :param normalize_ending_slashes: Normalize the ending slashes or not. + :type normalize_ending_slashes: bool, none_type, optional + + :param is_encoded: Define if the source attribute is URL encoded or not. + :type is_encoded: bool, optional + + :param categories: Array of filters to match or not a log and their + corresponding `name` to assign a custom value to the log. + :type categories: [LogsCategoryProcessorCategory] + + :param expression: Arithmetic operation between one or more log attributes. + :type expression: str + + :param is_replace_missing: If `true`, it replaces all missing attributes of expression by `0`, `false` + skip the operation if an attribute is missing. + :type is_replace_missing: bool, optional + + :param template: A formula with one or more attributes and raw text. + :type template: str + + :param description: A description of the pipeline. + :type description: str, optional + + :param filter: Filter for logs. + :type filter: LogsFilter, optional + + :param processors: Ordered list of processors in this pipeline. + :type processors: [LogsProcessor], optional + + :param tags: A list of tags associated with the pipeline. + :type tags: [str], optional + + :param default_lookup: Value to set the target attribute if the source value is not found in the list. + :type default_lookup: str, optional + + :param lookup_table: Mapping table of values for the source attribute and their associated target attribute values, + formatted as `["source_key1,target_value1", "source_key2,target_value2"]` + :type lookup_table: [str] + + :param lookup_enrichment_table: Name of the Reference Table for the source attribute and their associated target attribute values. + :type lookup_enrichment_table: str + + :param operation: Configuration of the array processor operation to perform. + :type operation: LogsArrayProcessorOperation + + :param binary_to_text_encoding: The encoding used to represent the binary data. + :type binary_to_text_encoding: LogsDecoderProcessorBinaryToTextEncoding + + :param input_representation: The original representation of input string. + :type input_representation: LogsDecoderProcessorInputRepresentation + + :param mappers: The `LogsSchemaProcessor` `mappers`. + :type mappers: [LogsSchemaMapper] + + :param schema: Configuration of the schema data to use. + :type schema: LogsSchemaData + + :param attribute_to_exclude: Name of the log attribute to remove from the log event. + :type attribute_to_exclude: str + """ + 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.v1.model.logs_grok_parser import LogsGrokParser + from datadog_api_client.v1.model.logs_date_remapper import LogsDateRemapper + from datadog_api_client.v1.model.logs_status_remapper import LogsStatusRemapper + from datadog_api_client.v1.model.logs_service_remapper import LogsServiceRemapper + from datadog_api_client.v1.model.logs_message_remapper import LogsMessageRemapper + from datadog_api_client.v1.model.logs_attribute_remapper import LogsAttributeRemapper + from datadog_api_client.v1.model.logs_url_parser import LogsURLParser + from datadog_api_client.v1.model.logs_user_agent_parser import LogsUserAgentParser + from datadog_api_client.v1.model.logs_category_processor import LogsCategoryProcessor + from datadog_api_client.v1.model.logs_arithmetic_processor import LogsArithmeticProcessor + from datadog_api_client.v1.model.logs_string_builder_processor import LogsStringBuilderProcessor + from datadog_api_client.v1.model.logs_pipeline_processor import LogsPipelineProcessor + from datadog_api_client.v1.model.logs_geo_ip_parser import LogsGeoIPParser + from datadog_api_client.v1.model.logs_lookup_processor import LogsLookupProcessor + from datadog_api_client.v1.model.reference_table_logs_lookup_processor import ReferenceTableLogsLookupProcessor + from datadog_api_client.v1.model.logs_trace_remapper import LogsTraceRemapper + from datadog_api_client.v1.model.logs_span_remapper import LogsSpanRemapper + from datadog_api_client.v1.model.logs_array_processor import LogsArrayProcessor + from datadog_api_client.v1.model.logs_decoder_processor import LogsDecoderProcessor + from datadog_api_client.v1.model.logs_schema_processor import LogsSchemaProcessor + from datadog_api_client.v1.model.logs_exclude_attribute_processor import LogsExcludeAttributeProcessor + from datadog_api_client.v1.model.logs_array_map_processor import LogsArrayMapProcessor + return { + "oneOf": [ + LogsGrokParser, + LogsDateRemapper, + LogsStatusRemapper, + LogsServiceRemapper, + LogsMessageRemapper, + LogsAttributeRemapper, + LogsURLParser, + LogsUserAgentParser, + LogsCategoryProcessor, + LogsArithmeticProcessor, + LogsStringBuilderProcessor, + LogsPipelineProcessor, + LogsGeoIPParser, + LogsLookupProcessor, + ReferenceTableLogsLookupProcessor, + LogsTraceRemapper, + LogsSpanRemapper, + LogsArrayProcessor, + LogsDecoderProcessor, + LogsSchemaProcessor, + LogsExcludeAttributeProcessor, + LogsArrayMapProcessor, + ], + } diff --git a/datadog_api_client/v1/model/logs_query_compute.py b/datadog_api_client/v1/model/logs_query_compute.py new file mode 100644 index 0000000000..a9eea80f1e --- /dev/null +++ b/datadog_api_client/v1/model/logs_query_compute.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsQueryCompute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aggregation": (str,), + "facet": (str,), + "interval": (int,), + } + attribute_map = { + "aggregation": "aggregation", + "facet": "facet", + "interval": "interval", + } + + def __init__(self_, aggregation: str, facet: Union[str, UnsetType]=unset, interval: Union[int, UnsetType]=unset, **kwargs): + """ + Define computation for a log query. + + :param aggregation: The aggregation method. + :type aggregation: str + + :param facet: Facet name. + :type facet: str, optional + + :param interval: Define a time interval in seconds. + :type interval: int, optional + """ + if facet is not unset: + kwargs["facet"] = facet + if interval is not unset: + kwargs["interval"] = interval + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v1/model/logs_retention_agg_sum_usage.py b/datadog_api_client/v1/model/logs_retention_agg_sum_usage.py new file mode 100644 index 0000000000..27adeb3f65 --- /dev/null +++ b/datadog_api_client/v1/model/logs_retention_agg_sum_usage.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsRetentionAggSumUsage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "logs_indexed_logs_usage_agg_sum": (int,), + "logs_live_indexed_logs_usage_agg_sum": (int,), + "logs_rehydrated_indexed_logs_usage_agg_sum": (int,), + "retention": (str,), + } + attribute_map = { + "logs_indexed_logs_usage_agg_sum": "logs_indexed_logs_usage_agg_sum", + "logs_live_indexed_logs_usage_agg_sum": "logs_live_indexed_logs_usage_agg_sum", + "logs_rehydrated_indexed_logs_usage_agg_sum": "logs_rehydrated_indexed_logs_usage_agg_sum", + "retention": "retention", + } + + def __init__(self_, logs_indexed_logs_usage_agg_sum: Union[int, UnsetType]=unset, logs_live_indexed_logs_usage_agg_sum: Union[int, UnsetType]=unset, logs_rehydrated_indexed_logs_usage_agg_sum: Union[int, UnsetType]=unset, retention: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing indexed logs usage aggregated across organizations and months for a retention period. + + :param logs_indexed_logs_usage_agg_sum: Total indexed logs for this retention period. + :type logs_indexed_logs_usage_agg_sum: int, optional + + :param logs_live_indexed_logs_usage_agg_sum: Live indexed logs for this retention period. + :type logs_live_indexed_logs_usage_agg_sum: int, optional + + :param logs_rehydrated_indexed_logs_usage_agg_sum: Rehydrated indexed logs for this retention period. + :type logs_rehydrated_indexed_logs_usage_agg_sum: int, optional + + :param retention: The retention period in days or "custom" for all custom retention periods. + :type retention: str, optional + """ + if logs_indexed_logs_usage_agg_sum is not unset: + kwargs["logs_indexed_logs_usage_agg_sum"] = logs_indexed_logs_usage_agg_sum + if logs_live_indexed_logs_usage_agg_sum is not unset: + kwargs["logs_live_indexed_logs_usage_agg_sum"] = logs_live_indexed_logs_usage_agg_sum + if logs_rehydrated_indexed_logs_usage_agg_sum is not unset: + kwargs["logs_rehydrated_indexed_logs_usage_agg_sum"] = logs_rehydrated_indexed_logs_usage_agg_sum + if retention is not unset: + kwargs["retention"] = retention + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_retention_sum_usage.py b/datadog_api_client/v1/model/logs_retention_sum_usage.py new file mode 100644 index 0000000000..beba9c5c16 --- /dev/null +++ b/datadog_api_client/v1/model/logs_retention_sum_usage.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsRetentionSumUsage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "logs_indexed_logs_usage_sum": (int,), + "logs_live_indexed_logs_usage_sum": (int,), + "logs_rehydrated_indexed_logs_usage_sum": (int,), + "retention": (str,), + } + attribute_map = { + "logs_indexed_logs_usage_sum": "logs_indexed_logs_usage_sum", + "logs_live_indexed_logs_usage_sum": "logs_live_indexed_logs_usage_sum", + "logs_rehydrated_indexed_logs_usage_sum": "logs_rehydrated_indexed_logs_usage_sum", + "retention": "retention", + } + + def __init__(self_, logs_indexed_logs_usage_sum: Union[int, UnsetType]=unset, logs_live_indexed_logs_usage_sum: Union[int, UnsetType]=unset, logs_rehydrated_indexed_logs_usage_sum: Union[int, UnsetType]=unset, retention: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing indexed logs usage grouped by retention period and summed. + + :param logs_indexed_logs_usage_sum: Total indexed logs for this retention period. + :type logs_indexed_logs_usage_sum: int, optional + + :param logs_live_indexed_logs_usage_sum: Live indexed logs for this retention period. + :type logs_live_indexed_logs_usage_sum: int, optional + + :param logs_rehydrated_indexed_logs_usage_sum: Rehydrated indexed logs for this retention period. + :type logs_rehydrated_indexed_logs_usage_sum: int, optional + + :param retention: The retention period in days or "custom" for all custom retention periods. + :type retention: str, optional + """ + if logs_indexed_logs_usage_sum is not unset: + kwargs["logs_indexed_logs_usage_sum"] = logs_indexed_logs_usage_sum + if logs_live_indexed_logs_usage_sum is not unset: + kwargs["logs_live_indexed_logs_usage_sum"] = logs_live_indexed_logs_usage_sum + if logs_rehydrated_indexed_logs_usage_sum is not unset: + kwargs["logs_rehydrated_indexed_logs_usage_sum"] = logs_rehydrated_indexed_logs_usage_sum + if retention is not unset: + kwargs["retention"] = retention + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_schema_category_mapper.py b/datadog_api_client/v1/model/logs_schema_category_mapper.py new file mode 100644 index 0000000000..23ca273380 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_category_mapper.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_schema_category_mapper_category import LogsSchemaCategoryMapperCategory + from datadog_api_client.v1.model.logs_schema_category_mapper_fallback import LogsSchemaCategoryMapperFallback + from datadog_api_client.v1.model.logs_schema_category_mapper_targets import LogsSchemaCategoryMapperTargets + from datadog_api_client.v1.model.logs_schema_category_mapper_type import LogsSchemaCategoryMapperType + +class LogsSchemaCategoryMapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_schema_category_mapper_category import LogsSchemaCategoryMapperCategory + from datadog_api_client.v1.model.logs_schema_category_mapper_fallback import LogsSchemaCategoryMapperFallback + from datadog_api_client.v1.model.logs_schema_category_mapper_targets import LogsSchemaCategoryMapperTargets + from datadog_api_client.v1.model.logs_schema_category_mapper_type import LogsSchemaCategoryMapperType + return { + "categories": ([LogsSchemaCategoryMapperCategory],), + "fallback": (LogsSchemaCategoryMapperFallback,), + "name": (str,), + "targets": (LogsSchemaCategoryMapperTargets,), + "type": (LogsSchemaCategoryMapperType,), + } + attribute_map = { + "categories": "categories", + "fallback": "fallback", + "name": "name", + "targets": "targets", + "type": "type", + } + + def __init__(self_, categories: List[LogsSchemaCategoryMapperCategory], name: str, targets: LogsSchemaCategoryMapperTargets, type: LogsSchemaCategoryMapperType, fallback: Union[LogsSchemaCategoryMapperFallback, UnsetType]=unset, **kwargs): + """ + Use the Schema Category Mapper to categorize log event into enum fields. + In the case of OCSF, they can be used to map sibling fields which are composed of an ID and a name. + + **Notes** : + + * The syntax of the query is the one of Logs Explorer search bar. + The query can be done on any log attribute or tag, whether it is a facet or not. + Wildcards can also be used inside your query. + * Categories are executed in order and processing stops at the first match. + Make sure categories are properly ordered in case a log could match multiple queries. + * Sibling fields always have a numerical ID field and a human-readable string name. + * A fallback section handles cases where the name or ID value matches a specific value. + If the name matches "Other" or the ID matches 99, the value of the sibling name field will be pulled from a source field from the original log. + + :param categories: Array of filters to match or not a log and their + corresponding ``name`` to assign a custom value to the log. + :type categories: [LogsSchemaCategoryMapperCategory] + + :param fallback: Used to override hardcoded category values with a value pulled from a source attribute on the log. + :type fallback: LogsSchemaCategoryMapperFallback, optional + + :param name: Name of the logs schema category mapper. + :type name: str + + :param targets: Name of the target attributes which value is defined by the matching category. + :type targets: LogsSchemaCategoryMapperTargets + + :param type: Type of logs schema category mapper. + :type type: LogsSchemaCategoryMapperType + """ + if fallback is not unset: + kwargs["fallback"] = fallback + super().__init__(kwargs) + + + self_.categories = categories + self_.name = name + self_.targets = targets + self_.type = type diff --git a/datadog_api_client/v1/model/logs_schema_category_mapper_category.py b/datadog_api_client/v1/model/logs_schema_category_mapper_category.py new file mode 100644 index 0000000000..47ba492dd3 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_category_mapper_category.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_filter import LogsFilter + +class LogsSchemaCategoryMapperCategory(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_filter import LogsFilter + return { + "filter": (LogsFilter,), + "id": (int,), + "name": (str,), + } + attribute_map = { + "filter": "filter", + "id": "id", + "name": "name", + } + + def __init__(self_, filter: LogsFilter, id: int, name: str, **kwargs): + """ + Object describing the logs filter with corresponding category ID and name assignment. + + :param filter: Filter for logs. + :type filter: LogsFilter + + :param id: ID to inject into the category. + :type id: int + + :param name: Value to assign to target schema field. + :type name: str + """ + super().__init__(kwargs) + + + self_.filter = filter + self_.id = id + self_.name = name diff --git a/datadog_api_client/v1/model/logs_schema_category_mapper_fallback.py b/datadog_api_client/v1/model/logs_schema_category_mapper_fallback.py new file mode 100644 index 0000000000..923dfa0334 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_category_mapper_fallback.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsSchemaCategoryMapperFallback(ModelNormal): + @cached_property + def openapi_types(_): + return { + "sources": ({str: ([str],)},), + "values": ({str: (str,)},), + } + attribute_map = { + "sources": "sources", + "values": "values", + } + + def __init__(self_, sources: Union[Dict[str, List[str]], UnsetType]=unset, values: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + Used to override hardcoded category values with a value pulled from a source attribute on the log. + + :param sources: Fallback sources used to populate value of field. + :type sources: {str: ([str],)}, optional + + :param values: Values that define when the fallback is used. + :type values: {str: (str,)}, optional + """ + if sources is not unset: + kwargs["sources"] = sources + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_schema_category_mapper_targets.py b/datadog_api_client/v1/model/logs_schema_category_mapper_targets.py new file mode 100644 index 0000000000..3aa383d945 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_category_mapper_targets.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsSchemaCategoryMapperTargets(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "name": (str,), + } + attribute_map = { + "id": "id", + "name": "name", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Name of the target attributes which value is defined by the matching category. + + :param id: ID of the field to map log attributes to. + :type id: str, optional + + :param name: Name of the field to map log attributes to. + :type name: str, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/logs_schema_category_mapper_type.py b/datadog_api_client/v1/model/logs_schema_category_mapper_type.py new file mode 100644 index 0000000000..1315e4e8a5 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_category_mapper_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsSchemaCategoryMapperType(ModelSimple): + """ + Type of logs schema category mapper. + + :param value: If omitted defaults to "schema-category-mapper". Must be one of ["schema-category-mapper"]. + :type value: str + """ + + allowed_values = { + "schema-category-mapper", + } + SCHEMA_CATEGORY_MAPPER: ClassVar["LogsSchemaCategoryMapperType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsSchemaCategoryMapperType.SCHEMA_CATEGORY_MAPPER = LogsSchemaCategoryMapperType("schema-category-mapper") diff --git a/datadog_api_client/v1/model/logs_schema_data.py b/datadog_api_client/v1/model/logs_schema_data.py new file mode 100644 index 0000000000..4b5f364ed7 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_data.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsSchemaData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "class_name": (str,), + "class_uid": (int,), + "profiles": ([str],), + "schema_type": (str,), + "version": (str,), + } + attribute_map = { + "class_name": "class_name", + "class_uid": "class_uid", + "profiles": "profiles", + "schema_type": "schema_type", + "version": "version", + } + + def __init__(self_, class_name: str, class_uid: int, schema_type: str, version: str, profiles: Union[List[str], UnsetType]=unset, **kwargs): + """ + Configuration of the schema data to use. + + :param class_name: Class name of the schema to use. + :type class_name: str + + :param class_uid: Class UID of the schema to use. + :type class_uid: int + + :param profiles: Optional list of profiles to modify the schema. + :type profiles: [str], optional + + :param schema_type: Type of schema to use. + :type schema_type: str + + :param version: Version of the schema to use. + :type version: str + """ + if profiles is not unset: + kwargs["profiles"] = profiles + super().__init__(kwargs) + + + self_.class_name = class_name + self_.class_uid = class_uid + self_.schema_type = schema_type + self_.version = version diff --git a/datadog_api_client/v1/model/logs_schema_mapper.py b/datadog_api_client/v1/model/logs_schema_mapper.py new file mode 100644 index 0000000000..e466a5a112 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_mapper.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsSchemaMapper(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Configuration of the schema processor mapper to use. + + :param name: Name of the logs schema remapper. + :type name: str + + :param override_on_conflict: Whether to override the target element if it's already set. + :type override_on_conflict: bool, optional + + :param preserve_source: Remove or preserve the remapped source element. + :type preserve_source: bool, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param target: Target field to map log source field to. + :type target: str + + :param target_format: If the `target_type` of the remapper is `attribute`, try to cast the value to a new specific type. + If the cast is not possible, the original type is kept. `string`, `integer`, or `double` are the possible types. + If the `target_type` is `tag`, this parameter may not be specified. + :type target_format: TargetFormatType, optional + + :param type: Type of logs schema remapper. + :type type: LogsSchemaRemapperType + + :param categories: Array of filters to match or not a log and their + corresponding `name` to assign a custom value to the log. + :type categories: [LogsSchemaCategoryMapperCategory] + + :param fallback: Used to override hardcoded category values with a value pulled from a source attribute on the log. + :type fallback: LogsSchemaCategoryMapperFallback, optional + + :param targets: Name of the target attributes which value is defined by the matching category. + :type targets: LogsSchemaCategoryMapperTargets + """ + 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.v1.model.logs_schema_remapper import LogsSchemaRemapper + from datadog_api_client.v1.model.logs_schema_category_mapper import LogsSchemaCategoryMapper + return { + "oneOf": [ + LogsSchemaRemapper, + LogsSchemaCategoryMapper, + ], + } diff --git a/datadog_api_client/v1/model/logs_schema_processor.py b/datadog_api_client/v1/model/logs_schema_processor.py new file mode 100644 index 0000000000..c91dcf5165 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_processor.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_schema_mapper import LogsSchemaMapper + from datadog_api_client.v1.model.logs_schema_data import LogsSchemaData + from datadog_api_client.v1.model.logs_schema_processor_type import LogsSchemaProcessorType + from datadog_api_client.v1.model.logs_schema_remapper import LogsSchemaRemapper + from datadog_api_client.v1.model.logs_schema_category_mapper import LogsSchemaCategoryMapper + +class LogsSchemaProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_schema_mapper import LogsSchemaMapper + from datadog_api_client.v1.model.logs_schema_data import LogsSchemaData + from datadog_api_client.v1.model.logs_schema_processor_type import LogsSchemaProcessorType + return { + "is_enabled": (bool,), + "mappers": ([LogsSchemaMapper],), + "name": (str,), + "schema": (LogsSchemaData,), + "type": (LogsSchemaProcessorType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "mappers": "mappers", + "name": "name", + "schema": "schema", + "type": "type", + } + + def __init__(self_, mappers: List[Union[LogsSchemaMapper, LogsSchemaRemapper, LogsSchemaCategoryMapper]], name: str, schema: LogsSchemaData, type: LogsSchemaProcessorType, is_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + A processor that has additional validations and checks for a given schema. Currently supported schema types include OCSF. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param mappers: The ``LogsSchemaProcessor`` ``mappers``. + :type mappers: [LogsSchemaMapper] + + :param name: Name of the processor. + :type name: str + + :param schema: Configuration of the schema data to use. + :type schema: LogsSchemaData + + :param type: Type of logs schema processor. + :type type: LogsSchemaProcessorType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + super().__init__(kwargs) + + + self_.mappers = mappers + self_.name = name + self_.schema = schema + self_.type = type diff --git a/datadog_api_client/v1/model/logs_schema_processor_type.py b/datadog_api_client/v1/model/logs_schema_processor_type.py new file mode 100644 index 0000000000..80ef8f0aa4 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsSchemaProcessorType(ModelSimple): + """ + Type of logs schema processor. + + :param value: If omitted defaults to "schema-processor". Must be one of ["schema-processor"]. + :type value: str + """ + + allowed_values = { + "schema-processor", + } + SCHEMA_PROCESSOR: ClassVar["LogsSchemaProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsSchemaProcessorType.SCHEMA_PROCESSOR = LogsSchemaProcessorType("schema-processor") diff --git a/datadog_api_client/v1/model/logs_schema_remapper.py b/datadog_api_client/v1/model/logs_schema_remapper.py new file mode 100644 index 0000000000..f0bedfb319 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_remapper.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.target_format_type import TargetFormatType + from datadog_api_client.v1.model.logs_schema_remapper_type import LogsSchemaRemapperType + +class LogsSchemaRemapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.target_format_type import TargetFormatType + from datadog_api_client.v1.model.logs_schema_remapper_type import LogsSchemaRemapperType + return { + "name": (str,), + "override_on_conflict": (bool,), + "preserve_source": (bool,), + "sources": ([str],), + "target": (str,), + "target_format": (TargetFormatType,), + "type": (LogsSchemaRemapperType,), + } + attribute_map = { + "name": "name", + "override_on_conflict": "override_on_conflict", + "preserve_source": "preserve_source", + "sources": "sources", + "target": "target", + "target_format": "target_format", + "type": "type", + } + + def __init__(self_, name: str, sources: List[str], target: str, type: LogsSchemaRemapperType, override_on_conflict: Union[bool, UnsetType]=unset, preserve_source: Union[bool, UnsetType]=unset, target_format: Union[TargetFormatType, UnsetType]=unset, **kwargs): + """ + The schema remapper maps source log fields to their correct fields. + + :param name: Name of the logs schema remapper. + :type name: str + + :param override_on_conflict: Whether to override the target element if it's already set. + :type override_on_conflict: bool, optional + + :param preserve_source: Remove or preserve the remapped source element. + :type preserve_source: bool, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param target: Target field to map log source field to. + :type target: str + + :param target_format: If the ``target_type`` of the remapper is ``attribute`` , try to cast the value to a new specific type. + If the cast is not possible, the original type is kept. ``string`` , ``integer`` , or ``double`` are the possible types. + If the ``target_type`` is ``tag`` , this parameter may not be specified. + :type target_format: TargetFormatType, optional + + :param type: Type of logs schema remapper. + :type type: LogsSchemaRemapperType + """ + if override_on_conflict is not unset: + kwargs["override_on_conflict"] = override_on_conflict + if preserve_source is not unset: + kwargs["preserve_source"] = preserve_source + if target_format is not unset: + kwargs["target_format"] = target_format + super().__init__(kwargs) + + + self_.name = name + self_.sources = sources + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_schema_remapper_type.py b/datadog_api_client/v1/model/logs_schema_remapper_type.py new file mode 100644 index 0000000000..98ed804608 --- /dev/null +++ b/datadog_api_client/v1/model/logs_schema_remapper_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsSchemaRemapperType(ModelSimple): + """ + Type of logs schema remapper. + + :param value: If omitted defaults to "schema-remapper". Must be one of ["schema-remapper"]. + :type value: str + """ + + allowed_values = { + "schema-remapper", + } + SCHEMA_REMAPPER: ClassVar["LogsSchemaRemapperType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsSchemaRemapperType.SCHEMA_REMAPPER = LogsSchemaRemapperType("schema-remapper") diff --git a/datadog_api_client/v1/model/logs_service_remapper.py b/datadog_api_client/v1/model/logs_service_remapper.py new file mode 100644 index 0000000000..a862d9616f --- /dev/null +++ b/datadog_api_client/v1/model/logs_service_remapper.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_service_remapper_type import LogsServiceRemapperType + +class LogsServiceRemapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_service_remapper_type import LogsServiceRemapperType + return { + "is_enabled": (bool,), + "name": (str,), + "sources": ([str],), + "type": (LogsServiceRemapperType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "sources": "sources", + "type": "type", + } + + def __init__(self_, sources: List[str], type: LogsServiceRemapperType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Use this processor if you want to assign one or more attributes as the official service. + + **Note:** If multiple service remapper processors can be applied to a given log, + only the first one (according to the pipeline order) is taken into account. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param type: Type of logs service remapper. + :type type: LogsServiceRemapperType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.sources = sources + self_.type = type diff --git a/datadog_api_client/v1/model/logs_service_remapper_type.py b/datadog_api_client/v1/model/logs_service_remapper_type.py new file mode 100644 index 0000000000..f80bffe69b --- /dev/null +++ b/datadog_api_client/v1/model/logs_service_remapper_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsServiceRemapperType(ModelSimple): + """ + Type of logs service remapper. + + :param value: If omitted defaults to "service-remapper". Must be one of ["service-remapper"]. + :type value: str + """ + + allowed_values = { + "service-remapper", + } + SERVICE_REMAPPER: ClassVar["LogsServiceRemapperType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsServiceRemapperType.SERVICE_REMAPPER = LogsServiceRemapperType("service-remapper") diff --git a/datadog_api_client/v1/model/logs_sort.py b/datadog_api_client/v1/model/logs_sort.py new file mode 100644 index 0000000000..4fe9c06869 --- /dev/null +++ b/datadog_api_client/v1/model/logs_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsSort(ModelSimple): + """ + Time-ascending `asc` or time-descending `desc` results. + + :param value: Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + TIME_ASCENDING: ClassVar["LogsSort"] + TIME_DESCENDING: ClassVar["LogsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsSort.TIME_ASCENDING = LogsSort("asc") +LogsSort.TIME_DESCENDING = LogsSort("desc") diff --git a/datadog_api_client/v1/model/logs_span_remapper.py b/datadog_api_client/v1/model/logs_span_remapper.py new file mode 100644 index 0000000000..0ec1ae6f3e --- /dev/null +++ b/datadog_api_client/v1/model/logs_span_remapper.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_span_remapper_type import LogsSpanRemapperType + +class LogsSpanRemapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_span_remapper_type import LogsSpanRemapperType + return { + "is_enabled": (bool,), + "name": (str,), + "sources": ([str],), + "type": (LogsSpanRemapperType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "sources": "sources", + "type": "type", + } + + def __init__(self_, type: LogsSpanRemapperType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, sources: Union[List[str], UnsetType]=unset, **kwargs): + """ + There are two ways to define correlation between application spans and logs: + + #. + Follow the documentation on `how to inject a span ID in the application logs `_. + Log integrations automatically handle all remaining setup steps by default. + + #. + Use the span remapper processor to define a log attribute as its associated span ID. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param sources: Array of source attributes. + :type sources: [str], optional + + :param type: Type of logs span remapper. + :type type: LogsSpanRemapperType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if sources is not unset: + kwargs["sources"] = sources + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/logs_span_remapper_type.py b/datadog_api_client/v1/model/logs_span_remapper_type.py new file mode 100644 index 0000000000..96ee42dfa9 --- /dev/null +++ b/datadog_api_client/v1/model/logs_span_remapper_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsSpanRemapperType(ModelSimple): + """ + Type of logs span remapper. + + :param value: If omitted defaults to "span-id-remapper". Must be one of ["span-id-remapper"]. + :type value: str + """ + + allowed_values = { + "span-id-remapper", + } + SPAN_ID_REMAPPER: ClassVar["LogsSpanRemapperType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsSpanRemapperType.SPAN_ID_REMAPPER = LogsSpanRemapperType("span-id-remapper") diff --git a/datadog_api_client/v1/model/logs_status_remapper.py b/datadog_api_client/v1/model/logs_status_remapper.py new file mode 100644 index 0000000000..cddc127873 --- /dev/null +++ b/datadog_api_client/v1/model/logs_status_remapper.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_status_remapper_type import LogsStatusRemapperType + +class LogsStatusRemapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_status_remapper_type import LogsStatusRemapperType + return { + "is_enabled": (bool,), + "name": (str,), + "sources": ([str],), + "type": (LogsStatusRemapperType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "sources": "sources", + "type": "type", + } + + def __init__(self_, sources: List[str], type: LogsStatusRemapperType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Use this Processor if you want to assign some attributes as the official status. + + Each incoming status value is mapped as follows. + + * Integers from 0 to 7 map to the Syslog severity standards + * Strings beginning with ``emerg`` or f (case-insensitive) map to ``emerg`` (0) + * Strings beginning with ``a`` (case-insensitive) map to ``alert`` (1) + * Strings beginning with ``c`` (case-insensitive) map to ``critical`` (2) + * Strings beginning with ``err`` (case-insensitive) map to ``error`` (3) + * Strings beginning with ``w`` (case-insensitive) map to ``warning`` (4) + * Strings beginning with ``n`` (case-insensitive) map to ``notice`` (5) + * Strings beginning with ``i`` (case-insensitive) map to ``info`` (6) + * Strings beginning with ``d`` , ``trace`` or ``verbose`` (case-insensitive) map to ``debug`` (7) + * Strings beginning with ``o`` or matching ``OK`` or ``Success`` (case-insensitive) map to OK + * + All others map to ``info`` (6) + + **Note:** If multiple log status remapper processors can be applied to a given log, + only the first one (according to the pipelines order) is taken into account. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param type: Type of logs status remapper. + :type type: LogsStatusRemapperType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.sources = sources + self_.type = type diff --git a/datadog_api_client/v1/model/logs_status_remapper_type.py b/datadog_api_client/v1/model/logs_status_remapper_type.py new file mode 100644 index 0000000000..63f154a542 --- /dev/null +++ b/datadog_api_client/v1/model/logs_status_remapper_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsStatusRemapperType(ModelSimple): + """ + Type of logs status remapper. + + :param value: If omitted defaults to "status-remapper". Must be one of ["status-remapper"]. + :type value: str + """ + + allowed_values = { + "status-remapper", + } + STATUS_REMAPPER: ClassVar["LogsStatusRemapperType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsStatusRemapperType.STATUS_REMAPPER = LogsStatusRemapperType("status-remapper") diff --git a/datadog_api_client/v1/model/logs_string_builder_processor.py b/datadog_api_client/v1/model/logs_string_builder_processor.py new file mode 100644 index 0000000000..5ac4c117d3 --- /dev/null +++ b/datadog_api_client/v1/model/logs_string_builder_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_string_builder_processor_type import LogsStringBuilderProcessorType + +class LogsStringBuilderProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_string_builder_processor_type import LogsStringBuilderProcessorType + return { + "is_enabled": (bool,), + "is_replace_missing": (bool,), + "name": (str,), + "target": (str,), + "template": (str,), + "type": (LogsStringBuilderProcessorType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "is_replace_missing": "is_replace_missing", + "name": "name", + "target": "target", + "template": "template", + "type": "type", + } + + def __init__(self_, target: str, template: str, type: LogsStringBuilderProcessorType, is_enabled: Union[bool, UnsetType]=unset, is_replace_missing: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Use the string builder processor to add a new attribute (without spaces or special characters) + to a log with the result of the provided template. + This enables aggregation of different attributes or raw strings into a single attribute. + + The template is defined by both raw text and blocks with the syntax ``%{attribute_path}``. + + **Notes** : + + * The processor only accepts attributes with values or an array of values in the blocks. + * If an attribute cannot be used (object or array of object), + it is replaced by an empty string or the entire operation is skipped depending on your selection. + * If the target attribute already exists, it is overwritten by the result of the template. + * Results of the template cannot exceed 256 characters. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param is_replace_missing: If true, it replaces all missing attributes of ``template`` by an empty string. + If ``false`` (default), skips the operation for missing attributes. + :type is_replace_missing: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param target: The name of the attribute that contains the result of the template. + :type target: str + + :param template: A formula with one or more attributes and raw text. + :type template: str + + :param type: Type of logs string builder processor. + :type type: LogsStringBuilderProcessorType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if is_replace_missing is not unset: + kwargs["is_replace_missing"] = is_replace_missing + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.target = target + self_.template = template + self_.type = type diff --git a/datadog_api_client/v1/model/logs_string_builder_processor_type.py b/datadog_api_client/v1/model/logs_string_builder_processor_type.py new file mode 100644 index 0000000000..6df7a8f578 --- /dev/null +++ b/datadog_api_client/v1/model/logs_string_builder_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsStringBuilderProcessorType(ModelSimple): + """ + Type of logs string builder processor. + + :param value: If omitted defaults to "string-builder-processor". Must be one of ["string-builder-processor"]. + :type value: str + """ + + allowed_values = { + "string-builder-processor", + } + STRING_BUILDER_PROCESSOR: ClassVar["LogsStringBuilderProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsStringBuilderProcessorType.STRING_BUILDER_PROCESSOR = LogsStringBuilderProcessorType("string-builder-processor") diff --git a/datadog_api_client/v1/model/logs_trace_remapper.py b/datadog_api_client/v1/model/logs_trace_remapper.py new file mode 100644 index 0000000000..0c083e81f8 --- /dev/null +++ b/datadog_api_client/v1/model/logs_trace_remapper.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_trace_remapper_type import LogsTraceRemapperType + +class LogsTraceRemapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_trace_remapper_type import LogsTraceRemapperType + return { + "is_enabled": (bool,), + "name": (str,), + "sources": ([str],), + "type": (LogsTraceRemapperType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "sources": "sources", + "type": "type", + } + + def __init__(self_, type: LogsTraceRemapperType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, sources: Union[List[str], UnsetType]=unset, **kwargs): + """ + There are two ways to improve correlation between application traces and logs. + + #. + Follow the documentation on `how to inject a trace ID in the application logs `_ + and by default log integrations take care of all the rest of the setup. + + #. + Use the Trace remapper processor to define a log attribute as its associated trace ID. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param sources: Array of source attributes. + :type sources: [str], optional + + :param type: Type of logs trace remapper. + :type type: LogsTraceRemapperType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if sources is not unset: + kwargs["sources"] = sources + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/logs_trace_remapper_type.py b/datadog_api_client/v1/model/logs_trace_remapper_type.py new file mode 100644 index 0000000000..e3cfbde761 --- /dev/null +++ b/datadog_api_client/v1/model/logs_trace_remapper_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsTraceRemapperType(ModelSimple): + """ + Type of logs trace remapper. + + :param value: If omitted defaults to "trace-id-remapper". Must be one of ["trace-id-remapper"]. + :type value: str + """ + + allowed_values = { + "trace-id-remapper", + } + TRACE_ID_REMAPPER: ClassVar["LogsTraceRemapperType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsTraceRemapperType.TRACE_ID_REMAPPER = LogsTraceRemapperType("trace-id-remapper") diff --git a/datadog_api_client/v1/model/logs_url_parser.py b/datadog_api_client/v1/model/logs_url_parser.py new file mode 100644 index 0000000000..fefe2bfb56 --- /dev/null +++ b/datadog_api_client/v1/model/logs_url_parser.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_url_parser_type import LogsURLParserType + +class LogsURLParser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_url_parser_type import LogsURLParserType + return { + "is_enabled": (bool,), + "name": (str,), + "normalize_ending_slashes": (bool, none_type), + "sources": ([str],), + "target": (str,), + "type": (LogsURLParserType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "name": "name", + "normalize_ending_slashes": "normalize_ending_slashes", + "sources": "sources", + "target": "target", + "type": "type", + } + + def __init__(self_, type: LogsURLParserType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, normalize_ending_slashes: Union[bool, none_type, UnsetType]=unset, **kwargs): + """ + This processor extracts query parameters and other important parameters from a URL. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param normalize_ending_slashes: Normalize the ending slashes or not. + :type normalize_ending_slashes: bool, none_type, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param target: Name of the parent attribute that contains all the extracted details from the ``sources``. + :type target: str + + :param type: Type of logs URL parser. + :type type: LogsURLParserType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if normalize_ending_slashes is not unset: + kwargs["normalize_ending_slashes"] = normalize_ending_slashes + super().__init__(kwargs) + sources = kwargs.get("sources", ['http.url']) + target = kwargs.get("target", "http.url_details") + + + self_.sources = sources + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_url_parser_type.py b/datadog_api_client/v1/model/logs_url_parser_type.py new file mode 100644 index 0000000000..e63eb252a1 --- /dev/null +++ b/datadog_api_client/v1/model/logs_url_parser_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsURLParserType(ModelSimple): + """ + Type of logs URL parser. + + :param value: If omitted defaults to "url-parser". Must be one of ["url-parser"]. + :type value: str + """ + + allowed_values = { + "url-parser", + } + URL_PARSER: ClassVar["LogsURLParserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsURLParserType.URL_PARSER = LogsURLParserType("url-parser") diff --git a/datadog_api_client/v1/model/logs_user_agent_parser.py b/datadog_api_client/v1/model/logs_user_agent_parser.py new file mode 100644 index 0000000000..05083217e7 --- /dev/null +++ b/datadog_api_client/v1/model/logs_user_agent_parser.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_user_agent_parser_type import LogsUserAgentParserType + +class LogsUserAgentParser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_user_agent_parser_type import LogsUserAgentParserType + return { + "is_enabled": (bool,), + "is_encoded": (bool,), + "name": (str,), + "sources": ([str],), + "target": (str,), + "type": (LogsUserAgentParserType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "is_encoded": "is_encoded", + "name": "name", + "sources": "sources", + "target": "target", + "type": "type", + } + + def __init__(self_, type: LogsUserAgentParserType, is_enabled: Union[bool, UnsetType]=unset, is_encoded: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The User-Agent parser takes a User-Agent attribute and extracts the OS, browser, device, and other user data. + It recognizes major bots like the Google Bot, Yahoo Slurp, and Bing. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param is_encoded: Define if the source attribute is URL encoded or not. + :type is_encoded: bool, optional + + :param name: Name of the processor. + :type name: str, optional + + :param sources: Array of source attributes. + :type sources: [str] + + :param target: Name of the parent attribute that contains all the extracted details from the ``sources``. + :type target: str + + :param type: Type of logs User-Agent parser. + :type type: LogsUserAgentParserType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if is_encoded is not unset: + kwargs["is_encoded"] = is_encoded + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + sources = kwargs.get("sources", ['http.useragent']) + target = kwargs.get("target", "http.useragent_details") + + + self_.sources = sources + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/logs_user_agent_parser_type.py b/datadog_api_client/v1/model/logs_user_agent_parser_type.py new file mode 100644 index 0000000000..b330691122 --- /dev/null +++ b/datadog_api_client/v1/model/logs_user_agent_parser_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsUserAgentParserType(ModelSimple): + """ + Type of logs User-Agent parser. + + :param value: If omitted defaults to "user-agent-parser". Must be one of ["user-agent-parser"]. + :type value: str + """ + + allowed_values = { + "user-agent-parser", + } + USER_AGENT_PARSER: ClassVar["LogsUserAgentParserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsUserAgentParserType.USER_AGENT_PARSER = LogsUserAgentParserType("user-agent-parser") diff --git a/datadog_api_client/v1/model/matching_downtime.py b/datadog_api_client/v1/model/matching_downtime.py new file mode 100644 index 0000000000..b5ac030cb5 --- /dev/null +++ b/datadog_api_client/v1/model/matching_downtime.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MatchingDowntime(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (int, none_type), + "id": (int,), + "scope": ([str],), + "start": (int,), + } + attribute_map = { + "end": "end", + "id": "id", + "scope": "scope", + "start": "start", + } + read_only_vars = { + "id", + } + + def __init__(self_, id: int, end: Union[int, none_type, UnsetType]=unset, scope: Union[List[str], UnsetType]=unset, start: Union[int, UnsetType]=unset, **kwargs): + """ + Object describing a downtime that matches this monitor. + + :param end: POSIX timestamp to end the downtime. + :type end: int, none_type, optional + + :param id: The downtime ID. + :type id: int + + :param scope: The scope(s) to which the downtime applies. Must be in ``key:value`` format. For example, ``host:app2``. + Provide multiple scopes as a comma-separated list like ``env:dev,env:prod``. + The resulting downtime applies to sources that matches ALL provided scopes ( ``env:dev`` **AND** ``env:prod`` ). + :type scope: [str], optional + + :param start: POSIX timestamp to start the downtime. + :type start: int, optional + """ + if end is not unset: + kwargs["end"] = end + if scope is not unset: + kwargs["scope"] = scope + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v1/model/metric_content_encoding.py b/datadog_api_client/v1/model/metric_content_encoding.py new file mode 100644 index 0000000000..ab89d40ae1 --- /dev/null +++ b/datadog_api_client/v1/model/metric_content_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricContentEncoding(ModelSimple): + """ + HTTP header used to compress the media-type. + + :param value: If omitted defaults to "deflate". Must be one of ["deflate", "gzip"]. + :type value: str + """ + + allowed_values = { + "deflate", + "gzip", + } + DEFLATE: ClassVar["MetricContentEncoding"] + GZIP: ClassVar["MetricContentEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricContentEncoding.DEFLATE = MetricContentEncoding("deflate") +MetricContentEncoding.GZIP = MetricContentEncoding("gzip") diff --git a/datadog_api_client/v1/model/metric_metadata.py b/datadog_api_client/v1/model/metric_metadata.py new file mode 100644 index 0000000000..99541230cf --- /dev/null +++ b/datadog_api_client/v1/model/metric_metadata.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "integration": (str,), + "per_unit": (str,), + "short_name": (str,), + "statsd_interval": (int,), + "type": (str,), + "unit": (str,), + } + attribute_map = { + "description": "description", + "integration": "integration", + "per_unit": "per_unit", + "short_name": "short_name", + "statsd_interval": "statsd_interval", + "type": "type", + "unit": "unit", + } + read_only_vars = { + "integration", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, integration: Union[str, UnsetType]=unset, per_unit: Union[str, UnsetType]=unset, short_name: Union[str, UnsetType]=unset, statsd_interval: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, unit: Union[str, UnsetType]=unset, **kwargs): + """ + Object with all metric related metadata. + + :param description: Metric description. + :type description: str, optional + + :param integration: Name of the integration that sent the metric if applicable. + :type integration: str, optional + + :param per_unit: Per unit of the metric such as ``second`` in ``bytes per second``. + :type per_unit: str, optional + + :param short_name: A more human-readable and abbreviated version of the metric name. + :type short_name: str, optional + + :param statsd_interval: StatsD flush interval of the metric in seconds if applicable. + :type statsd_interval: int, optional + + :param type: Metric type such as ``gauge`` or ``rate``. + :type type: str, optional + + :param unit: Primary unit of the metric such as ``byte`` or ``operation``. + :type unit: str, optional + """ + if description is not unset: + kwargs["description"] = description + if integration is not unset: + kwargs["integration"] = integration + if per_unit is not unset: + kwargs["per_unit"] = per_unit + if short_name is not unset: + kwargs["short_name"] = short_name + if statsd_interval is not unset: + kwargs["statsd_interval"] = statsd_interval + if type is not unset: + kwargs["type"] = type + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/metric_search_response.py b/datadog_api_client/v1/model/metric_search_response.py new file mode 100644 index 0000000000..a8009e71c7 --- /dev/null +++ b/datadog_api_client/v1/model/metric_search_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.metric_search_response_results import MetricSearchResponseResults + +class MetricSearchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.metric_search_response_results import MetricSearchResponseResults + return { + "results": (MetricSearchResponseResults,), + } + attribute_map = { + "results": "results", + } + + def __init__(self_, results: Union[MetricSearchResponseResults, UnsetType]=unset, **kwargs): + """ + Object containing the list of metrics matching the search query. + + :param results: Search result. + :type results: MetricSearchResponseResults, optional + """ + if results is not unset: + kwargs["results"] = results + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/metric_search_response_results.py b/datadog_api_client/v1/model/metric_search_response_results.py new file mode 100644 index 0000000000..832e64ea43 --- /dev/null +++ b/datadog_api_client/v1/model/metric_search_response_results.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricSearchResponseResults(ModelNormal): + @cached_property + def openapi_types(_): + return { + "metrics": ([str],), + } + attribute_map = { + "metrics": "metrics", + } + + def __init__(self_, metrics: Union[List[str], UnsetType]=unset, **kwargs): + """ + Search result. + + :param metrics: List of metrics that match the search query. + :type metrics: [str], optional + """ + if metrics is not unset: + kwargs["metrics"] = metrics + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/metrics_list_response.py b/datadog_api_client/v1/model/metrics_list_response.py new file mode 100644 index 0000000000..6abee0c517 --- /dev/null +++ b/datadog_api_client/v1/model/metrics_list_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (str,), + "metrics": ([str],), + } + attribute_map = { + "_from": "from", + "metrics": "metrics", + } + + def __init__(self_, _from: Union[str, UnsetType]=unset, metrics: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object listing all metric names stored by Datadog since a given time. + + :param _from: Time when the metrics were active, seconds since the Unix epoch. + :type _from: str, optional + + :param metrics: List of metric names. + :type metrics: [str], optional + """ + if _from is not unset: + kwargs["_from"] = _from + if metrics is not unset: + kwargs["metrics"] = metrics + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/metrics_payload.py b/datadog_api_client/v1/model/metrics_payload.py new file mode 100644 index 0000000000..2f9ad9be3b --- /dev/null +++ b/datadog_api_client/v1/model/metrics_payload.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.series import Series + +class MetricsPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.series import Series + return { + "series": ([Series],), + } + attribute_map = { + "series": "series", + } + + def __init__(self_, series: List[Series], **kwargs): + """ + The metrics' payload. + + :param series: A list of timeseries to submit to Datadog. + :type series: [Series] + """ + super().__init__(kwargs) + + + self_.series = series diff --git a/datadog_api_client/v1/model/metrics_query_metadata.py b/datadog_api_client/v1/model/metrics_query_metadata.py new file mode 100644 index 0000000000..e9acccec51 --- /dev/null +++ b/datadog_api_client/v1/model/metrics_query_metadata.py @@ -0,0 +1,159 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.point import Point + from datadog_api_client.v1.model.metrics_query_unit import MetricsQueryUnit + +class MetricsQueryMetadata(ModelNormal): + validations = { + "unit": { + "max_items": 2, + "min_items": 2, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.point import Point + from datadog_api_client.v1.model.metrics_query_unit import MetricsQueryUnit + return { + "aggr": (str, none_type), + "display_name": (str,), + "end": (int,), + "expression": (str,), + "interval": (int,), + "length": (int,), + "metric": (str,), + "pointlist": ([Point],), + "query_index": (int,), + "scope": (str,), + "start": (int,), + "tag_set": ([str],), + "unit": ([MetricsQueryUnit, none_type],), + } + attribute_map = { + "aggr": "aggr", + "display_name": "display_name", + "end": "end", + "expression": "expression", + "interval": "interval", + "length": "length", + "metric": "metric", + "pointlist": "pointlist", + "query_index": "query_index", + "scope": "scope", + "start": "start", + "tag_set": "tag_set", + "unit": "unit", + } + read_only_vars = { + "aggr", + "display_name", + "end", + "expression", + "interval", + "length", + "metric", + "pointlist", + "query_index", + "scope", + "start", + "tag_set", + "unit", + } + + def __init__(self_, aggr: Union[str, none_type, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, end: Union[int, UnsetType]=unset, expression: Union[str, UnsetType]=unset, interval: Union[int, UnsetType]=unset, length: Union[int, UnsetType]=unset, metric: Union[str, UnsetType]=unset, pointlist: Union[List[Point], UnsetType]=unset, query_index: Union[int, UnsetType]=unset, scope: Union[str, UnsetType]=unset, start: Union[int, UnsetType]=unset, tag_set: Union[List[str], UnsetType]=unset, unit: Union[List[MetricsQueryUnit], UnsetType]=unset, **kwargs): + """ + Object containing all metric names returned and their associated metadata. + + :param aggr: Aggregation type. + :type aggr: str, none_type, optional + + :param display_name: Display name of the metric. + :type display_name: str, optional + + :param end: End of the time window, milliseconds since Unix epoch. + :type end: int, optional + + :param expression: Metric expression. + :type expression: str, optional + + :param interval: Number of milliseconds between data samples. + :type interval: int, optional + + :param length: Number of data samples. + :type length: int, optional + + :param metric: Metric name. + :type metric: str, optional + + :param pointlist: List of points of the timeseries in milliseconds. + :type pointlist: [Point], optional + + :param query_index: The index of the series' query within the request. + :type query_index: int, optional + + :param scope: Metric scope, comma separated list of tags. + :type scope: str, optional + + :param start: Start of the time window, milliseconds since Unix epoch. + :type start: int, optional + + :param tag_set: Unique tags identifying this series. + :type tag_set: [str], optional + + :param unit: Detailed information about the metric unit. + The first element describes the "primary unit" (for example, ``bytes`` in ``bytes per second`` ). + The second element describes the "per unit" (for example, ``second`` in ``bytes per second`` ). + If the second element is not present, the API returns null. + :type unit: [MetricsQueryUnit, none_type], optional + """ + if aggr is not unset: + kwargs["aggr"] = aggr + if display_name is not unset: + kwargs["display_name"] = display_name + if end is not unset: + kwargs["end"] = end + if expression is not unset: + kwargs["expression"] = expression + if interval is not unset: + kwargs["interval"] = interval + if length is not unset: + kwargs["length"] = length + if metric is not unset: + kwargs["metric"] = metric + if pointlist is not unset: + kwargs["pointlist"] = pointlist + if query_index is not unset: + kwargs["query_index"] = query_index + if scope is not unset: + kwargs["scope"] = scope + if start is not unset: + kwargs["start"] = start + if tag_set is not unset: + kwargs["tag_set"] = tag_set + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/metrics_query_response.py b/datadog_api_client/v1/model/metrics_query_response.py new file mode 100644 index 0000000000..474506b991 --- /dev/null +++ b/datadog_api_client/v1/model/metrics_query_response.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.metrics_query_metadata import MetricsQueryMetadata + +class MetricsQueryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.metrics_query_metadata import MetricsQueryMetadata + return { + "error": (str,), + "from_date": (int,), + "group_by": ([str],), + "message": (str,), + "query": (str,), + "res_type": (str,), + "series": ([MetricsQueryMetadata],), + "status": (str,), + "to_date": (int,), + } + attribute_map = { + "error": "error", + "from_date": "from_date", + "group_by": "group_by", + "message": "message", + "query": "query", + "res_type": "res_type", + "series": "series", + "status": "status", + "to_date": "to_date", + } + read_only_vars = { + "error", + "from_date", + "group_by", + "message", + "query", + "res_type", + "series", + "status", + "to_date", + } + + def __init__(self_, error: Union[str, UnsetType]=unset, from_date: Union[int, UnsetType]=unset, group_by: Union[List[str], UnsetType]=unset, message: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, res_type: Union[str, UnsetType]=unset, series: Union[List[MetricsQueryMetadata], UnsetType]=unset, status: Union[str, UnsetType]=unset, to_date: Union[int, UnsetType]=unset, **kwargs): + """ + Response Object that includes your query and the list of metrics retrieved. + + :param error: Message indicating the errors if status is not ``ok``. + :type error: str, optional + + :param from_date: Start of requested time window, milliseconds since Unix epoch. + :type from_date: int, optional + + :param group_by: List of tag keys on which to group. + :type group_by: [str], optional + + :param message: Message indicating ``success`` if status is ``ok``. + :type message: str, optional + + :param query: Query string + :type query: str, optional + + :param res_type: Type of response. + :type res_type: str, optional + + :param series: List of timeseries queried. + :type series: [MetricsQueryMetadata], optional + + :param status: Status of the query. + :type status: str, optional + + :param to_date: End of requested time window, milliseconds since Unix epoch. + :type to_date: int, optional + """ + if error is not unset: + kwargs["error"] = error + if from_date is not unset: + kwargs["from_date"] = from_date + if group_by is not unset: + kwargs["group_by"] = group_by + if message is not unset: + kwargs["message"] = message + if query is not unset: + kwargs["query"] = query + if res_type is not unset: + kwargs["res_type"] = res_type + if series is not unset: + kwargs["series"] = series + if status is not unset: + kwargs["status"] = status + if to_date is not unset: + kwargs["to_date"] = to_date + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/metrics_query_unit.py b/datadog_api_client/v1/model/metrics_query_unit.py new file mode 100644 index 0000000000..4cf7fc7572 --- /dev/null +++ b/datadog_api_client/v1/model/metrics_query_unit.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricsQueryUnit(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "family": (str,), + "name": (str,), + "plural": (str,), + "scale_factor": (float,), + "short_name": (str,), + } + attribute_map = { + "family": "family", + "name": "name", + "plural": "plural", + "scale_factor": "scale_factor", + "short_name": "short_name", + } + read_only_vars = { + "family", + "name", + "plural", + "scale_factor", + "short_name", + } + + def __init__(self_, family: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, plural: Union[str, UnsetType]=unset, scale_factor: Union[float, UnsetType]=unset, short_name: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing the metric unit family, scale factor, name, and short name. + + :param family: Unit family, allows for conversion between units of the same family, for scaling. + :type family: str, optional + + :param name: Unit name + :type name: str, optional + + :param plural: Plural form of the unit name. + :type plural: str, optional + + :param scale_factor: Factor for scaling between units of the same family. + :type scale_factor: float, optional + + :param short_name: Abbreviation of the unit. + :type short_name: str, optional + """ + if family is not unset: + kwargs["family"] = family + if name is not unset: + kwargs["name"] = name + if plural is not unset: + kwargs["plural"] = plural + if scale_factor is not unset: + kwargs["scale_factor"] = scale_factor + if short_name is not unset: + kwargs["short_name"] = short_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor.py b/datadog_api_client/v1/model/monitor.py new file mode 100644 index 0000000000..242a518e21 --- /dev/null +++ b/datadog_api_client/v1/model/monitor.py @@ -0,0 +1,208 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_asset import MonitorAsset + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.monitor_draft_status import MonitorDraftStatus + from datadog_api_client.v1.model.matching_downtime import MatchingDowntime + from datadog_api_client.v1.model.monitor_options import MonitorOptions + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + from datadog_api_client.v1.model.monitor_state import MonitorState + from datadog_api_client.v1.model.monitor_type import MonitorType + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition + 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_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 + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filtered_query_definition import MonitorFormulaAndFunctionAggregateFilteredQueryDefinition + +class Monitor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_asset import MonitorAsset + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.monitor_draft_status import MonitorDraftStatus + from datadog_api_client.v1.model.matching_downtime import MatchingDowntime + from datadog_api_client.v1.model.monitor_options import MonitorOptions + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + from datadog_api_client.v1.model.monitor_state import MonitorState + from datadog_api_client.v1.model.monitor_type import MonitorType + return { + "assets": ([MonitorAsset],), + "created": (datetime,), + "creator": (Creator,), + "deleted": (datetime, none_type), + "draft_status": (MonitorDraftStatus,), + "id": (int,), + "matching_downtimes": ([MatchingDowntime],), + "message": (str,), + "modified": (datetime,), + "multi": (bool,), + "name": (str,), + "options": (MonitorOptions,), + "overall_state": (MonitorOverallStates,), + "priority": (int, none_type), + "query": (str,), + "restricted_roles": ([str], none_type), + "state": (MonitorState,), + "tags": ([str],), + "type": (MonitorType,), + } + attribute_map = { + "assets": "assets", + "created": "created", + "creator": "creator", + "deleted": "deleted", + "draft_status": "draft_status", + "id": "id", + "matching_downtimes": "matching_downtimes", + "message": "message", + "modified": "modified", + "multi": "multi", + "name": "name", + "options": "options", + "overall_state": "overall_state", + "priority": "priority", + "query": "query", + "restricted_roles": "restricted_roles", + "state": "state", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "created", + "creator", + "deleted", + "id", + "modified", + "multi", + "overall_state", + "state", + } + + def __init__(self_, query: str, type: MonitorType, assets: Union[List[MonitorAsset], UnsetType]=unset, created: Union[datetime, UnsetType]=unset, creator: Union[Creator, UnsetType]=unset, deleted: Union[datetime, none_type, UnsetType]=unset, draft_status: Union[MonitorDraftStatus, UnsetType]=unset, id: Union[int, UnsetType]=unset, matching_downtimes: Union[List[MatchingDowntime], UnsetType]=unset, message: Union[str, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, multi: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, options: Union[MonitorOptions, UnsetType]=unset, overall_state: Union[MonitorOverallStates, UnsetType]=unset, priority: Union[int, none_type, UnsetType]=unset, restricted_roles: Union[List[str], none_type, UnsetType]=unset, state: Union[MonitorState, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object describing a monitor. + + :param assets: The list of monitor assets tied to a monitor, which represents key links for users to take action on monitor alerts (for example, runbooks). + :type assets: [MonitorAsset], optional + + :param created: Timestamp of the monitor creation. + :type created: datetime, optional + + :param creator: Object describing the creator of the shared element. + :type creator: Creator, optional + + :param deleted: Whether or not the monitor is deleted. (Always ``null`` ) + :type deleted: datetime, none_type, optional + + :param draft_status: Indicates whether the monitor is in a draft or published state. + + ``draft`` : The monitor appears as Draft and does not send notifications. + ``published`` : The monitor is active and evaluates conditions and notify as configured. + + This field is in preview. The draft value is only available to customers with the feature enabled. + :type draft_status: MonitorDraftStatus, optional + + :param id: ID of this monitor. + :type id: int, optional + + :param matching_downtimes: A list of active v1 downtimes that match this monitor. + :type matching_downtimes: [MatchingDowntime], optional + + :param message: A message to include with notifications for this monitor. + :type message: str, optional + + :param modified: Last timestamp when the monitor was edited. + :type modified: datetime, optional + + :param multi: Whether or not the monitor is broken down on different groups. + :type multi: bool, optional + + :param name: The monitor name. + :type name: str, optional + + :param options: List of options associated with your monitor. + :type options: MonitorOptions, optional + + :param overall_state: The different states your monitor can be in. + :type overall_state: MonitorOverallStates, optional + + :param priority: Integer from 1 (high) to 5 (low) indicating alert severity. + :type priority: int, none_type, optional + + :param query: The monitor query. + :type query: str + + :param restricted_roles: A list of unique role identifiers to define which roles are allowed to edit the monitor. The unique identifiers for all roles can be pulled from the `Roles API `_ and are located in the ``data.id`` field. Editing a monitor includes any updates to the monitor configuration, monitor deletion, and muting of the monitor for any amount of time. You can use the `Restriction Policies API `_ to manage write authorization for individual monitors by teams and users, in addition to roles. + :type restricted_roles: [str], none_type, optional + + :param state: Wrapper object with the different monitor states. + :type state: MonitorState, optional + + :param tags: Tags associated to your monitor. + :type tags: [str], optional + + :param type: The type of the monitor. For more information about ``type`` , see the `monitor options `_ docs. + :type type: MonitorType + """ + if assets is not unset: + kwargs["assets"] = assets + if created is not unset: + kwargs["created"] = created + if creator is not unset: + kwargs["creator"] = creator + if deleted is not unset: + kwargs["deleted"] = deleted + if draft_status is not unset: + kwargs["draft_status"] = draft_status + if id is not unset: + kwargs["id"] = id + if matching_downtimes is not unset: + kwargs["matching_downtimes"] = matching_downtimes + if message is not unset: + kwargs["message"] = message + if modified is not unset: + kwargs["modified"] = modified + if multi is not unset: + kwargs["multi"] = multi + if name is not unset: + kwargs["name"] = name + if options is not unset: + kwargs["options"] = options + if overall_state is not unset: + kwargs["overall_state"] = overall_state + if priority is not unset: + kwargs["priority"] = priority + if restricted_roles is not unset: + kwargs["restricted_roles"] = restricted_roles + if state is not unset: + kwargs["state"] = state + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.query = query + self_.type = type diff --git a/datadog_api_client/v1/model/monitor_asset.py b/datadog_api_client/v1/model/monitor_asset.py new file mode 100644 index 0000000000..11d965eb63 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_asset.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_asset_category import MonitorAssetCategory + from datadog_api_client.v1.model.monitor_asset_resource_type import MonitorAssetResourceType + +class MonitorAsset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_asset_category import MonitorAssetCategory + from datadog_api_client.v1.model.monitor_asset_resource_type import MonitorAssetResourceType + return { + "category": (MonitorAssetCategory,), + "name": (str,), + "resource_key": (str,), + "resource_type": (MonitorAssetResourceType,), + "url": (str,), + } + attribute_map = { + "category": "category", + "name": "name", + "resource_key": "resource_key", + "resource_type": "resource_type", + "url": "url", + } + + def __init__(self_, category: MonitorAssetCategory, name: str, url: str, resource_key: Union[str, UnsetType]=unset, resource_type: Union[MonitorAssetResourceType, UnsetType]=unset, **kwargs): + """ + Represents key links tied to a monitor to help users take action on alerts. + This feature is in Preview and only available to users with the feature enabled. + + :param category: Indicates the type of asset this entity represents on a monitor. + :type category: MonitorAssetCategory + + :param name: Name for the monitor asset + :type name: str + + :param resource_key: Represents the identifier of the internal Datadog resource that this asset represents. IDs in this field should be passed in as strings. + :type resource_key: str, optional + + :param resource_type: Type of internal Datadog resource associated with a monitor asset. + :type resource_type: MonitorAssetResourceType, optional + + :param url: URL link for the asset. For links with an internal resource type set, this should be the relative path to where the Datadog domain is appended internally. For external links, this should be the full URL path. + :type url: str + """ + if resource_key is not unset: + kwargs["resource_key"] = resource_key + if resource_type is not unset: + kwargs["resource_type"] = resource_type + super().__init__(kwargs) + + + self_.category = category + self_.name = name + self_.url = url diff --git a/datadog_api_client/v1/model/monitor_asset_category.py b/datadog_api_client/v1/model/monitor_asset_category.py new file mode 100644 index 0000000000..2db286f1da --- /dev/null +++ b/datadog_api_client/v1/model/monitor_asset_category.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorAssetCategory(ModelSimple): + """ + Indicates the type of asset this entity represents on a monitor. + + :param value: If omitted defaults to "runbook". Must be one of ["runbook"]. + :type value: str + """ + + allowed_values = { + "runbook", + } + RUNBOOK: ClassVar["MonitorAssetCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorAssetCategory.RUNBOOK = MonitorAssetCategory("runbook") diff --git a/datadog_api_client/v1/model/monitor_asset_resource_type.py b/datadog_api_client/v1/model/monitor_asset_resource_type.py new file mode 100644 index 0000000000..fb7bc15c26 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_asset_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorAssetResourceType(ModelSimple): + """ + Type of internal Datadog resource associated with a monitor asset. + + :param value: If omitted defaults to "notebook". Must be one of ["notebook"]. + :type value: str + """ + + allowed_values = { + "notebook", + } + NOTEBOOK: ClassVar["MonitorAssetResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorAssetResourceType.NOTEBOOK = MonitorAssetResourceType("notebook") diff --git a/datadog_api_client/v1/model/monitor_device_id.py b/datadog_api_client/v1/model/monitor_device_id.py new file mode 100644 index 0000000000..ee666961f2 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_device_id.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorDeviceID(ModelSimple): + """ + ID of the device the Synthetics monitor is running on. Same as `SyntheticsDeviceID`. + + :param value: Must be one of ["laptop_large", "tablet", "mobile_small", "chrome.laptop_large", "chrome.tablet", "chrome.mobile_small", "firefox.laptop_large", "firefox.tablet", "firefox.mobile_small"]. + :type value: str + """ + + allowed_values = { + "laptop_large", + "tablet", + "mobile_small", + "chrome.laptop_large", + "chrome.tablet", + "chrome.mobile_small", + "firefox.laptop_large", + "firefox.tablet", + "firefox.mobile_small", + } + LAPTOP_LARGE: ClassVar["MonitorDeviceID"] + TABLET: ClassVar["MonitorDeviceID"] + MOBILE_SMALL: ClassVar["MonitorDeviceID"] + CHROME_LAPTOP_LARGE: ClassVar["MonitorDeviceID"] + CHROME_TABLET: ClassVar["MonitorDeviceID"] + CHROME_MOBILE_SMALL: ClassVar["MonitorDeviceID"] + FIREFOX_LAPTOP_LARGE: ClassVar["MonitorDeviceID"] + FIREFOX_TABLET: ClassVar["MonitorDeviceID"] + FIREFOX_MOBILE_SMALL: ClassVar["MonitorDeviceID"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorDeviceID.LAPTOP_LARGE = MonitorDeviceID("laptop_large") +MonitorDeviceID.TABLET = MonitorDeviceID("tablet") +MonitorDeviceID.MOBILE_SMALL = MonitorDeviceID("mobile_small") +MonitorDeviceID.CHROME_LAPTOP_LARGE = MonitorDeviceID("chrome.laptop_large") +MonitorDeviceID.CHROME_TABLET = MonitorDeviceID("chrome.tablet") +MonitorDeviceID.CHROME_MOBILE_SMALL = MonitorDeviceID("chrome.mobile_small") +MonitorDeviceID.FIREFOX_LAPTOP_LARGE = MonitorDeviceID("firefox.laptop_large") +MonitorDeviceID.FIREFOX_TABLET = MonitorDeviceID("firefox.tablet") +MonitorDeviceID.FIREFOX_MOBILE_SMALL = MonitorDeviceID("firefox.mobile_small") diff --git a/datadog_api_client/v1/model/monitor_draft_status.py b/datadog_api_client/v1/model/monitor_draft_status.py new file mode 100644 index 0000000000..ecc83b2f00 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_draft_status.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorDraftStatus(ModelSimple): + """ + Indicates whether the monitor is in a draft or published state. + + `draft`: The monitor appears as Draft and does not send notifications. + `published`: The monitor is active and evaluates conditions and notify as configured. + + This field is in preview. The draft value is only available to customers with the feature enabled. + + :param value: If omitted defaults to "published". Must be one of ["draft", "published"]. + :type value: str + """ + + allowed_values = { + "draft", + "published", + } + DRAFT: ClassVar["MonitorDraftStatus"] + PUBLISHED: ClassVar["MonitorDraftStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorDraftStatus.DRAFT = MonitorDraftStatus("draft") +MonitorDraftStatus.PUBLISHED = MonitorDraftStatus("published") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_augment_query.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_augment_query.py new file mode 100644 index 0000000000..72fec27a83 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_augment_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorFormulaAndFunctionAggregateAugmentQuery(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Augment query for aggregate augmented queries. Can be an events query or a reference table query. + + :param compute: Compute options. + :type compute: MonitorFormulaAndFunctionEventQueryDefinitionCompute + + :param data_source: Data source for event platform-based queries. + :type data_source: MonitorFormulaAndFunctionEventsDataSource + + :param group_by: Group by options. + :type group_by: [MonitorFormulaAndFunctionEventQueryGroupBy], optional + + :param indexes: An array of index names to query in the stream. Omit or use `[]` to query all indexes at once. + :type indexes: [str], optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param search: Search options. + :type search: MonitorFormulaAndFunctionEventQueryDefinitionSearch, optional + + :param columns: List of columns to retrieve from the reference table. + :type columns: [MonitorFormulaAndFunctionReferenceTableColumn], optional + + :param query_filter: Optional filter expression for the reference table query. + :type query_filter: str, optional + + :param table_name: Name of the reference table. + :type table_name: str + """ + 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.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_query_definition import MonitorFormulaAndFunctionReferenceTableQueryDefinition + return { + "oneOf": [ + MonitorFormulaAndFunctionEventQueryDefinition, + MonitorFormulaAndFunctionReferenceTableQueryDefinition, + ], + } diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_augmented_data_source.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_augmented_data_source.py new file mode 100644 index 0000000000..d6f495dc82 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_augmented_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionAggregateAugmentedDataSource(ModelSimple): + """ + Data source for aggregate augmented queries. + + :param value: If omitted defaults to "aggregate_augmented_query". Must be one of ["aggregate_augmented_query"]. + :type value: str + """ + + allowed_values = { + "aggregate_augmented_query", + } + AGGREGATE_AUGMENTED_QUERY: ClassVar["MonitorFormulaAndFunctionAggregateAugmentedDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionAggregateAugmentedDataSource.AGGREGATE_AUGMENTED_QUERY = MonitorFormulaAndFunctionAggregateAugmentedDataSource("aggregate_augmented_query") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_augmented_query_definition.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_augmented_query_definition.py new file mode 100644 index 0000000000..83884c5dd7 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_augmented_query_definition.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_augment_query import MonitorFormulaAndFunctionAggregateAugmentQuery + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_base_query import MonitorFormulaAndFunctionAggregateBaseQuery + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_compute import MonitorFormulaAndFunctionEventQueryDefinitionCompute + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_augmented_data_source import MonitorFormulaAndFunctionAggregateAugmentedDataSource + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by import MonitorFormulaAndFunctionEventQueryGroupBy + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_query_join_condition import MonitorFormulaAndFunctionAggregateQueryJoinCondition + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_query_definition import MonitorFormulaAndFunctionReferenceTableQueryDefinition + from datadog_api_client.v1.model.monitor_formula_and_function_metrics_query_definition import MonitorFormulaAndFunctionMetricsQueryDefinition + +class MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition(ModelNormal): + validations = { + "compute": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_augment_query import MonitorFormulaAndFunctionAggregateAugmentQuery + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_base_query import MonitorFormulaAndFunctionAggregateBaseQuery + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_compute import MonitorFormulaAndFunctionEventQueryDefinitionCompute + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_augmented_data_source import MonitorFormulaAndFunctionAggregateAugmentedDataSource + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by import MonitorFormulaAndFunctionEventQueryGroupBy + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_query_join_condition import MonitorFormulaAndFunctionAggregateQueryJoinCondition + return { + "augment_query": (MonitorFormulaAndFunctionAggregateAugmentQuery,), + "base_query": (MonitorFormulaAndFunctionAggregateBaseQuery,), + "compute": ([MonitorFormulaAndFunctionEventQueryDefinitionCompute],), + "data_source": (MonitorFormulaAndFunctionAggregateAugmentedDataSource,), + "group_by": ([MonitorFormulaAndFunctionEventQueryGroupBy],), + "join_condition": (MonitorFormulaAndFunctionAggregateQueryJoinCondition,), + "name": (str,), + } + attribute_map = { + "augment_query": "augment_query", + "base_query": "base_query", + "compute": "compute", + "data_source": "data_source", + "group_by": "group_by", + "join_condition": "join_condition", + "name": "name", + } + + def __init__(self_, augment_query: Union[MonitorFormulaAndFunctionAggregateAugmentQuery, MonitorFormulaAndFunctionEventQueryDefinition, MonitorFormulaAndFunctionReferenceTableQueryDefinition], base_query: Union[MonitorFormulaAndFunctionAggregateBaseQuery, MonitorFormulaAndFunctionEventQueryDefinition, MonitorFormulaAndFunctionMetricsQueryDefinition], compute: List[MonitorFormulaAndFunctionEventQueryDefinitionCompute], data_source: MonitorFormulaAndFunctionAggregateAugmentedDataSource, group_by: List[MonitorFormulaAndFunctionEventQueryGroupBy], join_condition: MonitorFormulaAndFunctionAggregateQueryJoinCondition, name: Union[str, UnsetType]=unset, **kwargs): + """ + A formula and functions aggregate augmented query. Used to enrich base query results with data from a reference table. + + :param augment_query: Augment query for aggregate augmented queries. Can be an events query or a reference table query. + :type augment_query: MonitorFormulaAndFunctionAggregateAugmentQuery + + :param base_query: Base query for aggregate queries. Can be an events query or a metrics query. + :type base_query: MonitorFormulaAndFunctionAggregateBaseQuery + + :param compute: Compute options for the query. + :type compute: [MonitorFormulaAndFunctionEventQueryDefinitionCompute] + + :param data_source: Data source for aggregate augmented queries. + :type data_source: MonitorFormulaAndFunctionAggregateAugmentedDataSource + + :param group_by: Group by options for the query. + :type group_by: [MonitorFormulaAndFunctionEventQueryGroupBy] + + :param join_condition: Join condition for aggregate augmented queries. + :type join_condition: MonitorFormulaAndFunctionAggregateQueryJoinCondition + + :param name: Name of the query for use in formulas. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.augment_query = augment_query + self_.base_query = base_query + self_.compute = compute + self_.data_source = data_source + self_.group_by = group_by + self_.join_condition = join_condition diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_base_query.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_base_query.py new file mode 100644 index 0000000000..6d0156e026 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_base_query.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorFormulaAndFunctionAggregateBaseQuery(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Base query for aggregate queries. Can be an events query or a metrics query. + + :param compute: Compute options. + :type compute: MonitorFormulaAndFunctionEventQueryDefinitionCompute + + :param data_source: Data source for event platform-based queries. + :type data_source: MonitorFormulaAndFunctionEventsDataSource + + :param group_by: Group by options. + :type group_by: [MonitorFormulaAndFunctionEventQueryGroupBy], optional + + :param indexes: An array of index names to query in the stream. Omit or use `[]` to query all indexes at once. + :type indexes: [str], optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param search: Search options. + :type search: MonitorFormulaAndFunctionEventQueryDefinitionSearch, optional + + :param aggregator: Aggregator for metrics queries. + :type aggregator: MonitorFormulaAndFunctionMetricsAggregator, optional + + :param query: The metrics query definition. + :type query: str + """ + 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.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.monitor_formula_and_function_metrics_query_definition import MonitorFormulaAndFunctionMetricsQueryDefinition + return { + "oneOf": [ + MonitorFormulaAndFunctionEventQueryDefinition, + MonitorFormulaAndFunctionMetricsQueryDefinition, + ], + } diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_filter_query.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_filter_query.py new file mode 100644 index 0000000000..07156dc0ed --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_filter_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorFormulaAndFunctionAggregateFilterQuery(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Filter query for aggregate filtered queries. Can be an events query or a reference table query. + + :param compute: Compute options. + :type compute: MonitorFormulaAndFunctionEventQueryDefinitionCompute + + :param data_source: Data source for event platform-based queries. + :type data_source: MonitorFormulaAndFunctionEventsDataSource + + :param group_by: Group by options. + :type group_by: [MonitorFormulaAndFunctionEventQueryGroupBy], optional + + :param indexes: An array of index names to query in the stream. Omit or use `[]` to query all indexes at once. + :type indexes: [str], optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param search: Search options. + :type search: MonitorFormulaAndFunctionEventQueryDefinitionSearch, optional + + :param columns: List of columns to retrieve from the reference table. + :type columns: [MonitorFormulaAndFunctionReferenceTableColumn], optional + + :param query_filter: Optional filter expression for the reference table query. + :type query_filter: str, optional + + :param table_name: Name of the reference table. + :type table_name: str + """ + 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.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_query_definition import MonitorFormulaAndFunctionReferenceTableQueryDefinition + return { + "oneOf": [ + MonitorFormulaAndFunctionEventQueryDefinition, + MonitorFormulaAndFunctionReferenceTableQueryDefinition, + ], + } diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_filtered_data_source.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_filtered_data_source.py new file mode 100644 index 0000000000..211c3a1288 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_filtered_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionAggregateFilteredDataSource(ModelSimple): + """ + Data source for aggregate filtered queries. + + :param value: If omitted defaults to "aggregate_filtered_query". Must be one of ["aggregate_filtered_query"]. + :type value: str + """ + + allowed_values = { + "aggregate_filtered_query", + } + AGGREGATE_FILTERED_QUERY: ClassVar["MonitorFormulaAndFunctionAggregateFilteredDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionAggregateFilteredDataSource.AGGREGATE_FILTERED_QUERY = MonitorFormulaAndFunctionAggregateFilteredDataSource("aggregate_filtered_query") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_filtered_query_definition.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_filtered_query_definition.py new file mode 100644 index 0000000000..95342c236b --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_filtered_query_definition.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_base_query import MonitorFormulaAndFunctionAggregateBaseQuery + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_compute import MonitorFormulaAndFunctionEventQueryDefinitionCompute + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filtered_data_source import MonitorFormulaAndFunctionAggregateFilteredDataSource + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filter_query import MonitorFormulaAndFunctionAggregateFilterQuery + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_query_filter import MonitorFormulaAndFunctionAggregateQueryFilter + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by import MonitorFormulaAndFunctionEventQueryGroupBy + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.monitor_formula_and_function_metrics_query_definition import MonitorFormulaAndFunctionMetricsQueryDefinition + from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_query_definition import MonitorFormulaAndFunctionReferenceTableQueryDefinition + +class MonitorFormulaAndFunctionAggregateFilteredQueryDefinition(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_base_query import MonitorFormulaAndFunctionAggregateBaseQuery + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_compute import MonitorFormulaAndFunctionEventQueryDefinitionCompute + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filtered_data_source import MonitorFormulaAndFunctionAggregateFilteredDataSource + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filter_query import MonitorFormulaAndFunctionAggregateFilterQuery + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_query_filter import MonitorFormulaAndFunctionAggregateQueryFilter + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by import MonitorFormulaAndFunctionEventQueryGroupBy + return { + "base_query": (MonitorFormulaAndFunctionAggregateBaseQuery,), + "compute": ([MonitorFormulaAndFunctionEventQueryDefinitionCompute],), + "data_source": (MonitorFormulaAndFunctionAggregateFilteredDataSource,), + "filter_query": (MonitorFormulaAndFunctionAggregateFilterQuery,), + "filters": ([MonitorFormulaAndFunctionAggregateQueryFilter],), + "group_by": ([MonitorFormulaAndFunctionEventQueryGroupBy],), + "name": (str,), + } + attribute_map = { + "base_query": "base_query", + "compute": "compute", + "data_source": "data_source", + "filter_query": "filter_query", + "filters": "filters", + "group_by": "group_by", + "name": "name", + } + + def __init__(self_, base_query: Union[MonitorFormulaAndFunctionAggregateBaseQuery, MonitorFormulaAndFunctionEventQueryDefinition, MonitorFormulaAndFunctionMetricsQueryDefinition], data_source: MonitorFormulaAndFunctionAggregateFilteredDataSource, filter_query: Union[MonitorFormulaAndFunctionAggregateFilterQuery, MonitorFormulaAndFunctionEventQueryDefinition, MonitorFormulaAndFunctionReferenceTableQueryDefinition], filters: List[MonitorFormulaAndFunctionAggregateQueryFilter], compute: Union[List[MonitorFormulaAndFunctionEventQueryDefinitionCompute], UnsetType]=unset, group_by: Union[List[MonitorFormulaAndFunctionEventQueryGroupBy], UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A formula and functions aggregate filtered query. Used to filter base query results using data from another source. + + :param base_query: Base query for aggregate queries. Can be an events query or a metrics query. + :type base_query: MonitorFormulaAndFunctionAggregateBaseQuery + + :param compute: Compute options for the query. + :type compute: [MonitorFormulaAndFunctionEventQueryDefinitionCompute], optional + + :param data_source: Data source for aggregate filtered queries. + :type data_source: MonitorFormulaAndFunctionAggregateFilteredDataSource + + :param filter_query: Filter query for aggregate filtered queries. Can be an events query or a reference table query. + :type filter_query: MonitorFormulaAndFunctionAggregateFilterQuery + + :param filters: Filter conditions for the query. + :type filters: [MonitorFormulaAndFunctionAggregateQueryFilter] + + :param group_by: Group by options for the query. + :type group_by: [MonitorFormulaAndFunctionEventQueryGroupBy], optional + + :param name: Name of the query for use in formulas. + :type name: str, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if group_by is not unset: + kwargs["group_by"] = group_by + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.base_query = base_query + self_.data_source = data_source + self_.filter_query = filter_query + self_.filters = filters diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_query_filter.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_query_filter.py new file mode 100644 index 0000000000..44e489b51f --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_query_filter.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorFormulaAndFunctionAggregateQueryFilter(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "base_attribute": (str,), + "exclude": (bool,), + "filter_attribute": (str,), + } + attribute_map = { + "base_attribute": "base_attribute", + "exclude": "exclude", + "filter_attribute": "filter_attribute", + } + + def __init__(self_, base_attribute: str, filter_attribute: str, exclude: Union[bool, UnsetType]=unset, **kwargs): + """ + Filter definition for aggregate filtered queries. + + :param base_attribute: Attribute from the base query to filter on. + :type base_attribute: str + + :param exclude: Whether to exclude matching records instead of including them. + :type exclude: bool, optional + + :param filter_attribute: Attribute from the filter query to match against. + :type filter_attribute: str + """ + if exclude is not unset: + kwargs["exclude"] = exclude + super().__init__(kwargs) + + + self_.base_attribute = base_attribute + self_.filter_attribute = filter_attribute diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_query_join_condition.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_query_join_condition.py new file mode 100644 index 0000000000..37e05da8a5 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_query_join_condition.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_query_join_type import MonitorFormulaAndFunctionAggregateQueryJoinType + +class MonitorFormulaAndFunctionAggregateQueryJoinCondition(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_query_join_type import MonitorFormulaAndFunctionAggregateQueryJoinType + return { + "augment_attribute": (str,), + "base_attribute": (str,), + "join_type": (MonitorFormulaAndFunctionAggregateQueryJoinType,), + } + attribute_map = { + "augment_attribute": "augment_attribute", + "base_attribute": "base_attribute", + "join_type": "join_type", + } + + def __init__(self_, augment_attribute: str, base_attribute: str, join_type: MonitorFormulaAndFunctionAggregateQueryJoinType, **kwargs): + """ + Join condition for aggregate augmented queries. + + :param augment_attribute: Attribute from the augment query to join on. + :type augment_attribute: str + + :param base_attribute: Attribute from the base query to join on. + :type base_attribute: str + + :param join_type: Join type for aggregate query join conditions. + :type join_type: MonitorFormulaAndFunctionAggregateQueryJoinType + """ + super().__init__(kwargs) + + + self_.augment_attribute = augment_attribute + self_.base_attribute = base_attribute + self_.join_type = join_type diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_query_join_type.py b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_query_join_type.py new file mode 100644 index 0000000000..ce1e183b71 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_aggregate_query_join_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionAggregateQueryJoinType(ModelSimple): + """ + Join type for aggregate query join conditions. + + :param value: Must be one of ["inner", "left"]. + :type value: str + """ + + allowed_values = { + "inner", + "left", + } + INNER: ClassVar["MonitorFormulaAndFunctionAggregateQueryJoinType"] + LEFT: ClassVar["MonitorFormulaAndFunctionAggregateQueryJoinType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionAggregateQueryJoinType.INNER = MonitorFormulaAndFunctionAggregateQueryJoinType("inner") +MonitorFormulaAndFunctionAggregateQueryJoinType.LEFT = MonitorFormulaAndFunctionAggregateQueryJoinType("left") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_cost_aggregator.py b/datadog_api_client/v1/model/monitor_formula_and_function_cost_aggregator.py new file mode 100644 index 0000000000..3bd89e02ef --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_cost_aggregator.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionCostAggregator(ModelSimple): + """ + Aggregation methods for metric queries. + + :param value: Must be one of ["avg", "sum", "max", "min", "last", "area", "l2norm", "percentile", "stddev"]. + :type value: str + """ + + allowed_values = { + "avg", + "sum", + "max", + "min", + "last", + "area", + "l2norm", + "percentile", + "stddev", + } + AVG: ClassVar["MonitorFormulaAndFunctionCostAggregator"] + SUM: ClassVar["MonitorFormulaAndFunctionCostAggregator"] + MAX: ClassVar["MonitorFormulaAndFunctionCostAggregator"] + MIN: ClassVar["MonitorFormulaAndFunctionCostAggregator"] + LAST: ClassVar["MonitorFormulaAndFunctionCostAggregator"] + AREA: ClassVar["MonitorFormulaAndFunctionCostAggregator"] + L2NORM: ClassVar["MonitorFormulaAndFunctionCostAggregator"] + PERCENTILE: ClassVar["MonitorFormulaAndFunctionCostAggregator"] + STDDEV: ClassVar["MonitorFormulaAndFunctionCostAggregator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionCostAggregator.AVG = MonitorFormulaAndFunctionCostAggregator("avg") +MonitorFormulaAndFunctionCostAggregator.SUM = MonitorFormulaAndFunctionCostAggregator("sum") +MonitorFormulaAndFunctionCostAggregator.MAX = MonitorFormulaAndFunctionCostAggregator("max") +MonitorFormulaAndFunctionCostAggregator.MIN = MonitorFormulaAndFunctionCostAggregator("min") +MonitorFormulaAndFunctionCostAggregator.LAST = MonitorFormulaAndFunctionCostAggregator("last") +MonitorFormulaAndFunctionCostAggregator.AREA = MonitorFormulaAndFunctionCostAggregator("area") +MonitorFormulaAndFunctionCostAggregator.L2NORM = MonitorFormulaAndFunctionCostAggregator("l2norm") +MonitorFormulaAndFunctionCostAggregator.PERCENTILE = MonitorFormulaAndFunctionCostAggregator("percentile") +MonitorFormulaAndFunctionCostAggregator.STDDEV = MonitorFormulaAndFunctionCostAggregator("stddev") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_cost_data_source.py b/datadog_api_client/v1/model/monitor_formula_and_function_cost_data_source.py new file mode 100644 index 0000000000..1fc5bb7f1f --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_cost_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionCostDataSource(ModelSimple): + """ + Data source for cost queries. + + :param value: Must be one of ["metrics", "cloud_cost", "datadog_usage"]. + :type value: str + """ + + allowed_values = { + "metrics", + "cloud_cost", + "datadog_usage", + } + METRICS: ClassVar["MonitorFormulaAndFunctionCostDataSource"] + CLOUD_COST: ClassVar["MonitorFormulaAndFunctionCostDataSource"] + DATADOG_USAGE: ClassVar["MonitorFormulaAndFunctionCostDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionCostDataSource.METRICS = MonitorFormulaAndFunctionCostDataSource("metrics") +MonitorFormulaAndFunctionCostDataSource.CLOUD_COST = MonitorFormulaAndFunctionCostDataSource("cloud_cost") +MonitorFormulaAndFunctionCostDataSource.DATADOG_USAGE = MonitorFormulaAndFunctionCostDataSource("datadog_usage") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_cost_query_definition.py b/datadog_api_client/v1/model/monitor_formula_and_function_cost_query_definition.py new file mode 100644 index 0000000000..79445d05a9 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_cost_query_definition.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_cost_aggregator import MonitorFormulaAndFunctionCostAggregator + from datadog_api_client.v1.model.monitor_formula_and_function_cost_data_source import MonitorFormulaAndFunctionCostDataSource + +class MonitorFormulaAndFunctionCostQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_cost_aggregator import MonitorFormulaAndFunctionCostAggregator + from datadog_api_client.v1.model.monitor_formula_and_function_cost_data_source import MonitorFormulaAndFunctionCostDataSource + return { + "aggregator": (MonitorFormulaAndFunctionCostAggregator,), + "data_source": (MonitorFormulaAndFunctionCostDataSource,), + "name": (str,), + "query": (str,), + } + attribute_map = { + "aggregator": "aggregator", + "data_source": "data_source", + "name": "name", + "query": "query", + } + + def __init__(self_, data_source: MonitorFormulaAndFunctionCostDataSource, name: str, query: str, aggregator: Union[MonitorFormulaAndFunctionCostAggregator, UnsetType]=unset, **kwargs): + """ + A formula and functions cost query. + + :param aggregator: Aggregation methods for metric queries. + :type aggregator: MonitorFormulaAndFunctionCostAggregator, optional + + :param data_source: Data source for cost queries. + :type data_source: MonitorFormulaAndFunctionCostDataSource + + :param name: Name of the query for use in formulas. + :type name: str + + :param query: The monitor query. + :type query: str + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + super().__init__(kwargs) + + + self_.data_source = data_source + self_.name = name + self_.query = query diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_data_jobs_query_definition.py b/datadog_api_client/v1/model/monitor_formula_and_function_data_jobs_query_definition.py new file mode 100644 index 0000000000..adec699fa4 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_data_jobs_query_definition.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +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/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_data_source.py b/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_data_source.py new file mode 100644 index 0000000000..a1b66563b3 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionDataQualityDataSource(ModelSimple): + """ + Data source for data quality queries. + + :param value: If omitted defaults to "data_quality_metrics". Must be one of ["data_quality_metrics"]. + :type value: str + """ + + allowed_values = { + "data_quality_metrics", + } + DATA_QUALITY_METRICS: ClassVar["MonitorFormulaAndFunctionDataQualityDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionDataQualityDataSource.DATA_QUALITY_METRICS = MonitorFormulaAndFunctionDataQualityDataSource("data_quality_metrics") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_model_type_override.py b/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_model_type_override.py new file mode 100644 index 0000000000..c1974a6886 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_model_type_override.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionDataQualityModelTypeOverride(ModelSimple): + """ + Override for the model type used in anomaly detection. + + :param value: Must be one of ["freshness", "percentage", "any"]. + :type value: str + """ + + allowed_values = { + "freshness", + "percentage", + "any", + } + FRESHNESS: ClassVar["MonitorFormulaAndFunctionDataQualityModelTypeOverride"] + PERCENTAGE: ClassVar["MonitorFormulaAndFunctionDataQualityModelTypeOverride"] + ANY: ClassVar["MonitorFormulaAndFunctionDataQualityModelTypeOverride"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionDataQualityModelTypeOverride.FRESHNESS = MonitorFormulaAndFunctionDataQualityModelTypeOverride("freshness") +MonitorFormulaAndFunctionDataQualityModelTypeOverride.PERCENTAGE = MonitorFormulaAndFunctionDataQualityModelTypeOverride("percentage") +MonitorFormulaAndFunctionDataQualityModelTypeOverride.ANY = MonitorFormulaAndFunctionDataQualityModelTypeOverride("any") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_monitor_options.py b/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_monitor_options.py new file mode 100644 index 0000000000..e66231fea0 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_monitor_options.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_model_type_override import MonitorFormulaAndFunctionDataQualityModelTypeOverride + +class MonitorFormulaAndFunctionDataQualityMonitorOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_model_type_override import MonitorFormulaAndFunctionDataQualityModelTypeOverride + return { + "crontab_override": (str,), + "custom_sql": (str,), + "custom_where": (str,), + "group_by_columns": ([str],), + "model_type_override": (MonitorFormulaAndFunctionDataQualityModelTypeOverride,), + "sensitivity": (float,), + } + attribute_map = { + "crontab_override": "crontab_override", + "custom_sql": "custom_sql", + "custom_where": "custom_where", + "group_by_columns": "group_by_columns", + "model_type_override": "model_type_override", + "sensitivity": "sensitivity", + } + + def __init__(self_, crontab_override: Union[str, UnsetType]=unset, custom_sql: Union[str, UnsetType]=unset, custom_where: Union[str, UnsetType]=unset, group_by_columns: Union[List[str], UnsetType]=unset, model_type_override: Union[MonitorFormulaAndFunctionDataQualityModelTypeOverride, UnsetType]=unset, sensitivity: Union[float, UnsetType]=unset, **kwargs): + """ + Monitor configuration options for data quality queries. + + :param crontab_override: Crontab expression to override the default schedule. + :type crontab_override: str, optional + + :param custom_sql: Custom SQL query for the monitor. + :type custom_sql: str, optional + + :param custom_where: Custom WHERE clause for the query. + :type custom_where: str, optional + + :param group_by_columns: Columns to group results by. + :type group_by_columns: [str], optional + + :param model_type_override: Override for the model type used in anomaly detection. + :type model_type_override: MonitorFormulaAndFunctionDataQualityModelTypeOverride, optional + + :param sensitivity: Sensitivity of the anomaly detection model, expressed as a multiplier on the width + of the predicted bounds. Higher values widen the bounds and produce fewer alerts; + lower values tighten them and produce more alerts. Defaults to ``3.0``. + :type sensitivity: float, optional + """ + if crontab_override is not unset: + kwargs["crontab_override"] = crontab_override + if custom_sql is not unset: + kwargs["custom_sql"] = custom_sql + if custom_where is not unset: + kwargs["custom_where"] = custom_where + if group_by_columns is not unset: + kwargs["group_by_columns"] = group_by_columns + if model_type_override is not unset: + kwargs["model_type_override"] = model_type_override + if sensitivity is not unset: + kwargs["sensitivity"] = sensitivity + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_query_definition.py b/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_query_definition.py new file mode 100644 index 0000000000..eeb3be7749 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_data_quality_query_definition.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_data_source import MonitorFormulaAndFunctionDataQualityDataSource + from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_monitor_options import MonitorFormulaAndFunctionDataQualityMonitorOptions + +class MonitorFormulaAndFunctionDataQualityQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_data_source import MonitorFormulaAndFunctionDataQualityDataSource + from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_monitor_options import MonitorFormulaAndFunctionDataQualityMonitorOptions + return { + "data_source": (MonitorFormulaAndFunctionDataQualityDataSource,), + "filter": (str,), + "group_by": ([str],), + "measure": (str,), + "monitor_options": (MonitorFormulaAndFunctionDataQualityMonitorOptions,), + "name": (str,), + "schema_version": (str,), + "scope": (str,), + } + attribute_map = { + "data_source": "data_source", + "filter": "filter", + "group_by": "group_by", + "measure": "measure", + "monitor_options": "monitor_options", + "name": "name", + "schema_version": "schema_version", + "scope": "scope", + } + + def __init__(self_, data_source: MonitorFormulaAndFunctionDataQualityDataSource, filter: str, measure: str, name: str, group_by: Union[List[str], UnsetType]=unset, monitor_options: Union[MonitorFormulaAndFunctionDataQualityMonitorOptions, UnsetType]=unset, schema_version: Union[str, UnsetType]=unset, scope: Union[str, UnsetType]=unset, **kwargs): + """ + A formula and functions data quality query. + + :param data_source: Data source for data quality queries. + :type data_source: MonitorFormulaAndFunctionDataQualityDataSource + + :param filter: Filter expression used to match on data entities. Uses Aastra query syntax. + :type filter: str + + :param group_by: Optional grouping fields for aggregation. + :type group_by: [str], optional + + :param measure: The data quality measure to query. Common values include: + ``bytes`` , ``cardinality`` , ``custom`` , ``freshness`` , ``max`` , ``mean`` , ``min`` , + ``nullness`` , ``percent_negative`` , ``percent_zero`` , ``row_count`` , ``stddev`` , + ``sum`` , ``uniqueness``. Additional values may be supported. + :type measure: str + + :param monitor_options: Monitor configuration options for data quality queries. + :type monitor_options: MonitorFormulaAndFunctionDataQualityMonitorOptions, optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param schema_version: Schema version for the data quality query. + :type schema_version: str, optional + + :param scope: Optional scoping expression to further filter metrics. Uses metrics filter syntax. + This is useful when an entity has been configured to emit metrics with additional tags. + :type scope: str, optional + """ + if group_by is not unset: + kwargs["group_by"] = group_by + if monitor_options is not unset: + kwargs["monitor_options"] = monitor_options + if schema_version is not unset: + kwargs["schema_version"] = schema_version + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.data_source = data_source + self_.filter = filter + self_.measure = measure + self_.name = name diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_event_aggregation.py b/datadog_api_client/v1/model/monitor_formula_and_function_event_aggregation.py new file mode 100644 index 0000000000..46f7db0bbb --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_event_aggregation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionEventAggregation(ModelSimple): + """ + Aggregation methods for event platform queries. + + :param value: Must be one of ["count", "cardinality", "median", "pc75", "pc90", "pc95", "pc98", "pc99", "sum", "min", "max", "avg"]. + :type value: str + """ + + allowed_values = { + "count", + "cardinality", + "median", + "pc75", + "pc90", + "pc95", + "pc98", + "pc99", + "sum", + "min", + "max", + "avg", + } + COUNT: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + CARDINALITY: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + MEDIAN: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + PC75: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + PC90: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + PC95: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + PC98: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + PC99: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + SUM: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + MIN: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + MAX: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + AVG: ClassVar["MonitorFormulaAndFunctionEventAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionEventAggregation.COUNT = MonitorFormulaAndFunctionEventAggregation("count") +MonitorFormulaAndFunctionEventAggregation.CARDINALITY = MonitorFormulaAndFunctionEventAggregation("cardinality") +MonitorFormulaAndFunctionEventAggregation.MEDIAN = MonitorFormulaAndFunctionEventAggregation("median") +MonitorFormulaAndFunctionEventAggregation.PC75 = MonitorFormulaAndFunctionEventAggregation("pc75") +MonitorFormulaAndFunctionEventAggregation.PC90 = MonitorFormulaAndFunctionEventAggregation("pc90") +MonitorFormulaAndFunctionEventAggregation.PC95 = MonitorFormulaAndFunctionEventAggregation("pc95") +MonitorFormulaAndFunctionEventAggregation.PC98 = MonitorFormulaAndFunctionEventAggregation("pc98") +MonitorFormulaAndFunctionEventAggregation.PC99 = MonitorFormulaAndFunctionEventAggregation("pc99") +MonitorFormulaAndFunctionEventAggregation.SUM = MonitorFormulaAndFunctionEventAggregation("sum") +MonitorFormulaAndFunctionEventAggregation.MIN = MonitorFormulaAndFunctionEventAggregation("min") +MonitorFormulaAndFunctionEventAggregation.MAX = MonitorFormulaAndFunctionEventAggregation("max") +MonitorFormulaAndFunctionEventAggregation.AVG = MonitorFormulaAndFunctionEventAggregation("avg") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_event_query_definition.py b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_definition.py new file mode 100644 index 0000000000..02cb310ce2 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_definition.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_compute import MonitorFormulaAndFunctionEventQueryDefinitionCompute + from datadog_api_client.v1.model.monitor_formula_and_function_events_data_source import MonitorFormulaAndFunctionEventsDataSource + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by import MonitorFormulaAndFunctionEventQueryGroupBy + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_search import MonitorFormulaAndFunctionEventQueryDefinitionSearch + +class MonitorFormulaAndFunctionEventQueryDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_compute import MonitorFormulaAndFunctionEventQueryDefinitionCompute + from datadog_api_client.v1.model.monitor_formula_and_function_events_data_source import MonitorFormulaAndFunctionEventsDataSource + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by import MonitorFormulaAndFunctionEventQueryGroupBy + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_search import MonitorFormulaAndFunctionEventQueryDefinitionSearch + return { + "compute": (MonitorFormulaAndFunctionEventQueryDefinitionCompute,), + "data_source": (MonitorFormulaAndFunctionEventsDataSource,), + "group_by": ([MonitorFormulaAndFunctionEventQueryGroupBy],), + "indexes": ([str],), + "name": (str,), + "search": (MonitorFormulaAndFunctionEventQueryDefinitionSearch,), + } + attribute_map = { + "compute": "compute", + "data_source": "data_source", + "group_by": "group_by", + "indexes": "indexes", + "name": "name", + "search": "search", + } + + def __init__(self_, compute: MonitorFormulaAndFunctionEventQueryDefinitionCompute, data_source: MonitorFormulaAndFunctionEventsDataSource, name: str, group_by: Union[List[MonitorFormulaAndFunctionEventQueryGroupBy], UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, search: Union[MonitorFormulaAndFunctionEventQueryDefinitionSearch, UnsetType]=unset, **kwargs): + """ + A formula and functions events query. + + :param compute: Compute options. + :type compute: MonitorFormulaAndFunctionEventQueryDefinitionCompute + + :param data_source: Data source for event platform-based queries. + :type data_source: MonitorFormulaAndFunctionEventsDataSource + + :param group_by: Group by options. + :type group_by: [MonitorFormulaAndFunctionEventQueryGroupBy], optional + + :param indexes: An array of index names to query in the stream. Omit or use ``[]`` to query all indexes at once. + :type indexes: [str], optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param search: Search options. + :type search: MonitorFormulaAndFunctionEventQueryDefinitionSearch, optional + """ + if group_by is not unset: + kwargs["group_by"] = group_by + if indexes is not unset: + kwargs["indexes"] = indexes + if search is not unset: + kwargs["search"] = search + super().__init__(kwargs) + + + self_.compute = compute + self_.data_source = data_source + self_.name = name diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_event_query_definition_compute.py b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_definition_compute.py new file mode 100644 index 0000000000..78bd19d665 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_definition_compute.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_event_aggregation import MonitorFormulaAndFunctionEventAggregation + +class MonitorFormulaAndFunctionEventQueryDefinitionCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_event_aggregation import MonitorFormulaAndFunctionEventAggregation + return { + "aggregation": (MonitorFormulaAndFunctionEventAggregation,), + "interval": (int,), + "metric": (str,), + "name": (str,), + "source": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + "name": "name", + "source": "source", + } + + def __init__(self_, aggregation: MonitorFormulaAndFunctionEventAggregation, interval: Union[int, UnsetType]=unset, metric: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, source: Union[str, UnsetType]=unset, **kwargs): + """ + Compute options. + + :param aggregation: Aggregation methods for event platform queries. + :type aggregation: MonitorFormulaAndFunctionEventAggregation + + :param interval: A time interval in milliseconds. + :type interval: int, optional + + :param metric: Measurable attribute to compute. + :type metric: str, optional + + :param name: The name assigned to this aggregation, when multiple aggregations are defined for a query. + :type name: str, optional + + :param source: Source reference for composite query payloads. + :type source: str, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + if name is not unset: + kwargs["name"] = name + if source is not unset: + kwargs["source"] = source + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_event_query_definition_search.py b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_definition_search.py new file mode 100644 index 0000000000..b55ee3cb16 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_definition_search.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorFormulaAndFunctionEventQueryDefinitionSearch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: str, **kwargs): + """ + Search options. + + :param query: Events search string. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_event_query_group_by.py b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_group_by.py new file mode 100644 index 0000000000..884f3dbba9 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_group_by.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by_sort import MonitorFormulaAndFunctionEventQueryGroupBySort + +class MonitorFormulaAndFunctionEventQueryGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by_sort import MonitorFormulaAndFunctionEventQueryGroupBySort + return { + "facet": (str,), + "limit": (int,), + "sort": (MonitorFormulaAndFunctionEventQueryGroupBySort,), + "source": (str,), + } + attribute_map = { + "facet": "facet", + "limit": "limit", + "sort": "sort", + "source": "source", + } + + def __init__(self_, facet: str, limit: Union[int, UnsetType]=unset, sort: Union[MonitorFormulaAndFunctionEventQueryGroupBySort, UnsetType]=unset, source: Union[str, UnsetType]=unset, **kwargs): + """ + List of objects used to group by. + + :param facet: Event facet. + :type facet: str + + :param limit: Number of groups to return. + :type limit: int, optional + + :param sort: Options for sorting group by results. + :type sort: MonitorFormulaAndFunctionEventQueryGroupBySort, optional + + :param source: Source reference for composite query payloads. + :type source: str, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + if source is not unset: + kwargs["source"] = source + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_event_query_group_by_sort.py b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_group_by_sort.py new file mode 100644 index 0000000000..96e2ace494 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_event_query_group_by_sort.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_event_aggregation import MonitorFormulaAndFunctionEventAggregation + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + +class MonitorFormulaAndFunctionEventQueryGroupBySort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_event_aggregation import MonitorFormulaAndFunctionEventAggregation + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + return { + "aggregation": (MonitorFormulaAndFunctionEventAggregation,), + "metric": (str,), + "order": (QuerySortOrder,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + "order": "order", + } + + def __init__(self_, aggregation: MonitorFormulaAndFunctionEventAggregation, metric: Union[str, UnsetType]=unset, order: Union[QuerySortOrder, UnsetType]=unset, **kwargs): + """ + Options for sorting group by results. + + :param aggregation: Aggregation methods for event platform queries. + :type aggregation: MonitorFormulaAndFunctionEventAggregation + + :param metric: Metric used for sorting group by results. + :type metric: str, optional + + :param order: Direction of sort. + :type order: QuerySortOrder, optional + """ + if metric is not unset: + kwargs["metric"] = metric + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_events_data_source.py b/datadog_api_client/v1/model/monitor_formula_and_function_events_data_source.py new file mode 100644 index 0000000000..0d18644752 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_events_data_source.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionEventsDataSource(ModelSimple): + """ + Data source for event platform-based queries. + + :param value: Must be one of ["rum", "ci_pipelines", "ci_tests", "audit", "events", "logs", "spans", "database_queries", "network", "network_path"]. + :type value: str + """ + + allowed_values = { + "rum", + "ci_pipelines", + "ci_tests", + "audit", + "events", + "logs", + "spans", + "database_queries", + "network", + "network_path", + } + RUM: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + CI_PIPELINES: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + CI_TESTS: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + AUDIT: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + EVENTS: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + LOGS: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + SPANS: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + DATABASE_QUERIES: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + NETWORK: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + NETWORK_PATH: ClassVar["MonitorFormulaAndFunctionEventsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionEventsDataSource.RUM = MonitorFormulaAndFunctionEventsDataSource("rum") +MonitorFormulaAndFunctionEventsDataSource.CI_PIPELINES = MonitorFormulaAndFunctionEventsDataSource("ci_pipelines") +MonitorFormulaAndFunctionEventsDataSource.CI_TESTS = MonitorFormulaAndFunctionEventsDataSource("ci_tests") +MonitorFormulaAndFunctionEventsDataSource.AUDIT = MonitorFormulaAndFunctionEventsDataSource("audit") +MonitorFormulaAndFunctionEventsDataSource.EVENTS = MonitorFormulaAndFunctionEventsDataSource("events") +MonitorFormulaAndFunctionEventsDataSource.LOGS = MonitorFormulaAndFunctionEventsDataSource("logs") +MonitorFormulaAndFunctionEventsDataSource.SPANS = MonitorFormulaAndFunctionEventsDataSource("spans") +MonitorFormulaAndFunctionEventsDataSource.DATABASE_QUERIES = MonitorFormulaAndFunctionEventsDataSource("database_queries") +MonitorFormulaAndFunctionEventsDataSource.NETWORK = MonitorFormulaAndFunctionEventsDataSource("network") +MonitorFormulaAndFunctionEventsDataSource.NETWORK_PATH = MonitorFormulaAndFunctionEventsDataSource("network_path") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_metrics_aggregator.py b/datadog_api_client/v1/model/monitor_formula_and_function_metrics_aggregator.py new file mode 100644 index 0000000000..c6adee7917 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_metrics_aggregator.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionMetricsAggregator(ModelSimple): + """ + Aggregator for metrics queries. + + :param value: Must be one of ["avg", "min", "max", "sum", "last", "mean", "area", "l2norm", "percentile", "stddev", "count_unique"]. + :type value: str + """ + + allowed_values = { + "avg", + "min", + "max", + "sum", + "last", + "mean", + "area", + "l2norm", + "percentile", + "stddev", + "count_unique", + } + AVG: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + MIN: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + MAX: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + SUM: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + LAST: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + MEAN: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + AREA: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + L2NORM: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + PERCENTILE: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + STDDEV: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + COUNT_UNIQUE: ClassVar["MonitorFormulaAndFunctionMetricsAggregator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionMetricsAggregator.AVG = MonitorFormulaAndFunctionMetricsAggregator("avg") +MonitorFormulaAndFunctionMetricsAggregator.MIN = MonitorFormulaAndFunctionMetricsAggregator("min") +MonitorFormulaAndFunctionMetricsAggregator.MAX = MonitorFormulaAndFunctionMetricsAggregator("max") +MonitorFormulaAndFunctionMetricsAggregator.SUM = MonitorFormulaAndFunctionMetricsAggregator("sum") +MonitorFormulaAndFunctionMetricsAggregator.LAST = MonitorFormulaAndFunctionMetricsAggregator("last") +MonitorFormulaAndFunctionMetricsAggregator.MEAN = MonitorFormulaAndFunctionMetricsAggregator("mean") +MonitorFormulaAndFunctionMetricsAggregator.AREA = MonitorFormulaAndFunctionMetricsAggregator("area") +MonitorFormulaAndFunctionMetricsAggregator.L2NORM = MonitorFormulaAndFunctionMetricsAggregator("l2norm") +MonitorFormulaAndFunctionMetricsAggregator.PERCENTILE = MonitorFormulaAndFunctionMetricsAggregator("percentile") +MonitorFormulaAndFunctionMetricsAggregator.STDDEV = MonitorFormulaAndFunctionMetricsAggregator("stddev") +MonitorFormulaAndFunctionMetricsAggregator.COUNT_UNIQUE = MonitorFormulaAndFunctionMetricsAggregator("count_unique") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_metrics_data_source.py b/datadog_api_client/v1/model/monitor_formula_and_function_metrics_data_source.py new file mode 100644 index 0000000000..726740e8c3 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_metrics_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionMetricsDataSource(ModelSimple): + """ + Data source for metrics queries. + + :param value: Must be one of ["metrics", "cloud_cost", "datadog_usage"]. + :type value: str + """ + + allowed_values = { + "metrics", + "cloud_cost", + "datadog_usage", + } + METRICS: ClassVar["MonitorFormulaAndFunctionMetricsDataSource"] + CLOUD_COST: ClassVar["MonitorFormulaAndFunctionMetricsDataSource"] + DATADOG_USAGE: ClassVar["MonitorFormulaAndFunctionMetricsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionMetricsDataSource.METRICS = MonitorFormulaAndFunctionMetricsDataSource("metrics") +MonitorFormulaAndFunctionMetricsDataSource.CLOUD_COST = MonitorFormulaAndFunctionMetricsDataSource("cloud_cost") +MonitorFormulaAndFunctionMetricsDataSource.DATADOG_USAGE = MonitorFormulaAndFunctionMetricsDataSource("datadog_usage") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_metrics_query_definition.py b/datadog_api_client/v1/model/monitor_formula_and_function_metrics_query_definition.py new file mode 100644 index 0000000000..690975ae4a --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_metrics_query_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_metrics_aggregator import MonitorFormulaAndFunctionMetricsAggregator + from datadog_api_client.v1.model.monitor_formula_and_function_metrics_data_source import MonitorFormulaAndFunctionMetricsDataSource + +class MonitorFormulaAndFunctionMetricsQueryDefinition(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_metrics_aggregator import MonitorFormulaAndFunctionMetricsAggregator + from datadog_api_client.v1.model.monitor_formula_and_function_metrics_data_source import MonitorFormulaAndFunctionMetricsDataSource + return { + "aggregator": (MonitorFormulaAndFunctionMetricsAggregator,), + "data_source": (MonitorFormulaAndFunctionMetricsDataSource,), + "name": (str,), + "query": (str,), + } + attribute_map = { + "aggregator": "aggregator", + "data_source": "data_source", + "name": "name", + "query": "query", + } + + def __init__(self_, data_source: MonitorFormulaAndFunctionMetricsDataSource, query: str, aggregator: Union[MonitorFormulaAndFunctionMetricsAggregator, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A formula and functions metrics query for use in aggregate queries. + + :param aggregator: Aggregator for metrics queries. + :type aggregator: MonitorFormulaAndFunctionMetricsAggregator, optional + + :param data_source: Data source for metrics queries. + :type data_source: MonitorFormulaAndFunctionMetricsDataSource + + :param name: Name of the query for use in formulas. + :type name: str, optional + + :param query: The metrics query definition. + :type query: str + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.data_source = data_source + self_.query = query diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_query_definition.py b/datadog_api_client/v1/model/monitor_formula_and_function_query_definition.py new file mode 100644 index 0000000000..098dab726d --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_query_definition.py @@ -0,0 +1,129 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorFormulaAndFunctionQueryDefinition(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A formula and function query. + + :param compute: Compute options. + :type compute: MonitorFormulaAndFunctionEventQueryDefinitionCompute + + :param data_source: Data source for event platform-based queries. + :type data_source: MonitorFormulaAndFunctionEventsDataSource + + :param group_by: Group by options. + :type group_by: [MonitorFormulaAndFunctionEventQueryGroupBy], optional + + :param indexes: An array of index names to query in the stream. Omit or use `[]` to query all indexes at once. + :type indexes: [str], optional + + :param name: Name of the query for use in formulas. + :type name: str + + :param search: Search options. + :type search: MonitorFormulaAndFunctionEventQueryDefinitionSearch, optional + + :param aggregator: Aggregation methods for metric queries. + :type aggregator: MonitorFormulaAndFunctionCostAggregator, optional + + :param query: The monitor query. + :type query: str + + :param filter: Filter expression used to match on data entities. Uses Aastra query syntax. + :type filter: str + + :param measure: The data quality measure to query. Common values include: + `bytes`, `cardinality`, `custom`, `freshness`, `max`, `mean`, `min`, + `nullness`, `percent_negative`, `percent_zero`, `row_count`, `stddev`, + `sum`, `uniqueness`. Additional values may be supported. + :type measure: str + + :param monitor_options: Monitor configuration options for data quality queries. + :type monitor_options: MonitorFormulaAndFunctionDataQualityMonitorOptions, optional + + :param schema_version: Schema version for the data quality query. + :type schema_version: str, optional + + :param scope: Optional scoping expression to further filter metrics. Uses metrics filter syntax. + 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 + + :param base_query: Base query for aggregate queries. Can be an events query or a metrics query. + :type base_query: MonitorFormulaAndFunctionAggregateBaseQuery + + :param join_condition: Join condition for aggregate augmented queries. + :type join_condition: MonitorFormulaAndFunctionAggregateQueryJoinCondition + + :param filter_query: Filter query for aggregate filtered queries. Can be an events query or a reference table query. + :type filter_query: MonitorFormulaAndFunctionAggregateFilterQuery + + :param filters: Filter conditions for the query. + :type filters: [MonitorFormulaAndFunctionAggregateQueryFilter] + """ + 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.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition + 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_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 + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filtered_query_definition import MonitorFormulaAndFunctionAggregateFilteredQueryDefinition + return { + "oneOf": [ + MonitorFormulaAndFunctionEventQueryDefinition, + MonitorFormulaAndFunctionCostQueryDefinition, + MonitorFormulaAndFunctionDataQualityQueryDefinition, + MonitorFormulaAndFunctionDataJobsQueryDefinition, + MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, + MonitorFormulaAndFunctionAggregateFilteredQueryDefinition, + ], + } diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_reference_table_column.py b/datadog_api_client/v1/model/monitor_formula_and_function_reference_table_column.py new file mode 100644 index 0000000000..ce88a43495 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_reference_table_column.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorFormulaAndFunctionReferenceTableColumn(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "alias": (str,), + "name": (str,), + } + attribute_map = { + "alias": "alias", + "name": "name", + } + + def __init__(self_, name: str, alias: Union[str, UnsetType]=unset, **kwargs): + """ + A column definition for reference table queries. + + :param alias: Optional alias for the column. + :type alias: str, optional + + :param name: Name of the column. + :type name: str + """ + if alias is not unset: + kwargs["alias"] = alias + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_reference_table_data_source.py b/datadog_api_client/v1/model/monitor_formula_and_function_reference_table_data_source.py new file mode 100644 index 0000000000..ffab5c9000 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_reference_table_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorFormulaAndFunctionReferenceTableDataSource(ModelSimple): + """ + Data source for reference table queries. + + :param value: If omitted defaults to "reference_table". Must be one of ["reference_table"]. + :type value: str + """ + + allowed_values = { + "reference_table", + } + REFERENCE_TABLE: ClassVar["MonitorFormulaAndFunctionReferenceTableDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorFormulaAndFunctionReferenceTableDataSource.REFERENCE_TABLE = MonitorFormulaAndFunctionReferenceTableDataSource("reference_table") diff --git a/datadog_api_client/v1/model/monitor_formula_and_function_reference_table_query_definition.py b/datadog_api_client/v1/model/monitor_formula_and_function_reference_table_query_definition.py new file mode 100644 index 0000000000..03f46ec912 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_formula_and_function_reference_table_query_definition.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_column import MonitorFormulaAndFunctionReferenceTableColumn + from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_data_source import MonitorFormulaAndFunctionReferenceTableDataSource + +class MonitorFormulaAndFunctionReferenceTableQueryDefinition(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_column import MonitorFormulaAndFunctionReferenceTableColumn + from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_data_source import MonitorFormulaAndFunctionReferenceTableDataSource + return { + "columns": ([MonitorFormulaAndFunctionReferenceTableColumn],), + "data_source": (MonitorFormulaAndFunctionReferenceTableDataSource,), + "name": (str,), + "query_filter": (str,), + "table_name": (str,), + } + attribute_map = { + "columns": "columns", + "data_source": "data_source", + "name": "name", + "query_filter": "query_filter", + "table_name": "table_name", + } + + def __init__(self_, data_source: MonitorFormulaAndFunctionReferenceTableDataSource, table_name: str, columns: Union[List[MonitorFormulaAndFunctionReferenceTableColumn], UnsetType]=unset, name: Union[str, UnsetType]=unset, query_filter: Union[str, UnsetType]=unset, **kwargs): + """ + A reference table query for use in aggregate queries. + + :param columns: List of columns to retrieve from the reference table. + :type columns: [MonitorFormulaAndFunctionReferenceTableColumn], optional + + :param data_source: Data source for reference table queries. + :type data_source: MonitorFormulaAndFunctionReferenceTableDataSource + + :param name: Name of the query. + :type name: str, optional + + :param query_filter: Optional filter expression for the reference table query. + :type query_filter: str, optional + + :param table_name: Name of the reference table. + :type table_name: str + """ + if columns is not unset: + kwargs["columns"] = columns + if name is not unset: + kwargs["name"] = name + if query_filter is not unset: + kwargs["query_filter"] = query_filter + super().__init__(kwargs) + + + self_.data_source = data_source + self_.table_name = table_name diff --git a/datadog_api_client/v1/model/monitor_group_search_response.py b/datadog_api_client/v1/model/monitor_group_search_response.py new file mode 100644 index 0000000000..3034d6f529 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_group_search_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_group_search_response_counts import MonitorGroupSearchResponseCounts + from datadog_api_client.v1.model.monitor_group_search_result import MonitorGroupSearchResult + from datadog_api_client.v1.model.monitor_search_response_metadata import MonitorSearchResponseMetadata + +class MonitorGroupSearchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_group_search_response_counts import MonitorGroupSearchResponseCounts + from datadog_api_client.v1.model.monitor_group_search_result import MonitorGroupSearchResult + from datadog_api_client.v1.model.monitor_search_response_metadata import MonitorSearchResponseMetadata + return { + "counts": (MonitorGroupSearchResponseCounts,), + "groups": ([MonitorGroupSearchResult],), + "metadata": (MonitorSearchResponseMetadata,), + } + attribute_map = { + "counts": "counts", + "groups": "groups", + "metadata": "metadata", + } + read_only_vars = { + "counts", + "groups", + } + + def __init__(self_, counts: Union[MonitorGroupSearchResponseCounts, UnsetType]=unset, groups: Union[List[MonitorGroupSearchResult], UnsetType]=unset, metadata: Union[MonitorSearchResponseMetadata, UnsetType]=unset, **kwargs): + """ + The response of a monitor group search. + + :param counts: The counts of monitor groups per different criteria. + :type counts: MonitorGroupSearchResponseCounts, optional + + :param groups: The list of found monitor groups. + :type groups: [MonitorGroupSearchResult], optional + + :param metadata: Metadata about the response. + :type metadata: MonitorSearchResponseMetadata, optional + """ + if counts is not unset: + kwargs["counts"] = counts + if groups is not unset: + kwargs["groups"] = groups + if metadata is not unset: + kwargs["metadata"] = metadata + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_group_search_response_counts.py b/datadog_api_client/v1/model/monitor_group_search_response_counts.py new file mode 100644 index 0000000000..6225603926 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_group_search_response_counts.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_search_count import MonitorSearchCount + +class MonitorGroupSearchResponseCounts(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_search_count import MonitorSearchCount + return { + "status": (MonitorSearchCount,), + "type": (MonitorSearchCount,), + } + attribute_map = { + "status": "status", + "type": "type", + } + + def __init__(self_, status: Union[MonitorSearchCount, UnsetType]=unset, type: Union[MonitorSearchCount, UnsetType]=unset, **kwargs): + """ + The counts of monitor groups per different criteria. + + :param status: Search facets. + :type status: MonitorSearchCount, optional + + :param type: Search facets. + :type type: MonitorSearchCount, optional + """ + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_group_search_result.py b/datadog_api_client/v1/model/monitor_group_search_result.py new file mode 100644 index 0000000000..7a59167645 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_group_search_result.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + +class MonitorGroupSearchResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + return { + "group": (str,), + "group_tags": ([str],), + "last_nodata_ts": (int,), + "last_triggered_ts": (int, none_type), + "monitor_id": (int,), + "monitor_name": (str,), + "status": (MonitorOverallStates,), + } + attribute_map = { + "group": "group", + "group_tags": "group_tags", + "last_nodata_ts": "last_nodata_ts", + "last_triggered_ts": "last_triggered_ts", + "monitor_id": "monitor_id", + "monitor_name": "monitor_name", + "status": "status", + } + read_only_vars = { + "group", + "group_tags", + "last_nodata_ts", + "last_triggered_ts", + "monitor_id", + "monitor_name", + "status", + } + + def __init__(self_, group: Union[str, UnsetType]=unset, group_tags: Union[List[str], UnsetType]=unset, last_nodata_ts: Union[int, UnsetType]=unset, last_triggered_ts: Union[int, none_type, UnsetType]=unset, monitor_id: Union[int, UnsetType]=unset, monitor_name: Union[str, UnsetType]=unset, status: Union[MonitorOverallStates, UnsetType]=unset, **kwargs): + """ + A single monitor group search result. + + :param group: The name of the group. + :type group: str, optional + + :param group_tags: The list of tags of the monitor group. + :type group_tags: [str], optional + + :param last_nodata_ts: Latest timestamp the monitor group was in NO_DATA state. + :type last_nodata_ts: int, optional + + :param last_triggered_ts: Latest timestamp the monitor group triggered. + :type last_triggered_ts: int, none_type, optional + + :param monitor_id: The ID of the monitor. + :type monitor_id: int, optional + + :param monitor_name: The name of the monitor. + :type monitor_name: str, optional + + :param status: The different states your monitor can be in. + :type status: MonitorOverallStates, optional + """ + if group is not unset: + kwargs["group"] = group + if group_tags is not unset: + kwargs["group_tags"] = group_tags + if last_nodata_ts is not unset: + kwargs["last_nodata_ts"] = last_nodata_ts + if last_triggered_ts is not unset: + kwargs["last_triggered_ts"] = last_triggered_ts + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if monitor_name is not unset: + kwargs["monitor_name"] = monitor_name + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_options.py b/datadog_api_client/v1/model/monitor_options.py new file mode 100644 index 0000000000..6973522903 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_options.py @@ -0,0 +1,332 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_options_aggregation import MonitorOptionsAggregation + from datadog_api_client.v1.model.monitor_device_id import MonitorDeviceID + from datadog_api_client.v1.model.monitor_options_notification_presets import MonitorOptionsNotificationPresets + from datadog_api_client.v1.model.on_missing_data_option import OnMissingDataOption + from datadog_api_client.v1.model.monitor_renotify_status_type import MonitorRenotifyStatusType + from datadog_api_client.v1.model.monitor_options_scheduling_options import MonitorOptionsSchedulingOptions + from datadog_api_client.v1.model.monitor_threshold_window_options import MonitorThresholdWindowOptions + from datadog_api_client.v1.model.monitor_thresholds import MonitorThresholds + from datadog_api_client.v1.model.monitor_formula_and_function_query_definition import MonitorFormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition + 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_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 + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filtered_query_definition import MonitorFormulaAndFunctionAggregateFilteredQueryDefinition + +class MonitorOptions(ModelNormal): + validations = { + "min_failure_duration": { + "inclusive_maximum": 7200, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_options_aggregation import MonitorOptionsAggregation + from datadog_api_client.v1.model.monitor_device_id import MonitorDeviceID + from datadog_api_client.v1.model.monitor_options_notification_presets import MonitorOptionsNotificationPresets + from datadog_api_client.v1.model.on_missing_data_option import OnMissingDataOption + from datadog_api_client.v1.model.monitor_renotify_status_type import MonitorRenotifyStatusType + from datadog_api_client.v1.model.monitor_options_scheduling_options import MonitorOptionsSchedulingOptions + from datadog_api_client.v1.model.monitor_threshold_window_options import MonitorThresholdWindowOptions + from datadog_api_client.v1.model.monitor_thresholds import MonitorThresholds + from datadog_api_client.v1.model.monitor_formula_and_function_query_definition import MonitorFormulaAndFunctionQueryDefinition + return { + "aggregation": (MonitorOptionsAggregation,), + "device_ids": ([MonitorDeviceID],), + "enable_logs_sample": (bool,), + "enable_samples": (bool,), + "escalation_message": (str,), + "evaluation_delay": (int, none_type), + "group_retention_duration": (str,), + "groupby_simple_monitor": (bool,), + "include_tags": (bool,), + "locked": (bool,), + "min_failure_duration": (int, none_type), + "min_location_failed": (int, none_type), + "new_group_delay": (int, none_type), + "new_host_delay": (int, none_type), + "no_data_timeframe": (int, none_type), + "notification_preset_name": (MonitorOptionsNotificationPresets,), + "notify_audit": (bool,), + "notify_by": ([str],), + "notify_no_data": (bool,), + "on_missing_data": (OnMissingDataOption,), + "renotify_interval": (int, none_type), + "renotify_occurrences": (int, none_type), + "renotify_statuses": ([MonitorRenotifyStatusType], none_type), + "require_full_window": (bool,), + "scheduling_options": (MonitorOptionsSchedulingOptions,), + "silenced": ({str: (int, none_type,)},), + "synthetics_check_id": (str, none_type), + "threshold_windows": (MonitorThresholdWindowOptions,), + "thresholds": (MonitorThresholds,), + "timeout_h": (int, none_type), + "variables": ([MonitorFormulaAndFunctionQueryDefinition],), + } + attribute_map = { + "aggregation": "aggregation", + "device_ids": "device_ids", + "enable_logs_sample": "enable_logs_sample", + "enable_samples": "enable_samples", + "escalation_message": "escalation_message", + "evaluation_delay": "evaluation_delay", + "group_retention_duration": "group_retention_duration", + "groupby_simple_monitor": "groupby_simple_monitor", + "include_tags": "include_tags", + "locked": "locked", + "min_failure_duration": "min_failure_duration", + "min_location_failed": "min_location_failed", + "new_group_delay": "new_group_delay", + "new_host_delay": "new_host_delay", + "no_data_timeframe": "no_data_timeframe", + "notification_preset_name": "notification_preset_name", + "notify_audit": "notify_audit", + "notify_by": "notify_by", + "notify_no_data": "notify_no_data", + "on_missing_data": "on_missing_data", + "renotify_interval": "renotify_interval", + "renotify_occurrences": "renotify_occurrences", + "renotify_statuses": "renotify_statuses", + "require_full_window": "require_full_window", + "scheduling_options": "scheduling_options", + "silenced": "silenced", + "synthetics_check_id": "synthetics_check_id", + "threshold_windows": "threshold_windows", + "thresholds": "thresholds", + "timeout_h": "timeout_h", + "variables": "variables", + } + read_only_vars = { + "aggregation", + "device_ids", + } + + def __init__(self_, aggregation: Union[MonitorOptionsAggregation, UnsetType]=unset, device_ids: Union[List[MonitorDeviceID], UnsetType]=unset, enable_logs_sample: Union[bool, UnsetType]=unset, enable_samples: Union[bool, UnsetType]=unset, escalation_message: Union[str, UnsetType]=unset, evaluation_delay: Union[int, none_type, UnsetType]=unset, group_retention_duration: Union[str, UnsetType]=unset, groupby_simple_monitor: Union[bool, UnsetType]=unset, include_tags: Union[bool, UnsetType]=unset, locked: Union[bool, UnsetType]=unset, min_failure_duration: Union[int, none_type, UnsetType]=unset, min_location_failed: Union[int, none_type, UnsetType]=unset, new_group_delay: Union[int, none_type, UnsetType]=unset, new_host_delay: Union[int, none_type, UnsetType]=unset, no_data_timeframe: Union[int, none_type, UnsetType]=unset, notification_preset_name: Union[MonitorOptionsNotificationPresets, UnsetType]=unset, notify_audit: Union[bool, UnsetType]=unset, notify_by: Union[List[str], UnsetType]=unset, notify_no_data: Union[bool, UnsetType]=unset, on_missing_data: Union[OnMissingDataOption, UnsetType]=unset, renotify_interval: Union[int, none_type, UnsetType]=unset, renotify_occurrences: Union[int, none_type, UnsetType]=unset, renotify_statuses: Union[List[MonitorRenotifyStatusType], none_type, UnsetType]=unset, require_full_window: Union[bool, UnsetType]=unset, scheduling_options: Union[MonitorOptionsSchedulingOptions, UnsetType]=unset, silenced: Union[Dict[str, Union[int, none_type]], UnsetType]=unset, synthetics_check_id: Union[str, none_type, UnsetType]=unset, threshold_windows: Union[MonitorThresholdWindowOptions, UnsetType]=unset, thresholds: Union[MonitorThresholds, UnsetType]=unset, timeout_h: Union[int, none_type, UnsetType]=unset, variables: Union[List[Union[MonitorFormulaAndFunctionQueryDefinition, MonitorFormulaAndFunctionEventQueryDefinition, MonitorFormulaAndFunctionCostQueryDefinition, MonitorFormulaAndFunctionDataQualityQueryDefinition, MonitorFormulaAndFunctionDataJobsQueryDefinition, MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition, MonitorFormulaAndFunctionAggregateFilteredQueryDefinition]], UnsetType]=unset, **kwargs): + """ + List of options associated with your monitor. + + :param aggregation: Type of aggregation performed in the monitor query. + :type aggregation: MonitorOptionsAggregation, optional + + :param device_ids: IDs of the device the Synthetics monitor is running on. **Deprecated**. + :type device_ids: [MonitorDeviceID], optional + + :param enable_logs_sample: Whether or not to send a log sample when the log monitor triggers. + :type enable_logs_sample: bool, optional + + :param enable_samples: Whether or not to send a list of samples when the monitor triggers. This is only used by CI Test and Pipeline monitors. + :type enable_samples: bool, optional + + :param escalation_message: We recommend using the `is_renotify `_ , + block in the original message instead. + A message to include with a re-notification. Supports the ``@username`` notification we allow elsewhere. + Not applicable if ``renotify_interval`` is ``None``. + :type escalation_message: str, optional + + :param evaluation_delay: Time (in seconds) to delay evaluation, as a non-negative integer. For example, if the value is set to ``300`` (5min), + the timeframe is set to ``last_5m`` and the time is 7:00, the monitor evaluates data from 6:50 to 6:55. + This is useful for AWS CloudWatch and other backfilled metrics to ensure the monitor always has data during evaluation. + :type evaluation_delay: int, none_type, optional + + :param group_retention_duration: The time span after which groups with missing data are dropped from the monitor state. + The minimum value is one hour, and the maximum value is 72 hours. + Example values are: "60m", "1h", and "2d". + This option is only available for APM Trace Analytics, Audit Trail, CI, Error Tracking, Event, Logs, and RUM monitors. + :type group_retention_duration: str, optional + + :param groupby_simple_monitor: Whether the log alert monitor triggers a single alert or multiple alerts when any group breaches a threshold. Use ``notify_by`` instead. **Deprecated**. + :type groupby_simple_monitor: bool, optional + + :param include_tags: A Boolean indicating whether notifications from this monitor automatically inserts its triggering tags into the title. + + **Examples** + + * If ``True`` , ``[Triggered on {host:h1}] Monitor Title`` + * If ``False`` , ``[Triggered] Monitor Title`` + :type include_tags: bool, optional + + :param locked: Whether or not the monitor is locked (only editable by creator and admins). Use ``restricted_roles`` instead. **Deprecated**. + :type locked: bool, optional + + :param min_failure_duration: How long the test should be in failure before alerting (integer, number of seconds, max 7200). + :type min_failure_duration: int, none_type, optional + + :param min_location_failed: The minimum number of locations in failure at the same time during + at least one moment in the ``min_failure_duration`` period ( ``min_location_failed`` and ``min_failure_duration`` + are part of the advanced alerting rules - integer, >= 1). + :type min_location_failed: int, none_type, optional + + :param new_group_delay: Time (in seconds) to skip evaluations for new groups. + + For example, this option can be used to skip evaluations for new hosts while they initialize. + + Must be a non negative integer. + :type new_group_delay: int, none_type, optional + + :param new_host_delay: Time (in seconds) to allow a host to boot and applications + to fully start before starting the evaluation of monitor results. + Should be a non negative integer. + + Use new_group_delay instead. **Deprecated**. + :type new_host_delay: int, none_type, optional + + :param no_data_timeframe: The number of minutes before a monitor notifies after data stops reporting. + Datadog recommends at least 2x the monitor timeframe for query alerts or 2 minutes for service checks. + If omitted, 2x the evaluation timeframe is used for query alerts, and 24 hours is used for service checks. + :type no_data_timeframe: int, none_type, optional + + :param notification_preset_name: Toggles the display of additional content sent in the monitor notification. + :type notification_preset_name: MonitorOptionsNotificationPresets, optional + + :param notify_audit: A Boolean indicating whether tagged users is notified on changes to this monitor. + :type notify_audit: bool, optional + + :param notify_by: Controls what granularity a monitor alerts on. Only available for monitors with groupings. + For instance, a monitor grouped by ``cluster`` , ``namespace`` , and ``pod`` can be configured to only notify on each + new ``cluster`` violating the alert conditions by setting ``notify_by`` to ``["cluster"]``. Tags mentioned + in ``notify_by`` must be a subset of the grouping tags in the query. + For example, a query grouped by ``cluster`` and ``namespace`` cannot notify on ``region``. + Setting ``notify_by`` to ``["*"]`` configures the monitor to notify as a simple-alert. + :type notify_by: [str], optional + + :param notify_no_data: A Boolean indicating whether this monitor notifies when data stops reporting. Defaults to ``false``. + :type notify_no_data: bool, optional + + :param on_missing_data: Controls how groups or monitors are treated if an evaluation does not return any data points. + The default option results in different behavior depending on the monitor query type. + For monitors using Count queries, an empty monitor evaluation is treated as 0 and is compared to the threshold conditions. + For monitors using any query type other than Count, for example Gauge, Measure, or Rate, the monitor shows the last known status. + This option is available for APM Trace Analytics, Audit Trail, CI, Error Tracking, Event, Logs, and RUM monitors. + It is also required for metric monitors that use ``scheduling_options.custom_schedule``. + :type on_missing_data: OnMissingDataOption, optional + + :param renotify_interval: The number of minutes after the last notification before a monitor re-notifies on the current status. + It only re-notifies if it’s not resolved. + :type renotify_interval: int, none_type, optional + + :param renotify_occurrences: The number of times re-notification messages should be sent on the current status at the provided re-notification interval. + :type renotify_occurrences: int, none_type, optional + + :param renotify_statuses: The types of monitor statuses for which re-notification messages are sent. + Default: **null** if ``renotify_interval`` is **null**. + If ``renotify_interval`` is set, defaults to renotify on ``Alert`` and ``No Data``. + :type renotify_statuses: [MonitorRenotifyStatusType], none_type, optional + + :param require_full_window: A Boolean indicating whether this monitor needs a full window of data before it’s evaluated. + We highly recommend you set this to ``false`` for sparse metrics, + otherwise some evaluations are skipped. Default is false. This setting only applies to + metric monitors. + :type require_full_window: bool, optional + + :param scheduling_options: Configuration options for scheduling. + :type scheduling_options: MonitorOptionsSchedulingOptions, optional + + :param silenced: Information about the downtime applied to the monitor. Only shows v1 downtimes. **Deprecated**. + :type silenced: {str: (int, none_type,)}, optional + + :param synthetics_check_id: ID of the corresponding Synthetic check. **Deprecated**. + :type synthetics_check_id: str, none_type, optional + + :param threshold_windows: Alerting time window options. + :type threshold_windows: MonitorThresholdWindowOptions, optional + + :param thresholds: List of the different monitor threshold available. + :type thresholds: MonitorThresholds, optional + + :param timeout_h: The number of hours of the monitor not reporting data before it automatically resolves from a triggered state. The minimum allowed value is 0 hours. The maximum allowed value is 24 hours. + :type timeout_h: int, none_type, optional + + :param variables: List of requests that can be used in the monitor query. **This feature is currently in beta.** + :type variables: [MonitorFormulaAndFunctionQueryDefinition], optional + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if device_ids is not unset: + kwargs["device_ids"] = device_ids + if enable_logs_sample is not unset: + kwargs["enable_logs_sample"] = enable_logs_sample + if enable_samples is not unset: + kwargs["enable_samples"] = enable_samples + if escalation_message is not unset: + kwargs["escalation_message"] = escalation_message + if evaluation_delay is not unset: + kwargs["evaluation_delay"] = evaluation_delay + if group_retention_duration is not unset: + kwargs["group_retention_duration"] = group_retention_duration + if groupby_simple_monitor is not unset: + kwargs["groupby_simple_monitor"] = groupby_simple_monitor + if include_tags is not unset: + kwargs["include_tags"] = include_tags + if locked is not unset: + kwargs["locked"] = locked + if min_failure_duration is not unset: + kwargs["min_failure_duration"] = min_failure_duration + if min_location_failed is not unset: + kwargs["min_location_failed"] = min_location_failed + if new_group_delay is not unset: + kwargs["new_group_delay"] = new_group_delay + if new_host_delay is not unset: + kwargs["new_host_delay"] = new_host_delay + if no_data_timeframe is not unset: + kwargs["no_data_timeframe"] = no_data_timeframe + if notification_preset_name is not unset: + kwargs["notification_preset_name"] = notification_preset_name + if notify_audit is not unset: + kwargs["notify_audit"] = notify_audit + if notify_by is not unset: + kwargs["notify_by"] = notify_by + if notify_no_data is not unset: + kwargs["notify_no_data"] = notify_no_data + if on_missing_data is not unset: + kwargs["on_missing_data"] = on_missing_data + if renotify_interval is not unset: + kwargs["renotify_interval"] = renotify_interval + if renotify_occurrences is not unset: + kwargs["renotify_occurrences"] = renotify_occurrences + if renotify_statuses is not unset: + kwargs["renotify_statuses"] = renotify_statuses + if require_full_window is not unset: + kwargs["require_full_window"] = require_full_window + if scheduling_options is not unset: + kwargs["scheduling_options"] = scheduling_options + if silenced is not unset: + kwargs["silenced"] = silenced + if synthetics_check_id is not unset: + kwargs["synthetics_check_id"] = synthetics_check_id + if threshold_windows is not unset: + kwargs["threshold_windows"] = threshold_windows + if thresholds is not unset: + kwargs["thresholds"] = thresholds + if timeout_h is not unset: + kwargs["timeout_h"] = timeout_h + if variables is not unset: + kwargs["variables"] = variables + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_options_aggregation.py b/datadog_api_client/v1/model/monitor_options_aggregation.py new file mode 100644 index 0000000000..463465c084 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_options_aggregation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorOptionsAggregation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "group_by": (str,), + "metric": (str,), + "type": (str,), + } + attribute_map = { + "group_by": "group_by", + "metric": "metric", + "type": "type", + } + + def __init__(self_, group_by: Union[str, UnsetType]=unset, metric: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Type of aggregation performed in the monitor query. + + :param group_by: Group to break down the monitor on. + :type group_by: str, optional + + :param metric: Metric name used in the monitor. + :type metric: str, optional + + :param type: Metric type used in the monitor. + :type type: str, optional + """ + if group_by is not unset: + kwargs["group_by"] = group_by + if metric is not unset: + kwargs["metric"] = metric + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_options_custom_schedule.py b/datadog_api_client/v1/model/monitor_options_custom_schedule.py new file mode 100644 index 0000000000..b063ffb2f0 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_options_custom_schedule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_options_custom_schedule_recurrence import MonitorOptionsCustomScheduleRecurrence + +class MonitorOptionsCustomSchedule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_options_custom_schedule_recurrence import MonitorOptionsCustomScheduleRecurrence + return { + "recurrences": ([MonitorOptionsCustomScheduleRecurrence],), + } + attribute_map = { + "recurrences": "recurrences", + } + + def __init__(self_, recurrences: Union[List[MonitorOptionsCustomScheduleRecurrence], UnsetType]=unset, **kwargs): + """ + Configuration options for the custom schedule. **This feature is in private beta.** + + :param recurrences: Array of custom schedule recurrences. + :type recurrences: [MonitorOptionsCustomScheduleRecurrence], optional + """ + if recurrences is not unset: + kwargs["recurrences"] = recurrences + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_options_custom_schedule_recurrence.py b/datadog_api_client/v1/model/monitor_options_custom_schedule_recurrence.py new file mode 100644 index 0000000000..ec03b292b5 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_options_custom_schedule_recurrence.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorOptionsCustomScheduleRecurrence(ModelNormal): + @cached_property + def openapi_types(_): + return { + "rrule": (str,), + "start": (str,), + "timezone": (str,), + } + attribute_map = { + "rrule": "rrule", + "start": "start", + "timezone": "timezone", + } + + def __init__(self_, rrule: Union[str, UnsetType]=unset, start: Union[str, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration for a recurrence set on the monitor options for custom schedule. + + :param rrule: Defines the recurrence rule (RRULE) for a given schedule. + :type rrule: str, optional + + :param start: Defines the start date and time of the recurring schedule. + :type start: str, optional + + :param timezone: Defines the timezone the schedule runs on. + :type timezone: str, optional + """ + if rrule is not unset: + kwargs["rrule"] = rrule + if start is not unset: + kwargs["start"] = start + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_options_notification_presets.py b/datadog_api_client/v1/model/monitor_options_notification_presets.py new file mode 100644 index 0000000000..3299004616 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_options_notification_presets.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorOptionsNotificationPresets(ModelSimple): + """ + Toggles the display of additional content sent in the monitor notification. + + :param value: If omitted defaults to "show_all". Must be one of ["show_all", "hide_query", "hide_handles", "hide_all", "hide_query_and_handles", "show_only_snapshot", "hide_handles_and_footer"]. + :type value: str + """ + + allowed_values = { + "show_all", + "hide_query", + "hide_handles", + "hide_all", + "hide_query_and_handles", + "show_only_snapshot", + "hide_handles_and_footer", + } + SHOW_ALL: ClassVar["MonitorOptionsNotificationPresets"] + HIDE_QUERY: ClassVar["MonitorOptionsNotificationPresets"] + HIDE_HANDLES: ClassVar["MonitorOptionsNotificationPresets"] + HIDE_ALL: ClassVar["MonitorOptionsNotificationPresets"] + HIDE_QUERY_AND_HANDLES: ClassVar["MonitorOptionsNotificationPresets"] + SHOW_ONLY_SNAPSHOT: ClassVar["MonitorOptionsNotificationPresets"] + HIDE_HANDLES_AND_FOOTER: ClassVar["MonitorOptionsNotificationPresets"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorOptionsNotificationPresets.SHOW_ALL = MonitorOptionsNotificationPresets("show_all") +MonitorOptionsNotificationPresets.HIDE_QUERY = MonitorOptionsNotificationPresets("hide_query") +MonitorOptionsNotificationPresets.HIDE_HANDLES = MonitorOptionsNotificationPresets("hide_handles") +MonitorOptionsNotificationPresets.HIDE_ALL = MonitorOptionsNotificationPresets("hide_all") +MonitorOptionsNotificationPresets.HIDE_QUERY_AND_HANDLES = MonitorOptionsNotificationPresets("hide_query_and_handles") +MonitorOptionsNotificationPresets.SHOW_ONLY_SNAPSHOT = MonitorOptionsNotificationPresets("show_only_snapshot") +MonitorOptionsNotificationPresets.HIDE_HANDLES_AND_FOOTER = MonitorOptionsNotificationPresets("hide_handles_and_footer") diff --git a/datadog_api_client/v1/model/monitor_options_scheduling_options.py b/datadog_api_client/v1/model/monitor_options_scheduling_options.py new file mode 100644 index 0000000000..1665348b79 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_options_scheduling_options.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_options_custom_schedule import MonitorOptionsCustomSchedule + from datadog_api_client.v1.model.monitor_options_scheduling_options_evaluation_window import MonitorOptionsSchedulingOptionsEvaluationWindow + +class MonitorOptionsSchedulingOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_options_custom_schedule import MonitorOptionsCustomSchedule + from datadog_api_client.v1.model.monitor_options_scheduling_options_evaluation_window import MonitorOptionsSchedulingOptionsEvaluationWindow + return { + "custom_schedule": (MonitorOptionsCustomSchedule,), + "evaluation_window": (MonitorOptionsSchedulingOptionsEvaluationWindow,), + } + attribute_map = { + "custom_schedule": "custom_schedule", + "evaluation_window": "evaluation_window", + } + + def __init__(self_, custom_schedule: Union[MonitorOptionsCustomSchedule, UnsetType]=unset, evaluation_window: Union[MonitorOptionsSchedulingOptionsEvaluationWindow, UnsetType]=unset, **kwargs): + """ + Configuration options for scheduling. + + :param custom_schedule: Configuration options for the custom schedule. **This feature is in private beta.** + :type custom_schedule: MonitorOptionsCustomSchedule, optional + + :param evaluation_window: Configuration options for the evaluation window. If ``hour_starts`` is set, no other fields may be set. Otherwise, ``day_starts`` and ``month_starts`` must be set together. + :type evaluation_window: MonitorOptionsSchedulingOptionsEvaluationWindow, optional + """ + if custom_schedule is not unset: + kwargs["custom_schedule"] = custom_schedule + if evaluation_window is not unset: + kwargs["evaluation_window"] = evaluation_window + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_options_scheduling_options_evaluation_window.py b/datadog_api_client/v1/model/monitor_options_scheduling_options_evaluation_window.py new file mode 100644 index 0000000000..63ed6bc566 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_options_scheduling_options_evaluation_window.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorOptionsSchedulingOptionsEvaluationWindow(ModelNormal): + validations = { + "hour_starts": { + "inclusive_maximum": 59, + "inclusive_minimum": 0, + }, + "month_starts": { + "inclusive_maximum": 1, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "day_starts": (str,), + "hour_starts": (int,), + "month_starts": (int,), + "timezone": (str,), + } + attribute_map = { + "day_starts": "day_starts", + "hour_starts": "hour_starts", + "month_starts": "month_starts", + "timezone": "timezone", + } + + def __init__(self_, day_starts: Union[str, UnsetType]=unset, hour_starts: Union[int, UnsetType]=unset, month_starts: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration options for the evaluation window. If ``hour_starts`` is set, no other fields may be set. Otherwise, ``day_starts`` and ``month_starts`` must be set together. + + :param day_starts: The time of the day at which a one day cumulative evaluation window starts. + :type day_starts: str, optional + + :param hour_starts: The minute of the hour at which a one hour cumulative evaluation window starts. + :type hour_starts: int, optional + + :param month_starts: The day of the month at which a one month cumulative evaluation window starts. + :type month_starts: int, optional + + :param timezone: The timezone of the time of the day of the cumulative evaluation window start. + :type timezone: str, optional + """ + if day_starts is not unset: + kwargs["day_starts"] = day_starts + if hour_starts is not unset: + kwargs["hour_starts"] = hour_starts + if month_starts is not unset: + kwargs["month_starts"] = month_starts + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_overall_states.py b/datadog_api_client/v1/model/monitor_overall_states.py new file mode 100644 index 0000000000..6bf02443ad --- /dev/null +++ b/datadog_api_client/v1/model/monitor_overall_states.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorOverallStates(ModelSimple): + """ + The different states your monitor can be in. + + :param value: Must be one of ["Alert", "Ignored", "No Data", "OK", "Skipped", "Unknown", "Warn"]. + :type value: str + """ + + allowed_values = { + "Alert", + "Ignored", + "No Data", + "OK", + "Skipped", + "Unknown", + "Warn", + } + ALERT: ClassVar["MonitorOverallStates"] + IGNORED: ClassVar["MonitorOverallStates"] + NO_DATA: ClassVar["MonitorOverallStates"] + OK: ClassVar["MonitorOverallStates"] + SKIPPED: ClassVar["MonitorOverallStates"] + UNKNOWN: ClassVar["MonitorOverallStates"] + WARN: ClassVar["MonitorOverallStates"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorOverallStates.ALERT = MonitorOverallStates("Alert") +MonitorOverallStates.IGNORED = MonitorOverallStates("Ignored") +MonitorOverallStates.NO_DATA = MonitorOverallStates("No Data") +MonitorOverallStates.OK = MonitorOverallStates("OK") +MonitorOverallStates.SKIPPED = MonitorOverallStates("Skipped") +MonitorOverallStates.UNKNOWN = MonitorOverallStates("Unknown") +MonitorOverallStates.WARN = MonitorOverallStates("Warn") diff --git a/datadog_api_client/v1/model/monitor_renotify_status_type.py b/datadog_api_client/v1/model/monitor_renotify_status_type.py new file mode 100644 index 0000000000..e378d1f778 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_renotify_status_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorRenotifyStatusType(ModelSimple): + """ + The different statuses for which renotification is supported. + + :param value: Must be one of ["alert", "warn", "no data"]. + :type value: str + """ + + allowed_values = { + "alert", + "warn", + "no data", + } + ALERT: ClassVar["MonitorRenotifyStatusType"] + WARN: ClassVar["MonitorRenotifyStatusType"] + NO_DATA: ClassVar["MonitorRenotifyStatusType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorRenotifyStatusType.ALERT = MonitorRenotifyStatusType("alert") +MonitorRenotifyStatusType.WARN = MonitorRenotifyStatusType("warn") +MonitorRenotifyStatusType.NO_DATA = MonitorRenotifyStatusType("no data") diff --git a/datadog_api_client/v1/model/monitor_search_count.py b/datadog_api_client/v1/model/monitor_search_count.py new file mode 100644 index 0000000000..2ccc3884a1 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_search_count.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorSearchCount(ModelSimple): + """ + Search facets. + + + :type value: [MonitorSearchCountItem] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_search_count_item import MonitorSearchCountItem + return { + "value": ([MonitorSearchCountItem],), + } diff --git a/datadog_api_client/v1/model/monitor_search_count_item.py b/datadog_api_client/v1/model/monitor_search_count_item.py new file mode 100644 index 0000000000..03da508dfa --- /dev/null +++ b/datadog_api_client/v1/model/monitor_search_count_item.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorSearchCountItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "name": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "count": "count", + "name": "name", + } + read_only_vars = { + "count", + "name", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, name: Union[Any, UnsetType]=unset, **kwargs): + """ + A facet item. + + :param count: The number of found monitors with the listed value. + :type count: int, optional + + :param name: The facet value. + :type name: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + """ + if count is not unset: + kwargs["count"] = count + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_search_response.py b/datadog_api_client/v1/model/monitor_search_response.py new file mode 100644 index 0000000000..72444f235e --- /dev/null +++ b/datadog_api_client/v1/model/monitor_search_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_search_response_counts import MonitorSearchResponseCounts + from datadog_api_client.v1.model.monitor_search_response_metadata import MonitorSearchResponseMetadata + from datadog_api_client.v1.model.monitor_search_result import MonitorSearchResult + +class MonitorSearchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_search_response_counts import MonitorSearchResponseCounts + from datadog_api_client.v1.model.monitor_search_response_metadata import MonitorSearchResponseMetadata + from datadog_api_client.v1.model.monitor_search_result import MonitorSearchResult + return { + "counts": (MonitorSearchResponseCounts,), + "metadata": (MonitorSearchResponseMetadata,), + "monitors": ([MonitorSearchResult],), + } + attribute_map = { + "counts": "counts", + "metadata": "metadata", + "monitors": "monitors", + } + read_only_vars = { + "counts", + "monitors", + } + + def __init__(self_, counts: Union[MonitorSearchResponseCounts, UnsetType]=unset, metadata: Union[MonitorSearchResponseMetadata, UnsetType]=unset, monitors: Union[List[MonitorSearchResult], UnsetType]=unset, **kwargs): + """ + The response from a monitor search. + + :param counts: The counts of monitors per different criteria. + :type counts: MonitorSearchResponseCounts, optional + + :param metadata: Metadata about the response. + :type metadata: MonitorSearchResponseMetadata, optional + + :param monitors: The list of found monitors. + :type monitors: [MonitorSearchResult], optional + """ + if counts is not unset: + kwargs["counts"] = counts + if metadata is not unset: + kwargs["metadata"] = metadata + if monitors is not unset: + kwargs["monitors"] = monitors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_search_response_counts.py b/datadog_api_client/v1/model/monitor_search_response_counts.py new file mode 100644 index 0000000000..5c18aa794c --- /dev/null +++ b/datadog_api_client/v1/model/monitor_search_response_counts.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_search_count import MonitorSearchCount + +class MonitorSearchResponseCounts(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_search_count import MonitorSearchCount + return { + "muted": (MonitorSearchCount,), + "status": (MonitorSearchCount,), + "tag": (MonitorSearchCount,), + "type": (MonitorSearchCount,), + } + attribute_map = { + "muted": "muted", + "status": "status", + "tag": "tag", + "type": "type", + } + + def __init__(self_, muted: Union[MonitorSearchCount, UnsetType]=unset, status: Union[MonitorSearchCount, UnsetType]=unset, tag: Union[MonitorSearchCount, UnsetType]=unset, type: Union[MonitorSearchCount, UnsetType]=unset, **kwargs): + """ + The counts of monitors per different criteria. + + :param muted: Search facets. + :type muted: MonitorSearchCount, optional + + :param status: Search facets. + :type status: MonitorSearchCount, optional + + :param tag: Search facets. + :type tag: MonitorSearchCount, optional + + :param type: Search facets. + :type type: MonitorSearchCount, optional + """ + if muted is not unset: + kwargs["muted"] = muted + if status is not unset: + kwargs["status"] = status + if tag is not unset: + kwargs["tag"] = tag + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_search_response_metadata.py b/datadog_api_client/v1/model/monitor_search_response_metadata.py new file mode 100644 index 0000000000..642954a935 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_search_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorSearchResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "page": (int,), + "page_count": (int,), + "per_page": (int,), + "total_count": (int,), + } + attribute_map = { + "page": "page", + "page_count": "page_count", + "per_page": "per_page", + "total_count": "total_count", + } + read_only_vars = { + "page", + "page_count", + "per_page", + "total_count", + } + + def __init__(self_, page: Union[int, UnsetType]=unset, page_count: Union[int, UnsetType]=unset, per_page: Union[int, UnsetType]=unset, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata about the response. + + :param page: The page to start paginating from. + :type page: int, optional + + :param page_count: The number of pages. + :type page_count: int, optional + + :param per_page: The number of monitors to return per page. + :type per_page: int, optional + + :param total_count: The total number of monitors. + :type total_count: int, optional + """ + if page is not unset: + kwargs["page"] = page + if page_count is not unset: + kwargs["page_count"] = page_count + if per_page is not unset: + kwargs["per_page"] = per_page + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_search_result.py b/datadog_api_client/v1/model/monitor_search_result.py new file mode 100644 index 0000000000..4f5f2d7dd8 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_search_result.py @@ -0,0 +1,162 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.monitor_search_result_notification import MonitorSearchResultNotification + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + from datadog_api_client.v1.model.monitor_type import MonitorType + +class MonitorSearchResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.monitor_search_result_notification import MonitorSearchResultNotification + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + from datadog_api_client.v1.model.monitor_type import MonitorType + return { + "classification": (str,), + "creator": (Creator,), + "id": (int,), + "last_triggered_ts": (int, none_type), + "metrics": ([str],), + "name": (str,), + "notifications": ([MonitorSearchResultNotification],), + "org_id": (int,), + "quality_issues": ([str],), + "query": (str,), + "scopes": ([str],), + "status": (MonitorOverallStates,), + "tags": ([str],), + "type": (MonitorType,), + } + attribute_map = { + "classification": "classification", + "creator": "creator", + "id": "id", + "last_triggered_ts": "last_triggered_ts", + "metrics": "metrics", + "name": "name", + "notifications": "notifications", + "org_id": "org_id", + "quality_issues": "quality_issues", + "query": "query", + "scopes": "scopes", + "status": "status", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "classification", + "creator", + "id", + "last_triggered_ts", + "metrics", + "name", + "notifications", + "org_id", + "quality_issues", + "status", + "tags", + } + + def __init__(self_, classification: Union[str, UnsetType]=unset, creator: Union[Creator, UnsetType]=unset, id: Union[int, UnsetType]=unset, last_triggered_ts: Union[int, none_type, UnsetType]=unset, metrics: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, notifications: Union[List[MonitorSearchResultNotification], UnsetType]=unset, org_id: Union[int, UnsetType]=unset, quality_issues: Union[List[str], UnsetType]=unset, query: Union[str, UnsetType]=unset, scopes: Union[List[str], UnsetType]=unset, status: Union[MonitorOverallStates, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[MonitorType, UnsetType]=unset, **kwargs): + """ + Holds search results. + + :param classification: Classification of the monitor. + :type classification: str, optional + + :param creator: Object describing the creator of the shared element. + :type creator: Creator, optional + + :param id: ID of the monitor. + :type id: int, optional + + :param last_triggered_ts: Latest timestamp the monitor triggered. + :type last_triggered_ts: int, none_type, optional + + :param metrics: Metrics used by the monitor. + :type metrics: [str], optional + + :param name: The monitor name. + :type name: str, optional + + :param notifications: The notification triggered by the monitor. + :type notifications: [MonitorSearchResultNotification], optional + + :param org_id: The ID of the organization. + :type org_id: int, optional + + :param quality_issues: Quality issues detected with the monitor. + :type quality_issues: [str], optional + + :param query: The monitor query. + :type query: str, optional + + :param scopes: The scope(s) to which the downtime applies, for example ``host:app2``. + Provide multiple scopes as a comma-separated list, for example ``env:dev,env:prod``. + The resulting downtime applies to sources that matches ALL provided scopes + (that is ``env:dev AND env:prod`` ), NOT any of them. + :type scopes: [str], optional + + :param status: The different states your monitor can be in. + :type status: MonitorOverallStates, optional + + :param tags: Tags associated with the monitor. + :type tags: [str], optional + + :param type: The type of the monitor. For more information about ``type`` , see the `monitor options `_ docs. + :type type: MonitorType, optional + """ + if classification is not unset: + kwargs["classification"] = classification + if creator is not unset: + kwargs["creator"] = creator + if id is not unset: + kwargs["id"] = id + if last_triggered_ts is not unset: + kwargs["last_triggered_ts"] = last_triggered_ts + if metrics is not unset: + kwargs["metrics"] = metrics + if name is not unset: + kwargs["name"] = name + if notifications is not unset: + kwargs["notifications"] = notifications + if org_id is not unset: + kwargs["org_id"] = org_id + if quality_issues is not unset: + kwargs["quality_issues"] = quality_issues + if query is not unset: + kwargs["query"] = query + if scopes is not unset: + kwargs["scopes"] = scopes + if status is not unset: + kwargs["status"] = status + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_search_result_notification.py b/datadog_api_client/v1/model/monitor_search_result_notification.py new file mode 100644 index 0000000000..03a780f004 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_search_result_notification.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorSearchResultNotification(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str,), + } + attribute_map = { + "handle": "handle", + "name": "name", + } + read_only_vars = { + "handle", + "name", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A notification triggered by the monitor. + + :param handle: The email address that received the notification. + :type handle: str, optional + + :param name: The username receiving the notification + :type name: str, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_state.py b/datadog_api_client/v1/model/monitor_state.py new file mode 100644 index 0000000000..346c4108df --- /dev/null +++ b/datadog_api_client/v1/model/monitor_state.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_state_group import MonitorStateGroup + +class MonitorState(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_state_group import MonitorStateGroup + return { + "groups": ({str: (MonitorStateGroup,)},), + } + attribute_map = { + "groups": "groups", + } + + def __init__(self_, groups: Union[Dict[str, MonitorStateGroup], UnsetType]=unset, **kwargs): + """ + Wrapper object with the different monitor states. + + :param groups: Dictionary where the keys are groups (comma separated lists of tags) and the values are + the list of groups your monitor is broken down on. + :type groups: {str: (MonitorStateGroup,)}, optional + """ + if groups is not unset: + kwargs["groups"] = groups + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_state_group.py b/datadog_api_client/v1/model/monitor_state_group.py new file mode 100644 index 0000000000..df1de5b9d7 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_state_group.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + +class MonitorStateGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + return { + "last_nodata_ts": (int,), + "last_notified_ts": (int,), + "last_resolved_ts": (int,), + "last_triggered_ts": (int,), + "name": (str,), + "status": (MonitorOverallStates,), + } + attribute_map = { + "last_nodata_ts": "last_nodata_ts", + "last_notified_ts": "last_notified_ts", + "last_resolved_ts": "last_resolved_ts", + "last_triggered_ts": "last_triggered_ts", + "name": "name", + "status": "status", + } + read_only_vars = { + "status", + } + + def __init__(self_, last_nodata_ts: Union[int, UnsetType]=unset, last_notified_ts: Union[int, UnsetType]=unset, last_resolved_ts: Union[int, UnsetType]=unset, last_triggered_ts: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, status: Union[MonitorOverallStates, UnsetType]=unset, **kwargs): + """ + Monitor state for a single group. + + :param last_nodata_ts: Latest timestamp the monitor was in NO_DATA state. + :type last_nodata_ts: int, optional + + :param last_notified_ts: Latest timestamp of the notification sent for this monitor group. + :type last_notified_ts: int, optional + + :param last_resolved_ts: Latest timestamp the monitor group was resolved. + :type last_resolved_ts: int, optional + + :param last_triggered_ts: Latest timestamp the monitor group triggered. + :type last_triggered_ts: int, optional + + :param name: The name of the monitor. + :type name: str, optional + + :param status: The different states your monitor can be in. + :type status: MonitorOverallStates, optional + """ + if last_nodata_ts is not unset: + kwargs["last_nodata_ts"] = last_nodata_ts + if last_notified_ts is not unset: + kwargs["last_notified_ts"] = last_notified_ts + if last_resolved_ts is not unset: + kwargs["last_resolved_ts"] = last_resolved_ts + if last_triggered_ts is not unset: + kwargs["last_triggered_ts"] = last_triggered_ts + if name is not unset: + kwargs["name"] = name + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_summary_widget_definition.py b/datadog_api_client/v1/model/monitor_summary_widget_definition.py new file mode 100644 index 0000000000..54022aff0f --- /dev/null +++ b/datadog_api_client/v1/model/monitor_summary_widget_definition.py @@ -0,0 +1,155 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_color_preference import WidgetColorPreference + from datadog_api_client.v1.model.widget_monitor_summary_display_format import WidgetMonitorSummaryDisplayFormat + from datadog_api_client.v1.model.widget_monitor_summary_sort import WidgetMonitorSummarySort + from datadog_api_client.v1.model.widget_summary_type import WidgetSummaryType + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.monitor_summary_widget_definition_type import MonitorSummaryWidgetDefinitionType + +class MonitorSummaryWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_color_preference import WidgetColorPreference + from datadog_api_client.v1.model.widget_monitor_summary_display_format import WidgetMonitorSummaryDisplayFormat + from datadog_api_client.v1.model.widget_monitor_summary_sort import WidgetMonitorSummarySort + from datadog_api_client.v1.model.widget_summary_type import WidgetSummaryType + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.monitor_summary_widget_definition_type import MonitorSummaryWidgetDefinitionType + return { + "color_preference": (WidgetColorPreference,), + "count": (int,), + "description": (str,), + "display_format": (WidgetMonitorSummaryDisplayFormat,), + "hide_zero_counts": (bool,), + "query": (str,), + "show_last_triggered": (bool,), + "show_priority": (bool,), + "sort": (WidgetMonitorSummarySort,), + "start": (int,), + "summary_type": (WidgetSummaryType,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (MonitorSummaryWidgetDefinitionType,), + } + attribute_map = { + "color_preference": "color_preference", + "count": "count", + "description": "description", + "display_format": "display_format", + "hide_zero_counts": "hide_zero_counts", + "query": "query", + "show_last_triggered": "show_last_triggered", + "show_priority": "show_priority", + "sort": "sort", + "start": "start", + "summary_type": "summary_type", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, query: str, type: MonitorSummaryWidgetDefinitionType, color_preference: Union[WidgetColorPreference, UnsetType]=unset, count: Union[int, UnsetType]=unset, description: Union[str, UnsetType]=unset, display_format: Union[WidgetMonitorSummaryDisplayFormat, UnsetType]=unset, hide_zero_counts: Union[bool, UnsetType]=unset, show_last_triggered: Union[bool, UnsetType]=unset, show_priority: Union[bool, UnsetType]=unset, sort: Union[WidgetMonitorSummarySort, UnsetType]=unset, start: Union[int, UnsetType]=unset, summary_type: Union[WidgetSummaryType, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The monitor summary widget displays a summary view of all your Datadog monitors, or a subset based on a query. + + :param color_preference: Which color to use on the widget. + :type color_preference: WidgetColorPreference, optional + + :param count: The number of monitors to display. **Deprecated**. + :type count: int, optional + + :param description: The description of the widget. + :type description: str, optional + + :param display_format: What to display on the widget. + :type display_format: WidgetMonitorSummaryDisplayFormat, optional + + :param hide_zero_counts: Whether to show counts of 0 or not. + :type hide_zero_counts: bool, optional + + :param query: Query to filter the monitors with. + :type query: str + + :param show_last_triggered: Whether to show the time that has elapsed since the monitor/group triggered. + :type show_last_triggered: bool, optional + + :param show_priority: Whether to show the priorities column. + :type show_priority: bool, optional + + :param sort: Widget sorting methods. + :type sort: WidgetMonitorSummarySort, optional + + :param start: The start of the list. Typically 0. **Deprecated**. + :type start: int, optional + + :param summary_type: Which summary type should be used. + :type summary_type: WidgetSummaryType, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the monitor summary widget. + :type type: MonitorSummaryWidgetDefinitionType + """ + if color_preference is not unset: + kwargs["color_preference"] = color_preference + if count is not unset: + kwargs["count"] = count + if description is not unset: + kwargs["description"] = description + if display_format is not unset: + kwargs["display_format"] = display_format + if hide_zero_counts is not unset: + kwargs["hide_zero_counts"] = hide_zero_counts + if show_last_triggered is not unset: + kwargs["show_last_triggered"] = show_last_triggered + if show_priority is not unset: + kwargs["show_priority"] = show_priority + if sort is not unset: + kwargs["sort"] = sort + if start is not unset: + kwargs["start"] = start + if summary_type is not unset: + kwargs["summary_type"] = summary_type + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.query = query + self_.type = type diff --git a/datadog_api_client/v1/model/monitor_summary_widget_definition_type.py b/datadog_api_client/v1/model/monitor_summary_widget_definition_type.py new file mode 100644 index 0000000000..6a5d1c99a5 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_summary_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorSummaryWidgetDefinitionType(ModelSimple): + """ + Type of the monitor summary widget. + + :param value: If omitted defaults to "manage_status". Must be one of ["manage_status"]. + :type value: str + """ + + allowed_values = { + "manage_status", + } + MANAGE_STATUS: ClassVar["MonitorSummaryWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorSummaryWidgetDefinitionType.MANAGE_STATUS = MonitorSummaryWidgetDefinitionType("manage_status") diff --git a/datadog_api_client/v1/model/monitor_threshold_window_options.py b/datadog_api_client/v1/model/monitor_threshold_window_options.py new file mode 100644 index 0000000000..feaf8aed02 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_threshold_window_options.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorThresholdWindowOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "recovery_window": (str, none_type), + "trigger_window": (str, none_type), + } + attribute_map = { + "recovery_window": "recovery_window", + "trigger_window": "trigger_window", + } + + def __init__(self_, recovery_window: Union[str, none_type, UnsetType]=unset, trigger_window: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Alerting time window options. + + :param recovery_window: Describes how long an anomalous metric must be normal before the alert recovers. + :type recovery_window: str, none_type, optional + + :param trigger_window: Describes how long a metric must be anomalous before an alert triggers. + :type trigger_window: str, none_type, optional + """ + if recovery_window is not unset: + kwargs["recovery_window"] = recovery_window + if trigger_window is not unset: + kwargs["trigger_window"] = trigger_window + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_thresholds.py b/datadog_api_client/v1/model/monitor_thresholds.py new file mode 100644 index 0000000000..19fcb5f49d --- /dev/null +++ b/datadog_api_client/v1/model/monitor_thresholds.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorThresholds(ModelNormal): + @cached_property + def openapi_types(_): + return { + "critical": (float,), + "critical_query": (str,), + "critical_recovery": (float, none_type), + "critical_recovery_query": (str,), + "ok": (float, none_type), + "unknown": (float, none_type), + "warning": (float, none_type), + "warning_recovery": (float, none_type), + } + attribute_map = { + "critical": "critical", + "critical_query": "critical_query", + "critical_recovery": "critical_recovery", + "critical_recovery_query": "critical_recovery_query", + "ok": "ok", + "unknown": "unknown", + "warning": "warning", + "warning_recovery": "warning_recovery", + } + + def __init__(self_, critical: Union[float, UnsetType]=unset, critical_query: Union[str, UnsetType]=unset, critical_recovery: Union[float, none_type, UnsetType]=unset, critical_recovery_query: Union[str, UnsetType]=unset, ok: Union[float, none_type, UnsetType]=unset, unknown: Union[float, none_type, UnsetType]=unset, warning: Union[float, none_type, UnsetType]=unset, warning_recovery: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + List of the different monitor threshold available. + + :param critical: The monitor ``CRITICAL`` threshold. + :type critical: float, optional + + :param critical_query: Query evaluated as a dynamic ``CRITICAL`` threshold. Only supported on metric monitors with a formula query and options['variables']. Cannot be combined with static thresholds. This field is in preview. + :type critical_query: str, optional + + :param critical_recovery: The monitor ``CRITICAL`` recovery threshold. + :type critical_recovery: float, none_type, optional + + :param critical_recovery_query: Query evaluated as a dynamic ``CRITICAL`` recovery threshold. Only supported on metric monitors with a formula query and options['variables']. Cannot be combined with static thresholds. This field is in preview. + :type critical_recovery_query: str, optional + + :param ok: The monitor ``OK`` threshold. + :type ok: float, none_type, optional + + :param unknown: The monitor UNKNOWN threshold. + :type unknown: float, none_type, optional + + :param warning: The monitor ``WARNING`` threshold. + :type warning: float, none_type, optional + + :param warning_recovery: The monitor ``WARNING`` recovery threshold. + :type warning_recovery: float, none_type, optional + """ + if critical is not unset: + kwargs["critical"] = critical + if critical_query is not unset: + kwargs["critical_query"] = critical_query + if critical_recovery is not unset: + kwargs["critical_recovery"] = critical_recovery + if critical_recovery_query is not unset: + kwargs["critical_recovery_query"] = critical_recovery_query + if ok is not unset: + kwargs["ok"] = ok + if unknown is not unset: + kwargs["unknown"] = unknown + if warning is not unset: + kwargs["warning"] = warning + if warning_recovery is not unset: + kwargs["warning_recovery"] = warning_recovery + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monitor_type.py b/datadog_api_client/v1/model/monitor_type.py new file mode 100644 index 0000000000..2138810a57 --- /dev/null +++ b/datadog_api_client/v1/model/monitor_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +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", "data-jobs alert", "llm-observability alert"]. + :type value: str + """ + + allowed_values = { + "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", + "llm-observability alert", + } + COMPOSITE: ClassVar["MonitorType"] + EVENT_ALERT: ClassVar["MonitorType"] + LOG_ALERT: ClassVar["MonitorType"] + METRIC_ALERT: ClassVar["MonitorType"] + PROCESS_ALERT: ClassVar["MonitorType"] + QUERY_ALERT: ClassVar["MonitorType"] + RUM_ALERT: ClassVar["MonitorType"] + SERVICE_CHECK: ClassVar["MonitorType"] + SYNTHETICS_ALERT: ClassVar["MonitorType"] + TRACE_ANALYTICS_ALERT: ClassVar["MonitorType"] + SLO_ALERT: ClassVar["MonitorType"] + EVENT_V2_ALERT: ClassVar["MonitorType"] + AUDIT_ALERT: ClassVar["MonitorType"] + CI_PIPELINES_ALERT: ClassVar["MonitorType"] + CI_TESTS_ALERT: ClassVar["MonitorType"] + ERROR_TRACKING_ALERT: ClassVar["MonitorType"] + DATABASE_MONITORING_ALERT: ClassVar["MonitorType"] + NETWORK_PERFORMANCE_ALERT: ClassVar["MonitorType"] + COST_ALERT: ClassVar["MonitorType"] + DATA_QUALITY_ALERT: ClassVar["MonitorType"] + NETWORK_PATH_ALERT: ClassVar["MonitorType"] + DATA_JOBS_ALERT: ClassVar["MonitorType"] + LLM_OBSERVABILITY_ALERT: ClassVar["MonitorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorType.COMPOSITE = MonitorType("composite") +MonitorType.EVENT_ALERT = MonitorType("event alert") +MonitorType.LOG_ALERT = MonitorType("log alert") +MonitorType.METRIC_ALERT = MonitorType("metric alert") +MonitorType.PROCESS_ALERT = MonitorType("process alert") +MonitorType.QUERY_ALERT = MonitorType("query alert") +MonitorType.RUM_ALERT = MonitorType("rum alert") +MonitorType.SERVICE_CHECK = MonitorType("service check") +MonitorType.SYNTHETICS_ALERT = MonitorType("synthetics alert") +MonitorType.TRACE_ANALYTICS_ALERT = MonitorType("trace-analytics alert") +MonitorType.SLO_ALERT = MonitorType("slo alert") +MonitorType.EVENT_V2_ALERT = MonitorType("event-v2 alert") +MonitorType.AUDIT_ALERT = MonitorType("audit alert") +MonitorType.CI_PIPELINES_ALERT = MonitorType("ci-pipelines alert") +MonitorType.CI_TESTS_ALERT = MonitorType("ci-tests alert") +MonitorType.ERROR_TRACKING_ALERT = MonitorType("error-tracking alert") +MonitorType.DATABASE_MONITORING_ALERT = MonitorType("database-monitoring alert") +MonitorType.NETWORK_PERFORMANCE_ALERT = MonitorType("network-performance alert") +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") +MonitorType.LLM_OBSERVABILITY_ALERT = MonitorType("llm-observability alert") diff --git a/datadog_api_client/v1/model/monitor_update_request.py b/datadog_api_client/v1/model/monitor_update_request.py new file mode 100644 index 0000000000..e27eea2e9f --- /dev/null +++ b/datadog_api_client/v1/model/monitor_update_request.py @@ -0,0 +1,201 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monitor_asset import MonitorAsset + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.monitor_draft_status import MonitorDraftStatus + from datadog_api_client.v1.model.monitor_options import MonitorOptions + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + from datadog_api_client.v1.model.monitor_state import MonitorState + from datadog_api_client.v1.model.monitor_type import MonitorType + from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition + 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_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 + from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filtered_query_definition import MonitorFormulaAndFunctionAggregateFilteredQueryDefinition + +class MonitorUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monitor_asset import MonitorAsset + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.monitor_draft_status import MonitorDraftStatus + from datadog_api_client.v1.model.monitor_options import MonitorOptions + from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates + from datadog_api_client.v1.model.monitor_state import MonitorState + from datadog_api_client.v1.model.monitor_type import MonitorType + return { + "assets": ([MonitorAsset], none_type), + "created": (datetime,), + "creator": (Creator,), + "deleted": (datetime, none_type), + "draft_status": (MonitorDraftStatus,), + "id": (int,), + "message": (str,), + "modified": (datetime,), + "multi": (bool,), + "name": (str,), + "options": (MonitorOptions,), + "overall_state": (MonitorOverallStates,), + "priority": (int, none_type), + "query": (str,), + "restricted_roles": ([str], none_type), + "state": (MonitorState,), + "tags": ([str],), + "type": (MonitorType,), + } + attribute_map = { + "assets": "assets", + "created": "created", + "creator": "creator", + "deleted": "deleted", + "draft_status": "draft_status", + "id": "id", + "message": "message", + "modified": "modified", + "multi": "multi", + "name": "name", + "options": "options", + "overall_state": "overall_state", + "priority": "priority", + "query": "query", + "restricted_roles": "restricted_roles", + "state": "state", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "created", + "creator", + "deleted", + "id", + "modified", + "multi", + "overall_state", + "state", + } + + def __init__(self_, assets: Union[List[MonitorAsset], none_type, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, creator: Union[Creator, UnsetType]=unset, deleted: Union[datetime, none_type, UnsetType]=unset, draft_status: Union[MonitorDraftStatus, UnsetType]=unset, id: Union[int, UnsetType]=unset, message: Union[str, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, multi: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, options: Union[MonitorOptions, UnsetType]=unset, overall_state: Union[MonitorOverallStates, UnsetType]=unset, priority: Union[int, none_type, UnsetType]=unset, query: Union[str, UnsetType]=unset, restricted_roles: Union[List[str], none_type, UnsetType]=unset, state: Union[MonitorState, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[MonitorType, UnsetType]=unset, **kwargs): + """ + Object describing a monitor update request. + + :param assets: The list of monitor assets tied to a monitor, which represents key links for users to take action on monitor alerts (for example, runbooks). + :type assets: [MonitorAsset], none_type, optional + + :param created: Timestamp of the monitor creation. + :type created: datetime, optional + + :param creator: Object describing the creator of the shared element. + :type creator: Creator, optional + + :param deleted: Whether or not the monitor is deleted. (Always ``null`` ) + :type deleted: datetime, none_type, optional + + :param draft_status: Indicates whether the monitor is in a draft or published state. + + ``draft`` : The monitor appears as Draft and does not send notifications. + ``published`` : The monitor is active and evaluates conditions and notify as configured. + + This field is in preview. The draft value is only available to customers with the feature enabled. + :type draft_status: MonitorDraftStatus, optional + + :param id: ID of this monitor. + :type id: int, optional + + :param message: A message to include with notifications for this monitor. + :type message: str, optional + + :param modified: Last timestamp when the monitor was edited. + :type modified: datetime, optional + + :param multi: Whether or not the monitor is broken down on different groups. + :type multi: bool, optional + + :param name: The monitor name. + :type name: str, optional + + :param options: List of options associated with your monitor. + :type options: MonitorOptions, optional + + :param overall_state: The different states your monitor can be in. + :type overall_state: MonitorOverallStates, optional + + :param priority: Integer from 1 (high) to 5 (low) indicating alert severity. + :type priority: int, none_type, optional + + :param query: The monitor query. + :type query: str, optional + + :param restricted_roles: A list of unique role identifiers to define which roles are allowed to edit the monitor. The unique identifiers for all roles can be pulled from the `Roles API `_ and are located in the ``data.id`` field. Editing a monitor includes any updates to the monitor configuration, monitor deletion, and muting of the monitor for any amount of time. You can use the `Restriction Policies API `_ to manage write authorization for individual monitors by teams and users, in addition to roles. + :type restricted_roles: [str], none_type, optional + + :param state: Wrapper object with the different monitor states. + :type state: MonitorState, optional + + :param tags: Tags associated to your monitor. + :type tags: [str], optional + + :param type: The type of the monitor. For more information about ``type`` , see the `monitor options `_ docs. + :type type: MonitorType, optional + """ + if assets is not unset: + kwargs["assets"] = assets + if created is not unset: + kwargs["created"] = created + if creator is not unset: + kwargs["creator"] = creator + if deleted is not unset: + kwargs["deleted"] = deleted + if draft_status is not unset: + kwargs["draft_status"] = draft_status + if id is not unset: + kwargs["id"] = id + if message is not unset: + kwargs["message"] = message + if modified is not unset: + kwargs["modified"] = modified + if multi is not unset: + kwargs["multi"] = multi + if name is not unset: + kwargs["name"] = name + if options is not unset: + kwargs["options"] = options + if overall_state is not unset: + kwargs["overall_state"] = overall_state + if priority is not unset: + kwargs["priority"] = priority + if query is not unset: + kwargs["query"] = query + if restricted_roles is not unset: + kwargs["restricted_roles"] = restricted_roles + if state is not unset: + kwargs["state"] = state + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monthly_usage_attribution_body.py b/datadog_api_client/v1/model/monthly_usage_attribution_body.py new file mode 100644 index 0000000000..5bedc726ee --- /dev/null +++ b/datadog_api_client/v1/model/monthly_usage_attribution_body.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_attribution_tag_names import UsageAttributionTagNames + from datadog_api_client.v1.model.monthly_usage_attribution_values import MonthlyUsageAttributionValues + +class MonthlyUsageAttributionBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_attribution_tag_names import UsageAttributionTagNames + from datadog_api_client.v1.model.monthly_usage_attribution_values import MonthlyUsageAttributionValues + return { + "month": (datetime,), + "org_name": (str,), + "public_id": (str,), + "region": (str,), + "tag_config_source": (str,), + "tags": (UsageAttributionTagNames,), + "updated_at": (datetime,), + "values": (MonthlyUsageAttributionValues,), + } + attribute_map = { + "month": "month", + "org_name": "org_name", + "public_id": "public_id", + "region": "region", + "tag_config_source": "tag_config_source", + "tags": "tags", + "updated_at": "updated_at", + "values": "values", + } + + def __init__(self_, month: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, tag_config_source: Union[str, UnsetType]=unset, tags: Union[UsageAttributionTagNames, none_type, UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, values: Union[MonthlyUsageAttributionValues, UnsetType]=unset, **kwargs): + """ + Usage Summary by tag for a given organization. + + :param month: Datetime in ISO-8601 format, UTC, precise to month: [YYYY-MM]. + :type month: datetime, optional + + :param org_name: The name of the organization. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param region: The region of the Datadog instance that the organization belongs to. + :type region: str, optional + + :param tag_config_source: The source of the usage attribution tag configuration and the selected tags in the format ``::://////``. + :type tag_config_source: str, optional + + :param tags: Tag keys and values. + + A ``null`` value here means that the requested tag breakdown cannot be applied because it does not match the `tags + configured for usage attribution `_. + In this scenario the API returns the total usage, not broken down by tags. + :type tags: UsageAttributionTagNames, none_type, optional + + :param updated_at: Datetime of the most recent update to the usage values. + :type updated_at: datetime, optional + + :param values: Fields in Usage Summary by tag(s). + :type values: MonthlyUsageAttributionValues, optional + """ + if month is not unset: + kwargs["month"] = month + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if region is not unset: + kwargs["region"] = region + if tag_config_source is not unset: + kwargs["tag_config_source"] = tag_config_source + if tags is not unset: + kwargs["tags"] = tags + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monthly_usage_attribution_metadata.py b/datadog_api_client/v1/model/monthly_usage_attribution_metadata.py new file mode 100644 index 0000000000..c46c2c2534 --- /dev/null +++ b/datadog_api_client/v1/model/monthly_usage_attribution_metadata.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_attribution_aggregates import UsageAttributionAggregates + from datadog_api_client.v1.model.monthly_usage_attribution_pagination import MonthlyUsageAttributionPagination + +class MonthlyUsageAttributionMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_attribution_aggregates import UsageAttributionAggregates + from datadog_api_client.v1.model.monthly_usage_attribution_pagination import MonthlyUsageAttributionPagination + return { + "aggregates": (UsageAttributionAggregates,), + "pagination": (MonthlyUsageAttributionPagination,), + } + attribute_map = { + "aggregates": "aggregates", + "pagination": "pagination", + } + + def __init__(self_, aggregates: Union[UsageAttributionAggregates, UnsetType]=unset, pagination: Union[MonthlyUsageAttributionPagination, UnsetType]=unset, **kwargs): + """ + The object containing document metadata. + + :param aggregates: An array of available aggregates. + :type aggregates: UsageAttributionAggregates, optional + + :param pagination: The metadata for the current pagination. + :type pagination: MonthlyUsageAttributionPagination, optional + """ + if aggregates is not unset: + kwargs["aggregates"] = aggregates + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monthly_usage_attribution_pagination.py b/datadog_api_client/v1/model/monthly_usage_attribution_pagination.py new file mode 100644 index 0000000000..c08c710391 --- /dev/null +++ b/datadog_api_client/v1/model/monthly_usage_attribution_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonthlyUsageAttributionPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_record_id": (str, none_type), + } + attribute_map = { + "next_record_id": "next_record_id", + } + + def __init__(self_, next_record_id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The metadata for the current pagination. + + :param next_record_id: The cursor to use to get the next results, if any. To make the next request, use the same parameters with the addition of the ``next_record_id``. + :type next_record_id: str, none_type, optional + """ + if next_record_id is not unset: + kwargs["next_record_id"] = next_record_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monthly_usage_attribution_response.py b/datadog_api_client/v1/model/monthly_usage_attribution_response.py new file mode 100644 index 0000000000..5d60947e46 --- /dev/null +++ b/datadog_api_client/v1/model/monthly_usage_attribution_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.monthly_usage_attribution_metadata import MonthlyUsageAttributionMetadata + from datadog_api_client.v1.model.monthly_usage_attribution_body import MonthlyUsageAttributionBody + +class MonthlyUsageAttributionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.monthly_usage_attribution_metadata import MonthlyUsageAttributionMetadata + from datadog_api_client.v1.model.monthly_usage_attribution_body import MonthlyUsageAttributionBody + return { + "metadata": (MonthlyUsageAttributionMetadata,), + "usage": ([MonthlyUsageAttributionBody],), + } + attribute_map = { + "metadata": "metadata", + "usage": "usage", + } + + def __init__(self_, metadata: Union[MonthlyUsageAttributionMetadata, UnsetType]=unset, usage: Union[List[MonthlyUsageAttributionBody], UnsetType]=unset, **kwargs): + """ + Response containing the monthly Usage Summary by tag(s). + + :param metadata: The object containing document metadata. + :type metadata: MonthlyUsageAttributionMetadata, optional + + :param usage: Get usage summary by tag(s). + :type usage: [MonthlyUsageAttributionBody], optional + """ + if metadata is not unset: + kwargs["metadata"] = metadata + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/monthly_usage_attribution_supported_metrics.py b/datadog_api_client/v1/model/monthly_usage_attribution_supported_metrics.py new file mode 100644 index 0000000000..a079f73077 --- /dev/null +++ b/datadog_api_client/v1/model/monthly_usage_attribution_supported_metrics.py @@ -0,0 +1,556 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonthlyUsageAttributionSupportedMetrics(ModelSimple): + """ + Supported metrics for monthly usage attribution requests. Usage types are in the format `_usage`. + To obtain the complete list of valid usage types, make a request to the [Get usage attribution types API](https://docs.datadoghq.com/api/latest/usage-metering/#get-usage-attribution-types). + + :param value: Must be one of ["api_usage", "api_percentage", "apm_fargate_usage", "apm_fargate_percentage", "appsec_fargate_usage", "appsec_fargate_percentage", "apm_host_usage", "apm_host_percentage", "apm_usm_usage", "apm_usm_percentage", "appsec_usage", "appsec_percentage", "asm_serverless_traced_invocations_usage", "asm_serverless_traced_invocations_percentage", "bits_ai_investigations_usage", "bits_ai_investigations_percentage", "browser_usage", "browser_percentage", "ci_visibility_itr_usage", "ci_visibility_itr_percentage", "cloud_siem_usage", "cloud_siem_percentage", "code_security_host_usage", "code_security_host_percentage", "container_excl_agent_usage", "container_excl_agent_percentage", "container_usage", "container_percentage", "cspm_containers_percentage", "cspm_containers_usage", "cspm_hosts_percentage", "cspm_hosts_usage", "custom_timeseries_usage", "custom_timeseries_percentage", "custom_ingested_timeseries_usage", "custom_ingested_timeseries_percentage", "cws_containers_percentage", "cws_containers_usage", "cws_fargate_task_percentage", "cws_fargate_task_usage", "cws_hosts_percentage", "cws_hosts_usage", "data_jobs_monitoring_usage", "data_jobs_monitoring_percentage", "data_stream_monitoring_usage", "data_stream_monitoring_percentage", "dbm_hosts_percentage", "dbm_hosts_usage", "dbm_queries_percentage", "dbm_queries_usage", "error_tracking_usage", "error_tracking_percentage", "estimated_indexed_spans_usage", "estimated_indexed_spans_percentage", "estimated_ingested_spans_usage", "estimated_ingested_spans_percentage", "fargate_usage", "fargate_percentage", "flex_logs_starter_usage", "flex_logs_starter_percentage", "flex_stored_logs_usage", "flex_stored_logs_percentage", "functions_usage", "functions_percentage", "incident_management_monthly_active_users_usage", "incident_management_monthly_active_users_percentage", "infra_host_usage", "infra_host_percentage", "infra_host_basic_usage", "infra_host_basic_percentage", "invocations_usage", "invocations_percentage", "lambda_traced_invocations_usage", "lambda_traced_invocations_percentage", "llm_observability_usage", "llm_observability_percentage", "llm_spans_usage", "llm_spans_percentage", "mobile_app_testing_percentage", "mobile_app_testing_usage", "ndm_netflow_usage", "ndm_netflow_percentage", "network_device_wireless_usage", "network_device_wireless_percentage", "npm_host_usage", "npm_host_percentage", "obs_pipeline_bytes_usage", "obs_pipeline_bytes_percentage", "obs_pipelines_vcpu_usage", "obs_pipelines_vcpu_percentage", "online_archive_usage", "online_archive_percentage", "product_analytics_session_usage", "product_analytics_session_percentage", "profiled_container_usage", "profiled_container_percentage", "profiled_fargate_usage", "profiled_fargate_percentage", "profiled_host_usage", "profiled_host_percentage", "published_app_usage", "published_app_percentage", "serverless_apps_usage", "serverless_apps_percentage", "serverless_apps_apm_usage", "serverless_apps_apm_percentage", "snmp_usage", "snmp_percentage", "universal_service_monitoring_usage", "universal_service_monitoring_percentage", "vuln_management_hosts_usage", "vuln_management_hosts_percentage", "sds_scanned_bytes_usage", "sds_scanned_bytes_percentage", "ci_test_indexed_spans_usage", "ci_test_indexed_spans_percentage", "ingested_logs_bytes_usage", "ingested_logs_bytes_percentage", "ci_pipeline_indexed_spans_usage", "ci_pipeline_indexed_spans_percentage", "indexed_spans_usage", "indexed_spans_percentage", "custom_event_usage", "custom_event_percentage", "logs_indexed_custom_retention_usage", "logs_indexed_custom_retention_percentage", "logs_indexed_360day_usage", "logs_indexed_360day_percentage", "logs_indexed_180day_usage", "logs_indexed_180day_percentage", "logs_indexed_90day_usage", "logs_indexed_90day_percentage", "logs_indexed_60day_usage", "logs_indexed_60day_percentage", "logs_indexed_45day_usage", "logs_indexed_45day_percentage", "logs_indexed_30day_usage", "logs_indexed_30day_percentage", "logs_indexed_15day_usage", "logs_indexed_15day_percentage", "logs_indexed_7day_usage", "logs_indexed_7day_percentage", "logs_indexed_3day_usage", "logs_indexed_3day_percentage", "logs_indexed_1day_usage", "logs_indexed_1day_percentage", "rum_ingested_usage", "rum_ingested_percentage", "rum_investigate_usage", "rum_investigate_percentage", "rum_replay_sessions_usage", "rum_replay_sessions_percentage", "rum_session_replay_add_on_usage", "rum_session_replay_add_on_percentage", "rum_browser_mobile_sessions_usage", "rum_browser_mobile_sessions_percentage", "ingested_spans_bytes_usage", "ingested_spans_bytes_percentage", "siem_12mo_retention_usage", "siem_12mo_retention_percentage", "siem_6mo_retention_usage", "siem_6mo_retention_percentage", "siem_analyzed_logs_add_on_usage", "siem_analyzed_logs_add_on_percentage", "siem_ingested_bytes_usage", "siem_ingested_bytes_percentage", "workflow_executions_usage", "workflow_executions_percentage", "sca_fargate_usage", "sca_fargate_percentage", "*"]. + :type value: str + """ + + allowed_values = { + "api_usage", + "api_percentage", + "apm_fargate_usage", + "apm_fargate_percentage", + "appsec_fargate_usage", + "appsec_fargate_percentage", + "apm_host_usage", + "apm_host_percentage", + "apm_usm_usage", + "apm_usm_percentage", + "appsec_usage", + "appsec_percentage", + "asm_serverless_traced_invocations_usage", + "asm_serverless_traced_invocations_percentage", + "bits_ai_investigations_usage", + "bits_ai_investigations_percentage", + "browser_usage", + "browser_percentage", + "ci_visibility_itr_usage", + "ci_visibility_itr_percentage", + "cloud_siem_usage", + "cloud_siem_percentage", + "code_security_host_usage", + "code_security_host_percentage", + "container_excl_agent_usage", + "container_excl_agent_percentage", + "container_usage", + "container_percentage", + "cspm_containers_percentage", + "cspm_containers_usage", + "cspm_hosts_percentage", + "cspm_hosts_usage", + "custom_timeseries_usage", + "custom_timeseries_percentage", + "custom_ingested_timeseries_usage", + "custom_ingested_timeseries_percentage", + "cws_containers_percentage", + "cws_containers_usage", + "cws_fargate_task_percentage", + "cws_fargate_task_usage", + "cws_hosts_percentage", + "cws_hosts_usage", + "data_jobs_monitoring_usage", + "data_jobs_monitoring_percentage", + "data_stream_monitoring_usage", + "data_stream_monitoring_percentage", + "dbm_hosts_percentage", + "dbm_hosts_usage", + "dbm_queries_percentage", + "dbm_queries_usage", + "error_tracking_usage", + "error_tracking_percentage", + "estimated_indexed_spans_usage", + "estimated_indexed_spans_percentage", + "estimated_ingested_spans_usage", + "estimated_ingested_spans_percentage", + "fargate_usage", + "fargate_percentage", + "flex_logs_starter_usage", + "flex_logs_starter_percentage", + "flex_stored_logs_usage", + "flex_stored_logs_percentage", + "functions_usage", + "functions_percentage", + "incident_management_monthly_active_users_usage", + "incident_management_monthly_active_users_percentage", + "infra_host_usage", + "infra_host_percentage", + "infra_host_basic_usage", + "infra_host_basic_percentage", + "invocations_usage", + "invocations_percentage", + "lambda_traced_invocations_usage", + "lambda_traced_invocations_percentage", + "llm_observability_usage", + "llm_observability_percentage", + "llm_spans_usage", + "llm_spans_percentage", + "mobile_app_testing_percentage", + "mobile_app_testing_usage", + "ndm_netflow_usage", + "ndm_netflow_percentage", + "network_device_wireless_usage", + "network_device_wireless_percentage", + "npm_host_usage", + "npm_host_percentage", + "obs_pipeline_bytes_usage", + "obs_pipeline_bytes_percentage", + "obs_pipelines_vcpu_usage", + "obs_pipelines_vcpu_percentage", + "online_archive_usage", + "online_archive_percentage", + "product_analytics_session_usage", + "product_analytics_session_percentage", + "profiled_container_usage", + "profiled_container_percentage", + "profiled_fargate_usage", + "profiled_fargate_percentage", + "profiled_host_usage", + "profiled_host_percentage", + "published_app_usage", + "published_app_percentage", + "serverless_apps_usage", + "serverless_apps_percentage", + "serverless_apps_apm_usage", + "serverless_apps_apm_percentage", + "snmp_usage", + "snmp_percentage", + "universal_service_monitoring_usage", + "universal_service_monitoring_percentage", + "vuln_management_hosts_usage", + "vuln_management_hosts_percentage", + "sds_scanned_bytes_usage", + "sds_scanned_bytes_percentage", + "ci_test_indexed_spans_usage", + "ci_test_indexed_spans_percentage", + "ingested_logs_bytes_usage", + "ingested_logs_bytes_percentage", + "ci_pipeline_indexed_spans_usage", + "ci_pipeline_indexed_spans_percentage", + "indexed_spans_usage", + "indexed_spans_percentage", + "custom_event_usage", + "custom_event_percentage", + "logs_indexed_custom_retention_usage", + "logs_indexed_custom_retention_percentage", + "logs_indexed_360day_usage", + "logs_indexed_360day_percentage", + "logs_indexed_180day_usage", + "logs_indexed_180day_percentage", + "logs_indexed_90day_usage", + "logs_indexed_90day_percentage", + "logs_indexed_60day_usage", + "logs_indexed_60day_percentage", + "logs_indexed_45day_usage", + "logs_indexed_45day_percentage", + "logs_indexed_30day_usage", + "logs_indexed_30day_percentage", + "logs_indexed_15day_usage", + "logs_indexed_15day_percentage", + "logs_indexed_7day_usage", + "logs_indexed_7day_percentage", + "logs_indexed_3day_usage", + "logs_indexed_3day_percentage", + "logs_indexed_1day_usage", + "logs_indexed_1day_percentage", + "rum_ingested_usage", + "rum_ingested_percentage", + "rum_investigate_usage", + "rum_investigate_percentage", + "rum_replay_sessions_usage", + "rum_replay_sessions_percentage", + "rum_session_replay_add_on_usage", + "rum_session_replay_add_on_percentage", + "rum_browser_mobile_sessions_usage", + "rum_browser_mobile_sessions_percentage", + "ingested_spans_bytes_usage", + "ingested_spans_bytes_percentage", + "siem_12mo_retention_usage", + "siem_12mo_retention_percentage", + "siem_6mo_retention_usage", + "siem_6mo_retention_percentage", + "siem_analyzed_logs_add_on_usage", + "siem_analyzed_logs_add_on_percentage", + "siem_ingested_bytes_usage", + "siem_ingested_bytes_percentage", + "workflow_executions_usage", + "workflow_executions_percentage", + "sca_fargate_usage", + "sca_fargate_percentage", + "*", + } + API_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + API_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APM_FARGATE_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APM_FARGATE_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APPSEC_FARGATE_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APPSEC_FARGATE_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APM_HOST_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APM_HOST_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APM_USM_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APM_USM_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APPSEC_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + APPSEC_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ASM_SERVERLESS_TRACED_INVOCATIONS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ASM_SERVERLESS_TRACED_INVOCATIONS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + BITS_AI_INVESTIGATIONS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + BITS_AI_INVESTIGATIONS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + BROWSER_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + BROWSER_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CI_VISIBILITY_ITR_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CI_VISIBILITY_ITR_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CLOUD_SIEM_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CLOUD_SIEM_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CODE_SECURITY_HOST_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CODE_SECURITY_HOST_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CONTAINER_EXCL_AGENT_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CONTAINER_EXCL_AGENT_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CONTAINER_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CONTAINER_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CSPM_CONTAINERS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CSPM_CONTAINERS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CSPM_HOSTS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CSPM_HOSTS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CUSTOM_TIMESERIES_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CUSTOM_TIMESERIES_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CUSTOM_INGESTED_TIMESERIES_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CUSTOM_INGESTED_TIMESERIES_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CWS_CONTAINERS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CWS_CONTAINERS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CWS_FARGATE_TASK_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CWS_FARGATE_TASK_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CWS_HOSTS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CWS_HOSTS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + DATA_JOBS_MONITORING_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + DATA_JOBS_MONITORING_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + DATA_STREAM_MONITORING_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + DATA_STREAM_MONITORING_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + DBM_HOSTS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + DBM_HOSTS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + DBM_QUERIES_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + DBM_QUERIES_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ERROR_TRACKING_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ERROR_TRACKING_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ESTIMATED_INDEXED_SPANS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ESTIMATED_INDEXED_SPANS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ESTIMATED_INGESTED_SPANS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ESTIMATED_INGESTED_SPANS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + FARGATE_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + FARGATE_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + FLEX_LOGS_STARTER_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + FLEX_LOGS_STARTER_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + FLEX_STORED_LOGS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + FLEX_STORED_LOGS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + FUNCTIONS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + FUNCTIONS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INCIDENT_MANAGEMENT_MONTHLY_ACTIVE_USERS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INCIDENT_MANAGEMENT_MONTHLY_ACTIVE_USERS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INFRA_HOST_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INFRA_HOST_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INFRA_HOST_BASIC_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INFRA_HOST_BASIC_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INVOCATIONS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INVOCATIONS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LAMBDA_TRACED_INVOCATIONS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LAMBDA_TRACED_INVOCATIONS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LLM_OBSERVABILITY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LLM_OBSERVABILITY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LLM_SPANS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LLM_SPANS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + MOBILE_APP_TESTING_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + MOBILE_APP_TESTING_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + NDM_NETFLOW_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + NDM_NETFLOW_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + NETWORK_DEVICE_WIRELESS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + NETWORK_DEVICE_WIRELESS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + NPM_HOST_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + NPM_HOST_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + OBS_PIPELINE_BYTES_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + OBS_PIPELINE_BYTES_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + OBS_PIPELINES_VCPU_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + OBS_PIPELINES_VCPU_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ONLINE_ARCHIVE_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ONLINE_ARCHIVE_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PRODUCT_ANALYTICS_SESSION_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PRODUCT_ANALYTICS_SESSION_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PROFILED_CONTAINER_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PROFILED_CONTAINER_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PROFILED_FARGATE_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PROFILED_FARGATE_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PROFILED_HOST_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PROFILED_HOST_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PUBLISHED_APP_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + PUBLISHED_APP_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SERVERLESS_APPS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SERVERLESS_APPS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SERVERLESS_APPS_APM_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SERVERLESS_APPS_APM_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SNMP_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SNMP_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + UNIVERSAL_SERVICE_MONITORING_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + UNIVERSAL_SERVICE_MONITORING_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + VULN_MANAGEMENT_HOSTS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + VULN_MANAGEMENT_HOSTS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SDS_SCANNED_BYTES_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SDS_SCANNED_BYTES_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CI_TEST_INDEXED_SPANS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CI_TEST_INDEXED_SPANS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INGESTED_LOGS_BYTES_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INGESTED_LOGS_BYTES_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CI_PIPELINE_INDEXED_SPANS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CI_PIPELINE_INDEXED_SPANS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INDEXED_SPANS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INDEXED_SPANS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CUSTOM_EVENT_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + CUSTOM_EVENT_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_CUSTOM_RETENTION_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_CUSTOM_RETENTION_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_360DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_360DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_180DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_180DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_90DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_90DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_60DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_60DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_45DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_45DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_30DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_30DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_15DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_15DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_7DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_7DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_3DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_3DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_1DAY_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + LOGS_INDEXED_1DAY_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_INGESTED_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_INGESTED_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_INVESTIGATE_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_INVESTIGATE_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_REPLAY_SESSIONS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_REPLAY_SESSIONS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_SESSION_REPLAY_ADD_ON_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_SESSION_REPLAY_ADD_ON_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_BROWSER_MOBILE_SESSIONS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + RUM_BROWSER_MOBILE_SESSIONS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INGESTED_SPANS_BYTES_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + INGESTED_SPANS_BYTES_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SIEM_12MO_RETENTION_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SIEM_12MO_RETENTION_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SIEM_6MO_RETENTION_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SIEM_6MO_RETENTION_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SIEM_ANALYZED_LOGS_ADD_ON_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SIEM_ANALYZED_LOGS_ADD_ON_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SIEM_INGESTED_BYTES_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SIEM_INGESTED_BYTES_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + WORKFLOW_EXECUTIONS_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + WORKFLOW_EXECUTIONS_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SCA_FARGATE_USAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + SCA_FARGATE_PERCENTAGE: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + ALL: ClassVar["MonthlyUsageAttributionSupportedMetrics"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonthlyUsageAttributionSupportedMetrics.API_USAGE = MonthlyUsageAttributionSupportedMetrics("api_usage") +MonthlyUsageAttributionSupportedMetrics.API_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("api_percentage") +MonthlyUsageAttributionSupportedMetrics.APM_FARGATE_USAGE = MonthlyUsageAttributionSupportedMetrics("apm_fargate_usage") +MonthlyUsageAttributionSupportedMetrics.APM_FARGATE_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("apm_fargate_percentage") +MonthlyUsageAttributionSupportedMetrics.APPSEC_FARGATE_USAGE = MonthlyUsageAttributionSupportedMetrics("appsec_fargate_usage") +MonthlyUsageAttributionSupportedMetrics.APPSEC_FARGATE_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("appsec_fargate_percentage") +MonthlyUsageAttributionSupportedMetrics.APM_HOST_USAGE = MonthlyUsageAttributionSupportedMetrics("apm_host_usage") +MonthlyUsageAttributionSupportedMetrics.APM_HOST_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("apm_host_percentage") +MonthlyUsageAttributionSupportedMetrics.APM_USM_USAGE = MonthlyUsageAttributionSupportedMetrics("apm_usm_usage") +MonthlyUsageAttributionSupportedMetrics.APM_USM_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("apm_usm_percentage") +MonthlyUsageAttributionSupportedMetrics.APPSEC_USAGE = MonthlyUsageAttributionSupportedMetrics("appsec_usage") +MonthlyUsageAttributionSupportedMetrics.APPSEC_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("appsec_percentage") +MonthlyUsageAttributionSupportedMetrics.ASM_SERVERLESS_TRACED_INVOCATIONS_USAGE = MonthlyUsageAttributionSupportedMetrics("asm_serverless_traced_invocations_usage") +MonthlyUsageAttributionSupportedMetrics.ASM_SERVERLESS_TRACED_INVOCATIONS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("asm_serverless_traced_invocations_percentage") +MonthlyUsageAttributionSupportedMetrics.BITS_AI_INVESTIGATIONS_USAGE = MonthlyUsageAttributionSupportedMetrics("bits_ai_investigations_usage") +MonthlyUsageAttributionSupportedMetrics.BITS_AI_INVESTIGATIONS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("bits_ai_investigations_percentage") +MonthlyUsageAttributionSupportedMetrics.BROWSER_USAGE = MonthlyUsageAttributionSupportedMetrics("browser_usage") +MonthlyUsageAttributionSupportedMetrics.BROWSER_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("browser_percentage") +MonthlyUsageAttributionSupportedMetrics.CI_VISIBILITY_ITR_USAGE = MonthlyUsageAttributionSupportedMetrics("ci_visibility_itr_usage") +MonthlyUsageAttributionSupportedMetrics.CI_VISIBILITY_ITR_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("ci_visibility_itr_percentage") +MonthlyUsageAttributionSupportedMetrics.CLOUD_SIEM_USAGE = MonthlyUsageAttributionSupportedMetrics("cloud_siem_usage") +MonthlyUsageAttributionSupportedMetrics.CLOUD_SIEM_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("cloud_siem_percentage") +MonthlyUsageAttributionSupportedMetrics.CODE_SECURITY_HOST_USAGE = MonthlyUsageAttributionSupportedMetrics("code_security_host_usage") +MonthlyUsageAttributionSupportedMetrics.CODE_SECURITY_HOST_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("code_security_host_percentage") +MonthlyUsageAttributionSupportedMetrics.CONTAINER_EXCL_AGENT_USAGE = MonthlyUsageAttributionSupportedMetrics("container_excl_agent_usage") +MonthlyUsageAttributionSupportedMetrics.CONTAINER_EXCL_AGENT_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("container_excl_agent_percentage") +MonthlyUsageAttributionSupportedMetrics.CONTAINER_USAGE = MonthlyUsageAttributionSupportedMetrics("container_usage") +MonthlyUsageAttributionSupportedMetrics.CONTAINER_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("container_percentage") +MonthlyUsageAttributionSupportedMetrics.CSPM_CONTAINERS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("cspm_containers_percentage") +MonthlyUsageAttributionSupportedMetrics.CSPM_CONTAINERS_USAGE = MonthlyUsageAttributionSupportedMetrics("cspm_containers_usage") +MonthlyUsageAttributionSupportedMetrics.CSPM_HOSTS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("cspm_hosts_percentage") +MonthlyUsageAttributionSupportedMetrics.CSPM_HOSTS_USAGE = MonthlyUsageAttributionSupportedMetrics("cspm_hosts_usage") +MonthlyUsageAttributionSupportedMetrics.CUSTOM_TIMESERIES_USAGE = MonthlyUsageAttributionSupportedMetrics("custom_timeseries_usage") +MonthlyUsageAttributionSupportedMetrics.CUSTOM_TIMESERIES_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("custom_timeseries_percentage") +MonthlyUsageAttributionSupportedMetrics.CUSTOM_INGESTED_TIMESERIES_USAGE = MonthlyUsageAttributionSupportedMetrics("custom_ingested_timeseries_usage") +MonthlyUsageAttributionSupportedMetrics.CUSTOM_INGESTED_TIMESERIES_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("custom_ingested_timeseries_percentage") +MonthlyUsageAttributionSupportedMetrics.CWS_CONTAINERS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("cws_containers_percentage") +MonthlyUsageAttributionSupportedMetrics.CWS_CONTAINERS_USAGE = MonthlyUsageAttributionSupportedMetrics("cws_containers_usage") +MonthlyUsageAttributionSupportedMetrics.CWS_FARGATE_TASK_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("cws_fargate_task_percentage") +MonthlyUsageAttributionSupportedMetrics.CWS_FARGATE_TASK_USAGE = MonthlyUsageAttributionSupportedMetrics("cws_fargate_task_usage") +MonthlyUsageAttributionSupportedMetrics.CWS_HOSTS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("cws_hosts_percentage") +MonthlyUsageAttributionSupportedMetrics.CWS_HOSTS_USAGE = MonthlyUsageAttributionSupportedMetrics("cws_hosts_usage") +MonthlyUsageAttributionSupportedMetrics.DATA_JOBS_MONITORING_USAGE = MonthlyUsageAttributionSupportedMetrics("data_jobs_monitoring_usage") +MonthlyUsageAttributionSupportedMetrics.DATA_JOBS_MONITORING_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("data_jobs_monitoring_percentage") +MonthlyUsageAttributionSupportedMetrics.DATA_STREAM_MONITORING_USAGE = MonthlyUsageAttributionSupportedMetrics("data_stream_monitoring_usage") +MonthlyUsageAttributionSupportedMetrics.DATA_STREAM_MONITORING_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("data_stream_monitoring_percentage") +MonthlyUsageAttributionSupportedMetrics.DBM_HOSTS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("dbm_hosts_percentage") +MonthlyUsageAttributionSupportedMetrics.DBM_HOSTS_USAGE = MonthlyUsageAttributionSupportedMetrics("dbm_hosts_usage") +MonthlyUsageAttributionSupportedMetrics.DBM_QUERIES_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("dbm_queries_percentage") +MonthlyUsageAttributionSupportedMetrics.DBM_QUERIES_USAGE = MonthlyUsageAttributionSupportedMetrics("dbm_queries_usage") +MonthlyUsageAttributionSupportedMetrics.ERROR_TRACKING_USAGE = MonthlyUsageAttributionSupportedMetrics("error_tracking_usage") +MonthlyUsageAttributionSupportedMetrics.ERROR_TRACKING_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("error_tracking_percentage") +MonthlyUsageAttributionSupportedMetrics.ESTIMATED_INDEXED_SPANS_USAGE = MonthlyUsageAttributionSupportedMetrics("estimated_indexed_spans_usage") +MonthlyUsageAttributionSupportedMetrics.ESTIMATED_INDEXED_SPANS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("estimated_indexed_spans_percentage") +MonthlyUsageAttributionSupportedMetrics.ESTIMATED_INGESTED_SPANS_USAGE = MonthlyUsageAttributionSupportedMetrics("estimated_ingested_spans_usage") +MonthlyUsageAttributionSupportedMetrics.ESTIMATED_INGESTED_SPANS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("estimated_ingested_spans_percentage") +MonthlyUsageAttributionSupportedMetrics.FARGATE_USAGE = MonthlyUsageAttributionSupportedMetrics("fargate_usage") +MonthlyUsageAttributionSupportedMetrics.FARGATE_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("fargate_percentage") +MonthlyUsageAttributionSupportedMetrics.FLEX_LOGS_STARTER_USAGE = MonthlyUsageAttributionSupportedMetrics("flex_logs_starter_usage") +MonthlyUsageAttributionSupportedMetrics.FLEX_LOGS_STARTER_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("flex_logs_starter_percentage") +MonthlyUsageAttributionSupportedMetrics.FLEX_STORED_LOGS_USAGE = MonthlyUsageAttributionSupportedMetrics("flex_stored_logs_usage") +MonthlyUsageAttributionSupportedMetrics.FLEX_STORED_LOGS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("flex_stored_logs_percentage") +MonthlyUsageAttributionSupportedMetrics.FUNCTIONS_USAGE = MonthlyUsageAttributionSupportedMetrics("functions_usage") +MonthlyUsageAttributionSupportedMetrics.FUNCTIONS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("functions_percentage") +MonthlyUsageAttributionSupportedMetrics.INCIDENT_MANAGEMENT_MONTHLY_ACTIVE_USERS_USAGE = MonthlyUsageAttributionSupportedMetrics("incident_management_monthly_active_users_usage") +MonthlyUsageAttributionSupportedMetrics.INCIDENT_MANAGEMENT_MONTHLY_ACTIVE_USERS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("incident_management_monthly_active_users_percentage") +MonthlyUsageAttributionSupportedMetrics.INFRA_HOST_USAGE = MonthlyUsageAttributionSupportedMetrics("infra_host_usage") +MonthlyUsageAttributionSupportedMetrics.INFRA_HOST_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("infra_host_percentage") +MonthlyUsageAttributionSupportedMetrics.INFRA_HOST_BASIC_USAGE = MonthlyUsageAttributionSupportedMetrics("infra_host_basic_usage") +MonthlyUsageAttributionSupportedMetrics.INFRA_HOST_BASIC_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("infra_host_basic_percentage") +MonthlyUsageAttributionSupportedMetrics.INVOCATIONS_USAGE = MonthlyUsageAttributionSupportedMetrics("invocations_usage") +MonthlyUsageAttributionSupportedMetrics.INVOCATIONS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("invocations_percentage") +MonthlyUsageAttributionSupportedMetrics.LAMBDA_TRACED_INVOCATIONS_USAGE = MonthlyUsageAttributionSupportedMetrics("lambda_traced_invocations_usage") +MonthlyUsageAttributionSupportedMetrics.LAMBDA_TRACED_INVOCATIONS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("lambda_traced_invocations_percentage") +MonthlyUsageAttributionSupportedMetrics.LLM_OBSERVABILITY_USAGE = MonthlyUsageAttributionSupportedMetrics("llm_observability_usage") +MonthlyUsageAttributionSupportedMetrics.LLM_OBSERVABILITY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("llm_observability_percentage") +MonthlyUsageAttributionSupportedMetrics.LLM_SPANS_USAGE = MonthlyUsageAttributionSupportedMetrics("llm_spans_usage") +MonthlyUsageAttributionSupportedMetrics.LLM_SPANS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("llm_spans_percentage") +MonthlyUsageAttributionSupportedMetrics.MOBILE_APP_TESTING_USAGE = MonthlyUsageAttributionSupportedMetrics("mobile_app_testing_percentage") +MonthlyUsageAttributionSupportedMetrics.MOBILE_APP_TESTING_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("mobile_app_testing_usage") +MonthlyUsageAttributionSupportedMetrics.NDM_NETFLOW_USAGE = MonthlyUsageAttributionSupportedMetrics("ndm_netflow_usage") +MonthlyUsageAttributionSupportedMetrics.NDM_NETFLOW_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("ndm_netflow_percentage") +MonthlyUsageAttributionSupportedMetrics.NETWORK_DEVICE_WIRELESS_USAGE = MonthlyUsageAttributionSupportedMetrics("network_device_wireless_usage") +MonthlyUsageAttributionSupportedMetrics.NETWORK_DEVICE_WIRELESS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("network_device_wireless_percentage") +MonthlyUsageAttributionSupportedMetrics.NPM_HOST_USAGE = MonthlyUsageAttributionSupportedMetrics("npm_host_usage") +MonthlyUsageAttributionSupportedMetrics.NPM_HOST_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("npm_host_percentage") +MonthlyUsageAttributionSupportedMetrics.OBS_PIPELINE_BYTES_USAGE = MonthlyUsageAttributionSupportedMetrics("obs_pipeline_bytes_usage") +MonthlyUsageAttributionSupportedMetrics.OBS_PIPELINE_BYTES_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("obs_pipeline_bytes_percentage") +MonthlyUsageAttributionSupportedMetrics.OBS_PIPELINES_VCPU_USAGE = MonthlyUsageAttributionSupportedMetrics("obs_pipelines_vcpu_usage") +MonthlyUsageAttributionSupportedMetrics.OBS_PIPELINES_VCPU_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("obs_pipelines_vcpu_percentage") +MonthlyUsageAttributionSupportedMetrics.ONLINE_ARCHIVE_USAGE = MonthlyUsageAttributionSupportedMetrics("online_archive_usage") +MonthlyUsageAttributionSupportedMetrics.ONLINE_ARCHIVE_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("online_archive_percentage") +MonthlyUsageAttributionSupportedMetrics.PRODUCT_ANALYTICS_SESSION_USAGE = MonthlyUsageAttributionSupportedMetrics("product_analytics_session_usage") +MonthlyUsageAttributionSupportedMetrics.PRODUCT_ANALYTICS_SESSION_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("product_analytics_session_percentage") +MonthlyUsageAttributionSupportedMetrics.PROFILED_CONTAINER_USAGE = MonthlyUsageAttributionSupportedMetrics("profiled_container_usage") +MonthlyUsageAttributionSupportedMetrics.PROFILED_CONTAINER_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("profiled_container_percentage") +MonthlyUsageAttributionSupportedMetrics.PROFILED_FARGATE_USAGE = MonthlyUsageAttributionSupportedMetrics("profiled_fargate_usage") +MonthlyUsageAttributionSupportedMetrics.PROFILED_FARGATE_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("profiled_fargate_percentage") +MonthlyUsageAttributionSupportedMetrics.PROFILED_HOST_USAGE = MonthlyUsageAttributionSupportedMetrics("profiled_host_usage") +MonthlyUsageAttributionSupportedMetrics.PROFILED_HOST_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("profiled_host_percentage") +MonthlyUsageAttributionSupportedMetrics.PUBLISHED_APP_USAGE = MonthlyUsageAttributionSupportedMetrics("published_app_usage") +MonthlyUsageAttributionSupportedMetrics.PUBLISHED_APP_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("published_app_percentage") +MonthlyUsageAttributionSupportedMetrics.SERVERLESS_APPS_USAGE = MonthlyUsageAttributionSupportedMetrics("serverless_apps_usage") +MonthlyUsageAttributionSupportedMetrics.SERVERLESS_APPS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("serverless_apps_percentage") +MonthlyUsageAttributionSupportedMetrics.SERVERLESS_APPS_APM_USAGE = MonthlyUsageAttributionSupportedMetrics("serverless_apps_apm_usage") +MonthlyUsageAttributionSupportedMetrics.SERVERLESS_APPS_APM_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("serverless_apps_apm_percentage") +MonthlyUsageAttributionSupportedMetrics.SNMP_USAGE = MonthlyUsageAttributionSupportedMetrics("snmp_usage") +MonthlyUsageAttributionSupportedMetrics.SNMP_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("snmp_percentage") +MonthlyUsageAttributionSupportedMetrics.UNIVERSAL_SERVICE_MONITORING_USAGE = MonthlyUsageAttributionSupportedMetrics("universal_service_monitoring_usage") +MonthlyUsageAttributionSupportedMetrics.UNIVERSAL_SERVICE_MONITORING_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("universal_service_monitoring_percentage") +MonthlyUsageAttributionSupportedMetrics.VULN_MANAGEMENT_HOSTS_USAGE = MonthlyUsageAttributionSupportedMetrics("vuln_management_hosts_usage") +MonthlyUsageAttributionSupportedMetrics.VULN_MANAGEMENT_HOSTS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("vuln_management_hosts_percentage") +MonthlyUsageAttributionSupportedMetrics.SDS_SCANNED_BYTES_USAGE = MonthlyUsageAttributionSupportedMetrics("sds_scanned_bytes_usage") +MonthlyUsageAttributionSupportedMetrics.SDS_SCANNED_BYTES_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("sds_scanned_bytes_percentage") +MonthlyUsageAttributionSupportedMetrics.CI_TEST_INDEXED_SPANS_USAGE = MonthlyUsageAttributionSupportedMetrics("ci_test_indexed_spans_usage") +MonthlyUsageAttributionSupportedMetrics.CI_TEST_INDEXED_SPANS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("ci_test_indexed_spans_percentage") +MonthlyUsageAttributionSupportedMetrics.INGESTED_LOGS_BYTES_USAGE = MonthlyUsageAttributionSupportedMetrics("ingested_logs_bytes_usage") +MonthlyUsageAttributionSupportedMetrics.INGESTED_LOGS_BYTES_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("ingested_logs_bytes_percentage") +MonthlyUsageAttributionSupportedMetrics.CI_PIPELINE_INDEXED_SPANS_USAGE = MonthlyUsageAttributionSupportedMetrics("ci_pipeline_indexed_spans_usage") +MonthlyUsageAttributionSupportedMetrics.CI_PIPELINE_INDEXED_SPANS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("ci_pipeline_indexed_spans_percentage") +MonthlyUsageAttributionSupportedMetrics.INDEXED_SPANS_USAGE = MonthlyUsageAttributionSupportedMetrics("indexed_spans_usage") +MonthlyUsageAttributionSupportedMetrics.INDEXED_SPANS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("indexed_spans_percentage") +MonthlyUsageAttributionSupportedMetrics.CUSTOM_EVENT_USAGE = MonthlyUsageAttributionSupportedMetrics("custom_event_usage") +MonthlyUsageAttributionSupportedMetrics.CUSTOM_EVENT_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("custom_event_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_CUSTOM_RETENTION_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_custom_retention_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_CUSTOM_RETENTION_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_custom_retention_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_360DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_360day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_360DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_360day_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_180DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_180day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_180DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_180day_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_90DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_90day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_90DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_90day_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_60DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_60day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_60DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_60day_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_45DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_45day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_45DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_45day_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_30DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_30day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_30DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_30day_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_15DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_15day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_15DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_15day_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_7DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_7day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_7DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_7day_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_3DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_3day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_3DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_3day_percentage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_1DAY_USAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_1day_usage") +MonthlyUsageAttributionSupportedMetrics.LOGS_INDEXED_1DAY_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("logs_indexed_1day_percentage") +MonthlyUsageAttributionSupportedMetrics.RUM_INGESTED_USAGE = MonthlyUsageAttributionSupportedMetrics("rum_ingested_usage") +MonthlyUsageAttributionSupportedMetrics.RUM_INGESTED_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("rum_ingested_percentage") +MonthlyUsageAttributionSupportedMetrics.RUM_INVESTIGATE_USAGE = MonthlyUsageAttributionSupportedMetrics("rum_investigate_usage") +MonthlyUsageAttributionSupportedMetrics.RUM_INVESTIGATE_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("rum_investigate_percentage") +MonthlyUsageAttributionSupportedMetrics.RUM_REPLAY_SESSIONS_USAGE = MonthlyUsageAttributionSupportedMetrics("rum_replay_sessions_usage") +MonthlyUsageAttributionSupportedMetrics.RUM_REPLAY_SESSIONS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("rum_replay_sessions_percentage") +MonthlyUsageAttributionSupportedMetrics.RUM_SESSION_REPLAY_ADD_ON_USAGE = MonthlyUsageAttributionSupportedMetrics("rum_session_replay_add_on_usage") +MonthlyUsageAttributionSupportedMetrics.RUM_SESSION_REPLAY_ADD_ON_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("rum_session_replay_add_on_percentage") +MonthlyUsageAttributionSupportedMetrics.RUM_BROWSER_MOBILE_SESSIONS_USAGE = MonthlyUsageAttributionSupportedMetrics("rum_browser_mobile_sessions_usage") +MonthlyUsageAttributionSupportedMetrics.RUM_BROWSER_MOBILE_SESSIONS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("rum_browser_mobile_sessions_percentage") +MonthlyUsageAttributionSupportedMetrics.INGESTED_SPANS_BYTES_USAGE = MonthlyUsageAttributionSupportedMetrics("ingested_spans_bytes_usage") +MonthlyUsageAttributionSupportedMetrics.INGESTED_SPANS_BYTES_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("ingested_spans_bytes_percentage") +MonthlyUsageAttributionSupportedMetrics.SIEM_12MO_RETENTION_USAGE = MonthlyUsageAttributionSupportedMetrics("siem_12mo_retention_usage") +MonthlyUsageAttributionSupportedMetrics.SIEM_12MO_RETENTION_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("siem_12mo_retention_percentage") +MonthlyUsageAttributionSupportedMetrics.SIEM_6MO_RETENTION_USAGE = MonthlyUsageAttributionSupportedMetrics("siem_6mo_retention_usage") +MonthlyUsageAttributionSupportedMetrics.SIEM_6MO_RETENTION_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("siem_6mo_retention_percentage") +MonthlyUsageAttributionSupportedMetrics.SIEM_ANALYZED_LOGS_ADD_ON_USAGE = MonthlyUsageAttributionSupportedMetrics("siem_analyzed_logs_add_on_usage") +MonthlyUsageAttributionSupportedMetrics.SIEM_ANALYZED_LOGS_ADD_ON_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("siem_analyzed_logs_add_on_percentage") +MonthlyUsageAttributionSupportedMetrics.SIEM_INGESTED_BYTES_USAGE = MonthlyUsageAttributionSupportedMetrics("siem_ingested_bytes_usage") +MonthlyUsageAttributionSupportedMetrics.SIEM_INGESTED_BYTES_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("siem_ingested_bytes_percentage") +MonthlyUsageAttributionSupportedMetrics.WORKFLOW_EXECUTIONS_USAGE = MonthlyUsageAttributionSupportedMetrics("workflow_executions_usage") +MonthlyUsageAttributionSupportedMetrics.WORKFLOW_EXECUTIONS_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("workflow_executions_percentage") +MonthlyUsageAttributionSupportedMetrics.SCA_FARGATE_USAGE = MonthlyUsageAttributionSupportedMetrics("sca_fargate_usage") +MonthlyUsageAttributionSupportedMetrics.SCA_FARGATE_PERCENTAGE = MonthlyUsageAttributionSupportedMetrics("sca_fargate_percentage") +MonthlyUsageAttributionSupportedMetrics.ALL = MonthlyUsageAttributionSupportedMetrics("*") diff --git a/datadog_api_client/v1/model/monthly_usage_attribution_values.py b/datadog_api_client/v1/model/monthly_usage_attribution_values.py new file mode 100644 index 0000000000..f177f6aa46 --- /dev/null +++ b/datadog_api_client/v1/model/monthly_usage_attribution_values.py @@ -0,0 +1,1229 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonthlyUsageAttributionValues(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_percentage": (float,), + "api_usage": (float,), + "apm_fargate_percentage": (float,), + "apm_fargate_usage": (float,), + "apm_host_percentage": (float,), + "apm_host_usage": (float,), + "apm_usm_percentage": (float,), + "apm_usm_usage": (float,), + "appsec_fargate_percentage": (float,), + "appsec_fargate_usage": (float,), + "appsec_percentage": (float,), + "appsec_usage": (float,), + "asm_serverless_traced_invocations_percentage": (float,), + "asm_serverless_traced_invocations_usage": (float,), + "bits_ai_investigations_percentage": (float,), + "bits_ai_investigations_usage": (float,), + "browser_percentage": (float,), + "browser_usage": (float,), + "ci_code_coverage_committers_percentage": (float,), + "ci_code_coverage_committers_usage": (float,), + "ci_pipeline_indexed_spans_percentage": (float,), + "ci_pipeline_indexed_spans_usage": (float,), + "ci_test_indexed_spans_percentage": (float,), + "ci_test_indexed_spans_usage": (float,), + "ci_visibility_itr_percentage": (float,), + "ci_visibility_itr_usage": (float,), + "cloud_siem_percentage": (float,), + "cloud_siem_usage": (float,), + "code_security_host_percentage": (float,), + "code_security_host_usage": (float,), + "container_excl_agent_percentage": (float,), + "container_excl_agent_usage": (float,), + "container_percentage": (float,), + "container_usage": (float,), + "cspm_containers_percentage": (float,), + "cspm_containers_usage": (float,), + "cspm_hosts_percentage": (float,), + "cspm_hosts_usage": (float,), + "custom_event_percentage": (float,), + "custom_event_usage": (float,), + "custom_ingested_timeseries_percentage": (float,), + "custom_ingested_timeseries_usage": (float,), + "custom_timeseries_percentage": (float,), + "custom_timeseries_usage": (float,), + "cws_containers_percentage": (float,), + "cws_containers_usage": (float,), + "cws_fargate_task_percentage": (float,), + "cws_fargate_task_usage": (float,), + "cws_hosts_percentage": (float,), + "cws_hosts_usage": (float,), + "data_jobs_monitoring_usage": (float,), + "data_stream_monitoring_usage": (float,), + "dbm_hosts_percentage": (float,), + "dbm_hosts_usage": (float,), + "dbm_queries_percentage": (float,), + "dbm_queries_usage": (float,), + "error_tracking_percentage": (float,), + "error_tracking_usage": (float,), + "estimated_indexed_spans_percentage": (float,), + "estimated_indexed_spans_usage": (float,), + "estimated_ingested_spans_percentage": (float,), + "estimated_ingested_spans_usage": (float,), + "fargate_percentage": (float,), + "fargate_usage": (float,), + "flex_logs_starter_percentage": (float,), + "flex_logs_starter_usage": (float,), + "flex_stored_logs_percentage": (float,), + "flex_stored_logs_usage": (float,), + "functions_percentage": (float,), + "functions_usage": (float,), + "incident_management_monthly_active_users_percentage": (float,), + "incident_management_monthly_active_users_usage": (float,), + "indexed_spans_percentage": (float,), + "indexed_spans_usage": (float,), + "infra_host_basic_percentage": (float,), + "infra_host_basic_usage": (float,), + "infra_host_percentage": (float,), + "infra_host_usage": (float,), + "ingested_logs_bytes_percentage": (float,), + "ingested_logs_bytes_usage": (float,), + "ingested_spans_bytes_percentage": (float,), + "ingested_spans_bytes_usage": (float,), + "invocations_percentage": (float,), + "invocations_usage": (float,), + "lambda_traced_invocations_percentage": (float,), + "lambda_traced_invocations_usage": (float,), + "llm_observability_percentage": (float,), + "llm_observability_usage": (float,), + "llm_spans_percentage": (float,), + "llm_spans_usage": (float,), + "logs_indexed_15day_percentage": (float,), + "logs_indexed_15day_usage": (float,), + "logs_indexed_180day_percentage": (float,), + "logs_indexed_180day_usage": (float,), + "logs_indexed_1day_percentage": (float,), + "logs_indexed_1day_usage": (float,), + "logs_indexed_30day_percentage": (float,), + "logs_indexed_30day_usage": (float,), + "logs_indexed_360day_percentage": (float,), + "logs_indexed_360day_usage": (float,), + "logs_indexed_3day_percentage": (float,), + "logs_indexed_3day_usage": (float,), + "logs_indexed_45day_percentage": (float,), + "logs_indexed_45day_usage": (float,), + "logs_indexed_60day_percentage": (float,), + "logs_indexed_60day_usage": (float,), + "logs_indexed_7day_percentage": (float,), + "logs_indexed_7day_usage": (float,), + "logs_indexed_90day_percentage": (float,), + "logs_indexed_90day_usage": (float,), + "logs_indexed_custom_retention_percentage": (float,), + "logs_indexed_custom_retention_usage": (float,), + "mobile_app_testing_percentage": (float,), + "mobile_app_testing_usage": (float,), + "ndm_netflow_percentage": (float,), + "ndm_netflow_usage": (float,), + "network_device_wireless_percentage": (float,), + "network_device_wireless_usage": (float,), + "npm_host_percentage": (float,), + "npm_host_usage": (float,), + "obs_pipeline_bytes_percentage": (float,), + "obs_pipeline_bytes_usage": (float,), + "obs_pipelines_vcpu_percentage": (float,), + "obs_pipelines_vcpu_usage": (float,), + "online_archive_percentage": (float,), + "online_archive_usage": (float,), + "product_analytics_session_percentage": (float,), + "product_analytics_session_usage": (float,), + "profiled_container_percentage": (float,), + "profiled_container_usage": (float,), + "profiled_fargate_percentage": (float,), + "profiled_fargate_usage": (float,), + "profiled_host_percentage": (float,), + "profiled_host_usage": (float,), + "published_app_percentage": (float,), + "published_app_usage": (float,), + "rum_browser_mobile_sessions_percentage": (float,), + "rum_browser_mobile_sessions_usage": (float,), + "rum_ingested_percentage": (float,), + "rum_ingested_usage": (float,), + "rum_investigate_percentage": (float,), + "rum_investigate_usage": (float,), + "rum_replay_sessions_percentage": (float,), + "rum_replay_sessions_usage": (float,), + "rum_session_replay_add_on_percentage": (float,), + "rum_session_replay_add_on_usage": (float,), + "sca_fargate_percentage": (float,), + "sca_fargate_usage": (float,), + "sds_scanned_bytes_percentage": (float,), + "sds_scanned_bytes_usage": (float,), + "serverless_apps_apm_percentage": (float,), + "serverless_apps_apm_usage": (float,), + "serverless_apps_percentage": (float,), + "serverless_apps_usage": (float,), + "siem_12mo_retention_percentage": (float,), + "siem_12mo_retention_usage": (float,), + "siem_6mo_retention_percentage": (float,), + "siem_6mo_retention_usage": (float,), + "siem_analyzed_logs_add_on_percentage": (float,), + "siem_analyzed_logs_add_on_usage": (float,), + "siem_ingested_bytes_percentage": (float,), + "siem_ingested_bytes_usage": (float,), + "snmp_percentage": (float,), + "snmp_usage": (float,), + "universal_service_monitoring_percentage": (float,), + "universal_service_monitoring_usage": (float,), + "vuln_management_hosts_percentage": (float,), + "vuln_management_hosts_usage": (float,), + "workflow_executions_percentage": (float,), + "workflow_executions_usage": (float,), + } + attribute_map = { + "api_percentage": "api_percentage", + "api_usage": "api_usage", + "apm_fargate_percentage": "apm_fargate_percentage", + "apm_fargate_usage": "apm_fargate_usage", + "apm_host_percentage": "apm_host_percentage", + "apm_host_usage": "apm_host_usage", + "apm_usm_percentage": "apm_usm_percentage", + "apm_usm_usage": "apm_usm_usage", + "appsec_fargate_percentage": "appsec_fargate_percentage", + "appsec_fargate_usage": "appsec_fargate_usage", + "appsec_percentage": "appsec_percentage", + "appsec_usage": "appsec_usage", + "asm_serverless_traced_invocations_percentage": "asm_serverless_traced_invocations_percentage", + "asm_serverless_traced_invocations_usage": "asm_serverless_traced_invocations_usage", + "bits_ai_investigations_percentage": "bits_ai_investigations_percentage", + "bits_ai_investigations_usage": "bits_ai_investigations_usage", + "browser_percentage": "browser_percentage", + "browser_usage": "browser_usage", + "ci_code_coverage_committers_percentage": "ci_code_coverage_committers_percentage", + "ci_code_coverage_committers_usage": "ci_code_coverage_committers_usage", + "ci_pipeline_indexed_spans_percentage": "ci_pipeline_indexed_spans_percentage", + "ci_pipeline_indexed_spans_usage": "ci_pipeline_indexed_spans_usage", + "ci_test_indexed_spans_percentage": "ci_test_indexed_spans_percentage", + "ci_test_indexed_spans_usage": "ci_test_indexed_spans_usage", + "ci_visibility_itr_percentage": "ci_visibility_itr_percentage", + "ci_visibility_itr_usage": "ci_visibility_itr_usage", + "cloud_siem_percentage": "cloud_siem_percentage", + "cloud_siem_usage": "cloud_siem_usage", + "code_security_host_percentage": "code_security_host_percentage", + "code_security_host_usage": "code_security_host_usage", + "container_excl_agent_percentage": "container_excl_agent_percentage", + "container_excl_agent_usage": "container_excl_agent_usage", + "container_percentage": "container_percentage", + "container_usage": "container_usage", + "cspm_containers_percentage": "cspm_containers_percentage", + "cspm_containers_usage": "cspm_containers_usage", + "cspm_hosts_percentage": "cspm_hosts_percentage", + "cspm_hosts_usage": "cspm_hosts_usage", + "custom_event_percentage": "custom_event_percentage", + "custom_event_usage": "custom_event_usage", + "custom_ingested_timeseries_percentage": "custom_ingested_timeseries_percentage", + "custom_ingested_timeseries_usage": "custom_ingested_timeseries_usage", + "custom_timeseries_percentage": "custom_timeseries_percentage", + "custom_timeseries_usage": "custom_timeseries_usage", + "cws_containers_percentage": "cws_containers_percentage", + "cws_containers_usage": "cws_containers_usage", + "cws_fargate_task_percentage": "cws_fargate_task_percentage", + "cws_fargate_task_usage": "cws_fargate_task_usage", + "cws_hosts_percentage": "cws_hosts_percentage", + "cws_hosts_usage": "cws_hosts_usage", + "data_jobs_monitoring_usage": "data_jobs_monitoring_usage", + "data_stream_monitoring_usage": "data_stream_monitoring_usage", + "dbm_hosts_percentage": "dbm_hosts_percentage", + "dbm_hosts_usage": "dbm_hosts_usage", + "dbm_queries_percentage": "dbm_queries_percentage", + "dbm_queries_usage": "dbm_queries_usage", + "error_tracking_percentage": "error_tracking_percentage", + "error_tracking_usage": "error_tracking_usage", + "estimated_indexed_spans_percentage": "estimated_indexed_spans_percentage", + "estimated_indexed_spans_usage": "estimated_indexed_spans_usage", + "estimated_ingested_spans_percentage": "estimated_ingested_spans_percentage", + "estimated_ingested_spans_usage": "estimated_ingested_spans_usage", + "fargate_percentage": "fargate_percentage", + "fargate_usage": "fargate_usage", + "flex_logs_starter_percentage": "flex_logs_starter_percentage", + "flex_logs_starter_usage": "flex_logs_starter_usage", + "flex_stored_logs_percentage": "flex_stored_logs_percentage", + "flex_stored_logs_usage": "flex_stored_logs_usage", + "functions_percentage": "functions_percentage", + "functions_usage": "functions_usage", + "incident_management_monthly_active_users_percentage": "incident_management_monthly_active_users_percentage", + "incident_management_monthly_active_users_usage": "incident_management_monthly_active_users_usage", + "indexed_spans_percentage": "indexed_spans_percentage", + "indexed_spans_usage": "indexed_spans_usage", + "infra_host_basic_percentage": "infra_host_basic_percentage", + "infra_host_basic_usage": "infra_host_basic_usage", + "infra_host_percentage": "infra_host_percentage", + "infra_host_usage": "infra_host_usage", + "ingested_logs_bytes_percentage": "ingested_logs_bytes_percentage", + "ingested_logs_bytes_usage": "ingested_logs_bytes_usage", + "ingested_spans_bytes_percentage": "ingested_spans_bytes_percentage", + "ingested_spans_bytes_usage": "ingested_spans_bytes_usage", + "invocations_percentage": "invocations_percentage", + "invocations_usage": "invocations_usage", + "lambda_traced_invocations_percentage": "lambda_traced_invocations_percentage", + "lambda_traced_invocations_usage": "lambda_traced_invocations_usage", + "llm_observability_percentage": "llm_observability_percentage", + "llm_observability_usage": "llm_observability_usage", + "llm_spans_percentage": "llm_spans_percentage", + "llm_spans_usage": "llm_spans_usage", + "logs_indexed_15day_percentage": "logs_indexed_15day_percentage", + "logs_indexed_15day_usage": "logs_indexed_15day_usage", + "logs_indexed_180day_percentage": "logs_indexed_180day_percentage", + "logs_indexed_180day_usage": "logs_indexed_180day_usage", + "logs_indexed_1day_percentage": "logs_indexed_1day_percentage", + "logs_indexed_1day_usage": "logs_indexed_1day_usage", + "logs_indexed_30day_percentage": "logs_indexed_30day_percentage", + "logs_indexed_30day_usage": "logs_indexed_30day_usage", + "logs_indexed_360day_percentage": "logs_indexed_360day_percentage", + "logs_indexed_360day_usage": "logs_indexed_360day_usage", + "logs_indexed_3day_percentage": "logs_indexed_3day_percentage", + "logs_indexed_3day_usage": "logs_indexed_3day_usage", + "logs_indexed_45day_percentage": "logs_indexed_45day_percentage", + "logs_indexed_45day_usage": "logs_indexed_45day_usage", + "logs_indexed_60day_percentage": "logs_indexed_60day_percentage", + "logs_indexed_60day_usage": "logs_indexed_60day_usage", + "logs_indexed_7day_percentage": "logs_indexed_7day_percentage", + "logs_indexed_7day_usage": "logs_indexed_7day_usage", + "logs_indexed_90day_percentage": "logs_indexed_90day_percentage", + "logs_indexed_90day_usage": "logs_indexed_90day_usage", + "logs_indexed_custom_retention_percentage": "logs_indexed_custom_retention_percentage", + "logs_indexed_custom_retention_usage": "logs_indexed_custom_retention_usage", + "mobile_app_testing_percentage": "mobile_app_testing_percentage", + "mobile_app_testing_usage": "mobile_app_testing_usage", + "ndm_netflow_percentage": "ndm_netflow_percentage", + "ndm_netflow_usage": "ndm_netflow_usage", + "network_device_wireless_percentage": "network_device_wireless_percentage", + "network_device_wireless_usage": "network_device_wireless_usage", + "npm_host_percentage": "npm_host_percentage", + "npm_host_usage": "npm_host_usage", + "obs_pipeline_bytes_percentage": "obs_pipeline_bytes_percentage", + "obs_pipeline_bytes_usage": "obs_pipeline_bytes_usage", + "obs_pipelines_vcpu_percentage": "obs_pipelines_vcpu_percentage", + "obs_pipelines_vcpu_usage": "obs_pipelines_vcpu_usage", + "online_archive_percentage": "online_archive_percentage", + "online_archive_usage": "online_archive_usage", + "product_analytics_session_percentage": "product_analytics_session_percentage", + "product_analytics_session_usage": "product_analytics_session_usage", + "profiled_container_percentage": "profiled_container_percentage", + "profiled_container_usage": "profiled_container_usage", + "profiled_fargate_percentage": "profiled_fargate_percentage", + "profiled_fargate_usage": "profiled_fargate_usage", + "profiled_host_percentage": "profiled_host_percentage", + "profiled_host_usage": "profiled_host_usage", + "published_app_percentage": "published_app_percentage", + "published_app_usage": "published_app_usage", + "rum_browser_mobile_sessions_percentage": "rum_browser_mobile_sessions_percentage", + "rum_browser_mobile_sessions_usage": "rum_browser_mobile_sessions_usage", + "rum_ingested_percentage": "rum_ingested_percentage", + "rum_ingested_usage": "rum_ingested_usage", + "rum_investigate_percentage": "rum_investigate_percentage", + "rum_investigate_usage": "rum_investigate_usage", + "rum_replay_sessions_percentage": "rum_replay_sessions_percentage", + "rum_replay_sessions_usage": "rum_replay_sessions_usage", + "rum_session_replay_add_on_percentage": "rum_session_replay_add_on_percentage", + "rum_session_replay_add_on_usage": "rum_session_replay_add_on_usage", + "sca_fargate_percentage": "sca_fargate_percentage", + "sca_fargate_usage": "sca_fargate_usage", + "sds_scanned_bytes_percentage": "sds_scanned_bytes_percentage", + "sds_scanned_bytes_usage": "sds_scanned_bytes_usage", + "serverless_apps_apm_percentage": "serverless_apps_apm_percentage", + "serverless_apps_apm_usage": "serverless_apps_apm_usage", + "serverless_apps_percentage": "serverless_apps_percentage", + "serverless_apps_usage": "serverless_apps_usage", + "siem_12mo_retention_percentage": "siem_12mo_retention_percentage", + "siem_12mo_retention_usage": "siem_12mo_retention_usage", + "siem_6mo_retention_percentage": "siem_6mo_retention_percentage", + "siem_6mo_retention_usage": "siem_6mo_retention_usage", + "siem_analyzed_logs_add_on_percentage": "siem_analyzed_logs_add_on_percentage", + "siem_analyzed_logs_add_on_usage": "siem_analyzed_logs_add_on_usage", + "siem_ingested_bytes_percentage": "siem_ingested_bytes_percentage", + "siem_ingested_bytes_usage": "siem_ingested_bytes_usage", + "snmp_percentage": "snmp_percentage", + "snmp_usage": "snmp_usage", + "universal_service_monitoring_percentage": "universal_service_monitoring_percentage", + "universal_service_monitoring_usage": "universal_service_monitoring_usage", + "vuln_management_hosts_percentage": "vuln_management_hosts_percentage", + "vuln_management_hosts_usage": "vuln_management_hosts_usage", + "workflow_executions_percentage": "workflow_executions_percentage", + "workflow_executions_usage": "workflow_executions_usage", + } + + def __init__(self_, api_percentage: Union[float, UnsetType]=unset, api_usage: Union[float, UnsetType]=unset, apm_fargate_percentage: Union[float, UnsetType]=unset, apm_fargate_usage: Union[float, UnsetType]=unset, apm_host_percentage: Union[float, UnsetType]=unset, apm_host_usage: Union[float, UnsetType]=unset, apm_usm_percentage: Union[float, UnsetType]=unset, apm_usm_usage: Union[float, UnsetType]=unset, appsec_fargate_percentage: Union[float, UnsetType]=unset, appsec_fargate_usage: Union[float, UnsetType]=unset, appsec_percentage: Union[float, UnsetType]=unset, appsec_usage: Union[float, UnsetType]=unset, asm_serverless_traced_invocations_percentage: Union[float, UnsetType]=unset, asm_serverless_traced_invocations_usage: Union[float, UnsetType]=unset, bits_ai_investigations_percentage: Union[float, UnsetType]=unset, bits_ai_investigations_usage: Union[float, UnsetType]=unset, browser_percentage: Union[float, UnsetType]=unset, browser_usage: Union[float, UnsetType]=unset, ci_code_coverage_committers_percentage: Union[float, UnsetType]=unset, ci_code_coverage_committers_usage: Union[float, UnsetType]=unset, ci_pipeline_indexed_spans_percentage: Union[float, UnsetType]=unset, ci_pipeline_indexed_spans_usage: Union[float, UnsetType]=unset, ci_test_indexed_spans_percentage: Union[float, UnsetType]=unset, ci_test_indexed_spans_usage: Union[float, UnsetType]=unset, ci_visibility_itr_percentage: Union[float, UnsetType]=unset, ci_visibility_itr_usage: Union[float, UnsetType]=unset, cloud_siem_percentage: Union[float, UnsetType]=unset, cloud_siem_usage: Union[float, UnsetType]=unset, code_security_host_percentage: Union[float, UnsetType]=unset, code_security_host_usage: Union[float, UnsetType]=unset, container_excl_agent_percentage: Union[float, UnsetType]=unset, container_excl_agent_usage: Union[float, UnsetType]=unset, container_percentage: Union[float, UnsetType]=unset, container_usage: Union[float, UnsetType]=unset, cspm_containers_percentage: Union[float, UnsetType]=unset, cspm_containers_usage: Union[float, UnsetType]=unset, cspm_hosts_percentage: Union[float, UnsetType]=unset, cspm_hosts_usage: Union[float, UnsetType]=unset, custom_event_percentage: Union[float, UnsetType]=unset, custom_event_usage: Union[float, UnsetType]=unset, custom_ingested_timeseries_percentage: Union[float, UnsetType]=unset, custom_ingested_timeseries_usage: Union[float, UnsetType]=unset, custom_timeseries_percentage: Union[float, UnsetType]=unset, custom_timeseries_usage: Union[float, UnsetType]=unset, cws_containers_percentage: Union[float, UnsetType]=unset, cws_containers_usage: Union[float, UnsetType]=unset, cws_fargate_task_percentage: Union[float, UnsetType]=unset, cws_fargate_task_usage: Union[float, UnsetType]=unset, cws_hosts_percentage: Union[float, UnsetType]=unset, cws_hosts_usage: Union[float, UnsetType]=unset, data_jobs_monitoring_usage: Union[float, UnsetType]=unset, data_stream_monitoring_usage: Union[float, UnsetType]=unset, dbm_hosts_percentage: Union[float, UnsetType]=unset, dbm_hosts_usage: Union[float, UnsetType]=unset, dbm_queries_percentage: Union[float, UnsetType]=unset, dbm_queries_usage: Union[float, UnsetType]=unset, error_tracking_percentage: Union[float, UnsetType]=unset, error_tracking_usage: Union[float, UnsetType]=unset, estimated_indexed_spans_percentage: Union[float, UnsetType]=unset, estimated_indexed_spans_usage: Union[float, UnsetType]=unset, estimated_ingested_spans_percentage: Union[float, UnsetType]=unset, estimated_ingested_spans_usage: Union[float, UnsetType]=unset, fargate_percentage: Union[float, UnsetType]=unset, fargate_usage: Union[float, UnsetType]=unset, flex_logs_starter_percentage: Union[float, UnsetType]=unset, flex_logs_starter_usage: Union[float, UnsetType]=unset, flex_stored_logs_percentage: Union[float, UnsetType]=unset, flex_stored_logs_usage: Union[float, UnsetType]=unset, functions_percentage: Union[float, UnsetType]=unset, functions_usage: Union[float, UnsetType]=unset, incident_management_monthly_active_users_percentage: Union[float, UnsetType]=unset, incident_management_monthly_active_users_usage: Union[float, UnsetType]=unset, indexed_spans_percentage: Union[float, UnsetType]=unset, indexed_spans_usage: Union[float, UnsetType]=unset, infra_host_basic_percentage: Union[float, UnsetType]=unset, infra_host_basic_usage: Union[float, UnsetType]=unset, infra_host_percentage: Union[float, UnsetType]=unset, infra_host_usage: Union[float, UnsetType]=unset, ingested_logs_bytes_percentage: Union[float, UnsetType]=unset, ingested_logs_bytes_usage: Union[float, UnsetType]=unset, ingested_spans_bytes_percentage: Union[float, UnsetType]=unset, ingested_spans_bytes_usage: Union[float, UnsetType]=unset, invocations_percentage: Union[float, UnsetType]=unset, invocations_usage: Union[float, UnsetType]=unset, lambda_traced_invocations_percentage: Union[float, UnsetType]=unset, lambda_traced_invocations_usage: Union[float, UnsetType]=unset, llm_observability_percentage: Union[float, UnsetType]=unset, llm_observability_usage: Union[float, UnsetType]=unset, llm_spans_percentage: Union[float, UnsetType]=unset, llm_spans_usage: Union[float, UnsetType]=unset, logs_indexed_15day_percentage: Union[float, UnsetType]=unset, logs_indexed_15day_usage: Union[float, UnsetType]=unset, logs_indexed_180day_percentage: Union[float, UnsetType]=unset, logs_indexed_180day_usage: Union[float, UnsetType]=unset, logs_indexed_1day_percentage: Union[float, UnsetType]=unset, logs_indexed_1day_usage: Union[float, UnsetType]=unset, logs_indexed_30day_percentage: Union[float, UnsetType]=unset, logs_indexed_30day_usage: Union[float, UnsetType]=unset, logs_indexed_360day_percentage: Union[float, UnsetType]=unset, logs_indexed_360day_usage: Union[float, UnsetType]=unset, logs_indexed_3day_percentage: Union[float, UnsetType]=unset, logs_indexed_3day_usage: Union[float, UnsetType]=unset, logs_indexed_45day_percentage: Union[float, UnsetType]=unset, logs_indexed_45day_usage: Union[float, UnsetType]=unset, logs_indexed_60day_percentage: Union[float, UnsetType]=unset, logs_indexed_60day_usage: Union[float, UnsetType]=unset, logs_indexed_7day_percentage: Union[float, UnsetType]=unset, logs_indexed_7day_usage: Union[float, UnsetType]=unset, logs_indexed_90day_percentage: Union[float, UnsetType]=unset, logs_indexed_90day_usage: Union[float, UnsetType]=unset, logs_indexed_custom_retention_percentage: Union[float, UnsetType]=unset, logs_indexed_custom_retention_usage: Union[float, UnsetType]=unset, mobile_app_testing_percentage: Union[float, UnsetType]=unset, mobile_app_testing_usage: Union[float, UnsetType]=unset, ndm_netflow_percentage: Union[float, UnsetType]=unset, ndm_netflow_usage: Union[float, UnsetType]=unset, network_device_wireless_percentage: Union[float, UnsetType]=unset, network_device_wireless_usage: Union[float, UnsetType]=unset, npm_host_percentage: Union[float, UnsetType]=unset, npm_host_usage: Union[float, UnsetType]=unset, obs_pipeline_bytes_percentage: Union[float, UnsetType]=unset, obs_pipeline_bytes_usage: Union[float, UnsetType]=unset, obs_pipelines_vcpu_percentage: Union[float, UnsetType]=unset, obs_pipelines_vcpu_usage: Union[float, UnsetType]=unset, online_archive_percentage: Union[float, UnsetType]=unset, online_archive_usage: Union[float, UnsetType]=unset, product_analytics_session_percentage: Union[float, UnsetType]=unset, product_analytics_session_usage: Union[float, UnsetType]=unset, profiled_container_percentage: Union[float, UnsetType]=unset, profiled_container_usage: Union[float, UnsetType]=unset, profiled_fargate_percentage: Union[float, UnsetType]=unset, profiled_fargate_usage: Union[float, UnsetType]=unset, profiled_host_percentage: Union[float, UnsetType]=unset, profiled_host_usage: Union[float, UnsetType]=unset, published_app_percentage: Union[float, UnsetType]=unset, published_app_usage: Union[float, UnsetType]=unset, rum_browser_mobile_sessions_percentage: Union[float, UnsetType]=unset, rum_browser_mobile_sessions_usage: Union[float, UnsetType]=unset, rum_ingested_percentage: Union[float, UnsetType]=unset, rum_ingested_usage: Union[float, UnsetType]=unset, rum_investigate_percentage: Union[float, UnsetType]=unset, rum_investigate_usage: Union[float, UnsetType]=unset, rum_replay_sessions_percentage: Union[float, UnsetType]=unset, rum_replay_sessions_usage: Union[float, UnsetType]=unset, rum_session_replay_add_on_percentage: Union[float, UnsetType]=unset, rum_session_replay_add_on_usage: Union[float, UnsetType]=unset, sca_fargate_percentage: Union[float, UnsetType]=unset, sca_fargate_usage: Union[float, UnsetType]=unset, sds_scanned_bytes_percentage: Union[float, UnsetType]=unset, sds_scanned_bytes_usage: Union[float, UnsetType]=unset, serverless_apps_apm_percentage: Union[float, UnsetType]=unset, serverless_apps_apm_usage: Union[float, UnsetType]=unset, serverless_apps_percentage: Union[float, UnsetType]=unset, serverless_apps_usage: Union[float, UnsetType]=unset, siem_12mo_retention_percentage: Union[float, UnsetType]=unset, siem_12mo_retention_usage: Union[float, UnsetType]=unset, siem_6mo_retention_percentage: Union[float, UnsetType]=unset, siem_6mo_retention_usage: Union[float, UnsetType]=unset, siem_analyzed_logs_add_on_percentage: Union[float, UnsetType]=unset, siem_analyzed_logs_add_on_usage: Union[float, UnsetType]=unset, siem_ingested_bytes_percentage: Union[float, UnsetType]=unset, siem_ingested_bytes_usage: Union[float, UnsetType]=unset, snmp_percentage: Union[float, UnsetType]=unset, snmp_usage: Union[float, UnsetType]=unset, universal_service_monitoring_percentage: Union[float, UnsetType]=unset, universal_service_monitoring_usage: Union[float, UnsetType]=unset, vuln_management_hosts_percentage: Union[float, UnsetType]=unset, vuln_management_hosts_usage: Union[float, UnsetType]=unset, workflow_executions_percentage: Union[float, UnsetType]=unset, workflow_executions_usage: Union[float, UnsetType]=unset, **kwargs): + """ + Fields in Usage Summary by tag(s). + + :param api_percentage: The percentage of synthetic API test usage by tag(s). + :type api_percentage: float, optional + + :param api_usage: The synthetic API test usage by tag(s). + :type api_usage: float, optional + + :param apm_fargate_percentage: The percentage of APM ECS Fargate task usage by tag(s). + :type apm_fargate_percentage: float, optional + + :param apm_fargate_usage: The APM ECS Fargate task usage by tag(s). + :type apm_fargate_usage: float, optional + + :param apm_host_percentage: The percentage of APM host usage by tag(s). + :type apm_host_percentage: float, optional + + :param apm_host_usage: The APM host usage by tag(s). + :type apm_host_usage: float, optional + + :param apm_usm_percentage: The percentage of APM and Universal Service Monitoring host usage by tag(s). + :type apm_usm_percentage: float, optional + + :param apm_usm_usage: The APM and Universal Service Monitoring host usage by tag(s). + :type apm_usm_usage: float, optional + + :param appsec_fargate_percentage: The percentage of Application Security Monitoring ECS Fargate task usage by tag(s). + :type appsec_fargate_percentage: float, optional + + :param appsec_fargate_usage: The Application Security Monitoring ECS Fargate task usage by tag(s). + :type appsec_fargate_usage: float, optional + + :param appsec_percentage: The percentage of Application Security Monitoring host usage by tag(s). + :type appsec_percentage: float, optional + + :param appsec_usage: The Application Security Monitoring host usage by tag(s). + :type appsec_usage: float, optional + + :param asm_serverless_traced_invocations_percentage: The percentage of Application Security Monitoring Serverless traced invocations usage by tag(s). + :type asm_serverless_traced_invocations_percentage: float, optional + + :param asm_serverless_traced_invocations_usage: The Application Security Monitoring Serverless traced invocations usage by tag(s). + :type asm_serverless_traced_invocations_usage: float, optional + + :param bits_ai_investigations_percentage: The percentage of Bits AI ``SRE`` investigation usage by tag(s). + :type bits_ai_investigations_percentage: float, optional + + :param bits_ai_investigations_usage: The Bits AI ``SRE`` investigation usage by tag(s). + :type bits_ai_investigations_usage: float, optional + + :param browser_percentage: The percentage of synthetic browser test usage by tag(s). + :type browser_percentage: float, optional + + :param browser_usage: The synthetic browser test usage by tag(s). + :type browser_usage: float, optional + + :param ci_code_coverage_committers_percentage: The percentage of Code Coverage committers usage by tag(s). + :type ci_code_coverage_committers_percentage: float, optional + + :param ci_code_coverage_committers_usage: The total Code Coverage committers usage by tag(s). + :type ci_code_coverage_committers_usage: float, optional + + :param ci_pipeline_indexed_spans_percentage: The percentage of CI Pipeline Indexed Spans usage by tag(s). + :type ci_pipeline_indexed_spans_percentage: float, optional + + :param ci_pipeline_indexed_spans_usage: The total CI Pipeline Indexed Spans usage by tag(s). + :type ci_pipeline_indexed_spans_usage: float, optional + + :param ci_test_indexed_spans_percentage: The percentage of CI Test Indexed Spans usage by tag(s). + :type ci_test_indexed_spans_percentage: float, optional + + :param ci_test_indexed_spans_usage: The total CI Test Indexed Spans usage by tag(s). + :type ci_test_indexed_spans_usage: float, optional + + :param ci_visibility_itr_percentage: The percentage of Git committers for Intelligent Test Runner usage by tag(s). + :type ci_visibility_itr_percentage: float, optional + + :param ci_visibility_itr_usage: The Git committers for Intelligent Test Runner usage by tag(s). + :type ci_visibility_itr_usage: float, optional + + :param cloud_siem_percentage: The percentage of Cloud Security Information and Event Management usage by tag(s). + :type cloud_siem_percentage: float, optional + + :param cloud_siem_usage: The Cloud Security Information and Event Management usage by tag(s). + :type cloud_siem_usage: float, optional + + :param code_security_host_percentage: The percentage of Code Security host usage by tags. + :type code_security_host_percentage: float, optional + + :param code_security_host_usage: The Code Security host usage by tags. + :type code_security_host_usage: float, optional + + :param container_excl_agent_percentage: The percentage of container usage without the Datadog Agent by tag(s). + :type container_excl_agent_percentage: float, optional + + :param container_excl_agent_usage: The container usage without the Datadog Agent by tag(s). + :type container_excl_agent_usage: float, optional + + :param container_percentage: The percentage of container usage by tag(s). + :type container_percentage: float, optional + + :param container_usage: The container usage by tag(s). + :type container_usage: float, optional + + :param cspm_containers_percentage: The percentage of Cloud Security Management Pro container usage by tag(s). + :type cspm_containers_percentage: float, optional + + :param cspm_containers_usage: The Cloud Security Management Pro container usage by tag(s). + :type cspm_containers_usage: float, optional + + :param cspm_hosts_percentage: The percentage of Cloud Security Management Pro host usage by tag(s). + :type cspm_hosts_percentage: float, optional + + :param cspm_hosts_usage: The Cloud Security Management Pro host usage by tag(s). + :type cspm_hosts_usage: float, optional + + :param custom_event_percentage: The percentage of Custom Events usage by tag(s). + :type custom_event_percentage: float, optional + + :param custom_event_usage: The total Custom Events usage by tag(s). + :type custom_event_usage: float, optional + + :param custom_ingested_timeseries_percentage: The percentage of ingested custom metrics usage by tag(s). + :type custom_ingested_timeseries_percentage: float, optional + + :param custom_ingested_timeseries_usage: The ingested custom metrics usage by tag(s). + :type custom_ingested_timeseries_usage: float, optional + + :param custom_timeseries_percentage: The percentage of indexed custom metrics usage by tag(s). + :type custom_timeseries_percentage: float, optional + + :param custom_timeseries_usage: The indexed custom metrics usage by tag(s). + :type custom_timeseries_usage: float, optional + + :param cws_containers_percentage: The percentage of Cloud Workload Security container usage by tag(s). + :type cws_containers_percentage: float, optional + + :param cws_containers_usage: The Cloud Workload Security container usage by tag(s). + :type cws_containers_usage: float, optional + + :param cws_fargate_task_percentage: The percentage of Cloud Workload Security Fargate task usage by tag(s). + :type cws_fargate_task_percentage: float, optional + + :param cws_fargate_task_usage: The Cloud Workload Security Fargate task usage by tag(s). + :type cws_fargate_task_usage: float, optional + + :param cws_hosts_percentage: The percentage of Cloud Workload Security host usage by tag(s). + :type cws_hosts_percentage: float, optional + + :param cws_hosts_usage: The Cloud Workload Security host usage by tag(s). + :type cws_hosts_usage: float, optional + + :param data_jobs_monitoring_usage: The Data Jobs Monitoring usage by tag(s). + :type data_jobs_monitoring_usage: float, optional + + :param data_stream_monitoring_usage: The Data Stream Monitoring usage by tag(s). + :type data_stream_monitoring_usage: float, optional + + :param dbm_hosts_percentage: The percentage of Database Monitoring host usage by tag(s). + :type dbm_hosts_percentage: float, optional + + :param dbm_hosts_usage: The Database Monitoring host usage by tag(s). + :type dbm_hosts_usage: float, optional + + :param dbm_queries_percentage: The percentage of Database Monitoring queries usage by tag(s). + :type dbm_queries_percentage: float, optional + + :param dbm_queries_usage: The Database Monitoring queries usage by tag(s). + :type dbm_queries_usage: float, optional + + :param error_tracking_percentage: The percentage of error tracking events usage by tag(s). + :type error_tracking_percentage: float, optional + + :param error_tracking_usage: The error tracking events usage by tag(s). + :type error_tracking_usage: float, optional + + :param estimated_indexed_spans_percentage: The percentage of estimated indexed spans usage by tag(s). + :type estimated_indexed_spans_percentage: float, optional + + :param estimated_indexed_spans_usage: The estimated indexed spans usage by tag(s). + :type estimated_indexed_spans_usage: float, optional + + :param estimated_ingested_spans_percentage: The percentage of estimated ingested spans usage by tag(s). + :type estimated_ingested_spans_percentage: float, optional + + :param estimated_ingested_spans_usage: The estimated ingested spans usage by tag(s). + :type estimated_ingested_spans_usage: float, optional + + :param fargate_percentage: The percentage of Fargate usage by tags. + :type fargate_percentage: float, optional + + :param fargate_usage: The Fargate usage by tags. + :type fargate_usage: float, optional + + :param flex_logs_starter_percentage: The percentage of Flex Logs Starter usage by tags. + :type flex_logs_starter_percentage: float, optional + + :param flex_logs_starter_usage: The Flex Logs Starter usage by tags. + :type flex_logs_starter_usage: float, optional + + :param flex_stored_logs_percentage: The percentage of Flex Stored Logs usage by tags. + :type flex_stored_logs_percentage: float, optional + + :param flex_stored_logs_usage: The Flex Stored Logs usage by tags. + :type flex_stored_logs_usage: float, optional + + :param functions_percentage: The percentage of Lambda function usage by tag(s). + :type functions_percentage: float, optional + + :param functions_usage: The Lambda function usage by tag(s). + :type functions_usage: float, optional + + :param incident_management_monthly_active_users_percentage: The percentage of Incident Management monthly active users usage by tag(s). + :type incident_management_monthly_active_users_percentage: float, optional + + :param incident_management_monthly_active_users_usage: The Incident Management monthly active users usage by tag(s). + :type incident_management_monthly_active_users_usage: float, optional + + :param indexed_spans_percentage: The percentage of APM Indexed Spans usage by tag(s). + :type indexed_spans_percentage: float, optional + + :param indexed_spans_usage: The total APM Indexed Spans usage by tag(s). + :type indexed_spans_usage: float, optional + + :param infra_host_basic_percentage: The percentage of infrastructure host Basic tier usage by tag(s). + :type infra_host_basic_percentage: float, optional + + :param infra_host_basic_usage: The infrastructure host Basic tier usage by tag(s). + :type infra_host_basic_usage: float, optional + + :param infra_host_percentage: The percentage of infrastructure host usage by tag(s). + :type infra_host_percentage: float, optional + + :param infra_host_usage: The infrastructure host usage by tag(s). + :type infra_host_usage: float, optional + + :param ingested_logs_bytes_percentage: The percentage of Ingested Logs usage by tag(s). + :type ingested_logs_bytes_percentage: float, optional + + :param ingested_logs_bytes_usage: The total Ingested Logs usage by tag(s). + :type ingested_logs_bytes_usage: float, optional + + :param ingested_spans_bytes_percentage: The percentage of APM Ingested Spans usage by tag(s). + :type ingested_spans_bytes_percentage: float, optional + + :param ingested_spans_bytes_usage: The total APM Ingested Spans usage by tag(s). + :type ingested_spans_bytes_usage: float, optional + + :param invocations_percentage: The percentage of Lambda invocation usage by tag(s). + :type invocations_percentage: float, optional + + :param invocations_usage: The Lambda invocation usage by tag(s). + :type invocations_usage: float, optional + + :param lambda_traced_invocations_percentage: The percentage of Serverless APM usage by tag(s). + :type lambda_traced_invocations_percentage: float, optional + + :param lambda_traced_invocations_usage: The Serverless APM usage by tag(s). + :type lambda_traced_invocations_usage: float, optional + + :param llm_observability_percentage: The percentage of LLM Observability usage by tag(s). + :type llm_observability_percentage: float, optional + + :param llm_observability_usage: The LLM Observability usage by tag(s). + :type llm_observability_usage: float, optional + + :param llm_spans_percentage: The percentage of LLM Spans usage by tag(s). + :type llm_spans_percentage: float, optional + + :param llm_spans_usage: The LLM Spans usage by tag(s). + :type llm_spans_usage: float, optional + + :param logs_indexed_15day_percentage: The percentage of Indexed Logs (15-day Retention) usage by tag(s). + :type logs_indexed_15day_percentage: float, optional + + :param logs_indexed_15day_usage: The total Indexed Logs (15-day Retention) usage by tag(s). + :type logs_indexed_15day_usage: float, optional + + :param logs_indexed_180day_percentage: The percentage of Indexed Logs (180-day Retention) usage by tag(s). + :type logs_indexed_180day_percentage: float, optional + + :param logs_indexed_180day_usage: The total Indexed Logs (180-day Retention) usage by tag(s). + :type logs_indexed_180day_usage: float, optional + + :param logs_indexed_1day_percentage: The percentage of Indexed Logs (1-day Retention) usage by tag(s). + :type logs_indexed_1day_percentage: float, optional + + :param logs_indexed_1day_usage: The total Indexed Logs (1-day Retention) usage by tag(s). + :type logs_indexed_1day_usage: float, optional + + :param logs_indexed_30day_percentage: The percentage of Indexed Logs (30-day Retention) usage by tag(s). + :type logs_indexed_30day_percentage: float, optional + + :param logs_indexed_30day_usage: The total Indexed Logs (30-day Retention) usage by tag(s). + :type logs_indexed_30day_usage: float, optional + + :param logs_indexed_360day_percentage: The percentage of Indexed Logs (360-day Retention) usage by tag(s). + :type logs_indexed_360day_percentage: float, optional + + :param logs_indexed_360day_usage: The total Indexed Logs (360-day Retention) usage by tag(s). + :type logs_indexed_360day_usage: float, optional + + :param logs_indexed_3day_percentage: The percentage of Indexed Logs (3-day Retention) usage by tag(s). + :type logs_indexed_3day_percentage: float, optional + + :param logs_indexed_3day_usage: The total Indexed Logs (3-day Retention) usage by tag(s). + :type logs_indexed_3day_usage: float, optional + + :param logs_indexed_45day_percentage: The percentage of Indexed Logs (45-day Retention) usage by tag(s). + :type logs_indexed_45day_percentage: float, optional + + :param logs_indexed_45day_usage: The total Indexed Logs (45-day Retention) usage by tag(s). + :type logs_indexed_45day_usage: float, optional + + :param logs_indexed_60day_percentage: The percentage of Indexed Logs (60-day Retention) usage by tag(s). + :type logs_indexed_60day_percentage: float, optional + + :param logs_indexed_60day_usage: The total Indexed Logs (60-day Retention) usage by tag(s). + :type logs_indexed_60day_usage: float, optional + + :param logs_indexed_7day_percentage: The percentage of Indexed Logs (7-day Retention) usage by tag(s). + :type logs_indexed_7day_percentage: float, optional + + :param logs_indexed_7day_usage: The total Indexed Logs (7-day Retention) usage by tag(s). + :type logs_indexed_7day_usage: float, optional + + :param logs_indexed_90day_percentage: The percentage of Indexed Logs (90-day Retention) usage by tag(s). + :type logs_indexed_90day_percentage: float, optional + + :param logs_indexed_90day_usage: The total Indexed Logs (90-day Retention) usage by tag(s). + :type logs_indexed_90day_usage: float, optional + + :param logs_indexed_custom_retention_percentage: The percentage of Indexed Logs (Custom Retention) usage by tag(s). + :type logs_indexed_custom_retention_percentage: float, optional + + :param logs_indexed_custom_retention_usage: The total Indexed Logs (Custom Retention) usage by tag(s). + :type logs_indexed_custom_retention_usage: float, optional + + :param mobile_app_testing_percentage: The percentage of Synthetic mobile application test usage by tag(s). + :type mobile_app_testing_percentage: float, optional + + :param mobile_app_testing_usage: The Synthetic mobile application test usage by tag(s). + :type mobile_app_testing_usage: float, optional + + :param ndm_netflow_percentage: The percentage of Network Device Monitoring NetFlow usage by tag(s). + :type ndm_netflow_percentage: float, optional + + :param ndm_netflow_usage: The Network Device Monitoring NetFlow usage by tag(s). + :type ndm_netflow_usage: float, optional + + :param network_device_wireless_percentage: The percentage of network device wireless usage by tag(s). + :type network_device_wireless_percentage: float, optional + + :param network_device_wireless_usage: The network device wireless usage by tag(s). + :type network_device_wireless_usage: float, optional + + :param npm_host_percentage: The percentage of network host usage by tag(s). + :type npm_host_percentage: float, optional + + :param npm_host_usage: The network host usage by tag(s). + :type npm_host_usage: float, optional + + :param obs_pipeline_bytes_percentage: The percentage of observability pipeline bytes usage by tag(s). + :type obs_pipeline_bytes_percentage: float, optional + + :param obs_pipeline_bytes_usage: The observability pipeline bytes usage by tag(s). + :type obs_pipeline_bytes_usage: float, optional + + :param obs_pipelines_vcpu_percentage: The percentage of observability pipeline per core usage by tag(s). + :type obs_pipelines_vcpu_percentage: float, optional + + :param obs_pipelines_vcpu_usage: The observability pipeline per core usage by tag(s). + :type obs_pipelines_vcpu_usage: float, optional + + :param online_archive_percentage: The percentage of online archive usage by tag(s). + :type online_archive_percentage: float, optional + + :param online_archive_usage: The online archive usage by tag(s). + :type online_archive_usage: float, optional + + :param product_analytics_session_percentage: The percentage of Product Analytics session usage by tag(s). + :type product_analytics_session_percentage: float, optional + + :param product_analytics_session_usage: The Product Analytics session usage by tag(s). + :type product_analytics_session_usage: float, optional + + :param profiled_container_percentage: The percentage of profiled container usage by tag(s). + :type profiled_container_percentage: float, optional + + :param profiled_container_usage: The profiled container usage by tag(s). + :type profiled_container_usage: float, optional + + :param profiled_fargate_percentage: The percentage of profiled Fargate task usage by tag(s). + :type profiled_fargate_percentage: float, optional + + :param profiled_fargate_usage: The profiled Fargate task usage by tag(s). + :type profiled_fargate_usage: float, optional + + :param profiled_host_percentage: The percentage of profiled hosts usage by tag(s). + :type profiled_host_percentage: float, optional + + :param profiled_host_usage: The profiled hosts usage by tag(s). + :type profiled_host_usage: float, optional + + :param published_app_percentage: The percentage of published application usage by tag(s). + :type published_app_percentage: float, optional + + :param published_app_usage: The published application usage by tag(s). + :type published_app_usage: float, optional + + :param rum_browser_mobile_sessions_percentage: The percentage of RUM Browser and Mobile usage by tag(s). + :type rum_browser_mobile_sessions_percentage: float, optional + + :param rum_browser_mobile_sessions_usage: The total RUM Browser and Mobile usage by tag(s). + :type rum_browser_mobile_sessions_usage: float, optional + + :param rum_ingested_percentage: The percentage of RUM Ingested usage by tag(s). + :type rum_ingested_percentage: float, optional + + :param rum_ingested_usage: The total RUM Ingested usage by tag(s). + :type rum_ingested_usage: float, optional + + :param rum_investigate_percentage: The percentage of RUM Investigate usage by tag(s). + :type rum_investigate_percentage: float, optional + + :param rum_investigate_usage: The total RUM Investigate usage by tag(s). + :type rum_investigate_usage: float, optional + + :param rum_replay_sessions_percentage: The percentage of RUM Session Replay usage by tag(s). + :type rum_replay_sessions_percentage: float, optional + + :param rum_replay_sessions_usage: The total RUM Session Replay usage by tag(s). + :type rum_replay_sessions_usage: float, optional + + :param rum_session_replay_add_on_percentage: The percentage of RUM Session Replay Add-On usage by tag(s). + :type rum_session_replay_add_on_percentage: float, optional + + :param rum_session_replay_add_on_usage: The total RUM Session Replay Add-On usage by tag(s). + :type rum_session_replay_add_on_usage: float, optional + + :param sca_fargate_percentage: The percentage of Software Composition Analysis Fargate task usage by tag(s). + :type sca_fargate_percentage: float, optional + + :param sca_fargate_usage: The total Software Composition Analysis Fargate task usage by tag(s). + :type sca_fargate_usage: float, optional + + :param sds_scanned_bytes_percentage: The percentage of Sensitive Data Scanner usage by tag(s). + :type sds_scanned_bytes_percentage: float, optional + + :param sds_scanned_bytes_usage: The total Sensitive Data Scanner usage by tag(s). + :type sds_scanned_bytes_usage: float, optional + + :param serverless_apps_apm_percentage: The percentage of Serverless Apps APM usage by tag(s). + :type serverless_apps_apm_percentage: float, optional + + :param serverless_apps_apm_usage: The total Serverless Apps APM usage by tag(s). + :type serverless_apps_apm_usage: float, optional + + :param serverless_apps_percentage: The percentage of Serverless Apps usage by tag(s). + :type serverless_apps_percentage: float, optional + + :param serverless_apps_usage: The total Serverless Apps usage by tag(s). + :type serverless_apps_usage: float, optional + + :param siem_12mo_retention_percentage: The percentage of Cloud SIEM Indexed Logs (12-month retention) usage by tag(s). + :type siem_12mo_retention_percentage: float, optional + + :param siem_12mo_retention_usage: The Cloud SIEM Indexed Logs (12-month retention) usage by tag(s). + :type siem_12mo_retention_usage: float, optional + + :param siem_6mo_retention_percentage: The percentage of Cloud SIEM Indexed Logs (6-month retention) usage by tag(s). + :type siem_6mo_retention_percentage: float, optional + + :param siem_6mo_retention_usage: The Cloud SIEM Indexed Logs (6-month retention) usage by tag(s). + :type siem_6mo_retention_usage: float, optional + + :param siem_analyzed_logs_add_on_percentage: The percentage of log events analyzed by Cloud SIEM usage by tag(s). + :type siem_analyzed_logs_add_on_percentage: float, optional + + :param siem_analyzed_logs_add_on_usage: The log events analyzed by Cloud SIEM usage by tag(s). + :type siem_analyzed_logs_add_on_usage: float, optional + + :param siem_ingested_bytes_percentage: The percentage of SIEM usage by tag(s). + :type siem_ingested_bytes_percentage: float, optional + + :param siem_ingested_bytes_usage: The total SIEM usage by tag(s). + :type siem_ingested_bytes_usage: float, optional + + :param snmp_percentage: The percentage of network device usage by tag(s). + :type snmp_percentage: float, optional + + :param snmp_usage: The network device usage by tag(s). + :type snmp_usage: float, optional + + :param universal_service_monitoring_percentage: The percentage of universal service monitoring usage by tag(s). + :type universal_service_monitoring_percentage: float, optional + + :param universal_service_monitoring_usage: The universal service monitoring usage by tag(s). + :type universal_service_monitoring_usage: float, optional + + :param vuln_management_hosts_percentage: The percentage of Application Vulnerability Management usage by tag(s). + :type vuln_management_hosts_percentage: float, optional + + :param vuln_management_hosts_usage: The Application Vulnerability Management usage by tag(s). + :type vuln_management_hosts_usage: float, optional + + :param workflow_executions_percentage: The percentage of workflow executions usage by tag(s). + :type workflow_executions_percentage: float, optional + + :param workflow_executions_usage: The total workflow executions usage by tag(s). + :type workflow_executions_usage: float, optional + """ + if api_percentage is not unset: + kwargs["api_percentage"] = api_percentage + if api_usage is not unset: + kwargs["api_usage"] = api_usage + if apm_fargate_percentage is not unset: + kwargs["apm_fargate_percentage"] = apm_fargate_percentage + if apm_fargate_usage is not unset: + kwargs["apm_fargate_usage"] = apm_fargate_usage + if apm_host_percentage is not unset: + kwargs["apm_host_percentage"] = apm_host_percentage + if apm_host_usage is not unset: + kwargs["apm_host_usage"] = apm_host_usage + if apm_usm_percentage is not unset: + kwargs["apm_usm_percentage"] = apm_usm_percentage + if apm_usm_usage is not unset: + kwargs["apm_usm_usage"] = apm_usm_usage + if appsec_fargate_percentage is not unset: + kwargs["appsec_fargate_percentage"] = appsec_fargate_percentage + if appsec_fargate_usage is not unset: + kwargs["appsec_fargate_usage"] = appsec_fargate_usage + if appsec_percentage is not unset: + kwargs["appsec_percentage"] = appsec_percentage + if appsec_usage is not unset: + kwargs["appsec_usage"] = appsec_usage + if asm_serverless_traced_invocations_percentage is not unset: + kwargs["asm_serverless_traced_invocations_percentage"] = asm_serverless_traced_invocations_percentage + if asm_serverless_traced_invocations_usage is not unset: + kwargs["asm_serverless_traced_invocations_usage"] = asm_serverless_traced_invocations_usage + if bits_ai_investigations_percentage is not unset: + kwargs["bits_ai_investigations_percentage"] = bits_ai_investigations_percentage + if bits_ai_investigations_usage is not unset: + kwargs["bits_ai_investigations_usage"] = bits_ai_investigations_usage + if browser_percentage is not unset: + kwargs["browser_percentage"] = browser_percentage + if browser_usage is not unset: + kwargs["browser_usage"] = browser_usage + if ci_code_coverage_committers_percentage is not unset: + kwargs["ci_code_coverage_committers_percentage"] = ci_code_coverage_committers_percentage + if ci_code_coverage_committers_usage is not unset: + kwargs["ci_code_coverage_committers_usage"] = ci_code_coverage_committers_usage + if ci_pipeline_indexed_spans_percentage is not unset: + kwargs["ci_pipeline_indexed_spans_percentage"] = ci_pipeline_indexed_spans_percentage + if ci_pipeline_indexed_spans_usage is not unset: + kwargs["ci_pipeline_indexed_spans_usage"] = ci_pipeline_indexed_spans_usage + if ci_test_indexed_spans_percentage is not unset: + kwargs["ci_test_indexed_spans_percentage"] = ci_test_indexed_spans_percentage + if ci_test_indexed_spans_usage is not unset: + kwargs["ci_test_indexed_spans_usage"] = ci_test_indexed_spans_usage + if ci_visibility_itr_percentage is not unset: + kwargs["ci_visibility_itr_percentage"] = ci_visibility_itr_percentage + if ci_visibility_itr_usage is not unset: + kwargs["ci_visibility_itr_usage"] = ci_visibility_itr_usage + if cloud_siem_percentage is not unset: + kwargs["cloud_siem_percentage"] = cloud_siem_percentage + if cloud_siem_usage is not unset: + kwargs["cloud_siem_usage"] = cloud_siem_usage + if code_security_host_percentage is not unset: + kwargs["code_security_host_percentage"] = code_security_host_percentage + if code_security_host_usage is not unset: + kwargs["code_security_host_usage"] = code_security_host_usage + if container_excl_agent_percentage is not unset: + kwargs["container_excl_agent_percentage"] = container_excl_agent_percentage + if container_excl_agent_usage is not unset: + kwargs["container_excl_agent_usage"] = container_excl_agent_usage + if container_percentage is not unset: + kwargs["container_percentage"] = container_percentage + if container_usage is not unset: + kwargs["container_usage"] = container_usage + if cspm_containers_percentage is not unset: + kwargs["cspm_containers_percentage"] = cspm_containers_percentage + if cspm_containers_usage is not unset: + kwargs["cspm_containers_usage"] = cspm_containers_usage + if cspm_hosts_percentage is not unset: + kwargs["cspm_hosts_percentage"] = cspm_hosts_percentage + if cspm_hosts_usage is not unset: + kwargs["cspm_hosts_usage"] = cspm_hosts_usage + if custom_event_percentage is not unset: + kwargs["custom_event_percentage"] = custom_event_percentage + if custom_event_usage is not unset: + kwargs["custom_event_usage"] = custom_event_usage + if custom_ingested_timeseries_percentage is not unset: + kwargs["custom_ingested_timeseries_percentage"] = custom_ingested_timeseries_percentage + if custom_ingested_timeseries_usage is not unset: + kwargs["custom_ingested_timeseries_usage"] = custom_ingested_timeseries_usage + if custom_timeseries_percentage is not unset: + kwargs["custom_timeseries_percentage"] = custom_timeseries_percentage + if custom_timeseries_usage is not unset: + kwargs["custom_timeseries_usage"] = custom_timeseries_usage + if cws_containers_percentage is not unset: + kwargs["cws_containers_percentage"] = cws_containers_percentage + if cws_containers_usage is not unset: + kwargs["cws_containers_usage"] = cws_containers_usage + if cws_fargate_task_percentage is not unset: + kwargs["cws_fargate_task_percentage"] = cws_fargate_task_percentage + if cws_fargate_task_usage is not unset: + kwargs["cws_fargate_task_usage"] = cws_fargate_task_usage + if cws_hosts_percentage is not unset: + kwargs["cws_hosts_percentage"] = cws_hosts_percentage + if cws_hosts_usage is not unset: + kwargs["cws_hosts_usage"] = cws_hosts_usage + if data_jobs_monitoring_usage is not unset: + kwargs["data_jobs_monitoring_usage"] = data_jobs_monitoring_usage + if data_stream_monitoring_usage is not unset: + kwargs["data_stream_monitoring_usage"] = data_stream_monitoring_usage + if dbm_hosts_percentage is not unset: + kwargs["dbm_hosts_percentage"] = dbm_hosts_percentage + if dbm_hosts_usage is not unset: + kwargs["dbm_hosts_usage"] = dbm_hosts_usage + if dbm_queries_percentage is not unset: + kwargs["dbm_queries_percentage"] = dbm_queries_percentage + if dbm_queries_usage is not unset: + kwargs["dbm_queries_usage"] = dbm_queries_usage + if error_tracking_percentage is not unset: + kwargs["error_tracking_percentage"] = error_tracking_percentage + if error_tracking_usage is not unset: + kwargs["error_tracking_usage"] = error_tracking_usage + if estimated_indexed_spans_percentage is not unset: + kwargs["estimated_indexed_spans_percentage"] = estimated_indexed_spans_percentage + if estimated_indexed_spans_usage is not unset: + kwargs["estimated_indexed_spans_usage"] = estimated_indexed_spans_usage + if estimated_ingested_spans_percentage is not unset: + kwargs["estimated_ingested_spans_percentage"] = estimated_ingested_spans_percentage + if estimated_ingested_spans_usage is not unset: + kwargs["estimated_ingested_spans_usage"] = estimated_ingested_spans_usage + if fargate_percentage is not unset: + kwargs["fargate_percentage"] = fargate_percentage + if fargate_usage is not unset: + kwargs["fargate_usage"] = fargate_usage + if flex_logs_starter_percentage is not unset: + kwargs["flex_logs_starter_percentage"] = flex_logs_starter_percentage + if flex_logs_starter_usage is not unset: + kwargs["flex_logs_starter_usage"] = flex_logs_starter_usage + if flex_stored_logs_percentage is not unset: + kwargs["flex_stored_logs_percentage"] = flex_stored_logs_percentage + if flex_stored_logs_usage is not unset: + kwargs["flex_stored_logs_usage"] = flex_stored_logs_usage + if functions_percentage is not unset: + kwargs["functions_percentage"] = functions_percentage + if functions_usage is not unset: + kwargs["functions_usage"] = functions_usage + if incident_management_monthly_active_users_percentage is not unset: + kwargs["incident_management_monthly_active_users_percentage"] = incident_management_monthly_active_users_percentage + if incident_management_monthly_active_users_usage is not unset: + kwargs["incident_management_monthly_active_users_usage"] = incident_management_monthly_active_users_usage + if indexed_spans_percentage is not unset: + kwargs["indexed_spans_percentage"] = indexed_spans_percentage + if indexed_spans_usage is not unset: + kwargs["indexed_spans_usage"] = indexed_spans_usage + if infra_host_basic_percentage is not unset: + kwargs["infra_host_basic_percentage"] = infra_host_basic_percentage + if infra_host_basic_usage is not unset: + kwargs["infra_host_basic_usage"] = infra_host_basic_usage + if infra_host_percentage is not unset: + kwargs["infra_host_percentage"] = infra_host_percentage + if infra_host_usage is not unset: + kwargs["infra_host_usage"] = infra_host_usage + if ingested_logs_bytes_percentage is not unset: + kwargs["ingested_logs_bytes_percentage"] = ingested_logs_bytes_percentage + if ingested_logs_bytes_usage is not unset: + kwargs["ingested_logs_bytes_usage"] = ingested_logs_bytes_usage + if ingested_spans_bytes_percentage is not unset: + kwargs["ingested_spans_bytes_percentage"] = ingested_spans_bytes_percentage + if ingested_spans_bytes_usage is not unset: + kwargs["ingested_spans_bytes_usage"] = ingested_spans_bytes_usage + if invocations_percentage is not unset: + kwargs["invocations_percentage"] = invocations_percentage + if invocations_usage is not unset: + kwargs["invocations_usage"] = invocations_usage + if lambda_traced_invocations_percentage is not unset: + kwargs["lambda_traced_invocations_percentage"] = lambda_traced_invocations_percentage + if lambda_traced_invocations_usage is not unset: + kwargs["lambda_traced_invocations_usage"] = lambda_traced_invocations_usage + if llm_observability_percentage is not unset: + kwargs["llm_observability_percentage"] = llm_observability_percentage + if llm_observability_usage is not unset: + kwargs["llm_observability_usage"] = llm_observability_usage + if llm_spans_percentage is not unset: + kwargs["llm_spans_percentage"] = llm_spans_percentage + if llm_spans_usage is not unset: + kwargs["llm_spans_usage"] = llm_spans_usage + if logs_indexed_15day_percentage is not unset: + kwargs["logs_indexed_15day_percentage"] = logs_indexed_15day_percentage + if logs_indexed_15day_usage is not unset: + kwargs["logs_indexed_15day_usage"] = logs_indexed_15day_usage + if logs_indexed_180day_percentage is not unset: + kwargs["logs_indexed_180day_percentage"] = logs_indexed_180day_percentage + if logs_indexed_180day_usage is not unset: + kwargs["logs_indexed_180day_usage"] = logs_indexed_180day_usage + if logs_indexed_1day_percentage is not unset: + kwargs["logs_indexed_1day_percentage"] = logs_indexed_1day_percentage + if logs_indexed_1day_usage is not unset: + kwargs["logs_indexed_1day_usage"] = logs_indexed_1day_usage + if logs_indexed_30day_percentage is not unset: + kwargs["logs_indexed_30day_percentage"] = logs_indexed_30day_percentage + if logs_indexed_30day_usage is not unset: + kwargs["logs_indexed_30day_usage"] = logs_indexed_30day_usage + if logs_indexed_360day_percentage is not unset: + kwargs["logs_indexed_360day_percentage"] = logs_indexed_360day_percentage + if logs_indexed_360day_usage is not unset: + kwargs["logs_indexed_360day_usage"] = logs_indexed_360day_usage + if logs_indexed_3day_percentage is not unset: + kwargs["logs_indexed_3day_percentage"] = logs_indexed_3day_percentage + if logs_indexed_3day_usage is not unset: + kwargs["logs_indexed_3day_usage"] = logs_indexed_3day_usage + if logs_indexed_45day_percentage is not unset: + kwargs["logs_indexed_45day_percentage"] = logs_indexed_45day_percentage + if logs_indexed_45day_usage is not unset: + kwargs["logs_indexed_45day_usage"] = logs_indexed_45day_usage + if logs_indexed_60day_percentage is not unset: + kwargs["logs_indexed_60day_percentage"] = logs_indexed_60day_percentage + if logs_indexed_60day_usage is not unset: + kwargs["logs_indexed_60day_usage"] = logs_indexed_60day_usage + if logs_indexed_7day_percentage is not unset: + kwargs["logs_indexed_7day_percentage"] = logs_indexed_7day_percentage + if logs_indexed_7day_usage is not unset: + kwargs["logs_indexed_7day_usage"] = logs_indexed_7day_usage + if logs_indexed_90day_percentage is not unset: + kwargs["logs_indexed_90day_percentage"] = logs_indexed_90day_percentage + if logs_indexed_90day_usage is not unset: + kwargs["logs_indexed_90day_usage"] = logs_indexed_90day_usage + if logs_indexed_custom_retention_percentage is not unset: + kwargs["logs_indexed_custom_retention_percentage"] = logs_indexed_custom_retention_percentage + if logs_indexed_custom_retention_usage is not unset: + kwargs["logs_indexed_custom_retention_usage"] = logs_indexed_custom_retention_usage + if mobile_app_testing_percentage is not unset: + kwargs["mobile_app_testing_percentage"] = mobile_app_testing_percentage + if mobile_app_testing_usage is not unset: + kwargs["mobile_app_testing_usage"] = mobile_app_testing_usage + if ndm_netflow_percentage is not unset: + kwargs["ndm_netflow_percentage"] = ndm_netflow_percentage + if ndm_netflow_usage is not unset: + kwargs["ndm_netflow_usage"] = ndm_netflow_usage + if network_device_wireless_percentage is not unset: + kwargs["network_device_wireless_percentage"] = network_device_wireless_percentage + if network_device_wireless_usage is not unset: + kwargs["network_device_wireless_usage"] = network_device_wireless_usage + if npm_host_percentage is not unset: + kwargs["npm_host_percentage"] = npm_host_percentage + if npm_host_usage is not unset: + kwargs["npm_host_usage"] = npm_host_usage + if obs_pipeline_bytes_percentage is not unset: + kwargs["obs_pipeline_bytes_percentage"] = obs_pipeline_bytes_percentage + if obs_pipeline_bytes_usage is not unset: + kwargs["obs_pipeline_bytes_usage"] = obs_pipeline_bytes_usage + if obs_pipelines_vcpu_percentage is not unset: + kwargs["obs_pipelines_vcpu_percentage"] = obs_pipelines_vcpu_percentage + if obs_pipelines_vcpu_usage is not unset: + kwargs["obs_pipelines_vcpu_usage"] = obs_pipelines_vcpu_usage + if online_archive_percentage is not unset: + kwargs["online_archive_percentage"] = online_archive_percentage + if online_archive_usage is not unset: + kwargs["online_archive_usage"] = online_archive_usage + if product_analytics_session_percentage is not unset: + kwargs["product_analytics_session_percentage"] = product_analytics_session_percentage + if product_analytics_session_usage is not unset: + kwargs["product_analytics_session_usage"] = product_analytics_session_usage + if profiled_container_percentage is not unset: + kwargs["profiled_container_percentage"] = profiled_container_percentage + if profiled_container_usage is not unset: + kwargs["profiled_container_usage"] = profiled_container_usage + if profiled_fargate_percentage is not unset: + kwargs["profiled_fargate_percentage"] = profiled_fargate_percentage + if profiled_fargate_usage is not unset: + kwargs["profiled_fargate_usage"] = profiled_fargate_usage + if profiled_host_percentage is not unset: + kwargs["profiled_host_percentage"] = profiled_host_percentage + if profiled_host_usage is not unset: + kwargs["profiled_host_usage"] = profiled_host_usage + if published_app_percentage is not unset: + kwargs["published_app_percentage"] = published_app_percentage + if published_app_usage is not unset: + kwargs["published_app_usage"] = published_app_usage + if rum_browser_mobile_sessions_percentage is not unset: + kwargs["rum_browser_mobile_sessions_percentage"] = rum_browser_mobile_sessions_percentage + if rum_browser_mobile_sessions_usage is not unset: + kwargs["rum_browser_mobile_sessions_usage"] = rum_browser_mobile_sessions_usage + if rum_ingested_percentage is not unset: + kwargs["rum_ingested_percentage"] = rum_ingested_percentage + if rum_ingested_usage is not unset: + kwargs["rum_ingested_usage"] = rum_ingested_usage + if rum_investigate_percentage is not unset: + kwargs["rum_investigate_percentage"] = rum_investigate_percentage + if rum_investigate_usage is not unset: + kwargs["rum_investigate_usage"] = rum_investigate_usage + if rum_replay_sessions_percentage is not unset: + kwargs["rum_replay_sessions_percentage"] = rum_replay_sessions_percentage + if rum_replay_sessions_usage is not unset: + kwargs["rum_replay_sessions_usage"] = rum_replay_sessions_usage + if rum_session_replay_add_on_percentage is not unset: + kwargs["rum_session_replay_add_on_percentage"] = rum_session_replay_add_on_percentage + if rum_session_replay_add_on_usage is not unset: + kwargs["rum_session_replay_add_on_usage"] = rum_session_replay_add_on_usage + if sca_fargate_percentage is not unset: + kwargs["sca_fargate_percentage"] = sca_fargate_percentage + if sca_fargate_usage is not unset: + kwargs["sca_fargate_usage"] = sca_fargate_usage + if sds_scanned_bytes_percentage is not unset: + kwargs["sds_scanned_bytes_percentage"] = sds_scanned_bytes_percentage + if sds_scanned_bytes_usage is not unset: + kwargs["sds_scanned_bytes_usage"] = sds_scanned_bytes_usage + if serverless_apps_apm_percentage is not unset: + kwargs["serverless_apps_apm_percentage"] = serverless_apps_apm_percentage + if serverless_apps_apm_usage is not unset: + kwargs["serverless_apps_apm_usage"] = serverless_apps_apm_usage + if serverless_apps_percentage is not unset: + kwargs["serverless_apps_percentage"] = serverless_apps_percentage + if serverless_apps_usage is not unset: + kwargs["serverless_apps_usage"] = serverless_apps_usage + if siem_12mo_retention_percentage is not unset: + kwargs["siem_12mo_retention_percentage"] = siem_12mo_retention_percentage + if siem_12mo_retention_usage is not unset: + kwargs["siem_12mo_retention_usage"] = siem_12mo_retention_usage + if siem_6mo_retention_percentage is not unset: + kwargs["siem_6mo_retention_percentage"] = siem_6mo_retention_percentage + if siem_6mo_retention_usage is not unset: + kwargs["siem_6mo_retention_usage"] = siem_6mo_retention_usage + if siem_analyzed_logs_add_on_percentage is not unset: + kwargs["siem_analyzed_logs_add_on_percentage"] = siem_analyzed_logs_add_on_percentage + if siem_analyzed_logs_add_on_usage is not unset: + kwargs["siem_analyzed_logs_add_on_usage"] = siem_analyzed_logs_add_on_usage + if siem_ingested_bytes_percentage is not unset: + kwargs["siem_ingested_bytes_percentage"] = siem_ingested_bytes_percentage + if siem_ingested_bytes_usage is not unset: + kwargs["siem_ingested_bytes_usage"] = siem_ingested_bytes_usage + if snmp_percentage is not unset: + kwargs["snmp_percentage"] = snmp_percentage + if snmp_usage is not unset: + kwargs["snmp_usage"] = snmp_usage + if universal_service_monitoring_percentage is not unset: + kwargs["universal_service_monitoring_percentage"] = universal_service_monitoring_percentage + if universal_service_monitoring_usage is not unset: + kwargs["universal_service_monitoring_usage"] = universal_service_monitoring_usage + if vuln_management_hosts_percentage is not unset: + kwargs["vuln_management_hosts_percentage"] = vuln_management_hosts_percentage + if vuln_management_hosts_usage is not unset: + kwargs["vuln_management_hosts_usage"] = vuln_management_hosts_usage + if workflow_executions_percentage is not unset: + kwargs["workflow_executions_percentage"] = workflow_executions_percentage + if workflow_executions_usage is not unset: + kwargs["workflow_executions_usage"] = workflow_executions_usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/note_widget_definition.py b/datadog_api_client/v1/model/note_widget_definition.py new file mode 100644 index 0000000000..5cd9ba6735 --- /dev/null +++ b/datadog_api_client/v1/model/note_widget_definition.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.widget_tick_edge import WidgetTickEdge + from datadog_api_client.v1.model.note_widget_definition_type import NoteWidgetDefinitionType + from datadog_api_client.v1.model.widget_vertical_align import WidgetVerticalAlign + +class NoteWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.widget_tick_edge import WidgetTickEdge + from datadog_api_client.v1.model.note_widget_definition_type import NoteWidgetDefinitionType + from datadog_api_client.v1.model.widget_vertical_align import WidgetVerticalAlign + return { + "background_color": (str,), + "content": (str,), + "font_size": (str,), + "has_padding": (bool,), + "show_tick": (bool,), + "text_align": (WidgetTextAlign,), + "tick_edge": (WidgetTickEdge,), + "tick_pos": (str,), + "type": (NoteWidgetDefinitionType,), + "vertical_align": (WidgetVerticalAlign,), + } + attribute_map = { + "background_color": "background_color", + "content": "content", + "font_size": "font_size", + "has_padding": "has_padding", + "show_tick": "show_tick", + "text_align": "text_align", + "tick_edge": "tick_edge", + "tick_pos": "tick_pos", + "type": "type", + "vertical_align": "vertical_align", + } + + def __init__(self_, content: str, type: NoteWidgetDefinitionType, background_color: Union[str, UnsetType]=unset, font_size: Union[str, UnsetType]=unset, has_padding: Union[bool, UnsetType]=unset, show_tick: Union[bool, UnsetType]=unset, text_align: Union[WidgetTextAlign, UnsetType]=unset, tick_edge: Union[WidgetTickEdge, UnsetType]=unset, tick_pos: Union[str, UnsetType]=unset, vertical_align: Union[WidgetVerticalAlign, UnsetType]=unset, **kwargs): + """ + The notes and links widget is similar to free text widget, but allows for more formatting options. + + :param background_color: Background color of the note. + :type background_color: str, optional + + :param content: Content of the note. + :type content: str + + :param font_size: Size of the text. + :type font_size: str, optional + + :param has_padding: Whether to add padding or not. + :type has_padding: bool, optional + + :param show_tick: Whether to show a tick or not. + :type show_tick: bool, optional + + :param text_align: How to align the text on the widget. + :type text_align: WidgetTextAlign, optional + + :param tick_edge: Define how you want to align the text on the widget. + :type tick_edge: WidgetTickEdge, optional + + :param tick_pos: Where to position the tick on an edge. + :type tick_pos: str, optional + + :param type: Type of the note widget. + :type type: NoteWidgetDefinitionType + + :param vertical_align: Vertical alignment. + :type vertical_align: WidgetVerticalAlign, optional + """ + if background_color is not unset: + kwargs["background_color"] = background_color + if font_size is not unset: + kwargs["font_size"] = font_size + if has_padding is not unset: + kwargs["has_padding"] = has_padding + if show_tick is not unset: + kwargs["show_tick"] = show_tick + if text_align is not unset: + kwargs["text_align"] = text_align + if tick_edge is not unset: + kwargs["tick_edge"] = tick_edge + if tick_pos is not unset: + kwargs["tick_pos"] = tick_pos + if vertical_align is not unset: + kwargs["vertical_align"] = vertical_align + super().__init__(kwargs) + + + self_.content = content + self_.type = type diff --git a/datadog_api_client/v1/model/note_widget_definition_type.py b/datadog_api_client/v1/model/note_widget_definition_type.py new file mode 100644 index 0000000000..012a6a5616 --- /dev/null +++ b/datadog_api_client/v1/model/note_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NoteWidgetDefinitionType(ModelSimple): + """ + Type of the note widget. + + :param value: If omitted defaults to "note". Must be one of ["note"]. + :type value: str + """ + + allowed_values = { + "note", + } + NOTE: ClassVar["NoteWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NoteWidgetDefinitionType.NOTE = NoteWidgetDefinitionType("note") diff --git a/datadog_api_client/v1/model/notebook_absolute_time.py b/datadog_api_client/v1/model/notebook_absolute_time.py new file mode 100644 index 0000000000..ad0adec77d --- /dev/null +++ b/datadog_api_client/v1/model/notebook_absolute_time.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookAbsoluteTime(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (datetime,), + "live": (bool,), + "start": (datetime,), + } + attribute_map = { + "end": "end", + "live": "live", + "start": "start", + } + + def __init__(self_, end: datetime, start: datetime, live: Union[bool, UnsetType]=unset, **kwargs): + """ + Absolute timeframe. + + :param end: The end time. + :type end: datetime + + :param live: Indicates whether the timeframe should be shifted to end at the current time. + :type live: bool, optional + + :param start: The start time. + :type start: datetime + """ + if live is not unset: + kwargs["live"] = live + super().__init__(kwargs) + + + self_.end = end + self_.start = start diff --git a/datadog_api_client/v1/model/notebook_author.py b/datadog_api_client/v1/model/notebook_author.py new file mode 100644 index 0000000000..1a4581727d --- /dev/null +++ b/datadog_api_client/v1/model/notebook_author.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookAuthor(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "disabled": (bool,), + "email": (str,), + "handle": (str,), + "icon": (str,), + "name": (str, none_type), + "status": (str,), + "title": (str, none_type), + "verified": (bool,), + } + attribute_map = { + "created_at": "created_at", + "disabled": "disabled", + "email": "email", + "handle": "handle", + "icon": "icon", + "name": "name", + "status": "status", + "title": "title", + "verified": "verified", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, disabled: Union[bool, UnsetType]=unset, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, icon: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, status: Union[str, UnsetType]=unset, title: Union[str, none_type, UnsetType]=unset, verified: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes of user object returned by the API. + + :param created_at: Creation time of the user. + :type created_at: datetime, optional + + :param disabled: Whether the user is disabled. + :type disabled: bool, optional + + :param email: Email of the user. + :type email: str, optional + + :param handle: Handle of the user. + :type handle: str, optional + + :param icon: URL of the user's icon. + :type icon: str, optional + + :param name: Name of the user. + :type name: str, none_type, optional + + :param status: Status of the user. + :type status: str, optional + + :param title: Title of the user. + :type title: str, none_type, optional + + :param verified: Whether the user is verified. + :type verified: bool, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if disabled is not unset: + kwargs["disabled"] = disabled + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if icon is not unset: + kwargs["icon"] = icon + if name is not unset: + kwargs["name"] = name + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if verified is not unset: + kwargs["verified"] = verified + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/notebook_cell_create_request.py b/datadog_api_client/v1/model/notebook_cell_create_request.py new file mode 100644 index 0000000000..76effc04a7 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_cell_create_request.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_cell_create_request_attributes import NotebookCellCreateRequestAttributes + from datadog_api_client.v1.model.notebook_cell_resource_type import NotebookCellResourceType + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + +class NotebookCellCreateRequest(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_cell_create_request_attributes import NotebookCellCreateRequestAttributes + from datadog_api_client.v1.model.notebook_cell_resource_type import NotebookCellResourceType + return { + "attributes": (NotebookCellCreateRequestAttributes,), + "type": (NotebookCellResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[NotebookCellCreateRequestAttributes, NotebookMarkdownCellAttributes, NotebookTimeseriesCellAttributes, NotebookToplistCellAttributes, NotebookHeatMapCellAttributes, NotebookDistributionCellAttributes, NotebookLogStreamCellAttributes], type: NotebookCellResourceType, **kwargs): + """ + The description of a notebook cell create request. + + :param attributes: The attributes of a notebook cell in create cell request. Valid cell types are ``markdown`` , ``timeseries`` , ``toplist`` , ``heatmap`` , ``distribution`` , + ``log_stream``. `More information on each graph visualization type. `_ + :type attributes: NotebookCellCreateRequestAttributes + + :param type: Type of the Notebook Cell resource. + :type type: NotebookCellResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v1/model/notebook_cell_create_request_attributes.py b/datadog_api_client/v1/model/notebook_cell_create_request_attributes.py new file mode 100644 index 0000000000..56cea2694a --- /dev/null +++ b/datadog_api_client/v1/model/notebook_cell_create_request_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookCellCreateRequestAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The attributes of a notebook cell in create cell request. Valid cell types are ``markdown`` , ``timeseries`` , ``toplist`` , ``heatmap`` , ``distribution`` , + ``log_stream``. `More information on each graph visualization type. `_ + + :param definition: Text in a notebook is formatted with [Markdown](https://daringfireball.net/projects/markdown/), which enables the use of headings, subheadings, links, images, lists, and code blocks. + :type definition: NotebookMarkdownCellDefinition + + :param graph_size: The size of the graph. + :type graph_size: NotebookGraphSize, optional + + :param split_by: Object describing how to split the graph to display multiple visualizations per request. + :type split_by: NotebookSplitBy, optional + + :param time: Timeframe for the notebook cell. When 'null', the notebook global time is used. + :type time: NotebookCellTime, none_type, 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.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + return { + "oneOf": [ + NotebookMarkdownCellAttributes, + NotebookTimeseriesCellAttributes, + NotebookToplistCellAttributes, + NotebookHeatMapCellAttributes, + NotebookDistributionCellAttributes, + NotebookLogStreamCellAttributes, + ], + } diff --git a/datadog_api_client/v1/model/notebook_cell_resource_type.py b/datadog_api_client/v1/model/notebook_cell_resource_type.py new file mode 100644 index 0000000000..eadd652999 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_cell_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotebookCellResourceType(ModelSimple): + """ + Type of the Notebook Cell resource. + + :param value: If omitted defaults to "notebook_cells". Must be one of ["notebook_cells"]. + :type value: str + """ + + allowed_values = { + "notebook_cells", + } + NOTEBOOK_CELLS: ClassVar["NotebookCellResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotebookCellResourceType.NOTEBOOK_CELLS = NotebookCellResourceType("notebook_cells") diff --git a/datadog_api_client/v1/model/notebook_cell_response.py b/datadog_api_client/v1/model/notebook_cell_response.py new file mode 100644 index 0000000000..215f6666a4 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_cell_response.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_cell_response_attributes import NotebookCellResponseAttributes + from datadog_api_client.v1.model.notebook_cell_resource_type import NotebookCellResourceType + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + +class NotebookCellResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_cell_response_attributes import NotebookCellResponseAttributes + from datadog_api_client.v1.model.notebook_cell_resource_type import NotebookCellResourceType + return { + "attributes": (NotebookCellResponseAttributes,), + "id": (str,), + "type": (NotebookCellResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[NotebookCellResponseAttributes, NotebookMarkdownCellAttributes, NotebookTimeseriesCellAttributes, NotebookToplistCellAttributes, NotebookHeatMapCellAttributes, NotebookDistributionCellAttributes, NotebookLogStreamCellAttributes], id: str, type: NotebookCellResourceType, **kwargs): + """ + The description of a notebook cell response. + + :param attributes: The attributes of a notebook cell response. Valid cell types are ``markdown`` , ``timeseries`` , ``toplist`` , ``heatmap`` , ``distribution`` , + ``log_stream``. `More information on each graph visualization type. `_ + :type attributes: NotebookCellResponseAttributes + + :param id: Notebook cell ID. + :type id: str + + :param type: Type of the Notebook Cell resource. + :type type: NotebookCellResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v1/model/notebook_cell_response_attributes.py b/datadog_api_client/v1/model/notebook_cell_response_attributes.py new file mode 100644 index 0000000000..6add49642f --- /dev/null +++ b/datadog_api_client/v1/model/notebook_cell_response_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookCellResponseAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The attributes of a notebook cell response. Valid cell types are ``markdown`` , ``timeseries`` , ``toplist`` , ``heatmap`` , ``distribution`` , + ``log_stream``. `More information on each graph visualization type. `_ + + :param definition: Text in a notebook is formatted with [Markdown](https://daringfireball.net/projects/markdown/), which enables the use of headings, subheadings, links, images, lists, and code blocks. + :type definition: NotebookMarkdownCellDefinition + + :param graph_size: The size of the graph. + :type graph_size: NotebookGraphSize, optional + + :param split_by: Object describing how to split the graph to display multiple visualizations per request. + :type split_by: NotebookSplitBy, optional + + :param time: Timeframe for the notebook cell. When 'null', the notebook global time is used. + :type time: NotebookCellTime, none_type, 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.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + return { + "oneOf": [ + NotebookMarkdownCellAttributes, + NotebookTimeseriesCellAttributes, + NotebookToplistCellAttributes, + NotebookHeatMapCellAttributes, + NotebookDistributionCellAttributes, + NotebookLogStreamCellAttributes, + ], + } diff --git a/datadog_api_client/v1/model/notebook_cell_time.py b/datadog_api_client/v1/model/notebook_cell_time.py new file mode 100644 index 0000000000..163f0dc7c6 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_cell_time.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookCellTime(ModelComposed): + + + _nullable = True + + def __init__(self, **kwargs): + """ + Timeframe for the notebook cell. When 'null', the notebook global time is used. + + :param live_span: The available timeframes depend on the widget you are using. + :type live_span: WidgetLiveSpan + + :param end: The end time. + :type end: datetime + + :param live: Indicates whether the timeframe should be shifted to end at the current time. + :type live: bool, optional + + :param start: The start time. + :type start: datetime + """ + 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.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + return { + "oneOf": [ + NotebookRelativeTime, + NotebookAbsoluteTime, + ], + } diff --git a/datadog_api_client/v1/model/notebook_cell_update_request.py b/datadog_api_client/v1/model/notebook_cell_update_request.py new file mode 100644 index 0000000000..0565ca6393 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_cell_update_request.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_cell_update_request_attributes import NotebookCellUpdateRequestAttributes + from datadog_api_client.v1.model.notebook_cell_resource_type import NotebookCellResourceType + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + +class NotebookCellUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_cell_update_request_attributes import NotebookCellUpdateRequestAttributes + from datadog_api_client.v1.model.notebook_cell_resource_type import NotebookCellResourceType + return { + "attributes": (NotebookCellUpdateRequestAttributes,), + "id": (str,), + "type": (NotebookCellResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[NotebookCellUpdateRequestAttributes, NotebookMarkdownCellAttributes, NotebookTimeseriesCellAttributes, NotebookToplistCellAttributes, NotebookHeatMapCellAttributes, NotebookDistributionCellAttributes, NotebookLogStreamCellAttributes], id: str, type: NotebookCellResourceType, **kwargs): + """ + The description of a notebook cell update request. + + :param attributes: The attributes of a notebook cell in update cell request. Valid cell types are ``markdown`` , ``timeseries`` , ``toplist`` , ``heatmap`` , ``distribution`` , + ``log_stream``. `More information on each graph visualization type. `_ + :type attributes: NotebookCellUpdateRequestAttributes + + :param id: Notebook cell ID. + :type id: str + + :param type: Type of the Notebook Cell resource. + :type type: NotebookCellResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v1/model/notebook_cell_update_request_attributes.py b/datadog_api_client/v1/model/notebook_cell_update_request_attributes.py new file mode 100644 index 0000000000..5887c93073 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_cell_update_request_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookCellUpdateRequestAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The attributes of a notebook cell in update cell request. Valid cell types are ``markdown`` , ``timeseries`` , ``toplist`` , ``heatmap`` , ``distribution`` , + ``log_stream``. `More information on each graph visualization type. `_ + + :param definition: Text in a notebook is formatted with [Markdown](https://daringfireball.net/projects/markdown/), which enables the use of headings, subheadings, links, images, lists, and code blocks. + :type definition: NotebookMarkdownCellDefinition + + :param graph_size: The size of the graph. + :type graph_size: NotebookGraphSize, optional + + :param split_by: Object describing how to split the graph to display multiple visualizations per request. + :type split_by: NotebookSplitBy, optional + + :param time: Timeframe for the notebook cell. When 'null', the notebook global time is used. + :type time: NotebookCellTime, none_type, 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.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + return { + "oneOf": [ + NotebookMarkdownCellAttributes, + NotebookTimeseriesCellAttributes, + NotebookToplistCellAttributes, + NotebookHeatMapCellAttributes, + NotebookDistributionCellAttributes, + NotebookLogStreamCellAttributes, + ], + } diff --git a/datadog_api_client/v1/model/notebook_create_data.py b/datadog_api_client/v1/model/notebook_create_data.py new file mode 100644 index 0000000000..bf38e9163c --- /dev/null +++ b/datadog_api_client/v1/model/notebook_create_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_create_data_attributes import NotebookCreateDataAttributes + from datadog_api_client.v1.model.notebook_resource_type import NotebookResourceType + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_create_data_attributes import NotebookCreateDataAttributes + from datadog_api_client.v1.model.notebook_resource_type import NotebookResourceType + return { + "attributes": (NotebookCreateDataAttributes,), + "type": (NotebookResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: NotebookCreateDataAttributes, type: NotebookResourceType, **kwargs): + """ + The data for a notebook create request. + + :param attributes: The data attributes of a notebook. + :type attributes: NotebookCreateDataAttributes + + :param type: Type of the Notebook resource. + :type type: NotebookResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v1/model/notebook_create_data_attributes.py b/datadog_api_client/v1/model/notebook_create_data_attributes.py new file mode 100644 index 0000000000..9faafcb35a --- /dev/null +++ b/datadog_api_client/v1/model/notebook_create_data_attributes.py @@ -0,0 +1,105 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_cell_create_request import NotebookCellCreateRequest + from datadog_api_client.v1.model.notebook_metadata import NotebookMetadata + from datadog_api_client.v1.model.notebook_status import NotebookStatus + from datadog_api_client.v1.model.notebook_template_variable import NotebookTemplateVariable + from datadog_api_client.v1.model.notebook_global_time import NotebookGlobalTime + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookCreateDataAttributes(ModelNormal): + validations = { + "name": { + "max_length": 80, + "min_length": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_cell_create_request import NotebookCellCreateRequest + from datadog_api_client.v1.model.notebook_metadata import NotebookMetadata + from datadog_api_client.v1.model.notebook_status import NotebookStatus + from datadog_api_client.v1.model.notebook_template_variable import NotebookTemplateVariable + from datadog_api_client.v1.model.notebook_global_time import NotebookGlobalTime + return { + "cells": ([NotebookCellCreateRequest],), + "metadata": (NotebookMetadata,), + "name": (str,), + "status": (NotebookStatus,), + "template_variables": ([NotebookTemplateVariable], none_type), + "time": (NotebookGlobalTime,), + } + attribute_map = { + "cells": "cells", + "metadata": "metadata", + "name": "name", + "status": "status", + "template_variables": "template_variables", + "time": "time", + } + + def __init__(self_, cells: List[NotebookCellCreateRequest], name: str, time: Union[NotebookGlobalTime, NotebookRelativeTime, NotebookAbsoluteTime], metadata: Union[NotebookMetadata, UnsetType]=unset, status: Union[NotebookStatus, UnsetType]=unset, template_variables: Union[List[NotebookTemplateVariable], none_type, UnsetType]=unset, **kwargs): + """ + The data attributes of a notebook. + + :param cells: List of cells to display in the notebook. + :type cells: [NotebookCellCreateRequest] + + :param metadata: Metadata associated with the notebook. + :type metadata: NotebookMetadata, optional + + :param name: The name of the notebook. + :type name: str + + :param status: Publication status of the notebook. For now, always "published". + :type status: NotebookStatus, optional + + :param template_variables: List of template variables for this notebook. + :type template_variables: [NotebookTemplateVariable], none_type, optional + + :param time: Notebook global timeframe. + :type time: NotebookGlobalTime + """ + if metadata is not unset: + kwargs["metadata"] = metadata + if status is not unset: + kwargs["status"] = status + if template_variables is not unset: + kwargs["template_variables"] = template_variables + super().__init__(kwargs) + + + self_.cells = cells + self_.name = name + self_.time = time diff --git a/datadog_api_client/v1/model/notebook_create_request.py b/datadog_api_client/v1/model/notebook_create_request.py new file mode 100644 index 0000000000..86a8945cb9 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_create_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_create_data import NotebookCreateData + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_create_data import NotebookCreateData + return { + "data": (NotebookCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: NotebookCreateData, **kwargs): + """ + The description of a notebook create request. + + :param data: The data for a notebook create request. + :type data: NotebookCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v1/model/notebook_distribution_cell_attributes.py b/datadog_api_client/v1/model/notebook_distribution_cell_attributes.py new file mode 100644 index 0000000000..05ede86814 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_distribution_cell_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.distribution_widget_definition import DistributionWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_split_by import NotebookSplitBy + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookDistributionCellAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.distribution_widget_definition import DistributionWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_split_by import NotebookSplitBy + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + return { + "definition": (DistributionWidgetDefinition,), + "graph_size": (NotebookGraphSize,), + "split_by": (NotebookSplitBy,), + "time": (NotebookCellTime,), + } + attribute_map = { + "definition": "definition", + "graph_size": "graph_size", + "split_by": "split_by", + "time": "time", + } + + def __init__(self_, definition: DistributionWidgetDefinition, graph_size: Union[NotebookGraphSize, UnsetType]=unset, split_by: Union[NotebookSplitBy, UnsetType]=unset, time: Union[Union[NotebookCellTime, NotebookRelativeTime, NotebookAbsoluteTime], none_type, UnsetType]=unset, **kwargs): + """ + The attributes of a notebook ``distribution`` cell. + + :param definition: The Distribution visualization is another way of showing metrics + aggregated across one or several tags, such as hosts. + Unlike the heat map, a distribution graph’s x-axis is quantity rather than time. + :type definition: DistributionWidgetDefinition + + :param graph_size: The size of the graph. + :type graph_size: NotebookGraphSize, optional + + :param split_by: Object describing how to split the graph to display multiple visualizations per request. + :type split_by: NotebookSplitBy, optional + + :param time: Timeframe for the notebook cell. When 'null', the notebook global time is used. + :type time: NotebookCellTime, none_type, optional + """ + if graph_size is not unset: + kwargs["graph_size"] = graph_size + if split_by is not unset: + kwargs["split_by"] = split_by + if time is not unset: + kwargs["time"] = time + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v1/model/notebook_global_time.py b/datadog_api_client/v1/model/notebook_global_time.py new file mode 100644 index 0000000000..837380001b --- /dev/null +++ b/datadog_api_client/v1/model/notebook_global_time.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookGlobalTime(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Notebook global timeframe. + + :param live_span: The available timeframes depend on the widget you are using. + :type live_span: WidgetLiveSpan + + :param end: The end time. + :type end: datetime + + :param live: Indicates whether the timeframe should be shifted to end at the current time. + :type live: bool, optional + + :param start: The start time. + :type start: datetime + """ + 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.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + return { + "oneOf": [ + NotebookRelativeTime, + NotebookAbsoluteTime, + ], + } diff --git a/datadog_api_client/v1/model/notebook_graph_size.py b/datadog_api_client/v1/model/notebook_graph_size.py new file mode 100644 index 0000000000..850cde646c --- /dev/null +++ b/datadog_api_client/v1/model/notebook_graph_size.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotebookGraphSize(ModelSimple): + """ + The size of the graph. + + :param value: Must be one of ["xs", "s", "m", "l", "xl"]. + :type value: str + """ + + allowed_values = { + "xs", + "s", + "m", + "l", + "xl", + } + EXTRA_SMALL: ClassVar["NotebookGraphSize"] + SMALL: ClassVar["NotebookGraphSize"] + MEDIUM: ClassVar["NotebookGraphSize"] + LARGE: ClassVar["NotebookGraphSize"] + EXTRA_LARGE: ClassVar["NotebookGraphSize"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotebookGraphSize.EXTRA_SMALL = NotebookGraphSize("xs") +NotebookGraphSize.SMALL = NotebookGraphSize("s") +NotebookGraphSize.MEDIUM = NotebookGraphSize("m") +NotebookGraphSize.LARGE = NotebookGraphSize("l") +NotebookGraphSize.EXTRA_LARGE = NotebookGraphSize("xl") diff --git a/datadog_api_client/v1/model/notebook_heat_map_cell_attributes.py b/datadog_api_client/v1/model/notebook_heat_map_cell_attributes.py new file mode 100644 index 0000000000..fe12b578fa --- /dev/null +++ b/datadog_api_client/v1/model/notebook_heat_map_cell_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.heat_map_widget_definition import HeatMapWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_split_by import NotebookSplitBy + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookHeatMapCellAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.heat_map_widget_definition import HeatMapWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_split_by import NotebookSplitBy + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + return { + "definition": (HeatMapWidgetDefinition,), + "graph_size": (NotebookGraphSize,), + "split_by": (NotebookSplitBy,), + "time": (NotebookCellTime,), + } + attribute_map = { + "definition": "definition", + "graph_size": "graph_size", + "split_by": "split_by", + "time": "time", + } + + def __init__(self_, definition: HeatMapWidgetDefinition, graph_size: Union[NotebookGraphSize, UnsetType]=unset, split_by: Union[NotebookSplitBy, UnsetType]=unset, time: Union[Union[NotebookCellTime, NotebookRelativeTime, NotebookAbsoluteTime], none_type, UnsetType]=unset, **kwargs): + """ + The attributes of a notebook ``heatmap`` cell. + + :param definition: The heat map visualization shows metrics aggregated across many tags, such as hosts. The more hosts that have a particular value, the darker that square is. + :type definition: HeatMapWidgetDefinition + + :param graph_size: The size of the graph. + :type graph_size: NotebookGraphSize, optional + + :param split_by: Object describing how to split the graph to display multiple visualizations per request. + :type split_by: NotebookSplitBy, optional + + :param time: Timeframe for the notebook cell. When 'null', the notebook global time is used. + :type time: NotebookCellTime, none_type, optional + """ + if graph_size is not unset: + kwargs["graph_size"] = graph_size + if split_by is not unset: + kwargs["split_by"] = split_by + if time is not unset: + kwargs["time"] = time + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v1/model/notebook_log_stream_cell_attributes.py b/datadog_api_client/v1/model/notebook_log_stream_cell_attributes.py new file mode 100644 index 0000000000..fe7b619ec7 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_log_stream_cell_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_stream_widget_definition import LogStreamWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookLogStreamCellAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_stream_widget_definition import LogStreamWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + return { + "definition": (LogStreamWidgetDefinition,), + "graph_size": (NotebookGraphSize,), + "time": (NotebookCellTime,), + } + attribute_map = { + "definition": "definition", + "graph_size": "graph_size", + "time": "time", + } + + def __init__(self_, definition: LogStreamWidgetDefinition, graph_size: Union[NotebookGraphSize, UnsetType]=unset, time: Union[Union[NotebookCellTime, NotebookRelativeTime, NotebookAbsoluteTime], none_type, UnsetType]=unset, **kwargs): + """ + The attributes of a notebook ``log_stream`` cell. + + :param definition: The Log Stream displays a log flow matching the defined query. + :type definition: LogStreamWidgetDefinition + + :param graph_size: The size of the graph. + :type graph_size: NotebookGraphSize, optional + + :param time: Timeframe for the notebook cell. When 'null', the notebook global time is used. + :type time: NotebookCellTime, none_type, optional + """ + if graph_size is not unset: + kwargs["graph_size"] = graph_size + if time is not unset: + kwargs["time"] = time + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v1/model/notebook_markdown_cell_attributes.py b/datadog_api_client/v1/model/notebook_markdown_cell_attributes.py new file mode 100644 index 0000000000..c074989dbb --- /dev/null +++ b/datadog_api_client/v1/model/notebook_markdown_cell_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_markdown_cell_definition import NotebookMarkdownCellDefinition + +class NotebookMarkdownCellAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_markdown_cell_definition import NotebookMarkdownCellDefinition + return { + "definition": (NotebookMarkdownCellDefinition,), + } + attribute_map = { + "definition": "definition", + } + + def __init__(self_, definition: NotebookMarkdownCellDefinition, **kwargs): + """ + The attributes of a notebook ``markdown`` cell. + + :param definition: Text in a notebook is formatted with `Markdown `_ , which enables the use of headings, subheadings, links, images, lists, and code blocks. + :type definition: NotebookMarkdownCellDefinition + """ + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v1/model/notebook_markdown_cell_definition.py b/datadog_api_client/v1/model/notebook_markdown_cell_definition.py new file mode 100644 index 0000000000..6735038107 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_markdown_cell_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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_markdown_cell_definition_type import NotebookMarkdownCellDefinitionType + +class NotebookMarkdownCellDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_markdown_cell_definition_type import NotebookMarkdownCellDefinitionType + return { + "text": (str,), + "type": (NotebookMarkdownCellDefinitionType,), + } + attribute_map = { + "text": "text", + "type": "type", + } + + def __init__(self_, text: str, type: NotebookMarkdownCellDefinitionType, **kwargs): + """ + Text in a notebook is formatted with `Markdown `_ , which enables the use of headings, subheadings, links, images, lists, and code blocks. + + :param text: The markdown content. + :type text: str + + :param type: Type of the markdown cell. + :type type: NotebookMarkdownCellDefinitionType + """ + super().__init__(kwargs) + + + self_.text = text + self_.type = type diff --git a/datadog_api_client/v1/model/notebook_markdown_cell_definition_type.py b/datadog_api_client/v1/model/notebook_markdown_cell_definition_type.py new file mode 100644 index 0000000000..b5ee16c6cd --- /dev/null +++ b/datadog_api_client/v1/model/notebook_markdown_cell_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotebookMarkdownCellDefinitionType(ModelSimple): + """ + Type of the markdown cell. + + :param value: If omitted defaults to "markdown". Must be one of ["markdown"]. + :type value: str + """ + + allowed_values = { + "markdown", + } + MARKDOWN: ClassVar["NotebookMarkdownCellDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotebookMarkdownCellDefinitionType.MARKDOWN = NotebookMarkdownCellDefinitionType("markdown") diff --git a/datadog_api_client/v1/model/notebook_metadata.py b/datadog_api_client/v1/model/notebook_metadata.py new file mode 100644 index 0000000000..b5e60ad32b --- /dev/null +++ b/datadog_api_client/v1/model/notebook_metadata.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_metadata_type import NotebookMetadataType + +class NotebookMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_metadata_type import NotebookMetadataType + return { + "is_template": (bool,), + "take_snapshots": (bool,), + "type": (NotebookMetadataType,), + } + attribute_map = { + "is_template": "is_template", + "take_snapshots": "take_snapshots", + "type": "type", + } + + def __init__(self_, is_template: Union[bool, UnsetType]=unset, take_snapshots: Union[bool, UnsetType]=unset, type: Union[NotebookMetadataType, none_type, UnsetType]=unset, **kwargs): + """ + Metadata associated with the notebook. + + :param is_template: Whether or not the notebook is a template. + :type is_template: bool, optional + + :param take_snapshots: Whether or not the notebook takes snapshot image backups of the notebook's fixed-time graphs. + :type take_snapshots: bool, optional + + :param type: Metadata type of the notebook. + :type type: NotebookMetadataType, none_type, optional + """ + if is_template is not unset: + kwargs["is_template"] = is_template + if take_snapshots is not unset: + kwargs["take_snapshots"] = take_snapshots + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/notebook_metadata_type.py b/datadog_api_client/v1/model/notebook_metadata_type.py new file mode 100644 index 0000000000..bed16ce6d7 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_metadata_type.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotebookMetadataType(ModelSimple): + """ + Metadata type of the notebook. + + :param value: Must be one of ["postmortem", "runbook", "investigation", "documentation", "report"]. + :type value: str + """ + + allowed_values = { + "postmortem", + "runbook", + "investigation", + "documentation", + "report", + } + POSTMORTEM: ClassVar["NotebookMetadataType"] + RUNBOOK: ClassVar["NotebookMetadataType"] + INVESTIGATION: ClassVar["NotebookMetadataType"] + DOCUMENTATION: ClassVar["NotebookMetadataType"] + REPORT: ClassVar["NotebookMetadataType"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotebookMetadataType.POSTMORTEM = NotebookMetadataType("postmortem") +NotebookMetadataType.RUNBOOK = NotebookMetadataType("runbook") +NotebookMetadataType.INVESTIGATION = NotebookMetadataType("investigation") +NotebookMetadataType.DOCUMENTATION = NotebookMetadataType("documentation") +NotebookMetadataType.REPORT = NotebookMetadataType("report") diff --git a/datadog_api_client/v1/model/notebook_relative_time.py b/datadog_api_client/v1/model/notebook_relative_time.py new file mode 100644 index 0000000000..a49e3db5f1 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_relative_time.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_live_span import WidgetLiveSpan + +class NotebookRelativeTime(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_live_span import WidgetLiveSpan + return { + "live_span": (WidgetLiveSpan,), + } + attribute_map = { + "live_span": "live_span", + } + + def __init__(self_, live_span: WidgetLiveSpan, **kwargs): + """ + Relative timeframe. + + :param live_span: The available timeframes depend on the widget you are using. + :type live_span: WidgetLiveSpan + """ + super().__init__(kwargs) + + + self_.live_span = live_span diff --git a/datadog_api_client/v1/model/notebook_resource_type.py b/datadog_api_client/v1/model/notebook_resource_type.py new file mode 100644 index 0000000000..60ce1002af --- /dev/null +++ b/datadog_api_client/v1/model/notebook_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotebookResourceType(ModelSimple): + """ + Type of the Notebook resource. + + :param value: If omitted defaults to "notebooks". Must be one of ["notebooks"]. + :type value: str + """ + + allowed_values = { + "notebooks", + } + NOTEBOOKS: ClassVar["NotebookResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotebookResourceType.NOTEBOOKS = NotebookResourceType("notebooks") diff --git a/datadog_api_client/v1/model/notebook_response.py b/datadog_api_client/v1/model/notebook_response.py new file mode 100644 index 0000000000..6edcf4c8a3 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_response_data import NotebookResponseData + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_response_data import NotebookResponseData + return { + "data": (NotebookResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[NotebookResponseData, UnsetType]=unset, **kwargs): + """ + The description of a notebook response. + + :param data: The data for a notebook. + :type data: NotebookResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/notebook_response_data.py b/datadog_api_client/v1/model/notebook_response_data.py new file mode 100644 index 0000000000..2b962ab3c5 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_response_data.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_response_data_attributes import NotebookResponseDataAttributes + from datadog_api_client.v1.model.notebook_resource_type import NotebookResourceType + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_response_data_attributes import NotebookResponseDataAttributes + from datadog_api_client.v1.model.notebook_resource_type import NotebookResourceType + return { + "attributes": (NotebookResponseDataAttributes,), + "id": (int,), + "type": (NotebookResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: NotebookResponseDataAttributes, id: int, type: NotebookResourceType, **kwargs): + """ + The data for a notebook. + + :param attributes: The attributes of a notebook. + :type attributes: NotebookResponseDataAttributes + + :param id: Unique notebook ID, assigned when you create the notebook. + :type id: int + + :param type: Type of the Notebook resource. + :type type: NotebookResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v1/model/notebook_response_data_attributes.py b/datadog_api_client/v1/model/notebook_response_data_attributes.py new file mode 100644 index 0000000000..5d4d13e7a9 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_response_data_attributes.py @@ -0,0 +1,132 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_author import NotebookAuthor + from datadog_api_client.v1.model.notebook_cell_response import NotebookCellResponse + from datadog_api_client.v1.model.notebook_metadata import NotebookMetadata + from datadog_api_client.v1.model.notebook_status import NotebookStatus + from datadog_api_client.v1.model.notebook_template_variable import NotebookTemplateVariable + from datadog_api_client.v1.model.notebook_global_time import NotebookGlobalTime + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookResponseDataAttributes(ModelNormal): + validations = { + "name": { + "max_length": 80, + "min_length": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_author import NotebookAuthor + from datadog_api_client.v1.model.notebook_cell_response import NotebookCellResponse + from datadog_api_client.v1.model.notebook_metadata import NotebookMetadata + from datadog_api_client.v1.model.notebook_status import NotebookStatus + from datadog_api_client.v1.model.notebook_template_variable import NotebookTemplateVariable + from datadog_api_client.v1.model.notebook_global_time import NotebookGlobalTime + return { + "author": (NotebookAuthor,), + "cells": ([NotebookCellResponse],), + "created": (datetime,), + "metadata": (NotebookMetadata,), + "modified": (datetime,), + "name": (str,), + "status": (NotebookStatus,), + "template_variables": ([NotebookTemplateVariable], none_type), + "time": (NotebookGlobalTime,), + } + attribute_map = { + "author": "author", + "cells": "cells", + "created": "created", + "metadata": "metadata", + "modified": "modified", + "name": "name", + "status": "status", + "template_variables": "template_variables", + "time": "time", + } + read_only_vars = { + "created", + "modified", + } + + def __init__(self_, cells: List[NotebookCellResponse], name: str, time: Union[NotebookGlobalTime, NotebookRelativeTime, NotebookAbsoluteTime], author: Union[NotebookAuthor, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, metadata: Union[NotebookMetadata, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, status: Union[NotebookStatus, UnsetType]=unset, template_variables: Union[List[NotebookTemplateVariable], none_type, UnsetType]=unset, **kwargs): + """ + The attributes of a notebook. + + :param author: Attributes of user object returned by the API. + :type author: NotebookAuthor, optional + + :param cells: List of cells to display in the notebook. + :type cells: [NotebookCellResponse] + + :param created: UTC time stamp for when the notebook was created. + :type created: datetime, optional + + :param metadata: Metadata associated with the notebook. + :type metadata: NotebookMetadata, optional + + :param modified: UTC time stamp for when the notebook was last modified. + :type modified: datetime, optional + + :param name: The name of the notebook. + :type name: str + + :param status: Publication status of the notebook. For now, always "published". + :type status: NotebookStatus, optional + + :param template_variables: List of template variables for this notebook. + :type template_variables: [NotebookTemplateVariable], none_type, optional + + :param time: Notebook global timeframe. + :type time: NotebookGlobalTime + """ + if author is not unset: + kwargs["author"] = author + if created is not unset: + kwargs["created"] = created + if metadata is not unset: + kwargs["metadata"] = metadata + if modified is not unset: + kwargs["modified"] = modified + if status is not unset: + kwargs["status"] = status + if template_variables is not unset: + kwargs["template_variables"] = template_variables + super().__init__(kwargs) + + + self_.cells = cells + self_.name = name + self_.time = time diff --git a/datadog_api_client/v1/model/notebook_split_by.py b/datadog_api_client/v1/model/notebook_split_by.py new file mode 100644 index 0000000000..5489d3352e --- /dev/null +++ b/datadog_api_client/v1/model/notebook_split_by.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookSplitBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "keys": ([str],), + "tags": ([str],), + } + attribute_map = { + "keys": "keys", + "tags": "tags", + } + + def __init__(self_, keys: List[str], tags: List[str], **kwargs): + """ + Object describing how to split the graph to display multiple visualizations per request. + + :param keys: Keys to split on. + :type keys: [str] + + :param tags: Tags to split on. + :type tags: [str] + """ + super().__init__(kwargs) + + + self_.keys = keys + self_.tags = tags diff --git a/datadog_api_client/v1/model/notebook_status.py b/datadog_api_client/v1/model/notebook_status.py new file mode 100644 index 0000000000..0eeb317870 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotebookStatus(ModelSimple): + """ + Publication status of the notebook. For now, always "published". + + :param value: If omitted defaults to "published". Must be one of ["published"]. + :type value: str + """ + + allowed_values = { + "published", + } + PUBLISHED: ClassVar["NotebookStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotebookStatus.PUBLISHED = NotebookStatus("published") diff --git a/datadog_api_client/v1/model/notebook_template_variable.py b/datadog_api_client/v1/model/notebook_template_variable.py new file mode 100644 index 0000000000..20f1d9e612 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_template_variable.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_template_variable_available_values_query import NotebookTemplateVariableAvailableValuesQuery + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + +class NotebookTemplateVariable(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_template_variable_available_values_query import NotebookTemplateVariableAvailableValuesQuery + return { + "available_values": ([str], none_type), + "available_values_query": (NotebookTemplateVariableAvailableValuesQuery,), + "data_source_mappings": ({str: (str,)},), + "default": (str, none_type), + "defaults": ([str],), + "name": (str,), + "placement": (str,), + "prefix": (str, none_type), + "type": (str,), + } + attribute_map = { + "available_values": "available_values", + "available_values_query": "available_values_query", + "data_source_mappings": "data_source_mappings", + "default": "default", + "defaults": "defaults", + "name": "name", + "placement": "placement", + "prefix": "prefix", + "type": "type", + } + + def __init__(self_, name: str, available_values: Union[List[str], none_type, UnsetType]=unset, available_values_query: Union[NotebookTemplateVariableAvailableValuesQuery, NotebookTemplateVariableAvailableValuesQueryLogRumSpans, NotebookTemplateVariableAvailableValuesQueryMetrics, UnsetType]=unset, data_source_mappings: Union[Dict[str, str], UnsetType]=unset, default: Union[str, none_type, UnsetType]=unset, defaults: Union[List[str], UnsetType]=unset, placement: Union[str, UnsetType]=unset, prefix: Union[str, none_type, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Notebook template variable. + + :param available_values: The list of values that the template variable drop-down is limited to. + :type available_values: [str], none_type, optional + + :param available_values_query: Query used to dynamically populate the list of available values for the template variable. + :type available_values_query: NotebookTemplateVariableAvailableValuesQuery, optional + + :param data_source_mappings: Mapping of data source names to template variable values. + :type data_source_mappings: {str: (str,)}, optional + + :param default: (deprecated) The default value for the template variable on notebook load. + Cannot be used in conjunction with ``defaults``. **Deprecated**. + :type default: str, none_type, optional + + :param defaults: One or many default values for the template variable. Cannot be used in conjunction with ``default``. + :type defaults: [str], optional + + :param name: The name of the variable. + :type name: str + + :param placement: The placement of the template variable in the notebook. + :type placement: str, optional + + :param prefix: The tag prefix associated with the variable. Only tags with this prefix appear in the variable drop-down. + :type prefix: str, none_type, optional + + :param type: The type of the template variable. + :type type: str, optional + """ + if available_values is not unset: + kwargs["available_values"] = available_values + if available_values_query is not unset: + kwargs["available_values_query"] = available_values_query + if data_source_mappings is not unset: + kwargs["data_source_mappings"] = data_source_mappings + if default is not unset: + kwargs["default"] = default + if defaults is not unset: + kwargs["defaults"] = defaults + if placement is not unset: + kwargs["placement"] = placement + if prefix is not unset: + kwargs["prefix"] = prefix + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v1/model/notebook_template_variable_available_values_query.py b/datadog_api_client/v1/model/notebook_template_variable_available_values_query.py new file mode 100644 index 0000000000..96fe3edf52 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_template_variable_available_values_query.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookTemplateVariableAvailableValuesQuery(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Query used to dynamically populate the list of available values for the template variable. + + :param data_source: The data source for the query. Must be one of `logs`, `rum`, or `spans`. + :type data_source: str + + :param group_by: Group-by fields for the query. + :type group_by: [NotebookTemplateVariableAvailableValuesQueryGroupBy] + + :param search: Search parameters for an available values query. + :type search: NotebookTemplateVariableAvailableValuesQuerySearch + + :param query: The metrics query string. + :type query: str + """ + 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.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + return { + "oneOf": [ + NotebookTemplateVariableAvailableValuesQueryLogRumSpans, + NotebookTemplateVariableAvailableValuesQueryMetrics, + ], + } diff --git a/datadog_api_client/v1/model/notebook_template_variable_available_values_query_group_by.py b/datadog_api_client/v1/model/notebook_template_variable_available_values_query_group_by.py new file mode 100644 index 0000000000..3ce3c03aec --- /dev/null +++ b/datadog_api_client/v1/model/notebook_template_variable_available_values_query_group_by.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookTemplateVariableAvailableValuesQueryGroupBy(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "facet": (str,), + } + attribute_map = { + "facet": "facet", + } + + def __init__(self_, facet: str, **kwargs): + """ + A group-by facet for an available values query. + + :param facet: The facet name to group by. + :type facet: str + """ + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v1/model/notebook_template_variable_available_values_query_log_rum_spans.py b/datadog_api_client/v1/model/notebook_template_variable_available_values_query_log_rum_spans.py new file mode 100644 index 0000000000..c790b7d3dd --- /dev/null +++ b/datadog_api_client/v1/model/notebook_template_variable_available_values_query_log_rum_spans.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_group_by import NotebookTemplateVariableAvailableValuesQueryGroupBy + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_search import NotebookTemplateVariableAvailableValuesQuerySearch + +class NotebookTemplateVariableAvailableValuesQueryLogRumSpans(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_group_by import NotebookTemplateVariableAvailableValuesQueryGroupBy + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_search import NotebookTemplateVariableAvailableValuesQuerySearch + return { + "data_source": (str,), + "group_by": ([NotebookTemplateVariableAvailableValuesQueryGroupBy],), + "search": (NotebookTemplateVariableAvailableValuesQuerySearch,), + } + attribute_map = { + "data_source": "data_source", + "group_by": "group_by", + "search": "search", + } + + def __init__(self_, data_source: str, group_by: List[NotebookTemplateVariableAvailableValuesQueryGroupBy], search: NotebookTemplateVariableAvailableValuesQuerySearch, **kwargs): + """ + Available values query for logs, RUM, or spans data sources. + + :param data_source: The data source for the query. Must be one of ``logs`` , ``rum`` , or ``spans``. + :type data_source: str + + :param group_by: Group-by fields for the query. + :type group_by: [NotebookTemplateVariableAvailableValuesQueryGroupBy] + + :param search: Search parameters for an available values query. + :type search: NotebookTemplateVariableAvailableValuesQuerySearch + """ + super().__init__(kwargs) + + + self_.data_source = data_source + self_.group_by = group_by + self_.search = search diff --git a/datadog_api_client/v1/model/notebook_template_variable_available_values_query_metrics.py b/datadog_api_client/v1/model/notebook_template_variable_available_values_query_metrics.py new file mode 100644 index 0000000000..8cd9589da0 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_template_variable_available_values_query_metrics.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookTemplateVariableAvailableValuesQueryMetrics(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "data_source": (str,), + "query": (str,), + } + attribute_map = { + "data_source": "data_source", + "query": "query", + } + + def __init__(self_, data_source: str, query: str, **kwargs): + """ + Available values query for the metrics data source. + + :param data_source: The data source for the query. Must be ``metrics``. + :type data_source: str + + :param query: The metrics query string. + :type query: str + """ + super().__init__(kwargs) + + + self_.data_source = data_source + self_.query = query diff --git a/datadog_api_client/v1/model/notebook_template_variable_available_values_query_search.py b/datadog_api_client/v1/model/notebook_template_variable_available_values_query_search.py new file mode 100644 index 0000000000..9a0a188fd5 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_template_variable_available_values_query_search.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookTemplateVariableAvailableValuesQuerySearch(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: str, **kwargs): + """ + Search parameters for an available values query. + + :param query: The search query string. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v1/model/notebook_timeseries_cell_attributes.py b/datadog_api_client/v1/model/notebook_timeseries_cell_attributes.py new file mode 100644 index 0000000000..48765f21b6 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_timeseries_cell_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_split_by import NotebookSplitBy + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookTimeseriesCellAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_split_by import NotebookSplitBy + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + return { + "definition": (TimeseriesWidgetDefinition,), + "graph_size": (NotebookGraphSize,), + "split_by": (NotebookSplitBy,), + "time": (NotebookCellTime,), + } + attribute_map = { + "definition": "definition", + "graph_size": "graph_size", + "split_by": "split_by", + "time": "time", + } + + def __init__(self_, definition: TimeseriesWidgetDefinition, graph_size: Union[NotebookGraphSize, UnsetType]=unset, split_by: Union[NotebookSplitBy, UnsetType]=unset, time: Union[Union[NotebookCellTime, NotebookRelativeTime, NotebookAbsoluteTime], none_type, UnsetType]=unset, **kwargs): + """ + The attributes of a notebook ``timeseries`` cell. + + :param definition: The timeseries visualization allows you to display the evolution of one or more metrics, log events, or Indexed Spans over time. + :type definition: TimeseriesWidgetDefinition + + :param graph_size: The size of the graph. + :type graph_size: NotebookGraphSize, optional + + :param split_by: Object describing how to split the graph to display multiple visualizations per request. + :type split_by: NotebookSplitBy, optional + + :param time: Timeframe for the notebook cell. When 'null', the notebook global time is used. + :type time: NotebookCellTime, none_type, optional + """ + if graph_size is not unset: + kwargs["graph_size"] = graph_size + if split_by is not unset: + kwargs["split_by"] = split_by + if time is not unset: + kwargs["time"] = time + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v1/model/notebook_toplist_cell_attributes.py b/datadog_api_client/v1/model/notebook_toplist_cell_attributes.py new file mode 100644 index 0000000000..72e3402d8b --- /dev/null +++ b/datadog_api_client/v1/model/notebook_toplist_cell_attributes.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.toplist_widget_definition import ToplistWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_split_by import NotebookSplitBy + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + from datadog_api_client.v1.model.toplist_widget_stacked import ToplistWidgetStacked + from datadog_api_client.v1.model.toplist_widget_flat import ToplistWidgetFlat + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookToplistCellAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.toplist_widget_definition import ToplistWidgetDefinition + from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize + from datadog_api_client.v1.model.notebook_split_by import NotebookSplitBy + from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime + return { + "definition": (ToplistWidgetDefinition,), + "graph_size": (NotebookGraphSize,), + "split_by": (NotebookSplitBy,), + "time": (NotebookCellTime,), + } + attribute_map = { + "definition": "definition", + "graph_size": "graph_size", + "split_by": "split_by", + "time": "time", + } + + def __init__(self_, definition: ToplistWidgetDefinition, graph_size: Union[NotebookGraphSize, UnsetType]=unset, split_by: Union[NotebookSplitBy, UnsetType]=unset, time: Union[Union[NotebookCellTime, NotebookRelativeTime, NotebookAbsoluteTime], none_type, UnsetType]=unset, **kwargs): + """ + The attributes of a notebook ``toplist`` cell. + + :param definition: The top list visualization enables you to display a list of Tag value like hostname or service with the most or least of any metric value, such as highest consumers of CPU, hosts with the least disk space, etc. + :type definition: ToplistWidgetDefinition + + :param graph_size: The size of the graph. + :type graph_size: NotebookGraphSize, optional + + :param split_by: Object describing how to split the graph to display multiple visualizations per request. + :type split_by: NotebookSplitBy, optional + + :param time: Timeframe for the notebook cell. When 'null', the notebook global time is used. + :type time: NotebookCellTime, none_type, optional + """ + if graph_size is not unset: + kwargs["graph_size"] = graph_size + if split_by is not unset: + kwargs["split_by"] = split_by + if time is not unset: + kwargs["time"] = time + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v1/model/notebook_update_cell.py b/datadog_api_client/v1/model/notebook_update_cell.py new file mode 100644 index 0000000000..4187cb972b --- /dev/null +++ b/datadog_api_client/v1/model/notebook_update_cell.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookUpdateCell(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Updating a notebook can either insert new cell(s) or update existing cell(s) by including the cell ``id``. + To delete existing cell(s), simply omit it from the list of cells. + + :param attributes: The attributes of a notebook cell in create cell request. Valid cell types are `markdown`, `timeseries`, `toplist`, `heatmap`, `distribution`, + `log_stream`. [More information on each graph visualization type.](https://docs.datadoghq.com/dashboards/widgets/) + :type attributes: NotebookCellCreateRequestAttributes + + :param type: Type of the Notebook Cell resource. + :type type: NotebookCellResourceType + + :param id: Notebook cell ID. + :type id: str + """ + 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.v1.model.notebook_cell_create_request import NotebookCellCreateRequest + from datadog_api_client.v1.model.notebook_cell_update_request import NotebookCellUpdateRequest + return { + "oneOf": [ + NotebookCellCreateRequest, + NotebookCellUpdateRequest, + ], + } diff --git a/datadog_api_client/v1/model/notebook_update_data.py b/datadog_api_client/v1/model/notebook_update_data.py new file mode 100644 index 0000000000..bec2d12003 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_update_data_attributes import NotebookUpdateDataAttributes + from datadog_api_client.v1.model.notebook_resource_type import NotebookResourceType + from datadog_api_client.v1.model.notebook_cell_create_request import NotebookCellCreateRequest + from datadog_api_client.v1.model.notebook_cell_update_request import NotebookCellUpdateRequest + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_update_data_attributes import NotebookUpdateDataAttributes + from datadog_api_client.v1.model.notebook_resource_type import NotebookResourceType + return { + "attributes": (NotebookUpdateDataAttributes,), + "type": (NotebookResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: NotebookUpdateDataAttributes, type: NotebookResourceType, **kwargs): + """ + The data for a notebook update request. + + :param attributes: The data attributes of a notebook. + :type attributes: NotebookUpdateDataAttributes + + :param type: Type of the Notebook resource. + :type type: NotebookResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v1/model/notebook_update_data_attributes.py b/datadog_api_client/v1/model/notebook_update_data_attributes.py new file mode 100644 index 0000000000..e517c255c1 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_update_data_attributes.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_update_cell import NotebookUpdateCell + from datadog_api_client.v1.model.notebook_metadata import NotebookMetadata + from datadog_api_client.v1.model.notebook_status import NotebookStatus + from datadog_api_client.v1.model.notebook_template_variable import NotebookTemplateVariable + from datadog_api_client.v1.model.notebook_global_time import NotebookGlobalTime + from datadog_api_client.v1.model.notebook_cell_create_request import NotebookCellCreateRequest + from datadog_api_client.v1.model.notebook_cell_update_request import NotebookCellUpdateRequest + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookUpdateDataAttributes(ModelNormal): + validations = { + "name": { + "max_length": 80, + "min_length": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_update_cell import NotebookUpdateCell + from datadog_api_client.v1.model.notebook_metadata import NotebookMetadata + from datadog_api_client.v1.model.notebook_status import NotebookStatus + from datadog_api_client.v1.model.notebook_template_variable import NotebookTemplateVariable + from datadog_api_client.v1.model.notebook_global_time import NotebookGlobalTime + return { + "cells": ([NotebookUpdateCell],), + "metadata": (NotebookMetadata,), + "name": (str,), + "status": (NotebookStatus,), + "template_variables": ([NotebookTemplateVariable], none_type), + "time": (NotebookGlobalTime,), + } + attribute_map = { + "cells": "cells", + "metadata": "metadata", + "name": "name", + "status": "status", + "template_variables": "template_variables", + "time": "time", + } + + def __init__(self_, cells: List[Union[NotebookUpdateCell, NotebookCellCreateRequest, NotebookCellUpdateRequest]], name: str, time: Union[NotebookGlobalTime, NotebookRelativeTime, NotebookAbsoluteTime], metadata: Union[NotebookMetadata, UnsetType]=unset, status: Union[NotebookStatus, UnsetType]=unset, template_variables: Union[List[NotebookTemplateVariable], none_type, UnsetType]=unset, **kwargs): + """ + The data attributes of a notebook. + + :param cells: List of cells to display in the notebook. + :type cells: [NotebookUpdateCell] + + :param metadata: Metadata associated with the notebook. + :type metadata: NotebookMetadata, optional + + :param name: The name of the notebook. + :type name: str + + :param status: Publication status of the notebook. For now, always "published". + :type status: NotebookStatus, optional + + :param template_variables: List of template variables for this notebook. + :type template_variables: [NotebookTemplateVariable], none_type, optional + + :param time: Notebook global timeframe. + :type time: NotebookGlobalTime + """ + if metadata is not unset: + kwargs["metadata"] = metadata + if status is not unset: + kwargs["status"] = status + if template_variables is not unset: + kwargs["template_variables"] = template_variables + super().__init__(kwargs) + + + self_.cells = cells + self_.name = name + self_.time = time diff --git a/datadog_api_client/v1/model/notebook_update_request.py b/datadog_api_client/v1/model/notebook_update_request.py new file mode 100644 index 0000000000..f994c13f03 --- /dev/null +++ b/datadog_api_client/v1/model/notebook_update_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_update_data import NotebookUpdateData + from datadog_api_client.v1.model.notebook_cell_create_request import NotebookCellCreateRequest + from datadog_api_client.v1.model.notebook_cell_update_request import NotebookCellUpdateRequest + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebookUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_update_data import NotebookUpdateData + return { + "data": (NotebookUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: NotebookUpdateData, **kwargs): + """ + The description of a notebook update request. + + :param data: The data for a notebook update request. + :type data: NotebookUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v1/model/notebooks_response.py b/datadog_api_client/v1/model/notebooks_response.py new file mode 100644 index 0000000000..246319a601 --- /dev/null +++ b/datadog_api_client/v1/model/notebooks_response.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebooks_response_data import NotebooksResponseData + from datadog_api_client.v1.model.notebooks_response_meta import NotebooksResponseMeta + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebooksResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebooks_response_data import NotebooksResponseData + from datadog_api_client.v1.model.notebooks_response_meta import NotebooksResponseMeta + return { + "data": ([NotebooksResponseData],), + "meta": (NotebooksResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[NotebooksResponseData], UnsetType]=unset, meta: Union[NotebooksResponseMeta, UnsetType]=unset, **kwargs): + """ + Notebooks get all response. + + :param data: List of notebook definitions. + :type data: [NotebooksResponseData], optional + + :param meta: Searches metadata returned by the API. + :type meta: NotebooksResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/notebooks_response_data.py b/datadog_api_client/v1/model/notebooks_response_data.py new file mode 100644 index 0000000000..a56cb2acbd --- /dev/null +++ b/datadog_api_client/v1/model/notebooks_response_data.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebooks_response_data_attributes import NotebooksResponseDataAttributes + from datadog_api_client.v1.model.notebook_resource_type import NotebookResourceType + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebooksResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebooks_response_data_attributes import NotebooksResponseDataAttributes + from datadog_api_client.v1.model.notebook_resource_type import NotebookResourceType + return { + "attributes": (NotebooksResponseDataAttributes,), + "id": (int,), + "type": (NotebookResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: NotebooksResponseDataAttributes, id: int, type: NotebookResourceType, **kwargs): + """ + The data for a notebook in get all response. + + :param attributes: The attributes of a notebook in get all response. + :type attributes: NotebooksResponseDataAttributes + + :param id: Unique notebook ID, assigned when you create the notebook. + :type id: int + + :param type: Type of the Notebook resource. + :type type: NotebookResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v1/model/notebooks_response_data_attributes.py b/datadog_api_client/v1/model/notebooks_response_data_attributes.py new file mode 100644 index 0000000000..50af8d1369 --- /dev/null +++ b/datadog_api_client/v1/model/notebooks_response_data_attributes.py @@ -0,0 +1,134 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebook_author import NotebookAuthor + from datadog_api_client.v1.model.notebook_cell_response import NotebookCellResponse + from datadog_api_client.v1.model.notebook_metadata import NotebookMetadata + from datadog_api_client.v1.model.notebook_status import NotebookStatus + from datadog_api_client.v1.model.notebook_template_variable import NotebookTemplateVariable + from datadog_api_client.v1.model.notebook_global_time import NotebookGlobalTime + from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes + from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes + from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes + from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes + from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes + from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans + from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics + from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime + from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime + +class NotebooksResponseDataAttributes(ModelNormal): + validations = { + "name": { + "max_length": 80, + "min_length": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebook_author import NotebookAuthor + from datadog_api_client.v1.model.notebook_cell_response import NotebookCellResponse + from datadog_api_client.v1.model.notebook_metadata import NotebookMetadata + from datadog_api_client.v1.model.notebook_status import NotebookStatus + from datadog_api_client.v1.model.notebook_template_variable import NotebookTemplateVariable + from datadog_api_client.v1.model.notebook_global_time import NotebookGlobalTime + return { + "author": (NotebookAuthor,), + "cells": ([NotebookCellResponse],), + "created": (datetime,), + "metadata": (NotebookMetadata,), + "modified": (datetime,), + "name": (str,), + "status": (NotebookStatus,), + "template_variables": ([NotebookTemplateVariable], none_type), + "time": (NotebookGlobalTime,), + } + attribute_map = { + "author": "author", + "cells": "cells", + "created": "created", + "metadata": "metadata", + "modified": "modified", + "name": "name", + "status": "status", + "template_variables": "template_variables", + "time": "time", + } + read_only_vars = { + "created", + "modified", + } + + def __init__(self_, name: str, author: Union[NotebookAuthor, UnsetType]=unset, cells: Union[List[NotebookCellResponse], UnsetType]=unset, created: Union[datetime, UnsetType]=unset, metadata: Union[NotebookMetadata, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, status: Union[NotebookStatus, UnsetType]=unset, template_variables: Union[List[NotebookTemplateVariable], none_type, UnsetType]=unset, time: Union[NotebookGlobalTime, NotebookRelativeTime, NotebookAbsoluteTime, UnsetType]=unset, **kwargs): + """ + The attributes of a notebook in get all response. + + :param author: Attributes of user object returned by the API. + :type author: NotebookAuthor, optional + + :param cells: List of cells to display in the notebook. + :type cells: [NotebookCellResponse], optional + + :param created: UTC time stamp for when the notebook was created. + :type created: datetime, optional + + :param metadata: Metadata associated with the notebook. + :type metadata: NotebookMetadata, optional + + :param modified: UTC time stamp for when the notebook was last modified. + :type modified: datetime, optional + + :param name: The name of the notebook. + :type name: str + + :param status: Publication status of the notebook. For now, always "published". + :type status: NotebookStatus, optional + + :param template_variables: List of template variables for this notebook. + :type template_variables: [NotebookTemplateVariable], none_type, optional + + :param time: Notebook global timeframe. + :type time: NotebookGlobalTime, optional + """ + if author is not unset: + kwargs["author"] = author + if cells is not unset: + kwargs["cells"] = cells + if created is not unset: + kwargs["created"] = created + if metadata is not unset: + kwargs["metadata"] = metadata + if modified is not unset: + kwargs["modified"] = modified + if status is not unset: + kwargs["status"] = status + if template_variables is not unset: + kwargs["template_variables"] = template_variables + if time is not unset: + kwargs["time"] = time + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v1/model/notebooks_response_meta.py b/datadog_api_client/v1/model/notebooks_response_meta.py new file mode 100644 index 0000000000..c3654f90c4 --- /dev/null +++ b/datadog_api_client/v1/model/notebooks_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.notebooks_response_page import NotebooksResponsePage + +class NotebooksResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.notebooks_response_page import NotebooksResponsePage + return { + "page": (NotebooksResponsePage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[NotebooksResponsePage, UnsetType]=unset, **kwargs): + """ + Searches metadata returned by the API. + + :param page: Pagination metadata returned by the API. + :type page: NotebooksResponsePage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/notebooks_response_page.py b/datadog_api_client/v1/model/notebooks_response_page.py new file mode 100644 index 0000000000..6fdef04281 --- /dev/null +++ b/datadog_api_client/v1/model/notebooks_response_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebooksResponsePage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata returned by the API. + + :param total_count: The total number of notebooks that would be returned if the request was not filtered by ``start`` and ``count`` parameters. + :type total_count: int, optional + + :param total_filtered_count: The total number of notebooks returned. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/notify_end_state.py b/datadog_api_client/v1/model/notify_end_state.py new file mode 100644 index 0000000000..f91d1c01e2 --- /dev/null +++ b/datadog_api_client/v1/model/notify_end_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotifyEndState(ModelSimple): + """ + A notification end state. + + :param value: Must be one of ["alert", "no data", "warn"]. + :type value: str + """ + + allowed_values = { + "alert", + "no data", + "warn", + } + ALERT: ClassVar["NotifyEndState"] + NO_DATA: ClassVar["NotifyEndState"] + WARN: ClassVar["NotifyEndState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotifyEndState.ALERT = NotifyEndState("alert") +NotifyEndState.NO_DATA = NotifyEndState("no data") +NotifyEndState.WARN = NotifyEndState("warn") diff --git a/datadog_api_client/v1/model/notify_end_type.py b/datadog_api_client/v1/model/notify_end_type.py new file mode 100644 index 0000000000..7e20e41869 --- /dev/null +++ b/datadog_api_client/v1/model/notify_end_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotifyEndType(ModelSimple): + """ + A notification end type. + + :param value: Must be one of ["canceled", "expired"]. + :type value: str + """ + + allowed_values = { + "canceled", + "expired", + } + CANCELED: ClassVar["NotifyEndType"] + EXPIRED: ClassVar["NotifyEndType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotifyEndType.CANCELED = NotifyEndType("canceled") +NotifyEndType.EXPIRED = NotifyEndType("expired") diff --git a/datadog_api_client/v1/model/number_format_unit.py b/datadog_api_client/v1/model/number_format_unit.py new file mode 100644 index 0000000000..bb6cf335f8 --- /dev/null +++ b/datadog_api_client/v1/model/number_format_unit.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NumberFormatUnit(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Number format unit. + + :param per_unit_name: The name of the unit per item. + :type per_unit_name: str, optional + + :param type: The type of unit scale. + :type type: NumberFormatUnitScaleType, optional + + :param unit_name: The name of the unit. + :type unit_name: str, optional + + :param label: The label for the custom unit. + :type label: str, 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.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + return { + "oneOf": [ + NumberFormatUnitCanonical, + NumberFormatUnitCustom, + ], + } diff --git a/datadog_api_client/v1/model/number_format_unit_canonical.py b/datadog_api_client/v1/model/number_format_unit_canonical.py new file mode 100644 index 0000000000..b742c9fcc8 --- /dev/null +++ b/datadog_api_client/v1/model/number_format_unit_canonical.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.number_format_unit_scale_type import NumberFormatUnitScaleType + +class NumberFormatUnitCanonical(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.number_format_unit_scale_type import NumberFormatUnitScaleType + return { + "per_unit_name": (str,), + "type": (NumberFormatUnitScaleType,), + "unit_name": (str,), + } + attribute_map = { + "per_unit_name": "per_unit_name", + "type": "type", + "unit_name": "unit_name", + } + + def __init__(self_, per_unit_name: Union[str, UnsetType]=unset, type: Union[NumberFormatUnitScaleType, UnsetType]=unset, unit_name: Union[str, UnsetType]=unset, **kwargs): + """ + Canonical unit. + + :param per_unit_name: The name of the unit per item. + :type per_unit_name: str, optional + + :param type: The type of unit scale. + :type type: NumberFormatUnitScaleType, optional + + :param unit_name: The name of the unit. + :type unit_name: str, optional + """ + if per_unit_name is not unset: + kwargs["per_unit_name"] = per_unit_name + if type is not unset: + kwargs["type"] = type + if unit_name is not unset: + kwargs["unit_name"] = unit_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/number_format_unit_custom.py b/datadog_api_client/v1/model/number_format_unit_custom.py new file mode 100644 index 0000000000..e5efeec1e4 --- /dev/null +++ b/datadog_api_client/v1/model/number_format_unit_custom.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.number_format_unit_custom_type import NumberFormatUnitCustomType + +class NumberFormatUnitCustom(ModelNormal): + validations = { + "label": { + "max_length": 12, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.number_format_unit_custom_type import NumberFormatUnitCustomType + return { + "label": (str,), + "type": (NumberFormatUnitCustomType,), + } + attribute_map = { + "label": "label", + "type": "type", + } + + def __init__(self_, label: Union[str, UnsetType]=unset, type: Union[NumberFormatUnitCustomType, UnsetType]=unset, **kwargs): + """ + Custom unit. + + :param label: The label for the custom unit. + :type label: str, optional + + :param type: The type of custom unit. + :type type: NumberFormatUnitCustomType, optional + """ + if label is not unset: + kwargs["label"] = label + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/number_format_unit_custom_type.py b/datadog_api_client/v1/model/number_format_unit_custom_type.py new file mode 100644 index 0000000000..2edbf0634e --- /dev/null +++ b/datadog_api_client/v1/model/number_format_unit_custom_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NumberFormatUnitCustomType(ModelSimple): + """ + The type of custom unit. + + :param value: If omitted defaults to "custom_unit_label". Must be one of ["custom_unit_label"]. + :type value: str + """ + + allowed_values = { + "custom_unit_label", + } + CUSTOM_UNIT_LABEL: ClassVar["NumberFormatUnitCustomType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NumberFormatUnitCustomType.CUSTOM_UNIT_LABEL = NumberFormatUnitCustomType("custom_unit_label") diff --git a/datadog_api_client/v1/model/number_format_unit_scale.py b/datadog_api_client/v1/model/number_format_unit_scale.py new file mode 100644 index 0000000000..15fadd6565 --- /dev/null +++ b/datadog_api_client/v1/model/number_format_unit_scale.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.number_format_unit_scale_type import NumberFormatUnitScaleType + +class NumberFormatUnitScale(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.number_format_unit_scale_type import NumberFormatUnitScaleType + return { + "type": (NumberFormatUnitScaleType,), + "unit_name": (str,), + } + attribute_map = { + "type": "type", + "unit_name": "unit_name", + } + + def __init__(self_, type: Union[NumberFormatUnitScaleType, UnsetType]=unset, unit_name: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``NumberFormatUnitScale`` object. + + :param type: The type of unit scale. + :type type: NumberFormatUnitScaleType, optional + + :param unit_name: The name of the unit. + :type unit_name: str, optional + """ + if type is not unset: + kwargs["type"] = type + if unit_name is not unset: + kwargs["unit_name"] = unit_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/number_format_unit_scale_type.py b/datadog_api_client/v1/model/number_format_unit_scale_type.py new file mode 100644 index 0000000000..7438d59266 --- /dev/null +++ b/datadog_api_client/v1/model/number_format_unit_scale_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NumberFormatUnitScaleType(ModelSimple): + """ + The type of unit scale. + + :param value: If omitted defaults to "canonical_unit". Must be one of ["canonical_unit"]. + :type value: str + """ + + allowed_values = { + "canonical_unit", + } + CANONICAL_UNIT: ClassVar["NumberFormatUnitScaleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NumberFormatUnitScaleType.CANONICAL_UNIT = NumberFormatUnitScaleType("canonical_unit") diff --git a/datadog_api_client/v1/model/on_missing_data_option.py b/datadog_api_client/v1/model/on_missing_data_option.py new file mode 100644 index 0000000000..bc446a8d37 --- /dev/null +++ b/datadog_api_client/v1/model/on_missing_data_option.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OnMissingDataOption(ModelSimple): + """ + Controls how groups or monitors are treated if an evaluation does not return any data points. + The default option results in different behavior depending on the monitor query type. + For monitors using Count queries, an empty monitor evaluation is treated as 0 and is compared to the threshold conditions. + For monitors using any query type other than Count, for example Gauge, Measure, or Rate, the monitor shows the last known status. + This option is available for APM Trace Analytics, Audit Trail, CI, Error Tracking, Event, Logs, and RUM monitors. + It is also required for metric monitors that use `scheduling_options.custom_schedule`. + + :param value: Must be one of ["default", "show_no_data", "show_and_notify_no_data", "resolve"]. + :type value: str + """ + + allowed_values = { + "default", + "show_no_data", + "show_and_notify_no_data", + "resolve", + } + DEFAULT: ClassVar["OnMissingDataOption"] + SHOW_NO_DATA: ClassVar["OnMissingDataOption"] + SHOW_AND_NOTIFY_NO_DATA: ClassVar["OnMissingDataOption"] + RESOLVE: ClassVar["OnMissingDataOption"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OnMissingDataOption.DEFAULT = OnMissingDataOption("default") +OnMissingDataOption.SHOW_NO_DATA = OnMissingDataOption("show_no_data") +OnMissingDataOption.SHOW_AND_NOTIFY_NO_DATA = OnMissingDataOption("show_and_notify_no_data") +OnMissingDataOption.RESOLVE = OnMissingDataOption("resolve") diff --git a/datadog_api_client/v1/model/org_downgraded_response.py b/datadog_api_client/v1/model/org_downgraded_response.py new file mode 100644 index 0000000000..9dc3249ef1 --- /dev/null +++ b/datadog_api_client/v1/model/org_downgraded_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgDowngradedResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": (str,), + } + attribute_map = { + "message": "message", + } + + def __init__(self_, message: Union[str, UnsetType]=unset, **kwargs): + """ + Status of downgrade + + :param message: Information pertaining to the downgraded child organization. + :type message: str, optional + """ + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization.py b/datadog_api_client/v1/model/organization.py new file mode 100644 index 0000000000..e18ac56444 --- /dev/null +++ b/datadog_api_client/v1/model/organization.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.organization_billing import OrganizationBilling + from datadog_api_client.v1.model.organization_settings import OrganizationSettings + from datadog_api_client.v1.model.organization_subscription import OrganizationSubscription + +class Organization(ModelNormal): + validations = { + "name": { + "max_length": 32, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.organization_billing import OrganizationBilling + from datadog_api_client.v1.model.organization_settings import OrganizationSettings + from datadog_api_client.v1.model.organization_subscription import OrganizationSubscription + return { + "billing": (OrganizationBilling,), + "created": (str,), + "description": (str,), + "name": (str,), + "public_id": (str,), + "settings": (OrganizationSettings,), + "subscription": (OrganizationSubscription,), + "trial": (bool,), + } + attribute_map = { + "billing": "billing", + "created": "created", + "description": "description", + "name": "name", + "public_id": "public_id", + "settings": "settings", + "subscription": "subscription", + "trial": "trial", + } + read_only_vars = { + "created", + } + + def __init__(self_, billing: Union[OrganizationBilling, UnsetType]=unset, created: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, settings: Union[OrganizationSettings, UnsetType]=unset, subscription: Union[OrganizationSubscription, UnsetType]=unset, trial: Union[bool, UnsetType]=unset, **kwargs): + """ + Create, edit, and manage organizations. + + :param billing: A JSON array of billing type. **Deprecated**. + :type billing: OrganizationBilling, optional + + :param created: Date of the organization creation. + :type created: str, optional + + :param description: Description of the organization. + :type description: str, optional + + :param name: The name of the child organization, limited to 32 characters. + :type name: str, optional + + :param public_id: The ``public_id`` of the organization you are operating within. + :type public_id: str, optional + + :param settings: A JSON array of settings. + :type settings: OrganizationSettings, optional + + :param subscription: Subscription definition. **Deprecated**. + :type subscription: OrganizationSubscription, optional + + :param trial: Only available for MSP customers. Allows child organizations to be created on a trial plan. + :type trial: bool, optional + """ + if billing is not unset: + kwargs["billing"] = billing + if created is not unset: + kwargs["created"] = created + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if public_id is not unset: + kwargs["public_id"] = public_id + if settings is not unset: + kwargs["settings"] = settings + if subscription is not unset: + kwargs["subscription"] = subscription + if trial is not unset: + kwargs["trial"] = trial + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_billing.py b/datadog_api_client/v1/model/organization_billing.py new file mode 100644 index 0000000000..a14c982c51 --- /dev/null +++ b/datadog_api_client/v1/model/organization_billing.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrganizationBilling(ModelNormal): + @cached_property + def openapi_types(_): + return { + "type": (str,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: Union[str, UnsetType]=unset, **kwargs): + """ + A JSON array of billing type. + + :param type: The type of billing. Only ``parent_billing`` is supported. + :type type: str, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_create_body.py b/datadog_api_client/v1/model/organization_create_body.py new file mode 100644 index 0000000000..6d9072c7b8 --- /dev/null +++ b/datadog_api_client/v1/model/organization_create_body.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.organization_billing import OrganizationBilling + from datadog_api_client.v1.model.organization_subscription import OrganizationSubscription + +class OrganizationCreateBody(ModelNormal): + validations = { + "name": { + "max_length": 32, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.organization_billing import OrganizationBilling + from datadog_api_client.v1.model.organization_subscription import OrganizationSubscription + return { + "billing": (OrganizationBilling,), + "name": (str,), + "subscription": (OrganizationSubscription,), + } + attribute_map = { + "billing": "billing", + "name": "name", + "subscription": "subscription", + } + + def __init__(self_, name: str, billing: Union[OrganizationBilling, UnsetType]=unset, subscription: Union[OrganizationSubscription, UnsetType]=unset, **kwargs): + """ + Object describing an organization to create. + + :param billing: A JSON array of billing type. **Deprecated**. + :type billing: OrganizationBilling, optional + + :param name: The name of the new child-organization, limited to 32 characters. + :type name: str + + :param subscription: Subscription definition. **Deprecated**. + :type subscription: OrganizationSubscription, optional + """ + if billing is not unset: + kwargs["billing"] = billing + if subscription is not unset: + kwargs["subscription"] = subscription + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v1/model/organization_create_response.py b/datadog_api_client/v1/model/organization_create_response.py new file mode 100644 index 0000000000..0db80ae0ec --- /dev/null +++ b/datadog_api_client/v1/model/organization_create_response.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.api_key import ApiKey + from datadog_api_client.v1.model.application_key import ApplicationKey + from datadog_api_client.v1.model.organization import Organization + from datadog_api_client.v1.model.user import User + +class OrganizationCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.api_key import ApiKey + from datadog_api_client.v1.model.application_key import ApplicationKey + from datadog_api_client.v1.model.organization import Organization + from datadog_api_client.v1.model.user import User + return { + "api_key": (ApiKey,), + "application_key": (ApplicationKey,), + "org": (Organization,), + "user": (User,), + } + attribute_map = { + "api_key": "api_key", + "application_key": "application_key", + "org": "org", + "user": "user", + } + + def __init__(self_, api_key: Union[ApiKey, UnsetType]=unset, application_key: Union[ApplicationKey, UnsetType]=unset, org: Union[Organization, UnsetType]=unset, user: Union[User, UnsetType]=unset, **kwargs): + """ + Response object for an organization creation. + + :param api_key: Datadog API key. + :type api_key: ApiKey, optional + + :param application_key: An application key with its associated metadata. + :type application_key: ApplicationKey, optional + + :param org: Create, edit, and manage organizations. + :type org: Organization, optional + + :param user: Create, edit, and disable users. + :type user: User, optional + """ + if api_key is not unset: + kwargs["api_key"] = api_key + if application_key is not unset: + kwargs["application_key"] = application_key + if org is not unset: + kwargs["org"] = org + if user is not unset: + kwargs["user"] = user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_list_response.py b/datadog_api_client/v1/model/organization_list_response.py new file mode 100644 index 0000000000..0de05c9894 --- /dev/null +++ b/datadog_api_client/v1/model/organization_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.organization import Organization + +class OrganizationListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.organization import Organization + return { + "orgs": ([Organization],), + } + attribute_map = { + "orgs": "orgs", + } + + def __init__(self_, orgs: Union[List[Organization], UnsetType]=unset, **kwargs): + """ + Response with the list of organizations. + + :param orgs: Array of organization objects. + :type orgs: [Organization], optional + """ + if orgs is not unset: + kwargs["orgs"] = orgs + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_response.py b/datadog_api_client/v1/model/organization_response.py new file mode 100644 index 0000000000..dc49220e61 --- /dev/null +++ b/datadog_api_client/v1/model/organization_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.organization import Organization + +class OrganizationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.organization import Organization + return { + "org": (Organization,), + } + attribute_map = { + "org": "org", + } + + def __init__(self_, org: Union[Organization, UnsetType]=unset, **kwargs): + """ + Response with an organization. + + :param org: Create, edit, and manage organizations. + :type org: Organization, optional + """ + if org is not unset: + kwargs["org"] = org + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_settings.py b/datadog_api_client/v1/model/organization_settings.py new file mode 100644 index 0000000000..5a368967e1 --- /dev/null +++ b/datadog_api_client/v1/model/organization_settings.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.organization_settings_saml import OrganizationSettingsSaml + from datadog_api_client.v1.model.access_role import AccessRole + from datadog_api_client.v1.model.organization_settings_saml_autocreate_users_domains import OrganizationSettingsSamlAutocreateUsersDomains + from datadog_api_client.v1.model.organization_settings_saml_idp_initiated_login import OrganizationSettingsSamlIdpInitiatedLogin + from datadog_api_client.v1.model.organization_settings_saml_strict_mode import OrganizationSettingsSamlStrictMode + +class OrganizationSettings(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.organization_settings_saml import OrganizationSettingsSaml + from datadog_api_client.v1.model.access_role import AccessRole + from datadog_api_client.v1.model.organization_settings_saml_autocreate_users_domains import OrganizationSettingsSamlAutocreateUsersDomains + from datadog_api_client.v1.model.organization_settings_saml_idp_initiated_login import OrganizationSettingsSamlIdpInitiatedLogin + from datadog_api_client.v1.model.organization_settings_saml_strict_mode import OrganizationSettingsSamlStrictMode + return { + "private_widget_share": (bool,), + "saml": (OrganizationSettingsSaml,), + "saml_autocreate_access_role": (AccessRole,), + "saml_autocreate_users_domains": (OrganizationSettingsSamlAutocreateUsersDomains,), + "saml_can_be_enabled": (bool,), + "saml_idp_endpoint": (str,), + "saml_idp_initiated_login": (OrganizationSettingsSamlIdpInitiatedLogin,), + "saml_idp_metadata_uploaded": (bool,), + "saml_login_url": (str,), + "saml_strict_mode": (OrganizationSettingsSamlStrictMode,), + } + attribute_map = { + "private_widget_share": "private_widget_share", + "saml": "saml", + "saml_autocreate_access_role": "saml_autocreate_access_role", + "saml_autocreate_users_domains": "saml_autocreate_users_domains", + "saml_can_be_enabled": "saml_can_be_enabled", + "saml_idp_endpoint": "saml_idp_endpoint", + "saml_idp_initiated_login": "saml_idp_initiated_login", + "saml_idp_metadata_uploaded": "saml_idp_metadata_uploaded", + "saml_login_url": "saml_login_url", + "saml_strict_mode": "saml_strict_mode", + } + + def __init__(self_, private_widget_share: Union[bool, UnsetType]=unset, saml: Union[OrganizationSettingsSaml, UnsetType]=unset, saml_autocreate_access_role: Union[AccessRole, none_type, UnsetType]=unset, saml_autocreate_users_domains: Union[OrganizationSettingsSamlAutocreateUsersDomains, UnsetType]=unset, saml_can_be_enabled: Union[bool, UnsetType]=unset, saml_idp_endpoint: Union[str, UnsetType]=unset, saml_idp_initiated_login: Union[OrganizationSettingsSamlIdpInitiatedLogin, UnsetType]=unset, saml_idp_metadata_uploaded: Union[bool, UnsetType]=unset, saml_login_url: Union[str, UnsetType]=unset, saml_strict_mode: Union[OrganizationSettingsSamlStrictMode, UnsetType]=unset, **kwargs): + """ + A JSON array of settings. + + :param private_widget_share: Whether or not the organization users can share widgets outside of Datadog. + :type private_widget_share: bool, optional + + :param saml: Set the boolean property enabled to enable or disable single sign on with SAML. + See the SAML documentation for more information about all SAML settings. + :type saml: OrganizationSettingsSaml, optional + + :param saml_autocreate_access_role: The access role of the user. Options are **st** (standard user), **adm** (admin user), or **ro** (read-only user). + :type saml_autocreate_access_role: AccessRole, none_type, optional + + :param saml_autocreate_users_domains: Has two properties, ``enabled`` (boolean) and ``domains`` , which is a list of domains without the @ symbol. + :type saml_autocreate_users_domains: OrganizationSettingsSamlAutocreateUsersDomains, optional + + :param saml_can_be_enabled: Whether or not SAML can be enabled for this organization. + :type saml_can_be_enabled: bool, optional + + :param saml_idp_endpoint: Identity provider endpoint for SAML authentication. + :type saml_idp_endpoint: str, optional + + :param saml_idp_initiated_login: Has one property enabled (boolean). + :type saml_idp_initiated_login: OrganizationSettingsSamlIdpInitiatedLogin, optional + + :param saml_idp_metadata_uploaded: Whether or not a SAML identity provider metadata file was provided to the Datadog organization. + :type saml_idp_metadata_uploaded: bool, optional + + :param saml_login_url: URL for SAML logging. + :type saml_login_url: str, optional + + :param saml_strict_mode: Has one property enabled (boolean). + :type saml_strict_mode: OrganizationSettingsSamlStrictMode, optional + """ + if private_widget_share is not unset: + kwargs["private_widget_share"] = private_widget_share + if saml is not unset: + kwargs["saml"] = saml + if saml_autocreate_access_role is not unset: + kwargs["saml_autocreate_access_role"] = saml_autocreate_access_role + if saml_autocreate_users_domains is not unset: + kwargs["saml_autocreate_users_domains"] = saml_autocreate_users_domains + if saml_can_be_enabled is not unset: + kwargs["saml_can_be_enabled"] = saml_can_be_enabled + if saml_idp_endpoint is not unset: + kwargs["saml_idp_endpoint"] = saml_idp_endpoint + if saml_idp_initiated_login is not unset: + kwargs["saml_idp_initiated_login"] = saml_idp_initiated_login + if saml_idp_metadata_uploaded is not unset: + kwargs["saml_idp_metadata_uploaded"] = saml_idp_metadata_uploaded + if saml_login_url is not unset: + kwargs["saml_login_url"] = saml_login_url + if saml_strict_mode is not unset: + kwargs["saml_strict_mode"] = saml_strict_mode + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_settings_saml.py b/datadog_api_client/v1/model/organization_settings_saml.py new file mode 100644 index 0000000000..3dfd9ab079 --- /dev/null +++ b/datadog_api_client/v1/model/organization_settings_saml.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrganizationSettingsSaml(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + } + attribute_map = { + "enabled": "enabled", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Set the boolean property enabled to enable or disable single sign on with SAML. + See the SAML documentation for more information about all SAML settings. + + :param enabled: Whether or not SAML is enabled for this organization. + :type enabled: bool, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_settings_saml_autocreate_users_domains.py b/datadog_api_client/v1/model/organization_settings_saml_autocreate_users_domains.py new file mode 100644 index 0000000000..e68b71fdcc --- /dev/null +++ b/datadog_api_client/v1/model/organization_settings_saml_autocreate_users_domains.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrganizationSettingsSamlAutocreateUsersDomains(ModelNormal): + @cached_property + def openapi_types(_): + return { + "domains": ([str],), + "enabled": (bool,), + } + attribute_map = { + "domains": "domains", + "enabled": "enabled", + } + + def __init__(self_, domains: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Has two properties, ``enabled`` (boolean) and ``domains`` , which is a list of domains without the @ symbol. + + :param domains: List of domains where the SAML automated user creation is enabled. + :type domains: [str], optional + + :param enabled: Whether or not the automated user creation based on SAML domain is enabled. + :type enabled: bool, optional + """ + if domains is not unset: + kwargs["domains"] = domains + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_settings_saml_idp_initiated_login.py b/datadog_api_client/v1/model/organization_settings_saml_idp_initiated_login.py new file mode 100644 index 0000000000..724c60f0da --- /dev/null +++ b/datadog_api_client/v1/model/organization_settings_saml_idp_initiated_login.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrganizationSettingsSamlIdpInitiatedLogin(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + } + attribute_map = { + "enabled": "enabled", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Has one property enabled (boolean). + + :param enabled: Whether SAML IdP initiated login is enabled, learn more + in the `SAML documentation `_. + :type enabled: bool, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_settings_saml_strict_mode.py b/datadog_api_client/v1/model/organization_settings_saml_strict_mode.py new file mode 100644 index 0000000000..a85e12847b --- /dev/null +++ b/datadog_api_client/v1/model/organization_settings_saml_strict_mode.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrganizationSettingsSamlStrictMode(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + } + attribute_map = { + "enabled": "enabled", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Has one property enabled (boolean). + + :param enabled: Whether or not the SAML strict mode is enabled. If true, all users must log in with SAML. + Learn more on the `SAML Strict documentation `_. + :type enabled: bool, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/organization_subscription.py b/datadog_api_client/v1/model/organization_subscription.py new file mode 100644 index 0000000000..6a338a41bb --- /dev/null +++ b/datadog_api_client/v1/model/organization_subscription.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrganizationSubscription(ModelNormal): + @cached_property + def openapi_types(_): + return { + "type": (str,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: Union[str, UnsetType]=unset, **kwargs): + """ + Subscription definition. + + :param type: The subscription type. Types available are ``trial`` , ``free`` , and ``pro``. + :type type: str, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/pager_duty_service.py b/datadog_api_client/v1/model/pager_duty_service.py new file mode 100644 index 0000000000..0cfa4e928e --- /dev/null +++ b/datadog_api_client/v1/model/pager_duty_service.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PagerDutyService(ModelNormal): + @cached_property + def openapi_types(_): + return { + "service_key": (str,), + "service_name": (str,), + } + attribute_map = { + "service_key": "service_key", + "service_name": "service_name", + } + + def __init__(self_, service_key: str, service_name: str, **kwargs): + """ + The PagerDuty service that is available for integration with Datadog. + + :param service_key: Your service key in PagerDuty. + :type service_key: str + + :param service_name: Your service name associated with a service key in PagerDuty. + :type service_name: str + """ + super().__init__(kwargs) + + + self_.service_key = service_key + self_.service_name = service_name diff --git a/datadog_api_client/v1/model/pager_duty_service_key.py b/datadog_api_client/v1/model/pager_duty_service_key.py new file mode 100644 index 0000000000..ace91cb31c --- /dev/null +++ b/datadog_api_client/v1/model/pager_duty_service_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PagerDutyServiceKey(ModelNormal): + @cached_property + def openapi_types(_): + return { + "service_key": (str,), + } + attribute_map = { + "service_key": "service_key", + } + + def __init__(self_, service_key: str, **kwargs): + """ + PagerDuty service object key. + + :param service_key: Your service key in PagerDuty. + :type service_key: str + """ + super().__init__(kwargs) + + + self_.service_key = service_key diff --git a/datadog_api_client/v1/model/pager_duty_service_name.py b/datadog_api_client/v1/model/pager_duty_service_name.py new file mode 100644 index 0000000000..d410d6c506 --- /dev/null +++ b/datadog_api_client/v1/model/pager_duty_service_name.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PagerDutyServiceName(ModelNormal): + @cached_property + def openapi_types(_): + return { + "service_name": (str,), + } + attribute_map = { + "service_name": "service_name", + } + + def __init__(self_, service_name: str, **kwargs): + """ + PagerDuty service object name. + + :param service_name: Your service name associated service key in PagerDuty. + :type service_name: str + """ + super().__init__(kwargs) + + + self_.service_name = service_name diff --git a/datadog_api_client/v1/model/pagination.py b/datadog_api_client/v1/model/pagination.py new file mode 100644 index 0000000000..748b085872 --- /dev/null +++ b/datadog_api_client/v1/model/pagination.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Pagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination object. + + :param total_count: Total count. + :type total_count: int, optional + + :param total_filtered_count: Total count of elements matched by the filter. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/point.py b/datadog_api_client/v1/model/point.py new file mode 100644 index 0000000000..d221b8daab --- /dev/null +++ b/datadog_api_client/v1/model/point.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Point(ModelSimple): + """ + Array of timeseries points. + + + :type value: [float, none_type] + """ + + + validations = { + "value": { + "max_items": 2, + "min_items": 2, + }, + } + + @cached_property + def openapi_types(_): + return { + "value": ([float, none_type],), + } diff --git a/datadog_api_client/v1/model/point_plot_dimension.py b/datadog_api_client/v1/model/point_plot_dimension.py new file mode 100644 index 0000000000..eafdc5843e --- /dev/null +++ b/datadog_api_client/v1/model/point_plot_dimension.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PointPlotDimension(ModelSimple): + """ + Dimension of the point plot. + + :param value: Must be one of ["group", "time", "y", "radius"]. + :type value: str + """ + + allowed_values = { + "group", + "time", + "y", + "radius", + } + GROUP: ClassVar["PointPlotDimension"] + TIME: ClassVar["PointPlotDimension"] + Y: ClassVar["PointPlotDimension"] + RADIUS: ClassVar["PointPlotDimension"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PointPlotDimension.GROUP = PointPlotDimension("group") +PointPlotDimension.TIME = PointPlotDimension("time") +PointPlotDimension.Y = PointPlotDimension("y") +PointPlotDimension.RADIUS = PointPlotDimension("radius") diff --git a/datadog_api_client/v1/model/point_plot_projection.py b/datadog_api_client/v1/model/point_plot_projection.py new file mode 100644 index 0000000000..9f2121a687 --- /dev/null +++ b/datadog_api_client/v1/model/point_plot_projection.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.point_plot_projection_dimension import PointPlotProjectionDimension + from datadog_api_client.v1.model.point_plot_projection_type import PointPlotProjectionType + +class PointPlotProjection(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.point_plot_projection_dimension import PointPlotProjectionDimension + from datadog_api_client.v1.model.point_plot_projection_type import PointPlotProjectionType + return { + "dimensions": ([PointPlotProjectionDimension],), + "extra_columns": ([str],), + "type": (PointPlotProjectionType,), + } + attribute_map = { + "dimensions": "dimensions", + "extra_columns": "extra_columns", + "type": "type", + } + + def __init__(self_, dimensions: List[PointPlotProjectionDimension], type: PointPlotProjectionType, extra_columns: Union[List[str], UnsetType]=unset, **kwargs): + """ + Projection configuration for the point plot widget. + + :param dimensions: List of dimension mappings for the projection. + :type dimensions: [PointPlotProjectionDimension] + + :param extra_columns: Additional columns to include in the projection. + :type extra_columns: [str], optional + + :param type: Type of the projection. + :type type: PointPlotProjectionType + """ + if extra_columns is not unset: + kwargs["extra_columns"] = extra_columns + super().__init__(kwargs) + + + self_.dimensions = dimensions + self_.type = type diff --git a/datadog_api_client/v1/model/point_plot_projection_dimension.py b/datadog_api_client/v1/model/point_plot_projection_dimension.py new file mode 100644 index 0000000000..920229a30f --- /dev/null +++ b/datadog_api_client/v1/model/point_plot_projection_dimension.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.point_plot_dimension import PointPlotDimension + +class PointPlotProjectionDimension(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.point_plot_dimension import PointPlotDimension + return { + "alias": (str,), + "column": (str,), + "dimension": (PointPlotDimension,), + } + attribute_map = { + "alias": "alias", + "column": "column", + "dimension": "dimension", + } + + def __init__(self_, column: str, dimension: PointPlotDimension, alias: Union[str, UnsetType]=unset, **kwargs): + """ + Dimension mapping for the point plot projection. + + :param alias: Alias for the column. + :type alias: str, optional + + :param column: Source column name from the dataset. + :type column: str + + :param dimension: Dimension of the point plot. + :type dimension: PointPlotDimension + """ + if alias is not unset: + kwargs["alias"] = alias + super().__init__(kwargs) + + + self_.column = column + self_.dimension = dimension diff --git a/datadog_api_client/v1/model/point_plot_projection_type.py b/datadog_api_client/v1/model/point_plot_projection_type.py new file mode 100644 index 0000000000..2b7e12f8d2 --- /dev/null +++ b/datadog_api_client/v1/model/point_plot_projection_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PointPlotProjectionType(ModelSimple): + """ + Type of the projection. + + :param value: If omitted defaults to "point_plot". Must be one of ["point_plot"]. + :type value: str + """ + + allowed_values = { + "point_plot", + } + POINT_PLOT: ClassVar["PointPlotProjectionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PointPlotProjectionType.POINT_PLOT = PointPlotProjectionType("point_plot") diff --git a/datadog_api_client/v1/model/point_plot_widget_definition.py b/datadog_api_client/v1/model/point_plot_widget_definition.py new file mode 100644 index 0000000000..6b0cb349e2 --- /dev/null +++ b/datadog_api_client/v1/model/point_plot_widget_definition.py @@ -0,0 +1,134 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.point_plot_widget_legend import PointPlotWidgetLegend + from datadog_api_client.v1.model.widget_marker import WidgetMarker + from datadog_api_client.v1.model.point_plot_widget_request import PointPlotWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.point_plot_widget_definition_type import PointPlotWidgetDefinitionType + from datadog_api_client.v1.model.widget_axis import WidgetAxis + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class PointPlotWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.point_plot_widget_legend import PointPlotWidgetLegend + from datadog_api_client.v1.model.widget_marker import WidgetMarker + from datadog_api_client.v1.model.point_plot_widget_request import PointPlotWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.point_plot_widget_definition_type import PointPlotWidgetDefinitionType + from datadog_api_client.v1.model.widget_axis import WidgetAxis + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "legend": (PointPlotWidgetLegend,), + "markers": ([WidgetMarker],), + "requests": ([PointPlotWidgetRequest],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (PointPlotWidgetDefinitionType,), + "yaxis": (WidgetAxis,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "legend": "legend", + "markers": "markers", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "yaxis": "yaxis", + } + + def __init__(self_, requests: List[PointPlotWidgetRequest], type: PointPlotWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, legend: Union[PointPlotWidgetLegend, UnsetType]=unset, markers: Union[List[WidgetMarker], UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, yaxis: Union[WidgetAxis, UnsetType]=unset, **kwargs): + """ + The point plot displays individual data points over time. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param legend: Legend configuration for the point plot widget. + :type legend: PointPlotWidgetLegend, optional + + :param markers: List of markers for the widget. + :type markers: [WidgetMarker], optional + + :param requests: List of request configurations for the widget. + :type requests: [PointPlotWidgetRequest] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the point plot widget. + :type type: PointPlotWidgetDefinitionType + + :param yaxis: Axis controls for the widget. + :type yaxis: WidgetAxis, optional + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if legend is not unset: + kwargs["legend"] = legend + if markers is not unset: + kwargs["markers"] = markers + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + if yaxis is not unset: + kwargs["yaxis"] = yaxis + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/point_plot_widget_definition_type.py b/datadog_api_client/v1/model/point_plot_widget_definition_type.py new file mode 100644 index 0000000000..327cb01519 --- /dev/null +++ b/datadog_api_client/v1/model/point_plot_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PointPlotWidgetDefinitionType(ModelSimple): + """ + Type of the point plot widget. + + :param value: If omitted defaults to "point_plot". Must be one of ["point_plot"]. + :type value: str + """ + + allowed_values = { + "point_plot", + } + POINT_PLOT: ClassVar["PointPlotWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PointPlotWidgetDefinitionType.POINT_PLOT = PointPlotWidgetDefinitionType("point_plot") diff --git a/datadog_api_client/v1/model/point_plot_widget_legend.py b/datadog_api_client/v1/model/point_plot_widget_legend.py new file mode 100644 index 0000000000..65851261bc --- /dev/null +++ b/datadog_api_client/v1/model/point_plot_widget_legend.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.point_plot_widget_legend_type import PointPlotWidgetLegendType + +class PointPlotWidgetLegend(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.point_plot_widget_legend_type import PointPlotWidgetLegendType + return { + "type": (PointPlotWidgetLegendType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: PointPlotWidgetLegendType, **kwargs): + """ + Legend configuration for the point plot widget. + + :param type: Type of legend to show for the point plot widget. + :type type: PointPlotWidgetLegendType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/point_plot_widget_legend_type.py b/datadog_api_client/v1/model/point_plot_widget_legend_type.py new file mode 100644 index 0000000000..180a33ee04 --- /dev/null +++ b/datadog_api_client/v1/model/point_plot_widget_legend_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PointPlotWidgetLegendType(ModelSimple): + """ + Type of legend to show for the point plot widget. + + :param value: Must be one of ["automatic", "none"]. + :type value: str + """ + + allowed_values = { + "automatic", + "none", + } + AUTOMATIC: ClassVar["PointPlotWidgetLegendType"] + NONE: ClassVar["PointPlotWidgetLegendType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PointPlotWidgetLegendType.AUTOMATIC = PointPlotWidgetLegendType("automatic") +PointPlotWidgetLegendType.NONE = PointPlotWidgetLegendType("none") diff --git a/datadog_api_client/v1/model/point_plot_widget_request.py b/datadog_api_client/v1/model/point_plot_widget_request.py new file mode 100644 index 0000000000..5a05a55ad7 --- /dev/null +++ b/datadog_api_client/v1/model/point_plot_widget_request.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.point_plot_projection import PointPlotProjection + from datadog_api_client.v1.model.data_projection_query import DataProjectionQuery + from datadog_api_client.v1.model.data_projection_request_type import DataProjectionRequestType + +class PointPlotWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.point_plot_projection import PointPlotProjection + from datadog_api_client.v1.model.data_projection_query import DataProjectionQuery + from datadog_api_client.v1.model.data_projection_request_type import DataProjectionRequestType + return { + "limit": (int,), + "projection": (PointPlotProjection,), + "query": (DataProjectionQuery,), + "request_type": (DataProjectionRequestType,), + } + attribute_map = { + "limit": "limit", + "projection": "projection", + "query": "query", + "request_type": "request_type", + } + + def __init__(self_, projection: PointPlotProjection, query: DataProjectionQuery, request_type: DataProjectionRequestType, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Request configuration for the point plot widget. + + :param limit: Maximum number of data points to return. + :type limit: int, optional + + :param projection: Projection configuration for the point plot widget. + :type projection: PointPlotProjection + + :param query: Query configuration for a data projection request. + :type query: DataProjectionQuery + + :param request_type: Type of a data projection request. + :type request_type: DataProjectionRequestType + """ + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + + self_.projection = projection + self_.query = query + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/powerpack_template_variable_contents.py b/datadog_api_client/v1/model/powerpack_template_variable_contents.py new file mode 100644 index 0000000000..657a8e850d --- /dev/null +++ b/datadog_api_client/v1/model/powerpack_template_variable_contents.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PowerpackTemplateVariableContents(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "prefix": (str,), + "values": ([str],), + } + attribute_map = { + "name": "name", + "prefix": "prefix", + "values": "values", + } + + def __init__(self_, name: str, values: List[str], prefix: Union[str, UnsetType]=unset, **kwargs): + """ + Powerpack template variable contents. + + :param name: The name of the variable. + :type name: str + + :param prefix: The tag prefix associated with the variable. + :type prefix: str, optional + + :param values: One or many template variable values within the saved view, which will be unioned together using ``OR`` if more than one is specified. + :type values: [str] + """ + if prefix is not unset: + kwargs["prefix"] = prefix + super().__init__(kwargs) + + + self_.name = name + self_.values = values diff --git a/datadog_api_client/v1/model/powerpack_template_variables.py b/datadog_api_client/v1/model/powerpack_template_variables.py new file mode 100644 index 0000000000..a84d5c1223 --- /dev/null +++ b/datadog_api_client/v1/model/powerpack_template_variables.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.powerpack_template_variable_contents import PowerpackTemplateVariableContents + +class PowerpackTemplateVariables(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.powerpack_template_variable_contents import PowerpackTemplateVariableContents + return { + "controlled_by_powerpack": ([PowerpackTemplateVariableContents],), + "controlled_externally": ([PowerpackTemplateVariableContents],), + } + attribute_map = { + "controlled_by_powerpack": "controlled_by_powerpack", + "controlled_externally": "controlled_externally", + } + + def __init__(self_, controlled_by_powerpack: Union[List[PowerpackTemplateVariableContents], UnsetType]=unset, controlled_externally: Union[List[PowerpackTemplateVariableContents], UnsetType]=unset, **kwargs): + """ + Powerpack template variables. + + :param controlled_by_powerpack: Template variables controlled at the powerpack level. + :type controlled_by_powerpack: [PowerpackTemplateVariableContents], optional + + :param controlled_externally: Template variables controlled by the external resource, such as the dashboard this powerpack is on. + :type controlled_externally: [PowerpackTemplateVariableContents], optional + """ + if controlled_by_powerpack is not unset: + kwargs["controlled_by_powerpack"] = controlled_by_powerpack + if controlled_externally is not unset: + kwargs["controlled_externally"] = controlled_externally + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/powerpack_widget_definition.py b/datadog_api_client/v1/model/powerpack_widget_definition.py new file mode 100644 index 0000000000..cef7258db7 --- /dev/null +++ b/datadog_api_client/v1/model/powerpack_widget_definition.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.powerpack_template_variables import PowerpackTemplateVariables + from datadog_api_client.v1.model.powerpack_widget_definition_type import PowerpackWidgetDefinitionType + +class PowerpackWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.powerpack_template_variables import PowerpackTemplateVariables + from datadog_api_client.v1.model.powerpack_widget_definition_type import PowerpackWidgetDefinitionType + return { + "background_color": (str,), + "banner_img": (str,), + "powerpack_id": (str,), + "show_title": (bool,), + "template_variables": (PowerpackTemplateVariables,), + "title": (str,), + "type": (PowerpackWidgetDefinitionType,), + } + attribute_map = { + "background_color": "background_color", + "banner_img": "banner_img", + "powerpack_id": "powerpack_id", + "show_title": "show_title", + "template_variables": "template_variables", + "title": "title", + "type": "type", + } + + def __init__(self_, powerpack_id: str, type: PowerpackWidgetDefinitionType, background_color: Union[str, UnsetType]=unset, banner_img: Union[str, UnsetType]=unset, show_title: Union[bool, UnsetType]=unset, template_variables: Union[PowerpackTemplateVariables, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + The powerpack widget allows you to keep similar graphs together on your timeboard. Each group has a custom header, can hold one to many graphs, and is collapsible. + + :param background_color: Background color of the powerpack title. + :type background_color: str, optional + + :param banner_img: URL of image to display as a banner for the powerpack. + :type banner_img: str, optional + + :param powerpack_id: UUID of the associated powerpack. + :type powerpack_id: str + + :param show_title: Whether to show the title or not. + :type show_title: bool, optional + + :param template_variables: Powerpack template variables. + :type template_variables: PowerpackTemplateVariables, optional + + :param title: Title of the widget. + :type title: str, optional + + :param type: Type of the powerpack widget. + :type type: PowerpackWidgetDefinitionType + """ + if background_color is not unset: + kwargs["background_color"] = background_color + if banner_img is not unset: + kwargs["banner_img"] = banner_img + if show_title is not unset: + kwargs["show_title"] = show_title + if template_variables is not unset: + kwargs["template_variables"] = template_variables + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + + self_.powerpack_id = powerpack_id + self_.type = type diff --git a/datadog_api_client/v1/model/powerpack_widget_definition_type.py b/datadog_api_client/v1/model/powerpack_widget_definition_type.py new file mode 100644 index 0000000000..8d86c4b579 --- /dev/null +++ b/datadog_api_client/v1/model/powerpack_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PowerpackWidgetDefinitionType(ModelSimple): + """ + Type of the powerpack widget. + + :param value: If omitted defaults to "powerpack". Must be one of ["powerpack"]. + :type value: str + """ + + allowed_values = { + "powerpack", + } + POWERPACK: ClassVar["PowerpackWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PowerpackWidgetDefinitionType.POWERPACK = PowerpackWidgetDefinitionType("powerpack") diff --git a/datadog_api_client/v1/model/process_query_definition.py b/datadog_api_client/v1/model/process_query_definition.py new file mode 100644 index 0000000000..2a24a8d779 --- /dev/null +++ b/datadog_api_client/v1/model/process_query_definition.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProcessQueryDefinition(ModelNormal): + validations = { + "limit": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "filter_by": ([str],), + "limit": (int,), + "metric": (str,), + "search_by": (str,), + } + attribute_map = { + "filter_by": "filter_by", + "limit": "limit", + "metric": "metric", + "search_by": "search_by", + } + + def __init__(self_, metric: str, filter_by: Union[List[str], UnsetType]=unset, limit: Union[int, UnsetType]=unset, search_by: Union[str, UnsetType]=unset, **kwargs): + """ + The process query to use in the widget. + + :param filter_by: List of processes. + :type filter_by: [str], optional + + :param limit: Max number of items in the filter list. + :type limit: int, optional + + :param metric: Your chosen metric. + :type metric: str + + :param search_by: Your chosen search term. + :type search_by: str, optional + """ + if filter_by is not unset: + kwargs["filter_by"] = filter_by + if limit is not unset: + kwargs["limit"] = limit + if search_by is not unset: + kwargs["search_by"] = search_by + super().__init__(kwargs) + + + self_.metric = metric diff --git a/datadog_api_client/v1/model/product_analytics_audience_account_subquery.py b/datadog_api_client/v1/model/product_analytics_audience_account_subquery.py new file mode 100644 index 0000000000..69c8689b9a --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_audience_account_subquery.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsAudienceAccountSubquery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "query": "query", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Product Analytics audience account subquery. + + :param name: The name of the account subquery. + :type name: str, optional + + :param query: The query string for the account subquery. + :type query: str, optional + """ + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/product_analytics_audience_filters.py b/datadog_api_client/v1/model/product_analytics_audience_filters.py new file mode 100644 index 0000000000..a4c0f8ba5a --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_audience_filters.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_audience_account_subquery import ProductAnalyticsAudienceAccountSubquery + from datadog_api_client.v1.model.product_analytics_audience_segment_subquery import ProductAnalyticsAudienceSegmentSubquery + from datadog_api_client.v1.model.product_analytics_audience_user_subquery import ProductAnalyticsAudienceUserSubquery + +class ProductAnalyticsAudienceFilters(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_audience_account_subquery import ProductAnalyticsAudienceAccountSubquery + from datadog_api_client.v1.model.product_analytics_audience_segment_subquery import ProductAnalyticsAudienceSegmentSubquery + from datadog_api_client.v1.model.product_analytics_audience_user_subquery import ProductAnalyticsAudienceUserSubquery + return { + "accounts": ([ProductAnalyticsAudienceAccountSubquery],), + "filter_condition": (str,), + "segments": ([ProductAnalyticsAudienceSegmentSubquery],), + "users": ([ProductAnalyticsAudienceUserSubquery],), + } + attribute_map = { + "accounts": "accounts", + "filter_condition": "filter_condition", + "segments": "segments", + "users": "users", + } + + def __init__(self_, accounts: Union[List[ProductAnalyticsAudienceAccountSubquery], UnsetType]=unset, filter_condition: Union[str, UnsetType]=unset, segments: Union[List[ProductAnalyticsAudienceSegmentSubquery], UnsetType]=unset, users: Union[List[ProductAnalyticsAudienceUserSubquery], UnsetType]=unset, **kwargs): + """ + Product Analytics/RUM audience filters. + + :param accounts: + :type accounts: [ProductAnalyticsAudienceAccountSubquery], optional + + :param filter_condition: An optional filter condition applied to the audience subquery. + :type filter_condition: str, optional + + :param segments: + :type segments: [ProductAnalyticsAudienceSegmentSubquery], optional + + :param users: + :type users: [ProductAnalyticsAudienceUserSubquery], optional + """ + if accounts is not unset: + kwargs["accounts"] = accounts + if filter_condition is not unset: + kwargs["filter_condition"] = filter_condition + if segments is not unset: + kwargs["segments"] = segments + if users is not unset: + kwargs["users"] = users + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/product_analytics_audience_occurrence_filter.py b/datadog_api_client/v1/model/product_analytics_audience_occurrence_filter.py new file mode 100644 index 0000000000..f18bd6ad0f --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_audience_occurrence_filter.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsAudienceOccurrenceFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "operator": (str,), + "value": (str,), + } + attribute_map = { + "operator": "operator", + "value": "value", + } + + def __init__(self_, operator: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + Filter applied to occurrence counts when building a Product Analytics audience. + + :param operator: The comparison operator used for the occurrence filter (for example: ``gt`` , ``lt`` , ``eq`` ). + :type operator: str, optional + + :param value: The threshold value to compare occurrence counts against. + :type value: str, optional + """ + if operator is not unset: + kwargs["operator"] = operator + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/product_analytics_audience_segment_subquery.py b/datadog_api_client/v1/model/product_analytics_audience_segment_subquery.py new file mode 100644 index 0000000000..979550d24e --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_audience_segment_subquery.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsAudienceSegmentSubquery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "segment_id": (str,), + } + attribute_map = { + "name": "name", + "segment_id": "segment_id", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, segment_id: Union[str, UnsetType]=unset, **kwargs): + """ + Product Analytics audience segment subquery. + + :param name: The name of the segment subquery. + :type name: str, optional + + :param segment_id: The unique identifier of the segment. + :type segment_id: str, optional + """ + if name is not unset: + kwargs["name"] = name + if segment_id is not unset: + kwargs["segment_id"] = segment_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/product_analytics_audience_user_subquery.py b/datadog_api_client/v1/model/product_analytics_audience_user_subquery.py new file mode 100644 index 0000000000..20a1cc94b0 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_audience_user_subquery.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsAudienceUserSubquery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "query": "query", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Product Analytics audience user subquery. + + :param name: The name of the user subquery. + :type name: str, optional + + :param query: The query string for the user subquery. + :type query: str, optional + """ + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/product_analytics_base_query.py b/datadog_api_client/v1/model/product_analytics_base_query.py new file mode 100644 index 0000000000..375b5bd6db --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_base_query.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_event_data_source import ProductAnalyticsEventDataSource + from datadog_api_client.v1.model.product_analytics_event_query_search import ProductAnalyticsEventQuerySearch + +class ProductAnalyticsBaseQuery(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_event_data_source import ProductAnalyticsEventDataSource + from datadog_api_client.v1.model.product_analytics_event_query_search import ProductAnalyticsEventQuerySearch + return { + "data_source": (ProductAnalyticsEventDataSource,), + "search": (ProductAnalyticsEventQuerySearch,), + } + attribute_map = { + "data_source": "data_source", + "search": "search", + } + + def __init__(self_, data_source: ProductAnalyticsEventDataSource, search: ProductAnalyticsEventQuerySearch, **kwargs): + """ + Product Analytics event query. + + :param data_source: Data source for Product Analytics event queries. + :type data_source: ProductAnalyticsEventDataSource + + :param search: Search configuration for Product Analytics event query. + :type search: ProductAnalyticsEventQuerySearch + """ + super().__init__(kwargs) + + + self_.data_source = data_source + self_.search = search diff --git a/datadog_api_client/v1/model/product_analytics_event_data_source.py b/datadog_api_client/v1/model/product_analytics_event_data_source.py new file mode 100644 index 0000000000..1d3d0d8900 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_event_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsEventDataSource(ModelSimple): + """ + Data source for Product Analytics event queries. + + :param value: If omitted defaults to "product_analytics". Must be one of ["product_analytics"]. + :type value: str + """ + + allowed_values = { + "product_analytics", + } + PRODUCT_ANALYTICS: ClassVar["ProductAnalyticsEventDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsEventDataSource.PRODUCT_ANALYTICS = ProductAnalyticsEventDataSource("product_analytics") diff --git a/datadog_api_client/v1/model/product_analytics_event_query_search.py b/datadog_api_client/v1/model/product_analytics_event_query_search.py new file mode 100644 index 0000000000..ff276d8678 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_event_query_search.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsEventQuerySearch(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: str, **kwargs): + """ + Search configuration for Product Analytics event query. + + :param query: RUM event search query used to filter views or actions. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v1/model/product_analytics_extended_compute.py b/datadog_api_client/v1/model/product_analytics_extended_compute.py new file mode 100644 index 0000000000..ab1e632aa0 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_extended_compute.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_event_aggregation import FormulaAndFunctionEventAggregation + from datadog_api_client.v1.model.calendar_interval import CalendarInterval + +class ProductAnalyticsExtendedCompute(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_event_aggregation import FormulaAndFunctionEventAggregation + from datadog_api_client.v1.model.calendar_interval import CalendarInterval + return { + "aggregation": (FormulaAndFunctionEventAggregation,), + "interval": (float,), + "metric": (str,), + "name": (str,), + "rollup": (CalendarInterval,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + "name": "name", + "rollup": "rollup", + } + + def __init__(self_, aggregation: FormulaAndFunctionEventAggregation, interval: Union[float, UnsetType]=unset, metric: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, rollup: Union[CalendarInterval, UnsetType]=unset, **kwargs): + """ + Compute configuration for Product Analytics Extended queries. + + :param aggregation: Aggregation methods for event platform queries. + :type aggregation: FormulaAndFunctionEventAggregation + + :param interval: Fixed-width time bucket interval in milliseconds for time series queries. Mutually exclusive with ``rollup``. + :type interval: float, optional + + :param metric: Measurable attribute to compute. + :type metric: str, optional + + :param name: Name of the compute for use in formulas. + :type name: str, optional + + :param rollup: Calendar interval definition. + :type rollup: CalendarInterval, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + if name is not unset: + kwargs["name"] = name + if rollup is not unset: + kwargs["rollup"] = rollup + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v1/model/product_analytics_extended_group_by.py b/datadog_api_client/v1/model/product_analytics_extended_group_by.py new file mode 100644 index 0000000000..f74cb9689e --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_extended_group_by.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_sort import FormulaAndFunctionEventQueryGroupBySort + +class ProductAnalyticsExtendedGroupBy(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 10000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_sort import FormulaAndFunctionEventQueryGroupBySort + return { + "facet": (str,), + "limit": (int,), + "should_exclude_missing": (bool,), + "sort": (FormulaAndFunctionEventQueryGroupBySort,), + } + attribute_map = { + "facet": "facet", + "limit": "limit", + "should_exclude_missing": "should_exclude_missing", + "sort": "sort", + } + + def __init__(self_, facet: str, limit: Union[int, UnsetType]=unset, should_exclude_missing: Union[bool, UnsetType]=unset, sort: Union[FormulaAndFunctionEventQueryGroupBySort, UnsetType]=unset, **kwargs): + """ + Group by configuration for Product Analytics Extended queries. + + :param facet: Facet name to group by. + :type facet: str + + :param limit: Maximum number of groups to return. + :type limit: int, optional + + :param should_exclude_missing: Whether to exclude events missing the group-by facet. + :type should_exclude_missing: bool, optional + + :param sort: Options for sorting group by results. + :type sort: FormulaAndFunctionEventQueryGroupBySort, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if should_exclude_missing is not unset: + kwargs["should_exclude_missing"] = should_exclude_missing + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v1/model/product_analytics_funnel_compute.py b/datadog_api_client/v1/model/product_analytics_funnel_compute.py new file mode 100644 index 0000000000..c0031646e8 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_compute.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_funnel_compute_aggregation import ProductAnalyticsFunnelComputeAggregation + from datadog_api_client.v1.model.product_analytics_funnel_compute_metric import ProductAnalyticsFunnelComputeMetric + +class ProductAnalyticsFunnelCompute(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_funnel_compute_aggregation import ProductAnalyticsFunnelComputeAggregation + from datadog_api_client.v1.model.product_analytics_funnel_compute_metric import ProductAnalyticsFunnelComputeMetric + return { + "aggregation": (ProductAnalyticsFunnelComputeAggregation,), + "metric": (ProductAnalyticsFunnelComputeMetric,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + } + + def __init__(self_, aggregation: ProductAnalyticsFunnelComputeAggregation, metric: ProductAnalyticsFunnelComputeMetric, **kwargs): + """ + Compute configuration for user journey funnel. + + :param aggregation: Aggregation type for user journey funnel compute. + :type aggregation: ProductAnalyticsFunnelComputeAggregation + + :param metric: Metric for user journey funnel compute. ``__dd.conversion`` and ``__dd.conversion_rate`` accept ``count`` (unique users/sessions) and ``cardinality`` (total users/sessions) as aggregations. + :type metric: ProductAnalyticsFunnelComputeMetric + """ + super().__init__(kwargs) + + + self_.aggregation = aggregation + self_.metric = metric diff --git a/datadog_api_client/v1/model/product_analytics_funnel_compute_aggregation.py b/datadog_api_client/v1/model/product_analytics_funnel_compute_aggregation.py new file mode 100644 index 0000000000..aad40a0431 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_compute_aggregation.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsFunnelComputeAggregation(ModelSimple): + """ + Aggregation type for user journey funnel compute. + + :param value: Must be one of ["cardinality", "count"]. + :type value: str + """ + + allowed_values = { + "cardinality", + "count", + } + CARDINALITY: ClassVar["ProductAnalyticsFunnelComputeAggregation"] + COUNT: ClassVar["ProductAnalyticsFunnelComputeAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsFunnelComputeAggregation.CARDINALITY = ProductAnalyticsFunnelComputeAggregation("cardinality") +ProductAnalyticsFunnelComputeAggregation.COUNT = ProductAnalyticsFunnelComputeAggregation("count") diff --git a/datadog_api_client/v1/model/product_analytics_funnel_compute_metric.py b/datadog_api_client/v1/model/product_analytics_funnel_compute_metric.py new file mode 100644 index 0000000000..ca5d6a5864 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_compute_metric.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsFunnelComputeMetric(ModelSimple): + """ + Metric for user journey funnel compute. `__dd.conversion` and `__dd.conversion_rate` accept `count` (unique users/sessions) and `cardinality` (total users/sessions) as aggregations. + + :param value: Must be one of ["__dd.conversion", "__dd.conversion_rate"]. + :type value: str + """ + + allowed_values = { + "__dd.conversion", + "__dd.conversion_rate", + } + CONVERSION: ClassVar["ProductAnalyticsFunnelComputeMetric"] + CONVERSION_RATE: ClassVar["ProductAnalyticsFunnelComputeMetric"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsFunnelComputeMetric.CONVERSION = ProductAnalyticsFunnelComputeMetric("__dd.conversion") +ProductAnalyticsFunnelComputeMetric.CONVERSION_RATE = ProductAnalyticsFunnelComputeMetric("__dd.conversion_rate") diff --git a/datadog_api_client/v1/model/product_analytics_funnel_data_source.py b/datadog_api_client/v1/model/product_analytics_funnel_data_source.py new file mode 100644 index 0000000000..e7979a98fd --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsFunnelDataSource(ModelSimple): + """ + Data source for user journey funnel queries. + + :param value: If omitted defaults to "product_analytics_journey". Must be one of ["product_analytics_journey"]. + :type value: str + """ + + allowed_values = { + "product_analytics_journey", + } + PRODUCT_ANALYTICS_JOURNEY: ClassVar["ProductAnalyticsFunnelDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsFunnelDataSource.PRODUCT_ANALYTICS_JOURNEY = ProductAnalyticsFunnelDataSource("product_analytics_journey") diff --git a/datadog_api_client/v1/model/product_analytics_funnel_group_by.py b/datadog_api_client/v1/model/product_analytics_funnel_group_by.py new file mode 100644 index 0000000000..b8dad3c482 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_group_by.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_funnel_group_by_sort import ProductAnalyticsFunnelGroupBySort + from datadog_api_client.v1.model.user_journey_search_target import UserJourneySearchTarget + +class ProductAnalyticsFunnelGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_funnel_group_by_sort import ProductAnalyticsFunnelGroupBySort + from datadog_api_client.v1.model.user_journey_search_target import UserJourneySearchTarget + return { + "facet": (str,), + "limit": (int,), + "should_exclude_missing": (bool,), + "sort": (ProductAnalyticsFunnelGroupBySort,), + "target": (UserJourneySearchTarget,), + } + attribute_map = { + "facet": "facet", + "limit": "limit", + "should_exclude_missing": "should_exclude_missing", + "sort": "sort", + "target": "target", + } + + def __init__(self_, facet: str, limit: Union[int, UnsetType]=unset, should_exclude_missing: Union[bool, UnsetType]=unset, sort: Union[ProductAnalyticsFunnelGroupBySort, UnsetType]=unset, target: Union[UserJourneySearchTarget, UnsetType]=unset, **kwargs): + """ + Group by configuration for user journey funnel. + + :param facet: Facet to group by. + :type facet: str + + :param limit: Maximum number of groups. + :type limit: int, optional + + :param should_exclude_missing: Whether to exclude missing values. + :type should_exclude_missing: bool, optional + + :param sort: Sort configuration for user journey funnel group by. + :type sort: ProductAnalyticsFunnelGroupBySort, optional + + :param target: Target for user journey search. + :type target: UserJourneySearchTarget, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if should_exclude_missing is not unset: + kwargs["should_exclude_missing"] = should_exclude_missing + if sort is not unset: + kwargs["sort"] = sort + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v1/model/product_analytics_funnel_group_by_sort.py b/datadog_api_client/v1/model/product_analytics_funnel_group_by_sort.py new file mode 100644 index 0000000000..a219fbe082 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_group_by_sort.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_sort import WidgetSort + +class ProductAnalyticsFunnelGroupBySort(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_sort import WidgetSort + return { + "aggregation": (str,), + "metric": (str,), + "order": (WidgetSort,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + "order": "order", + } + + def __init__(self_, aggregation: str, metric: Union[str, UnsetType]=unset, order: Union[WidgetSort, UnsetType]=unset, **kwargs): + """ + Sort configuration for user journey funnel group by. + + :param aggregation: Aggregation type. + :type aggregation: str + + :param metric: Metric to sort by. + :type metric: str, optional + + :param order: Widget sorting methods. + :type order: WidgetSort, optional + """ + if metric is not unset: + kwargs["metric"] = metric + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v1/model/product_analytics_funnel_query.py b/datadog_api_client/v1/model/product_analytics_funnel_query.py new file mode 100644 index 0000000000..1376330b7e --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_funnel_compute import ProductAnalyticsFunnelCompute + from datadog_api_client.v1.model.product_analytics_funnel_data_source import ProductAnalyticsFunnelDataSource + from datadog_api_client.v1.model.product_analytics_funnel_group_by import ProductAnalyticsFunnelGroupBy + from datadog_api_client.v1.model.user_journey_search import UserJourneySearch + +class ProductAnalyticsFunnelQuery(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_funnel_compute import ProductAnalyticsFunnelCompute + from datadog_api_client.v1.model.product_analytics_funnel_data_source import ProductAnalyticsFunnelDataSource + from datadog_api_client.v1.model.product_analytics_funnel_group_by import ProductAnalyticsFunnelGroupBy + from datadog_api_client.v1.model.user_journey_search import UserJourneySearch + return { + "compute": (ProductAnalyticsFunnelCompute,), + "data_source": (ProductAnalyticsFunnelDataSource,), + "group_by": ([ProductAnalyticsFunnelGroupBy],), + "search": (UserJourneySearch,), + "subquery_id": (str,), + } + attribute_map = { + "compute": "compute", + "data_source": "data_source", + "group_by": "group_by", + "search": "search", + "subquery_id": "subquery_id", + } + + def __init__(self_, data_source: ProductAnalyticsFunnelDataSource, search: UserJourneySearch, compute: Union[ProductAnalyticsFunnelCompute, UnsetType]=unset, group_by: Union[List[ProductAnalyticsFunnelGroupBy], UnsetType]=unset, subquery_id: Union[str, UnsetType]=unset, **kwargs): + """ + User journey funnel query definition. + + :param compute: Compute configuration for user journey funnel. + :type compute: ProductAnalyticsFunnelCompute, optional + + :param data_source: Data source for user journey funnel queries. + :type data_source: ProductAnalyticsFunnelDataSource + + :param group_by: Group by configuration. + :type group_by: [ProductAnalyticsFunnelGroupBy], optional + + :param search: User journey search configuration. + :type search: UserJourneySearch + + :param subquery_id: Subquery ID. + :type subquery_id: str, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if group_by is not unset: + kwargs["group_by"] = group_by + if subquery_id is not unset: + kwargs["subquery_id"] = subquery_id + super().__init__(kwargs) + + + self_.data_source = data_source + self_.search = search diff --git a/datadog_api_client/v1/model/product_analytics_funnel_request.py b/datadog_api_client/v1/model/product_analytics_funnel_request.py new file mode 100644 index 0000000000..5ce4713649 --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_request.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.funnel_comparison_duration import FunnelComparisonDuration + from datadog_api_client.v1.model.product_analytics_funnel_query import ProductAnalyticsFunnelQuery + from datadog_api_client.v1.model.product_analytics_funnel_request_type import ProductAnalyticsFunnelRequestType + +class ProductAnalyticsFunnelRequest(ModelNormal): + validations = { + "comparison_segments": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.funnel_comparison_duration import FunnelComparisonDuration + from datadog_api_client.v1.model.product_analytics_funnel_query import ProductAnalyticsFunnelQuery + from datadog_api_client.v1.model.product_analytics_funnel_request_type import ProductAnalyticsFunnelRequestType + return { + "comparison_segments": ([str],), + "comparison_time": (FunnelComparisonDuration,), + "query": (ProductAnalyticsFunnelQuery,), + "request_type": (ProductAnalyticsFunnelRequestType,), + } + attribute_map = { + "comparison_segments": "comparison_segments", + "comparison_time": "comparison_time", + "query": "query", + "request_type": "request_type", + } + + def __init__(self_, query: ProductAnalyticsFunnelQuery, request_type: ProductAnalyticsFunnelRequestType, comparison_segments: Union[List[str], UnsetType]=unset, comparison_time: Union[FunnelComparisonDuration, UnsetType]=unset, **kwargs): + """ + User journey funnel widget request. + + :param comparison_segments: Comparison segments. + :type comparison_segments: [str], optional + + :param comparison_time: Comparison time configuration for funnel widgets. + :type comparison_time: FunnelComparisonDuration, optional + + :param query: User journey funnel query definition. + :type query: ProductAnalyticsFunnelQuery + + :param request_type: Request type for user journey funnel widget. + :type request_type: ProductAnalyticsFunnelRequestType + """ + if comparison_segments is not unset: + kwargs["comparison_segments"] = comparison_segments + if comparison_time is not unset: + kwargs["comparison_time"] = comparison_time + super().__init__(kwargs) + + + self_.query = query + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/product_analytics_funnel_request_type.py b/datadog_api_client/v1/model/product_analytics_funnel_request_type.py new file mode 100644 index 0000000000..56fbc514ca --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsFunnelRequestType(ModelSimple): + """ + Request type for user journey funnel widget. + + :param value: If omitted defaults to "user_journey_funnel". Must be one of ["user_journey_funnel"]. + :type value: str + """ + + allowed_values = { + "user_journey_funnel", + } + USER_JOURNEY_FUNNEL: ClassVar["ProductAnalyticsFunnelRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsFunnelRequestType.USER_JOURNEY_FUNNEL = ProductAnalyticsFunnelRequestType("user_journey_funnel") diff --git a/datadog_api_client/v1/model/product_analytics_funnel_widget_definition.py b/datadog_api_client/v1/model/product_analytics_funnel_widget_definition.py new file mode 100644 index 0000000000..6e43e5b8bd --- /dev/null +++ b/datadog_api_client/v1/model/product_analytics_funnel_widget_definition.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.funnel_grouped_display import FunnelGroupedDisplay + from datadog_api_client.v1.model.product_analytics_funnel_request import ProductAnalyticsFunnelRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.funnel_widget_definition_type import FunnelWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class ProductAnalyticsFunnelWidgetDefinition(ModelNormal): + validations = { + "requests": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.funnel_grouped_display import FunnelGroupedDisplay + from datadog_api_client.v1.model.product_analytics_funnel_request import ProductAnalyticsFunnelRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.funnel_widget_definition_type import FunnelWidgetDefinitionType + return { + "description": (str,), + "grouped_display": (FunnelGroupedDisplay,), + "requests": ([ProductAnalyticsFunnelRequest],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (FunnelWidgetDefinitionType,), + } + attribute_map = { + "description": "description", + "grouped_display": "grouped_display", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[ProductAnalyticsFunnelRequest], type: FunnelWidgetDefinitionType, description: Union[str, UnsetType]=unset, grouped_display: Union[FunnelGroupedDisplay, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The user journey funnel visualization displays conversion funnels based on user journey data from Product Analytics. + + :param description: The description of the widget. + :type description: str, optional + + :param grouped_display: Display mode for grouped funnel results. + :type grouped_display: FunnelGroupedDisplay, optional + + :param requests: Request payload used to query items. + :type requests: [ProductAnalyticsFunnelRequest] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: The title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: The size of the title. + :type title_size: str, optional + + :param type: Type of funnel widget. + :type type: FunnelWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if grouped_display is not unset: + kwargs["grouped_display"] = grouped_display + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/published_dataset_provider.py b/datadog_api_client/v1/model/published_dataset_provider.py new file mode 100644 index 0000000000..703586e335 --- /dev/null +++ b/datadog_api_client/v1/model/published_dataset_provider.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PublishedDatasetProvider(ModelSimple): + """ + Product page that published the dataset queried by a `DatasetListQuery`. `ddsql_query` is the only provider currently supported for host map widgets. + + :param value: If omitted defaults to "ddsql_query". Must be one of ["ddsql_query"]. + :type value: str + """ + + allowed_values = { + "ddsql_query", + } + DDSQL_QUERY: ClassVar["PublishedDatasetProvider"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PublishedDatasetProvider.DDSQL_QUERY = PublishedDatasetProvider("ddsql_query") diff --git a/datadog_api_client/v1/model/query_sort_order.py b/datadog_api_client/v1/model/query_sort_order.py new file mode 100644 index 0000000000..977a1fd408 --- /dev/null +++ b/datadog_api_client/v1/model/query_sort_order.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class QuerySortOrder(ModelSimple): + """ + Direction of sort. + + :param value: If omitted defaults to "desc". Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + ASC: ClassVar["QuerySortOrder"] + DESC: ClassVar["QuerySortOrder"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +QuerySortOrder.ASC = QuerySortOrder("asc") +QuerySortOrder.DESC = QuerySortOrder("desc") diff --git a/datadog_api_client/v1/model/query_value_widget_comparison.py b/datadog_api_client/v1/model/query_value_widget_comparison.py new file mode 100644 index 0000000000..475e9df5d6 --- /dev/null +++ b/datadog_api_client/v1/model/query_value_widget_comparison.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.query_value_widget_comparison_directionality import QueryValueWidgetComparisonDirectionality + from datadog_api_client.v1.model.comparison_duration import ComparisonDuration + from datadog_api_client.v1.model.query_value_widget_comparison_type import QueryValueWidgetComparisonType + +class QueryValueWidgetComparison(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.query_value_widget_comparison_directionality import QueryValueWidgetComparisonDirectionality + from datadog_api_client.v1.model.comparison_duration import ComparisonDuration + from datadog_api_client.v1.model.query_value_widget_comparison_type import QueryValueWidgetComparisonType + return { + "directionality": (QueryValueWidgetComparisonDirectionality,), + "duration": (ComparisonDuration,), + "type": (QueryValueWidgetComparisonType,), + } + attribute_map = { + "directionality": "directionality", + "duration": "duration", + "type": "type", + } + + def __init__(self_, duration: ComparisonDuration, directionality: Union[QueryValueWidgetComparisonDirectionality, UnsetType]=unset, type: Union[QueryValueWidgetComparisonType, UnsetType]=unset, **kwargs): + """ + A change indicator that compares the current value to a historical period. + + :param directionality: Color-coding direction: ``increase_better`` (green on rise), ``decrease_better`` (green on drop), or ``neutral`` (no color). + :type directionality: QueryValueWidgetComparisonDirectionality, optional + + :param duration: The comparison period. Use a preset ``type`` value or set ``type`` to ``custom_timeframe`` and provide ``custom_timeframe`` with explicit millisecond epoch bounds. + :type duration: ComparisonDuration + + :param type: How the delta is expressed: ``absolute`` (raw difference), ``relative`` (percentage), or ``both``. + :type type: QueryValueWidgetComparisonType, optional + """ + if directionality is not unset: + kwargs["directionality"] = directionality + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.duration = duration diff --git a/datadog_api_client/v1/model/query_value_widget_comparison_directionality.py b/datadog_api_client/v1/model/query_value_widget_comparison_directionality.py new file mode 100644 index 0000000000..51f1b21278 --- /dev/null +++ b/datadog_api_client/v1/model/query_value_widget_comparison_directionality.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class QueryValueWidgetComparisonDirectionality(ModelSimple): + """ + Color-coding direction: `increase_better` (green on rise), `decrease_better` (green on drop), or `neutral` (no color). + + :param value: If omitted defaults to "neutral". Must be one of ["increase_better", "decrease_better", "neutral"]. + :type value: str + """ + + allowed_values = { + "increase_better", + "decrease_better", + "neutral", + } + INCREASE_BETTER: ClassVar["QueryValueWidgetComparisonDirectionality"] + DECREASE_BETTER: ClassVar["QueryValueWidgetComparisonDirectionality"] + NEUTRAL: ClassVar["QueryValueWidgetComparisonDirectionality"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +QueryValueWidgetComparisonDirectionality.INCREASE_BETTER = QueryValueWidgetComparisonDirectionality("increase_better") +QueryValueWidgetComparisonDirectionality.DECREASE_BETTER = QueryValueWidgetComparisonDirectionality("decrease_better") +QueryValueWidgetComparisonDirectionality.NEUTRAL = QueryValueWidgetComparisonDirectionality("neutral") diff --git a/datadog_api_client/v1/model/query_value_widget_comparison_type.py b/datadog_api_client/v1/model/query_value_widget_comparison_type.py new file mode 100644 index 0000000000..28419f0aba --- /dev/null +++ b/datadog_api_client/v1/model/query_value_widget_comparison_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class QueryValueWidgetComparisonType(ModelSimple): + """ + How the delta is expressed: `absolute` (raw difference), `relative` (percentage), or `both`. + + :param value: If omitted defaults to "absolute". Must be one of ["absolute", "relative", "both"]. + :type value: str + """ + + allowed_values = { + "absolute", + "relative", + "both", + } + ABSOLUTE: ClassVar["QueryValueWidgetComparisonType"] + RELATIVE: ClassVar["QueryValueWidgetComparisonType"] + BOTH: ClassVar["QueryValueWidgetComparisonType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +QueryValueWidgetComparisonType.ABSOLUTE = QueryValueWidgetComparisonType("absolute") +QueryValueWidgetComparisonType.RELATIVE = QueryValueWidgetComparisonType("relative") +QueryValueWidgetComparisonType.BOTH = QueryValueWidgetComparisonType("both") diff --git a/datadog_api_client/v1/model/query_value_widget_definition.py b/datadog_api_client/v1/model/query_value_widget_definition.py new file mode 100644 index 0000000000..e8fe63ef32 --- /dev/null +++ b/datadog_api_client/v1/model/query_value_widget_definition.py @@ -0,0 +1,163 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.query_value_widget_request import QueryValueWidgetRequest + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.timeseries_background import TimeseriesBackground + from datadog_api_client.v1.model.query_value_widget_definition_type import QueryValueWidgetDefinitionType + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class QueryValueWidgetDefinition(ModelNormal): + validations = { + "requests": { + "max_items": 1, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.query_value_widget_request import QueryValueWidgetRequest + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.timeseries_background import TimeseriesBackground + from datadog_api_client.v1.model.query_value_widget_definition_type import QueryValueWidgetDefinitionType + return { + "autoscale": (bool,), + "custom_links": ([WidgetCustomLink],), + "custom_unit": (str,), + "description": (str,), + "precision": (int,), + "requests": ([QueryValueWidgetRequest],), + "text_align": (WidgetTextAlign,), + "time": (WidgetTime,), + "timeseries_background": (TimeseriesBackground,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (QueryValueWidgetDefinitionType,), + } + attribute_map = { + "autoscale": "autoscale", + "custom_links": "custom_links", + "custom_unit": "custom_unit", + "description": "description", + "precision": "precision", + "requests": "requests", + "text_align": "text_align", + "time": "time", + "timeseries_background": "timeseries_background", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[QueryValueWidgetRequest], type: QueryValueWidgetDefinitionType, autoscale: Union[bool, UnsetType]=unset, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, custom_unit: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, precision: Union[int, UnsetType]=unset, text_align: Union[WidgetTextAlign, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, timeseries_background: Union[TimeseriesBackground, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + Query values display the current value of a given metric, APM, or log query. + + :param autoscale: Whether to use auto-scaling or not. + :type autoscale: bool, optional + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param custom_unit: Display a unit of your choice on the widget. + :type custom_unit: str, optional + + :param description: The description of the widget. + :type description: str, optional + + :param precision: Number of decimals to show. If not defined, the widget uses the raw value. + :type precision: int, optional + + :param requests: Widget definition. + :type requests: [QueryValueWidgetRequest] + + :param text_align: How to align the text on the widget. + :type text_align: WidgetTextAlign, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param timeseries_background: Set a timeseries on the widget background. + :type timeseries_background: TimeseriesBackground, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the query value widget. + :type type: QueryValueWidgetDefinitionType + """ + if autoscale is not unset: + kwargs["autoscale"] = autoscale + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if custom_unit is not unset: + kwargs["custom_unit"] = custom_unit + if description is not unset: + kwargs["description"] = description + if precision is not unset: + kwargs["precision"] = precision + if text_align is not unset: + kwargs["text_align"] = text_align + if time is not unset: + kwargs["time"] = time + if timeseries_background is not unset: + kwargs["timeseries_background"] = timeseries_background + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/query_value_widget_definition_type.py b/datadog_api_client/v1/model/query_value_widget_definition_type.py new file mode 100644 index 0000000000..00bb3b5934 --- /dev/null +++ b/datadog_api_client/v1/model/query_value_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class QueryValueWidgetDefinitionType(ModelSimple): + """ + Type of the query value widget. + + :param value: If omitted defaults to "query_value". Must be one of ["query_value"]. + :type value: str + """ + + allowed_values = { + "query_value", + } + QUERY_VALUE: ClassVar["QueryValueWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +QueryValueWidgetDefinitionType.QUERY_VALUE = QueryValueWidgetDefinitionType("query_value") diff --git a/datadog_api_client/v1/model/query_value_widget_request.py b/datadog_api_client/v1/model/query_value_widget_request.py new file mode 100644 index 0000000000..4a5dcdf57e --- /dev/null +++ b/datadog_api_client/v1/model/query_value_widget_request.py @@ -0,0 +1,181 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_aggregator import WidgetAggregator + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.query_value_widget_comparison import QueryValueWidgetComparison + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class QueryValueWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_aggregator import WidgetAggregator + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.query_value_widget_comparison import QueryValueWidgetComparison + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + return { + "aggregator": (WidgetAggregator,), + "apm_query": (LogQueryDefinition,), + "audit_query": (LogQueryDefinition,), + "comparison": (QueryValueWidgetComparison,), + "conditional_formats": ([WidgetConditionalFormat],), + "event_query": (LogQueryDefinition,), + "formulas": ([WidgetFormula],), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + } + attribute_map = { + "aggregator": "aggregator", + "apm_query": "apm_query", + "audit_query": "audit_query", + "comparison": "comparison", + "conditional_formats": "conditional_formats", + "event_query": "event_query", + "formulas": "formulas", + "log_query": "log_query", + "network_query": "network_query", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "queries": "queries", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + } + + def __init__(self_, aggregator: Union[WidgetAggregator, UnsetType]=unset, apm_query: Union[LogQueryDefinition, UnsetType]=unset, audit_query: Union[LogQueryDefinition, UnsetType]=unset, comparison: Union[QueryValueWidgetComparison, UnsetType]=unset, conditional_formats: Union[List[WidgetConditionalFormat], UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, **kwargs): + """ + Updated query value widget. + + :param aggregator: Aggregator used for the request. + :type aggregator: WidgetAggregator, optional + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param audit_query: The log query. + :type audit_query: LogQueryDefinition, optional + + :param comparison: A change indicator that compares the current value to a historical period. + :type comparison: QueryValueWidgetComparison, optional + + :param conditional_formats: List of conditional formats. + :type conditional_formats: [WidgetConditionalFormat], optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Widget query. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if audit_query is not unset: + kwargs["audit_query"] = audit_query + if comparison is not unset: + kwargs["comparison"] = comparison + if conditional_formats is not unset: + kwargs["conditional_formats"] = conditional_formats + if event_query is not unset: + kwargs["event_query"] = event_query + if formulas is not unset: + kwargs["formulas"] = formulas + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/reference_table_logs_lookup_processor.py b/datadog_api_client/v1/model/reference_table_logs_lookup_processor.py new file mode 100644 index 0000000000..e9be7385c7 --- /dev/null +++ b/datadog_api_client/v1/model/reference_table_logs_lookup_processor.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_lookup_processor_type import LogsLookupProcessorType + +class ReferenceTableLogsLookupProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_lookup_processor_type import LogsLookupProcessorType + return { + "is_enabled": (bool,), + "lookup_enrichment_table": (str,), + "name": (str,), + "source": (str,), + "target": (str,), + "type": (LogsLookupProcessorType,), + } + attribute_map = { + "is_enabled": "is_enabled", + "lookup_enrichment_table": "lookup_enrichment_table", + "name": "name", + "source": "source", + "target": "target", + "type": "type", + } + + def __init__(self_, lookup_enrichment_table: str, source: str, target: str, type: LogsLookupProcessorType, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + **Note** : Reference Tables are in public beta. + Use the Lookup Processor to define a mapping between a log attribute + and a human readable value saved in a Reference Table. + For example, you can use the Lookup Processor to map an internal service ID + into a human readable service name. Alternatively, you could also use it to check + if the MAC address that just attempted to connect to the production + environment belongs to your list of stolen machines. + + :param is_enabled: Whether or not the processor is enabled. + :type is_enabled: bool, optional + + :param lookup_enrichment_table: Name of the Reference Table for the source attribute and their associated target attribute values. + :type lookup_enrichment_table: str + + :param name: Name of the processor. + :type name: str, optional + + :param source: Source attribute used to perform the lookup. + :type source: str + + :param target: Name of the attribute that contains the corresponding value in the mapping list. + :type target: str + + :param type: Type of logs lookup processor. + :type type: LogsLookupProcessorType + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.lookup_enrichment_table = lookup_enrichment_table + self_.source = source + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/resource_provider_config.py b/datadog_api_client/v1/model/resource_provider_config.py new file mode 100644 index 0000000000..08e4a91fc0 --- /dev/null +++ b/datadog_api_client/v1/model/resource_provider_config.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ResourceProviderConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "metrics_enabled": (bool,), + "namespace": (str,), + } + attribute_map = { + "metrics_enabled": "metrics_enabled", + "namespace": "namespace", + } + + def __init__(self_, metrics_enabled: Union[bool, UnsetType]=unset, namespace: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration settings applied to resources from the specified Azure resource provider. + + :param metrics_enabled: Collect metrics for resources from this provider. + :type metrics_enabled: bool, optional + + :param namespace: The provider namespace to apply this configuration to. + :type namespace: str, optional + """ + if metrics_enabled is not unset: + kwargs["metrics_enabled"] = metrics_enabled + if namespace is not unset: + kwargs["namespace"] = namespace + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/response_meta_attributes.py b/datadog_api_client/v1/model/response_meta_attributes.py new file mode 100644 index 0000000000..7799079be8 --- /dev/null +++ b/datadog_api_client/v1/model/response_meta_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.pagination import Pagination + +class ResponseMetaAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.pagination import Pagination + return { + "page": (Pagination,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[Pagination, UnsetType]=unset, **kwargs): + """ + Object describing meta attributes of response. + + :param page: Pagination object. + :type page: Pagination, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/retention_cohort_criteria.py b/datadog_api_client/v1/model/retention_cohort_criteria.py new file mode 100644 index 0000000000..145cc9bdf5 --- /dev/null +++ b/datadog_api_client/v1/model/retention_cohort_criteria.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_base_query import ProductAnalyticsBaseQuery + from datadog_api_client.v1.model.retention_cohort_criteria_time_interval import RetentionCohortCriteriaTimeInterval + +class RetentionCohortCriteria(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_base_query import ProductAnalyticsBaseQuery + from datadog_api_client.v1.model.retention_cohort_criteria_time_interval import RetentionCohortCriteriaTimeInterval + return { + "base_query": (ProductAnalyticsBaseQuery,), + "time_interval": (RetentionCohortCriteriaTimeInterval,), + } + attribute_map = { + "base_query": "base_query", + "time_interval": "time_interval", + } + + def __init__(self_, base_query: ProductAnalyticsBaseQuery, time_interval: RetentionCohortCriteriaTimeInterval, **kwargs): + """ + Cohort criteria for retention queries. + + :param base_query: Product Analytics event query. + :type base_query: ProductAnalyticsBaseQuery + + :param time_interval: Time interval for cohort criteria. + :type time_interval: RetentionCohortCriteriaTimeInterval + """ + super().__init__(kwargs) + + + self_.base_query = base_query + self_.time_interval = time_interval diff --git a/datadog_api_client/v1/model/retention_cohort_criteria_time_interval.py b/datadog_api_client/v1/model/retention_cohort_criteria_time_interval.py new file mode 100644 index 0000000000..da18fd0e3c --- /dev/null +++ b/datadog_api_client/v1/model/retention_cohort_criteria_time_interval.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_cohort_criteria_time_interval_type import RetentionCohortCriteriaTimeIntervalType + from datadog_api_client.v1.model.calendar_interval import CalendarInterval + +class RetentionCohortCriteriaTimeInterval(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_cohort_criteria_time_interval_type import RetentionCohortCriteriaTimeIntervalType + from datadog_api_client.v1.model.calendar_interval import CalendarInterval + return { + "type": (RetentionCohortCriteriaTimeIntervalType,), + "value": (CalendarInterval,), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: RetentionCohortCriteriaTimeIntervalType, value: CalendarInterval, **kwargs): + """ + Time interval for cohort criteria. + + :param type: Type of time interval for cohort criteria. + :type type: RetentionCohortCriteriaTimeIntervalType + + :param value: Calendar interval definition. + :type value: CalendarInterval + """ + super().__init__(kwargs) + + + self_.type = type + self_.value = value diff --git a/datadog_api_client/v1/model/retention_cohort_criteria_time_interval_type.py b/datadog_api_client/v1/model/retention_cohort_criteria_time_interval_type.py new file mode 100644 index 0000000000..268e00131f --- /dev/null +++ b/datadog_api_client/v1/model/retention_cohort_criteria_time_interval_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionCohortCriteriaTimeIntervalType(ModelSimple): + """ + Type of time interval for cohort criteria. + + :param value: If omitted defaults to "calendar". Must be one of ["calendar"]. + :type value: str + """ + + allowed_values = { + "calendar", + } + CALENDAR: ClassVar["RetentionCohortCriteriaTimeIntervalType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionCohortCriteriaTimeIntervalType.CALENDAR = RetentionCohortCriteriaTimeIntervalType("calendar") diff --git a/datadog_api_client/v1/model/retention_compute.py b/datadog_api_client/v1/model/retention_compute.py new file mode 100644 index 0000000000..27dd5d5dec --- /dev/null +++ b/datadog_api_client/v1/model/retention_compute.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.events_aggregation import EventsAggregation + from datadog_api_client.v1.model.retention_compute_metric import RetentionComputeMetric + +class RetentionCompute(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.events_aggregation import EventsAggregation + from datadog_api_client.v1.model.retention_compute_metric import RetentionComputeMetric + return { + "aggregation": (EventsAggregation,), + "metric": (RetentionComputeMetric,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + } + + def __init__(self_, aggregation: Union[EventsAggregation, str, str], metric: RetentionComputeMetric, **kwargs): + """ + Compute configuration for retention queries. + + :param aggregation: The type of aggregation that can be performed on events-based queries. + :type aggregation: EventsAggregation + + :param metric: Metric for retention compute. + :type metric: RetentionComputeMetric + """ + super().__init__(kwargs) + + + self_.aggregation = aggregation + self_.metric = metric diff --git a/datadog_api_client/v1/model/retention_compute_metric.py b/datadog_api_client/v1/model/retention_compute_metric.py new file mode 100644 index 0000000000..67d70ecc2d --- /dev/null +++ b/datadog_api_client/v1/model/retention_compute_metric.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionComputeMetric(ModelSimple): + """ + Metric for retention compute. + + :param value: Must be one of ["__dd.retention", "__dd.retention_rate"]. + :type value: str + """ + + allowed_values = { + "__dd.retention", + "__dd.retention_rate", + } + RETENTION: ClassVar["RetentionComputeMetric"] + RETENTION_RATE: ClassVar["RetentionComputeMetric"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionComputeMetric.RETENTION = RetentionComputeMetric("__dd.retention") +RetentionComputeMetric.RETENTION_RATE = RetentionComputeMetric("__dd.retention_rate") diff --git a/datadog_api_client/v1/model/retention_curve_request_type.py b/datadog_api_client/v1/model/retention_curve_request_type.py new file mode 100644 index 0000000000..39abd5b8e5 --- /dev/null +++ b/datadog_api_client/v1/model/retention_curve_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionCurveRequestType(ModelSimple): + """ + Request type for retention curve widget. + + :param value: If omitted defaults to "retention_curve". Must be one of ["retention_curve"]. + :type value: str + """ + + allowed_values = { + "retention_curve", + } + RETENTION_CURVE: ClassVar["RetentionCurveRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionCurveRequestType.RETENTION_CURVE = RetentionCurveRequestType("retention_curve") diff --git a/datadog_api_client/v1/model/retention_curve_style.py b/datadog_api_client/v1/model/retention_curve_style.py new file mode 100644 index 0000000000..693567c4e3 --- /dev/null +++ b/datadog_api_client/v1/model/retention_curve_style.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RetentionCurveStyle(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "palette": (str,), + } + attribute_map = { + "palette": "palette", + } + + def __init__(self_, palette: Union[str, UnsetType]=unset, **kwargs): + """ + Style configuration for retention curve. + + :param palette: Color palette for the retention curve. + :type palette: str, optional + """ + if palette is not unset: + kwargs["palette"] = palette + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/retention_curve_widget_definition.py b/datadog_api_client/v1/model/retention_curve_widget_definition.py new file mode 100644 index 0000000000..2dc5bf938b --- /dev/null +++ b/datadog_api_client/v1/model/retention_curve_widget_definition.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_curve_widget_request import RetentionCurveWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.retention_curve_widget_definition_type import RetentionCurveWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class RetentionCurveWidgetDefinition(ModelNormal): + validations = { + "requests": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_curve_widget_request import RetentionCurveWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.retention_curve_widget_definition_type import RetentionCurveWidgetDefinitionType + return { + "description": (str,), + "requests": ([RetentionCurveWidgetRequest],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (RetentionCurveWidgetDefinitionType,), + } + attribute_map = { + "description": "description", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[RetentionCurveWidgetRequest], type: RetentionCurveWidgetDefinitionType, description: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The retention curve widget visualizes user retention rates over time. + + :param description: The description of the widget. + :type description: str, optional + + :param requests: List of Retention Curve widget requests. + :type requests: [RetentionCurveWidgetRequest] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the Retention Curve widget. + :type type: RetentionCurveWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/retention_curve_widget_definition_type.py b/datadog_api_client/v1/model/retention_curve_widget_definition_type.py new file mode 100644 index 0000000000..5a417d978c --- /dev/null +++ b/datadog_api_client/v1/model/retention_curve_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionCurveWidgetDefinitionType(ModelSimple): + """ + Type of the Retention Curve widget. + + :param value: If omitted defaults to "retention_curve". Must be one of ["retention_curve"]. + :type value: str + """ + + allowed_values = { + "retention_curve", + } + RETENTION_CURVE: ClassVar["RetentionCurveWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionCurveWidgetDefinitionType.RETENTION_CURVE = RetentionCurveWidgetDefinitionType("retention_curve") diff --git a/datadog_api_client/v1/model/retention_curve_widget_request.py b/datadog_api_client/v1/model/retention_curve_widget_request.py new file mode 100644 index 0000000000..b77fd8efae --- /dev/null +++ b/datadog_api_client/v1/model/retention_curve_widget_request.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_query import RetentionQuery + from datadog_api_client.v1.model.retention_curve_request_type import RetentionCurveRequestType + from datadog_api_client.v1.model.retention_curve_style import RetentionCurveStyle + +class RetentionCurveWidgetRequest(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_query import RetentionQuery + from datadog_api_client.v1.model.retention_curve_request_type import RetentionCurveRequestType + from datadog_api_client.v1.model.retention_curve_style import RetentionCurveStyle + return { + "query": (RetentionQuery,), + "request_type": (RetentionCurveRequestType,), + "style": (RetentionCurveStyle,), + } + attribute_map = { + "query": "query", + "request_type": "request_type", + "style": "style", + } + + def __init__(self_, query: RetentionQuery, request_type: RetentionCurveRequestType, style: Union[RetentionCurveStyle, UnsetType]=unset, **kwargs): + """ + Retention curve widget request. + + :param query: Retention query definition. + :type query: RetentionQuery + + :param request_type: Request type for retention curve widget. + :type request_type: RetentionCurveRequestType + + :param style: Style configuration for retention curve. + :type style: RetentionCurveStyle, optional + """ + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + + self_.query = query + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/retention_data_source.py b/datadog_api_client/v1/model/retention_data_source.py new file mode 100644 index 0000000000..acb8338f6f --- /dev/null +++ b/datadog_api_client/v1/model/retention_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionDataSource(ModelSimple): + """ + Data source for retention queries. + + :param value: If omitted defaults to "product_analytics_retention". Must be one of ["product_analytics_retention"]. + :type value: str + """ + + allowed_values = { + "product_analytics_retention", + } + PRODUCT_ANALYTICS_RETENTION: ClassVar["RetentionDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionDataSource.PRODUCT_ANALYTICS_RETENTION = RetentionDataSource("product_analytics_retention") diff --git a/datadog_api_client/v1/model/retention_entity.py b/datadog_api_client/v1/model/retention_entity.py new file mode 100644 index 0000000000..7897a03e4b --- /dev/null +++ b/datadog_api_client/v1/model/retention_entity.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionEntity(ModelSimple): + """ + Entity to track for retention. + + :param value: Must be one of ["@usr.id", "@account.id"]. + :type value: str + """ + + allowed_values = { + "@usr.id", + "@account.id", + } + USER_ID: ClassVar["RetentionEntity"] + ACCOUNT_ID: ClassVar["RetentionEntity"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionEntity.USER_ID = RetentionEntity("@usr.id") +RetentionEntity.ACCOUNT_ID = RetentionEntity("@account.id") diff --git a/datadog_api_client/v1/model/retention_filters.py b/datadog_api_client/v1/model/retention_filters.py new file mode 100644 index 0000000000..dbe040e499 --- /dev/null +++ b/datadog_api_client/v1/model/retention_filters.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + +class RetentionFilters(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + return { + "audience_filters": (ProductAnalyticsAudienceFilters,), + "string_filter": (str,), + } + attribute_map = { + "audience_filters": "audience_filters", + "string_filter": "string_filter", + } + + def __init__(self_, audience_filters: Union[ProductAnalyticsAudienceFilters, UnsetType]=unset, string_filter: Union[str, UnsetType]=unset, **kwargs): + """ + Filters for retention queries. + + :param audience_filters: Product Analytics/RUM audience filters. + :type audience_filters: ProductAnalyticsAudienceFilters, optional + + :param string_filter: String filter. + :type string_filter: str, optional + """ + if audience_filters is not unset: + kwargs["audience_filters"] = audience_filters + if string_filter is not unset: + kwargs["string_filter"] = string_filter + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/retention_grid_request.py b/datadog_api_client/v1/model/retention_grid_request.py new file mode 100644 index 0000000000..e472b8d3c8 --- /dev/null +++ b/datadog_api_client/v1/model/retention_grid_request.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_query import RetentionQuery + from datadog_api_client.v1.model.retention_grid_request_type import RetentionGridRequestType + +class RetentionGridRequest(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_query import RetentionQuery + from datadog_api_client.v1.model.retention_grid_request_type import RetentionGridRequestType + return { + "query": (RetentionQuery,), + "request_type": (RetentionGridRequestType,), + } + attribute_map = { + "query": "query", + "request_type": "request_type", + } + + def __init__(self_, query: RetentionQuery, request_type: RetentionGridRequestType, **kwargs): + """ + Retention grid widget request. + + :param query: Retention query definition. + :type query: RetentionQuery + + :param request_type: Request type for retention grid widget. + :type request_type: RetentionGridRequestType + """ + super().__init__(kwargs) + + + self_.query = query + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/retention_grid_request_type.py b/datadog_api_client/v1/model/retention_grid_request_type.py new file mode 100644 index 0000000000..80533750ad --- /dev/null +++ b/datadog_api_client/v1/model/retention_grid_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionGridRequestType(ModelSimple): + """ + Request type for retention grid widget. + + :param value: If omitted defaults to "retention_grid". Must be one of ["retention_grid"]. + :type value: str + """ + + allowed_values = { + "retention_grid", + } + RETENTION_GRID: ClassVar["RetentionGridRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionGridRequestType.RETENTION_GRID = RetentionGridRequestType("retention_grid") diff --git a/datadog_api_client/v1/model/retention_group_by.py b/datadog_api_client/v1/model/retention_group_by.py new file mode 100644 index 0000000000..03af44146d --- /dev/null +++ b/datadog_api_client/v1/model/retention_group_by.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_group_by_sort import RetentionGroupBySort + from datadog_api_client.v1.model.retention_group_by_target import RetentionGroupByTarget + +class RetentionGroupBy(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_group_by_sort import RetentionGroupBySort + from datadog_api_client.v1.model.retention_group_by_target import RetentionGroupByTarget + return { + "facet": (str,), + "limit": (int,), + "should_exclude_missing": (bool,), + "sort": (RetentionGroupBySort,), + "source": (str,), + "target": (RetentionGroupByTarget,), + } + attribute_map = { + "facet": "facet", + "limit": "limit", + "should_exclude_missing": "should_exclude_missing", + "sort": "sort", + "source": "source", + "target": "target", + } + + def __init__(self_, facet: str, target: RetentionGroupByTarget, limit: Union[int, UnsetType]=unset, should_exclude_missing: Union[bool, UnsetType]=unset, sort: Union[RetentionGroupBySort, UnsetType]=unset, source: Union[str, UnsetType]=unset, **kwargs): + """ + Group by configuration for retention queries. + + :param facet: Facet to group by. + :type facet: str + + :param limit: Maximum number of groups. + :type limit: int, optional + + :param should_exclude_missing: Whether to exclude missing values. + :type should_exclude_missing: bool, optional + + :param sort: Sort configuration for retention group by. + :type sort: RetentionGroupBySort, optional + + :param source: Source field. + :type source: str, optional + + :param target: Target for retention group by. + :type target: RetentionGroupByTarget + """ + if limit is not unset: + kwargs["limit"] = limit + if should_exclude_missing is not unset: + kwargs["should_exclude_missing"] = should_exclude_missing + if sort is not unset: + kwargs["sort"] = sort + if source is not unset: + kwargs["source"] = source + super().__init__(kwargs) + + + self_.facet = facet + self_.target = target diff --git a/datadog_api_client/v1/model/retention_group_by_sort.py b/datadog_api_client/v1/model/retention_group_by_sort.py new file mode 100644 index 0000000000..063c7b72f6 --- /dev/null +++ b/datadog_api_client/v1/model/retention_group_by_sort.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_sort import WidgetSort + +class RetentionGroupBySort(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_sort import WidgetSort + return { + "order": (WidgetSort,), + } + attribute_map = { + "order": "order", + } + + def __init__(self_, order: Union[WidgetSort, UnsetType]=unset, **kwargs): + """ + Sort configuration for retention group by. + + :param order: Widget sorting methods. + :type order: WidgetSort, optional + """ + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/retention_group_by_target.py b/datadog_api_client/v1/model/retention_group_by_target.py new file mode 100644 index 0000000000..22e21b78b5 --- /dev/null +++ b/datadog_api_client/v1/model/retention_group_by_target.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionGroupByTarget(ModelSimple): + """ + Target for retention group by. + + :param value: Must be one of ["cohort", "return_period"]. + :type value: str + """ + + allowed_values = { + "cohort", + "return_period", + } + COHORT: ClassVar["RetentionGroupByTarget"] + RETURN_PERIOD: ClassVar["RetentionGroupByTarget"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionGroupByTarget.COHORT = RetentionGroupByTarget("cohort") +RetentionGroupByTarget.RETURN_PERIOD = RetentionGroupByTarget("return_period") diff --git a/datadog_api_client/v1/model/retention_query.py b/datadog_api_client/v1/model/retention_query.py new file mode 100644 index 0000000000..ee031aa076 --- /dev/null +++ b/datadog_api_client/v1/model/retention_query.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_compute import RetentionCompute + from datadog_api_client.v1.model.retention_data_source import RetentionDataSource + from datadog_api_client.v1.model.retention_filters import RetentionFilters + from datadog_api_client.v1.model.retention_group_by import RetentionGroupBy + from datadog_api_client.v1.model.retention_search import RetentionSearch + +class RetentionQuery(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_compute import RetentionCompute + from datadog_api_client.v1.model.retention_data_source import RetentionDataSource + from datadog_api_client.v1.model.retention_filters import RetentionFilters + from datadog_api_client.v1.model.retention_group_by import RetentionGroupBy + from datadog_api_client.v1.model.retention_search import RetentionSearch + return { + "compute": (RetentionCompute,), + "data_source": (RetentionDataSource,), + "filters": (RetentionFilters,), + "group_by": ([RetentionGroupBy],), + "name": (str,), + "search": (RetentionSearch,), + } + attribute_map = { + "compute": "compute", + "data_source": "data_source", + "filters": "filters", + "group_by": "group_by", + "name": "name", + "search": "search", + } + + def __init__(self_, compute: RetentionCompute, data_source: RetentionDataSource, search: RetentionSearch, filters: Union[RetentionFilters, UnsetType]=unset, group_by: Union[List[RetentionGroupBy], UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Retention query definition. + + :param compute: Compute configuration for retention queries. + :type compute: RetentionCompute + + :param data_source: Data source for retention queries. + :type data_source: RetentionDataSource + + :param filters: Filters for retention queries. + :type filters: RetentionFilters, optional + + :param group_by: Group by configuration. + :type group_by: [RetentionGroupBy], optional + + :param name: Name of the query. + :type name: str, optional + + :param search: Search configuration for retention queries. + :type search: RetentionSearch + """ + if filters is not unset: + kwargs["filters"] = filters + if group_by is not unset: + kwargs["group_by"] = group_by + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.compute = compute + self_.data_source = data_source + self_.search = search diff --git a/datadog_api_client/v1/model/retention_return_condition.py b/datadog_api_client/v1/model/retention_return_condition.py new file mode 100644 index 0000000000..d088ce1243 --- /dev/null +++ b/datadog_api_client/v1/model/retention_return_condition.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionReturnCondition(ModelSimple): + """ + Condition for counting user return. + + :param value: Must be one of ["conversion_on", "conversion_on_or_after"]. + :type value: str + """ + + allowed_values = { + "conversion_on", + "conversion_on_or_after", + } + CONVERSION_ON: ClassVar["RetentionReturnCondition"] + CONVERSION_ON_OR_AFTER: ClassVar["RetentionReturnCondition"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionReturnCondition.CONVERSION_ON = RetentionReturnCondition("conversion_on") +RetentionReturnCondition.CONVERSION_ON_OR_AFTER = RetentionReturnCondition("conversion_on_or_after") diff --git a/datadog_api_client/v1/model/retention_return_criteria.py b/datadog_api_client/v1/model/retention_return_criteria.py new file mode 100644 index 0000000000..f541fa0d3e --- /dev/null +++ b/datadog_api_client/v1/model/retention_return_criteria.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_base_query import ProductAnalyticsBaseQuery + from datadog_api_client.v1.model.retention_return_criteria_time_interval import RetentionReturnCriteriaTimeInterval + +class RetentionReturnCriteria(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_base_query import ProductAnalyticsBaseQuery + from datadog_api_client.v1.model.retention_return_criteria_time_interval import RetentionReturnCriteriaTimeInterval + return { + "base_query": (ProductAnalyticsBaseQuery,), + "time_interval": (RetentionReturnCriteriaTimeInterval,), + } + attribute_map = { + "base_query": "base_query", + "time_interval": "time_interval", + } + + def __init__(self_, base_query: ProductAnalyticsBaseQuery, time_interval: Union[RetentionReturnCriteriaTimeInterval, UnsetType]=unset, **kwargs): + """ + Return criteria for retention queries. + + :param base_query: Product Analytics event query. + :type base_query: ProductAnalyticsBaseQuery + + :param time_interval: Time interval for return criteria. + :type time_interval: RetentionReturnCriteriaTimeInterval, optional + """ + if time_interval is not unset: + kwargs["time_interval"] = time_interval + super().__init__(kwargs) + + + self_.base_query = base_query diff --git a/datadog_api_client/v1/model/retention_return_criteria_time_interval.py b/datadog_api_client/v1/model/retention_return_criteria_time_interval.py new file mode 100644 index 0000000000..3137544d8c --- /dev/null +++ b/datadog_api_client/v1/model/retention_return_criteria_time_interval.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_return_criteria_time_interval_type import RetentionReturnCriteriaTimeIntervalType + from datadog_api_client.v1.model.retention_return_criteria_time_interval_unit import RetentionReturnCriteriaTimeIntervalUnit + +class RetentionReturnCriteriaTimeInterval(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_return_criteria_time_interval_type import RetentionReturnCriteriaTimeIntervalType + from datadog_api_client.v1.model.retention_return_criteria_time_interval_unit import RetentionReturnCriteriaTimeIntervalUnit + return { + "type": (RetentionReturnCriteriaTimeIntervalType,), + "unit": (RetentionReturnCriteriaTimeIntervalUnit,), + "value": (float,), + } + attribute_map = { + "type": "type", + "unit": "unit", + "value": "value", + } + + def __init__(self_, type: RetentionReturnCriteriaTimeIntervalType, unit: RetentionReturnCriteriaTimeIntervalUnit, value: float, **kwargs): + """ + Time interval for return criteria. + + :param type: Type of time interval for return criteria. + :type type: RetentionReturnCriteriaTimeIntervalType + + :param unit: Unit of time for retention return criteria interval. + :type unit: RetentionReturnCriteriaTimeIntervalUnit + + :param value: Value of the time interval. + :type value: float + """ + super().__init__(kwargs) + + + self_.type = type + self_.unit = unit + self_.value = value diff --git a/datadog_api_client/v1/model/retention_return_criteria_time_interval_type.py b/datadog_api_client/v1/model/retention_return_criteria_time_interval_type.py new file mode 100644 index 0000000000..f31b0dbe79 --- /dev/null +++ b/datadog_api_client/v1/model/retention_return_criteria_time_interval_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionReturnCriteriaTimeIntervalType(ModelSimple): + """ + Type of time interval for return criteria. + + :param value: If omitted defaults to "fixed". Must be one of ["fixed"]. + :type value: str + """ + + allowed_values = { + "fixed", + } + FIXED: ClassVar["RetentionReturnCriteriaTimeIntervalType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionReturnCriteriaTimeIntervalType.FIXED = RetentionReturnCriteriaTimeIntervalType("fixed") diff --git a/datadog_api_client/v1/model/retention_return_criteria_time_interval_unit.py b/datadog_api_client/v1/model/retention_return_criteria_time_interval_unit.py new file mode 100644 index 0000000000..b0ca364ba3 --- /dev/null +++ b/datadog_api_client/v1/model/retention_return_criteria_time_interval_unit.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionReturnCriteriaTimeIntervalUnit(ModelSimple): + """ + Unit of time for retention return criteria interval. + + :param value: Must be one of ["day", "week", "month"]. + :type value: str + """ + + allowed_values = { + "day", + "week", + "month", + } + DAY: ClassVar["RetentionReturnCriteriaTimeIntervalUnit"] + WEEK: ClassVar["RetentionReturnCriteriaTimeIntervalUnit"] + MONTH: ClassVar["RetentionReturnCriteriaTimeIntervalUnit"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionReturnCriteriaTimeIntervalUnit.DAY = RetentionReturnCriteriaTimeIntervalUnit("day") +RetentionReturnCriteriaTimeIntervalUnit.WEEK = RetentionReturnCriteriaTimeIntervalUnit("week") +RetentionReturnCriteriaTimeIntervalUnit.MONTH = RetentionReturnCriteriaTimeIntervalUnit("month") diff --git a/datadog_api_client/v1/model/retention_search.py b/datadog_api_client/v1/model/retention_search.py new file mode 100644 index 0000000000..b86ded8928 --- /dev/null +++ b/datadog_api_client/v1/model/retention_search.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.retention_cohort_criteria import RetentionCohortCriteria + from datadog_api_client.v1.model.retention_filters import RetentionFilters + from datadog_api_client.v1.model.retention_entity import RetentionEntity + from datadog_api_client.v1.model.retention_return_condition import RetentionReturnCondition + from datadog_api_client.v1.model.retention_return_criteria import RetentionReturnCriteria + +class RetentionSearch(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.retention_cohort_criteria import RetentionCohortCriteria + from datadog_api_client.v1.model.retention_filters import RetentionFilters + from datadog_api_client.v1.model.retention_entity import RetentionEntity + from datadog_api_client.v1.model.retention_return_condition import RetentionReturnCondition + from datadog_api_client.v1.model.retention_return_criteria import RetentionReturnCriteria + return { + "cohort_criteria": (RetentionCohortCriteria,), + "filters": (RetentionFilters,), + "retention_entity": (RetentionEntity,), + "return_condition": (RetentionReturnCondition,), + "return_criteria": (RetentionReturnCriteria,), + } + attribute_map = { + "cohort_criteria": "cohort_criteria", + "filters": "filters", + "retention_entity": "retention_entity", + "return_condition": "return_condition", + "return_criteria": "return_criteria", + } + + def __init__(self_, cohort_criteria: RetentionCohortCriteria, retention_entity: RetentionEntity, return_condition: RetentionReturnCondition, filters: Union[RetentionFilters, UnsetType]=unset, return_criteria: Union[RetentionReturnCriteria, UnsetType]=unset, **kwargs): + """ + Search configuration for retention queries. + + :param cohort_criteria: Cohort criteria for retention queries. + :type cohort_criteria: RetentionCohortCriteria + + :param filters: Filters for retention queries. + :type filters: RetentionFilters, optional + + :param retention_entity: Entity to track for retention. + :type retention_entity: RetentionEntity + + :param return_condition: Condition for counting user return. + :type return_condition: RetentionReturnCondition + + :param return_criteria: Return criteria for retention queries. + :type return_criteria: RetentionReturnCriteria, optional + """ + if filters is not unset: + kwargs["filters"] = filters + if return_criteria is not unset: + kwargs["return_criteria"] = return_criteria + super().__init__(kwargs) + + + self_.cohort_criteria = cohort_criteria + self_.retention_entity = retention_entity + self_.return_condition = return_condition diff --git a/datadog_api_client/v1/model/run_workflow_widget_definition.py b/datadog_api_client/v1/model/run_workflow_widget_definition.py new file mode 100644 index 0000000000..09700593f5 --- /dev/null +++ b/datadog_api_client/v1/model/run_workflow_widget_definition.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.run_workflow_widget_input import RunWorkflowWidgetInput + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.run_workflow_widget_definition_type import RunWorkflowWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class RunWorkflowWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.run_workflow_widget_input import RunWorkflowWidgetInput + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.run_workflow_widget_definition_type import RunWorkflowWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "inputs": ([RunWorkflowWidgetInput],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (RunWorkflowWidgetDefinitionType,), + "workflow_id": (str,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "inputs": "inputs", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "workflow_id": "workflow_id", + } + + def __init__(self_, type: RunWorkflowWidgetDefinitionType, workflow_id: str, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, inputs: Union[List[RunWorkflowWidgetInput], UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + Run workflow is widget that allows you to run a workflow from a dashboard. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param inputs: Array of workflow inputs to map to dashboard template variables. + :type inputs: [RunWorkflowWidgetInput], optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the run workflow widget. + :type type: RunWorkflowWidgetDefinitionType + + :param workflow_id: Workflow id. + :type workflow_id: str + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if inputs is not unset: + kwargs["inputs"] = inputs + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.type = type + self_.workflow_id = workflow_id diff --git a/datadog_api_client/v1/model/run_workflow_widget_definition_type.py b/datadog_api_client/v1/model/run_workflow_widget_definition_type.py new file mode 100644 index 0000000000..86ddaee4d8 --- /dev/null +++ b/datadog_api_client/v1/model/run_workflow_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RunWorkflowWidgetDefinitionType(ModelSimple): + """ + Type of the run workflow widget. + + :param value: If omitted defaults to "run_workflow". Must be one of ["run_workflow"]. + :type value: str + """ + + allowed_values = { + "run_workflow", + } + RUN_WORKFLOW: ClassVar["RunWorkflowWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RunWorkflowWidgetDefinitionType.RUN_WORKFLOW = RunWorkflowWidgetDefinitionType("run_workflow") diff --git a/datadog_api_client/v1/model/run_workflow_widget_input.py b/datadog_api_client/v1/model/run_workflow_widget_input.py new file mode 100644 index 0000000000..fc757c9d8f --- /dev/null +++ b/datadog_api_client/v1/model/run_workflow_widget_input.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RunWorkflowWidgetInput(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, value: str, **kwargs): + """ + Object to map a dashboard template variable to a workflow input. + + :param name: Name of the workflow input. + :type name: str + + :param value: Dashboard template variable. Can be suffixed with '.value' or '.key'. + :type value: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.value = value diff --git a/datadog_api_client/v1/model/sankey_join_keys.py b/datadog_api_client/v1/model/sankey_join_keys.py new file mode 100644 index 0000000000..d748ea3f57 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_join_keys.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SankeyJoinKeys(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "primary": (str,), + "secondary": ([str],), + } + attribute_map = { + "primary": "primary", + "secondary": "secondary", + } + + def __init__(self_, primary: str, secondary: Union[List[str], UnsetType]=unset, **kwargs): + """ + Join keys. + + :param primary: Primary join key. + :type primary: str + + :param secondary: Secondary join keys. + :type secondary: [str], optional + """ + if secondary is not unset: + kwargs["secondary"] = secondary + super().__init__(kwargs) + + + self_.primary = primary diff --git a/datadog_api_client/v1/model/sankey_network_data_source.py b/datadog_api_client/v1/model/sankey_network_data_source.py new file mode 100644 index 0000000000..1a7f08fc3f --- /dev/null +++ b/datadog_api_client/v1/model/sankey_network_data_source.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SankeyNetworkDataSource(ModelSimple): + """ + Network data source type. + + :param value: If omitted defaults to "network". Must be one of ["network_device_flows", "network"]. + :type value: str + """ + + allowed_values = { + "network_device_flows", + "network", + } + NETWORK_DEVICE_FLOWS: ClassVar["SankeyNetworkDataSource"] + NETWORK: ClassVar["SankeyNetworkDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SankeyNetworkDataSource.NETWORK_DEVICE_FLOWS = SankeyNetworkDataSource("network_device_flows") +SankeyNetworkDataSource.NETWORK = SankeyNetworkDataSource("network") diff --git a/datadog_api_client/v1/model/sankey_network_query.py b/datadog_api_client/v1/model/sankey_network_query.py new file mode 100644 index 0000000000..9eb59c3be2 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_network_query.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.sankey_network_query_compute import SankeyNetworkQueryCompute + from datadog_api_client.v1.model.sankey_network_data_source import SankeyNetworkDataSource + from datadog_api_client.v1.model.sankey_network_query_mode import SankeyNetworkQueryMode + from datadog_api_client.v1.model.sankey_network_query_sort import SankeyNetworkQuerySort + +class SankeyNetworkQuery(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.sankey_network_query_compute import SankeyNetworkQueryCompute + from datadog_api_client.v1.model.sankey_network_data_source import SankeyNetworkDataSource + from datadog_api_client.v1.model.sankey_network_query_mode import SankeyNetworkQueryMode + from datadog_api_client.v1.model.sankey_network_query_sort import SankeyNetworkQuerySort + return { + "compute": (SankeyNetworkQueryCompute,), + "data_source": (SankeyNetworkDataSource,), + "group_by": ([str],), + "limit": (int,), + "mode": (SankeyNetworkQueryMode,), + "query_string": (str,), + "should_exclude_missing": (bool,), + "sort": (SankeyNetworkQuerySort,), + } + attribute_map = { + "compute": "compute", + "data_source": "data_source", + "group_by": "group_by", + "limit": "limit", + "mode": "mode", + "query_string": "query_string", + "should_exclude_missing": "should_exclude_missing", + "sort": "sort", + } + + def __init__(self_, data_source: SankeyNetworkDataSource, group_by: List[str], limit: int, query_string: str, compute: Union[SankeyNetworkQueryCompute, UnsetType]=unset, mode: Union[SankeyNetworkQueryMode, UnsetType]=unset, should_exclude_missing: Union[bool, UnsetType]=unset, sort: Union[SankeyNetworkQuerySort, UnsetType]=unset, **kwargs): + """ + Query configuration for Sankey network widget. + + :param compute: Compute aggregation for network queries. + :type compute: SankeyNetworkQueryCompute, optional + + :param data_source: Network data source type. + :type data_source: SankeyNetworkDataSource + + :param group_by: Fields to group by. + :type group_by: [str] + + :param limit: Maximum number of results. + :type limit: int + + :param mode: Sankey mode for network queries. + :type mode: SankeyNetworkQueryMode, optional + + :param query_string: Query string for filtering network data. + :type query_string: str + + :param should_exclude_missing: Whether to exclude missing values. + :type should_exclude_missing: bool, optional + + :param sort: Sort configuration for network queries. + :type sort: SankeyNetworkQuerySort, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if mode is not unset: + kwargs["mode"] = mode + if should_exclude_missing is not unset: + kwargs["should_exclude_missing"] = should_exclude_missing + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + + self_.data_source = data_source + self_.group_by = group_by + self_.limit = limit + self_.query_string = query_string diff --git a/datadog_api_client/v1/model/sankey_network_query_compute.py b/datadog_api_client/v1/model/sankey_network_query_compute.py new file mode 100644 index 0000000000..62ed93f935 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_network_query_compute.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.events_aggregation import EventsAggregation + +class SankeyNetworkQueryCompute(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.events_aggregation import EventsAggregation + return { + "aggregation": (EventsAggregation,), + "metric": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + } + + def __init__(self_, aggregation: Union[EventsAggregation, str, str], metric: str, **kwargs): + """ + Compute aggregation for network queries. + + :param aggregation: The type of aggregation that can be performed on events-based queries. + :type aggregation: EventsAggregation + + :param metric: Metric to aggregate. + :type metric: str + """ + super().__init__(kwargs) + + + self_.aggregation = aggregation + self_.metric = metric diff --git a/datadog_api_client/v1/model/sankey_network_query_mode.py b/datadog_api_client/v1/model/sankey_network_query_mode.py new file mode 100644 index 0000000000..674504f215 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_network_query_mode.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SankeyNetworkQueryMode(ModelSimple): + """ + Sankey mode for network queries. + + :param value: If omitted defaults to "target". Must be one of ["target"]. + :type value: str + """ + + allowed_values = { + "target", + } + TARGET: ClassVar["SankeyNetworkQueryMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SankeyNetworkQueryMode.TARGET = SankeyNetworkQueryMode("target") diff --git a/datadog_api_client/v1/model/sankey_network_query_sort.py b/datadog_api_client/v1/model/sankey_network_query_sort.py new file mode 100644 index 0000000000..e71a8e55db --- /dev/null +++ b/datadog_api_client/v1/model/sankey_network_query_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_sort import WidgetSort + +class SankeyNetworkQuerySort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_sort import WidgetSort + return { + "field": (str,), + "order": (WidgetSort,), + } + attribute_map = { + "field": "field", + "order": "order", + } + + def __init__(self_, field: Union[str, UnsetType]=unset, order: Union[WidgetSort, UnsetType]=unset, **kwargs): + """ + Sort configuration for network queries. + + :param field: Field to sort by. + :type field: str, optional + + :param order: Widget sorting methods. + :type order: WidgetSort, optional + """ + if field is not unset: + kwargs["field"] = field + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/sankey_network_request.py b/datadog_api_client/v1/model/sankey_network_request.py new file mode 100644 index 0000000000..5765531ac0 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_network_request.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.sankey_network_query import SankeyNetworkQuery + from datadog_api_client.v1.model.sankey_network_request_type import SankeyNetworkRequestType + +class SankeyNetworkRequest(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.sankey_network_query import SankeyNetworkQuery + from datadog_api_client.v1.model.sankey_network_request_type import SankeyNetworkRequestType + return { + "query": (SankeyNetworkQuery,), + "request_type": (SankeyNetworkRequestType,), + } + attribute_map = { + "query": "query", + "request_type": "request_type", + } + + def __init__(self_, query: SankeyNetworkQuery, request_type: SankeyNetworkRequestType, **kwargs): + """ + Sankey widget request for network data source. + + :param query: Query configuration for Sankey network widget. + :type query: SankeyNetworkQuery + + :param request_type: Type of request for network Sankey widget. + :type request_type: SankeyNetworkRequestType + """ + super().__init__(kwargs) + + + self_.query = query + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/sankey_network_request_type.py b/datadog_api_client/v1/model/sankey_network_request_type.py new file mode 100644 index 0000000000..52d0f243cf --- /dev/null +++ b/datadog_api_client/v1/model/sankey_network_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SankeyNetworkRequestType(ModelSimple): + """ + Type of request for network Sankey widget. + + :param value: If omitted defaults to "netflow_sankey". Must be one of ["netflow_sankey"]. + :type value: str + """ + + allowed_values = { + "netflow_sankey", + } + NETFLOW_SANKEY: ClassVar["SankeyNetworkRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SankeyNetworkRequestType.NETFLOW_SANKEY = SankeyNetworkRequestType("netflow_sankey") diff --git a/datadog_api_client/v1/model/sankey_rum_data_source.py b/datadog_api_client/v1/model/sankey_rum_data_source.py new file mode 100644 index 0000000000..ec191e8635 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_rum_data_source.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SankeyRumDataSource(ModelSimple): + """ + Product Analytics or RUM data source type. + + :param value: If omitted defaults to "product_analytics". Must be one of ["rum", "product_analytics"]. + :type value: str + """ + + allowed_values = { + "rum", + "product_analytics", + } + RUM: ClassVar["SankeyRumDataSource"] + PRODUCT_ANALYTICS: ClassVar["SankeyRumDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SankeyRumDataSource.RUM = SankeyRumDataSource("rum") +SankeyRumDataSource.PRODUCT_ANALYTICS = SankeyRumDataSource("product_analytics") diff --git a/datadog_api_client/v1/model/sankey_rum_query.py b/datadog_api_client/v1/model/sankey_rum_query.py new file mode 100644 index 0000000000..6fc1c18be7 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_rum_query.py @@ -0,0 +1,127 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + from datadog_api_client.v1.model.sankey_rum_data_source import SankeyRumDataSource + from datadog_api_client.v1.model.sankey_join_keys import SankeyJoinKeys + from datadog_api_client.v1.model.sankey_rum_query_mode import SankeyRumQueryMode + from datadog_api_client.v1.model.product_analytics_audience_occurrence_filter import ProductAnalyticsAudienceOccurrenceFilter + +class SankeyRumQuery(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + from datadog_api_client.v1.model.sankey_rum_data_source import SankeyRumDataSource + from datadog_api_client.v1.model.sankey_join_keys import SankeyJoinKeys + from datadog_api_client.v1.model.sankey_rum_query_mode import SankeyRumQueryMode + from datadog_api_client.v1.model.product_analytics_audience_occurrence_filter import ProductAnalyticsAudienceOccurrenceFilter + return { + "audience_filters": (ProductAnalyticsAudienceFilters,), + "data_source": (SankeyRumDataSource,), + "entries_per_step": (int,), + "join_keys": (SankeyJoinKeys,), + "mode": (SankeyRumQueryMode,), + "number_of_steps": (int,), + "occurrences": (ProductAnalyticsAudienceOccurrenceFilter,), + "query_string": (str,), + "source": (str,), + "subquery_id": (str,), + "target": (str,), + } + attribute_map = { + "audience_filters": "audience_filters", + "data_source": "data_source", + "entries_per_step": "entries_per_step", + "join_keys": "join_keys", + "mode": "mode", + "number_of_steps": "number_of_steps", + "occurrences": "occurrences", + "query_string": "query_string", + "source": "source", + "subquery_id": "subquery_id", + "target": "target", + } + + def __init__(self_, data_source: SankeyRumDataSource, mode: SankeyRumQueryMode, query_string: str, audience_filters: Union[ProductAnalyticsAudienceFilters, UnsetType]=unset, entries_per_step: Union[int, UnsetType]=unset, join_keys: Union[SankeyJoinKeys, UnsetType]=unset, number_of_steps: Union[int, UnsetType]=unset, occurrences: Union[ProductAnalyticsAudienceOccurrenceFilter, UnsetType]=unset, source: Union[str, UnsetType]=unset, subquery_id: Union[str, UnsetType]=unset, target: Union[str, UnsetType]=unset, **kwargs): + """ + Query configuration for Product Analytics or RUM Sankey widget. + + :param audience_filters: Product Analytics/RUM audience filters. + :type audience_filters: ProductAnalyticsAudienceFilters, optional + + :param data_source: Product Analytics or RUM data source type. + :type data_source: SankeyRumDataSource + + :param entries_per_step: Entries per step. + :type entries_per_step: int, optional + + :param join_keys: Join keys. + :type join_keys: SankeyJoinKeys, optional + + :param mode: Sankey mode for Product Analytics or RUM queries. + :type mode: SankeyRumQueryMode + + :param number_of_steps: Number of steps. + :type number_of_steps: int, optional + + :param occurrences: Filter applied to occurrence counts when building a Product Analytics audience. + :type occurrences: ProductAnalyticsAudienceOccurrenceFilter, optional + + :param query_string: RUM event search query used to filter views or actions. + :type query_string: str + + :param source: Source. + :type source: str, optional + + :param subquery_id: Subquery ID. + :type subquery_id: str, optional + + :param target: Target. + :type target: str, optional + """ + if audience_filters is not unset: + kwargs["audience_filters"] = audience_filters + if entries_per_step is not unset: + kwargs["entries_per_step"] = entries_per_step + if join_keys is not unset: + kwargs["join_keys"] = join_keys + if number_of_steps is not unset: + kwargs["number_of_steps"] = number_of_steps + if occurrences is not unset: + kwargs["occurrences"] = occurrences + if source is not unset: + kwargs["source"] = source + if subquery_id is not unset: + kwargs["subquery_id"] = subquery_id + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + + self_.data_source = data_source + self_.mode = mode + self_.query_string = query_string diff --git a/datadog_api_client/v1/model/sankey_rum_query_mode.py b/datadog_api_client/v1/model/sankey_rum_query_mode.py new file mode 100644 index 0000000000..23b2f5e681 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_rum_query_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SankeyRumQueryMode(ModelSimple): + """ + Sankey mode for Product Analytics or RUM queries. + + :param value: If omitted defaults to "source". Must be one of ["source", "target"]. + :type value: str + """ + + allowed_values = { + "source", + "target", + } + SOURCE: ClassVar["SankeyRumQueryMode"] + TARGET: ClassVar["SankeyRumQueryMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SankeyRumQueryMode.SOURCE = SankeyRumQueryMode("source") +SankeyRumQueryMode.TARGET = SankeyRumQueryMode("target") diff --git a/datadog_api_client/v1/model/sankey_rum_request.py b/datadog_api_client/v1/model/sankey_rum_request.py new file mode 100644 index 0000000000..104943da79 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_rum_request.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.sankey_rum_query import SankeyRumQuery + from datadog_api_client.v1.model.sankey_widget_definition_type import SankeyWidgetDefinitionType + +class SankeyRumRequest(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.sankey_rum_query import SankeyRumQuery + from datadog_api_client.v1.model.sankey_widget_definition_type import SankeyWidgetDefinitionType + return { + "query": (SankeyRumQuery,), + "request_type": (SankeyWidgetDefinitionType,), + } + attribute_map = { + "query": "query", + "request_type": "request_type", + } + + def __init__(self_, query: SankeyRumQuery, request_type: SankeyWidgetDefinitionType, **kwargs): + """ + Sankey widget request for Product Analytics or RUM data source. + + :param query: Query configuration for Product Analytics or RUM Sankey widget. + :type query: SankeyRumQuery + + :param request_type: Type of the Sankey widget. + :type request_type: SankeyWidgetDefinitionType + """ + super().__init__(kwargs) + + + self_.query = query + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/sankey_widget_definition.py b/datadog_api_client/v1/model/sankey_widget_definition.py new file mode 100644 index 0000000000..9efa699596 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_widget_definition.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.sankey_widget_request import SankeyWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.sankey_widget_definition_type import SankeyWidgetDefinitionType + from datadog_api_client.v1.model.sankey_rum_request import SankeyRumRequest + from datadog_api_client.v1.model.sankey_network_request import SankeyNetworkRequest + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class SankeyWidgetDefinition(ModelNormal): + validations = { + "requests": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.sankey_widget_request import SankeyWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.sankey_widget_definition_type import SankeyWidgetDefinitionType + return { + "requests": ([SankeyWidgetRequest],), + "show_other_links": (bool,), + "sort_nodes": (bool,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (SankeyWidgetDefinitionType,), + } + attribute_map = { + "requests": "requests", + "show_other_links": "show_other_links", + "sort_nodes": "sort_nodes", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[Union[SankeyWidgetRequest, SankeyRumRequest, SankeyNetworkRequest]], type: SankeyWidgetDefinitionType, show_other_links: Union[bool, UnsetType]=unset, sort_nodes: Union[bool, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The Sankey diagram visualizes the flow of data between categories, stages or sets of values. + + :param requests: List of Sankey widget requests. + :type requests: [SankeyWidgetRequest] + + :param show_other_links: Whether to show links for "other" category. + :type show_other_links: bool, optional + + :param sort_nodes: Whether to sort nodes in the Sankey diagram. + :type sort_nodes: bool, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the Sankey widget. + :type type: SankeyWidgetDefinitionType + """ + if show_other_links is not unset: + kwargs["show_other_links"] = show_other_links + if sort_nodes is not unset: + kwargs["sort_nodes"] = sort_nodes + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/sankey_widget_definition_type.py b/datadog_api_client/v1/model/sankey_widget_definition_type.py new file mode 100644 index 0000000000..98eb34b486 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SankeyWidgetDefinitionType(ModelSimple): + """ + Type of the Sankey widget. + + :param value: If omitted defaults to "sankey". Must be one of ["sankey"]. + :type value: str + """ + + allowed_values = { + "sankey", + } + SANKEY: ClassVar["SankeyWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SankeyWidgetDefinitionType.SANKEY = SankeyWidgetDefinitionType("sankey") diff --git a/datadog_api_client/v1/model/sankey_widget_request.py b/datadog_api_client/v1/model/sankey_widget_request.py new file mode 100644 index 0000000000..ddfc9e38f5 --- /dev/null +++ b/datadog_api_client/v1/model/sankey_widget_request.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SankeyWidgetRequest(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Request definition for Sankey widget. + + :param query: Query configuration for Product Analytics or RUM Sankey widget. + :type query: SankeyRumQuery + + :param request_type: Type of the Sankey widget. + :type request_type: SankeyWidgetDefinitionType + """ + 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.v1.model.sankey_rum_request import SankeyRumRequest + from datadog_api_client.v1.model.sankey_network_request import SankeyNetworkRequest + return { + "oneOf": [ + SankeyRumRequest, + SankeyNetworkRequest, + ], + } diff --git a/datadog_api_client/v1/model/scatter_plot_request.py b/datadog_api_client/v1/model/scatter_plot_request.py new file mode 100644 index 0000000000..7a943a1f71 --- /dev/null +++ b/datadog_api_client/v1/model/scatter_plot_request.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.scatterplot_widget_aggregator import ScatterplotWidgetAggregator + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + +class ScatterPlotRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.scatterplot_widget_aggregator import ScatterplotWidgetAggregator + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + return { + "aggregator": (ScatterplotWidgetAggregator,), + "apm_query": (LogQueryDefinition,), + "event_query": (LogQueryDefinition,), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + } + attribute_map = { + "aggregator": "aggregator", + "apm_query": "apm_query", + "event_query": "event_query", + "log_query": "log_query", + "network_query": "network_query", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "rum_query": "rum_query", + "security_query": "security_query", + } + + def __init__(self_, aggregator: Union[ScatterplotWidgetAggregator, UnsetType]=unset, apm_query: Union[LogQueryDefinition, UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, **kwargs): + """ + Updated scatter plot. + + :param aggregator: Aggregator used for the request. + :type aggregator: ScatterplotWidgetAggregator, optional + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Query definition. + :type q: str, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if event_query is not unset: + kwargs["event_query"] = event_query + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/scatter_plot_widget_definition.py b/datadog_api_client/v1/model/scatter_plot_widget_definition.py new file mode 100644 index 0000000000..afae575f10 --- /dev/null +++ b/datadog_api_client/v1/model/scatter_plot_widget_definition.py @@ -0,0 +1,141 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.scatter_plot_widget_definition_requests import ScatterPlotWidgetDefinitionRequests + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.scatter_plot_widget_definition_type import ScatterPlotWidgetDefinitionType + from datadog_api_client.v1.model.widget_axis import WidgetAxis + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class ScatterPlotWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.scatter_plot_widget_definition_requests import ScatterPlotWidgetDefinitionRequests + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.scatter_plot_widget_definition_type import ScatterPlotWidgetDefinitionType + from datadog_api_client.v1.model.widget_axis import WidgetAxis + return { + "color_by_groups": ([str],), + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "requests": (ScatterPlotWidgetDefinitionRequests,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (ScatterPlotWidgetDefinitionType,), + "xaxis": (WidgetAxis,), + "yaxis": (WidgetAxis,), + } + attribute_map = { + "color_by_groups": "color_by_groups", + "custom_links": "custom_links", + "description": "description", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "xaxis": "xaxis", + "yaxis": "yaxis", + } + + def __init__(self_, requests: ScatterPlotWidgetDefinitionRequests, type: ScatterPlotWidgetDefinitionType, color_by_groups: Union[List[str], UnsetType]=unset, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, xaxis: Union[WidgetAxis, UnsetType]=unset, yaxis: Union[WidgetAxis, UnsetType]=unset, **kwargs): + """ + The scatter plot visualization allows you to graph a chosen scope over two different metrics with their respective aggregation. + + :param color_by_groups: List of groups used for colors. + :type color_by_groups: [str], optional + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param requests: Widget definition. + :type requests: ScatterPlotWidgetDefinitionRequests + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the scatter plot widget. + :type type: ScatterPlotWidgetDefinitionType + + :param xaxis: Axis controls for the widget. + :type xaxis: WidgetAxis, optional + + :param yaxis: Axis controls for the widget. + :type yaxis: WidgetAxis, optional + """ + if color_by_groups is not unset: + kwargs["color_by_groups"] = color_by_groups + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + if xaxis is not unset: + kwargs["xaxis"] = xaxis + if yaxis is not unset: + kwargs["yaxis"] = yaxis + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/scatter_plot_widget_definition_requests.py b/datadog_api_client/v1/model/scatter_plot_widget_definition_requests.py new file mode 100644 index 0000000000..bc21941601 --- /dev/null +++ b/datadog_api_client/v1/model/scatter_plot_widget_definition_requests.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.scatterplot_table_request import ScatterplotTableRequest + from datadog_api_client.v1.model.scatter_plot_request import ScatterPlotRequest + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class ScatterPlotWidgetDefinitionRequests(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.scatterplot_table_request import ScatterplotTableRequest + from datadog_api_client.v1.model.scatter_plot_request import ScatterPlotRequest + return { + "table": (ScatterplotTableRequest,), + "x": (ScatterPlotRequest,), + "y": (ScatterPlotRequest,), + } + attribute_map = { + "table": "table", + "x": "x", + "y": "y", + } + + def __init__(self_, table: Union[ScatterplotTableRequest, UnsetType]=unset, x: Union[ScatterPlotRequest, UnsetType]=unset, y: Union[ScatterPlotRequest, UnsetType]=unset, **kwargs): + """ + Widget definition. + + :param table: Scatterplot request containing formulas and functions. + :type table: ScatterplotTableRequest, optional + + :param x: Updated scatter plot. + :type x: ScatterPlotRequest, optional + + :param y: Updated scatter plot. + :type y: ScatterPlotRequest, optional + """ + if table is not unset: + kwargs["table"] = table + if x is not unset: + kwargs["x"] = x + if y is not unset: + kwargs["y"] = y + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/scatter_plot_widget_definition_type.py b/datadog_api_client/v1/model/scatter_plot_widget_definition_type.py new file mode 100644 index 0000000000..a1234e53fc --- /dev/null +++ b/datadog_api_client/v1/model/scatter_plot_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScatterPlotWidgetDefinitionType(ModelSimple): + """ + Type of the scatter plot widget. + + :param value: If omitted defaults to "scatterplot". Must be one of ["scatterplot"]. + :type value: str + """ + + allowed_values = { + "scatterplot", + } + SCATTERPLOT: ClassVar["ScatterPlotWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScatterPlotWidgetDefinitionType.SCATTERPLOT = ScatterPlotWidgetDefinitionType("scatterplot") diff --git a/datadog_api_client/v1/model/scatterplot_dimension.py b/datadog_api_client/v1/model/scatterplot_dimension.py new file mode 100644 index 0000000000..bf322d9148 --- /dev/null +++ b/datadog_api_client/v1/model/scatterplot_dimension.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScatterplotDimension(ModelSimple): + """ + Dimension of the Scatterplot. + + :param value: Must be one of ["x", "y", "radius", "color"]. + :type value: str + """ + + allowed_values = { + "x", + "y", + "radius", + "color", + } + X: ClassVar["ScatterplotDimension"] + Y: ClassVar["ScatterplotDimension"] + RADIUS: ClassVar["ScatterplotDimension"] + COLOR: ClassVar["ScatterplotDimension"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScatterplotDimension.X = ScatterplotDimension("x") +ScatterplotDimension.Y = ScatterplotDimension("y") +ScatterplotDimension.RADIUS = ScatterplotDimension("radius") +ScatterplotDimension.COLOR = ScatterplotDimension("color") diff --git a/datadog_api_client/v1/model/scatterplot_table_request.py b/datadog_api_client/v1/model/scatterplot_table_request.py new file mode 100644 index 0000000000..abb280469b --- /dev/null +++ b/datadog_api_client/v1/model/scatterplot_table_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.scatterplot_widget_formula import ScatterplotWidgetFormula + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class ScatterplotTableRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.scatterplot_widget_formula import ScatterplotWidgetFormula + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + return { + "formulas": ([ScatterplotWidgetFormula],), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (FormulaAndFunctionResponseFormat,), + } + attribute_map = { + "formulas": "formulas", + "queries": "queries", + "response_format": "response_format", + } + + def __init__(self_, formulas: Union[List[ScatterplotWidgetFormula], UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, **kwargs): + """ + Scatterplot request containing formulas and functions. + + :param formulas: List of Scatterplot formulas that operate on queries. + :type formulas: [ScatterplotWidgetFormula], optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + """ + if formulas is not unset: + kwargs["formulas"] = formulas + if queries is not unset: + kwargs["queries"] = queries + if response_format is not unset: + kwargs["response_format"] = response_format + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/scatterplot_widget_aggregator.py b/datadog_api_client/v1/model/scatterplot_widget_aggregator.py new file mode 100644 index 0000000000..b493e5b186 --- /dev/null +++ b/datadog_api_client/v1/model/scatterplot_widget_aggregator.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScatterplotWidgetAggregator(ModelSimple): + """ + Aggregator used for the request. + + :param value: Must be one of ["avg", "last", "max", "min", "sum"]. + :type value: str + """ + + allowed_values = { + "avg", + "last", + "max", + "min", + "sum", + } + AVERAGE: ClassVar["ScatterplotWidgetAggregator"] + LAST: ClassVar["ScatterplotWidgetAggregator"] + MAXIMUM: ClassVar["ScatterplotWidgetAggregator"] + MINIMUM: ClassVar["ScatterplotWidgetAggregator"] + SUM: ClassVar["ScatterplotWidgetAggregator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScatterplotWidgetAggregator.AVERAGE = ScatterplotWidgetAggregator("avg") +ScatterplotWidgetAggregator.LAST = ScatterplotWidgetAggregator("last") +ScatterplotWidgetAggregator.MAXIMUM = ScatterplotWidgetAggregator("max") +ScatterplotWidgetAggregator.MINIMUM = ScatterplotWidgetAggregator("min") +ScatterplotWidgetAggregator.SUM = ScatterplotWidgetAggregator("sum") diff --git a/datadog_api_client/v1/model/scatterplot_widget_formula.py b/datadog_api_client/v1/model/scatterplot_widget_formula.py new file mode 100644 index 0000000000..7a1400cb8d --- /dev/null +++ b/datadog_api_client/v1/model/scatterplot_widget_formula.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.scatterplot_dimension import ScatterplotDimension + +class ScatterplotWidgetFormula(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.scatterplot_dimension import ScatterplotDimension + return { + "alias": (str,), + "dimension": (ScatterplotDimension,), + "formula": (str,), + } + attribute_map = { + "alias": "alias", + "dimension": "dimension", + "formula": "formula", + } + + def __init__(self_, dimension: ScatterplotDimension, formula: str, alias: Union[str, UnsetType]=unset, **kwargs): + """ + Formula to be used in a Scatterplot widget query. + + :param alias: Expression alias. + :type alias: str, optional + + :param dimension: Dimension of the Scatterplot. + :type dimension: ScatterplotDimension + + :param formula: String expression built from queries, formulas, and functions. + :type formula: str + """ + if alias is not unset: + kwargs["alias"] = alias + super().__init__(kwargs) + + + self_.dimension = dimension + self_.formula = formula diff --git a/datadog_api_client/v1/model/search_service_level_objective.py b/datadog_api_client/v1/model/search_service_level_objective.py new file mode 100644 index 0000000000..04fe32a056 --- /dev/null +++ b/datadog_api_client/v1/model/search_service_level_objective.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.search_service_level_objective_data import SearchServiceLevelObjectiveData + +class SearchServiceLevelObjective(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.search_service_level_objective_data import SearchServiceLevelObjectiveData + return { + "data": (SearchServiceLevelObjectiveData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SearchServiceLevelObjectiveData, UnsetType]=unset, **kwargs): + """ + A service level objective data container. + + :param data: A service level objective ID and attributes. + :type data: SearchServiceLevelObjectiveData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_service_level_objective_attributes.py b/datadog_api_client/v1/model/search_service_level_objective_attributes.py new file mode 100644 index 0000000000..de2bd920e4 --- /dev/null +++ b/datadog_api_client/v1/model/search_service_level_objective_attributes.py @@ -0,0 +1,182 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_creator import SLOCreator + from datadog_api_client.v1.model.slo_overall_statuses import SLOOverallStatuses + from datadog_api_client.v1.model.search_slo_query import SearchSLOQuery + from datadog_api_client.v1.model.slo_type import SLOType + from datadog_api_client.v1.model.slo_status import SLOStatus + from datadog_api_client.v1.model.search_slo_threshold import SearchSLOThreshold + +class SearchServiceLevelObjectiveAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_creator import SLOCreator + from datadog_api_client.v1.model.slo_overall_statuses import SLOOverallStatuses + from datadog_api_client.v1.model.search_slo_query import SearchSLOQuery + from datadog_api_client.v1.model.slo_type import SLOType + from datadog_api_client.v1.model.slo_status import SLOStatus + from datadog_api_client.v1.model.search_slo_threshold import SearchSLOThreshold + return { + "all_tags": ([str],), + "created_at": (int,), + "creator": (SLOCreator,), + "description": (str, none_type), + "env_tags": ([str],), + "groups": ([str], none_type), + "modified_at": (int,), + "monitor_ids": ([int], none_type), + "name": (str,), + "overall_status": ([SLOOverallStatuses],), + "query": (SearchSLOQuery,), + "service_tags": ([str],), + "slo_type": (SLOType,), + "status": (SLOStatus,), + "team_tags": ([str],), + "thresholds": ([SearchSLOThreshold],), + } + attribute_map = { + "all_tags": "all_tags", + "created_at": "created_at", + "creator": "creator", + "description": "description", + "env_tags": "env_tags", + "groups": "groups", + "modified_at": "modified_at", + "monitor_ids": "monitor_ids", + "name": "name", + "overall_status": "overall_status", + "query": "query", + "service_tags": "service_tags", + "slo_type": "slo_type", + "status": "status", + "team_tags": "team_tags", + "thresholds": "thresholds", + } + read_only_vars = { + "created_at", + "modified_at", + } + + def __init__(self_, all_tags: Union[List[str], UnsetType]=unset, created_at: Union[int, UnsetType]=unset, creator: Union[SLOCreator, none_type, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, env_tags: Union[List[str], UnsetType]=unset, groups: Union[List[str], none_type, UnsetType]=unset, modified_at: Union[int, UnsetType]=unset, monitor_ids: Union[List[int], none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, overall_status: Union[List[SLOOverallStatuses], UnsetType]=unset, query: Union[SearchSLOQuery, none_type, UnsetType]=unset, service_tags: Union[List[str], UnsetType]=unset, slo_type: Union[SLOType, UnsetType]=unset, status: Union[SLOStatus, UnsetType]=unset, team_tags: Union[List[str], UnsetType]=unset, thresholds: Union[List[SearchSLOThreshold], UnsetType]=unset, **kwargs): + """ + A service level objective object includes a service level indicator, thresholds + for one or more timeframes, and metadata ( ``name`` , ``description`` , and ``tags`` ). + + :param all_tags: A list of tags associated with this service level objective. + Always included in service level objective responses (but may be empty). + :type all_tags: [str], optional + + :param created_at: Creation timestamp (UNIX time in seconds) + + Always included in service level objective responses. + :type created_at: int, optional + + :param creator: The creator of the SLO + :type creator: SLOCreator, none_type, optional + + :param description: A user-defined description of the service level objective. + + Always included in service level objective responses (but may be ``null`` ). + Optional in create/update requests. + :type description: str, none_type, optional + + :param env_tags: Tags with the ``env`` tag key. + :type env_tags: [str], optional + + :param groups: A list of (up to 100) monitor groups that narrow the scope of a monitor service level objective. + Included in service level objective responses if it is not empty. + :type groups: [str], none_type, optional + + :param modified_at: Modification timestamp (UNIX time in seconds) + + Always included in service level objective responses. + :type modified_at: int, optional + + :param monitor_ids: A list of monitor ids that defines the scope of a monitor service level + objective. + :type monitor_ids: [int], none_type, optional + + :param name: The name of the service level objective object. + :type name: str, optional + + :param overall_status: calculated status and error budget remaining. + :type overall_status: [SLOOverallStatuses], optional + + :param query: A metric-based SLO. **Required if type is metric**. Note that Datadog only allows the sum by aggregator + to be used because this will sum up all request counts instead of averaging them, or taking the max or + min of all of those requests. + :type query: SearchSLOQuery, none_type, optional + + :param service_tags: Tags with the ``service`` tag key. + :type service_tags: [str], optional + + :param slo_type: The type of the service level objective. + :type slo_type: SLOType, optional + + :param status: Status of the SLO's primary timeframe. + :type status: SLOStatus, optional + + :param team_tags: Tags with the ``team`` tag key. + :type team_tags: [str], optional + + :param thresholds: The thresholds (timeframes and associated targets) for this service level + objective object. + :type thresholds: [SearchSLOThreshold], optional + """ + if all_tags is not unset: + kwargs["all_tags"] = all_tags + if created_at is not unset: + kwargs["created_at"] = created_at + if creator is not unset: + kwargs["creator"] = creator + if description is not unset: + kwargs["description"] = description + if env_tags is not unset: + kwargs["env_tags"] = env_tags + if groups is not unset: + kwargs["groups"] = groups + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if monitor_ids is not unset: + kwargs["monitor_ids"] = monitor_ids + if name is not unset: + kwargs["name"] = name + if overall_status is not unset: + kwargs["overall_status"] = overall_status + if query is not unset: + kwargs["query"] = query + if service_tags is not unset: + kwargs["service_tags"] = service_tags + if slo_type is not unset: + kwargs["slo_type"] = slo_type + if status is not unset: + kwargs["status"] = status + if team_tags is not unset: + kwargs["team_tags"] = team_tags + if thresholds is not unset: + kwargs["thresholds"] = thresholds + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_service_level_objective_data.py b/datadog_api_client/v1/model/search_service_level_objective_data.py new file mode 100644 index 0000000000..b97eab4b3e --- /dev/null +++ b/datadog_api_client/v1/model/search_service_level_objective_data.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.search_service_level_objective_attributes import SearchServiceLevelObjectiveAttributes + +class SearchServiceLevelObjectiveData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.search_service_level_objective_attributes import SearchServiceLevelObjectiveAttributes + return { + "attributes": (SearchServiceLevelObjectiveAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: Union[SearchServiceLevelObjectiveAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A service level objective ID and attributes. + + :param attributes: A service level objective object includes a service level indicator, thresholds + for one or more timeframes, and metadata ( ``name`` , ``description`` , and ``tags`` ). + :type attributes: SearchServiceLevelObjectiveAttributes, optional + + :param id: A unique identifier for the service level objective object. + + Always included in service level objective responses. + :type id: str, optional + + :param type: The type of the object, must be ``slo``. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_query.py b/datadog_api_client/v1/model/search_slo_query.py new file mode 100644 index 0000000000..9a309ce9e1 --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_query.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SearchSLOQuery(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "denominator": (str,), + "metrics": ([str], none_type), + "numerator": (str,), + } + attribute_map = { + "denominator": "denominator", + "metrics": "metrics", + "numerator": "numerator", + } + + def __init__(self_, denominator: Union[str, UnsetType]=unset, metrics: Union[List[str], none_type, UnsetType]=unset, numerator: Union[str, UnsetType]=unset, **kwargs): + """ + A metric-based SLO. **Required if type is metric**. Note that Datadog only allows the sum by aggregator + to be used because this will sum up all request counts instead of averaging them, or taking the max or + min of all of those requests. + + :param denominator: A Datadog metric query for total (valid) events. + :type denominator: str, optional + + :param metrics: Metric names used in the query's numerator and denominator. + This field will return null and will be implemented in the next version of this endpoint. + :type metrics: [str], none_type, optional + + :param numerator: A Datadog metric query for good events. + :type numerator: str, optional + """ + if denominator is not unset: + kwargs["denominator"] = denominator + if metrics is not unset: + kwargs["metrics"] = metrics + if numerator is not unset: + kwargs["numerator"] = numerator + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_response.py b/datadog_api_client/v1/model/search_slo_response.py new file mode 100644 index 0000000000..5fa4779ace --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.search_slo_response_data import SearchSLOResponseData + from datadog_api_client.v1.model.search_slo_response_links import SearchSLOResponseLinks + from datadog_api_client.v1.model.search_slo_response_meta import SearchSLOResponseMeta + +class SearchSLOResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.search_slo_response_data import SearchSLOResponseData + from datadog_api_client.v1.model.search_slo_response_links import SearchSLOResponseLinks + from datadog_api_client.v1.model.search_slo_response_meta import SearchSLOResponseMeta + return { + "data": (SearchSLOResponseData,), + "links": (SearchSLOResponseLinks,), + "meta": (SearchSLOResponseMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[SearchSLOResponseData, UnsetType]=unset, links: Union[SearchSLOResponseLinks, UnsetType]=unset, meta: Union[SearchSLOResponseMeta, UnsetType]=unset, **kwargs): + """ + A search SLO response containing results from the search query. + + :param data: Data from search SLO response. + :type data: SearchSLOResponseData, optional + + :param links: Pagination links. + :type links: SearchSLOResponseLinks, optional + + :param meta: Searches metadata returned by the API. + :type meta: SearchSLOResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_response_data.py b/datadog_api_client/v1/model/search_slo_response_data.py new file mode 100644 index 0000000000..cb74d59839 --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.search_slo_response_data_attributes import SearchSLOResponseDataAttributes + +class SearchSLOResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.search_slo_response_data_attributes import SearchSLOResponseDataAttributes + return { + "attributes": (SearchSLOResponseDataAttributes,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[SearchSLOResponseDataAttributes, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Data from search SLO response. + + :param attributes: Attributes + :type attributes: SearchSLOResponseDataAttributes, optional + + :param type: Type of service level objective result. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_response_data_attributes.py b/datadog_api_client/v1/model/search_slo_response_data_attributes.py new file mode 100644 index 0000000000..cb99dcab8a --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_response_data_attributes.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.search_slo_response_data_attributes_facets import SearchSLOResponseDataAttributesFacets + from datadog_api_client.v1.model.search_service_level_objective import SearchServiceLevelObjective + +class SearchSLOResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.search_slo_response_data_attributes_facets import SearchSLOResponseDataAttributesFacets + from datadog_api_client.v1.model.search_service_level_objective import SearchServiceLevelObjective + return { + "facets": (SearchSLOResponseDataAttributesFacets,), + "slos": ([SearchServiceLevelObjective],), + } + attribute_map = { + "facets": "facets", + "slos": "slos", + } + + def __init__(self_, facets: Union[SearchSLOResponseDataAttributesFacets, UnsetType]=unset, slos: Union[List[SearchServiceLevelObjective], UnsetType]=unset, **kwargs): + """ + Attributes + + :param facets: Facets + :type facets: SearchSLOResponseDataAttributesFacets, optional + + :param slos: SLOs + :type slos: [SearchServiceLevelObjective], optional + """ + if facets is not unset: + kwargs["facets"] = facets + if slos is not unset: + kwargs["slos"] = slos + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_response_data_attributes_facets.py b/datadog_api_client/v1/model/search_slo_response_data_attributes_facets.py new file mode 100644 index 0000000000..06942f78bc --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_response_data_attributes_facets.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.search_slo_response_data_attributes_facets_object_string import SearchSLOResponseDataAttributesFacetsObjectString + from datadog_api_client.v1.model.search_slo_response_data_attributes_facets_object_int import SearchSLOResponseDataAttributesFacetsObjectInt + +class SearchSLOResponseDataAttributesFacets(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.search_slo_response_data_attributes_facets_object_string import SearchSLOResponseDataAttributesFacetsObjectString + from datadog_api_client.v1.model.search_slo_response_data_attributes_facets_object_int import SearchSLOResponseDataAttributesFacetsObjectInt + return { + "all_tags": ([SearchSLOResponseDataAttributesFacetsObjectString],), + "creator_name": ([SearchSLOResponseDataAttributesFacetsObjectString],), + "env_tags": ([SearchSLOResponseDataAttributesFacetsObjectString],), + "service_tags": ([SearchSLOResponseDataAttributesFacetsObjectString],), + "slo_type": ([SearchSLOResponseDataAttributesFacetsObjectInt],), + "target": ([SearchSLOResponseDataAttributesFacetsObjectInt],), + "team_tags": ([SearchSLOResponseDataAttributesFacetsObjectString],), + "timeframe": ([SearchSLOResponseDataAttributesFacetsObjectString],), + } + attribute_map = { + "all_tags": "all_tags", + "creator_name": "creator_name", + "env_tags": "env_tags", + "service_tags": "service_tags", + "slo_type": "slo_type", + "target": "target", + "team_tags": "team_tags", + "timeframe": "timeframe", + } + + def __init__(self_, all_tags: Union[List[SearchSLOResponseDataAttributesFacetsObjectString], UnsetType]=unset, creator_name: Union[List[SearchSLOResponseDataAttributesFacetsObjectString], UnsetType]=unset, env_tags: Union[List[SearchSLOResponseDataAttributesFacetsObjectString], UnsetType]=unset, service_tags: Union[List[SearchSLOResponseDataAttributesFacetsObjectString], UnsetType]=unset, slo_type: Union[List[SearchSLOResponseDataAttributesFacetsObjectInt], UnsetType]=unset, target: Union[List[SearchSLOResponseDataAttributesFacetsObjectInt], UnsetType]=unset, team_tags: Union[List[SearchSLOResponseDataAttributesFacetsObjectString], UnsetType]=unset, timeframe: Union[List[SearchSLOResponseDataAttributesFacetsObjectString], UnsetType]=unset, **kwargs): + """ + Facets + + :param all_tags: All tags associated with an SLO. + :type all_tags: [SearchSLOResponseDataAttributesFacetsObjectString], optional + + :param creator_name: Creator of an SLO. + :type creator_name: [SearchSLOResponseDataAttributesFacetsObjectString], optional + + :param env_tags: Tags with the ``env`` tag key. + :type env_tags: [SearchSLOResponseDataAttributesFacetsObjectString], optional + + :param service_tags: Tags with the ``service`` tag key. + :type service_tags: [SearchSLOResponseDataAttributesFacetsObjectString], optional + + :param slo_type: Type of SLO. + :type slo_type: [SearchSLOResponseDataAttributesFacetsObjectInt], optional + + :param target: SLO Target + :type target: [SearchSLOResponseDataAttributesFacetsObjectInt], optional + + :param team_tags: Tags with the ``team`` tag key. + :type team_tags: [SearchSLOResponseDataAttributesFacetsObjectString], optional + + :param timeframe: Timeframes of SLOs. + :type timeframe: [SearchSLOResponseDataAttributesFacetsObjectString], optional + """ + if all_tags is not unset: + kwargs["all_tags"] = all_tags + if creator_name is not unset: + kwargs["creator_name"] = creator_name + if env_tags is not unset: + kwargs["env_tags"] = env_tags + if service_tags is not unset: + kwargs["service_tags"] = service_tags + if slo_type is not unset: + kwargs["slo_type"] = slo_type + if target is not unset: + kwargs["target"] = target + if team_tags is not unset: + kwargs["team_tags"] = team_tags + if timeframe is not unset: + kwargs["timeframe"] = timeframe + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_response_data_attributes_facets_object_int.py b/datadog_api_client/v1/model/search_slo_response_data_attributes_facets_object_int.py new file mode 100644 index 0000000000..02bf0c7e31 --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_response_data_attributes_facets_object_int.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SearchSLOResponseDataAttributesFacetsObjectInt(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "name": (float,), + } + attribute_map = { + "count": "count", + "name": "name", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, name: Union[float, UnsetType]=unset, **kwargs): + """ + Facet + + :param count: Count + :type count: int, optional + + :param name: Facet + :type name: float, optional + """ + if count is not unset: + kwargs["count"] = count + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_response_data_attributes_facets_object_string.py b/datadog_api_client/v1/model/search_slo_response_data_attributes_facets_object_string.py new file mode 100644 index 0000000000..d0af77a298 --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_response_data_attributes_facets_object_string.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SearchSLOResponseDataAttributesFacetsObjectString(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "name": (str,), + } + attribute_map = { + "count": "count", + "name": "name", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Facet + + :param count: Count + :type count: int, optional + + :param name: Facet + :type name: str, optional + """ + if count is not unset: + kwargs["count"] = count + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_response_links.py b/datadog_api_client/v1/model/search_slo_response_links.py new file mode 100644 index 0000000000..02ffe1e1d7 --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SearchSLOResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str, none_type), + "next": (str,), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, none_type, UnsetType]=unset, next: Union[str, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links. + + :param first: Link to last page. + :type first: str, optional + + :param last: Link to first page. + :type last: str, none_type, optional + + :param next: Link to the next page. + :type next: str, optional + + :param prev: Link to previous page. + :type prev: str, none_type, optional + + :param self: Link to current page. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_response_meta.py b/datadog_api_client/v1/model/search_slo_response_meta.py new file mode 100644 index 0000000000..2b3ef75ae1 --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.search_slo_response_meta_page import SearchSLOResponseMetaPage + +class SearchSLOResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.search_slo_response_meta_page import SearchSLOResponseMetaPage + return { + "pagination": (SearchSLOResponseMetaPage,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[SearchSLOResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Searches metadata returned by the API. + + :param pagination: Pagination metadata returned by the API. + :type pagination: SearchSLOResponseMetaPage, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_response_meta_page.py b/datadog_api_client/v1/model/search_slo_response_meta_page.py new file mode 100644 index 0000000000..687d9ba30f --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_response_meta_page.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SearchSLOResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_number": (int,), + "last_number": (int,), + "next_number": (int,), + "number": (int,), + "prev_number": (int,), + "size": (int,), + "total": (int,), + "type": (str,), + } + attribute_map = { + "first_number": "first_number", + "last_number": "last_number", + "next_number": "next_number", + "number": "number", + "prev_number": "prev_number", + "size": "size", + "total": "total", + "type": "type", + } + + def __init__(self_, first_number: Union[int, UnsetType]=unset, last_number: Union[int, UnsetType]=unset, next_number: Union[int, UnsetType]=unset, number: Union[int, UnsetType]=unset, prev_number: Union[int, UnsetType]=unset, size: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination metadata returned by the API. + + :param first_number: The first number. + :type first_number: int, optional + + :param last_number: The last number. + :type last_number: int, optional + + :param next_number: The next number. + :type next_number: int, optional + + :param number: The page number. + :type number: int, optional + + :param prev_number: The previous page number. + :type prev_number: int, optional + + :param size: The size of the response. + :type size: int, optional + + :param total: The total number of SLOs in the response. + :type total: int, optional + + :param type: Type of pagination. + :type type: str, optional + """ + if first_number is not unset: + kwargs["first_number"] = first_number + if last_number is not unset: + kwargs["last_number"] = last_number + if next_number is not unset: + kwargs["next_number"] = next_number + if number is not unset: + kwargs["number"] = number + if prev_number is not unset: + kwargs["prev_number"] = prev_number + if size is not unset: + kwargs["size"] = size + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/search_slo_threshold.py b/datadog_api_client/v1/model/search_slo_threshold.py new file mode 100644 index 0000000000..2fd57e9eff --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_threshold.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.search_slo_timeframe import SearchSLOTimeframe + +class SearchSLOThreshold(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.search_slo_timeframe import SearchSLOTimeframe + return { + "target": (float,), + "target_display": (str,), + "timeframe": (SearchSLOTimeframe,), + "warning": (float, none_type), + "warning_display": (str, none_type), + } + attribute_map = { + "target": "target", + "target_display": "target_display", + "timeframe": "timeframe", + "warning": "warning", + "warning_display": "warning_display", + } + + def __init__(self_, target: float, timeframe: SearchSLOTimeframe, target_display: Union[str, UnsetType]=unset, warning: Union[float, none_type, UnsetType]=unset, warning_display: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + SLO thresholds (target and optionally warning) for a single time window. + + :param target: The target value for the service level indicator within the corresponding + timeframe. + :type target: float + + :param target_display: A string representation of the target that indicates its precision. + It uses trailing zeros to show significant decimal places (for example ``98.00`` ). + + Always included in service level objective responses. Ignored in + create/update requests. + :type target_display: str, optional + + :param timeframe: The SLO time window options. + :type timeframe: SearchSLOTimeframe + + :param warning: The warning value for the service level objective. + :type warning: float, none_type, optional + + :param warning_display: A string representation of the warning target (see the description of + the ``target_display`` field for details). + + Included in service level objective responses if a warning target exists. + Ignored in create/update requests. + :type warning_display: str, none_type, optional + """ + if target_display is not unset: + kwargs["target_display"] = target_display + if warning is not unset: + kwargs["warning"] = warning + if warning_display is not unset: + kwargs["warning_display"] = warning_display + super().__init__(kwargs) + + + self_.target = target + self_.timeframe = timeframe diff --git a/datadog_api_client/v1/model/search_slo_timeframe.py b/datadog_api_client/v1/model/search_slo_timeframe.py new file mode 100644 index 0000000000..ca0f67d55b --- /dev/null +++ b/datadog_api_client/v1/model/search_slo_timeframe.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SearchSLOTimeframe(ModelSimple): + """ + The SLO time window options. + + :param value: Must be one of ["7d", "30d", "90d"]. + :type value: str + """ + + allowed_values = { + "7d", + "30d", + "90d", + } + SEVEN_DAYS: ClassVar["SearchSLOTimeframe"] + THIRTY_DAYS: ClassVar["SearchSLOTimeframe"] + NINETY_DAYS: ClassVar["SearchSLOTimeframe"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SearchSLOTimeframe.SEVEN_DAYS = SearchSLOTimeframe("7d") +SearchSLOTimeframe.THIRTY_DAYS = SearchSLOTimeframe("30d") +SearchSLOTimeframe.NINETY_DAYS = SearchSLOTimeframe("90d") diff --git a/datadog_api_client/v1/model/selectable_template_variable_items.py b/datadog_api_client/v1/model/selectable_template_variable_items.py new file mode 100644 index 0000000000..4bcfc8b4b5 --- /dev/null +++ b/datadog_api_client/v1/model/selectable_template_variable_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SelectableTemplateVariableItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "default_value": (str,), + "name": (str,), + "prefix": (str,), + "type": (str, none_type), + "visible_tags": ([str], none_type), + } + attribute_map = { + "default_value": "default_value", + "name": "name", + "prefix": "prefix", + "type": "type", + "visible_tags": "visible_tags", + } + + def __init__(self_, default_value: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, prefix: Union[str, UnsetType]=unset, type: Union[str, none_type, UnsetType]=unset, visible_tags: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Object containing the template variable's name, associated tag/attribute, default value and selectable values. + + :param default_value: The default value of the template variable. + :type default_value: str, optional + + :param name: Name of the template variable. + :type name: str, optional + + :param prefix: The tag/attribute key associated with the template variable. + :type prefix: str, optional + + :param type: The type of variable. This is to differentiate between filter variables (interpolated in query) and group by variables (interpolated into group by). + :type type: str, none_type, optional + + :param visible_tags: List of visible tag values on the shared dashboard. + :type visible_tags: [str], none_type, optional + """ + if default_value is not unset: + kwargs["default_value"] = default_value + if name is not unset: + kwargs["name"] = name + if prefix is not unset: + kwargs["prefix"] = prefix + if type is not unset: + kwargs["type"] = type + if visible_tags is not unset: + kwargs["visible_tags"] = visible_tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/series.py b/datadog_api_client/v1/model/series.py new file mode 100644 index 0000000000..b6f10efe04 --- /dev/null +++ b/datadog_api_client/v1/model/series.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.point import Point + +class Series(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.point import Point + return { + "host": (str,), + "interval": (int, none_type), + "metric": (str,), + "points": ([Point],), + "tags": ([str],), + "type": (str,), + } + attribute_map = { + "host": "host", + "interval": "interval", + "metric": "metric", + "points": "points", + "tags": "tags", + "type": "type", + } + + def __init__(self_, metric: str, points: List[Point], host: Union[str, UnsetType]=unset, interval: Union[int, none_type, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A metric to submit to Datadog. + See `Datadog metrics `_. + + :param host: The name of the host that produced the metric. + :type host: str, optional + + :param interval: If the type of the metric is rate or count, define the corresponding interval in seconds. + :type interval: int, none_type, optional + + :param metric: The name of the timeseries. + :type metric: str + + :param points: Points relating to a metric. All points must be tuples with timestamp and a scalar value (cannot be a string). Timestamps should be in POSIX time in seconds, and cannot be more than ten minutes in the future or more than one hour in the past. + :type points: [Point] + + :param tags: A list of tags associated with the metric. + :type tags: [str], optional + + :param type: The type of the metric. Valid types are "", ``count`` , ``gauge`` , and ``rate``. + :type type: str, optional + """ + if host is not unset: + kwargs["host"] = host + if interval is not unset: + kwargs["interval"] = interval + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.metric = metric + self_.points = points diff --git a/datadog_api_client/v1/model/service_check.py b/datadog_api_client/v1/model/service_check.py new file mode 100644 index 0000000000..460ae27b1b --- /dev/null +++ b/datadog_api_client/v1/model/service_check.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.service_check_status import ServiceCheckStatus + +class ServiceCheck(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.service_check_status import ServiceCheckStatus + return { + "check": (str,), + "host_name": (str,), + "message": (str,), + "status": (ServiceCheckStatus,), + "tags": ([str],), + "timestamp": (int,), + } + attribute_map = { + "check": "check", + "host_name": "host_name", + "message": "message", + "status": "status", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, check: str, host_name: str, status: ServiceCheckStatus, tags: List[str], message: Union[str, UnsetType]=unset, timestamp: Union[int, UnsetType]=unset, **kwargs): + """ + An object containing service check and status. + + :param check: The check. + :type check: str + + :param host_name: The host name correlated with the check. + :type host_name: str + + :param message: Message containing check status. + :type message: str, optional + + :param status: The status of a service check. Set to ``0`` for OK, ``1`` for warning, ``2`` for critical, and ``3`` for unknown. + :type status: ServiceCheckStatus + + :param tags: Tags related to a check. + :type tags: [str] + + :param timestamp: Time of check. + :type timestamp: int, optional + """ + if message is not unset: + kwargs["message"] = message + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + + self_.check = check + self_.host_name = host_name + self_.status = status + self_.tags = tags diff --git a/datadog_api_client/v1/model/service_check_status.py b/datadog_api_client/v1/model/service_check_status.py new file mode 100644 index 0000000000..db0513965e --- /dev/null +++ b/datadog_api_client/v1/model/service_check_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceCheckStatus(ModelSimple): + """ + The status of a service check. Set to `0` for OK, `1` for warning, `2` for critical, and `3` for unknown. + + :param value: Must be one of [0, 1, 2, 3]. + :type value: int + """ + + allowed_values = { + 0, + 1, + 2, + 3, + } + OK: ClassVar["ServiceCheckStatus"] + WARNING: ClassVar["ServiceCheckStatus"] + CRITICAL: ClassVar["ServiceCheckStatus"] + UNKNOWN: ClassVar["ServiceCheckStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +ServiceCheckStatus.OK = ServiceCheckStatus(0) +ServiceCheckStatus.WARNING = ServiceCheckStatus(1) +ServiceCheckStatus.CRITICAL = ServiceCheckStatus(2) +ServiceCheckStatus.UNKNOWN = ServiceCheckStatus(3) diff --git a/datadog_api_client/v1/model/service_checks.py b/datadog_api_client/v1/model/service_checks.py new file mode 100644 index 0000000000..a33919e8d8 --- /dev/null +++ b/datadog_api_client/v1/model/service_checks.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceChecks(ModelSimple): + """ + The service checks. + + + :type value: [ServiceCheck] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.service_check import ServiceCheck + return { + "value": ([ServiceCheck],), + } diff --git a/datadog_api_client/v1/model/service_level_objective.py b/datadog_api_client/v1/model/service_level_objective.py new file mode 100644 index 0000000000..e1d32a855c --- /dev/null +++ b/datadog_api_client/v1/model/service_level_objective.py @@ -0,0 +1,206 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.service_level_objective_query import ServiceLevelObjectiveQuery + from datadog_api_client.v1.model.slo_sli_spec import SLOSliSpec + from datadog_api_client.v1.model.slo_threshold import SLOThreshold + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + from datadog_api_client.v1.model.slo_type import SLOType + from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec + +class ServiceLevelObjective(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.service_level_objective_query import ServiceLevelObjectiveQuery + from datadog_api_client.v1.model.slo_sli_spec import SLOSliSpec + from datadog_api_client.v1.model.slo_threshold import SLOThreshold + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + from datadog_api_client.v1.model.slo_type import SLOType + return { + "created_at": (int,), + "creator": (Creator,), + "description": (str, none_type), + "groups": ([str],), + "id": (str,), + "modified_at": (int,), + "monitor_ids": ([int],), + "monitor_tags": ([str],), + "name": (str,), + "query": (ServiceLevelObjectiveQuery,), + "sli_specification": (SLOSliSpec,), + "tags": ([str],), + "target_threshold": (float,), + "thresholds": ([SLOThreshold],), + "timeframe": (SLOTimeframe,), + "type": (SLOType,), + "warning_threshold": (float,), + } + attribute_map = { + "created_at": "created_at", + "creator": "creator", + "description": "description", + "groups": "groups", + "id": "id", + "modified_at": "modified_at", + "monitor_ids": "monitor_ids", + "monitor_tags": "monitor_tags", + "name": "name", + "query": "query", + "sli_specification": "sli_specification", + "tags": "tags", + "target_threshold": "target_threshold", + "thresholds": "thresholds", + "timeframe": "timeframe", + "type": "type", + "warning_threshold": "warning_threshold", + } + read_only_vars = { + "created_at", + "creator", + "id", + "modified_at", + } + + def __init__(self_, name: str, thresholds: List[SLOThreshold], type: SLOType, created_at: Union[int, UnsetType]=unset, creator: Union[Creator, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, groups: Union[List[str], UnsetType]=unset, id: Union[str, UnsetType]=unset, modified_at: Union[int, UnsetType]=unset, monitor_ids: Union[List[int], UnsetType]=unset, monitor_tags: Union[List[str], UnsetType]=unset, query: Union[ServiceLevelObjectiveQuery, UnsetType]=unset, sli_specification: Union[SLOSliSpec, SLOTimeSliceSpec, SLOCountSpec, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, target_threshold: Union[float, UnsetType]=unset, timeframe: Union[SLOTimeframe, UnsetType]=unset, warning_threshold: Union[float, UnsetType]=unset, **kwargs): + """ + A service level objective object includes a service level indicator, thresholds + for one or more timeframes, and metadata ( ``name`` , ``description`` , ``tags`` , etc.). + + :param created_at: Creation timestamp (UNIX time in seconds) + + Always included in service level objective responses. + :type created_at: int, optional + + :param creator: Object describing the creator of the shared element. + :type creator: Creator, optional + + :param description: A user-defined description of the service level objective. + + Always included in service level objective responses (but may be ``null`` ). + Optional in create/update requests. + :type description: str, none_type, optional + + :param groups: A list of (up to 100) monitor groups that narrow the scope of a monitor service level objective. + + Included in service level objective responses if it is not empty. Optional in + create/update requests for monitor service level objectives, but may only be + used when then length of the ``monitor_ids`` field is one. + :type groups: [str], optional + + :param id: A unique identifier for the service level objective object. + + Always included in service level objective responses. + :type id: str, optional + + :param modified_at: Modification timestamp (UNIX time in seconds) + + Always included in service level objective responses. + :type modified_at: int, optional + + :param monitor_ids: A list of monitor ids that defines the scope of a monitor service level + objective. **Required if type is monitor**. + :type monitor_ids: [int], optional + + :param monitor_tags: The union of monitor tags for all monitors referenced by the ``monitor_ids`` + field. + Always included in service level objective responses for monitor-based service level + objectives (but may be empty). Ignored in create/update requests. Does not + affect which monitors are included in the service level objective (that is + determined entirely by the ``monitor_ids`` field). + :type monitor_tags: [str], optional + + :param name: The name of the service level objective object. + :type name: str + + :param query: A count-based (metric) SLO query. This field is superseded by ``sli_specification`` but is retained for backwards compatibility. Note that Datadog only allows the sum by aggregator + to be used because this will sum up all request counts instead of averaging them, or taking the max or + min of all of those requests. + :type query: ServiceLevelObjectiveQuery, optional + + :param sli_specification: A generic SLI specification. This is used for time-slice and count-based (metric) SLOs only. + :type sli_specification: SLOSliSpec, optional + + :param tags: A list of tags associated with this service level objective. + Always included in service level objective responses (but may be empty). + Optional in create/update requests. + :type tags: [str], optional + + :param target_threshold: The target threshold such that when the service level indicator is above this + threshold over the given timeframe, the objective is being met. + :type target_threshold: float, optional + + :param thresholds: The thresholds (timeframes and associated targets) for this service level + objective object. + :type thresholds: [SLOThreshold] + + :param timeframe: The SLO time window options. Note that "custom" is not a valid option for creating + or updating SLOs. It is only used when querying SLO history over custom timeframes. + :type timeframe: SLOTimeframe, optional + + :param type: The type of the service level objective. + :type type: SLOType + + :param warning_threshold: The optional warning threshold such that when the service level indicator is + below this value for the given threshold, but above the target threshold, the + objective appears in a "warning" state. This value must be greater than the target + threshold. + :type warning_threshold: float, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if creator is not unset: + kwargs["creator"] = creator + if description is not unset: + kwargs["description"] = description + if groups is not unset: + kwargs["groups"] = groups + if id is not unset: + kwargs["id"] = id + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if monitor_ids is not unset: + kwargs["monitor_ids"] = monitor_ids + if monitor_tags is not unset: + kwargs["monitor_tags"] = monitor_tags + if query is not unset: + kwargs["query"] = query + if sli_specification is not unset: + kwargs["sli_specification"] = sli_specification + if tags is not unset: + kwargs["tags"] = tags + if target_threshold is not unset: + kwargs["target_threshold"] = target_threshold + if timeframe is not unset: + kwargs["timeframe"] = timeframe + if warning_threshold is not unset: + kwargs["warning_threshold"] = warning_threshold + super().__init__(kwargs) + + + self_.name = name + self_.thresholds = thresholds + self_.type = type diff --git a/datadog_api_client/v1/model/service_level_objective_query.py b/datadog_api_client/v1/model/service_level_objective_query.py new file mode 100644 index 0000000000..218610b2fd --- /dev/null +++ b/datadog_api_client/v1/model/service_level_objective_query.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceLevelObjectiveQuery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "denominator": (str,), + "numerator": (str,), + } + attribute_map = { + "denominator": "denominator", + "numerator": "numerator", + } + + def __init__(self_, denominator: str, numerator: str, **kwargs): + """ + A count-based (metric) SLO query. This field is superseded by ``sli_specification`` but is retained for backwards compatibility. Note that Datadog only allows the sum by aggregator + to be used because this will sum up all request counts instead of averaging them, or taking the max or + min of all of those requests. + + :param denominator: A Datadog metric query for total (valid) events. + :type denominator: str + + :param numerator: A Datadog metric query for good events. + :type numerator: str + """ + super().__init__(kwargs) + + + self_.denominator = denominator + self_.numerator = numerator diff --git a/datadog_api_client/v1/model/service_level_objective_request.py b/datadog_api_client/v1/model/service_level_objective_request.py new file mode 100644 index 0000000000..eb992974f2 --- /dev/null +++ b/datadog_api_client/v1/model/service_level_objective_request.py @@ -0,0 +1,152 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.service_level_objective_query import ServiceLevelObjectiveQuery + from datadog_api_client.v1.model.slo_sli_spec import SLOSliSpec + from datadog_api_client.v1.model.slo_threshold import SLOThreshold + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + from datadog_api_client.v1.model.slo_type import SLOType + from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec + +class ServiceLevelObjectiveRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.service_level_objective_query import ServiceLevelObjectiveQuery + from datadog_api_client.v1.model.slo_sli_spec import SLOSliSpec + from datadog_api_client.v1.model.slo_threshold import SLOThreshold + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + from datadog_api_client.v1.model.slo_type import SLOType + return { + "description": (str, none_type), + "groups": ([str],), + "monitor_ids": ([int],), + "name": (str,), + "query": (ServiceLevelObjectiveQuery,), + "sli_specification": (SLOSliSpec,), + "tags": ([str],), + "target_threshold": (float,), + "thresholds": ([SLOThreshold],), + "timeframe": (SLOTimeframe,), + "type": (SLOType,), + "warning_threshold": (float,), + } + attribute_map = { + "description": "description", + "groups": "groups", + "monitor_ids": "monitor_ids", + "name": "name", + "query": "query", + "sli_specification": "sli_specification", + "tags": "tags", + "target_threshold": "target_threshold", + "thresholds": "thresholds", + "timeframe": "timeframe", + "type": "type", + "warning_threshold": "warning_threshold", + } + + def __init__(self_, name: str, thresholds: List[SLOThreshold], type: SLOType, description: Union[str, none_type, UnsetType]=unset, groups: Union[List[str], UnsetType]=unset, monitor_ids: Union[List[int], UnsetType]=unset, query: Union[ServiceLevelObjectiveQuery, UnsetType]=unset, sli_specification: Union[SLOSliSpec, SLOTimeSliceSpec, SLOCountSpec, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, target_threshold: Union[float, UnsetType]=unset, timeframe: Union[SLOTimeframe, UnsetType]=unset, warning_threshold: Union[float, UnsetType]=unset, **kwargs): + """ + A service level objective object includes a service level indicator, thresholds + for one or more timeframes, and metadata ( ``name`` , ``description`` , ``tags`` , etc.). + + :param description: A user-defined description of the service level objective. + + Always included in service level objective responses (but may be ``null`` ). + Optional in create/update requests. + :type description: str, none_type, optional + + :param groups: A list of (up to 100) monitor groups that narrow the scope of a monitor service level objective. + + Included in service level objective responses if it is not empty. Optional in + create/update requests for monitor service level objectives, but may only be + used when then length of the ``monitor_ids`` field is one. + :type groups: [str], optional + + :param monitor_ids: A list of monitor IDs that defines the scope of a monitor service level + objective. **Required if type is monitor**. + :type monitor_ids: [int], optional + + :param name: The name of the service level objective object. + :type name: str + + :param query: A count-based (metric) SLO query. This field is superseded by ``sli_specification`` but is retained for backwards compatibility. Note that Datadog only allows the sum by aggregator + to be used because this will sum up all request counts instead of averaging them, or taking the max or + min of all of those requests. + :type query: ServiceLevelObjectiveQuery, optional + + :param sli_specification: A generic SLI specification. This is used for time-slice and count-based (metric) SLOs only. + :type sli_specification: SLOSliSpec, optional + + :param tags: A list of tags associated with this service level objective. + Always included in service level objective responses (but may be empty). + Optional in create/update requests. + :type tags: [str], optional + + :param target_threshold: The target threshold such that when the service level indicator is above this + threshold over the given timeframe, the objective is being met. + :type target_threshold: float, optional + + :param thresholds: The thresholds (timeframes and associated targets) for this service level + objective object. + :type thresholds: [SLOThreshold] + + :param timeframe: The SLO time window options. Note that "custom" is not a valid option for creating + or updating SLOs. It is only used when querying SLO history over custom timeframes. + :type timeframe: SLOTimeframe, optional + + :param type: The type of the service level objective. + :type type: SLOType + + :param warning_threshold: The optional warning threshold such that when the service level indicator is + below this value for the given threshold, but above the target threshold, the + objective appears in a "warning" state. This value must be greater than the target + threshold. + :type warning_threshold: float, optional + """ + if description is not unset: + kwargs["description"] = description + if groups is not unset: + kwargs["groups"] = groups + if monitor_ids is not unset: + kwargs["monitor_ids"] = monitor_ids + if query is not unset: + kwargs["query"] = query + if sli_specification is not unset: + kwargs["sli_specification"] = sli_specification + if tags is not unset: + kwargs["tags"] = tags + if target_threshold is not unset: + kwargs["target_threshold"] = target_threshold + if timeframe is not unset: + kwargs["timeframe"] = timeframe + if warning_threshold is not unset: + kwargs["warning_threshold"] = warning_threshold + super().__init__(kwargs) + + + self_.name = name + self_.thresholds = thresholds + self_.type = type diff --git a/datadog_api_client/v1/model/service_map_widget_definition.py b/datadog_api_client/v1/model/service_map_widget_definition.py new file mode 100644 index 0000000000..c565e7b45a --- /dev/null +++ b/datadog_api_client/v1/model/service_map_widget_definition.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.service_map_widget_definition_type import ServiceMapWidgetDefinitionType + +class ServiceMapWidgetDefinition(ModelNormal): + validations = { + "filters": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.service_map_widget_definition_type import ServiceMapWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "filters": ([str],), + "service": (str,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (ServiceMapWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "filters": "filters", + "service": "service", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, filters: List[str], service: str, type: ServiceMapWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + This widget displays a map of a service to all of the services that call it, and all of the services that it calls. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param filters: Your environment and primary tag (or * if enabled for your account). + :type filters: [str] + + :param service: The ID of the service you want to map. + :type service: str + + :param title: The title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the service map widget. + :type type: ServiceMapWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.filters = filters + self_.service = service + self_.type = type diff --git a/datadog_api_client/v1/model/service_map_widget_definition_type.py b/datadog_api_client/v1/model/service_map_widget_definition_type.py new file mode 100644 index 0000000000..2ff80b1431 --- /dev/null +++ b/datadog_api_client/v1/model/service_map_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceMapWidgetDefinitionType(ModelSimple): + """ + Type of the service map widget. + + :param value: If omitted defaults to "servicemap". Must be one of ["servicemap"]. + :type value: str + """ + + allowed_values = { + "servicemap", + } + SERVICEMAP: ClassVar["ServiceMapWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceMapWidgetDefinitionType.SERVICEMAP = ServiceMapWidgetDefinitionType("servicemap") diff --git a/datadog_api_client/v1/model/service_summary_widget_definition.py b/datadog_api_client/v1/model/service_summary_widget_definition.py new file mode 100644 index 0000000000..de12d67e84 --- /dev/null +++ b/datadog_api_client/v1/model/service_summary_widget_definition.py @@ -0,0 +1,168 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_service_summary_display_format import WidgetServiceSummaryDisplayFormat + from datadog_api_client.v1.model.widget_size_format import WidgetSizeFormat + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.service_summary_widget_definition_type import ServiceSummaryWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class ServiceSummaryWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_service_summary_display_format import WidgetServiceSummaryDisplayFormat + from datadog_api_client.v1.model.widget_size_format import WidgetSizeFormat + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.service_summary_widget_definition_type import ServiceSummaryWidgetDefinitionType + return { + "description": (str,), + "display_format": (WidgetServiceSummaryDisplayFormat,), + "env": (str,), + "service": (str,), + "show_breakdown": (bool,), + "show_distribution": (bool,), + "show_errors": (bool,), + "show_hits": (bool,), + "show_latency": (bool,), + "show_resource_list": (bool,), + "size_format": (WidgetSizeFormat,), + "span_name": (str,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (ServiceSummaryWidgetDefinitionType,), + } + attribute_map = { + "description": "description", + "display_format": "display_format", + "env": "env", + "service": "service", + "show_breakdown": "show_breakdown", + "show_distribution": "show_distribution", + "show_errors": "show_errors", + "show_hits": "show_hits", + "show_latency": "show_latency", + "show_resource_list": "show_resource_list", + "size_format": "size_format", + "span_name": "span_name", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, env: str, service: str, span_name: str, type: ServiceSummaryWidgetDefinitionType, description: Union[str, UnsetType]=unset, display_format: Union[WidgetServiceSummaryDisplayFormat, UnsetType]=unset, show_breakdown: Union[bool, UnsetType]=unset, show_distribution: Union[bool, UnsetType]=unset, show_errors: Union[bool, UnsetType]=unset, show_hits: Union[bool, UnsetType]=unset, show_latency: Union[bool, UnsetType]=unset, show_resource_list: Union[bool, UnsetType]=unset, size_format: Union[WidgetSizeFormat, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The service summary displays the graphs of a chosen service in your dashboard. + + :param description: The description of the widget. + :type description: str, optional + + :param display_format: Number of columns to display. + :type display_format: WidgetServiceSummaryDisplayFormat, optional + + :param env: APM environment. + :type env: str + + :param service: APM service. + :type service: str + + :param show_breakdown: Whether to show the latency breakdown or not. + :type show_breakdown: bool, optional + + :param show_distribution: Whether to show the latency distribution or not. + :type show_distribution: bool, optional + + :param show_errors: Whether to show the error metrics or not. + :type show_errors: bool, optional + + :param show_hits: Whether to show the hits metrics or not. + :type show_hits: bool, optional + + :param show_latency: Whether to show the latency metrics or not. + :type show_latency: bool, optional + + :param show_resource_list: Whether to show the resource list or not. + :type show_resource_list: bool, optional + + :param size_format: Size of the widget. + :type size_format: WidgetSizeFormat, optional + + :param span_name: APM span name. + :type span_name: str + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the service summary widget. + :type type: ServiceSummaryWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if display_format is not unset: + kwargs["display_format"] = display_format + if show_breakdown is not unset: + kwargs["show_breakdown"] = show_breakdown + if show_distribution is not unset: + kwargs["show_distribution"] = show_distribution + if show_errors is not unset: + kwargs["show_errors"] = show_errors + if show_hits is not unset: + kwargs["show_hits"] = show_hits + if show_latency is not unset: + kwargs["show_latency"] = show_latency + if show_resource_list is not unset: + kwargs["show_resource_list"] = show_resource_list + if size_format is not unset: + kwargs["size_format"] = size_format + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.env = env + self_.service = service + self_.span_name = span_name + self_.type = type diff --git a/datadog_api_client/v1/model/service_summary_widget_definition_type.py b/datadog_api_client/v1/model/service_summary_widget_definition_type.py new file mode 100644 index 0000000000..4092cfd34d --- /dev/null +++ b/datadog_api_client/v1/model/service_summary_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceSummaryWidgetDefinitionType(ModelSimple): + """ + Type of the service summary widget. + + :param value: If omitted defaults to "trace_service". Must be one of ["trace_service"]. + :type value: str + """ + + allowed_values = { + "trace_service", + } + TRACE_SERVICE: ClassVar["ServiceSummaryWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceSummaryWidgetDefinitionType.TRACE_SERVICE = ServiceSummaryWidgetDefinitionType("trace_service") diff --git a/datadog_api_client/v1/model/shared_dashboard.py b/datadog_api_client/v1/model/shared_dashboard.py new file mode 100644 index 0000000000..89e4a846a9 --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard.py @@ -0,0 +1,187 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.shared_dashboard_author import SharedDashboardAuthor + from datadog_api_client.v1.model.dashboard_type import DashboardType + from datadog_api_client.v1.model.dashboard_global_time import DashboardGlobalTime + from datadog_api_client.v1.model.shared_dashboard_invitees_items import SharedDashboardInviteesItems + from datadog_api_client.v1.model.selectable_template_variable_items import SelectableTemplateVariableItems + from datadog_api_client.v1.model.dashboard_share_type import DashboardShareType + from datadog_api_client.v1.model.shared_dashboard_status import SharedDashboardStatus + from datadog_api_client.v1.model.viewing_preferences import ViewingPreferences + +class SharedDashboard(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.shared_dashboard_author import SharedDashboardAuthor + from datadog_api_client.v1.model.dashboard_type import DashboardType + from datadog_api_client.v1.model.dashboard_global_time import DashboardGlobalTime + from datadog_api_client.v1.model.shared_dashboard_invitees_items import SharedDashboardInviteesItems + from datadog_api_client.v1.model.selectable_template_variable_items import SelectableTemplateVariableItems + from datadog_api_client.v1.model.dashboard_share_type import DashboardShareType + from datadog_api_client.v1.model.shared_dashboard_status import SharedDashboardStatus + from datadog_api_client.v1.model.viewing_preferences import ViewingPreferences + return { + "author": (SharedDashboardAuthor,), + "created": (datetime,), + "dashboard_id": (str,), + "dashboard_type": (DashboardType,), + "embeddable_domains": ([str],), + "expiration": (datetime, none_type), + "global_time": (DashboardGlobalTime,), + "global_time_selectable_enabled": (bool, none_type), + "invitees": ([SharedDashboardInviteesItems],), + "last_accessed": (datetime, none_type), + "public_url": (str,), + "selectable_template_vars": ([SelectableTemplateVariableItems], none_type), + "share_list": ([str], none_type), + "share_type": (DashboardShareType,), + "status": (SharedDashboardStatus,), + "title": (str,), + "token": (str,), + "viewing_preferences": (ViewingPreferences,), + } + attribute_map = { + "author": "author", + "created": "created", + "dashboard_id": "dashboard_id", + "dashboard_type": "dashboard_type", + "embeddable_domains": "embeddable_domains", + "expiration": "expiration", + "global_time": "global_time", + "global_time_selectable_enabled": "global_time_selectable_enabled", + "invitees": "invitees", + "last_accessed": "last_accessed", + "public_url": "public_url", + "selectable_template_vars": "selectable_template_vars", + "share_list": "share_list", + "share_type": "share_type", + "status": "status", + "title": "title", + "token": "token", + "viewing_preferences": "viewing_preferences", + } + read_only_vars = { + "author", + "created", + "last_accessed", + "public_url", + "token", + } + + def __init__(self_, dashboard_id: str, dashboard_type: DashboardType, author: Union[SharedDashboardAuthor, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, embeddable_domains: Union[List[str], UnsetType]=unset, expiration: Union[datetime, none_type, UnsetType]=unset, global_time: Union[DashboardGlobalTime, UnsetType]=unset, global_time_selectable_enabled: Union[bool, none_type, UnsetType]=unset, invitees: Union[List[SharedDashboardInviteesItems], UnsetType]=unset, last_accessed: Union[datetime, none_type, UnsetType]=unset, public_url: Union[str, UnsetType]=unset, selectable_template_vars: Union[List[SelectableTemplateVariableItems], none_type, UnsetType]=unset, share_list: Union[List[str], none_type, UnsetType]=unset, share_type: Union[DashboardShareType, none_type, UnsetType]=unset, status: Union[SharedDashboardStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, token: Union[str, UnsetType]=unset, viewing_preferences: Union[ViewingPreferences, UnsetType]=unset, **kwargs): + """ + The metadata object associated with how a dashboard has been/will be shared. + + :param author: User who shared the dashboard. + :type author: SharedDashboardAuthor, optional + + :param created: Date the dashboard was shared. + :type created: datetime, optional + + :param dashboard_id: ID of the dashboard to share. + :type dashboard_id: str + + :param dashboard_type: The type of the associated private dashboard. + :type dashboard_type: DashboardType + + :param embeddable_domains: The ``SharedDashboard`` ``embeddable_domains``. + :type embeddable_domains: [str], optional + + :param expiration: The time when an OPEN shared dashboard becomes publicly unavailable. + :type expiration: datetime, none_type, optional + + :param global_time: Object containing the live span selection for the dashboard. + :type global_time: DashboardGlobalTime, optional + + :param global_time_selectable_enabled: Whether to allow viewers to select a different global time setting for the shared dashboard. + :type global_time_selectable_enabled: bool, none_type, optional + + :param invitees: The ``SharedDashboard`` ``invitees``. + :type invitees: [SharedDashboardInviteesItems], optional + + :param last_accessed: The last time the shared dashboard was accessed. Null if never accessed. + :type last_accessed: datetime, none_type, optional + + :param public_url: URL of the shared dashboard. + :type public_url: str, optional + + :param selectable_template_vars: List of objects representing template variables on the shared dashboard which can have selectable values. + :type selectable_template_vars: [SelectableTemplateVariableItems], none_type, optional + + :param share_list: List of email addresses that can receive an invitation to access to the shared dashboard. **Deprecated**. + :type share_list: [str], none_type, optional + + :param share_type: Type of sharing access (either open to anyone who has the public URL or invite-only). + :type share_type: DashboardShareType, none_type, optional + + :param status: Active means the dashboard is publicly available. Paused means the dashboard is not publicly available. + :type status: SharedDashboardStatus, optional + + :param title: Title of the shared dashboard. + :type title: str, optional + + :param token: A unique token assigned to the shared dashboard. + :type token: str, optional + + :param viewing_preferences: The viewing preferences for a shared dashboard. + :type viewing_preferences: ViewingPreferences, optional + """ + if author is not unset: + kwargs["author"] = author + if created is not unset: + kwargs["created"] = created + if embeddable_domains is not unset: + kwargs["embeddable_domains"] = embeddable_domains + if expiration is not unset: + kwargs["expiration"] = expiration + if global_time is not unset: + kwargs["global_time"] = global_time + if global_time_selectable_enabled is not unset: + kwargs["global_time_selectable_enabled"] = global_time_selectable_enabled + if invitees is not unset: + kwargs["invitees"] = invitees + if last_accessed is not unset: + kwargs["last_accessed"] = last_accessed + if public_url is not unset: + kwargs["public_url"] = public_url + if selectable_template_vars is not unset: + kwargs["selectable_template_vars"] = selectable_template_vars + if share_list is not unset: + kwargs["share_list"] = share_list + if share_type is not unset: + kwargs["share_type"] = share_type + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if token is not unset: + kwargs["token"] = token + if viewing_preferences is not unset: + kwargs["viewing_preferences"] = viewing_preferences + super().__init__(kwargs) + + + self_.dashboard_id = dashboard_id + self_.dashboard_type = dashboard_type diff --git a/datadog_api_client/v1/model/shared_dashboard_author.py b/datadog_api_client/v1/model/shared_dashboard_author.py new file mode 100644 index 0000000000..c8449f58a8 --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_author.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardAuthor(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str, none_type), + } + attribute_map = { + "handle": "handle", + "name": "name", + } + read_only_vars = { + "handle", + "name", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + User who shared the dashboard. + + :param handle: Identifier of the user who shared the dashboard. + :type handle: str, optional + + :param name: Name of the user who shared the dashboard. + :type name: str, none_type, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/shared_dashboard_invitees_items.py b/datadog_api_client/v1/model/shared_dashboard_invitees_items.py new file mode 100644 index 0000000000..41157d056e --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_invitees_items.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardInviteesItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "access_expiration": (datetime, none_type), + "created_at": (datetime,), + "email": (str,), + } + attribute_map = { + "access_expiration": "access_expiration", + "created_at": "created_at", + "email": "email", + } + read_only_vars = { + "created_at", + } + + def __init__(self_, email: str, access_expiration: Union[datetime, none_type, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + The allowlisted invitees for an INVITE-only shared dashboard. + + :param access_expiration: Time of the invitee expiration. Null means the invite will not expire. + :type access_expiration: datetime, none_type, optional + + :param created_at: Time that the invitee was created. + :type created_at: datetime, optional + + :param email: Email of the invitee. + :type email: str + """ + if access_expiration is not unset: + kwargs["access_expiration"] = access_expiration + if created_at is not unset: + kwargs["created_at"] = created_at + super().__init__(kwargs) + + + self_.email = email diff --git a/datadog_api_client/v1/model/shared_dashboard_invites.py b/datadog_api_client/v1/model/shared_dashboard_invites.py new file mode 100644 index 0000000000..5b4a49ad12 --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_invites.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.shared_dashboard_invites_data import SharedDashboardInvitesData + from datadog_api_client.v1.model.shared_dashboard_invites_meta import SharedDashboardInvitesMeta + from datadog_api_client.v1.model.shared_dashboard_invites_data_object import SharedDashboardInvitesDataObject + from datadog_api_client.v1.model.shared_dashboard_invites_data_list import SharedDashboardInvitesDataList + +class SharedDashboardInvites(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.shared_dashboard_invites_data import SharedDashboardInvitesData + from datadog_api_client.v1.model.shared_dashboard_invites_meta import SharedDashboardInvitesMeta + return { + "data": (SharedDashboardInvitesData,), + "meta": (SharedDashboardInvitesMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + read_only_vars = { + "meta", + } + + def __init__(self_, data: Union[SharedDashboardInvitesData, SharedDashboardInvitesDataObject, SharedDashboardInvitesDataList], meta: Union[SharedDashboardInvitesMeta, UnsetType]=unset, **kwargs): + """ + Invitations data and metadata that exists for a shared dashboard returned by the API. + + :param data: An object or list of objects containing the information for an invitation to a shared dashboard. + :type data: SharedDashboardInvitesData + + :param meta: Pagination metadata returned by the API. + :type meta: SharedDashboardInvitesMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v1/model/shared_dashboard_invites_data.py b/datadog_api_client/v1/model/shared_dashboard_invites_data.py new file mode 100644 index 0000000000..deec0b684c --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_invites_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardInvitesData(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object or list of objects containing the information for an invitation to a shared dashboard. + + :param attributes: Attributes of the shared dashboard invitation + :type attributes: SharedDashboardInvitesDataObjectAttributes + + :param type: Type for shared dashboard invitation request body. + :type type: DashboardInviteType + """ + 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.v1.model.shared_dashboard_invites_data_object import SharedDashboardInvitesDataObject + from datadog_api_client.v1.model.shared_dashboard_invites_data_list import SharedDashboardInvitesDataList + return { + "oneOf": [ + SharedDashboardInvitesDataObject, + SharedDashboardInvitesDataList, + ], + } diff --git a/datadog_api_client/v1/model/shared_dashboard_invites_data_list.py b/datadog_api_client/v1/model/shared_dashboard_invites_data_list.py new file mode 100644 index 0000000000..44a5b16f3c --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_invites_data_list.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardInvitesDataList(ModelSimple): + """ + A list of objects containing the information for an invitation(s) to a shared dashboard. + + + :type value: [SharedDashboardInvitesDataObject] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.shared_dashboard_invites_data_object import SharedDashboardInvitesDataObject + return { + "value": ([SharedDashboardInvitesDataObject],), + } diff --git a/datadog_api_client/v1/model/shared_dashboard_invites_data_object.py b/datadog_api_client/v1/model/shared_dashboard_invites_data_object.py new file mode 100644 index 0000000000..6b40f07714 --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_invites_data_object.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.shared_dashboard_invites_data_object_attributes import SharedDashboardInvitesDataObjectAttributes + from datadog_api_client.v1.model.dashboard_invite_type import DashboardInviteType + +class SharedDashboardInvitesDataObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.shared_dashboard_invites_data_object_attributes import SharedDashboardInvitesDataObjectAttributes + from datadog_api_client.v1.model.dashboard_invite_type import DashboardInviteType + return { + "attributes": (SharedDashboardInvitesDataObjectAttributes,), + "type": (DashboardInviteType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SharedDashboardInvitesDataObjectAttributes, type: DashboardInviteType, **kwargs): + """ + Object containing the information for an invitation to a shared dashboard. + + :param attributes: Attributes of the shared dashboard invitation + :type attributes: SharedDashboardInvitesDataObjectAttributes + + :param type: Type for shared dashboard invitation request body. + :type type: DashboardInviteType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v1/model/shared_dashboard_invites_data_object_attributes.py b/datadog_api_client/v1/model/shared_dashboard_invites_data_object_attributes.py new file mode 100644 index 0000000000..3d253e1672 --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_invites_data_object_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardInvitesDataObjectAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "email": (str,), + "has_session": (bool,), + "invitation_expiry": (datetime,), + "session_expiry": (datetime, none_type), + "share_token": (str,), + } + attribute_map = { + "created_at": "created_at", + "email": "email", + "has_session": "has_session", + "invitation_expiry": "invitation_expiry", + "session_expiry": "session_expiry", + "share_token": "share_token", + } + read_only_vars = { + "created_at", + "has_session", + "invitation_expiry", + "session_expiry", + "share_token", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, email: Union[str, UnsetType]=unset, has_session: Union[bool, UnsetType]=unset, invitation_expiry: Union[datetime, UnsetType]=unset, session_expiry: Union[datetime, none_type, UnsetType]=unset, share_token: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the shared dashboard invitation + + :param created_at: When the invitation was sent. + :type created_at: datetime, optional + + :param email: An email address that an invitation has been (or if used in invitation request, will be) sent to. + :type email: str, optional + + :param has_session: Indicates whether an active session exists for the invitation (produced when a user clicks the link in the email). + :type has_session: bool, optional + + :param invitation_expiry: When the invitation expires. + :type invitation_expiry: datetime, optional + + :param session_expiry: When the invited user's session expires. null if the invitation has no associated session. + :type session_expiry: datetime, none_type, optional + + :param share_token: The unique token of the shared dashboard that was (or is to be) shared. + :type share_token: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if email is not unset: + kwargs["email"] = email + if has_session is not unset: + kwargs["has_session"] = has_session + if invitation_expiry is not unset: + kwargs["invitation_expiry"] = invitation_expiry + if session_expiry is not unset: + kwargs["session_expiry"] = session_expiry + if share_token is not unset: + kwargs["share_token"] = share_token + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/shared_dashboard_invites_meta.py b/datadog_api_client/v1/model/shared_dashboard_invites_meta.py new file mode 100644 index 0000000000..0ac0827719 --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_invites_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.shared_dashboard_invites_meta_page import SharedDashboardInvitesMetaPage + +class SharedDashboardInvitesMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.shared_dashboard_invites_meta_page import SharedDashboardInvitesMetaPage + return { + "page": (SharedDashboardInvitesMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[SharedDashboardInvitesMetaPage, UnsetType]=unset, **kwargs): + """ + Pagination metadata returned by the API. + + :param page: Object containing the total count of invitations across all pages + :type page: SharedDashboardInvitesMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/shared_dashboard_invites_meta_page.py b/datadog_api_client/v1/model/shared_dashboard_invites_meta_page.py new file mode 100644 index 0000000000..7a7c9267e7 --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_invites_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardInvitesMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "total_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Object containing the total count of invitations across all pages + + :param total_count: The total number of invitations on this shared board, across all pages. + :type total_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/shared_dashboard_status.py b/datadog_api_client/v1/model/shared_dashboard_status.py new file mode 100644 index 0000000000..300814058a --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SharedDashboardStatus(ModelSimple): + """ + Active means the dashboard is publicly available. Paused means the dashboard is not publicly available. + + :param value: Must be one of ["active", "paused"]. + :type value: str + """ + + allowed_values = { + "active", + "paused", + } + ACTIVE: ClassVar["SharedDashboardStatus"] + PAUSED: ClassVar["SharedDashboardStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SharedDashboardStatus.ACTIVE = SharedDashboardStatus("active") +SharedDashboardStatus.PAUSED = SharedDashboardStatus("paused") diff --git a/datadog_api_client/v1/model/shared_dashboard_update_request.py b/datadog_api_client/v1/model/shared_dashboard_update_request.py new file mode 100644 index 0000000000..c86a35b4ee --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_update_request.py @@ -0,0 +1,129 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.shared_dashboard_update_request_global_time import SharedDashboardUpdateRequestGlobalTime + from datadog_api_client.v1.model.shared_dashboard_invitees_items import SharedDashboardInviteesItems + from datadog_api_client.v1.model.selectable_template_variable_items import SelectableTemplateVariableItems + from datadog_api_client.v1.model.dashboard_share_type import DashboardShareType + from datadog_api_client.v1.model.shared_dashboard_status import SharedDashboardStatus + from datadog_api_client.v1.model.viewing_preferences import ViewingPreferences + +class SharedDashboardUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.shared_dashboard_update_request_global_time import SharedDashboardUpdateRequestGlobalTime + from datadog_api_client.v1.model.shared_dashboard_invitees_items import SharedDashboardInviteesItems + from datadog_api_client.v1.model.selectable_template_variable_items import SelectableTemplateVariableItems + from datadog_api_client.v1.model.dashboard_share_type import DashboardShareType + from datadog_api_client.v1.model.shared_dashboard_status import SharedDashboardStatus + from datadog_api_client.v1.model.viewing_preferences import ViewingPreferences + return { + "embeddable_domains": ([str],), + "expiration": (datetime, none_type), + "global_time": (SharedDashboardUpdateRequestGlobalTime,), + "global_time_selectable_enabled": (bool, none_type), + "invitees": ([SharedDashboardInviteesItems],), + "selectable_template_vars": ([SelectableTemplateVariableItems], none_type), + "share_list": ([str], none_type), + "share_type": (DashboardShareType,), + "status": (SharedDashboardStatus,), + "title": (str,), + "viewing_preferences": (ViewingPreferences,), + } + attribute_map = { + "embeddable_domains": "embeddable_domains", + "expiration": "expiration", + "global_time": "global_time", + "global_time_selectable_enabled": "global_time_selectable_enabled", + "invitees": "invitees", + "selectable_template_vars": "selectable_template_vars", + "share_list": "share_list", + "share_type": "share_type", + "status": "status", + "title": "title", + "viewing_preferences": "viewing_preferences", + } + + def __init__(self_, embeddable_domains: Union[List[str], UnsetType]=unset, expiration: Union[datetime, none_type, UnsetType]=unset, global_time: Union[SharedDashboardUpdateRequestGlobalTime, none_type, UnsetType]=unset, global_time_selectable_enabled: Union[bool, none_type, UnsetType]=unset, invitees: Union[List[SharedDashboardInviteesItems], UnsetType]=unset, selectable_template_vars: Union[List[SelectableTemplateVariableItems], none_type, UnsetType]=unset, share_list: Union[List[str], none_type, UnsetType]=unset, share_type: Union[DashboardShareType, none_type, UnsetType]=unset, status: Union[SharedDashboardStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, viewing_preferences: Union[ViewingPreferences, UnsetType]=unset, **kwargs): + """ + Update a shared dashboard's settings. + + :param embeddable_domains: The ``SharedDashboard`` ``embeddable_domains``. + :type embeddable_domains: [str], optional + + :param expiration: The time when an OPEN shared dashboard becomes publicly unavailable. + :type expiration: datetime, none_type, optional + + :param global_time: Timeframe setting for the shared dashboard. + :type global_time: SharedDashboardUpdateRequestGlobalTime, none_type, optional + + :param global_time_selectable_enabled: Whether to allow viewers to select a different global time setting for the shared dashboard. + :type global_time_selectable_enabled: bool, none_type, optional + + :param invitees: The ``SharedDashboard`` ``invitees``. + :type invitees: [SharedDashboardInviteesItems], optional + + :param selectable_template_vars: List of objects representing template variables on the shared dashboard which can have selectable values. + :type selectable_template_vars: [SelectableTemplateVariableItems], none_type, optional + + :param share_list: List of email addresses that can be given access to the shared dashboard. **Deprecated**. + :type share_list: [str], none_type, optional + + :param share_type: Type of sharing access (either open to anyone who has the public URL or invite-only). + :type share_type: DashboardShareType, none_type, optional + + :param status: Active means the dashboard is publicly available. Paused means the dashboard is not publicly available. + :type status: SharedDashboardStatus, optional + + :param title: Title of the shared dashboard. + :type title: str, optional + + :param viewing_preferences: The viewing preferences for a shared dashboard. + :type viewing_preferences: ViewingPreferences, optional + """ + if embeddable_domains is not unset: + kwargs["embeddable_domains"] = embeddable_domains + if expiration is not unset: + kwargs["expiration"] = expiration + if global_time is not unset: + kwargs["global_time"] = global_time + if global_time_selectable_enabled is not unset: + kwargs["global_time_selectable_enabled"] = global_time_selectable_enabled + if invitees is not unset: + kwargs["invitees"] = invitees + if selectable_template_vars is not unset: + kwargs["selectable_template_vars"] = selectable_template_vars + if share_list is not unset: + kwargs["share_list"] = share_list + if share_type is not unset: + kwargs["share_type"] = share_type + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if viewing_preferences is not unset: + kwargs["viewing_preferences"] = viewing_preferences + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/shared_dashboard_update_request_global_time.py b/datadog_api_client/v1/model/shared_dashboard_update_request_global_time.py new file mode 100644 index 0000000000..9ce216fc8d --- /dev/null +++ b/datadog_api_client/v1/model/shared_dashboard_update_request_global_time.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.dashboard_global_time_live_span import DashboardGlobalTimeLiveSpan + +class SharedDashboardUpdateRequestGlobalTime(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.dashboard_global_time_live_span import DashboardGlobalTimeLiveSpan + return { + "live_span": (DashboardGlobalTimeLiveSpan,), + } + attribute_map = { + "live_span": "live_span", + } + + def __init__(self_, live_span: Union[DashboardGlobalTimeLiveSpan, UnsetType]=unset, **kwargs): + """ + Timeframe setting for the shared dashboard. + + :param live_span: Dashboard global time live_span selection + :type live_span: DashboardGlobalTimeLiveSpan, optional + """ + if live_span is not unset: + kwargs["live_span"] = live_span + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/signal_archive_reason.py b/datadog_api_client/v1/model/signal_archive_reason.py new file mode 100644 index 0000000000..406dc137fe --- /dev/null +++ b/datadog_api_client/v1/model/signal_archive_reason.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SignalArchiveReason(ModelSimple): + """ + Reason why a signal has been archived. + + :param value: Must be one of ["none", "false_positive", "testing_or_maintenance", "investigated_case_opened", "true_positive_benign", "true_positive_malicious", "other"]. + :type value: str + """ + + allowed_values = { + "none", + "false_positive", + "testing_or_maintenance", + "investigated_case_opened", + "true_positive_benign", + "true_positive_malicious", + "other", + } + NONE: ClassVar["SignalArchiveReason"] + FALSE_POSITIVE: ClassVar["SignalArchiveReason"] + TESTING_OR_MAINTENANCE: ClassVar["SignalArchiveReason"] + INVESTIGATED_CASE_OPENED: ClassVar["SignalArchiveReason"] + TRUE_POSITIVE_BENIGN: ClassVar["SignalArchiveReason"] + TRUE_POSITIVE_MALICIOUS: ClassVar["SignalArchiveReason"] + OTHER: ClassVar["SignalArchiveReason"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SignalArchiveReason.NONE = SignalArchiveReason("none") +SignalArchiveReason.FALSE_POSITIVE = SignalArchiveReason("false_positive") +SignalArchiveReason.TESTING_OR_MAINTENANCE = SignalArchiveReason("testing_or_maintenance") +SignalArchiveReason.INVESTIGATED_CASE_OPENED = SignalArchiveReason("investigated_case_opened") +SignalArchiveReason.TRUE_POSITIVE_BENIGN = SignalArchiveReason("true_positive_benign") +SignalArchiveReason.TRUE_POSITIVE_MALICIOUS = SignalArchiveReason("true_positive_malicious") +SignalArchiveReason.OTHER = SignalArchiveReason("other") diff --git a/datadog_api_client/v1/model/signal_assignee_update_request.py b/datadog_api_client/v1/model/signal_assignee_update_request.py new file mode 100644 index 0000000000..aeeb7c2352 --- /dev/null +++ b/datadog_api_client/v1/model/signal_assignee_update_request.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SignalAssigneeUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignee": (str,), + "version": (int,), + } + attribute_map = { + "assignee": "assignee", + "version": "version", + } + + def __init__(self_, assignee: str, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes describing an assignee update operation over a security signal. + + :param assignee: The UUID of the user being assigned. Use empty string to return signal to unassigned. + :type assignee: str + + :param version: Version of the updated signal. If server side version is higher, update will be rejected. + :type version: int, optional + """ + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.assignee = assignee diff --git a/datadog_api_client/v1/model/signal_state_update_request.py b/datadog_api_client/v1/model/signal_state_update_request.py new file mode 100644 index 0000000000..7f03629dd4 --- /dev/null +++ b/datadog_api_client/v1/model/signal_state_update_request.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.signal_archive_reason import SignalArchiveReason + from datadog_api_client.v1.model.signal_triage_state import SignalTriageState + +class SignalStateUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.signal_archive_reason import SignalArchiveReason + from datadog_api_client.v1.model.signal_triage_state import SignalTriageState + return { + "archive_comment": (str,), + "archive_reason": (SignalArchiveReason,), + "state": (SignalTriageState,), + "version": (int,), + } + attribute_map = { + "archive_comment": "archiveComment", + "archive_reason": "archiveReason", + "state": "state", + "version": "version", + } + + def __init__(self_, state: SignalTriageState, archive_comment: Union[str, UnsetType]=unset, archive_reason: Union[SignalArchiveReason, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes describing the change of state for a given state. + + :param archive_comment: Optional comment to explain why a signal is being archived. + :type archive_comment: str, optional + + :param archive_reason: Reason why a signal has been archived. + :type archive_reason: SignalArchiveReason, optional + + :param state: The new triage state of the signal. + :type state: SignalTriageState + + :param version: Version of the updated signal. If server side version is higher, update will be rejected. + :type version: int, optional + """ + if archive_comment is not unset: + kwargs["archive_comment"] = archive_comment + if archive_reason is not unset: + kwargs["archive_reason"] = archive_reason + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.state = state diff --git a/datadog_api_client/v1/model/signal_triage_state.py b/datadog_api_client/v1/model/signal_triage_state.py new file mode 100644 index 0000000000..d8f0b7a0b8 --- /dev/null +++ b/datadog_api_client/v1/model/signal_triage_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SignalTriageState(ModelSimple): + """ + The new triage state of the signal. + + :param value: Must be one of ["open", "archived", "under_review"]. + :type value: str + """ + + allowed_values = { + "open", + "archived", + "under_review", + } + OPEN: ClassVar["SignalTriageState"] + ARCHIVED: ClassVar["SignalTriageState"] + UNDER_REVIEW: ClassVar["SignalTriageState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SignalTriageState.OPEN = SignalTriageState("open") +SignalTriageState.ARCHIVED = SignalTriageState("archived") +SignalTriageState.UNDER_REVIEW = SignalTriageState("under_review") diff --git a/datadog_api_client/v1/model/slack_integration_channel.py b/datadog_api_client/v1/model/slack_integration_channel.py new file mode 100644 index 0000000000..654f8e827b --- /dev/null +++ b/datadog_api_client/v1/model/slack_integration_channel.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slack_integration_channel_display import SlackIntegrationChannelDisplay + +class SlackIntegrationChannel(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slack_integration_channel_display import SlackIntegrationChannelDisplay + return { + "display": (SlackIntegrationChannelDisplay,), + "name": (str,), + } + attribute_map = { + "display": "display", + "name": "name", + } + + def __init__(self_, display: Union[SlackIntegrationChannelDisplay, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The Slack channel configuration. + + :param display: Configuration options for what is shown in an alert event message. + :type display: SlackIntegrationChannelDisplay, optional + + :param name: Your channel name. + :type name: str, optional + """ + if display is not unset: + kwargs["display"] = display + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slack_integration_channel_display.py b/datadog_api_client/v1/model/slack_integration_channel_display.py new file mode 100644 index 0000000000..a97f906aa8 --- /dev/null +++ b/datadog_api_client/v1/model/slack_integration_channel_display.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SlackIntegrationChannelDisplay(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": (bool,), + "mute_buttons": (bool,), + "notified": (bool,), + "snapshot": (bool,), + "tags": (bool,), + } + attribute_map = { + "message": "message", + "mute_buttons": "mute_buttons", + "notified": "notified", + "snapshot": "snapshot", + "tags": "tags", + } + + def __init__(self_, message: Union[bool, UnsetType]=unset, mute_buttons: Union[bool, UnsetType]=unset, notified: Union[bool, UnsetType]=unset, snapshot: Union[bool, UnsetType]=unset, tags: Union[bool, UnsetType]=unset, **kwargs): + """ + Configuration options for what is shown in an alert event message. + + :param message: Show the main body of the alert event. + :type message: bool, optional + + :param mute_buttons: Show interactive buttons to mute the alerting monitor. + :type mute_buttons: bool, optional + + :param notified: Show the list of @-handles in the alert event. + :type notified: bool, optional + + :param snapshot: Show the alert event's snapshot image. + :type snapshot: bool, optional + + :param tags: Show the scopes on which the monitor alerted. + :type tags: bool, optional + """ + if message is not unset: + kwargs["message"] = message + if mute_buttons is not unset: + kwargs["mute_buttons"] = mute_buttons + if notified is not unset: + kwargs["notified"] = notified + if snapshot is not unset: + kwargs["snapshot"] = snapshot + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slack_integration_channels.py b/datadog_api_client/v1/model/slack_integration_channels.py new file mode 100644 index 0000000000..6321d4675b --- /dev/null +++ b/datadog_api_client/v1/model/slack_integration_channels.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SlackIntegrationChannels(ModelSimple): + """ + A list of configured Slack channels. + + + :type value: [SlackIntegrationChannel] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slack_integration_channel import SlackIntegrationChannel + return { + "value": ([SlackIntegrationChannel],), + } diff --git a/datadog_api_client/v1/model/slo_bulk_delete.py b/datadog_api_client/v1/model/slo_bulk_delete.py new file mode 100644 index 0000000000..0b41877fcd --- /dev/null +++ b/datadog_api_client/v1/model/slo_bulk_delete.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + +class SLOBulkDelete(ModelNormal): + @cached_property + def additional_properties_type(_): + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + return ([SLOTimeframe],) + + def __init__(self_, **kwargs): + """ + A map of service level objective object IDs to arrays of timeframes, + which indicate the thresholds to delete for each ID. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_bulk_delete_error.py b/datadog_api_client/v1/model/slo_bulk_delete_error.py new file mode 100644 index 0000000000..62b639701d --- /dev/null +++ b/datadog_api_client/v1/model/slo_bulk_delete_error.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_error_timeframe import SLOErrorTimeframe + +class SLOBulkDeleteError(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_error_timeframe import SLOErrorTimeframe + return { + "id": (str,), + "message": (str,), + "timeframe": (SLOErrorTimeframe,), + } + attribute_map = { + "id": "id", + "message": "message", + "timeframe": "timeframe", + } + + def __init__(self_, id: str, message: str, timeframe: SLOErrorTimeframe, **kwargs): + """ + Object describing the error. + + :param id: The ID of the service level objective object associated with + this error. + :type id: str + + :param message: The error message. + :type message: str + + :param timeframe: The timeframe of the threshold associated with this error + or "all" if all thresholds are affected. + :type timeframe: SLOErrorTimeframe + """ + super().__init__(kwargs) + + + self_.id = id + self_.message = message + self_.timeframe = timeframe diff --git a/datadog_api_client/v1/model/slo_bulk_delete_response.py b/datadog_api_client/v1/model/slo_bulk_delete_response.py new file mode 100644 index 0000000000..67d8360583 --- /dev/null +++ b/datadog_api_client/v1/model/slo_bulk_delete_response.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_bulk_delete_response_data import SLOBulkDeleteResponseData + from datadog_api_client.v1.model.slo_bulk_delete_error import SLOBulkDeleteError + +class SLOBulkDeleteResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_bulk_delete_response_data import SLOBulkDeleteResponseData + from datadog_api_client.v1.model.slo_bulk_delete_error import SLOBulkDeleteError + return { + "data": (SLOBulkDeleteResponseData,), + "errors": ([SLOBulkDeleteError],), + } + attribute_map = { + "data": "data", + "errors": "errors", + } + + def __init__(self_, data: Union[SLOBulkDeleteResponseData, UnsetType]=unset, errors: Union[List[SLOBulkDeleteError], UnsetType]=unset, **kwargs): + """ + The bulk partial delete service level objective object endpoint + response. + + This endpoint operates on multiple service level objective objects, so + it may be partially successful. In such cases, the "data" and "error" + fields in this response indicate which deletions succeeded and failed. + + :param data: An array of service level objective objects. + :type data: SLOBulkDeleteResponseData, optional + + :param errors: Array of errors object returned. + :type errors: [SLOBulkDeleteError], optional + """ + if data is not unset: + kwargs["data"] = data + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_bulk_delete_response_data.py b/datadog_api_client/v1/model/slo_bulk_delete_response_data.py new file mode 100644 index 0000000000..06d96f5cd8 --- /dev/null +++ b/datadog_api_client/v1/model/slo_bulk_delete_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOBulkDeleteResponseData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted": ([str],), + "updated": ([str],), + } + attribute_map = { + "deleted": "deleted", + "updated": "updated", + } + + def __init__(self_, deleted: Union[List[str], UnsetType]=unset, updated: Union[List[str], UnsetType]=unset, **kwargs): + """ + An array of service level objective objects. + + :param deleted: An array of service level objective object IDs that indicates + which objects that were completely deleted. + :type deleted: [str], optional + + :param updated: An array of service level objective object IDs that indicates + which objects that were modified (objects for which at least one + threshold was deleted, but that were not completely deleted). + :type updated: [str], optional + """ + if deleted is not unset: + kwargs["deleted"] = deleted + if updated is not unset: + kwargs["updated"] = updated + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_correction.py b/datadog_api_client/v1/model/slo_correction.py new file mode 100644 index 0000000000..77161a0736 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction_response_attributes import SLOCorrectionResponseAttributes + from datadog_api_client.v1.model.slo_correction_type import SLOCorrectionType + +class SLOCorrection(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction_response_attributes import SLOCorrectionResponseAttributes + from datadog_api_client.v1.model.slo_correction_type import SLOCorrectionType + return { + "attributes": (SLOCorrectionResponseAttributes,), + "id": (str,), + "type": (SLOCorrectionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SLOCorrectionResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SLOCorrectionType, UnsetType]=unset, **kwargs): + """ + The response object of a list of SLO corrections. + + :param attributes: The attribute object associated with the SLO correction. + :type attributes: SLOCorrectionResponseAttributes, optional + + :param id: The ID of the SLO correction. + :type id: str, optional + + :param type: SLO correction resource type. + :type type: SLOCorrectionType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_correction_category.py b/datadog_api_client/v1/model/slo_correction_category.py new file mode 100644 index 0000000000..8e17e30fcf --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_category.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOCorrectionCategory(ModelSimple): + """ + Category the SLO correction belongs to. + + :param value: Must be one of ["Scheduled Maintenance", "Outside Business Hours", "Deployment", "Other"]. + :type value: str + """ + + allowed_values = { + "Scheduled Maintenance", + "Outside Business Hours", + "Deployment", + "Other", + } + SCHEDULED_MAINTENANCE: ClassVar["SLOCorrectionCategory"] + OUTSIDE_BUSINESS_HOURS: ClassVar["SLOCorrectionCategory"] + DEPLOYMENT: ClassVar["SLOCorrectionCategory"] + OTHER: ClassVar["SLOCorrectionCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOCorrectionCategory.SCHEDULED_MAINTENANCE = SLOCorrectionCategory("Scheduled Maintenance") +SLOCorrectionCategory.OUTSIDE_BUSINESS_HOURS = SLOCorrectionCategory("Outside Business Hours") +SLOCorrectionCategory.DEPLOYMENT = SLOCorrectionCategory("Deployment") +SLOCorrectionCategory.OTHER = SLOCorrectionCategory("Other") diff --git a/datadog_api_client/v1/model/slo_correction_create_data.py b/datadog_api_client/v1/model/slo_correction_create_data.py new file mode 100644 index 0000000000..9f85730a22 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_create_data.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction_create_request_attributes import SLOCorrectionCreateRequestAttributes + from datadog_api_client.v1.model.slo_correction_type import SLOCorrectionType + +class SLOCorrectionCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction_create_request_attributes import SLOCorrectionCreateRequestAttributes + from datadog_api_client.v1.model.slo_correction_type import SLOCorrectionType + return { + "attributes": (SLOCorrectionCreateRequestAttributes,), + "type": (SLOCorrectionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: SLOCorrectionType, attributes: Union[SLOCorrectionCreateRequestAttributes, UnsetType]=unset, **kwargs): + """ + The data object associated with the SLO correction to be created. + + :param attributes: The attribute object associated with the SLO correction to be created. + + Exactly one of ``slo_id`` or ``slo_query`` must be provided. + :type attributes: SLOCorrectionCreateRequestAttributes, optional + + :param type: SLO correction resource type. + :type type: SLOCorrectionType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/slo_correction_create_request.py b/datadog_api_client/v1/model/slo_correction_create_request.py new file mode 100644 index 0000000000..635a974bf3 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_create_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction_create_data import SLOCorrectionCreateData + +class SLOCorrectionCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction_create_data import SLOCorrectionCreateData + return { + "data": (SLOCorrectionCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SLOCorrectionCreateData, UnsetType]=unset, **kwargs): + """ + An object that defines a correction to be applied to one or more SLOs. + + :param data: The data object associated with the SLO correction to be created. + :type data: SLOCorrectionCreateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_correction_create_request_attributes.py b/datadog_api_client/v1/model/slo_correction_create_request_attributes.py new file mode 100644 index 0000000000..17bcb43237 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_create_request_attributes.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction_category import SLOCorrectionCategory + +class SLOCorrectionCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction_category import SLOCorrectionCategory + return { + "category": (SLOCorrectionCategory,), + "description": (str,), + "duration": (int,), + "end": (int,), + "rrule": (str,), + "slo_id": (str,), + "slo_query": (str,), + "start": (int,), + "timezone": (str,), + } + attribute_map = { + "category": "category", + "description": "description", + "duration": "duration", + "end": "end", + "rrule": "rrule", + "slo_id": "slo_id", + "slo_query": "slo_query", + "start": "start", + "timezone": "timezone", + } + + def __init__(self_, category: SLOCorrectionCategory, start: int, description: Union[str, UnsetType]=unset, duration: Union[int, UnsetType]=unset, end: Union[int, UnsetType]=unset, rrule: Union[str, UnsetType]=unset, slo_id: Union[str, UnsetType]=unset, slo_query: Union[str, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + The attribute object associated with the SLO correction to be created. + + Exactly one of ``slo_id`` or ``slo_query`` must be provided. + + :param category: Category the SLO correction belongs to. + :type category: SLOCorrectionCategory + + :param description: Description of the correction being made. + :type description: str, optional + + :param duration: Length of time (in seconds) for a specified ``rrule`` recurring SLO correction. + :type duration: int, optional + + :param end: Ending time of the correction in epoch seconds. + :type end: int, optional + + :param rrule: The recurrence rules as defined in the iCalendar RFC 5545. The supported rules for SLO corrections + are ``FREQ`` , ``INTERVAL`` , ``COUNT`` , ``UNTIL`` and ``BYDAY``. + :type rrule: str, optional + + :param slo_id: ID of the single SLO that this correction applies to. + :type slo_id: str, optional + + :param slo_query: Query that matches the SLOs this correction applies to. + The query uses the `Events search syntax `_ + and can filter SLOs by SLO tags. + :type slo_query: str, optional + + :param start: Starting time of the correction in epoch seconds. + :type start: int + + :param timezone: The timezone to display in the UI for the correction times (defaults to "UTC"). + :type timezone: str, optional + """ + if description is not unset: + kwargs["description"] = description + if duration is not unset: + kwargs["duration"] = duration + if end is not unset: + kwargs["end"] = end + if rrule is not unset: + kwargs["rrule"] = rrule + if slo_id is not unset: + kwargs["slo_id"] = slo_id + if slo_query is not unset: + kwargs["slo_query"] = slo_query + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + + self_.category = category + self_.start = start diff --git a/datadog_api_client/v1/model/slo_correction_list_response.py b/datadog_api_client/v1/model/slo_correction_list_response.py new file mode 100644 index 0000000000..eb5f42e672 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_list_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction import SLOCorrection + from datadog_api_client.v1.model.response_meta_attributes import ResponseMetaAttributes + +class SLOCorrectionListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction import SLOCorrection + from datadog_api_client.v1.model.response_meta_attributes import ResponseMetaAttributes + return { + "data": ([SLOCorrection],), + "meta": (ResponseMetaAttributes,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[SLOCorrection], UnsetType]=unset, meta: Union[ResponseMetaAttributes, UnsetType]=unset, **kwargs): + """ + A list of SLO correction objects. + + :param data: The list of SLO corrections objects. + :type data: [SLOCorrection], optional + + :param meta: Object describing meta attributes of response. + :type meta: ResponseMetaAttributes, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_correction_response.py b/datadog_api_client/v1/model/slo_correction_response.py new file mode 100644 index 0000000000..aae988bad7 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction import SLOCorrection + +class SLOCorrectionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction import SLOCorrection + return { + "data": (SLOCorrection,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SLOCorrection, UnsetType]=unset, **kwargs): + """ + The response object of an SLO correction. + + :param data: The response object of a list of SLO corrections. + :type data: SLOCorrection, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_correction_response_attributes.py b/datadog_api_client/v1/model/slo_correction_response_attributes.py new file mode 100644 index 0000000000..fa45a220c0 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_response_attributes.py @@ -0,0 +1,141 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction_category import SLOCorrectionCategory + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.slo_correction_response_attributes_modifier import SLOCorrectionResponseAttributesModifier + +class SLOCorrectionResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction_category import SLOCorrectionCategory + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.slo_correction_response_attributes_modifier import SLOCorrectionResponseAttributesModifier + return { + "category": (SLOCorrectionCategory,), + "created_at": (int, none_type), + "creator": (Creator,), + "description": (str,), + "duration": (int, none_type), + "end": (int, none_type), + "modified_at": (int, none_type), + "modifier": (SLOCorrectionResponseAttributesModifier,), + "rrule": (str, none_type), + "slo_id": (str, none_type), + "slo_query": (str, none_type), + "start": (int,), + "timezone": (str,), + } + attribute_map = { + "category": "category", + "created_at": "created_at", + "creator": "creator", + "description": "description", + "duration": "duration", + "end": "end", + "modified_at": "modified_at", + "modifier": "modifier", + "rrule": "rrule", + "slo_id": "slo_id", + "slo_query": "slo_query", + "start": "start", + "timezone": "timezone", + } + read_only_vars = { + "creator", + } + + def __init__(self_, category: Union[SLOCorrectionCategory, UnsetType]=unset, created_at: Union[int, none_type, UnsetType]=unset, creator: Union[Creator, UnsetType]=unset, description: Union[str, UnsetType]=unset, duration: Union[int, none_type, UnsetType]=unset, end: Union[int, none_type, UnsetType]=unset, modified_at: Union[int, none_type, UnsetType]=unset, modifier: Union[SLOCorrectionResponseAttributesModifier, none_type, UnsetType]=unset, rrule: Union[str, none_type, UnsetType]=unset, slo_id: Union[str, none_type, UnsetType]=unset, slo_query: Union[str, none_type, UnsetType]=unset, start: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + The attribute object associated with the SLO correction. + + :param category: Category the SLO correction belongs to. + :type category: SLOCorrectionCategory, optional + + :param created_at: The epoch timestamp of when the correction was created at. + :type created_at: int, none_type, optional + + :param creator: Object describing the creator of the shared element. + :type creator: Creator, optional + + :param description: Description of the correction being made. + :type description: str, optional + + :param duration: Length of time (in seconds) for a specified ``rrule`` recurring SLO correction. + :type duration: int, none_type, optional + + :param end: Ending time of the correction in epoch seconds. + :type end: int, none_type, optional + + :param modified_at: The epoch timestamp of when the correction was modified at. + :type modified_at: int, none_type, optional + + :param modifier: Modifier of the object. + :type modifier: SLOCorrectionResponseAttributesModifier, none_type, optional + + :param rrule: The recurrence rules as defined in the iCalendar RFC 5545. The supported rules for SLO corrections + are ``FREQ`` , ``INTERVAL`` , ``COUNT`` , ``UNTIL`` and ``BYDAY``. + :type rrule: str, none_type, optional + + :param slo_id: ID of the single SLO that this correction applies to. + :type slo_id: str, none_type, optional + + :param slo_query: Query that matches the SLOs this correction applies to. + :type slo_query: str, none_type, optional + + :param start: Starting time of the correction in epoch seconds. + :type start: int, optional + + :param timezone: The timezone to display in the UI for the correction times (defaults to "UTC"). + :type timezone: str, optional + """ + if category is not unset: + kwargs["category"] = category + if created_at is not unset: + kwargs["created_at"] = created_at + if creator is not unset: + kwargs["creator"] = creator + if description is not unset: + kwargs["description"] = description + if duration is not unset: + kwargs["duration"] = duration + if end is not unset: + kwargs["end"] = end + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if modifier is not unset: + kwargs["modifier"] = modifier + if rrule is not unset: + kwargs["rrule"] = rrule + if slo_id is not unset: + kwargs["slo_id"] = slo_id + if slo_query is not unset: + kwargs["slo_query"] = slo_query + if start is not unset: + kwargs["start"] = start + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_correction_response_attributes_modifier.py b/datadog_api_client/v1/model/slo_correction_response_attributes_modifier.py new file mode 100644 index 0000000000..cbddf1de02 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_response_attributes_modifier.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOCorrectionResponseAttributesModifier(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "name": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Modifier of the object. + + :param email: Email of the Modifier. + :type email: str, optional + + :param handle: Handle of the Modifier. + :type handle: str, optional + + :param name: Name of the Modifier. + :type name: str, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_correction_type.py b/datadog_api_client/v1/model/slo_correction_type.py new file mode 100644 index 0000000000..2b7ee116a9 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOCorrectionType(ModelSimple): + """ + SLO correction resource type. + + :param value: If omitted defaults to "correction". Must be one of ["correction"]. + :type value: str + """ + + allowed_values = { + "correction", + } + CORRECTION: ClassVar["SLOCorrectionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOCorrectionType.CORRECTION = SLOCorrectionType("correction") diff --git a/datadog_api_client/v1/model/slo_correction_update_data.py b/datadog_api_client/v1/model/slo_correction_update_data.py new file mode 100644 index 0000000000..f42fdcefe7 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_update_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction_update_request_attributes import SLOCorrectionUpdateRequestAttributes + from datadog_api_client.v1.model.slo_correction_type import SLOCorrectionType + +class SLOCorrectionUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction_update_request_attributes import SLOCorrectionUpdateRequestAttributes + from datadog_api_client.v1.model.slo_correction_type import SLOCorrectionType + return { + "attributes": (SLOCorrectionUpdateRequestAttributes,), + "type": (SLOCorrectionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[SLOCorrectionUpdateRequestAttributes, UnsetType]=unset, type: Union[SLOCorrectionType, UnsetType]=unset, **kwargs): + """ + The data object associated with the SLO correction to be updated. + + :param attributes: The attribute object associated with the SLO correction to be updated. + :type attributes: SLOCorrectionUpdateRequestAttributes, optional + + :param type: SLO correction resource type. + :type type: SLOCorrectionType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_correction_update_request.py b/datadog_api_client/v1/model/slo_correction_update_request.py new file mode 100644 index 0000000000..c127a1df0a --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_update_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction_update_data import SLOCorrectionUpdateData + +class SLOCorrectionUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction_update_data import SLOCorrectionUpdateData + return { + "data": (SLOCorrectionUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SLOCorrectionUpdateData, UnsetType]=unset, **kwargs): + """ + An object that defines a correction to be applied to an SLO. + + :param data: The data object associated with the SLO correction to be updated. + :type data: SLOCorrectionUpdateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_correction_update_request_attributes.py b/datadog_api_client/v1/model/slo_correction_update_request_attributes.py new file mode 100644 index 0000000000..14d9311f73 --- /dev/null +++ b/datadog_api_client/v1/model/slo_correction_update_request_attributes.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_correction_category import SLOCorrectionCategory + +class SLOCorrectionUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_correction_category import SLOCorrectionCategory + return { + "category": (SLOCorrectionCategory,), + "description": (str,), + "duration": (int,), + "end": (int,), + "rrule": (str,), + "slo_query": (str,), + "start": (int,), + "timezone": (str,), + } + attribute_map = { + "category": "category", + "description": "description", + "duration": "duration", + "end": "end", + "rrule": "rrule", + "slo_query": "slo_query", + "start": "start", + "timezone": "timezone", + } + + def __init__(self_, category: Union[SLOCorrectionCategory, UnsetType]=unset, description: Union[str, UnsetType]=unset, duration: Union[int, UnsetType]=unset, end: Union[int, UnsetType]=unset, rrule: Union[str, UnsetType]=unset, slo_query: Union[str, UnsetType]=unset, start: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + The attribute object associated with the SLO correction to be updated. + + :param category: Category the SLO correction belongs to. + :type category: SLOCorrectionCategory, optional + + :param description: Description of the correction being made. + :type description: str, optional + + :param duration: Length of time (in seconds) for a specified ``rrule`` recurring SLO correction. + :type duration: int, optional + + :param end: Ending time of the correction in epoch seconds. + :type end: int, optional + + :param rrule: The recurrence rules as defined in the iCalendar RFC 5545. The supported rules for SLO corrections + are ``FREQ`` , ``INTERVAL`` , ``COUNT`` , ``UNTIL`` and ``BYDAY``. + :type rrule: str, optional + + :param slo_query: Query that matches the SLOs this correction applies to. + The query uses the `Events search syntax `_ + and can filter SLOs by SLO tags. + :type slo_query: str, optional + + :param start: Starting time of the correction in epoch seconds. + :type start: int, optional + + :param timezone: The timezone to display in the UI for the correction times (defaults to "UTC"). + :type timezone: str, optional + """ + if category is not unset: + kwargs["category"] = category + if description is not unset: + kwargs["description"] = description + if duration is not unset: + kwargs["duration"] = duration + if end is not unset: + kwargs["end"] = end + if rrule is not unset: + kwargs["rrule"] = rrule + if slo_query is not unset: + kwargs["slo_query"] = slo_query + if start is not unset: + kwargs["start"] = start + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_count_definition.py b/datadog_api_client/v1/model/slo_count_definition.py new file mode 100644 index 0000000000..70f0a324a4 --- /dev/null +++ b/datadog_api_client/v1/model/slo_count_definition.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOCountDefinition(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A count-based (metric) SLI specification, composed of three parts: the good events formula, + the bad or total events formula, and the underlying queries. + Exactly one of ``total_events_formula`` or ``bad_events_formula`` must be provided. + + :param good_events_formula: A formula that specifies how to combine the results of multiple queries. + :type good_events_formula: SLOFormula + + :param queries: + :type queries: [SLODataSourceQueryDefinition] + + :param total_events_formula: A formula that specifies how to combine the results of multiple queries. + :type total_events_formula: SLOFormula + + :param bad_events_formula: A formula that specifies how to combine the results of multiple queries. + :type bad_events_formula: SLOFormula + """ + 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.v1.model.slo_count_definition_with_total_events_formula import SLOCountDefinitionWithTotalEventsFormula + from datadog_api_client.v1.model.slo_count_definition_with_bad_events_formula import SLOCountDefinitionWithBadEventsFormula + return { + "oneOf": [ + SLOCountDefinitionWithTotalEventsFormula, + SLOCountDefinitionWithBadEventsFormula, + ], + } diff --git a/datadog_api_client/v1/model/slo_count_definition_with_bad_events_formula.py b/datadog_api_client/v1/model/slo_count_definition_with_bad_events_formula.py new file mode 100644 index 0000000000..df5b401fec --- /dev/null +++ b/datadog_api_client/v1/model/slo_count_definition_with_bad_events_formula.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_formula import SLOFormula + from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + +class SLOCountDefinitionWithBadEventsFormula(ModelNormal): + validations = { + "queries": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_formula import SLOFormula + from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition + return { + "bad_events_formula": (SLOFormula,), + "good_events_formula": (SLOFormula,), + "queries": ([SLODataSourceQueryDefinition],), + } + attribute_map = { + "bad_events_formula": "bad_events_formula", + "good_events_formula": "good_events_formula", + "queries": "queries", + } + + def __init__(self_, bad_events_formula: SLOFormula, good_events_formula: SLOFormula, queries: List[Union[SLODataSourceQueryDefinition, FormulaAndFunctionMetricQueryDefinition]], **kwargs): + """ + SLO count definition using a bad events formula alongside a good events formula. + + :param bad_events_formula: A formula that specifies how to combine the results of multiple queries. + :type bad_events_formula: SLOFormula + + :param good_events_formula: A formula that specifies how to combine the results of multiple queries. + :type good_events_formula: SLOFormula + + :param queries: + :type queries: [SLODataSourceQueryDefinition] + """ + super().__init__(kwargs) + + + self_.bad_events_formula = bad_events_formula + self_.good_events_formula = good_events_formula + self_.queries = queries diff --git a/datadog_api_client/v1/model/slo_count_definition_with_total_events_formula.py b/datadog_api_client/v1/model/slo_count_definition_with_total_events_formula.py new file mode 100644 index 0000000000..9fedf1a64d --- /dev/null +++ b/datadog_api_client/v1/model/slo_count_definition_with_total_events_formula.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_formula import SLOFormula + from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + +class SLOCountDefinitionWithTotalEventsFormula(ModelNormal): + validations = { + "queries": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_formula import SLOFormula + from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition + return { + "good_events_formula": (SLOFormula,), + "queries": ([SLODataSourceQueryDefinition],), + "total_events_formula": (SLOFormula,), + } + attribute_map = { + "good_events_formula": "good_events_formula", + "queries": "queries", + "total_events_formula": "total_events_formula", + } + + def __init__(self_, good_events_formula: SLOFormula, queries: List[Union[SLODataSourceQueryDefinition, FormulaAndFunctionMetricQueryDefinition]], total_events_formula: SLOFormula, **kwargs): + """ + SLO count definition using a total events formula alongside a good events formula. + + :param good_events_formula: A formula that specifies how to combine the results of multiple queries. + :type good_events_formula: SLOFormula + + :param queries: + :type queries: [SLODataSourceQueryDefinition] + + :param total_events_formula: A formula that specifies how to combine the results of multiple queries. + :type total_events_formula: SLOFormula + """ + super().__init__(kwargs) + + + self_.good_events_formula = good_events_formula + self_.queries = queries + self_.total_events_formula = total_events_formula diff --git a/datadog_api_client/v1/model/slo_count_spec.py b/datadog_api_client/v1/model/slo_count_spec.py new file mode 100644 index 0000000000..9ba6ddb849 --- /dev/null +++ b/datadog_api_client/v1/model/slo_count_spec.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_count_definition import SLOCountDefinition + from datadog_api_client.v1.model.slo_count_definition_with_total_events_formula import SLOCountDefinitionWithTotalEventsFormula + from datadog_api_client.v1.model.slo_count_definition_with_bad_events_formula import SLOCountDefinitionWithBadEventsFormula + +class SLOCountSpec(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_count_definition import SLOCountDefinition + return { + "count": (SLOCountDefinition,), + } + attribute_map = { + "count": "count", + } + + def __init__(self_, count: Union[SLOCountDefinition, SLOCountDefinitionWithTotalEventsFormula, SLOCountDefinitionWithBadEventsFormula], **kwargs): + """ + A metric SLI specification. + + :param count: A count-based (metric) SLI specification, composed of three parts: the good events formula, + the bad or total events formula, and the underlying queries. + Exactly one of ``total_events_formula`` or ``bad_events_formula`` must be provided. + :type count: SLOCountDefinition + """ + super().__init__(kwargs) + + + self_.count = count diff --git a/datadog_api_client/v1/model/slo_creator.py b/datadog_api_client/v1/model/slo_creator.py new file mode 100644 index 0000000000..124275095f --- /dev/null +++ b/datadog_api_client/v1/model/slo_creator.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOCreator(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "email": (str,), + "id": (int,), + "name": (str, none_type), + } + attribute_map = { + "email": "email", + "id": "id", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, id: Union[int, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The creator of the SLO + + :param email: Email of the creator. + :type email: str, optional + + :param id: User ID of the creator. + :type id: int, optional + + :param name: Name of the creator. + :type name: str, none_type, optional + """ + if email is not unset: + kwargs["email"] = email + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_data_source_query_definition.py b/datadog_api_client/v1/model/slo_data_source_query_definition.py new file mode 100644 index 0000000000..1bfb4f8680 --- /dev/null +++ b/datadog_api_client/v1/model/slo_data_source_query_definition.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLODataSourceQueryDefinition(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A formula and function query. + + :param aggregator: The aggregation methods available for metrics queries. + :type aggregator: FormulaAndFunctionMetricAggregation, optional + + :param cross_org_uuids: The source organization UUID for cross organization queries. Feature in Private Beta. + :type cross_org_uuids: [str], optional + + :param data_source: Data source for metrics queries. + :type data_source: FormulaAndFunctionMetricDataSource + + :param name: Name of the query for use in formulas. + :type name: str + + :param query: Metrics query definition. + :type query: str + + :param semantic_mode: Semantic mode for metrics queries. This determines how metrics from different sources are combined or displayed. + :type semantic_mode: FormulaAndFunctionMetricSemanticMode, 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.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + return { + "oneOf": [ + FormulaAndFunctionMetricQueryDefinition, + ], + } diff --git a/datadog_api_client/v1/model/slo_delete_response.py b/datadog_api_client/v1/model/slo_delete_response.py new file mode 100644 index 0000000000..5c3e860e6d --- /dev/null +++ b/datadog_api_client/v1/model/slo_delete_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLODeleteResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "data": ([str],), + "errors": ({str: (str,)},), + } + attribute_map = { + "data": "data", + "errors": "errors", + } + + def __init__(self_, data: Union[List[str], UnsetType]=unset, errors: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + A response list of all service level objective deleted. + + :param data: An array containing the ID of the deleted service level objective object. + :type data: [str], optional + + :param errors: An dictionary containing the ID of the SLO as key and a deletion error as value. + :type errors: {str: (str,)}, optional + """ + if data is not unset: + kwargs["data"] = data + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_error_budget_remaining_data.py b/datadog_api_client/v1/model/slo_error_budget_remaining_data.py new file mode 100644 index 0000000000..9b0e50d74f --- /dev/null +++ b/datadog_api_client/v1/model/slo_error_budget_remaining_data.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOErrorBudgetRemainingData(ModelNormal): + @cached_property + def additional_properties_type(_): + return (float,) + + def __init__(self_, **kwargs): + """ + A mapping of threshold ``timeframe`` to the remaining error budget. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_error_timeframe.py b/datadog_api_client/v1/model/slo_error_timeframe.py new file mode 100644 index 0000000000..712f41a8e6 --- /dev/null +++ b/datadog_api_client/v1/model/slo_error_timeframe.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOErrorTimeframe(ModelSimple): + """ + The timeframe of the threshold associated with this error + or "all" if all thresholds are affected. + + :param value: Must be one of ["7d", "30d", "90d", "all"]. + :type value: str + """ + + allowed_values = { + "7d", + "30d", + "90d", + "all", + } + SEVEN_DAYS: ClassVar["SLOErrorTimeframe"] + THIRTY_DAYS: ClassVar["SLOErrorTimeframe"] + NINETY_DAYS: ClassVar["SLOErrorTimeframe"] + ALL: ClassVar["SLOErrorTimeframe"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOErrorTimeframe.SEVEN_DAYS = SLOErrorTimeframe("7d") +SLOErrorTimeframe.THIRTY_DAYS = SLOErrorTimeframe("30d") +SLOErrorTimeframe.NINETY_DAYS = SLOErrorTimeframe("90d") +SLOErrorTimeframe.ALL = SLOErrorTimeframe("all") diff --git a/datadog_api_client/v1/model/slo_formula.py b/datadog_api_client/v1/model/slo_formula.py new file mode 100644 index 0000000000..fda005dcdf --- /dev/null +++ b/datadog_api_client/v1/model/slo_formula.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOFormula(ModelNormal): + @cached_property + def openapi_types(_): + return { + "formula": (str,), + } + attribute_map = { + "formula": "formula", + } + + def __init__(self_, formula: str, **kwargs): + """ + A formula that specifies how to combine the results of multiple queries. + + :param formula: The formula string, which is an expression involving named queries. + :type formula: str + """ + super().__init__(kwargs) + + + self_.formula = formula diff --git a/datadog_api_client/v1/model/slo_history_metrics.py b/datadog_api_client/v1/model/slo_history_metrics.py new file mode 100644 index 0000000000..b6c9246e56 --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_metrics.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_history_metrics_series import SLOHistoryMetricsSeries + +class SLOHistoryMetrics(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_history_metrics_series import SLOHistoryMetricsSeries + return { + "denominator": (SLOHistoryMetricsSeries,), + "interval": (int,), + "message": (str,), + "numerator": (SLOHistoryMetricsSeries,), + "query": (str,), + "res_type": (str,), + "resp_version": (int,), + "times": ([float],), + } + attribute_map = { + "denominator": "denominator", + "interval": "interval", + "message": "message", + "numerator": "numerator", + "query": "query", + "res_type": "res_type", + "resp_version": "resp_version", + "times": "times", + } + + def __init__(self_, denominator: SLOHistoryMetricsSeries, interval: int, numerator: SLOHistoryMetricsSeries, query: str, res_type: str, resp_version: int, times: List[float], message: Union[str, UnsetType]=unset, **kwargs): + """ + A ``metric`` based SLO history response. + + This is not included in responses for ``monitor`` based SLOs. + + :param denominator: A representation of ``metric`` based SLO timeseries for the provided queries. + This is the same response type from ``batch_query`` endpoint. + :type denominator: SLOHistoryMetricsSeries + + :param interval: The aggregated query interval for the series data. It's implicit based on the query time window. + :type interval: int + + :param message: Optional message if there are specific query issues/warnings. + :type message: str, optional + + :param numerator: A representation of ``metric`` based SLO timeseries for the provided queries. + This is the same response type from ``batch_query`` endpoint. + :type numerator: SLOHistoryMetricsSeries + + :param query: The combined numerator and denominator query CSV. + :type query: str + + :param res_type: The series result type. This mimics ``batch_query`` response type. + :type res_type: str + + :param resp_version: The series response version type. This mimics ``batch_query`` response type. + :type resp_version: int + + :param times: An array of query timestamps in EPOCH milliseconds. + :type times: [float] + """ + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + + self_.denominator = denominator + self_.interval = interval + self_.numerator = numerator + self_.query = query + self_.res_type = res_type + self_.resp_version = resp_version + self_.times = times diff --git a/datadog_api_client/v1/model/slo_history_metrics_series.py b/datadog_api_client/v1/model/slo_history_metrics_series.py new file mode 100644 index 0000000000..c9bebd4001 --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_metrics_series.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_history_metrics_series_metadata import SLOHistoryMetricsSeriesMetadata + +class SLOHistoryMetricsSeries(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_history_metrics_series_metadata import SLOHistoryMetricsSeriesMetadata + return { + "count": (int,), + "metadata": (SLOHistoryMetricsSeriesMetadata,), + "sum": (float,), + "values": ([float],), + } + attribute_map = { + "count": "count", + "metadata": "metadata", + "sum": "sum", + "values": "values", + } + + def __init__(self_, count: int, sum: float, values: List[float], metadata: Union[SLOHistoryMetricsSeriesMetadata, UnsetType]=unset, **kwargs): + """ + A representation of ``metric`` based SLO timeseries for the provided queries. + This is the same response type from ``batch_query`` endpoint. + + :param count: Count of submitted metrics. + :type count: int + + :param metadata: Query metadata. + :type metadata: SLOHistoryMetricsSeriesMetadata, optional + + :param sum: Total sum of the query. + :type sum: float + + :param values: The query values for each metric. + :type values: [float] + """ + if metadata is not unset: + kwargs["metadata"] = metadata + super().__init__(kwargs) + + + self_.count = count + self_.sum = sum + self_.values = values diff --git a/datadog_api_client/v1/model/slo_history_metrics_series_metadata.py b/datadog_api_client/v1/model/slo_history_metrics_series_metadata.py new file mode 100644 index 0000000000..c47590107d --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_metrics_series_metadata.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_history_metrics_series_metadata_unit import SLOHistoryMetricsSeriesMetadataUnit + +class SLOHistoryMetricsSeriesMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_history_metrics_series_metadata_unit import SLOHistoryMetricsSeriesMetadataUnit + return { + "aggr": (str,), + "expression": (str,), + "metric": (str,), + "query_index": (int,), + "scope": (str,), + "unit": ([SLOHistoryMetricsSeriesMetadataUnit, none_type], none_type), + } + attribute_map = { + "aggr": "aggr", + "expression": "expression", + "metric": "metric", + "query_index": "query_index", + "scope": "scope", + "unit": "unit", + } + + def __init__(self_, aggr: Union[str, UnsetType]=unset, expression: Union[str, UnsetType]=unset, metric: Union[str, UnsetType]=unset, query_index: Union[int, UnsetType]=unset, scope: Union[str, UnsetType]=unset, unit: Union[List[SLOHistoryMetricsSeriesMetadataUnit], none_type, UnsetType]=unset, **kwargs): + """ + Query metadata. + + :param aggr: Query aggregator function. **Deprecated**. + :type aggr: str, optional + + :param expression: Query expression. **Deprecated**. + :type expression: str, optional + + :param metric: Query metric used. **Deprecated**. + :type metric: str, optional + + :param query_index: Query index from original combined query. **Deprecated**. + :type query_index: int, optional + + :param scope: Query scope. **Deprecated**. + :type scope: str, optional + + :param unit: An array of metric units that contains up to two unit objects. + For example, bytes represents one unit object and bytes per second represents two unit objects. + If a metric query only has one unit object, the second array element is null. + :type unit: [SLOHistoryMetricsSeriesMetadataUnit, none_type], none_type, optional + """ + if aggr is not unset: + kwargs["aggr"] = aggr + if expression is not unset: + kwargs["expression"] = expression + if metric is not unset: + kwargs["metric"] = metric + if query_index is not unset: + kwargs["query_index"] = query_index + if scope is not unset: + kwargs["scope"] = scope + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_history_metrics_series_metadata_unit.py b/datadog_api_client/v1/model/slo_history_metrics_series_metadata_unit.py new file mode 100644 index 0000000000..59a0cc7b27 --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_metrics_series_metadata_unit.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOHistoryMetricsSeriesMetadataUnit(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "family": (str,), + "id": (int,), + "name": (str,), + "plural": (str, none_type), + "scale_factor": (float,), + "short_name": (str, none_type), + } + attribute_map = { + "family": "family", + "id": "id", + "name": "name", + "plural": "plural", + "scale_factor": "scale_factor", + "short_name": "short_name", + } + + def __init__(self_, family: Union[str, UnsetType]=unset, id: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, plural: Union[str, none_type, UnsetType]=unset, scale_factor: Union[float, UnsetType]=unset, short_name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + An Object of metric units. + + :param family: The family of metric unit, for example ``bytes`` is the family for ``kibibyte`` , ``byte`` , and ``bit`` units. + :type family: str, optional + + :param id: The ID of the metric unit. + :type id: int, optional + + :param name: The unit of the metric, for instance ``byte``. + :type name: str, optional + + :param plural: The plural Unit of metric, for instance ``bytes``. + :type plural: str, none_type, optional + + :param scale_factor: The scale factor of metric unit, for instance ``1.0``. + :type scale_factor: float, optional + + :param short_name: A shorter and abbreviated version of the metric unit, for instance ``B``. + :type short_name: str, none_type, optional + """ + if family is not unset: + kwargs["family"] = family + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if plural is not unset: + kwargs["plural"] = plural + if scale_factor is not unset: + kwargs["scale_factor"] = scale_factor + if short_name is not unset: + kwargs["short_name"] = short_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_history_monitor.py b/datadog_api_client/v1/model/slo_history_monitor.py new file mode 100644 index 0000000000..aef0369f5d --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_monitor.py @@ -0,0 +1,136 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_error_budget_remaining_data import SLOErrorBudgetRemainingData + from datadog_api_client.v1.model.slo_history_response_error_with_type import SLOHistoryResponseErrorWithType + +class SLOHistoryMonitor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_error_budget_remaining_data import SLOErrorBudgetRemainingData + from datadog_api_client.v1.model.slo_history_response_error_with_type import SLOHistoryResponseErrorWithType + return { + "error_budget_remaining": (SLOErrorBudgetRemainingData,), + "errors": ([SLOHistoryResponseErrorWithType],), + "group": (str,), + "history": ([[float]],), + "monitor_modified": (int,), + "monitor_type": (str,), + "name": (str,), + "precision": (float,), + "preview": (bool,), + "sli_value": (float, none_type), + "span_precision": (float,), + "uptime": (float,), + } + attribute_map = { + "error_budget_remaining": "error_budget_remaining", + "errors": "errors", + "group": "group", + "history": "history", + "monitor_modified": "monitor_modified", + "monitor_type": "monitor_type", + "name": "name", + "precision": "precision", + "preview": "preview", + "sli_value": "sli_value", + "span_precision": "span_precision", + "uptime": "uptime", + } + + def __init__(self_, error_budget_remaining: Union[SLOErrorBudgetRemainingData, UnsetType]=unset, errors: Union[List[SLOHistoryResponseErrorWithType], UnsetType]=unset, group: Union[str, UnsetType]=unset, history: Union[List[List[float]], UnsetType]=unset, monitor_modified: Union[int, UnsetType]=unset, monitor_type: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, precision: Union[float, UnsetType]=unset, preview: Union[bool, UnsetType]=unset, sli_value: Union[float, none_type, UnsetType]=unset, span_precision: Union[float, UnsetType]=unset, uptime: Union[float, UnsetType]=unset, **kwargs): + """ + An object that holds an SLI value and its associated data. It can represent an SLO's overall SLI value. + This can also represent the SLI value for a specific monitor in multi-monitor SLOs, or a group in grouped SLOs. + + :param error_budget_remaining: A mapping of threshold ``timeframe`` to the remaining error budget. + :type error_budget_remaining: SLOErrorBudgetRemainingData, optional + + :param errors: An array of error objects returned while querying the history data for the service level objective. + :type errors: [SLOHistoryResponseErrorWithType], optional + + :param group: For groups in a grouped SLO, this is the group name. + :type group: str, optional + + :param history: The state transition history for the monitor. It is represented as + an array of pairs. Each pair is an array containing the timestamp of the transition + as an integer in Unix epoch format in the first element, and the state as an integer in the + second element. An integer value of ``0`` for state means uptime, ``1`` means downtime, and ``2`` means no data. + Periods of no data are counted either as uptime or downtime depending on monitor settings. + See `SLO documentation `_ + for detailed information. + :type history: [[float]], optional + + :param monitor_modified: For ``monitor`` based SLOs, this is the last modified timestamp in epoch seconds of the monitor. + :type monitor_modified: int, optional + + :param monitor_type: For ``monitor`` based SLOs, this describes the type of monitor. + :type monitor_type: str, optional + + :param name: For groups in a grouped SLO, this is the group name. For monitors in a multi-monitor SLO, this is the monitor name. + :type name: str, optional + + :param precision: The amount of decimal places the SLI value is accurate to for the given from ``&&`` to timestamp. Use ``span_precision`` instead. **Deprecated**. + :type precision: float, optional + + :param preview: For ``monitor`` based SLOs, when ``true`` this indicates that a replay is in progress to give an accurate uptime + calculation. + :type preview: bool, optional + + :param sli_value: The current SLI value of the SLO over the history window. + :type sli_value: float, none_type, optional + + :param span_precision: The amount of decimal places the SLI value is accurate to for the given from ``&&`` to timestamp. + :type span_precision: float, optional + + :param uptime: Use ``sli_value`` instead. **Deprecated**. + :type uptime: float, optional + """ + if error_budget_remaining is not unset: + kwargs["error_budget_remaining"] = error_budget_remaining + if errors is not unset: + kwargs["errors"] = errors + if group is not unset: + kwargs["group"] = group + if history is not unset: + kwargs["history"] = history + if monitor_modified is not unset: + kwargs["monitor_modified"] = monitor_modified + if monitor_type is not unset: + kwargs["monitor_type"] = monitor_type + if name is not unset: + kwargs["name"] = name + if precision is not unset: + kwargs["precision"] = precision + if preview is not unset: + kwargs["preview"] = preview + if sli_value is not unset: + kwargs["sli_value"] = sli_value + if span_precision is not unset: + kwargs["span_precision"] = span_precision + if uptime is not unset: + kwargs["uptime"] = uptime + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_history_response.py b/datadog_api_client/v1/model/slo_history_response.py new file mode 100644 index 0000000000..1bf765a000 --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_history_response_data import SLOHistoryResponseData + from datadog_api_client.v1.model.slo_history_response_error import SLOHistoryResponseError + +class SLOHistoryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_history_response_data import SLOHistoryResponseData + from datadog_api_client.v1.model.slo_history_response_error import SLOHistoryResponseError + return { + "data": (SLOHistoryResponseData,), + "errors": ([SLOHistoryResponseError], none_type), + } + attribute_map = { + "data": "data", + "errors": "errors", + } + + def __init__(self_, data: Union[SLOHistoryResponseData, UnsetType]=unset, errors: Union[List[SLOHistoryResponseError], none_type, UnsetType]=unset, **kwargs): + """ + A service level objective history response. + + :param data: An array of service level objective objects. + :type data: SLOHistoryResponseData, optional + + :param errors: A list of errors while querying the history data for the service level objective. + :type errors: [SLOHistoryResponseError], none_type, optional + """ + if data is not unset: + kwargs["data"] = data + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_history_response_data.py b/datadog_api_client/v1/model/slo_history_response_data.py new file mode 100644 index 0000000000..f5079284fc --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_response_data.py @@ -0,0 +1,133 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_history_monitor import SLOHistoryMonitor + from datadog_api_client.v1.model.slo_history_sli_data import SLOHistorySLIData + from datadog_api_client.v1.model.slo_history_metrics import SLOHistoryMetrics + from datadog_api_client.v1.model.slo_threshold import SLOThreshold + from datadog_api_client.v1.model.slo_type import SLOType + from datadog_api_client.v1.model.slo_type_numeric import SLOTypeNumeric + +class SLOHistoryResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_history_monitor import SLOHistoryMonitor + from datadog_api_client.v1.model.slo_history_sli_data import SLOHistorySLIData + from datadog_api_client.v1.model.slo_history_metrics import SLOHistoryMetrics + from datadog_api_client.v1.model.slo_threshold import SLOThreshold + from datadog_api_client.v1.model.slo_type import SLOType + from datadog_api_client.v1.model.slo_type_numeric import SLOTypeNumeric + return { + "from_ts": (int,), + "group_by": ([str],), + "groups": ([SLOHistoryMonitor],), + "monitors": ([SLOHistoryMonitor],), + "overall": (SLOHistorySLIData,), + "series": (SLOHistoryMetrics,), + "thresholds": ({str: (SLOThreshold,)},), + "to_ts": (int,), + "type": (SLOType,), + "type_id": (SLOTypeNumeric,), + } + attribute_map = { + "from_ts": "from_ts", + "group_by": "group_by", + "groups": "groups", + "monitors": "monitors", + "overall": "overall", + "series": "series", + "thresholds": "thresholds", + "to_ts": "to_ts", + "type": "type", + "type_id": "type_id", + } + + def __init__(self_, from_ts: Union[int, UnsetType]=unset, group_by: Union[List[str], UnsetType]=unset, groups: Union[List[SLOHistoryMonitor], UnsetType]=unset, monitors: Union[List[SLOHistoryMonitor], UnsetType]=unset, overall: Union[SLOHistorySLIData, UnsetType]=unset, series: Union[SLOHistoryMetrics, UnsetType]=unset, thresholds: Union[Dict[str, SLOThreshold], UnsetType]=unset, to_ts: Union[int, UnsetType]=unset, type: Union[SLOType, UnsetType]=unset, type_id: Union[SLOTypeNumeric, UnsetType]=unset, **kwargs): + """ + An array of service level objective objects. + + :param from_ts: The ``from`` timestamp in epoch seconds. + :type from_ts: int, optional + + :param group_by: For ``metric`` based SLOs where the query includes a group-by clause, this represents the list of grouping parameters. + + This is not included in responses for ``monitor`` based SLOs. + :type group_by: [str], optional + + :param groups: For grouped SLOs, this represents SLI data for specific groups. + + This is not included in the responses for ``metric`` based SLOs. + :type groups: [SLOHistoryMonitor], optional + + :param monitors: For multi-monitor SLOs, this represents SLI data for specific monitors. + + This is not included in the responses for ``metric`` based SLOs. + :type monitors: [SLOHistoryMonitor], optional + + :param overall: An object that holds an SLI value and its associated data. It can represent an SLO's overall SLI value. + This can also represent the SLI value for a specific monitor in multi-monitor SLOs, or a group in grouped SLOs. + :type overall: SLOHistorySLIData, optional + + :param series: A ``metric`` based SLO history response. + + This is not included in responses for ``monitor`` based SLOs. + :type series: SLOHistoryMetrics, optional + + :param thresholds: mapping of string timeframe to the SLO threshold. + :type thresholds: {str: (SLOThreshold,)}, optional + + :param to_ts: The ``to`` timestamp in epoch seconds. + :type to_ts: int, optional + + :param type: The type of the service level objective. + :type type: SLOType, optional + + :param type_id: A numeric representation of the type of the service level objective ( ``0`` for + monitor, ``1`` for metric). Always included in service level objective responses. + Ignored in create/update requests. + :type type_id: SLOTypeNumeric, optional + """ + if from_ts is not unset: + kwargs["from_ts"] = from_ts + if group_by is not unset: + kwargs["group_by"] = group_by + if groups is not unset: + kwargs["groups"] = groups + if monitors is not unset: + kwargs["monitors"] = monitors + if overall is not unset: + kwargs["overall"] = overall + if series is not unset: + kwargs["series"] = series + if thresholds is not unset: + kwargs["thresholds"] = thresholds + if to_ts is not unset: + kwargs["to_ts"] = to_ts + if type is not unset: + kwargs["type"] = type + if type_id is not unset: + kwargs["type_id"] = type_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_history_response_error.py b/datadog_api_client/v1/model/slo_history_response_error.py new file mode 100644 index 0000000000..2f90c8ce8d --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_response_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOHistoryResponseError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "error": (str,), + } + attribute_map = { + "error": "error", + } + + def __init__(self_, error: Union[str, UnsetType]=unset, **kwargs): + """ + A list of errors while querying the history data for the service level objective. + + :param error: Human readable error. + :type error: str, optional + """ + if error is not unset: + kwargs["error"] = error + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_history_response_error_with_type.py b/datadog_api_client/v1/model/slo_history_response_error_with_type.py new file mode 100644 index 0000000000..170c221763 --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_response_error_with_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOHistoryResponseErrorWithType(ModelNormal): + @cached_property + def openapi_types(_): + return { + "error_message": (str,), + "error_type": (str,), + } + attribute_map = { + "error_message": "error_message", + "error_type": "error_type", + } + + def __init__(self_, error_message: str, error_type: str, **kwargs): + """ + An object describing the error with error type and error message. + + :param error_message: A message with more details about the error. + :type error_message: str + + :param error_type: Type of the error. + :type error_type: str + """ + super().__init__(kwargs) + + + self_.error_message = error_message + self_.error_type = error_type diff --git a/datadog_api_client/v1/model/slo_history_sli_data.py b/datadog_api_client/v1/model/slo_history_sli_data.py new file mode 100644 index 0000000000..aee7a2a50b --- /dev/null +++ b/datadog_api_client/v1/model/slo_history_sli_data.py @@ -0,0 +1,137 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_error_budget_remaining_data import SLOErrorBudgetRemainingData + from datadog_api_client.v1.model.slo_history_response_error_with_type import SLOHistoryResponseErrorWithType + +class SLOHistorySLIData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_error_budget_remaining_data import SLOErrorBudgetRemainingData + from datadog_api_client.v1.model.slo_history_response_error_with_type import SLOHistoryResponseErrorWithType + return { + "error_budget_remaining": (SLOErrorBudgetRemainingData,), + "errors": ([SLOHistoryResponseErrorWithType],), + "group": (str,), + "history": ([[float]],), + "monitor_modified": (int,), + "monitor_type": (str,), + "name": (str,), + "precision": ({str: (float,)},), + "preview": (bool,), + "sli_value": (float, none_type), + "span_precision": (float,), + "uptime": (float, none_type), + } + attribute_map = { + "error_budget_remaining": "error_budget_remaining", + "errors": "errors", + "group": "group", + "history": "history", + "monitor_modified": "monitor_modified", + "monitor_type": "monitor_type", + "name": "name", + "precision": "precision", + "preview": "preview", + "sli_value": "sli_value", + "span_precision": "span_precision", + "uptime": "uptime", + } + + def __init__(self_, error_budget_remaining: Union[SLOErrorBudgetRemainingData, UnsetType]=unset, errors: Union[List[SLOHistoryResponseErrorWithType], UnsetType]=unset, group: Union[str, UnsetType]=unset, history: Union[List[List[float]], UnsetType]=unset, monitor_modified: Union[int, UnsetType]=unset, monitor_type: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, precision: Union[Dict[str, float], UnsetType]=unset, preview: Union[bool, UnsetType]=unset, sli_value: Union[float, none_type, UnsetType]=unset, span_precision: Union[float, UnsetType]=unset, uptime: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + An object that holds an SLI value and its associated data. It can represent an SLO's overall SLI value. + This can also represent the SLI value for a specific monitor in multi-monitor SLOs, or a group in grouped SLOs. + + :param error_budget_remaining: A mapping of threshold ``timeframe`` to the remaining error budget. + :type error_budget_remaining: SLOErrorBudgetRemainingData, optional + + :param errors: An array of error objects returned while querying the history data for the service level objective. + :type errors: [SLOHistoryResponseErrorWithType], optional + + :param group: For groups in a grouped SLO, this is the group name. + :type group: str, optional + + :param history: The state transition history for ``monitor`` or ``time-slice`` SLOs. It is represented as + an array of pairs. Each pair is an array containing the timestamp of the transition + as an integer in Unix epoch format in the first element, and the state as an integer in the + second element. An integer value of ``0`` for state means uptime, ``1`` means downtime, and ``2`` means no data. + Periods of no data count as uptime in time-slice SLOs, while for monitor SLOs, no data is counted + either as uptime or downtime depending on monitor settings. See + `SLO documentation `_ + for detailed information. + :type history: [[float]], optional + + :param monitor_modified: For ``monitor`` based SLOs, this is the last modified timestamp in epoch seconds of the monitor. + :type monitor_modified: int, optional + + :param monitor_type: For ``monitor`` based SLOs, this describes the type of monitor. + :type monitor_type: str, optional + + :param name: For groups in a grouped SLO, this is the group name. For monitors in a multi-monitor SLO, this is the monitor name. + :type name: str, optional + + :param precision: A mapping of threshold ``timeframe`` to number of accurate decimals, regardless of the from && to timestamp. + :type precision: {str: (float,)}, optional + + :param preview: For ``monitor`` based SLOs, when ``true`` this indicates that a replay is in progress to give an accurate uptime + calculation. + :type preview: bool, optional + + :param sli_value: The current SLI value of the SLO over the history window. + :type sli_value: float, none_type, optional + + :param span_precision: The amount of decimal places the SLI value is accurate to for the given from ``&&`` to timestamp. + :type span_precision: float, optional + + :param uptime: Use ``sli_value`` instead. **Deprecated**. + :type uptime: float, none_type, optional + """ + if error_budget_remaining is not unset: + kwargs["error_budget_remaining"] = error_budget_remaining + if errors is not unset: + kwargs["errors"] = errors + if group is not unset: + kwargs["group"] = group + if history is not unset: + kwargs["history"] = history + if monitor_modified is not unset: + kwargs["monitor_modified"] = monitor_modified + if monitor_type is not unset: + kwargs["monitor_type"] = monitor_type + if name is not unset: + kwargs["name"] = name + if precision is not unset: + kwargs["precision"] = precision + if preview is not unset: + kwargs["preview"] = preview + if sli_value is not unset: + kwargs["sli_value"] = sli_value + if span_precision is not unset: + kwargs["span_precision"] = span_precision + if uptime is not unset: + kwargs["uptime"] = uptime + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_list_response.py b/datadog_api_client/v1/model/slo_list_response.py new file mode 100644 index 0000000000..537c6003fb --- /dev/null +++ b/datadog_api_client/v1/model/slo_list_response.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.service_level_objective import ServiceLevelObjective + from datadog_api_client.v1.model.slo_list_response_metadata import SLOListResponseMetadata + from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec + +class SLOListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.service_level_objective import ServiceLevelObjective + from datadog_api_client.v1.model.slo_list_response_metadata import SLOListResponseMetadata + return { + "data": ([ServiceLevelObjective],), + "errors": ([str],), + "metadata": (SLOListResponseMetadata,), + } + attribute_map = { + "data": "data", + "errors": "errors", + "metadata": "metadata", + } + + def __init__(self_, data: Union[List[ServiceLevelObjective], UnsetType]=unset, errors: Union[List[str], UnsetType]=unset, metadata: Union[SLOListResponseMetadata, UnsetType]=unset, **kwargs): + """ + A response with one or more service level objective. + + :param data: An array of service level objective objects. + :type data: [ServiceLevelObjective], optional + + :param errors: An array of error messages. Each endpoint documents how/whether this field is + used. + :type errors: [str], optional + + :param metadata: The metadata object containing additional information about the list of SLOs. + :type metadata: SLOListResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if errors is not unset: + kwargs["errors"] = errors + if metadata is not unset: + kwargs["metadata"] = metadata + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_list_response_metadata.py b/datadog_api_client/v1/model/slo_list_response_metadata.py new file mode 100644 index 0000000000..c64a047491 --- /dev/null +++ b/datadog_api_client/v1/model/slo_list_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_list_response_metadata_page import SLOListResponseMetadataPage + +class SLOListResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_list_response_metadata_page import SLOListResponseMetadataPage + return { + "page": (SLOListResponseMetadataPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[SLOListResponseMetadataPage, UnsetType]=unset, **kwargs): + """ + The metadata object containing additional information about the list of SLOs. + + :param page: The object containing information about the pages of the list of SLOs. + :type page: SLOListResponseMetadataPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_list_response_metadata_page.py b/datadog_api_client/v1/model/slo_list_response_metadata_page.py new file mode 100644 index 0000000000..fd42dd3d03 --- /dev/null +++ b/datadog_api_client/v1/model/slo_list_response_metadata_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOListResponseMetadataPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + The object containing information about the pages of the list of SLOs. + + :param total_count: The total number of resources that could be retrieved ignoring the parameters and filters in the request. + :type total_count: int, optional + + :param total_filtered_count: The total number of resources that match the parameters and filters in the request. This attribute can be used by a client to determine the total number of pages. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_list_widget_definition.py b/datadog_api_client/v1/model/slo_list_widget_definition.py new file mode 100644 index 0000000000..218b482412 --- /dev/null +++ b/datadog_api_client/v1/model/slo_list_widget_definition.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_list_widget_request import SLOListWidgetRequest + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.slo_list_widget_definition_type import SLOListWidgetDefinitionType + +class SLOListWidgetDefinition(ModelNormal): + validations = { + "requests": { + "max_items": 1, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_list_widget_request import SLOListWidgetRequest + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.slo_list_widget_definition_type import SLOListWidgetDefinitionType + return { + "description": (str,), + "requests": ([SLOListWidgetRequest],), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (SLOListWidgetDefinitionType,), + } + attribute_map = { + "description": "description", + "requests": "requests", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[SLOListWidgetRequest], type: SLOListWidgetDefinitionType, description: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + Use the SLO List widget to track your SLOs (Service Level Objectives) on dashboards. + + :param description: The description of the widget. + :type description: str, optional + + :param requests: Array of one request object to display in the widget. + :type requests: [SLOListWidgetRequest] + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the SLO List widget. + :type type: SLOListWidgetDefinitionType + """ + if description is not unset: + kwargs["description"] = description + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/slo_list_widget_definition_type.py b/datadog_api_client/v1/model/slo_list_widget_definition_type.py new file mode 100644 index 0000000000..c4dfc7b1a2 --- /dev/null +++ b/datadog_api_client/v1/model/slo_list_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOListWidgetDefinitionType(ModelSimple): + """ + Type of the SLO List widget. + + :param value: If omitted defaults to "slo_list". Must be one of ["slo_list"]. + :type value: str + """ + + allowed_values = { + "slo_list", + } + SLO_LIST: ClassVar["SLOListWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOListWidgetDefinitionType.SLO_LIST = SLOListWidgetDefinitionType("slo_list") diff --git a/datadog_api_client/v1/model/slo_list_widget_query.py b/datadog_api_client/v1/model/slo_list_widget_query.py new file mode 100644 index 0000000000..352da0a825 --- /dev/null +++ b/datadog_api_client/v1/model/slo_list_widget_query.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_field_sort import WidgetFieldSort + +class SLOListWidgetQuery(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_field_sort import WidgetFieldSort + return { + "limit": (int,), + "query_string": (str,), + "sort": ([WidgetFieldSort],), + } + attribute_map = { + "limit": "limit", + "query_string": "query_string", + "sort": "sort", + } + + def __init__(self_, query_string: str, limit: Union[int, UnsetType]=unset, sort: Union[List[WidgetFieldSort], UnsetType]=unset, **kwargs): + """ + Updated SLO List widget. + + :param limit: Maximum number of results to display in the table. + :type limit: int, optional + + :param query_string: Widget query. + :type query_string: str + + :param sort: Options for sorting results. + :type sort: [WidgetFieldSort], optional + """ + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + + self_.query_string = query_string diff --git a/datadog_api_client/v1/model/slo_list_widget_request.py b/datadog_api_client/v1/model/slo_list_widget_request.py new file mode 100644 index 0000000000..9d1a1192a7 --- /dev/null +++ b/datadog_api_client/v1/model/slo_list_widget_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_list_widget_query import SLOListWidgetQuery + from datadog_api_client.v1.model.slo_list_widget_request_type import SLOListWidgetRequestType + +class SLOListWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_list_widget_query import SLOListWidgetQuery + from datadog_api_client.v1.model.slo_list_widget_request_type import SLOListWidgetRequestType + return { + "query": (SLOListWidgetQuery,), + "request_type": (SLOListWidgetRequestType,), + } + attribute_map = { + "query": "query", + "request_type": "request_type", + } + + def __init__(self_, query: SLOListWidgetQuery, request_type: SLOListWidgetRequestType, **kwargs): + """ + Updated SLO List widget. + + :param query: Updated SLO List widget. + :type query: SLOListWidgetQuery + + :param request_type: Widget request type. + :type request_type: SLOListWidgetRequestType + """ + super().__init__(kwargs) + + + self_.query = query + self_.request_type = request_type diff --git a/datadog_api_client/v1/model/slo_list_widget_request_type.py b/datadog_api_client/v1/model/slo_list_widget_request_type.py new file mode 100644 index 0000000000..6efad2acba --- /dev/null +++ b/datadog_api_client/v1/model/slo_list_widget_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOListWidgetRequestType(ModelSimple): + """ + Widget request type. + + :param value: If omitted defaults to "slo_list". Must be one of ["slo_list"]. + :type value: str + """ + + allowed_values = { + "slo_list", + } + SLO_LIST: ClassVar["SLOListWidgetRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOListWidgetRequestType.SLO_LIST = SLOListWidgetRequestType("slo_list") diff --git a/datadog_api_client/v1/model/slo_overall_statuses.py b/datadog_api_client/v1/model/slo_overall_statuses.py new file mode 100644 index 0000000000..ebbac6e1fc --- /dev/null +++ b/datadog_api_client/v1/model/slo_overall_statuses.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_raw_error_budget_remaining import SLORawErrorBudgetRemaining + from datadog_api_client.v1.model.slo_state import SLOState + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + +class SLOOverallStatuses(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_raw_error_budget_remaining import SLORawErrorBudgetRemaining + from datadog_api_client.v1.model.slo_state import SLOState + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + return { + "error": (str, none_type), + "error_budget_remaining": (float, none_type), + "indexed_at": (int,), + "raw_error_budget_remaining": (SLORawErrorBudgetRemaining,), + "span_precision": (int, none_type), + "state": (SLOState,), + "status": (float, none_type), + "target": (float,), + "timeframe": (SLOTimeframe,), + } + attribute_map = { + "error": "error", + "error_budget_remaining": "error_budget_remaining", + "indexed_at": "indexed_at", + "raw_error_budget_remaining": "raw_error_budget_remaining", + "span_precision": "span_precision", + "state": "state", + "status": "status", + "target": "target", + "timeframe": "timeframe", + } + + def __init__(self_, error: Union[str, none_type, UnsetType]=unset, error_budget_remaining: Union[float, none_type, UnsetType]=unset, indexed_at: Union[int, UnsetType]=unset, raw_error_budget_remaining: Union[SLORawErrorBudgetRemaining, none_type, UnsetType]=unset, span_precision: Union[int, none_type, UnsetType]=unset, state: Union[SLOState, UnsetType]=unset, status: Union[float, none_type, UnsetType]=unset, target: Union[float, UnsetType]=unset, timeframe: Union[SLOTimeframe, UnsetType]=unset, **kwargs): + """ + Overall status of the SLO by timeframes. + + :param error: Error message if SLO status or error budget could not be calculated. + :type error: str, none_type, optional + + :param error_budget_remaining: Remaining error budget of the SLO in percentage. + :type error_budget_remaining: float, none_type, optional + + :param indexed_at: timestamp (UNIX time in seconds) of when the SLO status and error budget + were calculated. + :type indexed_at: int, optional + + :param raw_error_budget_remaining: Error budget remaining for an SLO. + :type raw_error_budget_remaining: SLORawErrorBudgetRemaining, none_type, optional + + :param span_precision: The amount of decimal places the SLI value is accurate to. + :type span_precision: int, none_type, optional + + :param state: State of the SLO. + :type state: SLOState, optional + + :param status: The status of the SLO. + :type status: float, none_type, optional + + :param target: The target of the SLO. + :type target: float, optional + + :param timeframe: The SLO time window options. Note that "custom" is not a valid option for creating + or updating SLOs. It is only used when querying SLO history over custom timeframes. + :type timeframe: SLOTimeframe, optional + """ + if error is not unset: + kwargs["error"] = error + if error_budget_remaining is not unset: + kwargs["error_budget_remaining"] = error_budget_remaining + if indexed_at is not unset: + kwargs["indexed_at"] = indexed_at + if raw_error_budget_remaining is not unset: + kwargs["raw_error_budget_remaining"] = raw_error_budget_remaining + if span_precision is not unset: + kwargs["span_precision"] = span_precision + if state is not unset: + kwargs["state"] = state + if status is not unset: + kwargs["status"] = status + if target is not unset: + kwargs["target"] = target + if timeframe is not unset: + kwargs["timeframe"] = timeframe + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_raw_error_budget_remaining.py b/datadog_api_client/v1/model/slo_raw_error_budget_remaining.py new file mode 100644 index 0000000000..249bc3bd3c --- /dev/null +++ b/datadog_api_client/v1/model/slo_raw_error_budget_remaining.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLORawErrorBudgetRemaining(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "unit": (str,), + "value": (float,), + } + attribute_map = { + "unit": "unit", + "value": "value", + } + + def __init__(self_, unit: Union[str, UnsetType]=unset, value: Union[float, UnsetType]=unset, **kwargs): + """ + Error budget remaining for an SLO. + + :param unit: Error budget remaining unit. + :type unit: str, optional + + :param value: Error budget remaining value. + :type value: float, optional + """ + if unit is not unset: + kwargs["unit"] = unit + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_response.py b/datadog_api_client/v1/model/slo_response.py new file mode 100644 index 0000000000..e666a7c0e3 --- /dev/null +++ b/datadog_api_client/v1/model/slo_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_response_data import SLOResponseData + from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec + +class SLOResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_response_data import SLOResponseData + return { + "data": (SLOResponseData,), + "errors": ([str],), + } + attribute_map = { + "data": "data", + "errors": "errors", + } + + def __init__(self_, data: Union[SLOResponseData, UnsetType]=unset, errors: Union[List[str], UnsetType]=unset, **kwargs): + """ + A service level objective response containing a single service level objective. + + :param data: A service level objective object includes a service level indicator, thresholds + for one or more timeframes, and metadata ( ``name`` , ``description`` , ``tags`` , etc.). + :type data: SLOResponseData, optional + + :param errors: An array of error messages. Each endpoint documents how/whether this field is + used. + :type errors: [str], optional + """ + if data is not unset: + kwargs["data"] = data + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_response_data.py b/datadog_api_client/v1/model/slo_response_data.py new file mode 100644 index 0000000000..d77de71201 --- /dev/null +++ b/datadog_api_client/v1/model/slo_response_data.py @@ -0,0 +1,216 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.service_level_objective_query import ServiceLevelObjectiveQuery + from datadog_api_client.v1.model.slo_sli_spec import SLOSliSpec + from datadog_api_client.v1.model.slo_threshold import SLOThreshold + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + from datadog_api_client.v1.model.slo_type import SLOType + from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec + +class SLOResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.service_level_objective_query import ServiceLevelObjectiveQuery + from datadog_api_client.v1.model.slo_sli_spec import SLOSliSpec + from datadog_api_client.v1.model.slo_threshold import SLOThreshold + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + from datadog_api_client.v1.model.slo_type import SLOType + return { + "configured_alert_ids": ([int],), + "created_at": (int,), + "creator": (Creator,), + "description": (str, none_type), + "groups": ([str],), + "id": (str,), + "modified_at": (int,), + "monitor_ids": ([int],), + "monitor_tags": ([str],), + "name": (str,), + "query": (ServiceLevelObjectiveQuery,), + "sli_specification": (SLOSliSpec,), + "tags": ([str],), + "target_threshold": (float,), + "thresholds": ([SLOThreshold],), + "timeframe": (SLOTimeframe,), + "type": (SLOType,), + "warning_threshold": (float,), + } + attribute_map = { + "configured_alert_ids": "configured_alert_ids", + "created_at": "created_at", + "creator": "creator", + "description": "description", + "groups": "groups", + "id": "id", + "modified_at": "modified_at", + "monitor_ids": "monitor_ids", + "monitor_tags": "monitor_tags", + "name": "name", + "query": "query", + "sli_specification": "sli_specification", + "tags": "tags", + "target_threshold": "target_threshold", + "thresholds": "thresholds", + "timeframe": "timeframe", + "type": "type", + "warning_threshold": "warning_threshold", + } + read_only_vars = { + "created_at", + "creator", + "id", + "modified_at", + } + + def __init__(self_, configured_alert_ids: Union[List[int], UnsetType]=unset, created_at: Union[int, UnsetType]=unset, creator: Union[Creator, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, groups: Union[List[str], UnsetType]=unset, id: Union[str, UnsetType]=unset, modified_at: Union[int, UnsetType]=unset, monitor_ids: Union[List[int], UnsetType]=unset, monitor_tags: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[ServiceLevelObjectiveQuery, UnsetType]=unset, sli_specification: Union[SLOSliSpec, SLOTimeSliceSpec, SLOCountSpec, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, target_threshold: Union[float, UnsetType]=unset, thresholds: Union[List[SLOThreshold], UnsetType]=unset, timeframe: Union[SLOTimeframe, UnsetType]=unset, type: Union[SLOType, UnsetType]=unset, warning_threshold: Union[float, UnsetType]=unset, **kwargs): + """ + A service level objective object includes a service level indicator, thresholds + for one or more timeframes, and metadata ( ``name`` , ``description`` , ``tags`` , etc.). + + :param configured_alert_ids: A list of SLO monitors IDs that reference this SLO. This field is returned only when ``with_configured_alert_ids`` parameter is true in query. + :type configured_alert_ids: [int], optional + + :param created_at: Creation timestamp (UNIX time in seconds) + + Always included in service level objective responses. + :type created_at: int, optional + + :param creator: Object describing the creator of the shared element. + :type creator: Creator, optional + + :param description: A user-defined description of the service level objective. + + Always included in service level objective responses (but may be ``null`` ). + Optional in create/update requests. + :type description: str, none_type, optional + + :param groups: A list of (up to 20) monitor groups that narrow the scope of a monitor service level objective. + + Included in service level objective responses if it is not empty. Optional in + create/update requests for monitor service level objectives, but may only be + used when then length of the ``monitor_ids`` field is one. + :type groups: [str], optional + + :param id: A unique identifier for the service level objective object. + + Always included in service level objective responses. + :type id: str, optional + + :param modified_at: Modification timestamp (UNIX time in seconds) + + Always included in service level objective responses. + :type modified_at: int, optional + + :param monitor_ids: A list of monitor ids that defines the scope of a monitor service level + objective. **Required if type is monitor**. + :type monitor_ids: [int], optional + + :param monitor_tags: The union of monitor tags for all monitors referenced by the ``monitor_ids`` + field. + Always included in service level objective responses for monitor service level + objectives (but may be empty). Ignored in create/update requests. Does not + affect which monitors are included in the service level objective (that is + determined entirely by the ``monitor_ids`` field). + :type monitor_tags: [str], optional + + :param name: The name of the service level objective object. + :type name: str, optional + + :param query: A count-based (metric) SLO query. This field is superseded by ``sli_specification`` but is retained for backwards compatibility. Note that Datadog only allows the sum by aggregator + to be used because this will sum up all request counts instead of averaging them, or taking the max or + min of all of those requests. + :type query: ServiceLevelObjectiveQuery, optional + + :param sli_specification: A generic SLI specification. This is used for time-slice and count-based (metric) SLOs only. + :type sli_specification: SLOSliSpec, optional + + :param tags: A list of tags associated with this service level objective. + Always included in service level objective responses (but may be empty). + Optional in create/update requests. + :type tags: [str], optional + + :param target_threshold: The target threshold such that when the service level indicator is above this + threshold over the given timeframe, the objective is being met. + :type target_threshold: float, optional + + :param thresholds: The thresholds (timeframes and associated targets) for this service level + objective object. + :type thresholds: [SLOThreshold], optional + + :param timeframe: The SLO time window options. Note that "custom" is not a valid option for creating + or updating SLOs. It is only used when querying SLO history over custom timeframes. + :type timeframe: SLOTimeframe, optional + + :param type: The type of the service level objective. + :type type: SLOType, optional + + :param warning_threshold: The optional warning threshold such that when the service level indicator is + below this value for the given threshold, but above the target threshold, the + objective appears in a "warning" state. This value must be greater than the target + threshold. + :type warning_threshold: float, optional + """ + if configured_alert_ids is not unset: + kwargs["configured_alert_ids"] = configured_alert_ids + if created_at is not unset: + kwargs["created_at"] = created_at + if creator is not unset: + kwargs["creator"] = creator + if description is not unset: + kwargs["description"] = description + if groups is not unset: + kwargs["groups"] = groups + if id is not unset: + kwargs["id"] = id + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if monitor_ids is not unset: + kwargs["monitor_ids"] = monitor_ids + if monitor_tags is not unset: + kwargs["monitor_tags"] = monitor_tags + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if sli_specification is not unset: + kwargs["sli_specification"] = sli_specification + if tags is not unset: + kwargs["tags"] = tags + if target_threshold is not unset: + kwargs["target_threshold"] = target_threshold + if thresholds is not unset: + kwargs["thresholds"] = thresholds + if timeframe is not unset: + kwargs["timeframe"] = timeframe + if type is not unset: + kwargs["type"] = type + if warning_threshold is not unset: + kwargs["warning_threshold"] = warning_threshold + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_sli_spec.py b/datadog_api_client/v1/model/slo_sli_spec.py new file mode 100644 index 0000000000..8a1de45941 --- /dev/null +++ b/datadog_api_client/v1/model/slo_sli_spec.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOSliSpec(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A generic SLI specification. This is used for time-slice and count-based (metric) SLOs only. + + :param time_slice: The time-slice condition, composed of 3 parts: 1. the metric timeseries query, 2. the comparator, + and 3. the threshold. Optionally, a fourth part, the query interval, can be provided. + :type time_slice: SLOTimeSliceCondition + + :param count: A count-based (metric) SLI specification, composed of three parts: the good events formula, + the bad or total events formula, and the underlying queries. + Exactly one of `total_events_formula` or `bad_events_formula` must be provided. + :type count: SLOCountDefinition + """ + 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.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec + return { + "oneOf": [ + SLOTimeSliceSpec, + SLOCountSpec, + ], + } diff --git a/datadog_api_client/v1/model/slo_state.py b/datadog_api_client/v1/model/slo_state.py new file mode 100644 index 0000000000..e3b0a58230 --- /dev/null +++ b/datadog_api_client/v1/model/slo_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOState(ModelSimple): + """ + State of the SLO. + + :param value: Must be one of ["breached", "warning", "ok", "no_data"]. + :type value: str + """ + + allowed_values = { + "breached", + "warning", + "ok", + "no_data", + } + BREACHED: ClassVar["SLOState"] + WARNING: ClassVar["SLOState"] + OK: ClassVar["SLOState"] + NO_DATA: ClassVar["SLOState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOState.BREACHED = SLOState("breached") +SLOState.WARNING = SLOState("warning") +SLOState.OK = SLOState("ok") +SLOState.NO_DATA = SLOState("no_data") diff --git a/datadog_api_client/v1/model/slo_status.py b/datadog_api_client/v1/model/slo_status.py new file mode 100644 index 0000000000..947b6cd3a4 --- /dev/null +++ b/datadog_api_client/v1/model/slo_status.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_raw_error_budget_remaining import SLORawErrorBudgetRemaining + from datadog_api_client.v1.model.slo_state import SLOState + +class SLOStatus(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_raw_error_budget_remaining import SLORawErrorBudgetRemaining + from datadog_api_client.v1.model.slo_state import SLOState + return { + "calculation_error": (str, none_type), + "error_budget_remaining": (float, none_type), + "indexed_at": (int,), + "raw_error_budget_remaining": (SLORawErrorBudgetRemaining,), + "sli": (float, none_type), + "span_precision": (int, none_type), + "state": (SLOState,), + } + attribute_map = { + "calculation_error": "calculation_error", + "error_budget_remaining": "error_budget_remaining", + "indexed_at": "indexed_at", + "raw_error_budget_remaining": "raw_error_budget_remaining", + "sli": "sli", + "span_precision": "span_precision", + "state": "state", + } + + def __init__(self_, calculation_error: Union[str, none_type, UnsetType]=unset, error_budget_remaining: Union[float, none_type, UnsetType]=unset, indexed_at: Union[int, UnsetType]=unset, raw_error_budget_remaining: Union[SLORawErrorBudgetRemaining, none_type, UnsetType]=unset, sli: Union[float, none_type, UnsetType]=unset, span_precision: Union[int, none_type, UnsetType]=unset, state: Union[SLOState, UnsetType]=unset, **kwargs): + """ + Status of the SLO's primary timeframe. + + :param calculation_error: Error message if SLO status or error budget could not be calculated. + :type calculation_error: str, none_type, optional + + :param error_budget_remaining: Remaining error budget of the SLO in percentage. + :type error_budget_remaining: float, none_type, optional + + :param indexed_at: timestamp (UNIX time in seconds) of when the SLO status and error budget + were calculated. + :type indexed_at: int, optional + + :param raw_error_budget_remaining: Error budget remaining for an SLO. + :type raw_error_budget_remaining: SLORawErrorBudgetRemaining, none_type, optional + + :param sli: The current service level indicator (SLI) of the SLO, also known as 'status'. This is a percentage value from 0-100 (inclusive). + :type sli: float, none_type, optional + + :param span_precision: The number of decimal places the SLI value is accurate to. + :type span_precision: int, none_type, optional + + :param state: State of the SLO. + :type state: SLOState, optional + """ + if calculation_error is not unset: + kwargs["calculation_error"] = calculation_error + if error_budget_remaining is not unset: + kwargs["error_budget_remaining"] = error_budget_remaining + if indexed_at is not unset: + kwargs["indexed_at"] = indexed_at + if raw_error_budget_remaining is not unset: + kwargs["raw_error_budget_remaining"] = raw_error_budget_remaining + if sli is not unset: + kwargs["sli"] = sli + if span_precision is not unset: + kwargs["span_precision"] = span_precision + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/slo_threshold.py b/datadog_api_client/v1/model/slo_threshold.py new file mode 100644 index 0000000000..922341653e --- /dev/null +++ b/datadog_api_client/v1/model/slo_threshold.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + +class SLOThreshold(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe + return { + "target": (float,), + "target_display": (str,), + "timeframe": (SLOTimeframe,), + "warning": (float,), + "warning_display": (str,), + } + attribute_map = { + "target": "target", + "target_display": "target_display", + "timeframe": "timeframe", + "warning": "warning", + "warning_display": "warning_display", + } + + def __init__(self_, target: float, timeframe: SLOTimeframe, target_display: Union[str, UnsetType]=unset, warning: Union[float, UnsetType]=unset, warning_display: Union[str, UnsetType]=unset, **kwargs): + """ + SLO thresholds (target and optionally warning) for a single time window. + + :param target: The target value for the service level indicator within the corresponding + timeframe. + :type target: float + + :param target_display: A string representation of the target that indicates its precision. + It uses trailing zeros to show significant decimal places (for example ``98.00`` ). + + Always included in service level objective responses. Ignored in + create/update requests. + :type target_display: str, optional + + :param timeframe: The SLO time window options. Note that "custom" is not a valid option for creating + or updating SLOs. It is only used when querying SLO history over custom timeframes. + :type timeframe: SLOTimeframe + + :param warning: The warning value for the service level objective. + :type warning: float, optional + + :param warning_display: A string representation of the warning target (see the description of + the ``target_display`` field for details). + + Included in service level objective responses if a warning target exists. + Ignored in create/update requests. + :type warning_display: str, optional + """ + if target_display is not unset: + kwargs["target_display"] = target_display + if warning is not unset: + kwargs["warning"] = warning + if warning_display is not unset: + kwargs["warning_display"] = warning_display + super().__init__(kwargs) + + + self_.target = target + self_.timeframe = timeframe diff --git a/datadog_api_client/v1/model/slo_time_slice_comparator.py b/datadog_api_client/v1/model/slo_time_slice_comparator.py new file mode 100644 index 0000000000..7c2fb94bca --- /dev/null +++ b/datadog_api_client/v1/model/slo_time_slice_comparator.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOTimeSliceComparator(ModelSimple): + """ + The comparator used to compare the SLI value to the threshold. + + :param value: Must be one of [">", ">=", "<", "<="]. + :type value: str + """ + + allowed_values = { + ">", + ">=", + "<", + "<=", + } + GREATER: ClassVar["SLOTimeSliceComparator"] + GREATER_EQUAL: ClassVar["SLOTimeSliceComparator"] + LESS: ClassVar["SLOTimeSliceComparator"] + LESS_EQUAL: ClassVar["SLOTimeSliceComparator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOTimeSliceComparator.GREATER = SLOTimeSliceComparator(">") +SLOTimeSliceComparator.GREATER_EQUAL = SLOTimeSliceComparator(">=") +SLOTimeSliceComparator.LESS = SLOTimeSliceComparator("<") +SLOTimeSliceComparator.LESS_EQUAL = SLOTimeSliceComparator("<=") diff --git a/datadog_api_client/v1/model/slo_time_slice_condition.py b/datadog_api_client/v1/model/slo_time_slice_condition.py new file mode 100644 index 0000000000..73135e3da6 --- /dev/null +++ b/datadog_api_client/v1/model/slo_time_slice_condition.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_time_slice_comparator import SLOTimeSliceComparator + from datadog_api_client.v1.model.slo_time_slice_query import SLOTimeSliceQuery + from datadog_api_client.v1.model.slo_time_slice_interval import SLOTimeSliceInterval + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + +class SLOTimeSliceCondition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_time_slice_comparator import SLOTimeSliceComparator + from datadog_api_client.v1.model.slo_time_slice_query import SLOTimeSliceQuery + from datadog_api_client.v1.model.slo_time_slice_interval import SLOTimeSliceInterval + return { + "comparator": (SLOTimeSliceComparator,), + "query": (SLOTimeSliceQuery,), + "query_interval_seconds": (SLOTimeSliceInterval,), + "threshold": (float,), + } + attribute_map = { + "comparator": "comparator", + "query": "query", + "query_interval_seconds": "query_interval_seconds", + "threshold": "threshold", + } + + def __init__(self_, comparator: SLOTimeSliceComparator, query: SLOTimeSliceQuery, threshold: float, query_interval_seconds: Union[SLOTimeSliceInterval, UnsetType]=unset, **kwargs): + """ + The time-slice condition, composed of 3 parts: 1. the metric timeseries query, 2. the comparator, + and 3. the threshold. Optionally, a fourth part, the query interval, can be provided. + + :param comparator: The comparator used to compare the SLI value to the threshold. + :type comparator: SLOTimeSliceComparator + + :param query: The queries and formula used to calculate the SLI value. + :type query: SLOTimeSliceQuery + + :param query_interval_seconds: The interval used when querying data, which defines the size of a time slice. + Two values are allowed: 60 (1 minute) and 300 (5 minutes). + If not provided, the value defaults to 300 (5 minutes). + :type query_interval_seconds: SLOTimeSliceInterval, optional + + :param threshold: The threshold value to which each SLI value will be compared. + :type threshold: float + """ + if query_interval_seconds is not unset: + kwargs["query_interval_seconds"] = query_interval_seconds + super().__init__(kwargs) + + + self_.comparator = comparator + self_.query = query + self_.threshold = threshold diff --git a/datadog_api_client/v1/model/slo_time_slice_interval.py b/datadog_api_client/v1/model/slo_time_slice_interval.py new file mode 100644 index 0000000000..11d02c92fa --- /dev/null +++ b/datadog_api_client/v1/model/slo_time_slice_interval.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOTimeSliceInterval(ModelSimple): + """ + The interval used when querying data, which defines the size of a time slice. + Two values are allowed: 60 (1 minute) and 300 (5 minutes). + If not provided, the value defaults to 300 (5 minutes). + + :param value: Must be one of [60, 300]. + :type value: int + """ + + allowed_values = { + 60, + 300, + } + ONE_MINUTE: ClassVar["SLOTimeSliceInterval"] + FIVE_MINUTES: ClassVar["SLOTimeSliceInterval"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SLOTimeSliceInterval.ONE_MINUTE = SLOTimeSliceInterval(60) +SLOTimeSliceInterval.FIVE_MINUTES = SLOTimeSliceInterval(300) diff --git a/datadog_api_client/v1/model/slo_time_slice_query.py b/datadog_api_client/v1/model/slo_time_slice_query.py new file mode 100644 index 0000000000..49ea9fbfb0 --- /dev/null +++ b/datadog_api_client/v1/model/slo_time_slice_query.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_formula import SLOFormula + from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + +class SLOTimeSliceQuery(ModelNormal): + validations = { + "formulas": { + "max_items": 1, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_formula import SLOFormula + from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition + return { + "formulas": ([SLOFormula],), + "queries": ([SLODataSourceQueryDefinition],), + } + attribute_map = { + "formulas": "formulas", + "queries": "queries", + } + + def __init__(self_, formulas: List[SLOFormula], queries: List[Union[SLODataSourceQueryDefinition, FormulaAndFunctionMetricQueryDefinition]], **kwargs): + """ + The queries and formula used to calculate the SLI value. + + :param formulas: A list that contains exactly one formula, as only a single formula may be used in a time-slice SLO. + :type formulas: [SLOFormula] + + :param queries: A list of queries that are used to calculate the SLI value. + :type queries: [SLODataSourceQueryDefinition] + """ + super().__init__(kwargs) + + + self_.formulas = formulas + self_.queries = queries diff --git a/datadog_api_client/v1/model/slo_time_slice_spec.py b/datadog_api_client/v1/model/slo_time_slice_spec.py new file mode 100644 index 0000000000..35aa27a5e9 --- /dev/null +++ b/datadog_api_client/v1/model/slo_time_slice_spec.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_time_slice_condition import SLOTimeSliceCondition + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + +class SLOTimeSliceSpec(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_time_slice_condition import SLOTimeSliceCondition + return { + "time_slice": (SLOTimeSliceCondition,), + } + attribute_map = { + "time_slice": "time_slice", + } + + def __init__(self_, time_slice: SLOTimeSliceCondition, **kwargs): + """ + A time-slice SLI specification. + + :param time_slice: The time-slice condition, composed of 3 parts: 1. the metric timeseries query, 2. the comparator, + and 3. the threshold. Optionally, a fourth part, the query interval, can be provided. + :type time_slice: SLOTimeSliceCondition + """ + super().__init__(kwargs) + + + self_.time_slice = time_slice diff --git a/datadog_api_client/v1/model/slo_timeframe.py b/datadog_api_client/v1/model/slo_timeframe.py new file mode 100644 index 0000000000..ef737deda6 --- /dev/null +++ b/datadog_api_client/v1/model/slo_timeframe.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOTimeframe(ModelSimple): + """ + The SLO time window options. Note that "custom" is not a valid option for creating + or updating SLOs. It is only used when querying SLO history over custom timeframes. + + :param value: Must be one of ["7d", "30d", "90d", "custom"]. + :type value: str + """ + + allowed_values = { + "7d", + "30d", + "90d", + "custom", + } + SEVEN_DAYS: ClassVar["SLOTimeframe"] + THIRTY_DAYS: ClassVar["SLOTimeframe"] + NINETY_DAYS: ClassVar["SLOTimeframe"] + CUSTOM: ClassVar["SLOTimeframe"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOTimeframe.SEVEN_DAYS = SLOTimeframe("7d") +SLOTimeframe.THIRTY_DAYS = SLOTimeframe("30d") +SLOTimeframe.NINETY_DAYS = SLOTimeframe("90d") +SLOTimeframe.CUSTOM = SLOTimeframe("custom") diff --git a/datadog_api_client/v1/model/slo_type.py b/datadog_api_client/v1/model/slo_type.py new file mode 100644 index 0000000000..7596b88af6 --- /dev/null +++ b/datadog_api_client/v1/model/slo_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOType(ModelSimple): + """ + The type of the service level objective. + + :param value: Must be one of ["metric", "monitor", "time_slice"]. + :type value: str + """ + + allowed_values = { + "metric", + "monitor", + "time_slice", + } + METRIC: ClassVar["SLOType"] + MONITOR: ClassVar["SLOType"] + TIME_SLICE: ClassVar["SLOType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOType.METRIC = SLOType("metric") +SLOType.MONITOR = SLOType("monitor") +SLOType.TIME_SLICE = SLOType("time_slice") diff --git a/datadog_api_client/v1/model/slo_type_numeric.py b/datadog_api_client/v1/model/slo_type_numeric.py new file mode 100644 index 0000000000..0bf1e283b1 --- /dev/null +++ b/datadog_api_client/v1/model/slo_type_numeric.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOTypeNumeric(ModelSimple): + """ + A numeric representation of the type of the service level objective (`0` for + monitor, `1` for metric). Always included in service level objective responses. + Ignored in create/update requests. + + :param value: Must be one of [0, 1, 2]. + :type value: int + """ + + allowed_values = { + 0, + 1, + 2, + } + MONITOR: ClassVar["SLOTypeNumeric"] + METRIC: ClassVar["SLOTypeNumeric"] + TIME_SLICE: ClassVar["SLOTypeNumeric"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SLOTypeNumeric.MONITOR = SLOTypeNumeric(0) +SLOTypeNumeric.METRIC = SLOTypeNumeric(1) +SLOTypeNumeric.TIME_SLICE = SLOTypeNumeric(2) diff --git a/datadog_api_client/v1/model/slo_widget_definition.py b/datadog_api_client/v1/model/slo_widget_definition.py new file mode 100644 index 0000000000..4ed2db6a77 --- /dev/null +++ b/datadog_api_client/v1/model/slo_widget_definition.py @@ -0,0 +1,131 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_time_windows import WidgetTimeWindows + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.slo_widget_definition_type import SLOWidgetDefinitionType + from datadog_api_client.v1.model.widget_view_mode import WidgetViewMode + +class SLOWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_time_windows import WidgetTimeWindows + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.slo_widget_definition_type import SLOWidgetDefinitionType + from datadog_api_client.v1.model.widget_view_mode import WidgetViewMode + return { + "additional_query_filters": (str,), + "description": (str,), + "global_time_target": (str,), + "show_error_budget": (bool,), + "slo_id": (str,), + "time_windows": ([WidgetTimeWindows],), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (SLOWidgetDefinitionType,), + "view_mode": (WidgetViewMode,), + "view_type": (str,), + } + attribute_map = { + "additional_query_filters": "additional_query_filters", + "description": "description", + "global_time_target": "global_time_target", + "show_error_budget": "show_error_budget", + "slo_id": "slo_id", + "time_windows": "time_windows", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "view_mode": "view_mode", + "view_type": "view_type", + } + + def __init__(self_, type: SLOWidgetDefinitionType, additional_query_filters: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, global_time_target: Union[str, UnsetType]=unset, show_error_budget: Union[bool, UnsetType]=unset, slo_id: Union[str, UnsetType]=unset, time_windows: Union[List[WidgetTimeWindows], UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, view_mode: Union[WidgetViewMode, UnsetType]=unset, **kwargs): + """ + Use the SLO and uptime widget to track your SLOs (Service Level Objectives) and uptime on dashboards. + + :param additional_query_filters: Additional filters applied to the SLO query. + :type additional_query_filters: str, optional + + :param description: The description of the widget. + :type description: str, optional + + :param global_time_target: Defined global time target. + :type global_time_target: str, optional + + :param show_error_budget: Defined error budget. + :type show_error_budget: bool, optional + + :param slo_id: ID of the SLO displayed. + :type slo_id: str, optional + + :param time_windows: Times being monitored. + :type time_windows: [WidgetTimeWindows], optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the SLO widget. + :type type: SLOWidgetDefinitionType + + :param view_mode: Define how you want the SLO to be displayed. + :type view_mode: WidgetViewMode, optional + + :param view_type: Type of view displayed by the widget. + :type view_type: str + """ + if additional_query_filters is not unset: + kwargs["additional_query_filters"] = additional_query_filters + if description is not unset: + kwargs["description"] = description + if global_time_target is not unset: + kwargs["global_time_target"] = global_time_target + if show_error_budget is not unset: + kwargs["show_error_budget"] = show_error_budget + if slo_id is not unset: + kwargs["slo_id"] = slo_id + if time_windows is not unset: + kwargs["time_windows"] = time_windows + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + if view_mode is not unset: + kwargs["view_mode"] = view_mode + super().__init__(kwargs) + view_type = kwargs.get("view_type", "detail") + + + self_.type = type + self_.view_type = view_type diff --git a/datadog_api_client/v1/model/slo_widget_definition_type.py b/datadog_api_client/v1/model/slo_widget_definition_type.py new file mode 100644 index 0000000000..e5849ab624 --- /dev/null +++ b/datadog_api_client/v1/model/slo_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOWidgetDefinitionType(ModelSimple): + """ + Type of the SLO widget. + + :param value: If omitted defaults to "slo". Must be one of ["slo"]. + :type value: str + """ + + allowed_values = { + "slo", + } + SLO: ClassVar["SLOWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOWidgetDefinitionType.SLO = SLOWidgetDefinitionType("slo") diff --git a/datadog_api_client/v1/model/split_config.py b/datadog_api_client/v1/model/split_config.py new file mode 100644 index 0000000000..e23da7ef8c --- /dev/null +++ b/datadog_api_client/v1/model/split_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.split_sort import SplitSort + from datadog_api_client.v1.model.split_dimension import SplitDimension + from datadog_api_client.v1.model.split_vector_entry_item import SplitVectorEntryItem + +class SplitConfig(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 500, + "inclusive_minimum": 1, + }, + "split_dimensions": { + "max_items": 1, + "min_items": 1, + }, + "static_splits": { + "max_items": 500, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.split_sort import SplitSort + from datadog_api_client.v1.model.split_dimension import SplitDimension + from datadog_api_client.v1.model.split_vector_entry_item import SplitVectorEntryItem + return { + "limit": (int,), + "sort": (SplitSort,), + "split_dimensions": ([SplitDimension],), + "static_splits": ([[SplitVectorEntryItem]],), + } + attribute_map = { + "limit": "limit", + "sort": "sort", + "split_dimensions": "split_dimensions", + "static_splits": "static_splits", + } + + def __init__(self_, limit: int, sort: SplitSort, split_dimensions: List[SplitDimension], static_splits: Union[List[List[SplitVectorEntryItem]], UnsetType]=unset, **kwargs): + """ + Encapsulates all user choices about how to split a graph. + + :param limit: Maximum number of graphs to display in the widget. + :type limit: int + + :param sort: Controls the order in which graphs appear in the split. + :type sort: SplitSort + + :param split_dimensions: The dimension(s) on which to split the graph + :type split_dimensions: [SplitDimension] + + :param static_splits: Manual selection of tags making split graph widget static + :type static_splits: [[SplitVectorEntryItem]], optional + """ + if static_splits is not unset: + kwargs["static_splits"] = static_splits + super().__init__(kwargs) + + + self_.limit = limit + self_.sort = sort + self_.split_dimensions = split_dimensions diff --git a/datadog_api_client/v1/model/split_config_sort_compute.py b/datadog_api_client/v1/model/split_config_sort_compute.py new file mode 100644 index 0000000000..8b04d81c0b --- /dev/null +++ b/datadog_api_client/v1/model/split_config_sort_compute.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SplitConfigSortCompute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aggregation": (str,), + "metric": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + } + + def __init__(self_, aggregation: str, metric: str, **kwargs): + """ + Defines the metric and aggregation used as the sort value. + + :param aggregation: How to aggregate the sort metric for the purposes of ordering. + :type aggregation: str + + :param metric: The metric to use for sorting graphs. + :type metric: str + """ + super().__init__(kwargs) + + + self_.aggregation = aggregation + self_.metric = metric diff --git a/datadog_api_client/v1/model/split_dimension.py b/datadog_api_client/v1/model/split_dimension.py new file mode 100644 index 0000000000..c8728563be --- /dev/null +++ b/datadog_api_client/v1/model/split_dimension.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SplitDimension(ModelNormal): + @cached_property + def openapi_types(_): + return { + "one_graph_per": (str,), + } + attribute_map = { + "one_graph_per": "one_graph_per", + } + + def __init__(self_, one_graph_per: str, **kwargs): + """ + The property by which the graph splits + + :param one_graph_per: The system interprets this attribute differently depending on the data source of the query being split. For metrics, it's a tag. For the events platform, it's an attribute or tag. + :type one_graph_per: str + """ + super().__init__(kwargs) + + + self_.one_graph_per = one_graph_per diff --git a/datadog_api_client/v1/model/split_graph_source_widget_definition.py b/datadog_api_client/v1/model/split_graph_source_widget_definition.py new file mode 100644 index 0000000000..d6b4796be6 --- /dev/null +++ b/datadog_api_client/v1/model/split_graph_source_widget_definition.py @@ -0,0 +1,160 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SplitGraphSourceWidgetDefinition(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The original widget we are splitting on. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param requests: List of bar chart widget requests. + :type requests: [BarChartWidgetRequest] + + :param style: Style customization for a bar chart widget. + :type style: BarChartWidgetStyle, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the bar chart widget. + :type type: BarChartWidgetDefinitionType + + :param view: The view of the world that the map should render. + :type view: GeomapWidgetDefinitionView + + :param autoscale: Whether to use auto-scaling or not. + :type autoscale: bool, optional + + :param custom_unit: Display a unit of your choice on the widget. + :type custom_unit: str, optional + + :param precision: Number of decimals to show. If not defined, the widget uses the raw value. + :type precision: int, optional + + :param text_align: How to align the text on the widget. + :type text_align: WidgetTextAlign, optional + + :param timeseries_background: Set a timeseries on the widget background. + :type timeseries_background: TimeseriesBackground, optional + + :param color_by_groups: List of groups used for colors. + :type color_by_groups: [str], optional + + :param xaxis: Axis controls for the widget. + :type xaxis: WidgetAxis, optional + + :param yaxis: Axis controls for the widget. + :type yaxis: WidgetAxis, optional + + :param hide_total: Show the total value in this widget. + :type hide_total: bool, optional + + :param legend: Configuration of the legend. + :type legend: SunburstWidgetLegend, optional + + :param has_search_bar: Controls the display of the search bar. + :type has_search_bar: TableWidgetHasSearchBar, optional + + :param events: List of widget events. Deprecated - Use `overlay` request type instead. + :type events: [WidgetEvent], optional + + :param legend_columns: Columns displayed in the legend. + :type legend_columns: [TimeseriesWidgetLegendColumn], optional + + :param legend_layout: Layout of the legend. + :type legend_layout: TimeseriesWidgetLegendLayout, optional + + :param legend_size: Available legend sizes for a widget. Should be one of "0", "2", "4", "8", "16", or "auto". + :type legend_size: str, optional + + :param markers: List of markers. + :type markers: [WidgetMarker], optional + + :param right_yaxis: Axis controls for the widget. + :type right_yaxis: WidgetAxis, optional + + :param show_legend: (screenboard only) Show the legend for this widget. + :type show_legend: bool, optional + + :param color_by: (deprecated) The attribute formerly used to determine color in the widget. + :type color_by: TreeMapColorBy, optional + + :param group_by: (deprecated) The attribute formerly used to group elements in the widget. + :type group_by: TreeMapGroupBy, optional + + :param size_by: (deprecated) The attribute formerly used to determine size in the widget. + :type size_by: TreeMapSizeBy, 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.v1.model.bar_chart_widget_definition import BarChartWidgetDefinition + from datadog_api_client.v1.model.change_widget_definition import ChangeWidgetDefinition + from datadog_api_client.v1.model.geomap_widget_definition import GeomapWidgetDefinition + from datadog_api_client.v1.model.query_value_widget_definition import QueryValueWidgetDefinition + from datadog_api_client.v1.model.scatter_plot_widget_definition import ScatterPlotWidgetDefinition + from datadog_api_client.v1.model.sunburst_widget_definition import SunburstWidgetDefinition + from datadog_api_client.v1.model.table_widget_definition import TableWidgetDefinition + from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition + from datadog_api_client.v1.model.toplist_widget_definition import ToplistWidgetDefinition + from datadog_api_client.v1.model.tree_map_widget_definition import TreeMapWidgetDefinition + return { + "oneOf": [ + BarChartWidgetDefinition, + ChangeWidgetDefinition, + GeomapWidgetDefinition, + QueryValueWidgetDefinition, + ScatterPlotWidgetDefinition, + SunburstWidgetDefinition, + TableWidgetDefinition, + TimeseriesWidgetDefinition, + ToplistWidgetDefinition, + TreeMapWidgetDefinition, + ], + } diff --git a/datadog_api_client/v1/model/split_graph_viz_size.py b/datadog_api_client/v1/model/split_graph_viz_size.py new file mode 100644 index 0000000000..80b407c8d5 --- /dev/null +++ b/datadog_api_client/v1/model/split_graph_viz_size.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SplitGraphVizSize(ModelSimple): + """ + Size of the individual graphs in the split. + + :param value: Must be one of ["xs", "sm", "md", "lg"]. + :type value: str + """ + + allowed_values = { + "xs", + "sm", + "md", + "lg", + } + XS: ClassVar["SplitGraphVizSize"] + SM: ClassVar["SplitGraphVizSize"] + MD: ClassVar["SplitGraphVizSize"] + LG: ClassVar["SplitGraphVizSize"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SplitGraphVizSize.XS = SplitGraphVizSize("xs") +SplitGraphVizSize.SM = SplitGraphVizSize("sm") +SplitGraphVizSize.MD = SplitGraphVizSize("md") +SplitGraphVizSize.LG = SplitGraphVizSize("lg") diff --git a/datadog_api_client/v1/model/split_graph_widget_definition.py b/datadog_api_client/v1/model/split_graph_widget_definition.py new file mode 100644 index 0000000000..c5317a35a0 --- /dev/null +++ b/datadog_api_client/v1/model/split_graph_widget_definition.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.split_graph_viz_size import SplitGraphVizSize + from datadog_api_client.v1.model.split_graph_source_widget_definition import SplitGraphSourceWidgetDefinition + from datadog_api_client.v1.model.split_config import SplitConfig + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.split_graph_widget_definition_type import SplitGraphWidgetDefinitionType + from datadog_api_client.v1.model.bar_chart_widget_definition import BarChartWidgetDefinition + from datadog_api_client.v1.model.change_widget_definition import ChangeWidgetDefinition + from datadog_api_client.v1.model.geomap_widget_definition import GeomapWidgetDefinition + from datadog_api_client.v1.model.query_value_widget_definition import QueryValueWidgetDefinition + from datadog_api_client.v1.model.scatter_plot_widget_definition import ScatterPlotWidgetDefinition + from datadog_api_client.v1.model.sunburst_widget_definition import SunburstWidgetDefinition + from datadog_api_client.v1.model.table_widget_definition import TableWidgetDefinition + from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition + from datadog_api_client.v1.model.toplist_widget_definition import ToplistWidgetDefinition + from datadog_api_client.v1.model.tree_map_widget_definition import TreeMapWidgetDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class SplitGraphWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.split_graph_viz_size import SplitGraphVizSize + from datadog_api_client.v1.model.split_graph_source_widget_definition import SplitGraphSourceWidgetDefinition + from datadog_api_client.v1.model.split_config import SplitConfig + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.split_graph_widget_definition_type import SplitGraphWidgetDefinitionType + return { + "has_uniform_y_axes": (bool,), + "size": (SplitGraphVizSize,), + "source_widget_definition": (SplitGraphSourceWidgetDefinition,), + "split_config": (SplitConfig,), + "time": (WidgetTime,), + "title": (str,), + "type": (SplitGraphWidgetDefinitionType,), + } + attribute_map = { + "has_uniform_y_axes": "has_uniform_y_axes", + "size": "size", + "source_widget_definition": "source_widget_definition", + "split_config": "split_config", + "time": "time", + "title": "title", + "type": "type", + } + + def __init__(self_, size: SplitGraphVizSize, source_widget_definition: Union[SplitGraphSourceWidgetDefinition, BarChartWidgetDefinition, ChangeWidgetDefinition, GeomapWidgetDefinition, QueryValueWidgetDefinition, ScatterPlotWidgetDefinition, SunburstWidgetDefinition, TableWidgetDefinition, TimeseriesWidgetDefinition, ToplistWidgetDefinition, TreeMapWidgetDefinition], split_config: SplitConfig, type: SplitGraphWidgetDefinitionType, has_uniform_y_axes: Union[bool, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + The split graph widget allows you to create repeating units of a graph - one for each value in a group (for example: one per service) + + :param has_uniform_y_axes: Normalize y axes across graphs + :type has_uniform_y_axes: bool, optional + + :param size: Size of the individual graphs in the split. + :type size: SplitGraphVizSize + + :param source_widget_definition: The original widget we are splitting on. + :type source_widget_definition: SplitGraphSourceWidgetDefinition + + :param split_config: Encapsulates all user choices about how to split a graph. + :type split_config: SplitConfig + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param type: Type of the split graph widget + :type type: SplitGraphWidgetDefinitionType + """ + if has_uniform_y_axes is not unset: + kwargs["has_uniform_y_axes"] = has_uniform_y_axes + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + + self_.size = size + self_.source_widget_definition = source_widget_definition + self_.split_config = split_config + self_.type = type diff --git a/datadog_api_client/v1/model/split_graph_widget_definition_type.py b/datadog_api_client/v1/model/split_graph_widget_definition_type.py new file mode 100644 index 0000000000..7b8e51ed97 --- /dev/null +++ b/datadog_api_client/v1/model/split_graph_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SplitGraphWidgetDefinitionType(ModelSimple): + """ + Type of the split graph widget + + :param value: If omitted defaults to "split_group". Must be one of ["split_group"]. + :type value: str + """ + + allowed_values = { + "split_group", + } + SPLIT_GROUP: ClassVar["SplitGraphWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SplitGraphWidgetDefinitionType.SPLIT_GROUP = SplitGraphWidgetDefinitionType("split_group") diff --git a/datadog_api_client/v1/model/split_sort.py b/datadog_api_client/v1/model/split_sort.py new file mode 100644 index 0000000000..d801b989e2 --- /dev/null +++ b/datadog_api_client/v1/model/split_sort.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.split_config_sort_compute import SplitConfigSortCompute + from datadog_api_client.v1.model.widget_sort import WidgetSort + +class SplitSort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.split_config_sort_compute import SplitConfigSortCompute + from datadog_api_client.v1.model.widget_sort import WidgetSort + return { + "compute": (SplitConfigSortCompute,), + "order": (WidgetSort,), + } + attribute_map = { + "compute": "compute", + "order": "order", + } + + def __init__(self_, order: WidgetSort, compute: Union[SplitConfigSortCompute, UnsetType]=unset, **kwargs): + """ + Controls the order in which graphs appear in the split. + + :param compute: Defines the metric and aggregation used as the sort value. + :type compute: SplitConfigSortCompute, optional + + :param order: Widget sorting methods. + :type order: WidgetSort + """ + if compute is not unset: + kwargs["compute"] = compute + super().__init__(kwargs) + + + self_.order = order diff --git a/datadog_api_client/v1/model/split_vector_entry_item.py b/datadog_api_client/v1/model/split_vector_entry_item.py new file mode 100644 index 0000000000..189dd3cb38 --- /dev/null +++ b/datadog_api_client/v1/model/split_vector_entry_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SplitVectorEntryItem(ModelNormal): + validations = { + "tag_key": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "tag_key": (str,), + "tag_values": ([str],), + } + attribute_map = { + "tag_key": "tag_key", + "tag_values": "tag_values", + } + + def __init__(self_, tag_key: str, tag_values: List[str], **kwargs): + """ + The split graph list contains a graph for each value of the split dimension. + + :param tag_key: The tag key. + :type tag_key: str + + :param tag_values: The tag values. + :type tag_values: [str] + """ + super().__init__(kwargs) + + + self_.tag_key = tag_key + self_.tag_values = tag_values diff --git a/datadog_api_client/v1/model/successful_signal_update_response.py b/datadog_api_client/v1/model/successful_signal_update_response.py new file mode 100644 index 0000000000..cceaf508cf --- /dev/null +++ b/datadog_api_client/v1/model/successful_signal_update_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SuccessfulSignalUpdateResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "status": (str,), + } + attribute_map = { + "status": "status", + } + + def __init__(self_, status: Union[str, UnsetType]=unset, **kwargs): + """ + Updated signal data following a successfully performed update. + + :param status: Status of the response. + :type status: str, optional + """ + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/sunburst_widget_definition.py b/datadog_api_client/v1/model/sunburst_widget_definition.py new file mode 100644 index 0000000000..424098b3ad --- /dev/null +++ b/datadog_api_client/v1/model/sunburst_widget_definition.py @@ -0,0 +1,145 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.sunburst_widget_legend import SunburstWidgetLegend + from datadog_api_client.v1.model.sunburst_widget_request import SunburstWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.sunburst_widget_definition_type import SunburstWidgetDefinitionType + from datadog_api_client.v1.model.sunburst_widget_legend_table import SunburstWidgetLegendTable + from datadog_api_client.v1.model.sunburst_widget_legend_inline_automatic import SunburstWidgetLegendInlineAutomatic + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class SunburstWidgetDefinition(ModelNormal): + validations = { + "requests": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.sunburst_widget_legend import SunburstWidgetLegend + from datadog_api_client.v1.model.sunburst_widget_request import SunburstWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.sunburst_widget_definition_type import SunburstWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "hide_total": (bool,), + "legend": (SunburstWidgetLegend,), + "requests": ([SunburstWidgetRequest],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (SunburstWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "hide_total": "hide_total", + "legend": "legend", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[SunburstWidgetRequest], type: SunburstWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, hide_total: Union[bool, UnsetType]=unset, legend: Union[SunburstWidgetLegend, SunburstWidgetLegendTable, SunburstWidgetLegendInlineAutomatic, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + Sunbursts are spot on to highlight how groups contribute to the total of a query. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param hide_total: Show the total value in this widget. + :type hide_total: bool, optional + + :param legend: Configuration of the legend. + :type legend: SunburstWidgetLegend, optional + + :param requests: List of sunburst widget requests. + :type requests: [SunburstWidgetRequest] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the Sunburst widget. + :type type: SunburstWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if hide_total is not unset: + kwargs["hide_total"] = hide_total + if legend is not unset: + kwargs["legend"] = legend + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/sunburst_widget_definition_type.py b/datadog_api_client/v1/model/sunburst_widget_definition_type.py new file mode 100644 index 0000000000..8f5d097811 --- /dev/null +++ b/datadog_api_client/v1/model/sunburst_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SunburstWidgetDefinitionType(ModelSimple): + """ + Type of the Sunburst widget. + + :param value: If omitted defaults to "sunburst". Must be one of ["sunburst"]. + :type value: str + """ + + allowed_values = { + "sunburst", + } + SUNBURST: ClassVar["SunburstWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SunburstWidgetDefinitionType.SUNBURST = SunburstWidgetDefinitionType("sunburst") diff --git a/datadog_api_client/v1/model/sunburst_widget_legend.py b/datadog_api_client/v1/model/sunburst_widget_legend.py new file mode 100644 index 0000000000..141972864f --- /dev/null +++ b/datadog_api_client/v1/model/sunburst_widget_legend.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SunburstWidgetLegend(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Configuration of the legend. + + :param type: Whether or not to show a table legend. + :type type: SunburstWidgetLegendTableType + + :param hide_percent: Whether to hide the percentages of the groups. + :type hide_percent: bool, optional + + :param hide_value: Whether to hide the values of the groups. + :type hide_value: bool, 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.v1.model.sunburst_widget_legend_table import SunburstWidgetLegendTable + from datadog_api_client.v1.model.sunburst_widget_legend_inline_automatic import SunburstWidgetLegendInlineAutomatic + return { + "oneOf": [ + SunburstWidgetLegendTable, + SunburstWidgetLegendInlineAutomatic, + ], + } diff --git a/datadog_api_client/v1/model/sunburst_widget_legend_inline_automatic.py b/datadog_api_client/v1/model/sunburst_widget_legend_inline_automatic.py new file mode 100644 index 0000000000..2896626496 --- /dev/null +++ b/datadog_api_client/v1/model/sunburst_widget_legend_inline_automatic.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.sunburst_widget_legend_inline_automatic_type import SunburstWidgetLegendInlineAutomaticType + +class SunburstWidgetLegendInlineAutomatic(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.sunburst_widget_legend_inline_automatic_type import SunburstWidgetLegendInlineAutomaticType + return { + "hide_percent": (bool,), + "hide_value": (bool,), + "type": (SunburstWidgetLegendInlineAutomaticType,), + } + attribute_map = { + "hide_percent": "hide_percent", + "hide_value": "hide_value", + "type": "type", + } + + def __init__(self_, type: SunburstWidgetLegendInlineAutomaticType, hide_percent: Union[bool, UnsetType]=unset, hide_value: Union[bool, UnsetType]=unset, **kwargs): + """ + Configuration of inline or automatic legends. + + :param hide_percent: Whether to hide the percentages of the groups. + :type hide_percent: bool, optional + + :param hide_value: Whether to hide the values of the groups. + :type hide_value: bool, optional + + :param type: Whether to show the legend inline or let it be automatically generated. + :type type: SunburstWidgetLegendInlineAutomaticType + """ + if hide_percent is not unset: + kwargs["hide_percent"] = hide_percent + if hide_value is not unset: + kwargs["hide_value"] = hide_value + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/sunburst_widget_legend_inline_automatic_type.py b/datadog_api_client/v1/model/sunburst_widget_legend_inline_automatic_type.py new file mode 100644 index 0000000000..e5a78e9908 --- /dev/null +++ b/datadog_api_client/v1/model/sunburst_widget_legend_inline_automatic_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SunburstWidgetLegendInlineAutomaticType(ModelSimple): + """ + Whether to show the legend inline or let it be automatically generated. + + :param value: Must be one of ["inline", "automatic"]. + :type value: str + """ + + allowed_values = { + "inline", + "automatic", + } + INLINE: ClassVar["SunburstWidgetLegendInlineAutomaticType"] + AUTOMATIC: ClassVar["SunburstWidgetLegendInlineAutomaticType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SunburstWidgetLegendInlineAutomaticType.INLINE = SunburstWidgetLegendInlineAutomaticType("inline") +SunburstWidgetLegendInlineAutomaticType.AUTOMATIC = SunburstWidgetLegendInlineAutomaticType("automatic") diff --git a/datadog_api_client/v1/model/sunburst_widget_legend_table.py b/datadog_api_client/v1/model/sunburst_widget_legend_table.py new file mode 100644 index 0000000000..0be1839510 --- /dev/null +++ b/datadog_api_client/v1/model/sunburst_widget_legend_table.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.sunburst_widget_legend_table_type import SunburstWidgetLegendTableType + +class SunburstWidgetLegendTable(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.sunburst_widget_legend_table_type import SunburstWidgetLegendTableType + return { + "type": (SunburstWidgetLegendTableType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: SunburstWidgetLegendTableType, **kwargs): + """ + Configuration of table-based legend. + + :param type: Whether or not to show a table legend. + :type type: SunburstWidgetLegendTableType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/sunburst_widget_legend_table_type.py b/datadog_api_client/v1/model/sunburst_widget_legend_table_type.py new file mode 100644 index 0000000000..479108228f --- /dev/null +++ b/datadog_api_client/v1/model/sunburst_widget_legend_table_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SunburstWidgetLegendTableType(ModelSimple): + """ + Whether or not to show a table legend. + + :param value: Must be one of ["table", "none"]. + :type value: str + """ + + allowed_values = { + "table", + "none", + } + TABLE: ClassVar["SunburstWidgetLegendTableType"] + NONE: ClassVar["SunburstWidgetLegendTableType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SunburstWidgetLegendTableType.TABLE = SunburstWidgetLegendTableType("table") +SunburstWidgetLegendTableType.NONE = SunburstWidgetLegendTableType("none") diff --git a/datadog_api_client/v1/model/sunburst_widget_request.py b/datadog_api_client/v1/model/sunburst_widget_request.py new file mode 100644 index 0000000000..bc152f4924 --- /dev/null +++ b/datadog_api_client/v1/model/sunburst_widget_request.py @@ -0,0 +1,174 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.widget_style import WidgetStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + +class SunburstWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.widget_style import WidgetStyle + return { + "apm_query": (LogQueryDefinition,), + "audit_query": (LogQueryDefinition,), + "event_query": (LogQueryDefinition,), + "formulas": ([WidgetFormula],), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + "sort": (WidgetSortBy,), + "style": (WidgetStyle,), + } + attribute_map = { + "apm_query": "apm_query", + "audit_query": "audit_query", + "event_query": "event_query", + "formulas": "formulas", + "log_query": "log_query", + "network_query": "network_query", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "queries": "queries", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + "sort": "sort", + "style": "style", + } + + def __init__(self_, apm_query: Union[LogQueryDefinition, UnsetType]=unset, audit_query: Union[LogQueryDefinition, UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, sort: Union[WidgetSortBy, UnsetType]=unset, style: Union[WidgetStyle, UnsetType]=unset, **kwargs): + """ + Request definition of sunburst widget. + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param audit_query: The log query. + :type audit_query: LogQueryDefinition, optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Widget query. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param sort: The controls for sorting the widget. + :type sort: WidgetSortBy, optional + + :param style: Widget style definition. + :type style: WidgetStyle, optional + """ + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if audit_query is not unset: + kwargs["audit_query"] = audit_query + if event_query is not unset: + kwargs["event_query"] = event_query + if formulas is not unset: + kwargs["formulas"] = formulas + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + if sort is not unset: + kwargs["sort"] = sort + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_api_step.py b/datadog_api_client/v1/model/synthetics_api_step.py new file mode 100644 index 0000000000..ebe1351259 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_step.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsAPIStep(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The steps used in a Synthetic multi-step API test. + + :param allow_failure: Determines whether or not to continue with test if this step fails. + :type allow_failure: bool, optional + + :param assertions: Array of assertions used for the test. + :type assertions: [SyntheticsAssertion] + + :param exit_if_succeed: Determines whether or not to exit the test if the step succeeds. + :type exit_if_succeed: bool, optional + + :param extracted_values: Array of values to parse and save as variables from the response. + :type extracted_values: [SyntheticsParsingOptions], optional + + :param extracted_values_from_script: Generate variables using JavaScript. + :type extracted_values_from_script: str, optional + + :param id: ID of the step. + :type id: str, optional + + :param is_critical: Determines whether or not to consider the entire test as failed if this step fails. + Can be used only if `allowFailure` is `true`. + :type is_critical: bool, optional + + :param name: The name of the step. + :type name: str + + :param request: Object describing the Synthetic test request. + :type request: SyntheticsTestRequest + + :param retry: Object describing the retry strategy to apply to a Synthetic test. + :type retry: SyntheticsTestOptionsRetry, optional + + :param subtype: The subtype of the Synthetic multi-step API test step. + :type subtype: SyntheticsAPITestStepSubtype + + :param value: The time to wait in seconds. Minimum value: 0. Maximum value: 180. + :type value: int + + :param always_execute: A boolean set to always execute this step even if the previous step failed or was skipped. + :type always_execute: bool, optional + + :param subtest_public_id: Public ID of the test to be played as part of a `playSubTest` step type. + :type subtest_public_id: str + """ + 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.v1.model.synthetics_api_test_step import SyntheticsAPITestStep + from datadog_api_client.v1.model.synthetics_api_wait_step import SyntheticsAPIWaitStep + from datadog_api_client.v1.model.synthetics_api_subtest_step import SyntheticsAPISubtestStep + return { + "oneOf": [ + SyntheticsAPITestStep, + SyntheticsAPIWaitStep, + SyntheticsAPISubtestStep, + ], + } diff --git a/datadog_api_client/v1/model/synthetics_api_subtest_step.py b/datadog_api_client/v1/model/synthetics_api_subtest_step.py new file mode 100644 index 0000000000..8165d25398 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_subtest_step.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v1.model.synthetics_api_subtest_step_subtype import SyntheticsAPISubtestStepSubtype + +class SyntheticsAPISubtestStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v1.model.synthetics_api_subtest_step_subtype import SyntheticsAPISubtestStepSubtype + return { + "allow_failure": (bool,), + "always_execute": (bool,), + "exit_if_succeed": (bool,), + "extracted_values_from_script": (str,), + "id": (str,), + "is_critical": (bool,), + "name": (str,), + "retry": (SyntheticsTestOptionsRetry,), + "subtest_public_id": (str,), + "subtype": (SyntheticsAPISubtestStepSubtype,), + } + attribute_map = { + "allow_failure": "allowFailure", + "always_execute": "alwaysExecute", + "exit_if_succeed": "exitIfSucceed", + "extracted_values_from_script": "extractedValuesFromScript", + "id": "id", + "is_critical": "isCritical", + "name": "name", + "retry": "retry", + "subtest_public_id": "subtestPublicId", + "subtype": "subtype", + } + read_only_vars = { + "id", + } + + def __init__(self_, name: str, subtest_public_id: str, subtype: SyntheticsAPISubtestStepSubtype, allow_failure: Union[bool, UnsetType]=unset, always_execute: Union[bool, UnsetType]=unset, exit_if_succeed: Union[bool, UnsetType]=unset, extracted_values_from_script: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_critical: Union[bool, UnsetType]=unset, retry: Union[SyntheticsTestOptionsRetry, UnsetType]=unset, **kwargs): + """ + The subtest step used in a Synthetics multi-step API test. + + :param allow_failure: Determines whether or not to continue with test if this step fails. + :type allow_failure: bool, optional + + :param always_execute: A boolean set to always execute this step even if the previous step failed or was skipped. + :type always_execute: bool, optional + + :param exit_if_succeed: Determines whether or not to exit the test if the step succeeds. + :type exit_if_succeed: bool, optional + + :param extracted_values_from_script: Generate variables using JavaScript. + :type extracted_values_from_script: str, optional + + :param id: ID of the step. + :type id: str, optional + + :param is_critical: Determines whether or not to consider the entire test as failed if this step fails. + Can be used only if ``allowFailure`` is ``true``. + :type is_critical: bool, optional + + :param name: The name of the step. + :type name: str + + :param retry: Object describing the retry strategy to apply to a Synthetic test. + :type retry: SyntheticsTestOptionsRetry, optional + + :param subtest_public_id: Public ID of the test to be played as part of a ``playSubTest`` step type. + :type subtest_public_id: str + + :param subtype: The subtype of the Synthetic multi-step API subtest step. + :type subtype: SyntheticsAPISubtestStepSubtype + """ + if allow_failure is not unset: + kwargs["allow_failure"] = allow_failure + if always_execute is not unset: + kwargs["always_execute"] = always_execute + if exit_if_succeed is not unset: + kwargs["exit_if_succeed"] = exit_if_succeed + if extracted_values_from_script is not unset: + kwargs["extracted_values_from_script"] = extracted_values_from_script + if id is not unset: + kwargs["id"] = id + if is_critical is not unset: + kwargs["is_critical"] = is_critical + if retry is not unset: + kwargs["retry"] = retry + super().__init__(kwargs) + + + self_.name = name + self_.subtest_public_id = subtest_public_id + self_.subtype = subtype diff --git a/datadog_api_client/v1/model/synthetics_api_subtest_step_subtype.py b/datadog_api_client/v1/model/synthetics_api_subtest_step_subtype.py new file mode 100644 index 0000000000..5332bd3b1d --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_subtest_step_subtype.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAPISubtestStepSubtype(ModelSimple): + """ + The subtype of the Synthetic multi-step API subtest step. + + :param value: If omitted defaults to "playSubTest". Must be one of ["playSubTest"]. + :type value: str + """ + + allowed_values = { + "playSubTest", + } + PLAY_SUB_TEST: ClassVar["SyntheticsAPISubtestStepSubtype"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAPISubtestStepSubtype.PLAY_SUB_TEST = SyntheticsAPISubtestStepSubtype("playSubTest") diff --git a/datadog_api_client/v1/model/synthetics_api_test.py b/datadog_api_client/v1/model/synthetics_api_test.py new file mode 100644 index 0000000000..9afbbcde39 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test.py @@ -0,0 +1,145 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_api_test_config import SyntheticsAPITestConfig + from datadog_api_client.v1.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_test_details_sub_type import SyntheticsTestDetailsSubType + from datadog_api_client.v1.model.synthetics_api_test_type import SyntheticsAPITestType + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + from datadog_api_client.v1.model.synthetics_api_test_step import SyntheticsAPITestStep + from datadog_api_client.v1.model.synthetics_api_wait_step import SyntheticsAPIWaitStep + from datadog_api_client.v1.model.synthetics_api_subtest_step import SyntheticsAPISubtestStep + +class SyntheticsAPITest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_api_test_config import SyntheticsAPITestConfig + from datadog_api_client.v1.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_test_details_sub_type import SyntheticsTestDetailsSubType + from datadog_api_client.v1.model.synthetics_api_test_type import SyntheticsAPITestType + return { + "config": (SyntheticsAPITestConfig,), + "locations": ([str],), + "message": (str,), + "monitor_id": (int,), + "name": (str,), + "options": (SyntheticsTestOptions,), + "public_id": (str,), + "status": (SyntheticsTestPauseStatus,), + "subtype": (SyntheticsTestDetailsSubType,), + "tags": ([str],), + "type": (SyntheticsAPITestType,), + } + attribute_map = { + "config": "config", + "locations": "locations", + "message": "message", + "monitor_id": "monitor_id", + "name": "name", + "options": "options", + "public_id": "public_id", + "status": "status", + "subtype": "subtype", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "monitor_id", + "public_id", + } + + def __init__(self_, config: SyntheticsAPITestConfig, locations: List[str], message: str, name: str, options: SyntheticsTestOptions, type: SyntheticsAPITestType, monitor_id: Union[int, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestPauseStatus, UnsetType]=unset, subtype: Union[SyntheticsTestDetailsSubType, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing details about a Synthetic API test. + + :param config: Configuration object for a Synthetic API test. + :type config: SyntheticsAPITestConfig + + :param locations: Array of locations used to run the test. + :type locations: [str] + + :param message: Notification message associated with the test. + :type message: str + + :param monitor_id: The associated monitor ID. + :type monitor_id: int, optional + + :param name: Name of the test. + :type name: str + + :param options: Object describing the extra options for a Synthetic test. + :type options: SyntheticsTestOptions + + :param public_id: The public ID for the test. + :type public_id: str, optional + + :param status: Define whether you want to start ( ``live`` ) or pause ( ``paused`` ) a + Synthetic test. + :type status: SyntheticsTestPauseStatus, optional + + :param subtype: The subtype of the Synthetic API test, ``http`` , ``ssl`` , ``tcp`` , + ``dns`` , ``icmp`` , ``udp`` , ``websocket`` , ``grpc`` or ``multi``. + :type subtype: SyntheticsTestDetailsSubType, optional + + :param tags: Array of tags attached to the test. + :type tags: [str], optional + + :param type: Type of the Synthetic test, ``api``. + :type type: SyntheticsAPITestType + """ + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if public_id is not unset: + kwargs["public_id"] = public_id + if status is not unset: + kwargs["status"] = status + if subtype is not unset: + kwargs["subtype"] = subtype + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.config = config + self_.locations = locations + self_.message = message + self_.name = name + self_.options = options + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_api_test_config.py b/datadog_api_client/v1/model/synthetics_api_test_config.py new file mode 100644 index 0000000000..08b4ce38a5 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_config.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion import SyntheticsAssertion + from datadog_api_client.v1.model.synthetics_config_variable import SyntheticsConfigVariable + from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest + from datadog_api_client.v1.model.synthetics_api_step import SyntheticsAPIStep + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + from datadog_api_client.v1.model.synthetics_api_test_step import SyntheticsAPITestStep + from datadog_api_client.v1.model.synthetics_api_wait_step import SyntheticsAPIWaitStep + from datadog_api_client.v1.model.synthetics_api_subtest_step import SyntheticsAPISubtestStep + +class SyntheticsAPITestConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion import SyntheticsAssertion + from datadog_api_client.v1.model.synthetics_config_variable import SyntheticsConfigVariable + from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest + from datadog_api_client.v1.model.synthetics_api_step import SyntheticsAPIStep + return { + "assertions": ([SyntheticsAssertion],), + "config_variables": ([SyntheticsConfigVariable],), + "request": (SyntheticsTestRequest,), + "steps": ([SyntheticsAPIStep],), + "variables_from_script": (str,), + } + attribute_map = { + "assertions": "assertions", + "config_variables": "configVariables", + "request": "request", + "steps": "steps", + "variables_from_script": "variablesFromScript", + } + + def __init__(self_, assertions: Union[List[Union[SyntheticsAssertion, SyntheticsAssertionTarget, SyntheticsAssertionBodyHashTarget, SyntheticsAssertionJSONPathTarget, SyntheticsAssertionJSONSchemaTarget, SyntheticsAssertionXPathTarget, SyntheticsAssertionJavascript, SyntheticsAssertionMCPServerCapabilitiesTarget, SyntheticsAssertionMCPRespectsSpecification]], UnsetType]=unset, config_variables: Union[List[SyntheticsConfigVariable], UnsetType]=unset, request: Union[SyntheticsTestRequest, UnsetType]=unset, steps: Union[List[Union[SyntheticsAPIStep, SyntheticsAPITestStep, SyntheticsAPIWaitStep, SyntheticsAPISubtestStep]], UnsetType]=unset, variables_from_script: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration object for a Synthetic API test. + + :param assertions: Array of assertions used for the test. Required for single API tests. + :type assertions: [SyntheticsAssertion], optional + + :param config_variables: Array of variables used for the test. + :type config_variables: [SyntheticsConfigVariable], optional + + :param request: Object describing the Synthetic test request. + :type request: SyntheticsTestRequest, optional + + :param steps: When the test subtype is ``multi`` , the steps of the test. + :type steps: [SyntheticsAPIStep], optional + + :param variables_from_script: Variables defined from JavaScript code. + :type variables_from_script: str, optional + """ + if assertions is not unset: + kwargs["assertions"] = assertions + if config_variables is not unset: + kwargs["config_variables"] = config_variables + if request is not unset: + kwargs["request"] = request + if steps is not unset: + kwargs["steps"] = steps + if variables_from_script is not unset: + kwargs["variables_from_script"] = variables_from_script + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_api_test_failure_code.py b/datadog_api_client/v1/model/synthetics_api_test_failure_code.py new file mode 100644 index 0000000000..492ac87e61 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_failure_code.py @@ -0,0 +1,120 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsApiTestFailureCode(ModelSimple): + """ + Error code that can be returned by a Synthetic test. + + :param value: Must be one of ["BODY_TOO_LARGE", "DENIED", "TOO_MANY_REDIRECTS", "AUTHENTICATION_ERROR", "DECRYPTION", "INVALID_CHAR_IN_HEADER", "HEADER_TOO_LARGE", "HEADERS_INCOMPATIBLE_CONTENT_LENGTH", "INVALID_REQUEST", "REQUIRES_UPDATE", "UNESCAPED_CHARACTERS_IN_REQUEST_PATH", "MALFORMED_RESPONSE", "INCORRECT_ASSERTION", "CONNREFUSED", "CONNRESET", "DNS", "HOSTUNREACH", "NETUNREACH", "TIMEOUT", "SSL", "OCSP", "INVALID_TEST", "TUNNEL", "WEBSOCKET", "UNKNOWN", "INTERNAL_ERROR"]. + :type value: str + """ + + allowed_values = { + "BODY_TOO_LARGE", + "DENIED", + "TOO_MANY_REDIRECTS", + "AUTHENTICATION_ERROR", + "DECRYPTION", + "INVALID_CHAR_IN_HEADER", + "HEADER_TOO_LARGE", + "HEADERS_INCOMPATIBLE_CONTENT_LENGTH", + "INVALID_REQUEST", + "REQUIRES_UPDATE", + "UNESCAPED_CHARACTERS_IN_REQUEST_PATH", + "MALFORMED_RESPONSE", + "INCORRECT_ASSERTION", + "CONNREFUSED", + "CONNRESET", + "DNS", + "HOSTUNREACH", + "NETUNREACH", + "TIMEOUT", + "SSL", + "OCSP", + "INVALID_TEST", + "TUNNEL", + "WEBSOCKET", + "UNKNOWN", + "INTERNAL_ERROR", + } + BODY_TOO_LARGE: ClassVar["SyntheticsApiTestFailureCode"] + DENIED: ClassVar["SyntheticsApiTestFailureCode"] + TOO_MANY_REDIRECTS: ClassVar["SyntheticsApiTestFailureCode"] + AUTHENTICATION_ERROR: ClassVar["SyntheticsApiTestFailureCode"] + DECRYPTION: ClassVar["SyntheticsApiTestFailureCode"] + INVALID_CHAR_IN_HEADER: ClassVar["SyntheticsApiTestFailureCode"] + HEADER_TOO_LARGE: ClassVar["SyntheticsApiTestFailureCode"] + HEADERS_INCOMPATIBLE_CONTENT_LENGTH: ClassVar["SyntheticsApiTestFailureCode"] + INVALID_REQUEST: ClassVar["SyntheticsApiTestFailureCode"] + REQUIRES_UPDATE: ClassVar["SyntheticsApiTestFailureCode"] + UNESCAPED_CHARACTERS_IN_REQUEST_PATH: ClassVar["SyntheticsApiTestFailureCode"] + MALFORMED_RESPONSE: ClassVar["SyntheticsApiTestFailureCode"] + INCORRECT_ASSERTION: ClassVar["SyntheticsApiTestFailureCode"] + CONNREFUSED: ClassVar["SyntheticsApiTestFailureCode"] + CONNRESET: ClassVar["SyntheticsApiTestFailureCode"] + DNS: ClassVar["SyntheticsApiTestFailureCode"] + HOSTUNREACH: ClassVar["SyntheticsApiTestFailureCode"] + NETUNREACH: ClassVar["SyntheticsApiTestFailureCode"] + TIMEOUT: ClassVar["SyntheticsApiTestFailureCode"] + SSL: ClassVar["SyntheticsApiTestFailureCode"] + OCSP: ClassVar["SyntheticsApiTestFailureCode"] + INVALID_TEST: ClassVar["SyntheticsApiTestFailureCode"] + TUNNEL: ClassVar["SyntheticsApiTestFailureCode"] + WEBSOCKET: ClassVar["SyntheticsApiTestFailureCode"] + UNKNOWN: ClassVar["SyntheticsApiTestFailureCode"] + INTERNAL_ERROR: ClassVar["SyntheticsApiTestFailureCode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsApiTestFailureCode.BODY_TOO_LARGE = SyntheticsApiTestFailureCode("BODY_TOO_LARGE") +SyntheticsApiTestFailureCode.DENIED = SyntheticsApiTestFailureCode("DENIED") +SyntheticsApiTestFailureCode.TOO_MANY_REDIRECTS = SyntheticsApiTestFailureCode("TOO_MANY_REDIRECTS") +SyntheticsApiTestFailureCode.AUTHENTICATION_ERROR = SyntheticsApiTestFailureCode("AUTHENTICATION_ERROR") +SyntheticsApiTestFailureCode.DECRYPTION = SyntheticsApiTestFailureCode("DECRYPTION") +SyntheticsApiTestFailureCode.INVALID_CHAR_IN_HEADER = SyntheticsApiTestFailureCode("INVALID_CHAR_IN_HEADER") +SyntheticsApiTestFailureCode.HEADER_TOO_LARGE = SyntheticsApiTestFailureCode("HEADER_TOO_LARGE") +SyntheticsApiTestFailureCode.HEADERS_INCOMPATIBLE_CONTENT_LENGTH = SyntheticsApiTestFailureCode("HEADERS_INCOMPATIBLE_CONTENT_LENGTH") +SyntheticsApiTestFailureCode.INVALID_REQUEST = SyntheticsApiTestFailureCode("INVALID_REQUEST") +SyntheticsApiTestFailureCode.REQUIRES_UPDATE = SyntheticsApiTestFailureCode("REQUIRES_UPDATE") +SyntheticsApiTestFailureCode.UNESCAPED_CHARACTERS_IN_REQUEST_PATH = SyntheticsApiTestFailureCode("UNESCAPED_CHARACTERS_IN_REQUEST_PATH") +SyntheticsApiTestFailureCode.MALFORMED_RESPONSE = SyntheticsApiTestFailureCode("MALFORMED_RESPONSE") +SyntheticsApiTestFailureCode.INCORRECT_ASSERTION = SyntheticsApiTestFailureCode("INCORRECT_ASSERTION") +SyntheticsApiTestFailureCode.CONNREFUSED = SyntheticsApiTestFailureCode("CONNREFUSED") +SyntheticsApiTestFailureCode.CONNRESET = SyntheticsApiTestFailureCode("CONNRESET") +SyntheticsApiTestFailureCode.DNS = SyntheticsApiTestFailureCode("DNS") +SyntheticsApiTestFailureCode.HOSTUNREACH = SyntheticsApiTestFailureCode("HOSTUNREACH") +SyntheticsApiTestFailureCode.NETUNREACH = SyntheticsApiTestFailureCode("NETUNREACH") +SyntheticsApiTestFailureCode.TIMEOUT = SyntheticsApiTestFailureCode("TIMEOUT") +SyntheticsApiTestFailureCode.SSL = SyntheticsApiTestFailureCode("SSL") +SyntheticsApiTestFailureCode.OCSP = SyntheticsApiTestFailureCode("OCSP") +SyntheticsApiTestFailureCode.INVALID_TEST = SyntheticsApiTestFailureCode("INVALID_TEST") +SyntheticsApiTestFailureCode.TUNNEL = SyntheticsApiTestFailureCode("TUNNEL") +SyntheticsApiTestFailureCode.WEBSOCKET = SyntheticsApiTestFailureCode("WEBSOCKET") +SyntheticsApiTestFailureCode.UNKNOWN = SyntheticsApiTestFailureCode("UNKNOWN") +SyntheticsApiTestFailureCode.INTERNAL_ERROR = SyntheticsApiTestFailureCode("INTERNAL_ERROR") diff --git a/datadog_api_client/v1/model/synthetics_api_test_result_data.py b/datadog_api_client/v1/model/synthetics_api_test_result_data.py new file mode 100644 index 0000000000..2fc69c5eb4 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_result_data.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_ssl_certificate import SyntheticsSSLCertificate + from datadog_api_client.v1.model.synthetics_test_process_status import SyntheticsTestProcessStatus + from datadog_api_client.v1.model.synthetics_api_test_result_failure import SyntheticsApiTestResultFailure + from datadog_api_client.v1.model.synthetics_timing import SyntheticsTiming + +class SyntheticsAPITestResultData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_ssl_certificate import SyntheticsSSLCertificate + from datadog_api_client.v1.model.synthetics_test_process_status import SyntheticsTestProcessStatus + from datadog_api_client.v1.model.synthetics_api_test_result_failure import SyntheticsApiTestResultFailure + from datadog_api_client.v1.model.synthetics_timing import SyntheticsTiming + return { + "cert": (SyntheticsSSLCertificate,), + "event_type": (SyntheticsTestProcessStatus,), + "failure": (SyntheticsApiTestResultFailure,), + "http_status_code": (int,), + "request_headers": ({str: (dict,)},), + "response_body": (str,), + "response_headers": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "response_size": (int,), + "timings": (SyntheticsTiming,), + } + attribute_map = { + "cert": "cert", + "event_type": "eventType", + "failure": "failure", + "http_status_code": "httpStatusCode", + "request_headers": "requestHeaders", + "response_body": "responseBody", + "response_headers": "responseHeaders", + "response_size": "responseSize", + "timings": "timings", + } + + def __init__(self_, cert: Union[SyntheticsSSLCertificate, UnsetType]=unset, event_type: Union[SyntheticsTestProcessStatus, UnsetType]=unset, failure: Union[SyntheticsApiTestResultFailure, UnsetType]=unset, http_status_code: Union[int, UnsetType]=unset, request_headers: Union[Dict[str, dict], UnsetType]=unset, response_body: Union[str, UnsetType]=unset, response_headers: Union[Dict[str, Any], UnsetType]=unset, response_size: Union[int, UnsetType]=unset, timings: Union[SyntheticsTiming, UnsetType]=unset, **kwargs): + """ + Object containing results for your Synthetic API test. + + :param cert: Object describing the SSL certificate used for a Synthetic test. + :type cert: SyntheticsSSLCertificate, optional + + :param event_type: Status of a Synthetic test. + :type event_type: SyntheticsTestProcessStatus, optional + + :param failure: The API test failure details. + :type failure: SyntheticsApiTestResultFailure, optional + + :param http_status_code: The API test HTTP status code. + :type http_status_code: int, optional + + :param request_headers: Request header object used for the API test. + :type request_headers: {str: (dict,)}, optional + + :param response_body: Response body returned for the API test. + :type response_body: str, optional + + :param response_headers: Response headers returned for the API test. + :type response_headers: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param response_size: Global size in byte of the API test response. + :type response_size: int, optional + + :param timings: Object containing all metrics and their values collected for a Synthetic API test. + See the `Synthetic Monitoring Metrics documentation `_. + :type timings: SyntheticsTiming, optional + """ + if cert is not unset: + kwargs["cert"] = cert + if event_type is not unset: + kwargs["event_type"] = event_type + if failure is not unset: + kwargs["failure"] = failure + if http_status_code is not unset: + kwargs["http_status_code"] = http_status_code + if request_headers is not unset: + kwargs["request_headers"] = request_headers + if response_body is not unset: + kwargs["response_body"] = response_body + if response_headers is not unset: + kwargs["response_headers"] = response_headers + if response_size is not unset: + kwargs["response_size"] = response_size + if timings is not unset: + kwargs["timings"] = timings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_api_test_result_failure.py b/datadog_api_client/v1/model/synthetics_api_test_result_failure.py new file mode 100644 index 0000000000..810c174f01 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_result_failure.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_api_test_failure_code import SyntheticsApiTestFailureCode + +class SyntheticsApiTestResultFailure(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_api_test_failure_code import SyntheticsApiTestFailureCode + return { + "code": (SyntheticsApiTestFailureCode,), + "message": (str,), + } + attribute_map = { + "code": "code", + "message": "message", + } + + def __init__(self_, code: Union[SyntheticsApiTestFailureCode, UnsetType]=unset, message: Union[str, UnsetType]=unset, **kwargs): + """ + The API test failure details. + + :param code: Error code that can be returned by a Synthetic test. + :type code: SyntheticsApiTestFailureCode, optional + + :param message: The API test error message. + :type message: str, optional + """ + if code is not unset: + kwargs["code"] = code + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_api_test_result_full.py b/datadog_api_client/v1/model/synthetics_api_test_result_full.py new file mode 100644 index 0000000000..cc43078ef1 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_result_full.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_api_test_result_full_check import SyntheticsAPITestResultFullCheck + from datadog_api_client.v1.model.synthetics_api_test_result_data import SyntheticsAPITestResultData + from datadog_api_client.v1.model.synthetics_test_monitor_status import SyntheticsTestMonitorStatus + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsAPITestResultFull(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_api_test_result_full_check import SyntheticsAPITestResultFullCheck + from datadog_api_client.v1.model.synthetics_api_test_result_data import SyntheticsAPITestResultData + from datadog_api_client.v1.model.synthetics_test_monitor_status import SyntheticsTestMonitorStatus + return { + "check": (SyntheticsAPITestResultFullCheck,), + "check_time": (float,), + "check_version": (int,), + "probe_dc": (str,), + "result": (SyntheticsAPITestResultData,), + "result_id": (str,), + "status": (SyntheticsTestMonitorStatus,), + } + attribute_map = { + "check": "check", + "check_time": "check_time", + "check_version": "check_version", + "probe_dc": "probe_dc", + "result": "result", + "result_id": "result_id", + "status": "status", + } + + def __init__(self_, check: Union[SyntheticsAPITestResultFullCheck, UnsetType]=unset, check_time: Union[float, UnsetType]=unset, check_version: Union[int, UnsetType]=unset, probe_dc: Union[str, UnsetType]=unset, result: Union[SyntheticsAPITestResultData, UnsetType]=unset, result_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestMonitorStatus, UnsetType]=unset, **kwargs): + """ + Object returned describing a API test result. + + :param check: Object describing the API test configuration. + :type check: SyntheticsAPITestResultFullCheck, optional + + :param check_time: When the API test was conducted. + :type check_time: float, optional + + :param check_version: Version of the API test used. + :type check_version: int, optional + + :param probe_dc: Locations for which to query the API test results. + :type probe_dc: str, optional + + :param result: Object containing results for your Synthetic API test. + :type result: SyntheticsAPITestResultData, optional + + :param result_id: ID of the API test result. + :type result_id: str, optional + + :param status: The status of your Synthetic monitor. + + * ``O`` for not triggered + * ``1`` for triggered + * ``2`` for no data + :type status: SyntheticsTestMonitorStatus, optional + """ + if check is not unset: + kwargs["check"] = check + if check_time is not unset: + kwargs["check_time"] = check_time + if check_version is not unset: + kwargs["check_version"] = check_version + if probe_dc is not unset: + kwargs["probe_dc"] = probe_dc + if result is not unset: + kwargs["result"] = result + if result_id is not unset: + kwargs["result_id"] = result_id + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_api_test_result_full_check.py b/datadog_api_client/v1/model/synthetics_api_test_result_full_check.py new file mode 100644 index 0000000000..9e2f8d9ed3 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_result_full_check.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_config import SyntheticsTestConfig + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsAPITestResultFullCheck(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_config import SyntheticsTestConfig + return { + "config": (SyntheticsTestConfig,), + } + attribute_map = { + "config": "config", + } + + def __init__(self_, config: SyntheticsTestConfig, **kwargs): + """ + Object describing the API test configuration. + + :param config: Configuration object for a Synthetic test. + :type config: SyntheticsTestConfig + """ + super().__init__(kwargs) + + + self_.config = config diff --git a/datadog_api_client/v1/model/synthetics_api_test_result_short.py b/datadog_api_client/v1/model/synthetics_api_test_result_short.py new file mode 100644 index 0000000000..18460087af --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_result_short.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_api_test_result_short_result import SyntheticsAPITestResultShortResult + from datadog_api_client.v1.model.synthetics_test_monitor_status import SyntheticsTestMonitorStatus + +class SyntheticsAPITestResultShort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_api_test_result_short_result import SyntheticsAPITestResultShortResult + from datadog_api_client.v1.model.synthetics_test_monitor_status import SyntheticsTestMonitorStatus + return { + "check_time": (float,), + "probe_dc": (str,), + "result": (SyntheticsAPITestResultShortResult,), + "result_id": (str,), + "status": (SyntheticsTestMonitorStatus,), + } + attribute_map = { + "check_time": "check_time", + "probe_dc": "probe_dc", + "result": "result", + "result_id": "result_id", + "status": "status", + } + + def __init__(self_, check_time: Union[float, UnsetType]=unset, probe_dc: Union[str, UnsetType]=unset, result: Union[SyntheticsAPITestResultShortResult, UnsetType]=unset, result_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestMonitorStatus, UnsetType]=unset, **kwargs): + """ + Object with the results of a single Synthetic API test. + + :param check_time: Last time the API test was performed. + :type check_time: float, optional + + :param probe_dc: Location from which the API test was performed. + :type probe_dc: str, optional + + :param result: Result of the last API test run. + :type result: SyntheticsAPITestResultShortResult, optional + + :param result_id: ID of the API test result. + :type result_id: str, optional + + :param status: The status of your Synthetic monitor. + + * ``O`` for not triggered + * ``1`` for triggered + * ``2`` for no data + :type status: SyntheticsTestMonitorStatus, optional + """ + if check_time is not unset: + kwargs["check_time"] = check_time + if probe_dc is not unset: + kwargs["probe_dc"] = probe_dc + if result is not unset: + kwargs["result"] = result + if result_id is not unset: + kwargs["result_id"] = result_id + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_api_test_result_short_result.py b/datadog_api_client/v1/model/synthetics_api_test_result_short_result.py new file mode 100644 index 0000000000..79ef8fec97 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_result_short_result.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_timing import SyntheticsTiming + +class SyntheticsAPITestResultShortResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_timing import SyntheticsTiming + return { + "passed": (bool,), + "timings": (SyntheticsTiming,), + } + attribute_map = { + "passed": "passed", + "timings": "timings", + } + + def __init__(self_, passed: Union[bool, UnsetType]=unset, timings: Union[SyntheticsTiming, UnsetType]=unset, **kwargs): + """ + Result of the last API test run. + + :param passed: Describes if the test run has passed or failed. + :type passed: bool, optional + + :param timings: Object containing all metrics and their values collected for a Synthetic API test. + See the `Synthetic Monitoring Metrics documentation `_. + :type timings: SyntheticsTiming, optional + """ + if passed is not unset: + kwargs["passed"] = passed + if timings is not unset: + kwargs["timings"] = timings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_api_test_step.py b/datadog_api_client/v1/model/synthetics_api_test_step.py new file mode 100644 index 0000000000..ac0b6b0652 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_step.py @@ -0,0 +1,143 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion import SyntheticsAssertion + from datadog_api_client.v1.model.synthetics_parsing_options import SyntheticsParsingOptions + from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v1.model.synthetics_api_test_step_subtype import SyntheticsAPITestStepSubtype + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsAPITestStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion import SyntheticsAssertion + from datadog_api_client.v1.model.synthetics_parsing_options import SyntheticsParsingOptions + from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v1.model.synthetics_api_test_step_subtype import SyntheticsAPITestStepSubtype + return { + "allow_failure": (bool,), + "assertions": ([SyntheticsAssertion],), + "exit_if_succeed": (bool,), + "extracted_values": ([SyntheticsParsingOptions],), + "extracted_values_from_script": (str,), + "id": (str,), + "is_critical": (bool,), + "name": (str,), + "request": (SyntheticsTestRequest,), + "retry": (SyntheticsTestOptionsRetry,), + "subtype": (SyntheticsAPITestStepSubtype,), + } + attribute_map = { + "allow_failure": "allowFailure", + "assertions": "assertions", + "exit_if_succeed": "exitIfSucceed", + "extracted_values": "extractedValues", + "extracted_values_from_script": "extractedValuesFromScript", + "id": "id", + "is_critical": "isCritical", + "name": "name", + "request": "request", + "retry": "retry", + "subtype": "subtype", + } + read_only_vars = { + "id", + } + + def __init__(self_, name: str, request: SyntheticsTestRequest, subtype: SyntheticsAPITestStepSubtype, allow_failure: Union[bool, UnsetType]=unset, exit_if_succeed: Union[bool, UnsetType]=unset, extracted_values: Union[List[SyntheticsParsingOptions], UnsetType]=unset, extracted_values_from_script: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_critical: Union[bool, UnsetType]=unset, retry: Union[SyntheticsTestOptionsRetry, UnsetType]=unset, **kwargs): + """ + The Test step used in a Synthetic multi-step API test. + + :param allow_failure: Determines whether or not to continue with test if this step fails. + :type allow_failure: bool, optional + + :param assertions: Array of assertions used for the test. + :type assertions: [SyntheticsAssertion] + + :param exit_if_succeed: Determines whether or not to exit the test if the step succeeds. + :type exit_if_succeed: bool, optional + + :param extracted_values: Array of values to parse and save as variables from the response. + :type extracted_values: [SyntheticsParsingOptions], optional + + :param extracted_values_from_script: Generate variables using JavaScript. + :type extracted_values_from_script: str, optional + + :param id: ID of the step. + :type id: str, optional + + :param is_critical: Determines whether or not to consider the entire test as failed if this step fails. + Can be used only if ``allowFailure`` is ``true``. + :type is_critical: bool, optional + + :param name: The name of the step. + :type name: str + + :param request: Object describing the Synthetic test request. + :type request: SyntheticsTestRequest + + :param retry: Object describing the retry strategy to apply to a Synthetic test. + :type retry: SyntheticsTestOptionsRetry, optional + + :param subtype: The subtype of the Synthetic multi-step API test step. + :type subtype: SyntheticsAPITestStepSubtype + """ + if allow_failure is not unset: + kwargs["allow_failure"] = allow_failure + if exit_if_succeed is not unset: + kwargs["exit_if_succeed"] = exit_if_succeed + if extracted_values is not unset: + kwargs["extracted_values"] = extracted_values + if extracted_values_from_script is not unset: + kwargs["extracted_values_from_script"] = extracted_values_from_script + if id is not unset: + kwargs["id"] = id + if is_critical is not unset: + kwargs["is_critical"] = is_critical + if retry is not unset: + kwargs["retry"] = retry + super().__init__(kwargs) + assertions = kwargs.get("assertions", []) + + + self_.assertions = assertions + self_.name = name + self_.request = request + self_.subtype = subtype diff --git a/datadog_api_client/v1/model/synthetics_api_test_step_subtype.py b/datadog_api_client/v1/model/synthetics_api_test_step_subtype.py new file mode 100644 index 0000000000..cc2898e780 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_step_subtype.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAPITestStepSubtype(ModelSimple): + """ + The subtype of the Synthetic multi-step API test step. + + :param value: Must be one of ["http", "grpc", "ssl", "dns", "tcp", "udp", "icmp", "websocket", "mcp"]. + :type value: str + """ + + allowed_values = { + "http", + "grpc", + "ssl", + "dns", + "tcp", + "udp", + "icmp", + "websocket", + "mcp", + } + HTTP: ClassVar["SyntheticsAPITestStepSubtype"] + GRPC: ClassVar["SyntheticsAPITestStepSubtype"] + SSL: ClassVar["SyntheticsAPITestStepSubtype"] + DNS: ClassVar["SyntheticsAPITestStepSubtype"] + TCP: ClassVar["SyntheticsAPITestStepSubtype"] + UDP: ClassVar["SyntheticsAPITestStepSubtype"] + ICMP: ClassVar["SyntheticsAPITestStepSubtype"] + WEBSOCKET: ClassVar["SyntheticsAPITestStepSubtype"] + MCP: ClassVar["SyntheticsAPITestStepSubtype"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAPITestStepSubtype.HTTP = SyntheticsAPITestStepSubtype("http") +SyntheticsAPITestStepSubtype.GRPC = SyntheticsAPITestStepSubtype("grpc") +SyntheticsAPITestStepSubtype.SSL = SyntheticsAPITestStepSubtype("ssl") +SyntheticsAPITestStepSubtype.DNS = SyntheticsAPITestStepSubtype("dns") +SyntheticsAPITestStepSubtype.TCP = SyntheticsAPITestStepSubtype("tcp") +SyntheticsAPITestStepSubtype.UDP = SyntheticsAPITestStepSubtype("udp") +SyntheticsAPITestStepSubtype.ICMP = SyntheticsAPITestStepSubtype("icmp") +SyntheticsAPITestStepSubtype.WEBSOCKET = SyntheticsAPITestStepSubtype("websocket") +SyntheticsAPITestStepSubtype.MCP = SyntheticsAPITestStepSubtype("mcp") diff --git a/datadog_api_client/v1/model/synthetics_api_test_type.py b/datadog_api_client/v1/model/synthetics_api_test_type.py new file mode 100644 index 0000000000..3e3c8452ac --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_test_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAPITestType(ModelSimple): + """ + Type of the Synthetic test, `api`. + + :param value: If omitted defaults to "api". Must be one of ["api"]. + :type value: str + """ + + allowed_values = { + "api", + } + API: ClassVar["SyntheticsAPITestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAPITestType.API = SyntheticsAPITestType("api") diff --git a/datadog_api_client/v1/model/synthetics_api_wait_step.py b/datadog_api_client/v1/model/synthetics_api_wait_step.py new file mode 100644 index 0000000000..8af64bee9c --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_wait_step.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_api_wait_step_subtype import SyntheticsAPIWaitStepSubtype + +class SyntheticsAPIWaitStep(ModelNormal): + validations = { + "value": { + "inclusive_maximum": 180, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_api_wait_step_subtype import SyntheticsAPIWaitStepSubtype + return { + "id": (str,), + "name": (str,), + "subtype": (SyntheticsAPIWaitStepSubtype,), + "value": (int,), + } + attribute_map = { + "id": "id", + "name": "name", + "subtype": "subtype", + "value": "value", + } + read_only_vars = { + "id", + } + + def __init__(self_, name: str, subtype: SyntheticsAPIWaitStepSubtype, value: int, id: Union[str, UnsetType]=unset, **kwargs): + """ + The Wait step used in a Synthetic multi-step API test. + + :param id: ID of the step. + :type id: str, optional + + :param name: The name of the step. + :type name: str + + :param subtype: The subtype of the Synthetic multi-step API wait step. + :type subtype: SyntheticsAPIWaitStepSubtype + + :param value: The time to wait in seconds. Minimum value: 0. Maximum value: 180. + :type value: int + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.name = name + self_.subtype = subtype + self_.value = value diff --git a/datadog_api_client/v1/model/synthetics_api_wait_step_subtype.py b/datadog_api_client/v1/model/synthetics_api_wait_step_subtype.py new file mode 100644 index 0000000000..9c29fbcdf6 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_api_wait_step_subtype.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAPIWaitStepSubtype(ModelSimple): + """ + The subtype of the Synthetic multi-step API wait step. + + :param value: If omitted defaults to "wait". Must be one of ["wait"]. + :type value: str + """ + + allowed_values = { + "wait", + } + WAIT: ClassVar["SyntheticsAPIWaitStepSubtype"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAPIWaitStepSubtype.WAIT = SyntheticsAPIWaitStepSubtype("wait") diff --git a/datadog_api_client/v1/model/synthetics_assertion.py b/datadog_api_client/v1/model/synthetics_assertion.py new file mode 100644 index 0000000000..575135cbfc --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsAssertion(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Object describing the assertions type, their associated operator, + which property they apply, and upon which target. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsAssertionOperator + + :param _property: The associated assertion property. + :type _property: str, optional + + :param target: Value used by the operator in assertions. Can be either a number or string. + :type target: SyntheticsAssertionTargetValue + + :param timings_scope: Timings scope for response time assertions. + :type timings_scope: SyntheticsAssertionTimingsScope, optional + + :param type: Type of the assertion. + :type type: SyntheticsAssertionType + + :param code: The JavaScript code that performs the assertions. + :type code: str + """ + 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.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + return { + "oneOf": [ + SyntheticsAssertionTarget, + SyntheticsAssertionBodyHashTarget, + SyntheticsAssertionJSONPathTarget, + SyntheticsAssertionJSONSchemaTarget, + SyntheticsAssertionXPathTarget, + SyntheticsAssertionJavascript, + SyntheticsAssertionMCPServerCapabilitiesTarget, + SyntheticsAssertionMCPRespectsSpecification, + ], + } diff --git a/datadog_api_client/v1/model/synthetics_assertion_body_hash_operator.py b/datadog_api_client/v1/model/synthetics_assertion_body_hash_operator.py new file mode 100644 index 0000000000..01e39f898c --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_body_hash_operator.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionBodyHashOperator(ModelSimple): + """ + Assertion operator to apply. + + :param value: Must be one of ["md5", "sha1", "sha256"]. + :type value: str + """ + + allowed_values = { + "md5", + "sha1", + "sha256", + } + MD5: ClassVar["SyntheticsAssertionBodyHashOperator"] + SHA1: ClassVar["SyntheticsAssertionBodyHashOperator"] + SHA256: ClassVar["SyntheticsAssertionBodyHashOperator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionBodyHashOperator.MD5 = SyntheticsAssertionBodyHashOperator("md5") +SyntheticsAssertionBodyHashOperator.SHA1 = SyntheticsAssertionBodyHashOperator("sha1") +SyntheticsAssertionBodyHashOperator.SHA256 = SyntheticsAssertionBodyHashOperator("sha256") diff --git a/datadog_api_client/v1/model/synthetics_assertion_body_hash_target.py b/datadog_api_client/v1/model/synthetics_assertion_body_hash_target.py new file mode 100644 index 0000000000..1c121c0840 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_body_hash_target.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_body_hash_operator import SyntheticsAssertionBodyHashOperator + from datadog_api_client.v1.model.synthetics_assertion_target_value import SyntheticsAssertionTargetValue + from datadog_api_client.v1.model.synthetics_assertion_body_hash_type import SyntheticsAssertionBodyHashType + +class SyntheticsAssertionBodyHashTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_body_hash_operator import SyntheticsAssertionBodyHashOperator + from datadog_api_client.v1.model.synthetics_assertion_target_value import SyntheticsAssertionTargetValue + from datadog_api_client.v1.model.synthetics_assertion_body_hash_type import SyntheticsAssertionBodyHashType + return { + "operator": (SyntheticsAssertionBodyHashOperator,), + "target": (SyntheticsAssertionTargetValue,), + "type": (SyntheticsAssertionBodyHashType,), + } + attribute_map = { + "operator": "operator", + "target": "target", + "type": "type", + } + + def __init__(self_, operator: SyntheticsAssertionBodyHashOperator, target: Union[SyntheticsAssertionTargetValue, float, str], type: SyntheticsAssertionBodyHashType, **kwargs): + """ + An assertion which targets body hash. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsAssertionBodyHashOperator + + :param target: Value used by the operator in assertions. Can be either a number or string. + :type target: SyntheticsAssertionTargetValue + + :param type: Type of the assertion. + :type type: SyntheticsAssertionBodyHashType + """ + super().__init__(kwargs) + + + self_.operator = operator + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_assertion_body_hash_type.py b/datadog_api_client/v1/model/synthetics_assertion_body_hash_type.py new file mode 100644 index 0000000000..85fd3f10bf --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_body_hash_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionBodyHashType(ModelSimple): + """ + Type of the assertion. + + :param value: If omitted defaults to "bodyHash". Must be one of ["bodyHash"]. + :type value: str + """ + + allowed_values = { + "bodyHash", + } + BODY_HASH: ClassVar["SyntheticsAssertionBodyHashType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionBodyHashType.BODY_HASH = SyntheticsAssertionBodyHashType("bodyHash") diff --git a/datadog_api_client/v1/model/synthetics_assertion_javascript.py b/datadog_api_client/v1/model/synthetics_assertion_javascript.py new file mode 100644 index 0000000000..7ebb4688a2 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_javascript.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_javascript_type import SyntheticsAssertionJavascriptType + +class SyntheticsAssertionJavascript(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_javascript_type import SyntheticsAssertionJavascriptType + return { + "code": (str,), + "type": (SyntheticsAssertionJavascriptType,), + } + attribute_map = { + "code": "code", + "type": "type", + } + + def __init__(self_, code: str, type: SyntheticsAssertionJavascriptType, **kwargs): + """ + A JavaScript assertion. + + :param code: The JavaScript code that performs the assertions. + :type code: str + + :param type: Type of the assertion. + :type type: SyntheticsAssertionJavascriptType + """ + super().__init__(kwargs) + + + self_.code = code + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_assertion_javascript_type.py b/datadog_api_client/v1/model/synthetics_assertion_javascript_type.py new file mode 100644 index 0000000000..ca2c05c5d8 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_javascript_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionJavascriptType(ModelSimple): + """ + Type of the assertion. + + :param value: If omitted defaults to "javascript". Must be one of ["javascript"]. + :type value: str + """ + + allowed_values = { + "javascript", + } + JAVASCRIPT: ClassVar["SyntheticsAssertionJavascriptType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionJavascriptType.JAVASCRIPT = SyntheticsAssertionJavascriptType("javascript") diff --git a/datadog_api_client/v1/model/synthetics_assertion_json_path_operator.py b/datadog_api_client/v1/model/synthetics_assertion_json_path_operator.py new file mode 100644 index 0000000000..1cdda77287 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_json_path_operator.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionJSONPathOperator(ModelSimple): + """ + Assertion operator to apply. + + :param value: If omitted defaults to "validatesJSONPath". Must be one of ["validatesJSONPath"]. + :type value: str + """ + + allowed_values = { + "validatesJSONPath", + } + VALIDATES_JSON_PATH: ClassVar["SyntheticsAssertionJSONPathOperator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionJSONPathOperator.VALIDATES_JSON_PATH = SyntheticsAssertionJSONPathOperator("validatesJSONPath") diff --git a/datadog_api_client/v1/model/synthetics_assertion_json_path_target.py b/datadog_api_client/v1/model/synthetics_assertion_json_path_target.py new file mode 100644 index 0000000000..f5bb893107 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_json_path_target.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_json_path_operator import SyntheticsAssertionJSONPathOperator + from datadog_api_client.v1.model.synthetics_assertion_json_path_target_target import SyntheticsAssertionJSONPathTargetTarget + from datadog_api_client.v1.model.synthetics_assertion_type import SyntheticsAssertionType + +class SyntheticsAssertionJSONPathTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_json_path_operator import SyntheticsAssertionJSONPathOperator + from datadog_api_client.v1.model.synthetics_assertion_json_path_target_target import SyntheticsAssertionJSONPathTargetTarget + from datadog_api_client.v1.model.synthetics_assertion_type import SyntheticsAssertionType + return { + "operator": (SyntheticsAssertionJSONPathOperator,), + "_property": (str,), + "target": (SyntheticsAssertionJSONPathTargetTarget,), + "type": (SyntheticsAssertionType,), + } + attribute_map = { + "operator": "operator", + "_property": "property", + "target": "target", + "type": "type", + } + + def __init__(self_, operator: SyntheticsAssertionJSONPathOperator, type: SyntheticsAssertionType, _property: Union[str, UnsetType]=unset, target: Union[SyntheticsAssertionJSONPathTargetTarget, UnsetType]=unset, **kwargs): + """ + An assertion for the ``validatesJSONPath`` operator. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsAssertionJSONPathOperator + + :param _property: The associated assertion property. + :type _property: str, optional + + :param target: Composed target for ``validatesJSONPath`` operator. + :type target: SyntheticsAssertionJSONPathTargetTarget, optional + + :param type: Type of the assertion. + :type type: SyntheticsAssertionType + """ + if _property is not unset: + kwargs["_property"] = _property + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + + self_.operator = operator + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_assertion_json_path_target_target.py b/datadog_api_client/v1/model/synthetics_assertion_json_path_target_target.py new file mode 100644 index 0000000000..f95d028b83 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_json_path_target_target.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_target_value import SyntheticsAssertionTargetValue + +class SyntheticsAssertionJSONPathTargetTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_target_value import SyntheticsAssertionTargetValue + return { + "elements_operator": (str,), + "json_path": (str,), + "operator": (str,), + "target_value": (SyntheticsAssertionTargetValue,), + } + attribute_map = { + "elements_operator": "elementsOperator", + "json_path": "jsonPath", + "operator": "operator", + "target_value": "targetValue", + } + + def __init__(self_, elements_operator: Union[str, UnsetType]=unset, json_path: Union[str, UnsetType]=unset, operator: Union[str, UnsetType]=unset, target_value: Union[SyntheticsAssertionTargetValue, float, str, UnsetType]=unset, **kwargs): + """ + Composed target for ``validatesJSONPath`` operator. + + :param elements_operator: The element from the list of results to assert on. To choose from the first element in the list ``firstElementMatches`` , every element in the list ``everyElementMatches`` , at least one element in the list ``atLeastOneElementMatches`` or the serialized value of the list ``serializationMatches``. + :type elements_operator: str, optional + + :param json_path: The JSON path to assert. + :type json_path: str, optional + + :param operator: The specific operator to use on the path. + :type operator: str, optional + + :param target_value: Value used by the operator in assertions. Can be either a number or string. + :type target_value: SyntheticsAssertionTargetValue, optional + """ + if elements_operator is not unset: + kwargs["elements_operator"] = elements_operator + if json_path is not unset: + kwargs["json_path"] = json_path + if operator is not unset: + kwargs["operator"] = operator + if target_value is not unset: + kwargs["target_value"] = target_value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_assertion_json_schema_meta_schema.py b/datadog_api_client/v1/model/synthetics_assertion_json_schema_meta_schema.py new file mode 100644 index 0000000000..991e7ab7b1 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_json_schema_meta_schema.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionJSONSchemaMetaSchema(ModelSimple): + """ + The JSON Schema meta-schema version used in the assertion. + + :param value: Must be one of ["draft-07", "draft-06"]. + :type value: str + """ + + allowed_values = { + "draft-07", + "draft-06", + } + DRAFT_07: ClassVar["SyntheticsAssertionJSONSchemaMetaSchema"] + DRAFT_06: ClassVar["SyntheticsAssertionJSONSchemaMetaSchema"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionJSONSchemaMetaSchema.DRAFT_07 = SyntheticsAssertionJSONSchemaMetaSchema("draft-07") +SyntheticsAssertionJSONSchemaMetaSchema.DRAFT_06 = SyntheticsAssertionJSONSchemaMetaSchema("draft-06") diff --git a/datadog_api_client/v1/model/synthetics_assertion_json_schema_operator.py b/datadog_api_client/v1/model/synthetics_assertion_json_schema_operator.py new file mode 100644 index 0000000000..b72d32a38c --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_json_schema_operator.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionJSONSchemaOperator(ModelSimple): + """ + Assertion operator to apply. + + :param value: If omitted defaults to "validatesJSONSchema". Must be one of ["validatesJSONSchema"]. + :type value: str + """ + + allowed_values = { + "validatesJSONSchema", + } + VALIDATES_JSON_SCHEMA: ClassVar["SyntheticsAssertionJSONSchemaOperator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionJSONSchemaOperator.VALIDATES_JSON_SCHEMA = SyntheticsAssertionJSONSchemaOperator("validatesJSONSchema") diff --git a/datadog_api_client/v1/model/synthetics_assertion_json_schema_target.py b/datadog_api_client/v1/model/synthetics_assertion_json_schema_target.py new file mode 100644 index 0000000000..434318ce66 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_json_schema_target.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_json_schema_operator import SyntheticsAssertionJSONSchemaOperator + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target_target import SyntheticsAssertionJSONSchemaTargetTarget + from datadog_api_client.v1.model.synthetics_assertion_type import SyntheticsAssertionType + +class SyntheticsAssertionJSONSchemaTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_json_schema_operator import SyntheticsAssertionJSONSchemaOperator + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target_target import SyntheticsAssertionJSONSchemaTargetTarget + from datadog_api_client.v1.model.synthetics_assertion_type import SyntheticsAssertionType + return { + "operator": (SyntheticsAssertionJSONSchemaOperator,), + "target": (SyntheticsAssertionJSONSchemaTargetTarget,), + "type": (SyntheticsAssertionType,), + } + attribute_map = { + "operator": "operator", + "target": "target", + "type": "type", + } + + def __init__(self_, operator: SyntheticsAssertionJSONSchemaOperator, type: SyntheticsAssertionType, target: Union[SyntheticsAssertionJSONSchemaTargetTarget, UnsetType]=unset, **kwargs): + """ + An assertion for the ``validatesJSONSchema`` operator. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsAssertionJSONSchemaOperator + + :param target: Composed target for ``validatesJSONSchema`` operator. + :type target: SyntheticsAssertionJSONSchemaTargetTarget, optional + + :param type: Type of the assertion. + :type type: SyntheticsAssertionType + """ + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + + self_.operator = operator + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_assertion_json_schema_target_target.py b/datadog_api_client/v1/model/synthetics_assertion_json_schema_target_target.py new file mode 100644 index 0000000000..def90cb97c --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_json_schema_target_target.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_json_schema_meta_schema import SyntheticsAssertionJSONSchemaMetaSchema + +class SyntheticsAssertionJSONSchemaTargetTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_json_schema_meta_schema import SyntheticsAssertionJSONSchemaMetaSchema + return { + "json_schema": (str,), + "meta_schema": (SyntheticsAssertionJSONSchemaMetaSchema,), + } + attribute_map = { + "json_schema": "jsonSchema", + "meta_schema": "metaSchema", + } + + def __init__(self_, json_schema: Union[str, UnsetType]=unset, meta_schema: Union[SyntheticsAssertionJSONSchemaMetaSchema, UnsetType]=unset, **kwargs): + """ + Composed target for ``validatesJSONSchema`` operator. + + :param json_schema: The JSON Schema to assert. + :type json_schema: str, optional + + :param meta_schema: The JSON Schema meta-schema version used in the assertion. + :type meta_schema: SyntheticsAssertionJSONSchemaMetaSchema, optional + """ + if json_schema is not unset: + kwargs["json_schema"] = json_schema + if meta_schema is not unset: + kwargs["meta_schema"] = meta_schema + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_assertion_mcp_respects_specification.py b/datadog_api_client/v1/model/synthetics_assertion_mcp_respects_specification.py new file mode 100644 index 0000000000..ac40360295 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_mcp_respects_specification.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification_type import SyntheticsAssertionMCPRespectsSpecificationType + +class SyntheticsAssertionMCPRespectsSpecification(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification_type import SyntheticsAssertionMCPRespectsSpecificationType + return { + "type": (SyntheticsAssertionMCPRespectsSpecificationType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: SyntheticsAssertionMCPRespectsSpecificationType, **kwargs): + """ + An assertion that verifies the MCP server response respects the MCP specification. + + :param type: Type of the assertion. + :type type: SyntheticsAssertionMCPRespectsSpecificationType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_assertion_mcp_respects_specification_type.py b/datadog_api_client/v1/model/synthetics_assertion_mcp_respects_specification_type.py new file mode 100644 index 0000000000..7112cb7cbf --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_mcp_respects_specification_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionMCPRespectsSpecificationType(ModelSimple): + """ + Type of the assertion. + + :param value: If omitted defaults to "mcpRespectsSpecification". Must be one of ["mcpRespectsSpecification"]. + :type value: str + """ + + allowed_values = { + "mcpRespectsSpecification", + } + MCP_RESPECTS_SPECIFICATION: ClassVar["SyntheticsAssertionMCPRespectsSpecificationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionMCPRespectsSpecificationType.MCP_RESPECTS_SPECIFICATION = SyntheticsAssertionMCPRespectsSpecificationType("mcpRespectsSpecification") diff --git a/datadog_api_client/v1/model/synthetics_assertion_mcp_server_capabilities_target.py b/datadog_api_client/v1/model/synthetics_assertion_mcp_server_capabilities_target.py new file mode 100644 index 0000000000..8e2e71ae3f --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_mcp_server_capabilities_target.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_operator import SyntheticsAssertionOperator + from datadog_api_client.v1.model.synthetics_mcp_server_capability import SyntheticsMCPServerCapability + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_type import SyntheticsAssertionMCPServerCapabilitiesType + +class SyntheticsAssertionMCPServerCapabilitiesTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_operator import SyntheticsAssertionOperator + from datadog_api_client.v1.model.synthetics_mcp_server_capability import SyntheticsMCPServerCapability + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_type import SyntheticsAssertionMCPServerCapabilitiesType + return { + "operator": (SyntheticsAssertionOperator,), + "target": ([SyntheticsMCPServerCapability],), + "type": (SyntheticsAssertionMCPServerCapabilitiesType,), + } + attribute_map = { + "operator": "operator", + "target": "target", + "type": "type", + } + + def __init__(self_, operator: SyntheticsAssertionOperator, target: List[SyntheticsMCPServerCapability], type: SyntheticsAssertionMCPServerCapabilitiesType, **kwargs): + """ + An assertion that checks that an MCP server advertises the expected capabilities. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsAssertionOperator + + :param target: List of MCP server capabilities to assert against. + :type target: [SyntheticsMCPServerCapability] + + :param type: Type of the assertion. + :type type: SyntheticsAssertionMCPServerCapabilitiesType + """ + super().__init__(kwargs) + + + self_.operator = operator + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_assertion_mcp_server_capabilities_type.py b/datadog_api_client/v1/model/synthetics_assertion_mcp_server_capabilities_type.py new file mode 100644 index 0000000000..4f64a5e580 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_mcp_server_capabilities_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionMCPServerCapabilitiesType(ModelSimple): + """ + Type of the assertion. + + :param value: If omitted defaults to "mcpServerCapabilities". Must be one of ["mcpServerCapabilities"]. + :type value: str + """ + + allowed_values = { + "mcpServerCapabilities", + } + MCP_SERVER_CAPABILITIES: ClassVar["SyntheticsAssertionMCPServerCapabilitiesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionMCPServerCapabilitiesType.MCP_SERVER_CAPABILITIES = SyntheticsAssertionMCPServerCapabilitiesType("mcpServerCapabilities") diff --git a/datadog_api_client/v1/model/synthetics_assertion_operator.py b/datadog_api_client/v1/model/synthetics_assertion_operator.py new file mode 100644 index 0000000000..e4623bc5c2 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_operator.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionOperator(ModelSimple): + """ + Assertion operator to apply. + + :param value: Must be one of ["contains", "doesNotContain", "is", "isNot", "lessThan", "lessThanOrEqual", "moreThan", "moreThanOrEqual", "matches", "doesNotMatch", "validates", "isInMoreThan", "isInLessThan", "doesNotExist", "isUndefined"]. + :type value: str + """ + + allowed_values = { + "contains", + "doesNotContain", + "is", + "isNot", + "lessThan", + "lessThanOrEqual", + "moreThan", + "moreThanOrEqual", + "matches", + "doesNotMatch", + "validates", + "isInMoreThan", + "isInLessThan", + "doesNotExist", + "isUndefined", + } + CONTAINS: ClassVar["SyntheticsAssertionOperator"] + DOES_NOT_CONTAIN: ClassVar["SyntheticsAssertionOperator"] + IS: ClassVar["SyntheticsAssertionOperator"] + IS_NOT: ClassVar["SyntheticsAssertionOperator"] + LESS_THAN: ClassVar["SyntheticsAssertionOperator"] + LESS_THAN_OR_EQUAL: ClassVar["SyntheticsAssertionOperator"] + MORE_THAN: ClassVar["SyntheticsAssertionOperator"] + MORE_THAN_OR_EQUAL: ClassVar["SyntheticsAssertionOperator"] + MATCHES: ClassVar["SyntheticsAssertionOperator"] + DOES_NOT_MATCH: ClassVar["SyntheticsAssertionOperator"] + VALIDATES: ClassVar["SyntheticsAssertionOperator"] + IS_IN_MORE_DAYS_THAN: ClassVar["SyntheticsAssertionOperator"] + IS_IN_LESS_DAYS_THAN: ClassVar["SyntheticsAssertionOperator"] + DOES_NOT_EXIST: ClassVar["SyntheticsAssertionOperator"] + IS_UNDEFINED: ClassVar["SyntheticsAssertionOperator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionOperator.CONTAINS = SyntheticsAssertionOperator("contains") +SyntheticsAssertionOperator.DOES_NOT_CONTAIN = SyntheticsAssertionOperator("doesNotContain") +SyntheticsAssertionOperator.IS = SyntheticsAssertionOperator("is") +SyntheticsAssertionOperator.IS_NOT = SyntheticsAssertionOperator("isNot") +SyntheticsAssertionOperator.LESS_THAN = SyntheticsAssertionOperator("lessThan") +SyntheticsAssertionOperator.LESS_THAN_OR_EQUAL = SyntheticsAssertionOperator("lessThanOrEqual") +SyntheticsAssertionOperator.MORE_THAN = SyntheticsAssertionOperator("moreThan") +SyntheticsAssertionOperator.MORE_THAN_OR_EQUAL = SyntheticsAssertionOperator("moreThanOrEqual") +SyntheticsAssertionOperator.MATCHES = SyntheticsAssertionOperator("matches") +SyntheticsAssertionOperator.DOES_NOT_MATCH = SyntheticsAssertionOperator("doesNotMatch") +SyntheticsAssertionOperator.VALIDATES = SyntheticsAssertionOperator("validates") +SyntheticsAssertionOperator.IS_IN_MORE_DAYS_THAN = SyntheticsAssertionOperator("isInMoreThan") +SyntheticsAssertionOperator.IS_IN_LESS_DAYS_THAN = SyntheticsAssertionOperator("isInLessThan") +SyntheticsAssertionOperator.DOES_NOT_EXIST = SyntheticsAssertionOperator("doesNotExist") +SyntheticsAssertionOperator.IS_UNDEFINED = SyntheticsAssertionOperator("isUndefined") diff --git a/datadog_api_client/v1/model/synthetics_assertion_target.py b/datadog_api_client/v1/model/synthetics_assertion_target.py new file mode 100644 index 0000000000..0e455419ed --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_target.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_operator import SyntheticsAssertionOperator + from datadog_api_client.v1.model.synthetics_assertion_target_value import SyntheticsAssertionTargetValue + from datadog_api_client.v1.model.synthetics_assertion_timings_scope import SyntheticsAssertionTimingsScope + from datadog_api_client.v1.model.synthetics_assertion_type import SyntheticsAssertionType + +class SyntheticsAssertionTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_operator import SyntheticsAssertionOperator + from datadog_api_client.v1.model.synthetics_assertion_target_value import SyntheticsAssertionTargetValue + from datadog_api_client.v1.model.synthetics_assertion_timings_scope import SyntheticsAssertionTimingsScope + from datadog_api_client.v1.model.synthetics_assertion_type import SyntheticsAssertionType + return { + "operator": (SyntheticsAssertionOperator,), + "_property": (str,), + "target": (SyntheticsAssertionTargetValue,), + "timings_scope": (SyntheticsAssertionTimingsScope,), + "type": (SyntheticsAssertionType,), + } + attribute_map = { + "operator": "operator", + "_property": "property", + "target": "target", + "timings_scope": "timingsScope", + "type": "type", + } + + def __init__(self_, operator: SyntheticsAssertionOperator, target: Union[SyntheticsAssertionTargetValue, float, str], type: SyntheticsAssertionType, _property: Union[str, UnsetType]=unset, timings_scope: Union[SyntheticsAssertionTimingsScope, UnsetType]=unset, **kwargs): + """ + An assertion which uses a simple target. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsAssertionOperator + + :param _property: The associated assertion property. + :type _property: str, optional + + :param target: Value used by the operator in assertions. Can be either a number or string. + :type target: SyntheticsAssertionTargetValue + + :param timings_scope: Timings scope for response time assertions. + :type timings_scope: SyntheticsAssertionTimingsScope, optional + + :param type: Type of the assertion. + :type type: SyntheticsAssertionType + """ + if _property is not unset: + kwargs["_property"] = _property + if timings_scope is not unset: + kwargs["timings_scope"] = timings_scope + super().__init__(kwargs) + + + self_.operator = operator + self_.target = target + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_assertion_target_value.py b/datadog_api_client/v1/model/synthetics_assertion_target_value.py new file mode 100644 index 0000000000..30aa6d039f --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_target_value.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsAssertionTargetValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Value used by the operator in assertions. Can be either a number or string. + """ + 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 + return { + "oneOf": [ + float, + str, + ], + } diff --git a/datadog_api_client/v1/model/synthetics_assertion_timings_scope.py b/datadog_api_client/v1/model/synthetics_assertion_timings_scope.py new file mode 100644 index 0000000000..81077e2172 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_timings_scope.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionTimingsScope(ModelSimple): + """ + Timings scope for response time assertions. + + :param value: Must be one of ["all", "withoutDNS"]. + :type value: str + """ + + allowed_values = { + "all", + "withoutDNS", + } + ALL: ClassVar["SyntheticsAssertionTimingsScope"] + WITHOUT_DNS: ClassVar["SyntheticsAssertionTimingsScope"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionTimingsScope.ALL = SyntheticsAssertionTimingsScope("all") +SyntheticsAssertionTimingsScope.WITHOUT_DNS = SyntheticsAssertionTimingsScope("withoutDNS") diff --git a/datadog_api_client/v1/model/synthetics_assertion_type.py b/datadog_api_client/v1/model/synthetics_assertion_type.py new file mode 100644 index 0000000000..b121a4d84e --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionType(ModelSimple): + """ + Type of the assertion. + + :param value: Must be one of ["body", "header", "statusCode", "certificate", "responseTime", "property", "recordEvery", "recordSome", "tlsVersion", "minTlsVersion", "latency", "packetLossPercentage", "packetsReceived", "networkHop", "receivedMessage", "grpcHealthcheckStatus", "grpcMetadata", "grpcProto", "connection", "multiNetworkHop", "jitter", "mcpToolNameLength", "mcpToolCount"]. + :type value: str + """ + + allowed_values = { + "body", + "header", + "statusCode", + "certificate", + "responseTime", + "property", + "recordEvery", + "recordSome", + "tlsVersion", + "minTlsVersion", + "latency", + "packetLossPercentage", + "packetsReceived", + "networkHop", + "receivedMessage", + "grpcHealthcheckStatus", + "grpcMetadata", + "grpcProto", + "connection", + "multiNetworkHop", + "jitter", + "mcpToolNameLength", + "mcpToolCount", + } + BODY: ClassVar["SyntheticsAssertionType"] + HEADER: ClassVar["SyntheticsAssertionType"] + STATUS_CODE: ClassVar["SyntheticsAssertionType"] + CERTIFICATE: ClassVar["SyntheticsAssertionType"] + RESPONSE_TIME: ClassVar["SyntheticsAssertionType"] + PROPERTY: ClassVar["SyntheticsAssertionType"] + RECORD_EVERY: ClassVar["SyntheticsAssertionType"] + RECORD_SOME: ClassVar["SyntheticsAssertionType"] + TLS_VERSION: ClassVar["SyntheticsAssertionType"] + MIN_TLS_VERSION: ClassVar["SyntheticsAssertionType"] + LATENCY: ClassVar["SyntheticsAssertionType"] + PACKET_LOSS_PERCENTAGE: ClassVar["SyntheticsAssertionType"] + PACKETS_RECEIVED: ClassVar["SyntheticsAssertionType"] + NETWORK_HOP: ClassVar["SyntheticsAssertionType"] + RECEIVED_MESSAGE: ClassVar["SyntheticsAssertionType"] + GRPC_HEALTHCHECK_STATUS: ClassVar["SyntheticsAssertionType"] + GRPC_METADATA: ClassVar["SyntheticsAssertionType"] + GRPC_PROTO: ClassVar["SyntheticsAssertionType"] + CONNECTION: ClassVar["SyntheticsAssertionType"] + MULTI_NETWORK_HOP: ClassVar["SyntheticsAssertionType"] + JITTER: ClassVar["SyntheticsAssertionType"] + MCP_TOOL_NAME_LENGTH: ClassVar["SyntheticsAssertionType"] + MCP_TOOL_COUNT: ClassVar["SyntheticsAssertionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionType.BODY = SyntheticsAssertionType("body") +SyntheticsAssertionType.HEADER = SyntheticsAssertionType("header") +SyntheticsAssertionType.STATUS_CODE = SyntheticsAssertionType("statusCode") +SyntheticsAssertionType.CERTIFICATE = SyntheticsAssertionType("certificate") +SyntheticsAssertionType.RESPONSE_TIME = SyntheticsAssertionType("responseTime") +SyntheticsAssertionType.PROPERTY = SyntheticsAssertionType("property") +SyntheticsAssertionType.RECORD_EVERY = SyntheticsAssertionType("recordEvery") +SyntheticsAssertionType.RECORD_SOME = SyntheticsAssertionType("recordSome") +SyntheticsAssertionType.TLS_VERSION = SyntheticsAssertionType("tlsVersion") +SyntheticsAssertionType.MIN_TLS_VERSION = SyntheticsAssertionType("minTlsVersion") +SyntheticsAssertionType.LATENCY = SyntheticsAssertionType("latency") +SyntheticsAssertionType.PACKET_LOSS_PERCENTAGE = SyntheticsAssertionType("packetLossPercentage") +SyntheticsAssertionType.PACKETS_RECEIVED = SyntheticsAssertionType("packetsReceived") +SyntheticsAssertionType.NETWORK_HOP = SyntheticsAssertionType("networkHop") +SyntheticsAssertionType.RECEIVED_MESSAGE = SyntheticsAssertionType("receivedMessage") +SyntheticsAssertionType.GRPC_HEALTHCHECK_STATUS = SyntheticsAssertionType("grpcHealthcheckStatus") +SyntheticsAssertionType.GRPC_METADATA = SyntheticsAssertionType("grpcMetadata") +SyntheticsAssertionType.GRPC_PROTO = SyntheticsAssertionType("grpcProto") +SyntheticsAssertionType.CONNECTION = SyntheticsAssertionType("connection") +SyntheticsAssertionType.MULTI_NETWORK_HOP = SyntheticsAssertionType("multiNetworkHop") +SyntheticsAssertionType.JITTER = SyntheticsAssertionType("jitter") +SyntheticsAssertionType.MCP_TOOL_NAME_LENGTH = SyntheticsAssertionType("mcpToolNameLength") +SyntheticsAssertionType.MCP_TOOL_COUNT = SyntheticsAssertionType("mcpToolCount") diff --git a/datadog_api_client/v1/model/synthetics_assertion_x_path_operator.py b/datadog_api_client/v1/model/synthetics_assertion_x_path_operator.py new file mode 100644 index 0000000000..e70120d2fc --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_x_path_operator.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsAssertionXPathOperator(ModelSimple): + """ + Assertion operator to apply. + + :param value: If omitted defaults to "validatesXPath". Must be one of ["validatesXPath"]. + :type value: str + """ + + allowed_values = { + "validatesXPath", + } + VALIDATES_X_PATH: ClassVar["SyntheticsAssertionXPathOperator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsAssertionXPathOperator.VALIDATES_X_PATH = SyntheticsAssertionXPathOperator("validatesXPath") diff --git a/datadog_api_client/v1/model/synthetics_assertion_x_path_target.py b/datadog_api_client/v1/model/synthetics_assertion_x_path_target.py new file mode 100644 index 0000000000..34b78edaee --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_x_path_target.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_x_path_operator import SyntheticsAssertionXPathOperator + from datadog_api_client.v1.model.synthetics_assertion_x_path_target_target import SyntheticsAssertionXPathTargetTarget + from datadog_api_client.v1.model.synthetics_assertion_type import SyntheticsAssertionType + +class SyntheticsAssertionXPathTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_x_path_operator import SyntheticsAssertionXPathOperator + from datadog_api_client.v1.model.synthetics_assertion_x_path_target_target import SyntheticsAssertionXPathTargetTarget + from datadog_api_client.v1.model.synthetics_assertion_type import SyntheticsAssertionType + return { + "operator": (SyntheticsAssertionXPathOperator,), + "_property": (str,), + "target": (SyntheticsAssertionXPathTargetTarget,), + "type": (SyntheticsAssertionType,), + } + attribute_map = { + "operator": "operator", + "_property": "property", + "target": "target", + "type": "type", + } + + def __init__(self_, operator: SyntheticsAssertionXPathOperator, type: SyntheticsAssertionType, _property: Union[str, UnsetType]=unset, target: Union[SyntheticsAssertionXPathTargetTarget, UnsetType]=unset, **kwargs): + """ + An assertion for the ``validatesXPath`` operator. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsAssertionXPathOperator + + :param _property: The associated assertion property. + :type _property: str, optional + + :param target: Composed target for ``validatesXPath`` operator. + :type target: SyntheticsAssertionXPathTargetTarget, optional + + :param type: Type of the assertion. + :type type: SyntheticsAssertionType + """ + if _property is not unset: + kwargs["_property"] = _property + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + + self_.operator = operator + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_assertion_x_path_target_target.py b/datadog_api_client/v1/model/synthetics_assertion_x_path_target_target.py new file mode 100644 index 0000000000..b0d5ac95b9 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_assertion_x_path_target_target.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion_target_value import SyntheticsAssertionTargetValue + +class SyntheticsAssertionXPathTargetTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion_target_value import SyntheticsAssertionTargetValue + return { + "operator": (str,), + "target_value": (SyntheticsAssertionTargetValue,), + "x_path": (str,), + } + attribute_map = { + "operator": "operator", + "target_value": "targetValue", + "x_path": "xPath", + } + + def __init__(self_, operator: Union[str, UnsetType]=unset, target_value: Union[SyntheticsAssertionTargetValue, float, str, UnsetType]=unset, x_path: Union[str, UnsetType]=unset, **kwargs): + """ + Composed target for ``validatesXPath`` operator. + + :param operator: The specific operator to use on the path. + :type operator: str, optional + + :param target_value: Value used by the operator in assertions. Can be either a number or string. + :type target_value: SyntheticsAssertionTargetValue, optional + + :param x_path: The X path to assert. + :type x_path: str, optional + """ + if operator is not unset: + kwargs["operator"] = operator + if target_value is not unset: + kwargs["target_value"] = target_value + if x_path is not unset: + kwargs["x_path"] = x_path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_basic_auth.py b/datadog_api_client/v1/model/synthetics_basic_auth.py new file mode 100644 index 0000000000..7844e5b33d --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth.py @@ -0,0 +1,134 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsBasicAuth(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Object to handle basic authentication when performing the test. + + :param password: Password to use for the basic authentication. + :type password: str, optional + + :param type: The type of basic authentication to use when performing the test. + :type type: SyntheticsBasicAuthWebType, optional + + :param username: Username to use for the basic authentication. + :type username: str, optional + + :param access_key: Access key for the `SIGV4` authentication. + :type access_key: str + + :param region: Region for the `SIGV4` authentication. + :type region: str, optional + + :param secret_key: Secret key for the `SIGV4` authentication. + :type secret_key: str + + :param service_name: Service name for the `SIGV4` authentication. + :type service_name: str, optional + + :param session_token: Session token for the `SIGV4` authentication. + :type session_token: str, optional + + :param domain: Domain for the authentication to use when performing the test. + :type domain: str, optional + + :param workstation: Workstation for the authentication to use when performing the test. + :type workstation: str, optional + + :param access_token_url: Access token URL to use when performing the authentication. + :type access_token_url: str + + :param audience: Audience to use when performing the authentication. + :type audience: str, optional + + :param client_id: Client ID to use when performing the authentication. + :type client_id: str + + :param client_secret: Client secret to use when performing the authentication. + :type client_secret: str + + :param resource: Resource to use when performing the authentication. + :type resource: str, optional + + :param scope: Scope to use when performing the authentication. + :type scope: str, optional + + :param token_api_authentication: Type of token to use when performing the authentication. + :type token_api_authentication: SyntheticsBasicAuthOauthTokenApiAuthentication + + :param add_claims: Standard JWT claims to automatically inject. + :type add_claims: SyntheticsBasicAuthJWTAddClaims, optional + + :param algorithm: Algorithm to use for the JWT authentication. + :type algorithm: SyntheticsBasicAuthJWTAlgorithm + + :param expires_in: Token time-to-live in seconds. + :type expires_in: int, optional + + :param header: Custom JWT header as a JSON string. + :type header: str, optional + + :param payload: JWT claims as a JSON string. + :type payload: str + + :param secret: Signing key for the JWT authentication. Use the shared secret for `HS256` + or the private key (PEM format) for `RS256` and `ES256`. + :type secret: str + + :param token_prefix: Prefix added before the token in the `Authorization` header. Defaults to `Bearer`. + :type token_prefix: str, 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.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + return { + "oneOf": [ + SyntheticsBasicAuthWeb, + SyntheticsBasicAuthSigv4, + SyntheticsBasicAuthNTLM, + SyntheticsBasicAuthDigest, + SyntheticsBasicAuthOauthClient, + SyntheticsBasicAuthOauthROP, + SyntheticsBasicAuthJWT, + ], + } diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_digest.py b/datadog_api_client/v1/model/synthetics_basic_auth_digest.py new file mode 100644 index 0000000000..a00c18cfba --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_digest.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_basic_auth_digest_type import SyntheticsBasicAuthDigestType + +class SyntheticsBasicAuthDigest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_basic_auth_digest_type import SyntheticsBasicAuthDigestType + return { + "password": (str,), + "type": (SyntheticsBasicAuthDigestType,), + "username": (str,), + } + attribute_map = { + "password": "password", + "type": "type", + "username": "username", + } + + def __init__(self_, password: str, type: SyntheticsBasicAuthDigestType, username: str, **kwargs): + """ + Object to handle digest authentication when performing the test. + + :param password: Password to use for the digest authentication. + :type password: str + + :param type: The type of basic authentication to use when performing the test. + :type type: SyntheticsBasicAuthDigestType + + :param username: Username to use for the digest authentication. + :type username: str + """ + super().__init__(kwargs) + + + self_.password = password + self_.type = type + self_.username = username diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_digest_type.py b/datadog_api_client/v1/model/synthetics_basic_auth_digest_type.py new file mode 100644 index 0000000000..e648f7dcc2 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_digest_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBasicAuthDigestType(ModelSimple): + """ + The type of basic authentication to use when performing the test. + + :param value: If omitted defaults to "digest". Must be one of ["digest"]. + :type value: str + """ + + allowed_values = { + "digest", + } + DIGEST: ClassVar["SyntheticsBasicAuthDigestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBasicAuthDigestType.DIGEST = SyntheticsBasicAuthDigestType("digest") diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_jwt.py b/datadog_api_client/v1/model/synthetics_basic_auth_jwt.py new file mode 100644 index 0000000000..69afe06971 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_jwt.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_basic_auth_jwt_add_claims import SyntheticsBasicAuthJWTAddClaims + from datadog_api_client.v1.model.synthetics_basic_auth_jwt_algorithm import SyntheticsBasicAuthJWTAlgorithm + from datadog_api_client.v1.model.synthetics_basic_auth_jwt_type import SyntheticsBasicAuthJWTType + +class SyntheticsBasicAuthJWT(ModelNormal): + validations = { + "expires_in": { + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_basic_auth_jwt_add_claims import SyntheticsBasicAuthJWTAddClaims + from datadog_api_client.v1.model.synthetics_basic_auth_jwt_algorithm import SyntheticsBasicAuthJWTAlgorithm + from datadog_api_client.v1.model.synthetics_basic_auth_jwt_type import SyntheticsBasicAuthJWTType + return { + "add_claims": (SyntheticsBasicAuthJWTAddClaims,), + "algorithm": (SyntheticsBasicAuthJWTAlgorithm,), + "expires_in": (int,), + "header": (str,), + "payload": (str,), + "secret": (str,), + "token_prefix": (str,), + "type": (SyntheticsBasicAuthJWTType,), + } + attribute_map = { + "add_claims": "addClaims", + "algorithm": "algorithm", + "expires_in": "expiresIn", + "header": "header", + "payload": "payload", + "secret": "secret", + "token_prefix": "tokenPrefix", + "type": "type", + } + + def __init__(self_, algorithm: SyntheticsBasicAuthJWTAlgorithm, payload: str, secret: str, type: SyntheticsBasicAuthJWTType, add_claims: Union[SyntheticsBasicAuthJWTAddClaims, UnsetType]=unset, expires_in: Union[int, UnsetType]=unset, header: Union[str, UnsetType]=unset, token_prefix: Union[str, UnsetType]=unset, **kwargs): + """ + Object to handle JWT authentication when performing the test. + + :param add_claims: Standard JWT claims to automatically inject. + :type add_claims: SyntheticsBasicAuthJWTAddClaims, optional + + :param algorithm: Algorithm to use for the JWT authentication. + :type algorithm: SyntheticsBasicAuthJWTAlgorithm + + :param expires_in: Token time-to-live in seconds. + :type expires_in: int, optional + + :param header: Custom JWT header as a JSON string. + :type header: str, optional + + :param payload: JWT claims as a JSON string. + :type payload: str + + :param secret: Signing key for the JWT authentication. Use the shared secret for ``HS256`` + or the private key (PEM format) for ``RS256`` and ``ES256``. + :type secret: str + + :param token_prefix: Prefix added before the token in the ``Authorization`` header. Defaults to ``Bearer``. + :type token_prefix: str, optional + + :param type: The type of authentication to use when performing the test. + :type type: SyntheticsBasicAuthJWTType + """ + if add_claims is not unset: + kwargs["add_claims"] = add_claims + if expires_in is not unset: + kwargs["expires_in"] = expires_in + if header is not unset: + kwargs["header"] = header + if token_prefix is not unset: + kwargs["token_prefix"] = token_prefix + super().__init__(kwargs) + + + self_.algorithm = algorithm + self_.payload = payload + self_.secret = secret + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_jwt_add_claims.py b/datadog_api_client/v1/model/synthetics_basic_auth_jwt_add_claims.py new file mode 100644 index 0000000000..3e00853402 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_jwt_add_claims.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsBasicAuthJWTAddClaims(ModelNormal): + @cached_property + def openapi_types(_): + return { + "exp": (bool,), + "iat": (bool,), + } + attribute_map = { + "exp": "exp", + "iat": "iat", + } + + def __init__(self_, exp: Union[bool, UnsetType]=unset, iat: Union[bool, UnsetType]=unset, **kwargs): + """ + Standard JWT claims to automatically inject. + + :param exp: Whether to inject the ``exp`` (expiration) claim. + :type exp: bool, optional + + :param iat: Whether to inject the ``iat`` (issued at) claim. + :type iat: bool, optional + """ + if exp is not unset: + kwargs["exp"] = exp + if iat is not unset: + kwargs["iat"] = iat + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_jwt_algorithm.py b/datadog_api_client/v1/model/synthetics_basic_auth_jwt_algorithm.py new file mode 100644 index 0000000000..7b7d277de2 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_jwt_algorithm.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBasicAuthJWTAlgorithm(ModelSimple): + """ + Algorithm to use for the JWT authentication. + + :param value: Must be one of ["HS256", "RS256", "ES256"]. + :type value: str + """ + + allowed_values = { + "HS256", + "RS256", + "ES256", + } + HS256: ClassVar["SyntheticsBasicAuthJWTAlgorithm"] + RS256: ClassVar["SyntheticsBasicAuthJWTAlgorithm"] + ES256: ClassVar["SyntheticsBasicAuthJWTAlgorithm"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBasicAuthJWTAlgorithm.HS256 = SyntheticsBasicAuthJWTAlgorithm("HS256") +SyntheticsBasicAuthJWTAlgorithm.RS256 = SyntheticsBasicAuthJWTAlgorithm("RS256") +SyntheticsBasicAuthJWTAlgorithm.ES256 = SyntheticsBasicAuthJWTAlgorithm("ES256") diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_jwt_type.py b/datadog_api_client/v1/model/synthetics_basic_auth_jwt_type.py new file mode 100644 index 0000000000..f1880f3e2d --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_jwt_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBasicAuthJWTType(ModelSimple): + """ + The type of authentication to use when performing the test. + + :param value: If omitted defaults to "jwt". Must be one of ["jwt"]. + :type value: str + """ + + allowed_values = { + "jwt", + } + JWT: ClassVar["SyntheticsBasicAuthJWTType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBasicAuthJWTType.JWT = SyntheticsBasicAuthJWTType("jwt") diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_ntlm.py b/datadog_api_client/v1/model/synthetics_basic_auth_ntlm.py new file mode 100644 index 0000000000..7f81120c7a --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_ntlm.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm_type import SyntheticsBasicAuthNTLMType + +class SyntheticsBasicAuthNTLM(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm_type import SyntheticsBasicAuthNTLMType + return { + "domain": (str,), + "password": (str,), + "type": (SyntheticsBasicAuthNTLMType,), + "username": (str,), + "workstation": (str,), + } + attribute_map = { + "domain": "domain", + "password": "password", + "type": "type", + "username": "username", + "workstation": "workstation", + } + + def __init__(self_, type: SyntheticsBasicAuthNTLMType, domain: Union[str, UnsetType]=unset, password: Union[str, UnsetType]=unset, username: Union[str, UnsetType]=unset, workstation: Union[str, UnsetType]=unset, **kwargs): + """ + Object to handle ``NTLM`` authentication when performing the test. + + :param domain: Domain for the authentication to use when performing the test. + :type domain: str, optional + + :param password: Password for the authentication to use when performing the test. + :type password: str, optional + + :param type: The type of authentication to use when performing the test. + :type type: SyntheticsBasicAuthNTLMType + + :param username: Username for the authentication to use when performing the test. + :type username: str, optional + + :param workstation: Workstation for the authentication to use when performing the test. + :type workstation: str, optional + """ + if domain is not unset: + kwargs["domain"] = domain + if password is not unset: + kwargs["password"] = password + if username is not unset: + kwargs["username"] = username + if workstation is not unset: + kwargs["workstation"] = workstation + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_ntlm_type.py b/datadog_api_client/v1/model/synthetics_basic_auth_ntlm_type.py new file mode 100644 index 0000000000..4001a110cb --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_ntlm_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBasicAuthNTLMType(ModelSimple): + """ + The type of authentication to use when performing the test. + + :param value: If omitted defaults to "ntlm". Must be one of ["ntlm"]. + :type value: str + """ + + allowed_values = { + "ntlm", + } + NTLM: ClassVar["SyntheticsBasicAuthNTLMType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBasicAuthNTLMType.NTLM = SyntheticsBasicAuthNTLMType("ntlm") diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_oauth_client.py b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_client.py new file mode 100644 index 0000000000..71d2367668 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_client.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_token_api_authentication import SyntheticsBasicAuthOauthTokenApiAuthentication + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client_type import SyntheticsBasicAuthOauthClientType + +class SyntheticsBasicAuthOauthClient(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_token_api_authentication import SyntheticsBasicAuthOauthTokenApiAuthentication + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client_type import SyntheticsBasicAuthOauthClientType + return { + "access_token_url": (str,), + "audience": (str,), + "client_id": (str,), + "client_secret": (str,), + "resource": (str,), + "scope": (str,), + "token_api_authentication": (SyntheticsBasicAuthOauthTokenApiAuthentication,), + "type": (SyntheticsBasicAuthOauthClientType,), + } + attribute_map = { + "access_token_url": "accessTokenUrl", + "audience": "audience", + "client_id": "clientId", + "client_secret": "clientSecret", + "resource": "resource", + "scope": "scope", + "token_api_authentication": "tokenApiAuthentication", + "type": "type", + } + + def __init__(self_, access_token_url: str, client_id: str, client_secret: str, token_api_authentication: SyntheticsBasicAuthOauthTokenApiAuthentication, type: SyntheticsBasicAuthOauthClientType, audience: Union[str, UnsetType]=unset, resource: Union[str, UnsetType]=unset, scope: Union[str, UnsetType]=unset, **kwargs): + """ + Object to handle ``oauth client`` authentication when performing the test. + + :param access_token_url: Access token URL to use when performing the authentication. + :type access_token_url: str + + :param audience: Audience to use when performing the authentication. + :type audience: str, optional + + :param client_id: Client ID to use when performing the authentication. + :type client_id: str + + :param client_secret: Client secret to use when performing the authentication. + :type client_secret: str + + :param resource: Resource to use when performing the authentication. + :type resource: str, optional + + :param scope: Scope to use when performing the authentication. + :type scope: str, optional + + :param token_api_authentication: Type of token to use when performing the authentication. + :type token_api_authentication: SyntheticsBasicAuthOauthTokenApiAuthentication + + :param type: The type of basic authentication to use when performing the test. + :type type: SyntheticsBasicAuthOauthClientType + """ + if audience is not unset: + kwargs["audience"] = audience + if resource is not unset: + kwargs["resource"] = resource + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.access_token_url = access_token_url + self_.client_id = client_id + self_.client_secret = client_secret + self_.token_api_authentication = token_api_authentication + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_oauth_client_type.py b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_client_type.py new file mode 100644 index 0000000000..0b19251b9c --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_client_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBasicAuthOauthClientType(ModelSimple): + """ + The type of basic authentication to use when performing the test. + + :param value: If omitted defaults to "oauth-client". Must be one of ["oauth-client"]. + :type value: str + """ + + allowed_values = { + "oauth-client", + } + OAUTH_CLIENT: ClassVar["SyntheticsBasicAuthOauthClientType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBasicAuthOauthClientType.OAUTH_CLIENT = SyntheticsBasicAuthOauthClientType("oauth-client") diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_oauth_rop.py b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_rop.py new file mode 100644 index 0000000000..17f6d5e6c7 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_rop.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_token_api_authentication import SyntheticsBasicAuthOauthTokenApiAuthentication + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop_type import SyntheticsBasicAuthOauthROPType + +class SyntheticsBasicAuthOauthROP(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_token_api_authentication import SyntheticsBasicAuthOauthTokenApiAuthentication + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop_type import SyntheticsBasicAuthOauthROPType + return { + "access_token_url": (str,), + "audience": (str,), + "client_id": (str,), + "client_secret": (str,), + "password": (str,), + "resource": (str,), + "scope": (str,), + "token_api_authentication": (SyntheticsBasicAuthOauthTokenApiAuthentication,), + "type": (SyntheticsBasicAuthOauthROPType,), + "username": (str,), + } + attribute_map = { + "access_token_url": "accessTokenUrl", + "audience": "audience", + "client_id": "clientId", + "client_secret": "clientSecret", + "password": "password", + "resource": "resource", + "scope": "scope", + "token_api_authentication": "tokenApiAuthentication", + "type": "type", + "username": "username", + } + + def __init__(self_, access_token_url: str, password: str, token_api_authentication: SyntheticsBasicAuthOauthTokenApiAuthentication, type: SyntheticsBasicAuthOauthROPType, username: str, audience: Union[str, UnsetType]=unset, client_id: Union[str, UnsetType]=unset, client_secret: Union[str, UnsetType]=unset, resource: Union[str, UnsetType]=unset, scope: Union[str, UnsetType]=unset, **kwargs): + """ + Object to handle ``oauth rop`` authentication when performing the test. + + :param access_token_url: Access token URL to use when performing the authentication. + :type access_token_url: str + + :param audience: Audience to use when performing the authentication. + :type audience: str, optional + + :param client_id: Client ID to use when performing the authentication. + :type client_id: str, optional + + :param client_secret: Client secret to use when performing the authentication. + :type client_secret: str, optional + + :param password: Password to use when performing the authentication. + :type password: str + + :param resource: Resource to use when performing the authentication. + :type resource: str, optional + + :param scope: Scope to use when performing the authentication. + :type scope: str, optional + + :param token_api_authentication: Type of token to use when performing the authentication. + :type token_api_authentication: SyntheticsBasicAuthOauthTokenApiAuthentication + + :param type: The type of basic authentication to use when performing the test. + :type type: SyntheticsBasicAuthOauthROPType + + :param username: Username to use when performing the authentication. + :type username: str + """ + if audience is not unset: + kwargs["audience"] = audience + if client_id is not unset: + kwargs["client_id"] = client_id + if client_secret is not unset: + kwargs["client_secret"] = client_secret + if resource is not unset: + kwargs["resource"] = resource + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.access_token_url = access_token_url + self_.password = password + self_.token_api_authentication = token_api_authentication + self_.type = type + self_.username = username diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_oauth_rop_type.py b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_rop_type.py new file mode 100644 index 0000000000..8a6c884a1a --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_rop_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBasicAuthOauthROPType(ModelSimple): + """ + The type of basic authentication to use when performing the test. + + :param value: If omitted defaults to "oauth-rop". Must be one of ["oauth-rop"]. + :type value: str + """ + + allowed_values = { + "oauth-rop", + } + OAUTH_ROP: ClassVar["SyntheticsBasicAuthOauthROPType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBasicAuthOauthROPType.OAUTH_ROP = SyntheticsBasicAuthOauthROPType("oauth-rop") diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_oauth_token_api_authentication.py b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_token_api_authentication.py new file mode 100644 index 0000000000..878c92416a --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_oauth_token_api_authentication.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBasicAuthOauthTokenApiAuthentication(ModelSimple): + """ + Type of token to use when performing the authentication. + + :param value: Must be one of ["header", "body"]. + :type value: str + """ + + allowed_values = { + "header", + "body", + } + HEADER: ClassVar["SyntheticsBasicAuthOauthTokenApiAuthentication"] + BODY: ClassVar["SyntheticsBasicAuthOauthTokenApiAuthentication"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBasicAuthOauthTokenApiAuthentication.HEADER = SyntheticsBasicAuthOauthTokenApiAuthentication("header") +SyntheticsBasicAuthOauthTokenApiAuthentication.BODY = SyntheticsBasicAuthOauthTokenApiAuthentication("body") diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_sigv4.py b/datadog_api_client/v1/model/synthetics_basic_auth_sigv4.py new file mode 100644 index 0000000000..b50fa914e5 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_sigv4.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4_type import SyntheticsBasicAuthSigv4Type + +class SyntheticsBasicAuthSigv4(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4_type import SyntheticsBasicAuthSigv4Type + return { + "access_key": (str,), + "region": (str,), + "secret_key": (str,), + "service_name": (str,), + "session_token": (str,), + "type": (SyntheticsBasicAuthSigv4Type,), + } + attribute_map = { + "access_key": "accessKey", + "region": "region", + "secret_key": "secretKey", + "service_name": "serviceName", + "session_token": "sessionToken", + "type": "type", + } + + def __init__(self_, access_key: str, secret_key: str, type: SyntheticsBasicAuthSigv4Type, region: Union[str, UnsetType]=unset, service_name: Union[str, UnsetType]=unset, session_token: Union[str, UnsetType]=unset, **kwargs): + """ + Object to handle ``SIGV4`` authentication when performing the test. + + :param access_key: Access key for the ``SIGV4`` authentication. + :type access_key: str + + :param region: Region for the ``SIGV4`` authentication. + :type region: str, optional + + :param secret_key: Secret key for the ``SIGV4`` authentication. + :type secret_key: str + + :param service_name: Service name for the ``SIGV4`` authentication. + :type service_name: str, optional + + :param session_token: Session token for the ``SIGV4`` authentication. + :type session_token: str, optional + + :param type: The type of authentication to use when performing the test. + :type type: SyntheticsBasicAuthSigv4Type + """ + if region is not unset: + kwargs["region"] = region + if service_name is not unset: + kwargs["service_name"] = service_name + if session_token is not unset: + kwargs["session_token"] = session_token + super().__init__(kwargs) + + + self_.access_key = access_key + self_.secret_key = secret_key + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_sigv4_type.py b/datadog_api_client/v1/model/synthetics_basic_auth_sigv4_type.py new file mode 100644 index 0000000000..1771ecfd6a --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_sigv4_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBasicAuthSigv4Type(ModelSimple): + """ + The type of authentication to use when performing the test. + + :param value: If omitted defaults to "sigv4". Must be one of ["sigv4"]. + :type value: str + """ + + allowed_values = { + "sigv4", + } + SIGV4: ClassVar["SyntheticsBasicAuthSigv4Type"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBasicAuthSigv4Type.SIGV4 = SyntheticsBasicAuthSigv4Type("sigv4") diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_web.py b/datadog_api_client/v1/model/synthetics_basic_auth_web.py new file mode 100644 index 0000000000..1ad20f41cf --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_web.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_basic_auth_web_type import SyntheticsBasicAuthWebType + +class SyntheticsBasicAuthWeb(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_basic_auth_web_type import SyntheticsBasicAuthWebType + return { + "password": (str,), + "type": (SyntheticsBasicAuthWebType,), + "username": (str,), + } + attribute_map = { + "password": "password", + "type": "type", + "username": "username", + } + + def __init__(self_, password: Union[str, UnsetType]=unset, type: Union[SyntheticsBasicAuthWebType, UnsetType]=unset, username: Union[str, UnsetType]=unset, **kwargs): + """ + Object to handle basic authentication when performing the test. + + :param password: Password to use for the basic authentication. + :type password: str, optional + + :param type: The type of basic authentication to use when performing the test. + :type type: SyntheticsBasicAuthWebType, optional + + :param username: Username to use for the basic authentication. + :type username: str, optional + """ + if password is not unset: + kwargs["password"] = password + if type is not unset: + kwargs["type"] = type + if username is not unset: + kwargs["username"] = username + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_basic_auth_web_type.py b/datadog_api_client/v1/model/synthetics_basic_auth_web_type.py new file mode 100644 index 0000000000..9c6ab1d322 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_basic_auth_web_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBasicAuthWebType(ModelSimple): + """ + The type of basic authentication to use when performing the test. + + :param value: If omitted defaults to "web". Must be one of ["web"]. + :type value: str + """ + + allowed_values = { + "web", + } + WEB: ClassVar["SyntheticsBasicAuthWebType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBasicAuthWebType.WEB = SyntheticsBasicAuthWebType("web") diff --git a/datadog_api_client/v1/model/synthetics_batch_details.py b/datadog_api_client/v1/model/synthetics_batch_details.py new file mode 100644 index 0000000000..802f8cf387 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_batch_details.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_batch_details_data import SyntheticsBatchDetailsData + +class SyntheticsBatchDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_batch_details_data import SyntheticsBatchDetailsData + return { + "data": (SyntheticsBatchDetailsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SyntheticsBatchDetailsData, UnsetType]=unset, **kwargs): + """ + Details about a batch response. + + :param data: Wrapper object that contains the details of a batch. + :type data: SyntheticsBatchDetailsData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_batch_details_data.py b/datadog_api_client/v1/model/synthetics_batch_details_data.py new file mode 100644 index 0000000000..22413ba53b --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_batch_details_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_ci_batch_metadata import SyntheticsCIBatchMetadata + from datadog_api_client.v1.model.synthetics_batch_result import SyntheticsBatchResult + from datadog_api_client.v1.model.synthetics_batch_status import SyntheticsBatchStatus + +class SyntheticsBatchDetailsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_ci_batch_metadata import SyntheticsCIBatchMetadata + from datadog_api_client.v1.model.synthetics_batch_result import SyntheticsBatchResult + from datadog_api_client.v1.model.synthetics_batch_status import SyntheticsBatchStatus + return { + "metadata": (SyntheticsCIBatchMetadata,), + "results": ([SyntheticsBatchResult],), + "status": (SyntheticsBatchStatus,), + } + attribute_map = { + "metadata": "metadata", + "results": "results", + "status": "status", + } + + def __init__(self_, metadata: Union[SyntheticsCIBatchMetadata, UnsetType]=unset, results: Union[List[SyntheticsBatchResult], UnsetType]=unset, status: Union[SyntheticsBatchStatus, UnsetType]=unset, **kwargs): + """ + Wrapper object that contains the details of a batch. + + :param metadata: Metadata for the Synthetic tests run. + :type metadata: SyntheticsCIBatchMetadata, optional + + :param results: List of results for the batch. + :type results: [SyntheticsBatchResult], optional + + :param status: Determines whether the batch has passed, failed, or is in progress. + :type status: SyntheticsBatchStatus, optional + """ + if metadata is not unset: + kwargs["metadata"] = metadata + if results is not unset: + kwargs["results"] = results + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_batch_result.py b/datadog_api_client/v1/model/synthetics_batch_result.py new file mode 100644 index 0000000000..b410ca2ebe --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_batch_result.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_execution_rule import SyntheticsTestExecutionRule + from datadog_api_client.v1.model.synthetics_batch_status import SyntheticsBatchStatus + from datadog_api_client.v1.model.synthetics_test_details_type import SyntheticsTestDetailsType + +class SyntheticsBatchResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_execution_rule import SyntheticsTestExecutionRule + from datadog_api_client.v1.model.synthetics_batch_status import SyntheticsBatchStatus + from datadog_api_client.v1.model.synthetics_test_details_type import SyntheticsTestDetailsType + return { + "device": (str,), + "duration": (float,), + "execution_rule": (SyntheticsTestExecutionRule,), + "location": (str,), + "result_id": (str,), + "retries": (float,), + "status": (SyntheticsBatchStatus,), + "test_name": (str,), + "test_public_id": (str,), + "test_type": (SyntheticsTestDetailsType,), + } + attribute_map = { + "device": "device", + "duration": "duration", + "execution_rule": "execution_rule", + "location": "location", + "result_id": "result_id", + "retries": "retries", + "status": "status", + "test_name": "test_name", + "test_public_id": "test_public_id", + "test_type": "test_type", + } + + def __init__(self_, device: Union[str, UnsetType]=unset, duration: Union[float, UnsetType]=unset, execution_rule: Union[SyntheticsTestExecutionRule, UnsetType]=unset, location: Union[str, UnsetType]=unset, result_id: Union[str, UnsetType]=unset, retries: Union[float, UnsetType]=unset, status: Union[SyntheticsBatchStatus, UnsetType]=unset, test_name: Union[str, UnsetType]=unset, test_public_id: Union[str, UnsetType]=unset, test_type: Union[SyntheticsTestDetailsType, UnsetType]=unset, **kwargs): + """ + Object with the results of a Synthetic batch. + + :param device: The device ID. + :type device: str, optional + + :param duration: Total duration in millisecond of the test. + :type duration: float, optional + + :param execution_rule: Execution rule for a Synthetic test. + :type execution_rule: SyntheticsTestExecutionRule, optional + + :param location: Name of the location. + :type location: str, optional + + :param result_id: The ID of the result to get. + :type result_id: str, optional + + :param retries: Number of times this result has been retried. + :type retries: float, optional + + :param status: Determines whether the batch has passed, failed, or is in progress. + :type status: SyntheticsBatchStatus, optional + + :param test_name: Name of the test. + :type test_name: str, optional + + :param test_public_id: The public ID of the Synthetic test. + :type test_public_id: str, optional + + :param test_type: Type of the Synthetic test. + :type test_type: SyntheticsTestDetailsType, optional + """ + if device is not unset: + kwargs["device"] = device + if duration is not unset: + kwargs["duration"] = duration + if execution_rule is not unset: + kwargs["execution_rule"] = execution_rule + if location is not unset: + kwargs["location"] = location + if result_id is not unset: + kwargs["result_id"] = result_id + if retries is not unset: + kwargs["retries"] = retries + if status is not unset: + kwargs["status"] = status + if test_name is not unset: + kwargs["test_name"] = test_name + if test_public_id is not unset: + kwargs["test_public_id"] = test_public_id + if test_type is not unset: + kwargs["test_type"] = test_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_batch_status.py b/datadog_api_client/v1/model/synthetics_batch_status.py new file mode 100644 index 0000000000..28338d5a40 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_batch_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBatchStatus(ModelSimple): + """ + Determines whether the batch has passed, failed, or is in progress. + + :param value: Must be one of ["passed", "skipped", "failed"]. + :type value: str + """ + + allowed_values = { + "passed", + "skipped", + "failed", + } + PASSED: ClassVar["SyntheticsBatchStatus"] + SKIPPED: ClassVar["SyntheticsBatchStatus"] + FAILED: ClassVar["SyntheticsBatchStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBatchStatus.PASSED = SyntheticsBatchStatus("passed") +SyntheticsBatchStatus.SKIPPED = SyntheticsBatchStatus("skipped") +SyntheticsBatchStatus.FAILED = SyntheticsBatchStatus("failed") diff --git a/datadog_api_client/v1/model/synthetics_browser_error.py b/datadog_api_client/v1/model/synthetics_browser_error.py new file mode 100644 index 0000000000..1972484008 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_error.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_browser_error_type import SyntheticsBrowserErrorType + +class SyntheticsBrowserError(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_browser_error_type import SyntheticsBrowserErrorType + return { + "description": (str,), + "name": (str,), + "status": (int,), + "type": (SyntheticsBrowserErrorType,), + } + attribute_map = { + "description": "description", + "name": "name", + "status": "status", + "type": "type", + } + + def __init__(self_, description: str, name: str, type: SyntheticsBrowserErrorType, status: Union[int, UnsetType]=unset, **kwargs): + """ + Error response object for a browser test. + + :param description: Description of the error. + :type description: str + + :param name: Name of the error. + :type name: str + + :param status: Status Code of the error. + :type status: int, optional + + :param type: Error type returned by a browser test. + :type type: SyntheticsBrowserErrorType + """ + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + + self_.description = description + self_.name = name + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_browser_error_type.py b/datadog_api_client/v1/model/synthetics_browser_error_type.py new file mode 100644 index 0000000000..15decf49a7 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_error_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBrowserErrorType(ModelSimple): + """ + Error type returned by a browser test. + + :param value: Must be one of ["network", "js"]. + :type value: str + """ + + allowed_values = { + "network", + "js", + } + NETWORK: ClassVar["SyntheticsBrowserErrorType"] + JS: ClassVar["SyntheticsBrowserErrorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBrowserErrorType.NETWORK = SyntheticsBrowserErrorType("network") +SyntheticsBrowserErrorType.JS = SyntheticsBrowserErrorType("js") diff --git a/datadog_api_client/v1/model/synthetics_browser_test.py b/datadog_api_client/v1/model/synthetics_browser_test.py new file mode 100644 index 0000000000..e718f31408 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test.py @@ -0,0 +1,141 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_browser_test_config import SyntheticsBrowserTestConfig + from datadog_api_client.v1.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_step import SyntheticsStep + from datadog_api_client.v1.model.synthetics_browser_test_type import SyntheticsBrowserTestType + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsBrowserTest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_browser_test_config import SyntheticsBrowserTestConfig + from datadog_api_client.v1.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_step import SyntheticsStep + from datadog_api_client.v1.model.synthetics_browser_test_type import SyntheticsBrowserTestType + return { + "config": (SyntheticsBrowserTestConfig,), + "locations": ([str],), + "message": (str,), + "monitor_id": (int,), + "name": (str,), + "options": (SyntheticsTestOptions,), + "public_id": (str,), + "status": (SyntheticsTestPauseStatus,), + "steps": ([SyntheticsStep],), + "tags": ([str],), + "type": (SyntheticsBrowserTestType,), + } + attribute_map = { + "config": "config", + "locations": "locations", + "message": "message", + "monitor_id": "monitor_id", + "name": "name", + "options": "options", + "public_id": "public_id", + "status": "status", + "steps": "steps", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "monitor_id", + "public_id", + } + + def __init__(self_, config: SyntheticsBrowserTestConfig, locations: List[str], message: str, name: str, options: SyntheticsTestOptions, type: SyntheticsBrowserTestType, monitor_id: Union[int, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestPauseStatus, UnsetType]=unset, steps: Union[List[SyntheticsStep], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing details about a Synthetic browser test. + + :param config: Configuration object for a Synthetic browser test. + :type config: SyntheticsBrowserTestConfig + + :param locations: Array of locations used to run the test. + :type locations: [str] + + :param message: Notification message associated with the test. Message can either be text or an empty string. + :type message: str + + :param monitor_id: The associated monitor ID. + :type monitor_id: int, optional + + :param name: Name of the test. + :type name: str + + :param options: Object describing the extra options for a Synthetic test. + :type options: SyntheticsTestOptions + + :param public_id: The public ID of the test. + :type public_id: str, optional + + :param status: Define whether you want to start ( ``live`` ) or pause ( ``paused`` ) a + Synthetic test. + :type status: SyntheticsTestPauseStatus, optional + + :param steps: Array of steps for the test. + :type steps: [SyntheticsStep], optional + + :param tags: Array of tags attached to the test. + :type tags: [str], optional + + :param type: Type of the Synthetic test, ``browser``. + :type type: SyntheticsBrowserTestType + """ + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if public_id is not unset: + kwargs["public_id"] = public_id + if status is not unset: + kwargs["status"] = status + if steps is not unset: + kwargs["steps"] = steps + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.config = config + self_.locations = locations + self_.message = message + self_.name = name + self_.options = options + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_browser_test_config.py b/datadog_api_client/v1/model/synthetics_browser_test_config.py new file mode 100644 index 0000000000..48ab8c1500 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_config.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion import SyntheticsAssertion + from datadog_api_client.v1.model.synthetics_config_variable import SyntheticsConfigVariable + from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest + from datadog_api_client.v1.model.synthetics_browser_variable import SyntheticsBrowserVariable + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsBrowserTestConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion import SyntheticsAssertion + from datadog_api_client.v1.model.synthetics_config_variable import SyntheticsConfigVariable + from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest + from datadog_api_client.v1.model.synthetics_browser_variable import SyntheticsBrowserVariable + return { + "assertions": ([SyntheticsAssertion],), + "config_variables": ([SyntheticsConfigVariable],), + "request": (SyntheticsTestRequest,), + "set_cookie": (str,), + "variables": ([SyntheticsBrowserVariable],), + } + attribute_map = { + "assertions": "assertions", + "config_variables": "configVariables", + "request": "request", + "set_cookie": "setCookie", + "variables": "variables", + } + + def __init__(self_, request: SyntheticsTestRequest, config_variables: Union[List[SyntheticsConfigVariable], UnsetType]=unset, set_cookie: Union[str, UnsetType]=unset, variables: Union[List[SyntheticsBrowserVariable], UnsetType]=unset, **kwargs): + """ + Configuration object for a Synthetic browser test. + + :param assertions: Array of assertions used for the test. + :type assertions: [SyntheticsAssertion] + + :param config_variables: Array of variables used for the test. + :type config_variables: [SyntheticsConfigVariable], optional + + :param request: Object describing the Synthetic test request. + :type request: SyntheticsTestRequest + + :param set_cookie: Cookies to be used for the request, using the `Set-Cookie `_ syntax. + :type set_cookie: str, optional + + :param variables: Array of variables used for the test steps. + :type variables: [SyntheticsBrowserVariable], optional + """ + if config_variables is not unset: + kwargs["config_variables"] = config_variables + if set_cookie is not unset: + kwargs["set_cookie"] = set_cookie + if variables is not unset: + kwargs["variables"] = variables + super().__init__(kwargs) + assertions = kwargs.get("assertions", []) + + + self_.assertions = assertions + self_.request = request diff --git a/datadog_api_client/v1/model/synthetics_browser_test_failure_code.py b/datadog_api_client/v1/model/synthetics_browser_test_failure_code.py new file mode 100644 index 0000000000..1322cd719a --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_failure_code.py @@ -0,0 +1,141 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBrowserTestFailureCode(ModelSimple): + """ + Error code that can be returned by a Synthetic test. + + :param value: Must be one of ["API_REQUEST_FAILURE", "ASSERTION_FAILURE", "DOWNLOAD_FILE_TOO_LARGE", "ELEMENT_NOT_INTERACTABLE", "EMAIL_VARIABLE_NOT_DEFINED", "EVALUATE_JAVASCRIPT", "EVALUATE_JAVASCRIPT_CONTEXT", "EXTRACT_VARIABLE", "FORBIDDEN_URL", "FRAME_DETACHED", "INCONSISTENCIES", "INTERNAL_ERROR", "INVALID_TYPE_TEXT_DELAY", "INVALID_URL", "INVALID_VARIABLE_PATTERN", "INVISIBLE_ELEMENT", "LOCATE_ELEMENT", "NAVIGATE_TO_LINK", "OPEN_URL", "PRESS_KEY", "SERVER_CERTIFICATE", "SELECT_OPTION", "STEP_TIMEOUT", "SUB_TEST_NOT_PASSED", "TEST_TIMEOUT", "TOO_MANY_HTTP_REQUESTS", "UNAVAILABLE_BROWSER", "UNKNOWN", "UNSUPPORTED_AUTH_SCHEMA", "UPLOAD_FILES_ELEMENT_TYPE", "UPLOAD_FILES_DIALOG", "UPLOAD_FILES_DYNAMIC_ELEMENT", "UPLOAD_FILES_NAME"]. + :type value: str + """ + + allowed_values = { + "API_REQUEST_FAILURE", + "ASSERTION_FAILURE", + "DOWNLOAD_FILE_TOO_LARGE", + "ELEMENT_NOT_INTERACTABLE", + "EMAIL_VARIABLE_NOT_DEFINED", + "EVALUATE_JAVASCRIPT", + "EVALUATE_JAVASCRIPT_CONTEXT", + "EXTRACT_VARIABLE", + "FORBIDDEN_URL", + "FRAME_DETACHED", + "INCONSISTENCIES", + "INTERNAL_ERROR", + "INVALID_TYPE_TEXT_DELAY", + "INVALID_URL", + "INVALID_VARIABLE_PATTERN", + "INVISIBLE_ELEMENT", + "LOCATE_ELEMENT", + "NAVIGATE_TO_LINK", + "OPEN_URL", + "PRESS_KEY", + "SERVER_CERTIFICATE", + "SELECT_OPTION", + "STEP_TIMEOUT", + "SUB_TEST_NOT_PASSED", + "TEST_TIMEOUT", + "TOO_MANY_HTTP_REQUESTS", + "UNAVAILABLE_BROWSER", + "UNKNOWN", + "UNSUPPORTED_AUTH_SCHEMA", + "UPLOAD_FILES_ELEMENT_TYPE", + "UPLOAD_FILES_DIALOG", + "UPLOAD_FILES_DYNAMIC_ELEMENT", + "UPLOAD_FILES_NAME", + } + API_REQUEST_FAILURE: ClassVar["SyntheticsBrowserTestFailureCode"] + ASSERTION_FAILURE: ClassVar["SyntheticsBrowserTestFailureCode"] + DOWNLOAD_FILE_TOO_LARGE: ClassVar["SyntheticsBrowserTestFailureCode"] + ELEMENT_NOT_INTERACTABLE: ClassVar["SyntheticsBrowserTestFailureCode"] + EMAIL_VARIABLE_NOT_DEFINED: ClassVar["SyntheticsBrowserTestFailureCode"] + EVALUATE_JAVASCRIPT: ClassVar["SyntheticsBrowserTestFailureCode"] + EVALUATE_JAVASCRIPT_CONTEXT: ClassVar["SyntheticsBrowserTestFailureCode"] + EXTRACT_VARIABLE: ClassVar["SyntheticsBrowserTestFailureCode"] + FORBIDDEN_URL: ClassVar["SyntheticsBrowserTestFailureCode"] + FRAME_DETACHED: ClassVar["SyntheticsBrowserTestFailureCode"] + INCONSISTENCIES: ClassVar["SyntheticsBrowserTestFailureCode"] + INTERNAL_ERROR: ClassVar["SyntheticsBrowserTestFailureCode"] + INVALID_TYPE_TEXT_DELAY: ClassVar["SyntheticsBrowserTestFailureCode"] + INVALID_URL: ClassVar["SyntheticsBrowserTestFailureCode"] + INVALID_VARIABLE_PATTERN: ClassVar["SyntheticsBrowserTestFailureCode"] + INVISIBLE_ELEMENT: ClassVar["SyntheticsBrowserTestFailureCode"] + LOCATE_ELEMENT: ClassVar["SyntheticsBrowserTestFailureCode"] + NAVIGATE_TO_LINK: ClassVar["SyntheticsBrowserTestFailureCode"] + OPEN_URL: ClassVar["SyntheticsBrowserTestFailureCode"] + PRESS_KEY: ClassVar["SyntheticsBrowserTestFailureCode"] + SERVER_CERTIFICATE: ClassVar["SyntheticsBrowserTestFailureCode"] + SELECT_OPTION: ClassVar["SyntheticsBrowserTestFailureCode"] + STEP_TIMEOUT: ClassVar["SyntheticsBrowserTestFailureCode"] + SUB_TEST_NOT_PASSED: ClassVar["SyntheticsBrowserTestFailureCode"] + TEST_TIMEOUT: ClassVar["SyntheticsBrowserTestFailureCode"] + TOO_MANY_HTTP_REQUESTS: ClassVar["SyntheticsBrowserTestFailureCode"] + UNAVAILABLE_BROWSER: ClassVar["SyntheticsBrowserTestFailureCode"] + UNKNOWN: ClassVar["SyntheticsBrowserTestFailureCode"] + UNSUPPORTED_AUTH_SCHEMA: ClassVar["SyntheticsBrowserTestFailureCode"] + UPLOAD_FILES_ELEMENT_TYPE: ClassVar["SyntheticsBrowserTestFailureCode"] + UPLOAD_FILES_DIALOG: ClassVar["SyntheticsBrowserTestFailureCode"] + UPLOAD_FILES_DYNAMIC_ELEMENT: ClassVar["SyntheticsBrowserTestFailureCode"] + UPLOAD_FILES_NAME: ClassVar["SyntheticsBrowserTestFailureCode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBrowserTestFailureCode.API_REQUEST_FAILURE = SyntheticsBrowserTestFailureCode("API_REQUEST_FAILURE") +SyntheticsBrowserTestFailureCode.ASSERTION_FAILURE = SyntheticsBrowserTestFailureCode("ASSERTION_FAILURE") +SyntheticsBrowserTestFailureCode.DOWNLOAD_FILE_TOO_LARGE = SyntheticsBrowserTestFailureCode("DOWNLOAD_FILE_TOO_LARGE") +SyntheticsBrowserTestFailureCode.ELEMENT_NOT_INTERACTABLE = SyntheticsBrowserTestFailureCode("ELEMENT_NOT_INTERACTABLE") +SyntheticsBrowserTestFailureCode.EMAIL_VARIABLE_NOT_DEFINED = SyntheticsBrowserTestFailureCode("EMAIL_VARIABLE_NOT_DEFINED") +SyntheticsBrowserTestFailureCode.EVALUATE_JAVASCRIPT = SyntheticsBrowserTestFailureCode("EVALUATE_JAVASCRIPT") +SyntheticsBrowserTestFailureCode.EVALUATE_JAVASCRIPT_CONTEXT = SyntheticsBrowserTestFailureCode("EVALUATE_JAVASCRIPT_CONTEXT") +SyntheticsBrowserTestFailureCode.EXTRACT_VARIABLE = SyntheticsBrowserTestFailureCode("EXTRACT_VARIABLE") +SyntheticsBrowserTestFailureCode.FORBIDDEN_URL = SyntheticsBrowserTestFailureCode("FORBIDDEN_URL") +SyntheticsBrowserTestFailureCode.FRAME_DETACHED = SyntheticsBrowserTestFailureCode("FRAME_DETACHED") +SyntheticsBrowserTestFailureCode.INCONSISTENCIES = SyntheticsBrowserTestFailureCode("INCONSISTENCIES") +SyntheticsBrowserTestFailureCode.INTERNAL_ERROR = SyntheticsBrowserTestFailureCode("INTERNAL_ERROR") +SyntheticsBrowserTestFailureCode.INVALID_TYPE_TEXT_DELAY = SyntheticsBrowserTestFailureCode("INVALID_TYPE_TEXT_DELAY") +SyntheticsBrowserTestFailureCode.INVALID_URL = SyntheticsBrowserTestFailureCode("INVALID_URL") +SyntheticsBrowserTestFailureCode.INVALID_VARIABLE_PATTERN = SyntheticsBrowserTestFailureCode("INVALID_VARIABLE_PATTERN") +SyntheticsBrowserTestFailureCode.INVISIBLE_ELEMENT = SyntheticsBrowserTestFailureCode("INVISIBLE_ELEMENT") +SyntheticsBrowserTestFailureCode.LOCATE_ELEMENT = SyntheticsBrowserTestFailureCode("LOCATE_ELEMENT") +SyntheticsBrowserTestFailureCode.NAVIGATE_TO_LINK = SyntheticsBrowserTestFailureCode("NAVIGATE_TO_LINK") +SyntheticsBrowserTestFailureCode.OPEN_URL = SyntheticsBrowserTestFailureCode("OPEN_URL") +SyntheticsBrowserTestFailureCode.PRESS_KEY = SyntheticsBrowserTestFailureCode("PRESS_KEY") +SyntheticsBrowserTestFailureCode.SERVER_CERTIFICATE = SyntheticsBrowserTestFailureCode("SERVER_CERTIFICATE") +SyntheticsBrowserTestFailureCode.SELECT_OPTION = SyntheticsBrowserTestFailureCode("SELECT_OPTION") +SyntheticsBrowserTestFailureCode.STEP_TIMEOUT = SyntheticsBrowserTestFailureCode("STEP_TIMEOUT") +SyntheticsBrowserTestFailureCode.SUB_TEST_NOT_PASSED = SyntheticsBrowserTestFailureCode("SUB_TEST_NOT_PASSED") +SyntheticsBrowserTestFailureCode.TEST_TIMEOUT = SyntheticsBrowserTestFailureCode("TEST_TIMEOUT") +SyntheticsBrowserTestFailureCode.TOO_MANY_HTTP_REQUESTS = SyntheticsBrowserTestFailureCode("TOO_MANY_HTTP_REQUESTS") +SyntheticsBrowserTestFailureCode.UNAVAILABLE_BROWSER = SyntheticsBrowserTestFailureCode("UNAVAILABLE_BROWSER") +SyntheticsBrowserTestFailureCode.UNKNOWN = SyntheticsBrowserTestFailureCode("UNKNOWN") +SyntheticsBrowserTestFailureCode.UNSUPPORTED_AUTH_SCHEMA = SyntheticsBrowserTestFailureCode("UNSUPPORTED_AUTH_SCHEMA") +SyntheticsBrowserTestFailureCode.UPLOAD_FILES_ELEMENT_TYPE = SyntheticsBrowserTestFailureCode("UPLOAD_FILES_ELEMENT_TYPE") +SyntheticsBrowserTestFailureCode.UPLOAD_FILES_DIALOG = SyntheticsBrowserTestFailureCode("UPLOAD_FILES_DIALOG") +SyntheticsBrowserTestFailureCode.UPLOAD_FILES_DYNAMIC_ELEMENT = SyntheticsBrowserTestFailureCode("UPLOAD_FILES_DYNAMIC_ELEMENT") +SyntheticsBrowserTestFailureCode.UPLOAD_FILES_NAME = SyntheticsBrowserTestFailureCode("UPLOAD_FILES_NAME") diff --git a/datadog_api_client/v1/model/synthetics_browser_test_result_data.py b/datadog_api_client/v1/model/synthetics_browser_test_result_data.py new file mode 100644 index 0000000000..e2ddce2296 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_result_data.py @@ -0,0 +1,131 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_device import SyntheticsDevice + from datadog_api_client.v1.model.synthetics_browser_test_result_failure import SyntheticsBrowserTestResultFailure + from datadog_api_client.v1.model.synthetics_step_detail import SyntheticsStepDetail + +class SyntheticsBrowserTestResultData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_device import SyntheticsDevice + from datadog_api_client.v1.model.synthetics_browser_test_result_failure import SyntheticsBrowserTestResultFailure + from datadog_api_client.v1.model.synthetics_step_detail import SyntheticsStepDetail + return { + "browser_type": (str,), + "browser_version": (str,), + "device": (SyntheticsDevice,), + "duration": (float,), + "error": (str,), + "failure": (SyntheticsBrowserTestResultFailure,), + "passed": (bool,), + "received_email_count": (int,), + "start_url": (str,), + "step_details": ([SyntheticsStepDetail],), + "thumbnails_bucket_key": (bool,), + "time_to_interactive": (float,), + } + attribute_map = { + "browser_type": "browserType", + "browser_version": "browserVersion", + "device": "device", + "duration": "duration", + "error": "error", + "failure": "failure", + "passed": "passed", + "received_email_count": "receivedEmailCount", + "start_url": "startUrl", + "step_details": "stepDetails", + "thumbnails_bucket_key": "thumbnailsBucketKey", + "time_to_interactive": "timeToInteractive", + } + + def __init__(self_, browser_type: Union[str, UnsetType]=unset, browser_version: Union[str, UnsetType]=unset, device: Union[SyntheticsDevice, UnsetType]=unset, duration: Union[float, UnsetType]=unset, error: Union[str, UnsetType]=unset, failure: Union[SyntheticsBrowserTestResultFailure, UnsetType]=unset, passed: Union[bool, UnsetType]=unset, received_email_count: Union[int, UnsetType]=unset, start_url: Union[str, UnsetType]=unset, step_details: Union[List[SyntheticsStepDetail], UnsetType]=unset, thumbnails_bucket_key: Union[bool, UnsetType]=unset, time_to_interactive: Union[float, UnsetType]=unset, **kwargs): + """ + Object containing results for your Synthetic browser test. + + :param browser_type: Type of browser device used for the browser test. + :type browser_type: str, optional + + :param browser_version: Browser version used for the browser test. + :type browser_version: str, optional + + :param device: Object describing the device used to perform the Synthetic test. + :type device: SyntheticsDevice, optional + + :param duration: Global duration in second of the browser test. + :type duration: float, optional + + :param error: Error returned for the browser test. + :type error: str, optional + + :param failure: The browser test failure details. + :type failure: SyntheticsBrowserTestResultFailure, optional + + :param passed: Whether or not the browser test was conducted. + :type passed: bool, optional + + :param received_email_count: The amount of email received during the browser test. + :type received_email_count: int, optional + + :param start_url: Starting URL for the browser test. + :type start_url: str, optional + + :param step_details: Array containing the different browser test steps. + :type step_details: [SyntheticsStepDetail], optional + + :param thumbnails_bucket_key: Whether or not a thumbnail is associated with the browser test. + :type thumbnails_bucket_key: bool, optional + + :param time_to_interactive: Time in second to wait before the browser test starts after + reaching the start URL. + :type time_to_interactive: float, optional + """ + if browser_type is not unset: + kwargs["browser_type"] = browser_type + if browser_version is not unset: + kwargs["browser_version"] = browser_version + if device is not unset: + kwargs["device"] = device + if duration is not unset: + kwargs["duration"] = duration + if error is not unset: + kwargs["error"] = error + if failure is not unset: + kwargs["failure"] = failure + if passed is not unset: + kwargs["passed"] = passed + if received_email_count is not unset: + kwargs["received_email_count"] = received_email_count + if start_url is not unset: + kwargs["start_url"] = start_url + if step_details is not unset: + kwargs["step_details"] = step_details + if thumbnails_bucket_key is not unset: + kwargs["thumbnails_bucket_key"] = thumbnails_bucket_key + if time_to_interactive is not unset: + kwargs["time_to_interactive"] = time_to_interactive + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_browser_test_result_failure.py b/datadog_api_client/v1/model/synthetics_browser_test_result_failure.py new file mode 100644 index 0000000000..6c8cae3c7f --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_result_failure.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_browser_test_failure_code import SyntheticsBrowserTestFailureCode + +class SyntheticsBrowserTestResultFailure(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_browser_test_failure_code import SyntheticsBrowserTestFailureCode + return { + "code": (SyntheticsBrowserTestFailureCode,), + "message": (str,), + } + attribute_map = { + "code": "code", + "message": "message", + } + + def __init__(self_, code: Union[SyntheticsBrowserTestFailureCode, UnsetType]=unset, message: Union[str, UnsetType]=unset, **kwargs): + """ + The browser test failure details. + + :param code: Error code that can be returned by a Synthetic test. + :type code: SyntheticsBrowserTestFailureCode, optional + + :param message: The browser test error message. + :type message: str, optional + """ + if code is not unset: + kwargs["code"] = code + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_browser_test_result_full.py b/datadog_api_client/v1/model/synthetics_browser_test_result_full.py new file mode 100644 index 0000000000..fc0052e836 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_result_full.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_browser_test_result_full_check import SyntheticsBrowserTestResultFullCheck + from datadog_api_client.v1.model.synthetics_browser_test_result_data import SyntheticsBrowserTestResultData + from datadog_api_client.v1.model.synthetics_test_monitor_status import SyntheticsTestMonitorStatus + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsBrowserTestResultFull(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_browser_test_result_full_check import SyntheticsBrowserTestResultFullCheck + from datadog_api_client.v1.model.synthetics_browser_test_result_data import SyntheticsBrowserTestResultData + from datadog_api_client.v1.model.synthetics_test_monitor_status import SyntheticsTestMonitorStatus + return { + "check": (SyntheticsBrowserTestResultFullCheck,), + "check_time": (float,), + "check_version": (int,), + "probe_dc": (str,), + "result": (SyntheticsBrowserTestResultData,), + "result_id": (str,), + "status": (SyntheticsTestMonitorStatus,), + } + attribute_map = { + "check": "check", + "check_time": "check_time", + "check_version": "check_version", + "probe_dc": "probe_dc", + "result": "result", + "result_id": "result_id", + "status": "status", + } + + def __init__(self_, check: Union[SyntheticsBrowserTestResultFullCheck, UnsetType]=unset, check_time: Union[float, UnsetType]=unset, check_version: Union[int, UnsetType]=unset, probe_dc: Union[str, UnsetType]=unset, result: Union[SyntheticsBrowserTestResultData, UnsetType]=unset, result_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestMonitorStatus, UnsetType]=unset, **kwargs): + """ + Object returned describing a browser test result. + + :param check: Object describing the browser test configuration. + :type check: SyntheticsBrowserTestResultFullCheck, optional + + :param check_time: When the browser test was conducted. + :type check_time: float, optional + + :param check_version: Version of the browser test used. + :type check_version: int, optional + + :param probe_dc: Location from which the browser test was performed. + :type probe_dc: str, optional + + :param result: Object containing results for your Synthetic browser test. + :type result: SyntheticsBrowserTestResultData, optional + + :param result_id: ID of the browser test result. + :type result_id: str, optional + + :param status: The status of your Synthetic monitor. + + * ``O`` for not triggered + * ``1`` for triggered + * ``2`` for no data + :type status: SyntheticsTestMonitorStatus, optional + """ + if check is not unset: + kwargs["check"] = check + if check_time is not unset: + kwargs["check_time"] = check_time + if check_version is not unset: + kwargs["check_version"] = check_version + if probe_dc is not unset: + kwargs["probe_dc"] = probe_dc + if result is not unset: + kwargs["result"] = result + if result_id is not unset: + kwargs["result_id"] = result_id + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_browser_test_result_full_check.py b/datadog_api_client/v1/model/synthetics_browser_test_result_full_check.py new file mode 100644 index 0000000000..c83c834bb5 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_result_full_check.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_config import SyntheticsTestConfig + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsBrowserTestResultFullCheck(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_config import SyntheticsTestConfig + return { + "config": (SyntheticsTestConfig,), + } + attribute_map = { + "config": "config", + } + + def __init__(self_, config: SyntheticsTestConfig, **kwargs): + """ + Object describing the browser test configuration. + + :param config: Configuration object for a Synthetic test. + :type config: SyntheticsTestConfig + """ + super().__init__(kwargs) + + + self_.config = config diff --git a/datadog_api_client/v1/model/synthetics_browser_test_result_short.py b/datadog_api_client/v1/model/synthetics_browser_test_result_short.py new file mode 100644 index 0000000000..f86af56023 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_result_short.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_browser_test_result_short_result import SyntheticsBrowserTestResultShortResult + from datadog_api_client.v1.model.synthetics_test_monitor_status import SyntheticsTestMonitorStatus + +class SyntheticsBrowserTestResultShort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_browser_test_result_short_result import SyntheticsBrowserTestResultShortResult + from datadog_api_client.v1.model.synthetics_test_monitor_status import SyntheticsTestMonitorStatus + return { + "check_time": (float,), + "probe_dc": (str,), + "result": (SyntheticsBrowserTestResultShortResult,), + "result_id": (str,), + "status": (SyntheticsTestMonitorStatus,), + } + attribute_map = { + "check_time": "check_time", + "probe_dc": "probe_dc", + "result": "result", + "result_id": "result_id", + "status": "status", + } + + def __init__(self_, check_time: Union[float, UnsetType]=unset, probe_dc: Union[str, UnsetType]=unset, result: Union[SyntheticsBrowserTestResultShortResult, UnsetType]=unset, result_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestMonitorStatus, UnsetType]=unset, **kwargs): + """ + Object with the results of a single Synthetic browser test. + + :param check_time: Last time the browser test was performed. + :type check_time: float, optional + + :param probe_dc: Location from which the Browser test was performed. + :type probe_dc: str, optional + + :param result: Object with the result of the last browser test run. + :type result: SyntheticsBrowserTestResultShortResult, optional + + :param result_id: ID of the browser test result. + :type result_id: str, optional + + :param status: The status of your Synthetic monitor. + + * ``O`` for not triggered + * ``1`` for triggered + * ``2`` for no data + :type status: SyntheticsTestMonitorStatus, optional + """ + if check_time is not unset: + kwargs["check_time"] = check_time + if probe_dc is not unset: + kwargs["probe_dc"] = probe_dc + if result is not unset: + kwargs["result"] = result + if result_id is not unset: + kwargs["result_id"] = result_id + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_browser_test_result_short_result.py b/datadog_api_client/v1/model/synthetics_browser_test_result_short_result.py new file mode 100644 index 0000000000..d68b95d74b --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_result_short_result.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_device import SyntheticsDevice + +class SyntheticsBrowserTestResultShortResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_device import SyntheticsDevice + return { + "device": (SyntheticsDevice,), + "duration": (float,), + "error_count": (int,), + "step_count_completed": (int,), + "step_count_total": (int,), + } + attribute_map = { + "device": "device", + "duration": "duration", + "error_count": "errorCount", + "step_count_completed": "stepCountCompleted", + "step_count_total": "stepCountTotal", + } + + def __init__(self_, device: Union[SyntheticsDevice, UnsetType]=unset, duration: Union[float, UnsetType]=unset, error_count: Union[int, UnsetType]=unset, step_count_completed: Union[int, UnsetType]=unset, step_count_total: Union[int, UnsetType]=unset, **kwargs): + """ + Object with the result of the last browser test run. + + :param device: Object describing the device used to perform the Synthetic test. + :type device: SyntheticsDevice, optional + + :param duration: Length in milliseconds of the browser test run. + :type duration: float, optional + + :param error_count: Amount of errors collected for a single browser test run. + :type error_count: int, optional + + :param step_count_completed: Amount of browser test steps completed before failing. + :type step_count_completed: int, optional + + :param step_count_total: Total amount of browser test steps. + :type step_count_total: int, optional + """ + if device is not unset: + kwargs["device"] = device + if duration is not unset: + kwargs["duration"] = duration + if error_count is not unset: + kwargs["error_count"] = error_count + if step_count_completed is not unset: + kwargs["step_count_completed"] = step_count_completed + if step_count_total is not unset: + kwargs["step_count_total"] = step_count_total + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_browser_test_rum_settings.py b/datadog_api_client/v1/model/synthetics_browser_test_rum_settings.py new file mode 100644 index 0000000000..66116bed8a --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_rum_settings.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsBrowserTestRumSettings(ModelNormal): + @cached_property + def openapi_types(_): + return { + "application_id": (str,), + "client_token_id": (int,), + "is_enabled": (bool,), + } + attribute_map = { + "application_id": "applicationId", + "client_token_id": "clientTokenId", + "is_enabled": "isEnabled", + } + + def __init__(self_, is_enabled: bool, application_id: Union[str, UnsetType]=unset, client_token_id: Union[int, UnsetType]=unset, **kwargs): + """ + The RUM data collection settings for the Synthetic browser test. + **Note:** There are 3 ways to format RUM settings: + + ``{ isEnabled: false }`` + RUM data is not collected. + + ``{ isEnabled: true }`` + RUM data is collected from the Synthetic test's default application. + + ``{ isEnabled: true, applicationId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", clientTokenId: 12345 }`` + RUM data is collected using the specified application. + + :param application_id: RUM application ID used to collect RUM data for the browser test. + :type application_id: str, optional + + :param client_token_id: RUM application API key ID used to collect RUM data for the browser test. + :type client_token_id: int, optional + + :param is_enabled: Determines whether RUM data is collected during test runs. + :type is_enabled: bool + """ + if application_id is not unset: + kwargs["application_id"] = application_id + if client_token_id is not unset: + kwargs["client_token_id"] = client_token_id + super().__init__(kwargs) + + + self_.is_enabled = is_enabled diff --git a/datadog_api_client/v1/model/synthetics_browser_test_type.py b/datadog_api_client/v1/model/synthetics_browser_test_type.py new file mode 100644 index 0000000000..3bf4275317 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_test_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBrowserTestType(ModelSimple): + """ + Type of the Synthetic test, `browser`. + + :param value: If omitted defaults to "browser". Must be one of ["browser"]. + :type value: str + """ + + allowed_values = { + "browser", + } + BROWSER: ClassVar["SyntheticsBrowserTestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBrowserTestType.BROWSER = SyntheticsBrowserTestType("browser") diff --git a/datadog_api_client/v1/model/synthetics_browser_variable.py b/datadog_api_client/v1/model/synthetics_browser_variable.py new file mode 100644 index 0000000000..b379c8f581 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_variable.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_browser_variable_type import SyntheticsBrowserVariableType + +class SyntheticsBrowserVariable(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_browser_variable_type import SyntheticsBrowserVariableType + return { + "example": (str,), + "id": (str,), + "name": (str,), + "pattern": (str,), + "secure": (bool,), + "type": (SyntheticsBrowserVariableType,), + } + attribute_map = { + "example": "example", + "id": "id", + "name": "name", + "pattern": "pattern", + "secure": "secure", + "type": "type", + } + + def __init__(self_, name: str, type: SyntheticsBrowserVariableType, example: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, pattern: Union[str, UnsetType]=unset, secure: Union[bool, UnsetType]=unset, **kwargs): + """ + Object defining a variable that can be used in your browser test. + See the `Recording Steps documentation `_. + + :param example: Example for the variable. + :type example: str, optional + + :param id: ID for the variable. Global variables require an ID. + :type id: str, optional + + :param name: Name of the variable. + :type name: str + + :param pattern: Pattern of the variable. + :type pattern: str, optional + + :param secure: Determines whether or not the browser test variable is obfuscated. Can only be used with browser variables of type ``text``. + :type secure: bool, optional + + :param type: Type of browser test variable. + :type type: SyntheticsBrowserVariableType + """ + if example is not unset: + kwargs["example"] = example + if id is not unset: + kwargs["id"] = id + if pattern is not unset: + kwargs["pattern"] = pattern + if secure is not unset: + kwargs["secure"] = secure + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_browser_variable_type.py b/datadog_api_client/v1/model/synthetics_browser_variable_type.py new file mode 100644 index 0000000000..8953c31665 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_browser_variable_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsBrowserVariableType(ModelSimple): + """ + Type of browser test variable. + + :param value: Must be one of ["element", "email", "global", "text"]. + :type value: str + """ + + allowed_values = { + "element", + "email", + "global", + "text", + } + ELEMENT: ClassVar["SyntheticsBrowserVariableType"] + EMAIL: ClassVar["SyntheticsBrowserVariableType"] + GLOBAL: ClassVar["SyntheticsBrowserVariableType"] + TEXT: ClassVar["SyntheticsBrowserVariableType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsBrowserVariableType.ELEMENT = SyntheticsBrowserVariableType("element") +SyntheticsBrowserVariableType.EMAIL = SyntheticsBrowserVariableType("email") +SyntheticsBrowserVariableType.GLOBAL = SyntheticsBrowserVariableType("global") +SyntheticsBrowserVariableType.TEXT = SyntheticsBrowserVariableType("text") diff --git a/datadog_api_client/v1/model/synthetics_check_type.py b/datadog_api_client/v1/model/synthetics_check_type.py new file mode 100644 index 0000000000..b5562c1c84 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_check_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsCheckType(ModelSimple): + """ + Type of assertion to apply in an API test. + + :param value: Must be one of ["equals", "notEquals", "contains", "notContains", "startsWith", "notStartsWith", "greater", "lower", "greaterEquals", "lowerEquals", "matchRegex", "between", "isEmpty", "notIsEmpty"]. + :type value: str + """ + + allowed_values = { + "equals", + "notEquals", + "contains", + "notContains", + "startsWith", + "notStartsWith", + "greater", + "lower", + "greaterEquals", + "lowerEquals", + "matchRegex", + "between", + "isEmpty", + "notIsEmpty", + } + EQUALS: ClassVar["SyntheticsCheckType"] + NOT_EQUALS: ClassVar["SyntheticsCheckType"] + CONTAINS: ClassVar["SyntheticsCheckType"] + NOT_CONTAINS: ClassVar["SyntheticsCheckType"] + STARTS_WITH: ClassVar["SyntheticsCheckType"] + NOT_STARTS_WITH: ClassVar["SyntheticsCheckType"] + GREATER: ClassVar["SyntheticsCheckType"] + LOWER: ClassVar["SyntheticsCheckType"] + GREATER_EQUALS: ClassVar["SyntheticsCheckType"] + LOWER_EQUALS: ClassVar["SyntheticsCheckType"] + MATCH_REGEX: ClassVar["SyntheticsCheckType"] + BETWEEN: ClassVar["SyntheticsCheckType"] + IS_EMPTY: ClassVar["SyntheticsCheckType"] + NOT_IS_EMPTY: ClassVar["SyntheticsCheckType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsCheckType.EQUALS = SyntheticsCheckType("equals") +SyntheticsCheckType.NOT_EQUALS = SyntheticsCheckType("notEquals") +SyntheticsCheckType.CONTAINS = SyntheticsCheckType("contains") +SyntheticsCheckType.NOT_CONTAINS = SyntheticsCheckType("notContains") +SyntheticsCheckType.STARTS_WITH = SyntheticsCheckType("startsWith") +SyntheticsCheckType.NOT_STARTS_WITH = SyntheticsCheckType("notStartsWith") +SyntheticsCheckType.GREATER = SyntheticsCheckType("greater") +SyntheticsCheckType.LOWER = SyntheticsCheckType("lower") +SyntheticsCheckType.GREATER_EQUALS = SyntheticsCheckType("greaterEquals") +SyntheticsCheckType.LOWER_EQUALS = SyntheticsCheckType("lowerEquals") +SyntheticsCheckType.MATCH_REGEX = SyntheticsCheckType("matchRegex") +SyntheticsCheckType.BETWEEN = SyntheticsCheckType("between") +SyntheticsCheckType.IS_EMPTY = SyntheticsCheckType("isEmpty") +SyntheticsCheckType.NOT_IS_EMPTY = SyntheticsCheckType("notIsEmpty") diff --git a/datadog_api_client/v1/model/synthetics_ci_batch_metadata.py b/datadog_api_client/v1/model/synthetics_ci_batch_metadata.py new file mode 100644 index 0000000000..ed8fd8087f --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ci_batch_metadata.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_ci_batch_metadata_ci import SyntheticsCIBatchMetadataCI + from datadog_api_client.v1.model.synthetics_ci_batch_metadata_git import SyntheticsCIBatchMetadataGit + +class SyntheticsCIBatchMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_ci_batch_metadata_ci import SyntheticsCIBatchMetadataCI + from datadog_api_client.v1.model.synthetics_ci_batch_metadata_git import SyntheticsCIBatchMetadataGit + return { + "ci": (SyntheticsCIBatchMetadataCI,), + "git": (SyntheticsCIBatchMetadataGit,), + } + attribute_map = { + "ci": "ci", + "git": "git", + } + + def __init__(self_, ci: Union[SyntheticsCIBatchMetadataCI, UnsetType]=unset, git: Union[SyntheticsCIBatchMetadataGit, UnsetType]=unset, **kwargs): + """ + Metadata for the Synthetic tests run. + + :param ci: Description of the CI provider. + :type ci: SyntheticsCIBatchMetadataCI, optional + + :param git: Git information. + :type git: SyntheticsCIBatchMetadataGit, optional + """ + if ci is not unset: + kwargs["ci"] = ci + if git is not unset: + kwargs["git"] = git + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_ci_batch_metadata_ci.py b/datadog_api_client/v1/model/synthetics_ci_batch_metadata_ci.py new file mode 100644 index 0000000000..d62ecc8a91 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ci_batch_metadata_ci.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_ci_batch_metadata_pipeline import SyntheticsCIBatchMetadataPipeline + from datadog_api_client.v1.model.synthetics_ci_batch_metadata_provider import SyntheticsCIBatchMetadataProvider + +class SyntheticsCIBatchMetadataCI(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_ci_batch_metadata_pipeline import SyntheticsCIBatchMetadataPipeline + from datadog_api_client.v1.model.synthetics_ci_batch_metadata_provider import SyntheticsCIBatchMetadataProvider + return { + "pipeline": (SyntheticsCIBatchMetadataPipeline,), + "provider": (SyntheticsCIBatchMetadataProvider,), + } + attribute_map = { + "pipeline": "pipeline", + "provider": "provider", + } + + def __init__(self_, pipeline: Union[SyntheticsCIBatchMetadataPipeline, UnsetType]=unset, provider: Union[SyntheticsCIBatchMetadataProvider, UnsetType]=unset, **kwargs): + """ + Description of the CI provider. + + :param pipeline: Description of the CI pipeline. + :type pipeline: SyntheticsCIBatchMetadataPipeline, optional + + :param provider: Description of the CI provider. + :type provider: SyntheticsCIBatchMetadataProvider, optional + """ + if pipeline is not unset: + kwargs["pipeline"] = pipeline + if provider is not unset: + kwargs["provider"] = provider + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_ci_batch_metadata_git.py b/datadog_api_client/v1/model/synthetics_ci_batch_metadata_git.py new file mode 100644 index 0000000000..1a8418000a --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ci_batch_metadata_git.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsCIBatchMetadataGit(ModelNormal): + @cached_property + def openapi_types(_): + return { + "branch": (str,), + "commit_sha": (str,), + } + attribute_map = { + "branch": "branch", + "commit_sha": "commitSha", + } + + def __init__(self_, branch: Union[str, UnsetType]=unset, commit_sha: Union[str, UnsetType]=unset, **kwargs): + """ + Git information. + + :param branch: Branch name. + :type branch: str, optional + + :param commit_sha: The commit SHA. + :type commit_sha: str, optional + """ + if branch is not unset: + kwargs["branch"] = branch + if commit_sha is not unset: + kwargs["commit_sha"] = commit_sha + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_ci_batch_metadata_pipeline.py b/datadog_api_client/v1/model/synthetics_ci_batch_metadata_pipeline.py new file mode 100644 index 0000000000..16eb3b34b8 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ci_batch_metadata_pipeline.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsCIBatchMetadataPipeline(ModelNormal): + @cached_property + def openapi_types(_): + return { + "url": (str,), + } + attribute_map = { + "url": "url", + } + + def __init__(self_, url: Union[str, UnsetType]=unset, **kwargs): + """ + Description of the CI pipeline. + + :param url: URL of the pipeline. + :type url: str, optional + """ + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_ci_batch_metadata_provider.py b/datadog_api_client/v1/model/synthetics_ci_batch_metadata_provider.py new file mode 100644 index 0000000000..45074c8523 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ci_batch_metadata_provider.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsCIBatchMetadataProvider(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Description of the CI provider. + + :param name: Name of the CI provider. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_ci_test.py b/datadog_api_client/v1/model/synthetics_ci_test.py new file mode 100644 index 0000000000..97350e2a5f --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ci_test.py @@ -0,0 +1,159 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_basic_auth import SyntheticsBasicAuth + from datadog_api_client.v1.model.synthetics_test_headers import SyntheticsTestHeaders + from datadog_api_client.v1.model.synthetics_ci_batch_metadata import SyntheticsCIBatchMetadata + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsCITest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_basic_auth import SyntheticsBasicAuth + from datadog_api_client.v1.model.synthetics_test_headers import SyntheticsTestHeaders + from datadog_api_client.v1.model.synthetics_ci_batch_metadata import SyntheticsCIBatchMetadata + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + return { + "allow_insecure_certificates": (bool,), + "basic_auth": (SyntheticsBasicAuth,), + "body": (str,), + "body_type": (str,), + "cookies": (str,), + "device_ids": ([str],), + "follow_redirects": (bool,), + "headers": (SyntheticsTestHeaders,), + "locations": ([str],), + "metadata": (SyntheticsCIBatchMetadata,), + "public_id": (str,), + "retry": (SyntheticsTestOptionsRetry,), + "start_url": (str,), + "variables": ({str: (str,)},), + "version": (int,), + } + attribute_map = { + "allow_insecure_certificates": "allowInsecureCertificates", + "basic_auth": "basicAuth", + "body": "body", + "body_type": "bodyType", + "cookies": "cookies", + "device_ids": "deviceIds", + "follow_redirects": "followRedirects", + "headers": "headers", + "locations": "locations", + "metadata": "metadata", + "public_id": "public_id", + "retry": "retry", + "start_url": "startUrl", + "variables": "variables", + "version": "version", + } + + def __init__(self_, public_id: str, allow_insecure_certificates: Union[bool, UnsetType]=unset, basic_auth: Union[SyntheticsBasicAuth, SyntheticsBasicAuthWeb, SyntheticsBasicAuthSigv4, SyntheticsBasicAuthNTLM, SyntheticsBasicAuthDigest, SyntheticsBasicAuthOauthClient, SyntheticsBasicAuthOauthROP, SyntheticsBasicAuthJWT, UnsetType]=unset, body: Union[str, UnsetType]=unset, body_type: Union[str, UnsetType]=unset, cookies: Union[str, UnsetType]=unset, device_ids: Union[List[str], UnsetType]=unset, follow_redirects: Union[bool, UnsetType]=unset, headers: Union[SyntheticsTestHeaders, UnsetType]=unset, locations: Union[List[str], UnsetType]=unset, metadata: Union[SyntheticsCIBatchMetadata, UnsetType]=unset, retry: Union[SyntheticsTestOptionsRetry, UnsetType]=unset, start_url: Union[str, UnsetType]=unset, variables: Union[Dict[str, str], UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Configuration for Continuous Testing. + + :param allow_insecure_certificates: Disable certificate checks in API tests. + :type allow_insecure_certificates: bool, optional + + :param basic_auth: Object to handle basic authentication when performing the test. + :type basic_auth: SyntheticsBasicAuth, optional + + :param body: Body to include in the test. + :type body: str, optional + + :param body_type: Type of the data sent in a Synthetic API test. + :type body_type: str, optional + + :param cookies: Cookies for the request. + :type cookies: str, optional + + :param device_ids: For browser test, array with the different device IDs used to run the test. + :type device_ids: [str], optional + + :param follow_redirects: For API HTTP test, whether or not the test should follow redirects. + :type follow_redirects: bool, optional + + :param headers: Headers to include when performing the test. + :type headers: SyntheticsTestHeaders, optional + + :param locations: Array of locations used to run the test. + :type locations: [str], optional + + :param metadata: Metadata for the Synthetic tests run. + :type metadata: SyntheticsCIBatchMetadata, optional + + :param public_id: The public ID of the Synthetic test to trigger. + :type public_id: str + + :param retry: Object describing the retry strategy to apply to a Synthetic test. + :type retry: SyntheticsTestOptionsRetry, optional + + :param start_url: Starting URL for the browser test. + :type start_url: str, optional + + :param variables: Variables to replace in the test. + :type variables: {str: (str,)}, optional + + :param version: The version number of the Synthetic test version to trigger. + :type version: int, optional + """ + if allow_insecure_certificates is not unset: + kwargs["allow_insecure_certificates"] = allow_insecure_certificates + if basic_auth is not unset: + kwargs["basic_auth"] = basic_auth + if body is not unset: + kwargs["body"] = body + if body_type is not unset: + kwargs["body_type"] = body_type + if cookies is not unset: + kwargs["cookies"] = cookies + if device_ids is not unset: + kwargs["device_ids"] = device_ids + if follow_redirects is not unset: + kwargs["follow_redirects"] = follow_redirects + if headers is not unset: + kwargs["headers"] = headers + if locations is not unset: + kwargs["locations"] = locations + if metadata is not unset: + kwargs["metadata"] = metadata + if retry is not unset: + kwargs["retry"] = retry + if start_url is not unset: + kwargs["start_url"] = start_url + if variables is not unset: + kwargs["variables"] = variables + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.public_id = public_id diff --git a/datadog_api_client/v1/model/synthetics_ci_test_body.py b/datadog_api_client/v1/model/synthetics_ci_test_body.py new file mode 100644 index 0000000000..88f02a9639 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ci_test_body.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_ci_test import SyntheticsCITest + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsCITestBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_ci_test import SyntheticsCITest + return { + "tests": ([SyntheticsCITest],), + } + attribute_map = { + "tests": "tests", + } + + def __init__(self_, tests: Union[List[SyntheticsCITest], UnsetType]=unset, **kwargs): + """ + Object describing the synthetics tests to trigger. + + :param tests: List of Synthetic tests with overrides. + :type tests: [SyntheticsCITest], optional + """ + if tests is not unset: + kwargs["tests"] = tests + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_config_variable.py b/datadog_api_client/v1/model/synthetics_config_variable.py new file mode 100644 index 0000000000..b7fdd12210 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_config_variable.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_config_variable_type import SyntheticsConfigVariableType + +class SyntheticsConfigVariable(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_config_variable_type import SyntheticsConfigVariableType + return { + "example": (str,), + "id": (str,), + "name": (str,), + "pattern": (str,), + "secure": (bool,), + "type": (SyntheticsConfigVariableType,), + } + attribute_map = { + "example": "example", + "id": "id", + "name": "name", + "pattern": "pattern", + "secure": "secure", + "type": "type", + } + + def __init__(self_, name: str, type: SyntheticsConfigVariableType, example: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, pattern: Union[str, UnsetType]=unset, secure: Union[bool, UnsetType]=unset, **kwargs): + """ + Object defining a variable that can be used in your test configuration. + + :param example: Example for the variable. + :type example: str, optional + + :param id: ID of the variable for global variables. + :type id: str, optional + + :param name: Name of the variable. + :type name: str + + :param pattern: Pattern of the variable. + :type pattern: str, optional + + :param secure: Whether the value of this variable will be obfuscated in test results. Only for config variables of type ``text``. + :type secure: bool, optional + + :param type: Type of the configuration variable. + :type type: SyntheticsConfigVariableType + """ + if example is not unset: + kwargs["example"] = example + if id is not unset: + kwargs["id"] = id + if pattern is not unset: + kwargs["pattern"] = pattern + if secure is not unset: + kwargs["secure"] = secure + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_config_variable_type.py b/datadog_api_client/v1/model/synthetics_config_variable_type.py new file mode 100644 index 0000000000..cf7f03f704 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_config_variable_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsConfigVariableType(ModelSimple): + """ + Type of the configuration variable. + + :param value: Must be one of ["global", "text", "email"]. + :type value: str + """ + + allowed_values = { + "global", + "text", + "email", + } + GLOBAL: ClassVar["SyntheticsConfigVariableType"] + TEXT: ClassVar["SyntheticsConfigVariableType"] + EMAIL: ClassVar["SyntheticsConfigVariableType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsConfigVariableType.GLOBAL = SyntheticsConfigVariableType("global") +SyntheticsConfigVariableType.TEXT = SyntheticsConfigVariableType("text") +SyntheticsConfigVariableType.EMAIL = SyntheticsConfigVariableType("email") diff --git a/datadog_api_client/v1/model/synthetics_core_web_vitals.py b/datadog_api_client/v1/model/synthetics_core_web_vitals.py new file mode 100644 index 0000000000..da76e82152 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_core_web_vitals.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsCoreWebVitals(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_cls": (float,), + "lcp": (float,), + "url": (str,), + } + attribute_map = { + "_cls": "cls", + "lcp": "lcp", + "url": "url", + } + + def __init__(self_, _cls: Union[float, UnsetType]=unset, lcp: Union[float, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Core Web Vitals attached to a browser test step. + + :param _cls: Cumulative Layout Shift. + :type _cls: float, optional + + :param lcp: Largest Contentful Paint in milliseconds. + :type lcp: float, optional + + :param url: URL attached to the metrics. + :type url: str, optional + """ + if _cls is not unset: + kwargs["_cls"] = _cls + if lcp is not unset: + kwargs["lcp"] = lcp + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_delete_tests_payload.py b/datadog_api_client/v1/model/synthetics_delete_tests_payload.py new file mode 100644 index 0000000000..383f020349 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_delete_tests_payload.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsDeleteTestsPayload(ModelNormal): + @cached_property + def openapi_types(_): + return { + "force_delete_dependencies": (bool,), + "public_ids": ([str],), + } + attribute_map = { + "force_delete_dependencies": "force_delete_dependencies", + "public_ids": "public_ids", + } + + def __init__(self_, force_delete_dependencies: Union[bool, UnsetType]=unset, public_ids: Union[List[str], UnsetType]=unset, **kwargs): + """ + A JSON list of the ID or IDs of the Synthetic tests that you want + to delete. + + :param force_delete_dependencies: Delete the Synthetic test even if it's referenced by other resources + (for example, SLOs and composite monitors). + :type force_delete_dependencies: bool, optional + + :param public_ids: An array of Synthetic test IDs you want to delete. + :type public_ids: [str], optional + """ + if force_delete_dependencies is not unset: + kwargs["force_delete_dependencies"] = force_delete_dependencies + if public_ids is not unset: + kwargs["public_ids"] = public_ids + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_delete_tests_response.py b/datadog_api_client/v1/model/synthetics_delete_tests_response.py new file mode 100644 index 0000000000..a0eb464a0b --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_delete_tests_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_deleted_test import SyntheticsDeletedTest + +class SyntheticsDeleteTestsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_deleted_test import SyntheticsDeletedTest + return { + "deleted_tests": ([SyntheticsDeletedTest],), + } + attribute_map = { + "deleted_tests": "deleted_tests", + } + + def __init__(self_, deleted_tests: Union[List[SyntheticsDeletedTest], UnsetType]=unset, **kwargs): + """ + Response object for deleting Synthetic tests. + + :param deleted_tests: Array of objects containing a deleted Synthetic test ID with + the associated deletion timestamp. + :type deleted_tests: [SyntheticsDeletedTest], optional + """ + if deleted_tests is not unset: + kwargs["deleted_tests"] = deleted_tests + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_deleted_test.py b/datadog_api_client/v1/model/synthetics_deleted_test.py new file mode 100644 index 0000000000..0d095a55fc --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_deleted_test.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsDeletedTest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_at": (datetime,), + "public_id": (str,), + } + attribute_map = { + "deleted_at": "deleted_at", + "public_id": "public_id", + } + + def __init__(self_, deleted_at: Union[datetime, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing a deleted Synthetic test ID with the associated + deletion timestamp. + + :param deleted_at: Deletion timestamp of the Synthetic test ID. + :type deleted_at: datetime, optional + + :param public_id: The Synthetic test ID deleted. + :type public_id: str, optional + """ + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_device.py b/datadog_api_client/v1/model/synthetics_device.py new file mode 100644 index 0000000000..df5ceeaba3 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_device.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsDevice(ModelNormal): + @cached_property + def openapi_types(_): + return { + "height": (int,), + "id": (str,), + "is_mobile": (bool,), + "name": (str,), + "width": (int,), + } + attribute_map = { + "height": "height", + "id": "id", + "is_mobile": "isMobile", + "name": "name", + "width": "width", + } + + def __init__(self_, height: int, id: str, name: str, width: int, is_mobile: Union[bool, UnsetType]=unset, **kwargs): + """ + Object describing the device used to perform the Synthetic test. + + :param height: Screen height of the device. + :type height: int + + :param id: The device ID. + :type id: str + + :param is_mobile: Whether or not the device is a mobile. + :type is_mobile: bool, optional + + :param name: The device name. + :type name: str + + :param width: Screen width of the device. + :type width: int + """ + if is_mobile is not unset: + kwargs["is_mobile"] = is_mobile + super().__init__(kwargs) + + + self_.height = height + self_.id = id + self_.name = name + self_.width = width diff --git a/datadog_api_client/v1/model/synthetics_fetch_uptimes_payload.py b/datadog_api_client/v1/model/synthetics_fetch_uptimes_payload.py new file mode 100644 index 0000000000..7b66906632 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_fetch_uptimes_payload.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsFetchUptimesPayload(ModelNormal): + @cached_property + def openapi_types(_): + return { + "from_ts": (int,), + "public_ids": ([str],), + "to_ts": (int,), + } + attribute_map = { + "from_ts": "from_ts", + "public_ids": "public_ids", + "to_ts": "to_ts", + } + + def __init__(self_, from_ts: int, public_ids: List[str], to_ts: int, **kwargs): + """ + Object containing IDs of Synthetic tests and a timeframe. + + :param from_ts: Timestamp in seconds (Unix epoch) for the start of uptime. + :type from_ts: int + + :param public_ids: An array of Synthetic test IDs you want uptimes for. + :type public_ids: [str] + + :param to_ts: Timestamp in seconds (Unix epoch) for the end of uptime. + :type to_ts: int + """ + super().__init__(kwargs) + + + self_.from_ts = from_ts + self_.public_ids = public_ids + self_.to_ts = to_ts diff --git a/datadog_api_client/v1/model/synthetics_get_api_test_latest_results_response.py b/datadog_api_client/v1/model/synthetics_get_api_test_latest_results_response.py new file mode 100644 index 0000000000..c68b483dac --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_get_api_test_latest_results_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_api_test_result_short import SyntheticsAPITestResultShort + +class SyntheticsGetAPITestLatestResultsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_api_test_result_short import SyntheticsAPITestResultShort + return { + "last_timestamp_fetched": (int,), + "results": ([SyntheticsAPITestResultShort],), + } + attribute_map = { + "last_timestamp_fetched": "last_timestamp_fetched", + "results": "results", + } + + def __init__(self_, last_timestamp_fetched: Union[int, UnsetType]=unset, results: Union[List[SyntheticsAPITestResultShort], UnsetType]=unset, **kwargs): + """ + Object with the latest Synthetic API test run. + + :param last_timestamp_fetched: Timestamp of the latest API test run. + :type last_timestamp_fetched: int, optional + + :param results: Result of the latest API test run. + :type results: [SyntheticsAPITestResultShort], optional + """ + if last_timestamp_fetched is not unset: + kwargs["last_timestamp_fetched"] = last_timestamp_fetched + if results is not unset: + kwargs["results"] = results + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_get_browser_test_latest_results_response.py b/datadog_api_client/v1/model/synthetics_get_browser_test_latest_results_response.py new file mode 100644 index 0000000000..ed23f1fa5d --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_get_browser_test_latest_results_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_browser_test_result_short import SyntheticsBrowserTestResultShort + +class SyntheticsGetBrowserTestLatestResultsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_browser_test_result_short import SyntheticsBrowserTestResultShort + return { + "last_timestamp_fetched": (int,), + "results": ([SyntheticsBrowserTestResultShort],), + } + attribute_map = { + "last_timestamp_fetched": "last_timestamp_fetched", + "results": "results", + } + + def __init__(self_, last_timestamp_fetched: Union[int, UnsetType]=unset, results: Union[List[SyntheticsBrowserTestResultShort], UnsetType]=unset, **kwargs): + """ + Object with the latest Synthetic browser test run. + + :param last_timestamp_fetched: Timestamp of the latest browser test run. + :type last_timestamp_fetched: int, optional + + :param results: Result of the latest browser test run. + :type results: [SyntheticsBrowserTestResultShort], optional + """ + if last_timestamp_fetched is not unset: + kwargs["last_timestamp_fetched"] = last_timestamp_fetched + if results is not unset: + kwargs["results"] = results + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_global_variable.py b/datadog_api_client/v1/model/synthetics_global_variable.py new file mode 100644 index 0000000000..b2d1636211 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_global_variable.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_global_variable_attributes import SyntheticsGlobalVariableAttributes + from datadog_api_client.v1.model.synthetics_global_variable_parse_test_options import SyntheticsGlobalVariableParseTestOptions + from datadog_api_client.v1.model.synthetics_global_variable_value import SyntheticsGlobalVariableValue + +class SyntheticsGlobalVariable(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_global_variable_attributes import SyntheticsGlobalVariableAttributes + from datadog_api_client.v1.model.synthetics_global_variable_parse_test_options import SyntheticsGlobalVariableParseTestOptions + from datadog_api_client.v1.model.synthetics_global_variable_value import SyntheticsGlobalVariableValue + return { + "attributes": (SyntheticsGlobalVariableAttributes,), + "description": (str,), + "id": (str,), + "is_fido": (bool,), + "is_totp": (bool,), + "name": (str,), + "parse_test_options": (SyntheticsGlobalVariableParseTestOptions,), + "parse_test_public_id": (str,), + "tags": ([str],), + "value": (SyntheticsGlobalVariableValue,), + } + attribute_map = { + "attributes": "attributes", + "description": "description", + "id": "id", + "is_fido": "is_fido", + "is_totp": "is_totp", + "name": "name", + "parse_test_options": "parse_test_options", + "parse_test_public_id": "parse_test_public_id", + "tags": "tags", + "value": "value", + } + read_only_vars = { + "id", + } + + def __init__(self_, description: str, name: str, tags: List[str], value: SyntheticsGlobalVariableValue, attributes: Union[SyntheticsGlobalVariableAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_fido: Union[bool, UnsetType]=unset, is_totp: Union[bool, UnsetType]=unset, parse_test_options: Union[SyntheticsGlobalVariableParseTestOptions, UnsetType]=unset, parse_test_public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Synthetic global variable. + + :param attributes: Attributes of the global variable. + :type attributes: SyntheticsGlobalVariableAttributes, optional + + :param description: Description of the global variable. + :type description: str + + :param id: Unique identifier of the global variable. + :type id: str, optional + + :param is_fido: Determines if the global variable is a FIDO variable. + :type is_fido: bool, optional + + :param is_totp: Determines if the global variable is a TOTP/MFA variable. + :type is_totp: bool, optional + + :param name: Name of the global variable. Unique across Synthetic global variables. + :type name: str + + :param parse_test_options: Parser options to use for retrieving a Synthetic global variable from a Synthetic test. Used in conjunction with ``parse_test_public_id``. + :type parse_test_options: SyntheticsGlobalVariableParseTestOptions, optional + + :param parse_test_public_id: A Synthetic test ID to use as a test to generate the variable value. + :type parse_test_public_id: str, optional + + :param tags: Tags of the global variable. + :type tags: [str] + + :param value: Value of the global variable. + :type value: SyntheticsGlobalVariableValue + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if is_fido is not unset: + kwargs["is_fido"] = is_fido + if is_totp is not unset: + kwargs["is_totp"] = is_totp + if parse_test_options is not unset: + kwargs["parse_test_options"] = parse_test_options + if parse_test_public_id is not unset: + kwargs["parse_test_public_id"] = parse_test_public_id + super().__init__(kwargs) + + + self_.description = description + self_.name = name + self_.tags = tags + self_.value = value diff --git a/datadog_api_client/v1/model/synthetics_global_variable_attributes.py b/datadog_api_client/v1/model/synthetics_global_variable_attributes.py new file mode 100644 index 0000000000..a2c75f459e --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_global_variable_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_restricted_roles import SyntheticsRestrictedRoles + +class SyntheticsGlobalVariableAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_restricted_roles import SyntheticsRestrictedRoles + return { + "restricted_roles": (SyntheticsRestrictedRoles,), + } + attribute_map = { + "restricted_roles": "restricted_roles", + } + + def __init__(self_, restricted_roles: Union[SyntheticsRestrictedRoles, UnsetType]=unset, **kwargs): + """ + Attributes of the global variable. + + :param restricted_roles: A list of role identifiers that can be pulled from the Roles API, for restricting read and write access. This field is deprecated. Use the restriction policies API to manage permissions. **Deprecated**. + :type restricted_roles: SyntheticsRestrictedRoles, optional + """ + if restricted_roles is not unset: + kwargs["restricted_roles"] = restricted_roles + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_global_variable_options.py b/datadog_api_client/v1/model/synthetics_global_variable_options.py new file mode 100644 index 0000000000..75ef5e7531 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_global_variable_options.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_global_variable_totp_parameters import SyntheticsGlobalVariableTOTPParameters + +class SyntheticsGlobalVariableOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_global_variable_totp_parameters import SyntheticsGlobalVariableTOTPParameters + return { + "totp_parameters": (SyntheticsGlobalVariableTOTPParameters,), + } + attribute_map = { + "totp_parameters": "totp_parameters", + } + + def __init__(self_, totp_parameters: Union[SyntheticsGlobalVariableTOTPParameters, UnsetType]=unset, **kwargs): + """ + Options for the Global Variable for MFA. + + :param totp_parameters: Parameters for the TOTP/MFA variable + :type totp_parameters: SyntheticsGlobalVariableTOTPParameters, optional + """ + if totp_parameters is not unset: + kwargs["totp_parameters"] = totp_parameters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_global_variable_parse_test_options.py b/datadog_api_client/v1/model/synthetics_global_variable_parse_test_options.py new file mode 100644 index 0000000000..ba5a09a64b --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_global_variable_parse_test_options.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_variable_parser import SyntheticsVariableParser + from datadog_api_client.v1.model.synthetics_global_variable_parse_test_options_type import SyntheticsGlobalVariableParseTestOptionsType + +class SyntheticsGlobalVariableParseTestOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_variable_parser import SyntheticsVariableParser + from datadog_api_client.v1.model.synthetics_global_variable_parse_test_options_type import SyntheticsGlobalVariableParseTestOptionsType + return { + "field": (str,), + "local_variable_name": (str,), + "parser": (SyntheticsVariableParser,), + "type": (SyntheticsGlobalVariableParseTestOptionsType,), + } + attribute_map = { + "field": "field", + "local_variable_name": "localVariableName", + "parser": "parser", + "type": "type", + } + + def __init__(self_, type: SyntheticsGlobalVariableParseTestOptionsType, field: Union[str, UnsetType]=unset, local_variable_name: Union[str, UnsetType]=unset, parser: Union[SyntheticsVariableParser, UnsetType]=unset, **kwargs): + """ + Parser options to use for retrieving a Synthetic global variable from a Synthetic test. Used in conjunction with ``parse_test_public_id``. + + :param field: When type is ``http_header`` , name of the header to use to extract the value. + :type field: str, optional + + :param local_variable_name: When type is ``local_variable`` , name of the local variable to use to extract the value. + :type local_variable_name: str, optional + + :param parser: Details of the parser to use for the global variable. + :type parser: SyntheticsVariableParser, optional + + :param type: Type of value to extract from a test for a Synthetic global variable. + :type type: SyntheticsGlobalVariableParseTestOptionsType + """ + if field is not unset: + kwargs["field"] = field + if local_variable_name is not unset: + kwargs["local_variable_name"] = local_variable_name + if parser is not unset: + kwargs["parser"] = parser + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_global_variable_parse_test_options_type.py b/datadog_api_client/v1/model/synthetics_global_variable_parse_test_options_type.py new file mode 100644 index 0000000000..e8ff300561 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_global_variable_parse_test_options_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsGlobalVariableParseTestOptionsType(ModelSimple): + """ + Type of value to extract from a test for a Synthetic global variable. + + :param value: Must be one of ["http_body", "http_header", "http_status_code", "local_variable"]. + :type value: str + """ + + allowed_values = { + "http_body", + "http_header", + "http_status_code", + "local_variable", + } + HTTP_BODY: ClassVar["SyntheticsGlobalVariableParseTestOptionsType"] + HTTP_HEADER: ClassVar["SyntheticsGlobalVariableParseTestOptionsType"] + HTTP_STATUS_CODE: ClassVar["SyntheticsGlobalVariableParseTestOptionsType"] + LOCAL_VARIABLE: ClassVar["SyntheticsGlobalVariableParseTestOptionsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsGlobalVariableParseTestOptionsType.HTTP_BODY = SyntheticsGlobalVariableParseTestOptionsType("http_body") +SyntheticsGlobalVariableParseTestOptionsType.HTTP_HEADER = SyntheticsGlobalVariableParseTestOptionsType("http_header") +SyntheticsGlobalVariableParseTestOptionsType.HTTP_STATUS_CODE = SyntheticsGlobalVariableParseTestOptionsType("http_status_code") +SyntheticsGlobalVariableParseTestOptionsType.LOCAL_VARIABLE = SyntheticsGlobalVariableParseTestOptionsType("local_variable") diff --git a/datadog_api_client/v1/model/synthetics_global_variable_parser_type.py b/datadog_api_client/v1/model/synthetics_global_variable_parser_type.py new file mode 100644 index 0000000000..0422b5b640 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_global_variable_parser_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsGlobalVariableParserType(ModelSimple): + """ + Type of parser for a Synthetic global variable from a synthetics test. + + :param value: Must be one of ["raw", "json_path", "regex", "x_path"]. + :type value: str + """ + + allowed_values = { + "raw", + "json_path", + "regex", + "x_path", + } + RAW: ClassVar["SyntheticsGlobalVariableParserType"] + JSON_PATH: ClassVar["SyntheticsGlobalVariableParserType"] + REGEX: ClassVar["SyntheticsGlobalVariableParserType"] + X_PATH: ClassVar["SyntheticsGlobalVariableParserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsGlobalVariableParserType.RAW = SyntheticsGlobalVariableParserType("raw") +SyntheticsGlobalVariableParserType.JSON_PATH = SyntheticsGlobalVariableParserType("json_path") +SyntheticsGlobalVariableParserType.REGEX = SyntheticsGlobalVariableParserType("regex") +SyntheticsGlobalVariableParserType.X_PATH = SyntheticsGlobalVariableParserType("x_path") diff --git a/datadog_api_client/v1/model/synthetics_global_variable_request.py b/datadog_api_client/v1/model/synthetics_global_variable_request.py new file mode 100644 index 0000000000..eddbbeaec6 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_global_variable_request.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_global_variable_attributes import SyntheticsGlobalVariableAttributes + from datadog_api_client.v1.model.synthetics_global_variable_parse_test_options import SyntheticsGlobalVariableParseTestOptions + from datadog_api_client.v1.model.synthetics_global_variable_value import SyntheticsGlobalVariableValue + +class SyntheticsGlobalVariableRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_global_variable_attributes import SyntheticsGlobalVariableAttributes + from datadog_api_client.v1.model.synthetics_global_variable_parse_test_options import SyntheticsGlobalVariableParseTestOptions + from datadog_api_client.v1.model.synthetics_global_variable_value import SyntheticsGlobalVariableValue + return { + "attributes": (SyntheticsGlobalVariableAttributes,), + "description": (str,), + "id": (str,), + "is_fido": (bool,), + "is_totp": (bool,), + "name": (str,), + "parse_test_options": (SyntheticsGlobalVariableParseTestOptions,), + "parse_test_public_id": (str,), + "tags": ([str],), + "value": (SyntheticsGlobalVariableValue,), + } + attribute_map = { + "attributes": "attributes", + "description": "description", + "id": "id", + "is_fido": "is_fido", + "is_totp": "is_totp", + "name": "name", + "parse_test_options": "parse_test_options", + "parse_test_public_id": "parse_test_public_id", + "tags": "tags", + "value": "value", + } + read_only_vars = { + "id", + } + + def __init__(self_, description: str, name: str, tags: List[str], attributes: Union[SyntheticsGlobalVariableAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_fido: Union[bool, UnsetType]=unset, is_totp: Union[bool, UnsetType]=unset, parse_test_options: Union[SyntheticsGlobalVariableParseTestOptions, UnsetType]=unset, parse_test_public_id: Union[str, UnsetType]=unset, value: Union[SyntheticsGlobalVariableValue, UnsetType]=unset, **kwargs): + """ + Details of the global variable to create. + + :param attributes: Attributes of the global variable. + :type attributes: SyntheticsGlobalVariableAttributes, optional + + :param description: Description of the global variable. + :type description: str + + :param id: Unique identifier of the global variable. + :type id: str, optional + + :param is_fido: Determines if the global variable is a FIDO variable. + :type is_fido: bool, optional + + :param is_totp: Determines if the global variable is a TOTP/MFA variable. + :type is_totp: bool, optional + + :param name: Name of the global variable. Unique across Synthetic global variables. + :type name: str + + :param parse_test_options: Parser options to use for retrieving a Synthetic global variable from a Synthetic test. Used in conjunction with ``parse_test_public_id``. + :type parse_test_options: SyntheticsGlobalVariableParseTestOptions, optional + + :param parse_test_public_id: A Synthetic test ID to use as a test to generate the variable value. + :type parse_test_public_id: str, optional + + :param tags: Tags of the global variable. + :type tags: [str] + + :param value: Value of the global variable. + :type value: SyntheticsGlobalVariableValue, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if is_fido is not unset: + kwargs["is_fido"] = is_fido + if is_totp is not unset: + kwargs["is_totp"] = is_totp + if parse_test_options is not unset: + kwargs["parse_test_options"] = parse_test_options + if parse_test_public_id is not unset: + kwargs["parse_test_public_id"] = parse_test_public_id + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.description = description + self_.name = name + self_.tags = tags diff --git a/datadog_api_client/v1/model/synthetics_global_variable_totp_parameters.py b/datadog_api_client/v1/model/synthetics_global_variable_totp_parameters.py new file mode 100644 index 0000000000..61ad65b683 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_global_variable_totp_parameters.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsGlobalVariableTOTPParameters(ModelNormal): + validations = { + "digits": { + "inclusive_maximum": 10, + "inclusive_minimum": 4, + }, + "refresh_interval": { + "inclusive_maximum": 999, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "digits": (int,), + "refresh_interval": (int,), + } + attribute_map = { + "digits": "digits", + "refresh_interval": "refresh_interval", + } + + def __init__(self_, digits: Union[int, UnsetType]=unset, refresh_interval: Union[int, UnsetType]=unset, **kwargs): + """ + Parameters for the TOTP/MFA variable + + :param digits: Number of digits for the OTP code. + :type digits: int, optional + + :param refresh_interval: Interval for which to refresh the token (in seconds). + :type refresh_interval: int, optional + """ + if digits is not unset: + kwargs["digits"] = digits + if refresh_interval is not unset: + kwargs["refresh_interval"] = refresh_interval + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_global_variable_value.py b/datadog_api_client/v1/model/synthetics_global_variable_value.py new file mode 100644 index 0000000000..96ea843fd7 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_global_variable_value.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_global_variable_options import SyntheticsGlobalVariableOptions + +class SyntheticsGlobalVariableValue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_global_variable_options import SyntheticsGlobalVariableOptions + return { + "options": (SyntheticsGlobalVariableOptions,), + "secure": (bool,), + "value": (str,), + } + attribute_map = { + "options": "options", + "secure": "secure", + "value": "value", + } + + def __init__(self_, options: Union[SyntheticsGlobalVariableOptions, UnsetType]=unset, secure: Union[bool, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + Value of the global variable. + + :param options: Options for the Global Variable for MFA. + :type options: SyntheticsGlobalVariableOptions, optional + + :param secure: Determines if the value of the variable is hidden. + :type secure: bool, optional + + :param value: Value of the global variable. When reading a global variable, + the value will not be present if the variable is hidden with the ``secure`` property. + :type value: str, optional + """ + if options is not unset: + kwargs["options"] = options + if secure is not unset: + kwargs["secure"] = secure + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_list_global_variables_response.py b/datadog_api_client/v1/model/synthetics_list_global_variables_response.py new file mode 100644 index 0000000000..4eb90659e9 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_list_global_variables_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_global_variable import SyntheticsGlobalVariable + +class SyntheticsListGlobalVariablesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_global_variable import SyntheticsGlobalVariable + return { + "variables": ([SyntheticsGlobalVariable],), + } + attribute_map = { + "variables": "variables", + } + + def __init__(self_, variables: Union[List[SyntheticsGlobalVariable], UnsetType]=unset, **kwargs): + """ + Object containing an array of Synthetic global variables. + + :param variables: Array of Synthetic global variables. + :type variables: [SyntheticsGlobalVariable], optional + """ + if variables is not unset: + kwargs["variables"] = variables + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_list_tests_response.py b/datadog_api_client/v1/model/synthetics_list_tests_response.py new file mode 100644 index 0000000000..1a795f6411 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_list_tests_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_details_without_steps import SyntheticsTestDetailsWithoutSteps + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsListTestsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_details_without_steps import SyntheticsTestDetailsWithoutSteps + return { + "tests": ([SyntheticsTestDetailsWithoutSteps],), + } + attribute_map = { + "tests": "tests", + } + + def __init__(self_, tests: Union[List[SyntheticsTestDetailsWithoutSteps], UnsetType]=unset, **kwargs): + """ + Object containing an array of Synthetic tests configuration. + + :param tests: Array of Synthetic tests configuration. + :type tests: [SyntheticsTestDetailsWithoutSteps], optional + """ + if tests is not unset: + kwargs["tests"] = tests + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_local_variable_parsing_options_type.py b/datadog_api_client/v1/model/synthetics_local_variable_parsing_options_type.py new file mode 100644 index 0000000000..61be4ba8bc --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_local_variable_parsing_options_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsLocalVariableParsingOptionsType(ModelSimple): + """ + Property of the Synthetic Test Response to extract into a local variable. + + :param value: Must be one of ["grpc_message", "grpc_metadata", "http_body", "http_header", "http_status_code"]. + :type value: str + """ + + allowed_values = { + "grpc_message", + "grpc_metadata", + "http_body", + "http_header", + "http_status_code", + } + GRPC_MESSAGE: ClassVar["SyntheticsLocalVariableParsingOptionsType"] + GRPC_METADATA: ClassVar["SyntheticsLocalVariableParsingOptionsType"] + HTTP_BODY: ClassVar["SyntheticsLocalVariableParsingOptionsType"] + HTTP_HEADER: ClassVar["SyntheticsLocalVariableParsingOptionsType"] + HTTP_STATUS_CODE: ClassVar["SyntheticsLocalVariableParsingOptionsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsLocalVariableParsingOptionsType.GRPC_MESSAGE = SyntheticsLocalVariableParsingOptionsType("grpc_message") +SyntheticsLocalVariableParsingOptionsType.GRPC_METADATA = SyntheticsLocalVariableParsingOptionsType("grpc_metadata") +SyntheticsLocalVariableParsingOptionsType.HTTP_BODY = SyntheticsLocalVariableParsingOptionsType("http_body") +SyntheticsLocalVariableParsingOptionsType.HTTP_HEADER = SyntheticsLocalVariableParsingOptionsType("http_header") +SyntheticsLocalVariableParsingOptionsType.HTTP_STATUS_CODE = SyntheticsLocalVariableParsingOptionsType("http_status_code") diff --git a/datadog_api_client/v1/model/synthetics_location.py b/datadog_api_client/v1/model/synthetics_location.py new file mode 100644 index 0000000000..1a561138ea --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_location.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsLocation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "name": (str,), + } + attribute_map = { + "id": "id", + "name": "name", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Synthetic location that can be used when creating or editing a + test. + + :param id: Unique identifier of the location. + :type id: str, optional + + :param name: Name of the location. + :type name: str, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_locations.py b/datadog_api_client/v1/model/synthetics_locations.py new file mode 100644 index 0000000000..6f7e0a081f --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_locations.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_location import SyntheticsLocation + +class SyntheticsLocations(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_location import SyntheticsLocation + return { + "locations": ([SyntheticsLocation],), + } + attribute_map = { + "locations": "locations", + } + + def __init__(self_, locations: Union[List[SyntheticsLocation], UnsetType]=unset, **kwargs): + """ + List of Synthetic locations. + + :param locations: List of Synthetic locations. + :type locations: [SyntheticsLocation], optional + """ + if locations is not unset: + kwargs["locations"] = locations + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_mcp_protocol_version.py b/datadog_api_client/v1/model/synthetics_mcp_protocol_version.py new file mode 100644 index 0000000000..db863a998f --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mcp_protocol_version.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsMCPProtocolVersion(ModelSimple): + """ + The MCP protocol version used by the step. See https://modelcontextprotocol.io/specification. + + :param value: If omitted defaults to "2025-06-18". Must be one of ["2025-06-18"]. + :type value: str + """ + + allowed_values = { + "2025-06-18", + } + VERSION_2025_06_18: ClassVar["SyntheticsMCPProtocolVersion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsMCPProtocolVersion.VERSION_2025_06_18 = SyntheticsMCPProtocolVersion("2025-06-18") diff --git a/datadog_api_client/v1/model/synthetics_mcp_server_capability.py b/datadog_api_client/v1/model/synthetics_mcp_server_capability.py new file mode 100644 index 0000000000..8261c96da1 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mcp_server_capability.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsMCPServerCapability(ModelSimple): + """ + A capability advertised by an MCP server. + + :param value: Must be one of ["completions", "experimental", "logging", "prompts", "resources", "tools"]. + :type value: str + """ + + allowed_values = { + "completions", + "experimental", + "logging", + "prompts", + "resources", + "tools", + } + COMPLETIONS: ClassVar["SyntheticsMCPServerCapability"] + EXPERIMENTAL: ClassVar["SyntheticsMCPServerCapability"] + LOGGING: ClassVar["SyntheticsMCPServerCapability"] + PROMPTS: ClassVar["SyntheticsMCPServerCapability"] + RESOURCES: ClassVar["SyntheticsMCPServerCapability"] + TOOLS: ClassVar["SyntheticsMCPServerCapability"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsMCPServerCapability.COMPLETIONS = SyntheticsMCPServerCapability("completions") +SyntheticsMCPServerCapability.EXPERIMENTAL = SyntheticsMCPServerCapability("experimental") +SyntheticsMCPServerCapability.LOGGING = SyntheticsMCPServerCapability("logging") +SyntheticsMCPServerCapability.PROMPTS = SyntheticsMCPServerCapability("prompts") +SyntheticsMCPServerCapability.RESOURCES = SyntheticsMCPServerCapability("resources") +SyntheticsMCPServerCapability.TOOLS = SyntheticsMCPServerCapability("tools") diff --git a/datadog_api_client/v1/model/synthetics_mobile_step.py b/datadog_api_client/v1/model/synthetics_mobile_step.py new file mode 100644 index 0000000000..a08e2b52e4 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_mobile_step_params import SyntheticsMobileStepParams + from datadog_api_client.v1.model.synthetics_mobile_step_type import SyntheticsMobileStepType + +class SyntheticsMobileStep(ModelNormal): + validations = { + "name": { + "max_length": 1500, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_mobile_step_params import SyntheticsMobileStepParams + from datadog_api_client.v1.model.synthetics_mobile_step_type import SyntheticsMobileStepType + return { + "allow_failure": (bool,), + "has_new_step_element": (bool,), + "is_critical": (bool,), + "name": (str,), + "no_screenshot": (bool,), + "params": (SyntheticsMobileStepParams,), + "public_id": (str,), + "timeout": (int,), + "type": (SyntheticsMobileStepType,), + } + attribute_map = { + "allow_failure": "allowFailure", + "has_new_step_element": "hasNewStepElement", + "is_critical": "isCritical", + "name": "name", + "no_screenshot": "noScreenshot", + "params": "params", + "public_id": "publicId", + "timeout": "timeout", + "type": "type", + } + + def __init__(self_, name: str, params: SyntheticsMobileStepParams, type: SyntheticsMobileStepType, allow_failure: Union[bool, UnsetType]=unset, has_new_step_element: Union[bool, UnsetType]=unset, is_critical: Union[bool, UnsetType]=unset, no_screenshot: Union[bool, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, timeout: Union[int, UnsetType]=unset, **kwargs): + """ + The steps used in a Synthetic mobile test. + + :param allow_failure: A boolean set to allow this step to fail. + :type allow_failure: bool, optional + + :param has_new_step_element: A boolean set to determine if the step has a new step element. + :type has_new_step_element: bool, optional + + :param is_critical: A boolean to use in addition to ``allowFailure`` to determine if the test should be marked as failed when the step fails. + :type is_critical: bool, optional + + :param name: The name of the step. + :type name: str + + :param no_screenshot: A boolean set to not take a screenshot for the step. + :type no_screenshot: bool, optional + + :param params: The parameters of a mobile step. + :type params: SyntheticsMobileStepParams + + :param public_id: The public ID of the step. + :type public_id: str, optional + + :param timeout: The time before declaring a step failed. + :type timeout: int, optional + + :param type: Step type used in your mobile Synthetic test. + :type type: SyntheticsMobileStepType + """ + if allow_failure is not unset: + kwargs["allow_failure"] = allow_failure + if has_new_step_element is not unset: + kwargs["has_new_step_element"] = has_new_step_element + if is_critical is not unset: + kwargs["is_critical"] = is_critical + if no_screenshot is not unset: + kwargs["no_screenshot"] = no_screenshot + if public_id is not unset: + kwargs["public_id"] = public_id + if timeout is not unset: + kwargs["timeout"] = timeout + super().__init__(kwargs) + + + self_.name = name + self_.params = params + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params.py b/datadog_api_client/v1/model/synthetics_mobile_step_params.py new file mode 100644 index 0000000000..69a6ecaf60 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params.py @@ -0,0 +1,149 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_check_type import SyntheticsCheckType + from datadog_api_client.v1.model.synthetics_mobile_step_params_direction import SyntheticsMobileStepParamsDirection + from datadog_api_client.v1.model.synthetics_mobile_step_params_element import SyntheticsMobileStepParamsElement + from datadog_api_client.v1.model.synthetics_mobile_step_params_positions_items import SyntheticsMobileStepParamsPositionsItems + from datadog_api_client.v1.model.synthetics_mobile_step_params_value import SyntheticsMobileStepParamsValue + from datadog_api_client.v1.model.synthetics_mobile_step_params_variable import SyntheticsMobileStepParamsVariable + +class SyntheticsMobileStepParams(ModelNormal): + validations = { + "delay": { + "inclusive_maximum": 5000, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_check_type import SyntheticsCheckType + from datadog_api_client.v1.model.synthetics_mobile_step_params_direction import SyntheticsMobileStepParamsDirection + from datadog_api_client.v1.model.synthetics_mobile_step_params_element import SyntheticsMobileStepParamsElement + from datadog_api_client.v1.model.synthetics_mobile_step_params_positions_items import SyntheticsMobileStepParamsPositionsItems + from datadog_api_client.v1.model.synthetics_mobile_step_params_value import SyntheticsMobileStepParamsValue + from datadog_api_client.v1.model.synthetics_mobile_step_params_variable import SyntheticsMobileStepParamsVariable + return { + "check": (SyntheticsCheckType,), + "delay": (int,), + "direction": (SyntheticsMobileStepParamsDirection,), + "element": (SyntheticsMobileStepParamsElement,), + "enabled": (bool,), + "max_scrolls": (int,), + "positions": ([SyntheticsMobileStepParamsPositionsItems],), + "subtest_public_id": (str,), + "value": (SyntheticsMobileStepParamsValue,), + "variable": (SyntheticsMobileStepParamsVariable,), + "with_enter": (bool,), + "x": (float,), + "y": (float,), + } + attribute_map = { + "check": "check", + "delay": "delay", + "direction": "direction", + "element": "element", + "enabled": "enabled", + "max_scrolls": "maxScrolls", + "positions": "positions", + "subtest_public_id": "subtestPublicId", + "value": "value", + "variable": "variable", + "with_enter": "withEnter", + "x": "x", + "y": "y", + } + + def __init__(self_, check: Union[SyntheticsCheckType, UnsetType]=unset, delay: Union[int, UnsetType]=unset, direction: Union[SyntheticsMobileStepParamsDirection, UnsetType]=unset, element: Union[SyntheticsMobileStepParamsElement, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, max_scrolls: Union[int, UnsetType]=unset, positions: Union[List[SyntheticsMobileStepParamsPositionsItems], UnsetType]=unset, subtest_public_id: Union[str, UnsetType]=unset, value: Union[SyntheticsMobileStepParamsValue, str, int, UnsetType]=unset, variable: Union[SyntheticsMobileStepParamsVariable, UnsetType]=unset, with_enter: Union[bool, UnsetType]=unset, x: Union[float, UnsetType]=unset, y: Union[float, UnsetType]=unset, **kwargs): + """ + The parameters of a mobile step. + + :param check: Type of assertion to apply in an API test. + :type check: SyntheticsCheckType, optional + + :param delay: Number of milliseconds to wait between inputs in a ``typeText`` step type. + :type delay: int, optional + + :param direction: The direction of the scroll for a ``scrollToElement`` step type. + :type direction: SyntheticsMobileStepParamsDirection, optional + + :param element: Information about the element used for a step. + :type element: SyntheticsMobileStepParamsElement, optional + + :param enabled: Boolean to change the state of the wifi for a ``toggleWiFi`` step type. + :type enabled: bool, optional + + :param max_scrolls: Maximum number of scrolls to do for a ``scrollToElement`` step type. + :type max_scrolls: int, optional + + :param positions: List of positions for the ``flick`` step type. The maximum is 10 flicks per step + :type positions: [SyntheticsMobileStepParamsPositionsItems], optional + + :param subtest_public_id: Public ID of the test to be played as part of a ``playSubTest`` step type. + :type subtest_public_id: str, optional + + :param value: Values used in the step for in multiple step types. + :type value: SyntheticsMobileStepParamsValue, optional + + :param variable: Variable object for ``extractVariable`` step type. + :type variable: SyntheticsMobileStepParamsVariable, optional + + :param with_enter: Boolean to indicate if ``Enter`` should be pressed at the end of the ``typeText`` step type. + :type with_enter: bool, optional + + :param x: Amount to scroll by on the ``x`` axis for a ``scroll`` step type. + :type x: float, optional + + :param y: Amount to scroll by on the ``y`` axis for a ``scroll`` step type. + :type y: float, optional + """ + if check is not unset: + kwargs["check"] = check + if delay is not unset: + kwargs["delay"] = delay + if direction is not unset: + kwargs["direction"] = direction + if element is not unset: + kwargs["element"] = element + if enabled is not unset: + kwargs["enabled"] = enabled + if max_scrolls is not unset: + kwargs["max_scrolls"] = max_scrolls + if positions is not unset: + kwargs["positions"] = positions + if subtest_public_id is not unset: + kwargs["subtest_public_id"] = subtest_public_id + if value is not unset: + kwargs["value"] = value + if variable is not unset: + kwargs["variable"] = variable + if with_enter is not unset: + kwargs["with_enter"] = with_enter + if x is not unset: + kwargs["x"] = x + if y is not unset: + kwargs["y"] = y + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_direction.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_direction.py new file mode 100644 index 0000000000..94f206cc8b --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_direction.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsMobileStepParamsDirection(ModelSimple): + """ + The direction of the scroll for a `scrollToElement` step type. + + :param value: Must be one of ["up", "down", "left", "right"]. + :type value: str + """ + + allowed_values = { + "up", + "down", + "left", + "right", + } + UP: ClassVar["SyntheticsMobileStepParamsDirection"] + DOWN: ClassVar["SyntheticsMobileStepParamsDirection"] + LEFT: ClassVar["SyntheticsMobileStepParamsDirection"] + RIGHT: ClassVar["SyntheticsMobileStepParamsDirection"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsMobileStepParamsDirection.UP = SyntheticsMobileStepParamsDirection("up") +SyntheticsMobileStepParamsDirection.DOWN = SyntheticsMobileStepParamsDirection("down") +SyntheticsMobileStepParamsDirection.LEFT = SyntheticsMobileStepParamsDirection("left") +SyntheticsMobileStepParamsDirection.RIGHT = SyntheticsMobileStepParamsDirection("right") diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_element.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_element.py new file mode 100644 index 0000000000..6c3c7e8346 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_element.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_context_type import SyntheticsMobileStepParamsElementContextType + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_relative_position import SyntheticsMobileStepParamsElementRelativePosition + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_user_locator import SyntheticsMobileStepParamsElementUserLocator + +class SyntheticsMobileStepParamsElement(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_context_type import SyntheticsMobileStepParamsElementContextType + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_relative_position import SyntheticsMobileStepParamsElementRelativePosition + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_user_locator import SyntheticsMobileStepParamsElementUserLocator + return { + "context": (str,), + "context_type": (SyntheticsMobileStepParamsElementContextType,), + "element_description": (str,), + "multi_locator": (dict,), + "relative_position": (SyntheticsMobileStepParamsElementRelativePosition,), + "text_content": (str,), + "user_locator": (SyntheticsMobileStepParamsElementUserLocator,), + "view_name": (str,), + } + attribute_map = { + "context": "context", + "context_type": "contextType", + "element_description": "elementDescription", + "multi_locator": "multiLocator", + "relative_position": "relativePosition", + "text_content": "textContent", + "user_locator": "userLocator", + "view_name": "viewName", + } + + def __init__(self_, context: Union[str, UnsetType]=unset, context_type: Union[SyntheticsMobileStepParamsElementContextType, UnsetType]=unset, element_description: Union[str, UnsetType]=unset, multi_locator: Union[dict, UnsetType]=unset, relative_position: Union[SyntheticsMobileStepParamsElementRelativePosition, UnsetType]=unset, text_content: Union[str, UnsetType]=unset, user_locator: Union[SyntheticsMobileStepParamsElementUserLocator, UnsetType]=unset, view_name: Union[str, UnsetType]=unset, **kwargs): + """ + Information about the element used for a step. + + :param context: Context of the element. + :type context: str, optional + + :param context_type: Type of the context that the element is in. + :type context_type: SyntheticsMobileStepParamsElementContextType, optional + + :param element_description: Description of the element. + :type element_description: str, optional + + :param multi_locator: Multi-locator to find the element. + :type multi_locator: dict, optional + + :param relative_position: Position of the action relative to the element. + :type relative_position: SyntheticsMobileStepParamsElementRelativePosition, optional + + :param text_content: Text content of the element. + :type text_content: str, optional + + :param user_locator: User locator to find the element. + :type user_locator: SyntheticsMobileStepParamsElementUserLocator, optional + + :param view_name: Name of the view of the element. + :type view_name: str, optional + """ + if context is not unset: + kwargs["context"] = context + if context_type is not unset: + kwargs["context_type"] = context_type + if element_description is not unset: + kwargs["element_description"] = element_description + if multi_locator is not unset: + kwargs["multi_locator"] = multi_locator + if relative_position is not unset: + kwargs["relative_position"] = relative_position + if text_content is not unset: + kwargs["text_content"] = text_content + if user_locator is not unset: + kwargs["user_locator"] = user_locator + if view_name is not unset: + kwargs["view_name"] = view_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_element_context_type.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_context_type.py new file mode 100644 index 0000000000..f76cb5c141 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_context_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsMobileStepParamsElementContextType(ModelSimple): + """ + Type of the context that the element is in. + + :param value: Must be one of ["native", "web"]. + :type value: str + """ + + allowed_values = { + "native", + "web", + } + NATIVE: ClassVar["SyntheticsMobileStepParamsElementContextType"] + WEB: ClassVar["SyntheticsMobileStepParamsElementContextType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsMobileStepParamsElementContextType.NATIVE = SyntheticsMobileStepParamsElementContextType("native") +SyntheticsMobileStepParamsElementContextType.WEB = SyntheticsMobileStepParamsElementContextType("web") diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_element_relative_position.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_relative_position.py new file mode 100644 index 0000000000..9a92f4f5ac --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_relative_position.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsMobileStepParamsElementRelativePosition(ModelNormal): + @cached_property + def openapi_types(_): + return { + "x": (float,), + "y": (float,), + } + attribute_map = { + "x": "x", + "y": "y", + } + + def __init__(self_, x: Union[float, UnsetType]=unset, y: Union[float, UnsetType]=unset, **kwargs): + """ + Position of the action relative to the element. + + :param x: The ``relativePosition`` on the ``x`` axis for the element. + :type x: float, optional + + :param y: The ``relativePosition`` on the ``y`` axis for the element. + :type y: float, optional + """ + if x is not unset: + kwargs["x"] = x + if y is not unset: + kwargs["y"] = y + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_element_user_locator.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_user_locator.py new file mode 100644 index 0000000000..fc631d8328 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_user_locator.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_user_locator_values_items import SyntheticsMobileStepParamsElementUserLocatorValuesItems + +class SyntheticsMobileStepParamsElementUserLocator(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_user_locator_values_items import SyntheticsMobileStepParamsElementUserLocatorValuesItems + return { + "fail_test_on_cannot_locate": (bool,), + "values": ([SyntheticsMobileStepParamsElementUserLocatorValuesItems],), + } + attribute_map = { + "fail_test_on_cannot_locate": "failTestOnCannotLocate", + "values": "values", + } + + def __init__(self_, fail_test_on_cannot_locate: Union[bool, UnsetType]=unset, values: Union[List[SyntheticsMobileStepParamsElementUserLocatorValuesItems], UnsetType]=unset, **kwargs): + """ + User locator to find the element. + + :param fail_test_on_cannot_locate: Whether if the test should fail if the element cannot be found. + :type fail_test_on_cannot_locate: bool, optional + + :param values: Values of the user locator. + :type values: [SyntheticsMobileStepParamsElementUserLocatorValuesItems], optional + """ + if fail_test_on_cannot_locate is not unset: + kwargs["fail_test_on_cannot_locate"] = fail_test_on_cannot_locate + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_element_user_locator_values_items.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_user_locator_values_items.py new file mode 100644 index 0000000000..d0a5633c1e --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_user_locator_values_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_user_locator_values_items_type import SyntheticsMobileStepParamsElementUserLocatorValuesItemsType + +class SyntheticsMobileStepParamsElementUserLocatorValuesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_mobile_step_params_element_user_locator_values_items_type import SyntheticsMobileStepParamsElementUserLocatorValuesItemsType + return { + "type": (SyntheticsMobileStepParamsElementUserLocatorValuesItemsType,), + "value": (str,), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: Union[SyntheticsMobileStepParamsElementUserLocatorValuesItemsType, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + A single user locator object. + + :param type: Type of a user locator. + :type type: SyntheticsMobileStepParamsElementUserLocatorValuesItemsType, optional + + :param value: Value of a user locator. + :type value: str, optional + """ + if type is not unset: + kwargs["type"] = type + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_element_user_locator_values_items_type.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_user_locator_values_items_type.py new file mode 100644 index 0000000000..3a0ca5f126 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_element_user_locator_values_items_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsMobileStepParamsElementUserLocatorValuesItemsType(ModelSimple): + """ + Type of a user locator. + + :param value: Must be one of ["accessibility-id", "id", "ios-predicate-string", "ios-class-chain", "xpath"]. + :type value: str + """ + + allowed_values = { + "accessibility-id", + "id", + "ios-predicate-string", + "ios-class-chain", + "xpath", + } + ACCESSIBILITY_ID: ClassVar["SyntheticsMobileStepParamsElementUserLocatorValuesItemsType"] + ID: ClassVar["SyntheticsMobileStepParamsElementUserLocatorValuesItemsType"] + IOS_PREDICATE_STRING: ClassVar["SyntheticsMobileStepParamsElementUserLocatorValuesItemsType"] + IOS_CLASS_CHAIN: ClassVar["SyntheticsMobileStepParamsElementUserLocatorValuesItemsType"] + XPATH: ClassVar["SyntheticsMobileStepParamsElementUserLocatorValuesItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsMobileStepParamsElementUserLocatorValuesItemsType.ACCESSIBILITY_ID = SyntheticsMobileStepParamsElementUserLocatorValuesItemsType("accessibility-id") +SyntheticsMobileStepParamsElementUserLocatorValuesItemsType.ID = SyntheticsMobileStepParamsElementUserLocatorValuesItemsType("id") +SyntheticsMobileStepParamsElementUserLocatorValuesItemsType.IOS_PREDICATE_STRING = SyntheticsMobileStepParamsElementUserLocatorValuesItemsType("ios-predicate-string") +SyntheticsMobileStepParamsElementUserLocatorValuesItemsType.IOS_CLASS_CHAIN = SyntheticsMobileStepParamsElementUserLocatorValuesItemsType("ios-class-chain") +SyntheticsMobileStepParamsElementUserLocatorValuesItemsType.XPATH = SyntheticsMobileStepParamsElementUserLocatorValuesItemsType("xpath") diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_positions_items.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_positions_items.py new file mode 100644 index 0000000000..bd8e4dcb87 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_positions_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsMobileStepParamsPositionsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "x": (float,), + "y": (float,), + } + attribute_map = { + "x": "x", + "y": "y", + } + + def __init__(self_, x: Union[float, UnsetType]=unset, y: Union[float, UnsetType]=unset, **kwargs): + """ + A description of a single position for a ``flick`` step type. + + :param x: The ``x`` position for the flick. + :type x: float, optional + + :param y: The ``y`` position for the flick. + :type y: float, optional + """ + if x is not unset: + kwargs["x"] = x + if y is not unset: + kwargs["y"] = y + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_value.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_value.py new file mode 100644 index 0000000000..8b1c81fb24 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_value.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsMobileStepParamsValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Values used in the step for in multiple step types. + """ + 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 + return { + "oneOf": [ + str, + int, + ], + } diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_params_variable.py b/datadog_api_client/v1/model/synthetics_mobile_step_params_variable.py new file mode 100644 index 0000000000..87fc137986 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_params_variable.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsMobileStepParamsVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "example": (str,), + "name": (str,), + } + attribute_map = { + "example": "example", + "name": "name", + } + + def __init__(self_, example: str, name: str, **kwargs): + """ + Variable object for ``extractVariable`` step type. + + :param example: An example for the variable. + :type example: str + + :param name: The variable name. + :type name: str + """ + super().__init__(kwargs) + + + self_.example = example + self_.name = name diff --git a/datadog_api_client/v1/model/synthetics_mobile_step_type.py b/datadog_api_client/v1/model/synthetics_mobile_step_type.py new file mode 100644 index 0000000000..a7be9c0763 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_step_type.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsMobileStepType(ModelSimple): + """ + Step type used in your mobile Synthetic test. + + :param value: Must be one of ["assertElementContent", "assertScreenContains", "assertScreenLacks", "doubleTap", "extractVariable", "flick", "openDeeplink", "playSubTest", "pressBack", "restartApplication", "rotate", "scroll", "scrollToElement", "tap", "toggleWiFi", "typeText", "wait"]. + :type value: str + """ + + allowed_values = { + "assertElementContent", + "assertScreenContains", + "assertScreenLacks", + "doubleTap", + "extractVariable", + "flick", + "openDeeplink", + "playSubTest", + "pressBack", + "restartApplication", + "rotate", + "scroll", + "scrollToElement", + "tap", + "toggleWiFi", + "typeText", + "wait", + } + ASSERTELEMENTCONTENT: ClassVar["SyntheticsMobileStepType"] + ASSERTSCREENCONTAINS: ClassVar["SyntheticsMobileStepType"] + ASSERTSCREENLACKS: ClassVar["SyntheticsMobileStepType"] + DOUBLETAP: ClassVar["SyntheticsMobileStepType"] + EXTRACTVARIABLE: ClassVar["SyntheticsMobileStepType"] + FLICK: ClassVar["SyntheticsMobileStepType"] + OPENDEEPLINK: ClassVar["SyntheticsMobileStepType"] + PLAYSUBTEST: ClassVar["SyntheticsMobileStepType"] + PRESSBACK: ClassVar["SyntheticsMobileStepType"] + RESTARTAPPLICATION: ClassVar["SyntheticsMobileStepType"] + ROTATE: ClassVar["SyntheticsMobileStepType"] + SCROLL: ClassVar["SyntheticsMobileStepType"] + SCROLLTOELEMENT: ClassVar["SyntheticsMobileStepType"] + TAP: ClassVar["SyntheticsMobileStepType"] + TOGGLEWIFI: ClassVar["SyntheticsMobileStepType"] + TYPETEXT: ClassVar["SyntheticsMobileStepType"] + WAIT: ClassVar["SyntheticsMobileStepType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsMobileStepType.ASSERTELEMENTCONTENT = SyntheticsMobileStepType("assertElementContent") +SyntheticsMobileStepType.ASSERTSCREENCONTAINS = SyntheticsMobileStepType("assertScreenContains") +SyntheticsMobileStepType.ASSERTSCREENLACKS = SyntheticsMobileStepType("assertScreenLacks") +SyntheticsMobileStepType.DOUBLETAP = SyntheticsMobileStepType("doubleTap") +SyntheticsMobileStepType.EXTRACTVARIABLE = SyntheticsMobileStepType("extractVariable") +SyntheticsMobileStepType.FLICK = SyntheticsMobileStepType("flick") +SyntheticsMobileStepType.OPENDEEPLINK = SyntheticsMobileStepType("openDeeplink") +SyntheticsMobileStepType.PLAYSUBTEST = SyntheticsMobileStepType("playSubTest") +SyntheticsMobileStepType.PRESSBACK = SyntheticsMobileStepType("pressBack") +SyntheticsMobileStepType.RESTARTAPPLICATION = SyntheticsMobileStepType("restartApplication") +SyntheticsMobileStepType.ROTATE = SyntheticsMobileStepType("rotate") +SyntheticsMobileStepType.SCROLL = SyntheticsMobileStepType("scroll") +SyntheticsMobileStepType.SCROLLTOELEMENT = SyntheticsMobileStepType("scrollToElement") +SyntheticsMobileStepType.TAP = SyntheticsMobileStepType("tap") +SyntheticsMobileStepType.TOGGLEWIFI = SyntheticsMobileStepType("toggleWiFi") +SyntheticsMobileStepType.TYPETEXT = SyntheticsMobileStepType("typeText") +SyntheticsMobileStepType.WAIT = SyntheticsMobileStepType("wait") diff --git a/datadog_api_client/v1/model/synthetics_mobile_test.py b/datadog_api_client/v1/model/synthetics_mobile_test.py new file mode 100644 index 0000000000..64b93b0e8f --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_test.py @@ -0,0 +1,127 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_mobile_test_config import SyntheticsMobileTestConfig + from datadog_api_client.v1.model.synthetics_mobile_test_options import SyntheticsMobileTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_mobile_step import SyntheticsMobileStep + from datadog_api_client.v1.model.synthetics_mobile_test_type import SyntheticsMobileTestType + +class SyntheticsMobileTest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_mobile_test_config import SyntheticsMobileTestConfig + from datadog_api_client.v1.model.synthetics_mobile_test_options import SyntheticsMobileTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_mobile_step import SyntheticsMobileStep + from datadog_api_client.v1.model.synthetics_mobile_test_type import SyntheticsMobileTestType + return { + "config": (SyntheticsMobileTestConfig,), + "device_ids": ([str],), + "message": (str,), + "monitor_id": (int,), + "name": (str,), + "options": (SyntheticsMobileTestOptions,), + "public_id": (str,), + "status": (SyntheticsTestPauseStatus,), + "steps": ([SyntheticsMobileStep],), + "tags": ([str],), + "type": (SyntheticsMobileTestType,), + } + attribute_map = { + "config": "config", + "device_ids": "device_ids", + "message": "message", + "monitor_id": "monitor_id", + "name": "name", + "options": "options", + "public_id": "public_id", + "status": "status", + "steps": "steps", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "monitor_id", + "public_id", + } + + def __init__(self_, config: SyntheticsMobileTestConfig, message: str, name: str, options: SyntheticsMobileTestOptions, type: SyntheticsMobileTestType, device_ids: Union[List[str], UnsetType]=unset, monitor_id: Union[int, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestPauseStatus, UnsetType]=unset, steps: Union[List[SyntheticsMobileStep], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing details about a Synthetic mobile test. + + :param config: Configuration object for a Synthetic mobile test. + :type config: SyntheticsMobileTestConfig + + :param device_ids: Array with the different device IDs used to run the test. + :type device_ids: [str], optional + + :param message: Notification message associated with the test. + :type message: str + + :param monitor_id: The associated monitor ID. + :type monitor_id: int, optional + + :param name: Name of the test. + :type name: str + + :param options: Object describing the extra options for a Synthetic test. + :type options: SyntheticsMobileTestOptions + + :param public_id: The public ID of the test. + :type public_id: str, optional + + :param status: Define whether you want to start ( ``live`` ) or pause ( ``paused`` ) a + Synthetic test. + :type status: SyntheticsTestPauseStatus, optional + + :param steps: Array of steps for the test. + :type steps: [SyntheticsMobileStep], optional + + :param tags: Array of tags attached to the test. + :type tags: [str], optional + + :param type: Type of the Synthetic test, ``mobile``. + :type type: SyntheticsMobileTestType + """ + if device_ids is not unset: + kwargs["device_ids"] = device_ids + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if public_id is not unset: + kwargs["public_id"] = public_id + if status is not unset: + kwargs["status"] = status + if steps is not unset: + kwargs["steps"] = steps + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.config = config + self_.message = message + self_.name = name + self_.options = options + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_mobile_test_config.py b/datadog_api_client/v1/model/synthetics_mobile_test_config.py new file mode 100644 index 0000000000..17543cb24f --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_test_config.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_mobile_test_initial_application_arguments import SyntheticsMobileTestInitialApplicationArguments + from datadog_api_client.v1.model.synthetics_config_variable import SyntheticsConfigVariable + +class SyntheticsMobileTestConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_mobile_test_initial_application_arguments import SyntheticsMobileTestInitialApplicationArguments + from datadog_api_client.v1.model.synthetics_config_variable import SyntheticsConfigVariable + return { + "initial_application_arguments": (SyntheticsMobileTestInitialApplicationArguments,), + "variables": ([SyntheticsConfigVariable],), + } + attribute_map = { + "initial_application_arguments": "initialApplicationArguments", + "variables": "variables", + } + + def __init__(self_, initial_application_arguments: Union[SyntheticsMobileTestInitialApplicationArguments, UnsetType]=unset, variables: Union[List[SyntheticsConfigVariable], UnsetType]=unset, **kwargs): + """ + Configuration object for a Synthetic mobile test. + + :param initial_application_arguments: Initial application arguments for a mobile test. + :type initial_application_arguments: SyntheticsMobileTestInitialApplicationArguments, optional + + :param variables: Array of variables used for the test steps. + :type variables: [SyntheticsConfigVariable], optional + """ + if initial_application_arguments is not unset: + kwargs["initial_application_arguments"] = initial_application_arguments + if variables is not unset: + kwargs["variables"] = variables + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_mobile_test_initial_application_arguments.py b/datadog_api_client/v1/model/synthetics_mobile_test_initial_application_arguments.py new file mode 100644 index 0000000000..93ad2876ed --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_test_initial_application_arguments.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsMobileTestInitialApplicationArguments(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + + def __init__(self_, **kwargs): + """ + Initial application arguments for a mobile test. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_mobile_test_options.py b/datadog_api_client/v1/model/synthetics_mobile_test_options.py new file mode 100644 index 0000000000..0926aa5163 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_test_options.py @@ -0,0 +1,193 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_restriction_policy_binding import SyntheticsTestRestrictionPolicyBinding + from datadog_api_client.v1.model.synthetics_test_ci_options import SyntheticsTestCiOptions + from datadog_api_client.v1.model.synthetics_mobile_tests_mobile_application import SyntheticsMobileTestsMobileApplication + from datadog_api_client.v1.model.synthetics_test_options_monitor_options import SyntheticsTestOptionsMonitorOptions + from datadog_api_client.v1.model.synthetics_restricted_roles import SyntheticsRestrictedRoles + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v1.model.synthetics_test_options_scheduling import SyntheticsTestOptionsScheduling + +class SyntheticsMobileTestOptions(ModelNormal): + validations = { + "default_step_timeout": { + "inclusive_maximum": 300, + "inclusive_minimum": 1, + }, + "min_failure_duration": { + "inclusive_maximum": 7200, + "inclusive_minimum": 0, + }, + "monitor_priority": { + "inclusive_maximum": 5, + "inclusive_minimum": 1, + }, + "tick_every": { + "inclusive_maximum": 604800, + "inclusive_minimum": 300, + }, + "verbosity": { + "inclusive_maximum": 5, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_restriction_policy_binding import SyntheticsTestRestrictionPolicyBinding + from datadog_api_client.v1.model.synthetics_test_ci_options import SyntheticsTestCiOptions + from datadog_api_client.v1.model.synthetics_mobile_tests_mobile_application import SyntheticsMobileTestsMobileApplication + from datadog_api_client.v1.model.synthetics_test_options_monitor_options import SyntheticsTestOptionsMonitorOptions + from datadog_api_client.v1.model.synthetics_restricted_roles import SyntheticsRestrictedRoles + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v1.model.synthetics_test_options_scheduling import SyntheticsTestOptionsScheduling + return { + "allow_application_crash": (bool,), + "bindings": ([SyntheticsTestRestrictionPolicyBinding],), + "ci": (SyntheticsTestCiOptions,), + "default_step_timeout": (int,), + "device_ids": ([str],), + "disable_auto_accept_alert": (bool,), + "min_failure_duration": (int,), + "mobile_application": (SyntheticsMobileTestsMobileApplication,), + "monitor_name": (str,), + "monitor_options": (SyntheticsTestOptionsMonitorOptions,), + "monitor_priority": (int,), + "no_screenshot": (bool,), + "restricted_roles": (SyntheticsRestrictedRoles,), + "retry": (SyntheticsTestOptionsRetry,), + "scheduling": (SyntheticsTestOptionsScheduling,), + "tick_every": (int,), + "verbosity": (int,), + } + attribute_map = { + "allow_application_crash": "allowApplicationCrash", + "bindings": "bindings", + "ci": "ci", + "default_step_timeout": "defaultStepTimeout", + "device_ids": "device_ids", + "disable_auto_accept_alert": "disableAutoAcceptAlert", + "min_failure_duration": "min_failure_duration", + "mobile_application": "mobileApplication", + "monitor_name": "monitor_name", + "monitor_options": "monitor_options", + "monitor_priority": "monitor_priority", + "no_screenshot": "noScreenshot", + "restricted_roles": "restricted_roles", + "retry": "retry", + "scheduling": "scheduling", + "tick_every": "tick_every", + "verbosity": "verbosity", + } + + def __init__(self_, device_ids: List[str], mobile_application: SyntheticsMobileTestsMobileApplication, tick_every: int, allow_application_crash: Union[bool, UnsetType]=unset, bindings: Union[List[SyntheticsTestRestrictionPolicyBinding], UnsetType]=unset, ci: Union[SyntheticsTestCiOptions, UnsetType]=unset, default_step_timeout: Union[int, UnsetType]=unset, disable_auto_accept_alert: Union[bool, UnsetType]=unset, min_failure_duration: Union[int, UnsetType]=unset, monitor_name: Union[str, UnsetType]=unset, monitor_options: Union[SyntheticsTestOptionsMonitorOptions, UnsetType]=unset, monitor_priority: Union[int, UnsetType]=unset, no_screenshot: Union[bool, UnsetType]=unset, restricted_roles: Union[SyntheticsRestrictedRoles, UnsetType]=unset, retry: Union[SyntheticsTestOptionsRetry, UnsetType]=unset, scheduling: Union[SyntheticsTestOptionsScheduling, UnsetType]=unset, verbosity: Union[int, UnsetType]=unset, **kwargs): + """ + Object describing the extra options for a Synthetic test. + + :param allow_application_crash: A boolean to set if an application crash would mark the test as failed. + :type allow_application_crash: bool, optional + + :param bindings: Array of bindings used for the mobile test. + :type bindings: [SyntheticsTestRestrictionPolicyBinding], optional + + :param ci: CI/CD options for a Synthetic test. + :type ci: SyntheticsTestCiOptions, optional + + :param default_step_timeout: The default timeout for steps in the test (in seconds). + :type default_step_timeout: int, optional + + :param device_ids: For mobile test, array with the different device IDs used to run the test. + :type device_ids: [str] + + :param disable_auto_accept_alert: A boolean to disable auto accepting alerts. + :type disable_auto_accept_alert: bool, optional + + :param min_failure_duration: Minimum amount of time in failure required to trigger an alert. + :type min_failure_duration: int, optional + + :param mobile_application: Mobile application for mobile synthetics test. + :type mobile_application: SyntheticsMobileTestsMobileApplication + + :param monitor_name: The monitor name is used for the alert title as well as for all monitor dashboard widgets and SLOs. + :type monitor_name: str, optional + + :param monitor_options: Object containing the options for a Synthetic test as a monitor + (for example, renotification). + :type monitor_options: SyntheticsTestOptionsMonitorOptions, optional + + :param monitor_priority: Integer from 1 (high) to 5 (low) indicating alert severity. + :type monitor_priority: int, optional + + :param no_screenshot: A boolean set to not take a screenshot for the step. + :type no_screenshot: bool, optional + + :param restricted_roles: A list of role identifiers that can be pulled from the Roles API, for restricting read and write access. This field is deprecated. Use the restriction policies API to manage permissions. **Deprecated**. + :type restricted_roles: SyntheticsRestrictedRoles, optional + + :param retry: Object describing the retry strategy to apply to a Synthetic test. + :type retry: SyntheticsTestOptionsRetry, optional + + :param scheduling: Object containing timeframes and timezone used for advanced scheduling. + :type scheduling: SyntheticsTestOptionsScheduling, optional + + :param tick_every: The frequency at which to run the Synthetic test (in seconds). + :type tick_every: int + + :param verbosity: The level of verbosity for the mobile test. This field can not be set by a user. + :type verbosity: int, optional + """ + if allow_application_crash is not unset: + kwargs["allow_application_crash"] = allow_application_crash + if bindings is not unset: + kwargs["bindings"] = bindings + if ci is not unset: + kwargs["ci"] = ci + if default_step_timeout is not unset: + kwargs["default_step_timeout"] = default_step_timeout + if disable_auto_accept_alert is not unset: + kwargs["disable_auto_accept_alert"] = disable_auto_accept_alert + if min_failure_duration is not unset: + kwargs["min_failure_duration"] = min_failure_duration + if monitor_name is not unset: + kwargs["monitor_name"] = monitor_name + if monitor_options is not unset: + kwargs["monitor_options"] = monitor_options + if monitor_priority is not unset: + kwargs["monitor_priority"] = monitor_priority + if no_screenshot is not unset: + kwargs["no_screenshot"] = no_screenshot + if restricted_roles is not unset: + kwargs["restricted_roles"] = restricted_roles + if retry is not unset: + kwargs["retry"] = retry + if scheduling is not unset: + kwargs["scheduling"] = scheduling + if verbosity is not unset: + kwargs["verbosity"] = verbosity + super().__init__(kwargs) + + + self_.device_ids = device_ids + self_.mobile_application = mobile_application + self_.tick_every = tick_every diff --git a/datadog_api_client/v1/model/synthetics_mobile_test_type.py b/datadog_api_client/v1/model/synthetics_mobile_test_type.py new file mode 100644 index 0000000000..cbef7269e0 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_test_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsMobileTestType(ModelSimple): + """ + Type of the Synthetic test, `mobile`. + + :param value: If omitted defaults to "mobile". Must be one of ["mobile"]. + :type value: str + """ + + allowed_values = { + "mobile", + } + MOBILE: ClassVar["SyntheticsMobileTestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsMobileTestType.MOBILE = SyntheticsMobileTestType("mobile") diff --git a/datadog_api_client/v1/model/synthetics_mobile_tests_mobile_application.py b/datadog_api_client/v1/model/synthetics_mobile_tests_mobile_application.py new file mode 100644 index 0000000000..609ea953bd --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_tests_mobile_application.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_mobile_tests_mobile_application_reference_type import SyntheticsMobileTestsMobileApplicationReferenceType + +class SyntheticsMobileTestsMobileApplication(ModelNormal): + validations = { + "application_id": { + "max_length": 1500, + }, + "reference_id": { + "max_length": 1500, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_mobile_tests_mobile_application_reference_type import SyntheticsMobileTestsMobileApplicationReferenceType + return { + "application_id": (str,), + "reference_id": (str,), + "reference_type": (SyntheticsMobileTestsMobileApplicationReferenceType,), + } + attribute_map = { + "application_id": "applicationId", + "reference_id": "referenceId", + "reference_type": "referenceType", + } + + def __init__(self_, application_id: str, reference_id: str, reference_type: SyntheticsMobileTestsMobileApplicationReferenceType, **kwargs): + """ + Mobile application for mobile synthetics test. + + :param application_id: Application ID of the mobile application. + :type application_id: str + + :param reference_id: Reference ID of the mobile application. + :type reference_id: str + + :param reference_type: Reference type for the mobile application for a mobile synthetics test. + :type reference_type: SyntheticsMobileTestsMobileApplicationReferenceType + """ + super().__init__(kwargs) + + + self_.application_id = application_id + self_.reference_id = reference_id + self_.reference_type = reference_type diff --git a/datadog_api_client/v1/model/synthetics_mobile_tests_mobile_application_reference_type.py b/datadog_api_client/v1/model/synthetics_mobile_tests_mobile_application_reference_type.py new file mode 100644 index 0000000000..3ad70b18ba --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_mobile_tests_mobile_application_reference_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsMobileTestsMobileApplicationReferenceType(ModelSimple): + """ + Reference type for the mobile application for a mobile synthetics test. + + :param value: Must be one of ["latest", "version"]. + :type value: str + """ + + allowed_values = { + "latest", + "version", + } + LATEST: ClassVar["SyntheticsMobileTestsMobileApplicationReferenceType"] + VERSION: ClassVar["SyntheticsMobileTestsMobileApplicationReferenceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsMobileTestsMobileApplicationReferenceType.LATEST = SyntheticsMobileTestsMobileApplicationReferenceType("latest") +SyntheticsMobileTestsMobileApplicationReferenceType.VERSION = SyntheticsMobileTestsMobileApplicationReferenceType("version") diff --git a/datadog_api_client/v1/model/synthetics_parsing_options.py b/datadog_api_client/v1/model/synthetics_parsing_options.py new file mode 100644 index 0000000000..72f46e65d6 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_parsing_options.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_variable_parser import SyntheticsVariableParser + from datadog_api_client.v1.model.synthetics_local_variable_parsing_options_type import SyntheticsLocalVariableParsingOptionsType + +class SyntheticsParsingOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_variable_parser import SyntheticsVariableParser + from datadog_api_client.v1.model.synthetics_local_variable_parsing_options_type import SyntheticsLocalVariableParsingOptionsType + return { + "field": (str,), + "name": (str,), + "parser": (SyntheticsVariableParser,), + "secure": (bool,), + "type": (SyntheticsLocalVariableParsingOptionsType,), + } + attribute_map = { + "field": "field", + "name": "name", + "parser": "parser", + "secure": "secure", + "type": "type", + } + + def __init__(self_, field: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, parser: Union[SyntheticsVariableParser, UnsetType]=unset, secure: Union[bool, UnsetType]=unset, type: Union[SyntheticsLocalVariableParsingOptionsType, UnsetType]=unset, **kwargs): + """ + Parsing options for variables to extract. + + :param field: When type is ``http_header`` or ``grpc_metadata`` , name of the header or metadatum to extract. + :type field: str, optional + + :param name: Name of the variable to extract. + :type name: str, optional + + :param parser: Details of the parser to use for the global variable. + :type parser: SyntheticsVariableParser, optional + + :param secure: Determines whether or not the extracted value will be obfuscated. + :type secure: bool, optional + + :param type: Property of the Synthetic Test Response to extract into a local variable. + :type type: SyntheticsLocalVariableParsingOptionsType, optional + """ + if field is not unset: + kwargs["field"] = field + if name is not unset: + kwargs["name"] = name + if parser is not unset: + kwargs["parser"] = parser + if secure is not unset: + kwargs["secure"] = secure + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_patch_test_body.py b/datadog_api_client/v1/model/synthetics_patch_test_body.py new file mode 100644 index 0000000000..dfd0266085 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_patch_test_body.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_patch_test_operation import SyntheticsPatchTestOperation + +class SyntheticsPatchTestBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_patch_test_operation import SyntheticsPatchTestOperation + return { + "data": ([SyntheticsPatchTestOperation],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SyntheticsPatchTestOperation], UnsetType]=unset, **kwargs): + """ + Wrapper around an array of `JSON Patch `_ operations to perform on the test + + :param data: Array of `JSON Patch `_ operations to perform on the test + :type data: [SyntheticsPatchTestOperation], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_patch_test_operation.py b/datadog_api_client/v1/model/synthetics_patch_test_operation.py new file mode 100644 index 0000000000..b192dea8f6 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_patch_test_operation.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_patch_test_operation_name import SyntheticsPatchTestOperationName + +class SyntheticsPatchTestOperation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_patch_test_operation_name import SyntheticsPatchTestOperationName + return { + "op": (SyntheticsPatchTestOperationName,), + "path": (str,), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "op": "op", + "path": "path", + "value": "value", + } + + def __init__(self_, op: Union[SyntheticsPatchTestOperationName, UnsetType]=unset, path: Union[str, UnsetType]=unset, value: Union[Any, UnsetType]=unset, **kwargs): + """ + A single `JSON Patch `_ operation to perform on the test + + :param op: The operation to perform + :type op: SyntheticsPatchTestOperationName, optional + + :param path: The path to the value to modify + :type path: str, optional + + :param value: A value to use in a `JSON Patch `_ operation + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + """ + if op is not unset: + kwargs["op"] = op + if path is not unset: + kwargs["path"] = path + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_patch_test_operation_name.py b/datadog_api_client/v1/model/synthetics_patch_test_operation_name.py new file mode 100644 index 0000000000..12d73a4dfe --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_patch_test_operation_name.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsPatchTestOperationName(ModelSimple): + """ + The operation to perform + + :param value: Must be one of ["add", "remove", "replace", "move", "copy", "test"]. + :type value: str + """ + + allowed_values = { + "add", + "remove", + "replace", + "move", + "copy", + "test", + } + ADD: ClassVar["SyntheticsPatchTestOperationName"] + REMOVE: ClassVar["SyntheticsPatchTestOperationName"] + REPLACE: ClassVar["SyntheticsPatchTestOperationName"] + MOVE: ClassVar["SyntheticsPatchTestOperationName"] + COPY: ClassVar["SyntheticsPatchTestOperationName"] + TEST: ClassVar["SyntheticsPatchTestOperationName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsPatchTestOperationName.ADD = SyntheticsPatchTestOperationName("add") +SyntheticsPatchTestOperationName.REMOVE = SyntheticsPatchTestOperationName("remove") +SyntheticsPatchTestOperationName.REPLACE = SyntheticsPatchTestOperationName("replace") +SyntheticsPatchTestOperationName.MOVE = SyntheticsPatchTestOperationName("move") +SyntheticsPatchTestOperationName.COPY = SyntheticsPatchTestOperationName("copy") +SyntheticsPatchTestOperationName.TEST = SyntheticsPatchTestOperationName("test") diff --git a/datadog_api_client/v1/model/synthetics_playing_tab.py b/datadog_api_client/v1/model/synthetics_playing_tab.py new file mode 100644 index 0000000000..29dc7897ef --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_playing_tab.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsPlayingTab(ModelSimple): + """ + Navigate between different tabs for your browser test. + + :param value: Must be one of [-1, 0, 1, 2, 3]. + :type value: int + """ + + allowed_values = { + -1, + 0, + 1, + 2, + 3, + } + MAIN_TAB: ClassVar["SyntheticsPlayingTab"] + NEW_TAB: ClassVar["SyntheticsPlayingTab"] + TAB_1: ClassVar["SyntheticsPlayingTab"] + TAB_2: ClassVar["SyntheticsPlayingTab"] + TAB_3: ClassVar["SyntheticsPlayingTab"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SyntheticsPlayingTab.MAIN_TAB = SyntheticsPlayingTab(-1) +SyntheticsPlayingTab.NEW_TAB = SyntheticsPlayingTab(0) +SyntheticsPlayingTab.TAB_1 = SyntheticsPlayingTab(1) +SyntheticsPlayingTab.TAB_2 = SyntheticsPlayingTab(2) +SyntheticsPlayingTab.TAB_3 = SyntheticsPlayingTab(3) diff --git a/datadog_api_client/v1/model/synthetics_private_location.py b/datadog_api_client/v1/model/synthetics_private_location.py new file mode 100644 index 0000000000..1c86ae2a63 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_private_location.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_private_location_metadata import SyntheticsPrivateLocationMetadata + from datadog_api_client.v1.model.synthetics_private_location_secrets import SyntheticsPrivateLocationSecrets + +class SyntheticsPrivateLocation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_private_location_metadata import SyntheticsPrivateLocationMetadata + from datadog_api_client.v1.model.synthetics_private_location_secrets import SyntheticsPrivateLocationSecrets + return { + "description": (str,), + "id": (str,), + "metadata": (SyntheticsPrivateLocationMetadata,), + "name": (str,), + "secrets": (SyntheticsPrivateLocationSecrets,), + "tags": ([str],), + } + attribute_map = { + "description": "description", + "id": "id", + "metadata": "metadata", + "name": "name", + "secrets": "secrets", + "tags": "tags", + } + read_only_vars = { + "id", + "secrets", + } + + def __init__(self_, description: str, name: str, tags: List[str], id: Union[str, UnsetType]=unset, metadata: Union[SyntheticsPrivateLocationMetadata, UnsetType]=unset, secrets: Union[SyntheticsPrivateLocationSecrets, UnsetType]=unset, **kwargs): + """ + Object containing information about the private location to create. + + :param description: Description of the private location. + :type description: str + + :param id: Unique identifier of the private location. + :type id: str, optional + + :param metadata: Object containing metadata about the private location. + :type metadata: SyntheticsPrivateLocationMetadata, optional + + :param name: Name of the private location. + :type name: str + + :param secrets: Secrets for the private location. Only present in the response when creating the private location. + :type secrets: SyntheticsPrivateLocationSecrets, optional + + :param tags: Array of tags attached to the private location. + :type tags: [str] + """ + if id is not unset: + kwargs["id"] = id + if metadata is not unset: + kwargs["metadata"] = metadata + if secrets is not unset: + kwargs["secrets"] = secrets + super().__init__(kwargs) + + + self_.description = description + self_.name = name + self_.tags = tags diff --git a/datadog_api_client/v1/model/synthetics_private_location_creation_response.py b/datadog_api_client/v1/model/synthetics_private_location_creation_response.py new file mode 100644 index 0000000000..efcaf6599d --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_private_location_creation_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_private_location import SyntheticsPrivateLocation + from datadog_api_client.v1.model.synthetics_private_location_creation_response_result_encryption import SyntheticsPrivateLocationCreationResponseResultEncryption + +class SyntheticsPrivateLocationCreationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_private_location import SyntheticsPrivateLocation + from datadog_api_client.v1.model.synthetics_private_location_creation_response_result_encryption import SyntheticsPrivateLocationCreationResponseResultEncryption + return { + "config": (dict,), + "private_location": (SyntheticsPrivateLocation,), + "result_encryption": (SyntheticsPrivateLocationCreationResponseResultEncryption,), + } + attribute_map = { + "config": "config", + "private_location": "private_location", + "result_encryption": "result_encryption", + } + + def __init__(self_, config: Union[dict, UnsetType]=unset, private_location: Union[SyntheticsPrivateLocation, UnsetType]=unset, result_encryption: Union[SyntheticsPrivateLocationCreationResponseResultEncryption, UnsetType]=unset, **kwargs): + """ + Object that contains the new private location, the public key for result encryption, and the configuration skeleton. + + :param config: Configuration skeleton for the private location. See installation instructions of the private location on how to use this configuration. + :type config: dict, optional + + :param private_location: Object containing information about the private location to create. + :type private_location: SyntheticsPrivateLocation, optional + + :param result_encryption: Public key for the result encryption. + :type result_encryption: SyntheticsPrivateLocationCreationResponseResultEncryption, optional + """ + if config is not unset: + kwargs["config"] = config + if private_location is not unset: + kwargs["private_location"] = private_location + if result_encryption is not unset: + kwargs["result_encryption"] = result_encryption + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_private_location_creation_response_result_encryption.py b/datadog_api_client/v1/model/synthetics_private_location_creation_response_result_encryption.py new file mode 100644 index 0000000000..dbc6d8aafc --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_private_location_creation_response_result_encryption.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsPrivateLocationCreationResponseResultEncryption(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "key": (str,), + } + attribute_map = { + "id": "id", + "key": "key", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, key: Union[str, UnsetType]=unset, **kwargs): + """ + Public key for the result encryption. + + :param id: Fingerprint for the encryption key. + :type id: str, optional + + :param key: Public key for result encryption. + :type key: str, optional + """ + if id is not unset: + kwargs["id"] = id + if key is not unset: + kwargs["key"] = key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_private_location_metadata.py b/datadog_api_client/v1/model/synthetics_private_location_metadata.py new file mode 100644 index 0000000000..f9b446604c --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_private_location_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_restricted_roles import SyntheticsRestrictedRoles + +class SyntheticsPrivateLocationMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_restricted_roles import SyntheticsRestrictedRoles + return { + "restricted_roles": (SyntheticsRestrictedRoles,), + } + attribute_map = { + "restricted_roles": "restricted_roles", + } + + def __init__(self_, restricted_roles: Union[SyntheticsRestrictedRoles, UnsetType]=unset, **kwargs): + """ + Object containing metadata about the private location. + + :param restricted_roles: A list of role identifiers that can be pulled from the Roles API, for restricting read and write access. This field is deprecated. Use the restriction policies API to manage permissions. **Deprecated**. + :type restricted_roles: SyntheticsRestrictedRoles, optional + """ + if restricted_roles is not unset: + kwargs["restricted_roles"] = restricted_roles + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_private_location_secrets.py b/datadog_api_client/v1/model/synthetics_private_location_secrets.py new file mode 100644 index 0000000000..4b73d687ca --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_private_location_secrets.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_private_location_secrets_authentication import SyntheticsPrivateLocationSecretsAuthentication + from datadog_api_client.v1.model.synthetics_private_location_secrets_config_decryption import SyntheticsPrivateLocationSecretsConfigDecryption + +class SyntheticsPrivateLocationSecrets(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_private_location_secrets_authentication import SyntheticsPrivateLocationSecretsAuthentication + from datadog_api_client.v1.model.synthetics_private_location_secrets_config_decryption import SyntheticsPrivateLocationSecretsConfigDecryption + return { + "authentication": (SyntheticsPrivateLocationSecretsAuthentication,), + "config_decryption": (SyntheticsPrivateLocationSecretsConfigDecryption,), + } + attribute_map = { + "authentication": "authentication", + "config_decryption": "config_decryption", + } + + def __init__(self_, authentication: Union[SyntheticsPrivateLocationSecretsAuthentication, UnsetType]=unset, config_decryption: Union[SyntheticsPrivateLocationSecretsConfigDecryption, UnsetType]=unset, **kwargs): + """ + Secrets for the private location. Only present in the response when creating the private location. + + :param authentication: Authentication part of the secrets. + :type authentication: SyntheticsPrivateLocationSecretsAuthentication, optional + + :param config_decryption: Private key for the private location. + :type config_decryption: SyntheticsPrivateLocationSecretsConfigDecryption, optional + """ + if authentication is not unset: + kwargs["authentication"] = authentication + if config_decryption is not unset: + kwargs["config_decryption"] = config_decryption + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_private_location_secrets_authentication.py b/datadog_api_client/v1/model/synthetics_private_location_secrets_authentication.py new file mode 100644 index 0000000000..a8174f1d69 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_private_location_secrets_authentication.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsPrivateLocationSecretsAuthentication(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "key": (str,), + } + attribute_map = { + "id": "id", + "key": "key", + } + read_only_vars = { + "id", + "key", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, key: Union[str, UnsetType]=unset, **kwargs): + """ + Authentication part of the secrets. + + :param id: Access key for the private location. + :type id: str, optional + + :param key: Secret access key for the private location. + :type key: str, optional + """ + if id is not unset: + kwargs["id"] = id + if key is not unset: + kwargs["key"] = key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_private_location_secrets_config_decryption.py b/datadog_api_client/v1/model/synthetics_private_location_secrets_config_decryption.py new file mode 100644 index 0000000000..269a3e624c --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_private_location_secrets_config_decryption.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsPrivateLocationSecretsConfigDecryption(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + } + attribute_map = { + "key": "key", + } + read_only_vars = { + "key", + } + + def __init__(self_, key: Union[str, UnsetType]=unset, **kwargs): + """ + Private key for the private location. + + :param key: Private key for the private location. + :type key: str, optional + """ + if key is not unset: + kwargs["key"] = key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_restricted_roles.py b/datadog_api_client/v1/model/synthetics_restricted_roles.py new file mode 100644 index 0000000000..f3046742ec --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_restricted_roles.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsRestrictedRoles(ModelSimple): + """ + A list of role identifiers that can be pulled from the Roles API, for restricting read and write access. This field is deprecated. Use the restriction policies API to manage permissions. + + + :type value: [str] + """ + + + + @cached_property + def openapi_types(_): + return { + "value": ([str],), + } diff --git a/datadog_api_client/v1/model/synthetics_ssl_certificate.py b/datadog_api_client/v1/model/synthetics_ssl_certificate.py new file mode 100644 index 0000000000..0ae2041316 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ssl_certificate.py @@ -0,0 +1,128 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_ssl_certificate_issuer import SyntheticsSSLCertificateIssuer + from datadog_api_client.v1.model.synthetics_ssl_certificate_subject import SyntheticsSSLCertificateSubject + +class SyntheticsSSLCertificate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_ssl_certificate_issuer import SyntheticsSSLCertificateIssuer + from datadog_api_client.v1.model.synthetics_ssl_certificate_subject import SyntheticsSSLCertificateSubject + return { + "cipher": (str,), + "exponent": (float,), + "ext_key_usage": ([str],), + "fingerprint": (str,), + "fingerprint256": (str,), + "issuer": (SyntheticsSSLCertificateIssuer,), + "modulus": (str,), + "protocol": (str,), + "serial_number": (str,), + "subject": (SyntheticsSSLCertificateSubject,), + "valid_from": (datetime,), + "valid_to": (datetime,), + } + attribute_map = { + "cipher": "cipher", + "exponent": "exponent", + "ext_key_usage": "extKeyUsage", + "fingerprint": "fingerprint", + "fingerprint256": "fingerprint256", + "issuer": "issuer", + "modulus": "modulus", + "protocol": "protocol", + "serial_number": "serialNumber", + "subject": "subject", + "valid_from": "validFrom", + "valid_to": "validTo", + } + + def __init__(self_, cipher: Union[str, UnsetType]=unset, exponent: Union[float, UnsetType]=unset, ext_key_usage: Union[List[str], UnsetType]=unset, fingerprint: Union[str, UnsetType]=unset, fingerprint256: Union[str, UnsetType]=unset, issuer: Union[SyntheticsSSLCertificateIssuer, UnsetType]=unset, modulus: Union[str, UnsetType]=unset, protocol: Union[str, UnsetType]=unset, serial_number: Union[str, UnsetType]=unset, subject: Union[SyntheticsSSLCertificateSubject, UnsetType]=unset, valid_from: Union[datetime, UnsetType]=unset, valid_to: Union[datetime, UnsetType]=unset, **kwargs): + """ + Object describing the SSL certificate used for a Synthetic test. + + :param cipher: Cipher used for the connection. + :type cipher: str, optional + + :param exponent: Exponent associated to the certificate. + :type exponent: float, optional + + :param ext_key_usage: Array of extensions and details used for the certificate. + :type ext_key_usage: [str], optional + + :param fingerprint: MD5 digest of the DER-encoded Certificate information. + :type fingerprint: str, optional + + :param fingerprint256: SHA-1 digest of the DER-encoded Certificate information. + :type fingerprint256: str, optional + + :param issuer: Object describing the issuer of a SSL certificate. + :type issuer: SyntheticsSSLCertificateIssuer, optional + + :param modulus: Modulus associated to the SSL certificate private key. + :type modulus: str, optional + + :param protocol: TLS protocol used for the test. + :type protocol: str, optional + + :param serial_number: Serial Number assigned by Symantec to the SSL certificate. + :type serial_number: str, optional + + :param subject: Object describing the SSL certificate used for the test. + :type subject: SyntheticsSSLCertificateSubject, optional + + :param valid_from: Date from which the SSL certificate is valid. + :type valid_from: datetime, optional + + :param valid_to: Date until which the SSL certificate is valid. + :type valid_to: datetime, optional + """ + if cipher is not unset: + kwargs["cipher"] = cipher + if exponent is not unset: + kwargs["exponent"] = exponent + if ext_key_usage is not unset: + kwargs["ext_key_usage"] = ext_key_usage + if fingerprint is not unset: + kwargs["fingerprint"] = fingerprint + if fingerprint256 is not unset: + kwargs["fingerprint256"] = fingerprint256 + if issuer is not unset: + kwargs["issuer"] = issuer + if modulus is not unset: + kwargs["modulus"] = modulus + if protocol is not unset: + kwargs["protocol"] = protocol + if serial_number is not unset: + kwargs["serial_number"] = serial_number + if subject is not unset: + kwargs["subject"] = subject + if valid_from is not unset: + kwargs["valid_from"] = valid_from + if valid_to is not unset: + kwargs["valid_to"] = valid_to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_ssl_certificate_issuer.py b/datadog_api_client/v1/model/synthetics_ssl_certificate_issuer.py new file mode 100644 index 0000000000..51bb04e327 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ssl_certificate_issuer.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsSSLCertificateIssuer(ModelNormal): + @cached_property + def openapi_types(_): + return { + "c": (str,), + "cn": (str,), + "l": (str,), + "o": (str,), + "ou": (str,), + "st": (str,), + } + attribute_map = { + "c": "C", + "cn": "CN", + "l": "L", + "o": "O", + "ou": "OU", + "st": "ST", + } + + def __init__(self_, c: Union[str, UnsetType]=unset, cn: Union[str, UnsetType]=unset, l: Union[str, UnsetType]=unset, o: Union[str, UnsetType]=unset, ou: Union[str, UnsetType]=unset, st: Union[str, UnsetType]=unset, **kwargs): + """ + Object describing the issuer of a SSL certificate. + + :param c: Country Name that issued the certificate. + :type c: str, optional + + :param cn: Common Name that issued certificate. + :type cn: str, optional + + :param l: Locality that issued the certificate. + :type l: str, optional + + :param o: Organization that issued the certificate. + :type o: str, optional + + :param ou: Organizational Unit that issued the certificate. + :type ou: str, optional + + :param st: State Or Province Name that issued the certificate. + :type st: str, optional + """ + if c is not unset: + kwargs["c"] = c + if cn is not unset: + kwargs["cn"] = cn + if l is not unset: + kwargs["l"] = l + if o is not unset: + kwargs["o"] = o + if ou is not unset: + kwargs["ou"] = ou + if st is not unset: + kwargs["st"] = st + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_ssl_certificate_subject.py b/datadog_api_client/v1/model/synthetics_ssl_certificate_subject.py new file mode 100644 index 0000000000..b878cc3188 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_ssl_certificate_subject.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsSSLCertificateSubject(ModelNormal): + @cached_property + def openapi_types(_): + return { + "c": (str,), + "cn": (str,), + "l": (str,), + "o": (str,), + "ou": (str,), + "st": (str,), + "alt_name": (str,), + } + attribute_map = { + "c": "C", + "cn": "CN", + "l": "L", + "o": "O", + "ou": "OU", + "st": "ST", + "alt_name": "altName", + } + + def __init__(self_, c: Union[str, UnsetType]=unset, cn: Union[str, UnsetType]=unset, l: Union[str, UnsetType]=unset, o: Union[str, UnsetType]=unset, ou: Union[str, UnsetType]=unset, st: Union[str, UnsetType]=unset, alt_name: Union[str, UnsetType]=unset, **kwargs): + """ + Object describing the SSL certificate used for the test. + + :param c: Country Name associated with the certificate. + :type c: str, optional + + :param cn: Common Name that associated with the certificate. + :type cn: str, optional + + :param l: Locality associated with the certificate. + :type l: str, optional + + :param o: Organization associated with the certificate. + :type o: str, optional + + :param ou: Organizational Unit associated with the certificate. + :type ou: str, optional + + :param st: State Or Province Name associated with the certificate. + :type st: str, optional + + :param alt_name: Subject Alternative Name associated with the certificate. + :type alt_name: str, optional + """ + if c is not unset: + kwargs["c"] = c + if cn is not unset: + kwargs["cn"] = cn + if l is not unset: + kwargs["l"] = l + if o is not unset: + kwargs["o"] = o + if ou is not unset: + kwargs["ou"] = ou + if st is not unset: + kwargs["st"] = st + if alt_name is not unset: + kwargs["alt_name"] = alt_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_step.py b/datadog_api_client/v1/model/synthetics_step.py new file mode 100644 index 0000000000..122f9cd20d --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_step.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_step_type import SyntheticsStepType + +class SyntheticsStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_step_type import SyntheticsStepType + return { + "allow_failure": (bool,), + "always_execute": (bool,), + "exit_if_succeed": (bool,), + "is_critical": (bool,), + "name": (str,), + "no_screenshot": (bool,), + "params": (dict,), + "public_id": (str,), + "timeout": (int,), + "type": (SyntheticsStepType,), + } + attribute_map = { + "allow_failure": "allowFailure", + "always_execute": "alwaysExecute", + "exit_if_succeed": "exitIfSucceed", + "is_critical": "isCritical", + "name": "name", + "no_screenshot": "noScreenshot", + "params": "params", + "public_id": "public_id", + "timeout": "timeout", + "type": "type", + } + + def __init__(self_, allow_failure: Union[bool, UnsetType]=unset, always_execute: Union[bool, UnsetType]=unset, exit_if_succeed: Union[bool, UnsetType]=unset, is_critical: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, no_screenshot: Union[bool, UnsetType]=unset, params: Union[dict, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, timeout: Union[int, UnsetType]=unset, type: Union[SyntheticsStepType, UnsetType]=unset, **kwargs): + """ + The steps used in a Synthetic browser test. + + :param allow_failure: A boolean set to allow this step to fail. + :type allow_failure: bool, optional + + :param always_execute: A boolean set to always execute this step even if the previous step failed or was skipped. + :type always_execute: bool, optional + + :param exit_if_succeed: A boolean set to exit the test if the step succeeds. + :type exit_if_succeed: bool, optional + + :param is_critical: A boolean to use in addition to ``allowFailure`` to determine if the test should be marked as failed when the step fails. + :type is_critical: bool, optional + + :param name: The name of the step. + :type name: str, optional + + :param no_screenshot: A boolean set to skip taking a screenshot for the step. + :type no_screenshot: bool, optional + + :param params: The parameters of the step. + :type params: dict, optional + + :param public_id: The public ID of the step. + :type public_id: str, optional + + :param timeout: The time before declaring a step failed. + :type timeout: int, optional + + :param type: Step type used in your Synthetic test. + :type type: SyntheticsStepType, optional + """ + if allow_failure is not unset: + kwargs["allow_failure"] = allow_failure + if always_execute is not unset: + kwargs["always_execute"] = always_execute + if exit_if_succeed is not unset: + kwargs["exit_if_succeed"] = exit_if_succeed + if is_critical is not unset: + kwargs["is_critical"] = is_critical + if name is not unset: + kwargs["name"] = name + if no_screenshot is not unset: + kwargs["no_screenshot"] = no_screenshot + if params is not unset: + kwargs["params"] = params + if public_id is not unset: + kwargs["public_id"] = public_id + if timeout is not unset: + kwargs["timeout"] = timeout + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_step_detail.py b/datadog_api_client/v1/model/synthetics_step_detail.py new file mode 100644 index 0000000000..a927768bc2 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_step_detail.py @@ -0,0 +1,188 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_browser_error import SyntheticsBrowserError + from datadog_api_client.v1.model.synthetics_check_type import SyntheticsCheckType + from datadog_api_client.v1.model.synthetics_browser_test_result_failure import SyntheticsBrowserTestResultFailure + from datadog_api_client.v1.model.synthetics_playing_tab import SyntheticsPlayingTab + from datadog_api_client.v1.model.synthetics_step_type import SyntheticsStepType + from datadog_api_client.v1.model.synthetics_core_web_vitals import SyntheticsCoreWebVitals + from datadog_api_client.v1.model.synthetics_step_detail_warning import SyntheticsStepDetailWarning + +class SyntheticsStepDetail(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_browser_error import SyntheticsBrowserError + from datadog_api_client.v1.model.synthetics_check_type import SyntheticsCheckType + from datadog_api_client.v1.model.synthetics_browser_test_result_failure import SyntheticsBrowserTestResultFailure + from datadog_api_client.v1.model.synthetics_playing_tab import SyntheticsPlayingTab + from datadog_api_client.v1.model.synthetics_step_type import SyntheticsStepType + from datadog_api_client.v1.model.synthetics_core_web_vitals import SyntheticsCoreWebVitals + from datadog_api_client.v1.model.synthetics_step_detail_warning import SyntheticsStepDetailWarning + return { + "allow_failure": (bool,), + "browser_errors": ([SyntheticsBrowserError],), + "check_type": (SyntheticsCheckType,), + "description": (str,), + "duration": (float,), + "error": (str,), + "failure": (SyntheticsBrowserTestResultFailure,), + "playing_tab": (SyntheticsPlayingTab,), + "screenshot_bucket_key": (bool,), + "skipped": (bool,), + "snapshot_bucket_key": (bool,), + "step_id": (int,), + "sub_test_step_details": ([SyntheticsStepDetail],), + "time_to_interactive": (float,), + "type": (SyntheticsStepType,), + "url": (str,), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "vitals_metrics": ([SyntheticsCoreWebVitals],), + "warnings": ([SyntheticsStepDetailWarning],), + } + attribute_map = { + "allow_failure": "allowFailure", + "browser_errors": "browserErrors", + "check_type": "checkType", + "description": "description", + "duration": "duration", + "error": "error", + "failure": "failure", + "playing_tab": "playingTab", + "screenshot_bucket_key": "screenshotBucketKey", + "skipped": "skipped", + "snapshot_bucket_key": "snapshotBucketKey", + "step_id": "stepId", + "sub_test_step_details": "subTestStepDetails", + "time_to_interactive": "timeToInteractive", + "type": "type", + "url": "url", + "value": "value", + "vitals_metrics": "vitalsMetrics", + "warnings": "warnings", + } + + def __init__(self_, allow_failure: Union[bool, UnsetType]=unset, browser_errors: Union[List[SyntheticsBrowserError], UnsetType]=unset, check_type: Union[SyntheticsCheckType, UnsetType]=unset, description: Union[str, UnsetType]=unset, duration: Union[float, UnsetType]=unset, error: Union[str, UnsetType]=unset, failure: Union[SyntheticsBrowserTestResultFailure, UnsetType]=unset, playing_tab: Union[SyntheticsPlayingTab, UnsetType]=unset, screenshot_bucket_key: Union[bool, UnsetType]=unset, skipped: Union[bool, UnsetType]=unset, snapshot_bucket_key: Union[bool, UnsetType]=unset, step_id: Union[int, UnsetType]=unset, sub_test_step_details: Union[List[SyntheticsStepDetail], UnsetType]=unset, time_to_interactive: Union[float, UnsetType]=unset, type: Union[SyntheticsStepType, UnsetType]=unset, url: Union[str, UnsetType]=unset, value: Union[Any, UnsetType]=unset, vitals_metrics: Union[List[SyntheticsCoreWebVitals], UnsetType]=unset, warnings: Union[List[SyntheticsStepDetailWarning], UnsetType]=unset, **kwargs): + """ + Object describing a step for a Synthetic test. + + :param allow_failure: Whether or not the step was allowed to fail. + :type allow_failure: bool, optional + + :param browser_errors: Array of errors collected for a browser test. + :type browser_errors: [SyntheticsBrowserError], optional + + :param check_type: Type of assertion to apply in an API test. + :type check_type: SyntheticsCheckType, optional + + :param description: Description of the test. + :type description: str, optional + + :param duration: Total duration in millisecond of the test. + :type duration: float, optional + + :param error: Error returned by the test. + :type error: str, optional + + :param failure: The browser test failure details. + :type failure: SyntheticsBrowserTestResultFailure, optional + + :param playing_tab: Navigate between different tabs for your browser test. + :type playing_tab: SyntheticsPlayingTab, optional + + :param screenshot_bucket_key: Whether or not screenshots where collected by the test. + :type screenshot_bucket_key: bool, optional + + :param skipped: Whether or not to skip this step. + :type skipped: bool, optional + + :param snapshot_bucket_key: Whether or not snapshots where collected by the test. + :type snapshot_bucket_key: bool, optional + + :param step_id: The step ID. + :type step_id: int, optional + + :param sub_test_step_details: If this step includes a sub-test. + `Subtests documentation `_. + :type sub_test_step_details: [SyntheticsStepDetail], optional + + :param time_to_interactive: Time before starting the step. + :type time_to_interactive: float, optional + + :param type: Step type used in your Synthetic test. + :type type: SyntheticsStepType, optional + + :param url: URL to perform the step against. + :type url: str, optional + + :param value: Value for the step. + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param vitals_metrics: Array of Core Web Vitals metrics for the step. + :type vitals_metrics: [SyntheticsCoreWebVitals], optional + + :param warnings: Warning collected that didn't failed the step. + :type warnings: [SyntheticsStepDetailWarning], optional + """ + if allow_failure is not unset: + kwargs["allow_failure"] = allow_failure + if browser_errors is not unset: + kwargs["browser_errors"] = browser_errors + if check_type is not unset: + kwargs["check_type"] = check_type + if description is not unset: + kwargs["description"] = description + if duration is not unset: + kwargs["duration"] = duration + if error is not unset: + kwargs["error"] = error + if failure is not unset: + kwargs["failure"] = failure + if playing_tab is not unset: + kwargs["playing_tab"] = playing_tab + if screenshot_bucket_key is not unset: + kwargs["screenshot_bucket_key"] = screenshot_bucket_key + if skipped is not unset: + kwargs["skipped"] = skipped + if snapshot_bucket_key is not unset: + kwargs["snapshot_bucket_key"] = snapshot_bucket_key + if step_id is not unset: + kwargs["step_id"] = step_id + if sub_test_step_details is not unset: + kwargs["sub_test_step_details"] = sub_test_step_details + if time_to_interactive is not unset: + kwargs["time_to_interactive"] = time_to_interactive + if type is not unset: + kwargs["type"] = type + if url is not unset: + kwargs["url"] = url + if value is not unset: + kwargs["value"] = value + if vitals_metrics is not unset: + kwargs["vitals_metrics"] = vitals_metrics + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_step_detail_warning.py b/datadog_api_client/v1/model/synthetics_step_detail_warning.py new file mode 100644 index 0000000000..13b62b06f3 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_step_detail_warning.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_warning_type import SyntheticsWarningType + +class SyntheticsStepDetailWarning(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_warning_type import SyntheticsWarningType + return { + "message": (str,), + "type": (SyntheticsWarningType,), + } + attribute_map = { + "message": "message", + "type": "type", + } + + def __init__(self_, message: str, type: SyntheticsWarningType, **kwargs): + """ + Object collecting warnings for a given step. + + :param message: Message for the warning. + :type message: str + + :param type: User locator used. + :type type: SyntheticsWarningType + """ + super().__init__(kwargs) + + + self_.message = message + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_step_type.py b/datadog_api_client/v1/model/synthetics_step_type.py new file mode 100644 index 0000000000..b977403155 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_step_type.py @@ -0,0 +1,129 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsStepType(ModelSimple): + """ + Step type used in your Synthetic test. + + :param value: Must be one of ["assertCurrentUrl", "assertElementAttribute", "assertElementContent", "assertElementPresent", "assertEmail", "assertFileDownload", "assertFromJavascript", "assertPageContains", "assertPageLacks", "assertRequests", "click", "drag", "drop", "extractFromJavascript", "extractFromEmailBody", "extractVariable", "goToEmailLink", "goToUrl", "goToUrlAndMeasureTti", "hover", "playSubTest", "pressKey", "refresh", "runApiTest", "scroll", "selectOption", "typeText", "uploadFiles", "wait"]. + :type value: str + """ + + allowed_values = { + "assertCurrentUrl", + "assertElementAttribute", + "assertElementContent", + "assertElementPresent", + "assertEmail", + "assertFileDownload", + "assertFromJavascript", + "assertPageContains", + "assertPageLacks", + "assertRequests", + "click", + "drag", + "drop", + "extractFromJavascript", + "extractFromEmailBody", + "extractVariable", + "goToEmailLink", + "goToUrl", + "goToUrlAndMeasureTti", + "hover", + "playSubTest", + "pressKey", + "refresh", + "runApiTest", + "scroll", + "selectOption", + "typeText", + "uploadFiles", + "wait", + } + ASSERT_CURRENT_URL: ClassVar["SyntheticsStepType"] + ASSERT_ELEMENT_ATTRIBUTE: ClassVar["SyntheticsStepType"] + ASSERT_ELEMENT_CONTENT: ClassVar["SyntheticsStepType"] + ASSERT_ELEMENT_PRESENT: ClassVar["SyntheticsStepType"] + ASSERT_EMAIL: ClassVar["SyntheticsStepType"] + ASSERT_FILE_DOWNLOAD: ClassVar["SyntheticsStepType"] + ASSERT_FROM_JAVASCRIPT: ClassVar["SyntheticsStepType"] + ASSERT_PAGE_CONTAINS: ClassVar["SyntheticsStepType"] + ASSERT_PAGE_LACKS: ClassVar["SyntheticsStepType"] + ASSERT_REQUESTS: ClassVar["SyntheticsStepType"] + CLICK: ClassVar["SyntheticsStepType"] + DRAG: ClassVar["SyntheticsStepType"] + DROP: ClassVar["SyntheticsStepType"] + EXTRACT_FROM_JAVASCRIPT: ClassVar["SyntheticsStepType"] + EXTRACT_FROM_EMAIL_BODY: ClassVar["SyntheticsStepType"] + EXTRACT_VARIABLE: ClassVar["SyntheticsStepType"] + GO_TO_EMAIL_LINK: ClassVar["SyntheticsStepType"] + GO_TO_URL: ClassVar["SyntheticsStepType"] + GO_TO_URL_AND_MEASURE_TTI: ClassVar["SyntheticsStepType"] + HOVER: ClassVar["SyntheticsStepType"] + PLAY_SUB_TEST: ClassVar["SyntheticsStepType"] + PRESS_KEY: ClassVar["SyntheticsStepType"] + REFRESH: ClassVar["SyntheticsStepType"] + RUN_API_TEST: ClassVar["SyntheticsStepType"] + SCROLL: ClassVar["SyntheticsStepType"] + SELECT_OPTION: ClassVar["SyntheticsStepType"] + TYPE_TEXT: ClassVar["SyntheticsStepType"] + UPLOAD_FILES: ClassVar["SyntheticsStepType"] + WAIT: ClassVar["SyntheticsStepType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsStepType.ASSERT_CURRENT_URL = SyntheticsStepType("assertCurrentUrl") +SyntheticsStepType.ASSERT_ELEMENT_ATTRIBUTE = SyntheticsStepType("assertElementAttribute") +SyntheticsStepType.ASSERT_ELEMENT_CONTENT = SyntheticsStepType("assertElementContent") +SyntheticsStepType.ASSERT_ELEMENT_PRESENT = SyntheticsStepType("assertElementPresent") +SyntheticsStepType.ASSERT_EMAIL = SyntheticsStepType("assertEmail") +SyntheticsStepType.ASSERT_FILE_DOWNLOAD = SyntheticsStepType("assertFileDownload") +SyntheticsStepType.ASSERT_FROM_JAVASCRIPT = SyntheticsStepType("assertFromJavascript") +SyntheticsStepType.ASSERT_PAGE_CONTAINS = SyntheticsStepType("assertPageContains") +SyntheticsStepType.ASSERT_PAGE_LACKS = SyntheticsStepType("assertPageLacks") +SyntheticsStepType.ASSERT_REQUESTS = SyntheticsStepType("assertRequests") +SyntheticsStepType.CLICK = SyntheticsStepType("click") +SyntheticsStepType.DRAG = SyntheticsStepType("drag") +SyntheticsStepType.DROP = SyntheticsStepType("drop") +SyntheticsStepType.EXTRACT_FROM_JAVASCRIPT = SyntheticsStepType("extractFromJavascript") +SyntheticsStepType.EXTRACT_FROM_EMAIL_BODY = SyntheticsStepType("extractFromEmailBody") +SyntheticsStepType.EXTRACT_VARIABLE = SyntheticsStepType("extractVariable") +SyntheticsStepType.GO_TO_EMAIL_LINK = SyntheticsStepType("goToEmailLink") +SyntheticsStepType.GO_TO_URL = SyntheticsStepType("goToUrl") +SyntheticsStepType.GO_TO_URL_AND_MEASURE_TTI = SyntheticsStepType("goToUrlAndMeasureTti") +SyntheticsStepType.HOVER = SyntheticsStepType("hover") +SyntheticsStepType.PLAY_SUB_TEST = SyntheticsStepType("playSubTest") +SyntheticsStepType.PRESS_KEY = SyntheticsStepType("pressKey") +SyntheticsStepType.REFRESH = SyntheticsStepType("refresh") +SyntheticsStepType.RUN_API_TEST = SyntheticsStepType("runApiTest") +SyntheticsStepType.SCROLL = SyntheticsStepType("scroll") +SyntheticsStepType.SELECT_OPTION = SyntheticsStepType("selectOption") +SyntheticsStepType.TYPE_TEXT = SyntheticsStepType("typeText") +SyntheticsStepType.UPLOAD_FILES = SyntheticsStepType("uploadFiles") +SyntheticsStepType.WAIT = SyntheticsStepType("wait") diff --git a/datadog_api_client/v1/model/synthetics_test_call_type.py b/datadog_api_client/v1/model/synthetics_test_call_type.py new file mode 100644 index 0000000000..8f127e71a7 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_call_type.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestCallType(ModelSimple): + """ + The type of call to perform. Used by gRPC steps (`healthcheck`, `unary`) + and MCP steps (`init`, `tool_list`, `tool_call`). Valid values depend on + the parent step's `subtype`. + + :param value: Must be one of ["healthcheck", "unary", "init", "tool_list", "tool_call"]. + :type value: str + """ + + allowed_values = { + "healthcheck", + "unary", + "init", + "tool_list", + "tool_call", + } + HEALTHCHECK: ClassVar["SyntheticsTestCallType"] + UNARY: ClassVar["SyntheticsTestCallType"] + INIT: ClassVar["SyntheticsTestCallType"] + TOOL_LIST: ClassVar["SyntheticsTestCallType"] + TOOL_CALL: ClassVar["SyntheticsTestCallType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestCallType.HEALTHCHECK = SyntheticsTestCallType("healthcheck") +SyntheticsTestCallType.UNARY = SyntheticsTestCallType("unary") +SyntheticsTestCallType.INIT = SyntheticsTestCallType("init") +SyntheticsTestCallType.TOOL_LIST = SyntheticsTestCallType("tool_list") +SyntheticsTestCallType.TOOL_CALL = SyntheticsTestCallType("tool_call") diff --git a/datadog_api_client/v1/model/synthetics_test_ci_options.py b/datadog_api_client/v1/model/synthetics_test_ci_options.py new file mode 100644 index 0000000000..81ecdc4954 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_ci_options.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_execution_rule import SyntheticsTestExecutionRule + +class SyntheticsTestCiOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_execution_rule import SyntheticsTestExecutionRule + return { + "execution_rule": (SyntheticsTestExecutionRule,), + } + attribute_map = { + "execution_rule": "executionRule", + } + + def __init__(self_, execution_rule: SyntheticsTestExecutionRule, **kwargs): + """ + CI/CD options for a Synthetic test. + + :param execution_rule: Execution rule for a Synthetic test. + :type execution_rule: SyntheticsTestExecutionRule + """ + super().__init__(kwargs) + + + self_.execution_rule = execution_rule diff --git a/datadog_api_client/v1/model/synthetics_test_config.py b/datadog_api_client/v1/model/synthetics_test_config.py new file mode 100644 index 0000000000..164174c624 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_config.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_assertion import SyntheticsAssertion + from datadog_api_client.v1.model.synthetics_config_variable import SyntheticsConfigVariable + from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest + from datadog_api_client.v1.model.synthetics_browser_variable import SyntheticsBrowserVariable + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsTestConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_assertion import SyntheticsAssertion + from datadog_api_client.v1.model.synthetics_config_variable import SyntheticsConfigVariable + from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest + from datadog_api_client.v1.model.synthetics_browser_variable import SyntheticsBrowserVariable + return { + "assertions": ([SyntheticsAssertion],), + "config_variables": ([SyntheticsConfigVariable],), + "request": (SyntheticsTestRequest,), + "variables": ([SyntheticsBrowserVariable],), + } + attribute_map = { + "assertions": "assertions", + "config_variables": "configVariables", + "request": "request", + "variables": "variables", + } + + def __init__(self_, assertions: Union[List[Union[SyntheticsAssertion, SyntheticsAssertionTarget, SyntheticsAssertionBodyHashTarget, SyntheticsAssertionJSONPathTarget, SyntheticsAssertionJSONSchemaTarget, SyntheticsAssertionXPathTarget, SyntheticsAssertionJavascript, SyntheticsAssertionMCPServerCapabilitiesTarget, SyntheticsAssertionMCPRespectsSpecification]], UnsetType]=unset, config_variables: Union[List[SyntheticsConfigVariable], UnsetType]=unset, request: Union[SyntheticsTestRequest, UnsetType]=unset, variables: Union[List[SyntheticsBrowserVariable], UnsetType]=unset, **kwargs): + """ + Configuration object for a Synthetic test. + + :param assertions: Array of assertions used for the test. Required for single API tests. + :type assertions: [SyntheticsAssertion], optional + + :param config_variables: Array of variables used for the test. + :type config_variables: [SyntheticsConfigVariable], optional + + :param request: Object describing the Synthetic test request. + :type request: SyntheticsTestRequest, optional + + :param variables: Browser tests only - array of variables used for the test steps. + :type variables: [SyntheticsBrowserVariable], optional + """ + if assertions is not unset: + kwargs["assertions"] = assertions + if config_variables is not unset: + kwargs["config_variables"] = config_variables + if request is not unset: + kwargs["request"] = request + if variables is not unset: + kwargs["variables"] = variables + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_details.py b/datadog_api_client/v1/model/synthetics_test_details.py new file mode 100644 index 0000000000..3aedff0221 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_details.py @@ -0,0 +1,167 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_config import SyntheticsTestConfig + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_step import SyntheticsStep + from datadog_api_client.v1.model.synthetics_test_details_sub_type import SyntheticsTestDetailsSubType + from datadog_api_client.v1.model.synthetics_test_details_type import SyntheticsTestDetailsType + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsTestDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_config import SyntheticsTestConfig + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_step import SyntheticsStep + from datadog_api_client.v1.model.synthetics_test_details_sub_type import SyntheticsTestDetailsSubType + from datadog_api_client.v1.model.synthetics_test_details_type import SyntheticsTestDetailsType + return { + "config": (SyntheticsTestConfig,), + "creator": (Creator,), + "locations": ([str],), + "message": (str,), + "monitor_id": (int,), + "name": (str,), + "options": (SyntheticsTestOptions,), + "public_id": (str,), + "status": (SyntheticsTestPauseStatus,), + "steps": ([SyntheticsStep],), + "subtype": (SyntheticsTestDetailsSubType,), + "tags": ([str],), + "type": (SyntheticsTestDetailsType,), + } + attribute_map = { + "config": "config", + "creator": "creator", + "locations": "locations", + "message": "message", + "monitor_id": "monitor_id", + "name": "name", + "options": "options", + "public_id": "public_id", + "status": "status", + "steps": "steps", + "subtype": "subtype", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "creator", + "monitor_id", + "public_id", + } + + def __init__(self_, config: Union[SyntheticsTestConfig, UnsetType]=unset, creator: Union[Creator, UnsetType]=unset, locations: Union[List[str], UnsetType]=unset, message: Union[str, UnsetType]=unset, monitor_id: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, options: Union[SyntheticsTestOptions, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestPauseStatus, UnsetType]=unset, steps: Union[List[SyntheticsStep], UnsetType]=unset, subtype: Union[SyntheticsTestDetailsSubType, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[SyntheticsTestDetailsType, UnsetType]=unset, **kwargs): + """ + Object containing details about your Synthetic test. + + :param config: Configuration object for a Synthetic test. + :type config: SyntheticsTestConfig, optional + + :param creator: Object describing the creator of the shared element. + :type creator: Creator, optional + + :param locations: Array of locations used to run the test. + :type locations: [str], optional + + :param message: Notification message associated with the test. + :type message: str, optional + + :param monitor_id: The associated monitor ID. + :type monitor_id: int, optional + + :param name: Name of the test. + :type name: str, optional + + :param options: Object describing the extra options for a Synthetic test. + :type options: SyntheticsTestOptions, optional + + :param public_id: The test public ID. + :type public_id: str, optional + + :param status: Define whether you want to start ( ``live`` ) or pause ( ``paused`` ) a + Synthetic test. + :type status: SyntheticsTestPauseStatus, optional + + :param steps: The steps of the test if they exist. + :type steps: [SyntheticsStep], optional + + :param subtype: The subtype of the Synthetic API test, ``http`` , ``ssl`` , ``tcp`` , + ``dns`` , ``icmp`` , ``udp`` , ``websocket`` , ``grpc`` or ``multi``. + :type subtype: SyntheticsTestDetailsSubType, optional + + :param tags: Array of tags attached to the test. + :type tags: [str], optional + + :param type: Type of the Synthetic test. + :type type: SyntheticsTestDetailsType, optional + """ + if config is not unset: + kwargs["config"] = config + if creator is not unset: + kwargs["creator"] = creator + if locations is not unset: + kwargs["locations"] = locations + if message is not unset: + kwargs["message"] = message + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if name is not unset: + kwargs["name"] = name + if options is not unset: + kwargs["options"] = options + if public_id is not unset: + kwargs["public_id"] = public_id + if status is not unset: + kwargs["status"] = status + if steps is not unset: + kwargs["steps"] = steps + if subtype is not unset: + kwargs["subtype"] = subtype + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_details_sub_type.py b/datadog_api_client/v1/model/synthetics_test_details_sub_type.py new file mode 100644 index 0000000000..c8c3009139 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_details_sub_type.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestDetailsSubType(ModelSimple): + """ + The subtype of the Synthetic API test, `http`, `ssl`, `tcp`, + `dns`, `icmp`, `udp`, `websocket`, `grpc` or `multi`. + + :param value: Must be one of ["http", "ssl", "tcp", "dns", "multi", "icmp", "udp", "websocket", "grpc"]. + :type value: str + """ + + allowed_values = { + "http", + "ssl", + "tcp", + "dns", + "multi", + "icmp", + "udp", + "websocket", + "grpc", + } + HTTP: ClassVar["SyntheticsTestDetailsSubType"] + SSL: ClassVar["SyntheticsTestDetailsSubType"] + TCP: ClassVar["SyntheticsTestDetailsSubType"] + DNS: ClassVar["SyntheticsTestDetailsSubType"] + MULTI: ClassVar["SyntheticsTestDetailsSubType"] + ICMP: ClassVar["SyntheticsTestDetailsSubType"] + UDP: ClassVar["SyntheticsTestDetailsSubType"] + WEBSOCKET: ClassVar["SyntheticsTestDetailsSubType"] + GRPC: ClassVar["SyntheticsTestDetailsSubType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestDetailsSubType.HTTP = SyntheticsTestDetailsSubType("http") +SyntheticsTestDetailsSubType.SSL = SyntheticsTestDetailsSubType("ssl") +SyntheticsTestDetailsSubType.TCP = SyntheticsTestDetailsSubType("tcp") +SyntheticsTestDetailsSubType.DNS = SyntheticsTestDetailsSubType("dns") +SyntheticsTestDetailsSubType.MULTI = SyntheticsTestDetailsSubType("multi") +SyntheticsTestDetailsSubType.ICMP = SyntheticsTestDetailsSubType("icmp") +SyntheticsTestDetailsSubType.UDP = SyntheticsTestDetailsSubType("udp") +SyntheticsTestDetailsSubType.WEBSOCKET = SyntheticsTestDetailsSubType("websocket") +SyntheticsTestDetailsSubType.GRPC = SyntheticsTestDetailsSubType("grpc") diff --git a/datadog_api_client/v1/model/synthetics_test_details_type.py b/datadog_api_client/v1/model/synthetics_test_details_type.py new file mode 100644 index 0000000000..4c74a61352 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_details_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestDetailsType(ModelSimple): + """ + Type of the Synthetic test. + + :param value: Must be one of ["api", "browser", "mobile", "network"]. + :type value: str + """ + + allowed_values = { + "api", + "browser", + "mobile", + "network", + } + API: ClassVar["SyntheticsTestDetailsType"] + BROWSER: ClassVar["SyntheticsTestDetailsType"] + MOBILE: ClassVar["SyntheticsTestDetailsType"] + NETWORK: ClassVar["SyntheticsTestDetailsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestDetailsType.API = SyntheticsTestDetailsType("api") +SyntheticsTestDetailsType.BROWSER = SyntheticsTestDetailsType("browser") +SyntheticsTestDetailsType.MOBILE = SyntheticsTestDetailsType("mobile") +SyntheticsTestDetailsType.NETWORK = SyntheticsTestDetailsType("network") diff --git a/datadog_api_client/v1/model/synthetics_test_details_without_steps.py b/datadog_api_client/v1/model/synthetics_test_details_without_steps.py new file mode 100644 index 0000000000..43e178d09c --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_details_without_steps.py @@ -0,0 +1,158 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_config import SyntheticsTestConfig + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_test_details_sub_type import SyntheticsTestDetailsSubType + from datadog_api_client.v1.model.synthetics_test_details_type import SyntheticsTestDetailsType + from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget + from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget + from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget + from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget + from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget + from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript + from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget + from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsTestDetailsWithoutSteps(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_config import SyntheticsTestConfig + from datadog_api_client.v1.model.creator import Creator + from datadog_api_client.v1.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v1.model.synthetics_test_details_sub_type import SyntheticsTestDetailsSubType + from datadog_api_client.v1.model.synthetics_test_details_type import SyntheticsTestDetailsType + return { + "config": (SyntheticsTestConfig,), + "creator": (Creator,), + "locations": ([str],), + "message": (str,), + "monitor_id": (int,), + "name": (str,), + "options": (SyntheticsTestOptions,), + "public_id": (str,), + "status": (SyntheticsTestPauseStatus,), + "subtype": (SyntheticsTestDetailsSubType,), + "tags": ([str],), + "type": (SyntheticsTestDetailsType,), + } + attribute_map = { + "config": "config", + "creator": "creator", + "locations": "locations", + "message": "message", + "monitor_id": "monitor_id", + "name": "name", + "options": "options", + "public_id": "public_id", + "status": "status", + "subtype": "subtype", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "creator", + "monitor_id", + "public_id", + } + + def __init__(self_, config: Union[SyntheticsTestConfig, UnsetType]=unset, creator: Union[Creator, UnsetType]=unset, locations: Union[List[str], UnsetType]=unset, message: Union[str, UnsetType]=unset, monitor_id: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, options: Union[SyntheticsTestOptions, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestPauseStatus, UnsetType]=unset, subtype: Union[SyntheticsTestDetailsSubType, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[SyntheticsTestDetailsType, UnsetType]=unset, **kwargs): + """ + Object containing details about your Synthetic test, without test steps. + + :param config: Configuration object for a Synthetic test. + :type config: SyntheticsTestConfig, optional + + :param creator: Object describing the creator of the shared element. + :type creator: Creator, optional + + :param locations: Array of locations used to run the test. + :type locations: [str], optional + + :param message: Notification message associated with the test. + :type message: str, optional + + :param monitor_id: The associated monitor ID. + :type monitor_id: int, optional + + :param name: Name of the test. + :type name: str, optional + + :param options: Object describing the extra options for a Synthetic test. + :type options: SyntheticsTestOptions, optional + + :param public_id: The test public ID. + :type public_id: str, optional + + :param status: Define whether you want to start ( ``live`` ) or pause ( ``paused`` ) a + Synthetic test. + :type status: SyntheticsTestPauseStatus, optional + + :param subtype: The subtype of the Synthetic API test, ``http`` , ``ssl`` , ``tcp`` , + ``dns`` , ``icmp`` , ``udp`` , ``websocket`` , ``grpc`` or ``multi``. + :type subtype: SyntheticsTestDetailsSubType, optional + + :param tags: Array of tags attached to the test. + :type tags: [str], optional + + :param type: Type of the Synthetic test. + :type type: SyntheticsTestDetailsType, optional + """ + if config is not unset: + kwargs["config"] = config + if creator is not unset: + kwargs["creator"] = creator + if locations is not unset: + kwargs["locations"] = locations + if message is not unset: + kwargs["message"] = message + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if name is not unset: + kwargs["name"] = name + if options is not unset: + kwargs["options"] = options + if public_id is not unset: + kwargs["public_id"] = public_id + if status is not unset: + kwargs["status"] = status + if subtype is not unset: + kwargs["subtype"] = subtype + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_execution_rule.py b/datadog_api_client/v1/model/synthetics_test_execution_rule.py new file mode 100644 index 0000000000..0a15ece6eb --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_execution_rule.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestExecutionRule(ModelSimple): + """ + Execution rule for a Synthetic test. + + :param value: Must be one of ["blocking", "non_blocking", "skipped"]. + :type value: str + """ + + allowed_values = { + "blocking", + "non_blocking", + "skipped", + } + BLOCKING: ClassVar["SyntheticsTestExecutionRule"] + NON_BLOCKING: ClassVar["SyntheticsTestExecutionRule"] + SKIPPED: ClassVar["SyntheticsTestExecutionRule"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestExecutionRule.BLOCKING = SyntheticsTestExecutionRule("blocking") +SyntheticsTestExecutionRule.NON_BLOCKING = SyntheticsTestExecutionRule("non_blocking") +SyntheticsTestExecutionRule.SKIPPED = SyntheticsTestExecutionRule("skipped") diff --git a/datadog_api_client/v1/model/synthetics_test_headers.py b/datadog_api_client/v1/model/synthetics_test_headers.py new file mode 100644 index 0000000000..488edd62c0 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_headers.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestHeaders(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + + def __init__(self_, **kwargs): + """ + Headers to include when performing the test. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_metadata.py b/datadog_api_client/v1/model/synthetics_test_metadata.py new file mode 100644 index 0000000000..05b9150129 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_metadata.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestMetadata(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + + def __init__(self_, **kwargs): + """ + Metadata to include when performing the gRPC test. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_monitor_status.py b/datadog_api_client/v1/model/synthetics_test_monitor_status.py new file mode 100644 index 0000000000..66ba14fd9d --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_monitor_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestMonitorStatus(ModelSimple): + """ + The status of your Synthetic monitor. + * `O` for not triggered + * `1` for triggered + * `2` for no data + + :param value: Must be one of [0, 1, 2]. + :type value: int + """ + + allowed_values = { + 0, + 1, + 2, + } + UNTRIGGERED: ClassVar["SyntheticsTestMonitorStatus"] + TRIGGERED: ClassVar["SyntheticsTestMonitorStatus"] + NO_DATA: ClassVar["SyntheticsTestMonitorStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SyntheticsTestMonitorStatus.UNTRIGGERED = SyntheticsTestMonitorStatus(0) +SyntheticsTestMonitorStatus.TRIGGERED = SyntheticsTestMonitorStatus(1) +SyntheticsTestMonitorStatus.NO_DATA = SyntheticsTestMonitorStatus(2) diff --git a/datadog_api_client/v1/model/synthetics_test_options.py b/datadog_api_client/v1/model/synthetics_test_options.py new file mode 100644 index 0000000000..a313e5f6e2 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_options.py @@ -0,0 +1,273 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_ci_options import SyntheticsTestCiOptions + from datadog_api_client.v1.model.synthetics_test_options_http_version import SyntheticsTestOptionsHTTPVersion + from datadog_api_client.v1.model.synthetics_test_options_monitor_options import SyntheticsTestOptionsMonitorOptions + from datadog_api_client.v1.model.synthetics_restricted_roles import SyntheticsRestrictedRoles + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v1.model.synthetics_browser_test_rum_settings import SyntheticsBrowserTestRumSettings + from datadog_api_client.v1.model.synthetics_test_options_scheduling import SyntheticsTestOptionsScheduling + +class SyntheticsTestOptions(ModelNormal): + validations = { + "monitor_priority": { + "inclusive_maximum": 5, + "inclusive_minimum": 1, + }, + "tick_every": { + "inclusive_maximum": 604800, + "inclusive_minimum": 30, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_ci_options import SyntheticsTestCiOptions + from datadog_api_client.v1.model.synthetics_test_options_http_version import SyntheticsTestOptionsHTTPVersion + from datadog_api_client.v1.model.synthetics_test_options_monitor_options import SyntheticsTestOptionsMonitorOptions + from datadog_api_client.v1.model.synthetics_restricted_roles import SyntheticsRestrictedRoles + from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v1.model.synthetics_browser_test_rum_settings import SyntheticsBrowserTestRumSettings + from datadog_api_client.v1.model.synthetics_test_options_scheduling import SyntheticsTestOptionsScheduling + return { + "accept_self_signed": (bool,), + "allow_insecure": (bool,), + "blocked_request_patterns": ([str],), + "capture_network_payloads": (bool,), + "check_certificate_revocation": (bool,), + "ci": (SyntheticsTestCiOptions,), + "device_ids": ([str],), + "disable_aia_intermediate_fetching": (bool,), + "disable_cors": (bool,), + "disable_csp": (bool,), + "enable_profiling": (bool,), + "enable_security_testing": (bool,), + "follow_redirects": (bool,), + "http_version": (SyntheticsTestOptionsHTTPVersion,), + "ignore_server_certificate_error": (bool,), + "ignore_certificate_validation": (bool,), + "initial_navigation_timeout": (int,), + "min_failure_duration": (int,), + "min_location_failed": (int,), + "monitor_name": (str,), + "monitor_options": (SyntheticsTestOptionsMonitorOptions,), + "monitor_priority": (int,), + "no_screenshot": (bool,), + "restricted_roles": (SyntheticsRestrictedRoles,), + "retry": (SyntheticsTestOptionsRetry,), + "rum_settings": (SyntheticsBrowserTestRumSettings,), + "scheduling": (SyntheticsTestOptionsScheduling,), + "tick_every": (int,), + } + attribute_map = { + "accept_self_signed": "accept_self_signed", + "allow_insecure": "allow_insecure", + "blocked_request_patterns": "blockedRequestPatterns", + "capture_network_payloads": "captureNetworkPayloads", + "check_certificate_revocation": "checkCertificateRevocation", + "ci": "ci", + "device_ids": "device_ids", + "disable_aia_intermediate_fetching": "disableAiaIntermediateFetching", + "disable_cors": "disableCors", + "disable_csp": "disableCsp", + "enable_profiling": "enableProfiling", + "enable_security_testing": "enableSecurityTesting", + "follow_redirects": "follow_redirects", + "http_version": "httpVersion", + "ignore_server_certificate_error": "ignoreServerCertificateError", + "ignore_certificate_validation": "ignore_certificate_validation", + "initial_navigation_timeout": "initialNavigationTimeout", + "min_failure_duration": "min_failure_duration", + "min_location_failed": "min_location_failed", + "monitor_name": "monitor_name", + "monitor_options": "monitor_options", + "monitor_priority": "monitor_priority", + "no_screenshot": "noScreenshot", + "restricted_roles": "restricted_roles", + "retry": "retry", + "rum_settings": "rumSettings", + "scheduling": "scheduling", + "tick_every": "tick_every", + } + + def __init__(self_, accept_self_signed: Union[bool, UnsetType]=unset, allow_insecure: Union[bool, UnsetType]=unset, blocked_request_patterns: Union[List[str], UnsetType]=unset, capture_network_payloads: Union[bool, UnsetType]=unset, check_certificate_revocation: Union[bool, UnsetType]=unset, ci: Union[SyntheticsTestCiOptions, UnsetType]=unset, device_ids: Union[List[str], UnsetType]=unset, disable_aia_intermediate_fetching: Union[bool, UnsetType]=unset, disable_cors: Union[bool, UnsetType]=unset, disable_csp: Union[bool, UnsetType]=unset, enable_profiling: Union[bool, UnsetType]=unset, enable_security_testing: Union[bool, UnsetType]=unset, follow_redirects: Union[bool, UnsetType]=unset, http_version: Union[SyntheticsTestOptionsHTTPVersion, UnsetType]=unset, ignore_server_certificate_error: Union[bool, UnsetType]=unset, ignore_certificate_validation: Union[bool, UnsetType]=unset, initial_navigation_timeout: Union[int, UnsetType]=unset, min_failure_duration: Union[int, UnsetType]=unset, min_location_failed: Union[int, UnsetType]=unset, monitor_name: Union[str, UnsetType]=unset, monitor_options: Union[SyntheticsTestOptionsMonitorOptions, UnsetType]=unset, monitor_priority: Union[int, UnsetType]=unset, no_screenshot: Union[bool, UnsetType]=unset, restricted_roles: Union[SyntheticsRestrictedRoles, UnsetType]=unset, retry: Union[SyntheticsTestOptionsRetry, UnsetType]=unset, rum_settings: Union[SyntheticsBrowserTestRumSettings, UnsetType]=unset, scheduling: Union[SyntheticsTestOptionsScheduling, UnsetType]=unset, tick_every: Union[int, UnsetType]=unset, **kwargs): + """ + Object describing the extra options for a Synthetic test. + + :param accept_self_signed: For SSL tests, whether or not the test should allow self signed + certificates. + :type accept_self_signed: bool, optional + + :param allow_insecure: Allows loading insecure content for an HTTP request in an API test. + :type allow_insecure: bool, optional + + :param blocked_request_patterns: Array of URL patterns to block. + :type blocked_request_patterns: [str], optional + + :param capture_network_payloads: Capture HTTP request/response headers and bodies for Fetch/XHR calls made during browser tests. + :type capture_network_payloads: bool, optional + + :param check_certificate_revocation: For SSL tests, whether or not the test should fail on revoked certificate in stapled OCSP. + :type check_certificate_revocation: bool, optional + + :param ci: CI/CD options for a Synthetic test. + :type ci: SyntheticsTestCiOptions, optional + + :param device_ids: For browser test, array with the different device IDs used to run the test. + :type device_ids: [str], optional + + :param disable_aia_intermediate_fetching: For SSL tests, whether or not the test should disable fetching intermediate certificates from AIA. + :type disable_aia_intermediate_fetching: bool, optional + + :param disable_cors: Whether or not to disable CORS mechanism. + :type disable_cors: bool, optional + + :param disable_csp: Disable Content Security Policy for browser tests. + :type disable_csp: bool, optional + + :param enable_profiling: Enable profiling for browser tests. + :type enable_profiling: bool, optional + + :param enable_security_testing: Enable security testing for browser tests. Security testing is not available anymore. This field is deprecated and won't be used. **Deprecated**. + :type enable_security_testing: bool, optional + + :param follow_redirects: For API HTTP test, whether or not the test should follow redirects. + :type follow_redirects: bool, optional + + :param http_version: HTTP version to use for a Synthetic test. + :type http_version: SyntheticsTestOptionsHTTPVersion, optional + + :param ignore_server_certificate_error: Ignore server certificate error for browser tests. + :type ignore_server_certificate_error: bool, optional + + :param ignore_certificate_validation: For SSL tests, whether the test should ignore certificate validation. + :type ignore_certificate_validation: bool, optional + + :param initial_navigation_timeout: Timeout before declaring the initial step as failed (in seconds) for browser tests. + :type initial_navigation_timeout: int, optional + + :param min_failure_duration: Minimum amount of time in failure required to trigger an alert. + :type min_failure_duration: int, optional + + :param min_location_failed: Minimum number of locations in failure required to trigger + an alert. + :type min_location_failed: int, optional + + :param monitor_name: The monitor name is used for the alert title as well as for all monitor dashboard widgets and SLOs. + :type monitor_name: str, optional + + :param monitor_options: Object containing the options for a Synthetic test as a monitor + (for example, renotification). + :type monitor_options: SyntheticsTestOptionsMonitorOptions, optional + + :param monitor_priority: Integer from 1 (high) to 5 (low) indicating alert severity. + :type monitor_priority: int, optional + + :param no_screenshot: Prevents saving screenshots of the steps. + :type no_screenshot: bool, optional + + :param restricted_roles: A list of role identifiers that can be pulled from the Roles API, for restricting read and write access. This field is deprecated. Use the restriction policies API to manage permissions. **Deprecated**. + :type restricted_roles: SyntheticsRestrictedRoles, optional + + :param retry: Object describing the retry strategy to apply to a Synthetic test. + :type retry: SyntheticsTestOptionsRetry, optional + + :param rum_settings: The RUM data collection settings for the Synthetic browser test. + **Note:** There are 3 ways to format RUM settings: + + ``{ isEnabled: false }`` + RUM data is not collected. + + ``{ isEnabled: true }`` + RUM data is collected from the Synthetic test's default application. + + ``{ isEnabled: true, applicationId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", clientTokenId: 12345 }`` + RUM data is collected using the specified application. + :type rum_settings: SyntheticsBrowserTestRumSettings, optional + + :param scheduling: Object containing timeframes and timezone used for advanced scheduling. + :type scheduling: SyntheticsTestOptionsScheduling, optional + + :param tick_every: The frequency at which to run the Synthetic test (in seconds). + :type tick_every: int, optional + """ + if accept_self_signed is not unset: + kwargs["accept_self_signed"] = accept_self_signed + if allow_insecure is not unset: + kwargs["allow_insecure"] = allow_insecure + if blocked_request_patterns is not unset: + kwargs["blocked_request_patterns"] = blocked_request_patterns + if capture_network_payloads is not unset: + kwargs["capture_network_payloads"] = capture_network_payloads + if check_certificate_revocation is not unset: + kwargs["check_certificate_revocation"] = check_certificate_revocation + if ci is not unset: + kwargs["ci"] = ci + if device_ids is not unset: + kwargs["device_ids"] = device_ids + if disable_aia_intermediate_fetching is not unset: + kwargs["disable_aia_intermediate_fetching"] = disable_aia_intermediate_fetching + if disable_cors is not unset: + kwargs["disable_cors"] = disable_cors + if disable_csp is not unset: + kwargs["disable_csp"] = disable_csp + if enable_profiling is not unset: + kwargs["enable_profiling"] = enable_profiling + if enable_security_testing is not unset: + kwargs["enable_security_testing"] = enable_security_testing + if follow_redirects is not unset: + kwargs["follow_redirects"] = follow_redirects + if http_version is not unset: + kwargs["http_version"] = http_version + if ignore_server_certificate_error is not unset: + kwargs["ignore_server_certificate_error"] = ignore_server_certificate_error + if ignore_certificate_validation is not unset: + kwargs["ignore_certificate_validation"] = ignore_certificate_validation + if initial_navigation_timeout is not unset: + kwargs["initial_navigation_timeout"] = initial_navigation_timeout + if min_failure_duration is not unset: + kwargs["min_failure_duration"] = min_failure_duration + if min_location_failed is not unset: + kwargs["min_location_failed"] = min_location_failed + if monitor_name is not unset: + kwargs["monitor_name"] = monitor_name + if monitor_options is not unset: + kwargs["monitor_options"] = monitor_options + if monitor_priority is not unset: + kwargs["monitor_priority"] = monitor_priority + if no_screenshot is not unset: + kwargs["no_screenshot"] = no_screenshot + if restricted_roles is not unset: + kwargs["restricted_roles"] = restricted_roles + if retry is not unset: + kwargs["retry"] = retry + if rum_settings is not unset: + kwargs["rum_settings"] = rum_settings + if scheduling is not unset: + kwargs["scheduling"] = scheduling + if tick_every is not unset: + kwargs["tick_every"] = tick_every + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_options_http_version.py b/datadog_api_client/v1/model/synthetics_test_options_http_version.py new file mode 100644 index 0000000000..f27e2e73ac --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_options_http_version.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestOptionsHTTPVersion(ModelSimple): + """ + HTTP version to use for a Synthetic test. + + :param value: Must be one of ["http1", "http2", "any"]. + :type value: str + """ + + allowed_values = { + "http1", + "http2", + "any", + } + HTTP1: ClassVar["SyntheticsTestOptionsHTTPVersion"] + HTTP2: ClassVar["SyntheticsTestOptionsHTTPVersion"] + ANY: ClassVar["SyntheticsTestOptionsHTTPVersion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestOptionsHTTPVersion.HTTP1 = SyntheticsTestOptionsHTTPVersion("http1") +SyntheticsTestOptionsHTTPVersion.HTTP2 = SyntheticsTestOptionsHTTPVersion("http2") +SyntheticsTestOptionsHTTPVersion.ANY = SyntheticsTestOptionsHTTPVersion("any") diff --git a/datadog_api_client/v1/model/synthetics_test_options_monitor_options.py b/datadog_api_client/v1/model/synthetics_test_options_monitor_options.py new file mode 100644 index 0000000000..4ad6f44bb2 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_options_monitor_options.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_options_monitor_options_notification_preset_name import SyntheticsTestOptionsMonitorOptionsNotificationPresetName + +class SyntheticsTestOptionsMonitorOptions(ModelNormal): + validations = { + "renotify_interval": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_options_monitor_options_notification_preset_name import SyntheticsTestOptionsMonitorOptionsNotificationPresetName + return { + "escalation_message": (str,), + "notification_preset_name": (SyntheticsTestOptionsMonitorOptionsNotificationPresetName,), + "renotify_interval": (int,), + "renotify_occurrences": (int,), + } + attribute_map = { + "escalation_message": "escalation_message", + "notification_preset_name": "notification_preset_name", + "renotify_interval": "renotify_interval", + "renotify_occurrences": "renotify_occurrences", + } + + def __init__(self_, escalation_message: Union[str, UnsetType]=unset, notification_preset_name: Union[SyntheticsTestOptionsMonitorOptionsNotificationPresetName, UnsetType]=unset, renotify_interval: Union[int, UnsetType]=unset, renotify_occurrences: Union[int, UnsetType]=unset, **kwargs): + """ + Object containing the options for a Synthetic test as a monitor + (for example, renotification). + + :param escalation_message: Message to include in the escalation notification. + :type escalation_message: str, optional + + :param notification_preset_name: The name of the preset for the notification for the monitor. + :type notification_preset_name: SyntheticsTestOptionsMonitorOptionsNotificationPresetName, optional + + :param renotify_interval: Time interval before renotifying if the test is still failing + (in minutes). + :type renotify_interval: int, optional + + :param renotify_occurrences: The number of times to renotify if the test is still failing. + :type renotify_occurrences: int, optional + """ + if escalation_message is not unset: + kwargs["escalation_message"] = escalation_message + if notification_preset_name is not unset: + kwargs["notification_preset_name"] = notification_preset_name + if renotify_interval is not unset: + kwargs["renotify_interval"] = renotify_interval + if renotify_occurrences is not unset: + kwargs["renotify_occurrences"] = renotify_occurrences + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_options_monitor_options_notification_preset_name.py b/datadog_api_client/v1/model/synthetics_test_options_monitor_options_notification_preset_name.py new file mode 100644 index 0000000000..ec5e94a062 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_options_monitor_options_notification_preset_name.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestOptionsMonitorOptionsNotificationPresetName(ModelSimple): + """ + The name of the preset for the notification for the monitor. + + :param value: Must be one of ["show_all", "hide_all", "hide_query", "hide_handles", "hide_query_and_handles", "show_only_snapshot", "hide_handles_and_footer"]. + :type value: str + """ + + allowed_values = { + "show_all", + "hide_all", + "hide_query", + "hide_handles", + "hide_query_and_handles", + "show_only_snapshot", + "hide_handles_and_footer", + } + SHOW_ALL: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_ALL: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_QUERY: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_HANDLES: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_QUERY_AND_HANDLES: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + SHOW_ONLY_SNAPSHOT: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_HANDLES_AND_FOOTER: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.SHOW_ALL = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("show_all") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_ALL = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_all") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_QUERY = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_query") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_HANDLES = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_handles") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_QUERY_AND_HANDLES = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_query_and_handles") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.SHOW_ONLY_SNAPSHOT = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("show_only_snapshot") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_HANDLES_AND_FOOTER = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_handles_and_footer") diff --git a/datadog_api_client/v1/model/synthetics_test_options_retry.py b/datadog_api_client/v1/model/synthetics_test_options_retry.py new file mode 100644 index 0000000000..67197f9ef3 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_options_retry.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestOptionsRetry(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "interval": (float,), + } + attribute_map = { + "count": "count", + "interval": "interval", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, interval: Union[float, UnsetType]=unset, **kwargs): + """ + Object describing the retry strategy to apply to a Synthetic test. + + :param count: Number of times a test needs to be retried before marking a + location as failed. Defaults to 0. + :type count: int, optional + + :param interval: Time interval between retries (in milliseconds). Defaults to + 300ms. + :type interval: float, optional + """ + if count is not unset: + kwargs["count"] = count + if interval is not unset: + kwargs["interval"] = interval + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_options_scheduling.py b/datadog_api_client/v1/model/synthetics_test_options_scheduling.py new file mode 100644 index 0000000000..8882fc7692 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_options_scheduling.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_options_scheduling_timeframe import SyntheticsTestOptionsSchedulingTimeframe + +class SyntheticsTestOptionsScheduling(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_options_scheduling_timeframe import SyntheticsTestOptionsSchedulingTimeframe + return { + "timeframes": ([SyntheticsTestOptionsSchedulingTimeframe],), + "timezone": (str,), + } + attribute_map = { + "timeframes": "timeframes", + "timezone": "timezone", + } + + def __init__(self_, timeframes: List[SyntheticsTestOptionsSchedulingTimeframe], timezone: str, **kwargs): + """ + Object containing timeframes and timezone used for advanced scheduling. + + :param timeframes: Array containing objects describing the scheduling pattern to apply to each day. + :type timeframes: [SyntheticsTestOptionsSchedulingTimeframe] + + :param timezone: Timezone in which the timeframe is based. + :type timezone: str + """ + super().__init__(kwargs) + + + self_.timeframes = timeframes + self_.timezone = timezone diff --git a/datadog_api_client/v1/model/synthetics_test_options_scheduling_timeframe.py b/datadog_api_client/v1/model/synthetics_test_options_scheduling_timeframe.py new file mode 100644 index 0000000000..75bc1951a6 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_options_scheduling_timeframe.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestOptionsSchedulingTimeframe(ModelNormal): + validations = { + "day": { + "inclusive_maximum": 7, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "day": (int,), + "_from": (str,), + "to": (str,), + } + attribute_map = { + "day": "day", + "_from": "from", + "to": "to", + } + + def __init__(self_, day: int, _from: str, to: str, **kwargs): + """ + Object describing a timeframe. + + :param day: Number representing the day of the week. + :type day: int + + :param _from: The hour of the day on which scheduling starts. + :type _from: str + + :param to: The hour of the day on which scheduling ends. + :type to: str + """ + super().__init__(kwargs) + + + self_.day = day + self_._from = _from + self_.to = to diff --git a/datadog_api_client/v1/model/synthetics_test_pause_status.py b/datadog_api_client/v1/model/synthetics_test_pause_status.py new file mode 100644 index 0000000000..b83d6f0be6 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_pause_status.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestPauseStatus(ModelSimple): + """ + Define whether you want to start (`live`) or pause (`paused`) a + Synthetic test. + + :param value: Must be one of ["live", "paused"]. + :type value: str + """ + + allowed_values = { + "live", + "paused", + } + LIVE: ClassVar["SyntheticsTestPauseStatus"] + PAUSED: ClassVar["SyntheticsTestPauseStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestPauseStatus.LIVE = SyntheticsTestPauseStatus("live") +SyntheticsTestPauseStatus.PAUSED = SyntheticsTestPauseStatus("paused") diff --git a/datadog_api_client/v1/model/synthetics_test_process_status.py b/datadog_api_client/v1/model/synthetics_test_process_status.py new file mode 100644 index 0000000000..f5e1461f9d --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_process_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestProcessStatus(ModelSimple): + """ + Status of a Synthetic test. + + :param value: Must be one of ["not_scheduled", "scheduled", "finished", "finished_with_error"]. + :type value: str + """ + + allowed_values = { + "not_scheduled", + "scheduled", + "finished", + "finished_with_error", + } + NOT_SCHEDULED: ClassVar["SyntheticsTestProcessStatus"] + SCHEDULED: ClassVar["SyntheticsTestProcessStatus"] + FINISHED: ClassVar["SyntheticsTestProcessStatus"] + FINISHED_WITH_ERROR: ClassVar["SyntheticsTestProcessStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestProcessStatus.NOT_SCHEDULED = SyntheticsTestProcessStatus("not_scheduled") +SyntheticsTestProcessStatus.SCHEDULED = SyntheticsTestProcessStatus("scheduled") +SyntheticsTestProcessStatus.FINISHED = SyntheticsTestProcessStatus("finished") +SyntheticsTestProcessStatus.FINISHED_WITH_ERROR = SyntheticsTestProcessStatus("finished_with_error") diff --git a/datadog_api_client/v1/model/synthetics_test_request.py b/datadog_api_client/v1/model/synthetics_test_request.py new file mode 100644 index 0000000000..7ad21a6993 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_request.py @@ -0,0 +1,347 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_basic_auth import SyntheticsBasicAuth + from datadog_api_client.v1.model.synthetics_test_request_body_type import SyntheticsTestRequestBodyType + from datadog_api_client.v1.model.synthetics_test_call_type import SyntheticsTestCallType + from datadog_api_client.v1.model.synthetics_test_request_certificate import SyntheticsTestRequestCertificate + from datadog_api_client.v1.model.synthetics_test_request_dns_server_port import SyntheticsTestRequestDNSServerPort + from datadog_api_client.v1.model.synthetics_test_request_body_file import SyntheticsTestRequestBodyFile + from datadog_api_client.v1.model.synthetics_test_headers import SyntheticsTestHeaders + from datadog_api_client.v1.model.synthetics_test_options_http_version import SyntheticsTestOptionsHTTPVersion + from datadog_api_client.v1.model.synthetics_mcp_protocol_version import SyntheticsMCPProtocolVersion + from datadog_api_client.v1.model.synthetics_test_metadata import SyntheticsTestMetadata + from datadog_api_client.v1.model.synthetics_test_request_port import SyntheticsTestRequestPort + from datadog_api_client.v1.model.synthetics_test_request_proxy import SyntheticsTestRequestProxy + from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb + from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 + from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM + from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient + from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP + from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT + +class SyntheticsTestRequest(ModelNormal): + validations = { + "number_of_packets": { + "inclusive_maximum": 10, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_basic_auth import SyntheticsBasicAuth + from datadog_api_client.v1.model.synthetics_test_request_body_type import SyntheticsTestRequestBodyType + from datadog_api_client.v1.model.synthetics_test_call_type import SyntheticsTestCallType + from datadog_api_client.v1.model.synthetics_test_request_certificate import SyntheticsTestRequestCertificate + from datadog_api_client.v1.model.synthetics_test_request_dns_server_port import SyntheticsTestRequestDNSServerPort + from datadog_api_client.v1.model.synthetics_test_request_body_file import SyntheticsTestRequestBodyFile + from datadog_api_client.v1.model.synthetics_test_headers import SyntheticsTestHeaders + from datadog_api_client.v1.model.synthetics_test_options_http_version import SyntheticsTestOptionsHTTPVersion + from datadog_api_client.v1.model.synthetics_mcp_protocol_version import SyntheticsMCPProtocolVersion + from datadog_api_client.v1.model.synthetics_test_metadata import SyntheticsTestMetadata + from datadog_api_client.v1.model.synthetics_test_request_port import SyntheticsTestRequestPort + from datadog_api_client.v1.model.synthetics_test_request_proxy import SyntheticsTestRequestProxy + return { + "allow_insecure": (bool,), + "basic_auth": (SyntheticsBasicAuth,), + "body": (str,), + "body_type": (SyntheticsTestRequestBodyType,), + "call_type": (SyntheticsTestCallType,), + "certificate": (SyntheticsTestRequestCertificate,), + "certificate_domains": ([str],), + "check_certificate_revocation": (bool,), + "compressed_json_descriptor": (str,), + "compressed_proto_file": (str,), + "disable_aia_intermediate_fetching": (bool,), + "dns_server": (str,), + "dns_server_port": (SyntheticsTestRequestDNSServerPort,), + "files": ([SyntheticsTestRequestBodyFile],), + "follow_redirects": (bool,), + "form": ({str: (str,)},), + "headers": (SyntheticsTestHeaders,), + "host": (str,), + "http_version": (SyntheticsTestOptionsHTTPVersion,), + "ignore_certificate_validation": (bool,), + "is_message_base64_encoded": (bool,), + "mcp_protocol_version": (SyntheticsMCPProtocolVersion,), + "message": (str,), + "metadata": (SyntheticsTestMetadata,), + "method": (str,), + "no_saving_response_body": (bool,), + "number_of_packets": (int,), + "persist_cookies": (bool,), + "port": (SyntheticsTestRequestPort,), + "proxy": (SyntheticsTestRequestProxy,), + "query": (dict,), + "servername": (str,), + "service": (str,), + "should_track_hops": (bool,), + "timeout": (float,), + "tool_args": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tool_name": (str,), + "url": (str,), + } + attribute_map = { + "allow_insecure": "allow_insecure", + "basic_auth": "basicAuth", + "body": "body", + "body_type": "bodyType", + "call_type": "callType", + "certificate": "certificate", + "certificate_domains": "certificateDomains", + "check_certificate_revocation": "checkCertificateRevocation", + "compressed_json_descriptor": "compressedJsonDescriptor", + "compressed_proto_file": "compressedProtoFile", + "disable_aia_intermediate_fetching": "disableAiaIntermediateFetching", + "dns_server": "dnsServer", + "dns_server_port": "dnsServerPort", + "files": "files", + "follow_redirects": "follow_redirects", + "form": "form", + "headers": "headers", + "host": "host", + "http_version": "httpVersion", + "ignore_certificate_validation": "ignore_certificate_validation", + "is_message_base64_encoded": "isMessageBase64Encoded", + "mcp_protocol_version": "mcpProtocolVersion", + "message": "message", + "metadata": "metadata", + "method": "method", + "no_saving_response_body": "noSavingResponseBody", + "number_of_packets": "numberOfPackets", + "persist_cookies": "persistCookies", + "port": "port", + "proxy": "proxy", + "query": "query", + "servername": "servername", + "service": "service", + "should_track_hops": "shouldTrackHops", + "timeout": "timeout", + "tool_args": "toolArgs", + "tool_name": "toolName", + "url": "url", + } + + def __init__(self_, allow_insecure: Union[bool, UnsetType]=unset, basic_auth: Union[SyntheticsBasicAuth, SyntheticsBasicAuthWeb, SyntheticsBasicAuthSigv4, SyntheticsBasicAuthNTLM, SyntheticsBasicAuthDigest, SyntheticsBasicAuthOauthClient, SyntheticsBasicAuthOauthROP, SyntheticsBasicAuthJWT, UnsetType]=unset, body: Union[str, UnsetType]=unset, body_type: Union[SyntheticsTestRequestBodyType, UnsetType]=unset, call_type: Union[SyntheticsTestCallType, UnsetType]=unset, certificate: Union[SyntheticsTestRequestCertificate, UnsetType]=unset, certificate_domains: Union[List[str], UnsetType]=unset, check_certificate_revocation: Union[bool, UnsetType]=unset, compressed_json_descriptor: Union[str, UnsetType]=unset, compressed_proto_file: Union[str, UnsetType]=unset, disable_aia_intermediate_fetching: Union[bool, UnsetType]=unset, dns_server: Union[str, UnsetType]=unset, dns_server_port: Union[SyntheticsTestRequestDNSServerPort, int, str, UnsetType]=unset, files: Union[List[SyntheticsTestRequestBodyFile], UnsetType]=unset, follow_redirects: Union[bool, UnsetType]=unset, form: Union[Dict[str, str], UnsetType]=unset, headers: Union[SyntheticsTestHeaders, UnsetType]=unset, host: Union[str, UnsetType]=unset, http_version: Union[SyntheticsTestOptionsHTTPVersion, UnsetType]=unset, ignore_certificate_validation: Union[bool, UnsetType]=unset, is_message_base64_encoded: Union[bool, UnsetType]=unset, mcp_protocol_version: Union[SyntheticsMCPProtocolVersion, UnsetType]=unset, message: Union[str, UnsetType]=unset, metadata: Union[SyntheticsTestMetadata, UnsetType]=unset, method: Union[str, UnsetType]=unset, no_saving_response_body: Union[bool, UnsetType]=unset, number_of_packets: Union[int, UnsetType]=unset, persist_cookies: Union[bool, UnsetType]=unset, port: Union[SyntheticsTestRequestPort, int, str, UnsetType]=unset, proxy: Union[SyntheticsTestRequestProxy, UnsetType]=unset, query: Union[dict, UnsetType]=unset, servername: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, should_track_hops: Union[bool, UnsetType]=unset, timeout: Union[float, UnsetType]=unset, tool_args: Union[Dict[str, Any], UnsetType]=unset, tool_name: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Object describing the Synthetic test request. + + :param allow_insecure: Allows loading insecure content for an HTTP request in a multistep test step. + :type allow_insecure: bool, optional + + :param basic_auth: Object to handle basic authentication when performing the test. + :type basic_auth: SyntheticsBasicAuth, optional + + :param body: Body to include in the test. + :type body: str, optional + + :param body_type: Type of the request body. + :type body_type: SyntheticsTestRequestBodyType, optional + + :param call_type: The type of call to perform. Used by gRPC steps ( ``healthcheck`` , ``unary`` ) + and MCP steps ( ``init`` , ``tool_list`` , ``tool_call`` ). Valid values depend on + the parent step's ``subtype``. + :type call_type: SyntheticsTestCallType, optional + + :param certificate: Client certificate to use when performing the test request. + :type certificate: SyntheticsTestRequestCertificate, optional + + :param certificate_domains: By default, the client certificate is applied on the domain of the starting URL for browser tests. If you want your client certificate to be applied on other domains instead, add them in ``certificateDomains``. + :type certificate_domains: [str], optional + + :param check_certificate_revocation: Check for certificate revocation. + :type check_certificate_revocation: bool, optional + + :param compressed_json_descriptor: A protobuf JSON descriptor that needs to be gzipped first then base64 encoded. + :type compressed_json_descriptor: str, optional + + :param compressed_proto_file: A protobuf file that needs to be gzipped first then base64 encoded. + :type compressed_proto_file: str, optional + + :param disable_aia_intermediate_fetching: Disable fetching intermediate certificates from AIA. + :type disable_aia_intermediate_fetching: bool, optional + + :param dns_server: DNS server to use for DNS tests. + :type dns_server: str, optional + + :param dns_server_port: DNS server port to use for DNS tests. + :type dns_server_port: SyntheticsTestRequestDNSServerPort, optional + + :param files: Files to be used as part of the request in the test. Only valid if ``bodyType`` is ``multipart/form-data``. + :type files: [SyntheticsTestRequestBodyFile], optional + + :param follow_redirects: Specifies whether or not the request follows redirects. + :type follow_redirects: bool, optional + + :param form: Form to be used as part of the request in the test. Only valid if ``bodyType`` is ``multipart/form-data``. + :type form: {str: (str,)}, optional + + :param headers: Headers to include when performing the test. + :type headers: SyntheticsTestHeaders, optional + + :param host: Host name to perform the test with. + :type host: str, optional + + :param http_version: HTTP version to use for a Synthetic test. + :type http_version: SyntheticsTestOptionsHTTPVersion, optional + + :param ignore_certificate_validation: For SSL tests, whether the test should ignore certificate validation. + :type ignore_certificate_validation: bool, optional + + :param is_message_base64_encoded: Whether the message is base64 encoded. + :type is_message_base64_encoded: bool, optional + + :param mcp_protocol_version: The MCP protocol version used by the step. See https://modelcontextprotocol.io/specification. + :type mcp_protocol_version: SyntheticsMCPProtocolVersion, optional + + :param message: Message to send for UDP or WebSocket tests. + :type message: str, optional + + :param metadata: Metadata to include when performing the gRPC test. + :type metadata: SyntheticsTestMetadata, optional + + :param method: Either the HTTP method/verb to use or a gRPC method available on the service set in the ``service`` field. Required if ``subtype`` is ``HTTP`` or if ``subtype`` is ``grpc`` and ``callType`` is ``unary``. + :type method: str, optional + + :param no_saving_response_body: Determines whether or not to save the response body. + :type no_saving_response_body: bool, optional + + :param number_of_packets: Number of pings to use per test. + :type number_of_packets: int, optional + + :param persist_cookies: Persist cookies across redirects. + :type persist_cookies: bool, optional + + :param port: Port to use when performing the test. + :type port: SyntheticsTestRequestPort, optional + + :param proxy: The proxy to perform the test. + :type proxy: SyntheticsTestRequestProxy, optional + + :param query: Query to use for the test. + :type query: dict, optional + + :param servername: For SSL tests, it specifies on which server you want to initiate the TLS handshake, + allowing the server to present one of multiple possible certificates on + the same IP address and TCP port number. + :type servername: str, optional + + :param service: The gRPC service on which you want to perform the gRPC call. + :type service: str, optional + + :param should_track_hops: Turns on a traceroute probe to discover all gateways along the path to the host destination. + :type should_track_hops: bool, optional + + :param timeout: Timeout in seconds for the test. + :type timeout: float, optional + + :param tool_args: Arguments to pass to the MCP tool. Free-form object whose shape depends on the tool. Used when ``callType`` is ``tool_call``. + :type tool_args: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tool_name: The name of the MCP tool to call. Required when ``callType`` is ``tool_call``. + :type tool_name: str, optional + + :param url: URL to perform the test with. + :type url: str, optional + """ + if allow_insecure is not unset: + kwargs["allow_insecure"] = allow_insecure + if basic_auth is not unset: + kwargs["basic_auth"] = basic_auth + if body is not unset: + kwargs["body"] = body + if body_type is not unset: + kwargs["body_type"] = body_type + if call_type is not unset: + kwargs["call_type"] = call_type + if certificate is not unset: + kwargs["certificate"] = certificate + if certificate_domains is not unset: + kwargs["certificate_domains"] = certificate_domains + if check_certificate_revocation is not unset: + kwargs["check_certificate_revocation"] = check_certificate_revocation + if compressed_json_descriptor is not unset: + kwargs["compressed_json_descriptor"] = compressed_json_descriptor + if compressed_proto_file is not unset: + kwargs["compressed_proto_file"] = compressed_proto_file + if disable_aia_intermediate_fetching is not unset: + kwargs["disable_aia_intermediate_fetching"] = disable_aia_intermediate_fetching + if dns_server is not unset: + kwargs["dns_server"] = dns_server + if dns_server_port is not unset: + kwargs["dns_server_port"] = dns_server_port + if files is not unset: + kwargs["files"] = files + if follow_redirects is not unset: + kwargs["follow_redirects"] = follow_redirects + if form is not unset: + kwargs["form"] = form + if headers is not unset: + kwargs["headers"] = headers + if host is not unset: + kwargs["host"] = host + if http_version is not unset: + kwargs["http_version"] = http_version + if ignore_certificate_validation is not unset: + kwargs["ignore_certificate_validation"] = ignore_certificate_validation + if is_message_base64_encoded is not unset: + kwargs["is_message_base64_encoded"] = is_message_base64_encoded + if mcp_protocol_version is not unset: + kwargs["mcp_protocol_version"] = mcp_protocol_version + if message is not unset: + kwargs["message"] = message + if metadata is not unset: + kwargs["metadata"] = metadata + if method is not unset: + kwargs["method"] = method + if no_saving_response_body is not unset: + kwargs["no_saving_response_body"] = no_saving_response_body + if number_of_packets is not unset: + kwargs["number_of_packets"] = number_of_packets + if persist_cookies is not unset: + kwargs["persist_cookies"] = persist_cookies + if port is not unset: + kwargs["port"] = port + if proxy is not unset: + kwargs["proxy"] = proxy + if query is not unset: + kwargs["query"] = query + if servername is not unset: + kwargs["servername"] = servername + if service is not unset: + kwargs["service"] = service + if should_track_hops is not unset: + kwargs["should_track_hops"] = should_track_hops + if timeout is not unset: + kwargs["timeout"] = timeout + if tool_args is not unset: + kwargs["tool_args"] = tool_args + if tool_name is not unset: + kwargs["tool_name"] = tool_name + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_request_body_file.py b/datadog_api_client/v1/model/synthetics_test_request_body_file.py new file mode 100644 index 0000000000..713283edf0 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_request_body_file.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestRequestBodyFile(ModelNormal): + validations = { + "content": { + "max_length": 3145728, + }, + "name": { + "max_length": 1500, + }, + "original_file_name": { + "max_length": 1500, + }, + "size": { + "inclusive_maximum": 3145728, + "inclusive_minimum": 1, + }, + "type": { + "max_length": 1500, + }, + } + @cached_property + def openapi_types(_): + return { + "bucket_key": (str,), + "content": (str,), + "encoding": (str,), + "name": (str,), + "original_file_name": (str,), + "size": (int,), + "type": (str,), + } + attribute_map = { + "bucket_key": "bucketKey", + "content": "content", + "encoding": "encoding", + "name": "name", + "original_file_name": "originalFileName", + "size": "size", + "type": "type", + } + + def __init__(self_, bucket_key: Union[str, UnsetType]=unset, content: Union[str, UnsetType]=unset, encoding: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, original_file_name: Union[str, UnsetType]=unset, size: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Object describing a file to be used as part of the request in the test. + + :param bucket_key: Bucket key of the file. + :type bucket_key: str, optional + + :param content: Content of the file. + :type content: str, optional + + :param encoding: Encoding of the file content. The only supported value is ``base64`` , indicating the ``content`` field contains base64-encoded data. + :type encoding: str, optional + + :param name: Name of the file. + :type name: str, optional + + :param original_file_name: Original name of the file. + :type original_file_name: str, optional + + :param size: Size of the file. + :type size: int, optional + + :param type: Type of the file. + :type type: str, optional + """ + if bucket_key is not unset: + kwargs["bucket_key"] = bucket_key + if content is not unset: + kwargs["content"] = content + if encoding is not unset: + kwargs["encoding"] = encoding + if name is not unset: + kwargs["name"] = name + if original_file_name is not unset: + kwargs["original_file_name"] = original_file_name + if size is not unset: + kwargs["size"] = size + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_request_body_type.py b/datadog_api_client/v1/model/synthetics_test_request_body_type.py new file mode 100644 index 0000000000..484d456424 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_request_body_type.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestRequestBodyType(ModelSimple): + """ + Type of the request body. + + :param value: Must be one of ["text/plain", "application/json", "text/xml", "text/html", "application/x-www-form-urlencoded", "graphql", "application/octet-stream", "multipart/form-data"]. + :type value: str + """ + + allowed_values = { + "text/plain", + "application/json", + "text/xml", + "text/html", + "application/x-www-form-urlencoded", + "graphql", + "application/octet-stream", + "multipart/form-data", + } + TEXT_PLAIN: ClassVar["SyntheticsTestRequestBodyType"] + APPLICATION_JSON: ClassVar["SyntheticsTestRequestBodyType"] + TEXT_XML: ClassVar["SyntheticsTestRequestBodyType"] + TEXT_HTML: ClassVar["SyntheticsTestRequestBodyType"] + APPLICATION_X_WWW_FORM_URLENCODED: ClassVar["SyntheticsTestRequestBodyType"] + GRAPHQL: ClassVar["SyntheticsTestRequestBodyType"] + APPLICATION_OCTET_STREAM: ClassVar["SyntheticsTestRequestBodyType"] + MULTIPART_FORM_DATA: ClassVar["SyntheticsTestRequestBodyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestRequestBodyType.TEXT_PLAIN = SyntheticsTestRequestBodyType("text/plain") +SyntheticsTestRequestBodyType.APPLICATION_JSON = SyntheticsTestRequestBodyType("application/json") +SyntheticsTestRequestBodyType.TEXT_XML = SyntheticsTestRequestBodyType("text/xml") +SyntheticsTestRequestBodyType.TEXT_HTML = SyntheticsTestRequestBodyType("text/html") +SyntheticsTestRequestBodyType.APPLICATION_X_WWW_FORM_URLENCODED = SyntheticsTestRequestBodyType("application/x-www-form-urlencoded") +SyntheticsTestRequestBodyType.GRAPHQL = SyntheticsTestRequestBodyType("graphql") +SyntheticsTestRequestBodyType.APPLICATION_OCTET_STREAM = SyntheticsTestRequestBodyType("application/octet-stream") +SyntheticsTestRequestBodyType.MULTIPART_FORM_DATA = SyntheticsTestRequestBodyType("multipart/form-data") diff --git a/datadog_api_client/v1/model/synthetics_test_request_certificate.py b/datadog_api_client/v1/model/synthetics_test_request_certificate.py new file mode 100644 index 0000000000..d2622fafe9 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_request_certificate.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_request_certificate_item import SyntheticsTestRequestCertificateItem + +class SyntheticsTestRequestCertificate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_request_certificate_item import SyntheticsTestRequestCertificateItem + return { + "cert": (SyntheticsTestRequestCertificateItem,), + "key": (SyntheticsTestRequestCertificateItem,), + } + attribute_map = { + "cert": "cert", + "key": "key", + } + + def __init__(self_, cert: Union[SyntheticsTestRequestCertificateItem, UnsetType]=unset, key: Union[SyntheticsTestRequestCertificateItem, UnsetType]=unset, **kwargs): + """ + Client certificate to use when performing the test request. + + :param cert: Define a request certificate. + :type cert: SyntheticsTestRequestCertificateItem, optional + + :param key: Define a request certificate. + :type key: SyntheticsTestRequestCertificateItem, optional + """ + if cert is not unset: + kwargs["cert"] = cert + if key is not unset: + kwargs["key"] = key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_request_certificate_item.py b/datadog_api_client/v1/model/synthetics_test_request_certificate_item.py new file mode 100644 index 0000000000..b99e14d1e6 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_request_certificate_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestRequestCertificateItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "content": (str,), + "filename": (str,), + "updated_at": (str,), + } + attribute_map = { + "content": "content", + "filename": "filename", + "updated_at": "updatedAt", + } + + def __init__(self_, content: Union[str, UnsetType]=unset, filename: Union[str, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, **kwargs): + """ + Define a request certificate. + + :param content: Content of the certificate or key. + :type content: str, optional + + :param filename: File name for the certificate or key. + :type filename: str, optional + + :param updated_at: Date of update of the certificate or key, ISO format. + :type updated_at: str, optional + """ + if content is not unset: + kwargs["content"] = content + if filename is not unset: + kwargs["filename"] = filename + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_request_dns_server_port.py b/datadog_api_client/v1/model/synthetics_test_request_dns_server_port.py new file mode 100644 index 0000000000..266eb60792 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_request_dns_server_port.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestRequestDNSServerPort(ModelComposed): + + + + def __init__(self, **kwargs): + """ + DNS server port to use for DNS tests. + """ + 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 + return { + "oneOf": [ + int, + str, + ], + } diff --git a/datadog_api_client/v1/model/synthetics_test_request_port.py b/datadog_api_client/v1/model/synthetics_test_request_port.py new file mode 100644 index 0000000000..4773b048d1 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_request_port.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestRequestPort(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Port to use when performing the test. + """ + 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 + return { + "oneOf": [ + int, + str, + ], + } diff --git a/datadog_api_client/v1/model/synthetics_test_request_proxy.py b/datadog_api_client/v1/model/synthetics_test_request_proxy.py new file mode 100644 index 0000000000..d7a9b31175 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_request_proxy.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_headers import SyntheticsTestHeaders + +class SyntheticsTestRequestProxy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_headers import SyntheticsTestHeaders + return { + "headers": (SyntheticsTestHeaders,), + "url": (str,), + } + attribute_map = { + "headers": "headers", + "url": "url", + } + + def __init__(self_, url: str, headers: Union[SyntheticsTestHeaders, UnsetType]=unset, **kwargs): + """ + The proxy to perform the test. + + :param headers: Headers to include when performing the test. + :type headers: SyntheticsTestHeaders, optional + + :param url: URL of the proxy to perform the test. + :type url: str + """ + if headers is not unset: + kwargs["headers"] = headers + super().__init__(kwargs) + + + self_.url = url diff --git a/datadog_api_client/v1/model/synthetics_test_restriction_policy_binding.py b/datadog_api_client/v1/model/synthetics_test_restriction_policy_binding.py new file mode 100644 index 0000000000..07356e29d8 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_restriction_policy_binding.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_restriction_policy_binding_relation import SyntheticsTestRestrictionPolicyBindingRelation + +class SyntheticsTestRestrictionPolicyBinding(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_restriction_policy_binding_relation import SyntheticsTestRestrictionPolicyBindingRelation + return { + "principals": ([str],), + "relation": (SyntheticsTestRestrictionPolicyBindingRelation,), + } + attribute_map = { + "principals": "principals", + "relation": "relation", + } + + def __init__(self_, principals: Union[List[str], UnsetType]=unset, relation: Union[SyntheticsTestRestrictionPolicyBindingRelation, UnsetType]=unset, **kwargs): + """ + Objects describing the binding used for a mobile test. + + :param principals: List of principals for a mobile test binding. + :type principals: [str], optional + + :param relation: The type of relation for the binding. + :type relation: SyntheticsTestRestrictionPolicyBindingRelation, optional + """ + if principals is not unset: + kwargs["principals"] = principals + if relation is not unset: + kwargs["relation"] = relation + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_test_restriction_policy_binding_relation.py b/datadog_api_client/v1/model/synthetics_test_restriction_policy_binding_relation.py new file mode 100644 index 0000000000..b984eac1eb --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_restriction_policy_binding_relation.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestRestrictionPolicyBindingRelation(ModelSimple): + """ + The type of relation for the binding. + + :param value: Must be one of ["editor", "viewer"]. + :type value: str + """ + + allowed_values = { + "editor", + "viewer", + } + EDITOR: ClassVar["SyntheticsTestRestrictionPolicyBindingRelation"] + VIEWER: ClassVar["SyntheticsTestRestrictionPolicyBindingRelation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestRestrictionPolicyBindingRelation.EDITOR = SyntheticsTestRestrictionPolicyBindingRelation("editor") +SyntheticsTestRestrictionPolicyBindingRelation.VIEWER = SyntheticsTestRestrictionPolicyBindingRelation("viewer") diff --git a/datadog_api_client/v1/model/synthetics_test_uptime.py b/datadog_api_client/v1/model/synthetics_test_uptime.py new file mode 100644 index 0000000000..8b1b5edd26 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_test_uptime.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_uptime import SyntheticsUptime + +class SyntheticsTestUptime(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_uptime import SyntheticsUptime + return { + "from_ts": (int,), + "overall": (SyntheticsUptime,), + "public_id": (str,), + "to_ts": (int,), + } + attribute_map = { + "from_ts": "from_ts", + "overall": "overall", + "public_id": "public_id", + "to_ts": "to_ts", + } + + def __init__(self_, from_ts: Union[int, UnsetType]=unset, overall: Union[SyntheticsUptime, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, to_ts: Union[int, UnsetType]=unset, **kwargs): + """ + Object containing the uptime for a Synthetic test ID. + + :param from_ts: Timestamp in seconds for the start of uptime. + :type from_ts: int, optional + + :param overall: Object containing the uptime information. + :type overall: SyntheticsUptime, optional + + :param public_id: A Synthetic test ID. + :type public_id: str, optional + + :param to_ts: Timestamp in seconds for the end of uptime. + :type to_ts: int, optional + """ + if from_ts is not unset: + kwargs["from_ts"] = from_ts + if overall is not unset: + kwargs["overall"] = overall + if public_id is not unset: + kwargs["public_id"] = public_id + if to_ts is not unset: + kwargs["to_ts"] = to_ts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_timing.py b/datadog_api_client/v1/model/synthetics_timing.py new file mode 100644 index 0000000000..7ed860d333 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_timing.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTiming(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dns": (float,), + "download": (float,), + "first_byte": (float,), + "handshake": (float,), + "redirect": (float,), + "ssl": (float,), + "tcp": (float,), + "total": (float,), + "wait": (float,), + } + attribute_map = { + "dns": "dns", + "download": "download", + "first_byte": "firstByte", + "handshake": "handshake", + "redirect": "redirect", + "ssl": "ssl", + "tcp": "tcp", + "total": "total", + "wait": "wait", + } + + def __init__(self_, dns: Union[float, UnsetType]=unset, download: Union[float, UnsetType]=unset, first_byte: Union[float, UnsetType]=unset, handshake: Union[float, UnsetType]=unset, redirect: Union[float, UnsetType]=unset, ssl: Union[float, UnsetType]=unset, tcp: Union[float, UnsetType]=unset, total: Union[float, UnsetType]=unset, wait: Union[float, UnsetType]=unset, **kwargs): + """ + Object containing all metrics and their values collected for a Synthetic API test. + See the `Synthetic Monitoring Metrics documentation `_. + + :param dns: The duration in millisecond of the DNS lookup. + :type dns: float, optional + + :param download: The time in millisecond to download the response. + :type download: float, optional + + :param first_byte: The time in millisecond to first byte. + :type first_byte: float, optional + + :param handshake: The duration in millisecond of the TLS handshake. + :type handshake: float, optional + + :param redirect: The time in millisecond spent during redirections. + :type redirect: float, optional + + :param ssl: The duration in millisecond of the TLS handshake. + :type ssl: float, optional + + :param tcp: Time in millisecond to establish the TCP connection. + :type tcp: float, optional + + :param total: The overall time in millisecond the request took to be processed. + :type total: float, optional + + :param wait: Time spent in millisecond waiting for a response. + :type wait: float, optional + """ + if dns is not unset: + kwargs["dns"] = dns + if download is not unset: + kwargs["download"] = download + if first_byte is not unset: + kwargs["first_byte"] = first_byte + if handshake is not unset: + kwargs["handshake"] = handshake + if redirect is not unset: + kwargs["redirect"] = redirect + if ssl is not unset: + kwargs["ssl"] = ssl + if tcp is not unset: + kwargs["tcp"] = tcp + if total is not unset: + kwargs["total"] = total + if wait is not unset: + kwargs["wait"] = wait + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_trigger_body.py b/datadog_api_client/v1/model/synthetics_trigger_body.py new file mode 100644 index 0000000000..5ae8192fc9 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_trigger_body.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_trigger_test import SyntheticsTriggerTest + +class SyntheticsTriggerBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_trigger_test import SyntheticsTriggerTest + return { + "tests": ([SyntheticsTriggerTest],), + } + attribute_map = { + "tests": "tests", + } + + def __init__(self_, tests: List[SyntheticsTriggerTest], **kwargs): + """ + Object describing the Synthetic tests to trigger. + + :param tests: List of Synthetic tests. + :type tests: [SyntheticsTriggerTest] + """ + super().__init__(kwargs) + + + self_.tests = tests diff --git a/datadog_api_client/v1/model/synthetics_trigger_ci_test_location.py b/datadog_api_client/v1/model/synthetics_trigger_ci_test_location.py new file mode 100644 index 0000000000..6ed27c3342 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_trigger_ci_test_location.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTriggerCITestLocation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (int,), + "name": (str,), + } + attribute_map = { + "id": "id", + "name": "name", + } + + def __init__(self_, id: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Synthetic location. + + :param id: Unique identifier of the location. + :type id: int, optional + + :param name: Name of the location. + :type name: str, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_trigger_ci_test_run_result.py b/datadog_api_client/v1/model/synthetics_trigger_ci_test_run_result.py new file mode 100644 index 0000000000..436a11d99b --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_trigger_ci_test_run_result.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTriggerCITestRunResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "device": (str,), + "location": (int,), + "public_id": (str,), + "result_id": (str,), + } + attribute_map = { + "device": "device", + "location": "location", + "public_id": "public_id", + "result_id": "result_id", + } + + def __init__(self_, device: Union[str, UnsetType]=unset, location: Union[int, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, result_id: Union[str, UnsetType]=unset, **kwargs): + """ + Information about a single test run. + + :param device: The device ID. + :type device: str, optional + + :param location: The location ID of the test run. + :type location: int, optional + + :param public_id: The public ID of the Synthetic test. + :type public_id: str, optional + + :param result_id: ID of the result. + :type result_id: str, optional + """ + if device is not unset: + kwargs["device"] = device + if location is not unset: + kwargs["location"] = location + if public_id is not unset: + kwargs["public_id"] = public_id + if result_id is not unset: + kwargs["result_id"] = result_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_trigger_ci_tests_response.py b/datadog_api_client/v1/model/synthetics_trigger_ci_tests_response.py new file mode 100644 index 0000000000..0aa48f0276 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_trigger_ci_tests_response.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_trigger_ci_test_location import SyntheticsTriggerCITestLocation + from datadog_api_client.v1.model.synthetics_trigger_ci_test_run_result import SyntheticsTriggerCITestRunResult + +class SyntheticsTriggerCITestsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_trigger_ci_test_location import SyntheticsTriggerCITestLocation + from datadog_api_client.v1.model.synthetics_trigger_ci_test_run_result import SyntheticsTriggerCITestRunResult + return { + "batch_id": (str, none_type), + "locations": ([SyntheticsTriggerCITestLocation],), + "results": ([SyntheticsTriggerCITestRunResult],), + "triggered_check_ids": ([str],), + } + attribute_map = { + "batch_id": "batch_id", + "locations": "locations", + "results": "results", + "triggered_check_ids": "triggered_check_ids", + } + + def __init__(self_, batch_id: Union[str, none_type, UnsetType]=unset, locations: Union[List[SyntheticsTriggerCITestLocation], UnsetType]=unset, results: Union[List[SyntheticsTriggerCITestRunResult], UnsetType]=unset, triggered_check_ids: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing information about the tests triggered. + + :param batch_id: The public ID of the batch triggered. + :type batch_id: str, none_type, optional + + :param locations: List of Synthetic locations. + :type locations: [SyntheticsTriggerCITestLocation], optional + + :param results: Information about the tests runs. + :type results: [SyntheticsTriggerCITestRunResult], optional + + :param triggered_check_ids: The public IDs of the Synthetic test triggered. + :type triggered_check_ids: [str], optional + """ + if batch_id is not unset: + kwargs["batch_id"] = batch_id + if locations is not unset: + kwargs["locations"] = locations + if results is not unset: + kwargs["results"] = results + if triggered_check_ids is not unset: + kwargs["triggered_check_ids"] = triggered_check_ids + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_trigger_test.py b/datadog_api_client/v1/model/synthetics_trigger_test.py new file mode 100644 index 0000000000..730b7c2385 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_trigger_test.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_ci_batch_metadata import SyntheticsCIBatchMetadata + +class SyntheticsTriggerTest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_ci_batch_metadata import SyntheticsCIBatchMetadata + return { + "metadata": (SyntheticsCIBatchMetadata,), + "public_id": (str,), + } + attribute_map = { + "metadata": "metadata", + "public_id": "public_id", + } + + def __init__(self_, public_id: str, metadata: Union[SyntheticsCIBatchMetadata, UnsetType]=unset, **kwargs): + """ + Test configuration for Synthetics + + :param metadata: Metadata for the Synthetic tests run. + :type metadata: SyntheticsCIBatchMetadata, optional + + :param public_id: The public ID of the Synthetic test to trigger. + :type public_id: str + """ + if metadata is not unset: + kwargs["metadata"] = metadata + super().__init__(kwargs) + + + self_.public_id = public_id diff --git a/datadog_api_client/v1/model/synthetics_update_test_pause_status_payload.py b/datadog_api_client/v1/model/synthetics_update_test_pause_status_payload.py new file mode 100644 index 0000000000..59df6d40ce --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_update_test_pause_status_payload.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + +class SyntheticsUpdateTestPauseStatusPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + return { + "new_status": (SyntheticsTestPauseStatus,), + } + attribute_map = { + "new_status": "new_status", + } + + def __init__(self_, new_status: Union[SyntheticsTestPauseStatus, UnsetType]=unset, **kwargs): + """ + Object to start or pause an existing Synthetic test. + + :param new_status: Define whether you want to start ( ``live`` ) or pause ( ``paused`` ) a + Synthetic test. + :type new_status: SyntheticsTestPauseStatus, optional + """ + if new_status is not unset: + kwargs["new_status"] = new_status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_uptime.py b/datadog_api_client/v1/model/synthetics_uptime.py new file mode 100644 index 0000000000..ba53140858 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_uptime.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_history_response_error_with_type import SLOHistoryResponseErrorWithType + +class SyntheticsUptime(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_history_response_error_with_type import SLOHistoryResponseErrorWithType + return { + "errors": ([SLOHistoryResponseErrorWithType], none_type), + "group": (str,), + "history": ([[float]],), + "span_precision": (float,), + "uptime": (float,), + } + attribute_map = { + "errors": "errors", + "group": "group", + "history": "history", + "span_precision": "span_precision", + "uptime": "uptime", + } + + def __init__(self_, errors: Union[List[SLOHistoryResponseErrorWithType], none_type, UnsetType]=unset, group: Union[str, UnsetType]=unset, history: Union[List[List[float]], UnsetType]=unset, span_precision: Union[float, UnsetType]=unset, uptime: Union[float, UnsetType]=unset, **kwargs): + """ + Object containing the uptime information. + + :param errors: An array of error objects returned while querying the history data for the service level objective. + :type errors: [SLOHistoryResponseErrorWithType], none_type, optional + + :param group: The location name + :type group: str, optional + + :param history: The state transition history for the monitor, represented as an array of + pairs. Each pair is an array where the first element is the transition timestamp + in Unix epoch format (integer) and the second element is the state (integer). + For the state, an integer value of ``0`` indicates uptime, ``1`` indicates downtime, + and ``2`` indicates no data. + :type history: [[float]], optional + + :param span_precision: The number of decimal places to which the SLI value is accurate for the given from-to timestamps. + :type span_precision: float, optional + + :param uptime: The overall uptime. + :type uptime: float, optional + """ + if errors is not unset: + kwargs["errors"] = errors + if group is not unset: + kwargs["group"] = group + if history is not unset: + kwargs["history"] = history + if span_precision is not unset: + kwargs["span_precision"] = span_precision + if uptime is not unset: + kwargs["uptime"] = uptime + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/synthetics_variable_parser.py b/datadog_api_client/v1/model/synthetics_variable_parser.py new file mode 100644 index 0000000000..8132a4e372 --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_variable_parser.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.synthetics_global_variable_parser_type import SyntheticsGlobalVariableParserType + +class SyntheticsVariableParser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.synthetics_global_variable_parser_type import SyntheticsGlobalVariableParserType + return { + "type": (SyntheticsGlobalVariableParserType,), + "value": (str,), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: SyntheticsGlobalVariableParserType, value: Union[str, UnsetType]=unset, **kwargs): + """ + Details of the parser to use for the global variable. + + :param type: Type of parser for a Synthetic global variable from a synthetics test. + :type type: SyntheticsGlobalVariableParserType + + :param value: Regex or JSON path used for the parser. Not used with type ``raw``. + :type value: str, optional + """ + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/synthetics_warning_type.py b/datadog_api_client/v1/model/synthetics_warning_type.py new file mode 100644 index 0000000000..fcd874474a --- /dev/null +++ b/datadog_api_client/v1/model/synthetics_warning_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsWarningType(ModelSimple): + """ + User locator used. + + :param value: If omitted defaults to "user_locator". Must be one of ["user_locator"]. + :type value: str + """ + + allowed_values = { + "user_locator", + } + USER_LOCATOR: ClassVar["SyntheticsWarningType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsWarningType.USER_LOCATOR = SyntheticsWarningType("user_locator") diff --git a/datadog_api_client/v1/model/table_widget_cell_display_mode.py b/datadog_api_client/v1/model/table_widget_cell_display_mode.py new file mode 100644 index 0000000000..8ca4534f30 --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_cell_display_mode.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableWidgetCellDisplayMode(ModelSimple): + """ + Define a display mode for the table cell. + + :param value: Must be one of ["number", "bar", "trend"]. + :type value: str + """ + + allowed_values = { + "number", + "bar", + "trend", + } + NUMBER: ClassVar["TableWidgetCellDisplayMode"] + BAR: ClassVar["TableWidgetCellDisplayMode"] + TREND: ClassVar["TableWidgetCellDisplayMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableWidgetCellDisplayMode.NUMBER = TableWidgetCellDisplayMode("number") +TableWidgetCellDisplayMode.BAR = TableWidgetCellDisplayMode("bar") +TableWidgetCellDisplayMode.TREND = TableWidgetCellDisplayMode("trend") diff --git a/datadog_api_client/v1/model/table_widget_definition.py b/datadog_api_client/v1/model/table_widget_definition.py new file mode 100644 index 0000000000..33c54e26ae --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_definition.py @@ -0,0 +1,131 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.table_widget_has_search_bar import TableWidgetHasSearchBar + from datadog_api_client.v1.model.table_widget_request import TableWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.table_widget_definition_type import TableWidgetDefinitionType + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class TableWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.table_widget_has_search_bar import TableWidgetHasSearchBar + from datadog_api_client.v1.model.table_widget_request import TableWidgetRequest + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.table_widget_definition_type import TableWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "has_search_bar": (TableWidgetHasSearchBar,), + "requests": ([TableWidgetRequest],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (TableWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "has_search_bar": "has_search_bar", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[TableWidgetRequest], type: TableWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, has_search_bar: Union[TableWidgetHasSearchBar, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The table visualization is available on dashboards. It displays columns of metrics grouped by tag key. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param has_search_bar: Controls the display of the search bar. + :type has_search_bar: TableWidgetHasSearchBar, optional + + :param requests: Widget definition. + :type requests: [TableWidgetRequest] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the table widget. + :type type: TableWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if has_search_bar is not unset: + kwargs["has_search_bar"] = has_search_bar + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/table_widget_definition_type.py b/datadog_api_client/v1/model/table_widget_definition_type.py new file mode 100644 index 0000000000..da2bc136b9 --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableWidgetDefinitionType(ModelSimple): + """ + Type of the table widget. + + :param value: If omitted defaults to "query_table". Must be one of ["query_table"]. + :type value: str + """ + + allowed_values = { + "query_table", + } + QUERY_TABLE: ClassVar["TableWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableWidgetDefinitionType.QUERY_TABLE = TableWidgetDefinitionType("query_table") diff --git a/datadog_api_client/v1/model/table_widget_has_search_bar.py b/datadog_api_client/v1/model/table_widget_has_search_bar.py new file mode 100644 index 0000000000..e4355118a7 --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_has_search_bar.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableWidgetHasSearchBar(ModelSimple): + """ + Controls the display of the search bar. + + :param value: Must be one of ["always", "never", "auto"]. + :type value: str + """ + + allowed_values = { + "always", + "never", + "auto", + } + ALWAYS: ClassVar["TableWidgetHasSearchBar"] + NEVER: ClassVar["TableWidgetHasSearchBar"] + AUTO: ClassVar["TableWidgetHasSearchBar"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableWidgetHasSearchBar.ALWAYS = TableWidgetHasSearchBar("always") +TableWidgetHasSearchBar.NEVER = TableWidgetHasSearchBar("never") +TableWidgetHasSearchBar.AUTO = TableWidgetHasSearchBar("auto") diff --git a/datadog_api_client/v1/model/table_widget_request.py b/datadog_api_client/v1/model/table_widget_request.py new file mode 100644 index 0000000000..9cc4813049 --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_request.py @@ -0,0 +1,230 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_aggregator import WidgetAggregator + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.apm_stats_query_definition import ApmStatsQueryDefinition + from datadog_api_client.v1.model.table_widget_cell_display_mode import TableWidgetCellDisplayMode + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.widget_sort import WidgetSort + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.table_widget_text_format_rule import TableWidgetTextFormatRule + from datadog_api_client.v1.model.table_widget_text_format_replace_all import TableWidgetTextFormatReplaceAll + from datadog_api_client.v1.model.table_widget_text_format_replace_substring import TableWidgetTextFormatReplaceSubstring + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + +class TableWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_aggregator import WidgetAggregator + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.apm_stats_query_definition import ApmStatsQueryDefinition + from datadog_api_client.v1.model.table_widget_cell_display_mode import TableWidgetCellDisplayMode + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.widget_sort import WidgetSort + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.table_widget_text_format_rule import TableWidgetTextFormatRule + from datadog_api_client.v1.model.table_widget_text_format_replace_all import TableWidgetTextFormatReplaceAll + from datadog_api_client.v1.model.table_widget_text_format_replace_substring import TableWidgetTextFormatReplaceSubstring + return { + "aggregator": (WidgetAggregator,), + "alias": (str,), + "apm_query": (LogQueryDefinition,), + "apm_stats_query": (ApmStatsQueryDefinition,), + "cell_display_mode": ([TableWidgetCellDisplayMode],), + "conditional_formats": ([WidgetConditionalFormat],), + "event_query": (LogQueryDefinition,), + "formulas": ([WidgetFormula],), + "limit": (int,), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "order": (WidgetSort,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + "sort": (WidgetSortBy,), + "text_formats": ([[TableWidgetTextFormatRule]],), + } + attribute_map = { + "aggregator": "aggregator", + "alias": "alias", + "apm_query": "apm_query", + "apm_stats_query": "apm_stats_query", + "cell_display_mode": "cell_display_mode", + "conditional_formats": "conditional_formats", + "event_query": "event_query", + "formulas": "formulas", + "limit": "limit", + "log_query": "log_query", + "network_query": "network_query", + "order": "order", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "queries": "queries", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + "sort": "sort", + "text_formats": "text_formats", + } + + def __init__(self_, aggregator: Union[WidgetAggregator, UnsetType]=unset, alias: Union[str, UnsetType]=unset, apm_query: Union[LogQueryDefinition, UnsetType]=unset, apm_stats_query: Union[ApmStatsQueryDefinition, UnsetType]=unset, cell_display_mode: Union[List[TableWidgetCellDisplayMode], UnsetType]=unset, conditional_formats: Union[List[WidgetConditionalFormat], UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, limit: Union[int, UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, order: Union[WidgetSort, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, sort: Union[WidgetSortBy, UnsetType]=unset, text_formats: Union[List[List[TableWidgetTextFormatRule]], UnsetType]=unset, **kwargs): + """ + Updated table widget. + + :param aggregator: Aggregator used for the request. + :type aggregator: WidgetAggregator, optional + + :param alias: The column name (defaults to the metric name). + :type alias: str, optional + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param apm_stats_query: The APM stats query for table and distributions widgets. + :type apm_stats_query: ApmStatsQueryDefinition, optional + + :param cell_display_mode: A list of display modes for each table cell. + :type cell_display_mode: [TableWidgetCellDisplayMode], optional + + :param conditional_formats: List of conditional formats. + :type conditional_formats: [WidgetConditionalFormat], optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param limit: For metric queries, the number of lines to show in the table. Only one request should have this property. + :type limit: int, optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param order: Widget sorting methods. + :type order: WidgetSort, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Query definition. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param sort: The controls for sorting the widget. + :type sort: WidgetSortBy, optional + + :param text_formats: List of text formats for columns produced by tags. + :type text_formats: [[TableWidgetTextFormatRule]], optional + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + if alias is not unset: + kwargs["alias"] = alias + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if apm_stats_query is not unset: + kwargs["apm_stats_query"] = apm_stats_query + if cell_display_mode is not unset: + kwargs["cell_display_mode"] = cell_display_mode + if conditional_formats is not unset: + kwargs["conditional_formats"] = conditional_formats + if event_query is not unset: + kwargs["event_query"] = event_query + if formulas is not unset: + kwargs["formulas"] = formulas + if limit is not unset: + kwargs["limit"] = limit + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if order is not unset: + kwargs["order"] = order + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + if sort is not unset: + kwargs["sort"] = sort + if text_formats is not unset: + kwargs["text_formats"] = text_formats + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/table_widget_text_format_match.py b/datadog_api_client/v1/model/table_widget_text_format_match.py new file mode 100644 index 0000000000..9e9b69037b --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_text_format_match.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.table_widget_text_format_match_type import TableWidgetTextFormatMatchType + +class TableWidgetTextFormatMatch(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.table_widget_text_format_match_type import TableWidgetTextFormatMatchType + return { + "type": (TableWidgetTextFormatMatchType,), + "value": (str,), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: TableWidgetTextFormatMatchType, value: str, **kwargs): + """ + Match rule for the table widget text format. + + :param type: Match or compare option. + :type type: TableWidgetTextFormatMatchType + + :param value: Table Widget Match String. + :type value: str + """ + super().__init__(kwargs) + + + self_.type = type + self_.value = value diff --git a/datadog_api_client/v1/model/table_widget_text_format_match_type.py b/datadog_api_client/v1/model/table_widget_text_format_match_type.py new file mode 100644 index 0000000000..51de15a4e1 --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_text_format_match_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableWidgetTextFormatMatchType(ModelSimple): + """ + Match or compare option. + + :param value: Must be one of ["is", "is_not", "contains", "does_not_contain", "starts_with", "ends_with"]. + :type value: str + """ + + allowed_values = { + "is", + "is_not", + "contains", + "does_not_contain", + "starts_with", + "ends_with", + } + IS: ClassVar["TableWidgetTextFormatMatchType"] + IS_NOT: ClassVar["TableWidgetTextFormatMatchType"] + CONTAINS: ClassVar["TableWidgetTextFormatMatchType"] + DOES_NOT_CONTAIN: ClassVar["TableWidgetTextFormatMatchType"] + STARTS_WITH: ClassVar["TableWidgetTextFormatMatchType"] + ENDS_WITH: ClassVar["TableWidgetTextFormatMatchType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableWidgetTextFormatMatchType.IS = TableWidgetTextFormatMatchType("is") +TableWidgetTextFormatMatchType.IS_NOT = TableWidgetTextFormatMatchType("is_not") +TableWidgetTextFormatMatchType.CONTAINS = TableWidgetTextFormatMatchType("contains") +TableWidgetTextFormatMatchType.DOES_NOT_CONTAIN = TableWidgetTextFormatMatchType("does_not_contain") +TableWidgetTextFormatMatchType.STARTS_WITH = TableWidgetTextFormatMatchType("starts_with") +TableWidgetTextFormatMatchType.ENDS_WITH = TableWidgetTextFormatMatchType("ends_with") diff --git a/datadog_api_client/v1/model/table_widget_text_format_palette.py b/datadog_api_client/v1/model/table_widget_text_format_palette.py new file mode 100644 index 0000000000..286491436f --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_text_format_palette.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableWidgetTextFormatPalette(ModelSimple): + """ + Color-on-color palette to highlight replaced text. + + :param value: If omitted defaults to "white_on_green". Must be one of ["white_on_red", "white_on_yellow", "white_on_green", "black_on_light_red", "black_on_light_yellow", "black_on_light_green", "red_on_white", "yellow_on_white", "green_on_white", "custom_bg", "custom_text"]. + :type value: str + """ + + allowed_values = { + "white_on_red", + "white_on_yellow", + "white_on_green", + "black_on_light_red", + "black_on_light_yellow", + "black_on_light_green", + "red_on_white", + "yellow_on_white", + "green_on_white", + "custom_bg", + "custom_text", + } + WHITE_ON_RED: ClassVar["TableWidgetTextFormatPalette"] + WHITE_ON_YELLOW: ClassVar["TableWidgetTextFormatPalette"] + WHITE_ON_GREEN: ClassVar["TableWidgetTextFormatPalette"] + BLACK_ON_LIGHT_RED: ClassVar["TableWidgetTextFormatPalette"] + BLACK_ON_LIGHT_YELLOW: ClassVar["TableWidgetTextFormatPalette"] + BLACK_ON_LIGHT_GREEN: ClassVar["TableWidgetTextFormatPalette"] + RED_ON_WHITE: ClassVar["TableWidgetTextFormatPalette"] + YELLOW_ON_WHITE: ClassVar["TableWidgetTextFormatPalette"] + GREEN_ON_WHITE: ClassVar["TableWidgetTextFormatPalette"] + CUSTOM_BG: ClassVar["TableWidgetTextFormatPalette"] + CUSTOM_TEXT: ClassVar["TableWidgetTextFormatPalette"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableWidgetTextFormatPalette.WHITE_ON_RED = TableWidgetTextFormatPalette("white_on_red") +TableWidgetTextFormatPalette.WHITE_ON_YELLOW = TableWidgetTextFormatPalette("white_on_yellow") +TableWidgetTextFormatPalette.WHITE_ON_GREEN = TableWidgetTextFormatPalette("white_on_green") +TableWidgetTextFormatPalette.BLACK_ON_LIGHT_RED = TableWidgetTextFormatPalette("black_on_light_red") +TableWidgetTextFormatPalette.BLACK_ON_LIGHT_YELLOW = TableWidgetTextFormatPalette("black_on_light_yellow") +TableWidgetTextFormatPalette.BLACK_ON_LIGHT_GREEN = TableWidgetTextFormatPalette("black_on_light_green") +TableWidgetTextFormatPalette.RED_ON_WHITE = TableWidgetTextFormatPalette("red_on_white") +TableWidgetTextFormatPalette.YELLOW_ON_WHITE = TableWidgetTextFormatPalette("yellow_on_white") +TableWidgetTextFormatPalette.GREEN_ON_WHITE = TableWidgetTextFormatPalette("green_on_white") +TableWidgetTextFormatPalette.CUSTOM_BG = TableWidgetTextFormatPalette("custom_bg") +TableWidgetTextFormatPalette.CUSTOM_TEXT = TableWidgetTextFormatPalette("custom_text") diff --git a/datadog_api_client/v1/model/table_widget_text_format_replace.py b/datadog_api_client/v1/model/table_widget_text_format_replace.py new file mode 100644 index 0000000000..e789fb544a --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_text_format_replace.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TableWidgetTextFormatReplace(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Replace rule for the table widget text format. + + :param type: Table widget text format replace all type. + :type type: TableWidgetTextFormatReplaceAllType + + :param _with: Replace All type. + :type _with: str + + :param substring: Text that will be replaced. + :type substring: str + """ + 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.v1.model.table_widget_text_format_replace_all import TableWidgetTextFormatReplaceAll + from datadog_api_client.v1.model.table_widget_text_format_replace_substring import TableWidgetTextFormatReplaceSubstring + return { + "oneOf": [ + TableWidgetTextFormatReplaceAll, + TableWidgetTextFormatReplaceSubstring, + ], + } diff --git a/datadog_api_client/v1/model/table_widget_text_format_replace_all.py b/datadog_api_client/v1/model/table_widget_text_format_replace_all.py new file mode 100644 index 0000000000..e5c396d70f --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_text_format_replace_all.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.table_widget_text_format_replace_all_type import TableWidgetTextFormatReplaceAllType + +class TableWidgetTextFormatReplaceAll(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.table_widget_text_format_replace_all_type import TableWidgetTextFormatReplaceAllType + return { + "type": (TableWidgetTextFormatReplaceAllType,), + "_with": (str,), + } + attribute_map = { + "type": "type", + "_with": "with", + } + + def __init__(self_, type: TableWidgetTextFormatReplaceAllType, _with: str, **kwargs): + """ + Match All definition. + + :param type: Table widget text format replace all type. + :type type: TableWidgetTextFormatReplaceAllType + + :param _with: Replace All type. + :type _with: str + """ + super().__init__(kwargs) + + + self_.type = type + self_._with = _with diff --git a/datadog_api_client/v1/model/table_widget_text_format_replace_all_type.py b/datadog_api_client/v1/model/table_widget_text_format_replace_all_type.py new file mode 100644 index 0000000000..cedc0d49eb --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_text_format_replace_all_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableWidgetTextFormatReplaceAllType(ModelSimple): + """ + Table widget text format replace all type. + + :param value: If omitted defaults to "all". Must be one of ["all"]. + :type value: str + """ + + allowed_values = { + "all", + } + ALL: ClassVar["TableWidgetTextFormatReplaceAllType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableWidgetTextFormatReplaceAllType.ALL = TableWidgetTextFormatReplaceAllType("all") diff --git a/datadog_api_client/v1/model/table_widget_text_format_replace_substring.py b/datadog_api_client/v1/model/table_widget_text_format_replace_substring.py new file mode 100644 index 0000000000..99bf8c155f --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_text_format_replace_substring.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.table_widget_text_format_replace_substring_type import TableWidgetTextFormatReplaceSubstringType + +class TableWidgetTextFormatReplaceSubstring(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.table_widget_text_format_replace_substring_type import TableWidgetTextFormatReplaceSubstringType + return { + "substring": (str,), + "type": (TableWidgetTextFormatReplaceSubstringType,), + "_with": (str,), + } + attribute_map = { + "substring": "substring", + "type": "type", + "_with": "with", + } + + def __init__(self_, substring: str, type: TableWidgetTextFormatReplaceSubstringType, _with: str, **kwargs): + """ + Match Sub-string definition. + + :param substring: Text that will be replaced. + :type substring: str + + :param type: Table widget text format replace sub-string type. + :type type: TableWidgetTextFormatReplaceSubstringType + + :param _with: Text that will replace original sub-string. + :type _with: str + """ + super().__init__(kwargs) + + + self_.substring = substring + self_.type = type + self_._with = _with diff --git a/datadog_api_client/v1/model/table_widget_text_format_replace_substring_type.py b/datadog_api_client/v1/model/table_widget_text_format_replace_substring_type.py new file mode 100644 index 0000000000..6a44927984 --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_text_format_replace_substring_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableWidgetTextFormatReplaceSubstringType(ModelSimple): + """ + Table widget text format replace sub-string type. + + :param value: If omitted defaults to "substring". Must be one of ["substring"]. + :type value: str + """ + + allowed_values = { + "substring", + } + SUBSTRING: ClassVar["TableWidgetTextFormatReplaceSubstringType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableWidgetTextFormatReplaceSubstringType.SUBSTRING = TableWidgetTextFormatReplaceSubstringType("substring") diff --git a/datadog_api_client/v1/model/table_widget_text_format_rule.py b/datadog_api_client/v1/model/table_widget_text_format_rule.py new file mode 100644 index 0000000000..c0f8e3dd27 --- /dev/null +++ b/datadog_api_client/v1/model/table_widget_text_format_rule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.table_widget_text_format_match import TableWidgetTextFormatMatch + from datadog_api_client.v1.model.table_widget_text_format_palette import TableWidgetTextFormatPalette + from datadog_api_client.v1.model.table_widget_text_format_replace import TableWidgetTextFormatReplace + from datadog_api_client.v1.model.table_widget_text_format_replace_all import TableWidgetTextFormatReplaceAll + from datadog_api_client.v1.model.table_widget_text_format_replace_substring import TableWidgetTextFormatReplaceSubstring + +class TableWidgetTextFormatRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.table_widget_text_format_match import TableWidgetTextFormatMatch + from datadog_api_client.v1.model.table_widget_text_format_palette import TableWidgetTextFormatPalette + from datadog_api_client.v1.model.table_widget_text_format_replace import TableWidgetTextFormatReplace + return { + "custom_bg_color": (str,), + "custom_fg_color": (str,), + "match": (TableWidgetTextFormatMatch,), + "palette": (TableWidgetTextFormatPalette,), + "replace": (TableWidgetTextFormatReplace,), + } + attribute_map = { + "custom_bg_color": "custom_bg_color", + "custom_fg_color": "custom_fg_color", + "match": "match", + "palette": "palette", + "replace": "replace", + } + + def __init__(self_, match: TableWidgetTextFormatMatch, custom_bg_color: Union[str, UnsetType]=unset, custom_fg_color: Union[str, UnsetType]=unset, palette: Union[TableWidgetTextFormatPalette, UnsetType]=unset, replace: Union[TableWidgetTextFormatReplace, TableWidgetTextFormatReplaceAll, TableWidgetTextFormatReplaceSubstring, UnsetType]=unset, **kwargs): + """ + Text format rules. + + :param custom_bg_color: Hex representation of the custom background color. Used with custom background palette option. + :type custom_bg_color: str, optional + + :param custom_fg_color: Hex representation of the custom text color. Used with custom text palette option. + :type custom_fg_color: str, optional + + :param match: Match rule for the table widget text format. + :type match: TableWidgetTextFormatMatch + + :param palette: Color-on-color palette to highlight replaced text. + :type palette: TableWidgetTextFormatPalette, optional + + :param replace: Replace rule for the table widget text format. + :type replace: TableWidgetTextFormatReplace, optional + """ + if custom_bg_color is not unset: + kwargs["custom_bg_color"] = custom_bg_color + if custom_fg_color is not unset: + kwargs["custom_fg_color"] = custom_fg_color + if palette is not unset: + kwargs["palette"] = palette + if replace is not unset: + kwargs["replace"] = replace + super().__init__(kwargs) + + + self_.match = match diff --git a/datadog_api_client/v1/model/tag_to_hosts.py b/datadog_api_client/v1/model/tag_to_hosts.py new file mode 100644 index 0000000000..cff902e8e3 --- /dev/null +++ b/datadog_api_client/v1/model/tag_to_hosts.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TagToHosts(ModelNormal): + @cached_property + def openapi_types(_): + return { + "tags": ({str: ([str],)},), + } + attribute_map = { + "tags": "tags", + } + + def __init__(self_, tags: Union[Dict[str, List[str]], UnsetType]=unset, **kwargs): + """ + In this object, the key is the tag, and the value is a list of host names that are reporting that tag. + + :param tags: A mapping of tags to host names + :type tags: {str: ([str],)}, optional + """ + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/target_format_type.py b/datadog_api_client/v1/model/target_format_type.py new file mode 100644 index 0000000000..68588cc9cf --- /dev/null +++ b/datadog_api_client/v1/model/target_format_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TargetFormatType(ModelSimple): + """ + If the `target_type` of the remapper is `attribute`, try to cast the value to a new specific type. + If the cast is not possible, the original type is kept. `string`, `integer`, or `double` are the possible types. + If the `target_type` is `tag`, this parameter may not be specified. + + :param value: Must be one of ["auto", "string", "integer", "double"]. + :type value: str + """ + + allowed_values = { + "auto", + "string", + "integer", + "double", + } + AUTO: ClassVar["TargetFormatType"] + STRING: ClassVar["TargetFormatType"] + INTEGER: ClassVar["TargetFormatType"] + DOUBLE: ClassVar["TargetFormatType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TargetFormatType.AUTO = TargetFormatType("auto") +TargetFormatType.STRING = TargetFormatType("string") +TargetFormatType.INTEGER = TargetFormatType("integer") +TargetFormatType.DOUBLE = TargetFormatType("double") diff --git a/datadog_api_client/v1/model/timeseries_background.py b/datadog_api_client/v1/model/timeseries_background.py new file mode 100644 index 0000000000..63d5f9a235 --- /dev/null +++ b/datadog_api_client/v1/model/timeseries_background.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.timeseries_background_type import TimeseriesBackgroundType + from datadog_api_client.v1.model.widget_axis import WidgetAxis + +class TimeseriesBackground(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.timeseries_background_type import TimeseriesBackgroundType + from datadog_api_client.v1.model.widget_axis import WidgetAxis + return { + "type": (TimeseriesBackgroundType,), + "yaxis": (WidgetAxis,), + } + attribute_map = { + "type": "type", + "yaxis": "yaxis", + } + + def __init__(self_, type: TimeseriesBackgroundType, yaxis: Union[WidgetAxis, UnsetType]=unset, **kwargs): + """ + Set a timeseries on the widget background. + + :param type: Timeseries is made using an area or bars. + :type type: TimeseriesBackgroundType + + :param yaxis: Axis controls for the widget. + :type yaxis: WidgetAxis, optional + """ + if yaxis is not unset: + kwargs["yaxis"] = yaxis + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/timeseries_background_type.py b/datadog_api_client/v1/model/timeseries_background_type.py new file mode 100644 index 0000000000..66623ec7cc --- /dev/null +++ b/datadog_api_client/v1/model/timeseries_background_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TimeseriesBackgroundType(ModelSimple): + """ + Timeseries is made using an area or bars. + + :param value: If omitted defaults to "area". Must be one of ["bars", "area"]. + :type value: str + """ + + allowed_values = { + "bars", + "area", + } + BARS: ClassVar["TimeseriesBackgroundType"] + AREA: ClassVar["TimeseriesBackgroundType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TimeseriesBackgroundType.BARS = TimeseriesBackgroundType("bars") +TimeseriesBackgroundType.AREA = TimeseriesBackgroundType("area") diff --git a/datadog_api_client/v1/model/timeseries_request_style.py b/datadog_api_client/v1/model/timeseries_request_style.py new file mode 100644 index 0000000000..d51727364e --- /dev/null +++ b/datadog_api_client/v1/model/timeseries_request_style.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_line_type import WidgetLineType + from datadog_api_client.v1.model.widget_line_width import WidgetLineWidth + from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy + +class TimeseriesRequestStyle(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_line_type import WidgetLineType + from datadog_api_client.v1.model.widget_line_width import WidgetLineWidth + from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy + return { + "has_value_labels": (bool,), + "line_type": (WidgetLineType,), + "line_width": (WidgetLineWidth,), + "order_by": (WidgetStyleOrderBy,), + "palette": (str,), + } + attribute_map = { + "has_value_labels": "has_value_labels", + "line_type": "line_type", + "line_width": "line_width", + "order_by": "order_by", + "palette": "palette", + } + + def __init__(self_, has_value_labels: Union[bool, UnsetType]=unset, line_type: Union[WidgetLineType, UnsetType]=unset, line_width: Union[WidgetLineWidth, UnsetType]=unset, order_by: Union[WidgetStyleOrderBy, UnsetType]=unset, palette: Union[str, UnsetType]=unset, **kwargs): + """ + Define request widget style for timeseries widgets. + + :param has_value_labels: If true, the value is displayed as a label relative to the data point. + :type has_value_labels: bool, optional + + :param line_type: Type of lines displayed. + :type line_type: WidgetLineType, optional + + :param line_width: Width of line displayed. + :type line_width: WidgetLineWidth, optional + + :param order_by: How to order series in timeseries visualizations. + + * ``tags`` : Order series alphabetically by tag name (default behavior) + * ``values`` : Order series by their current metric values (typically descending) + :type order_by: WidgetStyleOrderBy, optional + + :param palette: Color palette to apply to the widget. + :type palette: str, optional + """ + if has_value_labels is not unset: + kwargs["has_value_labels"] = has_value_labels + if line_type is not unset: + kwargs["line_type"] = line_type + if line_width is not unset: + kwargs["line_width"] = line_width + if order_by is not unset: + kwargs["order_by"] = order_by + if palette is not unset: + kwargs["palette"] = palette + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/timeseries_widget_definition.py b/datadog_api_client/v1/model/timeseries_widget_definition.py new file mode 100644 index 0000000000..f55c08c1a7 --- /dev/null +++ b/datadog_api_client/v1/model/timeseries_widget_definition.py @@ -0,0 +1,191 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_event import WidgetEvent + from datadog_api_client.v1.model.timeseries_widget_legend_column import TimeseriesWidgetLegendColumn + from datadog_api_client.v1.model.timeseries_widget_legend_layout import TimeseriesWidgetLegendLayout + from datadog_api_client.v1.model.widget_marker import WidgetMarker + from datadog_api_client.v1.model.timeseries_widget_request import TimeseriesWidgetRequest + from datadog_api_client.v1.model.widget_axis import WidgetAxis + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.timeseries_widget_definition_type import TimeseriesWidgetDefinitionType + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class TimeseriesWidgetDefinition(ModelNormal): + validations = { + "requests": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.widget_event import WidgetEvent + from datadog_api_client.v1.model.timeseries_widget_legend_column import TimeseriesWidgetLegendColumn + from datadog_api_client.v1.model.timeseries_widget_legend_layout import TimeseriesWidgetLegendLayout + from datadog_api_client.v1.model.widget_marker import WidgetMarker + from datadog_api_client.v1.model.timeseries_widget_request import TimeseriesWidgetRequest + from datadog_api_client.v1.model.widget_axis import WidgetAxis + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.timeseries_widget_definition_type import TimeseriesWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "events": ([WidgetEvent],), + "legend_columns": ([TimeseriesWidgetLegendColumn],), + "legend_layout": (TimeseriesWidgetLegendLayout,), + "legend_size": (str,), + "markers": ([WidgetMarker],), + "requests": ([TimeseriesWidgetRequest],), + "right_yaxis": (WidgetAxis,), + "show_legend": (bool,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (TimeseriesWidgetDefinitionType,), + "yaxis": (WidgetAxis,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "events": "events", + "legend_columns": "legend_columns", + "legend_layout": "legend_layout", + "legend_size": "legend_size", + "markers": "markers", + "requests": "requests", + "right_yaxis": "right_yaxis", + "show_legend": "show_legend", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + "yaxis": "yaxis", + } + + def __init__(self_, requests: List[TimeseriesWidgetRequest], type: TimeseriesWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, events: Union[List[WidgetEvent], UnsetType]=unset, legend_columns: Union[List[TimeseriesWidgetLegendColumn], UnsetType]=unset, legend_layout: Union[TimeseriesWidgetLegendLayout, UnsetType]=unset, legend_size: Union[str, UnsetType]=unset, markers: Union[List[WidgetMarker], UnsetType]=unset, right_yaxis: Union[WidgetAxis, UnsetType]=unset, show_legend: Union[bool, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, yaxis: Union[WidgetAxis, UnsetType]=unset, **kwargs): + """ + The timeseries visualization allows you to display the evolution of one or more metrics, log events, or Indexed Spans over time. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param events: List of widget events. Deprecated - Use ``overlay`` request type instead. **Deprecated**. + :type events: [WidgetEvent], optional + + :param legend_columns: Columns displayed in the legend. + :type legend_columns: [TimeseriesWidgetLegendColumn], optional + + :param legend_layout: Layout of the legend. + :type legend_layout: TimeseriesWidgetLegendLayout, optional + + :param legend_size: Available legend sizes for a widget. Should be one of "0", "2", "4", "8", "16", or "auto". + :type legend_size: str, optional + + :param markers: List of markers. + :type markers: [WidgetMarker], optional + + :param requests: List of timeseries widget requests. + :type requests: [TimeseriesWidgetRequest] + + :param right_yaxis: Axis controls for the widget. + :type right_yaxis: WidgetAxis, optional + + :param show_legend: (screenboard only) Show the legend for this widget. + :type show_legend: bool, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the timeseries widget. + :type type: TimeseriesWidgetDefinitionType + + :param yaxis: Axis controls for the widget. + :type yaxis: WidgetAxis, optional + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if events is not unset: + kwargs["events"] = events + if legend_columns is not unset: + kwargs["legend_columns"] = legend_columns + if legend_layout is not unset: + kwargs["legend_layout"] = legend_layout + if legend_size is not unset: + kwargs["legend_size"] = legend_size + if markers is not unset: + kwargs["markers"] = markers + if right_yaxis is not unset: + kwargs["right_yaxis"] = right_yaxis + if show_legend is not unset: + kwargs["show_legend"] = show_legend + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + if yaxis is not unset: + kwargs["yaxis"] = yaxis + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/timeseries_widget_definition_type.py b/datadog_api_client/v1/model/timeseries_widget_definition_type.py new file mode 100644 index 0000000000..baa4249d87 --- /dev/null +++ b/datadog_api_client/v1/model/timeseries_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TimeseriesWidgetDefinitionType(ModelSimple): + """ + Type of the timeseries widget. + + :param value: If omitted defaults to "timeseries". Must be one of ["timeseries"]. + :type value: str + """ + + allowed_values = { + "timeseries", + } + TIMESERIES: ClassVar["TimeseriesWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TimeseriesWidgetDefinitionType.TIMESERIES = TimeseriesWidgetDefinitionType("timeseries") diff --git a/datadog_api_client/v1/model/timeseries_widget_expression_alias.py b/datadog_api_client/v1/model/timeseries_widget_expression_alias.py new file mode 100644 index 0000000000..dfe97566ae --- /dev/null +++ b/datadog_api_client/v1/model/timeseries_widget_expression_alias.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimeseriesWidgetExpressionAlias(ModelNormal): + @cached_property + def openapi_types(_): + return { + "alias_name": (str,), + "expression": (str,), + } + attribute_map = { + "alias_name": "alias_name", + "expression": "expression", + } + + def __init__(self_, expression: str, alias_name: Union[str, UnsetType]=unset, **kwargs): + """ + Define an expression alias. + + :param alias_name: Expression alias. + :type alias_name: str, optional + + :param expression: Expression name. + :type expression: str + """ + if alias_name is not unset: + kwargs["alias_name"] = alias_name + super().__init__(kwargs) + + + self_.expression = expression diff --git a/datadog_api_client/v1/model/timeseries_widget_legend_column.py b/datadog_api_client/v1/model/timeseries_widget_legend_column.py new file mode 100644 index 0000000000..8a697f40a6 --- /dev/null +++ b/datadog_api_client/v1/model/timeseries_widget_legend_column.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TimeseriesWidgetLegendColumn(ModelSimple): + """ + Legend column. + + :param value: Must be one of ["value", "avg", "sum", "min", "max"]. + :type value: str + """ + + allowed_values = { + "value", + "avg", + "sum", + "min", + "max", + } + VALUE: ClassVar["TimeseriesWidgetLegendColumn"] + AVG: ClassVar["TimeseriesWidgetLegendColumn"] + SUM: ClassVar["TimeseriesWidgetLegendColumn"] + MIN: ClassVar["TimeseriesWidgetLegendColumn"] + MAX: ClassVar["TimeseriesWidgetLegendColumn"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TimeseriesWidgetLegendColumn.VALUE = TimeseriesWidgetLegendColumn("value") +TimeseriesWidgetLegendColumn.AVG = TimeseriesWidgetLegendColumn("avg") +TimeseriesWidgetLegendColumn.SUM = TimeseriesWidgetLegendColumn("sum") +TimeseriesWidgetLegendColumn.MIN = TimeseriesWidgetLegendColumn("min") +TimeseriesWidgetLegendColumn.MAX = TimeseriesWidgetLegendColumn("max") diff --git a/datadog_api_client/v1/model/timeseries_widget_legend_layout.py b/datadog_api_client/v1/model/timeseries_widget_legend_layout.py new file mode 100644 index 0000000000..594b87b460 --- /dev/null +++ b/datadog_api_client/v1/model/timeseries_widget_legend_layout.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TimeseriesWidgetLegendLayout(ModelSimple): + """ + Layout of the legend. + + :param value: Must be one of ["auto", "horizontal", "vertical"]. + :type value: str + """ + + allowed_values = { + "auto", + "horizontal", + "vertical", + } + AUTO: ClassVar["TimeseriesWidgetLegendLayout"] + HORIZONTAL: ClassVar["TimeseriesWidgetLegendLayout"] + VERTICAL: ClassVar["TimeseriesWidgetLegendLayout"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TimeseriesWidgetLegendLayout.AUTO = TimeseriesWidgetLegendLayout("auto") +TimeseriesWidgetLegendLayout.HORIZONTAL = TimeseriesWidgetLegendLayout("horizontal") +TimeseriesWidgetLegendLayout.VERTICAL = TimeseriesWidgetLegendLayout("vertical") diff --git a/datadog_api_client/v1/model/timeseries_widget_request.py b/datadog_api_client/v1/model/timeseries_widget_request.py new file mode 100644 index 0000000000..4ac11ed481 --- /dev/null +++ b/datadog_api_client/v1/model/timeseries_widget_request.py @@ -0,0 +1,188 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_display_type import WidgetDisplayType + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.timeseries_widget_expression_alias import TimeseriesWidgetExpressionAlias + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.timeseries_request_style import TimeseriesRequestStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + +class TimeseriesWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_display_type import WidgetDisplayType + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.timeseries_widget_expression_alias import TimeseriesWidgetExpressionAlias + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.timeseries_request_style import TimeseriesRequestStyle + return { + "apm_query": (LogQueryDefinition,), + "audit_query": (LogQueryDefinition,), + "display_type": (WidgetDisplayType,), + "event_query": (LogQueryDefinition,), + "formulas": ([WidgetFormula],), + "log_query": (LogQueryDefinition,), + "metadata": ([TimeseriesWidgetExpressionAlias],), + "network_query": (LogQueryDefinition,), + "on_right_yaxis": (bool,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + "style": (TimeseriesRequestStyle,), + } + attribute_map = { + "apm_query": "apm_query", + "audit_query": "audit_query", + "display_type": "display_type", + "event_query": "event_query", + "formulas": "formulas", + "log_query": "log_query", + "metadata": "metadata", + "network_query": "network_query", + "on_right_yaxis": "on_right_yaxis", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "queries": "queries", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + "style": "style", + } + + def __init__(self_, apm_query: Union[LogQueryDefinition, UnsetType]=unset, audit_query: Union[LogQueryDefinition, UnsetType]=unset, display_type: Union[WidgetDisplayType, UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, metadata: Union[List[TimeseriesWidgetExpressionAlias], UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, on_right_yaxis: Union[bool, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, style: Union[TimeseriesRequestStyle, UnsetType]=unset, **kwargs): + """ + Updated timeseries widget. + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param audit_query: The log query. + :type audit_query: LogQueryDefinition, optional + + :param display_type: Type of display to use for the request. + :type display_type: WidgetDisplayType, optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param metadata: Used to define expression aliases. + :type metadata: [TimeseriesWidgetExpressionAlias], optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param on_right_yaxis: Whether or not to display a second y-axis on the right. + :type on_right_yaxis: bool, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Widget query. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param style: Define request widget style for timeseries widgets. + :type style: TimeseriesRequestStyle, optional + """ + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if audit_query is not unset: + kwargs["audit_query"] = audit_query + if display_type is not unset: + kwargs["display_type"] = display_type + if event_query is not unset: + kwargs["event_query"] = event_query + if formulas is not unset: + kwargs["formulas"] = formulas + if log_query is not unset: + kwargs["log_query"] = log_query + if metadata is not unset: + kwargs["metadata"] = metadata + if network_query is not unset: + kwargs["network_query"] = network_query + if on_right_yaxis is not unset: + kwargs["on_right_yaxis"] = on_right_yaxis + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/toplist_widget_definition.py b/datadog_api_client/v1/model/toplist_widget_definition.py new file mode 100644 index 0000000000..df90abd139 --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_definition.py @@ -0,0 +1,133 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.toplist_widget_request import ToplistWidgetRequest + from datadog_api_client.v1.model.toplist_widget_style import ToplistWidgetStyle + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.toplist_widget_definition_type import ToplistWidgetDefinitionType + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + from datadog_api_client.v1.model.toplist_widget_stacked import ToplistWidgetStacked + from datadog_api_client.v1.model.toplist_widget_flat import ToplistWidgetFlat + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class ToplistWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.toplist_widget_request import ToplistWidgetRequest + from datadog_api_client.v1.model.toplist_widget_style import ToplistWidgetStyle + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.toplist_widget_definition_type import ToplistWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "requests": ([ToplistWidgetRequest],), + "style": (ToplistWidgetStyle,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (ToplistWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "requests": "requests", + "style": "style", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[ToplistWidgetRequest], type: ToplistWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, style: Union[ToplistWidgetStyle, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + The top list visualization enables you to display a list of Tag value like hostname or service with the most or least of any metric value, such as highest consumers of CPU, hosts with the least disk space, etc. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param requests: List of top list widget requests. + :type requests: [ToplistWidgetRequest] + + :param style: Style customization for a top list widget. + :type style: ToplistWidgetStyle, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the top list widget. + :type type: ToplistWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if style is not unset: + kwargs["style"] = style + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/toplist_widget_definition_type.py b/datadog_api_client/v1/model/toplist_widget_definition_type.py new file mode 100644 index 0000000000..2bbc2da178 --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ToplistWidgetDefinitionType(ModelSimple): + """ + Type of the top list widget. + + :param value: If omitted defaults to "toplist". Must be one of ["toplist"]. + :type value: str + """ + + allowed_values = { + "toplist", + } + TOPLIST: ClassVar["ToplistWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ToplistWidgetDefinitionType.TOPLIST = ToplistWidgetDefinitionType("toplist") diff --git a/datadog_api_client/v1/model/toplist_widget_display.py b/datadog_api_client/v1/model/toplist_widget_display.py new file mode 100644 index 0000000000..3ac3f29f83 --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_display.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ToplistWidgetDisplay(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Top list widget display options. + + :param legend: Top list widget stacked legend behavior. + :type legend: ToplistWidgetLegend, optional + + :param type: Top list widget stacked display type. + :type type: ToplistWidgetStackedType + """ + 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.v1.model.toplist_widget_stacked import ToplistWidgetStacked + from datadog_api_client.v1.model.toplist_widget_flat import ToplistWidgetFlat + return { + "oneOf": [ + ToplistWidgetStacked, + ToplistWidgetFlat, + ], + } diff --git a/datadog_api_client/v1/model/toplist_widget_flat.py b/datadog_api_client/v1/model/toplist_widget_flat.py new file mode 100644 index 0000000000..f7578b5353 --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_flat.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.toplist_widget_flat_type import ToplistWidgetFlatType + +class ToplistWidgetFlat(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.toplist_widget_flat_type import ToplistWidgetFlatType + return { + "type": (ToplistWidgetFlatType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: ToplistWidgetFlatType, **kwargs): + """ + Top list widget flat display. + + :param type: Top list widget flat display type. + :type type: ToplistWidgetFlatType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/toplist_widget_flat_type.py b/datadog_api_client/v1/model/toplist_widget_flat_type.py new file mode 100644 index 0000000000..0ef8d575dd --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_flat_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ToplistWidgetFlatType(ModelSimple): + """ + Top list widget flat display type. + + :param value: If omitted defaults to "flat". Must be one of ["flat"]. + :type value: str + """ + + allowed_values = { + "flat", + } + FLAT: ClassVar["ToplistWidgetFlatType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ToplistWidgetFlatType.FLAT = ToplistWidgetFlatType("flat") diff --git a/datadog_api_client/v1/model/toplist_widget_legend.py b/datadog_api_client/v1/model/toplist_widget_legend.py new file mode 100644 index 0000000000..f39ee74d12 --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_legend.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ToplistWidgetLegend(ModelSimple): + """ + Top list widget stacked legend behavior. + + :param value: Must be one of ["automatic", "inline", "none"]. + :type value: str + """ + + allowed_values = { + "automatic", + "inline", + "none", + } + AUTOMATIC: ClassVar["ToplistWidgetLegend"] + INLINE: ClassVar["ToplistWidgetLegend"] + NONE: ClassVar["ToplistWidgetLegend"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ToplistWidgetLegend.AUTOMATIC = ToplistWidgetLegend("automatic") +ToplistWidgetLegend.INLINE = ToplistWidgetLegend("inline") +ToplistWidgetLegend.NONE = ToplistWidgetLegend("none") diff --git a/datadog_api_client/v1/model/toplist_widget_request.py b/datadog_api_client/v1/model/toplist_widget_request.py new file mode 100644 index 0000000000..6bf184f8ba --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_request.py @@ -0,0 +1,188 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + +class ToplistWidgetRequest(ModelNormal): + validations = { + "conditional_formats": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle + return { + "apm_query": (LogQueryDefinition,), + "audit_query": (LogQueryDefinition,), + "conditional_formats": ([WidgetConditionalFormat],), + "event_query": (LogQueryDefinition,), + "formulas": ([WidgetFormula],), + "log_query": (LogQueryDefinition,), + "network_query": (LogQueryDefinition,), + "process_query": (ProcessQueryDefinition,), + "profile_metrics_query": (LogQueryDefinition,), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (FormulaAndFunctionResponseFormat,), + "rum_query": (LogQueryDefinition,), + "security_query": (LogQueryDefinition,), + "sort": (WidgetSortBy,), + "style": (WidgetRequestStyle,), + } + attribute_map = { + "apm_query": "apm_query", + "audit_query": "audit_query", + "conditional_formats": "conditional_formats", + "event_query": "event_query", + "formulas": "formulas", + "log_query": "log_query", + "network_query": "network_query", + "process_query": "process_query", + "profile_metrics_query": "profile_metrics_query", + "q": "q", + "queries": "queries", + "response_format": "response_format", + "rum_query": "rum_query", + "security_query": "security_query", + "sort": "sort", + "style": "style", + } + + def __init__(self_, apm_query: Union[LogQueryDefinition, UnsetType]=unset, audit_query: Union[LogQueryDefinition, UnsetType]=unset, conditional_formats: Union[List[WidgetConditionalFormat], UnsetType]=unset, event_query: Union[LogQueryDefinition, UnsetType]=unset, formulas: Union[List[WidgetFormula], UnsetType]=unset, log_query: Union[LogQueryDefinition, UnsetType]=unset, network_query: Union[LogQueryDefinition, UnsetType]=unset, process_query: Union[ProcessQueryDefinition, UnsetType]=unset, profile_metrics_query: Union[LogQueryDefinition, UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, rum_query: Union[LogQueryDefinition, UnsetType]=unset, security_query: Union[LogQueryDefinition, UnsetType]=unset, sort: Union[WidgetSortBy, UnsetType]=unset, style: Union[WidgetRequestStyle, UnsetType]=unset, **kwargs): + """ + Updated top list widget. + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param audit_query: The log query. + :type audit_query: LogQueryDefinition, optional + + :param conditional_formats: List of conditional formats. + :type conditional_formats: [WidgetConditionalFormat], optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param q: Widget query. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param sort: The controls for sorting the widget. + :type sort: WidgetSortBy, optional + + :param style: Define request widget style. + :type style: WidgetRequestStyle, optional + """ + if apm_query is not unset: + kwargs["apm_query"] = apm_query + if audit_query is not unset: + kwargs["audit_query"] = audit_query + if conditional_formats is not unset: + kwargs["conditional_formats"] = conditional_formats + if event_query is not unset: + kwargs["event_query"] = event_query + if formulas is not unset: + kwargs["formulas"] = formulas + if log_query is not unset: + kwargs["log_query"] = log_query + if network_query is not unset: + kwargs["network_query"] = network_query + if process_query is not unset: + kwargs["process_query"] = process_query + if profile_metrics_query is not unset: + kwargs["profile_metrics_query"] = profile_metrics_query + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if response_format is not unset: + kwargs["response_format"] = response_format + if rum_query is not unset: + kwargs["rum_query"] = rum_query + if security_query is not unset: + kwargs["security_query"] = security_query + if sort is not unset: + kwargs["sort"] = sort + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/toplist_widget_scaling.py b/datadog_api_client/v1/model/toplist_widget_scaling.py new file mode 100644 index 0000000000..5943e734d0 --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_scaling.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ToplistWidgetScaling(ModelSimple): + """ + Top list widget scaling definition. + + :param value: Must be one of ["absolute", "relative"]. + :type value: str + """ + + allowed_values = { + "absolute", + "relative", + } + ABSOLUTE: ClassVar["ToplistWidgetScaling"] + RELATIVE: ClassVar["ToplistWidgetScaling"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ToplistWidgetScaling.ABSOLUTE = ToplistWidgetScaling("absolute") +ToplistWidgetScaling.RELATIVE = ToplistWidgetScaling("relative") diff --git a/datadog_api_client/v1/model/toplist_widget_stacked.py b/datadog_api_client/v1/model/toplist_widget_stacked.py new file mode 100644 index 0000000000..30675d3ac7 --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_stacked.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.toplist_widget_legend import ToplistWidgetLegend + from datadog_api_client.v1.model.toplist_widget_stacked_type import ToplistWidgetStackedType + +class ToplistWidgetStacked(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.toplist_widget_legend import ToplistWidgetLegend + from datadog_api_client.v1.model.toplist_widget_stacked_type import ToplistWidgetStackedType + return { + "legend": (ToplistWidgetLegend,), + "type": (ToplistWidgetStackedType,), + } + attribute_map = { + "legend": "legend", + "type": "type", + } + + def __init__(self_, type: ToplistWidgetStackedType, legend: Union[ToplistWidgetLegend, UnsetType]=unset, **kwargs): + """ + Top list widget stacked display options. + + :param legend: Top list widget stacked legend behavior. + :type legend: ToplistWidgetLegend, optional + + :param type: Top list widget stacked display type. + :type type: ToplistWidgetStackedType + """ + if legend is not unset: + kwargs["legend"] = legend + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/toplist_widget_stacked_type.py b/datadog_api_client/v1/model/toplist_widget_stacked_type.py new file mode 100644 index 0000000000..7baf551e0a --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_stacked_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ToplistWidgetStackedType(ModelSimple): + """ + Top list widget stacked display type. + + :param value: If omitted defaults to "stacked". Must be one of ["stacked"]. + :type value: str + """ + + allowed_values = { + "stacked", + } + STACKED: ClassVar["ToplistWidgetStackedType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ToplistWidgetStackedType.STACKED = ToplistWidgetStackedType("stacked") diff --git a/datadog_api_client/v1/model/toplist_widget_style.py b/datadog_api_client/v1/model/toplist_widget_style.py new file mode 100644 index 0000000000..4d08b9dabd --- /dev/null +++ b/datadog_api_client/v1/model/toplist_widget_style.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.toplist_widget_display import ToplistWidgetDisplay + from datadog_api_client.v1.model.toplist_widget_scaling import ToplistWidgetScaling + from datadog_api_client.v1.model.toplist_widget_stacked import ToplistWidgetStacked + from datadog_api_client.v1.model.toplist_widget_flat import ToplistWidgetFlat + +class ToplistWidgetStyle(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.toplist_widget_display import ToplistWidgetDisplay + from datadog_api_client.v1.model.toplist_widget_scaling import ToplistWidgetScaling + return { + "display": (ToplistWidgetDisplay,), + "palette": (str,), + "scaling": (ToplistWidgetScaling,), + } + attribute_map = { + "display": "display", + "palette": "palette", + "scaling": "scaling", + } + + def __init__(self_, display: Union[ToplistWidgetDisplay, ToplistWidgetStacked, ToplistWidgetFlat, UnsetType]=unset, palette: Union[str, UnsetType]=unset, scaling: Union[ToplistWidgetScaling, UnsetType]=unset, **kwargs): + """ + Style customization for a top list widget. + + :param display: Top list widget display options. + :type display: ToplistWidgetDisplay, optional + + :param palette: Color palette to apply to the widget. + :type palette: str, optional + + :param scaling: Top list widget scaling definition. + :type scaling: ToplistWidgetScaling, optional + """ + if display is not unset: + kwargs["display"] = display + if palette is not unset: + kwargs["palette"] = palette + if scaling is not unset: + kwargs["scaling"] = scaling + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/topology_map_widget_definition.py b/datadog_api_client/v1/model/topology_map_widget_definition.py new file mode 100644 index 0000000000..006ad94f8a --- /dev/null +++ b/datadog_api_client/v1/model/topology_map_widget_definition.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TopologyMapWidgetDefinition(ModelComposed): + + + + def __init__(self, **kwargs): + """ + This widget displays a topology of nodes and edges for different data sources. It replaces the service map widget. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param requests: One Topology request. + :type requests: [TopologyRequestDataStreams] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the topology map widget. + :type type: TopologyMapWidgetDefinitionType + """ + 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.v1.model.topology_map_widget_definition_data_streams import TopologyMapWidgetDefinitionDataStreams + from datadog_api_client.v1.model.topology_map_widget_definition_service_map import TopologyMapWidgetDefinitionServiceMap + return { + "oneOf": [ + TopologyMapWidgetDefinitionDataStreams, + TopologyMapWidgetDefinitionServiceMap, + ], + } diff --git a/datadog_api_client/v1/model/topology_map_widget_definition_data_streams.py b/datadog_api_client/v1/model/topology_map_widget_definition_data_streams.py new file mode 100644 index 0000000000..4b374a8a85 --- /dev/null +++ b/datadog_api_client/v1/model/topology_map_widget_definition_data_streams.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.topology_request_data_streams import TopologyRequestDataStreams + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.topology_map_widget_definition_type import TopologyMapWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class TopologyMapWidgetDefinitionDataStreams(ModelNormal): + validations = { + "requests": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.topology_request_data_streams import TopologyRequestDataStreams + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.topology_map_widget_definition_type import TopologyMapWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "requests": ([TopologyRequestDataStreams],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (TopologyMapWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[TopologyRequestDataStreams], type: TopologyMapWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + Topology map widget backed by the data streams data source. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param requests: One Topology request. + :type requests: [TopologyRequestDataStreams] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the topology map widget. + :type type: TopologyMapWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/topology_map_widget_definition_service_map.py b/datadog_api_client/v1/model/topology_map_widget_definition_service_map.py new file mode 100644 index 0000000000..df4d28069f --- /dev/null +++ b/datadog_api_client/v1/model/topology_map_widget_definition_service_map.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.topology_request_service_map import TopologyRequestServiceMap + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.topology_map_widget_definition_type import TopologyMapWidgetDefinitionType + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class TopologyMapWidgetDefinitionServiceMap(ModelNormal): + validations = { + "requests": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.topology_request_service_map import TopologyRequestServiceMap + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.topology_map_widget_definition_type import TopologyMapWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "requests": ([TopologyRequestServiceMap],), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (TopologyMapWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "description": "description", + "requests": "requests", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[TopologyRequestServiceMap], type: TopologyMapWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + Topology map widget backed by the service map data source. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param requests: One Topology request. + :type requests: [TopologyRequestServiceMap] + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the topology map widget. + :type type: TopologyMapWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/topology_map_widget_definition_type.py b/datadog_api_client/v1/model/topology_map_widget_definition_type.py new file mode 100644 index 0000000000..ce43954fa1 --- /dev/null +++ b/datadog_api_client/v1/model/topology_map_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TopologyMapWidgetDefinitionType(ModelSimple): + """ + Type of the topology map widget. + + :param value: If omitted defaults to "topology_map". Must be one of ["topology_map"]. + :type value: str + """ + + allowed_values = { + "topology_map", + } + TOPOLOGY_MAP: ClassVar["TopologyMapWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TopologyMapWidgetDefinitionType.TOPOLOGY_MAP = TopologyMapWidgetDefinitionType("topology_map") diff --git a/datadog_api_client/v1/model/topology_query_data_streams.py b/datadog_api_client/v1/model/topology_query_data_streams.py new file mode 100644 index 0000000000..02f8c6053c --- /dev/null +++ b/datadog_api_client/v1/model/topology_query_data_streams.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.topology_query_data_streams_data_source import TopologyQueryDataStreamsDataSource + +class TopologyQueryDataStreams(ModelNormal): + validations = { + "filters": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.topology_query_data_streams_data_source import TopologyQueryDataStreamsDataSource + return { + "data_source": (TopologyQueryDataStreamsDataSource,), + "filters": ([str],), + "query_string": (str,), + "service": (str,), + } + attribute_map = { + "data_source": "data_source", + "filters": "filters", + "query_string": "query_string", + "service": "service", + } + + def __init__(self_, data_source: TopologyQueryDataStreamsDataSource, filters: List[str], service: str, query_string: Union[str, UnsetType]=unset, **kwargs): + """ + Query to the data streams topology data source. + + :param data_source: Name of the data source. + :type data_source: TopologyQueryDataStreamsDataSource + + :param filters: Your environment and primary tag (or * if enabled for your account). + :type filters: [str] + + :param query_string: A search string for filtering services. When set, this replaces the ``service`` field. + :type query_string: str, optional + + :param service: (deprecated) Name of the service. Leave this empty and use query_string instead. + :type service: str + """ + if query_string is not unset: + kwargs["query_string"] = query_string + super().__init__(kwargs) + + + self_.data_source = data_source + self_.filters = filters + self_.service = service diff --git a/datadog_api_client/v1/model/topology_query_data_streams_data_source.py b/datadog_api_client/v1/model/topology_query_data_streams_data_source.py new file mode 100644 index 0000000000..5dda47b107 --- /dev/null +++ b/datadog_api_client/v1/model/topology_query_data_streams_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TopologyQueryDataStreamsDataSource(ModelSimple): + """ + Name of the data source. + + :param value: If omitted defaults to "data_streams". Must be one of ["data_streams"]. + :type value: str + """ + + allowed_values = { + "data_streams", + } + DATA_STREAMS: ClassVar["TopologyQueryDataStreamsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TopologyQueryDataStreamsDataSource.DATA_STREAMS = TopologyQueryDataStreamsDataSource("data_streams") diff --git a/datadog_api_client/v1/model/topology_query_service_map.py b/datadog_api_client/v1/model/topology_query_service_map.py new file mode 100644 index 0000000000..2f44cc2da8 --- /dev/null +++ b/datadog_api_client/v1/model/topology_query_service_map.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.topology_query_service_map_data_source import TopologyQueryServiceMapDataSource + +class TopologyQueryServiceMap(ModelNormal): + validations = { + "filters": { + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.topology_query_service_map_data_source import TopologyQueryServiceMapDataSource + return { + "data_source": (TopologyQueryServiceMapDataSource,), + "filters": ([str],), + "query_string": (str,), + "service": (str,), + } + attribute_map = { + "data_source": "data_source", + "filters": "filters", + "query_string": "query_string", + "service": "service", + } + + def __init__(self_, data_source: TopologyQueryServiceMapDataSource, filters: List[str], service: str, query_string: Union[str, UnsetType]=unset, **kwargs): + """ + Query to the service map topology data source. + + :param data_source: Name of the data source. + :type data_source: TopologyQueryServiceMapDataSource + + :param filters: Your environment and primary tag (or * if enabled for your account). + :type filters: [str] + + :param query_string: A search string for filtering services. When set, this replaces the ``service`` field. + :type query_string: str, optional + + :param service: (deprecated) Name of the service. Leave this empty and use query_string instead. + :type service: str + """ + if query_string is not unset: + kwargs["query_string"] = query_string + super().__init__(kwargs) + + + self_.data_source = data_source + self_.filters = filters + self_.service = service diff --git a/datadog_api_client/v1/model/topology_query_service_map_data_source.py b/datadog_api_client/v1/model/topology_query_service_map_data_source.py new file mode 100644 index 0000000000..f0c1b62775 --- /dev/null +++ b/datadog_api_client/v1/model/topology_query_service_map_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TopologyQueryServiceMapDataSource(ModelSimple): + """ + Name of the data source. + + :param value: If omitted defaults to "service_map". Must be one of ["service_map"]. + :type value: str + """ + + allowed_values = { + "service_map", + } + SERVICE_MAP: ClassVar["TopologyQueryServiceMapDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TopologyQueryServiceMapDataSource.SERVICE_MAP = TopologyQueryServiceMapDataSource("service_map") diff --git a/datadog_api_client/v1/model/topology_request_data_streams.py b/datadog_api_client/v1/model/topology_request_data_streams.py new file mode 100644 index 0000000000..b84d622299 --- /dev/null +++ b/datadog_api_client/v1/model/topology_request_data_streams.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.topology_query_data_streams import TopologyQueryDataStreams + from datadog_api_client.v1.model.topology_request_type import TopologyRequestType + +class TopologyRequestDataStreams(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.topology_query_data_streams import TopologyQueryDataStreams + from datadog_api_client.v1.model.topology_request_type import TopologyRequestType + return { + "query": (TopologyQueryDataStreams,), + "request_type": (TopologyRequestType,), + } + attribute_map = { + "query": "query", + "request_type": "request_type", + } + + def __init__(self_, query: Union[TopologyQueryDataStreams, UnsetType]=unset, request_type: Union[TopologyRequestType, UnsetType]=unset, **kwargs): + """ + Request that returns nodes and edges from the data streams data source. + + :param query: Query to the data streams topology data source. + :type query: TopologyQueryDataStreams, optional + + :param request_type: Widget request type. + :type request_type: TopologyRequestType, optional + """ + if query is not unset: + kwargs["query"] = query + if request_type is not unset: + kwargs["request_type"] = request_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/topology_request_service_map.py b/datadog_api_client/v1/model/topology_request_service_map.py new file mode 100644 index 0000000000..f057edaf8b --- /dev/null +++ b/datadog_api_client/v1/model/topology_request_service_map.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.topology_query_service_map import TopologyQueryServiceMap + from datadog_api_client.v1.model.topology_request_type import TopologyRequestType + +class TopologyRequestServiceMap(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.topology_query_service_map import TopologyQueryServiceMap + from datadog_api_client.v1.model.topology_request_type import TopologyRequestType + return { + "query": (TopologyQueryServiceMap,), + "request_type": (TopologyRequestType,), + } + attribute_map = { + "query": "query", + "request_type": "request_type", + } + + def __init__(self_, query: Union[TopologyQueryServiceMap, UnsetType]=unset, request_type: Union[TopologyRequestType, UnsetType]=unset, **kwargs): + """ + Request that returns nodes and edges from the service map data source. + + :param query: Query to the service map topology data source. + :type query: TopologyQueryServiceMap, optional + + :param request_type: Widget request type. + :type request_type: TopologyRequestType, optional + """ + if query is not unset: + kwargs["query"] = query + if request_type is not unset: + kwargs["request_type"] = request_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/topology_request_type.py b/datadog_api_client/v1/model/topology_request_type.py new file mode 100644 index 0000000000..4a88475c7e --- /dev/null +++ b/datadog_api_client/v1/model/topology_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TopologyRequestType(ModelSimple): + """ + Widget request type. + + :param value: If omitted defaults to "topology". Must be one of ["topology"]. + :type value: str + """ + + allowed_values = { + "topology", + } + TOPOLOGY: ClassVar["TopologyRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TopologyRequestType.TOPOLOGY = TopologyRequestType("topology") diff --git a/datadog_api_client/v1/model/tree_map_color_by.py b/datadog_api_client/v1/model/tree_map_color_by.py new file mode 100644 index 0000000000..8e31d5b850 --- /dev/null +++ b/datadog_api_client/v1/model/tree_map_color_by.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TreeMapColorBy(ModelSimple): + """ + (deprecated) The attribute formerly used to determine color in the widget. + + :param value: If omitted defaults to "user". Must be one of ["user"]. + :type value: str + """ + + allowed_values = { + "user", + } + USER: ClassVar["TreeMapColorBy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TreeMapColorBy.USER = TreeMapColorBy("user") diff --git a/datadog_api_client/v1/model/tree_map_group_by.py b/datadog_api_client/v1/model/tree_map_group_by.py new file mode 100644 index 0000000000..de7839a4ac --- /dev/null +++ b/datadog_api_client/v1/model/tree_map_group_by.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TreeMapGroupBy(ModelSimple): + """ + (deprecated) The attribute formerly used to group elements in the widget. + + :param value: Must be one of ["user", "family", "process"]. + :type value: str + """ + + allowed_values = { + "user", + "family", + "process", + } + USER: ClassVar["TreeMapGroupBy"] + FAMILY: ClassVar["TreeMapGroupBy"] + PROCESS: ClassVar["TreeMapGroupBy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TreeMapGroupBy.USER = TreeMapGroupBy("user") +TreeMapGroupBy.FAMILY = TreeMapGroupBy("family") +TreeMapGroupBy.PROCESS = TreeMapGroupBy("process") diff --git a/datadog_api_client/v1/model/tree_map_size_by.py b/datadog_api_client/v1/model/tree_map_size_by.py new file mode 100644 index 0000000000..97e04f48fd --- /dev/null +++ b/datadog_api_client/v1/model/tree_map_size_by.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TreeMapSizeBy(ModelSimple): + """ + (deprecated) The attribute formerly used to determine size in the widget. + + :param value: Must be one of ["pct_cpu", "pct_mem"]. + :type value: str + """ + + allowed_values = { + "pct_cpu", + "pct_mem", + } + PCT_CPU: ClassVar["TreeMapSizeBy"] + PCT_MEM: ClassVar["TreeMapSizeBy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TreeMapSizeBy.PCT_CPU = TreeMapSizeBy("pct_cpu") +TreeMapSizeBy.PCT_MEM = TreeMapSizeBy("pct_mem") diff --git a/datadog_api_client/v1/model/tree_map_widget_definition.py b/datadog_api_client/v1/model/tree_map_widget_definition.py new file mode 100644 index 0000000000..48bd0a4f31 --- /dev/null +++ b/datadog_api_client/v1/model/tree_map_widget_definition.py @@ -0,0 +1,139 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.tree_map_color_by import TreeMapColorBy + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.tree_map_group_by import TreeMapGroupBy + from datadog_api_client.v1.model.tree_map_widget_request import TreeMapWidgetRequest + from datadog_api_client.v1.model.tree_map_size_by import TreeMapSizeBy + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.tree_map_widget_definition_type import TreeMapWidgetDefinitionType + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class TreeMapWidgetDefinition(ModelNormal): + validations = { + "requests": { + "max_items": 1, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.tree_map_color_by import TreeMapColorBy + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.tree_map_group_by import TreeMapGroupBy + from datadog_api_client.v1.model.tree_map_widget_request import TreeMapWidgetRequest + from datadog_api_client.v1.model.tree_map_size_by import TreeMapSizeBy + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.tree_map_widget_definition_type import TreeMapWidgetDefinitionType + return { + "color_by": (TreeMapColorBy,), + "custom_links": ([WidgetCustomLink],), + "description": (str,), + "group_by": (TreeMapGroupBy,), + "requests": ([TreeMapWidgetRequest],), + "size_by": (TreeMapSizeBy,), + "time": (WidgetTime,), + "title": (str,), + "type": (TreeMapWidgetDefinitionType,), + } + attribute_map = { + "color_by": "color_by", + "custom_links": "custom_links", + "description": "description", + "group_by": "group_by", + "requests": "requests", + "size_by": "size_by", + "time": "time", + "title": "title", + "type": "type", + } + + def __init__(self_, requests: List[TreeMapWidgetRequest], type: TreeMapWidgetDefinitionType, color_by: Union[TreeMapColorBy, UnsetType]=unset, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, description: Union[str, UnsetType]=unset, group_by: Union[TreeMapGroupBy, UnsetType]=unset, size_by: Union[TreeMapSizeBy, UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + The treemap visualization enables you to display hierarchical and nested data. It is well suited for queries that describe part-whole relationships, such as resource usage by availability zone, data center, or team. + + :param color_by: (deprecated) The attribute formerly used to determine color in the widget. **Deprecated**. + :type color_by: TreeMapColorBy, optional + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param description: The description of the widget. + :type description: str, optional + + :param group_by: (deprecated) The attribute formerly used to group elements in the widget. **Deprecated**. + :type group_by: TreeMapGroupBy, optional + + :param requests: List of treemap widget requests. + :type requests: [TreeMapWidgetRequest] + + :param size_by: (deprecated) The attribute formerly used to determine size in the widget. **Deprecated**. + :type size_by: TreeMapSizeBy, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of your widget. + :type title: str, optional + + :param type: Type of the treemap widget. + :type type: TreeMapWidgetDefinitionType + """ + if color_by is not unset: + kwargs["color_by"] = color_by + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if description is not unset: + kwargs["description"] = description + if group_by is not unset: + kwargs["group_by"] = group_by + if size_by is not unset: + kwargs["size_by"] = size_by + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + + self_.requests = requests + self_.type = type diff --git a/datadog_api_client/v1/model/tree_map_widget_definition_type.py b/datadog_api_client/v1/model/tree_map_widget_definition_type.py new file mode 100644 index 0000000000..4d24e7633e --- /dev/null +++ b/datadog_api_client/v1/model/tree_map_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TreeMapWidgetDefinitionType(ModelSimple): + """ + Type of the treemap widget. + + :param value: If omitted defaults to "treemap". Must be one of ["treemap"]. + :type value: str + """ + + allowed_values = { + "treemap", + } + TREEMAP: ClassVar["TreeMapWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TreeMapWidgetDefinitionType.TREEMAP = TreeMapWidgetDefinitionType("treemap") diff --git a/datadog_api_client/v1/model/tree_map_widget_request.py b/datadog_api_client/v1/model/tree_map_widget_request.py new file mode 100644 index 0000000000..d6f7d98363 --- /dev/null +++ b/datadog_api_client/v1/model/tree_map_widget_request.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition + from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition + from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition + from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition + from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition + from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition + from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition + from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + +class TreeMapWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_formula import WidgetFormula + from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition + from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat + from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy + from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle + return { + "formulas": ([WidgetFormula],), + "q": (str,), + "queries": ([FormulaAndFunctionQueryDefinition],), + "response_format": (FormulaAndFunctionResponseFormat,), + "sort": (WidgetSortBy,), + "style": (WidgetRequestStyle,), + } + attribute_map = { + "formulas": "formulas", + "q": "q", + "queries": "queries", + "response_format": "response_format", + "sort": "sort", + "style": "style", + } + + def __init__(self_, formulas: Union[List[WidgetFormula], UnsetType]=unset, q: Union[str, UnsetType]=unset, queries: Union[List[Union[FormulaAndFunctionQueryDefinition, FormulaAndFunctionMetricQueryDefinition, FormulaAndFunctionEventQueryDefinition, FormulaAndFunctionProcessQueryDefinition, FormulaAndFunctionApmDependencyStatsQueryDefinition, FormulaAndFunctionApmResourceStatsQueryDefinition, FormulaAndFunctionApmMetricsQueryDefinition, FormulaAndFunctionSLOQueryDefinition, FormulaAndFunctionCloudCostQueryDefinition, FormulaAndFunctionProductAnalyticsExtendedQueryDefinition, FormulaAndFunctionUserJourneyQueryDefinition, FormulaAndFunctionRetentionQueryDefinition]], UnsetType]=unset, response_format: Union[FormulaAndFunctionResponseFormat, UnsetType]=unset, sort: Union[WidgetSortBy, UnsetType]=unset, style: Union[WidgetRequestStyle, UnsetType]=unset, **kwargs): + """ + An updated treemap widget. + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param q: The widget metrics query. Deprecated - Use ``queries`` and ``formulas`` instead. **Deprecated**. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param sort: The controls for sorting the widget. + :type sort: WidgetSortBy, optional + + :param style: Define request widget style. + :type style: WidgetRequestStyle, optional + """ + if formulas is not unset: + kwargs["formulas"] = formulas + if q is not unset: + kwargs["q"] = q + if queries is not unset: + kwargs["queries"] = queries + if response_format is not unset: + kwargs["response_format"] = response_format + if sort is not unset: + kwargs["sort"] = sort + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_analyzed_logs_hour.py b/datadog_api_client/v1/model/usage_analyzed_logs_hour.py new file mode 100644 index 0000000000..a7df6c3edd --- /dev/null +++ b/datadog_api_client/v1/model/usage_analyzed_logs_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageAnalyzedLogsHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "analyzed_logs": (int, none_type), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "analyzed_logs": "analyzed_logs", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, analyzed_logs: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + The number of analyzed logs for each hour for a given organization. + + :param analyzed_logs: Contains the number of analyzed logs. + :type analyzed_logs: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if analyzed_logs is not unset: + kwargs["analyzed_logs"] = analyzed_logs + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_analyzed_logs_response.py b/datadog_api_client/v1/model/usage_analyzed_logs_response.py new file mode 100644 index 0000000000..fa97438245 --- /dev/null +++ b/datadog_api_client/v1/model/usage_analyzed_logs_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_analyzed_logs_hour import UsageAnalyzedLogsHour + +class UsageAnalyzedLogsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_analyzed_logs_hour import UsageAnalyzedLogsHour + return { + "usage": ([UsageAnalyzedLogsHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageAnalyzedLogsHour], UnsetType]=unset, **kwargs): + """ + A response containing the number of analyzed logs for each hour for a given organization. + + :param usage: Get hourly usage for analyzed logs. + :type usage: [UsageAnalyzedLogsHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_attribution_aggregates.py b/datadog_api_client/v1/model/usage_attribution_aggregates.py new file mode 100644 index 0000000000..c786d49acf --- /dev/null +++ b/datadog_api_client/v1/model/usage_attribution_aggregates.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageAttributionAggregates(ModelSimple): + """ + An array of available aggregates. + + + :type value: [UsageAttributionAggregatesBody] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_attribution_aggregates_body import UsageAttributionAggregatesBody + return { + "value": ([UsageAttributionAggregatesBody],), + } diff --git a/datadog_api_client/v1/model/usage_attribution_aggregates_body.py b/datadog_api_client/v1/model/usage_attribution_aggregates_body.py new file mode 100644 index 0000000000..e2737a298e --- /dev/null +++ b/datadog_api_client/v1/model/usage_attribution_aggregates_body.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageAttributionAggregatesBody(ModelNormal): + @cached_property + def openapi_types(_): + return { + "agg_type": (str,), + "field": (str,), + "value": (float,), + } + attribute_map = { + "agg_type": "agg_type", + "field": "field", + "value": "value", + } + + def __init__(self_, agg_type: Union[str, UnsetType]=unset, field: Union[str, UnsetType]=unset, value: Union[float, UnsetType]=unset, **kwargs): + """ + The object containing the aggregates. + + :param agg_type: The aggregate type. + :type agg_type: str, optional + + :param field: The field. + :type field: str, optional + + :param value: The value for a given field. + :type value: float, optional + """ + if agg_type is not unset: + kwargs["agg_type"] = agg_type + if field is not unset: + kwargs["field"] = field + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_attribution_tag_names.py b/datadog_api_client/v1/model/usage_attribution_tag_names.py new file mode 100644 index 0000000000..a0699f3b0c --- /dev/null +++ b/datadog_api_client/v1/model/usage_attribution_tag_names.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageAttributionTagNames(ModelNormal): + @cached_property + def additional_properties_type(_): + return ([str],) + _nullable = True + + def __init__(self_, **kwargs): + """ + Tag keys and values. + + A ``null`` value here means that the requested tag breakdown cannot be applied because it does not match the `tags + configured for usage attribution `_. + In this scenario the API returns the total usage, not broken down by tags. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_audit_logs_hour.py b/datadog_api_client/v1/model/usage_audit_logs_hour.py new file mode 100644 index 0000000000..9d0fc132c6 --- /dev/null +++ b/datadog_api_client/v1/model/usage_audit_logs_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageAuditLogsHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "lines_indexed": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "hour": "hour", + "lines_indexed": "lines_indexed", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, lines_indexed: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Audit logs usage for a given organization for a given hour. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param lines_indexed: The total number of audit logs lines indexed during a given hour. + :type lines_indexed: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if lines_indexed is not unset: + kwargs["lines_indexed"] = lines_indexed + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_audit_logs_response.py b/datadog_api_client/v1/model/usage_audit_logs_response.py new file mode 100644 index 0000000000..4a921f5e48 --- /dev/null +++ b/datadog_api_client/v1/model/usage_audit_logs_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_audit_logs_hour import UsageAuditLogsHour + +class UsageAuditLogsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_audit_logs_hour import UsageAuditLogsHour + return { + "usage": ([UsageAuditLogsHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageAuditLogsHour], UnsetType]=unset, **kwargs): + """ + Response containing the audit logs usage for each hour for a given organization. + + :param usage: Get hourly usage for audit logs. + :type usage: [UsageAuditLogsHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_billable_summary_body.py b/datadog_api_client/v1/model/usage_billable_summary_body.py new file mode 100644 index 0000000000..20413bd012 --- /dev/null +++ b/datadog_api_client/v1/model/usage_billable_summary_body.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageBillableSummaryBody(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_billable_usage": (int,), + "account_committed_usage": (int,), + "account_on_demand_usage": (int,), + "elapsed_usage_hours": (int,), + "first_billable_usage_hour": (datetime,), + "last_billable_usage_hour": (datetime,), + "org_billable_usage": (int,), + "percentage_in_account": (float,), + "usage_unit": (str,), + } + attribute_map = { + "account_billable_usage": "account_billable_usage", + "account_committed_usage": "account_committed_usage", + "account_on_demand_usage": "account_on_demand_usage", + "elapsed_usage_hours": "elapsed_usage_hours", + "first_billable_usage_hour": "first_billable_usage_hour", + "last_billable_usage_hour": "last_billable_usage_hour", + "org_billable_usage": "org_billable_usage", + "percentage_in_account": "percentage_in_account", + "usage_unit": "usage_unit", + } + + def __init__(self_, account_billable_usage: Union[int, UnsetType]=unset, account_committed_usage: Union[int, UnsetType]=unset, account_on_demand_usage: Union[int, UnsetType]=unset, elapsed_usage_hours: Union[int, UnsetType]=unset, first_billable_usage_hour: Union[datetime, UnsetType]=unset, last_billable_usage_hour: Union[datetime, UnsetType]=unset, org_billable_usage: Union[int, UnsetType]=unset, percentage_in_account: Union[float, UnsetType]=unset, usage_unit: Union[str, UnsetType]=unset, **kwargs): + """ + Response with properties for each aggregated usage type. + + :param account_billable_usage: The total account usage. + :type account_billable_usage: int, optional + + :param account_committed_usage: The total account committed usage. + :type account_committed_usage: int, optional + + :param account_on_demand_usage: The total account on-demand usage. + :type account_on_demand_usage: int, optional + + :param elapsed_usage_hours: Elapsed usage hours for some billable product. + :type elapsed_usage_hours: int, optional + + :param first_billable_usage_hour: The first billable hour for the org. + :type first_billable_usage_hour: datetime, optional + + :param last_billable_usage_hour: The last billable hour for the org. + :type last_billable_usage_hour: datetime, optional + + :param org_billable_usage: The number of units used within the billable timeframe. + :type org_billable_usage: int, optional + + :param percentage_in_account: The percentage of account usage the org represents. + :type percentage_in_account: float, optional + + :param usage_unit: Units pertaining to the usage. + :type usage_unit: str, optional + """ + if account_billable_usage is not unset: + kwargs["account_billable_usage"] = account_billable_usage + if account_committed_usage is not unset: + kwargs["account_committed_usage"] = account_committed_usage + if account_on_demand_usage is not unset: + kwargs["account_on_demand_usage"] = account_on_demand_usage + if elapsed_usage_hours is not unset: + kwargs["elapsed_usage_hours"] = elapsed_usage_hours + if first_billable_usage_hour is not unset: + kwargs["first_billable_usage_hour"] = first_billable_usage_hour + if last_billable_usage_hour is not unset: + kwargs["last_billable_usage_hour"] = last_billable_usage_hour + if org_billable_usage is not unset: + kwargs["org_billable_usage"] = org_billable_usage + if percentage_in_account is not unset: + kwargs["percentage_in_account"] = percentage_in_account + if usage_unit is not unset: + kwargs["usage_unit"] = usage_unit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_billable_summary_hour.py b/datadog_api_client/v1/model/usage_billable_summary_hour.py new file mode 100644 index 0000000000..5cece17334 --- /dev/null +++ b/datadog_api_client/v1/model/usage_billable_summary_hour.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_billable_summary_keys import UsageBillableSummaryKeys + +class UsageBillableSummaryHour(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_billable_summary_keys import UsageBillableSummaryKeys + return { + "account_name": (str,), + "account_public_id": (str,), + "billing_plan": (str,), + "end_date": (datetime,), + "num_orgs": (int,), + "org_name": (str,), + "public_id": (str,), + "ratio_in_month": (float,), + "region": (str,), + "start_date": (datetime,), + "usage": (UsageBillableSummaryKeys,), + } + attribute_map = { + "account_name": "account_name", + "account_public_id": "account_public_id", + "billing_plan": "billing_plan", + "end_date": "end_date", + "num_orgs": "num_orgs", + "org_name": "org_name", + "public_id": "public_id", + "ratio_in_month": "ratio_in_month", + "region": "region", + "start_date": "start_date", + "usage": "usage", + } + + def __init__(self_, account_name: Union[str, UnsetType]=unset, account_public_id: Union[str, UnsetType]=unset, billing_plan: Union[str, UnsetType]=unset, end_date: Union[datetime, UnsetType]=unset, num_orgs: Union[int, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, ratio_in_month: Union[float, UnsetType]=unset, region: Union[str, UnsetType]=unset, start_date: Union[datetime, UnsetType]=unset, usage: Union[UsageBillableSummaryKeys, UnsetType]=unset, **kwargs): + """ + Response with monthly summary of data billed by Datadog. + + :param account_name: The account name. + :type account_name: str, optional + + :param account_public_id: The account public ID. + :type account_public_id: str, optional + + :param billing_plan: The billing plan (metadata). (Deprecated from June 2026) **Deprecated**. + :type billing_plan: str, optional + + :param end_date: Shows the last date of usage. + :type end_date: datetime, optional + + :param num_orgs: The number of organizations. + :type num_orgs: int, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param ratio_in_month: Shows usage aggregation for a billing period. + :type ratio_in_month: float, optional + + :param region: The region of the organization. + :type region: str, optional + + :param start_date: Shows the first date of usage. + :type start_date: datetime, optional + + :param usage: Response with aggregated usage types. + :type usage: UsageBillableSummaryKeys, optional + """ + if account_name is not unset: + kwargs["account_name"] = account_name + if account_public_id is not unset: + kwargs["account_public_id"] = account_public_id + if billing_plan is not unset: + kwargs["billing_plan"] = billing_plan + if end_date is not unset: + kwargs["end_date"] = end_date + if num_orgs is not unset: + kwargs["num_orgs"] = num_orgs + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if ratio_in_month is not unset: + kwargs["ratio_in_month"] = ratio_in_month + if region is not unset: + kwargs["region"] = region + if start_date is not unset: + kwargs["start_date"] = start_date + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_billable_summary_keys.py b/datadog_api_client/v1/model/usage_billable_summary_keys.py new file mode 100644 index 0000000000..43cd801e6d --- /dev/null +++ b/datadog_api_client/v1/model/usage_billable_summary_keys.py @@ -0,0 +1,665 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_billable_summary_body import UsageBillableSummaryBody + +class UsageBillableSummaryKeys(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_billable_summary_body import UsageBillableSummaryBody + return { + "apm_fargate_average": (UsageBillableSummaryBody,), + "apm_fargate_sum": (UsageBillableSummaryBody,), + "apm_host_sum": (UsageBillableSummaryBody,), + "apm_host_top99p": (UsageBillableSummaryBody,), + "apm_profiler_host_sum": (UsageBillableSummaryBody,), + "apm_profiler_host_top99p": (UsageBillableSummaryBody,), + "apm_trace_search_sum": (UsageBillableSummaryBody,), + "application_security_fargate_average": (UsageBillableSummaryBody,), + "application_security_host_sum": (UsageBillableSummaryBody,), + "application_security_host_top99p": (UsageBillableSummaryBody,), + "ci_pipeline_indexed_spans_sum": (UsageBillableSummaryBody,), + "ci_pipeline_maximum": (UsageBillableSummaryBody,), + "ci_pipeline_sum": (UsageBillableSummaryBody,), + "ci_test_indexed_spans_sum": (UsageBillableSummaryBody,), + "ci_testing_maximum": (UsageBillableSummaryBody,), + "ci_testing_sum": (UsageBillableSummaryBody,), + "cloud_cost_management_average": (UsageBillableSummaryBody,), + "cloud_cost_management_sum": (UsageBillableSummaryBody,), + "cspm_container_sum": (UsageBillableSummaryBody,), + "cspm_host_sum": (UsageBillableSummaryBody,), + "cspm_host_top99p": (UsageBillableSummaryBody,), + "custom_event_sum": (UsageBillableSummaryBody,), + "cws_container_sum": (UsageBillableSummaryBody,), + "cws_host_sum": (UsageBillableSummaryBody,), + "cws_host_top99p": (UsageBillableSummaryBody,), + "dbm_host_sum": (UsageBillableSummaryBody,), + "dbm_host_top99p": (UsageBillableSummaryBody,), + "dbm_normalized_queries_average": (UsageBillableSummaryBody,), + "dbm_normalized_queries_sum": (UsageBillableSummaryBody,), + "fargate_container_apm_and_profiler_average": (UsageBillableSummaryBody,), + "fargate_container_apm_and_profiler_sum": (UsageBillableSummaryBody,), + "fargate_container_average": (UsageBillableSummaryBody,), + "fargate_container_profiler_average": (UsageBillableSummaryBody,), + "fargate_container_profiler_sum": (UsageBillableSummaryBody,), + "fargate_container_sum": (UsageBillableSummaryBody,), + "incident_management_maximum": (UsageBillableSummaryBody,), + "incident_management_sum": (UsageBillableSummaryBody,), + "infra_and_apm_host_sum": (UsageBillableSummaryBody,), + "infra_and_apm_host_top99p": (UsageBillableSummaryBody,), + "infra_container_sum": (UsageBillableSummaryBody,), + "infra_host_sum": (UsageBillableSummaryBody,), + "infra_host_top99p": (UsageBillableSummaryBody,), + "ingested_spans_sum": (UsageBillableSummaryBody,), + "ingested_timeseries_average": (UsageBillableSummaryBody,), + "ingested_timeseries_sum": (UsageBillableSummaryBody,), + "iot_sum": (UsageBillableSummaryBody,), + "iot_top99p": (UsageBillableSummaryBody,), + "lambda_function_average": (UsageBillableSummaryBody,), + "lambda_function_sum": (UsageBillableSummaryBody,), + "logs_forwarding_sum": (UsageBillableSummaryBody,), + "logs_indexed_15day_sum": (UsageBillableSummaryBody,), + "logs_indexed_180day_sum": (UsageBillableSummaryBody,), + "logs_indexed_1day_sum": (UsageBillableSummaryBody,), + "logs_indexed_30day_sum": (UsageBillableSummaryBody,), + "logs_indexed_360day_sum": (UsageBillableSummaryBody,), + "logs_indexed_3day_sum": (UsageBillableSummaryBody,), + "logs_indexed_45day_sum": (UsageBillableSummaryBody,), + "logs_indexed_60day_sum": (UsageBillableSummaryBody,), + "logs_indexed_7day_sum": (UsageBillableSummaryBody,), + "logs_indexed_90day_sum": (UsageBillableSummaryBody,), + "logs_indexed_custom_retention_sum": (UsageBillableSummaryBody,), + "logs_indexed_sum": (UsageBillableSummaryBody,), + "logs_ingested_sum": (UsageBillableSummaryBody,), + "network_device_sum": (UsageBillableSummaryBody,), + "network_device_top99p": (UsageBillableSummaryBody,), + "npm_flow_sum": (UsageBillableSummaryBody,), + "npm_host_sum": (UsageBillableSummaryBody,), + "npm_host_top99p": (UsageBillableSummaryBody,), + "observability_pipeline_sum": (UsageBillableSummaryBody,), + "online_archive_sum": (UsageBillableSummaryBody,), + "prof_container_sum": (UsageBillableSummaryBody,), + "prof_host_sum": (UsageBillableSummaryBody,), + "prof_host_top99p": (UsageBillableSummaryBody,), + "rum_lite_sum": (UsageBillableSummaryBody,), + "rum_replay_sum": (UsageBillableSummaryBody,), + "rum_sum": (UsageBillableSummaryBody,), + "rum_units_sum": (UsageBillableSummaryBody,), + "sensitive_data_scanner_sum": (UsageBillableSummaryBody,), + "serverless_apm_sum": (UsageBillableSummaryBody,), + "serverless_infra_average": (UsageBillableSummaryBody,), + "serverless_infra_sum": (UsageBillableSummaryBody,), + "serverless_invocation_sum": (UsageBillableSummaryBody,), + "siem_sum": (UsageBillableSummaryBody,), + "standard_timeseries_average": (UsageBillableSummaryBody,), + "synthetics_api_tests_sum": (UsageBillableSummaryBody,), + "synthetics_app_testing_maximum": (UsageBillableSummaryBody,), + "synthetics_browser_checks_sum": (UsageBillableSummaryBody,), + "timeseries_average": (UsageBillableSummaryBody,), + "timeseries_sum": (UsageBillableSummaryBody,), + } + attribute_map = { + "apm_fargate_average": "apm_fargate_average", + "apm_fargate_sum": "apm_fargate_sum", + "apm_host_sum": "apm_host_sum", + "apm_host_top99p": "apm_host_top99p", + "apm_profiler_host_sum": "apm_profiler_host_sum", + "apm_profiler_host_top99p": "apm_profiler_host_top99p", + "apm_trace_search_sum": "apm_trace_search_sum", + "application_security_fargate_average": "application_security_fargate_average", + "application_security_host_sum": "application_security_host_sum", + "application_security_host_top99p": "application_security_host_top99p", + "ci_pipeline_indexed_spans_sum": "ci_pipeline_indexed_spans_sum", + "ci_pipeline_maximum": "ci_pipeline_maximum", + "ci_pipeline_sum": "ci_pipeline_sum", + "ci_test_indexed_spans_sum": "ci_test_indexed_spans_sum", + "ci_testing_maximum": "ci_testing_maximum", + "ci_testing_sum": "ci_testing_sum", + "cloud_cost_management_average": "cloud_cost_management_average", + "cloud_cost_management_sum": "cloud_cost_management_sum", + "cspm_container_sum": "cspm_container_sum", + "cspm_host_sum": "cspm_host_sum", + "cspm_host_top99p": "cspm_host_top99p", + "custom_event_sum": "custom_event_sum", + "cws_container_sum": "cws_container_sum", + "cws_host_sum": "cws_host_sum", + "cws_host_top99p": "cws_host_top99p", + "dbm_host_sum": "dbm_host_sum", + "dbm_host_top99p": "dbm_host_top99p", + "dbm_normalized_queries_average": "dbm_normalized_queries_average", + "dbm_normalized_queries_sum": "dbm_normalized_queries_sum", + "fargate_container_apm_and_profiler_average": "fargate_container_apm_and_profiler_average", + "fargate_container_apm_and_profiler_sum": "fargate_container_apm_and_profiler_sum", + "fargate_container_average": "fargate_container_average", + "fargate_container_profiler_average": "fargate_container_profiler_average", + "fargate_container_profiler_sum": "fargate_container_profiler_sum", + "fargate_container_sum": "fargate_container_sum", + "incident_management_maximum": "incident_management_maximum", + "incident_management_sum": "incident_management_sum", + "infra_and_apm_host_sum": "infra_and_apm_host_sum", + "infra_and_apm_host_top99p": "infra_and_apm_host_top99p", + "infra_container_sum": "infra_container_sum", + "infra_host_sum": "infra_host_sum", + "infra_host_top99p": "infra_host_top99p", + "ingested_spans_sum": "ingested_spans_sum", + "ingested_timeseries_average": "ingested_timeseries_average", + "ingested_timeseries_sum": "ingested_timeseries_sum", + "iot_sum": "iot_sum", + "iot_top99p": "iot_top99p", + "lambda_function_average": "lambda_function_average", + "lambda_function_sum": "lambda_function_sum", + "logs_forwarding_sum": "logs_forwarding_sum", + "logs_indexed_15day_sum": "logs_indexed_15day_sum", + "logs_indexed_180day_sum": "logs_indexed_180day_sum", + "logs_indexed_1day_sum": "logs_indexed_1day_sum", + "logs_indexed_30day_sum": "logs_indexed_30day_sum", + "logs_indexed_360day_sum": "logs_indexed_360day_sum", + "logs_indexed_3day_sum": "logs_indexed_3day_sum", + "logs_indexed_45day_sum": "logs_indexed_45day_sum", + "logs_indexed_60day_sum": "logs_indexed_60day_sum", + "logs_indexed_7day_sum": "logs_indexed_7day_sum", + "logs_indexed_90day_sum": "logs_indexed_90day_sum", + "logs_indexed_custom_retention_sum": "logs_indexed_custom_retention_sum", + "logs_indexed_sum": "logs_indexed_sum", + "logs_ingested_sum": "logs_ingested_sum", + "network_device_sum": "network_device_sum", + "network_device_top99p": "network_device_top99p", + "npm_flow_sum": "npm_flow_sum", + "npm_host_sum": "npm_host_sum", + "npm_host_top99p": "npm_host_top99p", + "observability_pipeline_sum": "observability_pipeline_sum", + "online_archive_sum": "online_archive_sum", + "prof_container_sum": "prof_container_sum", + "prof_host_sum": "prof_host_sum", + "prof_host_top99p": "prof_host_top99p", + "rum_lite_sum": "rum_lite_sum", + "rum_replay_sum": "rum_replay_sum", + "rum_sum": "rum_sum", + "rum_units_sum": "rum_units_sum", + "sensitive_data_scanner_sum": "sensitive_data_scanner_sum", + "serverless_apm_sum": "serverless_apm_sum", + "serverless_infra_average": "serverless_infra_average", + "serverless_infra_sum": "serverless_infra_sum", + "serverless_invocation_sum": "serverless_invocation_sum", + "siem_sum": "siem_sum", + "standard_timeseries_average": "standard_timeseries_average", + "synthetics_api_tests_sum": "synthetics_api_tests_sum", + "synthetics_app_testing_maximum": "synthetics_app_testing_maximum", + "synthetics_browser_checks_sum": "synthetics_browser_checks_sum", + "timeseries_average": "timeseries_average", + "timeseries_sum": "timeseries_sum", + } + + def __init__(self_, apm_fargate_average: Union[UsageBillableSummaryBody, UnsetType]=unset, apm_fargate_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, apm_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, apm_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, apm_profiler_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, apm_profiler_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, apm_trace_search_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, application_security_fargate_average: Union[UsageBillableSummaryBody, UnsetType]=unset, application_security_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, application_security_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, ci_pipeline_indexed_spans_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, ci_pipeline_maximum: Union[UsageBillableSummaryBody, UnsetType]=unset, ci_pipeline_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, ci_test_indexed_spans_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, ci_testing_maximum: Union[UsageBillableSummaryBody, UnsetType]=unset, ci_testing_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, cloud_cost_management_average: Union[UsageBillableSummaryBody, UnsetType]=unset, cloud_cost_management_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, cspm_container_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, cspm_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, cspm_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, custom_event_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, cws_container_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, cws_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, cws_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, dbm_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, dbm_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, dbm_normalized_queries_average: Union[UsageBillableSummaryBody, UnsetType]=unset, dbm_normalized_queries_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, fargate_container_apm_and_profiler_average: Union[UsageBillableSummaryBody, UnsetType]=unset, fargate_container_apm_and_profiler_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, fargate_container_average: Union[UsageBillableSummaryBody, UnsetType]=unset, fargate_container_profiler_average: Union[UsageBillableSummaryBody, UnsetType]=unset, fargate_container_profiler_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, fargate_container_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, incident_management_maximum: Union[UsageBillableSummaryBody, UnsetType]=unset, incident_management_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, infra_and_apm_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, infra_and_apm_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, infra_container_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, infra_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, infra_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, ingested_spans_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, ingested_timeseries_average: Union[UsageBillableSummaryBody, UnsetType]=unset, ingested_timeseries_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, iot_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, iot_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, lambda_function_average: Union[UsageBillableSummaryBody, UnsetType]=unset, lambda_function_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_forwarding_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_15day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_180day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_1day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_30day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_360day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_3day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_45day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_60day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_7day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_90day_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_custom_retention_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_indexed_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, logs_ingested_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, network_device_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, network_device_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, npm_flow_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, npm_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, npm_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, observability_pipeline_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, online_archive_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, prof_container_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, prof_host_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, prof_host_top99p: Union[UsageBillableSummaryBody, UnsetType]=unset, rum_lite_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, rum_replay_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, rum_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, rum_units_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, sensitive_data_scanner_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, serverless_apm_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, serverless_infra_average: Union[UsageBillableSummaryBody, UnsetType]=unset, serverless_infra_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, serverless_invocation_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, siem_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, standard_timeseries_average: Union[UsageBillableSummaryBody, UnsetType]=unset, synthetics_api_tests_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, synthetics_app_testing_maximum: Union[UsageBillableSummaryBody, UnsetType]=unset, synthetics_browser_checks_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, timeseries_average: Union[UsageBillableSummaryBody, UnsetType]=unset, timeseries_sum: Union[UsageBillableSummaryBody, UnsetType]=unset, **kwargs): + """ + Response with aggregated usage types. + + :param apm_fargate_average: Response with properties for each aggregated usage type. + :type apm_fargate_average: UsageBillableSummaryBody, optional + + :param apm_fargate_sum: Response with properties for each aggregated usage type. + :type apm_fargate_sum: UsageBillableSummaryBody, optional + + :param apm_host_sum: Response with properties for each aggregated usage type. + :type apm_host_sum: UsageBillableSummaryBody, optional + + :param apm_host_top99p: Response with properties for each aggregated usage type. + :type apm_host_top99p: UsageBillableSummaryBody, optional + + :param apm_profiler_host_sum: Response with properties for each aggregated usage type. + :type apm_profiler_host_sum: UsageBillableSummaryBody, optional + + :param apm_profiler_host_top99p: Response with properties for each aggregated usage type. + :type apm_profiler_host_top99p: UsageBillableSummaryBody, optional + + :param apm_trace_search_sum: Response with properties for each aggregated usage type. + :type apm_trace_search_sum: UsageBillableSummaryBody, optional + + :param application_security_fargate_average: Response with properties for each aggregated usage type. + :type application_security_fargate_average: UsageBillableSummaryBody, optional + + :param application_security_host_sum: Response with properties for each aggregated usage type. + :type application_security_host_sum: UsageBillableSummaryBody, optional + + :param application_security_host_top99p: Response with properties for each aggregated usage type. + :type application_security_host_top99p: UsageBillableSummaryBody, optional + + :param ci_pipeline_indexed_spans_sum: Response with properties for each aggregated usage type. + :type ci_pipeline_indexed_spans_sum: UsageBillableSummaryBody, optional + + :param ci_pipeline_maximum: Response with properties for each aggregated usage type. + :type ci_pipeline_maximum: UsageBillableSummaryBody, optional + + :param ci_pipeline_sum: Response with properties for each aggregated usage type. + :type ci_pipeline_sum: UsageBillableSummaryBody, optional + + :param ci_test_indexed_spans_sum: Response with properties for each aggregated usage type. + :type ci_test_indexed_spans_sum: UsageBillableSummaryBody, optional + + :param ci_testing_maximum: Response with properties for each aggregated usage type. + :type ci_testing_maximum: UsageBillableSummaryBody, optional + + :param ci_testing_sum: Response with properties for each aggregated usage type. + :type ci_testing_sum: UsageBillableSummaryBody, optional + + :param cloud_cost_management_average: Response with properties for each aggregated usage type. + :type cloud_cost_management_average: UsageBillableSummaryBody, optional + + :param cloud_cost_management_sum: Response with properties for each aggregated usage type. + :type cloud_cost_management_sum: UsageBillableSummaryBody, optional + + :param cspm_container_sum: Response with properties for each aggregated usage type. + :type cspm_container_sum: UsageBillableSummaryBody, optional + + :param cspm_host_sum: Response with properties for each aggregated usage type. + :type cspm_host_sum: UsageBillableSummaryBody, optional + + :param cspm_host_top99p: Response with properties for each aggregated usage type. + :type cspm_host_top99p: UsageBillableSummaryBody, optional + + :param custom_event_sum: Response with properties for each aggregated usage type. + :type custom_event_sum: UsageBillableSummaryBody, optional + + :param cws_container_sum: Response with properties for each aggregated usage type. + :type cws_container_sum: UsageBillableSummaryBody, optional + + :param cws_host_sum: Response with properties for each aggregated usage type. + :type cws_host_sum: UsageBillableSummaryBody, optional + + :param cws_host_top99p: Response with properties for each aggregated usage type. + :type cws_host_top99p: UsageBillableSummaryBody, optional + + :param dbm_host_sum: Response with properties for each aggregated usage type. + :type dbm_host_sum: UsageBillableSummaryBody, optional + + :param dbm_host_top99p: Response with properties for each aggregated usage type. + :type dbm_host_top99p: UsageBillableSummaryBody, optional + + :param dbm_normalized_queries_average: Response with properties for each aggregated usage type. + :type dbm_normalized_queries_average: UsageBillableSummaryBody, optional + + :param dbm_normalized_queries_sum: Response with properties for each aggregated usage type. + :type dbm_normalized_queries_sum: UsageBillableSummaryBody, optional + + :param fargate_container_apm_and_profiler_average: Response with properties for each aggregated usage type. + :type fargate_container_apm_and_profiler_average: UsageBillableSummaryBody, optional + + :param fargate_container_apm_and_profiler_sum: Response with properties for each aggregated usage type. + :type fargate_container_apm_and_profiler_sum: UsageBillableSummaryBody, optional + + :param fargate_container_average: Response with properties for each aggregated usage type. + :type fargate_container_average: UsageBillableSummaryBody, optional + + :param fargate_container_profiler_average: Response with properties for each aggregated usage type. + :type fargate_container_profiler_average: UsageBillableSummaryBody, optional + + :param fargate_container_profiler_sum: Response with properties for each aggregated usage type. + :type fargate_container_profiler_sum: UsageBillableSummaryBody, optional + + :param fargate_container_sum: Response with properties for each aggregated usage type. + :type fargate_container_sum: UsageBillableSummaryBody, optional + + :param incident_management_maximum: Response with properties for each aggregated usage type. + :type incident_management_maximum: UsageBillableSummaryBody, optional + + :param incident_management_sum: Response with properties for each aggregated usage type. + :type incident_management_sum: UsageBillableSummaryBody, optional + + :param infra_and_apm_host_sum: Response with properties for each aggregated usage type. + :type infra_and_apm_host_sum: UsageBillableSummaryBody, optional + + :param infra_and_apm_host_top99p: Response with properties for each aggregated usage type. + :type infra_and_apm_host_top99p: UsageBillableSummaryBody, optional + + :param infra_container_sum: Response with properties for each aggregated usage type. + :type infra_container_sum: UsageBillableSummaryBody, optional + + :param infra_host_sum: Response with properties for each aggregated usage type. + :type infra_host_sum: UsageBillableSummaryBody, optional + + :param infra_host_top99p: Response with properties for each aggregated usage type. + :type infra_host_top99p: UsageBillableSummaryBody, optional + + :param ingested_spans_sum: Response with properties for each aggregated usage type. + :type ingested_spans_sum: UsageBillableSummaryBody, optional + + :param ingested_timeseries_average: Response with properties for each aggregated usage type. + :type ingested_timeseries_average: UsageBillableSummaryBody, optional + + :param ingested_timeseries_sum: Response with properties for each aggregated usage type. + :type ingested_timeseries_sum: UsageBillableSummaryBody, optional + + :param iot_sum: Response with properties for each aggregated usage type. + :type iot_sum: UsageBillableSummaryBody, optional + + :param iot_top99p: Response with properties for each aggregated usage type. + :type iot_top99p: UsageBillableSummaryBody, optional + + :param lambda_function_average: Response with properties for each aggregated usage type. + :type lambda_function_average: UsageBillableSummaryBody, optional + + :param lambda_function_sum: Response with properties for each aggregated usage type. + :type lambda_function_sum: UsageBillableSummaryBody, optional + + :param logs_forwarding_sum: Response with properties for each aggregated usage type. + :type logs_forwarding_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_15day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_15day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_180day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_180day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_1day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_1day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_30day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_30day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_360day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_360day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_3day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_3day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_45day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_45day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_60day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_60day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_7day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_7day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_90day_sum: Response with properties for each aggregated usage type. + :type logs_indexed_90day_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_custom_retention_sum: Response with properties for each aggregated usage type. + :type logs_indexed_custom_retention_sum: UsageBillableSummaryBody, optional + + :param logs_indexed_sum: Response with properties for each aggregated usage type. + :type logs_indexed_sum: UsageBillableSummaryBody, optional + + :param logs_ingested_sum: Response with properties for each aggregated usage type. + :type logs_ingested_sum: UsageBillableSummaryBody, optional + + :param network_device_sum: Response with properties for each aggregated usage type. + :type network_device_sum: UsageBillableSummaryBody, optional + + :param network_device_top99p: Response with properties for each aggregated usage type. + :type network_device_top99p: UsageBillableSummaryBody, optional + + :param npm_flow_sum: Response with properties for each aggregated usage type. + :type npm_flow_sum: UsageBillableSummaryBody, optional + + :param npm_host_sum: Response with properties for each aggregated usage type. + :type npm_host_sum: UsageBillableSummaryBody, optional + + :param npm_host_top99p: Response with properties for each aggregated usage type. + :type npm_host_top99p: UsageBillableSummaryBody, optional + + :param observability_pipeline_sum: Response with properties for each aggregated usage type. + :type observability_pipeline_sum: UsageBillableSummaryBody, optional + + :param online_archive_sum: Response with properties for each aggregated usage type. + :type online_archive_sum: UsageBillableSummaryBody, optional + + :param prof_container_sum: Response with properties for each aggregated usage type. + :type prof_container_sum: UsageBillableSummaryBody, optional + + :param prof_host_sum: Response with properties for each aggregated usage type. + :type prof_host_sum: UsageBillableSummaryBody, optional + + :param prof_host_top99p: Response with properties for each aggregated usage type. + :type prof_host_top99p: UsageBillableSummaryBody, optional + + :param rum_lite_sum: Response with properties for each aggregated usage type. + :type rum_lite_sum: UsageBillableSummaryBody, optional + + :param rum_replay_sum: Response with properties for each aggregated usage type. + :type rum_replay_sum: UsageBillableSummaryBody, optional + + :param rum_sum: Response with properties for each aggregated usage type. + :type rum_sum: UsageBillableSummaryBody, optional + + :param rum_units_sum: Response with properties for each aggregated usage type. + :type rum_units_sum: UsageBillableSummaryBody, optional + + :param sensitive_data_scanner_sum: Response with properties for each aggregated usage type. + :type sensitive_data_scanner_sum: UsageBillableSummaryBody, optional + + :param serverless_apm_sum: Response with properties for each aggregated usage type. + :type serverless_apm_sum: UsageBillableSummaryBody, optional + + :param serverless_infra_average: Response with properties for each aggregated usage type. + :type serverless_infra_average: UsageBillableSummaryBody, optional + + :param serverless_infra_sum: Response with properties for each aggregated usage type. + :type serverless_infra_sum: UsageBillableSummaryBody, optional + + :param serverless_invocation_sum: Response with properties for each aggregated usage type. + :type serverless_invocation_sum: UsageBillableSummaryBody, optional + + :param siem_sum: Response with properties for each aggregated usage type. + :type siem_sum: UsageBillableSummaryBody, optional + + :param standard_timeseries_average: Response with properties for each aggregated usage type. + :type standard_timeseries_average: UsageBillableSummaryBody, optional + + :param synthetics_api_tests_sum: Response with properties for each aggregated usage type. + :type synthetics_api_tests_sum: UsageBillableSummaryBody, optional + + :param synthetics_app_testing_maximum: Response with properties for each aggregated usage type. + :type synthetics_app_testing_maximum: UsageBillableSummaryBody, optional + + :param synthetics_browser_checks_sum: Response with properties for each aggregated usage type. + :type synthetics_browser_checks_sum: UsageBillableSummaryBody, optional + + :param timeseries_average: Response with properties for each aggregated usage type. + :type timeseries_average: UsageBillableSummaryBody, optional + + :param timeseries_sum: Response with properties for each aggregated usage type. + :type timeseries_sum: UsageBillableSummaryBody, optional + """ + if apm_fargate_average is not unset: + kwargs["apm_fargate_average"] = apm_fargate_average + if apm_fargate_sum is not unset: + kwargs["apm_fargate_sum"] = apm_fargate_sum + if apm_host_sum is not unset: + kwargs["apm_host_sum"] = apm_host_sum + if apm_host_top99p is not unset: + kwargs["apm_host_top99p"] = apm_host_top99p + if apm_profiler_host_sum is not unset: + kwargs["apm_profiler_host_sum"] = apm_profiler_host_sum + if apm_profiler_host_top99p is not unset: + kwargs["apm_profiler_host_top99p"] = apm_profiler_host_top99p + if apm_trace_search_sum is not unset: + kwargs["apm_trace_search_sum"] = apm_trace_search_sum + if application_security_fargate_average is not unset: + kwargs["application_security_fargate_average"] = application_security_fargate_average + if application_security_host_sum is not unset: + kwargs["application_security_host_sum"] = application_security_host_sum + if application_security_host_top99p is not unset: + kwargs["application_security_host_top99p"] = application_security_host_top99p + if ci_pipeline_indexed_spans_sum is not unset: + kwargs["ci_pipeline_indexed_spans_sum"] = ci_pipeline_indexed_spans_sum + if ci_pipeline_maximum is not unset: + kwargs["ci_pipeline_maximum"] = ci_pipeline_maximum + if ci_pipeline_sum is not unset: + kwargs["ci_pipeline_sum"] = ci_pipeline_sum + if ci_test_indexed_spans_sum is not unset: + kwargs["ci_test_indexed_spans_sum"] = ci_test_indexed_spans_sum + if ci_testing_maximum is not unset: + kwargs["ci_testing_maximum"] = ci_testing_maximum + if ci_testing_sum is not unset: + kwargs["ci_testing_sum"] = ci_testing_sum + if cloud_cost_management_average is not unset: + kwargs["cloud_cost_management_average"] = cloud_cost_management_average + if cloud_cost_management_sum is not unset: + kwargs["cloud_cost_management_sum"] = cloud_cost_management_sum + if cspm_container_sum is not unset: + kwargs["cspm_container_sum"] = cspm_container_sum + if cspm_host_sum is not unset: + kwargs["cspm_host_sum"] = cspm_host_sum + if cspm_host_top99p is not unset: + kwargs["cspm_host_top99p"] = cspm_host_top99p + if custom_event_sum is not unset: + kwargs["custom_event_sum"] = custom_event_sum + if cws_container_sum is not unset: + kwargs["cws_container_sum"] = cws_container_sum + if cws_host_sum is not unset: + kwargs["cws_host_sum"] = cws_host_sum + if cws_host_top99p is not unset: + kwargs["cws_host_top99p"] = cws_host_top99p + if dbm_host_sum is not unset: + kwargs["dbm_host_sum"] = dbm_host_sum + if dbm_host_top99p is not unset: + kwargs["dbm_host_top99p"] = dbm_host_top99p + if dbm_normalized_queries_average is not unset: + kwargs["dbm_normalized_queries_average"] = dbm_normalized_queries_average + if dbm_normalized_queries_sum is not unset: + kwargs["dbm_normalized_queries_sum"] = dbm_normalized_queries_sum + if fargate_container_apm_and_profiler_average is not unset: + kwargs["fargate_container_apm_and_profiler_average"] = fargate_container_apm_and_profiler_average + if fargate_container_apm_and_profiler_sum is not unset: + kwargs["fargate_container_apm_and_profiler_sum"] = fargate_container_apm_and_profiler_sum + if fargate_container_average is not unset: + kwargs["fargate_container_average"] = fargate_container_average + if fargate_container_profiler_average is not unset: + kwargs["fargate_container_profiler_average"] = fargate_container_profiler_average + if fargate_container_profiler_sum is not unset: + kwargs["fargate_container_profiler_sum"] = fargate_container_profiler_sum + if fargate_container_sum is not unset: + kwargs["fargate_container_sum"] = fargate_container_sum + if incident_management_maximum is not unset: + kwargs["incident_management_maximum"] = incident_management_maximum + if incident_management_sum is not unset: + kwargs["incident_management_sum"] = incident_management_sum + if infra_and_apm_host_sum is not unset: + kwargs["infra_and_apm_host_sum"] = infra_and_apm_host_sum + if infra_and_apm_host_top99p is not unset: + kwargs["infra_and_apm_host_top99p"] = infra_and_apm_host_top99p + if infra_container_sum is not unset: + kwargs["infra_container_sum"] = infra_container_sum + if infra_host_sum is not unset: + kwargs["infra_host_sum"] = infra_host_sum + if infra_host_top99p is not unset: + kwargs["infra_host_top99p"] = infra_host_top99p + if ingested_spans_sum is not unset: + kwargs["ingested_spans_sum"] = ingested_spans_sum + if ingested_timeseries_average is not unset: + kwargs["ingested_timeseries_average"] = ingested_timeseries_average + if ingested_timeseries_sum is not unset: + kwargs["ingested_timeseries_sum"] = ingested_timeseries_sum + if iot_sum is not unset: + kwargs["iot_sum"] = iot_sum + if iot_top99p is not unset: + kwargs["iot_top99p"] = iot_top99p + if lambda_function_average is not unset: + kwargs["lambda_function_average"] = lambda_function_average + if lambda_function_sum is not unset: + kwargs["lambda_function_sum"] = lambda_function_sum + if logs_forwarding_sum is not unset: + kwargs["logs_forwarding_sum"] = logs_forwarding_sum + if logs_indexed_15day_sum is not unset: + kwargs["logs_indexed_15day_sum"] = logs_indexed_15day_sum + if logs_indexed_180day_sum is not unset: + kwargs["logs_indexed_180day_sum"] = logs_indexed_180day_sum + if logs_indexed_1day_sum is not unset: + kwargs["logs_indexed_1day_sum"] = logs_indexed_1day_sum + if logs_indexed_30day_sum is not unset: + kwargs["logs_indexed_30day_sum"] = logs_indexed_30day_sum + if logs_indexed_360day_sum is not unset: + kwargs["logs_indexed_360day_sum"] = logs_indexed_360day_sum + if logs_indexed_3day_sum is not unset: + kwargs["logs_indexed_3day_sum"] = logs_indexed_3day_sum + if logs_indexed_45day_sum is not unset: + kwargs["logs_indexed_45day_sum"] = logs_indexed_45day_sum + if logs_indexed_60day_sum is not unset: + kwargs["logs_indexed_60day_sum"] = logs_indexed_60day_sum + if logs_indexed_7day_sum is not unset: + kwargs["logs_indexed_7day_sum"] = logs_indexed_7day_sum + if logs_indexed_90day_sum is not unset: + kwargs["logs_indexed_90day_sum"] = logs_indexed_90day_sum + if logs_indexed_custom_retention_sum is not unset: + kwargs["logs_indexed_custom_retention_sum"] = logs_indexed_custom_retention_sum + if logs_indexed_sum is not unset: + kwargs["logs_indexed_sum"] = logs_indexed_sum + if logs_ingested_sum is not unset: + kwargs["logs_ingested_sum"] = logs_ingested_sum + if network_device_sum is not unset: + kwargs["network_device_sum"] = network_device_sum + if network_device_top99p is not unset: + kwargs["network_device_top99p"] = network_device_top99p + if npm_flow_sum is not unset: + kwargs["npm_flow_sum"] = npm_flow_sum + if npm_host_sum is not unset: + kwargs["npm_host_sum"] = npm_host_sum + if npm_host_top99p is not unset: + kwargs["npm_host_top99p"] = npm_host_top99p + if observability_pipeline_sum is not unset: + kwargs["observability_pipeline_sum"] = observability_pipeline_sum + if online_archive_sum is not unset: + kwargs["online_archive_sum"] = online_archive_sum + if prof_container_sum is not unset: + kwargs["prof_container_sum"] = prof_container_sum + if prof_host_sum is not unset: + kwargs["prof_host_sum"] = prof_host_sum + if prof_host_top99p is not unset: + kwargs["prof_host_top99p"] = prof_host_top99p + if rum_lite_sum is not unset: + kwargs["rum_lite_sum"] = rum_lite_sum + if rum_replay_sum is not unset: + kwargs["rum_replay_sum"] = rum_replay_sum + if rum_sum is not unset: + kwargs["rum_sum"] = rum_sum + if rum_units_sum is not unset: + kwargs["rum_units_sum"] = rum_units_sum + if sensitive_data_scanner_sum is not unset: + kwargs["sensitive_data_scanner_sum"] = sensitive_data_scanner_sum + if serverless_apm_sum is not unset: + kwargs["serverless_apm_sum"] = serverless_apm_sum + if serverless_infra_average is not unset: + kwargs["serverless_infra_average"] = serverless_infra_average + if serverless_infra_sum is not unset: + kwargs["serverless_infra_sum"] = serverless_infra_sum + if serverless_invocation_sum is not unset: + kwargs["serverless_invocation_sum"] = serverless_invocation_sum + if siem_sum is not unset: + kwargs["siem_sum"] = siem_sum + if standard_timeseries_average is not unset: + kwargs["standard_timeseries_average"] = standard_timeseries_average + if synthetics_api_tests_sum is not unset: + kwargs["synthetics_api_tests_sum"] = synthetics_api_tests_sum + if synthetics_app_testing_maximum is not unset: + kwargs["synthetics_app_testing_maximum"] = synthetics_app_testing_maximum + if synthetics_browser_checks_sum is not unset: + kwargs["synthetics_browser_checks_sum"] = synthetics_browser_checks_sum + if timeseries_average is not unset: + kwargs["timeseries_average"] = timeseries_average + if timeseries_sum is not unset: + kwargs["timeseries_sum"] = timeseries_sum + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_billable_summary_response.py b/datadog_api_client/v1/model/usage_billable_summary_response.py new file mode 100644 index 0000000000..179a95fbbd --- /dev/null +++ b/datadog_api_client/v1/model/usage_billable_summary_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_billable_summary_hour import UsageBillableSummaryHour + +class UsageBillableSummaryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_billable_summary_hour import UsageBillableSummaryHour + return { + "usage": ([UsageBillableSummaryHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageBillableSummaryHour], UnsetType]=unset, **kwargs): + """ + Response with monthly summary of data billed by Datadog. + + :param usage: An array of objects regarding usage of billable summary. + :type usage: [UsageBillableSummaryHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_ci_visibility_hour.py b/datadog_api_client/v1/model/usage_ci_visibility_hour.py new file mode 100644 index 0000000000..458280764e --- /dev/null +++ b/datadog_api_client/v1/model/usage_ci_visibility_hour.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageCIVisibilityHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ci_pipeline_indexed_spans": (int, none_type), + "ci_test_indexed_spans": (int, none_type), + "ci_visibility_itr_committers": (int, none_type), + "ci_visibility_pipeline_committers": (int, none_type), + "ci_visibility_test_committers": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "ci_pipeline_indexed_spans": "ci_pipeline_indexed_spans", + "ci_test_indexed_spans": "ci_test_indexed_spans", + "ci_visibility_itr_committers": "ci_visibility_itr_committers", + "ci_visibility_pipeline_committers": "ci_visibility_pipeline_committers", + "ci_visibility_test_committers": "ci_visibility_test_committers", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, ci_pipeline_indexed_spans: Union[int, none_type, UnsetType]=unset, ci_test_indexed_spans: Union[int, none_type, UnsetType]=unset, ci_visibility_itr_committers: Union[int, none_type, UnsetType]=unset, ci_visibility_pipeline_committers: Union[int, none_type, UnsetType]=unset, ci_visibility_test_committers: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + CI visibility usage in a given hour. + + :param ci_pipeline_indexed_spans: The number of spans for pipelines in the queried hour. + :type ci_pipeline_indexed_spans: int, none_type, optional + + :param ci_test_indexed_spans: The number of spans for tests in the queried hour. + :type ci_test_indexed_spans: int, none_type, optional + + :param ci_visibility_itr_committers: Shows the total count of all active Git committers for Intelligent Test Runner in the current month. A committer is active if they commit at least 3 times in a given month. + :type ci_visibility_itr_committers: int, none_type, optional + + :param ci_visibility_pipeline_committers: Shows the total count of all active Git committers for Pipelines in the current month. A committer is active if they commit at least 3 times in a given month. + :type ci_visibility_pipeline_committers: int, none_type, optional + + :param ci_visibility_test_committers: The total count of all active Git committers for tests in the current month. A committer is active if they commit at least 3 times in a given month. + :type ci_visibility_test_committers: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if ci_pipeline_indexed_spans is not unset: + kwargs["ci_pipeline_indexed_spans"] = ci_pipeline_indexed_spans + if ci_test_indexed_spans is not unset: + kwargs["ci_test_indexed_spans"] = ci_test_indexed_spans + if ci_visibility_itr_committers is not unset: + kwargs["ci_visibility_itr_committers"] = ci_visibility_itr_committers + if ci_visibility_pipeline_committers is not unset: + kwargs["ci_visibility_pipeline_committers"] = ci_visibility_pipeline_committers + if ci_visibility_test_committers is not unset: + kwargs["ci_visibility_test_committers"] = ci_visibility_test_committers + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_ci_visibility_response.py b/datadog_api_client/v1/model/usage_ci_visibility_response.py new file mode 100644 index 0000000000..94b44a44af --- /dev/null +++ b/datadog_api_client/v1/model/usage_ci_visibility_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_ci_visibility_hour import UsageCIVisibilityHour + +class UsageCIVisibilityResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_ci_visibility_hour import UsageCIVisibilityHour + return { + "usage": ([UsageCIVisibilityHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageCIVisibilityHour], UnsetType]=unset, **kwargs): + """ + CI visibility usage response + + :param usage: Response containing CI visibility usage. + :type usage: [UsageCIVisibilityHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_cloud_security_posture_management_hour.py b/datadog_api_client/v1/model/usage_cloud_security_posture_management_hour.py new file mode 100644 index 0000000000..8a3049dba6 --- /dev/null +++ b/datadog_api_client/v1/model/usage_cloud_security_posture_management_hour.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageCloudSecurityPostureManagementHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aas_host_count": (float, none_type), + "aws_host_count": (float, none_type), + "azure_host_count": (float, none_type), + "compliance_host_count": (float, none_type), + "container_count": (float, none_type), + "gcp_host_count": (float, none_type), + "host_count": (float, none_type), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "aas_host_count": "aas_host_count", + "aws_host_count": "aws_host_count", + "azure_host_count": "azure_host_count", + "compliance_host_count": "compliance_host_count", + "container_count": "container_count", + "gcp_host_count": "gcp_host_count", + "host_count": "host_count", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, aas_host_count: Union[float, none_type, UnsetType]=unset, aws_host_count: Union[float, none_type, UnsetType]=unset, azure_host_count: Union[float, none_type, UnsetType]=unset, compliance_host_count: Union[float, none_type, UnsetType]=unset, container_count: Union[float, none_type, UnsetType]=unset, gcp_host_count: Union[float, none_type, UnsetType]=unset, host_count: Union[float, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Cloud Security Management Pro usage for a given organization for a given hour. + + :param aas_host_count: The number of Cloud Security Management Pro Azure app services hosts during a given hour. + :type aas_host_count: float, none_type, optional + + :param aws_host_count: The number of Cloud Security Management Pro AWS hosts during a given hour. + :type aws_host_count: float, none_type, optional + + :param azure_host_count: The number of Cloud Security Management Pro Azure hosts during a given hour. + :type azure_host_count: float, none_type, optional + + :param compliance_host_count: The number of Cloud Security Management Pro hosts during a given hour. + :type compliance_host_count: float, none_type, optional + + :param container_count: The total number of Cloud Security Management Pro containers during a given hour. + :type container_count: float, none_type, optional + + :param gcp_host_count: The number of Cloud Security Management Pro GCP hosts during a given hour. + :type gcp_host_count: float, none_type, optional + + :param host_count: The total number of Cloud Security Management Pro hosts during a given hour. + :type host_count: float, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if aas_host_count is not unset: + kwargs["aas_host_count"] = aas_host_count + if aws_host_count is not unset: + kwargs["aws_host_count"] = aws_host_count + if azure_host_count is not unset: + kwargs["azure_host_count"] = azure_host_count + if compliance_host_count is not unset: + kwargs["compliance_host_count"] = compliance_host_count + if container_count is not unset: + kwargs["container_count"] = container_count + if gcp_host_count is not unset: + kwargs["gcp_host_count"] = gcp_host_count + if host_count is not unset: + kwargs["host_count"] = host_count + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_cloud_security_posture_management_response.py b/datadog_api_client/v1/model/usage_cloud_security_posture_management_response.py new file mode 100644 index 0000000000..95d37a2203 --- /dev/null +++ b/datadog_api_client/v1/model/usage_cloud_security_posture_management_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_cloud_security_posture_management_hour import UsageCloudSecurityPostureManagementHour + +class UsageCloudSecurityPostureManagementResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_cloud_security_posture_management_hour import UsageCloudSecurityPostureManagementHour + return { + "usage": ([UsageCloudSecurityPostureManagementHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageCloudSecurityPostureManagementHour], UnsetType]=unset, **kwargs): + """ + The response containing the Cloud Security Management Pro usage for each hour for a given organization. + + :param usage: Get hourly usage for Cloud Security Management Pro. + :type usage: [UsageCloudSecurityPostureManagementHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_custom_reports_attributes.py b/datadog_api_client/v1/model/usage_custom_reports_attributes.py new file mode 100644 index 0000000000..c34ebe1641 --- /dev/null +++ b/datadog_api_client/v1/model/usage_custom_reports_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageCustomReportsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "computed_on": (str,), + "end_date": (str,), + "size": (int,), + "start_date": (str,), + "tags": ([str],), + } + attribute_map = { + "computed_on": "computed_on", + "end_date": "end_date", + "size": "size", + "start_date": "start_date", + "tags": "tags", + } + + def __init__(self_, computed_on: Union[str, UnsetType]=unset, end_date: Union[str, UnsetType]=unset, size: Union[int, UnsetType]=unset, start_date: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The response containing attributes for custom reports. + + :param computed_on: The date the specified custom report was computed. + :type computed_on: str, optional + + :param end_date: The ending date of custom report. + :type end_date: str, optional + + :param size: size + :type size: int, optional + + :param start_date: The starting date of custom report. + :type start_date: str, optional + + :param tags: A list of tags to apply to custom reports. + :type tags: [str], optional + """ + if computed_on is not unset: + kwargs["computed_on"] = computed_on + if end_date is not unset: + kwargs["end_date"] = end_date + if size is not unset: + kwargs["size"] = size + if start_date is not unset: + kwargs["start_date"] = start_date + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_custom_reports_data.py b/datadog_api_client/v1/model/usage_custom_reports_data.py new file mode 100644 index 0000000000..4e7c74b0fe --- /dev/null +++ b/datadog_api_client/v1/model/usage_custom_reports_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_custom_reports_attributes import UsageCustomReportsAttributes + from datadog_api_client.v1.model.usage_reports_type import UsageReportsType + +class UsageCustomReportsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_custom_reports_attributes import UsageCustomReportsAttributes + from datadog_api_client.v1.model.usage_reports_type import UsageReportsType + return { + "attributes": (UsageCustomReportsAttributes,), + "id": (str,), + "type": (UsageReportsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[UsageCustomReportsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[UsageReportsType, UnsetType]=unset, **kwargs): + """ + The response containing the date and type for custom reports. + + :param attributes: The response containing attributes for custom reports. + :type attributes: UsageCustomReportsAttributes, optional + + :param id: The date for specified custom reports. + :type id: str, optional + + :param type: The type of reports. + :type type: UsageReportsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_custom_reports_meta.py b/datadog_api_client/v1/model/usage_custom_reports_meta.py new file mode 100644 index 0000000000..4f223f95c2 --- /dev/null +++ b/datadog_api_client/v1/model/usage_custom_reports_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_custom_reports_page import UsageCustomReportsPage + +class UsageCustomReportsMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_custom_reports_page import UsageCustomReportsPage + return { + "page": (UsageCustomReportsPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[UsageCustomReportsPage, UnsetType]=unset, **kwargs): + """ + The object containing document metadata. + + :param page: The object containing page total count. + :type page: UsageCustomReportsPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_custom_reports_page.py b/datadog_api_client/v1/model/usage_custom_reports_page.py new file mode 100644 index 0000000000..122b11ad38 --- /dev/null +++ b/datadog_api_client/v1/model/usage_custom_reports_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageCustomReportsPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "total_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + The object containing page total count. + + :param total_count: Total page count. + :type total_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_custom_reports_response.py b/datadog_api_client/v1/model/usage_custom_reports_response.py new file mode 100644 index 0000000000..4facf58a0e --- /dev/null +++ b/datadog_api_client/v1/model/usage_custom_reports_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_custom_reports_data import UsageCustomReportsData + from datadog_api_client.v1.model.usage_custom_reports_meta import UsageCustomReportsMeta + +class UsageCustomReportsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_custom_reports_data import UsageCustomReportsData + from datadog_api_client.v1.model.usage_custom_reports_meta import UsageCustomReportsMeta + return { + "data": ([UsageCustomReportsData],), + "meta": (UsageCustomReportsMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[UsageCustomReportsData], UnsetType]=unset, meta: Union[UsageCustomReportsMeta, UnsetType]=unset, **kwargs): + """ + Response containing available custom reports. + + :param data: An array of available custom reports. + :type data: [UsageCustomReportsData], optional + + :param meta: The object containing document metadata. + :type meta: UsageCustomReportsMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_cws_hour.py b/datadog_api_client/v1/model/usage_cws_hour.py new file mode 100644 index 0000000000..b85a0c2dd6 --- /dev/null +++ b/datadog_api_client/v1/model/usage_cws_hour.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageCWSHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cws_container_count": (int, none_type), + "cws_host_count": (int, none_type), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "cws_container_count": "cws_container_count", + "cws_host_count": "cws_host_count", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, cws_container_count: Union[int, none_type, UnsetType]=unset, cws_host_count: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Cloud Workload Security usage for a given organization for a given hour. + + :param cws_container_count: The total number of Cloud Workload Security container hours from the start of the given hour’s month until the given hour. + :type cws_container_count: int, none_type, optional + + :param cws_host_count: The total number of Cloud Workload Security host hours from the start of the given hour’s month until the given hour. + :type cws_host_count: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if cws_container_count is not unset: + kwargs["cws_container_count"] = cws_container_count + if cws_host_count is not unset: + kwargs["cws_host_count"] = cws_host_count + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_cws_response.py b/datadog_api_client/v1/model/usage_cws_response.py new file mode 100644 index 0000000000..61d334ce70 --- /dev/null +++ b/datadog_api_client/v1/model/usage_cws_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_cws_hour import UsageCWSHour + +class UsageCWSResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_cws_hour import UsageCWSHour + return { + "usage": ([UsageCWSHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageCWSHour], UnsetType]=unset, **kwargs): + """ + Response containing the Cloud Workload Security usage for each hour for a given organization. + + :param usage: Get hourly usage for Cloud Workload Security. + :type usage: [UsageCWSHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_dbm_hour.py b/datadog_api_client/v1/model/usage_dbm_hour.py new file mode 100644 index 0000000000..24f306bcff --- /dev/null +++ b/datadog_api_client/v1/model/usage_dbm_hour.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageDBMHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dbm_host_count": (int, none_type), + "dbm_queries_count": (int, none_type), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "dbm_host_count": "dbm_host_count", + "dbm_queries_count": "dbm_queries_count", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, dbm_host_count: Union[int, none_type, UnsetType]=unset, dbm_queries_count: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Database Monitoring usage for a given organization for a given hour. + + :param dbm_host_count: The total number of Database Monitoring host hours from the start of the given hour’s month until the given hour. + :type dbm_host_count: int, none_type, optional + + :param dbm_queries_count: The total number of normalized Database Monitoring queries from the start of the given hour’s month until the given hour. + :type dbm_queries_count: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if dbm_host_count is not unset: + kwargs["dbm_host_count"] = dbm_host_count + if dbm_queries_count is not unset: + kwargs["dbm_queries_count"] = dbm_queries_count + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_dbm_response.py b/datadog_api_client/v1/model/usage_dbm_response.py new file mode 100644 index 0000000000..cc93b5a1ed --- /dev/null +++ b/datadog_api_client/v1/model/usage_dbm_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_dbm_hour import UsageDBMHour + +class UsageDBMResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_dbm_hour import UsageDBMHour + return { + "usage": ([UsageDBMHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageDBMHour], UnsetType]=unset, **kwargs): + """ + Response containing the Database Monitoring usage for each hour for a given organization. + + :param usage: Get hourly usage for Database Monitoring + :type usage: [UsageDBMHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_fargate_hour.py b/datadog_api_client/v1/model/usage_fargate_hour.py new file mode 100644 index 0000000000..fda2f445d9 --- /dev/null +++ b/datadog_api_client/v1/model/usage_fargate_hour.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageFargateHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "apm_fargate_count": (int, none_type), + "appsec_fargate_count": (int, none_type), + "avg_profiled_fargate_tasks": (int, none_type), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + "tasks_count": (int, none_type), + } + attribute_map = { + "apm_fargate_count": "apm_fargate_count", + "appsec_fargate_count": "appsec_fargate_count", + "avg_profiled_fargate_tasks": "avg_profiled_fargate_tasks", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + "tasks_count": "tasks_count", + } + + def __init__(self_, apm_fargate_count: Union[int, none_type, UnsetType]=unset, appsec_fargate_count: Union[int, none_type, UnsetType]=unset, avg_profiled_fargate_tasks: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, tasks_count: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Number of Fargate tasks run and hourly usage. + + :param apm_fargate_count: The high-water mark of APM ECS Fargate tasks during the given hour. + :type apm_fargate_count: int, none_type, optional + + :param appsec_fargate_count: The Application Security Monitoring ECS Fargate tasks during the given hour. + :type appsec_fargate_count: int, none_type, optional + + :param avg_profiled_fargate_tasks: The average profiled task count for Fargate Profiling. + :type avg_profiled_fargate_tasks: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param tasks_count: The number of Fargate tasks run. + :type tasks_count: int, none_type, optional + """ + if apm_fargate_count is not unset: + kwargs["apm_fargate_count"] = apm_fargate_count + if appsec_fargate_count is not unset: + kwargs["appsec_fargate_count"] = appsec_fargate_count + if avg_profiled_fargate_tasks is not unset: + kwargs["avg_profiled_fargate_tasks"] = avg_profiled_fargate_tasks + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if tasks_count is not unset: + kwargs["tasks_count"] = tasks_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_fargate_response.py b/datadog_api_client/v1/model/usage_fargate_response.py new file mode 100644 index 0000000000..631845ddb5 --- /dev/null +++ b/datadog_api_client/v1/model/usage_fargate_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_fargate_hour import UsageFargateHour + +class UsageFargateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_fargate_hour import UsageFargateHour + return { + "usage": ([UsageFargateHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageFargateHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of Fargate tasks run and hourly usage. + + :param usage: Array with the number of hourly Fargate tasks recorded for a given organization. + :type usage: [UsageFargateHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_host_hour.py b/datadog_api_client/v1/model/usage_host_hour.py new file mode 100644 index 0000000000..3642b6ae11 --- /dev/null +++ b/datadog_api_client/v1/model/usage_host_hour.py @@ -0,0 +1,167 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageHostHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "agent_host_count": (int, none_type), + "alibaba_host_count": (int, none_type), + "apm_azure_app_service_host_count": (int, none_type), + "apm_host_count": (int, none_type), + "aws_host_count": (int, none_type), + "azure_host_count": (int, none_type), + "container_count": (int, none_type), + "gcp_host_count": (int, none_type), + "heroku_host_count": (int, none_type), + "host_count": (int, none_type), + "hour": (datetime, none_type), + "infra_azure_app_service": (int, none_type), + "opentelemetry_apm_host_count": (int, none_type), + "opentelemetry_host_count": (int, none_type), + "org_name": (str,), + "public_id": (str,), + "vsphere_host_count": (int, none_type), + } + attribute_map = { + "agent_host_count": "agent_host_count", + "alibaba_host_count": "alibaba_host_count", + "apm_azure_app_service_host_count": "apm_azure_app_service_host_count", + "apm_host_count": "apm_host_count", + "aws_host_count": "aws_host_count", + "azure_host_count": "azure_host_count", + "container_count": "container_count", + "gcp_host_count": "gcp_host_count", + "heroku_host_count": "heroku_host_count", + "host_count": "host_count", + "hour": "hour", + "infra_azure_app_service": "infra_azure_app_service", + "opentelemetry_apm_host_count": "opentelemetry_apm_host_count", + "opentelemetry_host_count": "opentelemetry_host_count", + "org_name": "org_name", + "public_id": "public_id", + "vsphere_host_count": "vsphere_host_count", + } + + def __init__(self_, agent_host_count: Union[int, none_type, UnsetType]=unset, alibaba_host_count: Union[int, none_type, UnsetType]=unset, apm_azure_app_service_host_count: Union[int, none_type, UnsetType]=unset, apm_host_count: Union[int, none_type, UnsetType]=unset, aws_host_count: Union[int, none_type, UnsetType]=unset, azure_host_count: Union[int, none_type, UnsetType]=unset, container_count: Union[int, none_type, UnsetType]=unset, gcp_host_count: Union[int, none_type, UnsetType]=unset, heroku_host_count: Union[int, none_type, UnsetType]=unset, host_count: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, none_type, UnsetType]=unset, infra_azure_app_service: Union[int, none_type, UnsetType]=unset, opentelemetry_apm_host_count: Union[int, none_type, UnsetType]=unset, opentelemetry_host_count: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, vsphere_host_count: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Number of hosts/containers recorded for each hour for a given organization. + + :param agent_host_count: Contains the total number of infrastructure hosts reporting + during a given hour that were running the Datadog Agent. + :type agent_host_count: int, none_type, optional + + :param alibaba_host_count: Contains the total number of hosts that reported through Alibaba integration + (and were NOT running the Datadog Agent). + :type alibaba_host_count: int, none_type, optional + + :param apm_azure_app_service_host_count: Contains the total number of Azure App Services hosts using APM. + :type apm_azure_app_service_host_count: int, none_type, optional + + :param apm_host_count: Shows the total number of hosts using APM during the hour, + these are counted as billable (except during trial periods). + :type apm_host_count: int, none_type, optional + + :param aws_host_count: Contains the total number of hosts that reported through the AWS integration + (and were NOT running the Datadog Agent). + :type aws_host_count: int, none_type, optional + + :param azure_host_count: Contains the total number of hosts that reported through Azure integration + (and were NOT running the Datadog Agent). + :type azure_host_count: int, none_type, optional + + :param container_count: Shows the total number of containers reported by the Docker integration during the hour. + :type container_count: int, none_type, optional + + :param gcp_host_count: Contains the total number of hosts that reported through the Google Cloud integration + (and were NOT running the Datadog Agent). + :type gcp_host_count: int, none_type, optional + + :param heroku_host_count: Contains the total number of Heroku dynos reported by the Datadog Agent. + :type heroku_host_count: int, none_type, optional + + :param host_count: Contains the total number of billable infrastructure hosts reporting during a given hour. + This is the sum of ``agent_host_count`` , ``aws_host_count`` , and ``gcp_host_count``. + :type host_count: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, none_type, optional + + :param infra_azure_app_service: Contains the total number of hosts that reported through the Azure App Services integration + (and were NOT running the Datadog Agent). + :type infra_azure_app_service: int, none_type, optional + + :param opentelemetry_apm_host_count: Contains the total number of hosts using APM reported by Datadog exporter for the OpenTelemetry Collector. + :type opentelemetry_apm_host_count: int, none_type, optional + + :param opentelemetry_host_count: Contains the total number of hosts reported by Datadog exporter for the OpenTelemetry Collector. + :type opentelemetry_host_count: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param vsphere_host_count: Contains the total number of hosts that reported through vSphere integration + (and were NOT running the Datadog Agent). + :type vsphere_host_count: int, none_type, optional + """ + if agent_host_count is not unset: + kwargs["agent_host_count"] = agent_host_count + if alibaba_host_count is not unset: + kwargs["alibaba_host_count"] = alibaba_host_count + if apm_azure_app_service_host_count is not unset: + kwargs["apm_azure_app_service_host_count"] = apm_azure_app_service_host_count + if apm_host_count is not unset: + kwargs["apm_host_count"] = apm_host_count + if aws_host_count is not unset: + kwargs["aws_host_count"] = aws_host_count + if azure_host_count is not unset: + kwargs["azure_host_count"] = azure_host_count + if container_count is not unset: + kwargs["container_count"] = container_count + if gcp_host_count is not unset: + kwargs["gcp_host_count"] = gcp_host_count + if heroku_host_count is not unset: + kwargs["heroku_host_count"] = heroku_host_count + if host_count is not unset: + kwargs["host_count"] = host_count + if hour is not unset: + kwargs["hour"] = hour + if infra_azure_app_service is not unset: + kwargs["infra_azure_app_service"] = infra_azure_app_service + if opentelemetry_apm_host_count is not unset: + kwargs["opentelemetry_apm_host_count"] = opentelemetry_apm_host_count + if opentelemetry_host_count is not unset: + kwargs["opentelemetry_host_count"] = opentelemetry_host_count + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if vsphere_host_count is not unset: + kwargs["vsphere_host_count"] = vsphere_host_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_hosts_response.py b/datadog_api_client/v1/model/usage_hosts_response.py new file mode 100644 index 0000000000..722da19fc1 --- /dev/null +++ b/datadog_api_client/v1/model/usage_hosts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_host_hour import UsageHostHour + +class UsageHostsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_host_hour import UsageHostHour + return { + "usage": ([UsageHostHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageHostHour], UnsetType]=unset, **kwargs): + """ + Host usage response. + + :param usage: An array of objects related to host usage. + :type usage: [UsageHostHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_incident_management_hour.py b/datadog_api_client/v1/model/usage_incident_management_hour.py new file mode 100644 index 0000000000..cb9c495ed6 --- /dev/null +++ b/datadog_api_client/v1/model/usage_incident_management_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageIncidentManagementHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "monthly_active_users": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "hour": "hour", + "monthly_active_users": "monthly_active_users", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, monthly_active_users: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Incident management usage for a given organization for a given hour. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param monthly_active_users: Contains the total number monthly active users from the start of the given hour's month until the given hour. + :type monthly_active_users: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if monthly_active_users is not unset: + kwargs["monthly_active_users"] = monthly_active_users + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_incident_management_response.py b/datadog_api_client/v1/model/usage_incident_management_response.py new file mode 100644 index 0000000000..03a673b6e4 --- /dev/null +++ b/datadog_api_client/v1/model/usage_incident_management_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_incident_management_hour import UsageIncidentManagementHour + +class UsageIncidentManagementResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_incident_management_hour import UsageIncidentManagementHour + return { + "usage": ([UsageIncidentManagementHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageIncidentManagementHour], UnsetType]=unset, **kwargs): + """ + Response containing the incident management usage for each hour for a given organization. + + :param usage: Get hourly usage for incident management. + :type usage: [UsageIncidentManagementHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_indexed_spans_hour.py b/datadog_api_client/v1/model/usage_indexed_spans_hour.py new file mode 100644 index 0000000000..885a59a62a --- /dev/null +++ b/datadog_api_client/v1/model/usage_indexed_spans_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageIndexedSpansHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "indexed_events_count": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "hour": "hour", + "indexed_events_count": "indexed_events_count", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, indexed_events_count: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + The hours of indexed spans usage. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param indexed_events_count: Contains the number of spans indexed. + :type indexed_events_count: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if indexed_events_count is not unset: + kwargs["indexed_events_count"] = indexed_events_count + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_indexed_spans_response.py b/datadog_api_client/v1/model/usage_indexed_spans_response.py new file mode 100644 index 0000000000..c1a0819731 --- /dev/null +++ b/datadog_api_client/v1/model/usage_indexed_spans_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_indexed_spans_hour import UsageIndexedSpansHour + +class UsageIndexedSpansResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_indexed_spans_hour import UsageIndexedSpansHour + return { + "usage": ([UsageIndexedSpansHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageIndexedSpansHour], UnsetType]=unset, **kwargs): + """ + A response containing indexed spans usage. + + :param usage: Array with the number of hourly traces indexed for a given organization. + :type usage: [UsageIndexedSpansHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_ingested_spans_hour.py b/datadog_api_client/v1/model/usage_ingested_spans_hour.py new file mode 100644 index 0000000000..87d3fc951e --- /dev/null +++ b/datadog_api_client/v1/model/usage_ingested_spans_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageIngestedSpansHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "ingested_events_bytes": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "hour": "hour", + "ingested_events_bytes": "ingested_events_bytes", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, ingested_events_bytes: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Ingested spans usage for a given organization for a given hour. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param ingested_events_bytes: Contains the total number of bytes ingested for APM spans during a given hour. + :type ingested_events_bytes: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if ingested_events_bytes is not unset: + kwargs["ingested_events_bytes"] = ingested_events_bytes + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_ingested_spans_response.py b/datadog_api_client/v1/model/usage_ingested_spans_response.py new file mode 100644 index 0000000000..e5f542c1eb --- /dev/null +++ b/datadog_api_client/v1/model/usage_ingested_spans_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_ingested_spans_hour import UsageIngestedSpansHour + +class UsageIngestedSpansResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_ingested_spans_hour import UsageIngestedSpansHour + return { + "usage": ([UsageIngestedSpansHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageIngestedSpansHour], UnsetType]=unset, **kwargs): + """ + Response containing the ingested spans usage for each hour for a given organization. + + :param usage: Get hourly usage for ingested spans. + :type usage: [UsageIngestedSpansHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_iot_hour.py b/datadog_api_client/v1/model/usage_iot_hour.py new file mode 100644 index 0000000000..c9f51f7a15 --- /dev/null +++ b/datadog_api_client/v1/model/usage_iot_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageIoTHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "iot_device_count": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "hour": "hour", + "iot_device_count": "iot_device_count", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, iot_device_count: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + IoT usage for a given organization for a given hour. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param iot_device_count: The total number of IoT devices during a given hour. + :type iot_device_count: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if iot_device_count is not unset: + kwargs["iot_device_count"] = iot_device_count + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_iot_response.py b/datadog_api_client/v1/model/usage_iot_response.py new file mode 100644 index 0000000000..64ef8fa588 --- /dev/null +++ b/datadog_api_client/v1/model/usage_iot_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_iot_hour import UsageIoTHour + +class UsageIoTResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_iot_hour import UsageIoTHour + return { + "usage": ([UsageIoTHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageIoTHour], UnsetType]=unset, **kwargs): + """ + Response containing the IoT usage for each hour for a given organization. + + :param usage: Get hourly usage for IoT. + :type usage: [UsageIoTHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_lambda_hour.py b/datadog_api_client/v1/model/usage_lambda_hour.py new file mode 100644 index 0000000000..912fb55ca7 --- /dev/null +++ b/datadog_api_client/v1/model/usage_lambda_hour.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageLambdaHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "func_count": (int, none_type), + "hour": (datetime,), + "invocations_sum": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "func_count": "func_count", + "hour": "hour", + "invocations_sum": "invocations_sum", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, func_count: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, invocations_sum: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Number of Lambda functions and sum of the invocations of all Lambda functions + for each hour for a given organization. + + :param func_count: Contains the number of different functions for each region and AWS account. + :type func_count: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param invocations_sum: Contains the sum of invocations of all functions. + :type invocations_sum: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if func_count is not unset: + kwargs["func_count"] = func_count + if hour is not unset: + kwargs["hour"] = hour + if invocations_sum is not unset: + kwargs["invocations_sum"] = invocations_sum + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_lambda_response.py b/datadog_api_client/v1/model/usage_lambda_response.py new file mode 100644 index 0000000000..ff40f2bec8 --- /dev/null +++ b/datadog_api_client/v1/model/usage_lambda_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_lambda_hour import UsageLambdaHour + +class UsageLambdaResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_lambda_hour import UsageLambdaHour + return { + "usage": ([UsageLambdaHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageLambdaHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of Lambda functions and sum of the invocations of all Lambda functions + for each hour for a given organization. + + :param usage: Get hourly usage for Lambda. + :type usage: [UsageLambdaHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_logs_by_index_hour.py b/datadog_api_client/v1/model/usage_logs_by_index_hour.py new file mode 100644 index 0000000000..9d5550308a --- /dev/null +++ b/datadog_api_client/v1/model/usage_logs_by_index_hour.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageLogsByIndexHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "event_count": (int,), + "hour": (datetime,), + "index_id": (str,), + "index_name": (str,), + "org_name": (str,), + "public_id": (str,), + "retention": (int,), + } + attribute_map = { + "event_count": "event_count", + "hour": "hour", + "index_id": "index_id", + "index_name": "index_name", + "org_name": "org_name", + "public_id": "public_id", + "retention": "retention", + } + + def __init__(self_, event_count: Union[int, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, index_id: Union[str, UnsetType]=unset, index_name: Union[str, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, retention: Union[int, UnsetType]=unset, **kwargs): + """ + Number of indexed logs for each hour and index for a given organization. + + :param event_count: The total number of indexed logs for the queried hour. + :type event_count: int, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param index_id: The index ID for this usage. + :type index_id: str, optional + + :param index_name: The user specified name for this index ID. + :type index_name: str, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param retention: The retention period (in days) for this index ID. + :type retention: int, optional + """ + if event_count is not unset: + kwargs["event_count"] = event_count + if hour is not unset: + kwargs["hour"] = hour + if index_id is not unset: + kwargs["index_id"] = index_id + if index_name is not unset: + kwargs["index_name"] = index_name + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if retention is not unset: + kwargs["retention"] = retention + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_logs_by_index_response.py b/datadog_api_client/v1/model/usage_logs_by_index_response.py new file mode 100644 index 0000000000..6ae2d0264b --- /dev/null +++ b/datadog_api_client/v1/model/usage_logs_by_index_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_logs_by_index_hour import UsageLogsByIndexHour + +class UsageLogsByIndexResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_logs_by_index_hour import UsageLogsByIndexHour + return { + "usage": ([UsageLogsByIndexHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageLogsByIndexHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of indexed logs for each hour and index for a given organization. + + :param usage: An array of objects regarding hourly usage of logs by index response. + :type usage: [UsageLogsByIndexHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_logs_by_retention_hour.py b/datadog_api_client/v1/model/usage_logs_by_retention_hour.py new file mode 100644 index 0000000000..d8e4d59171 --- /dev/null +++ b/datadog_api_client/v1/model/usage_logs_by_retention_hour.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageLogsByRetentionHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "indexed_events_count": (int, none_type), + "live_indexed_events_count": (int, none_type), + "org_name": (str,), + "public_id": (str,), + "rehydrated_indexed_events_count": (int, none_type), + "retention": (str, none_type), + } + attribute_map = { + "indexed_events_count": "indexed_events_count", + "live_indexed_events_count": "live_indexed_events_count", + "org_name": "org_name", + "public_id": "public_id", + "rehydrated_indexed_events_count": "rehydrated_indexed_events_count", + "retention": "retention", + } + + def __init__(self_, indexed_events_count: Union[int, none_type, UnsetType]=unset, live_indexed_events_count: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, rehydrated_indexed_events_count: Union[int, none_type, UnsetType]=unset, retention: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The number of indexed logs for each hour for a given organization broken down by retention period. + + :param indexed_events_count: Total logs indexed with this retention period during a given hour. + :type indexed_events_count: int, none_type, optional + + :param live_indexed_events_count: Live logs indexed with this retention period during a given hour. + :type live_indexed_events_count: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param rehydrated_indexed_events_count: Rehydrated logs indexed with this retention period during a given hour. + :type rehydrated_indexed_events_count: int, none_type, optional + + :param retention: The retention period in days or "custom" for all custom retention usage. + :type retention: str, none_type, optional + """ + if indexed_events_count is not unset: + kwargs["indexed_events_count"] = indexed_events_count + if live_indexed_events_count is not unset: + kwargs["live_indexed_events_count"] = live_indexed_events_count + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if rehydrated_indexed_events_count is not unset: + kwargs["rehydrated_indexed_events_count"] = rehydrated_indexed_events_count + if retention is not unset: + kwargs["retention"] = retention + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_logs_by_retention_response.py b/datadog_api_client/v1/model/usage_logs_by_retention_response.py new file mode 100644 index 0000000000..22f0e9baad --- /dev/null +++ b/datadog_api_client/v1/model/usage_logs_by_retention_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_logs_by_retention_hour import UsageLogsByRetentionHour + +class UsageLogsByRetentionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_logs_by_retention_hour import UsageLogsByRetentionHour + return { + "usage": ([UsageLogsByRetentionHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageLogsByRetentionHour], UnsetType]=unset, **kwargs): + """ + Response containing the indexed logs usage broken down by retention period for an organization during a given hour. + + :param usage: Get hourly usage for indexed logs by retention period. + :type usage: [UsageLogsByRetentionHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_logs_hour.py b/datadog_api_client/v1/model/usage_logs_hour.py new file mode 100644 index 0000000000..e6780b06ba --- /dev/null +++ b/datadog_api_client/v1/model/usage_logs_hour.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageLogsHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "billable_ingested_bytes": (int, none_type), + "hour": (datetime,), + "indexed_events_count": (int, none_type), + "ingested_events_bytes": (int, none_type), + "logs_forwarding_events_bytes": (int, none_type), + "logs_live_indexed_count": (int, none_type), + "logs_live_ingested_bytes": (int, none_type), + "logs_rehydrated_indexed_count": (int, none_type), + "logs_rehydrated_ingested_bytes": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "billable_ingested_bytes": "billable_ingested_bytes", + "hour": "hour", + "indexed_events_count": "indexed_events_count", + "ingested_events_bytes": "ingested_events_bytes", + "logs_forwarding_events_bytes": "logs_forwarding_events_bytes", + "logs_live_indexed_count": "logs_live_indexed_count", + "logs_live_ingested_bytes": "logs_live_ingested_bytes", + "logs_rehydrated_indexed_count": "logs_rehydrated_indexed_count", + "logs_rehydrated_ingested_bytes": "logs_rehydrated_ingested_bytes", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, billable_ingested_bytes: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, indexed_events_count: Union[int, none_type, UnsetType]=unset, ingested_events_bytes: Union[int, none_type, UnsetType]=unset, logs_forwarding_events_bytes: Union[int, none_type, UnsetType]=unset, logs_live_indexed_count: Union[int, none_type, UnsetType]=unset, logs_live_ingested_bytes: Union[int, none_type, UnsetType]=unset, logs_rehydrated_indexed_count: Union[int, none_type, UnsetType]=unset, logs_rehydrated_ingested_bytes: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Hour usage for logs. + + :param billable_ingested_bytes: Contains the number of billable log bytes ingested. + :type billable_ingested_bytes: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param indexed_events_count: Contains the number of log events indexed. + :type indexed_events_count: int, none_type, optional + + :param ingested_events_bytes: Contains the number of log bytes ingested. + :type ingested_events_bytes: int, none_type, optional + + :param logs_forwarding_events_bytes: Contains the number of logs forwarded bytes (data available as of April 1st 2023) + :type logs_forwarding_events_bytes: int, none_type, optional + + :param logs_live_indexed_count: Contains the number of live log events indexed (data available as of December 1, 2020). + :type logs_live_indexed_count: int, none_type, optional + + :param logs_live_ingested_bytes: Contains the number of live log bytes ingested (data available as of December 1, 2020). + :type logs_live_ingested_bytes: int, none_type, optional + + :param logs_rehydrated_indexed_count: Contains the number of rehydrated log events indexed (data available as of December 1, 2020). + :type logs_rehydrated_indexed_count: int, none_type, optional + + :param logs_rehydrated_ingested_bytes: Contains the number of rehydrated log bytes ingested (data available as of December 1, 2020). + :type logs_rehydrated_ingested_bytes: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if billable_ingested_bytes is not unset: + kwargs["billable_ingested_bytes"] = billable_ingested_bytes + if hour is not unset: + kwargs["hour"] = hour + if indexed_events_count is not unset: + kwargs["indexed_events_count"] = indexed_events_count + if ingested_events_bytes is not unset: + kwargs["ingested_events_bytes"] = ingested_events_bytes + if logs_forwarding_events_bytes is not unset: + kwargs["logs_forwarding_events_bytes"] = logs_forwarding_events_bytes + if logs_live_indexed_count is not unset: + kwargs["logs_live_indexed_count"] = logs_live_indexed_count + if logs_live_ingested_bytes is not unset: + kwargs["logs_live_ingested_bytes"] = logs_live_ingested_bytes + if logs_rehydrated_indexed_count is not unset: + kwargs["logs_rehydrated_indexed_count"] = logs_rehydrated_indexed_count + if logs_rehydrated_ingested_bytes is not unset: + kwargs["logs_rehydrated_ingested_bytes"] = logs_rehydrated_ingested_bytes + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_logs_response.py b/datadog_api_client/v1/model/usage_logs_response.py new file mode 100644 index 0000000000..9342153226 --- /dev/null +++ b/datadog_api_client/v1/model/usage_logs_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_logs_hour import UsageLogsHour + +class UsageLogsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_logs_hour import UsageLogsHour + return { + "usage": ([UsageLogsHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageLogsHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of logs for each hour. + + :param usage: An array of objects regarding hourly usage of logs. + :type usage: [UsageLogsHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_metric_category.py b/datadog_api_client/v1/model/usage_metric_category.py new file mode 100644 index 0000000000..64a2106dcf --- /dev/null +++ b/datadog_api_client/v1/model/usage_metric_category.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UsageMetricCategory(ModelSimple): + """ + Contains the metric category. + + :param value: Must be one of ["standard", "custom"]. + :type value: str + """ + + allowed_values = { + "standard", + "custom", + } + STANDARD: ClassVar["UsageMetricCategory"] + CUSTOM: ClassVar["UsageMetricCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UsageMetricCategory.STANDARD = UsageMetricCategory("standard") +UsageMetricCategory.CUSTOM = UsageMetricCategory("custom") diff --git a/datadog_api_client/v1/model/usage_network_flows_hour.py b/datadog_api_client/v1/model/usage_network_flows_hour.py new file mode 100644 index 0000000000..abb6116b64 --- /dev/null +++ b/datadog_api_client/v1/model/usage_network_flows_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageNetworkFlowsHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "indexed_events_count": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "hour": "hour", + "indexed_events_count": "indexed_events_count", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, indexed_events_count: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Number of netflow events indexed for each hour for a given organization. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param indexed_events_count: Contains the number of netflow events indexed. + :type indexed_events_count: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if indexed_events_count is not unset: + kwargs["indexed_events_count"] = indexed_events_count + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_network_flows_response.py b/datadog_api_client/v1/model/usage_network_flows_response.py new file mode 100644 index 0000000000..4d0b869c48 --- /dev/null +++ b/datadog_api_client/v1/model/usage_network_flows_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_network_flows_hour import UsageNetworkFlowsHour + +class UsageNetworkFlowsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_network_flows_hour import UsageNetworkFlowsHour + return { + "usage": ([UsageNetworkFlowsHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageNetworkFlowsHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of netflow events indexed for each hour for a given organization. + + :param usage: Get hourly usage for Network Flows. + :type usage: [UsageNetworkFlowsHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_network_hosts_hour.py b/datadog_api_client/v1/model/usage_network_hosts_hour.py new file mode 100644 index 0000000000..987e3af97e --- /dev/null +++ b/datadog_api_client/v1/model/usage_network_hosts_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageNetworkHostsHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "host_count": (int, none_type), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "host_count": "host_count", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, host_count: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Number of active NPM hosts for each hour for a given organization. + + :param host_count: Contains the number of active NPM hosts. + :type host_count: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if host_count is not unset: + kwargs["host_count"] = host_count + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_network_hosts_response.py b/datadog_api_client/v1/model/usage_network_hosts_response.py new file mode 100644 index 0000000000..1abec2162c --- /dev/null +++ b/datadog_api_client/v1/model/usage_network_hosts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_network_hosts_hour import UsageNetworkHostsHour + +class UsageNetworkHostsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_network_hosts_hour import UsageNetworkHostsHour + return { + "usage": ([UsageNetworkHostsHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageNetworkHostsHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of active NPM hosts for each hour for a given organization. + + :param usage: Get hourly usage for NPM hosts. + :type usage: [UsageNetworkHostsHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_online_archive_hour.py b/datadog_api_client/v1/model/usage_online_archive_hour.py new file mode 100644 index 0000000000..8a55959944 --- /dev/null +++ b/datadog_api_client/v1/model/usage_online_archive_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageOnlineArchiveHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "online_archive_events_count": (int, none_type), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "hour": "hour", + "online_archive_events_count": "online_archive_events_count", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, online_archive_events_count: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Online Archive usage in a given hour. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param online_archive_events_count: Total count of online archived events within the hour. + :type online_archive_events_count: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if online_archive_events_count is not unset: + kwargs["online_archive_events_count"] = online_archive_events_count + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_online_archive_response.py b/datadog_api_client/v1/model/usage_online_archive_response.py new file mode 100644 index 0000000000..2fdef932d0 --- /dev/null +++ b/datadog_api_client/v1/model/usage_online_archive_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_online_archive_hour import UsageOnlineArchiveHour + +class UsageOnlineArchiveResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_online_archive_hour import UsageOnlineArchiveHour + return { + "usage": ([UsageOnlineArchiveHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageOnlineArchiveHour], UnsetType]=unset, **kwargs): + """ + Online Archive usage response. + + :param usage: Response containing Online Archive usage. + :type usage: [UsageOnlineArchiveHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_profiling_hour.py b/datadog_api_client/v1/model/usage_profiling_hour.py new file mode 100644 index 0000000000..901906acb2 --- /dev/null +++ b/datadog_api_client/v1/model/usage_profiling_hour.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageProfilingHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aas_count": (int, none_type), + "avg_container_agent_count": (int, none_type), + "host_count": (int, none_type), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "aas_count": "aas_count", + "avg_container_agent_count": "avg_container_agent_count", + "host_count": "host_count", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, aas_count: Union[int, none_type, UnsetType]=unset, avg_container_agent_count: Union[int, none_type, UnsetType]=unset, host_count: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + The number of profiled hosts for each hour for a given organization. + + :param aas_count: Contains the total number of profiled Azure app services reporting during a given hour. + :type aas_count: int, none_type, optional + + :param avg_container_agent_count: Get average number of container agents for that hour. + :type avg_container_agent_count: int, none_type, optional + + :param host_count: Contains the total number of profiled hosts reporting during a given hour. + :type host_count: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if aas_count is not unset: + kwargs["aas_count"] = aas_count + if avg_container_agent_count is not unset: + kwargs["avg_container_agent_count"] = avg_container_agent_count + if host_count is not unset: + kwargs["host_count"] = host_count + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_profiling_response.py b/datadog_api_client/v1/model/usage_profiling_response.py new file mode 100644 index 0000000000..31d9fbe325 --- /dev/null +++ b/datadog_api_client/v1/model/usage_profiling_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_profiling_hour import UsageProfilingHour + +class UsageProfilingResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_profiling_hour import UsageProfilingHour + return { + "usage": ([UsageProfilingHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageProfilingHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of profiled hosts for each hour for a given organization. + + :param usage: Get hourly usage for profiled hosts. + :type usage: [UsageProfilingHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_reports_type.py b/datadog_api_client/v1/model/usage_reports_type.py new file mode 100644 index 0000000000..7f26006991 --- /dev/null +++ b/datadog_api_client/v1/model/usage_reports_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UsageReportsType(ModelSimple): + """ + The type of reports. + + :param value: If omitted defaults to "reports". Must be one of ["reports"]. + :type value: str + """ + + allowed_values = { + "reports", + } + REPORTS: ClassVar["UsageReportsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UsageReportsType.REPORTS = UsageReportsType("reports") diff --git a/datadog_api_client/v1/model/usage_rum_sessions_hour.py b/datadog_api_client/v1/model/usage_rum_sessions_hour.py new file mode 100644 index 0000000000..a91223b0c4 --- /dev/null +++ b/datadog_api_client/v1/model/usage_rum_sessions_hour.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageRumSessionsHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + "replay_session_count": (int,), + "session_count": (int, none_type), + "session_count_android": (int, none_type), + "session_count_flutter": (int, none_type), + "session_count_ios": (int, none_type), + "session_count_reactnative": (int, none_type), + } + attribute_map = { + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + "replay_session_count": "replay_session_count", + "session_count": "session_count", + "session_count_android": "session_count_android", + "session_count_flutter": "session_count_flutter", + "session_count_ios": "session_count_ios", + "session_count_reactnative": "session_count_reactnative", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, replay_session_count: Union[int, UnsetType]=unset, session_count: Union[int, none_type, UnsetType]=unset, session_count_android: Union[int, none_type, UnsetType]=unset, session_count_flutter: Union[int, none_type, UnsetType]=unset, session_count_ios: Union[int, none_type, UnsetType]=unset, session_count_reactnative: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Number of RUM sessions recorded for each hour for a given organization. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param replay_session_count: Contains the number of RUM Session Replay counts (data available beginning November 1, 2021). + :type replay_session_count: int, optional + + :param session_count: Contains the number of browser RUM lite Sessions. + :type session_count: int, none_type, optional + + :param session_count_android: Contains the number of mobile RUM sessions on Android (data available beginning December 1, 2020). + :type session_count_android: int, none_type, optional + + :param session_count_flutter: Contains the number of mobile RUM sessions on Flutter (data available beginning March 1, 2023). + :type session_count_flutter: int, none_type, optional + + :param session_count_ios: Contains the number of mobile RUM sessions on iOS (data available beginning December 1, 2020). + :type session_count_ios: int, none_type, optional + + :param session_count_reactnative: Contains the number of mobile RUM sessions on React Native (data available beginning May 1, 2022). + :type session_count_reactnative: int, none_type, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if replay_session_count is not unset: + kwargs["replay_session_count"] = replay_session_count + if session_count is not unset: + kwargs["session_count"] = session_count + if session_count_android is not unset: + kwargs["session_count_android"] = session_count_android + if session_count_flutter is not unset: + kwargs["session_count_flutter"] = session_count_flutter + if session_count_ios is not unset: + kwargs["session_count_ios"] = session_count_ios + if session_count_reactnative is not unset: + kwargs["session_count_reactnative"] = session_count_reactnative + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_rum_sessions_response.py b/datadog_api_client/v1/model/usage_rum_sessions_response.py new file mode 100644 index 0000000000..81a4fbabff --- /dev/null +++ b/datadog_api_client/v1/model/usage_rum_sessions_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_rum_sessions_hour import UsageRumSessionsHour + +class UsageRumSessionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_rum_sessions_hour import UsageRumSessionsHour + return { + "usage": ([UsageRumSessionsHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageRumSessionsHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of RUM sessions for each hour for a given organization. + + :param usage: Get hourly usage for RUM sessions. + :type usage: [UsageRumSessionsHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_rum_units_hour.py b/datadog_api_client/v1/model/usage_rum_units_hour.py new file mode 100644 index 0000000000..1b62ab956c --- /dev/null +++ b/datadog_api_client/v1/model/usage_rum_units_hour.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageRumUnitsHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "browser_rum_units": (int, none_type), + "mobile_rum_units": (int, none_type), + "org_name": (str,), + "public_id": (str,), + "rum_units": (int, none_type), + } + attribute_map = { + "browser_rum_units": "browser_rum_units", + "mobile_rum_units": "mobile_rum_units", + "org_name": "org_name", + "public_id": "public_id", + "rum_units": "rum_units", + } + + def __init__(self_, browser_rum_units: Union[int, none_type, UnsetType]=unset, mobile_rum_units: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, rum_units: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Number of RUM Units used for each hour for a given organization (data available as of November 1, 2021). + + :param browser_rum_units: The number of browser RUM units. + :type browser_rum_units: int, none_type, optional + + :param mobile_rum_units: The number of mobile RUM units. + :type mobile_rum_units: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param rum_units: Total RUM units across mobile and browser RUM. + :type rum_units: int, none_type, optional + """ + if browser_rum_units is not unset: + kwargs["browser_rum_units"] = browser_rum_units + if mobile_rum_units is not unset: + kwargs["mobile_rum_units"] = mobile_rum_units + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if rum_units is not unset: + kwargs["rum_units"] = rum_units + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_rum_units_response.py b/datadog_api_client/v1/model/usage_rum_units_response.py new file mode 100644 index 0000000000..1ba3f124fc --- /dev/null +++ b/datadog_api_client/v1/model/usage_rum_units_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_rum_units_hour import UsageRumUnitsHour + +class UsageRumUnitsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_rum_units_hour import UsageRumUnitsHour + return { + "usage": ([UsageRumUnitsHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageRumUnitsHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of RUM Units for each hour for a given organization. + + :param usage: Get hourly usage for RUM Units. + :type usage: [UsageRumUnitsHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_sds_hour.py b/datadog_api_client/v1/model/usage_sds_hour.py new file mode 100644 index 0000000000..5ab3097223 --- /dev/null +++ b/datadog_api_client/v1/model/usage_sds_hour.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageSDSHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "apm_scanned_bytes": (int, none_type), + "events_scanned_bytes": (int, none_type), + "hour": (datetime,), + "logs_scanned_bytes": (int, none_type), + "org_name": (str,), + "public_id": (str,), + "rum_scanned_bytes": (int, none_type), + "total_scanned_bytes": (int, none_type), + } + attribute_map = { + "apm_scanned_bytes": "apm_scanned_bytes", + "events_scanned_bytes": "events_scanned_bytes", + "hour": "hour", + "logs_scanned_bytes": "logs_scanned_bytes", + "org_name": "org_name", + "public_id": "public_id", + "rum_scanned_bytes": "rum_scanned_bytes", + "total_scanned_bytes": "total_scanned_bytes", + } + + def __init__(self_, apm_scanned_bytes: Union[int, none_type, UnsetType]=unset, events_scanned_bytes: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, logs_scanned_bytes: Union[int, none_type, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, rum_scanned_bytes: Union[int, none_type, UnsetType]=unset, total_scanned_bytes: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Sensitive Data Scanner usage for a given organization for a given hour. + + :param apm_scanned_bytes: The total number of bytes scanned of APM usage across all usage types by the Sensitive Data Scanner from the start of the given hour’s month until the given hour. + :type apm_scanned_bytes: int, none_type, optional + + :param events_scanned_bytes: The total number of bytes scanned of Events usage across all usage types by the Sensitive Data Scanner from the start of the given hour’s month until the given hour. + :type events_scanned_bytes: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param logs_scanned_bytes: The total number of bytes scanned of logs usage by the Sensitive Data Scanner from the start of the given hour’s month until the given hour. + :type logs_scanned_bytes: int, none_type, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param rum_scanned_bytes: The total number of bytes scanned of RUM usage across all usage types by the Sensitive Data Scanner from the start of the given hour’s month until the given hour. + :type rum_scanned_bytes: int, none_type, optional + + :param total_scanned_bytes: The total number of bytes scanned across all usage types by the Sensitive Data Scanner from the start of the given hour’s month until the given hour. + :type total_scanned_bytes: int, none_type, optional + """ + if apm_scanned_bytes is not unset: + kwargs["apm_scanned_bytes"] = apm_scanned_bytes + if events_scanned_bytes is not unset: + kwargs["events_scanned_bytes"] = events_scanned_bytes + if hour is not unset: + kwargs["hour"] = hour + if logs_scanned_bytes is not unset: + kwargs["logs_scanned_bytes"] = logs_scanned_bytes + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if rum_scanned_bytes is not unset: + kwargs["rum_scanned_bytes"] = rum_scanned_bytes + if total_scanned_bytes is not unset: + kwargs["total_scanned_bytes"] = total_scanned_bytes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_sds_response.py b/datadog_api_client/v1/model/usage_sds_response.py new file mode 100644 index 0000000000..f7832ed47c --- /dev/null +++ b/datadog_api_client/v1/model/usage_sds_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_sds_hour import UsageSDSHour + +class UsageSDSResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_sds_hour import UsageSDSHour + return { + "usage": ([UsageSDSHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageSDSHour], UnsetType]=unset, **kwargs): + """ + Response containing the Sensitive Data Scanner usage for each hour for a given organization. + + :param usage: Get hourly usage for Sensitive Data Scanner. + :type usage: [UsageSDSHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_snmp_hour.py b/datadog_api_client/v1/model/usage_snmp_hour.py new file mode 100644 index 0000000000..99712fc3d0 --- /dev/null +++ b/datadog_api_client/v1/model/usage_snmp_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageSNMPHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + "snmp_devices": (int, none_type), + } + attribute_map = { + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + "snmp_devices": "snmp_devices", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, snmp_devices: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + The number of SNMP devices for each hour for a given organization. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param snmp_devices: Contains the number of SNMP devices. + :type snmp_devices: int, none_type, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if snmp_devices is not unset: + kwargs["snmp_devices"] = snmp_devices + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_snmp_response.py b/datadog_api_client/v1/model/usage_snmp_response.py new file mode 100644 index 0000000000..4b318d85c0 --- /dev/null +++ b/datadog_api_client/v1/model/usage_snmp_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_snmp_hour import UsageSNMPHour + +class UsageSNMPResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_snmp_hour import UsageSNMPHour + return { + "usage": ([UsageSNMPHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageSNMPHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of SNMP devices for each hour for a given organization. + + :param usage: Get hourly usage for SNMP devices. + :type usage: [UsageSNMPHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_sort.py b/datadog_api_client/v1/model/usage_sort.py new file mode 100644 index 0000000000..1a8bf17277 --- /dev/null +++ b/datadog_api_client/v1/model/usage_sort.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UsageSort(ModelSimple): + """ + The field to sort by. + + :param value: If omitted defaults to "start_date". Must be one of ["computed_on", "size", "start_date", "end_date"]. + :type value: str + """ + + allowed_values = { + "computed_on", + "size", + "start_date", + "end_date", + } + COMPUTED_ON: ClassVar["UsageSort"] + SIZE: ClassVar["UsageSort"] + START_DATE: ClassVar["UsageSort"] + END_DATE: ClassVar["UsageSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UsageSort.COMPUTED_ON = UsageSort("computed_on") +UsageSort.SIZE = UsageSort("size") +UsageSort.START_DATE = UsageSort("start_date") +UsageSort.END_DATE = UsageSort("end_date") diff --git a/datadog_api_client/v1/model/usage_sort_direction.py b/datadog_api_client/v1/model/usage_sort_direction.py new file mode 100644 index 0000000000..0998ceada7 --- /dev/null +++ b/datadog_api_client/v1/model/usage_sort_direction.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UsageSortDirection(ModelSimple): + """ + The direction to sort by. + + :param value: If omitted defaults to "desc". Must be one of ["desc", "asc"]. + :type value: str + """ + + allowed_values = { + "desc", + "asc", + } + DESC: ClassVar["UsageSortDirection"] + ASC: ClassVar["UsageSortDirection"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UsageSortDirection.DESC = UsageSortDirection("desc") +UsageSortDirection.ASC = UsageSortDirection("asc") diff --git a/datadog_api_client/v1/model/usage_specified_custom_reports_attributes.py b/datadog_api_client/v1/model/usage_specified_custom_reports_attributes.py new file mode 100644 index 0000000000..1dd50e80c3 --- /dev/null +++ b/datadog_api_client/v1/model/usage_specified_custom_reports_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageSpecifiedCustomReportsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "computed_on": (str,), + "end_date": (str,), + "location": (str,), + "size": (int,), + "start_date": (str,), + "tags": ([str],), + } + attribute_map = { + "computed_on": "computed_on", + "end_date": "end_date", + "location": "location", + "size": "size", + "start_date": "start_date", + "tags": "tags", + } + + def __init__(self_, computed_on: Union[str, UnsetType]=unset, end_date: Union[str, UnsetType]=unset, location: Union[str, UnsetType]=unset, size: Union[int, UnsetType]=unset, start_date: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The response containing attributes for specified custom reports. + + :param computed_on: The date the specified custom report was computed. + :type computed_on: str, optional + + :param end_date: The ending date of specified custom report. + :type end_date: str, optional + + :param location: A downloadable file for the specified custom reporting file. + :type location: str, optional + + :param size: size + :type size: int, optional + + :param start_date: The starting date of specified custom report. + :type start_date: str, optional + + :param tags: A list of tags to apply to specified custom reports. + :type tags: [str], optional + """ + if computed_on is not unset: + kwargs["computed_on"] = computed_on + if end_date is not unset: + kwargs["end_date"] = end_date + if location is not unset: + kwargs["location"] = location + if size is not unset: + kwargs["size"] = size + if start_date is not unset: + kwargs["start_date"] = start_date + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_specified_custom_reports_data.py b/datadog_api_client/v1/model/usage_specified_custom_reports_data.py new file mode 100644 index 0000000000..313602a31b --- /dev/null +++ b/datadog_api_client/v1/model/usage_specified_custom_reports_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_specified_custom_reports_attributes import UsageSpecifiedCustomReportsAttributes + from datadog_api_client.v1.model.usage_reports_type import UsageReportsType + +class UsageSpecifiedCustomReportsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_specified_custom_reports_attributes import UsageSpecifiedCustomReportsAttributes + from datadog_api_client.v1.model.usage_reports_type import UsageReportsType + return { + "attributes": (UsageSpecifiedCustomReportsAttributes,), + "id": (str,), + "type": (UsageReportsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[UsageSpecifiedCustomReportsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[UsageReportsType, UnsetType]=unset, **kwargs): + """ + Response containing date and type for specified custom reports. + + :param attributes: The response containing attributes for specified custom reports. + :type attributes: UsageSpecifiedCustomReportsAttributes, optional + + :param id: The date for specified custom reports. + :type id: str, optional + + :param type: The type of reports. + :type type: UsageReportsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_specified_custom_reports_meta.py b/datadog_api_client/v1/model/usage_specified_custom_reports_meta.py new file mode 100644 index 0000000000..58b996fe32 --- /dev/null +++ b/datadog_api_client/v1/model/usage_specified_custom_reports_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_specified_custom_reports_page import UsageSpecifiedCustomReportsPage + +class UsageSpecifiedCustomReportsMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_specified_custom_reports_page import UsageSpecifiedCustomReportsPage + return { + "page": (UsageSpecifiedCustomReportsPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[UsageSpecifiedCustomReportsPage, UnsetType]=unset, **kwargs): + """ + The object containing document metadata. + + :param page: The object containing page total count for specified ID. + :type page: UsageSpecifiedCustomReportsPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_specified_custom_reports_page.py b/datadog_api_client/v1/model/usage_specified_custom_reports_page.py new file mode 100644 index 0000000000..6e3b6fa977 --- /dev/null +++ b/datadog_api_client/v1/model/usage_specified_custom_reports_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageSpecifiedCustomReportsPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "total_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + The object containing page total count for specified ID. + + :param total_count: Total page count. + :type total_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_specified_custom_reports_response.py b/datadog_api_client/v1/model/usage_specified_custom_reports_response.py new file mode 100644 index 0000000000..429e10c0e6 --- /dev/null +++ b/datadog_api_client/v1/model/usage_specified_custom_reports_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_specified_custom_reports_data import UsageSpecifiedCustomReportsData + from datadog_api_client.v1.model.usage_specified_custom_reports_meta import UsageSpecifiedCustomReportsMeta + +class UsageSpecifiedCustomReportsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_specified_custom_reports_data import UsageSpecifiedCustomReportsData + from datadog_api_client.v1.model.usage_specified_custom_reports_meta import UsageSpecifiedCustomReportsMeta + return { + "data": (UsageSpecifiedCustomReportsData,), + "meta": (UsageSpecifiedCustomReportsMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[UsageSpecifiedCustomReportsData, UnsetType]=unset, meta: Union[UsageSpecifiedCustomReportsMeta, UnsetType]=unset, **kwargs): + """ + Returns available specified custom reports. + + :param data: Response containing date and type for specified custom reports. + :type data: UsageSpecifiedCustomReportsData, optional + + :param meta: The object containing document metadata. + :type meta: UsageSpecifiedCustomReportsMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_summary_date.py b/datadog_api_client/v1/model/usage_summary_date.py new file mode 100644 index 0000000000..b39711ed68 --- /dev/null +++ b/datadog_api_client/v1/model/usage_summary_date.py @@ -0,0 +1,2158 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_summary_date_org import UsageSummaryDateOrg + +class UsageSummaryDate(ModelNormal): + # Cross-SDK semantic marker. In Python, typed fields are already accessible via + # bracket notation (model["key"]) through _data_store, so no runtime change is needed. + _keep_typed_in_additional_properties = True + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_summary_date_org import UsageSummaryDateOrg + return { + "agent_host_top99p": (int,), + "ai_credits_agent_builder_ai_credits_sum": (int,), + "ai_credits_bits_assistant_ai_credits_sum": (int,), + "ai_credits_bits_dev_ai_credits_sum": (int,), + "ai_credits_bits_sre_ai_credits_sum": (int,), + "ai_credits_sum": (int,), + "apm_azure_app_service_host_top99p": (int,), + "apm_devsecops_host_top99p": (int,), + "apm_enterprise_standalone_hosts_top99p": (int,), + "apm_fargate_count_avg": (int,), + "apm_host_top99p": (int,), + "apm_pro_standalone_hosts_top99p": (int,), + "appsec_fargate_count_avg": (int,), + "asm_serverless_sum": (int,), + "audit_logs_lines_indexed_sum": (int,), + "audit_trail_enabled_hwm": (int,), + "audit_trail_event_forwarding_events_sum": (int,), + "avg_profiled_fargate_tasks": (int,), + "aws_host_top99p": (int,), + "aws_lambda_func_count": (int,), + "aws_lambda_invocations_sum": (int,), + "azure_app_service_top99p": (int,), + "billable_ingested_bytes_sum": (int,), + "bits_ai_investigations_sum": (int,), + "browser_rum_lite_session_count_sum": (int,), + "browser_rum_replay_session_count_sum": (int,), + "browser_rum_units_sum": (int,), + "ccm_anthropic_spend_last": (int,), + "ccm_aws_spend_last": (int,), + "ccm_azure_spend_last": (int,), + "ccm_confluent_spend_last": (int,), + "ccm_databricks_spend_last": (int,), + "ccm_elastic_spend_last": (int,), + "ccm_fastly_spend_last": (int,), + "ccm_gcp_spend_last": (int,), + "ccm_github_spend_last": (int,), + "ccm_mongodb_spend_last": (int,), + "ccm_oci_spend_last": (int,), + "ccm_openai_spend_last": (int,), + "ccm_snowflake_spend_last": (int,), + "ccm_spend_monitored_ent_last": (int,), + "ccm_spend_monitored_pro_last": (int,), + "ccm_twilio_spend_last": (int,), + "ci_pipeline_indexed_spans_sum": (int,), + "ci_test_indexed_spans_sum": (int,), + "ci_visibility_itr_committers_hwm": (int,), + "ci_visibility_pipeline_committers_hwm": (int,), + "ci_visibility_test_committers_hwm": (int,), + "cloud_cost_management_aws_host_count_avg": (int,), + "cloud_cost_management_azure_host_count_avg": (int,), + "cloud_cost_management_gcp_host_count_avg": (int,), + "cloud_cost_management_host_count_avg": (int,), + "cloud_cost_management_oci_host_count_avg": (int,), + "cloud_siem_events_sum": (int,), + "cloud_siem_indexed_logs_sum": (int,), + "code_analysis_sa_committers_hwm": (int,), + "code_analysis_sca_committers_hwm": (int,), + "code_security_host_top99p": (int,), + "container_avg": (int,), + "container_excl_agent_avg": (int,), + "container_hwm": (int,), + "csm_container_enterprise_compliance_count_sum": (int,), + "csm_container_enterprise_cws_count_sum": (int,), + "csm_container_enterprise_total_count_sum": (int,), + "csm_host_enterprise_aas_host_count_top99p": (int,), + "csm_host_enterprise_aws_host_count_top99p": (int,), + "csm_host_enterprise_azure_host_count_top99p": (int,), + "csm_host_enterprise_compliance_host_count_top99p": (int,), + "csm_host_enterprise_cws_host_count_top99p": (int,), + "csm_host_enterprise_gcp_host_count_top99p": (int,), + "csm_host_enterprise_oci_host_count_top99p": (int,), + "csm_host_enterprise_total_host_count_top99p": (int,), + "csm_host_pro_hosts_agentless_scanners_sum": (int,), + "csm_host_pro_hosts_agentless_scanners_top99p": (int,), + "csm_host_pro_oci_host_count_top99p": (int,), + "cspm_aas_host_top99p": (int,), + "cspm_aws_host_top99p": (int,), + "cspm_azure_host_top99p": (int,), + "cspm_container_avg": (int,), + "cspm_container_hwm": (int,), + "cspm_gcp_host_top99p": (int,), + "cspm_host_top99p": (int,), + "cspm_hosts_agentless_scanners_sum": (int,), + "cspm_hosts_agentless_scanners_top99p": (int,), + "custom_ts_avg": (int,), + "cws_container_count_avg": (int,), + "cws_fargate_task_avg": (int,), + "cws_host_top99p": (int,), + "data_jobs_monitoring_host_hr_sum": (int,), + "data_stream_monitoring_host_count_sum": (int,), + "data_stream_monitoring_host_count_top99p": (int,), + "date": (datetime,), + "dbm_host_top99p": (int,), + "dbm_queries_count_avg": (int,), + "do_jobs_monitoring_orchestrators_job_hours_sum": (int,), + "eph_infra_host_agent_sum": (int,), + "eph_infra_host_alibaba_sum": (int,), + "eph_infra_host_aws_sum": (int,), + "eph_infra_host_azure_sum": (int,), + "eph_infra_host_basic_infra_basic_agent_sum": (int,), + "eph_infra_host_basic_infra_basic_vsphere_sum": (int,), + "eph_infra_host_basic_sum": (int,), + "eph_infra_host_ent_sum": (int,), + "eph_infra_host_gcp_sum": (int,), + "eph_infra_host_heroku_sum": (int,), + "eph_infra_host_only_aas_sum": (int,), + "eph_infra_host_only_vsphere_sum": (int,), + "eph_infra_host_opentelemetry_apm_sum": (int,), + "eph_infra_host_opentelemetry_sum": (int,), + "eph_infra_host_pro_sum": (int,), + "eph_infra_host_proplus_sum": (int,), + "eph_infra_host_proxmox_sum": (int,), + "error_tracking_apm_error_events_sum": (int,), + "error_tracking_error_events_sum": (int,), + "error_tracking_events_sum": (int,), + "error_tracking_rum_error_events_sum": (int,), + "event_management_correlation_correlated_events_sum": (int,), + "event_management_correlation_correlated_related_events_sum": (int,), + "event_management_correlation_sum": (int,), + "fargate_container_profiler_profiling_fargate_avg": (int,), + "fargate_container_profiler_profiling_fargate_eks_avg": (int,), + "fargate_tasks_count_avg": (int,), + "fargate_tasks_count_hwm": (int,), + "feature_flags_config_requests_sum": (int,), + "flex_logs_compute_large_avg": (int,), + "flex_logs_compute_medium_avg": (int,), + "flex_logs_compute_small_avg": (int,), + "flex_logs_compute_xlarge_avg": (int,), + "flex_logs_compute_xsmall_avg": (int,), + "flex_logs_starter_avg": (int,), + "flex_logs_starter_storage_index_avg": (int,), + "flex_logs_starter_storage_retention_adjustment_avg": (int,), + "flex_stored_logs_avg": (int,), + "forwarding_events_bytes_sum": (int,), + "gcp_host_top99p": (int,), + "heroku_host_top99p": (int,), + "incident_management_monthly_active_users_hwm": (int,), + "incident_management_seats_hwm": (int,), + "indexed_events_count_sum": (int,), + "indexed_points_sum": (int,), + "infra_cpu_avg": (int,), + "infra_cpu_default_infra_host_vcpu_agent_avg": (int,), + "infra_cpu_default_infra_host_vcpu_agent_basic_avg": (int,), + "infra_cpu_default_infra_host_vcpu_agent_basic_sum": (int,), + "infra_cpu_default_infra_host_vcpu_agent_sum": (int,), + "infra_cpu_default_infra_host_vcpu_aws_avg": (int,), + "infra_cpu_default_infra_host_vcpu_aws_sum": (int,), + "infra_cpu_default_infra_host_vcpu_azure_avg": (int,), + "infra_cpu_default_infra_host_vcpu_azure_sum": (int,), + "infra_cpu_default_infra_host_vcpu_gcp_avg": (int,), + "infra_cpu_default_infra_host_vcpu_gcp_sum": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_avg": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_basic_avg": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_basic_sum": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_sum": (int,), + "infra_cpu_default_infra_host_vcpu_opentelemetry_avg": (int,), + "infra_cpu_default_infra_host_vcpu_opentelemetry_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_agent_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_agent_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_aws_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_aws_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_azure_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_azure_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_gcp_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_gcp_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_nutanix_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_nutanix_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_opentelemetry_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_opentelemetry_sum": (int,), + "infra_cpu_sum": (int,), + "infra_edge_monitoring_devices_top99p": (int,), + "infra_host_basic_infra_basic_agent_top99p": (int,), + "infra_host_basic_infra_basic_vsphere_top99p": (int,), + "infra_host_basic_top99p": (int,), + "infra_host_top99p": (int,), + "infra_storage_mgmt_objects_count_avg": (int,), + "ingest_points_sum": (int,), + "ingested_events_bytes_sum": (int,), + "iot_apm_host_sum": (int,), + "iot_apm_host_top99p": (int,), + "iot_device_sum": (int,), + "iot_device_top99p": (int,), + "llm_observability_15day_retention_spans_sum": (int,), + "llm_observability_30day_retention_spans_sum": (int,), + "llm_observability_60day_retention_spans_sum": (int,), + "llm_observability_90day_retention_spans_sum": (int,), + "llm_observability_min_spend_sum": (int,), + "llm_observability_sum": (int,), + "logs_archive_search_gb_scanned_sum": (int,), + "metric_names_sum": (int,), + "mobile_rum_lite_session_count_sum": (int,), + "mobile_rum_session_count_android_sum": (int,), + "mobile_rum_session_count_flutter_sum": (int,), + "mobile_rum_session_count_ios_sum": (int,), + "mobile_rum_session_count_reactnative_sum": (int,), + "mobile_rum_session_count_roku_sum": (int,), + "mobile_rum_session_count_sum": (int,), + "mobile_rum_units_sum": (int,), + "ndm_netflow_events_sum": (int,), + "netflow_indexed_events_count_sum": (int,), + "network_device_wireless_top99p": (int,), + "network_path_sum": (int,), + "npm_host_top99p": (int,), + "observability_pipelines_bytes_processed_sum": (int,), + "oci_host_sum": (int,), + "oci_host_top99p": (int,), + "on_call_seat_hwm": (int,), + "online_archive_events_count_sum": (int,), + "opentelemetry_apm_host_top99p": (int,), + "opentelemetry_host_top99p": (int,), + "orgs": ([UsageSummaryDateOrg],), + "product_analytics_sum": (int,), + "profiling_aas_count_top99p": (int,), + "profiling_host_top99p": (int,), + "proxmox_host_sum": (int,), + "proxmox_host_top99p": (int,), + "published_app_hwm": (int,), + "rum_browser_and_mobile_session_count": (int,), + "rum_browser_legacy_session_count_sum": (int,), + "rum_browser_lite_session_count_sum": (int,), + "rum_browser_replay_session_count_sum": (int,), + "rum_indexed_sessions_sum": (int,), + "rum_ingested_sessions_sum": (int,), + "rum_lite_session_count_sum": (int,), + "rum_mobile_legacy_session_count_android_sum": (int,), + "rum_mobile_legacy_session_count_flutter_sum": (int,), + "rum_mobile_legacy_session_count_ios_sum": (int,), + "rum_mobile_legacy_session_count_reactnative_sum": (int,), + "rum_mobile_legacy_session_count_roku_sum": (int,), + "rum_mobile_lite_session_count_android_sum": (int,), + "rum_mobile_lite_session_count_flutter_sum": (int,), + "rum_mobile_lite_session_count_ios_sum": (int,), + "rum_mobile_lite_session_count_kotlinmultiplatform_sum": (int,), + "rum_mobile_lite_session_count_reactnative_sum": (int,), + "rum_mobile_lite_session_count_roku_sum": (int,), + "rum_mobile_lite_session_count_unity_sum": (int,), + "rum_mobile_replay_session_count_android_sum": (int,), + "rum_mobile_replay_session_count_ios_sum": (int,), + "rum_mobile_replay_session_count_kotlinmultiplatform_sum": (int,), + "rum_mobile_replay_session_count_reactnative_sum": (int,), + "rum_replay_session_count_sum": (int,), + "rum_session_count_sum": (int,), + "rum_session_replay_add_on_sum": (int,), + "rum_total_session_count_sum": (int,), + "rum_units_sum": (int,), + "sca_fargate_count_avg": (int,), + "sca_fargate_count_hwm": (int,), + "sds_apm_scanned_bytes_sum": (int,), + "sds_events_scanned_bytes_sum": (int,), + "sds_logs_scanned_bytes_sum": (int,), + "sds_rum_scanned_bytes_sum": (int,), + "sds_total_scanned_bytes_sum": (int,), + "serverless_apps_apm_apm_azure_appservice_instances_avg": (int,), + "serverless_apps_apm_apm_azure_azurefunction_instances_avg": (int,), + "serverless_apps_apm_apm_azure_containerapp_instances_avg": (int,), + "serverless_apps_apm_apm_fargate_ecs_tasks_avg": (int,), + "serverless_apps_apm_apm_gcp_cloudfunction_instances_avg": (int,), + "serverless_apps_apm_apm_gcp_cloudrun_instances_avg": (int,), + "serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg": (int,), + "serverless_apps_apm_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg": (int,), + "serverless_apps_apm_excl_fargate_avg": (int,), + "serverless_apps_azure_container_app_instances_avg": (int,), + "serverless_apps_azure_count_avg": (int,), + "serverless_apps_azure_function_app_instances_avg": (int,), + "serverless_apps_azure_web_app_instances_avg": (int,), + "serverless_apps_dsm_fargate_tasks_avg": (int,), + "serverless_apps_ecs_avg": (int,), + "serverless_apps_eks_avg": (int,), + "serverless_apps_excl_fargate_avg": (int,), + "serverless_apps_excl_fargate_azure_container_app_instances_avg": (int,), + "serverless_apps_excl_fargate_azure_function_app_instances_avg": (int,), + "serverless_apps_excl_fargate_azure_web_app_instances_avg": (int,), + "serverless_apps_excl_fargate_google_cloud_functions_instances_avg": (int,), + "serverless_apps_excl_fargate_google_cloud_run_instances_avg": (int,), + "serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg": (int,), + "serverless_apps_google_cloud_functions_instances_avg": (int,), + "serverless_apps_google_cloud_run_instances_avg": (int,), + "serverless_apps_google_count_avg": (int,), + "serverless_apps_infra_gcp_gke_autopilot_pods_avg": (int,), + "serverless_apps_total_count_avg": (int,), + "siem_12mo_retention_sum": (int,), + "siem_6mo_retention_sum": (int,), + "siem_analyzed_logs_add_on_count_sum": (int,), + "snmp_device_count_sum": (int,), + "snmp_device_count_top99p": (int,), + "synthetics_browser_check_calls_count_sum": (int,), + "synthetics_check_calls_count_sum": (int,), + "synthetics_mobile_test_runs_sum": (int,), + "synthetics_parallel_testing_max_slots_hwm": (int,), + "trace_search_indexed_events_count_sum": (int,), + "twol_ingested_events_bytes_sum": (int,), + "universal_service_monitoring_host_top99p": (int,), + "vsphere_host_top99p": (int,), + "vuln_management_host_count_top99p": (int,), + "workflow_executions_usage_sum": (int,), + } + attribute_map = { + "agent_host_top99p": "agent_host_top99p", + "ai_credits_agent_builder_ai_credits_sum": "ai_credits_agent_builder_ai_credits_sum", + "ai_credits_bits_assistant_ai_credits_sum": "ai_credits_bits_assistant_ai_credits_sum", + "ai_credits_bits_dev_ai_credits_sum": "ai_credits_bits_dev_ai_credits_sum", + "ai_credits_bits_sre_ai_credits_sum": "ai_credits_bits_sre_ai_credits_sum", + "ai_credits_sum": "ai_credits_sum", + "apm_azure_app_service_host_top99p": "apm_azure_app_service_host_top99p", + "apm_devsecops_host_top99p": "apm_devsecops_host_top99p", + "apm_enterprise_standalone_hosts_top99p": "apm_enterprise_standalone_hosts_top99p", + "apm_fargate_count_avg": "apm_fargate_count_avg", + "apm_host_top99p": "apm_host_top99p", + "apm_pro_standalone_hosts_top99p": "apm_pro_standalone_hosts_top99p", + "appsec_fargate_count_avg": "appsec_fargate_count_avg", + "asm_serverless_sum": "asm_serverless_sum", + "audit_logs_lines_indexed_sum": "audit_logs_lines_indexed_sum", + "audit_trail_enabled_hwm": "audit_trail_enabled_hwm", + "audit_trail_event_forwarding_events_sum": "audit_trail_event_forwarding_events_sum", + "avg_profiled_fargate_tasks": "avg_profiled_fargate_tasks", + "aws_host_top99p": "aws_host_top99p", + "aws_lambda_func_count": "aws_lambda_func_count", + "aws_lambda_invocations_sum": "aws_lambda_invocations_sum", + "azure_app_service_top99p": "azure_app_service_top99p", + "billable_ingested_bytes_sum": "billable_ingested_bytes_sum", + "bits_ai_investigations_sum": "bits_ai_investigations_sum", + "browser_rum_lite_session_count_sum": "browser_rum_lite_session_count_sum", + "browser_rum_replay_session_count_sum": "browser_rum_replay_session_count_sum", + "browser_rum_units_sum": "browser_rum_units_sum", + "ccm_anthropic_spend_last": "ccm_anthropic_spend_last", + "ccm_aws_spend_last": "ccm_aws_spend_last", + "ccm_azure_spend_last": "ccm_azure_spend_last", + "ccm_confluent_spend_last": "ccm_confluent_spend_last", + "ccm_databricks_spend_last": "ccm_databricks_spend_last", + "ccm_elastic_spend_last": "ccm_elastic_spend_last", + "ccm_fastly_spend_last": "ccm_fastly_spend_last", + "ccm_gcp_spend_last": "ccm_gcp_spend_last", + "ccm_github_spend_last": "ccm_github_spend_last", + "ccm_mongodb_spend_last": "ccm_mongodb_spend_last", + "ccm_oci_spend_last": "ccm_oci_spend_last", + "ccm_openai_spend_last": "ccm_openai_spend_last", + "ccm_snowflake_spend_last": "ccm_snowflake_spend_last", + "ccm_spend_monitored_ent_last": "ccm_spend_monitored_ent_last", + "ccm_spend_monitored_pro_last": "ccm_spend_monitored_pro_last", + "ccm_twilio_spend_last": "ccm_twilio_spend_last", + "ci_pipeline_indexed_spans_sum": "ci_pipeline_indexed_spans_sum", + "ci_test_indexed_spans_sum": "ci_test_indexed_spans_sum", + "ci_visibility_itr_committers_hwm": "ci_visibility_itr_committers_hwm", + "ci_visibility_pipeline_committers_hwm": "ci_visibility_pipeline_committers_hwm", + "ci_visibility_test_committers_hwm": "ci_visibility_test_committers_hwm", + "cloud_cost_management_aws_host_count_avg": "cloud_cost_management_aws_host_count_avg", + "cloud_cost_management_azure_host_count_avg": "cloud_cost_management_azure_host_count_avg", + "cloud_cost_management_gcp_host_count_avg": "cloud_cost_management_gcp_host_count_avg", + "cloud_cost_management_host_count_avg": "cloud_cost_management_host_count_avg", + "cloud_cost_management_oci_host_count_avg": "cloud_cost_management_oci_host_count_avg", + "cloud_siem_events_sum": "cloud_siem_events_sum", + "cloud_siem_indexed_logs_sum": "cloud_siem_indexed_logs_sum", + "code_analysis_sa_committers_hwm": "code_analysis_sa_committers_hwm", + "code_analysis_sca_committers_hwm": "code_analysis_sca_committers_hwm", + "code_security_host_top99p": "code_security_host_top99p", + "container_avg": "container_avg", + "container_excl_agent_avg": "container_excl_agent_avg", + "container_hwm": "container_hwm", + "csm_container_enterprise_compliance_count_sum": "csm_container_enterprise_compliance_count_sum", + "csm_container_enterprise_cws_count_sum": "csm_container_enterprise_cws_count_sum", + "csm_container_enterprise_total_count_sum": "csm_container_enterprise_total_count_sum", + "csm_host_enterprise_aas_host_count_top99p": "csm_host_enterprise_aas_host_count_top99p", + "csm_host_enterprise_aws_host_count_top99p": "csm_host_enterprise_aws_host_count_top99p", + "csm_host_enterprise_azure_host_count_top99p": "csm_host_enterprise_azure_host_count_top99p", + "csm_host_enterprise_compliance_host_count_top99p": "csm_host_enterprise_compliance_host_count_top99p", + "csm_host_enterprise_cws_host_count_top99p": "csm_host_enterprise_cws_host_count_top99p", + "csm_host_enterprise_gcp_host_count_top99p": "csm_host_enterprise_gcp_host_count_top99p", + "csm_host_enterprise_oci_host_count_top99p": "csm_host_enterprise_oci_host_count_top99p", + "csm_host_enterprise_total_host_count_top99p": "csm_host_enterprise_total_host_count_top99p", + "csm_host_pro_hosts_agentless_scanners_sum": "csm_host_pro_hosts_agentless_scanners_sum", + "csm_host_pro_hosts_agentless_scanners_top99p": "csm_host_pro_hosts_agentless_scanners_top99p", + "csm_host_pro_oci_host_count_top99p": "csm_host_pro_oci_host_count_top99p", + "cspm_aas_host_top99p": "cspm_aas_host_top99p", + "cspm_aws_host_top99p": "cspm_aws_host_top99p", + "cspm_azure_host_top99p": "cspm_azure_host_top99p", + "cspm_container_avg": "cspm_container_avg", + "cspm_container_hwm": "cspm_container_hwm", + "cspm_gcp_host_top99p": "cspm_gcp_host_top99p", + "cspm_host_top99p": "cspm_host_top99p", + "cspm_hosts_agentless_scanners_sum": "cspm_hosts_agentless_scanners_sum", + "cspm_hosts_agentless_scanners_top99p": "cspm_hosts_agentless_scanners_top99p", + "custom_ts_avg": "custom_ts_avg", + "cws_container_count_avg": "cws_container_count_avg", + "cws_fargate_task_avg": "cws_fargate_task_avg", + "cws_host_top99p": "cws_host_top99p", + "data_jobs_monitoring_host_hr_sum": "data_jobs_monitoring_host_hr_sum", + "data_stream_monitoring_host_count_sum": "data_stream_monitoring_host_count_sum", + "data_stream_monitoring_host_count_top99p": "data_stream_monitoring_host_count_top99p", + "date": "date", + "dbm_host_top99p": "dbm_host_top99p", + "dbm_queries_count_avg": "dbm_queries_count_avg", + "do_jobs_monitoring_orchestrators_job_hours_sum": "do_jobs_monitoring_orchestrators_job_hours_sum", + "eph_infra_host_agent_sum": "eph_infra_host_agent_sum", + "eph_infra_host_alibaba_sum": "eph_infra_host_alibaba_sum", + "eph_infra_host_aws_sum": "eph_infra_host_aws_sum", + "eph_infra_host_azure_sum": "eph_infra_host_azure_sum", + "eph_infra_host_basic_infra_basic_agent_sum": "eph_infra_host_basic_infra_basic_agent_sum", + "eph_infra_host_basic_infra_basic_vsphere_sum": "eph_infra_host_basic_infra_basic_vsphere_sum", + "eph_infra_host_basic_sum": "eph_infra_host_basic_sum", + "eph_infra_host_ent_sum": "eph_infra_host_ent_sum", + "eph_infra_host_gcp_sum": "eph_infra_host_gcp_sum", + "eph_infra_host_heroku_sum": "eph_infra_host_heroku_sum", + "eph_infra_host_only_aas_sum": "eph_infra_host_only_aas_sum", + "eph_infra_host_only_vsphere_sum": "eph_infra_host_only_vsphere_sum", + "eph_infra_host_opentelemetry_apm_sum": "eph_infra_host_opentelemetry_apm_sum", + "eph_infra_host_opentelemetry_sum": "eph_infra_host_opentelemetry_sum", + "eph_infra_host_pro_sum": "eph_infra_host_pro_sum", + "eph_infra_host_proplus_sum": "eph_infra_host_proplus_sum", + "eph_infra_host_proxmox_sum": "eph_infra_host_proxmox_sum", + "error_tracking_apm_error_events_sum": "error_tracking_apm_error_events_sum", + "error_tracking_error_events_sum": "error_tracking_error_events_sum", + "error_tracking_events_sum": "error_tracking_events_sum", + "error_tracking_rum_error_events_sum": "error_tracking_rum_error_events_sum", + "event_management_correlation_correlated_events_sum": "event_management_correlation_correlated_events_sum", + "event_management_correlation_correlated_related_events_sum": "event_management_correlation_correlated_related_events_sum", + "event_management_correlation_sum": "event_management_correlation_sum", + "fargate_container_profiler_profiling_fargate_avg": "fargate_container_profiler_profiling_fargate_avg", + "fargate_container_profiler_profiling_fargate_eks_avg": "fargate_container_profiler_profiling_fargate_eks_avg", + "fargate_tasks_count_avg": "fargate_tasks_count_avg", + "fargate_tasks_count_hwm": "fargate_tasks_count_hwm", + "feature_flags_config_requests_sum": "feature_flags_config_requests_sum", + "flex_logs_compute_large_avg": "flex_logs_compute_large_avg", + "flex_logs_compute_medium_avg": "flex_logs_compute_medium_avg", + "flex_logs_compute_small_avg": "flex_logs_compute_small_avg", + "flex_logs_compute_xlarge_avg": "flex_logs_compute_xlarge_avg", + "flex_logs_compute_xsmall_avg": "flex_logs_compute_xsmall_avg", + "flex_logs_starter_avg": "flex_logs_starter_avg", + "flex_logs_starter_storage_index_avg": "flex_logs_starter_storage_index_avg", + "flex_logs_starter_storage_retention_adjustment_avg": "flex_logs_starter_storage_retention_adjustment_avg", + "flex_stored_logs_avg": "flex_stored_logs_avg", + "forwarding_events_bytes_sum": "forwarding_events_bytes_sum", + "gcp_host_top99p": "gcp_host_top99p", + "heroku_host_top99p": "heroku_host_top99p", + "incident_management_monthly_active_users_hwm": "incident_management_monthly_active_users_hwm", + "incident_management_seats_hwm": "incident_management_seats_hwm", + "indexed_events_count_sum": "indexed_events_count_sum", + "indexed_points_sum": "indexed_points_sum", + "infra_cpu_avg": "infra_cpu_avg", + "infra_cpu_default_infra_host_vcpu_agent_avg": "infra_cpu_default_infra_host_vcpu_agent_avg", + "infra_cpu_default_infra_host_vcpu_agent_basic_avg": "infra_cpu_default_infra_host_vcpu_agent_basic_avg", + "infra_cpu_default_infra_host_vcpu_agent_basic_sum": "infra_cpu_default_infra_host_vcpu_agent_basic_sum", + "infra_cpu_default_infra_host_vcpu_agent_sum": "infra_cpu_default_infra_host_vcpu_agent_sum", + "infra_cpu_default_infra_host_vcpu_aws_avg": "infra_cpu_default_infra_host_vcpu_aws_avg", + "infra_cpu_default_infra_host_vcpu_aws_sum": "infra_cpu_default_infra_host_vcpu_aws_sum", + "infra_cpu_default_infra_host_vcpu_azure_avg": "infra_cpu_default_infra_host_vcpu_azure_avg", + "infra_cpu_default_infra_host_vcpu_azure_sum": "infra_cpu_default_infra_host_vcpu_azure_sum", + "infra_cpu_default_infra_host_vcpu_gcp_avg": "infra_cpu_default_infra_host_vcpu_gcp_avg", + "infra_cpu_default_infra_host_vcpu_gcp_sum": "infra_cpu_default_infra_host_vcpu_gcp_sum", + "infra_cpu_default_infra_host_vcpu_nutanix_avg": "infra_cpu_default_infra_host_vcpu_nutanix_avg", + "infra_cpu_default_infra_host_vcpu_nutanix_basic_avg": "infra_cpu_default_infra_host_vcpu_nutanix_basic_avg", + "infra_cpu_default_infra_host_vcpu_nutanix_basic_sum": "infra_cpu_default_infra_host_vcpu_nutanix_basic_sum", + "infra_cpu_default_infra_host_vcpu_nutanix_sum": "infra_cpu_default_infra_host_vcpu_nutanix_sum", + "infra_cpu_default_infra_host_vcpu_opentelemetry_avg": "infra_cpu_default_infra_host_vcpu_opentelemetry_avg", + "infra_cpu_default_infra_host_vcpu_opentelemetry_sum": "infra_cpu_default_infra_host_vcpu_opentelemetry_sum", + "infra_cpu_observed_infra_host_vcpu_agent_avg": "infra_cpu_observed_infra_host_vcpu_agent_avg", + "infra_cpu_observed_infra_host_vcpu_agent_sum": "infra_cpu_observed_infra_host_vcpu_agent_sum", + "infra_cpu_observed_infra_host_vcpu_aws_avg": "infra_cpu_observed_infra_host_vcpu_aws_avg", + "infra_cpu_observed_infra_host_vcpu_aws_sum": "infra_cpu_observed_infra_host_vcpu_aws_sum", + "infra_cpu_observed_infra_host_vcpu_azure_avg": "infra_cpu_observed_infra_host_vcpu_azure_avg", + "infra_cpu_observed_infra_host_vcpu_azure_sum": "infra_cpu_observed_infra_host_vcpu_azure_sum", + "infra_cpu_observed_infra_host_vcpu_gcp_avg": "infra_cpu_observed_infra_host_vcpu_gcp_avg", + "infra_cpu_observed_infra_host_vcpu_gcp_sum": "infra_cpu_observed_infra_host_vcpu_gcp_sum", + "infra_cpu_observed_infra_host_vcpu_nutanix_avg": "infra_cpu_observed_infra_host_vcpu_nutanix_avg", + "infra_cpu_observed_infra_host_vcpu_nutanix_sum": "infra_cpu_observed_infra_host_vcpu_nutanix_sum", + "infra_cpu_observed_infra_host_vcpu_opentelemetry_avg": "infra_cpu_observed_infra_host_vcpu_opentelemetry_avg", + "infra_cpu_observed_infra_host_vcpu_opentelemetry_sum": "infra_cpu_observed_infra_host_vcpu_opentelemetry_sum", + "infra_cpu_sum": "infra_cpu_sum", + "infra_edge_monitoring_devices_top99p": "infra_edge_monitoring_devices_top99p", + "infra_host_basic_infra_basic_agent_top99p": "infra_host_basic_infra_basic_agent_top99p", + "infra_host_basic_infra_basic_vsphere_top99p": "infra_host_basic_infra_basic_vsphere_top99p", + "infra_host_basic_top99p": "infra_host_basic_top99p", + "infra_host_top99p": "infra_host_top99p", + "infra_storage_mgmt_objects_count_avg": "infra_storage_mgmt_objects_count_avg", + "ingest_points_sum": "ingest_points_sum", + "ingested_events_bytes_sum": "ingested_events_bytes_sum", + "iot_apm_host_sum": "iot_apm_host_sum", + "iot_apm_host_top99p": "iot_apm_host_top99p", + "iot_device_sum": "iot_device_sum", + "iot_device_top99p": "iot_device_top99p", + "llm_observability_15day_retention_spans_sum": "llm_observability_15day_retention_spans_sum", + "llm_observability_30day_retention_spans_sum": "llm_observability_30day_retention_spans_sum", + "llm_observability_60day_retention_spans_sum": "llm_observability_60day_retention_spans_sum", + "llm_observability_90day_retention_spans_sum": "llm_observability_90day_retention_spans_sum", + "llm_observability_min_spend_sum": "llm_observability_min_spend_sum", + "llm_observability_sum": "llm_observability_sum", + "logs_archive_search_gb_scanned_sum": "logs_archive_search_gb_scanned_sum", + "metric_names_sum": "metric_names_sum", + "mobile_rum_lite_session_count_sum": "mobile_rum_lite_session_count_sum", + "mobile_rum_session_count_android_sum": "mobile_rum_session_count_android_sum", + "mobile_rum_session_count_flutter_sum": "mobile_rum_session_count_flutter_sum", + "mobile_rum_session_count_ios_sum": "mobile_rum_session_count_ios_sum", + "mobile_rum_session_count_reactnative_sum": "mobile_rum_session_count_reactnative_sum", + "mobile_rum_session_count_roku_sum": "mobile_rum_session_count_roku_sum", + "mobile_rum_session_count_sum": "mobile_rum_session_count_sum", + "mobile_rum_units_sum": "mobile_rum_units_sum", + "ndm_netflow_events_sum": "ndm_netflow_events_sum", + "netflow_indexed_events_count_sum": "netflow_indexed_events_count_sum", + "network_device_wireless_top99p": "network_device_wireless_top99p", + "network_path_sum": "network_path_sum", + "npm_host_top99p": "npm_host_top99p", + "observability_pipelines_bytes_processed_sum": "observability_pipelines_bytes_processed_sum", + "oci_host_sum": "oci_host_sum", + "oci_host_top99p": "oci_host_top99p", + "on_call_seat_hwm": "on_call_seat_hwm", + "online_archive_events_count_sum": "online_archive_events_count_sum", + "opentelemetry_apm_host_top99p": "opentelemetry_apm_host_top99p", + "opentelemetry_host_top99p": "opentelemetry_host_top99p", + "orgs": "orgs", + "product_analytics_sum": "product_analytics_sum", + "profiling_aas_count_top99p": "profiling_aas_count_top99p", + "profiling_host_top99p": "profiling_host_top99p", + "proxmox_host_sum": "proxmox_host_sum", + "proxmox_host_top99p": "proxmox_host_top99p", + "published_app_hwm": "published_app_hwm", + "rum_browser_and_mobile_session_count": "rum_browser_and_mobile_session_count", + "rum_browser_legacy_session_count_sum": "rum_browser_legacy_session_count_sum", + "rum_browser_lite_session_count_sum": "rum_browser_lite_session_count_sum", + "rum_browser_replay_session_count_sum": "rum_browser_replay_session_count_sum", + "rum_indexed_sessions_sum": "rum_indexed_sessions_sum", + "rum_ingested_sessions_sum": "rum_ingested_sessions_sum", + "rum_lite_session_count_sum": "rum_lite_session_count_sum", + "rum_mobile_legacy_session_count_android_sum": "rum_mobile_legacy_session_count_android_sum", + "rum_mobile_legacy_session_count_flutter_sum": "rum_mobile_legacy_session_count_flutter_sum", + "rum_mobile_legacy_session_count_ios_sum": "rum_mobile_legacy_session_count_ios_sum", + "rum_mobile_legacy_session_count_reactnative_sum": "rum_mobile_legacy_session_count_reactnative_sum", + "rum_mobile_legacy_session_count_roku_sum": "rum_mobile_legacy_session_count_roku_sum", + "rum_mobile_lite_session_count_android_sum": "rum_mobile_lite_session_count_android_sum", + "rum_mobile_lite_session_count_flutter_sum": "rum_mobile_lite_session_count_flutter_sum", + "rum_mobile_lite_session_count_ios_sum": "rum_mobile_lite_session_count_ios_sum", + "rum_mobile_lite_session_count_kotlinmultiplatform_sum": "rum_mobile_lite_session_count_kotlinmultiplatform_sum", + "rum_mobile_lite_session_count_reactnative_sum": "rum_mobile_lite_session_count_reactnative_sum", + "rum_mobile_lite_session_count_roku_sum": "rum_mobile_lite_session_count_roku_sum", + "rum_mobile_lite_session_count_unity_sum": "rum_mobile_lite_session_count_unity_sum", + "rum_mobile_replay_session_count_android_sum": "rum_mobile_replay_session_count_android_sum", + "rum_mobile_replay_session_count_ios_sum": "rum_mobile_replay_session_count_ios_sum", + "rum_mobile_replay_session_count_kotlinmultiplatform_sum": "rum_mobile_replay_session_count_kotlinmultiplatform_sum", + "rum_mobile_replay_session_count_reactnative_sum": "rum_mobile_replay_session_count_reactnative_sum", + "rum_replay_session_count_sum": "rum_replay_session_count_sum", + "rum_session_count_sum": "rum_session_count_sum", + "rum_session_replay_add_on_sum": "rum_session_replay_add_on_sum", + "rum_total_session_count_sum": "rum_total_session_count_sum", + "rum_units_sum": "rum_units_sum", + "sca_fargate_count_avg": "sca_fargate_count_avg", + "sca_fargate_count_hwm": "sca_fargate_count_hwm", + "sds_apm_scanned_bytes_sum": "sds_apm_scanned_bytes_sum", + "sds_events_scanned_bytes_sum": "sds_events_scanned_bytes_sum", + "sds_logs_scanned_bytes_sum": "sds_logs_scanned_bytes_sum", + "sds_rum_scanned_bytes_sum": "sds_rum_scanned_bytes_sum", + "sds_total_scanned_bytes_sum": "sds_total_scanned_bytes_sum", + "serverless_apps_apm_apm_azure_appservice_instances_avg": "serverless_apps_apm_apm_azure_appservice_instances_avg", + "serverless_apps_apm_apm_azure_azurefunction_instances_avg": "serverless_apps_apm_apm_azure_azurefunction_instances_avg", + "serverless_apps_apm_apm_azure_containerapp_instances_avg": "serverless_apps_apm_apm_azure_containerapp_instances_avg", + "serverless_apps_apm_apm_fargate_ecs_tasks_avg": "serverless_apps_apm_apm_fargate_ecs_tasks_avg", + "serverless_apps_apm_apm_gcp_cloudfunction_instances_avg": "serverless_apps_apm_apm_gcp_cloudfunction_instances_avg", + "serverless_apps_apm_apm_gcp_cloudrun_instances_avg": "serverless_apps_apm_apm_gcp_cloudrun_instances_avg", + "serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg": "serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg", + "serverless_apps_apm_avg": "serverless_apps_apm_avg", + "serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg": "serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg", + "serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg": "serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg", + "serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg": "serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg", + "serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg": "serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg", + "serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg": "serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg", + "serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg": "serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg", + "serverless_apps_apm_excl_fargate_avg": "serverless_apps_apm_excl_fargate_avg", + "serverless_apps_azure_container_app_instances_avg": "serverless_apps_azure_container_app_instances_avg", + "serverless_apps_azure_count_avg": "serverless_apps_azure_count_avg", + "serverless_apps_azure_function_app_instances_avg": "serverless_apps_azure_function_app_instances_avg", + "serverless_apps_azure_web_app_instances_avg": "serverless_apps_azure_web_app_instances_avg", + "serverless_apps_dsm_fargate_tasks_avg": "serverless_apps_dsm_fargate_tasks_avg", + "serverless_apps_ecs_avg": "serverless_apps_ecs_avg", + "serverless_apps_eks_avg": "serverless_apps_eks_avg", + "serverless_apps_excl_fargate_avg": "serverless_apps_excl_fargate_avg", + "serverless_apps_excl_fargate_azure_container_app_instances_avg": "serverless_apps_excl_fargate_azure_container_app_instances_avg", + "serverless_apps_excl_fargate_azure_function_app_instances_avg": "serverless_apps_excl_fargate_azure_function_app_instances_avg", + "serverless_apps_excl_fargate_azure_web_app_instances_avg": "serverless_apps_excl_fargate_azure_web_app_instances_avg", + "serverless_apps_excl_fargate_google_cloud_functions_instances_avg": "serverless_apps_excl_fargate_google_cloud_functions_instances_avg", + "serverless_apps_excl_fargate_google_cloud_run_instances_avg": "serverless_apps_excl_fargate_google_cloud_run_instances_avg", + "serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg": "serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg", + "serverless_apps_google_cloud_functions_instances_avg": "serverless_apps_google_cloud_functions_instances_avg", + "serverless_apps_google_cloud_run_instances_avg": "serverless_apps_google_cloud_run_instances_avg", + "serverless_apps_google_count_avg": "serverless_apps_google_count_avg", + "serverless_apps_infra_gcp_gke_autopilot_pods_avg": "serverless_apps_infra_gcp_gke_autopilot_pods_avg", + "serverless_apps_total_count_avg": "serverless_apps_total_count_avg", + "siem_12mo_retention_sum": "siem_12mo_retention_sum", + "siem_6mo_retention_sum": "siem_6mo_retention_sum", + "siem_analyzed_logs_add_on_count_sum": "siem_analyzed_logs_add_on_count_sum", + "snmp_device_count_sum": "snmp_device_count_sum", + "snmp_device_count_top99p": "snmp_device_count_top99p", + "synthetics_browser_check_calls_count_sum": "synthetics_browser_check_calls_count_sum", + "synthetics_check_calls_count_sum": "synthetics_check_calls_count_sum", + "synthetics_mobile_test_runs_sum": "synthetics_mobile_test_runs_sum", + "synthetics_parallel_testing_max_slots_hwm": "synthetics_parallel_testing_max_slots_hwm", + "trace_search_indexed_events_count_sum": "trace_search_indexed_events_count_sum", + "twol_ingested_events_bytes_sum": "twol_ingested_events_bytes_sum", + "universal_service_monitoring_host_top99p": "universal_service_monitoring_host_top99p", + "vsphere_host_top99p": "vsphere_host_top99p", + "vuln_management_host_count_top99p": "vuln_management_host_count_top99p", + "workflow_executions_usage_sum": "workflow_executions_usage_sum", + } + + def __init__(self_, agent_host_top99p: Union[int, UnsetType]=unset, ai_credits_agent_builder_ai_credits_sum: Union[int, UnsetType]=unset, ai_credits_bits_assistant_ai_credits_sum: Union[int, UnsetType]=unset, ai_credits_bits_dev_ai_credits_sum: Union[int, UnsetType]=unset, ai_credits_bits_sre_ai_credits_sum: Union[int, UnsetType]=unset, ai_credits_sum: Union[int, UnsetType]=unset, apm_azure_app_service_host_top99p: Union[int, UnsetType]=unset, apm_devsecops_host_top99p: Union[int, UnsetType]=unset, apm_enterprise_standalone_hosts_top99p: Union[int, UnsetType]=unset, apm_fargate_count_avg: Union[int, UnsetType]=unset, apm_host_top99p: Union[int, UnsetType]=unset, apm_pro_standalone_hosts_top99p: Union[int, UnsetType]=unset, appsec_fargate_count_avg: Union[int, UnsetType]=unset, asm_serverless_sum: Union[int, UnsetType]=unset, audit_logs_lines_indexed_sum: Union[int, UnsetType]=unset, audit_trail_enabled_hwm: Union[int, UnsetType]=unset, audit_trail_event_forwarding_events_sum: Union[int, UnsetType]=unset, avg_profiled_fargate_tasks: Union[int, UnsetType]=unset, aws_host_top99p: Union[int, UnsetType]=unset, aws_lambda_func_count: Union[int, UnsetType]=unset, aws_lambda_invocations_sum: Union[int, UnsetType]=unset, azure_app_service_top99p: Union[int, UnsetType]=unset, billable_ingested_bytes_sum: Union[int, UnsetType]=unset, bits_ai_investigations_sum: Union[int, UnsetType]=unset, browser_rum_lite_session_count_sum: Union[int, UnsetType]=unset, browser_rum_replay_session_count_sum: Union[int, UnsetType]=unset, browser_rum_units_sum: Union[int, UnsetType]=unset, ccm_anthropic_spend_last: Union[int, UnsetType]=unset, ccm_aws_spend_last: Union[int, UnsetType]=unset, ccm_azure_spend_last: Union[int, UnsetType]=unset, ccm_confluent_spend_last: Union[int, UnsetType]=unset, ccm_databricks_spend_last: Union[int, UnsetType]=unset, ccm_elastic_spend_last: Union[int, UnsetType]=unset, ccm_fastly_spend_last: Union[int, UnsetType]=unset, ccm_gcp_spend_last: Union[int, UnsetType]=unset, ccm_github_spend_last: Union[int, UnsetType]=unset, ccm_mongodb_spend_last: Union[int, UnsetType]=unset, ccm_oci_spend_last: Union[int, UnsetType]=unset, ccm_openai_spend_last: Union[int, UnsetType]=unset, ccm_snowflake_spend_last: Union[int, UnsetType]=unset, ccm_spend_monitored_ent_last: Union[int, UnsetType]=unset, ccm_spend_monitored_pro_last: Union[int, UnsetType]=unset, ccm_twilio_spend_last: Union[int, UnsetType]=unset, ci_pipeline_indexed_spans_sum: Union[int, UnsetType]=unset, ci_test_indexed_spans_sum: Union[int, UnsetType]=unset, ci_visibility_itr_committers_hwm: Union[int, UnsetType]=unset, ci_visibility_pipeline_committers_hwm: Union[int, UnsetType]=unset, ci_visibility_test_committers_hwm: Union[int, UnsetType]=unset, cloud_cost_management_aws_host_count_avg: Union[int, UnsetType]=unset, cloud_cost_management_azure_host_count_avg: Union[int, UnsetType]=unset, cloud_cost_management_gcp_host_count_avg: Union[int, UnsetType]=unset, cloud_cost_management_host_count_avg: Union[int, UnsetType]=unset, cloud_cost_management_oci_host_count_avg: Union[int, UnsetType]=unset, cloud_siem_events_sum: Union[int, UnsetType]=unset, cloud_siem_indexed_logs_sum: Union[int, UnsetType]=unset, code_analysis_sa_committers_hwm: Union[int, UnsetType]=unset, code_analysis_sca_committers_hwm: Union[int, UnsetType]=unset, code_security_host_top99p: Union[int, UnsetType]=unset, container_avg: Union[int, UnsetType]=unset, container_excl_agent_avg: Union[int, UnsetType]=unset, container_hwm: Union[int, UnsetType]=unset, csm_container_enterprise_compliance_count_sum: Union[int, UnsetType]=unset, csm_container_enterprise_cws_count_sum: Union[int, UnsetType]=unset, csm_container_enterprise_total_count_sum: Union[int, UnsetType]=unset, csm_host_enterprise_aas_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_aws_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_azure_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_compliance_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_cws_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_gcp_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_oci_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_total_host_count_top99p: Union[int, UnsetType]=unset, csm_host_pro_hosts_agentless_scanners_sum: Union[int, UnsetType]=unset, csm_host_pro_hosts_agentless_scanners_top99p: Union[int, UnsetType]=unset, csm_host_pro_oci_host_count_top99p: Union[int, UnsetType]=unset, cspm_aas_host_top99p: Union[int, UnsetType]=unset, cspm_aws_host_top99p: Union[int, UnsetType]=unset, cspm_azure_host_top99p: Union[int, UnsetType]=unset, cspm_container_avg: Union[int, UnsetType]=unset, cspm_container_hwm: Union[int, UnsetType]=unset, cspm_gcp_host_top99p: Union[int, UnsetType]=unset, cspm_host_top99p: Union[int, UnsetType]=unset, cspm_hosts_agentless_scanners_sum: Union[int, UnsetType]=unset, cspm_hosts_agentless_scanners_top99p: Union[int, UnsetType]=unset, custom_ts_avg: Union[int, UnsetType]=unset, cws_container_count_avg: Union[int, UnsetType]=unset, cws_fargate_task_avg: Union[int, UnsetType]=unset, cws_host_top99p: Union[int, UnsetType]=unset, data_jobs_monitoring_host_hr_sum: Union[int, UnsetType]=unset, data_stream_monitoring_host_count_sum: Union[int, UnsetType]=unset, data_stream_monitoring_host_count_top99p: Union[int, UnsetType]=unset, date: Union[datetime, UnsetType]=unset, dbm_host_top99p: Union[int, UnsetType]=unset, dbm_queries_count_avg: Union[int, UnsetType]=unset, do_jobs_monitoring_orchestrators_job_hours_sum: Union[int, UnsetType]=unset, eph_infra_host_agent_sum: Union[int, UnsetType]=unset, eph_infra_host_alibaba_sum: Union[int, UnsetType]=unset, eph_infra_host_aws_sum: Union[int, UnsetType]=unset, eph_infra_host_azure_sum: Union[int, UnsetType]=unset, eph_infra_host_basic_infra_basic_agent_sum: Union[int, UnsetType]=unset, eph_infra_host_basic_infra_basic_vsphere_sum: Union[int, UnsetType]=unset, eph_infra_host_basic_sum: Union[int, UnsetType]=unset, eph_infra_host_ent_sum: Union[int, UnsetType]=unset, eph_infra_host_gcp_sum: Union[int, UnsetType]=unset, eph_infra_host_heroku_sum: Union[int, UnsetType]=unset, eph_infra_host_only_aas_sum: Union[int, UnsetType]=unset, eph_infra_host_only_vsphere_sum: Union[int, UnsetType]=unset, eph_infra_host_opentelemetry_apm_sum: Union[int, UnsetType]=unset, eph_infra_host_opentelemetry_sum: Union[int, UnsetType]=unset, eph_infra_host_pro_sum: Union[int, UnsetType]=unset, eph_infra_host_proplus_sum: Union[int, UnsetType]=unset, eph_infra_host_proxmox_sum: Union[int, UnsetType]=unset, error_tracking_apm_error_events_sum: Union[int, UnsetType]=unset, error_tracking_error_events_sum: Union[int, UnsetType]=unset, error_tracking_events_sum: Union[int, UnsetType]=unset, error_tracking_rum_error_events_sum: Union[int, UnsetType]=unset, event_management_correlation_correlated_events_sum: Union[int, UnsetType]=unset, event_management_correlation_correlated_related_events_sum: Union[int, UnsetType]=unset, event_management_correlation_sum: Union[int, UnsetType]=unset, fargate_container_profiler_profiling_fargate_avg: Union[int, UnsetType]=unset, fargate_container_profiler_profiling_fargate_eks_avg: Union[int, UnsetType]=unset, fargate_tasks_count_avg: Union[int, UnsetType]=unset, fargate_tasks_count_hwm: Union[int, UnsetType]=unset, feature_flags_config_requests_sum: Union[int, UnsetType]=unset, flex_logs_compute_large_avg: Union[int, UnsetType]=unset, flex_logs_compute_medium_avg: Union[int, UnsetType]=unset, flex_logs_compute_small_avg: Union[int, UnsetType]=unset, flex_logs_compute_xlarge_avg: Union[int, UnsetType]=unset, flex_logs_compute_xsmall_avg: Union[int, UnsetType]=unset, flex_logs_starter_avg: Union[int, UnsetType]=unset, flex_logs_starter_storage_index_avg: Union[int, UnsetType]=unset, flex_logs_starter_storage_retention_adjustment_avg: Union[int, UnsetType]=unset, flex_stored_logs_avg: Union[int, UnsetType]=unset, forwarding_events_bytes_sum: Union[int, UnsetType]=unset, gcp_host_top99p: Union[int, UnsetType]=unset, heroku_host_top99p: Union[int, UnsetType]=unset, incident_management_monthly_active_users_hwm: Union[int, UnsetType]=unset, incident_management_seats_hwm: Union[int, UnsetType]=unset, indexed_events_count_sum: Union[int, UnsetType]=unset, indexed_points_sum: Union[int, UnsetType]=unset, infra_cpu_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_basic_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_basic_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_aws_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_aws_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_azure_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_azure_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_gcp_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_gcp_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_basic_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_basic_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_opentelemetry_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_opentelemetry_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_agent_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_agent_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_aws_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_aws_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_azure_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_azure_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_gcp_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_gcp_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_nutanix_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_nutanix_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_opentelemetry_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_opentelemetry_sum: Union[int, UnsetType]=unset, infra_cpu_sum: Union[int, UnsetType]=unset, infra_edge_monitoring_devices_top99p: Union[int, UnsetType]=unset, infra_host_basic_infra_basic_agent_top99p: Union[int, UnsetType]=unset, infra_host_basic_infra_basic_vsphere_top99p: Union[int, UnsetType]=unset, infra_host_basic_top99p: Union[int, UnsetType]=unset, infra_host_top99p: Union[int, UnsetType]=unset, infra_storage_mgmt_objects_count_avg: Union[int, UnsetType]=unset, ingest_points_sum: Union[int, UnsetType]=unset, ingested_events_bytes_sum: Union[int, UnsetType]=unset, iot_apm_host_sum: Union[int, UnsetType]=unset, iot_apm_host_top99p: Union[int, UnsetType]=unset, iot_device_sum: Union[int, UnsetType]=unset, iot_device_top99p: Union[int, UnsetType]=unset, llm_observability_15day_retention_spans_sum: Union[int, UnsetType]=unset, llm_observability_30day_retention_spans_sum: Union[int, UnsetType]=unset, llm_observability_60day_retention_spans_sum: Union[int, UnsetType]=unset, llm_observability_90day_retention_spans_sum: Union[int, UnsetType]=unset, llm_observability_min_spend_sum: Union[int, UnsetType]=unset, llm_observability_sum: Union[int, UnsetType]=unset, logs_archive_search_gb_scanned_sum: Union[int, UnsetType]=unset, metric_names_sum: Union[int, UnsetType]=unset, mobile_rum_lite_session_count_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_android_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_flutter_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_ios_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_reactnative_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_roku_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_sum: Union[int, UnsetType]=unset, mobile_rum_units_sum: Union[int, UnsetType]=unset, ndm_netflow_events_sum: Union[int, UnsetType]=unset, netflow_indexed_events_count_sum: Union[int, UnsetType]=unset, network_device_wireless_top99p: Union[int, UnsetType]=unset, network_path_sum: Union[int, UnsetType]=unset, npm_host_top99p: Union[int, UnsetType]=unset, observability_pipelines_bytes_processed_sum: Union[int, UnsetType]=unset, oci_host_sum: Union[int, UnsetType]=unset, oci_host_top99p: Union[int, UnsetType]=unset, on_call_seat_hwm: Union[int, UnsetType]=unset, online_archive_events_count_sum: Union[int, UnsetType]=unset, opentelemetry_apm_host_top99p: Union[int, UnsetType]=unset, opentelemetry_host_top99p: Union[int, UnsetType]=unset, orgs: Union[List[UsageSummaryDateOrg], UnsetType]=unset, product_analytics_sum: Union[int, UnsetType]=unset, profiling_aas_count_top99p: Union[int, UnsetType]=unset, profiling_host_top99p: Union[int, UnsetType]=unset, proxmox_host_sum: Union[int, UnsetType]=unset, proxmox_host_top99p: Union[int, UnsetType]=unset, published_app_hwm: Union[int, UnsetType]=unset, rum_browser_and_mobile_session_count: Union[int, UnsetType]=unset, rum_browser_legacy_session_count_sum: Union[int, UnsetType]=unset, rum_browser_lite_session_count_sum: Union[int, UnsetType]=unset, rum_browser_replay_session_count_sum: Union[int, UnsetType]=unset, rum_indexed_sessions_sum: Union[int, UnsetType]=unset, rum_ingested_sessions_sum: Union[int, UnsetType]=unset, rum_lite_session_count_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_android_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_flutter_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_ios_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_reactnative_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_roku_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_android_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_flutter_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_ios_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_kotlinmultiplatform_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_reactnative_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_roku_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_unity_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_android_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_ios_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_kotlinmultiplatform_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_reactnative_sum: Union[int, UnsetType]=unset, rum_replay_session_count_sum: Union[int, UnsetType]=unset, rum_session_count_sum: Union[int, UnsetType]=unset, rum_session_replay_add_on_sum: Union[int, UnsetType]=unset, rum_total_session_count_sum: Union[int, UnsetType]=unset, rum_units_sum: Union[int, UnsetType]=unset, sca_fargate_count_avg: Union[int, UnsetType]=unset, sca_fargate_count_hwm: Union[int, UnsetType]=unset, sds_apm_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_events_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_logs_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_rum_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_total_scanned_bytes_sum: Union[int, UnsetType]=unset, serverless_apps_apm_apm_azure_appservice_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_azure_azurefunction_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_azure_containerapp_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_fargate_ecs_tasks_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_gcp_cloudfunction_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_gcp_cloudrun_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg: Union[int, UnsetType]=unset, serverless_apps_apm_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_avg: Union[int, UnsetType]=unset, serverless_apps_azure_container_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_azure_count_avg: Union[int, UnsetType]=unset, serverless_apps_azure_function_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_azure_web_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_dsm_fargate_tasks_avg: Union[int, UnsetType]=unset, serverless_apps_ecs_avg: Union[int, UnsetType]=unset, serverless_apps_eks_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_azure_container_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_azure_function_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_azure_web_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_google_cloud_functions_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_google_cloud_run_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg: Union[int, UnsetType]=unset, serverless_apps_google_cloud_functions_instances_avg: Union[int, UnsetType]=unset, serverless_apps_google_cloud_run_instances_avg: Union[int, UnsetType]=unset, serverless_apps_google_count_avg: Union[int, UnsetType]=unset, serverless_apps_infra_gcp_gke_autopilot_pods_avg: Union[int, UnsetType]=unset, serverless_apps_total_count_avg: Union[int, UnsetType]=unset, siem_12mo_retention_sum: Union[int, UnsetType]=unset, siem_6mo_retention_sum: Union[int, UnsetType]=unset, siem_analyzed_logs_add_on_count_sum: Union[int, UnsetType]=unset, snmp_device_count_sum: Union[int, UnsetType]=unset, snmp_device_count_top99p: Union[int, UnsetType]=unset, synthetics_browser_check_calls_count_sum: Union[int, UnsetType]=unset, synthetics_check_calls_count_sum: Union[int, UnsetType]=unset, synthetics_mobile_test_runs_sum: Union[int, UnsetType]=unset, synthetics_parallel_testing_max_slots_hwm: Union[int, UnsetType]=unset, trace_search_indexed_events_count_sum: Union[int, UnsetType]=unset, twol_ingested_events_bytes_sum: Union[int, UnsetType]=unset, universal_service_monitoring_host_top99p: Union[int, UnsetType]=unset, vsphere_host_top99p: Union[int, UnsetType]=unset, vuln_management_host_count_top99p: Union[int, UnsetType]=unset, workflow_executions_usage_sum: Union[int, UnsetType]=unset, **kwargs): + """ + Response with hourly report of all data billed by Datadog for all organizations. + + For SDK users only: all fields at this response level are accessible through the + ``additionalProperties`` map. Existing typed-field getters are unchanged. New billing + dimensions will not have typed-field getters. Use + `Get available fields for usage summary `_ + to enumerate every available key. + + :param agent_host_top99p: Shows the 99th percentile of all agent hosts over all hours in the current date for all organizations. + :type agent_host_top99p: int, optional + + :param ai_credits_agent_builder_ai_credits_sum: Shows the sum of all AI credits used by Agent Builder over all hours in the current date for all organizations. + :type ai_credits_agent_builder_ai_credits_sum: int, optional + + :param ai_credits_bits_assistant_ai_credits_sum: Shows the sum of all AI credits used by Bits AI Assistant over all hours in the current date for all organizations. + :type ai_credits_bits_assistant_ai_credits_sum: int, optional + + :param ai_credits_bits_dev_ai_credits_sum: Shows the sum of all AI credits used by Bits AI Dev over all hours in the current date for all organizations. + :type ai_credits_bits_dev_ai_credits_sum: int, optional + + :param ai_credits_bits_sre_ai_credits_sum: Shows the sum of all AI credits used by Bits AI SRE over all hours in the current date for all organizations. + :type ai_credits_bits_sre_ai_credits_sum: int, optional + + :param ai_credits_sum: Shows the sum of all AI credits over all hours in the current date for all organizations. + :type ai_credits_sum: int, optional + + :param apm_azure_app_service_host_top99p: Shows the 99th percentile of all Azure app services using APM over all hours in the current date all organizations. + :type apm_azure_app_service_host_top99p: int, optional + + :param apm_devsecops_host_top99p: Shows the 99th percentile of all APM DevSecOps hosts over all hours in the current date for the given org. + :type apm_devsecops_host_top99p: int, optional + + :param apm_enterprise_standalone_hosts_top99p: Shows the 99th percentile of all distinct standalone Enterprise hosts over all hours in the current date for all organizations. + :type apm_enterprise_standalone_hosts_top99p: int, optional + + :param apm_fargate_count_avg: Shows the average of all APM ECS Fargate tasks over all hours in the current date for all organizations. + :type apm_fargate_count_avg: int, optional + + :param apm_host_top99p: Shows the 99th percentile of all distinct APM hosts over all hours in the current date for all organizations. + :type apm_host_top99p: int, optional + + :param apm_pro_standalone_hosts_top99p: Shows the 99th percentile of all distinct standalone Pro hosts over all hours in the current date for all organizations. + :type apm_pro_standalone_hosts_top99p: int, optional + + :param appsec_fargate_count_avg: Shows the average of all Application Security Monitoring ECS Fargate tasks over all hours in the current date for all organizations. + :type appsec_fargate_count_avg: int, optional + + :param asm_serverless_sum: Shows the sum of all Application Security Monitoring Serverless invocations over all hours in the current date for all organizations. + :type asm_serverless_sum: int, optional + + :param audit_logs_lines_indexed_sum: Shows the sum of audit logs lines indexed over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type audit_logs_lines_indexed_sum: int, optional + + :param audit_trail_enabled_hwm: Shows the number of organizations that had Audit Trail enabled in the current date. + :type audit_trail_enabled_hwm: int, optional + + :param audit_trail_event_forwarding_events_sum: Shows the sum of all Audit Trail event forwarding events over all hours in the current date for all organizations. + :type audit_trail_event_forwarding_events_sum: int, optional + + :param avg_profiled_fargate_tasks: The average total count for Fargate Container Profiler over all hours in the current date for all organizations. + :type avg_profiled_fargate_tasks: int, optional + + :param aws_host_top99p: Shows the 99th percentile of all AWS hosts over all hours in the current date for all organizations. + :type aws_host_top99p: int, optional + + :param aws_lambda_func_count: Shows the average of the number of functions that executed 1 or more times each hour in the current date for all organizations. + :type aws_lambda_func_count: int, optional + + :param aws_lambda_invocations_sum: Shows the sum of all AWS Lambda invocations over all hours in the current date for all organizations. + :type aws_lambda_invocations_sum: int, optional + + :param azure_app_service_top99p: Shows the 99th percentile of all Azure app services over all hours in the current date for all organizations. + :type azure_app_service_top99p: int, optional + + :param billable_ingested_bytes_sum: Shows the sum of all log bytes ingested over all hours in the current date for all organizations. + :type billable_ingested_bytes_sum: int, optional + + :param bits_ai_investigations_sum: Shows the sum of all Bits AI Investigations over all hours in the current date for all organizations. + :type bits_ai_investigations_sum: int, optional + + :param browser_rum_lite_session_count_sum: Shows the sum of all browser lite sessions over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type browser_rum_lite_session_count_sum: int, optional + + :param browser_rum_replay_session_count_sum: Shows the sum of all browser replay sessions over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). + :type browser_rum_replay_session_count_sum: int, optional + + :param browser_rum_units_sum: Shows the sum of all browser RUM units over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type browser_rum_units_sum: int, optional + + :param ccm_anthropic_spend_last: Shows the last value of Anthropic cloud spend monitored over all hours in the current date for all organizations. + :type ccm_anthropic_spend_last: int, optional + + :param ccm_aws_spend_last: Shows the last value of AWS cloud spend monitored over all hours in the current date for all organizations. + :type ccm_aws_spend_last: int, optional + + :param ccm_azure_spend_last: Shows the last value of Azure cloud spend monitored over all hours in the current date for all organizations. + :type ccm_azure_spend_last: int, optional + + :param ccm_confluent_spend_last: Shows the last value of Confluent cloud spend monitored over all hours in the current date for all organizations. + :type ccm_confluent_spend_last: int, optional + + :param ccm_databricks_spend_last: Shows the last value of Databricks cloud spend monitored over all hours in the current date for all organizations. + :type ccm_databricks_spend_last: int, optional + + :param ccm_elastic_spend_last: Shows the last value of Elastic cloud spend monitored over all hours in the current date for all organizations. + :type ccm_elastic_spend_last: int, optional + + :param ccm_fastly_spend_last: Shows the last value of Fastly cloud spend monitored over all hours in the current date for all organizations. + :type ccm_fastly_spend_last: int, optional + + :param ccm_gcp_spend_last: Shows the last value of GCP cloud spend monitored over all hours in the current date for all organizations. + :type ccm_gcp_spend_last: int, optional + + :param ccm_github_spend_last: Shows the last value of GitHub cloud spend monitored over all hours in the current date for all organizations. + :type ccm_github_spend_last: int, optional + + :param ccm_mongodb_spend_last: Shows the last value of MongoDB cloud spend monitored over all hours in the current date for all organizations. + :type ccm_mongodb_spend_last: int, optional + + :param ccm_oci_spend_last: Shows the last value of OCI cloud spend monitored over all hours in the current date for all organizations. + :type ccm_oci_spend_last: int, optional + + :param ccm_openai_spend_last: Shows the last value of OpenAI cloud spend monitored over all hours in the current date for all organizations. + :type ccm_openai_spend_last: int, optional + + :param ccm_snowflake_spend_last: Shows the last value of Snowflake cloud spend monitored over all hours in the current date for all organizations. + :type ccm_snowflake_spend_last: int, optional + + :param ccm_spend_monitored_ent_last: Shows the last value of the amount of cloud spend monitored for Enterprise over all hours in the current date for all organizations. + :type ccm_spend_monitored_ent_last: int, optional + + :param ccm_spend_monitored_pro_last: Shows the last value of the amount of cloud spend monitored for Pro over all hours in the current date for all organizations. + :type ccm_spend_monitored_pro_last: int, optional + + :param ccm_twilio_spend_last: Shows the last value of Twilio cloud spend monitored over all hours in the current date for all organizations. + :type ccm_twilio_spend_last: int, optional + + :param ci_pipeline_indexed_spans_sum: Shows the sum of all CI pipeline indexed spans over all hours in the current month for all organizations. + :type ci_pipeline_indexed_spans_sum: int, optional + + :param ci_test_indexed_spans_sum: Shows the sum of all CI test indexed spans over all hours in the current month for all organizations. + :type ci_test_indexed_spans_sum: int, optional + + :param ci_visibility_itr_committers_hwm: Shows the high-water mark of all CI visibility intelligent test runner committers over all hours in the current month for all organizations. + :type ci_visibility_itr_committers_hwm: int, optional + + :param ci_visibility_pipeline_committers_hwm: Shows the high-water mark of all CI visibility pipeline committers over all hours in the current month for all organizations. + :type ci_visibility_pipeline_committers_hwm: int, optional + + :param ci_visibility_test_committers_hwm: Shows the high-water mark of all CI visibility test committers over all hours in the current month for all organizations. + :type ci_visibility_test_committers_hwm: int, optional + + :param cloud_cost_management_aws_host_count_avg: Host count average of Cloud Cost Management for AWS for the given date and given organization. + :type cloud_cost_management_aws_host_count_avg: int, optional + + :param cloud_cost_management_azure_host_count_avg: Host count average of Cloud Cost Management for Azure for the given date and given organization. + :type cloud_cost_management_azure_host_count_avg: int, optional + + :param cloud_cost_management_gcp_host_count_avg: Host count average of Cloud Cost Management for GCP for the given date and given organization. + :type cloud_cost_management_gcp_host_count_avg: int, optional + + :param cloud_cost_management_host_count_avg: Host count average of Cloud Cost Management for all cloud providers for the given date and given organization. + :type cloud_cost_management_host_count_avg: int, optional + + :param cloud_cost_management_oci_host_count_avg: Average host count for Cloud Cost Management on OCI for the given date and organization. + :type cloud_cost_management_oci_host_count_avg: int, optional + + :param cloud_siem_events_sum: Shows the sum of all Cloud Security Information and Event Management events over all hours in the current date for the given org. + :type cloud_siem_events_sum: int, optional + + :param cloud_siem_indexed_logs_sum: Shows the sum of all Cloud SIEM Indexed Logs over all hours in the current date for the given org. + :type cloud_siem_indexed_logs_sum: int, optional + + :param code_analysis_sa_committers_hwm: Shows the high-water mark of all Static Analysis committers over all hours in the current date for the given org. + :type code_analysis_sa_committers_hwm: int, optional + + :param code_analysis_sca_committers_hwm: Shows the high-water mark of all static Software Composition Analysis committers over all hours in the current date for the given org. + :type code_analysis_sca_committers_hwm: int, optional + + :param code_security_host_top99p: Shows the 99th percentile of all Code Security hosts over all hours in the current date for the given org. + :type code_security_host_top99p: int, optional + + :param container_avg: Shows the average of all distinct containers over all hours in the current date for all organizations. + :type container_avg: int, optional + + :param container_excl_agent_avg: Shows the average of containers without the Datadog Agent over all hours in the current date for all organizations. + :type container_excl_agent_avg: int, optional + + :param container_hwm: Shows the high-water mark of all distinct containers over all hours in the current date for all organizations. + :type container_hwm: int, optional + + :param csm_container_enterprise_compliance_count_sum: Shows the sum of all Cloud Security Management Enterprise compliance containers over all hours in the current date for the given org. + :type csm_container_enterprise_compliance_count_sum: int, optional + + :param csm_container_enterprise_cws_count_sum: Shows the sum of all Cloud Security Management Enterprise Cloud Workload Security containers over all hours in the current date for the given org. + :type csm_container_enterprise_cws_count_sum: int, optional + + :param csm_container_enterprise_total_count_sum: Shows the sum of all Cloud Security Management Enterprise containers over all hours in the current date for the given org. + :type csm_container_enterprise_total_count_sum: int, optional + + :param csm_host_enterprise_aas_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise Azure app services hosts over all hours in the current date for the given org. + :type csm_host_enterprise_aas_host_count_top99p: int, optional + + :param csm_host_enterprise_aws_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise AWS hosts over all hours in the current date for the given org. + :type csm_host_enterprise_aws_host_count_top99p: int, optional + + :param csm_host_enterprise_azure_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise Azure hosts over all hours in the current date for the given org. + :type csm_host_enterprise_azure_host_count_top99p: int, optional + + :param csm_host_enterprise_compliance_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise compliance hosts over all hours in the current date for the given org. + :type csm_host_enterprise_compliance_host_count_top99p: int, optional + + :param csm_host_enterprise_cws_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise Cloud Workload Security hosts over all hours in the current date for the given org. + :type csm_host_enterprise_cws_host_count_top99p: int, optional + + :param csm_host_enterprise_gcp_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise GCP hosts over all hours in the current date for the given org. + :type csm_host_enterprise_gcp_host_count_top99p: int, optional + + :param csm_host_enterprise_oci_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise OCI hosts over all hours in the current date for the given org. + :type csm_host_enterprise_oci_host_count_top99p: int, optional + + :param csm_host_enterprise_total_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise hosts over all hours in the current date for the given org. + :type csm_host_enterprise_total_host_count_top99p: int, optional + + :param csm_host_pro_hosts_agentless_scanners_sum: Shows the sum of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current date for the given org. + :type csm_host_pro_hosts_agentless_scanners_sum: int, optional + + :param csm_host_pro_hosts_agentless_scanners_top99p: Shows the 99th percentile of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current date for the given org. + :type csm_host_pro_hosts_agentless_scanners_top99p: int, optional + + :param csm_host_pro_oci_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Pro OCI hosts over all hours in the current date for the given org. + :type csm_host_pro_oci_host_count_top99p: int, optional + + :param cspm_aas_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro Azure app services hosts over all hours in the current date for all organizations. + :type cspm_aas_host_top99p: int, optional + + :param cspm_aws_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro AWS hosts over all hours in the current date for all organizations. + :type cspm_aws_host_top99p: int, optional + + :param cspm_azure_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro Azure hosts over all hours in the current date for all organizations. + :type cspm_azure_host_top99p: int, optional + + :param cspm_container_avg: Shows the average number of Cloud Security Management Pro containers over all hours in the current date for all organizations. + :type cspm_container_avg: int, optional + + :param cspm_container_hwm: Shows the high-water mark of Cloud Security Management Pro containers over all hours in the current date for all organizations. + :type cspm_container_hwm: int, optional + + :param cspm_gcp_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro GCP hosts over all hours in the current date for all organizations. + :type cspm_gcp_host_top99p: int, optional + + :param cspm_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro hosts over all hours in the current date for all organizations. + :type cspm_host_top99p: int, optional + + :param cspm_hosts_agentless_scanners_sum: Shows the sum of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current date for all organizations. + :type cspm_hosts_agentless_scanners_sum: int, optional + + :param cspm_hosts_agentless_scanners_top99p: Shows the 99th percentile of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current date for all organizations. + :type cspm_hosts_agentless_scanners_top99p: int, optional + + :param custom_ts_avg: Shows the average number of distinct custom metrics over all hours in the current date for all organizations. + :type custom_ts_avg: int, optional + + :param cws_container_count_avg: Shows the average of all distinct Cloud Workload Security containers over all hours in the current date for all organizations. + :type cws_container_count_avg: int, optional + + :param cws_fargate_task_avg: Shows the average of all distinct Cloud Workload Security Fargate tasks over all hours in the current date for all organizations. + :type cws_fargate_task_avg: int, optional + + :param cws_host_top99p: Shows the 99th percentile of all Cloud Workload Security hosts over all hours in the current date for all organizations. + :type cws_host_top99p: int, optional + + :param data_jobs_monitoring_host_hr_sum: Shows the sum of all Data Jobs Monitoring hosts over all hours in the current date for the given org. + :type data_jobs_monitoring_host_hr_sum: int, optional + + :param data_stream_monitoring_host_count_sum: Shows the sum of all Data Streams Monitoring hosts over all hours in the current date for all organizations. + :type data_stream_monitoring_host_count_sum: int, optional + + :param data_stream_monitoring_host_count_top99p: Shows the 99th percentile of all Data Streams Monitoring hosts over all hours in the current date for all organizations. + :type data_stream_monitoring_host_count_top99p: int, optional + + :param date: The date for the usage. + :type date: datetime, optional + + :param dbm_host_top99p: Shows the 99th percentile of all Database Monitoring hosts over all hours in the current date for all organizations. + :type dbm_host_top99p: int, optional + + :param dbm_queries_count_avg: Shows the average of all normalized Database Monitoring queries over all hours in the current date for all organizations. + :type dbm_queries_count_avg: int, optional + + :param do_jobs_monitoring_orchestrators_job_hours_sum: Shows the sum of all orchestrator job hours over all hours in the current date for all organizations. + :type do_jobs_monitoring_orchestrators_job_hours_sum: int, optional + + :param eph_infra_host_agent_sum: Shows the sum of all ephemeral infrastructure hosts with the Datadog Agent over all hours in the current date for the given org. + :type eph_infra_host_agent_sum: int, optional + + :param eph_infra_host_alibaba_sum: Shows the sum of all ephemeral infrastructure hosts on Alibaba over all hours in the current date for the given org. + :type eph_infra_host_alibaba_sum: int, optional + + :param eph_infra_host_aws_sum: Shows the sum of all ephemeral infrastructure hosts on AWS over all hours in the current date for the given org. + :type eph_infra_host_aws_sum: int, optional + + :param eph_infra_host_azure_sum: Shows the sum of all ephemeral infrastructure hosts on Azure over all hours in the current date for the given org. + :type eph_infra_host_azure_sum: int, optional + + :param eph_infra_host_basic_infra_basic_agent_sum: Shows the sum of all ephemeral infrastructure hosts for Basic tier with the Datadog Agent over all hours in the current date for all organizations. + :type eph_infra_host_basic_infra_basic_agent_sum: int, optional + + :param eph_infra_host_basic_infra_basic_vsphere_sum: Shows the sum of all ephemeral infrastructure hosts for Basic tier on vSphere over all hours in the current date for all organizations. + :type eph_infra_host_basic_infra_basic_vsphere_sum: int, optional + + :param eph_infra_host_basic_sum: Shows the sum of all ephemeral infrastructure hosts for Basic tier over all hours in the current date for all organizations. + :type eph_infra_host_basic_sum: int, optional + + :param eph_infra_host_ent_sum: Shows the sum of all ephemeral infrastructure hosts for Enterprise over all hours in the current date for the given org. + :type eph_infra_host_ent_sum: int, optional + + :param eph_infra_host_gcp_sum: Shows the sum of all ephemeral infrastructure hosts on GCP over all hours in the current date for the given org. + :type eph_infra_host_gcp_sum: int, optional + + :param eph_infra_host_heroku_sum: Shows the sum of all ephemeral infrastructure hosts on Heroku over all hours in the current date for the given org. + :type eph_infra_host_heroku_sum: int, optional + + :param eph_infra_host_only_aas_sum: Shows the sum of all ephemeral infrastructure hosts with only Azure App Services over all hours in the current date for the given org. + :type eph_infra_host_only_aas_sum: int, optional + + :param eph_infra_host_only_vsphere_sum: Shows the sum of all ephemeral infrastructure hosts with only vSphere over all hours in the current date for the given org. + :type eph_infra_host_only_vsphere_sum: int, optional + + :param eph_infra_host_opentelemetry_apm_sum: Shows the sum of all ephemeral APM hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current date for the given org. + :type eph_infra_host_opentelemetry_apm_sum: int, optional + + :param eph_infra_host_opentelemetry_sum: Shows the sum of all ephemeral hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current date for the given org. + :type eph_infra_host_opentelemetry_sum: int, optional + + :param eph_infra_host_pro_sum: Shows the sum of all ephemeral infrastructure hosts for Pro over all hours in the current date for the given org. + :type eph_infra_host_pro_sum: int, optional + + :param eph_infra_host_proplus_sum: Shows the sum of all ephemeral infrastructure hosts for Pro Plus over all hours in the current date for the given org. + :type eph_infra_host_proplus_sum: int, optional + + :param eph_infra_host_proxmox_sum: Sum of all ephemeral infrastructure hosts for Proxmox over all hours in the current date for all organizations. + :type eph_infra_host_proxmox_sum: int, optional + + :param error_tracking_apm_error_events_sum: Shows the sum of all Error Tracking APM error events over all hours in the current date for the given org. + :type error_tracking_apm_error_events_sum: int, optional + + :param error_tracking_error_events_sum: Shows the sum of all Error Tracking error events over all hours in the current date for the given org. + :type error_tracking_error_events_sum: int, optional + + :param error_tracking_events_sum: Shows the sum of all Error Tracking events over all hours in the current date for the given org. + :type error_tracking_events_sum: int, optional + + :param error_tracking_rum_error_events_sum: Shows the sum of all Error Tracking RUM error events over all hours in the current date for the given org. + :type error_tracking_rum_error_events_sum: int, optional + + :param event_management_correlation_correlated_events_sum: Shows the sum of all Event Management correlated events over all hours in the current date for all organizations. + :type event_management_correlation_correlated_events_sum: int, optional + + :param event_management_correlation_correlated_related_events_sum: Shows the sum of all Event Management correlated related events over all hours in the current date for all organizations. + :type event_management_correlation_correlated_related_events_sum: int, optional + + :param event_management_correlation_sum: Shows the sum of all Event Management correlations over all hours in the current date for all organizations. + :type event_management_correlation_sum: int, optional + + :param fargate_container_profiler_profiling_fargate_avg: The average number of Profiling Fargate tasks over all hours in the current date for all organizations. + :type fargate_container_profiler_profiling_fargate_avg: int, optional + + :param fargate_container_profiler_profiling_fargate_eks_avg: The average number of Profiling Fargate Elastic Kubernetes Service tasks over all hours in the current date for all organizations. + :type fargate_container_profiler_profiling_fargate_eks_avg: int, optional + + :param fargate_tasks_count_avg: Shows the high-watermark of all Fargate tasks over all hours in the current date for all organizations. + :type fargate_tasks_count_avg: int, optional + + :param fargate_tasks_count_hwm: Shows the average of all Fargate tasks over all hours in the current date for all organizations. + :type fargate_tasks_count_hwm: int, optional + + :param feature_flags_config_requests_sum: Shows the sum of all Feature Flags Client-Side SDK config requests over all hours in the current date for all organizations. + :type feature_flags_config_requests_sum: int, optional + + :param flex_logs_compute_large_avg: Shows the average number of Flex Logs Compute Large Instances over all hours in the current date for the given org. + :type flex_logs_compute_large_avg: int, optional + + :param flex_logs_compute_medium_avg: Shows the average number of Flex Logs Compute Medium Instances over all hours in the current date for the given org. + :type flex_logs_compute_medium_avg: int, optional + + :param flex_logs_compute_small_avg: Shows the average number of Flex Logs Compute Small Instances over all hours in the current date for the given org. + :type flex_logs_compute_small_avg: int, optional + + :param flex_logs_compute_xlarge_avg: Shows the average number of Flex Logs Compute Extra Large Instances over all hours in the current date for the given org. + :type flex_logs_compute_xlarge_avg: int, optional + + :param flex_logs_compute_xsmall_avg: Shows the average number of Flex Logs Compute Extra Small Instances over all hours in the current date for the given org. + :type flex_logs_compute_xsmall_avg: int, optional + + :param flex_logs_starter_avg: Shows the average number of Flex Logs Starter Instances over all hours in the current date for the given org. + :type flex_logs_starter_avg: int, optional + + :param flex_logs_starter_storage_index_avg: Shows the average number of Flex Logs Starter Storage Index Instances over all hours in the current date for the given org. + :type flex_logs_starter_storage_index_avg: int, optional + + :param flex_logs_starter_storage_retention_adjustment_avg: Shows the average number of Flex Logs Starter Storage Retention Adjustment Instances over all hours in the current date for the given org. + :type flex_logs_starter_storage_retention_adjustment_avg: int, optional + + :param flex_stored_logs_avg: Shows the average of all Flex Stored Logs over all hours in the current date for the given org. + :type flex_stored_logs_avg: int, optional + + :param forwarding_events_bytes_sum: Shows the sum of all log bytes forwarded over all hours in the current date for all organizations. + :type forwarding_events_bytes_sum: int, optional + + :param gcp_host_top99p: Shows the 99th percentile of all GCP hosts over all hours in the current date for all organizations. + :type gcp_host_top99p: int, optional + + :param heroku_host_top99p: Shows the 99th percentile of all Heroku dynos over all hours in the current date for all organizations. + :type heroku_host_top99p: int, optional + + :param incident_management_monthly_active_users_hwm: Shows the high-water mark of incident management monthly active users over all hours in the current date for all organizations. + :type incident_management_monthly_active_users_hwm: int, optional + + :param incident_management_seats_hwm: Shows the high-water mark of Incident Management seats over all hours on the current date for all organizations. + :type incident_management_seats_hwm: int, optional + + :param indexed_events_count_sum: Shows the sum of all log events indexed over all hours in the current date for all organizations. + :type indexed_events_count_sum: int, optional + + :param indexed_points_sum: Shows the sum of all indexed custom metrics points over all hours in the current date for all organizations. + :type indexed_points_sum: int, optional + + :param infra_cpu_avg: Shows the average of all Infrastructure vCPU cores over all hours in the current date for all organizations. + :type infra_cpu_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_avg: Shows the average of all default Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_agent_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_basic_avg: Shows the average of all default basic Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_agent_basic_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_basic_sum: Shows the sum of all default basic Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_agent_basic_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_sum: Shows the sum of all default Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_agent_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_aws_avg: Shows the average of all default Infrastructure host vCPU cores on AWS over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_aws_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_aws_sum: Shows the sum of all default Infrastructure host vCPU cores on AWS over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_aws_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_azure_avg: Shows the average of all default Infrastructure host vCPU cores on Azure over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_azure_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_azure_sum: Shows the sum of all default Infrastructure host vCPU cores on Azure over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_azure_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_gcp_avg: Shows the average of all default Infrastructure host vCPU cores on GCP over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_gcp_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_gcp_sum: Shows the sum of all default Infrastructure host vCPU cores on GCP over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_gcp_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_avg: Shows the average of all default Infrastructure host vCPU cores on Nutanix over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_nutanix_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_basic_avg: Shows the average of all default basic Infrastructure host vCPU cores on Nutanix over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_nutanix_basic_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_basic_sum: Shows the sum of all default basic Infrastructure host vCPU cores on Nutanix over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_nutanix_basic_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_sum: Shows the sum of all default Infrastructure host vCPU cores on Nutanix over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_nutanix_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_opentelemetry_avg: Shows the average of all default Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_opentelemetry_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_opentelemetry_sum: Shows the sum of all default Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current date for all organizations. + :type infra_cpu_default_infra_host_vcpu_opentelemetry_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_agent_avg: Shows the average of all observed Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_agent_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_agent_sum: Shows the sum of all observed Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_agent_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_aws_avg: Shows the average of all observed Infrastructure host vCPU cores on AWS over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_aws_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_aws_sum: Shows the sum of all observed Infrastructure host vCPU cores on AWS over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_aws_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_azure_avg: Shows the average of all observed Infrastructure host vCPU cores on Azure over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_azure_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_azure_sum: Shows the sum of all observed Infrastructure host vCPU cores on Azure over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_azure_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_gcp_avg: Shows the average of all observed Infrastructure host vCPU cores on GCP over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_gcp_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_gcp_sum: Shows the sum of all observed Infrastructure host vCPU cores on GCP over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_gcp_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_nutanix_avg: Shows the average of all observed Infrastructure host vCPU cores on Nutanix over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_nutanix_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_nutanix_sum: Shows the sum of all observed Infrastructure host vCPU cores on Nutanix over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_nutanix_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_opentelemetry_avg: Shows the average of all observed Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_opentelemetry_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_opentelemetry_sum: Shows the sum of all observed Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current date for all organizations. + :type infra_cpu_observed_infra_host_vcpu_opentelemetry_sum: int, optional + + :param infra_cpu_sum: Shows the sum of all Infrastructure vCPU cores over all hours in the current date for all organizations. + :type infra_cpu_sum: int, optional + + :param infra_edge_monitoring_devices_top99p: Shows the 99th percentile of all Edge Devices Monitoring devices over all hours in the current date for all organizations. + :type infra_edge_monitoring_devices_top99p: int, optional + + :param infra_host_basic_infra_basic_agent_top99p: Shows the 99th percentile of all distinct infrastructure hosts for Basic tier with the Datadog Agent over all hours in the current date for all organizations. + :type infra_host_basic_infra_basic_agent_top99p: int, optional + + :param infra_host_basic_infra_basic_vsphere_top99p: Shows the 99th percentile of all distinct infrastructure hosts for Basic tier on vSphere over all hours in the current date for all organizations. + :type infra_host_basic_infra_basic_vsphere_top99p: int, optional + + :param infra_host_basic_top99p: Shows the 99th percentile of all distinct infrastructure hosts for Basic tier over all hours in the current date for all organizations. + :type infra_host_basic_top99p: int, optional + + :param infra_host_top99p: Shows the 99th percentile of all distinct infrastructure hosts over all hours in the current date for all organizations. + :type infra_host_top99p: int, optional + + :param infra_storage_mgmt_objects_count_avg: Shows the average number of storage management objects over all hours in the current date for all organizations. + :type infra_storage_mgmt_objects_count_avg: int, optional + + :param ingest_points_sum: Shows the sum of all ingested custom metrics points over all hours in the current date for all organizations. + :type ingest_points_sum: int, optional + + :param ingested_events_bytes_sum: Shows the sum of all log bytes ingested over all hours in the current date for all organizations. + :type ingested_events_bytes_sum: int, optional + + :param iot_apm_host_sum: Shows the sum of all Application Performance Monitoring IoT hosts over all hours in the current date for all organizations. + :type iot_apm_host_sum: int, optional + + :param iot_apm_host_top99p: Shows the 99th percentile of all Application Performance Monitoring IoT hosts over all hours in the current date for all organizations. + :type iot_apm_host_top99p: int, optional + + :param iot_device_sum: Shows the sum of all IoT devices over all hours in the current date for all organizations. + :type iot_device_sum: int, optional + + :param iot_device_top99p: Shows the 99th percentile of all IoT devices over all hours in the current date all organizations. + :type iot_device_top99p: int, optional + + :param llm_observability_15day_retention_spans_sum: Shows the sum of all LLM Observability 15-day retention spans over all hours in the current date for all organizations. + :type llm_observability_15day_retention_spans_sum: int, optional + + :param llm_observability_30day_retention_spans_sum: Shows the sum of all LLM Observability 30-day retention spans over all hours in the current date for all organizations. + :type llm_observability_30day_retention_spans_sum: int, optional + + :param llm_observability_60day_retention_spans_sum: Shows the sum of all LLM Observability 60-day retention spans over all hours in the current date for all organizations. + :type llm_observability_60day_retention_spans_sum: int, optional + + :param llm_observability_90day_retention_spans_sum: Shows the sum of all LLM Observability 90-day retention spans over all hours in the current date for all organizations. + :type llm_observability_90day_retention_spans_sum: int, optional + + :param llm_observability_min_spend_sum: Sum of all LLM observability minimum spend over all hours in the current date for all organizations. + :type llm_observability_min_spend_sum: int, optional + + :param llm_observability_sum: Sum of all LLM observability sessions over all hours in the current date for all organizations. + :type llm_observability_sum: int, optional + + :param logs_archive_search_gb_scanned_sum: Shows the sum of all Logs Archive Search scanned data over all hours in the current date for all organizations. + :type logs_archive_search_gb_scanned_sum: int, optional + + :param metric_names_sum: Shows the sum of all custom metric names over all hours in the current date for all organizations. + :type metric_names_sum: int, optional + + :param mobile_rum_lite_session_count_sum: Shows the sum of all mobile lite sessions over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_lite_session_count_sum: int, optional + + :param mobile_rum_session_count_android_sum: Shows the sum of all mobile RUM sessions on Android over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_android_sum: int, optional + + :param mobile_rum_session_count_flutter_sum: Shows the sum of all mobile RUM sessions on Flutter over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_flutter_sum: int, optional + + :param mobile_rum_session_count_ios_sum: Shows the sum of all mobile RUM sessions on iOS over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_ios_sum: int, optional + + :param mobile_rum_session_count_reactnative_sum: Shows the sum of all mobile RUM sessions on React Native over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_reactnative_sum: int, optional + + :param mobile_rum_session_count_roku_sum: Shows the sum of all mobile RUM sessions on Roku over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_roku_sum: int, optional + + :param mobile_rum_session_count_sum: Shows the sum of all mobile RUM sessions over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_sum: int, optional + + :param mobile_rum_units_sum: Shows the sum of all mobile RUM units over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_units_sum: int, optional + + :param ndm_netflow_events_sum: Shows the sum of all Network Device Monitoring NetFlow events over all hours in the current date for the given org. + :type ndm_netflow_events_sum: int, optional + + :param netflow_indexed_events_count_sum: Shows the sum of all Network flows indexed over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type netflow_indexed_events_count_sum: int, optional + + :param network_device_wireless_top99p: Shows the 99th percentile of all Network Device Monitoring wireless devices over all hours in the current date for all organizations. + :type network_device_wireless_top99p: int, optional + + :param network_path_sum: Shows the sum of all Network Path scheduled tests over all hours in the current date for all organizations. + :type network_path_sum: int, optional + + :param npm_host_top99p: Shows the 99th percentile of all distinct Cloud Network Monitoring hosts (formerly known as Network hosts) over all hours in the current date for all organizations. + :type npm_host_top99p: int, optional + + :param observability_pipelines_bytes_processed_sum: Sum of all observability pipelines bytes processed over all hours in the current date for the given org. + :type observability_pipelines_bytes_processed_sum: int, optional + + :param oci_host_sum: Shows the sum of all Oracle Cloud Infrastructure hosts over all hours in the current date for the given org. + :type oci_host_sum: int, optional + + :param oci_host_top99p: Shows the 99th percentile of all Oracle Cloud Infrastructure hosts over all hours in the current date for the given org. + :type oci_host_top99p: int, optional + + :param on_call_seat_hwm: Shows the high-water mark of On-Call seats over all hours in the current date for all organizations. + :type on_call_seat_hwm: int, optional + + :param online_archive_events_count_sum: Sum of all online archived events over all hours in the current date for all organizations. + :type online_archive_events_count_sum: int, optional + + :param opentelemetry_apm_host_top99p: Shows the 99th percentile of APM hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current date for all organizations. + :type opentelemetry_apm_host_top99p: int, optional + + :param opentelemetry_host_top99p: Shows the 99th percentile of all hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current date for all organizations. + :type opentelemetry_host_top99p: int, optional + + :param orgs: Organizations associated with a user. + :type orgs: [UsageSummaryDateOrg], optional + + :param product_analytics_sum: Sum of all product analytics sessions over all hours in the current date for all organizations. + :type product_analytics_sum: int, optional + + :param profiling_aas_count_top99p: Shows the 99th percentile of all profiled Azure app services over all hours in the current date for all organizations. + :type profiling_aas_count_top99p: int, optional + + :param profiling_host_top99p: Shows the 99th percentile of all profiled hosts over all hours within the current date for all organizations. + :type profiling_host_top99p: int, optional + + :param proxmox_host_sum: Sum of all Proxmox hosts over all hours in the current date for all organizations. + :type proxmox_host_sum: int, optional + + :param proxmox_host_top99p: 99th percentile of all Proxmox hosts over all hours in the current date for all organizations. + :type proxmox_host_top99p: int, optional + + :param published_app_hwm: Shows the high-water mark of all published applications over all hours in the current date for all organizations. + :type published_app_hwm: int, optional + + :param rum_browser_and_mobile_session_count: Shows the sum of all mobile sessions and all browser lite and legacy sessions over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). + :type rum_browser_and_mobile_session_count: int, optional + + :param rum_browser_legacy_session_count_sum: Shows the sum of all browser RUM legacy sessions over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_browser_legacy_session_count_sum: int, optional + + :param rum_browser_lite_session_count_sum: Shows the sum of all browser RUM lite sessions over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_browser_lite_session_count_sum: int, optional + + :param rum_browser_replay_session_count_sum: Shows the sum of all browser RUM Session Replay counts over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_browser_replay_session_count_sum: int, optional + + :param rum_indexed_sessions_sum: Sum of all RUM indexed sessions over all hours in the current date for all organizations. + :type rum_indexed_sessions_sum: int, optional + + :param rum_ingested_sessions_sum: Sum of all RUM ingested sessions over all hours in the current date for all organizations. + :type rum_ingested_sessions_sum: int, optional + + :param rum_lite_session_count_sum: Shows the sum of all RUM lite sessions (browser and mobile) over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_lite_session_count_sum: int, optional + + :param rum_mobile_legacy_session_count_android_sum: Shows the sum of all mobile RUM legacy sessions on Android over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_android_sum: int, optional + + :param rum_mobile_legacy_session_count_flutter_sum: Shows the sum of all mobile RUM legacy Sessions on Flutter over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_flutter_sum: int, optional + + :param rum_mobile_legacy_session_count_ios_sum: Shows the sum of all mobile RUM legacy sessions on iOS over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_ios_sum: int, optional + + :param rum_mobile_legacy_session_count_reactnative_sum: Shows the sum of all mobile RUM legacy sessions on React Native over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_reactnative_sum: int, optional + + :param rum_mobile_legacy_session_count_roku_sum: Shows the sum of all mobile RUM legacy sessions on Roku over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_roku_sum: int, optional + + :param rum_mobile_lite_session_count_android_sum: Shows the sum of all mobile RUM lite sessions on Android over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_android_sum: int, optional + + :param rum_mobile_lite_session_count_flutter_sum: Shows the sum of all mobile RUM lite sessions on Flutter over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_flutter_sum: int, optional + + :param rum_mobile_lite_session_count_ios_sum: Shows the sum of all mobile RUM lite sessions on iOS over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_ios_sum: int, optional + + :param rum_mobile_lite_session_count_kotlinmultiplatform_sum: Shows the sum of all mobile RUM lite sessions on Kotlin Multiplatform over all hours within the current date for all organizations. + :type rum_mobile_lite_session_count_kotlinmultiplatform_sum: int, optional + + :param rum_mobile_lite_session_count_reactnative_sum: Shows the sum of all mobile RUM lite sessions on React Native over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_reactnative_sum: int, optional + + :param rum_mobile_lite_session_count_roku_sum: Shows the sum of all mobile RUM lite sessions on Roku over all hours within the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_roku_sum: int, optional + + :param rum_mobile_lite_session_count_unity_sum: Shows the sum of all mobile RUM lite sessions on Unity over all hours within the current date for all organizations. + :type rum_mobile_lite_session_count_unity_sum: int, optional + + :param rum_mobile_replay_session_count_android_sum: Shows the sum of all mobile RUM replay sessions on Android over all hours within the current date for the given org. + :type rum_mobile_replay_session_count_android_sum: int, optional + + :param rum_mobile_replay_session_count_ios_sum: Shows the sum of all mobile RUM replay sessions on iOS over all hours within the current date for the given org. + :type rum_mobile_replay_session_count_ios_sum: int, optional + + :param rum_mobile_replay_session_count_kotlinmultiplatform_sum: Shows the sum of all mobile RUM replay sessions on Kotlin Multiplatform over all hours within the current date for all organizations. + :type rum_mobile_replay_session_count_kotlinmultiplatform_sum: int, optional + + :param rum_mobile_replay_session_count_reactnative_sum: Shows the sum of all mobile RUM replay sessions on React Native over all hours within the current date for the given org. + :type rum_mobile_replay_session_count_reactnative_sum: int, optional + + :param rum_replay_session_count_sum: Shows the sum of all RUM Session Replay counts over all hours in the current date for all organizations (To be introduced on October 1st, 2024). + :type rum_replay_session_count_sum: int, optional + + :param rum_session_count_sum: Shows the sum of all browser RUM lite sessions over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type rum_session_count_sum: int, optional + + :param rum_session_replay_add_on_sum: Sum of all RUM session replay add-on sessions over all hours in the current date for all organizations. + :type rum_session_replay_add_on_sum: int, optional + + :param rum_total_session_count_sum: Shows the sum of RUM sessions (browser and mobile) over all hours in the current date for all organizations. + :type rum_total_session_count_sum: int, optional + + :param rum_units_sum: Shows the sum of all browser and mobile RUM units over all hours in the current date for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type rum_units_sum: int, optional + + :param sca_fargate_count_avg: Shows the average of all Software Composition Analysis Fargate tasks over all hours in the current date for the given org. + :type sca_fargate_count_avg: int, optional + + :param sca_fargate_count_hwm: Shows the sum of the high-water marks of all Software Composition Analysis Fargate tasks over all hours in the current date for the given org. + :type sca_fargate_count_hwm: int, optional + + :param sds_apm_scanned_bytes_sum: Sum of all APM bytes scanned with sensitive data scanner over all hours in the current date for all organizations. + :type sds_apm_scanned_bytes_sum: int, optional + + :param sds_events_scanned_bytes_sum: Sum of all event stream events bytes scanned with sensitive data scanner over all hours in the current date for all organizations. + :type sds_events_scanned_bytes_sum: int, optional + + :param sds_logs_scanned_bytes_sum: Shows the sum of all bytes scanned of logs usage by the Sensitive Data Scanner over all hours in the current month for all organizations. + :type sds_logs_scanned_bytes_sum: int, optional + + :param sds_rum_scanned_bytes_sum: Sum of all RUM bytes scanned with sensitive data scanner over all hours in the current date for all organizations. + :type sds_rum_scanned_bytes_sum: int, optional + + :param sds_total_scanned_bytes_sum: Shows the sum of all bytes scanned across all usage types by the Sensitive Data Scanner over all hours in the current month for all organizations. + :type sds_total_scanned_bytes_sum: int, optional + + :param serverless_apps_apm_apm_azure_appservice_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Azure App Service instances for the current date for all organizations. + :type serverless_apps_apm_apm_azure_appservice_instances_avg: int, optional + + :param serverless_apps_apm_apm_azure_azurefunction_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Azure Function instances for the current date for all organizations. + :type serverless_apps_apm_apm_azure_azurefunction_instances_avg: int, optional + + :param serverless_apps_apm_apm_azure_containerapp_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Azure Container App instances for the current date for all organizations. + :type serverless_apps_apm_apm_azure_containerapp_instances_avg: int, optional + + :param serverless_apps_apm_apm_fargate_ecs_tasks_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Fargate Elastic Container Service tasks for the current date for all organizations. + :type serverless_apps_apm_apm_fargate_ecs_tasks_avg: int, optional + + :param serverless_apps_apm_apm_gcp_cloudfunction_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Google Cloud Platform Cloud Function instances for the current date for all organizations. + :type serverless_apps_apm_apm_gcp_cloudfunction_instances_avg: int, optional + + :param serverless_apps_apm_apm_gcp_cloudrun_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Google Cloud Platform Cloud Run instances for the current date for all organizations. + :type serverless_apps_apm_apm_gcp_cloudrun_instances_avg: int, optional + + :param serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Google Kubernetes Engine Autopilot pods for the current date for all organizations. + :type serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg: int, optional + + :param serverless_apps_apm_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for the current date for all organizations. + :type serverless_apps_apm_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Azure App Service instances for the current date for all organizations. + :type serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Azure Function instances for the current date for all organizations. + :type serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Azure Container App instances for the current date for all organizations. + :type serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Google Cloud Platform Cloud Function instances for the current date for all organizations. + :type serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Google Cloud Platform Cloud Run instances for the current date for all organizations. + :type serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Google Kubernetes Engine Autopilot pods for the current date for all organizations. + :type serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg: int, optional + + :param serverless_apps_apm_excl_fargate_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for the current date for all organizations. + :type serverless_apps_apm_excl_fargate_avg: int, optional + + :param serverless_apps_azure_container_app_instances_avg: Shows the average number of Serverless Apps for Azure Container App instances for the current date for all organizations. + :type serverless_apps_azure_container_app_instances_avg: int, optional + + :param serverless_apps_azure_count_avg: Shows the average number of Serverless Apps for Azure for the given date and given org. + :type serverless_apps_azure_count_avg: int, optional + + :param serverless_apps_azure_function_app_instances_avg: Shows the average number of Serverless Apps for Azure Function App instances for the current date for all organizations. + :type serverless_apps_azure_function_app_instances_avg: int, optional + + :param serverless_apps_azure_web_app_instances_avg: Shows the average number of Serverless Apps for Azure Web App instances for the current date for all organizations. + :type serverless_apps_azure_web_app_instances_avg: int, optional + + :param serverless_apps_dsm_fargate_tasks_avg: Shows the average number of DSM Fargate ECS tasks monitored under Serverless Apps DSM for the current date for all organizations. + :type serverless_apps_dsm_fargate_tasks_avg: int, optional + + :param serverless_apps_ecs_avg: Shows the average number of Serverless Apps for Elastic Container Service for the current date for all organizations. + :type serverless_apps_ecs_avg: int, optional + + :param serverless_apps_eks_avg: Shows the average number of Serverless Apps for Elastic Kubernetes Service for the current date for all organizations. + :type serverless_apps_eks_avg: int, optional + + :param serverless_apps_excl_fargate_avg: Shows the average number of Serverless Apps excluding Fargate for the current date for all organizations. + :type serverless_apps_excl_fargate_avg: int, optional + + :param serverless_apps_excl_fargate_azure_container_app_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Azure Container App instances for the current date for all organizations. + :type serverless_apps_excl_fargate_azure_container_app_instances_avg: int, optional + + :param serverless_apps_excl_fargate_azure_function_app_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Azure Function App instances for the current date for all organizations. + :type serverless_apps_excl_fargate_azure_function_app_instances_avg: int, optional + + :param serverless_apps_excl_fargate_azure_web_app_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Azure Web App instances for the current date for all organizations. + :type serverless_apps_excl_fargate_azure_web_app_instances_avg: int, optional + + :param serverless_apps_excl_fargate_google_cloud_functions_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Google Cloud Platform Cloud Functions instances for the current date for all organizations. + :type serverless_apps_excl_fargate_google_cloud_functions_instances_avg: int, optional + + :param serverless_apps_excl_fargate_google_cloud_run_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Google Cloud Platform Cloud Run instances for the current date for all organizations. + :type serverless_apps_excl_fargate_google_cloud_run_instances_avg: int, optional + + :param serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg: Shows the average number of Serverless Apps excluding Fargate for Google Kubernetes Engine Autopilot pods for the current date for all organizations. + :type serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg: int, optional + + :param serverless_apps_google_cloud_functions_instances_avg: Shows the average number of Serverless Apps for Google Cloud Platform Cloud Functions instances for the current date for all organizations. + :type serverless_apps_google_cloud_functions_instances_avg: int, optional + + :param serverless_apps_google_cloud_run_instances_avg: Shows the average number of Serverless Apps for Google Cloud Platform Cloud Run instances for the current date for all organizations. + :type serverless_apps_google_cloud_run_instances_avg: int, optional + + :param serverless_apps_google_count_avg: Shows the average number of Serverless Apps for Google Cloud for the given date and given org. + :type serverless_apps_google_count_avg: int, optional + + :param serverless_apps_infra_gcp_gke_autopilot_pods_avg: Shows the average number of Serverless Apps for Google Kubernetes Engine Autopilot pods for the current date for all organizations. + :type serverless_apps_infra_gcp_gke_autopilot_pods_avg: int, optional + + :param serverless_apps_total_count_avg: Shows the average number of Serverless Apps for Azure and Google Cloud for the given date and given org. + :type serverless_apps_total_count_avg: int, optional + + :param siem_12mo_retention_sum: Shows the sum of Cloud SIEM Indexed Logs (12-month retention) over all hours in the current date for the given org. + :type siem_12mo_retention_sum: int, optional + + :param siem_6mo_retention_sum: Shows the sum of Cloud SIEM Indexed Logs (6-month retention) over all hours in the current date for the given org. + :type siem_6mo_retention_sum: int, optional + + :param siem_analyzed_logs_add_on_count_sum: Shows the sum of all log events analyzed by Cloud SIEM over all hours in the current date for the given org. + :type siem_analyzed_logs_add_on_count_sum: int, optional + + :param snmp_device_count_sum: Shows the sum of all Network Device Monitoring devices over all hours in the current date for all organizations. + :type snmp_device_count_sum: int, optional + + :param snmp_device_count_top99p: Shows the 99th percentile of all Network Device Monitoring devices over all hours in the current date for all organizations. + :type snmp_device_count_top99p: int, optional + + :param synthetics_browser_check_calls_count_sum: Shows the sum of all Synthetic browser tests over all hours in the current date for all organizations. + :type synthetics_browser_check_calls_count_sum: int, optional + + :param synthetics_check_calls_count_sum: Shows the sum of all Synthetic API tests over all hours in the current date for all organizations. + :type synthetics_check_calls_count_sum: int, optional + + :param synthetics_mobile_test_runs_sum: Shows the sum of all Synthetic mobile application tests over all hours in the current date for all organizations. + :type synthetics_mobile_test_runs_sum: int, optional + + :param synthetics_parallel_testing_max_slots_hwm: Shows the high-water mark of used synthetics parallel testing slots over all hours in the current date for all organizations. + :type synthetics_parallel_testing_max_slots_hwm: int, optional + + :param trace_search_indexed_events_count_sum: Shows the sum of all Indexed Spans indexed over all hours in the current date for all organizations. + :type trace_search_indexed_events_count_sum: int, optional + + :param twol_ingested_events_bytes_sum: Shows the sum of all ingested APM span bytes over all hours in the current date for all organizations. + :type twol_ingested_events_bytes_sum: int, optional + + :param universal_service_monitoring_host_top99p: Shows the 99th percentile of all universal service management hosts over all hours in the current date for the given org. + :type universal_service_monitoring_host_top99p: int, optional + + :param vsphere_host_top99p: Shows the 99th percentile of all vSphere hosts over all hours in the current date for all organizations. + :type vsphere_host_top99p: int, optional + + :param vuln_management_host_count_top99p: Shows the 99th percentile of all Application Vulnerability Management hosts over all hours in the current date for the given org. + :type vuln_management_host_count_top99p: int, optional + + :param workflow_executions_usage_sum: Sum of all workflows executed over all hours in the current date for all organizations. + :type workflow_executions_usage_sum: int, optional + """ + if agent_host_top99p is not unset: + kwargs["agent_host_top99p"] = agent_host_top99p + if ai_credits_agent_builder_ai_credits_sum is not unset: + kwargs["ai_credits_agent_builder_ai_credits_sum"] = ai_credits_agent_builder_ai_credits_sum + if ai_credits_bits_assistant_ai_credits_sum is not unset: + kwargs["ai_credits_bits_assistant_ai_credits_sum"] = ai_credits_bits_assistant_ai_credits_sum + if ai_credits_bits_dev_ai_credits_sum is not unset: + kwargs["ai_credits_bits_dev_ai_credits_sum"] = ai_credits_bits_dev_ai_credits_sum + if ai_credits_bits_sre_ai_credits_sum is not unset: + kwargs["ai_credits_bits_sre_ai_credits_sum"] = ai_credits_bits_sre_ai_credits_sum + if ai_credits_sum is not unset: + kwargs["ai_credits_sum"] = ai_credits_sum + if apm_azure_app_service_host_top99p is not unset: + kwargs["apm_azure_app_service_host_top99p"] = apm_azure_app_service_host_top99p + if apm_devsecops_host_top99p is not unset: + kwargs["apm_devsecops_host_top99p"] = apm_devsecops_host_top99p + if apm_enterprise_standalone_hosts_top99p is not unset: + kwargs["apm_enterprise_standalone_hosts_top99p"] = apm_enterprise_standalone_hosts_top99p + if apm_fargate_count_avg is not unset: + kwargs["apm_fargate_count_avg"] = apm_fargate_count_avg + if apm_host_top99p is not unset: + kwargs["apm_host_top99p"] = apm_host_top99p + if apm_pro_standalone_hosts_top99p is not unset: + kwargs["apm_pro_standalone_hosts_top99p"] = apm_pro_standalone_hosts_top99p + if appsec_fargate_count_avg is not unset: + kwargs["appsec_fargate_count_avg"] = appsec_fargate_count_avg + if asm_serverless_sum is not unset: + kwargs["asm_serverless_sum"] = asm_serverless_sum + if audit_logs_lines_indexed_sum is not unset: + kwargs["audit_logs_lines_indexed_sum"] = audit_logs_lines_indexed_sum + if audit_trail_enabled_hwm is not unset: + kwargs["audit_trail_enabled_hwm"] = audit_trail_enabled_hwm + if audit_trail_event_forwarding_events_sum is not unset: + kwargs["audit_trail_event_forwarding_events_sum"] = audit_trail_event_forwarding_events_sum + if avg_profiled_fargate_tasks is not unset: + kwargs["avg_profiled_fargate_tasks"] = avg_profiled_fargate_tasks + if aws_host_top99p is not unset: + kwargs["aws_host_top99p"] = aws_host_top99p + if aws_lambda_func_count is not unset: + kwargs["aws_lambda_func_count"] = aws_lambda_func_count + if aws_lambda_invocations_sum is not unset: + kwargs["aws_lambda_invocations_sum"] = aws_lambda_invocations_sum + if azure_app_service_top99p is not unset: + kwargs["azure_app_service_top99p"] = azure_app_service_top99p + if billable_ingested_bytes_sum is not unset: + kwargs["billable_ingested_bytes_sum"] = billable_ingested_bytes_sum + if bits_ai_investigations_sum is not unset: + kwargs["bits_ai_investigations_sum"] = bits_ai_investigations_sum + if browser_rum_lite_session_count_sum is not unset: + kwargs["browser_rum_lite_session_count_sum"] = browser_rum_lite_session_count_sum + if browser_rum_replay_session_count_sum is not unset: + kwargs["browser_rum_replay_session_count_sum"] = browser_rum_replay_session_count_sum + if browser_rum_units_sum is not unset: + kwargs["browser_rum_units_sum"] = browser_rum_units_sum + if ccm_anthropic_spend_last is not unset: + kwargs["ccm_anthropic_spend_last"] = ccm_anthropic_spend_last + if ccm_aws_spend_last is not unset: + kwargs["ccm_aws_spend_last"] = ccm_aws_spend_last + if ccm_azure_spend_last is not unset: + kwargs["ccm_azure_spend_last"] = ccm_azure_spend_last + if ccm_confluent_spend_last is not unset: + kwargs["ccm_confluent_spend_last"] = ccm_confluent_spend_last + if ccm_databricks_spend_last is not unset: + kwargs["ccm_databricks_spend_last"] = ccm_databricks_spend_last + if ccm_elastic_spend_last is not unset: + kwargs["ccm_elastic_spend_last"] = ccm_elastic_spend_last + if ccm_fastly_spend_last is not unset: + kwargs["ccm_fastly_spend_last"] = ccm_fastly_spend_last + if ccm_gcp_spend_last is not unset: + kwargs["ccm_gcp_spend_last"] = ccm_gcp_spend_last + if ccm_github_spend_last is not unset: + kwargs["ccm_github_spend_last"] = ccm_github_spend_last + if ccm_mongodb_spend_last is not unset: + kwargs["ccm_mongodb_spend_last"] = ccm_mongodb_spend_last + if ccm_oci_spend_last is not unset: + kwargs["ccm_oci_spend_last"] = ccm_oci_spend_last + if ccm_openai_spend_last is not unset: + kwargs["ccm_openai_spend_last"] = ccm_openai_spend_last + if ccm_snowflake_spend_last is not unset: + kwargs["ccm_snowflake_spend_last"] = ccm_snowflake_spend_last + if ccm_spend_monitored_ent_last is not unset: + kwargs["ccm_spend_monitored_ent_last"] = ccm_spend_monitored_ent_last + if ccm_spend_monitored_pro_last is not unset: + kwargs["ccm_spend_monitored_pro_last"] = ccm_spend_monitored_pro_last + if ccm_twilio_spend_last is not unset: + kwargs["ccm_twilio_spend_last"] = ccm_twilio_spend_last + if ci_pipeline_indexed_spans_sum is not unset: + kwargs["ci_pipeline_indexed_spans_sum"] = ci_pipeline_indexed_spans_sum + if ci_test_indexed_spans_sum is not unset: + kwargs["ci_test_indexed_spans_sum"] = ci_test_indexed_spans_sum + if ci_visibility_itr_committers_hwm is not unset: + kwargs["ci_visibility_itr_committers_hwm"] = ci_visibility_itr_committers_hwm + if ci_visibility_pipeline_committers_hwm is not unset: + kwargs["ci_visibility_pipeline_committers_hwm"] = ci_visibility_pipeline_committers_hwm + if ci_visibility_test_committers_hwm is not unset: + kwargs["ci_visibility_test_committers_hwm"] = ci_visibility_test_committers_hwm + if cloud_cost_management_aws_host_count_avg is not unset: + kwargs["cloud_cost_management_aws_host_count_avg"] = cloud_cost_management_aws_host_count_avg + if cloud_cost_management_azure_host_count_avg is not unset: + kwargs["cloud_cost_management_azure_host_count_avg"] = cloud_cost_management_azure_host_count_avg + if cloud_cost_management_gcp_host_count_avg is not unset: + kwargs["cloud_cost_management_gcp_host_count_avg"] = cloud_cost_management_gcp_host_count_avg + if cloud_cost_management_host_count_avg is not unset: + kwargs["cloud_cost_management_host_count_avg"] = cloud_cost_management_host_count_avg + if cloud_cost_management_oci_host_count_avg is not unset: + kwargs["cloud_cost_management_oci_host_count_avg"] = cloud_cost_management_oci_host_count_avg + if cloud_siem_events_sum is not unset: + kwargs["cloud_siem_events_sum"] = cloud_siem_events_sum + if cloud_siem_indexed_logs_sum is not unset: + kwargs["cloud_siem_indexed_logs_sum"] = cloud_siem_indexed_logs_sum + if code_analysis_sa_committers_hwm is not unset: + kwargs["code_analysis_sa_committers_hwm"] = code_analysis_sa_committers_hwm + if code_analysis_sca_committers_hwm is not unset: + kwargs["code_analysis_sca_committers_hwm"] = code_analysis_sca_committers_hwm + if code_security_host_top99p is not unset: + kwargs["code_security_host_top99p"] = code_security_host_top99p + if container_avg is not unset: + kwargs["container_avg"] = container_avg + if container_excl_agent_avg is not unset: + kwargs["container_excl_agent_avg"] = container_excl_agent_avg + if container_hwm is not unset: + kwargs["container_hwm"] = container_hwm + if csm_container_enterprise_compliance_count_sum is not unset: + kwargs["csm_container_enterprise_compliance_count_sum"] = csm_container_enterprise_compliance_count_sum + if csm_container_enterprise_cws_count_sum is not unset: + kwargs["csm_container_enterprise_cws_count_sum"] = csm_container_enterprise_cws_count_sum + if csm_container_enterprise_total_count_sum is not unset: + kwargs["csm_container_enterprise_total_count_sum"] = csm_container_enterprise_total_count_sum + if csm_host_enterprise_aas_host_count_top99p is not unset: + kwargs["csm_host_enterprise_aas_host_count_top99p"] = csm_host_enterprise_aas_host_count_top99p + if csm_host_enterprise_aws_host_count_top99p is not unset: + kwargs["csm_host_enterprise_aws_host_count_top99p"] = csm_host_enterprise_aws_host_count_top99p + if csm_host_enterprise_azure_host_count_top99p is not unset: + kwargs["csm_host_enterprise_azure_host_count_top99p"] = csm_host_enterprise_azure_host_count_top99p + if csm_host_enterprise_compliance_host_count_top99p is not unset: + kwargs["csm_host_enterprise_compliance_host_count_top99p"] = csm_host_enterprise_compliance_host_count_top99p + if csm_host_enterprise_cws_host_count_top99p is not unset: + kwargs["csm_host_enterprise_cws_host_count_top99p"] = csm_host_enterprise_cws_host_count_top99p + if csm_host_enterprise_gcp_host_count_top99p is not unset: + kwargs["csm_host_enterprise_gcp_host_count_top99p"] = csm_host_enterprise_gcp_host_count_top99p + if csm_host_enterprise_oci_host_count_top99p is not unset: + kwargs["csm_host_enterprise_oci_host_count_top99p"] = csm_host_enterprise_oci_host_count_top99p + if csm_host_enterprise_total_host_count_top99p is not unset: + kwargs["csm_host_enterprise_total_host_count_top99p"] = csm_host_enterprise_total_host_count_top99p + if csm_host_pro_hosts_agentless_scanners_sum is not unset: + kwargs["csm_host_pro_hosts_agentless_scanners_sum"] = csm_host_pro_hosts_agentless_scanners_sum + if csm_host_pro_hosts_agentless_scanners_top99p is not unset: + kwargs["csm_host_pro_hosts_agentless_scanners_top99p"] = csm_host_pro_hosts_agentless_scanners_top99p + if csm_host_pro_oci_host_count_top99p is not unset: + kwargs["csm_host_pro_oci_host_count_top99p"] = csm_host_pro_oci_host_count_top99p + if cspm_aas_host_top99p is not unset: + kwargs["cspm_aas_host_top99p"] = cspm_aas_host_top99p + if cspm_aws_host_top99p is not unset: + kwargs["cspm_aws_host_top99p"] = cspm_aws_host_top99p + if cspm_azure_host_top99p is not unset: + kwargs["cspm_azure_host_top99p"] = cspm_azure_host_top99p + if cspm_container_avg is not unset: + kwargs["cspm_container_avg"] = cspm_container_avg + if cspm_container_hwm is not unset: + kwargs["cspm_container_hwm"] = cspm_container_hwm + if cspm_gcp_host_top99p is not unset: + kwargs["cspm_gcp_host_top99p"] = cspm_gcp_host_top99p + if cspm_host_top99p is not unset: + kwargs["cspm_host_top99p"] = cspm_host_top99p + if cspm_hosts_agentless_scanners_sum is not unset: + kwargs["cspm_hosts_agentless_scanners_sum"] = cspm_hosts_agentless_scanners_sum + if cspm_hosts_agentless_scanners_top99p is not unset: + kwargs["cspm_hosts_agentless_scanners_top99p"] = cspm_hosts_agentless_scanners_top99p + if custom_ts_avg is not unset: + kwargs["custom_ts_avg"] = custom_ts_avg + if cws_container_count_avg is not unset: + kwargs["cws_container_count_avg"] = cws_container_count_avg + if cws_fargate_task_avg is not unset: + kwargs["cws_fargate_task_avg"] = cws_fargate_task_avg + if cws_host_top99p is not unset: + kwargs["cws_host_top99p"] = cws_host_top99p + if data_jobs_monitoring_host_hr_sum is not unset: + kwargs["data_jobs_monitoring_host_hr_sum"] = data_jobs_monitoring_host_hr_sum + if data_stream_monitoring_host_count_sum is not unset: + kwargs["data_stream_monitoring_host_count_sum"] = data_stream_monitoring_host_count_sum + if data_stream_monitoring_host_count_top99p is not unset: + kwargs["data_stream_monitoring_host_count_top99p"] = data_stream_monitoring_host_count_top99p + if date is not unset: + kwargs["date"] = date + if dbm_host_top99p is not unset: + kwargs["dbm_host_top99p"] = dbm_host_top99p + if dbm_queries_count_avg is not unset: + kwargs["dbm_queries_count_avg"] = dbm_queries_count_avg + if do_jobs_monitoring_orchestrators_job_hours_sum is not unset: + kwargs["do_jobs_monitoring_orchestrators_job_hours_sum"] = do_jobs_monitoring_orchestrators_job_hours_sum + if eph_infra_host_agent_sum is not unset: + kwargs["eph_infra_host_agent_sum"] = eph_infra_host_agent_sum + if eph_infra_host_alibaba_sum is not unset: + kwargs["eph_infra_host_alibaba_sum"] = eph_infra_host_alibaba_sum + if eph_infra_host_aws_sum is not unset: + kwargs["eph_infra_host_aws_sum"] = eph_infra_host_aws_sum + if eph_infra_host_azure_sum is not unset: + kwargs["eph_infra_host_azure_sum"] = eph_infra_host_azure_sum + if eph_infra_host_basic_infra_basic_agent_sum is not unset: + kwargs["eph_infra_host_basic_infra_basic_agent_sum"] = eph_infra_host_basic_infra_basic_agent_sum + if eph_infra_host_basic_infra_basic_vsphere_sum is not unset: + kwargs["eph_infra_host_basic_infra_basic_vsphere_sum"] = eph_infra_host_basic_infra_basic_vsphere_sum + if eph_infra_host_basic_sum is not unset: + kwargs["eph_infra_host_basic_sum"] = eph_infra_host_basic_sum + if eph_infra_host_ent_sum is not unset: + kwargs["eph_infra_host_ent_sum"] = eph_infra_host_ent_sum + if eph_infra_host_gcp_sum is not unset: + kwargs["eph_infra_host_gcp_sum"] = eph_infra_host_gcp_sum + if eph_infra_host_heroku_sum is not unset: + kwargs["eph_infra_host_heroku_sum"] = eph_infra_host_heroku_sum + if eph_infra_host_only_aas_sum is not unset: + kwargs["eph_infra_host_only_aas_sum"] = eph_infra_host_only_aas_sum + if eph_infra_host_only_vsphere_sum is not unset: + kwargs["eph_infra_host_only_vsphere_sum"] = eph_infra_host_only_vsphere_sum + if eph_infra_host_opentelemetry_apm_sum is not unset: + kwargs["eph_infra_host_opentelemetry_apm_sum"] = eph_infra_host_opentelemetry_apm_sum + if eph_infra_host_opentelemetry_sum is not unset: + kwargs["eph_infra_host_opentelemetry_sum"] = eph_infra_host_opentelemetry_sum + if eph_infra_host_pro_sum is not unset: + kwargs["eph_infra_host_pro_sum"] = eph_infra_host_pro_sum + if eph_infra_host_proplus_sum is not unset: + kwargs["eph_infra_host_proplus_sum"] = eph_infra_host_proplus_sum + if eph_infra_host_proxmox_sum is not unset: + kwargs["eph_infra_host_proxmox_sum"] = eph_infra_host_proxmox_sum + if error_tracking_apm_error_events_sum is not unset: + kwargs["error_tracking_apm_error_events_sum"] = error_tracking_apm_error_events_sum + if error_tracking_error_events_sum is not unset: + kwargs["error_tracking_error_events_sum"] = error_tracking_error_events_sum + if error_tracking_events_sum is not unset: + kwargs["error_tracking_events_sum"] = error_tracking_events_sum + if error_tracking_rum_error_events_sum is not unset: + kwargs["error_tracking_rum_error_events_sum"] = error_tracking_rum_error_events_sum + if event_management_correlation_correlated_events_sum is not unset: + kwargs["event_management_correlation_correlated_events_sum"] = event_management_correlation_correlated_events_sum + if event_management_correlation_correlated_related_events_sum is not unset: + kwargs["event_management_correlation_correlated_related_events_sum"] = event_management_correlation_correlated_related_events_sum + if event_management_correlation_sum is not unset: + kwargs["event_management_correlation_sum"] = event_management_correlation_sum + if fargate_container_profiler_profiling_fargate_avg is not unset: + kwargs["fargate_container_profiler_profiling_fargate_avg"] = fargate_container_profiler_profiling_fargate_avg + if fargate_container_profiler_profiling_fargate_eks_avg is not unset: + kwargs["fargate_container_profiler_profiling_fargate_eks_avg"] = fargate_container_profiler_profiling_fargate_eks_avg + if fargate_tasks_count_avg is not unset: + kwargs["fargate_tasks_count_avg"] = fargate_tasks_count_avg + if fargate_tasks_count_hwm is not unset: + kwargs["fargate_tasks_count_hwm"] = fargate_tasks_count_hwm + if feature_flags_config_requests_sum is not unset: + kwargs["feature_flags_config_requests_sum"] = feature_flags_config_requests_sum + if flex_logs_compute_large_avg is not unset: + kwargs["flex_logs_compute_large_avg"] = flex_logs_compute_large_avg + if flex_logs_compute_medium_avg is not unset: + kwargs["flex_logs_compute_medium_avg"] = flex_logs_compute_medium_avg + if flex_logs_compute_small_avg is not unset: + kwargs["flex_logs_compute_small_avg"] = flex_logs_compute_small_avg + if flex_logs_compute_xlarge_avg is not unset: + kwargs["flex_logs_compute_xlarge_avg"] = flex_logs_compute_xlarge_avg + if flex_logs_compute_xsmall_avg is not unset: + kwargs["flex_logs_compute_xsmall_avg"] = flex_logs_compute_xsmall_avg + if flex_logs_starter_avg is not unset: + kwargs["flex_logs_starter_avg"] = flex_logs_starter_avg + if flex_logs_starter_storage_index_avg is not unset: + kwargs["flex_logs_starter_storage_index_avg"] = flex_logs_starter_storage_index_avg + if flex_logs_starter_storage_retention_adjustment_avg is not unset: + kwargs["flex_logs_starter_storage_retention_adjustment_avg"] = flex_logs_starter_storage_retention_adjustment_avg + if flex_stored_logs_avg is not unset: + kwargs["flex_stored_logs_avg"] = flex_stored_logs_avg + if forwarding_events_bytes_sum is not unset: + kwargs["forwarding_events_bytes_sum"] = forwarding_events_bytes_sum + if gcp_host_top99p is not unset: + kwargs["gcp_host_top99p"] = gcp_host_top99p + if heroku_host_top99p is not unset: + kwargs["heroku_host_top99p"] = heroku_host_top99p + if incident_management_monthly_active_users_hwm is not unset: + kwargs["incident_management_monthly_active_users_hwm"] = incident_management_monthly_active_users_hwm + if incident_management_seats_hwm is not unset: + kwargs["incident_management_seats_hwm"] = incident_management_seats_hwm + if indexed_events_count_sum is not unset: + kwargs["indexed_events_count_sum"] = indexed_events_count_sum + if indexed_points_sum is not unset: + kwargs["indexed_points_sum"] = indexed_points_sum + if infra_cpu_avg is not unset: + kwargs["infra_cpu_avg"] = infra_cpu_avg + if infra_cpu_default_infra_host_vcpu_agent_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_avg"] = infra_cpu_default_infra_host_vcpu_agent_avg + if infra_cpu_default_infra_host_vcpu_agent_basic_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_basic_avg"] = infra_cpu_default_infra_host_vcpu_agent_basic_avg + if infra_cpu_default_infra_host_vcpu_agent_basic_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_basic_sum"] = infra_cpu_default_infra_host_vcpu_agent_basic_sum + if infra_cpu_default_infra_host_vcpu_agent_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_sum"] = infra_cpu_default_infra_host_vcpu_agent_sum + if infra_cpu_default_infra_host_vcpu_aws_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_aws_avg"] = infra_cpu_default_infra_host_vcpu_aws_avg + if infra_cpu_default_infra_host_vcpu_aws_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_aws_sum"] = infra_cpu_default_infra_host_vcpu_aws_sum + if infra_cpu_default_infra_host_vcpu_azure_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_azure_avg"] = infra_cpu_default_infra_host_vcpu_azure_avg + if infra_cpu_default_infra_host_vcpu_azure_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_azure_sum"] = infra_cpu_default_infra_host_vcpu_azure_sum + if infra_cpu_default_infra_host_vcpu_gcp_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_gcp_avg"] = infra_cpu_default_infra_host_vcpu_gcp_avg + if infra_cpu_default_infra_host_vcpu_gcp_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_gcp_sum"] = infra_cpu_default_infra_host_vcpu_gcp_sum + if infra_cpu_default_infra_host_vcpu_nutanix_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_avg"] = infra_cpu_default_infra_host_vcpu_nutanix_avg + if infra_cpu_default_infra_host_vcpu_nutanix_basic_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_basic_avg"] = infra_cpu_default_infra_host_vcpu_nutanix_basic_avg + if infra_cpu_default_infra_host_vcpu_nutanix_basic_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_basic_sum"] = infra_cpu_default_infra_host_vcpu_nutanix_basic_sum + if infra_cpu_default_infra_host_vcpu_nutanix_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_sum"] = infra_cpu_default_infra_host_vcpu_nutanix_sum + if infra_cpu_default_infra_host_vcpu_opentelemetry_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_opentelemetry_avg"] = infra_cpu_default_infra_host_vcpu_opentelemetry_avg + if infra_cpu_default_infra_host_vcpu_opentelemetry_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_opentelemetry_sum"] = infra_cpu_default_infra_host_vcpu_opentelemetry_sum + if infra_cpu_observed_infra_host_vcpu_agent_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_agent_avg"] = infra_cpu_observed_infra_host_vcpu_agent_avg + if infra_cpu_observed_infra_host_vcpu_agent_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_agent_sum"] = infra_cpu_observed_infra_host_vcpu_agent_sum + if infra_cpu_observed_infra_host_vcpu_aws_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_aws_avg"] = infra_cpu_observed_infra_host_vcpu_aws_avg + if infra_cpu_observed_infra_host_vcpu_aws_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_aws_sum"] = infra_cpu_observed_infra_host_vcpu_aws_sum + if infra_cpu_observed_infra_host_vcpu_azure_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_azure_avg"] = infra_cpu_observed_infra_host_vcpu_azure_avg + if infra_cpu_observed_infra_host_vcpu_azure_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_azure_sum"] = infra_cpu_observed_infra_host_vcpu_azure_sum + if infra_cpu_observed_infra_host_vcpu_gcp_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_gcp_avg"] = infra_cpu_observed_infra_host_vcpu_gcp_avg + if infra_cpu_observed_infra_host_vcpu_gcp_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_gcp_sum"] = infra_cpu_observed_infra_host_vcpu_gcp_sum + if infra_cpu_observed_infra_host_vcpu_nutanix_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_nutanix_avg"] = infra_cpu_observed_infra_host_vcpu_nutanix_avg + if infra_cpu_observed_infra_host_vcpu_nutanix_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_nutanix_sum"] = infra_cpu_observed_infra_host_vcpu_nutanix_sum + if infra_cpu_observed_infra_host_vcpu_opentelemetry_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_opentelemetry_avg"] = infra_cpu_observed_infra_host_vcpu_opentelemetry_avg + if infra_cpu_observed_infra_host_vcpu_opentelemetry_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_opentelemetry_sum"] = infra_cpu_observed_infra_host_vcpu_opentelemetry_sum + if infra_cpu_sum is not unset: + kwargs["infra_cpu_sum"] = infra_cpu_sum + if infra_edge_monitoring_devices_top99p is not unset: + kwargs["infra_edge_monitoring_devices_top99p"] = infra_edge_monitoring_devices_top99p + if infra_host_basic_infra_basic_agent_top99p is not unset: + kwargs["infra_host_basic_infra_basic_agent_top99p"] = infra_host_basic_infra_basic_agent_top99p + if infra_host_basic_infra_basic_vsphere_top99p is not unset: + kwargs["infra_host_basic_infra_basic_vsphere_top99p"] = infra_host_basic_infra_basic_vsphere_top99p + if infra_host_basic_top99p is not unset: + kwargs["infra_host_basic_top99p"] = infra_host_basic_top99p + if infra_host_top99p is not unset: + kwargs["infra_host_top99p"] = infra_host_top99p + if infra_storage_mgmt_objects_count_avg is not unset: + kwargs["infra_storage_mgmt_objects_count_avg"] = infra_storage_mgmt_objects_count_avg + if ingest_points_sum is not unset: + kwargs["ingest_points_sum"] = ingest_points_sum + if ingested_events_bytes_sum is not unset: + kwargs["ingested_events_bytes_sum"] = ingested_events_bytes_sum + if iot_apm_host_sum is not unset: + kwargs["iot_apm_host_sum"] = iot_apm_host_sum + if iot_apm_host_top99p is not unset: + kwargs["iot_apm_host_top99p"] = iot_apm_host_top99p + if iot_device_sum is not unset: + kwargs["iot_device_sum"] = iot_device_sum + if iot_device_top99p is not unset: + kwargs["iot_device_top99p"] = iot_device_top99p + if llm_observability_15day_retention_spans_sum is not unset: + kwargs["llm_observability_15day_retention_spans_sum"] = llm_observability_15day_retention_spans_sum + if llm_observability_30day_retention_spans_sum is not unset: + kwargs["llm_observability_30day_retention_spans_sum"] = llm_observability_30day_retention_spans_sum + if llm_observability_60day_retention_spans_sum is not unset: + kwargs["llm_observability_60day_retention_spans_sum"] = llm_observability_60day_retention_spans_sum + if llm_observability_90day_retention_spans_sum is not unset: + kwargs["llm_observability_90day_retention_spans_sum"] = llm_observability_90day_retention_spans_sum + if llm_observability_min_spend_sum is not unset: + kwargs["llm_observability_min_spend_sum"] = llm_observability_min_spend_sum + if llm_observability_sum is not unset: + kwargs["llm_observability_sum"] = llm_observability_sum + if logs_archive_search_gb_scanned_sum is not unset: + kwargs["logs_archive_search_gb_scanned_sum"] = logs_archive_search_gb_scanned_sum + if metric_names_sum is not unset: + kwargs["metric_names_sum"] = metric_names_sum + if mobile_rum_lite_session_count_sum is not unset: + kwargs["mobile_rum_lite_session_count_sum"] = mobile_rum_lite_session_count_sum + if mobile_rum_session_count_android_sum is not unset: + kwargs["mobile_rum_session_count_android_sum"] = mobile_rum_session_count_android_sum + if mobile_rum_session_count_flutter_sum is not unset: + kwargs["mobile_rum_session_count_flutter_sum"] = mobile_rum_session_count_flutter_sum + if mobile_rum_session_count_ios_sum is not unset: + kwargs["mobile_rum_session_count_ios_sum"] = mobile_rum_session_count_ios_sum + if mobile_rum_session_count_reactnative_sum is not unset: + kwargs["mobile_rum_session_count_reactnative_sum"] = mobile_rum_session_count_reactnative_sum + if mobile_rum_session_count_roku_sum is not unset: + kwargs["mobile_rum_session_count_roku_sum"] = mobile_rum_session_count_roku_sum + if mobile_rum_session_count_sum is not unset: + kwargs["mobile_rum_session_count_sum"] = mobile_rum_session_count_sum + if mobile_rum_units_sum is not unset: + kwargs["mobile_rum_units_sum"] = mobile_rum_units_sum + if ndm_netflow_events_sum is not unset: + kwargs["ndm_netflow_events_sum"] = ndm_netflow_events_sum + if netflow_indexed_events_count_sum is not unset: + kwargs["netflow_indexed_events_count_sum"] = netflow_indexed_events_count_sum + if network_device_wireless_top99p is not unset: + kwargs["network_device_wireless_top99p"] = network_device_wireless_top99p + if network_path_sum is not unset: + kwargs["network_path_sum"] = network_path_sum + if npm_host_top99p is not unset: + kwargs["npm_host_top99p"] = npm_host_top99p + if observability_pipelines_bytes_processed_sum is not unset: + kwargs["observability_pipelines_bytes_processed_sum"] = observability_pipelines_bytes_processed_sum + if oci_host_sum is not unset: + kwargs["oci_host_sum"] = oci_host_sum + if oci_host_top99p is not unset: + kwargs["oci_host_top99p"] = oci_host_top99p + if on_call_seat_hwm is not unset: + kwargs["on_call_seat_hwm"] = on_call_seat_hwm + if online_archive_events_count_sum is not unset: + kwargs["online_archive_events_count_sum"] = online_archive_events_count_sum + if opentelemetry_apm_host_top99p is not unset: + kwargs["opentelemetry_apm_host_top99p"] = opentelemetry_apm_host_top99p + if opentelemetry_host_top99p is not unset: + kwargs["opentelemetry_host_top99p"] = opentelemetry_host_top99p + if orgs is not unset: + kwargs["orgs"] = orgs + if product_analytics_sum is not unset: + kwargs["product_analytics_sum"] = product_analytics_sum + if profiling_aas_count_top99p is not unset: + kwargs["profiling_aas_count_top99p"] = profiling_aas_count_top99p + if profiling_host_top99p is not unset: + kwargs["profiling_host_top99p"] = profiling_host_top99p + if proxmox_host_sum is not unset: + kwargs["proxmox_host_sum"] = proxmox_host_sum + if proxmox_host_top99p is not unset: + kwargs["proxmox_host_top99p"] = proxmox_host_top99p + if published_app_hwm is not unset: + kwargs["published_app_hwm"] = published_app_hwm + if rum_browser_and_mobile_session_count is not unset: + kwargs["rum_browser_and_mobile_session_count"] = rum_browser_and_mobile_session_count + if rum_browser_legacy_session_count_sum is not unset: + kwargs["rum_browser_legacy_session_count_sum"] = rum_browser_legacy_session_count_sum + if rum_browser_lite_session_count_sum is not unset: + kwargs["rum_browser_lite_session_count_sum"] = rum_browser_lite_session_count_sum + if rum_browser_replay_session_count_sum is not unset: + kwargs["rum_browser_replay_session_count_sum"] = rum_browser_replay_session_count_sum + if rum_indexed_sessions_sum is not unset: + kwargs["rum_indexed_sessions_sum"] = rum_indexed_sessions_sum + if rum_ingested_sessions_sum is not unset: + kwargs["rum_ingested_sessions_sum"] = rum_ingested_sessions_sum + if rum_lite_session_count_sum is not unset: + kwargs["rum_lite_session_count_sum"] = rum_lite_session_count_sum + if rum_mobile_legacy_session_count_android_sum is not unset: + kwargs["rum_mobile_legacy_session_count_android_sum"] = rum_mobile_legacy_session_count_android_sum + if rum_mobile_legacy_session_count_flutter_sum is not unset: + kwargs["rum_mobile_legacy_session_count_flutter_sum"] = rum_mobile_legacy_session_count_flutter_sum + if rum_mobile_legacy_session_count_ios_sum is not unset: + kwargs["rum_mobile_legacy_session_count_ios_sum"] = rum_mobile_legacy_session_count_ios_sum + if rum_mobile_legacy_session_count_reactnative_sum is not unset: + kwargs["rum_mobile_legacy_session_count_reactnative_sum"] = rum_mobile_legacy_session_count_reactnative_sum + if rum_mobile_legacy_session_count_roku_sum is not unset: + kwargs["rum_mobile_legacy_session_count_roku_sum"] = rum_mobile_legacy_session_count_roku_sum + if rum_mobile_lite_session_count_android_sum is not unset: + kwargs["rum_mobile_lite_session_count_android_sum"] = rum_mobile_lite_session_count_android_sum + if rum_mobile_lite_session_count_flutter_sum is not unset: + kwargs["rum_mobile_lite_session_count_flutter_sum"] = rum_mobile_lite_session_count_flutter_sum + if rum_mobile_lite_session_count_ios_sum is not unset: + kwargs["rum_mobile_lite_session_count_ios_sum"] = rum_mobile_lite_session_count_ios_sum + if rum_mobile_lite_session_count_kotlinmultiplatform_sum is not unset: + kwargs["rum_mobile_lite_session_count_kotlinmultiplatform_sum"] = rum_mobile_lite_session_count_kotlinmultiplatform_sum + if rum_mobile_lite_session_count_reactnative_sum is not unset: + kwargs["rum_mobile_lite_session_count_reactnative_sum"] = rum_mobile_lite_session_count_reactnative_sum + if rum_mobile_lite_session_count_roku_sum is not unset: + kwargs["rum_mobile_lite_session_count_roku_sum"] = rum_mobile_lite_session_count_roku_sum + if rum_mobile_lite_session_count_unity_sum is not unset: + kwargs["rum_mobile_lite_session_count_unity_sum"] = rum_mobile_lite_session_count_unity_sum + if rum_mobile_replay_session_count_android_sum is not unset: + kwargs["rum_mobile_replay_session_count_android_sum"] = rum_mobile_replay_session_count_android_sum + if rum_mobile_replay_session_count_ios_sum is not unset: + kwargs["rum_mobile_replay_session_count_ios_sum"] = rum_mobile_replay_session_count_ios_sum + if rum_mobile_replay_session_count_kotlinmultiplatform_sum is not unset: + kwargs["rum_mobile_replay_session_count_kotlinmultiplatform_sum"] = rum_mobile_replay_session_count_kotlinmultiplatform_sum + if rum_mobile_replay_session_count_reactnative_sum is not unset: + kwargs["rum_mobile_replay_session_count_reactnative_sum"] = rum_mobile_replay_session_count_reactnative_sum + if rum_replay_session_count_sum is not unset: + kwargs["rum_replay_session_count_sum"] = rum_replay_session_count_sum + if rum_session_count_sum is not unset: + kwargs["rum_session_count_sum"] = rum_session_count_sum + if rum_session_replay_add_on_sum is not unset: + kwargs["rum_session_replay_add_on_sum"] = rum_session_replay_add_on_sum + if rum_total_session_count_sum is not unset: + kwargs["rum_total_session_count_sum"] = rum_total_session_count_sum + if rum_units_sum is not unset: + kwargs["rum_units_sum"] = rum_units_sum + if sca_fargate_count_avg is not unset: + kwargs["sca_fargate_count_avg"] = sca_fargate_count_avg + if sca_fargate_count_hwm is not unset: + kwargs["sca_fargate_count_hwm"] = sca_fargate_count_hwm + if sds_apm_scanned_bytes_sum is not unset: + kwargs["sds_apm_scanned_bytes_sum"] = sds_apm_scanned_bytes_sum + if sds_events_scanned_bytes_sum is not unset: + kwargs["sds_events_scanned_bytes_sum"] = sds_events_scanned_bytes_sum + if sds_logs_scanned_bytes_sum is not unset: + kwargs["sds_logs_scanned_bytes_sum"] = sds_logs_scanned_bytes_sum + if sds_rum_scanned_bytes_sum is not unset: + kwargs["sds_rum_scanned_bytes_sum"] = sds_rum_scanned_bytes_sum + if sds_total_scanned_bytes_sum is not unset: + kwargs["sds_total_scanned_bytes_sum"] = sds_total_scanned_bytes_sum + if serverless_apps_apm_apm_azure_appservice_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_azure_appservice_instances_avg"] = serverless_apps_apm_apm_azure_appservice_instances_avg + if serverless_apps_apm_apm_azure_azurefunction_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_azure_azurefunction_instances_avg"] = serverless_apps_apm_apm_azure_azurefunction_instances_avg + if serverless_apps_apm_apm_azure_containerapp_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_azure_containerapp_instances_avg"] = serverless_apps_apm_apm_azure_containerapp_instances_avg + if serverless_apps_apm_apm_fargate_ecs_tasks_avg is not unset: + kwargs["serverless_apps_apm_apm_fargate_ecs_tasks_avg"] = serverless_apps_apm_apm_fargate_ecs_tasks_avg + if serverless_apps_apm_apm_gcp_cloudfunction_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_gcp_cloudfunction_instances_avg"] = serverless_apps_apm_apm_gcp_cloudfunction_instances_avg + if serverless_apps_apm_apm_gcp_cloudrun_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_gcp_cloudrun_instances_avg"] = serverless_apps_apm_apm_gcp_cloudrun_instances_avg + if serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg is not unset: + kwargs["serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg"] = serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg + if serverless_apps_apm_avg is not unset: + kwargs["serverless_apps_apm_avg"] = serverless_apps_apm_avg + if serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg"] = serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg + if serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg"] = serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg + if serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg"] = serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg + if serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg"] = serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg + if serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg"] = serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg + if serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg"] = serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg + if serverless_apps_apm_excl_fargate_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_avg"] = serverless_apps_apm_excl_fargate_avg + if serverless_apps_azure_container_app_instances_avg is not unset: + kwargs["serverless_apps_azure_container_app_instances_avg"] = serverless_apps_azure_container_app_instances_avg + if serverless_apps_azure_count_avg is not unset: + kwargs["serverless_apps_azure_count_avg"] = serverless_apps_azure_count_avg + if serverless_apps_azure_function_app_instances_avg is not unset: + kwargs["serverless_apps_azure_function_app_instances_avg"] = serverless_apps_azure_function_app_instances_avg + if serverless_apps_azure_web_app_instances_avg is not unset: + kwargs["serverless_apps_azure_web_app_instances_avg"] = serverless_apps_azure_web_app_instances_avg + if serverless_apps_dsm_fargate_tasks_avg is not unset: + kwargs["serverless_apps_dsm_fargate_tasks_avg"] = serverless_apps_dsm_fargate_tasks_avg + if serverless_apps_ecs_avg is not unset: + kwargs["serverless_apps_ecs_avg"] = serverless_apps_ecs_avg + if serverless_apps_eks_avg is not unset: + kwargs["serverless_apps_eks_avg"] = serverless_apps_eks_avg + if serverless_apps_excl_fargate_avg is not unset: + kwargs["serverless_apps_excl_fargate_avg"] = serverless_apps_excl_fargate_avg + if serverless_apps_excl_fargate_azure_container_app_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_azure_container_app_instances_avg"] = serverless_apps_excl_fargate_azure_container_app_instances_avg + if serverless_apps_excl_fargate_azure_function_app_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_azure_function_app_instances_avg"] = serverless_apps_excl_fargate_azure_function_app_instances_avg + if serverless_apps_excl_fargate_azure_web_app_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_azure_web_app_instances_avg"] = serverless_apps_excl_fargate_azure_web_app_instances_avg + if serverless_apps_excl_fargate_google_cloud_functions_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_google_cloud_functions_instances_avg"] = serverless_apps_excl_fargate_google_cloud_functions_instances_avg + if serverless_apps_excl_fargate_google_cloud_run_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_google_cloud_run_instances_avg"] = serverless_apps_excl_fargate_google_cloud_run_instances_avg + if serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg is not unset: + kwargs["serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg"] = serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg + if serverless_apps_google_cloud_functions_instances_avg is not unset: + kwargs["serverless_apps_google_cloud_functions_instances_avg"] = serverless_apps_google_cloud_functions_instances_avg + if serverless_apps_google_cloud_run_instances_avg is not unset: + kwargs["serverless_apps_google_cloud_run_instances_avg"] = serverless_apps_google_cloud_run_instances_avg + if serverless_apps_google_count_avg is not unset: + kwargs["serverless_apps_google_count_avg"] = serverless_apps_google_count_avg + if serverless_apps_infra_gcp_gke_autopilot_pods_avg is not unset: + kwargs["serverless_apps_infra_gcp_gke_autopilot_pods_avg"] = serverless_apps_infra_gcp_gke_autopilot_pods_avg + if serverless_apps_total_count_avg is not unset: + kwargs["serverless_apps_total_count_avg"] = serverless_apps_total_count_avg + if siem_12mo_retention_sum is not unset: + kwargs["siem_12mo_retention_sum"] = siem_12mo_retention_sum + if siem_6mo_retention_sum is not unset: + kwargs["siem_6mo_retention_sum"] = siem_6mo_retention_sum + if siem_analyzed_logs_add_on_count_sum is not unset: + kwargs["siem_analyzed_logs_add_on_count_sum"] = siem_analyzed_logs_add_on_count_sum + if snmp_device_count_sum is not unset: + kwargs["snmp_device_count_sum"] = snmp_device_count_sum + if snmp_device_count_top99p is not unset: + kwargs["snmp_device_count_top99p"] = snmp_device_count_top99p + if synthetics_browser_check_calls_count_sum is not unset: + kwargs["synthetics_browser_check_calls_count_sum"] = synthetics_browser_check_calls_count_sum + if synthetics_check_calls_count_sum is not unset: + kwargs["synthetics_check_calls_count_sum"] = synthetics_check_calls_count_sum + if synthetics_mobile_test_runs_sum is not unset: + kwargs["synthetics_mobile_test_runs_sum"] = synthetics_mobile_test_runs_sum + if synthetics_parallel_testing_max_slots_hwm is not unset: + kwargs["synthetics_parallel_testing_max_slots_hwm"] = synthetics_parallel_testing_max_slots_hwm + if trace_search_indexed_events_count_sum is not unset: + kwargs["trace_search_indexed_events_count_sum"] = trace_search_indexed_events_count_sum + if twol_ingested_events_bytes_sum is not unset: + kwargs["twol_ingested_events_bytes_sum"] = twol_ingested_events_bytes_sum + if universal_service_monitoring_host_top99p is not unset: + kwargs["universal_service_monitoring_host_top99p"] = universal_service_monitoring_host_top99p + if vsphere_host_top99p is not unset: + kwargs["vsphere_host_top99p"] = vsphere_host_top99p + if vuln_management_host_count_top99p is not unset: + kwargs["vuln_management_host_count_top99p"] = vuln_management_host_count_top99p + if workflow_executions_usage_sum is not unset: + kwargs["workflow_executions_usage_sum"] = workflow_executions_usage_sum + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_summary_date_org.py b/datadog_api_client/v1/model/usage_summary_date_org.py new file mode 100644 index 0000000000..fab6cff086 --- /dev/null +++ b/datadog_api_client/v1/model/usage_summary_date_org.py @@ -0,0 +1,2197 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageSummaryDateOrg(ModelNormal): + # Cross-SDK semantic marker. In Python, typed fields are already accessible via + # bracket notation (model["key"]) through _data_store, so no runtime change is needed. + _keep_typed_in_additional_properties = True + @cached_property + def openapi_types(_): + return { + "account_name": (str,), + "account_public_id": (str,), + "agent_host_top99p": (int,), + "ai_credits_agent_builder_ai_credits_sum": (int,), + "ai_credits_bits_assistant_ai_credits_sum": (int,), + "ai_credits_bits_dev_ai_credits_sum": (int,), + "ai_credits_bits_sre_ai_credits_sum": (int,), + "ai_credits_sum": (int,), + "apm_azure_app_service_host_top99p": (int,), + "apm_devsecops_host_top99p": (int,), + "apm_enterprise_standalone_hosts_top99p": (int,), + "apm_fargate_count_avg": (int,), + "apm_host_top99p": (int,), + "apm_pro_standalone_hosts_top99p": (int,), + "appsec_fargate_count_avg": (int,), + "asm_serverless_sum": (int,), + "audit_logs_lines_indexed_sum": (int,), + "audit_trail_enabled_hwm": (int,), + "audit_trail_event_forwarding_events_sum": (int,), + "avg_profiled_fargate_tasks": (int,), + "aws_host_top99p": (int,), + "aws_lambda_func_count": (int,), + "aws_lambda_invocations_sum": (int,), + "azure_app_service_top99p": (int,), + "billable_ingested_bytes_sum": (int,), + "bits_ai_investigations_sum": (int,), + "browser_rum_lite_session_count_sum": (int,), + "browser_rum_replay_session_count_sum": (int,), + "browser_rum_units_sum": (int,), + "ccm_anthropic_spend_last": (int,), + "ccm_aws_spend_last": (int,), + "ccm_azure_spend_last": (int,), + "ccm_confluent_spend_last": (int,), + "ccm_databricks_spend_last": (int,), + "ccm_elastic_spend_last": (int,), + "ccm_fastly_spend_last": (int,), + "ccm_gcp_spend_last": (int,), + "ccm_github_spend_last": (int,), + "ccm_mongodb_spend_last": (int,), + "ccm_oci_spend_last": (int,), + "ccm_openai_spend_last": (int,), + "ccm_snowflake_spend_last": (int,), + "ccm_spend_monitored_ent_last": (int,), + "ccm_spend_monitored_pro_last": (int,), + "ccm_twilio_spend_last": (int,), + "ci_pipeline_indexed_spans_sum": (int,), + "ci_test_indexed_spans_sum": (int,), + "ci_visibility_itr_committers_hwm": (int,), + "ci_visibility_pipeline_committers_hwm": (int,), + "ci_visibility_test_committers_hwm": (int,), + "cloud_cost_management_aws_host_count_avg": (int,), + "cloud_cost_management_azure_host_count_avg": (int,), + "cloud_cost_management_gcp_host_count_avg": (int,), + "cloud_cost_management_host_count_avg": (int,), + "cloud_cost_management_oci_host_count_avg": (int,), + "cloud_siem_events_sum": (int,), + "cloud_siem_indexed_logs_sum": (int,), + "code_analysis_sa_committers_hwm": (int,), + "code_analysis_sca_committers_hwm": (int,), + "code_security_host_top99p": (int,), + "container_avg": (int,), + "container_excl_agent_avg": (int,), + "container_hwm": (int,), + "csm_container_enterprise_compliance_count_sum": (int,), + "csm_container_enterprise_cws_count_sum": (int,), + "csm_container_enterprise_total_count_sum": (int,), + "csm_host_enterprise_aas_host_count_top99p": (int,), + "csm_host_enterprise_aws_host_count_top99p": (int,), + "csm_host_enterprise_azure_host_count_top99p": (int,), + "csm_host_enterprise_compliance_host_count_top99p": (int,), + "csm_host_enterprise_cws_host_count_top99p": (int,), + "csm_host_enterprise_gcp_host_count_top99p": (int,), + "csm_host_enterprise_oci_host_count_top99p": (int,), + "csm_host_enterprise_total_host_count_top99p": (int,), + "csm_host_pro_hosts_agentless_scanners_sum": (int,), + "csm_host_pro_hosts_agentless_scanners_top99p": (int,), + "csm_host_pro_oci_host_count_top99p": (int,), + "cspm_aas_host_top99p": (int,), + "cspm_aws_host_top99p": (int,), + "cspm_azure_host_top99p": (int,), + "cspm_container_avg": (int,), + "cspm_container_hwm": (int,), + "cspm_gcp_host_top99p": (int,), + "cspm_host_top99p": (int,), + "cspm_hosts_agentless_scanners_sum": (int,), + "cspm_hosts_agentless_scanners_top99p": (int,), + "custom_historical_ts_avg": (int,), + "custom_live_ts_avg": (int,), + "custom_ts_avg": (int,), + "cws_container_count_avg": (int,), + "cws_fargate_task_avg": (int,), + "cws_host_top99p": (int,), + "data_jobs_monitoring_host_hr_sum": (int,), + "data_stream_monitoring_host_count_sum": (int,), + "data_stream_monitoring_host_count_top99p": (int,), + "dbm_host_top99p_sum": (int,), + "dbm_queries_avg_sum": (int,), + "do_jobs_monitoring_orchestrators_job_hours_sum": (int,), + "eph_infra_host_agent_sum": (int,), + "eph_infra_host_alibaba_sum": (int,), + "eph_infra_host_aws_sum": (int,), + "eph_infra_host_azure_sum": (int,), + "eph_infra_host_basic_infra_basic_agent_sum": (int,), + "eph_infra_host_basic_infra_basic_vsphere_sum": (int,), + "eph_infra_host_basic_sum": (int,), + "eph_infra_host_ent_sum": (int,), + "eph_infra_host_gcp_sum": (int,), + "eph_infra_host_heroku_sum": (int,), + "eph_infra_host_only_aas_sum": (int,), + "eph_infra_host_only_vsphere_sum": (int,), + "eph_infra_host_opentelemetry_apm_sum": (int,), + "eph_infra_host_opentelemetry_sum": (int,), + "eph_infra_host_pro_sum": (int,), + "eph_infra_host_proplus_sum": (int,), + "eph_infra_host_proxmox_sum": (int,), + "error_tracking_apm_error_events_sum": (int,), + "error_tracking_error_events_sum": (int,), + "error_tracking_events_sum": (int,), + "error_tracking_rum_error_events_sum": (int,), + "event_management_correlation_correlated_events_sum": (int,), + "event_management_correlation_correlated_related_events_sum": (int,), + "event_management_correlation_sum": (int,), + "fargate_container_profiler_profiling_fargate_avg": (int,), + "fargate_container_profiler_profiling_fargate_eks_avg": (int,), + "fargate_tasks_count_avg": (int,), + "fargate_tasks_count_hwm": (int,), + "feature_flags_config_requests_sum": (int,), + "flex_logs_compute_large_avg": (int,), + "flex_logs_compute_medium_avg": (int,), + "flex_logs_compute_small_avg": (int,), + "flex_logs_compute_xlarge_avg": (int,), + "flex_logs_compute_xsmall_avg": (int,), + "flex_logs_starter_avg": (int,), + "flex_logs_starter_storage_index_avg": (int,), + "flex_logs_starter_storage_retention_adjustment_avg": (int,), + "flex_stored_logs_avg": (int,), + "forwarding_events_bytes_sum": (int,), + "gcp_host_top99p": (int,), + "heroku_host_top99p": (int,), + "id": (str,), + "incident_management_monthly_active_users_hwm": (int,), + "incident_management_seats_hwm": (int,), + "indexed_events_count_sum": (int,), + "indexed_points_sum": (int,), + "infra_cpu_avg": (int,), + "infra_cpu_default_infra_host_vcpu_agent_avg": (int,), + "infra_cpu_default_infra_host_vcpu_agent_basic_avg": (int,), + "infra_cpu_default_infra_host_vcpu_agent_basic_sum": (int,), + "infra_cpu_default_infra_host_vcpu_agent_sum": (int,), + "infra_cpu_default_infra_host_vcpu_aws_avg": (int,), + "infra_cpu_default_infra_host_vcpu_aws_sum": (int,), + "infra_cpu_default_infra_host_vcpu_azure_avg": (int,), + "infra_cpu_default_infra_host_vcpu_azure_sum": (int,), + "infra_cpu_default_infra_host_vcpu_gcp_avg": (int,), + "infra_cpu_default_infra_host_vcpu_gcp_sum": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_avg": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_basic_avg": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_basic_sum": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_sum": (int,), + "infra_cpu_default_infra_host_vcpu_opentelemetry_avg": (int,), + "infra_cpu_default_infra_host_vcpu_opentelemetry_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_agent_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_agent_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_aws_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_aws_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_azure_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_azure_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_gcp_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_gcp_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_nutanix_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_nutanix_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_opentelemetry_avg": (int,), + "infra_cpu_observed_infra_host_vcpu_opentelemetry_sum": (int,), + "infra_cpu_sum": (int,), + "infra_edge_monitoring_devices_top99p": (int,), + "infra_host_basic_infra_basic_agent_top99p": (int,), + "infra_host_basic_infra_basic_vsphere_top99p": (int,), + "infra_host_basic_top99p": (int,), + "infra_host_top99p": (int,), + "infra_storage_mgmt_objects_count_avg": (int,), + "ingest_points_sum": (int,), + "ingested_events_bytes_sum": (int,), + "iot_apm_host_sum": (int,), + "iot_apm_host_top99p": (int,), + "iot_device_agg_sum": (int,), + "iot_device_top99p_sum": (int,), + "llm_observability_15day_retention_spans_sum": (int,), + "llm_observability_30day_retention_spans_sum": (int,), + "llm_observability_60day_retention_spans_sum": (int,), + "llm_observability_90day_retention_spans_sum": (int,), + "llm_observability_min_spend_sum": (int,), + "llm_observability_sum": (int,), + "logs_archive_search_gb_scanned_sum": (int,), + "metric_names_sum": (int,), + "mobile_rum_lite_session_count_sum": (int,), + "mobile_rum_session_count_android_sum": (int,), + "mobile_rum_session_count_flutter_sum": (int,), + "mobile_rum_session_count_ios_sum": (int,), + "mobile_rum_session_count_reactnative_sum": (int,), + "mobile_rum_session_count_roku_sum": (int,), + "mobile_rum_session_count_sum": (int,), + "mobile_rum_units_sum": (int,), + "name": (str,), + "ndm_netflow_events_sum": (int,), + "netflow_indexed_events_count_sum": (int,), + "network_device_wireless_top99p": (int,), + "network_path_sum": (int,), + "npm_host_top99p": (int,), + "observability_pipelines_bytes_processed_sum": (int,), + "oci_host_sum": (int,), + "oci_host_top99p": (int,), + "on_call_seat_hwm": (int,), + "online_archive_events_count_sum": (int,), + "opentelemetry_apm_host_top99p": (int,), + "opentelemetry_host_top99p": (int,), + "product_analytics_sum": (int,), + "profiling_aas_count_top99p": (int,), + "profiling_host_top99p": (int,), + "proxmox_host_sum": (int,), + "proxmox_host_top99p": (int,), + "public_id": (str,), + "published_app_hwm": (int,), + "region": (str,), + "rum_browser_and_mobile_session_count": (int,), + "rum_browser_legacy_session_count_sum": (int,), + "rum_browser_lite_session_count_sum": (int,), + "rum_browser_replay_session_count_sum": (int,), + "rum_indexed_sessions_sum": (int,), + "rum_ingested_sessions_sum": (int,), + "rum_lite_session_count_sum": (int,), + "rum_mobile_legacy_session_count_android_sum": (int,), + "rum_mobile_legacy_session_count_flutter_sum": (int,), + "rum_mobile_legacy_session_count_ios_sum": (int,), + "rum_mobile_legacy_session_count_reactnative_sum": (int,), + "rum_mobile_legacy_session_count_roku_sum": (int,), + "rum_mobile_lite_session_count_android_sum": (int,), + "rum_mobile_lite_session_count_flutter_sum": (int,), + "rum_mobile_lite_session_count_ios_sum": (int,), + "rum_mobile_lite_session_count_kotlinmultiplatform_sum": (int,), + "rum_mobile_lite_session_count_reactnative_sum": (int,), + "rum_mobile_lite_session_count_roku_sum": (int,), + "rum_mobile_lite_session_count_unity_sum": (int,), + "rum_mobile_replay_session_count_android_sum": (int,), + "rum_mobile_replay_session_count_ios_sum": (int,), + "rum_mobile_replay_session_count_kotlinmultiplatform_sum": (int,), + "rum_mobile_replay_session_count_reactnative_sum": (int,), + "rum_replay_session_count_sum": (int,), + "rum_session_count_sum": (int,), + "rum_session_replay_add_on_sum": (int,), + "rum_total_session_count_sum": (int,), + "rum_units_sum": (int,), + "sca_fargate_count_avg": (int,), + "sca_fargate_count_hwm": (int,), + "sds_apm_scanned_bytes_sum": (int,), + "sds_events_scanned_bytes_sum": (int,), + "sds_logs_scanned_bytes_sum": (int,), + "sds_rum_scanned_bytes_sum": (int,), + "sds_total_scanned_bytes_sum": (int,), + "serverless_apps_apm_apm_azure_appservice_instances_avg": (int,), + "serverless_apps_apm_apm_azure_azurefunction_instances_avg": (int,), + "serverless_apps_apm_apm_azure_containerapp_instances_avg": (int,), + "serverless_apps_apm_apm_fargate_ecs_tasks_avg": (int,), + "serverless_apps_apm_apm_gcp_cloudfunction_instances_avg": (int,), + "serverless_apps_apm_apm_gcp_cloudrun_instances_avg": (int,), + "serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg": (int,), + "serverless_apps_apm_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg": (int,), + "serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg": (int,), + "serverless_apps_apm_excl_fargate_avg": (int,), + "serverless_apps_azure_container_app_instances_avg": (int,), + "serverless_apps_azure_count_avg": (int,), + "serverless_apps_azure_function_app_instances_avg": (int,), + "serverless_apps_azure_web_app_instances_avg": (int,), + "serverless_apps_dsm_fargate_tasks_avg": (int,), + "serverless_apps_ecs_avg": (int,), + "serverless_apps_eks_avg": (int,), + "serverless_apps_excl_fargate_avg": (int,), + "serverless_apps_excl_fargate_azure_container_app_instances_avg": (int,), + "serverless_apps_excl_fargate_azure_function_app_instances_avg": (int,), + "serverless_apps_excl_fargate_azure_web_app_instances_avg": (int,), + "serverless_apps_excl_fargate_google_cloud_functions_instances_avg": (int,), + "serverless_apps_excl_fargate_google_cloud_run_instances_avg": (int,), + "serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg": (int,), + "serverless_apps_google_cloud_functions_instances_avg": (int,), + "serverless_apps_google_cloud_run_instances_avg": (int,), + "serverless_apps_google_count_avg": (int,), + "serverless_apps_infra_gcp_gke_autopilot_pods_avg": (int,), + "serverless_apps_total_count_avg": (int,), + "siem_12mo_retention_sum": (int,), + "siem_6mo_retention_sum": (int,), + "siem_analyzed_logs_add_on_count_sum": (int,), + "snmp_device_count_sum": (int,), + "snmp_device_count_top99p": (int,), + "synthetics_browser_check_calls_count_sum": (int,), + "synthetics_check_calls_count_sum": (int,), + "synthetics_mobile_test_runs_sum": (int,), + "synthetics_parallel_testing_max_slots_hwm": (int,), + "trace_search_indexed_events_count_sum": (int,), + "twol_ingested_events_bytes_sum": (int,), + "universal_service_monitoring_host_top99p": (int,), + "vsphere_host_top99p": (int,), + "vuln_management_host_count_top99p": (int,), + "workflow_executions_usage_sum": (int,), + } + attribute_map = { + "account_name": "account_name", + "account_public_id": "account_public_id", + "agent_host_top99p": "agent_host_top99p", + "ai_credits_agent_builder_ai_credits_sum": "ai_credits_agent_builder_ai_credits_sum", + "ai_credits_bits_assistant_ai_credits_sum": "ai_credits_bits_assistant_ai_credits_sum", + "ai_credits_bits_dev_ai_credits_sum": "ai_credits_bits_dev_ai_credits_sum", + "ai_credits_bits_sre_ai_credits_sum": "ai_credits_bits_sre_ai_credits_sum", + "ai_credits_sum": "ai_credits_sum", + "apm_azure_app_service_host_top99p": "apm_azure_app_service_host_top99p", + "apm_devsecops_host_top99p": "apm_devsecops_host_top99p", + "apm_enterprise_standalone_hosts_top99p": "apm_enterprise_standalone_hosts_top99p", + "apm_fargate_count_avg": "apm_fargate_count_avg", + "apm_host_top99p": "apm_host_top99p", + "apm_pro_standalone_hosts_top99p": "apm_pro_standalone_hosts_top99p", + "appsec_fargate_count_avg": "appsec_fargate_count_avg", + "asm_serverless_sum": "asm_serverless_sum", + "audit_logs_lines_indexed_sum": "audit_logs_lines_indexed_sum", + "audit_trail_enabled_hwm": "audit_trail_enabled_hwm", + "audit_trail_event_forwarding_events_sum": "audit_trail_event_forwarding_events_sum", + "avg_profiled_fargate_tasks": "avg_profiled_fargate_tasks", + "aws_host_top99p": "aws_host_top99p", + "aws_lambda_func_count": "aws_lambda_func_count", + "aws_lambda_invocations_sum": "aws_lambda_invocations_sum", + "azure_app_service_top99p": "azure_app_service_top99p", + "billable_ingested_bytes_sum": "billable_ingested_bytes_sum", + "bits_ai_investigations_sum": "bits_ai_investigations_sum", + "browser_rum_lite_session_count_sum": "browser_rum_lite_session_count_sum", + "browser_rum_replay_session_count_sum": "browser_rum_replay_session_count_sum", + "browser_rum_units_sum": "browser_rum_units_sum", + "ccm_anthropic_spend_last": "ccm_anthropic_spend_last", + "ccm_aws_spend_last": "ccm_aws_spend_last", + "ccm_azure_spend_last": "ccm_azure_spend_last", + "ccm_confluent_spend_last": "ccm_confluent_spend_last", + "ccm_databricks_spend_last": "ccm_databricks_spend_last", + "ccm_elastic_spend_last": "ccm_elastic_spend_last", + "ccm_fastly_spend_last": "ccm_fastly_spend_last", + "ccm_gcp_spend_last": "ccm_gcp_spend_last", + "ccm_github_spend_last": "ccm_github_spend_last", + "ccm_mongodb_spend_last": "ccm_mongodb_spend_last", + "ccm_oci_spend_last": "ccm_oci_spend_last", + "ccm_openai_spend_last": "ccm_openai_spend_last", + "ccm_snowflake_spend_last": "ccm_snowflake_spend_last", + "ccm_spend_monitored_ent_last": "ccm_spend_monitored_ent_last", + "ccm_spend_monitored_pro_last": "ccm_spend_monitored_pro_last", + "ccm_twilio_spend_last": "ccm_twilio_spend_last", + "ci_pipeline_indexed_spans_sum": "ci_pipeline_indexed_spans_sum", + "ci_test_indexed_spans_sum": "ci_test_indexed_spans_sum", + "ci_visibility_itr_committers_hwm": "ci_visibility_itr_committers_hwm", + "ci_visibility_pipeline_committers_hwm": "ci_visibility_pipeline_committers_hwm", + "ci_visibility_test_committers_hwm": "ci_visibility_test_committers_hwm", + "cloud_cost_management_aws_host_count_avg": "cloud_cost_management_aws_host_count_avg", + "cloud_cost_management_azure_host_count_avg": "cloud_cost_management_azure_host_count_avg", + "cloud_cost_management_gcp_host_count_avg": "cloud_cost_management_gcp_host_count_avg", + "cloud_cost_management_host_count_avg": "cloud_cost_management_host_count_avg", + "cloud_cost_management_oci_host_count_avg": "cloud_cost_management_oci_host_count_avg", + "cloud_siem_events_sum": "cloud_siem_events_sum", + "cloud_siem_indexed_logs_sum": "cloud_siem_indexed_logs_sum", + "code_analysis_sa_committers_hwm": "code_analysis_sa_committers_hwm", + "code_analysis_sca_committers_hwm": "code_analysis_sca_committers_hwm", + "code_security_host_top99p": "code_security_host_top99p", + "container_avg": "container_avg", + "container_excl_agent_avg": "container_excl_agent_avg", + "container_hwm": "container_hwm", + "csm_container_enterprise_compliance_count_sum": "csm_container_enterprise_compliance_count_sum", + "csm_container_enterprise_cws_count_sum": "csm_container_enterprise_cws_count_sum", + "csm_container_enterprise_total_count_sum": "csm_container_enterprise_total_count_sum", + "csm_host_enterprise_aas_host_count_top99p": "csm_host_enterprise_aas_host_count_top99p", + "csm_host_enterprise_aws_host_count_top99p": "csm_host_enterprise_aws_host_count_top99p", + "csm_host_enterprise_azure_host_count_top99p": "csm_host_enterprise_azure_host_count_top99p", + "csm_host_enterprise_compliance_host_count_top99p": "csm_host_enterprise_compliance_host_count_top99p", + "csm_host_enterprise_cws_host_count_top99p": "csm_host_enterprise_cws_host_count_top99p", + "csm_host_enterprise_gcp_host_count_top99p": "csm_host_enterprise_gcp_host_count_top99p", + "csm_host_enterprise_oci_host_count_top99p": "csm_host_enterprise_oci_host_count_top99p", + "csm_host_enterprise_total_host_count_top99p": "csm_host_enterprise_total_host_count_top99p", + "csm_host_pro_hosts_agentless_scanners_sum": "csm_host_pro_hosts_agentless_scanners_sum", + "csm_host_pro_hosts_agentless_scanners_top99p": "csm_host_pro_hosts_agentless_scanners_top99p", + "csm_host_pro_oci_host_count_top99p": "csm_host_pro_oci_host_count_top99p", + "cspm_aas_host_top99p": "cspm_aas_host_top99p", + "cspm_aws_host_top99p": "cspm_aws_host_top99p", + "cspm_azure_host_top99p": "cspm_azure_host_top99p", + "cspm_container_avg": "cspm_container_avg", + "cspm_container_hwm": "cspm_container_hwm", + "cspm_gcp_host_top99p": "cspm_gcp_host_top99p", + "cspm_host_top99p": "cspm_host_top99p", + "cspm_hosts_agentless_scanners_sum": "cspm_hosts_agentless_scanners_sum", + "cspm_hosts_agentless_scanners_top99p": "cspm_hosts_agentless_scanners_top99p", + "custom_historical_ts_avg": "custom_historical_ts_avg", + "custom_live_ts_avg": "custom_live_ts_avg", + "custom_ts_avg": "custom_ts_avg", + "cws_container_count_avg": "cws_container_count_avg", + "cws_fargate_task_avg": "cws_fargate_task_avg", + "cws_host_top99p": "cws_host_top99p", + "data_jobs_monitoring_host_hr_sum": "data_jobs_monitoring_host_hr_sum", + "data_stream_monitoring_host_count_sum": "data_stream_monitoring_host_count_sum", + "data_stream_monitoring_host_count_top99p": "data_stream_monitoring_host_count_top99p", + "dbm_host_top99p_sum": "dbm_host_top99p_sum", + "dbm_queries_avg_sum": "dbm_queries_avg_sum", + "do_jobs_monitoring_orchestrators_job_hours_sum": "do_jobs_monitoring_orchestrators_job_hours_sum", + "eph_infra_host_agent_sum": "eph_infra_host_agent_sum", + "eph_infra_host_alibaba_sum": "eph_infra_host_alibaba_sum", + "eph_infra_host_aws_sum": "eph_infra_host_aws_sum", + "eph_infra_host_azure_sum": "eph_infra_host_azure_sum", + "eph_infra_host_basic_infra_basic_agent_sum": "eph_infra_host_basic_infra_basic_agent_sum", + "eph_infra_host_basic_infra_basic_vsphere_sum": "eph_infra_host_basic_infra_basic_vsphere_sum", + "eph_infra_host_basic_sum": "eph_infra_host_basic_sum", + "eph_infra_host_ent_sum": "eph_infra_host_ent_sum", + "eph_infra_host_gcp_sum": "eph_infra_host_gcp_sum", + "eph_infra_host_heroku_sum": "eph_infra_host_heroku_sum", + "eph_infra_host_only_aas_sum": "eph_infra_host_only_aas_sum", + "eph_infra_host_only_vsphere_sum": "eph_infra_host_only_vsphere_sum", + "eph_infra_host_opentelemetry_apm_sum": "eph_infra_host_opentelemetry_apm_sum", + "eph_infra_host_opentelemetry_sum": "eph_infra_host_opentelemetry_sum", + "eph_infra_host_pro_sum": "eph_infra_host_pro_sum", + "eph_infra_host_proplus_sum": "eph_infra_host_proplus_sum", + "eph_infra_host_proxmox_sum": "eph_infra_host_proxmox_sum", + "error_tracking_apm_error_events_sum": "error_tracking_apm_error_events_sum", + "error_tracking_error_events_sum": "error_tracking_error_events_sum", + "error_tracking_events_sum": "error_tracking_events_sum", + "error_tracking_rum_error_events_sum": "error_tracking_rum_error_events_sum", + "event_management_correlation_correlated_events_sum": "event_management_correlation_correlated_events_sum", + "event_management_correlation_correlated_related_events_sum": "event_management_correlation_correlated_related_events_sum", + "event_management_correlation_sum": "event_management_correlation_sum", + "fargate_container_profiler_profiling_fargate_avg": "fargate_container_profiler_profiling_fargate_avg", + "fargate_container_profiler_profiling_fargate_eks_avg": "fargate_container_profiler_profiling_fargate_eks_avg", + "fargate_tasks_count_avg": "fargate_tasks_count_avg", + "fargate_tasks_count_hwm": "fargate_tasks_count_hwm", + "feature_flags_config_requests_sum": "feature_flags_config_requests_sum", + "flex_logs_compute_large_avg": "flex_logs_compute_large_avg", + "flex_logs_compute_medium_avg": "flex_logs_compute_medium_avg", + "flex_logs_compute_small_avg": "flex_logs_compute_small_avg", + "flex_logs_compute_xlarge_avg": "flex_logs_compute_xlarge_avg", + "flex_logs_compute_xsmall_avg": "flex_logs_compute_xsmall_avg", + "flex_logs_starter_avg": "flex_logs_starter_avg", + "flex_logs_starter_storage_index_avg": "flex_logs_starter_storage_index_avg", + "flex_logs_starter_storage_retention_adjustment_avg": "flex_logs_starter_storage_retention_adjustment_avg", + "flex_stored_logs_avg": "flex_stored_logs_avg", + "forwarding_events_bytes_sum": "forwarding_events_bytes_sum", + "gcp_host_top99p": "gcp_host_top99p", + "heroku_host_top99p": "heroku_host_top99p", + "id": "id", + "incident_management_monthly_active_users_hwm": "incident_management_monthly_active_users_hwm", + "incident_management_seats_hwm": "incident_management_seats_hwm", + "indexed_events_count_sum": "indexed_events_count_sum", + "indexed_points_sum": "indexed_points_sum", + "infra_cpu_avg": "infra_cpu_avg", + "infra_cpu_default_infra_host_vcpu_agent_avg": "infra_cpu_default_infra_host_vcpu_agent_avg", + "infra_cpu_default_infra_host_vcpu_agent_basic_avg": "infra_cpu_default_infra_host_vcpu_agent_basic_avg", + "infra_cpu_default_infra_host_vcpu_agent_basic_sum": "infra_cpu_default_infra_host_vcpu_agent_basic_sum", + "infra_cpu_default_infra_host_vcpu_agent_sum": "infra_cpu_default_infra_host_vcpu_agent_sum", + "infra_cpu_default_infra_host_vcpu_aws_avg": "infra_cpu_default_infra_host_vcpu_aws_avg", + "infra_cpu_default_infra_host_vcpu_aws_sum": "infra_cpu_default_infra_host_vcpu_aws_sum", + "infra_cpu_default_infra_host_vcpu_azure_avg": "infra_cpu_default_infra_host_vcpu_azure_avg", + "infra_cpu_default_infra_host_vcpu_azure_sum": "infra_cpu_default_infra_host_vcpu_azure_sum", + "infra_cpu_default_infra_host_vcpu_gcp_avg": "infra_cpu_default_infra_host_vcpu_gcp_avg", + "infra_cpu_default_infra_host_vcpu_gcp_sum": "infra_cpu_default_infra_host_vcpu_gcp_sum", + "infra_cpu_default_infra_host_vcpu_nutanix_avg": "infra_cpu_default_infra_host_vcpu_nutanix_avg", + "infra_cpu_default_infra_host_vcpu_nutanix_basic_avg": "infra_cpu_default_infra_host_vcpu_nutanix_basic_avg", + "infra_cpu_default_infra_host_vcpu_nutanix_basic_sum": "infra_cpu_default_infra_host_vcpu_nutanix_basic_sum", + "infra_cpu_default_infra_host_vcpu_nutanix_sum": "infra_cpu_default_infra_host_vcpu_nutanix_sum", + "infra_cpu_default_infra_host_vcpu_opentelemetry_avg": "infra_cpu_default_infra_host_vcpu_opentelemetry_avg", + "infra_cpu_default_infra_host_vcpu_opentelemetry_sum": "infra_cpu_default_infra_host_vcpu_opentelemetry_sum", + "infra_cpu_observed_infra_host_vcpu_agent_avg": "infra_cpu_observed_infra_host_vcpu_agent_avg", + "infra_cpu_observed_infra_host_vcpu_agent_sum": "infra_cpu_observed_infra_host_vcpu_agent_sum", + "infra_cpu_observed_infra_host_vcpu_aws_avg": "infra_cpu_observed_infra_host_vcpu_aws_avg", + "infra_cpu_observed_infra_host_vcpu_aws_sum": "infra_cpu_observed_infra_host_vcpu_aws_sum", + "infra_cpu_observed_infra_host_vcpu_azure_avg": "infra_cpu_observed_infra_host_vcpu_azure_avg", + "infra_cpu_observed_infra_host_vcpu_azure_sum": "infra_cpu_observed_infra_host_vcpu_azure_sum", + "infra_cpu_observed_infra_host_vcpu_gcp_avg": "infra_cpu_observed_infra_host_vcpu_gcp_avg", + "infra_cpu_observed_infra_host_vcpu_gcp_sum": "infra_cpu_observed_infra_host_vcpu_gcp_sum", + "infra_cpu_observed_infra_host_vcpu_nutanix_avg": "infra_cpu_observed_infra_host_vcpu_nutanix_avg", + "infra_cpu_observed_infra_host_vcpu_nutanix_sum": "infra_cpu_observed_infra_host_vcpu_nutanix_sum", + "infra_cpu_observed_infra_host_vcpu_opentelemetry_avg": "infra_cpu_observed_infra_host_vcpu_opentelemetry_avg", + "infra_cpu_observed_infra_host_vcpu_opentelemetry_sum": "infra_cpu_observed_infra_host_vcpu_opentelemetry_sum", + "infra_cpu_sum": "infra_cpu_sum", + "infra_edge_monitoring_devices_top99p": "infra_edge_monitoring_devices_top99p", + "infra_host_basic_infra_basic_agent_top99p": "infra_host_basic_infra_basic_agent_top99p", + "infra_host_basic_infra_basic_vsphere_top99p": "infra_host_basic_infra_basic_vsphere_top99p", + "infra_host_basic_top99p": "infra_host_basic_top99p", + "infra_host_top99p": "infra_host_top99p", + "infra_storage_mgmt_objects_count_avg": "infra_storage_mgmt_objects_count_avg", + "ingest_points_sum": "ingest_points_sum", + "ingested_events_bytes_sum": "ingested_events_bytes_sum", + "iot_apm_host_sum": "iot_apm_host_sum", + "iot_apm_host_top99p": "iot_apm_host_top99p", + "iot_device_agg_sum": "iot_device_agg_sum", + "iot_device_top99p_sum": "iot_device_top99p_sum", + "llm_observability_15day_retention_spans_sum": "llm_observability_15day_retention_spans_sum", + "llm_observability_30day_retention_spans_sum": "llm_observability_30day_retention_spans_sum", + "llm_observability_60day_retention_spans_sum": "llm_observability_60day_retention_spans_sum", + "llm_observability_90day_retention_spans_sum": "llm_observability_90day_retention_spans_sum", + "llm_observability_min_spend_sum": "llm_observability_min_spend_sum", + "llm_observability_sum": "llm_observability_sum", + "logs_archive_search_gb_scanned_sum": "logs_archive_search_gb_scanned_sum", + "metric_names_sum": "metric_names_sum", + "mobile_rum_lite_session_count_sum": "mobile_rum_lite_session_count_sum", + "mobile_rum_session_count_android_sum": "mobile_rum_session_count_android_sum", + "mobile_rum_session_count_flutter_sum": "mobile_rum_session_count_flutter_sum", + "mobile_rum_session_count_ios_sum": "mobile_rum_session_count_ios_sum", + "mobile_rum_session_count_reactnative_sum": "mobile_rum_session_count_reactnative_sum", + "mobile_rum_session_count_roku_sum": "mobile_rum_session_count_roku_sum", + "mobile_rum_session_count_sum": "mobile_rum_session_count_sum", + "mobile_rum_units_sum": "mobile_rum_units_sum", + "name": "name", + "ndm_netflow_events_sum": "ndm_netflow_events_sum", + "netflow_indexed_events_count_sum": "netflow_indexed_events_count_sum", + "network_device_wireless_top99p": "network_device_wireless_top99p", + "network_path_sum": "network_path_sum", + "npm_host_top99p": "npm_host_top99p", + "observability_pipelines_bytes_processed_sum": "observability_pipelines_bytes_processed_sum", + "oci_host_sum": "oci_host_sum", + "oci_host_top99p": "oci_host_top99p", + "on_call_seat_hwm": "on_call_seat_hwm", + "online_archive_events_count_sum": "online_archive_events_count_sum", + "opentelemetry_apm_host_top99p": "opentelemetry_apm_host_top99p", + "opentelemetry_host_top99p": "opentelemetry_host_top99p", + "product_analytics_sum": "product_analytics_sum", + "profiling_aas_count_top99p": "profiling_aas_count_top99p", + "profiling_host_top99p": "profiling_host_top99p", + "proxmox_host_sum": "proxmox_host_sum", + "proxmox_host_top99p": "proxmox_host_top99p", + "public_id": "public_id", + "published_app_hwm": "published_app_hwm", + "region": "region", + "rum_browser_and_mobile_session_count": "rum_browser_and_mobile_session_count", + "rum_browser_legacy_session_count_sum": "rum_browser_legacy_session_count_sum", + "rum_browser_lite_session_count_sum": "rum_browser_lite_session_count_sum", + "rum_browser_replay_session_count_sum": "rum_browser_replay_session_count_sum", + "rum_indexed_sessions_sum": "rum_indexed_sessions_sum", + "rum_ingested_sessions_sum": "rum_ingested_sessions_sum", + "rum_lite_session_count_sum": "rum_lite_session_count_sum", + "rum_mobile_legacy_session_count_android_sum": "rum_mobile_legacy_session_count_android_sum", + "rum_mobile_legacy_session_count_flutter_sum": "rum_mobile_legacy_session_count_flutter_sum", + "rum_mobile_legacy_session_count_ios_sum": "rum_mobile_legacy_session_count_ios_sum", + "rum_mobile_legacy_session_count_reactnative_sum": "rum_mobile_legacy_session_count_reactnative_sum", + "rum_mobile_legacy_session_count_roku_sum": "rum_mobile_legacy_session_count_roku_sum", + "rum_mobile_lite_session_count_android_sum": "rum_mobile_lite_session_count_android_sum", + "rum_mobile_lite_session_count_flutter_sum": "rum_mobile_lite_session_count_flutter_sum", + "rum_mobile_lite_session_count_ios_sum": "rum_mobile_lite_session_count_ios_sum", + "rum_mobile_lite_session_count_kotlinmultiplatform_sum": "rum_mobile_lite_session_count_kotlinmultiplatform_sum", + "rum_mobile_lite_session_count_reactnative_sum": "rum_mobile_lite_session_count_reactnative_sum", + "rum_mobile_lite_session_count_roku_sum": "rum_mobile_lite_session_count_roku_sum", + "rum_mobile_lite_session_count_unity_sum": "rum_mobile_lite_session_count_unity_sum", + "rum_mobile_replay_session_count_android_sum": "rum_mobile_replay_session_count_android_sum", + "rum_mobile_replay_session_count_ios_sum": "rum_mobile_replay_session_count_ios_sum", + "rum_mobile_replay_session_count_kotlinmultiplatform_sum": "rum_mobile_replay_session_count_kotlinmultiplatform_sum", + "rum_mobile_replay_session_count_reactnative_sum": "rum_mobile_replay_session_count_reactnative_sum", + "rum_replay_session_count_sum": "rum_replay_session_count_sum", + "rum_session_count_sum": "rum_session_count_sum", + "rum_session_replay_add_on_sum": "rum_session_replay_add_on_sum", + "rum_total_session_count_sum": "rum_total_session_count_sum", + "rum_units_sum": "rum_units_sum", + "sca_fargate_count_avg": "sca_fargate_count_avg", + "sca_fargate_count_hwm": "sca_fargate_count_hwm", + "sds_apm_scanned_bytes_sum": "sds_apm_scanned_bytes_sum", + "sds_events_scanned_bytes_sum": "sds_events_scanned_bytes_sum", + "sds_logs_scanned_bytes_sum": "sds_logs_scanned_bytes_sum", + "sds_rum_scanned_bytes_sum": "sds_rum_scanned_bytes_sum", + "sds_total_scanned_bytes_sum": "sds_total_scanned_bytes_sum", + "serverless_apps_apm_apm_azure_appservice_instances_avg": "serverless_apps_apm_apm_azure_appservice_instances_avg", + "serverless_apps_apm_apm_azure_azurefunction_instances_avg": "serverless_apps_apm_apm_azure_azurefunction_instances_avg", + "serverless_apps_apm_apm_azure_containerapp_instances_avg": "serverless_apps_apm_apm_azure_containerapp_instances_avg", + "serverless_apps_apm_apm_fargate_ecs_tasks_avg": "serverless_apps_apm_apm_fargate_ecs_tasks_avg", + "serverless_apps_apm_apm_gcp_cloudfunction_instances_avg": "serverless_apps_apm_apm_gcp_cloudfunction_instances_avg", + "serverless_apps_apm_apm_gcp_cloudrun_instances_avg": "serverless_apps_apm_apm_gcp_cloudrun_instances_avg", + "serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg": "serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg", + "serverless_apps_apm_avg": "serverless_apps_apm_avg", + "serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg": "serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg", + "serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg": "serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg", + "serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg": "serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg", + "serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg": "serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg", + "serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg": "serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg", + "serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg": "serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg", + "serverless_apps_apm_excl_fargate_avg": "serverless_apps_apm_excl_fargate_avg", + "serverless_apps_azure_container_app_instances_avg": "serverless_apps_azure_container_app_instances_avg", + "serverless_apps_azure_count_avg": "serverless_apps_azure_count_avg", + "serverless_apps_azure_function_app_instances_avg": "serverless_apps_azure_function_app_instances_avg", + "serverless_apps_azure_web_app_instances_avg": "serverless_apps_azure_web_app_instances_avg", + "serverless_apps_dsm_fargate_tasks_avg": "serverless_apps_dsm_fargate_tasks_avg", + "serverless_apps_ecs_avg": "serverless_apps_ecs_avg", + "serverless_apps_eks_avg": "serverless_apps_eks_avg", + "serverless_apps_excl_fargate_avg": "serverless_apps_excl_fargate_avg", + "serverless_apps_excl_fargate_azure_container_app_instances_avg": "serverless_apps_excl_fargate_azure_container_app_instances_avg", + "serverless_apps_excl_fargate_azure_function_app_instances_avg": "serverless_apps_excl_fargate_azure_function_app_instances_avg", + "serverless_apps_excl_fargate_azure_web_app_instances_avg": "serverless_apps_excl_fargate_azure_web_app_instances_avg", + "serverless_apps_excl_fargate_google_cloud_functions_instances_avg": "serverless_apps_excl_fargate_google_cloud_functions_instances_avg", + "serverless_apps_excl_fargate_google_cloud_run_instances_avg": "serverless_apps_excl_fargate_google_cloud_run_instances_avg", + "serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg": "serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg", + "serverless_apps_google_cloud_functions_instances_avg": "serverless_apps_google_cloud_functions_instances_avg", + "serverless_apps_google_cloud_run_instances_avg": "serverless_apps_google_cloud_run_instances_avg", + "serverless_apps_google_count_avg": "serverless_apps_google_count_avg", + "serverless_apps_infra_gcp_gke_autopilot_pods_avg": "serverless_apps_infra_gcp_gke_autopilot_pods_avg", + "serverless_apps_total_count_avg": "serverless_apps_total_count_avg", + "siem_12mo_retention_sum": "siem_12mo_retention_sum", + "siem_6mo_retention_sum": "siem_6mo_retention_sum", + "siem_analyzed_logs_add_on_count_sum": "siem_analyzed_logs_add_on_count_sum", + "snmp_device_count_sum": "snmp_device_count_sum", + "snmp_device_count_top99p": "snmp_device_count_top99p", + "synthetics_browser_check_calls_count_sum": "synthetics_browser_check_calls_count_sum", + "synthetics_check_calls_count_sum": "synthetics_check_calls_count_sum", + "synthetics_mobile_test_runs_sum": "synthetics_mobile_test_runs_sum", + "synthetics_parallel_testing_max_slots_hwm": "synthetics_parallel_testing_max_slots_hwm", + "trace_search_indexed_events_count_sum": "trace_search_indexed_events_count_sum", + "twol_ingested_events_bytes_sum": "twol_ingested_events_bytes_sum", + "universal_service_monitoring_host_top99p": "universal_service_monitoring_host_top99p", + "vsphere_host_top99p": "vsphere_host_top99p", + "vuln_management_host_count_top99p": "vuln_management_host_count_top99p", + "workflow_executions_usage_sum": "workflow_executions_usage_sum", + } + + def __init__(self_, account_name: Union[str, UnsetType]=unset, account_public_id: Union[str, UnsetType]=unset, agent_host_top99p: Union[int, UnsetType]=unset, ai_credits_agent_builder_ai_credits_sum: Union[int, UnsetType]=unset, ai_credits_bits_assistant_ai_credits_sum: Union[int, UnsetType]=unset, ai_credits_bits_dev_ai_credits_sum: Union[int, UnsetType]=unset, ai_credits_bits_sre_ai_credits_sum: Union[int, UnsetType]=unset, ai_credits_sum: Union[int, UnsetType]=unset, apm_azure_app_service_host_top99p: Union[int, UnsetType]=unset, apm_devsecops_host_top99p: Union[int, UnsetType]=unset, apm_enterprise_standalone_hosts_top99p: Union[int, UnsetType]=unset, apm_fargate_count_avg: Union[int, UnsetType]=unset, apm_host_top99p: Union[int, UnsetType]=unset, apm_pro_standalone_hosts_top99p: Union[int, UnsetType]=unset, appsec_fargate_count_avg: Union[int, UnsetType]=unset, asm_serverless_sum: Union[int, UnsetType]=unset, audit_logs_lines_indexed_sum: Union[int, UnsetType]=unset, audit_trail_enabled_hwm: Union[int, UnsetType]=unset, audit_trail_event_forwarding_events_sum: Union[int, UnsetType]=unset, avg_profiled_fargate_tasks: Union[int, UnsetType]=unset, aws_host_top99p: Union[int, UnsetType]=unset, aws_lambda_func_count: Union[int, UnsetType]=unset, aws_lambda_invocations_sum: Union[int, UnsetType]=unset, azure_app_service_top99p: Union[int, UnsetType]=unset, billable_ingested_bytes_sum: Union[int, UnsetType]=unset, bits_ai_investigations_sum: Union[int, UnsetType]=unset, browser_rum_lite_session_count_sum: Union[int, UnsetType]=unset, browser_rum_replay_session_count_sum: Union[int, UnsetType]=unset, browser_rum_units_sum: Union[int, UnsetType]=unset, ccm_anthropic_spend_last: Union[int, UnsetType]=unset, ccm_aws_spend_last: Union[int, UnsetType]=unset, ccm_azure_spend_last: Union[int, UnsetType]=unset, ccm_confluent_spend_last: Union[int, UnsetType]=unset, ccm_databricks_spend_last: Union[int, UnsetType]=unset, ccm_elastic_spend_last: Union[int, UnsetType]=unset, ccm_fastly_spend_last: Union[int, UnsetType]=unset, ccm_gcp_spend_last: Union[int, UnsetType]=unset, ccm_github_spend_last: Union[int, UnsetType]=unset, ccm_mongodb_spend_last: Union[int, UnsetType]=unset, ccm_oci_spend_last: Union[int, UnsetType]=unset, ccm_openai_spend_last: Union[int, UnsetType]=unset, ccm_snowflake_spend_last: Union[int, UnsetType]=unset, ccm_spend_monitored_ent_last: Union[int, UnsetType]=unset, ccm_spend_monitored_pro_last: Union[int, UnsetType]=unset, ccm_twilio_spend_last: Union[int, UnsetType]=unset, ci_pipeline_indexed_spans_sum: Union[int, UnsetType]=unset, ci_test_indexed_spans_sum: Union[int, UnsetType]=unset, ci_visibility_itr_committers_hwm: Union[int, UnsetType]=unset, ci_visibility_pipeline_committers_hwm: Union[int, UnsetType]=unset, ci_visibility_test_committers_hwm: Union[int, UnsetType]=unset, cloud_cost_management_aws_host_count_avg: Union[int, UnsetType]=unset, cloud_cost_management_azure_host_count_avg: Union[int, UnsetType]=unset, cloud_cost_management_gcp_host_count_avg: Union[int, UnsetType]=unset, cloud_cost_management_host_count_avg: Union[int, UnsetType]=unset, cloud_cost_management_oci_host_count_avg: Union[int, UnsetType]=unset, cloud_siem_events_sum: Union[int, UnsetType]=unset, cloud_siem_indexed_logs_sum: Union[int, UnsetType]=unset, code_analysis_sa_committers_hwm: Union[int, UnsetType]=unset, code_analysis_sca_committers_hwm: Union[int, UnsetType]=unset, code_security_host_top99p: Union[int, UnsetType]=unset, container_avg: Union[int, UnsetType]=unset, container_excl_agent_avg: Union[int, UnsetType]=unset, container_hwm: Union[int, UnsetType]=unset, csm_container_enterprise_compliance_count_sum: Union[int, UnsetType]=unset, csm_container_enterprise_cws_count_sum: Union[int, UnsetType]=unset, csm_container_enterprise_total_count_sum: Union[int, UnsetType]=unset, csm_host_enterprise_aas_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_aws_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_azure_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_compliance_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_cws_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_gcp_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_oci_host_count_top99p: Union[int, UnsetType]=unset, csm_host_enterprise_total_host_count_top99p: Union[int, UnsetType]=unset, csm_host_pro_hosts_agentless_scanners_sum: Union[int, UnsetType]=unset, csm_host_pro_hosts_agentless_scanners_top99p: Union[int, UnsetType]=unset, csm_host_pro_oci_host_count_top99p: Union[int, UnsetType]=unset, cspm_aas_host_top99p: Union[int, UnsetType]=unset, cspm_aws_host_top99p: Union[int, UnsetType]=unset, cspm_azure_host_top99p: Union[int, UnsetType]=unset, cspm_container_avg: Union[int, UnsetType]=unset, cspm_container_hwm: Union[int, UnsetType]=unset, cspm_gcp_host_top99p: Union[int, UnsetType]=unset, cspm_host_top99p: Union[int, UnsetType]=unset, cspm_hosts_agentless_scanners_sum: Union[int, UnsetType]=unset, cspm_hosts_agentless_scanners_top99p: Union[int, UnsetType]=unset, custom_historical_ts_avg: Union[int, UnsetType]=unset, custom_live_ts_avg: Union[int, UnsetType]=unset, custom_ts_avg: Union[int, UnsetType]=unset, cws_container_count_avg: Union[int, UnsetType]=unset, cws_fargate_task_avg: Union[int, UnsetType]=unset, cws_host_top99p: Union[int, UnsetType]=unset, data_jobs_monitoring_host_hr_sum: Union[int, UnsetType]=unset, data_stream_monitoring_host_count_sum: Union[int, UnsetType]=unset, data_stream_monitoring_host_count_top99p: Union[int, UnsetType]=unset, dbm_host_top99p_sum: Union[int, UnsetType]=unset, dbm_queries_avg_sum: Union[int, UnsetType]=unset, do_jobs_monitoring_orchestrators_job_hours_sum: Union[int, UnsetType]=unset, eph_infra_host_agent_sum: Union[int, UnsetType]=unset, eph_infra_host_alibaba_sum: Union[int, UnsetType]=unset, eph_infra_host_aws_sum: Union[int, UnsetType]=unset, eph_infra_host_azure_sum: Union[int, UnsetType]=unset, eph_infra_host_basic_infra_basic_agent_sum: Union[int, UnsetType]=unset, eph_infra_host_basic_infra_basic_vsphere_sum: Union[int, UnsetType]=unset, eph_infra_host_basic_sum: Union[int, UnsetType]=unset, eph_infra_host_ent_sum: Union[int, UnsetType]=unset, eph_infra_host_gcp_sum: Union[int, UnsetType]=unset, eph_infra_host_heroku_sum: Union[int, UnsetType]=unset, eph_infra_host_only_aas_sum: Union[int, UnsetType]=unset, eph_infra_host_only_vsphere_sum: Union[int, UnsetType]=unset, eph_infra_host_opentelemetry_apm_sum: Union[int, UnsetType]=unset, eph_infra_host_opentelemetry_sum: Union[int, UnsetType]=unset, eph_infra_host_pro_sum: Union[int, UnsetType]=unset, eph_infra_host_proplus_sum: Union[int, UnsetType]=unset, eph_infra_host_proxmox_sum: Union[int, UnsetType]=unset, error_tracking_apm_error_events_sum: Union[int, UnsetType]=unset, error_tracking_error_events_sum: Union[int, UnsetType]=unset, error_tracking_events_sum: Union[int, UnsetType]=unset, error_tracking_rum_error_events_sum: Union[int, UnsetType]=unset, event_management_correlation_correlated_events_sum: Union[int, UnsetType]=unset, event_management_correlation_correlated_related_events_sum: Union[int, UnsetType]=unset, event_management_correlation_sum: Union[int, UnsetType]=unset, fargate_container_profiler_profiling_fargate_avg: Union[int, UnsetType]=unset, fargate_container_profiler_profiling_fargate_eks_avg: Union[int, UnsetType]=unset, fargate_tasks_count_avg: Union[int, UnsetType]=unset, fargate_tasks_count_hwm: Union[int, UnsetType]=unset, feature_flags_config_requests_sum: Union[int, UnsetType]=unset, flex_logs_compute_large_avg: Union[int, UnsetType]=unset, flex_logs_compute_medium_avg: Union[int, UnsetType]=unset, flex_logs_compute_small_avg: Union[int, UnsetType]=unset, flex_logs_compute_xlarge_avg: Union[int, UnsetType]=unset, flex_logs_compute_xsmall_avg: Union[int, UnsetType]=unset, flex_logs_starter_avg: Union[int, UnsetType]=unset, flex_logs_starter_storage_index_avg: Union[int, UnsetType]=unset, flex_logs_starter_storage_retention_adjustment_avg: Union[int, UnsetType]=unset, flex_stored_logs_avg: Union[int, UnsetType]=unset, forwarding_events_bytes_sum: Union[int, UnsetType]=unset, gcp_host_top99p: Union[int, UnsetType]=unset, heroku_host_top99p: Union[int, UnsetType]=unset, id: Union[str, UnsetType]=unset, incident_management_monthly_active_users_hwm: Union[int, UnsetType]=unset, incident_management_seats_hwm: Union[int, UnsetType]=unset, indexed_events_count_sum: Union[int, UnsetType]=unset, indexed_points_sum: Union[int, UnsetType]=unset, infra_cpu_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_basic_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_basic_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_aws_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_aws_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_azure_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_azure_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_gcp_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_gcp_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_basic_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_basic_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_opentelemetry_avg: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_opentelemetry_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_agent_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_agent_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_aws_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_aws_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_azure_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_azure_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_gcp_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_gcp_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_nutanix_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_nutanix_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_opentelemetry_avg: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_opentelemetry_sum: Union[int, UnsetType]=unset, infra_cpu_sum: Union[int, UnsetType]=unset, infra_edge_monitoring_devices_top99p: Union[int, UnsetType]=unset, infra_host_basic_infra_basic_agent_top99p: Union[int, UnsetType]=unset, infra_host_basic_infra_basic_vsphere_top99p: Union[int, UnsetType]=unset, infra_host_basic_top99p: Union[int, UnsetType]=unset, infra_host_top99p: Union[int, UnsetType]=unset, infra_storage_mgmt_objects_count_avg: Union[int, UnsetType]=unset, ingest_points_sum: Union[int, UnsetType]=unset, ingested_events_bytes_sum: Union[int, UnsetType]=unset, iot_apm_host_sum: Union[int, UnsetType]=unset, iot_apm_host_top99p: Union[int, UnsetType]=unset, iot_device_agg_sum: Union[int, UnsetType]=unset, iot_device_top99p_sum: Union[int, UnsetType]=unset, llm_observability_15day_retention_spans_sum: Union[int, UnsetType]=unset, llm_observability_30day_retention_spans_sum: Union[int, UnsetType]=unset, llm_observability_60day_retention_spans_sum: Union[int, UnsetType]=unset, llm_observability_90day_retention_spans_sum: Union[int, UnsetType]=unset, llm_observability_min_spend_sum: Union[int, UnsetType]=unset, llm_observability_sum: Union[int, UnsetType]=unset, logs_archive_search_gb_scanned_sum: Union[int, UnsetType]=unset, metric_names_sum: Union[int, UnsetType]=unset, mobile_rum_lite_session_count_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_android_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_flutter_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_ios_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_reactnative_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_roku_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_sum: Union[int, UnsetType]=unset, mobile_rum_units_sum: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, ndm_netflow_events_sum: Union[int, UnsetType]=unset, netflow_indexed_events_count_sum: Union[int, UnsetType]=unset, network_device_wireless_top99p: Union[int, UnsetType]=unset, network_path_sum: Union[int, UnsetType]=unset, npm_host_top99p: Union[int, UnsetType]=unset, observability_pipelines_bytes_processed_sum: Union[int, UnsetType]=unset, oci_host_sum: Union[int, UnsetType]=unset, oci_host_top99p: Union[int, UnsetType]=unset, on_call_seat_hwm: Union[int, UnsetType]=unset, online_archive_events_count_sum: Union[int, UnsetType]=unset, opentelemetry_apm_host_top99p: Union[int, UnsetType]=unset, opentelemetry_host_top99p: Union[int, UnsetType]=unset, product_analytics_sum: Union[int, UnsetType]=unset, profiling_aas_count_top99p: Union[int, UnsetType]=unset, profiling_host_top99p: Union[int, UnsetType]=unset, proxmox_host_sum: Union[int, UnsetType]=unset, proxmox_host_top99p: Union[int, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, published_app_hwm: Union[int, UnsetType]=unset, region: Union[str, UnsetType]=unset, rum_browser_and_mobile_session_count: Union[int, UnsetType]=unset, rum_browser_legacy_session_count_sum: Union[int, UnsetType]=unset, rum_browser_lite_session_count_sum: Union[int, UnsetType]=unset, rum_browser_replay_session_count_sum: Union[int, UnsetType]=unset, rum_indexed_sessions_sum: Union[int, UnsetType]=unset, rum_ingested_sessions_sum: Union[int, UnsetType]=unset, rum_lite_session_count_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_android_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_flutter_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_ios_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_reactnative_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_roku_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_android_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_flutter_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_ios_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_kotlinmultiplatform_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_reactnative_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_roku_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_unity_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_android_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_ios_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_kotlinmultiplatform_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_reactnative_sum: Union[int, UnsetType]=unset, rum_replay_session_count_sum: Union[int, UnsetType]=unset, rum_session_count_sum: Union[int, UnsetType]=unset, rum_session_replay_add_on_sum: Union[int, UnsetType]=unset, rum_total_session_count_sum: Union[int, UnsetType]=unset, rum_units_sum: Union[int, UnsetType]=unset, sca_fargate_count_avg: Union[int, UnsetType]=unset, sca_fargate_count_hwm: Union[int, UnsetType]=unset, sds_apm_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_events_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_logs_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_rum_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_total_scanned_bytes_sum: Union[int, UnsetType]=unset, serverless_apps_apm_apm_azure_appservice_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_azure_azurefunction_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_azure_containerapp_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_fargate_ecs_tasks_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_gcp_cloudfunction_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_gcp_cloudrun_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg: Union[int, UnsetType]=unset, serverless_apps_apm_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_avg: Union[int, UnsetType]=unset, serverless_apps_azure_container_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_azure_count_avg: Union[int, UnsetType]=unset, serverless_apps_azure_function_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_azure_web_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_dsm_fargate_tasks_avg: Union[int, UnsetType]=unset, serverless_apps_ecs_avg: Union[int, UnsetType]=unset, serverless_apps_eks_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_azure_container_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_azure_function_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_azure_web_app_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_google_cloud_functions_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_google_cloud_run_instances_avg: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg: Union[int, UnsetType]=unset, serverless_apps_google_cloud_functions_instances_avg: Union[int, UnsetType]=unset, serverless_apps_google_cloud_run_instances_avg: Union[int, UnsetType]=unset, serverless_apps_google_count_avg: Union[int, UnsetType]=unset, serverless_apps_infra_gcp_gke_autopilot_pods_avg: Union[int, UnsetType]=unset, serverless_apps_total_count_avg: Union[int, UnsetType]=unset, siem_12mo_retention_sum: Union[int, UnsetType]=unset, siem_6mo_retention_sum: Union[int, UnsetType]=unset, siem_analyzed_logs_add_on_count_sum: Union[int, UnsetType]=unset, snmp_device_count_sum: Union[int, UnsetType]=unset, snmp_device_count_top99p: Union[int, UnsetType]=unset, synthetics_browser_check_calls_count_sum: Union[int, UnsetType]=unset, synthetics_check_calls_count_sum: Union[int, UnsetType]=unset, synthetics_mobile_test_runs_sum: Union[int, UnsetType]=unset, synthetics_parallel_testing_max_slots_hwm: Union[int, UnsetType]=unset, trace_search_indexed_events_count_sum: Union[int, UnsetType]=unset, twol_ingested_events_bytes_sum: Union[int, UnsetType]=unset, universal_service_monitoring_host_top99p: Union[int, UnsetType]=unset, vsphere_host_top99p: Union[int, UnsetType]=unset, vuln_management_host_count_top99p: Union[int, UnsetType]=unset, workflow_executions_usage_sum: Union[int, UnsetType]=unset, **kwargs): + """ + Global hourly report of all data billed by Datadog for a given organization. + + For SDK users only: all fields at this response level are accessible through the + ``additionalProperties`` map. Existing typed-field getters are unchanged. New billing + dimensions will not have typed-field getters. Use + `Get available fields for usage summary `_ + to enumerate every available key. + + :param account_name: The account name. + :type account_name: str, optional + + :param account_public_id: The account public id. + :type account_public_id: str, optional + + :param agent_host_top99p: Shows the 99th percentile of all agent hosts over all hours in the current date for the given org. + :type agent_host_top99p: int, optional + + :param ai_credits_agent_builder_ai_credits_sum: Shows the sum of all AI credits used by Agent Builder over all hours in the current date for the given org. + :type ai_credits_agent_builder_ai_credits_sum: int, optional + + :param ai_credits_bits_assistant_ai_credits_sum: Shows the sum of all AI credits used by Bits AI Assistant over all hours in the current date for the given org. + :type ai_credits_bits_assistant_ai_credits_sum: int, optional + + :param ai_credits_bits_dev_ai_credits_sum: Shows the sum of all AI credits used by Bits AI Dev over all hours in the current date for the given org. + :type ai_credits_bits_dev_ai_credits_sum: int, optional + + :param ai_credits_bits_sre_ai_credits_sum: Shows the sum of all AI credits used by Bits AI SRE over all hours in the current date for the given org. + :type ai_credits_bits_sre_ai_credits_sum: int, optional + + :param ai_credits_sum: Shows the sum of all AI credits over all hours in the current date for the given org. + :type ai_credits_sum: int, optional + + :param apm_azure_app_service_host_top99p: Shows the 99th percentile of all Azure app services using APM over all hours in the current date for the given org. + :type apm_azure_app_service_host_top99p: int, optional + + :param apm_devsecops_host_top99p: Shows the 99th percentile of all APM DevSecOps hosts over all hours in the current date for the given org. + :type apm_devsecops_host_top99p: int, optional + + :param apm_enterprise_standalone_hosts_top99p: Shows the 99th percentile of all distinct standalone Enterprise hosts over all hours in the current date for the given org. + :type apm_enterprise_standalone_hosts_top99p: int, optional + + :param apm_fargate_count_avg: Shows the average of all APM ECS Fargate tasks over all hours in the current month for the given org. + :type apm_fargate_count_avg: int, optional + + :param apm_host_top99p: Shows the 99th percentile of all distinct APM hosts over all hours in the current date for the given org. + :type apm_host_top99p: int, optional + + :param apm_pro_standalone_hosts_top99p: Shows the 99th percentile of all distinct standalone Pro hosts over all hours in the current date for the given org. + :type apm_pro_standalone_hosts_top99p: int, optional + + :param appsec_fargate_count_avg: Shows the average of all Application Security Monitoring ECS Fargate tasks over all hours in the current month for the given org. + :type appsec_fargate_count_avg: int, optional + + :param asm_serverless_sum: Shows the sum of all Application Security Monitoring Serverless invocations over all hours in the current month for the given org. + :type asm_serverless_sum: int, optional + + :param audit_logs_lines_indexed_sum: Shows the sum of all audit logs lines indexed over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type audit_logs_lines_indexed_sum: int, optional + + :param audit_trail_enabled_hwm: Shows whether Audit Trail is enabled for the current date for the given org. + :type audit_trail_enabled_hwm: int, optional + + :param audit_trail_event_forwarding_events_sum: Shows the sum of all Audit Trail event forwarding events over all hours in the current date for the given org. + :type audit_trail_event_forwarding_events_sum: int, optional + + :param avg_profiled_fargate_tasks: The average total count for Fargate Container Profiler over all hours in the current month for the given org. + :type avg_profiled_fargate_tasks: int, optional + + :param aws_host_top99p: Shows the 99th percentile of all AWS hosts over all hours in the current date for the given org. + :type aws_host_top99p: int, optional + + :param aws_lambda_func_count: Shows the sum of all AWS Lambda invocations over all hours in the current date for the given org. + :type aws_lambda_func_count: int, optional + + :param aws_lambda_invocations_sum: Shows the sum of all AWS Lambda invocations over all hours in the current date for the given org. + :type aws_lambda_invocations_sum: int, optional + + :param azure_app_service_top99p: Shows the 99th percentile of all Azure app services over all hours in the current date for the given org. + :type azure_app_service_top99p: int, optional + + :param billable_ingested_bytes_sum: Shows the sum of all log bytes ingested over all hours in the current date for the given org. + :type billable_ingested_bytes_sum: int, optional + + :param bits_ai_investigations_sum: Shows the sum of all Bits AI Investigations over all hours in the current date for the given org. + :type bits_ai_investigations_sum: int, optional + + :param browser_rum_lite_session_count_sum: Shows the sum of all browser lite sessions over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type browser_rum_lite_session_count_sum: int, optional + + :param browser_rum_replay_session_count_sum: Shows the sum of all browser replay sessions over all hours in the current date for the given org (To be deprecated on October 1st, 2024). + :type browser_rum_replay_session_count_sum: int, optional + + :param browser_rum_units_sum: Shows the sum of all browser RUM units over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type browser_rum_units_sum: int, optional + + :param ccm_anthropic_spend_last: Shows the last value of Anthropic cloud spend monitored over all hours in the current date for the given org. + :type ccm_anthropic_spend_last: int, optional + + :param ccm_aws_spend_last: Shows the last value of AWS cloud spend monitored over all hours in the current date for the given org. + :type ccm_aws_spend_last: int, optional + + :param ccm_azure_spend_last: Shows the last value of Azure cloud spend monitored over all hours in the current date for the given org. + :type ccm_azure_spend_last: int, optional + + :param ccm_confluent_spend_last: Shows the last value of Confluent cloud spend monitored over all hours in the current date for the given org. + :type ccm_confluent_spend_last: int, optional + + :param ccm_databricks_spend_last: Shows the last value of Databricks cloud spend monitored over all hours in the current date for the given org. + :type ccm_databricks_spend_last: int, optional + + :param ccm_elastic_spend_last: Shows the last value of Elastic cloud spend monitored over all hours in the current date for the given org. + :type ccm_elastic_spend_last: int, optional + + :param ccm_fastly_spend_last: Shows the last value of Fastly cloud spend monitored over all hours in the current date for the given org. + :type ccm_fastly_spend_last: int, optional + + :param ccm_gcp_spend_last: Shows the last value of GCP cloud spend monitored over all hours in the current date for the given org. + :type ccm_gcp_spend_last: int, optional + + :param ccm_github_spend_last: Shows the last value of GitHub cloud spend monitored over all hours in the current date for the given org. + :type ccm_github_spend_last: int, optional + + :param ccm_mongodb_spend_last: Shows the last value of MongoDB cloud spend monitored over all hours in the current date for the given org. + :type ccm_mongodb_spend_last: int, optional + + :param ccm_oci_spend_last: Shows the last value of OCI cloud spend monitored over all hours in the current date for the given org. + :type ccm_oci_spend_last: int, optional + + :param ccm_openai_spend_last: Shows the last value of OpenAI cloud spend monitored over all hours in the current date for the given org. + :type ccm_openai_spend_last: int, optional + + :param ccm_snowflake_spend_last: Shows the last value of Snowflake cloud spend monitored over all hours in the current date for the given org. + :type ccm_snowflake_spend_last: int, optional + + :param ccm_spend_monitored_ent_last: Shows the last value of the amount of cloud spend monitored for Enterprise over all hours in the current date for the given org. + :type ccm_spend_monitored_ent_last: int, optional + + :param ccm_spend_monitored_pro_last: Shows the last value of the amount of cloud spend monitored for Pro over all hours in the current date for the given org. + :type ccm_spend_monitored_pro_last: int, optional + + :param ccm_twilio_spend_last: Shows the last value of Twilio cloud spend monitored over all hours in the current date for the given org. + :type ccm_twilio_spend_last: int, optional + + :param ci_pipeline_indexed_spans_sum: Shows the sum of all CI pipeline indexed spans over all hours in the current date for the given org. + :type ci_pipeline_indexed_spans_sum: int, optional + + :param ci_test_indexed_spans_sum: Shows the sum of all CI test indexed spans over all hours in the current date for the given org. + :type ci_test_indexed_spans_sum: int, optional + + :param ci_visibility_itr_committers_hwm: Shows the high-water mark of all CI visibility intelligent test runner committers over all hours in the current date for the given org. + :type ci_visibility_itr_committers_hwm: int, optional + + :param ci_visibility_pipeline_committers_hwm: Shows the high-water mark of all CI visibility pipeline committers over all hours in the current date for the given org. + :type ci_visibility_pipeline_committers_hwm: int, optional + + :param ci_visibility_test_committers_hwm: Shows the high-water mark of all CI visibility test committers over all hours in the current date for the given org. + :type ci_visibility_test_committers_hwm: int, optional + + :param cloud_cost_management_aws_host_count_avg: Host count average of Cloud Cost Management for AWS for the given date and given org. + :type cloud_cost_management_aws_host_count_avg: int, optional + + :param cloud_cost_management_azure_host_count_avg: Host count average of Cloud Cost Management for Azure for the given date and given org. + :type cloud_cost_management_azure_host_count_avg: int, optional + + :param cloud_cost_management_gcp_host_count_avg: Host count average of Cloud Cost Management for GCP for the given date and given org. + :type cloud_cost_management_gcp_host_count_avg: int, optional + + :param cloud_cost_management_host_count_avg: Host count average of Cloud Cost Management for all cloud providers for the given date and given org. + :type cloud_cost_management_host_count_avg: int, optional + + :param cloud_cost_management_oci_host_count_avg: Average host count for Cloud Cost Management on OCI for the given date and organization. + :type cloud_cost_management_oci_host_count_avg: int, optional + + :param cloud_siem_events_sum: Shows the sum of all Cloud Security Information and Event Management events over all hours in the current date for the given org. + :type cloud_siem_events_sum: int, optional + + :param cloud_siem_indexed_logs_sum: Shows the sum of all Cloud SIEM Indexed Logs over all hours in the current date for the given org. + :type cloud_siem_indexed_logs_sum: int, optional + + :param code_analysis_sa_committers_hwm: Shows the high-water mark of all Static Analysis committers over all hours in the current date for the given org. + :type code_analysis_sa_committers_hwm: int, optional + + :param code_analysis_sca_committers_hwm: Shows the high-water mark of all static Software Composition Analysis committers over all hours in the current date for the given org. + :type code_analysis_sca_committers_hwm: int, optional + + :param code_security_host_top99p: Shows the 99th percentile of all Code Security hosts over all hours in the current date for the given org. + :type code_security_host_top99p: int, optional + + :param container_avg: Shows the average of all distinct containers over all hours in the current date for the given org. + :type container_avg: int, optional + + :param container_excl_agent_avg: Shows the average of containers without the Datadog Agent over all hours in the current date for the given organization. + :type container_excl_agent_avg: int, optional + + :param container_hwm: Shows the high-water mark of all distinct containers over all hours in the current date for the given org. + :type container_hwm: int, optional + + :param csm_container_enterprise_compliance_count_sum: Shows the sum of all Cloud Security Management Enterprise compliance containers over all hours in the current date for the given org. + :type csm_container_enterprise_compliance_count_sum: int, optional + + :param csm_container_enterprise_cws_count_sum: Shows the sum of all Cloud Security Management Enterprise Cloud Workload Security containers over all hours in the current date for the given org. + :type csm_container_enterprise_cws_count_sum: int, optional + + :param csm_container_enterprise_total_count_sum: Shows the sum of all Cloud Security Management Enterprise containers over all hours in the current date for the given org. + :type csm_container_enterprise_total_count_sum: int, optional + + :param csm_host_enterprise_aas_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise Azure app services hosts over all hours in the current date for the given org. + :type csm_host_enterprise_aas_host_count_top99p: int, optional + + :param csm_host_enterprise_aws_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise AWS hosts over all hours in the current date for the given org. + :type csm_host_enterprise_aws_host_count_top99p: int, optional + + :param csm_host_enterprise_azure_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise Azure hosts over all hours in the current date for the given org. + :type csm_host_enterprise_azure_host_count_top99p: int, optional + + :param csm_host_enterprise_compliance_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise compliance hosts over all hours in the current date for the given org. + :type csm_host_enterprise_compliance_host_count_top99p: int, optional + + :param csm_host_enterprise_cws_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise Cloud Workload Security hosts over all hours in the current date for the given org. + :type csm_host_enterprise_cws_host_count_top99p: int, optional + + :param csm_host_enterprise_gcp_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise GCP hosts over all hours in the current date for the given org. + :type csm_host_enterprise_gcp_host_count_top99p: int, optional + + :param csm_host_enterprise_oci_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise OCI hosts over all hours in the current date for the given org. + :type csm_host_enterprise_oci_host_count_top99p: int, optional + + :param csm_host_enterprise_total_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Enterprise hosts over all hours in the current date for the given org. + :type csm_host_enterprise_total_host_count_top99p: int, optional + + :param csm_host_pro_hosts_agentless_scanners_sum: Shows the sum of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current date for the given org. + :type csm_host_pro_hosts_agentless_scanners_sum: int, optional + + :param csm_host_pro_hosts_agentless_scanners_top99p: Shows the 99th percentile of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current date for the given org. + :type csm_host_pro_hosts_agentless_scanners_top99p: int, optional + + :param csm_host_pro_oci_host_count_top99p: Shows the 99th percentile of all Cloud Security Management Pro OCI hosts over all hours in the current date for the given org. + :type csm_host_pro_oci_host_count_top99p: int, optional + + :param cspm_aas_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro Azure app services hosts over all hours in the current date for the given org. + :type cspm_aas_host_top99p: int, optional + + :param cspm_aws_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro AWS hosts over all hours in the current date for the given org. + :type cspm_aws_host_top99p: int, optional + + :param cspm_azure_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro Azure hosts over all hours in the current date for the given org. + :type cspm_azure_host_top99p: int, optional + + :param cspm_container_avg: Shows the average number of Cloud Security Management Pro containers over all hours in the current date for the given org. + :type cspm_container_avg: int, optional + + :param cspm_container_hwm: Shows the high-water mark of Cloud Security Management Pro containers over all hours in the current date for the given org. + :type cspm_container_hwm: int, optional + + :param cspm_gcp_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro GCP hosts over all hours in the current date for the given org. + :type cspm_gcp_host_top99p: int, optional + + :param cspm_host_top99p: Shows the 99th percentile of all Cloud Security Management Pro hosts over all hours in the current date for the given org. + :type cspm_host_top99p: int, optional + + :param cspm_hosts_agentless_scanners_sum: Shows the sum of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current date for the given org. + :type cspm_hosts_agentless_scanners_sum: int, optional + + :param cspm_hosts_agentless_scanners_top99p: Shows the 99th percentile of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current date for the given org. + :type cspm_hosts_agentless_scanners_top99p: int, optional + + :param custom_historical_ts_avg: Shows the average number of distinct historical custom metrics over all hours in the current date for the given org. + :type custom_historical_ts_avg: int, optional + + :param custom_live_ts_avg: Shows the average number of distinct live custom metrics over all hours in the current date for the given org. + :type custom_live_ts_avg: int, optional + + :param custom_ts_avg: Shows the average number of distinct custom metrics over all hours in the current date for the given org. + :type custom_ts_avg: int, optional + + :param cws_container_count_avg: Shows the average of all distinct Cloud Workload Security containers over all hours in the current date for the given org. + :type cws_container_count_avg: int, optional + + :param cws_fargate_task_avg: Shows the average of all distinct Cloud Workload Security Fargate tasks over all hours in the current date for the given org. + :type cws_fargate_task_avg: int, optional + + :param cws_host_top99p: Shows the 99th percentile of all Cloud Workload Security hosts over all hours in the current date for the given org. + :type cws_host_top99p: int, optional + + :param data_jobs_monitoring_host_hr_sum: Shows the sum of all Data Jobs Monitoring hosts over all hours in the current date for the given org. + :type data_jobs_monitoring_host_hr_sum: int, optional + + :param data_stream_monitoring_host_count_sum: Shows the sum of all Data Streams Monitoring hosts over all hours in the current date for the given org. + :type data_stream_monitoring_host_count_sum: int, optional + + :param data_stream_monitoring_host_count_top99p: Shows the 99th percentile of all Data Streams Monitoring hosts over all hours in the current date for the given org. + :type data_stream_monitoring_host_count_top99p: int, optional + + :param dbm_host_top99p_sum: Shows the 99th percentile of all Database Monitoring hosts over all hours in the current month for the given org. + :type dbm_host_top99p_sum: int, optional + + :param dbm_queries_avg_sum: Shows the average of all distinct Database Monitoring normalized queries over all hours in the current month for the given org. + :type dbm_queries_avg_sum: int, optional + + :param do_jobs_monitoring_orchestrators_job_hours_sum: Shows the sum of all orchestrator job hours over all hours in the current date for the given org. + :type do_jobs_monitoring_orchestrators_job_hours_sum: int, optional + + :param eph_infra_host_agent_sum: Shows the sum of all ephemeral infrastructure hosts with the Datadog Agent over all hours in the current date for the given org. + :type eph_infra_host_agent_sum: int, optional + + :param eph_infra_host_alibaba_sum: Shows the sum of all ephemeral infrastructure hosts on Alibaba over all hours in the current date for the given org. + :type eph_infra_host_alibaba_sum: int, optional + + :param eph_infra_host_aws_sum: Shows the sum of all ephemeral infrastructure hosts on AWS over all hours in the current date for the given org. + :type eph_infra_host_aws_sum: int, optional + + :param eph_infra_host_azure_sum: Shows the sum of all ephemeral infrastructure hosts on Azure over all hours in the current date for the given org. + :type eph_infra_host_azure_sum: int, optional + + :param eph_infra_host_basic_infra_basic_agent_sum: Shows the sum of all ephemeral infrastructure hosts for Basic tier with the Datadog Agent over all hours in the current date for the given org. + :type eph_infra_host_basic_infra_basic_agent_sum: int, optional + + :param eph_infra_host_basic_infra_basic_vsphere_sum: Shows the sum of all ephemeral infrastructure hosts for Basic tier on vSphere over all hours in the current date for the given org. + :type eph_infra_host_basic_infra_basic_vsphere_sum: int, optional + + :param eph_infra_host_basic_sum: Shows the sum of all ephemeral infrastructure hosts for Basic tier over all hours in the current date for the given org. + :type eph_infra_host_basic_sum: int, optional + + :param eph_infra_host_ent_sum: Shows the sum of all ephemeral infrastructure hosts for Enterprise over all hours in the current date for the given org. + :type eph_infra_host_ent_sum: int, optional + + :param eph_infra_host_gcp_sum: Shows the sum of all ephemeral infrastructure hosts on GCP over all hours in the current date for the given org. + :type eph_infra_host_gcp_sum: int, optional + + :param eph_infra_host_heroku_sum: Shows the sum of all ephemeral infrastructure hosts on Heroku over all hours in the current date for the given org. + :type eph_infra_host_heroku_sum: int, optional + + :param eph_infra_host_only_aas_sum: Shows the sum of all ephemeral infrastructure hosts with only Azure App Services over all hours in the current date for the given org. + :type eph_infra_host_only_aas_sum: int, optional + + :param eph_infra_host_only_vsphere_sum: Shows the sum of all ephemeral infrastructure hosts with only vSphere over all hours in the current date for the given org. + :type eph_infra_host_only_vsphere_sum: int, optional + + :param eph_infra_host_opentelemetry_apm_sum: Shows the sum of all ephemeral APM hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current date for the given org. + :type eph_infra_host_opentelemetry_apm_sum: int, optional + + :param eph_infra_host_opentelemetry_sum: Shows the sum of all ephemeral hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current date for the given org. + :type eph_infra_host_opentelemetry_sum: int, optional + + :param eph_infra_host_pro_sum: Shows the sum of all ephemeral infrastructure hosts for Pro over all hours in the current date for the given org. + :type eph_infra_host_pro_sum: int, optional + + :param eph_infra_host_proplus_sum: Shows the sum of all ephemeral infrastructure hosts for Pro Plus over all hours in the current date for the given org. + :type eph_infra_host_proplus_sum: int, optional + + :param eph_infra_host_proxmox_sum: Sum of all ephemeral infrastructure hosts for Proxmox over all hours in the current date for the given organization. + :type eph_infra_host_proxmox_sum: int, optional + + :param error_tracking_apm_error_events_sum: Shows the sum of all Error Tracking APM error events over all hours in the current date for the given org. + :type error_tracking_apm_error_events_sum: int, optional + + :param error_tracking_error_events_sum: Shows the sum of all Error Tracking error events over all hours in the current date for the given org. + :type error_tracking_error_events_sum: int, optional + + :param error_tracking_events_sum: Shows the sum of all Error Tracking events over all hours in the current date for the given org. + :type error_tracking_events_sum: int, optional + + :param error_tracking_rum_error_events_sum: Shows the sum of all Error Tracking RUM error events over all hours in the current date for the given org. + :type error_tracking_rum_error_events_sum: int, optional + + :param event_management_correlation_correlated_events_sum: Shows the sum of all Event Management correlated events over all hours in the current date for the given org. + :type event_management_correlation_correlated_events_sum: int, optional + + :param event_management_correlation_correlated_related_events_sum: Shows the sum of all Event Management correlated related events over all hours in the current date for the given org. + :type event_management_correlation_correlated_related_events_sum: int, optional + + :param event_management_correlation_sum: Shows the sum of all Event Management correlations over all hours in the current date for the given org. + :type event_management_correlation_sum: int, optional + + :param fargate_container_profiler_profiling_fargate_avg: The average number of Profiling Fargate tasks over all hours in the current month for the given org. + :type fargate_container_profiler_profiling_fargate_avg: int, optional + + :param fargate_container_profiler_profiling_fargate_eks_avg: The average number of Profiling Fargate Elastic Kubernetes Service tasks over all hours in the current month for the given org. + :type fargate_container_profiler_profiling_fargate_eks_avg: int, optional + + :param fargate_tasks_count_avg: The average task count for Fargate. + :type fargate_tasks_count_avg: int, optional + + :param fargate_tasks_count_hwm: Shows the high-water mark of all Fargate tasks over all hours in the current date for the given org. + :type fargate_tasks_count_hwm: int, optional + + :param feature_flags_config_requests_sum: Shows the sum of all Feature Flags Client-Side SDK config requests over all hours in the current date for the given org. + :type feature_flags_config_requests_sum: int, optional + + :param flex_logs_compute_large_avg: Shows the average number of Flex Logs Compute Large Instances over all hours in the current date for the given org. + :type flex_logs_compute_large_avg: int, optional + + :param flex_logs_compute_medium_avg: Shows the average number of Flex Logs Compute Medium Instances over all hours in the current date for the given org. + :type flex_logs_compute_medium_avg: int, optional + + :param flex_logs_compute_small_avg: Shows the average number of Flex Logs Compute Small Instances over all hours in the current date for the given org. + :type flex_logs_compute_small_avg: int, optional + + :param flex_logs_compute_xlarge_avg: Shows the average number of Flex Logs Compute Extra Large Instances over all hours in the current date for the given org. + :type flex_logs_compute_xlarge_avg: int, optional + + :param flex_logs_compute_xsmall_avg: Shows the average number of Flex Logs Compute Extra Small Instances over all hours in the current date for the given org. + :type flex_logs_compute_xsmall_avg: int, optional + + :param flex_logs_starter_avg: Shows the average number of Flex Logs Starter Instances over all hours in the current date for the given org. + :type flex_logs_starter_avg: int, optional + + :param flex_logs_starter_storage_index_avg: Shows the average number of Flex Logs Starter Storage Index Instances over all hours in the current date for the given org. + :type flex_logs_starter_storage_index_avg: int, optional + + :param flex_logs_starter_storage_retention_adjustment_avg: Shows the average number of Flex Logs Starter Storage Retention Adjustment Instances over all hours in the current date for the given org. + :type flex_logs_starter_storage_retention_adjustment_avg: int, optional + + :param flex_stored_logs_avg: Shows the average of all Flex Stored Logs over all hours in the current date for the given org. + :type flex_stored_logs_avg: int, optional + + :param forwarding_events_bytes_sum: Shows the sum of all log bytes forwarded over all hours in the current date for the given org. + :type forwarding_events_bytes_sum: int, optional + + :param gcp_host_top99p: Shows the 99th percentile of all GCP hosts over all hours in the current date for the given org. + :type gcp_host_top99p: int, optional + + :param heroku_host_top99p: Shows the 99th percentile of all Heroku dynos over all hours in the current date for the given org. + :type heroku_host_top99p: int, optional + + :param id: The organization id. + :type id: str, optional + + :param incident_management_monthly_active_users_hwm: Shows the high-water mark of incident management monthly active users over all hours in the current date for the given org. + :type incident_management_monthly_active_users_hwm: int, optional + + :param incident_management_seats_hwm: Shows the high-water mark of Incident Management seats over all hours on the current date for the given organization. + :type incident_management_seats_hwm: int, optional + + :param indexed_events_count_sum: Shows the sum of all log events indexed over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type indexed_events_count_sum: int, optional + + :param indexed_points_sum: Shows the sum of all indexed custom metrics points over all hours in the current date for the given org. + :type indexed_points_sum: int, optional + + :param infra_cpu_avg: Shows the average of all Infrastructure vCPU cores over all hours in the current date for the given org. + :type infra_cpu_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_avg: Shows the average of all default Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_agent_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_basic_avg: Shows the average of all default basic Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_agent_basic_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_basic_sum: Shows the sum of all default basic Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_agent_basic_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_sum: Shows the sum of all default Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_agent_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_aws_avg: Shows the average of all default Infrastructure host vCPU cores on AWS over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_aws_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_aws_sum: Shows the sum of all default Infrastructure host vCPU cores on AWS over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_aws_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_azure_avg: Shows the average of all default Infrastructure host vCPU cores on Azure over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_azure_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_azure_sum: Shows the sum of all default Infrastructure host vCPU cores on Azure over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_azure_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_gcp_avg: Shows the average of all default Infrastructure host vCPU cores on GCP over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_gcp_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_gcp_sum: Shows the sum of all default Infrastructure host vCPU cores on GCP over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_gcp_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_avg: Shows the average of all default Infrastructure host vCPU cores on Nutanix over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_nutanix_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_basic_avg: Shows the average of all default basic Infrastructure host vCPU cores on Nutanix over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_nutanix_basic_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_basic_sum: Shows the sum of all default basic Infrastructure host vCPU cores on Nutanix over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_nutanix_basic_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_sum: Shows the sum of all default Infrastructure host vCPU cores on Nutanix over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_nutanix_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_opentelemetry_avg: Shows the average of all default Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_opentelemetry_avg: int, optional + + :param infra_cpu_default_infra_host_vcpu_opentelemetry_sum: Shows the sum of all default Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current date for the given org. + :type infra_cpu_default_infra_host_vcpu_opentelemetry_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_agent_avg: Shows the average of all observed Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_agent_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_agent_sum: Shows the sum of all observed Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_agent_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_aws_avg: Shows the average of all observed Infrastructure host vCPU cores on AWS over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_aws_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_aws_sum: Shows the sum of all observed Infrastructure host vCPU cores on AWS over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_aws_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_azure_avg: Shows the average of all observed Infrastructure host vCPU cores on Azure over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_azure_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_azure_sum: Shows the sum of all observed Infrastructure host vCPU cores on Azure over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_azure_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_gcp_avg: Shows the average of all observed Infrastructure host vCPU cores on GCP over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_gcp_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_gcp_sum: Shows the sum of all observed Infrastructure host vCPU cores on GCP over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_gcp_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_nutanix_avg: Shows the average of all observed Infrastructure host vCPU cores on Nutanix over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_nutanix_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_nutanix_sum: Shows the sum of all observed Infrastructure host vCPU cores on Nutanix over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_nutanix_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_opentelemetry_avg: Shows the average of all observed Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_opentelemetry_avg: int, optional + + :param infra_cpu_observed_infra_host_vcpu_opentelemetry_sum: Shows the sum of all observed Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current date for the given org. + :type infra_cpu_observed_infra_host_vcpu_opentelemetry_sum: int, optional + + :param infra_cpu_sum: Shows the sum of all Infrastructure vCPU cores over all hours in the current date for the given org. + :type infra_cpu_sum: int, optional + + :param infra_edge_monitoring_devices_top99p: Shows the 99th percentile of all Edge Devices Monitoring devices over all hours in the current date for the given org. + :type infra_edge_monitoring_devices_top99p: int, optional + + :param infra_host_basic_infra_basic_agent_top99p: Shows the 99th percentile of all distinct infrastructure hosts for Basic tier with the Datadog Agent over all hours in the current date for the given org. + :type infra_host_basic_infra_basic_agent_top99p: int, optional + + :param infra_host_basic_infra_basic_vsphere_top99p: Shows the 99th percentile of all distinct infrastructure hosts for Basic tier on vSphere over all hours in the current date for the given org. + :type infra_host_basic_infra_basic_vsphere_top99p: int, optional + + :param infra_host_basic_top99p: Shows the 99th percentile of all distinct infrastructure hosts for Basic tier over all hours in the current date for the given org. + :type infra_host_basic_top99p: int, optional + + :param infra_host_top99p: Shows the 99th percentile of all distinct infrastructure hosts over all hours in the current date for the given org. + :type infra_host_top99p: int, optional + + :param infra_storage_mgmt_objects_count_avg: Shows the average number of storage management objects over all hours in the current date for the given org. + :type infra_storage_mgmt_objects_count_avg: int, optional + + :param ingest_points_sum: Shows the sum of all ingested custom metrics points over all hours in the current date for the given org. + :type ingest_points_sum: int, optional + + :param ingested_events_bytes_sum: Shows the sum of all log bytes ingested over all hours in the current date for the given org. + :type ingested_events_bytes_sum: int, optional + + :param iot_apm_host_sum: Shows the sum of all Application Performance Monitoring IoT hosts over all hours in the current date for the given org. + :type iot_apm_host_sum: int, optional + + :param iot_apm_host_top99p: Shows the 99th percentile of all Application Performance Monitoring IoT hosts over all hours in the current date for the given org. + :type iot_apm_host_top99p: int, optional + + :param iot_device_agg_sum: Shows the sum of all IoT devices over all hours in the current date for the given org. + :type iot_device_agg_sum: int, optional + + :param iot_device_top99p_sum: Shows the 99th percentile of all IoT devices over all hours in the current date for the given org. + :type iot_device_top99p_sum: int, optional + + :param llm_observability_15day_retention_spans_sum: Shows the sum of all LLM Observability 15-day retention spans over all hours in the current date for the given org. + :type llm_observability_15day_retention_spans_sum: int, optional + + :param llm_observability_30day_retention_spans_sum: Shows the sum of all LLM Observability 30-day retention spans over all hours in the current date for the given org. + :type llm_observability_30day_retention_spans_sum: int, optional + + :param llm_observability_60day_retention_spans_sum: Shows the sum of all LLM Observability 60-day retention spans over all hours in the current date for the given org. + :type llm_observability_60day_retention_spans_sum: int, optional + + :param llm_observability_90day_retention_spans_sum: Shows the sum of all LLM Observability 90-day retention spans over all hours in the current date for the given org. + :type llm_observability_90day_retention_spans_sum: int, optional + + :param llm_observability_min_spend_sum: Shows the sum of all LLM Observability minimum spend over all hours in the current date for the given org. + :type llm_observability_min_spend_sum: int, optional + + :param llm_observability_sum: Shows the sum of all LLM observability sessions over all hours in the current date for the given org. + :type llm_observability_sum: int, optional + + :param logs_archive_search_gb_scanned_sum: Shows the sum of all Logs Archive Search scanned data over all hours in the current date for the given org. + :type logs_archive_search_gb_scanned_sum: int, optional + + :param metric_names_sum: Shows the sum of all custom metric names over all hours in the current date for the given org. + :type metric_names_sum: int, optional + + :param mobile_rum_lite_session_count_sum: Shows the sum of all mobile lite sessions over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_lite_session_count_sum: int, optional + + :param mobile_rum_session_count_android_sum: Shows the sum of all mobile RUM sessions on Android over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_android_sum: int, optional + + :param mobile_rum_session_count_flutter_sum: Shows the sum of all mobile RUM sessions on Flutter over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_flutter_sum: int, optional + + :param mobile_rum_session_count_ios_sum: Shows the sum of all mobile RUM sessions on iOS over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_ios_sum: int, optional + + :param mobile_rum_session_count_reactnative_sum: Shows the sum of all mobile RUM sessions on React Native over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_reactnative_sum: int, optional + + :param mobile_rum_session_count_roku_sum: Shows the sum of all mobile RUM sessions on Roku over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_roku_sum: int, optional + + :param mobile_rum_session_count_sum: Shows the sum of all mobile RUM sessions over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_sum: int, optional + + :param mobile_rum_units_sum: Shows the sum of all mobile RUM units over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_units_sum: int, optional + + :param name: The organization name. + :type name: str, optional + + :param ndm_netflow_events_sum: Shows the sum of all Network Device Monitoring NetFlow events over all hours in the current date for the given org. + :type ndm_netflow_events_sum: int, optional + + :param netflow_indexed_events_count_sum: Shows the sum of all Network flows indexed over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type netflow_indexed_events_count_sum: int, optional + + :param network_device_wireless_top99p: Shows the 99th percentile of all Network Device Monitoring wireless devices over all hours in the current date for the given org. + :type network_device_wireless_top99p: int, optional + + :param network_path_sum: Shows the sum of all Network Path scheduled tests over all hours in the current date for the given org. + :type network_path_sum: int, optional + + :param npm_host_top99p: Shows the 99th percentile of all distinct Cloud Network Monitoring hosts (formerly known as Network hosts) over all hours in the current date for the given org. + :type npm_host_top99p: int, optional + + :param observability_pipelines_bytes_processed_sum: Sum of all observability pipelines bytes processed over all hours in the current date for the given org. + :type observability_pipelines_bytes_processed_sum: int, optional + + :param oci_host_sum: Shows the sum of all Oracle Cloud Infrastructure hosts over all hours in the current date for the given org. + :type oci_host_sum: int, optional + + :param oci_host_top99p: Shows the 99th percentile of all Oracle Cloud Infrastructure hosts over all hours in the current date for the given org. + :type oci_host_top99p: int, optional + + :param on_call_seat_hwm: Shows the high-water mark of On-Call seats over all hours in the current date for the given org. + :type on_call_seat_hwm: int, optional + + :param online_archive_events_count_sum: Sum of all online archived events over all hours in the current date for the given org. + :type online_archive_events_count_sum: int, optional + + :param opentelemetry_apm_host_top99p: Shows the 99th percentile of APM hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current date for the given org. + :type opentelemetry_apm_host_top99p: int, optional + + :param opentelemetry_host_top99p: Shows the 99th percentile of all hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current date for the given org. + :type opentelemetry_host_top99p: int, optional + + :param product_analytics_sum: Shows the sum of all product analytics sessions over all hours in the current date for the given org. + :type product_analytics_sum: int, optional + + :param profiling_aas_count_top99p: Shows the 99th percentile of all profiled Azure app services over all hours in the current date for all organizations. + :type profiling_aas_count_top99p: int, optional + + :param profiling_host_top99p: Shows the 99th percentile of all profiled hosts over all hours within the current date for the given org. + :type profiling_host_top99p: int, optional + + :param proxmox_host_sum: Sum of all Proxmox hosts over all hours in the current date for the given organization. + :type proxmox_host_sum: int, optional + + :param proxmox_host_top99p: 99th percentile of all Proxmox hosts over all hours in the current date for the given organization. + :type proxmox_host_top99p: int, optional + + :param public_id: The organization public id. + :type public_id: str, optional + + :param published_app_hwm: Shows the high-water mark of all published applications over all hours in the current date for the given org. + :type published_app_hwm: int, optional + + :param region: The region of the organization. + :type region: str, optional + + :param rum_browser_and_mobile_session_count: Shows the sum of all mobile sessions and all browser lite and legacy sessions over all hours in the current date for the given org (To be deprecated on October 1st, 2024). + :type rum_browser_and_mobile_session_count: int, optional + + :param rum_browser_legacy_session_count_sum: Shows the sum of all browser RUM legacy sessions over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_browser_legacy_session_count_sum: int, optional + + :param rum_browser_lite_session_count_sum: Shows the sum of all browser RUM lite sessions over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_browser_lite_session_count_sum: int, optional + + :param rum_browser_replay_session_count_sum: Shows the sum of all browser RUM Session Replay counts over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_browser_replay_session_count_sum: int, optional + + :param rum_indexed_sessions_sum: Shows the sum of all RUM indexed sessions over all hours in the current date for the given org. + :type rum_indexed_sessions_sum: int, optional + + :param rum_ingested_sessions_sum: Shows the sum of all RUM ingested sessions over all hours in the current date for the given org. + :type rum_ingested_sessions_sum: int, optional + + :param rum_lite_session_count_sum: Shows the sum of all RUM lite sessions (browser and mobile) over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_lite_session_count_sum: int, optional + + :param rum_mobile_legacy_session_count_android_sum: Shows the sum of all mobile RUM legacy sessions on Android over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_android_sum: int, optional + + :param rum_mobile_legacy_session_count_flutter_sum: Shows the sum of all mobile RUM legacy sessions on Flutter over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_flutter_sum: int, optional + + :param rum_mobile_legacy_session_count_ios_sum: Shows the sum of all mobile RUM legacy sessions on iOS over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_ios_sum: int, optional + + :param rum_mobile_legacy_session_count_reactnative_sum: Shows the sum of all mobile RUM legacy sessions on React Native over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_reactnative_sum: int, optional + + :param rum_mobile_legacy_session_count_roku_sum: Shows the sum of all mobile RUM legacy sessions on Roku over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_roku_sum: int, optional + + :param rum_mobile_lite_session_count_android_sum: Shows the sum of all mobile RUM lite sessions on Android over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_android_sum: int, optional + + :param rum_mobile_lite_session_count_flutter_sum: Shows the sum of all mobile RUM lite sessions on Flutter over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_flutter_sum: int, optional + + :param rum_mobile_lite_session_count_ios_sum: Shows the sum of all mobile RUM lite sessions on iOS over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_ios_sum: int, optional + + :param rum_mobile_lite_session_count_kotlinmultiplatform_sum: Shows the sum of all mobile RUM lite sessions on Kotlin Multiplatform over all hours within the current date for the given org. + :type rum_mobile_lite_session_count_kotlinmultiplatform_sum: int, optional + + :param rum_mobile_lite_session_count_reactnative_sum: Shows the sum of all mobile RUM lite sessions on React Native over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_reactnative_sum: int, optional + + :param rum_mobile_lite_session_count_roku_sum: Shows the sum of all mobile RUM lite sessions on Roku over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_roku_sum: int, optional + + :param rum_mobile_lite_session_count_unity_sum: Shows the sum of all mobile RUM lite sessions on Unity over all hours within the current date for the given org. + :type rum_mobile_lite_session_count_unity_sum: int, optional + + :param rum_mobile_replay_session_count_android_sum: Shows the sum of all mobile RUM replay sessions on Android over all hours within the current date for the given org. + :type rum_mobile_replay_session_count_android_sum: int, optional + + :param rum_mobile_replay_session_count_ios_sum: Shows the sum of all mobile RUM replay sessions on iOS over all hours within the current date for the given org. + :type rum_mobile_replay_session_count_ios_sum: int, optional + + :param rum_mobile_replay_session_count_kotlinmultiplatform_sum: Shows the sum of all mobile RUM replay sessions on Kotlin Multiplatform over all hours within the current date for the given org. + :type rum_mobile_replay_session_count_kotlinmultiplatform_sum: int, optional + + :param rum_mobile_replay_session_count_reactnative_sum: Shows the sum of all mobile RUM replay sessions on React Native over all hours within the current date for the given org. + :type rum_mobile_replay_session_count_reactnative_sum: int, optional + + :param rum_replay_session_count_sum: Shows the sum of all RUM Session Replay counts over all hours in the current date for the given org (To be introduced on October 1st, 2024). + :type rum_replay_session_count_sum: int, optional + + :param rum_session_count_sum: Shows the sum of all browser RUM lite sessions over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type rum_session_count_sum: int, optional + + :param rum_session_replay_add_on_sum: Shows the sum of all RUM session replay add-on sessions over all hours in the current date for the given org. + :type rum_session_replay_add_on_sum: int, optional + + :param rum_total_session_count_sum: Shows the sum of RUM sessions (browser and mobile) over all hours in the current date for the given org. + :type rum_total_session_count_sum: int, optional + + :param rum_units_sum: Shows the sum of all browser and mobile RUM units over all hours in the current date for the given org (To be deprecated on October 1st, 2024). **Deprecated**. + :type rum_units_sum: int, optional + + :param sca_fargate_count_avg: Shows the average of all Software Composition Analysis Fargate tasks over all hours in the current date for the given org. + :type sca_fargate_count_avg: int, optional + + :param sca_fargate_count_hwm: Shows the sum of the high-water marks of all Software Composition Analysis Fargate tasks over all hours in the current date for the given org. + :type sca_fargate_count_hwm: int, optional + + :param sds_apm_scanned_bytes_sum: Sum of all APM bytes scanned with sensitive data scanner over all hours in the current date for the given org. + :type sds_apm_scanned_bytes_sum: int, optional + + :param sds_events_scanned_bytes_sum: Sum of all event stream events bytes scanned with sensitive data scanner over all hours in the current date for the given org. + :type sds_events_scanned_bytes_sum: int, optional + + :param sds_logs_scanned_bytes_sum: Shows the sum of all bytes scanned of logs usage by the Sensitive Data Scanner over all hours in the current month for the given org. + :type sds_logs_scanned_bytes_sum: int, optional + + :param sds_rum_scanned_bytes_sum: Sum of all RUM bytes scanned with sensitive data scanner over all hours in the current date for the given org. + :type sds_rum_scanned_bytes_sum: int, optional + + :param sds_total_scanned_bytes_sum: Shows the sum of all bytes scanned across all usage types by the Sensitive Data Scanner over all hours in the current month for the given org. + :type sds_total_scanned_bytes_sum: int, optional + + :param serverless_apps_apm_apm_azure_appservice_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Azure App Service instances for the given date and given org. + :type serverless_apps_apm_apm_azure_appservice_instances_avg: int, optional + + :param serverless_apps_apm_apm_azure_azurefunction_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Azure Function instances for the given date and given org. + :type serverless_apps_apm_apm_azure_azurefunction_instances_avg: int, optional + + :param serverless_apps_apm_apm_azure_containerapp_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Azure Container App instances for the given date and given org. + :type serverless_apps_apm_apm_azure_containerapp_instances_avg: int, optional + + :param serverless_apps_apm_apm_fargate_ecs_tasks_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Fargate Elastic Container Service tasks for the given date and given org. + :type serverless_apps_apm_apm_fargate_ecs_tasks_avg: int, optional + + :param serverless_apps_apm_apm_gcp_cloudfunction_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Google Cloud Platform Cloud Function instances for the given date and given org. + :type serverless_apps_apm_apm_gcp_cloudfunction_instances_avg: int, optional + + :param serverless_apps_apm_apm_gcp_cloudrun_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Google Cloud Platform Cloud Run instances for the given date and given org. + :type serverless_apps_apm_apm_gcp_cloudrun_instances_avg: int, optional + + :param serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for Google Kubernetes Engine Autopilot pods for the given date and given org. + :type serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg: int, optional + + :param serverless_apps_apm_avg: Shows the average number of Serverless Apps with Application Performance Monitoring for the given date and given org. + :type serverless_apps_apm_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Azure App Service instances for the given date and given org. + :type serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Azure Function instances for the given date and given org. + :type serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Azure Container App instances for the given date and given org. + :type serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Google Cloud Platform Cloud Function instances for the given date and given org. + :type serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Google Cloud Platform Cloud Run instances for the given date and given org. + :type serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg: int, optional + + :param serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Google Kubernetes Engine Autopilot pods for the given date and given org. + :type serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg: int, optional + + :param serverless_apps_apm_excl_fargate_avg: Shows the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for the given date and given org. + :type serverless_apps_apm_excl_fargate_avg: int, optional + + :param serverless_apps_azure_container_app_instances_avg: Shows the average number of Serverless Apps for Azure Container App instances for the given date and given org. + :type serverless_apps_azure_container_app_instances_avg: int, optional + + :param serverless_apps_azure_count_avg: Shows the average number of Serverless Apps for Azure for the given date and given org. + :type serverless_apps_azure_count_avg: int, optional + + :param serverless_apps_azure_function_app_instances_avg: Shows the average number of Serverless Apps for Azure Function App instances for the given date and given org. + :type serverless_apps_azure_function_app_instances_avg: int, optional + + :param serverless_apps_azure_web_app_instances_avg: Shows the average number of Serverless Apps for Azure Web App instances for the given date and given org. + :type serverless_apps_azure_web_app_instances_avg: int, optional + + :param serverless_apps_dsm_fargate_tasks_avg: Shows the average number of DSM Fargate ECS tasks monitored under Serverless Apps DSM for the given date and given org. + :type serverless_apps_dsm_fargate_tasks_avg: int, optional + + :param serverless_apps_ecs_avg: Shows the average number of Serverless Apps for Elastic Container Service for the given date and given org. + :type serverless_apps_ecs_avg: int, optional + + :param serverless_apps_eks_avg: Shows the average number of Serverless Apps for Elastic Kubernetes Service for the given date and given org. + :type serverless_apps_eks_avg: int, optional + + :param serverless_apps_excl_fargate_avg: Shows the average number of Serverless Apps excluding Fargate for the given date and given org. + :type serverless_apps_excl_fargate_avg: int, optional + + :param serverless_apps_excl_fargate_azure_container_app_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Azure Container App instances for the given date and given org. + :type serverless_apps_excl_fargate_azure_container_app_instances_avg: int, optional + + :param serverless_apps_excl_fargate_azure_function_app_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Azure Function App instances for the given date and given org. + :type serverless_apps_excl_fargate_azure_function_app_instances_avg: int, optional + + :param serverless_apps_excl_fargate_azure_web_app_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Azure Web App instances for the given date and given org. + :type serverless_apps_excl_fargate_azure_web_app_instances_avg: int, optional + + :param serverless_apps_excl_fargate_google_cloud_functions_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Google Cloud Platform Cloud Functions instances for the given date and given org. + :type serverless_apps_excl_fargate_google_cloud_functions_instances_avg: int, optional + + :param serverless_apps_excl_fargate_google_cloud_run_instances_avg: Shows the average number of Serverless Apps excluding Fargate for Google Cloud Platform Cloud Run instances for the given date and given org. + :type serverless_apps_excl_fargate_google_cloud_run_instances_avg: int, optional + + :param serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg: Shows the average number of Serverless Apps excluding Fargate for Google Kubernetes Engine Autopilot pods for the given date and given org. + :type serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg: int, optional + + :param serverless_apps_google_cloud_functions_instances_avg: Shows the average number of Serverless Apps for Google Cloud Platform Cloud Functions instances for the given date and given org. + :type serverless_apps_google_cloud_functions_instances_avg: int, optional + + :param serverless_apps_google_cloud_run_instances_avg: Shows the average number of Serverless Apps for Google Cloud Platform Cloud Run instances for the given date and given org. + :type serverless_apps_google_cloud_run_instances_avg: int, optional + + :param serverless_apps_google_count_avg: Shows the average number of Serverless Apps for Google Cloud for the given date and given org. + :type serverless_apps_google_count_avg: int, optional + + :param serverless_apps_infra_gcp_gke_autopilot_pods_avg: Shows the average number of Serverless Apps for Google Kubernetes Engine Autopilot pods for the given date and given org. + :type serverless_apps_infra_gcp_gke_autopilot_pods_avg: int, optional + + :param serverless_apps_total_count_avg: Shows the average number of Serverless Apps for Azure and Google Cloud for the given date and given org. + :type serverless_apps_total_count_avg: int, optional + + :param siem_12mo_retention_sum: Shows the sum of Cloud SIEM Indexed Logs (12-month retention) over all hours in the current date for the given org. + :type siem_12mo_retention_sum: int, optional + + :param siem_6mo_retention_sum: Shows the sum of Cloud SIEM Indexed Logs (6-month retention) over all hours in the current date for the given org. + :type siem_6mo_retention_sum: int, optional + + :param siem_analyzed_logs_add_on_count_sum: Shows the sum of all log events analyzed by Cloud SIEM over all hours in the current date for the given org. + :type siem_analyzed_logs_add_on_count_sum: int, optional + + :param snmp_device_count_sum: Shows the sum of all Network Device Monitoring devices over all hours in the current date for the given org. + :type snmp_device_count_sum: int, optional + + :param snmp_device_count_top99p: Shows the 99th percentile of all Network Device Monitoring devices over all hours in the current date for the given org. + :type snmp_device_count_top99p: int, optional + + :param synthetics_browser_check_calls_count_sum: Shows the sum of all Synthetic browser tests over all hours in the current date for the given org. + :type synthetics_browser_check_calls_count_sum: int, optional + + :param synthetics_check_calls_count_sum: Shows the sum of all Synthetic API tests over all hours in the current date for the given org. + :type synthetics_check_calls_count_sum: int, optional + + :param synthetics_mobile_test_runs_sum: Shows the sum of all Synthetic mobile application tests over all hours in the current date for the given org. + :type synthetics_mobile_test_runs_sum: int, optional + + :param synthetics_parallel_testing_max_slots_hwm: Shows the high-water mark of used synthetics parallel testing slots over all hours in the current date for the given org. + :type synthetics_parallel_testing_max_slots_hwm: int, optional + + :param trace_search_indexed_events_count_sum: Shows the sum of all Indexed Spans indexed over all hours in the current date for the given org. + :type trace_search_indexed_events_count_sum: int, optional + + :param twol_ingested_events_bytes_sum: Shows the sum of all ingested APM span bytes over all hours in the current date for the given org. + :type twol_ingested_events_bytes_sum: int, optional + + :param universal_service_monitoring_host_top99p: Shows the 99th percentile of all Universal Service Monitoring hosts over all hours in the current date for the given org. + :type universal_service_monitoring_host_top99p: int, optional + + :param vsphere_host_top99p: Shows the 99th percentile of all vSphere hosts over all hours in the current date for the given org. + :type vsphere_host_top99p: int, optional + + :param vuln_management_host_count_top99p: Shows the 99th percentile of all Application Vulnerability Management hosts over all hours in the current date for the given org. + :type vuln_management_host_count_top99p: int, optional + + :param workflow_executions_usage_sum: Sum of all workflows executed over all hours in the current date for the given org. + :type workflow_executions_usage_sum: int, optional + """ + if account_name is not unset: + kwargs["account_name"] = account_name + if account_public_id is not unset: + kwargs["account_public_id"] = account_public_id + if agent_host_top99p is not unset: + kwargs["agent_host_top99p"] = agent_host_top99p + if ai_credits_agent_builder_ai_credits_sum is not unset: + kwargs["ai_credits_agent_builder_ai_credits_sum"] = ai_credits_agent_builder_ai_credits_sum + if ai_credits_bits_assistant_ai_credits_sum is not unset: + kwargs["ai_credits_bits_assistant_ai_credits_sum"] = ai_credits_bits_assistant_ai_credits_sum + if ai_credits_bits_dev_ai_credits_sum is not unset: + kwargs["ai_credits_bits_dev_ai_credits_sum"] = ai_credits_bits_dev_ai_credits_sum + if ai_credits_bits_sre_ai_credits_sum is not unset: + kwargs["ai_credits_bits_sre_ai_credits_sum"] = ai_credits_bits_sre_ai_credits_sum + if ai_credits_sum is not unset: + kwargs["ai_credits_sum"] = ai_credits_sum + if apm_azure_app_service_host_top99p is not unset: + kwargs["apm_azure_app_service_host_top99p"] = apm_azure_app_service_host_top99p + if apm_devsecops_host_top99p is not unset: + kwargs["apm_devsecops_host_top99p"] = apm_devsecops_host_top99p + if apm_enterprise_standalone_hosts_top99p is not unset: + kwargs["apm_enterprise_standalone_hosts_top99p"] = apm_enterprise_standalone_hosts_top99p + if apm_fargate_count_avg is not unset: + kwargs["apm_fargate_count_avg"] = apm_fargate_count_avg + if apm_host_top99p is not unset: + kwargs["apm_host_top99p"] = apm_host_top99p + if apm_pro_standalone_hosts_top99p is not unset: + kwargs["apm_pro_standalone_hosts_top99p"] = apm_pro_standalone_hosts_top99p + if appsec_fargate_count_avg is not unset: + kwargs["appsec_fargate_count_avg"] = appsec_fargate_count_avg + if asm_serverless_sum is not unset: + kwargs["asm_serverless_sum"] = asm_serverless_sum + if audit_logs_lines_indexed_sum is not unset: + kwargs["audit_logs_lines_indexed_sum"] = audit_logs_lines_indexed_sum + if audit_trail_enabled_hwm is not unset: + kwargs["audit_trail_enabled_hwm"] = audit_trail_enabled_hwm + if audit_trail_event_forwarding_events_sum is not unset: + kwargs["audit_trail_event_forwarding_events_sum"] = audit_trail_event_forwarding_events_sum + if avg_profiled_fargate_tasks is not unset: + kwargs["avg_profiled_fargate_tasks"] = avg_profiled_fargate_tasks + if aws_host_top99p is not unset: + kwargs["aws_host_top99p"] = aws_host_top99p + if aws_lambda_func_count is not unset: + kwargs["aws_lambda_func_count"] = aws_lambda_func_count + if aws_lambda_invocations_sum is not unset: + kwargs["aws_lambda_invocations_sum"] = aws_lambda_invocations_sum + if azure_app_service_top99p is not unset: + kwargs["azure_app_service_top99p"] = azure_app_service_top99p + if billable_ingested_bytes_sum is not unset: + kwargs["billable_ingested_bytes_sum"] = billable_ingested_bytes_sum + if bits_ai_investigations_sum is not unset: + kwargs["bits_ai_investigations_sum"] = bits_ai_investigations_sum + if browser_rum_lite_session_count_sum is not unset: + kwargs["browser_rum_lite_session_count_sum"] = browser_rum_lite_session_count_sum + if browser_rum_replay_session_count_sum is not unset: + kwargs["browser_rum_replay_session_count_sum"] = browser_rum_replay_session_count_sum + if browser_rum_units_sum is not unset: + kwargs["browser_rum_units_sum"] = browser_rum_units_sum + if ccm_anthropic_spend_last is not unset: + kwargs["ccm_anthropic_spend_last"] = ccm_anthropic_spend_last + if ccm_aws_spend_last is not unset: + kwargs["ccm_aws_spend_last"] = ccm_aws_spend_last + if ccm_azure_spend_last is not unset: + kwargs["ccm_azure_spend_last"] = ccm_azure_spend_last + if ccm_confluent_spend_last is not unset: + kwargs["ccm_confluent_spend_last"] = ccm_confluent_spend_last + if ccm_databricks_spend_last is not unset: + kwargs["ccm_databricks_spend_last"] = ccm_databricks_spend_last + if ccm_elastic_spend_last is not unset: + kwargs["ccm_elastic_spend_last"] = ccm_elastic_spend_last + if ccm_fastly_spend_last is not unset: + kwargs["ccm_fastly_spend_last"] = ccm_fastly_spend_last + if ccm_gcp_spend_last is not unset: + kwargs["ccm_gcp_spend_last"] = ccm_gcp_spend_last + if ccm_github_spend_last is not unset: + kwargs["ccm_github_spend_last"] = ccm_github_spend_last + if ccm_mongodb_spend_last is not unset: + kwargs["ccm_mongodb_spend_last"] = ccm_mongodb_spend_last + if ccm_oci_spend_last is not unset: + kwargs["ccm_oci_spend_last"] = ccm_oci_spend_last + if ccm_openai_spend_last is not unset: + kwargs["ccm_openai_spend_last"] = ccm_openai_spend_last + if ccm_snowflake_spend_last is not unset: + kwargs["ccm_snowflake_spend_last"] = ccm_snowflake_spend_last + if ccm_spend_monitored_ent_last is not unset: + kwargs["ccm_spend_monitored_ent_last"] = ccm_spend_monitored_ent_last + if ccm_spend_monitored_pro_last is not unset: + kwargs["ccm_spend_monitored_pro_last"] = ccm_spend_monitored_pro_last + if ccm_twilio_spend_last is not unset: + kwargs["ccm_twilio_spend_last"] = ccm_twilio_spend_last + if ci_pipeline_indexed_spans_sum is not unset: + kwargs["ci_pipeline_indexed_spans_sum"] = ci_pipeline_indexed_spans_sum + if ci_test_indexed_spans_sum is not unset: + kwargs["ci_test_indexed_spans_sum"] = ci_test_indexed_spans_sum + if ci_visibility_itr_committers_hwm is not unset: + kwargs["ci_visibility_itr_committers_hwm"] = ci_visibility_itr_committers_hwm + if ci_visibility_pipeline_committers_hwm is not unset: + kwargs["ci_visibility_pipeline_committers_hwm"] = ci_visibility_pipeline_committers_hwm + if ci_visibility_test_committers_hwm is not unset: + kwargs["ci_visibility_test_committers_hwm"] = ci_visibility_test_committers_hwm + if cloud_cost_management_aws_host_count_avg is not unset: + kwargs["cloud_cost_management_aws_host_count_avg"] = cloud_cost_management_aws_host_count_avg + if cloud_cost_management_azure_host_count_avg is not unset: + kwargs["cloud_cost_management_azure_host_count_avg"] = cloud_cost_management_azure_host_count_avg + if cloud_cost_management_gcp_host_count_avg is not unset: + kwargs["cloud_cost_management_gcp_host_count_avg"] = cloud_cost_management_gcp_host_count_avg + if cloud_cost_management_host_count_avg is not unset: + kwargs["cloud_cost_management_host_count_avg"] = cloud_cost_management_host_count_avg + if cloud_cost_management_oci_host_count_avg is not unset: + kwargs["cloud_cost_management_oci_host_count_avg"] = cloud_cost_management_oci_host_count_avg + if cloud_siem_events_sum is not unset: + kwargs["cloud_siem_events_sum"] = cloud_siem_events_sum + if cloud_siem_indexed_logs_sum is not unset: + kwargs["cloud_siem_indexed_logs_sum"] = cloud_siem_indexed_logs_sum + if code_analysis_sa_committers_hwm is not unset: + kwargs["code_analysis_sa_committers_hwm"] = code_analysis_sa_committers_hwm + if code_analysis_sca_committers_hwm is not unset: + kwargs["code_analysis_sca_committers_hwm"] = code_analysis_sca_committers_hwm + if code_security_host_top99p is not unset: + kwargs["code_security_host_top99p"] = code_security_host_top99p + if container_avg is not unset: + kwargs["container_avg"] = container_avg + if container_excl_agent_avg is not unset: + kwargs["container_excl_agent_avg"] = container_excl_agent_avg + if container_hwm is not unset: + kwargs["container_hwm"] = container_hwm + if csm_container_enterprise_compliance_count_sum is not unset: + kwargs["csm_container_enterprise_compliance_count_sum"] = csm_container_enterprise_compliance_count_sum + if csm_container_enterprise_cws_count_sum is not unset: + kwargs["csm_container_enterprise_cws_count_sum"] = csm_container_enterprise_cws_count_sum + if csm_container_enterprise_total_count_sum is not unset: + kwargs["csm_container_enterprise_total_count_sum"] = csm_container_enterprise_total_count_sum + if csm_host_enterprise_aas_host_count_top99p is not unset: + kwargs["csm_host_enterprise_aas_host_count_top99p"] = csm_host_enterprise_aas_host_count_top99p + if csm_host_enterprise_aws_host_count_top99p is not unset: + kwargs["csm_host_enterprise_aws_host_count_top99p"] = csm_host_enterprise_aws_host_count_top99p + if csm_host_enterprise_azure_host_count_top99p is not unset: + kwargs["csm_host_enterprise_azure_host_count_top99p"] = csm_host_enterprise_azure_host_count_top99p + if csm_host_enterprise_compliance_host_count_top99p is not unset: + kwargs["csm_host_enterprise_compliance_host_count_top99p"] = csm_host_enterprise_compliance_host_count_top99p + if csm_host_enterprise_cws_host_count_top99p is not unset: + kwargs["csm_host_enterprise_cws_host_count_top99p"] = csm_host_enterprise_cws_host_count_top99p + if csm_host_enterprise_gcp_host_count_top99p is not unset: + kwargs["csm_host_enterprise_gcp_host_count_top99p"] = csm_host_enterprise_gcp_host_count_top99p + if csm_host_enterprise_oci_host_count_top99p is not unset: + kwargs["csm_host_enterprise_oci_host_count_top99p"] = csm_host_enterprise_oci_host_count_top99p + if csm_host_enterprise_total_host_count_top99p is not unset: + kwargs["csm_host_enterprise_total_host_count_top99p"] = csm_host_enterprise_total_host_count_top99p + if csm_host_pro_hosts_agentless_scanners_sum is not unset: + kwargs["csm_host_pro_hosts_agentless_scanners_sum"] = csm_host_pro_hosts_agentless_scanners_sum + if csm_host_pro_hosts_agentless_scanners_top99p is not unset: + kwargs["csm_host_pro_hosts_agentless_scanners_top99p"] = csm_host_pro_hosts_agentless_scanners_top99p + if csm_host_pro_oci_host_count_top99p is not unset: + kwargs["csm_host_pro_oci_host_count_top99p"] = csm_host_pro_oci_host_count_top99p + if cspm_aas_host_top99p is not unset: + kwargs["cspm_aas_host_top99p"] = cspm_aas_host_top99p + if cspm_aws_host_top99p is not unset: + kwargs["cspm_aws_host_top99p"] = cspm_aws_host_top99p + if cspm_azure_host_top99p is not unset: + kwargs["cspm_azure_host_top99p"] = cspm_azure_host_top99p + if cspm_container_avg is not unset: + kwargs["cspm_container_avg"] = cspm_container_avg + if cspm_container_hwm is not unset: + kwargs["cspm_container_hwm"] = cspm_container_hwm + if cspm_gcp_host_top99p is not unset: + kwargs["cspm_gcp_host_top99p"] = cspm_gcp_host_top99p + if cspm_host_top99p is not unset: + kwargs["cspm_host_top99p"] = cspm_host_top99p + if cspm_hosts_agentless_scanners_sum is not unset: + kwargs["cspm_hosts_agentless_scanners_sum"] = cspm_hosts_agentless_scanners_sum + if cspm_hosts_agentless_scanners_top99p is not unset: + kwargs["cspm_hosts_agentless_scanners_top99p"] = cspm_hosts_agentless_scanners_top99p + if custom_historical_ts_avg is not unset: + kwargs["custom_historical_ts_avg"] = custom_historical_ts_avg + if custom_live_ts_avg is not unset: + kwargs["custom_live_ts_avg"] = custom_live_ts_avg + if custom_ts_avg is not unset: + kwargs["custom_ts_avg"] = custom_ts_avg + if cws_container_count_avg is not unset: + kwargs["cws_container_count_avg"] = cws_container_count_avg + if cws_fargate_task_avg is not unset: + kwargs["cws_fargate_task_avg"] = cws_fargate_task_avg + if cws_host_top99p is not unset: + kwargs["cws_host_top99p"] = cws_host_top99p + if data_jobs_monitoring_host_hr_sum is not unset: + kwargs["data_jobs_monitoring_host_hr_sum"] = data_jobs_monitoring_host_hr_sum + if data_stream_monitoring_host_count_sum is not unset: + kwargs["data_stream_monitoring_host_count_sum"] = data_stream_monitoring_host_count_sum + if data_stream_monitoring_host_count_top99p is not unset: + kwargs["data_stream_monitoring_host_count_top99p"] = data_stream_monitoring_host_count_top99p + if dbm_host_top99p_sum is not unset: + kwargs["dbm_host_top99p_sum"] = dbm_host_top99p_sum + if dbm_queries_avg_sum is not unset: + kwargs["dbm_queries_avg_sum"] = dbm_queries_avg_sum + if do_jobs_monitoring_orchestrators_job_hours_sum is not unset: + kwargs["do_jobs_monitoring_orchestrators_job_hours_sum"] = do_jobs_monitoring_orchestrators_job_hours_sum + if eph_infra_host_agent_sum is not unset: + kwargs["eph_infra_host_agent_sum"] = eph_infra_host_agent_sum + if eph_infra_host_alibaba_sum is not unset: + kwargs["eph_infra_host_alibaba_sum"] = eph_infra_host_alibaba_sum + if eph_infra_host_aws_sum is not unset: + kwargs["eph_infra_host_aws_sum"] = eph_infra_host_aws_sum + if eph_infra_host_azure_sum is not unset: + kwargs["eph_infra_host_azure_sum"] = eph_infra_host_azure_sum + if eph_infra_host_basic_infra_basic_agent_sum is not unset: + kwargs["eph_infra_host_basic_infra_basic_agent_sum"] = eph_infra_host_basic_infra_basic_agent_sum + if eph_infra_host_basic_infra_basic_vsphere_sum is not unset: + kwargs["eph_infra_host_basic_infra_basic_vsphere_sum"] = eph_infra_host_basic_infra_basic_vsphere_sum + if eph_infra_host_basic_sum is not unset: + kwargs["eph_infra_host_basic_sum"] = eph_infra_host_basic_sum + if eph_infra_host_ent_sum is not unset: + kwargs["eph_infra_host_ent_sum"] = eph_infra_host_ent_sum + if eph_infra_host_gcp_sum is not unset: + kwargs["eph_infra_host_gcp_sum"] = eph_infra_host_gcp_sum + if eph_infra_host_heroku_sum is not unset: + kwargs["eph_infra_host_heroku_sum"] = eph_infra_host_heroku_sum + if eph_infra_host_only_aas_sum is not unset: + kwargs["eph_infra_host_only_aas_sum"] = eph_infra_host_only_aas_sum + if eph_infra_host_only_vsphere_sum is not unset: + kwargs["eph_infra_host_only_vsphere_sum"] = eph_infra_host_only_vsphere_sum + if eph_infra_host_opentelemetry_apm_sum is not unset: + kwargs["eph_infra_host_opentelemetry_apm_sum"] = eph_infra_host_opentelemetry_apm_sum + if eph_infra_host_opentelemetry_sum is not unset: + kwargs["eph_infra_host_opentelemetry_sum"] = eph_infra_host_opentelemetry_sum + if eph_infra_host_pro_sum is not unset: + kwargs["eph_infra_host_pro_sum"] = eph_infra_host_pro_sum + if eph_infra_host_proplus_sum is not unset: + kwargs["eph_infra_host_proplus_sum"] = eph_infra_host_proplus_sum + if eph_infra_host_proxmox_sum is not unset: + kwargs["eph_infra_host_proxmox_sum"] = eph_infra_host_proxmox_sum + if error_tracking_apm_error_events_sum is not unset: + kwargs["error_tracking_apm_error_events_sum"] = error_tracking_apm_error_events_sum + if error_tracking_error_events_sum is not unset: + kwargs["error_tracking_error_events_sum"] = error_tracking_error_events_sum + if error_tracking_events_sum is not unset: + kwargs["error_tracking_events_sum"] = error_tracking_events_sum + if error_tracking_rum_error_events_sum is not unset: + kwargs["error_tracking_rum_error_events_sum"] = error_tracking_rum_error_events_sum + if event_management_correlation_correlated_events_sum is not unset: + kwargs["event_management_correlation_correlated_events_sum"] = event_management_correlation_correlated_events_sum + if event_management_correlation_correlated_related_events_sum is not unset: + kwargs["event_management_correlation_correlated_related_events_sum"] = event_management_correlation_correlated_related_events_sum + if event_management_correlation_sum is not unset: + kwargs["event_management_correlation_sum"] = event_management_correlation_sum + if fargate_container_profiler_profiling_fargate_avg is not unset: + kwargs["fargate_container_profiler_profiling_fargate_avg"] = fargate_container_profiler_profiling_fargate_avg + if fargate_container_profiler_profiling_fargate_eks_avg is not unset: + kwargs["fargate_container_profiler_profiling_fargate_eks_avg"] = fargate_container_profiler_profiling_fargate_eks_avg + if fargate_tasks_count_avg is not unset: + kwargs["fargate_tasks_count_avg"] = fargate_tasks_count_avg + if fargate_tasks_count_hwm is not unset: + kwargs["fargate_tasks_count_hwm"] = fargate_tasks_count_hwm + if feature_flags_config_requests_sum is not unset: + kwargs["feature_flags_config_requests_sum"] = feature_flags_config_requests_sum + if flex_logs_compute_large_avg is not unset: + kwargs["flex_logs_compute_large_avg"] = flex_logs_compute_large_avg + if flex_logs_compute_medium_avg is not unset: + kwargs["flex_logs_compute_medium_avg"] = flex_logs_compute_medium_avg + if flex_logs_compute_small_avg is not unset: + kwargs["flex_logs_compute_small_avg"] = flex_logs_compute_small_avg + if flex_logs_compute_xlarge_avg is not unset: + kwargs["flex_logs_compute_xlarge_avg"] = flex_logs_compute_xlarge_avg + if flex_logs_compute_xsmall_avg is not unset: + kwargs["flex_logs_compute_xsmall_avg"] = flex_logs_compute_xsmall_avg + if flex_logs_starter_avg is not unset: + kwargs["flex_logs_starter_avg"] = flex_logs_starter_avg + if flex_logs_starter_storage_index_avg is not unset: + kwargs["flex_logs_starter_storage_index_avg"] = flex_logs_starter_storage_index_avg + if flex_logs_starter_storage_retention_adjustment_avg is not unset: + kwargs["flex_logs_starter_storage_retention_adjustment_avg"] = flex_logs_starter_storage_retention_adjustment_avg + if flex_stored_logs_avg is not unset: + kwargs["flex_stored_logs_avg"] = flex_stored_logs_avg + if forwarding_events_bytes_sum is not unset: + kwargs["forwarding_events_bytes_sum"] = forwarding_events_bytes_sum + if gcp_host_top99p is not unset: + kwargs["gcp_host_top99p"] = gcp_host_top99p + if heroku_host_top99p is not unset: + kwargs["heroku_host_top99p"] = heroku_host_top99p + if id is not unset: + kwargs["id"] = id + if incident_management_monthly_active_users_hwm is not unset: + kwargs["incident_management_monthly_active_users_hwm"] = incident_management_monthly_active_users_hwm + if incident_management_seats_hwm is not unset: + kwargs["incident_management_seats_hwm"] = incident_management_seats_hwm + if indexed_events_count_sum is not unset: + kwargs["indexed_events_count_sum"] = indexed_events_count_sum + if indexed_points_sum is not unset: + kwargs["indexed_points_sum"] = indexed_points_sum + if infra_cpu_avg is not unset: + kwargs["infra_cpu_avg"] = infra_cpu_avg + if infra_cpu_default_infra_host_vcpu_agent_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_avg"] = infra_cpu_default_infra_host_vcpu_agent_avg + if infra_cpu_default_infra_host_vcpu_agent_basic_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_basic_avg"] = infra_cpu_default_infra_host_vcpu_agent_basic_avg + if infra_cpu_default_infra_host_vcpu_agent_basic_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_basic_sum"] = infra_cpu_default_infra_host_vcpu_agent_basic_sum + if infra_cpu_default_infra_host_vcpu_agent_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_sum"] = infra_cpu_default_infra_host_vcpu_agent_sum + if infra_cpu_default_infra_host_vcpu_aws_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_aws_avg"] = infra_cpu_default_infra_host_vcpu_aws_avg + if infra_cpu_default_infra_host_vcpu_aws_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_aws_sum"] = infra_cpu_default_infra_host_vcpu_aws_sum + if infra_cpu_default_infra_host_vcpu_azure_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_azure_avg"] = infra_cpu_default_infra_host_vcpu_azure_avg + if infra_cpu_default_infra_host_vcpu_azure_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_azure_sum"] = infra_cpu_default_infra_host_vcpu_azure_sum + if infra_cpu_default_infra_host_vcpu_gcp_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_gcp_avg"] = infra_cpu_default_infra_host_vcpu_gcp_avg + if infra_cpu_default_infra_host_vcpu_gcp_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_gcp_sum"] = infra_cpu_default_infra_host_vcpu_gcp_sum + if infra_cpu_default_infra_host_vcpu_nutanix_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_avg"] = infra_cpu_default_infra_host_vcpu_nutanix_avg + if infra_cpu_default_infra_host_vcpu_nutanix_basic_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_basic_avg"] = infra_cpu_default_infra_host_vcpu_nutanix_basic_avg + if infra_cpu_default_infra_host_vcpu_nutanix_basic_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_basic_sum"] = infra_cpu_default_infra_host_vcpu_nutanix_basic_sum + if infra_cpu_default_infra_host_vcpu_nutanix_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_sum"] = infra_cpu_default_infra_host_vcpu_nutanix_sum + if infra_cpu_default_infra_host_vcpu_opentelemetry_avg is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_opentelemetry_avg"] = infra_cpu_default_infra_host_vcpu_opentelemetry_avg + if infra_cpu_default_infra_host_vcpu_opentelemetry_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_opentelemetry_sum"] = infra_cpu_default_infra_host_vcpu_opentelemetry_sum + if infra_cpu_observed_infra_host_vcpu_agent_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_agent_avg"] = infra_cpu_observed_infra_host_vcpu_agent_avg + if infra_cpu_observed_infra_host_vcpu_agent_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_agent_sum"] = infra_cpu_observed_infra_host_vcpu_agent_sum + if infra_cpu_observed_infra_host_vcpu_aws_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_aws_avg"] = infra_cpu_observed_infra_host_vcpu_aws_avg + if infra_cpu_observed_infra_host_vcpu_aws_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_aws_sum"] = infra_cpu_observed_infra_host_vcpu_aws_sum + if infra_cpu_observed_infra_host_vcpu_azure_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_azure_avg"] = infra_cpu_observed_infra_host_vcpu_azure_avg + if infra_cpu_observed_infra_host_vcpu_azure_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_azure_sum"] = infra_cpu_observed_infra_host_vcpu_azure_sum + if infra_cpu_observed_infra_host_vcpu_gcp_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_gcp_avg"] = infra_cpu_observed_infra_host_vcpu_gcp_avg + if infra_cpu_observed_infra_host_vcpu_gcp_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_gcp_sum"] = infra_cpu_observed_infra_host_vcpu_gcp_sum + if infra_cpu_observed_infra_host_vcpu_nutanix_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_nutanix_avg"] = infra_cpu_observed_infra_host_vcpu_nutanix_avg + if infra_cpu_observed_infra_host_vcpu_nutanix_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_nutanix_sum"] = infra_cpu_observed_infra_host_vcpu_nutanix_sum + if infra_cpu_observed_infra_host_vcpu_opentelemetry_avg is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_opentelemetry_avg"] = infra_cpu_observed_infra_host_vcpu_opentelemetry_avg + if infra_cpu_observed_infra_host_vcpu_opentelemetry_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_opentelemetry_sum"] = infra_cpu_observed_infra_host_vcpu_opentelemetry_sum + if infra_cpu_sum is not unset: + kwargs["infra_cpu_sum"] = infra_cpu_sum + if infra_edge_monitoring_devices_top99p is not unset: + kwargs["infra_edge_monitoring_devices_top99p"] = infra_edge_monitoring_devices_top99p + if infra_host_basic_infra_basic_agent_top99p is not unset: + kwargs["infra_host_basic_infra_basic_agent_top99p"] = infra_host_basic_infra_basic_agent_top99p + if infra_host_basic_infra_basic_vsphere_top99p is not unset: + kwargs["infra_host_basic_infra_basic_vsphere_top99p"] = infra_host_basic_infra_basic_vsphere_top99p + if infra_host_basic_top99p is not unset: + kwargs["infra_host_basic_top99p"] = infra_host_basic_top99p + if infra_host_top99p is not unset: + kwargs["infra_host_top99p"] = infra_host_top99p + if infra_storage_mgmt_objects_count_avg is not unset: + kwargs["infra_storage_mgmt_objects_count_avg"] = infra_storage_mgmt_objects_count_avg + if ingest_points_sum is not unset: + kwargs["ingest_points_sum"] = ingest_points_sum + if ingested_events_bytes_sum is not unset: + kwargs["ingested_events_bytes_sum"] = ingested_events_bytes_sum + if iot_apm_host_sum is not unset: + kwargs["iot_apm_host_sum"] = iot_apm_host_sum + if iot_apm_host_top99p is not unset: + kwargs["iot_apm_host_top99p"] = iot_apm_host_top99p + if iot_device_agg_sum is not unset: + kwargs["iot_device_agg_sum"] = iot_device_agg_sum + if iot_device_top99p_sum is not unset: + kwargs["iot_device_top99p_sum"] = iot_device_top99p_sum + if llm_observability_15day_retention_spans_sum is not unset: + kwargs["llm_observability_15day_retention_spans_sum"] = llm_observability_15day_retention_spans_sum + if llm_observability_30day_retention_spans_sum is not unset: + kwargs["llm_observability_30day_retention_spans_sum"] = llm_observability_30day_retention_spans_sum + if llm_observability_60day_retention_spans_sum is not unset: + kwargs["llm_observability_60day_retention_spans_sum"] = llm_observability_60day_retention_spans_sum + if llm_observability_90day_retention_spans_sum is not unset: + kwargs["llm_observability_90day_retention_spans_sum"] = llm_observability_90day_retention_spans_sum + if llm_observability_min_spend_sum is not unset: + kwargs["llm_observability_min_spend_sum"] = llm_observability_min_spend_sum + if llm_observability_sum is not unset: + kwargs["llm_observability_sum"] = llm_observability_sum + if logs_archive_search_gb_scanned_sum is not unset: + kwargs["logs_archive_search_gb_scanned_sum"] = logs_archive_search_gb_scanned_sum + if metric_names_sum is not unset: + kwargs["metric_names_sum"] = metric_names_sum + if mobile_rum_lite_session_count_sum is not unset: + kwargs["mobile_rum_lite_session_count_sum"] = mobile_rum_lite_session_count_sum + if mobile_rum_session_count_android_sum is not unset: + kwargs["mobile_rum_session_count_android_sum"] = mobile_rum_session_count_android_sum + if mobile_rum_session_count_flutter_sum is not unset: + kwargs["mobile_rum_session_count_flutter_sum"] = mobile_rum_session_count_flutter_sum + if mobile_rum_session_count_ios_sum is not unset: + kwargs["mobile_rum_session_count_ios_sum"] = mobile_rum_session_count_ios_sum + if mobile_rum_session_count_reactnative_sum is not unset: + kwargs["mobile_rum_session_count_reactnative_sum"] = mobile_rum_session_count_reactnative_sum + if mobile_rum_session_count_roku_sum is not unset: + kwargs["mobile_rum_session_count_roku_sum"] = mobile_rum_session_count_roku_sum + if mobile_rum_session_count_sum is not unset: + kwargs["mobile_rum_session_count_sum"] = mobile_rum_session_count_sum + if mobile_rum_units_sum is not unset: + kwargs["mobile_rum_units_sum"] = mobile_rum_units_sum + if name is not unset: + kwargs["name"] = name + if ndm_netflow_events_sum is not unset: + kwargs["ndm_netflow_events_sum"] = ndm_netflow_events_sum + if netflow_indexed_events_count_sum is not unset: + kwargs["netflow_indexed_events_count_sum"] = netflow_indexed_events_count_sum + if network_device_wireless_top99p is not unset: + kwargs["network_device_wireless_top99p"] = network_device_wireless_top99p + if network_path_sum is not unset: + kwargs["network_path_sum"] = network_path_sum + if npm_host_top99p is not unset: + kwargs["npm_host_top99p"] = npm_host_top99p + if observability_pipelines_bytes_processed_sum is not unset: + kwargs["observability_pipelines_bytes_processed_sum"] = observability_pipelines_bytes_processed_sum + if oci_host_sum is not unset: + kwargs["oci_host_sum"] = oci_host_sum + if oci_host_top99p is not unset: + kwargs["oci_host_top99p"] = oci_host_top99p + if on_call_seat_hwm is not unset: + kwargs["on_call_seat_hwm"] = on_call_seat_hwm + if online_archive_events_count_sum is not unset: + kwargs["online_archive_events_count_sum"] = online_archive_events_count_sum + if opentelemetry_apm_host_top99p is not unset: + kwargs["opentelemetry_apm_host_top99p"] = opentelemetry_apm_host_top99p + if opentelemetry_host_top99p is not unset: + kwargs["opentelemetry_host_top99p"] = opentelemetry_host_top99p + if product_analytics_sum is not unset: + kwargs["product_analytics_sum"] = product_analytics_sum + if profiling_aas_count_top99p is not unset: + kwargs["profiling_aas_count_top99p"] = profiling_aas_count_top99p + if profiling_host_top99p is not unset: + kwargs["profiling_host_top99p"] = profiling_host_top99p + if proxmox_host_sum is not unset: + kwargs["proxmox_host_sum"] = proxmox_host_sum + if proxmox_host_top99p is not unset: + kwargs["proxmox_host_top99p"] = proxmox_host_top99p + if public_id is not unset: + kwargs["public_id"] = public_id + if published_app_hwm is not unset: + kwargs["published_app_hwm"] = published_app_hwm + if region is not unset: + kwargs["region"] = region + if rum_browser_and_mobile_session_count is not unset: + kwargs["rum_browser_and_mobile_session_count"] = rum_browser_and_mobile_session_count + if rum_browser_legacy_session_count_sum is not unset: + kwargs["rum_browser_legacy_session_count_sum"] = rum_browser_legacy_session_count_sum + if rum_browser_lite_session_count_sum is not unset: + kwargs["rum_browser_lite_session_count_sum"] = rum_browser_lite_session_count_sum + if rum_browser_replay_session_count_sum is not unset: + kwargs["rum_browser_replay_session_count_sum"] = rum_browser_replay_session_count_sum + if rum_indexed_sessions_sum is not unset: + kwargs["rum_indexed_sessions_sum"] = rum_indexed_sessions_sum + if rum_ingested_sessions_sum is not unset: + kwargs["rum_ingested_sessions_sum"] = rum_ingested_sessions_sum + if rum_lite_session_count_sum is not unset: + kwargs["rum_lite_session_count_sum"] = rum_lite_session_count_sum + if rum_mobile_legacy_session_count_android_sum is not unset: + kwargs["rum_mobile_legacy_session_count_android_sum"] = rum_mobile_legacy_session_count_android_sum + if rum_mobile_legacy_session_count_flutter_sum is not unset: + kwargs["rum_mobile_legacy_session_count_flutter_sum"] = rum_mobile_legacy_session_count_flutter_sum + if rum_mobile_legacy_session_count_ios_sum is not unset: + kwargs["rum_mobile_legacy_session_count_ios_sum"] = rum_mobile_legacy_session_count_ios_sum + if rum_mobile_legacy_session_count_reactnative_sum is not unset: + kwargs["rum_mobile_legacy_session_count_reactnative_sum"] = rum_mobile_legacy_session_count_reactnative_sum + if rum_mobile_legacy_session_count_roku_sum is not unset: + kwargs["rum_mobile_legacy_session_count_roku_sum"] = rum_mobile_legacy_session_count_roku_sum + if rum_mobile_lite_session_count_android_sum is not unset: + kwargs["rum_mobile_lite_session_count_android_sum"] = rum_mobile_lite_session_count_android_sum + if rum_mobile_lite_session_count_flutter_sum is not unset: + kwargs["rum_mobile_lite_session_count_flutter_sum"] = rum_mobile_lite_session_count_flutter_sum + if rum_mobile_lite_session_count_ios_sum is not unset: + kwargs["rum_mobile_lite_session_count_ios_sum"] = rum_mobile_lite_session_count_ios_sum + if rum_mobile_lite_session_count_kotlinmultiplatform_sum is not unset: + kwargs["rum_mobile_lite_session_count_kotlinmultiplatform_sum"] = rum_mobile_lite_session_count_kotlinmultiplatform_sum + if rum_mobile_lite_session_count_reactnative_sum is not unset: + kwargs["rum_mobile_lite_session_count_reactnative_sum"] = rum_mobile_lite_session_count_reactnative_sum + if rum_mobile_lite_session_count_roku_sum is not unset: + kwargs["rum_mobile_lite_session_count_roku_sum"] = rum_mobile_lite_session_count_roku_sum + if rum_mobile_lite_session_count_unity_sum is not unset: + kwargs["rum_mobile_lite_session_count_unity_sum"] = rum_mobile_lite_session_count_unity_sum + if rum_mobile_replay_session_count_android_sum is not unset: + kwargs["rum_mobile_replay_session_count_android_sum"] = rum_mobile_replay_session_count_android_sum + if rum_mobile_replay_session_count_ios_sum is not unset: + kwargs["rum_mobile_replay_session_count_ios_sum"] = rum_mobile_replay_session_count_ios_sum + if rum_mobile_replay_session_count_kotlinmultiplatform_sum is not unset: + kwargs["rum_mobile_replay_session_count_kotlinmultiplatform_sum"] = rum_mobile_replay_session_count_kotlinmultiplatform_sum + if rum_mobile_replay_session_count_reactnative_sum is not unset: + kwargs["rum_mobile_replay_session_count_reactnative_sum"] = rum_mobile_replay_session_count_reactnative_sum + if rum_replay_session_count_sum is not unset: + kwargs["rum_replay_session_count_sum"] = rum_replay_session_count_sum + if rum_session_count_sum is not unset: + kwargs["rum_session_count_sum"] = rum_session_count_sum + if rum_session_replay_add_on_sum is not unset: + kwargs["rum_session_replay_add_on_sum"] = rum_session_replay_add_on_sum + if rum_total_session_count_sum is not unset: + kwargs["rum_total_session_count_sum"] = rum_total_session_count_sum + if rum_units_sum is not unset: + kwargs["rum_units_sum"] = rum_units_sum + if sca_fargate_count_avg is not unset: + kwargs["sca_fargate_count_avg"] = sca_fargate_count_avg + if sca_fargate_count_hwm is not unset: + kwargs["sca_fargate_count_hwm"] = sca_fargate_count_hwm + if sds_apm_scanned_bytes_sum is not unset: + kwargs["sds_apm_scanned_bytes_sum"] = sds_apm_scanned_bytes_sum + if sds_events_scanned_bytes_sum is not unset: + kwargs["sds_events_scanned_bytes_sum"] = sds_events_scanned_bytes_sum + if sds_logs_scanned_bytes_sum is not unset: + kwargs["sds_logs_scanned_bytes_sum"] = sds_logs_scanned_bytes_sum + if sds_rum_scanned_bytes_sum is not unset: + kwargs["sds_rum_scanned_bytes_sum"] = sds_rum_scanned_bytes_sum + if sds_total_scanned_bytes_sum is not unset: + kwargs["sds_total_scanned_bytes_sum"] = sds_total_scanned_bytes_sum + if serverless_apps_apm_apm_azure_appservice_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_azure_appservice_instances_avg"] = serverless_apps_apm_apm_azure_appservice_instances_avg + if serverless_apps_apm_apm_azure_azurefunction_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_azure_azurefunction_instances_avg"] = serverless_apps_apm_apm_azure_azurefunction_instances_avg + if serverless_apps_apm_apm_azure_containerapp_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_azure_containerapp_instances_avg"] = serverless_apps_apm_apm_azure_containerapp_instances_avg + if serverless_apps_apm_apm_fargate_ecs_tasks_avg is not unset: + kwargs["serverless_apps_apm_apm_fargate_ecs_tasks_avg"] = serverless_apps_apm_apm_fargate_ecs_tasks_avg + if serverless_apps_apm_apm_gcp_cloudfunction_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_gcp_cloudfunction_instances_avg"] = serverless_apps_apm_apm_gcp_cloudfunction_instances_avg + if serverless_apps_apm_apm_gcp_cloudrun_instances_avg is not unset: + kwargs["serverless_apps_apm_apm_gcp_cloudrun_instances_avg"] = serverless_apps_apm_apm_gcp_cloudrun_instances_avg + if serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg is not unset: + kwargs["serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg"] = serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg + if serverless_apps_apm_avg is not unset: + kwargs["serverless_apps_apm_avg"] = serverless_apps_apm_avg + if serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg"] = serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg + if serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg"] = serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg + if serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg"] = serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg + if serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg"] = serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg + if serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg"] = serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg + if serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg"] = serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg + if serverless_apps_apm_excl_fargate_avg is not unset: + kwargs["serverless_apps_apm_excl_fargate_avg"] = serverless_apps_apm_excl_fargate_avg + if serverless_apps_azure_container_app_instances_avg is not unset: + kwargs["serverless_apps_azure_container_app_instances_avg"] = serverless_apps_azure_container_app_instances_avg + if serverless_apps_azure_count_avg is not unset: + kwargs["serverless_apps_azure_count_avg"] = serverless_apps_azure_count_avg + if serverless_apps_azure_function_app_instances_avg is not unset: + kwargs["serverless_apps_azure_function_app_instances_avg"] = serverless_apps_azure_function_app_instances_avg + if serverless_apps_azure_web_app_instances_avg is not unset: + kwargs["serverless_apps_azure_web_app_instances_avg"] = serverless_apps_azure_web_app_instances_avg + if serverless_apps_dsm_fargate_tasks_avg is not unset: + kwargs["serverless_apps_dsm_fargate_tasks_avg"] = serverless_apps_dsm_fargate_tasks_avg + if serverless_apps_ecs_avg is not unset: + kwargs["serverless_apps_ecs_avg"] = serverless_apps_ecs_avg + if serverless_apps_eks_avg is not unset: + kwargs["serverless_apps_eks_avg"] = serverless_apps_eks_avg + if serverless_apps_excl_fargate_avg is not unset: + kwargs["serverless_apps_excl_fargate_avg"] = serverless_apps_excl_fargate_avg + if serverless_apps_excl_fargate_azure_container_app_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_azure_container_app_instances_avg"] = serverless_apps_excl_fargate_azure_container_app_instances_avg + if serverless_apps_excl_fargate_azure_function_app_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_azure_function_app_instances_avg"] = serverless_apps_excl_fargate_azure_function_app_instances_avg + if serverless_apps_excl_fargate_azure_web_app_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_azure_web_app_instances_avg"] = serverless_apps_excl_fargate_azure_web_app_instances_avg + if serverless_apps_excl_fargate_google_cloud_functions_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_google_cloud_functions_instances_avg"] = serverless_apps_excl_fargate_google_cloud_functions_instances_avg + if serverless_apps_excl_fargate_google_cloud_run_instances_avg is not unset: + kwargs["serverless_apps_excl_fargate_google_cloud_run_instances_avg"] = serverless_apps_excl_fargate_google_cloud_run_instances_avg + if serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg is not unset: + kwargs["serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg"] = serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg + if serverless_apps_google_cloud_functions_instances_avg is not unset: + kwargs["serverless_apps_google_cloud_functions_instances_avg"] = serverless_apps_google_cloud_functions_instances_avg + if serverless_apps_google_cloud_run_instances_avg is not unset: + kwargs["serverless_apps_google_cloud_run_instances_avg"] = serverless_apps_google_cloud_run_instances_avg + if serverless_apps_google_count_avg is not unset: + kwargs["serverless_apps_google_count_avg"] = serverless_apps_google_count_avg + if serverless_apps_infra_gcp_gke_autopilot_pods_avg is not unset: + kwargs["serverless_apps_infra_gcp_gke_autopilot_pods_avg"] = serverless_apps_infra_gcp_gke_autopilot_pods_avg + if serverless_apps_total_count_avg is not unset: + kwargs["serverless_apps_total_count_avg"] = serverless_apps_total_count_avg + if siem_12mo_retention_sum is not unset: + kwargs["siem_12mo_retention_sum"] = siem_12mo_retention_sum + if siem_6mo_retention_sum is not unset: + kwargs["siem_6mo_retention_sum"] = siem_6mo_retention_sum + if siem_analyzed_logs_add_on_count_sum is not unset: + kwargs["siem_analyzed_logs_add_on_count_sum"] = siem_analyzed_logs_add_on_count_sum + if snmp_device_count_sum is not unset: + kwargs["snmp_device_count_sum"] = snmp_device_count_sum + if snmp_device_count_top99p is not unset: + kwargs["snmp_device_count_top99p"] = snmp_device_count_top99p + if synthetics_browser_check_calls_count_sum is not unset: + kwargs["synthetics_browser_check_calls_count_sum"] = synthetics_browser_check_calls_count_sum + if synthetics_check_calls_count_sum is not unset: + kwargs["synthetics_check_calls_count_sum"] = synthetics_check_calls_count_sum + if synthetics_mobile_test_runs_sum is not unset: + kwargs["synthetics_mobile_test_runs_sum"] = synthetics_mobile_test_runs_sum + if synthetics_parallel_testing_max_slots_hwm is not unset: + kwargs["synthetics_parallel_testing_max_slots_hwm"] = synthetics_parallel_testing_max_slots_hwm + if trace_search_indexed_events_count_sum is not unset: + kwargs["trace_search_indexed_events_count_sum"] = trace_search_indexed_events_count_sum + if twol_ingested_events_bytes_sum is not unset: + kwargs["twol_ingested_events_bytes_sum"] = twol_ingested_events_bytes_sum + if universal_service_monitoring_host_top99p is not unset: + kwargs["universal_service_monitoring_host_top99p"] = universal_service_monitoring_host_top99p + if vsphere_host_top99p is not unset: + kwargs["vsphere_host_top99p"] = vsphere_host_top99p + if vuln_management_host_count_top99p is not unset: + kwargs["vuln_management_host_count_top99p"] = vuln_management_host_count_top99p + if workflow_executions_usage_sum is not unset: + kwargs["workflow_executions_usage_sum"] = workflow_executions_usage_sum + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_summary_response.py b/datadog_api_client/v1/model/usage_summary_response.py new file mode 100644 index 0000000000..78f10d4162 --- /dev/null +++ b/datadog_api_client/v1/model/usage_summary_response.py @@ -0,0 +1,2238 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.logs_by_retention import LogsByRetention + from datadog_api_client.v1.model.usage_summary_date import UsageSummaryDate + +class UsageSummaryResponse(ModelNormal): + # Cross-SDK semantic marker. In Python, typed fields are already accessible via + # bracket notation (model["key"]) through _data_store, so no runtime change is needed. + _keep_typed_in_additional_properties = True + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.logs_by_retention import LogsByRetention + from datadog_api_client.v1.model.usage_summary_date import UsageSummaryDate + return { + "agent_host_top99p_sum": (int,), + "ai_credits_agent_builder_ai_credits_agg_sum": (int,), + "ai_credits_agg_sum": (int,), + "ai_credits_bits_assistant_ai_credits_agg_sum": (int,), + "ai_credits_bits_dev_ai_credits_agg_sum": (int,), + "ai_credits_bits_sre_ai_credits_agg_sum": (int,), + "apm_azure_app_service_host_top99p_sum": (int,), + "apm_devsecops_host_top99p_sum": (int,), + "apm_enterprise_standalone_hosts_top99p_sum": (int,), + "apm_fargate_count_avg_sum": (int,), + "apm_host_top99p_sum": (int,), + "apm_pro_standalone_hosts_top99p_sum": (int,), + "appsec_fargate_count_avg_sum": (int,), + "asm_serverless_agg_sum": (int,), + "audit_logs_lines_indexed_agg_sum": (int,), + "audit_trail_enabled_hwm_sum": (int,), + "audit_trail_event_forwarding_events_agg_sum": (int,), + "avg_profiled_fargate_tasks_sum": (int,), + "aws_host_top99p_sum": (int,), + "aws_lambda_func_count": (int,), + "aws_lambda_invocations_sum": (int,), + "azure_app_service_top99p_sum": (int,), + "azure_host_top99p_sum": (int,), + "billable_ingested_bytes_agg_sum": (int,), + "bits_ai_investigations_agg_sum": (int,), + "browser_rum_lite_session_count_agg_sum": (int,), + "browser_rum_replay_session_count_agg_sum": (int,), + "browser_rum_units_agg_sum": (int,), + "ccm_anthropic_spend_last_sum": (int,), + "ccm_aws_spend_last_sum": (int,), + "ccm_azure_spend_last_sum": (int,), + "ccm_confluent_spend_last_sum": (int,), + "ccm_databricks_spend_last_sum": (int,), + "ccm_elastic_spend_last_sum": (int,), + "ccm_fastly_spend_last_sum": (int,), + "ccm_gcp_spend_last_sum": (int,), + "ccm_github_spend_last_sum": (int,), + "ccm_mongodb_spend_last_sum": (int,), + "ccm_oci_spend_last_sum": (int,), + "ccm_openai_spend_last_sum": (int,), + "ccm_snowflake_spend_last_sum": (int,), + "ccm_spend_monitored_ent_last_sum": (int,), + "ccm_spend_monitored_pro_last_sum": (int,), + "ccm_twilio_spend_last_sum": (int,), + "ci_pipeline_indexed_spans_agg_sum": (int,), + "ci_test_indexed_spans_agg_sum": (int,), + "ci_visibility_itr_committers_hwm_sum": (int,), + "ci_visibility_pipeline_committers_hwm_sum": (int,), + "ci_visibility_test_committers_hwm_sum": (int,), + "cloud_cost_management_aws_host_count_avg_sum": (int,), + "cloud_cost_management_azure_host_count_avg_sum": (int,), + "cloud_cost_management_gcp_host_count_avg_sum": (int,), + "cloud_cost_management_host_count_avg_sum": (int,), + "cloud_cost_management_oci_host_count_avg_sum": (int,), + "cloud_siem_events_agg_sum": (int,), + "cloud_siem_indexed_logs_agg_sum": (int,), + "code_analysis_sa_committers_hwm_sum": (int,), + "code_analysis_sca_committers_hwm_sum": (int,), + "code_security_host_top99p_sum": (int,), + "container_avg_sum": (int,), + "container_excl_agent_avg_sum": (int,), + "container_hwm_sum": (int,), + "csm_container_enterprise_compliance_count_agg_sum": (int,), + "csm_container_enterprise_cws_count_agg_sum": (int,), + "csm_container_enterprise_total_count_agg_sum": (int,), + "csm_host_enterprise_aas_host_count_top99p_sum": (int,), + "csm_host_enterprise_aws_host_count_top99p_sum": (int,), + "csm_host_enterprise_azure_host_count_top99p_sum": (int,), + "csm_host_enterprise_compliance_host_count_top99p_sum": (int,), + "csm_host_enterprise_cws_host_count_top99p_sum": (int,), + "csm_host_enterprise_gcp_host_count_top99p_sum": (int,), + "csm_host_enterprise_oci_host_count_top99p_sum": (int,), + "csm_host_enterprise_total_host_count_top99p_sum": (int,), + "csm_host_pro_hosts_agentless_scanners_agg_sum": (int,), + "csm_host_pro_hosts_agentless_scanners_top99p_sum": (int,), + "csm_host_pro_oci_host_count_top99p_sum": (int,), + "cspm_aas_host_top99p_sum": (int,), + "cspm_aws_host_top99p_sum": (int,), + "cspm_azure_host_top99p_sum": (int,), + "cspm_container_avg_sum": (int,), + "cspm_container_hwm_sum": (int,), + "cspm_gcp_host_top99p_sum": (int,), + "cspm_host_top99p_sum": (int,), + "cspm_hosts_agentless_scanners_agg_sum": (int,), + "cspm_hosts_agentless_scanners_top99p_sum": (int,), + "custom_historical_ts_sum": (int,), + "custom_live_ts_sum": (int,), + "custom_ts_sum": (int,), + "cws_container_avg_sum": (int,), + "cws_fargate_task_avg_sum": (int,), + "cws_host_top99p_sum": (int,), + "data_jobs_monitoring_host_hr_agg_sum": (int,), + "data_stream_monitoring_host_count_agg_sum": (int,), + "data_stream_monitoring_host_count_top99p_sum": (int,), + "dbm_host_top99p_sum": (int,), + "dbm_queries_avg_sum": (int,), + "do_jobs_monitoring_orchestrators_job_hours_agg_sum": (int,), + "end_date": (datetime,), + "eph_infra_host_agent_agg_sum": (int,), + "eph_infra_host_alibaba_agg_sum": (int,), + "eph_infra_host_aws_agg_sum": (int,), + "eph_infra_host_azure_agg_sum": (int,), + "eph_infra_host_basic_agg_sum": (int,), + "eph_infra_host_basic_infra_basic_agent_agg_sum": (int,), + "eph_infra_host_basic_infra_basic_vsphere_agg_sum": (int,), + "eph_infra_host_ent_agg_sum": (int,), + "eph_infra_host_gcp_agg_sum": (int,), + "eph_infra_host_heroku_agg_sum": (int,), + "eph_infra_host_only_aas_agg_sum": (int,), + "eph_infra_host_only_vsphere_agg_sum": (int,), + "eph_infra_host_opentelemetry_agg_sum": (int,), + "eph_infra_host_opentelemetry_apm_agg_sum": (int,), + "eph_infra_host_pro_agg_sum": (int,), + "eph_infra_host_proplus_agg_sum": (int,), + "eph_infra_host_proxmox_agg_sum": (int,), + "error_tracking_apm_error_events_agg_sum": (int,), + "error_tracking_error_events_agg_sum": (int,), + "error_tracking_events_agg_sum": (int,), + "error_tracking_rum_error_events_agg_sum": (int,), + "event_management_correlation_agg_sum": (int,), + "event_management_correlation_correlated_events_agg_sum": (int,), + "event_management_correlation_correlated_related_events_agg_sum": (int,), + "fargate_container_profiler_profiling_fargate_avg_sum": (int,), + "fargate_container_profiler_profiling_fargate_eks_avg_sum": (int,), + "fargate_tasks_count_avg_sum": (int,), + "fargate_tasks_count_hwm_sum": (int,), + "feature_flags_config_requests_agg_sum": (int,), + "flex_logs_compute_large_avg_sum": (int,), + "flex_logs_compute_medium_avg_sum": (int,), + "flex_logs_compute_small_avg_sum": (int,), + "flex_logs_compute_xlarge_avg_sum": (int,), + "flex_logs_compute_xsmall_avg_sum": (int,), + "flex_logs_starter_avg_sum": (int,), + "flex_logs_starter_storage_index_avg_sum": (int,), + "flex_logs_starter_storage_retention_adjustment_avg_sum": (int,), + "flex_stored_logs_avg_sum": (int,), + "forwarding_events_bytes_agg_sum": (int,), + "gcp_host_top99p_sum": (int,), + "heroku_host_top99p_sum": (int,), + "incident_management_monthly_active_users_hwm_sum": (int,), + "incident_management_seats_hwm_sum": (int,), + "indexed_events_count_agg_sum": (int,), + "indexed_points_agg_sum": (int,), + "infra_cpu_agg_sum": (int,), + "infra_cpu_avg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_agent_agg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_agent_avg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_agent_basic_agg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_agent_basic_avg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_aws_agg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_aws_avg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_azure_agg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_azure_avg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_gcp_agg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_gcp_avg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_agg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_avg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_basic_agg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_nutanix_basic_avg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_opentelemetry_agg_sum": (int,), + "infra_cpu_default_infra_host_vcpu_opentelemetry_avg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_agent_agg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_agent_avg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_aws_agg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_aws_avg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_azure_agg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_azure_avg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_gcp_agg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_gcp_avg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_nutanix_agg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_nutanix_avg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_opentelemetry_agg_sum": (int,), + "infra_cpu_observed_infra_host_vcpu_opentelemetry_avg_sum": (int,), + "infra_edge_monitoring_devices_top99p_sum": (int,), + "infra_host_basic_infra_basic_agent_top99p_sum": (int,), + "infra_host_basic_infra_basic_vsphere_top99p_sum": (int,), + "infra_host_basic_top99p_sum": (int,), + "infra_host_top99p_sum": (int,), + "infra_storage_mgmt_objects_count_avg_sum": (int,), + "ingest_points_agg_sum": (int,), + "ingested_events_bytes_agg_sum": (int,), + "iot_apm_host_agg_sum": (int,), + "iot_apm_host_top99p_sum": (int,), + "iot_device_agg_sum": (int,), + "iot_device_top99p_sum": (int,), + "last_updated": (datetime,), + "live_indexed_events_agg_sum": (int,), + "live_ingested_bytes_agg_sum": (int,), + "llm_observability_15day_retention_spans_agg_sum": (int,), + "llm_observability_30day_retention_spans_agg_sum": (int,), + "llm_observability_60day_retention_spans_agg_sum": (int,), + "llm_observability_90day_retention_spans_agg_sum": (int,), + "llm_observability_agg_sum": (int,), + "llm_observability_min_spend_agg_sum": (int,), + "logs_archive_search_gb_scanned_agg_sum": (int,), + "logs_by_retention": (LogsByRetention,), + "metric_names_agg_sum": (int,), + "mobile_rum_lite_session_count_agg_sum": (int,), + "mobile_rum_session_count_agg_sum": (int,), + "mobile_rum_session_count_android_agg_sum": (int,), + "mobile_rum_session_count_flutter_agg_sum": (int,), + "mobile_rum_session_count_ios_agg_sum": (int,), + "mobile_rum_session_count_reactnative_agg_sum": (int,), + "mobile_rum_session_count_roku_agg_sum": (int,), + "mobile_rum_units_agg_sum": (int,), + "ndm_netflow_events_agg_sum": (int,), + "netflow_indexed_events_count_agg_sum": (int,), + "network_device_wireless_top99p_sum": (int,), + "network_path_agg_sum": (int,), + "npm_host_top99p_sum": (int,), + "observability_pipelines_bytes_processed_agg_sum": (int,), + "oci_host_agg_sum": (int,), + "oci_host_top99p_sum": (int,), + "on_call_seat_hwm_sum": (int,), + "online_archive_events_count_agg_sum": (int,), + "opentelemetry_apm_host_top99p_sum": (int,), + "opentelemetry_host_top99p_sum": (int,), + "product_analytics_agg_sum": (int,), + "profiling_aas_count_top99p_sum": (int,), + "profiling_container_agent_count_avg": (int,), + "profiling_host_count_top99p_sum": (int,), + "proxmox_host_agg_sum": (int,), + "proxmox_host_top99p_sum": (int,), + "published_app_hwm_sum": (int,), + "rehydrated_indexed_events_agg_sum": (int,), + "rehydrated_ingested_bytes_agg_sum": (int,), + "rum_browser_and_mobile_session_count": (int,), + "rum_browser_legacy_session_count_agg_sum": (int,), + "rum_browser_lite_session_count_agg_sum": (int,), + "rum_browser_replay_session_count_agg_sum": (int,), + "rum_indexed_sessions_agg_sum": (int,), + "rum_ingested_sessions_agg_sum": (int,), + "rum_lite_session_count_agg_sum": (int,), + "rum_mobile_legacy_session_count_android_agg_sum": (int,), + "rum_mobile_legacy_session_count_flutter_agg_sum": (int,), + "rum_mobile_legacy_session_count_ios_agg_sum": (int,), + "rum_mobile_legacy_session_count_reactnative_agg_sum": (int,), + "rum_mobile_legacy_session_count_roku_agg_sum": (int,), + "rum_mobile_lite_session_count_android_agg_sum": (int,), + "rum_mobile_lite_session_count_flutter_agg_sum": (int,), + "rum_mobile_lite_session_count_ios_agg_sum": (int,), + "rum_mobile_lite_session_count_kotlinmultiplatform_agg_sum": (int,), + "rum_mobile_lite_session_count_reactnative_agg_sum": (int,), + "rum_mobile_lite_session_count_roku_agg_sum": (int,), + "rum_mobile_lite_session_count_unity_agg_sum": (int,), + "rum_mobile_replay_session_count_android_agg_sum": (int,), + "rum_mobile_replay_session_count_ios_agg_sum": (int,), + "rum_mobile_replay_session_count_kotlinmultiplatform_agg_sum": (int,), + "rum_mobile_replay_session_count_reactnative_agg_sum": (int,), + "rum_replay_session_count_agg_sum": (int,), + "rum_session_count_agg_sum": (int,), + "rum_session_replay_add_on_agg_sum": (int,), + "rum_total_session_count_agg_sum": (int,), + "rum_units_agg_sum": (int,), + "sca_fargate_count_avg_sum": (int,), + "sca_fargate_count_hwm_sum": (int,), + "sds_apm_scanned_bytes_sum": (int,), + "sds_events_scanned_bytes_sum": (int,), + "sds_logs_scanned_bytes_sum": (int,), + "sds_rum_scanned_bytes_sum": (int,), + "sds_total_scanned_bytes_sum": (int,), + "serverless_apps_apm_apm_azure_appservice_instances_avg_sum": (int,), + "serverless_apps_apm_apm_azure_azurefunction_instances_avg_sum": (int,), + "serverless_apps_apm_apm_azure_containerapp_instances_avg_sum": (int,), + "serverless_apps_apm_apm_fargate_ecs_tasks_avg_sum": (int,), + "serverless_apps_apm_apm_gcp_cloudfunction_instances_avg_sum": (int,), + "serverless_apps_apm_apm_gcp_cloudrun_instances_avg_sum": (int,), + "serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg_sum": (int,), + "serverless_apps_apm_avg_sum": (int,), + "serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg_sum": (int,), + "serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg_sum": (int,), + "serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg_sum": (int,), + "serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg_sum": (int,), + "serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg_sum": (int,), + "serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg_sum": (int,), + "serverless_apps_apm_excl_fargate_avg_sum": (int,), + "serverless_apps_azure_container_app_instances_avg_sum": (int,), + "serverless_apps_azure_count_avg_sum": (int,), + "serverless_apps_azure_function_app_instances_avg_sum": (int,), + "serverless_apps_azure_web_app_instances_avg_sum": (int,), + "serverless_apps_dsm_fargate_tasks_avg_sum": (int,), + "serverless_apps_ecs_avg_sum": (int,), + "serverless_apps_eks_avg_sum": (int,), + "serverless_apps_excl_fargate_avg_sum": (int,), + "serverless_apps_excl_fargate_azure_container_app_instances_avg_sum": (int,), + "serverless_apps_excl_fargate_azure_function_app_instances_avg_sum": (int,), + "serverless_apps_excl_fargate_azure_web_app_instances_avg_sum": (int,), + "serverless_apps_excl_fargate_google_cloud_functions_instances_avg_sum": (int,), + "serverless_apps_excl_fargate_google_cloud_run_instances_avg_sum": (int,), + "serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg_sum": (int,), + "serverless_apps_google_cloud_functions_instances_avg_sum": (int,), + "serverless_apps_google_cloud_run_instances_avg_sum": (int,), + "serverless_apps_google_count_avg_sum": (int,), + "serverless_apps_infra_gcp_gke_autopilot_pods_avg_sum": (int,), + "serverless_apps_total_count_avg_sum": (int,), + "siem_12mo_retention_agg_sum": (int,), + "siem_6mo_retention_agg_sum": (int,), + "siem_analyzed_logs_add_on_count_agg_sum": (int,), + "snmp_device_count_agg_sum": (int,), + "snmp_device_count_top99p_sum": (int,), + "start_date": (datetime,), + "synthetics_browser_check_calls_count_agg_sum": (int,), + "synthetics_check_calls_count_agg_sum": (int,), + "synthetics_mobile_test_runs_agg_sum": (int,), + "synthetics_parallel_testing_max_slots_hwm_sum": (int,), + "trace_search_indexed_events_count_agg_sum": (int,), + "twol_ingested_events_bytes_agg_sum": (int,), + "universal_service_monitoring_host_top99p_sum": (int,), + "usage": ([UsageSummaryDate],), + "vsphere_host_top99p_sum": (int,), + "vuln_management_host_count_top99p_sum": (int,), + "workflow_executions_usage_agg_sum": (int,), + } + attribute_map = { + "agent_host_top99p_sum": "agent_host_top99p_sum", + "ai_credits_agent_builder_ai_credits_agg_sum": "ai_credits_agent_builder_ai_credits_agg_sum", + "ai_credits_agg_sum": "ai_credits_agg_sum", + "ai_credits_bits_assistant_ai_credits_agg_sum": "ai_credits_bits_assistant_ai_credits_agg_sum", + "ai_credits_bits_dev_ai_credits_agg_sum": "ai_credits_bits_dev_ai_credits_agg_sum", + "ai_credits_bits_sre_ai_credits_agg_sum": "ai_credits_bits_sre_ai_credits_agg_sum", + "apm_azure_app_service_host_top99p_sum": "apm_azure_app_service_host_top99p_sum", + "apm_devsecops_host_top99p_sum": "apm_devsecops_host_top99p_sum", + "apm_enterprise_standalone_hosts_top99p_sum": "apm_enterprise_standalone_hosts_top99p_sum", + "apm_fargate_count_avg_sum": "apm_fargate_count_avg_sum", + "apm_host_top99p_sum": "apm_host_top99p_sum", + "apm_pro_standalone_hosts_top99p_sum": "apm_pro_standalone_hosts_top99p_sum", + "appsec_fargate_count_avg_sum": "appsec_fargate_count_avg_sum", + "asm_serverless_agg_sum": "asm_serverless_agg_sum", + "audit_logs_lines_indexed_agg_sum": "audit_logs_lines_indexed_agg_sum", + "audit_trail_enabled_hwm_sum": "audit_trail_enabled_hwm_sum", + "audit_trail_event_forwarding_events_agg_sum": "audit_trail_event_forwarding_events_agg_sum", + "avg_profiled_fargate_tasks_sum": "avg_profiled_fargate_tasks_sum", + "aws_host_top99p_sum": "aws_host_top99p_sum", + "aws_lambda_func_count": "aws_lambda_func_count", + "aws_lambda_invocations_sum": "aws_lambda_invocations_sum", + "azure_app_service_top99p_sum": "azure_app_service_top99p_sum", + "azure_host_top99p_sum": "azure_host_top99p_sum", + "billable_ingested_bytes_agg_sum": "billable_ingested_bytes_agg_sum", + "bits_ai_investigations_agg_sum": "bits_ai_investigations_agg_sum", + "browser_rum_lite_session_count_agg_sum": "browser_rum_lite_session_count_agg_sum", + "browser_rum_replay_session_count_agg_sum": "browser_rum_replay_session_count_agg_sum", + "browser_rum_units_agg_sum": "browser_rum_units_agg_sum", + "ccm_anthropic_spend_last_sum": "ccm_anthropic_spend_last_sum", + "ccm_aws_spend_last_sum": "ccm_aws_spend_last_sum", + "ccm_azure_spend_last_sum": "ccm_azure_spend_last_sum", + "ccm_confluent_spend_last_sum": "ccm_confluent_spend_last_sum", + "ccm_databricks_spend_last_sum": "ccm_databricks_spend_last_sum", + "ccm_elastic_spend_last_sum": "ccm_elastic_spend_last_sum", + "ccm_fastly_spend_last_sum": "ccm_fastly_spend_last_sum", + "ccm_gcp_spend_last_sum": "ccm_gcp_spend_last_sum", + "ccm_github_spend_last_sum": "ccm_github_spend_last_sum", + "ccm_mongodb_spend_last_sum": "ccm_mongodb_spend_last_sum", + "ccm_oci_spend_last_sum": "ccm_oci_spend_last_sum", + "ccm_openai_spend_last_sum": "ccm_openai_spend_last_sum", + "ccm_snowflake_spend_last_sum": "ccm_snowflake_spend_last_sum", + "ccm_spend_monitored_ent_last_sum": "ccm_spend_monitored_ent_last_sum", + "ccm_spend_monitored_pro_last_sum": "ccm_spend_monitored_pro_last_sum", + "ccm_twilio_spend_last_sum": "ccm_twilio_spend_last_sum", + "ci_pipeline_indexed_spans_agg_sum": "ci_pipeline_indexed_spans_agg_sum", + "ci_test_indexed_spans_agg_sum": "ci_test_indexed_spans_agg_sum", + "ci_visibility_itr_committers_hwm_sum": "ci_visibility_itr_committers_hwm_sum", + "ci_visibility_pipeline_committers_hwm_sum": "ci_visibility_pipeline_committers_hwm_sum", + "ci_visibility_test_committers_hwm_sum": "ci_visibility_test_committers_hwm_sum", + "cloud_cost_management_aws_host_count_avg_sum": "cloud_cost_management_aws_host_count_avg_sum", + "cloud_cost_management_azure_host_count_avg_sum": "cloud_cost_management_azure_host_count_avg_sum", + "cloud_cost_management_gcp_host_count_avg_sum": "cloud_cost_management_gcp_host_count_avg_sum", + "cloud_cost_management_host_count_avg_sum": "cloud_cost_management_host_count_avg_sum", + "cloud_cost_management_oci_host_count_avg_sum": "cloud_cost_management_oci_host_count_avg_sum", + "cloud_siem_events_agg_sum": "cloud_siem_events_agg_sum", + "cloud_siem_indexed_logs_agg_sum": "cloud_siem_indexed_logs_agg_sum", + "code_analysis_sa_committers_hwm_sum": "code_analysis_sa_committers_hwm_sum", + "code_analysis_sca_committers_hwm_sum": "code_analysis_sca_committers_hwm_sum", + "code_security_host_top99p_sum": "code_security_host_top99p_sum", + "container_avg_sum": "container_avg_sum", + "container_excl_agent_avg_sum": "container_excl_agent_avg_sum", + "container_hwm_sum": "container_hwm_sum", + "csm_container_enterprise_compliance_count_agg_sum": "csm_container_enterprise_compliance_count_agg_sum", + "csm_container_enterprise_cws_count_agg_sum": "csm_container_enterprise_cws_count_agg_sum", + "csm_container_enterprise_total_count_agg_sum": "csm_container_enterprise_total_count_agg_sum", + "csm_host_enterprise_aas_host_count_top99p_sum": "csm_host_enterprise_aas_host_count_top99p_sum", + "csm_host_enterprise_aws_host_count_top99p_sum": "csm_host_enterprise_aws_host_count_top99p_sum", + "csm_host_enterprise_azure_host_count_top99p_sum": "csm_host_enterprise_azure_host_count_top99p_sum", + "csm_host_enterprise_compliance_host_count_top99p_sum": "csm_host_enterprise_compliance_host_count_top99p_sum", + "csm_host_enterprise_cws_host_count_top99p_sum": "csm_host_enterprise_cws_host_count_top99p_sum", + "csm_host_enterprise_gcp_host_count_top99p_sum": "csm_host_enterprise_gcp_host_count_top99p_sum", + "csm_host_enterprise_oci_host_count_top99p_sum": "csm_host_enterprise_oci_host_count_top99p_sum", + "csm_host_enterprise_total_host_count_top99p_sum": "csm_host_enterprise_total_host_count_top99p_sum", + "csm_host_pro_hosts_agentless_scanners_agg_sum": "csm_host_pro_hosts_agentless_scanners_agg_sum", + "csm_host_pro_hosts_agentless_scanners_top99p_sum": "csm_host_pro_hosts_agentless_scanners_top99p_sum", + "csm_host_pro_oci_host_count_top99p_sum": "csm_host_pro_oci_host_count_top99p_sum", + "cspm_aas_host_top99p_sum": "cspm_aas_host_top99p_sum", + "cspm_aws_host_top99p_sum": "cspm_aws_host_top99p_sum", + "cspm_azure_host_top99p_sum": "cspm_azure_host_top99p_sum", + "cspm_container_avg_sum": "cspm_container_avg_sum", + "cspm_container_hwm_sum": "cspm_container_hwm_sum", + "cspm_gcp_host_top99p_sum": "cspm_gcp_host_top99p_sum", + "cspm_host_top99p_sum": "cspm_host_top99p_sum", + "cspm_hosts_agentless_scanners_agg_sum": "cspm_hosts_agentless_scanners_agg_sum", + "cspm_hosts_agentless_scanners_top99p_sum": "cspm_hosts_agentless_scanners_top99p_sum", + "custom_historical_ts_sum": "custom_historical_ts_sum", + "custom_live_ts_sum": "custom_live_ts_sum", + "custom_ts_sum": "custom_ts_sum", + "cws_container_avg_sum": "cws_container_avg_sum", + "cws_fargate_task_avg_sum": "cws_fargate_task_avg_sum", + "cws_host_top99p_sum": "cws_host_top99p_sum", + "data_jobs_monitoring_host_hr_agg_sum": "data_jobs_monitoring_host_hr_agg_sum", + "data_stream_monitoring_host_count_agg_sum": "data_stream_monitoring_host_count_agg_sum", + "data_stream_monitoring_host_count_top99p_sum": "data_stream_monitoring_host_count_top99p_sum", + "dbm_host_top99p_sum": "dbm_host_top99p_sum", + "dbm_queries_avg_sum": "dbm_queries_avg_sum", + "do_jobs_monitoring_orchestrators_job_hours_agg_sum": "do_jobs_monitoring_orchestrators_job_hours_agg_sum", + "end_date": "end_date", + "eph_infra_host_agent_agg_sum": "eph_infra_host_agent_agg_sum", + "eph_infra_host_alibaba_agg_sum": "eph_infra_host_alibaba_agg_sum", + "eph_infra_host_aws_agg_sum": "eph_infra_host_aws_agg_sum", + "eph_infra_host_azure_agg_sum": "eph_infra_host_azure_agg_sum", + "eph_infra_host_basic_agg_sum": "eph_infra_host_basic_agg_sum", + "eph_infra_host_basic_infra_basic_agent_agg_sum": "eph_infra_host_basic_infra_basic_agent_agg_sum", + "eph_infra_host_basic_infra_basic_vsphere_agg_sum": "eph_infra_host_basic_infra_basic_vsphere_agg_sum", + "eph_infra_host_ent_agg_sum": "eph_infra_host_ent_agg_sum", + "eph_infra_host_gcp_agg_sum": "eph_infra_host_gcp_agg_sum", + "eph_infra_host_heroku_agg_sum": "eph_infra_host_heroku_agg_sum", + "eph_infra_host_only_aas_agg_sum": "eph_infra_host_only_aas_agg_sum", + "eph_infra_host_only_vsphere_agg_sum": "eph_infra_host_only_vsphere_agg_sum", + "eph_infra_host_opentelemetry_agg_sum": "eph_infra_host_opentelemetry_agg_sum", + "eph_infra_host_opentelemetry_apm_agg_sum": "eph_infra_host_opentelemetry_apm_agg_sum", + "eph_infra_host_pro_agg_sum": "eph_infra_host_pro_agg_sum", + "eph_infra_host_proplus_agg_sum": "eph_infra_host_proplus_agg_sum", + "eph_infra_host_proxmox_agg_sum": "eph_infra_host_proxmox_agg_sum", + "error_tracking_apm_error_events_agg_sum": "error_tracking_apm_error_events_agg_sum", + "error_tracking_error_events_agg_sum": "error_tracking_error_events_agg_sum", + "error_tracking_events_agg_sum": "error_tracking_events_agg_sum", + "error_tracking_rum_error_events_agg_sum": "error_tracking_rum_error_events_agg_sum", + "event_management_correlation_agg_sum": "event_management_correlation_agg_sum", + "event_management_correlation_correlated_events_agg_sum": "event_management_correlation_correlated_events_agg_sum", + "event_management_correlation_correlated_related_events_agg_sum": "event_management_correlation_correlated_related_events_agg_sum", + "fargate_container_profiler_profiling_fargate_avg_sum": "fargate_container_profiler_profiling_fargate_avg_sum", + "fargate_container_profiler_profiling_fargate_eks_avg_sum": "fargate_container_profiler_profiling_fargate_eks_avg_sum", + "fargate_tasks_count_avg_sum": "fargate_tasks_count_avg_sum", + "fargate_tasks_count_hwm_sum": "fargate_tasks_count_hwm_sum", + "feature_flags_config_requests_agg_sum": "feature_flags_config_requests_agg_sum", + "flex_logs_compute_large_avg_sum": "flex_logs_compute_large_avg_sum", + "flex_logs_compute_medium_avg_sum": "flex_logs_compute_medium_avg_sum", + "flex_logs_compute_small_avg_sum": "flex_logs_compute_small_avg_sum", + "flex_logs_compute_xlarge_avg_sum": "flex_logs_compute_xlarge_avg_sum", + "flex_logs_compute_xsmall_avg_sum": "flex_logs_compute_xsmall_avg_sum", + "flex_logs_starter_avg_sum": "flex_logs_starter_avg_sum", + "flex_logs_starter_storage_index_avg_sum": "flex_logs_starter_storage_index_avg_sum", + "flex_logs_starter_storage_retention_adjustment_avg_sum": "flex_logs_starter_storage_retention_adjustment_avg_sum", + "flex_stored_logs_avg_sum": "flex_stored_logs_avg_sum", + "forwarding_events_bytes_agg_sum": "forwarding_events_bytes_agg_sum", + "gcp_host_top99p_sum": "gcp_host_top99p_sum", + "heroku_host_top99p_sum": "heroku_host_top99p_sum", + "incident_management_monthly_active_users_hwm_sum": "incident_management_monthly_active_users_hwm_sum", + "incident_management_seats_hwm_sum": "incident_management_seats_hwm_sum", + "indexed_events_count_agg_sum": "indexed_events_count_agg_sum", + "indexed_points_agg_sum": "indexed_points_agg_sum", + "infra_cpu_agg_sum": "infra_cpu_agg_sum", + "infra_cpu_avg_sum": "infra_cpu_avg_sum", + "infra_cpu_default_infra_host_vcpu_agent_agg_sum": "infra_cpu_default_infra_host_vcpu_agent_agg_sum", + "infra_cpu_default_infra_host_vcpu_agent_avg_sum": "infra_cpu_default_infra_host_vcpu_agent_avg_sum", + "infra_cpu_default_infra_host_vcpu_agent_basic_agg_sum": "infra_cpu_default_infra_host_vcpu_agent_basic_agg_sum", + "infra_cpu_default_infra_host_vcpu_agent_basic_avg_sum": "infra_cpu_default_infra_host_vcpu_agent_basic_avg_sum", + "infra_cpu_default_infra_host_vcpu_aws_agg_sum": "infra_cpu_default_infra_host_vcpu_aws_agg_sum", + "infra_cpu_default_infra_host_vcpu_aws_avg_sum": "infra_cpu_default_infra_host_vcpu_aws_avg_sum", + "infra_cpu_default_infra_host_vcpu_azure_agg_sum": "infra_cpu_default_infra_host_vcpu_azure_agg_sum", + "infra_cpu_default_infra_host_vcpu_azure_avg_sum": "infra_cpu_default_infra_host_vcpu_azure_avg_sum", + "infra_cpu_default_infra_host_vcpu_gcp_agg_sum": "infra_cpu_default_infra_host_vcpu_gcp_agg_sum", + "infra_cpu_default_infra_host_vcpu_gcp_avg_sum": "infra_cpu_default_infra_host_vcpu_gcp_avg_sum", + "infra_cpu_default_infra_host_vcpu_nutanix_agg_sum": "infra_cpu_default_infra_host_vcpu_nutanix_agg_sum", + "infra_cpu_default_infra_host_vcpu_nutanix_avg_sum": "infra_cpu_default_infra_host_vcpu_nutanix_avg_sum", + "infra_cpu_default_infra_host_vcpu_nutanix_basic_agg_sum": "infra_cpu_default_infra_host_vcpu_nutanix_basic_agg_sum", + "infra_cpu_default_infra_host_vcpu_nutanix_basic_avg_sum": "infra_cpu_default_infra_host_vcpu_nutanix_basic_avg_sum", + "infra_cpu_default_infra_host_vcpu_opentelemetry_agg_sum": "infra_cpu_default_infra_host_vcpu_opentelemetry_agg_sum", + "infra_cpu_default_infra_host_vcpu_opentelemetry_avg_sum": "infra_cpu_default_infra_host_vcpu_opentelemetry_avg_sum", + "infra_cpu_observed_infra_host_vcpu_agent_agg_sum": "infra_cpu_observed_infra_host_vcpu_agent_agg_sum", + "infra_cpu_observed_infra_host_vcpu_agent_avg_sum": "infra_cpu_observed_infra_host_vcpu_agent_avg_sum", + "infra_cpu_observed_infra_host_vcpu_aws_agg_sum": "infra_cpu_observed_infra_host_vcpu_aws_agg_sum", + "infra_cpu_observed_infra_host_vcpu_aws_avg_sum": "infra_cpu_observed_infra_host_vcpu_aws_avg_sum", + "infra_cpu_observed_infra_host_vcpu_azure_agg_sum": "infra_cpu_observed_infra_host_vcpu_azure_agg_sum", + "infra_cpu_observed_infra_host_vcpu_azure_avg_sum": "infra_cpu_observed_infra_host_vcpu_azure_avg_sum", + "infra_cpu_observed_infra_host_vcpu_gcp_agg_sum": "infra_cpu_observed_infra_host_vcpu_gcp_agg_sum", + "infra_cpu_observed_infra_host_vcpu_gcp_avg_sum": "infra_cpu_observed_infra_host_vcpu_gcp_avg_sum", + "infra_cpu_observed_infra_host_vcpu_nutanix_agg_sum": "infra_cpu_observed_infra_host_vcpu_nutanix_agg_sum", + "infra_cpu_observed_infra_host_vcpu_nutanix_avg_sum": "infra_cpu_observed_infra_host_vcpu_nutanix_avg_sum", + "infra_cpu_observed_infra_host_vcpu_opentelemetry_agg_sum": "infra_cpu_observed_infra_host_vcpu_opentelemetry_agg_sum", + "infra_cpu_observed_infra_host_vcpu_opentelemetry_avg_sum": "infra_cpu_observed_infra_host_vcpu_opentelemetry_avg_sum", + "infra_edge_monitoring_devices_top99p_sum": "infra_edge_monitoring_devices_top99p_sum", + "infra_host_basic_infra_basic_agent_top99p_sum": "infra_host_basic_infra_basic_agent_top99p_sum", + "infra_host_basic_infra_basic_vsphere_top99p_sum": "infra_host_basic_infra_basic_vsphere_top99p_sum", + "infra_host_basic_top99p_sum": "infra_host_basic_top99p_sum", + "infra_host_top99p_sum": "infra_host_top99p_sum", + "infra_storage_mgmt_objects_count_avg_sum": "infra_storage_mgmt_objects_count_avg_sum", + "ingest_points_agg_sum": "ingest_points_agg_sum", + "ingested_events_bytes_agg_sum": "ingested_events_bytes_agg_sum", + "iot_apm_host_agg_sum": "iot_apm_host_agg_sum", + "iot_apm_host_top99p_sum": "iot_apm_host_top99p_sum", + "iot_device_agg_sum": "iot_device_agg_sum", + "iot_device_top99p_sum": "iot_device_top99p_sum", + "last_updated": "last_updated", + "live_indexed_events_agg_sum": "live_indexed_events_agg_sum", + "live_ingested_bytes_agg_sum": "live_ingested_bytes_agg_sum", + "llm_observability_15day_retention_spans_agg_sum": "llm_observability_15day_retention_spans_agg_sum", + "llm_observability_30day_retention_spans_agg_sum": "llm_observability_30day_retention_spans_agg_sum", + "llm_observability_60day_retention_spans_agg_sum": "llm_observability_60day_retention_spans_agg_sum", + "llm_observability_90day_retention_spans_agg_sum": "llm_observability_90day_retention_spans_agg_sum", + "llm_observability_agg_sum": "llm_observability_agg_sum", + "llm_observability_min_spend_agg_sum": "llm_observability_min_spend_agg_sum", + "logs_archive_search_gb_scanned_agg_sum": "logs_archive_search_gb_scanned_agg_sum", + "logs_by_retention": "logs_by_retention", + "metric_names_agg_sum": "metric_names_agg_sum", + "mobile_rum_lite_session_count_agg_sum": "mobile_rum_lite_session_count_agg_sum", + "mobile_rum_session_count_agg_sum": "mobile_rum_session_count_agg_sum", + "mobile_rum_session_count_android_agg_sum": "mobile_rum_session_count_android_agg_sum", + "mobile_rum_session_count_flutter_agg_sum": "mobile_rum_session_count_flutter_agg_sum", + "mobile_rum_session_count_ios_agg_sum": "mobile_rum_session_count_ios_agg_sum", + "mobile_rum_session_count_reactnative_agg_sum": "mobile_rum_session_count_reactnative_agg_sum", + "mobile_rum_session_count_roku_agg_sum": "mobile_rum_session_count_roku_agg_sum", + "mobile_rum_units_agg_sum": "mobile_rum_units_agg_sum", + "ndm_netflow_events_agg_sum": "ndm_netflow_events_agg_sum", + "netflow_indexed_events_count_agg_sum": "netflow_indexed_events_count_agg_sum", + "network_device_wireless_top99p_sum": "network_device_wireless_top99p_sum", + "network_path_agg_sum": "network_path_agg_sum", + "npm_host_top99p_sum": "npm_host_top99p_sum", + "observability_pipelines_bytes_processed_agg_sum": "observability_pipelines_bytes_processed_agg_sum", + "oci_host_agg_sum": "oci_host_agg_sum", + "oci_host_top99p_sum": "oci_host_top99p_sum", + "on_call_seat_hwm_sum": "on_call_seat_hwm_sum", + "online_archive_events_count_agg_sum": "online_archive_events_count_agg_sum", + "opentelemetry_apm_host_top99p_sum": "opentelemetry_apm_host_top99p_sum", + "opentelemetry_host_top99p_sum": "opentelemetry_host_top99p_sum", + "product_analytics_agg_sum": "product_analytics_agg_sum", + "profiling_aas_count_top99p_sum": "profiling_aas_count_top99p_sum", + "profiling_container_agent_count_avg": "profiling_container_agent_count_avg", + "profiling_host_count_top99p_sum": "profiling_host_count_top99p_sum", + "proxmox_host_agg_sum": "proxmox_host_agg_sum", + "proxmox_host_top99p_sum": "proxmox_host_top99p_sum", + "published_app_hwm_sum": "published_app_hwm_sum", + "rehydrated_indexed_events_agg_sum": "rehydrated_indexed_events_agg_sum", + "rehydrated_ingested_bytes_agg_sum": "rehydrated_ingested_bytes_agg_sum", + "rum_browser_and_mobile_session_count": "rum_browser_and_mobile_session_count", + "rum_browser_legacy_session_count_agg_sum": "rum_browser_legacy_session_count_agg_sum", + "rum_browser_lite_session_count_agg_sum": "rum_browser_lite_session_count_agg_sum", + "rum_browser_replay_session_count_agg_sum": "rum_browser_replay_session_count_agg_sum", + "rum_indexed_sessions_agg_sum": "rum_indexed_sessions_agg_sum", + "rum_ingested_sessions_agg_sum": "rum_ingested_sessions_agg_sum", + "rum_lite_session_count_agg_sum": "rum_lite_session_count_agg_sum", + "rum_mobile_legacy_session_count_android_agg_sum": "rum_mobile_legacy_session_count_android_agg_sum", + "rum_mobile_legacy_session_count_flutter_agg_sum": "rum_mobile_legacy_session_count_flutter_agg_sum", + "rum_mobile_legacy_session_count_ios_agg_sum": "rum_mobile_legacy_session_count_ios_agg_sum", + "rum_mobile_legacy_session_count_reactnative_agg_sum": "rum_mobile_legacy_session_count_reactnative_agg_sum", + "rum_mobile_legacy_session_count_roku_agg_sum": "rum_mobile_legacy_session_count_roku_agg_sum", + "rum_mobile_lite_session_count_android_agg_sum": "rum_mobile_lite_session_count_android_agg_sum", + "rum_mobile_lite_session_count_flutter_agg_sum": "rum_mobile_lite_session_count_flutter_agg_sum", + "rum_mobile_lite_session_count_ios_agg_sum": "rum_mobile_lite_session_count_ios_agg_sum", + "rum_mobile_lite_session_count_kotlinmultiplatform_agg_sum": "rum_mobile_lite_session_count_kotlinmultiplatform_agg_sum", + "rum_mobile_lite_session_count_reactnative_agg_sum": "rum_mobile_lite_session_count_reactnative_agg_sum", + "rum_mobile_lite_session_count_roku_agg_sum": "rum_mobile_lite_session_count_roku_agg_sum", + "rum_mobile_lite_session_count_unity_agg_sum": "rum_mobile_lite_session_count_unity_agg_sum", + "rum_mobile_replay_session_count_android_agg_sum": "rum_mobile_replay_session_count_android_agg_sum", + "rum_mobile_replay_session_count_ios_agg_sum": "rum_mobile_replay_session_count_ios_agg_sum", + "rum_mobile_replay_session_count_kotlinmultiplatform_agg_sum": "rum_mobile_replay_session_count_kotlinmultiplatform_agg_sum", + "rum_mobile_replay_session_count_reactnative_agg_sum": "rum_mobile_replay_session_count_reactnative_agg_sum", + "rum_replay_session_count_agg_sum": "rum_replay_session_count_agg_sum", + "rum_session_count_agg_sum": "rum_session_count_agg_sum", + "rum_session_replay_add_on_agg_sum": "rum_session_replay_add_on_agg_sum", + "rum_total_session_count_agg_sum": "rum_total_session_count_agg_sum", + "rum_units_agg_sum": "rum_units_agg_sum", + "sca_fargate_count_avg_sum": "sca_fargate_count_avg_sum", + "sca_fargate_count_hwm_sum": "sca_fargate_count_hwm_sum", + "sds_apm_scanned_bytes_sum": "sds_apm_scanned_bytes_sum", + "sds_events_scanned_bytes_sum": "sds_events_scanned_bytes_sum", + "sds_logs_scanned_bytes_sum": "sds_logs_scanned_bytes_sum", + "sds_rum_scanned_bytes_sum": "sds_rum_scanned_bytes_sum", + "sds_total_scanned_bytes_sum": "sds_total_scanned_bytes_sum", + "serverless_apps_apm_apm_azure_appservice_instances_avg_sum": "serverless_apps_apm_apm_azure_appservice_instances_avg_sum", + "serverless_apps_apm_apm_azure_azurefunction_instances_avg_sum": "serverless_apps_apm_apm_azure_azurefunction_instances_avg_sum", + "serverless_apps_apm_apm_azure_containerapp_instances_avg_sum": "serverless_apps_apm_apm_azure_containerapp_instances_avg_sum", + "serverless_apps_apm_apm_fargate_ecs_tasks_avg_sum": "serverless_apps_apm_apm_fargate_ecs_tasks_avg_sum", + "serverless_apps_apm_apm_gcp_cloudfunction_instances_avg_sum": "serverless_apps_apm_apm_gcp_cloudfunction_instances_avg_sum", + "serverless_apps_apm_apm_gcp_cloudrun_instances_avg_sum": "serverless_apps_apm_apm_gcp_cloudrun_instances_avg_sum", + "serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg_sum": "serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg_sum", + "serverless_apps_apm_avg_sum": "serverless_apps_apm_avg_sum", + "serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg_sum": "serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg_sum", + "serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg_sum": "serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg_sum", + "serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg_sum": "serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg_sum", + "serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg_sum": "serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg_sum", + "serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg_sum": "serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg_sum", + "serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg_sum": "serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg_sum", + "serverless_apps_apm_excl_fargate_avg_sum": "serverless_apps_apm_excl_fargate_avg_sum", + "serverless_apps_azure_container_app_instances_avg_sum": "serverless_apps_azure_container_app_instances_avg_sum", + "serverless_apps_azure_count_avg_sum": "serverless_apps_azure_count_avg_sum", + "serverless_apps_azure_function_app_instances_avg_sum": "serverless_apps_azure_function_app_instances_avg_sum", + "serverless_apps_azure_web_app_instances_avg_sum": "serverless_apps_azure_web_app_instances_avg_sum", + "serverless_apps_dsm_fargate_tasks_avg_sum": "serverless_apps_dsm_fargate_tasks_avg_sum", + "serverless_apps_ecs_avg_sum": "serverless_apps_ecs_avg_sum", + "serverless_apps_eks_avg_sum": "serverless_apps_eks_avg_sum", + "serverless_apps_excl_fargate_avg_sum": "serverless_apps_excl_fargate_avg_sum", + "serverless_apps_excl_fargate_azure_container_app_instances_avg_sum": "serverless_apps_excl_fargate_azure_container_app_instances_avg_sum", + "serverless_apps_excl_fargate_azure_function_app_instances_avg_sum": "serverless_apps_excl_fargate_azure_function_app_instances_avg_sum", + "serverless_apps_excl_fargate_azure_web_app_instances_avg_sum": "serverless_apps_excl_fargate_azure_web_app_instances_avg_sum", + "serverless_apps_excl_fargate_google_cloud_functions_instances_avg_sum": "serverless_apps_excl_fargate_google_cloud_functions_instances_avg_sum", + "serverless_apps_excl_fargate_google_cloud_run_instances_avg_sum": "serverless_apps_excl_fargate_google_cloud_run_instances_avg_sum", + "serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg_sum": "serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg_sum", + "serverless_apps_google_cloud_functions_instances_avg_sum": "serverless_apps_google_cloud_functions_instances_avg_sum", + "serverless_apps_google_cloud_run_instances_avg_sum": "serverless_apps_google_cloud_run_instances_avg_sum", + "serverless_apps_google_count_avg_sum": "serverless_apps_google_count_avg_sum", + "serverless_apps_infra_gcp_gke_autopilot_pods_avg_sum": "serverless_apps_infra_gcp_gke_autopilot_pods_avg_sum", + "serverless_apps_total_count_avg_sum": "serverless_apps_total_count_avg_sum", + "siem_12mo_retention_agg_sum": "siem_12mo_retention_agg_sum", + "siem_6mo_retention_agg_sum": "siem_6mo_retention_agg_sum", + "siem_analyzed_logs_add_on_count_agg_sum": "siem_analyzed_logs_add_on_count_agg_sum", + "snmp_device_count_agg_sum": "snmp_device_count_agg_sum", + "snmp_device_count_top99p_sum": "snmp_device_count_top99p_sum", + "start_date": "start_date", + "synthetics_browser_check_calls_count_agg_sum": "synthetics_browser_check_calls_count_agg_sum", + "synthetics_check_calls_count_agg_sum": "synthetics_check_calls_count_agg_sum", + "synthetics_mobile_test_runs_agg_sum": "synthetics_mobile_test_runs_agg_sum", + "synthetics_parallel_testing_max_slots_hwm_sum": "synthetics_parallel_testing_max_slots_hwm_sum", + "trace_search_indexed_events_count_agg_sum": "trace_search_indexed_events_count_agg_sum", + "twol_ingested_events_bytes_agg_sum": "twol_ingested_events_bytes_agg_sum", + "universal_service_monitoring_host_top99p_sum": "universal_service_monitoring_host_top99p_sum", + "usage": "usage", + "vsphere_host_top99p_sum": "vsphere_host_top99p_sum", + "vuln_management_host_count_top99p_sum": "vuln_management_host_count_top99p_sum", + "workflow_executions_usage_agg_sum": "workflow_executions_usage_agg_sum", + } + + def __init__(self_, agent_host_top99p_sum: Union[int, UnsetType]=unset, ai_credits_agent_builder_ai_credits_agg_sum: Union[int, UnsetType]=unset, ai_credits_agg_sum: Union[int, UnsetType]=unset, ai_credits_bits_assistant_ai_credits_agg_sum: Union[int, UnsetType]=unset, ai_credits_bits_dev_ai_credits_agg_sum: Union[int, UnsetType]=unset, ai_credits_bits_sre_ai_credits_agg_sum: Union[int, UnsetType]=unset, apm_azure_app_service_host_top99p_sum: Union[int, UnsetType]=unset, apm_devsecops_host_top99p_sum: Union[int, UnsetType]=unset, apm_enterprise_standalone_hosts_top99p_sum: Union[int, UnsetType]=unset, apm_fargate_count_avg_sum: Union[int, UnsetType]=unset, apm_host_top99p_sum: Union[int, UnsetType]=unset, apm_pro_standalone_hosts_top99p_sum: Union[int, UnsetType]=unset, appsec_fargate_count_avg_sum: Union[int, UnsetType]=unset, asm_serverless_agg_sum: Union[int, UnsetType]=unset, audit_logs_lines_indexed_agg_sum: Union[int, UnsetType]=unset, audit_trail_enabled_hwm_sum: Union[int, UnsetType]=unset, audit_trail_event_forwarding_events_agg_sum: Union[int, UnsetType]=unset, avg_profiled_fargate_tasks_sum: Union[int, UnsetType]=unset, aws_host_top99p_sum: Union[int, UnsetType]=unset, aws_lambda_func_count: Union[int, UnsetType]=unset, aws_lambda_invocations_sum: Union[int, UnsetType]=unset, azure_app_service_top99p_sum: Union[int, UnsetType]=unset, azure_host_top99p_sum: Union[int, UnsetType]=unset, billable_ingested_bytes_agg_sum: Union[int, UnsetType]=unset, bits_ai_investigations_agg_sum: Union[int, UnsetType]=unset, browser_rum_lite_session_count_agg_sum: Union[int, UnsetType]=unset, browser_rum_replay_session_count_agg_sum: Union[int, UnsetType]=unset, browser_rum_units_agg_sum: Union[int, UnsetType]=unset, ccm_anthropic_spend_last_sum: Union[int, UnsetType]=unset, ccm_aws_spend_last_sum: Union[int, UnsetType]=unset, ccm_azure_spend_last_sum: Union[int, UnsetType]=unset, ccm_confluent_spend_last_sum: Union[int, UnsetType]=unset, ccm_databricks_spend_last_sum: Union[int, UnsetType]=unset, ccm_elastic_spend_last_sum: Union[int, UnsetType]=unset, ccm_fastly_spend_last_sum: Union[int, UnsetType]=unset, ccm_gcp_spend_last_sum: Union[int, UnsetType]=unset, ccm_github_spend_last_sum: Union[int, UnsetType]=unset, ccm_mongodb_spend_last_sum: Union[int, UnsetType]=unset, ccm_oci_spend_last_sum: Union[int, UnsetType]=unset, ccm_openai_spend_last_sum: Union[int, UnsetType]=unset, ccm_snowflake_spend_last_sum: Union[int, UnsetType]=unset, ccm_spend_monitored_ent_last_sum: Union[int, UnsetType]=unset, ccm_spend_monitored_pro_last_sum: Union[int, UnsetType]=unset, ccm_twilio_spend_last_sum: Union[int, UnsetType]=unset, ci_pipeline_indexed_spans_agg_sum: Union[int, UnsetType]=unset, ci_test_indexed_spans_agg_sum: Union[int, UnsetType]=unset, ci_visibility_itr_committers_hwm_sum: Union[int, UnsetType]=unset, ci_visibility_pipeline_committers_hwm_sum: Union[int, UnsetType]=unset, ci_visibility_test_committers_hwm_sum: Union[int, UnsetType]=unset, cloud_cost_management_aws_host_count_avg_sum: Union[int, UnsetType]=unset, cloud_cost_management_azure_host_count_avg_sum: Union[int, UnsetType]=unset, cloud_cost_management_gcp_host_count_avg_sum: Union[int, UnsetType]=unset, cloud_cost_management_host_count_avg_sum: Union[int, UnsetType]=unset, cloud_cost_management_oci_host_count_avg_sum: Union[int, UnsetType]=unset, cloud_siem_events_agg_sum: Union[int, UnsetType]=unset, cloud_siem_indexed_logs_agg_sum: Union[int, UnsetType]=unset, code_analysis_sa_committers_hwm_sum: Union[int, UnsetType]=unset, code_analysis_sca_committers_hwm_sum: Union[int, UnsetType]=unset, code_security_host_top99p_sum: Union[int, UnsetType]=unset, container_avg_sum: Union[int, UnsetType]=unset, container_excl_agent_avg_sum: Union[int, UnsetType]=unset, container_hwm_sum: Union[int, UnsetType]=unset, csm_container_enterprise_compliance_count_agg_sum: Union[int, UnsetType]=unset, csm_container_enterprise_cws_count_agg_sum: Union[int, UnsetType]=unset, csm_container_enterprise_total_count_agg_sum: Union[int, UnsetType]=unset, csm_host_enterprise_aas_host_count_top99p_sum: Union[int, UnsetType]=unset, csm_host_enterprise_aws_host_count_top99p_sum: Union[int, UnsetType]=unset, csm_host_enterprise_azure_host_count_top99p_sum: Union[int, UnsetType]=unset, csm_host_enterprise_compliance_host_count_top99p_sum: Union[int, UnsetType]=unset, csm_host_enterprise_cws_host_count_top99p_sum: Union[int, UnsetType]=unset, csm_host_enterprise_gcp_host_count_top99p_sum: Union[int, UnsetType]=unset, csm_host_enterprise_oci_host_count_top99p_sum: Union[int, UnsetType]=unset, csm_host_enterprise_total_host_count_top99p_sum: Union[int, UnsetType]=unset, csm_host_pro_hosts_agentless_scanners_agg_sum: Union[int, UnsetType]=unset, csm_host_pro_hosts_agentless_scanners_top99p_sum: Union[int, UnsetType]=unset, csm_host_pro_oci_host_count_top99p_sum: Union[int, UnsetType]=unset, cspm_aas_host_top99p_sum: Union[int, UnsetType]=unset, cspm_aws_host_top99p_sum: Union[int, UnsetType]=unset, cspm_azure_host_top99p_sum: Union[int, UnsetType]=unset, cspm_container_avg_sum: Union[int, UnsetType]=unset, cspm_container_hwm_sum: Union[int, UnsetType]=unset, cspm_gcp_host_top99p_sum: Union[int, UnsetType]=unset, cspm_host_top99p_sum: Union[int, UnsetType]=unset, cspm_hosts_agentless_scanners_agg_sum: Union[int, UnsetType]=unset, cspm_hosts_agentless_scanners_top99p_sum: Union[int, UnsetType]=unset, custom_historical_ts_sum: Union[int, UnsetType]=unset, custom_live_ts_sum: Union[int, UnsetType]=unset, custom_ts_sum: Union[int, UnsetType]=unset, cws_container_avg_sum: Union[int, UnsetType]=unset, cws_fargate_task_avg_sum: Union[int, UnsetType]=unset, cws_host_top99p_sum: Union[int, UnsetType]=unset, data_jobs_monitoring_host_hr_agg_sum: Union[int, UnsetType]=unset, data_stream_monitoring_host_count_agg_sum: Union[int, UnsetType]=unset, data_stream_monitoring_host_count_top99p_sum: Union[int, UnsetType]=unset, dbm_host_top99p_sum: Union[int, UnsetType]=unset, dbm_queries_avg_sum: Union[int, UnsetType]=unset, do_jobs_monitoring_orchestrators_job_hours_agg_sum: Union[int, UnsetType]=unset, end_date: Union[datetime, UnsetType]=unset, eph_infra_host_agent_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_alibaba_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_aws_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_azure_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_basic_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_basic_infra_basic_agent_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_basic_infra_basic_vsphere_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_ent_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_gcp_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_heroku_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_only_aas_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_only_vsphere_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_opentelemetry_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_opentelemetry_apm_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_pro_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_proplus_agg_sum: Union[int, UnsetType]=unset, eph_infra_host_proxmox_agg_sum: Union[int, UnsetType]=unset, error_tracking_apm_error_events_agg_sum: Union[int, UnsetType]=unset, error_tracking_error_events_agg_sum: Union[int, UnsetType]=unset, error_tracking_events_agg_sum: Union[int, UnsetType]=unset, error_tracking_rum_error_events_agg_sum: Union[int, UnsetType]=unset, event_management_correlation_agg_sum: Union[int, UnsetType]=unset, event_management_correlation_correlated_events_agg_sum: Union[int, UnsetType]=unset, event_management_correlation_correlated_related_events_agg_sum: Union[int, UnsetType]=unset, fargate_container_profiler_profiling_fargate_avg_sum: Union[int, UnsetType]=unset, fargate_container_profiler_profiling_fargate_eks_avg_sum: Union[int, UnsetType]=unset, fargate_tasks_count_avg_sum: Union[int, UnsetType]=unset, fargate_tasks_count_hwm_sum: Union[int, UnsetType]=unset, feature_flags_config_requests_agg_sum: Union[int, UnsetType]=unset, flex_logs_compute_large_avg_sum: Union[int, UnsetType]=unset, flex_logs_compute_medium_avg_sum: Union[int, UnsetType]=unset, flex_logs_compute_small_avg_sum: Union[int, UnsetType]=unset, flex_logs_compute_xlarge_avg_sum: Union[int, UnsetType]=unset, flex_logs_compute_xsmall_avg_sum: Union[int, UnsetType]=unset, flex_logs_starter_avg_sum: Union[int, UnsetType]=unset, flex_logs_starter_storage_index_avg_sum: Union[int, UnsetType]=unset, flex_logs_starter_storage_retention_adjustment_avg_sum: Union[int, UnsetType]=unset, flex_stored_logs_avg_sum: Union[int, UnsetType]=unset, forwarding_events_bytes_agg_sum: Union[int, UnsetType]=unset, gcp_host_top99p_sum: Union[int, UnsetType]=unset, heroku_host_top99p_sum: Union[int, UnsetType]=unset, incident_management_monthly_active_users_hwm_sum: Union[int, UnsetType]=unset, incident_management_seats_hwm_sum: Union[int, UnsetType]=unset, indexed_events_count_agg_sum: Union[int, UnsetType]=unset, indexed_points_agg_sum: Union[int, UnsetType]=unset, infra_cpu_agg_sum: Union[int, UnsetType]=unset, infra_cpu_avg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_agg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_avg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_basic_agg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_agent_basic_avg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_aws_agg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_aws_avg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_azure_agg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_azure_avg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_gcp_agg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_gcp_avg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_agg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_avg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_basic_agg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_nutanix_basic_avg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_opentelemetry_agg_sum: Union[int, UnsetType]=unset, infra_cpu_default_infra_host_vcpu_opentelemetry_avg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_agent_agg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_agent_avg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_aws_agg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_aws_avg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_azure_agg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_azure_avg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_gcp_agg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_gcp_avg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_nutanix_agg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_nutanix_avg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_opentelemetry_agg_sum: Union[int, UnsetType]=unset, infra_cpu_observed_infra_host_vcpu_opentelemetry_avg_sum: Union[int, UnsetType]=unset, infra_edge_monitoring_devices_top99p_sum: Union[int, UnsetType]=unset, infra_host_basic_infra_basic_agent_top99p_sum: Union[int, UnsetType]=unset, infra_host_basic_infra_basic_vsphere_top99p_sum: Union[int, UnsetType]=unset, infra_host_basic_top99p_sum: Union[int, UnsetType]=unset, infra_host_top99p_sum: Union[int, UnsetType]=unset, infra_storage_mgmt_objects_count_avg_sum: Union[int, UnsetType]=unset, ingest_points_agg_sum: Union[int, UnsetType]=unset, ingested_events_bytes_agg_sum: Union[int, UnsetType]=unset, iot_apm_host_agg_sum: Union[int, UnsetType]=unset, iot_apm_host_top99p_sum: Union[int, UnsetType]=unset, iot_device_agg_sum: Union[int, UnsetType]=unset, iot_device_top99p_sum: Union[int, UnsetType]=unset, last_updated: Union[datetime, UnsetType]=unset, live_indexed_events_agg_sum: Union[int, UnsetType]=unset, live_ingested_bytes_agg_sum: Union[int, UnsetType]=unset, llm_observability_15day_retention_spans_agg_sum: Union[int, UnsetType]=unset, llm_observability_30day_retention_spans_agg_sum: Union[int, UnsetType]=unset, llm_observability_60day_retention_spans_agg_sum: Union[int, UnsetType]=unset, llm_observability_90day_retention_spans_agg_sum: Union[int, UnsetType]=unset, llm_observability_agg_sum: Union[int, UnsetType]=unset, llm_observability_min_spend_agg_sum: Union[int, UnsetType]=unset, logs_archive_search_gb_scanned_agg_sum: Union[int, UnsetType]=unset, logs_by_retention: Union[LogsByRetention, UnsetType]=unset, metric_names_agg_sum: Union[int, UnsetType]=unset, mobile_rum_lite_session_count_agg_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_agg_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_android_agg_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_flutter_agg_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_ios_agg_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_reactnative_agg_sum: Union[int, UnsetType]=unset, mobile_rum_session_count_roku_agg_sum: Union[int, UnsetType]=unset, mobile_rum_units_agg_sum: Union[int, UnsetType]=unset, ndm_netflow_events_agg_sum: Union[int, UnsetType]=unset, netflow_indexed_events_count_agg_sum: Union[int, UnsetType]=unset, network_device_wireless_top99p_sum: Union[int, UnsetType]=unset, network_path_agg_sum: Union[int, UnsetType]=unset, npm_host_top99p_sum: Union[int, UnsetType]=unset, observability_pipelines_bytes_processed_agg_sum: Union[int, UnsetType]=unset, oci_host_agg_sum: Union[int, UnsetType]=unset, oci_host_top99p_sum: Union[int, UnsetType]=unset, on_call_seat_hwm_sum: Union[int, UnsetType]=unset, online_archive_events_count_agg_sum: Union[int, UnsetType]=unset, opentelemetry_apm_host_top99p_sum: Union[int, UnsetType]=unset, opentelemetry_host_top99p_sum: Union[int, UnsetType]=unset, product_analytics_agg_sum: Union[int, UnsetType]=unset, profiling_aas_count_top99p_sum: Union[int, UnsetType]=unset, profiling_container_agent_count_avg: Union[int, UnsetType]=unset, profiling_host_count_top99p_sum: Union[int, UnsetType]=unset, proxmox_host_agg_sum: Union[int, UnsetType]=unset, proxmox_host_top99p_sum: Union[int, UnsetType]=unset, published_app_hwm_sum: Union[int, UnsetType]=unset, rehydrated_indexed_events_agg_sum: Union[int, UnsetType]=unset, rehydrated_ingested_bytes_agg_sum: Union[int, UnsetType]=unset, rum_browser_and_mobile_session_count: Union[int, UnsetType]=unset, rum_browser_legacy_session_count_agg_sum: Union[int, UnsetType]=unset, rum_browser_lite_session_count_agg_sum: Union[int, UnsetType]=unset, rum_browser_replay_session_count_agg_sum: Union[int, UnsetType]=unset, rum_indexed_sessions_agg_sum: Union[int, UnsetType]=unset, rum_ingested_sessions_agg_sum: Union[int, UnsetType]=unset, rum_lite_session_count_agg_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_android_agg_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_flutter_agg_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_ios_agg_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_reactnative_agg_sum: Union[int, UnsetType]=unset, rum_mobile_legacy_session_count_roku_agg_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_android_agg_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_flutter_agg_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_ios_agg_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_kotlinmultiplatform_agg_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_reactnative_agg_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_roku_agg_sum: Union[int, UnsetType]=unset, rum_mobile_lite_session_count_unity_agg_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_android_agg_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_ios_agg_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_kotlinmultiplatform_agg_sum: Union[int, UnsetType]=unset, rum_mobile_replay_session_count_reactnative_agg_sum: Union[int, UnsetType]=unset, rum_replay_session_count_agg_sum: Union[int, UnsetType]=unset, rum_session_count_agg_sum: Union[int, UnsetType]=unset, rum_session_replay_add_on_agg_sum: Union[int, UnsetType]=unset, rum_total_session_count_agg_sum: Union[int, UnsetType]=unset, rum_units_agg_sum: Union[int, UnsetType]=unset, sca_fargate_count_avg_sum: Union[int, UnsetType]=unset, sca_fargate_count_hwm_sum: Union[int, UnsetType]=unset, sds_apm_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_events_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_logs_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_rum_scanned_bytes_sum: Union[int, UnsetType]=unset, sds_total_scanned_bytes_sum: Union[int, UnsetType]=unset, serverless_apps_apm_apm_azure_appservice_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_apm_azure_azurefunction_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_apm_azure_containerapp_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_apm_fargate_ecs_tasks_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_apm_gcp_cloudfunction_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_apm_gcp_cloudrun_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg_sum: Union[int, UnsetType]=unset, serverless_apps_apm_excl_fargate_avg_sum: Union[int, UnsetType]=unset, serverless_apps_azure_container_app_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_azure_count_avg_sum: Union[int, UnsetType]=unset, serverless_apps_azure_function_app_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_azure_web_app_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_dsm_fargate_tasks_avg_sum: Union[int, UnsetType]=unset, serverless_apps_ecs_avg_sum: Union[int, UnsetType]=unset, serverless_apps_eks_avg_sum: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_avg_sum: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_azure_container_app_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_azure_function_app_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_azure_web_app_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_google_cloud_functions_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_google_cloud_run_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg_sum: Union[int, UnsetType]=unset, serverless_apps_google_cloud_functions_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_google_cloud_run_instances_avg_sum: Union[int, UnsetType]=unset, serverless_apps_google_count_avg_sum: Union[int, UnsetType]=unset, serverless_apps_infra_gcp_gke_autopilot_pods_avg_sum: Union[int, UnsetType]=unset, serverless_apps_total_count_avg_sum: Union[int, UnsetType]=unset, siem_12mo_retention_agg_sum: Union[int, UnsetType]=unset, siem_6mo_retention_agg_sum: Union[int, UnsetType]=unset, siem_analyzed_logs_add_on_count_agg_sum: Union[int, UnsetType]=unset, snmp_device_count_agg_sum: Union[int, UnsetType]=unset, snmp_device_count_top99p_sum: Union[int, UnsetType]=unset, start_date: Union[datetime, UnsetType]=unset, synthetics_browser_check_calls_count_agg_sum: Union[int, UnsetType]=unset, synthetics_check_calls_count_agg_sum: Union[int, UnsetType]=unset, synthetics_mobile_test_runs_agg_sum: Union[int, UnsetType]=unset, synthetics_parallel_testing_max_slots_hwm_sum: Union[int, UnsetType]=unset, trace_search_indexed_events_count_agg_sum: Union[int, UnsetType]=unset, twol_ingested_events_bytes_agg_sum: Union[int, UnsetType]=unset, universal_service_monitoring_host_top99p_sum: Union[int, UnsetType]=unset, usage: Union[List[UsageSummaryDate], UnsetType]=unset, vsphere_host_top99p_sum: Union[int, UnsetType]=unset, vuln_management_host_count_top99p_sum: Union[int, UnsetType]=unset, workflow_executions_usage_agg_sum: Union[int, UnsetType]=unset, **kwargs): + """ + Response summarizing all usage aggregated across the months in the request for + all organizations, and broken down by month and by organization. + + For SDK users only: all fields at this response level are accessible through the + ``additionalProperties`` map. Existing typed-field getters are unchanged. New billing + dimensions will not have typed-field getters. Use + `Get available fields for usage summary `_ + to enumerate every available key. + + :param agent_host_top99p_sum: Shows the 99th percentile of all agent hosts over all hours in the current month for all organizations. + :type agent_host_top99p_sum: int, optional + + :param ai_credits_agent_builder_ai_credits_agg_sum: Shows the sum of all AI credits used by Agent Builder over all hours in the current month for all organizations. + :type ai_credits_agent_builder_ai_credits_agg_sum: int, optional + + :param ai_credits_agg_sum: Shows the sum of all AI credits over all hours in the current month for all organizations. + :type ai_credits_agg_sum: int, optional + + :param ai_credits_bits_assistant_ai_credits_agg_sum: Shows the sum of all AI credits used by Bits AI Assistant over all hours in the current month for all organizations. + :type ai_credits_bits_assistant_ai_credits_agg_sum: int, optional + + :param ai_credits_bits_dev_ai_credits_agg_sum: Shows the sum of all AI credits used by Bits AI Dev over all hours in the current month for all organizations. + :type ai_credits_bits_dev_ai_credits_agg_sum: int, optional + + :param ai_credits_bits_sre_ai_credits_agg_sum: Shows the sum of all AI credits used by Bits AI SRE over all hours in the current month for all organizations. + :type ai_credits_bits_sre_ai_credits_agg_sum: int, optional + + :param apm_azure_app_service_host_top99p_sum: Shows the 99th percentile of all Azure app services using APM over all hours in the current month all organizations. + :type apm_azure_app_service_host_top99p_sum: int, optional + + :param apm_devsecops_host_top99p_sum: Shows the 99th percentile of all APM DevSecOps hosts over all hours in the current month for all organizations. + :type apm_devsecops_host_top99p_sum: int, optional + + :param apm_enterprise_standalone_hosts_top99p_sum: Shows the sum of the 99th percentile of all distinct standalone Enterprise hosts over all hours in the current month for all organizations. + :type apm_enterprise_standalone_hosts_top99p_sum: int, optional + + :param apm_fargate_count_avg_sum: Shows the average of all APM ECS Fargate tasks over all hours in the current month for all organizations. + :type apm_fargate_count_avg_sum: int, optional + + :param apm_host_top99p_sum: Shows the 99th percentile of all distinct APM hosts over all hours in the current month for all organizations. + :type apm_host_top99p_sum: int, optional + + :param apm_pro_standalone_hosts_top99p_sum: Shows the sum of the 99th percentile of all distinct standalone Pro hosts over all hours in the current month for all organizations. + :type apm_pro_standalone_hosts_top99p_sum: int, optional + + :param appsec_fargate_count_avg_sum: Shows the average of all Application Security Monitoring ECS Fargate tasks over all hours in the current month for all organizations. + :type appsec_fargate_count_avg_sum: int, optional + + :param asm_serverless_agg_sum: Shows the sum of all Application Security Monitoring Serverless invocations over all hours in the current months for all organizations. + :type asm_serverless_agg_sum: int, optional + + :param audit_logs_lines_indexed_agg_sum: Shows the sum of all audit logs lines indexed over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type audit_logs_lines_indexed_agg_sum: int, optional + + :param audit_trail_enabled_hwm_sum: Shows the total number of organizations that had Audit Trail enabled over a specific number of months. + :type audit_trail_enabled_hwm_sum: int, optional + + :param audit_trail_event_forwarding_events_agg_sum: Shows the sum of all Audit Trail event forwarding events over all hours in the current month for all organizations. + :type audit_trail_event_forwarding_events_agg_sum: int, optional + + :param avg_profiled_fargate_tasks_sum: The average total count for Fargate Container Profiler over all hours in the current month for all organizations. + :type avg_profiled_fargate_tasks_sum: int, optional + + :param aws_host_top99p_sum: Shows the 99th percentile of all AWS hosts over all hours in the current month for all organizations. + :type aws_host_top99p_sum: int, optional + + :param aws_lambda_func_count: Shows the average of the number of functions that executed 1 or more times each hour in the current month for all organizations. + :type aws_lambda_func_count: int, optional + + :param aws_lambda_invocations_sum: Shows the sum of all AWS Lambda invocations over all hours in the current month for all organizations. + :type aws_lambda_invocations_sum: int, optional + + :param azure_app_service_top99p_sum: Shows the 99th percentile of all Azure app services over all hours in the current month for all organizations. + :type azure_app_service_top99p_sum: int, optional + + :param azure_host_top99p_sum: Shows the 99th percentile of all Azure hosts over all hours in the current month for all organizations. + :type azure_host_top99p_sum: int, optional + + :param billable_ingested_bytes_agg_sum: Shows the sum of all log bytes ingested over all hours in the current month for all organizations. + :type billable_ingested_bytes_agg_sum: int, optional + + :param bits_ai_investigations_agg_sum: Shows the sum of all Bits AI Investigations over all hours in the current month for all organizations. + :type bits_ai_investigations_agg_sum: int, optional + + :param browser_rum_lite_session_count_agg_sum: Shows the sum of all browser lite sessions over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type browser_rum_lite_session_count_agg_sum: int, optional + + :param browser_rum_replay_session_count_agg_sum: Shows the sum of all browser replay sessions over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). + :type browser_rum_replay_session_count_agg_sum: int, optional + + :param browser_rum_units_agg_sum: Shows the sum of all browser RUM units over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type browser_rum_units_agg_sum: int, optional + + :param ccm_anthropic_spend_last_sum: Shows the sum of the last value of Anthropic cloud spend monitored in the current month for all organizations. + :type ccm_anthropic_spend_last_sum: int, optional + + :param ccm_aws_spend_last_sum: Shows the sum of the last value of AWS cloud spend monitored in the current month for all organizations. + :type ccm_aws_spend_last_sum: int, optional + + :param ccm_azure_spend_last_sum: Shows the sum of the last value of Azure cloud spend monitored in the current month for all organizations. + :type ccm_azure_spend_last_sum: int, optional + + :param ccm_confluent_spend_last_sum: Shows the sum of the last value of Confluent cloud spend monitored in the current month for all organizations. + :type ccm_confluent_spend_last_sum: int, optional + + :param ccm_databricks_spend_last_sum: Shows the sum of the last value of Databricks cloud spend monitored in the current month for all organizations. + :type ccm_databricks_spend_last_sum: int, optional + + :param ccm_elastic_spend_last_sum: Shows the sum of the last value of Elastic cloud spend monitored in the current month for all organizations. + :type ccm_elastic_spend_last_sum: int, optional + + :param ccm_fastly_spend_last_sum: Shows the sum of the last value of Fastly cloud spend monitored in the current month for all organizations. + :type ccm_fastly_spend_last_sum: int, optional + + :param ccm_gcp_spend_last_sum: Shows the sum of the last value of GCP cloud spend monitored in the current month for all organizations. + :type ccm_gcp_spend_last_sum: int, optional + + :param ccm_github_spend_last_sum: Shows the sum of the last value of GitHub cloud spend monitored in the current month for all organizations. + :type ccm_github_spend_last_sum: int, optional + + :param ccm_mongodb_spend_last_sum: Shows the sum of the last value of MongoDB cloud spend monitored in the current month for all organizations. + :type ccm_mongodb_spend_last_sum: int, optional + + :param ccm_oci_spend_last_sum: Shows the sum of the last value of OCI cloud spend monitored in the current month for all organizations. + :type ccm_oci_spend_last_sum: int, optional + + :param ccm_openai_spend_last_sum: Shows the sum of the last value of OpenAI cloud spend monitored in the current month for all organizations. + :type ccm_openai_spend_last_sum: int, optional + + :param ccm_snowflake_spend_last_sum: Shows the sum of the last value of Snowflake cloud spend monitored in the current month for all organizations. + :type ccm_snowflake_spend_last_sum: int, optional + + :param ccm_spend_monitored_ent_last_sum: Shows the sum of the last value of the amount of cloud spend monitored for Enterprise in the current month for all organizations. + :type ccm_spend_monitored_ent_last_sum: int, optional + + :param ccm_spend_monitored_pro_last_sum: Shows the sum of the last value of the amount of cloud spend monitored for Pro in the current month for all organizations. + :type ccm_spend_monitored_pro_last_sum: int, optional + + :param ccm_twilio_spend_last_sum: Shows the sum of the last value of Twilio cloud spend monitored in the current month for all organizations. + :type ccm_twilio_spend_last_sum: int, optional + + :param ci_pipeline_indexed_spans_agg_sum: Shows the sum of all CI pipeline indexed spans over all hours in the current month for all organizations. + :type ci_pipeline_indexed_spans_agg_sum: int, optional + + :param ci_test_indexed_spans_agg_sum: Shows the sum of all CI test indexed spans over all hours in the current month for all organizations. + :type ci_test_indexed_spans_agg_sum: int, optional + + :param ci_visibility_itr_committers_hwm_sum: Shows the high-water mark of all CI visibility intelligent test runner committers over all hours in the current month for all organizations. + :type ci_visibility_itr_committers_hwm_sum: int, optional + + :param ci_visibility_pipeline_committers_hwm_sum: Shows the high-water mark of all CI visibility pipeline committers over all hours in the current month for all organizations. + :type ci_visibility_pipeline_committers_hwm_sum: int, optional + + :param ci_visibility_test_committers_hwm_sum: Shows the high-water mark of all CI visibility test committers over all hours in the current month for all organizations. + :type ci_visibility_test_committers_hwm_sum: int, optional + + :param cloud_cost_management_aws_host_count_avg_sum: Sum of the host count average for Cloud Cost Management for AWS. + :type cloud_cost_management_aws_host_count_avg_sum: int, optional + + :param cloud_cost_management_azure_host_count_avg_sum: Sum of the host count average for Cloud Cost Management for Azure. + :type cloud_cost_management_azure_host_count_avg_sum: int, optional + + :param cloud_cost_management_gcp_host_count_avg_sum: Sum of the host count average for Cloud Cost Management for GCP. + :type cloud_cost_management_gcp_host_count_avg_sum: int, optional + + :param cloud_cost_management_host_count_avg_sum: Sum of the host count average for Cloud Cost Management for all cloud providers. + :type cloud_cost_management_host_count_avg_sum: int, optional + + :param cloud_cost_management_oci_host_count_avg_sum: Sum of the average host counts for Cloud Cost Management on OCI. + :type cloud_cost_management_oci_host_count_avg_sum: int, optional + + :param cloud_siem_events_agg_sum: Shows the sum of all Cloud Security Information and Event Management events over all hours in the current month for all organizations. + :type cloud_siem_events_agg_sum: int, optional + + :param cloud_siem_indexed_logs_agg_sum: Shows the sum of all Cloud SIEM Indexed Logs over all hours in the current month for all organizations. + :type cloud_siem_indexed_logs_agg_sum: int, optional + + :param code_analysis_sa_committers_hwm_sum: Shows the high-water mark of all Static Analysis committers over all hours in the current month for all organizations. + :type code_analysis_sa_committers_hwm_sum: int, optional + + :param code_analysis_sca_committers_hwm_sum: Shows the high-water mark of all static Software Composition Analysis committers over all hours in the current month for all organizations. + :type code_analysis_sca_committers_hwm_sum: int, optional + + :param code_security_host_top99p_sum: Shows the 99th percentile of all Code Security hosts over all hours in the current month for all organizations. + :type code_security_host_top99p_sum: int, optional + + :param container_avg_sum: Shows the average of all distinct containers over all hours in the current month for all organizations. + :type container_avg_sum: int, optional + + :param container_excl_agent_avg_sum: Shows the average of the containers without the Datadog Agent over all hours in the current month for all organizations. + :type container_excl_agent_avg_sum: int, optional + + :param container_hwm_sum: Shows the sum of the high-water marks of all distinct containers over all hours in the current month for all organizations. + :type container_hwm_sum: int, optional + + :param csm_container_enterprise_compliance_count_agg_sum: Shows the sum of all Cloud Security Management Enterprise compliance containers over all hours in the current month for all organizations. + :type csm_container_enterprise_compliance_count_agg_sum: int, optional + + :param csm_container_enterprise_cws_count_agg_sum: Shows the sum of all Cloud Security Management Enterprise Cloud Workload Security containers over all hours in the current month for all organizations. + :type csm_container_enterprise_cws_count_agg_sum: int, optional + + :param csm_container_enterprise_total_count_agg_sum: Shows the sum of all Cloud Security Management Enterprise containers over all hours in the current month for all organizations. + :type csm_container_enterprise_total_count_agg_sum: int, optional + + :param csm_host_enterprise_aas_host_count_top99p_sum: Shows the 99th percentile of all Cloud Security Management Enterprise Azure app services hosts over all hours in the current month for all organizations. + :type csm_host_enterprise_aas_host_count_top99p_sum: int, optional + + :param csm_host_enterprise_aws_host_count_top99p_sum: Shows the 99th percentile of all Cloud Security Management Enterprise AWS hosts over all hours in the current month for all organizations. + :type csm_host_enterprise_aws_host_count_top99p_sum: int, optional + + :param csm_host_enterprise_azure_host_count_top99p_sum: Shows the 99th percentile of all Cloud Security Management Enterprise Azure hosts over all hours in the current month for all organizations. + :type csm_host_enterprise_azure_host_count_top99p_sum: int, optional + + :param csm_host_enterprise_compliance_host_count_top99p_sum: Shows the 99th percentile of all Cloud Security Management Enterprise compliance hosts over all hours in the current month for all organizations. + :type csm_host_enterprise_compliance_host_count_top99p_sum: int, optional + + :param csm_host_enterprise_cws_host_count_top99p_sum: Shows the 99th percentile of all Cloud Security Management Enterprise Cloud Workload Security hosts over all hours in the current month for all organizations. + :type csm_host_enterprise_cws_host_count_top99p_sum: int, optional + + :param csm_host_enterprise_gcp_host_count_top99p_sum: Shows the 99th percentile of all Cloud Security Management Enterprise GCP hosts over all hours in the current month for all organizations. + :type csm_host_enterprise_gcp_host_count_top99p_sum: int, optional + + :param csm_host_enterprise_oci_host_count_top99p_sum: Shows the 99th percentile of all Cloud Security Management Enterprise OCI hosts over all hours in the current month for all organizations. + :type csm_host_enterprise_oci_host_count_top99p_sum: int, optional + + :param csm_host_enterprise_total_host_count_top99p_sum: Shows the 99th percentile of all Cloud Security Management Enterprise hosts over all hours in the current month for all organizations. + :type csm_host_enterprise_total_host_count_top99p_sum: int, optional + + :param csm_host_pro_hosts_agentless_scanners_agg_sum: Shows the sum of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current month for all organizations. + :type csm_host_pro_hosts_agentless_scanners_agg_sum: int, optional + + :param csm_host_pro_hosts_agentless_scanners_top99p_sum: Shows the 99th percentile of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current month for all organizations. + :type csm_host_pro_hosts_agentless_scanners_top99p_sum: int, optional + + :param csm_host_pro_oci_host_count_top99p_sum: Shows the 99th percentile of all Cloud Security Management Pro OCI hosts over all hours in the current month for all organizations. + :type csm_host_pro_oci_host_count_top99p_sum: int, optional + + :param cspm_aas_host_top99p_sum: Shows the 99th percentile of all Cloud Security Management Pro Azure app services hosts over all hours in the current month for all organizations. + :type cspm_aas_host_top99p_sum: int, optional + + :param cspm_aws_host_top99p_sum: Shows the 99th percentile of all Cloud Security Management Pro AWS hosts over all hours in the current month for all organizations. + :type cspm_aws_host_top99p_sum: int, optional + + :param cspm_azure_host_top99p_sum: Shows the 99th percentile of all Cloud Security Management Pro Azure hosts over all hours in the current month for all organizations. + :type cspm_azure_host_top99p_sum: int, optional + + :param cspm_container_avg_sum: Shows the average number of Cloud Security Management Pro containers over all hours in the current month for all organizations. + :type cspm_container_avg_sum: int, optional + + :param cspm_container_hwm_sum: Shows the sum of the high-water marks of Cloud Security Management Pro containers over all hours in the current month for all organizations. + :type cspm_container_hwm_sum: int, optional + + :param cspm_gcp_host_top99p_sum: Shows the 99th percentile of all Cloud Security Management Pro GCP hosts over all hours in the current month for all organizations. + :type cspm_gcp_host_top99p_sum: int, optional + + :param cspm_host_top99p_sum: Shows the 99th percentile of all Cloud Security Management Pro hosts over all hours in the current month for all organizations. + :type cspm_host_top99p_sum: int, optional + + :param cspm_hosts_agentless_scanners_agg_sum: Shows the sum of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current month for all organizations. + :type cspm_hosts_agentless_scanners_agg_sum: int, optional + + :param cspm_hosts_agentless_scanners_top99p_sum: Shows the 99th percentile of all Cloud Security Management Pro Agentless scanner hosts over all hours in the current month for all organizations. + :type cspm_hosts_agentless_scanners_top99p_sum: int, optional + + :param custom_historical_ts_sum: Shows the average number of distinct historical custom metrics over all hours in the current month for all organizations. + :type custom_historical_ts_sum: int, optional + + :param custom_live_ts_sum: Shows the average number of distinct live custom metrics over all hours in the current month for all organizations. + :type custom_live_ts_sum: int, optional + + :param custom_ts_sum: Shows the average number of distinct custom metrics over all hours in the current month for all organizations. + :type custom_ts_sum: int, optional + + :param cws_container_avg_sum: Shows the average of all distinct Cloud Workload Security containers over all hours in the current month for all organizations. + :type cws_container_avg_sum: int, optional + + :param cws_fargate_task_avg_sum: Shows the average of all distinct Cloud Workload Security Fargate tasks over all hours in the current month for all organizations. + :type cws_fargate_task_avg_sum: int, optional + + :param cws_host_top99p_sum: Shows the 99th percentile of all Cloud Workload Security hosts over all hours in the current month for all organizations. + :type cws_host_top99p_sum: int, optional + + :param data_jobs_monitoring_host_hr_agg_sum: Shows the sum of Data Jobs Monitoring hosts over all hours in the current months for all organizations + :type data_jobs_monitoring_host_hr_agg_sum: int, optional + + :param data_stream_monitoring_host_count_agg_sum: Shows the sum of all Data Streams Monitoring hosts over all hours in the current month for all organizations. + :type data_stream_monitoring_host_count_agg_sum: int, optional + + :param data_stream_monitoring_host_count_top99p_sum: Shows the 99th percentile of all Data Streams Monitoring hosts over all hours in the current month for all organizations. + :type data_stream_monitoring_host_count_top99p_sum: int, optional + + :param dbm_host_top99p_sum: Shows the 99th percentile of all Database Monitoring hosts over all hours in the current month for all organizations. + :type dbm_host_top99p_sum: int, optional + + :param dbm_queries_avg_sum: Shows the average of all distinct Database Monitoring Normalized Queries over all hours in the current month for all organizations. + :type dbm_queries_avg_sum: int, optional + + :param do_jobs_monitoring_orchestrators_job_hours_agg_sum: Shows the sum of all orchestrator job hours over all hours in the current month for all organizations. + :type do_jobs_monitoring_orchestrators_job_hours_agg_sum: int, optional + + :param end_date: Shows the last date of usage in the current month for all organizations. + :type end_date: datetime, optional + + :param eph_infra_host_agent_agg_sum: Shows the sum of all ephemeral infrastructure hosts with the Datadog Agent over all hours in the current month for all organizations. + :type eph_infra_host_agent_agg_sum: int, optional + + :param eph_infra_host_alibaba_agg_sum: Shows the sum of all ephemeral infrastructure hosts on Alibaba over all hours in the current month for all organizations. + :type eph_infra_host_alibaba_agg_sum: int, optional + + :param eph_infra_host_aws_agg_sum: Shows the sum of all ephemeral infrastructure hosts on AWS over all hours in the current month for all organizations. + :type eph_infra_host_aws_agg_sum: int, optional + + :param eph_infra_host_azure_agg_sum: Shows the sum of all ephemeral infrastructure hosts on Azure over all hours in the current month for all organizations. + :type eph_infra_host_azure_agg_sum: int, optional + + :param eph_infra_host_basic_agg_sum: Shows the sum of all ephemeral infrastructure hosts for Basic tier over all hours in the current month for all organizations. + :type eph_infra_host_basic_agg_sum: int, optional + + :param eph_infra_host_basic_infra_basic_agent_agg_sum: Shows the sum of all ephemeral infrastructure hosts for Basic tier with the Datadog Agent over all hours in the current month for all organizations. + :type eph_infra_host_basic_infra_basic_agent_agg_sum: int, optional + + :param eph_infra_host_basic_infra_basic_vsphere_agg_sum: Shows the sum of all ephemeral infrastructure hosts for Basic tier on vSphere over all hours in the current month for all organizations. + :type eph_infra_host_basic_infra_basic_vsphere_agg_sum: int, optional + + :param eph_infra_host_ent_agg_sum: Shows the sum of all ephemeral infrastructure hosts for Enterprise over all hours in the current month for all organizations. + :type eph_infra_host_ent_agg_sum: int, optional + + :param eph_infra_host_gcp_agg_sum: Shows the sum of all ephemeral infrastructure hosts on GCP over all hours in the current month for all organizations. + :type eph_infra_host_gcp_agg_sum: int, optional + + :param eph_infra_host_heroku_agg_sum: Shows the sum of all ephemeral infrastructure hosts on Heroku over all hours in the current month for all organizations. + :type eph_infra_host_heroku_agg_sum: int, optional + + :param eph_infra_host_only_aas_agg_sum: Shows the sum of all ephemeral infrastructure hosts with only Azure App Services over all hours in the current month for all organizations. + :type eph_infra_host_only_aas_agg_sum: int, optional + + :param eph_infra_host_only_vsphere_agg_sum: Shows the sum of all ephemeral infrastructure hosts with only vSphere over all hours in the current month for all organizations. + :type eph_infra_host_only_vsphere_agg_sum: int, optional + + :param eph_infra_host_opentelemetry_agg_sum: Shows the sum of all ephemeral hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current month for all organizations. + :type eph_infra_host_opentelemetry_agg_sum: int, optional + + :param eph_infra_host_opentelemetry_apm_agg_sum: Shows the sum of all ephemeral APM hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current month for all organizations. + :type eph_infra_host_opentelemetry_apm_agg_sum: int, optional + + :param eph_infra_host_pro_agg_sum: Shows the sum of all ephemeral infrastructure hosts for Pro over all hours in the current month for all organizations. + :type eph_infra_host_pro_agg_sum: int, optional + + :param eph_infra_host_proplus_agg_sum: Shows the sum of all ephemeral infrastructure hosts for Pro Plus over all hours in the current month for all organizations. + :type eph_infra_host_proplus_agg_sum: int, optional + + :param eph_infra_host_proxmox_agg_sum: Sum of all ephemeral infrastructure hosts for Proxmox over all hours in the current month for all organizations. + :type eph_infra_host_proxmox_agg_sum: int, optional + + :param error_tracking_apm_error_events_agg_sum: Shows the sum of all Error Tracking APM error events over all hours in the current month for all organizations. + :type error_tracking_apm_error_events_agg_sum: int, optional + + :param error_tracking_error_events_agg_sum: Shows the sum of all Error Tracking error events over all hours in the current month for all organizations. + :type error_tracking_error_events_agg_sum: int, optional + + :param error_tracking_events_agg_sum: Shows the sum of all Error Tracking events over all hours in the current months for all organizations. + :type error_tracking_events_agg_sum: int, optional + + :param error_tracking_rum_error_events_agg_sum: Shows the sum of all Error Tracking RUM error events over all hours in the current month for all organizations. + :type error_tracking_rum_error_events_agg_sum: int, optional + + :param event_management_correlation_agg_sum: Shows the sum of all Event Management correlations over all hours in the current month for all organizations. + :type event_management_correlation_agg_sum: int, optional + + :param event_management_correlation_correlated_events_agg_sum: Shows the sum of all Event Management correlated events over all hours in the current month for all organizations. + :type event_management_correlation_correlated_events_agg_sum: int, optional + + :param event_management_correlation_correlated_related_events_agg_sum: Shows the sum of all Event Management correlated related events over all hours in the current month for all organizations. + :type event_management_correlation_correlated_related_events_agg_sum: int, optional + + :param fargate_container_profiler_profiling_fargate_avg_sum: The average number of Profiling Fargate tasks over all hours in the current month for all organizations. + :type fargate_container_profiler_profiling_fargate_avg_sum: int, optional + + :param fargate_container_profiler_profiling_fargate_eks_avg_sum: The average number of Profiling Fargate Elastic Kubernetes Service tasks over all hours in the current month for all organizations. + :type fargate_container_profiler_profiling_fargate_eks_avg_sum: int, optional + + :param fargate_tasks_count_avg_sum: Shows the average of all Fargate tasks over all hours in the current month for all organizations. + :type fargate_tasks_count_avg_sum: int, optional + + :param fargate_tasks_count_hwm_sum: Shows the sum of the high-water marks of all Fargate tasks over all hours in the current month for all organizations. + :type fargate_tasks_count_hwm_sum: int, optional + + :param feature_flags_config_requests_agg_sum: Shows the sum of all Feature Flags Client-Side SDK config requests over all hours in the current month for all organizations. + :type feature_flags_config_requests_agg_sum: int, optional + + :param flex_logs_compute_large_avg_sum: Shows the average number of Flex Logs Compute Large Instances over all hours in the current months for all organizations. + :type flex_logs_compute_large_avg_sum: int, optional + + :param flex_logs_compute_medium_avg_sum: Shows the average number of Flex Logs Compute Medium Instances over all hours in the current months for all organizations. + :type flex_logs_compute_medium_avg_sum: int, optional + + :param flex_logs_compute_small_avg_sum: Shows the average number of Flex Logs Compute Small Instances over all hours in the current months for all organizations. + :type flex_logs_compute_small_avg_sum: int, optional + + :param flex_logs_compute_xlarge_avg_sum: Shows the average number of Flex Logs Compute Extra Large Instances over all hours in the current months for all organizations. + :type flex_logs_compute_xlarge_avg_sum: int, optional + + :param flex_logs_compute_xsmall_avg_sum: Shows the average number of Flex Logs Compute Extra Small Instances over all hours in the current months for all organizations. + :type flex_logs_compute_xsmall_avg_sum: int, optional + + :param flex_logs_starter_avg_sum: Shows the average number of Flex Logs Starter Instances over all hours in the current months for all organizations. + :type flex_logs_starter_avg_sum: int, optional + + :param flex_logs_starter_storage_index_avg_sum: Shows the average number of Flex Logs Starter Storage Index Instances over all hours in the current months for all organizations. + :type flex_logs_starter_storage_index_avg_sum: int, optional + + :param flex_logs_starter_storage_retention_adjustment_avg_sum: Shows the average number of Flex Logs Starter Storage Retention Adjustment Instances over all hours in the current months for all organizations. + :type flex_logs_starter_storage_retention_adjustment_avg_sum: int, optional + + :param flex_stored_logs_avg_sum: Shows the average of all Flex Stored Logs over all hours in the current months for all organizations. + :type flex_stored_logs_avg_sum: int, optional + + :param forwarding_events_bytes_agg_sum: Shows the sum of all logs forwarding bytes over all hours in the current month for all organizations (data available as of April 1, 2023) + :type forwarding_events_bytes_agg_sum: int, optional + + :param gcp_host_top99p_sum: Shows the 99th percentile of all GCP hosts over all hours in the current month for all organizations. + :type gcp_host_top99p_sum: int, optional + + :param heroku_host_top99p_sum: Shows the 99th percentile of all Heroku dynos over all hours in the current month for all organizations. + :type heroku_host_top99p_sum: int, optional + + :param incident_management_monthly_active_users_hwm_sum: Shows sum of the high-water marks of incident management monthly active users in the current month for all organizations. + :type incident_management_monthly_active_users_hwm_sum: int, optional + + :param incident_management_seats_hwm_sum: Shows the sum of the high-water marks of Incident Management seats over all hours in the current month for all organizations. + :type incident_management_seats_hwm_sum: int, optional + + :param indexed_events_count_agg_sum: Shows the sum of all log events indexed over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type indexed_events_count_agg_sum: int, optional + + :param indexed_points_agg_sum: Shows the sum of all indexed custom metrics points over all hours in the current month for all organizations. + :type indexed_points_agg_sum: int, optional + + :param infra_cpu_agg_sum: Shows the sum of all Infrastructure vCPU cores over all hours in the current month for all organizations. + :type infra_cpu_agg_sum: int, optional + + :param infra_cpu_avg_sum: Shows the average of all Infrastructure vCPU cores over all hours in the current month for all organizations. + :type infra_cpu_avg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_agg_sum: Shows the sum of all default Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_agent_agg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_avg_sum: Shows the average of all default Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_agent_avg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_basic_agg_sum: Shows the sum of all default basic Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_agent_basic_agg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_agent_basic_avg_sum: Shows the average of all default basic Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_agent_basic_avg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_aws_agg_sum: Shows the sum of all default Infrastructure host vCPU cores on AWS over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_aws_agg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_aws_avg_sum: Shows the average of all default Infrastructure host vCPU cores on AWS over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_aws_avg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_azure_agg_sum: Shows the sum of all default Infrastructure host vCPU cores on Azure over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_azure_agg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_azure_avg_sum: Shows the average of all default Infrastructure host vCPU cores on Azure over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_azure_avg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_gcp_agg_sum: Shows the sum of all default Infrastructure host vCPU cores on GCP over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_gcp_agg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_gcp_avg_sum: Shows the average of all default Infrastructure host vCPU cores on GCP over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_gcp_avg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_agg_sum: Shows the sum of all default Infrastructure host vCPU cores on Nutanix over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_nutanix_agg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_avg_sum: Shows the average of all default Infrastructure host vCPU cores on Nutanix over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_nutanix_avg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_basic_agg_sum: Shows the sum of all default basic Infrastructure host vCPU cores on Nutanix over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_nutanix_basic_agg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_nutanix_basic_avg_sum: Shows the average of all default basic Infrastructure host vCPU cores on Nutanix over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_nutanix_basic_avg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_opentelemetry_agg_sum: Shows the sum of all default Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_opentelemetry_agg_sum: int, optional + + :param infra_cpu_default_infra_host_vcpu_opentelemetry_avg_sum: Shows the average of all default Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current month for all organizations. + :type infra_cpu_default_infra_host_vcpu_opentelemetry_avg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_agent_agg_sum: Shows the sum of all observed Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_agent_agg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_agent_avg_sum: Shows the average of all observed Infrastructure host vCPU cores reported by the Datadog Agent over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_agent_avg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_aws_agg_sum: Shows the sum of all observed Infrastructure host vCPU cores on AWS over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_aws_agg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_aws_avg_sum: Shows the average of all observed Infrastructure host vCPU cores on AWS over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_aws_avg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_azure_agg_sum: Shows the sum of all observed Infrastructure host vCPU cores on Azure over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_azure_agg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_azure_avg_sum: Shows the average of all observed Infrastructure host vCPU cores on Azure over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_azure_avg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_gcp_agg_sum: Shows the sum of all observed Infrastructure host vCPU cores on GCP over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_gcp_agg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_gcp_avg_sum: Shows the average of all observed Infrastructure host vCPU cores on GCP over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_gcp_avg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_nutanix_agg_sum: Shows the sum of all observed Infrastructure host vCPU cores on Nutanix over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_nutanix_agg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_nutanix_avg_sum: Shows the average of all observed Infrastructure host vCPU cores on Nutanix over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_nutanix_avg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_opentelemetry_agg_sum: Shows the sum of all observed Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_opentelemetry_agg_sum: int, optional + + :param infra_cpu_observed_infra_host_vcpu_opentelemetry_avg_sum: Shows the average of all observed Infrastructure host vCPU cores reported by OpenTelemetry over all hours in the current month for all organizations. + :type infra_cpu_observed_infra_host_vcpu_opentelemetry_avg_sum: int, optional + + :param infra_edge_monitoring_devices_top99p_sum: Shows the 99th percentile of all Edge Devices Monitoring devices over all hours in the current month for all organizations. + :type infra_edge_monitoring_devices_top99p_sum: int, optional + + :param infra_host_basic_infra_basic_agent_top99p_sum: Shows the 99th percentile of all distinct infrastructure hosts for Basic tier with the Datadog Agent over all hours in the current month for all organizations. + :type infra_host_basic_infra_basic_agent_top99p_sum: int, optional + + :param infra_host_basic_infra_basic_vsphere_top99p_sum: Shows the 99th percentile of all distinct infrastructure hosts for Basic tier on vSphere over all hours in the current month for all organizations. + :type infra_host_basic_infra_basic_vsphere_top99p_sum: int, optional + + :param infra_host_basic_top99p_sum: Shows the 99th percentile of all distinct infrastructure hosts for Basic tier over all hours in the current month for all organizations. + :type infra_host_basic_top99p_sum: int, optional + + :param infra_host_top99p_sum: Shows the 99th percentile of all distinct infrastructure hosts over all hours in the current month for all organizations. + :type infra_host_top99p_sum: int, optional + + :param infra_storage_mgmt_objects_count_avg_sum: Shows the average number of storage management objects over all hours in the current month for all organizations. + :type infra_storage_mgmt_objects_count_avg_sum: int, optional + + :param ingest_points_agg_sum: Shows the sum of all ingested custom metrics points over all hours in the current month for all organizations. + :type ingest_points_agg_sum: int, optional + + :param ingested_events_bytes_agg_sum: Shows the sum of all log bytes ingested over all hours in the current month for all organizations. + :type ingested_events_bytes_agg_sum: int, optional + + :param iot_apm_host_agg_sum: Shows the sum of all Application Performance Monitoring IoT hosts over all hours in the current month for all organizations. + :type iot_apm_host_agg_sum: int, optional + + :param iot_apm_host_top99p_sum: Shows the 99th percentile of all Application Performance Monitoring IoT hosts over all hours in the current month for all organizations. + :type iot_apm_host_top99p_sum: int, optional + + :param iot_device_agg_sum: Shows the sum of all IoT devices over all hours in the current month for all organizations. + :type iot_device_agg_sum: int, optional + + :param iot_device_top99p_sum: Shows the 99th percentile of all IoT devices over all hours in the current month of all organizations. + :type iot_device_top99p_sum: int, optional + + :param last_updated: Shows the most recent hour in the current month for all organizations for which all usages were calculated. + :type last_updated: datetime, optional + + :param live_indexed_events_agg_sum: Shows the sum of all live logs indexed over all hours in the current month for all organization (To be deprecated on October 1st, 2024). **Deprecated**. + :type live_indexed_events_agg_sum: int, optional + + :param live_ingested_bytes_agg_sum: Shows the sum of all live logs bytes ingested over all hours in the current month for all organizations (data available as of December 1, 2020). + :type live_ingested_bytes_agg_sum: int, optional + + :param llm_observability_15day_retention_spans_agg_sum: Shows the sum of all LLM Observability 15-day retention spans over all hours in the current month for all organizations. + :type llm_observability_15day_retention_spans_agg_sum: int, optional + + :param llm_observability_30day_retention_spans_agg_sum: Shows the sum of all LLM Observability 30-day retention spans over all hours in the current month for all organizations. + :type llm_observability_30day_retention_spans_agg_sum: int, optional + + :param llm_observability_60day_retention_spans_agg_sum: Shows the sum of all LLM Observability 60-day retention spans over all hours in the current month for all organizations. + :type llm_observability_60day_retention_spans_agg_sum: int, optional + + :param llm_observability_90day_retention_spans_agg_sum: Shows the sum of all LLM Observability 90-day retention spans over all hours in the current month for all organizations. + :type llm_observability_90day_retention_spans_agg_sum: int, optional + + :param llm_observability_agg_sum: Sum of all LLM observability sessions for all hours in the current month for all organizations. + :type llm_observability_agg_sum: int, optional + + :param llm_observability_min_spend_agg_sum: Minimum spend for LLM observability sessions for all hours in the current month for all organizations. + :type llm_observability_min_spend_agg_sum: int, optional + + :param logs_archive_search_gb_scanned_agg_sum: Shows the sum of all Logs Archive Search scanned data over all hours in the current month for all organizations. + :type logs_archive_search_gb_scanned_agg_sum: int, optional + + :param logs_by_retention: Object containing logs usage data broken down by retention period. + :type logs_by_retention: LogsByRetention, optional + + :param metric_names_agg_sum: Shows the sum of all custom metric names over all hours in the current month for all organizations. + :type metric_names_agg_sum: int, optional + + :param mobile_rum_lite_session_count_agg_sum: Shows the sum of all mobile lite sessions over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_lite_session_count_agg_sum: int, optional + + :param mobile_rum_session_count_agg_sum: Shows the sum of all mobile RUM sessions over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_agg_sum: int, optional + + :param mobile_rum_session_count_android_agg_sum: Shows the sum of all mobile RUM sessions on Android over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_android_agg_sum: int, optional + + :param mobile_rum_session_count_flutter_agg_sum: Shows the sum of all mobile RUM sessions on Flutter over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_flutter_agg_sum: int, optional + + :param mobile_rum_session_count_ios_agg_sum: Shows the sum of all mobile RUM sessions on iOS over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_ios_agg_sum: int, optional + + :param mobile_rum_session_count_reactnative_agg_sum: Shows the sum of all mobile RUM sessions on React Native over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_reactnative_agg_sum: int, optional + + :param mobile_rum_session_count_roku_agg_sum: Shows the sum of all mobile RUM sessions on Roku over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_session_count_roku_agg_sum: int, optional + + :param mobile_rum_units_agg_sum: Shows the sum of all mobile RUM units over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type mobile_rum_units_agg_sum: int, optional + + :param ndm_netflow_events_agg_sum: Shows the sum of all Network Device Monitoring NetFlow events over all hours in the current month for all organizations. + :type ndm_netflow_events_agg_sum: int, optional + + :param netflow_indexed_events_count_agg_sum: Shows the sum of all Network flows indexed over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type netflow_indexed_events_count_agg_sum: int, optional + + :param network_device_wireless_top99p_sum: Shows the 99th percentile of all Network Device Monitoring wireless devices over all hours in the current month for all organizations. + :type network_device_wireless_top99p_sum: int, optional + + :param network_path_agg_sum: Shows the sum of all Network Path scheduled tests over all hours in the current month for all organizations. + :type network_path_agg_sum: int, optional + + :param npm_host_top99p_sum: Shows the 99th percentile of all distinct Cloud Network Monitoring hosts (formerly known as Network hosts) over all hours in the current month for all organizations. + :type npm_host_top99p_sum: int, optional + + :param observability_pipelines_bytes_processed_agg_sum: Sum of all observability pipelines bytes processed over all hours in the current month for all organizations. + :type observability_pipelines_bytes_processed_agg_sum: int, optional + + :param oci_host_agg_sum: Shows the sum of Oracle Cloud Infrastructure hosts over all hours in the current months for all organizations + :type oci_host_agg_sum: int, optional + + :param oci_host_top99p_sum: Shows the 99th percentile of Oracle Cloud Infrastructure hosts over all hours in the current months for all organizations + :type oci_host_top99p_sum: int, optional + + :param on_call_seat_hwm_sum: Shows the sum of the high-water marks of On-Call seats over all hours in the current month for all organizations. + :type on_call_seat_hwm_sum: int, optional + + :param online_archive_events_count_agg_sum: Sum of all online archived events over all hours in the current month for all organizations. + :type online_archive_events_count_agg_sum: int, optional + + :param opentelemetry_apm_host_top99p_sum: Shows the 99th percentile of APM hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current month for all organizations. + :type opentelemetry_apm_host_top99p_sum: int, optional + + :param opentelemetry_host_top99p_sum: Shows the 99th percentile of all hosts reported by the Datadog exporter for the OpenTelemetry Collector over all hours in the current month for all organizations. + :type opentelemetry_host_top99p_sum: int, optional + + :param product_analytics_agg_sum: Sum of all product analytics sessions for all hours in the current month for all organizations. + :type product_analytics_agg_sum: int, optional + + :param profiling_aas_count_top99p_sum: Shows the 99th percentile of all profiled Azure app services over all hours in the current month for all organizations. + :type profiling_aas_count_top99p_sum: int, optional + + :param profiling_container_agent_count_avg: Shows the average number of profiled containers over all hours in the current month for all organizations. + :type profiling_container_agent_count_avg: int, optional + + :param profiling_host_count_top99p_sum: Shows the 99th percentile of all profiled hosts over all hours in the current month for all organizations. + :type profiling_host_count_top99p_sum: int, optional + + :param proxmox_host_agg_sum: Sum of all Proxmox hosts over all hours in the current month for all organizations. + :type proxmox_host_agg_sum: int, optional + + :param proxmox_host_top99p_sum: Sum of the 99th percentile of all Proxmox hosts over all hours in the current month for all organizations. + :type proxmox_host_top99p_sum: int, optional + + :param published_app_hwm_sum: Shows the high-water mark of all published applications over all hours in the current month for all organizations. + :type published_app_hwm_sum: int, optional + + :param rehydrated_indexed_events_agg_sum: Shows the sum of all rehydrated logs indexed over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type rehydrated_indexed_events_agg_sum: int, optional + + :param rehydrated_ingested_bytes_agg_sum: Shows the sum of all rehydrated logs bytes ingested over all hours in the current month for all organizations (data available as of December 1, 2020). + :type rehydrated_ingested_bytes_agg_sum: int, optional + + :param rum_browser_and_mobile_session_count: Shows the sum of all mobile sessions and all browser lite and legacy sessions over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). + :type rum_browser_and_mobile_session_count: int, optional + + :param rum_browser_legacy_session_count_agg_sum: Shows the sum of all browser RUM legacy sessions over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_browser_legacy_session_count_agg_sum: int, optional + + :param rum_browser_lite_session_count_agg_sum: Shows the sum of all browser RUM lite sessions over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_browser_lite_session_count_agg_sum: int, optional + + :param rum_browser_replay_session_count_agg_sum: Shows the sum of all browser RUM Session Replay counts over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_browser_replay_session_count_agg_sum: int, optional + + :param rum_indexed_sessions_agg_sum: Sum of all RUM indexed sessions for all hours in the current month for all organizations. + :type rum_indexed_sessions_agg_sum: int, optional + + :param rum_ingested_sessions_agg_sum: Sum of all RUM ingested sessions for all hours in the current month for all organizations. + :type rum_ingested_sessions_agg_sum: int, optional + + :param rum_lite_session_count_agg_sum: Shows the sum of all RUM lite sessions (browser and mobile) over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_lite_session_count_agg_sum: int, optional + + :param rum_mobile_legacy_session_count_android_agg_sum: Shows the sum of all mobile RUM legacy sessions on Android over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_android_agg_sum: int, optional + + :param rum_mobile_legacy_session_count_flutter_agg_sum: Shows the sum of all mobile RUM legacy sessions on Flutter over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_flutter_agg_sum: int, optional + + :param rum_mobile_legacy_session_count_ios_agg_sum: Shows the sum of all mobile RUM legacy sessions on iOS over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_ios_agg_sum: int, optional + + :param rum_mobile_legacy_session_count_reactnative_agg_sum: Shows the sum of all mobile RUM legacy sessions on React Native over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_reactnative_agg_sum: int, optional + + :param rum_mobile_legacy_session_count_roku_agg_sum: Shows the sum of all mobile RUM legacy sessions on Roku over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_legacy_session_count_roku_agg_sum: int, optional + + :param rum_mobile_lite_session_count_android_agg_sum: Shows the sum of all mobile RUM lite sessions on Android over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_android_agg_sum: int, optional + + :param rum_mobile_lite_session_count_flutter_agg_sum: Shows the sum of all mobile RUM lite sessions on Flutter over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_flutter_agg_sum: int, optional + + :param rum_mobile_lite_session_count_ios_agg_sum: Shows the sum of all mobile RUM lite sessions on iOS over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_ios_agg_sum: int, optional + + :param rum_mobile_lite_session_count_kotlinmultiplatform_agg_sum: Shows the sum of all mobile RUM lite sessions on Kotlin Multiplatform over all hours within the current month for all organizations. + :type rum_mobile_lite_session_count_kotlinmultiplatform_agg_sum: int, optional + + :param rum_mobile_lite_session_count_reactnative_agg_sum: Shows the sum of all mobile RUM lite sessions on React Native over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_reactnative_agg_sum: int, optional + + :param rum_mobile_lite_session_count_roku_agg_sum: Shows the sum of all mobile RUM lite sessions on Roku over all hours within the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_mobile_lite_session_count_roku_agg_sum: int, optional + + :param rum_mobile_lite_session_count_unity_agg_sum: Shows the sum of all mobile RUM lite sessions on Unity over all hours within the current month for all organizations. + :type rum_mobile_lite_session_count_unity_agg_sum: int, optional + + :param rum_mobile_replay_session_count_android_agg_sum: Shows the sum of all mobile RUM replay sessions on Android over all hours within the current month for all organizations. + :type rum_mobile_replay_session_count_android_agg_sum: int, optional + + :param rum_mobile_replay_session_count_ios_agg_sum: Shows the sum of all mobile RUM replay sessions on iOS over all hours within the current month for all organizations. + :type rum_mobile_replay_session_count_ios_agg_sum: int, optional + + :param rum_mobile_replay_session_count_kotlinmultiplatform_agg_sum: Shows the sum of all mobile RUM replay sessions on Kotlin Multiplatform over all hours within the current month for all organizations. + :type rum_mobile_replay_session_count_kotlinmultiplatform_agg_sum: int, optional + + :param rum_mobile_replay_session_count_reactnative_agg_sum: Shows the sum of all mobile RUM replay sessions on React Native over all hours within the current month for all organizations. + :type rum_mobile_replay_session_count_reactnative_agg_sum: int, optional + + :param rum_replay_session_count_agg_sum: Shows the sum of all RUM Session Replay counts over all hours in the current month for all organizations (To be introduced on October 1st, 2024). + :type rum_replay_session_count_agg_sum: int, optional + + :param rum_session_count_agg_sum: Shows the sum of all browser RUM lite sessions over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type rum_session_count_agg_sum: int, optional + + :param rum_session_replay_add_on_agg_sum: Sum of all RUM session replay add-on sessions for all hours in the current month for all organizations. + :type rum_session_replay_add_on_agg_sum: int, optional + + :param rum_total_session_count_agg_sum: Shows the sum of RUM sessions (browser and mobile) over all hours in the current month for all organizations. + :type rum_total_session_count_agg_sum: int, optional + + :param rum_units_agg_sum: Shows the sum of all browser and mobile RUM units over all hours in the current month for all organizations (To be deprecated on October 1st, 2024). **Deprecated**. + :type rum_units_agg_sum: int, optional + + :param sca_fargate_count_avg_sum: Shows the average of all Software Composition Analysis Fargate tasks over all hours in the current months for all organizations. + :type sca_fargate_count_avg_sum: int, optional + + :param sca_fargate_count_hwm_sum: Shows the sum of the high-water marks of all Software Composition Analysis Fargate tasks over all hours in the current months for all organizations. + :type sca_fargate_count_hwm_sum: int, optional + + :param sds_apm_scanned_bytes_sum: Sum of all APM bytes scanned with sensitive data scanner in the current month for all organizations. + :type sds_apm_scanned_bytes_sum: int, optional + + :param sds_events_scanned_bytes_sum: Sum of all event stream events bytes scanned with sensitive data scanner in the current month for all organizations. + :type sds_events_scanned_bytes_sum: int, optional + + :param sds_logs_scanned_bytes_sum: Shows the sum of all bytes scanned of logs usage by the Sensitive Data Scanner over all hours in the current month for all organizations. + :type sds_logs_scanned_bytes_sum: int, optional + + :param sds_rum_scanned_bytes_sum: Sum of all RUM bytes scanned with sensitive data scanner in the current month for all organizations. + :type sds_rum_scanned_bytes_sum: int, optional + + :param sds_total_scanned_bytes_sum: Shows the sum of all bytes scanned across all usage types by the Sensitive Data Scanner over all hours in the current month for all organizations. + :type sds_total_scanned_bytes_sum: int, optional + + :param serverless_apps_apm_apm_azure_appservice_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring for Azure App Service instances in the current month for all organizations. + :type serverless_apps_apm_apm_azure_appservice_instances_avg_sum: int, optional + + :param serverless_apps_apm_apm_azure_azurefunction_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring for Azure Function instances in the current month for all organizations. + :type serverless_apps_apm_apm_azure_azurefunction_instances_avg_sum: int, optional + + :param serverless_apps_apm_apm_azure_containerapp_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring for Azure Container App instances in the current month for all organizations. + :type serverless_apps_apm_apm_azure_containerapp_instances_avg_sum: int, optional + + :param serverless_apps_apm_apm_fargate_ecs_tasks_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring for Fargate Elastic Container Service tasks in the current month for all organizations. + :type serverless_apps_apm_apm_fargate_ecs_tasks_avg_sum: int, optional + + :param serverless_apps_apm_apm_gcp_cloudfunction_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring for Google Cloud Platform Cloud Function instances in the current month for all organizations. + :type serverless_apps_apm_apm_gcp_cloudfunction_instances_avg_sum: int, optional + + :param serverless_apps_apm_apm_gcp_cloudrun_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring for Google Cloud Platform Cloud Run instances in the current month for all organizations. + :type serverless_apps_apm_apm_gcp_cloudrun_instances_avg_sum: int, optional + + :param serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring for Google Kubernetes Engine Autopilot pods in the current month for all organizations. + :type serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg_sum: int, optional + + :param serverless_apps_apm_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring in the current month for all organizations. + :type serverless_apps_apm_avg_sum: int, optional + + :param serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Azure App Service instances in the current month for all organizations. + :type serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg_sum: int, optional + + :param serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Azure Function instances in the current month for all organizations. + :type serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg_sum: int, optional + + :param serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Azure Container App instances in the current month for all organizations. + :type serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg_sum: int, optional + + :param serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Google Cloud Platform Cloud Function instances in the current month for all organizations. + :type serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg_sum: int, optional + + :param serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Google Cloud Platform Cloud Run instances in the current month for all organizations. + :type serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg_sum: int, optional + + :param serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring excluding Fargate for Google Kubernetes Engine Autopilot pods in the current month for all organizations. + :type serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg_sum: int, optional + + :param serverless_apps_apm_excl_fargate_avg_sum: Sum of the average number of Serverless Apps with Application Performance Monitoring excluding Fargate in the current month for all organizations. + :type serverless_apps_apm_excl_fargate_avg_sum: int, optional + + :param serverless_apps_azure_container_app_instances_avg_sum: Sum of the average number of Serverless Apps for Azure Container App instances in the current month for all organizations. + :type serverless_apps_azure_container_app_instances_avg_sum: int, optional + + :param serverless_apps_azure_count_avg_sum: Sum of the average number of Serverless Apps for Azure in the current month for all organizations. + :type serverless_apps_azure_count_avg_sum: int, optional + + :param serverless_apps_azure_function_app_instances_avg_sum: Sum of the average number of Serverless Apps for Azure Function App instances in the current month for all organizations. + :type serverless_apps_azure_function_app_instances_avg_sum: int, optional + + :param serverless_apps_azure_web_app_instances_avg_sum: Sum of the average number of Serverless Apps for Azure Web App instances in the current month for all organizations. + :type serverless_apps_azure_web_app_instances_avg_sum: int, optional + + :param serverless_apps_dsm_fargate_tasks_avg_sum: Sum of the average number of DSM Fargate ECS tasks monitored under Serverless Apps DSM in the current month for all organizations. + :type serverless_apps_dsm_fargate_tasks_avg_sum: int, optional + + :param serverless_apps_ecs_avg_sum: Sum of the average number of Serverless Apps for Elastic Container Service in the current month for all organizations. + :type serverless_apps_ecs_avg_sum: int, optional + + :param serverless_apps_eks_avg_sum: Sum of the average number of Serverless Apps for Elastic Kubernetes Service in the current month for all organizations. + :type serverless_apps_eks_avg_sum: int, optional + + :param serverless_apps_excl_fargate_avg_sum: Sum of the average number of Serverless Apps excluding Fargate in the current month for all organizations. + :type serverless_apps_excl_fargate_avg_sum: int, optional + + :param serverless_apps_excl_fargate_azure_container_app_instances_avg_sum: Sum of the average number of Serverless Apps excluding Fargate for Azure Container App instances in the current month for all organizations. + :type serverless_apps_excl_fargate_azure_container_app_instances_avg_sum: int, optional + + :param serverless_apps_excl_fargate_azure_function_app_instances_avg_sum: Sum of the average number of Serverless Apps excluding Fargate for Azure Function App instances in the current month for all organizations. + :type serverless_apps_excl_fargate_azure_function_app_instances_avg_sum: int, optional + + :param serverless_apps_excl_fargate_azure_web_app_instances_avg_sum: Sum of the average number of Serverless Apps excluding Fargate for Azure Web App instances in the current month for all organizations. + :type serverless_apps_excl_fargate_azure_web_app_instances_avg_sum: int, optional + + :param serverless_apps_excl_fargate_google_cloud_functions_instances_avg_sum: Sum of the average number of Serverless Apps excluding Fargate for Google Cloud Platform Cloud Functions instances in the current month for all organizations. + :type serverless_apps_excl_fargate_google_cloud_functions_instances_avg_sum: int, optional + + :param serverless_apps_excl_fargate_google_cloud_run_instances_avg_sum: Sum of the average number of Serverless Apps excluding Fargate for Google Cloud Platform Cloud Run instances in the current month for all organizations. + :type serverless_apps_excl_fargate_google_cloud_run_instances_avg_sum: int, optional + + :param serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg_sum: Sum of the average number of Serverless Apps excluding Fargate for Google Kubernetes Engine Autopilot pods in the current month for all organizations. + :type serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg_sum: int, optional + + :param serverless_apps_google_cloud_functions_instances_avg_sum: Sum of the average number of Serverless Apps for Google Cloud Platform Cloud Functions instances in the current month for all organizations. + :type serverless_apps_google_cloud_functions_instances_avg_sum: int, optional + + :param serverless_apps_google_cloud_run_instances_avg_sum: Sum of the average number of Serverless Apps for Google Cloud Platform Cloud Run instances in the current month for all organizations. + :type serverless_apps_google_cloud_run_instances_avg_sum: int, optional + + :param serverless_apps_google_count_avg_sum: Sum of the average number of Serverless Apps for Google Cloud in the current month for all organizations. + :type serverless_apps_google_count_avg_sum: int, optional + + :param serverless_apps_infra_gcp_gke_autopilot_pods_avg_sum: Sum of the average number of Serverless Apps for Google Kubernetes Engine Autopilot pods in the current month for all organizations. + :type serverless_apps_infra_gcp_gke_autopilot_pods_avg_sum: int, optional + + :param serverless_apps_total_count_avg_sum: Sum of the average number of Serverless Apps for Azure and Google Cloud in the current month for all organizations. + :type serverless_apps_total_count_avg_sum: int, optional + + :param siem_12mo_retention_agg_sum: Shows the sum of Cloud SIEM Indexed Logs (12-month retention) over all hours in the current month for all organizations. + :type siem_12mo_retention_agg_sum: int, optional + + :param siem_6mo_retention_agg_sum: Shows the sum of Cloud SIEM Indexed Logs (6-month retention) over all hours in the current month for all organizations. + :type siem_6mo_retention_agg_sum: int, optional + + :param siem_analyzed_logs_add_on_count_agg_sum: Shows the sum of all log events analyzed by Cloud SIEM over all hours in the current month for all organizations. + :type siem_analyzed_logs_add_on_count_agg_sum: int, optional + + :param snmp_device_count_agg_sum: Shows the sum of all Network Device Monitoring devices over all hours in the current month for all organizations. + :type snmp_device_count_agg_sum: int, optional + + :param snmp_device_count_top99p_sum: Shows the 99th percentile of all Network Device Monitoring devices over all hours in the current month for all organizations. + :type snmp_device_count_top99p_sum: int, optional + + :param start_date: Shows the first date of usage in the current month for all organizations. + :type start_date: datetime, optional + + :param synthetics_browser_check_calls_count_agg_sum: Shows the sum of all Synthetic browser tests over all hours in the current month for all organizations. + :type synthetics_browser_check_calls_count_agg_sum: int, optional + + :param synthetics_check_calls_count_agg_sum: Shows the sum of all Synthetic API tests over all hours in the current month for all organizations. + :type synthetics_check_calls_count_agg_sum: int, optional + + :param synthetics_mobile_test_runs_agg_sum: Shows the sum of Synthetic mobile application tests over all hours in the current month for all organizations. + :type synthetics_mobile_test_runs_agg_sum: int, optional + + :param synthetics_parallel_testing_max_slots_hwm_sum: Shows the sum of the high-water marks of used synthetics parallel testing slots over all hours in the current month for all organizations. + :type synthetics_parallel_testing_max_slots_hwm_sum: int, optional + + :param trace_search_indexed_events_count_agg_sum: Shows the sum of all Indexed Spans indexed over all hours in the current month for all organizations. + :type trace_search_indexed_events_count_agg_sum: int, optional + + :param twol_ingested_events_bytes_agg_sum: Shows the sum of all ingested APM span bytes over all hours in the current month for all organizations. + :type twol_ingested_events_bytes_agg_sum: int, optional + + :param universal_service_monitoring_host_top99p_sum: Shows the 99th percentile of all Universal Service Monitoring hosts over all hours in the current month for all organizations. + :type universal_service_monitoring_host_top99p_sum: int, optional + + :param usage: An array of objects regarding hourly usage. + :type usage: [UsageSummaryDate], optional + + :param vsphere_host_top99p_sum: Shows the 99th percentile of all vSphere hosts over all hours in the current month for all organizations. + :type vsphere_host_top99p_sum: int, optional + + :param vuln_management_host_count_top99p_sum: Shows the 99th percentile of all Application Vulnerability Management hosts over all hours in the current month for all organizations. + :type vuln_management_host_count_top99p_sum: int, optional + + :param workflow_executions_usage_agg_sum: Sum of all workflows executed over all hours in the current month for all organizations. + :type workflow_executions_usage_agg_sum: int, optional + """ + if agent_host_top99p_sum is not unset: + kwargs["agent_host_top99p_sum"] = agent_host_top99p_sum + if ai_credits_agent_builder_ai_credits_agg_sum is not unset: + kwargs["ai_credits_agent_builder_ai_credits_agg_sum"] = ai_credits_agent_builder_ai_credits_agg_sum + if ai_credits_agg_sum is not unset: + kwargs["ai_credits_agg_sum"] = ai_credits_agg_sum + if ai_credits_bits_assistant_ai_credits_agg_sum is not unset: + kwargs["ai_credits_bits_assistant_ai_credits_agg_sum"] = ai_credits_bits_assistant_ai_credits_agg_sum + if ai_credits_bits_dev_ai_credits_agg_sum is not unset: + kwargs["ai_credits_bits_dev_ai_credits_agg_sum"] = ai_credits_bits_dev_ai_credits_agg_sum + if ai_credits_bits_sre_ai_credits_agg_sum is not unset: + kwargs["ai_credits_bits_sre_ai_credits_agg_sum"] = ai_credits_bits_sre_ai_credits_agg_sum + if apm_azure_app_service_host_top99p_sum is not unset: + kwargs["apm_azure_app_service_host_top99p_sum"] = apm_azure_app_service_host_top99p_sum + if apm_devsecops_host_top99p_sum is not unset: + kwargs["apm_devsecops_host_top99p_sum"] = apm_devsecops_host_top99p_sum + if apm_enterprise_standalone_hosts_top99p_sum is not unset: + kwargs["apm_enterprise_standalone_hosts_top99p_sum"] = apm_enterprise_standalone_hosts_top99p_sum + if apm_fargate_count_avg_sum is not unset: + kwargs["apm_fargate_count_avg_sum"] = apm_fargate_count_avg_sum + if apm_host_top99p_sum is not unset: + kwargs["apm_host_top99p_sum"] = apm_host_top99p_sum + if apm_pro_standalone_hosts_top99p_sum is not unset: + kwargs["apm_pro_standalone_hosts_top99p_sum"] = apm_pro_standalone_hosts_top99p_sum + if appsec_fargate_count_avg_sum is not unset: + kwargs["appsec_fargate_count_avg_sum"] = appsec_fargate_count_avg_sum + if asm_serverless_agg_sum is not unset: + kwargs["asm_serverless_agg_sum"] = asm_serverless_agg_sum + if audit_logs_lines_indexed_agg_sum is not unset: + kwargs["audit_logs_lines_indexed_agg_sum"] = audit_logs_lines_indexed_agg_sum + if audit_trail_enabled_hwm_sum is not unset: + kwargs["audit_trail_enabled_hwm_sum"] = audit_trail_enabled_hwm_sum + if audit_trail_event_forwarding_events_agg_sum is not unset: + kwargs["audit_trail_event_forwarding_events_agg_sum"] = audit_trail_event_forwarding_events_agg_sum + if avg_profiled_fargate_tasks_sum is not unset: + kwargs["avg_profiled_fargate_tasks_sum"] = avg_profiled_fargate_tasks_sum + if aws_host_top99p_sum is not unset: + kwargs["aws_host_top99p_sum"] = aws_host_top99p_sum + if aws_lambda_func_count is not unset: + kwargs["aws_lambda_func_count"] = aws_lambda_func_count + if aws_lambda_invocations_sum is not unset: + kwargs["aws_lambda_invocations_sum"] = aws_lambda_invocations_sum + if azure_app_service_top99p_sum is not unset: + kwargs["azure_app_service_top99p_sum"] = azure_app_service_top99p_sum + if azure_host_top99p_sum is not unset: + kwargs["azure_host_top99p_sum"] = azure_host_top99p_sum + if billable_ingested_bytes_agg_sum is not unset: + kwargs["billable_ingested_bytes_agg_sum"] = billable_ingested_bytes_agg_sum + if bits_ai_investigations_agg_sum is not unset: + kwargs["bits_ai_investigations_agg_sum"] = bits_ai_investigations_agg_sum + if browser_rum_lite_session_count_agg_sum is not unset: + kwargs["browser_rum_lite_session_count_agg_sum"] = browser_rum_lite_session_count_agg_sum + if browser_rum_replay_session_count_agg_sum is not unset: + kwargs["browser_rum_replay_session_count_agg_sum"] = browser_rum_replay_session_count_agg_sum + if browser_rum_units_agg_sum is not unset: + kwargs["browser_rum_units_agg_sum"] = browser_rum_units_agg_sum + if ccm_anthropic_spend_last_sum is not unset: + kwargs["ccm_anthropic_spend_last_sum"] = ccm_anthropic_spend_last_sum + if ccm_aws_spend_last_sum is not unset: + kwargs["ccm_aws_spend_last_sum"] = ccm_aws_spend_last_sum + if ccm_azure_spend_last_sum is not unset: + kwargs["ccm_azure_spend_last_sum"] = ccm_azure_spend_last_sum + if ccm_confluent_spend_last_sum is not unset: + kwargs["ccm_confluent_spend_last_sum"] = ccm_confluent_spend_last_sum + if ccm_databricks_spend_last_sum is not unset: + kwargs["ccm_databricks_spend_last_sum"] = ccm_databricks_spend_last_sum + if ccm_elastic_spend_last_sum is not unset: + kwargs["ccm_elastic_spend_last_sum"] = ccm_elastic_spend_last_sum + if ccm_fastly_spend_last_sum is not unset: + kwargs["ccm_fastly_spend_last_sum"] = ccm_fastly_spend_last_sum + if ccm_gcp_spend_last_sum is not unset: + kwargs["ccm_gcp_spend_last_sum"] = ccm_gcp_spend_last_sum + if ccm_github_spend_last_sum is not unset: + kwargs["ccm_github_spend_last_sum"] = ccm_github_spend_last_sum + if ccm_mongodb_spend_last_sum is not unset: + kwargs["ccm_mongodb_spend_last_sum"] = ccm_mongodb_spend_last_sum + if ccm_oci_spend_last_sum is not unset: + kwargs["ccm_oci_spend_last_sum"] = ccm_oci_spend_last_sum + if ccm_openai_spend_last_sum is not unset: + kwargs["ccm_openai_spend_last_sum"] = ccm_openai_spend_last_sum + if ccm_snowflake_spend_last_sum is not unset: + kwargs["ccm_snowflake_spend_last_sum"] = ccm_snowflake_spend_last_sum + if ccm_spend_monitored_ent_last_sum is not unset: + kwargs["ccm_spend_monitored_ent_last_sum"] = ccm_spend_monitored_ent_last_sum + if ccm_spend_monitored_pro_last_sum is not unset: + kwargs["ccm_spend_monitored_pro_last_sum"] = ccm_spend_monitored_pro_last_sum + if ccm_twilio_spend_last_sum is not unset: + kwargs["ccm_twilio_spend_last_sum"] = ccm_twilio_spend_last_sum + if ci_pipeline_indexed_spans_agg_sum is not unset: + kwargs["ci_pipeline_indexed_spans_agg_sum"] = ci_pipeline_indexed_spans_agg_sum + if ci_test_indexed_spans_agg_sum is not unset: + kwargs["ci_test_indexed_spans_agg_sum"] = ci_test_indexed_spans_agg_sum + if ci_visibility_itr_committers_hwm_sum is not unset: + kwargs["ci_visibility_itr_committers_hwm_sum"] = ci_visibility_itr_committers_hwm_sum + if ci_visibility_pipeline_committers_hwm_sum is not unset: + kwargs["ci_visibility_pipeline_committers_hwm_sum"] = ci_visibility_pipeline_committers_hwm_sum + if ci_visibility_test_committers_hwm_sum is not unset: + kwargs["ci_visibility_test_committers_hwm_sum"] = ci_visibility_test_committers_hwm_sum + if cloud_cost_management_aws_host_count_avg_sum is not unset: + kwargs["cloud_cost_management_aws_host_count_avg_sum"] = cloud_cost_management_aws_host_count_avg_sum + if cloud_cost_management_azure_host_count_avg_sum is not unset: + kwargs["cloud_cost_management_azure_host_count_avg_sum"] = cloud_cost_management_azure_host_count_avg_sum + if cloud_cost_management_gcp_host_count_avg_sum is not unset: + kwargs["cloud_cost_management_gcp_host_count_avg_sum"] = cloud_cost_management_gcp_host_count_avg_sum + if cloud_cost_management_host_count_avg_sum is not unset: + kwargs["cloud_cost_management_host_count_avg_sum"] = cloud_cost_management_host_count_avg_sum + if cloud_cost_management_oci_host_count_avg_sum is not unset: + kwargs["cloud_cost_management_oci_host_count_avg_sum"] = cloud_cost_management_oci_host_count_avg_sum + if cloud_siem_events_agg_sum is not unset: + kwargs["cloud_siem_events_agg_sum"] = cloud_siem_events_agg_sum + if cloud_siem_indexed_logs_agg_sum is not unset: + kwargs["cloud_siem_indexed_logs_agg_sum"] = cloud_siem_indexed_logs_agg_sum + if code_analysis_sa_committers_hwm_sum is not unset: + kwargs["code_analysis_sa_committers_hwm_sum"] = code_analysis_sa_committers_hwm_sum + if code_analysis_sca_committers_hwm_sum is not unset: + kwargs["code_analysis_sca_committers_hwm_sum"] = code_analysis_sca_committers_hwm_sum + if code_security_host_top99p_sum is not unset: + kwargs["code_security_host_top99p_sum"] = code_security_host_top99p_sum + if container_avg_sum is not unset: + kwargs["container_avg_sum"] = container_avg_sum + if container_excl_agent_avg_sum is not unset: + kwargs["container_excl_agent_avg_sum"] = container_excl_agent_avg_sum + if container_hwm_sum is not unset: + kwargs["container_hwm_sum"] = container_hwm_sum + if csm_container_enterprise_compliance_count_agg_sum is not unset: + kwargs["csm_container_enterprise_compliance_count_agg_sum"] = csm_container_enterprise_compliance_count_agg_sum + if csm_container_enterprise_cws_count_agg_sum is not unset: + kwargs["csm_container_enterprise_cws_count_agg_sum"] = csm_container_enterprise_cws_count_agg_sum + if csm_container_enterprise_total_count_agg_sum is not unset: + kwargs["csm_container_enterprise_total_count_agg_sum"] = csm_container_enterprise_total_count_agg_sum + if csm_host_enterprise_aas_host_count_top99p_sum is not unset: + kwargs["csm_host_enterprise_aas_host_count_top99p_sum"] = csm_host_enterprise_aas_host_count_top99p_sum + if csm_host_enterprise_aws_host_count_top99p_sum is not unset: + kwargs["csm_host_enterprise_aws_host_count_top99p_sum"] = csm_host_enterprise_aws_host_count_top99p_sum + if csm_host_enterprise_azure_host_count_top99p_sum is not unset: + kwargs["csm_host_enterprise_azure_host_count_top99p_sum"] = csm_host_enterprise_azure_host_count_top99p_sum + if csm_host_enterprise_compliance_host_count_top99p_sum is not unset: + kwargs["csm_host_enterprise_compliance_host_count_top99p_sum"] = csm_host_enterprise_compliance_host_count_top99p_sum + if csm_host_enterprise_cws_host_count_top99p_sum is not unset: + kwargs["csm_host_enterprise_cws_host_count_top99p_sum"] = csm_host_enterprise_cws_host_count_top99p_sum + if csm_host_enterprise_gcp_host_count_top99p_sum is not unset: + kwargs["csm_host_enterprise_gcp_host_count_top99p_sum"] = csm_host_enterprise_gcp_host_count_top99p_sum + if csm_host_enterprise_oci_host_count_top99p_sum is not unset: + kwargs["csm_host_enterprise_oci_host_count_top99p_sum"] = csm_host_enterprise_oci_host_count_top99p_sum + if csm_host_enterprise_total_host_count_top99p_sum is not unset: + kwargs["csm_host_enterprise_total_host_count_top99p_sum"] = csm_host_enterprise_total_host_count_top99p_sum + if csm_host_pro_hosts_agentless_scanners_agg_sum is not unset: + kwargs["csm_host_pro_hosts_agentless_scanners_agg_sum"] = csm_host_pro_hosts_agentless_scanners_agg_sum + if csm_host_pro_hosts_agentless_scanners_top99p_sum is not unset: + kwargs["csm_host_pro_hosts_agentless_scanners_top99p_sum"] = csm_host_pro_hosts_agentless_scanners_top99p_sum + if csm_host_pro_oci_host_count_top99p_sum is not unset: + kwargs["csm_host_pro_oci_host_count_top99p_sum"] = csm_host_pro_oci_host_count_top99p_sum + if cspm_aas_host_top99p_sum is not unset: + kwargs["cspm_aas_host_top99p_sum"] = cspm_aas_host_top99p_sum + if cspm_aws_host_top99p_sum is not unset: + kwargs["cspm_aws_host_top99p_sum"] = cspm_aws_host_top99p_sum + if cspm_azure_host_top99p_sum is not unset: + kwargs["cspm_azure_host_top99p_sum"] = cspm_azure_host_top99p_sum + if cspm_container_avg_sum is not unset: + kwargs["cspm_container_avg_sum"] = cspm_container_avg_sum + if cspm_container_hwm_sum is not unset: + kwargs["cspm_container_hwm_sum"] = cspm_container_hwm_sum + if cspm_gcp_host_top99p_sum is not unset: + kwargs["cspm_gcp_host_top99p_sum"] = cspm_gcp_host_top99p_sum + if cspm_host_top99p_sum is not unset: + kwargs["cspm_host_top99p_sum"] = cspm_host_top99p_sum + if cspm_hosts_agentless_scanners_agg_sum is not unset: + kwargs["cspm_hosts_agentless_scanners_agg_sum"] = cspm_hosts_agentless_scanners_agg_sum + if cspm_hosts_agentless_scanners_top99p_sum is not unset: + kwargs["cspm_hosts_agentless_scanners_top99p_sum"] = cspm_hosts_agentless_scanners_top99p_sum + if custom_historical_ts_sum is not unset: + kwargs["custom_historical_ts_sum"] = custom_historical_ts_sum + if custom_live_ts_sum is not unset: + kwargs["custom_live_ts_sum"] = custom_live_ts_sum + if custom_ts_sum is not unset: + kwargs["custom_ts_sum"] = custom_ts_sum + if cws_container_avg_sum is not unset: + kwargs["cws_container_avg_sum"] = cws_container_avg_sum + if cws_fargate_task_avg_sum is not unset: + kwargs["cws_fargate_task_avg_sum"] = cws_fargate_task_avg_sum + if cws_host_top99p_sum is not unset: + kwargs["cws_host_top99p_sum"] = cws_host_top99p_sum + if data_jobs_monitoring_host_hr_agg_sum is not unset: + kwargs["data_jobs_monitoring_host_hr_agg_sum"] = data_jobs_monitoring_host_hr_agg_sum + if data_stream_monitoring_host_count_agg_sum is not unset: + kwargs["data_stream_monitoring_host_count_agg_sum"] = data_stream_monitoring_host_count_agg_sum + if data_stream_monitoring_host_count_top99p_sum is not unset: + kwargs["data_stream_monitoring_host_count_top99p_sum"] = data_stream_monitoring_host_count_top99p_sum + if dbm_host_top99p_sum is not unset: + kwargs["dbm_host_top99p_sum"] = dbm_host_top99p_sum + if dbm_queries_avg_sum is not unset: + kwargs["dbm_queries_avg_sum"] = dbm_queries_avg_sum + if do_jobs_monitoring_orchestrators_job_hours_agg_sum is not unset: + kwargs["do_jobs_monitoring_orchestrators_job_hours_agg_sum"] = do_jobs_monitoring_orchestrators_job_hours_agg_sum + if end_date is not unset: + kwargs["end_date"] = end_date + if eph_infra_host_agent_agg_sum is not unset: + kwargs["eph_infra_host_agent_agg_sum"] = eph_infra_host_agent_agg_sum + if eph_infra_host_alibaba_agg_sum is not unset: + kwargs["eph_infra_host_alibaba_agg_sum"] = eph_infra_host_alibaba_agg_sum + if eph_infra_host_aws_agg_sum is not unset: + kwargs["eph_infra_host_aws_agg_sum"] = eph_infra_host_aws_agg_sum + if eph_infra_host_azure_agg_sum is not unset: + kwargs["eph_infra_host_azure_agg_sum"] = eph_infra_host_azure_agg_sum + if eph_infra_host_basic_agg_sum is not unset: + kwargs["eph_infra_host_basic_agg_sum"] = eph_infra_host_basic_agg_sum + if eph_infra_host_basic_infra_basic_agent_agg_sum is not unset: + kwargs["eph_infra_host_basic_infra_basic_agent_agg_sum"] = eph_infra_host_basic_infra_basic_agent_agg_sum + if eph_infra_host_basic_infra_basic_vsphere_agg_sum is not unset: + kwargs["eph_infra_host_basic_infra_basic_vsphere_agg_sum"] = eph_infra_host_basic_infra_basic_vsphere_agg_sum + if eph_infra_host_ent_agg_sum is not unset: + kwargs["eph_infra_host_ent_agg_sum"] = eph_infra_host_ent_agg_sum + if eph_infra_host_gcp_agg_sum is not unset: + kwargs["eph_infra_host_gcp_agg_sum"] = eph_infra_host_gcp_agg_sum + if eph_infra_host_heroku_agg_sum is not unset: + kwargs["eph_infra_host_heroku_agg_sum"] = eph_infra_host_heroku_agg_sum + if eph_infra_host_only_aas_agg_sum is not unset: + kwargs["eph_infra_host_only_aas_agg_sum"] = eph_infra_host_only_aas_agg_sum + if eph_infra_host_only_vsphere_agg_sum is not unset: + kwargs["eph_infra_host_only_vsphere_agg_sum"] = eph_infra_host_only_vsphere_agg_sum + if eph_infra_host_opentelemetry_agg_sum is not unset: + kwargs["eph_infra_host_opentelemetry_agg_sum"] = eph_infra_host_opentelemetry_agg_sum + if eph_infra_host_opentelemetry_apm_agg_sum is not unset: + kwargs["eph_infra_host_opentelemetry_apm_agg_sum"] = eph_infra_host_opentelemetry_apm_agg_sum + if eph_infra_host_pro_agg_sum is not unset: + kwargs["eph_infra_host_pro_agg_sum"] = eph_infra_host_pro_agg_sum + if eph_infra_host_proplus_agg_sum is not unset: + kwargs["eph_infra_host_proplus_agg_sum"] = eph_infra_host_proplus_agg_sum + if eph_infra_host_proxmox_agg_sum is not unset: + kwargs["eph_infra_host_proxmox_agg_sum"] = eph_infra_host_proxmox_agg_sum + if error_tracking_apm_error_events_agg_sum is not unset: + kwargs["error_tracking_apm_error_events_agg_sum"] = error_tracking_apm_error_events_agg_sum + if error_tracking_error_events_agg_sum is not unset: + kwargs["error_tracking_error_events_agg_sum"] = error_tracking_error_events_agg_sum + if error_tracking_events_agg_sum is not unset: + kwargs["error_tracking_events_agg_sum"] = error_tracking_events_agg_sum + if error_tracking_rum_error_events_agg_sum is not unset: + kwargs["error_tracking_rum_error_events_agg_sum"] = error_tracking_rum_error_events_agg_sum + if event_management_correlation_agg_sum is not unset: + kwargs["event_management_correlation_agg_sum"] = event_management_correlation_agg_sum + if event_management_correlation_correlated_events_agg_sum is not unset: + kwargs["event_management_correlation_correlated_events_agg_sum"] = event_management_correlation_correlated_events_agg_sum + if event_management_correlation_correlated_related_events_agg_sum is not unset: + kwargs["event_management_correlation_correlated_related_events_agg_sum"] = event_management_correlation_correlated_related_events_agg_sum + if fargate_container_profiler_profiling_fargate_avg_sum is not unset: + kwargs["fargate_container_profiler_profiling_fargate_avg_sum"] = fargate_container_profiler_profiling_fargate_avg_sum + if fargate_container_profiler_profiling_fargate_eks_avg_sum is not unset: + kwargs["fargate_container_profiler_profiling_fargate_eks_avg_sum"] = fargate_container_profiler_profiling_fargate_eks_avg_sum + if fargate_tasks_count_avg_sum is not unset: + kwargs["fargate_tasks_count_avg_sum"] = fargate_tasks_count_avg_sum + if fargate_tasks_count_hwm_sum is not unset: + kwargs["fargate_tasks_count_hwm_sum"] = fargate_tasks_count_hwm_sum + if feature_flags_config_requests_agg_sum is not unset: + kwargs["feature_flags_config_requests_agg_sum"] = feature_flags_config_requests_agg_sum + if flex_logs_compute_large_avg_sum is not unset: + kwargs["flex_logs_compute_large_avg_sum"] = flex_logs_compute_large_avg_sum + if flex_logs_compute_medium_avg_sum is not unset: + kwargs["flex_logs_compute_medium_avg_sum"] = flex_logs_compute_medium_avg_sum + if flex_logs_compute_small_avg_sum is not unset: + kwargs["flex_logs_compute_small_avg_sum"] = flex_logs_compute_small_avg_sum + if flex_logs_compute_xlarge_avg_sum is not unset: + kwargs["flex_logs_compute_xlarge_avg_sum"] = flex_logs_compute_xlarge_avg_sum + if flex_logs_compute_xsmall_avg_sum is not unset: + kwargs["flex_logs_compute_xsmall_avg_sum"] = flex_logs_compute_xsmall_avg_sum + if flex_logs_starter_avg_sum is not unset: + kwargs["flex_logs_starter_avg_sum"] = flex_logs_starter_avg_sum + if flex_logs_starter_storage_index_avg_sum is not unset: + kwargs["flex_logs_starter_storage_index_avg_sum"] = flex_logs_starter_storage_index_avg_sum + if flex_logs_starter_storage_retention_adjustment_avg_sum is not unset: + kwargs["flex_logs_starter_storage_retention_adjustment_avg_sum"] = flex_logs_starter_storage_retention_adjustment_avg_sum + if flex_stored_logs_avg_sum is not unset: + kwargs["flex_stored_logs_avg_sum"] = flex_stored_logs_avg_sum + if forwarding_events_bytes_agg_sum is not unset: + kwargs["forwarding_events_bytes_agg_sum"] = forwarding_events_bytes_agg_sum + if gcp_host_top99p_sum is not unset: + kwargs["gcp_host_top99p_sum"] = gcp_host_top99p_sum + if heroku_host_top99p_sum is not unset: + kwargs["heroku_host_top99p_sum"] = heroku_host_top99p_sum + if incident_management_monthly_active_users_hwm_sum is not unset: + kwargs["incident_management_monthly_active_users_hwm_sum"] = incident_management_monthly_active_users_hwm_sum + if incident_management_seats_hwm_sum is not unset: + kwargs["incident_management_seats_hwm_sum"] = incident_management_seats_hwm_sum + if indexed_events_count_agg_sum is not unset: + kwargs["indexed_events_count_agg_sum"] = indexed_events_count_agg_sum + if indexed_points_agg_sum is not unset: + kwargs["indexed_points_agg_sum"] = indexed_points_agg_sum + if infra_cpu_agg_sum is not unset: + kwargs["infra_cpu_agg_sum"] = infra_cpu_agg_sum + if infra_cpu_avg_sum is not unset: + kwargs["infra_cpu_avg_sum"] = infra_cpu_avg_sum + if infra_cpu_default_infra_host_vcpu_agent_agg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_agg_sum"] = infra_cpu_default_infra_host_vcpu_agent_agg_sum + if infra_cpu_default_infra_host_vcpu_agent_avg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_avg_sum"] = infra_cpu_default_infra_host_vcpu_agent_avg_sum + if infra_cpu_default_infra_host_vcpu_agent_basic_agg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_basic_agg_sum"] = infra_cpu_default_infra_host_vcpu_agent_basic_agg_sum + if infra_cpu_default_infra_host_vcpu_agent_basic_avg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_agent_basic_avg_sum"] = infra_cpu_default_infra_host_vcpu_agent_basic_avg_sum + if infra_cpu_default_infra_host_vcpu_aws_agg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_aws_agg_sum"] = infra_cpu_default_infra_host_vcpu_aws_agg_sum + if infra_cpu_default_infra_host_vcpu_aws_avg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_aws_avg_sum"] = infra_cpu_default_infra_host_vcpu_aws_avg_sum + if infra_cpu_default_infra_host_vcpu_azure_agg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_azure_agg_sum"] = infra_cpu_default_infra_host_vcpu_azure_agg_sum + if infra_cpu_default_infra_host_vcpu_azure_avg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_azure_avg_sum"] = infra_cpu_default_infra_host_vcpu_azure_avg_sum + if infra_cpu_default_infra_host_vcpu_gcp_agg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_gcp_agg_sum"] = infra_cpu_default_infra_host_vcpu_gcp_agg_sum + if infra_cpu_default_infra_host_vcpu_gcp_avg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_gcp_avg_sum"] = infra_cpu_default_infra_host_vcpu_gcp_avg_sum + if infra_cpu_default_infra_host_vcpu_nutanix_agg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_agg_sum"] = infra_cpu_default_infra_host_vcpu_nutanix_agg_sum + if infra_cpu_default_infra_host_vcpu_nutanix_avg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_avg_sum"] = infra_cpu_default_infra_host_vcpu_nutanix_avg_sum + if infra_cpu_default_infra_host_vcpu_nutanix_basic_agg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_basic_agg_sum"] = infra_cpu_default_infra_host_vcpu_nutanix_basic_agg_sum + if infra_cpu_default_infra_host_vcpu_nutanix_basic_avg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_nutanix_basic_avg_sum"] = infra_cpu_default_infra_host_vcpu_nutanix_basic_avg_sum + if infra_cpu_default_infra_host_vcpu_opentelemetry_agg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_opentelemetry_agg_sum"] = infra_cpu_default_infra_host_vcpu_opentelemetry_agg_sum + if infra_cpu_default_infra_host_vcpu_opentelemetry_avg_sum is not unset: + kwargs["infra_cpu_default_infra_host_vcpu_opentelemetry_avg_sum"] = infra_cpu_default_infra_host_vcpu_opentelemetry_avg_sum + if infra_cpu_observed_infra_host_vcpu_agent_agg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_agent_agg_sum"] = infra_cpu_observed_infra_host_vcpu_agent_agg_sum + if infra_cpu_observed_infra_host_vcpu_agent_avg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_agent_avg_sum"] = infra_cpu_observed_infra_host_vcpu_agent_avg_sum + if infra_cpu_observed_infra_host_vcpu_aws_agg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_aws_agg_sum"] = infra_cpu_observed_infra_host_vcpu_aws_agg_sum + if infra_cpu_observed_infra_host_vcpu_aws_avg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_aws_avg_sum"] = infra_cpu_observed_infra_host_vcpu_aws_avg_sum + if infra_cpu_observed_infra_host_vcpu_azure_agg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_azure_agg_sum"] = infra_cpu_observed_infra_host_vcpu_azure_agg_sum + if infra_cpu_observed_infra_host_vcpu_azure_avg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_azure_avg_sum"] = infra_cpu_observed_infra_host_vcpu_azure_avg_sum + if infra_cpu_observed_infra_host_vcpu_gcp_agg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_gcp_agg_sum"] = infra_cpu_observed_infra_host_vcpu_gcp_agg_sum + if infra_cpu_observed_infra_host_vcpu_gcp_avg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_gcp_avg_sum"] = infra_cpu_observed_infra_host_vcpu_gcp_avg_sum + if infra_cpu_observed_infra_host_vcpu_nutanix_agg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_nutanix_agg_sum"] = infra_cpu_observed_infra_host_vcpu_nutanix_agg_sum + if infra_cpu_observed_infra_host_vcpu_nutanix_avg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_nutanix_avg_sum"] = infra_cpu_observed_infra_host_vcpu_nutanix_avg_sum + if infra_cpu_observed_infra_host_vcpu_opentelemetry_agg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_opentelemetry_agg_sum"] = infra_cpu_observed_infra_host_vcpu_opentelemetry_agg_sum + if infra_cpu_observed_infra_host_vcpu_opentelemetry_avg_sum is not unset: + kwargs["infra_cpu_observed_infra_host_vcpu_opentelemetry_avg_sum"] = infra_cpu_observed_infra_host_vcpu_opentelemetry_avg_sum + if infra_edge_monitoring_devices_top99p_sum is not unset: + kwargs["infra_edge_monitoring_devices_top99p_sum"] = infra_edge_monitoring_devices_top99p_sum + if infra_host_basic_infra_basic_agent_top99p_sum is not unset: + kwargs["infra_host_basic_infra_basic_agent_top99p_sum"] = infra_host_basic_infra_basic_agent_top99p_sum + if infra_host_basic_infra_basic_vsphere_top99p_sum is not unset: + kwargs["infra_host_basic_infra_basic_vsphere_top99p_sum"] = infra_host_basic_infra_basic_vsphere_top99p_sum + if infra_host_basic_top99p_sum is not unset: + kwargs["infra_host_basic_top99p_sum"] = infra_host_basic_top99p_sum + if infra_host_top99p_sum is not unset: + kwargs["infra_host_top99p_sum"] = infra_host_top99p_sum + if infra_storage_mgmt_objects_count_avg_sum is not unset: + kwargs["infra_storage_mgmt_objects_count_avg_sum"] = infra_storage_mgmt_objects_count_avg_sum + if ingest_points_agg_sum is not unset: + kwargs["ingest_points_agg_sum"] = ingest_points_agg_sum + if ingested_events_bytes_agg_sum is not unset: + kwargs["ingested_events_bytes_agg_sum"] = ingested_events_bytes_agg_sum + if iot_apm_host_agg_sum is not unset: + kwargs["iot_apm_host_agg_sum"] = iot_apm_host_agg_sum + if iot_apm_host_top99p_sum is not unset: + kwargs["iot_apm_host_top99p_sum"] = iot_apm_host_top99p_sum + if iot_device_agg_sum is not unset: + kwargs["iot_device_agg_sum"] = iot_device_agg_sum + if iot_device_top99p_sum is not unset: + kwargs["iot_device_top99p_sum"] = iot_device_top99p_sum + if last_updated is not unset: + kwargs["last_updated"] = last_updated + if live_indexed_events_agg_sum is not unset: + kwargs["live_indexed_events_agg_sum"] = live_indexed_events_agg_sum + if live_ingested_bytes_agg_sum is not unset: + kwargs["live_ingested_bytes_agg_sum"] = live_ingested_bytes_agg_sum + if llm_observability_15day_retention_spans_agg_sum is not unset: + kwargs["llm_observability_15day_retention_spans_agg_sum"] = llm_observability_15day_retention_spans_agg_sum + if llm_observability_30day_retention_spans_agg_sum is not unset: + kwargs["llm_observability_30day_retention_spans_agg_sum"] = llm_observability_30day_retention_spans_agg_sum + if llm_observability_60day_retention_spans_agg_sum is not unset: + kwargs["llm_observability_60day_retention_spans_agg_sum"] = llm_observability_60day_retention_spans_agg_sum + if llm_observability_90day_retention_spans_agg_sum is not unset: + kwargs["llm_observability_90day_retention_spans_agg_sum"] = llm_observability_90day_retention_spans_agg_sum + if llm_observability_agg_sum is not unset: + kwargs["llm_observability_agg_sum"] = llm_observability_agg_sum + if llm_observability_min_spend_agg_sum is not unset: + kwargs["llm_observability_min_spend_agg_sum"] = llm_observability_min_spend_agg_sum + if logs_archive_search_gb_scanned_agg_sum is not unset: + kwargs["logs_archive_search_gb_scanned_agg_sum"] = logs_archive_search_gb_scanned_agg_sum + if logs_by_retention is not unset: + kwargs["logs_by_retention"] = logs_by_retention + if metric_names_agg_sum is not unset: + kwargs["metric_names_agg_sum"] = metric_names_agg_sum + if mobile_rum_lite_session_count_agg_sum is not unset: + kwargs["mobile_rum_lite_session_count_agg_sum"] = mobile_rum_lite_session_count_agg_sum + if mobile_rum_session_count_agg_sum is not unset: + kwargs["mobile_rum_session_count_agg_sum"] = mobile_rum_session_count_agg_sum + if mobile_rum_session_count_android_agg_sum is not unset: + kwargs["mobile_rum_session_count_android_agg_sum"] = mobile_rum_session_count_android_agg_sum + if mobile_rum_session_count_flutter_agg_sum is not unset: + kwargs["mobile_rum_session_count_flutter_agg_sum"] = mobile_rum_session_count_flutter_agg_sum + if mobile_rum_session_count_ios_agg_sum is not unset: + kwargs["mobile_rum_session_count_ios_agg_sum"] = mobile_rum_session_count_ios_agg_sum + if mobile_rum_session_count_reactnative_agg_sum is not unset: + kwargs["mobile_rum_session_count_reactnative_agg_sum"] = mobile_rum_session_count_reactnative_agg_sum + if mobile_rum_session_count_roku_agg_sum is not unset: + kwargs["mobile_rum_session_count_roku_agg_sum"] = mobile_rum_session_count_roku_agg_sum + if mobile_rum_units_agg_sum is not unset: + kwargs["mobile_rum_units_agg_sum"] = mobile_rum_units_agg_sum + if ndm_netflow_events_agg_sum is not unset: + kwargs["ndm_netflow_events_agg_sum"] = ndm_netflow_events_agg_sum + if netflow_indexed_events_count_agg_sum is not unset: + kwargs["netflow_indexed_events_count_agg_sum"] = netflow_indexed_events_count_agg_sum + if network_device_wireless_top99p_sum is not unset: + kwargs["network_device_wireless_top99p_sum"] = network_device_wireless_top99p_sum + if network_path_agg_sum is not unset: + kwargs["network_path_agg_sum"] = network_path_agg_sum + if npm_host_top99p_sum is not unset: + kwargs["npm_host_top99p_sum"] = npm_host_top99p_sum + if observability_pipelines_bytes_processed_agg_sum is not unset: + kwargs["observability_pipelines_bytes_processed_agg_sum"] = observability_pipelines_bytes_processed_agg_sum + if oci_host_agg_sum is not unset: + kwargs["oci_host_agg_sum"] = oci_host_agg_sum + if oci_host_top99p_sum is not unset: + kwargs["oci_host_top99p_sum"] = oci_host_top99p_sum + if on_call_seat_hwm_sum is not unset: + kwargs["on_call_seat_hwm_sum"] = on_call_seat_hwm_sum + if online_archive_events_count_agg_sum is not unset: + kwargs["online_archive_events_count_agg_sum"] = online_archive_events_count_agg_sum + if opentelemetry_apm_host_top99p_sum is not unset: + kwargs["opentelemetry_apm_host_top99p_sum"] = opentelemetry_apm_host_top99p_sum + if opentelemetry_host_top99p_sum is not unset: + kwargs["opentelemetry_host_top99p_sum"] = opentelemetry_host_top99p_sum + if product_analytics_agg_sum is not unset: + kwargs["product_analytics_agg_sum"] = product_analytics_agg_sum + if profiling_aas_count_top99p_sum is not unset: + kwargs["profiling_aas_count_top99p_sum"] = profiling_aas_count_top99p_sum + if profiling_container_agent_count_avg is not unset: + kwargs["profiling_container_agent_count_avg"] = profiling_container_agent_count_avg + if profiling_host_count_top99p_sum is not unset: + kwargs["profiling_host_count_top99p_sum"] = profiling_host_count_top99p_sum + if proxmox_host_agg_sum is not unset: + kwargs["proxmox_host_agg_sum"] = proxmox_host_agg_sum + if proxmox_host_top99p_sum is not unset: + kwargs["proxmox_host_top99p_sum"] = proxmox_host_top99p_sum + if published_app_hwm_sum is not unset: + kwargs["published_app_hwm_sum"] = published_app_hwm_sum + if rehydrated_indexed_events_agg_sum is not unset: + kwargs["rehydrated_indexed_events_agg_sum"] = rehydrated_indexed_events_agg_sum + if rehydrated_ingested_bytes_agg_sum is not unset: + kwargs["rehydrated_ingested_bytes_agg_sum"] = rehydrated_ingested_bytes_agg_sum + if rum_browser_and_mobile_session_count is not unset: + kwargs["rum_browser_and_mobile_session_count"] = rum_browser_and_mobile_session_count + if rum_browser_legacy_session_count_agg_sum is not unset: + kwargs["rum_browser_legacy_session_count_agg_sum"] = rum_browser_legacy_session_count_agg_sum + if rum_browser_lite_session_count_agg_sum is not unset: + kwargs["rum_browser_lite_session_count_agg_sum"] = rum_browser_lite_session_count_agg_sum + if rum_browser_replay_session_count_agg_sum is not unset: + kwargs["rum_browser_replay_session_count_agg_sum"] = rum_browser_replay_session_count_agg_sum + if rum_indexed_sessions_agg_sum is not unset: + kwargs["rum_indexed_sessions_agg_sum"] = rum_indexed_sessions_agg_sum + if rum_ingested_sessions_agg_sum is not unset: + kwargs["rum_ingested_sessions_agg_sum"] = rum_ingested_sessions_agg_sum + if rum_lite_session_count_agg_sum is not unset: + kwargs["rum_lite_session_count_agg_sum"] = rum_lite_session_count_agg_sum + if rum_mobile_legacy_session_count_android_agg_sum is not unset: + kwargs["rum_mobile_legacy_session_count_android_agg_sum"] = rum_mobile_legacy_session_count_android_agg_sum + if rum_mobile_legacy_session_count_flutter_agg_sum is not unset: + kwargs["rum_mobile_legacy_session_count_flutter_agg_sum"] = rum_mobile_legacy_session_count_flutter_agg_sum + if rum_mobile_legacy_session_count_ios_agg_sum is not unset: + kwargs["rum_mobile_legacy_session_count_ios_agg_sum"] = rum_mobile_legacy_session_count_ios_agg_sum + if rum_mobile_legacy_session_count_reactnative_agg_sum is not unset: + kwargs["rum_mobile_legacy_session_count_reactnative_agg_sum"] = rum_mobile_legacy_session_count_reactnative_agg_sum + if rum_mobile_legacy_session_count_roku_agg_sum is not unset: + kwargs["rum_mobile_legacy_session_count_roku_agg_sum"] = rum_mobile_legacy_session_count_roku_agg_sum + if rum_mobile_lite_session_count_android_agg_sum is not unset: + kwargs["rum_mobile_lite_session_count_android_agg_sum"] = rum_mobile_lite_session_count_android_agg_sum + if rum_mobile_lite_session_count_flutter_agg_sum is not unset: + kwargs["rum_mobile_lite_session_count_flutter_agg_sum"] = rum_mobile_lite_session_count_flutter_agg_sum + if rum_mobile_lite_session_count_ios_agg_sum is not unset: + kwargs["rum_mobile_lite_session_count_ios_agg_sum"] = rum_mobile_lite_session_count_ios_agg_sum + if rum_mobile_lite_session_count_kotlinmultiplatform_agg_sum is not unset: + kwargs["rum_mobile_lite_session_count_kotlinmultiplatform_agg_sum"] = rum_mobile_lite_session_count_kotlinmultiplatform_agg_sum + if rum_mobile_lite_session_count_reactnative_agg_sum is not unset: + kwargs["rum_mobile_lite_session_count_reactnative_agg_sum"] = rum_mobile_lite_session_count_reactnative_agg_sum + if rum_mobile_lite_session_count_roku_agg_sum is not unset: + kwargs["rum_mobile_lite_session_count_roku_agg_sum"] = rum_mobile_lite_session_count_roku_agg_sum + if rum_mobile_lite_session_count_unity_agg_sum is not unset: + kwargs["rum_mobile_lite_session_count_unity_agg_sum"] = rum_mobile_lite_session_count_unity_agg_sum + if rum_mobile_replay_session_count_android_agg_sum is not unset: + kwargs["rum_mobile_replay_session_count_android_agg_sum"] = rum_mobile_replay_session_count_android_agg_sum + if rum_mobile_replay_session_count_ios_agg_sum is not unset: + kwargs["rum_mobile_replay_session_count_ios_agg_sum"] = rum_mobile_replay_session_count_ios_agg_sum + if rum_mobile_replay_session_count_kotlinmultiplatform_agg_sum is not unset: + kwargs["rum_mobile_replay_session_count_kotlinmultiplatform_agg_sum"] = rum_mobile_replay_session_count_kotlinmultiplatform_agg_sum + if rum_mobile_replay_session_count_reactnative_agg_sum is not unset: + kwargs["rum_mobile_replay_session_count_reactnative_agg_sum"] = rum_mobile_replay_session_count_reactnative_agg_sum + if rum_replay_session_count_agg_sum is not unset: + kwargs["rum_replay_session_count_agg_sum"] = rum_replay_session_count_agg_sum + if rum_session_count_agg_sum is not unset: + kwargs["rum_session_count_agg_sum"] = rum_session_count_agg_sum + if rum_session_replay_add_on_agg_sum is not unset: + kwargs["rum_session_replay_add_on_agg_sum"] = rum_session_replay_add_on_agg_sum + if rum_total_session_count_agg_sum is not unset: + kwargs["rum_total_session_count_agg_sum"] = rum_total_session_count_agg_sum + if rum_units_agg_sum is not unset: + kwargs["rum_units_agg_sum"] = rum_units_agg_sum + if sca_fargate_count_avg_sum is not unset: + kwargs["sca_fargate_count_avg_sum"] = sca_fargate_count_avg_sum + if sca_fargate_count_hwm_sum is not unset: + kwargs["sca_fargate_count_hwm_sum"] = sca_fargate_count_hwm_sum + if sds_apm_scanned_bytes_sum is not unset: + kwargs["sds_apm_scanned_bytes_sum"] = sds_apm_scanned_bytes_sum + if sds_events_scanned_bytes_sum is not unset: + kwargs["sds_events_scanned_bytes_sum"] = sds_events_scanned_bytes_sum + if sds_logs_scanned_bytes_sum is not unset: + kwargs["sds_logs_scanned_bytes_sum"] = sds_logs_scanned_bytes_sum + if sds_rum_scanned_bytes_sum is not unset: + kwargs["sds_rum_scanned_bytes_sum"] = sds_rum_scanned_bytes_sum + if sds_total_scanned_bytes_sum is not unset: + kwargs["sds_total_scanned_bytes_sum"] = sds_total_scanned_bytes_sum + if serverless_apps_apm_apm_azure_appservice_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_apm_azure_appservice_instances_avg_sum"] = serverless_apps_apm_apm_azure_appservice_instances_avg_sum + if serverless_apps_apm_apm_azure_azurefunction_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_apm_azure_azurefunction_instances_avg_sum"] = serverless_apps_apm_apm_azure_azurefunction_instances_avg_sum + if serverless_apps_apm_apm_azure_containerapp_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_apm_azure_containerapp_instances_avg_sum"] = serverless_apps_apm_apm_azure_containerapp_instances_avg_sum + if serverless_apps_apm_apm_fargate_ecs_tasks_avg_sum is not unset: + kwargs["serverless_apps_apm_apm_fargate_ecs_tasks_avg_sum"] = serverless_apps_apm_apm_fargate_ecs_tasks_avg_sum + if serverless_apps_apm_apm_gcp_cloudfunction_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_apm_gcp_cloudfunction_instances_avg_sum"] = serverless_apps_apm_apm_gcp_cloudfunction_instances_avg_sum + if serverless_apps_apm_apm_gcp_cloudrun_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_apm_gcp_cloudrun_instances_avg_sum"] = serverless_apps_apm_apm_gcp_cloudrun_instances_avg_sum + if serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg_sum is not unset: + kwargs["serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg_sum"] = serverless_apps_apm_apm_gcp_gke_autopilot_pods_avg_sum + if serverless_apps_apm_avg_sum is not unset: + kwargs["serverless_apps_apm_avg_sum"] = serverless_apps_apm_avg_sum + if serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg_sum"] = serverless_apps_apm_excl_fargate_apm_azure_appservice_instances_avg_sum + if serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg_sum"] = serverless_apps_apm_excl_fargate_apm_azure_azurefunction_instances_avg_sum + if serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg_sum"] = serverless_apps_apm_excl_fargate_apm_azure_containerapp_instances_avg_sum + if serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg_sum"] = serverless_apps_apm_excl_fargate_apm_gcp_cloudfunction_instances_avg_sum + if serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg_sum is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg_sum"] = serverless_apps_apm_excl_fargate_apm_gcp_cloudrun_instances_avg_sum + if serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg_sum is not unset: + kwargs["serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg_sum"] = serverless_apps_apm_excl_fargate_apm_gcp_gke_autopilot_pods_avg_sum + if serverless_apps_apm_excl_fargate_avg_sum is not unset: + kwargs["serverless_apps_apm_excl_fargate_avg_sum"] = serverless_apps_apm_excl_fargate_avg_sum + if serverless_apps_azure_container_app_instances_avg_sum is not unset: + kwargs["serverless_apps_azure_container_app_instances_avg_sum"] = serverless_apps_azure_container_app_instances_avg_sum + if serverless_apps_azure_count_avg_sum is not unset: + kwargs["serverless_apps_azure_count_avg_sum"] = serverless_apps_azure_count_avg_sum + if serverless_apps_azure_function_app_instances_avg_sum is not unset: + kwargs["serverless_apps_azure_function_app_instances_avg_sum"] = serverless_apps_azure_function_app_instances_avg_sum + if serverless_apps_azure_web_app_instances_avg_sum is not unset: + kwargs["serverless_apps_azure_web_app_instances_avg_sum"] = serverless_apps_azure_web_app_instances_avg_sum + if serverless_apps_dsm_fargate_tasks_avg_sum is not unset: + kwargs["serverless_apps_dsm_fargate_tasks_avg_sum"] = serverless_apps_dsm_fargate_tasks_avg_sum + if serverless_apps_ecs_avg_sum is not unset: + kwargs["serverless_apps_ecs_avg_sum"] = serverless_apps_ecs_avg_sum + if serverless_apps_eks_avg_sum is not unset: + kwargs["serverless_apps_eks_avg_sum"] = serverless_apps_eks_avg_sum + if serverless_apps_excl_fargate_avg_sum is not unset: + kwargs["serverless_apps_excl_fargate_avg_sum"] = serverless_apps_excl_fargate_avg_sum + if serverless_apps_excl_fargate_azure_container_app_instances_avg_sum is not unset: + kwargs["serverless_apps_excl_fargate_azure_container_app_instances_avg_sum"] = serverless_apps_excl_fargate_azure_container_app_instances_avg_sum + if serverless_apps_excl_fargate_azure_function_app_instances_avg_sum is not unset: + kwargs["serverless_apps_excl_fargate_azure_function_app_instances_avg_sum"] = serverless_apps_excl_fargate_azure_function_app_instances_avg_sum + if serverless_apps_excl_fargate_azure_web_app_instances_avg_sum is not unset: + kwargs["serverless_apps_excl_fargate_azure_web_app_instances_avg_sum"] = serverless_apps_excl_fargate_azure_web_app_instances_avg_sum + if serverless_apps_excl_fargate_google_cloud_functions_instances_avg_sum is not unset: + kwargs["serverless_apps_excl_fargate_google_cloud_functions_instances_avg_sum"] = serverless_apps_excl_fargate_google_cloud_functions_instances_avg_sum + if serverless_apps_excl_fargate_google_cloud_run_instances_avg_sum is not unset: + kwargs["serverless_apps_excl_fargate_google_cloud_run_instances_avg_sum"] = serverless_apps_excl_fargate_google_cloud_run_instances_avg_sum + if serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg_sum is not unset: + kwargs["serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg_sum"] = serverless_apps_excl_fargate_infra_gcp_gke_autopilot_pods_avg_sum + if serverless_apps_google_cloud_functions_instances_avg_sum is not unset: + kwargs["serverless_apps_google_cloud_functions_instances_avg_sum"] = serverless_apps_google_cloud_functions_instances_avg_sum + if serverless_apps_google_cloud_run_instances_avg_sum is not unset: + kwargs["serverless_apps_google_cloud_run_instances_avg_sum"] = serverless_apps_google_cloud_run_instances_avg_sum + if serverless_apps_google_count_avg_sum is not unset: + kwargs["serverless_apps_google_count_avg_sum"] = serverless_apps_google_count_avg_sum + if serverless_apps_infra_gcp_gke_autopilot_pods_avg_sum is not unset: + kwargs["serverless_apps_infra_gcp_gke_autopilot_pods_avg_sum"] = serverless_apps_infra_gcp_gke_autopilot_pods_avg_sum + if serverless_apps_total_count_avg_sum is not unset: + kwargs["serverless_apps_total_count_avg_sum"] = serverless_apps_total_count_avg_sum + if siem_12mo_retention_agg_sum is not unset: + kwargs["siem_12mo_retention_agg_sum"] = siem_12mo_retention_agg_sum + if siem_6mo_retention_agg_sum is not unset: + kwargs["siem_6mo_retention_agg_sum"] = siem_6mo_retention_agg_sum + if siem_analyzed_logs_add_on_count_agg_sum is not unset: + kwargs["siem_analyzed_logs_add_on_count_agg_sum"] = siem_analyzed_logs_add_on_count_agg_sum + if snmp_device_count_agg_sum is not unset: + kwargs["snmp_device_count_agg_sum"] = snmp_device_count_agg_sum + if snmp_device_count_top99p_sum is not unset: + kwargs["snmp_device_count_top99p_sum"] = snmp_device_count_top99p_sum + if start_date is not unset: + kwargs["start_date"] = start_date + if synthetics_browser_check_calls_count_agg_sum is not unset: + kwargs["synthetics_browser_check_calls_count_agg_sum"] = synthetics_browser_check_calls_count_agg_sum + if synthetics_check_calls_count_agg_sum is not unset: + kwargs["synthetics_check_calls_count_agg_sum"] = synthetics_check_calls_count_agg_sum + if synthetics_mobile_test_runs_agg_sum is not unset: + kwargs["synthetics_mobile_test_runs_agg_sum"] = synthetics_mobile_test_runs_agg_sum + if synthetics_parallel_testing_max_slots_hwm_sum is not unset: + kwargs["synthetics_parallel_testing_max_slots_hwm_sum"] = synthetics_parallel_testing_max_slots_hwm_sum + if trace_search_indexed_events_count_agg_sum is not unset: + kwargs["trace_search_indexed_events_count_agg_sum"] = trace_search_indexed_events_count_agg_sum + if twol_ingested_events_bytes_agg_sum is not unset: + kwargs["twol_ingested_events_bytes_agg_sum"] = twol_ingested_events_bytes_agg_sum + if universal_service_monitoring_host_top99p_sum is not unset: + kwargs["universal_service_monitoring_host_top99p_sum"] = universal_service_monitoring_host_top99p_sum + if usage is not unset: + kwargs["usage"] = usage + if vsphere_host_top99p_sum is not unset: + kwargs["vsphere_host_top99p_sum"] = vsphere_host_top99p_sum + if vuln_management_host_count_top99p_sum is not unset: + kwargs["vuln_management_host_count_top99p_sum"] = vuln_management_host_count_top99p_sum + if workflow_executions_usage_agg_sum is not unset: + kwargs["workflow_executions_usage_agg_sum"] = workflow_executions_usage_agg_sum + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_synthetics_api_hour.py b/datadog_api_client/v1/model/usage_synthetics_api_hour.py new file mode 100644 index 0000000000..48e1ee538a --- /dev/null +++ b/datadog_api_client/v1/model/usage_synthetics_api_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageSyntheticsAPIHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "check_calls_count": (int, none_type), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "check_calls_count": "check_calls_count", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, check_calls_count: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Number of Synthetics API tests run for each hour for a given organization. + + :param check_calls_count: Contains the number of Synthetics API tests run. + :type check_calls_count: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if check_calls_count is not unset: + kwargs["check_calls_count"] = check_calls_count + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_synthetics_api_response.py b/datadog_api_client/v1/model/usage_synthetics_api_response.py new file mode 100644 index 0000000000..89286ff137 --- /dev/null +++ b/datadog_api_client/v1/model/usage_synthetics_api_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_synthetics_api_hour import UsageSyntheticsAPIHour + +class UsageSyntheticsAPIResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_synthetics_api_hour import UsageSyntheticsAPIHour + return { + "usage": ([UsageSyntheticsAPIHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageSyntheticsAPIHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of Synthetics API tests run for each hour for a given organization. + + :param usage: Get hourly usage for Synthetics API tests. + :type usage: [UsageSyntheticsAPIHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_synthetics_browser_hour.py b/datadog_api_client/v1/model/usage_synthetics_browser_hour.py new file mode 100644 index 0000000000..2f2589b143 --- /dev/null +++ b/datadog_api_client/v1/model/usage_synthetics_browser_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageSyntheticsBrowserHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "browser_check_calls_count": (int, none_type), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "browser_check_calls_count": "browser_check_calls_count", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, browser_check_calls_count: Union[int, none_type, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Number of Synthetics Browser tests run for each hour for a given organization. + + :param browser_check_calls_count: Contains the number of Synthetics Browser tests run. + :type browser_check_calls_count: int, none_type, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if browser_check_calls_count is not unset: + kwargs["browser_check_calls_count"] = browser_check_calls_count + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_synthetics_browser_response.py b/datadog_api_client/v1/model/usage_synthetics_browser_response.py new file mode 100644 index 0000000000..eff4937972 --- /dev/null +++ b/datadog_api_client/v1/model/usage_synthetics_browser_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_synthetics_browser_hour import UsageSyntheticsBrowserHour + +class UsageSyntheticsBrowserResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_synthetics_browser_hour import UsageSyntheticsBrowserHour + return { + "usage": ([UsageSyntheticsBrowserHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageSyntheticsBrowserHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of Synthetics Browser tests run for each hour for a given organization. + + :param usage: Get hourly usage for Synthetics Browser tests. + :type usage: [UsageSyntheticsBrowserHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_synthetics_hour.py b/datadog_api_client/v1/model/usage_synthetics_hour.py new file mode 100644 index 0000000000..c42050e622 --- /dev/null +++ b/datadog_api_client/v1/model/usage_synthetics_hour.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageSyntheticsHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "check_calls_count": (int,), + "hour": (datetime,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "check_calls_count": "check_calls_count", + "hour": "hour", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, check_calls_count: Union[int, UnsetType]=unset, hour: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + The number of synthetics tests run for each hour for a given organization. + + :param check_calls_count: Contains the number of Synthetics API tests run. + :type check_calls_count: int, optional + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if check_calls_count is not unset: + kwargs["check_calls_count"] = check_calls_count + if hour is not unset: + kwargs["hour"] = hour + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_synthetics_response.py b/datadog_api_client/v1/model/usage_synthetics_response.py new file mode 100644 index 0000000000..0df72d96f0 --- /dev/null +++ b/datadog_api_client/v1/model/usage_synthetics_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_synthetics_hour import UsageSyntheticsHour + +class UsageSyntheticsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_synthetics_hour import UsageSyntheticsHour + return { + "usage": ([UsageSyntheticsHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageSyntheticsHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of Synthetics API tests run for each hour for a given organization. + + :param usage: Array with the number of hourly Synthetics test run for a given organization. + :type usage: [UsageSyntheticsHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_timeseries_hour.py b/datadog_api_client/v1/model/usage_timeseries_hour.py new file mode 100644 index 0000000000..0d1e657b3e --- /dev/null +++ b/datadog_api_client/v1/model/usage_timeseries_hour.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageTimeseriesHour(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hour": (datetime,), + "num_custom_input_timeseries": (int,), + "num_custom_output_timeseries": (int,), + "num_custom_timeseries": (int,), + "org_name": (str,), + "public_id": (str,), + } + attribute_map = { + "hour": "hour", + "num_custom_input_timeseries": "num_custom_input_timeseries", + "num_custom_output_timeseries": "num_custom_output_timeseries", + "num_custom_timeseries": "num_custom_timeseries", + "org_name": "org_name", + "public_id": "public_id", + } + + def __init__(self_, hour: Union[datetime, UnsetType]=unset, num_custom_input_timeseries: Union[int, UnsetType]=unset, num_custom_output_timeseries: Union[int, UnsetType]=unset, num_custom_timeseries: Union[int, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + The hourly usage of timeseries. + + :param hour: The hour for the usage. + :type hour: datetime, optional + + :param num_custom_input_timeseries: Contains the number of custom metrics that are inputs for aggregations (metric configured is custom). + :type num_custom_input_timeseries: int, optional + + :param num_custom_output_timeseries: Contains the number of custom metrics that are outputs for aggregations (metric configured is custom). + :type num_custom_output_timeseries: int, optional + + :param num_custom_timeseries: Contains sum of non-aggregation custom metrics and custom metrics that are outputs for aggregations. + :type num_custom_timeseries: int, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + """ + if hour is not unset: + kwargs["hour"] = hour + if num_custom_input_timeseries is not unset: + kwargs["num_custom_input_timeseries"] = num_custom_input_timeseries + if num_custom_output_timeseries is not unset: + kwargs["num_custom_output_timeseries"] = num_custom_output_timeseries + if num_custom_timeseries is not unset: + kwargs["num_custom_timeseries"] = num_custom_timeseries + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_timeseries_response.py b/datadog_api_client/v1/model/usage_timeseries_response.py new file mode 100644 index 0000000000..d817a3933d --- /dev/null +++ b/datadog_api_client/v1/model/usage_timeseries_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_timeseries_hour import UsageTimeseriesHour + +class UsageTimeseriesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_timeseries_hour import UsageTimeseriesHour + return { + "usage": ([UsageTimeseriesHour],), + } + attribute_map = { + "usage": "usage", + } + + def __init__(self_, usage: Union[List[UsageTimeseriesHour], UnsetType]=unset, **kwargs): + """ + Response containing hourly usage of timeseries. + + :param usage: An array of objects regarding hourly usage of timeseries. + :type usage: [UsageTimeseriesHour], optional + """ + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_top_avg_metrics_hour.py b/datadog_api_client/v1/model/usage_top_avg_metrics_hour.py new file mode 100644 index 0000000000..08574e4339 --- /dev/null +++ b/datadog_api_client/v1/model/usage_top_avg_metrics_hour.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_metric_category import UsageMetricCategory + +class UsageTopAvgMetricsHour(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_metric_category import UsageMetricCategory + return { + "avg_metric_hour": (int,), + "max_metric_hour": (int,), + "metric_category": (UsageMetricCategory,), + "metric_name": (str,), + } + attribute_map = { + "avg_metric_hour": "avg_metric_hour", + "max_metric_hour": "max_metric_hour", + "metric_category": "metric_category", + "metric_name": "metric_name", + } + + def __init__(self_, avg_metric_hour: Union[int, UnsetType]=unset, max_metric_hour: Union[int, UnsetType]=unset, metric_category: Union[UsageMetricCategory, UnsetType]=unset, metric_name: Union[str, UnsetType]=unset, **kwargs): + """ + Number of hourly recorded custom metrics for a given organization. + + :param avg_metric_hour: Average number of timeseries per hour in which the metric occurs. + :type avg_metric_hour: int, optional + + :param max_metric_hour: Maximum number of timeseries per hour in which the metric occurs. + :type max_metric_hour: int, optional + + :param metric_category: Contains the metric category. + :type metric_category: UsageMetricCategory, optional + + :param metric_name: Contains the custom metric name. + :type metric_name: str, optional + """ + if avg_metric_hour is not unset: + kwargs["avg_metric_hour"] = avg_metric_hour + if max_metric_hour is not unset: + kwargs["max_metric_hour"] = max_metric_hour + if metric_category is not unset: + kwargs["metric_category"] = metric_category + if metric_name is not unset: + kwargs["metric_name"] = metric_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_top_avg_metrics_metadata.py b/datadog_api_client/v1/model/usage_top_avg_metrics_metadata.py new file mode 100644 index 0000000000..abf1673f1b --- /dev/null +++ b/datadog_api_client/v1/model/usage_top_avg_metrics_metadata.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_top_avg_metrics_pagination import UsageTopAvgMetricsPagination + +class UsageTopAvgMetricsMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_top_avg_metrics_pagination import UsageTopAvgMetricsPagination + return { + "day": (datetime,), + "month": (datetime,), + "pagination": (UsageTopAvgMetricsPagination,), + } + attribute_map = { + "day": "day", + "month": "month", + "pagination": "pagination", + } + + def __init__(self_, day: Union[datetime, UnsetType]=unset, month: Union[datetime, UnsetType]=unset, pagination: Union[UsageTopAvgMetricsPagination, UnsetType]=unset, **kwargs): + """ + The object containing document metadata. + + :param day: The day value from the user request that contains the returned usage data. (If day was used the request) + :type day: datetime, optional + + :param month: The month value from the user request that contains the returned usage data. (If month was used the request) + :type month: datetime, optional + + :param pagination: The metadata for the current pagination. + :type pagination: UsageTopAvgMetricsPagination, optional + """ + if day is not unset: + kwargs["day"] = day + if month is not unset: + kwargs["month"] = month + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_top_avg_metrics_pagination.py b/datadog_api_client/v1/model/usage_top_avg_metrics_pagination.py new file mode 100644 index 0000000000..1568a0348a --- /dev/null +++ b/datadog_api_client/v1/model/usage_top_avg_metrics_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageTopAvgMetricsPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "limit": (int,), + "next_record_id": (str, none_type), + "total_number_of_records": (int, none_type), + } + attribute_map = { + "limit": "limit", + "next_record_id": "next_record_id", + "total_number_of_records": "total_number_of_records", + } + + def __init__(self_, limit: Union[int, UnsetType]=unset, next_record_id: Union[str, none_type, UnsetType]=unset, total_number_of_records: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + The metadata for the current pagination. + + :param limit: Maximum amount of records to be returned. + :type limit: int, optional + + :param next_record_id: The cursor to get the next results (if any). To make the next request, use the same parameters and add ``next_record_id``. + :type next_record_id: str, none_type, optional + + :param total_number_of_records: Total number of records. + :type total_number_of_records: int, none_type, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if next_record_id is not unset: + kwargs["next_record_id"] = next_record_id + if total_number_of_records is not unset: + kwargs["total_number_of_records"] = total_number_of_records + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/usage_top_avg_metrics_response.py b/datadog_api_client/v1/model/usage_top_avg_metrics_response.py new file mode 100644 index 0000000000..db21947a00 --- /dev/null +++ b/datadog_api_client/v1/model/usage_top_avg_metrics_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.usage_top_avg_metrics_metadata import UsageTopAvgMetricsMetadata + from datadog_api_client.v1.model.usage_top_avg_metrics_hour import UsageTopAvgMetricsHour + +class UsageTopAvgMetricsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.usage_top_avg_metrics_metadata import UsageTopAvgMetricsMetadata + from datadog_api_client.v1.model.usage_top_avg_metrics_hour import UsageTopAvgMetricsHour + return { + "metadata": (UsageTopAvgMetricsMetadata,), + "usage": ([UsageTopAvgMetricsHour],), + } + attribute_map = { + "metadata": "metadata", + "usage": "usage", + } + + def __init__(self_, metadata: Union[UsageTopAvgMetricsMetadata, UnsetType]=unset, usage: Union[List[UsageTopAvgMetricsHour], UnsetType]=unset, **kwargs): + """ + Response containing the number of hourly recorded custom metrics for a given organization. + + :param metadata: The object containing document metadata. + :type metadata: UsageTopAvgMetricsMetadata, optional + + :param usage: Number of hourly recorded custom metrics for a given organization. + :type usage: [UsageTopAvgMetricsHour], optional + """ + if metadata is not unset: + kwargs["metadata"] = metadata + if usage is not unset: + kwargs["usage"] = usage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/user.py b/datadog_api_client/v1/model/user.py new file mode 100644 index 0000000000..4fa9da7166 --- /dev/null +++ b/datadog_api_client/v1/model/user.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.access_role import AccessRole + +class User(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.access_role import AccessRole + return { + "access_role": (AccessRole,), + "disabled": (bool,), + "email": (str,), + "handle": (str,), + "icon": (str,), + "name": (str,), + "verified": (bool,), + } + attribute_map = { + "access_role": "access_role", + "disabled": "disabled", + "email": "email", + "handle": "handle", + "icon": "icon", + "name": "name", + "verified": "verified", + } + read_only_vars = { + "icon", + "verified", + } + + def __init__(self_, access_role: Union[AccessRole, none_type, UnsetType]=unset, disabled: Union[bool, UnsetType]=unset, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, icon: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, verified: Union[bool, UnsetType]=unset, **kwargs): + """ + Create, edit, and disable users. + + :param access_role: The access role of the user. Options are **st** (standard user), **adm** (admin user), or **ro** (read-only user). + :type access_role: AccessRole, none_type, optional + + :param disabled: The new disabled status of the user. + :type disabled: bool, optional + + :param email: The new email of the user. + :type email: str, optional + + :param handle: The user handle, must be a valid email. + :type handle: str, optional + + :param icon: Gravatar icon associated to the user. + :type icon: str, optional + + :param name: The name of the user. + :type name: str, optional + + :param verified: Whether or not the user logged in Datadog at least once. + :type verified: bool, optional + """ + if access_role is not unset: + kwargs["access_role"] = access_role + if disabled is not unset: + kwargs["disabled"] = disabled + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if icon is not unset: + kwargs["icon"] = icon + if name is not unset: + kwargs["name"] = name + if verified is not unset: + kwargs["verified"] = verified + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/user_disable_response.py b/datadog_api_client/v1/model/user_disable_response.py new file mode 100644 index 0000000000..7e67b917b3 --- /dev/null +++ b/datadog_api_client/v1/model/user_disable_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserDisableResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": (str,), + } + attribute_map = { + "message": "message", + } + + def __init__(self_, message: Union[str, UnsetType]=unset, **kwargs): + """ + Array of user disabled for a given organization. + + :param message: Information pertaining to a user disabled for a given organization. + :type message: str, optional + """ + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/user_journey_formula_compute.py b/datadog_api_client/v1/model/user_journey_formula_compute.py new file mode 100644 index 0000000000..679114622b --- /dev/null +++ b/datadog_api_client/v1/model/user_journey_formula_compute.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_event_aggregation import FormulaAndFunctionEventAggregation + from datadog_api_client.v1.model.user_journey_formula_compute_metric import UserJourneyFormulaComputeMetric + from datadog_api_client.v1.model.user_journey_search_target import UserJourneySearchTarget + +class UserJourneyFormulaCompute(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_event_aggregation import FormulaAndFunctionEventAggregation + from datadog_api_client.v1.model.user_journey_formula_compute_metric import UserJourneyFormulaComputeMetric + from datadog_api_client.v1.model.user_journey_search_target import UserJourneySearchTarget + return { + "aggregation": (FormulaAndFunctionEventAggregation,), + "interval": (float,), + "metric": (UserJourneyFormulaComputeMetric,), + "target": (UserJourneySearchTarget,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + "target": "target", + } + + def __init__(self_, aggregation: FormulaAndFunctionEventAggregation, interval: Union[float, UnsetType]=unset, metric: Union[UserJourneyFormulaComputeMetric, UnsetType]=unset, target: Union[UserJourneySearchTarget, UnsetType]=unset, **kwargs): + """ + Compute configuration for User Journey formula queries. + + :param aggregation: Aggregation methods for event platform queries. + :type aggregation: FormulaAndFunctionEventAggregation + + :param interval: Time bucket interval in milliseconds for time series queries. + :type interval: float, optional + + :param metric: Metric for User Journey formula compute. ``__dd.conversion`` and ``__dd.conversion_rate`` accept ``count`` and ``cardinality`` as aggregations. ``__dd.time_to_convert`` accepts ``avg`` , ``median`` , ``pc75`` , ``pc95`` , ``pc98`` , ``pc99`` , ``min`` , and ``max``. + :type metric: UserJourneyFormulaComputeMetric, optional + + :param target: Target for user journey search. + :type target: UserJourneySearchTarget, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v1/model/user_journey_formula_compute_metric.py b/datadog_api_client/v1/model/user_journey_formula_compute_metric.py new file mode 100644 index 0000000000..fb9e5664af --- /dev/null +++ b/datadog_api_client/v1/model/user_journey_formula_compute_metric.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserJourneyFormulaComputeMetric(ModelSimple): + """ + Metric for User Journey formula compute. `__dd.conversion` and `__dd.conversion_rate` accept `count` and `cardinality` as aggregations. `__dd.time_to_convert` accepts `avg`, `median`, `pc75`, `pc95`, `pc98`, `pc99`, `min`, and `max`. + + :param value: Must be one of ["__dd.conversion", "__dd.conversion_rate", "__dd.time_to_convert"]. + :type value: str + """ + + allowed_values = { + "__dd.conversion", + "__dd.conversion_rate", + "__dd.time_to_convert", + } + CONVERSION: ClassVar["UserJourneyFormulaComputeMetric"] + CONVERSION_RATE: ClassVar["UserJourneyFormulaComputeMetric"] + TIME_TO_CONVERT: ClassVar["UserJourneyFormulaComputeMetric"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserJourneyFormulaComputeMetric.CONVERSION = UserJourneyFormulaComputeMetric("__dd.conversion") +UserJourneyFormulaComputeMetric.CONVERSION_RATE = UserJourneyFormulaComputeMetric("__dd.conversion_rate") +UserJourneyFormulaComputeMetric.TIME_TO_CONVERT = UserJourneyFormulaComputeMetric("__dd.time_to_convert") diff --git a/datadog_api_client/v1/model/user_journey_formula_group_by.py b/datadog_api_client/v1/model/user_journey_formula_group_by.py new file mode 100644 index 0000000000..b37f728ec8 --- /dev/null +++ b/datadog_api_client/v1/model/user_journey_formula_group_by.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_sort import FormulaAndFunctionEventQueryGroupBySort + from datadog_api_client.v1.model.user_journey_search_target import UserJourneySearchTarget + +class UserJourneyFormulaGroupBy(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 10000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.formula_and_function_event_query_group_by_sort import FormulaAndFunctionEventQueryGroupBySort + from datadog_api_client.v1.model.user_journey_search_target import UserJourneySearchTarget + return { + "facet": (str,), + "limit": (int,), + "should_exclude_missing": (bool,), + "sort": (FormulaAndFunctionEventQueryGroupBySort,), + "target": (UserJourneySearchTarget,), + } + attribute_map = { + "facet": "facet", + "limit": "limit", + "should_exclude_missing": "should_exclude_missing", + "sort": "sort", + "target": "target", + } + + def __init__(self_, facet: str, limit: Union[int, UnsetType]=unset, should_exclude_missing: Union[bool, UnsetType]=unset, sort: Union[FormulaAndFunctionEventQueryGroupBySort, UnsetType]=unset, target: Union[UserJourneySearchTarget, UnsetType]=unset, **kwargs): + """ + Group by configuration for User Journey formula queries. + + :param facet: Facet name to group by. + :type facet: str + + :param limit: Maximum number of groups to return. + :type limit: int, optional + + :param should_exclude_missing: Whether to exclude events missing the group-by facet. + :type should_exclude_missing: bool, optional + + :param sort: Options for sorting group by results. + :type sort: FormulaAndFunctionEventQueryGroupBySort, optional + + :param target: Target for user journey search. + :type target: UserJourneySearchTarget, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if should_exclude_missing is not unset: + kwargs["should_exclude_missing"] = should_exclude_missing + if sort is not unset: + kwargs["sort"] = sort + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v1/model/user_journey_join_keys.py b/datadog_api_client/v1/model/user_journey_join_keys.py new file mode 100644 index 0000000000..af00a6af68 --- /dev/null +++ b/datadog_api_client/v1/model/user_journey_join_keys.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserJourneyJoinKeys(ModelNormal): + @cached_property + def openapi_types(_): + return { + "primary": (str,), + "secondary": ([str],), + } + attribute_map = { + "primary": "primary", + "secondary": "secondary", + } + + def __init__(self_, primary: str, secondary: Union[List[str], UnsetType]=unset, **kwargs): + """ + Join keys for user journey queries. + + :param primary: Primary join key. + :type primary: str + + :param secondary: Secondary join keys. + :type secondary: [str], optional + """ + if secondary is not unset: + kwargs["secondary"] = secondary + super().__init__(kwargs) + + + self_.primary = primary diff --git a/datadog_api_client/v1/model/user_journey_search.py b/datadog_api_client/v1/model/user_journey_search.py new file mode 100644 index 0000000000..a626e37ab1 --- /dev/null +++ b/datadog_api_client/v1/model/user_journey_search.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.user_journey_search_filters import UserJourneySearchFilters + from datadog_api_client.v1.model.user_journey_join_keys import UserJourneyJoinKeys + from datadog_api_client.v1.model.product_analytics_base_query import ProductAnalyticsBaseQuery + +class UserJourneySearch(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.user_journey_search_filters import UserJourneySearchFilters + from datadog_api_client.v1.model.user_journey_join_keys import UserJourneyJoinKeys + from datadog_api_client.v1.model.product_analytics_base_query import ProductAnalyticsBaseQuery + return { + "expression": (str,), + "filters": (UserJourneySearchFilters,), + "join_keys": (UserJourneyJoinKeys,), + "node_objects": ({str: (ProductAnalyticsBaseQuery,)},), + "step_aliases": ({str: (str,)},), + } + attribute_map = { + "expression": "expression", + "filters": "filters", + "join_keys": "join_keys", + "node_objects": "node_objects", + "step_aliases": "step_aliases", + } + + def __init__(self_, expression: str, node_objects: Dict[str, ProductAnalyticsBaseQuery], filters: Union[UserJourneySearchFilters, UnsetType]=unset, join_keys: Union[UserJourneyJoinKeys, UnsetType]=unset, step_aliases: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + User journey search configuration. + + :param expression: Expression string. + :type expression: str + + :param filters: Filters for user journey search. + :type filters: UserJourneySearchFilters, optional + + :param join_keys: Join keys for user journey queries. + :type join_keys: UserJourneyJoinKeys, optional + + :param node_objects: Node objects mapping. + :type node_objects: {str: (ProductAnalyticsBaseQuery,)} + + :param step_aliases: Step aliases mapping. + :type step_aliases: {str: (str,)}, optional + """ + if filters is not unset: + kwargs["filters"] = filters + if join_keys is not unset: + kwargs["join_keys"] = join_keys + if step_aliases is not unset: + kwargs["step_aliases"] = step_aliases + super().__init__(kwargs) + + + self_.expression = expression + self_.node_objects = node_objects diff --git a/datadog_api_client/v1/model/user_journey_search_filters.py b/datadog_api_client/v1/model/user_journey_search_filters.py new file mode 100644 index 0000000000..3ade896c21 --- /dev/null +++ b/datadog_api_client/v1/model/user_journey_search_filters.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + from datadog_api_client.v1.model.user_journey_search_graph_filter import UserJourneySearchGraphFilter + +class UserJourneySearchFilters(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + from datadog_api_client.v1.model.user_journey_search_graph_filter import UserJourneySearchGraphFilter + return { + "audience_filters": (ProductAnalyticsAudienceFilters,), + "graph_filters": ([UserJourneySearchGraphFilter],), + "string_filter": (str,), + } + attribute_map = { + "audience_filters": "audience_filters", + "graph_filters": "graph_filters", + "string_filter": "string_filter", + } + + def __init__(self_, audience_filters: Union[ProductAnalyticsAudienceFilters, UnsetType]=unset, graph_filters: Union[List[UserJourneySearchGraphFilter], UnsetType]=unset, string_filter: Union[str, UnsetType]=unset, **kwargs): + """ + Filters for user journey search. + + :param audience_filters: Product Analytics/RUM audience filters. + :type audience_filters: ProductAnalyticsAudienceFilters, optional + + :param graph_filters: Graph filters. + :type graph_filters: [UserJourneySearchGraphFilter], optional + + :param string_filter: String filter. + :type string_filter: str, optional + """ + if audience_filters is not unset: + kwargs["audience_filters"] = audience_filters + if graph_filters is not unset: + kwargs["graph_filters"] = graph_filters + if string_filter is not unset: + kwargs["string_filter"] = string_filter + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/user_journey_search_graph_filter.py b/datadog_api_client/v1/model/user_journey_search_graph_filter.py new file mode 100644 index 0000000000..603d96a284 --- /dev/null +++ b/datadog_api_client/v1/model/user_journey_search_graph_filter.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.user_journey_search_target import UserJourneySearchTarget + +class UserJourneySearchGraphFilter(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.user_journey_search_target import UserJourneySearchTarget + return { + "name": (str,), + "operator": (str,), + "target": (UserJourneySearchTarget,), + "value": (int,), + } + attribute_map = { + "name": "name", + "operator": "operator", + "target": "target", + "value": "value", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, operator: Union[str, UnsetType]=unset, target: Union[UserJourneySearchTarget, UnsetType]=unset, value: Union[int, UnsetType]=unset, **kwargs): + """ + Graph filter for user journey search. + + :param name: Filter name. + :type name: str, optional + + :param operator: Filter operator. + :type operator: str, optional + + :param target: Target for user journey search. + :type target: UserJourneySearchTarget, optional + + :param value: Filter value. + :type value: int, optional + """ + if name is not unset: + kwargs["name"] = name + if operator is not unset: + kwargs["operator"] = operator + if target is not unset: + kwargs["target"] = target + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/user_journey_search_target.py b/datadog_api_client/v1/model/user_journey_search_target.py new file mode 100644 index 0000000000..fb6d74011f --- /dev/null +++ b/datadog_api_client/v1/model/user_journey_search_target.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserJourneySearchTarget(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (str,), + "start": (str,), + "type": (str,), + "value": (str,), + } + attribute_map = { + "end": "end", + "start": "start", + "type": "type", + "value": "value", + } + + def __init__(self_, type: str, end: Union[str, UnsetType]=unset, start: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + Target for user journey search. + + :param end: End value. + :type end: str, optional + + :param start: Start value. + :type start: str, optional + + :param type: Target type. + :type type: str + + :param value: Target value. + :type value: str, optional + """ + if end is not unset: + kwargs["end"] = end + if start is not unset: + kwargs["start"] = start + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v1/model/user_list_response.py b/datadog_api_client/v1/model/user_list_response.py new file mode 100644 index 0000000000..452d035238 --- /dev/null +++ b/datadog_api_client/v1/model/user_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.user import User + +class UserListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.user import User + return { + "users": ([User],), + } + attribute_map = { + "users": "users", + } + + def __init__(self_, users: Union[List[User], UnsetType]=unset, **kwargs): + """ + Array of Datadog users for a given organization. + + :param users: Array of users. + :type users: [User], optional + """ + if users is not unset: + kwargs["users"] = users + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/user_response.py b/datadog_api_client/v1/model/user_response.py new file mode 100644 index 0000000000..425c27c7da --- /dev/null +++ b/datadog_api_client/v1/model/user_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.user import User + +class UserResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.user import User + return { + "user": (User,), + } + attribute_map = { + "user": "user", + } + + def __init__(self_, user: Union[User, UnsetType]=unset, **kwargs): + """ + A Datadog User. + + :param user: Create, edit, and disable users. + :type user: User, optional + """ + if user is not unset: + kwargs["user"] = user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/viewing_preferences.py b/datadog_api_client/v1/model/viewing_preferences.py new file mode 100644 index 0000000000..ad7180a64f --- /dev/null +++ b/datadog_api_client/v1/model/viewing_preferences.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.viewing_preferences_theme import ViewingPreferencesTheme + +class ViewingPreferences(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.viewing_preferences_theme import ViewingPreferencesTheme + return { + "high_density": (bool,), + "theme": (ViewingPreferencesTheme,), + } + attribute_map = { + "high_density": "high_density", + "theme": "theme", + } + + def __init__(self_, high_density: Union[bool, UnsetType]=unset, theme: Union[ViewingPreferencesTheme, UnsetType]=unset, **kwargs): + """ + The viewing preferences for a shared dashboard. + + :param high_density: Whether the widgets on the shared dashboard should be displayed with high density. + :type high_density: bool, optional + + :param theme: The theme of the shared dashboard view. "system" follows your system's default viewing theme. + :type theme: ViewingPreferencesTheme, optional + """ + if high_density is not unset: + kwargs["high_density"] = high_density + if theme is not unset: + kwargs["theme"] = theme + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/viewing_preferences_theme.py b/datadog_api_client/v1/model/viewing_preferences_theme.py new file mode 100644 index 0000000000..41aead1d08 --- /dev/null +++ b/datadog_api_client/v1/model/viewing_preferences_theme.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ViewingPreferencesTheme(ModelSimple): + """ + The theme of the shared dashboard view. "system" follows your system's default viewing theme. + + :param value: Must be one of ["system", "light", "dark"]. + :type value: str + """ + + allowed_values = { + "system", + "light", + "dark", + } + SYSTEM: ClassVar["ViewingPreferencesTheme"] + LIGHT: ClassVar["ViewingPreferencesTheme"] + DARK: ClassVar["ViewingPreferencesTheme"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ViewingPreferencesTheme.SYSTEM = ViewingPreferencesTheme("system") +ViewingPreferencesTheme.LIGHT = ViewingPreferencesTheme("light") +ViewingPreferencesTheme.DARK = ViewingPreferencesTheme("dark") diff --git a/datadog_api_client/v1/model/webhooks_integration.py b/datadog_api_client/v1/model/webhooks_integration.py new file mode 100644 index 0000000000..d311415a47 --- /dev/null +++ b/datadog_api_client/v1/model/webhooks_integration.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.webhooks_integration_encoding import WebhooksIntegrationEncoding + +class WebhooksIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.webhooks_integration_encoding import WebhooksIntegrationEncoding + return { + "custom_headers": (str, none_type), + "encode_as": (WebhooksIntegrationEncoding,), + "name": (str,), + "payload": (str, none_type), + "url": (str,), + } + attribute_map = { + "custom_headers": "custom_headers", + "encode_as": "encode_as", + "name": "name", + "payload": "payload", + "url": "url", + } + + def __init__(self_, name: str, url: str, custom_headers: Union[str, none_type, UnsetType]=unset, encode_as: Union[WebhooksIntegrationEncoding, UnsetType]=unset, payload: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Datadog-Webhooks integration. + + :param custom_headers: If ``null`` , uses no header. + If given a JSON payload, these will be headers attached to your webhook. + :type custom_headers: str, none_type, optional + + :param encode_as: Encoding type. Can be given either ``json`` or ``form``. + :type encode_as: WebhooksIntegrationEncoding, optional + + :param name: The name of the webhook. It corresponds with ````. + Learn more on how to use it in + `monitor notifications `_. + :type name: str + + :param payload: If ``null`` , uses the default payload. + If given a JSON payload, the webhook returns the payload + specified by the given payload. + `Webhooks variable usage `_. + :type payload: str, none_type, optional + + :param url: URL of the webhook. + :type url: str + """ + if custom_headers is not unset: + kwargs["custom_headers"] = custom_headers + if encode_as is not unset: + kwargs["encode_as"] = encode_as + if payload is not unset: + kwargs["payload"] = payload + super().__init__(kwargs) + + + self_.name = name + self_.url = url diff --git a/datadog_api_client/v1/model/webhooks_integration_custom_variable.py b/datadog_api_client/v1/model/webhooks_integration_custom_variable.py new file mode 100644 index 0000000000..83201c400b --- /dev/null +++ b/datadog_api_client/v1/model/webhooks_integration_custom_variable.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WebhooksIntegrationCustomVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "is_secret": (bool,), + "name": (str,), + "value": (str,), + } + attribute_map = { + "is_secret": "is_secret", + "name": "name", + "value": "value", + } + + def __init__(self_, is_secret: bool, name: str, value: str, **kwargs): + """ + Custom variable for Webhook integration. + + :param is_secret: Make custom variable is secret or not. + If the custom variable is secret, the value is not returned in the response payload. + :type is_secret: bool + + :param name: The name of the variable. It corresponds with ````. + :type name: str + + :param value: Value of the custom variable. + :type value: str + """ + super().__init__(kwargs) + + + self_.is_secret = is_secret + self_.name = name + self_.value = value diff --git a/datadog_api_client/v1/model/webhooks_integration_custom_variable_response.py b/datadog_api_client/v1/model/webhooks_integration_custom_variable_response.py new file mode 100644 index 0000000000..6541acb8de --- /dev/null +++ b/datadog_api_client/v1/model/webhooks_integration_custom_variable_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WebhooksIntegrationCustomVariableResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "is_secret": (bool,), + "name": (str,), + "value": (str,), + } + attribute_map = { + "is_secret": "is_secret", + "name": "name", + "value": "value", + } + + def __init__(self_, is_secret: bool, name: str, value: Union[str, UnsetType]=unset, **kwargs): + """ + Custom variable for Webhook integration. + + :param is_secret: Make custom variable is secret or not. + If the custom variable is secret, the value is not returned in the response payload. + :type is_secret: bool + + :param name: The name of the variable. It corresponds with ````. It must only contains upper-case characters, integers or underscores. + :type name: str + + :param value: Value of the custom variable. It won't be returned if the variable is secret. + :type value: str, optional + """ + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.is_secret = is_secret + self_.name = name diff --git a/datadog_api_client/v1/model/webhooks_integration_custom_variable_update_request.py b/datadog_api_client/v1/model/webhooks_integration_custom_variable_update_request.py new file mode 100644 index 0000000000..f23c5ed1f5 --- /dev/null +++ b/datadog_api_client/v1/model/webhooks_integration_custom_variable_update_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WebhooksIntegrationCustomVariableUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "is_secret": (bool,), + "name": (str,), + "value": (str,), + } + attribute_map = { + "is_secret": "is_secret", + "name": "name", + "value": "value", + } + + def __init__(self_, is_secret: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + Update request of a custom variable object. + + *All properties are optional.* + + :param is_secret: Make custom variable is secret or not. + If the custom variable is secret, the value is not returned in the response payload. + :type is_secret: bool, optional + + :param name: The name of the variable. It corresponds with ````. It must only contains upper-case characters, integers or underscores. + :type name: str, optional + + :param value: Value of the custom variable. + :type value: str, optional + """ + if is_secret is not unset: + kwargs["is_secret"] = is_secret + if name is not unset: + kwargs["name"] = name + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/webhooks_integration_encoding.py b/datadog_api_client/v1/model/webhooks_integration_encoding.py new file mode 100644 index 0000000000..efbb15e91a --- /dev/null +++ b/datadog_api_client/v1/model/webhooks_integration_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WebhooksIntegrationEncoding(ModelSimple): + """ + Encoding type. Can be given either `json` or `form`. + + :param value: If omitted defaults to "json". Must be one of ["json", "form"]. + :type value: str + """ + + allowed_values = { + "json", + "form", + } + JSON: ClassVar["WebhooksIntegrationEncoding"] + FORM: ClassVar["WebhooksIntegrationEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WebhooksIntegrationEncoding.JSON = WebhooksIntegrationEncoding("json") +WebhooksIntegrationEncoding.FORM = WebhooksIntegrationEncoding("form") diff --git a/datadog_api_client/v1/model/webhooks_integration_update_request.py b/datadog_api_client/v1/model/webhooks_integration_update_request.py new file mode 100644 index 0000000000..850e6e358b --- /dev/null +++ b/datadog_api_client/v1/model/webhooks_integration_update_request.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.webhooks_integration_encoding import WebhooksIntegrationEncoding + +class WebhooksIntegrationUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.webhooks_integration_encoding import WebhooksIntegrationEncoding + return { + "custom_headers": (str,), + "encode_as": (WebhooksIntegrationEncoding,), + "name": (str,), + "payload": (str, none_type), + "url": (str,), + } + attribute_map = { + "custom_headers": "custom_headers", + "encode_as": "encode_as", + "name": "name", + "payload": "payload", + "url": "url", + } + + def __init__(self_, custom_headers: Union[str, UnsetType]=unset, encode_as: Union[WebhooksIntegrationEncoding, UnsetType]=unset, name: Union[str, UnsetType]=unset, payload: Union[str, none_type, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Update request of a Webhooks integration object. + + *All properties are optional.* + + :param custom_headers: If ``null`` , uses no header. + If given a JSON payload, these will be headers attached to your webhook. + :type custom_headers: str, optional + + :param encode_as: Encoding type. Can be given either ``json`` or ``form``. + :type encode_as: WebhooksIntegrationEncoding, optional + + :param name: The name of the webhook. It corresponds with ````. + Learn more on how to use it in + `monitor notifications `_. + :type name: str, optional + + :param payload: If ``null`` , uses the default payload. + If given a JSON payload, the webhook returns the payload + specified by the given payload. + `Webhooks variable usage `_. + :type payload: str, none_type, optional + + :param url: URL of the webhook. + :type url: str, optional + """ + if custom_headers is not unset: + kwargs["custom_headers"] = custom_headers + if encode_as is not unset: + kwargs["encode_as"] = encode_as + if name is not unset: + kwargs["name"] = name + if payload is not unset: + kwargs["payload"] = payload + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget.py b/datadog_api_client/v1/model/widget.py new file mode 100644 index 0000000000..5a802a68fa --- /dev/null +++ b/datadog_api_client/v1/model/widget.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_definition import WidgetDefinition + from datadog_api_client.v1.model.widget_layout import WidgetLayout + from datadog_api_client.v1.model.alert_graph_widget_definition import AlertGraphWidgetDefinition + from datadog_api_client.v1.model.alert_value_widget_definition import AlertValueWidgetDefinition + from datadog_api_client.v1.model.bar_chart_widget_definition import BarChartWidgetDefinition + from datadog_api_client.v1.model.change_widget_definition import ChangeWidgetDefinition + from datadog_api_client.v1.model.check_status_widget_definition import CheckStatusWidgetDefinition + from datadog_api_client.v1.model.cohort_widget_definition import CohortWidgetDefinition + from datadog_api_client.v1.model.distribution_widget_definition import DistributionWidgetDefinition + from datadog_api_client.v1.model.event_stream_widget_definition import EventStreamWidgetDefinition + from datadog_api_client.v1.model.event_timeline_widget_definition import EventTimelineWidgetDefinition + from datadog_api_client.v1.model.free_text_widget_definition import FreeTextWidgetDefinition + from datadog_api_client.v1.model.funnel_widget_definition import FunnelWidgetDefinition + from datadog_api_client.v1.model.product_analytics_funnel_widget_definition import ProductAnalyticsFunnelWidgetDefinition + from datadog_api_client.v1.model.geomap_widget_definition import GeomapWidgetDefinition + from datadog_api_client.v1.model.group_widget_definition import GroupWidgetDefinition + from datadog_api_client.v1.model.heat_map_widget_definition import HeatMapWidgetDefinition + from datadog_api_client.v1.model.host_map_widget_definition import HostMapWidgetDefinition + from datadog_api_client.v1.model.i_frame_widget_definition import IFrameWidgetDefinition + from datadog_api_client.v1.model.image_widget_definition import ImageWidgetDefinition + from datadog_api_client.v1.model.list_stream_widget_definition import ListStreamWidgetDefinition + from datadog_api_client.v1.model.log_stream_widget_definition import LogStreamWidgetDefinition + from datadog_api_client.v1.model.monitor_summary_widget_definition import MonitorSummaryWidgetDefinition + from datadog_api_client.v1.model.note_widget_definition import NoteWidgetDefinition + from datadog_api_client.v1.model.powerpack_widget_definition import PowerpackWidgetDefinition + from datadog_api_client.v1.model.point_plot_widget_definition import PointPlotWidgetDefinition + from datadog_api_client.v1.model.query_value_widget_definition import QueryValueWidgetDefinition + from datadog_api_client.v1.model.retention_curve_widget_definition import RetentionCurveWidgetDefinition + from datadog_api_client.v1.model.run_workflow_widget_definition import RunWorkflowWidgetDefinition + from datadog_api_client.v1.model.slo_list_widget_definition import SLOListWidgetDefinition + from datadog_api_client.v1.model.slo_widget_definition import SLOWidgetDefinition + from datadog_api_client.v1.model.scatter_plot_widget_definition import ScatterPlotWidgetDefinition + from datadog_api_client.v1.model.sankey_widget_definition import SankeyWidgetDefinition + from datadog_api_client.v1.model.service_map_widget_definition import ServiceMapWidgetDefinition + from datadog_api_client.v1.model.service_summary_widget_definition import ServiceSummaryWidgetDefinition + from datadog_api_client.v1.model.split_graph_widget_definition import SplitGraphWidgetDefinition + from datadog_api_client.v1.model.sunburst_widget_definition import SunburstWidgetDefinition + from datadog_api_client.v1.model.table_widget_definition import TableWidgetDefinition + from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition + from datadog_api_client.v1.model.toplist_widget_definition import ToplistWidgetDefinition + from datadog_api_client.v1.model.topology_map_widget_definition import TopologyMapWidgetDefinition + from datadog_api_client.v1.model.tree_map_widget_definition import TreeMapWidgetDefinition + from datadog_api_client.v1.model.wildcard_widget_definition import WildcardWidgetDefinition + +class Widget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_definition import WidgetDefinition + from datadog_api_client.v1.model.widget_layout import WidgetLayout + return { + "definition": (WidgetDefinition,), + "id": (int,), + "layout": (WidgetLayout,), + } + attribute_map = { + "definition": "definition", + "id": "id", + "layout": "layout", + } + + def __init__(self_, definition: Union[WidgetDefinition, AlertGraphWidgetDefinition, AlertValueWidgetDefinition, BarChartWidgetDefinition, ChangeWidgetDefinition, CheckStatusWidgetDefinition, CohortWidgetDefinition, DistributionWidgetDefinition, EventStreamWidgetDefinition, EventTimelineWidgetDefinition, FreeTextWidgetDefinition, FunnelWidgetDefinition, ProductAnalyticsFunnelWidgetDefinition, GeomapWidgetDefinition, GroupWidgetDefinition, HeatMapWidgetDefinition, HostMapWidgetDefinition, IFrameWidgetDefinition, ImageWidgetDefinition, ListStreamWidgetDefinition, LogStreamWidgetDefinition, MonitorSummaryWidgetDefinition, NoteWidgetDefinition, PowerpackWidgetDefinition, PointPlotWidgetDefinition, QueryValueWidgetDefinition, RetentionCurveWidgetDefinition, RunWorkflowWidgetDefinition, SLOListWidgetDefinition, SLOWidgetDefinition, ScatterPlotWidgetDefinition, SankeyWidgetDefinition, ServiceMapWidgetDefinition, ServiceSummaryWidgetDefinition, SplitGraphWidgetDefinition, SunburstWidgetDefinition, TableWidgetDefinition, TimeseriesWidgetDefinition, ToplistWidgetDefinition, TopologyMapWidgetDefinition, TreeMapWidgetDefinition, WildcardWidgetDefinition], id: Union[int, UnsetType]=unset, layout: Union[WidgetLayout, UnsetType]=unset, **kwargs): + """ + Information about widget. + + **Note** : The ``layout`` property is required for widgets in dashboards with ``free`` ``layout_type``. + For the **new dashboard layout** , the ``layout`` property depends on the ``reflow_type`` of the dashboard. + + .. code-block:: + + - If `reflow_type` is `fixed`, `layout` is required. + - If `reflow_type` is `auto`, `layout` should not be set. + + :param definition: `Definition of the widget `_. + :type definition: WidgetDefinition + + :param id: ID of the widget. + :type id: int, optional + + :param layout: The layout for a widget on a ``free`` or **new dashboard layout** dashboard. + :type layout: WidgetLayout, optional + """ + if id is not unset: + kwargs["id"] = id + if layout is not unset: + kwargs["layout"] = layout + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v1/model/widget_aggregator.py b/datadog_api_client/v1/model/widget_aggregator.py new file mode 100644 index 0000000000..cff9962699 --- /dev/null +++ b/datadog_api_client/v1/model/widget_aggregator.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetAggregator(ModelSimple): + """ + Aggregator used for the request. + + :param value: Must be one of ["avg", "last", "max", "min", "sum", "percentile"]. + :type value: str + """ + + allowed_values = { + "avg", + "last", + "max", + "min", + "sum", + "percentile", + } + AVERAGE: ClassVar["WidgetAggregator"] + LAST: ClassVar["WidgetAggregator"] + MAXIMUM: ClassVar["WidgetAggregator"] + MINIMUM: ClassVar["WidgetAggregator"] + SUM: ClassVar["WidgetAggregator"] + PERCENTILE: ClassVar["WidgetAggregator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetAggregator.AVERAGE = WidgetAggregator("avg") +WidgetAggregator.LAST = WidgetAggregator("last") +WidgetAggregator.MAXIMUM = WidgetAggregator("max") +WidgetAggregator.MINIMUM = WidgetAggregator("min") +WidgetAggregator.SUM = WidgetAggregator("sum") +WidgetAggregator.PERCENTILE = WidgetAggregator("percentile") diff --git a/datadog_api_client/v1/model/widget_axis.py b/datadog_api_client/v1/model/widget_axis.py new file mode 100644 index 0000000000..2066a358aa --- /dev/null +++ b/datadog_api_client/v1/model/widget_axis.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetAxis(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_zero": (bool,), + "label": (str,), + "max": (str,), + "min": (str,), + "scale": (str,), + } + attribute_map = { + "include_zero": "include_zero", + "label": "label", + "max": "max", + "min": "min", + "scale": "scale", + } + + def __init__(self_, include_zero: Union[bool, UnsetType]=unset, label: Union[str, UnsetType]=unset, max: Union[str, UnsetType]=unset, min: Union[str, UnsetType]=unset, scale: Union[str, UnsetType]=unset, **kwargs): + """ + Axis controls for the widget. + + :param include_zero: Set to ``true`` to include zero. + :type include_zero: bool, optional + + :param label: The label of the axis to display on the graph. Only usable on Scatterplot Widgets. + :type label: str, optional + + :param max: Specifies maximum numeric value to show on the axis. Defaults to ``auto``. + :type max: str, optional + + :param min: Specifies minimum numeric value to show on the axis. Defaults to ``auto``. + :type min: str, optional + + :param scale: Specifies the scale type. Possible values are ``linear`` , ``log`` , ``sqrt`` , and ``pow##`` (for example ``pow2`` or ``pow0.5`` ). + :type scale: str, optional + """ + if include_zero is not unset: + kwargs["include_zero"] = include_zero + if label is not unset: + kwargs["label"] = label + if max is not unset: + kwargs["max"] = max + if min is not unset: + kwargs["min"] = min + if scale is not unset: + kwargs["scale"] = scale + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_change_type.py b/datadog_api_client/v1/model/widget_change_type.py new file mode 100644 index 0000000000..ec0141e580 --- /dev/null +++ b/datadog_api_client/v1/model/widget_change_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetChangeType(ModelSimple): + """ + Show the absolute or the relative change. + + :param value: Must be one of ["absolute", "relative"]. + :type value: str + """ + + allowed_values = { + "absolute", + "relative", + } + ABSOLUTE: ClassVar["WidgetChangeType"] + RELATIVE: ClassVar["WidgetChangeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetChangeType.ABSOLUTE = WidgetChangeType("absolute") +WidgetChangeType.RELATIVE = WidgetChangeType("relative") diff --git a/datadog_api_client/v1/model/widget_color_preference.py b/datadog_api_client/v1/model/widget_color_preference.py new file mode 100644 index 0000000000..01fabf39b6 --- /dev/null +++ b/datadog_api_client/v1/model/widget_color_preference.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetColorPreference(ModelSimple): + """ + Which color to use on the widget. + + :param value: Must be one of ["background", "text"]. + :type value: str + """ + + allowed_values = { + "background", + "text", + } + BACKGROUND: ClassVar["WidgetColorPreference"] + TEXT: ClassVar["WidgetColorPreference"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetColorPreference.BACKGROUND = WidgetColorPreference("background") +WidgetColorPreference.TEXT = WidgetColorPreference("text") diff --git a/datadog_api_client/v1/model/widget_comparator.py b/datadog_api_client/v1/model/widget_comparator.py new file mode 100644 index 0000000000..2ff90fad54 --- /dev/null +++ b/datadog_api_client/v1/model/widget_comparator.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetComparator(ModelSimple): + """ + Comparator to apply. + + :param value: Must be one of ["=", ">", ">=", "<", "<="]. + :type value: str + """ + + allowed_values = { + "=", + ">", + ">=", + "<", + "<=", + } + EQUAL_TO: ClassVar["WidgetComparator"] + GREATER_THAN: ClassVar["WidgetComparator"] + GREATER_THAN_OR_EQUAL_TO: ClassVar["WidgetComparator"] + LESS_THAN: ClassVar["WidgetComparator"] + LESS_THAN_OR_EQUAL_TO: ClassVar["WidgetComparator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetComparator.EQUAL_TO = WidgetComparator("=") +WidgetComparator.GREATER_THAN = WidgetComparator(">") +WidgetComparator.GREATER_THAN_OR_EQUAL_TO = WidgetComparator(">=") +WidgetComparator.LESS_THAN = WidgetComparator("<") +WidgetComparator.LESS_THAN_OR_EQUAL_TO = WidgetComparator("<=") diff --git a/datadog_api_client/v1/model/widget_compare_to.py b/datadog_api_client/v1/model/widget_compare_to.py new file mode 100644 index 0000000000..4bc46a263c --- /dev/null +++ b/datadog_api_client/v1/model/widget_compare_to.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetCompareTo(ModelSimple): + """ + Timeframe used for the change comparison. + + :param value: Must be one of ["hour_before", "day_before", "week_before", "month_before"]. + :type value: str + """ + + allowed_values = { + "hour_before", + "day_before", + "week_before", + "month_before", + } + HOUR_BEFORE: ClassVar["WidgetCompareTo"] + DAY_BEFORE: ClassVar["WidgetCompareTo"] + WEEK_BEFORE: ClassVar["WidgetCompareTo"] + MONTH_BEFORE: ClassVar["WidgetCompareTo"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetCompareTo.HOUR_BEFORE = WidgetCompareTo("hour_before") +WidgetCompareTo.DAY_BEFORE = WidgetCompareTo("day_before") +WidgetCompareTo.WEEK_BEFORE = WidgetCompareTo("week_before") +WidgetCompareTo.MONTH_BEFORE = WidgetCompareTo("month_before") diff --git a/datadog_api_client/v1/model/widget_conditional_format.py b/datadog_api_client/v1/model/widget_conditional_format.py new file mode 100644 index 0000000000..2dea20f90d --- /dev/null +++ b/datadog_api_client/v1/model/widget_conditional_format.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_comparator import WidgetComparator + from datadog_api_client.v1.model.widget_palette import WidgetPalette + +class WidgetConditionalFormat(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_comparator import WidgetComparator + from datadog_api_client.v1.model.widget_palette import WidgetPalette + return { + "comparator": (WidgetComparator,), + "custom_bg_color": (str,), + "custom_fg_color": (str,), + "hide_value": (bool,), + "image_url": (str,), + "metric": (str,), + "palette": (WidgetPalette,), + "timeframe": (str,), + "value": (float,), + } + attribute_map = { + "comparator": "comparator", + "custom_bg_color": "custom_bg_color", + "custom_fg_color": "custom_fg_color", + "hide_value": "hide_value", + "image_url": "image_url", + "metric": "metric", + "palette": "palette", + "timeframe": "timeframe", + "value": "value", + } + + def __init__(self_, comparator: WidgetComparator, palette: WidgetPalette, value: float, custom_bg_color: Union[str, UnsetType]=unset, custom_fg_color: Union[str, UnsetType]=unset, hide_value: Union[bool, UnsetType]=unset, image_url: Union[str, UnsetType]=unset, metric: Union[str, UnsetType]=unset, timeframe: Union[str, UnsetType]=unset, **kwargs): + """ + Define a conditional format for the widget. + + :param comparator: Comparator to apply. + :type comparator: WidgetComparator + + :param custom_bg_color: Color palette to apply to the background, same values available as palette. + :type custom_bg_color: str, optional + + :param custom_fg_color: Color palette to apply to the foreground, same values available as palette. + :type custom_fg_color: str, optional + + :param hide_value: True hides values. + :type hide_value: bool, optional + + :param image_url: Displays an image as the background. + :type image_url: str, optional + + :param metric: Metric from the request to correlate this conditional format with. + :type metric: str, optional + + :param palette: Color palette to apply. + :type palette: WidgetPalette + + :param timeframe: Defines the displayed timeframe. + :type timeframe: str, optional + + :param value: Value for the comparator. + :type value: float + """ + if custom_bg_color is not unset: + kwargs["custom_bg_color"] = custom_bg_color + if custom_fg_color is not unset: + kwargs["custom_fg_color"] = custom_fg_color + if hide_value is not unset: + kwargs["hide_value"] = hide_value + if image_url is not unset: + kwargs["image_url"] = image_url + if metric is not unset: + kwargs["metric"] = metric + if timeframe is not unset: + kwargs["timeframe"] = timeframe + super().__init__(kwargs) + + + self_.comparator = comparator + self_.palette = palette + self_.value = value diff --git a/datadog_api_client/v1/model/widget_custom_link.py b/datadog_api_client/v1/model/widget_custom_link.py new file mode 100644 index 0000000000..c2e2f55595 --- /dev/null +++ b/datadog_api_client/v1/model/widget_custom_link.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetCustomLink(ModelNormal): + @cached_property + def openapi_types(_): + return { + "is_hidden": (bool,), + "label": (str,), + "link": (str,), + "override_label": (str,), + } + attribute_map = { + "is_hidden": "is_hidden", + "label": "label", + "link": "link", + "override_label": "override_label", + } + + def __init__(self_, is_hidden: Union[bool, UnsetType]=unset, label: Union[str, UnsetType]=unset, link: Union[str, UnsetType]=unset, override_label: Union[str, UnsetType]=unset, **kwargs): + """ + Custom links help you connect a data value to a URL, like a Datadog page or your AWS console. + + :param is_hidden: The flag for toggling context menu link visibility. + :type is_hidden: bool, optional + + :param label: The label for the custom link URL. Keep the label short and descriptive. Use metrics and tags as variables. + :type label: str, optional + + :param link: The URL of the custom link. URL must include ``http`` or ``https``. A relative URL must start with ``/``. + :type link: str, optional + + :param override_label: The label ID that refers to a context menu link. Can be ``logs`` , ``hosts`` , ``traces`` , ``profiles`` , ``processes`` , ``containers`` , or ``rum``. + :type override_label: str, optional + """ + if is_hidden is not unset: + kwargs["is_hidden"] = is_hidden + if label is not unset: + kwargs["label"] = label + if link is not unset: + kwargs["link"] = link + if override_label is not unset: + kwargs["override_label"] = override_label + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_definition.py b/datadog_api_client/v1/model/widget_definition.py new file mode 100644 index 0000000000..352ff04e4a --- /dev/null +++ b/datadog_api_client/v1/model/widget_definition.py @@ -0,0 +1,467 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetDefinition(ModelComposed): + + + + def __init__(self, **kwargs): + """ + `Definition of the widget `_. + + :param alert_id: ID of the alert to use in the widget. + :type alert_id: str + + :param description: The description of the widget. + :type description: str, optional + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: The title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the alert graph widget. + :type type: AlertGraphWidgetDefinitionType + + :param viz_type: Whether to display the Alert Graph as a timeseries or a top list. + :type viz_type: WidgetVizType + + :param precision: Number of decimal to show. If not defined, will use the raw value. + :type precision: int, optional + + :param text_align: How to align the text on the widget. + :type text_align: WidgetTextAlign, optional + + :param unit: Unit to display with the value. + :type unit: str, optional + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param requests: List of bar chart widget requests. + :type requests: [BarChartWidgetRequest] + + :param style: Style customization for a bar chart widget. + :type style: BarChartWidgetStyle, optional + + :param check: Name of the check to use in the widget. + :type check: str + + :param group: Group reporting a single check. + :type group: str, optional + + :param group_by: List of tag prefixes to group by in the case of a cluster check. + :type group_by: [str], optional + + :param grouping: The kind of grouping to use. + :type grouping: WidgetGrouping + + :param tags: List of tags used to filter the groups reporting a cluster check. + :type tags: [str], optional + + :param legend_size: (Deprecated) The widget legend was replaced by a tooltip and sidebar. + :type legend_size: str, optional + + :param markers: List of markers. + :type markers: [WidgetMarker], optional + + :param show_legend: (Deprecated) The widget legend was replaced by a tooltip and sidebar. + :type show_legend: bool, optional + + :param xaxis: X Axis controls for the distribution widget. + :type xaxis: DistributionWidgetXAxis, optional + + :param yaxis: Y Axis controls for the distribution widget. + :type yaxis: DistributionWidgetYAxis, optional + + :param event_size: Size to use to display an event. + :type event_size: WidgetEventSize, optional + + :param query: Query to filter the event stream with. + :type query: str + + :param tags_execution: The execution method for multi-value filters. Can be either and or or. + :type tags_execution: str, optional + + :param background_color: Background color of the widget. Supported values are `white`, `blue`, `purple`, `pink`, `orange`, `yellow`, `green`, `gray`, `vivid_blue`, `vivid_purple`, `vivid_pink`, `vivid_orange`, `vivid_yellow`, `vivid_green`, and `transparent`. + :type background_color: str, optional + + :param color: Color of the text. + :type color: str, optional + + :param font_size: Size of the text. + :type font_size: str, optional + + :param text: Text to display. + :type text: str + + :param grouped_display: Display mode for grouped funnel results. + :type grouped_display: FunnelGroupedDisplay, optional + + :param view: The view of the world that the map should render. + :type view: GeomapWidgetDefinitionView + + :param banner_img: URL of image to display as a banner for the group. + :type banner_img: str, optional + + :param layout_type: Layout type of the group. + :type layout_type: WidgetLayoutType + + :param show_title: Whether to show the title or not. + :type show_title: bool, optional + + :param widgets: List of widget groups. + :type widgets: [Widget] + + :param events: List of widget events. Deprecated - Use `overlay` request type instead. + :type events: [WidgetEvent], optional + + :param no_group_hosts: Deprecated - Only used by the legacy metric-based format. Use `no_group_hosts` inside `requests` instead. + :type no_group_hosts: bool, optional + + :param no_metric_hosts: Deprecated - Only used by the legacy metric-based format. Use `no_metric_hosts` inside `requests` instead. + :type no_metric_hosts: bool, optional + + :param node_type: Which type of node to use in the map. + :type node_type: WidgetNodeType, optional + + :param notes: Notes on the title. + :type notes: str, optional + + :param scope: Deprecated - Only used by the legacy metric-based format. Use `filter` inside `requests` instead. + :type scope: [str], optional + + :param url: URL of the iframe. + :type url: str + + :param has_background: Whether to display a background or not. + :type has_background: bool, optional + + :param has_border: Whether to display a border or not. + :type has_border: bool, optional + + :param horizontal_align: Horizontal alignment. + :type horizontal_align: WidgetHorizontalAlign, optional + + :param margin: Size of the margins around the image. + **Note**: `small` and `large` values are deprecated. + :type margin: WidgetMargin, optional + + :param sizing: How to size the image on the widget. The values are based on the image `object-fit` CSS properties. + **Note**: `zoom`, `fit` and `center` values are deprecated. + :type sizing: WidgetImageSizing, optional + + :param url_dark_theme: URL of the image in dark mode. + :type url_dark_theme: str, optional + + :param vertical_align: Vertical alignment. + :type vertical_align: WidgetVerticalAlign, optional + + :param columns: Which columns to display on the widget. + :type columns: [str], optional + + :param indexes: An array of index names to query in the stream. Use [] to query all indexes at once. + :type indexes: [str], optional + + :param logset: ID of the log set to use. + :type logset: str, optional + + :param message_display: Amount of log lines to display + :type message_display: WidgetMessageDisplay, optional + + :param show_date_column: Whether to show the date column or not + :type show_date_column: bool, optional + + :param show_message_column: Whether to show the message column or not + :type show_message_column: bool, optional + + :param sort: Which column and order to sort by + :type sort: WidgetFieldSort, optional + + :param color_preference: Which color to use on the widget. + :type color_preference: WidgetColorPreference, optional + + :param count: The number of monitors to display. + :type count: int, optional + + :param display_format: What to display on the widget. + :type display_format: WidgetMonitorSummaryDisplayFormat, optional + + :param hide_zero_counts: Whether to show counts of 0 or not. + :type hide_zero_counts: bool, optional + + :param show_last_triggered: Whether to show the time that has elapsed since the monitor/group triggered. + :type show_last_triggered: bool, optional + + :param show_priority: Whether to show the priorities column. + :type show_priority: bool, optional + + :param start: The start of the list. Typically 0. + :type start: int, optional + + :param summary_type: Which summary type should be used. + :type summary_type: WidgetSummaryType, optional + + :param content: Content of the note. + :type content: str + + :param has_padding: Whether to add padding or not. + :type has_padding: bool, optional + + :param show_tick: Whether to show a tick or not. + :type show_tick: bool, optional + + :param tick_edge: Define how you want to align the text on the widget. + :type tick_edge: WidgetTickEdge, optional + + :param tick_pos: Where to position the tick on an edge. + :type tick_pos: str, optional + + :param powerpack_id: UUID of the associated powerpack. + :type powerpack_id: str + + :param template_variables: Powerpack template variables. + :type template_variables: PowerpackTemplateVariables, optional + + :param legend: Legend configuration for the point plot widget. + :type legend: PointPlotWidgetLegend, optional + + :param autoscale: Whether to use auto-scaling or not. + :type autoscale: bool, optional + + :param custom_unit: Display a unit of your choice on the widget. + :type custom_unit: str, optional + + :param timeseries_background: Set a timeseries on the widget background. + :type timeseries_background: TimeseriesBackground, optional + + :param inputs: Array of workflow inputs to map to dashboard template variables. + :type inputs: [RunWorkflowWidgetInput], optional + + :param workflow_id: Workflow id. + :type workflow_id: str + + :param additional_query_filters: Additional filters applied to the SLO query. + :type additional_query_filters: str, optional + + :param global_time_target: Defined global time target. + :type global_time_target: str, optional + + :param show_error_budget: Defined error budget. + :type show_error_budget: bool, optional + + :param slo_id: ID of the SLO displayed. + :type slo_id: str, optional + + :param time_windows: Times being monitored. + :type time_windows: [WidgetTimeWindows], optional + + :param view_mode: Define how you want the SLO to be displayed. + :type view_mode: WidgetViewMode, optional + + :param view_type: Type of view displayed by the widget. + :type view_type: str + + :param color_by_groups: List of groups used for colors. + :type color_by_groups: [str], optional + + :param show_other_links: Whether to show links for "other" category. + :type show_other_links: bool, optional + + :param sort_nodes: Whether to sort nodes in the Sankey diagram. + :type sort_nodes: bool, optional + + :param filters: Your environment and primary tag (or * if enabled for your account). + :type filters: [str] + + :param service: The ID of the service you want to map. + :type service: str + + :param env: APM environment. + :type env: str + + :param show_breakdown: Whether to show the latency breakdown or not. + :type show_breakdown: bool, optional + + :param show_distribution: Whether to show the latency distribution or not. + :type show_distribution: bool, optional + + :param show_errors: Whether to show the error metrics or not. + :type show_errors: bool, optional + + :param show_hits: Whether to show the hits metrics or not. + :type show_hits: bool, optional + + :param show_latency: Whether to show the latency metrics or not. + :type show_latency: bool, optional + + :param show_resource_list: Whether to show the resource list or not. + :type show_resource_list: bool, optional + + :param size_format: Size of the widget. + :type size_format: WidgetSizeFormat, optional + + :param span_name: APM span name. + :type span_name: str + + :param has_uniform_y_axes: Normalize y axes across graphs + :type has_uniform_y_axes: bool, optional + + :param size: Size of the individual graphs in the split. + :type size: SplitGraphVizSize + + :param source_widget_definition: The original widget we are splitting on. + :type source_widget_definition: SplitGraphSourceWidgetDefinition + + :param split_config: Encapsulates all user choices about how to split a graph. + :type split_config: SplitConfig + + :param hide_total: Show the total value in this widget. + :type hide_total: bool, optional + + :param has_search_bar: Controls the display of the search bar. + :type has_search_bar: TableWidgetHasSearchBar, optional + + :param legend_columns: Columns displayed in the legend. + :type legend_columns: [TimeseriesWidgetLegendColumn], optional + + :param legend_layout: Layout of the legend. + :type legend_layout: TimeseriesWidgetLegendLayout, optional + + :param right_yaxis: Axis controls for the widget. + :type right_yaxis: WidgetAxis, optional + + :param color_by: (deprecated) The attribute formerly used to determine color in the widget. + :type color_by: TreeMapColorBy, optional + + :param size_by: (deprecated) The attribute formerly used to determine size in the widget. + :type size_by: TreeMapSizeBy, optional + + :param specification: Vega or Vega-Lite specification for custom visualization rendering. See https://vega.github.io/vega-lite/ for the full grammar reference. + :type specification: WildcardWidgetSpecification + """ + 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.v1.model.alert_graph_widget_definition import AlertGraphWidgetDefinition + from datadog_api_client.v1.model.alert_value_widget_definition import AlertValueWidgetDefinition + from datadog_api_client.v1.model.bar_chart_widget_definition import BarChartWidgetDefinition + from datadog_api_client.v1.model.change_widget_definition import ChangeWidgetDefinition + from datadog_api_client.v1.model.check_status_widget_definition import CheckStatusWidgetDefinition + from datadog_api_client.v1.model.cohort_widget_definition import CohortWidgetDefinition + from datadog_api_client.v1.model.distribution_widget_definition import DistributionWidgetDefinition + from datadog_api_client.v1.model.event_stream_widget_definition import EventStreamWidgetDefinition + from datadog_api_client.v1.model.event_timeline_widget_definition import EventTimelineWidgetDefinition + from datadog_api_client.v1.model.free_text_widget_definition import FreeTextWidgetDefinition + from datadog_api_client.v1.model.funnel_widget_definition import FunnelWidgetDefinition + from datadog_api_client.v1.model.product_analytics_funnel_widget_definition import ProductAnalyticsFunnelWidgetDefinition + from datadog_api_client.v1.model.geomap_widget_definition import GeomapWidgetDefinition + from datadog_api_client.v1.model.group_widget_definition import GroupWidgetDefinition + from datadog_api_client.v1.model.heat_map_widget_definition import HeatMapWidgetDefinition + from datadog_api_client.v1.model.host_map_widget_definition import HostMapWidgetDefinition + from datadog_api_client.v1.model.i_frame_widget_definition import IFrameWidgetDefinition + from datadog_api_client.v1.model.image_widget_definition import ImageWidgetDefinition + from datadog_api_client.v1.model.list_stream_widget_definition import ListStreamWidgetDefinition + from datadog_api_client.v1.model.log_stream_widget_definition import LogStreamWidgetDefinition + from datadog_api_client.v1.model.monitor_summary_widget_definition import MonitorSummaryWidgetDefinition + from datadog_api_client.v1.model.note_widget_definition import NoteWidgetDefinition + from datadog_api_client.v1.model.powerpack_widget_definition import PowerpackWidgetDefinition + from datadog_api_client.v1.model.point_plot_widget_definition import PointPlotWidgetDefinition + from datadog_api_client.v1.model.query_value_widget_definition import QueryValueWidgetDefinition + from datadog_api_client.v1.model.retention_curve_widget_definition import RetentionCurveWidgetDefinition + from datadog_api_client.v1.model.run_workflow_widget_definition import RunWorkflowWidgetDefinition + from datadog_api_client.v1.model.slo_list_widget_definition import SLOListWidgetDefinition + from datadog_api_client.v1.model.slo_widget_definition import SLOWidgetDefinition + from datadog_api_client.v1.model.scatter_plot_widget_definition import ScatterPlotWidgetDefinition + from datadog_api_client.v1.model.sankey_widget_definition import SankeyWidgetDefinition + from datadog_api_client.v1.model.service_map_widget_definition import ServiceMapWidgetDefinition + from datadog_api_client.v1.model.service_summary_widget_definition import ServiceSummaryWidgetDefinition + from datadog_api_client.v1.model.split_graph_widget_definition import SplitGraphWidgetDefinition + from datadog_api_client.v1.model.sunburst_widget_definition import SunburstWidgetDefinition + from datadog_api_client.v1.model.table_widget_definition import TableWidgetDefinition + from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition + from datadog_api_client.v1.model.toplist_widget_definition import ToplistWidgetDefinition + from datadog_api_client.v1.model.topology_map_widget_definition import TopologyMapWidgetDefinition + from datadog_api_client.v1.model.tree_map_widget_definition import TreeMapWidgetDefinition + from datadog_api_client.v1.model.wildcard_widget_definition import WildcardWidgetDefinition + return { + "oneOf": [ + AlertGraphWidgetDefinition, + AlertValueWidgetDefinition, + BarChartWidgetDefinition, + ChangeWidgetDefinition, + CheckStatusWidgetDefinition, + CohortWidgetDefinition, + DistributionWidgetDefinition, + EventStreamWidgetDefinition, + EventTimelineWidgetDefinition, + FreeTextWidgetDefinition, + FunnelWidgetDefinition, + ProductAnalyticsFunnelWidgetDefinition, + GeomapWidgetDefinition, + GroupWidgetDefinition, + HeatMapWidgetDefinition, + HostMapWidgetDefinition, + IFrameWidgetDefinition, + ImageWidgetDefinition, + ListStreamWidgetDefinition, + LogStreamWidgetDefinition, + MonitorSummaryWidgetDefinition, + NoteWidgetDefinition, + PowerpackWidgetDefinition, + PointPlotWidgetDefinition, + QueryValueWidgetDefinition, + RetentionCurveWidgetDefinition, + RunWorkflowWidgetDefinition, + SLOListWidgetDefinition, + SLOWidgetDefinition, + ScatterPlotWidgetDefinition, + SankeyWidgetDefinition, + ServiceMapWidgetDefinition, + ServiceSummaryWidgetDefinition, + SplitGraphWidgetDefinition, + SunburstWidgetDefinition, + TableWidgetDefinition, + TimeseriesWidgetDefinition, + ToplistWidgetDefinition, + TopologyMapWidgetDefinition, + TreeMapWidgetDefinition, + WildcardWidgetDefinition, + ], + } diff --git a/datadog_api_client/v1/model/widget_display_type.py b/datadog_api_client/v1/model/widget_display_type.py new file mode 100644 index 0000000000..6f8f85a6ae --- /dev/null +++ b/datadog_api_client/v1/model/widget_display_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetDisplayType(ModelSimple): + """ + Type of display to use for the request. + + :param value: Must be one of ["area", "bars", "line", "overlay"]. + :type value: str + """ + + allowed_values = { + "area", + "bars", + "line", + "overlay", + } + AREA: ClassVar["WidgetDisplayType"] + BARS: ClassVar["WidgetDisplayType"] + LINE: ClassVar["WidgetDisplayType"] + OVERLAY: ClassVar["WidgetDisplayType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetDisplayType.AREA = WidgetDisplayType("area") +WidgetDisplayType.BARS = WidgetDisplayType("bars") +WidgetDisplayType.LINE = WidgetDisplayType("line") +WidgetDisplayType.OVERLAY = WidgetDisplayType("overlay") diff --git a/datadog_api_client/v1/model/widget_event.py b/datadog_api_client/v1/model/widget_event.py new file mode 100644 index 0000000000..52fad53127 --- /dev/null +++ b/datadog_api_client/v1/model/widget_event.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetEvent(ModelNormal): + @cached_property + def openapi_types(_): + return { + "q": (str,), + "tags_execution": (str,), + } + attribute_map = { + "q": "q", + "tags_execution": "tags_execution", + } + + def __init__(self_, q: str, tags_execution: Union[str, UnsetType]=unset, **kwargs): + """ + Event overlay control options. + + See the dedicated `Events JSON schema documentation `_ + to learn how to build the ````. + + :param q: Query definition. + :type q: str + + :param tags_execution: The execution method for multi-value filters. + :type tags_execution: str, optional + """ + if tags_execution is not unset: + kwargs["tags_execution"] = tags_execution + super().__init__(kwargs) + + + self_.q = q diff --git a/datadog_api_client/v1/model/widget_event_size.py b/datadog_api_client/v1/model/widget_event_size.py new file mode 100644 index 0000000000..75fd24e93f --- /dev/null +++ b/datadog_api_client/v1/model/widget_event_size.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetEventSize(ModelSimple): + """ + Size to use to display an event. + + :param value: Must be one of ["s", "l"]. + :type value: str + """ + + allowed_values = { + "s", + "l", + } + SMALL: ClassVar["WidgetEventSize"] + LARGE: ClassVar["WidgetEventSize"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetEventSize.SMALL = WidgetEventSize("s") +WidgetEventSize.LARGE = WidgetEventSize("l") diff --git a/datadog_api_client/v1/model/widget_field_sort.py b/datadog_api_client/v1/model/widget_field_sort.py new file mode 100644 index 0000000000..89a87a8549 --- /dev/null +++ b/datadog_api_client/v1/model/widget_field_sort.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_sort import WidgetSort + +class WidgetFieldSort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_sort import WidgetSort + return { + "column": (str,), + "order": (WidgetSort,), + } + attribute_map = { + "column": "column", + "order": "order", + } + + def __init__(self_, column: str, order: WidgetSort, **kwargs): + """ + Which column and order to sort by + + :param column: Facet path for the column + :type column: str + + :param order: Widget sorting methods. + :type order: WidgetSort + """ + super().__init__(kwargs) + + + self_.column = column + self_.order = order diff --git a/datadog_api_client/v1/model/widget_formula.py b/datadog_api_client/v1/model/widget_formula.py new file mode 100644 index 0000000000..336c3200be --- /dev/null +++ b/datadog_api_client/v1/model/widget_formula.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.table_widget_cell_display_mode import TableWidgetCellDisplayMode + from datadog_api_client.v1.model.widget_formula_cell_display_mode_options import WidgetFormulaCellDisplayModeOptions + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula_limit import WidgetFormulaLimit + from datadog_api_client.v1.model.widget_number_format import WidgetNumberFormat + from datadog_api_client.v1.model.widget_formula_style import WidgetFormulaStyle + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + +class WidgetFormula(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.table_widget_cell_display_mode import TableWidgetCellDisplayMode + from datadog_api_client.v1.model.widget_formula_cell_display_mode_options import WidgetFormulaCellDisplayModeOptions + from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat + from datadog_api_client.v1.model.widget_formula_limit import WidgetFormulaLimit + from datadog_api_client.v1.model.widget_number_format import WidgetNumberFormat + from datadog_api_client.v1.model.widget_formula_style import WidgetFormulaStyle + return { + "alias": (str,), + "cell_display_mode": (TableWidgetCellDisplayMode,), + "cell_display_mode_options": (WidgetFormulaCellDisplayModeOptions,), + "conditional_formats": ([WidgetConditionalFormat],), + "formula": (str,), + "limit": (WidgetFormulaLimit,), + "number_format": (WidgetNumberFormat,), + "style": (WidgetFormulaStyle,), + } + attribute_map = { + "alias": "alias", + "cell_display_mode": "cell_display_mode", + "cell_display_mode_options": "cell_display_mode_options", + "conditional_formats": "conditional_formats", + "formula": "formula", + "limit": "limit", + "number_format": "number_format", + "style": "style", + } + + def __init__(self_, formula: str, alias: Union[str, UnsetType]=unset, cell_display_mode: Union[TableWidgetCellDisplayMode, UnsetType]=unset, cell_display_mode_options: Union[WidgetFormulaCellDisplayModeOptions, UnsetType]=unset, conditional_formats: Union[List[WidgetConditionalFormat], UnsetType]=unset, limit: Union[WidgetFormulaLimit, UnsetType]=unset, number_format: Union[WidgetNumberFormat, UnsetType]=unset, style: Union[WidgetFormulaStyle, UnsetType]=unset, **kwargs): + """ + Formula to be used in a widget query. + + :param alias: Expression alias. + :type alias: str, optional + + :param cell_display_mode: Define a display mode for the table cell. + :type cell_display_mode: TableWidgetCellDisplayMode, optional + + :param cell_display_mode_options: Cell display mode options for the widget formula. (only if ``cell_display_mode`` is set to ``trend`` ). + :type cell_display_mode_options: WidgetFormulaCellDisplayModeOptions, optional + + :param conditional_formats: List of conditional formats. + :type conditional_formats: [WidgetConditionalFormat], optional + + :param formula: String expression built from queries, formulas, and functions. + :type formula: str + + :param limit: Options for limiting results returned. + :type limit: WidgetFormulaLimit, optional + + :param number_format: Number format options for the widget. + :type number_format: WidgetNumberFormat, optional + + :param style: Styling options for widget formulas. + :type style: WidgetFormulaStyle, optional + """ + if alias is not unset: + kwargs["alias"] = alias + if cell_display_mode is not unset: + kwargs["cell_display_mode"] = cell_display_mode + if cell_display_mode_options is not unset: + kwargs["cell_display_mode_options"] = cell_display_mode_options + if conditional_formats is not unset: + kwargs["conditional_formats"] = conditional_formats + if limit is not unset: + kwargs["limit"] = limit + if number_format is not unset: + kwargs["number_format"] = number_format + if style is not unset: + kwargs["style"] = style + super().__init__(kwargs) + + + self_.formula = formula diff --git a/datadog_api_client/v1/model/widget_formula_cell_display_mode_options.py b/datadog_api_client/v1/model/widget_formula_cell_display_mode_options.py new file mode 100644 index 0000000000..2e01c453c1 --- /dev/null +++ b/datadog_api_client/v1/model/widget_formula_cell_display_mode_options.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_formula_cell_display_mode_options_trend_type import WidgetFormulaCellDisplayModeOptionsTrendType + from datadog_api_client.v1.model.widget_formula_cell_display_mode_options_y_scale import WidgetFormulaCellDisplayModeOptionsYScale + +class WidgetFormulaCellDisplayModeOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_formula_cell_display_mode_options_trend_type import WidgetFormulaCellDisplayModeOptionsTrendType + from datadog_api_client.v1.model.widget_formula_cell_display_mode_options_y_scale import WidgetFormulaCellDisplayModeOptionsYScale + return { + "trend_type": (WidgetFormulaCellDisplayModeOptionsTrendType,), + "y_scale": (WidgetFormulaCellDisplayModeOptionsYScale,), + } + attribute_map = { + "trend_type": "trend_type", + "y_scale": "y_scale", + } + + def __init__(self_, trend_type: Union[WidgetFormulaCellDisplayModeOptionsTrendType, UnsetType]=unset, y_scale: Union[WidgetFormulaCellDisplayModeOptionsYScale, UnsetType]=unset, **kwargs): + """ + Cell display mode options for the widget formula. (only if ``cell_display_mode`` is set to ``trend`` ). + + :param trend_type: Trend type for the cell display mode options. + :type trend_type: WidgetFormulaCellDisplayModeOptionsTrendType, optional + + :param y_scale: Y scale for the cell display mode options. + :type y_scale: WidgetFormulaCellDisplayModeOptionsYScale, optional + """ + if trend_type is not unset: + kwargs["trend_type"] = trend_type + if y_scale is not unset: + kwargs["y_scale"] = y_scale + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_formula_cell_display_mode_options_trend_type.py b/datadog_api_client/v1/model/widget_formula_cell_display_mode_options_trend_type.py new file mode 100644 index 0000000000..9caaad8555 --- /dev/null +++ b/datadog_api_client/v1/model/widget_formula_cell_display_mode_options_trend_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetFormulaCellDisplayModeOptionsTrendType(ModelSimple): + """ + Trend type for the cell display mode options. + + :param value: Must be one of ["area", "line", "bars"]. + :type value: str + """ + + allowed_values = { + "area", + "line", + "bars", + } + AREA: ClassVar["WidgetFormulaCellDisplayModeOptionsTrendType"] + LINE: ClassVar["WidgetFormulaCellDisplayModeOptionsTrendType"] + BARS: ClassVar["WidgetFormulaCellDisplayModeOptionsTrendType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetFormulaCellDisplayModeOptionsTrendType.AREA = WidgetFormulaCellDisplayModeOptionsTrendType("area") +WidgetFormulaCellDisplayModeOptionsTrendType.LINE = WidgetFormulaCellDisplayModeOptionsTrendType("line") +WidgetFormulaCellDisplayModeOptionsTrendType.BARS = WidgetFormulaCellDisplayModeOptionsTrendType("bars") diff --git a/datadog_api_client/v1/model/widget_formula_cell_display_mode_options_y_scale.py b/datadog_api_client/v1/model/widget_formula_cell_display_mode_options_y_scale.py new file mode 100644 index 0000000000..ff3a7eba5e --- /dev/null +++ b/datadog_api_client/v1/model/widget_formula_cell_display_mode_options_y_scale.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetFormulaCellDisplayModeOptionsYScale(ModelSimple): + """ + Y scale for the cell display mode options. + + :param value: Must be one of ["shared", "independent"]. + :type value: str + """ + + allowed_values = { + "shared", + "independent", + } + SHARED: ClassVar["WidgetFormulaCellDisplayModeOptionsYScale"] + INDEPENDENT: ClassVar["WidgetFormulaCellDisplayModeOptionsYScale"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetFormulaCellDisplayModeOptionsYScale.SHARED = WidgetFormulaCellDisplayModeOptionsYScale("shared") +WidgetFormulaCellDisplayModeOptionsYScale.INDEPENDENT = WidgetFormulaCellDisplayModeOptionsYScale("independent") diff --git a/datadog_api_client/v1/model/widget_formula_limit.py b/datadog_api_client/v1/model/widget_formula_limit.py new file mode 100644 index 0000000000..5a5e0f2dc5 --- /dev/null +++ b/datadog_api_client/v1/model/widget_formula_limit.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + +class WidgetFormulaLimit(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.query_sort_order import QuerySortOrder + return { + "count": (int,), + "order": (QuerySortOrder,), + } + attribute_map = { + "count": "count", + "order": "order", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, order: Union[QuerySortOrder, UnsetType]=unset, **kwargs): + """ + Options for limiting results returned. + + :param count: Number of results to return. + :type count: int, optional + + :param order: Direction of sort. + :type order: QuerySortOrder, optional + """ + if count is not unset: + kwargs["count"] = count + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_formula_sort.py b/datadog_api_client/v1/model/widget_formula_sort.py new file mode 100644 index 0000000000..d4f21ec602 --- /dev/null +++ b/datadog_api_client/v1/model/widget_formula_sort.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_sort import WidgetSort + from datadog_api_client.v1.model.formula_type import FormulaType + +class WidgetFormulaSort(ModelNormal): + validations = { + "index": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_sort import WidgetSort + from datadog_api_client.v1.model.formula_type import FormulaType + return { + "index": (int,), + "order": (WidgetSort,), + "type": (FormulaType,), + } + attribute_map = { + "index": "index", + "order": "order", + "type": "type", + } + + def __init__(self_, index: int, order: WidgetSort, type: FormulaType, **kwargs): + """ + The formula to sort the widget by. + + :param index: The index of the formula to sort by. + :type index: int + + :param order: Widget sorting methods. + :type order: WidgetSort + + :param type: Set the sort type to formula. + :type type: FormulaType + """ + super().__init__(kwargs) + + + self_.index = index + self_.order = order + self_.type = type diff --git a/datadog_api_client/v1/model/widget_formula_style.py b/datadog_api_client/v1/model/widget_formula_style.py new file mode 100644 index 0000000000..a8f39e9b99 --- /dev/null +++ b/datadog_api_client/v1/model/widget_formula_style.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetFormulaStyle(ModelNormal): + @cached_property + def openapi_types(_): + return { + "palette": (str,), + "palette_index": (int,), + } + attribute_map = { + "palette": "palette", + "palette_index": "palette_index", + } + + def __init__(self_, palette: Union[str, UnsetType]=unset, palette_index: Union[int, UnsetType]=unset, **kwargs): + """ + Styling options for widget formulas. + + :param palette: The color palette used to display the formula. A guide to the available color palettes can be found at https://docs.datadoghq.com/dashboards/guide/widget_colors + :type palette: str, optional + + :param palette_index: Index specifying which color to use within the palette. + :type palette_index: int, optional + """ + if palette is not unset: + kwargs["palette"] = palette + if palette_index is not unset: + kwargs["palette_index"] = palette_index + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_group_sort.py b/datadog_api_client/v1/model/widget_group_sort.py new file mode 100644 index 0000000000..04c9c207d2 --- /dev/null +++ b/datadog_api_client/v1/model/widget_group_sort.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_sort import WidgetSort + from datadog_api_client.v1.model.group_type import GroupType + +class WidgetGroupSort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_sort import WidgetSort + from datadog_api_client.v1.model.group_type import GroupType + return { + "name": (str,), + "order": (WidgetSort,), + "type": (GroupType,), + } + attribute_map = { + "name": "name", + "order": "order", + "type": "type", + } + + def __init__(self_, name: str, order: WidgetSort, type: GroupType, **kwargs): + """ + The group to sort the widget by. + + :param name: The name of the group. + :type name: str + + :param order: Widget sorting methods. + :type order: WidgetSort + + :param type: Set the sort type to group. + :type type: GroupType + """ + super().__init__(kwargs) + + + self_.name = name + self_.order = order + self_.type = type diff --git a/datadog_api_client/v1/model/widget_grouping.py b/datadog_api_client/v1/model/widget_grouping.py new file mode 100644 index 0000000000..cee3b4a97d --- /dev/null +++ b/datadog_api_client/v1/model/widget_grouping.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetGrouping(ModelSimple): + """ + The kind of grouping to use. + + :param value: Must be one of ["check", "cluster"]. + :type value: str + """ + + allowed_values = { + "check", + "cluster", + } + CHECK: ClassVar["WidgetGrouping"] + CLUSTER: ClassVar["WidgetGrouping"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetGrouping.CHECK = WidgetGrouping("check") +WidgetGrouping.CLUSTER = WidgetGrouping("cluster") diff --git a/datadog_api_client/v1/model/widget_histogram_request_type.py b/datadog_api_client/v1/model/widget_histogram_request_type.py new file mode 100644 index 0000000000..1e569a6d55 --- /dev/null +++ b/datadog_api_client/v1/model/widget_histogram_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetHistogramRequestType(ModelSimple): + """ + Request type for distribution of point values for distribution metrics. Query space aggregator must be `histogram:` for points distributions. + + :param value: If omitted defaults to "histogram". Must be one of ["histogram"]. + :type value: str + """ + + allowed_values = { + "histogram", + } + HISTOGRAM: ClassVar["WidgetHistogramRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetHistogramRequestType.HISTOGRAM = WidgetHistogramRequestType("histogram") diff --git a/datadog_api_client/v1/model/widget_horizontal_align.py b/datadog_api_client/v1/model/widget_horizontal_align.py new file mode 100644 index 0000000000..232665b267 --- /dev/null +++ b/datadog_api_client/v1/model/widget_horizontal_align.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetHorizontalAlign(ModelSimple): + """ + Horizontal alignment. + + :param value: Must be one of ["center", "left", "right"]. + :type value: str + """ + + allowed_values = { + "center", + "left", + "right", + } + CENTER: ClassVar["WidgetHorizontalAlign"] + LEFT: ClassVar["WidgetHorizontalAlign"] + RIGHT: ClassVar["WidgetHorizontalAlign"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetHorizontalAlign.CENTER = WidgetHorizontalAlign("center") +WidgetHorizontalAlign.LEFT = WidgetHorizontalAlign("left") +WidgetHorizontalAlign.RIGHT = WidgetHorizontalAlign("right") diff --git a/datadog_api_client/v1/model/widget_image_sizing.py b/datadog_api_client/v1/model/widget_image_sizing.py new file mode 100644 index 0000000000..5bee3102b9 --- /dev/null +++ b/datadog_api_client/v1/model/widget_image_sizing.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetImageSizing(ModelSimple): + """ + How to size the image on the widget. The values are based on the image `object-fit` CSS properties. + **Note**: `zoom`, `fit` and `center` values are deprecated. + + :param value: Must be one of ["fill", "contain", "cover", "none", "scale-down", "zoom", "fit", "center"]. + :type value: str + """ + + allowed_values = { + "fill", + "contain", + "cover", + "none", + "scale-down", + "zoom", + "fit", + "center", + } + FILL: ClassVar["WidgetImageSizing"] + CONTAIN: ClassVar["WidgetImageSizing"] + COVER: ClassVar["WidgetImageSizing"] + NONE: ClassVar["WidgetImageSizing"] + SCALEDOWN: ClassVar["WidgetImageSizing"] + ZOOM: ClassVar["WidgetImageSizing"] + FIT: ClassVar["WidgetImageSizing"] + CENTER: ClassVar["WidgetImageSizing"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetImageSizing.FILL = WidgetImageSizing("fill") +WidgetImageSizing.CONTAIN = WidgetImageSizing("contain") +WidgetImageSizing.COVER = WidgetImageSizing("cover") +WidgetImageSizing.NONE = WidgetImageSizing("none") +WidgetImageSizing.SCALEDOWN = WidgetImageSizing("scale-down") +WidgetImageSizing.ZOOM = WidgetImageSizing("zoom") +WidgetImageSizing.FIT = WidgetImageSizing("fit") +WidgetImageSizing.CENTER = WidgetImageSizing("center") diff --git a/datadog_api_client/v1/model/widget_layout.py b/datadog_api_client/v1/model/widget_layout.py new file mode 100644 index 0000000000..6d726e1e23 --- /dev/null +++ b/datadog_api_client/v1/model/widget_layout.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetLayout(ModelNormal): + validations = { + "height": { + "inclusive_minimum": 0, + }, + "width": { + "inclusive_minimum": 0, + }, + "x": { + "inclusive_minimum": 0, + }, + "y": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "height": (int,), + "is_column_break": (bool,), + "width": (int,), + "x": (int,), + "y": (int,), + } + attribute_map = { + "height": "height", + "is_column_break": "is_column_break", + "width": "width", + "x": "x", + "y": "y", + } + + def __init__(self_, height: int, width: int, x: int, y: int, is_column_break: Union[bool, UnsetType]=unset, **kwargs): + """ + The layout for a widget on a ``free`` or **new dashboard layout** dashboard. + + :param height: The height of the widget. Should be a non-negative integer. + :type height: int + + :param is_column_break: Whether the widget should be the first one on the second column in high density or not. + **Note** : Only for the **new dashboard layout** and only one widget in the dashboard should have this property set to ``true``. + :type is_column_break: bool, optional + + :param width: The width of the widget. Should be a non-negative integer. + :type width: int + + :param x: The position of the widget on the x (horizontal) axis. Should be a non-negative integer. + :type x: int + + :param y: The position of the widget on the y (vertical) axis. Should be a non-negative integer. + :type y: int + """ + if is_column_break is not unset: + kwargs["is_column_break"] = is_column_break + super().__init__(kwargs) + + + self_.height = height + self_.width = width + self_.x = x + self_.y = y diff --git a/datadog_api_client/v1/model/widget_layout_type.py b/datadog_api_client/v1/model/widget_layout_type.py new file mode 100644 index 0000000000..c243c20679 --- /dev/null +++ b/datadog_api_client/v1/model/widget_layout_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetLayoutType(ModelSimple): + """ + Layout type of the group. + + :param value: If omitted defaults to "ordered". Must be one of ["ordered"]. + :type value: str + """ + + allowed_values = { + "ordered", + } + ORDERED: ClassVar["WidgetLayoutType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetLayoutType.ORDERED = WidgetLayoutType("ordered") diff --git a/datadog_api_client/v1/model/widget_legacy_live_span.py b/datadog_api_client/v1/model/widget_legacy_live_span.py new file mode 100644 index 0000000000..44fbc6b99b --- /dev/null +++ b/datadog_api_client/v1/model/widget_legacy_live_span.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_live_span import WidgetLiveSpan + +class WidgetLegacyLiveSpan(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_live_span import WidgetLiveSpan + return { + "hide_incomplete_cost_data": (bool,), + "live_span": (WidgetLiveSpan,), + } + attribute_map = { + "hide_incomplete_cost_data": "hide_incomplete_cost_data", + "live_span": "live_span", + } + + def __init__(self_, hide_incomplete_cost_data: Union[bool, UnsetType]=unset, live_span: Union[WidgetLiveSpan, UnsetType]=unset, **kwargs): + """ + Wrapper for live span + + :param hide_incomplete_cost_data: Whether to hide incomplete cost data in the widget. + :type hide_incomplete_cost_data: bool, optional + + :param live_span: The available timeframes depend on the widget you are using. + :type live_span: WidgetLiveSpan, optional + """ + if hide_incomplete_cost_data is not unset: + kwargs["hide_incomplete_cost_data"] = hide_incomplete_cost_data + if live_span is not unset: + kwargs["live_span"] = live_span + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_line_type.py b/datadog_api_client/v1/model/widget_line_type.py new file mode 100644 index 0000000000..277da6b98a --- /dev/null +++ b/datadog_api_client/v1/model/widget_line_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetLineType(ModelSimple): + """ + Type of lines displayed. + + :param value: Must be one of ["dashed", "dotted", "solid"]. + :type value: str + """ + + allowed_values = { + "dashed", + "dotted", + "solid", + } + DASHED: ClassVar["WidgetLineType"] + DOTTED: ClassVar["WidgetLineType"] + SOLID: ClassVar["WidgetLineType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetLineType.DASHED = WidgetLineType("dashed") +WidgetLineType.DOTTED = WidgetLineType("dotted") +WidgetLineType.SOLID = WidgetLineType("solid") diff --git a/datadog_api_client/v1/model/widget_line_width.py b/datadog_api_client/v1/model/widget_line_width.py new file mode 100644 index 0000000000..7803bec2ca --- /dev/null +++ b/datadog_api_client/v1/model/widget_line_width.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetLineWidth(ModelSimple): + """ + Width of line displayed. + + :param value: Must be one of ["normal", "thick", "thin"]. + :type value: str + """ + + allowed_values = { + "normal", + "thick", + "thin", + } + NORMAL: ClassVar["WidgetLineWidth"] + THICK: ClassVar["WidgetLineWidth"] + THIN: ClassVar["WidgetLineWidth"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetLineWidth.NORMAL = WidgetLineWidth("normal") +WidgetLineWidth.THICK = WidgetLineWidth("thick") +WidgetLineWidth.THIN = WidgetLineWidth("thin") diff --git a/datadog_api_client/v1/model/widget_live_span.py b/datadog_api_client/v1/model/widget_live_span.py new file mode 100644 index 0000000000..e31dc4af70 --- /dev/null +++ b/datadog_api_client/v1/model/widget_live_span.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetLiveSpan(ModelSimple): + """ + The available timeframes depend on the widget you are using. + + :param value: Must be one of ["1m", "5m", "10m", "15m", "30m", "1h", "4h", "1d", "2d", "1w", "1mo", "3mo", "6mo", "week_to_date", "month_to_date", "1y", "alert"]. + :type value: str + """ + + allowed_values = { + "1m", + "5m", + "10m", + "15m", + "30m", + "1h", + "4h", + "1d", + "2d", + "1w", + "1mo", + "3mo", + "6mo", + "week_to_date", + "month_to_date", + "1y", + "alert", + } + PAST_ONE_MINUTE: ClassVar["WidgetLiveSpan"] + PAST_FIVE_MINUTES: ClassVar["WidgetLiveSpan"] + PAST_TEN_MINUTES: ClassVar["WidgetLiveSpan"] + PAST_FIFTEEN_MINUTES: ClassVar["WidgetLiveSpan"] + PAST_THIRTY_MINUTES: ClassVar["WidgetLiveSpan"] + PAST_ONE_HOUR: ClassVar["WidgetLiveSpan"] + PAST_FOUR_HOURS: ClassVar["WidgetLiveSpan"] + PAST_ONE_DAY: ClassVar["WidgetLiveSpan"] + PAST_TWO_DAYS: ClassVar["WidgetLiveSpan"] + PAST_ONE_WEEK: ClassVar["WidgetLiveSpan"] + PAST_ONE_MONTH: ClassVar["WidgetLiveSpan"] + PAST_THREE_MONTHS: ClassVar["WidgetLiveSpan"] + PAST_SIX_MONTHS: ClassVar["WidgetLiveSpan"] + WEEK_TO_DATE: ClassVar["WidgetLiveSpan"] + MONTH_TO_DATE: ClassVar["WidgetLiveSpan"] + PAST_ONE_YEAR: ClassVar["WidgetLiveSpan"] + ALERT: ClassVar["WidgetLiveSpan"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetLiveSpan.PAST_ONE_MINUTE = WidgetLiveSpan("1m") +WidgetLiveSpan.PAST_FIVE_MINUTES = WidgetLiveSpan("5m") +WidgetLiveSpan.PAST_TEN_MINUTES = WidgetLiveSpan("10m") +WidgetLiveSpan.PAST_FIFTEEN_MINUTES = WidgetLiveSpan("15m") +WidgetLiveSpan.PAST_THIRTY_MINUTES = WidgetLiveSpan("30m") +WidgetLiveSpan.PAST_ONE_HOUR = WidgetLiveSpan("1h") +WidgetLiveSpan.PAST_FOUR_HOURS = WidgetLiveSpan("4h") +WidgetLiveSpan.PAST_ONE_DAY = WidgetLiveSpan("1d") +WidgetLiveSpan.PAST_TWO_DAYS = WidgetLiveSpan("2d") +WidgetLiveSpan.PAST_ONE_WEEK = WidgetLiveSpan("1w") +WidgetLiveSpan.PAST_ONE_MONTH = WidgetLiveSpan("1mo") +WidgetLiveSpan.PAST_THREE_MONTHS = WidgetLiveSpan("3mo") +WidgetLiveSpan.PAST_SIX_MONTHS = WidgetLiveSpan("6mo") +WidgetLiveSpan.WEEK_TO_DATE = WidgetLiveSpan("week_to_date") +WidgetLiveSpan.MONTH_TO_DATE = WidgetLiveSpan("month_to_date") +WidgetLiveSpan.PAST_ONE_YEAR = WidgetLiveSpan("1y") +WidgetLiveSpan.ALERT = WidgetLiveSpan("alert") diff --git a/datadog_api_client/v1/model/widget_live_span_unit.py b/datadog_api_client/v1/model/widget_live_span_unit.py new file mode 100644 index 0000000000..fa3e2380b7 --- /dev/null +++ b/datadog_api_client/v1/model/widget_live_span_unit.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetLiveSpanUnit(ModelSimple): + """ + Unit of the time span. + + :param value: Must be one of ["minute", "hour", "day", "week", "month", "year"]. + :type value: str + """ + + allowed_values = { + "minute", + "hour", + "day", + "week", + "month", + "year", + } + MINUTE: ClassVar["WidgetLiveSpanUnit"] + HOUR: ClassVar["WidgetLiveSpanUnit"] + DAY: ClassVar["WidgetLiveSpanUnit"] + WEEK: ClassVar["WidgetLiveSpanUnit"] + MONTH: ClassVar["WidgetLiveSpanUnit"] + YEAR: ClassVar["WidgetLiveSpanUnit"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetLiveSpanUnit.MINUTE = WidgetLiveSpanUnit("minute") +WidgetLiveSpanUnit.HOUR = WidgetLiveSpanUnit("hour") +WidgetLiveSpanUnit.DAY = WidgetLiveSpanUnit("day") +WidgetLiveSpanUnit.WEEK = WidgetLiveSpanUnit("week") +WidgetLiveSpanUnit.MONTH = WidgetLiveSpanUnit("month") +WidgetLiveSpanUnit.YEAR = WidgetLiveSpanUnit("year") diff --git a/datadog_api_client/v1/model/widget_margin.py b/datadog_api_client/v1/model/widget_margin.py new file mode 100644 index 0000000000..18512526a8 --- /dev/null +++ b/datadog_api_client/v1/model/widget_margin.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetMargin(ModelSimple): + """ + Size of the margins around the image. + **Note**: `small` and `large` values are deprecated. + + :param value: Must be one of ["sm", "md", "lg", "small", "large"]. + :type value: str + """ + + allowed_values = { + "sm", + "md", + "lg", + "small", + "large", + } + SM: ClassVar["WidgetMargin"] + MD: ClassVar["WidgetMargin"] + LG: ClassVar["WidgetMargin"] + SMALL: ClassVar["WidgetMargin"] + LARGE: ClassVar["WidgetMargin"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetMargin.SM = WidgetMargin("sm") +WidgetMargin.MD = WidgetMargin("md") +WidgetMargin.LG = WidgetMargin("lg") +WidgetMargin.SMALL = WidgetMargin("small") +WidgetMargin.LARGE = WidgetMargin("large") diff --git a/datadog_api_client/v1/model/widget_marker.py b/datadog_api_client/v1/model/widget_marker.py new file mode 100644 index 0000000000..05f7979af5 --- /dev/null +++ b/datadog_api_client/v1/model/widget_marker.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetMarker(ModelNormal): + @cached_property + def openapi_types(_): + return { + "display_type": (str,), + "label": (str,), + "time": (str,), + "value": (str,), + } + attribute_map = { + "display_type": "display_type", + "label": "label", + "time": "time", + "value": "value", + } + + def __init__(self_, value: str, display_type: Union[str, UnsetType]=unset, label: Union[str, UnsetType]=unset, time: Union[str, UnsetType]=unset, **kwargs): + """ + Markers allow you to add visual conditional formatting for your graphs. + + :param display_type: Combination of: + + * A severity error, warning, ok, or info + * A line type: dashed, solid, or bold + In this case of a Distribution widget, this can be set to be ``percentile``. + :type display_type: str, optional + + :param label: Label to display over the marker. + :type label: str, optional + + :param time: Timestamp for the widget. + :type time: str, optional + + :param value: Value to apply. Can be a single value y = 15 or a range of values 0 < y < 10. + For Distribution widgets with ``display_type`` set to ``percentile`` , this should be + a numeric percentile value (for example, "90" for P90). + :type value: str + """ + if display_type is not unset: + kwargs["display_type"] = display_type + if label is not unset: + kwargs["label"] = label + if time is not unset: + kwargs["time"] = time + super().__init__(kwargs) + + + self_.value = value diff --git a/datadog_api_client/v1/model/widget_message_display.py b/datadog_api_client/v1/model/widget_message_display.py new file mode 100644 index 0000000000..c9a36fd9db --- /dev/null +++ b/datadog_api_client/v1/model/widget_message_display.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetMessageDisplay(ModelSimple): + """ + Amount of log lines to display + + :param value: Must be one of ["inline", "expanded-md", "expanded-lg"]. + :type value: str + """ + + allowed_values = { + "inline", + "expanded-md", + "expanded-lg", + } + INLINE: ClassVar["WidgetMessageDisplay"] + EXPANDED_MEDIUM: ClassVar["WidgetMessageDisplay"] + EXPANDED_LARGE: ClassVar["WidgetMessageDisplay"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetMessageDisplay.INLINE = WidgetMessageDisplay("inline") +WidgetMessageDisplay.EXPANDED_MEDIUM = WidgetMessageDisplay("expanded-md") +WidgetMessageDisplay.EXPANDED_LARGE = WidgetMessageDisplay("expanded-lg") diff --git a/datadog_api_client/v1/model/widget_monitor_summary_display_format.py b/datadog_api_client/v1/model/widget_monitor_summary_display_format.py new file mode 100644 index 0000000000..9d63515e33 --- /dev/null +++ b/datadog_api_client/v1/model/widget_monitor_summary_display_format.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetMonitorSummaryDisplayFormat(ModelSimple): + """ + What to display on the widget. + + :param value: Must be one of ["counts", "countsAndList", "list"]. + :type value: str + """ + + allowed_values = { + "counts", + "countsAndList", + "list", + } + COUNTS: ClassVar["WidgetMonitorSummaryDisplayFormat"] + COUNTS_AND_LIST: ClassVar["WidgetMonitorSummaryDisplayFormat"] + LIST: ClassVar["WidgetMonitorSummaryDisplayFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetMonitorSummaryDisplayFormat.COUNTS = WidgetMonitorSummaryDisplayFormat("counts") +WidgetMonitorSummaryDisplayFormat.COUNTS_AND_LIST = WidgetMonitorSummaryDisplayFormat("countsAndList") +WidgetMonitorSummaryDisplayFormat.LIST = WidgetMonitorSummaryDisplayFormat("list") diff --git a/datadog_api_client/v1/model/widget_monitor_summary_sort.py b/datadog_api_client/v1/model/widget_monitor_summary_sort.py new file mode 100644 index 0000000000..4149f2c666 --- /dev/null +++ b/datadog_api_client/v1/model/widget_monitor_summary_sort.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetMonitorSummarySort(ModelSimple): + """ + Widget sorting methods. + + :param value: Must be one of ["name", "group", "status", "tags", "triggered", "group,asc", "group,desc", "name,asc", "name,desc", "status,asc", "status,desc", "tags,asc", "tags,desc", "triggered,asc", "triggered,desc", "priority,asc", "priority,desc"]. + :type value: str + """ + + allowed_values = { + "name", + "group", + "status", + "tags", + "triggered", + "group,asc", + "group,desc", + "name,asc", + "name,desc", + "status,asc", + "status,desc", + "tags,asc", + "tags,desc", + "triggered,asc", + "triggered,desc", + "priority,asc", + "priority,desc", + } + NAME: ClassVar["WidgetMonitorSummarySort"] + GROUP: ClassVar["WidgetMonitorSummarySort"] + STATUS: ClassVar["WidgetMonitorSummarySort"] + TAGS: ClassVar["WidgetMonitorSummarySort"] + TRIGGERED: ClassVar["WidgetMonitorSummarySort"] + GROUP_ASCENDING: ClassVar["WidgetMonitorSummarySort"] + GROUP_DESCENDING: ClassVar["WidgetMonitorSummarySort"] + NAME_ASCENDING: ClassVar["WidgetMonitorSummarySort"] + NAME_DESCENDING: ClassVar["WidgetMonitorSummarySort"] + STATUS_ASCENDING: ClassVar["WidgetMonitorSummarySort"] + STATUS_DESCENDING: ClassVar["WidgetMonitorSummarySort"] + TAGS_ASCENDING: ClassVar["WidgetMonitorSummarySort"] + TAGS_DESCENDING: ClassVar["WidgetMonitorSummarySort"] + TRIGGERED_ASCENDING: ClassVar["WidgetMonitorSummarySort"] + TRIGGERED_DESCENDING: ClassVar["WidgetMonitorSummarySort"] + PRIORITY_ASCENDING: ClassVar["WidgetMonitorSummarySort"] + PRIORITY_DESCENDING: ClassVar["WidgetMonitorSummarySort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetMonitorSummarySort.NAME = WidgetMonitorSummarySort("name") +WidgetMonitorSummarySort.GROUP = WidgetMonitorSummarySort("group") +WidgetMonitorSummarySort.STATUS = WidgetMonitorSummarySort("status") +WidgetMonitorSummarySort.TAGS = WidgetMonitorSummarySort("tags") +WidgetMonitorSummarySort.TRIGGERED = WidgetMonitorSummarySort("triggered") +WidgetMonitorSummarySort.GROUP_ASCENDING = WidgetMonitorSummarySort("group,asc") +WidgetMonitorSummarySort.GROUP_DESCENDING = WidgetMonitorSummarySort("group,desc") +WidgetMonitorSummarySort.NAME_ASCENDING = WidgetMonitorSummarySort("name,asc") +WidgetMonitorSummarySort.NAME_DESCENDING = WidgetMonitorSummarySort("name,desc") +WidgetMonitorSummarySort.STATUS_ASCENDING = WidgetMonitorSummarySort("status,asc") +WidgetMonitorSummarySort.STATUS_DESCENDING = WidgetMonitorSummarySort("status,desc") +WidgetMonitorSummarySort.TAGS_ASCENDING = WidgetMonitorSummarySort("tags,asc") +WidgetMonitorSummarySort.TAGS_DESCENDING = WidgetMonitorSummarySort("tags,desc") +WidgetMonitorSummarySort.TRIGGERED_ASCENDING = WidgetMonitorSummarySort("triggered,asc") +WidgetMonitorSummarySort.TRIGGERED_DESCENDING = WidgetMonitorSummarySort("triggered,desc") +WidgetMonitorSummarySort.PRIORITY_ASCENDING = WidgetMonitorSummarySort("priority,asc") +WidgetMonitorSummarySort.PRIORITY_DESCENDING = WidgetMonitorSummarySort("priority,desc") diff --git a/datadog_api_client/v1/model/widget_new_fixed_span.py b/datadog_api_client/v1/model/widget_new_fixed_span.py new file mode 100644 index 0000000000..97e1cc945a --- /dev/null +++ b/datadog_api_client/v1/model/widget_new_fixed_span.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_new_fixed_span_type import WidgetNewFixedSpanType + +class WidgetNewFixedSpan(ModelNormal): + validations = { + "_from": { + "inclusive_minimum": 0, + }, + "to": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_new_fixed_span_type import WidgetNewFixedSpanType + return { + "_from": (int,), + "hide_incomplete_cost_data": (bool,), + "to": (int,), + "type": (WidgetNewFixedSpanType,), + } + attribute_map = { + "_from": "from", + "hide_incomplete_cost_data": "hide_incomplete_cost_data", + "to": "to", + "type": "type", + } + + def __init__(self_, _from: int, to: int, type: WidgetNewFixedSpanType, hide_incomplete_cost_data: Union[bool, UnsetType]=unset, **kwargs): + """ + Used for fixed span times, such as 'March 1 to March 7'. + + :param _from: Start time in milliseconds since epoch. + :type _from: int + + :param hide_incomplete_cost_data: Whether to hide incomplete cost data in the widget. + :type hide_incomplete_cost_data: bool, optional + + :param to: End time in milliseconds since epoch. + :type to: int + + :param type: Type "fixed" denotes a fixed span. + :type type: WidgetNewFixedSpanType + """ + if hide_incomplete_cost_data is not unset: + kwargs["hide_incomplete_cost_data"] = hide_incomplete_cost_data + super().__init__(kwargs) + + + self_._from = _from + self_.to = to + self_.type = type diff --git a/datadog_api_client/v1/model/widget_new_fixed_span_type.py b/datadog_api_client/v1/model/widget_new_fixed_span_type.py new file mode 100644 index 0000000000..3ff32ee073 --- /dev/null +++ b/datadog_api_client/v1/model/widget_new_fixed_span_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetNewFixedSpanType(ModelSimple): + """ + Type "fixed" denotes a fixed span. + + :param value: If omitted defaults to "fixed". Must be one of ["fixed"]. + :type value: str + """ + + allowed_values = { + "fixed", + } + FIXED: ClassVar["WidgetNewFixedSpanType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetNewFixedSpanType.FIXED = WidgetNewFixedSpanType("fixed") diff --git a/datadog_api_client/v1/model/widget_new_live_span.py b/datadog_api_client/v1/model/widget_new_live_span.py new file mode 100644 index 0000000000..4005cfd29e --- /dev/null +++ b/datadog_api_client/v1/model/widget_new_live_span.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_new_live_span_type import WidgetNewLiveSpanType + from datadog_api_client.v1.model.widget_live_span_unit import WidgetLiveSpanUnit + +class WidgetNewLiveSpan(ModelNormal): + validations = { + "value": { + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_new_live_span_type import WidgetNewLiveSpanType + from datadog_api_client.v1.model.widget_live_span_unit import WidgetLiveSpanUnit + return { + "hide_incomplete_cost_data": (bool,), + "type": (WidgetNewLiveSpanType,), + "unit": (WidgetLiveSpanUnit,), + "value": (int,), + } + attribute_map = { + "hide_incomplete_cost_data": "hide_incomplete_cost_data", + "type": "type", + "unit": "unit", + "value": "value", + } + + def __init__(self_, type: WidgetNewLiveSpanType, unit: WidgetLiveSpanUnit, value: int, hide_incomplete_cost_data: Union[bool, UnsetType]=unset, **kwargs): + """ + Used for arbitrary live span times, such as 17 minutes or 6 hours. + + :param hide_incomplete_cost_data: Whether to hide incomplete cost data in the widget. + :type hide_incomplete_cost_data: bool, optional + + :param type: Type "live" denotes a live span in the new format. + :type type: WidgetNewLiveSpanType + + :param unit: Unit of the time span. + :type unit: WidgetLiveSpanUnit + + :param value: Value of the time span. + :type value: int + """ + if hide_incomplete_cost_data is not unset: + kwargs["hide_incomplete_cost_data"] = hide_incomplete_cost_data + super().__init__(kwargs) + + + self_.type = type + self_.unit = unit + self_.value = value diff --git a/datadog_api_client/v1/model/widget_new_live_span_type.py b/datadog_api_client/v1/model/widget_new_live_span_type.py new file mode 100644 index 0000000000..6c20866feb --- /dev/null +++ b/datadog_api_client/v1/model/widget_new_live_span_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetNewLiveSpanType(ModelSimple): + """ + Type "live" denotes a live span in the new format. + + :param value: If omitted defaults to "live". Must be one of ["live"]. + :type value: str + """ + + allowed_values = { + "live", + } + LIVE: ClassVar["WidgetNewLiveSpanType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetNewLiveSpanType.LIVE = WidgetNewLiveSpanType("live") diff --git a/datadog_api_client/v1/model/widget_node_type.py b/datadog_api_client/v1/model/widget_node_type.py new file mode 100644 index 0000000000..844f93c3e7 --- /dev/null +++ b/datadog_api_client/v1/model/widget_node_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetNodeType(ModelSimple): + """ + Which type of node to use in the map. + + :param value: Must be one of ["host", "container"]. + :type value: str + """ + + allowed_values = { + "host", + "container", + } + HOST: ClassVar["WidgetNodeType"] + CONTAINER: ClassVar["WidgetNodeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetNodeType.HOST = WidgetNodeType("host") +WidgetNodeType.CONTAINER = WidgetNodeType("container") diff --git a/datadog_api_client/v1/model/widget_number_format.py b/datadog_api_client/v1/model/widget_number_format.py new file mode 100644 index 0000000000..5a5dce58d1 --- /dev/null +++ b/datadog_api_client/v1/model/widget_number_format.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.number_format_unit import NumberFormatUnit + from datadog_api_client.v1.model.number_format_unit_scale import NumberFormatUnitScale + from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical + from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom + +class WidgetNumberFormat(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.number_format_unit import NumberFormatUnit + from datadog_api_client.v1.model.number_format_unit_scale import NumberFormatUnitScale + return { + "unit": (NumberFormatUnit,), + "unit_scale": (NumberFormatUnitScale,), + } + attribute_map = { + "unit": "unit", + "unit_scale": "unit_scale", + } + + def __init__(self_, unit: Union[NumberFormatUnit, NumberFormatUnitCanonical, NumberFormatUnitCustom, UnsetType]=unset, unit_scale: Union[NumberFormatUnitScale, none_type, UnsetType]=unset, **kwargs): + """ + Number format options for the widget. + + :param unit: Number format unit. + :type unit: NumberFormatUnit, optional + + :param unit_scale: The definition of ``NumberFormatUnitScale`` object. + :type unit_scale: NumberFormatUnitScale, none_type, optional + """ + if unit is not unset: + kwargs["unit"] = unit + if unit_scale is not unset: + kwargs["unit_scale"] = unit_scale + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_order_by.py b/datadog_api_client/v1/model/widget_order_by.py new file mode 100644 index 0000000000..33c12ae2bd --- /dev/null +++ b/datadog_api_client/v1/model/widget_order_by.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetOrderBy(ModelSimple): + """ + What to order by. + + :param value: Must be one of ["change", "name", "present", "past"]. + :type value: str + """ + + allowed_values = { + "change", + "name", + "present", + "past", + } + CHANGE: ClassVar["WidgetOrderBy"] + NAME: ClassVar["WidgetOrderBy"] + PRESENT: ClassVar["WidgetOrderBy"] + PAST: ClassVar["WidgetOrderBy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetOrderBy.CHANGE = WidgetOrderBy("change") +WidgetOrderBy.NAME = WidgetOrderBy("name") +WidgetOrderBy.PRESENT = WidgetOrderBy("present") +WidgetOrderBy.PAST = WidgetOrderBy("past") diff --git a/datadog_api_client/v1/model/widget_palette.py b/datadog_api_client/v1/model/widget_palette.py new file mode 100644 index 0000000000..f4c4c40324 --- /dev/null +++ b/datadog_api_client/v1/model/widget_palette.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetPalette(ModelSimple): + """ + Color palette to apply. + + :param value: Must be one of ["blue", "custom_bg", "custom_image", "custom_text", "gray_on_white", "grey", "green", "orange", "red", "red_on_white", "white_on_gray", "white_on_green", "green_on_white", "white_on_red", "white_on_yellow", "yellow_on_white", "black_on_light_yellow", "black_on_light_green", "black_on_light_red"]. + :type value: str + """ + + allowed_values = { + "blue", + "custom_bg", + "custom_image", + "custom_text", + "gray_on_white", + "grey", + "green", + "orange", + "red", + "red_on_white", + "white_on_gray", + "white_on_green", + "green_on_white", + "white_on_red", + "white_on_yellow", + "yellow_on_white", + "black_on_light_yellow", + "black_on_light_green", + "black_on_light_red", + } + BLUE: ClassVar["WidgetPalette"] + CUSTOM_BACKGROUND: ClassVar["WidgetPalette"] + CUSTOM_IMAGE: ClassVar["WidgetPalette"] + CUSTOM_TEXT: ClassVar["WidgetPalette"] + GRAY_ON_WHITE: ClassVar["WidgetPalette"] + GREY: ClassVar["WidgetPalette"] + GREEN: ClassVar["WidgetPalette"] + ORANGE: ClassVar["WidgetPalette"] + RED: ClassVar["WidgetPalette"] + RED_ON_WHITE: ClassVar["WidgetPalette"] + WHITE_ON_GRAY: ClassVar["WidgetPalette"] + WHITE_ON_GREEN: ClassVar["WidgetPalette"] + GREEN_ON_WHITE: ClassVar["WidgetPalette"] + WHITE_ON_RED: ClassVar["WidgetPalette"] + WHITE_ON_YELLOW: ClassVar["WidgetPalette"] + YELLOW_ON_WHITE: ClassVar["WidgetPalette"] + BLACK_ON_LIGHT_YELLOW: ClassVar["WidgetPalette"] + BLACK_ON_LIGHT_GREEN: ClassVar["WidgetPalette"] + BLACK_ON_LIGHT_RED: ClassVar["WidgetPalette"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetPalette.BLUE = WidgetPalette("blue") +WidgetPalette.CUSTOM_BACKGROUND = WidgetPalette("custom_bg") +WidgetPalette.CUSTOM_IMAGE = WidgetPalette("custom_image") +WidgetPalette.CUSTOM_TEXT = WidgetPalette("custom_text") +WidgetPalette.GRAY_ON_WHITE = WidgetPalette("gray_on_white") +WidgetPalette.GREY = WidgetPalette("grey") +WidgetPalette.GREEN = WidgetPalette("green") +WidgetPalette.ORANGE = WidgetPalette("orange") +WidgetPalette.RED = WidgetPalette("red") +WidgetPalette.RED_ON_WHITE = WidgetPalette("red_on_white") +WidgetPalette.WHITE_ON_GRAY = WidgetPalette("white_on_gray") +WidgetPalette.WHITE_ON_GREEN = WidgetPalette("white_on_green") +WidgetPalette.GREEN_ON_WHITE = WidgetPalette("green_on_white") +WidgetPalette.WHITE_ON_RED = WidgetPalette("white_on_red") +WidgetPalette.WHITE_ON_YELLOW = WidgetPalette("white_on_yellow") +WidgetPalette.YELLOW_ON_WHITE = WidgetPalette("yellow_on_white") +WidgetPalette.BLACK_ON_LIGHT_YELLOW = WidgetPalette("black_on_light_yellow") +WidgetPalette.BLACK_ON_LIGHT_GREEN = WidgetPalette("black_on_light_green") +WidgetPalette.BLACK_ON_LIGHT_RED = WidgetPalette("black_on_light_red") diff --git a/datadog_api_client/v1/model/widget_request_style.py b/datadog_api_client/v1/model/widget_request_style.py new file mode 100644 index 0000000000..b3a8fae99f --- /dev/null +++ b/datadog_api_client/v1/model/widget_request_style.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_line_type import WidgetLineType + from datadog_api_client.v1.model.widget_line_width import WidgetLineWidth + from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy + +class WidgetRequestStyle(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_line_type import WidgetLineType + from datadog_api_client.v1.model.widget_line_width import WidgetLineWidth + from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy + return { + "line_type": (WidgetLineType,), + "line_width": (WidgetLineWidth,), + "order_by": (WidgetStyleOrderBy,), + "palette": (str,), + } + attribute_map = { + "line_type": "line_type", + "line_width": "line_width", + "order_by": "order_by", + "palette": "palette", + } + + def __init__(self_, line_type: Union[WidgetLineType, UnsetType]=unset, line_width: Union[WidgetLineWidth, UnsetType]=unset, order_by: Union[WidgetStyleOrderBy, UnsetType]=unset, palette: Union[str, UnsetType]=unset, **kwargs): + """ + Define request widget style. + + :param line_type: Type of lines displayed. + :type line_type: WidgetLineType, optional + + :param line_width: Width of line displayed. + :type line_width: WidgetLineWidth, optional + + :param order_by: How to order series in timeseries visualizations. + + * ``tags`` : Order series alphabetically by tag name (default behavior) + * ``values`` : Order series by their current metric values (typically descending) + :type order_by: WidgetStyleOrderBy, optional + + :param palette: Color palette to apply to the widget. + :type palette: str, optional + """ + if line_type is not unset: + kwargs["line_type"] = line_type + if line_width is not unset: + kwargs["line_width"] = line_width + if order_by is not unset: + kwargs["order_by"] = order_by + if palette is not unset: + kwargs["palette"] = palette + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_service_summary_display_format.py b/datadog_api_client/v1/model/widget_service_summary_display_format.py new file mode 100644 index 0000000000..bcfd3fbd3c --- /dev/null +++ b/datadog_api_client/v1/model/widget_service_summary_display_format.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetServiceSummaryDisplayFormat(ModelSimple): + """ + Number of columns to display. + + :param value: Must be one of ["one_column", "two_column", "three_column"]. + :type value: str + """ + + allowed_values = { + "one_column", + "two_column", + "three_column", + } + ONE_COLUMN: ClassVar["WidgetServiceSummaryDisplayFormat"] + TWO_COLUMN: ClassVar["WidgetServiceSummaryDisplayFormat"] + THREE_COLUMN: ClassVar["WidgetServiceSummaryDisplayFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetServiceSummaryDisplayFormat.ONE_COLUMN = WidgetServiceSummaryDisplayFormat("one_column") +WidgetServiceSummaryDisplayFormat.TWO_COLUMN = WidgetServiceSummaryDisplayFormat("two_column") +WidgetServiceSummaryDisplayFormat.THREE_COLUMN = WidgetServiceSummaryDisplayFormat("three_column") diff --git a/datadog_api_client/v1/model/widget_size_format.py b/datadog_api_client/v1/model/widget_size_format.py new file mode 100644 index 0000000000..cb280e8c81 --- /dev/null +++ b/datadog_api_client/v1/model/widget_size_format.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetSizeFormat(ModelSimple): + """ + Size of the widget. + + :param value: Must be one of ["small", "medium", "large"]. + :type value: str + """ + + allowed_values = { + "small", + "medium", + "large", + } + SMALL: ClassVar["WidgetSizeFormat"] + MEDIUM: ClassVar["WidgetSizeFormat"] + LARGE: ClassVar["WidgetSizeFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetSizeFormat.SMALL = WidgetSizeFormat("small") +WidgetSizeFormat.MEDIUM = WidgetSizeFormat("medium") +WidgetSizeFormat.LARGE = WidgetSizeFormat("large") diff --git a/datadog_api_client/v1/model/widget_sort.py b/datadog_api_client/v1/model/widget_sort.py new file mode 100644 index 0000000000..861a90e91d --- /dev/null +++ b/datadog_api_client/v1/model/widget_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetSort(ModelSimple): + """ + Widget sorting methods. + + :param value: Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + ASCENDING: ClassVar["WidgetSort"] + DESCENDING: ClassVar["WidgetSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetSort.ASCENDING = WidgetSort("asc") +WidgetSort.DESCENDING = WidgetSort("desc") diff --git a/datadog_api_client/v1/model/widget_sort_by.py b/datadog_api_client/v1/model/widget_sort_by.py new file mode 100644 index 0000000000..57098a9e9e --- /dev/null +++ b/datadog_api_client/v1/model/widget_sort_by.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_sort_order_by import WidgetSortOrderBy + from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + +class WidgetSortBy(ModelNormal): + validations = { + "count": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_sort_order_by import WidgetSortOrderBy + return { + "count": (int,), + "order_by": ([WidgetSortOrderBy],), + } + attribute_map = { + "count": "count", + "order_by": "order_by", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, order_by: Union[List[Union[WidgetSortOrderBy, WidgetFormulaSort, WidgetGroupSort]], UnsetType]=unset, **kwargs): + """ + The controls for sorting the widget. + + :param count: The number of items to limit the widget to. + :type count: int, optional + + :param order_by: The array of items to sort the widget by in order. + :type order_by: [WidgetSortOrderBy], optional + """ + if count is not unset: + kwargs["count"] = count + if order_by is not unset: + kwargs["order_by"] = order_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_sort_order_by.py b/datadog_api_client/v1/model/widget_sort_order_by.py new file mode 100644 index 0000000000..67f2be1ba6 --- /dev/null +++ b/datadog_api_client/v1/model/widget_sort_order_by.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetSortOrderBy(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The item to sort the widget by. + + :param index: The index of the formula to sort by. + :type index: int + + :param order: Widget sorting methods. + :type order: WidgetSort + + :param type: Set the sort type to formula. + :type type: FormulaType + + :param name: The name of the group. + :type name: str + """ + 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.v1.model.widget_formula_sort import WidgetFormulaSort + from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort + return { + "oneOf": [ + WidgetFormulaSort, + WidgetGroupSort, + ], + } diff --git a/datadog_api_client/v1/model/widget_style.py b/datadog_api_client/v1/model/widget_style.py new file mode 100644 index 0000000000..1d8ecafe07 --- /dev/null +++ b/datadog_api_client/v1/model/widget_style.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetStyle(ModelNormal): + @cached_property + def openapi_types(_): + return { + "palette": (str,), + } + attribute_map = { + "palette": "palette", + } + + def __init__(self_, palette: Union[str, UnsetType]=unset, **kwargs): + """ + Widget style definition. + + :param palette: Color palette to apply to the widget. + :type palette: str, optional + """ + if palette is not unset: + kwargs["palette"] = palette + super().__init__(kwargs) + + diff --git a/datadog_api_client/v1/model/widget_style_order_by.py b/datadog_api_client/v1/model/widget_style_order_by.py new file mode 100644 index 0000000000..203bdb01d2 --- /dev/null +++ b/datadog_api_client/v1/model/widget_style_order_by.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetStyleOrderBy(ModelSimple): + """ + How to order series in timeseries visualizations. + - `tags`: Order series alphabetically by tag name (default behavior) + - `values`: Order series by their current metric values (typically descending) + + :param value: Must be one of ["tags", "values"]. + :type value: str + """ + + allowed_values = { + "tags", + "values", + } + TAGS: ClassVar["WidgetStyleOrderBy"] + VALUES: ClassVar["WidgetStyleOrderBy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetStyleOrderBy.TAGS = WidgetStyleOrderBy("tags") +WidgetStyleOrderBy.VALUES = WidgetStyleOrderBy("values") diff --git a/datadog_api_client/v1/model/widget_summary_type.py b/datadog_api_client/v1/model/widget_summary_type.py new file mode 100644 index 0000000000..2f9b810035 --- /dev/null +++ b/datadog_api_client/v1/model/widget_summary_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetSummaryType(ModelSimple): + """ + Which summary type should be used. + + :param value: Must be one of ["monitors", "groups", "combined"]. + :type value: str + """ + + allowed_values = { + "monitors", + "groups", + "combined", + } + MONITORS: ClassVar["WidgetSummaryType"] + GROUPS: ClassVar["WidgetSummaryType"] + COMBINED: ClassVar["WidgetSummaryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetSummaryType.MONITORS = WidgetSummaryType("monitors") +WidgetSummaryType.GROUPS = WidgetSummaryType("groups") +WidgetSummaryType.COMBINED = WidgetSummaryType("combined") diff --git a/datadog_api_client/v1/model/widget_text_align.py b/datadog_api_client/v1/model/widget_text_align.py new file mode 100644 index 0000000000..ceabd77d79 --- /dev/null +++ b/datadog_api_client/v1/model/widget_text_align.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetTextAlign(ModelSimple): + """ + How to align the text on the widget. + + :param value: Must be one of ["center", "left", "right"]. + :type value: str + """ + + allowed_values = { + "center", + "left", + "right", + } + CENTER: ClassVar["WidgetTextAlign"] + LEFT: ClassVar["WidgetTextAlign"] + RIGHT: ClassVar["WidgetTextAlign"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetTextAlign.CENTER = WidgetTextAlign("center") +WidgetTextAlign.LEFT = WidgetTextAlign("left") +WidgetTextAlign.RIGHT = WidgetTextAlign("right") diff --git a/datadog_api_client/v1/model/widget_tick_edge.py b/datadog_api_client/v1/model/widget_tick_edge.py new file mode 100644 index 0000000000..c033e829d9 --- /dev/null +++ b/datadog_api_client/v1/model/widget_tick_edge.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetTickEdge(ModelSimple): + """ + Define how you want to align the text on the widget. + + :param value: Must be one of ["bottom", "left", "right", "top"]. + :type value: str + """ + + allowed_values = { + "bottom", + "left", + "right", + "top", + } + BOTTOM: ClassVar["WidgetTickEdge"] + LEFT: ClassVar["WidgetTickEdge"] + RIGHT: ClassVar["WidgetTickEdge"] + TOP: ClassVar["WidgetTickEdge"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetTickEdge.BOTTOM = WidgetTickEdge("bottom") +WidgetTickEdge.LEFT = WidgetTickEdge("left") +WidgetTickEdge.RIGHT = WidgetTickEdge("right") +WidgetTickEdge.TOP = WidgetTickEdge("top") diff --git a/datadog_api_client/v1/model/widget_time.py b/datadog_api_client/v1/model/widget_time.py new file mode 100644 index 0000000000..3f17fa9bdb --- /dev/null +++ b/datadog_api_client/v1/model/widget_time.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetTime(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Time setting for the widget. + + :param hide_incomplete_cost_data: Whether to hide incomplete cost data in the widget. + :type hide_incomplete_cost_data: bool, optional + + :param live_span: The available timeframes depend on the widget you are using. + :type live_span: WidgetLiveSpan, optional + + :param type: Type "live" denotes a live span in the new format. + :type type: WidgetNewLiveSpanType + + :param unit: Unit of the time span. + :type unit: WidgetLiveSpanUnit + + :param value: Value of the time span. + :type value: int + + :param _from: Start time in milliseconds since epoch. + :type _from: int + + :param to: End time in milliseconds since epoch. + :type to: int + """ + 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.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + return { + "oneOf": [ + WidgetLegacyLiveSpan, + WidgetNewLiveSpan, + WidgetNewFixedSpan, + ], + } diff --git a/datadog_api_client/v1/model/widget_time_windows.py b/datadog_api_client/v1/model/widget_time_windows.py new file mode 100644 index 0000000000..c22fed1175 --- /dev/null +++ b/datadog_api_client/v1/model/widget_time_windows.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetTimeWindows(ModelSimple): + """ + Define a time window. + + :param value: Must be one of ["7d", "30d", "90d", "week_to_date", "previous_week", "month_to_date", "previous_month", "global_time"]. + :type value: str + """ + + allowed_values = { + "7d", + "30d", + "90d", + "week_to_date", + "previous_week", + "month_to_date", + "previous_month", + "global_time", + } + SEVEN_DAYS: ClassVar["WidgetTimeWindows"] + THIRTY_DAYS: ClassVar["WidgetTimeWindows"] + NINETY_DAYS: ClassVar["WidgetTimeWindows"] + WEEK_TO_DATE: ClassVar["WidgetTimeWindows"] + PREVIOUS_WEEK: ClassVar["WidgetTimeWindows"] + MONTH_TO_DATE: ClassVar["WidgetTimeWindows"] + PREVIOUS_MONTH: ClassVar["WidgetTimeWindows"] + GLOBAL_TIME: ClassVar["WidgetTimeWindows"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetTimeWindows.SEVEN_DAYS = WidgetTimeWindows("7d") +WidgetTimeWindows.THIRTY_DAYS = WidgetTimeWindows("30d") +WidgetTimeWindows.NINETY_DAYS = WidgetTimeWindows("90d") +WidgetTimeWindows.WEEK_TO_DATE = WidgetTimeWindows("week_to_date") +WidgetTimeWindows.PREVIOUS_WEEK = WidgetTimeWindows("previous_week") +WidgetTimeWindows.MONTH_TO_DATE = WidgetTimeWindows("month_to_date") +WidgetTimeWindows.PREVIOUS_MONTH = WidgetTimeWindows("previous_month") +WidgetTimeWindows.GLOBAL_TIME = WidgetTimeWindows("global_time") diff --git a/datadog_api_client/v1/model/widget_vertical_align.py b/datadog_api_client/v1/model/widget_vertical_align.py new file mode 100644 index 0000000000..33de6fd9b6 --- /dev/null +++ b/datadog_api_client/v1/model/widget_vertical_align.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetVerticalAlign(ModelSimple): + """ + Vertical alignment. + + :param value: Must be one of ["center", "top", "bottom"]. + :type value: str + """ + + allowed_values = { + "center", + "top", + "bottom", + } + CENTER: ClassVar["WidgetVerticalAlign"] + TOP: ClassVar["WidgetVerticalAlign"] + BOTTOM: ClassVar["WidgetVerticalAlign"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetVerticalAlign.CENTER = WidgetVerticalAlign("center") +WidgetVerticalAlign.TOP = WidgetVerticalAlign("top") +WidgetVerticalAlign.BOTTOM = WidgetVerticalAlign("bottom") diff --git a/datadog_api_client/v1/model/widget_view_mode.py b/datadog_api_client/v1/model/widget_view_mode.py new file mode 100644 index 0000000000..e1f7d9139b --- /dev/null +++ b/datadog_api_client/v1/model/widget_view_mode.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetViewMode(ModelSimple): + """ + Define how you want the SLO to be displayed. + + :param value: Must be one of ["overall", "component", "both"]. + :type value: str + """ + + allowed_values = { + "overall", + "component", + "both", + } + OVERALL: ClassVar["WidgetViewMode"] + COMPONENT: ClassVar["WidgetViewMode"] + BOTH: ClassVar["WidgetViewMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetViewMode.OVERALL = WidgetViewMode("overall") +WidgetViewMode.COMPONENT = WidgetViewMode("component") +WidgetViewMode.BOTH = WidgetViewMode("both") diff --git a/datadog_api_client/v1/model/widget_viz_type.py b/datadog_api_client/v1/model/widget_viz_type.py new file mode 100644 index 0000000000..9bce017cfc --- /dev/null +++ b/datadog_api_client/v1/model/widget_viz_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetVizType(ModelSimple): + """ + Whether to display the Alert Graph as a timeseries or a top list. + + :param value: Must be one of ["timeseries", "toplist"]. + :type value: str + """ + + allowed_values = { + "timeseries", + "toplist", + } + TIMESERIES: ClassVar["WidgetVizType"] + TOPLIST: ClassVar["WidgetVizType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetVizType.TIMESERIES = WidgetVizType("timeseries") +WidgetVizType.TOPLIST = WidgetVizType("toplist") diff --git a/datadog_api_client/v1/model/wildcard_widget_definition.py b/datadog_api_client/v1/model/wildcard_widget_definition.py new file mode 100644 index 0000000000..d3ba4ff072 --- /dev/null +++ b/datadog_api_client/v1/model/wildcard_widget_definition.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.wildcard_widget_request import WildcardWidgetRequest + from datadog_api_client.v1.model.wildcard_widget_specification import WildcardWidgetSpecification + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.wildcard_widget_definition_type import WildcardWidgetDefinitionType + from datadog_api_client.v1.model.tree_map_widget_request import TreeMapWidgetRequest + from datadog_api_client.v1.model.timeseries_widget_request import TimeseriesWidgetRequest + from datadog_api_client.v1.model.list_stream_widget_request import ListStreamWidgetRequest + from datadog_api_client.v1.model.distribution_widget_request import DistributionWidgetRequest + from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan + from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan + from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan + +class WildcardWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink + from datadog_api_client.v1.model.wildcard_widget_request import WildcardWidgetRequest + from datadog_api_client.v1.model.wildcard_widget_specification import WildcardWidgetSpecification + from datadog_api_client.v1.model.widget_time import WidgetTime + from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign + from datadog_api_client.v1.model.wildcard_widget_definition_type import WildcardWidgetDefinitionType + return { + "custom_links": ([WidgetCustomLink],), + "requests": ([WildcardWidgetRequest],), + "specification": (WildcardWidgetSpecification,), + "time": (WidgetTime,), + "title": (str,), + "title_align": (WidgetTextAlign,), + "title_size": (str,), + "type": (WildcardWidgetDefinitionType,), + } + attribute_map = { + "custom_links": "custom_links", + "requests": "requests", + "specification": "specification", + "time": "time", + "title": "title", + "title_align": "title_align", + "title_size": "title_size", + "type": "type", + } + + def __init__(self_, requests: List[Union[WildcardWidgetRequest, TreeMapWidgetRequest, TimeseriesWidgetRequest, ListStreamWidgetRequest, DistributionWidgetRequest]], specification: WildcardWidgetSpecification, type: WildcardWidgetDefinitionType, custom_links: Union[List[WidgetCustomLink], UnsetType]=unset, time: Union[WidgetTime, WidgetLegacyLiveSpan, WidgetNewLiveSpan, WidgetNewFixedSpan, UnsetType]=unset, title: Union[str, UnsetType]=unset, title_align: Union[WidgetTextAlign, UnsetType]=unset, title_size: Union[str, UnsetType]=unset, **kwargs): + """ + Custom visualization widget using Vega or Vega-Lite specifications. Combines standard Datadog data requests with a Vega or Vega-Lite JSON specification for flexible, custom visualizations. + + :param custom_links: List of custom links. + :type custom_links: [WidgetCustomLink], optional + + :param requests: List of data requests for the wildcard widget. + :type requests: [WildcardWidgetRequest] + + :param specification: Vega or Vega-Lite specification for custom visualization rendering. See https://vega.github.io/vega-lite/ for the full grammar reference. + :type specification: WildcardWidgetSpecification + + :param time: Time setting for the widget. + :type time: WidgetTime, optional + + :param title: Title of the widget. + :type title: str, optional + + :param title_align: How to align the text on the widget. + :type title_align: WidgetTextAlign, optional + + :param title_size: Size of the title. + :type title_size: str, optional + + :param type: Type of the wildcard widget. + :type type: WildcardWidgetDefinitionType + """ + if custom_links is not unset: + kwargs["custom_links"] = custom_links + if time is not unset: + kwargs["time"] = time + if title is not unset: + kwargs["title"] = title + if title_align is not unset: + kwargs["title_align"] = title_align + if title_size is not unset: + kwargs["title_size"] = title_size + super().__init__(kwargs) + + + self_.requests = requests + self_.specification = specification + self_.type = type diff --git a/datadog_api_client/v1/model/wildcard_widget_definition_type.py b/datadog_api_client/v1/model/wildcard_widget_definition_type.py new file mode 100644 index 0000000000..e363c1939a --- /dev/null +++ b/datadog_api_client/v1/model/wildcard_widget_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WildcardWidgetDefinitionType(ModelSimple): + """ + Type of the wildcard widget. + + :param value: If omitted defaults to "wildcard". Must be one of ["wildcard"]. + :type value: str + """ + + allowed_values = { + "wildcard", + } + WILDCARD: ClassVar["WildcardWidgetDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WildcardWidgetDefinitionType.WILDCARD = WildcardWidgetDefinitionType("wildcard") diff --git a/datadog_api_client/v1/model/wildcard_widget_request.py b/datadog_api_client/v1/model/wildcard_widget_request.py new file mode 100644 index 0000000000..6ce5b7e053 --- /dev/null +++ b/datadog_api_client/v1/model/wildcard_widget_request.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WildcardWidgetRequest(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Request object for the wildcard widget. Each variant represents a distinct data-fetching pattern: scalar formulas, timeseries formulas, list streams, and histograms. + + :param formulas: List of formulas that operate on queries. + :type formulas: [WidgetFormula], optional + + :param q: The widget metrics query. Deprecated - Use `queries` and `formulas` instead. + :type q: str, optional + + :param queries: List of queries that can be returned directly or used in formulas. + :type queries: [FormulaAndFunctionQueryDefinition], optional + + :param response_format: Timeseries, scalar, or event list response. Event list response formats are supported by Geomap widgets. + :type response_format: FormulaAndFunctionResponseFormat, optional + + :param sort: The controls for sorting the widget. + :type sort: WidgetSortBy, optional + + :param style: Define request widget style. + :type style: WidgetRequestStyle, optional + + :param apm_query: The log query. + :type apm_query: LogQueryDefinition, optional + + :param audit_query: The log query. + :type audit_query: LogQueryDefinition, optional + + :param display_type: Type of display to use for the request. + :type display_type: WidgetDisplayType, optional + + :param event_query: The log query. + :type event_query: LogQueryDefinition, optional + + :param log_query: The log query. + :type log_query: LogQueryDefinition, optional + + :param metadata: Used to define expression aliases. + :type metadata: [TimeseriesWidgetExpressionAlias], optional + + :param network_query: The log query. + :type network_query: LogQueryDefinition, optional + + :param on_right_yaxis: Whether or not to display a second y-axis on the right. + :type on_right_yaxis: bool, optional + + :param process_query: The process query to use in the widget. + :type process_query: ProcessQueryDefinition, optional + + :param profile_metrics_query: The log query. + :type profile_metrics_query: LogQueryDefinition, optional + + :param rum_query: The log query. + :type rum_query: LogQueryDefinition, optional + + :param security_query: The log query. + :type security_query: LogQueryDefinition, optional + + :param columns: Widget columns. + :type columns: [ListStreamColumn] + + :param query: Updated list stream widget. + :type query: ListStreamQuery + + :param apm_stats_query: The APM stats query for table and distributions widgets. + :type apm_stats_query: ApmStatsQueryDefinition, optional + + :param request_type: Request type for distribution of point values for distribution metrics. Query space aggregator must be `histogram:` for points distributions. + :type request_type: WidgetHistogramRequestType, 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.v1.model.tree_map_widget_request import TreeMapWidgetRequest + from datadog_api_client.v1.model.timeseries_widget_request import TimeseriesWidgetRequest + from datadog_api_client.v1.model.list_stream_widget_request import ListStreamWidgetRequest + from datadog_api_client.v1.model.distribution_widget_request import DistributionWidgetRequest + return { + "oneOf": [ + TreeMapWidgetRequest, + TimeseriesWidgetRequest, + ListStreamWidgetRequest, + DistributionWidgetRequest, + ], + } diff --git a/datadog_api_client/v1/model/wildcard_widget_specification.py b/datadog_api_client/v1/model/wildcard_widget_specification.py new file mode 100644 index 0000000000..ad1d40273e --- /dev/null +++ b/datadog_api_client/v1/model/wildcard_widget_specification.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.wildcard_widget_specification_type import WildcardWidgetSpecificationType + +class WildcardWidgetSpecification(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.wildcard_widget_specification_type import WildcardWidgetSpecificationType + return { + "contents": (dict,), + "type": (WildcardWidgetSpecificationType,), + } + attribute_map = { + "contents": "contents", + "type": "type", + } + + def __init__(self_, contents: dict, type: WildcardWidgetSpecificationType, **kwargs): + """ + Vega or Vega-Lite specification for custom visualization rendering. See https://vega.github.io/vega-lite/ for the full grammar reference. + + :param contents: The Vega or Vega-Lite JSON specification object. + :type contents: dict + + :param type: Type of specification used by the wildcard widget. + :type type: WildcardWidgetSpecificationType + """ + super().__init__(kwargs) + + + self_.contents = contents + self_.type = type diff --git a/datadog_api_client/v1/model/wildcard_widget_specification_type.py b/datadog_api_client/v1/model/wildcard_widget_specification_type.py new file mode 100644 index 0000000000..bdc753699c --- /dev/null +++ b/datadog_api_client/v1/model/wildcard_widget_specification_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WildcardWidgetSpecificationType(ModelSimple): + """ + Type of specification used by the wildcard widget. + + :param value: Must be one of ["vega", "vega-lite"]. + :type value: str + """ + + allowed_values = { + "vega", + "vega-lite", + } + VEGA: ClassVar["WildcardWidgetSpecificationType"] + VEGA_LITE: ClassVar["WildcardWidgetSpecificationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WildcardWidgetSpecificationType.VEGA = WildcardWidgetSpecificationType("vega") +WildcardWidgetSpecificationType.VEGA_LITE = WildcardWidgetSpecificationType("vega-lite") diff --git a/datadog_api_client/v1/models/__init__.py b/datadog_api_client/v1/models/__init__.py new file mode 100644 index 0000000000..5b6c106109 --- /dev/null +++ b/datadog_api_client/v1/models/__init__.py @@ -0,0 +1,2368 @@ + +from datadog_api_client.v1.model.api_error_response import APIErrorResponse +from datadog_api_client.v1.model.aws_account import AWSAccount +from datadog_api_client.v1.model.aws_account_and_lambda_request import AWSAccountAndLambdaRequest +from datadog_api_client.v1.model.aws_account_create_response import AWSAccountCreateResponse +from datadog_api_client.v1.model.aws_account_delete_request import AWSAccountDeleteRequest +from datadog_api_client.v1.model.aws_account_list_response import AWSAccountListResponse +from datadog_api_client.v1.model.aws_event_bridge_account_configuration import AWSEventBridgeAccountConfiguration +from datadog_api_client.v1.model.aws_event_bridge_create_request import AWSEventBridgeCreateRequest +from datadog_api_client.v1.model.aws_event_bridge_create_response import AWSEventBridgeCreateResponse +from datadog_api_client.v1.model.aws_event_bridge_create_status import AWSEventBridgeCreateStatus +from datadog_api_client.v1.model.aws_event_bridge_delete_request import AWSEventBridgeDeleteRequest +from datadog_api_client.v1.model.aws_event_bridge_delete_response import AWSEventBridgeDeleteResponse +from datadog_api_client.v1.model.aws_event_bridge_delete_status import AWSEventBridgeDeleteStatus +from datadog_api_client.v1.model.aws_event_bridge_list_response import AWSEventBridgeListResponse +from datadog_api_client.v1.model.aws_event_bridge_source import AWSEventBridgeSource +from datadog_api_client.v1.model.aws_logs_async_error import AWSLogsAsyncError +from datadog_api_client.v1.model.aws_logs_async_response import AWSLogsAsyncResponse +from datadog_api_client.v1.model.aws_logs_lambda import AWSLogsLambda +from datadog_api_client.v1.model.aws_logs_list_response import AWSLogsListResponse +from datadog_api_client.v1.model.aws_logs_list_services_response import AWSLogsListServicesResponse +from datadog_api_client.v1.model.aws_logs_services_request import AWSLogsServicesRequest +from datadog_api_client.v1.model.aws_namespace import AWSNamespace +from datadog_api_client.v1.model.aws_tag_filter import AWSTagFilter +from datadog_api_client.v1.model.aws_tag_filter_create_request import AWSTagFilterCreateRequest +from datadog_api_client.v1.model.aws_tag_filter_delete_request import AWSTagFilterDeleteRequest +from datadog_api_client.v1.model.aws_tag_filter_list_response import AWSTagFilterListResponse +from datadog_api_client.v1.model.access_role import AccessRole +from datadog_api_client.v1.model.add_signal_to_incident_request import AddSignalToIncidentRequest +from datadog_api_client.v1.model.agent_check import AgentCheck +from datadog_api_client.v1.model.alert_graph_widget_definition import AlertGraphWidgetDefinition +from datadog_api_client.v1.model.alert_graph_widget_definition_type import AlertGraphWidgetDefinitionType +from datadog_api_client.v1.model.alert_value_widget_definition import AlertValueWidgetDefinition +from datadog_api_client.v1.model.alert_value_widget_definition_type import AlertValueWidgetDefinitionType +from datadog_api_client.v1.model.api_key import ApiKey +from datadog_api_client.v1.model.api_key_list_response import ApiKeyListResponse +from datadog_api_client.v1.model.api_key_response import ApiKeyResponse +from datadog_api_client.v1.model.apm_stats_query_column_type import ApmStatsQueryColumnType +from datadog_api_client.v1.model.apm_stats_query_definition import ApmStatsQueryDefinition +from datadog_api_client.v1.model.apm_stats_query_row_type import ApmStatsQueryRowType +from datadog_api_client.v1.model.application_key import ApplicationKey +from datadog_api_client.v1.model.application_key_list_response import ApplicationKeyListResponse +from datadog_api_client.v1.model.application_key_response import ApplicationKeyResponse +from datadog_api_client.v1.model.authentication_validation_response import AuthenticationValidationResponse +from datadog_api_client.v1.model.azure_account import AzureAccount +from datadog_api_client.v1.model.azure_account_list_response import AzureAccountListResponse +from datadog_api_client.v1.model.bar_chart_widget_definition import BarChartWidgetDefinition +from datadog_api_client.v1.model.bar_chart_widget_definition_type import BarChartWidgetDefinitionType +from datadog_api_client.v1.model.bar_chart_widget_display import BarChartWidgetDisplay +from datadog_api_client.v1.model.bar_chart_widget_flat import BarChartWidgetFlat +from datadog_api_client.v1.model.bar_chart_widget_flat_type import BarChartWidgetFlatType +from datadog_api_client.v1.model.bar_chart_widget_legend import BarChartWidgetLegend +from datadog_api_client.v1.model.bar_chart_widget_request import BarChartWidgetRequest +from datadog_api_client.v1.model.bar_chart_widget_scaling import BarChartWidgetScaling +from datadog_api_client.v1.model.bar_chart_widget_stacked import BarChartWidgetStacked +from datadog_api_client.v1.model.bar_chart_widget_stacked_type import BarChartWidgetStackedType +from datadog_api_client.v1.model.bar_chart_widget_style import BarChartWidgetStyle +from datadog_api_client.v1.model.calendar_interval import CalendarInterval +from datadog_api_client.v1.model.calendar_interval_type import CalendarIntervalType +from datadog_api_client.v1.model.cancel_downtimes_by_scope_request import CancelDowntimesByScopeRequest +from datadog_api_client.v1.model.canceled_downtimes_ids import CanceledDowntimesIds +from datadog_api_client.v1.model.change_widget_definition import ChangeWidgetDefinition +from datadog_api_client.v1.model.change_widget_definition_type import ChangeWidgetDefinitionType +from datadog_api_client.v1.model.change_widget_request import ChangeWidgetRequest +from datadog_api_client.v1.model.check_can_delete_monitor_response import CheckCanDeleteMonitorResponse +from datadog_api_client.v1.model.check_can_delete_monitor_response_data import CheckCanDeleteMonitorResponseData +from datadog_api_client.v1.model.check_can_delete_slo_response import CheckCanDeleteSLOResponse +from datadog_api_client.v1.model.check_can_delete_slo_response_data import CheckCanDeleteSLOResponseData +from datadog_api_client.v1.model.check_status_widget_definition import CheckStatusWidgetDefinition +from datadog_api_client.v1.model.check_status_widget_definition_type import CheckStatusWidgetDefinitionType +from datadog_api_client.v1.model.cohort_widget_definition import CohortWidgetDefinition +from datadog_api_client.v1.model.cohort_widget_definition_type import CohortWidgetDefinitionType +from datadog_api_client.v1.model.comparison_custom_timeframe import ComparisonCustomTimeframe +from datadog_api_client.v1.model.comparison_duration import ComparisonDuration +from datadog_api_client.v1.model.comparison_duration_type import ComparisonDurationType +from datadog_api_client.v1.model.content_encoding import ContentEncoding +from datadog_api_client.v1.model.creator import Creator +from datadog_api_client.v1.model.dashboard import Dashboard +from datadog_api_client.v1.model.dashboard_bulk_action_data import DashboardBulkActionData +from datadog_api_client.v1.model.dashboard_bulk_action_data_list import DashboardBulkActionDataList +from datadog_api_client.v1.model.dashboard_bulk_delete_request import DashboardBulkDeleteRequest +from datadog_api_client.v1.model.dashboard_default_timeframe_setting import DashboardDefaultTimeframeSetting +from datadog_api_client.v1.model.dashboard_delete_response import DashboardDeleteResponse +from datadog_api_client.v1.model.dashboard_fixed_timeframe import DashboardFixedTimeframe +from datadog_api_client.v1.model.dashboard_fixed_timeframe_type import DashboardFixedTimeframeType +from datadog_api_client.v1.model.dashboard_global_time import DashboardGlobalTime +from datadog_api_client.v1.model.dashboard_global_time_live_span import DashboardGlobalTimeLiveSpan +from datadog_api_client.v1.model.dashboard_invite_type import DashboardInviteType +from datadog_api_client.v1.model.dashboard_layout_type import DashboardLayoutType +from datadog_api_client.v1.model.dashboard_list import DashboardList +from datadog_api_client.v1.model.dashboard_list_delete_response import DashboardListDeleteResponse +from datadog_api_client.v1.model.dashboard_list_list_response import DashboardListListResponse +from datadog_api_client.v1.model.dashboard_live_timeframe import DashboardLiveTimeframe +from datadog_api_client.v1.model.dashboard_live_timeframe_type import DashboardLiveTimeframeType +from datadog_api_client.v1.model.dashboard_reflow_type import DashboardReflowType +from datadog_api_client.v1.model.dashboard_resource_type import DashboardResourceType +from datadog_api_client.v1.model.dashboard_restore_request import DashboardRestoreRequest +from datadog_api_client.v1.model.dashboard_share_type import DashboardShareType +from datadog_api_client.v1.model.dashboard_summary import DashboardSummary +from datadog_api_client.v1.model.dashboard_summary_definition import DashboardSummaryDefinition +from datadog_api_client.v1.model.dashboard_tab import DashboardTab +from datadog_api_client.v1.model.dashboard_template_variable import DashboardTemplateVariable +from datadog_api_client.v1.model.dashboard_template_variable_preset import DashboardTemplateVariablePreset +from datadog_api_client.v1.model.dashboard_template_variable_preset_value import DashboardTemplateVariablePresetValue +from datadog_api_client.v1.model.dashboard_type import DashboardType +from datadog_api_client.v1.model.data_projection_query import DataProjectionQuery +from datadog_api_client.v1.model.data_projection_request_type import DataProjectionRequestType +from datadog_api_client.v1.model.dataset_list_query import DatasetListQuery +from datadog_api_client.v1.model.dataset_list_query_data_source_type import DatasetListQueryDataSourceType +from datadog_api_client.v1.model.dataset_list_query_sort import DatasetListQuerySort +from datadog_api_client.v1.model.dataset_list_query_sort_field import DatasetListQuerySortField +from datadog_api_client.v1.model.delete_shared_dashboard_response import DeleteSharedDashboardResponse +from datadog_api_client.v1.model.deleted_monitor import DeletedMonitor +from datadog_api_client.v1.model.distribution_point import DistributionPoint +from datadog_api_client.v1.model.distribution_points_content_encoding import DistributionPointsContentEncoding +from datadog_api_client.v1.model.distribution_points_payload import DistributionPointsPayload +from datadog_api_client.v1.model.distribution_points_series import DistributionPointsSeries +from datadog_api_client.v1.model.distribution_points_type import DistributionPointsType +from datadog_api_client.v1.model.distribution_widget_definition import DistributionWidgetDefinition +from datadog_api_client.v1.model.distribution_widget_definition_type import DistributionWidgetDefinitionType +from datadog_api_client.v1.model.distribution_widget_histogram_request_query import DistributionWidgetHistogramRequestQuery +from datadog_api_client.v1.model.distribution_widget_request import DistributionWidgetRequest +from datadog_api_client.v1.model.distribution_widget_x_axis import DistributionWidgetXAxis +from datadog_api_client.v1.model.distribution_widget_y_axis import DistributionWidgetYAxis +from datadog_api_client.v1.model.downtime import Downtime +from datadog_api_client.v1.model.downtime_child import DowntimeChild +from datadog_api_client.v1.model.downtime_recurrence import DowntimeRecurrence +from datadog_api_client.v1.model.event import Event +from datadog_api_client.v1.model.event_alert_type import EventAlertType +from datadog_api_client.v1.model.event_create_request import EventCreateRequest +from datadog_api_client.v1.model.event_create_response import EventCreateResponse +from datadog_api_client.v1.model.event_list_response import EventListResponse +from datadog_api_client.v1.model.event_priority import EventPriority +from datadog_api_client.v1.model.event_query_definition import EventQueryDefinition +from datadog_api_client.v1.model.event_response import EventResponse +from datadog_api_client.v1.model.event_stream_widget_definition import EventStreamWidgetDefinition +from datadog_api_client.v1.model.event_stream_widget_definition_type import EventStreamWidgetDefinitionType +from datadog_api_client.v1.model.event_timeline_widget_definition import EventTimelineWidgetDefinition +from datadog_api_client.v1.model.event_timeline_widget_definition_type import EventTimelineWidgetDefinitionType +from datadog_api_client.v1.model.events_aggregation import EventsAggregation +from datadog_api_client.v1.model.events_aggregation_value import EventsAggregationValue +from datadog_api_client.v1.model.formula_and_function_apm_dependency_stat_name import FormulaAndFunctionApmDependencyStatName +from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_data_source import FormulaAndFunctionApmDependencyStatsDataSource +from datadog_api_client.v1.model.formula_and_function_apm_dependency_stats_query_definition import FormulaAndFunctionApmDependencyStatsQueryDefinition +from datadog_api_client.v1.model.formula_and_function_apm_metric_stat_name import FormulaAndFunctionApmMetricStatName +from datadog_api_client.v1.model.formula_and_function_apm_metrics_data_source import FormulaAndFunctionApmMetricsDataSource +from datadog_api_client.v1.model.formula_and_function_apm_metrics_query_definition import FormulaAndFunctionApmMetricsQueryDefinition +from datadog_api_client.v1.model.formula_and_function_apm_metrics_span_kind import FormulaAndFunctionApmMetricsSpanKind +from datadog_api_client.v1.model.formula_and_function_apm_resource_stat_name import FormulaAndFunctionApmResourceStatName +from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_data_source import FormulaAndFunctionApmResourceStatsDataSource +from datadog_api_client.v1.model.formula_and_function_apm_resource_stats_query_definition import FormulaAndFunctionApmResourceStatsQueryDefinition +from datadog_api_client.v1.model.formula_and_function_cloud_cost_data_source import FormulaAndFunctionCloudCostDataSource +from datadog_api_client.v1.model.formula_and_function_cloud_cost_query_definition import FormulaAndFunctionCloudCostQueryDefinition +from datadog_api_client.v1.model.formula_and_function_event_aggregation import FormulaAndFunctionEventAggregation +from datadog_api_client.v1.model.formula_and_function_event_query_definition import FormulaAndFunctionEventQueryDefinition +from datadog_api_client.v1.model.formula_and_function_event_query_definition_compute import FormulaAndFunctionEventQueryDefinitionCompute +from datadog_api_client.v1.model.formula_and_function_event_query_definition_search import FormulaAndFunctionEventQueryDefinitionSearch +from datadog_api_client.v1.model.formula_and_function_event_query_group_by import FormulaAndFunctionEventQueryGroupBy +from datadog_api_client.v1.model.formula_and_function_event_query_group_by_config import FormulaAndFunctionEventQueryGroupByConfig +from datadog_api_client.v1.model.formula_and_function_event_query_group_by_fields import FormulaAndFunctionEventQueryGroupByFields +from datadog_api_client.v1.model.formula_and_function_event_query_group_by_sort import FormulaAndFunctionEventQueryGroupBySort +from datadog_api_client.v1.model.formula_and_function_events_data_source import FormulaAndFunctionEventsDataSource +from datadog_api_client.v1.model.formula_and_function_metric_aggregation import FormulaAndFunctionMetricAggregation +from datadog_api_client.v1.model.formula_and_function_metric_data_source import FormulaAndFunctionMetricDataSource +from datadog_api_client.v1.model.formula_and_function_metric_query_definition import FormulaAndFunctionMetricQueryDefinition +from datadog_api_client.v1.model.formula_and_function_metric_semantic_mode import FormulaAndFunctionMetricSemanticMode +from datadog_api_client.v1.model.formula_and_function_process_query_data_source import FormulaAndFunctionProcessQueryDataSource +from datadog_api_client.v1.model.formula_and_function_process_query_definition import FormulaAndFunctionProcessQueryDefinition +from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_data_source import FormulaAndFunctionProductAnalyticsExtendedDataSource +from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition import FormulaAndFunctionProductAnalyticsExtendedQueryDefinition +from datadog_api_client.v1.model.formula_and_function_product_analytics_extended_query_definition_indexes_items import FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems +from datadog_api_client.v1.model.formula_and_function_query_definition import FormulaAndFunctionQueryDefinition +from datadog_api_client.v1.model.formula_and_function_response_format import FormulaAndFunctionResponseFormat +from datadog_api_client.v1.model.formula_and_function_retention_query_definition import FormulaAndFunctionRetentionQueryDefinition +from datadog_api_client.v1.model.formula_and_function_slo_data_source import FormulaAndFunctionSLODataSource +from datadog_api_client.v1.model.formula_and_function_slo_group_mode import FormulaAndFunctionSLOGroupMode +from datadog_api_client.v1.model.formula_and_function_slo_measure import FormulaAndFunctionSLOMeasure +from datadog_api_client.v1.model.formula_and_function_slo_query_definition import FormulaAndFunctionSLOQueryDefinition +from datadog_api_client.v1.model.formula_and_function_slo_query_type import FormulaAndFunctionSLOQueryType +from datadog_api_client.v1.model.formula_and_function_user_journey_query_definition import FormulaAndFunctionUserJourneyQueryDefinition +from datadog_api_client.v1.model.formula_type import FormulaType +from datadog_api_client.v1.model.free_text_widget_definition import FreeTextWidgetDefinition +from datadog_api_client.v1.model.free_text_widget_definition_type import FreeTextWidgetDefinitionType +from datadog_api_client.v1.model.funnel_comparison_custom_timeframe import FunnelComparisonCustomTimeframe +from datadog_api_client.v1.model.funnel_comparison_duration import FunnelComparisonDuration +from datadog_api_client.v1.model.funnel_comparison_duration_type import FunnelComparisonDurationType +from datadog_api_client.v1.model.funnel_grouped_display import FunnelGroupedDisplay +from datadog_api_client.v1.model.funnel_query import FunnelQuery +from datadog_api_client.v1.model.funnel_request_type import FunnelRequestType +from datadog_api_client.v1.model.funnel_source import FunnelSource +from datadog_api_client.v1.model.funnel_step import FunnelStep +from datadog_api_client.v1.model.funnel_widget_definition import FunnelWidgetDefinition +from datadog_api_client.v1.model.funnel_widget_definition_type import FunnelWidgetDefinitionType +from datadog_api_client.v1.model.funnel_widget_request import FunnelWidgetRequest +from datadog_api_client.v1.model.gcp_account import GCPAccount +from datadog_api_client.v1.model.gcp_account_list_response import GCPAccountListResponse +from datadog_api_client.v1.model.gcp_monitored_resource_config import GCPMonitoredResourceConfig +from datadog_api_client.v1.model.gcp_monitored_resource_config_type import GCPMonitoredResourceConfigType +from datadog_api_client.v1.model.geomap_widget_definition import GeomapWidgetDefinition +from datadog_api_client.v1.model.geomap_widget_definition_style import GeomapWidgetDefinitionStyle +from datadog_api_client.v1.model.geomap_widget_definition_type import GeomapWidgetDefinitionType +from datadog_api_client.v1.model.geomap_widget_definition_view import GeomapWidgetDefinitionView +from datadog_api_client.v1.model.geomap_widget_request import GeomapWidgetRequest +from datadog_api_client.v1.model.geomap_widget_request_style import GeomapWidgetRequestStyle +from datadog_api_client.v1.model.graph_snapshot import GraphSnapshot +from datadog_api_client.v1.model.group_type import GroupType +from datadog_api_client.v1.model.group_widget_definition import GroupWidgetDefinition +from datadog_api_client.v1.model.group_widget_definition_type import GroupWidgetDefinitionType +from datadog_api_client.v1.model.http_log import HTTPLog +from datadog_api_client.v1.model.http_log_error import HTTPLogError +from datadog_api_client.v1.model.http_log_item import HTTPLogItem +from datadog_api_client.v1.model.heat_map_widget_definition import HeatMapWidgetDefinition +from datadog_api_client.v1.model.heat_map_widget_definition_type import HeatMapWidgetDefinitionType +from datadog_api_client.v1.model.heat_map_widget_request import HeatMapWidgetRequest +from datadog_api_client.v1.model.heat_map_widget_x_axis import HeatMapWidgetXAxis +from datadog_api_client.v1.model.host import Host +from datadog_api_client.v1.model.host_list_response import HostListResponse +from datadog_api_client.v1.model.host_map_request import HostMapRequest +from datadog_api_client.v1.model.host_map_widget_definition import HostMapWidgetDefinition +from datadog_api_client.v1.model.host_map_widget_definition_request_type import HostMapWidgetDefinitionRequestType +from datadog_api_client.v1.model.host_map_widget_definition_requests import HostMapWidgetDefinitionRequests +from datadog_api_client.v1.model.host_map_widget_definition_style import HostMapWidgetDefinitionStyle +from datadog_api_client.v1.model.host_map_widget_definition_type import HostMapWidgetDefinitionType +from datadog_api_client.v1.model.host_map_widget_dimension import HostMapWidgetDimension +from datadog_api_client.v1.model.host_map_widget_formula import HostMapWidgetFormula +from datadog_api_client.v1.model.host_map_widget_group_by import HostMapWidgetGroupBy +from datadog_api_client.v1.model.host_map_widget_infrastructure_request import HostMapWidgetInfrastructureRequest +from datadog_api_client.v1.model.host_map_widget_infrastructure_request_leaf import HostMapWidgetInfrastructureRequestLeaf +from datadog_api_client.v1.model.host_map_widget_infrastructure_request_request_type import HostMapWidgetInfrastructureRequestRequestType +from datadog_api_client.v1.model.host_map_widget_infrastructure_style import HostMapWidgetInfrastructureStyle +from datadog_api_client.v1.model.host_map_widget_node_type import HostMapWidgetNodeType +from datadog_api_client.v1.model.host_map_widget_projection import HostMapWidgetProjection +from datadog_api_client.v1.model.host_map_widget_projection_dimension_mapping import HostMapWidgetProjectionDimensionMapping +from datadog_api_client.v1.model.host_map_widget_projection_type import HostMapWidgetProjectionType +from datadog_api_client.v1.model.host_map_widget_scalar_request import HostMapWidgetScalarRequest +from datadog_api_client.v1.model.host_map_widget_scalar_request_response_format import HostMapWidgetScalarRequestResponseFormat +from datadog_api_client.v1.model.host_meta import HostMeta +from datadog_api_client.v1.model.host_meta_install_method import HostMetaInstallMethod +from datadog_api_client.v1.model.host_metrics import HostMetrics +from datadog_api_client.v1.model.host_mute_response import HostMuteResponse +from datadog_api_client.v1.model.host_mute_settings import HostMuteSettings +from datadog_api_client.v1.model.host_tags import HostTags +from datadog_api_client.v1.model.host_totals import HostTotals +from datadog_api_client.v1.model.hourly_usage_attribution_body import HourlyUsageAttributionBody +from datadog_api_client.v1.model.hourly_usage_attribution_metadata import HourlyUsageAttributionMetadata +from datadog_api_client.v1.model.hourly_usage_attribution_pagination import HourlyUsageAttributionPagination +from datadog_api_client.v1.model.hourly_usage_attribution_response import HourlyUsageAttributionResponse +from datadog_api_client.v1.model.hourly_usage_attribution_usage_type import HourlyUsageAttributionUsageType +from datadog_api_client.v1.model.i_frame_widget_definition import IFrameWidgetDefinition +from datadog_api_client.v1.model.i_frame_widget_definition_type import IFrameWidgetDefinitionType +from datadog_api_client.v1.model.ip_prefixes_api import IPPrefixesAPI +from datadog_api_client.v1.model.ip_prefixes_apm import IPPrefixesAPM +from datadog_api_client.v1.model.ip_prefixes_agents import IPPrefixesAgents +from datadog_api_client.v1.model.ip_prefixes_global import IPPrefixesGlobal +from datadog_api_client.v1.model.ip_prefixes_logs import IPPrefixesLogs +from datadog_api_client.v1.model.ip_prefixes_orchestrator import IPPrefixesOrchestrator +from datadog_api_client.v1.model.ip_prefixes_process import IPPrefixesProcess +from datadog_api_client.v1.model.ip_prefixes_remote_configuration import IPPrefixesRemoteConfiguration +from datadog_api_client.v1.model.ip_prefixes_synthetics import IPPrefixesSynthetics +from datadog_api_client.v1.model.ip_prefixes_synthetics_private_locations import IPPrefixesSyntheticsPrivateLocations +from datadog_api_client.v1.model.ip_prefixes_webhooks import IPPrefixesWebhooks +from datadog_api_client.v1.model.ip_ranges import IPRanges +from datadog_api_client.v1.model.idp_form_data import IdpFormData +from datadog_api_client.v1.model.idp_response import IdpResponse +from datadog_api_client.v1.model.image_widget_definition import ImageWidgetDefinition +from datadog_api_client.v1.model.image_widget_definition_type import ImageWidgetDefinitionType +from datadog_api_client.v1.model.intake_payload_accepted import IntakePayloadAccepted +from datadog_api_client.v1.model.list_stream_column import ListStreamColumn +from datadog_api_client.v1.model.list_stream_column_width import ListStreamColumnWidth +from datadog_api_client.v1.model.list_stream_compute_aggregation import ListStreamComputeAggregation +from datadog_api_client.v1.model.list_stream_compute_items import ListStreamComputeItems +from datadog_api_client.v1.model.list_stream_group_by_items import ListStreamGroupByItems +from datadog_api_client.v1.model.list_stream_issue_persona import ListStreamIssuePersona +from datadog_api_client.v1.model.list_stream_issue_state import ListStreamIssueState +from datadog_api_client.v1.model.list_stream_query import ListStreamQuery +from datadog_api_client.v1.model.list_stream_query_version import ListStreamQueryVersion +from datadog_api_client.v1.model.list_stream_response_format import ListStreamResponseFormat +from datadog_api_client.v1.model.list_stream_source import ListStreamSource +from datadog_api_client.v1.model.list_stream_widget_definition import ListStreamWidgetDefinition +from datadog_api_client.v1.model.list_stream_widget_definition_type import ListStreamWidgetDefinitionType +from datadog_api_client.v1.model.list_stream_widget_request import ListStreamWidgetRequest +from datadog_api_client.v1.model.log import Log +from datadog_api_client.v1.model.log_content import LogContent +from datadog_api_client.v1.model.log_query_definition import LogQueryDefinition +from datadog_api_client.v1.model.log_query_definition_group_by import LogQueryDefinitionGroupBy +from datadog_api_client.v1.model.log_query_definition_group_by_sort import LogQueryDefinitionGroupBySort +from datadog_api_client.v1.model.log_query_definition_search import LogQueryDefinitionSearch +from datadog_api_client.v1.model.log_stream_widget_definition import LogStreamWidgetDefinition +from datadog_api_client.v1.model.log_stream_widget_definition_type import LogStreamWidgetDefinitionType +from datadog_api_client.v1.model.logs_api_error import LogsAPIError +from datadog_api_client.v1.model.logs_api_error_response import LogsAPIErrorResponse +from datadog_api_client.v1.model.logs_api_limit_reached_response import LogsAPILimitReachedResponse +from datadog_api_client.v1.model.logs_arithmetic_processor import LogsArithmeticProcessor +from datadog_api_client.v1.model.logs_arithmetic_processor_type import LogsArithmeticProcessorType +from datadog_api_client.v1.model.logs_array_map_arithmetic_sub_processor import LogsArrayMapArithmeticSubProcessor +from datadog_api_client.v1.model.logs_array_map_attribute_remapper import LogsArrayMapAttributeRemapper +from datadog_api_client.v1.model.logs_array_map_category_sub_processor import LogsArrayMapCategorySubProcessor +from datadog_api_client.v1.model.logs_array_map_processor import LogsArrayMapProcessor +from datadog_api_client.v1.model.logs_array_map_processor_type import LogsArrayMapProcessorType +from datadog_api_client.v1.model.logs_array_map_string_builder_sub_processor import LogsArrayMapStringBuilderSubProcessor +from datadog_api_client.v1.model.logs_array_map_sub_processor import LogsArrayMapSubProcessor +from datadog_api_client.v1.model.logs_array_processor import LogsArrayProcessor +from datadog_api_client.v1.model.logs_array_processor_operation import LogsArrayProcessorOperation +from datadog_api_client.v1.model.logs_array_processor_operation_append import LogsArrayProcessorOperationAppend +from datadog_api_client.v1.model.logs_array_processor_operation_append_type import LogsArrayProcessorOperationAppendType +from datadog_api_client.v1.model.logs_array_processor_operation_extract_key_value import LogsArrayProcessorOperationExtractKeyValue +from datadog_api_client.v1.model.logs_array_processor_operation_extract_key_value_type import LogsArrayProcessorOperationExtractKeyValueType +from datadog_api_client.v1.model.logs_array_processor_operation_length import LogsArrayProcessorOperationLength +from datadog_api_client.v1.model.logs_array_processor_operation_length_type import LogsArrayProcessorOperationLengthType +from datadog_api_client.v1.model.logs_array_processor_operation_select import LogsArrayProcessorOperationSelect +from datadog_api_client.v1.model.logs_array_processor_operation_select_type import LogsArrayProcessorOperationSelectType +from datadog_api_client.v1.model.logs_array_processor_type import LogsArrayProcessorType +from datadog_api_client.v1.model.logs_attribute_remapper import LogsAttributeRemapper +from datadog_api_client.v1.model.logs_attribute_remapper_type import LogsAttributeRemapperType +from datadog_api_client.v1.model.logs_by_retention import LogsByRetention +from datadog_api_client.v1.model.logs_by_retention_monthly_usage import LogsByRetentionMonthlyUsage +from datadog_api_client.v1.model.logs_by_retention_org_usage import LogsByRetentionOrgUsage +from datadog_api_client.v1.model.logs_by_retention_orgs import LogsByRetentionOrgs +from datadog_api_client.v1.model.logs_category_processor import LogsCategoryProcessor +from datadog_api_client.v1.model.logs_category_processor_category import LogsCategoryProcessorCategory +from datadog_api_client.v1.model.logs_category_processor_type import LogsCategoryProcessorType +from datadog_api_client.v1.model.logs_daily_limit_reset import LogsDailyLimitReset +from datadog_api_client.v1.model.logs_date_remapper import LogsDateRemapper +from datadog_api_client.v1.model.logs_date_remapper_type import LogsDateRemapperType +from datadog_api_client.v1.model.logs_decoder_processor import LogsDecoderProcessor +from datadog_api_client.v1.model.logs_decoder_processor_binary_to_text_encoding import LogsDecoderProcessorBinaryToTextEncoding +from datadog_api_client.v1.model.logs_decoder_processor_input_representation import LogsDecoderProcessorInputRepresentation +from datadog_api_client.v1.model.logs_decoder_processor_type import LogsDecoderProcessorType +from datadog_api_client.v1.model.logs_exclude_attribute_processor import LogsExcludeAttributeProcessor +from datadog_api_client.v1.model.logs_exclude_attribute_processor_type import LogsExcludeAttributeProcessorType +from datadog_api_client.v1.model.logs_exclusion import LogsExclusion +from datadog_api_client.v1.model.logs_exclusion_filter import LogsExclusionFilter +from datadog_api_client.v1.model.logs_filter import LogsFilter +from datadog_api_client.v1.model.logs_geo_ip_parser import LogsGeoIPParser +from datadog_api_client.v1.model.logs_geo_ip_parser_type import LogsGeoIPParserType +from datadog_api_client.v1.model.logs_grok_parser import LogsGrokParser +from datadog_api_client.v1.model.logs_grok_parser_rules import LogsGrokParserRules +from datadog_api_client.v1.model.logs_grok_parser_type import LogsGrokParserType +from datadog_api_client.v1.model.logs_index import LogsIndex +from datadog_api_client.v1.model.logs_index_list_response import LogsIndexListResponse +from datadog_api_client.v1.model.logs_index_update_request import LogsIndexUpdateRequest +from datadog_api_client.v1.model.logs_indexes_order import LogsIndexesOrder +from datadog_api_client.v1.model.logs_list_request import LogsListRequest +from datadog_api_client.v1.model.logs_list_request_time import LogsListRequestTime +from datadog_api_client.v1.model.logs_list_response import LogsListResponse +from datadog_api_client.v1.model.logs_lookup_processor import LogsLookupProcessor +from datadog_api_client.v1.model.logs_lookup_processor_type import LogsLookupProcessorType +from datadog_api_client.v1.model.logs_message_remapper import LogsMessageRemapper +from datadog_api_client.v1.model.logs_message_remapper_type import LogsMessageRemapperType +from datadog_api_client.v1.model.logs_pipeline import LogsPipeline +from datadog_api_client.v1.model.logs_pipeline_list import LogsPipelineList +from datadog_api_client.v1.model.logs_pipeline_processor import LogsPipelineProcessor +from datadog_api_client.v1.model.logs_pipeline_processor_type import LogsPipelineProcessorType +from datadog_api_client.v1.model.logs_pipelines_order import LogsPipelinesOrder +from datadog_api_client.v1.model.logs_processor import LogsProcessor +from datadog_api_client.v1.model.logs_query_compute import LogsQueryCompute +from datadog_api_client.v1.model.logs_retention_agg_sum_usage import LogsRetentionAggSumUsage +from datadog_api_client.v1.model.logs_retention_sum_usage import LogsRetentionSumUsage +from datadog_api_client.v1.model.logs_schema_category_mapper import LogsSchemaCategoryMapper +from datadog_api_client.v1.model.logs_schema_category_mapper_category import LogsSchemaCategoryMapperCategory +from datadog_api_client.v1.model.logs_schema_category_mapper_fallback import LogsSchemaCategoryMapperFallback +from datadog_api_client.v1.model.logs_schema_category_mapper_targets import LogsSchemaCategoryMapperTargets +from datadog_api_client.v1.model.logs_schema_category_mapper_type import LogsSchemaCategoryMapperType +from datadog_api_client.v1.model.logs_schema_data import LogsSchemaData +from datadog_api_client.v1.model.logs_schema_mapper import LogsSchemaMapper +from datadog_api_client.v1.model.logs_schema_processor import LogsSchemaProcessor +from datadog_api_client.v1.model.logs_schema_processor_type import LogsSchemaProcessorType +from datadog_api_client.v1.model.logs_schema_remapper import LogsSchemaRemapper +from datadog_api_client.v1.model.logs_schema_remapper_type import LogsSchemaRemapperType +from datadog_api_client.v1.model.logs_service_remapper import LogsServiceRemapper +from datadog_api_client.v1.model.logs_service_remapper_type import LogsServiceRemapperType +from datadog_api_client.v1.model.logs_sort import LogsSort +from datadog_api_client.v1.model.logs_span_remapper import LogsSpanRemapper +from datadog_api_client.v1.model.logs_span_remapper_type import LogsSpanRemapperType +from datadog_api_client.v1.model.logs_status_remapper import LogsStatusRemapper +from datadog_api_client.v1.model.logs_status_remapper_type import LogsStatusRemapperType +from datadog_api_client.v1.model.logs_string_builder_processor import LogsStringBuilderProcessor +from datadog_api_client.v1.model.logs_string_builder_processor_type import LogsStringBuilderProcessorType +from datadog_api_client.v1.model.logs_trace_remapper import LogsTraceRemapper +from datadog_api_client.v1.model.logs_trace_remapper_type import LogsTraceRemapperType +from datadog_api_client.v1.model.logs_url_parser import LogsURLParser +from datadog_api_client.v1.model.logs_url_parser_type import LogsURLParserType +from datadog_api_client.v1.model.logs_user_agent_parser import LogsUserAgentParser +from datadog_api_client.v1.model.logs_user_agent_parser_type import LogsUserAgentParserType +from datadog_api_client.v1.model.matching_downtime import MatchingDowntime +from datadog_api_client.v1.model.metric_content_encoding import MetricContentEncoding +from datadog_api_client.v1.model.metric_metadata import MetricMetadata +from datadog_api_client.v1.model.metric_search_response import MetricSearchResponse +from datadog_api_client.v1.model.metric_search_response_results import MetricSearchResponseResults +from datadog_api_client.v1.model.metrics_list_response import MetricsListResponse +from datadog_api_client.v1.model.metrics_payload import MetricsPayload +from datadog_api_client.v1.model.metrics_query_metadata import MetricsQueryMetadata +from datadog_api_client.v1.model.metrics_query_response import MetricsQueryResponse +from datadog_api_client.v1.model.metrics_query_unit import MetricsQueryUnit +from datadog_api_client.v1.model.monitor import Monitor +from datadog_api_client.v1.model.monitor_asset import MonitorAsset +from datadog_api_client.v1.model.monitor_asset_category import MonitorAssetCategory +from datadog_api_client.v1.model.monitor_asset_resource_type import MonitorAssetResourceType +from datadog_api_client.v1.model.monitor_device_id import MonitorDeviceID +from datadog_api_client.v1.model.monitor_draft_status import MonitorDraftStatus +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_augment_query import MonitorFormulaAndFunctionAggregateAugmentQuery +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_augmented_data_source import MonitorFormulaAndFunctionAggregateAugmentedDataSource +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_augmented_query_definition import MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_base_query import MonitorFormulaAndFunctionAggregateBaseQuery +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filter_query import MonitorFormulaAndFunctionAggregateFilterQuery +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filtered_data_source import MonitorFormulaAndFunctionAggregateFilteredDataSource +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_filtered_query_definition import MonitorFormulaAndFunctionAggregateFilteredQueryDefinition +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_query_filter import MonitorFormulaAndFunctionAggregateQueryFilter +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_query_join_condition import MonitorFormulaAndFunctionAggregateQueryJoinCondition +from datadog_api_client.v1.model.monitor_formula_and_function_aggregate_query_join_type import MonitorFormulaAndFunctionAggregateQueryJoinType +from datadog_api_client.v1.model.monitor_formula_and_function_cost_aggregator import MonitorFormulaAndFunctionCostAggregator +from datadog_api_client.v1.model.monitor_formula_and_function_cost_data_source import MonitorFormulaAndFunctionCostDataSource +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 +from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_model_type_override import MonitorFormulaAndFunctionDataQualityModelTypeOverride +from datadog_api_client.v1.model.monitor_formula_and_function_data_quality_monitor_options import MonitorFormulaAndFunctionDataQualityMonitorOptions +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_event_aggregation import MonitorFormulaAndFunctionEventAggregation +from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition import MonitorFormulaAndFunctionEventQueryDefinition +from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_compute import MonitorFormulaAndFunctionEventQueryDefinitionCompute +from datadog_api_client.v1.model.monitor_formula_and_function_event_query_definition_search import MonitorFormulaAndFunctionEventQueryDefinitionSearch +from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by import MonitorFormulaAndFunctionEventQueryGroupBy +from datadog_api_client.v1.model.monitor_formula_and_function_event_query_group_by_sort import MonitorFormulaAndFunctionEventQueryGroupBySort +from datadog_api_client.v1.model.monitor_formula_and_function_events_data_source import MonitorFormulaAndFunctionEventsDataSource +from datadog_api_client.v1.model.monitor_formula_and_function_metrics_aggregator import MonitorFormulaAndFunctionMetricsAggregator +from datadog_api_client.v1.model.monitor_formula_and_function_metrics_data_source import MonitorFormulaAndFunctionMetricsDataSource +from datadog_api_client.v1.model.monitor_formula_and_function_metrics_query_definition import MonitorFormulaAndFunctionMetricsQueryDefinition +from datadog_api_client.v1.model.monitor_formula_and_function_query_definition import MonitorFormulaAndFunctionQueryDefinition +from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_column import MonitorFormulaAndFunctionReferenceTableColumn +from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_data_source import MonitorFormulaAndFunctionReferenceTableDataSource +from datadog_api_client.v1.model.monitor_formula_and_function_reference_table_query_definition import MonitorFormulaAndFunctionReferenceTableQueryDefinition +from datadog_api_client.v1.model.monitor_group_search_response import MonitorGroupSearchResponse +from datadog_api_client.v1.model.monitor_group_search_response_counts import MonitorGroupSearchResponseCounts +from datadog_api_client.v1.model.monitor_group_search_result import MonitorGroupSearchResult +from datadog_api_client.v1.model.monitor_options import MonitorOptions +from datadog_api_client.v1.model.monitor_options_aggregation import MonitorOptionsAggregation +from datadog_api_client.v1.model.monitor_options_custom_schedule import MonitorOptionsCustomSchedule +from datadog_api_client.v1.model.monitor_options_custom_schedule_recurrence import MonitorOptionsCustomScheduleRecurrence +from datadog_api_client.v1.model.monitor_options_notification_presets import MonitorOptionsNotificationPresets +from datadog_api_client.v1.model.monitor_options_scheduling_options import MonitorOptionsSchedulingOptions +from datadog_api_client.v1.model.monitor_options_scheduling_options_evaluation_window import MonitorOptionsSchedulingOptionsEvaluationWindow +from datadog_api_client.v1.model.monitor_overall_states import MonitorOverallStates +from datadog_api_client.v1.model.monitor_renotify_status_type import MonitorRenotifyStatusType +from datadog_api_client.v1.model.monitor_search_count import MonitorSearchCount +from datadog_api_client.v1.model.monitor_search_count_item import MonitorSearchCountItem +from datadog_api_client.v1.model.monitor_search_response import MonitorSearchResponse +from datadog_api_client.v1.model.monitor_search_response_counts import MonitorSearchResponseCounts +from datadog_api_client.v1.model.monitor_search_response_metadata import MonitorSearchResponseMetadata +from datadog_api_client.v1.model.monitor_search_result import MonitorSearchResult +from datadog_api_client.v1.model.monitor_search_result_notification import MonitorSearchResultNotification +from datadog_api_client.v1.model.monitor_state import MonitorState +from datadog_api_client.v1.model.monitor_state_group import MonitorStateGroup +from datadog_api_client.v1.model.monitor_summary_widget_definition import MonitorSummaryWidgetDefinition +from datadog_api_client.v1.model.monitor_summary_widget_definition_type import MonitorSummaryWidgetDefinitionType +from datadog_api_client.v1.model.monitor_threshold_window_options import MonitorThresholdWindowOptions +from datadog_api_client.v1.model.monitor_thresholds import MonitorThresholds +from datadog_api_client.v1.model.monitor_type import MonitorType +from datadog_api_client.v1.model.monitor_update_request import MonitorUpdateRequest +from datadog_api_client.v1.model.monthly_usage_attribution_body import MonthlyUsageAttributionBody +from datadog_api_client.v1.model.monthly_usage_attribution_metadata import MonthlyUsageAttributionMetadata +from datadog_api_client.v1.model.monthly_usage_attribution_pagination import MonthlyUsageAttributionPagination +from datadog_api_client.v1.model.monthly_usage_attribution_response import MonthlyUsageAttributionResponse +from datadog_api_client.v1.model.monthly_usage_attribution_supported_metrics import MonthlyUsageAttributionSupportedMetrics +from datadog_api_client.v1.model.monthly_usage_attribution_values import MonthlyUsageAttributionValues +from datadog_api_client.v1.model.note_widget_definition import NoteWidgetDefinition +from datadog_api_client.v1.model.note_widget_definition_type import NoteWidgetDefinitionType +from datadog_api_client.v1.model.notebook_absolute_time import NotebookAbsoluteTime +from datadog_api_client.v1.model.notebook_author import NotebookAuthor +from datadog_api_client.v1.model.notebook_cell_create_request import NotebookCellCreateRequest +from datadog_api_client.v1.model.notebook_cell_create_request_attributes import NotebookCellCreateRequestAttributes +from datadog_api_client.v1.model.notebook_cell_resource_type import NotebookCellResourceType +from datadog_api_client.v1.model.notebook_cell_response import NotebookCellResponse +from datadog_api_client.v1.model.notebook_cell_response_attributes import NotebookCellResponseAttributes +from datadog_api_client.v1.model.notebook_cell_time import NotebookCellTime +from datadog_api_client.v1.model.notebook_cell_update_request import NotebookCellUpdateRequest +from datadog_api_client.v1.model.notebook_cell_update_request_attributes import NotebookCellUpdateRequestAttributes +from datadog_api_client.v1.model.notebook_create_data import NotebookCreateData +from datadog_api_client.v1.model.notebook_create_data_attributes import NotebookCreateDataAttributes +from datadog_api_client.v1.model.notebook_create_request import NotebookCreateRequest +from datadog_api_client.v1.model.notebook_distribution_cell_attributes import NotebookDistributionCellAttributes +from datadog_api_client.v1.model.notebook_global_time import NotebookGlobalTime +from datadog_api_client.v1.model.notebook_graph_size import NotebookGraphSize +from datadog_api_client.v1.model.notebook_heat_map_cell_attributes import NotebookHeatMapCellAttributes +from datadog_api_client.v1.model.notebook_log_stream_cell_attributes import NotebookLogStreamCellAttributes +from datadog_api_client.v1.model.notebook_markdown_cell_attributes import NotebookMarkdownCellAttributes +from datadog_api_client.v1.model.notebook_markdown_cell_definition import NotebookMarkdownCellDefinition +from datadog_api_client.v1.model.notebook_markdown_cell_definition_type import NotebookMarkdownCellDefinitionType +from datadog_api_client.v1.model.notebook_metadata import NotebookMetadata +from datadog_api_client.v1.model.notebook_metadata_type import NotebookMetadataType +from datadog_api_client.v1.model.notebook_relative_time import NotebookRelativeTime +from datadog_api_client.v1.model.notebook_resource_type import NotebookResourceType +from datadog_api_client.v1.model.notebook_response import NotebookResponse +from datadog_api_client.v1.model.notebook_response_data import NotebookResponseData +from datadog_api_client.v1.model.notebook_response_data_attributes import NotebookResponseDataAttributes +from datadog_api_client.v1.model.notebook_split_by import NotebookSplitBy +from datadog_api_client.v1.model.notebook_status import NotebookStatus +from datadog_api_client.v1.model.notebook_template_variable import NotebookTemplateVariable +from datadog_api_client.v1.model.notebook_template_variable_available_values_query import NotebookTemplateVariableAvailableValuesQuery +from datadog_api_client.v1.model.notebook_template_variable_available_values_query_group_by import NotebookTemplateVariableAvailableValuesQueryGroupBy +from datadog_api_client.v1.model.notebook_template_variable_available_values_query_log_rum_spans import NotebookTemplateVariableAvailableValuesQueryLogRumSpans +from datadog_api_client.v1.model.notebook_template_variable_available_values_query_metrics import NotebookTemplateVariableAvailableValuesQueryMetrics +from datadog_api_client.v1.model.notebook_template_variable_available_values_query_search import NotebookTemplateVariableAvailableValuesQuerySearch +from datadog_api_client.v1.model.notebook_timeseries_cell_attributes import NotebookTimeseriesCellAttributes +from datadog_api_client.v1.model.notebook_toplist_cell_attributes import NotebookToplistCellAttributes +from datadog_api_client.v1.model.notebook_update_cell import NotebookUpdateCell +from datadog_api_client.v1.model.notebook_update_data import NotebookUpdateData +from datadog_api_client.v1.model.notebook_update_data_attributes import NotebookUpdateDataAttributes +from datadog_api_client.v1.model.notebook_update_request import NotebookUpdateRequest +from datadog_api_client.v1.model.notebooks_response import NotebooksResponse +from datadog_api_client.v1.model.notebooks_response_data import NotebooksResponseData +from datadog_api_client.v1.model.notebooks_response_data_attributes import NotebooksResponseDataAttributes +from datadog_api_client.v1.model.notebooks_response_meta import NotebooksResponseMeta +from datadog_api_client.v1.model.notebooks_response_page import NotebooksResponsePage +from datadog_api_client.v1.model.notify_end_state import NotifyEndState +from datadog_api_client.v1.model.notify_end_type import NotifyEndType +from datadog_api_client.v1.model.number_format_unit import NumberFormatUnit +from datadog_api_client.v1.model.number_format_unit_canonical import NumberFormatUnitCanonical +from datadog_api_client.v1.model.number_format_unit_custom import NumberFormatUnitCustom +from datadog_api_client.v1.model.number_format_unit_custom_type import NumberFormatUnitCustomType +from datadog_api_client.v1.model.number_format_unit_scale import NumberFormatUnitScale +from datadog_api_client.v1.model.number_format_unit_scale_type import NumberFormatUnitScaleType +from datadog_api_client.v1.model.on_missing_data_option import OnMissingDataOption +from datadog_api_client.v1.model.org_downgraded_response import OrgDowngradedResponse +from datadog_api_client.v1.model.organization import Organization +from datadog_api_client.v1.model.organization_billing import OrganizationBilling +from datadog_api_client.v1.model.organization_create_body import OrganizationCreateBody +from datadog_api_client.v1.model.organization_create_response import OrganizationCreateResponse +from datadog_api_client.v1.model.organization_list_response import OrganizationListResponse +from datadog_api_client.v1.model.organization_response import OrganizationResponse +from datadog_api_client.v1.model.organization_settings import OrganizationSettings +from datadog_api_client.v1.model.organization_settings_saml import OrganizationSettingsSaml +from datadog_api_client.v1.model.organization_settings_saml_autocreate_users_domains import OrganizationSettingsSamlAutocreateUsersDomains +from datadog_api_client.v1.model.organization_settings_saml_idp_initiated_login import OrganizationSettingsSamlIdpInitiatedLogin +from datadog_api_client.v1.model.organization_settings_saml_strict_mode import OrganizationSettingsSamlStrictMode +from datadog_api_client.v1.model.organization_subscription import OrganizationSubscription +from datadog_api_client.v1.model.pager_duty_service import PagerDutyService +from datadog_api_client.v1.model.pager_duty_service_key import PagerDutyServiceKey +from datadog_api_client.v1.model.pager_duty_service_name import PagerDutyServiceName +from datadog_api_client.v1.model.pagination import Pagination +from datadog_api_client.v1.model.point import Point +from datadog_api_client.v1.model.point_plot_dimension import PointPlotDimension +from datadog_api_client.v1.model.point_plot_projection import PointPlotProjection +from datadog_api_client.v1.model.point_plot_projection_dimension import PointPlotProjectionDimension +from datadog_api_client.v1.model.point_plot_projection_type import PointPlotProjectionType +from datadog_api_client.v1.model.point_plot_widget_definition import PointPlotWidgetDefinition +from datadog_api_client.v1.model.point_plot_widget_definition_type import PointPlotWidgetDefinitionType +from datadog_api_client.v1.model.point_plot_widget_legend import PointPlotWidgetLegend +from datadog_api_client.v1.model.point_plot_widget_legend_type import PointPlotWidgetLegendType +from datadog_api_client.v1.model.point_plot_widget_request import PointPlotWidgetRequest +from datadog_api_client.v1.model.powerpack_template_variable_contents import PowerpackTemplateVariableContents +from datadog_api_client.v1.model.powerpack_template_variables import PowerpackTemplateVariables +from datadog_api_client.v1.model.powerpack_widget_definition import PowerpackWidgetDefinition +from datadog_api_client.v1.model.powerpack_widget_definition_type import PowerpackWidgetDefinitionType +from datadog_api_client.v1.model.process_query_definition import ProcessQueryDefinition +from datadog_api_client.v1.model.product_analytics_audience_account_subquery import ProductAnalyticsAudienceAccountSubquery +from datadog_api_client.v1.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters +from datadog_api_client.v1.model.product_analytics_audience_occurrence_filter import ProductAnalyticsAudienceOccurrenceFilter +from datadog_api_client.v1.model.product_analytics_audience_segment_subquery import ProductAnalyticsAudienceSegmentSubquery +from datadog_api_client.v1.model.product_analytics_audience_user_subquery import ProductAnalyticsAudienceUserSubquery +from datadog_api_client.v1.model.product_analytics_base_query import ProductAnalyticsBaseQuery +from datadog_api_client.v1.model.product_analytics_event_data_source import ProductAnalyticsEventDataSource +from datadog_api_client.v1.model.product_analytics_event_query_search import ProductAnalyticsEventQuerySearch +from datadog_api_client.v1.model.product_analytics_extended_compute import ProductAnalyticsExtendedCompute +from datadog_api_client.v1.model.product_analytics_extended_group_by import ProductAnalyticsExtendedGroupBy +from datadog_api_client.v1.model.product_analytics_funnel_compute import ProductAnalyticsFunnelCompute +from datadog_api_client.v1.model.product_analytics_funnel_compute_aggregation import ProductAnalyticsFunnelComputeAggregation +from datadog_api_client.v1.model.product_analytics_funnel_compute_metric import ProductAnalyticsFunnelComputeMetric +from datadog_api_client.v1.model.product_analytics_funnel_data_source import ProductAnalyticsFunnelDataSource +from datadog_api_client.v1.model.product_analytics_funnel_group_by import ProductAnalyticsFunnelGroupBy +from datadog_api_client.v1.model.product_analytics_funnel_group_by_sort import ProductAnalyticsFunnelGroupBySort +from datadog_api_client.v1.model.product_analytics_funnel_query import ProductAnalyticsFunnelQuery +from datadog_api_client.v1.model.product_analytics_funnel_request import ProductAnalyticsFunnelRequest +from datadog_api_client.v1.model.product_analytics_funnel_request_type import ProductAnalyticsFunnelRequestType +from datadog_api_client.v1.model.product_analytics_funnel_widget_definition import ProductAnalyticsFunnelWidgetDefinition +from datadog_api_client.v1.model.published_dataset_provider import PublishedDatasetProvider +from datadog_api_client.v1.model.query_sort_order import QuerySortOrder +from datadog_api_client.v1.model.query_value_widget_comparison import QueryValueWidgetComparison +from datadog_api_client.v1.model.query_value_widget_comparison_directionality import QueryValueWidgetComparisonDirectionality +from datadog_api_client.v1.model.query_value_widget_comparison_type import QueryValueWidgetComparisonType +from datadog_api_client.v1.model.query_value_widget_definition import QueryValueWidgetDefinition +from datadog_api_client.v1.model.query_value_widget_definition_type import QueryValueWidgetDefinitionType +from datadog_api_client.v1.model.query_value_widget_request import QueryValueWidgetRequest +from datadog_api_client.v1.model.reference_table_logs_lookup_processor import ReferenceTableLogsLookupProcessor +from datadog_api_client.v1.model.resource_provider_config import ResourceProviderConfig +from datadog_api_client.v1.model.response_meta_attributes import ResponseMetaAttributes +from datadog_api_client.v1.model.retention_cohort_criteria import RetentionCohortCriteria +from datadog_api_client.v1.model.retention_cohort_criteria_time_interval import RetentionCohortCriteriaTimeInterval +from datadog_api_client.v1.model.retention_cohort_criteria_time_interval_type import RetentionCohortCriteriaTimeIntervalType +from datadog_api_client.v1.model.retention_compute import RetentionCompute +from datadog_api_client.v1.model.retention_compute_metric import RetentionComputeMetric +from datadog_api_client.v1.model.retention_curve_request_type import RetentionCurveRequestType +from datadog_api_client.v1.model.retention_curve_style import RetentionCurveStyle +from datadog_api_client.v1.model.retention_curve_widget_definition import RetentionCurveWidgetDefinition +from datadog_api_client.v1.model.retention_curve_widget_definition_type import RetentionCurveWidgetDefinitionType +from datadog_api_client.v1.model.retention_curve_widget_request import RetentionCurveWidgetRequest +from datadog_api_client.v1.model.retention_data_source import RetentionDataSource +from datadog_api_client.v1.model.retention_entity import RetentionEntity +from datadog_api_client.v1.model.retention_filters import RetentionFilters +from datadog_api_client.v1.model.retention_grid_request import RetentionGridRequest +from datadog_api_client.v1.model.retention_grid_request_type import RetentionGridRequestType +from datadog_api_client.v1.model.retention_group_by import RetentionGroupBy +from datadog_api_client.v1.model.retention_group_by_sort import RetentionGroupBySort +from datadog_api_client.v1.model.retention_group_by_target import RetentionGroupByTarget +from datadog_api_client.v1.model.retention_query import RetentionQuery +from datadog_api_client.v1.model.retention_return_condition import RetentionReturnCondition +from datadog_api_client.v1.model.retention_return_criteria import RetentionReturnCriteria +from datadog_api_client.v1.model.retention_return_criteria_time_interval import RetentionReturnCriteriaTimeInterval +from datadog_api_client.v1.model.retention_return_criteria_time_interval_type import RetentionReturnCriteriaTimeIntervalType +from datadog_api_client.v1.model.retention_return_criteria_time_interval_unit import RetentionReturnCriteriaTimeIntervalUnit +from datadog_api_client.v1.model.retention_search import RetentionSearch +from datadog_api_client.v1.model.run_workflow_widget_definition import RunWorkflowWidgetDefinition +from datadog_api_client.v1.model.run_workflow_widget_definition_type import RunWorkflowWidgetDefinitionType +from datadog_api_client.v1.model.run_workflow_widget_input import RunWorkflowWidgetInput +from datadog_api_client.v1.model.slo_bulk_delete import SLOBulkDelete +from datadog_api_client.v1.model.slo_bulk_delete_error import SLOBulkDeleteError +from datadog_api_client.v1.model.slo_bulk_delete_response import SLOBulkDeleteResponse +from datadog_api_client.v1.model.slo_bulk_delete_response_data import SLOBulkDeleteResponseData +from datadog_api_client.v1.model.slo_correction import SLOCorrection +from datadog_api_client.v1.model.slo_correction_category import SLOCorrectionCategory +from datadog_api_client.v1.model.slo_correction_create_data import SLOCorrectionCreateData +from datadog_api_client.v1.model.slo_correction_create_request import SLOCorrectionCreateRequest +from datadog_api_client.v1.model.slo_correction_create_request_attributes import SLOCorrectionCreateRequestAttributes +from datadog_api_client.v1.model.slo_correction_list_response import SLOCorrectionListResponse +from datadog_api_client.v1.model.slo_correction_response import SLOCorrectionResponse +from datadog_api_client.v1.model.slo_correction_response_attributes import SLOCorrectionResponseAttributes +from datadog_api_client.v1.model.slo_correction_response_attributes_modifier import SLOCorrectionResponseAttributesModifier +from datadog_api_client.v1.model.slo_correction_type import SLOCorrectionType +from datadog_api_client.v1.model.slo_correction_update_data import SLOCorrectionUpdateData +from datadog_api_client.v1.model.slo_correction_update_request import SLOCorrectionUpdateRequest +from datadog_api_client.v1.model.slo_correction_update_request_attributes import SLOCorrectionUpdateRequestAttributes +from datadog_api_client.v1.model.slo_count_definition import SLOCountDefinition +from datadog_api_client.v1.model.slo_count_definition_with_bad_events_formula import SLOCountDefinitionWithBadEventsFormula +from datadog_api_client.v1.model.slo_count_definition_with_total_events_formula import SLOCountDefinitionWithTotalEventsFormula +from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec +from datadog_api_client.v1.model.slo_creator import SLOCreator +from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition +from datadog_api_client.v1.model.slo_delete_response import SLODeleteResponse +from datadog_api_client.v1.model.slo_error_budget_remaining_data import SLOErrorBudgetRemainingData +from datadog_api_client.v1.model.slo_error_timeframe import SLOErrorTimeframe +from datadog_api_client.v1.model.slo_formula import SLOFormula +from datadog_api_client.v1.model.slo_history_metrics import SLOHistoryMetrics +from datadog_api_client.v1.model.slo_history_metrics_series import SLOHistoryMetricsSeries +from datadog_api_client.v1.model.slo_history_metrics_series_metadata import SLOHistoryMetricsSeriesMetadata +from datadog_api_client.v1.model.slo_history_metrics_series_metadata_unit import SLOHistoryMetricsSeriesMetadataUnit +from datadog_api_client.v1.model.slo_history_monitor import SLOHistoryMonitor +from datadog_api_client.v1.model.slo_history_response import SLOHistoryResponse +from datadog_api_client.v1.model.slo_history_response_data import SLOHistoryResponseData +from datadog_api_client.v1.model.slo_history_response_error import SLOHistoryResponseError +from datadog_api_client.v1.model.slo_history_response_error_with_type import SLOHistoryResponseErrorWithType +from datadog_api_client.v1.model.slo_history_sli_data import SLOHistorySLIData +from datadog_api_client.v1.model.slo_list_response import SLOListResponse +from datadog_api_client.v1.model.slo_list_response_metadata import SLOListResponseMetadata +from datadog_api_client.v1.model.slo_list_response_metadata_page import SLOListResponseMetadataPage +from datadog_api_client.v1.model.slo_list_widget_definition import SLOListWidgetDefinition +from datadog_api_client.v1.model.slo_list_widget_definition_type import SLOListWidgetDefinitionType +from datadog_api_client.v1.model.slo_list_widget_query import SLOListWidgetQuery +from datadog_api_client.v1.model.slo_list_widget_request import SLOListWidgetRequest +from datadog_api_client.v1.model.slo_list_widget_request_type import SLOListWidgetRequestType +from datadog_api_client.v1.model.slo_overall_statuses import SLOOverallStatuses +from datadog_api_client.v1.model.slo_raw_error_budget_remaining import SLORawErrorBudgetRemaining +from datadog_api_client.v1.model.slo_response import SLOResponse +from datadog_api_client.v1.model.slo_response_data import SLOResponseData +from datadog_api_client.v1.model.slo_sli_spec import SLOSliSpec +from datadog_api_client.v1.model.slo_state import SLOState +from datadog_api_client.v1.model.slo_status import SLOStatus +from datadog_api_client.v1.model.slo_threshold import SLOThreshold +from datadog_api_client.v1.model.slo_time_slice_comparator import SLOTimeSliceComparator +from datadog_api_client.v1.model.slo_time_slice_condition import SLOTimeSliceCondition +from datadog_api_client.v1.model.slo_time_slice_interval import SLOTimeSliceInterval +from datadog_api_client.v1.model.slo_time_slice_query import SLOTimeSliceQuery +from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec +from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe +from datadog_api_client.v1.model.slo_type import SLOType +from datadog_api_client.v1.model.slo_type_numeric import SLOTypeNumeric +from datadog_api_client.v1.model.slo_widget_definition import SLOWidgetDefinition +from datadog_api_client.v1.model.slo_widget_definition_type import SLOWidgetDefinitionType +from datadog_api_client.v1.model.sankey_join_keys import SankeyJoinKeys +from datadog_api_client.v1.model.sankey_network_data_source import SankeyNetworkDataSource +from datadog_api_client.v1.model.sankey_network_query import SankeyNetworkQuery +from datadog_api_client.v1.model.sankey_network_query_compute import SankeyNetworkQueryCompute +from datadog_api_client.v1.model.sankey_network_query_mode import SankeyNetworkQueryMode +from datadog_api_client.v1.model.sankey_network_query_sort import SankeyNetworkQuerySort +from datadog_api_client.v1.model.sankey_network_request import SankeyNetworkRequest +from datadog_api_client.v1.model.sankey_network_request_type import SankeyNetworkRequestType +from datadog_api_client.v1.model.sankey_rum_data_source import SankeyRumDataSource +from datadog_api_client.v1.model.sankey_rum_query import SankeyRumQuery +from datadog_api_client.v1.model.sankey_rum_query_mode import SankeyRumQueryMode +from datadog_api_client.v1.model.sankey_rum_request import SankeyRumRequest +from datadog_api_client.v1.model.sankey_widget_definition import SankeyWidgetDefinition +from datadog_api_client.v1.model.sankey_widget_definition_type import SankeyWidgetDefinitionType +from datadog_api_client.v1.model.sankey_widget_request import SankeyWidgetRequest +from datadog_api_client.v1.model.scatter_plot_request import ScatterPlotRequest +from datadog_api_client.v1.model.scatter_plot_widget_definition import ScatterPlotWidgetDefinition +from datadog_api_client.v1.model.scatter_plot_widget_definition_requests import ScatterPlotWidgetDefinitionRequests +from datadog_api_client.v1.model.scatter_plot_widget_definition_type import ScatterPlotWidgetDefinitionType +from datadog_api_client.v1.model.scatterplot_dimension import ScatterplotDimension +from datadog_api_client.v1.model.scatterplot_table_request import ScatterplotTableRequest +from datadog_api_client.v1.model.scatterplot_widget_aggregator import ScatterplotWidgetAggregator +from datadog_api_client.v1.model.scatterplot_widget_formula import ScatterplotWidgetFormula +from datadog_api_client.v1.model.search_slo_query import SearchSLOQuery +from datadog_api_client.v1.model.search_slo_response import SearchSLOResponse +from datadog_api_client.v1.model.search_slo_response_data import SearchSLOResponseData +from datadog_api_client.v1.model.search_slo_response_data_attributes import SearchSLOResponseDataAttributes +from datadog_api_client.v1.model.search_slo_response_data_attributes_facets import SearchSLOResponseDataAttributesFacets +from datadog_api_client.v1.model.search_slo_response_data_attributes_facets_object_int import SearchSLOResponseDataAttributesFacetsObjectInt +from datadog_api_client.v1.model.search_slo_response_data_attributes_facets_object_string import SearchSLOResponseDataAttributesFacetsObjectString +from datadog_api_client.v1.model.search_slo_response_links import SearchSLOResponseLinks +from datadog_api_client.v1.model.search_slo_response_meta import SearchSLOResponseMeta +from datadog_api_client.v1.model.search_slo_response_meta_page import SearchSLOResponseMetaPage +from datadog_api_client.v1.model.search_slo_threshold import SearchSLOThreshold +from datadog_api_client.v1.model.search_slo_timeframe import SearchSLOTimeframe +from datadog_api_client.v1.model.search_service_level_objective import SearchServiceLevelObjective +from datadog_api_client.v1.model.search_service_level_objective_attributes import SearchServiceLevelObjectiveAttributes +from datadog_api_client.v1.model.search_service_level_objective_data import SearchServiceLevelObjectiveData +from datadog_api_client.v1.model.selectable_template_variable_items import SelectableTemplateVariableItems +from datadog_api_client.v1.model.series import Series +from datadog_api_client.v1.model.service_check import ServiceCheck +from datadog_api_client.v1.model.service_check_status import ServiceCheckStatus +from datadog_api_client.v1.model.service_checks import ServiceChecks +from datadog_api_client.v1.model.service_level_objective import ServiceLevelObjective +from datadog_api_client.v1.model.service_level_objective_query import ServiceLevelObjectiveQuery +from datadog_api_client.v1.model.service_level_objective_request import ServiceLevelObjectiveRequest +from datadog_api_client.v1.model.service_map_widget_definition import ServiceMapWidgetDefinition +from datadog_api_client.v1.model.service_map_widget_definition_type import ServiceMapWidgetDefinitionType +from datadog_api_client.v1.model.service_summary_widget_definition import ServiceSummaryWidgetDefinition +from datadog_api_client.v1.model.service_summary_widget_definition_type import ServiceSummaryWidgetDefinitionType +from datadog_api_client.v1.model.shared_dashboard import SharedDashboard +from datadog_api_client.v1.model.shared_dashboard_author import SharedDashboardAuthor +from datadog_api_client.v1.model.shared_dashboard_invitees_items import SharedDashboardInviteesItems +from datadog_api_client.v1.model.shared_dashboard_invites import SharedDashboardInvites +from datadog_api_client.v1.model.shared_dashboard_invites_data import SharedDashboardInvitesData +from datadog_api_client.v1.model.shared_dashboard_invites_data_list import SharedDashboardInvitesDataList +from datadog_api_client.v1.model.shared_dashboard_invites_data_object import SharedDashboardInvitesDataObject +from datadog_api_client.v1.model.shared_dashboard_invites_data_object_attributes import SharedDashboardInvitesDataObjectAttributes +from datadog_api_client.v1.model.shared_dashboard_invites_meta import SharedDashboardInvitesMeta +from datadog_api_client.v1.model.shared_dashboard_invites_meta_page import SharedDashboardInvitesMetaPage +from datadog_api_client.v1.model.shared_dashboard_status import SharedDashboardStatus +from datadog_api_client.v1.model.shared_dashboard_update_request import SharedDashboardUpdateRequest +from datadog_api_client.v1.model.shared_dashboard_update_request_global_time import SharedDashboardUpdateRequestGlobalTime +from datadog_api_client.v1.model.signal_archive_reason import SignalArchiveReason +from datadog_api_client.v1.model.signal_assignee_update_request import SignalAssigneeUpdateRequest +from datadog_api_client.v1.model.signal_state_update_request import SignalStateUpdateRequest +from datadog_api_client.v1.model.signal_triage_state import SignalTriageState +from datadog_api_client.v1.model.slack_integration_channel import SlackIntegrationChannel +from datadog_api_client.v1.model.slack_integration_channel_display import SlackIntegrationChannelDisplay +from datadog_api_client.v1.model.slack_integration_channels import SlackIntegrationChannels +from datadog_api_client.v1.model.split_config import SplitConfig +from datadog_api_client.v1.model.split_config_sort_compute import SplitConfigSortCompute +from datadog_api_client.v1.model.split_dimension import SplitDimension +from datadog_api_client.v1.model.split_graph_source_widget_definition import SplitGraphSourceWidgetDefinition +from datadog_api_client.v1.model.split_graph_viz_size import SplitGraphVizSize +from datadog_api_client.v1.model.split_graph_widget_definition import SplitGraphWidgetDefinition +from datadog_api_client.v1.model.split_graph_widget_definition_type import SplitGraphWidgetDefinitionType +from datadog_api_client.v1.model.split_sort import SplitSort +from datadog_api_client.v1.model.split_vector_entry_item import SplitVectorEntryItem +from datadog_api_client.v1.model.successful_signal_update_response import SuccessfulSignalUpdateResponse +from datadog_api_client.v1.model.sunburst_widget_definition import SunburstWidgetDefinition +from datadog_api_client.v1.model.sunburst_widget_definition_type import SunburstWidgetDefinitionType +from datadog_api_client.v1.model.sunburst_widget_legend import SunburstWidgetLegend +from datadog_api_client.v1.model.sunburst_widget_legend_inline_automatic import SunburstWidgetLegendInlineAutomatic +from datadog_api_client.v1.model.sunburst_widget_legend_inline_automatic_type import SunburstWidgetLegendInlineAutomaticType +from datadog_api_client.v1.model.sunburst_widget_legend_table import SunburstWidgetLegendTable +from datadog_api_client.v1.model.sunburst_widget_legend_table_type import SunburstWidgetLegendTableType +from datadog_api_client.v1.model.sunburst_widget_request import SunburstWidgetRequest +from datadog_api_client.v1.model.synthetics_api_step import SyntheticsAPIStep +from datadog_api_client.v1.model.synthetics_api_subtest_step import SyntheticsAPISubtestStep +from datadog_api_client.v1.model.synthetics_api_subtest_step_subtype import SyntheticsAPISubtestStepSubtype +from datadog_api_client.v1.model.synthetics_api_test import SyntheticsAPITest +from datadog_api_client.v1.model.synthetics_api_test_config import SyntheticsAPITestConfig +from datadog_api_client.v1.model.synthetics_api_test_result_data import SyntheticsAPITestResultData +from datadog_api_client.v1.model.synthetics_api_test_result_full import SyntheticsAPITestResultFull +from datadog_api_client.v1.model.synthetics_api_test_result_full_check import SyntheticsAPITestResultFullCheck +from datadog_api_client.v1.model.synthetics_api_test_result_short import SyntheticsAPITestResultShort +from datadog_api_client.v1.model.synthetics_api_test_result_short_result import SyntheticsAPITestResultShortResult +from datadog_api_client.v1.model.synthetics_api_test_step import SyntheticsAPITestStep +from datadog_api_client.v1.model.synthetics_api_test_step_subtype import SyntheticsAPITestStepSubtype +from datadog_api_client.v1.model.synthetics_api_test_type import SyntheticsAPITestType +from datadog_api_client.v1.model.synthetics_api_wait_step import SyntheticsAPIWaitStep +from datadog_api_client.v1.model.synthetics_api_wait_step_subtype import SyntheticsAPIWaitStepSubtype +from datadog_api_client.v1.model.synthetics_api_test_failure_code import SyntheticsApiTestFailureCode +from datadog_api_client.v1.model.synthetics_api_test_result_failure import SyntheticsApiTestResultFailure +from datadog_api_client.v1.model.synthetics_assertion import SyntheticsAssertion +from datadog_api_client.v1.model.synthetics_assertion_body_hash_operator import SyntheticsAssertionBodyHashOperator +from datadog_api_client.v1.model.synthetics_assertion_body_hash_target import SyntheticsAssertionBodyHashTarget +from datadog_api_client.v1.model.synthetics_assertion_body_hash_type import SyntheticsAssertionBodyHashType +from datadog_api_client.v1.model.synthetics_assertion_json_path_operator import SyntheticsAssertionJSONPathOperator +from datadog_api_client.v1.model.synthetics_assertion_json_path_target import SyntheticsAssertionJSONPathTarget +from datadog_api_client.v1.model.synthetics_assertion_json_path_target_target import SyntheticsAssertionJSONPathTargetTarget +from datadog_api_client.v1.model.synthetics_assertion_json_schema_meta_schema import SyntheticsAssertionJSONSchemaMetaSchema +from datadog_api_client.v1.model.synthetics_assertion_json_schema_operator import SyntheticsAssertionJSONSchemaOperator +from datadog_api_client.v1.model.synthetics_assertion_json_schema_target import SyntheticsAssertionJSONSchemaTarget +from datadog_api_client.v1.model.synthetics_assertion_json_schema_target_target import SyntheticsAssertionJSONSchemaTargetTarget +from datadog_api_client.v1.model.synthetics_assertion_javascript import SyntheticsAssertionJavascript +from datadog_api_client.v1.model.synthetics_assertion_javascript_type import SyntheticsAssertionJavascriptType +from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification import SyntheticsAssertionMCPRespectsSpecification +from datadog_api_client.v1.model.synthetics_assertion_mcp_respects_specification_type import SyntheticsAssertionMCPRespectsSpecificationType +from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_target import SyntheticsAssertionMCPServerCapabilitiesTarget +from datadog_api_client.v1.model.synthetics_assertion_mcp_server_capabilities_type import SyntheticsAssertionMCPServerCapabilitiesType +from datadog_api_client.v1.model.synthetics_assertion_operator import SyntheticsAssertionOperator +from datadog_api_client.v1.model.synthetics_assertion_target import SyntheticsAssertionTarget +from datadog_api_client.v1.model.synthetics_assertion_target_value import SyntheticsAssertionTargetValue +from datadog_api_client.v1.model.synthetics_assertion_timings_scope import SyntheticsAssertionTimingsScope +from datadog_api_client.v1.model.synthetics_assertion_type import SyntheticsAssertionType +from datadog_api_client.v1.model.synthetics_assertion_x_path_operator import SyntheticsAssertionXPathOperator +from datadog_api_client.v1.model.synthetics_assertion_x_path_target import SyntheticsAssertionXPathTarget +from datadog_api_client.v1.model.synthetics_assertion_x_path_target_target import SyntheticsAssertionXPathTargetTarget +from datadog_api_client.v1.model.synthetics_basic_auth import SyntheticsBasicAuth +from datadog_api_client.v1.model.synthetics_basic_auth_digest import SyntheticsBasicAuthDigest +from datadog_api_client.v1.model.synthetics_basic_auth_digest_type import SyntheticsBasicAuthDigestType +from datadog_api_client.v1.model.synthetics_basic_auth_jwt import SyntheticsBasicAuthJWT +from datadog_api_client.v1.model.synthetics_basic_auth_jwt_add_claims import SyntheticsBasicAuthJWTAddClaims +from datadog_api_client.v1.model.synthetics_basic_auth_jwt_algorithm import SyntheticsBasicAuthJWTAlgorithm +from datadog_api_client.v1.model.synthetics_basic_auth_jwt_type import SyntheticsBasicAuthJWTType +from datadog_api_client.v1.model.synthetics_basic_auth_ntlm import SyntheticsBasicAuthNTLM +from datadog_api_client.v1.model.synthetics_basic_auth_ntlm_type import SyntheticsBasicAuthNTLMType +from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client import SyntheticsBasicAuthOauthClient +from datadog_api_client.v1.model.synthetics_basic_auth_oauth_client_type import SyntheticsBasicAuthOauthClientType +from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop import SyntheticsBasicAuthOauthROP +from datadog_api_client.v1.model.synthetics_basic_auth_oauth_rop_type import SyntheticsBasicAuthOauthROPType +from datadog_api_client.v1.model.synthetics_basic_auth_oauth_token_api_authentication import SyntheticsBasicAuthOauthTokenApiAuthentication +from datadog_api_client.v1.model.synthetics_basic_auth_sigv4 import SyntheticsBasicAuthSigv4 +from datadog_api_client.v1.model.synthetics_basic_auth_sigv4_type import SyntheticsBasicAuthSigv4Type +from datadog_api_client.v1.model.synthetics_basic_auth_web import SyntheticsBasicAuthWeb +from datadog_api_client.v1.model.synthetics_basic_auth_web_type import SyntheticsBasicAuthWebType +from datadog_api_client.v1.model.synthetics_batch_details import SyntheticsBatchDetails +from datadog_api_client.v1.model.synthetics_batch_details_data import SyntheticsBatchDetailsData +from datadog_api_client.v1.model.synthetics_batch_result import SyntheticsBatchResult +from datadog_api_client.v1.model.synthetics_batch_status import SyntheticsBatchStatus +from datadog_api_client.v1.model.synthetics_browser_error import SyntheticsBrowserError +from datadog_api_client.v1.model.synthetics_browser_error_type import SyntheticsBrowserErrorType +from datadog_api_client.v1.model.synthetics_browser_test import SyntheticsBrowserTest +from datadog_api_client.v1.model.synthetics_browser_test_config import SyntheticsBrowserTestConfig +from datadog_api_client.v1.model.synthetics_browser_test_failure_code import SyntheticsBrowserTestFailureCode +from datadog_api_client.v1.model.synthetics_browser_test_result_data import SyntheticsBrowserTestResultData +from datadog_api_client.v1.model.synthetics_browser_test_result_failure import SyntheticsBrowserTestResultFailure +from datadog_api_client.v1.model.synthetics_browser_test_result_full import SyntheticsBrowserTestResultFull +from datadog_api_client.v1.model.synthetics_browser_test_result_full_check import SyntheticsBrowserTestResultFullCheck +from datadog_api_client.v1.model.synthetics_browser_test_result_short import SyntheticsBrowserTestResultShort +from datadog_api_client.v1.model.synthetics_browser_test_result_short_result import SyntheticsBrowserTestResultShortResult +from datadog_api_client.v1.model.synthetics_browser_test_rum_settings import SyntheticsBrowserTestRumSettings +from datadog_api_client.v1.model.synthetics_browser_test_type import SyntheticsBrowserTestType +from datadog_api_client.v1.model.synthetics_browser_variable import SyntheticsBrowserVariable +from datadog_api_client.v1.model.synthetics_browser_variable_type import SyntheticsBrowserVariableType +from datadog_api_client.v1.model.synthetics_ci_batch_metadata import SyntheticsCIBatchMetadata +from datadog_api_client.v1.model.synthetics_ci_batch_metadata_ci import SyntheticsCIBatchMetadataCI +from datadog_api_client.v1.model.synthetics_ci_batch_metadata_git import SyntheticsCIBatchMetadataGit +from datadog_api_client.v1.model.synthetics_ci_batch_metadata_pipeline import SyntheticsCIBatchMetadataPipeline +from datadog_api_client.v1.model.synthetics_ci_batch_metadata_provider import SyntheticsCIBatchMetadataProvider +from datadog_api_client.v1.model.synthetics_ci_test import SyntheticsCITest +from datadog_api_client.v1.model.synthetics_ci_test_body import SyntheticsCITestBody +from datadog_api_client.v1.model.synthetics_check_type import SyntheticsCheckType +from datadog_api_client.v1.model.synthetics_config_variable import SyntheticsConfigVariable +from datadog_api_client.v1.model.synthetics_config_variable_type import SyntheticsConfigVariableType +from datadog_api_client.v1.model.synthetics_core_web_vitals import SyntheticsCoreWebVitals +from datadog_api_client.v1.model.synthetics_delete_tests_payload import SyntheticsDeleteTestsPayload +from datadog_api_client.v1.model.synthetics_delete_tests_response import SyntheticsDeleteTestsResponse +from datadog_api_client.v1.model.synthetics_deleted_test import SyntheticsDeletedTest +from datadog_api_client.v1.model.synthetics_device import SyntheticsDevice +from datadog_api_client.v1.model.synthetics_fetch_uptimes_payload import SyntheticsFetchUptimesPayload +from datadog_api_client.v1.model.synthetics_get_api_test_latest_results_response import SyntheticsGetAPITestLatestResultsResponse +from datadog_api_client.v1.model.synthetics_get_browser_test_latest_results_response import SyntheticsGetBrowserTestLatestResultsResponse +from datadog_api_client.v1.model.synthetics_global_variable import SyntheticsGlobalVariable +from datadog_api_client.v1.model.synthetics_global_variable_attributes import SyntheticsGlobalVariableAttributes +from datadog_api_client.v1.model.synthetics_global_variable_options import SyntheticsGlobalVariableOptions +from datadog_api_client.v1.model.synthetics_global_variable_parse_test_options import SyntheticsGlobalVariableParseTestOptions +from datadog_api_client.v1.model.synthetics_global_variable_parse_test_options_type import SyntheticsGlobalVariableParseTestOptionsType +from datadog_api_client.v1.model.synthetics_global_variable_parser_type import SyntheticsGlobalVariableParserType +from datadog_api_client.v1.model.synthetics_global_variable_request import SyntheticsGlobalVariableRequest +from datadog_api_client.v1.model.synthetics_global_variable_totp_parameters import SyntheticsGlobalVariableTOTPParameters +from datadog_api_client.v1.model.synthetics_global_variable_value import SyntheticsGlobalVariableValue +from datadog_api_client.v1.model.synthetics_list_global_variables_response import SyntheticsListGlobalVariablesResponse +from datadog_api_client.v1.model.synthetics_list_tests_response import SyntheticsListTestsResponse +from datadog_api_client.v1.model.synthetics_local_variable_parsing_options_type import SyntheticsLocalVariableParsingOptionsType +from datadog_api_client.v1.model.synthetics_location import SyntheticsLocation +from datadog_api_client.v1.model.synthetics_locations import SyntheticsLocations +from datadog_api_client.v1.model.synthetics_mcp_protocol_version import SyntheticsMCPProtocolVersion +from datadog_api_client.v1.model.synthetics_mcp_server_capability import SyntheticsMCPServerCapability +from datadog_api_client.v1.model.synthetics_mobile_step import SyntheticsMobileStep +from datadog_api_client.v1.model.synthetics_mobile_step_params import SyntheticsMobileStepParams +from datadog_api_client.v1.model.synthetics_mobile_step_params_direction import SyntheticsMobileStepParamsDirection +from datadog_api_client.v1.model.synthetics_mobile_step_params_element import SyntheticsMobileStepParamsElement +from datadog_api_client.v1.model.synthetics_mobile_step_params_element_context_type import SyntheticsMobileStepParamsElementContextType +from datadog_api_client.v1.model.synthetics_mobile_step_params_element_relative_position import SyntheticsMobileStepParamsElementRelativePosition +from datadog_api_client.v1.model.synthetics_mobile_step_params_element_user_locator import SyntheticsMobileStepParamsElementUserLocator +from datadog_api_client.v1.model.synthetics_mobile_step_params_element_user_locator_values_items import SyntheticsMobileStepParamsElementUserLocatorValuesItems +from datadog_api_client.v1.model.synthetics_mobile_step_params_element_user_locator_values_items_type import SyntheticsMobileStepParamsElementUserLocatorValuesItemsType +from datadog_api_client.v1.model.synthetics_mobile_step_params_positions_items import SyntheticsMobileStepParamsPositionsItems +from datadog_api_client.v1.model.synthetics_mobile_step_params_value import SyntheticsMobileStepParamsValue +from datadog_api_client.v1.model.synthetics_mobile_step_params_variable import SyntheticsMobileStepParamsVariable +from datadog_api_client.v1.model.synthetics_mobile_step_type import SyntheticsMobileStepType +from datadog_api_client.v1.model.synthetics_mobile_test import SyntheticsMobileTest +from datadog_api_client.v1.model.synthetics_mobile_test_config import SyntheticsMobileTestConfig +from datadog_api_client.v1.model.synthetics_mobile_test_initial_application_arguments import SyntheticsMobileTestInitialApplicationArguments +from datadog_api_client.v1.model.synthetics_mobile_test_options import SyntheticsMobileTestOptions +from datadog_api_client.v1.model.synthetics_mobile_test_type import SyntheticsMobileTestType +from datadog_api_client.v1.model.synthetics_mobile_tests_mobile_application import SyntheticsMobileTestsMobileApplication +from datadog_api_client.v1.model.synthetics_mobile_tests_mobile_application_reference_type import SyntheticsMobileTestsMobileApplicationReferenceType +from datadog_api_client.v1.model.synthetics_parsing_options import SyntheticsParsingOptions +from datadog_api_client.v1.model.synthetics_patch_test_body import SyntheticsPatchTestBody +from datadog_api_client.v1.model.synthetics_patch_test_operation import SyntheticsPatchTestOperation +from datadog_api_client.v1.model.synthetics_patch_test_operation_name import SyntheticsPatchTestOperationName +from datadog_api_client.v1.model.synthetics_playing_tab import SyntheticsPlayingTab +from datadog_api_client.v1.model.synthetics_private_location import SyntheticsPrivateLocation +from datadog_api_client.v1.model.synthetics_private_location_creation_response import SyntheticsPrivateLocationCreationResponse +from datadog_api_client.v1.model.synthetics_private_location_creation_response_result_encryption import SyntheticsPrivateLocationCreationResponseResultEncryption +from datadog_api_client.v1.model.synthetics_private_location_metadata import SyntheticsPrivateLocationMetadata +from datadog_api_client.v1.model.synthetics_private_location_secrets import SyntheticsPrivateLocationSecrets +from datadog_api_client.v1.model.synthetics_private_location_secrets_authentication import SyntheticsPrivateLocationSecretsAuthentication +from datadog_api_client.v1.model.synthetics_private_location_secrets_config_decryption import SyntheticsPrivateLocationSecretsConfigDecryption +from datadog_api_client.v1.model.synthetics_restricted_roles import SyntheticsRestrictedRoles +from datadog_api_client.v1.model.synthetics_ssl_certificate import SyntheticsSSLCertificate +from datadog_api_client.v1.model.synthetics_ssl_certificate_issuer import SyntheticsSSLCertificateIssuer +from datadog_api_client.v1.model.synthetics_ssl_certificate_subject import SyntheticsSSLCertificateSubject +from datadog_api_client.v1.model.synthetics_step import SyntheticsStep +from datadog_api_client.v1.model.synthetics_step_detail import SyntheticsStepDetail +from datadog_api_client.v1.model.synthetics_step_detail_warning import SyntheticsStepDetailWarning +from datadog_api_client.v1.model.synthetics_step_type import SyntheticsStepType +from datadog_api_client.v1.model.synthetics_test_call_type import SyntheticsTestCallType +from datadog_api_client.v1.model.synthetics_test_ci_options import SyntheticsTestCiOptions +from datadog_api_client.v1.model.synthetics_test_config import SyntheticsTestConfig +from datadog_api_client.v1.model.synthetics_test_details import SyntheticsTestDetails +from datadog_api_client.v1.model.synthetics_test_details_sub_type import SyntheticsTestDetailsSubType +from datadog_api_client.v1.model.synthetics_test_details_type import SyntheticsTestDetailsType +from datadog_api_client.v1.model.synthetics_test_details_without_steps import SyntheticsTestDetailsWithoutSteps +from datadog_api_client.v1.model.synthetics_test_execution_rule import SyntheticsTestExecutionRule +from datadog_api_client.v1.model.synthetics_test_headers import SyntheticsTestHeaders +from datadog_api_client.v1.model.synthetics_test_metadata import SyntheticsTestMetadata +from datadog_api_client.v1.model.synthetics_test_monitor_status import SyntheticsTestMonitorStatus +from datadog_api_client.v1.model.synthetics_test_options import SyntheticsTestOptions +from datadog_api_client.v1.model.synthetics_test_options_http_version import SyntheticsTestOptionsHTTPVersion +from datadog_api_client.v1.model.synthetics_test_options_monitor_options import SyntheticsTestOptionsMonitorOptions +from datadog_api_client.v1.model.synthetics_test_options_monitor_options_notification_preset_name import SyntheticsTestOptionsMonitorOptionsNotificationPresetName +from datadog_api_client.v1.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry +from datadog_api_client.v1.model.synthetics_test_options_scheduling import SyntheticsTestOptionsScheduling +from datadog_api_client.v1.model.synthetics_test_options_scheduling_timeframe import SyntheticsTestOptionsSchedulingTimeframe +from datadog_api_client.v1.model.synthetics_test_pause_status import SyntheticsTestPauseStatus +from datadog_api_client.v1.model.synthetics_test_process_status import SyntheticsTestProcessStatus +from datadog_api_client.v1.model.synthetics_test_request import SyntheticsTestRequest +from datadog_api_client.v1.model.synthetics_test_request_body_file import SyntheticsTestRequestBodyFile +from datadog_api_client.v1.model.synthetics_test_request_body_type import SyntheticsTestRequestBodyType +from datadog_api_client.v1.model.synthetics_test_request_certificate import SyntheticsTestRequestCertificate +from datadog_api_client.v1.model.synthetics_test_request_certificate_item import SyntheticsTestRequestCertificateItem +from datadog_api_client.v1.model.synthetics_test_request_dns_server_port import SyntheticsTestRequestDNSServerPort +from datadog_api_client.v1.model.synthetics_test_request_port import SyntheticsTestRequestPort +from datadog_api_client.v1.model.synthetics_test_request_proxy import SyntheticsTestRequestProxy +from datadog_api_client.v1.model.synthetics_test_restriction_policy_binding import SyntheticsTestRestrictionPolicyBinding +from datadog_api_client.v1.model.synthetics_test_restriction_policy_binding_relation import SyntheticsTestRestrictionPolicyBindingRelation +from datadog_api_client.v1.model.synthetics_test_uptime import SyntheticsTestUptime +from datadog_api_client.v1.model.synthetics_timing import SyntheticsTiming +from datadog_api_client.v1.model.synthetics_trigger_body import SyntheticsTriggerBody +from datadog_api_client.v1.model.synthetics_trigger_ci_test_location import SyntheticsTriggerCITestLocation +from datadog_api_client.v1.model.synthetics_trigger_ci_test_run_result import SyntheticsTriggerCITestRunResult +from datadog_api_client.v1.model.synthetics_trigger_ci_tests_response import SyntheticsTriggerCITestsResponse +from datadog_api_client.v1.model.synthetics_trigger_test import SyntheticsTriggerTest +from datadog_api_client.v1.model.synthetics_update_test_pause_status_payload import SyntheticsUpdateTestPauseStatusPayload +from datadog_api_client.v1.model.synthetics_uptime import SyntheticsUptime +from datadog_api_client.v1.model.synthetics_variable_parser import SyntheticsVariableParser +from datadog_api_client.v1.model.synthetics_warning_type import SyntheticsWarningType +from datadog_api_client.v1.model.table_widget_cell_display_mode import TableWidgetCellDisplayMode +from datadog_api_client.v1.model.table_widget_definition import TableWidgetDefinition +from datadog_api_client.v1.model.table_widget_definition_type import TableWidgetDefinitionType +from datadog_api_client.v1.model.table_widget_has_search_bar import TableWidgetHasSearchBar +from datadog_api_client.v1.model.table_widget_request import TableWidgetRequest +from datadog_api_client.v1.model.table_widget_text_format_match import TableWidgetTextFormatMatch +from datadog_api_client.v1.model.table_widget_text_format_match_type import TableWidgetTextFormatMatchType +from datadog_api_client.v1.model.table_widget_text_format_palette import TableWidgetTextFormatPalette +from datadog_api_client.v1.model.table_widget_text_format_replace import TableWidgetTextFormatReplace +from datadog_api_client.v1.model.table_widget_text_format_replace_all import TableWidgetTextFormatReplaceAll +from datadog_api_client.v1.model.table_widget_text_format_replace_all_type import TableWidgetTextFormatReplaceAllType +from datadog_api_client.v1.model.table_widget_text_format_replace_substring import TableWidgetTextFormatReplaceSubstring +from datadog_api_client.v1.model.table_widget_text_format_replace_substring_type import TableWidgetTextFormatReplaceSubstringType +from datadog_api_client.v1.model.table_widget_text_format_rule import TableWidgetTextFormatRule +from datadog_api_client.v1.model.tag_to_hosts import TagToHosts +from datadog_api_client.v1.model.target_format_type import TargetFormatType +from datadog_api_client.v1.model.timeseries_background import TimeseriesBackground +from datadog_api_client.v1.model.timeseries_background_type import TimeseriesBackgroundType +from datadog_api_client.v1.model.timeseries_request_style import TimeseriesRequestStyle +from datadog_api_client.v1.model.timeseries_widget_definition import TimeseriesWidgetDefinition +from datadog_api_client.v1.model.timeseries_widget_definition_type import TimeseriesWidgetDefinitionType +from datadog_api_client.v1.model.timeseries_widget_expression_alias import TimeseriesWidgetExpressionAlias +from datadog_api_client.v1.model.timeseries_widget_legend_column import TimeseriesWidgetLegendColumn +from datadog_api_client.v1.model.timeseries_widget_legend_layout import TimeseriesWidgetLegendLayout +from datadog_api_client.v1.model.timeseries_widget_request import TimeseriesWidgetRequest +from datadog_api_client.v1.model.toplist_widget_definition import ToplistWidgetDefinition +from datadog_api_client.v1.model.toplist_widget_definition_type import ToplistWidgetDefinitionType +from datadog_api_client.v1.model.toplist_widget_display import ToplistWidgetDisplay +from datadog_api_client.v1.model.toplist_widget_flat import ToplistWidgetFlat +from datadog_api_client.v1.model.toplist_widget_flat_type import ToplistWidgetFlatType +from datadog_api_client.v1.model.toplist_widget_legend import ToplistWidgetLegend +from datadog_api_client.v1.model.toplist_widget_request import ToplistWidgetRequest +from datadog_api_client.v1.model.toplist_widget_scaling import ToplistWidgetScaling +from datadog_api_client.v1.model.toplist_widget_stacked import ToplistWidgetStacked +from datadog_api_client.v1.model.toplist_widget_stacked_type import ToplistWidgetStackedType +from datadog_api_client.v1.model.toplist_widget_style import ToplistWidgetStyle +from datadog_api_client.v1.model.topology_map_widget_definition import TopologyMapWidgetDefinition +from datadog_api_client.v1.model.topology_map_widget_definition_data_streams import TopologyMapWidgetDefinitionDataStreams +from datadog_api_client.v1.model.topology_map_widget_definition_service_map import TopologyMapWidgetDefinitionServiceMap +from datadog_api_client.v1.model.topology_map_widget_definition_type import TopologyMapWidgetDefinitionType +from datadog_api_client.v1.model.topology_query_data_streams import TopologyQueryDataStreams +from datadog_api_client.v1.model.topology_query_data_streams_data_source import TopologyQueryDataStreamsDataSource +from datadog_api_client.v1.model.topology_query_service_map import TopologyQueryServiceMap +from datadog_api_client.v1.model.topology_query_service_map_data_source import TopologyQueryServiceMapDataSource +from datadog_api_client.v1.model.topology_request_data_streams import TopologyRequestDataStreams +from datadog_api_client.v1.model.topology_request_service_map import TopologyRequestServiceMap +from datadog_api_client.v1.model.topology_request_type import TopologyRequestType +from datadog_api_client.v1.model.tree_map_color_by import TreeMapColorBy +from datadog_api_client.v1.model.tree_map_group_by import TreeMapGroupBy +from datadog_api_client.v1.model.tree_map_size_by import TreeMapSizeBy +from datadog_api_client.v1.model.tree_map_widget_definition import TreeMapWidgetDefinition +from datadog_api_client.v1.model.tree_map_widget_definition_type import TreeMapWidgetDefinitionType +from datadog_api_client.v1.model.tree_map_widget_request import TreeMapWidgetRequest +from datadog_api_client.v1.model.usage_analyzed_logs_hour import UsageAnalyzedLogsHour +from datadog_api_client.v1.model.usage_analyzed_logs_response import UsageAnalyzedLogsResponse +from datadog_api_client.v1.model.usage_attribution_aggregates import UsageAttributionAggregates +from datadog_api_client.v1.model.usage_attribution_aggregates_body import UsageAttributionAggregatesBody +from datadog_api_client.v1.model.usage_attribution_tag_names import UsageAttributionTagNames +from datadog_api_client.v1.model.usage_audit_logs_hour import UsageAuditLogsHour +from datadog_api_client.v1.model.usage_audit_logs_response import UsageAuditLogsResponse +from datadog_api_client.v1.model.usage_billable_summary_body import UsageBillableSummaryBody +from datadog_api_client.v1.model.usage_billable_summary_hour import UsageBillableSummaryHour +from datadog_api_client.v1.model.usage_billable_summary_keys import UsageBillableSummaryKeys +from datadog_api_client.v1.model.usage_billable_summary_response import UsageBillableSummaryResponse +from datadog_api_client.v1.model.usage_ci_visibility_hour import UsageCIVisibilityHour +from datadog_api_client.v1.model.usage_ci_visibility_response import UsageCIVisibilityResponse +from datadog_api_client.v1.model.usage_cws_hour import UsageCWSHour +from datadog_api_client.v1.model.usage_cws_response import UsageCWSResponse +from datadog_api_client.v1.model.usage_cloud_security_posture_management_hour import UsageCloudSecurityPostureManagementHour +from datadog_api_client.v1.model.usage_cloud_security_posture_management_response import UsageCloudSecurityPostureManagementResponse +from datadog_api_client.v1.model.usage_custom_reports_attributes import UsageCustomReportsAttributes +from datadog_api_client.v1.model.usage_custom_reports_data import UsageCustomReportsData +from datadog_api_client.v1.model.usage_custom_reports_meta import UsageCustomReportsMeta +from datadog_api_client.v1.model.usage_custom_reports_page import UsageCustomReportsPage +from datadog_api_client.v1.model.usage_custom_reports_response import UsageCustomReportsResponse +from datadog_api_client.v1.model.usage_dbm_hour import UsageDBMHour +from datadog_api_client.v1.model.usage_dbm_response import UsageDBMResponse +from datadog_api_client.v1.model.usage_fargate_hour import UsageFargateHour +from datadog_api_client.v1.model.usage_fargate_response import UsageFargateResponse +from datadog_api_client.v1.model.usage_host_hour import UsageHostHour +from datadog_api_client.v1.model.usage_hosts_response import UsageHostsResponse +from datadog_api_client.v1.model.usage_incident_management_hour import UsageIncidentManagementHour +from datadog_api_client.v1.model.usage_incident_management_response import UsageIncidentManagementResponse +from datadog_api_client.v1.model.usage_indexed_spans_hour import UsageIndexedSpansHour +from datadog_api_client.v1.model.usage_indexed_spans_response import UsageIndexedSpansResponse +from datadog_api_client.v1.model.usage_ingested_spans_hour import UsageIngestedSpansHour +from datadog_api_client.v1.model.usage_ingested_spans_response import UsageIngestedSpansResponse +from datadog_api_client.v1.model.usage_iot_hour import UsageIoTHour +from datadog_api_client.v1.model.usage_iot_response import UsageIoTResponse +from datadog_api_client.v1.model.usage_lambda_hour import UsageLambdaHour +from datadog_api_client.v1.model.usage_lambda_response import UsageLambdaResponse +from datadog_api_client.v1.model.usage_logs_by_index_hour import UsageLogsByIndexHour +from datadog_api_client.v1.model.usage_logs_by_index_response import UsageLogsByIndexResponse +from datadog_api_client.v1.model.usage_logs_by_retention_hour import UsageLogsByRetentionHour +from datadog_api_client.v1.model.usage_logs_by_retention_response import UsageLogsByRetentionResponse +from datadog_api_client.v1.model.usage_logs_hour import UsageLogsHour +from datadog_api_client.v1.model.usage_logs_response import UsageLogsResponse +from datadog_api_client.v1.model.usage_metric_category import UsageMetricCategory +from datadog_api_client.v1.model.usage_network_flows_hour import UsageNetworkFlowsHour +from datadog_api_client.v1.model.usage_network_flows_response import UsageNetworkFlowsResponse +from datadog_api_client.v1.model.usage_network_hosts_hour import UsageNetworkHostsHour +from datadog_api_client.v1.model.usage_network_hosts_response import UsageNetworkHostsResponse +from datadog_api_client.v1.model.usage_online_archive_hour import UsageOnlineArchiveHour +from datadog_api_client.v1.model.usage_online_archive_response import UsageOnlineArchiveResponse +from datadog_api_client.v1.model.usage_profiling_hour import UsageProfilingHour +from datadog_api_client.v1.model.usage_profiling_response import UsageProfilingResponse +from datadog_api_client.v1.model.usage_reports_type import UsageReportsType +from datadog_api_client.v1.model.usage_rum_sessions_hour import UsageRumSessionsHour +from datadog_api_client.v1.model.usage_rum_sessions_response import UsageRumSessionsResponse +from datadog_api_client.v1.model.usage_rum_units_hour import UsageRumUnitsHour +from datadog_api_client.v1.model.usage_rum_units_response import UsageRumUnitsResponse +from datadog_api_client.v1.model.usage_sds_hour import UsageSDSHour +from datadog_api_client.v1.model.usage_sds_response import UsageSDSResponse +from datadog_api_client.v1.model.usage_snmp_hour import UsageSNMPHour +from datadog_api_client.v1.model.usage_snmp_response import UsageSNMPResponse +from datadog_api_client.v1.model.usage_sort import UsageSort +from datadog_api_client.v1.model.usage_sort_direction import UsageSortDirection +from datadog_api_client.v1.model.usage_specified_custom_reports_attributes import UsageSpecifiedCustomReportsAttributes +from datadog_api_client.v1.model.usage_specified_custom_reports_data import UsageSpecifiedCustomReportsData +from datadog_api_client.v1.model.usage_specified_custom_reports_meta import UsageSpecifiedCustomReportsMeta +from datadog_api_client.v1.model.usage_specified_custom_reports_page import UsageSpecifiedCustomReportsPage +from datadog_api_client.v1.model.usage_specified_custom_reports_response import UsageSpecifiedCustomReportsResponse +from datadog_api_client.v1.model.usage_summary_date import UsageSummaryDate +from datadog_api_client.v1.model.usage_summary_date_org import UsageSummaryDateOrg +from datadog_api_client.v1.model.usage_summary_response import UsageSummaryResponse +from datadog_api_client.v1.model.usage_synthetics_api_hour import UsageSyntheticsAPIHour +from datadog_api_client.v1.model.usage_synthetics_api_response import UsageSyntheticsAPIResponse +from datadog_api_client.v1.model.usage_synthetics_browser_hour import UsageSyntheticsBrowserHour +from datadog_api_client.v1.model.usage_synthetics_browser_response import UsageSyntheticsBrowserResponse +from datadog_api_client.v1.model.usage_synthetics_hour import UsageSyntheticsHour +from datadog_api_client.v1.model.usage_synthetics_response import UsageSyntheticsResponse +from datadog_api_client.v1.model.usage_timeseries_hour import UsageTimeseriesHour +from datadog_api_client.v1.model.usage_timeseries_response import UsageTimeseriesResponse +from datadog_api_client.v1.model.usage_top_avg_metrics_hour import UsageTopAvgMetricsHour +from datadog_api_client.v1.model.usage_top_avg_metrics_metadata import UsageTopAvgMetricsMetadata +from datadog_api_client.v1.model.usage_top_avg_metrics_pagination import UsageTopAvgMetricsPagination +from datadog_api_client.v1.model.usage_top_avg_metrics_response import UsageTopAvgMetricsResponse +from datadog_api_client.v1.model.user import User +from datadog_api_client.v1.model.user_disable_response import UserDisableResponse +from datadog_api_client.v1.model.user_journey_formula_compute import UserJourneyFormulaCompute +from datadog_api_client.v1.model.user_journey_formula_compute_metric import UserJourneyFormulaComputeMetric +from datadog_api_client.v1.model.user_journey_formula_group_by import UserJourneyFormulaGroupBy +from datadog_api_client.v1.model.user_journey_join_keys import UserJourneyJoinKeys +from datadog_api_client.v1.model.user_journey_search import UserJourneySearch +from datadog_api_client.v1.model.user_journey_search_filters import UserJourneySearchFilters +from datadog_api_client.v1.model.user_journey_search_graph_filter import UserJourneySearchGraphFilter +from datadog_api_client.v1.model.user_journey_search_target import UserJourneySearchTarget +from datadog_api_client.v1.model.user_list_response import UserListResponse +from datadog_api_client.v1.model.user_response import UserResponse +from datadog_api_client.v1.model.viewing_preferences import ViewingPreferences +from datadog_api_client.v1.model.viewing_preferences_theme import ViewingPreferencesTheme +from datadog_api_client.v1.model.webhooks_integration import WebhooksIntegration +from datadog_api_client.v1.model.webhooks_integration_custom_variable import WebhooksIntegrationCustomVariable +from datadog_api_client.v1.model.webhooks_integration_custom_variable_response import WebhooksIntegrationCustomVariableResponse +from datadog_api_client.v1.model.webhooks_integration_custom_variable_update_request import WebhooksIntegrationCustomVariableUpdateRequest +from datadog_api_client.v1.model.webhooks_integration_encoding import WebhooksIntegrationEncoding +from datadog_api_client.v1.model.webhooks_integration_update_request import WebhooksIntegrationUpdateRequest +from datadog_api_client.v1.model.widget import Widget +from datadog_api_client.v1.model.widget_aggregator import WidgetAggregator +from datadog_api_client.v1.model.widget_axis import WidgetAxis +from datadog_api_client.v1.model.widget_change_type import WidgetChangeType +from datadog_api_client.v1.model.widget_color_preference import WidgetColorPreference +from datadog_api_client.v1.model.widget_comparator import WidgetComparator +from datadog_api_client.v1.model.widget_compare_to import WidgetCompareTo +from datadog_api_client.v1.model.widget_conditional_format import WidgetConditionalFormat +from datadog_api_client.v1.model.widget_custom_link import WidgetCustomLink +from datadog_api_client.v1.model.widget_definition import WidgetDefinition +from datadog_api_client.v1.model.widget_display_type import WidgetDisplayType +from datadog_api_client.v1.model.widget_event import WidgetEvent +from datadog_api_client.v1.model.widget_event_size import WidgetEventSize +from datadog_api_client.v1.model.widget_field_sort import WidgetFieldSort +from datadog_api_client.v1.model.widget_formula import WidgetFormula +from datadog_api_client.v1.model.widget_formula_cell_display_mode_options import WidgetFormulaCellDisplayModeOptions +from datadog_api_client.v1.model.widget_formula_cell_display_mode_options_trend_type import WidgetFormulaCellDisplayModeOptionsTrendType +from datadog_api_client.v1.model.widget_formula_cell_display_mode_options_y_scale import WidgetFormulaCellDisplayModeOptionsYScale +from datadog_api_client.v1.model.widget_formula_limit import WidgetFormulaLimit +from datadog_api_client.v1.model.widget_formula_sort import WidgetFormulaSort +from datadog_api_client.v1.model.widget_formula_style import WidgetFormulaStyle +from datadog_api_client.v1.model.widget_group_sort import WidgetGroupSort +from datadog_api_client.v1.model.widget_grouping import WidgetGrouping +from datadog_api_client.v1.model.widget_histogram_request_type import WidgetHistogramRequestType +from datadog_api_client.v1.model.widget_horizontal_align import WidgetHorizontalAlign +from datadog_api_client.v1.model.widget_image_sizing import WidgetImageSizing +from datadog_api_client.v1.model.widget_layout import WidgetLayout +from datadog_api_client.v1.model.widget_layout_type import WidgetLayoutType +from datadog_api_client.v1.model.widget_legacy_live_span import WidgetLegacyLiveSpan +from datadog_api_client.v1.model.widget_line_type import WidgetLineType +from datadog_api_client.v1.model.widget_line_width import WidgetLineWidth +from datadog_api_client.v1.model.widget_live_span import WidgetLiveSpan +from datadog_api_client.v1.model.widget_live_span_unit import WidgetLiveSpanUnit +from datadog_api_client.v1.model.widget_margin import WidgetMargin +from datadog_api_client.v1.model.widget_marker import WidgetMarker +from datadog_api_client.v1.model.widget_message_display import WidgetMessageDisplay +from datadog_api_client.v1.model.widget_monitor_summary_display_format import WidgetMonitorSummaryDisplayFormat +from datadog_api_client.v1.model.widget_monitor_summary_sort import WidgetMonitorSummarySort +from datadog_api_client.v1.model.widget_new_fixed_span import WidgetNewFixedSpan +from datadog_api_client.v1.model.widget_new_fixed_span_type import WidgetNewFixedSpanType +from datadog_api_client.v1.model.widget_new_live_span import WidgetNewLiveSpan +from datadog_api_client.v1.model.widget_new_live_span_type import WidgetNewLiveSpanType +from datadog_api_client.v1.model.widget_node_type import WidgetNodeType +from datadog_api_client.v1.model.widget_number_format import WidgetNumberFormat +from datadog_api_client.v1.model.widget_order_by import WidgetOrderBy +from datadog_api_client.v1.model.widget_palette import WidgetPalette +from datadog_api_client.v1.model.widget_request_style import WidgetRequestStyle +from datadog_api_client.v1.model.widget_service_summary_display_format import WidgetServiceSummaryDisplayFormat +from datadog_api_client.v1.model.widget_size_format import WidgetSizeFormat +from datadog_api_client.v1.model.widget_sort import WidgetSort +from datadog_api_client.v1.model.widget_sort_by import WidgetSortBy +from datadog_api_client.v1.model.widget_sort_order_by import WidgetSortOrderBy +from datadog_api_client.v1.model.widget_style import WidgetStyle +from datadog_api_client.v1.model.widget_style_order_by import WidgetStyleOrderBy +from datadog_api_client.v1.model.widget_summary_type import WidgetSummaryType +from datadog_api_client.v1.model.widget_text_align import WidgetTextAlign +from datadog_api_client.v1.model.widget_tick_edge import WidgetTickEdge +from datadog_api_client.v1.model.widget_time import WidgetTime +from datadog_api_client.v1.model.widget_time_windows import WidgetTimeWindows +from datadog_api_client.v1.model.widget_vertical_align import WidgetVerticalAlign +from datadog_api_client.v1.model.widget_view_mode import WidgetViewMode +from datadog_api_client.v1.model.widget_viz_type import WidgetVizType +from datadog_api_client.v1.model.wildcard_widget_definition import WildcardWidgetDefinition +from datadog_api_client.v1.model.wildcard_widget_definition_type import WildcardWidgetDefinitionType +from datadog_api_client.v1.model.wildcard_widget_request import WildcardWidgetRequest +from datadog_api_client.v1.model.wildcard_widget_specification import WildcardWidgetSpecification +from datadog_api_client.v1.model.wildcard_widget_specification_type import WildcardWidgetSpecificationType + +__all__ = [ + "APIErrorResponse", + "AWSAccount", + "AWSAccountAndLambdaRequest", + "AWSAccountCreateResponse", + "AWSAccountDeleteRequest", + "AWSAccountListResponse", + "AWSEventBridgeAccountConfiguration", + "AWSEventBridgeCreateRequest", + "AWSEventBridgeCreateResponse", + "AWSEventBridgeCreateStatus", + "AWSEventBridgeDeleteRequest", + "AWSEventBridgeDeleteResponse", + "AWSEventBridgeDeleteStatus", + "AWSEventBridgeListResponse", + "AWSEventBridgeSource", + "AWSLogsAsyncError", + "AWSLogsAsyncResponse", + "AWSLogsLambda", + "AWSLogsListResponse", + "AWSLogsListServicesResponse", + "AWSLogsServicesRequest", + "AWSNamespace", + "AWSTagFilter", + "AWSTagFilterCreateRequest", + "AWSTagFilterDeleteRequest", + "AWSTagFilterListResponse", + "AccessRole", + "AddSignalToIncidentRequest", + "AgentCheck", + "AlertGraphWidgetDefinition", + "AlertGraphWidgetDefinitionType", + "AlertValueWidgetDefinition", + "AlertValueWidgetDefinitionType", + "ApiKey", + "ApiKeyListResponse", + "ApiKeyResponse", + "ApmStatsQueryColumnType", + "ApmStatsQueryDefinition", + "ApmStatsQueryRowType", + "ApplicationKey", + "ApplicationKeyListResponse", + "ApplicationKeyResponse", + "AuthenticationValidationResponse", + "AzureAccount", + "AzureAccountListResponse", + "BarChartWidgetDefinition", + "BarChartWidgetDefinitionType", + "BarChartWidgetDisplay", + "BarChartWidgetFlat", + "BarChartWidgetFlatType", + "BarChartWidgetLegend", + "BarChartWidgetRequest", + "BarChartWidgetScaling", + "BarChartWidgetStacked", + "BarChartWidgetStackedType", + "BarChartWidgetStyle", + "CalendarInterval", + "CalendarIntervalType", + "CancelDowntimesByScopeRequest", + "CanceledDowntimesIds", + "ChangeWidgetDefinition", + "ChangeWidgetDefinitionType", + "ChangeWidgetRequest", + "CheckCanDeleteMonitorResponse", + "CheckCanDeleteMonitorResponseData", + "CheckCanDeleteSLOResponse", + "CheckCanDeleteSLOResponseData", + "CheckStatusWidgetDefinition", + "CheckStatusWidgetDefinitionType", + "CohortWidgetDefinition", + "CohortWidgetDefinitionType", + "ComparisonCustomTimeframe", + "ComparisonDuration", + "ComparisonDurationType", + "ContentEncoding", + "Creator", + "Dashboard", + "DashboardBulkActionData", + "DashboardBulkActionDataList", + "DashboardBulkDeleteRequest", + "DashboardDefaultTimeframeSetting", + "DashboardDeleteResponse", + "DashboardFixedTimeframe", + "DashboardFixedTimeframeType", + "DashboardGlobalTime", + "DashboardGlobalTimeLiveSpan", + "DashboardInviteType", + "DashboardLayoutType", + "DashboardList", + "DashboardListDeleteResponse", + "DashboardListListResponse", + "DashboardLiveTimeframe", + "DashboardLiveTimeframeType", + "DashboardReflowType", + "DashboardResourceType", + "DashboardRestoreRequest", + "DashboardShareType", + "DashboardSummary", + "DashboardSummaryDefinition", + "DashboardTab", + "DashboardTemplateVariable", + "DashboardTemplateVariablePreset", + "DashboardTemplateVariablePresetValue", + "DashboardType", + "DataProjectionQuery", + "DataProjectionRequestType", + "DatasetListQuery", + "DatasetListQueryDataSourceType", + "DatasetListQuerySort", + "DatasetListQuerySortField", + "DeleteSharedDashboardResponse", + "DeletedMonitor", + "DistributionPoint", + "DistributionPointsContentEncoding", + "DistributionPointsPayload", + "DistributionPointsSeries", + "DistributionPointsType", + "DistributionWidgetDefinition", + "DistributionWidgetDefinitionType", + "DistributionWidgetHistogramRequestQuery", + "DistributionWidgetRequest", + "DistributionWidgetXAxis", + "DistributionWidgetYAxis", + "Downtime", + "DowntimeChild", + "DowntimeRecurrence", + "Event", + "EventAlertType", + "EventCreateRequest", + "EventCreateResponse", + "EventListResponse", + "EventPriority", + "EventQueryDefinition", + "EventResponse", + "EventStreamWidgetDefinition", + "EventStreamWidgetDefinitionType", + "EventTimelineWidgetDefinition", + "EventTimelineWidgetDefinitionType", + "EventsAggregation", + "EventsAggregationValue", + "FormulaAndFunctionApmDependencyStatName", + "FormulaAndFunctionApmDependencyStatsDataSource", + "FormulaAndFunctionApmDependencyStatsQueryDefinition", + "FormulaAndFunctionApmMetricStatName", + "FormulaAndFunctionApmMetricsDataSource", + "FormulaAndFunctionApmMetricsQueryDefinition", + "FormulaAndFunctionApmMetricsSpanKind", + "FormulaAndFunctionApmResourceStatName", + "FormulaAndFunctionApmResourceStatsDataSource", + "FormulaAndFunctionApmResourceStatsQueryDefinition", + "FormulaAndFunctionCloudCostDataSource", + "FormulaAndFunctionCloudCostQueryDefinition", + "FormulaAndFunctionEventAggregation", + "FormulaAndFunctionEventQueryDefinition", + "FormulaAndFunctionEventQueryDefinitionCompute", + "FormulaAndFunctionEventQueryDefinitionSearch", + "FormulaAndFunctionEventQueryGroupBy", + "FormulaAndFunctionEventQueryGroupByConfig", + "FormulaAndFunctionEventQueryGroupByFields", + "FormulaAndFunctionEventQueryGroupBySort", + "FormulaAndFunctionEventsDataSource", + "FormulaAndFunctionMetricAggregation", + "FormulaAndFunctionMetricDataSource", + "FormulaAndFunctionMetricQueryDefinition", + "FormulaAndFunctionMetricSemanticMode", + "FormulaAndFunctionProcessQueryDataSource", + "FormulaAndFunctionProcessQueryDefinition", + "FormulaAndFunctionProductAnalyticsExtendedDataSource", + "FormulaAndFunctionProductAnalyticsExtendedQueryDefinition", + "FormulaAndFunctionProductAnalyticsExtendedQueryDefinitionIndexesItems", + "FormulaAndFunctionQueryDefinition", + "FormulaAndFunctionResponseFormat", + "FormulaAndFunctionRetentionQueryDefinition", + "FormulaAndFunctionSLODataSource", + "FormulaAndFunctionSLOGroupMode", + "FormulaAndFunctionSLOMeasure", + "FormulaAndFunctionSLOQueryDefinition", + "FormulaAndFunctionSLOQueryType", + "FormulaAndFunctionUserJourneyQueryDefinition", + "FormulaType", + "FreeTextWidgetDefinition", + "FreeTextWidgetDefinitionType", + "FunnelComparisonCustomTimeframe", + "FunnelComparisonDuration", + "FunnelComparisonDurationType", + "FunnelGroupedDisplay", + "FunnelQuery", + "FunnelRequestType", + "FunnelSource", + "FunnelStep", + "FunnelWidgetDefinition", + "FunnelWidgetDefinitionType", + "FunnelWidgetRequest", + "GCPAccount", + "GCPAccountListResponse", + "GCPMonitoredResourceConfig", + "GCPMonitoredResourceConfigType", + "GeomapWidgetDefinition", + "GeomapWidgetDefinitionStyle", + "GeomapWidgetDefinitionType", + "GeomapWidgetDefinitionView", + "GeomapWidgetRequest", + "GeomapWidgetRequestStyle", + "GraphSnapshot", + "GroupType", + "GroupWidgetDefinition", + "GroupWidgetDefinitionType", + "HTTPLog", + "HTTPLogError", + "HTTPLogItem", + "HeatMapWidgetDefinition", + "HeatMapWidgetDefinitionType", + "HeatMapWidgetRequest", + "HeatMapWidgetXAxis", + "Host", + "HostListResponse", + "HostMapRequest", + "HostMapWidgetDefinition", + "HostMapWidgetDefinitionRequestType", + "HostMapWidgetDefinitionRequests", + "HostMapWidgetDefinitionStyle", + "HostMapWidgetDefinitionType", + "HostMapWidgetDimension", + "HostMapWidgetFormula", + "HostMapWidgetGroupBy", + "HostMapWidgetInfrastructureRequest", + "HostMapWidgetInfrastructureRequestLeaf", + "HostMapWidgetInfrastructureRequestRequestType", + "HostMapWidgetInfrastructureStyle", + "HostMapWidgetNodeType", + "HostMapWidgetProjection", + "HostMapWidgetProjectionDimensionMapping", + "HostMapWidgetProjectionType", + "HostMapWidgetScalarRequest", + "HostMapWidgetScalarRequestResponseFormat", + "HostMeta", + "HostMetaInstallMethod", + "HostMetrics", + "HostMuteResponse", + "HostMuteSettings", + "HostTags", + "HostTotals", + "HourlyUsageAttributionBody", + "HourlyUsageAttributionMetadata", + "HourlyUsageAttributionPagination", + "HourlyUsageAttributionResponse", + "HourlyUsageAttributionUsageType", + "IFrameWidgetDefinition", + "IFrameWidgetDefinitionType", + "IPPrefixesAPI", + "IPPrefixesAPM", + "IPPrefixesAgents", + "IPPrefixesGlobal", + "IPPrefixesLogs", + "IPPrefixesOrchestrator", + "IPPrefixesProcess", + "IPPrefixesRemoteConfiguration", + "IPPrefixesSynthetics", + "IPPrefixesSyntheticsPrivateLocations", + "IPPrefixesWebhooks", + "IPRanges", + "IdpFormData", + "IdpResponse", + "ImageWidgetDefinition", + "ImageWidgetDefinitionType", + "IntakePayloadAccepted", + "ListStreamColumn", + "ListStreamColumnWidth", + "ListStreamComputeAggregation", + "ListStreamComputeItems", + "ListStreamGroupByItems", + "ListStreamIssuePersona", + "ListStreamIssueState", + "ListStreamQuery", + "ListStreamQueryVersion", + "ListStreamResponseFormat", + "ListStreamSource", + "ListStreamWidgetDefinition", + "ListStreamWidgetDefinitionType", + "ListStreamWidgetRequest", + "Log", + "LogContent", + "LogQueryDefinition", + "LogQueryDefinitionGroupBy", + "LogQueryDefinitionGroupBySort", + "LogQueryDefinitionSearch", + "LogStreamWidgetDefinition", + "LogStreamWidgetDefinitionType", + "LogsAPIError", + "LogsAPIErrorResponse", + "LogsAPILimitReachedResponse", + "LogsArithmeticProcessor", + "LogsArithmeticProcessorType", + "LogsArrayMapArithmeticSubProcessor", + "LogsArrayMapAttributeRemapper", + "LogsArrayMapCategorySubProcessor", + "LogsArrayMapProcessor", + "LogsArrayMapProcessorType", + "LogsArrayMapStringBuilderSubProcessor", + "LogsArrayMapSubProcessor", + "LogsArrayProcessor", + "LogsArrayProcessorOperation", + "LogsArrayProcessorOperationAppend", + "LogsArrayProcessorOperationAppendType", + "LogsArrayProcessorOperationExtractKeyValue", + "LogsArrayProcessorOperationExtractKeyValueType", + "LogsArrayProcessorOperationLength", + "LogsArrayProcessorOperationLengthType", + "LogsArrayProcessorOperationSelect", + "LogsArrayProcessorOperationSelectType", + "LogsArrayProcessorType", + "LogsAttributeRemapper", + "LogsAttributeRemapperType", + "LogsByRetention", + "LogsByRetentionMonthlyUsage", + "LogsByRetentionOrgUsage", + "LogsByRetentionOrgs", + "LogsCategoryProcessor", + "LogsCategoryProcessorCategory", + "LogsCategoryProcessorType", + "LogsDailyLimitReset", + "LogsDateRemapper", + "LogsDateRemapperType", + "LogsDecoderProcessor", + "LogsDecoderProcessorBinaryToTextEncoding", + "LogsDecoderProcessorInputRepresentation", + "LogsDecoderProcessorType", + "LogsExcludeAttributeProcessor", + "LogsExcludeAttributeProcessorType", + "LogsExclusion", + "LogsExclusionFilter", + "LogsFilter", + "LogsGeoIPParser", + "LogsGeoIPParserType", + "LogsGrokParser", + "LogsGrokParserRules", + "LogsGrokParserType", + "LogsIndex", + "LogsIndexListResponse", + "LogsIndexUpdateRequest", + "LogsIndexesOrder", + "LogsListRequest", + "LogsListRequestTime", + "LogsListResponse", + "LogsLookupProcessor", + "LogsLookupProcessorType", + "LogsMessageRemapper", + "LogsMessageRemapperType", + "LogsPipeline", + "LogsPipelineList", + "LogsPipelineProcessor", + "LogsPipelineProcessorType", + "LogsPipelinesOrder", + "LogsProcessor", + "LogsQueryCompute", + "LogsRetentionAggSumUsage", + "LogsRetentionSumUsage", + "LogsSchemaCategoryMapper", + "LogsSchemaCategoryMapperCategory", + "LogsSchemaCategoryMapperFallback", + "LogsSchemaCategoryMapperTargets", + "LogsSchemaCategoryMapperType", + "LogsSchemaData", + "LogsSchemaMapper", + "LogsSchemaProcessor", + "LogsSchemaProcessorType", + "LogsSchemaRemapper", + "LogsSchemaRemapperType", + "LogsServiceRemapper", + "LogsServiceRemapperType", + "LogsSort", + "LogsSpanRemapper", + "LogsSpanRemapperType", + "LogsStatusRemapper", + "LogsStatusRemapperType", + "LogsStringBuilderProcessor", + "LogsStringBuilderProcessorType", + "LogsTraceRemapper", + "LogsTraceRemapperType", + "LogsURLParser", + "LogsURLParserType", + "LogsUserAgentParser", + "LogsUserAgentParserType", + "MatchingDowntime", + "MetricContentEncoding", + "MetricMetadata", + "MetricSearchResponse", + "MetricSearchResponseResults", + "MetricsListResponse", + "MetricsPayload", + "MetricsQueryMetadata", + "MetricsQueryResponse", + "MetricsQueryUnit", + "Monitor", + "MonitorAsset", + "MonitorAssetCategory", + "MonitorAssetResourceType", + "MonitorDeviceID", + "MonitorDraftStatus", + "MonitorFormulaAndFunctionAggregateAugmentQuery", + "MonitorFormulaAndFunctionAggregateAugmentedDataSource", + "MonitorFormulaAndFunctionAggregateAugmentedQueryDefinition", + "MonitorFormulaAndFunctionAggregateBaseQuery", + "MonitorFormulaAndFunctionAggregateFilterQuery", + "MonitorFormulaAndFunctionAggregateFilteredDataSource", + "MonitorFormulaAndFunctionAggregateFilteredQueryDefinition", + "MonitorFormulaAndFunctionAggregateQueryFilter", + "MonitorFormulaAndFunctionAggregateQueryJoinCondition", + "MonitorFormulaAndFunctionAggregateQueryJoinType", + "MonitorFormulaAndFunctionCostAggregator", + "MonitorFormulaAndFunctionCostDataSource", + "MonitorFormulaAndFunctionCostQueryDefinition", + "MonitorFormulaAndFunctionDataJobsQueryDefinition", + "MonitorFormulaAndFunctionDataQualityDataSource", + "MonitorFormulaAndFunctionDataQualityModelTypeOverride", + "MonitorFormulaAndFunctionDataQualityMonitorOptions", + "MonitorFormulaAndFunctionDataQualityQueryDefinition", + "MonitorFormulaAndFunctionEventAggregation", + "MonitorFormulaAndFunctionEventQueryDefinition", + "MonitorFormulaAndFunctionEventQueryDefinitionCompute", + "MonitorFormulaAndFunctionEventQueryDefinitionSearch", + "MonitorFormulaAndFunctionEventQueryGroupBy", + "MonitorFormulaAndFunctionEventQueryGroupBySort", + "MonitorFormulaAndFunctionEventsDataSource", + "MonitorFormulaAndFunctionMetricsAggregator", + "MonitorFormulaAndFunctionMetricsDataSource", + "MonitorFormulaAndFunctionMetricsQueryDefinition", + "MonitorFormulaAndFunctionQueryDefinition", + "MonitorFormulaAndFunctionReferenceTableColumn", + "MonitorFormulaAndFunctionReferenceTableDataSource", + "MonitorFormulaAndFunctionReferenceTableQueryDefinition", + "MonitorGroupSearchResponse", + "MonitorGroupSearchResponseCounts", + "MonitorGroupSearchResult", + "MonitorOptions", + "MonitorOptionsAggregation", + "MonitorOptionsCustomSchedule", + "MonitorOptionsCustomScheduleRecurrence", + "MonitorOptionsNotificationPresets", + "MonitorOptionsSchedulingOptions", + "MonitorOptionsSchedulingOptionsEvaluationWindow", + "MonitorOverallStates", + "MonitorRenotifyStatusType", + "MonitorSearchCount", + "MonitorSearchCountItem", + "MonitorSearchResponse", + "MonitorSearchResponseCounts", + "MonitorSearchResponseMetadata", + "MonitorSearchResult", + "MonitorSearchResultNotification", + "MonitorState", + "MonitorStateGroup", + "MonitorSummaryWidgetDefinition", + "MonitorSummaryWidgetDefinitionType", + "MonitorThresholdWindowOptions", + "MonitorThresholds", + "MonitorType", + "MonitorUpdateRequest", + "MonthlyUsageAttributionBody", + "MonthlyUsageAttributionMetadata", + "MonthlyUsageAttributionPagination", + "MonthlyUsageAttributionResponse", + "MonthlyUsageAttributionSupportedMetrics", + "MonthlyUsageAttributionValues", + "NoteWidgetDefinition", + "NoteWidgetDefinitionType", + "NotebookAbsoluteTime", + "NotebookAuthor", + "NotebookCellCreateRequest", + "NotebookCellCreateRequestAttributes", + "NotebookCellResourceType", + "NotebookCellResponse", + "NotebookCellResponseAttributes", + "NotebookCellTime", + "NotebookCellUpdateRequest", + "NotebookCellUpdateRequestAttributes", + "NotebookCreateData", + "NotebookCreateDataAttributes", + "NotebookCreateRequest", + "NotebookDistributionCellAttributes", + "NotebookGlobalTime", + "NotebookGraphSize", + "NotebookHeatMapCellAttributes", + "NotebookLogStreamCellAttributes", + "NotebookMarkdownCellAttributes", + "NotebookMarkdownCellDefinition", + "NotebookMarkdownCellDefinitionType", + "NotebookMetadata", + "NotebookMetadataType", + "NotebookRelativeTime", + "NotebookResourceType", + "NotebookResponse", + "NotebookResponseData", + "NotebookResponseDataAttributes", + "NotebookSplitBy", + "NotebookStatus", + "NotebookTemplateVariable", + "NotebookTemplateVariableAvailableValuesQuery", + "NotebookTemplateVariableAvailableValuesQueryGroupBy", + "NotebookTemplateVariableAvailableValuesQueryLogRumSpans", + "NotebookTemplateVariableAvailableValuesQueryMetrics", + "NotebookTemplateVariableAvailableValuesQuerySearch", + "NotebookTimeseriesCellAttributes", + "NotebookToplistCellAttributes", + "NotebookUpdateCell", + "NotebookUpdateData", + "NotebookUpdateDataAttributes", + "NotebookUpdateRequest", + "NotebooksResponse", + "NotebooksResponseData", + "NotebooksResponseDataAttributes", + "NotebooksResponseMeta", + "NotebooksResponsePage", + "NotifyEndState", + "NotifyEndType", + "NumberFormatUnit", + "NumberFormatUnitCanonical", + "NumberFormatUnitCustom", + "NumberFormatUnitCustomType", + "NumberFormatUnitScale", + "NumberFormatUnitScaleType", + "OnMissingDataOption", + "OrgDowngradedResponse", + "Organization", + "OrganizationBilling", + "OrganizationCreateBody", + "OrganizationCreateResponse", + "OrganizationListResponse", + "OrganizationResponse", + "OrganizationSettings", + "OrganizationSettingsSaml", + "OrganizationSettingsSamlAutocreateUsersDomains", + "OrganizationSettingsSamlIdpInitiatedLogin", + "OrganizationSettingsSamlStrictMode", + "OrganizationSubscription", + "PagerDutyService", + "PagerDutyServiceKey", + "PagerDutyServiceName", + "Pagination", + "Point", + "PointPlotDimension", + "PointPlotProjection", + "PointPlotProjectionDimension", + "PointPlotProjectionType", + "PointPlotWidgetDefinition", + "PointPlotWidgetDefinitionType", + "PointPlotWidgetLegend", + "PointPlotWidgetLegendType", + "PointPlotWidgetRequest", + "PowerpackTemplateVariableContents", + "PowerpackTemplateVariables", + "PowerpackWidgetDefinition", + "PowerpackWidgetDefinitionType", + "ProcessQueryDefinition", + "ProductAnalyticsAudienceAccountSubquery", + "ProductAnalyticsAudienceFilters", + "ProductAnalyticsAudienceOccurrenceFilter", + "ProductAnalyticsAudienceSegmentSubquery", + "ProductAnalyticsAudienceUserSubquery", + "ProductAnalyticsBaseQuery", + "ProductAnalyticsEventDataSource", + "ProductAnalyticsEventQuerySearch", + "ProductAnalyticsExtendedCompute", + "ProductAnalyticsExtendedGroupBy", + "ProductAnalyticsFunnelCompute", + "ProductAnalyticsFunnelComputeAggregation", + "ProductAnalyticsFunnelComputeMetric", + "ProductAnalyticsFunnelDataSource", + "ProductAnalyticsFunnelGroupBy", + "ProductAnalyticsFunnelGroupBySort", + "ProductAnalyticsFunnelQuery", + "ProductAnalyticsFunnelRequest", + "ProductAnalyticsFunnelRequestType", + "ProductAnalyticsFunnelWidgetDefinition", + "PublishedDatasetProvider", + "QuerySortOrder", + "QueryValueWidgetComparison", + "QueryValueWidgetComparisonDirectionality", + "QueryValueWidgetComparisonType", + "QueryValueWidgetDefinition", + "QueryValueWidgetDefinitionType", + "QueryValueWidgetRequest", + "ReferenceTableLogsLookupProcessor", + "ResourceProviderConfig", + "ResponseMetaAttributes", + "RetentionCohortCriteria", + "RetentionCohortCriteriaTimeInterval", + "RetentionCohortCriteriaTimeIntervalType", + "RetentionCompute", + "RetentionComputeMetric", + "RetentionCurveRequestType", + "RetentionCurveStyle", + "RetentionCurveWidgetDefinition", + "RetentionCurveWidgetDefinitionType", + "RetentionCurveWidgetRequest", + "RetentionDataSource", + "RetentionEntity", + "RetentionFilters", + "RetentionGridRequest", + "RetentionGridRequestType", + "RetentionGroupBy", + "RetentionGroupBySort", + "RetentionGroupByTarget", + "RetentionQuery", + "RetentionReturnCondition", + "RetentionReturnCriteria", + "RetentionReturnCriteriaTimeInterval", + "RetentionReturnCriteriaTimeIntervalType", + "RetentionReturnCriteriaTimeIntervalUnit", + "RetentionSearch", + "RunWorkflowWidgetDefinition", + "RunWorkflowWidgetDefinitionType", + "RunWorkflowWidgetInput", + "SLOBulkDelete", + "SLOBulkDeleteError", + "SLOBulkDeleteResponse", + "SLOBulkDeleteResponseData", + "SLOCorrection", + "SLOCorrectionCategory", + "SLOCorrectionCreateData", + "SLOCorrectionCreateRequest", + "SLOCorrectionCreateRequestAttributes", + "SLOCorrectionListResponse", + "SLOCorrectionResponse", + "SLOCorrectionResponseAttributes", + "SLOCorrectionResponseAttributesModifier", + "SLOCorrectionType", + "SLOCorrectionUpdateData", + "SLOCorrectionUpdateRequest", + "SLOCorrectionUpdateRequestAttributes", + "SLOCountDefinition", + "SLOCountDefinitionWithBadEventsFormula", + "SLOCountDefinitionWithTotalEventsFormula", + "SLOCountSpec", + "SLOCreator", + "SLODataSourceQueryDefinition", + "SLODeleteResponse", + "SLOErrorBudgetRemainingData", + "SLOErrorTimeframe", + "SLOFormula", + "SLOHistoryMetrics", + "SLOHistoryMetricsSeries", + "SLOHistoryMetricsSeriesMetadata", + "SLOHistoryMetricsSeriesMetadataUnit", + "SLOHistoryMonitor", + "SLOHistoryResponse", + "SLOHistoryResponseData", + "SLOHistoryResponseError", + "SLOHistoryResponseErrorWithType", + "SLOHistorySLIData", + "SLOListResponse", + "SLOListResponseMetadata", + "SLOListResponseMetadataPage", + "SLOListWidgetDefinition", + "SLOListWidgetDefinitionType", + "SLOListWidgetQuery", + "SLOListWidgetRequest", + "SLOListWidgetRequestType", + "SLOOverallStatuses", + "SLORawErrorBudgetRemaining", + "SLOResponse", + "SLOResponseData", + "SLOSliSpec", + "SLOState", + "SLOStatus", + "SLOThreshold", + "SLOTimeSliceComparator", + "SLOTimeSliceCondition", + "SLOTimeSliceInterval", + "SLOTimeSliceQuery", + "SLOTimeSliceSpec", + "SLOTimeframe", + "SLOType", + "SLOTypeNumeric", + "SLOWidgetDefinition", + "SLOWidgetDefinitionType", + "SankeyJoinKeys", + "SankeyNetworkDataSource", + "SankeyNetworkQuery", + "SankeyNetworkQueryCompute", + "SankeyNetworkQueryMode", + "SankeyNetworkQuerySort", + "SankeyNetworkRequest", + "SankeyNetworkRequestType", + "SankeyRumDataSource", + "SankeyRumQuery", + "SankeyRumQueryMode", + "SankeyRumRequest", + "SankeyWidgetDefinition", + "SankeyWidgetDefinitionType", + "SankeyWidgetRequest", + "ScatterPlotRequest", + "ScatterPlotWidgetDefinition", + "ScatterPlotWidgetDefinitionRequests", + "ScatterPlotWidgetDefinitionType", + "ScatterplotDimension", + "ScatterplotTableRequest", + "ScatterplotWidgetAggregator", + "ScatterplotWidgetFormula", + "SearchSLOQuery", + "SearchSLOResponse", + "SearchSLOResponseData", + "SearchSLOResponseDataAttributes", + "SearchSLOResponseDataAttributesFacets", + "SearchSLOResponseDataAttributesFacetsObjectInt", + "SearchSLOResponseDataAttributesFacetsObjectString", + "SearchSLOResponseLinks", + "SearchSLOResponseMeta", + "SearchSLOResponseMetaPage", + "SearchSLOThreshold", + "SearchSLOTimeframe", + "SearchServiceLevelObjective", + "SearchServiceLevelObjectiveAttributes", + "SearchServiceLevelObjectiveData", + "SelectableTemplateVariableItems", + "Series", + "ServiceCheck", + "ServiceCheckStatus", + "ServiceChecks", + "ServiceLevelObjective", + "ServiceLevelObjectiveQuery", + "ServiceLevelObjectiveRequest", + "ServiceMapWidgetDefinition", + "ServiceMapWidgetDefinitionType", + "ServiceSummaryWidgetDefinition", + "ServiceSummaryWidgetDefinitionType", + "SharedDashboard", + "SharedDashboardAuthor", + "SharedDashboardInviteesItems", + "SharedDashboardInvites", + "SharedDashboardInvitesData", + "SharedDashboardInvitesDataList", + "SharedDashboardInvitesDataObject", + "SharedDashboardInvitesDataObjectAttributes", + "SharedDashboardInvitesMeta", + "SharedDashboardInvitesMetaPage", + "SharedDashboardStatus", + "SharedDashboardUpdateRequest", + "SharedDashboardUpdateRequestGlobalTime", + "SignalArchiveReason", + "SignalAssigneeUpdateRequest", + "SignalStateUpdateRequest", + "SignalTriageState", + "SlackIntegrationChannel", + "SlackIntegrationChannelDisplay", + "SlackIntegrationChannels", + "SplitConfig", + "SplitConfigSortCompute", + "SplitDimension", + "SplitGraphSourceWidgetDefinition", + "SplitGraphVizSize", + "SplitGraphWidgetDefinition", + "SplitGraphWidgetDefinitionType", + "SplitSort", + "SplitVectorEntryItem", + "SuccessfulSignalUpdateResponse", + "SunburstWidgetDefinition", + "SunburstWidgetDefinitionType", + "SunburstWidgetLegend", + "SunburstWidgetLegendInlineAutomatic", + "SunburstWidgetLegendInlineAutomaticType", + "SunburstWidgetLegendTable", + "SunburstWidgetLegendTableType", + "SunburstWidgetRequest", + "SyntheticsAPIStep", + "SyntheticsAPISubtestStep", + "SyntheticsAPISubtestStepSubtype", + "SyntheticsAPITest", + "SyntheticsAPITestConfig", + "SyntheticsAPITestResultData", + "SyntheticsAPITestResultFull", + "SyntheticsAPITestResultFullCheck", + "SyntheticsAPITestResultShort", + "SyntheticsAPITestResultShortResult", + "SyntheticsAPITestStep", + "SyntheticsAPITestStepSubtype", + "SyntheticsAPITestType", + "SyntheticsAPIWaitStep", + "SyntheticsAPIWaitStepSubtype", + "SyntheticsApiTestFailureCode", + "SyntheticsApiTestResultFailure", + "SyntheticsAssertion", + "SyntheticsAssertionBodyHashOperator", + "SyntheticsAssertionBodyHashTarget", + "SyntheticsAssertionBodyHashType", + "SyntheticsAssertionJSONPathOperator", + "SyntheticsAssertionJSONPathTarget", + "SyntheticsAssertionJSONPathTargetTarget", + "SyntheticsAssertionJSONSchemaMetaSchema", + "SyntheticsAssertionJSONSchemaOperator", + "SyntheticsAssertionJSONSchemaTarget", + "SyntheticsAssertionJSONSchemaTargetTarget", + "SyntheticsAssertionJavascript", + "SyntheticsAssertionJavascriptType", + "SyntheticsAssertionMCPRespectsSpecification", + "SyntheticsAssertionMCPRespectsSpecificationType", + "SyntheticsAssertionMCPServerCapabilitiesTarget", + "SyntheticsAssertionMCPServerCapabilitiesType", + "SyntheticsAssertionOperator", + "SyntheticsAssertionTarget", + "SyntheticsAssertionTargetValue", + "SyntheticsAssertionTimingsScope", + "SyntheticsAssertionType", + "SyntheticsAssertionXPathOperator", + "SyntheticsAssertionXPathTarget", + "SyntheticsAssertionXPathTargetTarget", + "SyntheticsBasicAuth", + "SyntheticsBasicAuthDigest", + "SyntheticsBasicAuthDigestType", + "SyntheticsBasicAuthJWT", + "SyntheticsBasicAuthJWTAddClaims", + "SyntheticsBasicAuthJWTAlgorithm", + "SyntheticsBasicAuthJWTType", + "SyntheticsBasicAuthNTLM", + "SyntheticsBasicAuthNTLMType", + "SyntheticsBasicAuthOauthClient", + "SyntheticsBasicAuthOauthClientType", + "SyntheticsBasicAuthOauthROP", + "SyntheticsBasicAuthOauthROPType", + "SyntheticsBasicAuthOauthTokenApiAuthentication", + "SyntheticsBasicAuthSigv4", + "SyntheticsBasicAuthSigv4Type", + "SyntheticsBasicAuthWeb", + "SyntheticsBasicAuthWebType", + "SyntheticsBatchDetails", + "SyntheticsBatchDetailsData", + "SyntheticsBatchResult", + "SyntheticsBatchStatus", + "SyntheticsBrowserError", + "SyntheticsBrowserErrorType", + "SyntheticsBrowserTest", + "SyntheticsBrowserTestConfig", + "SyntheticsBrowserTestFailureCode", + "SyntheticsBrowserTestResultData", + "SyntheticsBrowserTestResultFailure", + "SyntheticsBrowserTestResultFull", + "SyntheticsBrowserTestResultFullCheck", + "SyntheticsBrowserTestResultShort", + "SyntheticsBrowserTestResultShortResult", + "SyntheticsBrowserTestRumSettings", + "SyntheticsBrowserTestType", + "SyntheticsBrowserVariable", + "SyntheticsBrowserVariableType", + "SyntheticsCIBatchMetadata", + "SyntheticsCIBatchMetadataCI", + "SyntheticsCIBatchMetadataGit", + "SyntheticsCIBatchMetadataPipeline", + "SyntheticsCIBatchMetadataProvider", + "SyntheticsCITest", + "SyntheticsCITestBody", + "SyntheticsCheckType", + "SyntheticsConfigVariable", + "SyntheticsConfigVariableType", + "SyntheticsCoreWebVitals", + "SyntheticsDeleteTestsPayload", + "SyntheticsDeleteTestsResponse", + "SyntheticsDeletedTest", + "SyntheticsDevice", + "SyntheticsFetchUptimesPayload", + "SyntheticsGetAPITestLatestResultsResponse", + "SyntheticsGetBrowserTestLatestResultsResponse", + "SyntheticsGlobalVariable", + "SyntheticsGlobalVariableAttributes", + "SyntheticsGlobalVariableOptions", + "SyntheticsGlobalVariableParseTestOptions", + "SyntheticsGlobalVariableParseTestOptionsType", + "SyntheticsGlobalVariableParserType", + "SyntheticsGlobalVariableRequest", + "SyntheticsGlobalVariableTOTPParameters", + "SyntheticsGlobalVariableValue", + "SyntheticsListGlobalVariablesResponse", + "SyntheticsListTestsResponse", + "SyntheticsLocalVariableParsingOptionsType", + "SyntheticsLocation", + "SyntheticsLocations", + "SyntheticsMCPProtocolVersion", + "SyntheticsMCPServerCapability", + "SyntheticsMobileStep", + "SyntheticsMobileStepParams", + "SyntheticsMobileStepParamsDirection", + "SyntheticsMobileStepParamsElement", + "SyntheticsMobileStepParamsElementContextType", + "SyntheticsMobileStepParamsElementRelativePosition", + "SyntheticsMobileStepParamsElementUserLocator", + "SyntheticsMobileStepParamsElementUserLocatorValuesItems", + "SyntheticsMobileStepParamsElementUserLocatorValuesItemsType", + "SyntheticsMobileStepParamsPositionsItems", + "SyntheticsMobileStepParamsValue", + "SyntheticsMobileStepParamsVariable", + "SyntheticsMobileStepType", + "SyntheticsMobileTest", + "SyntheticsMobileTestConfig", + "SyntheticsMobileTestInitialApplicationArguments", + "SyntheticsMobileTestOptions", + "SyntheticsMobileTestType", + "SyntheticsMobileTestsMobileApplication", + "SyntheticsMobileTestsMobileApplicationReferenceType", + "SyntheticsParsingOptions", + "SyntheticsPatchTestBody", + "SyntheticsPatchTestOperation", + "SyntheticsPatchTestOperationName", + "SyntheticsPlayingTab", + "SyntheticsPrivateLocation", + "SyntheticsPrivateLocationCreationResponse", + "SyntheticsPrivateLocationCreationResponseResultEncryption", + "SyntheticsPrivateLocationMetadata", + "SyntheticsPrivateLocationSecrets", + "SyntheticsPrivateLocationSecretsAuthentication", + "SyntheticsPrivateLocationSecretsConfigDecryption", + "SyntheticsRestrictedRoles", + "SyntheticsSSLCertificate", + "SyntheticsSSLCertificateIssuer", + "SyntheticsSSLCertificateSubject", + "SyntheticsStep", + "SyntheticsStepDetail", + "SyntheticsStepDetailWarning", + "SyntheticsStepType", + "SyntheticsTestCallType", + "SyntheticsTestCiOptions", + "SyntheticsTestConfig", + "SyntheticsTestDetails", + "SyntheticsTestDetailsSubType", + "SyntheticsTestDetailsType", + "SyntheticsTestDetailsWithoutSteps", + "SyntheticsTestExecutionRule", + "SyntheticsTestHeaders", + "SyntheticsTestMetadata", + "SyntheticsTestMonitorStatus", + "SyntheticsTestOptions", + "SyntheticsTestOptionsHTTPVersion", + "SyntheticsTestOptionsMonitorOptions", + "SyntheticsTestOptionsMonitorOptionsNotificationPresetName", + "SyntheticsTestOptionsRetry", + "SyntheticsTestOptionsScheduling", + "SyntheticsTestOptionsSchedulingTimeframe", + "SyntheticsTestPauseStatus", + "SyntheticsTestProcessStatus", + "SyntheticsTestRequest", + "SyntheticsTestRequestBodyFile", + "SyntheticsTestRequestBodyType", + "SyntheticsTestRequestCertificate", + "SyntheticsTestRequestCertificateItem", + "SyntheticsTestRequestDNSServerPort", + "SyntheticsTestRequestPort", + "SyntheticsTestRequestProxy", + "SyntheticsTestRestrictionPolicyBinding", + "SyntheticsTestRestrictionPolicyBindingRelation", + "SyntheticsTestUptime", + "SyntheticsTiming", + "SyntheticsTriggerBody", + "SyntheticsTriggerCITestLocation", + "SyntheticsTriggerCITestRunResult", + "SyntheticsTriggerCITestsResponse", + "SyntheticsTriggerTest", + "SyntheticsUpdateTestPauseStatusPayload", + "SyntheticsUptime", + "SyntheticsVariableParser", + "SyntheticsWarningType", + "TableWidgetCellDisplayMode", + "TableWidgetDefinition", + "TableWidgetDefinitionType", + "TableWidgetHasSearchBar", + "TableWidgetRequest", + "TableWidgetTextFormatMatch", + "TableWidgetTextFormatMatchType", + "TableWidgetTextFormatPalette", + "TableWidgetTextFormatReplace", + "TableWidgetTextFormatReplaceAll", + "TableWidgetTextFormatReplaceAllType", + "TableWidgetTextFormatReplaceSubstring", + "TableWidgetTextFormatReplaceSubstringType", + "TableWidgetTextFormatRule", + "TagToHosts", + "TargetFormatType", + "TimeseriesBackground", + "TimeseriesBackgroundType", + "TimeseriesRequestStyle", + "TimeseriesWidgetDefinition", + "TimeseriesWidgetDefinitionType", + "TimeseriesWidgetExpressionAlias", + "TimeseriesWidgetLegendColumn", + "TimeseriesWidgetLegendLayout", + "TimeseriesWidgetRequest", + "ToplistWidgetDefinition", + "ToplistWidgetDefinitionType", + "ToplistWidgetDisplay", + "ToplistWidgetFlat", + "ToplistWidgetFlatType", + "ToplistWidgetLegend", + "ToplistWidgetRequest", + "ToplistWidgetScaling", + "ToplistWidgetStacked", + "ToplistWidgetStackedType", + "ToplistWidgetStyle", + "TopologyMapWidgetDefinition", + "TopologyMapWidgetDefinitionDataStreams", + "TopologyMapWidgetDefinitionServiceMap", + "TopologyMapWidgetDefinitionType", + "TopologyQueryDataStreams", + "TopologyQueryDataStreamsDataSource", + "TopologyQueryServiceMap", + "TopologyQueryServiceMapDataSource", + "TopologyRequestDataStreams", + "TopologyRequestServiceMap", + "TopologyRequestType", + "TreeMapColorBy", + "TreeMapGroupBy", + "TreeMapSizeBy", + "TreeMapWidgetDefinition", + "TreeMapWidgetDefinitionType", + "TreeMapWidgetRequest", + "UsageAnalyzedLogsHour", + "UsageAnalyzedLogsResponse", + "UsageAttributionAggregates", + "UsageAttributionAggregatesBody", + "UsageAttributionTagNames", + "UsageAuditLogsHour", + "UsageAuditLogsResponse", + "UsageBillableSummaryBody", + "UsageBillableSummaryHour", + "UsageBillableSummaryKeys", + "UsageBillableSummaryResponse", + "UsageCIVisibilityHour", + "UsageCIVisibilityResponse", + "UsageCWSHour", + "UsageCWSResponse", + "UsageCloudSecurityPostureManagementHour", + "UsageCloudSecurityPostureManagementResponse", + "UsageCustomReportsAttributes", + "UsageCustomReportsData", + "UsageCustomReportsMeta", + "UsageCustomReportsPage", + "UsageCustomReportsResponse", + "UsageDBMHour", + "UsageDBMResponse", + "UsageFargateHour", + "UsageFargateResponse", + "UsageHostHour", + "UsageHostsResponse", + "UsageIncidentManagementHour", + "UsageIncidentManagementResponse", + "UsageIndexedSpansHour", + "UsageIndexedSpansResponse", + "UsageIngestedSpansHour", + "UsageIngestedSpansResponse", + "UsageIoTHour", + "UsageIoTResponse", + "UsageLambdaHour", + "UsageLambdaResponse", + "UsageLogsByIndexHour", + "UsageLogsByIndexResponse", + "UsageLogsByRetentionHour", + "UsageLogsByRetentionResponse", + "UsageLogsHour", + "UsageLogsResponse", + "UsageMetricCategory", + "UsageNetworkFlowsHour", + "UsageNetworkFlowsResponse", + "UsageNetworkHostsHour", + "UsageNetworkHostsResponse", + "UsageOnlineArchiveHour", + "UsageOnlineArchiveResponse", + "UsageProfilingHour", + "UsageProfilingResponse", + "UsageReportsType", + "UsageRumSessionsHour", + "UsageRumSessionsResponse", + "UsageRumUnitsHour", + "UsageRumUnitsResponse", + "UsageSDSHour", + "UsageSDSResponse", + "UsageSNMPHour", + "UsageSNMPResponse", + "UsageSort", + "UsageSortDirection", + "UsageSpecifiedCustomReportsAttributes", + "UsageSpecifiedCustomReportsData", + "UsageSpecifiedCustomReportsMeta", + "UsageSpecifiedCustomReportsPage", + "UsageSpecifiedCustomReportsResponse", + "UsageSummaryDate", + "UsageSummaryDateOrg", + "UsageSummaryResponse", + "UsageSyntheticsAPIHour", + "UsageSyntheticsAPIResponse", + "UsageSyntheticsBrowserHour", + "UsageSyntheticsBrowserResponse", + "UsageSyntheticsHour", + "UsageSyntheticsResponse", + "UsageTimeseriesHour", + "UsageTimeseriesResponse", + "UsageTopAvgMetricsHour", + "UsageTopAvgMetricsMetadata", + "UsageTopAvgMetricsPagination", + "UsageTopAvgMetricsResponse", + "User", + "UserDisableResponse", + "UserJourneyFormulaCompute", + "UserJourneyFormulaComputeMetric", + "UserJourneyFormulaGroupBy", + "UserJourneyJoinKeys", + "UserJourneySearch", + "UserJourneySearchFilters", + "UserJourneySearchGraphFilter", + "UserJourneySearchTarget", + "UserListResponse", + "UserResponse", + "ViewingPreferences", + "ViewingPreferencesTheme", + "WebhooksIntegration", + "WebhooksIntegrationCustomVariable", + "WebhooksIntegrationCustomVariableResponse", + "WebhooksIntegrationCustomVariableUpdateRequest", + "WebhooksIntegrationEncoding", + "WebhooksIntegrationUpdateRequest", + "Widget", + "WidgetAggregator", + "WidgetAxis", + "WidgetChangeType", + "WidgetColorPreference", + "WidgetComparator", + "WidgetCompareTo", + "WidgetConditionalFormat", + "WidgetCustomLink", + "WidgetDefinition", + "WidgetDisplayType", + "WidgetEvent", + "WidgetEventSize", + "WidgetFieldSort", + "WidgetFormula", + "WidgetFormulaCellDisplayModeOptions", + "WidgetFormulaCellDisplayModeOptionsTrendType", + "WidgetFormulaCellDisplayModeOptionsYScale", + "WidgetFormulaLimit", + "WidgetFormulaSort", + "WidgetFormulaStyle", + "WidgetGroupSort", + "WidgetGrouping", + "WidgetHistogramRequestType", + "WidgetHorizontalAlign", + "WidgetImageSizing", + "WidgetLayout", + "WidgetLayoutType", + "WidgetLegacyLiveSpan", + "WidgetLineType", + "WidgetLineWidth", + "WidgetLiveSpan", + "WidgetLiveSpanUnit", + "WidgetMargin", + "WidgetMarker", + "WidgetMessageDisplay", + "WidgetMonitorSummaryDisplayFormat", + "WidgetMonitorSummarySort", + "WidgetNewFixedSpan", + "WidgetNewFixedSpanType", + "WidgetNewLiveSpan", + "WidgetNewLiveSpanType", + "WidgetNodeType", + "WidgetNumberFormat", + "WidgetOrderBy", + "WidgetPalette", + "WidgetRequestStyle", + "WidgetServiceSummaryDisplayFormat", + "WidgetSizeFormat", + "WidgetSort", + "WidgetSortBy", + "WidgetSortOrderBy", + "WidgetStyle", + "WidgetStyleOrderBy", + "WidgetSummaryType", + "WidgetTextAlign", + "WidgetTickEdge", + "WidgetTime", + "WidgetTimeWindows", + "WidgetVerticalAlign", + "WidgetViewMode", + "WidgetVizType", + "WildcardWidgetDefinition", + "WildcardWidgetDefinitionType", + "WildcardWidgetRequest", + "WildcardWidgetSpecification", + "WildcardWidgetSpecificationType", +] \ No newline at end of file diff --git a/datadog_api_client/v2/__init__.py b/datadog_api_client/v2/__init__.py new file mode 100644 index 0000000000..0d508b1a42 --- /dev/null +++ b/datadog_api_client/v2/__init__.py @@ -0,0 +1,13 @@ +# 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 datadog_api_client.api_client import ApiClient, AsyncApiClient +from datadog_api_client.configuration import Configuration +from datadog_api_client.exceptions import ( + OpenApiException, ApiAttributeError, ApiTypeError, ApiValueError, ApiKeyError, ApiException) + + +__all__ = ["ApiClient", "AsyncApiClient", "Configuration", "OpenApiException", + "ApiAttributeError", "ApiTypeError", "ApiValueError", "ApiKeyError", + "ApiException"] \ No newline at end of file diff --git a/datadog_api_client/v2/api/__init__.py b/datadog_api_client/v2/api/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/datadog_api_client/v2/api/action_connection_api.py b/datadog_api_client/v2/api/action_connection_api.py new file mode 100644 index 0000000000..b77bab0349 --- /dev/null +++ b/datadog_api_client/v2/api/action_connection_api.py @@ -0,0 +1,362 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_app_key_registrations_response import ListAppKeyRegistrationsResponse +from datadog_api_client.v2.model.get_app_key_registration_response import GetAppKeyRegistrationResponse +from datadog_api_client.v2.model.register_app_key_response import RegisterAppKeyResponse +from datadog_api_client.v2.model.create_action_connection_response import CreateActionConnectionResponse +from datadog_api_client.v2.model.create_action_connection_request import CreateActionConnectionRequest +from datadog_api_client.v2.model.get_action_connection_response import GetActionConnectionResponse +from datadog_api_client.v2.model.update_action_connection_response import UpdateActionConnectionResponse +from datadog_api_client.v2.model.update_action_connection_request import UpdateActionConnectionRequest + + +class ActionConnectionApi: + """ + Action connections extend your installed integrations and allow you to take action in your third-party systems + (e.g. AWS, GitLab, and Statuspage) with Datadog’s Workflow Automation and App Builder products. + + Datadog’s Integrations automatically provide authentication for Slack, Microsoft Teams, PagerDuty, Opsgenie, + JIRA, GitHub, and Statuspage. You do not need additional connections in order to access these tools within + Workflow Automation and App Builder. + + We offer granular access control for editing and resolving connections. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_action_connection_endpoint = _Endpoint( + settings={ + "response_type": (CreateActionConnectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions/connections", + "operation_id": "create_action_connection", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateActionConnectionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_action_connection_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions/connections/{connection_id}", + "operation_id": "delete_action_connection", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "connection_id": { + "required": True, + "openapi_types": (str,), + "attribute": "connection_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_action_connection_endpoint = _Endpoint( + settings={ + "response_type": (GetActionConnectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions/connections/{connection_id}", + "operation_id": "get_action_connection", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "connection_id": { + "required": True, + "openapi_types": (str,), + "attribute": "connection_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_app_key_registration_endpoint = _Endpoint( + settings={ + "response_type": (GetAppKeyRegistrationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions/app_key_registrations/{app_key_id}", + "operation_id": "get_app_key_registration", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_app_key_registrations_endpoint = _Endpoint( + settings={ + "response_type": (ListAppKeyRegistrationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions/app_key_registrations", + "operation_id": "list_app_key_registrations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._register_app_key_endpoint = _Endpoint( + settings={ + "response_type": (RegisterAppKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions/app_key_registrations/{app_key_id}", + "operation_id": "register_app_key", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._unregister_app_key_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions/app_key_registrations/{app_key_id}", + "operation_id": "unregister_app_key", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._update_action_connection_endpoint = _Endpoint( + settings={ + "response_type": (UpdateActionConnectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions/connections/{connection_id}", + "operation_id": "update_action_connection", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "connection_id": { + "required": True, + "openapi_types": (str,), + "attribute": "connection_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateActionConnectionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_action_connection(self, body: CreateActionConnectionRequest, ) -> CreateActionConnectionResponse: + """Create a new Action Connection. + + Create a new Action Connection. This API requires a `registered application key `_. + + :type body: CreateActionConnectionRequest + :rtype: CreateActionConnectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_action_connection_endpoint.call_with_http_info(**kwargs) + + def delete_action_connection(self, connection_id: str, ) -> None: + """Delete an existing Action Connection. + + Delete an existing Action Connection. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param connection_id: The ID of the action connection + :type connection_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["connection_id"] = connection_id + + return self._delete_action_connection_endpoint.call_with_http_info(**kwargs) + + def get_action_connection(self, connection_id: str, ) -> GetActionConnectionResponse: + """Get an existing Action Connection. + + Get an existing Action Connection. This API requires a `registered application key `_. + + :param connection_id: The ID of the action connection + :type connection_id: str + :rtype: GetActionConnectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["connection_id"] = connection_id + + return self._get_action_connection_endpoint.call_with_http_info(**kwargs) + + def get_app_key_registration(self, app_key_id: str, ) -> GetAppKeyRegistrationResponse: + """Get an existing App Key Registration. + + Get an existing App Key Registration + + :param app_key_id: The ID of the app key + :type app_key_id: str + :rtype: GetAppKeyRegistrationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_key_id"] = app_key_id + + return self._get_app_key_registration_endpoint.call_with_http_info(**kwargs) + + def list_app_key_registrations(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> ListAppKeyRegistrationsResponse: + """List App Key Registrations. + + List App Key Registrations + + :param page_size: The number of App Key Registrations to return per page. + :type page_size: int, optional + :param page_number: The page number to return. + :type page_number: int, optional + :rtype: ListAppKeyRegistrationsResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_app_key_registrations_endpoint.call_with_http_info(**kwargs) + + def register_app_key(self, app_key_id: str, ) -> RegisterAppKeyResponse: + """Register a new App Key. + + Register a new App Key + + :param app_key_id: The ID of the app key + :type app_key_id: str + :rtype: RegisterAppKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_key_id"] = app_key_id + + return self._register_app_key_endpoint.call_with_http_info(**kwargs) + + def unregister_app_key(self, app_key_id: str, ) -> None: + """Unregister an App Key. + + Unregister an App Key + + :param app_key_id: The ID of the app key + :type app_key_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["app_key_id"] = app_key_id + + return self._unregister_app_key_endpoint.call_with_http_info(**kwargs) + + def update_action_connection(self, connection_id: str, body: UpdateActionConnectionRequest, ) -> UpdateActionConnectionResponse: + """Update an existing Action Connection. + + Update an existing Action Connection. This API requires a `registered application key `_. + + :param connection_id: The ID of the action connection + :type connection_id: str + :param body: Update an existing Action Connection request body + :type body: UpdateActionConnectionRequest + :rtype: UpdateActionConnectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["connection_id"] = connection_id + + kwargs["body"] = body + + return self._update_action_connection_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/actions_datastores_api.py b/datadog_api_client/v2/api/actions_datastores_api.py new file mode 100644 index 0000000000..b9bd0b1826 --- /dev/null +++ b/datadog_api_client/v2/api/actions_datastores_api.py @@ -0,0 +1,508 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.datastore_array import DatastoreArray +from datadog_api_client.v2.model.create_apps_datastore_response import CreateAppsDatastoreResponse +from datadog_api_client.v2.model.create_apps_datastore_request import CreateAppsDatastoreRequest +from datadog_api_client.v2.model.datastore import Datastore +from datadog_api_client.v2.model.update_apps_datastore_request import UpdateAppsDatastoreRequest +from datadog_api_client.v2.model.delete_apps_datastore_item_response import DeleteAppsDatastoreItemResponse +from datadog_api_client.v2.model.delete_apps_datastore_item_request import DeleteAppsDatastoreItemRequest +from datadog_api_client.v2.model.item_api_payload_array import ItemApiPayloadArray +from datadog_api_client.v2.model.item_api_payload import ItemApiPayload +from datadog_api_client.v2.model.update_apps_datastore_item_request import UpdateAppsDatastoreItemRequest +from datadog_api_client.v2.model.delete_apps_datastore_item_response_array import DeleteAppsDatastoreItemResponseArray +from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request import BulkDeleteAppsDatastoreItemsRequest +from datadog_api_client.v2.model.put_apps_datastore_item_response_array import PutAppsDatastoreItemResponseArray +from datadog_api_client.v2.model.bulk_put_apps_datastore_items_request import BulkPutAppsDatastoreItemsRequest + + +class ActionsDatastoresApi: + """ + Leverage the Actions Datastore API to create, modify, and delete + items in datastores owned by your organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._bulk_delete_datastore_items_endpoint = _Endpoint( + settings={ + "response_type": (DeleteAppsDatastoreItemResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores/{datastore_id}/items/bulk", + "operation_id": "bulk_delete_datastore_items", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "datastore_id": { + "required": True, + "openapi_types": (str,), + "attribute": "datastore_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (BulkDeleteAppsDatastoreItemsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_write_datastore_items_endpoint = _Endpoint( + settings={ + "response_type": (PutAppsDatastoreItemResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores/{datastore_id}/items/bulk", + "operation_id": "bulk_write_datastore_items", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "datastore_id": { + "required": True, + "openapi_types": (str,), + "attribute": "datastore_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (BulkPutAppsDatastoreItemsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_datastore_endpoint = _Endpoint( + settings={ + "response_type": (CreateAppsDatastoreResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores", + "operation_id": "create_datastore", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateAppsDatastoreRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_datastore_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores/{datastore_id}", + "operation_id": "delete_datastore", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "datastore_id": { + "required": True, + "openapi_types": (str,), + "attribute": "datastore_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_datastore_item_endpoint = _Endpoint( + settings={ + "response_type": (DeleteAppsDatastoreItemResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores/{datastore_id}/items", + "operation_id": "delete_datastore_item", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "datastore_id": { + "required": True, + "openapi_types": (str,), + "attribute": "datastore_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (DeleteAppsDatastoreItemRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_datastore_endpoint = _Endpoint( + settings={ + "response_type": (Datastore,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores/{datastore_id}", + "operation_id": "get_datastore", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "datastore_id": { + "required": True, + "openapi_types": (str,), + "attribute": "datastore_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_datastore_items_endpoint = _Endpoint( + settings={ + "response_type": (ItemApiPayloadArray,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores/{datastore_id}/items", + "operation_id": "list_datastore_items", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "datastore_id": { + "required": True, + "openapi_types": (str,), + "attribute": "datastore_id", + "location": "path", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "item_key": { + "validation": { + "max_length": 256, + }, + "openapi_types": (str,), + "attribute": "item_key", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_datastores_endpoint = _Endpoint( + settings={ + "response_type": (DatastoreArray,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores", + "operation_id": "list_datastores", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_datastore_endpoint = _Endpoint( + settings={ + "response_type": (Datastore,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores/{datastore_id}", + "operation_id": "update_datastore", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "datastore_id": { + "required": True, + "openapi_types": (str,), + "attribute": "datastore_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateAppsDatastoreRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_datastore_item_endpoint = _Endpoint( + settings={ + "response_type": (ItemApiPayload,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/actions-datastores/{datastore_id}/items", + "operation_id": "update_datastore_item", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "datastore_id": { + "required": True, + "openapi_types": (str,), + "attribute": "datastore_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateAppsDatastoreItemRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def bulk_delete_datastore_items(self, datastore_id: str, body: BulkDeleteAppsDatastoreItemsRequest, ) -> DeleteAppsDatastoreItemResponseArray: + """Bulk delete datastore items. + + Deletes multiple items from a datastore by their keys in a single operation. + + :param datastore_id: The ID of the datastore. + :type datastore_id: str + :type body: BulkDeleteAppsDatastoreItemsRequest + :rtype: DeleteAppsDatastoreItemResponseArray + """ + kwargs: Dict[str, Any] = {} + kwargs["datastore_id"] = datastore_id + + kwargs["body"] = body + + return self._bulk_delete_datastore_items_endpoint.call_with_http_info(**kwargs) + + def bulk_write_datastore_items(self, datastore_id: str, body: BulkPutAppsDatastoreItemsRequest, ) -> PutAppsDatastoreItemResponseArray: + """Bulk write datastore items. + + Creates or replaces multiple items in a datastore by their keys in a single operation. + + :param datastore_id: The unique identifier of the datastore to retrieve. + :type datastore_id: str + :type body: BulkPutAppsDatastoreItemsRequest + :rtype: PutAppsDatastoreItemResponseArray + """ + kwargs: Dict[str, Any] = {} + kwargs["datastore_id"] = datastore_id + + kwargs["body"] = body + + return self._bulk_write_datastore_items_endpoint.call_with_http_info(**kwargs) + + def create_datastore(self, body: CreateAppsDatastoreRequest, ) -> CreateAppsDatastoreResponse: + """Create datastore. + + Creates a new datastore. + + :type body: CreateAppsDatastoreRequest + :rtype: CreateAppsDatastoreResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_datastore_endpoint.call_with_http_info(**kwargs) + + def delete_datastore(self, datastore_id: str, ) -> None: + """Delete datastore. + + Deletes a datastore by its unique identifier. + + :param datastore_id: The unique identifier of the datastore to retrieve. + :type datastore_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["datastore_id"] = datastore_id + + return self._delete_datastore_endpoint.call_with_http_info(**kwargs) + + def delete_datastore_item(self, datastore_id: str, body: DeleteAppsDatastoreItemRequest, ) -> DeleteAppsDatastoreItemResponse: + """Delete datastore item. + + Deletes an item from a datastore by its key. + + :param datastore_id: The unique identifier of the datastore to retrieve. + :type datastore_id: str + :type body: DeleteAppsDatastoreItemRequest + :rtype: DeleteAppsDatastoreItemResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["datastore_id"] = datastore_id + + kwargs["body"] = body + + return self._delete_datastore_item_endpoint.call_with_http_info(**kwargs) + + def get_datastore(self, datastore_id: str, ) -> Datastore: + """Get datastore. + + Retrieves a specific datastore by its ID. + + :param datastore_id: The unique identifier of the datastore to retrieve. + :type datastore_id: str + :rtype: Datastore + """ + kwargs: Dict[str, Any] = {} + kwargs["datastore_id"] = datastore_id + + return self._get_datastore_endpoint.call_with_http_info(**kwargs) + + def list_datastore_items(self, datastore_id: str, *, filter: Union[str, UnsetType]=unset, item_key: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, ) -> ItemApiPayloadArray: + """List datastore items. + + Lists items from a datastore. You can filter the results by specifying either an item key or a filter query parameter, but not both at the same time. Supports server-side pagination for large datasets. + + :param datastore_id: The unique identifier of the datastore to retrieve. + :type datastore_id: str + :param filter: Optional query filter to search items using the `logs search syntax `_. + :type filter: str, optional + :param item_key: Optional primary key value to retrieve a specific item. Cannot be used together with the filter parameter. + :type item_key: str, optional + :param page_limit: Optional field to limit the number of items to return per page for pagination. Up to 100 items can be returned per page. + :type page_limit: int, optional + :param page_offset: Optional field to offset the number of items to skip from the beginning of the result set for pagination. + :type page_offset: int, optional + :param sort: Optional field to sort results by. Prefix with '-' for descending order (e.g., '-created_at'). + :type sort: str, optional + :rtype: ItemApiPayloadArray + """ + kwargs: Dict[str, Any] = {} + kwargs["datastore_id"] = datastore_id + + if filter is not unset: + kwargs["filter"] = filter + + if item_key is not unset: + kwargs["item_key"] = item_key + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_datastore_items_endpoint.call_with_http_info(**kwargs) + + def list_datastores(self, ) -> DatastoreArray: + """List datastores. + + Lists all datastores for the organization. + + :rtype: DatastoreArray + """ + kwargs: Dict[str, Any] = {} + return self._list_datastores_endpoint.call_with_http_info(**kwargs) + + def update_datastore(self, datastore_id: str, body: UpdateAppsDatastoreRequest, ) -> Datastore: + """Update datastore. + + Updates an existing datastore's attributes. + + :param datastore_id: The unique identifier of the datastore to retrieve. + :type datastore_id: str + :type body: UpdateAppsDatastoreRequest + :rtype: Datastore + """ + kwargs: Dict[str, Any] = {} + kwargs["datastore_id"] = datastore_id + + kwargs["body"] = body + + return self._update_datastore_endpoint.call_with_http_info(**kwargs) + + def update_datastore_item(self, datastore_id: str, body: UpdateAppsDatastoreItemRequest, ) -> ItemApiPayload: + """Update datastore item. + + Partially updates an item in a datastore by its key. + + :param datastore_id: The unique identifier of the datastore to retrieve. + :type datastore_id: str + :type body: UpdateAppsDatastoreItemRequest + :rtype: ItemApiPayload + """ + kwargs: Dict[str, Any] = {} + kwargs["datastore_id"] = datastore_id + + kwargs["body"] = body + + return self._update_datastore_item_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/agentless_scanning_api.py b/datadog_api_client/v2/api/agentless_scanning_api.py new file mode 100644 index 0000000000..454932645a --- /dev/null +++ b/datadog_api_client/v2/api/agentless_scanning_api.py @@ -0,0 +1,703 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.aws_scan_options_list_response import AwsScanOptionsListResponse +from datadog_api_client.v2.model.aws_scan_options_response import AwsScanOptionsResponse +from datadog_api_client.v2.model.aws_scan_options_create_request import AwsScanOptionsCreateRequest +from datadog_api_client.v2.model.aws_scan_options_update_request import AwsScanOptionsUpdateRequest +from datadog_api_client.v2.model.azure_scan_options_array import AzureScanOptionsArray +from datadog_api_client.v2.model.azure_scan_options import AzureScanOptions +from datadog_api_client.v2.model.azure_scan_options_input_update import AzureScanOptionsInputUpdate +from datadog_api_client.v2.model.gcp_scan_options_array import GcpScanOptionsArray +from datadog_api_client.v2.model.gcp_scan_options import GcpScanOptions +from datadog_api_client.v2.model.gcp_scan_options_input_update import GcpScanOptionsInputUpdate +from datadog_api_client.v2.model.aws_on_demand_list_response import AwsOnDemandListResponse +from datadog_api_client.v2.model.aws_on_demand_response import AwsOnDemandResponse +from datadog_api_client.v2.model.aws_on_demand_create_request import AwsOnDemandCreateRequest + + +class AgentlessScanningApi: + """ + Datadog Agentless Scanning provides visibility into risks and vulnerabilities + within your hosts, running containers, and serverless functions—all without + requiring teams to install Agents on every host or where Agents cannot be installed. + Agentless offers also Sensitive Data Scanning capabilities on your storage. + Go to https://www.datadoghq.com/blog/agentless-scanning/ to learn more. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_aws_on_demand_task_endpoint = _Endpoint( + settings={ + "response_type": (AwsOnDemandResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/ondemand/aws", + "operation_id": "create_aws_on_demand_task", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AwsOnDemandCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_aws_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (AwsScanOptionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/aws", + "operation_id": "create_aws_scan_options", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AwsScanOptionsCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_azure_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (AzureScanOptions,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/azure", + "operation_id": "create_azure_scan_options", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AzureScanOptions,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_gcp_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (GcpScanOptions,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/gcp", + "operation_id": "create_gcp_scan_options", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GcpScanOptions,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_aws_scan_options_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/aws/{account_id}", + "operation_id": "delete_aws_scan_options", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_azure_scan_options_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/azure/{subscription_id}", + "operation_id": "delete_azure_scan_options", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "subscription_id": { + "required": True, + "openapi_types": (str,), + "attribute": "subscription_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_gcp_scan_options_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}", + "operation_id": "delete_gcp_scan_options", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_aws_on_demand_task_endpoint = _Endpoint( + settings={ + "response_type": (AwsOnDemandResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/ondemand/aws/{task_id}", + "operation_id": "get_aws_on_demand_task", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "task_id": { + "required": True, + "openapi_types": (str,), + "attribute": "task_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_aws_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (AwsScanOptionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/aws/{account_id}", + "operation_id": "get_aws_scan_options", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_azure_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (AzureScanOptions,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/azure/{subscription_id}", + "operation_id": "get_azure_scan_options", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "subscription_id": { + "required": True, + "openapi_types": (str,), + "attribute": "subscription_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_gcp_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (GcpScanOptions,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}", + "operation_id": "get_gcp_scan_options", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_on_demand_tasks_endpoint = _Endpoint( + settings={ + "response_type": (AwsOnDemandListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/ondemand/aws", + "operation_id": "list_aws_on_demand_tasks", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (AwsScanOptionsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/aws", + "operation_id": "list_aws_scan_options", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_azure_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (AzureScanOptionsArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/azure", + "operation_id": "list_azure_scan_options", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_gcp_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (GcpScanOptionsArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/gcp", + "operation_id": "list_gcp_scan_options", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_aws_scan_options_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/aws/{account_id}", + "operation_id": "update_aws_scan_options", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AwsScanOptionsUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_azure_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (AzureScanOptions,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/azure/{subscription_id}", + "operation_id": "update_azure_scan_options", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "subscription_id": { + "required": True, + "openapi_types": (str,), + "attribute": "subscription_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AzureScanOptionsInputUpdate,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_gcp_scan_options_endpoint = _Endpoint( + settings={ + "response_type": (GcpScanOptions,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}", + "operation_id": "update_gcp_scan_options", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GcpScanOptionsInputUpdate,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_aws_on_demand_task(self, body: AwsOnDemandCreateRequest, ) -> AwsOnDemandResponse: + """Create AWS on demand task. + + Trigger the scan of an AWS resource with a high priority. Agentless scanning must be activated for the AWS account containing the resource to scan. + + :param body: The definition of the on demand task. + :type body: AwsOnDemandCreateRequest + :rtype: AwsOnDemandResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_aws_on_demand_task_endpoint.call_with_http_info(**kwargs) + + def create_aws_scan_options(self, body: AwsScanOptionsCreateRequest, ) -> AwsScanOptionsResponse: + """Create AWS scan options. + + Activate Agentless scan options for an AWS account. + + :param body: The definition of the new scan options. + :type body: AwsScanOptionsCreateRequest + :rtype: AwsScanOptionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_aws_scan_options_endpoint.call_with_http_info(**kwargs) + + def create_azure_scan_options(self, body: AzureScanOptions, ) -> AzureScanOptions: + """Create Azure scan options. + + Activate Agentless scan options for an Azure subscription. + + :type body: AzureScanOptions + :rtype: AzureScanOptions + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_azure_scan_options_endpoint.call_with_http_info(**kwargs) + + def create_gcp_scan_options(self, body: GcpScanOptions, ) -> GcpScanOptions: + """Create GCP scan options. + + Activate Agentless scan options for a GCP project. + + :param body: The definition of the new scan options. + :type body: GcpScanOptions + :rtype: GcpScanOptions + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_gcp_scan_options_endpoint.call_with_http_info(**kwargs) + + def delete_aws_scan_options(self, account_id: str, ) -> None: + """Delete AWS scan options. + + Delete Agentless scan options for an AWS account. + + :param account_id: The ID of an AWS account. + :type account_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._delete_aws_scan_options_endpoint.call_with_http_info(**kwargs) + + def delete_azure_scan_options(self, subscription_id: str, ) -> None: + """Delete Azure scan options. + + Delete Agentless scan options for an Azure subscription. + + :param subscription_id: The Azure subscription ID. + :type subscription_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["subscription_id"] = subscription_id + + return self._delete_azure_scan_options_endpoint.call_with_http_info(**kwargs) + + def delete_gcp_scan_options(self, project_id: str, ) -> None: + """Delete GCP scan options. + + Delete Agentless scan options for a GCP project. + + :param project_id: The GCP project ID. + :type project_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._delete_gcp_scan_options_endpoint.call_with_http_info(**kwargs) + + def get_aws_on_demand_task(self, task_id: str, ) -> AwsOnDemandResponse: + """Get AWS on demand task. + + Fetch the data of a specific on demand task. + + :param task_id: The UUID of the task. + :type task_id: str + :rtype: AwsOnDemandResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["task_id"] = task_id + + return self._get_aws_on_demand_task_endpoint.call_with_http_info(**kwargs) + + def get_aws_scan_options(self, account_id: str, ) -> AwsScanOptionsResponse: + """Get AWS scan options. + + Fetches the Agentless scan options for an activated account. + + :param account_id: The ID of an AWS account. + :type account_id: str + :rtype: AwsScanOptionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._get_aws_scan_options_endpoint.call_with_http_info(**kwargs) + + def get_azure_scan_options(self, subscription_id: str, ) -> AzureScanOptions: + """Get Azure scan options. + + Fetches the Agentless scan options for an activated subscription. + + :param subscription_id: The Azure subscription ID. + :type subscription_id: str + :rtype: AzureScanOptions + """ + kwargs: Dict[str, Any] = {} + kwargs["subscription_id"] = subscription_id + + return self._get_azure_scan_options_endpoint.call_with_http_info(**kwargs) + + def get_gcp_scan_options(self, project_id: str, ) -> GcpScanOptions: + """Get GCP scan options. + + Fetches the Agentless scan options for an activated GCP project. + + :param project_id: The GCP project ID. + :type project_id: str + :rtype: GcpScanOptions + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._get_gcp_scan_options_endpoint.call_with_http_info(**kwargs) + + def list_aws_on_demand_tasks(self, ) -> AwsOnDemandListResponse: + """List AWS on demand tasks. + + Fetches the most recent 1000 AWS on demand tasks. + + :rtype: AwsOnDemandListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_aws_on_demand_tasks_endpoint.call_with_http_info(**kwargs) + + def list_aws_scan_options(self, ) -> AwsScanOptionsListResponse: + """List AWS scan options. + + Fetches the scan options configured for AWS accounts. + + :rtype: AwsScanOptionsListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_aws_scan_options_endpoint.call_with_http_info(**kwargs) + + def list_azure_scan_options(self, ) -> AzureScanOptionsArray: + """List Azure scan options. + + Fetches the scan options configured for Azure accounts. + + :rtype: AzureScanOptionsArray + """ + kwargs: Dict[str, Any] = {} + return self._list_azure_scan_options_endpoint.call_with_http_info(**kwargs) + + def list_gcp_scan_options(self, ) -> GcpScanOptionsArray: + """List GCP scan options. + + Fetches the scan options configured for all GCP projects. + + :rtype: GcpScanOptionsArray + """ + kwargs: Dict[str, Any] = {} + return self._list_gcp_scan_options_endpoint.call_with_http_info(**kwargs) + + def update_aws_scan_options(self, account_id: str, body: AwsScanOptionsUpdateRequest, ) -> None: + """Update AWS scan options. + + Update the Agentless scan options for an activated account. + + :param account_id: The ID of an AWS account. + :type account_id: str + :param body: New definition of the scan options. + :type body: AwsScanOptionsUpdateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._update_aws_scan_options_endpoint.call_with_http_info(**kwargs) + + def update_azure_scan_options(self, subscription_id: str, body: AzureScanOptionsInputUpdate, ) -> AzureScanOptions: + """Update Azure scan options. + + Update the Agentless scan options for an activated subscription. + + :param subscription_id: The Azure subscription ID. + :type subscription_id: str + :type body: AzureScanOptionsInputUpdate + :rtype: AzureScanOptions + """ + kwargs: Dict[str, Any] = {} + kwargs["subscription_id"] = subscription_id + + kwargs["body"] = body + + return self._update_azure_scan_options_endpoint.call_with_http_info(**kwargs) + + def update_gcp_scan_options(self, project_id: str, body: GcpScanOptionsInputUpdate, ) -> GcpScanOptions: + """Update GCP scan options. + + Update the Agentless scan options for an activated GCP project. + + :param project_id: The GCP project ID. + :type project_id: str + :param body: New definition of the scan options. + :type body: GcpScanOptionsInputUpdate + :rtype: GcpScanOptions + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["body"] = body + + return self._update_gcp_scan_options_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/annotations_api.py b/datadog_api_client/v2/api/annotations_api.py new file mode 100644 index 0000000000..19c1b8ce97 --- /dev/null +++ b/datadog_api_client/v2/api/annotations_api.py @@ -0,0 +1,291 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.annotations_response import AnnotationsResponse +from datadog_api_client.v2.model.annotation_response import AnnotationResponse +from datadog_api_client.v2.model.annotation_create_request import AnnotationCreateRequest +from datadog_api_client.v2.model.page_annotations_response import PageAnnotationsResponse +from datadog_api_client.v2.model.annotation_update_request import AnnotationUpdateRequest + + +class AnnotationsApi: + """ + Add annotations to dashboards and notebooks to mark events such as deployments, incidents, or other notable moments in time. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_annotation_endpoint = _Endpoint( + settings={ + "response_type": (AnnotationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/annotation", + "operation_id": "create_annotation", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AnnotationCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_annotation_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/annotation/{annotation_id}", + "operation_id": "delete_annotation", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "annotation_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "annotation_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_page_annotations_endpoint = _Endpoint( + settings={ + "response_type": (PageAnnotationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/annotation/page/{page_id}", + "operation_id": "get_page_annotations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (str,), + "attribute": "page_id", + "location": "path", + }, + "start_time": { + "required": True, + "openapi_types": (int,), + "attribute": "start_time", + "location": "query", + }, + "end_time": { + "required": True, + "openapi_types": (int,), + "attribute": "end_time", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_annotations_endpoint = _Endpoint( + settings={ + "response_type": (AnnotationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/annotation", + "operation_id": "list_annotations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (str,), + "attribute": "page_id", + "location": "query", + }, + "start_time": { + "required": True, + "openapi_types": (int,), + "attribute": "start_time", + "location": "query", + }, + "end_time": { + "required": True, + "openapi_types": (int,), + "attribute": "end_time", + "location": "query", + }, + "widget_id": { + "openapi_types": (str,), + "attribute": "widget_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_annotation_endpoint = _Endpoint( + settings={ + "response_type": (AnnotationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/annotation/{annotation_id}", + "operation_id": "update_annotation", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "annotation_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "annotation_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AnnotationUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_annotation(self, body: AnnotationCreateRequest, ) -> AnnotationResponse: + """Create an annotation. + + Creates a new annotation on a dashboard or notebook page. + Valid ``color`` values: ``gray`` , ``blue`` , ``purple`` , ``green`` , ``yellow`` , ``red``. + Valid ``type`` values: ``pointInTime`` (marks a single moment) or ``timeRegion`` (spans a range and requires ``end_time`` ). + + :param body: Annotation to create. + :type body: AnnotationCreateRequest + :rtype: AnnotationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_annotation_endpoint.call_with_http_info(**kwargs) + + def delete_annotation(self, annotation_id: UUID, ) -> None: + """Delete an annotation. + + Deletes an existing annotation by ID. + Returns ``204 No Content`` if the annotation does not exist (idempotent). + + :param annotation_id: The ID of the annotation. + :type annotation_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["annotation_id"] = annotation_id + + return self._delete_annotation_endpoint.call_with_http_info(**kwargs) + + def get_page_annotations(self, page_id: str, start_time: int, end_time: int, ) -> PageAnnotationsResponse: + """Get annotations for a page. + + Returns all annotations on a specific page for a given time window, grouped by widget. + Unlike ``ListAnnotations`` , this endpoint returns a single structured object with annotations + indexed by their ID and a widget-to-annotation mapping for easy UI rendering. + + :param page_id: The ID of the page, prefixed with the page type and joined by a colon + (for example, ``dashboard:abc-def-xyz`` or ``notebook:1234567890`` ). + :type page_id: str + :param start_time: Start of the time window in milliseconds since the Unix epoch. + :type start_time: int + :param end_time: End of the time window in milliseconds since the Unix epoch. + :type end_time: int + :rtype: PageAnnotationsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["start_time"] = start_time + + kwargs["end_time"] = end_time + + return self._get_page_annotations_endpoint.call_with_http_info(**kwargs) + + def list_annotations(self, page_id: str, start_time: int, end_time: int, *, widget_id: Union[str, UnsetType]=unset, ) -> AnnotationsResponse: + """List annotations. + + Returns a flat list of annotations matching the given page, time window, and optional widget filter. + + :param page_id: ID of the page to list annotations for, prefixed with the page type and joined by a colon + (for example, ``dashboard:abc-def-xyz`` or ``notebook:1234567890`` ). + :type page_id: str + :param start_time: Start of the time window in milliseconds since the Unix epoch. + :type start_time: int + :param end_time: End of the time window in milliseconds since the Unix epoch. + :type end_time: int + :param widget_id: Optional widget ID to restrict results to annotations on a specific widget. + :type widget_id: str, optional + :rtype: AnnotationsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["start_time"] = start_time + + kwargs["end_time"] = end_time + + if widget_id is not unset: + kwargs["widget_id"] = widget_id + + return self._list_annotations_endpoint.call_with_http_info(**kwargs) + + def update_annotation(self, annotation_id: UUID, body: AnnotationUpdateRequest, ) -> AnnotationResponse: + """Update an annotation. + + Updates an existing annotation. + Valid ``color`` values: ``gray`` , ``blue`` , ``purple`` , ``green`` , ``yellow`` , ``red``. + Valid ``type`` values: ``pointInTime`` (marks a single moment) or ``timeRegion`` (spans a range and requires ``end_time`` ). + + :param annotation_id: The ID of the annotation. + :type annotation_id: UUID + :param body: Updated annotation payload. + :type body: AnnotationUpdateRequest + :rtype: AnnotationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["annotation_id"] = annotation_id + + kwargs["body"] = body + + return self._update_annotation_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/api_management_api.py b/datadog_api_client/v2/api/api_management_api.py new file mode 100644 index 0000000000..ff7668a723 --- /dev/null +++ b/datadog_api_client/v2/api/api_management_api.py @@ -0,0 +1,268 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_apis_response import ListAPIsResponse +from datadog_api_client.v2.model.update_open_api_response import UpdateOpenAPIResponse +from datadog_api_client.v2.model.open_api_file import OpenAPIFile +from datadog_api_client.v2.model.create_open_api_response import CreateOpenAPIResponse + + +class APIManagementApi: + """ + Configure your API endpoints through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_open_api_endpoint = _Endpoint( + settings={ + "response_type": (CreateOpenAPIResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/apicatalog/openapi", + "operation_id": "create_open_api", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "openapi_spec_file": { + "openapi_types": (file_type,), + "attribute": "openapi_spec_file", + "location": "form", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["multipart/form-data"] + }, + api_client=api_client, + ) + + self._delete_open_api_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/apicatalog/api/{id}", + "operation_id": "delete_open_api", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_open_api_endpoint = _Endpoint( + settings={ + "response_type": (file_type,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/apicatalog/api/{id}/openapi", + "operation_id": "get_open_api", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["multipart/form-data", "application/json"], + }, + api_client=api_client, + ) + + self._list_apis_endpoint = _Endpoint( + settings={ + "response_type": (ListAPIsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/apicatalog/api", + "operation_id": "list_apis", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_offset": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_open_api_endpoint = _Endpoint( + settings={ + "response_type": (UpdateOpenAPIResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/apicatalog/api/{id}/openapi", + "operation_id": "update_open_api", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + "openapi_spec_file": { + "openapi_types": (file_type,), + "attribute": "openapi_spec_file", + "location": "form", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["multipart/form-data"] + }, + api_client=api_client, + ) + + def create_open_api(self, *, openapi_spec_file: Union[file_type, UnsetType]=unset, ) -> CreateOpenAPIResponse: + """Create a new API. **Deprecated**. + + Create a new API from the `OpenAPI `_ specification given. + See the `API Catalog documentation `_ for additional + information about the possible metadata. + It returns the created API ID. + + :param openapi_spec_file: Binary ``OpenAPI`` spec file + :type openapi_spec_file: file_type, optional + :rtype: CreateOpenAPIResponse + """ + kwargs: Dict[str, Any] = {} + if openapi_spec_file is not unset: + kwargs["openapi_spec_file"] = openapi_spec_file + + warnings.warn("create_open_api is deprecated", DeprecationWarning, stacklevel=2) + return self._create_open_api_endpoint.call_with_http_info(**kwargs) + + def delete_open_api(self, id: UUID, ) -> None: + """Delete an API. **Deprecated**. + + Delete a specific API by ID. + + :param id: ID of the API to delete + :type id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + warnings.warn("delete_open_api is deprecated", DeprecationWarning, stacklevel=2) + return self._delete_open_api_endpoint.call_with_http_info(**kwargs) + + def get_open_api(self, id: UUID, ) -> file_type: + """Get an API. **Deprecated**. + + Retrieve information about a specific API in `OpenAPI `_ format file. + + :param id: ID of the API to retrieve + :type id: UUID + :rtype: file_type + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + warnings.warn("get_open_api is deprecated", DeprecationWarning, stacklevel=2) + return self._get_open_api_endpoint.call_with_http_info(**kwargs) + + def list_apis(self, *, query: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, ) -> ListAPIsResponse: + """List APIs. **Deprecated**. + + List APIs and their IDs. + + :param query: Filter APIs by name + :type query: str, optional + :param page_limit: Number of items per page. + :type page_limit: int, optional + :param page_offset: Offset for pagination. + :type page_offset: int, optional + :rtype: ListAPIsResponse + """ + kwargs: Dict[str, Any] = {} + if query is not unset: + kwargs["query"] = query + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + warnings.warn("list_apis is deprecated", DeprecationWarning, stacklevel=2) + return self._list_apis_endpoint.call_with_http_info(**kwargs) + + def update_open_api(self, id: UUID, *, openapi_spec_file: Union[file_type, UnsetType]=unset, ) -> UpdateOpenAPIResponse: + """Update an API. **Deprecated**. + + Update information about a specific API. The given content will replace all API content of the given ID. + The ID is returned by the create API, or can be found in the URL in the API catalog UI. + + :param id: ID of the API to modify + :type id: UUID + :param openapi_spec_file: Binary ``OpenAPI`` spec file + :type openapi_spec_file: file_type, optional + :rtype: UpdateOpenAPIResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + if openapi_spec_file is not unset: + kwargs["openapi_spec_file"] = openapi_spec_file + + warnings.warn("update_open_api is deprecated", DeprecationWarning, stacklevel=2) + return self._update_open_api_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/apm_api.py b/datadog_api_client/v2/api/apm_api.py new file mode 100644 index 0000000000..bf5c88d51d --- /dev/null +++ b/datadog_api_client/v2/api/apm_api.py @@ -0,0 +1,68 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.service_list import ServiceList + + +class APMApi: + """ + Observe, troubleshoot, and improve cloud-scale applications with all telemetry in context + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_service_list_endpoint = _Endpoint( + settings={ + "response_type": (ServiceList,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/apm/services", + "operation_id": "get_service_list", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_env": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[env]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_service_list(self, filter_env: str, ) -> ServiceList: + """Get service list. + + :param filter_env: Filter services by environment. Can be set to ``*`` to return all services across all environments. + :type filter_env: str + :rtype: ServiceList + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_env"] = filter_env + + return self._get_service_list_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/apm_retention_filters_api.py b/datadog_api_client/v2/api/apm_retention_filters_api.py new file mode 100644 index 0000000000..8df20ce9ad --- /dev/null +++ b/datadog_api_client/v2/api/apm_retention_filters_api.py @@ -0,0 +1,267 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.retention_filters_response import RetentionFiltersResponse +from datadog_api_client.v2.model.retention_filter_create_response import RetentionFilterCreateResponse +from datadog_api_client.v2.model.retention_filter_create_request import RetentionFilterCreateRequest +from datadog_api_client.v2.model.reorder_retention_filters_request import ReorderRetentionFiltersRequest +from datadog_api_client.v2.model.retention_filter_response import RetentionFilterResponse +from datadog_api_client.v2.model.retention_filter_update_request import RetentionFilterUpdateRequest + + +class APMRetentionFiltersApi: + """ + Manage configuration of `APM retention filters `_ for your organization. You need an API and application key with Admin rights to interact with this endpoint. See `retention filters `_ on the Trace Retention page for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_apm_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": (RetentionFilterCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/retention-filters", + "operation_id": "create_apm_retention_filter", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RetentionFilterCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_apm_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/retention-filters/{filter_id}", + "operation_id": "delete_apm_retention_filter", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "filter_id": { + "required": True, + "openapi_types": (str,), + "attribute": "filter_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_apm_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": (RetentionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/retention-filters/{filter_id}", + "operation_id": "get_apm_retention_filter", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_id": { + "required": True, + "openapi_types": (str,), + "attribute": "filter_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_apm_retention_filters_endpoint = _Endpoint( + settings={ + "response_type": (RetentionFiltersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/retention-filters", + "operation_id": "list_apm_retention_filters", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._reorder_apm_retention_filters_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/retention-filters-execution-order", + "operation_id": "reorder_apm_retention_filters", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ReorderRetentionFiltersRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_apm_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": (RetentionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/retention-filters/{filter_id}", + "operation_id": "update_apm_retention_filter", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "filter_id": { + "required": True, + "openapi_types": (str,), + "attribute": "filter_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RetentionFilterUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_apm_retention_filter(self, body: RetentionFilterCreateRequest, ) -> RetentionFilterCreateResponse: + """Create a retention filter. + + Create a retention filter to index spans in your organization. + Returns the retention filter definition when the request is successful. + + Default filters with types spans-errors-sampling-processor and spans-appsec-sampling-processor cannot be created. + + :param body: The definition of the new retention filter. + :type body: RetentionFilterCreateRequest + :rtype: RetentionFilterCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_apm_retention_filter_endpoint.call_with_http_info(**kwargs) + + def delete_apm_retention_filter(self, filter_id: str, ) -> None: + """Delete a retention filter. + + Delete a specific retention filter from your organization. + + Default filters with types spans-errors-sampling-processor and spans-appsec-sampling-processor cannot be deleted. + + :param filter_id: The ID of the retention filter. + :type filter_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_id"] = filter_id + + return self._delete_apm_retention_filter_endpoint.call_with_http_info(**kwargs) + + def get_apm_retention_filter(self, filter_id: str, ) -> RetentionFilterResponse: + """Get a given APM retention filter. + + Get an APM retention filter. + + :param filter_id: The ID of the retention filter. + :type filter_id: str + :rtype: RetentionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_id"] = filter_id + + return self._get_apm_retention_filter_endpoint.call_with_http_info(**kwargs) + + def list_apm_retention_filters(self, ) -> RetentionFiltersResponse: + """List all APM retention filters. + + Get the list of APM retention filters. + + :rtype: RetentionFiltersResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_apm_retention_filters_endpoint.call_with_http_info(**kwargs) + + def reorder_apm_retention_filters(self, body: ReorderRetentionFiltersRequest, ) -> None: + """Re-order retention filters. + + Re-order the execution order of retention filters. + + :param body: The list of retention filters in the new order. + :type body: ReorderRetentionFiltersRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._reorder_apm_retention_filters_endpoint.call_with_http_info(**kwargs) + + def update_apm_retention_filter(self, filter_id: str, body: RetentionFilterUpdateRequest, ) -> RetentionFilterResponse: + """Update a retention filter. + + Update a retention filter from your organization. + + Default filters (filters with types spans-errors-sampling-processor and spans-appsec-sampling-processor) cannot be renamed or removed. + + :param filter_id: The ID of the retention filter. + :type filter_id: str + :param body: The updated definition of the retention filter. + :type body: RetentionFilterUpdateRequest + :rtype: RetentionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_id"] = filter_id + + kwargs["body"] = body + + return self._update_apm_retention_filter_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/apm_trace_api.py b/datadog_api_client/v2/api/apm_trace_api.py new file mode 100644 index 0000000000..a614d913d1 --- /dev/null +++ b/datadog_api_client/v2/api/apm_trace_api.py @@ -0,0 +1,209 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.pruned_trace_response import PrunedTraceResponse +from datadog_api_client.v2.model.trace_response import TraceResponse + + +class APMTraceApi: + """ + Retrieve full or pruned APM traces by trace ID. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_pruned_trace_by_id_endpoint = _Endpoint( + settings={ + "response_type": (PrunedTraceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/pruned_trace/{trace_id}", + "operation_id": "get_pruned_trace_by_id", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "trace_id": { + "required": True, + "openapi_types": (str,), + "attribute": "trace_id", + "location": "path", + }, + "expand_span_id": { + "openapi_types": (int,), + "attribute": "expand_span_id", + "location": "query", + }, + "time_hint": { + "validation": { + "inclusive_maximum": 2147483647, + }, + "openapi_types": (int,), + "attribute": "time_hint", + "location": "query", + }, + "force_source": { + "openapi_types": (str,), + "attribute": "force_source", + "location": "query", + }, + "include_path": { + "openapi_types": ([str],), + "attribute": "include_path", + "location": "query", + "collection_format": "multi", + }, + "tag_include": { + "openapi_types": ([str],), + "attribute": "tag_include", + "location": "query", + "collection_format": "multi", + }, + "tag_exclude": { + "openapi_types": ([str],), + "attribute": "tag_exclude", + "location": "query", + "collection_format": "multi", + }, + "only_service_entry_spans": { + "openapi_types": (bool,), + "attribute": "only_service_entry_spans", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_trace_by_id_endpoint = _Endpoint( + settings={ + "response_type": (TraceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/trace/{trace_id}", + "operation_id": "get_trace_by_id", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "trace_id": { + "required": True, + "openapi_types": (str,), + "attribute": "trace_id", + "location": "path", + }, + "include_fields": { + "openapi_types": ([str],), + "attribute": "include_fields", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_pruned_trace_by_id(self, trace_id: str, *, expand_span_id: Union[int, UnsetType]=unset, time_hint: Union[int, UnsetType]=unset, force_source: Union[str, UnsetType]=unset, include_path: Union[List[str], UnsetType]=unset, tag_include: Union[List[str], UnsetType]=unset, tag_exclude: Union[List[str], UnsetType]=unset, only_service_entry_spans: Union[bool, UnsetType]=unset, ) -> PrunedTraceResponse: + """Get a pruned trace by ID. + + Retrieve a pruned, hierarchical view of an APM trace by its trace ID. + The trace is summarized as a tree of spans rooted at the trace root and reduced in size + to keep rendering large traces in the UI practical. + This endpoint is rate limited to ``60`` requests per minute per organization. + + :param trace_id: The trace ID. Accepts either a 32-character hexadecimal string (128-bit trace ID) + or a decimal string of up to 39 digits. + :type trace_id: str + :param expand_span_id: Span ID to expand and preserve in the pruned tree even when its branch would + normally be summarized. + :type expand_span_id: int, optional + :param time_hint: Optional Unix time hint, in seconds, used to optimize the lookup of the trace + in long-term storage. + :type time_hint: int, optional + :param force_source: Force the trace to be loaded from a specific source. When unset, the API picks + the source automatically. + :type force_source: str, optional + :param include_path: Restrict the pruned tree to spans matching the given ``key:value`` pairs. + Values may be passed as repeated query parameters. + :type include_path: [str], optional + :param tag_include: Regex patterns of tag keys whose values must be included in the pruned spans. + Values may be passed as repeated query parameters. + :type tag_include: [str], optional + :param tag_exclude: Regex patterns of tag keys whose values must be excluded from the pruned spans. + Values may be passed as repeated query parameters. + :type tag_exclude: [str], optional + :param only_service_entry_spans: When set to ``true`` , only service entry spans are included in the pruned tree. + :type only_service_entry_spans: bool, optional + :rtype: PrunedTraceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["trace_id"] = trace_id + + if expand_span_id is not unset: + kwargs["expand_span_id"] = expand_span_id + + if time_hint is not unset: + kwargs["time_hint"] = time_hint + + if force_source is not unset: + kwargs["force_source"] = force_source + + if include_path is not unset: + kwargs["include_path"] = include_path + + if tag_include is not unset: + kwargs["tag_include"] = tag_include + + if tag_exclude is not unset: + kwargs["tag_exclude"] = tag_exclude + + if only_service_entry_spans is not unset: + kwargs["only_service_entry_spans"] = only_service_entry_spans + + return self._get_pruned_trace_by_id_endpoint.call_with_http_info(**kwargs) + + def get_trace_by_id(self, trace_id: str, *, include_fields: Union[List[str], UnsetType]=unset, ) -> TraceResponse: + """Get a trace by ID. + + Retrieve a full APM trace by its trace ID, including every span in the trace. + Traces are returned from live storage when available and fall back to longer-term storage. + This endpoint is rate limited to ``60`` requests per minute per organization. + + :param trace_id: The trace ID. Accepts either a 32-character hexadecimal string (128-bit trace ID) + or a decimal string of up to 39 digits. + :type trace_id: str + :param include_fields: List of span fields to include in the response. When omitted, every available field is returned. + Values may be passed as repeated query parameters or as a single comma-separated value. + :type include_fields: [str], optional + :rtype: TraceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["trace_id"] = trace_id + + if include_fields is not unset: + kwargs["include_fields"] = include_fields + + return self._get_trace_by_id_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/app_builder_api.py b/datadog_api_client/v2/api/app_builder_api.py new file mode 100644 index 0000000000..9c2496030f --- /dev/null +++ b/datadog_api_client/v2/api/app_builder_api.py @@ -0,0 +1,1044 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.delete_apps_response import DeleteAppsResponse +from datadog_api_client.v2.model.delete_apps_request import DeleteAppsRequest +from datadog_api_client.v2.model.list_apps_response import ListAppsResponse +from datadog_api_client.v2.model.apps_sort_field import AppsSortField +from datadog_api_client.v2.model.create_app_response import CreateAppResponse +from datadog_api_client.v2.model.create_app_request import CreateAppRequest +from datadog_api_client.v2.model.delete_app_response import DeleteAppResponse +from datadog_api_client.v2.model.get_app_response import GetAppResponse +from datadog_api_client.v2.model.update_app_response import UpdateAppResponse +from datadog_api_client.v2.model.update_app_request import UpdateAppRequest +from datadog_api_client.v2.model.unpublish_app_response import UnpublishAppResponse +from datadog_api_client.v2.model.publish_app_response import PublishAppResponse +from datadog_api_client.v2.model.update_app_favorite_request import UpdateAppFavoriteRequest +from datadog_api_client.v2.model.update_app_protection_level_request import UpdateAppProtectionLevelRequest +from datadog_api_client.v2.model.create_publish_request_request import CreatePublishRequestRequest +from datadog_api_client.v2.model.update_app_self_service_request import UpdateAppSelfServiceRequest +from datadog_api_client.v2.model.update_app_tags_request import UpdateAppTagsRequest +from datadog_api_client.v2.model.update_app_version_name_request import UpdateAppVersionNameRequest +from datadog_api_client.v2.model.list_app_versions_response import ListAppVersionsResponse +from datadog_api_client.v2.model.get_blueprint_response import GetBlueprintResponse +from datadog_api_client.v2.model.list_blueprints_response import ListBlueprintsResponse +from datadog_api_client.v2.model.get_blueprints_response import GetBlueprintsResponse +from datadog_api_client.v2.model.app_builder_list_tags_response import AppBuilderListTagsResponse + + +class AppBuilderApi: + """ + Datadog App Builder provides a low-code solution to rapidly develop and integrate secure, customized applications into your monitoring stack that are built to accelerate remediation at scale. These API endpoints allow you to create, read, update, delete, and publish apps. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_app_endpoint = _Endpoint( + settings={ + "response_type": (CreateAppResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps", + "operation_id": "create_app", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateAppRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_publish_request_endpoint = _Endpoint( + settings={ + "response_type": (PublishAppResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/publish-request", + "operation_id": "create_publish_request", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreatePublishRequestRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_app_endpoint = _Endpoint( + settings={ + "response_type": (DeleteAppResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}", + "operation_id": "delete_app", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_apps_endpoint = _Endpoint( + settings={ + "response_type": (DeleteAppsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps", + "operation_id": "delete_apps", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DeleteAppsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_app_endpoint = _Endpoint( + settings={ + "response_type": (GetAppResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}", + "operation_id": "get_app", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "version": { + "openapi_types": (str,), + "attribute": "version", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_blueprint_endpoint = _Endpoint( + settings={ + "response_type": (GetBlueprintResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/blueprint/{blueprint_id}", + "operation_id": "get_blueprint", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "blueprint_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "blueprint_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_blueprints_by_integration_id_endpoint = _Endpoint( + settings={ + "response_type": (GetBlueprintsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/blueprints/integration-id/{integration_id}", + "operation_id": "get_blueprints_by_integration_id", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "integration_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_blueprints_by_slugs_endpoint = _Endpoint( + settings={ + "response_type": (GetBlueprintsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/blueprints/slugs/{slugs}", + "operation_id": "get_blueprints_by_slugs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "slugs": { + "required": True, + "openapi_types": (str,), + "attribute": "slugs", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_apps_endpoint = _Endpoint( + settings={ + "response_type": (ListAppsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps", + "operation_id": "list_apps", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "page": { + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "filter_user_name": { + "openapi_types": (str,), + "attribute": "filter[user_name]", + "location": "query", + }, + "filter_user_uuid": { + "openapi_types": (UUID,), + "attribute": "filter[user_uuid]", + "location": "query", + }, + "filter_name": { + "openapi_types": (str,), + "attribute": "filter[name]", + "location": "query", + }, + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_deployed": { + "openapi_types": (bool,), + "attribute": "filter[deployed]", + "location": "query", + }, + "filter_tags": { + "openapi_types": (str,), + "attribute": "filter[tags]", + "location": "query", + }, + "filter_favorite": { + "openapi_types": (bool,), + "attribute": "filter[favorite]", + "location": "query", + }, + "filter_self_service": { + "openapi_types": (bool,), + "attribute": "filter[self_service]", + "location": "query", + }, + "sort": { + "openapi_types": ([AppsSortField],), + "attribute": "sort", + "location": "query", + "collection_format": "csv", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_app_versions_endpoint = _Endpoint( + settings={ + "response_type": (ListAppVersionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/versions", + "operation_id": "list_app_versions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "page": { + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_blueprints_endpoint = _Endpoint( + settings={ + "response_type": (ListBlueprintsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/blueprints", + "operation_id": "list_blueprints", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "page": { + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tags_endpoint = _Endpoint( + settings={ + "response_type": (AppBuilderListTagsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/tags", + "operation_id": "list_tags", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._publish_app_endpoint = _Endpoint( + settings={ + "response_type": (PublishAppResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/deployment", + "operation_id": "publish_app", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._revert_app_endpoint = _Endpoint( + settings={ + "response_type": (UpdateAppResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/revert", + "operation_id": "revert_app", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "version": { + "required": True, + "openapi_types": (str,), + "attribute": "version", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._unpublish_app_endpoint = _Endpoint( + settings={ + "response_type": (UnpublishAppResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/deployment", + "operation_id": "unpublish_app", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_app_endpoint = _Endpoint( + settings={ + "response_type": (UpdateAppResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}", + "operation_id": "update_app", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateAppRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_app_favorite_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/favorite", + "operation_id": "update_app_favorite", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateAppFavoriteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_app_self_service_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/self-service", + "operation_id": "update_app_self_service", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateAppSelfServiceRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_app_tags_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/tags", + "operation_id": "update_app_tags", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateAppTagsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_app_version_name_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/version-name", + "operation_id": "update_app_version_name", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "version": { + "required": True, + "openapi_types": (str,), + "attribute": "version", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (UpdateAppVersionNameRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_protection_level_endpoint = _Endpoint( + settings={ + "response_type": (UpdateAppResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/app-builder/apps/{app_id}/protection-level", + "operation_id": "update_protection_level", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "app_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateAppProtectionLevelRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_app(self, body: CreateAppRequest, ) -> CreateAppResponse: + """Create App. + + Create a new app, returning the app ID. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :type body: CreateAppRequest + :rtype: CreateAppResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_app_endpoint.call_with_http_info(**kwargs) + + def create_publish_request(self, app_id: UUID, body: CreatePublishRequestRequest, ) -> PublishAppResponse: + """Create Publish Request. + + Create a publish request to ask for approval to publish an app whose protection level is ``approval_required``. Publishing happens automatically once the request is approved by a user with the appropriate permissions. + + :param app_id: The ID of the app. + :type app_id: UUID + :type body: CreatePublishRequestRequest + :rtype: PublishAppResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["body"] = body + + return self._create_publish_request_endpoint.call_with_http_info(**kwargs) + + def delete_app(self, app_id: UUID, ) -> DeleteAppResponse: + """Delete App. + + Delete a single app. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param app_id: The ID of the app to delete. + :type app_id: UUID + :rtype: DeleteAppResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + return self._delete_app_endpoint.call_with_http_info(**kwargs) + + def delete_apps(self, body: DeleteAppsRequest, ) -> DeleteAppsResponse: + """Delete Multiple Apps. + + Delete multiple apps in a single request from a list of app IDs. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :type body: DeleteAppsRequest + :rtype: DeleteAppsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_apps_endpoint.call_with_http_info(**kwargs) + + def get_app(self, app_id: UUID, *, version: Union[str, UnsetType]=unset, ) -> GetAppResponse: + """Get App. + + Get the full definition of an app. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param app_id: The ID of the app to retrieve. + :type app_id: UUID + :param version: The version number of the app to retrieve. If not specified, the latest version is returned. Version numbers start at 1 and increment with each update. The special values ``latest`` and ``deployed`` can be used to retrieve the latest version or the published version, respectively. + :type version: str, optional + :rtype: GetAppResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + if version is not unset: + kwargs["version"] = version + + return self._get_app_endpoint.call_with_http_info(**kwargs) + + def get_blueprint(self, blueprint_id: UUID, ) -> GetBlueprintResponse: + """Get Blueprint. + + Retrieve an app blueprint by its ID. + + :param blueprint_id: The ID of the blueprint to retrieve. + :type blueprint_id: UUID + :rtype: GetBlueprintResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["blueprint_id"] = blueprint_id + + return self._get_blueprint_endpoint.call_with_http_info(**kwargs) + + def get_blueprints_by_integration_id(self, integration_id: str, ) -> GetBlueprintsResponse: + """Get Blueprints by Integration ID. + + List app blueprints associated with a specific integration ID. + + :param integration_id: The integration ID to filter blueprints by. + :type integration_id: str + :rtype: GetBlueprintsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_id"] = integration_id + + return self._get_blueprints_by_integration_id_endpoint.call_with_http_info(**kwargs) + + def get_blueprints_by_slugs(self, slugs: str, ) -> GetBlueprintsResponse: + """Get Blueprints by Slugs. + + Retrieve app blueprints by their slugs. + + :param slugs: A comma-separated list of blueprint slugs. + :type slugs: str + :rtype: GetBlueprintsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["slugs"] = slugs + + return self._get_blueprints_by_slugs_endpoint.call_with_http_info(**kwargs) + + def list_apps(self, *, limit: Union[int, UnsetType]=unset, page: Union[int, UnsetType]=unset, filter_user_name: Union[str, UnsetType]=unset, filter_user_uuid: Union[UUID, UnsetType]=unset, filter_name: Union[str, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, filter_deployed: Union[bool, UnsetType]=unset, filter_tags: Union[str, UnsetType]=unset, filter_favorite: Union[bool, UnsetType]=unset, filter_self_service: Union[bool, UnsetType]=unset, sort: Union[List[AppsSortField], UnsetType]=unset, ) -> ListAppsResponse: + """List Apps. + + List all apps, with optional filters and sorting. This endpoint is paginated. Only basic app information such as the app ID, name, and description is returned by this endpoint. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param limit: The number of apps to return per page. + :type limit: int, optional + :param page: The page number to return. + :type page: int, optional + :param filter_user_name: Filter apps by the app creator. Usually the user's email. + :type filter_user_name: str, optional + :param filter_user_uuid: Filter apps by the app creator's UUID. + :type filter_user_uuid: UUID, optional + :param filter_name: Filter by app name. + :type filter_name: str, optional + :param filter_query: Filter apps by the app name or the app creator. + :type filter_query: str, optional + :param filter_deployed: Filter apps by whether they are published. + :type filter_deployed: bool, optional + :param filter_tags: Filter apps by tags. + :type filter_tags: str, optional + :param filter_favorite: Filter apps by whether you have added them to your favorites. + :type filter_favorite: bool, optional + :param filter_self_service: Filter apps by whether they are enabled for self-service. + :type filter_self_service: bool, optional + :param sort: The fields and direction to sort apps by. + :type sort: [AppsSortField], optional + :rtype: ListAppsResponse + """ + kwargs: Dict[str, Any] = {} + if limit is not unset: + kwargs["limit"] = limit + + if page is not unset: + kwargs["page"] = page + + if filter_user_name is not unset: + kwargs["filter_user_name"] = filter_user_name + + if filter_user_uuid is not unset: + kwargs["filter_user_uuid"] = filter_user_uuid + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_deployed is not unset: + kwargs["filter_deployed"] = filter_deployed + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if filter_favorite is not unset: + kwargs["filter_favorite"] = filter_favorite + + if filter_self_service is not unset: + kwargs["filter_self_service"] = filter_self_service + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_apps_endpoint.call_with_http_info(**kwargs) + + def list_app_versions(self, app_id: UUID, *, limit: Union[int, UnsetType]=unset, page: Union[int, UnsetType]=unset, ) -> ListAppVersionsResponse: + """List App Versions. + + List the versions of an app. This endpoint is paginated. + + :param app_id: The ID of the app. + :type app_id: UUID + :param limit: The number of versions to return per page. + :type limit: int, optional + :param page: The page number to return. + :type page: int, optional + :rtype: ListAppVersionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + if limit is not unset: + kwargs["limit"] = limit + + if page is not unset: + kwargs["page"] = page + + return self._list_app_versions_endpoint.call_with_http_info(**kwargs) + + def list_blueprints(self, *, limit: Union[int, UnsetType]=unset, page: Union[int, UnsetType]=unset, ) -> ListBlueprintsResponse: + """List Blueprints. + + List available app blueprints. + + :param limit: The number of blueprints to return per page. Defaults to 10. Maximum is 100. + :type limit: int, optional + :param page: The page of results to return. Starts at 0. + :type page: int, optional + :rtype: ListBlueprintsResponse + """ + kwargs: Dict[str, Any] = {} + if limit is not unset: + kwargs["limit"] = limit + + if page is not unset: + kwargs["page"] = page + + return self._list_blueprints_endpoint.call_with_http_info(**kwargs) + + def list_tags(self, ) -> AppBuilderListTagsResponse: + """List Tags. + + List all tags associated with the authenticated user's apps. + + :rtype: AppBuilderListTagsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_tags_endpoint.call_with_http_info(**kwargs) + + def publish_app(self, app_id: UUID, ) -> PublishAppResponse: + """Publish App. + + Publish an app for use by other users. To ensure the app is accessible to the correct users, you also need to set a `Restriction Policy `_ on the app if a policy does not yet exist. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param app_id: The ID of the app to publish. + :type app_id: UUID + :rtype: PublishAppResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + return self._publish_app_endpoint.call_with_http_info(**kwargs) + + def revert_app(self, app_id: UUID, version: str, ) -> UpdateAppResponse: + """Revert App. + + Revert an app to a previous version. The version to revert to is selected through the ``version`` query parameter. The reverted version becomes the new latest version of the app. + + :param app_id: The ID of the app. + :type app_id: UUID + :param version: The version number of the app to revert to. Cannot be ``latest``. The special value ``deployed`` can be used to revert to the currently published version. + :type version: str + :rtype: UpdateAppResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["version"] = version + + return self._revert_app_endpoint.call_with_http_info(**kwargs) + + def unpublish_app(self, app_id: UUID, ) -> UnpublishAppResponse: + """Unpublish App. + + Unpublish an app, removing the live version of the app. Unpublishing creates a new instance of a ``deployment`` object on the app, with a nil ``app_version_id`` ( ``00000000-0000-0000-0000-000000000000`` ). The app can still be updated and published again in the future. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param app_id: The ID of the app to unpublish. + :type app_id: UUID + :rtype: UnpublishAppResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + return self._unpublish_app_endpoint.call_with_http_info(**kwargs) + + def update_app(self, app_id: UUID, body: UpdateAppRequest, ) -> UpdateAppResponse: + """Update App. + + Update an existing app. This creates a new version of the app. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param app_id: The ID of the app to update. + :type app_id: UUID + :type body: UpdateAppRequest + :rtype: UpdateAppResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["body"] = body + + return self._update_app_endpoint.call_with_http_info(**kwargs) + + def update_app_favorite(self, app_id: UUID, body: UpdateAppFavoriteRequest, ) -> None: + """Update App Favorite Status. + + Add or remove an app from the current user's favorites. Favorited apps can be filtered for using the ``filter[favorite]`` query parameter on the `List Apps `_ endpoint. + + :param app_id: The ID of the app. + :type app_id: UUID + :type body: UpdateAppFavoriteRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["body"] = body + + return self._update_app_favorite_endpoint.call_with_http_info(**kwargs) + + def update_app_self_service(self, app_id: UUID, body: UpdateAppSelfServiceRequest, ) -> None: + """Update App Self-Service Status. + + Enable or disable self-service for an app. Self-service apps can be discovered and run by users in your organization without explicit access being granted. + + :param app_id: The ID of the app. + :type app_id: UUID + :type body: UpdateAppSelfServiceRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["body"] = body + + return self._update_app_self_service_endpoint.call_with_http_info(**kwargs) + + def update_app_tags(self, app_id: UUID, body: UpdateAppTagsRequest, ) -> None: + """Update App Tags. + + Replace the tags on an app. The provided list overwrites the existing tags entirely; tags not present in the request body are removed. + + :param app_id: The ID of the app. + :type app_id: UUID + :type body: UpdateAppTagsRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["body"] = body + + return self._update_app_tags_endpoint.call_with_http_info(**kwargs) + + def update_app_version_name(self, app_id: UUID, version: str, body: UpdateAppVersionNameRequest, ) -> None: + """Name App Version. + + Assign a human-readable name to a specific version of an app. The version is selected through the ``version`` query parameter. + + :param app_id: The ID of the app. + :type app_id: UUID + :param version: The version number of the app to name. The special values ``latest`` and ``deployed`` can also be used to target the latest or currently published version. + :type version: str + :type body: UpdateAppVersionNameRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["version"] = version + + kwargs["body"] = body + + return self._update_app_version_name_endpoint.call_with_http_info(**kwargs) + + def update_protection_level(self, app_id: UUID, body: UpdateAppProtectionLevelRequest, ) -> UpdateAppResponse: + """Update App Protection Level. + + Update the publication protection level of an app. When set to ``approval_required`` , future publishes must go through an approval workflow before going live. + + :param app_id: The ID of the app. + :type app_id: UUID + :type body: UpdateAppProtectionLevelRequest + :rtype: UpdateAppResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["body"] = body + + return self._update_protection_level_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/application_security_api.py b/datadog_api_client/v2/api/application_security_api.py new file mode 100644 index 0000000000..52e8715572 --- /dev/null +++ b/datadog_api_client/v2/api/application_security_api.py @@ -0,0 +1,652 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.application_security_waf_custom_rule_list_response import ApplicationSecurityWafCustomRuleListResponse +from datadog_api_client.v2.model.application_security_waf_custom_rule_response import ApplicationSecurityWafCustomRuleResponse +from datadog_api_client.v2.model.application_security_waf_custom_rule_create_request import ApplicationSecurityWafCustomRuleCreateRequest +from datadog_api_client.v2.model.application_security_waf_custom_rule_update_request import ApplicationSecurityWafCustomRuleUpdateRequest +from datadog_api_client.v2.model.application_security_waf_exclusion_filters_response import ApplicationSecurityWafExclusionFiltersResponse +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_response import ApplicationSecurityWafExclusionFilterResponse +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_create_request import ApplicationSecurityWafExclusionFilterCreateRequest +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_update_request import ApplicationSecurityWafExclusionFilterUpdateRequest +from datadog_api_client.v2.model.application_security_policy_list_response import ApplicationSecurityPolicyListResponse +from datadog_api_client.v2.model.application_security_policy_response import ApplicationSecurityPolicyResponse +from datadog_api_client.v2.model.application_security_policy_create_request import ApplicationSecurityPolicyCreateRequest +from datadog_api_client.v2.model.application_security_policy_update_request import ApplicationSecurityPolicyUpdateRequest +from datadog_api_client.v2.model.application_security_services_response import ApplicationSecurityServicesResponse + + +class ApplicationSecurityApi: + """ + `Datadog Application Security `_ provides protection against + application-level attacks that aim to exploit code-level vulnerabilities, + such as Server-Side-Request-Forgery (SSRF), SQL injection, Log4Shell, and + Reflected Cross-Site-Scripting (XSS). You can monitor and protect apps + hosted directly on a server, Docker, Kubernetes, Amazon ECS, and (for + supported languages) AWS Fargate. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_application_security_waf_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityWafCustomRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/custom_rules", + "operation_id": "create_application_security_waf_custom_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ApplicationSecurityWafCustomRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_application_security_waf_exclusion_filter_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityWafExclusionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/exclusion_filters", + "operation_id": "create_application_security_waf_exclusion_filter", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ApplicationSecurityWafExclusionFilterCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_application_security_waf_policy_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/policies", + "operation_id": "create_application_security_waf_policy", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ApplicationSecurityPolicyCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_application_security_waf_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/custom_rules/{custom_rule_id}", + "operation_id": "delete_application_security_waf_custom_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "custom_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_application_security_waf_exclusion_filter_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}", + "operation_id": "delete_application_security_waf_exclusion_filter", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "exclusion_filter_id": { + "required": True, + "openapi_types": (str,), + "attribute": "exclusion_filter_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_application_security_waf_policy_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/policies/{policy_id}", + "operation_id": "delete_application_security_waf_policy", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_application_security_waf_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityWafCustomRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/custom_rules/{custom_rule_id}", + "operation_id": "get_application_security_waf_custom_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "custom_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_application_security_waf_exclusion_filter_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityWafExclusionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}", + "operation_id": "get_application_security_waf_exclusion_filter", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "exclusion_filter_id": { + "required": True, + "openapi_types": (str,), + "attribute": "exclusion_filter_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_application_security_waf_policy_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/policies/{policy_id}", + "operation_id": "get_application_security_waf_policy", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_asm_service_by_name_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityServicesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/asm/services/{service_filter}", + "operation_id": "get_asm_service_by_name", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "service_filter": { + "required": True, + "openapi_types": (str,), + "attribute": "service_filter", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_application_security_waf_custom_rules_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityWafCustomRuleListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/custom_rules", + "operation_id": "list_application_security_waf_custom_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_application_security_waf_exclusion_filters_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityWafExclusionFiltersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/exclusion_filters", + "operation_id": "list_application_security_waf_exclusion_filters", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_application_security_waf_policies_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityPolicyListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/policies", + "operation_id": "list_application_security_waf_policies", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_application_security_waf_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityWafCustomRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/custom_rules/{custom_rule_id}", + "operation_id": "update_application_security_waf_custom_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "custom_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ApplicationSecurityWafCustomRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_application_security_waf_exclusion_filter_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityWafExclusionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}", + "operation_id": "update_application_security_waf_exclusion_filter", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "exclusion_filter_id": { + "required": True, + "openapi_types": (str,), + "attribute": "exclusion_filter_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ApplicationSecurityWafExclusionFilterUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_application_security_waf_policy_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationSecurityPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/asm/waf/policies/{policy_id}", + "operation_id": "update_application_security_waf_policy", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ApplicationSecurityPolicyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_application_security_waf_custom_rule(self, body: ApplicationSecurityWafCustomRuleCreateRequest, ) -> ApplicationSecurityWafCustomRuleResponse: + """Create a WAF custom rule. + + Create a new WAF custom rule with the given parameters. + + :param body: The definition of the new WAF Custom Rule. + :type body: ApplicationSecurityWafCustomRuleCreateRequest + :rtype: ApplicationSecurityWafCustomRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_application_security_waf_custom_rule_endpoint.call_with_http_info(**kwargs) + + def create_application_security_waf_exclusion_filter(self, body: ApplicationSecurityWafExclusionFilterCreateRequest, ) -> ApplicationSecurityWafExclusionFilterResponse: + """Create a WAF exclusion filter. + + Create a new WAF exclusion filter with the given parameters. + + A request matched by an exclusion filter will be ignored by the Application Security WAF product. + Go to https://app.datadoghq.com/security/appsec/passlist to review existing exclusion filters (also called passlist entries). + + :param body: The definition of the new WAF exclusion filter. + :type body: ApplicationSecurityWafExclusionFilterCreateRequest + :rtype: ApplicationSecurityWafExclusionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_application_security_waf_exclusion_filter_endpoint.call_with_http_info(**kwargs) + + def create_application_security_waf_policy(self, body: ApplicationSecurityPolicyCreateRequest, ) -> ApplicationSecurityPolicyResponse: + """Create a WAF Policy. + + Create a new WAF policy. + + :param body: The new WAF policy. + :type body: ApplicationSecurityPolicyCreateRequest + :rtype: ApplicationSecurityPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_application_security_waf_policy_endpoint.call_with_http_info(**kwargs) + + def delete_application_security_waf_custom_rule(self, custom_rule_id: str, ) -> None: + """Delete a WAF Custom Rule. + + Delete a specific WAF custom rule. + + :param custom_rule_id: The ID of the custom rule. + :type custom_rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["custom_rule_id"] = custom_rule_id + + return self._delete_application_security_waf_custom_rule_endpoint.call_with_http_info(**kwargs) + + def delete_application_security_waf_exclusion_filter(self, exclusion_filter_id: str, ) -> None: + """Delete a WAF exclusion filter. + + Delete a specific WAF exclusion filter using its identifier. + + :param exclusion_filter_id: The identifier of the WAF exclusion filter. + :type exclusion_filter_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["exclusion_filter_id"] = exclusion_filter_id + + return self._delete_application_security_waf_exclusion_filter_endpoint.call_with_http_info(**kwargs) + + def delete_application_security_waf_policy(self, policy_id: str, ) -> None: + """Delete a WAF Policy. + + Delete a specific WAF policy. + + :param policy_id: The ID of the policy. + :type policy_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + return self._delete_application_security_waf_policy_endpoint.call_with_http_info(**kwargs) + + def get_application_security_waf_custom_rule(self, custom_rule_id: str, ) -> ApplicationSecurityWafCustomRuleResponse: + """Get a WAF custom rule. + + Retrieve a WAF custom rule by ID. + + :param custom_rule_id: The ID of the custom rule. + :type custom_rule_id: str + :rtype: ApplicationSecurityWafCustomRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["custom_rule_id"] = custom_rule_id + + return self._get_application_security_waf_custom_rule_endpoint.call_with_http_info(**kwargs) + + def get_application_security_waf_exclusion_filter(self, exclusion_filter_id: str, ) -> ApplicationSecurityWafExclusionFilterResponse: + """Get a WAF exclusion filter. + + Retrieve a specific WAF exclusion filter using its identifier. + + :param exclusion_filter_id: The identifier of the WAF exclusion filter. + :type exclusion_filter_id: str + :rtype: ApplicationSecurityWafExclusionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["exclusion_filter_id"] = exclusion_filter_id + + return self._get_application_security_waf_exclusion_filter_endpoint.call_with_http_info(**kwargs) + + def get_application_security_waf_policy(self, policy_id: str, ) -> ApplicationSecurityPolicyResponse: + """Get a WAF Policy. + + Retrieve a WAF policy by ID. + + :param policy_id: The ID of the policy. + :type policy_id: str + :rtype: ApplicationSecurityPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + return self._get_application_security_waf_policy_endpoint.call_with_http_info(**kwargs) + + def get_asm_service_by_name(self, service_filter: str, ) -> ApplicationSecurityServicesResponse: + """Get Application Security details for a service. + + Retrieve Application Security details for services matching the given name. + Returns Application Security activation, compatibility, and product enablement + information for each matching ``(service, environment)`` pair, along with a count + of services that have Application Security Management (Threats) enabled. + + :param service_filter: The name of the service to retrieve Application Security details for. + Returns all matching services across environments. + :type service_filter: str + :rtype: ApplicationSecurityServicesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_filter"] = service_filter + + return self._get_asm_service_by_name_endpoint.call_with_http_info(**kwargs) + + def list_application_security_waf_custom_rules(self, ) -> ApplicationSecurityWafCustomRuleListResponse: + """List all WAF custom rules. + + Retrieve a list of WAF custom rule. + + :rtype: ApplicationSecurityWafCustomRuleListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_application_security_waf_custom_rules_endpoint.call_with_http_info(**kwargs) + + def list_application_security_waf_exclusion_filters(self, ) -> ApplicationSecurityWafExclusionFiltersResponse: + """List all WAF exclusion filters. + + Retrieve a list of WAF exclusion filters. + + :rtype: ApplicationSecurityWafExclusionFiltersResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_application_security_waf_exclusion_filters_endpoint.call_with_http_info(**kwargs) + + def list_application_security_waf_policies(self, ) -> ApplicationSecurityPolicyListResponse: + """List all WAF policies. + + Retrieve a list of WAF policies. + + :rtype: ApplicationSecurityPolicyListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_application_security_waf_policies_endpoint.call_with_http_info(**kwargs) + + def update_application_security_waf_custom_rule(self, custom_rule_id: str, body: ApplicationSecurityWafCustomRuleUpdateRequest, ) -> ApplicationSecurityWafCustomRuleResponse: + """Update a WAF Custom Rule. + + Update a specific WAF custom Rule. + Returns the Custom Rule object when the request is successful. + + :param custom_rule_id: The ID of the custom rule. + :type custom_rule_id: str + :param body: New definition of the WAF Custom Rule. + :type body: ApplicationSecurityWafCustomRuleUpdateRequest + :rtype: ApplicationSecurityWafCustomRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["custom_rule_id"] = custom_rule_id + + kwargs["body"] = body + + return self._update_application_security_waf_custom_rule_endpoint.call_with_http_info(**kwargs) + + def update_application_security_waf_exclusion_filter(self, exclusion_filter_id: str, body: ApplicationSecurityWafExclusionFilterUpdateRequest, ) -> ApplicationSecurityWafExclusionFilterResponse: + """Update a WAF exclusion filter. + + Update a specific WAF exclusion filter using its identifier. + Returns the exclusion filter object when the request is successful. + + :param exclusion_filter_id: The identifier of the WAF exclusion filter. + :type exclusion_filter_id: str + :param body: The exclusion filter to update. + :type body: ApplicationSecurityWafExclusionFilterUpdateRequest + :rtype: ApplicationSecurityWafExclusionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["exclusion_filter_id"] = exclusion_filter_id + + kwargs["body"] = body + + return self._update_application_security_waf_exclusion_filter_endpoint.call_with_http_info(**kwargs) + + def update_application_security_waf_policy(self, policy_id: str, body: ApplicationSecurityPolicyUpdateRequest, ) -> ApplicationSecurityPolicyResponse: + """Update a WAF Policy. + + Update a specific WAF policy. + Returns the policy object when the request is successful. + + :param policy_id: The ID of the policy. + :type policy_id: str + :param body: New WAF policy. + :type body: ApplicationSecurityPolicyUpdateRequest + :rtype: ApplicationSecurityPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + kwargs["body"] = body + + return self._update_application_security_waf_policy_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/audit_api.py b/datadog_api_client/v2/api/audit_api.py new file mode 100644 index 0000000000..92914016d9 --- /dev/null +++ b/datadog_api_client/v2/api/audit_api.py @@ -0,0 +1,248 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.audit_logs_events_response import AuditLogsEventsResponse +from datadog_api_client.v2.model.audit_logs_sort import AuditLogsSort +from datadog_api_client.v2.model.audit_logs_event import AuditLogsEvent +from datadog_api_client.v2.model.audit_logs_search_events_request import AuditLogsSearchEventsRequest + + +class AuditApi: + """ + Search your Audit Logs events over HTTP. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_audit_logs_endpoint = _Endpoint( + settings={ + "response_type": (AuditLogsEventsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/audit/events", + "operation_id": "list_audit_logs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_from": { + "openapi_types": (datetime,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (datetime,), + "attribute": "filter[to]", + "location": "query", + }, + "sort": { + "openapi_types": (AuditLogsSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_audit_logs_endpoint = _Endpoint( + settings={ + "response_type": (AuditLogsEventsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/audit/events/search", + "operation_id": "search_audit_logs", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "openapi_types": (AuditLogsSearchEventsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def list_audit_logs(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[AuditLogsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> AuditLogsEventsResponse: + """Get a list of Audit Logs events. + + List endpoint returns events that match a Audit Logs search query. + `Results are paginated `_. + + Use this endpoint to see your latest Audit Logs events. + + :param filter_query: Search query following Audit Logs syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested events. + :type filter_to: datetime, optional + :param sort: Order of events in results. + :type sort: AuditLogsSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + :rtype: AuditLogsEventsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_audit_logs_endpoint.call_with_http_info(**kwargs) + + def list_audit_logs_with_pagination(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[AuditLogsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[AuditLogsEvent]: + """Get a list of Audit Logs events. + + Provide a paginated version of :meth:`list_audit_logs`, returning all items. + + :param filter_query: Search query following Audit Logs syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested events. + :type filter_to: datetime, optional + :param sort: Order of events in results. + :type sort: AuditLogsSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[AuditLogsEvent] + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_audit_logs_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def search_audit_logs(self, *, body: Union[AuditLogsSearchEventsRequest, UnsetType]=unset, ) -> AuditLogsEventsResponse: + """Search Audit Logs events. + + List endpoint returns Audit Logs events that match an Audit search query. + `Results are paginated `_. + + Use this endpoint to build complex Audit Logs events filtering and search. + + :type body: AuditLogsSearchEventsRequest, optional + :rtype: AuditLogsEventsResponse + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + return self._search_audit_logs_endpoint.call_with_http_info(**kwargs) + + def search_audit_logs_with_pagination(self, *, body: Union[AuditLogsSearchEventsRequest, UnsetType]=unset, ) -> collections.abc.Iterable[AuditLogsEvent]: + """Search Audit Logs events. + + Provide a paginated version of :meth:`search_audit_logs`, returning all items. + + :type body: AuditLogsSearchEventsRequest, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[AuditLogsEvent] + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.page.limit", 10) + endpoint = self._search_audit_logs_endpoint + set_attribute_from_path(kwargs, "body.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.page.cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/authn_mappings_api.py b/datadog_api_client/v2/api/authn_mappings_api.py new file mode 100644 index 0000000000..e3bf102413 --- /dev/null +++ b/datadog_api_client/v2/api/authn_mappings_api.py @@ -0,0 +1,273 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.authn_mappings_response import AuthNMappingsResponse +from datadog_api_client.v2.model.authn_mappings_sort import AuthNMappingsSort +from datadog_api_client.v2.model.authn_mapping_resource_type import AuthNMappingResourceType +from datadog_api_client.v2.model.authn_mapping_response import AuthNMappingResponse +from datadog_api_client.v2.model.authn_mapping_create_request import AuthNMappingCreateRequest +from datadog_api_client.v2.model.authn_mapping_update_request import AuthNMappingUpdateRequest + + +class AuthNMappingsApi: + """ + `The AuthN Mappings API `_ + is used to automatically map groups of users to roles in Datadog using attributes + sent from Identity Providers. Use these endpoints to manage your AuthN Mappings. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_authn_mapping_endpoint = _Endpoint( + settings={ + "response_type": (AuthNMappingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/authn_mappings", + "operation_id": "create_authn_mapping", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AuthNMappingCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_authn_mapping_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/authn_mappings/{authn_mapping_id}", + "operation_id": "delete_authn_mapping", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "authn_mapping_id": { + "required": True, + "openapi_types": (str,), + "attribute": "authn_mapping_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_authn_mapping_endpoint = _Endpoint( + settings={ + "response_type": (AuthNMappingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/authn_mappings/{authn_mapping_id}", + "operation_id": "get_authn_mapping", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "authn_mapping_id": { + "required": True, + "openapi_types": (str,), + "attribute": "authn_mapping_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_authn_mappings_endpoint = _Endpoint( + settings={ + "response_type": (AuthNMappingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/authn_mappings", + "operation_id": "list_authn_mappings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (AuthNMappingsSort,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "resource_type": { + "openapi_types": (AuthNMappingResourceType,), + "attribute": "resource_type", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_authn_mapping_endpoint = _Endpoint( + settings={ + "response_type": (AuthNMappingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/authn_mappings/{authn_mapping_id}", + "operation_id": "update_authn_mapping", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "authn_mapping_id": { + "required": True, + "openapi_types": (str,), + "attribute": "authn_mapping_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AuthNMappingUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_authn_mapping(self, body: AuthNMappingCreateRequest, ) -> AuthNMappingResponse: + """Create an AuthN Mapping. + + Create an AuthN Mapping. + + :type body: AuthNMappingCreateRequest + :rtype: AuthNMappingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_authn_mapping_endpoint.call_with_http_info(**kwargs) + + def delete_authn_mapping(self, authn_mapping_id: str, ) -> None: + """Delete an AuthN Mapping. + + Delete an AuthN Mapping specified by AuthN Mapping UUID. + + :param authn_mapping_id: The UUID of the AuthN Mapping. + :type authn_mapping_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["authn_mapping_id"] = authn_mapping_id + + return self._delete_authn_mapping_endpoint.call_with_http_info(**kwargs) + + def get_authn_mapping(self, authn_mapping_id: str, ) -> AuthNMappingResponse: + """Get an AuthN Mapping by UUID. + + Get an AuthN Mapping specified by the AuthN Mapping UUID. + + :param authn_mapping_id: The UUID of the AuthN Mapping. + :type authn_mapping_id: str + :rtype: AuthNMappingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["authn_mapping_id"] = authn_mapping_id + + return self._get_authn_mapping_endpoint.call_with_http_info(**kwargs) + + def list_authn_mappings(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[AuthNMappingsSort, UnsetType]=unset, filter: Union[str, UnsetType]=unset, resource_type: Union[AuthNMappingResourceType, UnsetType]=unset, ) -> AuthNMappingsResponse: + """List all AuthN Mappings. + + List all AuthN Mappings in the org. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Sort AuthN Mappings depending on the given field. + :type sort: AuthNMappingsSort, optional + :param filter: Filter all mappings by the given string. + :type filter: str, optional + :param resource_type: Filter by mapping resource type. Defaults to "role" if not specified. + :type resource_type: AuthNMappingResourceType, optional + :rtype: AuthNMappingsResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + if resource_type is not unset: + kwargs["resource_type"] = resource_type + + return self._list_authn_mappings_endpoint.call_with_http_info(**kwargs) + + def update_authn_mapping(self, authn_mapping_id: str, body: AuthNMappingUpdateRequest, ) -> AuthNMappingResponse: + """Edit an AuthN Mapping. + + Edit an AuthN Mapping. + + :param authn_mapping_id: The UUID of the AuthN Mapping. + :type authn_mapping_id: str + :type body: AuthNMappingUpdateRequest + :rtype: AuthNMappingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["authn_mapping_id"] = authn_mapping_id + + kwargs["body"] = body + + return self._update_authn_mapping_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/aws_integration_api.py b/datadog_api_client/v2/api/aws_integration_api.py new file mode 100644 index 0000000000..87cfa38ef6 --- /dev/null +++ b/datadog_api_client/v2/api/aws_integration_api.py @@ -0,0 +1,794 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.aws_accounts_response import AWSAccountsResponse +from datadog_api_client.v2.model.aws_account_response import AWSAccountResponse +from datadog_api_client.v2.model.aws_account_create_request import AWSAccountCreateRequest +from datadog_api_client.v2.model.aws_account_update_request import AWSAccountUpdateRequest +from datadog_api_client.v2.model.aws_ccm_config_response import AWSCcmConfigResponse +from datadog_api_client.v2.model.aws_ccm_config_request import AWSCcmConfigRequest +from datadog_api_client.v2.model.aws_metric_name_filter_preview_response import AWSMetricNameFilterPreviewResponse +from datadog_api_client.v2.model.aws_metric_name_filter_preview_request import AWSMetricNameFilterPreviewRequest +from datadog_api_client.v2.model.aws_namespaces_response import AWSNamespacesResponse +from datadog_api_client.v2.model.aws_event_bridge_delete_response import AWSEventBridgeDeleteResponse +from datadog_api_client.v2.model.aws_event_bridge_delete_request import AWSEventBridgeDeleteRequest +from datadog_api_client.v2.model.aws_event_bridge_list_response import AWSEventBridgeListResponse +from datadog_api_client.v2.model.aws_event_bridge_create_response import AWSEventBridgeCreateResponse +from datadog_api_client.v2.model.aws_event_bridge_create_request import AWSEventBridgeCreateRequest +from datadog_api_client.v2.model.aws_new_external_id_response import AWSNewExternalIDResponse +from datadog_api_client.v2.model.aws_integration_iam_permissions_response import AWSIntegrationIamPermissionsResponse +from datadog_api_client.v2.model.aws_ccm_config_validation_response import AWSCcmConfigValidationResponse +from datadog_api_client.v2.model.aws_ccm_config_validation_request import AWSCcmConfigValidationRequest + + +class AWSIntegrationApi: + """ + Configure your Datadog-AWS integration directly through the Datadog API. + For more information, see the `AWS integration page `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_aws_account_endpoint = _Endpoint( + settings={ + "response_type": (AWSAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts", + "operation_id": "create_aws_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSAccountCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_aws_account_ccm_config_endpoint = _Endpoint( + settings={ + "response_type": (AWSCcmConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts/{aws_account_config_id}/ccm_config", + "operation_id": "create_aws_account_ccm_config", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "aws_account_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "aws_account_config_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AWSCcmConfigRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_aws_event_bridge_source_endpoint = _Endpoint( + settings={ + "response_type": (AWSEventBridgeCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/event_bridge", + "operation_id": "create_aws_event_bridge_source", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSEventBridgeCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_new_aws_external_id_endpoint = _Endpoint( + settings={ + "response_type": (AWSNewExternalIDResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/generate_new_external_id", + "operation_id": "create_new_aws_external_id", + "http_method": "POST", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_aws_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts/{aws_account_config_id}", + "operation_id": "delete_aws_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "aws_account_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "aws_account_config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_aws_account_ccm_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts/{aws_account_config_id}/ccm_config", + "operation_id": "delete_aws_account_ccm_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "aws_account_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "aws_account_config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_aws_event_bridge_source_endpoint = _Endpoint( + settings={ + "response_type": (AWSEventBridgeDeleteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/event_bridge", + "operation_id": "delete_aws_event_bridge_source", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSEventBridgeDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_aws_account_endpoint = _Endpoint( + settings={ + "response_type": (AWSAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts/{aws_account_config_id}", + "operation_id": "get_aws_account", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "aws_account_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "aws_account_config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_aws_account_ccm_config_endpoint = _Endpoint( + settings={ + "response_type": (AWSCcmConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts/{aws_account_config_id}/ccm_config", + "operation_id": "get_aws_account_ccm_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "aws_account_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "aws_account_config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_aws_integration_iam_permissions_endpoint = _Endpoint( + settings={ + "response_type": (AWSIntegrationIamPermissionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/iam_permissions", + "operation_id": "get_aws_integration_iam_permissions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_aws_integration_iam_permissions_resource_collection_endpoint = _Endpoint( + settings={ + "response_type": (AWSIntegrationIamPermissionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/iam_permissions/resource_collection", + "operation_id": "get_aws_integration_iam_permissions_resource_collection", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_aws_integration_iam_permissions_standard_endpoint = _Endpoint( + settings={ + "response_type": (AWSIntegrationIamPermissionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/iam_permissions/standard", + "operation_id": "get_aws_integration_iam_permissions_standard", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_aws_metric_name_filter_preview_endpoint = _Endpoint( + settings={ + "response_type": (AWSMetricNameFilterPreviewResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts/{aws_account_config_id}/metric_name_filter_preview", + "operation_id": "get_aws_metric_name_filter_preview", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "aws_account_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "aws_account_config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_accounts_endpoint = _Endpoint( + settings={ + "response_type": (AWSAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts", + "operation_id": "list_aws_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "aws_account_id": { + "openapi_types": (str,), + "attribute": "aws_account_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_event_bridge_sources_endpoint = _Endpoint( + settings={ + "response_type": (AWSEventBridgeListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/event_bridge", + "operation_id": "list_aws_event_bridge_sources", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_namespaces_endpoint = _Endpoint( + settings={ + "response_type": (AWSNamespacesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/available_namespaces", + "operation_id": "list_aws_namespaces", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._preview_aws_metric_name_filter_endpoint = _Endpoint( + settings={ + "response_type": (AWSMetricNameFilterPreviewResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts/{aws_account_config_id}/metric_name_filter_preview", + "operation_id": "preview_aws_metric_name_filter", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "aws_account_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "aws_account_config_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AWSMetricNameFilterPreviewRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_aws_account_endpoint = _Endpoint( + settings={ + "response_type": (AWSAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts/{aws_account_config_id}", + "operation_id": "update_aws_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "aws_account_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "aws_account_config_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AWSAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_aws_account_ccm_config_endpoint = _Endpoint( + settings={ + "response_type": (AWSCcmConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/accounts/{aws_account_config_id}/ccm_config", + "operation_id": "update_aws_account_ccm_config", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "aws_account_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "aws_account_config_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AWSCcmConfigRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_awsccm_config_endpoint = _Endpoint( + settings={ + "response_type": (AWSCcmConfigValidationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/validate_ccm_config", + "operation_id": "validate_awsccm_config", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSCcmConfigValidationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_aws_account(self, body: AWSAccountCreateRequest, ) -> AWSAccountResponse: + """Create an AWS integration. + + Create a new AWS Account Integration Config. + + :type body: AWSAccountCreateRequest + :rtype: AWSAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_aws_account_endpoint.call_with_http_info(**kwargs) + + def create_aws_account_ccm_config(self, aws_account_config_id: str, body: AWSCcmConfigRequest, ) -> AWSCcmConfigResponse: + """Create AWS CCM config. + + Create the Cloud Cost Management config for an AWS Account Integration Config using Cost and Usage Report + (CUR) 2.0 by config ID. + + :param aws_account_config_id: Unique Datadog ID of the AWS Account Integration Config. To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type aws_account_config_id: str + :param body: Create a Cloud Cost Management config for an AWS Account Integration Config. + :type body: AWSCcmConfigRequest + :rtype: AWSCcmConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["aws_account_config_id"] = aws_account_config_id + + kwargs["body"] = body + + return self._create_aws_account_ccm_config_endpoint.call_with_http_info(**kwargs) + + def create_aws_event_bridge_source(self, body: AWSEventBridgeCreateRequest, ) -> AWSEventBridgeCreateResponse: + """Create an Amazon EventBridge source. + + Create an Amazon EventBridge source. + + :param body: Create an Amazon EventBridge source for an AWS account with a given name and region. + :type body: AWSEventBridgeCreateRequest + :rtype: AWSEventBridgeCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_aws_event_bridge_source_endpoint.call_with_http_info(**kwargs) + + def create_new_aws_external_id(self, ) -> AWSNewExternalIDResponse: + """Generate a new external ID. + + Generate a new external ID for AWS role-based authentication. + + :rtype: AWSNewExternalIDResponse + """ + kwargs: Dict[str, Any] = {} + return self._create_new_aws_external_id_endpoint.call_with_http_info(**kwargs) + + def delete_aws_account(self, aws_account_config_id: str, ) -> None: + """Delete an AWS integration. + + Delete an AWS Account Integration Config by config ID. + + :param aws_account_config_id: Unique Datadog ID of the AWS Account Integration Config. To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type aws_account_config_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["aws_account_config_id"] = aws_account_config_id + + return self._delete_aws_account_endpoint.call_with_http_info(**kwargs) + + def delete_aws_account_ccm_config(self, aws_account_config_id: str, ) -> None: + """Delete AWS CCM config. + + Delete the Cloud Cost Management config for an AWS Account Integration Config using Cost and Usage Report + (CUR) 2.0 by config ID. + + :param aws_account_config_id: Unique Datadog ID of the AWS Account Integration Config. To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type aws_account_config_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["aws_account_config_id"] = aws_account_config_id + + return self._delete_aws_account_ccm_config_endpoint.call_with_http_info(**kwargs) + + def delete_aws_event_bridge_source(self, body: AWSEventBridgeDeleteRequest, ) -> AWSEventBridgeDeleteResponse: + """Delete an Amazon EventBridge source. + + Delete an Amazon EventBridge source. + + :param body: Delete the Amazon EventBridge source with the given name, region, and associated AWS account. + :type body: AWSEventBridgeDeleteRequest + :rtype: AWSEventBridgeDeleteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_aws_event_bridge_source_endpoint.call_with_http_info(**kwargs) + + def get_aws_account(self, aws_account_config_id: str, ) -> AWSAccountResponse: + """Get an AWS integration by config ID. + + Get an AWS Account Integration Config by config ID. + + :param aws_account_config_id: Unique Datadog ID of the AWS Account Integration Config. To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type aws_account_config_id: str + :rtype: AWSAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["aws_account_config_id"] = aws_account_config_id + + return self._get_aws_account_endpoint.call_with_http_info(**kwargs) + + def get_aws_account_ccm_config(self, aws_account_config_id: str, ) -> AWSCcmConfigResponse: + """Get AWS CCM config. + + Get the Cloud Cost Management config for an AWS Account Integration Config using Cost and Usage Report + (CUR) 2.0 by config ID. + + :param aws_account_config_id: Unique Datadog ID of the AWS Account Integration Config. To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type aws_account_config_id: str + :rtype: AWSCcmConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["aws_account_config_id"] = aws_account_config_id + + return self._get_aws_account_ccm_config_endpoint.call_with_http_info(**kwargs) + + def get_aws_integration_iam_permissions(self, ) -> AWSIntegrationIamPermissionsResponse: + """Get AWS integration IAM permissions. + + Get all AWS IAM permissions required for the AWS integration. + + :rtype: AWSIntegrationIamPermissionsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_aws_integration_iam_permissions_endpoint.call_with_http_info(**kwargs) + + def get_aws_integration_iam_permissions_resource_collection(self, ) -> AWSIntegrationIamPermissionsResponse: + """Get resource collection IAM permissions. + + Get all resource collection AWS IAM permissions required for the AWS integration. + + :rtype: AWSIntegrationIamPermissionsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_aws_integration_iam_permissions_resource_collection_endpoint.call_with_http_info(**kwargs) + + def get_aws_integration_iam_permissions_standard(self, ) -> AWSIntegrationIamPermissionsResponse: + """Get AWS integration standard IAM permissions. + + Get all standard AWS IAM permissions required for the AWS integration. + + :rtype: AWSIntegrationIamPermissionsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_aws_integration_iam_permissions_standard_endpoint.call_with_http_info(**kwargs) + + def get_aws_metric_name_filter_preview(self, aws_account_config_id: str, ) -> AWSMetricNameFilterPreviewResponse: + """Get AWS metric name filter preview. + + Preview which collected CloudWatch metrics would be filtered by the account's saved metric name filters. + + :param aws_account_config_id: Unique Datadog ID of the AWS Account Integration Config. To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type aws_account_config_id: str + :rtype: AWSMetricNameFilterPreviewResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["aws_account_config_id"] = aws_account_config_id + + return self._get_aws_metric_name_filter_preview_endpoint.call_with_http_info(**kwargs) + + def list_aws_accounts(self, *, aws_account_id: Union[str, UnsetType]=unset, ) -> AWSAccountsResponse: + """List all AWS integrations. + + Get a list of AWS Account Integration Configs. + + :param aws_account_id: Optional query parameter to filter accounts by AWS Account ID. + If not provided, all accounts are returned. + :type aws_account_id: str, optional + :rtype: AWSAccountsResponse + """ + kwargs: Dict[str, Any] = {} + if aws_account_id is not unset: + kwargs["aws_account_id"] = aws_account_id + + return self._list_aws_accounts_endpoint.call_with_http_info(**kwargs) + + def list_aws_event_bridge_sources(self, ) -> AWSEventBridgeListResponse: + """Get all Amazon EventBridge sources. + + Get all Amazon EventBridge sources. + + :rtype: AWSEventBridgeListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_aws_event_bridge_sources_endpoint.call_with_http_info(**kwargs) + + def list_aws_namespaces(self, ) -> AWSNamespacesResponse: + """List available namespaces. + + Get a list of available AWS CloudWatch namespaces that can send metrics to Datadog. + + :rtype: AWSNamespacesResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_aws_namespaces_endpoint.call_with_http_info(**kwargs) + + def preview_aws_metric_name_filter(self, aws_account_config_id: str, body: AWSMetricNameFilterPreviewRequest, ) -> AWSMetricNameFilterPreviewResponse: + """Preview AWS metric name filter. + + Preview which collected CloudWatch metrics would be filtered by the supplied metric name filters. + The filters are not persisted. + + :param aws_account_config_id: Unique Datadog ID of the AWS Account Integration Config. To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type aws_account_config_id: str + :param body: The metric name filters to preview. + :type body: AWSMetricNameFilterPreviewRequest + :rtype: AWSMetricNameFilterPreviewResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["aws_account_config_id"] = aws_account_config_id + + kwargs["body"] = body + + return self._preview_aws_metric_name_filter_endpoint.call_with_http_info(**kwargs) + + def update_aws_account(self, aws_account_config_id: str, body: AWSAccountUpdateRequest, ) -> AWSAccountResponse: + """Update an AWS integration. + + Update an AWS Account Integration Config by config ID. + + :param aws_account_config_id: Unique Datadog ID of the AWS Account Integration Config. To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type aws_account_config_id: str + :type body: AWSAccountUpdateRequest + :rtype: AWSAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["aws_account_config_id"] = aws_account_config_id + + kwargs["body"] = body + + return self._update_aws_account_endpoint.call_with_http_info(**kwargs) + + def update_aws_account_ccm_config(self, aws_account_config_id: str, body: AWSCcmConfigRequest, ) -> AWSCcmConfigResponse: + """Update AWS CCM config. + + Update the Cloud Cost Management config for an AWS Account Integration Config using Cost and Usage Report + (CUR) 2.0 by config ID. + + :param aws_account_config_id: Unique Datadog ID of the AWS Account Integration Config. To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type aws_account_config_id: str + :param body: Update a Cloud Cost Management config for an AWS Account Integration Config. + :type body: AWSCcmConfigRequest + :rtype: AWSCcmConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["aws_account_config_id"] = aws_account_config_id + + kwargs["body"] = body + + return self._update_aws_account_ccm_config_endpoint.call_with_http_info(**kwargs) + + def validate_awsccm_config(self, body: AWSCcmConfigValidationRequest, ) -> AWSCcmConfigValidationResponse: + """Validate AWS CCM config. + + Validate a Cloud Cost Management config for an AWS account using Cost and Usage Report + (CUR) 2.0 against Datadog's ingest requirements without persisting it. + + :param body: Validate a Cloud Cost Management config for an AWS account integration config. + :type body: AWSCcmConfigValidationRequest + :rtype: AWSCcmConfigValidationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._validate_awsccm_config_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/aws_logs_integration_api.py b/datadog_api_client/v2/api/aws_logs_integration_api.py new file mode 100644 index 0000000000..454235d7f3 --- /dev/null +++ b/datadog_api_client/v2/api/aws_logs_integration_api.py @@ -0,0 +1,61 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.aws_logs_services_response import AWSLogsServicesResponse + + +class AWSLogsIntegrationApi: + """ + Configure your Datadog-AWS-Logs integration directly through Datadog API. + For more information, see the `AWS integration page `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_aws_logs_services_endpoint = _Endpoint( + settings={ + "response_type": (AWSLogsServicesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/aws/logs/services", + "operation_id": "list_aws_logs_services", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def list_aws_logs_services(self, ) -> AWSLogsServicesResponse: + """Get list of AWS log ready services. + + Get a list of AWS services that can send logs to Datadog. + + :rtype: AWSLogsServicesResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_aws_logs_services_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/bits_ai_api.py b/datadog_api_client/v2/api/bits_ai_api.py new file mode 100644 index 0000000000..45560a6625 --- /dev/null +++ b/datadog_api_client/v2/api/bits_ai_api.py @@ -0,0 +1,208 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_investigations_response import ListInvestigationsResponse +from datadog_api_client.v2.model.list_investigations_response_data import ListInvestigationsResponseData +from datadog_api_client.v2.model.trigger_investigation_response import TriggerInvestigationResponse +from datadog_api_client.v2.model.trigger_investigation_request import TriggerInvestigationRequest +from datadog_api_client.v2.model.get_investigation_response import GetInvestigationResponse + + +class BitsAIApi: + """ + Use the Bits AI endpoints to retrieve AI-powered investigations. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_investigation_endpoint = _Endpoint( + settings={ + "response_type": (GetInvestigationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/bits-ai/investigations/{id}", + "operation_id": "get_investigation", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_investigations_endpoint = _Endpoint( + settings={ + "response_type": (ListInvestigationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/bits-ai/investigations", + "operation_id": "list_investigations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 100, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "filter_monitor_id": { + "openapi_types": (int,), + "attribute": "filter[monitor_id]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._trigger_investigation_endpoint = _Endpoint( + settings={ + "response_type": (TriggerInvestigationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/bits-ai/investigations", + "operation_id": "trigger_investigation", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TriggerInvestigationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def get_investigation(self, id: str, ) -> GetInvestigationResponse: + """Get a Bits AI investigation. + + Get a specific Bits AI investigation by ID. + + :param id: The ID of the investigation. + :type id: str + :rtype: GetInvestigationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_investigation_endpoint.call_with_http_info(**kwargs) + + def list_investigations(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_monitor_id: Union[int, UnsetType]=unset, ) -> ListInvestigationsResponse: + """List Bits AI investigations. + + List all Bits AI investigations for the organization. + + :param page_offset: Offset for pagination. + :type page_offset: int, optional + :param page_limit: Maximum number of investigations to return. + :type page_limit: int, optional + :param filter_monitor_id: Filter investigations by monitor ID. + :type filter_monitor_id: int, optional + :rtype: ListInvestigationsResponse + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_monitor_id is not unset: + kwargs["filter_monitor_id"] = filter_monitor_id + + return self._list_investigations_endpoint.call_with_http_info(**kwargs) + + def list_investigations_with_pagination(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_monitor_id: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[ListInvestigationsResponseData]: + """List Bits AI investigations. + + Provide a paginated version of :meth:`list_investigations`, returning all items. + + :param page_offset: Offset for pagination. + :type page_offset: int, optional + :param page_limit: Maximum number of investigations to return. + :type page_limit: int, optional + :param filter_monitor_id: Filter investigations by monitor ID. + :type filter_monitor_id: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[ListInvestigationsResponseData] + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_monitor_id is not unset: + kwargs["filter_monitor_id"] = filter_monitor_id + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 25) + endpoint = self._list_investigations_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def trigger_investigation(self, body: TriggerInvestigationRequest, ) -> TriggerInvestigationResponse: + """Trigger a Bits AI investigation. + + Trigger a new Bits AI investigation based on a monitor alert. + + :param body: Trigger investigation request body. + :type body: TriggerInvestigationRequest + :rtype: TriggerInvestigationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._trigger_investigation_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/case_management_api.py b/datadog_api_client/v2/api/case_management_api.py new file mode 100644 index 0000000000..108a9eb99e --- /dev/null +++ b/datadog_api_client/v2/api/case_management_api.py @@ -0,0 +1,3076 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.cases_response import CasesResponse +from datadog_api_client.v2.model.case_sortable_field import CaseSortableField +from datadog_api_client.v2.model.case import Case +from datadog_api_client.v2.model.case_response import CaseResponse +from datadog_api_client.v2.model.case_create_request import CaseCreateRequest +from datadog_api_client.v2.model.case_aggregate_response import CaseAggregateResponse +from datadog_api_client.v2.model.case_aggregate_request import CaseAggregateRequest +from datadog_api_client.v2.model.case_bulk_update_request import CaseBulkUpdateRequest +from datadog_api_client.v2.model.case_count_response import CaseCountResponse +from datadog_api_client.v2.model.case_links_response import CaseLinksResponse +from datadog_api_client.v2.model.case_link_response import CaseLinkResponse +from datadog_api_client.v2.model.case_link_create_request import CaseLinkCreateRequest +from datadog_api_client.v2.model.projects_response import ProjectsResponse +from datadog_api_client.v2.model.project_response import ProjectResponse +from datadog_api_client.v2.model.project_create_request import ProjectCreateRequest +from datadog_api_client.v2.model.project_favorites_response import ProjectFavoritesResponse +from datadog_api_client.v2.model.project_update_request import ProjectUpdateRequest +from datadog_api_client.v2.model.case_notification_rules_response import CaseNotificationRulesResponse +from datadog_api_client.v2.model.case_notification_rule_response import CaseNotificationRuleResponse +from datadog_api_client.v2.model.case_notification_rule_create_request import CaseNotificationRuleCreateRequest +from datadog_api_client.v2.model.case_notification_rule_update_request import CaseNotificationRuleUpdateRequest +from datadog_api_client.v2.model.automation_rules_response import AutomationRulesResponse +from datadog_api_client.v2.model.automation_rule_response import AutomationRuleResponse +from datadog_api_client.v2.model.automation_rule_create_request import AutomationRuleCreateRequest +from datadog_api_client.v2.model.automation_rule_update_request import AutomationRuleUpdateRequest +from datadog_api_client.v2.model.case_views_response import CaseViewsResponse +from datadog_api_client.v2.model.case_view_response import CaseViewResponse +from datadog_api_client.v2.model.case_view_create_request import CaseViewCreateRequest +from datadog_api_client.v2.model.case_view_update_request import CaseViewUpdateRequest +from datadog_api_client.v2.model.case_empty_request import CaseEmptyRequest +from datadog_api_client.v2.model.case_assign_request import CaseAssignRequest +from datadog_api_client.v2.model.case_update_attributes_request import CaseUpdateAttributesRequest +from datadog_api_client.v2.model.timeline_response import TimelineResponse +from datadog_api_client.v2.model.case_comment_request import CaseCommentRequest +from datadog_api_client.v2.model.case_update_comment_request import CaseUpdateCommentRequest +from datadog_api_client.v2.model.case_update_custom_attribute_request import CaseUpdateCustomAttributeRequest +from datadog_api_client.v2.model.case_update_description_request import CaseUpdateDescriptionRequest +from datadog_api_client.v2.model.case_update_due_date_request import CaseUpdateDueDateRequest +from datadog_api_client.v2.model.case_insights_request import CaseInsightsRequest +from datadog_api_client.v2.model.case_update_priority_request import CaseUpdatePriorityRequest +from datadog_api_client.v2.model.relationship_to_incident_request import RelationshipToIncidentRequest +from datadog_api_client.v2.model.jira_issue_link_request import JiraIssueLinkRequest +from datadog_api_client.v2.model.jira_issue_create_request import JiraIssueCreateRequest +from datadog_api_client.v2.model.notebook_create_request import NotebookCreateRequest +from datadog_api_client.v2.model.project_relationship import ProjectRelationship +from datadog_api_client.v2.model.service_now_ticket_create_request import ServiceNowTicketCreateRequest +from datadog_api_client.v2.model.case_update_resolved_reason_request import CaseUpdateResolvedReasonRequest +from datadog_api_client.v2.model.case_update_status_request import CaseUpdateStatusRequest +from datadog_api_client.v2.model.case_update_title_request import CaseUpdateTitleRequest +from datadog_api_client.v2.model.case_watchers_response import CaseWatchersResponse +from datadog_api_client.v2.model.maintenance_windows_response import MaintenanceWindowsResponse +from datadog_api_client.v2.model.maintenance_window_response import MaintenanceWindowResponse +from datadog_api_client.v2.model.maintenance_window_create_request import MaintenanceWindowCreateRequest +from datadog_api_client.v2.model.maintenance_window_update_request import MaintenanceWindowUpdateRequest + + +class CaseManagementApi: + """ + View and manage cases and projects within Case Management. See the `Case Management page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._add_case_insights_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/insights", + "operation_id": "add_case_insights", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseInsightsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._aggregate_cases_endpoint = _Endpoint( + settings={ + "response_type": (CaseAggregateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/aggregate", + "operation_id": "aggregate_cases", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CaseAggregateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._archive_case_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/archive", + "operation_id": "archive_case", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseEmptyRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._assign_case_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/assign", + "operation_id": "assign_case", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseAssignRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_update_cases_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/bulk", + "operation_id": "bulk_update_cases", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CaseBulkUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._comment_case_endpoint = _Endpoint( + settings={ + "response_type": (TimelineResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cases/{case_id}/comment", + "operation_id": "comment_case", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseCommentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._count_cases_endpoint = _Endpoint( + settings={ + "response_type": (CaseCountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/count", + "operation_id": "count_cases", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "query_filter": { + "openapi_types": (str,), + "attribute": "query_filter", + "location": "query", + }, + "group_bys": { + "openapi_types": (str,), + "attribute": "group_bys", + "location": "query", + }, + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._create_case_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases", + "operation_id": "create_case", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CaseCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_case_automation_rule_endpoint = _Endpoint( + settings={ + "response_type": (AutomationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/rules", + "operation_id": "create_case_automation_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AutomationRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_case_jira_issue_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/relationships/jira_issues", + "operation_id": "create_case_jira_issue", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (JiraIssueCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_case_link_endpoint = _Endpoint( + settings={ + "response_type": (CaseLinkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/link", + "operation_id": "create_case_link", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CaseLinkCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_case_notebook_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/relationships/notebook", + "operation_id": "create_case_notebook", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (NotebookCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_case_service_now_ticket_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/relationships/servicenow_tickets", + "operation_id": "create_case_service_now_ticket", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ServiceNowTicketCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_case_view_endpoint = _Endpoint( + settings={ + "response_type": (CaseViewResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/views", + "operation_id": "create_case_view", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CaseViewCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_maintenance_window_endpoint = _Endpoint( + settings={ + "response_type": (MaintenanceWindowResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/maintenance_windows", + "operation_id": "create_maintenance_window", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MaintenanceWindowCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_project_endpoint = _Endpoint( + settings={ + "response_type": (ProjectResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects", + "operation_id": "create_project", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ProjectCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_project_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (CaseNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/notification_rules", + "operation_id": "create_project_notification_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseNotificationRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_case_automation_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/rules/{rule_id}", + "operation_id": "delete_case_automation_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_case_comment_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cases/{case_id}/comment/{cell_id}", + "operation_id": "delete_case_comment", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "cell_id": { + "required": True, + "openapi_types": (str,), + "attribute": "cell_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_case_custom_attribute_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/custom_attributes/{custom_attribute_key}", + "operation_id": "delete_case_custom_attribute", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "custom_attribute_key": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_attribute_key", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_case_link_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/link/{link_id}", + "operation_id": "delete_case_link", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "link_id": { + "required": True, + "openapi_types": (str,), + "attribute": "link_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_case_view_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/views/{view_id}", + "operation_id": "delete_case_view", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "view_id": { + "required": True, + "openapi_types": (str,), + "attribute": "view_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_maintenance_window_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/maintenance_windows/{maintenance_window_id}", + "operation_id": "delete_maintenance_window", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "maintenance_window_id": { + "required": True, + "openapi_types": (str,), + "attribute": "maintenance_window_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_project_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}", + "operation_id": "delete_project", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_project_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/notification_rules/{notification_rule_id}", + "operation_id": "delete_project_notification_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "notification_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "notification_rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._disable_case_automation_rule_endpoint = _Endpoint( + settings={ + "response_type": (AutomationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/rules/{rule_id}/disable", + "operation_id": "disable_case_automation_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._enable_case_automation_rule_endpoint = _Endpoint( + settings={ + "response_type": (AutomationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/rules/{rule_id}/enable", + "operation_id": "enable_case_automation_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._favorite_case_project_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/favorites", + "operation_id": "favorite_case_project", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_case_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}", + "operation_id": "get_case", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_case_automation_rule_endpoint = _Endpoint( + settings={ + "response_type": (AutomationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/rules/{rule_id}", + "operation_id": "get_case_automation_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_case_view_endpoint = _Endpoint( + settings={ + "response_type": (CaseViewResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/views/{view_id}", + "operation_id": "get_case_view", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "view_id": { + "required": True, + "openapi_types": (str,), + "attribute": "view_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_project_endpoint = _Endpoint( + settings={ + "response_type": (ProjectResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}", + "operation_id": "get_project", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_project_notification_rules_endpoint = _Endpoint( + settings={ + "response_type": (CaseNotificationRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/notification_rules", + "operation_id": "get_project_notification_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_projects_endpoint = _Endpoint( + settings={ + "response_type": (ProjectsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects", + "operation_id": "get_projects", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._link_incident_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/relationships/incidents", + "operation_id": "link_incident", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RelationshipToIncidentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._link_jira_issue_to_case_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/relationships/jira_issues", + "operation_id": "link_jira_issue_to_case", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (JiraIssueLinkRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_case_automation_rules_endpoint = _Endpoint( + settings={ + "response_type": (AutomationRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/rules", + "operation_id": "list_case_automation_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_case_links_endpoint = _Endpoint( + settings={ + "response_type": (CaseLinksResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/link", + "operation_id": "list_case_links", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "entity_type": { + "required": True, + "openapi_types": (str,), + "attribute": "entity_type", + "location": "query", + }, + "entity_id": { + "required": True, + "openapi_types": (str,), + "attribute": "entity_id", + "location": "query", + }, + "relationship": { + "openapi_types": (str,), + "attribute": "relationship", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_case_timeline_endpoint = _Endpoint( + settings={ + "response_type": (TimelineResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/timelines", + "operation_id": "list_case_timeline", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort_ascending": { + "openapi_types": (bool,), + "attribute": "sort[ascending]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_case_views_endpoint = _Endpoint( + settings={ + "response_type": (CaseViewsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/views", + "operation_id": "list_case_views", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_case_watchers_endpoint = _Endpoint( + settings={ + "response_type": (CaseWatchersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/watchers", + "operation_id": "list_case_watchers", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_maintenance_windows_endpoint = _Endpoint( + settings={ + "response_type": (MaintenanceWindowsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/maintenance_windows", + "operation_id": "list_maintenance_windows", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_user_case_project_favorites_endpoint = _Endpoint( + settings={ + "response_type": (ProjectFavoritesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/favorites", + "operation_id": "list_user_case_project_favorites", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._move_case_to_project_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/relationships/project", + "operation_id": "move_case_to_project", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ProjectRelationship,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._remove_case_insights_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/insights", + "operation_id": "remove_case_insights", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseInsightsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_cases_endpoint = _Endpoint( + settings={ + "response_type": (CasesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases", + "operation_id": "search_cases", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort_field": { + "openapi_types": (CaseSortableField,), + "attribute": "sort[field]", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "sort_asc": { + "openapi_types": (bool,), + "attribute": "sort[asc]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._unarchive_case_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/unarchive", + "operation_id": "unarchive_case", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseEmptyRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._unassign_case_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/unassign", + "operation_id": "unassign_case", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseEmptyRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._unfavorite_case_project_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/favorites", + "operation_id": "unfavorite_case_project", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._unlink_jira_issue_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/relationships/jira_issues", + "operation_id": "unlink_jira_issue", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._unwatch_case_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/watchers/{user_uuid}", + "operation_id": "unwatch_case", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "user_uuid": { + "required": True, + "openapi_types": (str,), + "attribute": "user_uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._update_attributes_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/attributes", + "operation_id": "update_attributes", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseUpdateAttributesRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_case_automation_rule_endpoint = _Endpoint( + settings={ + "response_type": (AutomationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/rules/{rule_id}", + "operation_id": "update_case_automation_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AutomationRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_case_comment_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/comment/{cell_id}", + "operation_id": "update_case_comment", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "cell_id": { + "required": True, + "openapi_types": (str,), + "attribute": "cell_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseUpdateCommentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_case_custom_attribute_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/custom_attributes/{custom_attribute_key}", + "operation_id": "update_case_custom_attribute", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "custom_attribute_key": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_attribute_key", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseUpdateCustomAttributeRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_case_description_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/description", + "operation_id": "update_case_description", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseUpdateDescriptionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_case_due_date_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/due_date", + "operation_id": "update_case_due_date", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseUpdateDueDateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_case_resolved_reason_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/resolved_reason", + "operation_id": "update_case_resolved_reason", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseUpdateResolvedReasonRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_case_title_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/title", + "operation_id": "update_case_title", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseUpdateTitleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_case_view_endpoint = _Endpoint( + settings={ + "response_type": (CaseViewResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/views/{view_id}", + "operation_id": "update_case_view", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "view_id": { + "required": True, + "openapi_types": (str,), + "attribute": "view_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseViewUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_maintenance_window_endpoint = _Endpoint( + settings={ + "response_type": (MaintenanceWindowResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/maintenance_windows/{maintenance_window_id}", + "operation_id": "update_maintenance_window", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "maintenance_window_id": { + "required": True, + "openapi_types": (str,), + "attribute": "maintenance_window_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MaintenanceWindowUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_priority_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/priority", + "operation_id": "update_priority", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseUpdatePriorityRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_project_endpoint = _Endpoint( + settings={ + "response_type": (ProjectResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}", + "operation_id": "update_project", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ProjectUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_project_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/projects/{project_id}/notification_rules/{notification_rule_id}", + "operation_id": "update_project_notification_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "notification_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "notification_rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseNotificationRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_status_endpoint = _Endpoint( + settings={ + "response_type": (CaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/status", + "operation_id": "update_status", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseUpdateStatusRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._watch_case_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/{case_id}/watchers/{user_uuid}", + "operation_id": "watch_case", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "user_uuid": { + "required": True, + "openapi_types": (str,), + "attribute": "user_uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + def add_case_insights(self, case_id: str, body: CaseInsightsRequest, ) -> CaseResponse: + """Add insights to a case. + + Adds one or more insights to a case. Insights are references to related Datadog resources (such as monitors, security signals, incidents, or error tracking issues) that provide investigative context. Up to 100 insights can be added per request. Each insight requires a type (see ``CaseInsightType`` for allowed values), a ref (URL path to the resource), and a resource_id. + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case insights request. + :type body: CaseInsightsRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._add_case_insights_endpoint.call_with_http_info(**kwargs) + + def aggregate_cases(self, body: CaseAggregateRequest, ) -> CaseAggregateResponse: + """Aggregate cases. + + Performs an aggregation query over cases, grouping results by specified fields and returning counts per group along with a total. Useful for dashboards and analytics. + + :param body: Case aggregate request payload. + :type body: CaseAggregateRequest + :rtype: CaseAggregateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._aggregate_cases_endpoint.call_with_http_info(**kwargs) + + def archive_case(self, case_id: str, body: CaseEmptyRequest, ) -> CaseResponse: + """Archive case. + + Archive case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Archive case payload + :type body: CaseEmptyRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._archive_case_endpoint.call_with_http_info(**kwargs) + + def assign_case(self, case_id: str, body: CaseAssignRequest, ) -> CaseResponse: + """Assign case. + + Assign case to a user + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Assign case payload + :type body: CaseAssignRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._assign_case_endpoint.call_with_http_info(**kwargs) + + def bulk_update_cases(self, body: CaseBulkUpdateRequest, ) -> None: + """Bulk update cases. + + Applies a single action (such as changing priority, status, assignment, or archiving) to multiple cases at once. The list of case IDs and the action type with its payload are specified in the request body. + + :param body: Case bulk update request payload. + :type body: CaseBulkUpdateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_update_cases_endpoint.call_with_http_info(**kwargs) + + def comment_case(self, case_id: str, body: CaseCommentRequest, ) -> TimelineResponse: + """Comment case. + + Comment case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case comment payload + :type body: CaseCommentRequest + :rtype: TimelineResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._comment_case_endpoint.call_with_http_info(**kwargs) + + def count_cases(self, *, query_filter: Union[str, UnsetType]=unset, group_bys: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, ) -> CaseCountResponse: + """Count cases. + + Returns case counts, optionally grouped by one or more fields (for example, status, priority). Supports a query filter to narrow the scope. + + :param query_filter: Filter query for cases. + :type query_filter: str, optional + :param group_bys: Comma-separated fields to group by. + :type group_bys: str, optional + :param limit: Maximum facet values to return. + :type limit: int, optional + :rtype: CaseCountResponse + """ + kwargs: Dict[str, Any] = {} + if query_filter is not unset: + kwargs["query_filter"] = query_filter + + if group_bys is not unset: + kwargs["group_bys"] = group_bys + + if limit is not unset: + kwargs["limit"] = limit + + return self._count_cases_endpoint.call_with_http_info(**kwargs) + + def create_case(self, body: CaseCreateRequest, ) -> CaseResponse: + """Create a case. + + Create a Case + + :param body: Case payload + :type body: CaseCreateRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_case_endpoint.call_with_http_info(**kwargs) + + def create_case_automation_rule(self, project_id: str, body: AutomationRuleCreateRequest, ) -> AutomationRuleResponse: + """Create an automation rule. + + Creates an automation rule for a project. The rule defines a trigger event (for example, case created, status transitioned) and an action to execute. + + :param project_id: The UUID of the project that owns the automation rules. + :type project_id: str + :param body: Automation rule payload. + :type body: AutomationRuleCreateRequest + :rtype: AutomationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["body"] = body + + return self._create_case_automation_rule_endpoint.call_with_http_info(**kwargs) + + def create_case_jira_issue(self, case_id: str, body: JiraIssueCreateRequest, ) -> None: + """Create Jira issue for case. + + Create a new Jira issue and link it to a case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Jira issue creation request + :type body: JiraIssueCreateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._create_case_jira_issue_endpoint.call_with_http_info(**kwargs) + + def create_case_link(self, body: CaseLinkCreateRequest, ) -> CaseLinkResponse: + """Create a case link. + + Creates a directional link between two cases (for example, case A blocks case B). The parent and child cases and their relationship type must be specified. + + :param body: Case link create request. + :type body: CaseLinkCreateRequest + :rtype: CaseLinkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_case_link_endpoint.call_with_http_info(**kwargs) + + def create_case_notebook(self, case_id: str, body: NotebookCreateRequest, ) -> None: + """Create investigation notebook for case. + + Create a new investigation notebook and link it to a case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Notebook creation request + :type body: NotebookCreateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._create_case_notebook_endpoint.call_with_http_info(**kwargs) + + def create_case_service_now_ticket(self, case_id: str, body: ServiceNowTicketCreateRequest, ) -> None: + """Create ServiceNow ticket for case. + + Create a new ServiceNow incident ticket and link it to a case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: ServiceNow ticket creation request + :type body: ServiceNowTicketCreateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._create_case_service_now_ticket_endpoint.call_with_http_info(**kwargs) + + def create_case_view(self, body: CaseViewCreateRequest, ) -> CaseViewResponse: + """Create a case view. + + Creates a new saved case view with a name, filter query, and associated project. Optionally, a notification rule can be linked to the view. + + :param body: Case view payload. + :type body: CaseViewCreateRequest + :rtype: CaseViewResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_case_view_endpoint.call_with_http_info(**kwargs) + + def create_maintenance_window(self, body: MaintenanceWindowCreateRequest, ) -> MaintenanceWindowResponse: + """Create a maintenance window. + + Creates a maintenance window for event management cases with a name, case filter query, and time range (start and end). + + :param body: Maintenance window payload. + :type body: MaintenanceWindowCreateRequest + :rtype: MaintenanceWindowResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_maintenance_window_endpoint.call_with_http_info(**kwargs) + + def create_project(self, body: ProjectCreateRequest, ) -> ProjectResponse: + """Create a project. + + Create a project. + + :param body: Project payload. + :type body: ProjectCreateRequest + :rtype: ProjectResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_project_endpoint.call_with_http_info(**kwargs) + + def create_project_notification_rule(self, project_id: str, body: CaseNotificationRuleCreateRequest, ) -> CaseNotificationRuleResponse: + """Create a notification rule. + + Create a notification rule for a project. + + :param project_id: Project UUID + :type project_id: str + :param body: Notification rule payload + :type body: CaseNotificationRuleCreateRequest + :rtype: CaseNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["body"] = body + + return self._create_project_notification_rule_endpoint.call_with_http_info(**kwargs) + + def delete_case_automation_rule(self, project_id: str, rule_id: str, ) -> None: + """Delete an automation rule. + + Permanently deletes an automation rule from a project. + + :param project_id: The UUID of the project that owns the automation rules. + :type project_id: str + :param rule_id: The UUID of the automation rule. + :type rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["rule_id"] = rule_id + + return self._delete_case_automation_rule_endpoint.call_with_http_info(**kwargs) + + def delete_case_comment(self, case_id: str, cell_id: str, ) -> None: + """Delete case comment. + + Delete case comment + + :param case_id: Case's UUID or key + :type case_id: str + :param cell_id: The UUID of the timeline cell (comment) to update. + :type cell_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["cell_id"] = cell_id + + return self._delete_case_comment_endpoint.call_with_http_info(**kwargs) + + def delete_case_custom_attribute(self, case_id: str, custom_attribute_key: str, ) -> CaseResponse: + """Delete custom attribute from case. + + Delete custom attribute from case + + :param case_id: Case's UUID or key + :type case_id: str + :param custom_attribute_key: Case Custom attribute's key + :type custom_attribute_key: str + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["custom_attribute_key"] = custom_attribute_key + + return self._delete_case_custom_attribute_endpoint.call_with_http_info(**kwargs) + + def delete_case_link(self, link_id: str, ) -> None: + """Delete a case link. + + Deletes an existing link between cases by link ID. + + :param link_id: The UUID of the case link. + :type link_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["link_id"] = link_id + + return self._delete_case_link_endpoint.call_with_http_info(**kwargs) + + def delete_case_view(self, view_id: str, ) -> None: + """Delete a case view. + + Permanently deletes a saved case view. + + :param view_id: The UUID of the case view. + :type view_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["view_id"] = view_id + + return self._delete_case_view_endpoint.call_with_http_info(**kwargs) + + def delete_maintenance_window(self, maintenance_window_id: str, ) -> None: + """Delete a maintenance window. + + Permanently deletes a maintenance window. + + :param maintenance_window_id: The UUID of the maintenance window. + :type maintenance_window_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["maintenance_window_id"] = maintenance_window_id + + return self._delete_maintenance_window_endpoint.call_with_http_info(**kwargs) + + def delete_project(self, project_id: str, ) -> None: + """Remove a project. + + Remove a project using the project's ``id``. + + :param project_id: Project UUID. + :type project_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._delete_project_endpoint.call_with_http_info(**kwargs) + + def delete_project_notification_rule(self, project_id: str, notification_rule_id: str, ) -> None: + """Delete a notification rule. + + Delete a notification rule using the notification rule's ``id``. + + :param project_id: Project UUID + :type project_id: str + :param notification_rule_id: Notification Rule UUID + :type notification_rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["notification_rule_id"] = notification_rule_id + + return self._delete_project_notification_rule_endpoint.call_with_http_info(**kwargs) + + def disable_case_automation_rule(self, project_id: str, rule_id: str, ) -> AutomationRuleResponse: + """Disable an automation rule. + + Disables an automation rule so it no longer triggers on case events. The rule configuration is preserved. + + :param project_id: The UUID of the project that owns the automation rules. + :type project_id: str + :param rule_id: The UUID of the automation rule. + :type rule_id: str + :rtype: AutomationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["rule_id"] = rule_id + + return self._disable_case_automation_rule_endpoint.call_with_http_info(**kwargs) + + def enable_case_automation_rule(self, project_id: str, rule_id: str, ) -> AutomationRuleResponse: + """Enable an automation rule. + + Enables a previously disabled automation rule so it triggers on matching case events. + + :param project_id: The UUID of the project that owns the automation rules. + :type project_id: str + :param rule_id: The UUID of the automation rule. + :type rule_id: str + :rtype: AutomationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["rule_id"] = rule_id + + return self._enable_case_automation_rule_endpoint.call_with_http_info(**kwargs) + + def favorite_case_project(self, project_id: str, ) -> None: + """Favorite a project. + + Marks a case project as a favorite for the current authenticated user. + + :param project_id: Project UUID. + :type project_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._favorite_case_project_endpoint.call_with_http_info(**kwargs) + + def get_case(self, case_id: str, ) -> CaseResponse: + """Get the details of a case. + + Get the details of case by ``case_id`` + + :param case_id: Case's UUID or key + :type case_id: str + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + return self._get_case_endpoint.call_with_http_info(**kwargs) + + def get_case_automation_rule(self, project_id: str, rule_id: str, ) -> AutomationRuleResponse: + """Get an automation rule. + + Returns a single automation rule identified by its UUID, including its trigger, action, and current state (enabled/disabled). + + :param project_id: The UUID of the project that owns the automation rules. + :type project_id: str + :param rule_id: The UUID of the automation rule. + :type rule_id: str + :rtype: AutomationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["rule_id"] = rule_id + + return self._get_case_automation_rule_endpoint.call_with_http_info(**kwargs) + + def get_case_view(self, view_id: str, ) -> CaseViewResponse: + """Get a case view. + + Returns a single saved case view identified by its UUID, including its query, associated project, and timestamps. + + :param view_id: The UUID of the case view. + :type view_id: str + :rtype: CaseViewResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["view_id"] = view_id + + return self._get_case_view_endpoint.call_with_http_info(**kwargs) + + def get_project(self, project_id: str, ) -> ProjectResponse: + """Get the details of a project. + + Get the details of a project by ``project_id``. + + :param project_id: Project UUID. + :type project_id: str + :rtype: ProjectResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._get_project_endpoint.call_with_http_info(**kwargs) + + def get_project_notification_rules(self, project_id: str, ) -> CaseNotificationRulesResponse: + """Get notification rules. + + Get all notification rules for a project. + + :param project_id: Project UUID + :type project_id: str + :rtype: CaseNotificationRulesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._get_project_notification_rules_endpoint.call_with_http_info(**kwargs) + + def get_projects(self, ) -> ProjectsResponse: + """Get all projects. + + Get all projects. + + :rtype: ProjectsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_projects_endpoint.call_with_http_info(**kwargs) + + def link_incident(self, case_id: str, body: RelationshipToIncidentRequest, ) -> CaseResponse: + """Link incident to case. + + Link an incident to a case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Incident link request + :type body: RelationshipToIncidentRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._link_incident_endpoint.call_with_http_info(**kwargs) + + def link_jira_issue_to_case(self, case_id: str, body: JiraIssueLinkRequest, ) -> None: + """Link existing Jira issue to case. + + Link an existing Jira issue to a case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Jira issue link request + :type body: JiraIssueLinkRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._link_jira_issue_to_case_endpoint.call_with_http_info(**kwargs) + + def list_case_automation_rules(self, project_id: str, ) -> AutomationRulesResponse: + """List automation rules. + + Returns all automation rules configured for a project. Automation rules allow automatic actions to be triggered by case events like creation, status transitions, or attribute changes. + + :param project_id: The UUID of the project that owns the automation rules. + :type project_id: str + :rtype: AutomationRulesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._list_case_automation_rules_endpoint.call_with_http_info(**kwargs) + + def list_case_links(self, entity_type: str, entity_id: str, *, relationship: Union[str, UnsetType]=unset, ) -> CaseLinksResponse: + """List case links. + + Returns all links associated with a case. Links define relationships (for example, BLOCKS) between cases. Requires entity_type and entity_id query parameters. + + :param entity_type: The entity type to look up links for. Use ``CASE`` to find links for a specific case. + :type entity_type: str + :param entity_id: The UUID of the entity to look up links for. + :type entity_id: str + :param relationship: Optional filter to only return links of a specific relationship type (for example, ``BLOCKS`` or ``CAUSES`` ). + :type relationship: str, optional + :rtype: CaseLinksResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["entity_type"] = entity_type + + kwargs["entity_id"] = entity_id + + if relationship is not unset: + kwargs["relationship"] = relationship + + return self._list_case_links_endpoint.call_with_http_info(**kwargs) + + def list_case_timeline(self, case_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort_ascending: Union[bool, UnsetType]=unset, ) -> TimelineResponse: + """Get case timeline. + + Returns the timeline of events for a case, including comments, status changes, and other activity. Supports pagination and sort order. + + :param case_id: Case's UUID or key + :type case_id: str + :param page_size: Number of timeline cells to return per page. + :type page_size: int, optional + :param page_number: Zero-based page number for pagination. + :type page_number: int, optional + :param sort_ascending: If ``true`` , returns timeline cells in chronological order (oldest first). Defaults to ``false`` (newest first). + :type sort_ascending: bool, optional + :rtype: TimelineResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort_ascending is not unset: + kwargs["sort_ascending"] = sort_ascending + + return self._list_case_timeline_endpoint.call_with_http_info(**kwargs) + + def list_case_views(self, project_id: str, ) -> CaseViewsResponse: + """List case views. + + Returns all saved case views for a given project. Views are saved search queries that allow quick access to filtered lists of cases. + + :param project_id: Filter views by project identifier. + :type project_id: str + :rtype: CaseViewsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._list_case_views_endpoint.call_with_http_info(**kwargs) + + def list_case_watchers(self, case_id: str, ) -> CaseWatchersResponse: + """List case watchers. + + Returns the list of users who are watching a case. Watchers receive notifications about updates to the case. + + :param case_id: Case's UUID or key + :type case_id: str + :rtype: CaseWatchersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + return self._list_case_watchers_endpoint.call_with_http_info(**kwargs) + + def list_maintenance_windows(self, ) -> MaintenanceWindowsResponse: + """List maintenance windows. + + Returns all configured maintenance windows for event management cases. Maintenance windows define time periods during which case notifications and automation rules are suppressed for cases matching a given query. + + :rtype: MaintenanceWindowsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_maintenance_windows_endpoint.call_with_http_info(**kwargs) + + def list_user_case_project_favorites(self, ) -> ProjectFavoritesResponse: + """List project favorites. + + Returns the list of case projects that the current authenticated user has marked as favorites. + + :rtype: ProjectFavoritesResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_user_case_project_favorites_endpoint.call_with_http_info(**kwargs) + + def move_case_to_project(self, case_id: str, body: ProjectRelationship, ) -> CaseResponse: + """Update case project. + + Update the project associated with a case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Project update request + :type body: ProjectRelationship + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._move_case_to_project_endpoint.call_with_http_info(**kwargs) + + def remove_case_insights(self, case_id: str, body: CaseInsightsRequest, ) -> CaseResponse: + """Remove insights from a case. + + Removes one or more previously added insights from a case by specifying their type and resource identifier in the request body. + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case insights request. + :type body: CaseInsightsRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._remove_case_insights_endpoint.call_with_http_info(**kwargs) + + def search_cases(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort_field: Union[CaseSortableField, UnsetType]=unset, filter: Union[str, UnsetType]=unset, sort_asc: Union[bool, UnsetType]=unset, ) -> CasesResponse: + """Search cases. + + Search cases. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort_field: Specify which field to sort + :type sort_field: CaseSortableField, optional + :param filter: Search query + :type filter: str, optional + :param sort_asc: Specify if order is ascending or not + :type sort_asc: bool, optional + :rtype: CasesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort_field is not unset: + kwargs["sort_field"] = sort_field + + if filter is not unset: + kwargs["filter"] = filter + + if sort_asc is not unset: + kwargs["sort_asc"] = sort_asc + + return self._search_cases_endpoint.call_with_http_info(**kwargs) + + def search_cases_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort_field: Union[CaseSortableField, UnsetType]=unset, filter: Union[str, UnsetType]=unset, sort_asc: Union[bool, UnsetType]=unset, ) -> collections.abc.Iterable[Case]: + """Search cases. + + Provide a paginated version of :meth:`search_cases`, returning all items. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort_field: Specify which field to sort + :type sort_field: CaseSortableField, optional + :param filter: Search query + :type filter: str, optional + :param sort_asc: Specify if order is ascending or not + :type sort_asc: bool, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[Case] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort_field is not unset: + kwargs["sort_field"] = sort_field + + if filter is not unset: + kwargs["filter"] = filter + + if sort_asc is not unset: + kwargs["sort_asc"] = sort_asc + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._search_cases_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 1, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def unarchive_case(self, case_id: str, body: CaseEmptyRequest, ) -> CaseResponse: + """Unarchive case. + + Unarchive case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Unarchive case payload + :type body: CaseEmptyRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._unarchive_case_endpoint.call_with_http_info(**kwargs) + + def unassign_case(self, case_id: str, body: CaseEmptyRequest, ) -> CaseResponse: + """Unassign case. + + Unassign case + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Unassign case payload + :type body: CaseEmptyRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._unassign_case_endpoint.call_with_http_info(**kwargs) + + def unfavorite_case_project(self, project_id: str, ) -> None: + """Unfavorite a project. + + Removes a case project from the current user's favorites list. + + :param project_id: Project UUID. + :type project_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._unfavorite_case_project_endpoint.call_with_http_info(**kwargs) + + def unlink_jira_issue(self, case_id: str, ) -> None: + """Remove Jira issue link from case. + + Remove the link between a Jira issue and a case + + :param case_id: Case's UUID or key + :type case_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + return self._unlink_jira_issue_endpoint.call_with_http_info(**kwargs) + + def unwatch_case(self, case_id: str, user_uuid: str, ) -> None: + """Unwatch a case. + + Removes a user from the watchers list of a case. The user no longer receives notifications about updates to the case. + + :param case_id: Case's UUID or key + :type case_id: str + :param user_uuid: The UUID of the user to add or remove as a watcher. + :type user_uuid: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["user_uuid"] = user_uuid + + return self._unwatch_case_endpoint.call_with_http_info(**kwargs) + + def update_attributes(self, case_id: str, body: CaseUpdateAttributesRequest, ) -> CaseResponse: + """Update case attributes. + + Update case attributes + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case attributes update payload + :type body: CaseUpdateAttributesRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._update_attributes_endpoint.call_with_http_info(**kwargs) + + def update_case_automation_rule(self, project_id: str, rule_id: str, body: AutomationRuleUpdateRequest, ) -> AutomationRuleResponse: + """Update an automation rule. + + Updates the trigger, action, name, or state of an existing automation rule. + + :param project_id: The UUID of the project that owns the automation rules. + :type project_id: str + :param rule_id: The UUID of the automation rule. + :type rule_id: str + :param body: Automation rule payload. + :type body: AutomationRuleUpdateRequest + :rtype: AutomationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_case_automation_rule_endpoint.call_with_http_info(**kwargs) + + def update_case_comment(self, case_id: str, cell_id: str, body: CaseUpdateCommentRequest, ) -> None: + """Update case comment. + + Updates the text content of an existing comment on a case timeline. The comment is identified by its cell ID. + + :param case_id: Case's UUID or key + :type case_id: str + :param cell_id: The UUID of the timeline cell (comment) to update. + :type cell_id: str + :param body: Case update comment payload. + :type body: CaseUpdateCommentRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["cell_id"] = cell_id + + kwargs["body"] = body + + return self._update_case_comment_endpoint.call_with_http_info(**kwargs) + + def update_case_custom_attribute(self, case_id: str, custom_attribute_key: str, body: CaseUpdateCustomAttributeRequest, ) -> CaseResponse: + """Update case custom attribute. + + Update case custom attribute + + :param case_id: Case's UUID or key + :type case_id: str + :param custom_attribute_key: Case Custom attribute's key + :type custom_attribute_key: str + :param body: Update case custom attribute payload + :type body: CaseUpdateCustomAttributeRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["custom_attribute_key"] = custom_attribute_key + + kwargs["body"] = body + + return self._update_case_custom_attribute_endpoint.call_with_http_info(**kwargs) + + def update_case_description(self, case_id: str, body: CaseUpdateDescriptionRequest, ) -> CaseResponse: + """Update case description. + + Update case description + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case description update payload + :type body: CaseUpdateDescriptionRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._update_case_description_endpoint.call_with_http_info(**kwargs) + + def update_case_due_date(self, case_id: str, body: CaseUpdateDueDateRequest, ) -> CaseResponse: + """Update case due date. + + Sets or updates the due date for a case. The due date is a calendar date (without a time component) indicating when the case should be resolved. + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case due date update payload. + :type body: CaseUpdateDueDateRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._update_case_due_date_endpoint.call_with_http_info(**kwargs) + + def update_case_resolved_reason(self, case_id: str, body: CaseUpdateResolvedReasonRequest, ) -> CaseResponse: + """Update case resolved reason. + + Sets the resolved reason for a security case (for example, FALSE_POSITIVE, TRUE_POSITIVE). Applicable to security-type cases. + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case resolved reason update payload. + :type body: CaseUpdateResolvedReasonRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._update_case_resolved_reason_endpoint.call_with_http_info(**kwargs) + + def update_case_title(self, case_id: str, body: CaseUpdateTitleRequest, ) -> CaseResponse: + """Update case title. + + Update case title + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case title update payload + :type body: CaseUpdateTitleRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._update_case_title_endpoint.call_with_http_info(**kwargs) + + def update_case_view(self, view_id: str, body: CaseViewUpdateRequest, ) -> CaseViewResponse: + """Update a case view. + + Updates the name, query, or notification rule of an existing case view. + + :param view_id: The UUID of the case view. + :type view_id: str + :param body: Case view payload. + :type body: CaseViewUpdateRequest + :rtype: CaseViewResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["view_id"] = view_id + + kwargs["body"] = body + + return self._update_case_view_endpoint.call_with_http_info(**kwargs) + + def update_maintenance_window(self, maintenance_window_id: str, body: MaintenanceWindowUpdateRequest, ) -> MaintenanceWindowResponse: + """Update a maintenance window. + + Updates the name, query, start time, or end time of an existing maintenance window. + + :param maintenance_window_id: The UUID of the maintenance window. + :type maintenance_window_id: str + :param body: Maintenance window payload. + :type body: MaintenanceWindowUpdateRequest + :rtype: MaintenanceWindowResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["maintenance_window_id"] = maintenance_window_id + + kwargs["body"] = body + + return self._update_maintenance_window_endpoint.call_with_http_info(**kwargs) + + def update_priority(self, case_id: str, body: CaseUpdatePriorityRequest, ) -> CaseResponse: + """Update case priority. + + Update case priority + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case priority update payload + :type body: CaseUpdatePriorityRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._update_priority_endpoint.call_with_http_info(**kwargs) + + def update_project(self, project_id: str, body: ProjectUpdateRequest, ) -> ProjectResponse: + """Update a project. + + Update a project. + + :param project_id: Project UUID. + :type project_id: str + :param body: Project payload. + :type body: ProjectUpdateRequest + :rtype: ProjectResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["body"] = body + + return self._update_project_endpoint.call_with_http_info(**kwargs) + + def update_project_notification_rule(self, project_id: str, notification_rule_id: str, body: CaseNotificationRuleUpdateRequest, ) -> None: + """Update a notification rule. + + Update a notification rule. + + :param project_id: Project UUID + :type project_id: str + :param notification_rule_id: Notification Rule UUID + :type notification_rule_id: str + :param body: Notification rule payload + :type body: CaseNotificationRuleUpdateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["notification_rule_id"] = notification_rule_id + + kwargs["body"] = body + + return self._update_project_notification_rule_endpoint.call_with_http_info(**kwargs) + + def update_status(self, case_id: str, body: CaseUpdateStatusRequest, ) -> CaseResponse: + """Update case status. + + Update case status + + :param case_id: Case's UUID or key + :type case_id: str + :param body: Case status update payload + :type body: CaseUpdateStatusRequest + :rtype: CaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._update_status_endpoint.call_with_http_info(**kwargs) + + def watch_case(self, case_id: str, user_uuid: str, ) -> None: + """Watch a case. + + Adds a user (identified by their UUID) as a watcher of a case. The user receives notifications about subsequent updates to the case. + + :param case_id: Case's UUID or key + :type case_id: str + :param user_uuid: The UUID of the user to add or remove as a watcher. + :type user_uuid: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["user_uuid"] = user_uuid + + return self._watch_case_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/case_management_attribute_api.py b/datadog_api_client/v2/api/case_management_attribute_api.py new file mode 100644 index 0000000000..fed504e4dc --- /dev/null +++ b/datadog_api_client/v2/api/case_management_attribute_api.py @@ -0,0 +1,251 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.custom_attribute_configs_response import CustomAttributeConfigsResponse +from datadog_api_client.v2.model.custom_attribute_config_response import CustomAttributeConfigResponse +from datadog_api_client.v2.model.custom_attribute_config_create_request import CustomAttributeConfigCreateRequest +from datadog_api_client.v2.model.custom_attribute_config_update_request import CustomAttributeConfigUpdateRequest + + +class CaseManagementAttributeApi: + """ + View and configure custom attributes within Case Management. See the `Case Management page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_custom_attribute_config_endpoint = _Endpoint( + settings={ + "response_type": (CustomAttributeConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cases/types/{case_type_id}/custom_attributes", + "operation_id": "create_custom_attribute_config", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "case_type_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_type_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CustomAttributeConfigCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_custom_attribute_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cases/types/{case_type_id}/custom_attributes/{custom_attribute_id}", + "operation_id": "delete_custom_attribute_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "case_type_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_type_id", + "location": "path", + }, + "custom_attribute_id": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_attribute_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_all_custom_attribute_configs_by_case_type_endpoint = _Endpoint( + settings={ + "response_type": (CustomAttributeConfigsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cases/types/{case_type_id}/custom_attributes", + "operation_id": "get_all_custom_attribute_configs_by_case_type", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "case_type_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_type_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_all_custom_attributes_endpoint = _Endpoint( + settings={ + "response_type": (CustomAttributeConfigsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cases/types/custom_attributes", + "operation_id": "get_all_custom_attributes", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_custom_attribute_config_endpoint = _Endpoint( + settings={ + "response_type": (CustomAttributeConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/types/{case_type_id}/custom_attributes/{custom_attribute_id}", + "operation_id": "update_custom_attribute_config", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "case_type_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_type_id", + "location": "path", + }, + "custom_attribute_id": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_attribute_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CustomAttributeConfigUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_custom_attribute_config(self, case_type_id: str, body: CustomAttributeConfigCreateRequest, ) -> CustomAttributeConfigResponse: + """Create custom attribute config for a case type. + + Create custom attribute config for a case type + + :param case_type_id: The UUID of the case type. + :type case_type_id: str + :param body: Custom attribute config payload + :type body: CustomAttributeConfigCreateRequest + :rtype: CustomAttributeConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_type_id"] = case_type_id + + kwargs["body"] = body + + return self._create_custom_attribute_config_endpoint.call_with_http_info(**kwargs) + + def delete_custom_attribute_config(self, case_type_id: str, custom_attribute_id: str, ) -> None: + """Delete custom attributes config. + + Delete custom attribute config + + :param case_type_id: The UUID of the case type. + :type case_type_id: str + :param custom_attribute_id: Case Custom attribute's UUID + :type custom_attribute_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_type_id"] = case_type_id + + kwargs["custom_attribute_id"] = custom_attribute_id + + return self._delete_custom_attribute_config_endpoint.call_with_http_info(**kwargs) + + def get_all_custom_attribute_configs_by_case_type(self, case_type_id: str, ) -> CustomAttributeConfigsResponse: + """Get all custom attributes config of case type. + + Get all custom attribute config of case type + + :param case_type_id: The UUID of the case type. + :type case_type_id: str + :rtype: CustomAttributeConfigsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_type_id"] = case_type_id + + return self._get_all_custom_attribute_configs_by_case_type_endpoint.call_with_http_info(**kwargs) + + def get_all_custom_attributes(self, ) -> CustomAttributeConfigsResponse: + """Get all custom attributes. + + Get all custom attributes + + :rtype: CustomAttributeConfigsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_all_custom_attributes_endpoint.call_with_http_info(**kwargs) + + def update_custom_attribute_config(self, case_type_id: str, custom_attribute_id: str, body: CustomAttributeConfigUpdateRequest, ) -> CustomAttributeConfigResponse: + """Update custom attribute config. + + Updates the display name, description, type, or options of an existing custom attribute configuration for a case type. + + :param case_type_id: The UUID of the case type. + :type case_type_id: str + :param custom_attribute_id: Case Custom attribute's UUID + :type custom_attribute_id: str + :param body: Custom attribute config payload. + :type body: CustomAttributeConfigUpdateRequest + :rtype: CustomAttributeConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_type_id"] = case_type_id + + kwargs["custom_attribute_id"] = custom_attribute_id + + kwargs["body"] = body + + return self._update_custom_attribute_config_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/case_management_type_api.py b/datadog_api_client/v2/api/case_management_type_api.py new file mode 100644 index 0000000000..a92d7576ef --- /dev/null +++ b/datadog_api_client/v2/api/case_management_type_api.py @@ -0,0 +1,184 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.case_types_response import CaseTypesResponse +from datadog_api_client.v2.model.case_type_response import CaseTypeResponse +from datadog_api_client.v2.model.case_type_create_request import CaseTypeCreateRequest +from datadog_api_client.v2.model.case_type_update_request import CaseTypeUpdateRequest + + +class CaseManagementTypeApi: + """ + View and configure case types within Case Management. See the `Case Management page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_case_type_endpoint = _Endpoint( + settings={ + "response_type": (CaseTypeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cases/types", + "operation_id": "create_case_type", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CaseTypeCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_case_type_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cases/types/{case_type_id}", + "operation_id": "delete_case_type", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "case_type_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_type_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_all_case_types_endpoint = _Endpoint( + settings={ + "response_type": (CaseTypesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cases/types", + "operation_id": "get_all_case_types", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_case_type_endpoint = _Endpoint( + settings={ + "response_type": (CaseTypeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cases/types/{case_type_id}", + "operation_id": "update_case_type", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "case_type_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_type_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CaseTypeUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_case_type(self, body: CaseTypeCreateRequest, ) -> CaseTypeResponse: + """Create a case type. + + Create a Case Type + + :param body: Case type payload + :type body: CaseTypeCreateRequest + :rtype: CaseTypeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_case_type_endpoint.call_with_http_info(**kwargs) + + def delete_case_type(self, case_type_id: str, ) -> None: + """Delete a case type. + + Delete a case type + + :param case_type_id: The UUID of the case type. + :type case_type_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["case_type_id"] = case_type_id + + return self._delete_case_type_endpoint.call_with_http_info(**kwargs) + + def get_all_case_types(self, ) -> CaseTypesResponse: + """Get all case types. + + Get all case types + + :rtype: CaseTypesResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_all_case_types_endpoint.call_with_http_info(**kwargs) + + def update_case_type(self, case_type_id: str, body: CaseTypeUpdateRequest, ) -> CaseTypeResponse: + """Update a case type. + + Updates the name, emoji, or description of an existing case type. + + :param case_type_id: The UUID of the case type. + :type case_type_id: str + :param body: Case type payload. + :type body: CaseTypeUpdateRequest + :rtype: CaseTypeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_type_id"] = case_type_id + + kwargs["body"] = body + + return self._update_case_type_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/change_management_api.py b/datadog_api_client/v2/api/change_management_api.py new file mode 100644 index 0000000000..c662eafab9 --- /dev/null +++ b/datadog_api_client/v2/api/change_management_api.py @@ -0,0 +1,309 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.change_request_response import ChangeRequestResponse +from datadog_api_client.v2.model.change_request_create_request import ChangeRequestCreateRequest +from datadog_api_client.v2.model.change_request_update_request import ChangeRequestUpdateRequest +from datadog_api_client.v2.model.change_request_branch_create_request import ChangeRequestBranchCreateRequest +from datadog_api_client.v2.model.change_request_decision_update_request import ChangeRequestDecisionUpdateRequest + + +class ChangeManagementApi: + """ + View and manage change requests within Change Management. See the `Case Management page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_change_request_endpoint = _Endpoint( + settings={ + "response_type": (ChangeRequestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/change-management/change-request", + "operation_id": "create_change_request", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ChangeRequestCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_change_request_branch_endpoint = _Endpoint( + settings={ + "response_type": (ChangeRequestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/change-management/change-request/{change_request_id}/branch", + "operation_id": "create_change_request_branch", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "change_request_id": { + "required": True, + "openapi_types": (str,), + "attribute": "change_request_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ChangeRequestBranchCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_change_request_decision_endpoint = _Endpoint( + settings={ + "response_type": (ChangeRequestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/change-management/change-request/{change_request_id}/decisions/{decision_id}", + "operation_id": "delete_change_request_decision", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "change_request_id": { + "required": True, + "openapi_types": (str,), + "attribute": "change_request_id", + "location": "path", + }, + "decision_id": { + "required": True, + "openapi_types": (str,), + "attribute": "decision_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_change_request_endpoint = _Endpoint( + settings={ + "response_type": (ChangeRequestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/change-management/change-request/{change_request_id}", + "operation_id": "get_change_request", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "change_request_id": { + "required": True, + "openapi_types": (str,), + "attribute": "change_request_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_change_request_endpoint = _Endpoint( + settings={ + "response_type": (ChangeRequestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/change-management/change-request/{change_request_id}", + "operation_id": "update_change_request", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "change_request_id": { + "required": True, + "openapi_types": (str,), + "attribute": "change_request_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ChangeRequestUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_change_request_decision_endpoint = _Endpoint( + settings={ + "response_type": (ChangeRequestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/change-management/change-request/{change_request_id}/decisions/{decision_id}", + "operation_id": "update_change_request_decision", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "change_request_id": { + "required": True, + "openapi_types": (str,), + "attribute": "change_request_id", + "location": "path", + }, + "decision_id": { + "required": True, + "openapi_types": (str,), + "attribute": "decision_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ChangeRequestDecisionUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_change_request(self, body: ChangeRequestCreateRequest, ) -> ChangeRequestResponse: + """Create a change request. + + Create a new change request. + + :param body: Change request payload. + :type body: ChangeRequestCreateRequest + :rtype: ChangeRequestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_change_request_endpoint.call_with_http_info(**kwargs) + + def create_change_request_branch(self, change_request_id: str, body: ChangeRequestBranchCreateRequest, ) -> ChangeRequestResponse: + """Create a change request branch. + + Create a new branch in a repository for a change request. + + :param change_request_id: The identifier of the change request. + :type change_request_id: str + :param body: Branch creation payload. + :type body: ChangeRequestBranchCreateRequest + :rtype: ChangeRequestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["change_request_id"] = change_request_id + + kwargs["body"] = body + + return self._create_change_request_branch_endpoint.call_with_http_info(**kwargs) + + def delete_change_request_decision(self, change_request_id: str, decision_id: str, ) -> ChangeRequestResponse: + """Delete a change request decision. + + Delete a decision from a change request. + + :param change_request_id: The identifier of the change request. + :type change_request_id: str + :param decision_id: The identifier of the change request decision. + :type decision_id: str + :rtype: ChangeRequestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["change_request_id"] = change_request_id + + kwargs["decision_id"] = decision_id + + return self._delete_change_request_decision_endpoint.call_with_http_info(**kwargs) + + def get_change_request(self, change_request_id: str, ) -> ChangeRequestResponse: + """Get a change request. + + Get the details of a change request by its ID. + + :param change_request_id: The identifier of the change request. + :type change_request_id: str + :rtype: ChangeRequestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["change_request_id"] = change_request_id + + return self._get_change_request_endpoint.call_with_http_info(**kwargs) + + def update_change_request(self, change_request_id: str, body: ChangeRequestUpdateRequest, ) -> ChangeRequestResponse: + """Update a change request. + + Update the properties of a change request. + + :param change_request_id: The identifier of the change request. + :type change_request_id: str + :param body: Change request update payload. + :type body: ChangeRequestUpdateRequest + :rtype: ChangeRequestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["change_request_id"] = change_request_id + + kwargs["body"] = body + + return self._update_change_request_endpoint.call_with_http_info(**kwargs) + + def update_change_request_decision(self, change_request_id: str, decision_id: str, body: ChangeRequestDecisionUpdateRequest, ) -> ChangeRequestResponse: + """Update a change request decision. + + Update a decision on a change request, such as approving or declining it. + + :param change_request_id: The identifier of the change request. + :type change_request_id: str + :param decision_id: The identifier of the change request decision. + :type decision_id: str + :param body: Decision update payload. + :type body: ChangeRequestDecisionUpdateRequest + :rtype: ChangeRequestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["change_request_id"] = change_request_id + + kwargs["decision_id"] = decision_id + + kwargs["body"] = body + + return self._update_change_request_decision_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/ci_visibility_git_hub_accounts_api.py b/datadog_api_client/v2/api/ci_visibility_git_hub_accounts_api.py new file mode 100644 index 0000000000..f5147843e7 --- /dev/null +++ b/datadog_api_client/v2/api/ci_visibility_git_hub_accounts_api.py @@ -0,0 +1,107 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.ci_app_git_hub_accounts_response import CIAppGitHubAccountsResponse +from datadog_api_client.v2.model.ci_app_git_hub_account_response import CIAppGitHubAccountResponse +from datadog_api_client.v2.model.ci_app_git_hub_account_update_request import CIAppGitHubAccountUpdateRequest + + +class CIVisibilityGitHubAccountsApi: + """ + Manage CI Visibility opt-in status for your GitHub accounts and repositories. See the + `CI Visibility GitHub Actions setup page `_ + for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_ci_app_git_hub_accounts_endpoint = _Endpoint( + settings={ + "response_type": (CIAppGitHubAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/github/accounts", + "operation_id": "list_ci_app_git_hub_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_ci_app_git_hub_account_endpoint = _Endpoint( + settings={ + "response_type": (CIAppGitHubAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/github/accounts", + "operation_id": "update_ci_app_git_hub_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CIAppGitHubAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def list_ci_app_git_hub_accounts(self, ) -> CIAppGitHubAccountsResponse: + """List GitHub CI Visibility status. + + Retrieve the list of GitHub accounts (organizations or users) available to this Datadog organization + through its GitHub App installation, along with each account's and repository's CI Visibility opt-in status. + + :rtype: CIAppGitHubAccountsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_ci_app_git_hub_accounts_endpoint.call_with_http_info(**kwargs) + + def update_ci_app_git_hub_account(self, body: CIAppGitHubAccountUpdateRequest, ) -> CIAppGitHubAccountResponse: + """Update GitHub CI Visibility status. + + Enable or disable CI Visibility for a GitHub account, one of its repositories, or both in the same request. + The account (and, optionally, repository) are identified by name. Account-level and repository-level + changes are independent and may both be supplied in the same request. At least one of ``enabled`` or + ``repository.enabled`` must be provided. If the account name matches installations on more than one host, + ``host`` must be supplied to disambiguate, otherwise a 409 is returned. Returns a 404 if the CI Visibility + GitHub integration is not enabled for this organization, or if the given account or repository cannot be + found by name. + + :type body: CIAppGitHubAccountUpdateRequest + :rtype: CIAppGitHubAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_ci_app_git_hub_account_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/ci_visibility_pipelines_api.py b/datadog_api_client/v2/api/ci_visibility_pipelines_api.py new file mode 100644 index 0000000000..c251a46077 --- /dev/null +++ b/datadog_api_client/v2/api/ci_visibility_pipelines_api.py @@ -0,0 +1,328 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.ci_app_create_pipeline_event_request import CIAppCreatePipelineEventRequest +from datadog_api_client.v2.model.ci_app_pipelines_analytics_aggregate_response import CIAppPipelinesAnalyticsAggregateResponse +from datadog_api_client.v2.model.ci_app_pipelines_aggregate_request import CIAppPipelinesAggregateRequest +from datadog_api_client.v2.model.ci_app_pipeline_events_response import CIAppPipelineEventsResponse +from datadog_api_client.v2.model.ci_app_sort import CIAppSort +from datadog_api_client.v2.model.ci_app_pipeline_event import CIAppPipelineEvent +from datadog_api_client.v2.model.ci_app_pipeline_events_request import CIAppPipelineEventsRequest + + +class CIVisibilityPipelinesApi: + """ + Search or aggregate your CI Visibility pipeline events and send them to your Datadog site over HTTP. See the `CI Pipeline Visibility in Datadog page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._aggregate_ci_app_pipeline_events_endpoint = _Endpoint( + settings={ + "response_type": (CIAppPipelinesAnalyticsAggregateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/pipelines/analytics/aggregate", + "operation_id": "aggregate_ci_app_pipeline_events", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CIAppPipelinesAggregateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_ci_app_pipeline_event_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v2/ci/pipeline", + "operation_id": "create_ci_app_pipeline_event", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CIAppCreatePipelineEventRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_ci_app_pipeline_events_endpoint = _Endpoint( + settings={ + "response_type": (CIAppPipelineEventsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/pipelines/events", + "operation_id": "list_ci_app_pipeline_events", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_from": { + "openapi_types": (datetime,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (datetime,), + "attribute": "filter[to]", + "location": "query", + }, + "sort": { + "openapi_types": (CIAppSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_ci_app_pipeline_events_endpoint = _Endpoint( + settings={ + "response_type": (CIAppPipelineEventsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/pipelines/events/search", + "operation_id": "search_ci_app_pipeline_events", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "openapi_types": (CIAppPipelineEventsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def aggregate_ci_app_pipeline_events(self, body: CIAppPipelinesAggregateRequest, ) -> CIAppPipelinesAnalyticsAggregateResponse: + """Aggregate pipelines events. + + Use this API endpoint to aggregate CI Visibility pipeline events into buckets of computed metrics and timeseries. + + :type body: CIAppPipelinesAggregateRequest + :rtype: CIAppPipelinesAnalyticsAggregateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._aggregate_ci_app_pipeline_events_endpoint.call_with_http_info(**kwargs) + + def create_ci_app_pipeline_event(self, body: CIAppCreatePipelineEventRequest, ) -> dict: + """Send pipeline event. + + Send your pipeline event to your Datadog platform over HTTP. For details about how pipeline executions are modeled and what execution types we support, see `Pipeline Data Model And Execution Types `_. + + Multiple events can be sent in an array (up to 1000). + + Pipeline events can be submitted with a timestamp that is up to 18 hours in the past. + The duration between the event start and end times cannot exceed 1 year. + + :type body: CIAppCreatePipelineEventRequest + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_ci_app_pipeline_event_endpoint.call_with_http_info(**kwargs) + + def list_ci_app_pipeline_events(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[CIAppSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> CIAppPipelineEventsResponse: + """Get a list of pipelines events. + + List endpoint returns CI Visibility pipeline events that match a `search query `_. + `Results are paginated similarly to logs `_. + + Use this endpoint to see your latest pipeline events. + + :param filter_query: Search query following log syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested events. + :type filter_to: datetime, optional + :param sort: Order of events in results. + :type sort: CIAppSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + :rtype: CIAppPipelineEventsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_ci_app_pipeline_events_endpoint.call_with_http_info(**kwargs) + + def list_ci_app_pipeline_events_with_pagination(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[CIAppSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[CIAppPipelineEvent]: + """Get a list of pipelines events. + + Provide a paginated version of :meth:`list_ci_app_pipeline_events`, returning all items. + + :param filter_query: Search query following log syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested events. + :type filter_to: datetime, optional + :param sort: Order of events in results. + :type sort: CIAppSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[CIAppPipelineEvent] + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_ci_app_pipeline_events_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def search_ci_app_pipeline_events(self, *, body: Union[CIAppPipelineEventsRequest, UnsetType]=unset, ) -> CIAppPipelineEventsResponse: + """Search pipelines events. + + List endpoint returns CI Visibility pipeline events that match a `search query `_. + `Results are paginated similarly to logs `_. + + Use this endpoint to build complex events filtering and search. + + :type body: CIAppPipelineEventsRequest, optional + :rtype: CIAppPipelineEventsResponse + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + return self._search_ci_app_pipeline_events_endpoint.call_with_http_info(**kwargs) + + def search_ci_app_pipeline_events_with_pagination(self, *, body: Union[CIAppPipelineEventsRequest, UnsetType]=unset, ) -> collections.abc.Iterable[CIAppPipelineEvent]: + """Search pipelines events. + + Provide a paginated version of :meth:`search_ci_app_pipeline_events`, returning all items. + + :type body: CIAppPipelineEventsRequest, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[CIAppPipelineEvent] + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.page.limit", 10) + endpoint = self._search_ci_app_pipeline_events_endpoint + set_attribute_from_path(kwargs, "body.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.page.cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/ci_visibility_tests_api.py b/datadog_api_client/v2/api/ci_visibility_tests_api.py new file mode 100644 index 0000000000..c110709c63 --- /dev/null +++ b/datadog_api_client/v2/api/ci_visibility_tests_api.py @@ -0,0 +1,286 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.ci_app_tests_analytics_aggregate_response import CIAppTestsAnalyticsAggregateResponse +from datadog_api_client.v2.model.ci_app_tests_aggregate_request import CIAppTestsAggregateRequest +from datadog_api_client.v2.model.ci_app_test_events_response import CIAppTestEventsResponse +from datadog_api_client.v2.model.ci_app_sort import CIAppSort +from datadog_api_client.v2.model.ci_app_test_event import CIAppTestEvent +from datadog_api_client.v2.model.ci_app_test_events_request import CIAppTestEventsRequest + + +class CIVisibilityTestsApi: + """ + Search or aggregate your CI Visibility test events over HTTP. See the `Test Visibility in Datadog page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._aggregate_ci_app_test_events_endpoint = _Endpoint( + settings={ + "response_type": (CIAppTestsAnalyticsAggregateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/tests/analytics/aggregate", + "operation_id": "aggregate_ci_app_test_events", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CIAppTestsAggregateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_ci_app_test_events_endpoint = _Endpoint( + settings={ + "response_type": (CIAppTestEventsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/tests/events", + "operation_id": "list_ci_app_test_events", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_from": { + "openapi_types": (datetime,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (datetime,), + "attribute": "filter[to]", + "location": "query", + }, + "sort": { + "openapi_types": (CIAppSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_ci_app_test_events_endpoint = _Endpoint( + settings={ + "response_type": (CIAppTestEventsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/tests/events/search", + "operation_id": "search_ci_app_test_events", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "openapi_types": (CIAppTestEventsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def aggregate_ci_app_test_events(self, body: CIAppTestsAggregateRequest, ) -> CIAppTestsAnalyticsAggregateResponse: + """Aggregate tests events. + + The API endpoint to aggregate CI Visibility test events into buckets of computed metrics and timeseries. + + :type body: CIAppTestsAggregateRequest + :rtype: CIAppTestsAnalyticsAggregateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._aggregate_ci_app_test_events_endpoint.call_with_http_info(**kwargs) + + def list_ci_app_test_events(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[CIAppSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> CIAppTestEventsResponse: + """Get a list of tests events. + + List endpoint returns CI Visibility test events that match a `search query `_. + `Results are paginated similarly to logs `_. + + Use this endpoint to see your latest test events. + + :param filter_query: Search query following log syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested events. + :type filter_to: datetime, optional + :param sort: Order of events in results. + :type sort: CIAppSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + :rtype: CIAppTestEventsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_ci_app_test_events_endpoint.call_with_http_info(**kwargs) + + def list_ci_app_test_events_with_pagination(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[CIAppSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[CIAppTestEvent]: + """Get a list of tests events. + + Provide a paginated version of :meth:`list_ci_app_test_events`, returning all items. + + :param filter_query: Search query following log syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested events. + :type filter_to: datetime, optional + :param sort: Order of events in results. + :type sort: CIAppSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[CIAppTestEvent] + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_ci_app_test_events_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def search_ci_app_test_events(self, *, body: Union[CIAppTestEventsRequest, UnsetType]=unset, ) -> CIAppTestEventsResponse: + """Search tests events. + + List endpoint returns CI Visibility test events that match a `search query `_. + `Results are paginated similarly to logs `_. + + Use this endpoint to build complex events filtering and search. + + :type body: CIAppTestEventsRequest, optional + :rtype: CIAppTestEventsResponse + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + return self._search_ci_app_test_events_endpoint.call_with_http_info(**kwargs) + + def search_ci_app_test_events_with_pagination(self, *, body: Union[CIAppTestEventsRequest, UnsetType]=unset, ) -> collections.abc.Iterable[CIAppTestEvent]: + """Search tests events. + + Provide a paginated version of :meth:`search_ci_app_test_events`, returning all items. + + :type body: CIAppTestEventsRequest, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[CIAppTestEvent] + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.page.limit", 10) + endpoint = self._search_ci_app_test_events_endpoint + set_attribute_from_path(kwargs, "body.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.page.cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/cloud_authentication_api.py b/datadog_api_client/v2/api/cloud_authentication_api.py new file mode 100644 index 0000000000..5a700efbbc --- /dev/null +++ b/datadog_api_client/v2/api/cloud_authentication_api.py @@ -0,0 +1,172 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.aws_cloud_auth_persona_mappings_response import AWSCloudAuthPersonaMappingsResponse +from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_response import AWSCloudAuthPersonaMappingResponse +from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_create_request import AWSCloudAuthPersonaMappingCreateRequest + + +class CloudAuthenticationApi: + """ + Configure AWS cloud authentication mappings for persona and intake authentication through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_aws_cloud_auth_persona_mapping_endpoint = _Endpoint( + settings={ + "response_type": (AWSCloudAuthPersonaMappingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cloud_auth/aws/persona_mapping", + "operation_id": "create_aws_cloud_auth_persona_mapping", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AWSCloudAuthPersonaMappingCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_aws_cloud_auth_persona_mapping_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cloud_auth/aws/persona_mapping/{persona_mapping_id}", + "operation_id": "delete_aws_cloud_auth_persona_mapping", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "persona_mapping_id": { + "required": True, + "openapi_types": (str,), + "attribute": "persona_mapping_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_aws_cloud_auth_persona_mapping_endpoint = _Endpoint( + settings={ + "response_type": (AWSCloudAuthPersonaMappingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cloud_auth/aws/persona_mapping/{persona_mapping_id}", + "operation_id": "get_aws_cloud_auth_persona_mapping", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "persona_mapping_id": { + "required": True, + "openapi_types": (str,), + "attribute": "persona_mapping_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_aws_cloud_auth_persona_mappings_endpoint = _Endpoint( + settings={ + "response_type": (AWSCloudAuthPersonaMappingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cloud_auth/aws/persona_mapping", + "operation_id": "list_aws_cloud_auth_persona_mappings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def create_aws_cloud_auth_persona_mapping(self, body: AWSCloudAuthPersonaMappingCreateRequest, ) -> AWSCloudAuthPersonaMappingResponse: + """Create an AWS cloud authentication persona mapping. + + Create an AWS cloud authentication persona mapping. This endpoint associates an AWS IAM principal with a Datadog user. + + :type body: AWSCloudAuthPersonaMappingCreateRequest + :rtype: AWSCloudAuthPersonaMappingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_aws_cloud_auth_persona_mapping_endpoint.call_with_http_info(**kwargs) + + def delete_aws_cloud_auth_persona_mapping(self, persona_mapping_id: str, ) -> None: + """Delete an AWS cloud authentication persona mapping. + + Delete an AWS cloud authentication persona mapping by ID. This removes the association between an AWS IAM principal and a Datadog user. + + :param persona_mapping_id: The ID of the persona mapping + :type persona_mapping_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["persona_mapping_id"] = persona_mapping_id + + return self._delete_aws_cloud_auth_persona_mapping_endpoint.call_with_http_info(**kwargs) + + def get_aws_cloud_auth_persona_mapping(self, persona_mapping_id: str, ) -> AWSCloudAuthPersonaMappingResponse: + """Get an AWS cloud authentication persona mapping. + + Get a specific AWS cloud authentication persona mapping by ID. This endpoint retrieves a single configured persona mapping that associates an AWS IAM principal with a Datadog user. + + :param persona_mapping_id: The ID of the persona mapping + :type persona_mapping_id: str + :rtype: AWSCloudAuthPersonaMappingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["persona_mapping_id"] = persona_mapping_id + + return self._get_aws_cloud_auth_persona_mapping_endpoint.call_with_http_info(**kwargs) + + def list_aws_cloud_auth_persona_mappings(self, ) -> AWSCloudAuthPersonaMappingsResponse: + """List AWS cloud authentication persona mappings. + + List all AWS cloud authentication persona mappings. This endpoint retrieves all configured persona mappings that associate AWS IAM principals with Datadog users. + + :rtype: AWSCloudAuthPersonaMappingsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_aws_cloud_auth_persona_mappings_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/cloud_cost_management_api.py b/datadog_api_client/v2/api/cloud_cost_management_api.py new file mode 100644 index 0000000000..7ebd1bf2eb --- /dev/null +++ b/datadog_api_client/v2/api/cloud_cost_management_api.py @@ -0,0 +1,3469 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.account_filters_response import AccountFiltersResponse +from datadog_api_client.v2.model.account_filters_patch_request import AccountFiltersPatchRequest +from datadog_api_client.v2.model.cost_anomalies_response import CostAnomaliesResponse +from datadog_api_client.v2.model.cost_anomaly_response import CostAnomalyResponse +from datadog_api_client.v2.model.arbitrary_rule_response_array import ArbitraryRuleResponseArray +from datadog_api_client.v2.model.arbitrary_rule_response import ArbitraryRuleResponse +from datadog_api_client.v2.model.arbitrary_cost_upsert_request import ArbitraryCostUpsertRequest +from datadog_api_client.v2.model.reorder_rule_resource_array import ReorderRuleResourceArray +from datadog_api_client.v2.model.arbitrary_rule_status_response_array import ArbitraryRuleStatusResponseArray +from datadog_api_client.v2.model.aws_cur_configs_response import AwsCURConfigsResponse +from datadog_api_client.v2.model.aws_cur_config_response import AwsCurConfigResponse +from datadog_api_client.v2.model.aws_cur_config_post_request import AwsCURConfigPostRequest +from datadog_api_client.v2.model.aws_cur_config_patch_request import AwsCURConfigPatchRequest +from datadog_api_client.v2.model.azure_uc_configs_response import AzureUCConfigsResponse +from datadog_api_client.v2.model.azure_uc_config_pairs_response import AzureUCConfigPairsResponse +from datadog_api_client.v2.model.azure_uc_config_post_request import AzureUCConfigPostRequest +from datadog_api_client.v2.model.uc_config_pair import UCConfigPair +from datadog_api_client.v2.model.azure_uc_config_patch_request import AzureUCConfigPatchRequest +from datadog_api_client.v2.model.budget_with_entries import BudgetWithEntries +from datadog_api_client.v2.model.validation_response import ValidationResponse +from datadog_api_client.v2.model.custom_forecast_response import CustomForecastResponse +from datadog_api_client.v2.model.custom_forecast_upsert_request import CustomForecastUpsertRequest +from datadog_api_client.v2.model.budget_validation_response import BudgetValidationResponse +from datadog_api_client.v2.model.budget_validation_request import BudgetValidationRequest +from datadog_api_client.v2.model.budget_array import BudgetArray +from datadog_api_client.v2.model.commitments_list_response import CommitmentsListResponse +from datadog_api_client.v2.model.commitments_provider import CommitmentsProvider +from datadog_api_client.v2.model.commitments_commitment_type import CommitmentsCommitmentType +from datadog_api_client.v2.model.commitments_coverage_scalar_response import CommitmentsCoverageScalarResponse +from datadog_api_client.v2.model.commitments_coverage_timeseries_response import CommitmentsCoverageTimeseriesResponse +from datadog_api_client.v2.model.commitments_on_demand_hotspots_scalar_response import CommitmentsOnDemandHotspotsScalarResponse +from datadog_api_client.v2.model.commitments_savings_scalar_response import CommitmentsSavingsScalarResponse +from datadog_api_client.v2.model.commitments_savings_timeseries_response import CommitmentsSavingsTimeseriesResponse +from datadog_api_client.v2.model.commitments_utilization_scalar_response import CommitmentsUtilizationScalarResponse +from datadog_api_client.v2.model.commitments_utilization_timeseries_response import CommitmentsUtilizationTimeseriesResponse +from datadog_api_client.v2.model.custom_costs_file_list_response import CustomCostsFileListResponse +from datadog_api_client.v2.model.custom_costs_file_upload_response import CustomCostsFileUploadResponse +from datadog_api_client.v2.model.custom_costs_file_upload_request import CustomCostsFileUploadRequest +from datadog_api_client.v2.model.custom_costs_file_line_item import CustomCostsFileLineItem +from datadog_api_client.v2.model.custom_costs_file_get_response import CustomCostsFileGetResponse +from datadog_api_client.v2.model.gcp_usage_cost_configs_response import GCPUsageCostConfigsResponse +from datadog_api_client.v2.model.gcp_usage_cost_config_response import GCPUsageCostConfigResponse +from datadog_api_client.v2.model.gcp_usage_cost_config_post_request import GCPUsageCostConfigPostRequest +from datadog_api_client.v2.model.gcp_uc_config_response import GcpUcConfigResponse +from datadog_api_client.v2.model.gcp_usage_cost_config_patch_request import GCPUsageCostConfigPatchRequest +from datadog_api_client.v2.model.oci_configs_response import OCIConfigsResponse +from datadog_api_client.v2.model.cost_recommendation_array import CostRecommendationArray +from datadog_api_client.v2.model.recommendations_filter_request import RecommendationsFilterRequest +from datadog_api_client.v2.model.cost_tag_descriptions_response import CostTagDescriptionsResponse +from datadog_api_client.v2.model.cost_tag_description_response import CostTagDescriptionResponse +from datadog_api_client.v2.model.cost_tag_description_upsert_request import CostTagDescriptionUpsertRequest +from datadog_api_client.v2.model.generate_cost_tag_description_response import GenerateCostTagDescriptionResponse +from datadog_api_client.v2.model.cost_tag_keys_response import CostTagKeysResponse +from datadog_api_client.v2.model.cost_tag_key_response import CostTagKeyResponse +from datadog_api_client.v2.model.cost_tag_key_metadata_response import CostTagKeyMetadataResponse +from datadog_api_client.v2.model.cost_tag_metadata_daily_filter import CostTagMetadataDailyFilter +from datadog_api_client.v2.model.cost_currency_response import CostCurrencyResponse +from datadog_api_client.v2.model.cost_metrics_response import CostMetricsResponse +from datadog_api_client.v2.model.cost_tag_metadata_months_response import CostTagMetadataMonthsResponse +from datadog_api_client.v2.model.cost_orchestrators_response import CostOrchestratorsResponse +from datadog_api_client.v2.model.cost_tag_key_sources_response import CostTagKeySourcesResponse +from datadog_api_client.v2.model.cost_tags_response import CostTagsResponse +from datadog_api_client.v2.model.ruleset_resp_array import RulesetRespArray +from datadog_api_client.v2.model.ruleset_resp import RulesetResp +from datadog_api_client.v2.model.create_ruleset_request import CreateRulesetRequest +from datadog_api_client.v2.model.reorder_ruleset_resource_array import ReorderRulesetResourceArray +from datadog_api_client.v2.model.ruleset_status_resp_array import RulesetStatusRespArray +from datadog_api_client.v2.model.rules_validate_query_response import RulesValidateQueryResponse +from datadog_api_client.v2.model.rules_validate_query_request import RulesValidateQueryRequest +from datadog_api_client.v2.model.update_ruleset_request import UpdateRulesetRequest + + +class CloudCostManagementApi: + """ + The Cloud Cost Management API allows you to set up, edit, and delete Cloud Cost Management accounts for AWS, Azure, and Google Cloud. You can query your cost data by using the `Metrics endpoint `_ and the ``cloud_cost`` data source. For more information, see the `Cloud Cost Management documentation `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_cost_awscur_config_endpoint = _Endpoint( + settings={ + "response_type": (AwsCurConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/aws_cur_config", + "operation_id": "create_cost_awscur_config", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AwsCURConfigPostRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_cost_azure_uc_configs_endpoint = _Endpoint( + settings={ + "response_type": (AzureUCConfigPairsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/azure_uc_config", + "operation_id": "create_cost_azure_uc_configs", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AzureUCConfigPostRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_cost_gcp_usage_cost_config_endpoint = _Endpoint( + settings={ + "response_type": (GCPUsageCostConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/gcp_uc_config", + "operation_id": "create_cost_gcp_usage_cost_config", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GCPUsageCostConfigPostRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_custom_allocation_rule_endpoint = _Endpoint( + settings={ + "response_type": (ArbitraryRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/arbitrary_rule", + "operation_id": "create_custom_allocation_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ArbitraryCostUpsertRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_tag_pipelines_ruleset_endpoint = _Endpoint( + settings={ + "response_type": (RulesetResp,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/tags/enrichment", + "operation_id": "create_tag_pipelines_ruleset", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateRulesetRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_budget_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cost/budget/{budget_id}", + "operation_id": "delete_budget", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "budget_id": { + "required": True, + "openapi_types": (str,), + "attribute": "budget_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_cost_awscur_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/aws_cur_config/{cloud_account_id}", + "operation_id": "delete_cost_awscur_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_cost_azure_uc_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/azure_uc_config/{cloud_account_id}", + "operation_id": "delete_cost_azure_uc_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_cost_gcp_usage_cost_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/gcp_uc_config/{cloud_account_id}", + "operation_id": "delete_cost_gcp_usage_cost_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_cost_tag_description_by_key_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_descriptions/{tag_key}", + "operation_id": "delete_cost_tag_description_by_key", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "tag_key": { + "required": True, + "openapi_types": (str,), + "attribute": "tag_key", + "location": "path", + }, + "cloud": { + "openapi_types": (str,), + "attribute": "cloud", + "location": "query", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_custom_allocation_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/arbitrary_rule/{rule_id}", + "operation_id": "delete_custom_allocation_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (int,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_custom_costs_file_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/custom_costs/{file_id}", + "operation_id": "delete_custom_costs_file", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "file_id": { + "required": True, + "openapi_types": (str,), + "attribute": "file_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_custom_forecast_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cost/budget/{budget_id}/custom-forecast", + "operation_id": "delete_custom_forecast", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "budget_id": { + "required": True, + "openapi_types": (str,), + "attribute": "budget_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_tag_pipelines_ruleset_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/tags/enrichment/{ruleset_id}", + "operation_id": "delete_tag_pipelines_ruleset", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "ruleset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._generate_cost_tag_description_by_key_endpoint = _Endpoint( + settings={ + "response_type": (GenerateCostTagDescriptionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_descriptions/{tag_key}/generate", + "operation_id": "generate_cost_tag_description_by_key", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "tag_key": { + "required": True, + "openapi_types": (str,), + "attribute": "tag_key", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_budget_endpoint = _Endpoint( + settings={ + "response_type": (BudgetWithEntries,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cost/budget/{budget_id}", + "operation_id": "get_budget", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "budget_id": { + "required": True, + "openapi_types": (str,), + "attribute": "budget_id", + "location": "path", + }, + "actual": { + "openapi_types": (bool,), + "attribute": "actual", + "location": "query", + }, + "forecast": { + "openapi_types": (bool,), + "attribute": "forecast", + "location": "query", + }, + "start": { + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_commitments_commitment_list_endpoint = _Endpoint( + settings={ + "response_type": (CommitmentsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/commitments/commitment-list", + "operation_id": "get_commitments_commitment_list", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "provider": { + "required": True, + "openapi_types": (CommitmentsProvider,), + "attribute": "provider", + "location": "query", + }, + "product": { + "required": True, + "openapi_types": (str,), + "attribute": "product", + "location": "query", + }, + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "filter_by": { + "openapi_types": (str,), + "attribute": "filterBy", + "location": "query", + }, + "commitment_type": { + "openapi_types": (CommitmentsCommitmentType,), + "attribute": "commitmentType", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_commitments_coverage_scalar_endpoint = _Endpoint( + settings={ + "response_type": (CommitmentsCoverageScalarResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/commitments/coverage/scalar", + "operation_id": "get_commitments_coverage_scalar", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "provider": { + "required": True, + "openapi_types": (CommitmentsProvider,), + "attribute": "provider", + "location": "query", + }, + "product": { + "required": True, + "openapi_types": (str,), + "attribute": "product", + "location": "query", + }, + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "filter_by": { + "openapi_types": (str,), + "attribute": "filterBy", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_commitments_coverage_timeseries_endpoint = _Endpoint( + settings={ + "response_type": (CommitmentsCoverageTimeseriesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/commitments/coverage/timeseries", + "operation_id": "get_commitments_coverage_timeseries", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "provider": { + "required": True, + "openapi_types": (CommitmentsProvider,), + "attribute": "provider", + "location": "query", + }, + "product": { + "required": True, + "openapi_types": (str,), + "attribute": "product", + "location": "query", + }, + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "filter_by": { + "openapi_types": (str,), + "attribute": "filterBy", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_commitments_on_demand_hotspots_scalar_endpoint = _Endpoint( + settings={ + "response_type": (CommitmentsOnDemandHotspotsScalarResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/commitments/on-demand-hot-spots/scalar", + "operation_id": "get_commitments_on_demand_hotspots_scalar", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "provider": { + "required": True, + "openapi_types": (CommitmentsProvider,), + "attribute": "provider", + "location": "query", + }, + "product": { + "required": True, + "openapi_types": (str,), + "attribute": "product", + "location": "query", + }, + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "filter_by": { + "openapi_types": (str,), + "attribute": "filterBy", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_commitments_savings_scalar_endpoint = _Endpoint( + settings={ + "response_type": (CommitmentsSavingsScalarResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/commitments/savings/scalar", + "operation_id": "get_commitments_savings_scalar", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "provider": { + "required": True, + "openapi_types": (CommitmentsProvider,), + "attribute": "provider", + "location": "query", + }, + "product": { + "required": True, + "openapi_types": (str,), + "attribute": "product", + "location": "query", + }, + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "filter_by": { + "openapi_types": (str,), + "attribute": "filterBy", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_commitments_savings_timeseries_endpoint = _Endpoint( + settings={ + "response_type": (CommitmentsSavingsTimeseriesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/commitments/savings/timeseries", + "operation_id": "get_commitments_savings_timeseries", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "provider": { + "required": True, + "openapi_types": (CommitmentsProvider,), + "attribute": "provider", + "location": "query", + }, + "product": { + "required": True, + "openapi_types": (str,), + "attribute": "product", + "location": "query", + }, + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "filter_by": { + "openapi_types": (str,), + "attribute": "filterBy", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_commitments_utilization_scalar_endpoint = _Endpoint( + settings={ + "response_type": (CommitmentsUtilizationScalarResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/commitments/utilization/scalar", + "operation_id": "get_commitments_utilization_scalar", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "provider": { + "required": True, + "openapi_types": (CommitmentsProvider,), + "attribute": "provider", + "location": "query", + }, + "product": { + "required": True, + "openapi_types": (str,), + "attribute": "product", + "location": "query", + }, + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "filter_by": { + "openapi_types": (str,), + "attribute": "filterBy", + "location": "query", + }, + "commitment_type": { + "openapi_types": (CommitmentsCommitmentType,), + "attribute": "commitmentType", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_commitments_utilization_timeseries_endpoint = _Endpoint( + settings={ + "response_type": (CommitmentsUtilizationTimeseriesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/commitments/utilization/timeseries", + "operation_id": "get_commitments_utilization_timeseries", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "provider": { + "required": True, + "openapi_types": (CommitmentsProvider,), + "attribute": "provider", + "location": "query", + }, + "product": { + "required": True, + "openapi_types": (str,), + "attribute": "product", + "location": "query", + }, + "start": { + "required": True, + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "required": True, + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "filter_by": { + "openapi_types": (str,), + "attribute": "filterBy", + "location": "query", + }, + "commitment_type": { + "openapi_types": (CommitmentsCommitmentType,), + "attribute": "commitmentType", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_cost_account_filters_endpoint = _Endpoint( + settings={ + "response_type": (AccountFiltersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/account_filters/{cloud_account_id}", + "operation_id": "get_cost_account_filters", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_cost_anomaly_endpoint = _Endpoint( + settings={ + "response_type": (CostAnomalyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/anomalies/{anomaly_id}", + "operation_id": "get_cost_anomaly", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "anomaly_id": { + "required": True, + "openapi_types": (str,), + "attribute": "anomaly_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_cost_awscur_config_endpoint = _Endpoint( + settings={ + "response_type": (AwsCurConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/aws_cur_config/{cloud_account_id}", + "operation_id": "get_cost_awscur_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_cost_azure_uc_config_endpoint = _Endpoint( + settings={ + "response_type": (UCConfigPair,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/azure_uc_config/{cloud_account_id}", + "operation_id": "get_cost_azure_uc_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_cost_gcp_usage_cost_config_endpoint = _Endpoint( + settings={ + "response_type": (GcpUcConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/gcp_uc_config/{cloud_account_id}", + "operation_id": "get_cost_gcp_usage_cost_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_cost_tag_description_by_key_endpoint = _Endpoint( + settings={ + "response_type": (CostTagDescriptionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_descriptions/{tag_key}", + "operation_id": "get_cost_tag_description_by_key", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "tag_key": { + "required": True, + "openapi_types": (str,), + "attribute": "tag_key", + "location": "path", + }, + "filter_cloud": { + "openapi_types": (str,), + "attribute": "filter[cloud]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_cost_tag_key_endpoint = _Endpoint( + settings={ + "response_type": (CostTagKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_keys/{tag_key}", + "operation_id": "get_cost_tag_key", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "tag_key": { + "required": True, + "openapi_types": (str,), + "attribute": "tag_key", + "location": "path", + }, + "filter_metric": { + "openapi_types": (str,), + "attribute": "filter[metric]", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 10000, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_cost_tag_metadata_currency_endpoint = _Endpoint( + settings={ + "response_type": (CostCurrencyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_metadata/currency", + "operation_id": "get_cost_tag_metadata_currency", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_month": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[month]", + "location": "query", + }, + "filter_provider": { + "openapi_types": (str,), + "attribute": "filter[provider]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_custom_allocation_rule_endpoint = _Endpoint( + settings={ + "response_type": (ArbitraryRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/arbitrary_rule/{rule_id}", + "operation_id": "get_custom_allocation_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (int,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_custom_costs_file_endpoint = _Endpoint( + settings={ + "response_type": (CustomCostsFileGetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/custom_costs/{file_id}", + "operation_id": "get_custom_costs_file", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "file_id": { + "required": True, + "openapi_types": (str,), + "attribute": "file_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_custom_forecast_endpoint = _Endpoint( + settings={ + "response_type": (CustomForecastResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cost/budget/{budget_id}/custom-forecast", + "operation_id": "get_custom_forecast", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "budget_id": { + "required": True, + "openapi_types": (str,), + "attribute": "budget_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_tag_pipelines_ruleset_endpoint = _Endpoint( + settings={ + "response_type": (RulesetResp,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/tags/enrichment/{ruleset_id}", + "operation_id": "get_tag_pipelines_ruleset", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_budgets_endpoint = _Endpoint( + settings={ + "response_type": (BudgetArray,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cost/budgets", + "operation_id": "list_budgets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_anomalies_endpoint = _Endpoint( + settings={ + "response_type": (CostAnomaliesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/anomalies", + "operation_id": "list_cost_anomalies", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "start": { + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "end": { + "openapi_types": (int,), + "attribute": "end", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "min_anomalous_threshold": { + "openapi_types": (str,), + "attribute": "min_anomalous_threshold", + "location": "query", + }, + "min_cost_threshold": { + "openapi_types": (str,), + "attribute": "min_cost_threshold", + "location": "query", + }, + "dismissal_cause": { + "openapi_types": (str,), + "attribute": "dismissal_cause", + "location": "query", + }, + "order_by": { + "openapi_types": (str,), + "attribute": "order_by", + "location": "query", + }, + "order": { + "openapi_types": (str,), + "attribute": "order", + "location": "query", + }, + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "offset": { + "openapi_types": (int,), + "attribute": "offset", + "location": "query", + }, + "provider_ids": { + "openapi_types": ([str],), + "attribute": "provider_ids", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_awscur_configs_endpoint = _Endpoint( + settings={ + "response_type": (AwsCURConfigsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/aws_cur_config", + "operation_id": "list_cost_awscur_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_azure_uc_configs_endpoint = _Endpoint( + settings={ + "response_type": (AzureUCConfigsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/azure_uc_config", + "operation_id": "list_cost_azure_uc_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_gcp_usage_cost_configs_endpoint = _Endpoint( + settings={ + "response_type": (GCPUsageCostConfigsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/gcp_uc_config", + "operation_id": "list_cost_gcp_usage_cost_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_oci_configs_endpoint = _Endpoint( + settings={ + "response_type": (OCIConfigsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/oci_config", + "operation_id": "list_cost_oci_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_tag_descriptions_endpoint = _Endpoint( + settings={ + "response_type": (CostTagDescriptionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_descriptions", + "operation_id": "list_cost_tag_descriptions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_cloud": { + "openapi_types": (str,), + "attribute": "filter[cloud]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_tag_keys_endpoint = _Endpoint( + settings={ + "response_type": (CostTagKeysResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_keys", + "operation_id": "list_cost_tag_keys", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_metric": { + "openapi_types": (str,), + "attribute": "filter[metric]", + "location": "query", + }, + "filter_tags": { + "openapi_types": ([str],), + "attribute": "filter[tags]", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_tag_key_sources_endpoint = _Endpoint( + settings={ + "response_type": (CostTagKeySourcesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_metadata/tag_sources", + "operation_id": "list_cost_tag_key_sources", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_month": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[month]", + "location": "query", + }, + "filter_provider": { + "openapi_types": (str,), + "attribute": "filter[provider]", + "location": "query", + }, + "filter_metric": { + "openapi_types": (str,), + "attribute": "filter[metric]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_tag_metadata_endpoint = _Endpoint( + settings={ + "response_type": (CostTagKeyMetadataResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_metadata", + "operation_id": "list_cost_tag_metadata", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_month": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[month]", + "location": "query", + }, + "filter_provider": { + "openapi_types": (str,), + "attribute": "filter[provider]", + "location": "query", + }, + "filter_metric": { + "openapi_types": (str,), + "attribute": "filter[metric]", + "location": "query", + }, + "filter_tag_key": { + "openapi_types": (str,), + "attribute": "filter[tag_key]", + "location": "query", + }, + "filter_daily": { + "openapi_types": (CostTagMetadataDailyFilter,), + "attribute": "filter[daily]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_tag_metadata_metrics_endpoint = _Endpoint( + settings={ + "response_type": (CostMetricsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_metadata/metrics", + "operation_id": "list_cost_tag_metadata_metrics", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_month": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[month]", + "location": "query", + }, + "filter_provider": { + "openapi_types": (str,), + "attribute": "filter[provider]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_tag_metadata_months_endpoint = _Endpoint( + settings={ + "response_type": (CostTagMetadataMonthsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_metadata/months", + "operation_id": "list_cost_tag_metadata_months", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_provider": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[provider]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_tag_metadata_orchestrators_endpoint = _Endpoint( + settings={ + "response_type": (CostOrchestratorsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_metadata/orchestrators", + "operation_id": "list_cost_tag_metadata_orchestrators", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_month": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[month]", + "location": "query", + }, + "filter_provider": { + "openapi_types": (str,), + "attribute": "filter[provider]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cost_tags_endpoint = _Endpoint( + settings={ + "response_type": (CostTagsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tags", + "operation_id": "list_cost_tags", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_metric": { + "openapi_types": (str,), + "attribute": "filter[metric]", + "location": "query", + }, + "filter_match": { + "openapi_types": (str,), + "attribute": "filter[match]", + "location": "query", + }, + "filter_tags": { + "openapi_types": ([str],), + "attribute": "filter[tags]", + "location": "query", + "collection_format": "multi", + }, + "filter_tag_keys": { + "openapi_types": ([str],), + "attribute": "filter[tag_keys]", + "location": "query", + "collection_format": "multi", + }, + "page_size": { + "validation": { + "inclusive_maximum": 10000, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_custom_allocation_rules_endpoint = _Endpoint( + settings={ + "response_type": (ArbitraryRuleResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/arbitrary_rule", + "operation_id": "list_custom_allocation_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_custom_allocation_rules_status_endpoint = _Endpoint( + settings={ + "response_type": (ArbitraryRuleStatusResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/arbitrary_rule/status", + "operation_id": "list_custom_allocation_rules_status", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_custom_costs_files_endpoint = _Endpoint( + settings={ + "response_type": (CustomCostsFileListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/custom_costs", + "operation_id": "list_custom_costs_files", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "filter_status": { + "openapi_types": (str,), + "attribute": "filter[status]", + "location": "query", + }, + "filter_name": { + "openapi_types": (str,), + "attribute": "filter[name]", + "location": "query", + }, + "filter_provider": { + "openapi_types": ([str],), + "attribute": "filter[provider]", + "location": "query", + "collection_format": "multi", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tag_pipelines_rulesets_endpoint = _Endpoint( + settings={ + "response_type": (RulesetRespArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/tags/enrichment", + "operation_id": "list_tag_pipelines_rulesets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tag_pipelines_rulesets_status_endpoint = _Endpoint( + settings={ + "response_type": (RulesetStatusRespArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/tags/enrichment/status", + "operation_id": "list_tag_pipelines_rulesets_status", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._reorder_custom_allocation_rules_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/arbitrary_rule/reorder", + "operation_id": "reorder_custom_allocation_rules", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ReorderRuleResourceArray,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._reorder_tag_pipelines_rulesets_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/tags/enrichment/reorder", + "operation_id": "reorder_tag_pipelines_rulesets", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ReorderRulesetResourceArray,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_cost_recommendations_endpoint = _Endpoint( + settings={ + "response_type": (CostRecommendationArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/recommendations", + "operation_id": "search_cost_recommendations", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (str,), + "attribute": "page[size]", + "location": "query", + }, + "page_token": { + "openapi_types": (str,), + "attribute": "page[token]", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (RecommendationsFilterRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_cost_account_filters_endpoint = _Endpoint( + settings={ + "response_type": (AccountFiltersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/account_filters/{cloud_account_id}", + "operation_id": "update_cost_account_filters", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AccountFiltersPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_cost_awscur_config_endpoint = _Endpoint( + settings={ + "response_type": (AwsCURConfigsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/aws_cur_config/{cloud_account_id}", + "operation_id": "update_cost_awscur_config", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AwsCURConfigPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_cost_azure_uc_configs_endpoint = _Endpoint( + settings={ + "response_type": (AzureUCConfigPairsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/azure_uc_config/{cloud_account_id}", + "operation_id": "update_cost_azure_uc_configs", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AzureUCConfigPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_cost_gcp_usage_cost_config_endpoint = _Endpoint( + settings={ + "response_type": (GCPUsageCostConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/gcp_uc_config/{cloud_account_id}", + "operation_id": "update_cost_gcp_usage_cost_config", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "cloud_account_id": { + "required": True, + "openapi_types": (int,), + "attribute": "cloud_account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GCPUsageCostConfigPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_custom_allocation_rule_endpoint = _Endpoint( + settings={ + "response_type": (ArbitraryRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/arbitrary_rule/{rule_id}", + "operation_id": "update_custom_allocation_rule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (int,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ArbitraryCostUpsertRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_tag_pipelines_ruleset_endpoint = _Endpoint( + settings={ + "response_type": (RulesetResp,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/tags/enrichment/{ruleset_id}", + "operation_id": "update_tag_pipelines_ruleset", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "ruleset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateRulesetRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upload_custom_costs_file_endpoint = _Endpoint( + settings={ + "response_type": (CustomCostsFileUploadResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/custom_costs", + "operation_id": "upload_custom_costs_file", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": ([CustomCostsFileLineItem],), + "location": "body", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upsert_budget_endpoint = _Endpoint( + settings={ + "response_type": (BudgetWithEntries,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cost/budget", + "operation_id": "upsert_budget", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (BudgetWithEntries,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upsert_cost_tag_description_by_key_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost/tag_descriptions/{tag_key}", + "operation_id": "upsert_cost_tag_description_by_key", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "tag_key": { + "required": True, + "openapi_types": (str,), + "attribute": "tag_key", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CostTagDescriptionUpsertRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upsert_custom_forecast_endpoint = _Endpoint( + settings={ + "response_type": (CustomForecastResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cost/budget/custom-forecast", + "operation_id": "upsert_custom_forecast", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CustomForecastUpsertRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_budget_endpoint = _Endpoint( + settings={ + "response_type": (BudgetValidationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cost/budget/validate", + "operation_id": "validate_budget", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (BudgetValidationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_csv_budget_endpoint = _Endpoint( + settings={ + "response_type": (ValidationResponse,), + "auth": [], + "endpoint_path": "/api/v2/cost/budget/csv/validate", + "operation_id": "validate_csv_budget", + "http_method": "POST", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._validate_query_endpoint = _Endpoint( + settings={ + "response_type": (RulesValidateQueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/tags/enrichment/validate-query", + "operation_id": "validate_query", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RulesValidateQueryRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_cost_awscur_config(self, body: AwsCURConfigPostRequest, ) -> AwsCurConfigResponse: + """Create Cloud Cost Management AWS CUR config. + + Create a Cloud Cost Management account for an AWS CUR config. + + :type body: AwsCURConfigPostRequest + :rtype: AwsCurConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_cost_awscur_config_endpoint.call_with_http_info(**kwargs) + + def create_cost_azure_uc_configs(self, body: AzureUCConfigPostRequest, ) -> AzureUCConfigPairsResponse: + """Create Cloud Cost Management Azure configs. + + Create a Cloud Cost Management account for an Azure config. + + :type body: AzureUCConfigPostRequest + :rtype: AzureUCConfigPairsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_cost_azure_uc_configs_endpoint.call_with_http_info(**kwargs) + + def create_cost_gcp_usage_cost_config(self, body: GCPUsageCostConfigPostRequest, ) -> GCPUsageCostConfigResponse: + """Create Google Cloud Usage Cost config. + + Create a Cloud Cost Management account for an Google Cloud Usage Cost config. + + :type body: GCPUsageCostConfigPostRequest + :rtype: GCPUsageCostConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_cost_gcp_usage_cost_config_endpoint.call_with_http_info(**kwargs) + + def create_custom_allocation_rule(self, body: ArbitraryCostUpsertRequest, ) -> ArbitraryRuleResponse: + """Create custom allocation rule. + + Create a new custom allocation rule with the specified filters and allocation strategy. + + **Strategy Methods:** + + * **PROPORTIONAL/EVEN** : Allocates costs proportionally/evenly based on existing costs. Requires: granularity, allocated_by_tag_keys. Optional: based_on_costs, allocated_by_filters, evaluate_grouped_by_tag_keys, evaluate_grouped_by_filters. + * **PROPORTIONAL_TIMESERIES/EVEN_TIMESERIES** : Allocates based on timeseries data. Requires: granularity, based_on_timeseries. Optional: evaluate_grouped_by_tag_keys. + * **PERCENT** : Allocates fixed percentages to specific tags. Requires: allocated_by (array of percentage allocations). + + **Filter Conditions:** + + * Use **value** for single-value conditions: "is", "is not", "contains", "=", "!=", "like", "not like" + * Use **values** for multi-value conditions: "in", "not in" + * Cannot use both value and values simultaneously. + + **Supported operators** : is, is not, contains, in, not in, =, !=, like, not like + + :type body: ArbitraryCostUpsertRequest + :rtype: ArbitraryRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_custom_allocation_rule_endpoint.call_with_http_info(**kwargs) + + def create_tag_pipelines_ruleset(self, body: CreateRulesetRequest, ) -> RulesetResp: + """Create tag pipeline ruleset. + + Create a new tag pipeline ruleset with the specified rules and configuration + + :type body: CreateRulesetRequest + :rtype: RulesetResp + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_tag_pipelines_ruleset_endpoint.call_with_http_info(**kwargs) + + def delete_budget(self, budget_id: str, ) -> None: + """Delete budget. + + Delete a budget + + :param budget_id: Budget id. + :type budget_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["budget_id"] = budget_id + + return self._delete_budget_endpoint.call_with_http_info(**kwargs) + + def delete_cost_awscur_config(self, cloud_account_id: int, ) -> None: + """Delete Cloud Cost Management AWS CUR config. + + Archive a Cloud Cost Management Account. + + :param cloud_account_id: Cloud Account id. + :type cloud_account_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + return self._delete_cost_awscur_config_endpoint.call_with_http_info(**kwargs) + + def delete_cost_azure_uc_config(self, cloud_account_id: int, ) -> None: + """Delete Cloud Cost Management Azure config. + + Archive a Cloud Cost Management Account. + + :param cloud_account_id: Cloud Account id. + :type cloud_account_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + return self._delete_cost_azure_uc_config_endpoint.call_with_http_info(**kwargs) + + def delete_cost_gcp_usage_cost_config(self, cloud_account_id: int, ) -> None: + """Delete Google Cloud Usage Cost config. + + Archive a Cloud Cost Management account. + + :param cloud_account_id: Cloud Account id. + :type cloud_account_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + return self._delete_cost_gcp_usage_cost_config_endpoint.call_with_http_info(**kwargs) + + def delete_cost_tag_description_by_key(self, tag_key: str, *, cloud: Union[str, UnsetType]=unset, ) -> None: + """Delete a Cloud Cost Management tag description. + + Delete a Cloud Cost Management tag key description. When ``cloud`` is omitted, deletes every description for the tag key, falling back to Datadog's global default when available. When ``cloud`` is provided, deletes only the description scoped to that cloud provider. + + :param tag_key: The tag key whose description is being deleted. + :type tag_key: str + :param cloud: Cloud provider to scope the deletion to (for example, ``aws`` ). Omit to delete every description for the tag key. + :type cloud: str, optional + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["tag_key"] = tag_key + + if cloud is not unset: + kwargs["cloud"] = cloud + + return self._delete_cost_tag_description_by_key_endpoint.call_with_http_info(**kwargs) + + def delete_custom_allocation_rule(self, rule_id: int, ) -> None: + """Delete custom allocation rule. + + Delete a custom allocation rule - Delete an existing custom allocation rule by its ID + + :param rule_id: The unique identifier of the custom allocation rule + :type rule_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._delete_custom_allocation_rule_endpoint.call_with_http_info(**kwargs) + + def delete_custom_costs_file(self, file_id: str, ) -> None: + """Delete Custom Costs file. + + Delete the specified Custom Costs file. + + :param file_id: File ID. + :type file_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["file_id"] = file_id + + return self._delete_custom_costs_file_endpoint.call_with_http_info(**kwargs) + + def delete_custom_forecast(self, budget_id: str, ) -> None: + """Delete a budget's custom forecast. + + Delete the custom forecast for a budget. + + :param budget_id: Budget id. + :type budget_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["budget_id"] = budget_id + + return self._delete_custom_forecast_endpoint.call_with_http_info(**kwargs) + + def delete_tag_pipelines_ruleset(self, ruleset_id: str, ) -> None: + """Delete tag pipeline ruleset. + + Delete a tag pipeline ruleset - Delete an existing tag pipeline ruleset by its ID + + :param ruleset_id: The unique identifier of the ruleset + :type ruleset_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_id"] = ruleset_id + + return self._delete_tag_pipelines_ruleset_endpoint.call_with_http_info(**kwargs) + + def generate_cost_tag_description_by_key(self, tag_key: str, ) -> GenerateCostTagDescriptionResponse: + """Generate a Cloud Cost Management tag description. + + Use AI to draft a Cloud Cost Management tag key description based on associated cost data. The generated description is returned in the response and is not persisted by this endpoint; follow up with ``UpsertCostTagDescriptionByKey`` to save it. + + :param tag_key: The tag key to generate an AI description for. + :type tag_key: str + :rtype: GenerateCostTagDescriptionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["tag_key"] = tag_key + + return self._generate_cost_tag_description_by_key_endpoint.call_with_http_info(**kwargs) + + def get_budget(self, budget_id: str, *, actual: Union[bool, UnsetType]=unset, forecast: Union[bool, UnsetType]=unset, start: Union[int, UnsetType]=unset, end: Union[int, UnsetType]=unset, ) -> BudgetWithEntries: + """Get budget. + + Get a budget by ID. Pass ``actual=true`` or ``forecast=true`` to include cost data in the response. Use ``start`` and ``end`` (millisecond epochs, both required) to set the cost window. When ``forecast=true`` , each entry also includes ``ootb_forecast`` (the ML forecast before overrides) and ``custom_forecast`` ( ``null`` if no override is set, a number if one is). + + :param budget_id: Budget id. + :type budget_id: str + :param actual: When ``true`` , includes actual cost data in the response. + :type actual: bool, optional + :param forecast: When ``true`` , includes forecast cost data in the response, including ``ootb_forecast`` and ``custom_forecast`` per entry. + :type forecast: bool, optional + :param start: Start of the cost window in milliseconds since epoch. Must be used together with ``end``. + :type start: int, optional + :param end: End of the cost window in milliseconds since epoch. Must be used together with ``start``. + :type end: int, optional + :rtype: BudgetWithEntries + """ + kwargs: Dict[str, Any] = {} + kwargs["budget_id"] = budget_id + + if actual is not unset: + kwargs["actual"] = actual + + if forecast is not unset: + kwargs["forecast"] = forecast + + if start is not unset: + kwargs["start"] = start + + if end is not unset: + kwargs["end"] = end + + return self._get_budget_endpoint.call_with_http_info(**kwargs) + + def get_commitments_commitment_list(self, provider: CommitmentsProvider, product: str, start: int, end: int, *, filter_by: Union[str, UnsetType]=unset, commitment_type: Union[CommitmentsCommitmentType, UnsetType]=unset, ) -> CommitmentsListResponse: + """Get commitments list. + + Get a list of individual cloud commitments (Reserved Instances or Savings Plans) with their utilization details. The response schema varies based on the provider, product, and commitment type. + + :param provider: Cloud provider for commitment programs (aws or azure). + :type provider: CommitmentsProvider + :param product: Cloud product identifier (for example, ec2, rds, virtualmachines). + :type product: str + :param start: Start of the query time range in Unix milliseconds. + :type start: int + :param end: End of the query time range in Unix milliseconds. + :type end: int + :param filter_by: Optional filter expression to narrow down results. + :type filter_by: str, optional + :param commitment_type: Type of commitment to query. ri for Reserved Instances, sp for Savings Plans. Defaults to ri. + :type commitment_type: CommitmentsCommitmentType, optional + :rtype: CommitmentsListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["provider"] = provider + + kwargs["product"] = product + + kwargs["start"] = start + + kwargs["end"] = end + + if filter_by is not unset: + kwargs["filter_by"] = filter_by + + if commitment_type is not unset: + kwargs["commitment_type"] = commitment_type + + return self._get_commitments_commitment_list_endpoint.call_with_http_info(**kwargs) + + def get_commitments_coverage_scalar(self, provider: CommitmentsProvider, product: str, start: int, end: int, *, filter_by: Union[str, UnsetType]=unset, ) -> CommitmentsCoverageScalarResponse: + """Get commitments coverage (scalar). + + Get scalar coverage metrics for cloud commitment programs, including hours and cost coverage percentages. + + :param provider: Cloud provider for commitment programs (aws or azure). + :type provider: CommitmentsProvider + :param product: Cloud product identifier (for example, ec2, rds, virtualmachines). + :type product: str + :param start: Start of the query time range in Unix milliseconds. + :type start: int + :param end: End of the query time range in Unix milliseconds. + :type end: int + :param filter_by: Optional filter expression to narrow down results. + :type filter_by: str, optional + :rtype: CommitmentsCoverageScalarResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["provider"] = provider + + kwargs["product"] = product + + kwargs["start"] = start + + kwargs["end"] = end + + if filter_by is not unset: + kwargs["filter_by"] = filter_by + + return self._get_commitments_coverage_scalar_endpoint.call_with_http_info(**kwargs) + + def get_commitments_coverage_timeseries(self, provider: CommitmentsProvider, product: str, start: int, end: int, *, filter_by: Union[str, UnsetType]=unset, ) -> CommitmentsCoverageTimeseriesResponse: + """Get commitments coverage (timeseries). + + Get timeseries coverage metrics for cloud commitment programs, broken down by coverage type (Reserved Instances, Savings Plans, On-Demand, and Spot) for both hours and cost. + + :param provider: Cloud provider for commitment programs (aws or azure). + :type provider: CommitmentsProvider + :param product: Cloud product identifier (for example, ec2, rds, virtualmachines). + :type product: str + :param start: Start of the query time range in Unix milliseconds. + :type start: int + :param end: End of the query time range in Unix milliseconds. + :type end: int + :param filter_by: Optional filter expression to narrow down results. + :type filter_by: str, optional + :rtype: CommitmentsCoverageTimeseriesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["provider"] = provider + + kwargs["product"] = product + + kwargs["start"] = start + + kwargs["end"] = end + + if filter_by is not unset: + kwargs["filter_by"] = filter_by + + return self._get_commitments_coverage_timeseries_endpoint.call_with_http_info(**kwargs) + + def get_commitments_on_demand_hotspots_scalar(self, provider: CommitmentsProvider, product: str, start: int, end: int, *, filter_by: Union[str, UnsetType]=unset, ) -> CommitmentsOnDemandHotspotsScalarResponse: + """Get commitments on-demand hot spots (scalar). + + Get scalar on-demand hot-spots data for cloud commitment programs, showing per-dimension breakdowns of on-demand spending with coverage metrics and potential savings. + + :param provider: Cloud provider for commitment programs (aws or azure). + :type provider: CommitmentsProvider + :param product: Cloud product identifier (for example, ec2, rds, virtualmachines). + :type product: str + :param start: Start of the query time range in Unix milliseconds. + :type start: int + :param end: End of the query time range in Unix milliseconds. + :type end: int + :param filter_by: Optional filter expression to narrow down results. + :type filter_by: str, optional + :rtype: CommitmentsOnDemandHotspotsScalarResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["provider"] = provider + + kwargs["product"] = product + + kwargs["start"] = start + + kwargs["end"] = end + + if filter_by is not unset: + kwargs["filter_by"] = filter_by + + return self._get_commitments_on_demand_hotspots_scalar_endpoint.call_with_http_info(**kwargs) + + def get_commitments_savings_scalar(self, provider: CommitmentsProvider, product: str, start: int, end: int, *, filter_by: Union[str, UnsetType]=unset, ) -> CommitmentsSavingsScalarResponse: + """Get commitments savings (scalar). + + Get scalar savings metrics for cloud commitment programs, including realized savings and effective savings rate. + + :param provider: Cloud provider for commitment programs (aws or azure). + :type provider: CommitmentsProvider + :param product: Cloud product identifier (for example, ec2, rds, virtualmachines). + :type product: str + :param start: Start of the query time range in Unix milliseconds. + :type start: int + :param end: End of the query time range in Unix milliseconds. + :type end: int + :param filter_by: Optional filter expression to narrow down results. + :type filter_by: str, optional + :rtype: CommitmentsSavingsScalarResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["provider"] = provider + + kwargs["product"] = product + + kwargs["start"] = start + + kwargs["end"] = end + + if filter_by is not unset: + kwargs["filter_by"] = filter_by + + return self._get_commitments_savings_scalar_endpoint.call_with_http_info(**kwargs) + + def get_commitments_savings_timeseries(self, provider: CommitmentsProvider, product: str, start: int, end: int, *, filter_by: Union[str, UnsetType]=unset, ) -> CommitmentsSavingsTimeseriesResponse: + """Get commitments savings (timeseries). + + Get timeseries savings metrics for cloud commitment programs, including actual cost, on-demand equivalent cost, realized savings, and effective savings rate over time. + + :param provider: Cloud provider for commitment programs (aws or azure). + :type provider: CommitmentsProvider + :param product: Cloud product identifier (for example, ec2, rds, virtualmachines). + :type product: str + :param start: Start of the query time range in Unix milliseconds. + :type start: int + :param end: End of the query time range in Unix milliseconds. + :type end: int + :param filter_by: Optional filter expression to narrow down results. + :type filter_by: str, optional + :rtype: CommitmentsSavingsTimeseriesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["provider"] = provider + + kwargs["product"] = product + + kwargs["start"] = start + + kwargs["end"] = end + + if filter_by is not unset: + kwargs["filter_by"] = filter_by + + return self._get_commitments_savings_timeseries_endpoint.call_with_http_info(**kwargs) + + def get_commitments_utilization_scalar(self, provider: CommitmentsProvider, product: str, start: int, end: int, *, filter_by: Union[str, UnsetType]=unset, commitment_type: Union[CommitmentsCommitmentType, UnsetType]=unset, ) -> CommitmentsUtilizationScalarResponse: + """Get commitments utilization (scalar). + + Get scalar utilization metrics for cloud commitment programs, including utilization percentage and unused cost. + + :param provider: Cloud provider for commitment programs (aws or azure). + :type provider: CommitmentsProvider + :param product: Cloud product identifier (for example, ec2, rds, virtualmachines). + :type product: str + :param start: Start of the query time range in Unix milliseconds. + :type start: int + :param end: End of the query time range in Unix milliseconds. + :type end: int + :param filter_by: Optional filter expression to narrow down results. + :type filter_by: str, optional + :param commitment_type: Type of commitment to query. ri for Reserved Instances, sp for Savings Plans. Defaults to ri. + :type commitment_type: CommitmentsCommitmentType, optional + :rtype: CommitmentsUtilizationScalarResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["provider"] = provider + + kwargs["product"] = product + + kwargs["start"] = start + + kwargs["end"] = end + + if filter_by is not unset: + kwargs["filter_by"] = filter_by + + if commitment_type is not unset: + kwargs["commitment_type"] = commitment_type + + return self._get_commitments_utilization_scalar_endpoint.call_with_http_info(**kwargs) + + def get_commitments_utilization_timeseries(self, provider: CommitmentsProvider, product: str, start: int, end: int, *, filter_by: Union[str, UnsetType]=unset, commitment_type: Union[CommitmentsCommitmentType, UnsetType]=unset, ) -> CommitmentsUtilizationTimeseriesResponse: + """Get commitments utilization (timeseries). + + Get timeseries utilization metrics for cloud commitment programs, including used and unused cost series over time. + + :param provider: Cloud provider for commitment programs (aws or azure). + :type provider: CommitmentsProvider + :param product: Cloud product identifier (for example, ec2, rds, virtualmachines). + :type product: str + :param start: Start of the query time range in Unix milliseconds. + :type start: int + :param end: End of the query time range in Unix milliseconds. + :type end: int + :param filter_by: Optional filter expression to narrow down results. + :type filter_by: str, optional + :param commitment_type: Type of commitment to query. ri for Reserved Instances, sp for Savings Plans. Defaults to ri. + :type commitment_type: CommitmentsCommitmentType, optional + :rtype: CommitmentsUtilizationTimeseriesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["provider"] = provider + + kwargs["product"] = product + + kwargs["start"] = start + + kwargs["end"] = end + + if filter_by is not unset: + kwargs["filter_by"] = filter_by + + if commitment_type is not unset: + kwargs["commitment_type"] = commitment_type + + return self._get_commitments_utilization_timeseries_endpoint.call_with_http_info(**kwargs) + + def get_cost_account_filters(self, cloud_account_id: int, ) -> AccountFiltersResponse: + """Get account filters. + + Get the account filters for a cloud account (AWS CUR 1.0/2.0, OCI, and other clouds). + + :param cloud_account_id: Cloud Account id. + :type cloud_account_id: int + :rtype: AccountFiltersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + return self._get_cost_account_filters_endpoint.call_with_http_info(**kwargs) + + def get_cost_anomaly(self, anomaly_id: str, ) -> CostAnomalyResponse: + """Get cost anomaly. + + Get a detected Cloud Cost Management anomaly by UUID. + + :param anomaly_id: The UUID of the cost anomaly. + :type anomaly_id: str + :rtype: CostAnomalyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["anomaly_id"] = anomaly_id + + return self._get_cost_anomaly_endpoint.call_with_http_info(**kwargs) + + def get_cost_awscur_config(self, cloud_account_id: int, ) -> AwsCurConfigResponse: + """Get cost AWS CUR config. + + Get a specific AWS CUR config. + + :param cloud_account_id: The unique identifier of the cloud account + :type cloud_account_id: int + :rtype: AwsCurConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + return self._get_cost_awscur_config_endpoint.call_with_http_info(**kwargs) + + def get_cost_azure_uc_config(self, cloud_account_id: int, ) -> UCConfigPair: + """Get cost Azure UC config. + + Get a specific Azure config. + + :param cloud_account_id: The unique identifier of the cloud account + :type cloud_account_id: int + :rtype: UCConfigPair + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + return self._get_cost_azure_uc_config_endpoint.call_with_http_info(**kwargs) + + def get_cost_gcp_usage_cost_config(self, cloud_account_id: int, ) -> GcpUcConfigResponse: + """Get Google Cloud Usage Cost config. + + Get a specific Google Cloud Usage Cost config. + + :param cloud_account_id: The unique identifier of the cloud account + :type cloud_account_id: int + :rtype: GcpUcConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + return self._get_cost_gcp_usage_cost_config_endpoint.call_with_http_info(**kwargs) + + def get_cost_tag_description_by_key(self, tag_key: str, *, filter_cloud: Union[str, UnsetType]=unset, ) -> CostTagDescriptionResponse: + """Get a Cloud Cost Management tag description. + + Get the Cloud Cost Management description for a single tag key. Use ``filter[cloud]`` to scope the lookup to a specific cloud provider; when omitted, the response resolves the description in fallback order (cloud-specific organization override, then cloudless organization default, then Datadog's global default). + + :param tag_key: The tag key whose description is being fetched. + :type tag_key: str + :param filter_cloud: Cloud provider to scope the lookup to (for example, ``aws`` ). Omit to use the resolved fallback. + :type filter_cloud: str, optional + :rtype: CostTagDescriptionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["tag_key"] = tag_key + + if filter_cloud is not unset: + kwargs["filter_cloud"] = filter_cloud + + return self._get_cost_tag_description_by_key_endpoint.call_with_http_info(**kwargs) + + def get_cost_tag_key(self, tag_key: str, *, filter_metric: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> CostTagKeyResponse: + """Get a Cloud Cost Management tag key. + + Get details for a specific Cloud Cost Management tag key, including example tag values and description. + + :param tag_key: The Cloud Cost Management tag key. Tag keys can contain forward slashes (for example, ``kubernetes/instance`` ). + :type tag_key: str + :param filter_metric: The Cloud Cost Management metric to scope the tag key details to. When omitted, returns details across all metrics. + :type filter_metric: str, optional + :param page_size: Controls the size of the internal tag value search scope. This does **not** restrict the number of example tag values returned in the response. Defaults to 50, maximum 10000. + :type page_size: int, optional + :rtype: CostTagKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["tag_key"] = tag_key + + if filter_metric is not unset: + kwargs["filter_metric"] = filter_metric + + if page_size is not unset: + kwargs["page_size"] = page_size + + return self._get_cost_tag_key_endpoint.call_with_http_info(**kwargs) + + def get_cost_tag_metadata_currency(self, filter_month: str, *, filter_provider: Union[str, UnsetType]=unset, ) -> CostCurrencyResponse: + """Get the Cloud Cost Management billing currency. + + Get the dominant billing currency observed in Cloud Cost Management data for the requested period. The response wraps the currency in a JSON:API ``data`` array containing at most one entry; the array is empty when no currency data is available. + + :param filter_month: The month to scope the query to, in ``YYYY-MM`` format. + :type filter_month: str + :param filter_provider: Filter results to a specific provider. Common cloud values are ``aws`` , ``azure`` , ``gcp`` , ``Oracle`` (OCI), and ``custom``. SaaS billing integrations (for example, ``Snowflake`` , ``MongoDB`` , ``Databricks`` ) are also accepted using their display-name string. Values are case-sensitive. + :type filter_provider: str, optional + :rtype: CostCurrencyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_month"] = filter_month + + if filter_provider is not unset: + kwargs["filter_provider"] = filter_provider + + return self._get_cost_tag_metadata_currency_endpoint.call_with_http_info(**kwargs) + + def get_custom_allocation_rule(self, rule_id: int, ) -> ArbitraryRuleResponse: + """Get custom allocation rule. + + Get a specific custom allocation rule - Retrieve a specific custom allocation rule by its ID + + :param rule_id: The unique identifier of the custom allocation rule + :type rule_id: int + :rtype: ArbitraryRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._get_custom_allocation_rule_endpoint.call_with_http_info(**kwargs) + + def get_custom_costs_file(self, file_id: str, ) -> CustomCostsFileGetResponse: + """Get Custom Costs file. + + Fetch the specified Custom Costs file. + + :param file_id: File ID. + :type file_id: str + :rtype: CustomCostsFileGetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["file_id"] = file_id + + return self._get_custom_costs_file_endpoint.call_with_http_info(**kwargs) + + def get_custom_forecast(self, budget_id: str, ) -> CustomForecastResponse: + """Get a budget's custom forecast. + + Get the custom forecast for a budget. + + :param budget_id: Budget id. + :type budget_id: str + :rtype: CustomForecastResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["budget_id"] = budget_id + + return self._get_custom_forecast_endpoint.call_with_http_info(**kwargs) + + def get_tag_pipelines_ruleset(self, ruleset_id: str, ) -> RulesetResp: + """Get a tag pipeline ruleset. + + Get a specific tag pipeline ruleset - Retrieve a specific tag pipeline ruleset by its ID + + :param ruleset_id: The unique identifier of the ruleset + :type ruleset_id: str + :rtype: RulesetResp + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_id"] = ruleset_id + + return self._get_tag_pipelines_ruleset_endpoint.call_with_http_info(**kwargs) + + def list_budgets(self, ) -> BudgetArray: + """List budgets. + + List budgets. + + :rtype: BudgetArray + """ + kwargs: Dict[str, Any] = {} + return self._list_budgets_endpoint.call_with_http_info(**kwargs) + + def list_cost_anomalies(self, *, start: Union[int, UnsetType]=unset, end: Union[int, UnsetType]=unset, filter: Union[str, UnsetType]=unset, min_anomalous_threshold: Union[str, UnsetType]=unset, min_cost_threshold: Union[str, UnsetType]=unset, dismissal_cause: Union[str, UnsetType]=unset, order_by: Union[str, UnsetType]=unset, order: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, provider_ids: Union[List[str], UnsetType]=unset, ) -> CostAnomaliesResponse: + """List cost anomalies. + + List detected Cloud Cost Management anomalies for the organization. + + :param start: Start time as Unix milliseconds. Defaults to the start of the latest stable seven-day window. + :type start: int, optional + :param end: End time as Unix milliseconds. Defaults to the end of the latest stable seven-day window. + :type end: int, optional + :param filter: Optional JSON object mapping cost tag keys to allowed values, for example ``{"team":["payments"],"env":["prod"]}``. Filters match anomaly dimensions or correlated tags. + :type filter: str, optional + :param min_anomalous_threshold: Minimum absolute anomalous cost change to include. Numeric value; defaults to ``1``. + :type min_anomalous_threshold: str, optional + :param min_cost_threshold: Minimum absolute actual cost to include. Numeric value; defaults to ``0``. + :type min_cost_threshold: str, optional + :param dismissal_cause: Filter by resolution state. Use ``none`` for unresolved anomalies, ``all`` or ``*`` for resolved anomalies, or a comma-separated list of causes. + :type dismissal_cause: str, optional + :param order_by: Sort field. One of ``start_date`` , ``end_date`` , ``duration`` , ``max_cost`` , ``anomalous_cost`` , or ``dismissal_date``. Defaults to ``anomalous_cost``. + :type order_by: str, optional + :param order: Sort direction. One of ``asc`` or ``desc``. Defaults to ``desc``. + :type order: str, optional + :param limit: Maximum number of anomalies to return. Defaults to ``200``. + :type limit: int, optional + :param offset: Pagination offset. Defaults to ``0``. + :type offset: int, optional + :param provider_ids: Optional repeated cloud or SaaS provider filters, such as ``aws`` , ``gcp`` , ``azure`` , ``Oracle`` , ``datadog`` , ``OpenAI`` , or ``Anthropic``. + :type provider_ids: [str], optional + :rtype: CostAnomaliesResponse + """ + kwargs: Dict[str, Any] = {} + if start is not unset: + kwargs["start"] = start + + if end is not unset: + kwargs["end"] = end + + if filter is not unset: + kwargs["filter"] = filter + + if min_anomalous_threshold is not unset: + kwargs["min_anomalous_threshold"] = min_anomalous_threshold + + if min_cost_threshold is not unset: + kwargs["min_cost_threshold"] = min_cost_threshold + + if dismissal_cause is not unset: + kwargs["dismissal_cause"] = dismissal_cause + + if order_by is not unset: + kwargs["order_by"] = order_by + + if order is not unset: + kwargs["order"] = order + + if limit is not unset: + kwargs["limit"] = limit + + if offset is not unset: + kwargs["offset"] = offset + + if provider_ids is not unset: + kwargs["provider_ids"] = provider_ids + + return self._list_cost_anomalies_endpoint.call_with_http_info(**kwargs) + + def list_cost_awscur_configs(self, ) -> AwsCURConfigsResponse: + """List Cloud Cost Management AWS CUR configs. + + List the AWS CUR configs. + + :rtype: AwsCURConfigsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_cost_awscur_configs_endpoint.call_with_http_info(**kwargs) + + def list_cost_azure_uc_configs(self, ) -> AzureUCConfigsResponse: + """List Cloud Cost Management Azure configs. + + List the Azure configs. + + :rtype: AzureUCConfigsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_cost_azure_uc_configs_endpoint.call_with_http_info(**kwargs) + + def list_cost_gcp_usage_cost_configs(self, ) -> GCPUsageCostConfigsResponse: + """List Google Cloud Usage Cost configs. + + List the Google Cloud Usage Cost configs. + + :rtype: GCPUsageCostConfigsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_cost_gcp_usage_cost_configs_endpoint.call_with_http_info(**kwargs) + + def list_cost_oci_configs(self, ) -> OCIConfigsResponse: + """List Cloud Cost Management OCI configs. + + List the OCI configs. + + :rtype: OCIConfigsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_cost_oci_configs_endpoint.call_with_http_info(**kwargs) + + def list_cost_tag_descriptions(self, *, filter_cloud: Union[str, UnsetType]=unset, ) -> CostTagDescriptionsResponse: + """List Cloud Cost Management tag descriptions. + + List Cloud Cost Management tag key descriptions for the organization. Use ``filter[cloud]`` to scope the result to a single cloud provider; when omitted, both cross-cloud defaults and cloud-specific descriptions are returned. + + :param filter_cloud: Filter descriptions to a specific cloud provider (for example, ``aws`` ). Omit to return descriptions across all clouds. + :type filter_cloud: str, optional + :rtype: CostTagDescriptionsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_cloud is not unset: + kwargs["filter_cloud"] = filter_cloud + + return self._list_cost_tag_descriptions_endpoint.call_with_http_info(**kwargs) + + def list_cost_tag_keys(self, *, filter_metric: Union[str, UnsetType]=unset, filter_tags: Union[List[str], UnsetType]=unset, ) -> CostTagKeysResponse: + """List Cloud Cost Management tag keys. + + List Cloud Cost Management tag keys. + + :param filter_metric: The Cloud Cost Management metric to scope the tag keys to. When omitted, returns tag keys across all metrics. + :type filter_metric: str, optional + :param filter_tags: Filter to return only tag keys that appear with the given ``key:value`` tag values. For example, ``filter[tags]=providername:aws`` returns tag keys found on the same cost data, such as ``is_aws_ec2_compute`` and ``aws_instance_type``. + :type filter_tags: [str], optional + :rtype: CostTagKeysResponse + """ + kwargs: Dict[str, Any] = {} + if filter_metric is not unset: + kwargs["filter_metric"] = filter_metric + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + return self._list_cost_tag_keys_endpoint.call_with_http_info(**kwargs) + + def list_cost_tag_key_sources(self, filter_month: str, *, filter_provider: Union[str, UnsetType]=unset, filter_metric: Union[str, UnsetType]=unset, ) -> CostTagKeySourcesResponse: + """List Cloud Cost Management tag sources. + + List Cloud Cost Management tag keys observed for the requested period, along with the origin sources that produced them (for example, ``aws-user-defined`` , ``custom`` ). + + :param filter_month: The month to scope the query to, in ``YYYY-MM`` format. + :type filter_month: str + :param filter_provider: Filter results to a specific provider. Common cloud values are ``aws`` , ``azure`` , ``gcp`` , ``Oracle`` (OCI), and ``custom``. SaaS billing integrations (for example, ``Snowflake`` , ``MongoDB`` , ``Databricks`` ) are also accepted using their display-name string. Values are case-sensitive. + :type filter_provider: str, optional + :param filter_metric: Filter results to tag keys that have data for a specific Cloud Cost Management metric (for example, ``aws.cost.net.amortized`` ). When omitted, all tag keys for the requested period are returned. + :type filter_metric: str, optional + :rtype: CostTagKeySourcesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_month"] = filter_month + + if filter_provider is not unset: + kwargs["filter_provider"] = filter_provider + + if filter_metric is not unset: + kwargs["filter_metric"] = filter_metric + + return self._list_cost_tag_key_sources_endpoint.call_with_http_info(**kwargs) + + def list_cost_tag_metadata(self, filter_month: str, *, filter_provider: Union[str, UnsetType]=unset, filter_metric: Union[str, UnsetType]=unset, filter_tag_key: Union[str, UnsetType]=unset, filter_daily: Union[CostTagMetadataDailyFilter, UnsetType]=unset, ) -> CostTagKeyMetadataResponse: + """List Cloud Cost Management tag key metadata. + + List Cloud Cost Management tag key metadata, including row counts, cost covered, cardinality, and a sample of top tag values per cloud account. Use ``filter[daily]=true`` to return daily rows instead of the default monthly roll-up. + + :param filter_month: The month to scope the query to, in ``YYYY-MM`` format. + :type filter_month: str + :param filter_provider: Filter results to a specific provider. Common cloud values are ``aws`` , ``azure`` , ``gcp`` , ``Oracle`` (OCI), and ``custom``. SaaS billing integrations (for example, ``Snowflake`` , ``MongoDB`` , ``Databricks`` ) are also accepted using their display-name string. Values are case-sensitive. + :type filter_provider: str, optional + :param filter_metric: Filter results to a specific Cloud Cost Management metric (for example, ``aws.cost.net.amortized`` ). When omitted, every available metric for the requested period is returned. + :type filter_metric: str, optional + :param filter_tag_key: Restrict results to a single tag key. + :type filter_tag_key: str, optional + :param filter_daily: When ``true`` , return one row per day with the day in the ``date`` attribute. Defaults to the monthly roll-up when omitted. + :type filter_daily: CostTagMetadataDailyFilter, optional + :rtype: CostTagKeyMetadataResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_month"] = filter_month + + if filter_provider is not unset: + kwargs["filter_provider"] = filter_provider + + if filter_metric is not unset: + kwargs["filter_metric"] = filter_metric + + if filter_tag_key is not unset: + kwargs["filter_tag_key"] = filter_tag_key + + if filter_daily is not unset: + kwargs["filter_daily"] = filter_daily + + return self._list_cost_tag_metadata_endpoint.call_with_http_info(**kwargs) + + def list_cost_tag_metadata_metrics(self, filter_month: str, *, filter_provider: Union[str, UnsetType]=unset, ) -> CostMetricsResponse: + """List available Cloud Cost Management metrics. + + List Cloud Cost Management metrics that have data for the requested period. + + :param filter_month: The month to scope the query to, in ``YYYY-MM`` format. + :type filter_month: str + :param filter_provider: Filter results to a specific provider. Common cloud values are ``aws`` , ``azure`` , ``gcp`` , ``Oracle`` (OCI), and ``custom``. SaaS billing integrations (for example, ``Snowflake`` , ``MongoDB`` , ``Databricks`` ) are also accepted using their display-name string. Values are case-sensitive. + :type filter_provider: str, optional + :rtype: CostMetricsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_month"] = filter_month + + if filter_provider is not unset: + kwargs["filter_provider"] = filter_provider + + return self._list_cost_tag_metadata_metrics_endpoint.call_with_http_info(**kwargs) + + def list_cost_tag_metadata_months(self, filter_provider: str, ) -> CostTagMetadataMonthsResponse: + """List Cloud Cost Management tag metadata months. + + List months that have Cloud Cost Management tag metadata for a given provider, + ordered most-recent first. The response is capped at 36 months. + + :param filter_provider: Provider to scope the query to. Use the value of the ``providername`` tag in CCM + (for example, ``aws`` , ``azure`` , ``gcp`` , ``Oracle`` , ``Confluent Cloud`` , ``Snowflake`` ). + For costs uploaded through the Custom Costs API, use ``custom``. + Values are case-sensitive. + :type filter_provider: str + :rtype: CostTagMetadataMonthsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_provider"] = filter_provider + + return self._list_cost_tag_metadata_months_endpoint.call_with_http_info(**kwargs) + + def list_cost_tag_metadata_orchestrators(self, filter_month: str, *, filter_provider: Union[str, UnsetType]=unset, ) -> CostOrchestratorsResponse: + """List Cloud Cost Management orchestrators. + + List container orchestrators (for example, ``kubernetes`` , ``ecs`` ) detected in Cloud Cost Management data for the requested period. + + :param filter_month: The month to scope the query to, in ``YYYY-MM`` format. + :type filter_month: str + :param filter_provider: Filter results to a specific provider. Common cloud values are ``aws`` , ``azure`` , ``gcp`` , ``Oracle`` (OCI), and ``custom``. SaaS billing integrations (for example, ``Snowflake`` , ``MongoDB`` , ``Databricks`` ) are also accepted using their display-name string. Values are case-sensitive. + :type filter_provider: str, optional + :rtype: CostOrchestratorsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_month"] = filter_month + + if filter_provider is not unset: + kwargs["filter_provider"] = filter_provider + + return self._list_cost_tag_metadata_orchestrators_endpoint.call_with_http_info(**kwargs) + + def list_cost_tags(self, *, filter_metric: Union[str, UnsetType]=unset, filter_match: Union[str, UnsetType]=unset, filter_tags: Union[List[str], UnsetType]=unset, filter_tag_keys: Union[List[str], UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> CostTagsResponse: + """List Cloud Cost Management tags. + + List Cloud Cost Management tags for a given metric. + + :param filter_metric: The Cloud Cost Management metric to scope the tags to. When omitted, returns tags across all metrics. + :type filter_metric: str, optional + :param filter_match: A substring used to filter the returned tags by name. + :type filter_match: str, optional + :param filter_tags: Filter to return only tags that appear with the given ``key:value`` tag values. For example, ``filter[tags]=providername:aws`` returns tags found on the same cost data, such as ``aws_instance_type:t3.micro`` and ``aws_instance_type:m5.large``. + :type filter_tags: [str], optional + :param filter_tag_keys: Restrict the returned tags to those whose key matches one of the given tag keys. + :type filter_tag_keys: [str], optional + :param page_size: Controls the size of the internal tag search scope. This does **not** restrict the number of tags returned in the response. Defaults to 50, maximum 10000. + :type page_size: int, optional + :rtype: CostTagsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_metric is not unset: + kwargs["filter_metric"] = filter_metric + + if filter_match is not unset: + kwargs["filter_match"] = filter_match + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if filter_tag_keys is not unset: + kwargs["filter_tag_keys"] = filter_tag_keys + + if page_size is not unset: + kwargs["page_size"] = page_size + + return self._list_cost_tags_endpoint.call_with_http_info(**kwargs) + + def list_custom_allocation_rules(self, ) -> ArbitraryRuleResponseArray: + """List custom allocation rules. + + List all custom allocation rules - Retrieve a list of all custom allocation rules for the organization + + :rtype: ArbitraryRuleResponseArray + """ + kwargs: Dict[str, Any] = {} + return self._list_custom_allocation_rules_endpoint.call_with_http_info(**kwargs) + + def list_custom_allocation_rules_status(self, ) -> ArbitraryRuleStatusResponseArray: + """List custom allocation rule statuses. + + List the processing status of all custom allocation rules. Returns only the ID and processing status for each rule. + + :rtype: ArbitraryRuleStatusResponseArray + """ + kwargs: Dict[str, Any] = {} + return self._list_custom_allocation_rules_status_endpoint.call_with_http_info(**kwargs) + + def list_custom_costs_files(self, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, filter_status: Union[str, UnsetType]=unset, filter_name: Union[str, UnsetType]=unset, filter_provider: Union[List[str], UnsetType]=unset, sort: Union[str, UnsetType]=unset, ) -> CustomCostsFileListResponse: + """List Custom Costs files. + + List the Custom Costs files. + + :param page_number: Page number for pagination + :type page_number: int, optional + :param page_size: Page size for pagination + :type page_size: int, optional + :param filter_status: Filter by file status + :type filter_status: str, optional + :param filter_name: Filter files by name with case-insensitive substring matching. + :type filter_name: str, optional + :param filter_provider: Filter by provider. + :type filter_provider: [str], optional + :param sort: Sort key with optional descending prefix + :type sort: str, optional + :rtype: CustomCostsFileListResponse + """ + kwargs: Dict[str, Any] = {} + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + if filter_provider is not unset: + kwargs["filter_provider"] = filter_provider + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_custom_costs_files_endpoint.call_with_http_info(**kwargs) + + def list_tag_pipelines_rulesets(self, ) -> RulesetRespArray: + """List tag pipeline rulesets. + + List all tag pipeline rulesets - Retrieve a list of all tag pipeline rulesets for the organization + + :rtype: RulesetRespArray + """ + kwargs: Dict[str, Any] = {} + return self._list_tag_pipelines_rulesets_endpoint.call_with_http_info(**kwargs) + + def list_tag_pipelines_rulesets_status(self, ) -> RulesetStatusRespArray: + """List tag pipeline ruleset statuses. + + List the processing status of all tag pipeline rulesets. Returns only the ID and processing status for each ruleset. + + :rtype: RulesetStatusRespArray + """ + kwargs: Dict[str, Any] = {} + return self._list_tag_pipelines_rulesets_status_endpoint.call_with_http_info(**kwargs) + + def reorder_custom_allocation_rules(self, body: ReorderRuleResourceArray, ) -> None: + """Reorder custom allocation rules. + + Reorder custom allocation rules - Change the execution order of custom allocation rules. + + **Important** : You must provide the **complete list** of all rule IDs in the desired execution order. The API will reorder ALL rules according to the provided sequence. + + Rules are executed in the order specified, with lower indices (earlier in the array) having higher priority. + + **Example** : If you have rules with IDs [123, 456, 789] and want to change order from 123→456→789 to 456→123→789, send: [{"id": "456"}, {"id": "123"}, {"id": "789"}] + + :type body: ReorderRuleResourceArray + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._reorder_custom_allocation_rules_endpoint.call_with_http_info(**kwargs) + + def reorder_tag_pipelines_rulesets(self, body: ReorderRulesetResourceArray, ) -> None: + """Reorder tag pipeline rulesets. + + Reorder tag pipeline rulesets - Change the execution order of tag pipeline rulesets + + :type body: ReorderRulesetResourceArray + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._reorder_tag_pipelines_rulesets_endpoint.call_with_http_info(**kwargs) + + def search_cost_recommendations(self, body: RecommendationsFilterRequest, *, page_size: Union[str, UnsetType]=unset, page_token: Union[str, UnsetType]=unset, ) -> CostRecommendationArray: + """Search cost recommendations. + + List cost recommendations matching a filter, with pagination and sorting. + + :type body: RecommendationsFilterRequest + :param page_size: Number of results per page (1–10000). + :type page_size: str, optional + :param page_token: Pagination token from a previous response. + :type page_token: str, optional + :rtype: CostRecommendationArray + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_token is not unset: + kwargs["page_token"] = page_token + + kwargs["body"] = body + + return self._search_cost_recommendations_endpoint.call_with_http_info(**kwargs) + + def update_cost_account_filters(self, cloud_account_id: int, body: AccountFiltersPatchRequest, ) -> AccountFiltersResponse: + """Update account filters. + + Update the account filters for a cloud account (AWS CUR 1.0/2.0, OCI, and other clouds). + + :param cloud_account_id: Cloud Account id. + :type cloud_account_id: int + :type body: AccountFiltersPatchRequest + :rtype: AccountFiltersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + kwargs["body"] = body + + return self._update_cost_account_filters_endpoint.call_with_http_info(**kwargs) + + def update_cost_awscur_config(self, cloud_account_id: int, body: AwsCURConfigPatchRequest, ) -> AwsCURConfigsResponse: + """Update Cloud Cost Management AWS CUR config. + + Update the status (active/archived) and/or account filtering configuration of an AWS CUR config. + + :param cloud_account_id: Cloud Account id. + :type cloud_account_id: int + :type body: AwsCURConfigPatchRequest + :rtype: AwsCURConfigsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + kwargs["body"] = body + + return self._update_cost_awscur_config_endpoint.call_with_http_info(**kwargs) + + def update_cost_azure_uc_configs(self, cloud_account_id: int, body: AzureUCConfigPatchRequest, ) -> AzureUCConfigPairsResponse: + """Update Cloud Cost Management Azure config. + + Update the status of an Azure config (active/archived). + + :param cloud_account_id: Cloud Account id. + :type cloud_account_id: int + :type body: AzureUCConfigPatchRequest + :rtype: AzureUCConfigPairsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + kwargs["body"] = body + + return self._update_cost_azure_uc_configs_endpoint.call_with_http_info(**kwargs) + + def update_cost_gcp_usage_cost_config(self, cloud_account_id: int, body: GCPUsageCostConfigPatchRequest, ) -> GCPUsageCostConfigResponse: + """Update Google Cloud Usage Cost config. + + Update the status of an Google Cloud Usage Cost config (active/archived). + + :param cloud_account_id: Cloud Account id. + :type cloud_account_id: int + :type body: GCPUsageCostConfigPatchRequest + :rtype: GCPUsageCostConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["cloud_account_id"] = cloud_account_id + + kwargs["body"] = body + + return self._update_cost_gcp_usage_cost_config_endpoint.call_with_http_info(**kwargs) + + def update_custom_allocation_rule(self, rule_id: int, body: ArbitraryCostUpsertRequest, ) -> ArbitraryRuleResponse: + """Update custom allocation rule. + + Update an existing custom allocation rule with new filters and allocation strategy. + + **Strategy Methods:** + + * **PROPORTIONAL/EVEN** : Allocates costs proportionally/evenly based on existing costs. Requires: granularity, allocated_by_tag_keys. Optional: based_on_costs, allocated_by_filters, evaluate_grouped_by_tag_keys, evaluate_grouped_by_filters. + * **PROPORTIONAL_TIMESERIES/EVEN_TIMESERIES** : Allocates based on timeseries data. Requires: granularity, based_on_timeseries. Optional: evaluate_grouped_by_tag_keys. + * **PERCENT** : Allocates fixed percentages to specific tags. Requires: allocated_by (array of percentage allocations). + * **USAGE_METRIC** : Allocates based on usage metrics (implementation varies). + + **Filter Conditions:** + + * Use **value** for single-value conditions: "is", "is not", "contains", "=", "!=", "like", "not like" + * Use **values** for multi-value conditions: "in", "not in" + * Cannot use both value and values simultaneously. + + **Supported operators** : is, is not, contains, in, not in, =, !=, like, not like + + :param rule_id: The unique identifier of the custom allocation rule + :type rule_id: int + :type body: ArbitraryCostUpsertRequest + :rtype: ArbitraryRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_custom_allocation_rule_endpoint.call_with_http_info(**kwargs) + + def update_tag_pipelines_ruleset(self, ruleset_id: str, body: UpdateRulesetRequest, ) -> RulesetResp: + """Update tag pipeline ruleset. + + Update a tag pipeline ruleset - Update an existing tag pipeline ruleset with new rules and configuration + + :param ruleset_id: The unique identifier of the ruleset + :type ruleset_id: str + :type body: UpdateRulesetRequest + :rtype: RulesetResp + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_id"] = ruleset_id + + kwargs["body"] = body + + return self._update_tag_pipelines_ruleset_endpoint.call_with_http_info(**kwargs) + + def upload_custom_costs_file(self, body: List[CustomCostsFileLineItem], ) -> CustomCostsFileUploadResponse: + """Upload Custom Costs file. + + Upload a Custom Costs file. + + :type body: [CustomCostsFileLineItem] + :rtype: CustomCostsFileUploadResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._upload_custom_costs_file_endpoint.call_with_http_info(**kwargs) + + def upsert_budget(self, body: BudgetWithEntries, ) -> BudgetWithEntries: + """Create or update a budget. + + Create a new budget or update an existing one. + + :type body: BudgetWithEntries + :rtype: BudgetWithEntries + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._upsert_budget_endpoint.call_with_http_info(**kwargs) + + def upsert_cost_tag_description_by_key(self, tag_key: str, body: CostTagDescriptionUpsertRequest, ) -> None: + """Upsert a Cloud Cost Management tag description. + + Create or update a Cloud Cost Management tag key description. The new description and optional cloud scoping are supplied in the request body. Omit ``cloud`` to set a cross-cloud default for the tag key. + + :param tag_key: The tag key whose description is being upserted. + :type tag_key: str + :type body: CostTagDescriptionUpsertRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["tag_key"] = tag_key + + kwargs["body"] = body + + return self._upsert_cost_tag_description_by_key_endpoint.call_with_http_info(**kwargs) + + def upsert_custom_forecast(self, body: CustomForecastUpsertRequest, ) -> CustomForecastResponse: + """Create or replace a budget's custom forecast. + + Create or replace the custom forecast for an existing budget. + Pass an empty ``entries`` list to delete the custom forecast for the budget. + + :type body: CustomForecastUpsertRequest + :rtype: CustomForecastResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._upsert_custom_forecast_endpoint.call_with_http_info(**kwargs) + + def validate_budget(self, body: BudgetValidationRequest, ) -> BudgetValidationResponse: + """Validate budget. + + Validate a budget configuration without creating or modifying it + + :type body: BudgetValidationRequest + :rtype: BudgetValidationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._validate_budget_endpoint.call_with_http_info(**kwargs) + + def validate_csv_budget(self, ) -> ValidationResponse: + """Validate CSV budget. + + :rtype: ValidationResponse + """ + kwargs: Dict[str, Any] = {} + return self._validate_csv_budget_endpoint.call_with_http_info(**kwargs) + + def validate_query(self, body: RulesValidateQueryRequest, ) -> RulesValidateQueryResponse: + """Validate query. + + Validate a tag pipeline query - Validate the syntax and structure of a tag pipeline query + + :type body: RulesValidateQueryRequest + :rtype: RulesValidateQueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._validate_query_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/cloud_network_monitoring_api.py b/datadog_api_client/v2/api/cloud_network_monitoring_api.py new file mode 100644 index 0000000000..9553a1a42a --- /dev/null +++ b/datadog_api_client/v2/api/cloud_network_monitoring_api.py @@ -0,0 +1,216 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.single_aggregated_connection_response_array import SingleAggregatedConnectionResponseArray +from datadog_api_client.v2.model.single_aggregated_dns_response_array import SingleAggregatedDnsResponseArray + + +class CloudNetworkMonitoringApi: + """ + The Cloud Network Monitoring API allows you to fetch aggregated connections and DNS traffic with their attributes. See the `Cloud Network Monitoring page `_ and `DNS Monitoring page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_aggregated_connections_endpoint = _Endpoint( + settings={ + "response_type": (SingleAggregatedConnectionResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/network/connections/aggregate", + "operation_id": "get_aggregated_connections", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "_from": { + "openapi_types": (int,), + "attribute": "from", + "location": "query", + }, + "to": { + "openapi_types": (int,), + "attribute": "to", + "location": "query", + }, + "group_by": { + "openapi_types": (str,), + "attribute": "group_by", + "location": "query", + }, + "tags": { + "openapi_types": (str,), + "attribute": "tags", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "limit": { + "validation": { + "inclusive_maximum": 7500, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_aggregated_dns_endpoint = _Endpoint( + settings={ + "response_type": (SingleAggregatedDnsResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/network/dns/aggregate", + "operation_id": "get_aggregated_dns", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "_from": { + "openapi_types": (int,), + "attribute": "from", + "location": "query", + }, + "to": { + "openapi_types": (int,), + "attribute": "to", + "location": "query", + }, + "group_by": { + "openapi_types": (str,), + "attribute": "group_by", + "location": "query", + }, + "tags": { + "openapi_types": (str,), + "attribute": "tags", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "limit": { + "validation": { + "inclusive_maximum": 7500, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_aggregated_connections(self, *, _from: Union[int, UnsetType]=unset, to: Union[int, UnsetType]=unset, group_by: Union[str, UnsetType]=unset, tags: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, ) -> SingleAggregatedConnectionResponseArray: + """Get all aggregated connections. + + Get all aggregated connections. + + :param _from: Unix timestamp (number of seconds since epoch) of the start of the query window. If not provided, the start of the query window is 15 minutes before the ``to`` timestamp. If neither ``from`` nor ``to`` are provided, the query window is ``[now - 15m, now]``. + :type _from: int, optional + :param to: Unix timestamp (number of seconds since epoch) of the end of the query window. If not provided, the end of the query window is the current time. If neither ``from`` nor ``to`` are provided, the query window is ``[now - 15m, now]``. + :type to: int, optional + :param group_by: Comma-separated list of fields to group connections by. The maximum number of group_by(s) is 10. + :type group_by: str, optional + :param tags: Comma-separated list of tags to filter connections by. + :type tags: str, optional + :param query: Free-form search query using AND/OR/NOT operators, wildcards, and parentheses. When provided, takes precedence over the ``tags`` parameter. + :type query: str, optional + :param limit: The number of connections to be returned. The maximum value is 7500. The default is 100. + :type limit: int, optional + :rtype: SingleAggregatedConnectionResponseArray + """ + kwargs: Dict[str, Any] = {} + if _from is not unset: + kwargs["_from"] = _from + + if to is not unset: + kwargs["to"] = to + + if group_by is not unset: + kwargs["group_by"] = group_by + + if tags is not unset: + kwargs["tags"] = tags + + if query is not unset: + kwargs["query"] = query + + if limit is not unset: + kwargs["limit"] = limit + + return self._get_aggregated_connections_endpoint.call_with_http_info(**kwargs) + + def get_aggregated_dns(self, *, _from: Union[int, UnsetType]=unset, to: Union[int, UnsetType]=unset, group_by: Union[str, UnsetType]=unset, tags: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, ) -> SingleAggregatedDnsResponseArray: + """Get all aggregated DNS traffic. + + Get all aggregated DNS traffic. + + :param _from: Unix timestamp (number of seconds since epoch) of the start of the query window. If not provided, the start of the query window is 15 minutes before the ``to`` timestamp. If neither ``from`` nor ``to`` are provided, the query window is ``[now - 15m, now]``. + :type _from: int, optional + :param to: Unix timestamp (number of seconds since epoch) of the end of the query window. If not provided, the end of the query window is the current time. If neither ``from`` nor ``to`` are provided, the query window is ``[now - 15m, now]``. + :type to: int, optional + :param group_by: Comma-separated list of fields to group DNS traffic by. The server side defaults to ``network.dns_query`` if unspecified. ``server_ungrouped`` may be used if groups are not desired. The maximum number of group_by(s) is 10. + :type group_by: str, optional + :param tags: Comma-separated list of tags to filter DNS traffic by. + :type tags: str, optional + :param query: Free-form search query using AND/OR/NOT operators, wildcards, and parentheses. When provided, takes precedence over the ``tags`` parameter. + :type query: str, optional + :param limit: The number of aggregated DNS entries to be returned. The maximum value is 7500. The default is 100. + :type limit: int, optional + :rtype: SingleAggregatedDnsResponseArray + """ + kwargs: Dict[str, Any] = {} + if _from is not unset: + kwargs["_from"] = _from + + if to is not unset: + kwargs["to"] = to + + if group_by is not unset: + kwargs["group_by"] = group_by + + if tags is not unset: + kwargs["tags"] = tags + + if query is not unset: + kwargs["query"] = query + + if limit is not unset: + kwargs["limit"] = limit + + return self._get_aggregated_dns_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/cloudflare_integration_api.py b/datadog_api_client/v2/api/cloudflare_integration_api.py new file mode 100644 index 0000000000..80356170fc --- /dev/null +++ b/datadog_api_client/v2/api/cloudflare_integration_api.py @@ -0,0 +1,219 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.cloudflare_accounts_response import CloudflareAccountsResponse +from datadog_api_client.v2.model.cloudflare_account_response import CloudflareAccountResponse +from datadog_api_client.v2.model.cloudflare_account_create_request import CloudflareAccountCreateRequest +from datadog_api_client.v2.model.cloudflare_account_update_request import CloudflareAccountUpdateRequest + + +class CloudflareIntegrationApi: + """ + Manage your Datadog Cloudflare integration directly through the Datadog API. See the `Cloudflare integration page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_cloudflare_account_endpoint = _Endpoint( + settings={ + "response_type": (CloudflareAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/cloudflare/accounts", + "operation_id": "create_cloudflare_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CloudflareAccountCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_cloudflare_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/cloudflare/accounts/{account_id}", + "operation_id": "delete_cloudflare_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_cloudflare_account_endpoint = _Endpoint( + settings={ + "response_type": (CloudflareAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/cloudflare/accounts/{account_id}", + "operation_id": "get_cloudflare_account", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cloudflare_accounts_endpoint = _Endpoint( + settings={ + "response_type": (CloudflareAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/cloudflare/accounts", + "operation_id": "list_cloudflare_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_cloudflare_account_endpoint = _Endpoint( + settings={ + "response_type": (CloudflareAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/cloudflare/accounts/{account_id}", + "operation_id": "update_cloudflare_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CloudflareAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_cloudflare_account(self, body: CloudflareAccountCreateRequest, ) -> CloudflareAccountResponse: + """Add Cloudflare account. + + Create a Cloudflare account. + + :type body: CloudflareAccountCreateRequest + :rtype: CloudflareAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_cloudflare_account_endpoint.call_with_http_info(**kwargs) + + def delete_cloudflare_account(self, account_id: str, ) -> None: + """Delete Cloudflare account. + + Delete a Cloudflare account. + + :param account_id: None + :type account_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._delete_cloudflare_account_endpoint.call_with_http_info(**kwargs) + + def get_cloudflare_account(self, account_id: str, ) -> CloudflareAccountResponse: + """Get Cloudflare account. + + Get a Cloudflare account. + + :param account_id: None + :type account_id: str + :rtype: CloudflareAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._get_cloudflare_account_endpoint.call_with_http_info(**kwargs) + + def list_cloudflare_accounts(self, ) -> CloudflareAccountsResponse: + """List Cloudflare accounts. + + List Cloudflare accounts. + + :rtype: CloudflareAccountsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_cloudflare_accounts_endpoint.call_with_http_info(**kwargs) + + def update_cloudflare_account(self, account_id: str, body: CloudflareAccountUpdateRequest, ) -> CloudflareAccountResponse: + """Update Cloudflare account. + + Update a Cloudflare account. + + :param account_id: None + :type account_id: str + :type body: CloudflareAccountUpdateRequest + :rtype: CloudflareAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._update_cloudflare_account_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/code_coverage_api.py b/datadog_api_client/v2/api/code_coverage_api.py new file mode 100644 index 0000000000..6d973f9cf8 --- /dev/null +++ b/datadog_api_client/v2/api/code_coverage_api.py @@ -0,0 +1,113 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.coverage_summary_response import CoverageSummaryResponse +from datadog_api_client.v2.model.branch_coverage_summary_request import BranchCoverageSummaryRequest +from datadog_api_client.v2.model.commit_coverage_summary_request import CommitCoverageSummaryRequest + + +class CodeCoverageApi: + """ + Retrieve and analyze code coverage data from Code Coverage. See the `Code Coverage page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_code_coverage_branch_summary_endpoint = _Endpoint( + settings={ + "response_type": (CoverageSummaryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/code-coverage/branch/summary", + "operation_id": "get_code_coverage_branch_summary", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (BranchCoverageSummaryRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_code_coverage_commit_summary_endpoint = _Endpoint( + settings={ + "response_type": (CoverageSummaryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/code-coverage/commit/summary", + "operation_id": "get_code_coverage_commit_summary", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CommitCoverageSummaryRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def get_code_coverage_branch_summary(self, body: BranchCoverageSummaryRequest, ) -> CoverageSummaryResponse: + """Get code coverage summary for a branch. + + Retrieve aggregated code coverage statistics for a specific branch in a repository. + This endpoint provides overall coverage metrics as well as breakdowns by service + and code owner. + + :type body: BranchCoverageSummaryRequest + :rtype: CoverageSummaryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._get_code_coverage_branch_summary_endpoint.call_with_http_info(**kwargs) + + def get_code_coverage_commit_summary(self, body: CommitCoverageSummaryRequest, ) -> CoverageSummaryResponse: + """Get code coverage summary for a commit. + + Retrieve aggregated code coverage statistics for a specific commit in a repository. + This endpoint provides overall coverage metrics as well as breakdowns by service + and code owner. + + The commit SHA must be a 40-character hexadecimal string (SHA-1 hash). + + :type body: CommitCoverageSummaryRequest + :rtype: CoverageSummaryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._get_code_coverage_commit_summary_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/compliance_api.py b/datadog_api_client/v2/api/compliance_api.py new file mode 100644 index 0000000000..efd6816297 --- /dev/null +++ b/datadog_api_client/v2/api/compliance_api.py @@ -0,0 +1,137 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.rule_based_view_response import RuleBasedViewResponse + + +class ComplianceApi: + """ + Datadog Cloud Security Misconfigurations provides aggregated views of + compliance rules and findings across your cloud resources, helping you assess + posture against industry frameworks (such as HIPAA, SOC 2, ISO 27001) and custom + frameworks. Learn more at https://docs.datadoghq.com/security/cloud_security_management/misconfigurations/#maintain-compliance-with-industry-frameworks-and-benchmarks. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_rule_based_view_endpoint = _Endpoint( + settings={ + "response_type": (RuleBasedViewResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/compliance_findings/rule_based_view", + "operation_id": "get_rule_based_view", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "to": { + "required": True, + "openapi_types": (int,), + "attribute": "to", + "location": "query", + }, + "framework": { + "openapi_types": (str,), + "attribute": "framework", + "location": "query", + }, + "version": { + "openapi_types": (str,), + "attribute": "version", + "location": "query", + }, + "query_findings_without_framework_version": { + "openapi_types": (bool,), + "attribute": "query_findings_without_framework_version", + "location": "query", + }, + "include_rules_without_findings": { + "openapi_types": (bool,), + "attribute": "include_rules_without_findings", + "location": "query", + }, + "is_custom": { + "openapi_types": (bool,), + "attribute": "is_custom", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_rule_based_view(self, to: int, *, framework: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, query_findings_without_framework_version: Union[bool, UnsetType]=unset, include_rules_without_findings: Union[bool, UnsetType]=unset, is_custom: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, ) -> RuleBasedViewResponse: + """Get the rule-based view of compliance findings. **Deprecated**. + + **This endpoint is deprecated.** Use the `Security Monitoring - Search Security Findings `_ endpoint instead. + + Get an aggregated view of compliance rules with their pass, fail, and muted finding counts. + Supports filtering by compliance framework, framework version, and additional query filters. + + :param to: Timestamp of the query end, in milliseconds since the Unix epoch. + :type to: int + :param framework: Compliance framework handle to filter rules and findings by. + :type framework: str, optional + :param version: Version of the compliance framework to filter rules and findings by. + :type version: str, optional + :param query_findings_without_framework_version: When ``true`` , returns findings without a ``framework_version`` tag. Used for findings from custom frameworks or those created before framework versioning was introduced. + :type query_findings_without_framework_version: bool, optional + :param include_rules_without_findings: When ``true`` , includes rules in the response that have no associated findings. + :type include_rules_without_findings: bool, optional + :param is_custom: Set to ``true`` when the requested ``framework`` is a custom framework. + :type is_custom: bool, optional + :param query: Additional event-platform filters applied to the underlying findings query. For example, ``scored:true project_id:datadog-prod-us5``. + :type query: str, optional + :rtype: RuleBasedViewResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["to"] = to + + if framework is not unset: + kwargs["framework"] = framework + + if version is not unset: + kwargs["version"] = version + + if query_findings_without_framework_version is not unset: + kwargs["query_findings_without_framework_version"] = query_findings_without_framework_version + + if include_rules_without_findings is not unset: + kwargs["include_rules_without_findings"] = include_rules_without_findings + + if is_custom is not unset: + kwargs["is_custom"] = is_custom + + if query is not unset: + kwargs["query"] = query + + warnings.warn("get_rule_based_view is deprecated", DeprecationWarning, stacklevel=2) + return self._get_rule_based_view_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/confluent_cloud_api.py b/datadog_api_client/v2/api/confluent_cloud_api.py new file mode 100644 index 0000000000..bc1cbd04a3 --- /dev/null +++ b/datadog_api_client/v2/api/confluent_cloud_api.py @@ -0,0 +1,459 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.confluent_accounts_response import ConfluentAccountsResponse +from datadog_api_client.v2.model.confluent_account_response import ConfluentAccountResponse +from datadog_api_client.v2.model.confluent_account_create_request import ConfluentAccountCreateRequest +from datadog_api_client.v2.model.confluent_account_update_request import ConfluentAccountUpdateRequest +from datadog_api_client.v2.model.confluent_resources_response import ConfluentResourcesResponse +from datadog_api_client.v2.model.confluent_resource_response import ConfluentResourceResponse +from datadog_api_client.v2.model.confluent_resource_request import ConfluentResourceRequest + + +class ConfluentCloudApi: + """ + Manage your Datadog Confluent Cloud integration accounts and account resources directly through the Datadog API. See the `Confluent Cloud page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_confluent_account_endpoint = _Endpoint( + settings={ + "response_type": (ConfluentAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts", + "operation_id": "create_confluent_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ConfluentAccountCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_confluent_resource_endpoint = _Endpoint( + settings={ + "response_type": (ConfluentResourceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}/resources", + "operation_id": "create_confluent_resource", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ConfluentResourceRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_confluent_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}", + "operation_id": "delete_confluent_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_confluent_resource_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}/resources/{resource_id}", + "operation_id": "delete_confluent_resource", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_confluent_account_endpoint = _Endpoint( + settings={ + "response_type": (ConfluentAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}", + "operation_id": "get_confluent_account", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_confluent_resource_endpoint = _Endpoint( + settings={ + "response_type": (ConfluentResourceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}/resources/{resource_id}", + "operation_id": "get_confluent_resource", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_confluent_account_endpoint = _Endpoint( + settings={ + "response_type": (ConfluentAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts", + "operation_id": "list_confluent_account", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_confluent_resource_endpoint = _Endpoint( + settings={ + "response_type": (ConfluentResourcesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}/resources", + "operation_id": "list_confluent_resource", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_confluent_account_endpoint = _Endpoint( + settings={ + "response_type": (ConfluentAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}", + "operation_id": "update_confluent_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ConfluentAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_confluent_resource_endpoint = _Endpoint( + settings={ + "response_type": (ConfluentResourceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}/resources/{resource_id}", + "operation_id": "update_confluent_resource", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ConfluentResourceRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_confluent_account(self, body: ConfluentAccountCreateRequest, ) -> ConfluentAccountResponse: + """Add Confluent account. + + Create a Confluent account. + + :param body: Confluent payload + :type body: ConfluentAccountCreateRequest + :rtype: ConfluentAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_confluent_account_endpoint.call_with_http_info(**kwargs) + + def create_confluent_resource(self, account_id: str, body: ConfluentResourceRequest, ) -> ConfluentResourceResponse: + """Add resource to Confluent account. + + Create a Confluent resource for the account associated with the provided ID. + + :param account_id: Confluent Account ID. + :type account_id: str + :param body: Confluent payload + :type body: ConfluentResourceRequest + :rtype: ConfluentResourceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._create_confluent_resource_endpoint.call_with_http_info(**kwargs) + + def delete_confluent_account(self, account_id: str, ) -> None: + """Delete Confluent account. + + Delete a Confluent account with the provided account ID. + + :param account_id: Confluent Account ID. + :type account_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._delete_confluent_account_endpoint.call_with_http_info(**kwargs) + + def delete_confluent_resource(self, account_id: str, resource_id: str, ) -> None: + """Delete resource from Confluent account. + + Delete a Confluent resource with the provided resource id for the account associated with the provided account ID. + + :param account_id: Confluent Account ID. + :type account_id: str + :param resource_id: Confluent Account Resource ID. + :type resource_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["resource_id"] = resource_id + + return self._delete_confluent_resource_endpoint.call_with_http_info(**kwargs) + + def get_confluent_account(self, account_id: str, ) -> ConfluentAccountResponse: + """Get Confluent account. + + Get the Confluent account with the provided account ID. + + :param account_id: Confluent Account ID. + :type account_id: str + :rtype: ConfluentAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._get_confluent_account_endpoint.call_with_http_info(**kwargs) + + def get_confluent_resource(self, account_id: str, resource_id: str, ) -> ConfluentResourceResponse: + """Get resource from Confluent account. + + Get a Confluent resource with the provided resource id for the account associated with the provided account ID. + + :param account_id: Confluent Account ID. + :type account_id: str + :param resource_id: Confluent Account Resource ID. + :type resource_id: str + :rtype: ConfluentResourceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["resource_id"] = resource_id + + return self._get_confluent_resource_endpoint.call_with_http_info(**kwargs) + + def list_confluent_account(self, ) -> ConfluentAccountsResponse: + """List Confluent accounts. + + List Confluent accounts. + + :rtype: ConfluentAccountsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_confluent_account_endpoint.call_with_http_info(**kwargs) + + def list_confluent_resource(self, account_id: str, ) -> ConfluentResourcesResponse: + """List Confluent Account resources. + + Get a Confluent resource for the account associated with the provided ID. + + :param account_id: Confluent Account ID. + :type account_id: str + :rtype: ConfluentResourcesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._list_confluent_resource_endpoint.call_with_http_info(**kwargs) + + def update_confluent_account(self, account_id: str, body: ConfluentAccountUpdateRequest, ) -> ConfluentAccountResponse: + """Update Confluent account. + + Update the Confluent account with the provided account ID. + + :param account_id: Confluent Account ID. + :type account_id: str + :param body: Confluent payload + :type body: ConfluentAccountUpdateRequest + :rtype: ConfluentAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._update_confluent_account_endpoint.call_with_http_info(**kwargs) + + def update_confluent_resource(self, account_id: str, resource_id: str, body: ConfluentResourceRequest, ) -> ConfluentResourceResponse: + """Update resource in Confluent account. + + Update a Confluent resource with the provided resource id for the account associated with the provided account ID. + + :param account_id: Confluent Account ID. + :type account_id: str + :param resource_id: Confluent Account Resource ID. + :type resource_id: str + :param body: Confluent payload + :type body: ConfluentResourceRequest + :rtype: ConfluentResourceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["resource_id"] = resource_id + + kwargs["body"] = body + + return self._update_confluent_resource_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/container_images_api.py b/datadog_api_client/v2/api/container_images_api.py new file mode 100644 index 0000000000..a04a531f5b --- /dev/null +++ b/datadog_api_client/v2/api/container_images_api.py @@ -0,0 +1,166 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.container_images_response import ContainerImagesResponse +from datadog_api_client.v2.model.container_image_item import ContainerImageItem + + +class ContainerImagesApi: + """ + The Container Images API allows you to query Container Image data for your organization. See the `Container Images View page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_container_images_endpoint = _Endpoint( + settings={ + "response_type": (ContainerImagesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/container_images", + "operation_id": "list_container_images", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_tags": { + "openapi_types": (str,), + "attribute": "filter[tags]", + "location": "query", + }, + "group_by": { + "openapi_types": (str,), + "attribute": "group_by", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 10000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def list_container_images(self, *, filter_tags: Union[str, UnsetType]=unset, group_by: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> ContainerImagesResponse: + """Get all Container Images. + + Get all Container Images for your organization. + **Note** : To enrich the data returned by this endpoint with security scans, see the new `api/v2/security/scanned-assets-metadata `_ endpoint. + + :param filter_tags: Comma-separated list of tags to filter Container Images by. + :type filter_tags: str, optional + :param group_by: Comma-separated list of tags to group Container Images by. + :type group_by: str, optional + :param sort: Attribute to sort Container Images by. + :type sort: str, optional + :param page_size: Maximum number of results returned. + :type page_size: int, optional + :param page_cursor: String to query the next page of results. + This key is provided with each valid response from the API in ``meta.pagination.next_cursor``. + :type page_cursor: str, optional + :rtype: ContainerImagesResponse + """ + kwargs: Dict[str, Any] = {} + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if group_by is not unset: + kwargs["group_by"] = group_by + + if sort is not unset: + kwargs["sort"] = sort + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + return self._list_container_images_endpoint.call_with_http_info(**kwargs) + + def list_container_images_with_pagination(self, *, filter_tags: Union[str, UnsetType]=unset, group_by: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[ContainerImageItem]: + """Get all Container Images. + + Provide a paginated version of :meth:`list_container_images`, returning all items. + + :param filter_tags: Comma-separated list of tags to filter Container Images by. + :type filter_tags: str, optional + :param group_by: Comma-separated list of tags to group Container Images by. + :type group_by: str, optional + :param sort: Attribute to sort Container Images by. + :type sort: str, optional + :param page_size: Maximum number of results returned. + :type page_size: int, optional + :param page_cursor: String to query the next page of results. + This key is provided with each valid response from the API in ``meta.pagination.next_cursor``. + :type page_cursor: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[ContainerImageItem] + """ + kwargs: Dict[str, Any] = {} + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if group_by is not unset: + kwargs["group_by"] = group_by + + if sort is not unset: + kwargs["sort"] = sort + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + local_page_size = get_attribute_from_path(kwargs, "page_size", 1000) + endpoint = self._list_container_images_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.pagination.next_cursor", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/containers_api.py b/datadog_api_client/v2/api/containers_api.py new file mode 100644 index 0000000000..bf5316a789 --- /dev/null +++ b/datadog_api_client/v2/api/containers_api.py @@ -0,0 +1,165 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.containers_response import ContainersResponse +from datadog_api_client.v2.model.container_item import ContainerItem + + +class ContainersApi: + """ + The Containers API allows you to query container data for your organization. See the `Container Monitoring page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_containers_endpoint = _Endpoint( + settings={ + "response_type": (ContainersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/containers", + "operation_id": "list_containers", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_tags": { + "openapi_types": (str,), + "attribute": "filter[tags]", + "location": "query", + }, + "group_by": { + "openapi_types": (str,), + "attribute": "group_by", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 10000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def list_containers(self, *, filter_tags: Union[str, UnsetType]=unset, group_by: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> ContainersResponse: + """Get All Containers. + + Get all containers for your organization. + + :param filter_tags: Comma-separated list of tags to filter containers by. + :type filter_tags: str, optional + :param group_by: Comma-separated list of tags to group containers by. + :type group_by: str, optional + :param sort: Attribute to sort containers by. + :type sort: str, optional + :param page_size: Maximum number of results returned. + :type page_size: int, optional + :param page_cursor: String to query the next page of results. + This key is provided with each valid response from the API in ``meta.pagination.next_cursor``. + :type page_cursor: str, optional + :rtype: ContainersResponse + """ + kwargs: Dict[str, Any] = {} + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if group_by is not unset: + kwargs["group_by"] = group_by + + if sort is not unset: + kwargs["sort"] = sort + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + return self._list_containers_endpoint.call_with_http_info(**kwargs) + + def list_containers_with_pagination(self, *, filter_tags: Union[str, UnsetType]=unset, group_by: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[ContainerItem]: + """Get All Containers. + + Provide a paginated version of :meth:`list_containers`, returning all items. + + :param filter_tags: Comma-separated list of tags to filter containers by. + :type filter_tags: str, optional + :param group_by: Comma-separated list of tags to group containers by. + :type group_by: str, optional + :param sort: Attribute to sort containers by. + :type sort: str, optional + :param page_size: Maximum number of results returned. + :type page_size: int, optional + :param page_cursor: String to query the next page of results. + This key is provided with each valid response from the API in ``meta.pagination.next_cursor``. + :type page_cursor: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[ContainerItem] + """ + kwargs: Dict[str, Any] = {} + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if group_by is not unset: + kwargs["group_by"] = group_by + + if sort is not unset: + kwargs["sort"] = sort + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + local_page_size = get_attribute_from_path(kwargs, "page_size", 1000) + endpoint = self._list_containers_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.pagination.next_cursor", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/csm_agents_api.py b/datadog_api_client/v2/api/csm_agents_api.py new file mode 100644 index 0000000000..aa6daa7d97 --- /dev/null +++ b/datadog_api_client/v2/api/csm_agents_api.py @@ -0,0 +1,187 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.csm_agents_response import CsmAgentsResponse +from datadog_api_client.v2.model.order_direction import OrderDirection + + +class CSMAgentsApi: + """ + Datadog Cloud Security Management (CSM) delivers real-time threat detection + and continuous configuration audits across your entire cloud infrastructure, + all in a unified view for seamless collaboration and faster remediation. + Go to https://docs.datadoghq.com/security/cloud_security_management to learn more + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_all_csm_agents_endpoint = _Endpoint( + settings={ + "response_type": (CsmAgentsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/onboarding/agents", + "operation_id": "list_all_csm_agents", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page": { + "validation": { + "inclusive_maximum": 1000000, + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "size": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "size", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "order_direction": { + "openapi_types": (OrderDirection,), + "attribute": "order_direction", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_all_csm_serverless_agents_endpoint = _Endpoint( + settings={ + "response_type": (CsmAgentsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/onboarding/serverless/agents", + "operation_id": "list_all_csm_serverless_agents", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page": { + "validation": { + "inclusive_maximum": 1000000, + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "size": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "size", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "order_direction": { + "openapi_types": (OrderDirection,), + "attribute": "order_direction", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def list_all_csm_agents(self, *, page: Union[int, UnsetType]=unset, size: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, order_direction: Union[OrderDirection, UnsetType]=unset, ) -> CsmAgentsResponse: + """Get all CSM Agents. + + Get the list of all CSM Agents running on your hosts and containers. + + :param page: The page index for pagination (zero-based). + :type page: int, optional + :param size: The number of items to include in a single page. + :type size: int, optional + :param query: A search query string to filter results (for example, ``hostname:COMP-T2H4J27423`` ). + :type query: str, optional + :param order_direction: The sort direction for results. Use ``asc`` for ascending or ``desc`` for descending. + :type order_direction: OrderDirection, optional + :rtype: CsmAgentsResponse + """ + kwargs: Dict[str, Any] = {} + if page is not unset: + kwargs["page"] = page + + if size is not unset: + kwargs["size"] = size + + if query is not unset: + kwargs["query"] = query + + if order_direction is not unset: + kwargs["order_direction"] = order_direction + + return self._list_all_csm_agents_endpoint.call_with_http_info(**kwargs) + + def list_all_csm_serverless_agents(self, *, page: Union[int, UnsetType]=unset, size: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, order_direction: Union[OrderDirection, UnsetType]=unset, ) -> CsmAgentsResponse: + """Get all CSM Serverless Agents. + + Get the list of all CSM Serverless Agents running on your hosts and containers. + + :param page: The page index for pagination (zero-based). + :type page: int, optional + :param size: The number of items to include in a single page. + :type size: int, optional + :param query: A search query string to filter results (for example, ``hostname:COMP-T2H4J27423`` ). + :type query: str, optional + :param order_direction: The sort direction for results. Use ``asc`` for ascending or ``desc`` for descending. + :type order_direction: OrderDirection, optional + :rtype: CsmAgentsResponse + """ + kwargs: Dict[str, Any] = {} + if page is not unset: + kwargs["page"] = page + + if size is not unset: + kwargs["size"] = size + + if query is not unset: + kwargs["query"] = query + + if order_direction is not unset: + kwargs["order_direction"] = order_direction + + return self._list_all_csm_serverless_agents_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/csm_coverage_analysis_api.py b/datadog_api_client/v2/api/csm_coverage_analysis_api.py new file mode 100644 index 0000000000..3fa52a4aec --- /dev/null +++ b/datadog_api_client/v2/api/csm_coverage_analysis_api.py @@ -0,0 +1,125 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.csm_cloud_accounts_coverage_analysis_response import CsmCloudAccountsCoverageAnalysisResponse +from datadog_api_client.v2.model.csm_hosts_and_containers_coverage_analysis_response import CsmHostsAndContainersCoverageAnalysisResponse +from datadog_api_client.v2.model.csm_serverless_coverage_analysis_response import CsmServerlessCoverageAnalysisResponse + + +class CSMCoverageAnalysisApi: + """ + Datadog Cloud Security Management (CSM) delivers real-time threat detection + and continuous configuration audits across your entire cloud infrastructure, + all in a unified view for seamless collaboration and faster remediation. + Go to https://docs.datadoghq.com/security/cloud_security_management to learn more. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_csm_cloud_accounts_coverage_analysis_endpoint = _Endpoint( + settings={ + "response_type": (CsmCloudAccountsCoverageAnalysisResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/onboarding/coverage_analysis/cloud_accounts", + "operation_id": "get_csm_cloud_accounts_coverage_analysis", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_csm_hosts_and_containers_coverage_analysis_endpoint = _Endpoint( + settings={ + "response_type": (CsmHostsAndContainersCoverageAnalysisResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/onboarding/coverage_analysis/hosts_and_containers", + "operation_id": "get_csm_hosts_and_containers_coverage_analysis", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_csm_serverless_coverage_analysis_endpoint = _Endpoint( + settings={ + "response_type": (CsmServerlessCoverageAnalysisResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/onboarding/coverage_analysis/serverless", + "operation_id": "get_csm_serverless_coverage_analysis", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_csm_cloud_accounts_coverage_analysis(self, ) -> CsmCloudAccountsCoverageAnalysisResponse: + """Get the CSM Cloud Accounts Coverage Analysis. + + Get the CSM Coverage Analysis of your Cloud Accounts. + This is calculated based on the number of your Cloud Accounts that are + scanned for security issues. + + :rtype: CsmCloudAccountsCoverageAnalysisResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_csm_cloud_accounts_coverage_analysis_endpoint.call_with_http_info(**kwargs) + + def get_csm_hosts_and_containers_coverage_analysis(self, ) -> CsmHostsAndContainersCoverageAnalysisResponse: + """Get the CSM Hosts and Containers Coverage Analysis. + + Get the CSM Coverage Analysis of your Hosts and Containers. + This is calculated based on the number of agents running on your Hosts + and Containers with CSM feature(s) enabled. + + :rtype: CsmHostsAndContainersCoverageAnalysisResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_csm_hosts_and_containers_coverage_analysis_endpoint.call_with_http_info(**kwargs) + + def get_csm_serverless_coverage_analysis(self, ) -> CsmServerlessCoverageAnalysisResponse: + """Get the CSM Serverless Coverage Analysis. + + Get the CSM Coverage Analysis of your Serverless Resources. + This is calculated based on the number of agents running on your Serverless + Resources with CSM feature(s) enabled. + + :rtype: CsmServerlessCoverageAnalysisResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_csm_serverless_coverage_analysis_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/csm_ownership_api.py b/datadog_api_client/v2/api/csm_ownership_api.py new file mode 100644 index 0000000000..b0d07c2ad6 --- /dev/null +++ b/datadog_api_client/v2/api/csm_ownership_api.py @@ -0,0 +1,483 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.ownership_settings_response import OwnershipSettingsResponse +from datadog_api_client.v2.model.ownership_settings_request import OwnershipSettingsRequest +from datadog_api_client.v2.model.ownership_untagged_findings_response import OwnershipUntaggedFindingsResponse +from datadog_api_client.v2.model.ownership_inference_list_response import OwnershipInferenceListResponse +from datadog_api_client.v2.model.ownership_history_response import OwnershipHistoryResponse +from datadog_api_client.v2.model.ownership_inference_response import OwnershipInferenceResponse +from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType +from datadog_api_client.v2.model.ownership_evidence_response import OwnershipEvidenceResponse +from datadog_api_client.v2.model.ownership_feedback_response import OwnershipFeedbackResponse +from datadog_api_client.v2.model.ownership_feedback_request import OwnershipFeedbackRequest + + +class CSMOwnershipApi: + """ + Datadog Cloud Security Management (CSM) Ownership infers the most likely owner + for a cloud resource by combining ownership signals from across the platform, + and lets you review the inference, inspect its evidence, and submit feedback to + persist, override, or correct the inferred owner. + For more information, see `Cloud Security Management `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_ownership_feedback_endpoint = _Endpoint( + settings={ + "response_type": (OwnershipFeedbackResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/ownership/{resource_id}/{owner_type}/feedback", + "operation_id": "create_ownership_feedback", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + "owner_type": { + "required": True, + "openapi_types": (OwnershipOwnerType,), + "attribute": "owner_type", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OwnershipFeedbackRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_ownership_evidence_endpoint = _Endpoint( + settings={ + "response_type": (OwnershipEvidenceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/ownership/{resource_id}/{owner_type}/evidence", + "operation_id": "get_ownership_evidence", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + "owner_type": { + "required": True, + "openapi_types": (OwnershipOwnerType,), + "attribute": "owner_type", + "location": "path", + }, + "if_none_match": { + "openapi_types": (str,), + "attribute": "If-None-Match", + "location": "header", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_ownership_inference_endpoint = _Endpoint( + settings={ + "response_type": (OwnershipInferenceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/ownership/{resource_id}/{owner_type}", + "operation_id": "get_ownership_inference", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + "owner_type": { + "required": True, + "openapi_types": (OwnershipOwnerType,), + "attribute": "owner_type", + "location": "path", + }, + "if_none_match": { + "openapi_types": (str,), + "attribute": "If-None-Match", + "location": "header", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_ownership_settings_endpoint = _Endpoint( + settings={ + "response_type": (OwnershipSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/ownership/settings", + "operation_id": "get_ownership_settings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_ownership_untagged_findings_endpoint = _Endpoint( + settings={ + "response_type": (OwnershipUntaggedFindingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/ownership/settings/untagged", + "operation_id": "get_ownership_untagged_findings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_ownership_history_endpoint = _Endpoint( + settings={ + "response_type": (OwnershipHistoryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/ownership/{resource_id}/history", + "operation_id": "list_ownership_history", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + "cursor": { + "openapi_types": (str,), + "attribute": "cursor", + "location": "query", + }, + "limit": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_ownership_history_by_owner_type_endpoint = _Endpoint( + settings={ + "response_type": (OwnershipHistoryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/ownership/{resource_id}/{owner_type}/history", + "operation_id": "list_ownership_history_by_owner_type", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + "owner_type": { + "required": True, + "openapi_types": (OwnershipOwnerType,), + "attribute": "owner_type", + "location": "path", + }, + "cursor": { + "openapi_types": (str,), + "attribute": "cursor", + "location": "query", + }, + "limit": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_ownership_inferences_endpoint = _Endpoint( + settings={ + "response_type": (OwnershipInferenceListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/ownership/{resource_id}", + "operation_id": "list_ownership_inferences", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._post_ownership_settings_endpoint = _Endpoint( + settings={ + "response_type": (OwnershipSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/ownership/settings", + "operation_id": "post_ownership_settings", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OwnershipSettingsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_ownership_feedback(self, resource_id: str, owner_type: OwnershipOwnerType, body: OwnershipFeedbackRequest, ) -> OwnershipFeedbackResponse: + """Submit feedback on an ownership inference. + + Submit feedback on the current ownership inference for a resource and owner type. Valid actions are ``confirm`` , ``reject`` , ``correct`` , and ``persist``. + + The request must include the current inference ``checksum`` in ``inference_checksum``. If the checksum does not match the current inference state, the endpoint returns ``409 Conflict``. + + When ``action`` is ``correct`` , ``corrected_owner_handle`` and ``corrected_owner_type`` are required. + + :param resource_id: The identifier of the resource that the feedback applies to. + :type resource_id: str + :param owner_type: The type of owner that the feedback applies to. + :type owner_type: OwnershipOwnerType + :type body: OwnershipFeedbackRequest + :rtype: OwnershipFeedbackResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_id"] = resource_id + + kwargs["owner_type"] = owner_type + + kwargs["body"] = body + + return self._create_ownership_feedback_endpoint.call_with_http_info(**kwargs) + + def get_ownership_evidence(self, resource_id: str, owner_type: OwnershipOwnerType, *, if_none_match: Union[str, UnsetType]=unset, ) -> OwnershipEvidenceResponse: + """Get the evidence for an ownership inference. + + Get the evidence versions backing the current ownership inference for a resource and owner type. + + This endpoint supports weak ETag caching. Pass the previously returned ``ETag`` value in the ``If-None-Match`` request header to receive a ``304 Not Modified`` response when the evidence has not changed. + + :param resource_id: The identifier of the resource to retrieve evidence for. + :type resource_id: str + :param owner_type: The owner type of the inference to retrieve evidence for. + :type owner_type: OwnershipOwnerType + :param if_none_match: A previously returned weak ``ETag`` value. When supplied and the evidence has not changed, the endpoint returns ``304 Not Modified``. + :type if_none_match: str, optional + :rtype: OwnershipEvidenceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_id"] = resource_id + + kwargs["owner_type"] = owner_type + + if if_none_match is not unset: + kwargs["if_none_match"] = if_none_match + + return self._get_ownership_evidence_endpoint.call_with_http_info(**kwargs) + + def get_ownership_inference(self, resource_id: str, owner_type: OwnershipOwnerType, *, if_none_match: Union[str, UnsetType]=unset, ) -> OwnershipInferenceResponse: + """Get an ownership inference by owner type. + + Get the current ownership inference for a resource for a specific owner type. + + This endpoint supports ETag-based caching. Pass the previously returned ``ETag`` value in the ``If-None-Match`` request header to receive a ``304 Not Modified`` response when the inference has not changed. + + :param resource_id: The identifier of the resource to retrieve the ownership inference for. + :type resource_id: str + :param owner_type: The owner type of the inference to retrieve. + :type owner_type: OwnershipOwnerType + :param if_none_match: A previously returned ``ETag`` value. When supplied and the resource has not changed, the endpoint returns ``304 Not Modified``. + :type if_none_match: str, optional + :rtype: OwnershipInferenceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_id"] = resource_id + + kwargs["owner_type"] = owner_type + + if if_none_match is not unset: + kwargs["if_none_match"] = if_none_match + + return self._get_ownership_inference_endpoint.call_with_http_info(**kwargs) + + def get_ownership_settings(self, ) -> OwnershipSettingsResponse: + """Get ownership settings for the org. + + Get ownership settings for the org. When settings are unset, the API returns the default opt-out configuration with ``auto_tag`` set to ``true`` and ``confidence_level`` set to ``high``. + + :rtype: OwnershipSettingsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_ownership_settings_endpoint.call_with_http_info(**kwargs) + + def get_ownership_untagged_findings(self, ) -> OwnershipUntaggedFindingsResponse: + """Count untagged findings by ownership confidence. + + Count findings with no team tag, grouped by ownership confidence level. + + :rtype: OwnershipUntaggedFindingsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_ownership_untagged_findings_endpoint.call_with_http_info(**kwargs) + + def list_ownership_history(self, resource_id: str, *, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, ) -> OwnershipHistoryResponse: + """List ownership inference history for a resource. + + List inference history entries for a resource across all owner types, ordered from most recent to oldest. Uses cursor-based pagination. + + :param resource_id: The identifier of the resource to retrieve inference history for. + :type resource_id: str + :param cursor: An opaque, base64-encoded cursor token returned by a previous call in ``pagination.next_cursor``. Omit to fetch the first page. + :type cursor: str, optional + :param limit: The maximum number of history entries to return per page. + :type limit: int, optional + :rtype: OwnershipHistoryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_id"] = resource_id + + if cursor is not unset: + kwargs["cursor"] = cursor + + if limit is not unset: + kwargs["limit"] = limit + + return self._list_ownership_history_endpoint.call_with_http_info(**kwargs) + + def list_ownership_history_by_owner_type(self, resource_id: str, owner_type: OwnershipOwnerType, *, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, ) -> OwnershipHistoryResponse: + """List ownership history by owner type. + + List inference history entries for a resource filtered by owner type, ordered from most recent to oldest. Uses cursor-based pagination. + + :param resource_id: The identifier of the resource to retrieve inference history for. + :type resource_id: str + :param owner_type: The owner type to filter history by. + :type owner_type: OwnershipOwnerType + :param cursor: An opaque, base64-encoded cursor token returned by a previous call in ``pagination.next_cursor``. Omit to fetch the first page. + :type cursor: str, optional + :param limit: The maximum number of history entries to return per page. + :type limit: int, optional + :rtype: OwnershipHistoryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_id"] = resource_id + + kwargs["owner_type"] = owner_type + + if cursor is not unset: + kwargs["cursor"] = cursor + + if limit is not unset: + kwargs["limit"] = limit + + return self._list_ownership_history_by_owner_type_endpoint.call_with_http_info(**kwargs) + + def list_ownership_inferences(self, resource_id: str, ) -> OwnershipInferenceListResponse: + """List ownership inferences for a resource. + + Get all current ownership inferences for a resource, one per owner type ( ``user`` , ``team`` , ``service`` , ``unknown`` ). + + :param resource_id: The identifier of the resource to retrieve ownership inferences for. + :type resource_id: str + :rtype: OwnershipInferenceListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_id"] = resource_id + + return self._list_ownership_inferences_endpoint.call_with_http_info(**kwargs) + + def post_ownership_settings(self, body: OwnershipSettingsRequest, ) -> OwnershipSettingsResponse: + """Update ownership settings for the org. + + Update ownership settings for the org. + + :type body: OwnershipSettingsRequest + :rtype: OwnershipSettingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._post_ownership_settings_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/csm_settings_api.py b/datadog_api_client/v2/api/csm_settings_api.py new file mode 100644 index 0000000000..56dd3bcd23 --- /dev/null +++ b/datadog_api_client/v2/api/csm_settings_api.py @@ -0,0 +1,337 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.csm_agentless_hosts_response import CsmAgentlessHostsResponse +from datadog_api_client.v2.model.csm_host_facet_info_response import CsmHostFacetInfoResponse +from datadog_api_client.v2.model.csm_agentless_host_facets_response import CsmAgentlessHostFacetsResponse +from datadog_api_client.v2.model.csm_unified_hosts_response import CsmUnifiedHostsResponse +from datadog_api_client.v2.model.csm_unified_host_facets_response import CsmUnifiedHostFacetsResponse + + +class CSMSettingsApi: + """ + Datadog Cloud Security Management (CSM) Settings APIs allow you to list and filter + your cloud hosts monitored by CSM, covering both agentless and agent-based discovery. + For more information, see `Cloud Security Management `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_csm_agentless_host_facet_info_endpoint = _Endpoint( + settings={ + "response_type": (CsmHostFacetInfoResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/settings/agentless_hosts/facet_info", + "operation_id": "get_csm_agentless_host_facet_info", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "facet": { + "required": True, + "openapi_types": (str,), + "attribute": "facet", + "location": "query", + }, + "search": { + "openapi_types": (str,), + "attribute": "search", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_csm_unified_host_facet_info_endpoint = _Endpoint( + settings={ + "response_type": (CsmHostFacetInfoResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/settings/hosts/facet_info", + "operation_id": "get_csm_unified_host_facet_info", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "facet": { + "required": True, + "openapi_types": (str,), + "attribute": "facet", + "location": "query", + }, + "search": { + "openapi_types": (str,), + "attribute": "search", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_csm_agentless_host_facets_endpoint = _Endpoint( + settings={ + "response_type": (CsmAgentlessHostFacetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/settings/agentless_hosts/facets", + "operation_id": "list_csm_agentless_host_facets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_csm_agentless_hosts_endpoint = _Endpoint( + settings={ + "response_type": (CsmAgentlessHostsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/settings/agentless_hosts", + "operation_id": "list_csm_agentless_hosts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page": { + "validation": { + "inclusive_maximum": 1000000, + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "size": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "size", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_csm_unified_host_facets_endpoint = _Endpoint( + settings={ + "response_type": (CsmUnifiedHostFacetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/settings/hosts/facets", + "operation_id": "list_csm_unified_host_facets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_csm_unified_hosts_endpoint = _Endpoint( + settings={ + "response_type": (CsmUnifiedHostsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/csm/settings/hosts", + "operation_id": "list_csm_unified_hosts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page": { + "validation": { + "inclusive_maximum": 1000000, + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "size": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "size", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_csm_agentless_host_facet_info(self, facet: str, *, search: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, ) -> CsmHostFacetInfoResponse: + """Get agentless host facet info. + + Get the value distribution for a specific agentless host facet, with optional search and filtering. + + :param facet: The facet identifier to retrieve value distribution for. Valid values are ``resource_name`` , ``account_id`` , ``resource_type`` , ``cloud_provider`` , ``has_vulnerability_scanning`` , and ``has_posture_management``. + :type facet: str + :param search: A search string to filter the facet values. + :type search: str, optional + :param query: A filter query to scope the facet value counts. + :type query: str, optional + :rtype: CsmHostFacetInfoResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["facet"] = facet + + if search is not unset: + kwargs["search"] = search + + if query is not unset: + kwargs["query"] = query + + return self._get_csm_agentless_host_facet_info_endpoint.call_with_http_info(**kwargs) + + def get_csm_unified_host_facet_info(self, facet: str, *, search: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, ) -> CsmHostFacetInfoResponse: + """Get unified host facet info. + + Get the value distribution for a specific unified host facet, with optional search and filtering. + + :param facet: The facet identifier to retrieve value distribution for. Valid values include ``resource_name`` , ``account_id`` , ``resource_type`` , ``cloud_provider`` , ``agentless_vulnerability_scanning`` , ``agentless_posture_management`` , ``hostname`` , ``agent_version`` , ``os`` , ``cluster_name`` , ``agent_posture_management`` , ``agent_cws_enabled`` , ``agent_csm_vm_hosts_enabled`` , and ``agent_csm_vm_containers_enabled``. + :type facet: str + :param search: A search string to filter the facet values. + :type search: str, optional + :param query: A filter query to scope the facet value counts. + :type query: str, optional + :rtype: CsmHostFacetInfoResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["facet"] = facet + + if search is not unset: + kwargs["search"] = search + + if query is not unset: + kwargs["query"] = query + + return self._get_csm_unified_host_facet_info_endpoint.call_with_http_info(**kwargs) + + def list_csm_agentless_host_facets(self, ) -> CsmAgentlessHostFacetsResponse: + """List agentless host facets. + + Get the list of available facets for filtering agentless hosts. + + :rtype: CsmAgentlessHostFacetsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_csm_agentless_host_facets_endpoint.call_with_http_info(**kwargs) + + def list_csm_agentless_hosts(self, *, page: Union[int, UnsetType]=unset, size: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, ) -> CsmAgentlessHostsResponse: + """List agentless hosts. + + Get the list of agentless hosts for CSM, with optional pagination and filtering. + + :param page: The page index for pagination (zero-based). + :type page: int, optional + :param size: The number of agentless hosts to return per page. + :type size: int, optional + :param query: A search query string to filter agentless hosts. + :type query: str, optional + :rtype: CsmAgentlessHostsResponse + """ + kwargs: Dict[str, Any] = {} + if page is not unset: + kwargs["page"] = page + + if size is not unset: + kwargs["size"] = size + + if query is not unset: + kwargs["query"] = query + + return self._list_csm_agentless_hosts_endpoint.call_with_http_info(**kwargs) + + def list_csm_unified_host_facets(self, ) -> CsmUnifiedHostFacetsResponse: + """List unified host facets. + + Get the list of available facets for filtering unified hosts. + + :rtype: CsmUnifiedHostFacetsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_csm_unified_host_facets_endpoint.call_with_http_info(**kwargs) + + def list_csm_unified_hosts(self, *, page: Union[int, UnsetType]=unset, size: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, ) -> CsmUnifiedHostsResponse: + """List unified hosts. + + Get the list of unified hosts for CSM, combining agent and agentless host data, with optional pagination and filtering. + + :param page: The page index for pagination (zero-based). + :type page: int, optional + :param size: The number of hosts to return per page. + :type size: int, optional + :param query: A search query string to filter unified hosts. + :type query: str, optional + :rtype: CsmUnifiedHostsResponse + """ + kwargs: Dict[str, Any] = {} + if page is not unset: + kwargs["page"] = page + + if size is not unset: + kwargs["size"] = size + + if query is not unset: + kwargs["query"] = query + + return self._list_csm_unified_hosts_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/csm_threats_api.py b/datadog_api_client/v2/api/csm_threats_api.py new file mode 100644 index 0000000000..0717e8c320 --- /dev/null +++ b/datadog_api_client/v2/api/csm_threats_api.py @@ -0,0 +1,732 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.cloud_workload_security_agent_rules_list_response import CloudWorkloadSecurityAgentRulesListResponse +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_response import CloudWorkloadSecurityAgentRuleResponse +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_create_request import CloudWorkloadSecurityAgentRuleCreateRequest +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_update_request import CloudWorkloadSecurityAgentRuleUpdateRequest +from datadog_api_client.v2.model.cloud_workload_security_agent_policies_list_response import CloudWorkloadSecurityAgentPoliciesListResponse +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_response import CloudWorkloadSecurityAgentPolicyResponse +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_create_request import CloudWorkloadSecurityAgentPolicyCreateRequest +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_update_request import CloudWorkloadSecurityAgentPolicyUpdateRequest + + +class CSMThreatsApi: + """ + Workload Protection monitors file, network, and process activity across your environment to detect real-time threats to your infrastructure. See `Workload Protection `_ for more information on setting up Workload Protection. + + **Note** : These endpoints are split based on whether you are using the US1-FED site or not. Please reference the specific resource for the site you are using. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_cloud_workload_security_agent_rule_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules", + "operation_id": "create_cloud_workload_security_agent_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CloudWorkloadSecurityAgentRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_csm_threats_agent_policy_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/policy", + "operation_id": "create_csm_threats_agent_policy", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CloudWorkloadSecurityAgentPolicyCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_csm_threats_agent_rule_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/agent_rules", + "operation_id": "create_csm_threats_agent_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CloudWorkloadSecurityAgentRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_cloud_workload_security_agent_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}", + "operation_id": "delete_cloud_workload_security_agent_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "agent_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "agent_rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_csm_threats_agent_policy_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/policy/{policy_id}", + "operation_id": "delete_csm_threats_agent_policy", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_csm_threats_agent_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/agent_rules/{agent_rule_id}", + "operation_id": "delete_csm_threats_agent_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "agent_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "agent_rule_id", + "location": "path", + }, + "policy_id": { + "openapi_types": (str,), + "attribute": "policy_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._download_cloud_workload_policy_file_endpoint = _Endpoint( + settings={ + "response_type": (file_type,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/cloud_workload/policy/download", + "operation_id": "download_cloud_workload_policy_file", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/yaml", "application/json"], + }, + api_client=api_client, + ) + + self._download_csm_threats_policy_endpoint = _Endpoint( + settings={ + "response_type": (file_type,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/policy/download", + "operation_id": "download_csm_threats_policy", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/zip", "application/json"], + }, + api_client=api_client, + ) + + self._get_cloud_workload_security_agent_rule_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}", + "operation_id": "get_cloud_workload_security_agent_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "agent_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "agent_rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_csm_threats_agent_policy_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/policy/{policy_id}", + "operation_id": "get_csm_threats_agent_policy", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_csm_threats_agent_rule_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/agent_rules/{agent_rule_id}", + "operation_id": "get_csm_threats_agent_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "agent_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "agent_rule_id", + "location": "path", + }, + "policy_id": { + "openapi_types": (str,), + "attribute": "policy_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_cloud_workload_security_agent_rules_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentRulesListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules", + "operation_id": "list_cloud_workload_security_agent_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_csm_threats_agent_policies_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentPoliciesListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/policy", + "operation_id": "list_csm_threats_agent_policies", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_csm_threats_agent_rules_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentRulesListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/agent_rules", + "operation_id": "list_csm_threats_agent_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "policy_id": { + "openapi_types": (str,), + "attribute": "policy_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_cloud_workload_security_agent_rule_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}", + "operation_id": "update_cloud_workload_security_agent_rule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "agent_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "agent_rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CloudWorkloadSecurityAgentRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_csm_threats_agent_policy_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/policy/{policy_id}", + "operation_id": "update_csm_threats_agent_policy", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CloudWorkloadSecurityAgentPolicyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_csm_threats_agent_rule_endpoint = _Endpoint( + settings={ + "response_type": (CloudWorkloadSecurityAgentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/cws/agent_rules/{agent_rule_id}", + "operation_id": "update_csm_threats_agent_rule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "agent_rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "agent_rule_id", + "location": "path", + }, + "policy_id": { + "openapi_types": (str,), + "attribute": "policy_id", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (CloudWorkloadSecurityAgentRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_cloud_workload_security_agent_rule(self, body: CloudWorkloadSecurityAgentRuleCreateRequest, ) -> CloudWorkloadSecurityAgentRuleResponse: + """Create a Workload Protection agent rule (US1-FED). + + Create a new agent rule with the given parameters. + + **Note** : This endpoint should only be used for the Government (US1-FED) site. + + :param body: The definition of the new agent rule + :type body: CloudWorkloadSecurityAgentRuleCreateRequest + :rtype: CloudWorkloadSecurityAgentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_cloud_workload_security_agent_rule_endpoint.call_with_http_info(**kwargs) + + def create_csm_threats_agent_policy(self, body: CloudWorkloadSecurityAgentPolicyCreateRequest, ) -> CloudWorkloadSecurityAgentPolicyResponse: + """Create a Workload Protection policy. + + Create a new Workload Protection policy with the given parameters. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :param body: The definition of the new Agent policy + :type body: CloudWorkloadSecurityAgentPolicyCreateRequest + :rtype: CloudWorkloadSecurityAgentPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_csm_threats_agent_policy_endpoint.call_with_http_info(**kwargs) + + def create_csm_threats_agent_rule(self, body: CloudWorkloadSecurityAgentRuleCreateRequest, ) -> CloudWorkloadSecurityAgentRuleResponse: + """Create a Workload Protection agent rule. + + Create a new Workload Protection agent rule with the given parameters. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :param body: The definition of the new agent rule + :type body: CloudWorkloadSecurityAgentRuleCreateRequest + :rtype: CloudWorkloadSecurityAgentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_csm_threats_agent_rule_endpoint.call_with_http_info(**kwargs) + + def delete_cloud_workload_security_agent_rule(self, agent_rule_id: str, ) -> None: + """Delete a Workload Protection agent rule (US1-FED). + + Delete a specific agent rule. + + **Note** : This endpoint should only be used for the Government (US1-FED) site. + + :param agent_rule_id: The ID of the Agent rule + :type agent_rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["agent_rule_id"] = agent_rule_id + + return self._delete_cloud_workload_security_agent_rule_endpoint.call_with_http_info(**kwargs) + + def delete_csm_threats_agent_policy(self, policy_id: str, ) -> None: + """Delete a Workload Protection policy. + + Delete a specific Workload Protection policy. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :param policy_id: The ID of the Agent policy + :type policy_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + return self._delete_csm_threats_agent_policy_endpoint.call_with_http_info(**kwargs) + + def delete_csm_threats_agent_rule(self, agent_rule_id: str, *, policy_id: Union[str, UnsetType]=unset, ) -> None: + """Delete a Workload Protection agent rule. + + Delete a specific Workload Protection agent rule. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :param agent_rule_id: The ID of the Agent rule + :type agent_rule_id: str + :param policy_id: The ID of the Agent policy + :type policy_id: str, optional + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["agent_rule_id"] = agent_rule_id + + if policy_id is not unset: + kwargs["policy_id"] = policy_id + + return self._delete_csm_threats_agent_rule_endpoint.call_with_http_info(**kwargs) + + def download_cloud_workload_policy_file(self, ) -> file_type: + """Download the Workload Protection policy (US1-FED). + + The download endpoint generates a Workload Protection policy file from your currently active + Workload Protection agent rules, and downloads them as a ``.policy`` file. This file can then be deployed to + your agents to update the policy running in your environment. + + **Note** : This endpoint should only be used for the Government (US1-FED) site. + + :rtype: file_type + """ + kwargs: Dict[str, Any] = {} + return self._download_cloud_workload_policy_file_endpoint.call_with_http_info(**kwargs) + + def download_csm_threats_policy(self, ) -> file_type: + """Download the Workload Protection policy. + + The download endpoint generates a Workload Protection policy file from your currently active + Workload Protection agent rules, and downloads them as a ``.policy`` file. This file can then be deployed to + your agents to update the policy running in your environment. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :rtype: file_type + """ + kwargs: Dict[str, Any] = {} + return self._download_csm_threats_policy_endpoint.call_with_http_info(**kwargs) + + def get_cloud_workload_security_agent_rule(self, agent_rule_id: str, ) -> CloudWorkloadSecurityAgentRuleResponse: + """Get a Workload Protection agent rule (US1-FED). + + Get the details of a specific agent rule. + + **Note** : This endpoint should only be used for the Government (US1-FED) site. + + :param agent_rule_id: The ID of the Agent rule + :type agent_rule_id: str + :rtype: CloudWorkloadSecurityAgentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["agent_rule_id"] = agent_rule_id + + return self._get_cloud_workload_security_agent_rule_endpoint.call_with_http_info(**kwargs) + + def get_csm_threats_agent_policy(self, policy_id: str, ) -> CloudWorkloadSecurityAgentPolicyResponse: + """Get a Workload Protection policy. + + Get the details of a specific Workload Protection policy. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :param policy_id: The ID of the Agent policy + :type policy_id: str + :rtype: CloudWorkloadSecurityAgentPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + return self._get_csm_threats_agent_policy_endpoint.call_with_http_info(**kwargs) + + def get_csm_threats_agent_rule(self, agent_rule_id: str, *, policy_id: Union[str, UnsetType]=unset, ) -> CloudWorkloadSecurityAgentRuleResponse: + """Get a Workload Protection agent rule. + + Get the details of a specific Workload Protection agent rule. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :param agent_rule_id: The ID of the Agent rule + :type agent_rule_id: str + :param policy_id: The ID of the Agent policy + :type policy_id: str, optional + :rtype: CloudWorkloadSecurityAgentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["agent_rule_id"] = agent_rule_id + + if policy_id is not unset: + kwargs["policy_id"] = policy_id + + return self._get_csm_threats_agent_rule_endpoint.call_with_http_info(**kwargs) + + def list_cloud_workload_security_agent_rules(self, ) -> CloudWorkloadSecurityAgentRulesListResponse: + """Get all Workload Protection agent rules (US1-FED). + + Get the list of agent rules. + + **Note** : This endpoint should only be used for the Government (US1-FED) site. + + :rtype: CloudWorkloadSecurityAgentRulesListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_cloud_workload_security_agent_rules_endpoint.call_with_http_info(**kwargs) + + def list_csm_threats_agent_policies(self, ) -> CloudWorkloadSecurityAgentPoliciesListResponse: + """Get all Workload Protection policies. + + Get the list of Workload Protection policies. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :rtype: CloudWorkloadSecurityAgentPoliciesListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_csm_threats_agent_policies_endpoint.call_with_http_info(**kwargs) + + def list_csm_threats_agent_rules(self, *, policy_id: Union[str, UnsetType]=unset, ) -> CloudWorkloadSecurityAgentRulesListResponse: + """Get all Workload Protection agent rules. + + Get the list of Workload Protection agent rules. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :param policy_id: The ID of the Agent policy + :type policy_id: str, optional + :rtype: CloudWorkloadSecurityAgentRulesListResponse + """ + kwargs: Dict[str, Any] = {} + if policy_id is not unset: + kwargs["policy_id"] = policy_id + + return self._list_csm_threats_agent_rules_endpoint.call_with_http_info(**kwargs) + + def update_cloud_workload_security_agent_rule(self, agent_rule_id: str, body: CloudWorkloadSecurityAgentRuleUpdateRequest, ) -> CloudWorkloadSecurityAgentRuleResponse: + """Update a Workload Protection agent rule (US1-FED). + + Update a specific agent rule. + Returns the agent rule object when the request is successful. + + **Note** : This endpoint should only be used for the Government (US1-FED) site. + + :param agent_rule_id: The ID of the Agent rule + :type agent_rule_id: str + :param body: New definition of the agent rule + :type body: CloudWorkloadSecurityAgentRuleUpdateRequest + :rtype: CloudWorkloadSecurityAgentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["agent_rule_id"] = agent_rule_id + + kwargs["body"] = body + + return self._update_cloud_workload_security_agent_rule_endpoint.call_with_http_info(**kwargs) + + def update_csm_threats_agent_policy(self, policy_id: str, body: CloudWorkloadSecurityAgentPolicyUpdateRequest, ) -> CloudWorkloadSecurityAgentPolicyResponse: + """Update a Workload Protection policy. + + Update a specific Workload Protection policy. + Returns the policy object when the request is successful. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :param policy_id: The ID of the Agent policy + :type policy_id: str + :param body: New definition of the Agent policy + :type body: CloudWorkloadSecurityAgentPolicyUpdateRequest + :rtype: CloudWorkloadSecurityAgentPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + kwargs["body"] = body + + return self._update_csm_threats_agent_policy_endpoint.call_with_http_info(**kwargs) + + def update_csm_threats_agent_rule(self, agent_rule_id: str, body: CloudWorkloadSecurityAgentRuleUpdateRequest, *, policy_id: Union[str, UnsetType]=unset, ) -> CloudWorkloadSecurityAgentRuleResponse: + """Update a Workload Protection agent rule. + + Update a specific Workload Protection Agent rule. + Returns the agent rule object when the request is successful. + + **Note** : This endpoint is not available for the Government (US1-FED) site. Please reference the (US1-FED) specific resource below. + + :param agent_rule_id: The ID of the Agent rule + :type agent_rule_id: str + :param body: New definition of the agent rule + :type body: CloudWorkloadSecurityAgentRuleUpdateRequest + :param policy_id: The ID of the Agent policy + :type policy_id: str, optional + :rtype: CloudWorkloadSecurityAgentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["agent_rule_id"] = agent_rule_id + + if policy_id is not unset: + kwargs["policy_id"] = policy_id + + kwargs["body"] = body + + return self._update_csm_threats_agent_rule_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/customer_org_api.py b/datadog_api_client/v2/api/customer_org_api.py new file mode 100644 index 0000000000..3a7fa8ad31 --- /dev/null +++ b/datadog_api_client/v2/api/customer_org_api.py @@ -0,0 +1,75 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.customer_org_disable_response import CustomerOrgDisableResponse +from datadog_api_client.v2.model.customer_org_disable_request import CustomerOrgDisableRequest + + +class CustomerOrgApi: + """ + Programmatic management of a customer's Datadog organization. Use this API to perform + self-service organization lifecycle actions such as disabling the authenticated org. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._disable_customer_org_endpoint = _Endpoint( + settings={ + "response_type": (CustomerOrgDisableResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org/disable", + "operation_id": "disable_customer_org", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CustomerOrgDisableRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def disable_customer_org(self, body: CustomerOrgDisableRequest, ) -> CustomerOrgDisableResponse: + """Disable the authenticated customer organization. + + Disable the Datadog organization associated with the authenticated user or API key. + The request body uses JSON:API format. If ``org_uuid`` is supplied, it must match + the authenticated org or the request is rejected. Successful calls disable the org + and return the resulting state from the downstream service. Requires the + ``org_management`` permission. + + :type body: CustomerOrgDisableRequest + :rtype: CustomerOrgDisableResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._disable_customer_org_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/dashboard_lists_api.py b/datadog_api_client/v2/api/dashboard_lists_api.py new file mode 100644 index 0000000000..825391a72c --- /dev/null +++ b/datadog_api_client/v2/api/dashboard_lists_api.py @@ -0,0 +1,219 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.dashboard_list_delete_items_response import DashboardListDeleteItemsResponse +from datadog_api_client.v2.model.dashboard_list_delete_items_request import DashboardListDeleteItemsRequest +from datadog_api_client.v2.model.dashboard_list_items import DashboardListItems +from datadog_api_client.v2.model.dashboard_list_add_items_response import DashboardListAddItemsResponse +from datadog_api_client.v2.model.dashboard_list_add_items_request import DashboardListAddItemsRequest +from datadog_api_client.v2.model.dashboard_list_update_items_response import DashboardListUpdateItemsResponse +from datadog_api_client.v2.model.dashboard_list_update_items_request import DashboardListUpdateItemsRequest + + +class DashboardListsApi: + """ + Interact with your dashboard lists through the API to + organize, find, and share all of your dashboards with your team and + organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_dashboard_list_items_endpoint = _Endpoint( + settings={ + "response_type": (DashboardListAddItemsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards", + "operation_id": "create_dashboard_list_items", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "dashboard_list_id": { + "required": True, + "openapi_types": (int,), + "attribute": "dashboard_list_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (DashboardListAddItemsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_dashboard_list_items_endpoint = _Endpoint( + settings={ + "response_type": (DashboardListDeleteItemsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards", + "operation_id": "delete_dashboard_list_items", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "dashboard_list_id": { + "required": True, + "openapi_types": (int,), + "attribute": "dashboard_list_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (DashboardListDeleteItemsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_dashboard_list_items_endpoint = _Endpoint( + settings={ + "response_type": (DashboardListItems,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards", + "operation_id": "get_dashboard_list_items", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "dashboard_list_id": { + "required": True, + "openapi_types": (int,), + "attribute": "dashboard_list_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_dashboard_list_items_endpoint = _Endpoint( + settings={ + "response_type": (DashboardListUpdateItemsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards", + "operation_id": "update_dashboard_list_items", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "dashboard_list_id": { + "required": True, + "openapi_types": (int,), + "attribute": "dashboard_list_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (DashboardListUpdateItemsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_dashboard_list_items(self, dashboard_list_id: int, body: DashboardListAddItemsRequest, ) -> DashboardListAddItemsResponse: + """Add Items to a Dashboard List. + + Add dashboards to an existing dashboard list. + + :param dashboard_list_id: ID of the dashboard list to add items to. + :type dashboard_list_id: int + :param body: Dashboards to add to the dashboard list. + :type body: DashboardListAddItemsRequest + :rtype: DashboardListAddItemsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_list_id"] = dashboard_list_id + + kwargs["body"] = body + + return self._create_dashboard_list_items_endpoint.call_with_http_info(**kwargs) + + def delete_dashboard_list_items(self, dashboard_list_id: int, body: DashboardListDeleteItemsRequest, ) -> DashboardListDeleteItemsResponse: + """Delete items from a dashboard list. + + Delete dashboards from an existing dashboard list. + + :param dashboard_list_id: ID of the dashboard list to delete items from. + :type dashboard_list_id: int + :param body: Dashboards to delete from the dashboard list. + :type body: DashboardListDeleteItemsRequest + :rtype: DashboardListDeleteItemsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_list_id"] = dashboard_list_id + + kwargs["body"] = body + + return self._delete_dashboard_list_items_endpoint.call_with_http_info(**kwargs) + + def get_dashboard_list_items(self, dashboard_list_id: int, ) -> DashboardListItems: + """Get items of a Dashboard List. + + Fetch the dashboard list’s dashboard definitions. + + :param dashboard_list_id: ID of the dashboard list to get items from. + :type dashboard_list_id: int + :rtype: DashboardListItems + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_list_id"] = dashboard_list_id + + return self._get_dashboard_list_items_endpoint.call_with_http_info(**kwargs) + + def update_dashboard_list_items(self, dashboard_list_id: int, body: DashboardListUpdateItemsRequest, ) -> DashboardListUpdateItemsResponse: + """Update items of a dashboard list. + + Update dashboards of an existing dashboard list. + + :param dashboard_list_id: ID of the dashboard list to update items from. + :type dashboard_list_id: int + :param body: New dashboards of the dashboard list. + :type body: DashboardListUpdateItemsRequest + :rtype: DashboardListUpdateItemsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_list_id"] = dashboard_list_id + + kwargs["body"] = body + + return self._update_dashboard_list_items_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/dashboard_secure_embed_api.py b/datadog_api_client/v2/api/dashboard_secure_embed_api.py new file mode 100644 index 0000000000..164dbfbc0a --- /dev/null +++ b/datadog_api_client/v2/api/dashboard_secure_embed_api.py @@ -0,0 +1,243 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.secure_embed_create_response import SecureEmbedCreateResponse +from datadog_api_client.v2.model.secure_embed_create_request import SecureEmbedCreateRequest +from datadog_api_client.v2.model.secure_embed_get_response import SecureEmbedGetResponse +from datadog_api_client.v2.model.secure_embed_update_response import SecureEmbedUpdateResponse +from datadog_api_client.v2.model.secure_embed_update_request import SecureEmbedUpdateRequest + + +class DashboardSecureEmbedApi: + """ + Manage securely embedded Datadog dashboards. Secure embeds use HMAC-SHA256 signed sessions + for authentication, enabling customers to embed dashboards in their own applications with + server-side auth control. Unlike public dashboards (open URL) or invite dashboards + (email-based access), secure embeds provide programmatic access control. + + **Requirements:** + + * **Embed** sharing must be enabled under **Organization Settings** > **Public Sharing** > **Shared Dashboards**. + * You need `an API key and an application key `_ to interact with these endpoints. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_dashboard_secure_embed_endpoint = _Endpoint( + settings={ + "response_type": (SecureEmbedCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/dashboard/{dashboard_id}/shared/secure-embed", + "operation_id": "create_dashboard_secure_embed", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "dashboard_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dashboard_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecureEmbedCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_dashboard_secure_embed_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/dashboard/{dashboard_id}/shared/secure-embed/{token}", + "operation_id": "delete_dashboard_secure_embed", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "dashboard_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dashboard_id", + "location": "path", + }, + "token": { + "required": True, + "openapi_types": (str,), + "attribute": "token", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_dashboard_secure_embed_endpoint = _Endpoint( + settings={ + "response_type": (SecureEmbedGetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/dashboard/{dashboard_id}/shared/secure-embed/{token}", + "operation_id": "get_dashboard_secure_embed", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "dashboard_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dashboard_id", + "location": "path", + }, + "token": { + "required": True, + "openapi_types": (str,), + "attribute": "token", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_dashboard_secure_embed_endpoint = _Endpoint( + settings={ + "response_type": (SecureEmbedUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/dashboard/{dashboard_id}/shared/secure-embed/{token}", + "operation_id": "update_dashboard_secure_embed", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "dashboard_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dashboard_id", + "location": "path", + }, + "token": { + "required": True, + "openapi_types": (str,), + "attribute": "token", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecureEmbedUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_dashboard_secure_embed(self, dashboard_id: str, body: SecureEmbedCreateRequest, ) -> SecureEmbedCreateResponse: + """Create a secure embed for a dashboard. + + Create a secure embed share for a dashboard. The response includes a one-time ``credential`` used for HMAC-SHA256 signing. Store it securely — it cannot be retrieved again. + + :param dashboard_id: The ID of the dashboard. + :type dashboard_id: str + :param body: Secure embed creation request body. + :type body: SecureEmbedCreateRequest + :rtype: SecureEmbedCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_id"] = dashboard_id + + kwargs["body"] = body + + return self._create_dashboard_secure_embed_endpoint.call_with_http_info(**kwargs) + + def delete_dashboard_secure_embed(self, dashboard_id: str, token: str, ) -> None: + """Delete a secure embed for a dashboard. + + Delete a secure embed share for a dashboard. + + :param dashboard_id: The ID of the dashboard. + :type dashboard_id: str + :param token: The share token identifying the secure embed. + :type token: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_id"] = dashboard_id + + kwargs["token"] = token + + return self._delete_dashboard_secure_embed_endpoint.call_with_http_info(**kwargs) + + def get_dashboard_secure_embed(self, dashboard_id: str, token: str, ) -> SecureEmbedGetResponse: + """Get a secure embed for a dashboard. + + Retrieve an existing secure embed configuration for a dashboard. + + :param dashboard_id: The ID of the dashboard. + :type dashboard_id: str + :param token: The share token identifying the secure embed. + :type token: str + :rtype: SecureEmbedGetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_id"] = dashboard_id + + kwargs["token"] = token + + return self._get_dashboard_secure_embed_endpoint.call_with_http_info(**kwargs) + + def update_dashboard_secure_embed(self, dashboard_id: str, token: str, body: SecureEmbedUpdateRequest, ) -> SecureEmbedUpdateResponse: + """Update a secure embed for a dashboard. + + Partially update a secure embed configuration. All fields are optional (PATCH semantics). + + :param dashboard_id: The ID of the dashboard. + :type dashboard_id: str + :param token: The share token identifying the secure embed. + :type token: str + :param body: Secure embed update request body. + :type body: SecureEmbedUpdateRequest + :rtype: SecureEmbedUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_id"] = dashboard_id + + kwargs["token"] = token + + kwargs["body"] = body + + return self._update_dashboard_secure_embed_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/dashboard_sharing_api.py b/datadog_api_client/v2/api/dashboard_sharing_api.py new file mode 100644 index 0000000000..a234aedbfa --- /dev/null +++ b/datadog_api_client/v2/api/dashboard_sharing_api.py @@ -0,0 +1,70 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_shared_dashboards_response import ListSharedDashboardsResponse + + +class DashboardSharingApi: + """ + Manage dashboard sharing configurations. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_shared_dashboards_by_dashboard_id_endpoint = _Endpoint( + settings={ + "response_type": (ListSharedDashboardsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/dashboard/{dashboard_id}/shared", + "operation_id": "list_shared_dashboards_by_dashboard_id", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "dashboard_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dashboard_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def list_shared_dashboards_by_dashboard_id(self, dashboard_id: str, ) -> ListSharedDashboardsResponse: + """List shared dashboards for a dashboard. + + Retrieve shared dashboards associated with the specified dashboard. + + :param dashboard_id: ID of the dashboard. + :type dashboard_id: str + :rtype: ListSharedDashboardsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_id"] = dashboard_id + + return self._list_shared_dashboards_by_dashboard_id_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/dashboards_api.py b/datadog_api_client/v2/api/dashboards_api.py new file mode 100644 index 0000000000..144419d595 --- /dev/null +++ b/datadog_api_client/v2/api/dashboards_api.py @@ -0,0 +1,187 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_dashboards_usage_response import ListDashboardsUsageResponse +from datadog_api_client.v2.model.dashboard_usage import DashboardUsage +from datadog_api_client.v2.model.dashboard_usage_response import DashboardUsageResponse + + +class DashboardsApi: + """ + Get usage statistics for the dashboards in your organization, including view + counts, last-edit times, widget counts, and quality scores. See the + `Dashboards documentation `_ for more + information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_dashboard_usage_endpoint = _Endpoint( + settings={ + "response_type": (DashboardUsageResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/dashboards/{dashboard_id}/usage", + "operation_id": "get_dashboard_usage", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "dashboard_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dashboard_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_dashboards_usage_endpoint = _Endpoint( + settings={ + "response_type": (ListDashboardsUsageResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/dashboards/usage", + "operation_id": "list_dashboards_usage", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_offset": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "filter_edited_before": { + "openapi_types": (str,), + "attribute": "filter[edited_before]", + "location": "query", + }, + "filter_viewed_before": { + "openapi_types": (str,), + "attribute": "filter[viewed_before]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_dashboard_usage(self, dashboard_id: str, ) -> DashboardUsageResponse: + """Get usage stats for a dashboard. + + Get usage statistics for a single dashboard. The response includes view counts, the most recent view and edit times, widget counts, and the dashboard quality score. View-count fields depend on Real User Monitoring (RUM) and are ``null`` or ``0`` in orgs without RUM. **View counts are refreshed once per day** and **only reflect views recorded starting January 2025** ; views prior to that date are not included. + + :param dashboard_id: The ID of the dashboard. + :type dashboard_id: str + :rtype: DashboardUsageResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dashboard_id"] = dashboard_id + + return self._get_dashboard_usage_endpoint.call_with_http_info(**kwargs) + + def list_dashboards_usage(self, *, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, filter_edited_before: Union[str, UnsetType]=unset, filter_viewed_before: Union[str, UnsetType]=unset, ) -> ListDashboardsUsageResponse: + """Get usage stats for all dashboards. + + Get paginated usage statistics for every dashboard in the caller's organization. Use ``page[limit]`` and ``page[offset]`` to walk the result set. Use ``filter[edited_before]`` or ``filter[viewed_before]`` to narrow results by edit or view date. View-count fields depend on Real User Monitoring (RUM) and are ``null`` or ``0`` in orgs without RUM. **View counts are refreshed once per day** and **only reflect views recorded starting January 2025** ; views prior to that date are not included. + + :param page_limit: Maximum number of dashboards to return per page. Server-side maximum is 500; values above 500 return a 400 Bad Request. + :type page_limit: int, optional + :param page_offset: Zero-based offset into the result set. + :type page_offset: int, optional + :param filter_edited_before: Return only dashboards whose last edit ( ``edited_at`` ) is strictly before this ISO 8601 timestamp ( ``edited_at < value`` ; boundary matches are excluded). Must include a timezone offset (for example, ``Z`` or ``+00:00`` ); naive timestamps return HTTP 400. + :type filter_edited_before: str, optional + :param filter_viewed_before: Return only dashboards whose most recent view ( ``viewed_at`` ) is strictly before this ISO 8601 timestamp, including dashboards that have never been viewed. Must include a timezone offset; naive timestamps return HTTP 400. Orgs without Real User Monitoring (RUM) will see all dashboards returned by this filter. + :type filter_viewed_before: str, optional + :rtype: ListDashboardsUsageResponse + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if filter_edited_before is not unset: + kwargs["filter_edited_before"] = filter_edited_before + + if filter_viewed_before is not unset: + kwargs["filter_viewed_before"] = filter_viewed_before + + return self._list_dashboards_usage_endpoint.call_with_http_info(**kwargs) + + def list_dashboards_usage_with_pagination(self, *, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, filter_edited_before: Union[str, UnsetType]=unset, filter_viewed_before: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[DashboardUsage]: + """Get usage stats for all dashboards. + + Provide a paginated version of :meth:`list_dashboards_usage`, returning all items. + + :param page_limit: Maximum number of dashboards to return per page. Server-side maximum is 500; values above 500 return a 400 Bad Request. + :type page_limit: int, optional + :param page_offset: Zero-based offset into the result set. + :type page_offset: int, optional + :param filter_edited_before: Return only dashboards whose last edit ( ``edited_at`` ) is strictly before this ISO 8601 timestamp ( ``edited_at < value`` ; boundary matches are excluded). Must include a timezone offset (for example, ``Z`` or ``+00:00`` ); naive timestamps return HTTP 400. + :type filter_edited_before: str, optional + :param filter_viewed_before: Return only dashboards whose most recent view ( ``viewed_at`` ) is strictly before this ISO 8601 timestamp, including dashboards that have never been viewed. Must include a timezone offset; naive timestamps return HTTP 400. Orgs without Real User Monitoring (RUM) will see all dashboards returned by this filter. + :type filter_viewed_before: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[DashboardUsage] + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if filter_edited_before is not unset: + kwargs["filter_edited_before"] = filter_edited_before + + if filter_viewed_before is not unset: + kwargs["filter_viewed_before"] = filter_viewed_before + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 250) + endpoint = self._list_dashboards_usage_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/data_deletion_api.py b/datadog_api_client/v2/api/data_deletion_api.py new file mode 100644 index 0000000000..0724c51672 --- /dev/null +++ b/datadog_api_client/v2/api/data_deletion_api.py @@ -0,0 +1,200 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.create_data_deletion_response_body import CreateDataDeletionResponseBody +from datadog_api_client.v2.model.create_data_deletion_request_body import CreateDataDeletionRequestBody +from datadog_api_client.v2.model.get_data_deletions_response_body import GetDataDeletionsResponseBody +from datadog_api_client.v2.model.cancel_data_deletion_response_body import CancelDataDeletionResponseBody + + +class DataDeletionApi: + """ + The Data Deletion API allows the user to target and delete data from the allowed products. It's currently enabled for Logs and RUM and depends on ``logs_delete_data`` and ``rum_delete_data`` permissions respectively. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._cancel_data_deletion_request_endpoint = _Endpoint( + settings={ + "response_type": (CancelDataDeletionResponseBody,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deletion/requests/{id}/cancel", + "operation_id": "cancel_data_deletion_request", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._create_data_deletion_request_endpoint = _Endpoint( + settings={ + "response_type": (CreateDataDeletionResponseBody,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deletion/data/{product}", + "operation_id": "create_data_deletion_request", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "product": { + "required": True, + "openapi_types": (str,), + "attribute": "product", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateDataDeletionRequestBody,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_data_deletion_requests_endpoint = _Endpoint( + settings={ + "response_type": (GetDataDeletionsResponseBody,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deletion/requests", + "operation_id": "get_data_deletion_requests", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "next_page": { + "openapi_types": (str,), + "attribute": "next_page", + "location": "query", + }, + "product": { + "openapi_types": (str,), + "attribute": "product", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "status": { + "openapi_types": (str,), + "attribute": "status", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 50, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page_size", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def cancel_data_deletion_request(self, id: str, ) -> CancelDataDeletionResponseBody: + """Cancels a data deletion request. + + Cancels a data deletion request by providing its ID. + + :param id: ID of the deletion request. + :type id: str + :rtype: CancelDataDeletionResponseBody + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._cancel_data_deletion_request_endpoint.call_with_http_info(**kwargs) + + def create_data_deletion_request(self, product: str, body: CreateDataDeletionRequestBody, ) -> CreateDataDeletionResponseBody: + """Creates a data deletion request. + + Creates a data deletion request by providing a query and a timeframe targeting the proper data. + + :param product: Name of the product to be deleted, either ``logs`` or ``rum``. + :type product: str + :type body: CreateDataDeletionRequestBody + :rtype: CreateDataDeletionResponseBody + """ + kwargs: Dict[str, Any] = {} + kwargs["product"] = product + + kwargs["body"] = body + + return self._create_data_deletion_request_endpoint.call_with_http_info(**kwargs) + + def get_data_deletion_requests(self, *, next_page: Union[str, UnsetType]=unset, product: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> GetDataDeletionsResponseBody: + """Gets a list of data deletion requests. + + Gets a list of data deletion requests based on several filter parameters. + + :param next_page: The next page of the previous search. If the next_page parameter is included, the rest of the query elements are ignored. + :type next_page: str, optional + :param product: Retrieve only the requests related to the given product. + :type product: str, optional + :param query: Retrieve only the requests that matches the given query. + :type query: str, optional + :param status: Retrieve only the requests with the given status. + :type status: str, optional + :param page_size: Sets the page size of the search. + :type page_size: int, optional + :rtype: GetDataDeletionsResponseBody + """ + kwargs: Dict[str, Any] = {} + if next_page is not unset: + kwargs["next_page"] = next_page + + if product is not unset: + kwargs["product"] = product + + if query is not unset: + kwargs["query"] = query + + if status is not unset: + kwargs["status"] = status + + if page_size is not unset: + kwargs["page_size"] = page_size + + return self._get_data_deletion_requests_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/data_observability_api.py b/datadog_api_client/v2/api/data_observability_api.py new file mode 100644 index 0000000000..2076b28a39 --- /dev/null +++ b/datadog_api_client/v2/api/data_observability_api.py @@ -0,0 +1,108 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.get_data_observability_monitor_run_status_response import GetDataObservabilityMonitorRunStatusResponse +from datadog_api_client.v2.model.run_data_observability_monitor_response import RunDataObservabilityMonitorResponse + + +class DataObservabilityApi: + """ + Manage and run data observability monitors. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_data_observability_monitor_run_status_endpoint = _Endpoint( + settings={ + "response_type": (GetDataObservabilityMonitorRunStatusResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/data-observability/monitors/runs/{run_id}/status", + "operation_id": "get_data_observability_monitor_run_status", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "run_id": { + "required": True, + "openapi_types": (str,), + "attribute": "run_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._run_data_observability_monitor_endpoint = _Endpoint( + settings={ + "response_type": (RunDataObservabilityMonitorResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/data-observability/monitors/{monitor_id}/run", + "operation_id": "run_data_observability_monitor", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "monitor_id": { + "required": True, + "openapi_types": (int,), + "attribute": "monitor_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_data_observability_monitor_run_status(self, run_id: str, ) -> GetDataObservabilityMonitorRunStatusResponse: + """Get data observability monitor run status. + + Retrieves the current status of a data observability monitor run. Poll this endpoint after triggering a run to determine when evaluation is complete. + + :param run_id: The ID of the monitor run to retrieve status for. + :type run_id: str + :rtype: GetDataObservabilityMonitorRunStatusResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["run_id"] = run_id + + return self._get_data_observability_monitor_run_status_endpoint.call_with_http_info(**kwargs) + + def run_data_observability_monitor(self, monitor_id: int, ) -> RunDataObservabilityMonitorResponse: + """Run a data observability monitor. + + Manually triggers a run for a data observability monitor. Only monitors that are not scheduled (manually-runnable) can be triggered this way. + + :param monitor_id: The ID of the data observability monitor to run. + :type monitor_id: int + :rtype: RunDataObservabilityMonitorResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["monitor_id"] = monitor_id + + return self._run_data_observability_monitor_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/datasets_api.py b/datadog_api_client/v2/api/datasets_api.py new file mode 100644 index 0000000000..b12f976a90 --- /dev/null +++ b/datadog_api_client/v2/api/datasets_api.py @@ -0,0 +1,223 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.dataset_response_multi import DatasetResponseMulti +from datadog_api_client.v2.model.dataset_response_single import DatasetResponseSingle +from datadog_api_client.v2.model.dataset_create_request import DatasetCreateRequest +from datadog_api_client.v2.model.dataset_update_request import DatasetUpdateRequest + + +class DatasetsApi: + """ + Data Access Controls in Datadog is a feature that allows administrators and access managers to regulate + access to sensitive data. By defining Restricted Datasets, you can ensure that only specific teams or roles can + view certain types of telemetry (for example, logs, traces, metrics, and RUM data). + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_dataset_endpoint = _Endpoint( + settings={ + "response_type": (DatasetResponseSingle,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/datasets", + "operation_id": "create_dataset", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DatasetCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_dataset_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/datasets/{dataset_id}", + "operation_id": "delete_dataset", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_all_datasets_endpoint = _Endpoint( + settings={ + "response_type": (DatasetResponseMulti,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/datasets", + "operation_id": "get_all_datasets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_dataset_endpoint = _Endpoint( + settings={ + "response_type": (DatasetResponseSingle,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/datasets/{dataset_id}", + "operation_id": "get_dataset", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_dataset_endpoint = _Endpoint( + settings={ + "response_type": (DatasetResponseSingle,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/datasets/{dataset_id}", + "operation_id": "update_dataset", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (DatasetUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_dataset(self, body: DatasetCreateRequest, ) -> DatasetResponseSingle: + """Create a dataset. + + Create a dataset with the configurations in the request. + + :param body: Dataset payload + :type body: DatasetCreateRequest + :rtype: DatasetResponseSingle + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_dataset_endpoint.call_with_http_info(**kwargs) + + def delete_dataset(self, dataset_id: str, ) -> None: + """Delete a dataset. + + Deletes the dataset associated with the ID. + + :param dataset_id: The ID of a defined dataset. + :type dataset_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["dataset_id"] = dataset_id + + return self._delete_dataset_endpoint.call_with_http_info(**kwargs) + + def get_all_datasets(self, ) -> DatasetResponseMulti: + """Get all datasets. + + Get all datasets that have been configured for an organization. + + :rtype: DatasetResponseMulti + """ + kwargs: Dict[str, Any] = {} + return self._get_all_datasets_endpoint.call_with_http_info(**kwargs) + + def get_dataset(self, dataset_id: str, ) -> DatasetResponseSingle: + """Get a single dataset by ID. + + Retrieves the dataset associated with the ID. + + :param dataset_id: The ID of a defined dataset. + :type dataset_id: str + :rtype: DatasetResponseSingle + """ + kwargs: Dict[str, Any] = {} + kwargs["dataset_id"] = dataset_id + + return self._get_dataset_endpoint.call_with_http_info(**kwargs) + + def update_dataset(self, dataset_id: str, body: DatasetUpdateRequest, ) -> DatasetResponseSingle: + """Edit a dataset. + + Edits the dataset associated with the ID. + + :param dataset_id: The ID of a defined dataset. + :type dataset_id: str + :param body: Dataset payload + :type body: DatasetUpdateRequest + :rtype: DatasetResponseSingle + """ + kwargs: Dict[str, Any] = {} + kwargs["dataset_id"] = dataset_id + + kwargs["body"] = body + + return self._update_dataset_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/ddsql_api.py b/datadog_api_client/v2/api/ddsql_api.py new file mode 100644 index 0000000000..f4a76be6b3 --- /dev/null +++ b/datadog_api_client/v2/api/ddsql_api.py @@ -0,0 +1,115 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.ddsql_tabular_query_response import DdsqlTabularQueryResponse +from datadog_api_client.v2.model.ddsql_tabular_query_request import DdsqlTabularQueryRequest +from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request import DdsqlTabularQueryFetchRequest + + +class DDSQLApi: + """ + Execute DDSQL queries against the Datadog data catalog and poll for their results. + Queries are dispatched asynchronously: the initial request may return a ``running`` state with + a ``query_id`` , and clients poll the fetch endpoint until the response transitions to + ``completed`` with a column-major result set. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._execute_ddsql_tabular_query_endpoint = _Endpoint( + settings={ + "response_type": (DdsqlTabularQueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/ddsql/query/tabular", + "operation_id": "execute_ddsql_tabular_query", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DdsqlTabularQueryRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._fetch_ddsql_tabular_query_endpoint = _Endpoint( + settings={ + "response_type": (DdsqlTabularQueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/ddsql/query/tabular/fetch", + "operation_id": "fetch_ddsql_tabular_query", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DdsqlTabularQueryFetchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def execute_ddsql_tabular_query(self, body: DdsqlTabularQueryRequest, ) -> DdsqlTabularQueryResponse: + """Execute a tabular DDSQL query. + + Submit a DDSQL statement and return either a ``running`` state with an opaque ``query_id`` + for the client to poll, or a ``completed`` state with the column-major result set inlined + when the query finishes quickly enough to be served synchronously. + + :type body: DdsqlTabularQueryRequest + :rtype: DdsqlTabularQueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._execute_ddsql_tabular_query_endpoint.call_with_http_info(**kwargs) + + def fetch_ddsql_tabular_query(self, body: DdsqlTabularQueryFetchRequest, ) -> DdsqlTabularQueryResponse: + """Fetch the result of a DDSQL query. + + Poll a previously submitted DDSQL query for results. Pass the opaque ``query_id`` returned + by a prior ``ExecuteDdsqlTabularQuery`` (or by a prior ``FetchDdsqlTabularQuery`` that + returned ``state: running`` ) and the server returns either a ``running`` state to poll again + or a ``completed`` state with the column-major result set inlined. + + :type body: DdsqlTabularQueryFetchRequest + :rtype: DdsqlTabularQueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._fetch_ddsql_tabular_query_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/deployment_gates_api.py b/datadog_api_client/v2/api/deployment_gates_api.py new file mode 100644 index 0000000000..9660bcff2e --- /dev/null +++ b/datadog_api_client/v2/api/deployment_gates_api.py @@ -0,0 +1,567 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.deployment_gates_list_response import DeploymentGatesListResponse +from datadog_api_client.v2.model.deployment_gate_response import DeploymentGateResponse +from datadog_api_client.v2.model.create_deployment_gate_params import CreateDeploymentGateParams +from datadog_api_client.v2.model.deployment_gate_rules_response import DeploymentGateRulesResponse +from datadog_api_client.v2.model.deployment_rule_response import DeploymentRuleResponse +from datadog_api_client.v2.model.create_deployment_rule_params import CreateDeploymentRuleParams +from datadog_api_client.v2.model.update_deployment_rule_params import UpdateDeploymentRuleParams +from datadog_api_client.v2.model.update_deployment_gate_params import UpdateDeploymentGateParams +from datadog_api_client.v2.model.deployment_gates_evaluation_response import DeploymentGatesEvaluationResponse +from datadog_api_client.v2.model.deployment_gates_evaluation_request import DeploymentGatesEvaluationRequest +from datadog_api_client.v2.model.deployment_gates_evaluation_result_response import DeploymentGatesEvaluationResultResponse + + +class DeploymentGatesApi: + """ + Manage Deployment Gates using this API to reduce the likelihood and impact of incidents caused by deployments. See the `Deployment Gates documentation `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_deployment_gate_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentGateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates", + "operation_id": "create_deployment_gate", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateDeploymentGateParams,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_deployment_rule_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates/{gate_id}/rules", + "operation_id": "create_deployment_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "gate_id": { + "required": True, + "openapi_types": (str,), + "attribute": "gate_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateDeploymentRuleParams,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_deployment_gate_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates/{id}", + "operation_id": "delete_deployment_gate", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_deployment_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates/{gate_id}/rules/{id}", + "operation_id": "delete_deployment_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "gate_id": { + "required": True, + "openapi_types": (str,), + "attribute": "gate_id", + "location": "path", + }, + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_deployment_gate_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentGateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates/{id}", + "operation_id": "get_deployment_gate", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_deployment_gate_rules_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentGateRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates/{gate_id}/rules", + "operation_id": "get_deployment_gate_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "gate_id": { + "required": True, + "openapi_types": (str,), + "attribute": "gate_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_deployment_gates_evaluation_result_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentGatesEvaluationResultResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployments/gates/evaluation/{id}", + "operation_id": "get_deployment_gates_evaluation_result", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_deployment_rule_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates/{gate_id}/rules/{id}", + "operation_id": "get_deployment_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "gate_id": { + "required": True, + "openapi_types": (str,), + "attribute": "gate_id", + "location": "path", + }, + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_deployment_gates_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentGatesListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates", + "operation_id": "list_deployment_gates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._trigger_deployment_gates_evaluation_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentGatesEvaluationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployments/gates/evaluation", + "operation_id": "trigger_deployment_gates_evaluation", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DeploymentGatesEvaluationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_deployment_gate_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentGateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates/{id}", + "operation_id": "update_deployment_gate", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateDeploymentGateParams,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_deployment_rule_endpoint = _Endpoint( + settings={ + "response_type": (DeploymentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/deployment_gates/{gate_id}/rules/{id}", + "operation_id": "update_deployment_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "gate_id": { + "required": True, + "openapi_types": (str,), + "attribute": "gate_id", + "location": "path", + }, + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateDeploymentRuleParams,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_deployment_gate(self, body: CreateDeploymentGateParams, ) -> DeploymentGateResponse: + """Create deployment gate. + + Endpoint to create a deployment gate. + + :type body: CreateDeploymentGateParams + :rtype: DeploymentGateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_deployment_gate_endpoint.call_with_http_info(**kwargs) + + def create_deployment_rule(self, gate_id: str, body: CreateDeploymentRuleParams, ) -> DeploymentRuleResponse: + """Create deployment rule. + + Endpoint to create a deployment rule. A gate for the rule must already exist. + + :param gate_id: The ID of the deployment gate. + :type gate_id: str + :type body: CreateDeploymentRuleParams + :rtype: DeploymentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["gate_id"] = gate_id + + kwargs["body"] = body + + return self._create_deployment_rule_endpoint.call_with_http_info(**kwargs) + + def delete_deployment_gate(self, id: str, ) -> None: + """Delete deployment gate. + + Endpoint to delete a deployment gate. Rules associated with the gate are also deleted. + + :param id: The ID of the deployment gate. + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._delete_deployment_gate_endpoint.call_with_http_info(**kwargs) + + def delete_deployment_rule(self, gate_id: str, id: str, ) -> None: + """Delete deployment rule. + + Endpoint to delete a deployment rule. + + :param gate_id: The ID of the deployment gate. + :type gate_id: str + :param id: The ID of the deployment rule. + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["gate_id"] = gate_id + + kwargs["id"] = id + + return self._delete_deployment_rule_endpoint.call_with_http_info(**kwargs) + + def get_deployment_gate(self, id: str, ) -> DeploymentGateResponse: + """Get deployment gate. + + Endpoint to get a deployment gate. + + :param id: The ID of the deployment gate. + :type id: str + :rtype: DeploymentGateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_deployment_gate_endpoint.call_with_http_info(**kwargs) + + def get_deployment_gate_rules(self, gate_id: str, ) -> DeploymentGateRulesResponse: + """Get rules for a deployment gate. + + Endpoint to get rules for a deployment gate. + + :param gate_id: The ID of the deployment gate. + :type gate_id: str + :rtype: DeploymentGateRulesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["gate_id"] = gate_id + + return self._get_deployment_gate_rules_endpoint.call_with_http_info(**kwargs) + + def get_deployment_gates_evaluation_result(self, id: UUID, ) -> DeploymentGatesEvaluationResultResponse: + """Get a deployment gate evaluation result. + + Retrieves the result of a deployment gate evaluation by its evaluation ID. + If the evaluation is still in progress, ``data.attributes.gate_status`` will be ``in_progress`` ; + continue polling until it returns ``pass`` or ``fail``. + Polling every 10-20 seconds is recommended. + The endpoint may return a 404 if called too soon after triggering; retry after a few seconds. + + :param id: The evaluation ID returned by the trigger endpoint. + :type id: UUID + :rtype: DeploymentGatesEvaluationResultResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_deployment_gates_evaluation_result_endpoint.call_with_http_info(**kwargs) + + def get_deployment_rule(self, gate_id: str, id: str, ) -> DeploymentRuleResponse: + """Get deployment rule. + + Endpoint to get a deployment rule. + + :param gate_id: The ID of the deployment gate. + :type gate_id: str + :param id: The ID of the deployment rule. + :type id: str + :rtype: DeploymentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["gate_id"] = gate_id + + kwargs["id"] = id + + return self._get_deployment_rule_endpoint.call_with_http_info(**kwargs) + + def list_deployment_gates(self, *, page_cursor: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> DeploymentGatesListResponse: + """Get all deployment gates. + + Returns a paginated list of all deployment gates for the organization. + Use ``page[cursor]`` and ``page[size]`` query parameters to paginate through results. + + :param page_cursor: Cursor for pagination. Use the ``meta.page.next_cursor`` value from the previous response. + :type page_cursor: str, optional + :param page_size: Number of results per page. Defaults to 50. Must be between 1 and 1000. + :type page_size: int, optional + :rtype: DeploymentGatesListResponse + """ + kwargs: Dict[str, Any] = {} + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_size is not unset: + kwargs["page_size"] = page_size + + return self._list_deployment_gates_endpoint.call_with_http_info(**kwargs) + + def trigger_deployment_gates_evaluation(self, body: DeploymentGatesEvaluationRequest, ) -> DeploymentGatesEvaluationResponse: + """Trigger a deployment gate evaluation. + + Triggers an asynchronous deployment gate evaluation for the given service and environment. + Returns an evaluation ID that can be used to poll for the result via the + ``GET /api/v2/deployments/gates/evaluation/{id}`` endpoint. + + When the ``configuration`` attribute is provided, rules are evaluated inline from that configuration + and no pre-configured gate is required. When ``configuration`` is omitted, rules are resolved from the + gate pre-configured for the given service and environment through the Datadog UI, API, or Terraform. + + :type body: DeploymentGatesEvaluationRequest + :rtype: DeploymentGatesEvaluationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._trigger_deployment_gates_evaluation_endpoint.call_with_http_info(**kwargs) + + def update_deployment_gate(self, id: str, body: UpdateDeploymentGateParams, ) -> DeploymentGateResponse: + """Update deployment gate. + + Endpoint to update a deployment gate. + + :param id: The ID of the deployment gate. + :type id: str + :type body: UpdateDeploymentGateParams + :rtype: DeploymentGateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._update_deployment_gate_endpoint.call_with_http_info(**kwargs) + + def update_deployment_rule(self, gate_id: str, id: str, body: UpdateDeploymentRuleParams, ) -> DeploymentRuleResponse: + """Update deployment rule. + + Endpoint to update a deployment rule. + + :param gate_id: The ID of the deployment gate. + :type gate_id: str + :param id: The ID of the deployment rule. + :type id: str + :type body: UpdateDeploymentRuleParams + :rtype: DeploymentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["gate_id"] = gate_id + + kwargs["id"] = id + + kwargs["body"] = body + + return self._update_deployment_rule_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/domain_allowlist_api.py b/datadog_api_client/v2/api/domain_allowlist_api.py new file mode 100644 index 0000000000..63e639e4c0 --- /dev/null +++ b/datadog_api_client/v2/api/domain_allowlist_api.py @@ -0,0 +1,99 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.domain_allowlist_response import DomainAllowlistResponse +from datadog_api_client.v2.model.domain_allowlist_request import DomainAllowlistRequest + + +class DomainAllowlistApi: + """ + Configure your Datadog Email Domain Allowlist directly through the Datadog API. + The Email Domain Allowlist controls the domains that certain datadog emails can be sent to. + For more information, see the `Domain Allowlist docs page `_ + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_domain_allowlist_endpoint = _Endpoint( + settings={ + "response_type": (DomainAllowlistResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/domain_allowlist", + "operation_id": "get_domain_allowlist", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._patch_domain_allowlist_endpoint = _Endpoint( + settings={ + "response_type": (DomainAllowlistResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/domain_allowlist", + "operation_id": "patch_domain_allowlist", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DomainAllowlistRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def get_domain_allowlist(self, ) -> DomainAllowlistResponse: + """Get Domain Allowlist. + + Get the domain allowlist for an organization. + + :rtype: DomainAllowlistResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_domain_allowlist_endpoint.call_with_http_info(**kwargs) + + def patch_domain_allowlist(self, body: DomainAllowlistRequest, ) -> DomainAllowlistResponse: + """Sets Domain Allowlist. + + Update the domain allowlist for an organization. + + :type body: DomainAllowlistRequest + :rtype: DomainAllowlistResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._patch_domain_allowlist_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/dora_metrics_api.py b/datadog_api_client/v2/api/dora_metrics_api.py new file mode 100644 index 0000000000..d87b67ae67 --- /dev/null +++ b/datadog_api_client/v2/api/dora_metrics_api.py @@ -0,0 +1,469 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.dora_deployment_response import DORADeploymentResponse +from datadog_api_client.v2.model.dora_deployment_request import DORADeploymentRequest +from datadog_api_client.v2.model.dora_deployment_patch_by_version_request import DORADeploymentPatchByVersionRequest +from datadog_api_client.v2.model.dora_deployments_list_response import DORADeploymentsListResponse +from datadog_api_client.v2.model.dora_list_deployments_request import DORAListDeploymentsRequest +from datadog_api_client.v2.model.dora_deployment_fetch_response import DORADeploymentFetchResponse +from datadog_api_client.v2.model.dora_deployment_patch_request import DORADeploymentPatchRequest +from datadog_api_client.v2.model.dora_failure_response import DORAFailureResponse +from datadog_api_client.v2.model.dora_failure_request import DORAFailureRequest +from datadog_api_client.v2.model.dora_failures_list_response import DORAFailuresListResponse +from datadog_api_client.v2.model.dora_list_failures_request import DORAListFailuresRequest +from datadog_api_client.v2.model.dora_failure_fetch_response import DORAFailureFetchResponse + + +class DORAMetricsApi: + """ + Search, send, or delete events for DORA Metrics to measure and improve your software delivery performance. See the `DORA Metrics page `_ for more information. + + **Note** : DORA Metrics are not available in the US1-FED site. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_dora_deployment_endpoint = _Endpoint( + settings={ + "response_type": (DORADeploymentResponse,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v2/dora/deployment", + "operation_id": "create_dora_deployment", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DORADeploymentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_dora_failure_endpoint = _Endpoint( + settings={ + "response_type": (DORAFailureResponse,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v2/dora/failure", + "operation_id": "create_dora_failure", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DORAFailureRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_dora_incident_endpoint = _Endpoint( + settings={ + "response_type": (DORAFailureResponse,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v2/dora/incident", + "operation_id": "create_dora_incident", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DORAFailureRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_dora_deployment_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dora/deployment/{deployment_id}", + "operation_id": "delete_dora_deployment", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "deployment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "deployment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_dora_failure_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dora/failure/{failure_id}", + "operation_id": "delete_dora_failure", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "failure_id": { + "required": True, + "openapi_types": (str,), + "attribute": "failure_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_dora_deployment_endpoint = _Endpoint( + settings={ + "response_type": (DORADeploymentFetchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dora/deployments/{deployment_id}", + "operation_id": "get_dora_deployment", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "deployment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "deployment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_dora_failure_endpoint = _Endpoint( + settings={ + "response_type": (DORAFailureFetchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dora/failures/{failure_id}", + "operation_id": "get_dora_failure", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "failure_id": { + "required": True, + "openapi_types": (str,), + "attribute": "failure_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_dora_deployments_endpoint = _Endpoint( + settings={ + "response_type": (DORADeploymentsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dora/deployments", + "operation_id": "list_dora_deployments", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DORAListDeploymentsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_dora_failures_endpoint = _Endpoint( + settings={ + "response_type": (DORAFailuresListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dora/failures", + "operation_id": "list_dora_failures", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DORAListFailuresRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._patch_dora_deployment_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dora/deployments/{deployment_id}", + "operation_id": "patch_dora_deployment", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "deployment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "deployment_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (DORADeploymentPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._patch_dora_deployment_by_version_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/dora/deployments", + "operation_id": "patch_dora_deployment_by_version", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DORADeploymentPatchByVersionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_dora_deployment(self, body: DORADeploymentRequest, ) -> DORADeploymentResponse: + """Send a deployment event. + + Use this API endpoint to provide deployment data. + + This is necessary for: + + * Deployment Frequency + * Change Lead Time + * Change Failure Rate + * Failed Deployment Recovery Time + + :type body: DORADeploymentRequest + :rtype: DORADeploymentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_dora_deployment_endpoint.call_with_http_info(**kwargs) + + def create_dora_failure(self, body: DORAFailureRequest, ) -> DORAFailureResponse: + """Send an incident event. + + Use this API endpoint to provide incident data for DORA Metrics. + Note that change failure rate and failed deployment recovery time are computed from change failures detected on deployments, not from incident events sent through this endpoint. + Tracking incidents gives a side-by-side view of how failed deployments translate into real-world incidents, including their severity and frequency. + + :type body: DORAFailureRequest + :rtype: DORAFailureResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_dora_failure_endpoint.call_with_http_info(**kwargs) + + def create_dora_incident(self, body: DORAFailureRequest, ) -> DORAFailureResponse: + """Send an incident event (legacy). **Deprecated**. + + **Note** : This endpoint is deprecated. Please use ``/api/v2/dora/failure`` instead. + + Use this API endpoint to provide incident data. + Tracking incidents gives a side-by-side view of how failed deployments translate into real-world incidents. + + :type body: DORAFailureRequest + :rtype: DORAFailureResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_dora_incident is deprecated", DeprecationWarning, stacklevel=2) + return self._create_dora_incident_endpoint.call_with_http_info(**kwargs) + + def delete_dora_deployment(self, deployment_id: str, ) -> None: + """Delete a deployment event. + + Use this API endpoint to delete a deployment event. + + :param deployment_id: The ID of the deployment event to delete. + :type deployment_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["deployment_id"] = deployment_id + + return self._delete_dora_deployment_endpoint.call_with_http_info(**kwargs) + + def delete_dora_failure(self, failure_id: str, ) -> None: + """Delete an incident event. + + Use this API endpoint to delete an incident event. + + :param failure_id: The ID of the incident event to delete. + :type failure_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["failure_id"] = failure_id + + return self._delete_dora_failure_endpoint.call_with_http_info(**kwargs) + + def get_dora_deployment(self, deployment_id: str, ) -> DORADeploymentFetchResponse: + """Get a deployment event. + + Use this API endpoint to get a deployment event. + + :param deployment_id: The ID of the deployment event. + :type deployment_id: str + :rtype: DORADeploymentFetchResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["deployment_id"] = deployment_id + + return self._get_dora_deployment_endpoint.call_with_http_info(**kwargs) + + def get_dora_failure(self, failure_id: str, ) -> DORAFailureFetchResponse: + """Get an incident event. + + Use this API endpoint to get an incident event. + + :param failure_id: The ID of the incident event. + :type failure_id: str + :rtype: DORAFailureFetchResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["failure_id"] = failure_id + + return self._get_dora_failure_endpoint.call_with_http_info(**kwargs) + + def list_dora_deployments(self, body: DORAListDeploymentsRequest, ) -> DORADeploymentsListResponse: + """Get a list of deployment events. + + Use this API endpoint to get a list of deployment events. + + :type body: DORAListDeploymentsRequest + :rtype: DORADeploymentsListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._list_dora_deployments_endpoint.call_with_http_info(**kwargs) + + def list_dora_failures(self, body: DORAListFailuresRequest, ) -> DORAFailuresListResponse: + """Get a list of incident events. + + Use this API endpoint to get a list of incident events. + + :type body: DORAListFailuresRequest + :rtype: DORAFailuresListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._list_dora_failures_endpoint.call_with_http_info(**kwargs) + + def patch_dora_deployment(self, deployment_id: str, body: DORADeploymentPatchRequest, ) -> None: + """Patch a deployment event. + + Update a deployment's change failure status. Use this to mark a deployment as a change failure or back to stable. You can optionally include remediation details to enable failed deployment recovery time calculation. + + :param deployment_id: The ID of the deployment event. + :type deployment_id: str + :type body: DORADeploymentPatchRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["deployment_id"] = deployment_id + + kwargs["body"] = body + + return self._patch_dora_deployment_endpoint.call_with_http_info(**kwargs) + + def patch_dora_deployment_by_version(self, body: DORADeploymentPatchByVersionRequest, ) -> None: + """Patch a deployment event by version. + + Update a deployment's change failure status, identifying the deployment by its service, environment, and version instead of its ID. Use this to mark a deployment as a change failure or back to stable. You can optionally include remediation details to enable failed deployment recovery time calculation. If multiple deployments match the given service, environment, and version, the most recently finished one is updated. + + :type body: DORADeploymentPatchByVersionRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._patch_dora_deployment_by_version_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/downtimes_api.py b/datadog_api_client/v2/api/downtimes_api.py new file mode 100644 index 0000000000..ff63d2f6fb --- /dev/null +++ b/datadog_api_client/v2/api/downtimes_api.py @@ -0,0 +1,419 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_downtimes_response import ListDowntimesResponse +from datadog_api_client.v2.model.downtime_response_data import DowntimeResponseData +from datadog_api_client.v2.model.downtime_response import DowntimeResponse +from datadog_api_client.v2.model.downtime_create_request import DowntimeCreateRequest +from datadog_api_client.v2.model.downtime_update_request import DowntimeUpdateRequest +from datadog_api_client.v2.model.monitor_downtime_match_response import MonitorDowntimeMatchResponse +from datadog_api_client.v2.model.monitor_downtime_match_response_data import MonitorDowntimeMatchResponseData + + +class DowntimesApi: + """ + **Note** : Downtime V2 is currently in private beta. To request access, contact `Datadog support `_. + + `Downtiming `_ gives + you greater control over monitor notifications by allowing you to globally exclude + scopes from alerting. Downtime settings, which can be scheduled with start and + end times, prevent all alerting related to specified Datadog tags. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._cancel_downtime_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/downtime/{downtime_id}", + "operation_id": "cancel_downtime", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (str,), + "attribute": "downtime_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._create_downtime_endpoint = _Endpoint( + settings={ + "response_type": (DowntimeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/downtime", + "operation_id": "create_downtime", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DowntimeCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_downtime_endpoint = _Endpoint( + settings={ + "response_type": (DowntimeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/downtime/{downtime_id}", + "operation_id": "get_downtime", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (str,), + "attribute": "downtime_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_downtimes_endpoint = _Endpoint( + settings={ + "response_type": (ListDowntimesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/downtime", + "operation_id": "list_downtimes", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "current_only": { + "openapi_types": (bool,), + "attribute": "current_only", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_monitor_downtimes_endpoint = _Endpoint( + settings={ + "response_type": (MonitorDowntimeMatchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/monitor/{monitor_id}/downtime_matches", + "operation_id": "list_monitor_downtimes", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "monitor_id": { + "required": True, + "openapi_types": (int,), + "attribute": "monitor_id", + "location": "path", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_downtime_endpoint = _Endpoint( + settings={ + "response_type": (DowntimeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/downtime/{downtime_id}", + "operation_id": "update_downtime", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (str,), + "attribute": "downtime_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (DowntimeUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def cancel_downtime(self, downtime_id: str, ) -> None: + """Cancel a downtime. + + Cancel a downtime. + + **Note** : Downtimes canceled through the API are no longer active, but are retained for approximately two days before being permanently removed. The downtime may still appear in search results until it is permanently removed. + + :param downtime_id: ID of the downtime to cancel. + :type downtime_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + return self._cancel_downtime_endpoint.call_with_http_info(**kwargs) + + def create_downtime(self, body: DowntimeCreateRequest, ) -> DowntimeResponse: + """Schedule a downtime. + + Schedule a downtime. + + :param body: Schedule a downtime request body. + :type body: DowntimeCreateRequest + :rtype: DowntimeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_downtime_endpoint.call_with_http_info(**kwargs) + + def get_downtime(self, downtime_id: str, *, include: Union[str, UnsetType]=unset, ) -> DowntimeResponse: + """Get a downtime. + + Get downtime detail by ``downtime_id``. + + :param downtime_id: ID of the downtime to fetch. + :type downtime_id: str + :param include: Comma-separated list of resource paths for related resources to include in the response. Supported resource + paths are ``created_by`` and ``monitor``. + :type include: str, optional + :rtype: DowntimeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + if include is not unset: + kwargs["include"] = include + + return self._get_downtime_endpoint.call_with_http_info(**kwargs) + + def list_downtimes(self, *, current_only: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> ListDowntimesResponse: + """Get all downtimes. + + Get all scheduled downtimes. + + :param current_only: Only return downtimes that are active when the request is made. + :type current_only: bool, optional + :param include: Comma-separated list of resource paths for related resources to include in the response. Supported resource + paths are ``created_by`` and ``monitor``. + :type include: str, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of downtimes in the response. + :type page_limit: int, optional + :rtype: ListDowntimesResponse + """ + kwargs: Dict[str, Any] = {} + if current_only is not unset: + kwargs["current_only"] = current_only + + if include is not unset: + kwargs["include"] = include + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_downtimes_endpoint.call_with_http_info(**kwargs) + + def list_downtimes_with_pagination(self, *, current_only: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[DowntimeResponseData]: + """Get all downtimes. + + Provide a paginated version of :meth:`list_downtimes`, returning all items. + + :param current_only: Only return downtimes that are active when the request is made. + :type current_only: bool, optional + :param include: Comma-separated list of resource paths for related resources to include in the response. Supported resource + paths are ``created_by`` and ``monitor``. + :type include: str, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of downtimes in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[DowntimeResponseData] + """ + kwargs: Dict[str, Any] = {} + if current_only is not unset: + kwargs["current_only"] = current_only + + if include is not unset: + kwargs["include"] = include + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 30) + endpoint = self._list_downtimes_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_monitor_downtimes(self, monitor_id: int, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> MonitorDowntimeMatchResponse: + """Get active downtimes for a monitor. + + Get all active downtimes for the specified monitor. + + :param monitor_id: The id of the monitor. + :type monitor_id: int + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of downtimes in the response. + :type page_limit: int, optional + :rtype: MonitorDowntimeMatchResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["monitor_id"] = monitor_id + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_monitor_downtimes_endpoint.call_with_http_info(**kwargs) + + def list_monitor_downtimes_with_pagination(self, monitor_id: int, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[MonitorDowntimeMatchResponseData]: + """Get active downtimes for a monitor. + + Provide a paginated version of :meth:`list_monitor_downtimes`, returning all items. + + :param monitor_id: The id of the monitor. + :type monitor_id: int + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of downtimes in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[MonitorDowntimeMatchResponseData] + """ + kwargs: Dict[str, Any] = {} + kwargs["monitor_id"] = monitor_id + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 30) + endpoint = self._list_monitor_downtimes_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_downtime(self, downtime_id: str, body: DowntimeUpdateRequest, ) -> DowntimeResponse: + """Update a downtime. + + Update a downtime by ``downtime_id``. + + :param downtime_id: ID of the downtime to update. + :type downtime_id: str + :param body: Update a downtime request body. + :type body: DowntimeUpdateRequest + :rtype: DowntimeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + kwargs["body"] = body + + return self._update_downtime_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/entity_integration_configs_api.py b/datadog_api_client/v2/api/entity_integration_configs_api.py new file mode 100644 index 0000000000..c88ed61fe9 --- /dev/null +++ b/datadog_api_client/v2/api/entity_integration_configs_api.py @@ -0,0 +1,158 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.entity_integration_config_response import EntityIntegrationConfigResponse +from datadog_api_client.v2.model.entity_integration_config_request import EntityIntegrationConfigRequest + + +class EntityIntegrationConfigsApi: + """ + Manage per-integration configurations for the Internal Developer Portal (IDP). These configurations control which external resources (for example, GitHub repositories, Jira projects, or PagerDuty services) are synced as entities into the Software Catalog. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_entity_integration_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/idp/entity_integrations/{integration_id}", + "operation_id": "delete_entity_integration_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "integration_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_entity_integration_config_endpoint = _Endpoint( + settings={ + "response_type": (EntityIntegrationConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/idp/entity_integrations/{integration_id}", + "operation_id": "get_entity_integration_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "integration_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_entity_integration_config_endpoint = _Endpoint( + settings={ + "response_type": (EntityIntegrationConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/idp/entity_integrations/{integration_id}", + "operation_id": "update_entity_integration_config", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "integration_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (EntityIntegrationConfigRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def delete_entity_integration_config(self, integration_id: str, ) -> None: + """Delete an entity integration configuration. + + Delete the configuration stored for a given integration in the caller's organization. + + :param integration_id: The identifier of the integration whose configuration is being managed. Supported values are ``github`` , ``jira`` , and ``pagerduty``. + :type integration_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_id"] = integration_id + + return self._delete_entity_integration_config_endpoint.call_with_http_info(**kwargs) + + def get_entity_integration_config(self, integration_id: str, ) -> EntityIntegrationConfigResponse: + """Get an entity integration configuration. + + Retrieve the configuration currently stored for a given integration in the caller's organization. + + :param integration_id: The identifier of the integration whose configuration is being managed. Supported values are ``github`` , ``jira`` , and ``pagerduty``. + :type integration_id: str + :rtype: EntityIntegrationConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_id"] = integration_id + + return self._get_entity_integration_config_endpoint.call_with_http_info(**kwargs) + + def update_entity_integration_config(self, integration_id: str, body: EntityIntegrationConfigRequest, ) -> EntityIntegrationConfigResponse: + """Create or update entity integration configuration. + + Create or replace the configuration for a given integration in the caller's organization. The shape of ``data.attributes.config`` depends on the integration: + + * For ``github`` : ``config`` must contain an ``enabled_repos`` array of objects with ``hostname`` , ``github_org_name`` , and ``repo_name``. + * For ``jira`` : ``config`` must contain an ``enabled_projects`` array of objects with ``hostname`` , ``account_id`` , and ``project_key``. + * For ``pagerduty`` : ``config`` must contain an ``accounts`` array of objects with a required ``enabled`` boolean and an optional ``subdomain`` string. + + :param integration_id: The identifier of the integration whose configuration is being managed. Supported values are ``github`` , ``jira`` , and ``pagerduty``. + :type integration_id: str + :type body: EntityIntegrationConfigRequest + :rtype: EntityIntegrationConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_id"] = integration_id + + kwargs["body"] = body + + return self._update_entity_integration_config_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/entity_risk_scores_api.py b/datadog_api_client/v2/api/entity_risk_scores_api.py new file mode 100644 index 0000000000..e7bed7061e --- /dev/null +++ b/datadog_api_client/v2/api/entity_risk_scores_api.py @@ -0,0 +1,181 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.security_entity_risk_scores_response import SecurityEntityRiskScoresResponse +from datadog_api_client.v2.model.security_entity_risk_score_response import SecurityEntityRiskScoreResponse + + +class EntityRiskScoresApi: + """ + Retrieves security risk scores for entities in your organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_entity_risk_score_endpoint = _Endpoint( + settings={ + "response_type": (SecurityEntityRiskScoreResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security-entities/risk-scores/{entity_id}", + "operation_id": "get_entity_risk_score", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "entity_id": { + "required": True, + "openapi_types": (str,), + "attribute": "entity_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_entity_risk_scores_endpoint = _Endpoint( + settings={ + "response_type": (SecurityEntityRiskScoresResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security-entities/risk-scores", + "operation_id": "list_entity_risk_scores", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "_from": { + "openapi_types": (int,), + "attribute": "from", + "location": "query", + }, + "to": { + "openapi_types": (int,), + "attribute": "to", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_query_id": { + "openapi_types": (str,), + "attribute": "page[queryId]", + "location": "query", + }, + "filter_sort": { + "openapi_types": (str,), + "attribute": "filter[sort]", + "location": "query", + }, + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "entity_type": { + "openapi_types": ([str],), + "attribute": "entityType", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_entity_risk_score(self, entity_id: str, ) -> SecurityEntityRiskScoreResponse: + """Get Entity Risk Score. + + Get the risk score for a specific entity by its ID. Returns security risk assessment including risk score, severity, detected signals, misconfigurations, and identity risks. + + :param entity_id: The URL-encoded unique identifier for the entity. + :type entity_id: str + :rtype: SecurityEntityRiskScoreResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["entity_id"] = entity_id + + return self._get_entity_risk_score_endpoint.call_with_http_info(**kwargs) + + def list_entity_risk_scores(self, *, _from: Union[int, UnsetType]=unset, to: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, page_query_id: Union[str, UnsetType]=unset, filter_sort: Union[str, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, entity_type: Union[List[str], UnsetType]=unset, ) -> SecurityEntityRiskScoresResponse: + """List Entity Risk Scores. + + Get a list of entity risk scores for your organization. Entity risk scores provide security risk assessment for entities like cloud resources, identities, or services based on detected signals, misconfigurations, and identity risks. + + :param _from: Start time for the query in Unix timestamp (milliseconds). Defaults to 2 weeks ago. + :type _from: int, optional + :param to: End time for the query in Unix timestamp (milliseconds). Defaults to now. + :type to: int, optional + :param page_size: Size of the page to return. Maximum is 1000. + :type page_size: int, optional + :param page_number: Page number to return (1-indexed). + :type page_number: int, optional + :param page_query_id: Query ID for pagination consistency. + :type page_query_id: str, optional + :param filter_sort: Sort order for results. Format: ``field:direction`` where direction is ``asc`` or ``desc``. + Supported fields: ``riskScore`` , ``lastDetected`` , ``firstDetected`` , ``entityName`` , ``signalsDetected``. + :type filter_sort: str, optional + :param filter_query: Supports filtering by entity attributes, risk scores, severity, and more. + Example: ``severity:critical AND entityType:aws_iam_user`` + :type filter_query: str, optional + :param entity_type: Filter by entity type(s). Can specify multiple values. + :type entity_type: [str], optional + :rtype: SecurityEntityRiskScoresResponse + """ + kwargs: Dict[str, Any] = {} + if _from is not unset: + kwargs["_from"] = _from + + if to is not unset: + kwargs["to"] = to + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_query_id is not unset: + kwargs["page_query_id"] = page_query_id + + if filter_sort is not unset: + kwargs["filter_sort"] = filter_sort + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if entity_type is not unset: + kwargs["entity_type"] = entity_type + + return self._list_entity_risk_scores_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/error_tracking_api.py b/datadog_api_client/v2/api/error_tracking_api.py new file mode 100644 index 0000000000..7320b5d3d6 --- /dev/null +++ b/datadog_api_client/v2/api/error_tracking_api.py @@ -0,0 +1,266 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.issues_search_response import IssuesSearchResponse +from datadog_api_client.v2.model.search_issues_include_query_parameter_item import SearchIssuesIncludeQueryParameterItem +from datadog_api_client.v2.model.issues_search_request import IssuesSearchRequest +from datadog_api_client.v2.model.issue_response import IssueResponse +from datadog_api_client.v2.model.get_issue_include_query_parameter_item import GetIssueIncludeQueryParameterItem +from datadog_api_client.v2.model.issue_update_assignee_request import IssueUpdateAssigneeRequest +from datadog_api_client.v2.model.issue_update_state_request import IssueUpdateStateRequest + + +class ErrorTrackingApi: + """ + View and manage issues within Error Tracking. See the `Error Tracking page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_issue_assignee_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/error-tracking/issues/{issue_id}/assignee", + "operation_id": "delete_issue_assignee", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "issue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "issue_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_issue_endpoint = _Endpoint( + settings={ + "response_type": (IssueResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/error-tracking/issues/{issue_id}", + "operation_id": "get_issue", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "issue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "issue_id", + "location": "path", + }, + "include": { + "openapi_types": ([GetIssueIncludeQueryParameterItem],), + "attribute": "include", + "location": "query", + "collection_format": "csv", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_issues_endpoint = _Endpoint( + settings={ + "response_type": (IssuesSearchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/error-tracking/issues/search", + "operation_id": "search_issues", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": ([SearchIssuesIncludeQueryParameterItem],), + "attribute": "include", + "location": "query", + "collection_format": "csv", + }, + "body": { + "required": True, + "openapi_types": (IssuesSearchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_issue_assignee_endpoint = _Endpoint( + settings={ + "response_type": (IssueResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/error-tracking/issues/{issue_id}/assignee", + "operation_id": "update_issue_assignee", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "issue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "issue_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IssueUpdateAssigneeRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_issue_state_endpoint = _Endpoint( + settings={ + "response_type": (IssueResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/error-tracking/issues/{issue_id}/state", + "operation_id": "update_issue_state", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "issue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "issue_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IssueUpdateStateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def delete_issue_assignee(self, issue_id: str, ) -> None: + """Remove the assignee of an issue. + + Remove the assignee of an issue by ``issue_id``. + + :param issue_id: The identifier of the issue. + :type issue_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["issue_id"] = issue_id + + return self._delete_issue_assignee_endpoint.call_with_http_info(**kwargs) + + def get_issue(self, issue_id: str, *, include: Union[List[GetIssueIncludeQueryParameterItem], UnsetType]=unset, ) -> IssueResponse: + """Get the details of an error tracking issue. + + Retrieve the full details for a specific error tracking issue, including attributes and relationships. + + :param issue_id: The identifier of the issue. + :type issue_id: str + :param include: Comma-separated list of relationship objects that should be included in the response. Possible values are ``assignee`` , ``case`` , and ``team_owners``. + :type include: [GetIssueIncludeQueryParameterItem], optional + :rtype: IssueResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["issue_id"] = issue_id + + if include is not unset: + kwargs["include"] = include + + return self._get_issue_endpoint.call_with_http_info(**kwargs) + + def search_issues(self, body: IssuesSearchRequest, *, include: Union[List[SearchIssuesIncludeQueryParameterItem], UnsetType]=unset, ) -> IssuesSearchResponse: + """Search error tracking issues. + + Search issues endpoint allows you to programmatically search for issues within your organization. This endpoint returns a list of issues that match a given search query, following the event search syntax. The search results are limited to a maximum of 100 issues per request. + + :param body: Search issues request payload. + :type body: IssuesSearchRequest + :param include: Comma-separated list of relationship objects that should be included in the response. Possible values are ``issue`` , ``issue.assignee`` , ``issue.case`` , and ``issue.team_owners``. + :type include: [SearchIssuesIncludeQueryParameterItem], optional + :rtype: IssuesSearchResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._search_issues_endpoint.call_with_http_info(**kwargs) + + def update_issue_assignee(self, issue_id: str, body: IssueUpdateAssigneeRequest, ) -> IssueResponse: + """Update the assignee of an issue. + + Update the assignee of an issue by ``issue_id``. + + :param issue_id: The identifier of the issue. + :type issue_id: str + :param body: Update issue assignee request payload. + :type body: IssueUpdateAssigneeRequest + :rtype: IssueResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["issue_id"] = issue_id + + kwargs["body"] = body + + return self._update_issue_assignee_endpoint.call_with_http_info(**kwargs) + + def update_issue_state(self, issue_id: str, body: IssueUpdateStateRequest, ) -> IssueResponse: + """Update the state of an issue. + + Update the state of an issue by ``issue_id``. Use this endpoint to move an issue between states such as ``OPEN`` , ``RESOLVED`` , or ``IGNORED``. + + :param issue_id: The identifier of the issue. + :type issue_id: str + :param body: Update issue state request payload. + :type body: IssueUpdateStateRequest + :rtype: IssueResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["issue_id"] = issue_id + + kwargs["body"] = body + + return self._update_issue_state_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/events_api.py b/datadog_api_client/v2/api/events_api.py new file mode 100644 index 0000000000..70fc15b1dd --- /dev/null +++ b/datadog_api_client/v2/api/events_api.py @@ -0,0 +1,387 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.events_list_response import EventsListResponse +from datadog_api_client.v2.model.events_sort import EventsSort +from datadog_api_client.v2.model.event_response import EventResponse +from datadog_api_client.v2.model.event_create_response_payload import EventCreateResponsePayload +from datadog_api_client.v2.model.event_create_request_payload import EventCreateRequestPayload +from datadog_api_client.v2.model.events_list_request import EventsListRequest +from datadog_api_client.v2.model.v2_event_response import V2EventResponse + + +class EventsApi: + """ + The Event Management API allows you to programmatically post events to the Events Explorer and fetch events from the Events Explorer. See the `Event Management page `_ for more information. + + **Update to Datadog monitor events aggregation_key starting March 1, 2025:** The Datadog monitor events ``aggregation_key`` is unique to each Monitor ID. Starting March 1st, this key will also include Monitor Group, making it unique per *Monitor ID and Monitor Group*. If you're using monitor events ``aggregation_key`` in dashboard queries or the Event API, you must migrate to use ``@monitor.id``. Reach out to `support `_ if you have any question. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_event_endpoint = _Endpoint( + settings={ + "response_type": (EventCreateResponsePayload,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/events", + "operation_id": "create_event", + "http_method": "POST", + "version": "v2", + "servers": [ + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "The regional site for customers.", + "default_value": "datadoghq.com", + "enum_values": [ + "datadoghq.com", + "us3.datadoghq.com", + "us5.datadoghq.com", + "ap1.datadoghq.com", + "ap2.datadoghq.com", + "uk1.datadoghq.com", + "datadoghq.eu", + "ddog-gov.com", + "us2.ddog-gov.com", + ], + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "event-management-intake", + }, + }, + }, + { + "url": "{protocol}://{name}", + "variables": { + "name": { + "description": "Full site DNS name.", + "default_value": "event-management-intake.datadoghq.com", + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "Any Datadog deployment.", + "default_value": "datadoghq.com", + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "event-management-intake", + }, + }, + }, + ], + }, + params_map={ + "body": { + "required": True, + "openapi_types": (EventCreateRequestPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_event_endpoint = _Endpoint( + settings={ + "response_type": (V2EventResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/events/{event_id}", + "operation_id": "get_event", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "event_id": { + "required": True, + "openapi_types": (str,), + "attribute": "event_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_events_endpoint = _Endpoint( + settings={ + "response_type": (EventsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/events", + "operation_id": "list_events", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_from": { + "openapi_types": (str,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (str,), + "attribute": "filter[to]", + "location": "query", + }, + "sort": { + "openapi_types": (EventsSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_events_endpoint = _Endpoint( + settings={ + "response_type": (EventsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/events/search", + "operation_id": "search_events", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "openapi_types": (EventsListRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_event(self, body: EventCreateRequestPayload, ) -> EventCreateResponsePayload: + """Post an event. + + This endpoint allows you to publish events. + + **Note:** To utilize this endpoint with our client libraries, please ensure you are using the latest version released on or after July 1, 2025. Earlier versions do not support this functionality. + + **Important:** Upgrade to the latest client library version to use the updated endpoint at ``https://event-management-intake.{site}/api/v2/events``. Older client library versions of the Post an event (v2) API send requests to a deprecated endpoint ( ``https://api.{site}/api/v2/events`` ). + + ✅ **Only events with the change or alert category** are in General Availability. For change events, see `Change Tracking `_ for more details. + + ❌ For use cases involving other event categories, use the V1 endpoint or reach out to `support `_. + + :param body: Event creation request payload. + :type body: EventCreateRequestPayload + :rtype: EventCreateResponsePayload + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_event_endpoint.call_with_http_info(**kwargs) + + def get_event(self, event_id: str, ) -> V2EventResponse: + """Get an event. + + Get the details of an event by ``event_id``. + + :param event_id: The UID of the event. + :type event_id: str + :rtype: V2EventResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["event_id"] = event_id + + return self._get_event_endpoint.call_with_http_info(**kwargs) + + def list_events(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[str, UnsetType]=unset, filter_to: Union[str, UnsetType]=unset, sort: Union[EventsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> EventsListResponse: + """Get a list of events. + + List endpoint returns events that match an events search query. + `Results are paginated similarly to logs `_. + + Use this endpoint to see your latest events. + + :param filter_query: Search query following events syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events, in milliseconds. + :type filter_from: str, optional + :param filter_to: Maximum timestamp for requested events, in milliseconds. + :type filter_to: str, optional + :param sort: Order of events in results. + :type sort: EventsSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + :rtype: EventsListResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_events_endpoint.call_with_http_info(**kwargs) + + def list_events_with_pagination(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[str, UnsetType]=unset, filter_to: Union[str, UnsetType]=unset, sort: Union[EventsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[EventResponse]: + """Get a list of events. + + Provide a paginated version of :meth:`list_events`, returning all items. + + :param filter_query: Search query following events syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events, in milliseconds. + :type filter_from: str, optional + :param filter_to: Maximum timestamp for requested events, in milliseconds. + :type filter_to: str, optional + :param sort: Order of events in results. + :type sort: EventsSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[EventResponse] + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_events_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def search_events(self, *, body: Union[EventsListRequest, UnsetType]=unset, ) -> EventsListResponse: + """Search events. + + List endpoint returns events that match an events search query. + `Results are paginated similarly to logs `_. + + Use this endpoint to build complex events filtering and search. + + :type body: EventsListRequest, optional + :rtype: EventsListResponse + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + return self._search_events_endpoint.call_with_http_info(**kwargs) + + def search_events_with_pagination(self, *, body: Union[EventsListRequest, UnsetType]=unset, ) -> collections.abc.Iterable[EventResponse]: + """Search events. + + Provide a paginated version of :meth:`search_events`, returning all items. + + :type body: EventsListRequest, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[EventResponse] + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.page.limit", 10) + endpoint = self._search_events_endpoint + set_attribute_from_path(kwargs, "body.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.page.cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/fastly_integration_api.py b/datadog_api_client/v2/api/fastly_integration_api.py new file mode 100644 index 0000000000..926810f812 --- /dev/null +++ b/datadog_api_client/v2/api/fastly_integration_api.py @@ -0,0 +1,455 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.fastly_accounts_response import FastlyAccountsResponse +from datadog_api_client.v2.model.fastly_account_response import FastlyAccountResponse +from datadog_api_client.v2.model.fastly_account_create_request import FastlyAccountCreateRequest +from datadog_api_client.v2.model.fastly_account_update_request import FastlyAccountUpdateRequest +from datadog_api_client.v2.model.fastly_services_response import FastlyServicesResponse +from datadog_api_client.v2.model.fastly_service_response import FastlyServiceResponse +from datadog_api_client.v2.model.fastly_service_request import FastlyServiceRequest + + +class FastlyIntegrationApi: + """ + Manage your Datadog Fastly integration accounts and services directly through the Datadog API. See the `Fastly integration page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_fastly_account_endpoint = _Endpoint( + settings={ + "response_type": (FastlyAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts", + "operation_id": "create_fastly_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (FastlyAccountCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_fastly_service_endpoint = _Endpoint( + settings={ + "response_type": (FastlyServiceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts/{account_id}/services", + "operation_id": "create_fastly_service", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (FastlyServiceRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_fastly_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts/{account_id}", + "operation_id": "delete_fastly_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_fastly_service_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts/{account_id}/services/{service_id}", + "operation_id": "delete_fastly_service", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "service_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_fastly_account_endpoint = _Endpoint( + settings={ + "response_type": (FastlyAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts/{account_id}", + "operation_id": "get_fastly_account", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_fastly_service_endpoint = _Endpoint( + settings={ + "response_type": (FastlyServiceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts/{account_id}/services/{service_id}", + "operation_id": "get_fastly_service", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "service_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_fastly_accounts_endpoint = _Endpoint( + settings={ + "response_type": (FastlyAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts", + "operation_id": "list_fastly_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_fastly_services_endpoint = _Endpoint( + settings={ + "response_type": (FastlyServicesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts/{account_id}/services", + "operation_id": "list_fastly_services", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_fastly_account_endpoint = _Endpoint( + settings={ + "response_type": (FastlyAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts/{account_id}", + "operation_id": "update_fastly_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (FastlyAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_fastly_service_endpoint = _Endpoint( + settings={ + "response_type": (FastlyServiceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/fastly/accounts/{account_id}/services/{service_id}", + "operation_id": "update_fastly_service", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "service_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (FastlyServiceRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_fastly_account(self, body: FastlyAccountCreateRequest, ) -> FastlyAccountResponse: + """Add Fastly account. + + Create a Fastly account. + + :type body: FastlyAccountCreateRequest + :rtype: FastlyAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_fastly_account_endpoint.call_with_http_info(**kwargs) + + def create_fastly_service(self, account_id: str, body: FastlyServiceRequest, ) -> FastlyServiceResponse: + """Add Fastly service. + + Create a Fastly service for an account. + + :param account_id: Fastly Account id. + :type account_id: str + :type body: FastlyServiceRequest + :rtype: FastlyServiceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._create_fastly_service_endpoint.call_with_http_info(**kwargs) + + def delete_fastly_account(self, account_id: str, ) -> None: + """Delete Fastly account. + + Delete a Fastly account. + + :param account_id: Fastly Account id. + :type account_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._delete_fastly_account_endpoint.call_with_http_info(**kwargs) + + def delete_fastly_service(self, account_id: str, service_id: str, ) -> None: + """Delete Fastly service. + + Delete a Fastly service for an account. + + :param account_id: Fastly Account id. + :type account_id: str + :param service_id: Fastly Service ID. + :type service_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["service_id"] = service_id + + return self._delete_fastly_service_endpoint.call_with_http_info(**kwargs) + + def get_fastly_account(self, account_id: str, ) -> FastlyAccountResponse: + """Get Fastly account. + + Get a Fastly account. + + :param account_id: Fastly Account id. + :type account_id: str + :rtype: FastlyAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._get_fastly_account_endpoint.call_with_http_info(**kwargs) + + def get_fastly_service(self, account_id: str, service_id: str, ) -> FastlyServiceResponse: + """Get Fastly service. + + Get a Fastly service for an account. + + :param account_id: Fastly Account id. + :type account_id: str + :param service_id: Fastly Service ID. + :type service_id: str + :rtype: FastlyServiceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["service_id"] = service_id + + return self._get_fastly_service_endpoint.call_with_http_info(**kwargs) + + def list_fastly_accounts(self, ) -> FastlyAccountsResponse: + """List Fastly accounts. + + List Fastly accounts. + + :rtype: FastlyAccountsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_fastly_accounts_endpoint.call_with_http_info(**kwargs) + + def list_fastly_services(self, account_id: str, ) -> FastlyServicesResponse: + """List Fastly services. + + List Fastly services for an account. + + :param account_id: Fastly Account id. + :type account_id: str + :rtype: FastlyServicesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._list_fastly_services_endpoint.call_with_http_info(**kwargs) + + def update_fastly_account(self, account_id: str, body: FastlyAccountUpdateRequest, ) -> FastlyAccountResponse: + """Update Fastly account. + + Update a Fastly account. + + :param account_id: Fastly Account id. + :type account_id: str + :type body: FastlyAccountUpdateRequest + :rtype: FastlyAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._update_fastly_account_endpoint.call_with_http_info(**kwargs) + + def update_fastly_service(self, account_id: str, service_id: str, body: FastlyServiceRequest, ) -> FastlyServiceResponse: + """Update Fastly service. + + Update a Fastly service for an account. + + :param account_id: Fastly Account id. + :type account_id: str + :param service_id: Fastly Service ID. + :type service_id: str + :type body: FastlyServiceRequest + :rtype: FastlyServiceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["service_id"] = service_id + + kwargs["body"] = body + + return self._update_fastly_service_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/feature_flags_api.py b/datadog_api_client/v2/api/feature_flags_api.py new file mode 100644 index 0000000000..6958d9ca44 --- /dev/null +++ b/datadog_api_client/v2/api/feature_flags_api.py @@ -0,0 +1,1076 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_feature_flags_response import ListFeatureFlagsResponse +from datadog_api_client.v2.model.feature_flag_response import FeatureFlagResponse +from datadog_api_client.v2.model.create_feature_flag_request import CreateFeatureFlagRequest +from datadog_api_client.v2.model.list_environments_response import ListEnvironmentsResponse +from datadog_api_client.v2.model.environment_response import EnvironmentResponse +from datadog_api_client.v2.model.create_environment_request import CreateEnvironmentRequest +from datadog_api_client.v2.model.update_environment_request import UpdateEnvironmentRequest +from datadog_api_client.v2.model.allocation_exposure_schedule_response import AllocationExposureScheduleResponse +from datadog_api_client.v2.model.update_feature_flag_request import UpdateFeatureFlagRequest +from datadog_api_client.v2.model.allocation_response import AllocationResponse +from datadog_api_client.v2.model.create_allocations_request import CreateAllocationsRequest +from datadog_api_client.v2.model.list_allocations_response import ListAllocationsResponse +from datadog_api_client.v2.model.overwrite_allocations_request import OverwriteAllocationsRequest +from datadog_api_client.v2.model.variant import Variant +from datadog_api_client.v2.model.create_variant import CreateVariant +from datadog_api_client.v2.model.update_variant_request import UpdateVariantRequest + + +class FeatureFlagsApi: + """ + Manage feature flags and environments. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._archive_feature_flag_endpoint = _Endpoint( + settings={ + "response_type": (FeatureFlagResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}/archive", + "operation_id": "archive_feature_flag", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._create_allocations_for_feature_flag_in_environment_endpoint = _Endpoint( + settings={ + "response_type": (AllocationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}/environments/{environment_id}/allocations", + "operation_id": "create_allocations_for_feature_flag_in_environment", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + "environment_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "environment_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateAllocationsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_feature_flag_endpoint = _Endpoint( + settings={ + "response_type": (FeatureFlagResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags", + "operation_id": "create_feature_flag", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateFeatureFlagRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_feature_flags_environment_endpoint = _Endpoint( + settings={ + "response_type": (EnvironmentResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/environments", + "operation_id": "create_feature_flags_environment", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateEnvironmentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_variant_for_feature_flag_endpoint = _Endpoint( + settings={ + "response_type": (Variant,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}/variants", + "operation_id": "create_variant_for_feature_flag", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateVariant,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_feature_flags_environment_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/environments/{environment_id}", + "operation_id": "delete_feature_flags_environment", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "environment_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "environment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_variant_from_feature_flag_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}/variants/{variant_id}", + "operation_id": "delete_variant_from_feature_flag", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + "variant_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "variant_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._disable_feature_flag_environment_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}/environments/{environment_id}/disable", + "operation_id": "disable_feature_flag_environment", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + "environment_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "environment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._enable_feature_flag_environment_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}/environments/{environment_id}/enable", + "operation_id": "enable_feature_flag_environment", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + "environment_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "environment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_feature_flag_endpoint = _Endpoint( + settings={ + "response_type": (FeatureFlagResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}", + "operation_id": "get_feature_flag", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_feature_flags_environment_endpoint = _Endpoint( + settings={ + "response_type": (EnvironmentResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/environments/{environment_id}", + "operation_id": "get_feature_flags_environment", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "environment_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "environment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_feature_flags_endpoint = _Endpoint( + settings={ + "response_type": (ListFeatureFlagsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags", + "operation_id": "list_feature_flags", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "key": { + "openapi_types": (str,), + "attribute": "key", + "location": "query", + }, + "is_archived": { + "openapi_types": (bool,), + "attribute": "is_archived", + "location": "query", + }, + "limit": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "offset": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "offset", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_feature_flags_environments_endpoint = _Endpoint( + settings={ + "response_type": (ListEnvironmentsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/environments", + "operation_id": "list_feature_flags_environments", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "name": { + "openapi_types": (str,), + "attribute": "name", + "location": "query", + }, + "key": { + "openapi_types": (str,), + "attribute": "key", + "location": "query", + }, + "dd_env": { + "openapi_types": (str,), + "attribute": "dd_env", + "location": "query", + }, + "limit": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "offset": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "offset", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._pause_exposure_schedule_endpoint = _Endpoint( + settings={ + "response_type": (AllocationExposureScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/exposure-schedules/{exposure_schedule_id}/pause", + "operation_id": "pause_exposure_schedule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "exposure_schedule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "exposure_schedule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._resume_exposure_schedule_endpoint = _Endpoint( + settings={ + "response_type": (AllocationExposureScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/exposure-schedules/{exposure_schedule_id}/resume", + "operation_id": "resume_exposure_schedule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "exposure_schedule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "exposure_schedule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._start_exposure_schedule_endpoint = _Endpoint( + settings={ + "response_type": (AllocationExposureScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/exposure-schedules/{exposure_schedule_id}/start", + "operation_id": "start_exposure_schedule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "exposure_schedule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "exposure_schedule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._stop_exposure_schedule_endpoint = _Endpoint( + settings={ + "response_type": (AllocationExposureScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/exposure-schedules/{exposure_schedule_id}/stop", + "operation_id": "stop_exposure_schedule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "exposure_schedule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "exposure_schedule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._unarchive_feature_flag_endpoint = _Endpoint( + settings={ + "response_type": (FeatureFlagResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}/unarchive", + "operation_id": "unarchive_feature_flag", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_allocations_for_feature_flag_in_environment_endpoint = _Endpoint( + settings={ + "response_type": (ListAllocationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}/environments/{environment_id}/allocations", + "operation_id": "update_allocations_for_feature_flag_in_environment", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + "environment_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "environment_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OverwriteAllocationsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_feature_flag_endpoint = _Endpoint( + settings={ + "response_type": (FeatureFlagResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}", + "operation_id": "update_feature_flag", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateFeatureFlagRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_feature_flags_environment_endpoint = _Endpoint( + settings={ + "response_type": (EnvironmentResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/environments/{environment_id}", + "operation_id": "update_feature_flags_environment", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "environment_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "environment_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateEnvironmentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_variant_for_feature_flag_endpoint = _Endpoint( + settings={ + "response_type": (Variant,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/feature-flags/{feature_flag_id}/variants/{variant_id}", + "operation_id": "update_variant_for_feature_flag", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "feature_flag_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "feature_flag_id", + "location": "path", + }, + "variant_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "variant_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateVariantRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def archive_feature_flag(self, feature_flag_id: UUID, ) -> FeatureFlagResponse: + """Archive a feature flag. + + Archives a feature flag. Archived flags are + hidden from the main list but remain accessible and can be unarchived. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :rtype: FeatureFlagResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + return self._archive_feature_flag_endpoint.call_with_http_info(**kwargs) + + def create_allocations_for_feature_flag_in_environment(self, feature_flag_id: UUID, environment_id: UUID, body: CreateAllocationsRequest, ) -> AllocationResponse: + """Create targeting rules for a flag env. + + Creates a new targeting rule (allocation) for a specific feature flag in a specific environment. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :param environment_id: The ID of the environment. + :type environment_id: UUID + :type body: CreateAllocationsRequest + :rtype: AllocationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + kwargs["environment_id"] = environment_id + + kwargs["body"] = body + + return self._create_allocations_for_feature_flag_in_environment_endpoint.call_with_http_info(**kwargs) + + def create_feature_flag(self, body: CreateFeatureFlagRequest, ) -> FeatureFlagResponse: + """Create a feature flag. + + Creates a new feature flag with variants. + + :type body: CreateFeatureFlagRequest + :rtype: FeatureFlagResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_feature_flag_endpoint.call_with_http_info(**kwargs) + + def create_feature_flags_environment(self, body: CreateEnvironmentRequest, ) -> EnvironmentResponse: + """Create an environment. + + Creates a new environment for organizing feature flags. + + :type body: CreateEnvironmentRequest + :rtype: EnvironmentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_feature_flags_environment_endpoint.call_with_http_info(**kwargs) + + def create_variant_for_feature_flag(self, feature_flag_id: UUID, body: CreateVariant, ) -> Variant: + """Add a variant to a feature flag. + + Adds a single new variant to an existing feature flag. This endpoint is + additive-only: it never modifies existing variants. A request whose ``key`` + already exists on the flag is rejected with ``409 Conflict`` ; a ``value`` + whose type does not match the flag's ``value_type`` is rejected with ``400``. + The server generates the variant UUID and returns it in the response body; + callers (for example, the flag-migration tool) need this UUID to reference + the new variant in subsequent allocation syncs. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :type body: CreateVariant + :rtype: Variant + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + kwargs["body"] = body + + return self._create_variant_for_feature_flag_endpoint.call_with_http_info(**kwargs) + + def delete_feature_flags_environment(self, environment_id: UUID, ) -> None: + """Delete an environment. + + Deletes an environment. This operation cannot be undone. + + :param environment_id: The ID of the environment. + :type environment_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["environment_id"] = environment_id + + return self._delete_feature_flags_environment_endpoint.call_with_http_info(**kwargs) + + def delete_variant_from_feature_flag(self, feature_flag_id: UUID, variant_id: UUID, ) -> None: + """Delete a variant. + + Deletes a variant from a feature flag. + + When backend approvals are enabled and the flag requires approval, this endpoint creates and returns a ``FlagSuggestion`` with ``201 Created`` instead of deleting the variant immediately. If a pending suggestion already exists for this flag's variant property, the endpoint returns ``409 Conflict``. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :param variant_id: The ID of the variant. + :type variant_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + kwargs["variant_id"] = variant_id + + return self._delete_variant_from_feature_flag_endpoint.call_with_http_info(**kwargs) + + def disable_feature_flag_environment(self, feature_flag_id: UUID, environment_id: UUID, ) -> None: + """Disable a feature flag in an environment. + + Disable a feature flag in a specific environment. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :param environment_id: The ID of the environment. + :type environment_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + kwargs["environment_id"] = environment_id + + return self._disable_feature_flag_environment_endpoint.call_with_http_info(**kwargs) + + def enable_feature_flag_environment(self, feature_flag_id: UUID, environment_id: UUID, ) -> None: + """Enable a feature flag in an environment. + + Enable a feature flag in a specific environment. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :param environment_id: The ID of the environment. + :type environment_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + kwargs["environment_id"] = environment_id + + return self._enable_feature_flag_environment_endpoint.call_with_http_info(**kwargs) + + def get_feature_flag(self, feature_flag_id: UUID, ) -> FeatureFlagResponse: + """Get a feature flag. + + Returns the details of a specific feature flag + including variants and environment status. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :rtype: FeatureFlagResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + return self._get_feature_flag_endpoint.call_with_http_info(**kwargs) + + def get_feature_flags_environment(self, environment_id: UUID, ) -> EnvironmentResponse: + """Get an environment. + + Returns the details of a specific environment. + + :param environment_id: The ID of the environment. + :type environment_id: UUID + :rtype: EnvironmentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["environment_id"] = environment_id + + return self._get_feature_flags_environment_endpoint.call_with_http_info(**kwargs) + + def list_feature_flags(self, *, key: Union[str, UnsetType]=unset, is_archived: Union[bool, UnsetType]=unset, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, ) -> ListFeatureFlagsResponse: + """List feature flags. + + Returns a list of feature flags for the organization. + Supports filtering by key and archived status. + + :param key: Filter feature flags by key (partial matching). + :type key: str, optional + :param is_archived: Filter by archived status. + :type is_archived: bool, optional + :param limit: Maximum number of results to return. + :type limit: int, optional + :param offset: Number of results to skip. + :type offset: int, optional + :rtype: ListFeatureFlagsResponse + """ + kwargs: Dict[str, Any] = {} + if key is not unset: + kwargs["key"] = key + + if is_archived is not unset: + kwargs["is_archived"] = is_archived + + if limit is not unset: + kwargs["limit"] = limit + + if offset is not unset: + kwargs["offset"] = offset + + return self._list_feature_flags_endpoint.call_with_http_info(**kwargs) + + def list_feature_flags_environments(self, *, name: Union[str, UnsetType]=unset, key: Union[str, UnsetType]=unset, dd_env: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, ) -> ListEnvironmentsResponse: + """List environments. + + Returns a list of environments for the organization. + Supports filtering by name, key, and DD_ENV. + + :param name: Filter environments by name (partial matching). + :type name: str, optional + :param key: Filter environments by key (partial matching). + :type key: str, optional + :param dd_env: Filter environments by queries that contain the provided DD_ENV value. + :type dd_env: str, optional + :param limit: Maximum number of results to return. + :type limit: int, optional + :param offset: Number of results to skip. + :type offset: int, optional + :rtype: ListEnvironmentsResponse + """ + kwargs: Dict[str, Any] = {} + if name is not unset: + kwargs["name"] = name + + if key is not unset: + kwargs["key"] = key + + if dd_env is not unset: + kwargs["dd_env"] = dd_env + + if limit is not unset: + kwargs["limit"] = limit + + if offset is not unset: + kwargs["offset"] = offset + + return self._list_feature_flags_environments_endpoint.call_with_http_info(**kwargs) + + def pause_exposure_schedule(self, exposure_schedule_id: UUID, ) -> AllocationExposureScheduleResponse: + """Pause a progressive rollout. + + Pauses a progressive rollout while preserving rollout state. + + :param exposure_schedule_id: The ID of the exposure schedule. + :type exposure_schedule_id: UUID + :rtype: AllocationExposureScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["exposure_schedule_id"] = exposure_schedule_id + + return self._pause_exposure_schedule_endpoint.call_with_http_info(**kwargs) + + def resume_exposure_schedule(self, exposure_schedule_id: UUID, ) -> AllocationExposureScheduleResponse: + """Resume a progressive rollout. + + Resumes progression for a previously paused progressive rollout. + + :param exposure_schedule_id: The ID of the exposure schedule. + :type exposure_schedule_id: UUID + :rtype: AllocationExposureScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["exposure_schedule_id"] = exposure_schedule_id + + return self._resume_exposure_schedule_endpoint.call_with_http_info(**kwargs) + + def start_exposure_schedule(self, exposure_schedule_id: UUID, ) -> AllocationExposureScheduleResponse: + """Start a progressive rollout. + + Starts a progressive rollout and begins progression. + + :param exposure_schedule_id: The ID of the exposure schedule. + :type exposure_schedule_id: UUID + :rtype: AllocationExposureScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["exposure_schedule_id"] = exposure_schedule_id + + return self._start_exposure_schedule_endpoint.call_with_http_info(**kwargs) + + def stop_exposure_schedule(self, exposure_schedule_id: UUID, ) -> AllocationExposureScheduleResponse: + """Stop a progressive rollout. + + Stops a progressive rollout and marks it as aborted. + + :param exposure_schedule_id: The ID of the exposure schedule. + :type exposure_schedule_id: UUID + :rtype: AllocationExposureScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["exposure_schedule_id"] = exposure_schedule_id + + return self._stop_exposure_schedule_endpoint.call_with_http_info(**kwargs) + + def unarchive_feature_flag(self, feature_flag_id: UUID, ) -> FeatureFlagResponse: + """Unarchive a feature flag. + + Unarchives a previously archived feature flag, + making it visible in the main list again. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :rtype: FeatureFlagResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + return self._unarchive_feature_flag_endpoint.call_with_http_info(**kwargs) + + def update_allocations_for_feature_flag_in_environment(self, feature_flag_id: UUID, environment_id: UUID, body: OverwriteAllocationsRequest, ) -> ListAllocationsResponse: + """Update targeting rules for a flag. + + Updates targeting rules (allocations) for a specific feature flag in a specific environment. + This operation replaces the existing allocation set with the request payload. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :param environment_id: The ID of the environment. + :type environment_id: UUID + :type body: OverwriteAllocationsRequest + :rtype: ListAllocationsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + kwargs["environment_id"] = environment_id + + kwargs["body"] = body + + return self._update_allocations_for_feature_flag_in_environment_endpoint.call_with_http_info(**kwargs) + + def update_feature_flag(self, feature_flag_id: UUID, body: UpdateFeatureFlagRequest, ) -> FeatureFlagResponse: + """Update a feature flag. + + Updates an existing feature flag's metadata such as + name and description. Does not modify targeting rules or allocations. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :type body: UpdateFeatureFlagRequest + :rtype: FeatureFlagResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + kwargs["body"] = body + + return self._update_feature_flag_endpoint.call_with_http_info(**kwargs) + + def update_feature_flags_environment(self, environment_id: UUID, body: UpdateEnvironmentRequest, ) -> EnvironmentResponse: + """Update an environment. + + Updates an existing environment's metadata such as + name and description. + + :param environment_id: The ID of the environment. + :type environment_id: UUID + :type body: UpdateEnvironmentRequest + :rtype: EnvironmentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["environment_id"] = environment_id + + kwargs["body"] = body + + return self._update_feature_flags_environment_endpoint.call_with_http_info(**kwargs) + + def update_variant_for_feature_flag(self, feature_flag_id: UUID, variant_id: UUID, body: UpdateVariantRequest, ) -> Variant: + """Update a variant. + + Updates the name and value of an existing variant on a feature flag. + + When backend approvals are enabled and the flag requires approval, this endpoint creates and returns a ``FlagSuggestion`` with ``201 Created`` instead of applying the change immediately. Use the returned suggestion ``id`` to approve or reject the change. If a pending suggestion already exists for this flag's variant property, the endpoint returns ``409 Conflict``. + + :param feature_flag_id: The ID of the feature flag. + :type feature_flag_id: UUID + :param variant_id: The ID of the variant. + :type variant_id: UUID + :type body: UpdateVariantRequest + :rtype: Variant + """ + kwargs: Dict[str, Any] = {} + kwargs["feature_flag_id"] = feature_flag_id + + kwargs["variant_id"] = variant_id + + kwargs["body"] = body + + return self._update_variant_for_feature_flag_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/fleet_automation_api.py b/datadog_api_client/v2/api/fleet_automation_api.py new file mode 100644 index 0000000000..9bfe7ffe9f --- /dev/null +++ b/datadog_api_client/v2/api/fleet_automation_api.py @@ -0,0 +1,971 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.fleet_tracers_response import FleetTracersResponse +from datadog_api_client.v2.model.fleet_schedule_response import FleetScheduleResponse +from datadog_api_client.v2.model.fleet_schedule_create_request import FleetScheduleCreateRequest +from datadog_api_client.v2.model.fleet_schedule_patch_request import FleetSchedulePatchRequest +from datadog_api_client.v2.model.fleet_deployment_response import FleetDeploymentResponse +from datadog_api_client.v2.model.fleet_agent_versions_v2_response import FleetAgentVersionsV2Response +from datadog_api_client.v2.model.fleet_agents_v2_response import FleetAgentsV2Response +from datadog_api_client.v2.model.fleet_agent_detail_v2_response import FleetAgentDetailV2Response +from datadog_api_client.v2.model.fleet_deployments_v2_response import FleetDeploymentsV2Response +from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run_response import FleetDeploymentConfigureV2DryRunResponse +from datadog_api_client.v2.model.fleet_deployment_configure_v2_create_request import FleetDeploymentConfigureV2CreateRequest +from datadog_api_client.v2.model.fleet_deployment_v2_create_response import FleetDeploymentV2CreateResponse +from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_create_request import FleetDeploymentPackageUpgradeV2CreateRequest +from datadog_api_client.v2.model.fleet_deployment_v2_detail_response import FleetDeploymentV2DetailResponse +from datadog_api_client.v2.model.fleet_deployment_v2_cancel_response import FleetDeploymentV2CancelResponse +from datadog_api_client.v2.model.fleet_schedules_v2_response import FleetSchedulesV2Response +from datadog_api_client.v2.model.fleet_schedule_v2_response import FleetScheduleV2Response + + +class FleetAutomationApi: + """ + Manage automated deployments across your fleet of hosts. + + Fleet Automation provides two types of deployments: + + Configuration Deployments ( ``/configure`` ): + + * Apply configuration file changes to target hosts + * Support merge-patch operations to update specific configuration fields + * Support delete operations to remove configuration files + * Useful for updating Datadog Agent settings, integration configs, and more + + Package Upgrade Deployments ( ``/upgrade`` ): + + * Upgrade the Datadog Agent to specific versions + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._cancel_fleet_deployment_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetDeploymentV2CancelResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/deployments/{deployment_id}/cancel", + "operation_id": "cancel_fleet_deployment_v2", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "deployment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "deployment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._create_fleet_deployment_configure_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetDeploymentConfigureV2DryRunResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/deployments/configure", + "operation_id": "create_fleet_deployment_configure_v2", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (FleetDeploymentConfigureV2CreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_fleet_deployment_upgrade_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetDeploymentV2CreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/deployments/upgrade", + "operation_id": "create_fleet_deployment_upgrade_v2", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (FleetDeploymentPackageUpgradeV2CreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_fleet_schedule_endpoint = _Endpoint( + settings={ + "response_type": (FleetScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/fleet/schedules", + "operation_id": "create_fleet_schedule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (FleetScheduleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_fleet_schedule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/fleet/schedules/{id}", + "operation_id": "delete_fleet_schedule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_fleet_agent_detail_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetAgentDetailV2Response,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/agents/{agent_key}", + "operation_id": "get_fleet_agent_detail_v2", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "agent_key": { + "required": True, + "validation": { + }, + "openapi_types": (str,), + "attribute": "agent_key", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_fleet_deployment_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetDeploymentV2DetailResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/deployments/{deployment_id}", + "operation_id": "get_fleet_deployment_v2", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "deployment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "deployment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_fleet_schedule_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetScheduleV2Response,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/schedules/{id}", + "operation_id": "get_fleet_schedule_v2", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_fleet_agents_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetAgentsV2Response,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/agents", + "operation_id": "list_fleet_agents_v2", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page_number", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page_size", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "tags": { + "openapi_types": (str,), + "attribute": "tags", + "location": "query", + }, + "sort_attribute": { + "openapi_types": (str,), + "attribute": "sort_attribute", + "location": "query", + }, + "sort_descending": { + "openapi_types": (bool,), + "attribute": "sort_descending", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_fleet_agent_tracers_endpoint = _Endpoint( + settings={ + "response_type": (FleetTracersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/fleet/agents/{agent_key}/tracers", + "operation_id": "list_fleet_agent_tracers", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "agent_key": { + "required": True, + "openapi_types": (str,), + "attribute": "agent_key", + "location": "path", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page_number", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page_size", + "location": "query", + }, + "sort_attribute": { + "openapi_types": (str,), + "attribute": "sort_attribute", + "location": "query", + }, + "sort_descending": { + "openapi_types": (bool,), + "attribute": "sort_descending", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_fleet_agent_versions_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetAgentVersionsV2Response,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/agent_versions", + "operation_id": "list_fleet_agent_versions_v2", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_fleet_deployments_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetDeploymentsV2Response,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/deployments", + "operation_id": "list_fleet_deployments_v2", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "validation": { + "inclusive_maximum": 100, + }, + "openapi_types": (int,), + "attribute": "page_size", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page_number", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "ascending": { + "openapi_types": (bool,), + "attribute": "ascending", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_fleet_schedules_v2_endpoint = _Endpoint( + settings={ + "response_type": (FleetSchedulesV2Response,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/fleet/schedules", + "operation_id": "list_fleet_schedules_v2", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_fleet_tracers_endpoint = _Endpoint( + settings={ + "response_type": (FleetTracersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/fleet/tracers", + "operation_id": "list_fleet_tracers", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page_number", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page_size", + "location": "query", + }, + "sort_attribute": { + "openapi_types": (str,), + "attribute": "sort_attribute", + "location": "query", + }, + "sort_descending": { + "openapi_types": (bool,), + "attribute": "sort_descending", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._trigger_fleet_schedule_endpoint = _Endpoint( + settings={ + "response_type": (FleetDeploymentResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/fleet/schedules/{id}/trigger", + "operation_id": "trigger_fleet_schedule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_fleet_schedule_endpoint = _Endpoint( + settings={ + "response_type": (FleetScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/fleet/schedules/{id}", + "operation_id": "update_fleet_schedule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (FleetSchedulePatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def cancel_fleet_deployment_v2(self, deployment_id: str, ) -> FleetDeploymentV2CancelResponse: + """Cancel a deployment. + + Cancel an active deployment and stop all pending operations. + When you cancel a deployment: + + * All pending operations on hosts that haven't started yet are stopped. + * Operations currently in progress on hosts may complete or be interrupted, depending on their current status. + * Configuration changes or package upgrades already applied to hosts are not rolled back. + + After cancellation, you can view the final state of the deployment using the GET endpoint to see which hosts + were successfully updated before the cancellation. + + Only deployments with a ``pending`` or ``running`` status can be canceled. Returns a 400 if the deployment is not in a cancelable status. Returns a 404 if no deployment matches the specified ID or if you do not have access to it. + + :param deployment_id: The unique identifier of the deployment to cancel. + :type deployment_id: str + :rtype: FleetDeploymentV2CancelResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["deployment_id"] = deployment_id + + return self._cancel_fleet_deployment_v2_endpoint.call_with_http_info(**kwargs) + + def create_fleet_deployment_configure_v2(self, body: FleetDeploymentConfigureV2CreateRequest, ) -> FleetDeploymentConfigureV2DryRunResponse: + """Create a configuration deployment. + + Create a new deployment to apply configuration changes + to a fleet of hosts matching the specified filter query. + + This endpoint supports two types of configuration operations: + + * ``merge-patch`` : Merges the provided patch data with the existing configuration file, + creating the file if it doesn't exist. + * ``delete`` : Removes the specified configuration file from the target hosts. + + You can optionally use ``target_packages`` to apply the configuration change only to specific package versions. + + The deployment is created and started automatically. You can specify multiple configuration + operations to execute in order on each target host. Use the filter query to target + specific hosts using the Datadog query syntax. + + Set ``dry_run`` to ``true`` to validate the configuration and resolve target hosts and packages without deploying anything. A dry run returns a 200 with the validation result instead of creating and starting a deployment. + + Returns a 400 if ``filter_query`` or ``config_operations`` is missing, a target package is missing a name or version or cannot be resolved, the configuration fails validation, or the filter query does not match any host eligible for the deployment. + + :param body: Request payload containing the deployment details. + :type body: FleetDeploymentConfigureV2CreateRequest + :rtype: FleetDeploymentConfigureV2DryRunResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_fleet_deployment_configure_v2_endpoint.call_with_http_info(**kwargs) + + def create_fleet_deployment_upgrade_v2(self, body: FleetDeploymentPackageUpgradeV2CreateRequest, ) -> FleetDeploymentV2CreateResponse: + """Upgrade hosts. + + Create and immediately start a new package upgrade + on hosts matching the specified filter query. + + This endpoint allows you to upgrade the Datadog Agent to a specific version + on hosts matching the specified filter query. + + The deployment is created and started automatically. The system: + + #. Identifies all hosts matching the filter query. + #. Validates that the specified version is available. + #. Begins rolling out the package upgrade to the target hosts. + + Returns a 400 if ``filter_query`` or ``target_packages`` is missing, a target package is missing a name or version, or the filter query does not match any host eligible for the upgrade. Returns a 409 if a conflicting upgrade is already running on one or more target hosts. + + :param body: Request payload containing the package upgrade details. + :type body: FleetDeploymentPackageUpgradeV2CreateRequest + :rtype: FleetDeploymentV2CreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_fleet_deployment_upgrade_v2_endpoint.call_with_http_info(**kwargs) + + def create_fleet_schedule(self, body: FleetScheduleCreateRequest, ) -> FleetScheduleResponse: + """Create a schedule. + + Create a new schedule for automated package upgrades. + + Schedules define when and how often to automatically deploy package upgrades to a fleet + of hosts. Each schedule includes: + + * A filter query to select target hosts + * A recurrence rule defining maintenance windows + * A version strategy (e.g., always latest, or N versions behind latest) + + When the schedule triggers during a maintenance window, it automatically creates a + deployment that upgrades the Datadog Agent to the specified version on all matching hosts. + + :param body: Request payload containing the schedule details. + :type body: FleetScheduleCreateRequest + :rtype: FleetScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_fleet_schedule_endpoint.call_with_http_info(**kwargs) + + def delete_fleet_schedule(self, id: str, ) -> None: + """Delete a schedule. + + Delete a schedule permanently. + + When you delete a schedule: + + * The schedule is permanently removed and will no longer create deployments + * Any deployments already created by this schedule are not affected + * This action cannot be undone + + If you want to temporarily stop a schedule from creating deployments, consider + updating its status to "inactive" instead of deleting it. + + :param id: The unique identifier of the schedule to delete. + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._delete_fleet_schedule_endpoint.call_with_http_info(**kwargs) + + def get_fleet_agent_detail_v2(self, agent_key: str, *, include: Union[str, UnsetType]=unset, ) -> FleetAgentDetailV2Response: + """Get detailed information about an agent. + + Retrieve detailed information about a specific Datadog Agent. + + By default, only ``agent_infos`` is returned. Use the ``include`` query parameter to + request additional data: ``integrations`` and/or ``configuration_files``. + + :param agent_key: The unique identifier (Agent key) for the Datadog Agent. Must be a 32-character lowercase hexadecimal string. + :type agent_key: str + :param include: Comma-separated list of additional fields to include in the response. Valid values are ``integrations`` and ``configuration_files``. Omitting this parameter returns only ``agent_infos``. Unrecognized values are silently ignored rather than causing an error. + :type include: str, optional + :rtype: FleetAgentDetailV2Response + """ + kwargs: Dict[str, Any] = {} + kwargs["agent_key"] = agent_key + + if include is not unset: + kwargs["include"] = include + + return self._get_fleet_agent_detail_v2_endpoint.call_with_http_info(**kwargs) + + def get_fleet_deployment_v2(self, deployment_id: str, ) -> FleetDeploymentV2DetailResponse: + """Get a deployment by ID. + + Retrieve detailed information about a specific deployment, including its current status, + configuration operations, and per-host execution status. + + Returns a 404 if no deployment matches the given ID or if you do not have access to it. + + :param deployment_id: The unique identifier of the deployment to retrieve. + :type deployment_id: str + :rtype: FleetDeploymentV2DetailResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["deployment_id"] = deployment_id + + return self._get_fleet_deployment_v2_endpoint.call_with_http_info(**kwargs) + + def get_fleet_schedule_v2(self, id: str, ) -> FleetScheduleV2Response: + """Get a schedule by ID. + + Retrieve detailed information about a specific schedule by its unique identifier. + + :param id: The unique identifier of the schedule to retrieve. + :type id: str + :rtype: FleetScheduleV2Response + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_fleet_schedule_v2_endpoint.call_with_http_info(**kwargs) + + def list_fleet_agents_v2(self, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, filter: Union[str, UnsetType]=unset, tags: Union[str, UnsetType]=unset, sort_attribute: Union[str, UnsetType]=unset, sort_descending: Union[bool, UnsetType]=unset, ) -> FleetAgentsV2Response: + """List all Datadog Agents. + + Retrieve a paginated list of Datadog Agents. + + Returns agents with support for pagination, sorting, and filtering. + Use ``page_number`` and ``page_size`` to navigate pages, ``filter`` to narrow by field values, + and ``tags`` to filter by agent tags. + + :param page_number: Page number for pagination, starting at 0. + :type page_number: int, optional + :param page_size: Number of agents to return per page. Maximum value is 100. Defaults to 10. + :type page_size: int, optional + :param filter: Filter string to narrow down agent results. + :type filter: str, optional + :param tags: Comma-separated list of tag keys to select which tags are included in each agent's ``tags`` attribute. Does not filter which agents are returned. + :type tags: str, optional + :param sort_attribute: Agent attribute to sort results by. Must be a supported attribute name; unsupported values return a 400 error. + :type sort_attribute: str, optional + :param sort_descending: Set to ``true`` to sort results in descending order. Defaults to ascending. + :type sort_descending: bool, optional + :rtype: FleetAgentsV2Response + """ + kwargs: Dict[str, Any] = {} + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if filter is not unset: + kwargs["filter"] = filter + + if tags is not unset: + kwargs["tags"] = tags + + if sort_attribute is not unset: + kwargs["sort_attribute"] = sort_attribute + + if sort_descending is not unset: + kwargs["sort_descending"] = sort_descending + + return self._list_fleet_agents_v2_endpoint.call_with_http_info(**kwargs) + + def list_fleet_agent_tracers(self, agent_key: str, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, sort_attribute: Union[str, UnsetType]=unset, sort_descending: Union[bool, UnsetType]=unset, ) -> FleetTracersResponse: + """List tracers for a specific agent. + + Retrieve a paginated list of tracers for a specific agent. + + This endpoint returns tracers associated with a given agent key, identified by the + agent's hostname. Use this to discover telemetry-derived service names for a particular host. + + :param agent_key: The unique identifier (agent key) for the Datadog Agent. + :type agent_key: str + :param page_number: Page number for pagination (starts at 0). + :type page_number: int, optional + :param page_size: Number of results per page (must be greater than 0 and less than or equal to 100). + :type page_size: int, optional + :param sort_attribute: Attribute to sort by. + :type sort_attribute: str, optional + :param sort_descending: Sort order (true for descending, false for ascending). + :type sort_descending: bool, optional + :rtype: FleetTracersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["agent_key"] = agent_key + + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if sort_attribute is not unset: + kwargs["sort_attribute"] = sort_attribute + + if sort_descending is not unset: + kwargs["sort_descending"] = sort_descending + + return self._list_fleet_agent_tracers_endpoint.call_with_http_info(**kwargs) + + def list_fleet_agent_versions_v2(self, ) -> FleetAgentVersionsV2Response: + """List available Datadog Agent versions. + + Retrieve the list of Datadog Agent versions available for deployment. + + Returns ``200`` with an empty ``data`` array if the Agent package exists in the catalog + but has no available versions, and ``404`` only if the Agent package itself is absent + from the catalog. + + :rtype: FleetAgentVersionsV2Response + """ + kwargs: Dict[str, Any] = {} + return self._list_fleet_agent_versions_v2_endpoint.call_with_http_info(**kwargs) + + def list_fleet_deployments_v2(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, ascending: Union[bool, UnsetType]=unset, filter: Union[str, UnsetType]=unset, ) -> FleetDeploymentsV2Response: + """List all deployments. + + Retrieve a paginated list of all deployments for fleet automation. + + :param page_size: Number of deployments to return per page. Maximum value is 100. + :type page_size: int, optional + :param page_number: Page number for pagination, starting at 0. + :type page_number: int, optional + :param sort: Field to sort results by (for example, ``start_date`` ). Must be a supported field + name; unsupported values return a 400 error. + :type sort: str, optional + :param ascending: Set to ``true`` to sort in ascending order. This setting has no effect unless ``sort`` is also set. + Defaults to descending order. + :type ascending: bool, optional + :param filter: Query used to filter deployments. Uses the Datadog query syntax. Filtering on an + unsupported field returns a 400 error. For example: + + * ``status:failed`` or ``status:done_with_errors`` : deployments that need investigation. + * ``status:running`` : deployments currently in flight. + * ``update_type:update_package`` or ``update_type:update_config_operations`` : deployments of a given type. + :type filter: str, optional + :rtype: FleetDeploymentsV2Response + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if ascending is not unset: + kwargs["ascending"] = ascending + + if filter is not unset: + kwargs["filter"] = filter + + return self._list_fleet_deployments_v2_endpoint.call_with_http_info(**kwargs) + + def list_fleet_schedules_v2(self, ) -> FleetSchedulesV2Response: + """List all schedules. + + Retrieve all upgrade schedules for the organization. + + Schedules automate package upgrades by defining maintenance windows and recurrence rules. + Each schedule automatically creates deployments based on its configuration. + + :rtype: FleetSchedulesV2Response + """ + kwargs: Dict[str, Any] = {} + return self._list_fleet_schedules_v2_endpoint.call_with_http_info(**kwargs) + + def list_fleet_tracers(self, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, sort_attribute: Union[str, UnsetType]=unset, sort_descending: Union[bool, UnsetType]=unset, filter: Union[str, UnsetType]=unset, ) -> FleetTracersResponse: + """List all fleet tracers. + + Retrieve a paginated list of all fleet tracers. + + This endpoint returns telemetry-derived service names from the SDK telemetry pipeline. + These names may differ from span-derived names in APM and are useful for querying + service library configurations. + Use the ``page_number`` and ``page_size`` query parameters to paginate through results. + + :param page_number: Page number for pagination (starts at 0). + :type page_number: int, optional + :param page_size: Number of results per page (must be greater than 0 and less than or equal to 100). + :type page_size: int, optional + :param sort_attribute: Attribute to sort by. + :type sort_attribute: str, optional + :param sort_descending: Sort order (true for descending, false for ascending). + :type sort_descending: bool, optional + :param filter: Filter string for narrowing down tracer results. + :type filter: str, optional + :rtype: FleetTracersResponse + """ + kwargs: Dict[str, Any] = {} + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if sort_attribute is not unset: + kwargs["sort_attribute"] = sort_attribute + + if sort_descending is not unset: + kwargs["sort_descending"] = sort_descending + + if filter is not unset: + kwargs["filter"] = filter + + return self._list_fleet_tracers_endpoint.call_with_http_info(**kwargs) + + def trigger_fleet_schedule(self, id: str, ) -> FleetDeploymentResponse: + """Trigger a schedule deployment. + + Manually trigger a schedule to immediately create and start a deployment. + + This endpoint allows you to manually initiate a deployment using the schedule's + configuration, without waiting for the next scheduled maintenance window. This is + useful for: + + * Testing a schedule before it runs automatically + * Performing an emergency update outside the regular maintenance window + * Creating an ad-hoc deployment with the same settings as a schedule + + The deployment is created immediately with: + + * The same filter query as the schedule + * The package version determined by the schedule's version strategy + * All matching hosts as targets + + The manually triggered deployment is independent of the schedule and does not + affect the schedule's normal recurrence pattern. + + :param id: The unique identifier of the schedule to trigger. + :type id: str + :rtype: FleetDeploymentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._trigger_fleet_schedule_endpoint.call_with_http_info(**kwargs) + + def update_fleet_schedule(self, id: str, body: FleetSchedulePatchRequest, ) -> FleetScheduleResponse: + """Update a schedule. + + Partially update a schedule by providing only the fields you want to change. + + This endpoint allows you to modify specific attributes of a schedule without + affecting other fields. Common use cases include: + + * Changing the schedule status between active and inactive + * Updating the maintenance window times + * Modifying the filter query to target different hosts + * Adjusting the version strategy + + Only include the fields you want to update in the request body. All fields + are optional in a PATCH request. + + :param id: The unique identifier of the schedule to update. + :type id: str + :param body: Request payload containing the fields to update. + :type body: FleetSchedulePatchRequest + :rtype: FleetScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._update_fleet_schedule_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/forms_api.py b/datadog_api_client/v2/api/forms_api.py new file mode 100644 index 0000000000..942b6fb5ee --- /dev/null +++ b/datadog_api_client/v2/api/forms_api.py @@ -0,0 +1,458 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.forms_response import FormsResponse +from datadog_api_client.v2.model.form_response import FormResponse +from datadog_api_client.v2.model.create_form_request import CreateFormRequest +from datadog_api_client.v2.model.delete_form_response import DeleteFormResponse +from datadog_api_client.v2.model.update_form_request import UpdateFormRequest +from datadog_api_client.v2.model.clone_form_request import CloneFormRequest +from datadog_api_client.v2.model.form_publication_response import FormPublicationResponse +from datadog_api_client.v2.model.publish_form_request import PublishFormRequest +from datadog_api_client.v2.model.form_version_response import FormVersionResponse +from datadog_api_client.v2.model.upsert_form_version_request import UpsertFormVersionRequest +from datadog_api_client.v2.model.upsert_and_publish_form_version_request import UpsertAndPublishFormVersionRequest + + +class FormsApi: + """ + The Datadog Forms API lets you create and manage forms within the App Builder platform. + You can configure form settings, manage versions, and publish forms. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._clone_form_endpoint = _Endpoint( + settings={ + "response_type": (FormResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms/{form_id}/clone", + "operation_id": "clone_form", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "form_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "form_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CloneFormRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_and_publish_form_endpoint = _Endpoint( + settings={ + "response_type": (FormResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms/create_and_publish", + "operation_id": "create_and_publish_form", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateFormRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_form_endpoint = _Endpoint( + settings={ + "response_type": (FormResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms", + "operation_id": "create_form", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateFormRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_form_endpoint = _Endpoint( + settings={ + "response_type": (DeleteFormResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms/{form_id}", + "operation_id": "delete_form", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "form_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "form_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_form_endpoint = _Endpoint( + settings={ + "response_type": (FormResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms/{form_id}", + "operation_id": "get_form", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "form_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "form_id", + "location": "path", + }, + "version": { + "openapi_types": (str,), + "attribute": "version", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_forms_endpoint = _Endpoint( + settings={ + "response_type": (FormsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms", + "operation_id": "list_forms", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._publish_form_endpoint = _Endpoint( + settings={ + "response_type": (FormPublicationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms/{form_id}/publish", + "operation_id": "publish_form", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "form_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "form_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PublishFormRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_form_endpoint = _Endpoint( + settings={ + "response_type": (FormResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms/{form_id}", + "operation_id": "update_form", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "form_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "form_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateFormRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upsert_and_publish_form_version_endpoint = _Endpoint( + settings={ + "response_type": (FormResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms/{form_id}/versions/upsert_and_publish", + "operation_id": "upsert_and_publish_form_version", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "form_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "form_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpsertAndPublishFormVersionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upsert_form_version_endpoint = _Endpoint( + settings={ + "response_type": (FormVersionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/forms/{form_id}/versions", + "operation_id": "upsert_form_version", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "form_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "form_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpsertFormVersionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def clone_form(self, form_id: UUID, body: CloneFormRequest, ) -> FormResponse: + """Clone a form. + + Clone an existing form. The clone is created in draft mode using the source form's latest version. + + :param form_id: The ID of the form to clone. + :type form_id: UUID + :type body: CloneFormRequest + :rtype: FormResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["form_id"] = form_id + + kwargs["body"] = body + + return self._clone_form_endpoint.call_with_http_info(**kwargs) + + def create_and_publish_form(self, body: CreateFormRequest, ) -> FormResponse: + """Create and publish a form. + + Creates a new form and immediately publishes its initial version. This also creates a new datastore for form responses and links it to the form. + + :type body: CreateFormRequest + :rtype: FormResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_and_publish_form_endpoint.call_with_http_info(**kwargs) + + def create_form(self, body: CreateFormRequest, ) -> FormResponse: + """Create a form. + + Create a new form. The form is created in draft mode and must be published before it can be used. This also creates a new datastore for form responses and links it to the form. + + :type body: CreateFormRequest + :rtype: FormResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_form_endpoint.call_with_http_info(**kwargs) + + def delete_form(self, form_id: UUID, ) -> DeleteFormResponse: + """Delete a form. + + Delete a form by its ID. This will also try to delete the associated datastore. + + :param form_id: The ID of the form. + :type form_id: UUID + :rtype: DeleteFormResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["form_id"] = form_id + + return self._delete_form_endpoint.call_with_http_info(**kwargs) + + def get_form(self, form_id: UUID, *, version: Union[str, UnsetType]=unset, ) -> FormResponse: + """Get a form. + + Get a form definition by its ID. + + :param form_id: The ID of the form. + :type form_id: UUID + :param version: The version of the form to retrieve. Use 'latest' for the most recent draft, 'published' for the last published version, or a specific version number. + :type version: str, optional + :rtype: FormResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["form_id"] = form_id + + if version is not unset: + kwargs["version"] = version + + return self._get_form_endpoint.call_with_http_info(**kwargs) + + def list_forms(self, ) -> FormsResponse: + """List forms. + + Get all forms for the authenticated user's organization. + + :rtype: FormsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_forms_endpoint.call_with_http_info(**kwargs) + + def publish_form(self, form_id: UUID, body: PublishFormRequest, ) -> FormPublicationResponse: + """Publish a form version. + + Publish a specific version of a form, making it available for submissions. + + :param form_id: The ID of the form. + :type form_id: UUID + :type body: PublishFormRequest + :rtype: FormPublicationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["form_id"] = form_id + + kwargs["body"] = body + + return self._publish_form_endpoint.call_with_http_info(**kwargs) + + def update_form(self, form_id: UUID, body: UpdateFormRequest, ) -> FormResponse: + """Update a form. + + Update a form's properties such as its name, description, or datastore configuration. + + :param form_id: The ID of the form. + :type form_id: UUID + :type body: UpdateFormRequest + :rtype: FormResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["form_id"] = form_id + + kwargs["body"] = body + + return self._update_form_endpoint.call_with_http_info(**kwargs) + + def upsert_and_publish_form_version(self, form_id: UUID, body: UpsertAndPublishFormVersionRequest, ) -> FormResponse: + """Upsert and publish a form version. + + Upsert the latest form version and publish it in a single atomic transaction. + + :param form_id: The ID of the form. + :type form_id: UUID + :type body: UpsertAndPublishFormVersionRequest + :rtype: FormResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["form_id"] = form_id + + kwargs["body"] = body + + return self._upsert_and_publish_form_version_endpoint.call_with_http_info(**kwargs) + + def upsert_form_version(self, form_id: UUID, body: UpsertFormVersionRequest, ) -> FormVersionResponse: + """Create or update a form version. + + Create or update the latest draft version of a form. The ``upsert_params`` field controls + optimistic concurrency behavior. + + :param form_id: The ID of the form. + :type form_id: UUID + :type body: UpsertFormVersionRequest + :rtype: FormVersionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["form_id"] = form_id + + kwargs["body"] = body + + return self._upsert_form_version_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/gcp_integration_api.py b/datadog_api_client/v2/api/gcp_integration_api.py new file mode 100644 index 0000000000..c582409a00 --- /dev/null +++ b/datadog_api_client/v2/api/gcp_integration_api.py @@ -0,0 +1,248 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.gcpsts_service_accounts_response import GCPSTSServiceAccountsResponse +from datadog_api_client.v2.model.gcpsts_service_account_response import GCPSTSServiceAccountResponse +from datadog_api_client.v2.model.gcpsts_service_account_create_request import GCPSTSServiceAccountCreateRequest +from datadog_api_client.v2.model.gcpsts_service_account_update_request import GCPSTSServiceAccountUpdateRequest +from datadog_api_client.v2.model.gcpsts_delegate_account_response import GCPSTSDelegateAccountResponse + + +class GCPIntegrationApi: + """ + Configure your Datadog-Google Cloud Platform (GCP) integration directly + through the Datadog API. Read more about the `Datadog-Google Cloud Platform integration `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_gcpsts_account_endpoint = _Endpoint( + settings={ + "response_type": (GCPSTSServiceAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/gcp/accounts", + "operation_id": "create_gcpsts_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GCPSTSServiceAccountCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_gcpsts_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/gcp/accounts/{account_id}", + "operation_id": "delete_gcpsts_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_gcpsts_delegate_endpoint = _Endpoint( + settings={ + "response_type": (GCPSTSDelegateAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/gcp/sts_delegate", + "operation_id": "get_gcpsts_delegate", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_gcpsts_accounts_endpoint = _Endpoint( + settings={ + "response_type": (GCPSTSServiceAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/gcp/accounts", + "operation_id": "list_gcpsts_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._make_gcpsts_delegate_endpoint = _Endpoint( + settings={ + "response_type": (GCPSTSDelegateAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/gcp/sts_delegate", + "operation_id": "make_gcpsts_delegate", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "openapi_types": (dict,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_gcpsts_account_endpoint = _Endpoint( + settings={ + "response_type": (GCPSTSServiceAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/gcp/accounts/{account_id}", + "operation_id": "update_gcpsts_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GCPSTSServiceAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_gcpsts_account(self, body: GCPSTSServiceAccountCreateRequest, ) -> GCPSTSServiceAccountResponse: + """Create a new entry for your service account. + + Create a new entry within Datadog for your STS enabled service account. + + :type body: GCPSTSServiceAccountCreateRequest + :rtype: GCPSTSServiceAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_gcpsts_account_endpoint.call_with_http_info(**kwargs) + + def delete_gcpsts_account(self, account_id: str, ) -> None: + """Delete an STS enabled GCP Account. + + Delete an STS enabled GCP account from within Datadog. + + :param account_id: Your GCP STS enabled service account's unique ID. + :type account_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._delete_gcpsts_account_endpoint.call_with_http_info(**kwargs) + + def get_gcpsts_delegate(self, ) -> GCPSTSDelegateAccountResponse: + """List delegate account. + + List your Datadog-GCP STS delegate account configured in your Datadog account. + + :rtype: GCPSTSDelegateAccountResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_gcpsts_delegate_endpoint.call_with_http_info(**kwargs) + + def list_gcpsts_accounts(self, ) -> GCPSTSServiceAccountsResponse: + """List all GCP STS-enabled service accounts. + + List all GCP STS-enabled service accounts configured in your Datadog account. + + :rtype: GCPSTSServiceAccountsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_gcpsts_accounts_endpoint.call_with_http_info(**kwargs) + + def make_gcpsts_delegate(self, *, body: Union[dict, UnsetType]=unset, ) -> GCPSTSDelegateAccountResponse: + """Create a Datadog GCP principal. + + Create a Datadog GCP principal. + + :param body: Create a delegate service account within Datadog. + :type body: dict, optional + :rtype: GCPSTSDelegateAccountResponse + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + return self._make_gcpsts_delegate_endpoint.call_with_http_info(**kwargs) + + def update_gcpsts_account(self, account_id: str, body: GCPSTSServiceAccountUpdateRequest, ) -> GCPSTSServiceAccountResponse: + """Update STS Service Account. + + Update an STS enabled service account. + + :param account_id: Your GCP STS enabled service account's unique ID. + :type account_id: str + :type body: GCPSTSServiceAccountUpdateRequest + :rtype: GCPSTSServiceAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._update_gcpsts_account_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/google_chat_integration_api.py b/datadog_api_client/v2/api/google_chat_integration_api.py new file mode 100644 index 0000000000..07f158f95c --- /dev/null +++ b/datadog_api_client/v2/api/google_chat_integration_api.py @@ -0,0 +1,737 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.google_chat_organizations_response import GoogleChatOrganizationsResponse +from datadog_api_client.v2.model.google_chat_app_named_space_response import GoogleChatAppNamedSpaceResponse +from datadog_api_client.v2.model.google_chat_organization_response import GoogleChatOrganizationResponse +from datadog_api_client.v2.model.google_chat_delegated_user_response import GoogleChatDelegatedUserResponse +from datadog_api_client.v2.model.google_chat_organization_handles_response import GoogleChatOrganizationHandlesResponse +from datadog_api_client.v2.model.google_chat_organization_handle_response import GoogleChatOrganizationHandleResponse +from datadog_api_client.v2.model.google_chat_create_organization_handle_request import GoogleChatCreateOrganizationHandleRequest +from datadog_api_client.v2.model.google_chat_update_organization_handle_request import GoogleChatUpdateOrganizationHandleRequest +from datadog_api_client.v2.model.google_chat_target_audiences_response import GoogleChatTargetAudiencesResponse +from datadog_api_client.v2.model.google_chat_target_audience_response import GoogleChatTargetAudienceResponse +from datadog_api_client.v2.model.google_chat_target_audience_create_request import GoogleChatTargetAudienceCreateRequest +from datadog_api_client.v2.model.google_chat_target_audience_update_request import GoogleChatTargetAudienceUpdateRequest + + +class GoogleChatIntegrationApi: + """ + Configure your `Datadog Google Chat integration `_ + directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_google_chat_target_audience_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatTargetAudienceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/target-audiences", + "operation_id": "create_google_chat_target_audience", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GoogleChatTargetAudienceCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_organization_handle_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatOrganizationHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles", + "operation_id": "create_organization_handle", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GoogleChatCreateOrganizationHandleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_google_chat_delegated_user_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/delegated-user", + "operation_id": "delete_google_chat_delegated_user", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_google_chat_organization_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}", + "operation_id": "delete_google_chat_organization", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_google_chat_target_audience_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/target-audiences/{target_audience_id}", + "operation_id": "delete_google_chat_target_audience", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + "target_audience_id": { + "required": True, + "openapi_types": (str,), + "attribute": "target_audience_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_organization_handle_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles/{handle_id}", + "operation_id": "delete_organization_handle", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + "handle_id": { + "required": True, + "openapi_types": (str,), + "attribute": "handle_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_google_chat_delegated_user_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatDelegatedUserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/delegated-user", + "operation_id": "get_google_chat_delegated_user", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_google_chat_organization_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatOrganizationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}", + "operation_id": "get_google_chat_organization", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_google_chat_target_audience_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatTargetAudienceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/target-audiences/{target_audience_id}", + "operation_id": "get_google_chat_target_audience", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + "target_audience_id": { + "required": True, + "openapi_types": (str,), + "attribute": "target_audience_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_organization_handle_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatOrganizationHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles/{handle_id}", + "operation_id": "get_organization_handle", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + "handle_id": { + "required": True, + "openapi_types": (str,), + "attribute": "handle_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_space_by_display_name_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatAppNamedSpaceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/app/named-spaces/{domain_name}/{space_display_name}", + "operation_id": "get_space_by_display_name", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "domain_name": { + "required": True, + "openapi_types": (str,), + "attribute": "domain_name", + "location": "path", + }, + "space_display_name": { + "required": True, + "openapi_types": (str,), + "attribute": "space_display_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_google_chat_organizations_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatOrganizationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations", + "operation_id": "list_google_chat_organizations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_google_chat_target_audiences_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatTargetAudiencesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/target-audiences", + "operation_id": "list_google_chat_target_audiences", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_organization_handles_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatOrganizationHandlesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles", + "operation_id": "list_organization_handles", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_google_chat_target_audience_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatTargetAudienceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/target-audiences/{target_audience_id}", + "operation_id": "update_google_chat_target_audience", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + "target_audience_id": { + "required": True, + "openapi_types": (str,), + "attribute": "target_audience_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GoogleChatTargetAudienceUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_organization_handle_endpoint = _Endpoint( + settings={ + "response_type": (GoogleChatOrganizationHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles/{handle_id}", + "operation_id": "update_organization_handle", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "organization_binding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "organization_binding_id", + "location": "path", + }, + "handle_id": { + "required": True, + "openapi_types": (str,), + "attribute": "handle_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GoogleChatUpdateOrganizationHandleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_google_chat_target_audience(self, organization_binding_id: str, body: GoogleChatTargetAudienceCreateRequest, ) -> GoogleChatTargetAudienceResponse: + """Create a target audience. + + Create a target audience for a Google Chat organization binding in the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :param body: Target audience payload. + :type body: GoogleChatTargetAudienceCreateRequest + :rtype: GoogleChatTargetAudienceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + kwargs["body"] = body + + return self._create_google_chat_target_audience_endpoint.call_with_http_info(**kwargs) + + def create_organization_handle(self, organization_binding_id: str, body: GoogleChatCreateOrganizationHandleRequest, ) -> GoogleChatOrganizationHandleResponse: + """Create organization handle. + + Create an organization handle in the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :param body: Organization handle payload. + :type body: GoogleChatCreateOrganizationHandleRequest + :rtype: GoogleChatOrganizationHandleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + kwargs["body"] = body + + return self._create_organization_handle_endpoint.call_with_http_info(**kwargs) + + def delete_google_chat_delegated_user(self, organization_binding_id: str, ) -> None: + """Delete the delegated user. + + Delete the delegated user for a Google Chat organization binding from the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + return self._delete_google_chat_delegated_user_endpoint.call_with_http_info(**kwargs) + + def delete_google_chat_organization(self, organization_binding_id: str, ) -> None: + """Delete a Google Chat organization binding. + + Delete a Google Chat organization binding from the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + return self._delete_google_chat_organization_endpoint.call_with_http_info(**kwargs) + + def delete_google_chat_target_audience(self, organization_binding_id: str, target_audience_id: str, ) -> None: + """Delete a target audience. + + Delete a target audience from a Google Chat organization binding in the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :param target_audience_id: Your target audience ID. + :type target_audience_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + kwargs["target_audience_id"] = target_audience_id + + return self._delete_google_chat_target_audience_endpoint.call_with_http_info(**kwargs) + + def delete_organization_handle(self, organization_binding_id: str, handle_id: str, ) -> None: + """Delete organization handle. + + Delete an organization handle from the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :param handle_id: Your organization handle ID. + :type handle_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + kwargs["handle_id"] = handle_id + + return self._delete_organization_handle_endpoint.call_with_http_info(**kwargs) + + def get_google_chat_delegated_user(self, organization_binding_id: str, ) -> GoogleChatDelegatedUserResponse: + """Get the delegated user. + + Get the delegated user for a Google Chat organization binding in the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :rtype: GoogleChatDelegatedUserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + return self._get_google_chat_delegated_user_endpoint.call_with_http_info(**kwargs) + + def get_google_chat_organization(self, organization_binding_id: str, ) -> GoogleChatOrganizationResponse: + """Get a Google Chat organization binding. + + Get a Google Chat organization binding from the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :rtype: GoogleChatOrganizationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + return self._get_google_chat_organization_endpoint.call_with_http_info(**kwargs) + + def get_google_chat_target_audience(self, organization_binding_id: str, target_audience_id: str, ) -> GoogleChatTargetAudienceResponse: + """Get a target audience. + + Get a target audience for a Google Chat organization binding in the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :param target_audience_id: Your target audience ID. + :type target_audience_id: str + :rtype: GoogleChatTargetAudienceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + kwargs["target_audience_id"] = target_audience_id + + return self._get_google_chat_target_audience_endpoint.call_with_http_info(**kwargs) + + def get_organization_handle(self, organization_binding_id: str, handle_id: str, ) -> GoogleChatOrganizationHandleResponse: + """Get organization handle. + + Get an organization handle from the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :param handle_id: Your organization handle ID. + :type handle_id: str + :rtype: GoogleChatOrganizationHandleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + kwargs["handle_id"] = handle_id + + return self._get_organization_handle_endpoint.call_with_http_info(**kwargs) + + def get_space_by_display_name(self, domain_name: str, space_display_name: str, ) -> GoogleChatAppNamedSpaceResponse: + """Get space information by display name. + + Get the resource name and organization binding ID of a space in the Datadog Google Chat integration. + + :param domain_name: The Google Chat domain name. + :type domain_name: str + :param space_display_name: The Google Chat space display name. + :type space_display_name: str + :rtype: GoogleChatAppNamedSpaceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["domain_name"] = domain_name + + kwargs["space_display_name"] = space_display_name + + return self._get_space_by_display_name_endpoint.call_with_http_info(**kwargs) + + def list_google_chat_organizations(self, ) -> GoogleChatOrganizationsResponse: + """Get all Google Chat organization bindings. + + Get a list of all Google Chat organization bindings in the Datadog Google Chat integration. + + :rtype: GoogleChatOrganizationsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_google_chat_organizations_endpoint.call_with_http_info(**kwargs) + + def list_google_chat_target_audiences(self, organization_binding_id: str, ) -> GoogleChatTargetAudiencesResponse: + """Get all target audiences. + + Get a list of all target audiences for a Google Chat organization binding in the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :rtype: GoogleChatTargetAudiencesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + return self._list_google_chat_target_audiences_endpoint.call_with_http_info(**kwargs) + + def list_organization_handles(self, organization_binding_id: str, ) -> GoogleChatOrganizationHandlesResponse: + """Get all organization handles. + + Get a list of all organization handles from the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :rtype: GoogleChatOrganizationHandlesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + return self._list_organization_handles_endpoint.call_with_http_info(**kwargs) + + def update_google_chat_target_audience(self, organization_binding_id: str, target_audience_id: str, body: GoogleChatTargetAudienceUpdateRequest, ) -> GoogleChatTargetAudienceResponse: + """Update a target audience. + + Update a target audience for a Google Chat organization binding in the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :param target_audience_id: Your target audience ID. + :type target_audience_id: str + :param body: Target audience payload. + :type body: GoogleChatTargetAudienceUpdateRequest + :rtype: GoogleChatTargetAudienceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + kwargs["target_audience_id"] = target_audience_id + + kwargs["body"] = body + + return self._update_google_chat_target_audience_endpoint.call_with_http_info(**kwargs) + + def update_organization_handle(self, organization_binding_id: str, handle_id: str, body: GoogleChatUpdateOrganizationHandleRequest, ) -> GoogleChatOrganizationHandleResponse: + """Update organization handle. + + Update an organization handle from the Datadog Google Chat integration. + + :param organization_binding_id: Your organization binding ID. + :type organization_binding_id: str + :param handle_id: Your organization handle ID. + :type handle_id: str + :param body: Organization handle payload. + :type body: GoogleChatUpdateOrganizationHandleRequest + :rtype: GoogleChatOrganizationHandleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["organization_binding_id"] = organization_binding_id + + kwargs["handle_id"] = handle_id + + kwargs["body"] = body + + return self._update_organization_handle_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/governance_console_api.py b/datadog_api_client/v2/api/governance_console_api.py new file mode 100644 index 0000000000..baa000c0e9 --- /dev/null +++ b/datadog_api_client/v2/api/governance_console_api.py @@ -0,0 +1,610 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.governance_config_response import GovernanceConfigResponse +from datadog_api_client.v2.model.governance_controls_response import GovernanceControlsResponse +from datadog_api_client.v2.model.governance_control_response import GovernanceControlResponse +from datadog_api_client.v2.model.governance_control_update_request import GovernanceControlUpdateRequest +from datadog_api_client.v2.model.governance_control_detections_response import GovernanceControlDetectionsResponse +from datadog_api_client.v2.model.control_notification_settings_response import ControlNotificationSettingsResponse +from datadog_api_client.v2.model.control_notification_settings_update_request import ControlNotificationSettingsUpdateRequest +from datadog_api_client.v2.model.governance_mitigation_request import GovernanceMitigationRequest +from datadog_api_client.v2.model.governance_control_detection_response import GovernanceControlDetectionResponse +from datadog_api_client.v2.model.governance_control_detection_update_request import GovernanceControlDetectionUpdateRequest +from datadog_api_client.v2.model.governance_insights_response import GovernanceInsightsResponse +from datadog_api_client.v2.model.governance_notification_settings_response import GovernanceNotificationSettingsResponse +from datadog_api_client.v2.model.governance_notification_settings_update_request import GovernanceNotificationSettingsUpdateRequest + + +class GovernanceConsoleApi: + """ + The Governance Console finds issues that build up across a Datadog organization over time, + such as API keys nobody uses, users who no longer need access, or custom metrics that are + never queried, and tracks them through to a fix. + + These endpoints allow you to: + + * Read insights: measures of how your organization uses Datadog, each with the query behind it. + * Configure controls: the rules deciding how one kind of issue is found and what is done about it. + * Act on detections: the issues a control found. Assign, defer, accept as an exception, or fix. + * Manage settings: organization-wide configuration and notification destinations. + + See the `Governance Console page `_ + for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_governance_config_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/config", + "operation_id": "get_governance_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_governance_control_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceControlResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/control/{detection_type}", + "operation_id": "get_governance_control", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "detection_type": { + "required": True, + "openapi_types": (str,), + "attribute": "detection_type", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_governance_control_notification_settings_endpoint = _Endpoint( + settings={ + "response_type": (ControlNotificationSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/control/{detection_type}/notification_settings", + "operation_id": "get_governance_control_notification_settings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "detection_type": { + "required": True, + "openapi_types": (str,), + "attribute": "detection_type", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_governance_detection_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceControlDetectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/detections/{detection_id}", + "operation_id": "get_governance_detection", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "detection_id": { + "required": True, + "openapi_types": (str,), + "attribute": "detection_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_governance_notification_settings_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceNotificationSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/notification_settings", + "operation_id": "get_governance_notification_settings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_governance_control_detections_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceControlDetectionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/control/{detection_type}/detections", + "operation_id": "list_governance_control_detections", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "detection_type": { + "required": True, + "openapi_types": (str,), + "attribute": "detection_type", + "location": "path", + }, + "filter_state": { + "openapi_types": (str,), + "attribute": "filter[state]", + "location": "query", + }, + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_governance_controls_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceControlsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/control", + "operation_id": "list_governance_controls", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_governance_insights_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceInsightsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/insights", + "operation_id": "list_governance_insights", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_product": { + "openapi_types": ([str],), + "attribute": "filter[product]", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._mitigate_governance_detections_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/detections/mitigate", + "operation_id": "mitigate_governance_detections", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GovernanceMitigationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_governance_control_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceControlResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/control/{detection_type}", + "operation_id": "update_governance_control", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "detection_type": { + "required": True, + "openapi_types": (str,), + "attribute": "detection_type", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GovernanceControlUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_governance_control_notification_settings_endpoint = _Endpoint( + settings={ + "response_type": (ControlNotificationSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/control/{detection_type}/notification_settings", + "operation_id": "update_governance_control_notification_settings", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "detection_type": { + "required": True, + "openapi_types": (str,), + "attribute": "detection_type", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ControlNotificationSettingsUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_governance_detection_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceControlDetectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/detections/{detection_id}", + "operation_id": "update_governance_detection", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "detection_id": { + "required": True, + "openapi_types": (str,), + "attribute": "detection_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GovernanceControlDetectionUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_governance_notification_settings_endpoint = _Endpoint( + settings={ + "response_type": (GovernanceNotificationSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/governance/notification_settings", + "operation_id": "update_governance_notification_settings", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GovernanceNotificationSettingsUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def get_governance_config(self, ) -> GovernanceConfigResponse: + """Get the Governance Console configuration. + + Retrieve the Governance Console configuration for the organization, including whether the + Console is enabled, whether assignment notifications are enabled, and whether usage + attribution is configured. + + :rtype: GovernanceConfigResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_governance_config_endpoint.call_with_http_info(**kwargs) + + def get_governance_control(self, detection_type: str, ) -> GovernanceControlResponse: + """Get a control. + + Retrieve a single governance control by its detection type, including the organization's current + detection, notification, and mitigation configuration and detection counts. + + :param detection_type: The detection type that identifies the control, for example ``unused_api_keys``. + :type detection_type: str + :rtype: GovernanceControlResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["detection_type"] = detection_type + + return self._get_governance_control_endpoint.call_with_http_info(**kwargs) + + def get_governance_control_notification_settings(self, detection_type: str, ) -> ControlNotificationSettingsResponse: + """Get control notification settings. + + Retrieve the notification settings for the governance control with the given detection type, + including, for each supported event type, whether notifications are enabled and which + destinations receive them. + + :param detection_type: The detection type that identifies the control; for example, ``unused_api_keys``. + :type detection_type: str + :rtype: ControlNotificationSettingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["detection_type"] = detection_type + + return self._get_governance_control_notification_settings_endpoint.call_with_http_info(**kwargs) + + def get_governance_detection(self, detection_id: str, ) -> GovernanceControlDetectionResponse: + """Get a detection. + + Retrieve a single governance detection by its unique identifier. + + :param detection_id: The unique identifier of the detection. + :type detection_id: str + :rtype: GovernanceControlDetectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["detection_id"] = detection_id + + return self._get_governance_detection_endpoint.call_with_http_info(**kwargs) + + def get_governance_notification_settings(self, ) -> GovernanceNotificationSettingsResponse: + """Get notification settings. + + Retrieve the organization-wide governance notification settings, including whether users are + notified when detections are assigned to them. + + :rtype: GovernanceNotificationSettingsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_governance_notification_settings_endpoint.call_with_http_info(**kwargs) + + def list_governance_control_detections(self, detection_type: str, *, filter_state: Union[str, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> GovernanceControlDetectionsResponse: + """List control detections. + + Retrieve the detections produced by the governance control with the given detection type. + Results can be filtered by state and free-text query, sorted, and paginated. + + :param detection_type: The detection type that identifies the control; for example, ``unused_api_keys``. + :type detection_type: str + :param filter_state: Restrict the results to detections in the given state. + :type filter_state: str, optional + :param filter_query: Restrict the results to detections matching the given free-text query. + :type filter_query: str, optional + :param sort: A comma-separated list of attributes to sort detections by. Prefix an attribute with + ``-`` for descending order. + + The attributes available for sorting are ``id`` , ``created_at`` , ``assigned_to`` , + ``detection_type`` , ``display_name`` , ``exception_at`` , ``mitigate_after`` , ``mitigated_at`` , + ``priority`` , ``resource_id`` , and ``state``. Defaults to ``created_at,-id``. + :type sort: str, optional + :param page_number: The zero-based index of the page to return; the first page is 0. + :type page_number: int, optional + :param page_size: The number of detections to return per page. + :type page_size: int, optional + :rtype: GovernanceControlDetectionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["detection_type"] = detection_type + + if filter_state is not unset: + kwargs["filter_state"] = filter_state + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if sort is not unset: + kwargs["sort"] = sort + + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + return self._list_governance_control_detections_endpoint.call_with_http_info(**kwargs) + + def list_governance_controls(self, ) -> GovernanceControlsResponse: + """List controls. + + Retrieve the list of governance controls configured for the organization. Each control pairs a + detection definition with the organization's current detection, notification, and mitigation + configuration, along with counts of active and mitigated detections. + + :rtype: GovernanceControlsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_governance_controls_endpoint.call_with_http_info(**kwargs) + + def list_governance_insights(self, *, filter_product: Union[List[str], UnsetType]=unset, ) -> GovernanceInsightsResponse: + """List insights. + + Retrieve the list of governance insights available to the organization. Each insight + reports the query used to compute it, so that the value can be computed client-side. + Insights can be filtered by product. + + :param filter_product: Restrict the results to insights belonging to the given products. May be repeated to + filter by multiple products. Matching is case-insensitive. + :type filter_product: [str], optional + :rtype: GovernanceInsightsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_product is not unset: + kwargs["filter_product"] = filter_product + + return self._list_governance_insights_endpoint.call_with_http_info(**kwargs) + + def mitigate_governance_detections(self, body: GovernanceMitigationRequest, ) -> None: + """Mitigate detections. + + Apply a mitigation to a set of governance detections of a given detection type. When the + mitigation type is omitted, the control's configured mitigation is used. The request is + accepted for asynchronous processing. + + :type body: GovernanceMitigationRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._mitigate_governance_detections_endpoint.call_with_http_info(**kwargs) + + def update_governance_control(self, detection_type: str, body: GovernanceControlUpdateRequest, ) -> GovernanceControlResponse: + """Update a control. + + Update the detection, notification, and mitigation configuration of a governance control. Only + the attributes present in the request are modified. Changing the mitigation type or its + parameters may require additional permissions. + + :param detection_type: The detection type that identifies the control, for example ``unused_api_keys``. + :type detection_type: str + :type body: GovernanceControlUpdateRequest + :rtype: GovernanceControlResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["detection_type"] = detection_type + + kwargs["body"] = body + + return self._update_governance_control_endpoint.call_with_http_info(**kwargs) + + def update_governance_control_notification_settings(self, detection_type: str, body: ControlNotificationSettingsUpdateRequest, ) -> ControlNotificationSettingsResponse: + """Update control notification settings. + + Replace the notification settings for the governance control with the given detection type, + setting, for each supported event type, whether notifications are enabled and which + destinations receive them. + + :param detection_type: The detection type that identifies the control; for example, ``unused_api_keys``. + :type detection_type: str + :type body: ControlNotificationSettingsUpdateRequest + :rtype: ControlNotificationSettingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["detection_type"] = detection_type + + kwargs["body"] = body + + return self._update_governance_control_notification_settings_endpoint.call_with_http_info(**kwargs) + + def update_governance_detection(self, detection_id: str, body: GovernanceControlDetectionUpdateRequest, ) -> GovernanceControlDetectionResponse: + """Update a detection. + + Update a governance detection by its unique identifier. Only the attributes present in the + request are modified, allowing a detection to be acknowledged as an exception, reopened, + reassigned, or deferred for mitigation. + + :param detection_id: The unique identifier of the detection. + :type detection_id: str + :type body: GovernanceControlDetectionUpdateRequest + :rtype: GovernanceControlDetectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["detection_id"] = detection_id + + kwargs["body"] = body + + return self._update_governance_detection_endpoint.call_with_http_info(**kwargs) + + def update_governance_notification_settings(self, body: GovernanceNotificationSettingsUpdateRequest, ) -> GovernanceNotificationSettingsResponse: + """Update notification settings. + + Update the organization-wide governance notification settings. Only the attributes present in + the request are modified. + + :type body: GovernanceNotificationSettingsUpdateRequest + :rtype: GovernanceNotificationSettingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_governance_notification_settings_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/high_availability_multi_region_api.py b/datadog_api_client/v2/api/high_availability_multi_region_api.py new file mode 100644 index 0000000000..7382f0082f --- /dev/null +++ b/datadog_api_client/v2/api/high_availability_multi_region_api.py @@ -0,0 +1,103 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.hamr_org_connection_response import HamrOrgConnectionResponse +from datadog_api_client.v2.model.hamr_org_connection_request import HamrOrgConnectionRequest + + +class HighAvailabilityMultiRegionApi: + """ + Configure High Availability Multi-Region (HAMR) connections between Datadog organizations. + HAMR provides disaster recovery capabilities by maintaining synchronized data between primary + and secondary organizations across different datacenters. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_hamr_org_connection_endpoint = _Endpoint( + settings={ + "response_type": (HamrOrgConnectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/hamr", + "operation_id": "create_hamr_org_connection", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (HamrOrgConnectionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_hamr_org_connection_endpoint = _Endpoint( + settings={ + "response_type": (HamrOrgConnectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/hamr", + "operation_id": "get_hamr_org_connection", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def create_hamr_org_connection(self, body: HamrOrgConnectionRequest, ) -> HamrOrgConnectionResponse: + """Create or update HAMR organization connection. + + Create or update the High Availability Multi-Region (HAMR) organization connection. + This endpoint allows you to configure the HAMR connection between the authenticated organization + and a target organization, including setting the connection status (ONBOARDING, PASSIVE, FAILOVER, ACTIVE, RECOVERY) + + :type body: HamrOrgConnectionRequest + :rtype: HamrOrgConnectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_hamr_org_connection_endpoint.call_with_http_info(**kwargs) + + def get_hamr_org_connection(self, ) -> HamrOrgConnectionResponse: + """Get HAMR organization connection. + + Retrieve the High Availability Multi-Region (HAMR) organization connection details for the authenticated organization. + This endpoint returns information about the HAMR connection configuration, including the target organization, + datacenter, status, and whether this is the primary or secondary organization in the HAMR relationship. + + :rtype: HamrOrgConnectionResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_hamr_org_connection_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/identity_providers_api.py b/datadog_api_client/v2/api/identity_providers_api.py new file mode 100644 index 0000000000..aaab48d157 --- /dev/null +++ b/datadog_api_client/v2/api/identity_providers_api.py @@ -0,0 +1,270 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.identity_providers_response import IdentityProvidersResponse +from datadog_api_client.v2.model.identity_provider_response import IdentityProviderResponse +from datadog_api_client.v2.model.identity_provider_update_request import IdentityProviderUpdateRequest +from datadog_api_client.v2.model.users_response import UsersResponse +from datadog_api_client.v2.model.query_sort_order import QuerySortOrder +from datadog_api_client.v2.model.user import User + + +class IdentityProvidersApi: + """ + Manage identity providers and user authentication method overrides. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_identity_providers_endpoint = _Endpoint( + settings={ + "response_type": (IdentityProvidersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/identity_providers", + "operation_id": "list_identity_providers", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_identity_provider_users_endpoint = _Endpoint( + settings={ + "response_type": (UsersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/identity_providers/{idp_id}/users", + "operation_id": "list_identity_provider_users", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "idp_id": { + "required": True, + "openapi_types": (str,), + "attribute": "idp_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "sort_dir": { + "openapi_types": (QuerySortOrder,), + "attribute": "sort_dir", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_status": { + "openapi_types": (str,), + "attribute": "filter[status]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_identity_provider_endpoint = _Endpoint( + settings={ + "response_type": (IdentityProviderResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/identity_providers/{idp_id}", + "operation_id": "update_identity_provider", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "idp_id": { + "required": True, + "openapi_types": (str,), + "attribute": "idp_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IdentityProviderUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def list_identity_providers(self, ) -> IdentityProvidersResponse: + """List identity providers. + + Get all identity providers available for the current organization. + + :rtype: IdentityProvidersResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_identity_providers_endpoint.call_with_http_info(**kwargs) + + def list_identity_provider_users(self, idp_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, sort_dir: Union[QuerySortOrder, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_status: Union[str, UnsetType]=unset, ) -> UsersResponse: + """List users with an identity provider override. + + Get all users in the organization whose login method has been overridden + to use the specified identity provider. + + :param idp_id: The ID of the identity provider. + :type idp_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: User attribute to order results by. Options include ``email`` and ``name``. + :type sort: str, optional + :param sort_dir: Direction of sort. Options: ``asc`` , ``desc``. + :type sort_dir: QuerySortOrder, optional + :param filter: Filter users by the given string. Defaults to no filtering. + :type filter: str, optional + :param filter_status: Filter on status attribute. + Comma-separated list, with possible values ``Active`` , ``Pending`` , and ``Disabled``. + Defaults to no filtering. + :type filter_status: str, optional + :rtype: UsersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["idp_id"] = idp_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if sort_dir is not unset: + kwargs["sort_dir"] = sort_dir + + if filter is not unset: + kwargs["filter"] = filter + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + return self._list_identity_provider_users_endpoint.call_with_http_info(**kwargs) + + def list_identity_provider_users_with_pagination(self, idp_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, sort_dir: Union[QuerySortOrder, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_status: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[User]: + """List users with an identity provider override. + + Provide a paginated version of :meth:`list_identity_provider_users`, returning all items. + + :param idp_id: The ID of the identity provider. + :type idp_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: User attribute to order results by. Options include ``email`` and ``name``. + :type sort: str, optional + :param sort_dir: Direction of sort. Options: ``asc`` , ``desc``. + :type sort_dir: QuerySortOrder, optional + :param filter: Filter users by the given string. Defaults to no filtering. + :type filter: str, optional + :param filter_status: Filter on status attribute. + Comma-separated list, with possible values ``Active`` , ``Pending`` , and ``Disabled``. + Defaults to no filtering. + :type filter_status: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[User] + """ + kwargs: Dict[str, Any] = {} + kwargs["idp_id"] = idp_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if sort_dir is not unset: + kwargs["sort_dir"] = sort_dir + + if filter is not unset: + kwargs["filter"] = filter + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_identity_provider_users_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_identity_provider(self, idp_id: str, body: IdentityProviderUpdateRequest, ) -> IdentityProviderResponse: + """Update an identity provider. + + Enable or disable an identity provider for the current organization. + + :param idp_id: The ID of the identity provider. + :type idp_id: str + :type body: IdentityProviderUpdateRequest + :rtype: IdentityProviderResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["idp_id"] = idp_id + + kwargs["body"] = body + + return self._update_identity_provider_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/incidents_api.py b/datadog_api_client/v2/api/incidents_api.py new file mode 100644 index 0000000000..306e8eb148 --- /dev/null +++ b/datadog_api_client/v2/api/incidents_api.py @@ -0,0 +1,4444 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.incidents_response import IncidentsResponse +from datadog_api_client.v2.model.incident_related_object import IncidentRelatedObject +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_handles_response import IncidentHandlesResponse +from datadog_api_client.v2.model.incident_handle_response import IncidentHandleResponse +from datadog_api_client.v2.model.incident_handle_request import IncidentHandleRequest +from datadog_api_client.v2.model.global_incident_settings_response import GlobalIncidentSettingsResponse +from datadog_api_client.v2.model.global_incident_settings_request import GlobalIncidentSettingsRequest +from datadog_api_client.v2.model.incident_google_chat_configuration_response import IncidentGoogleChatConfigurationResponse +from datadog_api_client.v2.model.incident_google_chat_configuration_request import IncidentGoogleChatConfigurationRequest +from datadog_api_client.v2.model.incident_google_chat_configuration_patch_request import IncidentGoogleChatConfigurationPatchRequest +from datadog_api_client.v2.model.incident_google_meet_configuration_response import IncidentGoogleMeetConfigurationResponse +from datadog_api_client.v2.model.incident_google_meet_configuration_request import IncidentGoogleMeetConfigurationRequest +from datadog_api_client.v2.model.incident_google_meet_configuration_patch_request import IncidentGoogleMeetConfigurationPatchRequest +from datadog_api_client.v2.model.incident_impact_fields_response import IncidentImpactFieldsResponse +from datadog_api_client.v2.model.incident_impact_field_response import IncidentImpactFieldResponse +from datadog_api_client.v2.model.incident_impact_field_request import IncidentImpactFieldRequest +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 CreateIncidentNotificationTemplateRequest +from datadog_api_client.v2.model.patch_incident_notification_template_request import PatchIncidentNotificationTemplateRequest +from datadog_api_client.v2.model.postmortem_templates_response import PostmortemTemplatesResponse +from datadog_api_client.v2.model.postmortem_template_response import PostmortemTemplateResponse +from datadog_api_client.v2.model.postmortem_template_request import PostmortemTemplateRequest +from datadog_api_client.v2.model.incident_rules_response import IncidentRulesResponse +from datadog_api_client.v2.model.incident_rule_response import IncidentRuleResponse +from datadog_api_client.v2.model.incident_rule_request import IncidentRuleRequest +from datadog_api_client.v2.model.incident_rule_patch_request import IncidentRulePatchRequest +from datadog_api_client.v2.model.incident_type_list_response import IncidentTypeListResponse +from datadog_api_client.v2.model.incident_type_response import IncidentTypeResponse +from datadog_api_client.v2.model.incident_type_create_request import IncidentTypeCreateRequest +from datadog_api_client.v2.model.incident_org_settings_list_response import IncidentOrgSettingsListResponse +from datadog_api_client.v2.model.incident_type_patch_request import IncidentTypePatchRequest +from datadog_api_client.v2.model.incident_org_settings_response import IncidentOrgSettingsResponse +from datadog_api_client.v2.model.incident_user_defined_field_list_response import IncidentUserDefinedFieldListResponse +from datadog_api_client.v2.model.incident_user_defined_field_response import IncidentUserDefinedFieldResponse +from datadog_api_client.v2.model.incident_user_defined_field_create_request import IncidentUserDefinedFieldCreateRequest +from datadog_api_client.v2.model.incident_user_defined_field_update_request import IncidentUserDefinedFieldUpdateRequest +from datadog_api_client.v2.model.incident_user_defined_roles_response import IncidentUserDefinedRolesResponse +from datadog_api_client.v2.model.incident_user_defined_role_response import IncidentUserDefinedRoleResponse +from datadog_api_client.v2.model.incident_user_defined_role_request import IncidentUserDefinedRoleRequest +from datadog_api_client.v2.model.incident_user_defined_role_patch_request import IncidentUserDefinedRolePatchRequest +from datadog_api_client.v2.model.incident_import_response import IncidentImportResponse +from datadog_api_client.v2.model.incident_import_related_object import IncidentImportRelatedObject +from datadog_api_client.v2.model.incident_import_request import IncidentImportRequest +from datadog_api_client.v2.model.incident_search_response import IncidentSearchResponse +from datadog_api_client.v2.model.incident_search_sort_order import IncidentSearchSortOrder +from datadog_api_client.v2.model.incident_search_response_incidents_data import IncidentSearchResponseIncidentsData +from datadog_api_client.v2.model.incident_update_request import IncidentUpdateRequest +from datadog_api_client.v2.model.incident_ai_postmortem_response import IncidentAIPostmortemResponse +from datadog_api_client.v2.model.attachment_array import AttachmentArray +from datadog_api_client.v2.model.attachment import Attachment +from datadog_api_client.v2.model.create_attachment_request import CreateAttachmentRequest +from datadog_api_client.v2.model.postmortem_attachment_request import PostmortemAttachmentRequest +from datadog_api_client.v2.model.patch_attachment_request import PatchAttachmentRequest +from datadog_api_client.v2.model.incident_page_uuid_response import IncidentPageUUIDResponse +from datadog_api_client.v2.model.incident_create_page_from_incident_request import IncidentCreatePageFromIncidentRequest +from datadog_api_client.v2.model.incident_configuration_response import IncidentConfigurationResponse +from datadog_api_client.v2.model.incident_configuration_patch_request import IncidentConfigurationPatchRequest +from datadog_api_client.v2.model.incident_configuration_request import IncidentConfigurationRequest +from datadog_api_client.v2.model.incident_impacts_response import IncidentImpactsResponse +from datadog_api_client.v2.model.incident_impact_related_object import IncidentImpactRelatedObject +from datadog_api_client.v2.model.incident_impact_response import IncidentImpactResponse +from datadog_api_client.v2.model.incident_impact_create_request import IncidentImpactCreateRequest +from datadog_api_client.v2.model.incident_impact_patch_request import IncidentImpactPatchRequest +from datadog_api_client.v2.model.incident_create_on_call_page_request import IncidentCreateOnCallPageRequest +from datadog_api_client.v2.model.incident_integration_metadata_response import IncidentIntegrationMetadataResponse +from datadog_api_client.v2.model.incident_on_call_page_link_request import IncidentOnCallPageLinkRequest +from datadog_api_client.v2.model.incident_integration_metadata_list_response import IncidentIntegrationMetadataListResponse +from datadog_api_client.v2.model.incident_integration_metadata_create_request import IncidentIntegrationMetadataCreateRequest +from datadog_api_client.v2.model.incident_integration_metadata_patch_request import IncidentIntegrationMetadataPatchRequest +from datadog_api_client.v2.model.incident_todo_list_response import IncidentTodoListResponse +from datadog_api_client.v2.model.incident_todo_response import IncidentTodoResponse +from datadog_api_client.v2.model.incident_todo_create_request import IncidentTodoCreateRequest +from datadog_api_client.v2.model.incident_todo_patch_request import IncidentTodoPatchRequest +from datadog_api_client.v2.model.incident_responders_response import IncidentRespondersResponse +from datadog_api_client.v2.model.incident_responder_response import IncidentResponderResponse +from datadog_api_client.v2.model.incident_responder_request import IncidentResponderRequest +from datadog_api_client.v2.model.incident_service_now_record_request import IncidentServiceNowRecordRequest +from datadog_api_client.v2.model.incident_timestamp_overrides_response import IncidentTimestampOverridesResponse +from datadog_api_client.v2.model.incident_timestamp_override_response import IncidentTimestampOverrideResponse +from datadog_api_client.v2.model.incident_timestamp_override_request import IncidentTimestampOverrideRequest +from datadog_api_client.v2.model.incident_timestamp_override_patch_request import IncidentTimestampOverridePatchRequest + + +class IncidentsApi: + """ + Manage incident response, as well as associated attachments, metadata, and todos. See the `Incident Management page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_global_incident_handle_endpoint = _Endpoint( + settings={ + "response_type": (IncidentHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/global/incident-handles", + "operation_id": "create_global_incident_handle", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (IncidentHandleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_endpoint = _Endpoint( + settings={ + "response_type": (IncidentResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents", + "operation_id": "create_incident", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (IncidentCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_attachment_endpoint = _Endpoint( + settings={ + "response_type": (Attachment,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/attachments", + "operation_id": "create_incident_attachment", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (CreateAttachmentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_configuration_endpoint = _Endpoint( + settings={ + "response_type": (IncidentConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/configurations", + "operation_id": "create_incident_configuration", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentConfigurationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_google_chat_configuration_endpoint = _Endpoint( + settings={ + "response_type": (IncidentGoogleChatConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/google-chat-configurations", + "operation_id": "create_incident_google_chat_configuration", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (IncidentGoogleChatConfigurationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_google_meet_configuration_endpoint = _Endpoint( + settings={ + "response_type": (IncidentGoogleMeetConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/google-meet-configurations", + "operation_id": "create_incident_google_meet_configuration", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (IncidentGoogleMeetConfigurationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_impact_endpoint = _Endpoint( + settings={ + "response_type": (IncidentImpactResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/impacts", + "operation_id": "create_incident_impact", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "include": { + "openapi_types": ([IncidentImpactRelatedObject],), + "attribute": "include", + "location": "query", + "collection_format": "csv", + }, + "body": { + "required": True, + "openapi_types": (IncidentImpactCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_impact_field_endpoint = _Endpoint( + settings={ + "response_type": (IncidentImpactFieldResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/impact-fields", + "operation_id": "create_incident_impact_field", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (IncidentImpactFieldRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_integration_endpoint = _Endpoint( + settings={ + "response_type": (IncidentIntegrationMetadataResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/integrations", + "operation_id": "create_incident_integration", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentIntegrationMetadataCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + 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,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-templates", + "operation_id": "create_incident_notification_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateIncidentNotificationTemplateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_postmortem_attachment_endpoint = _Endpoint( + settings={ + "response_type": (Attachment,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/{incident_id}/attachments/postmortems", + "operation_id": "create_incident_postmortem_attachment", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PostmortemAttachmentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_postmortem_template_endpoint = _Endpoint( + settings={ + "response_type": (PostmortemTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/postmortem-templates", + "operation_id": "create_incident_postmortem_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (PostmortemTemplateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_responder_endpoint = _Endpoint( + settings={ + "response_type": (IncidentResponderResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/responders", + "operation_id": "create_incident_responder", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentResponderRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_rule_endpoint = _Endpoint( + settings={ + "response_type": (IncidentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/rules", + "operation_id": "create_incident_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (IncidentRuleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_service_now_record_endpoint = _Endpoint( + settings={ + "response_type": (IncidentIntegrationMetadataResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/servicenow-records", + "operation_id": "create_incident_service_now_record", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentServiceNowRecordRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_todo_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTodoResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/todos", + "operation_id": "create_incident_todo", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentTodoCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_type_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTypeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/types", + "operation_id": "create_incident_type", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (IncidentTypeCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_user_defined_field_endpoint = _Endpoint( + settings={ + "response_type": (IncidentUserDefinedFieldResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-fields", + "operation_id": "create_incident_user_defined_field", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (IncidentUserDefinedFieldCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_incident_user_defined_role_endpoint = _Endpoint( + settings={ + "response_type": (IncidentUserDefinedRoleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-roles", + "operation_id": "create_incident_user_defined_role", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (IncidentUserDefinedRoleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_on_call_page_from_incident_endpoint = _Endpoint( + settings={ + "response_type": (IncidentPageUUIDResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/page", + "operation_id": "create_on_call_page_from_incident", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentCreateOnCallPageRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_page_from_incident_endpoint = _Endpoint( + settings={ + "response_type": (IncidentPageUUIDResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/cases/page", + "operation_id": "create_page_from_incident", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentCreatePageFromIncidentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_timestamp_override_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTimestampOverrideResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/timestamp-overrides", + "operation_id": "create_timestamp_override", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentTimestampOverrideRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_global_incident_handle_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/global/incident-handles", + "operation_id": "delete_global_incident_handle", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}", + "operation_id": "delete_incident", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_attachment_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/attachments/{attachment_id}", + "operation_id": "delete_incident_attachment", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "attachment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "attachment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_impact_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/impacts/{impact_id}", + "operation_id": "delete_incident_impact", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "impact_id": { + "required": True, + "openapi_types": (str,), + "attribute": "impact_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_impact_field_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/impact-fields/{field_id}", + "operation_id": "delete_incident_impact_field", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "field_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "field_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_integration_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/integrations/{integration_metadata_id}", + "operation_id": "delete_incident_integration", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "integration_metadata_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_metadata_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + 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, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-templates/{id}", + "operation_id": "delete_incident_notification_template", + "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_postmortem_template_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/postmortem-templates/{template_id}", + "operation_id": "delete_incident_postmortem_template", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (str,), + "attribute": "template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_responder_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/responders/{responder_id}", + "operation_id": "delete_incident_responder", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "responder_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "responder_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/rules/{rule_id}", + "operation_id": "delete_incident_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_todo_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/todos/{todo_id}", + "operation_id": "delete_incident_todo", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "todo_id": { + "required": True, + "openapi_types": (str,), + "attribute": "todo_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_type_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/types/{incident_type_id}", + "operation_id": "delete_incident_type", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "incident_type_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_type_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_user_defined_field_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-fields/{field_id}", + "operation_id": "delete_incident_user_defined_field", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "field_id": { + "required": True, + "openapi_types": (str,), + "attribute": "field_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_incident_user_defined_role_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-roles/{role_id}", + "operation_id": "delete_incident_user_defined_role", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "role_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_timestamp_override_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/timestamp-overrides/{id}", + "operation_id": "delete_timestamp_override", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_global_incident_settings_endpoint = _Endpoint( + settings={ + "response_type": (GlobalIncidentSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/global/settings", + "operation_id": "get_global_incident_settings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_incident_endpoint = _Endpoint( + settings={ + "response_type": (IncidentResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}", + "operation_id": "get_incident", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "include": { + "openapi_types": ([IncidentRelatedObject],), + "attribute": "include", + "location": "query", + "collection_format": "csv", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_incident_ai_postmortem_endpoint = _Endpoint( + settings={ + "response_type": (IncidentAIPostmortemResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/ai/postmortem", + "operation_id": "get_incident_ai_postmortem", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_incident_integration_endpoint = _Endpoint( + settings={ + "response_type": (IncidentIntegrationMetadataResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/integrations/{integration_metadata_id}", + "operation_id": "get_incident_integration", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "integration_metadata_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_metadata_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + 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,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-templates/{id}", + "operation_id": "get_incident_notification_template", + "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_postmortem_template_endpoint = _Endpoint( + settings={ + "response_type": (PostmortemTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/postmortem-templates/{template_id}", + "operation_id": "get_incident_postmortem_template", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (str,), + "attribute": "template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_incident_responder_endpoint = _Endpoint( + settings={ + "response_type": (IncidentResponderResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/responders/{responder_id}", + "operation_id": "get_incident_responder", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "responder_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "responder_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_incident_rule_endpoint = _Endpoint( + settings={ + "response_type": (IncidentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/rules/{rule_id}", + "operation_id": "get_incident_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_incident_todo_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTodoResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/todos/{todo_id}", + "operation_id": "get_incident_todo", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "todo_id": { + "required": True, + "openapi_types": (str,), + "attribute": "todo_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_incident_type_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTypeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/types/{incident_type_id}", + "operation_id": "get_incident_type", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_type_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_type_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_incident_user_defined_field_endpoint = _Endpoint( + settings={ + "response_type": (IncidentUserDefinedFieldResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-fields/{field_id}", + "operation_id": "get_incident_user_defined_field", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "field_id": { + "required": True, + "openapi_types": (str,), + "attribute": "field_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_incident_user_defined_role_endpoint = _Endpoint( + settings={ + "response_type": (IncidentUserDefinedRoleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-roles/{role_id}", + "operation_id": "get_incident_user_defined_role", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "role_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_org_settings_by_incident_type_endpoint = _Endpoint( + settings={ + "response_type": (IncidentOrgSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/types/{incident_type_id}/org-settings", + "operation_id": "get_org_settings_by_incident_type", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_type_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "incident_type_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._import_incident_endpoint = _Endpoint( + settings={ + "response_type": (IncidentImportResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/import", + "operation_id": "import_incident", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": ([IncidentImportRelatedObject],), + "attribute": "include", + "location": "query", + "collection_format": "csv", + }, + "body": { + "required": True, + "openapi_types": (IncidentImportRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._link_page_to_incident_endpoint = _Endpoint( + settings={ + "response_type": (IncidentIntegrationMetadataResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/pages/link", + "operation_id": "link_page_to_incident", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentOnCallPageLinkRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_global_incident_handles_endpoint = _Endpoint( + settings={ + "response_type": (IncidentHandlesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/global/incident-handles", + "operation_id": "list_global_incident_handles", + "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_attachments_endpoint = _Endpoint( + settings={ + "response_type": (AttachmentArray,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/{incident_id}/attachments", + "operation_id": "list_incident_attachments", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "filter_attachment_type": { + "openapi_types": (str,), + "attribute": "filter[attachment_type]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_impact_fields_endpoint = _Endpoint( + settings={ + "response_type": (IncidentImpactFieldsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/impact-fields", + "operation_id": "list_incident_impact_fields", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_impacts_endpoint = _Endpoint( + settings={ + "response_type": (IncidentImpactsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/impacts", + "operation_id": "list_incident_impacts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "include": { + "openapi_types": ([IncidentImpactRelatedObject],), + "attribute": "include", + "location": "query", + "collection_format": "csv", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_integrations_endpoint = _Endpoint( + settings={ + "response_type": (IncidentIntegrationMetadataListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/integrations", + "operation_id": "list_incident_integrations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + 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,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-templates", + "operation_id": "list_incident_notification_templates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_incident_type": { + "openapi_types": (UUID,), + "attribute": "filter[incident-type]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_postmortem_templates_endpoint = _Endpoint( + settings={ + "response_type": (PostmortemTemplatesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/postmortem-templates", + "operation_id": "list_incident_postmortem_templates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_incident_type": { + "openapi_types": (UUID,), + "attribute": "filter[incident-type]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_responders_endpoint = _Endpoint( + settings={ + "response_type": (IncidentRespondersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/responders", + "operation_id": "list_incident_responders", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_rules_endpoint = _Endpoint( + settings={ + "response_type": (IncidentRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/rules", + "operation_id": "list_incident_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_task_id": { + "openapi_types": (str,), + "attribute": "filter[task_id]", + "location": "query", + }, + "filter_trigger": { + "openapi_types": (str,), + "attribute": "filter[trigger]", + "location": "query", + }, + "incident_type_uuid": { + "openapi_types": (UUID,), + "attribute": "incidentTypeUUID", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incidents_endpoint = _Endpoint( + settings={ + "response_type": (IncidentsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents", + "operation_id": "list_incidents", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": ([IncidentRelatedObject],), + "attribute": "include", + "location": "query", + "collection_format": "csv", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_todos_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTodoListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/todos", + "operation_id": "list_incident_todos", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_types_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTypeListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/types", + "operation_id": "list_incident_types", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include_deleted": { + "openapi_types": (bool,), + "attribute": "include_deleted", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_user_defined_fields_endpoint = _Endpoint( + settings={ + "response_type": (IncidentUserDefinedFieldListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-fields", + "operation_id": "list_incident_user_defined_fields", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "include_deleted": { + "openapi_types": (bool,), + "attribute": "include-deleted", + "location": "query", + }, + "filter_incident_type": { + "openapi_types": (str,), + "attribute": "filter[incident-type]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_incident_user_defined_roles_endpoint = _Endpoint( + settings={ + "response_type": (IncidentUserDefinedRolesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-roles", + "operation_id": "list_incident_user_defined_roles", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_incident_type": { + "openapi_types": (UUID,), + "attribute": "filter[incident-type]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_settings_endpoint = _Endpoint( + settings={ + "response_type": (IncidentOrgSettingsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/types/org-settings", + "operation_id": "list_org_settings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "include_deleted": { + "openapi_types": (bool,), + "attribute": "include-deleted", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_timestamp_overrides_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTimestampOverridesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/timestamp-overrides", + "operation_id": "list_timestamp_overrides", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._patch_incident_impact_endpoint = _Endpoint( + settings={ + "response_type": (IncidentImpactResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/impacts/{impact_id}", + "operation_id": "patch_incident_impact", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "impact_id": { + "required": True, + "openapi_types": (str,), + "attribute": "impact_id", + "location": "path", + }, + "include": { + "openapi_types": ([IncidentImpactRelatedObject],), + "attribute": "include", + "location": "query", + "collection_format": "csv", + }, + "body": { + "required": True, + "openapi_types": (IncidentImpactPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_incidents_endpoint = _Endpoint( + settings={ + "response_type": (IncidentSearchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/search", + "operation_id": "search_incidents", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (IncidentRelatedObject,), + "attribute": "include", + "location": "query", + }, + "query": { + "required": True, + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "sort": { + "openapi_types": (IncidentSearchSortOrder,), + "attribute": "sort", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_global_incident_handle_endpoint = _Endpoint( + settings={ + "response_type": (IncidentHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/global/incident-handles", + "operation_id": "update_global_incident_handle", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (IncidentHandleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_global_incident_settings_endpoint = _Endpoint( + settings={ + "response_type": (GlobalIncidentSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/global/settings", + "operation_id": "update_global_incident_settings", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GlobalIncidentSettingsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_endpoint = _Endpoint( + settings={ + "response_type": (IncidentResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}", + "operation_id": "update_incident", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "include": { + "openapi_types": ([IncidentRelatedObject],), + "attribute": "include", + "location": "query", + "collection_format": "csv", + }, + "body": { + "required": True, + "openapi_types": (IncidentUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_attachment_endpoint = _Endpoint( + settings={ + "response_type": (Attachment,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/attachments/{attachment_id}", + "operation_id": "update_incident_attachment", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "attachment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "attachment_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (PatchAttachmentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_configuration_endpoint = _Endpoint( + settings={ + "response_type": (IncidentConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/configurations", + "operation_id": "update_incident_configuration", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentConfigurationPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_google_chat_configuration_endpoint = _Endpoint( + settings={ + "response_type": (IncidentGoogleChatConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/google-chat-configurations/{id}", + "operation_id": "update_incident_google_chat_configuration", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentGoogleChatConfigurationPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_google_meet_configuration_endpoint = _Endpoint( + settings={ + "response_type": (IncidentGoogleMeetConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/google-meet-configurations/{id}", + "operation_id": "update_incident_google_meet_configuration", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentGoogleMeetConfigurationPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_impact_field_endpoint = _Endpoint( + settings={ + "response_type": (IncidentImpactFieldResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/impact-fields/{field_id}", + "operation_id": "update_incident_impact_field", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "field_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "field_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentImpactFieldRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_integration_endpoint = _Endpoint( + settings={ + "response_type": (IncidentIntegrationMetadataResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/integrations/{integration_metadata_id}", + "operation_id": "update_incident_integration", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "integration_metadata_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_metadata_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentIntegrationMetadataPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + 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,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/notification-templates/{id}", + "operation_id": "update_incident_notification_template", + "http_method": "PATCH", + "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": (PatchIncidentNotificationTemplateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_postmortem_template_endpoint = _Endpoint( + settings={ + "response_type": (PostmortemTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/incidents/config/postmortem-templates/{template_id}", + "operation_id": "update_incident_postmortem_template", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (str,), + "attribute": "template_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PostmortemTemplateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_rule_endpoint = _Endpoint( + settings={ + "response_type": (IncidentRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/rules/{rule_id}", + "operation_id": "update_incident_rule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentRulePatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_todo_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTodoResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/relationships/todos/{todo_id}", + "operation_id": "update_incident_todo", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "todo_id": { + "required": True, + "openapi_types": (str,), + "attribute": "todo_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentTodoPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_type_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTypeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/types/{incident_type_id}", + "operation_id": "update_incident_type", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "incident_type_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_type_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentTypePatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_user_defined_field_endpoint = _Endpoint( + settings={ + "response_type": (IncidentUserDefinedFieldResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-fields/{field_id}", + "operation_id": "update_incident_user_defined_field", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "field_id": { + "required": True, + "openapi_types": (str,), + "attribute": "field_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (IncidentUserDefinedFieldUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_incident_user_defined_role_endpoint = _Endpoint( + settings={ + "response_type": (IncidentUserDefinedRoleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/config/user-defined-roles/{role_id}", + "operation_id": "update_incident_user_defined_role", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "role_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (IncidentUserDefinedRolePatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_timestamp_override_endpoint = _Endpoint( + settings={ + "response_type": (IncidentTimestampOverrideResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/incidents/{incident_id}/timestamp-overrides/{id}", + "operation_id": "update_timestamp_override", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "incident_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_id", + "location": "path", + }, + "id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (IncidentTimestampOverridePatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_global_incident_handle(self, body: IncidentHandleRequest, *, include: Union[str, UnsetType]=unset, ) -> IncidentHandleResponse: + """Create global incident handle. + + Create a new global incident handle. + + :type body: IncidentHandleRequest + :param include: Comma-separated list of related resources to include in the response + :type include: str, optional + :rtype: IncidentHandleResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_global_incident_handle_endpoint.call_with_http_info(**kwargs) + + def create_incident(self, body: IncidentCreateRequest, ) -> IncidentResponse: + """Create an incident. + + Create an incident. + + :param body: Incident payload. + :type body: IncidentCreateRequest + :rtype: IncidentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_endpoint.call_with_http_info(**kwargs) + + def create_incident_attachment(self, incident_id: str, body: CreateAttachmentRequest, *, include: Union[str, UnsetType]=unset, ) -> Attachment: + """Create incident attachment. + + Create an incident attachment. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :type body: CreateAttachmentRequest + :param include: Resource to include in the response. Supported value: ``last_modified_by_user``. + :type include: str, optional + :rtype: Attachment + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_incident_attachment_endpoint.call_with_http_info(**kwargs) + + def create_incident_configuration(self, incident_id: str, body: IncidentConfigurationRequest, ) -> IncidentConfigurationResponse: + """Create an incident configuration. + + Create a configuration for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: Incident configuration payload. + :type body: IncidentConfigurationRequest + :rtype: IncidentConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._create_incident_configuration_endpoint.call_with_http_info(**kwargs) + + def create_incident_google_chat_configuration(self, body: IncidentGoogleChatConfigurationRequest, ) -> IncidentGoogleChatConfigurationResponse: + """Create an incident Google Chat configuration. + + Create a Google Chat configuration for incidents. + + :param body: Google Chat configuration payload. + :type body: IncidentGoogleChatConfigurationRequest + :rtype: IncidentGoogleChatConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_google_chat_configuration_endpoint.call_with_http_info(**kwargs) + + def create_incident_google_meet_configuration(self, body: IncidentGoogleMeetConfigurationRequest, ) -> IncidentGoogleMeetConfigurationResponse: + """Create an incident Google Meet configuration. + + Create a Google Meet configuration for incidents. + + :param body: Google Meet configuration payload. + :type body: IncidentGoogleMeetConfigurationRequest + :rtype: IncidentGoogleMeetConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_google_meet_configuration_endpoint.call_with_http_info(**kwargs) + + def create_incident_impact(self, incident_id: str, body: IncidentImpactCreateRequest, *, include: Union[List[IncidentImpactRelatedObject], UnsetType]=unset, ) -> IncidentImpactResponse: + """Create an incident impact. + + Create an impact for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: Incident impact payload. + :type body: IncidentImpactCreateRequest + :param include: Specifies which related resources should be included in the response. + :type include: [IncidentImpactRelatedObject], optional + :rtype: IncidentImpactResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_incident_impact_endpoint.call_with_http_info(**kwargs) + + def create_incident_impact_field(self, body: IncidentImpactFieldRequest, ) -> IncidentImpactFieldResponse: + """Create an incident impact field. + + Create an impact field for incidents. + + :param body: Impact field payload. + :type body: IncidentImpactFieldRequest + :rtype: IncidentImpactFieldResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_impact_field_endpoint.call_with_http_info(**kwargs) + + def create_incident_integration(self, incident_id: str, body: IncidentIntegrationMetadataCreateRequest, ) -> IncidentIntegrationMetadataResponse: + """Create an incident integration metadata. + + Create an incident integration metadata. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: Incident integration metadata payload. + :type body: IncidentIntegrationMetadataCreateRequest + :rtype: IncidentIntegrationMetadataResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + 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, ) -> IncidentNotificationTemplate: + """Create incident notification template. + + Creates a new notification template. + + :type body: CreateIncidentNotificationTemplateRequest + :rtype: IncidentNotificationTemplate + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_notification_template_endpoint.call_with_http_info(**kwargs) + + def create_incident_postmortem_attachment(self, incident_id: str, body: PostmortemAttachmentRequest, ) -> Attachment: + """Create postmortem attachment. + + Create a postmortem attachment for an incident. + + The endpoint accepts markdown for notebooks created in Confluence or Google Docs. + Postmortems created from notebooks need to be formatted using frontend notebook cells, + in addition to markdown format. + + :param incident_id: The ID of the incident + :type incident_id: str + :type body: PostmortemAttachmentRequest + :rtype: Attachment + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._create_incident_postmortem_attachment_endpoint.call_with_http_info(**kwargs) + + def create_incident_postmortem_template(self, body: PostmortemTemplateRequest, ) -> PostmortemTemplateResponse: + """Create postmortem template. + + Create a new postmortem template for incidents. + + :type body: PostmortemTemplateRequest + :rtype: PostmortemTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_postmortem_template_endpoint.call_with_http_info(**kwargs) + + def create_incident_responder(self, incident_id: str, body: IncidentResponderRequest, ) -> IncidentResponderResponse: + """Create an incident responder. + + Add a responder to an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: Incident responder payload. + :type body: IncidentResponderRequest + :rtype: IncidentResponderResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._create_incident_responder_endpoint.call_with_http_info(**kwargs) + + def create_incident_rule(self, body: IncidentRuleRequest, ) -> IncidentRuleResponse: + """Create an incident rule. + + Create an incident rule. + + :param body: Incident rule payload. + :type body: IncidentRuleRequest + :rtype: IncidentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_rule_endpoint.call_with_http_info(**kwargs) + + def create_incident_service_now_record(self, incident_id: str, body: IncidentServiceNowRecordRequest, ) -> IncidentIntegrationMetadataResponse: + """Create an incident ServiceNow record. + + Create a ServiceNow record for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: ServiceNow record payload. + :type body: IncidentServiceNowRecordRequest + :rtype: IncidentIntegrationMetadataResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._create_incident_service_now_record_endpoint.call_with_http_info(**kwargs) + + def create_incident_todo(self, incident_id: str, body: IncidentTodoCreateRequest, ) -> IncidentTodoResponse: + """Create an incident todo. + + Create an incident todo. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: Incident todo payload. + :type body: IncidentTodoCreateRequest + :rtype: IncidentTodoResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._create_incident_todo_endpoint.call_with_http_info(**kwargs) + + def create_incident_type(self, body: IncidentTypeCreateRequest, ) -> IncidentTypeResponse: + """Create an incident type. + + Create an incident type. + + :param body: Incident type payload. + :type body: IncidentTypeCreateRequest + :rtype: IncidentTypeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_type_endpoint.call_with_http_info(**kwargs) + + def create_incident_user_defined_field(self, body: IncidentUserDefinedFieldCreateRequest, *, include: Union[str, UnsetType]=unset, ) -> IncidentUserDefinedFieldResponse: + """Create an incident user-defined field. + + Create an incident user-defined field. + + :param body: Incident user-defined field payload. + :type body: IncidentUserDefinedFieldCreateRequest + :param include: Comma-separated list of related resources to include. Supported values are "last_modified_by_user", "created_by_user", and "incident_type". + :type include: str, optional + :rtype: IncidentUserDefinedFieldResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_incident_user_defined_field_endpoint.call_with_http_info(**kwargs) + + def create_incident_user_defined_role(self, body: IncidentUserDefinedRoleRequest, *, include: Union[str, UnsetType]=unset, ) -> IncidentUserDefinedRoleResponse: + """Create an incident user-defined role. + + Create a new user-defined role for incidents. + + :type body: IncidentUserDefinedRoleRequest + :param include: Comma-separated list of related resources to include in the response. + :type include: str, optional + :rtype: IncidentUserDefinedRoleResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_incident_user_defined_role_endpoint.call_with_http_info(**kwargs) + + def create_on_call_page_from_incident(self, incident_id: str, body: IncidentCreateOnCallPageRequest, ) -> IncidentPageUUIDResponse: + """Create an on-call page from an incident. + + Create an on-call page directly from an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: On-call page creation payload. + :type body: IncidentCreateOnCallPageRequest + :rtype: IncidentPageUUIDResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._create_on_call_page_from_incident_endpoint.call_with_http_info(**kwargs) + + def create_page_from_incident(self, incident_id: str, body: IncidentCreatePageFromIncidentRequest, ) -> IncidentPageUUIDResponse: + """Create a page from an incident. + + Create a page from an incident using the Cases service. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: Page creation payload. + :type body: IncidentCreatePageFromIncidentRequest + :rtype: IncidentPageUUIDResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._create_page_from_incident_endpoint.call_with_http_info(**kwargs) + + def create_timestamp_override(self, incident_id: str, body: IncidentTimestampOverrideRequest, ) -> IncidentTimestampOverrideResponse: + """Create an incident timestamp override. + + Create a timestamp override for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: Timestamp override payload. + :type body: IncidentTimestampOverrideRequest + :rtype: IncidentTimestampOverrideResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._create_timestamp_override_endpoint.call_with_http_info(**kwargs) + + def delete_global_incident_handle(self, ) -> None: + """Delete global incident handle. + + Delete a global incident handle. + + :rtype: None + """ + kwargs: Dict[str, Any] = {} + return self._delete_global_incident_handle_endpoint.call_with_http_info(**kwargs) + + def delete_incident(self, incident_id: str, ) -> None: + """Delete an existing incident. + + Deletes an existing incident from the users organization. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + return self._delete_incident_endpoint.call_with_http_info(**kwargs) + + def delete_incident_attachment(self, incident_id: str, attachment_id: str, ) -> None: + """Delete incident attachment. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param attachment_id: The ID of the attachment. + :type attachment_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["attachment_id"] = attachment_id + + return self._delete_incident_attachment_endpoint.call_with_http_info(**kwargs) + + def delete_incident_impact(self, incident_id: str, impact_id: str, ) -> None: + """Delete an incident impact. + + Delete an incident impact. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param impact_id: The UUID of the incident impact. + :type impact_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["impact_id"] = impact_id + + return self._delete_incident_impact_endpoint.call_with_http_info(**kwargs) + + def delete_incident_impact_field(self, field_id: UUID, ) -> None: + """Delete an incident impact field. + + Delete an impact field for incidents. + + :param field_id: The UUID of the impact field. + :type field_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["field_id"] = field_id + + return self._delete_incident_impact_field_endpoint.call_with_http_info(**kwargs) + + def delete_incident_integration(self, incident_id: str, integration_metadata_id: str, ) -> None: + """Delete an incident integration metadata. + + Delete an incident integration metadata. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param integration_metadata_id: The UUID of the incident integration metadata. + :type integration_metadata_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["integration_metadata_id"] = integration_metadata_id + + 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, *, include: Union[str, UnsetType]=unset, ) -> None: + """Delete a notification template. + + Deletes a notification template by its ID. + + :param id: The ID of the notification template. + :type id: UUID + :param include: Comma-separated list of relationships to include. Supported values: ``created_by_user`` , ``last_modified_by_user`` , ``incident_type`` + :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_template_endpoint.call_with_http_info(**kwargs) + + def delete_incident_postmortem_template(self, template_id: str, ) -> None: + """Delete postmortem template. + + Delete a postmortem template. + + :param template_id: The ID of the postmortem template. + :type template_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + return self._delete_incident_postmortem_template_endpoint.call_with_http_info(**kwargs) + + def delete_incident_responder(self, incident_id: str, responder_id: UUID, ) -> None: + """Delete an incident responder. + + Remove a responder from an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param responder_id: The UUID of the incident responder. + :type responder_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["responder_id"] = responder_id + + return self._delete_incident_responder_endpoint.call_with_http_info(**kwargs) + + def delete_incident_rule(self, rule_id: UUID, ) -> None: + """Delete an incident rule. + + Delete an incident rule. + + :param rule_id: The UUID of the incident rule. + :type rule_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._delete_incident_rule_endpoint.call_with_http_info(**kwargs) + + def delete_incident_todo(self, incident_id: str, todo_id: str, ) -> None: + """Delete an incident todo. + + Delete an incident todo. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param todo_id: The UUID of the incident todo. + :type todo_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["todo_id"] = todo_id + + return self._delete_incident_todo_endpoint.call_with_http_info(**kwargs) + + def delete_incident_type(self, incident_type_id: str, ) -> None: + """Delete an incident type. + + Delete an incident type. + + :param incident_type_id: The UUID of the incident type. + :type incident_type_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_type_id"] = incident_type_id + + return self._delete_incident_type_endpoint.call_with_http_info(**kwargs) + + def delete_incident_user_defined_field(self, field_id: str, ) -> None: + """Delete an incident user-defined field. + + Delete an incident user-defined field. + + :param field_id: The ID of the incident user-defined field. + :type field_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["field_id"] = field_id + + return self._delete_incident_user_defined_field_endpoint.call_with_http_info(**kwargs) + + def delete_incident_user_defined_role(self, role_id: UUID, ) -> None: + """Delete an incident user-defined role. + + Delete an existing user-defined role for incidents. + + :param role_id: The UUID of the incident user-defined role. + :type role_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + return self._delete_incident_user_defined_role_endpoint.call_with_http_info(**kwargs) + + def delete_timestamp_override(self, incident_id: str, id: UUID, ) -> None: + """Delete an incident timestamp override. + + Delete a timestamp override for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param id: The UUID of the timestamp override. + :type id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["id"] = id + + return self._delete_timestamp_override_endpoint.call_with_http_info(**kwargs) + + def get_global_incident_settings(self, ) -> GlobalIncidentSettingsResponse: + """Get global incident settings. + + Retrieve global incident settings for the organization. + + :rtype: GlobalIncidentSettingsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_global_incident_settings_endpoint.call_with_http_info(**kwargs) + + def get_incident(self, incident_id: str, *, include: Union[List[IncidentRelatedObject], UnsetType]=unset, ) -> IncidentResponse: + """Get the details of an incident. + + Get the details of an incident by ``incident_id``. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param include: Specifies which types of related objects should be included in the response. + :type include: [IncidentRelatedObject], optional + :rtype: IncidentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + if include is not unset: + kwargs["include"] = include + + return self._get_incident_endpoint.call_with_http_info(**kwargs) + + def get_incident_ai_postmortem(self, incident_id: str, ) -> IncidentAIPostmortemResponse: + """Get an AI-generated incident postmortem. + + Generate an AI postmortem for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :rtype: IncidentAIPostmortemResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + return self._get_incident_ai_postmortem_endpoint.call_with_http_info(**kwargs) + + def get_incident_integration(self, incident_id: str, integration_metadata_id: str, ) -> IncidentIntegrationMetadataResponse: + """Get incident integration metadata details. + + Get incident integration metadata details. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param integration_metadata_id: The UUID of the incident integration metadata. + :type integration_metadata_id: str + :rtype: IncidentIntegrationMetadataResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["integration_metadata_id"] = integration_metadata_id + + 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, *, include: Union[str, UnsetType]=unset, ) -> IncidentNotificationTemplate: + """Get incident notification template. + + Retrieves a specific notification template by its ID. + + :param id: The ID of the notification template. + :type id: UUID + :param include: Comma-separated list of relationships to include. Supported values: ``created_by_user`` , ``last_modified_by_user`` , ``incident_type`` + :type include: str, optional + :rtype: IncidentNotificationTemplate + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + if include is not unset: + kwargs["include"] = include + + return self._get_incident_notification_template_endpoint.call_with_http_info(**kwargs) + + def get_incident_postmortem_template(self, template_id: str, ) -> PostmortemTemplateResponse: + """Get postmortem template. + + Retrieve details of a specific postmortem template. + + :param template_id: The ID of the postmortem template. + :type template_id: str + :rtype: PostmortemTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + return self._get_incident_postmortem_template_endpoint.call_with_http_info(**kwargs) + + def get_incident_responder(self, incident_id: str, responder_id: UUID, ) -> IncidentResponderResponse: + """Get an incident responder. + + Get a single responder for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param responder_id: The UUID of the incident responder. + :type responder_id: UUID + :rtype: IncidentResponderResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["responder_id"] = responder_id + + return self._get_incident_responder_endpoint.call_with_http_info(**kwargs) + + def get_incident_rule(self, rule_id: UUID, ) -> IncidentRuleResponse: + """Get an incident rule. + + Get a single incident rule by ID. + + :param rule_id: The UUID of the incident rule. + :type rule_id: UUID + :rtype: IncidentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._get_incident_rule_endpoint.call_with_http_info(**kwargs) + + def get_incident_todo(self, incident_id: str, todo_id: str, ) -> IncidentTodoResponse: + """Get incident todo details. + + Get incident todo details. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param todo_id: The UUID of the incident todo. + :type todo_id: str + :rtype: IncidentTodoResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["todo_id"] = todo_id + + return self._get_incident_todo_endpoint.call_with_http_info(**kwargs) + + def get_incident_type(self, incident_type_id: str, ) -> IncidentTypeResponse: + """Get incident type details. + + Get incident type details. + + :param incident_type_id: The UUID of the incident type. + :type incident_type_id: str + :rtype: IncidentTypeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_type_id"] = incident_type_id + + return self._get_incident_type_endpoint.call_with_http_info(**kwargs) + + def get_incident_user_defined_field(self, field_id: str, *, include: Union[str, UnsetType]=unset, ) -> IncidentUserDefinedFieldResponse: + """Get an incident user-defined field. + + Get details of an incident user-defined field. + + :param field_id: The ID of the incident user-defined field. + :type field_id: str + :param include: Comma-separated list of related resources to include. Supported values are "last_modified_by_user", "created_by_user", and "incident_type". + :type include: str, optional + :rtype: IncidentUserDefinedFieldResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["field_id"] = field_id + + if include is not unset: + kwargs["include"] = include + + return self._get_incident_user_defined_field_endpoint.call_with_http_info(**kwargs) + + def get_incident_user_defined_role(self, role_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> IncidentUserDefinedRoleResponse: + """Get an incident user-defined role. + + Retrieve a single user-defined role for incidents. + + :param role_id: The UUID of the incident user-defined role. + :type role_id: UUID + :param include: Comma-separated list of related resources to include in the response. + :type include: str, optional + :rtype: IncidentUserDefinedRoleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + if include is not unset: + kwargs["include"] = include + + return self._get_incident_user_defined_role_endpoint.call_with_http_info(**kwargs) + + def get_org_settings_by_incident_type(self, incident_type_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> IncidentOrgSettingsResponse: + """Get org settings by incident type. + + Get the org settings for a specific incident type. + + :param incident_type_id: The UUID of the incident type. + :type incident_type_id: UUID + :param include: Comma-separated list of related resources to include in the response. + :type include: str, optional + :rtype: IncidentOrgSettingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_type_id"] = incident_type_id + + if include is not unset: + kwargs["include"] = include + + return self._get_org_settings_by_incident_type_endpoint.call_with_http_info(**kwargs) + + def import_incident(self, body: IncidentImportRequest, *, include: Union[List[IncidentImportRelatedObject], UnsetType]=unset, ) -> IncidentImportResponse: + """Import an incident. + + Import an incident from an external system. This endpoint allows you to create incidents with + historical data such as custom timestamps for detection, declaration, and resolution. + Imported incidents do not execute integrations or notification rules. + + :param body: Incident import payload. + :type body: IncidentImportRequest + :param include: Specifies which related object types to include in the response when importing an incident. + :type include: [IncidentImportRelatedObject], optional + :rtype: IncidentImportResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._import_incident_endpoint.call_with_http_info(**kwargs) + + def link_page_to_incident(self, incident_id: str, body: IncidentOnCallPageLinkRequest, ) -> IncidentIntegrationMetadataResponse: + """Link a page to an incident. + + Link an existing on-call page to an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: On-call page link payload. + :type body: IncidentOnCallPageLinkRequest + :rtype: IncidentIntegrationMetadataResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._link_page_to_incident_endpoint.call_with_http_info(**kwargs) + + def list_global_incident_handles(self, *, include: Union[str, UnsetType]=unset, ) -> IncidentHandlesResponse: + """List global incident handles. + + Retrieve a list of global incident handles. + + :param include: Comma-separated list of related resources to include in the response + :type include: str, optional + :rtype: IncidentHandlesResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + return self._list_global_incident_handles_endpoint.call_with_http_info(**kwargs) + + def list_incident_attachments(self, incident_id: str, *, filter_attachment_type: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> AttachmentArray: + """List incident attachments. + + List incident attachments. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param filter_attachment_type: Filter attachments by type. Supported values are ``1`` ( ``postmortem`` ) and ``2`` ( ``link`` ). + :type filter_attachment_type: str, optional + :param include: Resource to include in the response. Supported value: ``last_modified_by_user``. + :type include: str, optional + :rtype: AttachmentArray + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + if filter_attachment_type is not unset: + kwargs["filter_attachment_type"] = filter_attachment_type + + if include is not unset: + kwargs["include"] = include + + return self._list_incident_attachments_endpoint.call_with_http_info(**kwargs) + + def list_incident_impact_fields(self, ) -> IncidentImpactFieldsResponse: + """List incident impact fields. + + List all impact fields for incidents. + + :rtype: IncidentImpactFieldsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_incident_impact_fields_endpoint.call_with_http_info(**kwargs) + + def list_incident_impacts(self, incident_id: str, *, include: Union[List[IncidentImpactRelatedObject], UnsetType]=unset, ) -> IncidentImpactsResponse: + """List an incident's impacts. + + Get all impacts for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param include: Specifies which related resources should be included in the response. + :type include: [IncidentImpactRelatedObject], optional + :rtype: IncidentImpactsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + if include is not unset: + kwargs["include"] = include + + return self._list_incident_impacts_endpoint.call_with_http_info(**kwargs) + + def list_incident_integrations(self, incident_id: str, ) -> IncidentIntegrationMetadataListResponse: + """Get a list of an incident's integration metadata. + + Get all integration metadata for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :rtype: IncidentIntegrationMetadataListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + 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, *, filter_incident_type: Union[UUID, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> IncidentNotificationTemplateArray: + """List incident notification templates. + + Lists all notification templates. Optionally filter by incident type. + + :param filter_incident_type: Optional incident type ID filter. + :type filter_incident_type: UUID, optional + :param include: Comma-separated list of relationships to include. Supported values: ``created_by_user`` , ``last_modified_by_user`` , ``incident_type`` + :type include: str, optional + :rtype: IncidentNotificationTemplateArray + """ + kwargs: Dict[str, Any] = {} + if filter_incident_type is not unset: + kwargs["filter_incident_type"] = filter_incident_type + + if include is not unset: + kwargs["include"] = include + + return self._list_incident_notification_templates_endpoint.call_with_http_info(**kwargs) + + def list_incident_postmortem_templates(self, *, filter_incident_type: Union[UUID, UnsetType]=unset, sort: Union[str, UnsetType]=unset, ) -> PostmortemTemplatesResponse: + """List postmortem templates. + + Retrieve a list of all postmortem templates for incidents. + + :param filter_incident_type: Filter postmortem templates by the associated incident type ID. + :type filter_incident_type: UUID, optional + :param sort: The attribute to sort results by. Prefix with ``-`` for descending order. + :type sort: str, optional + :rtype: PostmortemTemplatesResponse + """ + kwargs: Dict[str, Any] = {} + if filter_incident_type is not unset: + kwargs["filter_incident_type"] = filter_incident_type + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_incident_postmortem_templates_endpoint.call_with_http_info(**kwargs) + + def list_incident_responders(self, incident_id: str, ) -> IncidentRespondersResponse: + """List incident responders. + + List all responders for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :rtype: IncidentRespondersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + return self._list_incident_responders_endpoint.call_with_http_info(**kwargs) + + def list_incident_rules(self, *, filter_task_id: Union[str, UnsetType]=unset, filter_trigger: Union[str, UnsetType]=unset, incident_type_uuid: Union[UUID, UnsetType]=unset, ) -> IncidentRulesResponse: + """List incident rules. + + List all incident rules. + + :param filter_task_id: Filter rules by task ID. + :type filter_task_id: str, optional + :param filter_trigger: Filter rules by trigger. + :type filter_trigger: str, optional + :param incident_type_uuid: Filter rules by incident type UUID. + :type incident_type_uuid: UUID, optional + :rtype: IncidentRulesResponse + """ + kwargs: Dict[str, Any] = {} + if filter_task_id is not unset: + kwargs["filter_task_id"] = filter_task_id + + if filter_trigger is not unset: + kwargs["filter_trigger"] = filter_trigger + + if incident_type_uuid is not unset: + kwargs["incident_type_uuid"] = incident_type_uuid + + return self._list_incident_rules_endpoint.call_with_http_info(**kwargs) + + def list_incidents(self, *, include: Union[List[IncidentRelatedObject], UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, ) -> IncidentsResponse: + """Get a list of incidents. + + Get all incidents for the user's organization. + + :param include: Specifies which types of related objects should be included in the response. + :type include: [IncidentRelatedObject], optional + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :rtype: IncidentsResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + return self._list_incidents_endpoint.call_with_http_info(**kwargs) + + def list_incidents_with_pagination(self, *, include: Union[List[IncidentRelatedObject], UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[IncidentResponseData]: + """Get a list of incidents. + + Provide a paginated version of :meth:`list_incidents`, returning all items. + + :param include: Specifies which types of related objects should be included in the response. + :type include: [IncidentRelatedObject], optional + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[IncidentResponseData] + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_incidents_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_incident_todos(self, incident_id: str, ) -> IncidentTodoListResponse: + """Get a list of an incident's todos. + + Get all todos for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :rtype: IncidentTodoListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + return self._list_incident_todos_endpoint.call_with_http_info(**kwargs) + + def list_incident_types(self, *, include_deleted: Union[bool, UnsetType]=unset, ) -> IncidentTypeListResponse: + """Get a list of incident types. + + Get all incident types. + + :param include_deleted: Include deleted incident types in the response. + :type include_deleted: bool, optional + :rtype: IncidentTypeListResponse + """ + kwargs: Dict[str, Any] = {} + if include_deleted is not unset: + kwargs["include_deleted"] = include_deleted + + return self._list_incident_types_endpoint.call_with_http_info(**kwargs) + + def list_incident_user_defined_fields(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, include_deleted: Union[bool, UnsetType]=unset, filter_incident_type: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> IncidentUserDefinedFieldListResponse: + """Get a list of incident user-defined fields. + + Get a list of all incident user-defined fields. + + :param page_size: The number of results to return per page. Must be between 0 and 1000. + :type page_size: int, optional + :param page_number: The page number to retrieve, starting at 0. + :type page_number: int, optional + :param include_deleted: When true, include soft-deleted fields in the response. + :type include_deleted: bool, optional + :param filter_incident_type: Filter results to fields associated with the given incident type UUID. + :type filter_incident_type: str, optional + :param include: Comma-separated list of related resources to include. Supported values are "last_modified_by_user", "created_by_user", and "incident_type". + :type include: str, optional + :rtype: IncidentUserDefinedFieldListResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if include_deleted is not unset: + kwargs["include_deleted"] = include_deleted + + if filter_incident_type is not unset: + kwargs["filter_incident_type"] = filter_incident_type + + if include is not unset: + kwargs["include"] = include + + return self._list_incident_user_defined_fields_endpoint.call_with_http_info(**kwargs) + + def list_incident_user_defined_roles(self, *, filter_incident_type: Union[UUID, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> IncidentUserDefinedRolesResponse: + """List incident user-defined roles. + + List all user-defined roles for incidents. + + :param filter_incident_type: Filter roles by incident type UUID. + :type filter_incident_type: UUID, optional + :param include: Comma-separated list of related resources to include in the response. + :type include: str, optional + :rtype: IncidentUserDefinedRolesResponse + """ + kwargs: Dict[str, Any] = {} + if filter_incident_type is not unset: + kwargs["filter_incident_type"] = filter_incident_type + + if include is not unset: + kwargs["include"] = include + + return self._list_incident_user_defined_roles_endpoint.call_with_http_info(**kwargs) + + def list_org_settings(self, *, page_size: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, include_deleted: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> IncidentOrgSettingsListResponse: + """List incident type org settings. + + List org settings for all incident types. + + :param page_size: Maximum number of results to return. + :type page_size: int, optional + :param page_offset: The offset for pagination. + :type page_offset: int, optional + :param include_deleted: Whether to include deleted records. + :type include_deleted: bool, optional + :param include: Comma-separated list of related resources to include in the response. + :type include: str, optional + :rtype: IncidentOrgSettingsListResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if include_deleted is not unset: + kwargs["include_deleted"] = include_deleted + + if include is not unset: + kwargs["include"] = include + + return self._list_org_settings_endpoint.call_with_http_info(**kwargs) + + def list_timestamp_overrides(self, incident_id: str, ) -> IncidentTimestampOverridesResponse: + """List incident timestamp overrides. + + List all timestamp overrides for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :rtype: IncidentTimestampOverridesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + return self._list_timestamp_overrides_endpoint.call_with_http_info(**kwargs) + + def patch_incident_impact(self, incident_id: str, impact_id: str, body: IncidentImpactPatchRequest, *, include: Union[List[IncidentImpactRelatedObject], UnsetType]=unset, ) -> IncidentImpactResponse: + """Update an incident impact. + + Update an incident impact. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param impact_id: The UUID of the incident impact. + :type impact_id: str + :param body: Incident impact patch payload. + :type body: IncidentImpactPatchRequest + :param include: Specifies which related resources should be included in the response. + :type include: [IncidentImpactRelatedObject], optional + :rtype: IncidentImpactResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["impact_id"] = impact_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._patch_incident_impact_endpoint.call_with_http_info(**kwargs) + + def search_incidents(self, query: str, *, include: Union[IncidentRelatedObject, UnsetType]=unset, sort: Union[IncidentSearchSortOrder, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, ) -> IncidentSearchResponse: + """Search for incidents. + + Search for incidents matching a certain query. + + :param query: Specifies which incidents should be returned. The query can contain any number of incident facets + joined by ``ANDs`` , along with multiple values for each of those facets joined by ``OR`` s. For + example: ``state:active AND severity:(SEV-2 OR SEV-1)``. + :type query: str + :param include: Specifies which types of related objects should be included in the response. + :type include: IncidentRelatedObject, optional + :param sort: Specifies the order of returned incidents. + :type sort: IncidentSearchSortOrder, optional + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :rtype: IncidentSearchResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["query"] = query + + if sort is not unset: + kwargs["sort"] = sort + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + return self._search_incidents_endpoint.call_with_http_info(**kwargs) + + def search_incidents_with_pagination(self, query: str, *, include: Union[IncidentRelatedObject, UnsetType]=unset, sort: Union[IncidentSearchSortOrder, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[IncidentSearchResponseIncidentsData]: + """Search for incidents. + + Provide a paginated version of :meth:`search_incidents`, returning all items. + + :param query: Specifies which incidents should be returned. The query can contain any number of incident facets + joined by ``ANDs`` , along with multiple values for each of those facets joined by ``OR`` s. For + example: ``state:active AND severity:(SEV-2 OR SEV-1)``. + :type query: str + :param include: Specifies which types of related objects should be included in the response. + :type include: IncidentRelatedObject, optional + :param sort: Specifies the order of returned incidents. + :type sort: IncidentSearchSortOrder, optional + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[IncidentSearchResponseIncidentsData] + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["query"] = query + + if sort is not unset: + kwargs["sort"] = sort + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._search_incidents_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data.attributes.incidents", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_global_incident_handle(self, body: IncidentHandleRequest, *, include: Union[str, UnsetType]=unset, ) -> IncidentHandleResponse: + """Update global incident handle. + + Update an existing global incident handle. + + :type body: IncidentHandleRequest + :param include: Comma-separated list of related resources to include in the response + :type include: str, optional + :rtype: IncidentHandleResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_global_incident_handle_endpoint.call_with_http_info(**kwargs) + + def update_global_incident_settings(self, body: GlobalIncidentSettingsRequest, ) -> GlobalIncidentSettingsResponse: + """Update global incident settings. + + Update global incident settings for the organization. + + :type body: GlobalIncidentSettingsRequest + :rtype: GlobalIncidentSettingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_global_incident_settings_endpoint.call_with_http_info(**kwargs) + + def update_incident(self, incident_id: str, body: IncidentUpdateRequest, *, include: Union[List[IncidentRelatedObject], UnsetType]=unset, ) -> IncidentResponse: + """Update an existing incident. + + Updates an incident. Provide only the attributes that should be updated as this request is a partial update. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: Incident Payload. + :type body: IncidentUpdateRequest + :param include: Specifies which types of related objects should be included in the response. + :type include: [IncidentRelatedObject], optional + :rtype: IncidentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_incident_endpoint.call_with_http_info(**kwargs) + + def update_incident_attachment(self, incident_id: str, attachment_id: str, body: PatchAttachmentRequest, *, include: Union[str, UnsetType]=unset, ) -> Attachment: + """Update incident attachment. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param attachment_id: The ID of the attachment. + :type attachment_id: str + :type body: PatchAttachmentRequest + :param include: Resource to include in the response. Supported value: ``last_modified_by_user``. + :type include: str, optional + :rtype: Attachment + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["attachment_id"] = attachment_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_incident_attachment_endpoint.call_with_http_info(**kwargs) + + def update_incident_configuration(self, incident_id: str, body: IncidentConfigurationPatchRequest, ) -> IncidentConfigurationResponse: + """Update an incident configuration. + + Update a configuration for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param body: Incident configuration patch payload. + :type body: IncidentConfigurationPatchRequest + :rtype: IncidentConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["body"] = body + + return self._update_incident_configuration_endpoint.call_with_http_info(**kwargs) + + def update_incident_google_chat_configuration(self, id: UUID, body: IncidentGoogleChatConfigurationPatchRequest, ) -> IncidentGoogleChatConfigurationResponse: + """Update an incident Google Chat configuration. + + Update a Google Chat configuration for incidents. + + :param id: The UUID of the Google Chat configuration. + :type id: UUID + :param body: Google Chat configuration patch payload. + :type body: IncidentGoogleChatConfigurationPatchRequest + :rtype: IncidentGoogleChatConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._update_incident_google_chat_configuration_endpoint.call_with_http_info(**kwargs) + + def update_incident_google_meet_configuration(self, id: UUID, body: IncidentGoogleMeetConfigurationPatchRequest, ) -> IncidentGoogleMeetConfigurationResponse: + """Update an incident Google Meet configuration. + + Update a Google Meet configuration for incidents. + + :param id: The UUID of the Google Meet configuration. + :type id: UUID + :param body: Google Meet configuration patch payload. + :type body: IncidentGoogleMeetConfigurationPatchRequest + :rtype: IncidentGoogleMeetConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._update_incident_google_meet_configuration_endpoint.call_with_http_info(**kwargs) + + def update_incident_impact_field(self, field_id: UUID, body: IncidentImpactFieldRequest, ) -> IncidentImpactFieldResponse: + """Update an incident impact field. + + Update an impact field for incidents. + + :param field_id: The UUID of the impact field. + :type field_id: UUID + :param body: Impact field update payload. + :type body: IncidentImpactFieldRequest + :rtype: IncidentImpactFieldResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["field_id"] = field_id + + kwargs["body"] = body + + return self._update_incident_impact_field_endpoint.call_with_http_info(**kwargs) + + def update_incident_integration(self, incident_id: str, integration_metadata_id: str, body: IncidentIntegrationMetadataPatchRequest, ) -> IncidentIntegrationMetadataResponse: + """Update an existing incident integration metadata. + + Update an existing incident integration metadata. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param integration_metadata_id: The UUID of the incident integration metadata. + :type integration_metadata_id: str + :param body: Incident integration metadata payload. + :type body: IncidentIntegrationMetadataPatchRequest + :rtype: IncidentIntegrationMetadataResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["integration_metadata_id"] = integration_metadata_id + + kwargs["body"] = body + + 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, body: PatchIncidentNotificationTemplateRequest, *, include: Union[str, UnsetType]=unset, ) -> IncidentNotificationTemplate: + """Update incident notification template. + + Updates an existing notification template's attributes. + + :param id: The ID of the notification template. + :type id: UUID + :type body: PatchIncidentNotificationTemplateRequest + :param include: Comma-separated list of relationships to include. Supported values: ``created_by_user`` , ``last_modified_by_user`` , ``incident_type`` + :type include: str, optional + :rtype: IncidentNotificationTemplate + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_incident_notification_template_endpoint.call_with_http_info(**kwargs) + + def update_incident_postmortem_template(self, template_id: str, body: PostmortemTemplateRequest, ) -> PostmortemTemplateResponse: + """Update postmortem template. + + Update an existing postmortem template. + + :param template_id: The ID of the postmortem template. + :type template_id: str + :type body: PostmortemTemplateRequest + :rtype: PostmortemTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + kwargs["body"] = body + + return self._update_incident_postmortem_template_endpoint.call_with_http_info(**kwargs) + + def update_incident_rule(self, rule_id: UUID, body: IncidentRulePatchRequest, ) -> IncidentRuleResponse: + """Update an incident rule. + + Update an incident rule. + + :param rule_id: The UUID of the incident rule. + :type rule_id: UUID + :param body: Incident rule patch payload. + :type body: IncidentRulePatchRequest + :rtype: IncidentRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_incident_rule_endpoint.call_with_http_info(**kwargs) + + def update_incident_todo(self, incident_id: str, todo_id: str, body: IncidentTodoPatchRequest, ) -> IncidentTodoResponse: + """Update an incident todo. + + Update an incident todo. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param todo_id: The UUID of the incident todo. + :type todo_id: str + :param body: Incident todo payload. + :type body: IncidentTodoPatchRequest + :rtype: IncidentTodoResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["todo_id"] = todo_id + + kwargs["body"] = body + + return self._update_incident_todo_endpoint.call_with_http_info(**kwargs) + + def update_incident_type(self, incident_type_id: str, body: IncidentTypePatchRequest, ) -> IncidentTypeResponse: + """Update an incident type. + + Update an incident type. + + :param incident_type_id: The UUID of the incident type. + :type incident_type_id: str + :param body: Incident type payload. + :type body: IncidentTypePatchRequest + :rtype: IncidentTypeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_type_id"] = incident_type_id + + kwargs["body"] = body + + return self._update_incident_type_endpoint.call_with_http_info(**kwargs) + + def update_incident_user_defined_field(self, field_id: str, body: IncidentUserDefinedFieldUpdateRequest, *, include: Union[str, UnsetType]=unset, ) -> IncidentUserDefinedFieldResponse: + """Update an incident user-defined field. + + Update an incident user-defined field. + + :param field_id: The ID of the incident user-defined field. + :type field_id: str + :param body: Incident user-defined field update payload. + :type body: IncidentUserDefinedFieldUpdateRequest + :param include: Comma-separated list of related resources to include. Supported values are "last_modified_by_user", "created_by_user", and "incident_type". + :type include: str, optional + :rtype: IncidentUserDefinedFieldResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["field_id"] = field_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_incident_user_defined_field_endpoint.call_with_http_info(**kwargs) + + def update_incident_user_defined_role(self, role_id: UUID, body: IncidentUserDefinedRolePatchRequest, *, include: Union[str, UnsetType]=unset, ) -> IncidentUserDefinedRoleResponse: + """Update an incident user-defined role. + + Update an existing user-defined role for incidents. + + :param role_id: The UUID of the incident user-defined role. + :type role_id: UUID + :type body: IncidentUserDefinedRolePatchRequest + :param include: Comma-separated list of related resources to include in the response. + :type include: str, optional + :rtype: IncidentUserDefinedRoleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_incident_user_defined_role_endpoint.call_with_http_info(**kwargs) + + def update_timestamp_override(self, incident_id: str, id: UUID, body: IncidentTimestampOverridePatchRequest, ) -> IncidentTimestampOverrideResponse: + """Update an incident timestamp override. + + Update a timestamp override for an incident. + + :param incident_id: The UUID of the incident. + :type incident_id: str + :param id: The UUID of the timestamp override. + :type id: UUID + :param body: Timestamp override patch payload. + :type body: IncidentTimestampOverridePatchRequest + :rtype: IncidentTimestampOverrideResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_id"] = incident_id + + kwargs["id"] = id + + kwargs["body"] = body + + return self._update_timestamp_override_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/integrations_api.py b/datadog_api_client/v2/api/integrations_api.py new file mode 100644 index 0000000000..fdbc3f0af9 --- /dev/null +++ b/datadog_api_client/v2/api/integrations_api.py @@ -0,0 +1,59 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_integrations_response import ListIntegrationsResponse + + +class IntegrationsApi: + """ + The Integrations API is used to list available integrations + and retrieve information about their installation status. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_integrations_endpoint = _Endpoint( + settings={ + "response_type": (ListIntegrationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations", + "operation_id": "list_integrations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def list_integrations(self, ) -> ListIntegrationsResponse: + """List Integrations. + + :rtype: ListIntegrationsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_integrations_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/ip_allowlist_api.py b/datadog_api_client/v2/api/ip_allowlist_api.py new file mode 100644 index 0000000000..820a206045 --- /dev/null +++ b/datadog_api_client/v2/api/ip_allowlist_api.py @@ -0,0 +1,102 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.ip_allowlist_response import IPAllowlistResponse +from datadog_api_client.v2.model.ip_allowlist_update_request import IPAllowlistUpdateRequest + + +class IPAllowlistApi: + """ + The IP allowlist API is used to manage the IP addresses that + can access the Datadog API and web UI. It does not block + access to intake APIs or public dashboards. + + This is an enterprise-only feature. Request access by + contacting Datadog support, or see the `IP Allowlist page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_ip_allowlist_endpoint = _Endpoint( + settings={ + "response_type": (IPAllowlistResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ip_allowlist", + "operation_id": "get_ip_allowlist", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_ip_allowlist_endpoint = _Endpoint( + settings={ + "response_type": (IPAllowlistResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ip_allowlist", + "operation_id": "update_ip_allowlist", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (IPAllowlistUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def get_ip_allowlist(self, ) -> IPAllowlistResponse: + """Get IP Allowlist. + + Returns the IP allowlist and its enabled or disabled state. + + :rtype: IPAllowlistResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_ip_allowlist_endpoint.call_with_http_info(**kwargs) + + def update_ip_allowlist(self, body: IPAllowlistUpdateRequest, ) -> IPAllowlistResponse: + """Update IP Allowlist. + + Edit the entries in the IP allowlist, and enable or disable it. + + :type body: IPAllowlistUpdateRequest + :rtype: IPAllowlistResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_ip_allowlist_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/jira_integration_api.py b/datadog_api_client/v2/api/jira_integration_api.py new file mode 100644 index 0000000000..ec3b9d9e86 --- /dev/null +++ b/datadog_api_client/v2/api/jira_integration_api.py @@ -0,0 +1,284 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.jira_accounts_response import JiraAccountsResponse +from datadog_api_client.v2.model.jira_issue_templates_response import JiraIssueTemplatesResponse +from datadog_api_client.v2.model.jira_issue_template_response import JiraIssueTemplateResponse +from datadog_api_client.v2.model.jira_issue_template_create_request import JiraIssueTemplateCreateRequest +from datadog_api_client.v2.model.jira_issue_template_update_request import JiraIssueTemplateUpdateRequest + + +class JiraIntegrationApi: + """ + Manage your Jira Integration. Atlassian Jira is a project management and issue tracking tool for teams to coordinate work and handle tasks efficiently. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_jira_issue_template_endpoint = _Endpoint( + settings={ + "response_type": (JiraIssueTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/jira/issue-templates", + "operation_id": "create_jira_issue_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (JiraIssueTemplateCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_jira_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/jira/accounts/{account_id}", + "operation_id": "delete_jira_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_jira_issue_template_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/jira/issue-templates/{issue_template_id}", + "operation_id": "delete_jira_issue_template", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "issue_template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "issue_template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_jira_issue_template_endpoint = _Endpoint( + settings={ + "response_type": (JiraIssueTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/jira/issue-templates/{issue_template_id}", + "operation_id": "get_jira_issue_template", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "issue_template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "issue_template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_jira_accounts_endpoint = _Endpoint( + settings={ + "response_type": (JiraAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/jira/accounts", + "operation_id": "list_jira_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_jira_issue_templates_endpoint = _Endpoint( + settings={ + "response_type": (JiraIssueTemplatesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/jira/issue-templates", + "operation_id": "list_jira_issue_templates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_jira_issue_template_endpoint = _Endpoint( + settings={ + "response_type": (JiraIssueTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/jira/issue-templates/{issue_template_id}", + "operation_id": "update_jira_issue_template", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "issue_template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "issue_template_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (JiraIssueTemplateUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_jira_issue_template(self, body: JiraIssueTemplateCreateRequest, ) -> JiraIssueTemplateResponse: + """Create Jira issue template. + + Create a new Jira issue template. + + :type body: JiraIssueTemplateCreateRequest + :rtype: JiraIssueTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_jira_issue_template_endpoint.call_with_http_info(**kwargs) + + def delete_jira_account(self, account_id: UUID, ) -> None: + """Delete Jira account. + + Delete a Jira account by ID. + + :param account_id: The ID of the Jira account to delete + :type account_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._delete_jira_account_endpoint.call_with_http_info(**kwargs) + + def delete_jira_issue_template(self, issue_template_id: UUID, ) -> None: + """Delete Jira issue template. + + Delete a Jira issue template by ID. + + :param issue_template_id: The ID of the Jira issue template to delete + :type issue_template_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["issue_template_id"] = issue_template_id + + return self._delete_jira_issue_template_endpoint.call_with_http_info(**kwargs) + + def get_jira_issue_template(self, issue_template_id: UUID, ) -> JiraIssueTemplateResponse: + """Get Jira issue template. + + Get a Jira issue template by ID. + + :param issue_template_id: The ID of the Jira issue template to retrieve + :type issue_template_id: UUID + :rtype: JiraIssueTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["issue_template_id"] = issue_template_id + + return self._get_jira_issue_template_endpoint.call_with_http_info(**kwargs) + + def list_jira_accounts(self, ) -> JiraAccountsResponse: + """List Jira accounts. + + Get all Jira accounts for the organization. + + :rtype: JiraAccountsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_jira_accounts_endpoint.call_with_http_info(**kwargs) + + def list_jira_issue_templates(self, ) -> JiraIssueTemplatesResponse: + """List Jira issue templates. + + Get all Jira issue templates for the organization. + + :rtype: JiraIssueTemplatesResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_jira_issue_templates_endpoint.call_with_http_info(**kwargs) + + def update_jira_issue_template(self, issue_template_id: UUID, body: JiraIssueTemplateUpdateRequest, ) -> JiraIssueTemplateResponse: + """Update Jira issue template. + + Update a Jira issue template by ID. + + :param issue_template_id: The ID of the Jira issue template to update + :type issue_template_id: UUID + :type body: JiraIssueTemplateUpdateRequest + :rtype: JiraIssueTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["issue_template_id"] = issue_template_id + + kwargs["body"] = body + + return self._update_jira_issue_template_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/key_management_api.py b/datadog_api_client/v2/api/key_management_api.py new file mode 100644 index 0000000000..5bd837033d --- /dev/null +++ b/datadog_api_client/v2/api/key_management_api.py @@ -0,0 +1,1150 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.api_keys_response import APIKeysResponse +from datadog_api_client.v2.model.api_keys_sort import APIKeysSort +from datadog_api_client.v2.model.api_key_response import APIKeyResponse +from datadog_api_client.v2.model.api_key_create_request import APIKeyCreateRequest +from datadog_api_client.v2.model.api_key_update_request import APIKeyUpdateRequest +from datadog_api_client.v2.model.list_application_keys_response import ListApplicationKeysResponse +from datadog_api_client.v2.model.application_keys_sort import ApplicationKeysSort +from datadog_api_client.v2.model.application_key_response import ApplicationKeyResponse +from datadog_api_client.v2.model.application_key_update_request import ApplicationKeyUpdateRequest +from datadog_api_client.v2.model.application_key_create_request import ApplicationKeyCreateRequest +from datadog_api_client.v2.model.list_personal_access_tokens_response import ListPersonalAccessTokensResponse +from datadog_api_client.v2.model.personal_access_tokens_sort import PersonalAccessTokensSort +from datadog_api_client.v2.model.personal_access_token_create_response import PersonalAccessTokenCreateResponse +from datadog_api_client.v2.model.personal_access_token_create_request import PersonalAccessTokenCreateRequest +from datadog_api_client.v2.model.personal_access_token_response import PersonalAccessTokenResponse +from datadog_api_client.v2.model.personal_access_token_update_request import PersonalAccessTokenUpdateRequest +from datadog_api_client.v2.model.validate_v2_response import ValidateV2Response +from datadog_api_client.v2.model.validate_api_key_response import ValidateAPIKeyResponse + + +class KeyManagementApi: + """ + Manage your Datadog API and application keys. You need an API key and an + application key for a user with the required permissions to interact with these endpoints. + + Consult the following pages to view and manage your keys: + + * `API Keys `_ + * `Application Keys `_ + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_api_key_endpoint = _Endpoint( + settings={ + "response_type": (APIKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/api_keys", + "operation_id": "create_api_key", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (APIKeyCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_current_user_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/current_user/application_keys", + "operation_id": "create_current_user_application_key", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ApplicationKeyCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_personal_access_token_endpoint = _Endpoint( + settings={ + "response_type": (PersonalAccessTokenCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/personal_access_tokens", + "operation_id": "create_personal_access_token", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (PersonalAccessTokenCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_api_key_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/api_keys/{api_key_id}", + "operation_id": "delete_api_key", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "api_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "api_key_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_application_key_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/application_keys/{app_key_id}", + "operation_id": "delete_application_key", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_current_user_application_key_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/current_user/application_keys/{app_key_id}", + "operation_id": "delete_current_user_application_key", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_api_key_endpoint = _Endpoint( + settings={ + "response_type": (APIKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/api_keys/{api_key_id}", + "operation_id": "get_api_key", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "api_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "api_key_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/application_keys/{app_key_id}", + "operation_id": "get_application_key", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_current_user_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/current_user/application_keys/{app_key_id}", + "operation_id": "get_current_user_application_key", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_personal_access_token_endpoint = _Endpoint( + settings={ + "response_type": (PersonalAccessTokenResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/personal_access_tokens/{token_id}", + "operation_id": "get_personal_access_token", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "token_id": { + "required": True, + "openapi_types": (str,), + "attribute": "token_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_api_keys_endpoint = _Endpoint( + settings={ + "response_type": (APIKeysResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/api_keys", + "operation_id": "list_api_keys", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (APIKeysSort,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_created_at_start": { + "openapi_types": (str,), + "attribute": "filter[created_at][start]", + "location": "query", + }, + "filter_created_at_end": { + "openapi_types": (str,), + "attribute": "filter[created_at][end]", + "location": "query", + }, + "filter_modified_at_start": { + "openapi_types": (str,), + "attribute": "filter[modified_at][start]", + "location": "query", + }, + "filter_modified_at_end": { + "openapi_types": (str,), + "attribute": "filter[modified_at][end]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "filter_remote_config_read_enabled": { + "openapi_types": (bool,), + "attribute": "filter[remote_config_read_enabled]", + "location": "query", + }, + "filter_category": { + "openapi_types": (str,), + "attribute": "filter[category]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_application_keys_endpoint = _Endpoint( + settings={ + "response_type": (ListApplicationKeysResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/application_keys", + "operation_id": "list_application_keys", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (ApplicationKeysSort,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_created_at_start": { + "openapi_types": (str,), + "attribute": "filter[created_at][start]", + "location": "query", + }, + "filter_created_at_end": { + "openapi_types": (str,), + "attribute": "filter[created_at][end]", + "location": "query", + }, + "filter_owned_by": { + "openapi_types": (str,), + "attribute": "filter[owned_by]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_current_user_application_keys_endpoint = _Endpoint( + settings={ + "response_type": (ListApplicationKeysResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/current_user/application_keys", + "operation_id": "list_current_user_application_keys", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (ApplicationKeysSort,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_created_at_start": { + "openapi_types": (str,), + "attribute": "filter[created_at][start]", + "location": "query", + }, + "filter_created_at_end": { + "openapi_types": (str,), + "attribute": "filter[created_at][end]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_personal_access_tokens_endpoint = _Endpoint( + settings={ + "response_type": (ListPersonalAccessTokensResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/personal_access_tokens", + "operation_id": "list_personal_access_tokens", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (PersonalAccessTokensSort,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_owned_by": { + "openapi_types": ([str],), + "attribute": "filter[owned_by]", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._revoke_personal_access_token_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/personal_access_tokens/{token_id}", + "operation_id": "revoke_personal_access_token", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "token_id": { + "required": True, + "openapi_types": (str,), + "attribute": "token_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._update_api_key_endpoint = _Endpoint( + settings={ + "response_type": (APIKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/api_keys/{api_key_id}", + "operation_id": "update_api_key", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "api_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "api_key_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (APIKeyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/application_keys/{app_key_id}", + "operation_id": "update_application_key", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ApplicationKeyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_current_user_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/current_user/application_keys/{app_key_id}", + "operation_id": "update_current_user_application_key", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ApplicationKeyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_personal_access_token_endpoint = _Endpoint( + settings={ + "response_type": (PersonalAccessTokenResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/personal_access_tokens/{token_id}", + "operation_id": "update_personal_access_token", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "token_id": { + "required": True, + "openapi_types": (str,), + "attribute": "token_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PersonalAccessTokenUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_endpoint = _Endpoint( + settings={ + "response_type": (ValidateV2Response,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v2/validate", + "operation_id": "validate", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._validate_api_key_endpoint = _Endpoint( + settings={ + "response_type": (ValidateAPIKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/validate_keys", + "operation_id": "validate_api_key", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def create_api_key(self, body: APIKeyCreateRequest, ) -> APIKeyResponse: + """Create an API key. + + Create an API key. + + :type body: APIKeyCreateRequest + :rtype: APIKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_api_key_endpoint.call_with_http_info(**kwargs) + + def create_current_user_application_key(self, body: ApplicationKeyCreateRequest, ) -> ApplicationKeyResponse: + """Create an application key for current user. + + Create an application key for current user + + :type body: ApplicationKeyCreateRequest + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_current_user_application_key_endpoint.call_with_http_info(**kwargs) + + def create_personal_access_token(self, body: PersonalAccessTokenCreateRequest, ) -> PersonalAccessTokenCreateResponse: + """Create a personal access token. + + Create a personal access token for the current user. + + :type body: PersonalAccessTokenCreateRequest + :rtype: PersonalAccessTokenCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_personal_access_token_endpoint.call_with_http_info(**kwargs) + + def delete_api_key(self, api_key_id: str, ) -> None: + """Delete an API key. + + Delete an API key. + + :param api_key_id: The ID of the API key. + :type api_key_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["api_key_id"] = api_key_id + + return self._delete_api_key_endpoint.call_with_http_info(**kwargs) + + def delete_application_key(self, app_key_id: str, ) -> None: + """Delete an application key. + + Delete an application key + + :param app_key_id: The ID of the application key. + :type app_key_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["app_key_id"] = app_key_id + + return self._delete_application_key_endpoint.call_with_http_info(**kwargs) + + def delete_current_user_application_key(self, app_key_id: str, ) -> None: + """Delete an application key owned by current user. + + Delete an application key owned by current user + + :param app_key_id: The ID of the application key. + :type app_key_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["app_key_id"] = app_key_id + + return self._delete_current_user_application_key_endpoint.call_with_http_info(**kwargs) + + def get_api_key(self, api_key_id: str, *, include: Union[str, UnsetType]=unset, ) -> APIKeyResponse: + """Get API key. + + Get an API key. + + :param api_key_id: The ID of the API key. + :type api_key_id: str + :param include: Comma separated list of resource paths for related resources to include in the response. Supported resource paths are ``created_by`` and ``modified_by``. + :type include: str, optional + :rtype: APIKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["api_key_id"] = api_key_id + + if include is not unset: + kwargs["include"] = include + + return self._get_api_key_endpoint.call_with_http_info(**kwargs) + + def get_application_key(self, app_key_id: str, *, include: Union[str, UnsetType]=unset, ) -> ApplicationKeyResponse: + """Get an application key. + + Get an application key for your org. + + :param app_key_id: The ID of the application key. + :type app_key_id: str + :param include: Resource path for related resources to include in the response. Only ``owned_by`` is supported. + :type include: str, optional + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_key_id"] = app_key_id + + if include is not unset: + kwargs["include"] = include + + return self._get_application_key_endpoint.call_with_http_info(**kwargs) + + def get_current_user_application_key(self, app_key_id: str, ) -> ApplicationKeyResponse: + """Get one application key owned by current user. + + Get an application key owned by current user. + The ``key`` field is not returned for organizations in `One-Time Read mode `_. + + :param app_key_id: The ID of the application key. + :type app_key_id: str + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_key_id"] = app_key_id + + return self._get_current_user_application_key_endpoint.call_with_http_info(**kwargs) + + def get_personal_access_token(self, token_id: str, ) -> PersonalAccessTokenResponse: + """Get a personal access token. + + Get a specific personal access token by its ID. + + :param token_id: The ID of the access token. + :type token_id: str + :rtype: PersonalAccessTokenResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["token_id"] = token_id + + return self._get_personal_access_token_endpoint.call_with_http_info(**kwargs) + + def list_api_keys(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[APIKeysSort, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_created_at_start: Union[str, UnsetType]=unset, filter_created_at_end: Union[str, UnsetType]=unset, filter_modified_at_start: Union[str, UnsetType]=unset, filter_modified_at_end: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, filter_remote_config_read_enabled: Union[bool, UnsetType]=unset, filter_category: Union[str, UnsetType]=unset, ) -> APIKeysResponse: + """Get all API keys. + + List all API keys available for your account. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: API key attribute used to sort results. Sort order is ascending + by default. In order to specify a descending sort, prefix the + attribute with a minus sign. + :type sort: APIKeysSort, optional + :param filter: Filter API keys by the specified string. + :type filter: str, optional + :param filter_created_at_start: Only include API keys created on or after the specified date. + :type filter_created_at_start: str, optional + :param filter_created_at_end: Only include API keys created on or before the specified date. + :type filter_created_at_end: str, optional + :param filter_modified_at_start: Only include API keys modified on or after the specified date. + :type filter_modified_at_start: str, optional + :param filter_modified_at_end: Only include API keys modified on or before the specified date. + :type filter_modified_at_end: str, optional + :param include: Comma separated list of resource paths for related resources to include in the response. Supported resource paths are ``created_by`` and ``modified_by``. + :type include: str, optional + :param filter_remote_config_read_enabled: Filter API keys by remote config read enabled status. + :type filter_remote_config_read_enabled: bool, optional + :param filter_category: Filter API keys by category. + :type filter_category: str, optional + :rtype: APIKeysResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + if filter_created_at_start is not unset: + kwargs["filter_created_at_start"] = filter_created_at_start + + if filter_created_at_end is not unset: + kwargs["filter_created_at_end"] = filter_created_at_end + + if filter_modified_at_start is not unset: + kwargs["filter_modified_at_start"] = filter_modified_at_start + + if filter_modified_at_end is not unset: + kwargs["filter_modified_at_end"] = filter_modified_at_end + + if include is not unset: + kwargs["include"] = include + + if filter_remote_config_read_enabled is not unset: + kwargs["filter_remote_config_read_enabled"] = filter_remote_config_read_enabled + + if filter_category is not unset: + kwargs["filter_category"] = filter_category + + return self._list_api_keys_endpoint.call_with_http_info(**kwargs) + + def list_application_keys(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[ApplicationKeysSort, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_created_at_start: Union[str, UnsetType]=unset, filter_created_at_end: Union[str, UnsetType]=unset, filter_owned_by: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> ListApplicationKeysResponse: + """Get all application keys. + + List all application keys available for your org + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Application key attribute used to sort results. Sort order is ascending + by default. In order to specify a descending sort, prefix the + attribute with a minus sign. + :type sort: ApplicationKeysSort, optional + :param filter: Filter application keys by the specified string. + :type filter: str, optional + :param filter_created_at_start: Only include application keys created on or after the specified date. + :type filter_created_at_start: str, optional + :param filter_created_at_end: Only include application keys created on or before the specified date. + :type filter_created_at_end: str, optional + :param filter_owned_by: Filter application keys by owner ID. + :type filter_owned_by: str, optional + :param include: Resource path for related resources to include in the response. Only ``owned_by`` is supported. + :type include: str, optional + :rtype: ListApplicationKeysResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + if filter_created_at_start is not unset: + kwargs["filter_created_at_start"] = filter_created_at_start + + if filter_created_at_end is not unset: + kwargs["filter_created_at_end"] = filter_created_at_end + + if filter_owned_by is not unset: + kwargs["filter_owned_by"] = filter_owned_by + + if include is not unset: + kwargs["include"] = include + + return self._list_application_keys_endpoint.call_with_http_info(**kwargs) + + def list_current_user_application_keys(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[ApplicationKeysSort, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_created_at_start: Union[str, UnsetType]=unset, filter_created_at_end: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> ListApplicationKeysResponse: + """Get all application keys owned by current user. + + List all application keys available for current user + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Application key attribute used to sort results. Sort order is ascending + by default. In order to specify a descending sort, prefix the + attribute with a minus sign. + :type sort: ApplicationKeysSort, optional + :param filter: Filter application keys by the specified string. + :type filter: str, optional + :param filter_created_at_start: Only include application keys created on or after the specified date. + :type filter_created_at_start: str, optional + :param filter_created_at_end: Only include application keys created on or before the specified date. + :type filter_created_at_end: str, optional + :param include: Resource path for related resources to include in the response. Only ``owned_by`` is supported. + :type include: str, optional + :rtype: ListApplicationKeysResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + if filter_created_at_start is not unset: + kwargs["filter_created_at_start"] = filter_created_at_start + + if filter_created_at_end is not unset: + kwargs["filter_created_at_end"] = filter_created_at_end + + if include is not unset: + kwargs["include"] = include + + return self._list_current_user_application_keys_endpoint.call_with_http_info(**kwargs) + + def list_personal_access_tokens(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[PersonalAccessTokensSort, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_owned_by: Union[List[str], UnsetType]=unset, ) -> ListPersonalAccessTokensResponse: + """Get all access tokens. + + List all access tokens for the organization. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Access token attribute used to sort results. Sort order is ascending + by default. In order to specify a descending sort, prefix the + attribute with a minus sign. + :type sort: PersonalAccessTokensSort, optional + :param filter: Filter access tokens by the specified string. + :type filter: str, optional + :param filter_owned_by: Filter access tokens by the owner's ID. Supports multiple values. + :type filter_owned_by: [str], optional + :rtype: ListPersonalAccessTokensResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + if filter_owned_by is not unset: + kwargs["filter_owned_by"] = filter_owned_by + + return self._list_personal_access_tokens_endpoint.call_with_http_info(**kwargs) + + def revoke_personal_access_token(self, token_id: str, ) -> None: + """Revoke a personal access token. + + Revoke a specific personal access token. + + :param token_id: The ID of the access token. + :type token_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["token_id"] = token_id + + return self._revoke_personal_access_token_endpoint.call_with_http_info(**kwargs) + + def update_api_key(self, api_key_id: str, body: APIKeyUpdateRequest, ) -> APIKeyResponse: + """Edit an API key. + + Update an API key. + + :param api_key_id: The ID of the API key. + :type api_key_id: str + :type body: APIKeyUpdateRequest + :rtype: APIKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["api_key_id"] = api_key_id + + kwargs["body"] = body + + return self._update_api_key_endpoint.call_with_http_info(**kwargs) + + def update_application_key(self, app_key_id: str, body: ApplicationKeyUpdateRequest, ) -> ApplicationKeyResponse: + """Edit an application key. + + Edit an application key + + :param app_key_id: The ID of the application key. + :type app_key_id: str + :type body: ApplicationKeyUpdateRequest + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_key_id"] = app_key_id + + kwargs["body"] = body + + return self._update_application_key_endpoint.call_with_http_info(**kwargs) + + def update_current_user_application_key(self, app_key_id: str, body: ApplicationKeyUpdateRequest, ) -> ApplicationKeyResponse: + """Edit an application key owned by current user. + + Edit an application key owned by current user. + The ``key`` field is not returned for organizations in `One-Time Read mode `_. + + :param app_key_id: The ID of the application key. + :type app_key_id: str + :type body: ApplicationKeyUpdateRequest + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_key_id"] = app_key_id + + kwargs["body"] = body + + return self._update_current_user_application_key_endpoint.call_with_http_info(**kwargs) + + def update_personal_access_token(self, token_id: str, body: PersonalAccessTokenUpdateRequest, ) -> PersonalAccessTokenResponse: + """Update a personal access token. + + Update a specific personal access token. + + :param token_id: The ID of the access token. + :type token_id: str + :type body: PersonalAccessTokenUpdateRequest + :rtype: PersonalAccessTokenResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["token_id"] = token_id + + kwargs["body"] = body + + return self._update_personal_access_token_endpoint.call_with_http_info(**kwargs) + + def validate(self, ) -> ValidateV2Response: + """Validate API key. + + Check if the API key is valid. Returns the organization UUID, API key ID, and associated scopes. + + :rtype: ValidateV2Response + """ + kwargs: Dict[str, Any] = {} + return self._validate_endpoint.call_with_http_info(**kwargs) + + def validate_api_key(self, ) -> ValidateAPIKeyResponse: + """Validate API and application keys. + + Check that the API key and application key used for the request are both valid. + Returns ``{"status": "ok"}`` on success, ``401`` or ``403`` otherwise. Useful as a + lightweight authentication probe before issuing other API calls that require + full credentials. + + :rtype: ValidateAPIKeyResponse + """ + kwargs: Dict[str, Any] = {} + return self._validate_api_key_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/llm_observability_api.py b/datadog_api_client/v2/api/llm_observability_api.py new file mode 100644 index 0000000000..b0a7edd81f --- /dev/null +++ b/datadog_api_client/v2/api/llm_observability_api.py @@ -0,0 +1,3768 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.llm_obs_custom_eval_config_list_response import LLMObsCustomEvalConfigListResponse +from datadog_api_client.v2.model.llm_obs_custom_eval_config_response import LLMObsCustomEvalConfigResponse +from datadog_api_client.v2.model.llm_obs_custom_eval_config_update_request import LLMObsCustomEvalConfigUpdateRequest +from datadog_api_client.v2.model.llm_obs_data_deletion_response import LLMObsDataDeletionResponse +from datadog_api_client.v2.model.llm_obs_data_deletion_request import LLMObsDataDeletionRequest +from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_response import LLMObsAnnotatedInteractionsByTraceResponse +from datadog_api_client.v2.model.llm_obs_annotation_queues_response import LLMObsAnnotationQueuesResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_response import LLMObsAnnotationQueueResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_request import LLMObsAnnotationQueueRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_update_request import LLMObsAnnotationQueueUpdateRequest +from datadog_api_client.v2.model.llm_obs_annotated_interactions_response import LLMObsAnnotatedInteractionsResponse +from datadog_api_client.v2.model.llm_obs_annotations_response import LLMObsAnnotationsResponse +from datadog_api_client.v2.model.llm_obs_annotations_request import LLMObsAnnotationsRequest +from datadog_api_client.v2.model.llm_obs_delete_annotations_response import LLMObsDeleteAnnotationsResponse +from datadog_api_client.v2.model.llm_obs_delete_annotations_request import LLMObsDeleteAnnotationsRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_response import LLMObsAnnotationQueueInteractionsResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_request import LLMObsAnnotationQueueInteractionsRequest +from datadog_api_client.v2.model.llm_obs_delete_annotation_queue_interactions_request import LLMObsDeleteAnnotationQueueInteractionsRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_response import LLMObsAnnotationQueueLabelSchemaResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_update_request import LLMObsAnnotationQueueLabelSchemaUpdateRequest +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_response import LLMObsExperimentationAnalyticsResponse +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_request import LLMObsExperimentationAnalyticsRequest +from datadog_api_client.v2.model.llm_obs_experimentation_search_response import LLMObsExperimentationSearchResponse +from datadog_api_client.v2.model.llm_obs_experimentation_search_request import LLMObsExperimentationSearchRequest +from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_response import LLMObsExperimentationSimpleSearchResponse +from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_request import LLMObsExperimentationSimpleSearchRequest +from datadog_api_client.v2.model.llm_obs_experiments_response import LLMObsExperimentsResponse +from datadog_api_client.v2.model.llm_obs_experiment_response import LLMObsExperimentResponse +from datadog_api_client.v2.model.llm_obs_experiment_request import LLMObsExperimentRequest +from datadog_api_client.v2.model.llm_obs_delete_experiments_request import LLMObsDeleteExperimentsRequest +from datadog_api_client.v2.model.llm_obs_experiment_update_request import LLMObsExperimentUpdateRequest +from datadog_api_client.v2.model.llm_obs_experiment_spans_response import LLMObsExperimentSpansResponse +from datadog_api_client.v2.model.llm_obs_experiment_events_request import LLMObsExperimentEventsRequest +from datadog_api_client.v2.model.llm_obs_integration_account import LLMObsIntegrationAccount +from datadog_api_client.v2.model.llm_obs_integration_name import LLMObsIntegrationName +from datadog_api_client.v2.model.llm_obs_integration_inference_response import LLMObsIntegrationInferenceResponse +from datadog_api_client.v2.model.llm_obs_integration_inference_request import LLMObsIntegrationInferenceRequest +from datadog_api_client.v2.model.llm_obs_integration_model import LLMObsIntegrationModel +from datadog_api_client.v2.model.llm_obs_projects_response import LLMObsProjectsResponse +from datadog_api_client.v2.model.llm_obs_project_response import LLMObsProjectResponse +from datadog_api_client.v2.model.llm_obs_project_request import LLMObsProjectRequest +from datadog_api_client.v2.model.llm_obs_delete_projects_request import LLMObsDeleteProjectsRequest +from datadog_api_client.v2.model.llm_obs_project_update_request import LLMObsProjectUpdateRequest +from datadog_api_client.v2.model.llm_obs_prompts_response import LLMObsPromptsResponse +from datadog_api_client.v2.model.llm_obs_prompt_response import LLMObsPromptResponse +from datadog_api_client.v2.model.llm_obs_create_prompt_request import LLMObsCreatePromptRequest +from datadog_api_client.v2.model.llm_obs_deleted_prompt_response import LLMObsDeletedPromptResponse +from datadog_api_client.v2.model.llm_obs_prompt_sdk_response import LLMObsPromptSDKResponse +from datadog_api_client.v2.model.llm_obs_update_prompt_request import LLMObsUpdatePromptRequest +from datadog_api_client.v2.model.llm_obs_prompt_versions_response import LLMObsPromptVersionsResponse +from datadog_api_client.v2.model.llm_obs_prompt_version_response import LLMObsPromptVersionResponse +from datadog_api_client.v2.model.llm_obs_create_prompt_version_request import LLMObsCreatePromptVersionRequest +from datadog_api_client.v2.model.llm_obs_update_prompt_version_request import LLMObsUpdatePromptVersionRequest +from datadog_api_client.v2.model.llm_obs_spans_response import LLMObsSpansResponse +from datadog_api_client.v2.model.llm_obs_search_spans_request import LLMObsSearchSpansRequest +from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_response import LLMObsPatternsClusteredPointsResponse +from datadog_api_client.v2.model.llm_obs_patterns_configs_response import LLMObsPatternsConfigsResponse +from datadog_api_client.v2.model.llm_obs_patterns_config_response import LLMObsPatternsConfigResponse +from datadog_api_client.v2.model.llm_obs_patterns_config_upsert_request import LLMObsPatternsConfigUpsertRequest +from datadog_api_client.v2.model.llm_obs_patterns_runs_response import LLMObsPatternsRunsResponse +from datadog_api_client.v2.model.llm_obs_patterns_trigger_response import LLMObsPatternsTriggerResponse +from datadog_api_client.v2.model.llm_obs_patterns_trigger_request import LLMObsPatternsTriggerRequest +from datadog_api_client.v2.model.llm_obs_patterns_run_status_response import LLMObsPatternsRunStatusResponse +from datadog_api_client.v2.model.llm_obs_patterns_topics_response import LLMObsPatternsTopicsResponse +from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_response import LLMObsPatternsTopicsWithClusteredPointsResponse +from datadog_api_client.v2.model.llm_obs_datasets_response import LLMObsDatasetsResponse +from datadog_api_client.v2.model.llm_obs_dataset_response import LLMObsDatasetResponse +from datadog_api_client.v2.model.llm_obs_dataset_request import LLMObsDatasetRequest +from datadog_api_client.v2.model.llm_obs_delete_datasets_request import LLMObsDeleteDatasetsRequest +from datadog_api_client.v2.model.llm_obs_dataset_update_request import LLMObsDatasetUpdateRequest +from datadog_api_client.v2.model.llm_obs_dataset_records_mutation_response import LLMObsDatasetRecordsMutationResponse +from datadog_api_client.v2.model.llm_obs_dataset_batch_update_request import LLMObsDatasetBatchUpdateRequest +from datadog_api_client.v2.model.llm_obs_dataset_clone_request import LLMObsDatasetCloneRequest +from datadog_api_client.v2.model.llm_obs_dataset_draft_state_response import LLMObsDatasetDraftStateResponse +from datadog_api_client.v2.model.llm_obs_dataset_export_format import LLMObsDatasetExportFormat +from datadog_api_client.v2.model.llm_obs_dataset_records_list_response import LLMObsDatasetRecordsListResponse +from datadog_api_client.v2.model.llm_obs_dataset_records_update_request import LLMObsDatasetRecordsUpdateRequest +from datadog_api_client.v2.model.llm_obs_dataset_records_request import LLMObsDatasetRecordsRequest +from datadog_api_client.v2.model.llm_obs_delete_dataset_records_request import LLMObsDeleteDatasetRecordsRequest +from datadog_api_client.v2.model.llm_obs_dataset_restore_version_request import LLMObsDatasetRestoreVersionRequest +from datadog_api_client.v2.model.llm_obs_dataset_versions_response import LLMObsDatasetVersionsResponse +from datadog_api_client.v2.model.llm_obs_experiment_events_v2_response import LLMObsExperimentEventsV2Response +from datadog_api_client.v2.model.llm_obs_dataset_records_upload_file import LLMObsDatasetRecordsUploadFile + + +class LLMObservabilityApi: + """ + Manage LLM Observability spans, data, projects, datasets, dataset records, experiments, prompts, and annotations. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._aggregate_llm_obs_experimentation_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsExperimentationAnalyticsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/experimentation/analytics", + "operation_id": "aggregate_llm_obs_experimentation", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsExperimentationAnalyticsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._batch_update_llm_obs_dataset_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetRecordsMutationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/batch_update", + "operation_id": "batch_update_llm_obs_dataset", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDatasetBatchUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._clone_llm_obs_dataset_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/clone", + "operation_id": "clone_llm_obs_dataset", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDatasetCloneRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_annotation_queue_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsAnnotationQueueResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues", + "operation_id": "create_llm_obs_annotation_queue", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsAnnotationQueueRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_annotation_queue_interactions_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsAnnotationQueueInteractionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues/{queue_id}/interactions", + "operation_id": "create_llm_obs_annotation_queue_interactions", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "queue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "queue_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsAnnotationQueueInteractionsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_dataset_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets", + "operation_id": "create_llm_obs_dataset", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDatasetRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_dataset_records_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetRecordsMutationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/records", + "operation_id": "create_llm_obs_dataset_records", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDatasetRecordsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_experiment_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsExperimentResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/experiments", + "operation_id": "create_llm_obs_experiment", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsExperimentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_experiment_events_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/experiments/{experiment_id}/events", + "operation_id": "create_llm_obs_experiment_events", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "experiment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "experiment_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsExperimentEventsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_integration_inference_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsIntegrationInferenceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/integrations/{integration}/{account_id}/inference", + "operation_id": "create_llm_obs_integration_inference", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "integration": { + "required": True, + "openapi_types": (LLMObsIntegrationName,), + "attribute": "integration", + "location": "path", + }, + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsIntegrationInferenceRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_project_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsProjectResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/projects", + "operation_id": "create_llm_obs_project", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsProjectRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_prompt_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPromptResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/prompts", + "operation_id": "create_llm_obs_prompt", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsCreatePromptRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_llm_obs_prompt_version_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPromptVersionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions", + "operation_id": "create_llm_obs_prompt_version", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "prompt_id": { + "required": True, + "openapi_types": (str,), + "attribute": "prompt_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsCreatePromptVersionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_llm_obs_annotation_queue_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues/{queue_id}", + "operation_id": "delete_llm_obs_annotation_queue", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "queue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "queue_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_llm_obs_annotation_queue_interactions_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues/{queue_id}/interactions/delete", + "operation_id": "delete_llm_obs_annotation_queue_interactions", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "queue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "queue_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDeleteAnnotationQueueInteractionsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_llm_obs_annotations_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDeleteAnnotationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues/{queue_id}/annotations/delete", + "operation_id": "delete_llm_obs_annotations", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "queue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "queue_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDeleteAnnotationsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_llm_obs_custom_eval_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/llm-obs/config/evaluators/custom/{eval_name}", + "operation_id": "delete_llm_obs_custom_eval_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "eval_name": { + "required": True, + "openapi_types": (str,), + "attribute": "eval_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_llm_obs_data_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDataDeletionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/deletion/data/llmobs", + "operation_id": "delete_llm_obs_data", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsDataDeletionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_llm_obs_dataset_records_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/records/delete", + "operation_id": "delete_llm_obs_dataset_records", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDeleteDatasetRecordsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_llm_obs_datasets_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/delete", + "operation_id": "delete_llm_obs_datasets", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDeleteDatasetsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_llm_obs_experiments_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/experiments/delete", + "operation_id": "delete_llm_obs_experiments", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsDeleteExperimentsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_llm_obs_patterns_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-configs/{config_id}", + "operation_id": "delete_llm_obs_patterns_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_llm_obs_projects_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/projects/delete", + "operation_id": "delete_llm_obs_projects", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsDeleteProjectsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_llm_obs_prompt_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDeletedPromptResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/prompts/{prompt_id}", + "operation_id": "delete_llm_obs_prompt", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "prompt_id": { + "required": True, + "openapi_types": (str,), + "attribute": "prompt_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._export_llm_obs_dataset_endpoint = _Endpoint( + settings={ + "response_type": (str,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/export", + "operation_id": "export_llm_obs_dataset", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "format": { + "openapi_types": (LLMObsDatasetExportFormat,), + "attribute": "format", + "location": "query", + }, + "version": { + "validation": { + "inclusive_maximum": 2147483647, + }, + "openapi_types": (int,), + "attribute": "version", + "location": "query", + }, + }, + headers_map={ + "accept": ["text/csv", "application/json"], + }, + api_client=api_client, + ) + + self._get_llm_obs_annotated_interactions_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsAnnotatedInteractionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues/{queue_id}/annotated-interactions", + "operation_id": "get_llm_obs_annotated_interactions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "queue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "queue_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_llm_obs_annotated_interactions_by_trace_i_ds_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsAnnotatedInteractionsByTraceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotated-interactions", + "operation_id": "get_llm_obs_annotated_interactions_by_trace_i_ds", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "content_ids": { + "required": True, + "openapi_types": ([str],), + "attribute": "contentIds", + "location": "query", + "collection_format": "multi", + }, + "offset": { + "validation": { + "inclusive_maximum": 2147483647, + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "offset", + "location": "query", + }, + "limit": { + "validation": { + "inclusive_maximum": 2147483647, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_llm_obs_annotation_queue_label_schema_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsAnnotationQueueLabelSchemaResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues/{queue_id}/label-schema", + "operation_id": "get_llm_obs_annotation_queue_label_schema", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "queue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "queue_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_llm_obs_custom_eval_config_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsCustomEvalConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/llm-obs/config/evaluators/custom/{eval_name}", + "operation_id": "get_llm_obs_custom_eval_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "eval_name": { + "required": True, + "openapi_types": (str,), + "attribute": "eval_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_llm_obs_dataset_draft_state_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetDraftStateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/draft_state", + "operation_id": "get_llm_obs_dataset_draft_state", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_llm_obs_patterns_config_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPatternsConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-configs/latest", + "operation_id": "get_llm_obs_patterns_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_llm_obs_patterns_run_status_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPatternsRunStatusResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-runs/status", + "operation_id": "get_llm_obs_patterns_run_status", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "config_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_llm_obs_prompt_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPromptSDKResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/prompts/{prompt_id}", + "operation_id": "get_llm_obs_prompt", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "prompt_id": { + "required": True, + "openapi_types": (str,), + "attribute": "prompt_id", + "location": "path", + }, + "label": { + "openapi_types": (str,), + "attribute": "label", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_llm_obs_prompt_version_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPromptVersionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions/{version}", + "operation_id": "get_llm_obs_prompt_version", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "prompt_id": { + "required": True, + "openapi_types": (str,), + "attribute": "prompt_id", + "location": "path", + }, + "version": { + "required": True, + "validation": { + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "version", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_annotation_queues_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsAnnotationQueuesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues", + "operation_id": "list_llm_obs_annotation_queues", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "openapi_types": (str,), + "attribute": "projectId", + "location": "query", + }, + "queue_ids": { + "openapi_types": ([str],), + "attribute": "queueIds", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_custom_eval_configs_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsCustomEvalConfigListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/llm-obs/config/evaluators/custom", + "operation_id": "list_llm_obs_custom_eval_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_dataset_records_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetRecordsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/records", + "operation_id": "list_llm_obs_dataset_records", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "filter_version": { + "openapi_types": (int,), + "attribute": "filter[version]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_datasets_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets", + "operation_id": "list_llm_obs_datasets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "filter_name": { + "openapi_types": (str,), + "attribute": "filter[name]", + "location": "query", + }, + "filter_id": { + "openapi_types": (str,), + "attribute": "filter[id]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_dataset_versions_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetVersionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/versions", + "operation_id": "list_llm_obs_dataset_versions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_experiment_events_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsExperimentEventsV2Response,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v3/experiments/{experiment_id}/events", + "operation_id": "list_llm_obs_experiment_events", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "experiment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "experiment_id", + "location": "path", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_experiment_events_v1_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsExperimentSpansResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/experiments/{experiment_id}/events", + "operation_id": "list_llm_obs_experiment_events_v1", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "experiment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "experiment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_experiment_events_v2_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsExperimentEventsV2Response,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v2/experiments/{experiment_id}/events", + "operation_id": "list_llm_obs_experiment_events_v2", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "experiment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "experiment_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_experiments_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsExperimentsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/experiments", + "operation_id": "list_llm_obs_experiments", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_project_id": { + "openapi_types": (str,), + "attribute": "filter[project_id]", + "location": "query", + }, + "filter_dataset_id": { + "openapi_types": (str,), + "attribute": "filter[dataset_id]", + "location": "query", + }, + "filter_id": { + "openapi_types": (str,), + "attribute": "filter[id]", + "location": "query", + }, + "filter_name": { + "openapi_types": (str,), + "attribute": "filter[name]", + "location": "query", + }, + "filter_experiment": { + "openapi_types": (str,), + "attribute": "filter[experiment]", + "location": "query", + }, + "filter_metadata": { + "openapi_types": (str,), + "attribute": "filter[metadata]", + "location": "query", + }, + "filter_parent_experiment_id": { + "openapi_types": (str,), + "attribute": "filter[parent_experiment_id]", + "location": "query", + }, + "filter_is_deleted": { + "openapi_types": (bool,), + "attribute": "filter[is_deleted]", + "location": "query", + }, + "include_user_data": { + "openapi_types": (bool,), + "attribute": "include[user_data]", + "location": "query", + }, + "include_dataset_names": { + "openapi_types": (bool,), + "attribute": "include[dataset_names]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 5000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_integration_accounts_endpoint = _Endpoint( + settings={ + "response_type": ([LLMObsIntegrationAccount],), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/integrations/{integration}/accounts", + "operation_id": "list_llm_obs_integration_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "integration": { + "required": True, + "openapi_types": (LLMObsIntegrationName,), + "attribute": "integration", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_integration_models_endpoint = _Endpoint( + settings={ + "response_type": ([LLMObsIntegrationModel],), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/integrations/{integration}/{account_id}/models", + "operation_id": "list_llm_obs_integration_models", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "integration": { + "required": True, + "openapi_types": (LLMObsIntegrationName,), + "attribute": "integration", + "location": "path", + }, + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_patterns_clustered_points_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPatternsClusteredPointsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-clustered-points", + "operation_id": "list_llm_obs_patterns_clustered_points", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "topic_id": { + "required": True, + "openapi_types": (str,), + "attribute": "topic_id", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page_size", + "location": "query", + }, + "page_token": { + "openapi_types": (str,), + "attribute": "page_token", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_patterns_configs_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPatternsConfigsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-configs", + "operation_id": "list_llm_obs_patterns_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_patterns_runs_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPatternsRunsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-runs", + "operation_id": "list_llm_obs_patterns_runs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "config_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_patterns_topics_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPatternsTopicsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-topics", + "operation_id": "list_llm_obs_patterns_topics", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "config_id", + "location": "query", + }, + "run_id": { + "openapi_types": (str,), + "attribute": "run_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_patterns_topics_with_clustered_points_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPatternsTopicsWithClusteredPointsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-topics/with-cluster-points", + "operation_id": "list_llm_obs_patterns_topics_with_clustered_points", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "config_id", + "location": "query", + }, + "run_id": { + "openapi_types": (str,), + "attribute": "run_id", + "location": "query", + }, + "include_metrics": { + "openapi_types": (bool,), + "attribute": "include_metrics", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_projects_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsProjectsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/projects", + "operation_id": "list_llm_obs_projects", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_id": { + "openapi_types": (str,), + "attribute": "filter[id]", + "location": "query", + }, + "filter_name": { + "openapi_types": (str,), + "attribute": "filter[name]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_prompts_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPromptsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/prompts", + "operation_id": "list_llm_obs_prompts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_prompt_id": { + "openapi_types": (str,), + "attribute": "filter[prompt_id]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_prompt_versions_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPromptVersionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions", + "operation_id": "list_llm_obs_prompt_versions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "prompt_id": { + "required": True, + "openapi_types": (str,), + "attribute": "prompt_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_llm_obs_spans_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsSpansResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/spans/events", + "operation_id": "list_llm_obs_spans", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_from": { + "openapi_types": (str,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (str,), + "attribute": "filter[to]", + "location": "query", + }, + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_span_id": { + "openapi_types": (str,), + "attribute": "filter[span_id]", + "location": "query", + }, + "filter_trace_id": { + "openapi_types": (str,), + "attribute": "filter[trace_id]", + "location": "query", + }, + "filter_span_kind": { + "openapi_types": (str,), + "attribute": "filter[span_kind]", + "location": "query", + }, + "filter_span_name": { + "openapi_types": (str,), + "attribute": "filter[span_name]", + "location": "query", + }, + "filter_ml_app": { + "openapi_types": (str,), + "attribute": "filter[ml_app]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "include_attachments": { + "openapi_types": (bool,), + "attribute": "include_attachments", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._lock_llm_obs_dataset_draft_state_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetDraftStateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/draft_state/lock", + "operation_id": "lock_llm_obs_dataset_draft_state", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._restore_llm_obs_dataset_version_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/restore", + "operation_id": "restore_llm_obs_dataset_version", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDatasetRestoreVersionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_llm_obs_experimentation_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsExperimentationSearchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/experimentation/search", + "operation_id": "search_llm_obs_experimentation", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsExperimentationSearchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_llm_obs_spans_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsSpansResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/spans/events/search", + "operation_id": "search_llm_obs_spans", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsSearchSpansRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._simple_search_llm_obs_experimentation_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsExperimentationSimpleSearchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/experimentation/simple-search", + "operation_id": "simple_search_llm_obs_experimentation", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsExperimentationSimpleSearchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._trigger_llm_obs_patterns_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPatternsTriggerResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-runs", + "operation_id": "trigger_llm_obs_patterns", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsPatternsTriggerRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._unlock_llm_obs_dataset_draft_state_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/draft_state/unlock", + "operation_id": "unlock_llm_obs_dataset_draft_state", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._update_llm_obs_annotation_queue_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsAnnotationQueueResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues/{queue_id}", + "operation_id": "update_llm_obs_annotation_queue", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "queue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "queue_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsAnnotationQueueUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_llm_obs_annotation_queue_label_schema_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsAnnotationQueueLabelSchemaResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues/{queue_id}/label-schema", + "operation_id": "update_llm_obs_annotation_queue_label_schema", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "queue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "queue_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsAnnotationQueueLabelSchemaUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_llm_obs_custom_eval_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/unstable/llm-obs/config/evaluators/custom/{eval_name}", + "operation_id": "update_llm_obs_custom_eval_config", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "eval_name": { + "required": True, + "openapi_types": (str,), + "attribute": "eval_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsCustomEvalConfigUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_llm_obs_dataset_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}", + "operation_id": "update_llm_obs_dataset", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDatasetUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_llm_obs_dataset_records_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsDatasetRecordsMutationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/{project_id}/datasets/{dataset_id}/records", + "operation_id": "update_llm_obs_dataset_records", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsDatasetRecordsUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_llm_obs_experiment_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsExperimentResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/experiments/{experiment_id}", + "operation_id": "update_llm_obs_experiment", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "experiment_id": { + "required": True, + "openapi_types": (str,), + "attribute": "experiment_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsExperimentUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_llm_obs_project_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsProjectResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/projects/{project_id}", + "operation_id": "update_llm_obs_project", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsProjectUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_llm_obs_prompt_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPromptResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/prompts/{prompt_id}", + "operation_id": "update_llm_obs_prompt", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "prompt_id": { + "required": True, + "openapi_types": (str,), + "attribute": "prompt_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsUpdatePromptRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_llm_obs_prompt_version_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPromptVersionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions/{version}", + "operation_id": "update_llm_obs_prompt_version", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "prompt_id": { + "required": True, + "openapi_types": (str,), + "attribute": "prompt_id", + "location": "path", + }, + "version": { + "required": True, + "validation": { + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "version", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsUpdatePromptVersionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upload_llm_obs_dataset_records_file_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v2/{project_id}/datasets/{dataset_id}/records/upload", + "operation_id": "upload_llm_obs_dataset_records_file", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "path", + }, + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "deduplicate": { + "openapi_types": (bool,), + "attribute": "deduplicate", + "location": "query", + }, + "overwrite": { + "openapi_types": (bool,), + "attribute": "overwrite", + "location": "query", + }, + "tags": { + "openapi_types": ([str],), + "attribute": "tags", + "location": "query", + "collection_format": "multi", + }, + "include_user_data": { + "openapi_types": (bool,), + "attribute": "include[user_data]", + "location": "query", + }, + "file": { + "openapi_types": (file_type,), + "attribute": "file", + "location": "form", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["multipart/form-data"] + }, + api_client=api_client, + ) + + self._upsert_llm_obs_annotations_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsAnnotationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/annotation-queues/{queue_id}/annotations", + "operation_id": "upsert_llm_obs_annotations", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "queue_id": { + "required": True, + "openapi_types": (str,), + "attribute": "queue_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LLMObsAnnotationsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upsert_llm_obs_patterns_config_endpoint = _Endpoint( + settings={ + "response_type": (LLMObsPatternsConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/llm-obs/v1/topic-discovery-configs", + "operation_id": "upsert_llm_obs_patterns_config", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LLMObsPatternsConfigUpsertRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def aggregate_llm_obs_experimentation(self, body: LLMObsExperimentationAnalyticsRequest, ) -> LLMObsExperimentationAnalyticsResponse: + """Aggregate LLM Observability experimentation. + + Execute an analytics aggregation over LLM Observability experimentation data. + Use this endpoint to compute metrics (for example average eval scores) grouped by fields such as ``span_id`` or ``experiment_id``. + + At least one ``compute`` definition and one ``index`` must be provided. + + :param body: Analytics payload. + :type body: LLMObsExperimentationAnalyticsRequest + :rtype: LLMObsExperimentationAnalyticsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._aggregate_llm_obs_experimentation_endpoint.call_with_http_info(**kwargs) + + def batch_update_llm_obs_dataset(self, project_id: str, dataset_id: str, body: LLMObsDatasetBatchUpdateRequest, ) -> LLMObsDatasetRecordsMutationResponse: + """Batch update LLM Observability dataset records. + + Insert, update, and delete records in a single dataset operation. By default, a new dataset version is created when the batch is applied. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :param body: Batch update payload. + :type body: LLMObsDatasetBatchUpdateRequest + :rtype: LLMObsDatasetRecordsMutationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + kwargs["body"] = body + + return self._batch_update_llm_obs_dataset_endpoint.call_with_http_info(**kwargs) + + def clone_llm_obs_dataset(self, project_id: str, dataset_id: str, body: LLMObsDatasetCloneRequest, ) -> LLMObsDatasetResponse: + """Clone an LLM Observability dataset. + + Clone a dataset, copying its current records into a new dataset within the same project. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the source LLM Observability dataset to clone. + :type dataset_id: str + :param body: Clone dataset payload. + :type body: LLMObsDatasetCloneRequest + :rtype: LLMObsDatasetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + kwargs["body"] = body + + return self._clone_llm_obs_dataset_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_annotation_queue(self, body: LLMObsAnnotationQueueRequest, ) -> LLMObsAnnotationQueueResponse: + """Create an LLM Observability annotation queue. + + Create an annotation queue. The ``name`` and ``project_id`` fields are required. + An optional ``annotation_schema`` can be provided to define the labels for the queue. + Fields such as ``created_by`` , ``owned_by`` , ``created_at`` , ``modified_by`` , + and ``modified_at`` are inferred by the backend. + + :param body: Create annotation queue payload. + :type body: LLMObsAnnotationQueueRequest + :rtype: LLMObsAnnotationQueueResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_llm_obs_annotation_queue_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_annotation_queue_interactions(self, queue_id: str, body: LLMObsAnnotationQueueInteractionsRequest, ) -> LLMObsAnnotationQueueInteractionsResponse: + """Add annotation queue interactions. + + Add one or more interactions to an annotation queue. At least one + interaction must be provided. Each interaction has a ``type`` : + + * ``trace`` , ``experiment_trace`` , ``session`` : ``content_id`` references the + upstream entity; the server fetches the actual content. + * ``display_block`` : omit ``content_id`` and provide the rendered content + in ``display_block``. The server generates ``content_id`` as a + deterministic hash of the block list. + + Items of different types can be mixed in a single request. + + :param queue_id: The ID of the LLM Observability annotation queue. + :type queue_id: str + :param body: Add interactions payload. + :type body: LLMObsAnnotationQueueInteractionsRequest + :rtype: LLMObsAnnotationQueueInteractionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["queue_id"] = queue_id + + kwargs["body"] = body + + return self._create_llm_obs_annotation_queue_interactions_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_dataset(self, project_id: str, body: LLMObsDatasetRequest, ) -> LLMObsDatasetResponse: + """Create an LLM Observability dataset. + + Create a new LLM Observability dataset within the specified project. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param body: Create dataset payload. + :type body: LLMObsDatasetRequest + :rtype: LLMObsDatasetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["body"] = body + + return self._create_llm_obs_dataset_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_dataset_records(self, project_id: str, dataset_id: str, body: LLMObsDatasetRecordsRequest, ) -> LLMObsDatasetRecordsMutationResponse: + """Append records to an LLM Observability dataset. + + Append one or more records to an LLM Observability dataset. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :param body: Append records payload. + :type body: LLMObsDatasetRecordsRequest + :rtype: LLMObsDatasetRecordsMutationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + kwargs["body"] = body + + return self._create_llm_obs_dataset_records_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_experiment(self, body: LLMObsExperimentRequest, ) -> LLMObsExperimentResponse: + """Create an LLM Observability experiment. + + Create a new LLM Observability experiment. + + :param body: Create experiment payload. + :type body: LLMObsExperimentRequest + :rtype: LLMObsExperimentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_llm_obs_experiment_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_experiment_events(self, experiment_id: str, body: LLMObsExperimentEventsRequest, ) -> None: + """Push events for an LLM Observability experiment. + + Push spans and metrics for an LLM Observability experiment. + + :param experiment_id: The ID of the LLM Observability experiment. + :type experiment_id: str + :param body: Experiment events payload. + :type body: LLMObsExperimentEventsRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["experiment_id"] = experiment_id + + kwargs["body"] = body + + return self._create_llm_obs_experiment_events_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_integration_inference(self, integration: LLMObsIntegrationName, account_id: str, body: LLMObsIntegrationInferenceRequest, ) -> LLMObsIntegrationInferenceResponse: + """Run an LLM inference. + + Run an LLM inference request through the specified integration and account, returning the model response and token usage. + + :param integration: The name of the LLM integration. + :type integration: LLMObsIntegrationName + :param account_id: The ID of the integration account. + :type account_id: str + :param body: Inference request parameters. + :type body: LLMObsIntegrationInferenceRequest + :rtype: LLMObsIntegrationInferenceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration"] = integration + + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._create_llm_obs_integration_inference_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_project(self, body: LLMObsProjectRequest, ) -> LLMObsProjectResponse: + """Create an LLM Observability project. + + Create a new LLM Observability project. Returns the existing project if a name conflict occurs. + + :param body: Create project payload. + :type body: LLMObsProjectRequest + :rtype: LLMObsProjectResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_llm_obs_project_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_prompt(self, body: LLMObsCreatePromptRequest, ) -> LLMObsPromptResponse: + """Create an LLM Observability prompt. + + Create a new prompt (and its first version) in the LLM Observability prompt registry. + + :param body: Create prompt payload. + :type body: LLMObsCreatePromptRequest + :rtype: LLMObsPromptResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_llm_obs_prompt_endpoint.call_with_http_info(**kwargs) + + def create_llm_obs_prompt_version(self, prompt_id: str, body: LLMObsCreatePromptVersionRequest, ) -> LLMObsPromptVersionResponse: + """Create a new LLM Observability prompt version. + + Create a new version of an existing LLM Observability prompt. + + :param prompt_id: The customer-provided identifier of the LLM Observability prompt. + :type prompt_id: str + :param body: Create prompt version payload. + :type body: LLMObsCreatePromptVersionRequest + :rtype: LLMObsPromptVersionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["prompt_id"] = prompt_id + + kwargs["body"] = body + + return self._create_llm_obs_prompt_version_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_annotation_queue(self, queue_id: str, ) -> None: + """Delete an LLM Observability annotation queue. + + Delete an annotation queue by its ID. + + :param queue_id: The ID of the LLM Observability annotation queue. + :type queue_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["queue_id"] = queue_id + + return self._delete_llm_obs_annotation_queue_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_annotation_queue_interactions(self, queue_id: str, body: LLMObsDeleteAnnotationQueueInteractionsRequest, ) -> None: + """Delete annotation queue interactions. + + Delete one or more interactions from an annotation queue. + + :param queue_id: The ID of the LLM Observability annotation queue. + :type queue_id: str + :param body: Delete interactions payload. + :type body: LLMObsDeleteAnnotationQueueInteractionsRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["queue_id"] = queue_id + + kwargs["body"] = body + + return self._delete_llm_obs_annotation_queue_interactions_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_annotations(self, queue_id: str, body: LLMObsDeleteAnnotationsRequest, ) -> LLMObsDeleteAnnotationsResponse: + """Delete annotations. + + Delete one or more annotations from an annotation queue. + + :param queue_id: The ID of the LLM Observability annotation queue. + :type queue_id: str + :param body: Delete annotations payload. + :type body: LLMObsDeleteAnnotationsRequest + :rtype: LLMObsDeleteAnnotationsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["queue_id"] = queue_id + + kwargs["body"] = body + + return self._delete_llm_obs_annotations_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_custom_eval_config(self, eval_name: str, ) -> None: + """Delete a custom evaluator configuration. + + Delete a custom LLM Observability evaluator configuration by its name. + + :param eval_name: The name of the custom LLM Observability evaluator configuration. + :type eval_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["eval_name"] = eval_name + + return self._delete_llm_obs_custom_eval_config_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_data(self, body: LLMObsDataDeletionRequest, ) -> LLMObsDataDeletionResponse: + """Delete LLM Observability data. + + Submit a request to delete LLM Observability span data matching a trace ID filter within a specified time range. + + :param body: Data deletion request payload. + :type body: LLMObsDataDeletionRequest + :rtype: LLMObsDataDeletionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_llm_obs_data_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_dataset_records(self, project_id: str, dataset_id: str, body: LLMObsDeleteDatasetRecordsRequest, ) -> None: + """Delete LLM Observability dataset records. + + Delete one or more records from an LLM Observability dataset. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :param body: Delete records payload. + :type body: LLMObsDeleteDatasetRecordsRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + kwargs["body"] = body + + return self._delete_llm_obs_dataset_records_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_datasets(self, project_id: str, body: LLMObsDeleteDatasetsRequest, ) -> None: + """Delete LLM Observability datasets. + + Delete one or more LLM Observability datasets within the specified project. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param body: Delete datasets payload. + :type body: LLMObsDeleteDatasetsRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["body"] = body + + return self._delete_llm_obs_datasets_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_experiments(self, body: LLMObsDeleteExperimentsRequest, ) -> None: + """Delete LLM Observability experiments. + + Delete one or more LLM Observability experiments. + + :param body: Delete experiments payload. + :type body: LLMObsDeleteExperimentsRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_llm_obs_experiments_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_patterns_config(self, config_id: str, ) -> None: + """Delete a patterns configuration. + + Delete a patterns configuration by its ID. + + :param config_id: The ID of the patterns configuration. + :type config_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["config_id"] = config_id + + return self._delete_llm_obs_patterns_config_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_projects(self, body: LLMObsDeleteProjectsRequest, ) -> None: + """Delete LLM Observability projects. + + Delete one or more LLM Observability projects. + + :param body: Delete projects payload. + :type body: LLMObsDeleteProjectsRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_llm_obs_projects_endpoint.call_with_http_info(**kwargs) + + def delete_llm_obs_prompt(self, prompt_id: str, ) -> LLMObsDeletedPromptResponse: + """Delete an LLM Observability prompt. + + Soft-delete an LLM Observability prompt. The prompt's version rows are retained, but they are no longer accessible through the public prompt registry endpoints. + + :param prompt_id: The customer-provided identifier of the LLM Observability prompt. + :type prompt_id: str + :rtype: LLMObsDeletedPromptResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["prompt_id"] = prompt_id + + return self._delete_llm_obs_prompt_endpoint.call_with_http_info(**kwargs) + + def export_llm_obs_dataset(self, project_id: str, dataset_id: str, *, format: Union[LLMObsDatasetExportFormat, UnsetType]=unset, version: Union[int, UnsetType]=unset, ) -> str: + """Export an LLM Observability dataset. + + Download the contents of a dataset as a CSV file. The download is streamed and includes one row per dataset record. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :param format: Export format for the dataset contents. Only ``csv`` is currently supported. + :type format: LLMObsDatasetExportFormat, optional + :param version: Version of the dataset to export. If omitted, the current version is used. Must be between 0 and the current version of the dataset, inclusive. + :type version: int, optional + :rtype: str + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + if format is not unset: + kwargs["format"] = format + + if version is not unset: + kwargs["version"] = version + + return self._export_llm_obs_dataset_endpoint.call_with_http_info(**kwargs) + + def get_llm_obs_annotated_interactions(self, queue_id: str, ) -> LLMObsAnnotatedInteractionsResponse: + """Get annotated queue interactions. + + Retrieve all interactions (traces and sessions) and their annotations for a given annotation queue. + + :param queue_id: The ID of the LLM Observability annotation queue. + :type queue_id: str + :rtype: LLMObsAnnotatedInteractionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["queue_id"] = queue_id + + return self._get_llm_obs_annotated_interactions_endpoint.call_with_http_info(**kwargs) + + def get_llm_obs_annotated_interactions_by_trace_i_ds(self, content_ids: List[str], *, offset: Union[int, UnsetType]=unset, limit: Union[int, UnsetType]=unset, ) -> LLMObsAnnotatedInteractionsByTraceResponse: + """Get annotated interactions by content IDs. + + Returns annotated interactions across all annotation queues for the given content IDs. + Results include queue metadata (ID and name) for each interaction. + + :param content_ids: One or more content IDs to retrieve annotated interactions for. At least one is required. + :type content_ids: [str] + :param offset: Pagination offset. Must be >= 0. Defaults to 0. + :type offset: int, optional + :param limit: Maximum number of results to return. Must be > 0. Defaults to 100. + :type limit: int, optional + :rtype: LLMObsAnnotatedInteractionsByTraceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["content_ids"] = content_ids + + if offset is not unset: + kwargs["offset"] = offset + + if limit is not unset: + kwargs["limit"] = limit + + return self._get_llm_obs_annotated_interactions_by_trace_i_ds_endpoint.call_with_http_info(**kwargs) + + def get_llm_obs_annotation_queue_label_schema(self, queue_id: str, ) -> LLMObsAnnotationQueueLabelSchemaResponse: + """Get annotation queue label schema. + + Retrieve the label schema for a given annotation queue. + + :param queue_id: The ID of the LLM Observability annotation queue. + :type queue_id: str + :rtype: LLMObsAnnotationQueueLabelSchemaResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["queue_id"] = queue_id + + return self._get_llm_obs_annotation_queue_label_schema_endpoint.call_with_http_info(**kwargs) + + def get_llm_obs_custom_eval_config(self, eval_name: str, ) -> LLMObsCustomEvalConfigResponse: + """Get a custom evaluator configuration. + + Retrieve a custom LLM Observability evaluator configuration by its name. + + :param eval_name: The name of the custom LLM Observability evaluator configuration. + :type eval_name: str + :rtype: LLMObsCustomEvalConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["eval_name"] = eval_name + + return self._get_llm_obs_custom_eval_config_endpoint.call_with_http_info(**kwargs) + + def get_llm_obs_dataset_draft_state(self, project_id: str, dataset_id: str, ) -> LLMObsDatasetDraftStateResponse: + """Get LLM Observability dataset draft state. + + Retrieve the draft state of a dataset, including whether it is currently locked for editing and which user holds the lock. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :rtype: LLMObsDatasetDraftStateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + return self._get_llm_obs_dataset_draft_state_endpoint.call_with_http_info(**kwargs) + + def get_llm_obs_patterns_config(self, ) -> LLMObsPatternsConfigResponse: + """Get a patterns configuration. + + Retrieve the patterns configuration for the organization. + + :rtype: LLMObsPatternsConfigResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_llm_obs_patterns_config_endpoint.call_with_http_info(**kwargs) + + def get_llm_obs_patterns_run_status(self, config_id: str, ) -> LLMObsPatternsRunStatusResponse: + """Get patterns run status. + + Retrieve the status and step-by-step progress of the current or most recent + patterns run for a configuration. + + :param config_id: The ID of the patterns configuration. + :type config_id: str + :rtype: LLMObsPatternsRunStatusResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["config_id"] = config_id + + return self._get_llm_obs_patterns_run_status_endpoint.call_with_http_info(**kwargs) + + def get_llm_obs_prompt(self, prompt_id: str, *, label: Union[str, UnsetType]=unset, ) -> LLMObsPromptSDKResponse: + """Get an LLM Observability prompt. + + Get the latest version of an LLM Observability prompt by prompt ID. + + :param prompt_id: The customer-provided identifier of the LLM Observability prompt. + :type prompt_id: str + :param label: **Deprecated.** Optional label of the prompt version to return. Do not use this parameter for new integrations. If omitted, the latest version is returned. If the prompt has no labels, the latest version is returned even when a label is requested. If the prompt has labels but none match the requested label, a 404 response is returned. + :type label: str, optional + :rtype: LLMObsPromptSDKResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["prompt_id"] = prompt_id + + if label is not unset: + kwargs["label"] = label + + return self._get_llm_obs_prompt_endpoint.call_with_http_info(**kwargs) + + def get_llm_obs_prompt_version(self, prompt_id: str, version: int, ) -> LLMObsPromptVersionResponse: + """Get a specific LLM Observability prompt version. + + Get the full template of a single, specific version of an LLM Observability prompt. + + :param prompt_id: The customer-provided identifier of the LLM Observability prompt. + :type prompt_id: str + :param version: The version number of the LLM Observability prompt. + :type version: int + :rtype: LLMObsPromptVersionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["prompt_id"] = prompt_id + + kwargs["version"] = version + + return self._get_llm_obs_prompt_version_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_annotation_queues(self, *, project_id: Union[str, UnsetType]=unset, queue_ids: Union[List[str], UnsetType]=unset, ) -> LLMObsAnnotationQueuesResponse: + """List LLM Observability annotation queues. + + List annotation queues. Optionally filter by project ID or queue IDs. These parameters are mutually exclusive. + If neither is provided, all queues in the organization are returned. + + :param project_id: Filter annotation queues by project ID. Cannot be used together with ``queueIds``. + :type project_id: str, optional + :param queue_ids: Filter annotation queues by queue IDs (comma-separated). Cannot be used together with ``projectId``. + :type queue_ids: [str], optional + :rtype: LLMObsAnnotationQueuesResponse + """ + kwargs: Dict[str, Any] = {} + if project_id is not unset: + kwargs["project_id"] = project_id + + if queue_ids is not unset: + kwargs["queue_ids"] = queue_ids + + return self._list_llm_obs_annotation_queues_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_custom_eval_configs(self, ) -> LLMObsCustomEvalConfigListResponse: + """List custom evaluator configurations. + + List all custom LLM Observability evaluator configurations for the organization. + + :rtype: LLMObsCustomEvalConfigListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_llm_obs_custom_eval_configs_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_dataset_records(self, project_id: str, dataset_id: str, *, filter_version: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> LLMObsDatasetRecordsListResponse: + """List LLM Observability dataset records. + + List all records in an LLM Observability dataset, sorted by creation date, newest first. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :param filter_version: Retrieve records from a specific dataset version. Defaults to the current version. + :type filter_version: int, optional + :param page_cursor: Use the Pagination cursor to retrieve the next page of results. + :type page_cursor: str, optional + :param page_limit: Maximum number of results to return per page. + :type page_limit: int, optional + :rtype: LLMObsDatasetRecordsListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + if filter_version is not unset: + kwargs["filter_version"] = filter_version + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_llm_obs_dataset_records_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_datasets(self, project_id: str, *, filter_name: Union[str, UnsetType]=unset, filter_id: Union[str, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> LLMObsDatasetsResponse: + """List LLM Observability datasets. + + List all LLM Observability datasets for a project, sorted by creation date, newest first. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param filter_name: Filter datasets by name. + :type filter_name: str, optional + :param filter_id: Filter datasets by dataset ID. + :type filter_id: str, optional + :param page_cursor: Use the Pagination cursor to retrieve the next page of results. + :type page_cursor: str, optional + :param page_limit: Maximum number of results to return per page. + :type page_limit: int, optional + :rtype: LLMObsDatasetsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_llm_obs_datasets_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_dataset_versions(self, project_id: str, dataset_id: str, ) -> LLMObsDatasetVersionsResponse: + """List LLM Observability dataset versions. + + List the active versions of a dataset. A version is created each time a dataset is referenced by an experiment run. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :rtype: LLMObsDatasetVersionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + return self._list_llm_obs_dataset_versions_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_experiment_events(self, experiment_id: str, *, page_limit: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> LLMObsExperimentEventsV2Response: + """List events for an LLM Observability experiment. + + Retrieve spans and experiment-level summary metrics for a given experiment with cursor-based pagination. + + :param experiment_id: The ID of the LLM Observability experiment. + :type experiment_id: str + :param page_limit: Maximum number of spans to return per page. Defaults to 5000. + :type page_limit: int, optional + :param page_cursor: Opaque cursor from a previous response to fetch the next page of results. + :type page_cursor: str, optional + :rtype: LLMObsExperimentEventsV2Response + """ + kwargs: Dict[str, Any] = {} + kwargs["experiment_id"] = experiment_id + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + return self._list_llm_obs_experiment_events_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_experiment_events_v1(self, experiment_id: str, ) -> LLMObsExperimentSpansResponse: + """List LLM Observability experiment spans (v1). **Deprecated**. + + Retrieve spans with their evaluation metrics for a given experiment. Returns spans only, with no summary metrics and no pagination. Deprecated in favor of ``ListLLMObsExperimentEventsV3``. + + :param experiment_id: The ID of the LLM Observability experiment. + :type experiment_id: str + :rtype: LLMObsExperimentSpansResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["experiment_id"] = experiment_id + + warnings.warn("list_llm_obs_experiment_events_v1 is deprecated", DeprecationWarning, stacklevel=2) + return self._list_llm_obs_experiment_events_v1_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_experiment_events_v2(self, experiment_id: str, ) -> LLMObsExperimentEventsV2Response: + """List LLM Observability experiment events (v2). **Deprecated**. + + Retrieve spans and experiment-level summary metrics for a given experiment. Returns the full events payload without pagination. Deprecated: use ``ListLLMObsExperimentEventsV3`` instead. + + :param experiment_id: The ID of the LLM Observability experiment. + :type experiment_id: str + :rtype: LLMObsExperimentEventsV2Response + """ + kwargs: Dict[str, Any] = {} + kwargs["experiment_id"] = experiment_id + + warnings.warn("list_llm_obs_experiment_events_v2 is deprecated", DeprecationWarning, stacklevel=2) + return self._list_llm_obs_experiment_events_v2_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_experiments(self, *, filter_project_id: Union[str, UnsetType]=unset, filter_dataset_id: Union[str, UnsetType]=unset, filter_id: Union[str, UnsetType]=unset, filter_name: Union[str, UnsetType]=unset, filter_experiment: Union[str, UnsetType]=unset, filter_metadata: Union[str, UnsetType]=unset, filter_parent_experiment_id: Union[str, UnsetType]=unset, filter_is_deleted: Union[bool, UnsetType]=unset, include_user_data: Union[bool, UnsetType]=unset, include_dataset_names: Union[bool, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> LLMObsExperimentsResponse: + """List LLM Observability experiments. + + List all LLM Observability experiments sorted by creation date, newest first. + + :param filter_project_id: Filter experiments by project ID. Required if ``filter[dataset_id]`` is not provided. + :type filter_project_id: str, optional + :param filter_dataset_id: Filter experiments by dataset ID. + :type filter_dataset_id: str, optional + :param filter_id: Filter experiments by experiment ID. Can be specified multiple times. + :type filter_id: str, optional + :param filter_name: Filter experiments by their exact run name. + :type filter_name: str, optional + :param filter_experiment: Filter by logical experiment name. This is the ``name`` field set when creating an experiment through ``POST /experiments``. Returns all experiment runs that share the same name, enabling cross-commit and cross-branch comparisons. + :type filter_experiment: str, optional + :param filter_metadata: Filter by JSONB metadata containment. Provide a JSON object string where + experiments whose metadata contains all specified key-value pairs are returned. + For example: ``{"commit":"abc123","branch":"main"}``. + :type filter_metadata: str, optional + :param filter_parent_experiment_id: Filter experiments by the ID of their parent (baseline) experiment. Returns all experiments that were run against the given baseline. Can be specified multiple times. + :type filter_parent_experiment_id: str, optional + :param filter_is_deleted: When ``true`` , return only soft-deleted experiments. Defaults to ``false``. + :type filter_is_deleted: bool, optional + :param include_user_data: When ``true`` , enrich each experiment with its author's user data in the ``author`` field. + :type include_user_data: bool, optional + :param include_dataset_names: When ``true`` , enrich each experiment with its dataset name in the ``dataset_name`` field. + :type include_dataset_names: bool, optional + :param page_cursor: Use the pagination cursor returned in ``meta.after`` to retrieve the next page of results. + :type page_cursor: str, optional + :param page_limit: Maximum number of results to return per page. Values above 5000 are clamped + to 5000. Defaults to 5000. + :type page_limit: int, optional + :rtype: LLMObsExperimentsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_project_id is not unset: + kwargs["filter_project_id"] = filter_project_id + + if filter_dataset_id is not unset: + kwargs["filter_dataset_id"] = filter_dataset_id + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + if filter_experiment is not unset: + kwargs["filter_experiment"] = filter_experiment + + if filter_metadata is not unset: + kwargs["filter_metadata"] = filter_metadata + + if filter_parent_experiment_id is not unset: + kwargs["filter_parent_experiment_id"] = filter_parent_experiment_id + + if filter_is_deleted is not unset: + kwargs["filter_is_deleted"] = filter_is_deleted + + if include_user_data is not unset: + kwargs["include_user_data"] = include_user_data + + if include_dataset_names is not unset: + kwargs["include_dataset_names"] = include_dataset_names + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_llm_obs_experiments_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_integration_accounts(self, integration: LLMObsIntegrationName, ) -> List[LLMObsIntegrationAccount]: + """List LLM integration accounts. + + Retrieve the list of configured accounts for the specified LLM provider integration. + + :param integration: The name of the LLM integration. + :type integration: LLMObsIntegrationName + :rtype: [LLMObsIntegrationAccount] + """ + kwargs: Dict[str, Any] = {} + kwargs["integration"] = integration + + return self._list_llm_obs_integration_accounts_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_integration_models(self, integration: LLMObsIntegrationName, account_id: str, ) -> List[LLMObsIntegrationModel]: + """List LLM integration models. + + Retrieve the list of models available for the specified LLM provider integration and account. + + :param integration: The name of the LLM integration. + :type integration: LLMObsIntegrationName + :param account_id: The ID of the integration account. + :type account_id: str + :rtype: [LLMObsIntegrationModel] + """ + kwargs: Dict[str, Any] = {} + kwargs["integration"] = integration + + kwargs["account_id"] = account_id + + return self._list_llm_obs_integration_models_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_patterns_clustered_points(self, topic_id: str, *, page_size: Union[int, UnsetType]=unset, page_token: Union[str, UnsetType]=unset, ) -> LLMObsPatternsClusteredPointsResponse: + """List patterns clustered points. + + List the data points grouped into a topic. For a parent topic, points from all + of its leaf topics are returned. + + :param topic_id: The ID of the topic to retrieve clustered points for. + :type topic_id: str + :param page_size: Maximum number of clustered points to return per page. + :type page_size: int, optional + :param page_token: Pagination token to retrieve the next page of clustered points. + :type page_token: str, optional + :rtype: LLMObsPatternsClusteredPointsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["topic_id"] = topic_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_token is not unset: + kwargs["page_token"] = page_token + + return self._list_llm_obs_patterns_clustered_points_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_patterns_configs(self, ) -> LLMObsPatternsConfigsResponse: + """List patterns configurations. + + List all patterns configurations for the organization. + + :rtype: LLMObsPatternsConfigsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_llm_obs_patterns_configs_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_patterns_runs(self, config_id: str, ) -> LLMObsPatternsRunsResponse: + """List patterns runs. + + List the completed patterns runs for a configuration. + + :param config_id: The ID of the patterns configuration. + :type config_id: str + :rtype: LLMObsPatternsRunsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["config_id"] = config_id + + return self._list_llm_obs_patterns_runs_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_patterns_topics(self, config_id: str, *, run_id: Union[str, UnsetType]=unset, ) -> LLMObsPatternsTopicsResponse: + """List patterns topics. + + List the topics discovered by a patterns run. When no run is specified, + the most recent completed run is used. + + :param config_id: The ID of the patterns configuration. + :type config_id: str + :param run_id: The ID of a specific patterns run. Defaults to the most recent completed run. + :type run_id: str, optional + :rtype: LLMObsPatternsTopicsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["config_id"] = config_id + + if run_id is not unset: + kwargs["run_id"] = run_id + + return self._list_llm_obs_patterns_topics_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_patterns_topics_with_clustered_points(self, config_id: str, *, run_id: Union[str, UnsetType]=unset, include_metrics: Union[bool, UnsetType]=unset, ) -> LLMObsPatternsTopicsWithClusteredPointsResponse: + """List patterns topics with clustered points. + + List the topics discovered by a patterns run, with the clustered points attached + inline to each leaf topic. When no run is specified, the most recent completed + run is used. + + :param config_id: The ID of the patterns configuration. + :type config_id: str + :param run_id: The ID of a specific patterns run. Defaults to the most recent completed run. + :type run_id: str, optional + :param include_metrics: When true, enrich each clustered point with span metrics such as status, + duration, token counts, estimated cost, and evaluations. + :type include_metrics: bool, optional + :rtype: LLMObsPatternsTopicsWithClusteredPointsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["config_id"] = config_id + + if run_id is not unset: + kwargs["run_id"] = run_id + + if include_metrics is not unset: + kwargs["include_metrics"] = include_metrics + + return self._list_llm_obs_patterns_topics_with_clustered_points_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_projects(self, *, filter_id: Union[str, UnsetType]=unset, filter_name: Union[str, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> LLMObsProjectsResponse: + """List LLM Observability projects. + + List all LLM Observability projects sorted by creation date, newest first. + + :param filter_id: Filter projects by project ID. + :type filter_id: str, optional + :param filter_name: Filter projects by name. + :type filter_name: str, optional + :param page_cursor: Use the Pagination cursor to retrieve the next page of results. + :type page_cursor: str, optional + :param page_limit: Maximum number of results to return per page. + :type page_limit: int, optional + :rtype: LLMObsProjectsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_llm_obs_projects_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_prompts(self, *, filter_prompt_id: Union[str, UnsetType]=unset, ) -> LLMObsPromptsResponse: + """List LLM Observability prompts. + + List all LLM Observability prompts in the prompt registry for the organization. + + :param filter_prompt_id: Optional filter for prompts by prompt ID. + :type filter_prompt_id: str, optional + :rtype: LLMObsPromptsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_prompt_id is not unset: + kwargs["filter_prompt_id"] = filter_prompt_id + + return self._list_llm_obs_prompts_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_prompt_versions(self, prompt_id: str, ) -> LLMObsPromptVersionsResponse: + """List versions of an LLM Observability prompt. + + List all versions of an LLM Observability prompt, ordered newest to oldest. If the prompt does not exist, is not registered, or is archived, the response contains an empty list. + + :param prompt_id: The customer-provided identifier of the LLM Observability prompt. + :type prompt_id: str + :rtype: LLMObsPromptVersionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["prompt_id"] = prompt_id + + return self._list_llm_obs_prompt_versions_endpoint.call_with_http_info(**kwargs) + + def list_llm_obs_spans(self, *, filter_from: Union[str, UnsetType]=unset, filter_to: Union[str, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, filter_span_id: Union[str, UnsetType]=unset, filter_trace_id: Union[str, UnsetType]=unset, filter_span_kind: Union[str, UnsetType]=unset, filter_span_name: Union[str, UnsetType]=unset, filter_ml_app: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, include_attachments: Union[bool, UnsetType]=unset, ) -> LLMObsSpansResponse: + """List LLM Observability spans. + + List LLM Observability spans matching the specified filters. + + :param filter_from: Start of the time range. Accepts ISO 8601 or relative format (e.g., ``now-15m`` ). Defaults to ``now-15m``. + :type filter_from: str, optional + :param filter_to: End of the time range. Accepts ISO 8601 or relative format. Defaults to ``now``. + :type filter_to: str, optional + :param filter_query: Search query using LLM Observability query syntax. Supports attribute filters using the field:value syntax (e.g. session_id, trace_id, ml_app, meta.span.kind). When provided, structured field filters ( ``filter[span_id]`` , ``filter[trace_id]`` , etc.) are ignored. + :type filter_query: str, optional + :param filter_span_id: Filter by exact span ID. + :type filter_span_id: str, optional + :param filter_trace_id: Filter by exact trace ID. + :type filter_trace_id: str, optional + :param filter_span_kind: Filter by span kind (e.g., llm, agent, tool, task, workflow). + :type filter_span_kind: str, optional + :param filter_span_name: Filter by span name. + :type filter_span_name: str, optional + :param filter_ml_app: Filter by ML application name. + :type filter_ml_app: str, optional + :param page_limit: Maximum number of spans to return. Defaults to ``10``. + :type page_limit: int, optional + :param page_cursor: Cursor from the previous response to retrieve the next page. + :type page_cursor: str, optional + :param sort: Sort order for the results. + :type sort: str, optional + :param include_attachments: Whether to include attachment data in the response. Defaults to ``true``. + :type include_attachments: bool, optional + :rtype: LLMObsSpansResponse + """ + kwargs: Dict[str, Any] = {} + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_span_id is not unset: + kwargs["filter_span_id"] = filter_span_id + + if filter_trace_id is not unset: + kwargs["filter_trace_id"] = filter_trace_id + + if filter_span_kind is not unset: + kwargs["filter_span_kind"] = filter_span_kind + + if filter_span_name is not unset: + kwargs["filter_span_name"] = filter_span_name + + if filter_ml_app is not unset: + kwargs["filter_ml_app"] = filter_ml_app + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if sort is not unset: + kwargs["sort"] = sort + + if include_attachments is not unset: + kwargs["include_attachments"] = include_attachments + + return self._list_llm_obs_spans_endpoint.call_with_http_info(**kwargs) + + def lock_llm_obs_dataset_draft_state(self, project_id: str, dataset_id: str, ) -> LLMObsDatasetDraftStateResponse: + """Lock LLM Observability dataset draft state. + + Acquire the draft lock on a dataset for the calling user. The lock prevents other users from concurrently editing the dataset draft. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :rtype: LLMObsDatasetDraftStateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + return self._lock_llm_obs_dataset_draft_state_endpoint.call_with_http_info(**kwargs) + + def restore_llm_obs_dataset_version(self, project_id: str, dataset_id: str, body: LLMObsDatasetRestoreVersionRequest, ) -> None: + """Restore an LLM Observability dataset version. + + Restore a dataset to a previous version. The dataset's current version is bumped, and its records are replaced with the records from the specified prior version. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :param body: Restore dataset version payload. + :type body: LLMObsDatasetRestoreVersionRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + kwargs["body"] = body + + return self._restore_llm_obs_dataset_version_endpoint.call_with_http_info(**kwargs) + + def search_llm_obs_experimentation(self, body: LLMObsExperimentationSearchRequest, ) -> LLMObsExperimentationSearchResponse: + """Search LLM Observability experimentation entities. + + Search across LLM Observability experimentation entities — projects, datasets, dataset records, experiments, and experiment runs — using cursor-based pagination. + + The ``filter.scope`` field controls which entity types are returned. At least one valid scope must be provided. + + Returns ``200 OK`` when all results fit in a single page. Returns ``206 Partial Content`` with a cursor in ``meta.after`` when additional pages are available. + + :param body: Experimentation search payload. + :type body: LLMObsExperimentationSearchRequest + :rtype: LLMObsExperimentationSearchResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._search_llm_obs_experimentation_endpoint.call_with_http_info(**kwargs) + + def search_llm_obs_spans(self, body: LLMObsSearchSpansRequest, ) -> LLMObsSpansResponse: + """Search LLM Observability spans. + + Search LLM Observability spans using structured filters in the request body. + + :param body: Search spans payload. + :type body: LLMObsSearchSpansRequest + :rtype: LLMObsSpansResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._search_llm_obs_spans_endpoint.call_with_http_info(**kwargs) + + def simple_search_llm_obs_experimentation(self, body: LLMObsExperimentationSimpleSearchRequest, ) -> LLMObsExperimentationSimpleSearchResponse: + """Simple search experimentation entities. + + Search across LLM Observability experimentation entities using offset-based (page-number) pagination. + Use this endpoint when you need total page count or want to navigate to a specific page number. + + The ``filter.scope`` field controls which entity types are returned. At least one valid scope must be provided. + + :param body: Simple search payload. + :type body: LLMObsExperimentationSimpleSearchRequest + :rtype: LLMObsExperimentationSimpleSearchResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._simple_search_llm_obs_experimentation_endpoint.call_with_http_info(**kwargs) + + def trigger_llm_obs_patterns(self, body: LLMObsPatternsTriggerRequest, ) -> LLMObsPatternsTriggerResponse: + """Trigger a patterns run. + + Start a patterns run for a given configuration. The run executes asynchronously. + + :param body: Trigger patterns payload. + :type body: LLMObsPatternsTriggerRequest + :rtype: LLMObsPatternsTriggerResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._trigger_llm_obs_patterns_endpoint.call_with_http_info(**kwargs) + + def unlock_llm_obs_dataset_draft_state(self, project_id: str, dataset_id: str, ) -> None: + """Unlock LLM Observability dataset draft state. + + Release the draft lock on a dataset held by the calling user, allowing other users to edit the dataset draft. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + return self._unlock_llm_obs_dataset_draft_state_endpoint.call_with_http_info(**kwargs) + + def update_llm_obs_annotation_queue(self, queue_id: str, body: LLMObsAnnotationQueueUpdateRequest, ) -> LLMObsAnnotationQueueResponse: + """Update an LLM Observability annotation queue. + + Partially update an annotation queue. The ``name`` , ``description`` , and ``annotation_schema`` fields can be updated. + + :param queue_id: The ID of the LLM Observability annotation queue. + :type queue_id: str + :param body: Update annotation queue payload. + :type body: LLMObsAnnotationQueueUpdateRequest + :rtype: LLMObsAnnotationQueueResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["queue_id"] = queue_id + + kwargs["body"] = body + + return self._update_llm_obs_annotation_queue_endpoint.call_with_http_info(**kwargs) + + def update_llm_obs_annotation_queue_label_schema(self, queue_id: str, body: LLMObsAnnotationQueueLabelSchemaUpdateRequest, ) -> LLMObsAnnotationQueueLabelSchemaResponse: + """Update annotation queue label schema. + + Create or replace the label schema for a given annotation queue. + The label schema defines the labels annotators can apply to interactions in the queue. + Label names must be unique within the queue and match the pattern ``^[a-zA-Z0-9_-]+$``. + Each label must have a valid type: score, categorical, boolean, or text. + + :param queue_id: The ID of the LLM Observability annotation queue. + :type queue_id: str + :param body: Update label schema payload. + :type body: LLMObsAnnotationQueueLabelSchemaUpdateRequest + :rtype: LLMObsAnnotationQueueLabelSchemaResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["queue_id"] = queue_id + + kwargs["body"] = body + + return self._update_llm_obs_annotation_queue_label_schema_endpoint.call_with_http_info(**kwargs) + + def update_llm_obs_custom_eval_config(self, eval_name: str, body: LLMObsCustomEvalConfigUpdateRequest, ) -> None: + """Create or update a custom evaluator configuration. + + Create or update a custom LLM Observability evaluator configuration by its name. + + :param eval_name: The name of the custom LLM Observability evaluator configuration. + :type eval_name: str + :param body: Custom evaluator configuration payload. + :type body: LLMObsCustomEvalConfigUpdateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["eval_name"] = eval_name + + kwargs["body"] = body + + return self._update_llm_obs_custom_eval_config_endpoint.call_with_http_info(**kwargs) + + def update_llm_obs_dataset(self, project_id: str, dataset_id: str, body: LLMObsDatasetUpdateRequest, ) -> LLMObsDatasetResponse: + """Update an LLM Observability dataset. + + Partially update an existing LLM Observability dataset within the specified project. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :param body: Update dataset payload. + :type body: LLMObsDatasetUpdateRequest + :rtype: LLMObsDatasetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + kwargs["body"] = body + + return self._update_llm_obs_dataset_endpoint.call_with_http_info(**kwargs) + + def update_llm_obs_dataset_records(self, project_id: str, dataset_id: str, body: LLMObsDatasetRecordsUpdateRequest, ) -> LLMObsDatasetRecordsMutationResponse: + """Update LLM Observability dataset records. + + Update one or more existing records in an LLM Observability dataset. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :param body: Update records payload. + :type body: LLMObsDatasetRecordsUpdateRequest + :rtype: LLMObsDatasetRecordsMutationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + kwargs["body"] = body + + return self._update_llm_obs_dataset_records_endpoint.call_with_http_info(**kwargs) + + def update_llm_obs_experiment(self, experiment_id: str, body: LLMObsExperimentUpdateRequest, ) -> LLMObsExperimentResponse: + """Update an LLM Observability experiment. + + Partially update an existing LLM Observability experiment. + + :param experiment_id: The ID of the LLM Observability experiment. + :type experiment_id: str + :param body: Update experiment payload. + :type body: LLMObsExperimentUpdateRequest + :rtype: LLMObsExperimentResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["experiment_id"] = experiment_id + + kwargs["body"] = body + + return self._update_llm_obs_experiment_endpoint.call_with_http_info(**kwargs) + + def update_llm_obs_project(self, project_id: str, body: LLMObsProjectUpdateRequest, ) -> LLMObsProjectResponse: + """Update an LLM Observability project. + + Partially update an existing LLM Observability project. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param body: Update project payload. + :type body: LLMObsProjectUpdateRequest + :rtype: LLMObsProjectResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["body"] = body + + return self._update_llm_obs_project_endpoint.call_with_http_info(**kwargs) + + def update_llm_obs_prompt(self, prompt_id: str, body: LLMObsUpdatePromptRequest, ) -> LLMObsPromptResponse: + """Update an LLM Observability prompt. + + Update the title, the description, or both, for an LLM Observability prompt. + + :param prompt_id: The customer-provided identifier of the LLM Observability prompt. + :type prompt_id: str + :param body: Update prompt payload. + :type body: LLMObsUpdatePromptRequest + :rtype: LLMObsPromptResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["prompt_id"] = prompt_id + + kwargs["body"] = body + + return self._update_llm_obs_prompt_endpoint.call_with_http_info(**kwargs) + + def update_llm_obs_prompt_version(self, prompt_id: str, version: int, body: LLMObsUpdatePromptVersionRequest, ) -> LLMObsPromptVersionResponse: + """Update a specific LLM Observability prompt version. + + Update the description, the feature-flag environments, or both, for a specific version of an LLM Observability prompt. + + :param prompt_id: The customer-provided identifier of the LLM Observability prompt. + :type prompt_id: str + :param version: The version number of the LLM Observability prompt. + :type version: int + :param body: Update prompt version payload. + :type body: LLMObsUpdatePromptVersionRequest + :rtype: LLMObsPromptVersionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["prompt_id"] = prompt_id + + kwargs["version"] = version + + kwargs["body"] = body + + return self._update_llm_obs_prompt_version_endpoint.call_with_http_info(**kwargs) + + def upload_llm_obs_dataset_records_file(self, project_id: str, dataset_id: str, *, deduplicate: Union[bool, UnsetType]=unset, overwrite: Union[bool, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, include_user_data: Union[bool, UnsetType]=unset, file: Union[file_type, UnsetType]=unset, ) -> None: + """Upload records to an LLM Observability dataset. + + Upload records to a dataset from a file. The request is a ``multipart/form-data`` upload containing a single ``file`` part. + Currently only CSV is supported. The CSV must include an ``input`` column. Optional columns are ``id`` , ``expected_output`` , ``metadata`` , and ``tags``. + + The response is a Server-Sent Events stream ( ``text/event-stream`` ) emitting progress updates while records are processed. The stream emits the following named events: + + * ``progress`` : incremental record counts written so far. + * ``completed`` : terminal event with a JSON body containing ``records_created``. + * ``error`` : terminal event with a JSON body containing an error ``message``. + + :param project_id: The ID of the LLM Observability project. + :type project_id: str + :param dataset_id: The ID of the LLM Observability dataset. + :type dataset_id: str + :param deduplicate: Whether to skip records whose ``input`` already exists in the dataset. Defaults to ``false``. + :type deduplicate: bool, optional + :param overwrite: Whether to overwrite existing records that share the same user-provided ``id``. Defaults to ``true``. + :type overwrite: bool, optional + :param tags: Tags to apply to every uploaded record, in addition to any tags defined on individual rows. Can be repeated, e.g. ``tags=env:prod&tags=team:ai``. + :type tags: [str], optional + :param include_user_data: Whether to enrich the response with user metadata. + :type include_user_data: bool, optional + :param file: The records file to upload. Currently only CSV is supported. The file must include an ``input`` column. Optional columns include ``id`` , ``expected_output`` , ``metadata`` , and ``tags``. + :type file: file_type, optional + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["dataset_id"] = dataset_id + + if deduplicate is not unset: + kwargs["deduplicate"] = deduplicate + + if overwrite is not unset: + kwargs["overwrite"] = overwrite + + if tags is not unset: + kwargs["tags"] = tags + + if include_user_data is not unset: + kwargs["include_user_data"] = include_user_data + + if file is not unset: + kwargs["file"] = file + + return self._upload_llm_obs_dataset_records_file_endpoint.call_with_http_info(**kwargs) + + def upsert_llm_obs_annotations(self, queue_id: str, body: LLMObsAnnotationsRequest, ) -> LLMObsAnnotationsResponse: + """Create or update annotations. + + Create or update annotations on interactions in a queue. Each annotation is matched + by ``interaction_id`` and the requesting user's identity. + Results and errors in the response are linked to request items by ``interaction_id``. + Errors for individual items are returned in the ``errors`` field without blocking the rest of the batch. + + :param queue_id: The ID of the LLM Observability annotation queue. + :type queue_id: str + :param body: Payload for creating or updating annotations. + :type body: LLMObsAnnotationsRequest + :rtype: LLMObsAnnotationsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["queue_id"] = queue_id + + kwargs["body"] = body + + return self._upsert_llm_obs_annotations_endpoint.call_with_http_info(**kwargs) + + def upsert_llm_obs_patterns_config(self, body: LLMObsPatternsConfigUpsertRequest, ) -> LLMObsPatternsConfigResponse: + """Create or update a patterns configuration. + + Create a new patterns configuration, or update an existing one when a configuration ID is provided. + + :param body: Patterns configuration payload. + :type body: LLMObsPatternsConfigUpsertRequest + :rtype: LLMObsPatternsConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._upsert_llm_obs_patterns_config_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/logs_api.py b/datadog_api_client/v2/api/logs_api.py new file mode 100644 index 0000000000..44f8f6a356 --- /dev/null +++ b/datadog_api_client/v2/api/logs_api.py @@ -0,0 +1,466 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.content_encoding import ContentEncoding +from datadog_api_client.v2.model.http_log import HTTPLog +from datadog_api_client.v2.model.http_log_item import HTTPLogItem +from datadog_api_client.v2.model.logs_aggregate_response import LogsAggregateResponse +from datadog_api_client.v2.model.logs_aggregate_request import LogsAggregateRequest +from datadog_api_client.v2.model.logs_list_response import LogsListResponse +from datadog_api_client.v2.model.logs_storage_tier import LogsStorageTier +from datadog_api_client.v2.model.logs_sort import LogsSort +from datadog_api_client.v2.model.log import Log +from datadog_api_client.v2.model.logs_list_request import LogsListRequest + + +class LogsApi: + """ + Search your logs and send them to your Datadog platform over HTTP. See the `Log Management page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._aggregate_logs_endpoint = _Endpoint( + settings={ + "response_type": (LogsAggregateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/analytics/aggregate", + "operation_id": "aggregate_logs", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LogsAggregateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_logs_endpoint = _Endpoint( + settings={ + "response_type": (LogsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/events/search", + "operation_id": "list_logs", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "openapi_types": (LogsListRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_logs_get_endpoint = _Endpoint( + settings={ + "response_type": (LogsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/events", + "operation_id": "list_logs_get", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_indexes": { + "openapi_types": ([str],), + "attribute": "filter[indexes]", + "location": "query", + "collection_format": "csv", + }, + "filter_from": { + "openapi_types": (datetime,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (datetime,), + "attribute": "filter[to]", + "location": "query", + }, + "filter_storage_tier": { + "openapi_types": (LogsStorageTier,), + "attribute": "filter[storage_tier]", + "location": "query", + }, + "sort": { + "openapi_types": (LogsSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._submit_log_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v2/logs", + "operation_id": "submit_log", + "http_method": "POST", + "version": "v2", + "servers": [ + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "The regional site for customers.", + "default_value": "datadoghq.com", + "enum_values": [ + "datadoghq.com", + "us3.datadoghq.com", + "us5.datadoghq.com", + "ap1.datadoghq.com", + "ap2.datadoghq.com", + "uk1.datadoghq.com", + "datadoghq.eu", + "ddog-gov.com", + "us2.ddog-gov.com", + ], + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "http-intake.logs", + }, + }, + }, + { + "url": "{protocol}://{name}", + "variables": { + "name": { + "description": "Full site DNS name.", + "default_value": "http-intake.logs.datadoghq.com", + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "Any Datadog deployment.", + "default_value": "datadoghq.com", + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "http-intake.logs", + }, + }, + }, + ], + }, + params_map={ + "content_encoding": { + "openapi_types": (ContentEncoding,), + "attribute": "Content-Encoding", + "location": "header", + }, + "ddtags": { + "openapi_types": (str,), + "attribute": "ddtags", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (HTTPLog,), + "location": "body", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json", "application/logplex-1", "text/plain"] + }, + api_client=api_client, + ) + + def aggregate_logs(self, body: LogsAggregateRequest, ) -> LogsAggregateResponse: + """Aggregate events. + + The API endpoint to aggregate events into buckets and compute metrics and timeseries. + + :type body: LogsAggregateRequest + :rtype: LogsAggregateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._aggregate_logs_endpoint.call_with_http_info(**kwargs) + + def list_logs(self, *, body: Union[LogsListRequest, UnsetType]=unset, ) -> LogsListResponse: + """Search logs (POST). + + List endpoint returns logs that match a log search query. + `Results are paginated `_. + + Use this endpoint to search and filter your logs. + + If you are considering archiving logs for your organization, + consider use of the Datadog archive capabilities instead of the log list API. + See `Datadog Logs Archive documentation `_. + + :type body: LogsListRequest, optional + :rtype: LogsListResponse + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + return self._list_logs_endpoint.call_with_http_info(**kwargs) + + def list_logs_with_pagination(self, *, body: Union[LogsListRequest, UnsetType]=unset, ) -> collections.abc.Iterable[Log]: + """Search logs (POST). + + Provide a paginated version of :meth:`list_logs`, returning all items. + + :type body: LogsListRequest, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[Log] + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.page.limit", 10) + endpoint = self._list_logs_endpoint + set_attribute_from_path(kwargs, "body.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.page.cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_logs_get(self, *, filter_query: Union[str, UnsetType]=unset, filter_indexes: Union[List[str], UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, filter_storage_tier: Union[LogsStorageTier, UnsetType]=unset, sort: Union[LogsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> LogsListResponse: + """Search logs (GET). + + List endpoint returns logs that match a log search query. + `Results are paginated `_. + + Use this endpoint to search and filter your logs. + + If you are considering archiving logs for your organization, + consider use of the Datadog archive capabilities instead of the log list API. + See `Datadog Logs Archive documentation `_. + + :param filter_query: Search query following logs syntax. + :type filter_query: str, optional + :param filter_indexes: For customers with multiple indexes, the indexes to search. + Defaults to '*' which means all indexes + :type filter_indexes: [str], optional + :param filter_from: Minimum timestamp for requested logs. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested logs. + :type filter_to: datetime, optional + :param filter_storage_tier: Specifies the storage type to be used + :type filter_storage_tier: LogsStorageTier, optional + :param sort: Order of logs in results. + :type sort: LogsSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of logs in the response. + :type page_limit: int, optional + :rtype: LogsListResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_indexes is not unset: + kwargs["filter_indexes"] = filter_indexes + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if filter_storage_tier is not unset: + kwargs["filter_storage_tier"] = filter_storage_tier + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_logs_get_endpoint.call_with_http_info(**kwargs) + + def list_logs_get_with_pagination(self, *, filter_query: Union[str, UnsetType]=unset, filter_indexes: Union[List[str], UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, filter_storage_tier: Union[LogsStorageTier, UnsetType]=unset, sort: Union[LogsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[Log]: + """Search logs (GET). + + Provide a paginated version of :meth:`list_logs_get`, returning all items. + + :param filter_query: Search query following logs syntax. + :type filter_query: str, optional + :param filter_indexes: For customers with multiple indexes, the indexes to search. + Defaults to '*' which means all indexes + :type filter_indexes: [str], optional + :param filter_from: Minimum timestamp for requested logs. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested logs. + :type filter_to: datetime, optional + :param filter_storage_tier: Specifies the storage type to be used + :type filter_storage_tier: LogsStorageTier, optional + :param sort: Order of logs in results. + :type sort: LogsSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of logs in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[Log] + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_indexes is not unset: + kwargs["filter_indexes"] = filter_indexes + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if filter_storage_tier is not unset: + kwargs["filter_storage_tier"] = filter_storage_tier + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_logs_get_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def submit_log(self, body: HTTPLog, *, content_encoding: Union[ContentEncoding, UnsetType]=unset, ddtags: Union[str, UnsetType]=unset, ) -> dict: + """Send logs. + + Send your logs to your Datadog platform over HTTP. Limits per HTTP request are: + + * Maximum content size per payload (uncompressed): 5MB + * Maximum size for a single log: 1MB + * Maximum array size if sending multiple logs in an array: 1000 entries + + Any log exceeding 1MB is accepted and truncated by Datadog: + + * For a single log request, the API truncates the log at 1MB and returns a 2xx. + * For a multi-logs request, the API processes all logs, truncates only logs larger than 1MB, and returns a 2xx. + + Datadog recommends sending your logs compressed. + Add the ``Content-Encoding: gzip`` header to the request when sending compressed logs. + Log events can be submitted with a timestamp that is up to 18 hours in the past. + + The status codes answered by the HTTP API are: + + * 202: Accepted: the request has been accepted for processing + * 400: Bad request (likely an issue in the payload formatting) + * 401: Unauthorized (likely a missing API Key) + * 403: Permission issue (likely using an invalid API Key) + * 408: Request Timeout, request should be retried after some time + * 413: Payload too large (batch is above 5MB uncompressed) + * 429: Too Many Requests, request should be retried after some time + * 500: Internal Server Error, the server encountered an unexpected condition that prevented it from fulfilling the request, request should be retried after some time + * 503: Service Unavailable, the server is not ready to handle the request probably because it is overloaded, request should be retried after some time + + :param body: Log to send (JSON format). + :type body: HTTPLog + :param content_encoding: HTTP header used to compress the media-type. + :type content_encoding: ContentEncoding, optional + :param ddtags: Log tags can be passed as query parameters with ``text/plain`` content type. + :type ddtags: str, optional + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + if content_encoding is not unset: + kwargs["content_encoding"] = content_encoding + + if ddtags is not unset: + kwargs["ddtags"] = ddtags + + kwargs["body"] = body + + return self._submit_log_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/logs_archives_api.py b/datadog_api_client/v2/api/logs_archives_api.py new file mode 100644 index 0000000000..4261edadba --- /dev/null +++ b/datadog_api_client/v2/api/logs_archives_api.py @@ -0,0 +1,427 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.logs_archive_order import LogsArchiveOrder +from datadog_api_client.v2.model.logs_archives import LogsArchives +from datadog_api_client.v2.model.logs_archive import LogsArchive +from datadog_api_client.v2.model.logs_archive_create_request import LogsArchiveCreateRequest +from datadog_api_client.v2.model.relationship_to_role import RelationshipToRole +from datadog_api_client.v2.model.roles_response import RolesResponse + + +class LogsArchivesApi: + """ + Archives forward all the logs ingested to a cloud storage system. + + See the `Archives Page `_ + for a list of the archives currently configured in Datadog. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._add_read_role_to_archive_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archives/{archive_id}/readers", + "operation_id": "add_read_role_to_archive", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "archive_id": { + "required": True, + "openapi_types": (str,), + "attribute": "archive_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RelationshipToRole,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_logs_archive_endpoint = _Endpoint( + settings={ + "response_type": (LogsArchive,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archives", + "operation_id": "create_logs_archive", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LogsArchiveCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_logs_archive_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archives/{archive_id}", + "operation_id": "delete_logs_archive", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "archive_id": { + "required": True, + "openapi_types": (str,), + "attribute": "archive_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_logs_archive_endpoint = _Endpoint( + settings={ + "response_type": (LogsArchive,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archives/{archive_id}", + "operation_id": "get_logs_archive", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "archive_id": { + "required": True, + "openapi_types": (str,), + "attribute": "archive_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_logs_archive_order_endpoint = _Endpoint( + settings={ + "response_type": (LogsArchiveOrder,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archive-order", + "operation_id": "get_logs_archive_order", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_archive_read_roles_endpoint = _Endpoint( + settings={ + "response_type": (RolesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archives/{archive_id}/readers", + "operation_id": "list_archive_read_roles", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "archive_id": { + "required": True, + "openapi_types": (str,), + "attribute": "archive_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_logs_archives_endpoint = _Endpoint( + settings={ + "response_type": (LogsArchives,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archives", + "operation_id": "list_logs_archives", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._remove_role_from_archive_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archives/{archive_id}/readers", + "operation_id": "remove_role_from_archive", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "archive_id": { + "required": True, + "openapi_types": (str,), + "attribute": "archive_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RelationshipToRole,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_logs_archive_endpoint = _Endpoint( + settings={ + "response_type": (LogsArchive,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archives/{archive_id}", + "operation_id": "update_logs_archive", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "archive_id": { + "required": True, + "openapi_types": (str,), + "attribute": "archive_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LogsArchiveCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_logs_archive_order_endpoint = _Endpoint( + settings={ + "response_type": (LogsArchiveOrder,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/archive-order", + "operation_id": "update_logs_archive_order", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LogsArchiveOrder,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def add_read_role_to_archive(self, archive_id: str, body: RelationshipToRole, ) -> None: + """Grant role to an archive. + + Adds a read role to an archive. ( `Roles API `_ ) + + :param archive_id: The ID of the archive. + :type archive_id: str + :type body: RelationshipToRole + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["archive_id"] = archive_id + + kwargs["body"] = body + + return self._add_read_role_to_archive_endpoint.call_with_http_info(**kwargs) + + def create_logs_archive(self, body: LogsArchiveCreateRequest, ) -> LogsArchive: + """Create an archive. + + Create an archive in your organization. + + :param body: The definition of the new archive. + :type body: LogsArchiveCreateRequest + :rtype: LogsArchive + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_logs_archive_endpoint.call_with_http_info(**kwargs) + + def delete_logs_archive(self, archive_id: str, ) -> None: + """Delete an archive. + + Delete a given archive from your organization. + + :param archive_id: The ID of the archive. + :type archive_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["archive_id"] = archive_id + + return self._delete_logs_archive_endpoint.call_with_http_info(**kwargs) + + def get_logs_archive(self, archive_id: str, ) -> LogsArchive: + """Get an archive. + + Get a specific archive from your organization. + + :param archive_id: The ID of the archive. + :type archive_id: str + :rtype: LogsArchive + """ + kwargs: Dict[str, Any] = {} + kwargs["archive_id"] = archive_id + + return self._get_logs_archive_endpoint.call_with_http_info(**kwargs) + + def get_logs_archive_order(self, ) -> LogsArchiveOrder: + """Get archive order. + + Get the current order of your archives. + This endpoint takes no JSON arguments. + + :rtype: LogsArchiveOrder + """ + kwargs: Dict[str, Any] = {} + return self._get_logs_archive_order_endpoint.call_with_http_info(**kwargs) + + def list_archive_read_roles(self, archive_id: str, ) -> RolesResponse: + """List read roles for an archive. + + Returns all read roles a given archive is restricted to. + + :param archive_id: The ID of the archive. + :type archive_id: str + :rtype: RolesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["archive_id"] = archive_id + + return self._list_archive_read_roles_endpoint.call_with_http_info(**kwargs) + + def list_logs_archives(self, ) -> LogsArchives: + """Get all archives. + + Get the list of configured logs archives with their definitions. + + :rtype: LogsArchives + """ + kwargs: Dict[str, Any] = {} + return self._list_logs_archives_endpoint.call_with_http_info(**kwargs) + + def remove_role_from_archive(self, archive_id: str, body: RelationshipToRole, ) -> None: + """Revoke role from an archive. + + Removes a role from an archive. ( `Roles API `_ ) + + :param archive_id: The ID of the archive. + :type archive_id: str + :type body: RelationshipToRole + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["archive_id"] = archive_id + + kwargs["body"] = body + + return self._remove_role_from_archive_endpoint.call_with_http_info(**kwargs) + + def update_logs_archive(self, archive_id: str, body: LogsArchiveCreateRequest, ) -> LogsArchive: + """Update an archive. + + Update a given archive configuration. + + **Note** : Using this method updates your archive configuration by **replacing** + your current configuration with the new one sent to your Datadog organization. + + :param archive_id: The ID of the archive. + :type archive_id: str + :param body: New definition of the archive. + :type body: LogsArchiveCreateRequest + :rtype: LogsArchive + """ + kwargs: Dict[str, Any] = {} + kwargs["archive_id"] = archive_id + + kwargs["body"] = body + + return self._update_logs_archive_endpoint.call_with_http_info(**kwargs) + + def update_logs_archive_order(self, body: LogsArchiveOrder, ) -> LogsArchiveOrder: + """Update archive order. + + Update the order of your archives. Since logs are processed sequentially, reordering an archive may change + the structure and content of the data processed by other archives. + + **Note** : Using the ``PUT`` method updates your archive's order by replacing the current order + with the new one. + + :param body: An object containing the new ordered list of archive IDs. + :type body: LogsArchiveOrder + :rtype: LogsArchiveOrder + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_logs_archive_order_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/logs_custom_destinations_api.py b/datadog_api_client/v2/api/logs_custom_destinations_api.py new file mode 100644 index 0000000000..f00bf344f8 --- /dev/null +++ b/datadog_api_client/v2/api/logs_custom_destinations_api.py @@ -0,0 +1,226 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.custom_destinations_response import CustomDestinationsResponse +from datadog_api_client.v2.model.custom_destination_response import CustomDestinationResponse +from datadog_api_client.v2.model.custom_destination_create_request import CustomDestinationCreateRequest +from datadog_api_client.v2.model.custom_destination_update_request import CustomDestinationUpdateRequest + + +class LogsCustomDestinationsApi: + """ + Custom Destinations forward all the logs ingested to an external destination. + + **Note** : Log forwarding is not available for the Government (US1-FED) site. Contact your account representative for more information. + + See the `Custom Destinations Page `_ + for a list of the custom destinations currently configured in web UI. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_logs_custom_destination_endpoint = _Endpoint( + settings={ + "response_type": (CustomDestinationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/custom-destinations", + "operation_id": "create_logs_custom_destination", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CustomDestinationCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_logs_custom_destination_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}", + "operation_id": "delete_logs_custom_destination", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "custom_destination_id": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_destination_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_logs_custom_destination_endpoint = _Endpoint( + settings={ + "response_type": (CustomDestinationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}", + "operation_id": "get_logs_custom_destination", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "custom_destination_id": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_destination_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_logs_custom_destinations_endpoint = _Endpoint( + settings={ + "response_type": (CustomDestinationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/custom-destinations", + "operation_id": "list_logs_custom_destinations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_logs_custom_destination_endpoint = _Endpoint( + settings={ + "response_type": (CustomDestinationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}", + "operation_id": "update_logs_custom_destination", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "custom_destination_id": { + "required": True, + "openapi_types": (str,), + "attribute": "custom_destination_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CustomDestinationUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_logs_custom_destination(self, body: CustomDestinationCreateRequest, ) -> CustomDestinationResponse: + """Create a custom destination. + + Create a custom destination in your organization. + + :param body: The definition of the new custom destination. + :type body: CustomDestinationCreateRequest + :rtype: CustomDestinationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_logs_custom_destination_endpoint.call_with_http_info(**kwargs) + + def delete_logs_custom_destination(self, custom_destination_id: str, ) -> None: + """Delete a custom destination. + + Delete a specific custom destination in your organization. + + :param custom_destination_id: The ID of the custom destination. + :type custom_destination_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["custom_destination_id"] = custom_destination_id + + return self._delete_logs_custom_destination_endpoint.call_with_http_info(**kwargs) + + def get_logs_custom_destination(self, custom_destination_id: str, ) -> CustomDestinationResponse: + """Get a custom destination. + + Get a specific custom destination in your organization. + + :param custom_destination_id: The ID of the custom destination. + :type custom_destination_id: str + :rtype: CustomDestinationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["custom_destination_id"] = custom_destination_id + + return self._get_logs_custom_destination_endpoint.call_with_http_info(**kwargs) + + def list_logs_custom_destinations(self, ) -> CustomDestinationsResponse: + """Get all custom destinations. + + Get the list of configured custom destinations in your organization with their definitions. + + :rtype: CustomDestinationsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_logs_custom_destinations_endpoint.call_with_http_info(**kwargs) + + def update_logs_custom_destination(self, custom_destination_id: str, body: CustomDestinationUpdateRequest, ) -> CustomDestinationResponse: + """Update a custom destination. + + Update the given fields of a specific custom destination in your organization. + + :param custom_destination_id: The ID of the custom destination. + :type custom_destination_id: str + :param body: New definition of the custom destination's fields. + :type body: CustomDestinationUpdateRequest + :rtype: CustomDestinationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["custom_destination_id"] = custom_destination_id + + kwargs["body"] = body + + return self._update_logs_custom_destination_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/logs_metrics_api.py b/datadog_api_client/v2/api/logs_metrics_api.py new file mode 100644 index 0000000000..7207592ab1 --- /dev/null +++ b/datadog_api_client/v2/api/logs_metrics_api.py @@ -0,0 +1,223 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.logs_metrics_response import LogsMetricsResponse +from datadog_api_client.v2.model.logs_metric_response import LogsMetricResponse +from datadog_api_client.v2.model.logs_metric_create_request import LogsMetricCreateRequest +from datadog_api_client.v2.model.logs_metric_update_request import LogsMetricUpdateRequest + + +class LogsMetricsApi: + """ + Manage configuration of `log-based metrics `_ for your organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_logs_metric_endpoint = _Endpoint( + settings={ + "response_type": (LogsMetricResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/metrics", + "operation_id": "create_logs_metric", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (LogsMetricCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_logs_metric_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/metrics/{metric_id}", + "operation_id": "delete_logs_metric", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "metric_id": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_logs_metric_endpoint = _Endpoint( + settings={ + "response_type": (LogsMetricResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/metrics/{metric_id}", + "operation_id": "get_logs_metric", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_id": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_logs_metrics_endpoint = _Endpoint( + settings={ + "response_type": (LogsMetricsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/metrics", + "operation_id": "list_logs_metrics", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_logs_metric_endpoint = _Endpoint( + settings={ + "response_type": (LogsMetricResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/metrics/{metric_id}", + "operation_id": "update_logs_metric", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "metric_id": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (LogsMetricUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_logs_metric(self, body: LogsMetricCreateRequest, ) -> LogsMetricResponse: + """Create a log-based metric. + + Create a metric based on your ingested logs in your organization. + Returns the log-based metric object from the request body when the request is successful. + + :param body: The definition of the new log-based metric. + :type body: LogsMetricCreateRequest + :rtype: LogsMetricResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_logs_metric_endpoint.call_with_http_info(**kwargs) + + def delete_logs_metric(self, metric_id: str, ) -> None: + """Delete a log-based metric. + + Delete a specific log-based metric from your organization. + + :param metric_id: The name of the log-based metric. + :type metric_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_id"] = metric_id + + return self._delete_logs_metric_endpoint.call_with_http_info(**kwargs) + + def get_logs_metric(self, metric_id: str, ) -> LogsMetricResponse: + """Get a log-based metric. + + Get a specific log-based metric from your organization. + + :param metric_id: The name of the log-based metric. + :type metric_id: str + :rtype: LogsMetricResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_id"] = metric_id + + return self._get_logs_metric_endpoint.call_with_http_info(**kwargs) + + def list_logs_metrics(self, ) -> LogsMetricsResponse: + """Get all log-based metrics. + + Get the list of configured log-based metrics with their definitions. + + :rtype: LogsMetricsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_logs_metrics_endpoint.call_with_http_info(**kwargs) + + def update_logs_metric(self, metric_id: str, body: LogsMetricUpdateRequest, ) -> LogsMetricResponse: + """Update a log-based metric. + + Update a specific log-based metric from your organization. + Returns the log-based metric object from the request body when the request is successful. + + :param metric_id: The name of the log-based metric. + :type metric_id: str + :param body: New definition of the log-based metric. + :type body: LogsMetricUpdateRequest + :rtype: LogsMetricResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_id"] = metric_id + + kwargs["body"] = body + + return self._update_logs_metric_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/logs_restriction_queries_api.py b/datadog_api_client/v2/api/logs_restriction_queries_api.py new file mode 100644 index 0000000000..c79a46f631 --- /dev/null +++ b/datadog_api_client/v2/api/logs_restriction_queries_api.py @@ -0,0 +1,528 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.restriction_query_list_response import RestrictionQueryListResponse +from datadog_api_client.v2.model.restriction_query_without_relationships_response import RestrictionQueryWithoutRelationshipsResponse +from datadog_api_client.v2.model.restriction_query_create_payload import RestrictionQueryCreatePayload +from datadog_api_client.v2.model.restriction_query_with_relationships_response import RestrictionQueryWithRelationshipsResponse +from datadog_api_client.v2.model.restriction_query_update_payload import RestrictionQueryUpdatePayload +from datadog_api_client.v2.model.relationship_to_role import RelationshipToRole +from datadog_api_client.v2.model.restriction_query_roles_response import RestrictionQueryRolesResponse + + +class LogsRestrictionQueriesApi: + """ + Note: This endpoint is in public beta. If you have any feedback, contact `Datadog support `_. + + A Restriction Query is a logs query that restricts which logs the ``logs_read_data`` permission grants read access to. + For users whose roles have Restriction Queries, any log query they make only returns those log events that also match + one of their Restriction Queries. This is true whether the user queries log events from any log-related feature, including + the log explorer, Live Tail, re-hydration, or a dashboard widget. + + Restriction Queries currently only support use of the following components of log events: + + * Reserved attributes + * The log message + * Tags + + To restrict read access on log data, add a team tag to log events to indicate which teams own them, and then scope Restriction Queries to the relevant values of the team tag. Tags can be applied to log events in many ways, and a log event can have multiple tags with the same key (like team) and different values. This means the same log event can be visible to roles whose restriction queries are scoped to different team values. + + See `How to Set Up RBAC for Logs `_ for details on how to add restriction queries. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._add_role_to_restriction_query_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}/roles", + "operation_id": "add_role_to_restriction_query", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "restriction_query_id": { + "required": True, + "openapi_types": (str,), + "attribute": "restriction_query_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RelationshipToRole,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_restriction_query_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionQueryWithoutRelationshipsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries", + "operation_id": "create_restriction_query", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RestrictionQueryCreatePayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_restriction_query_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}", + "operation_id": "delete_restriction_query", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "restriction_query_id": { + "required": True, + "openapi_types": (str,), + "attribute": "restriction_query_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_restriction_query_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionQueryWithRelationshipsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}", + "operation_id": "get_restriction_query", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "restriction_query_id": { + "required": True, + "openapi_types": (str,), + "attribute": "restriction_query_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_role_restriction_query_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionQueryListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries/role/{role_id}", + "operation_id": "get_role_restriction_query", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_restriction_queries_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionQueryListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries", + "operation_id": "list_restriction_queries", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_restriction_query_roles_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionQueryRolesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}/roles", + "operation_id": "list_restriction_query_roles", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "restriction_query_id": { + "required": True, + "openapi_types": (str,), + "attribute": "restriction_query_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_user_restriction_queries_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionQueryListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries/user/{user_id}", + "operation_id": "list_user_restriction_queries", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._remove_role_from_restriction_query_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}/roles", + "operation_id": "remove_role_from_restriction_query", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "restriction_query_id": { + "required": True, + "openapi_types": (str,), + "attribute": "restriction_query_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RelationshipToRole,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._replace_restriction_query_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionQueryWithoutRelationshipsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}", + "operation_id": "replace_restriction_query", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "restriction_query_id": { + "required": True, + "openapi_types": (str,), + "attribute": "restriction_query_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RestrictionQueryUpdatePayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_restriction_query_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionQueryWithoutRelationshipsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}", + "operation_id": "update_restriction_query", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "restriction_query_id": { + "required": True, + "openapi_types": (str,), + "attribute": "restriction_query_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RestrictionQueryUpdatePayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def add_role_to_restriction_query(self, restriction_query_id: str, body: RelationshipToRole, ) -> None: + """Grant role to a restriction query. + + Adds a role to a restriction query. + + **Note** : This operation automatically grants the ``logs_read_data`` permission to the role if it doesn't already have it. + + :param restriction_query_id: The ID of the restriction query. + :type restriction_query_id: str + :type body: RelationshipToRole + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["restriction_query_id"] = restriction_query_id + + kwargs["body"] = body + + return self._add_role_to_restriction_query_endpoint.call_with_http_info(**kwargs) + + def create_restriction_query(self, body: RestrictionQueryCreatePayload, ) -> RestrictionQueryWithoutRelationshipsResponse: + """Create a restriction query. + + Create a new restriction query for your organization. + + :type body: RestrictionQueryCreatePayload + :rtype: RestrictionQueryWithoutRelationshipsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_restriction_query_endpoint.call_with_http_info(**kwargs) + + def delete_restriction_query(self, restriction_query_id: str, ) -> None: + """Delete a restriction query. + + Deletes a restriction query. + + :param restriction_query_id: The ID of the restriction query. + :type restriction_query_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["restriction_query_id"] = restriction_query_id + + return self._delete_restriction_query_endpoint.call_with_http_info(**kwargs) + + def get_restriction_query(self, restriction_query_id: str, ) -> RestrictionQueryWithRelationshipsResponse: + """Get a restriction query. + + Get a restriction query in the organization specified by the restriction query's ``restriction_query_id``. + + :param restriction_query_id: The ID of the restriction query. + :type restriction_query_id: str + :rtype: RestrictionQueryWithRelationshipsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["restriction_query_id"] = restriction_query_id + + return self._get_restriction_query_endpoint.call_with_http_info(**kwargs) + + def get_role_restriction_query(self, role_id: str, ) -> RestrictionQueryListResponse: + """Get restriction query for a given role. + + Get restriction query for a given role. + + :param role_id: The ID of the role. + :type role_id: str + :rtype: RestrictionQueryListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + return self._get_role_restriction_query_endpoint.call_with_http_info(**kwargs) + + def list_restriction_queries(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> RestrictionQueryListResponse: + """List restriction queries. + + Returns all restriction queries, including their names and IDs. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :rtype: RestrictionQueryListResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_restriction_queries_endpoint.call_with_http_info(**kwargs) + + def list_restriction_query_roles(self, restriction_query_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> RestrictionQueryRolesResponse: + """List roles for a restriction query. + + Returns all roles that have a given restriction query. + + :param restriction_query_id: The ID of the restriction query. + :type restriction_query_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :rtype: RestrictionQueryRolesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["restriction_query_id"] = restriction_query_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_restriction_query_roles_endpoint.call_with_http_info(**kwargs) + + def list_user_restriction_queries(self, user_id: str, ) -> RestrictionQueryListResponse: + """Get all restriction queries for a given user. + + Get all restriction queries for a given user. + + :param user_id: The ID of the user. + :type user_id: str + :rtype: RestrictionQueryListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + return self._list_user_restriction_queries_endpoint.call_with_http_info(**kwargs) + + def remove_role_from_restriction_query(self, restriction_query_id: str, body: RelationshipToRole, ) -> None: + """Revoke role from a restriction query. + + Removes a role from a restriction query. + + :param restriction_query_id: The ID of the restriction query. + :type restriction_query_id: str + :type body: RelationshipToRole + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["restriction_query_id"] = restriction_query_id + + kwargs["body"] = body + + return self._remove_role_from_restriction_query_endpoint.call_with_http_info(**kwargs) + + def replace_restriction_query(self, restriction_query_id: str, body: RestrictionQueryUpdatePayload, ) -> RestrictionQueryWithoutRelationshipsResponse: + """Replace a restriction query. + + Replace a restriction query. + + :param restriction_query_id: The ID of the restriction query. + :type restriction_query_id: str + :type body: RestrictionQueryUpdatePayload + :rtype: RestrictionQueryWithoutRelationshipsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["restriction_query_id"] = restriction_query_id + + kwargs["body"] = body + + return self._replace_restriction_query_endpoint.call_with_http_info(**kwargs) + + def update_restriction_query(self, restriction_query_id: str, body: RestrictionQueryUpdatePayload, ) -> RestrictionQueryWithoutRelationshipsResponse: + """Update a restriction query. + + Edit a restriction query. + + :param restriction_query_id: The ID of the restriction query. + :type restriction_query_id: str + :type body: RestrictionQueryUpdatePayload + :rtype: RestrictionQueryWithoutRelationshipsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["restriction_query_id"] = restriction_query_id + + kwargs["body"] = body + + return self._update_restriction_query_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/metrics_api.py b/datadog_api_client/v2/api/metrics_api.py new file mode 100644 index 0000000000..7f190edf98 --- /dev/null +++ b/datadog_api_client/v2/api/metrics_api.py @@ -0,0 +1,1665 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.metrics_and_metric_tag_configurations_response import MetricsAndMetricTagConfigurationsResponse +from datadog_api_client.v2.model.metric_tag_configuration_metric_type_category import MetricTagConfigurationMetricTypeCategory +from datadog_api_client.v2.model.metrics_and_metric_tag_configurations import MetricsAndMetricTagConfigurations +from datadog_api_client.v2.model.metric_bulk_tag_config_response import MetricBulkTagConfigResponse +from datadog_api_client.v2.model.metric_bulk_tag_config_delete_request import MetricBulkTagConfigDeleteRequest +from datadog_api_client.v2.model.metric_bulk_tag_config_create_request import MetricBulkTagConfigCreateRequest +from datadog_api_client.v2.model.historical_metrics_configuration_response import HistoricalMetricsConfigurationResponse +from datadog_api_client.v2.model.historical_metrics_configuration_create_request import HistoricalMetricsConfigurationCreateRequest +from datadog_api_client.v2.model.tag_indexing_rules_response import TagIndexingRulesResponse +from datadog_api_client.v2.model.tag_indexing_rule_response import TagIndexingRuleResponse +from datadog_api_client.v2.model.tag_indexing_rule_create_request import TagIndexingRuleCreateRequest +from datadog_api_client.v2.model.tag_indexing_rule_order_request import TagIndexingRuleOrderRequest +from datadog_api_client.v2.model.tag_indexing_rule_update_request import TagIndexingRuleUpdateRequest +from datadog_api_client.v2.model.metric_suggested_tags_and_aggregations_response import MetricSuggestedTagsAndAggregationsResponse +from datadog_api_client.v2.model.metric_all_tags_response import MetricAllTagsResponse +from datadog_api_client.v2.model.metric_assets_response import MetricAssetsResponse +from datadog_api_client.v2.model.metric_estimate_response import MetricEstimateResponse +from datadog_api_client.v2.model.metric_tag_cardinalities_response import MetricTagCardinalitiesResponse +from datadog_api_client.v2.model.tag_indexing_rule_exemption_response import TagIndexingRuleExemptionResponse +from datadog_api_client.v2.model.tag_indexing_rule_exemption_create_request import TagIndexingRuleExemptionCreateRequest +from datadog_api_client.v2.model.metric_tag_configuration_response import MetricTagConfigurationResponse +from datadog_api_client.v2.model.metric_tag_configuration_update_request import MetricTagConfigurationUpdateRequest +from datadog_api_client.v2.model.metric_tag_configuration_create_request import MetricTagConfigurationCreateRequest +from datadog_api_client.v2.model.metric_volumes_response import MetricVolumesResponse +from datadog_api_client.v2.model.scalar_formula_query_response import ScalarFormulaQueryResponse +from datadog_api_client.v2.model.scalar_formula_query_request import ScalarFormulaQueryRequest +from datadog_api_client.v2.model.timeseries_formula_query_response import TimeseriesFormulaQueryResponse +from datadog_api_client.v2.model.timeseries_formula_query_request import TimeseriesFormulaQueryRequest +from datadog_api_client.v2.model.intake_payload_accepted import IntakePayloadAccepted +from datadog_api_client.v2.model.metric_content_encoding import MetricContentEncoding +from datadog_api_client.v2.model.metric_payload import MetricPayload + + +class MetricsApi: + """ + The metrics endpoint allows you to: + + * Post metrics data so it can be graphed on Datadog’s dashboards + * Query metrics from any time period (timeseries and scalar) + * Modify tag configurations for metrics + * View tags and volumes for metrics + + **Note** : A graph can only contain a set number of points + and as the timeframe over which a metric is viewed increases, + aggregation between points occurs to stay below that set number. + + The Post, Patch, and Delete ``manage_tags`` API methods can only be performed by + a user who has the ``Manage Tags for Metrics`` permission. + + See the `Metrics page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_bulk_tags_metrics_configuration_endpoint = _Endpoint( + settings={ + "response_type": (MetricBulkTagConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/metrics/config/bulk-tags", + "operation_id": "create_bulk_tags_metrics_configuration", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MetricBulkTagConfigCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_historical_metrics_configuration_endpoint = _Endpoint( + settings={ + "response_type": (HistoricalMetricsConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/historical-metrics-configurations", + "operation_id": "create_historical_metrics_configuration", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (HistoricalMetricsConfigurationCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_tag_configuration_endpoint = _Endpoint( + settings={ + "response_type": (MetricTagConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/metrics/{metric_name}/tags", + "operation_id": "create_tag_configuration", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MetricTagConfigurationCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_tag_indexing_rule_endpoint = _Endpoint( + settings={ + "response_type": (TagIndexingRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/tag-indexing-rules", + "operation_id": "create_tag_indexing_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TagIndexingRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_tag_indexing_rule_exemption_endpoint = _Endpoint( + settings={ + "response_type": (TagIndexingRuleExemptionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/{metric_name}/tag-indexing-rule-exemptions", + "operation_id": "create_tag_indexing_rule_exemption", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TagIndexingRuleExemptionCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_bulk_tags_metrics_configuration_endpoint = _Endpoint( + settings={ + "response_type": (MetricBulkTagConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/metrics/config/bulk-tags", + "operation_id": "delete_bulk_tags_metrics_configuration", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MetricBulkTagConfigDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_historical_metrics_configuration_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/historical-metrics-configurations/{metric_name}", + "operation_id": "delete_historical_metrics_configuration", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_tag_configuration_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/metrics/{metric_name}/tags", + "operation_id": "delete_tag_configuration", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_tag_indexing_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/tag-indexing-rules/{id}", + "operation_id": "delete_tag_indexing_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_tag_indexing_rule_exemption_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/{metric_name}/tag-indexing-rule-exemptions", + "operation_id": "delete_tag_indexing_rule_exemption", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._estimate_metrics_output_series_endpoint = _Endpoint( + settings={ + "response_type": (MetricEstimateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/metrics/{metric_name}/estimate", + "operation_id": "estimate_metrics_output_series", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + "filter_groups": { + "openapi_types": (str,), + "attribute": "filter[groups]", + "location": "query", + }, + "filter_hours_ago": { + "validation": { + "inclusive_maximum": 2147483647, + "inclusive_minimum": 49, + }, + "openapi_types": (int,), + "attribute": "filter[hours_ago]", + "location": "query", + }, + "filter_num_aggregations": { + "validation": { + "inclusive_maximum": 9, + }, + "openapi_types": (int,), + "attribute": "filter[num_aggregations]", + "location": "query", + }, + "filter_pct": { + "openapi_types": (bool,), + "attribute": "filter[pct]", + "location": "query", + }, + "filter_timespan_h": { + "validation": { + "inclusive_maximum": 2147483647, + }, + "openapi_types": (int,), + "attribute": "filter[timespan_h]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_historical_metrics_configuration_endpoint = _Endpoint( + settings={ + "response_type": (HistoricalMetricsConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/historical-metrics-configurations/{metric_name}", + "operation_id": "get_historical_metrics_configuration", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_metric_tag_cardinality_details_endpoint = _Endpoint( + settings={ + "response_type": (MetricTagCardinalitiesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/metrics/{metric_name}/tag-cardinalities", + "operation_id": "get_metric_tag_cardinality_details", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_tag_indexing_rule_endpoint = _Endpoint( + settings={ + "response_type": (TagIndexingRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/tag-indexing-rules/{id}", + "operation_id": "get_tag_indexing_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_tag_indexing_rule_exemption_endpoint = _Endpoint( + settings={ + "response_type": (TagIndexingRuleExemptionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/{metric_name}/tag-indexing-rule-exemptions", + "operation_id": "get_tag_indexing_rule_exemption", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_active_metric_configurations_endpoint = _Endpoint( + settings={ + "response_type": (MetricSuggestedTagsAndAggregationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/metrics/{metric_name}/active-configurations", + "operation_id": "list_active_metric_configurations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + "window_seconds": { + "openapi_types": (int,), + "attribute": "window[seconds]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_metric_assets_endpoint = _Endpoint( + settings={ + "response_type": (MetricAssetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/{metric_name}/assets", + "operation_id": "list_metric_assets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tag_configuration_by_name_endpoint = _Endpoint( + settings={ + "response_type": (MetricTagConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/{metric_name}/tags", + "operation_id": "list_tag_configuration_by_name", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tag_configurations_endpoint = _Endpoint( + settings={ + "response_type": (MetricsAndMetricTagConfigurationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics", + "operation_id": "list_tag_configurations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_configured": { + "openapi_types": (bool,), + "attribute": "filter[configured]", + "location": "query", + }, + "filter_is_configurable": { + "openapi_types": (bool,), + "attribute": "filter[is_configurable]", + "location": "query", + }, + "filter_tags_configured": { + "openapi_types": (str,), + "attribute": "filter[tags_configured]", + "location": "query", + }, + "filter_metric_type": { + "openapi_types": (MetricTagConfigurationMetricTypeCategory,), + "attribute": "filter[metric_type]", + "location": "query", + }, + "filter_include_percentiles": { + "openapi_types": (bool,), + "attribute": "filter[include_percentiles]", + "location": "query", + }, + "filter_queried": { + "openapi_types": (bool,), + "attribute": "filter[queried]", + "location": "query", + }, + "filter_queried_window_seconds": { + "validation": { + "inclusive_maximum": 15552000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "filter[queried][window][seconds]", + "location": "query", + }, + "filter_tags": { + "openapi_types": (str,), + "attribute": "filter[tags]", + "location": "query", + }, + "filter_related_assets": { + "openapi_types": (bool,), + "attribute": "filter[related_assets]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "window_seconds": { + "validation": { + "inclusive_maximum": 2592000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "window[seconds]", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 10000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tag_indexing_rules_endpoint = _Endpoint( + settings={ + "response_type": (TagIndexingRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/tag-indexing-rules", + "operation_id": "list_tag_indexing_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "search": { + "openapi_types": (str,), + "attribute": "search", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tag_indexing_rules_for_metric_endpoint = _Endpoint( + settings={ + "response_type": (TagIndexingRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/{metric_name}/tag-indexing-rules", + "operation_id": "list_tag_indexing_rules_for_metric", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tags_by_metric_name_endpoint = _Endpoint( + settings={ + "response_type": (MetricAllTagsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/{metric_name}/all-tags", + "operation_id": "list_tags_by_metric_name", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + "window_seconds": { + "openapi_types": (int,), + "attribute": "window[seconds]", + "location": "query", + }, + "filter_tags": { + "openapi_types": (str,), + "attribute": "filter[tags]", + "location": "query", + }, + "filter_match": { + "openapi_types": (str,), + "attribute": "filter[match]", + "location": "query", + }, + "filter_include_tag_values": { + "openapi_types": (bool,), + "attribute": "filter[include_tag_values]", + "location": "query", + }, + "filter_allow_partial": { + "openapi_types": (bool,), + "attribute": "filter[allow_partial]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_volumes_by_metric_name_endpoint = _Endpoint( + settings={ + "response_type": (MetricVolumesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/metrics/{metric_name}/volumes", + "operation_id": "list_volumes_by_metric_name", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + "window_seconds": { + "openapi_types": (int,), + "attribute": "window[seconds]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._query_scalar_data_endpoint = _Endpoint( + settings={ + "response_type": (ScalarFormulaQueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/query/scalar", + "operation_id": "query_scalar_data", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ScalarFormulaQueryRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._query_timeseries_data_endpoint = _Endpoint( + settings={ + "response_type": (TimeseriesFormulaQueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/query/timeseries", + "operation_id": "query_timeseries_data", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TimeseriesFormulaQueryRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._reorder_tag_indexing_rules_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/tag-indexing-rules/order", + "operation_id": "reorder_tag_indexing_rules", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TagIndexingRuleOrderRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._submit_metrics_endpoint = _Endpoint( + settings={ + "response_type": (IntakePayloadAccepted,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v2/series", + "operation_id": "submit_metrics", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "content_encoding": { + "openapi_types": (MetricContentEncoding,), + "attribute": "Content-Encoding", + "location": "header", + }, + "body": { + "required": True, + "openapi_types": (MetricPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_tag_configuration_endpoint = _Endpoint( + settings={ + "response_type": (MetricTagConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/metrics/{metric_name}/tags", + "operation_id": "update_tag_configuration", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "metric_name": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MetricTagConfigurationUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_tag_indexing_rule_endpoint = _Endpoint( + settings={ + "response_type": (TagIndexingRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/metrics/tag-indexing-rules/{id}", + "operation_id": "update_tag_indexing_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TagIndexingRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_bulk_tags_metrics_configuration(self, body: MetricBulkTagConfigCreateRequest, ) -> MetricBulkTagConfigResponse: + """Configure tags for multiple metrics. **Deprecated**. + + **Note** : This endpoint is deprecated. Use `Tag Indexing Rules `_ ( ``POST /api/v2/metrics/tag-indexing-rules`` ) instead. + + Create and define a list of queryable tag keys for a set of existing count, gauge, rate, and distribution metrics. + Metrics are selected by passing a metric name prefix. Use the Delete method of this API path to remove tag configurations. + Results can be sent to a set of account email addresses, just like the same operation in the Datadog web app. + If multiple calls include the same metric, the last configuration applied (not by submit order) is used, do not + expect deterministic ordering of concurrent calls. The ``exclude_tags_mode`` value will set all metrics that match the prefix to + the same exclusion state, metric tag configurations do not support mixed inclusion and exclusion for tags on the same metric. + Can only be used with application keys of users with the ``Manage Tags for Metrics`` permission. + + :type body: MetricBulkTagConfigCreateRequest + :rtype: MetricBulkTagConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_bulk_tags_metrics_configuration is deprecated", DeprecationWarning, stacklevel=2) + return self._create_bulk_tags_metrics_configuration_endpoint.call_with_http_info(**kwargs) + + def create_historical_metrics_configuration(self, body: HistoricalMetricsConfigurationCreateRequest, ) -> HistoricalMetricsConfigurationResponse: + """Enable historical metrics ingestion. + + Enable historical metrics ingestion (late data ingestion) for a metric. Idempotent: + enabling an already-enabled metric returns 200 instead of 201. Not supported for + distribution metrics, metrics with an existing tag configuration, or most standard + (non-custom) metrics. + + :type body: HistoricalMetricsConfigurationCreateRequest + :rtype: HistoricalMetricsConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_historical_metrics_configuration_endpoint.call_with_http_info(**kwargs) + + def create_tag_configuration(self, metric_name: str, body: MetricTagConfigurationCreateRequest, ) -> MetricTagConfigurationResponse: + """Create a tag configuration. + + Create and define a list of queryable tag keys for an existing count/gauge/rate/distribution metric. + Optionally, include percentile aggregations on any distribution metric. By setting ``exclude_tags_mode`` + to true, the behavior is changed from an allow-list to a deny-list, and tags in the defined list are + not queryable. Can only be used with application keys of users with the ``Manage Tags for Metrics`` + permission. + + :param metric_name: The name of the metric. + :type metric_name: str + :type body: MetricTagConfigurationCreateRequest + :rtype: MetricTagConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + kwargs["body"] = body + + return self._create_tag_configuration_endpoint.call_with_http_info(**kwargs) + + def create_tag_indexing_rule(self, body: TagIndexingRuleCreateRequest, ) -> TagIndexingRuleResponse: + """Create a tag indexing rule. + + Create a tag indexing rule for the org. ``rule_order`` is assigned server-side as max+1 + among existing rules; use the reorder endpoint to change the evaluation order. + Requires the ``Manage Tags for Metrics`` permission. + + :type body: TagIndexingRuleCreateRequest + :rtype: TagIndexingRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_tag_indexing_rule_endpoint.call_with_http_info(**kwargs) + + def create_tag_indexing_rule_exemption(self, metric_name: str, body: TagIndexingRuleExemptionCreateRequest, ) -> TagIndexingRuleExemptionResponse: + """Create a tag indexing rule exemption. + + Exempt a metric from all tag indexing rules. The response includes the created + exemption resource. Requires the ``Manage Tags for Metrics`` permission. + + :param metric_name: The name of the metric. + :type metric_name: str + :type body: TagIndexingRuleExemptionCreateRequest + :rtype: TagIndexingRuleExemptionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + kwargs["body"] = body + + return self._create_tag_indexing_rule_exemption_endpoint.call_with_http_info(**kwargs) + + def delete_bulk_tags_metrics_configuration(self, body: MetricBulkTagConfigDeleteRequest, ) -> MetricBulkTagConfigResponse: + """Delete tags for multiple metrics. **Deprecated**. + + **Note** : This endpoint is deprecated. Use `Tag Indexing Rules `_ ( ``POST /api/v2/metrics/tag-indexing-rules`` ) instead. + + Delete all custom lists of queryable tag keys for a set of existing count, gauge, rate, and distribution metrics. + Metrics are selected by passing a metric name prefix. + Results can be sent to a set of account email addresses, just like the same operation in the Datadog web app. + Can only be used with application keys of users with the ``Manage Tags for Metrics`` permission. + + :type body: MetricBulkTagConfigDeleteRequest + :rtype: MetricBulkTagConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("delete_bulk_tags_metrics_configuration is deprecated", DeprecationWarning, stacklevel=2) + return self._delete_bulk_tags_metrics_configuration_endpoint.call_with_http_info(**kwargs) + + def delete_historical_metrics_configuration(self, metric_name: str, ) -> None: + """Delete a historical metrics configuration. + + Disable historical metrics ingestion for a metric. Idempotent: always returns 204, + whether or not the configuration existed or the metric itself still exists, so that + Terraform destroy succeeds for a metric removed out-of-band. + + :param metric_name: The name of the metric. + :type metric_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._delete_historical_metrics_configuration_endpoint.call_with_http_info(**kwargs) + + def delete_tag_configuration(self, metric_name: str, ) -> None: + """Delete a tag configuration. + + Deletes a metric's tag configuration. Can only be used with application + keys from users with the ``Manage Tags for Metrics`` permission. + Note: This operation is irreversible. + + :param metric_name: The name of the metric. + :type metric_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._delete_tag_configuration_endpoint.call_with_http_info(**kwargs) + + def delete_tag_indexing_rule(self, id: str, ) -> None: + """Delete a tag indexing rule. + + Soft-delete a tag indexing rule. Idempotent: returns 204 whether the rule existed or was already deleted. + Remaining rules in the org are automatically re-sequenced to keep ``rule_order`` dense and 1-based. + Requires the ``Manage Tags for Metrics`` permission. + + :param id: ID of the tag indexing rule. + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._delete_tag_indexing_rule_endpoint.call_with_http_info(**kwargs) + + def delete_tag_indexing_rule_exemption(self, metric_name: str, ) -> None: + """Delete a tag indexing rule exemption. + + Remove a metric's exemption from tag indexing rules. Idempotent: returns 204 whether or not + an exemption existed. Any associated legacy tag configuration record is also removed. + Requires the ``Manage Tags for Metrics`` permission. + + :param metric_name: The name of the metric. + :type metric_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._delete_tag_indexing_rule_exemption_endpoint.call_with_http_info(**kwargs) + + def estimate_metrics_output_series(self, metric_name: str, *, filter_groups: Union[str, UnsetType]=unset, filter_hours_ago: Union[int, UnsetType]=unset, filter_num_aggregations: Union[int, UnsetType]=unset, filter_pct: Union[bool, UnsetType]=unset, filter_timespan_h: Union[int, UnsetType]=unset, ) -> MetricEstimateResponse: + """Tag Configuration Cardinality Estimator. + + Returns the estimated cardinality for a metric with a given tag, percentile and number of aggregations configuration using Metrics without Limits™. + + :param metric_name: The name of the metric. + :type metric_name: str + :param filter_groups: Comma-separated list of tag keys that the metric is configured to query with. For example: ``filter[groups]=app,host``. + :type filter_groups: str, optional + :param filter_hours_ago: The number of hours of look back (from now) to estimate cardinality with. If unspecified, it defaults to 0 hours. + :type filter_hours_ago: int, optional + :param filter_num_aggregations: Deprecated. Number of aggregations has no impact on volume. + :type filter_num_aggregations: int, optional + :param filter_pct: A boolean, for distribution metrics only, to estimate cardinality if the metric includes additional percentile aggregators. + :type filter_pct: bool, optional + :param filter_timespan_h: A window, in hours, from the look back to estimate cardinality with. The minimum and default is 1 hour. + :type filter_timespan_h: int, optional + :rtype: MetricEstimateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + if filter_groups is not unset: + kwargs["filter_groups"] = filter_groups + + if filter_hours_ago is not unset: + kwargs["filter_hours_ago"] = filter_hours_ago + + if filter_num_aggregations is not unset: + kwargs["filter_num_aggregations"] = filter_num_aggregations + + if filter_pct is not unset: + kwargs["filter_pct"] = filter_pct + + if filter_timespan_h is not unset: + kwargs["filter_timespan_h"] = filter_timespan_h + + return self._estimate_metrics_output_series_endpoint.call_with_http_info(**kwargs) + + def get_historical_metrics_configuration(self, metric_name: str, ) -> HistoricalMetricsConfigurationResponse: + """Get a historical metrics configuration. + + Get the historical metrics ingestion configuration for a metric. Existence of the + resource means historical metrics ingestion is enabled; returns 404 when it is not + enabled for the metric. + + :param metric_name: The name of the metric. + :type metric_name: str + :rtype: HistoricalMetricsConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._get_historical_metrics_configuration_endpoint.call_with_http_info(**kwargs) + + def get_metric_tag_cardinality_details(self, metric_name: str, ) -> MetricTagCardinalitiesResponse: + """Get tag key cardinality details. + + Returns the cardinality details of tags for a specific metric. + + :param metric_name: The name of the metric. + :type metric_name: str + :rtype: MetricTagCardinalitiesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._get_metric_tag_cardinality_details_endpoint.call_with_http_info(**kwargs) + + def get_tag_indexing_rule(self, id: str, ) -> TagIndexingRuleResponse: + """Get a tag indexing rule. + + Get a single tag indexing rule by its UUID. + + :param id: ID of the tag indexing rule. + :type id: str + :rtype: TagIndexingRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_tag_indexing_rule_endpoint.call_with_http_info(**kwargs) + + def get_tag_indexing_rule_exemption(self, metric_name: str, ) -> TagIndexingRuleExemptionResponse: + """Get a tag indexing rule exemption. + + Returns why a metric is excluded from tag indexing rules. + Returns 200 with ``kind=exemption`` when an explicit exemption exists, 200 with + ``kind=legacy_tag_configuration`` when the metric has a legacy tag configuration acting as an + implicit exclusion, or 404 when neither applies. + + :param metric_name: The name of the metric. + :type metric_name: str + :rtype: TagIndexingRuleExemptionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._get_tag_indexing_rule_exemption_endpoint.call_with_http_info(**kwargs) + + def list_active_metric_configurations(self, metric_name: str, *, window_seconds: Union[int, UnsetType]=unset, ) -> MetricSuggestedTagsAndAggregationsResponse: + """List active tags and aggregations. + + List tags and aggregations that are actively queried on dashboards, notebooks, monitors, the Metrics Explorer, and using the API for a given metric name. + + :param metric_name: The name of the metric. + :type metric_name: str + :param window_seconds: The number of seconds of look back (from now). + Default value is 604,800 (1 week), minimum value is 7200 (2 hours), maximum value is 2,630,000 (1 month). + :type window_seconds: int, optional + :rtype: MetricSuggestedTagsAndAggregationsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + if window_seconds is not unset: + kwargs["window_seconds"] = window_seconds + + return self._list_active_metric_configurations_endpoint.call_with_http_info(**kwargs) + + def list_metric_assets(self, metric_name: str, ) -> MetricAssetsResponse: + """Related Assets to a Metric. + + Returns dashboards, monitors, notebooks, and SLOs that a metric is stored in, if any. Updated every 24 hours. + + :param metric_name: The name of the metric. + :type metric_name: str + :rtype: MetricAssetsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._list_metric_assets_endpoint.call_with_http_info(**kwargs) + + def list_tag_configuration_by_name(self, metric_name: str, ) -> MetricTagConfigurationResponse: + """List tag configuration by name. + + Returns the tag configuration for the given metric name. + + A metric may exist and submit data without having a tag configuration. If no tag configuration exists + for the metric, this endpoint returns ``404 Not Found``. This response does not indicate that the metric + itself is missing. + + :param metric_name: The name of the metric. + :type metric_name: str + :rtype: MetricTagConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._list_tag_configuration_by_name_endpoint.call_with_http_info(**kwargs) + + def list_tag_configurations(self, *, filter_configured: Union[bool, UnsetType]=unset, filter_is_configurable: Union[bool, UnsetType]=unset, filter_tags_configured: Union[str, UnsetType]=unset, filter_metric_type: Union[MetricTagConfigurationMetricTypeCategory, UnsetType]=unset, filter_include_percentiles: Union[bool, UnsetType]=unset, filter_queried: Union[bool, UnsetType]=unset, filter_queried_window_seconds: Union[int, UnsetType]=unset, filter_tags: Union[str, UnsetType]=unset, filter_related_assets: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, window_seconds: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> MetricsAndMetricTagConfigurationsResponse: + """Get a list of metrics. + + Get a list of actively reporting metrics for your organization. Pagination is optional using the ``page[cursor]`` and ``page[size]`` query parameters. + + Query parameters use bracket notation (for example, ``filter[tags]`` , ``filter[queried][window][seconds]`` ). Pass them as standard URL query strings, URL-encoding the brackets if your client does not handle them. For example: ``GET /api/v2/metrics?filter[tags]=env:prod&window[seconds]=86400&page[size]=500``. + + :param filter_configured: Only return custom metrics that have been configured ( ``true`` ) or not configured ( ``false`` ) with Metrics Without Limits. + :type filter_configured: bool, optional + :param filter_is_configurable: Only return metrics that are eligible ( ``true`` ) or ineligible ( ``false`` ) for configuration with Metrics Without Limits. + :type filter_is_configurable: bool, optional + :param filter_tags_configured: Only return metrics that have the given tag key(s) in their Metrics Without Limits configuration (included or excluded). + :type filter_tags_configured: str, optional + :param filter_metric_type: Only return metrics of the given metric type. + :type filter_metric_type: MetricTagConfigurationMetricTypeCategory, optional + :param filter_include_percentiles: Only return distribution metrics that have percentile aggregations enabled (true) or disabled (false). + :type filter_include_percentiles: bool, optional + :param filter_queried: Only return metrics that have been queried (true) or not queried (false) in the look back window. Set the window with ``filter[queried][window][seconds]`` ; if omitted, a default window is used. + :type filter_queried: bool, optional + :param filter_queried_window_seconds: This parameter has no effect unless ``filter[queried]`` is also set. Only return metrics that have been queried or not queried in the specified window. The default value is 2,592,000 seconds (30 days), the maximum value is 15,552,000 seconds (180 days), and the minimum value is 1 second. For example: ``filter[queried]=true&filter[queried][window][seconds]=604800``. + :type filter_queried_window_seconds: int, optional + :param filter_tags: Only return metrics that were submitted with tags matching this expression. You can use AND, OR, IN, and wildcards. For example: ``filter[tags]=env IN (staging,test) AND service:web*``. + :type filter_tags: str, optional + :param filter_related_assets: Only return metrics that are used in at least one dashboard, monitor, notebook, or SLO. + :type filter_related_assets: bool, optional + :param include: Include related resources in the response. Set to ``metric_volumes`` to include indexed and ingested volume counts for each metric. + :type include: str, optional + :param sort: Sort results by metric volume. Prefix a key with ``-`` for descending order. Supported keys: ``metric_volumes.indexed_volume`` , ``metric_volumes.ingested_volume`` , ``metric_volumes.indexed_volume_delta`` , ``metric_volumes.ingested_volume_delta``. Requires a paginated request ( ``page[size]`` or ``page[cursor]`` ). + :type sort: str, optional + :param window_seconds: Only return metrics that have been actively reporting in the specified window. The default value is 3600 seconds (1 hour), the maximum value is 2,592,000 seconds (30 days), and the minimum value is 1 second. + :type window_seconds: int, optional + :param page_size: Maximum number of results per page. Send ``page[size]`` on the first request to opt in to pagination. On each subsequent request, send ``page[cursor]`` set to the value of ``meta.pagination.next_cursor`` from the previous response. The default value is 10000, the maximum value is 10000, and the minimum value is 1. + :type page_size: int, optional + :param page_cursor: Cursor for pagination. Use ``page[size]`` to opt-in to pagination and get the first page; for subsequent pages, use the value from ``meta.pagination.next_cursor`` in the response. Pagination is complete when ``next_cursor`` is null. + :type page_cursor: str, optional + :rtype: MetricsAndMetricTagConfigurationsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_configured is not unset: + kwargs["filter_configured"] = filter_configured + + if filter_is_configurable is not unset: + kwargs["filter_is_configurable"] = filter_is_configurable + + if filter_tags_configured is not unset: + kwargs["filter_tags_configured"] = filter_tags_configured + + if filter_metric_type is not unset: + kwargs["filter_metric_type"] = filter_metric_type + + if filter_include_percentiles is not unset: + kwargs["filter_include_percentiles"] = filter_include_percentiles + + if filter_queried is not unset: + kwargs["filter_queried"] = filter_queried + + if filter_queried_window_seconds is not unset: + kwargs["filter_queried_window_seconds"] = filter_queried_window_seconds + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if filter_related_assets is not unset: + kwargs["filter_related_assets"] = filter_related_assets + + if include is not unset: + kwargs["include"] = include + + if sort is not unset: + kwargs["sort"] = sort + + if window_seconds is not unset: + kwargs["window_seconds"] = window_seconds + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + return self._list_tag_configurations_endpoint.call_with_http_info(**kwargs) + + def list_tag_configurations_with_pagination(self, *, filter_configured: Union[bool, UnsetType]=unset, filter_is_configurable: Union[bool, UnsetType]=unset, filter_tags_configured: Union[str, UnsetType]=unset, filter_metric_type: Union[MetricTagConfigurationMetricTypeCategory, UnsetType]=unset, filter_include_percentiles: Union[bool, UnsetType]=unset, filter_queried: Union[bool, UnsetType]=unset, filter_queried_window_seconds: Union[int, UnsetType]=unset, filter_tags: Union[str, UnsetType]=unset, filter_related_assets: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, window_seconds: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[MetricsAndMetricTagConfigurations]: + """Get a list of metrics. + + Provide a paginated version of :meth:`list_tag_configurations`, returning all items. + + :param filter_configured: Only return custom metrics that have been configured ( ``true`` ) or not configured ( ``false`` ) with Metrics Without Limits. + :type filter_configured: bool, optional + :param filter_is_configurable: Only return metrics that are eligible ( ``true`` ) or ineligible ( ``false`` ) for configuration with Metrics Without Limits. + :type filter_is_configurable: bool, optional + :param filter_tags_configured: Only return metrics that have the given tag key(s) in their Metrics Without Limits configuration (included or excluded). + :type filter_tags_configured: str, optional + :param filter_metric_type: Only return metrics of the given metric type. + :type filter_metric_type: MetricTagConfigurationMetricTypeCategory, optional + :param filter_include_percentiles: Only return distribution metrics that have percentile aggregations enabled (true) or disabled (false). + :type filter_include_percentiles: bool, optional + :param filter_queried: Only return metrics that have been queried (true) or not queried (false) in the look back window. Set the window with ``filter[queried][window][seconds]`` ; if omitted, a default window is used. + :type filter_queried: bool, optional + :param filter_queried_window_seconds: This parameter has no effect unless ``filter[queried]`` is also set. Only return metrics that have been queried or not queried in the specified window. The default value is 2,592,000 seconds (30 days), the maximum value is 15,552,000 seconds (180 days), and the minimum value is 1 second. For example: ``filter[queried]=true&filter[queried][window][seconds]=604800``. + :type filter_queried_window_seconds: int, optional + :param filter_tags: Only return metrics that were submitted with tags matching this expression. You can use AND, OR, IN, and wildcards. For example: ``filter[tags]=env IN (staging,test) AND service:web*``. + :type filter_tags: str, optional + :param filter_related_assets: Only return metrics that are used in at least one dashboard, monitor, notebook, or SLO. + :type filter_related_assets: bool, optional + :param include: Include related resources in the response. Set to ``metric_volumes`` to include indexed and ingested volume counts for each metric. + :type include: str, optional + :param sort: Sort results by metric volume. Prefix a key with ``-`` for descending order. Supported keys: ``metric_volumes.indexed_volume`` , ``metric_volumes.ingested_volume`` , ``metric_volumes.indexed_volume_delta`` , ``metric_volumes.ingested_volume_delta``. Requires a paginated request ( ``page[size]`` or ``page[cursor]`` ). + :type sort: str, optional + :param window_seconds: Only return metrics that have been actively reporting in the specified window. The default value is 3600 seconds (1 hour), the maximum value is 2,592,000 seconds (30 days), and the minimum value is 1 second. + :type window_seconds: int, optional + :param page_size: Maximum number of results per page. Send ``page[size]`` on the first request to opt in to pagination. On each subsequent request, send ``page[cursor]`` set to the value of ``meta.pagination.next_cursor`` from the previous response. The default value is 10000, the maximum value is 10000, and the minimum value is 1. + :type page_size: int, optional + :param page_cursor: Cursor for pagination. Use ``page[size]`` to opt-in to pagination and get the first page; for subsequent pages, use the value from ``meta.pagination.next_cursor`` in the response. Pagination is complete when ``next_cursor`` is null. + :type page_cursor: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[MetricsAndMetricTagConfigurations] + """ + kwargs: Dict[str, Any] = {} + if filter_configured is not unset: + kwargs["filter_configured"] = filter_configured + + if filter_is_configurable is not unset: + kwargs["filter_is_configurable"] = filter_is_configurable + + if filter_tags_configured is not unset: + kwargs["filter_tags_configured"] = filter_tags_configured + + if filter_metric_type is not unset: + kwargs["filter_metric_type"] = filter_metric_type + + if filter_include_percentiles is not unset: + kwargs["filter_include_percentiles"] = filter_include_percentiles + + if filter_queried is not unset: + kwargs["filter_queried"] = filter_queried + + if filter_queried_window_seconds is not unset: + kwargs["filter_queried_window_seconds"] = filter_queried_window_seconds + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if filter_related_assets is not unset: + kwargs["filter_related_assets"] = filter_related_assets + + if include is not unset: + kwargs["include"] = include + + if sort is not unset: + kwargs["sort"] = sort + + if window_seconds is not unset: + kwargs["window_seconds"] = window_seconds + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10000) + endpoint = self._list_tag_configurations_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.pagination.next_cursor", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_tag_indexing_rules(self, *, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, search: Union[str, UnsetType]=unset, ) -> TagIndexingRulesResponse: + """List tag indexing rules. + + List tag indexing rules for an org, sorted by ``rule_order`` , with offset/limit pagination. + + :param page_limit: Page size (1–1000, default 100). + :type page_limit: int, optional + :param page_offset: Page offset from the start of the list (default 0). + :type page_offset: int, optional + :param search: Substring filter on rule name. + :type search: str, optional + :rtype: TagIndexingRulesResponse + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if search is not unset: + kwargs["search"] = search + + return self._list_tag_indexing_rules_endpoint.call_with_http_info(**kwargs) + + def list_tag_indexing_rules_for_metric(self, metric_name: str, ) -> TagIndexingRulesResponse: + """List tag indexing rules for a metric. + + List the tag indexing rules that apply to a given metric, sorted by ``rule_order``. + Matching is performed server-side using each rule's ``metric_name_matches`` glob patterns. + + :param metric_name: The name of the metric. + :type metric_name: str + :rtype: TagIndexingRulesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + return self._list_tag_indexing_rules_for_metric_endpoint.call_with_http_info(**kwargs) + + def list_tags_by_metric_name(self, metric_name: str, *, window_seconds: Union[int, UnsetType]=unset, filter_tags: Union[str, UnsetType]=unset, filter_match: Union[str, UnsetType]=unset, filter_include_tag_values: Union[bool, UnsetType]=unset, filter_allow_partial: Union[bool, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> MetricAllTagsResponse: + """List tags by metric name. + + View indexed and ingested tags for a given metric name. + Results are filtered by the ``window[seconds]`` parameter, which defaults to 14400 (4 hours). + + :param metric_name: The name of the metric. + :type metric_name: str + :param window_seconds: The number of seconds of look back (from now) to query for tag data. + Default value is 14400 (4 hours), minimum value is 14400 (4 hours). + :type window_seconds: int, optional + :param filter_tags: Filter results to tags from data points that have the specified tags. + For example, ``filter[tags]=env:staging,host:123`` returns tags only from data points with both ``env:staging`` and ``host:123``. + :type filter_tags: str, optional + :param filter_match: Filter returned tags to those matching a substring. + For example, ``filter[match]=env`` returns tags like ``env:prod`` , ``environment:staging`` , etc. + :type filter_match: str, optional + :param filter_include_tag_values: Whether to include tag values in the response. + Defaults to true. + :type filter_include_tag_values: bool, optional + :param filter_allow_partial: Whether to allow partial results. + Defaults to false. + :type filter_allow_partial: bool, optional + :param page_limit: Maximum number of results to return. + :type page_limit: int, optional + :rtype: MetricAllTagsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + if window_seconds is not unset: + kwargs["window_seconds"] = window_seconds + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if filter_match is not unset: + kwargs["filter_match"] = filter_match + + if filter_include_tag_values is not unset: + kwargs["filter_include_tag_values"] = filter_include_tag_values + + if filter_allow_partial is not unset: + kwargs["filter_allow_partial"] = filter_allow_partial + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_tags_by_metric_name_endpoint.call_with_http_info(**kwargs) + + def list_volumes_by_metric_name(self, metric_name: str, *, window_seconds: Union[int, UnsetType]=unset, ) -> MetricVolumesResponse: + """List distinct metric volumes by metric name. + + View hourly average cardinality for the given metric name over the look back period. + For Metric Name Pricing customers, view total point volume for the given metric name + over the look back period. + + :param metric_name: The name of the metric. + :type metric_name: str + :param window_seconds: The number of seconds of look back (from now). + Default value is 3,600 (1 hour), maximum value is 2,592,000 (1 month). + :type window_seconds: int, optional + :rtype: MetricVolumesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + if window_seconds is not unset: + kwargs["window_seconds"] = window_seconds + + return self._list_volumes_by_metric_name_endpoint.call_with_http_info(**kwargs) + + def query_scalar_data(self, body: ScalarFormulaQueryRequest, ) -> ScalarFormulaQueryResponse: + """Query scalar data across multiple products. + + Query scalar values (as seen on Query Value, Table, and Toplist widgets). + Multiple data sources are supported with the ability to + process the data using formulas and functions. + + :type body: ScalarFormulaQueryRequest + :rtype: ScalarFormulaQueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_scalar_data_endpoint.call_with_http_info(**kwargs) + + def query_timeseries_data(self, body: TimeseriesFormulaQueryRequest, ) -> TimeseriesFormulaQueryResponse: + """Query timeseries data across multiple products. + + Query timeseries data across various data sources and + process the data by applying formulas and functions. + + :type body: TimeseriesFormulaQueryRequest + :rtype: TimeseriesFormulaQueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_timeseries_data_endpoint.call_with_http_info(**kwargs) + + def reorder_tag_indexing_rules(self, body: TagIndexingRuleOrderRequest, ) -> None: + """Reorder tag indexing rules. + + Atomically re-sequence the tag indexing rules for an org to match the supplied list of rule UUIDs. + The server assigns ``rule_order`` 1, 2, … matching each rule UUID by position in the list. + The UUIDs of all active rules must be provided; omitting any active rule UUID returns a 400 error. + Requires the ``Manage Tags for Metrics`` permission. + + :type body: TagIndexingRuleOrderRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._reorder_tag_indexing_rules_endpoint.call_with_http_info(**kwargs) + + def submit_metrics(self, body: MetricPayload, *, content_encoding: Union[MetricContentEncoding, UnsetType]=unset, ) -> IntakePayloadAccepted: + """Submit metrics. + + The metrics end-point allows you to post time-series data that can be graphed on Datadog’s dashboards. + The maximum payload size is 500 kilobytes (512000 bytes). Compressed payloads must have a decompressed size of less than 5 megabytes (5242880 bytes). + + If you’re submitting metrics directly to the Datadog API without using DogStatsD, expect: + + * 64 bits for the timestamp + * 64 bits for the value + * 20 bytes for the metric names + * 50 bytes for the timeseries + * The full payload is approximately 100 bytes. + + Host name is one of the resources in the Resources field. + + :type body: MetricPayload + :param content_encoding: HTTP header used to compress the media-type. + :type content_encoding: MetricContentEncoding, optional + :rtype: IntakePayloadAccepted + """ + kwargs: Dict[str, Any] = {} + if content_encoding is not unset: + kwargs["content_encoding"] = content_encoding + + kwargs["body"] = body + + return self._submit_metrics_endpoint.call_with_http_info(**kwargs) + + def update_tag_configuration(self, metric_name: str, body: MetricTagConfigurationUpdateRequest, ) -> MetricTagConfigurationResponse: + """Update a tag configuration. + + Update the tag configuration of a metric or percentile aggregations of a distribution metric or custom aggregations + of a count, rate, or gauge metric. By setting ``exclude_tags_mode`` to true the behavior is changed + from an allow-list to a deny-list, and tags in the defined list will not be queryable. + Can only be used with application keys from users with the ``Manage Tags for Metrics`` permission. This endpoint requires + a tag configuration to be created first. + + :param metric_name: The name of the metric. + :type metric_name: str + :type body: MetricTagConfigurationUpdateRequest + :rtype: MetricTagConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_name"] = metric_name + + kwargs["body"] = body + + return self._update_tag_configuration_endpoint.call_with_http_info(**kwargs) + + def update_tag_indexing_rule(self, id: str, body: TagIndexingRuleUpdateRequest, ) -> TagIndexingRuleResponse: + """Update a tag indexing rule. + + Partially update a tag indexing rule. Fields omitted from the request body are left unchanged. + Setting ``rule_order`` to a value already used by another rule returns 409; use the + reorder endpoint for atomic re-sequencing. Requires the ``Manage Tags for Metrics`` permission. + + :param id: ID of the tag indexing rule. + :type id: str + :type body: TagIndexingRuleUpdateRequest + :rtype: TagIndexingRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._update_tag_indexing_rule_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/microsoft_teams_integration_api.py b/datadog_api_client/v2/api/microsoft_teams_integration_api.py new file mode 100644 index 0000000000..63190bd923 --- /dev/null +++ b/datadog_api_client/v2/api/microsoft_teams_integration_api.py @@ -0,0 +1,536 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.microsoft_teams_get_channel_by_name_response import MicrosoftTeamsGetChannelByNameResponse +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handles_response import MicrosoftTeamsTenantBasedHandlesResponse +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_response import MicrosoftTeamsTenantBasedHandleResponse +from datadog_api_client.v2.model.microsoft_teams_create_tenant_based_handle_request import MicrosoftTeamsCreateTenantBasedHandleRequest +from datadog_api_client.v2.model.microsoft_teams_update_tenant_based_handle_request import MicrosoftTeamsUpdateTenantBasedHandleRequest +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handles_response import MicrosoftTeamsWorkflowsWebhookHandlesResponse +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_response import MicrosoftTeamsWorkflowsWebhookHandleResponse +from datadog_api_client.v2.model.microsoft_teams_create_workflows_webhook_handle_request import MicrosoftTeamsCreateWorkflowsWebhookHandleRequest +from datadog_api_client.v2.model.microsoft_teams_update_workflows_webhook_handle_request import MicrosoftTeamsUpdateWorkflowsWebhookHandleRequest + + +class MicrosoftTeamsIntegrationApi: + """ + Configure your `Datadog Microsoft Teams integration `_ + directly through the Datadog API. Note: These endpoints do not support legacy connector handles. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_tenant_based_handle_endpoint = _Endpoint( + settings={ + "response_type": (MicrosoftTeamsTenantBasedHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/tenant-based-handles", + "operation_id": "create_tenant_based_handle", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MicrosoftTeamsCreateTenantBasedHandleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_workflows_webhook_handle_endpoint = _Endpoint( + settings={ + "response_type": (MicrosoftTeamsWorkflowsWebhookHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles", + "operation_id": "create_workflows_webhook_handle", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MicrosoftTeamsCreateWorkflowsWebhookHandleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_ms_teams_user_binding_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/user-binding/{tenant_id}", + "operation_id": "delete_ms_teams_user_binding", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "tenant_id": { + "required": True, + "openapi_types": (str,), + "attribute": "tenant_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_tenant_based_handle_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/tenant-based-handles/{handle_id}", + "operation_id": "delete_tenant_based_handle", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "handle_id": { + "required": True, + "openapi_types": (str,), + "attribute": "handle_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_workflows_webhook_handle_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/{handle_id}", + "operation_id": "delete_workflows_webhook_handle", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "handle_id": { + "required": True, + "openapi_types": (str,), + "attribute": "handle_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_channel_by_name_endpoint = _Endpoint( + settings={ + "response_type": (MicrosoftTeamsGetChannelByNameResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/channel/{tenant_name}/{team_name}/{channel_name}", + "operation_id": "get_channel_by_name", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "tenant_name": { + "required": True, + "openapi_types": (str,), + "attribute": "tenant_name", + "location": "path", + }, + "team_name": { + "required": True, + "openapi_types": (str,), + "attribute": "team_name", + "location": "path", + }, + "channel_name": { + "required": True, + "openapi_types": (str,), + "attribute": "channel_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_tenant_based_handle_endpoint = _Endpoint( + settings={ + "response_type": (MicrosoftTeamsTenantBasedHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/tenant-based-handles/{handle_id}", + "operation_id": "get_tenant_based_handle", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "handle_id": { + "required": True, + "openapi_types": (str,), + "attribute": "handle_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_workflows_webhook_handle_endpoint = _Endpoint( + settings={ + "response_type": (MicrosoftTeamsWorkflowsWebhookHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/{handle_id}", + "operation_id": "get_workflows_webhook_handle", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "handle_id": { + "required": True, + "openapi_types": (str,), + "attribute": "handle_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tenant_based_handles_endpoint = _Endpoint( + settings={ + "response_type": (MicrosoftTeamsTenantBasedHandlesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/tenant-based-handles", + "operation_id": "list_tenant_based_handles", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "tenant_id": { + "openapi_types": (str,), + "attribute": "tenant_id", + "location": "query", + }, + "name": { + "openapi_types": (str,), + "attribute": "name", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_workflows_webhook_handles_endpoint = _Endpoint( + settings={ + "response_type": (MicrosoftTeamsWorkflowsWebhookHandlesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles", + "operation_id": "list_workflows_webhook_handles", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "name": { + "openapi_types": (str,), + "attribute": "name", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_tenant_based_handle_endpoint = _Endpoint( + settings={ + "response_type": (MicrosoftTeamsTenantBasedHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/tenant-based-handles/{handle_id}", + "operation_id": "update_tenant_based_handle", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "handle_id": { + "required": True, + "openapi_types": (str,), + "attribute": "handle_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MicrosoftTeamsUpdateTenantBasedHandleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_workflows_webhook_handle_endpoint = _Endpoint( + settings={ + "response_type": (MicrosoftTeamsWorkflowsWebhookHandleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/{handle_id}", + "operation_id": "update_workflows_webhook_handle", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "handle_id": { + "required": True, + "openapi_types": (str,), + "attribute": "handle_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MicrosoftTeamsUpdateWorkflowsWebhookHandleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_tenant_based_handle(self, body: MicrosoftTeamsCreateTenantBasedHandleRequest, ) -> MicrosoftTeamsTenantBasedHandleResponse: + """Create tenant-based handle. + + Create a tenant-based handle in the Datadog Microsoft Teams integration. + + :param body: Tenant-based handle payload. + :type body: MicrosoftTeamsCreateTenantBasedHandleRequest + :rtype: MicrosoftTeamsTenantBasedHandleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_tenant_based_handle_endpoint.call_with_http_info(**kwargs) + + def create_workflows_webhook_handle(self, body: MicrosoftTeamsCreateWorkflowsWebhookHandleRequest, ) -> MicrosoftTeamsWorkflowsWebhookHandleResponse: + """Create Workflows webhook handle. + + Create a Workflows webhook handle in the Datadog Microsoft Teams integration. + + :param body: Workflows Webhook handle payload. + :type body: MicrosoftTeamsCreateWorkflowsWebhookHandleRequest + :rtype: MicrosoftTeamsWorkflowsWebhookHandleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_workflows_webhook_handle_endpoint.call_with_http_info(**kwargs) + + def delete_ms_teams_user_binding(self, tenant_id: str, ) -> None: + """Delete user binding. + + Delete the user binding for a given tenant from the Datadog Microsoft Teams integration. + + :param tenant_id: Your tenant id. + :type tenant_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["tenant_id"] = tenant_id + + return self._delete_ms_teams_user_binding_endpoint.call_with_http_info(**kwargs) + + def delete_tenant_based_handle(self, handle_id: str, ) -> None: + """Delete tenant-based handle. + + Delete a tenant-based handle from the Datadog Microsoft Teams integration. + + :param handle_id: Your tenant-based handle id. + :type handle_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["handle_id"] = handle_id + + return self._delete_tenant_based_handle_endpoint.call_with_http_info(**kwargs) + + def delete_workflows_webhook_handle(self, handle_id: str, ) -> None: + """Delete Workflows webhook handle. + + Delete a Workflows webhook handle from the Datadog Microsoft Teams integration. + + :param handle_id: Your Workflows webhook handle id. + :type handle_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["handle_id"] = handle_id + + return self._delete_workflows_webhook_handle_endpoint.call_with_http_info(**kwargs) + + def get_channel_by_name(self, tenant_name: str, team_name: str, channel_name: str, ) -> MicrosoftTeamsGetChannelByNameResponse: + """Get channel information by name. + + Get the tenant, team, and channel ID of a channel in the Datadog Microsoft Teams integration. + + :param tenant_name: Your tenant name. + :type tenant_name: str + :param team_name: Your team name. + :type team_name: str + :param channel_name: Your channel name. + :type channel_name: str + :rtype: MicrosoftTeamsGetChannelByNameResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["tenant_name"] = tenant_name + + kwargs["team_name"] = team_name + + kwargs["channel_name"] = channel_name + + return self._get_channel_by_name_endpoint.call_with_http_info(**kwargs) + + def get_tenant_based_handle(self, handle_id: str, ) -> MicrosoftTeamsTenantBasedHandleResponse: + """Get tenant-based handle information. + + Get the tenant, team, and channel information of a tenant-based handle from the Datadog Microsoft Teams integration. + + :param handle_id: Your tenant-based handle id. + :type handle_id: str + :rtype: MicrosoftTeamsTenantBasedHandleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["handle_id"] = handle_id + + return self._get_tenant_based_handle_endpoint.call_with_http_info(**kwargs) + + def get_workflows_webhook_handle(self, handle_id: str, ) -> MicrosoftTeamsWorkflowsWebhookHandleResponse: + """Get Workflows webhook handle information. + + Get the name of a Workflows webhook handle from the Datadog Microsoft Teams integration. + + :param handle_id: Your Workflows webhook handle id. + :type handle_id: str + :rtype: MicrosoftTeamsWorkflowsWebhookHandleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["handle_id"] = handle_id + + return self._get_workflows_webhook_handle_endpoint.call_with_http_info(**kwargs) + + def list_tenant_based_handles(self, *, tenant_id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, ) -> MicrosoftTeamsTenantBasedHandlesResponse: + """Get all tenant-based handles. + + Get a list of all tenant-based handles from the Datadog Microsoft Teams integration. + + :param tenant_id: Your tenant id. + :type tenant_id: str, optional + :param name: Your tenant-based handle name. + :type name: str, optional + :rtype: MicrosoftTeamsTenantBasedHandlesResponse + """ + kwargs: Dict[str, Any] = {} + if tenant_id is not unset: + kwargs["tenant_id"] = tenant_id + + if name is not unset: + kwargs["name"] = name + + return self._list_tenant_based_handles_endpoint.call_with_http_info(**kwargs) + + def list_workflows_webhook_handles(self, *, name: Union[str, UnsetType]=unset, ) -> MicrosoftTeamsWorkflowsWebhookHandlesResponse: + """Get all Workflows webhook handles. + + Get a list of all Workflows webhook handles from the Datadog Microsoft Teams integration. + + :param name: Your Workflows webhook handle name. + :type name: str, optional + :rtype: MicrosoftTeamsWorkflowsWebhookHandlesResponse + """ + kwargs: Dict[str, Any] = {} + if name is not unset: + kwargs["name"] = name + + return self._list_workflows_webhook_handles_endpoint.call_with_http_info(**kwargs) + + def update_tenant_based_handle(self, handle_id: str, body: MicrosoftTeamsUpdateTenantBasedHandleRequest, ) -> MicrosoftTeamsTenantBasedHandleResponse: + """Update tenant-based handle. + + Update a tenant-based handle from the Datadog Microsoft Teams integration. + + :param handle_id: Your tenant-based handle id. + :type handle_id: str + :param body: Tenant-based handle payload. + :type body: MicrosoftTeamsUpdateTenantBasedHandleRequest + :rtype: MicrosoftTeamsTenantBasedHandleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["handle_id"] = handle_id + + kwargs["body"] = body + + return self._update_tenant_based_handle_endpoint.call_with_http_info(**kwargs) + + def update_workflows_webhook_handle(self, handle_id: str, body: MicrosoftTeamsUpdateWorkflowsWebhookHandleRequest, ) -> MicrosoftTeamsWorkflowsWebhookHandleResponse: + """Update Workflows webhook handle. + + Update a Workflows webhook handle from the Datadog Microsoft Teams integration. + + :param handle_id: Your Workflows webhook handle id. + :type handle_id: str + :param body: Workflows Webhook handle payload. + :type body: MicrosoftTeamsUpdateWorkflowsWebhookHandleRequest + :rtype: MicrosoftTeamsWorkflowsWebhookHandleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["handle_id"] = handle_id + + kwargs["body"] = body + + return self._update_workflows_webhook_handle_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/model_lab_api_api.py b/datadog_api_client/v2/api/model_lab_api_api.py new file mode 100644 index 0000000000..8355b591bf --- /dev/null +++ b/datadog_api_client/v2/api/model_lab_api_api.py @@ -0,0 +1,861 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.model_lab_facet_keys_response import ModelLabFacetKeysResponse +from datadog_api_client.v2.model.model_lab_facet_values_response import ModelLabFacetValuesResponse +from datadog_api_client.v2.model.model_lab_facet_type import ModelLabFacetType +from datadog_api_client.v2.model.model_lab_project_facet_type import ModelLabProjectFacetType +from datadog_api_client.v2.model.model_lab_projects_response import ModelLabProjectsResponse +from datadog_api_client.v2.model.model_lab_project_response import ModelLabProjectResponse +from datadog_api_client.v2.model.model_lab_project_artifacts_response import ModelLabProjectArtifactsResponse +from datadog_api_client.v2.model.model_lab_runs_response import ModelLabRunsResponse +from datadog_api_client.v2.model.model_lab_run_status import ModelLabRunStatus +from datadog_api_client.v2.model.model_lab_run_response import ModelLabRunResponse +from datadog_api_client.v2.model.model_lab_run_artifacts_response import ModelLabRunArtifactsResponse + + +class ModelLabAPIApi: + """ + Manage Model Lab projects, runs, artifacts, and facets for ML experiment tracking. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_model_lab_run_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/runs/{run_id}", + "operation_id": "delete_model_lab_run", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "run_id": { + "required": True, + "openapi_types": (int,), + "attribute": "run_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_model_lab_artifact_content_endpoint = _Endpoint( + settings={ + "response_type": (file_type,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/artifacts/content", + "operation_id": "get_model_lab_artifact_content", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (str,), + "attribute": "project_id", + "location": "query", + }, + "artifact_path": { + "required": True, + "openapi_types": (str,), + "attribute": "artifact_path", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/octet-stream", "application/json"], + }, + api_client=api_client, + ) + + self._get_model_lab_project_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabProjectResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/projects/{project_id}", + "operation_id": "get_model_lab_project", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (int,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_model_lab_run_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabRunResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/runs/{run_id}", + "operation_id": "get_model_lab_run", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "run_id": { + "required": True, + "openapi_types": (int,), + "attribute": "run_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_model_lab_project_artifacts_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabProjectArtifactsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/projects/{project_id}/artifacts", + "operation_id": "list_model_lab_project_artifacts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (int,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_model_lab_project_facet_keys_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabFacetKeysResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/project-facet-keys", + "operation_id": "list_model_lab_project_facet_keys", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_model_lab_project_facet_values_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabFacetValuesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/project-facet-values", + "operation_id": "list_model_lab_project_facet_values", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "facet_type": { + "required": True, + "openapi_types": (ModelLabProjectFacetType,), + "attribute": "facet_type", + "location": "query", + }, + "facet_name": { + "required": True, + "openapi_types": (str,), + "attribute": "facet_name", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_model_lab_projects_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabProjectsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/projects", + "operation_id": "list_model_lab_projects", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_owner_id": { + "openapi_types": (UUID,), + "attribute": "filter[owner_id]", + "location": "query", + }, + "filter_tags": { + "openapi_types": (str,), + "attribute": "filter[tags]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 100, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_model_lab_run_artifacts_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabRunArtifactsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/runs/{run_id}/artifacts", + "operation_id": "list_model_lab_run_artifacts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "run_id": { + "required": True, + "openapi_types": (int,), + "attribute": "run_id", + "location": "path", + }, + "path": { + "openapi_types": (str,), + "attribute": "path", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_model_lab_run_facet_keys_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabFacetKeysResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/facet-keys", + "operation_id": "list_model_lab_run_facet_keys", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_project_id": { + "required": True, + "openapi_types": (int,), + "attribute": "filter[project_id]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_model_lab_run_facet_values_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabFacetValuesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/facet-values", + "operation_id": "list_model_lab_run_facet_values", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_project_id": { + "required": True, + "openapi_types": (int,), + "attribute": "filter[project_id]", + "location": "query", + }, + "facet_type": { + "required": True, + "openapi_types": (ModelLabFacetType,), + "attribute": "facet_type", + "location": "query", + }, + "facet_name": { + "required": True, + "openapi_types": (str,), + "attribute": "facet_name", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_model_lab_runs_endpoint = _Endpoint( + settings={ + "response_type": (ModelLabRunsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/runs", + "operation_id": "list_model_lab_runs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_id": { + "openapi_types": (str,), + "attribute": "filter[id]", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_owner_id": { + "openapi_types": (str,), + "attribute": "filter[owner_id]", + "location": "query", + }, + "filter_status": { + "openapi_types": (ModelLabRunStatus,), + "attribute": "filter[status]", + "location": "query", + }, + "filter_project_id": { + "openapi_types": (int,), + "attribute": "filter[project_id]", + "location": "query", + }, + "filter_tags": { + "openapi_types": (str,), + "attribute": "filter[tags]", + "location": "query", + }, + "filter_params": { + "openapi_types": (str,), + "attribute": "filter[params]", + "location": "query", + }, + "filter_parent_run_id": { + "openapi_types": (str,), + "attribute": "filter[parent_run_id]", + "location": "query", + }, + "pinned_first": { + "openapi_types": (bool,), + "attribute": "pinned_first", + "location": "query", + }, + "include_pinned": { + "openapi_types": (bool,), + "attribute": "include_pinned", + "location": "query", + }, + "include_descendant_matches": { + "openapi_types": (bool,), + "attribute": "include_descendant_matches", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 100, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._pin_model_lab_run_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/runs/{run_id}/pin", + "operation_id": "pin_model_lab_run", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "run_id": { + "required": True, + "openapi_types": (int,), + "attribute": "run_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._star_model_lab_project_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/projects/{project_id}/star", + "operation_id": "star_model_lab_project", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (int,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._unpin_model_lab_run_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/runs/{run_id}/pin", + "operation_id": "unpin_model_lab_run", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "run_id": { + "required": True, + "openapi_types": (int,), + "attribute": "run_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._unstar_model_lab_project_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/model-lab-api/projects/{project_id}/star", + "operation_id": "unstar_model_lab_project", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "project_id": { + "required": True, + "openapi_types": (int,), + "attribute": "project_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + def delete_model_lab_run(self, run_id: int, ) -> None: + """Delete a Model Lab run. + + Delete a Model Lab run by its ID. + + :param run_id: The ID of the Model Lab run. + :type run_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["run_id"] = run_id + + return self._delete_model_lab_run_endpoint.call_with_http_info(**kwargs) + + def get_model_lab_artifact_content(self, project_id: str, artifact_path: str, ) -> file_type: + """Get Model Lab artifact content. + + Download the raw content of a Model Lab artifact file. + + :param project_id: ID of the project. + :type project_id: str + :param artifact_path: Path to the artifact relative to the project directory. + :type artifact_path: str + :rtype: file_type + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + kwargs["artifact_path"] = artifact_path + + return self._get_model_lab_artifact_content_endpoint.call_with_http_info(**kwargs) + + def get_model_lab_project(self, project_id: int, ) -> ModelLabProjectResponse: + """Get a Model Lab project. + + Get a single Model Lab project by its ID. + + :param project_id: The ID of the Model Lab project. + :type project_id: int + :rtype: ModelLabProjectResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._get_model_lab_project_endpoint.call_with_http_info(**kwargs) + + def get_model_lab_run(self, run_id: int, ) -> ModelLabRunResponse: + """Get a Model Lab run. + + Get a single Model Lab run by its ID. + + :param run_id: The ID of the Model Lab run. + :type run_id: int + :rtype: ModelLabRunResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["run_id"] = run_id + + return self._get_model_lab_run_endpoint.call_with_http_info(**kwargs) + + def list_model_lab_project_artifacts(self, project_id: int, ) -> ModelLabProjectArtifactsResponse: + """List Model Lab project artifacts. + + List all artifact files for a specific Model Lab project. + + :param project_id: The ID of the Model Lab project. + :type project_id: int + :rtype: ModelLabProjectArtifactsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._list_model_lab_project_artifacts_endpoint.call_with_http_info(**kwargs) + + def list_model_lab_project_facet_keys(self, ) -> ModelLabFacetKeysResponse: + """List Model Lab project facet keys. + + List all available facet keys for filtering Model Lab projects. + + :rtype: ModelLabFacetKeysResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_model_lab_project_facet_keys_endpoint.call_with_http_info(**kwargs) + + def list_model_lab_project_facet_values(self, facet_type: ModelLabProjectFacetType, facet_name: str, ) -> ModelLabFacetValuesResponse: + """List Model Lab project facet values. + + List available facet values for a specific project facet key. + + :param facet_type: Facet type. Valid values: tag. + :type facet_type: ModelLabProjectFacetType + :param facet_name: Facet name. + :type facet_name: str + :rtype: ModelLabFacetValuesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["facet_type"] = facet_type + + kwargs["facet_name"] = facet_name + + return self._list_model_lab_project_facet_values_endpoint.call_with_http_info(**kwargs) + + def list_model_lab_projects(self, *, filter: Union[str, UnsetType]=unset, filter_owner_id: Union[UUID, UnsetType]=unset, filter_tags: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> ModelLabProjectsResponse: + """List Model Lab projects. + + List all Model Lab projects for the current organization. + + :param filter: Text search filter for project name or description. + :type filter: str, optional + :param filter_owner_id: Filter by owner UUID. + :type filter_owner_id: UUID, optional + :param filter_tags: Filter by tags. Format: key:value,key2:value2. + :type filter_tags: str, optional + :param sort: Sort field. Valid values: name, created_at, updated_at. Prefix with '-' for descending order (e.g., -updated_at). + :type sort: str, optional + :param page_size: Number of items per page. Maximum is 100. + :type page_size: int, optional + :param page_number: Page number (1-indexed). + :type page_number: int, optional + :rtype: ModelLabProjectsResponse + """ + kwargs: Dict[str, Any] = {} + if filter is not unset: + kwargs["filter"] = filter + + if filter_owner_id is not unset: + kwargs["filter_owner_id"] = filter_owner_id + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if sort is not unset: + kwargs["sort"] = sort + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_model_lab_projects_endpoint.call_with_http_info(**kwargs) + + def list_model_lab_run_artifacts(self, run_id: int, *, path: Union[str, UnsetType]=unset, ) -> ModelLabRunArtifactsResponse: + """List Model Lab run artifacts. + + List artifact files for a specific Model Lab run. + + :param run_id: The ID of the Model Lab run. + :type run_id: int + :param path: Optional subdirectory path within the run's artifacts. + :type path: str, optional + :rtype: ModelLabRunArtifactsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["run_id"] = run_id + + if path is not unset: + kwargs["path"] = path + + return self._list_model_lab_run_artifacts_endpoint.call_with_http_info(**kwargs) + + def list_model_lab_run_facet_keys(self, filter_project_id: int, ) -> ModelLabFacetKeysResponse: + """List Model Lab run facet keys. + + List all available facet keys for filtering Model Lab runs. + + :param filter_project_id: Filter by project ID. + :type filter_project_id: int + :rtype: ModelLabFacetKeysResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_project_id"] = filter_project_id + + return self._list_model_lab_run_facet_keys_endpoint.call_with_http_info(**kwargs) + + def list_model_lab_run_facet_values(self, filter_project_id: int, facet_type: ModelLabFacetType, facet_name: str, ) -> ModelLabFacetValuesResponse: + """List Model Lab run facet values. + + List available facet values for a specific run facet key. + + :param filter_project_id: Filter by project ID. + :type filter_project_id: int + :param facet_type: Facet type. Valid values: parameter, attribute, tag, metric. + :type facet_type: ModelLabFacetType + :param facet_name: Facet name. + :type facet_name: str + :rtype: ModelLabFacetValuesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_project_id"] = filter_project_id + + kwargs["facet_type"] = facet_type + + kwargs["facet_name"] = facet_name + + return self._list_model_lab_run_facet_values_endpoint.call_with_http_info(**kwargs) + + def list_model_lab_runs(self, *, filter_id: Union[str, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_owner_id: Union[str, UnsetType]=unset, filter_status: Union[ModelLabRunStatus, UnsetType]=unset, filter_project_id: Union[int, UnsetType]=unset, filter_tags: Union[str, UnsetType]=unset, filter_params: Union[str, UnsetType]=unset, filter_parent_run_id: Union[str, UnsetType]=unset, pinned_first: Union[bool, UnsetType]=unset, include_pinned: Union[bool, UnsetType]=unset, include_descendant_matches: Union[bool, UnsetType]=unset, sort: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> ModelLabRunsResponse: + """List Model Lab runs. + + List all Model Lab runs for the current organization. + + :param filter_id: Filter by run ID(s). Comma-separated list for multiple IDs. + :type filter_id: str, optional + :param filter: Text search filter for run name or description. + :type filter: str, optional + :param filter_owner_id: Filter by owner UUID. + :type filter_owner_id: str, optional + :param filter_status: Filter by run status. Valid values: pending, running, completed, failed, killed, unresponsive, paused. + :type filter_status: ModelLabRunStatus, optional + :param filter_project_id: Filter by project ID. + :type filter_project_id: int, optional + :param filter_tags: Filter by tags. Format: key:value,key2:value2. + :type filter_tags: str, optional + :param filter_params: Filter by params. Format: key:value,key2:>0.5,key3:true. + :type filter_params: str, optional + :param filter_parent_run_id: Filter by parent run ID. Use 'null' to return only root runs (runs with no parent). + :type filter_parent_run_id: str, optional + :param pinned_first: Sort pinned runs before non-pinned runs. Pinned runs are ordered by pin time descending. + :type pinned_first: bool, optional + :param include_pinned: Include all runs pinned by the current user, regardless of other filters. + :type include_pinned: bool, optional + :param include_descendant_matches: When true, also return runs whose descendants match the active filters. The descendant_match field in each result indicates whether the run was included via a descendant match. + :type include_descendant_matches: bool, optional + :param sort: Sort field. Valid values: name, created_at, updated_at, duration. Prefix with '-' for descending order (e.g., -updated_at). + :type sort: str, optional + :param page_size: Number of items per page. Maximum is 100. + :type page_size: int, optional + :param page_number: Page number (1-indexed). + :type page_number: int, optional + :rtype: ModelLabRunsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter is not unset: + kwargs["filter"] = filter + + if filter_owner_id is not unset: + kwargs["filter_owner_id"] = filter_owner_id + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + if filter_project_id is not unset: + kwargs["filter_project_id"] = filter_project_id + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if filter_params is not unset: + kwargs["filter_params"] = filter_params + + if filter_parent_run_id is not unset: + kwargs["filter_parent_run_id"] = filter_parent_run_id + + if pinned_first is not unset: + kwargs["pinned_first"] = pinned_first + + if include_pinned is not unset: + kwargs["include_pinned"] = include_pinned + + if include_descendant_matches is not unset: + kwargs["include_descendant_matches"] = include_descendant_matches + + if sort is not unset: + kwargs["sort"] = sort + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_model_lab_runs_endpoint.call_with_http_info(**kwargs) + + def pin_model_lab_run(self, run_id: int, ) -> None: + """Pin a Model Lab run. + + Pin a Model Lab run for the current user. + + :param run_id: The ID of the Model Lab run. + :type run_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["run_id"] = run_id + + return self._pin_model_lab_run_endpoint.call_with_http_info(**kwargs) + + def star_model_lab_project(self, project_id: int, ) -> None: + """Star a Model Lab project. + + Star a Model Lab project for the current user. + + :param project_id: The ID of the Model Lab project. + :type project_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._star_model_lab_project_endpoint.call_with_http_info(**kwargs) + + def unpin_model_lab_run(self, run_id: int, ) -> None: + """Unpin a Model Lab run. + + Remove the pin from a Model Lab run for the current user. + + :param run_id: The ID of the Model Lab run. + :type run_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["run_id"] = run_id + + return self._unpin_model_lab_run_endpoint.call_with_http_info(**kwargs) + + def unstar_model_lab_project(self, project_id: int, ) -> None: + """Remove star from a Model Lab project. + + Remove the star from a Model Lab project for the current user. + + :param project_id: The ID of the Model Lab project. + :type project_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["project_id"] = project_id + + return self._unstar_model_lab_project_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/monitors_api.py b/datadog_api_client/v2/api/monitors_api.py new file mode 100644 index 0000000000..111242d385 --- /dev/null +++ b/datadog_api_client/v2/api/monitors_api.py @@ -0,0 +1,768 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.monitor_notification_rule_list_response import MonitorNotificationRuleListResponse +from datadog_api_client.v2.model.monitor_notification_rule_response import MonitorNotificationRuleResponse +from datadog_api_client.v2.model.monitor_notification_rule_create_request import MonitorNotificationRuleCreateRequest +from datadog_api_client.v2.model.monitor_notification_rule_update_request import MonitorNotificationRuleUpdateRequest +from datadog_api_client.v2.model.monitor_config_policy_list_response import MonitorConfigPolicyListResponse +from datadog_api_client.v2.model.monitor_config_policy_response import MonitorConfigPolicyResponse +from datadog_api_client.v2.model.monitor_config_policy_create_request import MonitorConfigPolicyCreateRequest +from datadog_api_client.v2.model.monitor_config_policy_edit_request import MonitorConfigPolicyEditRequest +from datadog_api_client.v2.model.monitor_user_template_list_response import MonitorUserTemplateListResponse +from datadog_api_client.v2.model.monitor_user_template_create_response import MonitorUserTemplateCreateResponse +from datadog_api_client.v2.model.monitor_user_template_create_request import MonitorUserTemplateCreateRequest +from datadog_api_client.v2.model.monitor_user_template_response import MonitorUserTemplateResponse +from datadog_api_client.v2.model.monitor_user_template_update_request import MonitorUserTemplateUpdateRequest + + +class MonitorsApi: + """ + `Monitors `_ allow you to watch a metric or check that you care about and + notifies your team when a defined threshold has exceeded. + + For more information, see `Creating Monitors `_ and + `Tag Policies `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_monitor_config_policy_endpoint = _Endpoint( + settings={ + "response_type": (MonitorConfigPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/policy", + "operation_id": "create_monitor_config_policy", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MonitorConfigPolicyCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_monitor_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (MonitorNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/notification_rule", + "operation_id": "create_monitor_notification_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MonitorNotificationRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_monitor_user_template_endpoint = _Endpoint( + settings={ + "response_type": (MonitorUserTemplateCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/template", + "operation_id": "create_monitor_user_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MonitorUserTemplateCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_monitor_config_policy_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/policy/{policy_id}", + "operation_id": "delete_monitor_config_policy", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_monitor_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/notification_rule/{rule_id}", + "operation_id": "delete_monitor_notification_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_monitor_user_template_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/template/{template_id}", + "operation_id": "delete_monitor_user_template", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (str,), + "attribute": "template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_monitor_config_policy_endpoint = _Endpoint( + settings={ + "response_type": (MonitorConfigPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/monitor/policy/{policy_id}", + "operation_id": "get_monitor_config_policy", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_monitor_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (MonitorNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/monitor/notification_rule/{rule_id}", + "operation_id": "get_monitor_notification_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_monitor_notification_rules_endpoint = _Endpoint( + settings={ + "response_type": (MonitorNotificationRuleListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/monitor/notification_rule", + "operation_id": "get_monitor_notification_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page": { + "validation": { + "inclusive_maximum": 1000000, + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "per_page": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "per_page", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "filters": { + "openapi_types": (str,), + "attribute": "filters", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_monitor_user_template_endpoint = _Endpoint( + settings={ + "response_type": (MonitorUserTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/monitor/template/{template_id}", + "operation_id": "get_monitor_user_template", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (str,), + "attribute": "template_id", + "location": "path", + }, + "with_all_versions": { + "openapi_types": (bool,), + "attribute": "with_all_versions", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_monitor_config_policies_endpoint = _Endpoint( + settings={ + "response_type": (MonitorConfigPolicyListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/monitor/policy", + "operation_id": "list_monitor_config_policies", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_monitor_user_templates_endpoint = _Endpoint( + settings={ + "response_type": (MonitorUserTemplateListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/monitor/template", + "operation_id": "list_monitor_user_templates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_monitor_config_policy_endpoint = _Endpoint( + settings={ + "response_type": (MonitorConfigPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/policy/{policy_id}", + "operation_id": "update_monitor_config_policy", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MonitorConfigPolicyEditRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_monitor_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (MonitorNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/notification_rule/{rule_id}", + "operation_id": "update_monitor_notification_rule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MonitorNotificationRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_monitor_user_template_endpoint = _Endpoint( + settings={ + "response_type": (MonitorUserTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/template/{template_id}", + "operation_id": "update_monitor_user_template", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (str,), + "attribute": "template_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MonitorUserTemplateUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_existing_monitor_user_template_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/template/{template_id}/validate", + "operation_id": "validate_existing_monitor_user_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (str,), + "attribute": "template_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MonitorUserTemplateUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_monitor_user_template_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/monitor/template/validate", + "operation_id": "validate_monitor_user_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MonitorUserTemplateCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_monitor_config_policy(self, body: MonitorConfigPolicyCreateRequest, ) -> MonitorConfigPolicyResponse: + """Create a monitor configuration policy. + + Create a monitor configuration policy. + + :param body: Create a monitor configuration policy request body. + :type body: MonitorConfigPolicyCreateRequest + :rtype: MonitorConfigPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_monitor_config_policy_endpoint.call_with_http_info(**kwargs) + + def create_monitor_notification_rule(self, body: MonitorNotificationRuleCreateRequest, ) -> MonitorNotificationRuleResponse: + """Create a monitor notification rule. + + Creates a monitor notification rule. + + :param body: Request body to create a monitor notification rule. + :type body: MonitorNotificationRuleCreateRequest + :rtype: MonitorNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_monitor_notification_rule_endpoint.call_with_http_info(**kwargs) + + def create_monitor_user_template(self, body: MonitorUserTemplateCreateRequest, ) -> MonitorUserTemplateCreateResponse: + """Create a monitor user template. + + Create a new monitor user template. + + :type body: MonitorUserTemplateCreateRequest + :rtype: MonitorUserTemplateCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_monitor_user_template_endpoint.call_with_http_info(**kwargs) + + def delete_monitor_config_policy(self, policy_id: str, ) -> None: + """Delete a monitor configuration policy. + + Delete a monitor configuration policy. + + :param policy_id: ID of the monitor configuration policy. + :type policy_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + return self._delete_monitor_config_policy_endpoint.call_with_http_info(**kwargs) + + def delete_monitor_notification_rule(self, rule_id: str, ) -> None: + """Delete a monitor notification rule. + + Deletes a monitor notification rule by ``rule_id``. + + :param rule_id: ID of the monitor notification rule to delete. + :type rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._delete_monitor_notification_rule_endpoint.call_with_http_info(**kwargs) + + def delete_monitor_user_template(self, template_id: str, ) -> None: + """Delete a monitor user template. + + Delete an existing monitor user template by its ID. + + :param template_id: ID of the monitor user template. + :type template_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + return self._delete_monitor_user_template_endpoint.call_with_http_info(**kwargs) + + def get_monitor_config_policy(self, policy_id: str, ) -> MonitorConfigPolicyResponse: + """Get a monitor configuration policy. + + Get a monitor configuration policy by ``policy_id``. + + :param policy_id: ID of the monitor configuration policy. + :type policy_id: str + :rtype: MonitorConfigPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + return self._get_monitor_config_policy_endpoint.call_with_http_info(**kwargs) + + def get_monitor_notification_rule(self, rule_id: str, *, include: Union[str, UnsetType]=unset, ) -> MonitorNotificationRuleResponse: + """Get a monitor notification rule. + + Returns a monitor notification rule by ``rule_id``. + + :param rule_id: ID of the monitor notification rule to fetch. + :type rule_id: str + :param include: Comma-separated list of resource paths for related resources to include in the response. Supported resource + path is ``created_by``. + :type include: str, optional + :rtype: MonitorNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + if include is not unset: + kwargs["include"] = include + + return self._get_monitor_notification_rule_endpoint.call_with_http_info(**kwargs) + + def get_monitor_notification_rules(self, *, page: Union[int, UnsetType]=unset, per_page: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filters: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> MonitorNotificationRuleListResponse: + """Get all monitor notification rules. + + Returns a list of all monitor notification rules. + + :param page: The page to start paginating from. If ``page`` is not specified, the argument defaults to the first page. + :type page: int, optional + :param per_page: The number of rules to return per page. If ``per_page`` is not specified, the argument defaults to 100. + :type per_page: int, optional + :param sort: String for sort order, composed of field and sort order separated by a colon, for example ``name:asc``. Supported sort directions: ``asc`` , ``desc``. Supported fields: ``name`` , ``created_at``. + :type sort: str, optional + :param filters: JSON-encoded filter object. Supported keys: + + * ``text`` : Free-text query matched against rule name, tags, and recipients. + * ``tags`` : Array of strings. Return rules that have any of these tags. + * ``recipients`` : Array of strings. Return rules that have any of these recipients. + :type filters: str, optional + :param include: Comma-separated list of resource paths for related resources to include in the response. Supported resource + path is ``created_by``. + :type include: str, optional + :rtype: MonitorNotificationRuleListResponse + """ + kwargs: Dict[str, Any] = {} + if page is not unset: + kwargs["page"] = page + + if per_page is not unset: + kwargs["per_page"] = per_page + + if sort is not unset: + kwargs["sort"] = sort + + if filters is not unset: + kwargs["filters"] = filters + + if include is not unset: + kwargs["include"] = include + + return self._get_monitor_notification_rules_endpoint.call_with_http_info(**kwargs) + + def get_monitor_user_template(self, template_id: str, *, with_all_versions: Union[bool, UnsetType]=unset, ) -> MonitorUserTemplateResponse: + """Get a monitor user template. + + Retrieve a monitor user template by its ID. + + :param template_id: ID of the monitor user template. + :type template_id: str + :param with_all_versions: Whether to include all versions of the template in the response in the versions field. + :type with_all_versions: bool, optional + :rtype: MonitorUserTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + if with_all_versions is not unset: + kwargs["with_all_versions"] = with_all_versions + + return self._get_monitor_user_template_endpoint.call_with_http_info(**kwargs) + + def list_monitor_config_policies(self, ) -> MonitorConfigPolicyListResponse: + """Get all monitor configuration policies. + + Get all monitor configuration policies. + + :rtype: MonitorConfigPolicyListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_monitor_config_policies_endpoint.call_with_http_info(**kwargs) + + def list_monitor_user_templates(self, ) -> MonitorUserTemplateListResponse: + """Get all monitor user templates. + + Retrieve all monitor user templates. + + :rtype: MonitorUserTemplateListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_monitor_user_templates_endpoint.call_with_http_info(**kwargs) + + def update_monitor_config_policy(self, policy_id: str, body: MonitorConfigPolicyEditRequest, ) -> MonitorConfigPolicyResponse: + """Edit a monitor configuration policy. + + Edit a monitor configuration policy. + + :param policy_id: ID of the monitor configuration policy. + :type policy_id: str + :param body: Description of the update. + :type body: MonitorConfigPolicyEditRequest + :rtype: MonitorConfigPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + kwargs["body"] = body + + return self._update_monitor_config_policy_endpoint.call_with_http_info(**kwargs) + + def update_monitor_notification_rule(self, rule_id: str, body: MonitorNotificationRuleUpdateRequest, ) -> MonitorNotificationRuleResponse: + """Update a monitor notification rule. + + Updates a monitor notification rule by ``rule_id``. + + :param rule_id: ID of the monitor notification rule to update. + :type rule_id: str + :param body: Request body to update the monitor notification rule. + :type body: MonitorNotificationRuleUpdateRequest + :rtype: MonitorNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_monitor_notification_rule_endpoint.call_with_http_info(**kwargs) + + def update_monitor_user_template(self, template_id: str, body: MonitorUserTemplateUpdateRequest, ) -> MonitorUserTemplateResponse: + """Update a monitor user template to a new version. + + Creates a new version of an existing monitor user template. + + :param template_id: ID of the monitor user template. + :type template_id: str + :type body: MonitorUserTemplateUpdateRequest + :rtype: MonitorUserTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + kwargs["body"] = body + + return self._update_monitor_user_template_endpoint.call_with_http_info(**kwargs) + + def validate_existing_monitor_user_template(self, template_id: str, body: MonitorUserTemplateUpdateRequest, ) -> None: + """Validate an existing monitor user template. + + Validate the structure and content of an existing monitor user template being updated to a new version. + + :param template_id: ID of the monitor user template. + :type template_id: str + :type body: MonitorUserTemplateUpdateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + kwargs["body"] = body + + return self._validate_existing_monitor_user_template_endpoint.call_with_http_info(**kwargs) + + def validate_monitor_user_template(self, body: MonitorUserTemplateCreateRequest, ) -> None: + """Validate a monitor user template. + + Validate the structure and content of a monitor user template. + + :type body: MonitorUserTemplateCreateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._validate_monitor_user_template_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/network_device_monitoring_api.py b/datadog_api_client/v2/api/network_device_monitoring_api.py new file mode 100644 index 0000000000..19ec03fd21 --- /dev/null +++ b/datadog_api_client/v2/api/network_device_monitoring_api.py @@ -0,0 +1,398 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_devices_response import ListDevicesResponse +from datadog_api_client.v2.model.devices_list_data import DevicesListData +from datadog_api_client.v2.model.get_device_response import GetDeviceResponse +from datadog_api_client.v2.model.get_interfaces_response import GetInterfacesResponse +from datadog_api_client.v2.model.list_tags_response import ListTagsResponse +from datadog_api_client.v2.model.list_interface_tags_response import ListInterfaceTagsResponse + + +class NetworkDeviceMonitoringApi: + """ + The Network Device Monitoring API allows you to fetch devices and interfaces and their attributes. See the `Network Device Monitoring page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_device_endpoint = _Endpoint( + settings={ + "response_type": (GetDeviceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/ndm/devices/{device_id}", + "operation_id": "get_device", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "device_id": { + "required": True, + "openapi_types": (str,), + "attribute": "device_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_interfaces_endpoint = _Endpoint( + settings={ + "response_type": (GetInterfacesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/ndm/interfaces", + "operation_id": "get_interfaces", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "device_id": { + "required": True, + "openapi_types": (str,), + "attribute": "device_id", + "location": "query", + }, + "get_ip_addresses": { + "openapi_types": (bool,), + "attribute": "get_ip_addresses", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_devices_endpoint = _Endpoint( + settings={ + "response_type": (ListDevicesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/ndm/devices", + "operation_id": "list_devices", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "filter_tag": { + "openapi_types": (str,), + "attribute": "filter[tag]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_device_user_tags_endpoint = _Endpoint( + settings={ + "response_type": (ListTagsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/ndm/tags/devices/{device_id}", + "operation_id": "list_device_user_tags", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "device_id": { + "required": True, + "openapi_types": (str,), + "attribute": "device_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_interface_user_tags_endpoint = _Endpoint( + settings={ + "response_type": (ListInterfaceTagsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/ndm/tags/interfaces/{interface_id}", + "operation_id": "list_interface_user_tags", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "interface_id": { + "required": True, + "openapi_types": (str,), + "attribute": "interface_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_device_user_tags_endpoint = _Endpoint( + settings={ + "response_type": (ListTagsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/ndm/tags/devices/{device_id}", + "operation_id": "update_device_user_tags", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "device_id": { + "required": True, + "openapi_types": (str,), + "attribute": "device_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ListTagsResponse,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_interface_user_tags_endpoint = _Endpoint( + settings={ + "response_type": (ListInterfaceTagsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/ndm/tags/interfaces/{interface_id}", + "operation_id": "update_interface_user_tags", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "interface_id": { + "required": True, + "openapi_types": (str,), + "attribute": "interface_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ListInterfaceTagsResponse,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def get_device(self, device_id: str, ) -> GetDeviceResponse: + """Get the device details. + + Get the device details. + + :param device_id: The id of the device to fetch. + :type device_id: str + :rtype: GetDeviceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["device_id"] = device_id + + return self._get_device_endpoint.call_with_http_info(**kwargs) + + def get_interfaces(self, device_id: str, *, get_ip_addresses: Union[bool, UnsetType]=unset, ) -> GetInterfacesResponse: + """Get the list of interfaces of the device. + + Get the list of interfaces of the device. + + :param device_id: The ID of the device to get interfaces from. + :type device_id: str + :param get_ip_addresses: Whether to get the IP addresses of the interfaces. + :type get_ip_addresses: bool, optional + :rtype: GetInterfacesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["device_id"] = device_id + + if get_ip_addresses is not unset: + kwargs["get_ip_addresses"] = get_ip_addresses + + return self._get_interfaces_endpoint.call_with_http_info(**kwargs) + + def list_devices(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter_tag: Union[str, UnsetType]=unset, ) -> ListDevicesResponse: + """Get the list of devices. + + Get the list of devices. + + :param page_size: Size for a given page. The maximum allowed value is 500. Defaults to 50. + :type page_size: int, optional + :param page_number: Specific page number to return. Defaults to 0. + :type page_number: int, optional + :param sort: The field to sort the devices by. Defaults to ``name``. + :type sort: str, optional + :param filter_tag: Filter devices by tag. + :type filter_tag: str, optional + :rtype: ListDevicesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter_tag is not unset: + kwargs["filter_tag"] = filter_tag + + return self._list_devices_endpoint.call_with_http_info(**kwargs) + + def list_devices_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter_tag: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[DevicesListData]: + """Get the list of devices. + + Provide a paginated version of :meth:`list_devices`, returning all items. + + :param page_size: Size for a given page. The maximum allowed value is 500. Defaults to 50. + :type page_size: int, optional + :param page_number: Specific page number to return. Defaults to 0. + :type page_number: int, optional + :param sort: The field to sort the devices by. Defaults to ``name``. + :type sort: str, optional + :param filter_tag: Filter devices by tag. + :type filter_tag: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[DevicesListData] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter_tag is not unset: + kwargs["filter_tag"] = filter_tag + + local_page_size = get_attribute_from_path(kwargs, "page_size", 50) + endpoint = self._list_devices_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_device_user_tags(self, device_id: str, ) -> ListTagsResponse: + """Get the list of tags for a device. + + Get the list of tags for a device. + + :param device_id: The id of the device to fetch tags for. + :type device_id: str + :rtype: ListTagsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["device_id"] = device_id + + return self._list_device_user_tags_endpoint.call_with_http_info(**kwargs) + + def list_interface_user_tags(self, interface_id: str, ) -> ListInterfaceTagsResponse: + """List tags for an interface. + + Returns the tags associated with the specified interface. + + :param interface_id: The ID of the interface for which to retrieve tags. + :type interface_id: str + :rtype: ListInterfaceTagsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["interface_id"] = interface_id + + return self._list_interface_user_tags_endpoint.call_with_http_info(**kwargs) + + def update_device_user_tags(self, device_id: str, body: ListTagsResponse, ) -> ListTagsResponse: + """Update the tags for a device. + + Update the tags for a device. + + :param device_id: The id of the device to update tags for. + :type device_id: str + :type body: ListTagsResponse + :rtype: ListTagsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["device_id"] = device_id + + kwargs["body"] = body + + return self._update_device_user_tags_endpoint.call_with_http_info(**kwargs) + + def update_interface_user_tags(self, interface_id: str, body: ListInterfaceTagsResponse, ) -> ListInterfaceTagsResponse: + """Update the tags for an interface. + + Updates the tags associated with the specified interface. + + :param interface_id: The ID of the interface for which to update tags. + :type interface_id: str + :type body: ListInterfaceTagsResponse + :rtype: ListInterfaceTagsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["interface_id"] = interface_id + + kwargs["body"] = body + + return self._update_interface_user_tags_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/network_health_insights_api.py b/datadog_api_client/v2/api/network_health_insights_api.py new file mode 100644 index 0000000000..bf3ade2552 --- /dev/null +++ b/datadog_api_client/v2/api/network_health_insights_api.py @@ -0,0 +1,90 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.network_health_insights_response import NetworkHealthInsightsResponse + + +class NetworkHealthInsightsApi: + """ + Analyze network health by surfacing actionable insights for services experiencing connectivity issues. + Insights are derived from DNS failure data (timeouts, NXDOMAIN, SERVFAIL, general failures), + TLS certificate health (expired, expiring soon), and security group denials. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_network_health_insights_endpoint = _Endpoint( + settings={ + "response_type": (NetworkHealthInsightsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/network-health-insights", + "operation_id": "list_network_health_insights", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "_from": { + "openapi_types": (str,), + "attribute": "from", + "location": "query", + }, + "to": { + "openapi_types": (str,), + "attribute": "to", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def list_network_health_insights(self, *, _from: Union[str, UnsetType]=unset, to: Union[str, UnsetType]=unset, ) -> NetworkHealthInsightsResponse: + """List network health insights. + + Return network health insights for the organization within the given time window. + Insights are produced by analyzing DNS failures pre-classified by ``network-dns-logger`` , + TLS certificate metrics, and denied security group connections. Each insight + identifies the client and server services involved, the type of issue, and the + magnitude of the failure observed during the query window. + + :param _from: Unix timestamp (number of seconds since epoch) of the start of the query window. + If not provided, the start of the query window will be 15 minutes before the ``to`` timestamp. + If neither ``from`` nor ``to`` are provided, the query window will be ``[now - 15m, now]``. + :type _from: str, optional + :param to: Unix timestamp (number of seconds since epoch) of the end of the query window. + If not provided, the end of the query window will be the current time. + If neither ``from`` nor ``to`` are provided, the query window will be ``[now - 15m, now]``. + :type to: str, optional + :rtype: NetworkHealthInsightsResponse + """ + kwargs: Dict[str, Any] = {} + if _from is not unset: + kwargs["_from"] = _from + + if to is not unset: + kwargs["to"] = to + + return self._list_network_health_insights_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/o_auth2_client_public_api.py b/datadog_api_client/v2/api/o_auth2_client_public_api.py new file mode 100644 index 0000000000..c343dc983b --- /dev/null +++ b/datadog_api_client/v2/api/o_auth2_client_public_api.py @@ -0,0 +1,221 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.o_auth2_well_known_sites_response import OAuth2WellKnownSitesResponse +from datadog_api_client.v2.model.o_auth_scopes_restriction_response import OAuthScopesRestrictionResponse +from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_request import UpsertOAuthScopesRestrictionRequest +from datadog_api_client.v2.model.o_auth_client_registration_response import OAuthClientRegistrationResponse +from datadog_api_client.v2.model.o_auth_client_registration_request import OAuthClientRegistrationRequest + + +class OAuth2ClientPublicApi: + """ + Configure OAuth2 clients for Datadog. + Supports RFC 7591 Dynamic Client Registration and management of OAuth2 client scopes restrictions. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_scopes_restriction_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/oauth2/clients/{client_uuid}/scopes_restriction", + "operation_id": "delete_scopes_restriction", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "client_uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "client_uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_o_auth2_well_known_sites_endpoint = _Endpoint( + settings={ + "response_type": (OAuth2WellKnownSitesResponse,), + "auth": [], + "endpoint_path": "/api/v2/oauth2/.well-known/sites", + "operation_id": "get_o_auth2_well_known_sites", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_scopes_restriction_endpoint = _Endpoint( + settings={ + "response_type": (OAuthScopesRestrictionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/oauth2/clients/{client_uuid}/scopes_restriction", + "operation_id": "get_scopes_restriction", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "client_uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "client_uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._register_o_auth_client_endpoint = _Endpoint( + settings={ + "response_type": (OAuthClientRegistrationResponse,), + "auth": [], + "endpoint_path": "/api/v2/oauth2/register", + "operation_id": "register_o_auth_client", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OAuthClientRegistrationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upsert_scopes_restriction_endpoint = _Endpoint( + settings={ + "response_type": (OAuthScopesRestrictionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/oauth2/clients/{client_uuid}/scopes_restriction", + "operation_id": "upsert_scopes_restriction", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "client_uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "client_uuid", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpsertOAuthScopesRestrictionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def delete_scopes_restriction(self, client_uuid: UUID, ) -> None: + """Delete an OAuth2 client scopes restriction. + + Delete the scopes restriction configured for the OAuth2 client. + + :param client_uuid: UUID of the OAuth2 client. + :type client_uuid: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["client_uuid"] = client_uuid + + return self._delete_scopes_restriction_endpoint.call_with_http_info(**kwargs) + + def get_o_auth2_well_known_sites(self, ) -> OAuth2WellKnownSitesResponse: + """Get OAuth2 well-known sites. + + Retrieve the list of public OAuth2 sites available for the current environment. This endpoint is used for OAuth2 discovery and returns sites where users can authenticate. + + :rtype: OAuth2WellKnownSitesResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_o_auth2_well_known_sites_endpoint.call_with_http_info(**kwargs) + + def get_scopes_restriction(self, client_uuid: UUID, ) -> OAuthScopesRestrictionResponse: + """Get an OAuth2 client scopes restriction. + + Get the scopes restriction configured for the OAuth2 client. + + :param client_uuid: UUID of the OAuth2 client. + :type client_uuid: UUID + :rtype: OAuthScopesRestrictionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["client_uuid"] = client_uuid + + return self._get_scopes_restriction_endpoint.call_with_http_info(**kwargs) + + def register_o_auth_client(self, body: OAuthClientRegistrationRequest, ) -> OAuthClientRegistrationResponse: + """Register an OAuth2 client. + + Register an OAuth2 client using the Dynamic Client Registration protocol defined in RFC 7591. + + :type body: OAuthClientRegistrationRequest + :rtype: OAuthClientRegistrationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._register_o_auth_client_endpoint.call_with_http_info(**kwargs) + + def upsert_scopes_restriction(self, client_uuid: UUID, body: UpsertOAuthScopesRestrictionRequest, ) -> OAuthScopesRestrictionResponse: + """Upsert an OAuth2 client scopes restriction. + + Create or update the scopes restriction configured for the OAuth2 client. + + :param client_uuid: UUID of the OAuth2 client. + :type client_uuid: UUID + :type body: UpsertOAuthScopesRestrictionRequest + :rtype: OAuthScopesRestrictionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["client_uuid"] = client_uuid + + kwargs["body"] = body + + return self._upsert_scopes_restriction_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/observability_pipelines_api.py b/datadog_api_client/v2/api/observability_pipelines_api.py new file mode 100644 index 0000000000..85b1cd5bb3 --- /dev/null +++ b/datadog_api_client/v2/api/observability_pipelines_api.py @@ -0,0 +1,276 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_pipelines_response import ListPipelinesResponse +from datadog_api_client.v2.model.observability_pipeline import ObservabilityPipeline +from datadog_api_client.v2.model.observability_pipeline_spec import ObservabilityPipelineSpec +from datadog_api_client.v2.model.validation_response import ValidationResponse + + +class ObservabilityPipelinesApi: + """ + Observability Pipelines allows you to collect and process logs within your own infrastructure, and then route them to downstream integrations. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_pipeline_endpoint = _Endpoint( + settings={ + "response_type": (ObservabilityPipeline,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/obs-pipelines/pipelines", + "operation_id": "create_pipeline", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ObservabilityPipelineSpec,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_pipeline_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/obs-pipelines/pipelines/{pipeline_id}", + "operation_id": "delete_pipeline", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "pipeline_id": { + "required": True, + "openapi_types": (str,), + "attribute": "pipeline_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_pipeline_endpoint = _Endpoint( + settings={ + "response_type": (ObservabilityPipeline,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/obs-pipelines/pipelines/{pipeline_id}", + "operation_id": "get_pipeline", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "pipeline_id": { + "required": True, + "openapi_types": (str,), + "attribute": "pipeline_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_pipelines_endpoint = _Endpoint( + settings={ + "response_type": (ListPipelinesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/obs-pipelines/pipelines", + "operation_id": "list_pipelines", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_pipeline_endpoint = _Endpoint( + settings={ + "response_type": (ObservabilityPipeline,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/obs-pipelines/pipelines/{pipeline_id}", + "operation_id": "update_pipeline", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "pipeline_id": { + "required": True, + "openapi_types": (str,), + "attribute": "pipeline_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ObservabilityPipeline,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_pipeline_endpoint = _Endpoint( + settings={ + "response_type": (ValidationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/obs-pipelines/pipelines/validate", + "operation_id": "validate_pipeline", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ObservabilityPipelineSpec,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_pipeline(self, body: ObservabilityPipelineSpec, ) -> ObservabilityPipeline: + """Create a new pipeline. + + Create a new pipeline. + + :type body: ObservabilityPipelineSpec + :rtype: ObservabilityPipeline + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_pipeline_endpoint.call_with_http_info(**kwargs) + + def delete_pipeline(self, pipeline_id: str, ) -> None: + """Delete a pipeline. + + Delete a pipeline. + + :param pipeline_id: The ID of the pipeline to delete. + :type pipeline_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["pipeline_id"] = pipeline_id + + return self._delete_pipeline_endpoint.call_with_http_info(**kwargs) + + def get_pipeline(self, pipeline_id: str, ) -> ObservabilityPipeline: + """Get a specific pipeline. + + Get a specific pipeline by its ID. + + :param pipeline_id: The ID of the pipeline to retrieve. + :type pipeline_id: str + :rtype: ObservabilityPipeline + """ + kwargs: Dict[str, Any] = {} + kwargs["pipeline_id"] = pipeline_id + + return self._get_pipeline_endpoint.call_with_http_info(**kwargs) + + def list_pipelines(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> ListPipelinesResponse: + """List pipelines. + + Retrieve a list of pipelines. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :rtype: ListPipelinesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_pipelines_endpoint.call_with_http_info(**kwargs) + + def update_pipeline(self, pipeline_id: str, body: ObservabilityPipeline, ) -> ObservabilityPipeline: + """Update a pipeline. + + Update a pipeline. + + :param pipeline_id: The ID of the pipeline to update. + :type pipeline_id: str + :type body: ObservabilityPipeline + :rtype: ObservabilityPipeline + """ + kwargs: Dict[str, Any] = {} + kwargs["pipeline_id"] = pipeline_id + + kwargs["body"] = body + + return self._update_pipeline_endpoint.call_with_http_info(**kwargs) + + def validate_pipeline(self, body: ObservabilityPipelineSpec, ) -> ValidationResponse: + """Validate an observability pipeline. + + Validates a pipeline configuration without creating or updating any resources. + Returns a list of validation errors, if any. + + :type body: ObservabilityPipelineSpec + :rtype: ValidationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._validate_pipeline_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/oci_integration_api.py b/datadog_api_client/v2/api/oci_integration_api.py new file mode 100644 index 0000000000..9ceb561060 --- /dev/null +++ b/datadog_api_client/v2/api/oci_integration_api.py @@ -0,0 +1,257 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.tenancy_products_list import TenancyProductsList +from datadog_api_client.v2.model.tenancy_config_list import TenancyConfigList +from datadog_api_client.v2.model.tenancy_config import TenancyConfig +from datadog_api_client.v2.model.create_tenancy_config_request import CreateTenancyConfigRequest +from datadog_api_client.v2.model.update_tenancy_config_request import UpdateTenancyConfigRequest + + +class OCIIntegrationApi: + """ + Auto-generated tag OCI Integration + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_tenancy_config_endpoint = _Endpoint( + settings={ + "response_type": (TenancyConfig,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/oci/tenancies", + "operation_id": "create_tenancy_config", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateTenancyConfigRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_tenancy_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/oci/tenancies/{tenancy_ocid}", + "operation_id": "delete_tenancy_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "tenancy_ocid": { + "required": True, + "openapi_types": (str,), + "attribute": "tenancy_ocid", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_tenancy_config_endpoint = _Endpoint( + settings={ + "response_type": (TenancyConfig,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/oci/tenancies/{tenancy_ocid}", + "operation_id": "get_tenancy_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "tenancy_ocid": { + "required": True, + "openapi_types": (str,), + "attribute": "tenancy_ocid", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_tenancy_configs_endpoint = _Endpoint( + settings={ + "response_type": (TenancyConfigList,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/oci/tenancies", + "operation_id": "get_tenancy_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tenancy_products_endpoint = _Endpoint( + settings={ + "response_type": (TenancyProductsList,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/oci/products", + "operation_id": "list_tenancy_products", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "product_keys": { + "required": True, + "openapi_types": (str,), + "attribute": "productKeys", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_tenancy_config_endpoint = _Endpoint( + settings={ + "response_type": (TenancyConfig,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/oci/tenancies/{tenancy_ocid}", + "operation_id": "update_tenancy_config", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "tenancy_ocid": { + "required": True, + "openapi_types": (str,), + "attribute": "tenancy_ocid", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateTenancyConfigRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_tenancy_config(self, body: CreateTenancyConfigRequest, ) -> TenancyConfig: + """Create tenancy config. + + Create a new tenancy config to establish monitoring and data collection from your OCI environment. Requires OCI authentication credentials and tenancy details. Warning: Datadog recommends interacting with this endpoint only through the Datadog web UI to ensure all necessary OCI resources have been created and configured properly. + + :type body: CreateTenancyConfigRequest + :rtype: TenancyConfig + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_tenancy_config_endpoint.call_with_http_info(**kwargs) + + def delete_tenancy_config(self, tenancy_ocid: str, ) -> None: + """Delete tenancy config. + + Delete an existing tenancy config. This will stop all data collection from the specified OCI tenancy and remove the stored configuration. This operation cannot be undone. + + :param tenancy_ocid: The OCID of the tenancy config to delete. + :type tenancy_ocid: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["tenancy_ocid"] = tenancy_ocid + + return self._delete_tenancy_config_endpoint.call_with_http_info(**kwargs) + + def get_tenancy_config(self, tenancy_ocid: str, ) -> TenancyConfig: + """Get tenancy config. + + Get a single tenancy config object by its OCID. Returns detailed configuration including authentication credentials, enabled services, region settings, and collection preferences. + + :param tenancy_ocid: The OCID of the tenancy config to retrieve. + :type tenancy_ocid: str + :rtype: TenancyConfig + """ + kwargs: Dict[str, Any] = {} + kwargs["tenancy_ocid"] = tenancy_ocid + + return self._get_tenancy_config_endpoint.call_with_http_info(**kwargs) + + def get_tenancy_configs(self, ) -> TenancyConfigList: + """Get tenancy configs. + + Get a list of all configured OCI tenancy integrations. Returns basic information about each tenancy including authentication credentials, region settings, and collection preferences for metrics, logs, and resources. + + :rtype: TenancyConfigList + """ + kwargs: Dict[str, Any] = {} + return self._get_tenancy_configs_endpoint.call_with_http_info(**kwargs) + + def list_tenancy_products(self, product_keys: str, ) -> TenancyProductsList: + """List tenancy products. + + Lists the products for a given tenancy. Returns the enabled/disabled status of Datadog products (such as Cloud Security Posture Management) for specific OCI tenancies. + + :param product_keys: Comma-separated list of product keys to filter by. + :type product_keys: str + :rtype: TenancyProductsList + """ + kwargs: Dict[str, Any] = {} + kwargs["product_keys"] = product_keys + + return self._list_tenancy_products_endpoint.call_with_http_info(**kwargs) + + def update_tenancy_config(self, tenancy_ocid: str, body: UpdateTenancyConfigRequest, ) -> TenancyConfig: + """Update tenancy config. + + Update an existing tenancy config. You can modify authentication credentials, enable/disable collection types, update service filters, and change region settings. Warning: We recommend using the Datadog web UI to avoid unintended update effects. + + :param tenancy_ocid: The OCID of the tenancy config to update. + :type tenancy_ocid: str + :type body: UpdateTenancyConfigRequest + :rtype: TenancyConfig + """ + kwargs: Dict[str, Any] = {} + kwargs["tenancy_ocid"] = tenancy_ocid + + kwargs["body"] = body + + return self._update_tenancy_config_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/okta_integration_api.py b/datadog_api_client/v2/api/okta_integration_api.py new file mode 100644 index 0000000000..b89db62fed --- /dev/null +++ b/datadog_api_client/v2/api/okta_integration_api.py @@ -0,0 +1,219 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.okta_accounts_response import OktaAccountsResponse +from datadog_api_client.v2.model.okta_account_response import OktaAccountResponse +from datadog_api_client.v2.model.okta_account_request import OktaAccountRequest +from datadog_api_client.v2.model.okta_account_update_request import OktaAccountUpdateRequest + + +class OktaIntegrationApi: + """ + Configure your `Datadog Okta integration `_ directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_okta_account_endpoint = _Endpoint( + settings={ + "response_type": (OktaAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/okta/accounts", + "operation_id": "create_okta_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OktaAccountRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_okta_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/okta/accounts/{account_id}", + "operation_id": "delete_okta_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_okta_account_endpoint = _Endpoint( + settings={ + "response_type": (OktaAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/okta/accounts/{account_id}", + "operation_id": "get_okta_account", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_okta_accounts_endpoint = _Endpoint( + settings={ + "response_type": (OktaAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/okta/accounts", + "operation_id": "list_okta_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_okta_account_endpoint = _Endpoint( + settings={ + "response_type": (OktaAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integrations/okta/accounts/{account_id}", + "operation_id": "update_okta_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OktaAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_okta_account(self, body: OktaAccountRequest, ) -> OktaAccountResponse: + """Add Okta account. + + Create an Okta account. + + :type body: OktaAccountRequest + :rtype: OktaAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_okta_account_endpoint.call_with_http_info(**kwargs) + + def delete_okta_account(self, account_id: str, ) -> None: + """Delete Okta account. + + Delete an Okta account. + + :param account_id: None + :type account_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._delete_okta_account_endpoint.call_with_http_info(**kwargs) + + def get_okta_account(self, account_id: str, ) -> OktaAccountResponse: + """Get Okta account. + + Get an Okta account. + + :param account_id: None + :type account_id: str + :rtype: OktaAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._get_okta_account_endpoint.call_with_http_info(**kwargs) + + def list_okta_accounts(self, ) -> OktaAccountsResponse: + """List Okta accounts. + + List Okta accounts. + + :rtype: OktaAccountsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_okta_accounts_endpoint.call_with_http_info(**kwargs) + + def update_okta_account(self, account_id: str, body: OktaAccountUpdateRequest, ) -> OktaAccountResponse: + """Update Okta account. + + Update an Okta account. + + :param account_id: None + :type account_id: str + :type body: OktaAccountUpdateRequest + :rtype: OktaAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._update_okta_account_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/on_call_api.py b/datadog_api_client/v2/api/on_call_api.py new file mode 100644 index 0000000000..603214651d --- /dev/null +++ b/datadog_api_client/v2/api/on_call_api.py @@ -0,0 +1,1138 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.escalation_policy import EscalationPolicy +from datadog_api_client.v2.model.escalation_policy_create_request import EscalationPolicyCreateRequest +from datadog_api_client.v2.model.escalation_policy_update_request import EscalationPolicyUpdateRequest +from datadog_api_client.v2.model.schedule import Schedule +from datadog_api_client.v2.model.schedule_create_request import ScheduleCreateRequest +from datadog_api_client.v2.model.schedule_update_request import ScheduleUpdateRequest +from datadog_api_client.v2.model.shift import Shift +from datadog_api_client.v2.model.schedule_on_call_responders import ScheduleOnCallResponders +from datadog_api_client.v2.model.team_on_call_responders import TeamOnCallResponders +from datadog_api_client.v2.model.team_routing_rules import TeamRoutingRules +from datadog_api_client.v2.model.team_routing_rules_request import TeamRoutingRulesRequest +from datadog_api_client.v2.model.list_notification_channels_response import ListNotificationChannelsResponse +from datadog_api_client.v2.model.notification_channel import NotificationChannel +from datadog_api_client.v2.model.create_user_notification_channel_request import CreateUserNotificationChannelRequest +from datadog_api_client.v2.model.list_on_call_notification_rules_response import ListOnCallNotificationRulesResponse +from datadog_api_client.v2.model.on_call_notification_rule import OnCallNotificationRule +from datadog_api_client.v2.model.create_on_call_notification_rule_request import CreateOnCallNotificationRuleRequest +from datadog_api_client.v2.model.update_on_call_notification_rule_request import UpdateOnCallNotificationRuleRequest + + +class OnCallApi: + """ + Configure your `Datadog On-Call `_ + directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_on_call_escalation_policy_endpoint = _Endpoint( + settings={ + "response_type": (EscalationPolicy,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/escalation-policies", + "operation_id": "create_on_call_escalation_policy", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (EscalationPolicyCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_on_call_schedule_endpoint = _Endpoint( + settings={ + "response_type": (Schedule,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/schedules", + "operation_id": "create_on_call_schedule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (ScheduleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_user_notification_channel_endpoint = _Endpoint( + settings={ + "response_type": (NotificationChannel,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/users/{user_id}/notification-channels", + "operation_id": "create_user_notification_channel", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateUserNotificationChannelRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_user_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (OnCallNotificationRule,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/users/{user_id}/notification-rules", + "operation_id": "create_user_notification_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateOnCallNotificationRuleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_on_call_escalation_policy_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/escalation-policies/{policy_id}", + "operation_id": "delete_on_call_escalation_policy", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_on_call_schedule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/schedules/{schedule_id}", + "operation_id": "delete_on_call_schedule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "schedule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "schedule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_user_notification_channel_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/users/{user_id}/notification-channels/{channel_id}", + "operation_id": "delete_user_notification_channel", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "channel_id": { + "required": True, + "openapi_types": (str,), + "attribute": "channel_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_user_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/users/{user_id}/notification-rules/{rule_id}", + "operation_id": "delete_user_notification_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_on_call_escalation_policy_endpoint = _Endpoint( + settings={ + "response_type": (EscalationPolicy,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/escalation-policies/{policy_id}", + "operation_id": "get_on_call_escalation_policy", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_on_call_schedule_endpoint = _Endpoint( + settings={ + "response_type": (Schedule,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/schedules/{schedule_id}", + "operation_id": "get_on_call_schedule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "schedule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "schedule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_on_call_team_routing_rules_endpoint = _Endpoint( + settings={ + "response_type": (TeamRoutingRules,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/teams/{team_id}/routing-rules", + "operation_id": "get_on_call_team_routing_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_schedule_on_call_responders_endpoint = _Endpoint( + settings={ + "response_type": (ScheduleOnCallResponders,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/schedules/{schedule_id}/responders", + "operation_id": "get_schedule_on_call_responders", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "schedule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "schedule_id", + "location": "path", + }, + "filter_position": { + "openapi_types": (str,), + "attribute": "filter[position]", + "location": "query", + }, + "filter_at_ts": { + "openapi_types": (str,), + "attribute": "filter[at_ts]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_schedule_on_call_user_endpoint = _Endpoint( + settings={ + "response_type": (Shift,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/schedules/{schedule_id}/on-call", + "operation_id": "get_schedule_on_call_user", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "schedule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "schedule_id", + "location": "path", + }, + "filter_at_ts": { + "openapi_types": (str,), + "attribute": "filter[at_ts]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_on_call_users_endpoint = _Endpoint( + settings={ + "response_type": (TeamOnCallResponders,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/teams/{team_id}/on-call", + "operation_id": "get_team_on_call_users", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_user_notification_channel_endpoint = _Endpoint( + settings={ + "response_type": (NotificationChannel,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/users/{user_id}/notification-channels/{channel_id}", + "operation_id": "get_user_notification_channel", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "channel_id": { + "required": True, + "openapi_types": (str,), + "attribute": "channel_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_user_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (OnCallNotificationRule,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/users/{user_id}/notification-rules/{rule_id}", + "operation_id": "get_user_notification_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_user_notification_channels_endpoint = _Endpoint( + settings={ + "response_type": (ListNotificationChannelsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/users/{user_id}/notification-channels", + "operation_id": "list_user_notification_channels", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_user_notification_rules_endpoint = _Endpoint( + settings={ + "response_type": (ListOnCallNotificationRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/users/{user_id}/notification-rules", + "operation_id": "list_user_notification_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._set_on_call_team_routing_rules_endpoint = _Endpoint( + settings={ + "response_type": (TeamRoutingRules,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/teams/{team_id}/routing-rules", + "operation_id": "set_on_call_team_routing_rules", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (TeamRoutingRulesRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_on_call_escalation_policy_endpoint = _Endpoint( + settings={ + "response_type": (EscalationPolicy,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/escalation-policies/{policy_id}", + "operation_id": "update_on_call_escalation_policy", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (EscalationPolicyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_on_call_schedule_endpoint = _Endpoint( + settings={ + "response_type": (Schedule,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/schedules/{schedule_id}", + "operation_id": "update_on_call_schedule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "schedule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "schedule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ScheduleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_user_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (OnCallNotificationRule,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/users/{user_id}/notification-rules/{rule_id}", + "operation_id": "update_user_notification_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (UpdateOnCallNotificationRuleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_on_call_escalation_policy(self, body: EscalationPolicyCreateRequest, *, include: Union[str, UnsetType]=unset, ) -> EscalationPolicy: + """Create On-Call escalation policy. + + Create a new On-Call escalation policy + + :type body: EscalationPolicyCreateRequest + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``teams`` , ``steps`` , ``steps.targets``. + :type include: str, optional + :rtype: EscalationPolicy + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_on_call_escalation_policy_endpoint.call_with_http_info(**kwargs) + + def create_on_call_schedule(self, body: ScheduleCreateRequest, *, include: Union[str, UnsetType]=unset, ) -> Schedule: + """Create On-Call schedule. + + Create a new On-Call schedule + + :type body: ScheduleCreateRequest + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``teams`` , ``layers`` , ``layers.members`` , ``layers.members.user``. + :type include: str, optional + :rtype: Schedule + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_on_call_schedule_endpoint.call_with_http_info(**kwargs) + + def create_user_notification_channel(self, user_id: str, body: CreateUserNotificationChannelRequest, ) -> NotificationChannel: + """Create an On-Call notification channel for a user. + + Create a new notification channel for a user. The authenticated user must be the target user or have the ``on_call_admin`` permission + + :param user_id: The user ID + :type user_id: str + :type body: CreateUserNotificationChannelRequest + :rtype: NotificationChannel + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + kwargs["body"] = body + + return self._create_user_notification_channel_endpoint.call_with_http_info(**kwargs) + + def create_user_notification_rule(self, user_id: str, body: CreateOnCallNotificationRuleRequest, ) -> OnCallNotificationRule: + """Create an On-Call notification rule for a user. + + Create a new notification rule for a user. The authenticated user must be the target user or have the ``on_call_admin`` permission + + :param user_id: The user ID + :type user_id: str + :type body: CreateOnCallNotificationRuleRequest + :rtype: OnCallNotificationRule + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + kwargs["body"] = body + + return self._create_user_notification_rule_endpoint.call_with_http_info(**kwargs) + + def delete_on_call_escalation_policy(self, policy_id: str, ) -> None: + """Delete On-Call escalation policy. + + Delete an On-Call escalation policy + + :param policy_id: The ID of the escalation policy + :type policy_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + return self._delete_on_call_escalation_policy_endpoint.call_with_http_info(**kwargs) + + def delete_on_call_schedule(self, schedule_id: str, ) -> None: + """Delete On-Call schedule. + + Delete an On-Call schedule + + :param schedule_id: The ID of the schedule + :type schedule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["schedule_id"] = schedule_id + + return self._delete_on_call_schedule_endpoint.call_with_http_info(**kwargs) + + def delete_user_notification_channel(self, user_id: str, channel_id: str, ) -> None: + """Delete an On-Call notification channel for a user. + + Delete a notification channel for a user. The authenticated user must be the target user or have the ``on_call_admin`` permission + + :param user_id: The user ID + :type user_id: str + :param channel_id: The channel ID + :type channel_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + kwargs["channel_id"] = channel_id + + return self._delete_user_notification_channel_endpoint.call_with_http_info(**kwargs) + + def delete_user_notification_rule(self, user_id: str, rule_id: str, ) -> None: + """Delete an On-Call notification rule for a user. + + Delete a notification rule for a user. The authenticated user must be the target user or have the ``on_call_admin`` permission + + :param user_id: The user ID + :type user_id: str + :param rule_id: The rule ID + :type rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + kwargs["rule_id"] = rule_id + + return self._delete_user_notification_rule_endpoint.call_with_http_info(**kwargs) + + def get_on_call_escalation_policy(self, policy_id: str, *, include: Union[str, UnsetType]=unset, ) -> EscalationPolicy: + """Get On-Call escalation policy. + + Get an On-Call escalation policy + + :param policy_id: The ID of the escalation policy + :type policy_id: str + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``teams`` , ``steps`` , ``steps.targets``. + :type include: str, optional + :rtype: EscalationPolicy + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + if include is not unset: + kwargs["include"] = include + + return self._get_on_call_escalation_policy_endpoint.call_with_http_info(**kwargs) + + def get_on_call_schedule(self, schedule_id: str, *, include: Union[str, UnsetType]=unset, ) -> Schedule: + """Get On-Call schedule. + + Get an On-Call schedule + + :param schedule_id: The ID of the schedule + :type schedule_id: str + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``teams`` , ``layers`` , ``layers.members`` , ``layers.members.user``. + :type include: str, optional + :rtype: Schedule + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["schedule_id"] = schedule_id + + return self._get_on_call_schedule_endpoint.call_with_http_info(**kwargs) + + def get_on_call_team_routing_rules(self, team_id: str, *, include: Union[str, UnsetType]=unset, ) -> TeamRoutingRules: + """Get On-Call team routing rules. + + Get a team's On-Call routing rules + + :param team_id: The team ID + :type team_id: str + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``rules`` , ``rules.policy``. + :type include: str, optional + :rtype: TeamRoutingRules + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + if include is not unset: + kwargs["include"] = include + + return self._get_on_call_team_routing_rules_endpoint.call_with_http_info(**kwargs) + + def get_schedule_on_call_responders(self, schedule_id: str, *, include: Union[str, UnsetType]=unset, filter_position: Union[str, UnsetType]=unset, filter_at_ts: Union[str, UnsetType]=unset, ) -> ScheduleOnCallResponders: + """Get on-call responders for a schedule. + + Retrieves the on-call responders for the specified schedule, grouped by position (previous, current, next), at a given time. Supports schedules with multiple concurrent on-call responders at a position, by returning a list of shifts per position. + + :param schedule_id: The ID of the schedule. + :type schedule_id: str + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``schedule`` , ``responders`` , ``responders.shifts`` , ``responders.shifts.user``. + :type include: str, optional + :param filter_position: Comma-separated list of positions to retrieve. Allowed values: ``previous`` , ``current`` , ``next``. Defaults to ``current`` if omitted. + :type filter_position: str, optional + :param filter_at_ts: Retrieves the on-call responders at the given timestamp in RFC3339 format (for example, ``2025-05-07T02:53:01Z`` or ``2025-05-07T02:53:01+00:00`` ). When using timezone offsets with ``+`` or ``-`` , ensure proper URL encoding ( ``+`` should be encoded as ``%2B`` ). Defaults to the current time if omitted. + :type filter_at_ts: str, optional + :rtype: ScheduleOnCallResponders + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["schedule_id"] = schedule_id + + if filter_position is not unset: + kwargs["filter_position"] = filter_position + + if filter_at_ts is not unset: + kwargs["filter_at_ts"] = filter_at_ts + + return self._get_schedule_on_call_responders_endpoint.call_with_http_info(**kwargs) + + def get_schedule_on_call_user(self, schedule_id: str, *, include: Union[str, UnsetType]=unset, filter_at_ts: Union[str, UnsetType]=unset, ) -> Shift: + """Get scheduled on-call user. **Deprecated**. + + Retrieves the user who is on-call for the specified schedule at a given time. This endpoint does not support schedules with multiple concurrent on-call responders at a position. Deprecated. Use ``Get on-call responders for a schedule`` instead. + + :param schedule_id: The ID of the schedule. + :type schedule_id: str + :param include: Specifies related resources to include in the response as a comma-separated list. Allowed value: ``user``. + :type include: str, optional + :param filter_at_ts: Retrieves the on-call user at the given timestamp in RFC3339 format (for example, ``2025-05-07T02:53:01Z`` or ``2025-05-07T02:53:01+00:00`` ). When using timezone offsets with ``+`` or ``-`` , ensure proper URL encoding ( ``+`` should be encoded as ``%2B`` ). Defaults to the current time if omitted. + :type filter_at_ts: str, optional + :rtype: Shift + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["schedule_id"] = schedule_id + + if filter_at_ts is not unset: + kwargs["filter_at_ts"] = filter_at_ts + + warnings.warn("get_schedule_on_call_user is deprecated", DeprecationWarning, stacklevel=2) + return self._get_schedule_on_call_user_endpoint.call_with_http_info(**kwargs) + + def get_team_on_call_users(self, team_id: str, *, include: Union[str, UnsetType]=unset, ) -> TeamOnCallResponders: + """Get team on-call users. + + Get a team's on-call users at a given time + + :param team_id: The team ID + :type team_id: str + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``responders`` , ``escalations`` , ``escalations.responders``. + :type include: str, optional + :rtype: TeamOnCallResponders + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["team_id"] = team_id + + return self._get_team_on_call_users_endpoint.call_with_http_info(**kwargs) + + def get_user_notification_channel(self, user_id: str, channel_id: str, ) -> NotificationChannel: + """Get an On-Call notification channel for a user. + + Get a notification channel for a user. The authenticated user must be the target user or have the ``on_call_admin`` permission + + :param user_id: The user ID + :type user_id: str + :param channel_id: The channel ID + :type channel_id: str + :rtype: NotificationChannel + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + kwargs["channel_id"] = channel_id + + return self._get_user_notification_channel_endpoint.call_with_http_info(**kwargs) + + def get_user_notification_rule(self, user_id: str, rule_id: str, *, include: Union[str, UnsetType]=unset, ) -> OnCallNotificationRule: + """Get an On-Call notification rule for a user. + + Get a notification rule for a user. The authenticated user must be the target user or have the ``on_call_admin`` permission + + :param user_id: The user ID + :type user_id: str + :param rule_id: The rule ID + :type rule_id: str + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``channel``. + :type include: str, optional + :rtype: OnCallNotificationRule + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + kwargs["rule_id"] = rule_id + + if include is not unset: + kwargs["include"] = include + + return self._get_user_notification_rule_endpoint.call_with_http_info(**kwargs) + + def list_user_notification_channels(self, user_id: str, ) -> ListNotificationChannelsResponse: + """List On-Call notification channels for a user. + + List the notification channels for a user. The authenticated user must be the target user or have the ``on_call_admin`` permission + + :param user_id: The user ID + :type user_id: str + :rtype: ListNotificationChannelsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + return self._list_user_notification_channels_endpoint.call_with_http_info(**kwargs) + + def list_user_notification_rules(self, user_id: str, *, include: Union[str, UnsetType]=unset, ) -> ListOnCallNotificationRulesResponse: + """List On-Call notification rules for a user. + + List the notification rules for a user. The authenticated user must be the target user or have the ``on_call_admin`` permission + + :param user_id: The user ID + :type user_id: str + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``channel``. + :type include: str, optional + :rtype: ListOnCallNotificationRulesResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["user_id"] = user_id + + return self._list_user_notification_rules_endpoint.call_with_http_info(**kwargs) + + def set_on_call_team_routing_rules(self, team_id: str, body: TeamRoutingRulesRequest, *, include: Union[str, UnsetType]=unset, ) -> TeamRoutingRules: + """Set On-Call team routing rules. + + Set a team's On-Call routing rules + + :param team_id: The team ID + :type team_id: str + :type body: TeamRoutingRulesRequest + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``rules`` , ``rules.policy``. + :type include: str, optional + :rtype: TeamRoutingRules + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._set_on_call_team_routing_rules_endpoint.call_with_http_info(**kwargs) + + def update_on_call_escalation_policy(self, policy_id: str, body: EscalationPolicyUpdateRequest, *, include: Union[str, UnsetType]=unset, ) -> EscalationPolicy: + """Update On-Call escalation policy. + + Update an On-Call escalation policy + + :param policy_id: The ID of the escalation policy + :type policy_id: str + :type body: EscalationPolicyUpdateRequest + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``teams`` , ``steps`` , ``steps.targets``. + :type include: str, optional + :rtype: EscalationPolicy + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_on_call_escalation_policy_endpoint.call_with_http_info(**kwargs) + + def update_on_call_schedule(self, schedule_id: str, body: ScheduleUpdateRequest, *, include: Union[str, UnsetType]=unset, ) -> Schedule: + """Update On-Call schedule. + + Update a new On-Call schedule + + :param schedule_id: The ID of the schedule + :type schedule_id: str + :type body: ScheduleUpdateRequest + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``teams`` , ``layers`` , ``layers.members`` , ``layers.members.user``. + :type include: str, optional + :rtype: Schedule + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["schedule_id"] = schedule_id + + kwargs["body"] = body + + return self._update_on_call_schedule_endpoint.call_with_http_info(**kwargs) + + def update_user_notification_rule(self, user_id: str, rule_id: str, body: UpdateOnCallNotificationRuleRequest, *, include: Union[str, UnsetType]=unset, ) -> OnCallNotificationRule: + """Update an On-Call notification rule for a user. + + Update a notification rule for a user. The authenticated user must be the target user or have the ``on_call_admin`` permission + + :param user_id: The user ID + :type user_id: str + :param rule_id: The rule ID + :type rule_id: str + :type body: UpdateOnCallNotificationRuleRequest + :param include: Comma-separated list of included relationships to be returned. Allowed values: ``channel``. + :type include: str, optional + :rtype: OnCallNotificationRule + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + kwargs["rule_id"] = rule_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_user_notification_rule_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/on_call_paging_api.py b/datadog_api_client/v2/api/on_call_paging_api.py new file mode 100644 index 0000000000..6136f33c3b --- /dev/null +++ b/datadog_api_client/v2/api/on_call_paging_api.py @@ -0,0 +1,454 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.create_page_response import CreatePageResponse +from datadog_api_client.v2.model.create_page_request import CreatePageRequest + + +class OnCallPagingApi: + """ + Trigger and manage `Datadog On-Call `_ + pages directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._acknowledge_on_call_page_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/pages/{page_id}/acknowledge", + "operation_id": "acknowledge_on_call_page", + "http_method": "POST", + "version": "v2", + "servers": [ + { + "url": "https://{site}", + "variables": { + "site": { + "description": "The globally available endpoint for On-Call.", + "default_value": "navy.oncall.datadoghq.com", + "enum_values": [ + "lava.oncall.datadoghq.com", + "saffron.oncall.datadoghq.com", + "navy.oncall.datadoghq.com", + "coral.oncall.datadoghq.com", + "teal.oncall.datadoghq.com", + "beige.oncall.datadoghq.eu", + "scarlet.oncall.datadoghq.com", + ], + }, + }, + }, + { + "url": "{protocol}://{name}", + "variables": { + "name": { + "description": "The full DNS name of the On-Call paging endpoint.", + "default_value": "navy.oncall.datadoghq.com", + "enum_values": [ + "lava.oncall.datadoghq.com", + "saffron.oncall.datadoghq.com", + "navy.oncall.datadoghq.com", + "coral.oncall.datadoghq.com", + "teal.oncall.datadoghq.com", + "beige.oncall.datadoghq.eu", + "scarlet.oncall.datadoghq.com", + ], + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "The Datadog site where the On-Call paging endpoint is deployed.", + "default_value": "datadoghq.com", + "enum_values": [ + "datadoghq.com", + "datadoghq.eu", + ], + }, + "subdomain": { + "description": "The On-Call paging subdomain.", + "default_value": "navy.oncall", + "enum_values": [ + "lava.oncall", + "saffron.oncall", + "navy.oncall", + "coral.oncall", + "teal.oncall", + "beige.oncall", + "scarlet.oncall", + ], + }, + }, + }, + ], + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._create_on_call_page_endpoint = _Endpoint( + settings={ + "response_type": (CreatePageResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/pages", + "operation_id": "create_on_call_page", + "http_method": "POST", + "version": "v2", + "servers": [ + { + "url": "https://{site}", + "variables": { + "site": { + "description": "The globally available endpoint for On-Call.", + "default_value": "navy.oncall.datadoghq.com", + "enum_values": [ + "lava.oncall.datadoghq.com", + "saffron.oncall.datadoghq.com", + "navy.oncall.datadoghq.com", + "coral.oncall.datadoghq.com", + "teal.oncall.datadoghq.com", + "beige.oncall.datadoghq.eu", + "scarlet.oncall.datadoghq.com", + ], + }, + }, + }, + { + "url": "{protocol}://{name}", + "variables": { + "name": { + "description": "The full DNS name of the On-Call paging endpoint.", + "default_value": "navy.oncall.datadoghq.com", + "enum_values": [ + "lava.oncall.datadoghq.com", + "saffron.oncall.datadoghq.com", + "navy.oncall.datadoghq.com", + "coral.oncall.datadoghq.com", + "teal.oncall.datadoghq.com", + "beige.oncall.datadoghq.eu", + "scarlet.oncall.datadoghq.com", + ], + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "The Datadog site where the On-Call paging endpoint is deployed.", + "default_value": "datadoghq.com", + "enum_values": [ + "datadoghq.com", + "datadoghq.eu", + ], + }, + "subdomain": { + "description": "The On-Call paging subdomain.", + "default_value": "navy.oncall", + "enum_values": [ + "lava.oncall", + "saffron.oncall", + "navy.oncall", + "coral.oncall", + "teal.oncall", + "beige.oncall", + "scarlet.oncall", + ], + }, + }, + }, + ], + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreatePageRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._escalate_on_call_page_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/pages/{page_id}/escalate", + "operation_id": "escalate_on_call_page", + "http_method": "POST", + "version": "v2", + "servers": [ + { + "url": "https://{site}", + "variables": { + "site": { + "description": "The globally available endpoint for On-Call.", + "default_value": "navy.oncall.datadoghq.com", + "enum_values": [ + "lava.oncall.datadoghq.com", + "saffron.oncall.datadoghq.com", + "navy.oncall.datadoghq.com", + "coral.oncall.datadoghq.com", + "teal.oncall.datadoghq.com", + "beige.oncall.datadoghq.eu", + "scarlet.oncall.datadoghq.com", + ], + }, + }, + }, + { + "url": "{protocol}://{name}", + "variables": { + "name": { + "description": "The full DNS name of the On-Call paging endpoint.", + "default_value": "navy.oncall.datadoghq.com", + "enum_values": [ + "lava.oncall.datadoghq.com", + "saffron.oncall.datadoghq.com", + "navy.oncall.datadoghq.com", + "coral.oncall.datadoghq.com", + "teal.oncall.datadoghq.com", + "beige.oncall.datadoghq.eu", + "scarlet.oncall.datadoghq.com", + ], + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "The Datadog site where the On-Call paging endpoint is deployed.", + "default_value": "datadoghq.com", + "enum_values": [ + "datadoghq.com", + "datadoghq.eu", + ], + }, + "subdomain": { + "description": "The On-Call paging subdomain.", + "default_value": "navy.oncall", + "enum_values": [ + "lava.oncall", + "saffron.oncall", + "navy.oncall", + "coral.oncall", + "teal.oncall", + "beige.oncall", + "scarlet.oncall", + ], + }, + }, + }, + ], + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._resolve_on_call_page_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/on-call/pages/{page_id}/resolve", + "operation_id": "resolve_on_call_page", + "http_method": "POST", + "version": "v2", + "servers": [ + { + "url": "https://{site}", + "variables": { + "site": { + "description": "The globally available endpoint for On-Call.", + "default_value": "navy.oncall.datadoghq.com", + "enum_values": [ + "lava.oncall.datadoghq.com", + "saffron.oncall.datadoghq.com", + "navy.oncall.datadoghq.com", + "coral.oncall.datadoghq.com", + "teal.oncall.datadoghq.com", + "beige.oncall.datadoghq.eu", + "scarlet.oncall.datadoghq.com", + ], + }, + }, + }, + { + "url": "{protocol}://{name}", + "variables": { + "name": { + "description": "The full DNS name of the On-Call paging endpoint.", + "default_value": "navy.oncall.datadoghq.com", + "enum_values": [ + "lava.oncall.datadoghq.com", + "saffron.oncall.datadoghq.com", + "navy.oncall.datadoghq.com", + "coral.oncall.datadoghq.com", + "teal.oncall.datadoghq.com", + "beige.oncall.datadoghq.eu", + "scarlet.oncall.datadoghq.com", + ], + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "The Datadog site where the On-Call paging endpoint is deployed.", + "default_value": "datadoghq.com", + "enum_values": [ + "datadoghq.com", + "datadoghq.eu", + ], + }, + "subdomain": { + "description": "The On-Call paging subdomain.", + "default_value": "navy.oncall", + "enum_values": [ + "lava.oncall", + "saffron.oncall", + "navy.oncall", + "coral.oncall", + "teal.oncall", + "beige.oncall", + "scarlet.oncall", + ], + }, + }, + }, + ], + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + def acknowledge_on_call_page(self, page_id: UUID, ) -> None: + """Acknowledge On-Call Page. + + Acknowledges an On-Call Page. + + :param page_id: The page ID. + :type page_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + return self._acknowledge_on_call_page_endpoint.call_with_http_info(**kwargs) + + def create_on_call_page(self, body: CreatePageRequest, ) -> CreatePageResponse: + """Create On-Call Page. + + Trigger a new On-Call Page. + + :type body: CreatePageRequest + :rtype: CreatePageResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_on_call_page_endpoint.call_with_http_info(**kwargs) + + def escalate_on_call_page(self, page_id: UUID, ) -> None: + """Escalate On-Call Page. + + Escalates an On-Call Page. + + :param page_id: The page ID. + :type page_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + return self._escalate_on_call_page_endpoint.call_with_http_info(**kwargs) + + def resolve_on_call_page(self, page_id: UUID, ) -> None: + """Resolve On-Call Page. + + Resolves an On-Call Page. + + :param page_id: The page ID. + :type page_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + return self._resolve_on_call_page_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/opsgenie_integration_api.py b/datadog_api_client/v2/api/opsgenie_integration_api.py new file mode 100644 index 0000000000..4592ea9214 --- /dev/null +++ b/datadog_api_client/v2/api/opsgenie_integration_api.py @@ -0,0 +1,374 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.opsgenie_accounts_response import OpsgenieAccountsResponse +from datadog_api_client.v2.model.opsgenie_account_response import OpsgenieAccountResponse +from datadog_api_client.v2.model.opsgenie_account_create_request import OpsgenieAccountCreateRequest +from datadog_api_client.v2.model.opsgenie_account_update_request import OpsgenieAccountUpdateRequest +from datadog_api_client.v2.model.opsgenie_services_response import OpsgenieServicesResponse +from datadog_api_client.v2.model.opsgenie_service_response import OpsgenieServiceResponse +from datadog_api_client.v2.model.opsgenie_service_create_request import OpsgenieServiceCreateRequest +from datadog_api_client.v2.model.opsgenie_service_update_request import OpsgenieServiceUpdateRequest + + +class OpsgenieIntegrationApi: + """ + Configure your `Datadog Opsgenie integration `_ + directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_opsgenie_account_endpoint = _Endpoint( + settings={ + "response_type": (OpsgenieAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/opsgenie/accounts", + "operation_id": "create_opsgenie_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OpsgenieAccountCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_opsgenie_service_endpoint = _Endpoint( + settings={ + "response_type": (OpsgenieServiceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/opsgenie/services", + "operation_id": "create_opsgenie_service", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OpsgenieServiceCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_opsgenie_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/opsgenie/accounts/{account_id}", + "operation_id": "delete_opsgenie_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_opsgenie_service_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/opsgenie/services/{integration_service_id}", + "operation_id": "delete_opsgenie_service", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "integration_service_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_service_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_opsgenie_service_endpoint = _Endpoint( + settings={ + "response_type": (OpsgenieServiceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/opsgenie/services/{integration_service_id}", + "operation_id": "get_opsgenie_service", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "integration_service_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_service_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_opsgenie_accounts_endpoint = _Endpoint( + settings={ + "response_type": (OpsgenieAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/opsgenie/accounts", + "operation_id": "list_opsgenie_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_opsgenie_services_endpoint = _Endpoint( + settings={ + "response_type": (OpsgenieServicesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/opsgenie/services", + "operation_id": "list_opsgenie_services", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_opsgenie_account_endpoint = _Endpoint( + settings={ + "response_type": (OpsgenieAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/opsgenie/accounts/{account_id}", + "operation_id": "update_opsgenie_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OpsgenieAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_opsgenie_service_endpoint = _Endpoint( + settings={ + "response_type": (OpsgenieServiceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/opsgenie/services/{integration_service_id}", + "operation_id": "update_opsgenie_service", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "integration_service_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_service_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OpsgenieServiceUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_opsgenie_account(self, body: OpsgenieAccountCreateRequest, ) -> OpsgenieAccountResponse: + """Create a new Opsgenie account. + + Create a new Opsgenie account in the Datadog Opsgenie integration. + + :param body: Opsgenie account payload. + :type body: OpsgenieAccountCreateRequest + :rtype: OpsgenieAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_opsgenie_account_endpoint.call_with_http_info(**kwargs) + + def create_opsgenie_service(self, body: OpsgenieServiceCreateRequest, ) -> OpsgenieServiceResponse: + """Create a new service object. + + Create a new service object in the Opsgenie integration. + + :param body: Opsgenie service payload + :type body: OpsgenieServiceCreateRequest + :rtype: OpsgenieServiceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_opsgenie_service_endpoint.call_with_http_info(**kwargs) + + def delete_opsgenie_account(self, account_id: str, ) -> None: + """Delete an Opsgenie account. + + Delete a single Opsgenie account from the Datadog Opsgenie integration. + + :param account_id: The UUID of the Opsgenie account. + :type account_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + return self._delete_opsgenie_account_endpoint.call_with_http_info(**kwargs) + + def delete_opsgenie_service(self, integration_service_id: str, ) -> None: + """Delete a single service object. + + Delete a single service object in the Datadog Opsgenie integration. + + :param integration_service_id: The UUID of the service. + :type integration_service_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_service_id"] = integration_service_id + + return self._delete_opsgenie_service_endpoint.call_with_http_info(**kwargs) + + def get_opsgenie_service(self, integration_service_id: str, ) -> OpsgenieServiceResponse: + """Get a single service object. + + Get a single service from the Datadog Opsgenie integration. + + :param integration_service_id: The UUID of the service. + :type integration_service_id: str + :rtype: OpsgenieServiceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_service_id"] = integration_service_id + + return self._get_opsgenie_service_endpoint.call_with_http_info(**kwargs) + + def list_opsgenie_accounts(self, ) -> OpsgenieAccountsResponse: + """Get all Opsgenie accounts. + + Get a list of all Opsgenie accounts from the Datadog Opsgenie integration. + + :rtype: OpsgenieAccountsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_opsgenie_accounts_endpoint.call_with_http_info(**kwargs) + + def list_opsgenie_services(self, ) -> OpsgenieServicesResponse: + """Get all service objects. + + Get a list of all services from the Datadog Opsgenie integration. + + :rtype: OpsgenieServicesResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_opsgenie_services_endpoint.call_with_http_info(**kwargs) + + def update_opsgenie_account(self, account_id: str, body: OpsgenieAccountUpdateRequest, ) -> OpsgenieAccountResponse: + """Update an Opsgenie account. + + Update a single Opsgenie account in the Datadog Opsgenie integration. + + :param account_id: The UUID of the Opsgenie account. + :type account_id: str + :param body: Opsgenie account payload. + :type body: OpsgenieAccountUpdateRequest + :rtype: OpsgenieAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._update_opsgenie_account_endpoint.call_with_http_info(**kwargs) + + def update_opsgenie_service(self, integration_service_id: str, body: OpsgenieServiceUpdateRequest, ) -> OpsgenieServiceResponse: + """Update a single service object. + + Update a single service object in the Datadog Opsgenie integration. + + :param integration_service_id: The UUID of the service. + :type integration_service_id: str + :param body: Opsgenie service payload. + :type body: OpsgenieServiceUpdateRequest + :rtype: OpsgenieServiceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_service_id"] = integration_service_id + + kwargs["body"] = body + + return self._update_opsgenie_service_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/org_authorized_clients_api.py b/datadog_api_client/v2/api/org_authorized_clients_api.py new file mode 100644 index 0000000000..7342606e6d --- /dev/null +++ b/datadog_api_client/v2/api/org_authorized_clients_api.py @@ -0,0 +1,610 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.org_authorized_clients_response import OrgAuthorizedClientsResponse +from datadog_api_client.v2.model.org_authorized_client_data import OrgAuthorizedClientData +from datadog_api_client.v2.model.org_authorized_client_response import OrgAuthorizedClientResponse +from datadog_api_client.v2.model.org_authorized_client_update_request import OrgAuthorizedClientUpdateRequest +from datadog_api_client.v2.model.user_authorized_clients_response import UserAuthorizedClientsResponse +from datadog_api_client.v2.model.org_authorized_client_user_authorizations_sort import OrgAuthorizedClientUserAuthorizationsSort +from datadog_api_client.v2.model.user_authorized_client_data import UserAuthorizedClientData + + +class OrgAuthorizedClientsApi: + """ + Manage OAuth2 client authorizations at the organization level. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_org_authorized_client_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_authorized_clients/{org_authorized_client_id}", + "operation_id": "delete_org_authorized_client", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "org_authorized_client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "org_authorized_client_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_org_authorized_client_all_user_authorizations_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_authorized_clients/{org_authorized_client_id}/user/{user_id}", + "operation_id": "delete_org_authorized_client_all_user_authorizations", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "org_authorized_client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "org_authorized_client_id", + "location": "path", + }, + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_org_authorized_client_user_authorization_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_authorized_clients/{org_authorized_client_id}/user_authorized_clients/{user_authorized_client_id}", + "operation_id": "delete_org_authorized_client_user_authorization", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "org_authorized_client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "org_authorized_client_id", + "location": "path", + }, + "user_authorized_client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_authorized_client_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_org_authorized_client_endpoint = _Endpoint( + settings={ + "response_type": (OrgAuthorizedClientResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_authorized_clients/{org_authorized_client_id}", + "operation_id": "get_org_authorized_client", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "org_authorized_client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "org_authorized_client_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "filter_user_authorized_clients_disabled": { + "openapi_types": (str,), + "attribute": "filter[user_authorized_clients][disabled]", + "location": "query", + }, + "filter_user_authorized_clients_user_disabled": { + "openapi_types": (str,), + "attribute": "filter[user_authorized_clients][user][disabled]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_authorized_clients_endpoint = _Endpoint( + settings={ + "response_type": (OrgAuthorizedClientsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_authorized_clients", + "operation_id": "list_org_authorized_clients", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_oauth2_client_name": { + "openapi_types": (str,), + "attribute": "filter[oauth2_client][name]", + "location": "query", + }, + "filter_disabled": { + "openapi_types": (str,), + "attribute": "filter[disabled]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_authorized_client_user_authorizations_endpoint = _Endpoint( + settings={ + "response_type": (UserAuthorizedClientsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_authorized_clients/{org_authorized_client_id}/user_authorized_clients", + "operation_id": "list_org_authorized_client_user_authorizations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "org_authorized_client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "org_authorized_client_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (OrgAuthorizedClientUserAuthorizationsSort,), + "attribute": "sort", + "location": "query", + }, + "filter_disabled": { + "openapi_types": (str,), + "attribute": "filter[disabled]", + "location": "query", + }, + "filter_user_name": { + "openapi_types": (str,), + "attribute": "filter[user][name]", + "location": "query", + }, + "filter_user_email": { + "openapi_types": (str,), + "attribute": "filter[user][email]", + "location": "query", + }, + "filter_user_disabled": { + "openapi_types": (str,), + "attribute": "filter[user][disabled]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_org_authorized_client_endpoint = _Endpoint( + settings={ + "response_type": (OrgAuthorizedClientResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_authorized_clients/{org_authorized_client_id}", + "operation_id": "update_org_authorized_client", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "org_authorized_client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "org_authorized_client_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OrgAuthorizedClientUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def delete_org_authorized_client(self, org_authorized_client_id: str, ) -> None: + """Delete an org authorized client. + + Disable an OAuth2 client authorization for the current organization, revoking access for all users. + + :param org_authorized_client_id: The ID of the org authorized client. + :type org_authorized_client_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["org_authorized_client_id"] = org_authorized_client_id + + return self._delete_org_authorized_client_endpoint.call_with_http_info(**kwargs) + + def delete_org_authorized_client_all_user_authorizations(self, org_authorized_client_id: str, user_id: str, ) -> None: + """Delete a user's authorizations for a client. + + Disable all authorizations for a specific user for the specified OAuth2 client in the current organization. + + :param org_authorized_client_id: The ID of the org authorized client. + :type org_authorized_client_id: str + :param user_id: The ID of the user. + :type user_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["org_authorized_client_id"] = org_authorized_client_id + + kwargs["user_id"] = user_id + + return self._delete_org_authorized_client_all_user_authorizations_endpoint.call_with_http_info(**kwargs) + + def delete_org_authorized_client_user_authorization(self, org_authorized_client_id: str, user_authorized_client_id: str, ) -> None: + """Delete a user authorization for a client. + + Disable a specific user authorization for the specified OAuth2 client in the current organization. + + :param org_authorized_client_id: The ID of the org authorized client. + :type org_authorized_client_id: str + :param user_authorized_client_id: The ID of the user authorized client. + :type user_authorized_client_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["org_authorized_client_id"] = org_authorized_client_id + + kwargs["user_authorized_client_id"] = user_authorized_client_id + + return self._delete_org_authorized_client_user_authorization_endpoint.call_with_http_info(**kwargs) + + def get_org_authorized_client(self, org_authorized_client_id: str, *, include: Union[str, UnsetType]=unset, filter_user_authorized_clients_disabled: Union[str, UnsetType]=unset, filter_user_authorized_clients_user_disabled: Union[str, UnsetType]=unset, ) -> OrgAuthorizedClientResponse: + """Get an org authorized client. + + Get a single OAuth2 client authorized for the current organization. + + :param org_authorized_client_id: The ID of the org authorized client. + :type org_authorized_client_id: str + :param include: Comma-separated list of related resources to include. + Options: ``oauth2_client`` , ``oauth2_client.app`` , ``oauth2_client.scopes`` , ``user_authorized_clients.user``. + :type include: str, optional + :param filter_user_authorized_clients_disabled: Filter included user authorized clients by disabled status. + :type filter_user_authorized_clients_disabled: str, optional + :param filter_user_authorized_clients_user_disabled: Filter included user authorized clients by user disabled status. + :type filter_user_authorized_clients_user_disabled: str, optional + :rtype: OrgAuthorizedClientResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_authorized_client_id"] = org_authorized_client_id + + if include is not unset: + kwargs["include"] = include + + if filter_user_authorized_clients_disabled is not unset: + kwargs["filter_user_authorized_clients_disabled"] = filter_user_authorized_clients_disabled + + if filter_user_authorized_clients_user_disabled is not unset: + kwargs["filter_user_authorized_clients_user_disabled"] = filter_user_authorized_clients_user_disabled + + return self._get_org_authorized_client_endpoint.call_with_http_info(**kwargs) + + def list_org_authorized_clients(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_oauth2_client_name: Union[str, UnsetType]=unset, filter_disabled: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> OrgAuthorizedClientsResponse: + """List org authorized clients. + + Get a list of all OAuth2 clients authorized for the current organization. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Field to sort results by. Options include ``oauth2_client.name``. + :type sort: str, optional + :param filter: Filter results by client name, app title, or app description. + :type filter: str, optional + :param filter_oauth2_client_name: Filter results by the OAuth2 client name. + :type filter_oauth2_client_name: str, optional + :param filter_disabled: Filter results by the org-level disabled status. + :type filter_disabled: str, optional + :param include: Comma-separated list of related resources to include. + Options: ``oauth2_client`` , ``oauth2_client.app`` , ``user_authorized_clients.user``. + :type include: str, optional + :rtype: OrgAuthorizedClientsResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + if filter_oauth2_client_name is not unset: + kwargs["filter_oauth2_client_name"] = filter_oauth2_client_name + + if filter_disabled is not unset: + kwargs["filter_disabled"] = filter_disabled + + if include is not unset: + kwargs["include"] = include + + return self._list_org_authorized_clients_endpoint.call_with_http_info(**kwargs) + + def list_org_authorized_clients_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_oauth2_client_name: Union[str, UnsetType]=unset, filter_disabled: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[OrgAuthorizedClientData]: + """List org authorized clients. + + Provide a paginated version of :meth:`list_org_authorized_clients`, returning all items. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Field to sort results by. Options include ``oauth2_client.name``. + :type sort: str, optional + :param filter: Filter results by client name, app title, or app description. + :type filter: str, optional + :param filter_oauth2_client_name: Filter results by the OAuth2 client name. + :type filter_oauth2_client_name: str, optional + :param filter_disabled: Filter results by the org-level disabled status. + :type filter_disabled: str, optional + :param include: Comma-separated list of related resources to include. + Options: ``oauth2_client`` , ``oauth2_client.app`` , ``user_authorized_clients.user``. + :type include: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[OrgAuthorizedClientData] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + if filter_oauth2_client_name is not unset: + kwargs["filter_oauth2_client_name"] = filter_oauth2_client_name + + if filter_disabled is not unset: + kwargs["filter_disabled"] = filter_disabled + + if include is not unset: + kwargs["include"] = include + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_org_authorized_clients_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_org_authorized_client_user_authorizations(self, org_authorized_client_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[OrgAuthorizedClientUserAuthorizationsSort, UnsetType]=unset, filter_disabled: Union[str, UnsetType]=unset, filter_user_name: Union[str, UnsetType]=unset, filter_user_email: Union[str, UnsetType]=unset, filter_user_disabled: Union[str, UnsetType]=unset, ) -> UserAuthorizedClientsResponse: + """List user authorizations for a client. + + Get a list of user authorizations for the specified OAuth2 client in the current organization. + + :param org_authorized_client_id: The ID of the org authorized client. + :type org_authorized_client_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Field to sort results by. Options: ``user.name`` , ``user.email`` , ``oauth2_client.name``. + :type sort: OrgAuthorizedClientUserAuthorizationsSort, optional + :param filter_disabled: Filter results by the user authorization disabled status. + :type filter_disabled: str, optional + :param filter_user_name: Filter results by user name. + :type filter_user_name: str, optional + :param filter_user_email: Filter results by user email. + :type filter_user_email: str, optional + :param filter_user_disabled: Filter results by whether the user is disabled. + :type filter_user_disabled: str, optional + :rtype: UserAuthorizedClientsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_authorized_client_id"] = org_authorized_client_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter_disabled is not unset: + kwargs["filter_disabled"] = filter_disabled + + if filter_user_name is not unset: + kwargs["filter_user_name"] = filter_user_name + + if filter_user_email is not unset: + kwargs["filter_user_email"] = filter_user_email + + if filter_user_disabled is not unset: + kwargs["filter_user_disabled"] = filter_user_disabled + + return self._list_org_authorized_client_user_authorizations_endpoint.call_with_http_info(**kwargs) + + def list_org_authorized_client_user_authorizations_with_pagination(self, org_authorized_client_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[OrgAuthorizedClientUserAuthorizationsSort, UnsetType]=unset, filter_disabled: Union[str, UnsetType]=unset, filter_user_name: Union[str, UnsetType]=unset, filter_user_email: Union[str, UnsetType]=unset, filter_user_disabled: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[UserAuthorizedClientData]: + """List user authorizations for a client. + + Provide a paginated version of :meth:`list_org_authorized_client_user_authorizations`, returning all items. + + :param org_authorized_client_id: The ID of the org authorized client. + :type org_authorized_client_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Field to sort results by. Options: ``user.name`` , ``user.email`` , ``oauth2_client.name``. + :type sort: OrgAuthorizedClientUserAuthorizationsSort, optional + :param filter_disabled: Filter results by the user authorization disabled status. + :type filter_disabled: str, optional + :param filter_user_name: Filter results by user name. + :type filter_user_name: str, optional + :param filter_user_email: Filter results by user email. + :type filter_user_email: str, optional + :param filter_user_disabled: Filter results by whether the user is disabled. + :type filter_user_disabled: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[UserAuthorizedClientData] + """ + kwargs: Dict[str, Any] = {} + kwargs["org_authorized_client_id"] = org_authorized_client_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter_disabled is not unset: + kwargs["filter_disabled"] = filter_disabled + + if filter_user_name is not unset: + kwargs["filter_user_name"] = filter_user_name + + if filter_user_email is not unset: + kwargs["filter_user_email"] = filter_user_email + + if filter_user_disabled is not unset: + kwargs["filter_user_disabled"] = filter_user_disabled + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_org_authorized_client_user_authorizations_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_org_authorized_client(self, org_authorized_client_id: str, body: OrgAuthorizedClientUpdateRequest, ) -> OrgAuthorizedClientResponse: + """Update an org authorized client. + + Enable or disable an OAuth2 client authorization for the current organization. + + :param org_authorized_client_id: The ID of the org authorized client. + :type org_authorized_client_id: str + :type body: OrgAuthorizedClientUpdateRequest + :rtype: OrgAuthorizedClientResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_authorized_client_id"] = org_authorized_client_id + + kwargs["body"] = body + + return self._update_org_authorized_client_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/org_connections_api.py b/datadog_api_client/v2/api/org_connections_api.py new file mode 100644 index 0000000000..298528fd61 --- /dev/null +++ b/datadog_api_client/v2/api/org_connections_api.py @@ -0,0 +1,222 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.org_connection_list_response import OrgConnectionListResponse +from datadog_api_client.v2.model.org_connection_response import OrgConnectionResponse +from datadog_api_client.v2.model.org_connection_create_request import OrgConnectionCreateRequest +from datadog_api_client.v2.model.org_connection_update_request import OrgConnectionUpdateRequest + + +class OrgConnectionsApi: + """ + Manage connections between organizations. Org connections allow for controlled sharing of data between different Datadog organizations. See the `Cross-Organization Visibiltiy `_ page for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_org_connections_endpoint = _Endpoint( + settings={ + "response_type": (OrgConnectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_connections", + "operation_id": "create_org_connections", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OrgConnectionCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_org_connections_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_connections/{connection_id}", + "operation_id": "delete_org_connections", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "connection_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "connection_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._list_org_connections_endpoint = _Endpoint( + settings={ + "response_type": (OrgConnectionListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_connections", + "operation_id": "list_org_connections", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "sink_org_id": { + "openapi_types": (str,), + "attribute": "sink_org_id", + "location": "query", + }, + "source_org_id": { + "openapi_types": (str,), + "attribute": "source_org_id", + "location": "query", + }, + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "offset": { + "openapi_types": (int,), + "attribute": "offset", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_org_connections_endpoint = _Endpoint( + settings={ + "response_type": (OrgConnectionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org_connections/{connection_id}", + "operation_id": "update_org_connections", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "connection_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "connection_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OrgConnectionUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_org_connections(self, body: OrgConnectionCreateRequest, ) -> OrgConnectionResponse: + """Create Org Connection. + + Create a new org connection between the current org and a target org. + + :type body: OrgConnectionCreateRequest + :rtype: OrgConnectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_org_connections_endpoint.call_with_http_info(**kwargs) + + def delete_org_connections(self, connection_id: UUID, ) -> None: + """Delete Org Connection. + + Delete an existing org connection. + + :param connection_id: The unique identifier of the org connection. + :type connection_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["connection_id"] = connection_id + + return self._delete_org_connections_endpoint.call_with_http_info(**kwargs) + + def list_org_connections(self, *, sink_org_id: Union[str, UnsetType]=unset, source_org_id: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, ) -> OrgConnectionListResponse: + """List Org Connections. + + Returns a list of org connections. + + :param sink_org_id: The Org ID of the sink org. + :type sink_org_id: str, optional + :param source_org_id: The Org ID of the source org. + :type source_org_id: str, optional + :param limit: The limit of number of entries you want to return. Default is 1000. + :type limit: int, optional + :param offset: The pagination offset which you want to query from. Default is 0. + :type offset: int, optional + :rtype: OrgConnectionListResponse + """ + kwargs: Dict[str, Any] = {} + if sink_org_id is not unset: + kwargs["sink_org_id"] = sink_org_id + + if source_org_id is not unset: + kwargs["source_org_id"] = source_org_id + + if limit is not unset: + kwargs["limit"] = limit + + if offset is not unset: + kwargs["offset"] = offset + + return self._list_org_connections_endpoint.call_with_http_info(**kwargs) + + def update_org_connections(self, connection_id: UUID, body: OrgConnectionUpdateRequest, ) -> OrgConnectionResponse: + """Update Org Connection. + + Update an existing org connection. + + :param connection_id: The unique identifier of the org connection. + :type connection_id: UUID + :type body: OrgConnectionUpdateRequest + :rtype: OrgConnectionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["connection_id"] = connection_id + + kwargs["body"] = body + + return self._update_org_connections_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/org_groups_api.py b/datadog_api_client/v2/api/org_groups_api.py new file mode 100644 index 0000000000..1e285d154a --- /dev/null +++ b/datadog_api_client/v2/api/org_groups_api.py @@ -0,0 +1,1021 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.org_group_membership_list_response import OrgGroupMembershipListResponse +from datadog_api_client.v2.model.org_group_membership_sort_option import OrgGroupMembershipSortOption +from datadog_api_client.v2.model.org_group_membership_bulk_update_request import OrgGroupMembershipBulkUpdateRequest +from datadog_api_client.v2.model.org_group_membership_response import OrgGroupMembershipResponse +from datadog_api_client.v2.model.org_group_membership_update_request import OrgGroupMembershipUpdateRequest +from datadog_api_client.v2.model.org_group_policy_list_response import OrgGroupPolicyListResponse +from datadog_api_client.v2.model.org_group_policy_sort_option import OrgGroupPolicySortOption +from datadog_api_client.v2.model.org_group_policy_response import OrgGroupPolicyResponse +from datadog_api_client.v2.model.org_group_policy_create_request import OrgGroupPolicyCreateRequest +from datadog_api_client.v2.model.org_group_policy_update_request import OrgGroupPolicyUpdateRequest +from datadog_api_client.v2.model.org_group_policy_config_list_response import OrgGroupPolicyConfigListResponse +from datadog_api_client.v2.model.org_group_policy_override_list_response import OrgGroupPolicyOverrideListResponse +from datadog_api_client.v2.model.org_group_policy_override_sort_option import OrgGroupPolicyOverrideSortOption +from datadog_api_client.v2.model.org_group_policy_override_response import OrgGroupPolicyOverrideResponse +from datadog_api_client.v2.model.org_group_policy_override_create_request import OrgGroupPolicyOverrideCreateRequest +from datadog_api_client.v2.model.org_group_policy_override_update_request import OrgGroupPolicyOverrideUpdateRequest +from datadog_api_client.v2.model.org_group_policy_suggestion_list_response import OrgGroupPolicySuggestionListResponse +from datadog_api_client.v2.model.org_group_list_response import OrgGroupListResponse +from datadog_api_client.v2.model.org_group_sort_option import OrgGroupSortOption +from datadog_api_client.v2.model.org_group_response import OrgGroupResponse +from datadog_api_client.v2.model.org_group_create_request import OrgGroupCreateRequest +from datadog_api_client.v2.model.org_group_update_request import OrgGroupUpdateRequest + + +class OrgGroupsApi: + """ + Manage organization groups, memberships, policies, policy overrides, and policy configurations. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._bulk_update_org_group_memberships_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupMembershipListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_memberships/bulk", + "operation_id": "bulk_update_org_group_memberships", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OrgGroupMembershipBulkUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_org_group_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_groups", + "operation_id": "create_org_group", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OrgGroupCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_org_group_policy_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policies", + "operation_id": "create_org_group_policy", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OrgGroupPolicyCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_org_group_policy_override_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicyOverrideResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policy_overrides", + "operation_id": "create_org_group_policy_override", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OrgGroupPolicyOverrideCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_org_group_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_groups/{org_group_id}", + "operation_id": "delete_org_group", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "org_group_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_org_group_policy_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policies/{org_group_policy_id}", + "operation_id": "delete_org_group_policy", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "org_group_policy_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_policy_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_org_group_policy_override_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policy_overrides/{org_group_policy_override_id}", + "operation_id": "delete_org_group_policy_override", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "org_group_policy_override_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_policy_override_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_org_group_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_groups/{org_group_id}", + "operation_id": "get_org_group", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "org_group_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_org_group_membership_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupMembershipResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_memberships/{org_group_membership_id}", + "operation_id": "get_org_group_membership", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "org_group_membership_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_membership_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_org_group_policy_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policies/{org_group_policy_id}", + "operation_id": "get_org_group_policy", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "org_group_policy_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_policy_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_org_group_policy_override_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicyOverrideResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policy_overrides/{org_group_policy_override_id}", + "operation_id": "get_org_group_policy_override", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "org_group_policy_override_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_policy_override_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_group_memberships_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupMembershipListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_memberships", + "operation_id": "list_org_group_memberships", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_org_group_id": { + "openapi_types": (UUID,), + "attribute": "filter[org_group_id]", + "location": "query", + }, + "filter_org_uuid": { + "openapi_types": (UUID,), + "attribute": "filter[org_uuid]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "sort": { + "openapi_types": (OrgGroupMembershipSortOption,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_group_policies_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicyListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policies", + "operation_id": "list_org_group_policies", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_org_group_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "filter[org_group_id]", + "location": "query", + }, + "filter_policy_name": { + "openapi_types": (str,), + "attribute": "filter[policy_name]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "sort": { + "openapi_types": (OrgGroupPolicySortOption,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_group_policy_configs_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicyConfigListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policy_configs", + "operation_id": "list_org_group_policy_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_group_policy_overrides_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicyOverrideListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policy_overrides", + "operation_id": "list_org_group_policy_overrides", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_org_group_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "filter[org_group_id]", + "location": "query", + }, + "filter_policy_id": { + "openapi_types": (UUID,), + "attribute": "filter[policy_id]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "sort": { + "openapi_types": (OrgGroupPolicyOverrideSortOption,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_group_policy_suggestions_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicySuggestionListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policy_suggestions", + "operation_id": "list_org_group_policy_suggestions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_org_group_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "filter[org_group_id]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_groups_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_groups", + "operation_id": "list_org_groups", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "sort": { + "openapi_types": (OrgGroupSortOption,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_org_group_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_groups/{org_group_id}", + "operation_id": "update_org_group", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "org_group_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OrgGroupUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_org_group_membership_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupMembershipResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_memberships/{org_group_membership_id}", + "operation_id": "update_org_group_membership", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "org_group_membership_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_membership_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OrgGroupMembershipUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_org_group_policy_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policies/{org_group_policy_id}", + "operation_id": "update_org_group_policy", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "org_group_policy_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_policy_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OrgGroupPolicyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_org_group_policy_override_endpoint = _Endpoint( + settings={ + "response_type": (OrgGroupPolicyOverrideResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_group_policy_overrides/{org_group_policy_override_id}", + "operation_id": "update_org_group_policy_override", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "org_group_policy_override_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "org_group_policy_override_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OrgGroupPolicyOverrideUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def bulk_update_org_group_memberships(self, body: OrgGroupMembershipBulkUpdateRequest, ) -> OrgGroupMembershipListResponse: + """Bulk update org group memberships. + + Move a batch of organizations from one org group to another. This is an atomic operation. Maximum 100 orgs per request. + + :type body: OrgGroupMembershipBulkUpdateRequest + :rtype: OrgGroupMembershipListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_update_org_group_memberships_endpoint.call_with_http_info(**kwargs) + + def create_org_group(self, body: OrgGroupCreateRequest, ) -> OrgGroupResponse: + """Create an org group. + + Create a new organization group. + + :type body: OrgGroupCreateRequest + :rtype: OrgGroupResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_org_group_endpoint.call_with_http_info(**kwargs) + + def create_org_group_policy(self, body: OrgGroupPolicyCreateRequest, ) -> OrgGroupPolicyResponse: + """Create an org group policy. + + Create a new policy for an organization group. + + :type body: OrgGroupPolicyCreateRequest + :rtype: OrgGroupPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_org_group_policy_endpoint.call_with_http_info(**kwargs) + + def create_org_group_policy_override(self, body: OrgGroupPolicyOverrideCreateRequest, ) -> OrgGroupPolicyOverrideResponse: + """Create an org group policy override. + + Create a new policy override for an organization within an org group. + + :type body: OrgGroupPolicyOverrideCreateRequest + :rtype: OrgGroupPolicyOverrideResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_org_group_policy_override_endpoint.call_with_http_info(**kwargs) + + def delete_org_group(self, org_group_id: UUID, ) -> None: + """Delete an org group. + + Delete an organization group by its ID. + + :param org_group_id: The ID of the org group. + :type org_group_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_id"] = org_group_id + + return self._delete_org_group_endpoint.call_with_http_info(**kwargs) + + def delete_org_group_policy(self, org_group_policy_id: UUID, ) -> None: + """Delete an org group policy. + + Delete an organization group policy by its ID. + + :param org_group_policy_id: The ID of the org group policy. + :type org_group_policy_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_policy_id"] = org_group_policy_id + + return self._delete_org_group_policy_endpoint.call_with_http_info(**kwargs) + + def delete_org_group_policy_override(self, org_group_policy_override_id: UUID, ) -> None: + """Delete an org group policy override. + + Delete an organization group policy override by its ID. + + :param org_group_policy_override_id: The ID of the org group policy override. + :type org_group_policy_override_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_policy_override_id"] = org_group_policy_override_id + + return self._delete_org_group_policy_override_endpoint.call_with_http_info(**kwargs) + + def get_org_group(self, org_group_id: UUID, ) -> OrgGroupResponse: + """Get an org group. + + Get a specific organization group by its ID. + + :param org_group_id: The ID of the org group. + :type org_group_id: UUID + :rtype: OrgGroupResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_id"] = org_group_id + + return self._get_org_group_endpoint.call_with_http_info(**kwargs) + + def get_org_group_membership(self, org_group_membership_id: UUID, ) -> OrgGroupMembershipResponse: + """Get an org group membership. + + Get a specific organization group membership by its ID. + + :param org_group_membership_id: The ID of the org group membership. + :type org_group_membership_id: UUID + :rtype: OrgGroupMembershipResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_membership_id"] = org_group_membership_id + + return self._get_org_group_membership_endpoint.call_with_http_info(**kwargs) + + def get_org_group_policy(self, org_group_policy_id: UUID, ) -> OrgGroupPolicyResponse: + """Get an org group policy. + + Get a specific organization group policy by its ID. + + :param org_group_policy_id: The ID of the org group policy. + :type org_group_policy_id: UUID + :rtype: OrgGroupPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_policy_id"] = org_group_policy_id + + return self._get_org_group_policy_endpoint.call_with_http_info(**kwargs) + + def get_org_group_policy_override(self, org_group_policy_override_id: UUID, ) -> OrgGroupPolicyOverrideResponse: + """Get an org group policy override. + + Get a specific organization group policy override by its ID. + + :param org_group_policy_override_id: The ID of the org group policy override. + :type org_group_policy_override_id: UUID + :rtype: OrgGroupPolicyOverrideResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_policy_override_id"] = org_group_policy_override_id + + return self._get_org_group_policy_override_endpoint.call_with_http_info(**kwargs) + + def list_org_group_memberships(self, *, filter_org_group_id: Union[UUID, UnsetType]=unset, filter_org_uuid: Union[UUID, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, sort: Union[OrgGroupMembershipSortOption, UnsetType]=unset, ) -> OrgGroupMembershipListResponse: + """List org group memberships. + + List organization group memberships. Filter by org group ID or org UUID. At least one of ``filter[org_group_id]`` or ``filter[org_uuid]`` must be provided. When filtering by org UUID, returns a single-item list with the membership for that org. + + :param filter_org_group_id: Filter memberships by org group ID. Required when ``filter[org_uuid]`` is not provided. + :type filter_org_group_id: UUID, optional + :param filter_org_uuid: Filter memberships by org UUID. Returns a single-item list. + :type filter_org_uuid: UUID, optional + :param page_number: The page number to return. + :type page_number: int, optional + :param page_size: The number of items per page. Maximum is 1000. + :type page_size: int, optional + :param sort: Field to sort memberships by. Supported values: ``name`` , ``uuid`` , ``-name`` , ``-uuid``. Defaults to ``uuid``. + :type sort: OrgGroupMembershipSortOption, optional + :rtype: OrgGroupMembershipListResponse + """ + kwargs: Dict[str, Any] = {} + if filter_org_group_id is not unset: + kwargs["filter_org_group_id"] = filter_org_group_id + + if filter_org_uuid is not unset: + kwargs["filter_org_uuid"] = filter_org_uuid + + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_org_group_memberships_endpoint.call_with_http_info(**kwargs) + + def list_org_group_policies(self, filter_org_group_id: UUID, *, filter_policy_name: Union[str, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, sort: Union[OrgGroupPolicySortOption, UnsetType]=unset, ) -> OrgGroupPolicyListResponse: + """List org group policies. + + List policies for an organization group. Requires a filter on org group ID. + + :param filter_org_group_id: Filter policies by org group ID. + :type filter_org_group_id: UUID + :param filter_policy_name: Filter policies by policy name. + :type filter_policy_name: str, optional + :param page_number: The page number to return. + :type page_number: int, optional + :param page_size: The number of items per page. Maximum is 1000. + :type page_size: int, optional + :param sort: Field to sort policies by. Supported values: ``id`` , ``name`` , ``-id`` , ``-name``. Defaults to ``id``. + :type sort: OrgGroupPolicySortOption, optional + :rtype: OrgGroupPolicyListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_org_group_id"] = filter_org_group_id + + if filter_policy_name is not unset: + kwargs["filter_policy_name"] = filter_policy_name + + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_org_group_policies_endpoint.call_with_http_info(**kwargs) + + def list_org_group_policy_configs(self, ) -> OrgGroupPolicyConfigListResponse: + """List org group policy configs. + + List all org configs that are eligible to be used as organization group policies. + + :rtype: OrgGroupPolicyConfigListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_org_group_policy_configs_endpoint.call_with_http_info(**kwargs) + + def list_org_group_policy_overrides(self, filter_org_group_id: UUID, *, filter_policy_id: Union[UUID, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, sort: Union[OrgGroupPolicyOverrideSortOption, UnsetType]=unset, ) -> OrgGroupPolicyOverrideListResponse: + """List org group policy overrides. + + List policy overrides for an organization group. Requires a filter on org group ID. Optionally filter by policy ID. + + :param filter_org_group_id: Filter policy overrides by org group ID. + :type filter_org_group_id: UUID + :param filter_policy_id: Filter policy overrides by policy ID. + :type filter_policy_id: UUID, optional + :param page_number: The page number to return. + :type page_number: int, optional + :param page_size: The number of items per page. Maximum is 1000. + :type page_size: int, optional + :param sort: Field to sort overrides by. Supported values: ``id`` , ``org_uuid`` , ``-id`` , ``-org_uuid``. Defaults to ``id``. + :type sort: OrgGroupPolicyOverrideSortOption, optional + :rtype: OrgGroupPolicyOverrideListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_org_group_id"] = filter_org_group_id + + if filter_policy_id is not unset: + kwargs["filter_policy_id"] = filter_policy_id + + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_org_group_policy_overrides_endpoint.call_with_http_info(**kwargs) + + def list_org_group_policy_suggestions(self, filter_org_group_id: UUID, ) -> OrgGroupPolicySuggestionListResponse: + """List org group policy suggestions. + + List suggested organization group policies. Requires a filter on org group ID. + + :param filter_org_group_id: Filter policies by org group ID. + :type filter_org_group_id: UUID + :rtype: OrgGroupPolicySuggestionListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_org_group_id"] = filter_org_group_id + + return self._list_org_group_policy_suggestions_endpoint.call_with_http_info(**kwargs) + + def list_org_groups(self, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, sort: Union[OrgGroupSortOption, UnsetType]=unset, ) -> OrgGroupListResponse: + """List org groups. + + List all organization groups that the requesting organization has access to. + + :param page_number: The page number to return. + :type page_number: int, optional + :param page_size: The number of items per page. Maximum is 1000. + :type page_size: int, optional + :param sort: Field to sort org groups by. Supported values: ``name`` , ``uuid`` , ``-name`` , ``-uuid``. Defaults to ``uuid``. + :type sort: OrgGroupSortOption, optional + :rtype: OrgGroupListResponse + """ + kwargs: Dict[str, Any] = {} + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_org_groups_endpoint.call_with_http_info(**kwargs) + + def update_org_group(self, org_group_id: UUID, body: OrgGroupUpdateRequest, ) -> OrgGroupResponse: + """Update an org group. + + Update the name of an existing organization group. + + :param org_group_id: The ID of the org group. + :type org_group_id: UUID + :type body: OrgGroupUpdateRequest + :rtype: OrgGroupResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_id"] = org_group_id + + kwargs["body"] = body + + return self._update_org_group_endpoint.call_with_http_info(**kwargs) + + def update_org_group_membership(self, org_group_membership_id: UUID, body: OrgGroupMembershipUpdateRequest, ) -> OrgGroupMembershipResponse: + """Update an org group membership. + + Move an organization to a different org group by updating its membership. + + :param org_group_membership_id: The ID of the org group membership. + :type org_group_membership_id: UUID + :type body: OrgGroupMembershipUpdateRequest + :rtype: OrgGroupMembershipResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_membership_id"] = org_group_membership_id + + kwargs["body"] = body + + return self._update_org_group_membership_endpoint.call_with_http_info(**kwargs) + + def update_org_group_policy(self, org_group_policy_id: UUID, body: OrgGroupPolicyUpdateRequest, ) -> OrgGroupPolicyResponse: + """Update an org group policy. + + Update an existing organization group policy. + + :param org_group_policy_id: The ID of the org group policy. + :type org_group_policy_id: UUID + :type body: OrgGroupPolicyUpdateRequest + :rtype: OrgGroupPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_policy_id"] = org_group_policy_id + + kwargs["body"] = body + + return self._update_org_group_policy_endpoint.call_with_http_info(**kwargs) + + def update_org_group_policy_override(self, org_group_policy_override_id: UUID, body: OrgGroupPolicyOverrideUpdateRequest, ) -> OrgGroupPolicyOverrideResponse: + """Update an org group policy override. + + Update an existing organization group policy override. + + :param org_group_policy_override_id: The ID of the org group policy override. + :type org_group_policy_override_id: UUID + :type body: OrgGroupPolicyOverrideUpdateRequest + :rtype: OrgGroupPolicyOverrideResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_group_policy_override_id"] = org_group_policy_override_id + + kwargs["body"] = body + + return self._update_org_group_policy_override_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/organizations_api.py b/datadog_api_client/v2/api/organizations_api.py new file mode 100644 index 0000000000..24c6799da0 --- /dev/null +++ b/datadog_api_client/v2/api/organizations_api.py @@ -0,0 +1,521 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.global_orgs_response import GlobalOrgsResponse +from datadog_api_client.v2.model.global_org_data import GlobalOrgData +from datadog_api_client.v2.model.max_session_duration_update_request import MaxSessionDurationUpdateRequest +from datadog_api_client.v2.model.managed_orgs_response import ManagedOrgsResponse +from datadog_api_client.v2.model.org_saml_preferences_update_request import OrgSAMLPreferencesUpdateRequest +from datadog_api_client.v2.model.org_config_list_response import OrgConfigListResponse +from datadog_api_client.v2.model.org_config_get_response import OrgConfigGetResponse +from datadog_api_client.v2.model.org_config_write_request import OrgConfigWriteRequest +from datadog_api_client.v2.model.saml_configurations_response import SAMLConfigurationsResponse +from datadog_api_client.v2.model.idp_metadata_form_data import IdPMetadataFormData +from datadog_api_client.v2.model.saml_configuration_response import SAMLConfigurationResponse +from datadog_api_client.v2.model.saml_configuration_update_request import SAMLConfigurationUpdateRequest + + +class OrganizationsApi: + """ + Create, edit, and manage your organizations. Read more about `multi-org accounts `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_org_config_endpoint = _Endpoint( + settings={ + "response_type": (OrgConfigGetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_configs/{org_config_name}", + "operation_id": "get_org_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "org_config_name": { + "required": True, + "openapi_types": (str,), + "attribute": "org_config_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_saml_configuration_endpoint = _Endpoint( + settings={ + "response_type": (SAMLConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/saml_configurations/{saml_config_uuid}", + "operation_id": "get_saml_configuration", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "saml_config_uuid": { + "required": True, + "openapi_types": (str,), + "attribute": "saml_config_uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_global_orgs_endpoint = _Endpoint( + settings={ + "response_type": (GlobalOrgsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/global_orgs", + "operation_id": "list_global_orgs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_handle": { + "required": True, + "openapi_types": (str,), + "attribute": "user_handle", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_org_configs_endpoint = _Endpoint( + settings={ + "response_type": (OrgConfigListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_configs", + "operation_id": "list_org_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_orgs_endpoint = _Endpoint( + settings={ + "response_type": (ManagedOrgsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/org", + "operation_id": "list_orgs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_name": { + "openapi_types": (str,), + "attribute": "filter[name]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_saml_configurations_endpoint = _Endpoint( + settings={ + "response_type": (SAMLConfigurationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/saml_configurations", + "operation_id": "list_saml_configurations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_login_org_configs_max_session_duration_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/login/org_configs/max_session_duration", + "operation_id": "update_login_org_configs_max_session_duration", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MaxSessionDurationUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_org_config_endpoint = _Endpoint( + settings={ + "response_type": (OrgConfigGetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org_configs/{org_config_name}", + "operation_id": "update_org_config", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "org_config_name": { + "required": True, + "openapi_types": (str,), + "attribute": "org_config_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (OrgConfigWriteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_org_saml_configurations_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/org/saml_configurations", + "operation_id": "update_org_saml_configurations", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OrgSAMLPreferencesUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_saml_configuration_endpoint = _Endpoint( + settings={ + "response_type": (SAMLConfigurationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/saml_configurations/{saml_config_uuid}", + "operation_id": "update_saml_configuration", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "saml_config_uuid": { + "required": True, + "openapi_types": (str,), + "attribute": "saml_config_uuid", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SAMLConfigurationUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upload_idp_metadata_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/saml_configurations/idp_metadata", + "operation_id": "upload_idp_metadata", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "idp_file": { + "openapi_types": (file_type,), + "attribute": "idp_file", + "location": "form", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["multipart/form-data"] + }, + api_client=api_client, + ) + + def get_org_config(self, org_config_name: str, ) -> OrgConfigGetResponse: + """Get a specific Org Config value. + + Return the name, description, and value of a specific Org Config. + + :param org_config_name: The name of an Org Config. + :type org_config_name: str + :rtype: OrgConfigGetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_config_name"] = org_config_name + + return self._get_org_config_endpoint.call_with_http_info(**kwargs) + + def get_saml_configuration(self, saml_config_uuid: str, ) -> SAMLConfigurationResponse: + """Get a SAML configuration. + + Get a single SAML configuration for the current organization by its UUID. + + :param saml_config_uuid: The UUID of the SAML configuration. + :type saml_config_uuid: str + :rtype: SAMLConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["saml_config_uuid"] = saml_config_uuid + + return self._get_saml_configuration_endpoint.call_with_http_info(**kwargs) + + def list_global_orgs(self, user_handle: str, *, page_limit: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> GlobalOrgsResponse: + """List global orgs. + + Returns organizations across regions for the authenticated user. The ``user_handle`` query parameter must match the authenticated user's handle. + + :param user_handle: The handle of the authenticated user. + :type user_handle: str + :param page_limit: Maximum number of results returned. + :type page_limit: int, optional + :param page_cursor: String to query the next page of results. + This key is provided with each valid response from the API in ``meta.page.next_cursor``. + :type page_cursor: str, optional + :rtype: GlobalOrgsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_handle"] = user_handle + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + return self._list_global_orgs_endpoint.call_with_http_info(**kwargs) + + def list_global_orgs_with_pagination(self, user_handle: str, *, page_limit: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[GlobalOrgData]: + """List global orgs. + + Provide a paginated version of :meth:`list_global_orgs`, returning all items. + + :param user_handle: The handle of the authenticated user. + :type user_handle: str + :param page_limit: Maximum number of results returned. + :type page_limit: int, optional + :param page_cursor: String to query the next page of results. + This key is provided with each valid response from the API in ``meta.page.next_cursor``. + :type page_cursor: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[GlobalOrgData] + """ + kwargs: Dict[str, Any] = {} + kwargs["user_handle"] = user_handle + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 100) + endpoint = self._list_global_orgs_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.next_cursor", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_org_configs(self, ) -> OrgConfigListResponse: + """List Org Configs. + + Returns all Org Configs (name, description, and value). + + :rtype: OrgConfigListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_org_configs_endpoint.call_with_http_info(**kwargs) + + def list_orgs(self, *, filter_name: Union[str, UnsetType]=unset, ) -> ManagedOrgsResponse: + """List your managed organizations. + + Returns the current organization and its managed organizations in JSON:API format. + + :param filter_name: Filter managed organizations by name. + :type filter_name: str, optional + :rtype: ManagedOrgsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + return self._list_orgs_endpoint.call_with_http_info(**kwargs) + + def list_saml_configurations(self, ) -> SAMLConfigurationsResponse: + """List SAML configurations. + + Get the list of SAML configurations for the current organization. An organization has at most one SAML configuration. + + :rtype: SAMLConfigurationsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_saml_configurations_endpoint.call_with_http_info(**kwargs) + + def update_login_org_configs_max_session_duration(self, body: MaxSessionDurationUpdateRequest, ) -> None: + """Update the maximum session duration. + + Update the maximum session duration for the current organization. + The duration is specified in seconds. + + :type body: MaxSessionDurationUpdateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_login_org_configs_max_session_duration_endpoint.call_with_http_info(**kwargs) + + def update_org_config(self, org_config_name: str, body: OrgConfigWriteRequest, ) -> OrgConfigGetResponse: + """Update a specific Org Config. + + Update the value of a specific Org Config. + + :param org_config_name: The name of an Org Config. + :type org_config_name: str + :type body: OrgConfigWriteRequest + :rtype: OrgConfigGetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["org_config_name"] = org_config_name + + kwargs["body"] = body + + return self._update_org_config_endpoint.call_with_http_info(**kwargs) + + def update_org_saml_configurations(self, body: OrgSAMLPreferencesUpdateRequest, ) -> None: + """Update organization SAML preferences. + + Update the SAML preferences for the current organization. + + Use this endpoint to set the just-in-time (JIT) provisioning domains and the default role + assigned to just-in-time provisioned users. + + :type body: OrgSAMLPreferencesUpdateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_org_saml_configurations_endpoint.call_with_http_info(**kwargs) + + def update_saml_configuration(self, saml_config_uuid: str, body: SAMLConfigurationUpdateRequest, ) -> SAMLConfigurationResponse: + """Update a SAML configuration. + + Update a single SAML configuration for the current organization. + + Use this endpoint to enable or disable identity-provider-initiated login, set the + just-in-time provisioning domains, and set the default role assigned to + just-in-time provisioned users. A default role is required to enable just-in-time provisioning. + + :param saml_config_uuid: The UUID of the SAML configuration. + :type saml_config_uuid: str + :type body: SAMLConfigurationUpdateRequest + :rtype: SAMLConfigurationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["saml_config_uuid"] = saml_config_uuid + + kwargs["body"] = body + + return self._update_saml_configuration_endpoint.call_with_http_info(**kwargs) + + def upload_idp_metadata(self, *, idp_file: Union[file_type, UnsetType]=unset, ) -> None: + """Upload IdP metadata. + + Endpoint for uploading IdP metadata for SAML setup. + + Use this endpoint to upload or replace IdP metadata for SAML login configuration. + + :param idp_file: The IdP metadata XML file + :type idp_file: file_type, optional + :rtype: None + """ + kwargs: Dict[str, Any] = {} + if idp_file is not unset: + kwargs["idp_file"] = idp_file + + return self._upload_idp_metadata_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/powerpack_api.py b/datadog_api_client/v2/api/powerpack_api.py new file mode 100644 index 0000000000..b4fd5708ec --- /dev/null +++ b/datadog_api_client/v2/api/powerpack_api.py @@ -0,0 +1,286 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_powerpacks_response import ListPowerpacksResponse +from datadog_api_client.v2.model.powerpack_data import PowerpackData +from datadog_api_client.v2.model.powerpack_response import PowerpackResponse +from datadog_api_client.v2.model.powerpack import Powerpack + + +class PowerpackApi: + """ + The Powerpack endpoints allow you to: + + * Get a Powerpack + * Create a Powerpack + * Delete a Powerpack + * Get a list of all Powerpacks + + The Patch and Delete API methods can only be performed on a Powerpack by + a user who has the powerpack create permission for that specific Powerpack. + + Read `Scale Graphing Expertise with Powerpacks `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_powerpack_endpoint = _Endpoint( + settings={ + "response_type": (PowerpackResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/powerpacks", + "operation_id": "create_powerpack", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (Powerpack,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_powerpack_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/powerpacks/{powerpack_id}", + "operation_id": "delete_powerpack", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "powerpack_id": { + "required": True, + "openapi_types": (str,), + "attribute": "powerpack_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_powerpack_endpoint = _Endpoint( + settings={ + "response_type": (PowerpackResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/powerpacks/{powerpack_id}", + "operation_id": "get_powerpack", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "powerpack_id": { + "required": True, + "openapi_types": (str,), + "attribute": "powerpack_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_powerpacks_endpoint = _Endpoint( + settings={ + "response_type": (ListPowerpacksResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/powerpacks", + "operation_id": "list_powerpacks", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_powerpack_endpoint = _Endpoint( + settings={ + "response_type": (PowerpackResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/powerpacks/{powerpack_id}", + "operation_id": "update_powerpack", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "powerpack_id": { + "required": True, + "openapi_types": (str,), + "attribute": "powerpack_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (Powerpack,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_powerpack(self, body: Powerpack, ) -> PowerpackResponse: + """Create a new powerpack. + + Create a powerpack. + + :param body: Create a powerpack request body. + :type body: Powerpack + :rtype: PowerpackResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_powerpack_endpoint.call_with_http_info(**kwargs) + + def delete_powerpack(self, powerpack_id: str, ) -> None: + """Delete a powerpack. + + Delete a powerpack. + + :param powerpack_id: Powerpack id + :type powerpack_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["powerpack_id"] = powerpack_id + + return self._delete_powerpack_endpoint.call_with_http_info(**kwargs) + + def get_powerpack(self, powerpack_id: str, ) -> PowerpackResponse: + """Get a Powerpack. + + Get a powerpack. + + :param powerpack_id: ID of the powerpack. + :type powerpack_id: str + :rtype: PowerpackResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["powerpack_id"] = powerpack_id + + return self._get_powerpack_endpoint.call_with_http_info(**kwargs) + + def list_powerpacks(self, *, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, ) -> ListPowerpacksResponse: + """Get all powerpacks. + + Get a list of all powerpacks. + + :param page_limit: Maximum number of powerpacks in the response. + :type page_limit: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :rtype: ListPowerpacksResponse + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + return self._list_powerpacks_endpoint.call_with_http_info(**kwargs) + + def list_powerpacks_with_pagination(self, *, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[PowerpackData]: + """Get all powerpacks. + + Provide a paginated version of :meth:`list_powerpacks`, returning all items. + + :param page_limit: Maximum number of powerpacks in the response. + :type page_limit: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[PowerpackData] + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 25) + endpoint = self._list_powerpacks_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_powerpack(self, powerpack_id: str, body: Powerpack, ) -> PowerpackResponse: + """Update a powerpack. + + Update a powerpack. + + :param powerpack_id: ID of the powerpack. + :type powerpack_id: str + :param body: Update a powerpack request body. + :type body: Powerpack + :rtype: PowerpackResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["powerpack_id"] = powerpack_id + + kwargs["body"] = body + + return self._update_powerpack_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/processes_api.py b/datadog_api_client/v2/api/processes_api.py new file mode 100644 index 0000000000..d7d72b602b --- /dev/null +++ b/datadog_api_client/v2/api/processes_api.py @@ -0,0 +1,188 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.process_summaries_response import ProcessSummariesResponse +from datadog_api_client.v2.model.process_summary import ProcessSummary + + +class ProcessesApi: + """ + The processes API allows you to query processes data for your organization. See the `Live Processes page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_processes_endpoint = _Endpoint( + settings={ + "response_type": (ProcessSummariesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/processes", + "operation_id": "list_processes", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "search": { + "openapi_types": (str,), + "attribute": "search", + "location": "query", + }, + "tags": { + "openapi_types": (str,), + "attribute": "tags", + "location": "query", + }, + "_from": { + "openapi_types": (int,), + "attribute": "from", + "location": "query", + }, + "to": { + "openapi_types": (int,), + "attribute": "to", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 10000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def list_processes(self, *, search: Union[str, UnsetType]=unset, tags: Union[str, UnsetType]=unset, _from: Union[int, UnsetType]=unset, to: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> ProcessSummariesResponse: + """Get all processes. + + Get all processes for your organization. + + :param search: String to search processes by. + :type search: str, optional + :param tags: Comma-separated list of tags to filter processes by. + :type tags: str, optional + :param _from: Unix timestamp (number of seconds since epoch) of the start of the query window. + If not provided, the start of the query window will be 15 minutes before the ``to`` timestamp. If neither + ``from`` nor ``to`` are provided, the query window will be ``[now - 15m, now]``. + :type _from: int, optional + :param to: Unix timestamp (number of seconds since epoch) of the end of the query window. + If not provided, the end of the query window will be 15 minutes after the ``from`` timestamp. If neither + ``from`` nor ``to`` are provided, the query window will be ``[now - 15m, now]``. + :type to: int, optional + :param page_limit: Maximum number of results returned. + :type page_limit: int, optional + :param page_cursor: String to query the next page of results. + This key is provided with each valid response from the API in ``meta.page.after``. + :type page_cursor: str, optional + :rtype: ProcessSummariesResponse + """ + kwargs: Dict[str, Any] = {} + if search is not unset: + kwargs["search"] = search + + if tags is not unset: + kwargs["tags"] = tags + + if _from is not unset: + kwargs["_from"] = _from + + if to is not unset: + kwargs["to"] = to + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + return self._list_processes_endpoint.call_with_http_info(**kwargs) + + def list_processes_with_pagination(self, *, search: Union[str, UnsetType]=unset, tags: Union[str, UnsetType]=unset, _from: Union[int, UnsetType]=unset, to: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[ProcessSummary]: + """Get all processes. + + Provide a paginated version of :meth:`list_processes`, returning all items. + + :param search: String to search processes by. + :type search: str, optional + :param tags: Comma-separated list of tags to filter processes by. + :type tags: str, optional + :param _from: Unix timestamp (number of seconds since epoch) of the start of the query window. + If not provided, the start of the query window will be 15 minutes before the ``to`` timestamp. If neither + ``from`` nor ``to`` are provided, the query window will be ``[now - 15m, now]``. + :type _from: int, optional + :param to: Unix timestamp (number of seconds since epoch) of the end of the query window. + If not provided, the end of the query window will be 15 minutes after the ``from`` timestamp. If neither + ``from`` nor ``to`` are provided, the query window will be ``[now - 15m, now]``. + :type to: int, optional + :param page_limit: Maximum number of results returned. + :type page_limit: int, optional + :param page_cursor: String to query the next page of results. + This key is provided with each valid response from the API in ``meta.page.after``. + :type page_cursor: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[ProcessSummary] + """ + kwargs: Dict[str, Any] = {} + if search is not unset: + kwargs["search"] = search + + if tags is not unset: + kwargs["tags"] = tags + + if _from is not unset: + kwargs["_from"] = _from + + if to is not unset: + kwargs["to"] = to + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 1000) + endpoint = self._list_processes_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/product_analytics_api.py b/datadog_api_client/v2/api/product_analytics_api.py new file mode 100644 index 0000000000..8d6e15c155 --- /dev/null +++ b/datadog_api_client/v2/api/product_analytics_api.py @@ -0,0 +1,228 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.product_analytics_server_side_event_item import ProductAnalyticsServerSideEventItem +from datadog_api_client.v2.model.product_analytics_scalar_response import ProductAnalyticsScalarResponse +from datadog_api_client.v2.model.product_analytics_analytics_request import ProductAnalyticsAnalyticsRequest +from datadog_api_client.v2.model.product_analytics_timeseries_response import ProductAnalyticsTimeseriesResponse + + +class ProductAnalyticsApi: + """ + Send server-side events to Product Analytics. Server-Side Events Ingestion allows you to collect custom events + from any server-side source, and retains events for 15 months. Server-side events are helpful for understanding + causes of a funnel drop-off which are external to the client-side (for example, payment processing error). + + **Note** : Sending server-side events impacts billing. Review the `pricing page `_ + and contact your Customer Success Manager for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._query_product_analytics_scalar_endpoint = _Endpoint( + settings={ + "response_type": (ProductAnalyticsScalarResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/product-analytics/analytics/scalar", + "operation_id": "query_product_analytics_scalar", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ProductAnalyticsAnalyticsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._query_product_analytics_timeseries_endpoint = _Endpoint( + settings={ + "response_type": (ProductAnalyticsTimeseriesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/product-analytics/analytics/timeseries", + "operation_id": "query_product_analytics_timeseries", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ProductAnalyticsAnalyticsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._submit_product_analytics_event_endpoint = _Endpoint( + settings={ + "response_type": (dict,), + "auth": ["apiKeyAuth"], + "endpoint_path": "/api/v2/prodlytics", + "operation_id": "submit_product_analytics_event", + "http_method": "POST", + "version": "v2", + "servers": [ + { + "url": "https://{site}", + "variables": { + "site": { + "description": "The intake domain for the regional site.", + "default_value": "browser-intake-datadoghq.com", + "enum_values": [ + "browser-intake-datadoghq.com", + "browser-intake-us3-datadoghq.com", + "browser-intake-us5-datadoghq.com", + "browser-intake-ap1-datadoghq.com", + "browser-intake-ap2-datadoghq.com", + "browser-intake-datadoghq.eu", + ], + }, + }, + }, + { + "url": "{protocol}://{name}", + "variables": { + "name": { + "description": "Full site DNS name.", + "default_value": "browser-intake-datadoghq.com", + }, + "protocol": { + "description": "The protocol for accessing the API.", + "default_value": "https", + }, + }, + }, + { + "url": "https://{subdomain}.{site}", + "variables": { + "site": { + "description": "Any Datadog deployment.", + "default_value": "datadoghq.com", + }, + "subdomain": { + "description": "The subdomain where the API is deployed.", + "default_value": "api", + }, + }, + }, + ], + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ProductAnalyticsServerSideEventItem,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def query_product_analytics_scalar(self, body: ProductAnalyticsAnalyticsRequest, ) -> ProductAnalyticsScalarResponse: + """Compute scalar analytics. + + Compute scalar analytics results for Product Analytics data. + Returns aggregated values (counts, averages, percentiles) optionally grouped by facets. + + :type body: ProductAnalyticsAnalyticsRequest + :rtype: ProductAnalyticsScalarResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_product_analytics_scalar_endpoint.call_with_http_info(**kwargs) + + def query_product_analytics_timeseries(self, body: ProductAnalyticsAnalyticsRequest, ) -> ProductAnalyticsTimeseriesResponse: + """Compute timeseries analytics. + + Compute timeseries analytics results for Product Analytics data. + Returns time-bucketed values for charts and trend analysis. + The ``compute.interval`` field (milliseconds) is required for time bucketing. + + :type body: ProductAnalyticsAnalyticsRequest + :rtype: ProductAnalyticsTimeseriesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_product_analytics_timeseries_endpoint.call_with_http_info(**kwargs) + + def submit_product_analytics_event(self, body: ProductAnalyticsServerSideEventItem, ) -> dict: + """Send server-side events. + + Send server-side events to Product Analytics. Server-side events are retained for 15 months. + + Server-Side events in Product Analytics are helpful for tracking events that occur on the server, + as opposed to client-side events, which are captured by Real User Monitoring (RUM) SDKs. + This allows for a more comprehensive view of the user journey by including actions that happen on the server. + Typical examples could be ``checkout.completed`` or ``payment.processed``. + + Ingested server-side events are integrated into Product Analytics to allow users to select and filter + these events in the event picker, similar to how views or actions are handled. + + **Requirements:** + + * At least one of ``usr`` , ``account`` , or ``session`` must be provided with a valid ID. + * The ``application.id`` must reference a Product Analytics-enabled application. + + **Custom Attributes:** + Any additional fields in the payload are flattened and searchable as facets. + For example, a payload with ``{"customer": {"tier": "premium"}}`` is searchable with + the syntax ``@customer.tier:premium`` in Datadog. + + The status codes answered by the HTTP API are: + + * 202: Accepted: The request has been accepted for processing + * 400: Bad request (likely an issue in the payload formatting) + * 401: Unauthorized (likely a missing API Key) + * 403: Permission issue (likely using an invalid API Key) + * 408: Request Timeout, request should be retried after some time + * 413: Payload too large (batch is above 5MB uncompressed) + * 429: Too Many Requests, request should be retried after some time + * 500: Internal Server Error, the server encountered an unexpected condition that prevented it from fulfilling the request, request should be retried after some time + * 503: Service Unavailable, the server is not ready to handle the request probably because it is overloaded, request should be retried after some time + + :param body: Server-side event to send (JSON format). + :type body: ProductAnalyticsServerSideEventItem + :rtype: dict + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._submit_product_analytics_event_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/reference_tables_api.py b/datadog_api_client/v2/api/reference_tables_api.py new file mode 100644 index 0000000000..ce68b68ba4 --- /dev/null +++ b/datadog_api_client/v2/api/reference_tables_api.py @@ -0,0 +1,573 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.batch_rows_query_response import BatchRowsQueryResponse +from datadog_api_client.v2.model.batch_rows_query_request import BatchRowsQueryRequest +from datadog_api_client.v2.model.table_result_v2_array import TableResultV2Array +from datadog_api_client.v2.model.reference_table_sort_type import ReferenceTableSortType +from datadog_api_client.v2.model.table_result_v2 import TableResultV2 +from datadog_api_client.v2.model.create_table_request import CreateTableRequest +from datadog_api_client.v2.model.patch_table_request import PatchTableRequest +from datadog_api_client.v2.model.batch_delete_rows_request_array import BatchDeleteRowsRequestArray +from datadog_api_client.v2.model.table_row_resource_array import TableRowResourceArray +from datadog_api_client.v2.model.batch_upsert_rows_request_array import BatchUpsertRowsRequestArray +from datadog_api_client.v2.model.list_rows_response import ListRowsResponse +from datadog_api_client.v2.model.create_upload_response import CreateUploadResponse +from datadog_api_client.v2.model.create_upload_request import CreateUploadRequest + + +class ReferenceTablesApi: + """ + View and manage Reference Tables in your organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._batch_rows_query_endpoint = _Endpoint( + settings={ + "response_type": (BatchRowsQueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/queries/batch-rows", + "operation_id": "batch_rows_query", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (BatchRowsQueryRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_reference_table_endpoint = _Endpoint( + settings={ + "response_type": (TableResultV2,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/tables", + "operation_id": "create_reference_table", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateTableRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_reference_table_upload_endpoint = _Endpoint( + settings={ + "response_type": (CreateUploadResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/uploads", + "operation_id": "create_reference_table_upload", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateUploadRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_rows_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/tables/{id}/rows", + "operation_id": "delete_rows", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (BatchDeleteRowsRequestArray,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_table_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/tables/{id}", + "operation_id": "delete_table", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_rows_by_id_endpoint = _Endpoint( + settings={ + "response_type": (TableRowResourceArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/tables/{id}/rows", + "operation_id": "get_rows_by_id", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "row_id": { + "required": True, + "openapi_types": ([str],), + "attribute": "row_id", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_table_endpoint = _Endpoint( + settings={ + "response_type": (TableResultV2,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/tables/{id}", + "operation_id": "get_table", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_reference_table_rows_endpoint = _Endpoint( + settings={ + "response_type": (ListRowsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/tables/{id}/rows/list", + "operation_id": "list_reference_table_rows", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_continuation_token": { + "openapi_types": (str,), + "attribute": "page[continuation_token]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tables_endpoint = _Endpoint( + settings={ + "response_type": (TableResultV2Array,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/tables", + "operation_id": "list_tables", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_limit": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_offset": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "sort": { + "openapi_types": (ReferenceTableSortType,), + "attribute": "sort", + "location": "query", + }, + "filter_status": { + "openapi_types": (str,), + "attribute": "filter[status]", + "location": "query", + }, + "filter_table_name_exact": { + "openapi_types": (str,), + "attribute": "filter[table_name][exact]", + "location": "query", + }, + "filter_table_name_contains": { + "openapi_types": (str,), + "attribute": "filter[table_name][contains]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_reference_table_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/tables/{id}", + "operation_id": "update_reference_table", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PatchTableRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upsert_rows_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/reference-tables/tables/{id}/rows", + "operation_id": "upsert_rows", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (BatchUpsertRowsRequestArray,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def batch_rows_query(self, body: BatchRowsQueryRequest, ) -> BatchRowsQueryResponse: + """Batch rows query. + + Batch query reference table rows by their primary key values. Returns only found rows in the included array. + + :type body: BatchRowsQueryRequest + :rtype: BatchRowsQueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._batch_rows_query_endpoint.call_with_http_info(**kwargs) + + def create_reference_table(self, body: CreateTableRequest, ) -> TableResultV2: + """Create reference table. + + Creates a reference table. You can provide data in two ways: + + #. Call POST /api/v2/reference-tables/upload to get an upload ID. Then, PUT the CSV data + (not the file itself) in chunks to each URL in the request body. Finally, call this + POST endpoint with ``upload_id`` in ``file_metadata``. + #. Provide ``access_details`` in ``file_metadata`` pointing to a CSV file in cloud storage. + + :type body: CreateTableRequest + :rtype: TableResultV2 + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_reference_table_endpoint.call_with_http_info(**kwargs) + + def create_reference_table_upload(self, body: CreateUploadRequest, ) -> CreateUploadResponse: + """Create reference table upload. + + Create a reference table upload for bulk data ingestion + + :type body: CreateUploadRequest + :rtype: CreateUploadResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_reference_table_upload_endpoint.call_with_http_info(**kwargs) + + def delete_rows(self, id: str, body: BatchDeleteRowsRequestArray, ) -> None: + """Delete rows. + + Delete multiple rows from a Reference Table by their primary key values. + + :param id: Unique identifier of the reference table to delete rows from + :type id: str + :type body: BatchDeleteRowsRequestArray + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._delete_rows_endpoint.call_with_http_info(**kwargs) + + def delete_table(self, id: str, ) -> None: + """Delete table. + + Delete a reference table by ID + + :param id: Unique identifier of the reference table to delete + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._delete_table_endpoint.call_with_http_info(**kwargs) + + def get_rows_by_id(self, id: str, row_id: List[str], ) -> TableRowResourceArray: + """Get rows by id. + + Get reference table rows by their primary key values. + + :param id: Unique identifier of the reference table to get rows from + :type id: str + :param row_id: List of row IDs (primary key values) to retrieve from the reference table. + :type row_id: [str] + :rtype: TableRowResourceArray + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["row_id"] = row_id + + return self._get_rows_by_id_endpoint.call_with_http_info(**kwargs) + + def get_table(self, id: str, ) -> TableResultV2: + """Get table. + + Get a reference table by ID + + :param id: Unique identifier of the reference table to retrieve + :type id: str + :rtype: TableResultV2 + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_table_endpoint.call_with_http_info(**kwargs) + + def list_reference_table_rows(self, id: str, *, page_limit: Union[int, UnsetType]=unset, page_continuation_token: Union[str, UnsetType]=unset, ) -> ListRowsResponse: + """List rows. + + List all rows in a reference table using cursor-based pagination. Pass the ``page[continuation_token]`` from the previous response to fetch the next page on the same consistent snapshot. Returns 400 for tables with more than 10,000,000 rows. + + :param id: Unique identifier of the reference table to list rows from. + :type id: str + :param page_limit: Number of rows to return per page. Defaults to 100, maximum is 1000. + :type page_limit: int, optional + :param page_continuation_token: Opaque cursor from the previous response's next link. Pass this to retrieve the next page on the same consistent snapshot. + :type page_continuation_token: str, optional + :rtype: ListRowsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_continuation_token is not unset: + kwargs["page_continuation_token"] = page_continuation_token + + return self._list_reference_table_rows_endpoint.call_with_http_info(**kwargs) + + def list_tables(self, *, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, sort: Union[ReferenceTableSortType, UnsetType]=unset, filter_status: Union[str, UnsetType]=unset, filter_table_name_exact: Union[str, UnsetType]=unset, filter_table_name_contains: Union[str, UnsetType]=unset, ) -> TableResultV2Array: + """List tables. + + List all reference tables in this organization. + + :param page_limit: Number of tables to return. + :type page_limit: int, optional + :param page_offset: Number of tables to skip for pagination. + :type page_offset: int, optional + :param sort: Sort field and direction for the list of reference tables. Use field name for ascending, prefix with "-" for descending. + :type sort: ReferenceTableSortType, optional + :param filter_status: Filter by table status. + :type filter_status: str, optional + :param filter_table_name_exact: Filter by exact table name match. + :type filter_table_name_exact: str, optional + :param filter_table_name_contains: Filter by table name containing substring. + :type filter_table_name_contains: str, optional + :rtype: TableResultV2Array + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if sort is not unset: + kwargs["sort"] = sort + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + if filter_table_name_exact is not unset: + kwargs["filter_table_name_exact"] = filter_table_name_exact + + if filter_table_name_contains is not unset: + kwargs["filter_table_name_contains"] = filter_table_name_contains + + return self._list_tables_endpoint.call_with_http_info(**kwargs) + + def update_reference_table(self, id: str, body: PatchTableRequest, ) -> None: + """Update reference table. + + Update a reference table by ID. You can update the table's data, description, and tags. Note: The source type cannot be changed after table creation. For data updates: For existing tables of type `source:LOCAL_FILE`, call POST api/v2/reference-tables/uploads first to get an upload ID, then PUT chunks of CSV data to each provided URL, and finally call this PATCH endpoint with the upload_id in file_metadata. For existing tables with `source:` types of `S3 ``,`` GCS ``, or`` AZURE`, provide updated access_details in file_metadata pointing to a CSV file in the same type of cloud storage. + + :param id: Unique identifier of the reference table to update + :type id: str + :type body: PatchTableRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._update_reference_table_endpoint.call_with_http_info(**kwargs) + + def upsert_rows(self, id: str, body: BatchUpsertRowsRequestArray, ) -> None: + """Upsert rows. + + Create or update rows in a Reference Table by their primary key values. If a row with the specified primary key exists, it is updated; otherwise, a new row is created. + + :param id: Unique identifier of the reference table to upsert rows into + :type id: str + :type body: BatchUpsertRowsRequestArray + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._upsert_rows_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/report_schedules_api.py b/datadog_api_client/v2/api/report_schedules_api.py new file mode 100644 index 0000000000..327abce51b --- /dev/null +++ b/datadog_api_client/v2/api/report_schedules_api.py @@ -0,0 +1,465 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.dataset_report_schedule_list_response import DatasetReportScheduleListResponse +from datadog_api_client.v2.model.print_report_response import PrintReportResponse +from datadog_api_client.v2.model.print_report_request import PrintReportRequest +from datadog_api_client.v2.model.report_schedule_response import ReportScheduleResponse +from datadog_api_client.v2.model.report_schedule_create_request import ReportScheduleCreateRequest +from datadog_api_client.v2.model.report_schedule_list_response import ReportScheduleListResponse +from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType +from datadog_api_client.v2.model.report_schedule_patch_request import ReportSchedulePatchRequest +from datadog_api_client.v2.model.report_schedule_toggle_request import ReportScheduleToggleRequest + + +class ReportSchedulesApi: + """ + Create and manage scheduled reports. A scheduled report renders a dashboard or integration + dashboard on a recurring cadence and delivers it to a set of recipients over email, Slack, + or Microsoft Teams. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_report_schedule_endpoint = _Endpoint( + settings={ + "response_type": (ReportScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/reporting/schedule", + "operation_id": "create_report_schedule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ReportScheduleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_report_schedule_endpoint = _Endpoint( + settings={ + "response_type": (ReportScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/reporting/schedule/{schedule_uuid}", + "operation_id": "delete_report_schedule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "schedule_uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "schedule_uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_report_schedule_endpoint = _Endpoint( + settings={ + "response_type": (ReportScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/reporting/schedule/{schedule_uuid}", + "operation_id": "get_report_schedule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "schedule_uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "schedule_uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_report_schedules_for_resource_endpoint = _Endpoint( + settings={ + "response_type": (ReportScheduleListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/reporting/schedule/{resource_type}/{resource_id}", + "operation_id": "get_report_schedules_for_resource", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "resource_type": { + "required": True, + "openapi_types": (ReportScheduleResourceType,), + "attribute": "resource_type", + "location": "path", + }, + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_dataset_report_schedules_endpoint = _Endpoint( + settings={ + "response_type": (DatasetReportScheduleListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/reporting/dataset/{dataset_id}/schedules", + "operation_id": "list_dataset_report_schedules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_report_schedules_endpoint = _Endpoint( + settings={ + "response_type": (ReportScheduleListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/reporting/schedule/list", + "operation_id": "list_report_schedules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_limit": { + "validation": { + "inclusive_maximum": 50, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_offset": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "filter_title": { + "openapi_types": (str,), + "attribute": "filter[title]", + "location": "query", + }, + "filter_author_uuid": { + "openapi_types": (UUID,), + "attribute": "filter[author_uuid]", + "location": "query", + }, + "filter_recipients": { + "openapi_types": (str,), + "attribute": "filter[recipients]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._patch_report_schedule_endpoint = _Endpoint( + settings={ + "response_type": (ReportScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/reporting/schedule/{schedule_uuid}", + "operation_id": "patch_report_schedule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "schedule_uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "schedule_uuid", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ReportSchedulePatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._print_report_endpoint = _Endpoint( + settings={ + "response_type": (PrintReportResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/reporting/print", + "operation_id": "print_report", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (PrintReportRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._toggle_report_schedule_endpoint = _Endpoint( + settings={ + "response_type": (ReportScheduleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/reporting/schedule/{schedule_uuid}/toggle", + "operation_id": "toggle_report_schedule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "schedule_uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "schedule_uuid", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ReportScheduleToggleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_report_schedule(self, body: ReportScheduleCreateRequest, ) -> ReportScheduleResponse: + """Create a report schedule. + + Create a new scheduled report. A schedule renders a dashboard or integration dashboard + on a recurring cadence and delivers it to the configured recipients over email, Slack, + or Microsoft Teams. + Requires the ``generate_dashboard_reports`` permission. + + :type body: ReportScheduleCreateRequest + :rtype: ReportScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_report_schedule_endpoint.call_with_http_info(**kwargs) + + def delete_report_schedule(self, schedule_uuid: UUID, ) -> ReportScheduleResponse: + """Delete a report schedule. + + Delete a report schedule by its unique identifier. The response returns the deleted schedule. + Requires a reporting write permission appropriate to the targeted resource type and schedule ownership. + + :param schedule_uuid: The unique identifier of the report schedule to delete. + :type schedule_uuid: UUID + :rtype: ReportScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["schedule_uuid"] = schedule_uuid + + return self._delete_report_schedule_endpoint.call_with_http_info(**kwargs) + + def get_report_schedule(self, schedule_uuid: UUID, ) -> ReportScheduleResponse: + """Get a report schedule. + + Get a report schedule by its unique identifier. + Requires a reporting read permission appropriate to the targeted resource type. + + :param schedule_uuid: The unique identifier of the report schedule to fetch. + :type schedule_uuid: UUID + :rtype: ReportScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["schedule_uuid"] = schedule_uuid + + return self._get_report_schedule_endpoint.call_with_http_info(**kwargs) + + def get_report_schedules_for_resource(self, resource_type: ReportScheduleResourceType, resource_id: str, ) -> ReportScheduleListResponse: + """Get report schedules for a resource. + + Get all report schedules that target a dashboard or integration dashboard resource. + Requires a reporting read permission appropriate to the targeted resource type. + + :param resource_type: The type of resource to fetch report schedules for. + :type resource_type: ReportScheduleResourceType + :param resource_id: The identifier of the resource to fetch report schedules for. + :type resource_id: str + :rtype: ReportScheduleListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_type"] = resource_type + + kwargs["resource_id"] = resource_id + + return self._get_report_schedules_for_resource_endpoint.call_with_http_info(**kwargs) + + def list_dataset_report_schedules(self, dataset_id: str, ) -> DatasetReportScheduleListResponse: + """List dataset report schedules. + + Retrieve all report schedules for a given published dataset. + Returns report schedules belonging to the authenticated user's organization that target the specified dataset. + Requires the ``generate_log_reports`` or ``manage_log_reports`` permission. + + :param dataset_id: The identifier of the published dataset to retrieve report schedules for. + :type dataset_id: str + :rtype: DatasetReportScheduleListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dataset_id"] = dataset_id + + return self._list_dataset_report_schedules_endpoint.call_with_http_info(**kwargs) + + def list_report_schedules(self, *, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, filter_title: Union[str, UnsetType]=unset, filter_author_uuid: Union[UUID, UnsetType]=unset, filter_recipients: Union[str, UnsetType]=unset, ) -> ReportScheduleListResponse: + """List report schedules. + + List dashboard and integration dashboard report schedules for the organization. + The response is paginated and can be filtered by title, author UUID, or recipients. + Requires the ``generate_dashboard_reports`` permission. + + :param page_limit: The maximum number of schedules to return. The maximum value is 50. + :type page_limit: int, optional + :param page_offset: The offset from which to start returning schedules. + :type page_offset: int, optional + :param filter_title: Filter schedules by report title. + :type filter_title: str, optional + :param filter_author_uuid: Filter schedules by author UUID. + :type filter_author_uuid: UUID, optional + :param filter_recipients: Filter schedules by a comma-separated list of recipients. + :type filter_recipients: str, optional + :rtype: ReportScheduleListResponse + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if filter_title is not unset: + kwargs["filter_title"] = filter_title + + if filter_author_uuid is not unset: + kwargs["filter_author_uuid"] = filter_author_uuid + + if filter_recipients is not unset: + kwargs["filter_recipients"] = filter_recipients + + return self._list_report_schedules_endpoint.call_with_http_info(**kwargs) + + def patch_report_schedule(self, schedule_uuid: UUID, body: ReportSchedulePatchRequest, ) -> ReportScheduleResponse: + """Update a report schedule. + + Update an existing scheduled report by its identifier. The editable attributes + are replaced with the supplied values; the targeted resource ( ``resource_id`` and + ``resource_type`` ) cannot be changed after creation. + Requires the ``generate_dashboard_reports`` permission and schedule ownership. + + :param schedule_uuid: The unique identifier of the report schedule to update. + :type schedule_uuid: UUID + :type body: ReportSchedulePatchRequest + :rtype: ReportScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["schedule_uuid"] = schedule_uuid + + kwargs["body"] = body + + return self._patch_report_schedule_endpoint.call_with_http_info(**kwargs) + + def print_report(self, body: PrintReportRequest, ) -> PrintReportResponse: + """Print a report. + + Initiate a one-off, print-only report for a dashboard or integration dashboard. + The report is rendered as a PDF and made available for download through the URL returned in the response. + Requires a reporting permission appropriate to the targeted resource type. + + :type body: PrintReportRequest + :rtype: PrintReportResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._print_report_endpoint.call_with_http_info(**kwargs) + + def toggle_report_schedule(self, schedule_uuid: UUID, body: ReportScheduleToggleRequest, ) -> ReportScheduleResponse: + """Toggle a report schedule. + + Activate or pause a report schedule by setting its status to ``active`` or ``inactive``. + Requires a reporting write permission appropriate to the targeted resource type and schedule ownership. + + :param schedule_uuid: The unique identifier of the report schedule to toggle. + :type schedule_uuid: UUID + :type body: ReportScheduleToggleRequest + :rtype: ReportScheduleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["schedule_uuid"] = schedule_uuid + + kwargs["body"] = body + + return self._toggle_report_schedule_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/reporting_and_sharing_api.py b/datadog_api_client/v2/api/reporting_and_sharing_api.py new file mode 100644 index 0000000000..c0ff79ed98 --- /dev/null +++ b/datadog_api_client/v2/api/reporting_and_sharing_api.py @@ -0,0 +1,70 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.create_snapshot_response import CreateSnapshotResponse +from datadog_api_client.v2.model.create_snapshot_request import CreateSnapshotRequest + + +class ReportingAndSharingApi: + """ + The Reporting and Sharing endpoints allow you to create snapshots of graph widgets and other shareable resources. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_snapshot_endpoint = _Endpoint( + settings={ + "response_type": (CreateSnapshotResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/snapshot", + "operation_id": "create_snapshot", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateSnapshotRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_snapshot(self, body: CreateSnapshotRequest, ) -> CreateSnapshotResponse: + """Create a graph snapshot. + + Create a snapshot of a graph widget. The snapshot is rendered asynchronously; the returned URL can be polled until the image is ready. + + :type body: CreateSnapshotRequest + :rtype: CreateSnapshotResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_snapshot_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/restriction_policies_api.py b/datadog_api_client/v2/api/restriction_policies_api.py new file mode 100644 index 0000000000..7df3f4a6fc --- /dev/null +++ b/datadog_api_client/v2/api/restriction_policies_api.py @@ -0,0 +1,262 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.restriction_policy_response import RestrictionPolicyResponse +from datadog_api_client.v2.model.restriction_policy_update_request import RestrictionPolicyUpdateRequest + + +class RestrictionPoliciesApi: + """ + A restriction policy defines the access control rules for a resource, mapping a set of relations + (such as editor and viewer) to a set of allowed principals (such as roles, teams, or users). + The restriction policy determines who is authorized to perform what actions on the resource. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_restriction_policy_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/restriction_policy/{resource_id}", + "operation_id": "delete_restriction_policy", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_restriction_policy_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/restriction_policy/{resource_id}", + "operation_id": "get_restriction_policy", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_restriction_policy_endpoint = _Endpoint( + settings={ + "response_type": (RestrictionPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/restriction_policy/{resource_id}", + "operation_id": "update_restriction_policy", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + "allow_self_lockout": { + "openapi_types": (bool,), + "attribute": "allow_self_lockout", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (RestrictionPolicyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def delete_restriction_policy(self, resource_id: str, ) -> None: + """Delete a restriction policy. + + Deletes the restriction policy associated with a specified resource. + + :param resource_id: Identifier, formatted as ``type:id``. Supported types: ``dashboard`` , ``integration-service`` , ``integration-webhook`` , ``notebook`` , ``powerpack`` , ``reference-table`` , ``security-rule`` , ``slo`` , ``synthetics-global-variable`` , ``synthetics-test`` , ``synthetics-private-location`` , ``monitor`` , ``workflow`` , ``app-builder-app`` , ``connection`` , ``connection-group`` , ``rum-application`` , ``cross-org-connection`` , ``spreadsheet`` , ``on-call-schedule`` , ``on-call-escalation-policy`` , ``on-call-team-routing-rules`` , ``logs-pipeline`` , ``case-management-project`` , ``monitor-notification-rule`` , ``status-page`` , ``feature-flag``. + :type resource_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_id"] = resource_id + + return self._delete_restriction_policy_endpoint.call_with_http_info(**kwargs) + + def get_restriction_policy(self, resource_id: str, ) -> RestrictionPolicyResponse: + """Get a restriction policy. + + Retrieves the restriction policy associated with a specified resource. + + :param resource_id: Identifier, formatted as ``type:id``. Supported types: ``dashboard`` , ``integration-service`` , ``integration-webhook`` , ``notebook`` , ``powerpack`` , ``reference-table`` , ``security-rule`` , ``slo`` , ``synthetics-global-variable`` , ``synthetics-test`` , ``synthetics-private-location`` , ``monitor`` , ``workflow`` , ``app-builder-app`` , ``connection`` , ``connection-group`` , ``rum-application`` , ``cross-org-connection`` , ``spreadsheet`` , ``on-call-schedule`` , ``on-call-escalation-policy`` , ``on-call-team-routing-rules`` , ``logs-pipeline`` , ``case-management-project`` , ``monitor-notification-rule`` , ``status-page`` , ``feature-flag``. + :type resource_id: str + :rtype: RestrictionPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_id"] = resource_id + + return self._get_restriction_policy_endpoint.call_with_http_info(**kwargs) + + def update_restriction_policy(self, resource_id: str, body: RestrictionPolicyUpdateRequest, *, allow_self_lockout: Union[bool, UnsetType]=unset, ) -> RestrictionPolicyResponse: + """Update a restriction policy. + + Updates the restriction policy associated with a resource. + + **Supported resources** + + Restriction policies can be applied to the following resources: + + * Dashboards: ``dashboard`` + * Integration Services: ``integration-service`` + * Integration Webhooks: ``integration-webhook`` + * Notebooks: ``notebook`` + * Powerpacks: ``powerpack`` + * Reference Tables: ``reference-table`` + * Security Rules: ``security-rule`` + * Service Level Objectives: ``slo`` + * Synthetic Global Variables: ``synthetics-global-variable`` + * Synthetic Tests: ``synthetics-test`` + * Synthetic Private Locations: ``synthetics-private-location`` + * Monitors: ``monitor`` + * Workflows: ``workflow`` + * App Builder Apps: ``app-builder-app`` + * Connections: ``connection`` + * Connection Groups: ``connection-group`` + * RUM Applications: ``rum-application`` + * Cross Org Connections: ``cross-org-connection`` + * Spreadsheets: ``spreadsheet`` + * On-Call Schedules: ``on-call-schedule`` + * On-Call Escalation Policies: ``on-call-escalation-policy`` + * On-Call Team Routing Rules: ``on-call-team-routing-rules`` + * Logs Pipelines: ``logs-pipeline`` + * Case Management Projects: ``case-management-project`` + * Monitor Notification Rules: ``monitor-notification-rule`` + * Status Pages: ``status-page`` + * Feature Flags: ``feature-flag`` + + **Supported relations for resources** + + .. list-table:: + :header-rows: 1 + + * - Resource Type + - Supported Relations + * - Dashboards + - ``viewer`` , ``editor`` + * - Integration Services + - ``viewer`` , ``editor`` + * - Integration Webhooks + - ``viewer`` , ``editor`` + * - Notebooks + - ``viewer`` , ``editor`` + * - Powerpacks + - ``viewer`` , ``editor`` + * - Security Rules + - ``viewer`` , ``editor`` + * - Service Level Objectives + - ``viewer`` , ``editor`` + * - Synthetic Global Variables + - ``viewer`` , ``editor`` + * - Synthetic Tests + - ``viewer`` , ``editor`` + * - Synthetic Private Locations + - ``viewer`` , ``editor`` + * - Monitors + - ``viewer`` , ``editor`` + * - Reference Tables + - ``viewer`` , ``editor`` + * - Workflows + - ``viewer`` , ``runner`` , ``editor`` + * - App Builder Apps + - ``viewer`` , ``editor`` + * - Connections + - ``viewer`` , ``resolver`` , ``editor`` + * - Connection Groups + - ``viewer`` , ``editor`` + * - RUM Application + - ``viewer`` , ``editor`` + * - Cross Org Connections + - ``viewer`` , ``editor`` + * - Spreadsheets + - ``viewer`` , ``editor`` + * - On-Call Schedules + - ``viewer`` , ``overrider`` , ``editor`` + * - On-Call Escalation Policies + - ``viewer`` , ``editor`` + * - On-Call Team Routing Rules + - ``viewer`` , ``editor`` + * - Logs Pipelines + - ``viewer`` , ``processors_editor`` , ``editor`` + * - Case Management Projects + - ``viewer`` , ``contributor`` , ``manager`` + * - Monitor Notification Rules + - ``viewer`` , ``editor`` + * - Status Pages + - ``viewer`` , ``responder`` , ``manager`` + * - Feature Flags + - ``viewer`` , ``contributor`` , ``editor`` + + + :param resource_id: Identifier, formatted as ``type:id``. Supported types: ``dashboard`` , ``integration-service`` , ``integration-webhook`` , ``notebook`` , ``powerpack`` , ``reference-table`` , ``security-rule`` , ``slo`` , ``synthetics-global-variable`` , ``synthetics-test`` , ``synthetics-private-location`` , ``monitor`` , ``workflow`` , ``app-builder-app`` , ``connection`` , ``connection-group`` , ``rum-application`` , ``cross-org-connection`` , ``spreadsheet`` , ``on-call-schedule`` , ``on-call-escalation-policy`` , ``on-call-team-routing-rules`` , ``logs-pipeline`` , ``case-management-project`` , ``monitor-notification-rule`` , ``status-page`` , ``feature-flag``. + :type resource_id: str + :param body: Restriction policy payload + :type body: RestrictionPolicyUpdateRequest + :param allow_self_lockout: Allows admins (users with the ``user_access_manage`` permission) to remove their own access from the resource if set to ``true``. By default, this is set to ``false`` , preventing admins from locking themselves out. + :type allow_self_lockout: bool, optional + :rtype: RestrictionPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_id"] = resource_id + + if allow_self_lockout is not unset: + kwargs["allow_self_lockout"] = allow_self_lockout + + kwargs["body"] = body + + return self._update_restriction_policy_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/roles_api.py b/datadog_api_client/v2/api/roles_api.py new file mode 100644 index 0000000000..b80bb8a4e8 --- /dev/null +++ b/datadog_api_client/v2/api/roles_api.py @@ -0,0 +1,703 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.permissions_response import PermissionsResponse +from datadog_api_client.v2.model.roles_response import RolesResponse +from datadog_api_client.v2.model.roles_sort import RolesSort +from datadog_api_client.v2.model.role_create_response import RoleCreateResponse +from datadog_api_client.v2.model.role_create_request import RoleCreateRequest +from datadog_api_client.v2.model.role_template_array import RoleTemplateArray +from datadog_api_client.v2.model.role_response import RoleResponse +from datadog_api_client.v2.model.role_update_response import RoleUpdateResponse +from datadog_api_client.v2.model.role_update_request import RoleUpdateRequest +from datadog_api_client.v2.model.role_clone_request import RoleCloneRequest +from datadog_api_client.v2.model.relationship_to_permission import RelationshipToPermission +from datadog_api_client.v2.model.users_response import UsersResponse +from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + + +class RolesApi: + """ + The Roles API is used to create and manage Datadog roles, what + `global permissions `_ + they grant, and which users belong to them. + + Permissions related to specific account assets can be granted to roles + in the Datadog application without using this API. For example, granting + read access on a specific log index to a role can be done in Datadog from the + `Pipelines page `_. + + Roles can also be managed in bulk through the Datadog UI, which provides + the capability to assign a single permission to multiple roles simultaneously. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._add_permission_to_role_endpoint = _Endpoint( + settings={ + "response_type": (PermissionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}/permissions", + "operation_id": "add_permission_to_role", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RelationshipToPermission,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._add_user_to_role_endpoint = _Endpoint( + settings={ + "response_type": (UsersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}/users", + "operation_id": "add_user_to_role", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RelationshipToUser,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._clone_role_endpoint = _Endpoint( + settings={ + "response_type": (RoleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}/clone", + "operation_id": "clone_role", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RoleCloneRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_role_endpoint = _Endpoint( + settings={ + "response_type": (RoleCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles", + "operation_id": "create_role", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RoleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_role_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}", + "operation_id": "delete_role", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_role_endpoint = _Endpoint( + settings={ + "response_type": (RoleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}", + "operation_id": "get_role", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_permissions_endpoint = _Endpoint( + settings={ + "response_type": (PermissionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/permissions", + "operation_id": "list_permissions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_role_permissions_endpoint = _Endpoint( + settings={ + "response_type": (PermissionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}/permissions", + "operation_id": "list_role_permissions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_roles_endpoint = _Endpoint( + settings={ + "response_type": (RolesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles", + "operation_id": "list_roles", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (RolesSort,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_id": { + "openapi_types": (str,), + "attribute": "filter[id]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_role_templates_endpoint = _Endpoint( + settings={ + "response_type": (RoleTemplateArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/templates", + "operation_id": "list_role_templates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_role_users_endpoint = _Endpoint( + settings={ + "response_type": (UsersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}/users", + "operation_id": "list_role_users", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._remove_permission_from_role_endpoint = _Endpoint( + settings={ + "response_type": (PermissionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}/permissions", + "operation_id": "remove_permission_from_role", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RelationshipToPermission,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._remove_user_from_role_endpoint = _Endpoint( + settings={ + "response_type": (UsersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}/users", + "operation_id": "remove_user_from_role", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RelationshipToUser,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_role_endpoint = _Endpoint( + settings={ + "response_type": (RoleUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/roles/{role_id}", + "operation_id": "update_role", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "role_id": { + "required": True, + "openapi_types": (str,), + "attribute": "role_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RoleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def add_permission_to_role(self, role_id: str, body: RelationshipToPermission, ) -> PermissionsResponse: + """Grant permission to a role. + + Adds a permission to a role. + + :param role_id: The unique identifier of the role. + :type role_id: str + :type body: RelationshipToPermission + :rtype: PermissionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + kwargs["body"] = body + + return self._add_permission_to_role_endpoint.call_with_http_info(**kwargs) + + def add_user_to_role(self, role_id: str, body: RelationshipToUser, ) -> UsersResponse: + """Add a user to a role. + + Adds a user to a role. + + :param role_id: The unique identifier of the role. + :type role_id: str + :type body: RelationshipToUser + :rtype: UsersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + kwargs["body"] = body + + return self._add_user_to_role_endpoint.call_with_http_info(**kwargs) + + def clone_role(self, role_id: str, body: RoleCloneRequest, ) -> RoleResponse: + """Create a new role by cloning an existing role. + + Clone an existing role + + :param role_id: The unique identifier of the role. + :type role_id: str + :type body: RoleCloneRequest + :rtype: RoleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + kwargs["body"] = body + + return self._clone_role_endpoint.call_with_http_info(**kwargs) + + def create_role(self, body: RoleCreateRequest, ) -> RoleCreateResponse: + """Create role. + + Create a new role for your organization. + + The following read permissions are automatically added to every new role, even if they are not included in the request: + + * Dashboards Read + * Notebooks Read + * Monitors Read + * APM Read + * Vulnerability Management Read + * RUM Apps Read + * Incidents Read + * SLOs Read + * CI Visibility Read + * CD Visibility Read + + :type body: RoleCreateRequest + :rtype: RoleCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_role_endpoint.call_with_http_info(**kwargs) + + def delete_role(self, role_id: str, ) -> None: + """Delete role. + + Disables a role. + + :param role_id: The unique identifier of the role. + :type role_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + return self._delete_role_endpoint.call_with_http_info(**kwargs) + + def get_role(self, role_id: str, ) -> RoleResponse: + """Get a role. + + Get a role in the organization specified by the role’s ``role_id``. + + :param role_id: The unique identifier of the role. + :type role_id: str + :rtype: RoleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + return self._get_role_endpoint.call_with_http_info(**kwargs) + + def list_permissions(self, ) -> PermissionsResponse: + """List permissions. + + Returns a list of all permissions, including name, description, and ID. + + :rtype: PermissionsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_permissions_endpoint.call_with_http_info(**kwargs) + + def list_role_permissions(self, role_id: str, ) -> PermissionsResponse: + """List permissions for a role. + + Returns a list of all permissions for a single role. + + :param role_id: The unique identifier of the role. + :type role_id: str + :rtype: PermissionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + return self._list_role_permissions_endpoint.call_with_http_info(**kwargs) + + def list_roles(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[RolesSort, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_id: Union[str, UnsetType]=unset, ) -> RolesResponse: + """List roles. + + Returns all roles, including their names and their unique identifiers. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Sort roles depending on the given field. Sort order is **ascending** by default. + Sort order is **descending** if the field is prefixed by a negative sign, for example: + ``sort=-name``. + :type sort: RolesSort, optional + :param filter: Filter all roles by the given string. + :type filter: str, optional + :param filter_id: Filter all roles by the given list of role IDs. + :type filter_id: str, optional + :rtype: RolesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + return self._list_roles_endpoint.call_with_http_info(**kwargs) + + def list_role_templates(self, ) -> RoleTemplateArray: + """List role templates. + + List all role templates + + :rtype: RoleTemplateArray + """ + kwargs: Dict[str, Any] = {} + return self._list_role_templates_endpoint.call_with_http_info(**kwargs) + + def list_role_users(self, role_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter: Union[str, UnsetType]=unset, ) -> UsersResponse: + """Get all users of a role. + + Gets all users of a role. + + :param role_id: The unique identifier of the role. + :type role_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: User attribute to order results by. Sort order is **ascending** by default. + Sort order is **descending** if the field is prefixed by a negative sign, + for example ``sort=-name``. Options: ``name`` , ``email`` , ``status``. + :type sort: str, optional + :param filter: Filter all users by the given string. Defaults to no filtering. + :type filter: str, optional + :rtype: UsersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + return self._list_role_users_endpoint.call_with_http_info(**kwargs) + + def remove_permission_from_role(self, role_id: str, body: RelationshipToPermission, ) -> PermissionsResponse: + """Revoke permission. + + Removes a permission from a role. + + :param role_id: The unique identifier of the role. + :type role_id: str + :type body: RelationshipToPermission + :rtype: PermissionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + kwargs["body"] = body + + return self._remove_permission_from_role_endpoint.call_with_http_info(**kwargs) + + def remove_user_from_role(self, role_id: str, body: RelationshipToUser, ) -> UsersResponse: + """Remove a user from a role. + + Removes a user from a role. + + :param role_id: The unique identifier of the role. + :type role_id: str + :type body: RelationshipToUser + :rtype: UsersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + kwargs["body"] = body + + return self._remove_user_from_role_endpoint.call_with_http_info(**kwargs) + + def update_role(self, role_id: str, body: RoleUpdateRequest, ) -> RoleUpdateResponse: + """Update a role. + + Edit a role. Can only be used with application keys belonging to administrators. + + :param role_id: The unique identifier of the role. + :type role_id: str + :type body: RoleUpdateRequest + :rtype: RoleUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["role_id"] = role_id + + kwargs["body"] = body + + return self._update_role_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_api.py b/datadog_api_client/v2/api/rum_api.py new file mode 100644 index 0000000000..16c3f68c76 --- /dev/null +++ b/datadog_api_client/v2/api/rum_api.py @@ -0,0 +1,1321 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.rum_analytics_aggregate_response import RUMAnalyticsAggregateResponse +from datadog_api_client.v2.model.rum_aggregate_request import RUMAggregateRequest +from datadog_api_client.v2.model.rum_applications_response import RUMApplicationsResponse +from datadog_api_client.v2.model.rum_application_response import RUMApplicationResponse +from datadog_api_client.v2.model.rum_application_create_request import RUMApplicationCreateRequest +from datadog_api_client.v2.model.rum_application_update_request import RUMApplicationUpdateRequest +from datadog_api_client.v2.model.rum_events_response import RUMEventsResponse +from datadog_api_client.v2.model.rum_sort import RUMSort +from datadog_api_client.v2.model.rum_event import RUMEvent +from datadog_api_client.v2.model.rum_search_events_request import RUMSearchEventsRequest +from datadog_api_client.v2.model.sourcemaps_response import SourcemapsResponse +from datadog_api_client.v2.model.sourcemap_map_kind import SourcemapMapKind +from datadog_api_client.v2.model.sourcemap_file_response import SourcemapFileResponse +from datadog_api_client.v2.model.list_sourcemaps_response import ListSourcemapsResponse +from datadog_api_client.v2.model.service_repository_info_response import ServiceRepositoryInfoResponse +from datadog_api_client.v2.model.service_repository_info_request import ServiceRepositoryInfoRequest + + +class RUMApi: + """ + Manage your Real User Monitoring (RUM) applications, and search or aggregate your RUM events over HTTP. See the `RUM & Session Replay page `_ for more information + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._aggregate_rum_events_endpoint = _Endpoint( + settings={ + "response_type": (RUMAnalyticsAggregateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/analytics/aggregate", + "operation_id": "aggregate_rum_events", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RUMAggregateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_rum_application_endpoint = _Endpoint( + settings={ + "response_type": (RUMApplicationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications", + "operation_id": "create_rum_application", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RUMApplicationCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_rum_application_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{id}", + "operation_id": "delete_rum_application", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_sourcemaps_endpoint = _Endpoint( + settings={ + "response_type": (SourcemapsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sourcemaps", + "operation_id": "delete_sourcemaps", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "mapkind": { + "required": True, + "openapi_types": (SourcemapMapKind,), + "attribute": "mapkind", + "location": "query", + }, + "dry_run": { + "required": True, + "openapi_types": (bool,), + "attribute": "dry_run", + "location": "query", + }, + "filter_service": { + "openapi_types": ([str],), + "attribute": "filter[service]", + "location": "query", + "collection_format": "multi", + }, + "filter_version": { + "openapi_types": ([str],), + "attribute": "filter[version]", + "location": "query", + "collection_format": "multi", + }, + "filter_variant": { + "openapi_types": ([str],), + "attribute": "filter[variant]", + "location": "query", + "collection_format": "multi", + }, + "filter_id": { + "openapi_types": ([str],), + "attribute": "filter[id]", + "location": "query", + "collection_format": "multi", + }, + "filter_build_id": { + "openapi_types": ([str],), + "attribute": "filter[build_id]", + "location": "query", + "collection_format": "multi", + }, + "filter_uuid": { + "openapi_types": ([str],), + "attribute": "filter[uuid]", + "location": "query", + "collection_format": "multi", + }, + "filter_platform": { + "openapi_types": ([str],), + "attribute": "filter[platform]", + "location": "query", + "collection_format": "multi", + }, + "filter_build_number": { + "openapi_types": ([str],), + "attribute": "filter[build_number]", + "location": "query", + "collection_format": "multi", + }, + "filter_bundle_name": { + "openapi_types": ([str],), + "attribute": "filter[bundle_name]", + "location": "query", + "collection_format": "multi", + }, + "filter_arch": { + "openapi_types": ([str],), + "attribute": "filter[arch]", + "location": "query", + "collection_format": "multi", + }, + "filter_symbol_source": { + "openapi_types": ([str],), + "attribute": "filter[symbol_source]", + "location": "query", + "collection_format": "multi", + }, + "filter_origin": { + "openapi_types": ([str],), + "attribute": "filter[origin]", + "location": "query", + "collection_format": "multi", + }, + "filter_origin_version": { + "openapi_types": ([str],), + "attribute": "filter[origin_version]", + "location": "query", + "collection_format": "multi", + }, + "filter_filename": { + "openapi_types": (str,), + "attribute": "filter[filename]", + "location": "query", + }, + "filter_debug_id": { + "openapi_types": (str,), + "attribute": "filter[debug_id]", + "location": "query", + }, + "filter_gnu_build_id": { + "openapi_types": (str,), + "attribute": "filter[gnu_build_id]", + "location": "query", + }, + "filter_go_build_id": { + "openapi_types": (str,), + "attribute": "filter[go_build_id]", + "location": "query", + }, + "filter_file_hash": { + "openapi_types": (str,), + "attribute": "filter[file_hash]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_rum_application_endpoint = _Endpoint( + settings={ + "response_type": (RUMApplicationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{id}", + "operation_id": "get_rum_application", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_rum_applications_endpoint = _Endpoint( + settings={ + "response_type": (RUMApplicationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications", + "operation_id": "get_rum_applications", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_service_repository_info_endpoint = _Endpoint( + settings={ + "response_type": (ServiceRepositoryInfoResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sourcemaps/service_repository_info", + "operation_id": "get_service_repository_info", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ServiceRepositoryInfoRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_sourcemaps_endpoint = _Endpoint( + settings={ + "response_type": (SourcemapFileResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sourcemaps", + "operation_id": "get_sourcemaps", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filename": { + "required": True, + "openapi_types": (str,), + "attribute": "filename", + "location": "query", + }, + "service": { + "required": True, + "openapi_types": (str,), + "attribute": "service", + "location": "query", + }, + "version": { + "required": True, + "openapi_types": (str,), + "attribute": "version", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_rum_events_endpoint = _Endpoint( + settings={ + "response_type": (RUMEventsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/events", + "operation_id": "list_rum_events", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_from": { + "openapi_types": (datetime,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (datetime,), + "attribute": "filter[to]", + "location": "query", + }, + "sort": { + "openapi_types": (RUMSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_sourcemaps_endpoint = _Endpoint( + settings={ + "response_type": (ListSourcemapsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sourcemaps/list", + "operation_id": "list_sourcemaps", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "mapkind": { + "openapi_types": (SourcemapMapKind,), + "attribute": "mapkind", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "filter_service": { + "openapi_types": ([str],), + "attribute": "filter[service]", + "location": "query", + "collection_format": "multi", + }, + "filter_version": { + "openapi_types": ([str],), + "attribute": "filter[version]", + "location": "query", + "collection_format": "multi", + }, + "filter_variant": { + "openapi_types": ([str],), + "attribute": "filter[variant]", + "location": "query", + "collection_format": "multi", + }, + "filter_id": { + "openapi_types": ([str],), + "attribute": "filter[id]", + "location": "query", + "collection_format": "multi", + }, + "filter_build_id": { + "openapi_types": ([str],), + "attribute": "filter[build_id]", + "location": "query", + "collection_format": "multi", + }, + "filter_uuid": { + "openapi_types": ([str],), + "attribute": "filter[uuid]", + "location": "query", + "collection_format": "multi", + }, + "filter_platform": { + "openapi_types": ([str],), + "attribute": "filter[platform]", + "location": "query", + "collection_format": "multi", + }, + "filter_build_number": { + "openapi_types": ([str],), + "attribute": "filter[build_number]", + "location": "query", + "collection_format": "multi", + }, + "filter_bundle_name": { + "openapi_types": ([str],), + "attribute": "filter[bundle_name]", + "location": "query", + "collection_format": "multi", + }, + "filter_arch": { + "openapi_types": ([str],), + "attribute": "filter[arch]", + "location": "query", + "collection_format": "multi", + }, + "filter_symbol_source": { + "openapi_types": ([str],), + "attribute": "filter[symbol_source]", + "location": "query", + "collection_format": "multi", + }, + "filter_origin": { + "openapi_types": ([str],), + "attribute": "filter[origin]", + "location": "query", + "collection_format": "multi", + }, + "filter_origin_version": { + "openapi_types": ([str],), + "attribute": "filter[origin_version]", + "location": "query", + "collection_format": "multi", + }, + "filter_filename": { + "openapi_types": (str,), + "attribute": "filter[filename]", + "location": "query", + }, + "filter_debug_id": { + "openapi_types": (str,), + "attribute": "filter[debug_id]", + "location": "query", + }, + "filter_gnu_build_id": { + "openapi_types": (str,), + "attribute": "filter[gnu_build_id]", + "location": "query", + }, + "filter_go_build_id": { + "openapi_types": (str,), + "attribute": "filter[go_build_id]", + "location": "query", + }, + "filter_file_hash": { + "openapi_types": (str,), + "attribute": "filter[file_hash]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._restore_sourcemaps_endpoint = _Endpoint( + settings={ + "response_type": (SourcemapsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sourcemaps/restore", + "operation_id": "restore_sourcemaps", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "mapkind": { + "required": True, + "openapi_types": (SourcemapMapKind,), + "attribute": "mapkind", + "location": "query", + }, + "dry_run": { + "required": True, + "openapi_types": (bool,), + "attribute": "dry_run", + "location": "query", + }, + "filter_service": { + "openapi_types": ([str],), + "attribute": "filter[service]", + "location": "query", + "collection_format": "multi", + }, + "filter_version": { + "openapi_types": ([str],), + "attribute": "filter[version]", + "location": "query", + "collection_format": "multi", + }, + "filter_variant": { + "openapi_types": ([str],), + "attribute": "filter[variant]", + "location": "query", + "collection_format": "multi", + }, + "filter_id": { + "openapi_types": ([str],), + "attribute": "filter[id]", + "location": "query", + "collection_format": "multi", + }, + "filter_build_id": { + "openapi_types": ([str],), + "attribute": "filter[build_id]", + "location": "query", + "collection_format": "multi", + }, + "filter_uuid": { + "openapi_types": ([str],), + "attribute": "filter[uuid]", + "location": "query", + "collection_format": "multi", + }, + "filter_platform": { + "openapi_types": ([str],), + "attribute": "filter[platform]", + "location": "query", + "collection_format": "multi", + }, + "filter_build_number": { + "openapi_types": ([str],), + "attribute": "filter[build_number]", + "location": "query", + "collection_format": "multi", + }, + "filter_bundle_name": { + "openapi_types": ([str],), + "attribute": "filter[bundle_name]", + "location": "query", + "collection_format": "multi", + }, + "filter_arch": { + "openapi_types": ([str],), + "attribute": "filter[arch]", + "location": "query", + "collection_format": "multi", + }, + "filter_symbol_source": { + "openapi_types": ([str],), + "attribute": "filter[symbol_source]", + "location": "query", + "collection_format": "multi", + }, + "filter_origin": { + "openapi_types": ([str],), + "attribute": "filter[origin]", + "location": "query", + "collection_format": "multi", + }, + "filter_origin_version": { + "openapi_types": ([str],), + "attribute": "filter[origin_version]", + "location": "query", + "collection_format": "multi", + }, + "filter_filename": { + "openapi_types": (str,), + "attribute": "filter[filename]", + "location": "query", + }, + "filter_debug_id": { + "openapi_types": (str,), + "attribute": "filter[debug_id]", + "location": "query", + }, + "filter_gnu_build_id": { + "openapi_types": (str,), + "attribute": "filter[gnu_build_id]", + "location": "query", + }, + "filter_go_build_id": { + "openapi_types": (str,), + "attribute": "filter[go_build_id]", + "location": "query", + }, + "filter_file_hash": { + "openapi_types": (str,), + "attribute": "filter[file_hash]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_rum_events_endpoint = _Endpoint( + settings={ + "response_type": (RUMEventsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/events/search", + "operation_id": "search_rum_events", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RUMSearchEventsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_rum_application_endpoint = _Endpoint( + settings={ + "response_type": (RUMApplicationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{id}", + "operation_id": "update_rum_application", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RUMApplicationUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def aggregate_rum_events(self, body: RUMAggregateRequest, ) -> RUMAnalyticsAggregateResponse: + """Aggregate RUM events. + + The API endpoint to aggregate RUM events into buckets of computed metrics and timeseries. + + :type body: RUMAggregateRequest + :rtype: RUMAnalyticsAggregateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._aggregate_rum_events_endpoint.call_with_http_info(**kwargs) + + def create_rum_application(self, body: RUMApplicationCreateRequest, ) -> RUMApplicationResponse: + """Create a new RUM application. + + Create a new RUM application in your organization. + + :type body: RUMApplicationCreateRequest + :rtype: RUMApplicationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_rum_application_endpoint.call_with_http_info(**kwargs) + + def delete_rum_application(self, id: str, ) -> None: + """Delete a RUM application. + + Delete an existing RUM application in your organization. + + :param id: RUM application ID. + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._delete_rum_application_endpoint.call_with_http_info(**kwargs) + + def delete_sourcemaps(self, mapkind: SourcemapMapKind, dry_run: bool, *, filter_service: Union[List[str], UnsetType]=unset, filter_version: Union[List[str], UnsetType]=unset, filter_variant: Union[List[str], UnsetType]=unset, filter_id: Union[List[str], UnsetType]=unset, filter_build_id: Union[List[str], UnsetType]=unset, filter_uuid: Union[List[str], UnsetType]=unset, filter_platform: Union[List[str], UnsetType]=unset, filter_build_number: Union[List[str], UnsetType]=unset, filter_bundle_name: Union[List[str], UnsetType]=unset, filter_arch: Union[List[str], UnsetType]=unset, filter_symbol_source: Union[List[str], UnsetType]=unset, filter_origin: Union[List[str], UnsetType]=unset, filter_origin_version: Union[List[str], UnsetType]=unset, filter_filename: Union[str, UnsetType]=unset, filter_debug_id: Union[str, UnsetType]=unset, filter_gnu_build_id: Union[str, UnsetType]=unset, filter_go_build_id: Union[str, UnsetType]=unset, filter_file_hash: Union[str, UnsetType]=unset, ) -> SourcemapsResponse: + """Delete source maps. + + Deletes source maps matching the specified filter criteria. Supports + dry-run mode to preview which source maps would be deleted without + performing the actual deletion. + + :param mapkind: The type of source map. Valid values are ``js`` , ``jvm`` , ``ios`` , + ``react`` , ``flutter`` , ``elf`` , ``ndk`` , ``il2cpp``. + :type mapkind: SourcemapMapKind + :param dry_run: When set to ``true`` , returns the source maps that would be deleted + without performing the actual deletion. When set to ``false`` , + performs the deletion. + :type dry_run: bool + :param filter_service: Filter by service names (multiple values allowed). Required for + ``js`` , ``jvm`` , ``react`` , and ``flutter`` map kinds. + :type filter_service: [str], optional + :param filter_version: Filter by version values (multiple values allowed, maximum 10). + Required for ``js`` , ``jvm`` , ``react`` , and ``flutter`` map kinds. + :type filter_version: [str], optional + :param filter_variant: Filter by variant values (multiple values allowed). Supported for ``jvm``. + :type filter_variant: [str], optional + :param filter_id: Filter by source map ID values (multiple values allowed). Supported for all map kinds. + :type filter_id: [str], optional + :param filter_build_id: Filter by build ID values (multiple values allowed). Supported for ``jvm`` , ``ndk`` , and ``il2cpp``. + :type filter_build_id: [str], optional + :param filter_uuid: Filter by UUID values (multiple values allowed). Supported for ``ios``. + :type filter_uuid: [str], optional + :param filter_platform: Filter by platform values (multiple values allowed). Supported for ``react``. + :type filter_platform: [str], optional + :param filter_build_number: Filter by build number values (multiple values allowed). Supported for ``react``. + :type filter_build_number: [str], optional + :param filter_bundle_name: Filter by bundle name values (multiple values allowed). Supported for ``react``. + :type filter_bundle_name: [str], optional + :param filter_arch: Filter by architecture values (multiple values allowed). Supported + for ``flutter`` , ``elf`` , and ``ndk``. + :type filter_arch: [str], optional + :param filter_symbol_source: Filter by symbol source values (multiple values allowed). Supported for ``elf``. + :type filter_symbol_source: [str], optional + :param filter_origin: Filter by origin values (multiple values allowed). Supported for ``elf``. + :type filter_origin: [str], optional + :param filter_origin_version: Filter by origin version values (multiple values allowed). Supported for ``elf``. + :type filter_origin_version: [str], optional + :param filter_filename: Filter by filename (single value). Supported for ``js`` , ``elf`` , and ``ndk``. + :type filter_filename: str, optional + :param filter_debug_id: Filter by debug ID (single value). Supported for ``react``. + :type filter_debug_id: str, optional + :param filter_gnu_build_id: Filter by GNU build ID (single value). Supported for ``elf``. + :type filter_gnu_build_id: str, optional + :param filter_go_build_id: Filter by Go build ID (single value). Supported for ``elf``. + :type filter_go_build_id: str, optional + :param filter_file_hash: Filter by file hash (single value). Supported for ``elf``. + :type filter_file_hash: str, optional + :rtype: SourcemapsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["mapkind"] = mapkind + + kwargs["dry_run"] = dry_run + + if filter_service is not unset: + kwargs["filter_service"] = filter_service + + if filter_version is not unset: + kwargs["filter_version"] = filter_version + + if filter_variant is not unset: + kwargs["filter_variant"] = filter_variant + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter_build_id is not unset: + kwargs["filter_build_id"] = filter_build_id + + if filter_uuid is not unset: + kwargs["filter_uuid"] = filter_uuid + + if filter_platform is not unset: + kwargs["filter_platform"] = filter_platform + + if filter_build_number is not unset: + kwargs["filter_build_number"] = filter_build_number + + if filter_bundle_name is not unset: + kwargs["filter_bundle_name"] = filter_bundle_name + + if filter_arch is not unset: + kwargs["filter_arch"] = filter_arch + + if filter_symbol_source is not unset: + kwargs["filter_symbol_source"] = filter_symbol_source + + if filter_origin is not unset: + kwargs["filter_origin"] = filter_origin + + if filter_origin_version is not unset: + kwargs["filter_origin_version"] = filter_origin_version + + if filter_filename is not unset: + kwargs["filter_filename"] = filter_filename + + if filter_debug_id is not unset: + kwargs["filter_debug_id"] = filter_debug_id + + if filter_gnu_build_id is not unset: + kwargs["filter_gnu_build_id"] = filter_gnu_build_id + + if filter_go_build_id is not unset: + kwargs["filter_go_build_id"] = filter_go_build_id + + if filter_file_hash is not unset: + kwargs["filter_file_hash"] = filter_file_hash + + return self._delete_sourcemaps_endpoint.call_with_http_info(**kwargs) + + def get_rum_application(self, id: str, ) -> RUMApplicationResponse: + """Get a RUM application. + + Get the RUM application with given ID in your organization. + + :param id: RUM application ID. + :type id: str + :rtype: RUMApplicationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_rum_application_endpoint.call_with_http_info(**kwargs) + + def get_rum_applications(self, ) -> RUMApplicationsResponse: + """List all the RUM applications. + + List all the RUM applications in your organization. + + :rtype: RUMApplicationsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_rum_applications_endpoint.call_with_http_info(**kwargs) + + def get_service_repository_info(self, body: ServiceRepositoryInfoRequest, ) -> ServiceRepositoryInfoResponse: + """Get service repository information. + + Returns the repository URL and commit SHA associated with a given service and version. + + :type body: ServiceRepositoryInfoRequest + :rtype: ServiceRepositoryInfoResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._get_service_repository_info_endpoint.call_with_http_info(**kwargs) + + def get_sourcemaps(self, filename: str, service: str, version: str, ) -> SourcemapFileResponse: + """Get a JavaScript source map. + + Retrieves the content of a specific JavaScript source map file by its + filename, service name, and version. + + :param filename: The path to the source map file. + :type filename: str + :param service: The service name associated with the source map. + :type service: str + :param version: The version of the service associated with the source map. + :type version: str + :rtype: SourcemapFileResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filename"] = filename + + kwargs["service"] = service + + kwargs["version"] = version + + return self._get_sourcemaps_endpoint.call_with_http_info(**kwargs) + + def list_rum_events(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[RUMSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> RUMEventsResponse: + """Get a list of RUM events. + + List endpoint returns events that match a RUM search query. + `Results are paginated `_. + + Use this endpoint to see your latest RUM events. + + :param filter_query: Search query following RUM syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested events. + :type filter_to: datetime, optional + :param sort: Order of events in results. + :type sort: RUMSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + :rtype: RUMEventsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_rum_events_endpoint.call_with_http_info(**kwargs) + + def list_rum_events_with_pagination(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[RUMSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[RUMEvent]: + """Get a list of RUM events. + + Provide a paginated version of :meth:`list_rum_events`, returning all items. + + :param filter_query: Search query following RUM syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested events. + :type filter_from: datetime, optional + :param filter_to: Maximum timestamp for requested events. + :type filter_to: datetime, optional + :param sort: Order of events in results. + :type sort: RUMSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of events in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[RUMEvent] + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_rum_events_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_sourcemaps(self, *, mapkind: Union[SourcemapMapKind, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter_service: Union[List[str], UnsetType]=unset, filter_version: Union[List[str], UnsetType]=unset, filter_variant: Union[List[str], UnsetType]=unset, filter_id: Union[List[str], UnsetType]=unset, filter_build_id: Union[List[str], UnsetType]=unset, filter_uuid: Union[List[str], UnsetType]=unset, filter_platform: Union[List[str], UnsetType]=unset, filter_build_number: Union[List[str], UnsetType]=unset, filter_bundle_name: Union[List[str], UnsetType]=unset, filter_arch: Union[List[str], UnsetType]=unset, filter_symbol_source: Union[List[str], UnsetType]=unset, filter_origin: Union[List[str], UnsetType]=unset, filter_origin_version: Union[List[str], UnsetType]=unset, filter_filename: Union[str, UnsetType]=unset, filter_debug_id: Union[str, UnsetType]=unset, filter_gnu_build_id: Union[str, UnsetType]=unset, filter_go_build_id: Union[str, UnsetType]=unset, filter_file_hash: Union[str, UnsetType]=unset, ) -> ListSourcemapsResponse: + """List source maps. + + Retrieves a paginated list of source maps matching the specified filter criteria. + + :param mapkind: The type of source map. Defaults to ``js``. + :type mapkind: SourcemapMapKind, optional + :param page_size: The number of results to return per page. Must be at least 1. + :type page_size: int, optional + :param page_number: The page number to retrieve, starting from 1. + :type page_number: int, optional + :param filter_service: Filter by service names (multiple values allowed). Required for + ``js`` , ``jvm`` , ``react`` , and ``flutter`` map kinds. + :type filter_service: [str], optional + :param filter_version: Filter by version values (multiple values allowed). Required for + ``js`` , ``jvm`` , ``react`` , and ``flutter`` map kinds. + :type filter_version: [str], optional + :param filter_variant: Filter by variant values (multiple values allowed). Supported for ``jvm``. + :type filter_variant: [str], optional + :param filter_id: Filter by source map ID values (multiple values allowed). Supported for all map kinds. + :type filter_id: [str], optional + :param filter_build_id: Filter by build ID values (multiple values allowed). Supported for ``jvm`` , ``ndk`` , and ``il2cpp``. + :type filter_build_id: [str], optional + :param filter_uuid: Filter by UUID values (multiple values allowed). Supported for ``ios``. + :type filter_uuid: [str], optional + :param filter_platform: Filter by platform values (multiple values allowed). Supported for ``react``. + :type filter_platform: [str], optional + :param filter_build_number: Filter by build number values (multiple values allowed). Supported for ``react``. + :type filter_build_number: [str], optional + :param filter_bundle_name: Filter by bundle name values (multiple values allowed). Supported for ``react``. + :type filter_bundle_name: [str], optional + :param filter_arch: Filter by architecture values (multiple values allowed). Supported + for ``flutter`` , ``elf`` , and ``ndk``. + :type filter_arch: [str], optional + :param filter_symbol_source: Filter by symbol source values (multiple values allowed). Supported for ``elf``. + :type filter_symbol_source: [str], optional + :param filter_origin: Filter by origin values (multiple values allowed). Supported for ``elf``. + :type filter_origin: [str], optional + :param filter_origin_version: Filter by origin version values (multiple values allowed). Supported for ``elf``. + :type filter_origin_version: [str], optional + :param filter_filename: Filter by filename (single value). Supported for ``js`` , ``elf`` , and ``ndk``. + :type filter_filename: str, optional + :param filter_debug_id: Filter by debug ID (single value). Supported for ``react``. + :type filter_debug_id: str, optional + :param filter_gnu_build_id: Filter by GNU build ID (single value). Supported for ``elf``. + :type filter_gnu_build_id: str, optional + :param filter_go_build_id: Filter by Go build ID (single value). Supported for ``elf``. + :type filter_go_build_id: str, optional + :param filter_file_hash: Filter by file hash (single value). Supported for ``elf``. + :type filter_file_hash: str, optional + :rtype: ListSourcemapsResponse + """ + kwargs: Dict[str, Any] = {} + if mapkind is not unset: + kwargs["mapkind"] = mapkind + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter_service is not unset: + kwargs["filter_service"] = filter_service + + if filter_version is not unset: + kwargs["filter_version"] = filter_version + + if filter_variant is not unset: + kwargs["filter_variant"] = filter_variant + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter_build_id is not unset: + kwargs["filter_build_id"] = filter_build_id + + if filter_uuid is not unset: + kwargs["filter_uuid"] = filter_uuid + + if filter_platform is not unset: + kwargs["filter_platform"] = filter_platform + + if filter_build_number is not unset: + kwargs["filter_build_number"] = filter_build_number + + if filter_bundle_name is not unset: + kwargs["filter_bundle_name"] = filter_bundle_name + + if filter_arch is not unset: + kwargs["filter_arch"] = filter_arch + + if filter_symbol_source is not unset: + kwargs["filter_symbol_source"] = filter_symbol_source + + if filter_origin is not unset: + kwargs["filter_origin"] = filter_origin + + if filter_origin_version is not unset: + kwargs["filter_origin_version"] = filter_origin_version + + if filter_filename is not unset: + kwargs["filter_filename"] = filter_filename + + if filter_debug_id is not unset: + kwargs["filter_debug_id"] = filter_debug_id + + if filter_gnu_build_id is not unset: + kwargs["filter_gnu_build_id"] = filter_gnu_build_id + + if filter_go_build_id is not unset: + kwargs["filter_go_build_id"] = filter_go_build_id + + if filter_file_hash is not unset: + kwargs["filter_file_hash"] = filter_file_hash + + return self._list_sourcemaps_endpoint.call_with_http_info(**kwargs) + + def restore_sourcemaps(self, mapkind: SourcemapMapKind, dry_run: bool, *, filter_service: Union[List[str], UnsetType]=unset, filter_version: Union[List[str], UnsetType]=unset, filter_variant: Union[List[str], UnsetType]=unset, filter_id: Union[List[str], UnsetType]=unset, filter_build_id: Union[List[str], UnsetType]=unset, filter_uuid: Union[List[str], UnsetType]=unset, filter_platform: Union[List[str], UnsetType]=unset, filter_build_number: Union[List[str], UnsetType]=unset, filter_bundle_name: Union[List[str], UnsetType]=unset, filter_arch: Union[List[str], UnsetType]=unset, filter_symbol_source: Union[List[str], UnsetType]=unset, filter_origin: Union[List[str], UnsetType]=unset, filter_origin_version: Union[List[str], UnsetType]=unset, filter_filename: Union[str, UnsetType]=unset, filter_debug_id: Union[str, UnsetType]=unset, filter_gnu_build_id: Union[str, UnsetType]=unset, filter_go_build_id: Union[str, UnsetType]=unset, filter_file_hash: Union[str, UnsetType]=unset, ) -> SourcemapsResponse: + """Restore source maps. + + Restores previously deleted source maps matching the specified filter + criteria. Supports dry-run mode to preview which source maps would be + restored without performing the actual restoration. + + :param mapkind: The type of source map. Valid values are ``js`` , ``jvm`` , ``ios`` , + ``react`` , ``flutter`` , ``elf`` , ``ndk`` , ``il2cpp``. + :type mapkind: SourcemapMapKind + :param dry_run: When set to ``true`` , returns the source maps that would be restored + without performing the actual restoration. When set to ``false`` , + performs the restoration. + :type dry_run: bool + :param filter_service: Filter by service names (multiple values allowed). Required for + ``js`` , ``jvm`` , ``react`` , and ``flutter`` map kinds. + :type filter_service: [str], optional + :param filter_version: Filter by version values (multiple values allowed, maximum 10). + Required for ``js`` , ``jvm`` , ``react`` , and ``flutter`` map kinds. + :type filter_version: [str], optional + :param filter_variant: Filter by variant values (multiple values allowed). Supported for ``jvm``. + :type filter_variant: [str], optional + :param filter_id: Filter by source map ID values (multiple values allowed). Supported for all map kinds. + :type filter_id: [str], optional + :param filter_build_id: Filter by build ID values (multiple values allowed). Supported for ``jvm`` , ``ndk`` , and ``il2cpp``. + :type filter_build_id: [str], optional + :param filter_uuid: Filter by UUID values (multiple values allowed). Supported for ``ios``. + :type filter_uuid: [str], optional + :param filter_platform: Filter by platform values (multiple values allowed). Supported for ``react``. + :type filter_platform: [str], optional + :param filter_build_number: Filter by build number values (multiple values allowed). Supported for ``react``. + :type filter_build_number: [str], optional + :param filter_bundle_name: Filter by bundle name values (multiple values allowed). Supported for ``react``. + :type filter_bundle_name: [str], optional + :param filter_arch: Filter by architecture values (multiple values allowed). Supported + for ``flutter`` , ``elf`` , and ``ndk``. + :type filter_arch: [str], optional + :param filter_symbol_source: Filter by symbol source values (multiple values allowed). Supported for ``elf``. + :type filter_symbol_source: [str], optional + :param filter_origin: Filter by origin values (multiple values allowed). Supported for ``elf``. + :type filter_origin: [str], optional + :param filter_origin_version: Filter by origin version values (multiple values allowed). Supported for ``elf``. + :type filter_origin_version: [str], optional + :param filter_filename: Filter by filename (single value). Supported for ``js`` , ``elf`` , and ``ndk``. + :type filter_filename: str, optional + :param filter_debug_id: Filter by debug ID (single value). Supported for ``react``. + :type filter_debug_id: str, optional + :param filter_gnu_build_id: Filter by GNU build ID (single value). Supported for ``elf``. + :type filter_gnu_build_id: str, optional + :param filter_go_build_id: Filter by Go build ID (single value). Supported for ``elf``. + :type filter_go_build_id: str, optional + :param filter_file_hash: Filter by file hash (single value). Supported for ``elf``. + :type filter_file_hash: str, optional + :rtype: SourcemapsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["mapkind"] = mapkind + + kwargs["dry_run"] = dry_run + + if filter_service is not unset: + kwargs["filter_service"] = filter_service + + if filter_version is not unset: + kwargs["filter_version"] = filter_version + + if filter_variant is not unset: + kwargs["filter_variant"] = filter_variant + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter_build_id is not unset: + kwargs["filter_build_id"] = filter_build_id + + if filter_uuid is not unset: + kwargs["filter_uuid"] = filter_uuid + + if filter_platform is not unset: + kwargs["filter_platform"] = filter_platform + + if filter_build_number is not unset: + kwargs["filter_build_number"] = filter_build_number + + if filter_bundle_name is not unset: + kwargs["filter_bundle_name"] = filter_bundle_name + + if filter_arch is not unset: + kwargs["filter_arch"] = filter_arch + + if filter_symbol_source is not unset: + kwargs["filter_symbol_source"] = filter_symbol_source + + if filter_origin is not unset: + kwargs["filter_origin"] = filter_origin + + if filter_origin_version is not unset: + kwargs["filter_origin_version"] = filter_origin_version + + if filter_filename is not unset: + kwargs["filter_filename"] = filter_filename + + if filter_debug_id is not unset: + kwargs["filter_debug_id"] = filter_debug_id + + if filter_gnu_build_id is not unset: + kwargs["filter_gnu_build_id"] = filter_gnu_build_id + + if filter_go_build_id is not unset: + kwargs["filter_go_build_id"] = filter_go_build_id + + if filter_file_hash is not unset: + kwargs["filter_file_hash"] = filter_file_hash + + return self._restore_sourcemaps_endpoint.call_with_http_info(**kwargs) + + def search_rum_events(self, body: RUMSearchEventsRequest, ) -> RUMEventsResponse: + """Search RUM events. + + List endpoint returns RUM events that match a RUM search query. + `Results are paginated `_. + + Use this endpoint to build complex RUM events filtering and search. + + :type body: RUMSearchEventsRequest + :rtype: RUMEventsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._search_rum_events_endpoint.call_with_http_info(**kwargs) + + def search_rum_events_with_pagination(self, body: RUMSearchEventsRequest, ) -> collections.abc.Iterable[RUMEvent]: + """Search RUM events. + + Provide a paginated version of :meth:`search_rum_events`, returning all items. + + :type body: RUMSearchEventsRequest + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[RUMEvent] + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.page.limit", 10) + endpoint = self._search_rum_events_endpoint + set_attribute_from_path(kwargs, "body.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.page.cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_rum_application(self, id: str, body: RUMApplicationUpdateRequest, ) -> RUMApplicationResponse: + """Update a RUM application. + + Update the RUM application with given ID in your organization. + + :param id: RUM application ID. + :type id: str + :type body: RUMApplicationUpdateRequest + :rtype: RUMApplicationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._update_rum_application_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_audience_management_api.py b/datadog_api_client/v2/api/rum_audience_management_api.py new file mode 100644 index 0000000000..cea35e3d9d --- /dev/null +++ b/datadog_api_client/v2/api/rum_audience_management_api.py @@ -0,0 +1,435 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.facet_info_response import FacetInfoResponse +from datadog_api_client.v2.model.facet_info_request import FacetInfoRequest +from datadog_api_client.v2.model.query_response import QueryResponse +from datadog_api_client.v2.model.query_account_request import QueryAccountRequest +from datadog_api_client.v2.model.query_event_filtered_users_request import QueryEventFilteredUsersRequest +from datadog_api_client.v2.model.query_users_request import QueryUsersRequest +from datadog_api_client.v2.model.get_mapping_response import GetMappingResponse +from datadog_api_client.v2.model.create_connection_request import CreateConnectionRequest +from datadog_api_client.v2.model.update_connection_request import UpdateConnectionRequest +from datadog_api_client.v2.model.list_connections_response import ListConnectionsResponse + + +class RumAudienceManagementApi: + """ + Auto-generated tag Rum Audience Management + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_connection_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/{entity}/mapping/connection", + "operation_id": "create_connection", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "entity": { + "required": True, + "openapi_types": (str,), + "attribute": "entity", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateConnectionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_connection_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/{entity}/mapping/connection/{id}", + "operation_id": "delete_connection", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "entity": { + "required": True, + "openapi_types": (str,), + "attribute": "entity", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_account_facet_info_endpoint = _Endpoint( + settings={ + "response_type": (FacetInfoResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/accounts/facet_info", + "operation_id": "get_account_facet_info", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (FacetInfoRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_mapping_endpoint = _Endpoint( + settings={ + "response_type": (GetMappingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/{entity}/mapping", + "operation_id": "get_mapping", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "entity": { + "required": True, + "openapi_types": (str,), + "attribute": "entity", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_user_facet_info_endpoint = _Endpoint( + settings={ + "response_type": (FacetInfoResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/users/facet_info", + "operation_id": "get_user_facet_info", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (FacetInfoRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_connections_endpoint = _Endpoint( + settings={ + "response_type": (ListConnectionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/{entity}/mapping/connections", + "operation_id": "list_connections", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "entity": { + "required": True, + "openapi_types": (str,), + "attribute": "entity", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._query_accounts_endpoint = _Endpoint( + settings={ + "response_type": (QueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/accounts/query", + "operation_id": "query_accounts", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (QueryAccountRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._query_event_filtered_users_endpoint = _Endpoint( + settings={ + "response_type": (QueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/users/event_filtered_query", + "operation_id": "query_event_filtered_users", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (QueryEventFilteredUsersRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._query_users_endpoint = _Endpoint( + settings={ + "response_type": (QueryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/users/query", + "operation_id": "query_users", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (QueryUsersRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_connection_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/product-analytics/{entity}/mapping/connection", + "operation_id": "update_connection", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "entity": { + "required": True, + "openapi_types": (str,), + "attribute": "entity", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateConnectionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_connection(self, entity: str, body: CreateConnectionRequest, ) -> None: + """Create connection. + + Create a new data connection and its fields for an entity + + :param entity: The entity for which to create the connection + :type entity: str + :type body: CreateConnectionRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["entity"] = entity + + kwargs["body"] = body + + return self._create_connection_endpoint.call_with_http_info(**kwargs) + + def delete_connection(self, id: str, entity: str, ) -> None: + """Delete connection. + + Delete an existing data connection for an entity + + :param id: The connection ID to delete + :type id: str + :param entity: The entity for which to delete the connection + :type entity: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["entity"] = entity + + return self._delete_connection_endpoint.call_with_http_info(**kwargs) + + def get_account_facet_info(self, body: FacetInfoRequest, ) -> FacetInfoResponse: + """Get account facet info. + + Get facet information for account attributes including possible values and counts + + :type body: FacetInfoRequest + :rtype: FacetInfoResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._get_account_facet_info_endpoint.call_with_http_info(**kwargs) + + def get_mapping(self, entity: str, ) -> GetMappingResponse: + """Get mapping. + + Get entity mapping configuration including all available attributes and their properties + + :param entity: The entity for which to get the mapping + :type entity: str + :rtype: GetMappingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["entity"] = entity + + return self._get_mapping_endpoint.call_with_http_info(**kwargs) + + def get_user_facet_info(self, body: FacetInfoRequest, ) -> FacetInfoResponse: + """Get user facet info. + + Get facet information for user attributes including possible values and counts + + :type body: FacetInfoRequest + :rtype: FacetInfoResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._get_user_facet_info_endpoint.call_with_http_info(**kwargs) + + def list_connections(self, entity: str, ) -> ListConnectionsResponse: + """List connections. + + List all data connections for an entity + + :param entity: The entity for which to list connections + :type entity: str + :rtype: ListConnectionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["entity"] = entity + + return self._list_connections_endpoint.call_with_http_info(**kwargs) + + def query_accounts(self, body: QueryAccountRequest, ) -> QueryResponse: + """Query accounts. + + Query accounts with flexible filtering by account properties + + :type body: QueryAccountRequest + :rtype: QueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_accounts_endpoint.call_with_http_info(**kwargs) + + def query_event_filtered_users(self, body: QueryEventFilteredUsersRequest, ) -> QueryResponse: + """Query event filtered users. + + Query users filtered by both user properties and event platform data + + :type body: QueryEventFilteredUsersRequest + :rtype: QueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_event_filtered_users_endpoint.call_with_http_info(**kwargs) + + def query_users(self, body: QueryUsersRequest, ) -> QueryResponse: + """Query users. + + Query users with flexible filtering by user properties, with optional wildcard search + + :type body: QueryUsersRequest + :rtype: QueryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_users_endpoint.call_with_http_info(**kwargs) + + def update_connection(self, entity: str, body: UpdateConnectionRequest, ) -> None: + """Update connection. + + Update an existing data connection by adding, updating, or deleting fields + + :param entity: The entity for which to update the connection + :type entity: str + :type body: UpdateConnectionRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["entity"] = entity + + kwargs["body"] = body + + return self._update_connection_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_config_api.py b/datadog_api_client/v2/api/rum_config_api.py new file mode 100644 index 0000000000..e788390084 --- /dev/null +++ b/datadog_api_client/v2/api/rum_config_api.py @@ -0,0 +1,139 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.rum_config_response import RumConfigResponse +from datadog_api_client.v2.model.rum_config_update_request import RumConfigUpdateRequest +from datadog_api_client.v2.model.rum_config_create_request import RumConfigCreateRequest + + +class RUMConfigApi: + """ + Manage the `Real User Monitoring (RUM) `_ + configuration for your organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_rum_config_endpoint = _Endpoint( + settings={ + "response_type": (RumConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/config", + "operation_id": "create_rum_config", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RumConfigCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_rum_config_endpoint = _Endpoint( + settings={ + "response_type": (RumConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/config", + "operation_id": "get_rum_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_rum_config_endpoint = _Endpoint( + settings={ + "response_type": (RumConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/config", + "operation_id": "update_rum_config", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RumConfigUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_rum_config(self, body: RumConfigCreateRequest, ) -> RumConfigResponse: + """Create the RUM configuration. + + Create the RUM configuration for your organization. + Returns the RUM configuration object from the request body when the request is successful. + + :param body: The definition of the RUM configuration to create. + :type body: RumConfigCreateRequest + :rtype: RumConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_rum_config_endpoint.call_with_http_info(**kwargs) + + def get_rum_config(self, ) -> RumConfigResponse: + """Get the RUM configuration. + + Get the RUM configuration for your organization. + + :rtype: RumConfigResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_rum_config_endpoint.call_with_http_info(**kwargs) + + def update_rum_config(self, body: RumConfigUpdateRequest, ) -> RumConfigResponse: + """Update the RUM configuration. + + Update the RUM configuration for your organization. + Returns the RUM configuration object from the request body when the request is successful. + + :param body: New definition of the RUM configuration. + :type body: RumConfigUpdateRequest + :rtype: RumConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_rum_config_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_insights_api.py b/datadog_api_client/v2/api/rum_insights_api.py new file mode 100644 index 0000000000..9c017732c0 --- /dev/null +++ b/datadog_api_client/v2/api/rum_insights_api.py @@ -0,0 +1,146 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.aggregated_long_tasks_response import AggregatedLongTasksResponse +from datadog_api_client.v2.model.aggregated_long_tasks_request import AggregatedLongTasksRequest +from datadog_api_client.v2.model.aggregated_signals_problems_response import AggregatedSignalsProblemsResponse +from datadog_api_client.v2.model.aggregated_signals_problems_request import AggregatedSignalsProblemsRequest +from datadog_api_client.v2.model.aggregated_waterfall_response import AggregatedWaterfallResponse +from datadog_api_client.v2.model.aggregated_waterfall_request import AggregatedWaterfallRequest + + +class RUMInsightsApi: + """ + Get insights into the performance of your Real User Monitoring (RUM) applications over HTTP. See the `RUM & Session Replay page `_ for more information + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._query_aggregated_long_tasks_endpoint = _Endpoint( + settings={ + "response_type": (AggregatedLongTasksResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/query/insight/aggregated_long_tasks", + "operation_id": "query_aggregated_long_tasks", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AggregatedLongTasksRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._query_aggregated_signals_problems_endpoint = _Endpoint( + settings={ + "response_type": (AggregatedSignalsProblemsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/query/insight/aggregated_signals_problems", + "operation_id": "query_aggregated_signals_problems", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AggregatedSignalsProblemsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._query_aggregated_waterfall_endpoint = _Endpoint( + settings={ + "response_type": (AggregatedWaterfallResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/query/insight/aggregated_waterfall", + "operation_id": "query_aggregated_waterfall", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AggregatedWaterfallRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def query_aggregated_long_tasks(self, body: AggregatedLongTasksRequest, ) -> AggregatedLongTasksResponse: + """Query aggregated long tasks. + + Get aggregated long task data for a RUM view, grouped by invoker type and sampled across multiple view instances. + + :type body: AggregatedLongTasksRequest + :rtype: AggregatedLongTasksResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_aggregated_long_tasks_endpoint.call_with_http_info(**kwargs) + + def query_aggregated_signals_problems(self, body: AggregatedSignalsProblemsRequest, ) -> AggregatedSignalsProblemsResponse: + """Query aggregated signals and problems. + + Get aggregated performance signals and problem detections for a RUM view, sampled across multiple view instances. + + :type body: AggregatedSignalsProblemsRequest + :rtype: AggregatedSignalsProblemsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_aggregated_signals_problems_endpoint.call_with_http_info(**kwargs) + + def query_aggregated_waterfall(self, body: AggregatedWaterfallRequest, ) -> AggregatedWaterfallResponse: + """Query aggregated waterfall. + + Get aggregated network resource waterfall data for a RUM view, sampled across multiple view instances. + + :type body: AggregatedWaterfallRequest + :rtype: AggregatedWaterfallResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._query_aggregated_waterfall_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_metrics_api.py b/datadog_api_client/v2/api/rum_metrics_api.py new file mode 100644 index 0000000000..7e0709a2ca --- /dev/null +++ b/datadog_api_client/v2/api/rum_metrics_api.py @@ -0,0 +1,223 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.rum_metrics_response import RumMetricsResponse +from datadog_api_client.v2.model.rum_metric_response import RumMetricResponse +from datadog_api_client.v2.model.rum_metric_create_request import RumMetricCreateRequest +from datadog_api_client.v2.model.rum_metric_update_request import RumMetricUpdateRequest + + +class RumMetricsApi: + """ + Manage configuration of `RUM-based metrics `_ for your organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_rum_metric_endpoint = _Endpoint( + settings={ + "response_type": (RumMetricResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/config/metrics", + "operation_id": "create_rum_metric", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RumMetricCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_rum_metric_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/config/metrics/{metric_id}", + "operation_id": "delete_rum_metric", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "metric_id": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_rum_metric_endpoint = _Endpoint( + settings={ + "response_type": (RumMetricResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/config/metrics/{metric_id}", + "operation_id": "get_rum_metric", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_id": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_rum_metrics_endpoint = _Endpoint( + settings={ + "response_type": (RumMetricsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/config/metrics", + "operation_id": "list_rum_metrics", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_rum_metric_endpoint = _Endpoint( + settings={ + "response_type": (RumMetricResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/config/metrics/{metric_id}", + "operation_id": "update_rum_metric", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "metric_id": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RumMetricUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_rum_metric(self, body: RumMetricCreateRequest, ) -> RumMetricResponse: + """Create a RUM-based metric. + + Create a metric based on your organization's RUM data. + Returns the RUM-based metric object from the request body when the request is successful. + + :param body: The definition of the new RUM-based metric. + :type body: RumMetricCreateRequest + :rtype: RumMetricResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_rum_metric_endpoint.call_with_http_info(**kwargs) + + def delete_rum_metric(self, metric_id: str, ) -> None: + """Delete a RUM-based metric. + + Delete a specific RUM-based metric from your organization. + + :param metric_id: The name of the RUM-based metric. + :type metric_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_id"] = metric_id + + return self._delete_rum_metric_endpoint.call_with_http_info(**kwargs) + + def get_rum_metric(self, metric_id: str, ) -> RumMetricResponse: + """Get a RUM-based metric. + + Get a specific RUM-based metric from your organization. + + :param metric_id: The name of the RUM-based metric. + :type metric_id: str + :rtype: RumMetricResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_id"] = metric_id + + return self._get_rum_metric_endpoint.call_with_http_info(**kwargs) + + def list_rum_metrics(self, ) -> RumMetricsResponse: + """Get all RUM-based metrics. + + Get the list of configured RUM-based metrics with their definitions. + + :rtype: RumMetricsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_rum_metrics_endpoint.call_with_http_info(**kwargs) + + def update_rum_metric(self, metric_id: str, body: RumMetricUpdateRequest, ) -> RumMetricResponse: + """Update a RUM-based metric. + + Update a specific RUM-based metric from your organization. + Returns the RUM-based metric object from the request body when the request is successful. + + :param metric_id: The name of the RUM-based metric. + :type metric_id: str + :param body: New definition of the RUM-based metric. + :type body: RumMetricUpdateRequest + :rtype: RumMetricResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_id"] = metric_id + + kwargs["body"] = body + + return self._update_rum_metric_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_operations_api.py b/datadog_api_client/v2/api/rum_operations_api.py new file mode 100644 index 0000000000..62877dc46e --- /dev/null +++ b/datadog_api_client/v2/api/rum_operations_api.py @@ -0,0 +1,558 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.rum_operation_response import RUMOperationResponse +from datadog_api_client.v2.model.rum_operation_create_request import RUMOperationCreateRequest +from datadog_api_client.v2.model.rum_operations_list_response import RUMOperationsListResponse +from datadog_api_client.v2.model.rum_operation_strong_links_list_response import RUMOperationStrongLinksListResponse +from datadog_api_client.v2.model.rum_operation_strong_link_response import RUMOperationStrongLinkResponse +from datadog_api_client.v2.model.rum_operation_strong_link_create_request import RUMOperationStrongLinkCreateRequest +from datadog_api_client.v2.model.rum_operation_strong_link_update_request import RUMOperationStrongLinkUpdateRequest +from datadog_api_client.v2.model.rum_operation_update_request import RUMOperationUpdateRequest + + +class RUMOperationsApi: + """ + Manage `RUM Operations `_ , business + transactions detected from RUM events through a configurable journey, and their strong links + to features. See the `RUM & Session Replay page `_ + for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_rum_operation_endpoint = _Endpoint( + settings={ + "response_type": (RUMOperationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations", + "operation_id": "create_rum_operation", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RUMOperationCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_rum_operation_strong_link_endpoint = _Endpoint( + settings={ + "response_type": (RUMOperationStrongLinkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations/strong_links", + "operation_id": "create_rum_operation_strong_link", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RUMOperationStrongLinkCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_rum_operation_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations/{rum_operation_id}", + "operation_id": "delete_rum_operation", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rum_operation_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rum_operation_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_rum_operation_strong_link_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations/strong_links/{rum_operation_id}/{feature_id}", + "operation_id": "delete_rum_operation_strong_link", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rum_operation_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rum_operation_id", + "location": "path", + }, + "feature_id": { + "required": True, + "openapi_types": (str,), + "attribute": "feature_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_rum_operation_endpoint = _Endpoint( + settings={ + "response_type": (RUMOperationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations/{rum_operation_id}", + "operation_id": "get_rum_operation", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rum_operation_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rum_operation_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_rum_operation_by_name_endpoint = _Endpoint( + settings={ + "response_type": (RUMOperationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations/by-name/{name}", + "operation_id": "get_rum_operation_by_name", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "name": { + "required": True, + "openapi_types": (str,), + "attribute": "name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_rum_operations_endpoint = _Endpoint( + settings={ + "response_type": (RUMOperationsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations/search", + "operation_id": "list_rum_operations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "page_offset": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 100, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "creator": { + "openapi_types": (str,), + "attribute": "creator", + "location": "query", + }, + "team": { + "openapi_types": (str,), + "attribute": "team", + "location": "query", + }, + "feature_id": { + "openapi_types": (str,), + "attribute": "feature_id", + "location": "query", + }, + "application_id": { + "openapi_types": (UUID,), + "attribute": "application_id", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_rum_operation_strong_links_endpoint = _Endpoint( + settings={ + "response_type": (RUMOperationStrongLinksListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations/strong_links", + "operation_id": "list_rum_operation_strong_links", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "operation_id": { + "openapi_types": (str,), + "attribute": "operation_id", + "location": "query", + }, + "feature_id": { + "openapi_types": (str,), + "attribute": "feature_id", + "location": "query", + }, + "page_offset": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 200, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_rum_operation_endpoint = _Endpoint( + settings={ + "response_type": (RUMOperationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations/{rum_operation_id}", + "operation_id": "update_rum_operation", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "rum_operation_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rum_operation_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RUMOperationUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_rum_operation_strong_link_endpoint = _Endpoint( + settings={ + "response_type": (RUMOperationStrongLinkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/operations/strong_links/{rum_operation_id}/{feature_id}", + "operation_id": "update_rum_operation_strong_link", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "rum_operation_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rum_operation_id", + "location": "path", + }, + "feature_id": { + "required": True, + "openapi_types": (str,), + "attribute": "feature_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RUMOperationStrongLinkUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_rum_operation(self, body: RUMOperationCreateRequest, ) -> RUMOperationResponse: + """Create a RUM operation. + + Create a new RUM operation, defining the journey used to detect it from RUM events. + + :type body: RUMOperationCreateRequest + :rtype: RUMOperationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_rum_operation_endpoint.call_with_http_info(**kwargs) + + def create_rum_operation_strong_link(self, body: RUMOperationStrongLinkCreateRequest, ) -> RUMOperationStrongLinkResponse: + """Create a RUM operation strong link. + + Create a strong link between a RUM operation and a feature, confirming that the feature + belongs to the operation. The operation can be identified by ``operation_id`` or ``operation_name`` ; + if ``operation_name`` does not match an existing operation, a stub operation is created. + + :type body: RUMOperationStrongLinkCreateRequest + :rtype: RUMOperationStrongLinkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_rum_operation_strong_link_endpoint.call_with_http_info(**kwargs) + + def delete_rum_operation(self, rum_operation_id: str, ) -> None: + """Delete a RUM operation. + + Delete a RUM operation. + + :param rum_operation_id: The unique identifier of the RUM operation to delete. + :type rum_operation_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rum_operation_id"] = rum_operation_id + + return self._delete_rum_operation_endpoint.call_with_http_info(**kwargs) + + def delete_rum_operation_strong_link(self, rum_operation_id: str, feature_id: str, ) -> None: + """Delete a RUM operation strong link. + + Delete the strong link between a RUM operation and a feature. + + :param rum_operation_id: The unique identifier of the RUM operation. + :type rum_operation_id: str + :param feature_id: The unique identifier of the feature. + :type feature_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rum_operation_id"] = rum_operation_id + + kwargs["feature_id"] = feature_id + + return self._delete_rum_operation_strong_link_endpoint.call_with_http_info(**kwargs) + + def get_rum_operation(self, rum_operation_id: str, ) -> RUMOperationResponse: + """Get a RUM operation. + + Retrieve a specific RUM operation by its unique identifier. + + :param rum_operation_id: The unique identifier of the RUM operation. + :type rum_operation_id: str + :rtype: RUMOperationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rum_operation_id"] = rum_operation_id + + return self._get_rum_operation_endpoint.call_with_http_info(**kwargs) + + def get_rum_operation_by_name(self, name: str, ) -> RUMOperationResponse: + """Get a RUM operation by name. + + Retrieve a specific RUM operation by its unique name. + + :param name: The unique name of the RUM operation. + :type name: str + :rtype: RUMOperationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["name"] = name + + return self._get_rum_operation_by_name_endpoint.call_with_http_info(**kwargs) + + def list_rum_operations(self, *, query: Union[str, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, creator: Union[str, UnsetType]=unset, team: Union[str, UnsetType]=unset, feature_id: Union[str, UnsetType]=unset, application_id: Union[UUID, UnsetType]=unset, ) -> RUMOperationsListResponse: + """Search RUM operations. + + Search RUM operations for your organization. Supports filtering by query, creator, team, feature, and application. + + :param query: A search query to filter operations by name. + :type query: str, optional + :param page_offset: Offset for pagination. + :type page_offset: int, optional + :param page_limit: Number of items per page. Maximum of 100. + :type page_limit: int, optional + :param creator: Filter operations by the email of their creator. + :type creator: str, optional + :param team: Filter operations by team. Accepts a comma-separated list of teams. + :type team: str, optional + :param feature_id: Filter operations by feature ID. Accepts a comma-separated list of feature IDs. + :type feature_id: str, optional + :param application_id: Filter operations by RUM application ID. + :type application_id: UUID, optional + :rtype: RUMOperationsListResponse + """ + kwargs: Dict[str, Any] = {} + if query is not unset: + kwargs["query"] = query + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if creator is not unset: + kwargs["creator"] = creator + + if team is not unset: + kwargs["team"] = team + + if feature_id is not unset: + kwargs["feature_id"] = feature_id + + if application_id is not unset: + kwargs["application_id"] = application_id + + return self._list_rum_operations_endpoint.call_with_http_info(**kwargs) + + def list_rum_operation_strong_links(self, *, operation_id: Union[str, UnsetType]=unset, feature_id: Union[str, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> RUMOperationStrongLinksListResponse: + """List RUM operation strong links. + + List strong links between RUM operations and features. A strong link confirms that a feature + belongs to an operation. Provide ``operation_id`` , ``feature_id`` , or both to filter results; + at least one is required. + + :param operation_id: Filter strong links by RUM operation ID. + :type operation_id: str, optional + :param feature_id: Filter strong links by feature ID. + :type feature_id: str, optional + :param page_offset: Offset for pagination. + :type page_offset: int, optional + :param page_limit: Number of items per page. Maximum of 200. + :type page_limit: int, optional + :rtype: RUMOperationStrongLinksListResponse + """ + kwargs: Dict[str, Any] = {} + if operation_id is not unset: + kwargs["operation_id"] = operation_id + + if feature_id is not unset: + kwargs["feature_id"] = feature_id + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_rum_operation_strong_links_endpoint.call_with_http_info(**kwargs) + + def update_rum_operation(self, rum_operation_id: str, body: RUMOperationUpdateRequest, ) -> RUMOperationResponse: + """Update a RUM operation. + + Update an existing RUM operation. Fields omitted from the request body keep their existing value, + with the exception of ``journey_rum`` , which is required and fully replaced on every update. + + :param rum_operation_id: The unique identifier of the RUM operation to update. + :type rum_operation_id: str + :type body: RUMOperationUpdateRequest + :rtype: RUMOperationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rum_operation_id"] = rum_operation_id + + kwargs["body"] = body + + return self._update_rum_operation_endpoint.call_with_http_info(**kwargs) + + def update_rum_operation_strong_link(self, rum_operation_id: str, feature_id: str, body: RUMOperationStrongLinkUpdateRequest, ) -> RUMOperationStrongLinkResponse: + """Update a RUM operation strong link. + + Update the status of a strong link between a RUM operation and a feature. + + :param rum_operation_id: The unique identifier of the RUM operation. + :type rum_operation_id: str + :param feature_id: The unique identifier of the feature. + :type feature_id: str + :type body: RUMOperationStrongLinkUpdateRequest + :rtype: RUMOperationStrongLinkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rum_operation_id"] = rum_operation_id + + kwargs["feature_id"] = feature_id + + kwargs["body"] = body + + return self._update_rum_operation_strong_link_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_remote_config_api.py b/datadog_api_client/v2/api/rum_remote_config_api.py new file mode 100644 index 0000000000..116df67c9f --- /dev/null +++ b/datadog_api_client/v2/api/rum_remote_config_api.py @@ -0,0 +1,119 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.rum_sdk_config_response import RumSdkConfigResponse +from datadog_api_client.v2.model.rum_sdk_config_update_request import RumSdkConfigUpdateRequest + + +class RUMRemoteConfigApi: + """ + Manage `RUM SDK configurations `_ delivered to RUM applications via Remote Configuration. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_rum_sdk_config_endpoint = _Endpoint( + settings={ + "response_type": (RumSdkConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/rum/configs/{config_id}", + "operation_id": "get_rum_sdk_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_rum_sdk_config_endpoint = _Endpoint( + settings={ + "response_type": (RumSdkConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/remote_config/products/rum/configs/{config_id}", + "operation_id": "update_rum_sdk_config", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "config_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RumSdkConfigUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def get_rum_sdk_config(self, config_id: str, ) -> RumSdkConfigResponse: + """Get a RUM SDK configuration. + + Retrieve a RUM SDK configuration by its identifier. + + :param config_id: The ID of the RUM SDK configuration. + :type config_id: str + :rtype: RumSdkConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["config_id"] = config_id + + return self._get_rum_sdk_config_endpoint.call_with_http_info(**kwargs) + + def update_rum_sdk_config(self, config_id: str, body: RumSdkConfigUpdateRequest, ) -> RumSdkConfigResponse: + """Update a RUM SDK configuration. + + Update an existing RUM SDK configuration by its identifier. + Returns the updated configuration when successful. + + :param config_id: The ID of the RUM SDK configuration. + :type config_id: str + :param body: The RUM SDK configuration update. + :type body: RumSdkConfigUpdateRequest + :rtype: RumSdkConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["config_id"] = config_id + + kwargs["body"] = body + + return self._update_rum_sdk_config_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_replay_heatmaps_api.py b/datadog_api_client/v2/api/rum_replay_heatmaps_api.py new file mode 100644 index 0000000000..cc5b665030 --- /dev/null +++ b/datadog_api_client/v2/api/rum_replay_heatmaps_api.py @@ -0,0 +1,222 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.snapshot_array import SnapshotArray +from datadog_api_client.v2.model.snapshot import Snapshot +from datadog_api_client.v2.model.snapshot_create_request import SnapshotCreateRequest +from datadog_api_client.v2.model.snapshot_update_request import SnapshotUpdateRequest + + +class RumReplayHeatmapsApi: + """ + Manage heatmap snapshots for RUM replay sessions. Create, update, delete, and retrieve snapshots to visualize user interactions on specific views. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_replay_heatmap_snapshot_endpoint = _Endpoint( + settings={ + "response_type": (Snapshot,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/replay/heatmap/snapshots", + "operation_id": "create_replay_heatmap_snapshot", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SnapshotCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_replay_heatmap_snapshot_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/replay/heatmap/snapshots/{snapshot_id}", + "operation_id": "delete_replay_heatmap_snapshot", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "snapshot_id": { + "required": True, + "openapi_types": (str,), + "attribute": "snapshot_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._list_replay_heatmap_snapshots_endpoint = _Endpoint( + settings={ + "response_type": (SnapshotArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/replay/heatmap/snapshots", + "operation_id": "list_replay_heatmap_snapshots", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_device_type": { + "openapi_types": (str,), + "attribute": "filter[device_type]", + "location": "query", + }, + "filter_view_name": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[view_name]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "filter_application_id": { + "openapi_types": (str,), + "attribute": "filter[application_id]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_replay_heatmap_snapshot_endpoint = _Endpoint( + settings={ + "response_type": (Snapshot,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/replay/heatmap/snapshots/{snapshot_id}", + "operation_id": "update_replay_heatmap_snapshot", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "snapshot_id": { + "required": True, + "openapi_types": (str,), + "attribute": "snapshot_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SnapshotUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_replay_heatmap_snapshot(self, body: SnapshotCreateRequest, ) -> Snapshot: + """Create replay heatmap snapshot. + + Create a heatmap snapshot. + + :type body: SnapshotCreateRequest + :rtype: Snapshot + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_replay_heatmap_snapshot_endpoint.call_with_http_info(**kwargs) + + def delete_replay_heatmap_snapshot(self, snapshot_id: str, ) -> None: + """Delete replay heatmap snapshot. + + Delete a heatmap snapshot. + + :param snapshot_id: Unique identifier of the heatmap snapshot. + :type snapshot_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["snapshot_id"] = snapshot_id + + return self._delete_replay_heatmap_snapshot_endpoint.call_with_http_info(**kwargs) + + def list_replay_heatmap_snapshots(self, filter_view_name: str, *, filter_device_type: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_application_id: Union[str, UnsetType]=unset, ) -> SnapshotArray: + """List replay heatmap snapshots. + + List heatmap snapshots. + + :param filter_view_name: View name to filter snapshots. + :type filter_view_name: str + :param filter_device_type: Device type to filter snapshots. + :type filter_device_type: str, optional + :param page_limit: Maximum number of snapshots to return. + :type page_limit: int, optional + :param filter_application_id: Filter by application ID. + :type filter_application_id: str, optional + :rtype: SnapshotArray + """ + kwargs: Dict[str, Any] = {} + if filter_device_type is not unset: + kwargs["filter_device_type"] = filter_device_type + + kwargs["filter_view_name"] = filter_view_name + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_application_id is not unset: + kwargs["filter_application_id"] = filter_application_id + + return self._list_replay_heatmap_snapshots_endpoint.call_with_http_info(**kwargs) + + def update_replay_heatmap_snapshot(self, snapshot_id: str, body: SnapshotUpdateRequest, ) -> Snapshot: + """Update replay heatmap snapshot. + + Update a heatmap snapshot. + + :param snapshot_id: Unique identifier of the heatmap snapshot. + :type snapshot_id: str + :type body: SnapshotUpdateRequest + :rtype: Snapshot + """ + kwargs: Dict[str, Any] = {} + kwargs["snapshot_id"] = snapshot_id + + kwargs["body"] = body + + return self._update_replay_heatmap_snapshot_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_replay_playlists_api.py b/datadog_api_client/v2/api/rum_replay_playlists_api.py new file mode 100644 index 0000000000..91ee257734 --- /dev/null +++ b/datadog_api_client/v2/api/rum_replay_playlists_api.py @@ -0,0 +1,477 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.playlist_array import PlaylistArray +from datadog_api_client.v2.model.playlist import Playlist +from datadog_api_client.v2.model.session_id_array import SessionIdArray +from datadog_api_client.v2.model.playlists_session_array import PlaylistsSessionArray +from datadog_api_client.v2.model.playlists_session import PlaylistsSession + + +class RumReplayPlaylistsApi: + """ + Create and manage playlists of RUM replay sessions. Organize, categorize, and share collections of replay sessions for analysis and collaboration. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._add_rum_replay_session_to_playlist_endpoint = _Endpoint( + settings={ + "response_type": (PlaylistsSession,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/playlists/{playlist_id}/sessions/{session_id}", + "operation_id": "add_rum_replay_session_to_playlist", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "data_source": { + "openapi_types": (str,), + "attribute": "data_source", + "location": "query", + }, + "ts": { + "required": True, + "openapi_types": (int,), + "attribute": "ts", + "location": "query", + }, + "playlist_id": { + "required": True, + "openapi_types": (int,), + "attribute": "playlist_id", + "location": "path", + }, + "session_id": { + "required": True, + "openapi_types": (str,), + "attribute": "session_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._bulk_remove_rum_replay_playlist_sessions_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/playlists/{playlist_id}/sessions", + "operation_id": "bulk_remove_rum_replay_playlist_sessions", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "playlist_id": { + "required": True, + "openapi_types": (int,), + "attribute": "playlist_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SessionIdArray,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_rum_replay_playlist_endpoint = _Endpoint( + settings={ + "response_type": (Playlist,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/playlists", + "operation_id": "create_rum_replay_playlist", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (Playlist,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_rum_replay_playlist_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/playlists/{playlist_id}", + "operation_id": "delete_rum_replay_playlist", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "playlist_id": { + "required": True, + "openapi_types": (int,), + "attribute": "playlist_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_rum_replay_playlist_endpoint = _Endpoint( + settings={ + "response_type": (Playlist,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/playlists/{playlist_id}", + "operation_id": "get_rum_replay_playlist", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "playlist_id": { + "required": True, + "openapi_types": (int,), + "attribute": "playlist_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_rum_replay_playlists_endpoint = _Endpoint( + settings={ + "response_type": (PlaylistArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/playlists", + "operation_id": "list_rum_replay_playlists", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_created_by_uuid": { + "openapi_types": (str,), + "attribute": "filter[created_by_uuid]", + "location": "query", + }, + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_rum_replay_playlist_sessions_endpoint = _Endpoint( + settings={ + "response_type": (PlaylistsSessionArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/playlists/{playlist_id}/sessions", + "operation_id": "list_rum_replay_playlist_sessions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "playlist_id": { + "required": True, + "openapi_types": (int,), + "attribute": "playlist_id", + "location": "path", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._remove_rum_replay_session_from_playlist_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/playlists/{playlist_id}/sessions/{session_id}", + "operation_id": "remove_rum_replay_session_from_playlist", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "playlist_id": { + "required": True, + "openapi_types": (int,), + "attribute": "playlist_id", + "location": "path", + }, + "session_id": { + "required": True, + "openapi_types": (str,), + "attribute": "session_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._update_rum_replay_playlist_endpoint = _Endpoint( + settings={ + "response_type": (Playlist,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/playlists/{playlist_id}", + "operation_id": "update_rum_replay_playlist", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "playlist_id": { + "required": True, + "openapi_types": (int,), + "attribute": "playlist_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (Playlist,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def add_rum_replay_session_to_playlist(self, ts: int, playlist_id: int, session_id: str, *, data_source: Union[str, UnsetType]=unset, ) -> PlaylistsSession: + """Add RUM replay session to playlist. + + Add a session to a playlist. + + :param ts: Server-side timestamp in milliseconds. + :type ts: int + :param playlist_id: Unique identifier of the playlist. + :type playlist_id: int + :param session_id: Unique identifier of the session. + :type session_id: str + :param data_source: Data source type. Valid values: 'rum' or 'product_analytics'. Defaults to 'rum'. + :type data_source: str, optional + :rtype: PlaylistsSession + """ + kwargs: Dict[str, Any] = {} + if data_source is not unset: + kwargs["data_source"] = data_source + + kwargs["ts"] = ts + + kwargs["playlist_id"] = playlist_id + + kwargs["session_id"] = session_id + + return self._add_rum_replay_session_to_playlist_endpoint.call_with_http_info(**kwargs) + + def bulk_remove_rum_replay_playlist_sessions(self, playlist_id: int, body: SessionIdArray, ) -> None: + """Bulk remove RUM replay playlist sessions. + + Remove sessions from a playlist. + + :param playlist_id: Unique identifier of the playlist. + :type playlist_id: int + :type body: SessionIdArray + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["playlist_id"] = playlist_id + + kwargs["body"] = body + + return self._bulk_remove_rum_replay_playlist_sessions_endpoint.call_with_http_info(**kwargs) + + def create_rum_replay_playlist(self, body: Playlist, ) -> Playlist: + """Create RUM replay playlist. + + Create a playlist. + + :type body: Playlist + :rtype: Playlist + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_rum_replay_playlist_endpoint.call_with_http_info(**kwargs) + + def delete_rum_replay_playlist(self, playlist_id: int, ) -> None: + """Delete RUM replay playlist. + + Delete a playlist. + + :param playlist_id: Unique identifier of the playlist. + :type playlist_id: int + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["playlist_id"] = playlist_id + + return self._delete_rum_replay_playlist_endpoint.call_with_http_info(**kwargs) + + def get_rum_replay_playlist(self, playlist_id: int, ) -> Playlist: + """Get RUM replay playlist. + + Get a playlist. + + :param playlist_id: Unique identifier of the playlist. + :type playlist_id: int + :rtype: Playlist + """ + kwargs: Dict[str, Any] = {} + kwargs["playlist_id"] = playlist_id + + return self._get_rum_replay_playlist_endpoint.call_with_http_info(**kwargs) + + def list_rum_replay_playlists(self, *, filter_created_by_uuid: Union[str, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> PlaylistArray: + """List RUM replay playlists. + + List playlists. + + :param filter_created_by_uuid: Filter playlists by the UUID of the user who created them. + :type filter_created_by_uuid: str, optional + :param filter_query: Search query to filter playlists by name. + :type filter_query: str, optional + :param page_number: Page number for pagination (0-indexed). + :type page_number: int, optional + :param page_size: Number of items per page. + :type page_size: int, optional + :rtype: PlaylistArray + """ + kwargs: Dict[str, Any] = {} + if filter_created_by_uuid is not unset: + kwargs["filter_created_by_uuid"] = filter_created_by_uuid + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + return self._list_rum_replay_playlists_endpoint.call_with_http_info(**kwargs) + + def list_rum_replay_playlist_sessions(self, playlist_id: int, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> PlaylistsSessionArray: + """List RUM replay playlist sessions. + + List sessions in a playlist. + + :param playlist_id: Unique identifier of the playlist. + :type playlist_id: int + :param page_number: Page number for pagination (0-indexed). + :type page_number: int, optional + :param page_size: Number of items per page. + :type page_size: int, optional + :rtype: PlaylistsSessionArray + """ + kwargs: Dict[str, Any] = {} + kwargs["playlist_id"] = playlist_id + + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + return self._list_rum_replay_playlist_sessions_endpoint.call_with_http_info(**kwargs) + + def remove_rum_replay_session_from_playlist(self, playlist_id: int, session_id: str, ) -> None: + """Remove RUM replay session from playlist. + + Remove a session from a playlist. + + :param playlist_id: Unique identifier of the playlist. + :type playlist_id: int + :param session_id: Unique identifier of the session. + :type session_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["playlist_id"] = playlist_id + + kwargs["session_id"] = session_id + + return self._remove_rum_replay_session_from_playlist_endpoint.call_with_http_info(**kwargs) + + def update_rum_replay_playlist(self, playlist_id: int, body: Playlist, ) -> Playlist: + """Update RUM replay playlist. + + Update a playlist. + + :param playlist_id: Unique identifier of the playlist. + :type playlist_id: int + :type body: Playlist + :rtype: Playlist + """ + kwargs: Dict[str, Any] = {} + kwargs["playlist_id"] = playlist_id + + kwargs["body"] = body + + return self._update_rum_replay_playlist_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_replay_sessions_api.py b/datadog_api_client/v2/api/rum_replay_sessions_api.py new file mode 100644 index 0000000000..638455998a --- /dev/null +++ b/datadog_api_client/v2/api/rum_replay_sessions_api.py @@ -0,0 +1,119 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) + + +class RumReplaySessionsApi: + """ + Retrieve segments for RUM replay sessions. Access session replay data stored in event platform or blob storage. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_segments_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/sessions/{session_id}/views/{view_id}/segments", + "operation_id": "get_segments", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "view_id": { + "required": True, + "openapi_types": (str,), + "attribute": "view_id", + "location": "path", + }, + "source": { + "openapi_types": (str,), + "attribute": "source", + "location": "query", + }, + "session_id": { + "required": True, + "openapi_types": (str,), + "attribute": "session_id", + "location": "path", + }, + "ts": { + "openapi_types": (int,), + "attribute": "ts", + "location": "query", + }, + "max_list_size": { + "openapi_types": (int,), + "attribute": "max_list_size", + "location": "query", + }, + "paging": { + "openapi_types": (str,), + "attribute": "paging", + "location": "query", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + def get_segments(self, view_id: str, session_id: str, *, source: Union[str, UnsetType]=unset, ts: Union[int, UnsetType]=unset, max_list_size: Union[int, UnsetType]=unset, paging: Union[str, UnsetType]=unset, ) -> None: + """Get segments. + + Get segments for a view. + + :param view_id: Unique identifier of the view. + :type view_id: str + :param session_id: Unique identifier of the session. + :type session_id: str + :param source: Storage source: 'event_platform' or 'blob'. + :type source: str, optional + :param ts: Server-side timestamp in milliseconds. + :type ts: int, optional + :param max_list_size: Maximum size in bytes for the segment list. + :type max_list_size: int, optional + :param paging: Paging token for pagination. + :type paging: str, optional + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["view_id"] = view_id + + if source is not unset: + kwargs["source"] = source + + kwargs["session_id"] = session_id + + if ts is not unset: + kwargs["ts"] = ts + + if max_list_size is not unset: + kwargs["max_list_size"] = max_list_size + + if paging is not unset: + kwargs["paging"] = paging + + return self._get_segments_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_replay_viewership_api.py b/datadog_api_client/v2/api/rum_replay_viewership_api.py new file mode 100644 index 0000000000..146a4f60de --- /dev/null +++ b/datadog_api_client/v2/api/rum_replay_viewership_api.py @@ -0,0 +1,272 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.watcher_array import WatcherArray +from datadog_api_client.v2.model.watch import Watch +from datadog_api_client.v2.model.viewership_history_session_array import ViewershipHistorySessionArray + + +class RumReplayViewershipApi: + """ + Track and manage RUM replay session viewership. Monitor who watches replay sessions and maintain watch history for audit and analytics purposes. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_rum_replay_session_watch_endpoint = _Endpoint( + settings={ + "response_type": (Watch,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/sessions/{session_id}/watches", + "operation_id": "create_rum_replay_session_watch", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "session_id": { + "required": True, + "openapi_types": (str,), + "attribute": "session_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (Watch,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_rum_replay_session_watch_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/sessions/{session_id}/watches", + "operation_id": "delete_rum_replay_session_watch", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "session_id": { + "required": True, + "openapi_types": (str,), + "attribute": "session_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._list_rum_replay_session_watchers_endpoint = _Endpoint( + settings={ + "response_type": (WatcherArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/sessions/{session_id}/watchers", + "operation_id": "list_rum_replay_session_watchers", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "session_id": { + "required": True, + "openapi_types": (str,), + "attribute": "session_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_rum_replay_viewership_history_sessions_endpoint = _Endpoint( + settings={ + "response_type": (ViewershipHistorySessionArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/rum/replay/viewership-history/sessions", + "operation_id": "list_rum_replay_viewership_history_sessions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_watched_at_start": { + "openapi_types": (int,), + "attribute": "filter[watched_at][start]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "filter_created_by": { + "openapi_types": (str,), + "attribute": "filter[created_by]", + "location": "query", + }, + "filter_watched_at_end": { + "openapi_types": (int,), + "attribute": "filter[watched_at][end]", + "location": "query", + }, + "filter_session_ids": { + "openapi_types": (str,), + "attribute": "filter[session_ids]", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "filter_application_id": { + "openapi_types": (str,), + "attribute": "filter[application_id]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def create_rum_replay_session_watch(self, session_id: str, body: Watch, ) -> Watch: + """Create RUM replay session watch. + + Record a session watch. + + :param session_id: Unique identifier of the session. + :type session_id: str + :type body: Watch + :rtype: Watch + """ + kwargs: Dict[str, Any] = {} + kwargs["session_id"] = session_id + + kwargs["body"] = body + + return self._create_rum_replay_session_watch_endpoint.call_with_http_info(**kwargs) + + def delete_rum_replay_session_watch(self, session_id: str, ) -> None: + """Delete RUM replay session watch. + + Delete session watch history. + + :param session_id: Unique identifier of the session. + :type session_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["session_id"] = session_id + + return self._delete_rum_replay_session_watch_endpoint.call_with_http_info(**kwargs) + + def list_rum_replay_session_watchers(self, session_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> WatcherArray: + """List RUM replay session watchers. + + List session watchers. + + :param session_id: Unique identifier of the session. + :type session_id: str + :param page_size: Number of items per page. + :type page_size: int, optional + :param page_number: Page number for pagination (0-indexed). + :type page_number: int, optional + :rtype: WatcherArray + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + kwargs["session_id"] = session_id + + return self._list_rum_replay_session_watchers_endpoint.call_with_http_info(**kwargs) + + def list_rum_replay_viewership_history_sessions(self, *, filter_watched_at_start: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter_created_by: Union[str, UnsetType]=unset, filter_watched_at_end: Union[int, UnsetType]=unset, filter_session_ids: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, filter_application_id: Union[str, UnsetType]=unset, ) -> ViewershipHistorySessionArray: + """List RUM replay viewership history sessions. + + List watched sessions. + + :param filter_watched_at_start: Start timestamp in milliseconds for watched_at filter. + :type filter_watched_at_start: int, optional + :param page_number: Page number for pagination (0-indexed). + :type page_number: int, optional + :param filter_created_by: Filter by user UUID. Defaults to current user if not specified. + :type filter_created_by: str, optional + :param filter_watched_at_end: End timestamp in milliseconds for watched_at filter. + :type filter_watched_at_end: int, optional + :param filter_session_ids: Comma-separated list of session IDs to filter by. + :type filter_session_ids: str, optional + :param page_size: Number of items per page. + :type page_size: int, optional + :param filter_application_id: Filter by application ID. + :type filter_application_id: str, optional + :rtype: ViewershipHistorySessionArray + """ + kwargs: Dict[str, Any] = {} + if filter_watched_at_start is not unset: + kwargs["filter_watched_at_start"] = filter_watched_at_start + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter_created_by is not unset: + kwargs["filter_created_by"] = filter_created_by + + if filter_watched_at_end is not unset: + kwargs["filter_watched_at_end"] = filter_watched_at_end + + if filter_session_ids is not unset: + kwargs["filter_session_ids"] = filter_session_ids + + if page_size is not unset: + kwargs["page_size"] = page_size + + if filter_application_id is not unset: + kwargs["filter_application_id"] = filter_application_id + + return self._list_rum_replay_viewership_history_sessions_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/rum_retention_filters_api.py b/datadog_api_client/v2/api/rum_retention_filters_api.py new file mode 100644 index 0000000000..dd2f6d5c7d --- /dev/null +++ b/datadog_api_client/v2/api/rum_retention_filters_api.py @@ -0,0 +1,472 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.rum_retention_filters_order_response import RumRetentionFiltersOrderResponse +from datadog_api_client.v2.model.rum_retention_filters_order_request import RumRetentionFiltersOrderRequest +from datadog_api_client.v2.model.rum_retention_filters_response import RumRetentionFiltersResponse +from datadog_api_client.v2.model.rum_retention_filter_response import RumRetentionFilterResponse +from datadog_api_client.v2.model.rum_retention_filter_create_request import RumRetentionFilterCreateRequest +from datadog_api_client.v2.model.rum_permanent_retention_filters_response import RumPermanentRetentionFiltersResponse +from datadog_api_client.v2.model.rum_permanent_retention_filter_response import RumPermanentRetentionFilterResponse +from datadog_api_client.v2.model.rum_permanent_retention_filter_id import RumPermanentRetentionFilterID +from datadog_api_client.v2.model.rum_permanent_retention_filter_update_request import RumPermanentRetentionFilterUpdateRequest +from datadog_api_client.v2.model.rum_retention_filter_update_request import RumRetentionFilterUpdateRequest + + +class RumRetentionFiltersApi: + """ + Manage retention filters through `Manage Applications `_ of RUM for your organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": (RumRetentionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{app_id}/retention_filters", + "operation_id": "create_retention_filter", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RumRetentionFilterCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}", + "operation_id": "delete_retention_filter", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_id", + "location": "path", + }, + "rf_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rf_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_permanent_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": (RumPermanentRetentionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{app_id}/retention_filters/permanent/{permanent_rf_id}", + "operation_id": "get_permanent_retention_filter", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_id", + "location": "path", + }, + "permanent_rf_id": { + "required": True, + "openapi_types": (RumPermanentRetentionFilterID,), + "attribute": "permanent_rf_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": (RumRetentionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}", + "operation_id": "get_retention_filter", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_id", + "location": "path", + }, + "rf_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rf_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_permanent_retention_filters_endpoint = _Endpoint( + settings={ + "response_type": (RumPermanentRetentionFiltersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{app_id}/retention_filters/permanent", + "operation_id": "list_permanent_retention_filters", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_retention_filters_endpoint = _Endpoint( + settings={ + "response_type": (RumRetentionFiltersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{app_id}/retention_filters", + "operation_id": "list_retention_filters", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._order_retention_filters_endpoint = _Endpoint( + settings={ + "response_type": (RumRetentionFiltersOrderResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{app_id}/relationships/retention_filters", + "operation_id": "order_retention_filters", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RumRetentionFiltersOrderRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_permanent_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": (RumPermanentRetentionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{app_id}/retention_filters/permanent/{permanent_rf_id}", + "operation_id": "update_permanent_retention_filter", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_id", + "location": "path", + }, + "permanent_rf_id": { + "required": True, + "openapi_types": (RumPermanentRetentionFilterID,), + "attribute": "permanent_rf_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RumPermanentRetentionFilterUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_retention_filter_endpoint = _Endpoint( + settings={ + "response_type": (RumRetentionFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}", + "operation_id": "update_retention_filter", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "app_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_id", + "location": "path", + }, + "rf_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rf_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RumRetentionFilterUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_retention_filter(self, app_id: str, body: RumRetentionFilterCreateRequest, ) -> RumRetentionFilterResponse: + """Create a RUM retention filter. + + Create a RUM retention filter for a RUM application. + Returns RUM retention filter objects from the request body when the request is successful. + + :param app_id: RUM application ID. + :type app_id: str + :param body: The definition of the new RUM retention filter. + :type body: RumRetentionFilterCreateRequest + :rtype: RumRetentionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["body"] = body + + return self._create_retention_filter_endpoint.call_with_http_info(**kwargs) + + def delete_retention_filter(self, app_id: str, rf_id: str, ) -> None: + """Delete a RUM retention filter. + + Delete a RUM retention filter for a RUM application. + + :param app_id: RUM application ID. + :type app_id: str + :param rf_id: Retention filter ID. + :type rf_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["rf_id"] = rf_id + + return self._delete_retention_filter_endpoint.call_with_http_info(**kwargs) + + def get_permanent_retention_filter(self, app_id: str, permanent_rf_id: RumPermanentRetentionFilterID, ) -> RumPermanentRetentionFilterResponse: + """Get a permanent RUM retention filter. + + Get a permanent RUM retention filter for a RUM application by its identifier. + + :param app_id: RUM application ID. + :type app_id: str + :param permanent_rf_id: The identifier of the permanent RUM retention filter. + :type permanent_rf_id: RumPermanentRetentionFilterID + :rtype: RumPermanentRetentionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["permanent_rf_id"] = permanent_rf_id + + return self._get_permanent_retention_filter_endpoint.call_with_http_info(**kwargs) + + def get_retention_filter(self, app_id: str, rf_id: str, ) -> RumRetentionFilterResponse: + """Get a RUM retention filter. + + Get a RUM retention filter for a RUM application. + + :param app_id: RUM application ID. + :type app_id: str + :param rf_id: Retention filter ID. + :type rf_id: str + :rtype: RumRetentionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["rf_id"] = rf_id + + return self._get_retention_filter_endpoint.call_with_http_info(**kwargs) + + def list_permanent_retention_filters(self, app_id: str, ) -> RumPermanentRetentionFiltersResponse: + """Get all permanent RUM retention filters. + + Get the list of permanent RUM retention filters for a RUM application. + Permanent retention filters are predefined filters that cannot be created or deleted. + For each filter, the ``editability`` block indicates which cross-product fields can be updated. + + :param app_id: RUM application ID. + :type app_id: str + :rtype: RumPermanentRetentionFiltersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + return self._list_permanent_retention_filters_endpoint.call_with_http_info(**kwargs) + + def list_retention_filters(self, app_id: str, ) -> RumRetentionFiltersResponse: + """Get all RUM retention filters. + + Get the list of RUM retention filters for a RUM application. + + :param app_id: RUM application ID. + :type app_id: str + :rtype: RumRetentionFiltersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + return self._list_retention_filters_endpoint.call_with_http_info(**kwargs) + + def order_retention_filters(self, app_id: str, body: RumRetentionFiltersOrderRequest, ) -> RumRetentionFiltersOrderResponse: + """Order RUM retention filters. + + Order RUM retention filters for a RUM application. + Returns RUM retention filter objects without attributes from the request body when the request is successful. + + :param app_id: RUM application ID. + :type app_id: str + :param body: New definition of the RUM retention filter. + :type body: RumRetentionFiltersOrderRequest + :rtype: RumRetentionFiltersOrderResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["body"] = body + + return self._order_retention_filters_endpoint.call_with_http_info(**kwargs) + + def update_permanent_retention_filter(self, app_id: str, permanent_rf_id: RumPermanentRetentionFilterID, body: RumPermanentRetentionFilterUpdateRequest, ) -> RumPermanentRetentionFilterResponse: + """Update a permanent RUM retention filter. + + Update the cross-product sampling configuration of a permanent RUM retention filter for a RUM application. + Only fields marked as editable in the ``editability`` block of the filter can be updated. + Updating a non-editable field returns a ``400`` response. + + :param app_id: RUM application ID. + :type app_id: str + :param permanent_rf_id: The identifier of the permanent RUM retention filter. + :type permanent_rf_id: RumPermanentRetentionFilterID + :param body: New configuration of the permanent RUM retention filter. + :type body: RumPermanentRetentionFilterUpdateRequest + :rtype: RumPermanentRetentionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["permanent_rf_id"] = permanent_rf_id + + kwargs["body"] = body + + return self._update_permanent_retention_filter_endpoint.call_with_http_info(**kwargs) + + def update_retention_filter(self, app_id: str, rf_id: str, body: RumRetentionFilterUpdateRequest, ) -> RumRetentionFilterResponse: + """Update a RUM retention filter. + + Update a RUM retention filter for a RUM application. + Returns RUM retention filter objects from the request body when the request is successful. + + :param app_id: RUM application ID. + :type app_id: str + :param rf_id: Retention filter ID. + :type rf_id: str + :param body: New definition of the RUM retention filter. + :type body: RumRetentionFilterUpdateRequest + :rtype: RumRetentionFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["app_id"] = app_id + + kwargs["rf_id"] = rf_id + + kwargs["body"] = body + + return self._update_retention_filter_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/salesforce_integration_api.py b/datadog_api_client/v2/api/salesforce_integration_api.py new file mode 100644 index 0000000000..45294d7b2b --- /dev/null +++ b/datadog_api_client/v2/api/salesforce_integration_api.py @@ -0,0 +1,254 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.salesforce_incidents_templates_response import SalesforceIncidentsTemplatesResponse +from datadog_api_client.v2.model.salesforce_incidents_template_response import SalesforceIncidentsTemplateResponse +from datadog_api_client.v2.model.salesforce_incidents_template_create_request import SalesforceIncidentsTemplateCreateRequest +from datadog_api_client.v2.model.salesforce_incidents_template_update_request import SalesforceIncidentsTemplateUpdateRequest +from datadog_api_client.v2.model.salesforce_incidents_organizations_response import SalesforceIncidentsOrganizationsResponse + + +class SalesforceIntegrationApi: + """ + Configure your `Datadog Salesforce integration `_ + directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_incident_template_endpoint = _Endpoint( + settings={ + "response_type": (SalesforceIncidentsTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/salesforce-incidents/incident-templates", + "operation_id": "create_incident_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SalesforceIncidentsTemplateCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_incident_template_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/salesforce-incidents/incident-templates/{incident_template_id}", + "operation_id": "delete_incident_template", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "incident_template_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_salesforce_organization_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/salesforce-incidents/organizations/{salesforce_org_id}", + "operation_id": "delete_salesforce_organization", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "salesforce_org_id": { + "required": True, + "openapi_types": (str,), + "attribute": "salesforce_org_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_incident_templates_endpoint = _Endpoint( + settings={ + "response_type": (SalesforceIncidentsTemplatesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/salesforce-incidents/incident-templates", + "operation_id": "get_incident_templates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_salesforce_organizations_endpoint = _Endpoint( + settings={ + "response_type": (SalesforceIncidentsOrganizationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/salesforce-incidents/organizations", + "operation_id": "get_salesforce_organizations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_incident_template_endpoint = _Endpoint( + settings={ + "response_type": (SalesforceIncidentsTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/salesforce-incidents/incident-templates/{incident_template_id}", + "operation_id": "update_incident_template", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "incident_template_id": { + "required": True, + "openapi_types": (str,), + "attribute": "incident_template_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SalesforceIncidentsTemplateUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_incident_template(self, body: SalesforceIncidentsTemplateCreateRequest, ) -> SalesforceIncidentsTemplateResponse: + """Create a Salesforce incident template. + + Create a new Salesforce incident template for your organization. Template + names must be unique within an organization. + + :param body: Salesforce incident template payload. + :type body: SalesforceIncidentsTemplateCreateRequest + :rtype: SalesforceIncidentsTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_incident_template_endpoint.call_with_http_info(**kwargs) + + def delete_incident_template(self, incident_template_id: str, ) -> None: + """Delete a Salesforce incident template. + + Delete a single Salesforce incident template from your organization. + + :param incident_template_id: The ID of the Salesforce incident template. + :type incident_template_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_template_id"] = incident_template_id + + return self._delete_incident_template_endpoint.call_with_http_info(**kwargs) + + def delete_salesforce_organization(self, salesforce_org_id: str, ) -> None: + """Delete a connected Salesforce organization. + + Disconnect a Salesforce organization from your Datadog organization. + This also deletes any incident templates referencing the organization. + + :param salesforce_org_id: The Datadog-assigned ID of the connected Salesforce organization. + :type salesforce_org_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["salesforce_org_id"] = salesforce_org_id + + return self._delete_salesforce_organization_endpoint.call_with_http_info(**kwargs) + + def get_incident_templates(self, ) -> SalesforceIncidentsTemplatesResponse: + """Get all Salesforce incident templates. + + Get all Salesforce incident templates configured for your organization. + + :rtype: SalesforceIncidentsTemplatesResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_incident_templates_endpoint.call_with_http_info(**kwargs) + + def get_salesforce_organizations(self, ) -> SalesforceIncidentsOrganizationsResponse: + """Get all connected Salesforce organizations. + + Get all Salesforce organizations connected to your Datadog organization + through the Salesforce integration. Salesforce organizations are connected + through the OAuth setup flow in the Datadog Salesforce integration page. + + :rtype: SalesforceIncidentsOrganizationsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_salesforce_organizations_endpoint.call_with_http_info(**kwargs) + + def update_incident_template(self, incident_template_id: str, body: SalesforceIncidentsTemplateUpdateRequest, ) -> SalesforceIncidentsTemplateResponse: + """Update a Salesforce incident template. + + Update a single Salesforce incident template in your organization. + + :param incident_template_id: The ID of the Salesforce incident template. + :type incident_template_id: str + :param body: Salesforce incident template payload. + :type body: SalesforceIncidentsTemplateUpdateRequest + :rtype: SalesforceIncidentsTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["incident_template_id"] = incident_template_id + + kwargs["body"] = body + + return self._update_incident_template_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/scorecards_api.py b/datadog_api_client/v2/api/scorecards_api.py new file mode 100644 index 0000000000..bfad1e07ea --- /dev/null +++ b/datadog_api_client/v2/api/scorecards_api.py @@ -0,0 +1,1103 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_campaigns_response import ListCampaignsResponse +from datadog_api_client.v2.model.campaign_response import CampaignResponse +from datadog_api_client.v2.model.create_campaign_request import CreateCampaignRequest +from datadog_api_client.v2.model.update_campaign_request import UpdateCampaignRequest +from datadog_api_client.v2.model.outcomes_response import OutcomesResponse +from datadog_api_client.v2.model.outcomes_response_data_item import OutcomesResponseDataItem +from datadog_api_client.v2.model.update_outcomes_async_request import UpdateOutcomesAsyncRequest +from datadog_api_client.v2.model.outcomes_batch_response import OutcomesBatchResponse +from datadog_api_client.v2.model.outcomes_batch_request import OutcomesBatchRequest +from datadog_api_client.v2.model.list_rules_response import ListRulesResponse +from datadog_api_client.v2.model.list_rules_response_data_item import ListRulesResponseDataItem +from datadog_api_client.v2.model.create_rule_response import CreateRuleResponse +from datadog_api_client.v2.model.create_rule_request import CreateRuleRequest +from datadog_api_client.v2.model.update_rule_response import UpdateRuleResponse +from datadog_api_client.v2.model.update_rule_request import UpdateRuleRequest +from datadog_api_client.v2.model.list_scorecards_response import ListScorecardsResponse +from datadog_api_client.v2.model.list_scorecard_scores_response import ListScorecardScoresResponse +from datadog_api_client.v2.model.scorecard_scores_aggregation import ScorecardScoresAggregation + + +class ScorecardsApi: + """ + API to create and update scorecard rules and outcomes. See `Scorecards `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_scorecard_campaign_endpoint = _Endpoint( + settings={ + "response_type": (CampaignResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/campaigns", + "operation_id": "create_scorecard_campaign", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateCampaignRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_scorecard_outcomes_batch_endpoint = _Endpoint( + settings={ + "response_type": (OutcomesBatchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/outcomes/batch", + "operation_id": "create_scorecard_outcomes_batch", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OutcomesBatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_scorecard_rule_endpoint = _Endpoint( + settings={ + "response_type": (CreateRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/rules", + "operation_id": "create_scorecard_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateRuleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_scorecard_campaign_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/campaigns/{campaign_id}", + "operation_id": "delete_scorecard_campaign", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "campaign_id": { + "required": True, + "openapi_types": (str,), + "attribute": "campaign_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_scorecard_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/rules/{rule_id}", + "operation_id": "delete_scorecard_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_scorecard_campaign_endpoint = _Endpoint( + settings={ + "response_type": (CampaignResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/campaigns/{campaign_id}", + "operation_id": "get_scorecard_campaign", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "campaign_id": { + "required": True, + "openapi_types": (str,), + "attribute": "campaign_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "include_meta": { + "openapi_types": (bool,), + "attribute": "include_meta", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_scorecard_campaigns_endpoint = _Endpoint( + settings={ + "response_type": (ListCampaignsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/campaigns", + "operation_id": "list_scorecard_campaigns", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "filter_campaign_name": { + "openapi_types": (str,), + "attribute": "filter[campaign][name]", + "location": "query", + }, + "filter_campaign_status": { + "openapi_types": (str,), + "attribute": "filter[campaign][status]", + "location": "query", + }, + "filter_campaign_owner": { + "openapi_types": (str,), + "attribute": "filter[campaign][owner]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_scorecard_outcomes_endpoint = _Endpoint( + settings={ + "response_type": (OutcomesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/outcomes", + "operation_id": "list_scorecard_outcomes", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "fields_outcome": { + "openapi_types": (str,), + "attribute": "fields[outcome]", + "location": "query", + }, + "fields_rule": { + "openapi_types": (str,), + "attribute": "fields[rule]", + "location": "query", + }, + "filter_outcome_service_name": { + "openapi_types": (str,), + "attribute": "filter[outcome][service_name]", + "location": "query", + }, + "filter_outcome_state": { + "openapi_types": (str,), + "attribute": "filter[outcome][state]", + "location": "query", + }, + "filter_rule_enabled": { + "openapi_types": (bool,), + "attribute": "filter[rule][enabled]", + "location": "query", + }, + "filter_rule_id": { + "openapi_types": (str,), + "attribute": "filter[rule][id]", + "location": "query", + }, + "filter_rule_name": { + "openapi_types": (str,), + "attribute": "filter[rule][name]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_scorecard_rules_endpoint = _Endpoint( + settings={ + "response_type": (ListRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/rules", + "operation_id": "list_scorecard_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "filter_rule_id": { + "openapi_types": (str,), + "attribute": "filter[rule][id]", + "location": "query", + }, + "filter_rule_enabled": { + "openapi_types": (bool,), + "attribute": "filter[rule][enabled]", + "location": "query", + }, + "filter_rule_custom": { + "openapi_types": (bool,), + "attribute": "filter[rule][custom]", + "location": "query", + }, + "filter_rule_name": { + "openapi_types": (str,), + "attribute": "filter[rule][name]", + "location": "query", + }, + "filter_rule_description": { + "openapi_types": (str,), + "attribute": "filter[rule][description]", + "location": "query", + }, + "fields_rule": { + "openapi_types": (str,), + "attribute": "fields[rule]", + "location": "query", + }, + "fields_scorecard": { + "openapi_types": (str,), + "attribute": "fields[scorecard]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_scorecards_endpoint = _Endpoint( + settings={ + "response_type": (ListScorecardsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/scorecards", + "operation_id": "list_scorecards", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "filter_scorecard_id": { + "openapi_types": (str,), + "attribute": "filter[scorecard][id]", + "location": "query", + }, + "filter_scorecard_name": { + "openapi_types": (str,), + "attribute": "filter[scorecard][name]", + "location": "query", + }, + "filter_scorecard_description": { + "openapi_types": (str,), + "attribute": "filter[scorecard][description]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_scorecard_scores_endpoint = _Endpoint( + settings={ + "response_type": (ListScorecardScoresResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/scores/{aggregation}", + "operation_id": "list_scorecard_scores", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "aggregation": { + "required": True, + "openapi_types": (ScorecardScoresAggregation,), + "attribute": "aggregation", + "location": "path", + }, + "filter_rule_id": { + "openapi_types": (str,), + "attribute": "filter[rule][id]", + "location": "query", + }, + "filter_rule_name": { + "openapi_types": (str,), + "attribute": "filter[rule][name]", + "location": "query", + }, + "filter_rule_level": { + "openapi_types": (str,), + "attribute": "filter[rule][level]", + "location": "query", + }, + "filter_rule_scorecard_id": { + "openapi_types": (str,), + "attribute": "filter[rule][scorecard_id]", + "location": "query", + }, + "filter_rule_is_custom": { + "openapi_types": (bool,), + "attribute": "filter[rule][is_custom]", + "location": "query", + }, + "filter_rule_is_enabled": { + "openapi_types": (bool,), + "attribute": "filter[rule][is_enabled]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_scorecard_campaign_endpoint = _Endpoint( + settings={ + "response_type": (CampaignResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/campaigns/{campaign_id}", + "operation_id": "update_scorecard_campaign", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "campaign_id": { + "required": True, + "openapi_types": (str,), + "attribute": "campaign_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateCampaignRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_scorecard_outcomes_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/outcomes", + "operation_id": "update_scorecard_outcomes", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UpdateOutcomesAsyncRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_scorecard_rule_endpoint = _Endpoint( + settings={ + "response_type": (UpdateRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/scorecard/rules/{rule_id}", + "operation_id": "update_scorecard_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateRuleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_scorecard_campaign(self, body: CreateCampaignRequest, ) -> CampaignResponse: + """Create a new campaign. + + Creates a new scorecard campaign. + + :param body: Campaign data. + :type body: CreateCampaignRequest + :rtype: CampaignResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_scorecard_campaign_endpoint.call_with_http_info(**kwargs) + + def create_scorecard_outcomes_batch(self, body: OutcomesBatchRequest, ) -> OutcomesBatchResponse: + """Create outcomes batch. **Deprecated**. + + Sets multiple service-rule outcomes in a single batched request. + + :param body: Set of scorecard outcomes. + :type body: OutcomesBatchRequest + :rtype: OutcomesBatchResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_scorecard_outcomes_batch is deprecated", DeprecationWarning, stacklevel=2) + return self._create_scorecard_outcomes_batch_endpoint.call_with_http_info(**kwargs) + + def create_scorecard_rule(self, body: CreateRuleRequest, ) -> CreateRuleResponse: + """Create a new rule. + + Creates a new rule. + + :param body: Rule attributes. + :type body: CreateRuleRequest + :rtype: CreateRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_scorecard_rule_endpoint.call_with_http_info(**kwargs) + + def delete_scorecard_campaign(self, campaign_id: str, ) -> None: + """Delete a campaign. + + Deletes a single campaign by ID or key. + + :param campaign_id: Campaign ID or key. + :type campaign_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["campaign_id"] = campaign_id + + return self._delete_scorecard_campaign_endpoint.call_with_http_info(**kwargs) + + def delete_scorecard_rule(self, rule_id: str, ) -> None: + """Delete a rule. + + Deletes a single rule. + + :param rule_id: The ID of the rule. + :type rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._delete_scorecard_rule_endpoint.call_with_http_info(**kwargs) + + def get_scorecard_campaign(self, campaign_id: str, *, include: Union[str, UnsetType]=unset, include_meta: Union[bool, UnsetType]=unset, ) -> CampaignResponse: + """Get a campaign. + + Fetches a single campaign by ID or key. + + :param campaign_id: Campaign ID or key. + :type campaign_id: str + :param include: Include related data (for example, scores). + :type include: str, optional + :param include_meta: Include metadata (entity and rule counts). + :type include_meta: bool, optional + :rtype: CampaignResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["campaign_id"] = campaign_id + + if include is not unset: + kwargs["include"] = include + + if include_meta is not unset: + kwargs["include_meta"] = include_meta + + return self._get_scorecard_campaign_endpoint.call_with_http_info(**kwargs) + + def list_scorecard_campaigns(self, *, page_limit: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, filter_campaign_name: Union[str, UnsetType]=unset, filter_campaign_status: Union[str, UnsetType]=unset, filter_campaign_owner: Union[str, UnsetType]=unset, ) -> ListCampaignsResponse: + """List all campaigns. + + Fetches all scorecard campaigns. + + :param page_limit: Maximum number of campaigns to return. + :type page_limit: int, optional + :param page_offset: Offset for pagination. + :type page_offset: int, optional + :param filter_campaign_name: Filter campaigns by name (full-text search). + :type filter_campaign_name: str, optional + :param filter_campaign_status: Filter campaigns by status. + :type filter_campaign_status: str, optional + :param filter_campaign_owner: Filter campaigns by owner UUID. + :type filter_campaign_owner: str, optional + :rtype: ListCampaignsResponse + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if filter_campaign_name is not unset: + kwargs["filter_campaign_name"] = filter_campaign_name + + if filter_campaign_status is not unset: + kwargs["filter_campaign_status"] = filter_campaign_status + + if filter_campaign_owner is not unset: + kwargs["filter_campaign_owner"] = filter_campaign_owner + + return self._list_scorecard_campaigns_endpoint.call_with_http_info(**kwargs) + + def list_scorecard_outcomes(self, *, page_size: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, include: Union[str, UnsetType]=unset, fields_outcome: Union[str, UnsetType]=unset, fields_rule: Union[str, UnsetType]=unset, filter_outcome_service_name: Union[str, UnsetType]=unset, filter_outcome_state: Union[str, UnsetType]=unset, filter_rule_enabled: Union[bool, UnsetType]=unset, filter_rule_id: Union[str, UnsetType]=unset, filter_rule_name: Union[str, UnsetType]=unset, ) -> OutcomesResponse: + """List all rule outcomes. + + Fetches all rule outcomes. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param include: Include related rule details in the response. + :type include: str, optional + :param fields_outcome: Return only specified values in the outcome attributes. + :type fields_outcome: str, optional + :param fields_rule: Return only specified values in the included rule details. + :type fields_rule: str, optional + :param filter_outcome_service_name: Filter outcomes on a specific service name. + :type filter_outcome_service_name: str, optional + :param filter_outcome_state: Filter outcomes by a specific state. + :type filter_outcome_state: str, optional + :param filter_rule_enabled: Filter outcomes based on whether a rule is enabled or disabled. + :type filter_rule_enabled: bool, optional + :param filter_rule_id: Filter outcomes based on rule ID. + :type filter_rule_id: str, optional + :param filter_rule_name: Filter outcomes based on rule name. + :type filter_rule_name: str, optional + :rtype: OutcomesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if include is not unset: + kwargs["include"] = include + + if fields_outcome is not unset: + kwargs["fields_outcome"] = fields_outcome + + if fields_rule is not unset: + kwargs["fields_rule"] = fields_rule + + if filter_outcome_service_name is not unset: + kwargs["filter_outcome_service_name"] = filter_outcome_service_name + + if filter_outcome_state is not unset: + kwargs["filter_outcome_state"] = filter_outcome_state + + if filter_rule_enabled is not unset: + kwargs["filter_rule_enabled"] = filter_rule_enabled + + if filter_rule_id is not unset: + kwargs["filter_rule_id"] = filter_rule_id + + if filter_rule_name is not unset: + kwargs["filter_rule_name"] = filter_rule_name + + return self._list_scorecard_outcomes_endpoint.call_with_http_info(**kwargs) + + def list_scorecard_outcomes_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, include: Union[str, UnsetType]=unset, fields_outcome: Union[str, UnsetType]=unset, fields_rule: Union[str, UnsetType]=unset, filter_outcome_service_name: Union[str, UnsetType]=unset, filter_outcome_state: Union[str, UnsetType]=unset, filter_rule_enabled: Union[bool, UnsetType]=unset, filter_rule_id: Union[str, UnsetType]=unset, filter_rule_name: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[OutcomesResponseDataItem]: + """List all rule outcomes. + + Provide a paginated version of :meth:`list_scorecard_outcomes`, returning all items. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param include: Include related rule details in the response. + :type include: str, optional + :param fields_outcome: Return only specified values in the outcome attributes. + :type fields_outcome: str, optional + :param fields_rule: Return only specified values in the included rule details. + :type fields_rule: str, optional + :param filter_outcome_service_name: Filter outcomes on a specific service name. + :type filter_outcome_service_name: str, optional + :param filter_outcome_state: Filter outcomes by a specific state. + :type filter_outcome_state: str, optional + :param filter_rule_enabled: Filter outcomes based on whether a rule is enabled or disabled. + :type filter_rule_enabled: bool, optional + :param filter_rule_id: Filter outcomes based on rule ID. + :type filter_rule_id: str, optional + :param filter_rule_name: Filter outcomes based on rule name. + :type filter_rule_name: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[OutcomesResponseDataItem] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if include is not unset: + kwargs["include"] = include + + if fields_outcome is not unset: + kwargs["fields_outcome"] = fields_outcome + + if fields_rule is not unset: + kwargs["fields_rule"] = fields_rule + + if filter_outcome_service_name is not unset: + kwargs["filter_outcome_service_name"] = filter_outcome_service_name + + if filter_outcome_state is not unset: + kwargs["filter_outcome_state"] = filter_outcome_state + + if filter_rule_enabled is not unset: + kwargs["filter_rule_enabled"] = filter_rule_enabled + + if filter_rule_id is not unset: + kwargs["filter_rule_id"] = filter_rule_id + + if filter_rule_name is not unset: + kwargs["filter_rule_name"] = filter_rule_name + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_scorecard_outcomes_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_scorecard_rules(self, *, page_size: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, include: Union[str, UnsetType]=unset, filter_rule_id: Union[str, UnsetType]=unset, filter_rule_enabled: Union[bool, UnsetType]=unset, filter_rule_custom: Union[bool, UnsetType]=unset, filter_rule_name: Union[str, UnsetType]=unset, filter_rule_description: Union[str, UnsetType]=unset, fields_rule: Union[str, UnsetType]=unset, fields_scorecard: Union[str, UnsetType]=unset, ) -> ListRulesResponse: + """List all rules. + + Fetch all rules. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param include: Include related scorecard details in the response. + :type include: str, optional + :param filter_rule_id: Filter the rules on a rule ID. + :type filter_rule_id: str, optional + :param filter_rule_enabled: Filter for enabled rules only. + :type filter_rule_enabled: bool, optional + :param filter_rule_custom: Filter for custom rules only. + :type filter_rule_custom: bool, optional + :param filter_rule_name: Filter rules on the rule name. + :type filter_rule_name: str, optional + :param filter_rule_description: Filter rules on the rule description. + :type filter_rule_description: str, optional + :param fields_rule: Return only specific fields in the response for rule attributes. + :type fields_rule: str, optional + :param fields_scorecard: Return only specific fields in the included response for scorecard attributes. + :type fields_scorecard: str, optional + :rtype: ListRulesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if include is not unset: + kwargs["include"] = include + + if filter_rule_id is not unset: + kwargs["filter_rule_id"] = filter_rule_id + + if filter_rule_enabled is not unset: + kwargs["filter_rule_enabled"] = filter_rule_enabled + + if filter_rule_custom is not unset: + kwargs["filter_rule_custom"] = filter_rule_custom + + if filter_rule_name is not unset: + kwargs["filter_rule_name"] = filter_rule_name + + if filter_rule_description is not unset: + kwargs["filter_rule_description"] = filter_rule_description + + if fields_rule is not unset: + kwargs["fields_rule"] = fields_rule + + if fields_scorecard is not unset: + kwargs["fields_scorecard"] = fields_scorecard + + return self._list_scorecard_rules_endpoint.call_with_http_info(**kwargs) + + def list_scorecard_rules_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, include: Union[str, UnsetType]=unset, filter_rule_id: Union[str, UnsetType]=unset, filter_rule_enabled: Union[bool, UnsetType]=unset, filter_rule_custom: Union[bool, UnsetType]=unset, filter_rule_name: Union[str, UnsetType]=unset, filter_rule_description: Union[str, UnsetType]=unset, fields_rule: Union[str, UnsetType]=unset, fields_scorecard: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[ListRulesResponseDataItem]: + """List all rules. + + Provide a paginated version of :meth:`list_scorecard_rules`, returning all items. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param include: Include related scorecard details in the response. + :type include: str, optional + :param filter_rule_id: Filter the rules on a rule ID. + :type filter_rule_id: str, optional + :param filter_rule_enabled: Filter for enabled rules only. + :type filter_rule_enabled: bool, optional + :param filter_rule_custom: Filter for custom rules only. + :type filter_rule_custom: bool, optional + :param filter_rule_name: Filter rules on the rule name. + :type filter_rule_name: str, optional + :param filter_rule_description: Filter rules on the rule description. + :type filter_rule_description: str, optional + :param fields_rule: Return only specific fields in the response for rule attributes. + :type fields_rule: str, optional + :param fields_scorecard: Return only specific fields in the included response for scorecard attributes. + :type fields_scorecard: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[ListRulesResponseDataItem] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if include is not unset: + kwargs["include"] = include + + if filter_rule_id is not unset: + kwargs["filter_rule_id"] = filter_rule_id + + if filter_rule_enabled is not unset: + kwargs["filter_rule_enabled"] = filter_rule_enabled + + if filter_rule_custom is not unset: + kwargs["filter_rule_custom"] = filter_rule_custom + + if filter_rule_name is not unset: + kwargs["filter_rule_name"] = filter_rule_name + + if filter_rule_description is not unset: + kwargs["filter_rule_description"] = filter_rule_description + + if fields_rule is not unset: + kwargs["fields_rule"] = fields_rule + + if fields_scorecard is not unset: + kwargs["fields_scorecard"] = fields_scorecard + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_scorecard_rules_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_scorecards(self, *, page_offset: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, filter_scorecard_id: Union[str, UnsetType]=unset, filter_scorecard_name: Union[str, UnsetType]=unset, filter_scorecard_description: Union[str, UnsetType]=unset, ) -> ListScorecardsResponse: + """List all scorecards. + + Fetches all scorecards. + + :param page_offset: Offset for pagination. + :type page_offset: int, optional + :param page_size: Maximum number of scorecards to return. + :type page_size: int, optional + :param filter_scorecard_id: Filter by scorecard ID. + :type filter_scorecard_id: str, optional + :param filter_scorecard_name: Filter by scorecard name (partial match). + :type filter_scorecard_name: str, optional + :param filter_scorecard_description: Filter by scorecard description (partial match). + :type filter_scorecard_description: str, optional + :rtype: ListScorecardsResponse + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_size is not unset: + kwargs["page_size"] = page_size + + if filter_scorecard_id is not unset: + kwargs["filter_scorecard_id"] = filter_scorecard_id + + if filter_scorecard_name is not unset: + kwargs["filter_scorecard_name"] = filter_scorecard_name + + if filter_scorecard_description is not unset: + kwargs["filter_scorecard_description"] = filter_scorecard_description + + return self._list_scorecards_endpoint.call_with_http_info(**kwargs) + + def list_scorecard_scores(self, aggregation: ScorecardScoresAggregation, *, filter_rule_id: Union[str, UnsetType]=unset, filter_rule_name: Union[str, UnsetType]=unset, filter_rule_level: Union[str, UnsetType]=unset, filter_rule_scorecard_id: Union[str, UnsetType]=unset, filter_rule_is_custom: Union[bool, UnsetType]=unset, filter_rule_is_enabled: Union[bool, UnsetType]=unset, sort: Union[str, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> ListScorecardScoresResponse: + """List all scores. + + Returns a list of scorecard scores for each aggregation type, with score breakdowns. + + :param aggregation: The type of scores being requested. + :type aggregation: ScorecardScoresAggregation + :param filter_rule_id: Filter scores by rule ID(s), comma-separated. + :type filter_rule_id: str, optional + :param filter_rule_name: Filter scores by rule name. + :type filter_rule_name: str, optional + :param filter_rule_level: Filter scores by rule level(s), comma-separated. + :type filter_rule_level: str, optional + :param filter_rule_scorecard_id: Filter scores by scorecard ID(s), comma-separated. + :type filter_rule_scorecard_id: str, optional + :param filter_rule_is_custom: Filter scores to show only custom rules. + :type filter_rule_is_custom: bool, optional + :param filter_rule_is_enabled: Filter scores to show only enabled rules. + :type filter_rule_is_enabled: bool, optional + :param sort: Sort scores by field. Use a hyphen prefix for descending order. Options: score, numerator, denominator, total_pass, total_fail, total_skip, total_no_data. + :type sort: str, optional + :param page_offset: Offset for pagination. + :type page_offset: int, optional + :param page_limit: Number of scores to return. Max is 1000. + :type page_limit: int, optional + :rtype: ListScorecardScoresResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["aggregation"] = aggregation + + if filter_rule_id is not unset: + kwargs["filter_rule_id"] = filter_rule_id + + if filter_rule_name is not unset: + kwargs["filter_rule_name"] = filter_rule_name + + if filter_rule_level is not unset: + kwargs["filter_rule_level"] = filter_rule_level + + if filter_rule_scorecard_id is not unset: + kwargs["filter_rule_scorecard_id"] = filter_rule_scorecard_id + + if filter_rule_is_custom is not unset: + kwargs["filter_rule_is_custom"] = filter_rule_is_custom + + if filter_rule_is_enabled is not unset: + kwargs["filter_rule_is_enabled"] = filter_rule_is_enabled + + if sort is not unset: + kwargs["sort"] = sort + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_scorecard_scores_endpoint.call_with_http_info(**kwargs) + + def update_scorecard_campaign(self, campaign_id: str, body: UpdateCampaignRequest, ) -> CampaignResponse: + """Update a campaign. + + Updates an existing campaign. + + :param campaign_id: Campaign ID or key. + :type campaign_id: str + :param body: Campaign data. + :type body: UpdateCampaignRequest + :rtype: CampaignResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["campaign_id"] = campaign_id + + kwargs["body"] = body + + return self._update_scorecard_campaign_endpoint.call_with_http_info(**kwargs) + + def update_scorecard_outcomes(self, body: UpdateOutcomesAsyncRequest, ) -> None: + """Update Scorecard outcomes. + + Updates multiple scorecard rule outcomes in a single batched request. + + :param body: Set of scorecard outcomes. + :type body: UpdateOutcomesAsyncRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_scorecard_outcomes_endpoint.call_with_http_info(**kwargs) + + def update_scorecard_rule(self, rule_id: str, body: UpdateRuleRequest, ) -> UpdateRuleResponse: + """Update an existing scorecard rule. + + Updates an existing rule. + + :param rule_id: The ID of the rule. + :type rule_id: str + :param body: Rule attributes. + :type body: UpdateRuleRequest + :rtype: UpdateRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_scorecard_rule_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/seats_api.py b/datadog_api_client/v2/api/seats_api.py new file mode 100644 index 0000000000..ae86723dc4 --- /dev/null +++ b/datadog_api_client/v2/api/seats_api.py @@ -0,0 +1,165 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.unassign_seats_user_request import UnassignSeatsUserRequest +from datadog_api_client.v2.model.seat_user_data_array import SeatUserDataArray +from datadog_api_client.v2.model.assign_seats_user_response import AssignSeatsUserResponse +from datadog_api_client.v2.model.assign_seats_user_request import AssignSeatsUserRequest + + +class SeatsApi: + """ + The seats API allows you to view, assign, and unassign seats for your organization. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._assign_seats_user_endpoint = _Endpoint( + settings={ + "response_type": (AssignSeatsUserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/seats/users", + "operation_id": "assign_seats_user", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AssignSeatsUserRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_seats_users_endpoint = _Endpoint( + settings={ + "response_type": (SeatUserDataArray,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/seats/users", + "operation_id": "get_seats_users", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "product_code": { + "required": True, + "openapi_types": (str,), + "attribute": "product_code", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._unassign_seats_user_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/seats/users", + "operation_id": "unassign_seats_user", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UnassignSeatsUserRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def assign_seats_user(self, body: AssignSeatsUserRequest, ) -> AssignSeatsUserResponse: + """Assign seats to users. + + Assign seats to users for a product code. + + :type body: AssignSeatsUserRequest + :rtype: AssignSeatsUserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._assign_seats_user_endpoint.call_with_http_info(**kwargs) + + def get_seats_users(self, product_code: str, *, page_limit: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, ) -> SeatUserDataArray: + """Get users with seats. + + Get the list of users assigned seats for a product code. + + :param product_code: The product code for which to retrieve seat users. + :type product_code: str + :param page_limit: Maximum number of results to return. + :type page_limit: int, optional + :param page_cursor: Cursor for pagination. + :type page_cursor: str, optional + :rtype: SeatUserDataArray + """ + kwargs: Dict[str, Any] = {} + kwargs["product_code"] = product_code + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + return self._get_seats_users_endpoint.call_with_http_info(**kwargs) + + def unassign_seats_user(self, body: UnassignSeatsUserRequest, ) -> None: + """Unassign seats from users. + + Unassign seats from users for a product code. + + :type body: UnassignSeatsUserRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._unassign_seats_user_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/security_monitoring_api.py b/datadog_api_client/v2/api/security_monitoring_api.py new file mode 100644 index 0000000000..fd9dfb1623 --- /dev/null +++ b/datadog_api_client/v2/api/security_monitoring_api.py @@ -0,0 +1,8403 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.create_custom_framework_response import CreateCustomFrameworkResponse +from datadog_api_client.v2.model.create_custom_framework_request import CreateCustomFrameworkRequest +from datadog_api_client.v2.model.delete_custom_framework_response import DeleteCustomFrameworkResponse +from datadog_api_client.v2.model.get_custom_framework_response import GetCustomFrameworkResponse +from datadog_api_client.v2.model.update_custom_framework_response import UpdateCustomFrameworkResponse +from datadog_api_client.v2.model.update_custom_framework_request import UpdateCustomFrameworkRequest +from datadog_api_client.v2.model.get_resource_evaluation_filters_response import GetResourceEvaluationFiltersResponse +from datadog_api_client.v2.model.update_resource_evaluation_filters_response import UpdateResourceEvaluationFiltersResponse +from datadog_api_client.v2.model.update_resource_evaluation_filters_request import UpdateResourceEvaluationFiltersRequest +from datadog_api_client.v2.model.list_findings_response import ListFindingsResponse +from datadog_api_client.v2.model.finding_evaluation import FindingEvaluation +from datadog_api_client.v2.model.finding_status import FindingStatus +from datadog_api_client.v2.model.finding_vulnerability_type import FindingVulnerabilityType +from datadog_api_client.v2.model.finding import Finding +from datadog_api_client.v2.model.get_finding_response import GetFindingResponse +from datadog_api_client.v2.model.list_security_findings_response import ListSecurityFindingsResponse +from datadog_api_client.v2.model.security_findings_sort import SecurityFindingsSort +from datadog_api_client.v2.model.security_findings_data import SecurityFindingsData +from datadog_api_client.v2.model.assignee_response import AssigneeResponse +from datadog_api_client.v2.model.assignee_request import AssigneeRequest +from datadog_api_client.v2.model.due_date_rules_response import DueDateRulesResponse +from datadog_api_client.v2.model.due_date_rule_response import DueDateRuleResponse +from datadog_api_client.v2.model.due_date_rule_create_request import DueDateRuleCreateRequest +from datadog_api_client.v2.model.due_date_rule_reorder_request import DueDateRuleReorderRequest +from datadog_api_client.v2.model.due_date_rule_update_request import DueDateRuleUpdateRequest +from datadog_api_client.v2.model.mute_rules_response import MuteRulesResponse +from datadog_api_client.v2.model.mute_rule_response import MuteRuleResponse +from datadog_api_client.v2.model.mute_rule_create_request import MuteRuleCreateRequest +from datadog_api_client.v2.model.mute_rule_reorder_request import MuteRuleReorderRequest +from datadog_api_client.v2.model.mute_rule_update_request import MuteRuleUpdateRequest +from datadog_api_client.v2.model.ticket_creation_rules_response import TicketCreationRulesResponse +from datadog_api_client.v2.model.ticket_creation_rule_response import TicketCreationRuleResponse +from datadog_api_client.v2.model.ticket_creation_rule_create_request import TicketCreationRuleCreateRequest +from datadog_api_client.v2.model.ticket_creation_rule_reorder_request import TicketCreationRuleReorderRequest +from datadog_api_client.v2.model.ticket_creation_rule_update_request import TicketCreationRuleUpdateRequest +from datadog_api_client.v2.model.detach_case_request import DetachCaseRequest +from datadog_api_client.v2.model.finding_case_response_array import FindingCaseResponseArray +from datadog_api_client.v2.model.create_case_request_array import CreateCaseRequestArray +from datadog_api_client.v2.model.finding_case_response import FindingCaseResponse +from datadog_api_client.v2.model.attach_case_request import AttachCaseRequest +from datadog_api_client.v2.model.attach_jira_issue_request import AttachJiraIssueRequest +from datadog_api_client.v2.model.create_jira_issue_request_array import CreateJiraIssueRequestArray +from datadog_api_client.v2.model.attach_linear_issue_request import AttachLinearIssueRequest +from datadog_api_client.v2.model.create_linear_issue_request_array import CreateLinearIssueRequestArray +from datadog_api_client.v2.model.mute_findings_response import MuteFindingsResponse +from datadog_api_client.v2.model.mute_findings_request import MuteFindingsRequest +from datadog_api_client.v2.model.security_findings_search_request import SecurityFindingsSearchRequest +from datadog_api_client.v2.model.attach_service_now_ticket_request import AttachServiceNowTicketRequest +from datadog_api_client.v2.model.create_service_now_ticket_request_array import CreateServiceNowTicketRequestArray +from datadog_api_client.v2.model.list_assets_sbo_ms_response import ListAssetsSBOMsResponse +from datadog_api_client.v2.model.asset_type import AssetType +from datadog_api_client.v2.model.sbom_component_license_type import SBOMComponentLicenseType +from datadog_api_client.v2.model.get_sbom_response import GetSBOMResponse +from datadog_api_client.v2.model.sbom_format import SBOMFormat +from datadog_api_client.v2.model.scanned_assets_metadata import ScannedAssetsMetadata +from datadog_api_client.v2.model.cloud_asset_type import CloudAssetType +from datadog_api_client.v2.model.io_c_explorer_list_response import IoCExplorerListResponse +from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState +from datadog_api_client.v2.model.get_io_c_indicator_response import GetIoCIndicatorResponse +from datadog_api_client.v2.model.io_c_triage_write_response import IoCTriageWriteResponse +from datadog_api_client.v2.model.io_c_triage_write_request import IoCTriageWriteRequest +from datadog_api_client.v2.model.notification_rules_list_response import NotificationRulesListResponse +from datadog_api_client.v2.model.notification_rule_response import NotificationRuleResponse +from datadog_api_client.v2.model.create_notification_rule_parameters import CreateNotificationRuleParameters +from datadog_api_client.v2.model.patch_notification_rule_parameters import PatchNotificationRuleParameters +from datadog_api_client.v2.model.list_vulnerabilities_response import ListVulnerabilitiesResponse +from datadog_api_client.v2.model.vulnerability_type import VulnerabilityType +from datadog_api_client.v2.model.vulnerability_severity import VulnerabilitySeverity +from datadog_api_client.v2.model.vulnerability_status import VulnerabilityStatus +from datadog_api_client.v2.model.vulnerability_tool import VulnerabilityTool +from datadog_api_client.v2.model.vulnerability_ecosystem import VulnerabilityEcosystem +from datadog_api_client.v2.model.cyclone_dx_bom import CycloneDXBom +from datadog_api_client.v2.model.list_vulnerable_assets_response import ListVulnerableAssetsResponse +from datadog_api_client.v2.model.security_monitoring_critical_assets_response import SecurityMonitoringCriticalAssetsResponse +from datadog_api_client.v2.model.security_monitoring_critical_asset_response import SecurityMonitoringCriticalAssetResponse +from datadog_api_client.v2.model.security_monitoring_critical_asset_create_request import SecurityMonitoringCriticalAssetCreateRequest +from datadog_api_client.v2.model.security_monitoring_critical_asset_update_request import SecurityMonitoringCriticalAssetUpdateRequest +from datadog_api_client.v2.model.security_monitoring_integration_configs_response import SecurityMonitoringIntegrationConfigsResponse +from datadog_api_client.v2.model.security_monitoring_integration_type import SecurityMonitoringIntegrationType +from datadog_api_client.v2.model.security_monitoring_integration_config_response import SecurityMonitoringIntegrationConfigResponse +from datadog_api_client.v2.model.security_monitoring_integration_config_create_request import SecurityMonitoringIntegrationConfigCreateRequest +from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_response import SecurityMonitoringEntraIdAzureAppRegistrationsResponse +from datadog_api_client.v2.model.security_monitoring_integration_credentials_validate_request import SecurityMonitoringIntegrationCredentialsValidateRequest +from datadog_api_client.v2.model.security_monitoring_integration_config_update_request import SecurityMonitoringIntegrationConfigUpdateRequest +from datadog_api_client.v2.model.security_monitoring_integration_activate_request import SecurityMonitoringIntegrationActivateRequest +from datadog_api_client.v2.model.notification_rule_preview_response import NotificationRulePreviewResponse +from datadog_api_client.v2.model.security_filters_response import SecurityFiltersResponse +from datadog_api_client.v2.model.security_filter_response import SecurityFilterResponse +from datadog_api_client.v2.model.security_filter_create_request import SecurityFilterCreateRequest +from datadog_api_client.v2.model.security_filter_versions_response import SecurityFilterVersionsResponse +from datadog_api_client.v2.model.security_filter_update_request import SecurityFilterUpdateRequest +from datadog_api_client.v2.model.security_monitoring_paginated_suppressions_response import SecurityMonitoringPaginatedSuppressionsResponse +from datadog_api_client.v2.model.security_monitoring_suppression_sort import SecurityMonitoringSuppressionSort +from datadog_api_client.v2.model.security_monitoring_suppression_response import SecurityMonitoringSuppressionResponse +from datadog_api_client.v2.model.security_monitoring_suppression_create_request import SecurityMonitoringSuppressionCreateRequest +from datadog_api_client.v2.model.security_monitoring_suppressions_response import SecurityMonitoringSuppressionsResponse +from datadog_api_client.v2.model.security_monitoring_rule_create_payload import SecurityMonitoringRuleCreatePayload +from datadog_api_client.v2.model.security_monitoring_standard_rule_create_payload import SecurityMonitoringStandardRuleCreatePayload +from datadog_api_client.v2.model.security_monitoring_signal_rule_create_payload import SecurityMonitoringSignalRuleCreatePayload +from datadog_api_client.v2.model.cloud_configuration_rule_create_payload import CloudConfigurationRuleCreatePayload +from datadog_api_client.v2.model.security_monitoring_suppression_update_request import SecurityMonitoringSuppressionUpdateRequest +from datadog_api_client.v2.model.get_suppression_version_history_response import GetSuppressionVersionHistoryResponse +from datadog_api_client.v2.model.security_monitoring_content_pack_states_response import SecurityMonitoringContentPackStatesResponse +from datadog_api_client.v2.model.security_monitoring_datasets_list_response import SecurityMonitoringDatasetsListResponse +from datadog_api_client.v2.model.security_monitoring_dataset_create_response import SecurityMonitoringDatasetCreateResponse +from datadog_api_client.v2.model.security_monitoring_dataset_create_request import SecurityMonitoringDatasetCreateRequest +from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_response import SecurityMonitoringDatasetDependenciesResponse +from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_request import SecurityMonitoringDatasetDependenciesRequest +from datadog_api_client.v2.model.security_monitoring_dataset_response import SecurityMonitoringDatasetResponse +from datadog_api_client.v2.model.security_monitoring_dataset_update_request import SecurityMonitoringDatasetUpdateRequest +from datadog_api_client.v2.model.security_monitoring_dataset_version_history_response import SecurityMonitoringDatasetVersionHistoryResponse +from datadog_api_client.v2.model.entity_context_response import EntityContextResponse +from datadog_api_client.v2.model.single_entity_context_response import SingleEntityContextResponse +from datadog_api_client.v2.model.security_monitoring_list_rules_response import SecurityMonitoringListRulesResponse +from datadog_api_client.v2.model.security_monitoring_rule_sort import SecurityMonitoringRuleSort +from datadog_api_client.v2.model.security_monitoring_rule_response import SecurityMonitoringRuleResponse +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response import SecurityMonitoringRuleBulkDeleteResponse +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_payload import SecurityMonitoringRuleBulkDeletePayload +from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_payload import SecurityMonitoringRuleBulkExportPayload +from datadog_api_client.v2.model.security_monitoring_rule_convert_response import SecurityMonitoringRuleConvertResponse +from datadog_api_client.v2.model.security_monitoring_rule_convert_payload import SecurityMonitoringRuleConvertPayload +from datadog_api_client.v2.model.security_monitoring_standard_rule_payload import SecurityMonitoringStandardRulePayload +from datadog_api_client.v2.model.security_monitoring_signal_rule_payload import SecurityMonitoringSignalRulePayload +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_payload import SecurityMonitoringRuleConvertBulkPayload +from datadog_api_client.v2.model.security_monitoring_rule_test_response import SecurityMonitoringRuleTestResponse +from datadog_api_client.v2.model.security_monitoring_rule_test_request import SecurityMonitoringRuleTestRequest +from datadog_api_client.v2.model.security_monitoring_rule_validate_payload import SecurityMonitoringRuleValidatePayload +from datadog_api_client.v2.model.cloud_configuration_rule_payload import CloudConfigurationRulePayload +from datadog_api_client.v2.model.security_monitoring_rule_update_payload import SecurityMonitoringRuleUpdatePayload +from datadog_api_client.v2.model.get_rule_version_history_response import GetRuleVersionHistoryResponse +from datadog_api_client.v2.model.sample_log_generation_subscriptions_response import SampleLogGenerationSubscriptionsResponse +from datadog_api_client.v2.model.sample_log_generation_subscriptions_status_filter import SampleLogGenerationSubscriptionsStatusFilter +from datadog_api_client.v2.model.sample_log_generation_subscription_response import SampleLogGenerationSubscriptionResponse +from datadog_api_client.v2.model.sample_log_generation_subscription_create_request import SampleLogGenerationSubscriptionCreateRequest +from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_response import SampleLogGenerationBulkSubscriptionResponse +from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_request import SampleLogGenerationBulkSubscriptionRequest +from datadog_api_client.v2.model.security_monitoring_signals_list_response import SecurityMonitoringSignalsListResponse +from datadog_api_client.v2.model.security_monitoring_signals_sort import SecurityMonitoringSignalsSort +from datadog_api_client.v2.model.security_monitoring_signal import SecurityMonitoringSignal +from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_update_response import SecurityMonitoringSignalsBulkTriageUpdateResponse +from datadog_api_client.v2.model.security_monitoring_signals_bulk_assignee_update_request import SecurityMonitoringSignalsBulkAssigneeUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signals_bulk_state_update_request import SecurityMonitoringSignalsBulkStateUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signals_bulk_update_request import SecurityMonitoringSignalsBulkUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signal_list_request import SecurityMonitoringSignalListRequest +from datadog_api_client.v2.model.security_monitoring_signal_response import SecurityMonitoringSignalResponse +from datadog_api_client.v2.model.security_monitoring_signal_triage_update_response import SecurityMonitoringSignalTriageUpdateResponse +from datadog_api_client.v2.model.security_monitoring_signal_assignee_update_request import SecurityMonitoringSignalAssigneeUpdateRequest +from datadog_api_client.v2.model.signal_entities_response import SignalEntitiesResponse +from datadog_api_client.v2.model.security_monitoring_signal_incidents_update_request import SecurityMonitoringSignalIncidentsUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signal_suggested_actions_response import SecurityMonitoringSignalSuggestedActionsResponse +from datadog_api_client.v2.model.security_monitoring_signal_state_update_request import SecurityMonitoringSignalStateUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signal_update_request import SecurityMonitoringSignalUpdateRequest +from datadog_api_client.v2.model.security_monitoring_terraform_resource_type import SecurityMonitoringTerraformResourceType +from datadog_api_client.v2.model.security_monitoring_terraform_bulk_export_request import SecurityMonitoringTerraformBulkExportRequest +from datadog_api_client.v2.model.security_monitoring_terraform_export_response import SecurityMonitoringTerraformExportResponse +from datadog_api_client.v2.model.security_monitoring_terraform_convert_request import SecurityMonitoringTerraformConvertRequest +from datadog_api_client.v2.model.list_historical_jobs_response import ListHistoricalJobsResponse +from datadog_api_client.v2.model.job_create_response import JobCreateResponse +from datadog_api_client.v2.model.run_historical_job_request import RunHistoricalJobRequest +from datadog_api_client.v2.model.convert_job_results_to_signals_request import ConvertJobResultsToSignalsRequest +from datadog_api_client.v2.model.historical_job_response import HistoricalJobResponse +from datadog_api_client.v2.model.sast_rulesets_response import SastRulesetsResponse +from datadog_api_client.v2.model.default_rulesets_per_language_response import DefaultRulesetsPerLanguageResponse +from datadog_api_client.v2.model.get_multiple_rulesets_response import GetMultipleRulesetsResponse +from datadog_api_client.v2.model.get_multiple_rulesets_request import GetMultipleRulesetsRequest +from datadog_api_client.v2.model.sast_ruleset_response import SastRulesetResponse +from datadog_api_client.v2.model.secret_rule_array import SecretRuleArray +from datadog_api_client.v2.model.analysis_response import AnalysisResponse +from datadog_api_client.v2.model.analysis_request import AnalysisRequest +from datadog_api_client.v2.model.get_ast_response import GetAstResponse +from datadog_api_client.v2.model.get_ast_request import GetAstRequest +from datadog_api_client.v2.model.node_types_response import NodeTypesResponse + + +class SecurityMonitoringApi: + """ + Create and manage your security rules, signals, filters, and more. See the `Datadog Security page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._activate_content_pack_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/content_packs/{content_pack_id}/activate", + "operation_id": "activate_content_pack", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "content_pack_id": { + "required": True, + "openapi_types": (str,), + "attribute": "content_pack_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._activate_integration_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringIntegrationConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config/{integration_type}/activate", + "operation_id": "activate_integration", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "integration_type": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_type", + "location": "path", + }, + "body": { + "openapi_types": (SecurityMonitoringIntegrationActivateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._attach_case_endpoint = _Endpoint( + settings={ + "response_type": (FindingCaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/cases/{case_id}", + "operation_id": "attach_case", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "case_id": { + "required": True, + "openapi_types": (str,), + "attribute": "case_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AttachCaseRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._attach_jira_issue_endpoint = _Endpoint( + settings={ + "response_type": (FindingCaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/jira_issues", + "operation_id": "attach_jira_issue", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AttachJiraIssueRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._attach_linear_issue_endpoint = _Endpoint( + settings={ + "response_type": (FindingCaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/linear_issues", + "operation_id": "attach_linear_issue", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AttachLinearIssueRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._attach_service_now_ticket_endpoint = _Endpoint( + settings={ + "response_type": (FindingCaseResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/servicenow_tickets", + "operation_id": "attach_service_now_ticket", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AttachServiceNowTicketRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._batch_get_security_monitoring_dataset_dependencies_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringDatasetDependenciesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/datasets/dependencies", + "operation_id": "batch_get_security_monitoring_dataset_dependencies", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringDatasetDependenciesRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_convert_existing_security_monitoring_rules_endpoint = _Endpoint( + settings={ + "response_type": (file_type,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/convert/bulk", + "operation_id": "bulk_convert_existing_security_monitoring_rules", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleConvertBulkPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/zip", "application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_create_sample_log_generation_subscriptions_endpoint = _Endpoint( + settings={ + "response_type": (SampleLogGenerationBulkSubscriptionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/sample_log_generation/subscriptions/bulk", + "operation_id": "bulk_create_sample_log_generation_subscriptions", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SampleLogGenerationBulkSubscriptionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_delete_security_monitoring_rules_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringRuleBulkDeleteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/bulk_delete", + "operation_id": "bulk_delete_security_monitoring_rules", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleBulkDeletePayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_edit_security_monitoring_signals_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalsBulkTriageUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/bulk/update", + "operation_id": "bulk_edit_security_monitoring_signals", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSignalsBulkUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_edit_security_monitoring_signals_assignee_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalsBulkTriageUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security_monitoring/signals/bulk/assignee", + "operation_id": "bulk_edit_security_monitoring_signals_assignee", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSignalsBulkAssigneeUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_edit_security_monitoring_signals_state_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalsBulkTriageUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security_monitoring/signals/bulk/state", + "operation_id": "bulk_edit_security_monitoring_signals_state", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSignalsBulkStateUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_export_security_monitoring_rules_endpoint = _Endpoint( + settings={ + "response_type": (file_type,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/bulk_export", + "operation_id": "bulk_export_security_monitoring_rules", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleBulkExportPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/zip", "application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._bulk_export_security_monitoring_terraform_resources_endpoint = _Endpoint( + settings={ + "response_type": (file_type,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/terraform/{resource_type}/bulk", + "operation_id": "bulk_export_security_monitoring_terraform_resources", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "resource_type": { + "required": True, + "openapi_types": (SecurityMonitoringTerraformResourceType,), + "attribute": "resource_type", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringTerraformBulkExportRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/zip", "application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._cancel_historical_job_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/siem-historical-detections/jobs/{job_id}/cancel", + "operation_id": "cancel_historical_job", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "job_id": { + "required": True, + "openapi_types": (str,), + "attribute": "job_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._convert_existing_security_monitoring_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringRuleConvertResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/{rule_id}/convert", + "operation_id": "convert_existing_security_monitoring_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._convert_job_result_to_signal_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/siem-historical-detections/jobs/signal_convert", + "operation_id": "convert_job_result_to_signal", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ConvertJobResultsToSignalsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._convert_security_monitoring_rule_from_json_to_terraform_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringRuleConvertResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/convert", + "operation_id": "convert_security_monitoring_rule_from_json_to_terraform", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleConvertPayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._convert_security_monitoring_terraform_resource_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringTerraformExportResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/terraform/{resource_type}/convert", + "operation_id": "convert_security_monitoring_terraform_resource", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "resource_type": { + "required": True, + "openapi_types": (SecurityMonitoringTerraformResourceType,), + "attribute": "resource_type", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringTerraformConvertRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_cases_endpoint = _Endpoint( + settings={ + "response_type": (FindingCaseResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/cases", + "operation_id": "create_cases", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateCaseRequestArray,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_custom_framework_endpoint = _Endpoint( + settings={ + "response_type": (CreateCustomFrameworkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cloud_security_management/custom_frameworks", + "operation_id": "create_custom_framework", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateCustomFrameworkRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_io_c_triage_state_endpoint = _Endpoint( + settings={ + "response_type": (IoCTriageWriteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/siem/ioc-explorer/triage", + "operation_id": "create_io_c_triage_state", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (IoCTriageWriteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_jira_issues_endpoint = _Endpoint( + settings={ + "response_type": (FindingCaseResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/jira_issues", + "operation_id": "create_jira_issues", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateJiraIssueRequestArray,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_linear_issues_endpoint = _Endpoint( + settings={ + "response_type": (FindingCaseResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/linear_issues", + "operation_id": "create_linear_issues", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateLinearIssueRequestArray,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_sample_log_generation_subscription_endpoint = _Endpoint( + settings={ + "response_type": (SampleLogGenerationSubscriptionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/sample_log_generation/subscriptions", + "operation_id": "create_sample_log_generation_subscription", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SampleLogGenerationSubscriptionCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_security_filter_endpoint = _Endpoint( + settings={ + "response_type": (SecurityFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/security_filters", + "operation_id": "create_security_filter", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityFilterCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_security_findings_automation_due_date_rule_endpoint = _Endpoint( + settings={ + "response_type": (DueDateRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/due_date_rules", + "operation_id": "create_security_findings_automation_due_date_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DueDateRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_security_findings_automation_mute_rule_endpoint = _Endpoint( + settings={ + "response_type": (MuteRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/mute_rules", + "operation_id": "create_security_findings_automation_mute_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MuteRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_security_findings_automation_ticket_creation_rule_endpoint = _Endpoint( + settings={ + "response_type": (TicketCreationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/ticket_creation_rules", + "operation_id": "create_security_findings_automation_ticket_creation_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TicketCreationRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_security_monitoring_critical_asset_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringCriticalAssetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/critical_assets", + "operation_id": "create_security_monitoring_critical_asset", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringCriticalAssetCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_security_monitoring_dataset_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringDatasetCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/datasets", + "operation_id": "create_security_monitoring_dataset", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringDatasetCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_security_monitoring_integration_config_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringIntegrationConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config", + "operation_id": "create_security_monitoring_integration_config", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringIntegrationConfigCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_security_monitoring_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules", + "operation_id": "create_security_monitoring_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleCreatePayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_security_monitoring_suppression_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSuppressionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/suppressions", + "operation_id": "create_security_monitoring_suppression", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSuppressionCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_service_now_tickets_endpoint = _Endpoint( + settings={ + "response_type": (FindingCaseResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/servicenow_tickets", + "operation_id": "create_service_now_tickets", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateServiceNowTicketRequestArray,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_signal_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (NotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/signals/notification_rules", + "operation_id": "create_signal_notification_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateNotificationRuleParameters,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_static_analysis_ast_endpoint = _Endpoint( + settings={ + "response_type": (GetAstResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/static-analysis-server/get-ast", + "operation_id": "create_static_analysis_ast", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GetAstRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_static_analysis_server_analysis_endpoint = _Endpoint( + settings={ + "response_type": (AnalysisResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/static-analysis-server/analyze", + "operation_id": "create_static_analysis_server_analysis", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AnalysisRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_vulnerability_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (NotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/vulnerabilities/notification_rules", + "operation_id": "create_vulnerability_notification_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateNotificationRuleParameters,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._deactivate_content_pack_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/content_packs/{content_pack_id}/deactivate", + "operation_id": "deactivate_content_pack", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "content_pack_id": { + "required": True, + "openapi_types": (str,), + "attribute": "content_pack_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._deactivate_integration_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringIntegrationConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config/{integration_type}/deactivate", + "operation_id": "deactivate_integration", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "integration_type": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_type", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_custom_framework_endpoint = _Endpoint( + settings={ + "response_type": (DeleteCustomFrameworkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cloud_security_management/custom_frameworks/{handle}/{version}", + "operation_id": "delete_custom_framework", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "handle": { + "required": True, + "openapi_types": (str,), + "attribute": "handle", + "location": "path", + }, + "version": { + "required": True, + "openapi_types": (str,), + "attribute": "version", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_historical_job_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/siem-historical-detections/jobs/{job_id}", + "operation_id": "delete_historical_job", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "job_id": { + "required": True, + "openapi_types": (str,), + "attribute": "job_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_sample_log_generation_subscription_endpoint = _Endpoint( + settings={ + "response_type": (SampleLogGenerationSubscriptionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/sample_log_generation/subscriptions/{content_pack_id}", + "operation_id": "delete_sample_log_generation_subscription", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "content_pack_id": { + "required": True, + "openapi_types": (str,), + "attribute": "content_pack_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._delete_security_filter_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/security_filters/{security_filter_id}", + "operation_id": "delete_security_filter", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "security_filter_id": { + "required": True, + "openapi_types": (str,), + "attribute": "security_filter_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_security_findings_automation_due_date_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/due_date_rules/{rule_id}", + "operation_id": "delete_security_findings_automation_due_date_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_security_findings_automation_mute_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/mute_rules/{rule_id}", + "operation_id": "delete_security_findings_automation_mute_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_security_findings_automation_ticket_creation_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/ticket_creation_rules/{rule_id}", + "operation_id": "delete_security_findings_automation_ticket_creation_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_security_monitoring_critical_asset_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/critical_assets/{critical_asset_id}", + "operation_id": "delete_security_monitoring_critical_asset", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "critical_asset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "critical_asset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_security_monitoring_dataset_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/datasets/{dataset_id}", + "operation_id": "delete_security_monitoring_dataset", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_security_monitoring_integration_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config/{integration_config_id}", + "operation_id": "delete_security_monitoring_integration_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "integration_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_security_monitoring_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/{rule_id}", + "operation_id": "delete_security_monitoring_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_security_monitoring_suppression_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}", + "operation_id": "delete_security_monitoring_suppression", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "suppression_id": { + "required": True, + "openapi_types": (str,), + "attribute": "suppression_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_signal_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/signals/notification_rules/{id}", + "operation_id": "delete_signal_notification_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_vulnerability_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/vulnerabilities/notification_rules/{id}", + "operation_id": "delete_vulnerability_notification_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._detach_case_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/cases", + "operation_id": "detach_case", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DetachCaseRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._edit_security_monitoring_signal_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalTriageUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/{signal_id}/update", + "operation_id": "edit_security_monitoring_signal", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSignalUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._edit_security_monitoring_signal_assignee_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalTriageUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/{signal_id}/assignee", + "operation_id": "edit_security_monitoring_signal_assignee", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSignalAssigneeUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._edit_security_monitoring_signal_incidents_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalTriageUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/{signal_id}/incidents", + "operation_id": "edit_security_monitoring_signal_incidents", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSignalIncidentsUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._edit_security_monitoring_signal_state_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalTriageUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/{signal_id}/state", + "operation_id": "edit_security_monitoring_signal_state", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSignalStateUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._export_security_monitoring_terraform_resource_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringTerraformExportResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/terraform/{resource_type}/{resource_id}", + "operation_id": "export_security_monitoring_terraform_resource", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "resource_type": { + "required": True, + "openapi_types": (SecurityMonitoringTerraformResourceType,), + "attribute": "resource_type", + "location": "path", + }, + "resource_id": { + "required": True, + "openapi_types": (str,), + "attribute": "resource_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_content_packs_states_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringContentPackStatesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/content_packs/states", + "operation_id": "get_content_packs_states", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_critical_assets_affecting_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringCriticalAssetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/critical_assets/rules/{rule_id}", + "operation_id": "get_critical_assets_affecting_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_custom_framework_endpoint = _Endpoint( + settings={ + "response_type": (GetCustomFrameworkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cloud_security_management/custom_frameworks/{handle}/{version}", + "operation_id": "get_custom_framework", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "handle": { + "required": True, + "openapi_types": (str,), + "attribute": "handle", + "location": "path", + }, + "version": { + "required": True, + "openapi_types": (str,), + "attribute": "version", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_entity_context_endpoint = _Endpoint( + settings={ + "response_type": (EntityContextResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/entity_context", + "operation_id": "get_entity_context", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "_from": { + "openapi_types": (str,), + "attribute": "from", + "location": "query", + }, + "to": { + "openapi_types": (str,), + "attribute": "to", + "location": "query", + }, + "as_of": { + "openapi_types": (str,), + "attribute": "as_of", + "location": "query", + }, + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "page_token": { + "openapi_types": (str,), + "attribute": "page_token", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_entra_id_azure_app_registrations_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringEntraIdAzureAppRegistrationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config/entra_id/azure_app_registrations", + "operation_id": "get_entra_id_azure_app_registrations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_finding_endpoint = _Endpoint( + settings={ + "response_type": (GetFindingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/posture_management/findings/{finding_id}", + "operation_id": "get_finding", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "finding_id": { + "required": True, + "openapi_types": (str,), + "attribute": "finding_id", + "location": "path", + }, + "snapshot_timestamp": { + "validation": { + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "snapshot_timestamp", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_historical_job_endpoint = _Endpoint( + settings={ + "response_type": (HistoricalJobResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/siem-historical-detections/jobs/{job_id}", + "operation_id": "get_historical_job", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "job_id": { + "required": True, + "openapi_types": (str,), + "attribute": "job_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_indicator_of_compromise_endpoint = _Endpoint( + settings={ + "response_type": (GetIoCIndicatorResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/siem/ioc-explorer/indicator", + "operation_id": "get_indicator_of_compromise", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "indicator": { + "required": True, + "openapi_types": (str,), + "attribute": "indicator", + "location": "query", + }, + "ocsf": { + "openapi_types": (bool,), + "attribute": "ocsf", + "location": "query", + }, + "include_triage_history": { + "openapi_types": (bool,), + "attribute": "include_triage_history", + "location": "query", + }, + "triage_history_limit": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "triage_history_limit", + "location": "query", + }, + "triage_history_offset": { + "validation": { + "inclusive_maximum": 2147483647, + }, + "openapi_types": (int,), + "attribute": "triage_history_offset", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_investigation_log_queries_matching_signal_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalSuggestedActionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/{signal_id}/investigation_queries", + "operation_id": "get_investigation_log_queries_matching_signal", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_resource_evaluation_filters_endpoint = _Endpoint( + settings={ + "response_type": (GetResourceEvaluationFiltersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cloud_security_management/resource_filters", + "operation_id": "get_resource_evaluation_filters", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "cloud_provider": { + "openapi_types": (str,), + "attribute": "cloud_provider", + "location": "query", + }, + "account_id": { + "openapi_types": (str,), + "attribute": "account_id", + "location": "query", + }, + "skip_cache": { + "openapi_types": (bool,), + "attribute": "skip_cache", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_rule_version_history_endpoint = _Endpoint( + settings={ + "response_type": (GetRuleVersionHistoryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security_monitoring/rules/{rule_id}/version_history", + "operation_id": "get_rule_version_history", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_sbom_endpoint = _Endpoint( + settings={ + "response_type": (GetSBOMResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/sboms/{asset_type}", + "operation_id": "get_sbom", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "asset_type": { + "required": True, + "openapi_types": (AssetType,), + "attribute": "asset_type", + "location": "path", + }, + "filter_asset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[asset_name]", + "location": "query", + }, + "filter_repo_digest": { + "openapi_types": (str,), + "attribute": "filter[repo_digest]", + "location": "query", + }, + "ext_format": { + "openapi_types": (SBOMFormat,), + "attribute": "ext:format", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_secrets_rules_endpoint = _Endpoint( + settings={ + "response_type": (SecretRuleArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/secrets/rules", + "operation_id": "get_secrets_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_filter_endpoint = _Endpoint( + settings={ + "response_type": (SecurityFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/security_filters/{security_filter_id}", + "operation_id": "get_security_filter", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "security_filter_id": { + "required": True, + "openapi_types": (str,), + "attribute": "security_filter_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_findings_automation_due_date_rule_endpoint = _Endpoint( + settings={ + "response_type": (DueDateRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/due_date_rules/{rule_id}", + "operation_id": "get_security_findings_automation_due_date_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_findings_automation_mute_rule_endpoint = _Endpoint( + settings={ + "response_type": (MuteRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/mute_rules/{rule_id}", + "operation_id": "get_security_findings_automation_mute_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_findings_automation_ticket_creation_rule_endpoint = _Endpoint( + settings={ + "response_type": (TicketCreationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/ticket_creation_rules/{rule_id}", + "operation_id": "get_security_findings_automation_ticket_creation_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_critical_asset_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringCriticalAssetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/critical_assets/{critical_asset_id}", + "operation_id": "get_security_monitoring_critical_asset", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "critical_asset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "critical_asset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_dataset_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringDatasetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/datasets/{dataset_id}", + "operation_id": "get_security_monitoring_dataset", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_dataset_by_version_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringDatasetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/datasets/{dataset_id}/version/{version}", + "operation_id": "get_security_monitoring_dataset_by_version", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "version": { + "required": True, + "openapi_types": (int,), + "attribute": "version", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_dataset_version_history_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringDatasetVersionHistoryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/datasets/{dataset_id}/version_history", + "operation_id": "get_security_monitoring_dataset_version_history", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_histsignal_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/siem-historical-detections/histsignals/{histsignal_id}", + "operation_id": "get_security_monitoring_histsignal", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "histsignal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "histsignal_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_histsignals_by_job_id_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/siem-historical-detections/jobs/{job_id}/histsignals", + "operation_id": "get_security_monitoring_histsignals_by_job_id", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "job_id": { + "required": True, + "openapi_types": (str,), + "attribute": "job_id", + "location": "path", + }, + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_from": { + "openapi_types": (datetime,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (datetime,), + "attribute": "filter[to]", + "location": "query", + }, + "sort": { + "openapi_types": (SecurityMonitoringSignalsSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_integration_config_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringIntegrationConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config/{integration_config_id}", + "operation_id": "get_security_monitoring_integration_config", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "integration_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/{rule_id}", + "operation_id": "get_security_monitoring_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_signal_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/{signal_id}", + "operation_id": "get_security_monitoring_signal", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_security_monitoring_suppression_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSuppressionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}", + "operation_id": "get_security_monitoring_suppression", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "suppression_id": { + "required": True, + "openapi_types": (str,), + "attribute": "suppression_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_signal_entities_endpoint = _Endpoint( + settings={ + "response_type": (SignalEntitiesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/{signal_id}/entities", + "operation_id": "get_signal_entities", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + "limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_signal_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (NotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/signals/notification_rules/{id}", + "operation_id": "get_signal_notification_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_signal_notification_rules_endpoint = _Endpoint( + settings={ + "response_type": (NotificationRulesListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/signals/notification_rules", + "operation_id": "get_signal_notification_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_single_entity_context_endpoint = _Endpoint( + settings={ + "response_type": (SingleEntityContextResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/entity_context/{id}", + "operation_id": "get_single_entity_context", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "_from": { + "openapi_types": (str,), + "attribute": "from", + "location": "query", + }, + "to": { + "openapi_types": (str,), + "attribute": "to", + "location": "query", + }, + "as_of": { + "openapi_types": (str,), + "attribute": "as_of", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_static_analysis_default_rulesets_endpoint = _Endpoint( + settings={ + "response_type": (DefaultRulesetsPerLanguageResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/default-rulesets/{language}", + "operation_id": "get_static_analysis_default_rulesets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "language": { + "required": True, + "openapi_types": (str,), + "attribute": "language", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_static_analysis_node_types_endpoint = _Endpoint( + settings={ + "response_type": (NodeTypesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/static-analysis-server/node-types/{language}", + "operation_id": "get_static_analysis_node_types", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "language": { + "required": True, + "openapi_types": (str,), + "attribute": "language", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_static_analysis_ruleset_endpoint = _Endpoint( + settings={ + "response_type": (SastRulesetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/rulesets/{ruleset_name}", + "operation_id": "get_static_analysis_ruleset", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "include_tests": { + "openapi_types": (bool,), + "attribute": "include_tests", + "location": "query", + }, + "include_testing_rules": { + "openapi_types": (bool,), + "attribute": "include_testing_rules", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_static_analysis_tree_sitter_wasm_endpoint = _Endpoint( + settings={ + "response_type": (file_type,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/static-analysis-server/tree-sitter-wasm/{file}", + "operation_id": "get_static_analysis_tree_sitter_wasm", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "file": { + "required": True, + "openapi_types": (str,), + "attribute": "file", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/octet-stream", "application/json"], + }, + api_client=api_client, + ) + + self._get_suggested_actions_matching_signal_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalSuggestedActionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/{signal_id}/suggested_actions", + "operation_id": "get_suggested_actions_matching_signal", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "signal_id": { + "required": True, + "openapi_types": (str,), + "attribute": "signal_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_suppressions_affecting_future_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSuppressionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/suppressions/rules", + "operation_id": "get_suppressions_affecting_future_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleCreatePayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_suppressions_affecting_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSuppressionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/suppressions/rules/{rule_id}", + "operation_id": "get_suppressions_affecting_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_suppression_version_history_endpoint = _Endpoint( + settings={ + "response_type": (GetSuppressionVersionHistoryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}/version_history", + "operation_id": "get_suppression_version_history", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "suppression_id": { + "required": True, + "openapi_types": (str,), + "attribute": "suppression_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_vulnerability_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (NotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/vulnerabilities/notification_rules/{id}", + "operation_id": "get_vulnerability_notification_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_vulnerability_notification_rules_endpoint = _Endpoint( + settings={ + "response_type": (NotificationRulesListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/vulnerabilities/notification_rules", + "operation_id": "get_vulnerability_notification_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._import_security_vulnerabilities_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/vulnerabilities", + "operation_id": "import_security_vulnerabilities", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CycloneDXBom,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_assets_sbo_ms_endpoint = _Endpoint( + settings={ + "response_type": (ListAssetsSBOMsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/sboms", + "operation_id": "list_assets_sbo_ms", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_token": { + "openapi_types": (str,), + "attribute": "page[token]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "filter_asset_type": { + "openapi_types": (AssetType,), + "attribute": "filter[asset_type]", + "location": "query", + }, + "filter_asset_name": { + "openapi_types": (str,), + "attribute": "filter[asset_name]", + "location": "query", + }, + "filter_package_name": { + "openapi_types": (str,), + "attribute": "filter[package_name]", + "location": "query", + }, + "filter_package_version": { + "openapi_types": (str,), + "attribute": "filter[package_version]", + "location": "query", + }, + "filter_license_name": { + "openapi_types": (str,), + "attribute": "filter[license_name]", + "location": "query", + }, + "filter_license_type": { + "openapi_types": (SBOMComponentLicenseType,), + "attribute": "filter[license_type]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_findings_endpoint = _Endpoint( + settings={ + "response_type": (ListFindingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/posture_management/findings", + "operation_id": "list_findings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "snapshot_timestamp": { + "validation": { + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "snapshot_timestamp", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "filter_tags": { + "openapi_types": (str,), + "attribute": "filter[tags]", + "location": "query", + }, + "filter_evaluation_changed_at": { + "openapi_types": (str,), + "attribute": "filter[evaluation_changed_at]", + "location": "query", + }, + "filter_muted": { + "openapi_types": (bool,), + "attribute": "filter[muted]", + "location": "query", + }, + "filter_rule_id": { + "openapi_types": (str,), + "attribute": "filter[rule_id]", + "location": "query", + }, + "filter_rule_name": { + "openapi_types": (str,), + "attribute": "filter[rule_name]", + "location": "query", + }, + "filter_resource_type": { + "openapi_types": (str,), + "attribute": "filter[resource_type]", + "location": "query", + }, + "filter_resource_id": { + "openapi_types": (str,), + "attribute": "filter[@resource_id]", + "location": "query", + }, + "filter_discovery_timestamp": { + "openapi_types": (str,), + "attribute": "filter[discovery_timestamp]", + "location": "query", + }, + "filter_evaluation": { + "openapi_types": (FindingEvaluation,), + "attribute": "filter[evaluation]", + "location": "query", + }, + "filter_status": { + "openapi_types": (FindingStatus,), + "attribute": "filter[status]", + "location": "query", + }, + "filter_vulnerability_type": { + "openapi_types": ([FindingVulnerabilityType],), + "attribute": "filter[vulnerability_type]", + "location": "query", + "collection_format": "multi", + }, + "detailed_findings": { + "openapi_types": (bool,), + "attribute": "detailed_findings", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_historical_jobs_endpoint = _Endpoint( + settings={ + "response_type": (ListHistoricalJobsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/siem-historical-detections/jobs", + "operation_id": "list_historical_jobs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_indicators_of_compromise_endpoint = _Endpoint( + settings={ + "response_type": (IoCExplorerListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/siem/ioc-explorer", + "operation_id": "list_indicators_of_compromise", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "limit": { + "validation": { + "inclusive_maximum": 2147483647, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "offset": { + "validation": { + "inclusive_maximum": 2147483647, + }, + "openapi_types": (int,), + "attribute": "offset", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "sort_column": { + "openapi_types": (str,), + "attribute": "sort[column]", + "location": "query", + }, + "sort_order": { + "openapi_types": (str,), + "attribute": "sort[order]", + "location": "query", + }, + "ocsf": { + "openapi_types": (bool,), + "attribute": "ocsf", + "location": "query", + }, + "worked_by": { + "openapi_types": (str,), + "attribute": "worked_by", + "location": "query", + }, + "triage_state": { + "openapi_types": (IoCTriageState,), + "attribute": "triage_state", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_multiple_rulesets_endpoint = _Endpoint( + settings={ + "response_type": (GetMultipleRulesetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/rulesets", + "operation_id": "list_multiple_rulesets", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (GetMultipleRulesetsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_sample_log_generation_subscriptions_endpoint = _Endpoint( + settings={ + "response_type": (SampleLogGenerationSubscriptionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/sample_log_generation/subscriptions", + "operation_id": "list_sample_log_generation_subscriptions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "status": { + "openapi_types": (SampleLogGenerationSubscriptionsStatusFilter,), + "attribute": "status", + "location": "query", + }, + "start_timestamp": { + "openapi_types": (datetime,), + "attribute": "start_timestamp", + "location": "query", + }, + "end_timestamp": { + "openapi_types": (datetime,), + "attribute": "end_timestamp", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_scanned_assets_metadata_endpoint = _Endpoint( + settings={ + "response_type": (ScannedAssetsMetadata,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/scanned-assets-metadata", + "operation_id": "list_scanned_assets_metadata", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_token": { + "openapi_types": (str,), + "attribute": "page[token]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "filter_asset_type": { + "openapi_types": (CloudAssetType,), + "attribute": "filter[asset.type]", + "location": "query", + }, + "filter_asset_name": { + "openapi_types": (str,), + "attribute": "filter[asset.name]", + "location": "query", + }, + "filter_last_success_origin": { + "openapi_types": (str,), + "attribute": "filter[last_success.origin]", + "location": "query", + }, + "filter_last_success_env": { + "openapi_types": (str,), + "attribute": "filter[last_success.env]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_filters_endpoint = _Endpoint( + settings={ + "response_type": (SecurityFiltersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/security_filters", + "operation_id": "list_security_filters", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_filter_versions_endpoint = _Endpoint( + settings={ + "response_type": (SecurityFilterVersionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/security_filters/versions", + "operation_id": "list_security_filter_versions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_findings_endpoint = _Endpoint( + settings={ + "response_type": (ListSecurityFindingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings", + "operation_id": "list_security_findings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 150, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "sort": { + "openapi_types": (SecurityFindingsSort,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_findings_automation_due_date_rules_endpoint = _Endpoint( + settings={ + "response_type": (DueDateRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/due_date_rules", + "operation_id": "list_security_findings_automation_due_date_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_findings_automation_mute_rules_endpoint = _Endpoint( + settings={ + "response_type": (MuteRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/mute_rules", + "operation_id": "list_security_findings_automation_mute_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_findings_automation_ticket_creation_rules_endpoint = _Endpoint( + settings={ + "response_type": (TicketCreationRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/ticket_creation_rules", + "operation_id": "list_security_findings_automation_ticket_creation_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "validation": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_monitoring_critical_assets_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringCriticalAssetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/critical_assets", + "operation_id": "list_security_monitoring_critical_assets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_monitoring_datasets_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringDatasetsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/datasets", + "operation_id": "list_security_monitoring_datasets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_monitoring_histsignals_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/siem-historical-detections/histsignals", + "operation_id": "list_security_monitoring_histsignals", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_from": { + "openapi_types": (datetime,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (datetime,), + "attribute": "filter[to]", + "location": "query", + }, + "sort": { + "openapi_types": (SecurityMonitoringSignalsSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_monitoring_integration_configs_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringIntegrationConfigsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config", + "operation_id": "list_security_monitoring_integration_configs", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_integration_type": { + "openapi_types": (SecurityMonitoringIntegrationType,), + "attribute": "filter[integration_type]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_monitoring_rules_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringListRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules", + "operation_id": "list_security_monitoring_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "sort": { + "openapi_types": (SecurityMonitoringRuleSort,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_monitoring_signals_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals", + "operation_id": "list_security_monitoring_signals", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_from": { + "openapi_types": (datetime,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (datetime,), + "attribute": "filter[to]", + "location": "query", + }, + "sort": { + "openapi_types": (SecurityMonitoringSignalsSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_security_monitoring_suppressions_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringPaginatedSuppressionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/suppressions", + "operation_id": "list_security_monitoring_suppressions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "sort": { + "openapi_types": (SecurityMonitoringSuppressionSort,), + "attribute": "sort", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_static_analysis_codegen_rulesets_endpoint = _Endpoint( + settings={ + "response_type": (SastRulesetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/codegen/rulesets", + "operation_id": "list_static_analysis_codegen_rulesets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_vulnerabilities_endpoint = _Endpoint( + settings={ + "response_type": (ListVulnerabilitiesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/vulnerabilities", + "operation_id": "list_vulnerabilities", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_token": { + "openapi_types": (str,), + "attribute": "page[token]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "filter_type": { + "openapi_types": (VulnerabilityType,), + "attribute": "filter[type]", + "location": "query", + }, + "filter_cvss_base_score_op": { + "validation": { + "inclusive_maximum": 10, + "inclusive_minimum": 0, + }, + "openapi_types": (float,), + "attribute": "filter[cvss.base.score][`$op`]", + "location": "query", + }, + "filter_cvss_base_severity": { + "openapi_types": (VulnerabilitySeverity,), + "attribute": "filter[cvss.base.severity]", + "location": "query", + }, + "filter_cvss_base_vector": { + "openapi_types": (str,), + "attribute": "filter[cvss.base.vector]", + "location": "query", + }, + "filter_cvss_datadog_score_op": { + "validation": { + "inclusive_maximum": 10, + "inclusive_minimum": 0, + }, + "openapi_types": (float,), + "attribute": "filter[cvss.datadog.score][`$op`]", + "location": "query", + }, + "filter_cvss_datadog_severity": { + "openapi_types": (VulnerabilitySeverity,), + "attribute": "filter[cvss.datadog.severity]", + "location": "query", + }, + "filter_cvss_datadog_vector": { + "openapi_types": (str,), + "attribute": "filter[cvss.datadog.vector]", + "location": "query", + }, + "filter_status": { + "openapi_types": (VulnerabilityStatus,), + "attribute": "filter[status]", + "location": "query", + }, + "filter_tool": { + "openapi_types": (VulnerabilityTool,), + "attribute": "filter[tool]", + "location": "query", + }, + "filter_library_name": { + "openapi_types": (str,), + "attribute": "filter[library.name]", + "location": "query", + }, + "filter_library_version": { + "openapi_types": (str,), + "attribute": "filter[library.version]", + "location": "query", + }, + "filter_advisory_id": { + "openapi_types": (str,), + "attribute": "filter[advisory.id]", + "location": "query", + }, + "filter_risks_exploitation_probability": { + "openapi_types": (bool,), + "attribute": "filter[risks.exploitation_probability]", + "location": "query", + }, + "filter_risks_poc_exploit_available": { + "openapi_types": (bool,), + "attribute": "filter[risks.poc_exploit_available]", + "location": "query", + }, + "filter_risks_exploit_available": { + "openapi_types": (bool,), + "attribute": "filter[risks.exploit_available]", + "location": "query", + }, + "filter_risks_epss_score_op": { + "validation": { + "inclusive_maximum": 1, + "inclusive_minimum": 0, + }, + "openapi_types": (float,), + "attribute": "filter[risks.epss.score][`$op`]", + "location": "query", + }, + "filter_risks_epss_severity": { + "openapi_types": (VulnerabilitySeverity,), + "attribute": "filter[risks.epss.severity]", + "location": "query", + }, + "filter_language": { + "openapi_types": (str,), + "attribute": "filter[language]", + "location": "query", + }, + "filter_ecosystem": { + "openapi_types": (VulnerabilityEcosystem,), + "attribute": "filter[ecosystem]", + "location": "query", + }, + "filter_code_location_location": { + "openapi_types": (str,), + "attribute": "filter[code_location.location]", + "location": "query", + }, + "filter_code_location_file_path": { + "openapi_types": (str,), + "attribute": "filter[code_location.file_path]", + "location": "query", + }, + "filter_code_location_method": { + "openapi_types": (str,), + "attribute": "filter[code_location.method]", + "location": "query", + }, + "filter_fix_available": { + "openapi_types": (bool,), + "attribute": "filter[fix_available]", + "location": "query", + }, + "filter_repo_digests": { + "openapi_types": (str,), + "attribute": "filter[repo_digests]", + "location": "query", + }, + "filter_origin": { + "openapi_types": (str,), + "attribute": "filter[origin]", + "location": "query", + }, + "filter_running_kernel": { + "openapi_types": (bool,), + "attribute": "filter[running_kernel]", + "location": "query", + }, + "filter_asset_name": { + "openapi_types": (str,), + "attribute": "filter[asset.name]", + "location": "query", + }, + "filter_asset_type": { + "openapi_types": (AssetType,), + "attribute": "filter[asset.type]", + "location": "query", + }, + "filter_asset_version_first": { + "openapi_types": (str,), + "attribute": "filter[asset.version.first]", + "location": "query", + }, + "filter_asset_version_last": { + "openapi_types": (str,), + "attribute": "filter[asset.version.last]", + "location": "query", + }, + "filter_asset_repository_url": { + "openapi_types": (str,), + "attribute": "filter[asset.repository_url]", + "location": "query", + }, + "filter_asset_risks_in_production": { + "openapi_types": (bool,), + "attribute": "filter[asset.risks.in_production]", + "location": "query", + }, + "filter_asset_risks_under_attack": { + "openapi_types": (bool,), + "attribute": "filter[asset.risks.under_attack]", + "location": "query", + }, + "filter_asset_risks_is_publicly_accessible": { + "openapi_types": (bool,), + "attribute": "filter[asset.risks.is_publicly_accessible]", + "location": "query", + }, + "filter_asset_risks_has_privileged_access": { + "openapi_types": (bool,), + "attribute": "filter[asset.risks.has_privileged_access]", + "location": "query", + }, + "filter_asset_risks_has_access_to_sensitive_data": { + "openapi_types": (bool,), + "attribute": "filter[asset.risks.has_access_to_sensitive_data]", + "location": "query", + }, + "filter_asset_environments": { + "openapi_types": (str,), + "attribute": "filter[asset.environments]", + "location": "query", + }, + "filter_asset_teams": { + "openapi_types": (str,), + "attribute": "filter[asset.teams]", + "location": "query", + }, + "filter_asset_arch": { + "openapi_types": (str,), + "attribute": "filter[asset.arch]", + "location": "query", + }, + "filter_asset_operating_system_name": { + "openapi_types": (str,), + "attribute": "filter[asset.operating_system.name]", + "location": "query", + }, + "filter_asset_operating_system_version": { + "openapi_types": (str,), + "attribute": "filter[asset.operating_system.version]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_vulnerable_assets_endpoint = _Endpoint( + settings={ + "response_type": (ListVulnerableAssetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/vulnerable-assets", + "operation_id": "list_vulnerable_assets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_token": { + "openapi_types": (str,), + "attribute": "page[token]", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "filter_name": { + "openapi_types": (str,), + "attribute": "filter[name]", + "location": "query", + }, + "filter_type": { + "openapi_types": (AssetType,), + "attribute": "filter[type]", + "location": "query", + }, + "filter_version_first": { + "openapi_types": (str,), + "attribute": "filter[version.first]", + "location": "query", + }, + "filter_version_last": { + "openapi_types": (str,), + "attribute": "filter[version.last]", + "location": "query", + }, + "filter_repository_url": { + "openapi_types": (str,), + "attribute": "filter[repository_url]", + "location": "query", + }, + "filter_risks_in_production": { + "openapi_types": (bool,), + "attribute": "filter[risks.in_production]", + "location": "query", + }, + "filter_risks_under_attack": { + "openapi_types": (bool,), + "attribute": "filter[risks.under_attack]", + "location": "query", + }, + "filter_risks_is_publicly_accessible": { + "openapi_types": (bool,), + "attribute": "filter[risks.is_publicly_accessible]", + "location": "query", + }, + "filter_risks_has_privileged_access": { + "openapi_types": (bool,), + "attribute": "filter[risks.has_privileged_access]", + "location": "query", + }, + "filter_risks_has_access_to_sensitive_data": { + "openapi_types": (bool,), + "attribute": "filter[risks.has_access_to_sensitive_data]", + "location": "query", + }, + "filter_environments": { + "openapi_types": (str,), + "attribute": "filter[environments]", + "location": "query", + }, + "filter_teams": { + "openapi_types": (str,), + "attribute": "filter[teams]", + "location": "query", + }, + "filter_arch": { + "openapi_types": (str,), + "attribute": "filter[arch]", + "location": "query", + }, + "filter_operating_system_name": { + "openapi_types": (str,), + "attribute": "filter[operating_system.name]", + "location": "query", + }, + "filter_operating_system_version": { + "openapi_types": (str,), + "attribute": "filter[operating_system.version]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._mute_security_findings_endpoint = _Endpoint( + settings={ + "response_type": (MuteFindingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/mute", + "operation_id": "mute_security_findings", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MuteFindingsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._patch_signal_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (NotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/signals/notification_rules/{id}", + "operation_id": "patch_signal_notification_rule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PatchNotificationRuleParameters,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._patch_vulnerability_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (NotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/vulnerabilities/notification_rules/{id}", + "operation_id": "patch_vulnerability_notification_rule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PatchNotificationRuleParameters,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._reorder_security_findings_automation_due_date_rules_endpoint = _Endpoint( + settings={ + "response_type": (DueDateRuleReorderRequest,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/due_date_rules/reorder", + "operation_id": "reorder_security_findings_automation_due_date_rules", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DueDateRuleReorderRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._reorder_security_findings_automation_mute_rules_endpoint = _Endpoint( + settings={ + "response_type": (MuteRuleReorderRequest,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/mute_rules/reorder", + "operation_id": "reorder_security_findings_automation_mute_rules", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (MuteRuleReorderRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._reorder_security_findings_automation_ticket_creation_rules_endpoint = _Endpoint( + settings={ + "response_type": (TicketCreationRuleReorderRequest,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/ticket_creation_rules/reorder", + "operation_id": "reorder_security_findings_automation_ticket_creation_rules", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TicketCreationRuleReorderRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._restore_security_monitoring_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/{rule_id}/restore/{version}", + "operation_id": "restore_security_monitoring_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "version": { + "required": True, + "openapi_types": (int,), + "attribute": "version", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._run_historical_job_endpoint = _Endpoint( + settings={ + "response_type": (JobCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/siem-historical-detections/jobs", + "operation_id": "run_historical_job", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (RunHistoricalJobRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_security_findings_endpoint = _Endpoint( + settings={ + "response_type": (ListSecurityFindingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/search", + "operation_id": "search_security_findings", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityFindingsSearchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_security_monitoring_histsignals_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/siem-historical-detections/histsignals/search", + "operation_id": "search_security_monitoring_histsignals", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "openapi_types": (SecurityMonitoringSignalListRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_security_monitoring_signals_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSignalsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/signals/search", + "operation_id": "search_security_monitoring_signals", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "openapi_types": (SecurityMonitoringSignalListRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._send_security_monitoring_notification_preview_endpoint = _Endpoint( + settings={ + "response_type": (NotificationRulePreviewResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/notification_rules/send_notification_preview", + "operation_id": "send_security_monitoring_notification_preview", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateNotificationRuleParameters,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._test_existing_security_monitoring_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringRuleTestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/{rule_id}/test", + "operation_id": "test_existing_security_monitoring_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleTestRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._test_security_monitoring_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringRuleTestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/test", + "operation_id": "test_security_monitoring_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleTestRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_custom_framework_endpoint = _Endpoint( + settings={ + "response_type": (UpdateCustomFrameworkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cloud_security_management/custom_frameworks/{handle}/{version}", + "operation_id": "update_custom_framework", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "handle": { + "required": True, + "openapi_types": (str,), + "attribute": "handle", + "location": "path", + }, + "version": { + "required": True, + "openapi_types": (str,), + "attribute": "version", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateCustomFrameworkRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_findings_assignee_endpoint = _Endpoint( + settings={ + "response_type": (AssigneeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security/findings/assignee", + "operation_id": "update_findings_assignee", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AssigneeRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_resource_evaluation_filters_endpoint = _Endpoint( + settings={ + "response_type": (UpdateResourceEvaluationFiltersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cloud_security_management/resource_filters", + "operation_id": "update_resource_evaluation_filters", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UpdateResourceEvaluationFiltersRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_security_filter_endpoint = _Endpoint( + settings={ + "response_type": (SecurityFilterResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/security_filters/{security_filter_id}", + "operation_id": "update_security_filter", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "security_filter_id": { + "required": True, + "openapi_types": (str,), + "attribute": "security_filter_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityFilterUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_security_findings_automation_due_date_rule_endpoint = _Endpoint( + settings={ + "response_type": (DueDateRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/due_date_rules/{rule_id}", + "operation_id": "update_security_findings_automation_due_date_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (DueDateRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_security_findings_automation_mute_rule_endpoint = _Endpoint( + settings={ + "response_type": (MuteRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/mute_rules/{rule_id}", + "operation_id": "update_security_findings_automation_mute_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (MuteRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_security_findings_automation_ticket_creation_rule_endpoint = _Endpoint( + settings={ + "response_type": (TicketCreationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/security/findings/automation/ticket_creation_rules/{rule_id}", + "operation_id": "update_security_findings_automation_ticket_creation_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TicketCreationRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_security_monitoring_critical_asset_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringCriticalAssetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/critical_assets/{critical_asset_id}", + "operation_id": "update_security_monitoring_critical_asset", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "critical_asset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "critical_asset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringCriticalAssetUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_security_monitoring_dataset_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/datasets/{dataset_id}", + "operation_id": "update_security_monitoring_dataset", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "dataset_id": { + "required": True, + "openapi_types": (str,), + "attribute": "dataset_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringDatasetUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_security_monitoring_integration_config_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringIntegrationConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config/{integration_config_id}", + "operation_id": "update_security_monitoring_integration_config", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "integration_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_config_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringIntegrationConfigUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_security_monitoring_rule_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/{rule_id}", + "operation_id": "update_security_monitoring_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleUpdatePayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_security_monitoring_suppression_endpoint = _Endpoint( + settings={ + "response_type": (SecurityMonitoringSuppressionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}", + "operation_id": "update_security_monitoring_suppression", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "suppression_id": { + "required": True, + "openapi_types": (str,), + "attribute": "suppression_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSuppressionUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_security_monitoring_integration_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config/{integration_config_id}/validate", + "operation_id": "validate_security_monitoring_integration_config", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "integration_config_id": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_config_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._validate_security_monitoring_integration_credentials_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/integration_config/validate", + "operation_id": "validate_security_monitoring_integration_credentials", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringIntegrationCredentialsValidateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_security_monitoring_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/rules/validation", + "operation_id": "validate_security_monitoring_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringRuleValidatePayload,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._validate_security_monitoring_suppression_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/security_monitoring/configuration/suppressions/validation", + "operation_id": "validate_security_monitoring_suppression", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SecurityMonitoringSuppressionCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def activate_content_pack(self, content_pack_id: str, ) -> None: + """Activate content pack. + + Activate a Cloud SIEM content pack. This operation configures the necessary + log filters or security filters depending on the pricing model and updates the content + pack activation state. + + :param content_pack_id: The ID of the content pack to activate (for example, ``aws-cloudtrail`` ). + :type content_pack_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["content_pack_id"] = content_pack_id + + return self._activate_content_pack_endpoint.call_with_http_info(**kwargs) + + def activate_integration(self, integration_type: str, *, body: Union[SecurityMonitoringIntegrationActivateRequest, UnsetType]=unset, ) -> SecurityMonitoringIntegrationConfigResponse: + """Activate an entity context sync integration. + + Activate an entity context sync integration for a source type that does not require manually + supplied credentials (for example, Entra ID). If an integration of this type already exists, + it is returned (re-enabling it first if it was disabled) instead of creating a duplicate. + + :param integration_type: The integration type to activate (for example, ``entra_id`` ). + :type integration_type: str + :param body: Optional configuration overrides for the integration to activate. + :type body: SecurityMonitoringIntegrationActivateRequest, optional + :rtype: SecurityMonitoringIntegrationConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_type"] = integration_type + + if body is not unset: + kwargs["body"] = body + + return self._activate_integration_endpoint.call_with_http_info(**kwargs) + + def attach_case(self, case_id: str, body: AttachCaseRequest, ) -> FindingCaseResponse: + """Attach security findings to a case. + + Attach security findings to a case. + You can attach up to 50 security findings per case. Security findings that are already attached to another case will be detached from their previous case and attached to the specified case. + + :param case_id: Unique identifier of the case to attach security findings to + :type case_id: str + :type body: AttachCaseRequest + :rtype: FindingCaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["case_id"] = case_id + + kwargs["body"] = body + + return self._attach_case_endpoint.call_with_http_info(**kwargs) + + def attach_jira_issue(self, body: AttachJiraIssueRequest, ) -> FindingCaseResponse: + """Attach security findings to a Jira issue. + + Attach security findings to a Jira issue by providing the Jira issue URL. + You can attach up to 50 security findings per Jira issue. If the Jira issue is not linked to any case, this operation will create a case for the security findings and link the Jira issue to the newly created case. To configure the Jira integration, see `Bidirectional ticket syncing with Jira `_. Security findings that are already attached to another Jira issue will be detached from their previous Jira issue and attached to the specified Jira issue. + + :type body: AttachJiraIssueRequest + :rtype: FindingCaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._attach_jira_issue_endpoint.call_with_http_info(**kwargs) + + def attach_linear_issue(self, body: AttachLinearIssueRequest, ) -> FindingCaseResponse: + """Attach security findings to a Linear issue. + + Attach security findings to a Linear issue by providing the Linear issue URL. + You can attach up to 50 security findings per Linear issue. If the Linear issue is not linked to any case, this operation will create a case for the security findings and link the Linear issue to the newly created case. Security findings that are already attached to another Linear issue will be detached from their previous Linear issue and attached to the specified Linear issue. + + :type body: AttachLinearIssueRequest + :rtype: FindingCaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._attach_linear_issue_endpoint.call_with_http_info(**kwargs) + + def attach_service_now_ticket(self, body: AttachServiceNowTicketRequest, ) -> FindingCaseResponse: + """Attach security findings to a ServiceNow ticket. + + Attach security findings to a ServiceNow ticket by providing the ServiceNow ticket URL. + You can attach up to 50 security findings per ServiceNow ticket. If the ServiceNow ticket is not linked to any case, this operation will create a case for the security findings and link the ServiceNow ticket to the newly created case. Security findings that are already attached to another ServiceNow ticket will be detached from their previous ServiceNow ticket and attached to the specified ServiceNow ticket. + + :type body: AttachServiceNowTicketRequest + :rtype: FindingCaseResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._attach_service_now_ticket_endpoint.call_with_http_info(**kwargs) + + def batch_get_security_monitoring_dataset_dependencies(self, body: SecurityMonitoringDatasetDependenciesRequest, ) -> SecurityMonitoringDatasetDependenciesResponse: + """Get dataset dependencies. + + Return, for each of the requested datasets, the list of detection rules that depend + on it. Useful for understanding the impact of updating or deleting a dataset. + + :type body: SecurityMonitoringDatasetDependenciesRequest + :rtype: SecurityMonitoringDatasetDependenciesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._batch_get_security_monitoring_dataset_dependencies_endpoint.call_with_http_info(**kwargs) + + def bulk_convert_existing_security_monitoring_rules(self, body: SecurityMonitoringRuleConvertBulkPayload, ) -> file_type: + """Bulk convert rules to Terraform. + + Convert a list of existing security monitoring rules to Terraform for the Datadog provider + resource ``datadog_security_monitoring_rule``. Returns a ZIP archive containing one Terraform + file per rule. You can convert rules for the following types: + + * App and API Protection + * Cloud SIEM (log detection and signal correlation) + * Workload Protection + + :type body: SecurityMonitoringRuleConvertBulkPayload + :rtype: file_type + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_convert_existing_security_monitoring_rules_endpoint.call_with_http_info(**kwargs) + + def bulk_create_sample_log_generation_subscriptions(self, body: SampleLogGenerationBulkSubscriptionRequest, ) -> SampleLogGenerationBulkSubscriptionResponse: + """Bulk subscribe to sample log generation. + + Subscribe to sample log generation for multiple Cloud SIEM content packs in a single call. + Each requested content pack is processed independently; the response includes a per-item + status so partial successes can be inspected. + + **Availability** : this endpoint is restricted to Cloud SIEM trial organizations on an + eligible pricing model. Non-trial orgs receive ``403 Forbidden`` , the feature flag may also reject + requests with ``400 Bad Request`` , and legacy pricing tiers receive per-item responses with ``status: not_available``. + + :param body: The content packs to subscribe to and the desired duration of the subscriptions. + :type body: SampleLogGenerationBulkSubscriptionRequest + :rtype: SampleLogGenerationBulkSubscriptionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_create_sample_log_generation_subscriptions_endpoint.call_with_http_info(**kwargs) + + def bulk_delete_security_monitoring_rules(self, body: SecurityMonitoringRuleBulkDeletePayload, ) -> SecurityMonitoringRuleBulkDeleteResponse: + """Bulk delete security monitoring rules. + + Delete multiple security monitoring rules in a single request. Default rules cannot be deleted. + + :type body: SecurityMonitoringRuleBulkDeletePayload + :rtype: SecurityMonitoringRuleBulkDeleteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_delete_security_monitoring_rules_endpoint.call_with_http_info(**kwargs) + + def bulk_edit_security_monitoring_signals(self, body: SecurityMonitoringSignalsBulkUpdateRequest, ) -> SecurityMonitoringSignalsBulkTriageUpdateResponse: + """Bulk update security signals. + + Update the triage state or assignee of multiple security signals at once. + The maximum number of signals that can be updated in a single request is 199. + + :param body: Attributes describing the signal updates. + :type body: SecurityMonitoringSignalsBulkUpdateRequest + :rtype: SecurityMonitoringSignalsBulkTriageUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_edit_security_monitoring_signals_endpoint.call_with_http_info(**kwargs) + + def bulk_edit_security_monitoring_signals_assignee(self, body: SecurityMonitoringSignalsBulkAssigneeUpdateRequest, ) -> SecurityMonitoringSignalsBulkTriageUpdateResponse: + """Bulk update triage assignee of security signals. + + Change the triage assignees of multiple security signals at once. + The maximum number of signals that can be updated in a single request is 199. + + :param body: Attributes describing the signal assignee updates. + :type body: SecurityMonitoringSignalsBulkAssigneeUpdateRequest + :rtype: SecurityMonitoringSignalsBulkTriageUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_edit_security_monitoring_signals_assignee_endpoint.call_with_http_info(**kwargs) + + def bulk_edit_security_monitoring_signals_state(self, body: SecurityMonitoringSignalsBulkStateUpdateRequest, ) -> SecurityMonitoringSignalsBulkTriageUpdateResponse: + """Bulk update triage state of security signals. + + Change the triage states of multiple security signals at once. + The maximum number of signals that can be updated in a single request is 199. + + :param body: Attributes describing the signal state updates. + :type body: SecurityMonitoringSignalsBulkStateUpdateRequest + :rtype: SecurityMonitoringSignalsBulkTriageUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_edit_security_monitoring_signals_state_endpoint.call_with_http_info(**kwargs) + + def bulk_export_security_monitoring_rules(self, body: SecurityMonitoringRuleBulkExportPayload, ) -> file_type: + """Bulk export security monitoring rules. + + Export a list of security monitoring rules as a ZIP file containing JSON rule definitions. + The endpoint accepts a list of rule IDs and returns a ZIP archive where each rule is + saved as a separate JSON file named after the rule. + + :type body: SecurityMonitoringRuleBulkExportPayload + :rtype: file_type + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._bulk_export_security_monitoring_rules_endpoint.call_with_http_info(**kwargs) + + def bulk_export_security_monitoring_terraform_resources(self, resource_type: SecurityMonitoringTerraformResourceType, body: SecurityMonitoringTerraformBulkExportRequest, ) -> file_type: + """Export security monitoring resources to Terraform. + + Export multiple security monitoring resources to Terraform, packaged as a zip archive. + The ``resource_type`` path parameter specifies the type of resources to export + and must be one of ``suppressions`` , ``critical_assets`` , ``security_filters`` , or ``rules``. + A maximum of 1000 resources can be exported in a single request. + For ``rules`` , partner rules cannot be exported and return a 400 error. + + :param resource_type: The type of security monitoring resource to export. + :type resource_type: SecurityMonitoringTerraformResourceType + :param body: The resource IDs to export. + :type body: SecurityMonitoringTerraformBulkExportRequest + :rtype: file_type + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_type"] = resource_type + + kwargs["body"] = body + + return self._bulk_export_security_monitoring_terraform_resources_endpoint.call_with_http_info(**kwargs) + + def cancel_historical_job(self, job_id: str, ) -> None: + """Cancel a historical job. + + Cancel a historical job. + + :param job_id: The ID of the job. + :type job_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["job_id"] = job_id + + return self._cancel_historical_job_endpoint.call_with_http_info(**kwargs) + + def convert_existing_security_monitoring_rule(self, rule_id: str, ) -> SecurityMonitoringRuleConvertResponse: + """Convert an existing rule from JSON to Terraform. + + Convert an existing rule from JSON to Terraform for Datadog provider + resource ``datadog_security_monitoring_rule``. You can do so for the following rule types: + + * App and API Protection + * Cloud SIEM (log detection and signal correlation) + * Workload Protection + + You can convert Cloud Security configuration rules using Terraform's `Datadog Cloud Configuration Rule resource `_. + + :param rule_id: The ID of the rule. + :type rule_id: str + :rtype: SecurityMonitoringRuleConvertResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._convert_existing_security_monitoring_rule_endpoint.call_with_http_info(**kwargs) + + def convert_job_result_to_signal(self, body: ConvertJobResultsToSignalsRequest, ) -> None: + """Convert a job result to a signal. + + Convert a job result to a signal. + + :type body: ConvertJobResultsToSignalsRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._convert_job_result_to_signal_endpoint.call_with_http_info(**kwargs) + + def convert_security_monitoring_rule_from_json_to_terraform(self, body: Union[SecurityMonitoringRuleConvertPayload, SecurityMonitoringStandardRulePayload, SecurityMonitoringSignalRulePayload], ) -> SecurityMonitoringRuleConvertResponse: + """Convert a rule from JSON to Terraform. + + Convert a rule that doesn't (yet) exist from JSON to Terraform for Datadog provider + resource ``datadog_security_monitoring_rule``. You can do so for the following rule types: + + * App and API Protection + * Cloud SIEM (log detection and signal correlation) + * Workload Protection + + You can convert Cloud Security configuration rules using Terraform's `Datadog Cloud Configuration Rule resource `_. + + :type body: SecurityMonitoringRuleConvertPayload + :rtype: SecurityMonitoringRuleConvertResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._convert_security_monitoring_rule_from_json_to_terraform_endpoint.call_with_http_info(**kwargs) + + def convert_security_monitoring_terraform_resource(self, resource_type: SecurityMonitoringTerraformResourceType, body: SecurityMonitoringTerraformConvertRequest, ) -> SecurityMonitoringTerraformExportResponse: + """Convert security monitoring resource to Terraform. + + Convert a security monitoring resource that doesn't (yet) exist from JSON to Terraform. + The ``resource_type`` path parameter specifies the type of resource to convert + and must be one of ``suppressions`` , ``critical_assets`` , ``security_filters`` , or ``rules``. + + :param resource_type: The type of security monitoring resource to export. + :type resource_type: SecurityMonitoringTerraformResourceType + :param body: The resource JSON to convert. + :type body: SecurityMonitoringTerraformConvertRequest + :rtype: SecurityMonitoringTerraformExportResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_type"] = resource_type + + kwargs["body"] = body + + return self._convert_security_monitoring_terraform_resource_endpoint.call_with_http_info(**kwargs) + + def create_cases(self, body: CreateCaseRequestArray, ) -> FindingCaseResponseArray: + """Create cases for security findings. + + Create cases for security findings. + You can create up to 50 cases per request and associate up to 50 security findings per case. Security findings that are already attached to another case will be detached from their previous case and attached to the newly created case. + + :type body: CreateCaseRequestArray + :rtype: FindingCaseResponseArray + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_cases_endpoint.call_with_http_info(**kwargs) + + def create_custom_framework(self, body: CreateCustomFrameworkRequest, ) -> CreateCustomFrameworkResponse: + """Create a custom framework. + + Create a custom framework. + + :type body: CreateCustomFrameworkRequest + :rtype: CreateCustomFrameworkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_custom_framework_endpoint.call_with_http_info(**kwargs) + + def create_io_c_triage_state(self, body: IoCTriageWriteRequest, ) -> IoCTriageWriteResponse: + """Create or update an indicator triage state. + + Set the triage state of an indicator of compromise (IoC). This creates or + updates the triage state for the indicator in your organization. + + :param body: The triage state to set for the indicator. + :type body: IoCTriageWriteRequest + :rtype: IoCTriageWriteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_io_c_triage_state_endpoint.call_with_http_info(**kwargs) + + def create_jira_issues(self, body: CreateJiraIssueRequestArray, ) -> FindingCaseResponseArray: + """Create Jira issues for security findings. + + Create Jira issues for security findings. + This operation creates a case in Datadog and a Jira issue linked to that case for bidirectional sync between Datadog and Jira. To configure the Jira integration, see `Bidirectional ticket syncing with Jira `_. You can create up to 50 Jira issues per request and associate up to 50 security findings per Jira issue. Security findings that are already attached to another Jira issue will be detached from their previous Jira issue and attached to the newly created Jira issue. + + :type body: CreateJiraIssueRequestArray + :rtype: FindingCaseResponseArray + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_jira_issues_endpoint.call_with_http_info(**kwargs) + + def create_linear_issues(self, body: CreateLinearIssueRequestArray, ) -> FindingCaseResponseArray: + """Create Linear issues for security findings. + + Create Linear issues for security findings. + This operation creates a case in Datadog and a Linear issue linked to that case for bidirectional sync between Datadog and Linear. You can create up to 50 Linear issues per request and associate up to 50 security findings per Linear issue. Security findings that are already attached to another Linear issue will be detached from their previous Linear issue and attached to the newly created Linear issue. + + :type body: CreateLinearIssueRequestArray + :rtype: FindingCaseResponseArray + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_linear_issues_endpoint.call_with_http_info(**kwargs) + + def create_sample_log_generation_subscription(self, body: SampleLogGenerationSubscriptionCreateRequest, ) -> SampleLogGenerationSubscriptionResponse: + """Subscribe to sample log generation. + + Subscribe to sample log generation for a Cloud SIEM content pack. Sample logs for the + requested content pack are injected into the Logs platform for the duration of the subscription, + so detection rules can be exercised without onboarding the underlying integration first. + + **Availability** : this endpoint is restricted to Cloud SIEM trial organizations on an + eligible pricing model. Non-trial orgs receive ``403 Forbidden`` , the feature flag may also reject + requests with ``400 Bad Request`` , and legacy pricing tiers receive a response with ``status: not_available``. + + :param body: The content pack to subscribe to and the desired duration of the subscription. + :type body: SampleLogGenerationSubscriptionCreateRequest + :rtype: SampleLogGenerationSubscriptionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_sample_log_generation_subscription_endpoint.call_with_http_info(**kwargs) + + def create_security_filter(self, body: SecurityFilterCreateRequest, ) -> SecurityFilterResponse: + """Create a security filter. + + Create a security filter. + + See the `security filter guide `_ + for more examples. + + :param body: The definition of the new security filter. + :type body: SecurityFilterCreateRequest + :rtype: SecurityFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_security_filter_endpoint.call_with_http_info(**kwargs) + + def create_security_findings_automation_due_date_rule(self, body: DueDateRuleCreateRequest, ) -> DueDateRuleResponse: + """Create a due date rule. + + Create a new due date rule for the current organization. + + :type body: DueDateRuleCreateRequest + :rtype: DueDateRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_security_findings_automation_due_date_rule_endpoint.call_with_http_info(**kwargs) + + def create_security_findings_automation_mute_rule(self, body: MuteRuleCreateRequest, ) -> MuteRuleResponse: + """Create a mute rule. + + Create a new mute rule for the current organization. + + :type body: MuteRuleCreateRequest + :rtype: MuteRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_security_findings_automation_mute_rule_endpoint.call_with_http_info(**kwargs) + + def create_security_findings_automation_ticket_creation_rule(self, body: TicketCreationRuleCreateRequest, ) -> TicketCreationRuleResponse: + """Create a ticket creation rule. + + Create a new ticket creation rule for the current organization. + + :type body: TicketCreationRuleCreateRequest + :rtype: TicketCreationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_security_findings_automation_ticket_creation_rule_endpoint.call_with_http_info(**kwargs) + + def create_security_monitoring_critical_asset(self, body: SecurityMonitoringCriticalAssetCreateRequest, ) -> SecurityMonitoringCriticalAssetResponse: + """Create a critical asset. + + Create a new critical asset. + + :param body: The definition of the new critical asset. + :type body: SecurityMonitoringCriticalAssetCreateRequest + :rtype: SecurityMonitoringCriticalAssetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_security_monitoring_critical_asset_endpoint.call_with_http_info(**kwargs) + + def create_security_monitoring_dataset(self, body: SecurityMonitoringDatasetCreateRequest, ) -> SecurityMonitoringDatasetCreateResponse: + """Create a dataset. + + Create a new Cloud SIEM dataset. A dataset bundles a data source, a set of + indexes, and a search query that can be referenced from detection rules. + + :type body: SecurityMonitoringDatasetCreateRequest + :rtype: SecurityMonitoringDatasetCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_security_monitoring_dataset_endpoint.call_with_http_info(**kwargs) + + def create_security_monitoring_integration_config(self, body: SecurityMonitoringIntegrationConfigCreateRequest, ) -> SecurityMonitoringIntegrationConfigResponse: + """Create an entity context sync configuration. + + Create a new entity context sync configuration so Cloud SIEM can ingest entities from an external + source. The credentials provided in ``secrets`` are validated against the source before the configuration + is stored and never returned in subsequent responses. + + :param body: The definition of the new integration configuration. + :type body: SecurityMonitoringIntegrationConfigCreateRequest + :rtype: SecurityMonitoringIntegrationConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_security_monitoring_integration_config_endpoint.call_with_http_info(**kwargs) + + def create_security_monitoring_rule(self, body: Union[SecurityMonitoringRuleCreatePayload, SecurityMonitoringStandardRuleCreatePayload, SecurityMonitoringSignalRuleCreatePayload, CloudConfigurationRuleCreatePayload], ) -> SecurityMonitoringRuleResponse: + """Create a detection rule. + + Create a detection rule. + + :type body: SecurityMonitoringRuleCreatePayload + :rtype: SecurityMonitoringRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_security_monitoring_rule_endpoint.call_with_http_info(**kwargs) + + def create_security_monitoring_suppression(self, body: SecurityMonitoringSuppressionCreateRequest, ) -> SecurityMonitoringSuppressionResponse: + """Create a suppression rule. + + Create a new suppression rule. + + :param body: The definition of the new suppression rule. + :type body: SecurityMonitoringSuppressionCreateRequest + :rtype: SecurityMonitoringSuppressionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_security_monitoring_suppression_endpoint.call_with_http_info(**kwargs) + + def create_service_now_tickets(self, body: CreateServiceNowTicketRequestArray, ) -> FindingCaseResponseArray: + """Create ServiceNow tickets for security findings. + + Create ServiceNow tickets for security findings. + This operation creates a case in Datadog and a ServiceNow ticket linked to that case for bidirectional sync between Datadog and ServiceNow. You can create up to 50 ServiceNow tickets per request and associate up to 50 security findings per ServiceNow ticket. Security findings that are already attached to another ServiceNow ticket will be detached from their previous ServiceNow ticket and attached to the newly created ServiceNow ticket. + + :type body: CreateServiceNowTicketRequestArray + :rtype: FindingCaseResponseArray + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_service_now_tickets_endpoint.call_with_http_info(**kwargs) + + def create_signal_notification_rule(self, body: CreateNotificationRuleParameters, ) -> NotificationRuleResponse: + """Create a new signal-based notification rule. + + Create a new notification rule for security signals and return the created rule. + + :param body: The body of the create notification rule request is composed of the rule type and the rule attributes: + the rule name, the selectors, the notification targets, and the rule enabled status. + :type body: CreateNotificationRuleParameters + :rtype: NotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_signal_notification_rule_endpoint.call_with_http_info(**kwargs) + + def create_static_analysis_ast(self, body: GetAstRequest, ) -> GetAstResponse: + """Get AST for source code. + + Parse source code into an abstract syntax tree (AST) for the specified language. + + :type body: GetAstRequest + :rtype: GetAstResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_static_analysis_ast_endpoint.call_with_http_info(**kwargs) + + def create_static_analysis_server_analysis(self, body: AnalysisRequest, ) -> AnalysisResponse: + """Analyze code. + + Run static analysis rules against a source code file and return violations found. + + :type body: AnalysisRequest + :rtype: AnalysisResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_static_analysis_server_analysis_endpoint.call_with_http_info(**kwargs) + + def create_vulnerability_notification_rule(self, body: CreateNotificationRuleParameters, ) -> NotificationRuleResponse: + """Create a new vulnerability-based notification rule. + + Create a new notification rule for security vulnerabilities and return the created rule. + + :param body: The body of the create notification rule request is composed of the rule type and the rule attributes: + the rule name, the selectors, the notification targets, and the rule enabled status. + :type body: CreateNotificationRuleParameters + :rtype: NotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_vulnerability_notification_rule_endpoint.call_with_http_info(**kwargs) + + def deactivate_content_pack(self, content_pack_id: str, ) -> None: + """Deactivate content pack. + + Deactivate a Cloud SIEM content pack. This operation removes the content pack's + configuration from log filters or security filters and updates the content pack activation state. + + :param content_pack_id: The ID of the content pack to deactivate (for example, ``aws-cloudtrail`` ). + :type content_pack_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["content_pack_id"] = content_pack_id + + return self._deactivate_content_pack_endpoint.call_with_http_info(**kwargs) + + def deactivate_integration(self, integration_type: str, ) -> SecurityMonitoringIntegrationConfigResponse: + """Deactivate an entity context sync integration. + + Deactivate all active entity context sync integrations of the given source type (for example, Entra ID). + + :param integration_type: The integration type to deactivate (for example, ``entra_id`` ). + :type integration_type: str + :rtype: SecurityMonitoringIntegrationConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_type"] = integration_type + + return self._deactivate_integration_endpoint.call_with_http_info(**kwargs) + + def delete_custom_framework(self, handle: str, version: str, ) -> DeleteCustomFrameworkResponse: + """Delete a custom framework. + + Delete a custom framework. + + :param handle: The framework handle + :type handle: str + :param version: The framework version + :type version: str + :rtype: DeleteCustomFrameworkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["handle"] = handle + + kwargs["version"] = version + + return self._delete_custom_framework_endpoint.call_with_http_info(**kwargs) + + def delete_historical_job(self, job_id: str, ) -> None: + """Delete an existing job. + + Delete an existing job. + + :param job_id: The ID of the job. + :type job_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["job_id"] = job_id + + return self._delete_historical_job_endpoint.call_with_http_info(**kwargs) + + def delete_sample_log_generation_subscription(self, content_pack_id: str, ) -> SampleLogGenerationSubscriptionResponse: + """Unsubscribe from sample log generation. + + Unsubscribe from sample log generation for a Cloud SIEM content pack. + After unsubscribing, no more sample logs are generated for the requested content pack. + + **Availability** : this endpoint is restricted to Cloud SIEM trial organizations on an + eligible pricing model. Non-trial orgs receive ``403 Forbidden`` , the feature flag may also reject + requests with ``400 Bad Request`` , and legacy pricing tiers receive a response with ``status: not_available``. + + :param content_pack_id: The identifier of the Cloud SIEM content pack to operate on (for example, ``aws-cloudtrail`` ). + :type content_pack_id: str + :rtype: SampleLogGenerationSubscriptionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["content_pack_id"] = content_pack_id + + return self._delete_sample_log_generation_subscription_endpoint.call_with_http_info(**kwargs) + + def delete_security_filter(self, security_filter_id: str, ) -> None: + """Delete a security filter. + + Delete a specific security filter. + + :param security_filter_id: The ID of the security filter. + :type security_filter_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["security_filter_id"] = security_filter_id + + return self._delete_security_filter_endpoint.call_with_http_info(**kwargs) + + def delete_security_findings_automation_due_date_rule(self, rule_id: UUID, ) -> None: + """Delete a due date rule. + + Delete an existing due date rule by ID. + + :param rule_id: The ID of the due date rule. + :type rule_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._delete_security_findings_automation_due_date_rule_endpoint.call_with_http_info(**kwargs) + + def delete_security_findings_automation_mute_rule(self, rule_id: UUID, ) -> None: + """Delete a mute rule. + + Delete an existing mute rule by ID. + + :param rule_id: The ID of the mute rule. + :type rule_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._delete_security_findings_automation_mute_rule_endpoint.call_with_http_info(**kwargs) + + def delete_security_findings_automation_ticket_creation_rule(self, rule_id: UUID, ) -> None: + """Delete a ticket creation rule. + + Delete an existing ticket creation rule by ID. + + :param rule_id: The ID of the ticket creation rule. + :type rule_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._delete_security_findings_automation_ticket_creation_rule_endpoint.call_with_http_info(**kwargs) + + def delete_security_monitoring_critical_asset(self, critical_asset_id: str, ) -> None: + """Delete a critical asset. + + Delete a specific critical asset. + + :param critical_asset_id: The ID of the critical asset. + :type critical_asset_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["critical_asset_id"] = critical_asset_id + + return self._delete_security_monitoring_critical_asset_endpoint.call_with_http_info(**kwargs) + + def delete_security_monitoring_dataset(self, dataset_id: str, ) -> None: + """Delete a dataset. + + Delete a Cloud SIEM dataset. Out-of-the-box datasets cannot be deleted and + deleting a dataset that is referenced by a detection rule is rejected. + + :param dataset_id: The UUID of the dataset. + :type dataset_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["dataset_id"] = dataset_id + + return self._delete_security_monitoring_dataset_endpoint.call_with_http_info(**kwargs) + + def delete_security_monitoring_integration_config(self, integration_config_id: str, ) -> None: + """Delete an entity context sync configuration. + + Delete an entity context sync configuration. Cloud SIEM stops ingesting entities from this source, + and the credentials stored for the configuration are removed from the secrets store. + + :param integration_config_id: The ID of the entity context sync configuration. + :type integration_config_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_config_id"] = integration_config_id + + return self._delete_security_monitoring_integration_config_endpoint.call_with_http_info(**kwargs) + + def delete_security_monitoring_rule(self, rule_id: str, ) -> None: + """Delete an existing rule. + + Delete an existing rule. Default rules cannot be deleted. + + :param rule_id: The ID of the rule. + :type rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._delete_security_monitoring_rule_endpoint.call_with_http_info(**kwargs) + + def delete_security_monitoring_suppression(self, suppression_id: str, ) -> None: + """Delete a suppression rule. + + Delete a specific suppression rule. + + :param suppression_id: The ID of the suppression rule + :type suppression_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["suppression_id"] = suppression_id + + return self._delete_security_monitoring_suppression_endpoint.call_with_http_info(**kwargs) + + def delete_signal_notification_rule(self, id: str, ) -> None: + """Delete a signal-based notification rule. + + Delete a notification rule for security signals. + + :param id: ID of the notification rule. + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._delete_signal_notification_rule_endpoint.call_with_http_info(**kwargs) + + def delete_vulnerability_notification_rule(self, id: str, ) -> None: + """Delete a vulnerability-based notification rule. + + Delete a notification rule for security vulnerabilities. + + :param id: ID of the notification rule. + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._delete_vulnerability_notification_rule_endpoint.call_with_http_info(**kwargs) + + def detach_case(self, body: DetachCaseRequest, ) -> None: + """Detach security findings from their case. + + Detach security findings from their case. + This operation dissociates security findings from their associated cases without deleting the cases themselves. You can detach security findings from multiple different cases in a single request, with a limit of 50 security findings per request. Security findings that are not currently attached to any case will be ignored. + + :type body: DetachCaseRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._detach_case_endpoint.call_with_http_info(**kwargs) + + def edit_security_monitoring_signal(self, signal_id: str, body: SecurityMonitoringSignalUpdateRequest, ) -> SecurityMonitoringSignalTriageUpdateResponse: + """Update security signal triage state or assignee. + + Update the triage state or assignee of a security signal. + + :param signal_id: The ID of the signal. + :type signal_id: str + :param body: Attributes describing the signal triage state or assignee update. + :type body: SecurityMonitoringSignalUpdateRequest + :rtype: SecurityMonitoringSignalTriageUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + kwargs["body"] = body + + return self._edit_security_monitoring_signal_endpoint.call_with_http_info(**kwargs) + + def edit_security_monitoring_signal_assignee(self, signal_id: str, body: SecurityMonitoringSignalAssigneeUpdateRequest, ) -> SecurityMonitoringSignalTriageUpdateResponse: + """Modify the triage assignee of a security signal. + + Modify the triage assignee of a security signal. + + :param signal_id: The ID of the signal. + :type signal_id: str + :param body: Attributes describing the signal update. + :type body: SecurityMonitoringSignalAssigneeUpdateRequest + :rtype: SecurityMonitoringSignalTriageUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + kwargs["body"] = body + + return self._edit_security_monitoring_signal_assignee_endpoint.call_with_http_info(**kwargs) + + def edit_security_monitoring_signal_incidents(self, signal_id: str, body: SecurityMonitoringSignalIncidentsUpdateRequest, ) -> SecurityMonitoringSignalTriageUpdateResponse: + """Change the related incidents of a security signal. + + Change the related incidents for a security signal. + + :param signal_id: The ID of the signal. + :type signal_id: str + :param body: Attributes describing the signal update. + :type body: SecurityMonitoringSignalIncidentsUpdateRequest + :rtype: SecurityMonitoringSignalTriageUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + kwargs["body"] = body + + return self._edit_security_monitoring_signal_incidents_endpoint.call_with_http_info(**kwargs) + + def edit_security_monitoring_signal_state(self, signal_id: str, body: SecurityMonitoringSignalStateUpdateRequest, ) -> SecurityMonitoringSignalTriageUpdateResponse: + """Change the triage state of a security signal. + + Change the triage state of a security signal. + + :param signal_id: The ID of the signal. + :type signal_id: str + :param body: Attributes describing the signal update. + :type body: SecurityMonitoringSignalStateUpdateRequest + :rtype: SecurityMonitoringSignalTriageUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + kwargs["body"] = body + + return self._edit_security_monitoring_signal_state_endpoint.call_with_http_info(**kwargs) + + def export_security_monitoring_terraform_resource(self, resource_type: SecurityMonitoringTerraformResourceType, resource_id: str, ) -> SecurityMonitoringTerraformExportResponse: + """Export security monitoring resource to Terraform. + + Export a security monitoring resource to a Terraform configuration. + The ``resource_type`` path parameter specifies the type of resource to export + and must be one of ``suppressions`` , ``critical_assets`` , ``security_filters`` , or ``rules``. + For ``rules`` , partner rules cannot be exported and return a 400 error. + + :param resource_type: The type of security monitoring resource to export. + :type resource_type: SecurityMonitoringTerraformResourceType + :param resource_id: The ID of the security monitoring resource to export. + :type resource_id: str + :rtype: SecurityMonitoringTerraformExportResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["resource_type"] = resource_type + + kwargs["resource_id"] = resource_id + + return self._export_security_monitoring_terraform_resource_endpoint.call_with_http_info(**kwargs) + + def get_content_packs_states(self, ) -> SecurityMonitoringContentPackStatesResponse: + """Get content pack states. + + Get the activation state, integration status, and log collection status + for all Cloud SIEM content packs. + + :rtype: SecurityMonitoringContentPackStatesResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_content_packs_states_endpoint.call_with_http_info(**kwargs) + + def get_critical_assets_affecting_rule(self, rule_id: str, ) -> SecurityMonitoringCriticalAssetsResponse: + """Get critical assets affecting a specific rule. + + Get the list of critical assets that affect a specific existing rule by the rule's ID. + + :param rule_id: The ID of the rule. + :type rule_id: str + :rtype: SecurityMonitoringCriticalAssetsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._get_critical_assets_affecting_rule_endpoint.call_with_http_info(**kwargs) + + def get_custom_framework(self, handle: str, version: str, ) -> GetCustomFrameworkResponse: + """Get a custom framework. + + Get a custom framework. + + :param handle: The framework handle + :type handle: str + :param version: The framework version + :type version: str + :rtype: GetCustomFrameworkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["handle"] = handle + + kwargs["version"] = version + + return self._get_custom_framework_endpoint.call_with_http_info(**kwargs) + + def get_entity_context(self, *, query: Union[str, UnsetType]=unset, _from: Union[str, UnsetType]=unset, to: Union[str, UnsetType]=unset, as_of: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, page_token: Union[str, UnsetType]=unset, ) -> EntityContextResponse: + """Get entity context. + + Search the Cloud SIEM entity context store for entities that match a query, and return the historical + revisions of each entity in the requested time range. The endpoint can either return revisions across an + interval ( ``from`` / ``to`` ) or the snapshot of each entity at a single point in time ( ``as_of`` ); the two modes + are mutually exclusive. + + :param query: A free-text query (for example, an email address or principal ID) used to filter the entities returned. + :type query: str, optional + :param _from: The start of the time range to query, as an RFC3339 timestamp or a relative time (for example, ``now-7d`` ). + Defaults to ``now-7d``. Ignored when ``as_of`` is set. + :type _from: str, optional + :param to: The end of the time range to query, as an RFC3339 timestamp or a relative time (for example, ``now`` ). + Defaults to ``now``. Ignored when ``as_of`` is set. + :type to: str, optional + :param as_of: A point in time at which to query the entity revisions, as an RFC3339 timestamp, a Unix timestamp + (in seconds), or a relative time (for example, ``now-1d`` ). When set, ``from`` and ``to`` are ignored. + Cannot be combined with custom ``from`` / ``to`` values. + :type as_of: str, optional + :param limit: The maximum number of entities to return. + :type limit: int, optional + :param page_token: An opaque token used to fetch the next page of results, as returned in ``meta.page.next_token`` of a previous response. + :type page_token: str, optional + :rtype: EntityContextResponse + """ + kwargs: Dict[str, Any] = {} + if query is not unset: + kwargs["query"] = query + + if _from is not unset: + kwargs["_from"] = _from + + if to is not unset: + kwargs["to"] = to + + if as_of is not unset: + kwargs["as_of"] = as_of + + if limit is not unset: + kwargs["limit"] = limit + + if page_token is not unset: + kwargs["page_token"] = page_token + + return self._get_entity_context_endpoint.call_with_http_info(**kwargs) + + def get_entra_id_azure_app_registrations(self, ) -> SecurityMonitoringEntraIdAzureAppRegistrationsResponse: + """Get Entra ID Azure App Registration prerequisites. + + Get the Azure App Registrations discovered for the organization and whether at least one of them has + resource collection enabled, which is a prerequisite for activating the Entra ID entity context sync integration. + + :rtype: SecurityMonitoringEntraIdAzureAppRegistrationsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_entra_id_azure_app_registrations_endpoint.call_with_http_info(**kwargs) + + def get_finding(self, finding_id: str, *, snapshot_timestamp: Union[int, UnsetType]=unset, ) -> GetFindingResponse: + """Get a finding. + + Returns a single finding with message and resource configuration. + + :param finding_id: The ID of the finding. + :type finding_id: str + :param snapshot_timestamp: Return the finding for a given snapshot of time (Unix ms). + :type snapshot_timestamp: int, optional + :rtype: GetFindingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["finding_id"] = finding_id + + if snapshot_timestamp is not unset: + kwargs["snapshot_timestamp"] = snapshot_timestamp + + return self._get_finding_endpoint.call_with_http_info(**kwargs) + + def get_historical_job(self, job_id: str, ) -> HistoricalJobResponse: + """Get a job's details. + + Get a job's details. + + :param job_id: The ID of the job. + :type job_id: str + :rtype: HistoricalJobResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["job_id"] = job_id + + return self._get_historical_job_endpoint.call_with_http_info(**kwargs) + + def get_indicator_of_compromise(self, indicator: str, *, ocsf: Union[bool, UnsetType]=unset, include_triage_history: Union[bool, UnsetType]=unset, triage_history_limit: Union[int, UnsetType]=unset, triage_history_offset: Union[int, UnsetType]=unset, ) -> GetIoCIndicatorResponse: + """Get an indicator of compromise. + + Get detailed information about a specific indicator of compromise (IoC). + + :param indicator: The indicator value to look up (for example, an IP address or domain). + :type indicator: str + :param ocsf: When true, return only OCSF field-based matches. When false, return regex/message-based matches. + :type ocsf: bool, optional + :param include_triage_history: Include full triage history for the indicator. + :type include_triage_history: bool, optional + :param triage_history_limit: Maximum number of triage history events returned. Only applied when ``include_triage_history`` is true. + :type triage_history_limit: int, optional + :param triage_history_offset: Pagination offset into the triage history. Only applied when ``include_triage_history`` is true. + :type triage_history_offset: int, optional + :rtype: GetIoCIndicatorResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["indicator"] = indicator + + if ocsf is not unset: + kwargs["ocsf"] = ocsf + + if include_triage_history is not unset: + kwargs["include_triage_history"] = include_triage_history + + if triage_history_limit is not unset: + kwargs["triage_history_limit"] = triage_history_limit + + if triage_history_offset is not unset: + kwargs["triage_history_offset"] = triage_history_offset + + return self._get_indicator_of_compromise_endpoint.call_with_http_info(**kwargs) + + def get_investigation_log_queries_matching_signal(self, signal_id: str, ) -> SecurityMonitoringSignalSuggestedActionsResponse: + """Get investigation queries for a signal. + + Get the list of investigation log queries available for a given security signal. + + :param signal_id: The ID of the signal. + :type signal_id: str + :rtype: SecurityMonitoringSignalSuggestedActionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + return self._get_investigation_log_queries_matching_signal_endpoint.call_with_http_info(**kwargs) + + def get_resource_evaluation_filters(self, *, cloud_provider: Union[str, UnsetType]=unset, account_id: Union[str, UnsetType]=unset, skip_cache: Union[bool, UnsetType]=unset, ) -> GetResourceEvaluationFiltersResponse: + """List resource filters. + + List resource filters. + + :param cloud_provider: Filter resource filters by cloud provider (e.g. aws, gcp, azure). + :type cloud_provider: str, optional + :param account_id: Filter resource filters by cloud provider account ID. This parameter is only valid when provider is specified. + :type account_id: str, optional + :param skip_cache: Skip cache for resource filters. + :type skip_cache: bool, optional + :rtype: GetResourceEvaluationFiltersResponse + """ + kwargs: Dict[str, Any] = {} + if cloud_provider is not unset: + kwargs["cloud_provider"] = cloud_provider + + if account_id is not unset: + kwargs["account_id"] = account_id + + if skip_cache is not unset: + kwargs["skip_cache"] = skip_cache + + return self._get_resource_evaluation_filters_endpoint.call_with_http_info(**kwargs) + + def get_rule_version_history(self, rule_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> GetRuleVersionHistoryResponse: + """Get a rule's version history. + + Get a rule's version history. + + :param rule_id: The ID of the rule. + :type rule_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :rtype: GetRuleVersionHistoryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._get_rule_version_history_endpoint.call_with_http_info(**kwargs) + + def get_sbom(self, asset_type: AssetType, filter_asset_name: str, *, filter_repo_digest: Union[str, UnsetType]=unset, ext_format: Union[SBOMFormat, UnsetType]=unset, ) -> GetSBOMResponse: + """Get SBOM. + + Get a single SBOM related to an asset by its type and name. + + :param asset_type: The type of the asset for the SBOM request. + :type asset_type: AssetType + :param filter_asset_name: The name of the asset for the SBOM request. + :type filter_asset_name: str + :param filter_repo_digest: The container image ``repo_digest`` for the SBOM request. When the requested asset type is 'Image', this filter is mandatory. + :type filter_repo_digest: str, optional + :param ext_format: The standard of the SBOM. + :type ext_format: SBOMFormat, optional + :rtype: GetSBOMResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["asset_type"] = asset_type + + kwargs["filter_asset_name"] = filter_asset_name + + if filter_repo_digest is not unset: + kwargs["filter_repo_digest"] = filter_repo_digest + + if ext_format is not unset: + kwargs["ext_format"] = ext_format + + return self._get_sbom_endpoint.call_with_http_info(**kwargs) + + def get_secrets_rules(self, ) -> SecretRuleArray: + """Returns a list of Secrets rules. + + Returns a list of Secrets rules with ID, Pattern, Description, Priority, and SDS ID. + + :rtype: SecretRuleArray + """ + kwargs: Dict[str, Any] = {} + return self._get_secrets_rules_endpoint.call_with_http_info(**kwargs) + + def get_security_filter(self, security_filter_id: str, ) -> SecurityFilterResponse: + """Get a security filter. + + Get the details of a specific security filter. + + See the `security filter guide `_ + for more examples. + + :param security_filter_id: The ID of the security filter. + :type security_filter_id: str + :rtype: SecurityFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["security_filter_id"] = security_filter_id + + return self._get_security_filter_endpoint.call_with_http_info(**kwargs) + + def get_security_findings_automation_due_date_rule(self, rule_id: UUID, ) -> DueDateRuleResponse: + """Get a due date rule. + + Get the details of a due date rule by ID. + + :param rule_id: The ID of the due date rule. + :type rule_id: UUID + :rtype: DueDateRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._get_security_findings_automation_due_date_rule_endpoint.call_with_http_info(**kwargs) + + def get_security_findings_automation_mute_rule(self, rule_id: UUID, ) -> MuteRuleResponse: + """Get a mute rule. + + Get the details of a mute rule by ID. + + :param rule_id: The ID of the mute rule. + :type rule_id: UUID + :rtype: MuteRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._get_security_findings_automation_mute_rule_endpoint.call_with_http_info(**kwargs) + + def get_security_findings_automation_ticket_creation_rule(self, rule_id: UUID, ) -> TicketCreationRuleResponse: + """Get a ticket creation rule. + + Get the details of a ticket creation rule by ID. + + :param rule_id: The ID of the ticket creation rule. + :type rule_id: UUID + :rtype: TicketCreationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._get_security_findings_automation_ticket_creation_rule_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_critical_asset(self, critical_asset_id: str, ) -> SecurityMonitoringCriticalAssetResponse: + """Get a critical asset. + + Get the details of a specific critical asset. + + :param critical_asset_id: The ID of the critical asset. + :type critical_asset_id: str + :rtype: SecurityMonitoringCriticalAssetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["critical_asset_id"] = critical_asset_id + + return self._get_security_monitoring_critical_asset_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_dataset(self, dataset_id: str, ) -> SecurityMonitoringDatasetResponse: + """Get a dataset. + + Get the current version of a Cloud SIEM dataset by ID. + + :param dataset_id: The UUID of the dataset. + :type dataset_id: str + :rtype: SecurityMonitoringDatasetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dataset_id"] = dataset_id + + return self._get_security_monitoring_dataset_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_dataset_by_version(self, dataset_id: str, version: int, ) -> SecurityMonitoringDatasetResponse: + """Get a dataset at a specific version. + + Retrieve a specific historical version of a Cloud SIEM dataset. + + :param dataset_id: The UUID of the dataset. + :type dataset_id: str + :param version: The version number of the dataset to retrieve. + :type version: int + :rtype: SecurityMonitoringDatasetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dataset_id"] = dataset_id + + kwargs["version"] = version + + return self._get_security_monitoring_dataset_by_version_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_dataset_version_history(self, dataset_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> SecurityMonitoringDatasetVersionHistoryResponse: + """Get the version history of a dataset. + + Retrieve the version history of a Cloud SIEM dataset, including the changes made at each version. + + :param dataset_id: The UUID of the dataset. + :type dataset_id: str + :param page_size: Size for a given page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :rtype: SecurityMonitoringDatasetVersionHistoryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["dataset_id"] = dataset_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._get_security_monitoring_dataset_version_history_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_histsignal(self, histsignal_id: str, ) -> SecurityMonitoringSignalResponse: + """Get a hist signal's details. + + Get a hist signal's details. + + :param histsignal_id: The ID of the historical signal. + :type histsignal_id: str + :rtype: SecurityMonitoringSignalResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["histsignal_id"] = histsignal_id + + return self._get_security_monitoring_histsignal_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_histsignals_by_job_id(self, job_id: str, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[SecurityMonitoringSignalsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> SecurityMonitoringSignalsListResponse: + """Get a job's hist signals. + + Get a job's hist signals. + + :param job_id: The ID of the job. + :type job_id: str + :param filter_query: The search query for security signals. + :type filter_query: str, optional + :param filter_from: The minimum timestamp for requested security signals. + :type filter_from: datetime, optional + :param filter_to: The maximum timestamp for requested security signals. + :type filter_to: datetime, optional + :param sort: The order of the security signals in results. + :type sort: SecurityMonitoringSignalsSort, optional + :param page_cursor: A list of results using the cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: The maximum number of security signals in the response. + :type page_limit: int, optional + :rtype: SecurityMonitoringSignalsListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["job_id"] = job_id + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._get_security_monitoring_histsignals_by_job_id_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_integration_config(self, integration_config_id: str, ) -> SecurityMonitoringIntegrationConfigResponse: + """Get an entity context sync configuration. + + Get the details of a specific entity context sync configuration. + + :param integration_config_id: The ID of the entity context sync configuration. + :type integration_config_id: str + :rtype: SecurityMonitoringIntegrationConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_config_id"] = integration_config_id + + return self._get_security_monitoring_integration_config_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_rule(self, rule_id: str, ) -> SecurityMonitoringRuleResponse: + """Get a rule's details. + + Get a rule's details. + + :param rule_id: The ID of the rule. + :type rule_id: str + :rtype: SecurityMonitoringRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._get_security_monitoring_rule_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_signal(self, signal_id: str, ) -> SecurityMonitoringSignalResponse: + """Get a signal's details. + + Get a signal's details. + + :param signal_id: The ID of the signal. + :type signal_id: str + :rtype: SecurityMonitoringSignalResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + return self._get_security_monitoring_signal_endpoint.call_with_http_info(**kwargs) + + def get_security_monitoring_suppression(self, suppression_id: str, ) -> SecurityMonitoringSuppressionResponse: + """Get a suppression rule. + + Get the details of a specific suppression rule. + + :param suppression_id: The ID of the suppression rule + :type suppression_id: str + :rtype: SecurityMonitoringSuppressionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["suppression_id"] = suppression_id + + return self._get_security_monitoring_suppression_endpoint.call_with_http_info(**kwargs) + + def get_signal_entities(self, signal_id: str, *, limit: Union[int, UnsetType]=unset, ) -> SignalEntitiesResponse: + """Get entities related to a signal. + + Get the list of entities related to a security signal, captured at the signal's timestamp. + + :param signal_id: The ID of the signal. + :type signal_id: str + :param limit: The maximum number of entities to return. + :type limit: int, optional + :rtype: SignalEntitiesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + if limit is not unset: + kwargs["limit"] = limit + + return self._get_signal_entities_endpoint.call_with_http_info(**kwargs) + + def get_signal_notification_rule(self, id: str, ) -> NotificationRuleResponse: + """Get details of a signal-based notification rule. + + Get the details of a notification rule for security signals. + + :param id: ID of the notification rule. + :type id: str + :rtype: NotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_signal_notification_rule_endpoint.call_with_http_info(**kwargs) + + def get_signal_notification_rules(self, ) -> NotificationRulesListResponse: + """Get the list of signal-based notification rules. + + Returns the list of notification rules for security signals. + + :rtype: NotificationRulesListResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_signal_notification_rules_endpoint.call_with_http_info(**kwargs) + + def get_single_entity_context(self, id: str, *, _from: Union[str, UnsetType]=unset, to: Union[str, UnsetType]=unset, as_of: Union[str, UnsetType]=unset, ) -> SingleEntityContextResponse: + """Get a single entity context. + + Get a single entity from the Cloud SIEM entity context store by its identifier, returning the historical + revisions of the entity in the requested time range. The endpoint can either return revisions across an + interval ( ``from`` / ``to`` ) or the snapshot of the entity at a single point in time ( ``as_of`` ); the two modes + are mutually exclusive. + + :param id: The unique identifier of the entity to retrieve. + :type id: str + :param _from: The start of the time range to query, as an RFC3339 timestamp or a relative time (for example, ``now-7d`` ). + Defaults to ``now-7d``. Ignored when ``as_of`` is set. + :type _from: str, optional + :param to: The end of the time range to query, as an RFC3339 timestamp or a relative time (for example, ``now`` ). + Defaults to ``now``. Ignored when ``as_of`` is set. + :type to: str, optional + :param as_of: A point in time at which to query the entity revisions, as an RFC3339 timestamp, a Unix timestamp + (in seconds), or a relative time (for example, ``now-1d`` ). When set, ``from`` and ``to`` are ignored. + Cannot be combined with custom ``from`` / ``to`` values. + :type as_of: str, optional + :rtype: SingleEntityContextResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + if _from is not unset: + kwargs["_from"] = _from + + if to is not unset: + kwargs["to"] = to + + if as_of is not unset: + kwargs["as_of"] = as_of + + return self._get_single_entity_context_endpoint.call_with_http_info(**kwargs) + + def get_static_analysis_default_rulesets(self, language: str, ) -> DefaultRulesetsPerLanguageResponse: + """Get default rulesets for a language. + + Get the default SAST ruleset names for a given programming language. + + :param language: The programming language for which to retrieve the default rulesets. + :type language: str + :rtype: DefaultRulesetsPerLanguageResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["language"] = language + + return self._get_static_analysis_default_rulesets_endpoint.call_with_http_info(**kwargs) + + def get_static_analysis_node_types(self, language: str, ) -> NodeTypesResponse: + """Get node types for a language. + + Retrieve tree-sitter node type definitions for a given programming language. + + :param language: The programming language for which to retrieve node type definitions. + :type language: str + :rtype: NodeTypesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["language"] = language + + return self._get_static_analysis_node_types_endpoint.call_with_http_info(**kwargs) + + def get_static_analysis_ruleset(self, ruleset_name: str, *, include_tests: Union[bool, UnsetType]=unset, include_testing_rules: Union[bool, UnsetType]=unset, ) -> SastRulesetResponse: + """Get a SAST ruleset. + + Get a SAST ruleset by name, including all its rules. + + :param ruleset_name: The name of the ruleset to retrieve. + :type ruleset_name: str + :param include_tests: When true, test cases for each rule are included in the response. + :type include_tests: bool, optional + :param include_testing_rules: When true, rules that are in testing mode are included in the response. + :type include_testing_rules: bool, optional + :rtype: SastRulesetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + if include_tests is not unset: + kwargs["include_tests"] = include_tests + + if include_testing_rules is not unset: + kwargs["include_testing_rules"] = include_testing_rules + + return self._get_static_analysis_ruleset_endpoint.call_with_http_info(**kwargs) + + def get_static_analysis_tree_sitter_wasm(self, file: str, ) -> file_type: + """Get tree-sitter WASM file. + + Download the WebAssembly binary for a tree-sitter grammar by file name. + + :param file: The name of the WASM file to download. + :type file: str + :rtype: file_type + """ + kwargs: Dict[str, Any] = {} + kwargs["file"] = file + + return self._get_static_analysis_tree_sitter_wasm_endpoint.call_with_http_info(**kwargs) + + def get_suggested_actions_matching_signal(self, signal_id: str, ) -> SecurityMonitoringSignalSuggestedActionsResponse: + """Get suggested actions for a signal. + + Get the list of suggested actions for a given security signal. + + :param signal_id: The ID of the signal. + :type signal_id: str + :rtype: SecurityMonitoringSignalSuggestedActionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["signal_id"] = signal_id + + return self._get_suggested_actions_matching_signal_endpoint.call_with_http_info(**kwargs) + + def get_suppressions_affecting_future_rule(self, body: Union[SecurityMonitoringRuleCreatePayload, SecurityMonitoringStandardRuleCreatePayload, SecurityMonitoringSignalRuleCreatePayload, CloudConfigurationRuleCreatePayload], ) -> SecurityMonitoringSuppressionsResponse: + """Get suppressions affecting future rule. + + Get the list of suppressions that would affect a rule. + + :type body: SecurityMonitoringRuleCreatePayload + :rtype: SecurityMonitoringSuppressionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._get_suppressions_affecting_future_rule_endpoint.call_with_http_info(**kwargs) + + def get_suppressions_affecting_rule(self, rule_id: str, ) -> SecurityMonitoringSuppressionsResponse: + """Get suppressions affecting a specific rule. + + Get the list of suppressions that affect a specific existing rule by its ID. + + :param rule_id: The ID of the rule. + :type rule_id: str + :rtype: SecurityMonitoringSuppressionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + return self._get_suppressions_affecting_rule_endpoint.call_with_http_info(**kwargs) + + def get_suppression_version_history(self, suppression_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> GetSuppressionVersionHistoryResponse: + """Get a suppression's version history. + + Get a suppression's version history. + + :param suppression_id: The ID of the suppression rule + :type suppression_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :rtype: GetSuppressionVersionHistoryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["suppression_id"] = suppression_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._get_suppression_version_history_endpoint.call_with_http_info(**kwargs) + + def get_vulnerability_notification_rule(self, id: str, ) -> NotificationRuleResponse: + """Get details of a vulnerability notification rule. + + Get the details of a notification rule for security vulnerabilities. + + :param id: ID of the notification rule. + :type id: str + :rtype: NotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_vulnerability_notification_rule_endpoint.call_with_http_info(**kwargs) + + def get_vulnerability_notification_rules(self, ) -> NotificationRulesListResponse: + """Get the list of vulnerability notification rules. + + Returns the list of notification rules for security vulnerabilities. + + :rtype: NotificationRulesListResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_vulnerability_notification_rules_endpoint.call_with_http_info(**kwargs) + + def import_security_vulnerabilities(self, body: CycloneDXBom, ) -> None: + """Import security vulnerabilities. + + Import security vulnerabilities from an external scanner in CycloneDX 1.5 format. + + The payload is validated against the CycloneDX 1.5 JSON schema and the following + additional constraints: + + * ``metadata`` , ``metadata.component`` , and ``metadata.component.name`` are required. + * ``metadata.tools.components`` must contain exactly one element with a ``name`` field. + * ``components`` cannot be empty. Each component requires ``bom-ref`` , ``type`` , ``name`` , and ``version``. + * When ``type`` is ``library`` , ``purl`` is required and must be a valid PURL. + * When ``type`` is ``operating-system`` , ``name`` must be one of the supported OS values: + ``alma`` , ``alpine`` , ``amazon`` , ``azurelinux`` , ``bottlerocket`` , ``cbl-mariner`` , ``chainguard`` , + ``centos`` , ``debian`` , ``fedora`` , ``opensuse`` , ``opensuse-leap`` , ``opensuse-tumbleweed`` , + ``oracle`` , ``photon`` , ``redhat`` , ``rocky`` , ``slem`` , ``sles`` , ``ubuntu`` , ``wolfi`` , ``windows`` , ``macos``. + * ``vulnerabilities`` cannot be empty. Each vulnerability requires ``id`` , exactly one ``ratings`` entry, + and at least one ``affects`` entry. + * Each ``affects[].ref`` must match a ``bom-ref`` value in ``components``. + + :type body: CycloneDXBom + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._import_security_vulnerabilities_endpoint.call_with_http_info(**kwargs) + + def list_assets_sbo_ms(self, *, page_token: Union[str, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter_asset_type: Union[AssetType, UnsetType]=unset, filter_asset_name: Union[str, UnsetType]=unset, filter_package_name: Union[str, UnsetType]=unset, filter_package_version: Union[str, UnsetType]=unset, filter_license_name: Union[str, UnsetType]=unset, filter_license_type: Union[SBOMComponentLicenseType, UnsetType]=unset, ) -> ListAssetsSBOMsResponse: + """List assets SBOMs. + + Get a list of assets SBOMs for an organization. + + The ``filter[asset_type]`` parameter is required for initial requests (when no ``page[token]`` is provided). + Subsequent pages encode the asset type in the pagination token, so ``filter[asset_type]`` is not required + for paginated requests. Mixing infrastructure asset types ( ``Host`` , ``HostImage`` , ``Image`` , ``ServerlessFunction`` ) + with code asset types ( ``Repository`` , ``Service`` ) in the same request is not supported and returns a 400 error. + + **Pagination** + + Please review the `Pagination section <#pagination>`_ for the "List Vulnerabilities" endpoint. + + **Filtering** + + Please review the `Filtering section <#filtering>`_ for the "List Vulnerabilities" endpoint. + + **Metadata** + + Please review the `Metadata section <#metadata>`_ for the "List Vulnerabilities" endpoint. + + :param page_token: Its value must come from the ``links`` section of the response of the first request. Do not manually edit it. + :type page_token: str, optional + :param page_number: The page number to be retrieved. It should be equal to or greater than 1. + :type page_number: int, optional + :param filter_asset_type: The type of the assets for the SBOM request. Required for initial requests (when no ``page[token]`` is provided). Infrastructure types ( ``Host`` , ``HostImage`` , ``Image`` , ``ServerlessFunction`` ) and code types ( ``Repository`` , ``Service`` ) cannot be mixed in the same request. + :type filter_asset_type: AssetType, optional + :param filter_asset_name: The name of the asset for the SBOM request. + :type filter_asset_name: str, optional + :param filter_package_name: The name of the component that is a dependency of an asset. + :type filter_package_name: str, optional + :param filter_package_version: The version of the component that is a dependency of an asset. + :type filter_package_version: str, optional + :param filter_license_name: The software license name of the component that is a dependency of an asset. + :type filter_license_name: str, optional + :param filter_license_type: The software license type of the component that is a dependency of an asset. + :type filter_license_type: SBOMComponentLicenseType, optional + :rtype: ListAssetsSBOMsResponse + """ + kwargs: Dict[str, Any] = {} + if page_token is not unset: + kwargs["page_token"] = page_token + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter_asset_type is not unset: + kwargs["filter_asset_type"] = filter_asset_type + + if filter_asset_name is not unset: + kwargs["filter_asset_name"] = filter_asset_name + + if filter_package_name is not unset: + kwargs["filter_package_name"] = filter_package_name + + if filter_package_version is not unset: + kwargs["filter_package_version"] = filter_package_version + + if filter_license_name is not unset: + kwargs["filter_license_name"] = filter_license_name + + if filter_license_type is not unset: + kwargs["filter_license_type"] = filter_license_type + + return self._list_assets_sbo_ms_endpoint.call_with_http_info(**kwargs) + + def list_findings(self, *, page_limit: Union[int, UnsetType]=unset, snapshot_timestamp: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, filter_tags: Union[str, UnsetType]=unset, filter_evaluation_changed_at: Union[str, UnsetType]=unset, filter_muted: Union[bool, UnsetType]=unset, filter_rule_id: Union[str, UnsetType]=unset, filter_rule_name: Union[str, UnsetType]=unset, filter_resource_type: Union[str, UnsetType]=unset, filter_resource_id: Union[str, UnsetType]=unset, filter_discovery_timestamp: Union[str, UnsetType]=unset, filter_evaluation: Union[FindingEvaluation, UnsetType]=unset, filter_status: Union[FindingStatus, UnsetType]=unset, filter_vulnerability_type: Union[List[FindingVulnerabilityType], UnsetType]=unset, detailed_findings: Union[bool, UnsetType]=unset, ) -> ListFindingsResponse: + """List findings. + + Get a list of findings. These include both misconfigurations and identity risks. + + **Note** : To filter and return only identity risks, add the following query parameter: ``?filter[tags]=dd_rule_type:ciem`` + + **Filtering** + + Filters can be applied by appending query parameters to the URL. + + * Using a single filter: ``?filter[attribute_key]=attribute_value`` + * Chaining filters: ``?filter[attribute_key]=attribute_value&filter[attribute_key]=attribute_value...`` + * Filtering on tags: ``?filter[tags]=tag_key:tag_value&filter[tags]=tag_key_2:tag_value_2`` + + Here, ``attribute_key`` can be any of the filter keys described further below. + + Query parameters of type ``integer`` support comparison operators ( ``>`` , ``>=`` , ``<`` , ``<=`` ). This is particularly useful when filtering by ``evaluation_changed_at`` or ``resource_discovery_timestamp``. For example: ``?filter[evaluation_changed_at]=>20123123121``. + + You can also use the negation operator on strings. For example, use ``filter[resource_type]=-aws*`` to filter for any non-AWS resources. + + The operator must come after the equal sign. For example, to filter with the ``>=`` operator, add the operator after the equal sign: ``filter[evaluation_changed_at]=>=1678809373257``. + + Query parameters must be only among the documented ones and with values of correct types. Duplicated query parameters (e.g. ``filter[status]=low&filter[status]=info`` ) are not allowed. + + **Additional extension fields** + + Additional extension fields are available for some findings. + + The data is available when you include the query parameter ``?detailed_findings=true`` in the request. + + The following fields are available for findings: + + * ``external_id`` : The resource external ID related to the finding. + * ``description`` : The description and remediation steps for the finding. + * ``datadog_link`` : The Datadog relative link for the finding. + * ``ip_addresses`` : The list of private IP addresses for the resource related to the finding. + + **Response** + + The response includes an array of finding objects, pagination metadata, and a count of items that match the query. + + Each finding object contains the following: + + * The finding ID that can be used in a ``GetFinding`` request to retrieve the full finding details. + * Core attributes, including status, evaluation, high-level resource details, muted state, and rule details. + * ``evaluation_changed_at`` and ``resource_discovery_date`` time stamps. + * An array of associated tags. + + :param page_limit: Limit the number of findings returned. Must be <= 1000. + :type page_limit: int, optional + :param snapshot_timestamp: Return findings for a given snapshot of time (Unix ms). + :type snapshot_timestamp: int, optional + :param page_cursor: Return the next page of findings pointed to by the cursor. + :type page_cursor: str, optional + :param filter_tags: Return findings that have these associated tags (repeatable). + :type filter_tags: str, optional + :param filter_evaluation_changed_at: Return findings that have changed from pass to fail or vice versa on a specified date (Unix ms) or date range (using comparison operators). + :type filter_evaluation_changed_at: str, optional + :param filter_muted: Set to ``true`` to return findings that are muted. Set to ``false`` to return unmuted findings. + :type filter_muted: bool, optional + :param filter_rule_id: Return findings for the specified rule ID. + :type filter_rule_id: str, optional + :param filter_rule_name: Return findings for the specified rule. + :type filter_rule_name: str, optional + :param filter_resource_type: Return only findings for the specified resource type. + :type filter_resource_type: str, optional + :param filter_resource_id: Return only findings for the specified resource id. + :type filter_resource_id: str, optional + :param filter_discovery_timestamp: Return findings that were found on a specified date (Unix ms) or date range (using comparison operators). + :type filter_discovery_timestamp: str, optional + :param filter_evaluation: Return only ``pass`` or ``fail`` findings. + :type filter_evaluation: FindingEvaluation, optional + :param filter_status: Return only findings with the specified status. + :type filter_status: FindingStatus, optional + :param filter_vulnerability_type: Return findings that match the selected vulnerability types (repeatable). + :type filter_vulnerability_type: [FindingVulnerabilityType], optional + :param detailed_findings: Return additional fields for some findings. + :type detailed_findings: bool, optional + :rtype: ListFindingsResponse + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if snapshot_timestamp is not unset: + kwargs["snapshot_timestamp"] = snapshot_timestamp + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if filter_evaluation_changed_at is not unset: + kwargs["filter_evaluation_changed_at"] = filter_evaluation_changed_at + + if filter_muted is not unset: + kwargs["filter_muted"] = filter_muted + + if filter_rule_id is not unset: + kwargs["filter_rule_id"] = filter_rule_id + + if filter_rule_name is not unset: + kwargs["filter_rule_name"] = filter_rule_name + + if filter_resource_type is not unset: + kwargs["filter_resource_type"] = filter_resource_type + + if filter_resource_id is not unset: + kwargs["filter_resource_id"] = filter_resource_id + + if filter_discovery_timestamp is not unset: + kwargs["filter_discovery_timestamp"] = filter_discovery_timestamp + + if filter_evaluation is not unset: + kwargs["filter_evaluation"] = filter_evaluation + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + if filter_vulnerability_type is not unset: + kwargs["filter_vulnerability_type"] = filter_vulnerability_type + + if detailed_findings is not unset: + kwargs["detailed_findings"] = detailed_findings + + return self._list_findings_endpoint.call_with_http_info(**kwargs) + + def list_findings_with_pagination(self, *, page_limit: Union[int, UnsetType]=unset, snapshot_timestamp: Union[int, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, filter_tags: Union[str, UnsetType]=unset, filter_evaluation_changed_at: Union[str, UnsetType]=unset, filter_muted: Union[bool, UnsetType]=unset, filter_rule_id: Union[str, UnsetType]=unset, filter_rule_name: Union[str, UnsetType]=unset, filter_resource_type: Union[str, UnsetType]=unset, filter_resource_id: Union[str, UnsetType]=unset, filter_discovery_timestamp: Union[str, UnsetType]=unset, filter_evaluation: Union[FindingEvaluation, UnsetType]=unset, filter_status: Union[FindingStatus, UnsetType]=unset, filter_vulnerability_type: Union[List[FindingVulnerabilityType], UnsetType]=unset, detailed_findings: Union[bool, UnsetType]=unset, ) -> collections.abc.Iterable[Finding]: + """List findings. + + Provide a paginated version of :meth:`list_findings`, returning all items. + + :param page_limit: Limit the number of findings returned. Must be <= 1000. + :type page_limit: int, optional + :param snapshot_timestamp: Return findings for a given snapshot of time (Unix ms). + :type snapshot_timestamp: int, optional + :param page_cursor: Return the next page of findings pointed to by the cursor. + :type page_cursor: str, optional + :param filter_tags: Return findings that have these associated tags (repeatable). + :type filter_tags: str, optional + :param filter_evaluation_changed_at: Return findings that have changed from pass to fail or vice versa on a specified date (Unix ms) or date range (using comparison operators). + :type filter_evaluation_changed_at: str, optional + :param filter_muted: Set to ``true`` to return findings that are muted. Set to ``false`` to return unmuted findings. + :type filter_muted: bool, optional + :param filter_rule_id: Return findings for the specified rule ID. + :type filter_rule_id: str, optional + :param filter_rule_name: Return findings for the specified rule. + :type filter_rule_name: str, optional + :param filter_resource_type: Return only findings for the specified resource type. + :type filter_resource_type: str, optional + :param filter_resource_id: Return only findings for the specified resource id. + :type filter_resource_id: str, optional + :param filter_discovery_timestamp: Return findings that were found on a specified date (Unix ms) or date range (using comparison operators). + :type filter_discovery_timestamp: str, optional + :param filter_evaluation: Return only ``pass`` or ``fail`` findings. + :type filter_evaluation: FindingEvaluation, optional + :param filter_status: Return only findings with the specified status. + :type filter_status: FindingStatus, optional + :param filter_vulnerability_type: Return findings that match the selected vulnerability types (repeatable). + :type filter_vulnerability_type: [FindingVulnerabilityType], optional + :param detailed_findings: Return additional fields for some findings. + :type detailed_findings: bool, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[Finding] + """ + kwargs: Dict[str, Any] = {} + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if snapshot_timestamp is not unset: + kwargs["snapshot_timestamp"] = snapshot_timestamp + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if filter_evaluation_changed_at is not unset: + kwargs["filter_evaluation_changed_at"] = filter_evaluation_changed_at + + if filter_muted is not unset: + kwargs["filter_muted"] = filter_muted + + if filter_rule_id is not unset: + kwargs["filter_rule_id"] = filter_rule_id + + if filter_rule_name is not unset: + kwargs["filter_rule_name"] = filter_rule_name + + if filter_resource_type is not unset: + kwargs["filter_resource_type"] = filter_resource_type + + if filter_resource_id is not unset: + kwargs["filter_resource_id"] = filter_resource_id + + if filter_discovery_timestamp is not unset: + kwargs["filter_discovery_timestamp"] = filter_discovery_timestamp + + if filter_evaluation is not unset: + kwargs["filter_evaluation"] = filter_evaluation + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + if filter_vulnerability_type is not unset: + kwargs["filter_vulnerability_type"] = filter_vulnerability_type + + if detailed_findings is not unset: + kwargs["detailed_findings"] = detailed_findings + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 100) + endpoint = self._list_findings_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.cursor", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_historical_jobs(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, ) -> ListHistoricalJobsResponse: + """List historical jobs. + + List historical jobs. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: The order of the jobs in results. + :type sort: str, optional + :param filter_query: Query used to filter items from the fetched list. + :type filter_query: str, optional + :rtype: ListHistoricalJobsResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + return self._list_historical_jobs_endpoint.call_with_http_info(**kwargs) + + def list_indicators_of_compromise(self, *, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, sort_column: Union[str, UnsetType]=unset, sort_order: Union[str, UnsetType]=unset, ocsf: Union[bool, UnsetType]=unset, worked_by: Union[str, UnsetType]=unset, triage_state: Union[IoCTriageState, UnsetType]=unset, ) -> IoCExplorerListResponse: + """List indicators of compromise. + + Get a list of indicators of compromise (IoCs) matching the specified filters. + + :param limit: Number of results per page. + :type limit: int, optional + :param offset: Pagination offset. + :type offset: int, optional + :param query: Search/filter query (supports field:value syntax). + :type query: str, optional + :param sort_column: Sort column: score, first_seen_ts_epoch, last_seen_ts_epoch, indicator, indicator_type, signal_count, log_count, category, as_type. + :type sort_column: str, optional + :param sort_order: Sort order: asc or desc. + :type sort_order: str, optional + :param ocsf: When true, return only OCSF field-based matches. When false, return regex/message-based matches. + :type ocsf: bool, optional + :param worked_by: Filter indicators whose triage state was updated by a specific user identified by their handle. + :type worked_by: str, optional + :param triage_state: Filter by triage state. + :type triage_state: IoCTriageState, optional + :rtype: IoCExplorerListResponse + """ + kwargs: Dict[str, Any] = {} + if limit is not unset: + kwargs["limit"] = limit + + if offset is not unset: + kwargs["offset"] = offset + + if query is not unset: + kwargs["query"] = query + + if sort_column is not unset: + kwargs["sort_column"] = sort_column + + if sort_order is not unset: + kwargs["sort_order"] = sort_order + + if ocsf is not unset: + kwargs["ocsf"] = ocsf + + if worked_by is not unset: + kwargs["worked_by"] = worked_by + + if triage_state is not unset: + kwargs["triage_state"] = triage_state + + return self._list_indicators_of_compromise_endpoint.call_with_http_info(**kwargs) + + def list_multiple_rulesets(self, body: GetMultipleRulesetsRequest, ) -> GetMultipleRulesetsResponse: + """Ruleset get multiple. + + Get rules for multiple rulesets in batch. + + :type body: GetMultipleRulesetsRequest + :rtype: GetMultipleRulesetsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._list_multiple_rulesets_endpoint.call_with_http_info(**kwargs) + + def list_sample_log_generation_subscriptions(self, *, status: Union[SampleLogGenerationSubscriptionsStatusFilter, UnsetType]=unset, start_timestamp: Union[datetime, UnsetType]=unset, end_timestamp: Union[datetime, UnsetType]=unset, ) -> SampleLogGenerationSubscriptionsResponse: + """Get sample log generation subscriptions. + + Get the sample log generation subscriptions for the organization. + Sample log generation injects representative example logs for a given Cloud SIEM content pack into the Logs platform, + which can be used to test detection rules without onboarding the underlying integration first. + + **Availability** : this endpoint is restricted to Cloud SIEM trial organizations on an eligible + pricing model. Other organizations receive a ``403 Forbidden`` (non-trial orgs) or a ``400 Bad Request`` + (feature disabled), and legacy pricing tiers receive a response with ``status: not_available``. + + :param status: Filter the subscriptions by status. Use ``active`` to return only currently active + subscriptions, or ``all`` to return every subscription including expired ones. + Ignored when ``start_timestamp`` is provided. Defaults to ``active``. + :type status: SampleLogGenerationSubscriptionsStatusFilter, optional + :param start_timestamp: The start of the time range, as an RFC3339 timestamp. When provided, the response includes + every subscription that was active at any point in ``[start_timestamp, end_timestamp]`` , + and the ``status`` filter is ignored. + :type start_timestamp: datetime, optional + :param end_timestamp: The end of the time range, as an RFC3339 timestamp. Ignored unless ``start_timestamp`` is set. + Defaults to the current time when ``start_timestamp`` is provided. + :type end_timestamp: datetime, optional + :rtype: SampleLogGenerationSubscriptionsResponse + """ + kwargs: Dict[str, Any] = {} + if status is not unset: + kwargs["status"] = status + + if start_timestamp is not unset: + kwargs["start_timestamp"] = start_timestamp + + if end_timestamp is not unset: + kwargs["end_timestamp"] = end_timestamp + + return self._list_sample_log_generation_subscriptions_endpoint.call_with_http_info(**kwargs) + + def list_scanned_assets_metadata(self, *, page_token: Union[str, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter_asset_type: Union[CloudAssetType, UnsetType]=unset, filter_asset_name: Union[str, UnsetType]=unset, filter_last_success_origin: Union[str, UnsetType]=unset, filter_last_success_env: Union[str, UnsetType]=unset, ) -> ScannedAssetsMetadata: + """List scanned assets metadata. + + Get a list of security scanned assets metadata for an organization. + + **Pagination** + + For the "List Vulnerabilities" endpoint, see the `Pagination section <#pagination>`_. + + **Filtering** + + For the "List Vulnerabilities" endpoint, see the `Filtering section <#filtering>`_. + + **Metadata** + + For the "List Vulnerabilities" endpoint, see the `Metadata section <#metadata>`_. + + **Related endpoints** + + This endpoint returns additional metadata for cloud resources that is not available from the standard resource endpoints. To access a richer dataset, call this endpoint together with the relevant resource endpoint(s) and merge (join) their results using the resource identifier. + + **Hosts** + + To enrich host data, join the response from the `Hosts `_ endpoint with the response from the scanned-assets-metadata endpoint on the following key fields: + + .. list-table:: + :header-rows: 1 + + * - ENDPOINT + - JOIN KEY + - TYPE + * - `/api/v1/hosts `_ + - host_list.host_name + - string + * - /api/v2/security/scanned-assets-metadata + - data.attributes.asset.name + - string + + **Host Images** + + To enrich host image data, join the response from the `Hosts `_ endpoint with the response from the scanned-assets-metadata endpoint on the following key fields: + + .. list-table:: + :header-rows: 1 + + * - ENDPOINT + - JOIN KEY + - TYPE + * - `/api/v1/hosts `_ + - host_list.tags_by_source["Amazon Web Services"]["image"] + - string + * - /api/v2/security/scanned-assets-metadata + - data.attributes.asset.name + - string + + **Container Images** + + To enrich container image data, join the response from the `Container Images `_ endpoint with the response from the scanned-assets-metadata endpoint on the following key fields: + + .. list-table:: + :header-rows: 1 + + * - ENDPOINT + - JOIN KEY + - TYPE + * - `/api/v2/container_images `_ + - ``data.attributes.name`` @ ``data.attributes.repo_digest`` + - string + * - /api/v2/security/scanned-assets-metadata + - data.attributes.asset.name + - string + + + :param page_token: Its value must come from the ``links`` section of the response of the first request. Do not manually edit it. + :type page_token: str, optional + :param page_number: The page number to be retrieved. It should be equal to or greater than 1. + :type page_number: int, optional + :param filter_asset_type: The type of the scanned asset. + :type filter_asset_type: CloudAssetType, optional + :param filter_asset_name: The name of the scanned asset. + :type filter_asset_name: str, optional + :param filter_last_success_origin: The origin of last success scan. + :type filter_last_success_origin: str, optional + :param filter_last_success_env: The environment of last success scan. + :type filter_last_success_env: str, optional + :rtype: ScannedAssetsMetadata + """ + kwargs: Dict[str, Any] = {} + if page_token is not unset: + kwargs["page_token"] = page_token + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter_asset_type is not unset: + kwargs["filter_asset_type"] = filter_asset_type + + if filter_asset_name is not unset: + kwargs["filter_asset_name"] = filter_asset_name + + if filter_last_success_origin is not unset: + kwargs["filter_last_success_origin"] = filter_last_success_origin + + if filter_last_success_env is not unset: + kwargs["filter_last_success_env"] = filter_last_success_env + + return self._list_scanned_assets_metadata_endpoint.call_with_http_info(**kwargs) + + def list_security_filters(self, ) -> SecurityFiltersResponse: + """Get all security filters. + + Get the list of configured security filters with their definitions. + + :rtype: SecurityFiltersResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_security_filters_endpoint.call_with_http_info(**kwargs) + + def list_security_filter_versions(self, ) -> SecurityFilterVersionsResponse: + """Get the version history of security filters. + + Get the configured security filters at each historical version of the configuration. + Each entry in the response represents the set of all security filters at a given version, + ordered from the most recent version to the oldest. + + :rtype: SecurityFilterVersionsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_security_filter_versions_endpoint.call_with_http_info(**kwargs) + + def list_security_findings(self, *, filter_query: Union[str, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, sort: Union[SecurityFindingsSort, UnsetType]=unset, ) -> ListSecurityFindingsResponse: + """List security findings. + + Get a list of security findings that match a search query. `See the schema for security findings `_. + + **Query Syntax** + + This endpoint uses the logs query syntax. Findings attributes (living in the attributes.attributes. namespace) are prefixed by @ when queried. Tags are queried without a prefix. + + Example: ``@severity:(critical OR high) @status:open team:platform`` + + :param filter_query: The search query following log search syntax. + :type filter_query: str, optional + :param page_cursor: Get the next page of results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: The maximum number of findings in the response. + :type page_limit: int, optional + :param sort: Sorts by @detection_changed_at. + :type sort: SecurityFindingsSort, optional + :rtype: ListSecurityFindingsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_security_findings_endpoint.call_with_http_info(**kwargs) + + def list_security_findings_with_pagination(self, *, filter_query: Union[str, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, sort: Union[SecurityFindingsSort, UnsetType]=unset, ) -> collections.abc.Iterable[SecurityFindingsData]: + """List security findings. + + Provide a paginated version of :meth:`list_security_findings`, returning all items. + + :param filter_query: The search query following log search syntax. + :type filter_query: str, optional + :param page_cursor: Get the next page of results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: The maximum number of findings in the response. + :type page_limit: int, optional + :param sort: Sorts by @detection_changed_at. + :type sort: SecurityFindingsSort, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[SecurityFindingsData] + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if sort is not unset: + kwargs["sort"] = sort + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_security_findings_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_security_findings_automation_due_date_rules(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> DueDateRulesResponse: + """Get all due date rules. + + Get all due date rules for the current organization. + + :param page_size: The number of rules per page. Maximum is 1000. + :type page_size: int, optional + :param page_number: The page number to return. + :type page_number: int, optional + :rtype: DueDateRulesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_security_findings_automation_due_date_rules_endpoint.call_with_http_info(**kwargs) + + def list_security_findings_automation_mute_rules(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> MuteRulesResponse: + """Get all mute rules. + + Get all mute rules for the current organization. + + :param page_size: The number of rules per page. Maximum is 1000. + :type page_size: int, optional + :param page_number: The page number to return. + :type page_number: int, optional + :rtype: MuteRulesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_security_findings_automation_mute_rules_endpoint.call_with_http_info(**kwargs) + + def list_security_findings_automation_ticket_creation_rules(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> TicketCreationRulesResponse: + """Get all ticket creation rules. + + Get all ticket creation rules for the current organization. + + :param page_size: The number of rules per page. Maximum is 1000. + :type page_size: int, optional + :param page_number: The page number to return. + :type page_number: int, optional + :rtype: TicketCreationRulesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_security_findings_automation_ticket_creation_rules_endpoint.call_with_http_info(**kwargs) + + def list_security_monitoring_critical_assets(self, ) -> SecurityMonitoringCriticalAssetsResponse: + """Get all critical assets. + + Get the list of all critical assets. + + :rtype: SecurityMonitoringCriticalAssetsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_security_monitoring_critical_assets_endpoint.call_with_http_info(**kwargs) + + def list_security_monitoring_datasets(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, ) -> SecurityMonitoringDatasetsListResponse: + """List datasets. + + List all Cloud SIEM datasets available to the organization, including both + customer-defined datasets and Datadog out-of-the-box datasets. + + :param page_size: Size for a given page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Attribute used to sort datasets. Prefix with ``-`` to sort in descending order. + :type sort: str, optional + :param filter_query: A search query to filter datasets by name or description. + :type filter_query: str, optional + :rtype: SecurityMonitoringDatasetsListResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + return self._list_security_monitoring_datasets_endpoint.call_with_http_info(**kwargs) + + def list_security_monitoring_histsignals(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[SecurityMonitoringSignalsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> SecurityMonitoringSignalsListResponse: + """List hist signals. + + List hist signals. + + :param filter_query: The search query for security signals. + :type filter_query: str, optional + :param filter_from: The minimum timestamp for requested security signals. + :type filter_from: datetime, optional + :param filter_to: The maximum timestamp for requested security signals. + :type filter_to: datetime, optional + :param sort: The order of the security signals in results. + :type sort: SecurityMonitoringSignalsSort, optional + :param page_cursor: A list of results using the cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: The maximum number of security signals in the response. + :type page_limit: int, optional + :rtype: SecurityMonitoringSignalsListResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_security_monitoring_histsignals_endpoint.call_with_http_info(**kwargs) + + def list_security_monitoring_integration_configs(self, *, filter_integration_type: Union[SecurityMonitoringIntegrationType, UnsetType]=unset, ) -> SecurityMonitoringIntegrationConfigsResponse: + """List entity context sync configurations. + + List the entity context sync configurations for Cloud SIEM. Each configuration connects Cloud SIEM + to an external source that provides entities (for example, users from an identity provider) for use + in signals and the entity explorer. + + :param filter_integration_type: Filter the entity context sync configurations by source type. + :type filter_integration_type: SecurityMonitoringIntegrationType, optional + :rtype: SecurityMonitoringIntegrationConfigsResponse + """ + kwargs: Dict[str, Any] = {} + if filter_integration_type is not unset: + kwargs["filter_integration_type"] = filter_integration_type + + return self._list_security_monitoring_integration_configs_endpoint.call_with_http_info(**kwargs) + + def list_security_monitoring_rules(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, sort: Union[SecurityMonitoringRuleSort, UnsetType]=unset, ) -> SecurityMonitoringListRulesResponse: + """List rules. + + List rules. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param query: A search query to filter security rules. You can filter by attributes such as ``type`` , ``source`` , ``tags``. + :type query: str, optional + :param sort: Attribute used to sort rules. Prefix with ``-`` to sort in descending order. + :type sort: SecurityMonitoringRuleSort, optional + :rtype: SecurityMonitoringListRulesResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if query is not unset: + kwargs["query"] = query + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_security_monitoring_rules_endpoint.call_with_http_info(**kwargs) + + def list_security_monitoring_signals(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[SecurityMonitoringSignalsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> SecurityMonitoringSignalsListResponse: + """Get a quick list of security signals. + + The list endpoint returns security signals that match a search query. + Both this endpoint and the POST endpoint can be used interchangeably when listing + security signals. + + :param filter_query: The search query for security signals. + :type filter_query: str, optional + :param filter_from: The minimum timestamp for requested security signals. + :type filter_from: datetime, optional + :param filter_to: The maximum timestamp for requested security signals. + :type filter_to: datetime, optional + :param sort: The order of the security signals in results. + :type sort: SecurityMonitoringSignalsSort, optional + :param page_cursor: A list of results using the cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: The maximum number of security signals in the response. + :type page_limit: int, optional + :rtype: SecurityMonitoringSignalsListResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_security_monitoring_signals_endpoint.call_with_http_info(**kwargs) + + def list_security_monitoring_signals_with_pagination(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[datetime, UnsetType]=unset, filter_to: Union[datetime, UnsetType]=unset, sort: Union[SecurityMonitoringSignalsSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[SecurityMonitoringSignal]: + """Get a quick list of security signals. + + Provide a paginated version of :meth:`list_security_monitoring_signals`, returning all items. + + :param filter_query: The search query for security signals. + :type filter_query: str, optional + :param filter_from: The minimum timestamp for requested security signals. + :type filter_from: datetime, optional + :param filter_to: The maximum timestamp for requested security signals. + :type filter_to: datetime, optional + :param sort: The order of the security signals in results. + :type sort: SecurityMonitoringSignalsSort, optional + :param page_cursor: A list of results using the cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: The maximum number of security signals in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[SecurityMonitoringSignal] + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_security_monitoring_signals_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_security_monitoring_suppressions(self, *, query: Union[str, UnsetType]=unset, sort: Union[SecurityMonitoringSuppressionSort, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> SecurityMonitoringPaginatedSuppressionsResponse: + """Get all suppression rules. + + Get the list of all suppression rules. + + :param query: Query string. + :type query: str, optional + :param sort: Attribute used to sort the list of suppression rules. Prefix with ``-`` to sort in descending order. + :type sort: SecurityMonitoringSuppressionSort, optional + :param page_size: Size for a given page. Use ``-1`` to return all items. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :rtype: SecurityMonitoringPaginatedSuppressionsResponse + """ + kwargs: Dict[str, Any] = {} + if query is not unset: + kwargs["query"] = query + + if sort is not unset: + kwargs["sort"] = sort + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_security_monitoring_suppressions_endpoint.call_with_http_info(**kwargs) + + def list_static_analysis_codegen_rulesets(self, ) -> SastRulesetsResponse: + """List codegen rulesets. + + Get the rulesets relevant for code generation for the authenticated user. + + :rtype: SastRulesetsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_static_analysis_codegen_rulesets_endpoint.call_with_http_info(**kwargs) + + def list_vulnerabilities(self, *, page_token: Union[str, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter_type: Union[VulnerabilityType, UnsetType]=unset, filter_cvss_base_score_op: Union[float, UnsetType]=unset, filter_cvss_base_severity: Union[VulnerabilitySeverity, UnsetType]=unset, filter_cvss_base_vector: Union[str, UnsetType]=unset, filter_cvss_datadog_score_op: Union[float, UnsetType]=unset, filter_cvss_datadog_severity: Union[VulnerabilitySeverity, UnsetType]=unset, filter_cvss_datadog_vector: Union[str, UnsetType]=unset, filter_status: Union[VulnerabilityStatus, UnsetType]=unset, filter_tool: Union[VulnerabilityTool, UnsetType]=unset, filter_library_name: Union[str, UnsetType]=unset, filter_library_version: Union[str, UnsetType]=unset, filter_advisory_id: Union[str, UnsetType]=unset, filter_risks_exploitation_probability: Union[bool, UnsetType]=unset, filter_risks_poc_exploit_available: Union[bool, UnsetType]=unset, filter_risks_exploit_available: Union[bool, UnsetType]=unset, filter_risks_epss_score_op: Union[float, UnsetType]=unset, filter_risks_epss_severity: Union[VulnerabilitySeverity, UnsetType]=unset, filter_language: Union[str, UnsetType]=unset, filter_ecosystem: Union[VulnerabilityEcosystem, UnsetType]=unset, filter_code_location_location: Union[str, UnsetType]=unset, filter_code_location_file_path: Union[str, UnsetType]=unset, filter_code_location_method: Union[str, UnsetType]=unset, filter_fix_available: Union[bool, UnsetType]=unset, filter_repo_digests: Union[str, UnsetType]=unset, filter_origin: Union[str, UnsetType]=unset, filter_running_kernel: Union[bool, UnsetType]=unset, filter_asset_name: Union[str, UnsetType]=unset, filter_asset_type: Union[AssetType, UnsetType]=unset, filter_asset_version_first: Union[str, UnsetType]=unset, filter_asset_version_last: Union[str, UnsetType]=unset, filter_asset_repository_url: Union[str, UnsetType]=unset, filter_asset_risks_in_production: Union[bool, UnsetType]=unset, filter_asset_risks_under_attack: Union[bool, UnsetType]=unset, filter_asset_risks_is_publicly_accessible: Union[bool, UnsetType]=unset, filter_asset_risks_has_privileged_access: Union[bool, UnsetType]=unset, filter_asset_risks_has_access_to_sensitive_data: Union[bool, UnsetType]=unset, filter_asset_environments: Union[str, UnsetType]=unset, filter_asset_teams: Union[str, UnsetType]=unset, filter_asset_arch: Union[str, UnsetType]=unset, filter_asset_operating_system_name: Union[str, UnsetType]=unset, filter_asset_operating_system_version: Union[str, UnsetType]=unset, ) -> ListVulnerabilitiesResponse: + """List vulnerabilities. **Deprecated**. + + Get a list of vulnerabilities. + + **Pagination** + + Pagination is enabled by default in both ``vulnerabilities`` and ``assets``. The size of the page varies depending on the endpoint and cannot be modified. To automate the request of the next page, you can use the links section in the response. + + This endpoint will return paginated responses. The pages are stored in the links section of the response: + + .. code-block:: JSON + + { + "data": [...], + "meta": {...}, + "links": { + "self": "https://.../api/v2/security/vulnerabilities", + "first": "https://.../api/v2/security/vulnerabilities?page[number]=1&page[token]=abc", + "last": "https://.../api/v2/security/vulnerabilities?page[number]=43&page[token]=abc", + "next": "https://.../api/v2/security/vulnerabilities?page[number]=2&page[token]=abc" + } + } + + * ``links.previous`` is empty if the first page is requested. + * ``links.next`` is empty if the last page is requested. + + **Token** + + Vulnerabilities can be created, updated or deleted at any point in time. + + Upon the first request, a token is created to ensure consistency across subsequent paginated requests. + + A token is valid only for 24 hours. + + **First request** + + We consider a request to be the first request when there is no ``page[token]`` parameter. + + The response of this first request contains the newly created token in the ``links`` section. + + This token can then be used in the subsequent paginated requests. + + *Note: The first request may take longer to complete than subsequent requests.* + + **Subsequent requests** + + Any request containing valid ``page[token]`` and ``page[number]`` parameters will be considered a subsequent request. + + If the ``token`` is invalid, a ``404`` response will be returned. + + If the page ``number`` is invalid, a ``400`` response will be returned. + + The returned ``token`` is valid for all requests in the pagination sequence. To send paginated requests in parallel, reuse the same ``token`` and change only the ``page[number]`` parameter. + + **Filtering** + + The request can include some filter parameters to filter the data to be retrieved. The format of the filter parameters follows the `JSON:API format `_ : ``filter[$prop_name]`` , where ``prop_name`` is the property name in the entity being filtered by. + + All filters can include multiple values, where data will be filtered with an OR clause: ``filter[title]=Title1,Title2`` will filter all vulnerabilities where title is equal to ``Title1`` OR ``Title2``. + + String filters are case sensitive. + + Boolean filters accept ``true`` or ``false`` as values. + + Number filters must include an operator as a second filter input: ``filter[$prop_name][$operator]``. For example, for the vulnerabilities endpoint: ``filter[cvss.base.score][lte]=8``. + + Available operators are: ``eq`` (==), ``lt`` (<), ``lte`` (<=), ``gt`` (>) and ``gte`` (>=). + + **Metadata** + + Following `JSON:API format `_ , object including non-standard meta-information. + + This endpoint includes the meta member in the response. For more details on each of the properties included in this section, check the endpoints response tables. + + .. code-block:: JSON + + { + "data": [...], + "meta": { + "total": 1500, + "count": 18732, + "token": "some_token" + }, + "links": {...} + } + + **Extensions** + + Requests may include extensions to modify the behavior of the requested endpoint. The filter parameters follow the `JSON:API format `_ format: ``ext:$extension_name`` , where ``extension_name`` is the name of the modifier that is being applied. + + Extensions can only include one value: ``ext:modifier=value``. + + :param page_token: Its value must come from the ``links`` section of the response of the first request. Do not manually edit it. + :type page_token: str, optional + :param page_number: The page number to be retrieved. It should be equal or greater than ``1`` + :type page_number: int, optional + :param filter_type: Filter by vulnerability type. + :type filter_type: VulnerabilityType, optional + :param filter_cvss_base_score_op: Filter by vulnerability base (i.e. from the original advisory) severity score. + :type filter_cvss_base_score_op: float, optional + :param filter_cvss_base_severity: Filter by vulnerability base severity. + :type filter_cvss_base_severity: VulnerabilitySeverity, optional + :param filter_cvss_base_vector: Filter by vulnerability base CVSS vector. + :type filter_cvss_base_vector: str, optional + :param filter_cvss_datadog_score_op: Filter by vulnerability Datadog severity score. + :type filter_cvss_datadog_score_op: float, optional + :param filter_cvss_datadog_severity: Filter by vulnerability Datadog severity. + :type filter_cvss_datadog_severity: VulnerabilitySeverity, optional + :param filter_cvss_datadog_vector: Filter by vulnerability Datadog CVSS vector. + :type filter_cvss_datadog_vector: str, optional + :param filter_status: Filter by the status of the vulnerability. + :type filter_status: VulnerabilityStatus, optional + :param filter_tool: Filter by the tool of the vulnerability. + :type filter_tool: VulnerabilityTool, optional + :param filter_library_name: Filter by library name. + :type filter_library_name: str, optional + :param filter_library_version: Filter by library version. + :type filter_library_version: str, optional + :param filter_advisory_id: Filter by advisory ID. + :type filter_advisory_id: str, optional + :param filter_risks_exploitation_probability: Filter by exploitation probability. + :type filter_risks_exploitation_probability: bool, optional + :param filter_risks_poc_exploit_available: Filter by POC exploit availability. + :type filter_risks_poc_exploit_available: bool, optional + :param filter_risks_exploit_available: Filter by public exploit availability. + :type filter_risks_exploit_available: bool, optional + :param filter_risks_epss_score_op: Filter by vulnerability `EPSS `_ severity score. + :type filter_risks_epss_score_op: float, optional + :param filter_risks_epss_severity: Filter by vulnerability `EPSS `_ severity. + :type filter_risks_epss_severity: VulnerabilitySeverity, optional + :param filter_language: Filter by language. + :type filter_language: str, optional + :param filter_ecosystem: Filter by ecosystem. + :type filter_ecosystem: VulnerabilityEcosystem, optional + :param filter_code_location_location: Filter by vulnerability location. + :type filter_code_location_location: str, optional + :param filter_code_location_file_path: Filter by vulnerability file path. + :type filter_code_location_file_path: str, optional + :param filter_code_location_method: Filter by method. + :type filter_code_location_method: str, optional + :param filter_fix_available: Filter by fix availability. + :type filter_fix_available: bool, optional + :param filter_repo_digests: Filter by vulnerability ``repo_digest`` (when the vulnerability is related to ``Image`` asset). + :type filter_repo_digests: str, optional + :param filter_origin: Filter by origin. + :type filter_origin: str, optional + :param filter_running_kernel: Filter for whether the vulnerability affects a running kernel (for vulnerabilities related to a ``Host`` asset). + :type filter_running_kernel: bool, optional + :param filter_asset_name: Filter by asset name. This field supports the usage of wildcards (*). + :type filter_asset_name: str, optional + :param filter_asset_type: Filter by asset type. + :type filter_asset_type: AssetType, optional + :param filter_asset_version_first: Filter by the first version of the asset this vulnerability has been detected on. + :type filter_asset_version_first: str, optional + :param filter_asset_version_last: Filter by the last version of the asset this vulnerability has been detected on. + :type filter_asset_version_last: str, optional + :param filter_asset_repository_url: Filter by the repository url associated to the asset. + :type filter_asset_repository_url: str, optional + :param filter_asset_risks_in_production: Filter whether the asset is in production or not. + :type filter_asset_risks_in_production: bool, optional + :param filter_asset_risks_under_attack: Filter whether the asset is under attack or not. + :type filter_asset_risks_under_attack: bool, optional + :param filter_asset_risks_is_publicly_accessible: Filter whether the asset is publicly accessible or not. + :type filter_asset_risks_is_publicly_accessible: bool, optional + :param filter_asset_risks_has_privileged_access: Filter whether the asset is publicly accessible or not. + :type filter_asset_risks_has_privileged_access: bool, optional + :param filter_asset_risks_has_access_to_sensitive_data: Filter whether the asset has access to sensitive data or not. + :type filter_asset_risks_has_access_to_sensitive_data: bool, optional + :param filter_asset_environments: Filter by asset environments. + :type filter_asset_environments: str, optional + :param filter_asset_teams: Filter by asset teams. + :type filter_asset_teams: str, optional + :param filter_asset_arch: Filter by asset architecture. + :type filter_asset_arch: str, optional + :param filter_asset_operating_system_name: Filter by asset operating system name. + :type filter_asset_operating_system_name: str, optional + :param filter_asset_operating_system_version: Filter by asset operating system version. + :type filter_asset_operating_system_version: str, optional + :rtype: ListVulnerabilitiesResponse + """ + kwargs: Dict[str, Any] = {} + if page_token is not unset: + kwargs["page_token"] = page_token + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter_type is not unset: + kwargs["filter_type"] = filter_type + + if filter_cvss_base_score_op is not unset: + kwargs["filter_cvss_base_score_op"] = filter_cvss_base_score_op + + if filter_cvss_base_severity is not unset: + kwargs["filter_cvss_base_severity"] = filter_cvss_base_severity + + if filter_cvss_base_vector is not unset: + kwargs["filter_cvss_base_vector"] = filter_cvss_base_vector + + if filter_cvss_datadog_score_op is not unset: + kwargs["filter_cvss_datadog_score_op"] = filter_cvss_datadog_score_op + + if filter_cvss_datadog_severity is not unset: + kwargs["filter_cvss_datadog_severity"] = filter_cvss_datadog_severity + + if filter_cvss_datadog_vector is not unset: + kwargs["filter_cvss_datadog_vector"] = filter_cvss_datadog_vector + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + if filter_tool is not unset: + kwargs["filter_tool"] = filter_tool + + if filter_library_name is not unset: + kwargs["filter_library_name"] = filter_library_name + + if filter_library_version is not unset: + kwargs["filter_library_version"] = filter_library_version + + if filter_advisory_id is not unset: + kwargs["filter_advisory_id"] = filter_advisory_id + + if filter_risks_exploitation_probability is not unset: + kwargs["filter_risks_exploitation_probability"] = filter_risks_exploitation_probability + + if filter_risks_poc_exploit_available is not unset: + kwargs["filter_risks_poc_exploit_available"] = filter_risks_poc_exploit_available + + if filter_risks_exploit_available is not unset: + kwargs["filter_risks_exploit_available"] = filter_risks_exploit_available + + if filter_risks_epss_score_op is not unset: + kwargs["filter_risks_epss_score_op"] = filter_risks_epss_score_op + + if filter_risks_epss_severity is not unset: + kwargs["filter_risks_epss_severity"] = filter_risks_epss_severity + + if filter_language is not unset: + kwargs["filter_language"] = filter_language + + if filter_ecosystem is not unset: + kwargs["filter_ecosystem"] = filter_ecosystem + + if filter_code_location_location is not unset: + kwargs["filter_code_location_location"] = filter_code_location_location + + if filter_code_location_file_path is not unset: + kwargs["filter_code_location_file_path"] = filter_code_location_file_path + + if filter_code_location_method is not unset: + kwargs["filter_code_location_method"] = filter_code_location_method + + if filter_fix_available is not unset: + kwargs["filter_fix_available"] = filter_fix_available + + if filter_repo_digests is not unset: + kwargs["filter_repo_digests"] = filter_repo_digests + + if filter_origin is not unset: + kwargs["filter_origin"] = filter_origin + + if filter_running_kernel is not unset: + kwargs["filter_running_kernel"] = filter_running_kernel + + if filter_asset_name is not unset: + kwargs["filter_asset_name"] = filter_asset_name + + if filter_asset_type is not unset: + kwargs["filter_asset_type"] = filter_asset_type + + if filter_asset_version_first is not unset: + kwargs["filter_asset_version_first"] = filter_asset_version_first + + if filter_asset_version_last is not unset: + kwargs["filter_asset_version_last"] = filter_asset_version_last + + if filter_asset_repository_url is not unset: + kwargs["filter_asset_repository_url"] = filter_asset_repository_url + + if filter_asset_risks_in_production is not unset: + kwargs["filter_asset_risks_in_production"] = filter_asset_risks_in_production + + if filter_asset_risks_under_attack is not unset: + kwargs["filter_asset_risks_under_attack"] = filter_asset_risks_under_attack + + if filter_asset_risks_is_publicly_accessible is not unset: + kwargs["filter_asset_risks_is_publicly_accessible"] = filter_asset_risks_is_publicly_accessible + + if filter_asset_risks_has_privileged_access is not unset: + kwargs["filter_asset_risks_has_privileged_access"] = filter_asset_risks_has_privileged_access + + if filter_asset_risks_has_access_to_sensitive_data is not unset: + kwargs["filter_asset_risks_has_access_to_sensitive_data"] = filter_asset_risks_has_access_to_sensitive_data + + if filter_asset_environments is not unset: + kwargs["filter_asset_environments"] = filter_asset_environments + + if filter_asset_teams is not unset: + kwargs["filter_asset_teams"] = filter_asset_teams + + if filter_asset_arch is not unset: + kwargs["filter_asset_arch"] = filter_asset_arch + + if filter_asset_operating_system_name is not unset: + kwargs["filter_asset_operating_system_name"] = filter_asset_operating_system_name + + if filter_asset_operating_system_version is not unset: + kwargs["filter_asset_operating_system_version"] = filter_asset_operating_system_version + + warnings.warn("list_vulnerabilities is deprecated", DeprecationWarning, stacklevel=2) + return self._list_vulnerabilities_endpoint.call_with_http_info(**kwargs) + + def list_vulnerable_assets(self, *, page_token: Union[str, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter_name: Union[str, UnsetType]=unset, filter_type: Union[AssetType, UnsetType]=unset, filter_version_first: Union[str, UnsetType]=unset, filter_version_last: Union[str, UnsetType]=unset, filter_repository_url: Union[str, UnsetType]=unset, filter_risks_in_production: Union[bool, UnsetType]=unset, filter_risks_under_attack: Union[bool, UnsetType]=unset, filter_risks_is_publicly_accessible: Union[bool, UnsetType]=unset, filter_risks_has_privileged_access: Union[bool, UnsetType]=unset, filter_risks_has_access_to_sensitive_data: Union[bool, UnsetType]=unset, filter_environments: Union[str, UnsetType]=unset, filter_teams: Union[str, UnsetType]=unset, filter_arch: Union[str, UnsetType]=unset, filter_operating_system_name: Union[str, UnsetType]=unset, filter_operating_system_version: Union[str, UnsetType]=unset, ) -> ListVulnerableAssetsResponse: + """List vulnerable assets. + + Get a list of vulnerable assets. + + **Pagination** + + Please review the `Pagination section for the "List Vulnerabilities" <#pagination>`_ endpoint. + + **Filtering** + + Please review the `Filtering section for the "List Vulnerabilities" <#filtering>`_ endpoint. + + **Metadata** + + Please review the `Metadata section for the "List Vulnerabilities" <#metadata>`_ endpoint. + + :param page_token: Its value must come from the ``links`` section of the response of the first request. Do not manually edit it. + :type page_token: str, optional + :param page_number: The page number to be retrieved. It should be equal or greater than ``1`` + :type page_number: int, optional + :param filter_name: Filter by name. This field supports the usage of wildcards (*). + :type filter_name: str, optional + :param filter_type: Filter by type. + :type filter_type: AssetType, optional + :param filter_version_first: Filter by the first version of the asset since it has been vulnerable. + :type filter_version_first: str, optional + :param filter_version_last: Filter by the last detected version of the asset. + :type filter_version_last: str, optional + :param filter_repository_url: Filter by the repository url associated to the asset. + :type filter_repository_url: str, optional + :param filter_risks_in_production: Filter whether the asset is in production or not. + :type filter_risks_in_production: bool, optional + :param filter_risks_under_attack: Filter whether the asset (Service) is under attack or not. + :type filter_risks_under_attack: bool, optional + :param filter_risks_is_publicly_accessible: Filter whether the asset (Host) is publicly accessible or not. + :type filter_risks_is_publicly_accessible: bool, optional + :param filter_risks_has_privileged_access: Filter whether the asset (Host) has privileged access or not. + :type filter_risks_has_privileged_access: bool, optional + :param filter_risks_has_access_to_sensitive_data: Filter whether the asset (Host) has access to sensitive data or not. + :type filter_risks_has_access_to_sensitive_data: bool, optional + :param filter_environments: Filter by environment. + :type filter_environments: str, optional + :param filter_teams: Filter by teams. + :type filter_teams: str, optional + :param filter_arch: Filter by architecture. + :type filter_arch: str, optional + :param filter_operating_system_name: Filter by operating system name. + :type filter_operating_system_name: str, optional + :param filter_operating_system_version: Filter by operating system version. + :type filter_operating_system_version: str, optional + :rtype: ListVulnerableAssetsResponse + """ + kwargs: Dict[str, Any] = {} + if page_token is not unset: + kwargs["page_token"] = page_token + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + if filter_type is not unset: + kwargs["filter_type"] = filter_type + + if filter_version_first is not unset: + kwargs["filter_version_first"] = filter_version_first + + if filter_version_last is not unset: + kwargs["filter_version_last"] = filter_version_last + + if filter_repository_url is not unset: + kwargs["filter_repository_url"] = filter_repository_url + + if filter_risks_in_production is not unset: + kwargs["filter_risks_in_production"] = filter_risks_in_production + + if filter_risks_under_attack is not unset: + kwargs["filter_risks_under_attack"] = filter_risks_under_attack + + if filter_risks_is_publicly_accessible is not unset: + kwargs["filter_risks_is_publicly_accessible"] = filter_risks_is_publicly_accessible + + if filter_risks_has_privileged_access is not unset: + kwargs["filter_risks_has_privileged_access"] = filter_risks_has_privileged_access + + if filter_risks_has_access_to_sensitive_data is not unset: + kwargs["filter_risks_has_access_to_sensitive_data"] = filter_risks_has_access_to_sensitive_data + + if filter_environments is not unset: + kwargs["filter_environments"] = filter_environments + + if filter_teams is not unset: + kwargs["filter_teams"] = filter_teams + + if filter_arch is not unset: + kwargs["filter_arch"] = filter_arch + + if filter_operating_system_name is not unset: + kwargs["filter_operating_system_name"] = filter_operating_system_name + + if filter_operating_system_version is not unset: + kwargs["filter_operating_system_version"] = filter_operating_system_version + + return self._list_vulnerable_assets_endpoint.call_with_http_info(**kwargs) + + def mute_security_findings(self, body: MuteFindingsRequest, ) -> MuteFindingsResponse: + """Mute or unmute security findings. + + Mute or unmute security findings. + You can mute or unmute up to 100 security findings per request. The request body must include ``is_muted`` and ``reason`` attributes. The allowed reasons depend on whether the finding is being muted or unmuted: + + * To mute a finding: ``PENDING_FIX`` , ``FALSE_POSITIVE`` , ``OTHER`` , ``NO_FIX`` , ``DUPLICATE`` , ``RISK_ACCEPTED``. + * To unmute a finding: ``NO_PENDING_FIX`` , ``HUMAN_ERROR`` , ``NO_LONGER_ACCEPTED_RISK`` , ``OTHER``. + + :type body: MuteFindingsRequest + :rtype: MuteFindingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._mute_security_findings_endpoint.call_with_http_info(**kwargs) + + def patch_signal_notification_rule(self, id: str, body: PatchNotificationRuleParameters, ) -> NotificationRuleResponse: + """Patch a signal-based notification rule. + + Partially update the notification rule. All fields are optional; if a field is not provided, it is not updated. + + :param id: ID of the notification rule. + :type id: str + :type body: PatchNotificationRuleParameters + :rtype: NotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._patch_signal_notification_rule_endpoint.call_with_http_info(**kwargs) + + def patch_vulnerability_notification_rule(self, id: str, body: PatchNotificationRuleParameters, ) -> NotificationRuleResponse: + """Patch a vulnerability-based notification rule. + + Partially update the notification rule. All fields are optional; if a field is not provided, it is not updated. + + :param id: ID of the notification rule. + :type id: str + :type body: PatchNotificationRuleParameters + :rtype: NotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + kwargs["body"] = body + + return self._patch_vulnerability_notification_rule_endpoint.call_with_http_info(**kwargs) + + def reorder_security_findings_automation_due_date_rules(self, body: DueDateRuleReorderRequest, ) -> DueDateRuleReorderRequest: + """Reorder due date rules. + + Reorder the list of due date rules for the current organization. + + :type body: DueDateRuleReorderRequest + :rtype: DueDateRuleReorderRequest + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._reorder_security_findings_automation_due_date_rules_endpoint.call_with_http_info(**kwargs) + + def reorder_security_findings_automation_mute_rules(self, body: MuteRuleReorderRequest, ) -> MuteRuleReorderRequest: + """Reorder mute rules. + + Reorder the list of mute rules for the current organization. + + :type body: MuteRuleReorderRequest + :rtype: MuteRuleReorderRequest + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._reorder_security_findings_automation_mute_rules_endpoint.call_with_http_info(**kwargs) + + def reorder_security_findings_automation_ticket_creation_rules(self, body: TicketCreationRuleReorderRequest, ) -> TicketCreationRuleReorderRequest: + """Reorder ticket creation rules. + + Reorder the list of ticket creation rules for the current organization. + + :type body: TicketCreationRuleReorderRequest + :rtype: TicketCreationRuleReorderRequest + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._reorder_security_findings_automation_ticket_creation_rules_endpoint.call_with_http_info(**kwargs) + + def restore_security_monitoring_rule(self, rule_id: str, version: int, ) -> SecurityMonitoringRuleResponse: + """Restore a rule to a historical version. + + Restores a custom detection rule to a previously saved historical version. + Only custom rules can be restored. Default and partner rules return 400. + The restore creates a new version entry; it does not overwrite history. + + :param rule_id: The ID of the rule. + :type rule_id: str + :param version: The historical version number of the rule. + :type version: int + :rtype: SecurityMonitoringRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["version"] = version + + return self._restore_security_monitoring_rule_endpoint.call_with_http_info(**kwargs) + + def run_historical_job(self, body: RunHistoricalJobRequest, ) -> JobCreateResponse: + """Run a historical job. + + Run a historical job. + + :type body: RunHistoricalJobRequest + :rtype: JobCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._run_historical_job_endpoint.call_with_http_info(**kwargs) + + def search_security_findings(self, body: SecurityFindingsSearchRequest, ) -> ListSecurityFindingsResponse: + """Search security findings. + + Get a list of security findings that match a search query. `See the schema for security findings `_. + + **Query Syntax** + + The API uses the logs query syntax. Findings attributes (living in the attributes.attributes. namespace) are prefixed by @ when queried. Tags are queried without a prefix. + + Example: ``@severity:(critical OR high) @status:open team:platform`` + + :type body: SecurityFindingsSearchRequest + :rtype: ListSecurityFindingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._search_security_findings_endpoint.call_with_http_info(**kwargs) + + def search_security_findings_with_pagination(self, body: SecurityFindingsSearchRequest, ) -> collections.abc.Iterable[SecurityFindingsData]: + """Search security findings. + + Provide a paginated version of :meth:`search_security_findings`, returning all items. + + :type body: SecurityFindingsSearchRequest + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[SecurityFindingsData] + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.data.attributes.page.limit", 10) + endpoint = self._search_security_findings_endpoint + set_attribute_from_path(kwargs, "body.data.attributes.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.data.attributes.page.cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def search_security_monitoring_histsignals(self, *, body: Union[SecurityMonitoringSignalListRequest, UnsetType]=unset, ) -> SecurityMonitoringSignalsListResponse: + """Search hist signals. + + Search hist signals. + + :type body: SecurityMonitoringSignalListRequest, optional + :rtype: SecurityMonitoringSignalsListResponse + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + return self._search_security_monitoring_histsignals_endpoint.call_with_http_info(**kwargs) + + def search_security_monitoring_signals(self, *, body: Union[SecurityMonitoringSignalListRequest, UnsetType]=unset, ) -> SecurityMonitoringSignalsListResponse: + """Get a list of security signals. + + Returns security signals that match a search query. + Both this endpoint and the GET endpoint can be used interchangeably for listing + security signals. + + :type body: SecurityMonitoringSignalListRequest, optional + :rtype: SecurityMonitoringSignalsListResponse + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + return self._search_security_monitoring_signals_endpoint.call_with_http_info(**kwargs) + + def search_security_monitoring_signals_with_pagination(self, *, body: Union[SecurityMonitoringSignalListRequest, UnsetType]=unset, ) -> collections.abc.Iterable[SecurityMonitoringSignal]: + """Get a list of security signals. + + Provide a paginated version of :meth:`search_security_monitoring_signals`, returning all items. + + :type body: SecurityMonitoringSignalListRequest, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[SecurityMonitoringSignal] + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.page.limit", 10) + endpoint = self._search_security_monitoring_signals_endpoint + set_attribute_from_path(kwargs, "body.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.page.cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def send_security_monitoring_notification_preview(self, body: CreateNotificationRuleParameters, ) -> NotificationRulePreviewResponse: + """Test a notification rule. + + Send a notification preview to test that a notification rule's targets are properly configured. + + :type body: CreateNotificationRuleParameters + :rtype: NotificationRulePreviewResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._send_security_monitoring_notification_preview_endpoint.call_with_http_info(**kwargs) + + def test_existing_security_monitoring_rule(self, rule_id: str, body: SecurityMonitoringRuleTestRequest, ) -> SecurityMonitoringRuleTestResponse: + """Test an existing rule. + + Test an existing rule. + + :param rule_id: The ID of the rule. + :type rule_id: str + :type body: SecurityMonitoringRuleTestRequest + :rtype: SecurityMonitoringRuleTestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._test_existing_security_monitoring_rule_endpoint.call_with_http_info(**kwargs) + + def test_security_monitoring_rule(self, body: SecurityMonitoringRuleTestRequest, ) -> SecurityMonitoringRuleTestResponse: + """Test a rule. + + Test a rule. + + :type body: SecurityMonitoringRuleTestRequest + :rtype: SecurityMonitoringRuleTestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._test_security_monitoring_rule_endpoint.call_with_http_info(**kwargs) + + def update_custom_framework(self, handle: str, version: str, body: UpdateCustomFrameworkRequest, ) -> UpdateCustomFrameworkResponse: + """Update a custom framework. + + Update a custom framework. + + :param handle: The framework handle + :type handle: str + :param version: The framework version + :type version: str + :type body: UpdateCustomFrameworkRequest + :rtype: UpdateCustomFrameworkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["handle"] = handle + + kwargs["version"] = version + + kwargs["body"] = body + + return self._update_custom_framework_endpoint.call_with_http_info(**kwargs) + + def update_findings_assignee(self, body: AssigneeRequest, ) -> AssigneeResponse: + """Assign or unassign security findings. + + Assign or unassign security findings. + You can assign up to 100 security findings per request. Set ``assignee_id`` to the unique identifier of the Datadog user you want to assign the findings to. Omit ``assignee_id`` (or set it to ``null`` ) to unassign the findings. Per-finding warnings and failures are returned in the response ``meta`` object. + + :type body: AssigneeRequest + :rtype: AssigneeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_findings_assignee_endpoint.call_with_http_info(**kwargs) + + def update_resource_evaluation_filters(self, body: UpdateResourceEvaluationFiltersRequest, ) -> UpdateResourceEvaluationFiltersResponse: + """Update resource filters. + + Update resource filters. + + :type body: UpdateResourceEvaluationFiltersRequest + :rtype: UpdateResourceEvaluationFiltersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_resource_evaluation_filters_endpoint.call_with_http_info(**kwargs) + + def update_security_filter(self, security_filter_id: str, body: SecurityFilterUpdateRequest, ) -> SecurityFilterResponse: + """Update a security filter. + + Update a specific security filter. + Returns the security filter object when the request is successful. + + :param security_filter_id: The ID of the security filter. + :type security_filter_id: str + :param body: New definition of the security filter. + :type body: SecurityFilterUpdateRequest + :rtype: SecurityFilterResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["security_filter_id"] = security_filter_id + + kwargs["body"] = body + + return self._update_security_filter_endpoint.call_with_http_info(**kwargs) + + def update_security_findings_automation_due_date_rule(self, rule_id: UUID, body: DueDateRuleUpdateRequest, ) -> DueDateRuleResponse: + """Update a due date rule. + + Update an existing due date rule by ID. + + :param rule_id: The ID of the due date rule. + :type rule_id: UUID + :type body: DueDateRuleUpdateRequest + :rtype: DueDateRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_security_findings_automation_due_date_rule_endpoint.call_with_http_info(**kwargs) + + def update_security_findings_automation_mute_rule(self, rule_id: UUID, body: MuteRuleUpdateRequest, ) -> MuteRuleResponse: + """Update a mute rule. + + Update an existing mute rule by ID. + + :param rule_id: The ID of the mute rule. + :type rule_id: UUID + :type body: MuteRuleUpdateRequest + :rtype: MuteRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_security_findings_automation_mute_rule_endpoint.call_with_http_info(**kwargs) + + def update_security_findings_automation_ticket_creation_rule(self, rule_id: UUID, body: TicketCreationRuleUpdateRequest, ) -> TicketCreationRuleResponse: + """Update a ticket creation rule. + + Update an existing ticket creation rule by ID. + + :param rule_id: The ID of the ticket creation rule. + :type rule_id: UUID + :type body: TicketCreationRuleUpdateRequest + :rtype: TicketCreationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_security_findings_automation_ticket_creation_rule_endpoint.call_with_http_info(**kwargs) + + def update_security_monitoring_critical_asset(self, critical_asset_id: str, body: SecurityMonitoringCriticalAssetUpdateRequest, ) -> SecurityMonitoringCriticalAssetResponse: + """Update a critical asset. + + Update a specific critical asset. + + :param critical_asset_id: The ID of the critical asset. + :type critical_asset_id: str + :param body: New definition of the critical asset. Supports partial updates. + :type body: SecurityMonitoringCriticalAssetUpdateRequest + :rtype: SecurityMonitoringCriticalAssetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["critical_asset_id"] = critical_asset_id + + kwargs["body"] = body + + return self._update_security_monitoring_critical_asset_endpoint.call_with_http_info(**kwargs) + + def update_security_monitoring_dataset(self, dataset_id: str, body: SecurityMonitoringDatasetUpdateRequest, ) -> None: + """Update a dataset. + + Update an existing Cloud SIEM dataset. The current version of the dataset can be + provided to detect concurrent modifications. + + :param dataset_id: The UUID of the dataset. + :type dataset_id: str + :type body: SecurityMonitoringDatasetUpdateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["dataset_id"] = dataset_id + + kwargs["body"] = body + + return self._update_security_monitoring_dataset_endpoint.call_with_http_info(**kwargs) + + def update_security_monitoring_integration_config(self, integration_config_id: str, body: SecurityMonitoringIntegrationConfigUpdateRequest, ) -> SecurityMonitoringIntegrationConfigResponse: + """Update an entity context sync configuration. + + Update an existing entity context sync configuration. Supports partial updates; only the fields provided in the request body are modified. + + :param integration_config_id: The ID of the entity context sync configuration. + :type integration_config_id: str + :param body: The fields to update on the integration configuration. + :type body: SecurityMonitoringIntegrationConfigUpdateRequest + :rtype: SecurityMonitoringIntegrationConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_config_id"] = integration_config_id + + kwargs["body"] = body + + return self._update_security_monitoring_integration_config_endpoint.call_with_http_info(**kwargs) + + def update_security_monitoring_rule(self, rule_id: str, body: SecurityMonitoringRuleUpdatePayload, ) -> SecurityMonitoringRuleResponse: + """Update an existing rule. + + Update an existing rule. When updating ``cases`` , ``queries`` or ``options`` , the whole field + must be included. For example, when modifying a query all queries must be included. + Default rules can only be updated to be enabled, to change notifications, or to update + the tags (default tags cannot be removed). + + :param rule_id: The ID of the rule. + :type rule_id: str + :type body: SecurityMonitoringRuleUpdatePayload + :rtype: SecurityMonitoringRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_security_monitoring_rule_endpoint.call_with_http_info(**kwargs) + + def update_security_monitoring_suppression(self, suppression_id: str, body: SecurityMonitoringSuppressionUpdateRequest, ) -> SecurityMonitoringSuppressionResponse: + """Update a suppression rule. + + Update a specific suppression rule. + + :param suppression_id: The ID of the suppression rule + :type suppression_id: str + :param body: New definition of the suppression rule. Supports partial updates. + :type body: SecurityMonitoringSuppressionUpdateRequest + :rtype: SecurityMonitoringSuppressionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["suppression_id"] = suppression_id + + kwargs["body"] = body + + return self._update_security_monitoring_suppression_endpoint.call_with_http_info(**kwargs) + + def validate_security_monitoring_integration_config(self, integration_config_id: str, ) -> None: + """Validate an entity context sync configuration. + + Validate the credentials currently stored on an existing entity context sync configuration. + Returns a 200 status code if the credentials are still valid against the external entity source. + + :param integration_config_id: The ID of the entity context sync configuration. + :type integration_config_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_config_id"] = integration_config_id + + return self._validate_security_monitoring_integration_config_endpoint.call_with_http_info(**kwargs) + + def validate_security_monitoring_integration_credentials(self, body: SecurityMonitoringIntegrationCredentialsValidateRequest, ) -> None: + """Validate entity context sync credentials. + + Validate a set of credentials against the external entity source before creating a sync configuration. + Returns a 200 status code if the credentials are valid. + + :param body: The credentials to validate. + :type body: SecurityMonitoringIntegrationCredentialsValidateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._validate_security_monitoring_integration_credentials_endpoint.call_with_http_info(**kwargs) + + def validate_security_monitoring_rule(self, body: Union[SecurityMonitoringRuleValidatePayload, SecurityMonitoringStandardRulePayload, SecurityMonitoringSignalRulePayload, CloudConfigurationRulePayload], ) -> None: + """Validate a detection rule. + + Validate a detection rule. + + :type body: SecurityMonitoringRuleValidatePayload + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._validate_security_monitoring_rule_endpoint.call_with_http_info(**kwargs) + + def validate_security_monitoring_suppression(self, body: SecurityMonitoringSuppressionCreateRequest, ) -> None: + """Validate a suppression rule. + + Validate a suppression rule. + + :type body: SecurityMonitoringSuppressionCreateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._validate_security_monitoring_suppression_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/sensitive_data_scanner_api.py b/datadog_api_client/v2/api/sensitive_data_scanner_api.py new file mode 100644 index 0000000000..4936e571fb --- /dev/null +++ b/datadog_api_client/v2/api/sensitive_data_scanner_api.py @@ -0,0 +1,408 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.sensitive_data_scanner_get_config_response import SensitiveDataScannerGetConfigResponse +from datadog_api_client.v2.model.sensitive_data_scanner_reorder_groups_response import SensitiveDataScannerReorderGroupsResponse +from datadog_api_client.v2.model.sensitive_data_scanner_config_request import SensitiveDataScannerConfigRequest +from datadog_api_client.v2.model.sensitive_data_scanner_create_group_response import SensitiveDataScannerCreateGroupResponse +from datadog_api_client.v2.model.sensitive_data_scanner_group_create_request import SensitiveDataScannerGroupCreateRequest +from datadog_api_client.v2.model.sensitive_data_scanner_group_delete_response import SensitiveDataScannerGroupDeleteResponse +from datadog_api_client.v2.model.sensitive_data_scanner_group_delete_request import SensitiveDataScannerGroupDeleteRequest +from datadog_api_client.v2.model.sensitive_data_scanner_group_update_response import SensitiveDataScannerGroupUpdateResponse +from datadog_api_client.v2.model.sensitive_data_scanner_group_update_request import SensitiveDataScannerGroupUpdateRequest +from datadog_api_client.v2.model.sensitive_data_scanner_create_rule_response import SensitiveDataScannerCreateRuleResponse +from datadog_api_client.v2.model.sensitive_data_scanner_rule_create_request import SensitiveDataScannerRuleCreateRequest +from datadog_api_client.v2.model.sensitive_data_scanner_rule_delete_response import SensitiveDataScannerRuleDeleteResponse +from datadog_api_client.v2.model.sensitive_data_scanner_rule_delete_request import SensitiveDataScannerRuleDeleteRequest +from datadog_api_client.v2.model.sensitive_data_scanner_rule_update_response import SensitiveDataScannerRuleUpdateResponse +from datadog_api_client.v2.model.sensitive_data_scanner_rule_update_request import SensitiveDataScannerRuleUpdateRequest +from datadog_api_client.v2.model.sensitive_data_scanner_standard_patterns_response_data import SensitiveDataScannerStandardPatternsResponseData + + +class SensitiveDataScannerApi: + """ + Create, update, delete, and retrieve sensitive data scanner groups and rules. See the `Sensitive Data Scanner page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_scanning_group_endpoint = _Endpoint( + settings={ + "response_type": (SensitiveDataScannerCreateGroupResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sensitive-data-scanner/config/groups", + "operation_id": "create_scanning_group", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SensitiveDataScannerGroupCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_scanning_rule_endpoint = _Endpoint( + settings={ + "response_type": (SensitiveDataScannerCreateRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sensitive-data-scanner/config/rules", + "operation_id": "create_scanning_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SensitiveDataScannerRuleCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_scanning_group_endpoint = _Endpoint( + settings={ + "response_type": (SensitiveDataScannerGroupDeleteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sensitive-data-scanner/config/groups/{group_id}", + "operation_id": "delete_scanning_group", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "group_id": { + "required": True, + "openapi_types": (str,), + "attribute": "group_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SensitiveDataScannerGroupDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_scanning_rule_endpoint = _Endpoint( + settings={ + "response_type": (SensitiveDataScannerRuleDeleteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sensitive-data-scanner/config/rules/{rule_id}", + "operation_id": "delete_scanning_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SensitiveDataScannerRuleDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_scanning_groups_endpoint = _Endpoint( + settings={ + "response_type": (SensitiveDataScannerGetConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sensitive-data-scanner/config", + "operation_id": "list_scanning_groups", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_standard_patterns_endpoint = _Endpoint( + settings={ + "response_type": (SensitiveDataScannerStandardPatternsResponseData,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sensitive-data-scanner/config/standard-patterns", + "operation_id": "list_standard_patterns", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._reorder_scanning_groups_endpoint = _Endpoint( + settings={ + "response_type": (SensitiveDataScannerReorderGroupsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sensitive-data-scanner/config", + "operation_id": "reorder_scanning_groups", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SensitiveDataScannerConfigRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_scanning_group_endpoint = _Endpoint( + settings={ + "response_type": (SensitiveDataScannerGroupUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sensitive-data-scanner/config/groups/{group_id}", + "operation_id": "update_scanning_group", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "group_id": { + "required": True, + "openapi_types": (str,), + "attribute": "group_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SensitiveDataScannerGroupUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_scanning_rule_endpoint = _Endpoint( + settings={ + "response_type": (SensitiveDataScannerRuleUpdateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/sensitive-data-scanner/config/rules/{rule_id}", + "operation_id": "update_scanning_rule", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SensitiveDataScannerRuleUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_scanning_group(self, body: SensitiveDataScannerGroupCreateRequest, ) -> SensitiveDataScannerCreateGroupResponse: + """Create Scanning Group. + + Create a scanning group. + The request MAY include a configuration relationship. + A rules relationship can be omitted entirely, but if it is included it MUST be + null or an empty array (rules cannot be created at the same time). + The new group will be ordered last within the configuration. + + :type body: SensitiveDataScannerGroupCreateRequest + :rtype: SensitiveDataScannerCreateGroupResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_scanning_group_endpoint.call_with_http_info(**kwargs) + + def create_scanning_rule(self, body: SensitiveDataScannerRuleCreateRequest, ) -> SensitiveDataScannerCreateRuleResponse: + """Create Scanning Rule. + + Create a scanning rule in a sensitive data scanner group, ordered last. + The posted rule MUST include a group relationship. + It MUST include either a standard_pattern relationship or a regex attribute, but not both. + If included_attributes is empty or missing, we will scan all attributes except + excluded_attributes. If both are missing, we will scan the whole event. + + :type body: SensitiveDataScannerRuleCreateRequest + :rtype: SensitiveDataScannerCreateRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_scanning_rule_endpoint.call_with_http_info(**kwargs) + + def delete_scanning_group(self, group_id: str, body: SensitiveDataScannerGroupDeleteRequest, ) -> SensitiveDataScannerGroupDeleteResponse: + """Delete Scanning Group. + + Delete a given group. + + :param group_id: The ID of a group of rules. + :type group_id: str + :type body: SensitiveDataScannerGroupDeleteRequest + :rtype: SensitiveDataScannerGroupDeleteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["group_id"] = group_id + + kwargs["body"] = body + + return self._delete_scanning_group_endpoint.call_with_http_info(**kwargs) + + def delete_scanning_rule(self, rule_id: str, body: SensitiveDataScannerRuleDeleteRequest, ) -> SensitiveDataScannerRuleDeleteResponse: + """Delete Scanning Rule. + + Delete a given rule. + + :param rule_id: The ID of the rule. + :type rule_id: str + :type body: SensitiveDataScannerRuleDeleteRequest + :rtype: SensitiveDataScannerRuleDeleteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._delete_scanning_rule_endpoint.call_with_http_info(**kwargs) + + def list_scanning_groups(self, ) -> SensitiveDataScannerGetConfigResponse: + """List Scanning Groups. + + List all the Scanning groups in your organization. + + :rtype: SensitiveDataScannerGetConfigResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_scanning_groups_endpoint.call_with_http_info(**kwargs) + + def list_standard_patterns(self, ) -> SensitiveDataScannerStandardPatternsResponseData: + """List standard patterns. + + Returns all standard patterns. + + :rtype: SensitiveDataScannerStandardPatternsResponseData + """ + kwargs: Dict[str, Any] = {} + return self._list_standard_patterns_endpoint.call_with_http_info(**kwargs) + + def reorder_scanning_groups(self, body: SensitiveDataScannerConfigRequest, ) -> SensitiveDataScannerReorderGroupsResponse: + """Reorder Groups. + + Reorder the list of groups. + + :type body: SensitiveDataScannerConfigRequest + :rtype: SensitiveDataScannerReorderGroupsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._reorder_scanning_groups_endpoint.call_with_http_info(**kwargs) + + def update_scanning_group(self, group_id: str, body: SensitiveDataScannerGroupUpdateRequest, ) -> SensitiveDataScannerGroupUpdateResponse: + """Update Scanning Group. + + Update a group, including the order of the rules. + Rules within the group are reordered by including a rules relationship. If the rules + relationship is present, its data section MUST contain linkages for all of the rules + currently in the group, and MUST NOT contain any others. + + :param group_id: The ID of a group of rules. + :type group_id: str + :type body: SensitiveDataScannerGroupUpdateRequest + :rtype: SensitiveDataScannerGroupUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["group_id"] = group_id + + kwargs["body"] = body + + return self._update_scanning_group_endpoint.call_with_http_info(**kwargs) + + def update_scanning_rule(self, rule_id: str, body: SensitiveDataScannerRuleUpdateRequest, ) -> SensitiveDataScannerRuleUpdateResponse: + """Update Scanning Rule. + + Update a scanning rule. + The request body MUST NOT include a standard_pattern relationship, as that relationship + is non-editable. Trying to edit the regex attribute of a rule with a standard_pattern + relationship will also result in an error. + + :param rule_id: The ID of the rule. + :type rule_id: str + :type body: SensitiveDataScannerRuleUpdateRequest + :rtype: SensitiveDataScannerRuleUpdateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_scanning_rule_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/service_accounts_api.py b/datadog_api_client/v2/api/service_accounts_api.py new file mode 100644 index 0000000000..960c87a813 --- /dev/null +++ b/datadog_api_client/v2/api/service_accounts_api.py @@ -0,0 +1,652 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.user_response import UserResponse +from datadog_api_client.v2.model.service_account_create_request import ServiceAccountCreateRequest +from datadog_api_client.v2.model.list_service_access_tokens_response import ListServiceAccessTokensResponse +from datadog_api_client.v2.model.personal_access_tokens_sort import PersonalAccessTokensSort +from datadog_api_client.v2.model.service_access_token_create_response import ServiceAccessTokenCreateResponse +from datadog_api_client.v2.model.service_account_access_token_create_request import ServiceAccountAccessTokenCreateRequest +from datadog_api_client.v2.model.service_access_token_response import ServiceAccessTokenResponse +from datadog_api_client.v2.model.service_account_access_token_update_request import ServiceAccountAccessTokenUpdateRequest +from datadog_api_client.v2.model.list_application_keys_response import ListApplicationKeysResponse +from datadog_api_client.v2.model.application_keys_sort import ApplicationKeysSort +from datadog_api_client.v2.model.application_key_response import ApplicationKeyResponse +from datadog_api_client.v2.model.application_key_create_request import ApplicationKeyCreateRequest +from datadog_api_client.v2.model.partial_application_key_response import PartialApplicationKeyResponse +from datadog_api_client.v2.model.application_key_update_request import ApplicationKeyUpdateRequest + + +class ServiceAccountsApi: + """ + Create, edit, and disable service accounts. See the `Service Accounts page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_service_account_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts", + "operation_id": "create_service_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ServiceAccountCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_service_account_access_token_endpoint = _Endpoint( + settings={ + "response_type": (ServiceAccessTokenCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/access_tokens", + "operation_id": "create_service_account_access_token", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ServiceAccountAccessTokenCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_service_account_application_key_endpoint = _Endpoint( + settings={ + "response_type": (ApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/application_keys", + "operation_id": "create_service_account_application_key", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ApplicationKeyCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_service_account_application_key_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/application_keys/{app_key_id}", + "operation_id": "delete_service_account_application_key", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_service_account_access_token_endpoint = _Endpoint( + settings={ + "response_type": (ServiceAccessTokenResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/access_tokens/{token_id}", + "operation_id": "get_service_account_access_token", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "token_id": { + "required": True, + "openapi_types": (str,), + "attribute": "token_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_service_account_application_key_endpoint = _Endpoint( + settings={ + "response_type": (PartialApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/application_keys/{app_key_id}", + "operation_id": "get_service_account_application_key", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_service_account_access_tokens_endpoint = _Endpoint( + settings={ + "response_type": (ListServiceAccessTokensResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/access_tokens", + "operation_id": "list_service_account_access_tokens", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (PersonalAccessTokensSort,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_service_account_application_keys_endpoint = _Endpoint( + settings={ + "response_type": (ListApplicationKeysResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/application_keys", + "operation_id": "list_service_account_application_keys", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (ApplicationKeysSort,), + "attribute": "sort", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_created_at_start": { + "openapi_types": (str,), + "attribute": "filter[created_at][start]", + "location": "query", + }, + "filter_created_at_end": { + "openapi_types": (str,), + "attribute": "filter[created_at][end]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._revoke_service_account_access_token_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/access_tokens/{token_id}", + "operation_id": "revoke_service_account_access_token", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "token_id": { + "required": True, + "openapi_types": (str,), + "attribute": "token_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._update_service_account_access_token_endpoint = _Endpoint( + settings={ + "response_type": (ServiceAccessTokenResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/access_tokens/{token_id}", + "operation_id": "update_service_account_access_token", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "token_id": { + "required": True, + "openapi_types": (str,), + "attribute": "token_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ServiceAccountAccessTokenUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_service_account_application_key_endpoint = _Endpoint( + settings={ + "response_type": (PartialApplicationKeyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/service_accounts/{service_account_id}/application_keys/{app_key_id}", + "operation_id": "update_service_account_application_key", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "service_account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "service_account_id", + "location": "path", + }, + "app_key_id": { + "required": True, + "openapi_types": (str,), + "attribute": "app_key_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ApplicationKeyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_service_account(self, body: ServiceAccountCreateRequest, ) -> UserResponse: + """Create a service account. + + Create a service account for your organization. + + :type body: ServiceAccountCreateRequest + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_service_account_endpoint.call_with_http_info(**kwargs) + + def create_service_account_access_token(self, service_account_id: str, body: ServiceAccountAccessTokenCreateRequest, ) -> ServiceAccessTokenCreateResponse: + """Create an access token for a service account. + + Create an access token for a service account. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :type body: ServiceAccountAccessTokenCreateRequest + :rtype: ServiceAccessTokenCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + kwargs["body"] = body + + return self._create_service_account_access_token_endpoint.call_with_http_info(**kwargs) + + def create_service_account_application_key(self, service_account_id: str, body: ApplicationKeyCreateRequest, ) -> ApplicationKeyResponse: + """Create an application key for this service account. + + Create an application key for this service account. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :type body: ApplicationKeyCreateRequest + :rtype: ApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + kwargs["body"] = body + + return self._create_service_account_application_key_endpoint.call_with_http_info(**kwargs) + + def delete_service_account_application_key(self, service_account_id: str, app_key_id: str, ) -> None: + """Delete an application key for this service account. + + Delete an application key owned by this service account. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :param app_key_id: The ID of the application key. + :type app_key_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + kwargs["app_key_id"] = app_key_id + + return self._delete_service_account_application_key_endpoint.call_with_http_info(**kwargs) + + def get_service_account_access_token(self, service_account_id: str, token_id: str, ) -> ServiceAccessTokenResponse: + """Get an access token for a service account. + + Get a specific access token for a service account by its ID. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :param token_id: The ID of the access token. + :type token_id: str + :rtype: ServiceAccessTokenResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + kwargs["token_id"] = token_id + + return self._get_service_account_access_token_endpoint.call_with_http_info(**kwargs) + + def get_service_account_application_key(self, service_account_id: str, app_key_id: str, ) -> PartialApplicationKeyResponse: + """Get one application key for this service account. + + Get an application key owned by this service account. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :param app_key_id: The ID of the application key. + :type app_key_id: str + :rtype: PartialApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + kwargs["app_key_id"] = app_key_id + + return self._get_service_account_application_key_endpoint.call_with_http_info(**kwargs) + + def list_service_account_access_tokens(self, service_account_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[PersonalAccessTokensSort, UnsetType]=unset, filter: Union[str, UnsetType]=unset, ) -> ListServiceAccessTokensResponse: + """List access tokens for a service account. + + List all access tokens for a specific service account. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Access token attribute used to sort results. Sort order is ascending + by default. In order to specify a descending sort, prefix the + attribute with a minus sign. + :type sort: PersonalAccessTokensSort, optional + :param filter: Filter access tokens by the specified string. + :type filter: str, optional + :rtype: ListServiceAccessTokensResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + return self._list_service_account_access_tokens_endpoint.call_with_http_info(**kwargs) + + def list_service_account_application_keys(self, service_account_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[ApplicationKeysSort, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_created_at_start: Union[str, UnsetType]=unset, filter_created_at_end: Union[str, UnsetType]=unset, ) -> ListApplicationKeysResponse: + """List application keys for this service account. + + List all application keys available for this service account. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Application key attribute used to sort results. Sort order is ascending + by default. In order to specify a descending sort, prefix the + attribute with a minus sign. + :type sort: ApplicationKeysSort, optional + :param filter: Filter application keys by the specified string. + :type filter: str, optional + :param filter_created_at_start: Only include application keys created on or after the specified date. + :type filter_created_at_start: str, optional + :param filter_created_at_end: Only include application keys created on or before the specified date. + :type filter_created_at_end: str, optional + :rtype: ListApplicationKeysResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter is not unset: + kwargs["filter"] = filter + + if filter_created_at_start is not unset: + kwargs["filter_created_at_start"] = filter_created_at_start + + if filter_created_at_end is not unset: + kwargs["filter_created_at_end"] = filter_created_at_end + + return self._list_service_account_application_keys_endpoint.call_with_http_info(**kwargs) + + def revoke_service_account_access_token(self, service_account_id: str, token_id: str, ) -> None: + """Revoke an access token for a service account. + + Revoke a specific access token for a service account. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :param token_id: The ID of the access token. + :type token_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + kwargs["token_id"] = token_id + + return self._revoke_service_account_access_token_endpoint.call_with_http_info(**kwargs) + + def update_service_account_access_token(self, service_account_id: str, token_id: str, body: ServiceAccountAccessTokenUpdateRequest, ) -> ServiceAccessTokenResponse: + """Update an access token for a service account. + + Update a specific access token for a service account. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :param token_id: The ID of the access token. + :type token_id: str + :type body: ServiceAccountAccessTokenUpdateRequest + :rtype: ServiceAccessTokenResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + kwargs["token_id"] = token_id + + kwargs["body"] = body + + return self._update_service_account_access_token_endpoint.call_with_http_info(**kwargs) + + def update_service_account_application_key(self, service_account_id: str, app_key_id: str, body: ApplicationKeyUpdateRequest, ) -> PartialApplicationKeyResponse: + """Edit an application key for this service account. + + Edit an application key owned by this service account. + + :param service_account_id: The ID of the service account. + :type service_account_id: str + :param app_key_id: The ID of the application key. + :type app_key_id: str + :type body: ApplicationKeyUpdateRequest + :rtype: PartialApplicationKeyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_account_id"] = service_account_id + + kwargs["app_key_id"] = app_key_id + + kwargs["body"] = body + + return self._update_service_account_application_key_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/service_definition_api.py b/datadog_api_client/v2/api/service_definition_api.py new file mode 100644 index 0000000000..00f6c9bffc --- /dev/null +++ b/datadog_api_client/v2/api/service_definition_api.py @@ -0,0 +1,258 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.service_definitions_list_response import ServiceDefinitionsListResponse +from datadog_api_client.v2.model.service_definition_schema_versions import ServiceDefinitionSchemaVersions +from datadog_api_client.v2.model.service_definition_data import ServiceDefinitionData +from datadog_api_client.v2.model.service_definition_create_response import ServiceDefinitionCreateResponse +from datadog_api_client.v2.model.service_definitions_create_request import ServiceDefinitionsCreateRequest +from datadog_api_client.v2.model.service_definition_v2_dot2 import ServiceDefinitionV2Dot2 +from datadog_api_client.v2.model.service_definition_v2_dot1 import ServiceDefinitionV2Dot1 +from datadog_api_client.v2.model.service_definition_v2 import ServiceDefinitionV2 +from datadog_api_client.v2.model.service_definition_get_response import ServiceDefinitionGetResponse + + +class ServiceDefinitionApi: + """ + API to create, update, retrieve and delete service definitions. + Note: Service Catalog `v3.0 schema `_ has new API endpoints documented under `Software Catalog `_. Use the following Service Definition endpoints for v2.2 and earlier. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_or_update_service_definitions_endpoint = _Endpoint( + settings={ + "response_type": (ServiceDefinitionCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/services/definitions", + "operation_id": "create_or_update_service_definitions", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ServiceDefinitionsCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_service_definition_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/services/definitions/{service_name}", + "operation_id": "delete_service_definition", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "service_name": { + "required": True, + "openapi_types": (str,), + "attribute": "service_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_service_definition_endpoint = _Endpoint( + settings={ + "response_type": (ServiceDefinitionGetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/services/definitions/{service_name}", + "operation_id": "get_service_definition", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "service_name": { + "required": True, + "openapi_types": (str,), + "attribute": "service_name", + "location": "path", + }, + "schema_version": { + "openapi_types": (ServiceDefinitionSchemaVersions,), + "attribute": "schema_version", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_service_definitions_endpoint = _Endpoint( + settings={ + "response_type": (ServiceDefinitionsListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/services/definitions", + "operation_id": "list_service_definitions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "schema_version": { + "openapi_types": (ServiceDefinitionSchemaVersions,), + "attribute": "schema_version", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def create_or_update_service_definitions(self, body: Union[ServiceDefinitionsCreateRequest, ServiceDefinitionV2Dot2, ServiceDefinitionV2Dot1, ServiceDefinitionV2, str], ) -> ServiceDefinitionCreateResponse: + """Create or update service definition. + + Create or update service definition in the Datadog Service Catalog. + + :param body: Service Definition YAML/JSON. + :type body: ServiceDefinitionsCreateRequest + :rtype: ServiceDefinitionCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_or_update_service_definitions_endpoint.call_with_http_info(**kwargs) + + def delete_service_definition(self, service_name: str, ) -> None: + """Delete a single service definition. + + Delete a single service definition in the Datadog Service Catalog. + + :param service_name: The name of the service. + :type service_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["service_name"] = service_name + + return self._delete_service_definition_endpoint.call_with_http_info(**kwargs) + + def get_service_definition(self, service_name: str, *, schema_version: Union[ServiceDefinitionSchemaVersions, UnsetType]=unset, ) -> ServiceDefinitionGetResponse: + """Get a single service definition. + + Get a single service definition from the Datadog Service Catalog. + + :param service_name: The name of the service. + :type service_name: str + :param schema_version: The schema version desired in the response. + :type schema_version: ServiceDefinitionSchemaVersions, optional + :rtype: ServiceDefinitionGetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["service_name"] = service_name + + if schema_version is not unset: + kwargs["schema_version"] = schema_version + + return self._get_service_definition_endpoint.call_with_http_info(**kwargs) + + def list_service_definitions(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, schema_version: Union[ServiceDefinitionSchemaVersions, UnsetType]=unset, ) -> ServiceDefinitionsListResponse: + """Get all service definitions. + + Get a list of all service definitions from the Datadog Service Catalog. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param schema_version: The schema version desired in the response. + :type schema_version: ServiceDefinitionSchemaVersions, optional + :rtype: ServiceDefinitionsListResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if schema_version is not unset: + kwargs["schema_version"] = schema_version + + return self._list_service_definitions_endpoint.call_with_http_info(**kwargs) + + def list_service_definitions_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, schema_version: Union[ServiceDefinitionSchemaVersions, UnsetType]=unset, ) -> collections.abc.Iterable[ServiceDefinitionData]: + """Get all service definitions. + + Provide a paginated version of :meth:`list_service_definitions`, returning all items. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param schema_version: The schema version desired in the response. + :type schema_version: ServiceDefinitionSchemaVersions, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[ServiceDefinitionData] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if schema_version is not unset: + kwargs["schema_version"] = schema_version + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_service_definitions_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/service_level_objectives_api.py b/datadog_api_client/v2/api/service_level_objectives_api.py new file mode 100644 index 0000000000..e8d0b60e0b --- /dev/null +++ b/datadog_api_client/v2/api/service_level_objectives_api.py @@ -0,0 +1,228 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.slo_report_post_response import SLOReportPostResponse +from datadog_api_client.v2.model.slo_report_create_request import SloReportCreateRequest +from datadog_api_client.v2.model.slo_report_status_get_response import SLOReportStatusGetResponse +from datadog_api_client.v2.model.slo_status_response import SloStatusResponse + + +class ServiceLevelObjectivesApi: + """ + `Service Level Objectives `_ + (SLOs) are a key part of the site reliability engineering toolkit. + SLOs provide a framework for defining clear targets around application performance, + which ultimately help teams provide a consistent customer experience, + balance feature development with platform stability, + and improve communication with internal and external users. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_slo_report_job_endpoint = _Endpoint( + settings={ + "response_type": (SLOReportPostResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/slo/report", + "operation_id": "create_slo_report_job", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SloReportCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_slo_report_endpoint = _Endpoint( + settings={ + "response_type": (str,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/slo/report/{report_id}/download", + "operation_id": "get_slo_report", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "report_id": { + "required": True, + "openapi_types": (str,), + "attribute": "report_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["text/csv", "application/json"], + }, + api_client=api_client, + ) + + self._get_slo_report_job_status_endpoint = _Endpoint( + settings={ + "response_type": (SLOReportStatusGetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/slo/report/{report_id}/status", + "operation_id": "get_slo_report_job_status", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "report_id": { + "required": True, + "openapi_types": (str,), + "attribute": "report_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_slo_status_endpoint = _Endpoint( + settings={ + "response_type": (SloStatusResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/slo/{slo_id}/status", + "operation_id": "get_slo_status", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "slo_id": { + "required": True, + "openapi_types": (str,), + "attribute": "slo_id", + "location": "path", + }, + "from_ts": { + "required": True, + "openapi_types": (int,), + "attribute": "from_ts", + "location": "query", + }, + "to_ts": { + "required": True, + "openapi_types": (int,), + "attribute": "to_ts", + "location": "query", + }, + "disable_corrections": { + "openapi_types": (bool,), + "attribute": "disable_corrections", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def create_slo_report_job(self, body: SloReportCreateRequest, ) -> SLOReportPostResponse: + """Create a new SLO report. **Deprecated**. + + Create a job to generate an SLO report. The report job is processed asynchronously and eventually results in a CSV report being available for download. + + Check the status of the job and download the CSV report using the returned ``report_id``. + + :param body: Create SLO report job request body. + :type body: SloReportCreateRequest + :rtype: SLOReportPostResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + warnings.warn("create_slo_report_job is deprecated", DeprecationWarning, stacklevel=2) + return self._create_slo_report_job_endpoint.call_with_http_info(**kwargs) + + def get_slo_report(self, report_id: str, ) -> str: + """Get SLO report. **Deprecated**. + + Download an SLO report. This can only be performed after the report job has completed. + + Reports are not guaranteed to exist indefinitely. Datadog recommends that you download the report as soon as it is available. + + :param report_id: The ID of the report job. + :type report_id: str + :rtype: str + """ + kwargs: Dict[str, Any] = {} + kwargs["report_id"] = report_id + + warnings.warn("get_slo_report is deprecated", DeprecationWarning, stacklevel=2) + return self._get_slo_report_endpoint.call_with_http_info(**kwargs) + + def get_slo_report_job_status(self, report_id: str, ) -> SLOReportStatusGetResponse: + """Get SLO report status. **Deprecated**. + + Get the status of the SLO report job. + + :param report_id: The ID of the report job. + :type report_id: str + :rtype: SLOReportStatusGetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["report_id"] = report_id + + warnings.warn("get_slo_report_job_status is deprecated", DeprecationWarning, stacklevel=2) + return self._get_slo_report_job_status_endpoint.call_with_http_info(**kwargs) + + def get_slo_status(self, slo_id: str, from_ts: int, to_ts: int, *, disable_corrections: Union[bool, UnsetType]=unset, ) -> SloStatusResponse: + """Get SLO status. + + Get the status of a Service Level Objective (SLO) for a given time period. + + This endpoint returns the current SLI value, error budget remaining, and other status information for the specified SLO. + + :param slo_id: The ID of the SLO. + :type slo_id: str + :param from_ts: The starting timestamp for the SLO status query in epoch seconds. + :type from_ts: int + :param to_ts: The ending timestamp for the SLO status query in epoch seconds. + :type to_ts: int + :param disable_corrections: Whether to exclude correction windows from the SLO status calculation. Defaults to false. + :type disable_corrections: bool, optional + :rtype: SloStatusResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["slo_id"] = slo_id + + kwargs["from_ts"] = from_ts + + kwargs["to_ts"] = to_ts + + if disable_corrections is not unset: + kwargs["disable_corrections"] = disable_corrections + + return self._get_slo_status_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/service_now_integration_api.py b/datadog_api_client/v2/api/service_now_integration_api.py new file mode 100644 index 0000000000..3894c74bb8 --- /dev/null +++ b/datadog_api_client/v2/api/service_now_integration_api.py @@ -0,0 +1,361 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.service_now_assignment_groups_response import ServiceNowAssignmentGroupsResponse +from datadog_api_client.v2.model.service_now_business_services_response import ServiceNowBusinessServicesResponse +from datadog_api_client.v2.model.service_now_templates_response import ServiceNowTemplatesResponse +from datadog_api_client.v2.model.service_now_template_response import ServiceNowTemplateResponse +from datadog_api_client.v2.model.service_now_template_create_request import ServiceNowTemplateCreateRequest +from datadog_api_client.v2.model.service_now_template_update_request import ServiceNowTemplateUpdateRequest +from datadog_api_client.v2.model.service_now_instances_response import ServiceNowInstancesResponse +from datadog_api_client.v2.model.service_now_users_response import ServiceNowUsersResponse + + +class ServiceNowIntegrationApi: + """ + Manage your ServiceNow Integration. ServiceNow is a cloud-based platform that helps organizations manage digital workflows for enterprise operations. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_service_now_template_endpoint = _Endpoint( + settings={ + "response_type": (ServiceNowTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/servicenow/handles", + "operation_id": "create_service_now_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ServiceNowTemplateCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_service_now_template_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/servicenow/handles/{template_id}", + "operation_id": "delete_service_now_template", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_service_now_template_endpoint = _Endpoint( + settings={ + "response_type": (ServiceNowTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/servicenow/handles/{template_id}", + "operation_id": "get_service_now_template", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_service_now_assignment_groups_endpoint = _Endpoint( + settings={ + "response_type": (ServiceNowAssignmentGroupsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/servicenow/assignment_groups/{instance_id}", + "operation_id": "list_service_now_assignment_groups", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "instance_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "instance_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_service_now_business_services_endpoint = _Endpoint( + settings={ + "response_type": (ServiceNowBusinessServicesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/servicenow/business_services/{instance_id}", + "operation_id": "list_service_now_business_services", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "instance_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "instance_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_service_now_instances_endpoint = _Endpoint( + settings={ + "response_type": (ServiceNowInstancesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/servicenow/instances", + "operation_id": "list_service_now_instances", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_service_now_templates_endpoint = _Endpoint( + settings={ + "response_type": (ServiceNowTemplatesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/servicenow/handles", + "operation_id": "list_service_now_templates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_service_now_users_endpoint = _Endpoint( + settings={ + "response_type": (ServiceNowUsersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/servicenow/users/{instance_id}", + "operation_id": "list_service_now_users", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "instance_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "instance_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_service_now_template_endpoint = _Endpoint( + settings={ + "response_type": (ServiceNowTemplateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/servicenow/handles/{template_id}", + "operation_id": "update_service_now_template", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "template_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (ServiceNowTemplateUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_service_now_template(self, body: ServiceNowTemplateCreateRequest, ) -> ServiceNowTemplateResponse: + """Create ServiceNow template. + + Create a new ServiceNow template. + + :type body: ServiceNowTemplateCreateRequest + :rtype: ServiceNowTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_service_now_template_endpoint.call_with_http_info(**kwargs) + + def delete_service_now_template(self, template_id: UUID, ) -> None: + """Delete ServiceNow template. + + Delete a ServiceNow template by ID. + + :param template_id: The ID of the ServiceNow template to delete + :type template_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + return self._delete_service_now_template_endpoint.call_with_http_info(**kwargs) + + def get_service_now_template(self, template_id: UUID, ) -> ServiceNowTemplateResponse: + """Get ServiceNow template. + + Get a ServiceNow template by ID. + + :param template_id: The ID of the ServiceNow template to retrieve + :type template_id: UUID + :rtype: ServiceNowTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + return self._get_service_now_template_endpoint.call_with_http_info(**kwargs) + + def list_service_now_assignment_groups(self, instance_id: UUID, ) -> ServiceNowAssignmentGroupsResponse: + """List ServiceNow assignment groups. + + Get all assignment groups for a ServiceNow instance. + + :param instance_id: The ID of the ServiceNow instance + :type instance_id: UUID + :rtype: ServiceNowAssignmentGroupsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["instance_id"] = instance_id + + return self._list_service_now_assignment_groups_endpoint.call_with_http_info(**kwargs) + + def list_service_now_business_services(self, instance_id: UUID, ) -> ServiceNowBusinessServicesResponse: + """List ServiceNow business services. + + Get all business services for a ServiceNow instance. + + :param instance_id: The ID of the ServiceNow instance + :type instance_id: UUID + :rtype: ServiceNowBusinessServicesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["instance_id"] = instance_id + + return self._list_service_now_business_services_endpoint.call_with_http_info(**kwargs) + + def list_service_now_instances(self, ) -> ServiceNowInstancesResponse: + """List ServiceNow instances. + + Get all ServiceNow instances for the organization. + + :rtype: ServiceNowInstancesResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_service_now_instances_endpoint.call_with_http_info(**kwargs) + + def list_service_now_templates(self, ) -> ServiceNowTemplatesResponse: + """List ServiceNow templates. + + Get all ServiceNow templates for the organization. + + :rtype: ServiceNowTemplatesResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_service_now_templates_endpoint.call_with_http_info(**kwargs) + + def list_service_now_users(self, instance_id: UUID, ) -> ServiceNowUsersResponse: + """List ServiceNow users. + + Get all users for a ServiceNow instance. + + :param instance_id: The ID of the ServiceNow instance + :type instance_id: UUID + :rtype: ServiceNowUsersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["instance_id"] = instance_id + + return self._list_service_now_users_endpoint.call_with_http_info(**kwargs) + + def update_service_now_template(self, template_id: UUID, body: ServiceNowTemplateUpdateRequest, ) -> ServiceNowTemplateResponse: + """Update ServiceNow template. + + Update a ServiceNow template by ID. + + :param template_id: The ID of the ServiceNow template to update + :type template_id: UUID + :type body: ServiceNowTemplateUpdateRequest + :rtype: ServiceNowTemplateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + kwargs["body"] = body + + return self._update_service_now_template_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/slack_integration_api.py b/datadog_api_client/v2/api/slack_integration_api.py new file mode 100644 index 0000000000..03f5f7ce3e --- /dev/null +++ b/datadog_api_client/v2/api/slack_integration_api.py @@ -0,0 +1,71 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.slack_user_bindings_response import SlackUserBindingsResponse + + +class SlackIntegrationApi: + """ + Configure your `Datadog Slack integration `_ + directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._list_slack_user_bindings_endpoint = _Endpoint( + settings={ + "response_type": (SlackUserBindingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/slack/user-bindings", + "operation_id": "list_slack_user_bindings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "user_uuid", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def list_slack_user_bindings(self, user_uuid: UUID, ) -> SlackUserBindingsResponse: + """List Slack user bindings. + + List all Slack user bindings for a given Datadog user from the Datadog Slack integration. + + :param user_uuid: The UUID of the Datadog user to list Slack bindings for. + :type user_uuid: UUID + :rtype: SlackUserBindingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_uuid"] = user_uuid + + return self._list_slack_user_bindings_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/software_catalog_api.py b/datadog_api_client/v2/api/software_catalog_api.py new file mode 100644 index 0000000000..da64e5377f --- /dev/null +++ b/datadog_api_client/v2/api/software_catalog_api.py @@ -0,0 +1,698 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_entity_catalog_response import ListEntityCatalogResponse +from datadog_api_client.v2.model.relation_type import RelationType +from datadog_api_client.v2.model.include_type import IncludeType +from datadog_api_client.v2.model.entity_data import EntityData +from datadog_api_client.v2.model.upsert_catalog_entity_response import UpsertCatalogEntityResponse +from datadog_api_client.v2.model.upsert_catalog_entity_request import UpsertCatalogEntityRequest +from datadog_api_client.v2.model.entity_v3 import EntityV3 +from datadog_api_client.v2.model.entity_response_array import EntityResponseArray +from datadog_api_client.v2.model.list_kind_catalog_response import ListKindCatalogResponse +from datadog_api_client.v2.model.kind_data import KindData +from datadog_api_client.v2.model.upsert_catalog_kind_response import UpsertCatalogKindResponse +from datadog_api_client.v2.model.upsert_catalog_kind_request import UpsertCatalogKindRequest +from datadog_api_client.v2.model.kind_obj import KindObj +from datadog_api_client.v2.model.list_relation_catalog_response import ListRelationCatalogResponse +from datadog_api_client.v2.model.relation_include_type import RelationIncludeType +from datadog_api_client.v2.model.relation_response import RelationResponse + + +class SoftwareCatalogApi: + """ + API to create, update, retrieve, and delete Software Catalog entities. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_catalog_entity_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/catalog/entity/{entity_id}", + "operation_id": "delete_catalog_entity", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "entity_id": { + "required": True, + "openapi_types": (str,), + "attribute": "entity_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_catalog_kind_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/catalog/kind/{kind_id}", + "operation_id": "delete_catalog_kind", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "kind_id": { + "required": True, + "openapi_types": (str,), + "attribute": "kind_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._list_catalog_entity_endpoint = _Endpoint( + settings={ + "response_type": (ListEntityCatalogResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/catalog/entity", + "operation_id": "list_catalog_entity", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "filter_id": { + "openapi_types": (str,), + "attribute": "filter[id]", + "location": "query", + }, + "filter_ref": { + "openapi_types": (str,), + "attribute": "filter[ref]", + "location": "query", + }, + "filter_name": { + "openapi_types": (str,), + "attribute": "filter[name]", + "location": "query", + }, + "filter_kind": { + "openapi_types": (str,), + "attribute": "filter[kind]", + "location": "query", + }, + "filter_owner": { + "openapi_types": (str,), + "attribute": "filter[owner]", + "location": "query", + }, + "filter_relation_type": { + "openapi_types": (RelationType,), + "attribute": "filter[relation][type]", + "location": "query", + }, + "filter_exclude_snapshot": { + "openapi_types": (str,), + "attribute": "filter[exclude_snapshot]", + "location": "query", + }, + "include": { + "openapi_types": (IncludeType,), + "attribute": "include", + "location": "query", + }, + "include_discovered": { + "openapi_types": (bool,), + "attribute": "includeDiscovered", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_catalog_kind_endpoint = _Endpoint( + settings={ + "response_type": (ListKindCatalogResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/catalog/kind", + "operation_id": "list_catalog_kind", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "filter_id": { + "openapi_types": (str,), + "attribute": "filter[id]", + "location": "query", + }, + "filter_name": { + "openapi_types": (str,), + "attribute": "filter[name]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_catalog_relation_endpoint = _Endpoint( + settings={ + "response_type": (ListRelationCatalogResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/catalog/relation", + "operation_id": "list_catalog_relation", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "filter_type": { + "openapi_types": (RelationType,), + "attribute": "filter[type]", + "location": "query", + }, + "filter_from_ref": { + "openapi_types": (str,), + "attribute": "filter[from_ref]", + "location": "query", + }, + "filter_to_ref": { + "openapi_types": (str,), + "attribute": "filter[to_ref]", + "location": "query", + }, + "include": { + "openapi_types": (RelationIncludeType,), + "attribute": "include", + "location": "query", + }, + "include_discovered": { + "openapi_types": (bool,), + "attribute": "includeDiscovered", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._preview_catalog_entities_endpoint = _Endpoint( + settings={ + "response_type": (EntityResponseArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/catalog/entity/preview", + "operation_id": "preview_catalog_entities", + "http_method": "POST", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._upsert_catalog_entity_endpoint = _Endpoint( + settings={ + "response_type": (UpsertCatalogEntityResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/catalog/entity", + "operation_id": "upsert_catalog_entity", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UpsertCatalogEntityRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._upsert_catalog_kind_endpoint = _Endpoint( + settings={ + "response_type": (UpsertCatalogKindResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/catalog/kind", + "operation_id": "upsert_catalog_kind", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UpsertCatalogKindRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def delete_catalog_entity(self, entity_id: str, ) -> None: + """Delete a single entity. + + Delete a single entity in Software Catalog. + + :param entity_id: UUID or Entity Ref. + :type entity_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["entity_id"] = entity_id + + return self._delete_catalog_entity_endpoint.call_with_http_info(**kwargs) + + def delete_catalog_kind(self, kind_id: str, ) -> None: + """Delete a single kind. + + Delete a single kind in Software Catalog. + + :param kind_id: Entity kind. + :type kind_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["kind_id"] = kind_id + + return self._delete_catalog_kind_endpoint.call_with_http_info(**kwargs) + + def list_catalog_entity(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_id: Union[str, UnsetType]=unset, filter_ref: Union[str, UnsetType]=unset, filter_name: Union[str, UnsetType]=unset, filter_kind: Union[str, UnsetType]=unset, filter_owner: Union[str, UnsetType]=unset, filter_relation_type: Union[RelationType, UnsetType]=unset, filter_exclude_snapshot: Union[str, UnsetType]=unset, include: Union[IncludeType, UnsetType]=unset, include_discovered: Union[bool, UnsetType]=unset, ) -> ListEntityCatalogResponse: + """Get a list of entities. + + Get a list of entities from Software Catalog. + + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of entities in the response. + :type page_limit: int, optional + :param filter_id: Filter entities by UUID. + :type filter_id: str, optional + :param filter_ref: Filter entities by reference + :type filter_ref: str, optional + :param filter_name: Filter entities by name. + :type filter_name: str, optional + :param filter_kind: Filter entities by kind. + :type filter_kind: str, optional + :param filter_owner: Filter entities by owner. + :type filter_owner: str, optional + :param filter_relation_type: Filter entities by relation type. + :type filter_relation_type: RelationType, optional + :param filter_exclude_snapshot: Filter entities by excluding snapshotted entities. + :type filter_exclude_snapshot: str, optional + :param include: Include relationship data. + :type include: IncludeType, optional + :param include_discovered: If true, includes discovered services from APM and USM that do not have entity definitions. + :type include_discovered: bool, optional + :rtype: ListEntityCatalogResponse + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter_ref is not unset: + kwargs["filter_ref"] = filter_ref + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + if filter_kind is not unset: + kwargs["filter_kind"] = filter_kind + + if filter_owner is not unset: + kwargs["filter_owner"] = filter_owner + + if filter_relation_type is not unset: + kwargs["filter_relation_type"] = filter_relation_type + + if filter_exclude_snapshot is not unset: + kwargs["filter_exclude_snapshot"] = filter_exclude_snapshot + + if include is not unset: + kwargs["include"] = include + + if include_discovered is not unset: + kwargs["include_discovered"] = include_discovered + + return self._list_catalog_entity_endpoint.call_with_http_info(**kwargs) + + def list_catalog_entity_with_pagination(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_id: Union[str, UnsetType]=unset, filter_ref: Union[str, UnsetType]=unset, filter_name: Union[str, UnsetType]=unset, filter_kind: Union[str, UnsetType]=unset, filter_owner: Union[str, UnsetType]=unset, filter_relation_type: Union[RelationType, UnsetType]=unset, filter_exclude_snapshot: Union[str, UnsetType]=unset, include: Union[IncludeType, UnsetType]=unset, include_discovered: Union[bool, UnsetType]=unset, ) -> collections.abc.Iterable[EntityData]: + """Get a list of entities. + + Provide a paginated version of :meth:`list_catalog_entity`, returning all items. + + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of entities in the response. + :type page_limit: int, optional + :param filter_id: Filter entities by UUID. + :type filter_id: str, optional + :param filter_ref: Filter entities by reference + :type filter_ref: str, optional + :param filter_name: Filter entities by name. + :type filter_name: str, optional + :param filter_kind: Filter entities by kind. + :type filter_kind: str, optional + :param filter_owner: Filter entities by owner. + :type filter_owner: str, optional + :param filter_relation_type: Filter entities by relation type. + :type filter_relation_type: RelationType, optional + :param filter_exclude_snapshot: Filter entities by excluding snapshotted entities. + :type filter_exclude_snapshot: str, optional + :param include: Include relationship data. + :type include: IncludeType, optional + :param include_discovered: If true, includes discovered services from APM and USM that do not have entity definitions. + :type include_discovered: bool, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[EntityData] + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter_ref is not unset: + kwargs["filter_ref"] = filter_ref + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + if filter_kind is not unset: + kwargs["filter_kind"] = filter_kind + + if filter_owner is not unset: + kwargs["filter_owner"] = filter_owner + + if filter_relation_type is not unset: + kwargs["filter_relation_type"] = filter_relation_type + + if filter_exclude_snapshot is not unset: + kwargs["filter_exclude_snapshot"] = filter_exclude_snapshot + + if include is not unset: + kwargs["include"] = include + + if include_discovered is not unset: + kwargs["include_discovered"] = include_discovered + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 100) + endpoint = self._list_catalog_entity_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_catalog_kind(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_id: Union[str, UnsetType]=unset, filter_name: Union[str, UnsetType]=unset, ) -> ListKindCatalogResponse: + """Get a list of entity kinds. + + Get a list of entity kinds from Software Catalog. + + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of kinds in the response. + :type page_limit: int, optional + :param filter_id: Filter entities by UUID. + :type filter_id: str, optional + :param filter_name: Filter entities by name. + :type filter_name: str, optional + :rtype: ListKindCatalogResponse + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + return self._list_catalog_kind_endpoint.call_with_http_info(**kwargs) + + def list_catalog_kind_with_pagination(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_id: Union[str, UnsetType]=unset, filter_name: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[KindData]: + """Get a list of entity kinds. + + Provide a paginated version of :meth:`list_catalog_kind`, returning all items. + + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of kinds in the response. + :type page_limit: int, optional + :param filter_id: Filter entities by UUID. + :type filter_id: str, optional + :param filter_name: Filter entities by name. + :type filter_name: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[KindData] + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_id is not unset: + kwargs["filter_id"] = filter_id + + if filter_name is not unset: + kwargs["filter_name"] = filter_name + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 100) + endpoint = self._list_catalog_kind_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_catalog_relation(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_type: Union[RelationType, UnsetType]=unset, filter_from_ref: Union[str, UnsetType]=unset, filter_to_ref: Union[str, UnsetType]=unset, include: Union[RelationIncludeType, UnsetType]=unset, include_discovered: Union[bool, UnsetType]=unset, ) -> ListRelationCatalogResponse: + """Get a list of entity relations. + + Get a list of entity relations from Software Catalog. + + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of relations in the response. + :type page_limit: int, optional + :param filter_type: Filter relations by type. + :type filter_type: RelationType, optional + :param filter_from_ref: Filter relations by the reference of the first entity in the relation. + :type filter_from_ref: str, optional + :param filter_to_ref: Filter relations by the reference of the second entity in the relation. + :type filter_to_ref: str, optional + :param include: Include relationship data. + :type include: RelationIncludeType, optional + :param include_discovered: If true, includes relationships discovered by APM and USM. + :type include_discovered: bool, optional + :rtype: ListRelationCatalogResponse + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_type is not unset: + kwargs["filter_type"] = filter_type + + if filter_from_ref is not unset: + kwargs["filter_from_ref"] = filter_from_ref + + if filter_to_ref is not unset: + kwargs["filter_to_ref"] = filter_to_ref + + if include is not unset: + kwargs["include"] = include + + if include_discovered is not unset: + kwargs["include_discovered"] = include_discovered + + return self._list_catalog_relation_endpoint.call_with_http_info(**kwargs) + + def list_catalog_relation_with_pagination(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_type: Union[RelationType, UnsetType]=unset, filter_from_ref: Union[str, UnsetType]=unset, filter_to_ref: Union[str, UnsetType]=unset, include: Union[RelationIncludeType, UnsetType]=unset, include_discovered: Union[bool, UnsetType]=unset, ) -> collections.abc.Iterable[RelationResponse]: + """Get a list of entity relations. + + Provide a paginated version of :meth:`list_catalog_relation`, returning all items. + + :param page_offset: Specific offset to use as the beginning of the returned page. + :type page_offset: int, optional + :param page_limit: Maximum number of relations in the response. + :type page_limit: int, optional + :param filter_type: Filter relations by type. + :type filter_type: RelationType, optional + :param filter_from_ref: Filter relations by the reference of the first entity in the relation. + :type filter_from_ref: str, optional + :param filter_to_ref: Filter relations by the reference of the second entity in the relation. + :type filter_to_ref: str, optional + :param include: Include relationship data. + :type include: RelationIncludeType, optional + :param include_discovered: If true, includes relationships discovered by APM and USM. + :type include_discovered: bool, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[RelationResponse] + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_type is not unset: + kwargs["filter_type"] = filter_type + + if filter_from_ref is not unset: + kwargs["filter_from_ref"] = filter_from_ref + + if filter_to_ref is not unset: + kwargs["filter_to_ref"] = filter_to_ref + + if include is not unset: + kwargs["include"] = include + + if include_discovered is not unset: + kwargs["include_discovered"] = include_discovered + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 100) + endpoint = self._list_catalog_relation_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def preview_catalog_entities(self, ) -> EntityResponseArray: + """Preview catalog entities. + + :rtype: EntityResponseArray + """ + kwargs: Dict[str, Any] = {} + return self._preview_catalog_entities_endpoint.call_with_http_info(**kwargs) + + def upsert_catalog_entity(self, body: Union[UpsertCatalogEntityRequest, EntityV3, str], ) -> UpsertCatalogEntityResponse: + """Create or update entities. + + Create or update entities in Software Catalog. + + :param body: Entity YAML or JSON. + :type body: UpsertCatalogEntityRequest + :rtype: UpsertCatalogEntityResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._upsert_catalog_entity_endpoint.call_with_http_info(**kwargs) + + def upsert_catalog_kind(self, body: Union[UpsertCatalogKindRequest, KindObj, str], ) -> UpsertCatalogKindResponse: + """Create or update kinds. + + Create or update kinds in Software Catalog. + + :param body: Kind YAML or JSON. + :type body: UpsertCatalogKindRequest + :rtype: UpsertCatalogKindResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._upsert_catalog_kind_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/spa_api.py b/datadog_api_client/v2/api/spa_api.py new file mode 100644 index 0000000000..2cc3022faa --- /dev/null +++ b/datadog_api_client/v2/api/spa_api.py @@ -0,0 +1,137 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.recommendation_document import RecommendationDocument + + +class SpaApi: + """ + SPA (Spark Pod Autosizing) API. Provides resource recommendations and cost insights to help optimize Spark job configurations. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_spa_recommendations_endpoint = _Endpoint( + settings={ + "response_type": (RecommendationDocument,), + "auth": ["AuthZ"], + "endpoint_path": "/api/v2/spa/recommendations/{service}", + "operation_id": "get_spa_recommendations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "bypass_cache": { + "openapi_types": (str,), + "attribute": "bypass_cache", + "location": "query", + }, + "service": { + "required": True, + "openapi_types": (str,), + "attribute": "service", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_spa_recommendations_with_shard_endpoint = _Endpoint( + settings={ + "response_type": (RecommendationDocument,), + "auth": ["AuthZ"], + "endpoint_path": "/api/v2/spa/recommendations/{service}/{shard}", + "operation_id": "get_spa_recommendations_with_shard", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "shard": { + "required": True, + "openapi_types": (str,), + "attribute": "shard", + "location": "path", + }, + "service": { + "required": True, + "openapi_types": (str,), + "attribute": "service", + "location": "path", + }, + "bypass_cache": { + "openapi_types": (str,), + "attribute": "bypass_cache", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def get_spa_recommendations(self, service: str, *, bypass_cache: Union[str, UnsetType]=unset, ) -> RecommendationDocument: + """Get SPA Recommendations. + + This endpoint is currently experimental and restricted to Datadog internal use only. Retrieve resource recommendations for a Spark job. The caller (Spark Gateway or DJM UI) provides a service name and SPA returns structured recommendations for driver and executor resources. The version with a shard should be preferred, where possible, as it gives more accurate results. + + :param service: The service name for a spark job. + :type service: str + :param bypass_cache: The recommendation service should not use its metrics cache. + :type bypass_cache: str, optional + :rtype: RecommendationDocument + """ + kwargs: Dict[str, Any] = {} + if bypass_cache is not unset: + kwargs["bypass_cache"] = bypass_cache + + kwargs["service"] = service + + return self._get_spa_recommendations_endpoint.call_with_http_info(**kwargs) + + def get_spa_recommendations_with_shard(self, shard: str, service: str, *, bypass_cache: Union[str, UnsetType]=unset, ) -> RecommendationDocument: + """Get SPA Recommendations with a shard parameter. + + This endpoint is currently experimental and restricted to Datadog internal use only. Retrieve resource recommendations for a Spark job. The caller (Spark Gateway or DJM UI) provides a service name and shard identifier, and SPA returns structured recommendations for driver and executor resources. + + :param shard: The shard tag for a spark job, which differentiates jobs within the same service that have different resource needs + :type shard: str + :param service: The service name for a spark job + :type service: str + :param bypass_cache: The recommendation service should not use its metrics cache. + :type bypass_cache: str, optional + :rtype: RecommendationDocument + """ + kwargs: Dict[str, Any] = {} + kwargs["shard"] = shard + + kwargs["service"] = service + + if bypass_cache is not unset: + kwargs["bypass_cache"] = bypass_cache + + return self._get_spa_recommendations_with_shard_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/spans_api.py b/datadog_api_client/v2/api/spans_api.py new file mode 100644 index 0000000000..d01a38f493 --- /dev/null +++ b/datadog_api_client/v2/api/spans_api.py @@ -0,0 +1,288 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.spans_aggregate_response import SpansAggregateResponse +from datadog_api_client.v2.model.spans_aggregate_request import SpansAggregateRequest +from datadog_api_client.v2.model.spans_list_response import SpansListResponse +from datadog_api_client.v2.model.spans_sort import SpansSort +from datadog_api_client.v2.model.span import Span +from datadog_api_client.v2.model.spans_list_request import SpansListRequest + + +class SpansApi: + """ + Search and aggregate your spans from your Datadog platform over HTTP. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._aggregate_spans_endpoint = _Endpoint( + settings={ + "response_type": (SpansAggregateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/spans/analytics/aggregate", + "operation_id": "aggregate_spans", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SpansAggregateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_spans_endpoint = _Endpoint( + settings={ + "response_type": (SpansListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/spans/events/search", + "operation_id": "list_spans", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SpansListRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._list_spans_get_endpoint = _Endpoint( + settings={ + "response_type": (SpansListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/spans/events", + "operation_id": "list_spans_get", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_from": { + "openapi_types": (str,), + "attribute": "filter[from]", + "location": "query", + }, + "filter_to": { + "openapi_types": (str,), + "attribute": "filter[to]", + "location": "query", + }, + "sort": { + "openapi_types": (SpansSort,), + "attribute": "sort", + "location": "query", + }, + "page_cursor": { + "openapi_types": (str,), + "attribute": "page[cursor]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 1000, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def aggregate_spans(self, body: SpansAggregateRequest, ) -> SpansAggregateResponse: + """Aggregate spans. + + The API endpoint to aggregate spans into buckets and compute metrics and timeseries. + This endpoint is rate limited to ``300`` requests per hour. + + :type body: SpansAggregateRequest + :rtype: SpansAggregateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._aggregate_spans_endpoint.call_with_http_info(**kwargs) + + def list_spans(self, body: SpansListRequest, ) -> SpansListResponse: + """Search spans. + + List endpoint returns spans that match a span search query. + `Results are paginated `_. + + Use this endpoint to build complex spans filtering and search. + This endpoint is rate limited to ``300`` requests per hour. + + :type body: SpansListRequest + :rtype: SpansListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._list_spans_endpoint.call_with_http_info(**kwargs) + + def list_spans_with_pagination(self, body: SpansListRequest, ) -> collections.abc.Iterable[Span]: + """Search spans. + + Provide a paginated version of :meth:`list_spans`, returning all items. + + :type body: SpansListRequest + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[Span] + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.data.attributes.page.limit", 10) + endpoint = self._list_spans_endpoint + set_attribute_from_path(kwargs, "body.data.attributes.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.data.attributes.page.cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_spans_get(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[str, UnsetType]=unset, filter_to: Union[str, UnsetType]=unset, sort: Union[SpansSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> SpansListResponse: + """Get a list of spans. + + List endpoint returns spans that match a span search query. + `Results are paginated `_. + + Use this endpoint to see your latest spans. + This endpoint is rate limited to ``300`` requests per hour. + + :param filter_query: Search query following spans syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested spans. Supports date-time ISO8601, date math, and regular timestamps (milliseconds). + :type filter_from: str, optional + :param filter_to: Maximum timestamp for requested spans. Supports date-time ISO8601, date math, and regular timestamps (milliseconds). + :type filter_to: str, optional + :param sort: Order of spans in results. + :type sort: SpansSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of spans in the response. + :type page_limit: int, optional + :rtype: SpansListResponse + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_spans_get_endpoint.call_with_http_info(**kwargs) + + def list_spans_get_with_pagination(self, *, filter_query: Union[str, UnsetType]=unset, filter_from: Union[str, UnsetType]=unset, filter_to: Union[str, UnsetType]=unset, sort: Union[SpansSort, UnsetType]=unset, page_cursor: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[Span]: + """Get a list of spans. + + Provide a paginated version of :meth:`list_spans_get`, returning all items. + + :param filter_query: Search query following spans syntax. + :type filter_query: str, optional + :param filter_from: Minimum timestamp for requested spans. Supports date-time ISO8601, date math, and regular timestamps (milliseconds). + :type filter_from: str, optional + :param filter_to: Maximum timestamp for requested spans. Supports date-time ISO8601, date math, and regular timestamps (milliseconds). + :type filter_to: str, optional + :param sort: Order of spans in results. + :type sort: SpansSort, optional + :param page_cursor: List following results with a cursor provided in the previous query. + :type page_cursor: str, optional + :param page_limit: Maximum number of spans in the response. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[Span] + """ + kwargs: Dict[str, Any] = {} + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_from is not unset: + kwargs["filter_from"] = filter_from + + if filter_to is not unset: + kwargs["filter_to"] = filter_to + + if sort is not unset: + kwargs["sort"] = sort + + if page_cursor is not unset: + kwargs["page_cursor"] = page_cursor + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_spans_get_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "page_cursor", + "cursor_path": "meta.page.after", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/spans_metrics_api.py b/datadog_api_client/v2/api/spans_metrics_api.py new file mode 100644 index 0000000000..f168feb4c0 --- /dev/null +++ b/datadog_api_client/v2/api/spans_metrics_api.py @@ -0,0 +1,223 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.spans_metrics_response import SpansMetricsResponse +from datadog_api_client.v2.model.spans_metric_response import SpansMetricResponse +from datadog_api_client.v2.model.spans_metric_create_request import SpansMetricCreateRequest +from datadog_api_client.v2.model.spans_metric_update_request import SpansMetricUpdateRequest + + +class SpansMetricsApi: + """ + Manage configuration of `span-based metrics `_ for your organization. See `Generate Metrics from Spans `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_spans_metric_endpoint = _Endpoint( + settings={ + "response_type": (SpansMetricResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/metrics", + "operation_id": "create_spans_metric", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SpansMetricCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_spans_metric_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/metrics/{metric_id}", + "operation_id": "delete_spans_metric", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "metric_id": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_spans_metric_endpoint = _Endpoint( + settings={ + "response_type": (SpansMetricResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/metrics/{metric_id}", + "operation_id": "get_spans_metric", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "metric_id": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_spans_metrics_endpoint = _Endpoint( + settings={ + "response_type": (SpansMetricsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/metrics", + "operation_id": "list_spans_metrics", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_spans_metric_endpoint = _Endpoint( + settings={ + "response_type": (SpansMetricResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/apm/config/metrics/{metric_id}", + "operation_id": "update_spans_metric", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "metric_id": { + "required": True, + "openapi_types": (str,), + "attribute": "metric_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SpansMetricUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_spans_metric(self, body: SpansMetricCreateRequest, ) -> SpansMetricResponse: + """Create a span-based metric. + + Create a metric based on your ingested spans in your organization. + Returns the span-based metric object from the request body when the request is successful. + + :param body: The definition of the new span-based metric. + :type body: SpansMetricCreateRequest + :rtype: SpansMetricResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_spans_metric_endpoint.call_with_http_info(**kwargs) + + def delete_spans_metric(self, metric_id: str, ) -> None: + """Delete a span-based metric. + + Delete a specific span-based metric from your organization. + + :param metric_id: The name of the span-based metric. + :type metric_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_id"] = metric_id + + return self._delete_spans_metric_endpoint.call_with_http_info(**kwargs) + + def get_spans_metric(self, metric_id: str, ) -> SpansMetricResponse: + """Get a span-based metric. + + Get a specific span-based metric from your organization. + + :param metric_id: The name of the span-based metric. + :type metric_id: str + :rtype: SpansMetricResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_id"] = metric_id + + return self._get_spans_metric_endpoint.call_with_http_info(**kwargs) + + def list_spans_metrics(self, ) -> SpansMetricsResponse: + """Get all span-based metrics. + + Get the list of configured span-based metrics with their definitions. + + :rtype: SpansMetricsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_spans_metrics_endpoint.call_with_http_info(**kwargs) + + def update_spans_metric(self, metric_id: str, body: SpansMetricUpdateRequest, ) -> SpansMetricResponse: + """Update a span-based metric. + + Update a specific span-based metric from your organization. + Returns the span-based metric object from the request body when the request is successful. + + :param metric_id: The name of the span-based metric. + :type metric_id: str + :param body: New definition of the span-based metric. + :type body: SpansMetricUpdateRequest + :rtype: SpansMetricResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["metric_id"] = metric_id + + kwargs["body"] = body + + return self._update_spans_metric_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/static_analysis_api.py b/datadog_api_client/v2/api/static_analysis_api.py new file mode 100644 index 0000000000..f81b36c1d2 --- /dev/null +++ b/datadog_api_client/v2/api/static_analysis_api.py @@ -0,0 +1,1513 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.sca_request import ScaRequest +from datadog_api_client.v2.model.mcp_scan_request_response import McpScanRequestResponse +from datadog_api_client.v2.model.mcp_scan_request import McpScanRequest +from datadog_api_client.v2.model.scan_result_response import ScanResultResponse +from datadog_api_client.v2.model.licenses_list_response import LicensesListResponse +from datadog_api_client.v2.model.resolve_vulnerable_symbols_response import ResolveVulnerableSymbolsResponse +from datadog_api_client.v2.model.resolve_vulnerable_symbols_request import ResolveVulnerableSymbolsRequest +from datadog_api_client.v2.model.ai_memory_violation_results_response import AiMemoryViolationResultsResponse +from datadog_api_client.v2.model.ai_memory_violation_result_request import AiMemoryViolationResultRequest +from datadog_api_client.v2.model.ai_prompts_response import AiPromptsResponse +from datadog_api_client.v2.model.ai_custom_rulesets_response import AiCustomRulesetsResponse +from datadog_api_client.v2.model.ai_custom_ruleset_response import AiCustomRulesetResponse +from datadog_api_client.v2.model.ai_custom_ruleset_request import AiCustomRulesetRequest +from datadog_api_client.v2.model.ai_custom_ruleset_update_request import AiCustomRulesetUpdateRequest +from datadog_api_client.v2.model.ai_custom_rule_response import AiCustomRuleResponse +from datadog_api_client.v2.model.ai_custom_rule_request import AiCustomRuleRequest +from datadog_api_client.v2.model.ai_custom_rule_revisions_response import AiCustomRuleRevisionsResponse +from datadog_api_client.v2.model.ai_custom_rule_revision_response_data import AiCustomRuleRevisionResponseData +from datadog_api_client.v2.model.ai_custom_rule_revision_request import AiCustomRuleRevisionRequest +from datadog_api_client.v2.model.ai_custom_rule_revision_response import AiCustomRuleRevisionResponse +from datadog_api_client.v2.model.custom_ruleset_list_response import CustomRulesetListResponse +from datadog_api_client.v2.model.custom_ruleset_response import CustomRulesetResponse +from datadog_api_client.v2.model.custom_ruleset_request import CustomRulesetRequest +from datadog_api_client.v2.model.custom_rule_response import CustomRuleResponse +from datadog_api_client.v2.model.custom_rule_request import CustomRuleRequest +from datadog_api_client.v2.model.custom_rule_revisions_response import CustomRuleRevisionsResponse +from datadog_api_client.v2.model.custom_rule_revision import CustomRuleRevision +from datadog_api_client.v2.model.custom_rule_revision_request import CustomRuleRevisionRequest +from datadog_api_client.v2.model.revert_custom_rule_revision_request import RevertCustomRuleRevisionRequest +from datadog_api_client.v2.model.custom_rule_revision_response import CustomRuleRevisionResponse + + +class StaticAnalysisApi: + """ + API for static analysis + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_ai_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": (AiCustomRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets/{ruleset_name}/rules", + "operation_id": "create_ai_custom_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AiCustomRuleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_ai_custom_rule_revision_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets/{ruleset_name}/rules/{rule_name}/revisions", + "operation_id": "create_ai_custom_rule_revision", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AiCustomRuleRevisionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_ai_custom_ruleset_endpoint = _Endpoint( + settings={ + "response_type": (AiCustomRulesetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets", + "operation_id": "create_ai_custom_ruleset", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AiCustomRulesetRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_ai_memory_violation_result_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/memory", + "operation_id": "create_ai_memory_violation_result", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AiMemoryViolationResultRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": (CustomRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules", + "operation_id": "create_custom_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CustomRuleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_custom_rule_revision_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions", + "operation_id": "create_custom_rule_revision", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CustomRuleRevisionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_custom_ruleset_endpoint = _Endpoint( + settings={ + "response_type": (CustomRulesetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets", + "operation_id": "create_custom_ruleset", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CustomRulesetRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_sca_resolve_vulnerable_symbols_endpoint = _Endpoint( + settings={ + "response_type": (ResolveVulnerableSymbolsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis-sca/vulnerabilities/resolve-vulnerable-symbols", + "operation_id": "create_sca_resolve_vulnerable_symbols", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ResolveVulnerableSymbolsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_sca_result_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis-sca/dependencies", + "operation_id": "create_sca_result", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (ScaRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_sca_scan_endpoint = _Endpoint( + settings={ + "response_type": (McpScanRequestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis-sca/dependencies/scan", + "operation_id": "create_sca_scan", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (McpScanRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_ai_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets/{ruleset_name}/rules/{rule_name}", + "operation_id": "delete_ai_custom_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_ai_custom_ruleset_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets/{ruleset_name}", + "operation_id": "delete_ai_custom_ruleset", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_ai_memory_violation_result_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/memory/{id}", + "operation_id": "delete_ai_memory_violation_result", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}", + "operation_id": "delete_custom_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_custom_ruleset_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}", + "operation_id": "delete_custom_ruleset", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_ai_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": (AiCustomRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets/{ruleset_name}/rules/{rule_name}", + "operation_id": "get_ai_custom_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_ai_custom_rule_revision_endpoint = _Endpoint( + settings={ + "response_type": (AiCustomRuleRevisionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets/{ruleset_name}/rules/{rule_name}/revisions/{id}", + "operation_id": "get_ai_custom_rule_revision", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_ai_custom_ruleset_endpoint = _Endpoint( + settings={ + "response_type": (AiCustomRulesetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets/{ruleset_name}", + "operation_id": "get_ai_custom_ruleset", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_custom_rule_endpoint = _Endpoint( + settings={ + "response_type": (CustomRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}", + "operation_id": "get_custom_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_custom_rule_revision_endpoint = _Endpoint( + settings={ + "response_type": (CustomRuleRevisionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions/{id}", + "operation_id": "get_custom_rule_revision", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_custom_ruleset_endpoint = _Endpoint( + settings={ + "response_type": (CustomRulesetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}", + "operation_id": "get_custom_ruleset", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_sca_scan_endpoint = _Endpoint( + settings={ + "response_type": (ScanResultResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis-sca/dependencies/scan/{job_id}", + "operation_id": "get_sca_scan", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "job_id": { + "required": True, + "openapi_types": (str,), + "attribute": "job_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_ai_custom_rule_revisions_endpoint = _Endpoint( + settings={ + "response_type": (AiCustomRuleRevisionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets/{ruleset_name}/rules/{rule_name}/revisions", + "operation_id": "list_ai_custom_rule_revisions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_ai_custom_rulesets_endpoint = _Endpoint( + settings={ + "response_type": (AiCustomRulesetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets", + "operation_id": "list_ai_custom_rulesets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_ai_memory_violation_results_endpoint = _Endpoint( + settings={ + "response_type": (AiMemoryViolationResultsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/memory", + "operation_id": "list_ai_memory_violation_results", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_ai_prompts_endpoint = _Endpoint( + settings={ + "response_type": (AiPromptsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/prompts", + "operation_id": "list_ai_prompts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_custom_rule_revisions_endpoint = _Endpoint( + settings={ + "response_type": (CustomRuleRevisionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions", + "operation_id": "list_custom_rule_revisions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_custom_rulesets_endpoint = _Endpoint( + settings={ + "response_type": (CustomRulesetListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets", + "operation_id": "list_custom_rulesets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_sca_licenses_endpoint = _Endpoint( + settings={ + "response_type": (LicensesListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis-sca/licenses/list", + "operation_id": "list_sca_licenses", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._revert_custom_rule_revision_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}/rules/{rule_name}/revisions/revert", + "operation_id": "revert_custom_rule_revision", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "rule_name": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (RevertCustomRuleRevisionRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_ai_custom_ruleset_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/ai/rulesets/{ruleset_name}", + "operation_id": "update_ai_custom_ruleset", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AiCustomRulesetUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_custom_ruleset_endpoint = _Endpoint( + settings={ + "response_type": (CustomRulesetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/static-analysis/custom/rulesets/{ruleset_name}", + "operation_id": "update_custom_ruleset", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "ruleset_name": { + "required": True, + "openapi_types": (str,), + "attribute": "ruleset_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CustomRulesetRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_ai_custom_rule(self, ruleset_name: str, body: AiCustomRuleRequest, ) -> AiCustomRuleResponse: + """Create an AI custom rule. + + Create a new AI custom rule within a ruleset. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :type body: AiCustomRuleRequest + :rtype: AiCustomRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["body"] = body + + return self._create_ai_custom_rule_endpoint.call_with_http_info(**kwargs) + + def create_ai_custom_rule_revision(self, ruleset_name: str, rule_name: str, body: AiCustomRuleRevisionRequest, ) -> None: + """Create an AI custom rule revision. + + Create a new revision for an AI custom rule. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :param rule_name: The rule name. + :type rule_name: str + :type body: AiCustomRuleRevisionRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + kwargs["body"] = body + + return self._create_ai_custom_rule_revision_endpoint.call_with_http_info(**kwargs) + + def create_ai_custom_ruleset(self, body: AiCustomRulesetRequest, ) -> AiCustomRulesetResponse: + """Create an AI custom ruleset. + + Create a new AI custom ruleset for the authenticated organization. + + :type body: AiCustomRulesetRequest + :rtype: AiCustomRulesetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_ai_custom_ruleset_endpoint.call_with_http_info(**kwargs) + + def create_ai_memory_violation_result(self, body: AiMemoryViolationResultRequest, ) -> None: + """Create an AI memory violation result. + + Add a new AI memory violation result for the authenticated organization. + + :type body: AiMemoryViolationResultRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_ai_memory_violation_result_endpoint.call_with_http_info(**kwargs) + + def create_custom_rule(self, ruleset_name: str, body: CustomRuleRequest, ) -> CustomRuleResponse: + """Create Custom Rule. + + Create a new custom rule within a ruleset + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :type body: CustomRuleRequest + :rtype: CustomRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["body"] = body + + return self._create_custom_rule_endpoint.call_with_http_info(**kwargs) + + def create_custom_rule_revision(self, ruleset_name: str, rule_name: str, body: CustomRuleRevisionRequest, ) -> None: + """Create Custom Rule Revision. + + Create a new revision for a custom rule + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :param rule_name: The rule name + :type rule_name: str + :type body: CustomRuleRevisionRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + kwargs["body"] = body + + return self._create_custom_rule_revision_endpoint.call_with_http_info(**kwargs) + + def create_custom_ruleset(self, body: CustomRulesetRequest, ) -> CustomRulesetResponse: + """Create Custom Ruleset. + + Create a new custom ruleset for the authenticated organization. + + :type body: CustomRulesetRequest + :rtype: CustomRulesetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_custom_ruleset_endpoint.call_with_http_info(**kwargs) + + def create_sca_resolve_vulnerable_symbols(self, body: ResolveVulnerableSymbolsRequest, ) -> ResolveVulnerableSymbolsResponse: + """POST request to resolve vulnerable symbols. + + :type body: ResolveVulnerableSymbolsRequest + :rtype: ResolveVulnerableSymbolsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_sca_resolve_vulnerable_symbols_endpoint.call_with_http_info(**kwargs) + + def create_sca_result(self, body: ScaRequest, ) -> None: + """Post dependencies for analysis. + + :type body: ScaRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_sca_result_endpoint.call_with_http_info(**kwargs) + + def create_sca_scan(self, body: McpScanRequest, ) -> McpScanRequestResponse: + """Submit libraries for vulnerability scanning. + + :type body: McpScanRequest + :rtype: McpScanRequestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_sca_scan_endpoint.call_with_http_info(**kwargs) + + def delete_ai_custom_rule(self, ruleset_name: str, rule_name: str, ) -> None: + """Delete an AI custom rule. + + Delete an AI custom rule by name within a ruleset. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :param rule_name: The rule name. + :type rule_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + return self._delete_ai_custom_rule_endpoint.call_with_http_info(**kwargs) + + def delete_ai_custom_ruleset(self, ruleset_name: str, ) -> None: + """Delete an AI custom ruleset. + + Delete an AI custom ruleset by name. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + return self._delete_ai_custom_ruleset_endpoint.call_with_http_info(**kwargs) + + def delete_ai_memory_violation_result(self, id: str, ) -> None: + """Delete an AI memory violation result. + + Delete an AI memory violation result by its numeric identifier. + + :param id: The numeric identifier of the memory violation result. + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._delete_ai_memory_violation_result_endpoint.call_with_http_info(**kwargs) + + def delete_custom_rule(self, ruleset_name: str, rule_name: str, ) -> None: + """Delete Custom Rule. + + Delete a custom rule + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :param rule_name: The rule name + :type rule_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + return self._delete_custom_rule_endpoint.call_with_http_info(**kwargs) + + def delete_custom_ruleset(self, ruleset_name: str, ) -> None: + """Delete Custom Ruleset. + + Delete a custom ruleset + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + return self._delete_custom_ruleset_endpoint.call_with_http_info(**kwargs) + + def get_ai_custom_rule(self, ruleset_name: str, rule_name: str, ) -> AiCustomRuleResponse: + """Get an AI custom rule. + + Get an AI custom rule by name within a ruleset. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :param rule_name: The rule name. + :type rule_name: str + :rtype: AiCustomRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + return self._get_ai_custom_rule_endpoint.call_with_http_info(**kwargs) + + def get_ai_custom_rule_revision(self, ruleset_name: str, rule_name: str, id: str, ) -> AiCustomRuleRevisionResponse: + """Get an AI custom rule revision. + + Get a specific revision of an AI custom rule. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :param rule_name: The rule name. + :type rule_name: str + :param id: The revision identifier. + :type id: str + :rtype: AiCustomRuleRevisionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + kwargs["id"] = id + + return self._get_ai_custom_rule_revision_endpoint.call_with_http_info(**kwargs) + + def get_ai_custom_ruleset(self, ruleset_name: str, ) -> AiCustomRulesetResponse: + """Get an AI custom ruleset. + + Get an AI custom ruleset by name. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :rtype: AiCustomRulesetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + return self._get_ai_custom_ruleset_endpoint.call_with_http_info(**kwargs) + + def get_custom_rule(self, ruleset_name: str, rule_name: str, ) -> CustomRuleResponse: + """Show Custom Rule. + + Get a custom rule by name + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :param rule_name: The rule name + :type rule_name: str + :rtype: CustomRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + return self._get_custom_rule_endpoint.call_with_http_info(**kwargs) + + def get_custom_rule_revision(self, ruleset_name: str, rule_name: str, id: str, ) -> CustomRuleRevisionResponse: + """Show Custom Rule Revision. + + Get a specific revision of a custom rule + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :param rule_name: The rule name + :type rule_name: str + :param id: The revision ID + :type id: str + :rtype: CustomRuleRevisionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + kwargs["id"] = id + + return self._get_custom_rule_revision_endpoint.call_with_http_info(**kwargs) + + def get_custom_ruleset(self, ruleset_name: str, ) -> CustomRulesetResponse: + """Show Custom Ruleset. + + Get a custom ruleset by name + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :rtype: CustomRulesetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + return self._get_custom_ruleset_endpoint.call_with_http_info(**kwargs) + + def get_sca_scan(self, job_id: str, ) -> ScanResultResponse: + """Retrieve a dependency scan result. + + :param job_id: The job identifier returned when the scan was submitted. + :type job_id: str + :rtype: ScanResultResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["job_id"] = job_id + + return self._get_sca_scan_endpoint.call_with_http_info(**kwargs) + + def list_ai_custom_rule_revisions(self, ruleset_name: str, rule_name: str, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> AiCustomRuleRevisionsResponse: + """List AI custom rule revisions. + + Get all revisions for an AI custom rule. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :param rule_name: The rule name. + :type rule_name: str + :param page_offset: The offset for pagination. + :type page_offset: int, optional + :param page_limit: The maximum number of revisions to return. + :type page_limit: int, optional + :rtype: AiCustomRuleRevisionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_ai_custom_rule_revisions_endpoint.call_with_http_info(**kwargs) + + def list_ai_custom_rule_revisions_with_pagination(self, ruleset_name: str, rule_name: str, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[AiCustomRuleRevisionResponseData]: + """List AI custom rule revisions. + + Provide a paginated version of :meth:`list_ai_custom_rule_revisions`, returning all items. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :param rule_name: The rule name. + :type rule_name: str + :param page_offset: The offset for pagination. + :type page_offset: int, optional + :param page_limit: The maximum number of revisions to return. + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[AiCustomRuleRevisionResponseData] + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 100) + endpoint = self._list_ai_custom_rule_revisions_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_ai_custom_rulesets(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> AiCustomRulesetsResponse: + """List AI custom rulesets. + + Get all AI custom rulesets for the authenticated organization. + + :param page_offset: The offset for pagination. + :type page_offset: int, optional + :param page_limit: The maximum number of rulesets to return. + :type page_limit: int, optional + :rtype: AiCustomRulesetsResponse + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_ai_custom_rulesets_endpoint.call_with_http_info(**kwargs) + + def list_ai_memory_violation_results(self, ) -> AiMemoryViolationResultsResponse: + """List AI memory violation results. + + Get all AI memory violation results for the authenticated organization. + + :rtype: AiMemoryViolationResultsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_ai_memory_violation_results_endpoint.call_with_http_info(**kwargs) + + def list_ai_prompts(self, ) -> AiPromptsResponse: + """List AI prompts. + + Get all AI prompts, including default prompts and custom AI rule prompts for the authenticated organization. + + :rtype: AiPromptsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_ai_prompts_endpoint.call_with_http_info(**kwargs) + + def list_custom_rule_revisions(self, ruleset_name: str, rule_name: str, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> CustomRuleRevisionsResponse: + """List Custom Rule Revisions. + + Get all revisions for a custom rule + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :param rule_name: The rule name + :type rule_name: str + :param page_offset: Pagination offset + :type page_offset: int, optional + :param page_limit: Pagination limit + :type page_limit: int, optional + :rtype: CustomRuleRevisionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + return self._list_custom_rule_revisions_endpoint.call_with_http_info(**kwargs) + + def list_custom_rule_revisions_with_pagination(self, ruleset_name: str, rule_name: str, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, ) -> collections.abc.Iterable[CustomRuleRevision]: + """List Custom Rule Revisions. + + Provide a paginated version of :meth:`list_custom_rule_revisions`, returning all items. + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :param rule_name: The rule name + :type rule_name: str + :param page_offset: Pagination offset + :type page_offset: int, optional + :param page_limit: Pagination limit + :type page_limit: int, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[CustomRuleRevision] + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + local_page_size = get_attribute_from_path(kwargs, "page_limit", 10) + endpoint = self._list_custom_rule_revisions_endpoint + set_attribute_from_path(kwargs, "page_limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_offset_param": "page_offset", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_custom_rulesets(self, ) -> CustomRulesetListResponse: + """List Custom Rulesets. + + Get all custom rulesets for the authenticated organization. + + :rtype: CustomRulesetListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_custom_rulesets_endpoint.call_with_http_info(**kwargs) + + def list_sca_licenses(self, ) -> LicensesListResponse: + """Get the list of SPDX licenses. + + :rtype: LicensesListResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_sca_licenses_endpoint.call_with_http_info(**kwargs) + + def revert_custom_rule_revision(self, ruleset_name: str, rule_name: str, body: RevertCustomRuleRevisionRequest, ) -> None: + """Revert Custom Rule Revision. + + Revert a custom rule to a previous revision + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :param rule_name: The rule name + :type rule_name: str + :type body: RevertCustomRuleRevisionRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["rule_name"] = rule_name + + kwargs["body"] = body + + return self._revert_custom_rule_revision_endpoint.call_with_http_info(**kwargs) + + def update_ai_custom_ruleset(self, ruleset_name: str, body: AiCustomRulesetUpdateRequest, ) -> None: + """Update an AI custom ruleset. + + Update the description of an existing AI custom ruleset. + + :param ruleset_name: The ruleset name. + :type ruleset_name: str + :type body: AiCustomRulesetUpdateRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["body"] = body + + return self._update_ai_custom_ruleset_endpoint.call_with_http_info(**kwargs) + + def update_custom_ruleset(self, ruleset_name: str, body: CustomRulesetRequest, ) -> CustomRulesetResponse: + """Update Custom Ruleset. + + Update an existing custom ruleset + + :param ruleset_name: The ruleset name + :type ruleset_name: str + :type body: CustomRulesetRequest + :rtype: CustomRulesetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["ruleset_name"] = ruleset_name + + kwargs["body"] = body + + return self._update_custom_ruleset_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/status_pages_api.py b/datadog_api_client/v2/api/status_pages_api.py new file mode 100644 index 0000000000..74440719f0 --- /dev/null +++ b/datadog_api_client/v2/api/status_pages_api.py @@ -0,0 +1,2158 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.status_page_array import StatusPageArray +from datadog_api_client.v2.model.status_page import StatusPage +from datadog_api_client.v2.model.create_status_page_request import CreateStatusPageRequest +from datadog_api_client.v2.model.degradation_array import DegradationArray +from datadog_api_client.v2.model.maintenance_array import MaintenanceArray +from datadog_api_client.v2.model.patch_status_page_request import PatchStatusPageRequest +from datadog_api_client.v2.model.status_pages_component_array import StatusPagesComponentArray +from datadog_api_client.v2.model.status_pages_component import StatusPagesComponent +from datadog_api_client.v2.model.create_component_request import CreateComponentRequest +from datadog_api_client.v2.model.patch_component_request import PatchComponentRequest +from datadog_api_client.v2.model.degradation_template_array import DegradationTemplateArray +from datadog_api_client.v2.model.degradation_template import DegradationTemplate +from datadog_api_client.v2.model.create_degradation_template_request import CreateDegradationTemplateRequest +from datadog_api_client.v2.model.patch_degradation_template_request import PatchDegradationTemplateRequest +from datadog_api_client.v2.model.degradation import Degradation +from datadog_api_client.v2.model.create_degradation_request import CreateDegradationRequest +from datadog_api_client.v2.model.create_backfilled_degradation_request import CreateBackfilledDegradationRequest +from datadog_api_client.v2.model.patch_degradation_request import PatchDegradationRequest +from datadog_api_client.v2.model.degradation_update import DegradationUpdate +from datadog_api_client.v2.model.patch_degradation_update_request import PatchDegradationUpdateRequest +from datadog_api_client.v2.model.maintenance_template_array import MaintenanceTemplateArray +from datadog_api_client.v2.model.maintenance_template import MaintenanceTemplate +from datadog_api_client.v2.model.create_maintenance_template_request import CreateMaintenanceTemplateRequest +from datadog_api_client.v2.model.patch_maintenance_template_request import PatchMaintenanceTemplateRequest +from datadog_api_client.v2.model.maintenance import Maintenance +from datadog_api_client.v2.model.create_maintenance_request import CreateMaintenanceRequest +from datadog_api_client.v2.model.create_backfilled_maintenance_request import CreateBackfilledMaintenanceRequest +from datadog_api_client.v2.model.patch_maintenance_request import PatchMaintenanceRequest +from datadog_api_client.v2.model.maintenance_update import MaintenanceUpdate +from datadog_api_client.v2.model.patch_maintenance_update_request import PatchMaintenanceUpdateRequest + + +class StatusPagesApi: + """ + Manage your status pages and communicate service disruptions to stakeholders via Datadog's API. See the `Status Pages documentation `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_backfilled_degradation_endpoint = _Endpoint( + settings={ + "response_type": (Degradation,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradations/backfill", + "operation_id": "create_backfilled_degradation", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateBackfilledDegradationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_backfilled_maintenance_endpoint = _Endpoint( + settings={ + "response_type": (Maintenance,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenances/backfill", + "operation_id": "create_backfilled_maintenance", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateBackfilledMaintenanceRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_component_endpoint = _Endpoint( + settings={ + "response_type": (StatusPagesComponent,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/components", + "operation_id": "create_component", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (CreateComponentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_degradation_endpoint = _Endpoint( + settings={ + "response_type": (Degradation,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradations", + "operation_id": "create_degradation", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "notify_subscribers": { + "openapi_types": (bool,), + "attribute": "notify_subscribers", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (CreateDegradationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_degradation_template_endpoint = _Endpoint( + settings={ + "response_type": (DegradationTemplate,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradation_templates", + "operation_id": "create_degradation_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (CreateDegradationTemplateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_maintenance_endpoint = _Endpoint( + settings={ + "response_type": (Maintenance,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenances", + "operation_id": "create_maintenance", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "notify_subscribers": { + "openapi_types": (bool,), + "attribute": "notify_subscribers", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (CreateMaintenanceRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_maintenance_template_endpoint = _Endpoint( + settings={ + "response_type": (MaintenanceTemplate,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenance_templates", + "operation_id": "create_maintenance_template", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (CreateMaintenanceTemplateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_status_page_endpoint = _Endpoint( + settings={ + "response_type": (StatusPage,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages", + "operation_id": "create_status_page", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (CreateStatusPageRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_component_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/components/{component_id}", + "operation_id": "delete_component", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "component_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "component_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_degradation_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradations/{degradation_id}", + "operation_id": "delete_degradation", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "degradation_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "degradation_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_degradation_template_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradation_templates/{template_id}", + "operation_id": "delete_degradation_template", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_maintenance_template_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenance_templates/{template_id}", + "operation_id": "delete_maintenance_template", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "template_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_status_page_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}", + "operation_id": "delete_status_page", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._edit_degradation_update_endpoint = _Endpoint( + settings={ + "response_type": (DegradationUpdate,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradations/{degradation_id}/updates/{update_id}", + "operation_id": "edit_degradation_update", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "degradation_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "degradation_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "update_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "update_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PatchDegradationUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_component_endpoint = _Endpoint( + settings={ + "response_type": (StatusPagesComponent,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/components/{component_id}", + "operation_id": "get_component", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "component_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "component_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_degradation_endpoint = _Endpoint( + settings={ + "response_type": (Degradation,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradations/{degradation_id}", + "operation_id": "get_degradation", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "degradation_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "degradation_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_degradation_template_endpoint = _Endpoint( + settings={ + "response_type": (DegradationTemplate,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradation_templates/{template_id}", + "operation_id": "get_degradation_template", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "template_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_maintenance_endpoint = _Endpoint( + settings={ + "response_type": (Maintenance,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenances/{maintenance_id}", + "operation_id": "get_maintenance", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "maintenance_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "maintenance_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_maintenance_template_endpoint = _Endpoint( + settings={ + "response_type": (MaintenanceTemplate,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenance_templates/{template_id}", + "operation_id": "get_maintenance_template", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "template_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_status_page_endpoint = _Endpoint( + settings={ + "response_type": (StatusPage,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}", + "operation_id": "get_status_page", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_components_endpoint = _Endpoint( + settings={ + "response_type": (StatusPagesComponentArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/components", + "operation_id": "list_components", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_degradations_endpoint = _Endpoint( + settings={ + "response_type": (DegradationArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/degradations", + "operation_id": "list_degradations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_page_id": { + "openapi_types": (str,), + "attribute": "filter[page_id]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "filter_status": { + "openapi_types": (str,), + "attribute": "filter[status]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "filter_source_id": { + "openapi_types": (str,), + "attribute": "filter[source_id]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_degradation_templates_endpoint = _Endpoint( + settings={ + "response_type": (DegradationTemplateArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradation_templates", + "operation_id": "list_degradation_templates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_maintenances_endpoint = _Endpoint( + settings={ + "response_type": (MaintenanceArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/maintenances", + "operation_id": "list_maintenances", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_page_id": { + "openapi_types": (str,), + "attribute": "filter[page_id]", + "location": "query", + }, + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "filter_status": { + "openapi_types": (str,), + "attribute": "filter[status]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_maintenance_templates_endpoint = _Endpoint( + settings={ + "response_type": (MaintenanceTemplateArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenance_templates", + "operation_id": "list_maintenance_templates", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_status_pages_endpoint = _Endpoint( + settings={ + "response_type": (StatusPageArray,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages", + "operation_id": "list_status_pages", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_offset": { + "openapi_types": (int,), + "attribute": "page[offset]", + "location": "query", + }, + "page_limit": { + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "filter_domain_prefix": { + "openapi_types": (str,), + "attribute": "filter[domain_prefix]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._patch_maintenance_update_endpoint = _Endpoint( + settings={ + "response_type": (MaintenanceUpdate,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenances/{maintenance_id}/updates/{update_id}", + "operation_id": "patch_maintenance_update", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "maintenance_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "maintenance_id", + "location": "path", + }, + "update_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "update_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PatchMaintenanceUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._publish_status_page_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/publish", + "operation_id": "publish_status_page", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._soft_delete_degradation_update_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradations/{degradation_id}/updates/{update_id}", + "operation_id": "soft_delete_degradation_update", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "degradation_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "degradation_id", + "location": "path", + }, + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "update_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "update_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._unpublish_status_page_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/unpublish", + "operation_id": "unpublish_status_page", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._update_component_endpoint = _Endpoint( + settings={ + "response_type": (StatusPagesComponent,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/components/{component_id}", + "operation_id": "update_component", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "component_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "component_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (PatchComponentRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_degradation_endpoint = _Endpoint( + settings={ + "response_type": (Degradation,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradations/{degradation_id}", + "operation_id": "update_degradation", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "notify_subscribers": { + "openapi_types": (bool,), + "attribute": "notify_subscribers", + "location": "query", + }, + "degradation_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "degradation_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (PatchDegradationRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_degradation_template_endpoint = _Endpoint( + settings={ + "response_type": (DegradationTemplate,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/degradation_templates/{template_id}", + "operation_id": "update_degradation_template", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "template_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (PatchDegradationTemplateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_maintenance_endpoint = _Endpoint( + settings={ + "response_type": (Maintenance,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenances/{maintenance_id}", + "operation_id": "update_maintenance", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "notify_subscribers": { + "openapi_types": (bool,), + "attribute": "notify_subscribers", + "location": "query", + }, + "maintenance_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "maintenance_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (PatchMaintenanceRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_maintenance_template_endpoint = _Endpoint( + settings={ + "response_type": (MaintenanceTemplate,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}/maintenance_templates/{template_id}", + "operation_id": "update_maintenance_template", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "template_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "template_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (PatchMaintenanceTemplateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_status_page_endpoint = _Endpoint( + settings={ + "response_type": (StatusPage,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/statuspages/{page_id}", + "operation_id": "update_status_page", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "delete_subscribers": { + "openapi_types": (bool,), + "attribute": "delete_subscribers", + "location": "query", + }, + "page_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "page_id", + "location": "path", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + "body": { + "required": True, + "openapi_types": (PatchStatusPageRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_backfilled_degradation(self, page_id: UUID, body: CreateBackfilledDegradationRequest, *, include: Union[str, UnsetType]=unset, ) -> Degradation: + """Create backfilled degradation. + + Creates a backfilled degradation with predefined updates. + + :param page_id: The ID of the status page. + :type page_id: UUID + :type body: CreateBackfilledDegradationRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: Degradation + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["page_id"] = page_id + + kwargs["body"] = body + + return self._create_backfilled_degradation_endpoint.call_with_http_info(**kwargs) + + def create_backfilled_maintenance(self, page_id: UUID, body: CreateBackfilledMaintenanceRequest, *, include: Union[str, UnsetType]=unset, ) -> Maintenance: + """Create backfilled maintenance. + + Creates a backfilled maintenance with predefined updates. + + :param page_id: The ID of the status page. + :type page_id: UUID + :type body: CreateBackfilledMaintenanceRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: Maintenance + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["page_id"] = page_id + + kwargs["body"] = body + + return self._create_backfilled_maintenance_endpoint.call_with_http_info(**kwargs) + + def create_component(self, page_id: UUID, body: CreateComponentRequest, *, include: Union[str, UnsetType]=unset, ) -> StatusPagesComponent: + """Create component. + + Creates a new component. + + :param page_id: The ID of the status page. + :type page_id: UUID + :type body: CreateComponentRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page, group. + :type include: str, optional + :rtype: StatusPagesComponent + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_component_endpoint.call_with_http_info(**kwargs) + + def create_degradation(self, page_id: UUID, body: CreateDegradationRequest, *, notify_subscribers: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> Degradation: + """Create degradation. + + Creates a new degradation. + + :param page_id: The ID of the status page. + :type page_id: UUID + :type body: CreateDegradationRequest + :param notify_subscribers: Whether to notify page subscribers of the degradation. + :type notify_subscribers: bool, optional + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: Degradation + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if notify_subscribers is not unset: + kwargs["notify_subscribers"] = notify_subscribers + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_degradation_endpoint.call_with_http_info(**kwargs) + + def create_degradation_template(self, page_id: UUID, body: CreateDegradationTemplateRequest, *, include: Union[str, UnsetType]=unset, ) -> DegradationTemplate: + """Create degradation template. + + Creates a new degradation template. + + :param page_id: The ID of the status page. + :type page_id: UUID + :type body: CreateDegradationTemplateRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: DegradationTemplate + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_degradation_template_endpoint.call_with_http_info(**kwargs) + + def create_maintenance(self, page_id: UUID, body: CreateMaintenanceRequest, *, notify_subscribers: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> Maintenance: + """Schedule maintenance. + + Schedules a new maintenance. + + :param page_id: The ID of the status page. + :type page_id: UUID + :type body: CreateMaintenanceRequest + :param notify_subscribers: Whether to notify page subscribers of the maintenance. + :type notify_subscribers: bool, optional + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: Maintenance + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if notify_subscribers is not unset: + kwargs["notify_subscribers"] = notify_subscribers + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_maintenance_endpoint.call_with_http_info(**kwargs) + + def create_maintenance_template(self, page_id: UUID, body: CreateMaintenanceTemplateRequest, *, include: Union[str, UnsetType]=unset, ) -> MaintenanceTemplate: + """Create maintenance template. + + Creates a new maintenance template. + + :param page_id: The ID of the status page. + :type page_id: UUID + :type body: CreateMaintenanceTemplateRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: MaintenanceTemplate + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_maintenance_template_endpoint.call_with_http_info(**kwargs) + + def create_status_page(self, body: CreateStatusPageRequest, *, include: Union[str, UnsetType]=unset, ) -> StatusPage: + """Create status page. + + Creates a new status page in an unpublished state. Use the dedicated `publish <#publish-status-page>`_ status page endpoint to publish the page after creation. + + :type body: CreateStatusPageRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user. + :type include: str, optional + :rtype: StatusPage + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._create_status_page_endpoint.call_with_http_info(**kwargs) + + def delete_component(self, page_id: UUID, component_id: UUID, ) -> None: + """Delete component. + + Deletes a component by its ID. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param component_id: The ID of the component. + :type component_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["component_id"] = component_id + + return self._delete_component_endpoint.call_with_http_info(**kwargs) + + def delete_degradation(self, page_id: UUID, degradation_id: UUID, ) -> None: + """Delete degradation. + + Deletes a degradation by its ID. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param degradation_id: The ID of the degradation. + :type degradation_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["degradation_id"] = degradation_id + + return self._delete_degradation_endpoint.call_with_http_info(**kwargs) + + def delete_degradation_template(self, page_id: UUID, template_id: UUID, ) -> None: + """Delete degradation template. + + Deletes a degradation template by its ID (soft delete). + + :param page_id: The ID of the status page. + :type page_id: UUID + :param template_id: The ID of the degradation or maintenance template. + :type template_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["template_id"] = template_id + + return self._delete_degradation_template_endpoint.call_with_http_info(**kwargs) + + def delete_maintenance_template(self, page_id: UUID, template_id: UUID, ) -> None: + """Delete maintenance template. + + Deletes a maintenance template by its ID (soft delete). + + :param page_id: The ID of the status page. + :type page_id: UUID + :param template_id: The ID of the degradation or maintenance template. + :type template_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["template_id"] = template_id + + return self._delete_maintenance_template_endpoint.call_with_http_info(**kwargs) + + def delete_status_page(self, page_id: UUID, ) -> None: + """Delete status page. + + Deletes a status page by its ID. + + :param page_id: The ID of the status page. + :type page_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + return self._delete_status_page_endpoint.call_with_http_info(**kwargs) + + def edit_degradation_update(self, degradation_id: UUID, page_id: UUID, update_id: UUID, body: PatchDegradationUpdateRequest, *, include: Union[str, UnsetType]=unset, ) -> DegradationUpdate: + """Edit degradation update. + + Edits a specific degradation update. + + :param degradation_id: The ID of the degradation. + :type degradation_id: UUID + :param page_id: The ID of the status page. + :type page_id: UUID + :param update_id: The ID of the degradation update. + :type update_id: UUID + :type body: PatchDegradationUpdateRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, degradation, status_page. + :type include: str, optional + :rtype: DegradationUpdate + """ + kwargs: Dict[str, Any] = {} + kwargs["degradation_id"] = degradation_id + + if include is not unset: + kwargs["include"] = include + + kwargs["page_id"] = page_id + + kwargs["update_id"] = update_id + + kwargs["body"] = body + + return self._edit_degradation_update_endpoint.call_with_http_info(**kwargs) + + def get_component(self, page_id: UUID, component_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> StatusPagesComponent: + """Get component. + + Retrieves a specific component by its ID. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param component_id: The ID of the component. + :type component_id: UUID + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page, group. + :type include: str, optional + :rtype: StatusPagesComponent + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["component_id"] = component_id + + if include is not unset: + kwargs["include"] = include + + return self._get_component_endpoint.call_with_http_info(**kwargs) + + def get_degradation(self, page_id: UUID, degradation_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> Degradation: + """Get degradation. + + Retrieves a specific degradation by its ID. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param degradation_id: The ID of the degradation. + :type degradation_id: UUID + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: Degradation + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["degradation_id"] = degradation_id + + if include is not unset: + kwargs["include"] = include + + return self._get_degradation_endpoint.call_with_http_info(**kwargs) + + def get_degradation_template(self, page_id: UUID, template_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> DegradationTemplate: + """Get degradation template. + + Retrieves a specific degradation template by its ID. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param template_id: The ID of the degradation or maintenance template. + :type template_id: UUID + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: DegradationTemplate + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["template_id"] = template_id + + if include is not unset: + kwargs["include"] = include + + return self._get_degradation_template_endpoint.call_with_http_info(**kwargs) + + def get_maintenance(self, page_id: UUID, maintenance_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> Maintenance: + """Get maintenance. + + Retrieves a specific maintenance by its ID. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param maintenance_id: The ID of the maintenance. + :type maintenance_id: UUID + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: Maintenance + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["maintenance_id"] = maintenance_id + + if include is not unset: + kwargs["include"] = include + + return self._get_maintenance_endpoint.call_with_http_info(**kwargs) + + def get_maintenance_template(self, page_id: UUID, template_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> MaintenanceTemplate: + """Get maintenance template. + + Retrieves a specific maintenance template by its ID. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param template_id: The ID of the degradation or maintenance template. + :type template_id: UUID + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: MaintenanceTemplate + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["template_id"] = template_id + + if include is not unset: + kwargs["include"] = include + + return self._get_maintenance_template_endpoint.call_with_http_info(**kwargs) + + def get_status_page(self, page_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> StatusPage: + """Get status page. + + Retrieves a specific status page by its ID. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user. + :type include: str, optional + :rtype: StatusPage + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if include is not unset: + kwargs["include"] = include + + return self._get_status_page_endpoint.call_with_http_info(**kwargs) + + def list_components(self, page_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> StatusPagesComponentArray: + """List components. + + Lists all components for a status page. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page, group. + :type include: str, optional + :rtype: StatusPagesComponentArray + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if include is not unset: + kwargs["include"] = include + + return self._list_components_endpoint.call_with_http_info(**kwargs) + + def list_degradations(self, *, filter_page_id: Union[str, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, include: Union[str, UnsetType]=unset, filter_status: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter_source_id: Union[str, UnsetType]=unset, ) -> DegradationArray: + """List degradations. + + Lists all degradations for the organization. Optionally filter by status and page. + + :param filter_page_id: Optional page id filter. + :type filter_page_id: str, optional + :param page_offset: Offset to use as the start of the page. + :type page_offset: int, optional + :param page_limit: The number of degradations to return per page. + :type page_limit: int, optional + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :param filter_status: Optional degradation status filter. Supported values: investigating, identified, monitoring, resolved. + :type filter_status: str, optional + :param sort: Sort order. Prefix with '-' for descending. Supported values: created_at, -created_at, modified_at, -modified_at. + :type sort: str, optional + :param filter_source_id: Optional source ID filter. Returns only degradations whose source matches this ID (for example, an incident ID). + :type filter_source_id: str, optional + :rtype: DegradationArray + """ + kwargs: Dict[str, Any] = {} + if filter_page_id is not unset: + kwargs["filter_page_id"] = filter_page_id + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if include is not unset: + kwargs["include"] = include + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + if sort is not unset: + kwargs["sort"] = sort + + if filter_source_id is not unset: + kwargs["filter_source_id"] = filter_source_id + + return self._list_degradations_endpoint.call_with_http_info(**kwargs) + + def list_degradation_templates(self, page_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> DegradationTemplateArray: + """List degradation templates. + + Lists all degradation templates for a status page. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: DegradationTemplateArray + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + kwargs["page_id"] = page_id + + return self._list_degradation_templates_endpoint.call_with_http_info(**kwargs) + + def list_maintenances(self, *, filter_page_id: Union[str, UnsetType]=unset, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, include: Union[str, UnsetType]=unset, filter_status: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, ) -> MaintenanceArray: + """List maintenances. + + Lists all maintenances for the organization. Optionally filter by status and page. + + :param filter_page_id: Optional page id filter. + :type filter_page_id: str, optional + :param page_offset: Offset to use as the start of the page. + :type page_offset: int, optional + :param page_limit: The number of maintenances to return per page. + :type page_limit: int, optional + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :param filter_status: Optional maintenance status filter. Supported values: scheduled, in_progress, completed. + :type filter_status: str, optional + :param sort: Sort order. Prefix with '-' for descending. Supported values: created_at, -created_at, start_date, -start_date. + :type sort: str, optional + :rtype: MaintenanceArray + """ + kwargs: Dict[str, Any] = {} + if filter_page_id is not unset: + kwargs["filter_page_id"] = filter_page_id + + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if include is not unset: + kwargs["include"] = include + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + if sort is not unset: + kwargs["sort"] = sort + + return self._list_maintenances_endpoint.call_with_http_info(**kwargs) + + def list_maintenance_templates(self, page_id: UUID, *, include: Union[str, UnsetType]=unset, ) -> MaintenanceTemplateArray: + """List maintenance templates. + + Lists all maintenance templates for a status page. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: MaintenanceTemplateArray + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if include is not unset: + kwargs["include"] = include + + return self._list_maintenance_templates_endpoint.call_with_http_info(**kwargs) + + def list_status_pages(self, *, page_offset: Union[int, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, filter_domain_prefix: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> StatusPageArray: + """List status pages. + + Lists all status pages for the organization. + + :param page_offset: Offset to use as the start of the page. + :type page_offset: int, optional + :param page_limit: The number of status pages to return per page. + :type page_limit: int, optional + :param filter_domain_prefix: Filter status pages by exact domain prefix match. Returns at most one result. + :type filter_domain_prefix: str, optional + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user. + :type include: str, optional + :rtype: StatusPageArray + """ + kwargs: Dict[str, Any] = {} + if page_offset is not unset: + kwargs["page_offset"] = page_offset + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if filter_domain_prefix is not unset: + kwargs["filter_domain_prefix"] = filter_domain_prefix + + if include is not unset: + kwargs["include"] = include + + return self._list_status_pages_endpoint.call_with_http_info(**kwargs) + + def patch_maintenance_update(self, page_id: UUID, maintenance_id: UUID, update_id: UUID, body: PatchMaintenanceUpdateRequest, ) -> MaintenanceUpdate: + """Edit maintenance update. + + Edits the message of a specific maintenance update. Editing is allowed regardless of the parent maintenance's status, including completed and canceled maintenances. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param maintenance_id: The ID of the maintenance. + :type maintenance_id: UUID + :param update_id: The ID of the maintenance update. + :type update_id: UUID + :type body: PatchMaintenanceUpdateRequest + :rtype: MaintenanceUpdate + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["maintenance_id"] = maintenance_id + + kwargs["update_id"] = update_id + + kwargs["body"] = body + + return self._patch_maintenance_update_endpoint.call_with_http_info(**kwargs) + + def publish_status_page(self, page_id: UUID, ) -> None: + """Publish status page. + + Publishes a status page. For pages of type ``public`` , makes the status page available on the public internet and requires the ``status_pages_public_page_publish`` permission. For pages of type ``internal`` , makes the status page available under the ``status-pages/$domain_prefix/view`` route within the Datadog organization and requires the ``status_pages_internal_page_publish`` permission. The ``status_pages_settings_write`` permission is temporarily honored as we migrate publishing functionality from the update status page endpoint to the publish status page endpoint. + + :param page_id: The ID of the status page. + :type page_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + return self._publish_status_page_endpoint.call_with_http_info(**kwargs) + + def soft_delete_degradation_update(self, degradation_id: UUID, page_id: UUID, update_id: UUID, ) -> None: + """Soft delete degradation update. + + Soft-deletes a degradation update. + + :param degradation_id: The ID of the degradation. + :type degradation_id: UUID + :param page_id: The ID of the status page. + :type page_id: UUID + :param update_id: The ID of the degradation update. + :type update_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["degradation_id"] = degradation_id + + kwargs["page_id"] = page_id + + kwargs["update_id"] = update_id + + return self._soft_delete_degradation_update_endpoint.call_with_http_info(**kwargs) + + def unpublish_status_page(self, page_id: UUID, ) -> None: + """Unpublish status page. + + Unpublishes a status page. For pages of type ``public`` , removes the status page from the public internet and requires the ``status_pages_public_page_publish`` permission. For pages of type ``internal`` , removes the ``status-pages/$domain_prefix/view`` route from the Datadog organization and requires the ``status_pages_internal_page_publish`` permission. The ``status_pages_settings_write`` permission is temporarily honored as we migrate unpublishing functionality from the update status page endpoint to the unpublish status page endpoint. + + :param page_id: The ID of the status page. + :type page_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + return self._unpublish_status_page_endpoint.call_with_http_info(**kwargs) + + def update_component(self, page_id: UUID, component_id: UUID, body: PatchComponentRequest, *, include: Union[str, UnsetType]=unset, ) -> StatusPagesComponent: + """Update component. + + Updates an existing component's attributes. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param component_id: The ID of the component. + :type component_id: UUID + :type body: PatchComponentRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page, group. + :type include: str, optional + :rtype: StatusPagesComponent + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["component_id"] = component_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_component_endpoint.call_with_http_info(**kwargs) + + def update_degradation(self, page_id: UUID, degradation_id: UUID, body: PatchDegradationRequest, *, notify_subscribers: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> Degradation: + """Update degradation. + + Updates an existing degradation's attributes. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param degradation_id: The ID of the degradation. + :type degradation_id: UUID + :type body: PatchDegradationRequest + :param notify_subscribers: Whether to notify page subscribers of the degradation. + :type notify_subscribers: bool, optional + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: Degradation + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if notify_subscribers is not unset: + kwargs["notify_subscribers"] = notify_subscribers + + kwargs["degradation_id"] = degradation_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_degradation_endpoint.call_with_http_info(**kwargs) + + def update_degradation_template(self, template_id: UUID, page_id: UUID, body: PatchDegradationTemplateRequest, *, include: Union[str, UnsetType]=unset, ) -> DegradationTemplate: + """Update degradation template. + + Updates an existing degradation template's attributes. + + :param template_id: The ID of the degradation or maintenance template. + :type template_id: UUID + :param page_id: The ID of the status page. + :type page_id: UUID + :type body: PatchDegradationTemplateRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: DegradationTemplate + """ + kwargs: Dict[str, Any] = {} + kwargs["template_id"] = template_id + + if include is not unset: + kwargs["include"] = include + + kwargs["page_id"] = page_id + + kwargs["body"] = body + + return self._update_degradation_template_endpoint.call_with_http_info(**kwargs) + + def update_maintenance(self, page_id: UUID, maintenance_id: UUID, body: PatchMaintenanceRequest, *, notify_subscribers: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> Maintenance: + """Update maintenance. + + Updates an existing maintenance's attributes. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param maintenance_id: The ID of the maintenance. + :type maintenance_id: UUID + :type body: PatchMaintenanceRequest + :param notify_subscribers: Whether to notify page subscribers of the maintenance. + :type notify_subscribers: bool, optional + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: Maintenance + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + if notify_subscribers is not unset: + kwargs["notify_subscribers"] = notify_subscribers + + kwargs["maintenance_id"] = maintenance_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_maintenance_endpoint.call_with_http_info(**kwargs) + + def update_maintenance_template(self, page_id: UUID, template_id: UUID, body: PatchMaintenanceTemplateRequest, *, include: Union[str, UnsetType]=unset, ) -> MaintenanceTemplate: + """Update maintenance template. + + Updates an existing maintenance template's attributes. + + :param page_id: The ID of the status page. + :type page_id: UUID + :param template_id: The ID of the degradation or maintenance template. + :type template_id: UUID + :type body: PatchMaintenanceTemplateRequest + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user, status_page. + :type include: str, optional + :rtype: MaintenanceTemplate + """ + kwargs: Dict[str, Any] = {} + kwargs["page_id"] = page_id + + kwargs["template_id"] = template_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_maintenance_template_endpoint.call_with_http_info(**kwargs) + + def update_status_page(self, page_id: UUID, body: PatchStatusPageRequest, *, delete_subscribers: Union[bool, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> StatusPage: + """Update status page. + + Updates an existing status page's attributes. To publish and unpublish status pages, use the dedicated `publish <#publish-status-page>`_ and `unpublish <#unpublish-status-page>`_ status page endpoints. + + :param page_id: The ID of the status page. + :type page_id: UUID + :type body: PatchStatusPageRequest + :param delete_subscribers: Whether to delete existing subscribers when updating a status page's type. + :type delete_subscribers: bool, optional + :param include: Comma-separated list of resources to include. Supported values: created_by_user, last_modified_by_user. + :type include: str, optional + :rtype: StatusPage + """ + kwargs: Dict[str, Any] = {} + if delete_subscribers is not unset: + kwargs["delete_subscribers"] = delete_subscribers + + kwargs["page_id"] = page_id + + if include is not unset: + kwargs["include"] = include + + kwargs["body"] = body + + return self._update_status_page_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/statuspage_integration_api.py b/datadog_api_client/v2/api/statuspage_integration_api.py new file mode 100644 index 0000000000..246fbc28e0 --- /dev/null +++ b/datadog_api_client/v2/api/statuspage_integration_api.py @@ -0,0 +1,317 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.statuspage_account_response import StatuspageAccountResponse +from datadog_api_client.v2.model.statuspage_account_update_request import StatuspageAccountUpdateRequest +from datadog_api_client.v2.model.statuspage_account_create_request import StatuspageAccountCreateRequest +from datadog_api_client.v2.model.statuspage_url_settings_response import StatuspageUrlSettingsResponse +from datadog_api_client.v2.model.statuspage_url_setting_response import StatuspageUrlSettingResponse +from datadog_api_client.v2.model.statuspage_url_setting_create_request import StatuspageUrlSettingCreateRequest +from datadog_api_client.v2.model.statuspage_url_setting_update_request import StatuspageUrlSettingUpdateRequest + + +class StatuspageIntegrationApi: + """ + Configure your `Datadog Statuspage integration `_ + directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_statuspage_account_endpoint = _Endpoint( + settings={ + "response_type": (StatuspageAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/statuspage/account", + "operation_id": "create_statuspage_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (StatuspageAccountCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_statuspage_url_setting_endpoint = _Endpoint( + settings={ + "response_type": (StatuspageUrlSettingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/statuspage/url_settings", + "operation_id": "create_statuspage_url_setting", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (StatuspageUrlSettingCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_statuspage_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/statuspage/account", + "operation_id": "delete_statuspage_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_statuspage_url_setting_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/statuspage/url_settings/{statuspage_url_setting_id}", + "operation_id": "delete_statuspage_url_setting", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "statuspage_url_setting_id": { + "required": True, + "openapi_types": (str,), + "attribute": "statuspage_url_setting_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_statuspage_account_endpoint = _Endpoint( + settings={ + "response_type": (StatuspageAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/statuspage/account", + "operation_id": "get_statuspage_account", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_statuspage_url_settings_endpoint = _Endpoint( + settings={ + "response_type": (StatuspageUrlSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/statuspage/url_settings", + "operation_id": "list_statuspage_url_settings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_statuspage_account_endpoint = _Endpoint( + settings={ + "response_type": (StatuspageAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/statuspage/account", + "operation_id": "update_statuspage_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (StatuspageAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_statuspage_url_setting_endpoint = _Endpoint( + settings={ + "response_type": (StatuspageUrlSettingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/statuspage/url_settings/{statuspage_url_setting_id}", + "operation_id": "update_statuspage_url_setting", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "statuspage_url_setting_id": { + "required": True, + "openapi_types": (str,), + "attribute": "statuspage_url_setting_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (StatuspageUrlSettingUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_statuspage_account(self, body: StatuspageAccountCreateRequest, ) -> StatuspageAccountResponse: + """Create the Statuspage account. + + Create a Statuspage account for your organization. Only one Statuspage + account can be configured per organization. + + :param body: Statuspage account payload. + :type body: StatuspageAccountCreateRequest + :rtype: StatuspageAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_statuspage_account_endpoint.call_with_http_info(**kwargs) + + def create_statuspage_url_setting(self, body: StatuspageUrlSettingCreateRequest, ) -> StatuspageUrlSettingResponse: + """Create a Statuspage URL setting. + + Create a Statuspage URL setting for your organization. + + :param body: Statuspage URL setting payload. + :type body: StatuspageUrlSettingCreateRequest + :rtype: StatuspageUrlSettingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_statuspage_url_setting_endpoint.call_with_http_info(**kwargs) + + def delete_statuspage_account(self, ) -> None: + """Delete the Statuspage account. + + Delete the Statuspage account configured for your organization. + + :rtype: None + """ + kwargs: Dict[str, Any] = {} + return self._delete_statuspage_account_endpoint.call_with_http_info(**kwargs) + + def delete_statuspage_url_setting(self, statuspage_url_setting_id: str, ) -> None: + """Delete a Statuspage URL setting. + + Delete a single Statuspage URL setting from your organization. + + :param statuspage_url_setting_id: The UUID of the Statuspage URL setting. + :type statuspage_url_setting_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["statuspage_url_setting_id"] = statuspage_url_setting_id + + return self._delete_statuspage_url_setting_endpoint.call_with_http_info(**kwargs) + + def get_statuspage_account(self, ) -> StatuspageAccountResponse: + """Get the Statuspage account. + + Get the Statuspage account configured for your organization. + + :rtype: StatuspageAccountResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_statuspage_account_endpoint.call_with_http_info(**kwargs) + + def list_statuspage_url_settings(self, ) -> StatuspageUrlSettingsResponse: + """Get all Statuspage URL settings. + + Get all Statuspage URL settings configured for your organization. + + :rtype: StatuspageUrlSettingsResponse + """ + kwargs: Dict[str, Any] = {} + return self._list_statuspage_url_settings_endpoint.call_with_http_info(**kwargs) + + def update_statuspage_account(self, body: StatuspageAccountUpdateRequest, ) -> StatuspageAccountResponse: + """Update the Statuspage account. + + Update the Statuspage account configured for your organization. + + :param body: Statuspage account payload. + :type body: StatuspageAccountUpdateRequest + :rtype: StatuspageAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_statuspage_account_endpoint.call_with_http_info(**kwargs) + + def update_statuspage_url_setting(self, statuspage_url_setting_id: str, body: StatuspageUrlSettingUpdateRequest, ) -> StatuspageUrlSettingResponse: + """Update a Statuspage URL setting. + + Update a single Statuspage URL setting in your organization. + + :param statuspage_url_setting_id: The UUID of the Statuspage URL setting. + :type statuspage_url_setting_id: str + :param body: Statuspage URL setting payload. + :type body: StatuspageUrlSettingUpdateRequest + :rtype: StatuspageUrlSettingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["statuspage_url_setting_id"] = statuspage_url_setting_id + + kwargs["body"] = body + + return self._update_statuspage_url_setting_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/stegadography_api.py b/datadog_api_client/v2/api/stegadography_api.py new file mode 100644 index 0000000000..c7dc567e8a --- /dev/null +++ b/datadog_api_client/v2/api/stegadography_api.py @@ -0,0 +1,75 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.stegadography_get_widgets_response import StegadographyGetWidgetsResponse +from datadog_api_client.v2.model.stegadography_get_widgets_request import StegadographyGetWidgetsRequest + + +class StegadographyApi: + """ + Extract watermarks embedded in dashboard screenshots to retrieve cached widget state. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_stegadography_widgets_endpoint = _Endpoint( + settings={ + "response_type": (StegadographyGetWidgetsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/stegadography/get-widgets", + "operation_id": "get_stegadography_widgets", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "image": { + "required": True, + "openapi_types": (file_type,), + "attribute": "image", + "location": "form", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["multipart/form-data"] + }, + api_client=api_client, + ) + + def get_stegadography_widgets(self, image: file_type, ) -> StegadographyGetWidgetsResponse: + """Get widgets from an image. + + Extracts watermarks from a PNG image and returns the cached widget data + associated with each watermark found. The image must be uploaded as a + ``multipart/form-data`` request with the file in the ``image`` field. + Only widgets belonging to the authenticated organization are returned. + + :param image: PNG image file to scan for embedded watermarks. + :type image: file_type + :rtype: StegadographyGetWidgetsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["image"] = image + + return self._get_stegadography_widgets_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/storage_management_api.py b/datadog_api_client/v2/api/storage_management_api.py new file mode 100644 index 0000000000..9637269b9b --- /dev/null +++ b/datadog_api_client/v2/api/storage_management_api.py @@ -0,0 +1,107 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.cloud_inventory_sync_config_response import CloudInventorySyncConfigResponse +from datadog_api_client.v2.model.upsert_cloud_inventory_sync_config_request import UpsertCloudInventorySyncConfigRequest + + +class StorageManagementApi: + """ + Enable Storage Management for S3 buckets, GCS buckets, and Azure containers. Each configuration registers the destination that holds inventory reports for the storage being monitored. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_sync_config_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cloudinventoryservice/syncconfigs/{id}", + "operation_id": "delete_sync_config", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._upsert_sync_config_endpoint = _Endpoint( + settings={ + "response_type": (CloudInventorySyncConfigResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/cloudinventoryservice/syncconfigs", + "operation_id": "upsert_sync_config", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UpsertCloudInventorySyncConfigRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def delete_sync_config(self, id: str, ) -> None: + """Delete a Storage Management configuration. + + Delete a Storage Management configuration by its unique identifier. Deleting a configuration stops inventory file synchronization for the associated cloud account. + + :param id: Unique identifier of the Storage Management configuration. + :type id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._delete_sync_config_endpoint.call_with_http_info(**kwargs) + + def upsert_sync_config(self, body: UpsertCloudInventorySyncConfigRequest, ) -> CloudInventorySyncConfigResponse: + """Enable Storage Management for a bucket. + + Enable Storage Management for an S3 bucket, GCS bucket, or Azure container by registering the destination that holds its inventory reports. Set ``data.id`` to the cloud provider ( ``aws`` , ``gcp`` , or ``azure`` ) and provide the matching settings under data.attributes. Calling this endpoint with the same provider replaces the existing configuration. + + :type body: UpsertCloudInventorySyncConfigRequest + :rtype: CloudInventorySyncConfigResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._upsert_sync_config_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/synthetics_api.py b/datadog_api_client/v2/api/synthetics_api.py new file mode 100644 index 0000000000..354cff2615 --- /dev/null +++ b/datadog_api_client/v2/api/synthetics_api.py @@ -0,0 +1,1750 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.synthetics_api_multistep_subtests_response import SyntheticsApiMultistepSubtestsResponse +from datadog_api_client.v2.model.synthetics_api_multistep_parent_tests_response import SyntheticsApiMultistepParentTestsResponse +from datadog_api_client.v2.model.synthetics_downtimes_response import SyntheticsDowntimesResponse +from datadog_api_client.v2.model.synthetics_downtime_response import SyntheticsDowntimeResponse +from datadog_api_client.v2.model.synthetics_downtime_request import SyntheticsDowntimeRequest +from datadog_api_client.v2.model.on_demand_concurrency_cap_response import OnDemandConcurrencyCapResponse +from datadog_api_client.v2.model.on_demand_concurrency_cap_attributes import OnDemandConcurrencyCapAttributes +from datadog_api_client.v2.model.synthetics_suite_response import SyntheticsSuiteResponse +from datadog_api_client.v2.model.suite_create_edit_request import SuiteCreateEditRequest +from datadog_api_client.v2.model.deleted_suites_response import DeletedSuitesResponse +from datadog_api_client.v2.model.deleted_suites_request_delete_request import DeletedSuitesRequestDeleteRequest +from datadog_api_client.v2.model.synthetics_suite_search_response import SyntheticsSuiteSearchResponse +from datadog_api_client.v2.model.suite_json_patch_request import SuiteJsonPatchRequest +from datadog_api_client.v2.model.synthetics_test_latest_results_response import SyntheticsTestLatestResultsResponse +from datadog_api_client.v2.model.synthetics_test_result_status import SyntheticsTestResultStatus +from datadog_api_client.v2.model.synthetics_test_result_run_type import SyntheticsTestResultRunType +from datadog_api_client.v2.model.synthetics_test_result_response import SyntheticsTestResultResponse +from datadog_api_client.v2.model.deleted_tests_response import DeletedTestsResponse +from datadog_api_client.v2.model.deleted_tests_request_delete_request import DeletedTestsRequestDeleteRequest +from datadog_api_client.v2.model.synthetics_fast_test_result import SyntheticsFastTestResult +from datadog_api_client.v2.model.synthetics_network_test_response import SyntheticsNetworkTestResponse +from datadog_api_client.v2.model.synthetics_network_test_edit_request import SyntheticsNetworkTestEditRequest +from datadog_api_client.v2.model.synthetics_poll_test_results_response import SyntheticsPollTestResultsResponse +from datadog_api_client.v2.model.synthetics_test_file_download_response import SyntheticsTestFileDownloadResponse +from datadog_api_client.v2.model.synthetics_test_file_download_request import SyntheticsTestFileDownloadRequest +from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_response import SyntheticsTestFileMultipartPresignedUrlsResponse +from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_request import SyntheticsTestFileMultipartPresignedUrlsRequest +from datadog_api_client.v2.model.synthetics_test_file_abort_multipart_upload_request import SyntheticsTestFileAbortMultipartUploadRequest +from datadog_api_client.v2.model.synthetics_test_file_complete_multipart_upload_request import SyntheticsTestFileCompleteMultipartUploadRequest +from datadog_api_client.v2.model.synthetics_test_parent_suites_response import SyntheticsTestParentSuitesResponse +from datadog_api_client.v2.model.synthetics_test_version_history_response import SyntheticsTestVersionHistoryResponse +from datadog_api_client.v2.model.synthetics_test_version_response import SyntheticsTestVersionResponse +from datadog_api_client.v2.model.global_variable_response import GlobalVariableResponse +from datadog_api_client.v2.model.global_variable_json_patch_request import GlobalVariableJsonPatchRequest + + +class SyntheticsApi: + """ + Synthetic tests use simulated requests and actions so you can monitor the availability and performance of systems and applications. Datadog supports the following types of synthetic tests: + + * `API tests `_ + * `Browser tests `_ + * `Network Path tests `_ + * `Mobile Application tests `_ + You can use the Datadog API to create, manage, and organize tests and test suites programmatically. + For more information, see the `Synthetic Monitoring documentation `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._abort_test_file_multipart_upload_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/{public_id}/files/multipart-upload-abort", + "operation_id": "abort_test_file_multipart_upload", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsTestFileAbortMultipartUploadRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._add_test_to_synthetics_downtime_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsDowntimeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/downtimes/{downtime_id}/tests/{test_id}", + "operation_id": "add_test_to_synthetics_downtime", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (str,), + "attribute": "downtime_id", + "location": "path", + }, + "test_id": { + "required": True, + "openapi_types": (str,), + "attribute": "test_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._complete_test_file_multipart_upload_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/{public_id}/files/multipart-upload-complete", + "operation_id": "complete_test_file_multipart_upload", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsTestFileCompleteMultipartUploadRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_synthetics_downtime_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsDowntimeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/downtimes", + "operation_id": "create_synthetics_downtime", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsDowntimeRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_synthetics_network_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsNetworkTestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/network", + "operation_id": "create_synthetics_network_test", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SyntheticsNetworkTestEditRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_synthetics_suite_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsSuiteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/suites", + "operation_id": "create_synthetics_suite", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (SuiteCreateEditRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_synthetics_downtime_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/downtimes/{downtime_id}", + "operation_id": "delete_synthetics_downtime", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (str,), + "attribute": "downtime_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_synthetics_suites_endpoint = _Endpoint( + settings={ + "response_type": (DeletedSuitesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/suites/bulk-delete", + "operation_id": "delete_synthetics_suites", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DeletedSuitesRequestDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_synthetics_tests_endpoint = _Endpoint( + settings={ + "response_type": (DeletedTestsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/bulk-delete", + "operation_id": "delete_synthetics_tests", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (DeletedTestsRequestDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._edit_synthetics_suite_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsSuiteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/suites/{public_id}", + "operation_id": "edit_synthetics_suite", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SuiteCreateEditRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_api_multistep_subtest_parents_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsApiMultistepParentTestsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/api-multistep/subtests/{public_id}/parents", + "operation_id": "get_api_multistep_subtest_parents", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_api_multistep_subtests_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsApiMultistepSubtestsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/api-multistep/subtests/{public_id}", + "operation_id": "get_api_multistep_subtests", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_on_demand_concurrency_cap_endpoint = _Endpoint( + settings={ + "response_type": (OnDemandConcurrencyCapResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/settings/on_demand_concurrency_cap", + "operation_id": "get_on_demand_concurrency_cap", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_synthetics_browser_test_result_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestResultResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/browser/{public_id}/results/{result_id}", + "operation_id": "get_synthetics_browser_test_result", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "result_id": { + "required": True, + "openapi_types": (str,), + "attribute": "result_id", + "location": "path", + }, + "event_id": { + "openapi_types": (str,), + "attribute": "event_id", + "location": "query", + }, + "timestamp": { + "openapi_types": (int,), + "attribute": "timestamp", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_synthetics_downtime_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsDowntimeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/downtimes/{downtime_id}", + "operation_id": "get_synthetics_downtime", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (str,), + "attribute": "downtime_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_synthetics_fast_test_result_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsFastTestResult,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/fast/{id}", + "operation_id": "get_synthetics_fast_test_result", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "id": { + "required": True, + "openapi_types": (str,), + "attribute": "id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_synthetics_network_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsNetworkTestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/network/{public_id}", + "operation_id": "get_synthetics_network_test", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_synthetics_suite_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsSuiteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/suites/{public_id}", + "operation_id": "get_synthetics_suite", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_synthetics_test_result_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestResultResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/{public_id}/results/{result_id}", + "operation_id": "get_synthetics_test_result", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "result_id": { + "required": True, + "openapi_types": (str,), + "attribute": "result_id", + "location": "path", + }, + "event_id": { + "openapi_types": (str,), + "attribute": "event_id", + "location": "query", + }, + "timestamp": { + "openapi_types": (int,), + "attribute": "timestamp", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_synthetics_test_version_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestVersionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/{public_id}/version_history/{version_number}", + "operation_id": "get_synthetics_test_version", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "version_number": { + "required": True, + "openapi_types": (int,), + "attribute": "version_number", + "location": "path", + }, + "include_change_metadata": { + "openapi_types": (bool,), + "attribute": "include_change_metadata", + "location": "query", + }, + "only_check_existence": { + "openapi_types": (bool,), + "attribute": "only_check_existence", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_test_file_download_url_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestFileDownloadResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/{public_id}/files/download", + "operation_id": "get_test_file_download_url", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsTestFileDownloadRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_test_file_multipart_presigned_urls_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestFileMultipartPresignedUrlsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/{public_id}/files/multipart-presigned-urls", + "operation_id": "get_test_file_multipart_presigned_urls", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsTestFileMultipartPresignedUrlsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_test_parent_suites_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestParentSuitesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/{public_id}/parent-suites", + "operation_id": "get_test_parent_suites", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_synthetics_browser_test_latest_results_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestLatestResultsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/browser/{public_id}/results", + "operation_id": "list_synthetics_browser_test_latest_results", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "from_ts": { + "openapi_types": (int,), + "attribute": "from_ts", + "location": "query", + }, + "to_ts": { + "openapi_types": (int,), + "attribute": "to_ts", + "location": "query", + }, + "status": { + "openapi_types": (SyntheticsTestResultStatus,), + "attribute": "status", + "location": "query", + }, + "run_type": { + "openapi_types": (SyntheticsTestResultRunType,), + "attribute": "runType", + "location": "query", + }, + "probe_dc": { + "openapi_types": ([str],), + "attribute": "probe_dc", + "location": "query", + "collection_format": "multi", + }, + "device_id": { + "openapi_types": ([str],), + "attribute": "device_id", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_synthetics_downtimes_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsDowntimesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/downtimes", + "operation_id": "list_synthetics_downtimes", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_test_ids": { + "openapi_types": (str,), + "attribute": "filter[test_ids]", + "location": "query", + }, + "filter_active": { + "openapi_types": (str,), + "attribute": "filter[active]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_synthetics_test_latest_results_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestLatestResultsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/{public_id}/results", + "operation_id": "list_synthetics_test_latest_results", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "from_ts": { + "openapi_types": (int,), + "attribute": "from_ts", + "location": "query", + }, + "to_ts": { + "openapi_types": (int,), + "attribute": "to_ts", + "location": "query", + }, + "status": { + "openapi_types": (SyntheticsTestResultStatus,), + "attribute": "status", + "location": "query", + }, + "run_type": { + "openapi_types": (SyntheticsTestResultRunType,), + "attribute": "runType", + "location": "query", + }, + "probe_dc": { + "openapi_types": ([str],), + "attribute": "probe_dc", + "location": "query", + "collection_format": "multi", + }, + "device_id": { + "openapi_types": ([str],), + "attribute": "device_id", + "location": "query", + "collection_format": "multi", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_synthetics_test_versions_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsTestVersionHistoryResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/{public_id}/version_history", + "operation_id": "list_synthetics_test_versions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "last_version_number": { + "openapi_types": (int,), + "attribute": "last_version_number", + "location": "query", + }, + "limit": { + "validation": { + "inclusive_maximum": 50, + }, + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._patch_global_variable_endpoint = _Endpoint( + settings={ + "response_type": (GlobalVariableResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/variables/{variable_id}/jsonpatch", + "operation_id": "patch_global_variable", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "variable_id": { + "required": True, + "openapi_types": (str,), + "attribute": "variable_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (GlobalVariableJsonPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._patch_test_suite_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsSuiteResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/suites/{public_id}/jsonpatch", + "operation_id": "patch_test_suite", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SuiteJsonPatchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._poll_synthetics_test_results_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsPollTestResultsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/poll_results", + "operation_id": "poll_synthetics_test_results", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "result_ids": { + "required": True, + "openapi_types": (str,), + "attribute": "result_ids", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._remove_test_from_synthetics_downtime_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsDowntimeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/downtimes/{downtime_id}/tests/{test_id}", + "operation_id": "remove_test_from_synthetics_downtime", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (str,), + "attribute": "downtime_id", + "location": "path", + }, + "test_id": { + "required": True, + "openapi_types": (str,), + "attribute": "test_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_suites_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsSuiteSearchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/suites/search", + "operation_id": "search_suites", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "query": { + "openapi_types": (str,), + "attribute": "query", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "facets_only": { + "openapi_types": (bool,), + "attribute": "facets_only", + "location": "query", + }, + "start": { + "openapi_types": (int,), + "attribute": "start", + "location": "query", + }, + "count": { + "openapi_types": (int,), + "attribute": "count", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._set_on_demand_concurrency_cap_endpoint = _Endpoint( + settings={ + "response_type": (OnDemandConcurrencyCapResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/settings/on_demand_concurrency_cap", + "operation_id": "set_on_demand_concurrency_cap", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (OnDemandConcurrencyCapAttributes,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_synthetics_downtime_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsDowntimeResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/synthetics/downtimes/{downtime_id}", + "operation_id": "update_synthetics_downtime", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "downtime_id": { + "required": True, + "openapi_types": (str,), + "attribute": "downtime_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsDowntimeRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_synthetics_network_test_endpoint = _Endpoint( + settings={ + "response_type": (SyntheticsNetworkTestResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/synthetics/tests/network/{public_id}", + "operation_id": "update_synthetics_network_test", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "public_id": { + "required": True, + "openapi_types": (str,), + "attribute": "public_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (SyntheticsNetworkTestEditRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def abort_test_file_multipart_upload(self, public_id: str, body: SyntheticsTestFileAbortMultipartUploadRequest, ) -> None: + """Abort a multipart upload of a test file. + + Abort an in-progress multipart file upload for a Synthetic test. This cancels the upload + and releases any storage used by already-uploaded parts. + + :param public_id: The public ID of the Synthetic test. + :type public_id: str + :type body: SyntheticsTestFileAbortMultipartUploadRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._abort_test_file_multipart_upload_endpoint.call_with_http_info(**kwargs) + + def add_test_to_synthetics_downtime(self, downtime_id: str, test_id: str, ) -> SyntheticsDowntimeResponse: + """Add a test to a Synthetics downtime. + + Associate a Synthetics test with a downtime. + + :param downtime_id: The ID of the downtime. + :type downtime_id: str + :param test_id: The public ID of the Synthetics test to associate with the downtime. + :type test_id: str + :rtype: SyntheticsDowntimeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + kwargs["test_id"] = test_id + + return self._add_test_to_synthetics_downtime_endpoint.call_with_http_info(**kwargs) + + def complete_test_file_multipart_upload(self, public_id: str, body: SyntheticsTestFileCompleteMultipartUploadRequest, ) -> None: + """Complete a multipart upload of a test file. + + Complete a multipart file upload for a Synthetic test. Call this endpoint after all parts + have been uploaded using the presigned URLs obtained from the multipart presigned URLs endpoint. + + :param public_id: The public ID of the Synthetic test. + :type public_id: str + :type body: SyntheticsTestFileCompleteMultipartUploadRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._complete_test_file_multipart_upload_endpoint.call_with_http_info(**kwargs) + + def create_synthetics_downtime(self, body: SyntheticsDowntimeRequest, ) -> SyntheticsDowntimeResponse: + """Create a Synthetics downtime. + + Create a new Synthetics downtime. + + :type body: SyntheticsDowntimeRequest + :rtype: SyntheticsDowntimeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_synthetics_downtime_endpoint.call_with_http_info(**kwargs) + + def create_synthetics_network_test(self, body: SyntheticsNetworkTestEditRequest, ) -> SyntheticsNetworkTestResponse: + """Create a Network Path test. + + :type body: SyntheticsNetworkTestEditRequest + :rtype: SyntheticsNetworkTestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_synthetics_network_test_endpoint.call_with_http_info(**kwargs) + + def create_synthetics_suite(self, body: SuiteCreateEditRequest, ) -> SyntheticsSuiteResponse: + """Create a test suite. + + :type body: SuiteCreateEditRequest + :rtype: SyntheticsSuiteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_synthetics_suite_endpoint.call_with_http_info(**kwargs) + + def delete_synthetics_downtime(self, downtime_id: str, ) -> None: + """Delete a Synthetics downtime. + + Delete a Synthetics downtime by its ID. + + :param downtime_id: The ID of the downtime to delete. + :type downtime_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + return self._delete_synthetics_downtime_endpoint.call_with_http_info(**kwargs) + + def delete_synthetics_suites(self, body: DeletedSuitesRequestDeleteRequest, ) -> DeletedSuitesResponse: + """Bulk delete suites. + + :type body: DeletedSuitesRequestDeleteRequest + :rtype: DeletedSuitesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_synthetics_suites_endpoint.call_with_http_info(**kwargs) + + def delete_synthetics_tests(self, body: DeletedTestsRequestDeleteRequest, ) -> DeletedTestsResponse: + """Bulk delete tests. + + :type body: DeletedTestsRequestDeleteRequest + :rtype: DeletedTestsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_synthetics_tests_endpoint.call_with_http_info(**kwargs) + + def edit_synthetics_suite(self, public_id: str, body: SuiteCreateEditRequest, ) -> SyntheticsSuiteResponse: + """Edit a test suite. + + :param public_id: The public ID of the suite to edit. + :type public_id: str + :param body: New suite details to be saved. + :type body: SuiteCreateEditRequest + :rtype: SyntheticsSuiteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._edit_synthetics_suite_endpoint.call_with_http_info(**kwargs) + + def get_api_multistep_subtest_parents(self, public_id: str, ) -> SyntheticsApiMultistepParentTestsResponse: + """Get parent tests for a subtest. + + Get the list of API multistep tests that include a given subtest, + along with their monitor status. + + :param public_id: The public ID of the subtest. + :type public_id: str + :rtype: SyntheticsApiMultistepParentTestsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_api_multistep_subtest_parents_endpoint.call_with_http_info(**kwargs) + + def get_api_multistep_subtests(self, public_id: str, ) -> SyntheticsApiMultistepSubtestsResponse: + """Get available subtests for a multistep test. + + Get the list of API tests that can be added as subtests to a given API multistep test. + The current test is excluded from the list since a test cannot be a subtest of itself. + + :param public_id: The public ID of the API multistep test. + :type public_id: str + :rtype: SyntheticsApiMultistepSubtestsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_api_multistep_subtests_endpoint.call_with_http_info(**kwargs) + + def get_on_demand_concurrency_cap(self, ) -> OnDemandConcurrencyCapResponse: + """Get the on-demand concurrency cap. + + Get the on-demand concurrency cap. + + :rtype: OnDemandConcurrencyCapResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_on_demand_concurrency_cap_endpoint.call_with_http_info(**kwargs) + + def get_synthetics_browser_test_result(self, public_id: str, result_id: str, *, event_id: Union[str, UnsetType]=unset, timestamp: Union[int, UnsetType]=unset, ) -> SyntheticsTestResultResponse: + """Get a browser test result. + + Get a specific full result from a given Synthetic browser test. + + :param public_id: The public ID of the Synthetic browser test to which the target result belongs. + :type public_id: str + :param result_id: The ID of the result to get. + :type result_id: str + :param event_id: The event ID used to look up the result in the event store. + :type event_id: str, optional + :param timestamp: Timestamp in seconds to look up the result. + :type timestamp: int, optional + :rtype: SyntheticsTestResultResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["result_id"] = result_id + + if event_id is not unset: + kwargs["event_id"] = event_id + + if timestamp is not unset: + kwargs["timestamp"] = timestamp + + return self._get_synthetics_browser_test_result_endpoint.call_with_http_info(**kwargs) + + def get_synthetics_downtime(self, downtime_id: str, ) -> SyntheticsDowntimeResponse: + """Get a Synthetics downtime. + + Get a Synthetics downtime by its ID. + + :param downtime_id: The ID of the downtime to retrieve. + :type downtime_id: str + :rtype: SyntheticsDowntimeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + return self._get_synthetics_downtime_endpoint.call_with_http_info(**kwargs) + + def get_synthetics_fast_test_result(self, id: str, ) -> SyntheticsFastTestResult: + """Get a fast test result. + + :param id: The UUID of the fast test to retrieve the result for. + :type id: str + :rtype: SyntheticsFastTestResult + """ + kwargs: Dict[str, Any] = {} + kwargs["id"] = id + + return self._get_synthetics_fast_test_result_endpoint.call_with_http_info(**kwargs) + + def get_synthetics_network_test(self, public_id: str, ) -> SyntheticsNetworkTestResponse: + """Get a Network Path test. + + :param public_id: The public ID of the Network Path test to get details from. + :type public_id: str + :rtype: SyntheticsNetworkTestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_synthetics_network_test_endpoint.call_with_http_info(**kwargs) + + def get_synthetics_suite(self, public_id: str, ) -> SyntheticsSuiteResponse: + """Get a suite. + + :param public_id: The public ID of the suite to get details from. + :type public_id: str + :rtype: SyntheticsSuiteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_synthetics_suite_endpoint.call_with_http_info(**kwargs) + + def get_synthetics_test_result(self, public_id: str, result_id: str, *, event_id: Union[str, UnsetType]=unset, timestamp: Union[int, UnsetType]=unset, ) -> SyntheticsTestResultResponse: + """Get a test result. + + Get a specific full result from a given Synthetic test. + + :param public_id: The public ID of the Synthetic test to which the target result belongs. + :type public_id: str + :param result_id: The ID of the result to get. + :type result_id: str + :param event_id: The event ID used to look up the result in the event store. + :type event_id: str, optional + :param timestamp: Timestamp in seconds to look up the result. + :type timestamp: int, optional + :rtype: SyntheticsTestResultResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["result_id"] = result_id + + if event_id is not unset: + kwargs["event_id"] = event_id + + if timestamp is not unset: + kwargs["timestamp"] = timestamp + + return self._get_synthetics_test_result_endpoint.call_with_http_info(**kwargs) + + def get_synthetics_test_version(self, public_id: str, version_number: int, *, include_change_metadata: Union[bool, UnsetType]=unset, only_check_existence: Union[bool, UnsetType]=unset, ) -> SyntheticsTestVersionResponse: + """Get a specific version of a test. + + Get a specific version of a Synthetic test by its version number. + + :param public_id: The public ID of the Synthetic test. + :type public_id: str + :param version_number: The version number to retrieve. + :type version_number: int + :param include_change_metadata: If ``true`` , include change metadata in the response. + :type include_change_metadata: bool, optional + :param only_check_existence: If ``true`` , only check whether the version exists without returning its full payload. + Returns an empty object if the version exists, or 404 if not. + :type only_check_existence: bool, optional + :rtype: SyntheticsTestVersionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["version_number"] = version_number + + if include_change_metadata is not unset: + kwargs["include_change_metadata"] = include_change_metadata + + if only_check_existence is not unset: + kwargs["only_check_existence"] = only_check_existence + + return self._get_synthetics_test_version_endpoint.call_with_http_info(**kwargs) + + def get_test_file_download_url(self, public_id: str, body: SyntheticsTestFileDownloadRequest, ) -> SyntheticsTestFileDownloadResponse: + """Get a presigned URL for downloading a test file. + + Get a presigned URL to download a file attached to a Synthetic test. + The returned URL is temporary and expires after a short period. + + :param public_id: The public ID of the Synthetic test. + :type public_id: str + :type body: SyntheticsTestFileDownloadRequest + :rtype: SyntheticsTestFileDownloadResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._get_test_file_download_url_endpoint.call_with_http_info(**kwargs) + + def get_test_file_multipart_presigned_urls(self, public_id: str, body: SyntheticsTestFileMultipartPresignedUrlsRequest, ) -> SyntheticsTestFileMultipartPresignedUrlsResponse: + """Get presigned URLs for uploading a test file. + + Get presigned URLs for uploading a file to a Synthetic test using multipart upload. + Returns the presigned URLs for each part along with the bucket key that references the file. + + :param public_id: The public ID of the Synthetic test. + :type public_id: str + :type body: SyntheticsTestFileMultipartPresignedUrlsRequest + :rtype: SyntheticsTestFileMultipartPresignedUrlsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._get_test_file_multipart_presigned_urls_endpoint.call_with_http_info(**kwargs) + + def get_test_parent_suites(self, public_id: str, ) -> SyntheticsTestParentSuitesResponse: + """Get parent suites for a test. + + Get the list of parent suites and their status for a given Synthetic test. + + :param public_id: The public ID of the Synthetic test. + :type public_id: str + :rtype: SyntheticsTestParentSuitesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + return self._get_test_parent_suites_endpoint.call_with_http_info(**kwargs) + + def list_synthetics_browser_test_latest_results(self, public_id: str, *, from_ts: Union[int, UnsetType]=unset, to_ts: Union[int, UnsetType]=unset, status: Union[SyntheticsTestResultStatus, UnsetType]=unset, run_type: Union[SyntheticsTestResultRunType, UnsetType]=unset, probe_dc: Union[List[str], UnsetType]=unset, device_id: Union[List[str], UnsetType]=unset, ) -> SyntheticsTestLatestResultsResponse: + """Get a browser test's latest results. + + Get the latest result summaries for a given Synthetic browser test. + + :param public_id: The public ID of the Synthetic browser test for which to search results. + :type public_id: str + :param from_ts: Timestamp in milliseconds from which to start querying results. + :type from_ts: int, optional + :param to_ts: Timestamp in milliseconds up to which to query results. + :type to_ts: int, optional + :param status: Filter results by status. + :type status: SyntheticsTestResultStatus, optional + :param run_type: Filter results by run type. + :type run_type: SyntheticsTestResultRunType, optional + :param probe_dc: Locations for which to query results. + :type probe_dc: [str], optional + :param device_id: Device IDs for which to query results. + :type device_id: [str], optional + :rtype: SyntheticsTestLatestResultsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + if from_ts is not unset: + kwargs["from_ts"] = from_ts + + if to_ts is not unset: + kwargs["to_ts"] = to_ts + + if status is not unset: + kwargs["status"] = status + + if run_type is not unset: + kwargs["run_type"] = run_type + + if probe_dc is not unset: + kwargs["probe_dc"] = probe_dc + + if device_id is not unset: + kwargs["device_id"] = device_id + + return self._list_synthetics_browser_test_latest_results_endpoint.call_with_http_info(**kwargs) + + def list_synthetics_downtimes(self, *, filter_test_ids: Union[str, UnsetType]=unset, filter_active: Union[str, UnsetType]=unset, ) -> SyntheticsDowntimesResponse: + """List Synthetics downtimes. + + Get a list of all Synthetics downtimes for your organization. + + :param filter_test_ids: Comma-separated list of Synthetics test public IDs to filter downtimes by. + :type filter_test_ids: str, optional + :param filter_active: If set to ``true`` , return only downtimes that are currently active. + :type filter_active: str, optional + :rtype: SyntheticsDowntimesResponse + """ + kwargs: Dict[str, Any] = {} + if filter_test_ids is not unset: + kwargs["filter_test_ids"] = filter_test_ids + + if filter_active is not unset: + kwargs["filter_active"] = filter_active + + return self._list_synthetics_downtimes_endpoint.call_with_http_info(**kwargs) + + def list_synthetics_test_latest_results(self, public_id: str, *, from_ts: Union[int, UnsetType]=unset, to_ts: Union[int, UnsetType]=unset, status: Union[SyntheticsTestResultStatus, UnsetType]=unset, run_type: Union[SyntheticsTestResultRunType, UnsetType]=unset, probe_dc: Union[List[str], UnsetType]=unset, device_id: Union[List[str], UnsetType]=unset, ) -> SyntheticsTestLatestResultsResponse: + """Get a test's latest results. + + Get the latest result summaries for a given Synthetic test. + + :param public_id: The public ID of the Synthetic test for which to search results. + :type public_id: str + :param from_ts: Timestamp in milliseconds from which to start querying results. + :type from_ts: int, optional + :param to_ts: Timestamp in milliseconds up to which to query results. + :type to_ts: int, optional + :param status: Filter results by status. + :type status: SyntheticsTestResultStatus, optional + :param run_type: Filter results by run type. + :type run_type: SyntheticsTestResultRunType, optional + :param probe_dc: Locations for which to query results. + :type probe_dc: [str], optional + :param device_id: Device IDs for which to query results. + :type device_id: [str], optional + :rtype: SyntheticsTestLatestResultsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + if from_ts is not unset: + kwargs["from_ts"] = from_ts + + if to_ts is not unset: + kwargs["to_ts"] = to_ts + + if status is not unset: + kwargs["status"] = status + + if run_type is not unset: + kwargs["run_type"] = run_type + + if probe_dc is not unset: + kwargs["probe_dc"] = probe_dc + + if device_id is not unset: + kwargs["device_id"] = device_id + + return self._list_synthetics_test_latest_results_endpoint.call_with_http_info(**kwargs) + + def list_synthetics_test_versions(self, public_id: str, *, last_version_number: Union[int, UnsetType]=unset, limit: Union[int, UnsetType]=unset, ) -> SyntheticsTestVersionHistoryResponse: + """Get version history of a test. + + Get the paginated version history for a Synthetic test. + + :param public_id: The public ID of the Synthetic test. + :type public_id: str + :param last_version_number: The version number of the last item from the previous page. Omit to get the first page. + :type last_version_number: int, optional + :param limit: Maximum number of version records to return per page. + :type limit: int, optional + :rtype: SyntheticsTestVersionHistoryResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + if last_version_number is not unset: + kwargs["last_version_number"] = last_version_number + + if limit is not unset: + kwargs["limit"] = limit + + return self._list_synthetics_test_versions_endpoint.call_with_http_info(**kwargs) + + def patch_global_variable(self, variable_id: str, body: GlobalVariableJsonPatchRequest, ) -> GlobalVariableResponse: + """Patch a global variable. + + Patch a global variable using JSON Patch (RFC 6902). + This endpoint allows partial updates to a global variable by specifying only the fields to modify. + + Common operations include: + + * Replace field values: ``{"op": "replace", "path": "/name", "value": "new_name"}`` + * Update nested values: ``{"op": "replace", "path": "/value/value", "value": "new_value"}`` + * Add/update tags: ``{"op": "add", "path": "/tags/-", "value": "new_tag"}`` + * Remove fields: ``{"op": "remove", "path": "/description"}`` + + :param variable_id: The ID of the global variable. + :type variable_id: str + :param body: JSON Patch document with operations to apply. + :type body: GlobalVariableJsonPatchRequest + :rtype: GlobalVariableResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["variable_id"] = variable_id + + kwargs["body"] = body + + return self._patch_global_variable_endpoint.call_with_http_info(**kwargs) + + def patch_test_suite(self, public_id: str, body: SuiteJsonPatchRequest, ) -> SyntheticsSuiteResponse: + """Patch a test suite. + + Patch a Synthetic test suite using JSON Patch (RFC 6902). + Use partial updates to modify only specific fields of a test suite. + + Common operations include: + + * Replace field values: ``{"op": "replace", "path": "/name", "value": "new_name"}`` + * Add/update tags: ``{"op": "add", "path": "/tags/-", "value": "new_tag"}`` + * Remove fields: ``{"op": "remove", "path": "/message"}`` + + :param public_id: The public ID of the Synthetic test suite to patch. + :type public_id: str + :param body: JSON Patch document with operations to apply. + :type body: SuiteJsonPatchRequest + :rtype: SyntheticsSuiteResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._patch_test_suite_endpoint.call_with_http_info(**kwargs) + + def poll_synthetics_test_results(self, result_ids: str, ) -> SyntheticsPollTestResultsResponse: + """Poll for test results. + + Poll for test results given a list of result IDs. This is typically used after + triggering tests with CI/CD to retrieve results once they are available. + + :param result_ids: A JSON-encoded array of result IDs to poll for. + :type result_ids: str + :rtype: SyntheticsPollTestResultsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["result_ids"] = result_ids + + return self._poll_synthetics_test_results_endpoint.call_with_http_info(**kwargs) + + def remove_test_from_synthetics_downtime(self, downtime_id: str, test_id: str, ) -> SyntheticsDowntimeResponse: + """Remove a test from a Synthetics downtime. + + Disassociate a Synthetics test from a downtime. + + :param downtime_id: The ID of the downtime. + :type downtime_id: str + :param test_id: The public ID of the Synthetics test to disassociate from the downtime. + :type test_id: str + :rtype: SyntheticsDowntimeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + kwargs["test_id"] = test_id + + return self._remove_test_from_synthetics_downtime_endpoint.call_with_http_info(**kwargs) + + def search_suites(self, *, query: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, facets_only: Union[bool, UnsetType]=unset, start: Union[int, UnsetType]=unset, count: Union[int, UnsetType]=unset, ) -> SyntheticsSuiteSearchResponse: + """Search test suites. + + Search for test suites. + + :param query: The search query. + :type query: str, optional + :param sort: The sort order for the results (e.g., ``name,asc`` or ``name,desc`` ). + :type sort: str, optional + :param facets_only: If true, return only facets instead of full test details. + :type facets_only: bool, optional + :param start: The offset from which to start returning results. + :type start: int, optional + :param count: The maximum number of results to return. + :type count: int, optional + :rtype: SyntheticsSuiteSearchResponse + """ + kwargs: Dict[str, Any] = {} + if query is not unset: + kwargs["query"] = query + + if sort is not unset: + kwargs["sort"] = sort + + if facets_only is not unset: + kwargs["facets_only"] = facets_only + + if start is not unset: + kwargs["start"] = start + + if count is not unset: + kwargs["count"] = count + + return self._search_suites_endpoint.call_with_http_info(**kwargs) + + def set_on_demand_concurrency_cap(self, body: OnDemandConcurrencyCapAttributes, ) -> OnDemandConcurrencyCapResponse: + """Save new value for on-demand concurrency cap. + + Save new value for on-demand concurrency cap. + + :param body: . + :type body: OnDemandConcurrencyCapAttributes + :rtype: OnDemandConcurrencyCapResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._set_on_demand_concurrency_cap_endpoint.call_with_http_info(**kwargs) + + def update_synthetics_downtime(self, downtime_id: str, body: SyntheticsDowntimeRequest, ) -> SyntheticsDowntimeResponse: + """Update a Synthetics downtime. + + Update a Synthetics downtime by its ID. + + :param downtime_id: The ID of the downtime to update. + :type downtime_id: str + :type body: SyntheticsDowntimeRequest + :rtype: SyntheticsDowntimeResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["downtime_id"] = downtime_id + + kwargs["body"] = body + + return self._update_synthetics_downtime_endpoint.call_with_http_info(**kwargs) + + def update_synthetics_network_test(self, public_id: str, body: SyntheticsNetworkTestEditRequest, ) -> SyntheticsNetworkTestResponse: + """Edit a Network Path test. + + :param public_id: The public ID of the Network Path test to edit. + :type public_id: str + :param body: New Network Path test details to be saved. + :type body: SyntheticsNetworkTestEditRequest + :rtype: SyntheticsNetworkTestResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["public_id"] = public_id + + kwargs["body"] = body + + return self._update_synthetics_network_test_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/tag_policies_api.py b/datadog_api_client/v2/api/tag_policies_api.py new file mode 100644 index 0000000000..c193577fbf --- /dev/null +++ b/datadog_api_client/v2/api/tag_policies_api.py @@ -0,0 +1,396 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.tag_policies_list_response import TagPoliciesListResponse +from datadog_api_client.v2.model.tag_policy_include import TagPolicyInclude +from datadog_api_client.v2.model.tag_policy_source import TagPolicySource +from datadog_api_client.v2.model.tag_policy_response import TagPolicyResponse +from datadog_api_client.v2.model.tag_policy_create_request import TagPolicyCreateRequest +from datadog_api_client.v2.model.tag_policy_update_request import TagPolicyUpdateRequest +from datadog_api_client.v2.model.tag_policy_score_response import TagPolicyScoreResponse + + +class TagPoliciesApi: + """ + Tag Policies define rules that govern which tag values are accepted for a given tag key, + scoped to a particular telemetry source (such as logs, spans, or metrics). Policies can be + ``blocking`` (data not matching the policy is rejected) or ``surfacing`` (matching data is + highlighted but not blocked). Each policy reports a compliance ``score`` derived from how + much recent telemetry adheres to the policy. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_tag_policy_endpoint = _Endpoint( + settings={ + "response_type": (TagPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/tag_policies", + "operation_id": "create_tag_policy", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TagPolicyCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_tag_policy_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/tag_policies/{policy_id}", + "operation_id": "delete_tag_policy", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + "hard_delete": { + "openapi_types": (bool,), + "attribute": "hard_delete", + "location": "query", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_tag_policy_endpoint = _Endpoint( + settings={ + "response_type": (TagPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/tag_policies/{policy_id}", + "operation_id": "get_tag_policy", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + "include": { + "openapi_types": (TagPolicyInclude,), + "attribute": "include", + "location": "query", + }, + "ts_start": { + "openapi_types": (int,), + "attribute": "ts_start", + "location": "query", + }, + "ts_end": { + "openapi_types": (int,), + "attribute": "ts_end", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_tag_policy_score_endpoint = _Endpoint( + settings={ + "response_type": (TagPolicyScoreResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/tag_policies/{policy_id}/score", + "operation_id": "get_tag_policy_score", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + "ts_start": { + "openapi_types": (int,), + "attribute": "ts_start", + "location": "query", + }, + "ts_end": { + "openapi_types": (int,), + "attribute": "ts_end", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_tag_policies_endpoint = _Endpoint( + settings={ + "response_type": (TagPoliciesListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/tag_policies", + "operation_id": "list_tag_policies", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include_disabled": { + "openapi_types": (bool,), + "attribute": "include_disabled", + "location": "query", + }, + "include_deleted": { + "openapi_types": (bool,), + "attribute": "include_deleted", + "location": "query", + }, + "include": { + "openapi_types": (TagPolicyInclude,), + "attribute": "include", + "location": "query", + }, + "filter_source": { + "openapi_types": (TagPolicySource,), + "attribute": "filter[source]", + "location": "query", + }, + "ts_start": { + "openapi_types": (int,), + "attribute": "ts_start", + "location": "query", + }, + "ts_end": { + "openapi_types": (int,), + "attribute": "ts_end", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_tag_policy_endpoint = _Endpoint( + settings={ + "response_type": (TagPolicyResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/tag_policies/{policy_id}", + "operation_id": "update_tag_policy", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "policy_id": { + "required": True, + "openapi_types": (str,), + "attribute": "policy_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TagPolicyUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_tag_policy(self, body: TagPolicyCreateRequest, ) -> TagPolicyResponse: + """Create a tag policy. + + Create a new tag policy for the organization. The caller's organization is derived from + the authenticated user; cross-organization creation is not supported. Fields such as + ``policy_id`` , ``version`` , and the timestamp/audit fields are assigned by the server. + + :type body: TagPolicyCreateRequest + :rtype: TagPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_tag_policy_endpoint.call_with_http_info(**kwargs) + + def delete_tag_policy(self, policy_id: str, *, hard_delete: Union[bool, UnsetType]=unset, ) -> None: + """Delete a tag policy. + + Delete a tag policy. By default the policy is soft-deleted so it can be recovered later + and so that historical score data remains queryable. Pass ``hard_delete=true`` to remove + the policy permanently. + + :param policy_id: The unique identifier of the tag policy to delete. + :type policy_id: str + :param hard_delete: Whether to permanently delete the policy instead of performing a soft delete. Defaults to ``false``. + :type hard_delete: bool, optional + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + if hard_delete is not unset: + kwargs["hard_delete"] = hard_delete + + return self._delete_tag_policy_endpoint.call_with_http_info(**kwargs) + + def get_tag_policy(self, policy_id: str, *, include: Union[TagPolicyInclude, UnsetType]=unset, ts_start: Union[int, UnsetType]=unset, ts_end: Union[int, UnsetType]=unset, ) -> TagPolicyResponse: + """Get a tag policy. + + Retrieve a single tag policy by ID. Optionally include the policy's current compliance + score via the ``include=score`` query parameter. Policies belonging to other organizations + cannot be retrieved. + + :param policy_id: The unique identifier of the tag policy. + :type policy_id: str + :param include: Comma-separated list of related resources to include alongside the policy. Currently the only supported value is ``score``. + :type include: TagPolicyInclude, optional + :param ts_start: Start of the time window used for compliance score computation, as a Unix timestamp in milliseconds. + :type ts_start: int, optional + :param ts_end: End of the time window used for compliance score computation, as a Unix timestamp in milliseconds. Must be in the past and greater than ``ts_start``. + :type ts_end: int, optional + :rtype: TagPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + if include is not unset: + kwargs["include"] = include + + if ts_start is not unset: + kwargs["ts_start"] = ts_start + + if ts_end is not unset: + kwargs["ts_end"] = ts_end + + return self._get_tag_policy_endpoint.call_with_http_info(**kwargs) + + def get_tag_policy_score(self, policy_id: str, *, ts_start: Union[int, UnsetType]=unset, ts_end: Union[int, UnsetType]=unset, ) -> TagPolicyScoreResponse: + """Get a tag policy compliance score. + + Retrieve the compliance score for a single tag policy. The score is computed over the + requested time window (or a source-appropriate default) and represents the percentage of + telemetry within that window that conforms to the policy. A ``null`` score indicates that + no relevant telemetry was found. + + :param policy_id: The unique identifier of the tag policy. + :type policy_id: str + :param ts_start: Start of the time window used for compliance score computation, as a Unix timestamp in milliseconds. + :type ts_start: int, optional + :param ts_end: End of the time window used for compliance score computation, as a Unix timestamp in milliseconds. Must be in the past and greater than ``ts_start``. + :type ts_end: int, optional + :rtype: TagPolicyScoreResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + if ts_start is not unset: + kwargs["ts_start"] = ts_start + + if ts_end is not unset: + kwargs["ts_end"] = ts_end + + return self._get_tag_policy_score_endpoint.call_with_http_info(**kwargs) + + def list_tag_policies(self, *, include_disabled: Union[bool, UnsetType]=unset, include_deleted: Union[bool, UnsetType]=unset, include: Union[TagPolicyInclude, UnsetType]=unset, filter_source: Union[TagPolicySource, UnsetType]=unset, ts_start: Union[int, UnsetType]=unset, ts_end: Union[int, UnsetType]=unset, ) -> TagPoliciesListResponse: + """List tag policies. + + Retrieve all tag policies for the organization. Optionally include disabled or deleted + policies, filter by telemetry source, and include each policy's current compliance score + via the ``include=score`` query parameter. + + :param include_disabled: Whether to include policies that are currently disabled. Defaults to ``false``. + :type include_disabled: bool, optional + :param include_deleted: Whether to include policies that have been soft-deleted. Defaults to ``false``. + :type include_deleted: bool, optional + :param include: Comma-separated list of related resources to include alongside each policy in the response. Currently the only supported value is ``score``. + :type include: TagPolicyInclude, optional + :param filter_source: Restrict the result set to policies whose source matches the given value. + :type filter_source: TagPolicySource, optional + :param ts_start: Start of the time window used for compliance score computation, as a Unix timestamp in milliseconds. Defaults to a recent window appropriate for the source. + :type ts_start: int, optional + :param ts_end: End of the time window used for compliance score computation, as a Unix timestamp in milliseconds. Must be in the past and greater than ``ts_start``. + :type ts_end: int, optional + :rtype: TagPoliciesListResponse + """ + kwargs: Dict[str, Any] = {} + if include_disabled is not unset: + kwargs["include_disabled"] = include_disabled + + if include_deleted is not unset: + kwargs["include_deleted"] = include_deleted + + if include is not unset: + kwargs["include"] = include + + if filter_source is not unset: + kwargs["filter_source"] = filter_source + + if ts_start is not unset: + kwargs["ts_start"] = ts_start + + if ts_end is not unset: + kwargs["ts_end"] = ts_end + + return self._list_tag_policies_endpoint.call_with_http_info(**kwargs) + + def update_tag_policy(self, policy_id: str, body: TagPolicyUpdateRequest, ) -> TagPolicyResponse: + """Update a tag policy. + + Update one or more attributes of an existing tag policy. Only the fields supplied in the + request body are modified; omitted fields retain their current values. The policy's + ``source`` cannot be changed after creation. + + :param policy_id: The unique identifier of the tag policy to update. + :type policy_id: str + :type body: TagPolicyUpdateRequest + :rtype: TagPolicyResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["policy_id"] = policy_id + + kwargs["body"] = body + + return self._update_tag_policy_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/teams_api.py b/datadog_api_client/v2/api/teams_api.py new file mode 100644 index 0000000000..5cfbb477e0 --- /dev/null +++ b/datadog_api_client/v2/api/teams_api.py @@ -0,0 +1,1986 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.teams_response import TeamsResponse +from datadog_api_client.v2.model.list_teams_sort import ListTeamsSort +from datadog_api_client.v2.model.list_teams_include import ListTeamsInclude +from datadog_api_client.v2.model.teams_field import TeamsField +from datadog_api_client.v2.model.team import Team +from datadog_api_client.v2.model.team_response import TeamResponse +from datadog_api_client.v2.model.team_create_request import TeamCreateRequest +from datadog_api_client.v2.model.team_hierarchy_links_response import TeamHierarchyLinksResponse +from datadog_api_client.v2.model.team_hierarchy_link import TeamHierarchyLink +from datadog_api_client.v2.model.team_hierarchy_link_response import TeamHierarchyLinkResponse +from datadog_api_client.v2.model.team_hierarchy_link_create_request import TeamHierarchyLinkCreateRequest +from datadog_api_client.v2.model.team_connection_delete_request import TeamConnectionDeleteRequest +from datadog_api_client.v2.model.team_connections_response import TeamConnectionsResponse +from datadog_api_client.v2.model.team_connection import TeamConnection +from datadog_api_client.v2.model.team_connection_create_request import TeamConnectionCreateRequest +from datadog_api_client.v2.model.team_sync_response import TeamSyncResponse +from datadog_api_client.v2.model.team_sync_attributes_source import TeamSyncAttributesSource +from datadog_api_client.v2.model.team_sync_request import TeamSyncRequest +from datadog_api_client.v2.model.add_member_team_request import AddMemberTeamRequest +from datadog_api_client.v2.model.team_update_request import TeamUpdateRequest +from datadog_api_client.v2.model.team_links_response import TeamLinksResponse +from datadog_api_client.v2.model.team_link_response import TeamLinkResponse +from datadog_api_client.v2.model.team_link_create_request import TeamLinkCreateRequest +from datadog_api_client.v2.model.user_teams_response import UserTeamsResponse +from datadog_api_client.v2.model.get_team_memberships_sort import GetTeamMembershipsSort +from datadog_api_client.v2.model.user_team import UserTeam +from datadog_api_client.v2.model.user_team_response import UserTeamResponse +from datadog_api_client.v2.model.user_team_request import UserTeamRequest +from datadog_api_client.v2.model.user_team_update_request import UserTeamUpdateRequest +from datadog_api_client.v2.model.team_notification_rules_response import TeamNotificationRulesResponse +from datadog_api_client.v2.model.team_notification_rule_response import TeamNotificationRuleResponse +from datadog_api_client.v2.model.team_notification_rule_request import TeamNotificationRuleRequest +from datadog_api_client.v2.model.team_permission_settings_response import TeamPermissionSettingsResponse +from datadog_api_client.v2.model.team_permission_setting_response import TeamPermissionSettingResponse +from datadog_api_client.v2.model.team_permission_setting_update_request import TeamPermissionSettingUpdateRequest + + +class TeamsApi: + """ + View and manage teams within Datadog. See the `Teams page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._add_member_team_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{super_team_id}/member_teams", + "operation_id": "add_member_team", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "super_team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "super_team_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (AddMemberTeamRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._add_team_hierarchy_link_endpoint = _Endpoint( + settings={ + "response_type": (TeamHierarchyLinkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team-hierarchy-links", + "operation_id": "add_team_hierarchy_link", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TeamHierarchyLinkCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_team_endpoint = _Endpoint( + settings={ + "response_type": (TeamResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team", + "operation_id": "create_team", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TeamCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_team_connections_endpoint = _Endpoint( + settings={ + "response_type": (TeamConnectionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/connections", + "operation_id": "create_team_connections", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TeamConnectionCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_team_link_endpoint = _Endpoint( + settings={ + "response_type": (TeamLinkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/links", + "operation_id": "create_team_link", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TeamLinkCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_team_membership_endpoint = _Endpoint( + settings={ + "response_type": (UserTeamResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/memberships", + "operation_id": "create_team_membership", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UserTeamRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_team_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (TeamNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules", + "operation_id": "create_team_notification_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TeamNotificationRuleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_team_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}", + "operation_id": "delete_team", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_team_connections_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/connections", + "operation_id": "delete_team_connections", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TeamConnectionDeleteRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_team_link_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/links/{link_id}", + "operation_id": "delete_team_link", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "link_id": { + "required": True, + "openapi_types": (str,), + "attribute": "link_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_team_membership_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/memberships/{user_id}", + "operation_id": "delete_team_membership", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_team_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules/{rule_id}", + "operation_id": "delete_team_notification_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_team_endpoint = _Endpoint( + settings={ + "response_type": (TeamResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}", + "operation_id": "get_team", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_hierarchy_link_endpoint = _Endpoint( + settings={ + "response_type": (TeamHierarchyLinkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team-hierarchy-links/{link_id}", + "operation_id": "get_team_hierarchy_link", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "link_id": { + "required": True, + "openapi_types": (str,), + "attribute": "link_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_link_endpoint = _Endpoint( + settings={ + "response_type": (TeamLinkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/links/{link_id}", + "operation_id": "get_team_link", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "link_id": { + "required": True, + "openapi_types": (str,), + "attribute": "link_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_links_endpoint = _Endpoint( + settings={ + "response_type": (TeamLinksResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/links", + "operation_id": "get_team_links", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_memberships_endpoint = _Endpoint( + settings={ + "response_type": (UserTeamsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/memberships", + "operation_id": "get_team_memberships", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (GetTeamMembershipsSort,), + "attribute": "sort", + "location": "query", + }, + "filter_keyword": { + "openapi_types": (str,), + "attribute": "filter[keyword]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (TeamNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules/{rule_id}", + "operation_id": "get_team_notification_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_notification_rules_endpoint = _Endpoint( + settings={ + "response_type": (TeamNotificationRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules", + "operation_id": "get_team_notification_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_permission_settings_endpoint = _Endpoint( + settings={ + "response_type": (TeamPermissionSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/permission-settings", + "operation_id": "get_team_permission_settings", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_sync_endpoint = _Endpoint( + settings={ + "response_type": (TeamSyncResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/sync", + "operation_id": "get_team_sync", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_source": { + "required": True, + "openapi_types": (TeamSyncAttributesSource,), + "attribute": "filter[source]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_user_memberships_endpoint = _Endpoint( + settings={ + "response_type": (UserTeamsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users/{user_uuid}/memberships", + "operation_id": "get_user_memberships", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_uuid": { + "required": True, + "openapi_types": (str,), + "attribute": "user_uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_member_teams_endpoint = _Endpoint( + settings={ + "response_type": (TeamsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{super_team_id}/member_teams", + "operation_id": "list_member_teams", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "super_team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "super_team_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "fields_team": { + "openapi_types": ([TeamsField],), + "attribute": "fields[team]", + "location": "query", + "collection_format": "csv", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_team_connections_endpoint = _Endpoint( + settings={ + "response_type": (TeamConnectionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/connections", + "operation_id": "list_team_connections", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "filter_sources": { + "openapi_types": ([str],), + "attribute": "filter[sources]", + "location": "query", + "collection_format": "csv", + }, + "filter_team_ids": { + "openapi_types": ([str],), + "attribute": "filter[team_ids]", + "location": "query", + "collection_format": "csv", + }, + "filter_connected_team_ids": { + "openapi_types": ([str],), + "attribute": "filter[connected_team_ids]", + "location": "query", + "collection_format": "csv", + }, + "filter_connection_ids": { + "openapi_types": ([str],), + "attribute": "filter[connection_ids]", + "location": "query", + "collection_format": "csv", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_team_hierarchy_links_endpoint = _Endpoint( + settings={ + "response_type": (TeamHierarchyLinksResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team-hierarchy-links", + "operation_id": "list_team_hierarchy_links", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "filter_parent_team": { + "openapi_types": (str,), + "attribute": "filter[parent_team]", + "location": "query", + }, + "filter_sub_team": { + "openapi_types": (str,), + "attribute": "filter[sub_team]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_teams_endpoint = _Endpoint( + settings={ + "response_type": (TeamsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team", + "operation_id": "list_teams", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "sort": { + "openapi_types": (ListTeamsSort,), + "attribute": "sort", + "location": "query", + }, + "include": { + "openapi_types": ([ListTeamsInclude],), + "attribute": "include", + "location": "query", + "collection_format": "multi", + }, + "filter_keyword": { + "openapi_types": (str,), + "attribute": "filter[keyword]", + "location": "query", + }, + "filter_me": { + "openapi_types": (bool,), + "attribute": "filter[me]", + "location": "query", + }, + "fields_team": { + "openapi_types": ([TeamsField],), + "attribute": "fields[team]", + "location": "query", + "collection_format": "csv", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._remove_member_team_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{super_team_id}/member_teams/{member_team_id}", + "operation_id": "remove_member_team", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "super_team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "super_team_id", + "location": "path", + }, + "member_team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "member_team_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._remove_team_hierarchy_link_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team-hierarchy-links/{link_id}", + "operation_id": "remove_team_hierarchy_link", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "link_id": { + "required": True, + "openapi_types": (str,), + "attribute": "link_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._sync_teams_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/sync", + "operation_id": "sync_teams", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TeamSyncRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_team_endpoint = _Endpoint( + settings={ + "response_type": (TeamResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}", + "operation_id": "update_team", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TeamUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_team_link_endpoint = _Endpoint( + settings={ + "response_type": (TeamLinkResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/links/{link_id}", + "operation_id": "update_team_link", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "link_id": { + "required": True, + "openapi_types": (str,), + "attribute": "link_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TeamLinkCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_team_membership_endpoint = _Endpoint( + settings={ + "response_type": (UserTeamResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/memberships/{user_id}", + "operation_id": "update_team_membership", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UserTeamUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_team_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (TeamNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules/{rule_id}", + "operation_id": "update_team_notification_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TeamNotificationRuleRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_team_permission_setting_endpoint = _Endpoint( + settings={ + "response_type": (TeamPermissionSettingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/permission-settings/{action}", + "operation_id": "update_team_permission_setting", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "action": { + "required": True, + "openapi_types": (str,), + "attribute": "action", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TeamPermissionSettingUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def add_member_team(self, super_team_id: str, body: AddMemberTeamRequest, ) -> None: + """Add a member team. **Deprecated**. + + Add a member team. + Adds the team given by the ``id`` in the body as a member team of the super team. + + **Note** : This API is deprecated. For creating team hierarchy links, use the team hierarchy links API: ``POST /api/v2/team-hierarchy-links``. + + :param super_team_id: None + :type super_team_id: str + :type body: AddMemberTeamRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["super_team_id"] = super_team_id + + kwargs["body"] = body + + warnings.warn("add_member_team is deprecated", DeprecationWarning, stacklevel=2) + return self._add_member_team_endpoint.call_with_http_info(**kwargs) + + def add_team_hierarchy_link(self, body: TeamHierarchyLinkCreateRequest, ) -> TeamHierarchyLinkResponse: + """Create a team hierarchy link. + + Create a new team hierarchy link between a parent team and a sub team. + + :type body: TeamHierarchyLinkCreateRequest + :rtype: TeamHierarchyLinkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._add_team_hierarchy_link_endpoint.call_with_http_info(**kwargs) + + def create_team(self, body: TeamCreateRequest, ) -> TeamResponse: + """Create a team. + + Create a new team. + User IDs passed through the ``users`` relationship field are added to the team. + + :type body: TeamCreateRequest + :rtype: TeamResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_team_endpoint.call_with_http_info(**kwargs) + + def create_team_connections(self, body: TeamConnectionCreateRequest, ) -> TeamConnectionsResponse: + """Create team connections. + + Create multiple team connections. + + :type body: TeamConnectionCreateRequest + :rtype: TeamConnectionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_team_connections_endpoint.call_with_http_info(**kwargs) + + def create_team_link(self, team_id: str, body: TeamLinkCreateRequest, ) -> TeamLinkResponse: + """Create a team link. + + Add a new link to a team. + + :param team_id: None + :type team_id: str + :type body: TeamLinkCreateRequest + :rtype: TeamLinkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["body"] = body + + return self._create_team_link_endpoint.call_with_http_info(**kwargs) + + def create_team_membership(self, team_id: str, body: UserTeamRequest, ) -> UserTeamResponse: + """Add a user to a team. + + Add a user to a team. + + **Note** : Each team has a setting that determines who is allowed to modify membership of the team. The ``user_access_manage`` permission generally grants access to modify membership of any team. To get the full picture, see `Team Membership documentation `_. + + :param team_id: None + :type team_id: str + :type body: UserTeamRequest + :rtype: UserTeamResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["body"] = body + + return self._create_team_membership_endpoint.call_with_http_info(**kwargs) + + def create_team_notification_rule(self, team_id: str, body: TeamNotificationRuleRequest, ) -> TeamNotificationRuleResponse: + """Create team notification rule. + + :param team_id: None + :type team_id: str + :type body: TeamNotificationRuleRequest + :rtype: TeamNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["body"] = body + + return self._create_team_notification_rule_endpoint.call_with_http_info(**kwargs) + + def delete_team(self, team_id: str, ) -> None: + """Remove a team. + + Remove a team using the team's ``id``. + + :param team_id: None + :type team_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + return self._delete_team_endpoint.call_with_http_info(**kwargs) + + def delete_team_connections(self, body: TeamConnectionDeleteRequest, ) -> None: + """Delete team connections. + + Delete multiple team connections. + + :type body: TeamConnectionDeleteRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_team_connections_endpoint.call_with_http_info(**kwargs) + + def delete_team_link(self, team_id: str, link_id: str, ) -> None: + """Remove a team link. + + Remove a link from a team. + + :param team_id: None + :type team_id: str + :param link_id: None + :type link_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["link_id"] = link_id + + return self._delete_team_link_endpoint.call_with_http_info(**kwargs) + + def delete_team_membership(self, team_id: str, user_id: str, ) -> None: + """Remove a user from a team. + + Remove a user from a team. + + **Note** : Each team has a setting that determines who is allowed to modify membership of the team. The ``user_access_manage`` permission generally grants access to modify membership of any team. To get the full picture, see `Team Membership documentation `_. + + :param team_id: None + :type team_id: str + :param user_id: None + :type user_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["user_id"] = user_id + + return self._delete_team_membership_endpoint.call_with_http_info(**kwargs) + + def delete_team_notification_rule(self, team_id: str, rule_id: str, ) -> None: + """Delete team notification rule. + + :param team_id: None + :type team_id: str + :param rule_id: None + :type rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["rule_id"] = rule_id + + return self._delete_team_notification_rule_endpoint.call_with_http_info(**kwargs) + + def get_team(self, team_id: str, ) -> TeamResponse: + """Get a team. + + Get a single team using the team's ``id``. + + :param team_id: None + :type team_id: str + :rtype: TeamResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + return self._get_team_endpoint.call_with_http_info(**kwargs) + + def get_team_hierarchy_link(self, link_id: str, ) -> TeamHierarchyLinkResponse: + """Get a team hierarchy link. + + Get a single team hierarchy link for the given link_id. + + :param link_id: The team hierarchy link's identifier + :type link_id: str + :rtype: TeamHierarchyLinkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["link_id"] = link_id + + return self._get_team_hierarchy_link_endpoint.call_with_http_info(**kwargs) + + def get_team_link(self, team_id: str, link_id: str, ) -> TeamLinkResponse: + """Get a team link. + + Get a single link for a team. + + :param team_id: None + :type team_id: str + :param link_id: None + :type link_id: str + :rtype: TeamLinkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["link_id"] = link_id + + return self._get_team_link_endpoint.call_with_http_info(**kwargs) + + def get_team_links(self, team_id: str, ) -> TeamLinksResponse: + """Get links for a team. + + Get all links for a given team. + + :param team_id: None + :type team_id: str + :rtype: TeamLinksResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + return self._get_team_links_endpoint.call_with_http_info(**kwargs) + + def get_team_memberships(self, team_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[GetTeamMembershipsSort, UnsetType]=unset, filter_keyword: Union[str, UnsetType]=unset, ) -> UserTeamsResponse: + """Get team memberships. + + Get a paginated list of members for a team + + :param team_id: None + :type team_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Specifies the order of returned team memberships + :type sort: GetTeamMembershipsSort, optional + :param filter_keyword: Search query, can be user email or name + :type filter_keyword: str, optional + :rtype: UserTeamsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter_keyword is not unset: + kwargs["filter_keyword"] = filter_keyword + + return self._get_team_memberships_endpoint.call_with_http_info(**kwargs) + + def get_team_memberships_with_pagination(self, team_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[GetTeamMembershipsSort, UnsetType]=unset, filter_keyword: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[UserTeam]: + """Get team memberships. + + Provide a paginated version of :meth:`get_team_memberships`, returning all items. + + :param team_id: None + :type team_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: Specifies the order of returned team memberships + :type sort: GetTeamMembershipsSort, optional + :param filter_keyword: Search query, can be user email or name + :type filter_keyword: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[UserTeam] + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if filter_keyword is not unset: + kwargs["filter_keyword"] = filter_keyword + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._get_team_memberships_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def get_team_notification_rule(self, team_id: str, rule_id: str, ) -> TeamNotificationRuleResponse: + """Get team notification rule. + + :param team_id: None + :type team_id: str + :param rule_id: None + :type rule_id: str + :rtype: TeamNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["rule_id"] = rule_id + + return self._get_team_notification_rule_endpoint.call_with_http_info(**kwargs) + + def get_team_notification_rules(self, team_id: str, ) -> TeamNotificationRulesResponse: + """Get team notification rules. + + :param team_id: None + :type team_id: str + :rtype: TeamNotificationRulesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + return self._get_team_notification_rules_endpoint.call_with_http_info(**kwargs) + + def get_team_permission_settings(self, team_id: str, ) -> TeamPermissionSettingsResponse: + """Get permission settings for a team. + + Get all permission settings for a given team. + + :param team_id: None + :type team_id: str + :rtype: TeamPermissionSettingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + return self._get_team_permission_settings_endpoint.call_with_http_info(**kwargs) + + def get_team_sync(self, filter_source: TeamSyncAttributesSource, ) -> TeamSyncResponse: + """Get team sync configurations. + + Get all team synchronization configurations. + Returns a list of configurations used for linking or provisioning teams with external sources like GitHub. + + :param filter_source: Filter by the external source platform for team synchronization + :type filter_source: TeamSyncAttributesSource + :rtype: TeamSyncResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_source"] = filter_source + + return self._get_team_sync_endpoint.call_with_http_info(**kwargs) + + def get_user_memberships(self, user_uuid: str, ) -> UserTeamsResponse: + """Get user memberships. + + Get a list of memberships for a user + + :param user_uuid: None + :type user_uuid: str + :rtype: UserTeamsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_uuid"] = user_uuid + + return self._get_user_memberships_endpoint.call_with_http_info(**kwargs) + + def list_member_teams(self, super_team_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, fields_team: Union[List[TeamsField], UnsetType]=unset, ) -> TeamsResponse: + """Get all member teams. **Deprecated**. + + Get all member teams. + + **Note** : This API is deprecated. For team hierarchy relationships (parent-child + teams), use the team hierarchy links API: ``GET /api/v2/team-hierarchy-links``. + + :param super_team_id: None + :type super_team_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param fields_team: List of fields that need to be fetched. + :type fields_team: [TeamsField], optional + :rtype: TeamsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["super_team_id"] = super_team_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if fields_team is not unset: + kwargs["fields_team"] = fields_team + + warnings.warn("list_member_teams is deprecated", DeprecationWarning, stacklevel=2) + return self._list_member_teams_endpoint.call_with_http_info(**kwargs) + + def list_member_teams_with_pagination(self, super_team_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, fields_team: Union[List[TeamsField], UnsetType]=unset, ) -> collections.abc.Iterable[Team]: + """Get all member teams. + + Provide a paginated version of :meth:`list_member_teams`, returning all items. + + :param super_team_id: None + :type super_team_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param fields_team: List of fields that need to be fetched. + :type fields_team: [TeamsField], optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[Team] + """ + kwargs: Dict[str, Any] = {} + kwargs["super_team_id"] = super_team_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if fields_team is not unset: + kwargs["fields_team"] = fields_team + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_member_teams_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_team_connections(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter_sources: Union[List[str], UnsetType]=unset, filter_team_ids: Union[List[str], UnsetType]=unset, filter_connected_team_ids: Union[List[str], UnsetType]=unset, filter_connection_ids: Union[List[str], UnsetType]=unset, ) -> TeamConnectionsResponse: + """List team connections. + + Returns all team connections. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param filter_sources: Filter team connections by external source systems. + :type filter_sources: [str], optional + :param filter_team_ids: Filter team connections by Datadog team IDs. + :type filter_team_ids: [str], optional + :param filter_connected_team_ids: Filter team connections by connected team IDs from external systems. + :type filter_connected_team_ids: [str], optional + :param filter_connection_ids: Filter team connections by connection IDs. + :type filter_connection_ids: [str], optional + :rtype: TeamConnectionsResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter_sources is not unset: + kwargs["filter_sources"] = filter_sources + + if filter_team_ids is not unset: + kwargs["filter_team_ids"] = filter_team_ids + + if filter_connected_team_ids is not unset: + kwargs["filter_connected_team_ids"] = filter_connected_team_ids + + if filter_connection_ids is not unset: + kwargs["filter_connection_ids"] = filter_connection_ids + + return self._list_team_connections_endpoint.call_with_http_info(**kwargs) + + def list_team_connections_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter_sources: Union[List[str], UnsetType]=unset, filter_team_ids: Union[List[str], UnsetType]=unset, filter_connected_team_ids: Union[List[str], UnsetType]=unset, filter_connection_ids: Union[List[str], UnsetType]=unset, ) -> collections.abc.Iterable[TeamConnection]: + """List team connections. + + Provide a paginated version of :meth:`list_team_connections`, returning all items. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param filter_sources: Filter team connections by external source systems. + :type filter_sources: [str], optional + :param filter_team_ids: Filter team connections by Datadog team IDs. + :type filter_team_ids: [str], optional + :param filter_connected_team_ids: Filter team connections by connected team IDs from external systems. + :type filter_connected_team_ids: [str], optional + :param filter_connection_ids: Filter team connections by connection IDs. + :type filter_connection_ids: [str], optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[TeamConnection] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter_sources is not unset: + kwargs["filter_sources"] = filter_sources + + if filter_team_ids is not unset: + kwargs["filter_team_ids"] = filter_team_ids + + if filter_connected_team_ids is not unset: + kwargs["filter_connected_team_ids"] = filter_connected_team_ids + + if filter_connection_ids is not unset: + kwargs["filter_connection_ids"] = filter_connection_ids + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_team_connections_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_team_hierarchy_links(self, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, filter_parent_team: Union[str, UnsetType]=unset, filter_sub_team: Union[str, UnsetType]=unset, ) -> TeamHierarchyLinksResponse: + """Get team hierarchy links. + + List all team hierarchy links that match the provided filters. + + :param page_number: Specific page number to return. + :type page_number: int, optional + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param filter_parent_team: Filter by parent team ID + :type filter_parent_team: str, optional + :param filter_sub_team: Filter by sub team ID + :type filter_sub_team: str, optional + :rtype: TeamHierarchyLinksResponse + """ + kwargs: Dict[str, Any] = {} + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if filter_parent_team is not unset: + kwargs["filter_parent_team"] = filter_parent_team + + if filter_sub_team is not unset: + kwargs["filter_sub_team"] = filter_sub_team + + return self._list_team_hierarchy_links_endpoint.call_with_http_info(**kwargs) + + def list_team_hierarchy_links_with_pagination(self, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, filter_parent_team: Union[str, UnsetType]=unset, filter_sub_team: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[TeamHierarchyLink]: + """Get team hierarchy links. + + Provide a paginated version of :meth:`list_team_hierarchy_links`, returning all items. + + :param page_number: Specific page number to return. + :type page_number: int, optional + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param filter_parent_team: Filter by parent team ID + :type filter_parent_team: str, optional + :param filter_sub_team: Filter by sub team ID + :type filter_sub_team: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[TeamHierarchyLink] + """ + kwargs: Dict[str, Any] = {} + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if filter_parent_team is not unset: + kwargs["filter_parent_team"] = filter_parent_team + + if filter_sub_team is not unset: + kwargs["filter_sub_team"] = filter_sub_team + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_team_hierarchy_links_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def list_teams(self, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, sort: Union[ListTeamsSort, UnsetType]=unset, include: Union[List[ListTeamsInclude], UnsetType]=unset, filter_keyword: Union[str, UnsetType]=unset, filter_me: Union[bool, UnsetType]=unset, fields_team: Union[List[TeamsField], UnsetType]=unset, ) -> TeamsResponse: + """Get all teams. + + Get all teams. + Can be used to search for teams using the ``filter[keyword]`` and ``filter[me]`` query parameters. + + :param page_number: Specific page number to return. + :type page_number: int, optional + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param sort: Specifies the order of the returned teams + :type sort: ListTeamsSort, optional + :param include: Included related resources optionally requested. Allowed enum values: ``team_links, user_team_permissions`` + :type include: [ListTeamsInclude], optional + :param filter_keyword: Search query. Can be team name, team handle, or email of team member + :type filter_keyword: str, optional + :param filter_me: When true, only returns teams the current user belongs to + :type filter_me: bool, optional + :param fields_team: List of fields that need to be fetched. + :type fields_team: [TeamsField], optional + :rtype: TeamsResponse + """ + kwargs: Dict[str, Any] = {} + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if sort is not unset: + kwargs["sort"] = sort + + if include is not unset: + kwargs["include"] = include + + if filter_keyword is not unset: + kwargs["filter_keyword"] = filter_keyword + + if filter_me is not unset: + kwargs["filter_me"] = filter_me + + if fields_team is not unset: + kwargs["fields_team"] = fields_team + + return self._list_teams_endpoint.call_with_http_info(**kwargs) + + def list_teams_with_pagination(self, *, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, sort: Union[ListTeamsSort, UnsetType]=unset, include: Union[List[ListTeamsInclude], UnsetType]=unset, filter_keyword: Union[str, UnsetType]=unset, filter_me: Union[bool, UnsetType]=unset, fields_team: Union[List[TeamsField], UnsetType]=unset, ) -> collections.abc.Iterable[Team]: + """Get all teams. + + Provide a paginated version of :meth:`list_teams`, returning all items. + + :param page_number: Specific page number to return. + :type page_number: int, optional + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param sort: Specifies the order of the returned teams + :type sort: ListTeamsSort, optional + :param include: Included related resources optionally requested. Allowed enum values: ``team_links, user_team_permissions`` + :type include: [ListTeamsInclude], optional + :param filter_keyword: Search query. Can be team name, team handle, or email of team member + :type filter_keyword: str, optional + :param filter_me: When true, only returns teams the current user belongs to + :type filter_me: bool, optional + :param fields_team: List of fields that need to be fetched. + :type fields_team: [TeamsField], optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[Team] + """ + kwargs: Dict[str, Any] = {} + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + if sort is not unset: + kwargs["sort"] = sort + + if include is not unset: + kwargs["include"] = include + + if filter_keyword is not unset: + kwargs["filter_keyword"] = filter_keyword + + if filter_me is not unset: + kwargs["filter_me"] = filter_me + + if fields_team is not unset: + kwargs["fields_team"] = fields_team + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_teams_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def remove_member_team(self, super_team_id: str, member_team_id: str, ) -> None: + """Remove a member team. **Deprecated**. + + Remove a super team's member team identified by ``member_team_id``. + + **Note** : This API is deprecated. For deleting team hierarchy links, use the team hierarchy links API: ``DELETE /api/v2/team-hierarchy-links/{link_id}``. + + :param super_team_id: None + :type super_team_id: str + :param member_team_id: None + :type member_team_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["super_team_id"] = super_team_id + + kwargs["member_team_id"] = member_team_id + + warnings.warn("remove_member_team is deprecated", DeprecationWarning, stacklevel=2) + return self._remove_member_team_endpoint.call_with_http_info(**kwargs) + + def remove_team_hierarchy_link(self, link_id: str, ) -> None: + """Remove a team hierarchy link. + + Remove a team hierarchy link by the given link_id. + + :param link_id: The team hierarchy link's identifier + :type link_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["link_id"] = link_id + + return self._remove_team_hierarchy_link_endpoint.call_with_http_info(**kwargs) + + def sync_teams(self, body: TeamSyncRequest, ) -> None: + """Link Teams with GitHub Teams. + + This endpoint configures synchronization between your existing Datadog teams and GitHub teams by matching their names. + It evaluates all current Datadog teams and compares them against teams in the GitHub organization + connected to your Datadog account, based on Datadog Team handle and GitHub Team slug + (lowercased and kebab-cased). + + This operation is read-only on the GitHub side, no teams will be modified or created. + + Optionally, provide ``selection_state`` to limit synchronization + to specific teams or organizations and their subtrees, instead + of syncing all teams. + + `A GitHub organization must be connected to your Datadog account `_ , + and the GitHub App integrated with Datadog must have the ``Members Read`` permission. Matching is performed by comparing the Datadog team handle to the GitHub team slug + using a normalized exact match; case is ignored and spaces are removed. No modifications are made + to teams in GitHub. This only creates new teams in Datadog when type is set to ``provision``. + + :type body: TeamSyncRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._sync_teams_endpoint.call_with_http_info(**kwargs) + + def update_team(self, team_id: str, body: TeamUpdateRequest, ) -> TeamResponse: + """Update a team. + + Update a team using the team's ``id``. + If the ``team_links`` relationship is present, the associated links are updated to be in the order they appear in the array, and any existing team links not present are removed. + + :param team_id: None + :type team_id: str + :type body: TeamUpdateRequest + :rtype: TeamResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["body"] = body + + return self._update_team_endpoint.call_with_http_info(**kwargs) + + def update_team_link(self, team_id: str, link_id: str, body: TeamLinkCreateRequest, ) -> TeamLinkResponse: + """Update a team link. + + Update a team link. + + :param team_id: None + :type team_id: str + :param link_id: None + :type link_id: str + :type body: TeamLinkCreateRequest + :rtype: TeamLinkResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["link_id"] = link_id + + kwargs["body"] = body + + return self._update_team_link_endpoint.call_with_http_info(**kwargs) + + def update_team_membership(self, team_id: str, user_id: str, body: UserTeamUpdateRequest, ) -> UserTeamResponse: + """Update a user's membership attributes on a team. + + Update a user's membership attributes on a team. + + **Note** : Each team has a setting that determines who is allowed to modify membership of the team. The ``user_access_manage`` permission generally grants access to modify membership of any team. To get the full picture, see `Team Membership documentation `_. + + :param team_id: None + :type team_id: str + :param user_id: None + :type user_id: str + :type body: UserTeamUpdateRequest + :rtype: UserTeamResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["user_id"] = user_id + + kwargs["body"] = body + + return self._update_team_membership_endpoint.call_with_http_info(**kwargs) + + def update_team_notification_rule(self, team_id: str, rule_id: str, body: TeamNotificationRuleRequest, ) -> TeamNotificationRuleResponse: + """Update team notification rule. + + :param team_id: None + :type team_id: str + :param rule_id: None + :type rule_id: str + :type body: TeamNotificationRuleRequest + :rtype: TeamNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_team_notification_rule_endpoint.call_with_http_info(**kwargs) + + def update_team_permission_setting(self, team_id: str, action: str, body: TeamPermissionSettingUpdateRequest, ) -> TeamPermissionSettingResponse: + """Update permission setting for team. + + Update a team permission setting for a given team. + + :param team_id: None + :type team_id: str + :param action: None + :type action: str + :type body: TeamPermissionSettingUpdateRequest + :rtype: TeamPermissionSettingResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["action"] = action + + kwargs["body"] = body + + return self._update_team_permission_setting_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/test_optimization_api.py b/datadog_api_client/v2/api/test_optimization_api.py new file mode 100644 index 0000000000..02149e7c6a --- /dev/null +++ b/datadog_api_client/v2/api/test_optimization_api.py @@ -0,0 +1,341 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_response import TestOptimizationFlakyTestsManagementPoliciesResponse +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_update_request import TestOptimizationFlakyTestsManagementPoliciesUpdateRequest +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_get_request import TestOptimizationFlakyTestsManagementPoliciesGetRequest +from datadog_api_client.v2.model.test_optimization_delete_service_settings_request import TestOptimizationDeleteServiceSettingsRequest +from datadog_api_client.v2.model.test_optimization_service_settings_response import TestOptimizationServiceSettingsResponse +from datadog_api_client.v2.model.test_optimization_update_service_settings_request import TestOptimizationUpdateServiceSettingsRequest +from datadog_api_client.v2.model.test_optimization_get_service_settings_request import TestOptimizationGetServiceSettingsRequest +from datadog_api_client.v2.model.update_flaky_tests_response import UpdateFlakyTestsResponse +from datadog_api_client.v2.model.update_flaky_tests_request import UpdateFlakyTestsRequest +from datadog_api_client.v2.model.flaky_tests_search_response import FlakyTestsSearchResponse +from datadog_api_client.v2.model.flaky_tests_search_request import FlakyTestsSearchRequest +from datadog_api_client.v2.model.flaky_test import FlakyTest + + +class TestOptimizationApi: + """ + Search and manage flaky tests through Test Optimization. See the `Test Optimization page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_test_optimization_service_settings_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/test-optimization/settings/service", + "operation_id": "delete_test_optimization_service_settings", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TestOptimizationDeleteServiceSettingsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_flaky_tests_management_policies_endpoint = _Endpoint( + settings={ + "response_type": (TestOptimizationFlakyTestsManagementPoliciesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/test-optimization/settings/policies", + "operation_id": "get_flaky_tests_management_policies", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TestOptimizationFlakyTestsManagementPoliciesGetRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._get_test_optimization_service_settings_endpoint = _Endpoint( + settings={ + "response_type": (TestOptimizationServiceSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/test-optimization/settings/service", + "operation_id": "get_test_optimization_service_settings", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TestOptimizationGetServiceSettingsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._search_flaky_tests_endpoint = _Endpoint( + settings={ + "response_type": (FlakyTestsSearchResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/test/flaky-test-management/tests", + "operation_id": "search_flaky_tests", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "openapi_types": (FlakyTestsSearchRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_flaky_tests_endpoint = _Endpoint( + settings={ + "response_type": (UpdateFlakyTestsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/test/flaky-test-management/tests", + "operation_id": "update_flaky_tests", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UpdateFlakyTestsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_flaky_tests_management_policies_endpoint = _Endpoint( + settings={ + "response_type": (TestOptimizationFlakyTestsManagementPoliciesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/test-optimization/settings/policies", + "operation_id": "update_flaky_tests_management_policies", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TestOptimizationFlakyTestsManagementPoliciesUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_test_optimization_service_settings_endpoint = _Endpoint( + settings={ + "response_type": (TestOptimizationServiceSettingsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/ci/test-optimization/settings/service", + "operation_id": "update_test_optimization_service_settings", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (TestOptimizationUpdateServiceSettingsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def delete_test_optimization_service_settings(self, body: TestOptimizationDeleteServiceSettingsRequest, ) -> None: + """Delete Test Optimization service settings. + + Delete Test Optimization settings for a specific service identified by repository, service name, and environment. + + :type body: TestOptimizationDeleteServiceSettingsRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._delete_test_optimization_service_settings_endpoint.call_with_http_info(**kwargs) + + def get_flaky_tests_management_policies(self, body: TestOptimizationFlakyTestsManagementPoliciesGetRequest, ) -> TestOptimizationFlakyTestsManagementPoliciesResponse: + """Get Flaky Tests Management policies. + + Retrieve Flaky Tests Management repository-level policies for the given repository. + + :type body: TestOptimizationFlakyTestsManagementPoliciesGetRequest + :rtype: TestOptimizationFlakyTestsManagementPoliciesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._get_flaky_tests_management_policies_endpoint.call_with_http_info(**kwargs) + + def get_test_optimization_service_settings(self, body: TestOptimizationGetServiceSettingsRequest, ) -> TestOptimizationServiceSettingsResponse: + """Get Test Optimization service settings. + + Retrieve Test Optimization settings for a specific service identified by repository, service name, and environment. + + :type body: TestOptimizationGetServiceSettingsRequest + :rtype: TestOptimizationServiceSettingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._get_test_optimization_service_settings_endpoint.call_with_http_info(**kwargs) + + def search_flaky_tests(self, *, body: Union[FlakyTestsSearchRequest, UnsetType]=unset, ) -> FlakyTestsSearchResponse: + """Search flaky tests. + + List endpoint returning flaky tests from Flaky Test Management. Results are paginated. + + The response includes comprehensive test information including: + + * Test identification and metadata (module, suite, name) + * Flaky state and categorization + * First and last flake occurrences (timestamp, branch, commit SHA) + * Test execution statistics from the last 7 days (failure rate) + * Pipeline impact metrics (failed pipelines count, total lost time) + * Complete status change history (optional, ordered from most recent to oldest) + + Set ``include_history`` to ``true`` in the request to receive the status change history for each test. + History is disabled by default for better performance. + + Results support filtering by various facets including service, environment, repository, branch, and test state. + + :type body: FlakyTestsSearchRequest, optional + :rtype: FlakyTestsSearchResponse + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + return self._search_flaky_tests_endpoint.call_with_http_info(**kwargs) + + def search_flaky_tests_with_pagination(self, *, body: Union[FlakyTestsSearchRequest, UnsetType]=unset, ) -> collections.abc.Iterable[FlakyTest]: + """Search flaky tests. + + Provide a paginated version of :meth:`search_flaky_tests`, returning all items. + + :type body: FlakyTestsSearchRequest, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[FlakyTest] + """ + kwargs: Dict[str, Any] = {} + if body is not unset: + kwargs["body"] = body + + local_page_size = get_attribute_from_path(kwargs, "body.data.attributes.page.limit", 10) + endpoint = self._search_flaky_tests_endpoint + set_attribute_from_path(kwargs, "body.data.attributes.page.limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "cursor_param": "body.data.attributes.page.cursor", + "cursor_path": "meta.pagination.next_page", + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_flaky_tests(self, body: UpdateFlakyTestsRequest, ) -> UpdateFlakyTestsResponse: + """Update flaky test states. + + Update the state of multiple flaky tests in Flaky Test Management. + + :type body: UpdateFlakyTestsRequest + :rtype: UpdateFlakyTestsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_flaky_tests_endpoint.call_with_http_info(**kwargs) + + def update_flaky_tests_management_policies(self, body: TestOptimizationFlakyTestsManagementPoliciesUpdateRequest, ) -> TestOptimizationFlakyTestsManagementPoliciesResponse: + """Update Flaky Tests Management policies. + + Partially update Flaky Tests Management repository-level policies for the given repository. + Only provided policy blocks are updated; omitted blocks are left unchanged. + + :type body: TestOptimizationFlakyTestsManagementPoliciesUpdateRequest + :rtype: TestOptimizationFlakyTestsManagementPoliciesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_flaky_tests_management_policies_endpoint.call_with_http_info(**kwargs) + + def update_test_optimization_service_settings(self, body: TestOptimizationUpdateServiceSettingsRequest, ) -> TestOptimizationServiceSettingsResponse: + """Update Test Optimization service settings. + + Partially update Test Optimization settings for a specific service identified by repository, service name, and environment. + Only provided fields are updated; setting a field to ``null`` is a no-op. + To reset a setting to inherit from the repository level, use the corresponding ``_inherit`` field. + The ``pr_comments_enabled`` field is ignored as it cannot be overridden at the service level. + + :type body: TestOptimizationUpdateServiceSettingsRequest + :rtype: TestOptimizationServiceSettingsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_test_optimization_service_settings_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/usage_metering_api.py b/datadog_api_client/v2/api/usage_metering_api.py new file mode 100644 index 0000000000..07baa57f8e --- /dev/null +++ b/datadog_api_client/v2/api/usage_metering_api.py @@ -0,0 +1,909 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.active_billing_dimensions_response import ActiveBillingDimensionsResponse +from datadog_api_client.v2.model.monthly_cost_attribution_response import MonthlyCostAttributionResponse +from datadog_api_client.v2.model.sort_direction import SortDirection +from datadog_api_client.v2.model.usage_application_security_monitoring_response import UsageApplicationSecurityMonitoringResponse +from datadog_api_client.v2.model.billing_dimensions_mapping_response import BillingDimensionsMappingResponse +from datadog_api_client.v2.model.cost_by_org_response import CostByOrgResponse +from datadog_api_client.v2.model.cost_aggregation_type import CostAggregationType +from datadog_api_client.v2.model.hourly_usage_response import HourlyUsageResponse +from datadog_api_client.v2.model.usage_lambda_traced_invocations_response import UsageLambdaTracedInvocationsResponse +from datadog_api_client.v2.model.usage_observability_pipelines_response import UsageObservabilityPipelinesResponse +from datadog_api_client.v2.model.projected_cost_response import ProjectedCostResponse +from datadog_api_client.v2.model.usage_summary_available_fields_response import UsageSummaryAvailableFieldsResponse +from datadog_api_client.v2.model.usage_attribution_types_response import UsageAttributionTypesResponse + + +class UsageMeteringApi: + """ + The usage metering API allows you to get hourly, daily, and + monthly usage across multiple facets of Datadog. + This API is available to all Pro and Enterprise customers. + + **Note** : Usage data is delayed by up to 72 hours from when it was incurred. + It is retained for 15 months. + + You can retrieve up to 24 hours of hourly usage data for multiple organizations, + and up to two months of hourly usage data for a single organization in one request. + Learn more on the `usage details documentation `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._get_active_billing_dimensions_endpoint = _Endpoint( + settings={ + "response_type": (ActiveBillingDimensionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost_by_tag/active_billing_dimensions", + "operation_id": "get_active_billing_dimensions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_billing_dimension_mapping_endpoint = _Endpoint( + settings={ + "response_type": (BillingDimensionsMappingResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/billing_dimension_mapping", + "operation_id": "get_billing_dimension_mapping", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_month": { + "openapi_types": (datetime,), + "attribute": "filter[month]", + "location": "query", + }, + "filter_view": { + "openapi_types": (str,), + "attribute": "filter[view]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_cost_by_org_endpoint = _Endpoint( + settings={ + "response_type": (CostByOrgResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/cost_by_org", + "operation_id": "get_cost_by_org", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "start_month": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_month", + "location": "query", + }, + "end_month": { + "openapi_types": (datetime,), + "attribute": "end_month", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_estimated_cost_by_org_endpoint = _Endpoint( + settings={ + "response_type": (CostByOrgResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/estimated_cost", + "operation_id": "get_estimated_cost_by_org", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "view": { + "openapi_types": (str,), + "attribute": "view", + "location": "query", + }, + "start_month": { + "openapi_types": (datetime,), + "attribute": "start_month", + "location": "query", + }, + "end_month": { + "openapi_types": (datetime,), + "attribute": "end_month", + "location": "query", + }, + "start_date": { + "openapi_types": (datetime,), + "attribute": "start_date", + "location": "query", + }, + "end_date": { + "openapi_types": (datetime,), + "attribute": "end_date", + "location": "query", + }, + "cost_aggregation": { + "openapi_types": (CostAggregationType,), + "attribute": "cost_aggregation", + "location": "query", + }, + "include_connected_accounts": { + "openapi_types": (bool,), + "attribute": "include_connected_accounts", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_historical_cost_by_org_endpoint = _Endpoint( + settings={ + "response_type": (CostByOrgResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/historical_cost", + "operation_id": "get_historical_cost_by_org", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "start_month": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_month", + "location": "query", + }, + "view": { + "openapi_types": (str,), + "attribute": "view", + "location": "query", + }, + "end_month": { + "openapi_types": (datetime,), + "attribute": "end_month", + "location": "query", + }, + "include_connected_accounts": { + "openapi_types": (bool,), + "attribute": "include_connected_accounts", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_hourly_usage_endpoint = _Endpoint( + settings={ + "response_type": (HourlyUsageResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/hourly_usage", + "operation_id": "get_hourly_usage", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "filter_timestamp_start": { + "required": True, + "openapi_types": (datetime,), + "attribute": "filter[timestamp][start]", + "location": "query", + }, + "filter_timestamp_end": { + "openapi_types": (datetime,), + "attribute": "filter[timestamp][end]", + "location": "query", + }, + "filter_product_families": { + "required": True, + "openapi_types": (str,), + "attribute": "filter[product_families]", + "location": "query", + }, + "filter_include_descendants": { + "openapi_types": (bool,), + "attribute": "filter[include_descendants]", + "location": "query", + }, + "filter_include_connected_accounts": { + "openapi_types": (bool,), + "attribute": "filter[include_connected_accounts]", + "location": "query", + }, + "filter_include_breakdown": { + "openapi_types": (bool,), + "attribute": "filter[include_breakdown]", + "location": "query", + }, + "filter_versions": { + "openapi_types": (str,), + "attribute": "filter[versions]", + "location": "query", + }, + "page_limit": { + "validation": { + "inclusive_maximum": 500, + "inclusive_minimum": 1, + }, + "openapi_types": (int,), + "attribute": "page[limit]", + "location": "query", + }, + "page_next_record_id": { + "openapi_types": (str,), + "attribute": "page[next_record_id]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_monthly_cost_attribution_endpoint = _Endpoint( + settings={ + "response_type": (MonthlyCostAttributionResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/cost_by_tag/monthly_cost_attribution", + "operation_id": "get_monthly_cost_attribution", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "start_month": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_month", + "location": "query", + }, + "end_month": { + "openapi_types": (datetime,), + "attribute": "end_month", + "location": "query", + }, + "fields": { + "required": True, + "openapi_types": (str,), + "attribute": "fields", + "location": "query", + }, + "sort_direction": { + "openapi_types": (SortDirection,), + "attribute": "sort_direction", + "location": "query", + }, + "sort_name": { + "openapi_types": (str,), + "attribute": "sort_name", + "location": "query", + }, + "tag_breakdown_keys": { + "openapi_types": (str,), + "attribute": "tag_breakdown_keys", + "location": "query", + }, + "next_record_id": { + "openapi_types": (str,), + "attribute": "next_record_id", + "location": "query", + }, + "include_descendants": { + "openapi_types": (bool,), + "attribute": "include_descendants", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_projected_cost_endpoint = _Endpoint( + settings={ + "response_type": (ProjectedCostResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/projected_cost", + "operation_id": "get_projected_cost", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "view": { + "openapi_types": (str,), + "attribute": "view", + "location": "query", + }, + "include_connected_accounts": { + "openapi_types": (bool,), + "attribute": "include_connected_accounts", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_application_security_monitoring_endpoint = _Endpoint( + settings={ + "response_type": (UsageApplicationSecurityMonitoringResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/application_security", + "operation_id": "get_usage_application_security_monitoring", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_attribution_types_endpoint = _Endpoint( + settings={ + "response_type": (UsageAttributionTypesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/usage-attribution-types", + "operation_id": "get_usage_attribution_types", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_lambda_traced_invocations_endpoint = _Endpoint( + settings={ + "response_type": (UsageLambdaTracedInvocationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/lambda_traced_invocations", + "operation_id": "get_usage_lambda_traced_invocations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_observability_pipelines_endpoint = _Endpoint( + settings={ + "response_type": (UsageObservabilityPipelinesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/observability_pipelines", + "operation_id": "get_usage_observability_pipelines", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "start_hr": { + "required": True, + "openapi_types": (datetime,), + "attribute": "start_hr", + "location": "query", + }, + "end_hr": { + "openapi_types": (datetime,), + "attribute": "end_hr", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + self._get_usage_summary_available_fields_endpoint = _Endpoint( + settings={ + "response_type": (UsageSummaryAvailableFieldsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/usage/summary/available_fields", + "operation_id": "get_usage_summary_available_fields", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json;datetime-format=rfc3339"], + }, + api_client=api_client, + ) + + def get_active_billing_dimensions(self, ) -> ActiveBillingDimensionsResponse: + """Get active billing dimensions for cost attribution. + + Get active billing dimensions for cost attribution. Cost data for a given month becomes available no later than the 19th of the following month. + + :rtype: ActiveBillingDimensionsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_active_billing_dimensions_endpoint.call_with_http_info(**kwargs) + + def get_billing_dimension_mapping(self, *, filter_month: Union[datetime, UnsetType]=unset, filter_view: Union[str, UnsetType]=unset, ) -> BillingDimensionsMappingResponse: + """Get billing dimension mapping for usage endpoints. + + Get a mapping of billing dimensions to the corresponding keys for the supported usage metering public API endpoints. + Mapping data is updated on a monthly cadence. + + This endpoint is only accessible to `parent-level organizations `_. + + :param filter_month: Datetime in ISO-8601 format, UTC, and for mappings beginning this month. Defaults to the current month. + :type filter_month: datetime, optional + :param filter_view: String to specify whether to retrieve active billing dimension mappings for the contract or for all available mappings. Allowed views have the string ``active`` or ``all``. Defaults to ``active``. + :type filter_view: str, optional + :rtype: BillingDimensionsMappingResponse + """ + kwargs: Dict[str, Any] = {} + if filter_month is not unset: + kwargs["filter_month"] = filter_month + + if filter_view is not unset: + kwargs["filter_view"] = filter_view + + return self._get_billing_dimension_mapping_endpoint.call_with_http_info(**kwargs) + + def get_cost_by_org(self, start_month: datetime, *, end_month: Union[datetime, UnsetType]=unset, ) -> CostByOrgResponse: + """Get cost across multi-org account. **Deprecated**. + + Get cost across multi-org account. + Cost by org data for a given month becomes available no later than the 16th of the following month. + **Note:** This endpoint has been deprecated. Please use the new endpoint + ` ``/historical_cost`` `_ + instead. + + This endpoint is only accessible for `parent-level organizations `_. + + :param start_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for cost beginning this month. + :type start_month: datetime + :param end_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for cost ending this month. + :type end_month: datetime, optional + :rtype: CostByOrgResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_month"] = start_month + + if end_month is not unset: + kwargs["end_month"] = end_month + + warnings.warn("get_cost_by_org is deprecated", DeprecationWarning, stacklevel=2) + return self._get_cost_by_org_endpoint.call_with_http_info(**kwargs) + + def get_estimated_cost_by_org(self, *, view: Union[str, UnsetType]=unset, start_month: Union[datetime, UnsetType]=unset, end_month: Union[datetime, UnsetType]=unset, start_date: Union[datetime, UnsetType]=unset, end_date: Union[datetime, UnsetType]=unset, cost_aggregation: Union[CostAggregationType, UnsetType]=unset, include_connected_accounts: Union[bool, UnsetType]=unset, ) -> CostByOrgResponse: + """Get estimated cost across your account. + + Get estimated cost across multi-org and single root-org accounts. + Estimated cost data is only available for the current month and previous month + and is delayed by up to 72 hours from when it was incurred. + To access historical costs prior to this, use the ``/historical_cost`` endpoint. + + This endpoint is only accessible for `parent-level organizations `_. + + :param view: String to specify whether cost is broken down at a parent-org level or at the sub-org level. Available views are ``summary`` and ``sub-org``. Defaults to ``summary``. + :type view: str, optional + :param start_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for cost beginning this month. **Either start_month or start_date should be specified, but not both.** (start_month cannot go beyond two months in the past). Provide an ``end_month`` to view month-over-month cost. + :type start_month: datetime, optional + :param end_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for cost ending this month. + :type end_month: datetime, optional + :param start_date: Datetime in ISO-8601 format, UTC, precise to day: ``[YYYY-MM-DD]`` for cost beginning this day. **Either start_month or start_date should be specified, but not both.** (start_date cannot go beyond two months in the past). Provide an ``end_date`` to view day-over-day cumulative cost. + :type start_date: datetime, optional + :param end_date: Datetime in ISO-8601 format, UTC, precise to day: ``[YYYY-MM-DD]`` for cost ending this day. + :type end_date: datetime, optional + :param cost_aggregation: Controls how costs are aggregated when using ``start_date``. The ``cumulative`` option returns month-to-date running totals. + :type cost_aggregation: CostAggregationType, optional + :param include_connected_accounts: Boolean to specify whether to include accounts connected to the current account as partner customers in the Datadog partner network program. Defaults to ``false``. + :type include_connected_accounts: bool, optional + :rtype: CostByOrgResponse + """ + kwargs: Dict[str, Any] = {} + if view is not unset: + kwargs["view"] = view + + if start_month is not unset: + kwargs["start_month"] = start_month + + if end_month is not unset: + kwargs["end_month"] = end_month + + if start_date is not unset: + kwargs["start_date"] = start_date + + if end_date is not unset: + kwargs["end_date"] = end_date + + if cost_aggregation is not unset: + kwargs["cost_aggregation"] = cost_aggregation + + if include_connected_accounts is not unset: + kwargs["include_connected_accounts"] = include_connected_accounts + + return self._get_estimated_cost_by_org_endpoint.call_with_http_info(**kwargs) + + def get_historical_cost_by_org(self, start_month: datetime, *, view: Union[str, UnsetType]=unset, end_month: Union[datetime, UnsetType]=unset, include_connected_accounts: Union[bool, UnsetType]=unset, ) -> CostByOrgResponse: + """Get historical cost across your account. + + Get historical cost across multi-org and single root-org accounts. + Cost data for a given month becomes available no later than the 16th of the following month. + + This endpoint is only accessible for `parent-level organizations `_. + + :param start_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for cost beginning this month. + :type start_month: datetime + :param view: String to specify whether cost is broken down at a parent-org level or at the sub-org level. Available views are ``summary`` and ``sub-org``. Defaults to ``summary``. + :type view: str, optional + :param end_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for cost ending this month. + :type end_month: datetime, optional + :param include_connected_accounts: Boolean to specify whether to include accounts connected to the current account as partner customers in the Datadog partner network program. Defaults to ``false``. + :type include_connected_accounts: bool, optional + :rtype: CostByOrgResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_month"] = start_month + + if view is not unset: + kwargs["view"] = view + + if end_month is not unset: + kwargs["end_month"] = end_month + + if include_connected_accounts is not unset: + kwargs["include_connected_accounts"] = include_connected_accounts + + return self._get_historical_cost_by_org_endpoint.call_with_http_info(**kwargs) + + def get_hourly_usage(self, filter_timestamp_start: datetime, filter_product_families: str, *, filter_timestamp_end: Union[datetime, UnsetType]=unset, filter_include_descendants: Union[bool, UnsetType]=unset, filter_include_connected_accounts: Union[bool, UnsetType]=unset, filter_include_breakdown: Union[bool, UnsetType]=unset, filter_versions: Union[str, UnsetType]=unset, page_limit: Union[int, UnsetType]=unset, page_next_record_id: Union[str, UnsetType]=unset, ) -> HourlyUsageResponse: + """Get hourly usage by product family. + + Get hourly usage by product family. + + :param filter_timestamp_start: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage beginning at this hour. + :type filter_timestamp_start: datetime + :param filter_product_families: Comma separated list of product families to retrieve. Available families are ``all`` , ``ai`` , ``analyzed_logs`` , + ``application_performance_monitoring`` , ``application_security`` , ``audit_trail`` , ``bits_ai`` , ``serverless`` , ``ci_app`` , + ``cloud_cost_management`` , ``cloud_siem`` , ``csm_container_enterprise`` , ``csm_host_enterprise`` , ``csm_host_pro`` , ``cspm`` , + ``custom_events`` , ``cws`` , ``data_observability`` , ``dbm`` , ``digital_experience_management`` , ``error_tracking`` , + ``fargate`` , ``infra_hosts`` , ``incident_management`` , ``indexed_logs`` , ``indexed_spans`` , ``infrastructure_monitoring`` , + ``ingested_spans`` , ``iot`` , ``lambda_traced_invocations`` , ``llm_observability`` , ``log_management`` , ``logs`` , + ``network_flows`` , ``network_hosts`` , ``network_monitoring`` , ``observability_pipelines`` , ``online_archive`` , + ``platform_capabilities`` , ``product_analytics`` , ``profiling`` , ``rum`` , ``rum_browser_sessions`` , ``rum_mobile_sessions`` , + ``sds`` , ``security`` , ``snmp`` , ``software_delivery`` , ``synthetics_api`` , ``synthetics_browser`` , + ``synthetics_mobile`` , ``synthetics_parallel_testing`` , ``timeseries`` , ``vuln_management`` and ``workflow_executions``. + The following product family has been **deprecated** : ``audit_logs``. + :type filter_product_families: str + :param filter_timestamp_end: Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh] for usage ending **before** this hour. + :type filter_timestamp_end: datetime, optional + :param filter_include_descendants: Include child org usage in the response. Defaults to false. + :type filter_include_descendants: bool, optional + :param filter_include_connected_accounts: Boolean to specify whether to include accounts connected to the current account as partner customers in the Datadog partner network program. Defaults to false. + :type filter_include_connected_accounts: bool, optional + :param filter_include_breakdown: Include breakdown of usage by subcategories where applicable (for product family logs only). Defaults to false. + :type filter_include_breakdown: bool, optional + :param filter_versions: Comma separated list of product family versions to use in the format ``product_family:version``. For example, + ``infra_hosts:1.0.0``. If this parameter is not used, the API will use the latest version of each requested + product family. Currently all families have one version ``1.0.0``. + :type filter_versions: str, optional + :param page_limit: Maximum number of results to return (between 1 and 500) - defaults to 500 if limit not specified. + :type page_limit: int, optional + :param page_next_record_id: List following results with a next_record_id provided in the previous query. + :type page_next_record_id: str, optional + :rtype: HourlyUsageResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["filter_timestamp_start"] = filter_timestamp_start + + if filter_timestamp_end is not unset: + kwargs["filter_timestamp_end"] = filter_timestamp_end + + kwargs["filter_product_families"] = filter_product_families + + if filter_include_descendants is not unset: + kwargs["filter_include_descendants"] = filter_include_descendants + + if filter_include_connected_accounts is not unset: + kwargs["filter_include_connected_accounts"] = filter_include_connected_accounts + + if filter_include_breakdown is not unset: + kwargs["filter_include_breakdown"] = filter_include_breakdown + + if filter_versions is not unset: + kwargs["filter_versions"] = filter_versions + + if page_limit is not unset: + kwargs["page_limit"] = page_limit + + if page_next_record_id is not unset: + kwargs["page_next_record_id"] = page_next_record_id + + return self._get_hourly_usage_endpoint.call_with_http_info(**kwargs) + + def get_monthly_cost_attribution(self, start_month: datetime, fields: str, *, end_month: Union[datetime, UnsetType]=unset, sort_direction: Union[SortDirection, UnsetType]=unset, sort_name: Union[str, UnsetType]=unset, tag_breakdown_keys: Union[str, UnsetType]=unset, next_record_id: Union[str, UnsetType]=unset, include_descendants: Union[bool, UnsetType]=unset, ) -> MonthlyCostAttributionResponse: + """Get Monthly Cost Attribution. + + Get monthly cost attribution by tag across multi-org and single root-org accounts. + Cost Attribution data for a given month becomes available no later than the 19th of the following month. + This API endpoint is paginated. To make sure you receive all records, check if the value of ``next_record_id`` is + set in the response. If it is, make another request and pass ``next_record_id`` as a parameter. + Pseudo code example: + + .. code-block:: + + response := GetMonthlyCostAttribution(start_month, end_month) + cursor := response.metadata.pagination.next_record_id + WHILE cursor != null BEGIN + sleep(5 seconds) # Avoid running into rate limit + response := GetMonthlyCostAttribution(start_month, end_month, next_record_id=cursor) + cursor := response.metadata.pagination.next_record_id + END + + This endpoint is only accessible for `parent-level organizations `_. This endpoint is not available in the Government (US1-FED) site. + + :param start_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for cost beginning in this month. + :type start_month: datetime + :param fields: Comma-separated list specifying cost types (e.g., ``_on_demand_cost`` , ``_committed_cost`` , ``_total_cost`` ) and the + proportions ( ``_percentage_in_org`` , ``_percentage_in_account`` ). Use ``*`` to retrieve all fields. + Example: ``infra_host_on_demand_cost,infra_host_percentage_in_account`` + To obtain the complete list of active billing dimensions that can be used to replace + ```` in the field names, make a request to the `Get active billing dimensions API `_. + :type fields: str + :param end_month: Datetime in ISO-8601 format, UTC, precise to month: ``[YYYY-MM]`` for cost ending this month. + :type end_month: datetime, optional + :param sort_direction: The direction to sort by: ``[desc, asc]``. + :type sort_direction: SortDirection, optional + :param sort_name: The billing dimension to sort by. Always sorted by total cost. Example: ``infra_host``. + :type sort_name: str, optional + :param tag_breakdown_keys: Comma separated list of tag keys used to group cost. If no value is provided the cost will not be broken down by tags. + To see which tags are available, look for the value of ``tag_config_source`` in the API response. + :type tag_breakdown_keys: str, optional + :param next_record_id: List following results with a next_record_id provided in the previous query. + :type next_record_id: str, optional + :param include_descendants: Include child org cost in the response. Defaults to ``true``. + :type include_descendants: bool, optional + :rtype: MonthlyCostAttributionResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_month"] = start_month + + if end_month is not unset: + kwargs["end_month"] = end_month + + kwargs["fields"] = fields + + if sort_direction is not unset: + kwargs["sort_direction"] = sort_direction + + if sort_name is not unset: + kwargs["sort_name"] = sort_name + + if tag_breakdown_keys is not unset: + kwargs["tag_breakdown_keys"] = tag_breakdown_keys + + if next_record_id is not unset: + kwargs["next_record_id"] = next_record_id + + if include_descendants is not unset: + kwargs["include_descendants"] = include_descendants + + return self._get_monthly_cost_attribution_endpoint.call_with_http_info(**kwargs) + + def get_projected_cost(self, *, view: Union[str, UnsetType]=unset, include_connected_accounts: Union[bool, UnsetType]=unset, ) -> ProjectedCostResponse: + """Get projected cost across your account. + + Get projected cost across multi-org and single root-org accounts. + Projected cost data is only available for the current month and becomes available around the 12th of the month. + + This endpoint is only accessible for `parent-level organizations `_. + + :param view: String to specify whether cost is broken down at a parent-org level or at the sub-org level. Available views are ``summary`` and ``sub-org``. Defaults to ``summary``. + :type view: str, optional + :param include_connected_accounts: Boolean to specify whether to include accounts connected to the current account as partner customers in the Datadog partner network program. Defaults to ``false``. + :type include_connected_accounts: bool, optional + :rtype: ProjectedCostResponse + """ + kwargs: Dict[str, Any] = {} + if view is not unset: + kwargs["view"] = view + + if include_connected_accounts is not unset: + kwargs["include_connected_accounts"] = include_connected_accounts + + return self._get_projected_cost_endpoint.call_with_http_info(**kwargs) + + def get_usage_application_security_monitoring(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageApplicationSecurityMonitoringResponse: + """Get hourly usage for application security. **Deprecated**. + + Get hourly usage for application security . + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_ + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageApplicationSecurityMonitoringResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_application_security_monitoring is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_application_security_monitoring_endpoint.call_with_http_info(**kwargs) + + def get_usage_attribution_types(self, ) -> UsageAttributionTypesResponse: + """Get usage attribution types. + + Get usage attribution types. + + :rtype: UsageAttributionTypesResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_usage_attribution_types_endpoint.call_with_http_info(**kwargs) + + def get_usage_lambda_traced_invocations(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageLambdaTracedInvocationsResponse: + """Get hourly usage for Lambda traced invocations. **Deprecated**. + + Get hourly usage for Lambda traced invocations. + **Note:** This endpoint has been deprecated.. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_ + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageLambdaTracedInvocationsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_lambda_traced_invocations is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_lambda_traced_invocations_endpoint.call_with_http_info(**kwargs) + + def get_usage_observability_pipelines(self, start_hr: datetime, *, end_hr: Union[datetime, UnsetType]=unset, ) -> UsageObservabilityPipelinesResponse: + """Get hourly usage for observability pipelines. **Deprecated**. + + Get hourly usage for observability pipelines. + **Note:** This endpoint has been deprecated. Hourly usage data for all products is now available in the `Get hourly usage by product family API `_ + + :param start_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage beginning at this hour. + :type start_hr: datetime + :param end_hr: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]`` for usage ending + **before** this hour. + :type end_hr: datetime, optional + :rtype: UsageObservabilityPipelinesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["start_hr"] = start_hr + + if end_hr is not unset: + kwargs["end_hr"] = end_hr + + warnings.warn("get_usage_observability_pipelines is deprecated", DeprecationWarning, stacklevel=2) + return self._get_usage_observability_pipelines_endpoint.call_with_http_info(**kwargs) + + def get_usage_summary_available_fields(self, ) -> UsageSummaryAvailableFieldsResponse: + """Get available fields for usage summary. + + List the field names returned by ``GET /api/v1/usage/summary`` at each of its + three response levels. Each list contains every key the data endpoint + emits—both typed fields declared in the OpenAPI spec and untyped keys + exposed through ``additionalProperties`` (the latter used for billing + dimensions and usage types added after the v1 schema freeze). + + This endpoint is only accessible for `parent-level organizations `_. + + Go example: + + .. code-block:: go + + fields, _, err := api.GetUsageSummaryAvailableFields(ctx) + attr := fields.Data.GetAttributes() + + // resp is the *UsageSummaryResponse returned by api.GetUsageSummary(ctx, ...) + // Layer 1: UsageSummaryResponse + for _, key := range attr.GetResponseFields() { + if val, ok := resp.AdditionalProperties[key]; ok { + fmt.Println(key, val.(json.Number)) + } + } + // Layer 2: UsageSummaryDate (per month) + for _, date := range resp.GetUsage() { + for _, key := range attr.GetDateFields() { + if val, ok := date.AdditionalProperties[key]; ok { + fmt.Println(key, val.(json.Number)) + } + } + // Layer 3: UsageSummaryDateOrg (per org per month) + for _, org := range date.GetOrgs() { + for _, key := range attr.GetDateOrgFields() { + if val, ok := org.AdditionalProperties[key]; ok { + fmt.Println(key, val.(json.Number)) + } + } + } + } + + :rtype: UsageSummaryAvailableFieldsResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_usage_summary_available_fields_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/user_authorized_clients_api.py b/datadog_api_client/v2/api/user_authorized_clients_api.py new file mode 100644 index 0000000000..8170c4e21e --- /dev/null +++ b/datadog_api_client/v2/api/user_authorized_clients_api.py @@ -0,0 +1,271 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.user_authorized_clients_response import UserAuthorizedClientsResponse +from datadog_api_client.v2.model.user_authorized_client_data import UserAuthorizedClientData +from datadog_api_client.v2.model.user_authorized_client_response import UserAuthorizedClientResponse + + +class UserAuthorizedClientsApi: + """ + Manage OAuth2 client authorizations at the user level. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._delete_user_authorized_client_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/user_authorized_clients/{user_authorized_client_id}", + "operation_id": "delete_user_authorized_client", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "user_authorized_client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_authorized_client_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._delete_user_authorized_clients_by_client_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/user_authorized_clients/client/{client_id}", + "operation_id": "delete_user_authorized_clients_by_client", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "client_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_user_authorized_client_endpoint = _Endpoint( + settings={ + "response_type": (UserAuthorizedClientResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/user_authorized_clients/{user_authorized_client_id}", + "operation_id": "get_user_authorized_client", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_authorized_client_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_authorized_client_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_user_authorized_clients_endpoint = _Endpoint( + settings={ + "response_type": (UserAuthorizedClientsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/user_authorized_clients", + "operation_id": "list_user_authorized_clients", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_disabled": { + "openapi_types": (str,), + "attribute": "filter[disabled]", + "location": "query", + }, + "include": { + "openapi_types": (str,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + def delete_user_authorized_client(self, user_authorized_client_id: str, ) -> None: + """Delete a user authorized client. + + Disable the current user's authorization for the specified OAuth2 client. + + :param user_authorized_client_id: The ID of the user authorized client. + :type user_authorized_client_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["user_authorized_client_id"] = user_authorized_client_id + + return self._delete_user_authorized_client_endpoint.call_with_http_info(**kwargs) + + def delete_user_authorized_clients_by_client(self, client_id: str, ) -> None: + """Delete all user authorized clients for a client. + + Disable all authorizations the current user has granted to the specified OAuth2 client. + + :param client_id: The ID of the OAuth2 client. + :type client_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["client_id"] = client_id + + return self._delete_user_authorized_clients_by_client_endpoint.call_with_http_info(**kwargs) + + def get_user_authorized_client(self, user_authorized_client_id: str, ) -> UserAuthorizedClientResponse: + """Get a user authorized client. + + Get a single OAuth2 client authorization for the current user. + + :param user_authorized_client_id: The ID of the user authorized client. + :type user_authorized_client_id: str + :rtype: UserAuthorizedClientResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_authorized_client_id"] = user_authorized_client_id + + return self._get_user_authorized_client_endpoint.call_with_http_info(**kwargs) + + def list_user_authorized_clients(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_disabled: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> UserAuthorizedClientsResponse: + """List user authorized clients. + + Get a list of all OAuth2 clients authorized by the current user. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param filter: Filter results by client name, app title, or app description. + :type filter: str, optional + :param filter_disabled: Filter results by the user-level disabled status. + :type filter_disabled: str, optional + :param include: Comma-separated list of related resources to include. Options: ``oauth2_client`` , ``oauth2_client.app``. + :type include: str, optional + :rtype: UserAuthorizedClientsResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter is not unset: + kwargs["filter"] = filter + + if filter_disabled is not unset: + kwargs["filter_disabled"] = filter_disabled + + if include is not unset: + kwargs["include"] = include + + return self._list_user_authorized_clients_endpoint.call_with_http_info(**kwargs) + + def list_user_authorized_clients_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_disabled: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[UserAuthorizedClientData]: + """List user authorized clients. + + Provide a paginated version of :meth:`list_user_authorized_clients`, returning all items. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param filter: Filter results by client name, app title, or app description. + :type filter: str, optional + :param filter_disabled: Filter results by the user-level disabled status. + :type filter_disabled: str, optional + :param include: Comma-separated list of related resources to include. Options: ``oauth2_client`` , ``oauth2_client.app``. + :type include: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[UserAuthorizedClientData] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if filter is not unset: + kwargs["filter"] = filter + + if filter_disabled is not unset: + kwargs["filter_disabled"] = filter_disabled + + if include is not unset: + kwargs["include"] = include + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_user_authorized_clients_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) diff --git a/datadog_api_client/v2/api/users_api.py b/datadog_api_client/v2/api/users_api.py new file mode 100644 index 0000000000..dbc7c9e971 --- /dev/null +++ b/datadog_api_client/v2/api/users_api.py @@ -0,0 +1,736 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.anonymize_users_response import AnonymizeUsersResponse +from datadog_api_client.v2.model.anonymize_users_request import AnonymizeUsersRequest +from datadog_api_client.v2.model.user_response import UserResponse +from datadog_api_client.v2.model.user_update_request import UserUpdateRequest +from datadog_api_client.v2.model.user_invitations_response import UserInvitationsResponse +from datadog_api_client.v2.model.user_invitations_request import UserInvitationsRequest +from datadog_api_client.v2.model.user_invitation_response import UserInvitationResponse +from datadog_api_client.v2.model.users_response import UsersResponse +from datadog_api_client.v2.model.query_sort_order import QuerySortOrder +from datadog_api_client.v2.model.user import User +from datadog_api_client.v2.model.user_create_request import UserCreateRequest +from datadog_api_client.v2.model.user_override_identity_providers_response import UserOverrideIdentityProvidersResponse +from datadog_api_client.v2.model.permissions_response import PermissionsResponse +from datadog_api_client.v2.model.update_user_identity_providers_request import UpdateUserIdentityProvidersRequest + + +class UsersApi: + """ + Create, edit, and disable users. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._anonymize_users_endpoint = _Endpoint( + settings={ + "response_type": (AnonymizeUsersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/anonymize_users", + "operation_id": "anonymize_users", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (AnonymizeUsersRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_user_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users", + "operation_id": "create_user", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UserCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_user_invitations_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users/{user_id}/invitations", + "operation_id": "delete_user_invitations", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (UUID,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._disable_user_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users/{user_id}", + "operation_id": "disable_user", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_current_user_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/current_user", + "operation_id": "get_current_user", + "http_method": "GET", + "version": "v2", + }, + params_map={ + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_invitation_endpoint = _Endpoint( + settings={ + "response_type": (UserInvitationResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/user_invitations/{user_invitation_uuid}", + "operation_id": "get_invitation", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_invitation_uuid": { + "required": True, + "openapi_types": (str,), + "attribute": "user_invitation_uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_user_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users/{user_id}", + "operation_id": "get_user", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_user_identity_providers_endpoint = _Endpoint( + settings={ + "response_type": (UserOverrideIdentityProvidersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users/{user_id}/identity_providers", + "operation_id": "get_user_identity_providers", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_user_organizations_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users/{user_id}/orgs", + "operation_id": "list_user_organizations", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_user_permissions_endpoint = _Endpoint( + settings={ + "response_type": (PermissionsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users/{user_id}/permissions", + "operation_id": "list_user_permissions", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_users_endpoint = _Endpoint( + settings={ + "response_type": (UsersResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users", + "operation_id": "list_users", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "sort_dir": { + "openapi_types": (QuerySortOrder,), + "attribute": "sort_dir", + "location": "query", + }, + "filter": { + "openapi_types": (str,), + "attribute": "filter", + "location": "query", + }, + "filter_status": { + "openapi_types": (str,), + "attribute": "filter[status]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._send_invitations_endpoint = _Endpoint( + settings={ + "response_type": (UserInvitationsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/user_invitations", + "operation_id": "send_invitations", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UserInvitationsRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_current_user_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/current_user", + "operation_id": "update_current_user", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (UserUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_user_endpoint = _Endpoint( + settings={ + "response_type": (UserResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users/{user_id}", + "operation_id": "update_user", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UserUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._update_user_identity_providers_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/users/{user_id}/relationships/identity_providers", + "operation_id": "update_user_identity_providers", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "user_id": { + "required": True, + "openapi_types": (str,), + "attribute": "user_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateUserIdentityProvidersRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["*/*"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def anonymize_users(self, body: AnonymizeUsersRequest, ) -> AnonymizeUsersResponse: + """Anonymize users. + + Anonymize a list of users, removing their personal data. This operation is irreversible. + Requires the ``user_access_manage`` permission. + + :type body: AnonymizeUsersRequest + :rtype: AnonymizeUsersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._anonymize_users_endpoint.call_with_http_info(**kwargs) + + def create_user(self, body: UserCreateRequest, ) -> UserResponse: + """Create a user. + + Create a user for your organization. + + :type body: UserCreateRequest + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_user_endpoint.call_with_http_info(**kwargs) + + def delete_user_invitations(self, user_id: UUID, ) -> None: + """Delete a pending user's invitations. + + Cancel all pending invitations for a specified user. + Requires the ``user_access_invite`` permission. + + :param user_id: The UUID of the user whose pending invitations should be canceled. + :type user_id: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + return self._delete_user_invitations_endpoint.call_with_http_info(**kwargs) + + def disable_user(self, user_id: str, ) -> None: + """Disable a user. + + Disable a user. Can only be used with an application key belonging + to an administrator user. + + :param user_id: The ID of the user. + :type user_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + return self._disable_user_endpoint.call_with_http_info(**kwargs) + + def get_current_user(self, ) -> UserResponse: + """Get current user. + + Get the user associated with the current authentication context. + The response includes the user's profile attributes (name, email, handle, + status, MFA state), along with related resources: the user's organization, + assigned roles with their granted permissions, and team-scoped roles. + No additional permissions are required beyond valid authentication. + + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + return self._get_current_user_endpoint.call_with_http_info(**kwargs) + + def get_invitation(self, user_invitation_uuid: str, ) -> UserInvitationResponse: + """Get a user invitation. + + Returns a single user invitation by its UUID. + + :param user_invitation_uuid: The UUID of the user invitation. + :type user_invitation_uuid: str + :rtype: UserInvitationResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_invitation_uuid"] = user_invitation_uuid + + return self._get_invitation_endpoint.call_with_http_info(**kwargs) + + def get_user(self, user_id: str, ) -> UserResponse: + """Get user details. + + Get a user in the organization specified by the user’s ``user_id``. + + :param user_id: The ID of the user. + :type user_id: str + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + return self._get_user_endpoint.call_with_http_info(**kwargs) + + def get_user_identity_providers(self, user_id: str, ) -> UserOverrideIdentityProvidersResponse: + """Get identity provider overrides for a user. + + Get the identity provider overrides for a specific user in the organization. + When a user has no overrides set, they use the organization's default identity providers. + + :param user_id: The ID of the user. + :type user_id: str + :rtype: UserOverrideIdentityProvidersResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + return self._get_user_identity_providers_endpoint.call_with_http_info(**kwargs) + + def list_user_organizations(self, user_id: str, ) -> UserResponse: + """Get a user organization. + + Get a user organization. Returns the user information and all organizations + joined by this user. + + :param user_id: The ID of the user. + :type user_id: str + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + return self._list_user_organizations_endpoint.call_with_http_info(**kwargs) + + def list_user_permissions(self, user_id: str, ) -> PermissionsResponse: + """Get a user permissions. + + Get a user permission set. Returns a list of the user’s permissions + granted by the associated user's roles. + + :param user_id: The ID of the user. + :type user_id: str + :rtype: PermissionsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + return self._list_user_permissions_endpoint.call_with_http_info(**kwargs) + + def list_users(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, sort_dir: Union[QuerySortOrder, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_status: Union[str, UnsetType]=unset, ) -> UsersResponse: + """List all users. + + Get the list of all users in the organization. This list includes + all users even if they are deactivated or unverified. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: User attribute to order results by. Sort order is ascending by default. + Sort order is descending if the field + is prefixed by a negative sign, for example ``sort=-name``. Options: ``name`` , + ``modified_at`` , ``user_count``. + :type sort: str, optional + :param sort_dir: Direction of sort. Options: ``asc`` , ``desc``. + :type sort_dir: QuerySortOrder, optional + :param filter: Filter all users by the given string. Defaults to no filtering. + :type filter: str, optional + :param filter_status: Filter on status attribute. + Comma separated list, with possible values ``Active`` , ``Pending`` , and ``Disabled``. + Defaults to no filtering. + :type filter_status: str, optional + :rtype: UsersResponse + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if sort_dir is not unset: + kwargs["sort_dir"] = sort_dir + + if filter is not unset: + kwargs["filter"] = filter + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + return self._list_users_endpoint.call_with_http_info(**kwargs) + + def list_users_with_pagination(self, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, sort_dir: Union[QuerySortOrder, UnsetType]=unset, filter: Union[str, UnsetType]=unset, filter_status: Union[str, UnsetType]=unset, ) -> collections.abc.Iterable[User]: + """List all users. + + Provide a paginated version of :meth:`list_users`, returning all items. + + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :param sort: User attribute to order results by. Sort order is ascending by default. + Sort order is descending if the field + is prefixed by a negative sign, for example ``sort=-name``. Options: ``name`` , + ``modified_at`` , ``user_count``. + :type sort: str, optional + :param sort_dir: Direction of sort. Options: ``asc`` , ``desc``. + :type sort_dir: QuerySortOrder, optional + :param filter: Filter all users by the given string. Defaults to no filtering. + :type filter: str, optional + :param filter_status: Filter on status attribute. + Comma separated list, with possible values ``Active`` , ``Pending`` , and ``Disabled``. + Defaults to no filtering. + :type filter_status: str, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[User] + """ + kwargs: Dict[str, Any] = {} + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + if sort is not unset: + kwargs["sort"] = sort + + if sort_dir is not unset: + kwargs["sort_dir"] = sort_dir + + if filter is not unset: + kwargs["filter"] = filter + + if filter_status is not unset: + kwargs["filter_status"] = filter_status + + local_page_size = get_attribute_from_path(kwargs, "page_size", 10) + endpoint = self._list_users_endpoint + set_attribute_from_path(kwargs, "page_size", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page_number", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def send_invitations(self, body: UserInvitationsRequest, ) -> UserInvitationsResponse: + """Send invitation emails. + + Sends emails to one or more users inviting them to join the organization. + + :type body: UserInvitationsRequest + :rtype: UserInvitationsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._send_invitations_endpoint.call_with_http_info(**kwargs) + + def update_current_user(self, body: UserUpdateRequest, ) -> UserResponse: + """Update current user. + + Edit the profile of the currently authenticated user. Updatable fields + include ``name`` , ``title`` , ``email`` , and ``disabled`` status. The ``id`` field + in the request body must match the authenticated user's UUID; a mismatch + returns a 422 error. Email address changes are recorded in the audit trail. + Requires the ``user_self_profile_write`` permission. + + :type body: UserUpdateRequest + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._update_current_user_endpoint.call_with_http_info(**kwargs) + + def update_user(self, user_id: str, body: UserUpdateRequest, ) -> UserResponse: + """Update a user. + + Edit a user. Can only be used with an application key belonging + to an administrator user. + + :param user_id: The ID of the user. + :type user_id: str + :type body: UserUpdateRequest + :rtype: UserResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + kwargs["body"] = body + + return self._update_user_endpoint.call_with_http_info(**kwargs) + + def update_user_identity_providers(self, user_id: str, body: UpdateUserIdentityProvidersRequest, ) -> None: + """Update identity provider overrides for a user. + + Set the identity provider overrides for a specific user in the organization. + Pass an empty list to remove all overrides, reverting the user to the organization's + default identity providers. + + :param user_id: The ID of the user. + :type user_id: str + :type body: UpdateUserIdentityProvidersRequest + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["user_id"] = user_id + + kwargs["body"] = body + + return self._update_user_identity_providers_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/web_integrations_api.py b/datadog_api_client/v2/api/web_integrations_api.py new file mode 100644 index 0000000000..6b654f66fb --- /dev/null +++ b/datadog_api_client/v2/api/web_integrations_api.py @@ -0,0 +1,270 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.web_integration_accounts_response import WebIntegrationAccountsResponse +from datadog_api_client.v2.model.web_integration_account_response import WebIntegrationAccountResponse +from datadog_api_client.v2.model.web_integration_account_create_request import WebIntegrationAccountCreateRequest +from datadog_api_client.v2.model.web_integration_account_update_request import WebIntegrationAccountUpdateRequest + + +class WebIntegrationsApi: + """ + Manage web integration accounts programmatically through the Datadog API. + See the `Web Integrations page `_ for more information. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_web_integration_account_endpoint = _Endpoint( + settings={ + "response_type": (WebIntegrationAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/web-integrations/{integration_name}/accounts", + "operation_id": "create_web_integration_account", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "integration_name": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_name", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (WebIntegrationAccountCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_web_integration_account_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/web-integrations/{integration_name}/accounts/{account_id}", + "operation_id": "delete_web_integration_account", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "integration_name": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_name", + "location": "path", + }, + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_web_integration_account_endpoint = _Endpoint( + settings={ + "response_type": (WebIntegrationAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/web-integrations/{integration_name}/accounts/{account_id}", + "operation_id": "get_web_integration_account", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "integration_name": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_name", + "location": "path", + }, + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_web_integration_accounts_endpoint = _Endpoint( + settings={ + "response_type": (WebIntegrationAccountsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/web-integrations/{integration_name}/accounts", + "operation_id": "list_web_integration_accounts", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "integration_name": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_name", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_web_integration_account_endpoint = _Endpoint( + settings={ + "response_type": (WebIntegrationAccountResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/web-integrations/{integration_name}/accounts/{account_id}", + "operation_id": "update_web_integration_account", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "integration_name": { + "required": True, + "openapi_types": (str,), + "attribute": "integration_name", + "location": "path", + }, + "account_id": { + "required": True, + "openapi_types": (str,), + "attribute": "account_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (WebIntegrationAccountUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_web_integration_account(self, integration_name: str, body: WebIntegrationAccountCreateRequest, ) -> WebIntegrationAccountResponse: + """Create a web integration account. + + Create a new account for a given web integration. + + :param integration_name: The name of the integration (for example, ``databricks`` ). + :type integration_name: str + :type body: WebIntegrationAccountCreateRequest + :rtype: WebIntegrationAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_name"] = integration_name + + kwargs["body"] = body + + return self._create_web_integration_account_endpoint.call_with_http_info(**kwargs) + + def delete_web_integration_account(self, integration_name: str, account_id: str, ) -> None: + """Delete a web integration account. + + Delete an account for a given web integration. + + :param integration_name: The name of the integration (for example, ``databricks`` ). + :type integration_name: str + :param account_id: The unique identifier of the web integration account. + :type account_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_name"] = integration_name + + kwargs["account_id"] = account_id + + return self._delete_web_integration_account_endpoint.call_with_http_info(**kwargs) + + def get_web_integration_account(self, integration_name: str, account_id: str, ) -> WebIntegrationAccountResponse: + """Get a web integration account. + + Get a single account for a given web integration. + + :param integration_name: The name of the integration (for example, ``databricks`` ). + :type integration_name: str + :param account_id: The unique identifier of the web integration account. + :type account_id: str + :rtype: WebIntegrationAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_name"] = integration_name + + kwargs["account_id"] = account_id + + return self._get_web_integration_account_endpoint.call_with_http_info(**kwargs) + + def list_web_integration_accounts(self, integration_name: str, ) -> WebIntegrationAccountsResponse: + """List web integration accounts. + + List accounts for a given web integration. + + :param integration_name: The name of the integration (for example, ``databricks`` ). + :type integration_name: str + :rtype: WebIntegrationAccountsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_name"] = integration_name + + return self._list_web_integration_accounts_endpoint.call_with_http_info(**kwargs) + + def update_web_integration_account(self, integration_name: str, account_id: str, body: WebIntegrationAccountUpdateRequest, ) -> WebIntegrationAccountResponse: + """Update a web integration account. + + Update an existing account for a given web integration. + + :param integration_name: The name of the integration (for example, ``databricks`` ). + :type integration_name: str + :param account_id: The unique identifier of the web integration account. + :type account_id: str + :type body: WebIntegrationAccountUpdateRequest + :rtype: WebIntegrationAccountResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["integration_name"] = integration_name + + kwargs["account_id"] = account_id + + kwargs["body"] = body + + return self._update_web_integration_account_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/webhooks_integration_api.py b/datadog_api_client/v2/api/webhooks_integration_api.py new file mode 100644 index 0000000000..9cd79fd8b9 --- /dev/null +++ b/datadog_api_client/v2/api/webhooks_integration_api.py @@ -0,0 +1,235 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.webhooks_auth_methods_response import WebhooksAuthMethodsResponse +from datadog_api_client.v2.model.webhooks_auth_method_protocol import WebhooksAuthMethodProtocol +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response import WebhooksOAuth2ClientCredentialsResponse +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_create_request import WebhooksOAuth2ClientCredentialsCreateRequest +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_update_request import WebhooksOAuth2ClientCredentialsUpdateRequest + + +class WebhooksIntegrationApi: + """ + Configure your `Datadog Webhooks integration `_ + directly through the Datadog API. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_o_auth2_client_credentials_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksOAuth2ClientCredentialsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/webhooks/configuration/auth-method/oauth2-client-credentials", + "operation_id": "create_o_auth2_client_credentials", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (WebhooksOAuth2ClientCredentialsCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_o_auth2_client_credentials_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/webhooks/configuration/auth-method/oauth2-client-credentials/{auth_method_id}", + "operation_id": "delete_o_auth2_client_credentials", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "auth_method_id": { + "required": True, + "openapi_types": (str,), + "attribute": "auth_method_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_all_auth_methods_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksAuthMethodsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/webhooks/configuration/auth-method", + "operation_id": "get_all_auth_methods", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "include": { + "openapi_types": (WebhooksAuthMethodProtocol,), + "attribute": "include", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_o_auth2_client_credentials_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksOAuth2ClientCredentialsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/webhooks/configuration/auth-method/oauth2-client-credentials/{auth_method_id}", + "operation_id": "get_o_auth2_client_credentials", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "auth_method_id": { + "required": True, + "openapi_types": (str,), + "attribute": "auth_method_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_o_auth2_client_credentials_endpoint = _Endpoint( + settings={ + "response_type": (WebhooksOAuth2ClientCredentialsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/integration/webhooks/configuration/auth-method/oauth2-client-credentials/{auth_method_id}", + "operation_id": "update_o_auth2_client_credentials", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "auth_method_id": { + "required": True, + "openapi_types": (str,), + "attribute": "auth_method_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (WebhooksOAuth2ClientCredentialsUpdateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_o_auth2_client_credentials(self, body: WebhooksOAuth2ClientCredentialsCreateRequest, ) -> WebhooksOAuth2ClientCredentialsResponse: + """Create an OAuth2 client credentials auth method. + + Create a new OAuth2 client credentials auth method for the Webhooks + integration. The ``client_secret`` is stored securely and never returned. + + :param body: OAuth2 client credentials payload. + :type body: WebhooksOAuth2ClientCredentialsCreateRequest + :rtype: WebhooksOAuth2ClientCredentialsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_o_auth2_client_credentials_endpoint.call_with_http_info(**kwargs) + + def delete_o_auth2_client_credentials(self, auth_method_id: str, ) -> None: + """Delete an OAuth2 client credentials auth method. + + Delete an OAuth2 client credentials auth method by ID. + + :param auth_method_id: The UUID of the auth method. + :type auth_method_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["auth_method_id"] = auth_method_id + + return self._delete_o_auth2_client_credentials_endpoint.call_with_http_info(**kwargs) + + def get_all_auth_methods(self, *, include: Union[WebhooksAuthMethodProtocol, UnsetType]=unset, ) -> WebhooksAuthMethodsResponse: + """Get all auth methods. + + Get a list of all auth methods configured for the Webhooks integration in + your organization. + + :param include: Comma-separated list of relationships to include in the response. + :type include: WebhooksAuthMethodProtocol, optional + :rtype: WebhooksAuthMethodsResponse + """ + kwargs: Dict[str, Any] = {} + if include is not unset: + kwargs["include"] = include + + return self._get_all_auth_methods_endpoint.call_with_http_info(**kwargs) + + def get_o_auth2_client_credentials(self, auth_method_id: str, ) -> WebhooksOAuth2ClientCredentialsResponse: + """Get an OAuth2 client credentials auth method. + + Get a single OAuth2 client credentials auth method by ID. + + :param auth_method_id: The UUID of the auth method. + :type auth_method_id: str + :rtype: WebhooksOAuth2ClientCredentialsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["auth_method_id"] = auth_method_id + + return self._get_o_auth2_client_credentials_endpoint.call_with_http_info(**kwargs) + + def update_o_auth2_client_credentials(self, auth_method_id: str, body: WebhooksOAuth2ClientCredentialsUpdateRequest, ) -> WebhooksOAuth2ClientCredentialsResponse: + """Update an OAuth2 client credentials auth method. + + Update an existing OAuth2 client credentials auth method. + + :param auth_method_id: The UUID of the auth method. + :type auth_method_id: str + :param body: OAuth2 client credentials payload. + :type body: WebhooksOAuth2ClientCredentialsUpdateRequest + :rtype: WebhooksOAuth2ClientCredentialsResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["auth_method_id"] = auth_method_id + + kwargs["body"] = body + + return self._update_o_auth2_client_credentials_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/widgets_api.py b/datadog_api_client/v2/api/widgets_api.py new file mode 100644 index 0000000000..8809af50a2 --- /dev/null +++ b/datadog_api_client/v2/api/widgets_api.py @@ -0,0 +1,384 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.widget_list_response import WidgetListResponse +from datadog_api_client.v2.model.widget_experience_type import WidgetExperienceType +from datadog_api_client.v2.model.widget_type import WidgetType +from datadog_api_client.v2.model.widget_response import WidgetResponse +from datadog_api_client.v2.model.create_or_update_widget_request import CreateOrUpdateWidgetRequest + + +class WidgetsApi: + """ + Create, read, update, and delete saved widgets. Widgets are reusable + visualization components stored independently from any dashboard or notebook, + partitioned by experience type and identified by a UUID. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._create_widget_endpoint = _Endpoint( + settings={ + "response_type": (WidgetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/widgets/{experience_type}", + "operation_id": "create_widget", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "experience_type": { + "required": True, + "openapi_types": (WidgetExperienceType,), + "attribute": "experience_type", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateOrUpdateWidgetRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_widget_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/widgets/{experience_type}/{uuid}", + "operation_id": "delete_widget", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "experience_type": { + "required": True, + "openapi_types": (WidgetExperienceType,), + "attribute": "experience_type", + "location": "path", + }, + "uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_widget_endpoint = _Endpoint( + settings={ + "response_type": (WidgetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/widgets/{experience_type}/{uuid}", + "operation_id": "get_widget", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "experience_type": { + "required": True, + "openapi_types": (WidgetExperienceType,), + "attribute": "experience_type", + "location": "path", + }, + "uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "uuid", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._search_widgets_endpoint = _Endpoint( + settings={ + "response_type": (WidgetListResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/widgets/{experience_type}", + "operation_id": "search_widgets", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "experience_type": { + "required": True, + "openapi_types": (WidgetExperienceType,), + "attribute": "experience_type", + "location": "path", + }, + "filter_widget_type": { + "openapi_types": (WidgetType,), + "attribute": "filter[widgetType]", + "location": "query", + }, + "filter_creator_handle": { + "openapi_types": (str,), + "attribute": "filter[creatorHandle]", + "location": "query", + }, + "filter_is_favorited": { + "openapi_types": (bool,), + "attribute": "filter[isFavorited]", + "location": "query", + }, + "filter_title": { + "openapi_types": (str,), + "attribute": "filter[title]", + "location": "query", + }, + "filter_tags": { + "openapi_types": (str,), + "attribute": "filter[tags]", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "page_number": { + "validation": { + "inclusive_minimum": 0, + }, + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + "page_size": { + "validation": { + "inclusive_maximum": 100, + }, + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_widget_endpoint = _Endpoint( + settings={ + "response_type": (WidgetResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/widgets/{experience_type}/{uuid}", + "operation_id": "update_widget", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "experience_type": { + "required": True, + "openapi_types": (WidgetExperienceType,), + "attribute": "experience_type", + "location": "path", + }, + "uuid": { + "required": True, + "openapi_types": (UUID,), + "attribute": "uuid", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (CreateOrUpdateWidgetRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def create_widget(self, experience_type: WidgetExperienceType, body: CreateOrUpdateWidgetRequest, ) -> WidgetResponse: + """Create a widget. + + Create a new widget for a given experience type. + + :param experience_type: The experience type for the widget. + :type experience_type: WidgetExperienceType + :param body: Widget request body. The ``definition`` object's required fields vary + by ``widget.definition.type`` : every type requires ``requests`` , and + some types require additional fields (e.g. ``cloud_cost_summary`` + requires ``graph_options`` , ``geomap`` requires ``style`` and ``view`` ). + The example below shows a complete ``cloud_cost_summary`` payload + for the ``ccm_reports`` experience type. + :type body: CreateOrUpdateWidgetRequest + :rtype: WidgetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["experience_type"] = experience_type + + kwargs["body"] = body + + return self._create_widget_endpoint.call_with_http_info(**kwargs) + + def delete_widget(self, experience_type: WidgetExperienceType, uuid: UUID, ) -> None: + """Delete a widget. + + Soft-delete a widget by its UUID for a given experience type. + + :param experience_type: The experience type for the widget. + :type experience_type: WidgetExperienceType + :param uuid: The UUID of the widget. + :type uuid: UUID + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["experience_type"] = experience_type + + kwargs["uuid"] = uuid + + return self._delete_widget_endpoint.call_with_http_info(**kwargs) + + def get_widget(self, experience_type: WidgetExperienceType, uuid: UUID, ) -> WidgetResponse: + """Get a widget. + + Retrieve a widget by its UUID for a given experience type. + + :param experience_type: The experience type for the widget. + :type experience_type: WidgetExperienceType + :param uuid: The UUID of the widget. + :type uuid: UUID + :rtype: WidgetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["experience_type"] = experience_type + + kwargs["uuid"] = uuid + + return self._get_widget_endpoint.call_with_http_info(**kwargs) + + def search_widgets(self, experience_type: WidgetExperienceType, *, filter_widget_type: Union[WidgetType, UnsetType]=unset, filter_creator_handle: Union[str, UnsetType]=unset, filter_is_favorited: Union[bool, UnsetType]=unset, filter_title: Union[str, UnsetType]=unset, filter_tags: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, ) -> WidgetListResponse: + """Search widgets. + + Search and list widgets for a given experience type, with filtering, sorting, and pagination. + + **Response meta** carries totals scoped to the current filter: + + * ``filtered_total`` — widgets matching the filter. + * ``created_by_you_total`` — among the matches, how many the current user created. + * ``favorited_by_you_total`` — among the matches, how many the current user has favorited. + * ``created_by_anyone_total`` — total widgets in the experience type, ignoring filters. + + Each returned widget includes ``is_favorited`` reflecting the current user's favorite status. + Favoriting itself is performed through the shared favorites API, not this endpoint. + + :param experience_type: The experience type for the widget. + :type experience_type: WidgetExperienceType + :param filter_widget_type: Filter widgets by widget type. + :type filter_widget_type: WidgetType, optional + :param filter_creator_handle: Filter widgets by the email handle of the creator. + :type filter_creator_handle: str, optional + :param filter_is_favorited: Filter to only widgets favorited by the current user. + :type filter_is_favorited: bool, optional + :param filter_title: Filter widgets by title (substring match). + :type filter_title: str, optional + :param filter_tags: Filter widgets by tags. Format as bracket-delimited CSV, e.g. ``[tag1,tag2]``. + :type filter_tags: str, optional + :param sort: Sort field for the results. + + **title, created_at, modified_at** — both ascending and descending are + supported. Use the bare field name for ascending (e.g. ``sort=title`` ) or prefix + with ``-`` for descending (e.g. ``sort=-modified_at`` ). + + **is_favorited** — returns favorites-first ordering (favorited widgets first, + then the rest). Direction is fixed; the ``-`` prefix is ignored for this field. + :type sort: str, optional + :param page_number: Page number for pagination (0-indexed). + :type page_number: int, optional + :param page_size: Number of widgets per page. + :type page_size: int, optional + :rtype: WidgetListResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["experience_type"] = experience_type + + if filter_widget_type is not unset: + kwargs["filter_widget_type"] = filter_widget_type + + if filter_creator_handle is not unset: + kwargs["filter_creator_handle"] = filter_creator_handle + + if filter_is_favorited is not unset: + kwargs["filter_is_favorited"] = filter_is_favorited + + if filter_title is not unset: + kwargs["filter_title"] = filter_title + + if filter_tags is not unset: + kwargs["filter_tags"] = filter_tags + + if sort is not unset: + kwargs["sort"] = sort + + if page_number is not unset: + kwargs["page_number"] = page_number + + if page_size is not unset: + kwargs["page_size"] = page_size + + return self._search_widgets_endpoint.call_with_http_info(**kwargs) + + def update_widget(self, experience_type: WidgetExperienceType, uuid: UUID, body: CreateOrUpdateWidgetRequest, ) -> WidgetResponse: + """Update a widget. + + Update a widget by its UUID for a given experience type. This performs a full replacement of the widget definition. + + :param experience_type: The experience type for the widget. + :type experience_type: WidgetExperienceType + :param uuid: The UUID of the widget. + :type uuid: UUID + :param body: Widget request body. The ``definition`` object's required fields vary + by ``widget.definition.type`` ; see ``CreateWidget`` above for a complete + worked payload. Update is a full replacement of the widget definition. + :type body: CreateOrUpdateWidgetRequest + :rtype: WidgetResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["experience_type"] = experience_type + + kwargs["uuid"] = uuid + + kwargs["body"] = body + + return self._update_widget_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/api/workflow_automation_api.py b/datadog_api_client/v2/api/workflow_automation_api.py new file mode 100644 index 0000000000..b02f961d1f --- /dev/null +++ b/datadog_api_client/v2/api/workflow_automation_api.py @@ -0,0 +1,553 @@ +# 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 + +import collections +from typing import Any, Dict, List, Union +import warnings + +from datadog_api_client.api_client import ApiClient, Endpoint as _Endpoint +from datadog_api_client.configuration import Configuration +from datadog_api_client.model_utils import ( + date, + datetime, + set_attribute_from_path, + get_attribute_from_path, + file_type, + none_type, + UnsetType, + unset, + UUID, +) +from datadog_api_client.v2.model.list_workflows_response import ListWorkflowsResponse +from datadog_api_client.v2.model.workflow_list_item import WorkflowListItem +from datadog_api_client.v2.model.create_workflow_response import CreateWorkflowResponse +from datadog_api_client.v2.model.create_workflow_request import CreateWorkflowRequest +from datadog_api_client.v2.model.get_workflow_response import GetWorkflowResponse +from datadog_api_client.v2.model.update_workflow_response import UpdateWorkflowResponse +from datadog_api_client.v2.model.update_workflow_request import UpdateWorkflowRequest +from datadog_api_client.v2.model.workflow_list_instances_response import WorkflowListInstancesResponse +from datadog_api_client.v2.model.workflow_instance_create_response import WorkflowInstanceCreateResponse +from datadog_api_client.v2.model.workflow_instance_create_request import WorkflowInstanceCreateRequest +from datadog_api_client.v2.model.worklflow_get_instance_response import WorklflowGetInstanceResponse +from datadog_api_client.v2.model.worklflow_cancel_instance_response import WorklflowCancelInstanceResponse + + +class WorkflowAutomationApi: + """ + Datadog Workflow Automation allows you to automate your end-to-end processes by connecting Datadog with the rest of your tech stack. Build workflows to auto-remediate your alerts, streamline your incident and security processes, and reduce manual toil. Workflow Automation supports over 1,000+ OOTB actions, including AWS, JIRA, ServiceNow, GitHub, and OpenAI. Learn more in our Workflow Automation docs `here `_. + """ + def __init__(self, api_client=None): + if api_client is None: + api_client = ApiClient(Configuration()) + self.api_client = api_client + + self._cancel_workflow_instance_endpoint = _Endpoint( + settings={ + "response_type": (WorklflowCancelInstanceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/workflows/{workflow_id}/instances/{instance_id}/cancel", + "operation_id": "cancel_workflow_instance", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "workflow_id": { + "required": True, + "openapi_types": (str,), + "attribute": "workflow_id", + "location": "path", + }, + "instance_id": { + "required": True, + "openapi_types": (str,), + "attribute": "instance_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._create_workflow_endpoint = _Endpoint( + settings={ + "response_type": (CreateWorkflowResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/workflows", + "operation_id": "create_workflow", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "body": { + "required": True, + "openapi_types": (CreateWorkflowRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._create_workflow_instance_endpoint = _Endpoint( + settings={ + "response_type": (WorkflowInstanceCreateResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/workflows/{workflow_id}/instances", + "operation_id": "create_workflow_instance", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "workflow_id": { + "required": True, + "openapi_types": (str,), + "attribute": "workflow_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (WorkflowInstanceCreateRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + self._delete_workflow_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/workflows/{workflow_id}", + "operation_id": "delete_workflow", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "workflow_id": { + "required": True, + "openapi_types": (str,), + "attribute": "workflow_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + + self._get_workflow_endpoint = _Endpoint( + settings={ + "response_type": (GetWorkflowResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/workflows/{workflow_id}", + "operation_id": "get_workflow", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "workflow_id": { + "required": True, + "openapi_types": (str,), + "attribute": "workflow_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_workflow_instance_endpoint = _Endpoint( + settings={ + "response_type": (WorklflowGetInstanceResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/workflows/{workflow_id}/instances/{instance_id}", + "operation_id": "get_workflow_instance", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "workflow_id": { + "required": True, + "openapi_types": (str,), + "attribute": "workflow_id", + "location": "path", + }, + "instance_id": { + "required": True, + "openapi_types": (str,), + "attribute": "instance_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_workflow_instances_endpoint = _Endpoint( + settings={ + "response_type": (WorkflowListInstancesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/workflows/{workflow_id}/instances", + "operation_id": "list_workflow_instances", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "workflow_id": { + "required": True, + "openapi_types": (str,), + "attribute": "workflow_id", + "location": "path", + }, + "page_size": { + "openapi_types": (int,), + "attribute": "page[size]", + "location": "query", + }, + "page_number": { + "openapi_types": (int,), + "attribute": "page[number]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._list_workflows_endpoint = _Endpoint( + settings={ + "response_type": (ListWorkflowsResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/workflows", + "operation_id": "list_workflows", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "limit": { + "openapi_types": (int,), + "attribute": "limit", + "location": "query", + }, + "page": { + "openapi_types": (int,), + "attribute": "page", + "location": "query", + }, + "sort": { + "openapi_types": (str,), + "attribute": "sort", + "location": "query", + }, + "filter_query": { + "openapi_types": (str,), + "attribute": "filter[query]", + "location": "query", + }, + "filter_trigger_ids": { + "openapi_types": ([str],), + "attribute": "filter[triggerIds]", + "location": "query", + "collection_format": "multi", + }, + "filter_include_unpublished": { + "openapi_types": (bool,), + "attribute": "filter[includeUnpublished]", + "location": "query", + }, + "filter_include_specs": { + "openapi_types": (bool,), + "attribute": "filter[includeSpecs]", + "location": "query", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._update_workflow_endpoint = _Endpoint( + settings={ + "response_type": (UpdateWorkflowResponse,), + "auth": ["apiKeyAuth", "appKeyAuth"], + "endpoint_path": "/api/v2/workflows/{workflow_id}", + "operation_id": "update_workflow", + "http_method": "PATCH", + "version": "v2", + }, + params_map={ + "workflow_id": { + "required": True, + "openapi_types": (str,), + "attribute": "workflow_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (UpdateWorkflowRequest,), + "location": "body", + }, + }, + headers_map={ + "accept": ["application/json"], + "content_type": ["application/json"] + }, + api_client=api_client, + ) + + def cancel_workflow_instance(self, workflow_id: str, instance_id: str, ) -> WorklflowCancelInstanceResponse: + """Cancel a workflow instance. + + Cancels a specific execution of a given workflow. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param workflow_id: The ID of the workflow. + :type workflow_id: str + :param instance_id: The ID of the workflow instance. + :type instance_id: str + :rtype: WorklflowCancelInstanceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["workflow_id"] = workflow_id + + kwargs["instance_id"] = instance_id + + return self._cancel_workflow_instance_endpoint.call_with_http_info(**kwargs) + + def create_workflow(self, body: CreateWorkflowRequest, ) -> CreateWorkflowResponse: + """Create a Workflow. + + Create a new workflow, returning the workflow ID. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :type body: CreateWorkflowRequest + :rtype: CreateWorkflowResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["body"] = body + + return self._create_workflow_endpoint.call_with_http_info(**kwargs) + + def create_workflow_instance(self, workflow_id: str, body: WorkflowInstanceCreateRequest, ) -> WorkflowInstanceCreateResponse: + """Execute a workflow. + + Execute the given workflow. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param workflow_id: The ID of the workflow. + :type workflow_id: str + :type body: WorkflowInstanceCreateRequest + :rtype: WorkflowInstanceCreateResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["workflow_id"] = workflow_id + + kwargs["body"] = body + + return self._create_workflow_instance_endpoint.call_with_http_info(**kwargs) + + def delete_workflow(self, workflow_id: str, ) -> None: + """Delete an existing Workflow. + + Delete a workflow by ID. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param workflow_id: The ID of the workflow. + :type workflow_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["workflow_id"] = workflow_id + + return self._delete_workflow_endpoint.call_with_http_info(**kwargs) + + def get_workflow(self, workflow_id: str, ) -> GetWorkflowResponse: + """Get an existing Workflow. + + Get a workflow by ID. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param workflow_id: The ID of the workflow. + :type workflow_id: str + :rtype: GetWorkflowResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["workflow_id"] = workflow_id + + return self._get_workflow_endpoint.call_with_http_info(**kwargs) + + def get_workflow_instance(self, workflow_id: str, instance_id: str, ) -> WorklflowGetInstanceResponse: + """Get a workflow instance. + + Get a specific execution of a given workflow. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param workflow_id: The ID of the workflow. + :type workflow_id: str + :param instance_id: The ID of the workflow instance. + :type instance_id: str + :rtype: WorklflowGetInstanceResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["workflow_id"] = workflow_id + + kwargs["instance_id"] = instance_id + + return self._get_workflow_instance_endpoint.call_with_http_info(**kwargs) + + def list_workflow_instances(self, workflow_id: str, *, page_size: Union[int, UnsetType]=unset, page_number: Union[int, UnsetType]=unset, ) -> WorkflowListInstancesResponse: + """List workflow instances. + + List all instances of a given workflow. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param workflow_id: The ID of the workflow. + :type workflow_id: str + :param page_size: Number of items to return per page. The maximum allowed value is 100. + :type page_size: int, optional + :param page_number: Specific page number to return. + :type page_number: int, optional + :rtype: WorkflowListInstancesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["workflow_id"] = workflow_id + + if page_size is not unset: + kwargs["page_size"] = page_size + + if page_number is not unset: + kwargs["page_number"] = page_number + + return self._list_workflow_instances_endpoint.call_with_http_info(**kwargs) + + def list_workflows(self, *, limit: Union[int, UnsetType]=unset, page: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, filter_trigger_ids: Union[List[str], UnsetType]=unset, filter_include_unpublished: Union[bool, UnsetType]=unset, filter_include_specs: Union[bool, UnsetType]=unset, ) -> ListWorkflowsResponse: + """List workflows. + + List all workflows in your organization. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param limit: The maximum number of workflows to return per page. + :type limit: int, optional + :param page: The page number to return, starting from 0. + :type page: int, optional + :param sort: The sort order for the returned workflows. Provide a comma-separated list of fields, each optionally prefixed with ``-`` for descending order. Supported fields are ``name`` , ``createdAt`` , ``updatedAt`` , ``creatorName`` , ``ownerName`` , and ``lastExecutedAt``. + :type sort: str, optional + :param filter_query: A search query used to filter the returned workflows. The query performs a case-insensitive substring match against each workflow's name, creator name, and handle. If the query contains a colon (for example, ``team:infra`` ), the query is treated as a ``key:value`` tag filter. + :type filter_query: str, optional + :param filter_trigger_ids: Filters the returned workflows by one or more trigger types, such as ``monitor`` , ``schedule`` , or ``githubWebhook``. To specify the multiple types, repeat this parameter. + :type filter_trigger_ids: [str], optional + :param filter_include_unpublished: Whether to include unpublished workflows in the response. + :type filter_include_unpublished: bool, optional + :param filter_include_specs: Whether to include the full spec of each workflow in the response. When ``false`` (the default), each workflow's ``spec`` is returned as ``null``. + :type filter_include_specs: bool, optional + :rtype: ListWorkflowsResponse + """ + kwargs: Dict[str, Any] = {} + if limit is not unset: + kwargs["limit"] = limit + + if page is not unset: + kwargs["page"] = page + + if sort is not unset: + kwargs["sort"] = sort + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_trigger_ids is not unset: + kwargs["filter_trigger_ids"] = filter_trigger_ids + + if filter_include_unpublished is not unset: + kwargs["filter_include_unpublished"] = filter_include_unpublished + + if filter_include_specs is not unset: + kwargs["filter_include_specs"] = filter_include_specs + + return self._list_workflows_endpoint.call_with_http_info(**kwargs) + + def list_workflows_with_pagination(self, *, limit: Union[int, UnsetType]=unset, page: Union[int, UnsetType]=unset, sort: Union[str, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, filter_trigger_ids: Union[List[str], UnsetType]=unset, filter_include_unpublished: Union[bool, UnsetType]=unset, filter_include_specs: Union[bool, UnsetType]=unset, ) -> collections.abc.Iterable[WorkflowListItem]: + """List workflows. + + Provide a paginated version of :meth:`list_workflows`, returning all items. + + :param limit: The maximum number of workflows to return per page. + :type limit: int, optional + :param page: The page number to return, starting from 0. + :type page: int, optional + :param sort: The sort order for the returned workflows. Provide a comma-separated list of fields, each optionally prefixed with ``-`` for descending order. Supported fields are ``name`` , ``createdAt`` , ``updatedAt`` , ``creatorName`` , ``ownerName`` , and ``lastExecutedAt``. + :type sort: str, optional + :param filter_query: A search query used to filter the returned workflows. The query performs a case-insensitive substring match against each workflow's name, creator name, and handle. If the query contains a colon (for example, ``team:infra`` ), the query is treated as a ``key:value`` tag filter. + :type filter_query: str, optional + :param filter_trigger_ids: Filters the returned workflows by one or more trigger types, such as ``monitor`` , ``schedule`` , or ``githubWebhook``. To specify the multiple types, repeat this parameter. + :type filter_trigger_ids: [str], optional + :param filter_include_unpublished: Whether to include unpublished workflows in the response. + :type filter_include_unpublished: bool, optional + :param filter_include_specs: Whether to include the full spec of each workflow in the response. When ``false`` (the default), each workflow's ``spec`` is returned as ``null``. + :type filter_include_specs: bool, optional + + :return: A generator of paginated results. + :rtype: collections.abc.Iterable[WorkflowListItem] + """ + kwargs: Dict[str, Any] = {} + if limit is not unset: + kwargs["limit"] = limit + + if page is not unset: + kwargs["page"] = page + + if sort is not unset: + kwargs["sort"] = sort + + if filter_query is not unset: + kwargs["filter_query"] = filter_query + + if filter_trigger_ids is not unset: + kwargs["filter_trigger_ids"] = filter_trigger_ids + + if filter_include_unpublished is not unset: + kwargs["filter_include_unpublished"] = filter_include_unpublished + + if filter_include_specs is not unset: + kwargs["filter_include_specs"] = filter_include_specs + + local_page_size = get_attribute_from_path(kwargs, "limit", 50) + endpoint = self._list_workflows_endpoint + set_attribute_from_path(kwargs, "limit", local_page_size, endpoint.params_map) + pagination = { + "limit_value": local_page_size, + "results_path": "data", + "page_param": "page", + "page_start": 0, + "endpoint": endpoint, + "kwargs": kwargs, + } + return endpoint.call_with_http_info_paginated(pagination) + + def update_workflow(self, workflow_id: str, body: UpdateWorkflowRequest, ) -> UpdateWorkflowResponse: + """Update an existing Workflow. + + Update a workflow by ID. This API requires a `registered application key `_. Alternatively, you can configure these permissions `in the UI `_. + + :param workflow_id: The ID of the workflow. + :type workflow_id: str + :type body: UpdateWorkflowRequest + :rtype: UpdateWorkflowResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["workflow_id"] = workflow_id + + kwargs["body"] = body + + return self._update_workflow_endpoint.call_with_http_info(**kwargs) diff --git a/datadog_api_client/v2/apis/__init__.py b/datadog_api_client/v2/apis/__init__.py new file mode 100644 index 0000000000..a366b308a7 --- /dev/null +++ b/datadog_api_client/v2/apis/__init__.py @@ -0,0 +1,285 @@ + +from datadog_api_client.v2.api.api_management_api import APIManagementApi +from datadog_api_client.v2.api.apm_api import APMApi +from datadog_api_client.v2.api.apm_retention_filters_api import APMRetentionFiltersApi +from datadog_api_client.v2.api.apm_trace_api import APMTraceApi +from datadog_api_client.v2.api.aws_integration_api import AWSIntegrationApi +from datadog_api_client.v2.api.aws_logs_integration_api import AWSLogsIntegrationApi +from datadog_api_client.v2.api.action_connection_api import ActionConnectionApi +from datadog_api_client.v2.api.actions_datastores_api import ActionsDatastoresApi +from datadog_api_client.v2.api.agentless_scanning_api import AgentlessScanningApi +from datadog_api_client.v2.api.annotations_api import AnnotationsApi +from datadog_api_client.v2.api.app_builder_api import AppBuilderApi +from datadog_api_client.v2.api.application_security_api import ApplicationSecurityApi +from datadog_api_client.v2.api.audit_api import AuditApi +from datadog_api_client.v2.api.authn_mappings_api import AuthNMappingsApi +from datadog_api_client.v2.api.bits_ai_api import BitsAIApi +from datadog_api_client.v2.api.ci_visibility_git_hub_accounts_api import CIVisibilityGitHubAccountsApi +from datadog_api_client.v2.api.ci_visibility_pipelines_api import CIVisibilityPipelinesApi +from datadog_api_client.v2.api.ci_visibility_tests_api import CIVisibilityTestsApi +from datadog_api_client.v2.api.csm_agents_api import CSMAgentsApi +from datadog_api_client.v2.api.csm_coverage_analysis_api import CSMCoverageAnalysisApi +from datadog_api_client.v2.api.csm_ownership_api import CSMOwnershipApi +from datadog_api_client.v2.api.csm_settings_api import CSMSettingsApi +from datadog_api_client.v2.api.csm_threats_api import CSMThreatsApi +from datadog_api_client.v2.api.case_management_api import CaseManagementApi +from datadog_api_client.v2.api.case_management_attribute_api import CaseManagementAttributeApi +from datadog_api_client.v2.api.case_management_type_api import CaseManagementTypeApi +from datadog_api_client.v2.api.change_management_api import ChangeManagementApi +from datadog_api_client.v2.api.cloud_authentication_api import CloudAuthenticationApi +from datadog_api_client.v2.api.cloud_cost_management_api import CloudCostManagementApi +from datadog_api_client.v2.api.cloud_network_monitoring_api import CloudNetworkMonitoringApi +from datadog_api_client.v2.api.cloudflare_integration_api import CloudflareIntegrationApi +from datadog_api_client.v2.api.code_coverage_api import CodeCoverageApi +from datadog_api_client.v2.api.compliance_api import ComplianceApi +from datadog_api_client.v2.api.confluent_cloud_api import ConfluentCloudApi +from datadog_api_client.v2.api.container_images_api import ContainerImagesApi +from datadog_api_client.v2.api.containers_api import ContainersApi +from datadog_api_client.v2.api.customer_org_api import CustomerOrgApi +from datadog_api_client.v2.api.ddsql_api import DDSQLApi +from datadog_api_client.v2.api.dora_metrics_api import DORAMetricsApi +from datadog_api_client.v2.api.dashboard_lists_api import DashboardListsApi +from datadog_api_client.v2.api.dashboard_secure_embed_api import DashboardSecureEmbedApi +from datadog_api_client.v2.api.dashboard_sharing_api import DashboardSharingApi +from datadog_api_client.v2.api.dashboards_api import DashboardsApi +from datadog_api_client.v2.api.data_deletion_api import DataDeletionApi +from datadog_api_client.v2.api.data_observability_api import DataObservabilityApi +from datadog_api_client.v2.api.datasets_api import DatasetsApi +from datadog_api_client.v2.api.deployment_gates_api import DeploymentGatesApi +from datadog_api_client.v2.api.domain_allowlist_api import DomainAllowlistApi +from datadog_api_client.v2.api.downtimes_api import DowntimesApi +from datadog_api_client.v2.api.entity_integration_configs_api import EntityIntegrationConfigsApi +from datadog_api_client.v2.api.entity_risk_scores_api import EntityRiskScoresApi +from datadog_api_client.v2.api.error_tracking_api import ErrorTrackingApi +from datadog_api_client.v2.api.events_api import EventsApi +from datadog_api_client.v2.api.fastly_integration_api import FastlyIntegrationApi +from datadog_api_client.v2.api.feature_flags_api import FeatureFlagsApi +from datadog_api_client.v2.api.fleet_automation_api import FleetAutomationApi +from datadog_api_client.v2.api.forms_api import FormsApi +from datadog_api_client.v2.api.gcp_integration_api import GCPIntegrationApi +from datadog_api_client.v2.api.google_chat_integration_api import GoogleChatIntegrationApi +from datadog_api_client.v2.api.governance_console_api import GovernanceConsoleApi +from datadog_api_client.v2.api.high_availability_multi_region_api import HighAvailabilityMultiRegionApi +from datadog_api_client.v2.api.ip_allowlist_api import IPAllowlistApi +from datadog_api_client.v2.api.identity_providers_api import IdentityProvidersApi +from datadog_api_client.v2.api.incidents_api import IncidentsApi +from datadog_api_client.v2.api.integrations_api import IntegrationsApi +from datadog_api_client.v2.api.jira_integration_api import JiraIntegrationApi +from datadog_api_client.v2.api.key_management_api import KeyManagementApi +from datadog_api_client.v2.api.llm_observability_api import LLMObservabilityApi +from datadog_api_client.v2.api.logs_api import LogsApi +from datadog_api_client.v2.api.logs_archives_api import LogsArchivesApi +from datadog_api_client.v2.api.logs_custom_destinations_api import LogsCustomDestinationsApi +from datadog_api_client.v2.api.logs_metrics_api import LogsMetricsApi +from datadog_api_client.v2.api.logs_restriction_queries_api import LogsRestrictionQueriesApi +from datadog_api_client.v2.api.metrics_api import MetricsApi +from datadog_api_client.v2.api.microsoft_teams_integration_api import MicrosoftTeamsIntegrationApi +from datadog_api_client.v2.api.model_lab_api_api import ModelLabAPIApi +from datadog_api_client.v2.api.monitors_api import MonitorsApi +from datadog_api_client.v2.api.network_device_monitoring_api import NetworkDeviceMonitoringApi +from datadog_api_client.v2.api.network_health_insights_api import NetworkHealthInsightsApi +from datadog_api_client.v2.api.o_auth2_client_public_api import OAuth2ClientPublicApi +from datadog_api_client.v2.api.oci_integration_api import OCIIntegrationApi +from datadog_api_client.v2.api.observability_pipelines_api import ObservabilityPipelinesApi +from datadog_api_client.v2.api.okta_integration_api import OktaIntegrationApi +from datadog_api_client.v2.api.on_call_api import OnCallApi +from datadog_api_client.v2.api.on_call_paging_api import OnCallPagingApi +from datadog_api_client.v2.api.opsgenie_integration_api import OpsgenieIntegrationApi +from datadog_api_client.v2.api.org_authorized_clients_api import OrgAuthorizedClientsApi +from datadog_api_client.v2.api.org_connections_api import OrgConnectionsApi +from datadog_api_client.v2.api.org_groups_api import OrgGroupsApi +from datadog_api_client.v2.api.organizations_api import OrganizationsApi +from datadog_api_client.v2.api.powerpack_api import PowerpackApi +from datadog_api_client.v2.api.processes_api import ProcessesApi +from datadog_api_client.v2.api.product_analytics_api import ProductAnalyticsApi +from datadog_api_client.v2.api.rum_api import RUMApi +from datadog_api_client.v2.api.rum_config_api import RUMConfigApi +from datadog_api_client.v2.api.rum_insights_api import RUMInsightsApi +from datadog_api_client.v2.api.rum_operations_api import RUMOperationsApi +from datadog_api_client.v2.api.rum_remote_config_api import RUMRemoteConfigApi +from datadog_api_client.v2.api.reference_tables_api import ReferenceTablesApi +from datadog_api_client.v2.api.report_schedules_api import ReportSchedulesApi +from datadog_api_client.v2.api.reporting_and_sharing_api import ReportingAndSharingApi +from datadog_api_client.v2.api.restriction_policies_api import RestrictionPoliciesApi +from datadog_api_client.v2.api.roles_api import RolesApi +from datadog_api_client.v2.api.rum_audience_management_api import RumAudienceManagementApi +from datadog_api_client.v2.api.rum_metrics_api import RumMetricsApi +from datadog_api_client.v2.api.rum_replay_heatmaps_api import RumReplayHeatmapsApi +from datadog_api_client.v2.api.rum_replay_playlists_api import RumReplayPlaylistsApi +from datadog_api_client.v2.api.rum_replay_sessions_api import RumReplaySessionsApi +from datadog_api_client.v2.api.rum_replay_viewership_api import RumReplayViewershipApi +from datadog_api_client.v2.api.rum_retention_filters_api import RumRetentionFiltersApi +from datadog_api_client.v2.api.salesforce_integration_api import SalesforceIntegrationApi +from datadog_api_client.v2.api.scorecards_api import ScorecardsApi +from datadog_api_client.v2.api.seats_api import SeatsApi +from datadog_api_client.v2.api.security_monitoring_api import SecurityMonitoringApi +from datadog_api_client.v2.api.sensitive_data_scanner_api import SensitiveDataScannerApi +from datadog_api_client.v2.api.service_accounts_api import ServiceAccountsApi +from datadog_api_client.v2.api.service_definition_api import ServiceDefinitionApi +from datadog_api_client.v2.api.service_level_objectives_api import ServiceLevelObjectivesApi +from datadog_api_client.v2.api.service_now_integration_api import ServiceNowIntegrationApi +from datadog_api_client.v2.api.slack_integration_api import SlackIntegrationApi +from datadog_api_client.v2.api.software_catalog_api import SoftwareCatalogApi +from datadog_api_client.v2.api.spa_api import SpaApi +from datadog_api_client.v2.api.spans_api import SpansApi +from datadog_api_client.v2.api.spans_metrics_api import SpansMetricsApi +from datadog_api_client.v2.api.static_analysis_api import StaticAnalysisApi +from datadog_api_client.v2.api.status_pages_api import StatusPagesApi +from datadog_api_client.v2.api.statuspage_integration_api import StatuspageIntegrationApi +from datadog_api_client.v2.api.stegadography_api import StegadographyApi +from datadog_api_client.v2.api.storage_management_api import StorageManagementApi +from datadog_api_client.v2.api.synthetics_api import SyntheticsApi +from datadog_api_client.v2.api.tag_policies_api import TagPoliciesApi +from datadog_api_client.v2.api.teams_api import TeamsApi +from datadog_api_client.v2.api.test_optimization_api import TestOptimizationApi +from datadog_api_client.v2.api.usage_metering_api import UsageMeteringApi +from datadog_api_client.v2.api.user_authorized_clients_api import UserAuthorizedClientsApi +from datadog_api_client.v2.api.users_api import UsersApi +from datadog_api_client.v2.api.web_integrations_api import WebIntegrationsApi +from datadog_api_client.v2.api.webhooks_integration_api import WebhooksIntegrationApi +from datadog_api_client.v2.api.widgets_api import WidgetsApi +from datadog_api_client.v2.api.workflow_automation_api import WorkflowAutomationApi + + +__all__ = [ + "APIManagementApi", + "APMApi", + "APMRetentionFiltersApi", + "APMTraceApi", + "AWSIntegrationApi", + "AWSLogsIntegrationApi", + "ActionConnectionApi", + "ActionsDatastoresApi", + "AgentlessScanningApi", + "AnnotationsApi", + "AppBuilderApi", + "ApplicationSecurityApi", + "AuditApi", + "AuthNMappingsApi", + "BitsAIApi", + "CIVisibilityGitHubAccountsApi", + "CIVisibilityPipelinesApi", + "CIVisibilityTestsApi", + "CSMAgentsApi", + "CSMCoverageAnalysisApi", + "CSMOwnershipApi", + "CSMSettingsApi", + "CSMThreatsApi", + "CaseManagementApi", + "CaseManagementAttributeApi", + "CaseManagementTypeApi", + "ChangeManagementApi", + "CloudAuthenticationApi", + "CloudCostManagementApi", + "CloudNetworkMonitoringApi", + "CloudflareIntegrationApi", + "CodeCoverageApi", + "ComplianceApi", + "ConfluentCloudApi", + "ContainerImagesApi", + "ContainersApi", + "CustomerOrgApi", + "DDSQLApi", + "DORAMetricsApi", + "DashboardListsApi", + "DashboardSecureEmbedApi", + "DashboardSharingApi", + "DashboardsApi", + "DataDeletionApi", + "DataObservabilityApi", + "DatasetsApi", + "DeploymentGatesApi", + "DomainAllowlistApi", + "DowntimesApi", + "EntityIntegrationConfigsApi", + "EntityRiskScoresApi", + "ErrorTrackingApi", + "EventsApi", + "FastlyIntegrationApi", + "FeatureFlagsApi", + "FleetAutomationApi", + "FormsApi", + "GCPIntegrationApi", + "GoogleChatIntegrationApi", + "GovernanceConsoleApi", + "HighAvailabilityMultiRegionApi", + "IPAllowlistApi", + "IdentityProvidersApi", + "IncidentsApi", + "IntegrationsApi", + "JiraIntegrationApi", + "KeyManagementApi", + "LLMObservabilityApi", + "LogsApi", + "LogsArchivesApi", + "LogsCustomDestinationsApi", + "LogsMetricsApi", + "LogsRestrictionQueriesApi", + "MetricsApi", + "MicrosoftTeamsIntegrationApi", + "ModelLabAPIApi", + "MonitorsApi", + "NetworkDeviceMonitoringApi", + "NetworkHealthInsightsApi", + "OAuth2ClientPublicApi", + "OCIIntegrationApi", + "ObservabilityPipelinesApi", + "OktaIntegrationApi", + "OnCallApi", + "OnCallPagingApi", + "OpsgenieIntegrationApi", + "OrgAuthorizedClientsApi", + "OrgConnectionsApi", + "OrgGroupsApi", + "OrganizationsApi", + "PowerpackApi", + "ProcessesApi", + "ProductAnalyticsApi", + "RUMApi", + "RUMConfigApi", + "RUMInsightsApi", + "RUMOperationsApi", + "RUMRemoteConfigApi", + "ReferenceTablesApi", + "ReportSchedulesApi", + "ReportingAndSharingApi", + "RestrictionPoliciesApi", + "RolesApi", + "RumAudienceManagementApi", + "RumMetricsApi", + "RumReplayHeatmapsApi", + "RumReplayPlaylistsApi", + "RumReplaySessionsApi", + "RumReplayViewershipApi", + "RumRetentionFiltersApi", + "SalesforceIntegrationApi", + "ScorecardsApi", + "SeatsApi", + "SecurityMonitoringApi", + "SensitiveDataScannerApi", + "ServiceAccountsApi", + "ServiceDefinitionApi", + "ServiceLevelObjectivesApi", + "ServiceNowIntegrationApi", + "SlackIntegrationApi", + "SoftwareCatalogApi", + "SpaApi", + "SpansApi", + "SpansMetricsApi", + "StaticAnalysisApi", + "StatusPagesApi", + "StatuspageIntegrationApi", + "StegadographyApi", + "StorageManagementApi", + "SyntheticsApi", + "TagPoliciesApi", + "TeamsApi", + "TestOptimizationApi", + "UsageMeteringApi", + "UserAuthorizedClientsApi", + "UsersApi", + "WebIntegrationsApi", + "WebhooksIntegrationApi", + "WidgetsApi", + "WorkflowAutomationApi", +] \ No newline at end of file diff --git a/datadog_api_client/v2/model/__init__.py b/datadog_api_client/v2/model/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/datadog_api_client/v2/model/access_token_list_item.py b/datadog_api_client/v2/model/access_token_list_item.py new file mode 100644 index 0000000000..abba1fbd14 --- /dev/null +++ b/datadog_api_client/v2/model/access_token_list_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.personal_access_token_attributes import PersonalAccessTokenAttributes + from datadog_api_client.v2.model.access_token_list_item_relationships import AccessTokenListItemRelationships + from datadog_api_client.v2.model.access_tokens_type import AccessTokensType + +class AccessTokenListItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.personal_access_token_attributes import PersonalAccessTokenAttributes + from datadog_api_client.v2.model.access_token_list_item_relationships import AccessTokenListItemRelationships + from datadog_api_client.v2.model.access_tokens_type import AccessTokensType + return { + "attributes": (PersonalAccessTokenAttributes,), + "id": (str,), + "relationships": (AccessTokenListItemRelationships,), + "type": (AccessTokensType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[PersonalAccessTokenAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[AccessTokenListItemRelationships, UnsetType]=unset, type: Union[AccessTokensType, UnsetType]=unset, **kwargs): + """ + An access token entry returned by the personal access tokens list endpoint. May represent either a personal or a service access token. + + :param attributes: Attributes of an access token. + :type attributes: PersonalAccessTokenAttributes, optional + + :param id: ID of the access token. + :type id: str, optional + + :param relationships: Resources related to the access token entry in the mixed list response. + :type relationships: AccessTokenListItemRelationships, optional + + :param type: Resource type returned by the access tokens list endpoint. Includes both personal and service access tokens. + :type type: AccessTokensType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/access_token_list_item_relationships.py b/datadog_api_client/v2/model/access_token_list_item_relationships.py new file mode 100644 index 0000000000..3fc7bd1506 --- /dev/null +++ b/datadog_api_client/v2/model/access_token_list_item_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_access_token_owner import RelationshipToAccessTokenOwner + +class AccessTokenListItemRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_access_token_owner import RelationshipToAccessTokenOwner + return { + "owned_by": (RelationshipToAccessTokenOwner,), + } + attribute_map = { + "owned_by": "owned_by", + } + + def __init__(self_, owned_by: Union[RelationshipToAccessTokenOwner, UnsetType]=unset, **kwargs): + """ + Resources related to the access token entry in the mixed list response. + + :param owned_by: Relationship to the access token's owner. + :type owned_by: RelationshipToAccessTokenOwner, optional + """ + if owned_by is not unset: + kwargs["owned_by"] = owned_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/access_token_owner_type.py b/datadog_api_client/v2/model/access_token_owner_type.py new file mode 100644 index 0000000000..2b53f4bac4 --- /dev/null +++ b/datadog_api_client/v2/model/access_token_owner_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AccessTokenOwnerType(ModelSimple): + """ + Owner resource type. Either a user or a service account. + + :param value: Must be one of ["users", "service_account"]. + :type value: str + """ + + allowed_values = { + "users", + "service_account", + } + USERS: ClassVar["AccessTokenOwnerType"] + SERVICE_ACCOUNT: ClassVar["AccessTokenOwnerType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AccessTokenOwnerType.USERS = AccessTokenOwnerType("users") +AccessTokenOwnerType.SERVICE_ACCOUNT = AccessTokenOwnerType("service_account") diff --git a/datadog_api_client/v2/model/access_tokens_type.py b/datadog_api_client/v2/model/access_tokens_type.py new file mode 100644 index 0000000000..911c79ba3f --- /dev/null +++ b/datadog_api_client/v2/model/access_tokens_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AccessTokensType(ModelSimple): + """ + Resource type returned by the access tokens list endpoint. Includes both personal and service access tokens. + + :param value: Must be one of ["personal_access_tokens", "service_access_tokens"]. + :type value: str + """ + + allowed_values = { + "personal_access_tokens", + "service_access_tokens", + } + PERSONAL_ACCESS_TOKENS: ClassVar["AccessTokensType"] + SERVICE_ACCESS_TOKENS: ClassVar["AccessTokensType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AccessTokensType.PERSONAL_ACCESS_TOKENS = AccessTokensType("personal_access_tokens") +AccessTokensType.SERVICE_ACCESS_TOKENS = AccessTokensType("service_access_tokens") diff --git a/datadog_api_client/v2/model/account_filtering_config.py b/datadog_api_client/v2/model/account_filtering_config.py new file mode 100644 index 0000000000..db472965e2 --- /dev/null +++ b/datadog_api_client/v2/model/account_filtering_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AccountFilteringConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "excluded_accounts": ([str],), + "include_new_accounts": (bool, none_type), + "included_accounts": ([str],), + } + attribute_map = { + "excluded_accounts": "excluded_accounts", + "include_new_accounts": "include_new_accounts", + "included_accounts": "included_accounts", + } + + def __init__(self_, excluded_accounts: Union[List[str], UnsetType]=unset, include_new_accounts: Union[bool, none_type, UnsetType]=unset, included_accounts: Union[List[str], UnsetType]=unset, **kwargs): + """ + The account filtering configuration. + + :param excluded_accounts: The AWS account IDs to be excluded from your billing dataset. This field is used when ``include_new_accounts`` is ``true``. + :type excluded_accounts: [str], optional + + :param include_new_accounts: Whether or not to automatically include new member accounts by default in your billing dataset. + :type include_new_accounts: bool, none_type, optional + + :param included_accounts: The AWS account IDs to be included in your billing dataset. This field is used when ``include_new_accounts`` is ``false``. + :type included_accounts: [str], optional + """ + if excluded_accounts is not unset: + kwargs["excluded_accounts"] = excluded_accounts + if include_new_accounts is not unset: + kwargs["include_new_accounts"] = include_new_accounts + if included_accounts is not unset: + kwargs["included_accounts"] = included_accounts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/account_filters.py b/datadog_api_client/v2/model/account_filters.py new file mode 100644 index 0000000000..e3809430bc --- /dev/null +++ b/datadog_api_client/v2/model/account_filters.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.account_filters_attributes import AccountFiltersAttributes + from datadog_api_client.v2.model.account_filters_type import AccountFiltersType + +class AccountFilters(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.account_filters_attributes import AccountFiltersAttributes + from datadog_api_client.v2.model.account_filters_type import AccountFiltersType + return { + "attributes": (AccountFiltersAttributes,), + "id": (str,), + "type": (AccountFiltersType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AccountFiltersAttributes, type: AccountFiltersType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The account filters for a cloud account. + + :param attributes: Attributes for the account filters of a cloud account. + :type attributes: AccountFiltersAttributes + + :param id: The ID of the cloud account. + :type id: str, optional + + :param type: Type of account filters. + :type type: AccountFiltersType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/account_filters_attributes.py b/datadog_api_client/v2/model/account_filters_attributes.py new file mode 100644 index 0000000000..0034578941 --- /dev/null +++ b/datadog_api_client/v2/model/account_filters_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + +class AccountFiltersAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + return { + "account_filters": (AccountFilteringConfig,), + "account_id": (str,), + "cloud": (str,), + } + attribute_map = { + "account_filters": "account_filters", + "account_id": "account_id", + "cloud": "cloud", + } + + def __init__(self_, account_filters: Union[AccountFilteringConfig, UnsetType]=unset, account_id: Union[str, UnsetType]=unset, cloud: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for the account filters of a cloud account. + + :param account_filters: The account filtering configuration. + :type account_filters: AccountFilteringConfig, optional + + :param account_id: The cloud account ID. + :type account_id: str, optional + + :param cloud: The cloud provider of the account, for example ``aws`` , ``aws_cur2`` , or ``oci``. + :type cloud: str, optional + """ + if account_filters is not unset: + kwargs["account_filters"] = account_filters + if account_id is not unset: + kwargs["account_id"] = account_id + if cloud is not unset: + kwargs["cloud"] = cloud + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/account_filters_patch_data.py b/datadog_api_client/v2/model/account_filters_patch_data.py new file mode 100644 index 0000000000..a8b48ad5f8 --- /dev/null +++ b/datadog_api_client/v2/model/account_filters_patch_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.account_filters_patch_request_attributes import AccountFiltersPatchRequestAttributes + from datadog_api_client.v2.model.account_filters_patch_request_type import AccountFiltersPatchRequestType + +class AccountFiltersPatchData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.account_filters_patch_request_attributes import AccountFiltersPatchRequestAttributes + from datadog_api_client.v2.model.account_filters_patch_request_type import AccountFiltersPatchRequestType + return { + "attributes": (AccountFiltersPatchRequestAttributes,), + "type": (AccountFiltersPatchRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AccountFiltersPatchRequestAttributes, type: AccountFiltersPatchRequestType, **kwargs): + """ + Account filters patch data. + + :param attributes: Attributes for an account filters patch request. + :type attributes: AccountFiltersPatchRequestAttributes + + :param type: Type of account filters patch request. + :type type: AccountFiltersPatchRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/account_filters_patch_request.py b/datadog_api_client/v2/model/account_filters_patch_request.py new file mode 100644 index 0000000000..b23b073c43 --- /dev/null +++ b/datadog_api_client/v2/model/account_filters_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.account_filters_patch_data import AccountFiltersPatchData + +class AccountFiltersPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.account_filters_patch_data import AccountFiltersPatchData + return { + "data": (AccountFiltersPatchData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AccountFiltersPatchData, **kwargs): + """ + Account filters patch request. + + :param data: Account filters patch data. + :type data: AccountFiltersPatchData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/account_filters_patch_request_attributes.py b/datadog_api_client/v2/model/account_filters_patch_request_attributes.py new file mode 100644 index 0000000000..53ca31b7ed --- /dev/null +++ b/datadog_api_client/v2/model/account_filters_patch_request_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + +class AccountFiltersPatchRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + return { + "account_filters": (AccountFilteringConfig,), + } + attribute_map = { + "account_filters": "account_filters", + } + + def __init__(self_, account_filters: AccountFilteringConfig, **kwargs): + """ + Attributes for an account filters patch request. + + :param account_filters: The account filtering configuration. + :type account_filters: AccountFilteringConfig + """ + super().__init__(kwargs) + + + self_.account_filters = account_filters diff --git a/datadog_api_client/v2/model/account_filters_patch_request_type.py b/datadog_api_client/v2/model/account_filters_patch_request_type.py new file mode 100644 index 0000000000..10ede138da --- /dev/null +++ b/datadog_api_client/v2/model/account_filters_patch_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AccountFiltersPatchRequestType(ModelSimple): + """ + Type of account filters patch request. + + :param value: If omitted defaults to "account_filters_patch_request". Must be one of ["account_filters_patch_request"]. + :type value: str + """ + + allowed_values = { + "account_filters_patch_request", + } + ACCOUNT_FILTERS_PATCH_REQUEST: ClassVar["AccountFiltersPatchRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AccountFiltersPatchRequestType.ACCOUNT_FILTERS_PATCH_REQUEST = AccountFiltersPatchRequestType("account_filters_patch_request") diff --git a/datadog_api_client/v2/model/account_filters_response.py b/datadog_api_client/v2/model/account_filters_response.py new file mode 100644 index 0000000000..20988dedae --- /dev/null +++ b/datadog_api_client/v2/model/account_filters_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.account_filters import AccountFilters + +class AccountFiltersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.account_filters import AccountFilters + return { + "data": (AccountFilters,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AccountFilters, UnsetType]=unset, **kwargs): + """ + Response containing the account filters for a cloud account. + + :param data: The account filters for a cloud account. + :type data: AccountFilters, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/account_filters_type.py b/datadog_api_client/v2/model/account_filters_type.py new file mode 100644 index 0000000000..8e49f74e53 --- /dev/null +++ b/datadog_api_client/v2/model/account_filters_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AccountFiltersType(ModelSimple): + """ + Type of account filters. + + :param value: If omitted defaults to "account_filters". Must be one of ["account_filters"]. + :type value: str + """ + + allowed_values = { + "account_filters", + } + ACCOUNT_FILTERS: ClassVar["AccountFiltersType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AccountFiltersType.ACCOUNT_FILTERS = AccountFiltersType("account_filters") diff --git a/datadog_api_client/v2/model/action_connection_attributes.py b/datadog_api_client/v2/model/action_connection_attributes.py new file mode 100644 index 0000000000..14e8dadc9e --- /dev/null +++ b/datadog_api_client/v2/model/action_connection_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_connection_integration import ActionConnectionIntegration + from datadog_api_client.v2.model.aws_integration import AWSIntegration + from datadog_api_client.v2.model.anthropic_integration import AnthropicIntegration + from datadog_api_client.v2.model.asana_integration import AsanaIntegration + from datadog_api_client.v2.model.azure_integration import AzureIntegration + from datadog_api_client.v2.model.circle_ci_integration import CircleCIIntegration + from datadog_api_client.v2.model.clickup_integration import ClickupIntegration + from datadog_api_client.v2.model.cloudflare_integration import CloudflareIntegration + from datadog_api_client.v2.model.config_cat_integration import ConfigCatIntegration + from datadog_api_client.v2.model.datadog_integration import DatadogIntegration + from datadog_api_client.v2.model.fastly_integration import FastlyIntegration + from datadog_api_client.v2.model.freshservice_integration import FreshserviceIntegration + from datadog_api_client.v2.model.gcp_integration import GCPIntegration + from datadog_api_client.v2.model.gemini_integration import GeminiIntegration + from datadog_api_client.v2.model.gitlab_integration import GitlabIntegration + from datadog_api_client.v2.model.grey_noise_integration import GreyNoiseIntegration + from datadog_api_client.v2.model.http_integration import HTTPIntegration + from datadog_api_client.v2.model.launch_darkly_integration import LaunchDarklyIntegration + from datadog_api_client.v2.model.notion_integration import NotionIntegration + from datadog_api_client.v2.model.okta_integration import OktaIntegration + from datadog_api_client.v2.model.open_ai_integration import OpenAIIntegration + from datadog_api_client.v2.model.service_now_integration import ServiceNowIntegration + from datadog_api_client.v2.model.split_integration import SplitIntegration + from datadog_api_client.v2.model.statsig_integration import StatsigIntegration + from datadog_api_client.v2.model.virus_total_integration import VirusTotalIntegration + +class ActionConnectionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_connection_integration import ActionConnectionIntegration + return { + "integration": (ActionConnectionIntegration,), + "name": (str,), + } + attribute_map = { + "integration": "integration", + "name": "name", + } + + def __init__(self_, integration: Union[ActionConnectionIntegration, AWSIntegration, AnthropicIntegration, AsanaIntegration, AzureIntegration, CircleCIIntegration, ClickupIntegration, CloudflareIntegration, ConfigCatIntegration, DatadogIntegration, FastlyIntegration, FreshserviceIntegration, GCPIntegration, GeminiIntegration, GitlabIntegration, GreyNoiseIntegration, HTTPIntegration, LaunchDarklyIntegration, NotionIntegration, OktaIntegration, OpenAIIntegration, ServiceNowIntegration, SplitIntegration, StatsigIntegration, VirusTotalIntegration], name: str, **kwargs): + """ + The definition of ``ActionConnectionAttributes`` object. + + :param integration: The definition of ``ActionConnectionIntegration`` object. + :type integration: ActionConnectionIntegration + + :param name: Name of the connection + :type name: str + """ + super().__init__(kwargs) + + + self_.integration = integration + self_.name = name diff --git a/datadog_api_client/v2/model/action_connection_attributes_update.py b/datadog_api_client/v2/model/action_connection_attributes_update.py new file mode 100644 index 0000000000..87431610b4 --- /dev/null +++ b/datadog_api_client/v2/model/action_connection_attributes_update.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_connection_integration_update import ActionConnectionIntegrationUpdate + from datadog_api_client.v2.model.aws_integration_update import AWSIntegrationUpdate + from datadog_api_client.v2.model.anthropic_integration_update import AnthropicIntegrationUpdate + from datadog_api_client.v2.model.asana_integration_update import AsanaIntegrationUpdate + from datadog_api_client.v2.model.azure_integration_update import AzureIntegrationUpdate + from datadog_api_client.v2.model.circle_ci_integration_update import CircleCIIntegrationUpdate + from datadog_api_client.v2.model.clickup_integration_update import ClickupIntegrationUpdate + from datadog_api_client.v2.model.cloudflare_integration_update import CloudflareIntegrationUpdate + from datadog_api_client.v2.model.config_cat_integration_update import ConfigCatIntegrationUpdate + from datadog_api_client.v2.model.datadog_integration_update import DatadogIntegrationUpdate + from datadog_api_client.v2.model.fastly_integration_update import FastlyIntegrationUpdate + from datadog_api_client.v2.model.freshservice_integration_update import FreshserviceIntegrationUpdate + from datadog_api_client.v2.model.gcp_integration_update import GCPIntegrationUpdate + from datadog_api_client.v2.model.gemini_integration_update import GeminiIntegrationUpdate + from datadog_api_client.v2.model.gitlab_integration_update import GitlabIntegrationUpdate + from datadog_api_client.v2.model.grey_noise_integration_update import GreyNoiseIntegrationUpdate + from datadog_api_client.v2.model.http_integration_update import HTTPIntegrationUpdate + from datadog_api_client.v2.model.launch_darkly_integration_update import LaunchDarklyIntegrationUpdate + from datadog_api_client.v2.model.notion_integration_update import NotionIntegrationUpdate + from datadog_api_client.v2.model.okta_integration_update import OktaIntegrationUpdate + from datadog_api_client.v2.model.open_ai_integration_update import OpenAIIntegrationUpdate + from datadog_api_client.v2.model.service_now_integration_update import ServiceNowIntegrationUpdate + from datadog_api_client.v2.model.split_integration_update import SplitIntegrationUpdate + from datadog_api_client.v2.model.statsig_integration_update import StatsigIntegrationUpdate + from datadog_api_client.v2.model.virus_total_integration_update import VirusTotalIntegrationUpdate + +class ActionConnectionAttributesUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_connection_integration_update import ActionConnectionIntegrationUpdate + return { + "integration": (ActionConnectionIntegrationUpdate,), + "name": (str,), + } + attribute_map = { + "integration": "integration", + "name": "name", + } + + def __init__(self_, integration: Union[ActionConnectionIntegrationUpdate, AWSIntegrationUpdate, AnthropicIntegrationUpdate, AsanaIntegrationUpdate, AzureIntegrationUpdate, CircleCIIntegrationUpdate, ClickupIntegrationUpdate, CloudflareIntegrationUpdate, ConfigCatIntegrationUpdate, DatadogIntegrationUpdate, FastlyIntegrationUpdate, FreshserviceIntegrationUpdate, GCPIntegrationUpdate, GeminiIntegrationUpdate, GitlabIntegrationUpdate, GreyNoiseIntegrationUpdate, HTTPIntegrationUpdate, LaunchDarklyIntegrationUpdate, NotionIntegrationUpdate, OktaIntegrationUpdate, OpenAIIntegrationUpdate, ServiceNowIntegrationUpdate, SplitIntegrationUpdate, StatsigIntegrationUpdate, VirusTotalIntegrationUpdate, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``ActionConnectionAttributesUpdate`` object. + + :param integration: The definition of ``ActionConnectionIntegrationUpdate`` object. + :type integration: ActionConnectionIntegrationUpdate, optional + + :param name: Name of the connection + :type name: str, optional + """ + if integration is not unset: + kwargs["integration"] = integration + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/action_connection_data.py b/datadog_api_client/v2/model/action_connection_data.py new file mode 100644 index 0000000000..a0da93ee68 --- /dev/null +++ b/datadog_api_client/v2/model/action_connection_data.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_connection_attributes import ActionConnectionAttributes + from datadog_api_client.v2.model.action_connection_data_type import ActionConnectionDataType + from datadog_api_client.v2.model.aws_integration import AWSIntegration + from datadog_api_client.v2.model.anthropic_integration import AnthropicIntegration + from datadog_api_client.v2.model.asana_integration import AsanaIntegration + from datadog_api_client.v2.model.azure_integration import AzureIntegration + from datadog_api_client.v2.model.circle_ci_integration import CircleCIIntegration + from datadog_api_client.v2.model.clickup_integration import ClickupIntegration + from datadog_api_client.v2.model.cloudflare_integration import CloudflareIntegration + from datadog_api_client.v2.model.config_cat_integration import ConfigCatIntegration + from datadog_api_client.v2.model.datadog_integration import DatadogIntegration + from datadog_api_client.v2.model.fastly_integration import FastlyIntegration + from datadog_api_client.v2.model.freshservice_integration import FreshserviceIntegration + from datadog_api_client.v2.model.gcp_integration import GCPIntegration + from datadog_api_client.v2.model.gemini_integration import GeminiIntegration + from datadog_api_client.v2.model.gitlab_integration import GitlabIntegration + from datadog_api_client.v2.model.grey_noise_integration import GreyNoiseIntegration + from datadog_api_client.v2.model.http_integration import HTTPIntegration + from datadog_api_client.v2.model.launch_darkly_integration import LaunchDarklyIntegration + from datadog_api_client.v2.model.notion_integration import NotionIntegration + from datadog_api_client.v2.model.okta_integration import OktaIntegration + from datadog_api_client.v2.model.open_ai_integration import OpenAIIntegration + from datadog_api_client.v2.model.service_now_integration import ServiceNowIntegration + from datadog_api_client.v2.model.split_integration import SplitIntegration + from datadog_api_client.v2.model.statsig_integration import StatsigIntegration + from datadog_api_client.v2.model.virus_total_integration import VirusTotalIntegration + +class ActionConnectionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_connection_attributes import ActionConnectionAttributes + from datadog_api_client.v2.model.action_connection_data_type import ActionConnectionDataType + return { + "attributes": (ActionConnectionAttributes,), + "id": (str,), + "type": (ActionConnectionDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: ActionConnectionAttributes, type: ActionConnectionDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data related to the connection. + + :param attributes: The definition of ``ActionConnectionAttributes`` object. + :type attributes: ActionConnectionAttributes + + :param id: The connection identifier + :type id: str, optional + + :param type: The definition of ``ActionConnectionDataType`` object. + :type type: ActionConnectionDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/action_connection_data_type.py b/datadog_api_client/v2/model/action_connection_data_type.py new file mode 100644 index 0000000000..9f95874a7d --- /dev/null +++ b/datadog_api_client/v2/model/action_connection_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ActionConnectionDataType(ModelSimple): + """ + The definition of `ActionConnectionDataType` object. + + :param value: If omitted defaults to "action_connection". Must be one of ["action_connection"]. + :type value: str + """ + + allowed_values = { + "action_connection", + } + ACTION_CONNECTION: ClassVar["ActionConnectionDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ActionConnectionDataType.ACTION_CONNECTION = ActionConnectionDataType("action_connection") diff --git a/datadog_api_client/v2/model/action_connection_data_update.py b/datadog_api_client/v2/model/action_connection_data_update.py new file mode 100644 index 0000000000..ce6f4cd602 --- /dev/null +++ b/datadog_api_client/v2/model/action_connection_data_update.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_connection_attributes_update import ActionConnectionAttributesUpdate + from datadog_api_client.v2.model.action_connection_data_type import ActionConnectionDataType + from datadog_api_client.v2.model.aws_integration_update import AWSIntegrationUpdate + from datadog_api_client.v2.model.anthropic_integration_update import AnthropicIntegrationUpdate + from datadog_api_client.v2.model.asana_integration_update import AsanaIntegrationUpdate + from datadog_api_client.v2.model.azure_integration_update import AzureIntegrationUpdate + from datadog_api_client.v2.model.circle_ci_integration_update import CircleCIIntegrationUpdate + from datadog_api_client.v2.model.clickup_integration_update import ClickupIntegrationUpdate + from datadog_api_client.v2.model.cloudflare_integration_update import CloudflareIntegrationUpdate + from datadog_api_client.v2.model.config_cat_integration_update import ConfigCatIntegrationUpdate + from datadog_api_client.v2.model.datadog_integration_update import DatadogIntegrationUpdate + from datadog_api_client.v2.model.fastly_integration_update import FastlyIntegrationUpdate + from datadog_api_client.v2.model.freshservice_integration_update import FreshserviceIntegrationUpdate + from datadog_api_client.v2.model.gcp_integration_update import GCPIntegrationUpdate + from datadog_api_client.v2.model.gemini_integration_update import GeminiIntegrationUpdate + from datadog_api_client.v2.model.gitlab_integration_update import GitlabIntegrationUpdate + from datadog_api_client.v2.model.grey_noise_integration_update import GreyNoiseIntegrationUpdate + from datadog_api_client.v2.model.http_integration_update import HTTPIntegrationUpdate + from datadog_api_client.v2.model.launch_darkly_integration_update import LaunchDarklyIntegrationUpdate + from datadog_api_client.v2.model.notion_integration_update import NotionIntegrationUpdate + from datadog_api_client.v2.model.okta_integration_update import OktaIntegrationUpdate + from datadog_api_client.v2.model.open_ai_integration_update import OpenAIIntegrationUpdate + from datadog_api_client.v2.model.service_now_integration_update import ServiceNowIntegrationUpdate + from datadog_api_client.v2.model.split_integration_update import SplitIntegrationUpdate + from datadog_api_client.v2.model.statsig_integration_update import StatsigIntegrationUpdate + from datadog_api_client.v2.model.virus_total_integration_update import VirusTotalIntegrationUpdate + +class ActionConnectionDataUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_connection_attributes_update import ActionConnectionAttributesUpdate + from datadog_api_client.v2.model.action_connection_data_type import ActionConnectionDataType + return { + "attributes": (ActionConnectionAttributesUpdate,), + "type": (ActionConnectionDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ActionConnectionAttributesUpdate, type: ActionConnectionDataType, **kwargs): + """ + Data related to the connection update. + + :param attributes: The definition of ``ActionConnectionAttributesUpdate`` object. + :type attributes: ActionConnectionAttributesUpdate + + :param type: The definition of ``ActionConnectionDataType`` object. + :type type: ActionConnectionDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/action_connection_integration.py b/datadog_api_client/v2/model/action_connection_integration.py new file mode 100644 index 0000000000..9695a713a2 --- /dev/null +++ b/datadog_api_client/v2/model/action_connection_integration.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionConnectionIntegration(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of ``ActionConnectionIntegration`` object. + + :param credentials: The definition of `AWSCredentials` object. + :type credentials: AWSCredentials + + :param type: The definition of `AWSIntegrationType` object. + :type type: AWSIntegrationType + + :param base_url: Base HTTP url for the integration + :type base_url: str + """ + 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.aws_integration import AWSIntegration + from datadog_api_client.v2.model.anthropic_integration import AnthropicIntegration + from datadog_api_client.v2.model.asana_integration import AsanaIntegration + from datadog_api_client.v2.model.azure_integration import AzureIntegration + from datadog_api_client.v2.model.circle_ci_integration import CircleCIIntegration + from datadog_api_client.v2.model.clickup_integration import ClickupIntegration + from datadog_api_client.v2.model.cloudflare_integration import CloudflareIntegration + from datadog_api_client.v2.model.config_cat_integration import ConfigCatIntegration + from datadog_api_client.v2.model.datadog_integration import DatadogIntegration + from datadog_api_client.v2.model.fastly_integration import FastlyIntegration + from datadog_api_client.v2.model.freshservice_integration import FreshserviceIntegration + from datadog_api_client.v2.model.gcp_integration import GCPIntegration + from datadog_api_client.v2.model.gemini_integration import GeminiIntegration + from datadog_api_client.v2.model.gitlab_integration import GitlabIntegration + from datadog_api_client.v2.model.grey_noise_integration import GreyNoiseIntegration + from datadog_api_client.v2.model.http_integration import HTTPIntegration + from datadog_api_client.v2.model.launch_darkly_integration import LaunchDarklyIntegration + from datadog_api_client.v2.model.notion_integration import NotionIntegration + from datadog_api_client.v2.model.okta_integration import OktaIntegration + from datadog_api_client.v2.model.open_ai_integration import OpenAIIntegration + from datadog_api_client.v2.model.service_now_integration import ServiceNowIntegration + from datadog_api_client.v2.model.split_integration import SplitIntegration + from datadog_api_client.v2.model.statsig_integration import StatsigIntegration + from datadog_api_client.v2.model.virus_total_integration import VirusTotalIntegration + return { + "oneOf": [ + AWSIntegration, + AnthropicIntegration, + AsanaIntegration, + AzureIntegration, + CircleCIIntegration, + ClickupIntegration, + CloudflareIntegration, + ConfigCatIntegration, + DatadogIntegration, + FastlyIntegration, + FreshserviceIntegration, + GCPIntegration, + GeminiIntegration, + GitlabIntegration, + GreyNoiseIntegration, + HTTPIntegration, + LaunchDarklyIntegration, + NotionIntegration, + OktaIntegration, + OpenAIIntegration, + ServiceNowIntegration, + SplitIntegration, + StatsigIntegration, + VirusTotalIntegration, + ], + } diff --git a/datadog_api_client/v2/model/action_connection_integration_update.py b/datadog_api_client/v2/model/action_connection_integration_update.py new file mode 100644 index 0000000000..c43d3f1885 --- /dev/null +++ b/datadog_api_client/v2/model/action_connection_integration_update.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionConnectionIntegrationUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of ``ActionConnectionIntegrationUpdate`` object. + + :param credentials: The definition of `AWSCredentialsUpdate` object. + :type credentials: AWSCredentialsUpdate, optional + + :param type: The definition of `AWSIntegrationType` object. + :type type: AWSIntegrationType + + :param base_url: Base HTTP url for the integration + :type base_url: str, 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.aws_integration_update import AWSIntegrationUpdate + from datadog_api_client.v2.model.anthropic_integration_update import AnthropicIntegrationUpdate + from datadog_api_client.v2.model.asana_integration_update import AsanaIntegrationUpdate + from datadog_api_client.v2.model.azure_integration_update import AzureIntegrationUpdate + from datadog_api_client.v2.model.circle_ci_integration_update import CircleCIIntegrationUpdate + from datadog_api_client.v2.model.clickup_integration_update import ClickupIntegrationUpdate + from datadog_api_client.v2.model.cloudflare_integration_update import CloudflareIntegrationUpdate + from datadog_api_client.v2.model.config_cat_integration_update import ConfigCatIntegrationUpdate + from datadog_api_client.v2.model.datadog_integration_update import DatadogIntegrationUpdate + from datadog_api_client.v2.model.fastly_integration_update import FastlyIntegrationUpdate + from datadog_api_client.v2.model.freshservice_integration_update import FreshserviceIntegrationUpdate + from datadog_api_client.v2.model.gcp_integration_update import GCPIntegrationUpdate + from datadog_api_client.v2.model.gemini_integration_update import GeminiIntegrationUpdate + from datadog_api_client.v2.model.gitlab_integration_update import GitlabIntegrationUpdate + from datadog_api_client.v2.model.grey_noise_integration_update import GreyNoiseIntegrationUpdate + from datadog_api_client.v2.model.http_integration_update import HTTPIntegrationUpdate + from datadog_api_client.v2.model.launch_darkly_integration_update import LaunchDarklyIntegrationUpdate + from datadog_api_client.v2.model.notion_integration_update import NotionIntegrationUpdate + from datadog_api_client.v2.model.okta_integration_update import OktaIntegrationUpdate + from datadog_api_client.v2.model.open_ai_integration_update import OpenAIIntegrationUpdate + from datadog_api_client.v2.model.service_now_integration_update import ServiceNowIntegrationUpdate + from datadog_api_client.v2.model.split_integration_update import SplitIntegrationUpdate + from datadog_api_client.v2.model.statsig_integration_update import StatsigIntegrationUpdate + from datadog_api_client.v2.model.virus_total_integration_update import VirusTotalIntegrationUpdate + return { + "oneOf": [ + AWSIntegrationUpdate, + AnthropicIntegrationUpdate, + AsanaIntegrationUpdate, + AzureIntegrationUpdate, + CircleCIIntegrationUpdate, + ClickupIntegrationUpdate, + CloudflareIntegrationUpdate, + ConfigCatIntegrationUpdate, + DatadogIntegrationUpdate, + FastlyIntegrationUpdate, + FreshserviceIntegrationUpdate, + GCPIntegrationUpdate, + GeminiIntegrationUpdate, + GitlabIntegrationUpdate, + GreyNoiseIntegrationUpdate, + HTTPIntegrationUpdate, + LaunchDarklyIntegrationUpdate, + NotionIntegrationUpdate, + OktaIntegrationUpdate, + OpenAIIntegrationUpdate, + ServiceNowIntegrationUpdate, + SplitIntegrationUpdate, + StatsigIntegrationUpdate, + VirusTotalIntegrationUpdate, + ], + } diff --git a/datadog_api_client/v2/model/action_query.py b/datadog_api_client/v2/model/action_query.py new file mode 100644 index 0000000000..ebcdc3aecf --- /dev/null +++ b/datadog_api_client/v2/model/action_query.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_builder_event import AppBuilderEvent + from datadog_api_client.v2.model.action_query_properties import ActionQueryProperties + from datadog_api_client.v2.model.action_query_type import ActionQueryType + from datadog_api_client.v2.model.action_query_mocked_outputs_object import ActionQueryMockedOutputsObject + from datadog_api_client.v2.model.action_query_spec_object import ActionQuerySpecObject + +class ActionQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_builder_event import AppBuilderEvent + from datadog_api_client.v2.model.action_query_properties import ActionQueryProperties + from datadog_api_client.v2.model.action_query_type import ActionQueryType + return { + "events": ([AppBuilderEvent],), + "id": (UUID,), + "name": (str,), + "properties": (ActionQueryProperties,), + "type": (ActionQueryType,), + } + attribute_map = { + "events": "events", + "id": "id", + "name": "name", + "properties": "properties", + "type": "type", + } + + def __init__(self_, id: UUID, name: str, properties: ActionQueryProperties, type: ActionQueryType, events: Union[List[AppBuilderEvent], UnsetType]=unset, **kwargs): + """ + An action query. This query type is used to trigger an action, such as sending a HTTP request. + + :param events: Events to listen for downstream of the action query. + :type events: [AppBuilderEvent], optional + + :param id: The ID of the action query. + :type id: UUID + + :param name: A unique identifier for this action query. This name is also used to access the query's result throughout the app. + :type name: str + + :param properties: The properties of the action query. + :type properties: ActionQueryProperties + + :param type: The action query type. + :type type: ActionQueryType + """ + if events is not unset: + kwargs["events"] = events + super().__init__(kwargs) + + + self_.id = id + self_.name = name + self_.properties = properties + self_.type = type diff --git a/datadog_api_client/v2/model/action_query_condition.py b/datadog_api_client/v2/model/action_query_condition.py new file mode 100644 index 0000000000..56d5e55ea6 --- /dev/null +++ b/datadog_api_client/v2/model/action_query_condition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQueryCondition(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Whether to run this query. If specified, the query will only run if this condition evaluates to ``true`` in JavaScript and all other conditions are also met. + """ + 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 + return { + "oneOf": [ + bool, + str, + ], + } diff --git a/datadog_api_client/v2/model/action_query_debounce_in_ms.py b/datadog_api_client/v2/model/action_query_debounce_in_ms.py new file mode 100644 index 0000000000..7fd12fc298 --- /dev/null +++ b/datadog_api_client/v2/model/action_query_debounce_in_ms.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQueryDebounceInMs(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The minimum time in milliseconds that must pass before the query can be triggered again. This is useful for preventing accidental double-clicks from triggering the query multiple times. + """ + 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 + return { + "oneOf": [ + float, + str, + ], + } diff --git a/datadog_api_client/v2/model/action_query_mocked_outputs.py b/datadog_api_client/v2/model/action_query_mocked_outputs.py new file mode 100644 index 0000000000..98b20e7535 --- /dev/null +++ b/datadog_api_client/v2/model/action_query_mocked_outputs.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQueryMockedOutputs(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The mocked outputs of the action query. This is useful for testing the app without actually running the action. + + :param enabled: Whether to enable the mocked outputs for testing. + :type enabled: ActionQueryMockedOutputsEnabled + + :param outputs: The mocked outputs of the action query, serialized as JSON. + :type outputs: str, 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.action_query_mocked_outputs_object import ActionQueryMockedOutputsObject + return { + "oneOf": [ + str, + ActionQueryMockedOutputsObject, + ], + } diff --git a/datadog_api_client/v2/model/action_query_mocked_outputs_enabled.py b/datadog_api_client/v2/model/action_query_mocked_outputs_enabled.py new file mode 100644 index 0000000000..cb0024a3f3 --- /dev/null +++ b/datadog_api_client/v2/model/action_query_mocked_outputs_enabled.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQueryMockedOutputsEnabled(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Whether to enable the mocked outputs for testing. + """ + 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 + return { + "oneOf": [ + bool, + str, + ], + } diff --git a/datadog_api_client/v2/model/action_query_mocked_outputs_object.py b/datadog_api_client/v2/model/action_query_mocked_outputs_object.py new file mode 100644 index 0000000000..7df4e9bbce --- /dev/null +++ b/datadog_api_client/v2/model/action_query_mocked_outputs_object.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_query_mocked_outputs_enabled import ActionQueryMockedOutputsEnabled + +class ActionQueryMockedOutputsObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_query_mocked_outputs_enabled import ActionQueryMockedOutputsEnabled + return { + "enabled": (ActionQueryMockedOutputsEnabled,), + "outputs": (str,), + } + attribute_map = { + "enabled": "enabled", + "outputs": "outputs", + } + + def __init__(self_, enabled: Union[ActionQueryMockedOutputsEnabled, bool, str], outputs: Union[str, UnsetType]=unset, **kwargs): + """ + The mocked outputs of the action query. + + :param enabled: Whether to enable the mocked outputs for testing. + :type enabled: ActionQueryMockedOutputsEnabled + + :param outputs: The mocked outputs of the action query, serialized as JSON. + :type outputs: str, optional + """ + if outputs is not unset: + kwargs["outputs"] = outputs + super().__init__(kwargs) + + + self_.enabled = enabled diff --git a/datadog_api_client/v2/model/action_query_only_trigger_manually.py b/datadog_api_client/v2/model/action_query_only_trigger_manually.py new file mode 100644 index 0000000000..b372c859cf --- /dev/null +++ b/datadog_api_client/v2/model/action_query_only_trigger_manually.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQueryOnlyTriggerManually(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Determines when this query is executed. If set to ``false`` , the query will run when the app loads and whenever any query arguments change. If set to ``true`` , the query will only run when manually triggered from elsewhere in the app. + """ + 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 + return { + "oneOf": [ + bool, + str, + ], + } diff --git a/datadog_api_client/v2/model/action_query_polling_interval_in_ms.py b/datadog_api_client/v2/model/action_query_polling_interval_in_ms.py new file mode 100644 index 0000000000..7d85ae3646 --- /dev/null +++ b/datadog_api_client/v2/model/action_query_polling_interval_in_ms.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQueryPollingIntervalInMs(ModelComposed): + + + + def __init__(self, **kwargs): + """ + If specified, the app will poll the query at the specified interval in milliseconds. The minimum polling interval is 15 seconds. The query will only poll when the app's browser tab is active. + """ + 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 + return { + "oneOf": [ + float, + str, + ], + } diff --git a/datadog_api_client/v2/model/action_query_properties.py b/datadog_api_client/v2/model/action_query_properties.py new file mode 100644 index 0000000000..7dd2a36b5c --- /dev/null +++ b/datadog_api_client/v2/model/action_query_properties.py @@ -0,0 +1,120 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_query_condition import ActionQueryCondition + from datadog_api_client.v2.model.action_query_debounce_in_ms import ActionQueryDebounceInMs + from datadog_api_client.v2.model.action_query_mocked_outputs import ActionQueryMockedOutputs + from datadog_api_client.v2.model.action_query_only_trigger_manually import ActionQueryOnlyTriggerManually + from datadog_api_client.v2.model.action_query_polling_interval_in_ms import ActionQueryPollingIntervalInMs + from datadog_api_client.v2.model.action_query_requires_confirmation import ActionQueryRequiresConfirmation + from datadog_api_client.v2.model.action_query_show_toast_on_error import ActionQueryShowToastOnError + from datadog_api_client.v2.model.action_query_spec import ActionQuerySpec + from datadog_api_client.v2.model.action_query_mocked_outputs_object import ActionQueryMockedOutputsObject + from datadog_api_client.v2.model.action_query_spec_object import ActionQuerySpecObject + +class ActionQueryProperties(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_query_condition import ActionQueryCondition + from datadog_api_client.v2.model.action_query_debounce_in_ms import ActionQueryDebounceInMs + from datadog_api_client.v2.model.action_query_mocked_outputs import ActionQueryMockedOutputs + from datadog_api_client.v2.model.action_query_only_trigger_manually import ActionQueryOnlyTriggerManually + from datadog_api_client.v2.model.action_query_polling_interval_in_ms import ActionQueryPollingIntervalInMs + from datadog_api_client.v2.model.action_query_requires_confirmation import ActionQueryRequiresConfirmation + from datadog_api_client.v2.model.action_query_show_toast_on_error import ActionQueryShowToastOnError + from datadog_api_client.v2.model.action_query_spec import ActionQuerySpec + return { + "condition": (ActionQueryCondition,), + "debounce_in_ms": (ActionQueryDebounceInMs,), + "mocked_outputs": (ActionQueryMockedOutputs,), + "only_trigger_manually": (ActionQueryOnlyTriggerManually,), + "outputs": (str,), + "polling_interval_in_ms": (ActionQueryPollingIntervalInMs,), + "requires_confirmation": (ActionQueryRequiresConfirmation,), + "show_toast_on_error": (ActionQueryShowToastOnError,), + "spec": (ActionQuerySpec,), + } + attribute_map = { + "condition": "condition", + "debounce_in_ms": "debounceInMs", + "mocked_outputs": "mockedOutputs", + "only_trigger_manually": "onlyTriggerManually", + "outputs": "outputs", + "polling_interval_in_ms": "pollingIntervalInMs", + "requires_confirmation": "requiresConfirmation", + "show_toast_on_error": "showToastOnError", + "spec": "spec", + } + + def __init__(self_, spec: Union[ActionQuerySpec, str, ActionQuerySpecObject], condition: Union[ActionQueryCondition, bool, str, UnsetType]=unset, debounce_in_ms: Union[ActionQueryDebounceInMs, float, str, UnsetType]=unset, mocked_outputs: Union[ActionQueryMockedOutputs, str, ActionQueryMockedOutputsObject, UnsetType]=unset, only_trigger_manually: Union[ActionQueryOnlyTriggerManually, bool, str, UnsetType]=unset, outputs: Union[str, UnsetType]=unset, polling_interval_in_ms: Union[ActionQueryPollingIntervalInMs, float, str, UnsetType]=unset, requires_confirmation: Union[ActionQueryRequiresConfirmation, bool, str, UnsetType]=unset, show_toast_on_error: Union[ActionQueryShowToastOnError, bool, str, UnsetType]=unset, **kwargs): + """ + The properties of the action query. + + :param condition: Whether to run this query. If specified, the query will only run if this condition evaluates to ``true`` in JavaScript and all other conditions are also met. + :type condition: ActionQueryCondition, optional + + :param debounce_in_ms: The minimum time in milliseconds that must pass before the query can be triggered again. This is useful for preventing accidental double-clicks from triggering the query multiple times. + :type debounce_in_ms: ActionQueryDebounceInMs, optional + + :param mocked_outputs: The mocked outputs of the action query. This is useful for testing the app without actually running the action. + :type mocked_outputs: ActionQueryMockedOutputs, optional + + :param only_trigger_manually: Determines when this query is executed. If set to ``false`` , the query will run when the app loads and whenever any query arguments change. If set to ``true`` , the query will only run when manually triggered from elsewhere in the app. + :type only_trigger_manually: ActionQueryOnlyTriggerManually, optional + + :param outputs: The post-query transformation function, which is a JavaScript function that changes the query's ``.outputs`` property after the query's execution. + :type outputs: str, optional + + :param polling_interval_in_ms: If specified, the app will poll the query at the specified interval in milliseconds. The minimum polling interval is 15 seconds. The query will only poll when the app's browser tab is active. + :type polling_interval_in_ms: ActionQueryPollingIntervalInMs, optional + + :param requires_confirmation: Whether to prompt the user to confirm this query before it runs. + :type requires_confirmation: ActionQueryRequiresConfirmation, optional + + :param show_toast_on_error: Whether to display a toast to the user when the query returns an error. + :type show_toast_on_error: ActionQueryShowToastOnError, optional + + :param spec: The definition of the action query. + :type spec: ActionQuerySpec + """ + if condition is not unset: + kwargs["condition"] = condition + if debounce_in_ms is not unset: + kwargs["debounce_in_ms"] = debounce_in_ms + if mocked_outputs is not unset: + kwargs["mocked_outputs"] = mocked_outputs + if only_trigger_manually is not unset: + kwargs["only_trigger_manually"] = only_trigger_manually + if outputs is not unset: + kwargs["outputs"] = outputs + if polling_interval_in_ms is not unset: + kwargs["polling_interval_in_ms"] = polling_interval_in_ms + if requires_confirmation is not unset: + kwargs["requires_confirmation"] = requires_confirmation + if show_toast_on_error is not unset: + kwargs["show_toast_on_error"] = show_toast_on_error + super().__init__(kwargs) + + + self_.spec = spec diff --git a/datadog_api_client/v2/model/action_query_requires_confirmation.py b/datadog_api_client/v2/model/action_query_requires_confirmation.py new file mode 100644 index 0000000000..399b9233e1 --- /dev/null +++ b/datadog_api_client/v2/model/action_query_requires_confirmation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQueryRequiresConfirmation(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Whether to prompt the user to confirm this query before it runs. + """ + 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 + return { + "oneOf": [ + bool, + str, + ], + } diff --git a/datadog_api_client/v2/model/action_query_show_toast_on_error.py b/datadog_api_client/v2/model/action_query_show_toast_on_error.py new file mode 100644 index 0000000000..f6ca96f39f --- /dev/null +++ b/datadog_api_client/v2/model/action_query_show_toast_on_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQueryShowToastOnError(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Whether to display a toast to the user when the query returns an error. + """ + 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 + return { + "oneOf": [ + bool, + str, + ], + } diff --git a/datadog_api_client/v2/model/action_query_spec.py b/datadog_api_client/v2/model/action_query_spec.py new file mode 100644 index 0000000000..677c15517b --- /dev/null +++ b/datadog_api_client/v2/model/action_query_spec.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQuerySpec(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the action query. + + :param connection_group: The connection group to use for an action query. + :type connection_group: ActionQuerySpecConnectionGroup, optional + + :param connection_id: The ID of the custom connection to use for this action query. + :type connection_id: str, optional + + :param fqn: The fully qualified name of the action type. + :type fqn: str + + :param inputs: The inputs to the action query. These are the values that are passed to the action when it is triggered. + :type inputs: ActionQuerySpecInputs, 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.action_query_spec_object import ActionQuerySpecObject + return { + "oneOf": [ + str, + ActionQuerySpecObject, + ], + } diff --git a/datadog_api_client/v2/model/action_query_spec_connection_group.py b/datadog_api_client/v2/model/action_query_spec_connection_group.py new file mode 100644 index 0000000000..cafcd0b87b --- /dev/null +++ b/datadog_api_client/v2/model/action_query_spec_connection_group.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQuerySpecConnectionGroup(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (UUID,), + "tags": ([str],), + } + attribute_map = { + "id": "id", + "tags": "tags", + } + + def __init__(self_, id: Union[UUID, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The connection group to use for an action query. + + :param id: The ID of the connection group. + :type id: UUID, optional + + :param tags: The tags of the connection group. + :type tags: [str], optional + """ + if id is not unset: + kwargs["id"] = id + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/action_query_spec_input.py b/datadog_api_client/v2/model/action_query_spec_input.py new file mode 100644 index 0000000000..f8079461ff --- /dev/null +++ b/datadog_api_client/v2/model/action_query_spec_input.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQuerySpecInput(ModelNormal): + + def __init__(self_, **kwargs): + """ + The inputs to the action query. See the `Actions Catalog `_ for more detail on each action and its inputs. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/action_query_spec_inputs.py b/datadog_api_client/v2/model/action_query_spec_inputs.py new file mode 100644 index 0000000000..915250ad30 --- /dev/null +++ b/datadog_api_client/v2/model/action_query_spec_inputs.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActionQuerySpecInputs(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The inputs to the action query. These are the values that are passed to the action when it is triggered. + """ + 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.action_query_spec_input import ActionQuerySpecInput + return { + "oneOf": [ + str, + ActionQuerySpecInput, + ], + } diff --git a/datadog_api_client/v2/model/action_query_spec_object.py b/datadog_api_client/v2/model/action_query_spec_object.py new file mode 100644 index 0000000000..c4d7596eb3 --- /dev/null +++ b/datadog_api_client/v2/model/action_query_spec_object.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_query_spec_connection_group import ActionQuerySpecConnectionGroup + from datadog_api_client.v2.model.action_query_spec_inputs import ActionQuerySpecInputs + from datadog_api_client.v2.model.action_query_spec_input import ActionQuerySpecInput + +class ActionQuerySpecObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_query_spec_connection_group import ActionQuerySpecConnectionGroup + from datadog_api_client.v2.model.action_query_spec_inputs import ActionQuerySpecInputs + return { + "connection_group": (ActionQuerySpecConnectionGroup,), + "connection_id": (str,), + "fqn": (str,), + "inputs": (ActionQuerySpecInputs,), + } + attribute_map = { + "connection_group": "connectionGroup", + "connection_id": "connectionId", + "fqn": "fqn", + "inputs": "inputs", + } + + def __init__(self_, fqn: str, connection_group: Union[ActionQuerySpecConnectionGroup, UnsetType]=unset, connection_id: Union[str, UnsetType]=unset, inputs: Union[ActionQuerySpecInputs, str, ActionQuerySpecInput, UnsetType]=unset, **kwargs): + """ + The action query spec object. + + :param connection_group: The connection group to use for an action query. + :type connection_group: ActionQuerySpecConnectionGroup, optional + + :param connection_id: The ID of the custom connection to use for this action query. + :type connection_id: str, optional + + :param fqn: The fully qualified name of the action type. + :type fqn: str + + :param inputs: The inputs to the action query. These are the values that are passed to the action when it is triggered. + :type inputs: ActionQuerySpecInputs, optional + """ + if connection_group is not unset: + kwargs["connection_group"] = connection_group + if connection_id is not unset: + kwargs["connection_id"] = connection_id + if inputs is not unset: + kwargs["inputs"] = inputs + super().__init__(kwargs) + + + self_.fqn = fqn diff --git a/datadog_api_client/v2/model/action_query_type.py b/datadog_api_client/v2/model/action_query_type.py new file mode 100644 index 0000000000..44e213bd62 --- /dev/null +++ b/datadog_api_client/v2/model/action_query_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ActionQueryType(ModelSimple): + """ + The action query type. + + :param value: If omitted defaults to "action". Must be one of ["action"]. + :type value: str + """ + + allowed_values = { + "action", + } + ACTION: ClassVar["ActionQueryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ActionQueryType.ACTION = ActionQueryType("action") diff --git a/datadog_api_client/v2/model/active_billing_dimensions_attributes.py b/datadog_api_client/v2/model/active_billing_dimensions_attributes.py new file mode 100644 index 0000000000..78353d7429 --- /dev/null +++ b/datadog_api_client/v2/model/active_billing_dimensions_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ActiveBillingDimensionsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "month": (datetime,), + "values": ([str],), + } + attribute_map = { + "month": "month", + "values": "values", + } + + def __init__(self_, month: Union[datetime, UnsetType]=unset, values: Union[List[str], UnsetType]=unset, **kwargs): + """ + List of active billing dimensions. + + :param month: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]``. + :type month: datetime, optional + + :param values: List of active billing dimensions. Example: ``[infra_host, apm_host, serverless_infra]``. + :type values: [str], optional + """ + if month is not unset: + kwargs["month"] = month + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/active_billing_dimensions_body.py b/datadog_api_client/v2/model/active_billing_dimensions_body.py new file mode 100644 index 0000000000..e67b4471cf --- /dev/null +++ b/datadog_api_client/v2/model/active_billing_dimensions_body.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.active_billing_dimensions_attributes import ActiveBillingDimensionsAttributes + from datadog_api_client.v2.model.active_billing_dimensions_type import ActiveBillingDimensionsType + +class ActiveBillingDimensionsBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.active_billing_dimensions_attributes import ActiveBillingDimensionsAttributes + from datadog_api_client.v2.model.active_billing_dimensions_type import ActiveBillingDimensionsType + return { + "attributes": (ActiveBillingDimensionsAttributes,), + "id": (str,), + "type": (ActiveBillingDimensionsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ActiveBillingDimensionsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ActiveBillingDimensionsType, UnsetType]=unset, **kwargs): + """ + Active billing dimensions data. + + :param attributes: List of active billing dimensions. + :type attributes: ActiveBillingDimensionsAttributes, optional + + :param id: Unique ID of the response. + :type id: str, optional + + :param type: Type of active billing dimensions data. + :type type: ActiveBillingDimensionsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/active_billing_dimensions_response.py b/datadog_api_client/v2/model/active_billing_dimensions_response.py new file mode 100644 index 0000000000..4033f6cc21 --- /dev/null +++ b/datadog_api_client/v2/model/active_billing_dimensions_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.active_billing_dimensions_body import ActiveBillingDimensionsBody + +class ActiveBillingDimensionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.active_billing_dimensions_body import ActiveBillingDimensionsBody + return { + "data": (ActiveBillingDimensionsBody,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ActiveBillingDimensionsBody, UnsetType]=unset, **kwargs): + """ + Active billing dimensions response. + + :param data: Active billing dimensions data. + :type data: ActiveBillingDimensionsBody, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/active_billing_dimensions_type.py b/datadog_api_client/v2/model/active_billing_dimensions_type.py new file mode 100644 index 0000000000..6a483fdc1b --- /dev/null +++ b/datadog_api_client/v2/model/active_billing_dimensions_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ActiveBillingDimensionsType(ModelSimple): + """ + Type of active billing dimensions data. + + :param value: If omitted defaults to "billing_dimensions". Must be one of ["billing_dimensions"]. + :type value: str + """ + + allowed_values = { + "billing_dimensions", + } + BILLING_DIMENSIONS: ClassVar["ActiveBillingDimensionsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ActiveBillingDimensionsType.BILLING_DIMENSIONS = ActiveBillingDimensionsType("billing_dimensions") diff --git a/datadog_api_client/v2/model/add_member_team_request.py b/datadog_api_client/v2/model/add_member_team_request.py new file mode 100644 index 0000000000..3ce2af6055 --- /dev/null +++ b/datadog_api_client/v2/model/add_member_team_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.member_team import MemberTeam + +class AddMemberTeamRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.member_team import MemberTeam + return { + "data": (MemberTeam,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MemberTeam, **kwargs): + """ + Request to add a member team to super team's hierarchy + + :param data: A member team + :type data: MemberTeam + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/advisory.py b/datadog_api_client/v2/model/advisory.py new file mode 100644 index 0000000000..d39fc18af1 --- /dev/null +++ b/datadog_api_client/v2/model/advisory.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Advisory(ModelNormal): + @cached_property + def openapi_types(_): + return { + "base_severity": (str,), + "id": (str,), + "severity": (str,), + } + attribute_map = { + "base_severity": "base_severity", + "id": "id", + "severity": "severity", + } + + def __init__(self_, base_severity: str, id: str, severity: Union[str, UnsetType]=unset, **kwargs): + """ + Advisory. + + :param base_severity: Advisory base severity. + :type base_severity: str + + :param id: Advisory id. + :type id: str + + :param severity: Advisory Datadog severity. + :type severity: str, optional + """ + if severity is not unset: + kwargs["severity"] = severity + super().__init__(kwargs) + + + self_.base_severity = base_severity + self_.id = id diff --git a/datadog_api_client/v2/model/agent_trigger.py b/datadog_api_client/v2/model/agent_trigger.py new file mode 100644 index 0000000000..822cf79b6d --- /dev/null +++ b/datadog_api_client/v2/model/agent_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + +class AgentTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + return { + "rate_limit": (TriggerRateLimit,), + } + attribute_map = { + "rate_limit": "rateLimit", + } + + def __init__(self_, rate_limit: Union[TriggerRateLimit, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from an agent via the MCP execute tool. Workflow can be executed from Bits Chat, Bits Agent Builder, Claude Code, Codex, Cursor, and any other coding agent using the Datadog MCP. + + :param rate_limit: Defines a rate limit for a trigger. + :type rate_limit: TriggerRateLimit, optional + """ + if rate_limit is not unset: + kwargs["rate_limit"] = rate_limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/agent_trigger_wrapper.py b/datadog_api_client/v2/model/agent_trigger_wrapper.py new file mode 100644 index 0000000000..dffaf72780 --- /dev/null +++ b/datadog_api_client/v2/model/agent_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.agent_trigger import AgentTrigger + +class AgentTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.agent_trigger import AgentTrigger + return { + "agent_trigger": (AgentTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "agent_trigger": "agentTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, agent_trigger: AgentTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for an agent-based trigger. + + :param agent_trigger: Trigger a workflow from an agent via the MCP execute tool. Workflow can be executed from Bits Chat, Bits Agent Builder, Claude Code, Codex, Cursor, and any other coding agent using the Datadog MCP. + :type agent_trigger: AgentTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.agent_trigger = agent_trigger diff --git a/datadog_api_client/v2/model/aggregated_high_frozen_frame_rate.py b/datadog_api_client/v2/model/aggregated_high_frozen_frame_rate.py new file mode 100644 index 0000000000..63e0195e68 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_high_frozen_frame_rate.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AggregatedHighFrozenFrameRate(ModelNormal): + validations = { + "view_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "avg_frozen_frame_rate": (float,), + "avg_segment_duration": (int,), + "avg_total_frozen_duration": (int,), + "fingerprint": (str,), + "impact_score": (float,), + "view_occurrences": (int,), + } + attribute_map = { + "avg_frozen_frame_rate": "avg_frozen_frame_rate", + "avg_segment_duration": "avg_segment_duration", + "avg_total_frozen_duration": "avg_total_frozen_duration", + "fingerprint": "fingerprint", + "impact_score": "impact_score", + "view_occurrences": "view_occurrences", + } + + def __init__(self_, avg_frozen_frame_rate: float, avg_segment_duration: int, avg_total_frozen_duration: int, fingerprint: str, impact_score: float, view_occurrences: int, **kwargs): + """ + Aggregated high frozen frame rate detection at view level. + + :param avg_frozen_frame_rate: Average frozen frame rate as a fraction of total frames. + :type avg_frozen_frame_rate: float + + :param avg_segment_duration: Average segment duration in nanoseconds. + :type avg_segment_duration: int + + :param avg_total_frozen_duration: Average total frozen duration in nanoseconds. + :type avg_total_frozen_duration: int + + :param fingerprint: Unique fingerprint identifying this detection group. + :type fingerprint: str + + :param impact_score: Impact score for this detection. + :type impact_score: float + + :param view_occurrences: Number of sampled views where this detection occurred. + :type view_occurrences: int + """ + super().__init__(kwargs) + + + self_.avg_frozen_frame_rate = avg_frozen_frame_rate + self_.avg_segment_duration = avg_segment_duration + self_.avg_total_frozen_duration = avg_total_frozen_duration + self_.fingerprint = fingerprint + self_.impact_score = impact_score + self_.view_occurrences = view_occurrences diff --git a/datadog_api_client/v2/model/aggregated_high_script_eval.py b/datadog_api_client/v2/model/aggregated_high_script_eval.py new file mode 100644 index 0000000000..38511e9815 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_high_script_eval.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AggregatedHighScriptEval(ModelNormal): + validations = { + "instance_count": { + "inclusive_maximum": 2147483647, + }, + "view_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "avg_duration": (int,), + "avg_forced_style_layout": (int,), + "fingerprint": (str,), + "impact_score": (float,), + "instance_count": (int,), + "invoker_type": (str,), + "source_category": (str, none_type), + "source_function_name": (str,), + "source_url": (str, none_type), + "view_occurrences": (int,), + } + attribute_map = { + "avg_duration": "avg_duration", + "avg_forced_style_layout": "avg_forced_style_layout", + "fingerprint": "fingerprint", + "impact_score": "impact_score", + "instance_count": "instance_count", + "invoker_type": "invoker_type", + "source_category": "source_category", + "source_function_name": "source_function_name", + "source_url": "source_url", + "view_occurrences": "view_occurrences", + } + + def __init__(self_, avg_duration: int, avg_forced_style_layout: int, fingerprint: str, impact_score: float, instance_count: int, invoker_type: str, source_category: Union[str, none_type], source_function_name: str, source_url: Union[str, none_type], view_occurrences: int, **kwargs): + """ + Aggregated high script evaluation detection grouped by source. + + :param avg_duration: Average script evaluation duration in nanoseconds. + :type avg_duration: int + + :param avg_forced_style_layout: Average forced style/layout duration in nanoseconds. + :type avg_forced_style_layout: int + + :param fingerprint: Unique fingerprint identifying this detection group. + :type fingerprint: str + + :param impact_score: Impact score combining view frequency and duration severity. + :type impact_score: float + + :param instance_count: Total number of detection instances across sampled views. + :type instance_count: int + + :param invoker_type: Type of invoker that triggered the script evaluation. + :type invoker_type: str + + :param source_category: Category of the script source. + :type source_category: str, none_type + + :param source_function_name: Name of the function that triggered the high script evaluation. + :type source_function_name: str + + :param source_url: URL of the script that triggered the high script evaluation. + :type source_url: str, none_type + + :param view_occurrences: Number of sampled views where this detection occurred. + :type view_occurrences: int + """ + super().__init__(kwargs) + + + self_.avg_duration = avg_duration + self_.avg_forced_style_layout = avg_forced_style_layout + self_.fingerprint = fingerprint + self_.impact_score = impact_score + self_.instance_count = instance_count + self_.invoker_type = invoker_type + self_.source_category = source_category + self_.source_function_name = source_function_name + self_.source_url = source_url + self_.view_occurrences = view_occurrences diff --git a/datadog_api_client/v2/model/aggregated_long_tasks_by_invoker_type.py b/datadog_api_client/v2/model/aggregated_long_tasks_by_invoker_type.py new file mode 100644 index 0000000000..18c5739d32 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_long_tasks_by_invoker_type.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.long_task_stats_per_view import LongTaskStatsPerView + from datadog_api_client.v2.model.top_long_task_invoker import TopLongTaskInvoker + +class AggregatedLongTasksByInvokerType(ModelNormal): + validations = { + "criteria_view_occurrences": { + "inclusive_maximum": 2147483647, + }, + "view_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.long_task_stats_per_view import LongTaskStatsPerView + from datadog_api_client.v2.model.top_long_task_invoker import TopLongTaskInvoker + return { + "criteria_view_occurrences": (int,), + "impact_score": (float,), + "invoker_type": (str,), + "stats_per_view": (LongTaskStatsPerView,), + "top_invokers": ([TopLongTaskInvoker],), + "view_occurrences": (int,), + } + attribute_map = { + "criteria_view_occurrences": "criteria_view_occurrences", + "impact_score": "impact_score", + "invoker_type": "invoker_type", + "stats_per_view": "stats_per_view", + "top_invokers": "top_invokers", + "view_occurrences": "view_occurrences", + } + + def __init__(self_, invoker_type: str, stats_per_view: LongTaskStatsPerView, top_invokers: List[TopLongTaskInvoker], view_occurrences: int, criteria_view_occurrences: Union[int, UnsetType]=unset, impact_score: Union[float, UnsetType]=unset, **kwargs): + """ + Aggregated long task statistics for a single invoker type. + + :param criteria_view_occurrences: Number of sampled views where this invoker type had long tasks contributing to the criteria metric. + :type criteria_view_occurrences: int, optional + + :param impact_score: Rank-product impact score combining view frequency and blocking time severity. + :type impact_score: float, optional + + :param invoker_type: Category of the long task invoker (for example, resolve-promise, user-callback). + :type invoker_type: str + + :param stats_per_view: Statistical distributions of long task metrics computed per view across sampled views. + :type stats_per_view: LongTaskStatsPerView + + :param top_invokers: Top invokers within this invoker type, sorted by impact score descending. + :type top_invokers: [TopLongTaskInvoker] + + :param view_occurrences: Number of sampled views where this invoker type had any long tasks. + :type view_occurrences: int + """ + if criteria_view_occurrences is not unset: + kwargs["criteria_view_occurrences"] = criteria_view_occurrences + if impact_score is not unset: + kwargs["impact_score"] = impact_score + super().__init__(kwargs) + + + self_.invoker_type = invoker_type + self_.stats_per_view = stats_per_view + self_.top_invokers = top_invokers + self_.view_occurrences = view_occurrences diff --git a/datadog_api_client/v2/model/aggregated_long_tasks_request.py b/datadog_api_client/v2/model/aggregated_long_tasks_request.py new file mode 100644 index 0000000000..be880e3182 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_long_tasks_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_long_tasks_request_data import AggregatedLongTasksRequestData + +class AggregatedLongTasksRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_long_tasks_request_data import AggregatedLongTasksRequestData + return { + "data": (AggregatedLongTasksRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AggregatedLongTasksRequestData, **kwargs): + """ + Request body for the aggregated long tasks endpoint. + + :param data: Data envelope for an aggregated long tasks request. + :type data: AggregatedLongTasksRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aggregated_long_tasks_request_attributes.py b/datadog_api_client/v2/model/aggregated_long_tasks_request_attributes.py new file mode 100644 index 0000000000..385fd9583f --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_long_tasks_request_attributes.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + +class AggregatedLongTasksRequestAttributes(ModelNormal): + validations = { + "sample_size": { + "inclusive_maximum": 500, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + return { + "application_id": (str,), + "criteria": (AggregatedWaterfallPerformanceCriteria,), + "filter": (str,), + "_from": (int,), + "sample_size": (int,), + "to": (int,), + "view_name": (str,), + } + attribute_map = { + "application_id": "application_id", + "criteria": "criteria", + "filter": "filter", + "_from": "from", + "sample_size": "sample_size", + "to": "to", + "view_name": "view_name", + } + + def __init__(self_, application_id: str, _from: int, sample_size: int, to: int, view_name: str, criteria: Union[AggregatedWaterfallPerformanceCriteria, UnsetType]=unset, filter: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for an aggregated long tasks query. + + :param application_id: The RUM application ID to analyze. + :type application_id: str + + :param criteria: Performance criteria to filter view instances by a metric threshold. + :type criteria: AggregatedWaterfallPerformanceCriteria, optional + + :param filter: RUM query string to filter events (for example, @session.type:user @geo.country:US). + :type filter: str, optional + + :param _from: Start of the time range as a Unix timestamp in seconds. + :type _from: int + + :param sample_size: Number of view instances to sample, between 1 and 500. + :type sample_size: int + + :param to: End of the time range as a Unix timestamp in seconds. + :type to: int + + :param view_name: The RUM view name to analyze (for example, /account/login). + :type view_name: str + """ + if criteria is not unset: + kwargs["criteria"] = criteria + if filter is not unset: + kwargs["filter"] = filter + super().__init__(kwargs) + + + self_.application_id = application_id + self_._from = _from + self_.sample_size = sample_size + self_.to = to + self_.view_name = view_name diff --git a/datadog_api_client/v2/model/aggregated_long_tasks_request_data.py b/datadog_api_client/v2/model/aggregated_long_tasks_request_data.py new file mode 100644 index 0000000000..795dc5a843 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_long_tasks_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_long_tasks_request_attributes import AggregatedLongTasksRequestAttributes + from datadog_api_client.v2.model.aggregated_long_tasks_request_type import AggregatedLongTasksRequestType + +class AggregatedLongTasksRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_long_tasks_request_attributes import AggregatedLongTasksRequestAttributes + from datadog_api_client.v2.model.aggregated_long_tasks_request_type import AggregatedLongTasksRequestType + return { + "attributes": (AggregatedLongTasksRequestAttributes,), + "type": (AggregatedLongTasksRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AggregatedLongTasksRequestAttributes, type: AggregatedLongTasksRequestType, **kwargs): + """ + Data envelope for an aggregated long tasks request. + + :param attributes: Attributes for an aggregated long tasks query. + :type attributes: AggregatedLongTasksRequestAttributes + + :param type: The JSON:API type for aggregated long tasks requests. + :type type: AggregatedLongTasksRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aggregated_long_tasks_request_type.py b/datadog_api_client/v2/model/aggregated_long_tasks_request_type.py new file mode 100644 index 0000000000..07a813d71e --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_long_tasks_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AggregatedLongTasksRequestType(ModelSimple): + """ + The JSON:API type for aggregated long tasks requests. + + :param value: If omitted defaults to "aggregated_long_tasks". Must be one of ["aggregated_long_tasks"]. + :type value: str + """ + + allowed_values = { + "aggregated_long_tasks", + } + AGGREGATED_LONG_TASKS: ClassVar["AggregatedLongTasksRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AggregatedLongTasksRequestType.AGGREGATED_LONG_TASKS = AggregatedLongTasksRequestType("aggregated_long_tasks") diff --git a/datadog_api_client/v2/model/aggregated_long_tasks_response.py b/datadog_api_client/v2/model/aggregated_long_tasks_response.py new file mode 100644 index 0000000000..d4aa1b7247 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_long_tasks_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_long_tasks_response_data import AggregatedLongTasksResponseData + +class AggregatedLongTasksResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_long_tasks_response_data import AggregatedLongTasksResponseData + return { + "data": (AggregatedLongTasksResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AggregatedLongTasksResponseData, **kwargs): + """ + Response body for the aggregated long tasks endpoint. + + :param data: Data envelope for an aggregated long tasks response. + :type data: AggregatedLongTasksResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aggregated_long_tasks_response_attributes.py b/datadog_api_client/v2/model/aggregated_long_tasks_response_attributes.py new file mode 100644 index 0000000000..86aed8d295 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_long_tasks_response_attributes.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + from datadog_api_client.v2.model.aggregated_long_tasks_by_invoker_type import AggregatedLongTasksByInvokerType + +class AggregatedLongTasksResponseAttributes(ModelNormal): + validations = { + "view_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + from datadog_api_client.v2.model.aggregated_long_tasks_by_invoker_type import AggregatedLongTasksByInvokerType + return { + "application_id": (str,), + "criteria": (AggregatedWaterfallPerformanceCriteria,), + "_from": (int,), + "long_tasks_by_invoker_type": ([AggregatedLongTasksByInvokerType],), + "sampled_view_ids": ([str],), + "to": (int,), + "view_count": (int,), + "view_name": (str,), + } + attribute_map = { + "application_id": "application_id", + "criteria": "criteria", + "_from": "from", + "long_tasks_by_invoker_type": "long_tasks_by_invoker_type", + "sampled_view_ids": "sampled_view_ids", + "to": "to", + "view_count": "view_count", + "view_name": "view_name", + } + + def __init__(self_, application_id: str, _from: int, long_tasks_by_invoker_type: List[AggregatedLongTasksByInvokerType], sampled_view_ids: List[str], to: int, view_count: int, view_name: str, criteria: Union[AggregatedWaterfallPerformanceCriteria, UnsetType]=unset, **kwargs): + """ + Attributes of an aggregated long tasks response. + + :param application_id: The RUM application ID that was analyzed. + :type application_id: str + + :param criteria: Performance criteria to filter view instances by a metric threshold. + :type criteria: AggregatedWaterfallPerformanceCriteria, optional + + :param _from: Start of the analyzed time range as a Unix timestamp in seconds. + :type _from: int + + :param long_tasks_by_invoker_type: Long task statistics grouped by invoker type, sorted by impact score descending. + :type long_tasks_by_invoker_type: [AggregatedLongTasksByInvokerType] + + :param sampled_view_ids: List of RUM view IDs sampled for this aggregation, capped at 50. + :type sampled_view_ids: [str] + + :param to: End of the analyzed time range as a Unix timestamp in seconds. + :type to: int + + :param view_count: Number of view instances included in the analysis. + :type view_count: int + + :param view_name: The RUM view name that was analyzed. + :type view_name: str + """ + if criteria is not unset: + kwargs["criteria"] = criteria + super().__init__(kwargs) + + + self_.application_id = application_id + self_._from = _from + self_.long_tasks_by_invoker_type = long_tasks_by_invoker_type + self_.sampled_view_ids = sampled_view_ids + self_.to = to + self_.view_count = view_count + self_.view_name = view_name diff --git a/datadog_api_client/v2/model/aggregated_long_tasks_response_data.py b/datadog_api_client/v2/model/aggregated_long_tasks_response_data.py new file mode 100644 index 0000000000..f756cde425 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_long_tasks_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_long_tasks_response_attributes import AggregatedLongTasksResponseAttributes + from datadog_api_client.v2.model.aggregated_long_tasks_request_type import AggregatedLongTasksRequestType + +class AggregatedLongTasksResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_long_tasks_response_attributes import AggregatedLongTasksResponseAttributes + from datadog_api_client.v2.model.aggregated_long_tasks_request_type import AggregatedLongTasksRequestType + return { + "attributes": (AggregatedLongTasksResponseAttributes,), + "id": (str,), + "type": (AggregatedLongTasksRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AggregatedLongTasksResponseAttributes, id: str, type: AggregatedLongTasksRequestType, **kwargs): + """ + Data envelope for an aggregated long tasks response. + + :param attributes: Attributes of an aggregated long tasks response. + :type attributes: AggregatedLongTasksResponseAttributes + + :param id: Hash-based unique identifier for this aggregation. + :type id: str + + :param type: The JSON:API type for aggregated long tasks requests. + :type type: AggregatedLongTasksRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aggregated_low_cache_hit_rate.py b/datadog_api_client/v2/model/aggregated_low_cache_hit_rate.py new file mode 100644 index 0000000000..bf261469ee --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_low_cache_hit_rate.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AggregatedLowCacheHitRate(ModelNormal): + validations = { + "view_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "avg_cache_hit_rate": (float,), + "avg_resource_download_size_bytes": (int,), + "fingerprint": (str,), + "impact_score": (float,), + "view_occurrences": (int,), + } + attribute_map = { + "avg_cache_hit_rate": "avg_cache_hit_rate", + "avg_resource_download_size_bytes": "avg_resource_download_size_bytes", + "fingerprint": "fingerprint", + "impact_score": "impact_score", + "view_occurrences": "view_occurrences", + } + + def __init__(self_, avg_cache_hit_rate: float, avg_resource_download_size_bytes: int, fingerprint: str, impact_score: float, view_occurrences: int, **kwargs): + """ + Aggregated low cache hit rate detection at view level. + + :param avg_cache_hit_rate: Average cache hit rate across affected views. + :type avg_cache_hit_rate: float + + :param avg_resource_download_size_bytes: Average total download size of uncached resources in bytes. + :type avg_resource_download_size_bytes: int + + :param fingerprint: Unique fingerprint identifying this detection group. + :type fingerprint: str + + :param impact_score: Impact score for this detection. + :type impact_score: float + + :param view_occurrences: Number of sampled views where this detection occurred. + :type view_occurrences: int + """ + super().__init__(kwargs) + + + self_.avg_cache_hit_rate = avg_cache_hit_rate + self_.avg_resource_download_size_bytes = avg_resource_download_size_bytes + self_.fingerprint = fingerprint + self_.impact_score = impact_score + self_.view_occurrences = view_occurrences diff --git a/datadog_api_client/v2/model/aggregated_mobile_scroll_friction.py b/datadog_api_client/v2/model/aggregated_mobile_scroll_friction.py new file mode 100644 index 0000000000..1b614f29e9 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_mobile_scroll_friction.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AggregatedMobileScrollFriction(ModelNormal): + validations = { + "avg_scroll_frozen_frame_count": { + "inclusive_maximum": 2147483647, + }, + "view_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "avg_scroll_frozen_frame_count": (int,), + "fingerprint": (str,), + "impact_score": (float,), + "view_occurrences": (int,), + } + attribute_map = { + "avg_scroll_frozen_frame_count": "avg_scroll_frozen_frame_count", + "fingerprint": "fingerprint", + "impact_score": "impact_score", + "view_occurrences": "view_occurrences", + } + + def __init__(self_, avg_scroll_frozen_frame_count: int, fingerprint: str, impact_score: float, view_occurrences: int, **kwargs): + """ + Aggregated mobile scroll friction detection at view level. + + :param avg_scroll_frozen_frame_count: Average number of frozen frames during scroll interactions. + :type avg_scroll_frozen_frame_count: int + + :param fingerprint: Unique fingerprint identifying this detection group. + :type fingerprint: str + + :param impact_score: Impact score for this detection. + :type impact_score: float + + :param view_occurrences: Number of sampled views where this detection occurred. + :type view_occurrences: int + """ + super().__init__(kwargs) + + + self_.avg_scroll_frozen_frame_count = avg_scroll_frozen_frame_count + self_.fingerprint = fingerprint + self_.impact_score = impact_score + self_.view_occurrences = view_occurrences diff --git a/datadog_api_client/v2/model/aggregated_resource.py b/datadog_api_client/v2/model/aggregated_resource.py new file mode 100644 index 0000000000..002085b870 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_resource.py @@ -0,0 +1,182 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_resource_timing_breakdown import AggregatedResourceTimingBreakdown + +class AggregatedResource(ModelNormal): + validations = { + "cached_count": { + "inclusive_maximum": 2147483647, + }, + "downloaded_count": { + "inclusive_maximum": 2147483647, + }, + "global_view_name_count": { + "inclusive_maximum": 2147483647, + }, + "total_requests": { + "inclusive_maximum": 2147483647, + }, + "views_with_resource": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_resource_timing_breakdown import AggregatedResourceTimingBreakdown + return { + "avg_duration_ms": (float,), + "avg_start_time_ms": (float,), + "cache_hit_rate_pct": (float,), + "cached_count": (int,), + "downloaded_count": (int,), + "global_p75_duration_ms": (float,), + "global_view_name_count": (int,), + "global_view_name_pct": (float,), + "http_method": (str, none_type), + "load_frequency_pct": (float,), + "max_duration_ms": (float,), + "median_duration_ms": (float,), + "min_duration_ms": (float,), + "p75_duration_ms": (float,), + "p95_duration_ms": (float,), + "resource_type": (str, none_type), + "resource_url_path_group": (str,), + "timing_breakdown": (AggregatedResourceTimingBreakdown,), + "total_requests": (int,), + "views_with_resource": (int,), + } + attribute_map = { + "avg_duration_ms": "avg_duration_ms", + "avg_start_time_ms": "avg_start_time_ms", + "cache_hit_rate_pct": "cache_hit_rate_pct", + "cached_count": "cached_count", + "downloaded_count": "downloaded_count", + "global_p75_duration_ms": "global_p75_duration_ms", + "global_view_name_count": "global_view_name_count", + "global_view_name_pct": "global_view_name_pct", + "http_method": "http_method", + "load_frequency_pct": "load_frequency_pct", + "max_duration_ms": "max_duration_ms", + "median_duration_ms": "median_duration_ms", + "min_duration_ms": "min_duration_ms", + "p75_duration_ms": "p75_duration_ms", + "p95_duration_ms": "p95_duration_ms", + "resource_type": "resource_type", + "resource_url_path_group": "resource_url_path_group", + "timing_breakdown": "timing_breakdown", + "total_requests": "total_requests", + "views_with_resource": "views_with_resource", + } + + def __init__(self_, avg_duration_ms: float, avg_start_time_ms: float, cache_hit_rate_pct: float, cached_count: int, downloaded_count: int, http_method: Union[str, none_type], load_frequency_pct: float, max_duration_ms: float, median_duration_ms: float, min_duration_ms: float, p75_duration_ms: float, p95_duration_ms: float, resource_type: Union[str, none_type], resource_url_path_group: str, timing_breakdown: AggregatedResourceTimingBreakdown, total_requests: int, views_with_resource: int, global_p75_duration_ms: Union[float, UnsetType]=unset, global_view_name_count: Union[int, UnsetType]=unset, global_view_name_pct: Union[float, UnsetType]=unset, **kwargs): + """ + Aggregated performance statistics for a single network resource across sampled view instances. + + :param avg_duration_ms: Average total duration in milliseconds. + :type avg_duration_ms: float + + :param avg_start_time_ms: Average start time relative to view start in milliseconds. + :type avg_start_time_ms: float + + :param cache_hit_rate_pct: Cache hit rate as a percentage. + :type cache_hit_rate_pct: float + + :param cached_count: Number of requests served from cache. + :type cached_count: int + + :param downloaded_count: Number of requests downloaded from the network. + :type downloaded_count: int + + :param global_p75_duration_ms: 75th percentile duration across all view names in the application, present when include_global_appearance is true. + :type global_p75_duration_ms: float, optional + + :param global_view_name_count: Number of distinct view names in the application that load this resource, present when include_global_appearance is true. + :type global_view_name_count: int, optional + + :param global_view_name_pct: Percentage of distinct view names in the application that load this resource, present when include_global_appearance is true. + :type global_view_name_pct: float, optional + + :param http_method: HTTP method for the resource request. + :type http_method: str, none_type + + :param load_frequency_pct: Percentage of sampled view instances that loaded this resource. + :type load_frequency_pct: float + + :param max_duration_ms: Maximum duration in milliseconds. + :type max_duration_ms: float + + :param median_duration_ms: Median duration in milliseconds. + :type median_duration_ms: float + + :param min_duration_ms: Minimum duration in milliseconds. + :type min_duration_ms: float + + :param p75_duration_ms: 75th percentile duration in milliseconds. + :type p75_duration_ms: float + + :param p95_duration_ms: 95th percentile duration in milliseconds. + :type p95_duration_ms: float + + :param resource_type: Resource type (JS, CSS, image, fetch, XHR, document, and so on). + :type resource_type: str, none_type + + :param resource_url_path_group: URL path group used to aggregate similar resources. + :type resource_url_path_group: str + + :param timing_breakdown: Average timing breakdown per network phase for a resource. + :type timing_breakdown: AggregatedResourceTimingBreakdown + + :param total_requests: Total number of requests for this resource across all sampled views. + :type total_requests: int + + :param views_with_resource: Number of sampled view instances that loaded this resource. + :type views_with_resource: int + """ + if global_p75_duration_ms is not unset: + kwargs["global_p75_duration_ms"] = global_p75_duration_ms + if global_view_name_count is not unset: + kwargs["global_view_name_count"] = global_view_name_count + if global_view_name_pct is not unset: + kwargs["global_view_name_pct"] = global_view_name_pct + super().__init__(kwargs) + + + self_.avg_duration_ms = avg_duration_ms + self_.avg_start_time_ms = avg_start_time_ms + self_.cache_hit_rate_pct = cache_hit_rate_pct + self_.cached_count = cached_count + self_.downloaded_count = downloaded_count + self_.http_method = http_method + self_.load_frequency_pct = load_frequency_pct + self_.max_duration_ms = max_duration_ms + self_.median_duration_ms = median_duration_ms + self_.min_duration_ms = min_duration_ms + self_.p75_duration_ms = p75_duration_ms + self_.p95_duration_ms = p95_duration_ms + self_.resource_type = resource_type + self_.resource_url_path_group = resource_url_path_group + self_.timing_breakdown = timing_breakdown + self_.total_requests = total_requests + self_.views_with_resource = views_with_resource diff --git a/datadog_api_client/v2/model/aggregated_resource_timing_breakdown.py b/datadog_api_client/v2/model/aggregated_resource_timing_breakdown.py new file mode 100644 index 0000000000..a62c216ba4 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_resource_timing_breakdown.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AggregatedResourceTimingBreakdown(ModelNormal): + @cached_property + def openapi_types(_): + return { + "avg_connect_ms": (float,), + "avg_dns_ms": (float,), + "avg_download_ms": (float,), + "avg_first_byte_ms": (float,), + "avg_redirect_ms": (float,), + "avg_ssl_ms": (float,), + } + attribute_map = { + "avg_connect_ms": "avg_connect_ms", + "avg_dns_ms": "avg_dns_ms", + "avg_download_ms": "avg_download_ms", + "avg_first_byte_ms": "avg_first_byte_ms", + "avg_redirect_ms": "avg_redirect_ms", + "avg_ssl_ms": "avg_ssl_ms", + } + + def __init__(self_, avg_connect_ms: float, avg_dns_ms: float, avg_download_ms: float, avg_first_byte_ms: float, avg_redirect_ms: float, avg_ssl_ms: float, **kwargs): + """ + Average timing breakdown per network phase for a resource. + + :param avg_connect_ms: Average TCP connect duration in milliseconds. + :type avg_connect_ms: float + + :param avg_dns_ms: Average DNS resolution duration in milliseconds. + :type avg_dns_ms: float + + :param avg_download_ms: Average download phase duration in milliseconds. + :type avg_download_ms: float + + :param avg_first_byte_ms: Average time to first byte in milliseconds. + :type avg_first_byte_ms: float + + :param avg_redirect_ms: Average redirect phase duration in milliseconds. + :type avg_redirect_ms: float + + :param avg_ssl_ms: Average SSL handshake duration in milliseconds. + :type avg_ssl_ms: float + """ + super().__init__(kwargs) + + + self_.avg_connect_ms = avg_connect_ms + self_.avg_dns_ms = avg_dns_ms + self_.avg_download_ms = avg_download_ms + self_.avg_first_byte_ms = avg_first_byte_ms + self_.avg_redirect_ms = avg_redirect_ms + self_.avg_ssl_ms = avg_ssl_ms diff --git a/datadog_api_client/v2/model/aggregated_signals_problems_request.py b/datadog_api_client/v2/model/aggregated_signals_problems_request.py new file mode 100644 index 0000000000..59d198e269 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_signals_problems_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_signals_problems_request_data import AggregatedSignalsProblemsRequestData + +class AggregatedSignalsProblemsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_signals_problems_request_data import AggregatedSignalsProblemsRequestData + return { + "data": (AggregatedSignalsProblemsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AggregatedSignalsProblemsRequestData, **kwargs): + """ + Request body for the aggregated signals and problems endpoint. + + :param data: Data envelope for an aggregated signals and problems request. + :type data: AggregatedSignalsProblemsRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aggregated_signals_problems_request_attributes.py b/datadog_api_client/v2/model/aggregated_signals_problems_request_attributes.py new file mode 100644 index 0000000000..056fd62433 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_signals_problems_request_attributes.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + +class AggregatedSignalsProblemsRequestAttributes(ModelNormal): + validations = { + "sample_size": { + "inclusive_maximum": 50, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + return { + "application_id": (str,), + "criteria": (AggregatedWaterfallPerformanceCriteria,), + "detection_types": ([str],), + "filter": (str,), + "_from": (int,), + "sample_size": (int,), + "to": (int,), + "view_name": (str,), + } + attribute_map = { + "application_id": "application_id", + "criteria": "criteria", + "detection_types": "detection_types", + "filter": "filter", + "_from": "from", + "sample_size": "sample_size", + "to": "to", + "view_name": "view_name", + } + + def __init__(self_, application_id: str, _from: int, sample_size: int, to: int, view_name: str, criteria: Union[AggregatedWaterfallPerformanceCriteria, UnsetType]=unset, detection_types: Union[List[str], UnsetType]=unset, filter: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for an aggregated signals and problems query. + + :param application_id: The RUM application ID to analyze. + :type application_id: str + + :param criteria: Performance criteria to filter view instances by a metric threshold. + :type criteria: AggregatedWaterfallPerformanceCriteria, optional + + :param detection_types: List of detection types to include in the response. When omitted, all types are returned. + :type detection_types: [str], optional + + :param filter: RUM query string to filter events (for example, @session.type:user @geo.country:US). + :type filter: str, optional + + :param _from: Start of the time range as a Unix timestamp in seconds. + :type _from: int + + :param sample_size: Number of view instances to sample, between 1 and 50. + :type sample_size: int + + :param to: End of the time range as a Unix timestamp in seconds. + :type to: int + + :param view_name: The RUM view name to analyze (for example, /account/login). + :type view_name: str + """ + if criteria is not unset: + kwargs["criteria"] = criteria + if detection_types is not unset: + kwargs["detection_types"] = detection_types + if filter is not unset: + kwargs["filter"] = filter + super().__init__(kwargs) + + + self_.application_id = application_id + self_._from = _from + self_.sample_size = sample_size + self_.to = to + self_.view_name = view_name diff --git a/datadog_api_client/v2/model/aggregated_signals_problems_request_data.py b/datadog_api_client/v2/model/aggregated_signals_problems_request_data.py new file mode 100644 index 0000000000..319e9de5b1 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_signals_problems_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_signals_problems_request_attributes import AggregatedSignalsProblemsRequestAttributes + from datadog_api_client.v2.model.aggregated_signals_problems_request_type import AggregatedSignalsProblemsRequestType + +class AggregatedSignalsProblemsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_signals_problems_request_attributes import AggregatedSignalsProblemsRequestAttributes + from datadog_api_client.v2.model.aggregated_signals_problems_request_type import AggregatedSignalsProblemsRequestType + return { + "attributes": (AggregatedSignalsProblemsRequestAttributes,), + "type": (AggregatedSignalsProblemsRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AggregatedSignalsProblemsRequestAttributes, type: AggregatedSignalsProblemsRequestType, **kwargs): + """ + Data envelope for an aggregated signals and problems request. + + :param attributes: Attributes for an aggregated signals and problems query. + :type attributes: AggregatedSignalsProblemsRequestAttributes + + :param type: The JSON:API type for aggregated signals and problems requests. + :type type: AggregatedSignalsProblemsRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aggregated_signals_problems_request_type.py b/datadog_api_client/v2/model/aggregated_signals_problems_request_type.py new file mode 100644 index 0000000000..76727ce598 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_signals_problems_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AggregatedSignalsProblemsRequestType(ModelSimple): + """ + The JSON:API type for aggregated signals and problems requests. + + :param value: If omitted defaults to "aggregated_signals_problems". Must be one of ["aggregated_signals_problems"]. + :type value: str + """ + + allowed_values = { + "aggregated_signals_problems", + } + AGGREGATED_SIGNALS_PROBLEMS: ClassVar["AggregatedSignalsProblemsRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AggregatedSignalsProblemsRequestType.AGGREGATED_SIGNALS_PROBLEMS = AggregatedSignalsProblemsRequestType("aggregated_signals_problems") diff --git a/datadog_api_client/v2/model/aggregated_signals_problems_response.py b/datadog_api_client/v2/model/aggregated_signals_problems_response.py new file mode 100644 index 0000000000..6d6ace03d5 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_signals_problems_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_signals_problems_response_data import AggregatedSignalsProblemsResponseData + +class AggregatedSignalsProblemsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_signals_problems_response_data import AggregatedSignalsProblemsResponseData + return { + "data": (AggregatedSignalsProblemsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AggregatedSignalsProblemsResponseData, **kwargs): + """ + Response body for the aggregated signals and problems endpoint. + + :param data: Data envelope for an aggregated signals and problems response. + :type data: AggregatedSignalsProblemsResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aggregated_signals_problems_response_attributes.py b/datadog_api_client/v2/model/aggregated_signals_problems_response_attributes.py new file mode 100644 index 0000000000..efad3a438c --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_signals_problems_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + from datadog_api_client.v2.model.signals_problems_detections import SignalsProblemsDetections + from datadog_api_client.v2.model.signals_problems_sample_metadata import SignalsProblemsSampleMetadata + +class AggregatedSignalsProblemsResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + from datadog_api_client.v2.model.signals_problems_detections import SignalsProblemsDetections + from datadog_api_client.v2.model.signals_problems_sample_metadata import SignalsProblemsSampleMetadata + return { + "application_id": (str,), + "criteria": (AggregatedWaterfallPerformanceCriteria,), + "_from": (int,), + "problem_detections": (SignalsProblemsDetections,), + "sample_metadata": (SignalsProblemsSampleMetadata,), + "to": (int,), + "view_name": (str,), + } + attribute_map = { + "application_id": "application_id", + "criteria": "criteria", + "_from": "from", + "problem_detections": "problem_detections", + "sample_metadata": "sample_metadata", + "to": "to", + "view_name": "view_name", + } + + def __init__(self_, application_id: str, _from: int, problem_detections: SignalsProblemsDetections, sample_metadata: SignalsProblemsSampleMetadata, to: int, view_name: str, criteria: Union[AggregatedWaterfallPerformanceCriteria, UnsetType]=unset, **kwargs): + """ + Attributes of an aggregated signals and problems response. + + :param application_id: The RUM application ID that was analyzed. + :type application_id: str + + :param criteria: Performance criteria to filter view instances by a metric threshold. + :type criteria: AggregatedWaterfallPerformanceCriteria, optional + + :param _from: Start of the analyzed time range as a Unix timestamp in seconds. + :type _from: int + + :param problem_detections: Grouped detection results by detection type. + :type problem_detections: SignalsProblemsDetections + + :param sample_metadata: Metadata about the sampling quality for a signals and problems query. + :type sample_metadata: SignalsProblemsSampleMetadata + + :param to: End of the analyzed time range as a Unix timestamp in seconds. + :type to: int + + :param view_name: The RUM view name that was analyzed. + :type view_name: str + """ + if criteria is not unset: + kwargs["criteria"] = criteria + super().__init__(kwargs) + + + self_.application_id = application_id + self_._from = _from + self_.problem_detections = problem_detections + self_.sample_metadata = sample_metadata + self_.to = to + self_.view_name = view_name diff --git a/datadog_api_client/v2/model/aggregated_signals_problems_response_data.py b/datadog_api_client/v2/model/aggregated_signals_problems_response_data.py new file mode 100644 index 0000000000..858946d708 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_signals_problems_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_signals_problems_response_attributes import AggregatedSignalsProblemsResponseAttributes + from datadog_api_client.v2.model.aggregated_signals_problems_request_type import AggregatedSignalsProblemsRequestType + +class AggregatedSignalsProblemsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_signals_problems_response_attributes import AggregatedSignalsProblemsResponseAttributes + from datadog_api_client.v2.model.aggregated_signals_problems_request_type import AggregatedSignalsProblemsRequestType + return { + "attributes": (AggregatedSignalsProblemsResponseAttributes,), + "id": (str,), + "type": (AggregatedSignalsProblemsRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AggregatedSignalsProblemsResponseAttributes, id: str, type: AggregatedSignalsProblemsRequestType, **kwargs): + """ + Data envelope for an aggregated signals and problems response. + + :param attributes: Attributes of an aggregated signals and problems response. + :type attributes: AggregatedSignalsProblemsResponseAttributes + + :param id: Hash-based unique identifier for this aggregation. + :type id: str + + :param type: The JSON:API type for aggregated signals and problems requests. + :type type: AggregatedSignalsProblemsRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aggregated_slow_fcp_high_bytes.py b/datadog_api_client/v2/model/aggregated_slow_fcp_high_bytes.py new file mode 100644 index 0000000000..bd82c4befd --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_slow_fcp_high_bytes.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AggregatedSlowFCPHighBytes(ModelNormal): + validations = { + "view_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "avg_bytes_before_fcp_bytes": (int,), + "avg_first_contentful_paint_ms": (int,), + "avg_resource_count_before_fcp": (int,), + "fingerprint": (str,), + "impact_score": (float,), + "platform": (str,), + "view_occurrences": (int,), + } + attribute_map = { + "avg_bytes_before_fcp_bytes": "avg_bytes_before_fcp_bytes", + "avg_first_contentful_paint_ms": "avg_first_contentful_paint_ms", + "avg_resource_count_before_fcp": "avg_resource_count_before_fcp", + "fingerprint": "fingerprint", + "impact_score": "impact_score", + "platform": "platform", + "view_occurrences": "view_occurrences", + } + + def __init__(self_, avg_bytes_before_fcp_bytes: int, avg_first_contentful_paint_ms: int, avg_resource_count_before_fcp: int, fingerprint: str, impact_score: float, platform: str, view_occurrences: int, **kwargs): + """ + Aggregated slow first contentful paint with high byte count detection. + + :param avg_bytes_before_fcp_bytes: Average total bytes loaded before first contentful paint. + :type avg_bytes_before_fcp_bytes: int + + :param avg_first_contentful_paint_ms: Average first contentful paint time in milliseconds. + :type avg_first_contentful_paint_ms: int + + :param avg_resource_count_before_fcp: Average number of resources loaded before first contentful paint. + :type avg_resource_count_before_fcp: int + + :param fingerprint: Unique fingerprint identifying this detection group. + :type fingerprint: str + + :param impact_score: Impact score for this detection. + :type impact_score: float + + :param platform: Platform identifier for the affected views. + :type platform: str + + :param view_occurrences: Number of sampled views where this detection occurred. + :type view_occurrences: int + """ + super().__init__(kwargs) + + + self_.avg_bytes_before_fcp_bytes = avg_bytes_before_fcp_bytes + self_.avg_first_contentful_paint_ms = avg_first_contentful_paint_ms + self_.avg_resource_count_before_fcp = avg_resource_count_before_fcp + self_.fingerprint = fingerprint + self_.impact_score = impact_score + self_.platform = platform + self_.view_occurrences = view_occurrences diff --git a/datadog_api_client/v2/model/aggregated_slow_interaction_long_task.py b/datadog_api_client/v2/model/aggregated_slow_interaction_long_task.py new file mode 100644 index 0000000000..fbdbf20b7a --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_slow_interaction_long_task.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AggregatedSlowInteractionLongTask(ModelNormal): + validations = { + "instance_count": { + "inclusive_maximum": 2147483647, + }, + "view_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "action_type": (str,), + "avg_blocking_duration": (int,), + "avg_duration": (int,), + "fingerprint": (str,), + "impact_score": (float,), + "instance_count": (int,), + "selector": (str, none_type), + "selector_normalized": (str, none_type), + "view_occurrences": (int,), + } + attribute_map = { + "action_type": "action_type", + "avg_blocking_duration": "avg_blocking_duration", + "avg_duration": "avg_duration", + "fingerprint": "fingerprint", + "impact_score": "impact_score", + "instance_count": "instance_count", + "selector": "selector", + "selector_normalized": "selector_normalized", + "view_occurrences": "view_occurrences", + } + + def __init__(self_, action_type: str, avg_blocking_duration: int, avg_duration: int, fingerprint: str, impact_score: float, instance_count: int, selector: Union[str, none_type], selector_normalized: Union[str, none_type], view_occurrences: int, **kwargs): + """ + Aggregated slow interaction with long task detection grouped by action and selector. + + :param action_type: Type of user interaction that triggered the slow response. + :type action_type: str + + :param avg_blocking_duration: Average long task blocking duration in nanoseconds. + :type avg_blocking_duration: int + + :param avg_duration: Average total interaction duration in nanoseconds. + :type avg_duration: int + + :param fingerprint: Unique fingerprint identifying this detection group. + :type fingerprint: str + + :param impact_score: Impact score combining view frequency and blocking severity. + :type impact_score: float + + :param instance_count: Total number of detection instances across sampled views. + :type instance_count: int + + :param selector: CSS selector of the element that was interacted with. + :type selector: str, none_type + + :param selector_normalized: Normalized CSS selector with dynamic parts replaced. + :type selector_normalized: str, none_type + + :param view_occurrences: Number of sampled views where this detection occurred. + :type view_occurrences: int + """ + super().__init__(kwargs) + + + self_.action_type = action_type + self_.avg_blocking_duration = avg_blocking_duration + self_.avg_duration = avg_duration + self_.fingerprint = fingerprint + self_.impact_score = impact_score + self_.instance_count = instance_count + self_.selector = selector + self_.selector_normalized = selector_normalized + self_.view_occurrences = view_occurrences diff --git a/datadog_api_client/v2/model/aggregated_uncompressed_resource.py b/datadog_api_client/v2/model/aggregated_uncompressed_resource.py new file mode 100644 index 0000000000..3612bcfb79 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_uncompressed_resource.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AggregatedUncompressedResource(ModelNormal): + validations = { + "instance_count": { + "inclusive_maximum": 2147483647, + }, + "view_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "avg_body_size": (int,), + "avg_duration": (int,), + "fingerprint": (str,), + "impact_score": (float,), + "instance_count": (int,), + "provider_type": (str, none_type), + "render_blocking": (str, none_type), + "resource_type": (str,), + "url_path_group": (str,), + "view_occurrences": (int,), + } + attribute_map = { + "avg_body_size": "avg_body_size", + "avg_duration": "avg_duration", + "fingerprint": "fingerprint", + "impact_score": "impact_score", + "instance_count": "instance_count", + "provider_type": "provider_type", + "render_blocking": "render_blocking", + "resource_type": "resource_type", + "url_path_group": "url_path_group", + "view_occurrences": "view_occurrences", + } + + def __init__(self_, avg_body_size: int, avg_duration: int, fingerprint: str, impact_score: float, instance_count: int, provider_type: Union[str, none_type], render_blocking: Union[str, none_type], resource_type: str, url_path_group: str, view_occurrences: int, **kwargs): + """ + Aggregated uncompressed resource detection grouped by URL path. + + :param avg_body_size: Average uncompressed body size in bytes. + :type avg_body_size: int + + :param avg_duration: Average resource loading duration in nanoseconds. + :type avg_duration: int + + :param fingerprint: Unique fingerprint identifying this detection group. + :type fingerprint: str + + :param impact_score: Impact score combining view frequency and resource size. + :type impact_score: float + + :param instance_count: Total number of detection instances across sampled views. + :type instance_count: int + + :param provider_type: CDN or hosting provider type for the resource. + :type provider_type: str, none_type + + :param render_blocking: Whether the resource is render-blocking. + :type render_blocking: str, none_type + + :param resource_type: Type of the resource (JS, CSS, image, fetch, and so on). + :type resource_type: str + + :param url_path_group: Normalized URL path pattern for the uncompressed resource. + :type url_path_group: str + + :param view_occurrences: Number of sampled views where this detection occurred. + :type view_occurrences: int + """ + super().__init__(kwargs) + + + self_.avg_body_size = avg_body_size + self_.avg_duration = avg_duration + self_.fingerprint = fingerprint + self_.impact_score = impact_score + self_.instance_count = instance_count + self_.provider_type = provider_type + self_.render_blocking = render_blocking + self_.resource_type = resource_type + self_.url_path_group = url_path_group + self_.view_occurrences = view_occurrences diff --git a/datadog_api_client/v2/model/aggregated_waterfall_performance_criteria.py b/datadog_api_client/v2/model/aggregated_waterfall_performance_criteria.py new file mode 100644 index 0000000000..fe30596a6c --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_waterfall_performance_criteria.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria_metric import AggregatedWaterfallPerformanceCriteriaMetric + +class AggregatedWaterfallPerformanceCriteria(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria_metric import AggregatedWaterfallPerformanceCriteriaMetric + return { + "max": (float,), + "metric": (AggregatedWaterfallPerformanceCriteriaMetric,), + "min": (float,), + } + attribute_map = { + "max": "max", + "metric": "metric", + "min": "min", + } + + def __init__(self_, metric: AggregatedWaterfallPerformanceCriteriaMetric, max: Union[float, UnsetType]=unset, min: Union[float, UnsetType]=unset, **kwargs): + """ + Performance criteria to filter view instances by a metric threshold. + + :param max: Maximum threshold in seconds (inclusive). + :type max: float, optional + + :param metric: Performance metric used to filter view instances by threshold. + :type metric: AggregatedWaterfallPerformanceCriteriaMetric + + :param min: Minimum threshold in seconds (inclusive). + :type min: float, optional + """ + if max is not unset: + kwargs["max"] = max + if min is not unset: + kwargs["min"] = min + super().__init__(kwargs) + + + self_.metric = metric diff --git a/datadog_api_client/v2/model/aggregated_waterfall_performance_criteria_metric.py b/datadog_api_client/v2/model/aggregated_waterfall_performance_criteria_metric.py new file mode 100644 index 0000000000..a57a018a72 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_waterfall_performance_criteria_metric.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AggregatedWaterfallPerformanceCriteriaMetric(ModelSimple): + """ + Performance metric used to filter view instances by threshold. + + :param value: Must be one of ["loading_time", "largest_contentful_paint", "first_contentful_paint", "interaction_to_next_paint"]. + :type value: str + """ + + allowed_values = { + "loading_time", + "largest_contentful_paint", + "first_contentful_paint", + "interaction_to_next_paint", + } + LOADING_TIME: ClassVar["AggregatedWaterfallPerformanceCriteriaMetric"] + LARGEST_CONTENTFUL_PAINT: ClassVar["AggregatedWaterfallPerformanceCriteriaMetric"] + FIRST_CONTENTFUL_PAINT: ClassVar["AggregatedWaterfallPerformanceCriteriaMetric"] + INTERACTION_TO_NEXT_PAINT: ClassVar["AggregatedWaterfallPerformanceCriteriaMetric"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AggregatedWaterfallPerformanceCriteriaMetric.LOADING_TIME = AggregatedWaterfallPerformanceCriteriaMetric("loading_time") +AggregatedWaterfallPerformanceCriteriaMetric.LARGEST_CONTENTFUL_PAINT = AggregatedWaterfallPerformanceCriteriaMetric("largest_contentful_paint") +AggregatedWaterfallPerformanceCriteriaMetric.FIRST_CONTENTFUL_PAINT = AggregatedWaterfallPerformanceCriteriaMetric("first_contentful_paint") +AggregatedWaterfallPerformanceCriteriaMetric.INTERACTION_TO_NEXT_PAINT = AggregatedWaterfallPerformanceCriteriaMetric("interaction_to_next_paint") diff --git a/datadog_api_client/v2/model/aggregated_waterfall_request.py b/datadog_api_client/v2/model/aggregated_waterfall_request.py new file mode 100644 index 0000000000..a0b195a7b7 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_waterfall_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_request_data import AggregatedWaterfallRequestData + +class AggregatedWaterfallRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_request_data import AggregatedWaterfallRequestData + return { + "data": (AggregatedWaterfallRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AggregatedWaterfallRequestData, **kwargs): + """ + Request body for the aggregated waterfall endpoint. + + :param data: Data envelope for an aggregated waterfall request. + :type data: AggregatedWaterfallRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aggregated_waterfall_request_attributes.py b/datadog_api_client/v2/model/aggregated_waterfall_request_attributes.py new file mode 100644 index 0000000000..78eabf3bf7 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_waterfall_request_attributes.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + +class AggregatedWaterfallRequestAttributes(ModelNormal): + validations = { + "sample_size": { + "inclusive_maximum": 500, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + return { + "application_id": (str,), + "criteria": (AggregatedWaterfallPerformanceCriteria,), + "filter": (str,), + "_from": (int,), + "include_global_appearance": (bool,), + "sample_size": (int,), + "to": (int,), + "view_name": (str,), + } + attribute_map = { + "application_id": "application_id", + "criteria": "criteria", + "filter": "filter", + "_from": "from", + "include_global_appearance": "include_global_appearance", + "sample_size": "sample_size", + "to": "to", + "view_name": "view_name", + } + + def __init__(self_, application_id: str, _from: int, sample_size: int, to: int, view_name: str, criteria: Union[AggregatedWaterfallPerformanceCriteria, UnsetType]=unset, filter: Union[str, UnsetType]=unset, include_global_appearance: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for an aggregated waterfall query. + + :param application_id: The RUM application ID to analyze. + :type application_id: str + + :param criteria: Performance criteria to filter view instances by a metric threshold. + :type criteria: AggregatedWaterfallPerformanceCriteria, optional + + :param filter: RUM query string to filter events (for example, @session.type:user @geo.country:US). + :type filter: str, optional + + :param _from: Start of the time range as a Unix timestamp in seconds. + :type _from: int + + :param include_global_appearance: When true, enriches each resource with cross-view appearance statistics. + :type include_global_appearance: bool, optional + + :param sample_size: Number of view instances to sample, between 1 and 500. + :type sample_size: int + + :param to: End of the time range as a Unix timestamp in seconds. + :type to: int + + :param view_name: The RUM view name to analyze (for example, /account/login). + :type view_name: str + """ + if criteria is not unset: + kwargs["criteria"] = criteria + if filter is not unset: + kwargs["filter"] = filter + if include_global_appearance is not unset: + kwargs["include_global_appearance"] = include_global_appearance + super().__init__(kwargs) + + + self_.application_id = application_id + self_._from = _from + self_.sample_size = sample_size + self_.to = to + self_.view_name = view_name diff --git a/datadog_api_client/v2/model/aggregated_waterfall_request_data.py b/datadog_api_client/v2/model/aggregated_waterfall_request_data.py new file mode 100644 index 0000000000..8089225b78 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_waterfall_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_request_attributes import AggregatedWaterfallRequestAttributes + from datadog_api_client.v2.model.aggregated_waterfall_request_type import AggregatedWaterfallRequestType + +class AggregatedWaterfallRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_request_attributes import AggregatedWaterfallRequestAttributes + from datadog_api_client.v2.model.aggregated_waterfall_request_type import AggregatedWaterfallRequestType + return { + "attributes": (AggregatedWaterfallRequestAttributes,), + "type": (AggregatedWaterfallRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AggregatedWaterfallRequestAttributes, type: AggregatedWaterfallRequestType, **kwargs): + """ + Data envelope for an aggregated waterfall request. + + :param attributes: Attributes for an aggregated waterfall query. + :type attributes: AggregatedWaterfallRequestAttributes + + :param type: The JSON:API type for aggregated waterfall requests. + :type type: AggregatedWaterfallRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aggregated_waterfall_request_type.py b/datadog_api_client/v2/model/aggregated_waterfall_request_type.py new file mode 100644 index 0000000000..5cf20db3d0 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_waterfall_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AggregatedWaterfallRequestType(ModelSimple): + """ + The JSON:API type for aggregated waterfall requests. + + :param value: If omitted defaults to "aggregated_waterfall". Must be one of ["aggregated_waterfall"]. + :type value: str + """ + + allowed_values = { + "aggregated_waterfall", + } + AGGREGATED_WATERFALL: ClassVar["AggregatedWaterfallRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AggregatedWaterfallRequestType.AGGREGATED_WATERFALL = AggregatedWaterfallRequestType("aggregated_waterfall") diff --git a/datadog_api_client/v2/model/aggregated_waterfall_response.py b/datadog_api_client/v2/model/aggregated_waterfall_response.py new file mode 100644 index 0000000000..3c4ac7fd88 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_waterfall_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_response_data import AggregatedWaterfallResponseData + +class AggregatedWaterfallResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_response_data import AggregatedWaterfallResponseData + return { + "data": (AggregatedWaterfallResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AggregatedWaterfallResponseData, **kwargs): + """ + Response body for the aggregated waterfall endpoint. + + :param data: Data envelope for an aggregated waterfall response. + :type data: AggregatedWaterfallResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aggregated_waterfall_response_attributes.py b/datadog_api_client/v2/model/aggregated_waterfall_response_attributes.py new file mode 100644 index 0000000000..7412c4fe25 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_waterfall_response_attributes.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + from datadog_api_client.v2.model.aggregated_resource import AggregatedResource + +class AggregatedWaterfallResponseAttributes(ModelNormal): + validations = { + "view_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria + from datadog_api_client.v2.model.aggregated_resource import AggregatedResource + return { + "application_id": (str,), + "criteria": (AggregatedWaterfallPerformanceCriteria,), + "_from": (int,), + "resources": ([AggregatedResource],), + "sampled_view_ids": ([str],), + "to": (int,), + "total_cache_hit_rate_pct": (float,), + "view_count": (int,), + "view_name": (str,), + } + attribute_map = { + "application_id": "application_id", + "criteria": "criteria", + "_from": "from", + "resources": "resources", + "sampled_view_ids": "sampled_view_ids", + "to": "to", + "total_cache_hit_rate_pct": "total_cache_hit_rate_pct", + "view_count": "view_count", + "view_name": "view_name", + } + + def __init__(self_, application_id: str, _from: int, resources: List[AggregatedResource], sampled_view_ids: List[str], to: int, total_cache_hit_rate_pct: float, view_count: int, view_name: str, criteria: Union[AggregatedWaterfallPerformanceCriteria, UnsetType]=unset, **kwargs): + """ + Attributes of an aggregated waterfall response. + + :param application_id: The RUM application ID that was analyzed. + :type application_id: str + + :param criteria: Performance criteria to filter view instances by a metric threshold. + :type criteria: AggregatedWaterfallPerformanceCriteria, optional + + :param _from: Start of the analyzed time range as a Unix timestamp in seconds. + :type _from: int + + :param resources: Network resources in chronological waterfall order. + :type resources: [AggregatedResource] + + :param sampled_view_ids: List of RUM view IDs sampled for this aggregation, capped at 50. + :type sampled_view_ids: [str] + + :param to: End of the analyzed time range as a Unix timestamp in seconds. + :type to: int + + :param total_cache_hit_rate_pct: Overall cache hit rate across all sampled views. + :type total_cache_hit_rate_pct: float + + :param view_count: Number of view instances included in the analysis. + :type view_count: int + + :param view_name: The RUM view name that was analyzed. + :type view_name: str + """ + if criteria is not unset: + kwargs["criteria"] = criteria + super().__init__(kwargs) + + + self_.application_id = application_id + self_._from = _from + self_.resources = resources + self_.sampled_view_ids = sampled_view_ids + self_.to = to + self_.total_cache_hit_rate_pct = total_cache_hit_rate_pct + self_.view_count = view_count + self_.view_name = view_name diff --git a/datadog_api_client/v2/model/aggregated_waterfall_response_data.py b/datadog_api_client/v2/model/aggregated_waterfall_response_data.py new file mode 100644 index 0000000000..59ed5448c5 --- /dev/null +++ b/datadog_api_client/v2/model/aggregated_waterfall_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_waterfall_response_attributes import AggregatedWaterfallResponseAttributes + from datadog_api_client.v2.model.aggregated_waterfall_request_type import AggregatedWaterfallRequestType + +class AggregatedWaterfallResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_waterfall_response_attributes import AggregatedWaterfallResponseAttributes + from datadog_api_client.v2.model.aggregated_waterfall_request_type import AggregatedWaterfallRequestType + return { + "attributes": (AggregatedWaterfallResponseAttributes,), + "id": (str,), + "type": (AggregatedWaterfallRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AggregatedWaterfallResponseAttributes, id: str, type: AggregatedWaterfallRequestType, **kwargs): + """ + Data envelope for an aggregated waterfall response. + + :param attributes: Attributes of an aggregated waterfall response. + :type attributes: AggregatedWaterfallResponseAttributes + + :param id: Hash-based unique identifier for this aggregation. + :type id: str + + :param type: The JSON:API type for aggregated waterfall requests. + :type type: AggregatedWaterfallRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ai_custom_rule_data_type.py b/datadog_api_client/v2/model/ai_custom_rule_data_type.py new file mode 100644 index 0000000000..e224b08cb7 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AiCustomRuleDataType(ModelSimple): + """ + AI custom rule resource type. + + :param value: If omitted defaults to "ai_rule". Must be one of ["ai_rule"]. + :type value: str + """ + + allowed_values = { + "ai_rule", + } + AI_RULE: ClassVar["AiCustomRuleDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AiCustomRuleDataType.AI_RULE = AiCustomRuleDataType("ai_rule") diff --git a/datadog_api_client/v2/model/ai_custom_rule_item.py b/datadog_api_client/v2/model/ai_custom_rule_item.py new file mode 100644 index 0000000000..68139cab15 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_item.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_revision_response_attributes import AiCustomRuleRevisionResponseAttributes + +class AiCustomRuleItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_revision_response_attributes import AiCustomRuleRevisionResponseAttributes + return { + "created_at": (datetime,), + "created_by": (str,), + "last_revision": (AiCustomRuleRevisionResponseAttributes,), + "name": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "last_revision": "last_revision", + "name": "name", + } + + def __init__(self_, created_at: datetime, created_by: str, last_revision: AiCustomRuleRevisionResponseAttributes, name: str, **kwargs): + """ + An AI custom rule embedded within a ruleset response. + + :param created_at: The creation timestamp. + :type created_at: datetime + + :param created_by: The identifier of the user who created the rule. + :type created_by: str + + :param last_revision: Response attributes of an AI custom rule revision. + :type last_revision: AiCustomRuleRevisionResponseAttributes + + :param name: The rule name. + :type name: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.last_revision = last_revision + self_.name = name diff --git a/datadog_api_client/v2/model/ai_custom_rule_request.py b/datadog_api_client/v2/model/ai_custom_rule_request.py new file mode 100644 index 0000000000..d3dcd02b7b --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_request_data import AiCustomRuleRequestData + +class AiCustomRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_request_data import AiCustomRuleRequestData + return { + "data": (AiCustomRuleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AiCustomRuleRequestData, UnsetType]=unset, **kwargs): + """ + Request body for creating an AI custom rule. + + :param data: Request data for creating an AI custom rule. + :type data: AiCustomRuleRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_rule_request_attributes.py b/datadog_api_client/v2/model/ai_custom_rule_request_attributes.py new file mode 100644 index 0000000000..e411dfb9c7 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AiCustomRuleRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating an AI custom rule. + + :param name: The rule name. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_rule_request_data.py b/datadog_api_client/v2/model/ai_custom_rule_request_data.py new file mode 100644 index 0000000000..1713d3f8c7 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_request_attributes import AiCustomRuleRequestAttributes + from datadog_api_client.v2.model.ai_custom_rule_data_type import AiCustomRuleDataType + +class AiCustomRuleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_request_attributes import AiCustomRuleRequestAttributes + from datadog_api_client.v2.model.ai_custom_rule_data_type import AiCustomRuleDataType + return { + "attributes": (AiCustomRuleRequestAttributes,), + "id": (str,), + "type": (AiCustomRuleDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AiCustomRuleRequestAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AiCustomRuleDataType, UnsetType]=unset, **kwargs): + """ + Request data for creating an AI custom rule. + + :param attributes: Attributes for creating an AI custom rule. + :type attributes: AiCustomRuleRequestAttributes, optional + + :param id: The rule identifier, which must match the name. + :type id: str, optional + + :param type: AI custom rule resource type. + :type type: AiCustomRuleDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_rule_response.py b/datadog_api_client/v2/model/ai_custom_rule_response.py new file mode 100644 index 0000000000..0cb4a5f415 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_response_data import AiCustomRuleResponseData + +class AiCustomRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_response_data import AiCustomRuleResponseData + return { + "data": (AiCustomRuleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AiCustomRuleResponseData, **kwargs): + """ + Response containing a single AI custom rule. + + :param data: Response data for an AI custom rule. + :type data: AiCustomRuleResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ai_custom_rule_response_data.py b/datadog_api_client/v2/model/ai_custom_rule_response_data.py new file mode 100644 index 0000000000..97214034a5 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_item import AiCustomRuleItem + from datadog_api_client.v2.model.ai_custom_rule_data_type import AiCustomRuleDataType + +class AiCustomRuleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_item import AiCustomRuleItem + from datadog_api_client.v2.model.ai_custom_rule_data_type import AiCustomRuleDataType + return { + "attributes": (AiCustomRuleItem,), + "id": (str,), + "type": (AiCustomRuleDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AiCustomRuleItem, id: str, type: AiCustomRuleDataType, **kwargs): + """ + Response data for an AI custom rule. + + :param attributes: An AI custom rule embedded within a ruleset response. + :type attributes: AiCustomRuleItem + + :param id: The rule identifier. + :type id: str + + :param type: AI custom rule resource type. + :type type: AiCustomRuleDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ai_custom_rule_revision_data_type.py b/datadog_api_client/v2/model/ai_custom_rule_revision_data_type.py new file mode 100644 index 0000000000..51780c2d30 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_revision_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AiCustomRuleRevisionDataType(ModelSimple): + """ + AI custom rule revision resource type. + + :param value: If omitted defaults to "ai_rule_revision". Must be one of ["ai_rule_revision"]. + :type value: str + """ + + allowed_values = { + "ai_rule_revision", + } + AI_RULE_REVISION: ClassVar["AiCustomRuleRevisionDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AiCustomRuleRevisionDataType.AI_RULE_REVISION = AiCustomRuleRevisionDataType("ai_rule_revision") diff --git a/datadog_api_client/v2/model/ai_custom_rule_revision_execution_mode.py b/datadog_api_client/v2/model/ai_custom_rule_revision_execution_mode.py new file mode 100644 index 0000000000..5e5388ed2f --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_revision_execution_mode.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AiCustomRuleRevisionExecutionMode(ModelSimple): + """ + The execution mode for an AI rule revision. + + :param value: Must be one of ["auto", "manual", "always"]. + :type value: str + """ + + allowed_values = { + "auto", + "manual", + "always", + } + AUTO: ClassVar["AiCustomRuleRevisionExecutionMode"] + MANUAL: ClassVar["AiCustomRuleRevisionExecutionMode"] + ALWAYS: ClassVar["AiCustomRuleRevisionExecutionMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AiCustomRuleRevisionExecutionMode.AUTO = AiCustomRuleRevisionExecutionMode("auto") +AiCustomRuleRevisionExecutionMode.MANUAL = AiCustomRuleRevisionExecutionMode("manual") +AiCustomRuleRevisionExecutionMode.ALWAYS = AiCustomRuleRevisionExecutionMode("always") diff --git a/datadog_api_client/v2/model/ai_custom_rule_revision_request.py b/datadog_api_client/v2/model/ai_custom_rule_revision_request.py new file mode 100644 index 0000000000..da20b9dbac --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_revision_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_revision_request_data import AiCustomRuleRevisionRequestData + +class AiCustomRuleRevisionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_revision_request_data import AiCustomRuleRevisionRequestData + return { + "data": (AiCustomRuleRevisionRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AiCustomRuleRevisionRequestData, UnsetType]=unset, **kwargs): + """ + Request body for creating an AI custom rule revision. + + :param data: Request data for creating an AI custom rule revision. + :type data: AiCustomRuleRevisionRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_rule_revision_request_attributes.py b/datadog_api_client/v2/model/ai_custom_rule_revision_request_attributes.py new file mode 100644 index 0000000000..9a1f36cca6 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_revision_request_attributes.py @@ -0,0 +1,120 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.ai_custom_rule_revision_execution_mode import AiCustomRuleRevisionExecutionMode + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + +class AiCustomRuleRevisionRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.ai_custom_rule_revision_execution_mode import AiCustomRuleRevisionExecutionMode + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + return { + "category": (CustomRuleRevisionAttributesCategory,), + "content": (str,), + "cwe": (str, none_type), + "description": (str,), + "directories": ([str],), + "execution_mode": (AiCustomRuleRevisionExecutionMode,), + "globs": ([str],), + "is_published": (bool,), + "is_testing": (bool,), + "severity": (CustomRuleRevisionAttributesSeverity,), + "short_description": (str,), + "version_id": (int,), + } + attribute_map = { + "category": "category", + "content": "content", + "cwe": "cwe", + "description": "description", + "directories": "directories", + "execution_mode": "execution_mode", + "globs": "globs", + "is_published": "is_published", + "is_testing": "is_testing", + "severity": "severity", + "short_description": "short_description", + "version_id": "version_id", + } + + def __init__(self_, category: CustomRuleRevisionAttributesCategory, content: str, description: str, directories: List[str], execution_mode: AiCustomRuleRevisionExecutionMode, globs: List[str], is_published: bool, is_testing: bool, severity: CustomRuleRevisionAttributesSeverity, short_description: str, cwe: Union[str, none_type, UnsetType]=unset, version_id: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for creating an AI custom rule revision. + + :param category: Rule category + :type category: CustomRuleRevisionAttributesCategory + + :param content: Base64-encoded AI model content for this revision. + :type content: str + + :param cwe: The associated CWE identifier. + :type cwe: str, none_type, optional + + :param description: Base64-encoded full description. + :type description: str + + :param directories: Directory patterns this rule applies to. + :type directories: [str] + + :param execution_mode: The execution mode for an AI rule revision. + :type execution_mode: AiCustomRuleRevisionExecutionMode + + :param globs: File glob patterns this rule applies to. + :type globs: [str] + + :param is_published: Whether this revision is published. + :type is_published: bool + + :param is_testing: Whether this revision is for testing only. + :type is_testing: bool + + :param severity: Rule severity + :type severity: CustomRuleRevisionAttributesSeverity + + :param short_description: Base64-encoded short description. + :type short_description: str + + :param version_id: The version identifier for this revision. + :type version_id: int, optional + """ + if cwe is not unset: + kwargs["cwe"] = cwe + if version_id is not unset: + kwargs["version_id"] = version_id + super().__init__(kwargs) + + + self_.category = category + self_.content = content + self_.description = description + self_.directories = directories + self_.execution_mode = execution_mode + self_.globs = globs + self_.is_published = is_published + self_.is_testing = is_testing + self_.severity = severity + self_.short_description = short_description diff --git a/datadog_api_client/v2/model/ai_custom_rule_revision_request_data.py b/datadog_api_client/v2/model/ai_custom_rule_revision_request_data.py new file mode 100644 index 0000000000..adc6c6bac9 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_revision_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_revision_request_attributes import AiCustomRuleRevisionRequestAttributes + from datadog_api_client.v2.model.ai_custom_rule_revision_data_type import AiCustomRuleRevisionDataType + +class AiCustomRuleRevisionRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_revision_request_attributes import AiCustomRuleRevisionRequestAttributes + from datadog_api_client.v2.model.ai_custom_rule_revision_data_type import AiCustomRuleRevisionDataType + return { + "attributes": (AiCustomRuleRevisionRequestAttributes,), + "id": (str,), + "type": (AiCustomRuleRevisionDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AiCustomRuleRevisionRequestAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AiCustomRuleRevisionDataType, UnsetType]=unset, **kwargs): + """ + Request data for creating an AI custom rule revision. + + :param attributes: Attributes for creating an AI custom rule revision. + :type attributes: AiCustomRuleRevisionRequestAttributes, optional + + :param id: The revision identifier. + :type id: str, optional + + :param type: AI custom rule revision resource type. + :type type: AiCustomRuleRevisionDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_rule_revision_response.py b/datadog_api_client/v2/model/ai_custom_rule_revision_response.py new file mode 100644 index 0000000000..7552dcb429 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_revision_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_revision_response_data import AiCustomRuleRevisionResponseData + +class AiCustomRuleRevisionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_revision_response_data import AiCustomRuleRevisionResponseData + return { + "data": (AiCustomRuleRevisionResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AiCustomRuleRevisionResponseData, **kwargs): + """ + Response containing a single AI custom rule revision. + + :param data: Response data for an AI custom rule revision. + :type data: AiCustomRuleRevisionResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ai_custom_rule_revision_response_attributes.py b/datadog_api_client/v2/model/ai_custom_rule_revision_response_attributes.py new file mode 100644 index 0000000000..6e3351bc9a --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_revision_response_attributes.py @@ -0,0 +1,142 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.ai_custom_rule_revision_execution_mode import AiCustomRuleRevisionExecutionMode + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + +class AiCustomRuleRevisionResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.ai_custom_rule_revision_execution_mode import AiCustomRuleRevisionExecutionMode + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + return { + "category": (CustomRuleRevisionAttributesCategory,), + "checksum": (str,), + "content": (str,), + "created_at": (datetime,), + "created_by": (str,), + "cwe": (str, none_type), + "description": (str,), + "directories": ([str],), + "execution_mode": (AiCustomRuleRevisionExecutionMode,), + "globs": ([str],), + "is_default": (bool,), + "is_published": (bool,), + "is_testing": (bool,), + "severity": (CustomRuleRevisionAttributesSeverity,), + "short_description": (str,), + "version_id": (int,), + } + attribute_map = { + "category": "category", + "checksum": "checksum", + "content": "content", + "created_at": "created_at", + "created_by": "created_by", + "cwe": "cwe", + "description": "description", + "directories": "directories", + "execution_mode": "execution_mode", + "globs": "globs", + "is_default": "is_default", + "is_published": "is_published", + "is_testing": "is_testing", + "severity": "severity", + "short_description": "short_description", + "version_id": "version_id", + } + + def __init__(self_, category: CustomRuleRevisionAttributesCategory, checksum: str, content: str, created_at: datetime, created_by: str, cwe: Union[str, none_type], description: str, directories: List[str], execution_mode: AiCustomRuleRevisionExecutionMode, globs: List[str], is_default: bool, is_published: bool, is_testing: bool, severity: CustomRuleRevisionAttributesSeverity, short_description: str, version_id: int, **kwargs): + """ + Response attributes of an AI custom rule revision. + + :param category: Rule category + :type category: CustomRuleRevisionAttributesCategory + + :param checksum: Checksum of the revision content. + :type checksum: str + + :param content: Base64-encoded AI model content for this revision. + :type content: str + + :param created_at: The creation timestamp. + :type created_at: datetime + + :param created_by: The identifier of the user who created the revision. + :type created_by: str + + :param cwe: The associated CWE identifier. + :type cwe: str, none_type + + :param description: Base64-encoded full description. + :type description: str + + :param directories: Directory patterns this rule applies to. + :type directories: [str] + + :param execution_mode: The execution mode for an AI rule revision. + :type execution_mode: AiCustomRuleRevisionExecutionMode + + :param globs: File glob patterns this rule applies to. + :type globs: [str] + + :param is_default: Whether this is a default Datadog rule. + :type is_default: bool + + :param is_published: Whether this revision is published. + :type is_published: bool + + :param is_testing: Whether this revision is for testing only. + :type is_testing: bool + + :param severity: Rule severity + :type severity: CustomRuleRevisionAttributesSeverity + + :param short_description: Base64-encoded short description. + :type short_description: str + + :param version_id: The version identifier for this revision. + :type version_id: int + """ + super().__init__(kwargs) + + + self_.category = category + self_.checksum = checksum + self_.content = content + self_.created_at = created_at + self_.created_by = created_by + self_.cwe = cwe + self_.description = description + self_.directories = directories + self_.execution_mode = execution_mode + self_.globs = globs + self_.is_default = is_default + self_.is_published = is_published + self_.is_testing = is_testing + self_.severity = severity + self_.short_description = short_description + self_.version_id = version_id diff --git a/datadog_api_client/v2/model/ai_custom_rule_revision_response_data.py b/datadog_api_client/v2/model/ai_custom_rule_revision_response_data.py new file mode 100644 index 0000000000..ba15e56d85 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_revision_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_revision_response_attributes import AiCustomRuleRevisionResponseAttributes + from datadog_api_client.v2.model.ai_custom_rule_revision_data_type import AiCustomRuleRevisionDataType + +class AiCustomRuleRevisionResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_revision_response_attributes import AiCustomRuleRevisionResponseAttributes + from datadog_api_client.v2.model.ai_custom_rule_revision_data_type import AiCustomRuleRevisionDataType + return { + "attributes": (AiCustomRuleRevisionResponseAttributes,), + "id": (str,), + "type": (AiCustomRuleRevisionDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AiCustomRuleRevisionResponseAttributes, id: str, type: AiCustomRuleRevisionDataType, **kwargs): + """ + Response data for an AI custom rule revision. + + :param attributes: Response attributes of an AI custom rule revision. + :type attributes: AiCustomRuleRevisionResponseAttributes + + :param id: The revision identifier. + :type id: str + + :param type: AI custom rule revision resource type. + :type type: AiCustomRuleRevisionDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ai_custom_rule_revisions_response.py b/datadog_api_client/v2/model/ai_custom_rule_revisions_response.py new file mode 100644 index 0000000000..632d3dad26 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rule_revisions_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_revision_response_data import AiCustomRuleRevisionResponseData + +class AiCustomRuleRevisionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_revision_response_data import AiCustomRuleRevisionResponseData + return { + "data": ([AiCustomRuleRevisionResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AiCustomRuleRevisionResponseData], **kwargs): + """ + Response containing a list of AI custom rule revisions. + + :param data: The list of AI custom rule revisions. + :type data: [AiCustomRuleRevisionResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_data_type.py b/datadog_api_client/v2/model/ai_custom_ruleset_data_type.py new file mode 100644 index 0000000000..8969e6d086 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AiCustomRulesetDataType(ModelSimple): + """ + AI custom ruleset resource type. + + :param value: If omitted defaults to "ai_ruleset". Must be one of ["ai_ruleset"]. + :type value: str + """ + + allowed_values = { + "ai_ruleset", + } + AI_RULESET: ClassVar["AiCustomRulesetDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AiCustomRulesetDataType.AI_RULESET = AiCustomRulesetDataType("ai_ruleset") diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_request.py b/datadog_api_client/v2/model/ai_custom_ruleset_request.py new file mode 100644 index 0000000000..5c3c77f5d7 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_ruleset_request_data import AiCustomRulesetRequestData + +class AiCustomRulesetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_ruleset_request_data import AiCustomRulesetRequestData + return { + "data": (AiCustomRulesetRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AiCustomRulesetRequestData, UnsetType]=unset, **kwargs): + """ + Request body for creating an AI custom ruleset. + + :param data: Request data for creating an AI custom ruleset. + :type data: AiCustomRulesetRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_request_attributes.py b/datadog_api_client/v2/model/ai_custom_ruleset_request_attributes.py new file mode 100644 index 0000000000..739adc1027 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_request_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AiCustomRulesetRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + "short_description": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + "short_description": "short_description", + } + + def __init__(self_, description: str, name: str, short_description: str, **kwargs): + """ + Attributes for creating an AI custom ruleset. + + :param description: Base64-encoded full description of the ruleset. + :type description: str + + :param name: The ruleset name. + :type name: str + + :param short_description: Base64-encoded short description of the ruleset. + :type short_description: str + """ + super().__init__(kwargs) + + + self_.description = description + self_.name = name + self_.short_description = short_description diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_request_data.py b/datadog_api_client/v2/model/ai_custom_ruleset_request_data.py new file mode 100644 index 0000000000..909b72bb9d --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_ruleset_request_attributes import AiCustomRulesetRequestAttributes + from datadog_api_client.v2.model.ai_custom_ruleset_data_type import AiCustomRulesetDataType + +class AiCustomRulesetRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_ruleset_request_attributes import AiCustomRulesetRequestAttributes + from datadog_api_client.v2.model.ai_custom_ruleset_data_type import AiCustomRulesetDataType + return { + "attributes": (AiCustomRulesetRequestAttributes,), + "id": (str,), + "type": (AiCustomRulesetDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AiCustomRulesetRequestAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AiCustomRulesetDataType, UnsetType]=unset, **kwargs): + """ + Request data for creating an AI custom ruleset. + + :param attributes: Attributes for creating an AI custom ruleset. + :type attributes: AiCustomRulesetRequestAttributes, optional + + :param id: The ruleset identifier, which must match the name. + :type id: str, optional + + :param type: AI custom ruleset resource type. + :type type: AiCustomRulesetDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_response.py b/datadog_api_client/v2/model/ai_custom_ruleset_response.py new file mode 100644 index 0000000000..cd977c8f14 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_ruleset_response_data import AiCustomRulesetResponseData + +class AiCustomRulesetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_ruleset_response_data import AiCustomRulesetResponseData + return { + "data": (AiCustomRulesetResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AiCustomRulesetResponseData, **kwargs): + """ + Response containing a single AI custom ruleset. + + :param data: Response data for an AI custom ruleset. + :type data: AiCustomRulesetResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_response_attributes.py b/datadog_api_client/v2/model/ai_custom_ruleset_response_attributes.py new file mode 100644 index 0000000000..70d8bc2f63 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_rule_item import AiCustomRuleItem + +class AiCustomRulesetResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_rule_item import AiCustomRuleItem + return { + "created_at": (datetime,), + "created_by": (str,), + "description": (str,), + "name": (str,), + "rules": ([AiCustomRuleItem], none_type), + "short_description": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "description": "description", + "name": "name", + "rules": "rules", + "short_description": "short_description", + } + + def __init__(self_, created_at: datetime, created_by: str, description: str, name: str, rules: Union[List[AiCustomRuleItem], none_type], short_description: str, **kwargs): + """ + Response attributes of an AI custom ruleset. + + :param created_at: The creation timestamp. + :type created_at: datetime + + :param created_by: The identifier of the user who created the ruleset. + :type created_by: str + + :param description: Base64-encoded full description of the ruleset. + :type description: str + + :param name: The ruleset name. + :type name: str + + :param rules: The rules contained in the ruleset. + :type rules: [AiCustomRuleItem], none_type + + :param short_description: Base64-encoded short description of the ruleset. + :type short_description: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.description = description + self_.name = name + self_.rules = rules + self_.short_description = short_description diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_response_data.py b/datadog_api_client/v2/model/ai_custom_ruleset_response_data.py new file mode 100644 index 0000000000..cc4bc1200e --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_ruleset_response_attributes import AiCustomRulesetResponseAttributes + from datadog_api_client.v2.model.ai_custom_ruleset_data_type import AiCustomRulesetDataType + +class AiCustomRulesetResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_ruleset_response_attributes import AiCustomRulesetResponseAttributes + from datadog_api_client.v2.model.ai_custom_ruleset_data_type import AiCustomRulesetDataType + return { + "attributes": (AiCustomRulesetResponseAttributes,), + "id": (str,), + "type": (AiCustomRulesetDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AiCustomRulesetResponseAttributes, id: str, type: AiCustomRulesetDataType, **kwargs): + """ + Response data for an AI custom ruleset. + + :param attributes: Response attributes of an AI custom ruleset. + :type attributes: AiCustomRulesetResponseAttributes + + :param id: The ruleset identifier. + :type id: str + + :param type: AI custom ruleset resource type. + :type type: AiCustomRulesetDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_update_attributes.py b/datadog_api_client/v2/model/ai_custom_ruleset_update_attributes.py new file mode 100644 index 0000000000..15e819e3ac --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AiCustomRulesetUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + "short_description": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + "short_description": "short_description", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, short_description: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating an AI custom ruleset. + + :param description: Base64-encoded full description of the ruleset. + :type description: str, optional + + :param name: The ruleset name. + :type name: str, optional + + :param short_description: Base64-encoded short description of the ruleset. + :type short_description: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if short_description is not unset: + kwargs["short_description"] = short_description + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_update_data.py b/datadog_api_client/v2/model/ai_custom_ruleset_update_data.py new file mode 100644 index 0000000000..8081a7510d --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_update_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_ruleset_update_attributes import AiCustomRulesetUpdateAttributes + from datadog_api_client.v2.model.ai_custom_ruleset_data_type import AiCustomRulesetDataType + +class AiCustomRulesetUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_ruleset_update_attributes import AiCustomRulesetUpdateAttributes + from datadog_api_client.v2.model.ai_custom_ruleset_data_type import AiCustomRulesetDataType + return { + "attributes": (AiCustomRulesetUpdateAttributes,), + "id": (str,), + "type": (AiCustomRulesetDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AiCustomRulesetUpdateAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AiCustomRulesetDataType, UnsetType]=unset, **kwargs): + """ + Request data for updating an AI custom ruleset. + + :param attributes: Attributes for updating an AI custom ruleset. + :type attributes: AiCustomRulesetUpdateAttributes, optional + + :param id: The ruleset identifier. + :type id: str, optional + + :param type: AI custom ruleset resource type. + :type type: AiCustomRulesetDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_ruleset_update_request.py b/datadog_api_client/v2/model/ai_custom_ruleset_update_request.py new file mode 100644 index 0000000000..67523e9b72 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_ruleset_update_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_ruleset_update_data import AiCustomRulesetUpdateData + +class AiCustomRulesetUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_ruleset_update_data import AiCustomRulesetUpdateData + return { + "data": (AiCustomRulesetUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AiCustomRulesetUpdateData, UnsetType]=unset, **kwargs): + """ + Request body for updating an AI custom ruleset. + + :param data: Request data for updating an AI custom ruleset. + :type data: AiCustomRulesetUpdateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_custom_rulesets_response.py b/datadog_api_client/v2/model/ai_custom_rulesets_response.py new file mode 100644 index 0000000000..27636bfc86 --- /dev/null +++ b/datadog_api_client/v2/model/ai_custom_rulesets_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_custom_ruleset_response_data import AiCustomRulesetResponseData + +class AiCustomRulesetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_custom_ruleset_response_data import AiCustomRulesetResponseData + return { + "data": ([AiCustomRulesetResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AiCustomRulesetResponseData], **kwargs): + """ + Response containing a list of AI custom rulesets. + + :param data: The list of AI custom rulesets. + :type data: [AiCustomRulesetResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ai_memory_violation_result_data_type.py b/datadog_api_client/v2/model/ai_memory_violation_result_data_type.py new file mode 100644 index 0000000000..f09ffa1e5c --- /dev/null +++ b/datadog_api_client/v2/model/ai_memory_violation_result_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AiMemoryViolationResultDataType(ModelSimple): + """ + AI memory violation result resource type. + + :param value: If omitted defaults to "ai_memory_violation_result". Must be one of ["ai_memory_violation_result"]. + :type value: str + """ + + allowed_values = { + "ai_memory_violation_result", + } + AI_MEMORY_VIOLATION_RESULT: ClassVar["AiMemoryViolationResultDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AiMemoryViolationResultDataType.AI_MEMORY_VIOLATION_RESULT = AiMemoryViolationResultDataType("ai_memory_violation_result") diff --git a/datadog_api_client/v2/model/ai_memory_violation_result_request.py b/datadog_api_client/v2/model/ai_memory_violation_result_request.py new file mode 100644 index 0000000000..442720a553 --- /dev/null +++ b/datadog_api_client/v2/model/ai_memory_violation_result_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_memory_violation_result_request_data import AiMemoryViolationResultRequestData + +class AiMemoryViolationResultRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_memory_violation_result_request_data import AiMemoryViolationResultRequestData + return { + "data": (AiMemoryViolationResultRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AiMemoryViolationResultRequestData, UnsetType]=unset, **kwargs): + """ + Request body for creating an AI memory violation result. + + :param data: Request data for creating an AI memory violation result. + :type data: AiMemoryViolationResultRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_memory_violation_result_request_attributes.py b/datadog_api_client/v2/model/ai_memory_violation_result_request_attributes.py new file mode 100644 index 0000000000..7aa4493668 --- /dev/null +++ b/datadog_api_client/v2/model/ai_memory_violation_result_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_memory_violation_type import AiMemoryViolationType + +class AiMemoryViolationResultRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_memory_violation_type import AiMemoryViolationType + return { + "line": (int,), + "message": (str,), + "name": (str,), + "repository_id": (str,), + "rule": (str,), + "sha": (str,), + "type": (AiMemoryViolationType,), + } + attribute_map = { + "line": "line", + "message": "message", + "name": "name", + "repository_id": "repository_id", + "rule": "rule", + "sha": "sha", + "type": "type", + } + + def __init__(self_, line: int, message: str, name: str, repository_id: str, rule: str, sha: str, type: AiMemoryViolationType, **kwargs): + """ + Attributes for creating an AI memory violation result. + + :param line: The line number where the violation was found. + :type line: int + + :param message: A message explaining the violation result. + :type message: str + + :param name: The file path where the violation was found. + :type name: str + + :param repository_id: The repository identifier. + :type repository_id: str + + :param rule: The rule identifier in the format ruleset/rule. + :type rule: str + + :param sha: The git commit SHA where the violation was found. + :type sha: str + + :param type: The type of AI memory violation result indicating whether it is a true positive or false positive. + :type type: AiMemoryViolationType + """ + super().__init__(kwargs) + + + self_.line = line + self_.message = message + self_.name = name + self_.repository_id = repository_id + self_.rule = rule + self_.sha = sha + self_.type = type diff --git a/datadog_api_client/v2/model/ai_memory_violation_result_request_data.py b/datadog_api_client/v2/model/ai_memory_violation_result_request_data.py new file mode 100644 index 0000000000..27fa5c3232 --- /dev/null +++ b/datadog_api_client/v2/model/ai_memory_violation_result_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_memory_violation_result_request_attributes import AiMemoryViolationResultRequestAttributes + from datadog_api_client.v2.model.ai_memory_violation_result_data_type import AiMemoryViolationResultDataType + +class AiMemoryViolationResultRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_memory_violation_result_request_attributes import AiMemoryViolationResultRequestAttributes + from datadog_api_client.v2.model.ai_memory_violation_result_data_type import AiMemoryViolationResultDataType + return { + "attributes": (AiMemoryViolationResultRequestAttributes,), + "id": (str,), + "type": (AiMemoryViolationResultDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AiMemoryViolationResultRequestAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AiMemoryViolationResultDataType, UnsetType]=unset, **kwargs): + """ + Request data for creating an AI memory violation result. + + :param attributes: Attributes for creating an AI memory violation result. + :type attributes: AiMemoryViolationResultRequestAttributes, optional + + :param id: The violation result identifier. + :type id: str, optional + + :param type: AI memory violation result resource type. + :type type: AiMemoryViolationResultDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ai_memory_violation_result_response_attributes.py b/datadog_api_client/v2/model/ai_memory_violation_result_response_attributes.py new file mode 100644 index 0000000000..33c692c053 --- /dev/null +++ b/datadog_api_client/v2/model/ai_memory_violation_result_response_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_memory_violation_type import AiMemoryViolationType + +class AiMemoryViolationResultResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_memory_violation_type import AiMemoryViolationType + return { + "created_at": (datetime,), + "created_by": (str,), + "line": (int,), + "message": (str,), + "name": (str,), + "repository_id": (str,), + "rule": (str,), + "sha": (str,), + "type": (AiMemoryViolationType,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "line": "line", + "message": "message", + "name": "name", + "repository_id": "repository_id", + "rule": "rule", + "sha": "sha", + "type": "type", + } + + def __init__(self_, created_at: datetime, created_by: str, line: int, message: str, name: str, repository_id: str, rule: str, sha: str, type: AiMemoryViolationType, **kwargs): + """ + Response attributes of an AI memory violation result. + + :param created_at: The creation timestamp. + :type created_at: datetime + + :param created_by: The identifier of the user who created the result. + :type created_by: str + + :param line: The line number where the violation was found. + :type line: int + + :param message: A message explaining the violation result. + :type message: str + + :param name: The file path where the violation was found. + :type name: str + + :param repository_id: The repository identifier. + :type repository_id: str + + :param rule: The rule identifier in the format ruleset/rule. + :type rule: str + + :param sha: The git commit SHA where the violation was found. + :type sha: str + + :param type: The type of AI memory violation result indicating whether it is a true positive or false positive. + :type type: AiMemoryViolationType + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.line = line + self_.message = message + self_.name = name + self_.repository_id = repository_id + self_.rule = rule + self_.sha = sha + self_.type = type diff --git a/datadog_api_client/v2/model/ai_memory_violation_result_response_data.py b/datadog_api_client/v2/model/ai_memory_violation_result_response_data.py new file mode 100644 index 0000000000..f29d832d87 --- /dev/null +++ b/datadog_api_client/v2/model/ai_memory_violation_result_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_memory_violation_result_response_attributes import AiMemoryViolationResultResponseAttributes + from datadog_api_client.v2.model.ai_memory_violation_result_data_type import AiMemoryViolationResultDataType + +class AiMemoryViolationResultResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_memory_violation_result_response_attributes import AiMemoryViolationResultResponseAttributes + from datadog_api_client.v2.model.ai_memory_violation_result_data_type import AiMemoryViolationResultDataType + return { + "attributes": (AiMemoryViolationResultResponseAttributes,), + "id": (str,), + "type": (AiMemoryViolationResultDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AiMemoryViolationResultResponseAttributes, id: str, type: AiMemoryViolationResultDataType, **kwargs): + """ + Response data for an AI memory violation result. + + :param attributes: Response attributes of an AI memory violation result. + :type attributes: AiMemoryViolationResultResponseAttributes + + :param id: The numeric identifier of the violation result. + :type id: str + + :param type: AI memory violation result resource type. + :type type: AiMemoryViolationResultDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ai_memory_violation_results_response.py b/datadog_api_client/v2/model/ai_memory_violation_results_response.py new file mode 100644 index 0000000000..91e1c834d6 --- /dev/null +++ b/datadog_api_client/v2/model/ai_memory_violation_results_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_memory_violation_result_response_data import AiMemoryViolationResultResponseData + +class AiMemoryViolationResultsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_memory_violation_result_response_data import AiMemoryViolationResultResponseData + return { + "data": ([AiMemoryViolationResultResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AiMemoryViolationResultResponseData], **kwargs): + """ + Response containing a list of AI memory violation results. + + :param data: The list of AI memory violation results. + :type data: [AiMemoryViolationResultResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ai_memory_violation_type.py b/datadog_api_client/v2/model/ai_memory_violation_type.py new file mode 100644 index 0000000000..02631f1a2f --- /dev/null +++ b/datadog_api_client/v2/model/ai_memory_violation_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AiMemoryViolationType(ModelSimple): + """ + The type of AI memory violation result indicating whether it is a true positive or false positive. + + :param value: Must be one of ["TP", "FP"]. + :type value: str + """ + + allowed_values = { + "TP", + "FP", + } + TP: ClassVar["AiMemoryViolationType"] + FP: ClassVar["AiMemoryViolationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AiMemoryViolationType.TP = AiMemoryViolationType("TP") +AiMemoryViolationType.FP = AiMemoryViolationType("FP") diff --git a/datadog_api_client/v2/model/ai_prompt_data_type.py b/datadog_api_client/v2/model/ai_prompt_data_type.py new file mode 100644 index 0000000000..eb76576d5b --- /dev/null +++ b/datadog_api_client/v2/model/ai_prompt_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AiPromptDataType(ModelSimple): + """ + AI prompt resource type. + + :param value: If omitted defaults to "ai_prompt". Must be one of ["ai_prompt"]. + :type value: str + """ + + allowed_values = { + "ai_prompt", + } + AI_PROMPT: ClassVar["AiPromptDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AiPromptDataType.AI_PROMPT = AiPromptDataType("ai_prompt") diff --git a/datadog_api_client/v2/model/ai_prompt_response_attributes.py b/datadog_api_client/v2/model/ai_prompt_response_attributes.py new file mode 100644 index 0000000000..a94d3c7751 --- /dev/null +++ b/datadog_api_client/v2/model/ai_prompt_response_attributes.py @@ -0,0 +1,146 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.ai_custom_rule_revision_execution_mode import AiCustomRuleRevisionExecutionMode + from datadog_api_client.v2.model.language import Language + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + +class AiPromptResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.ai_custom_rule_revision_execution_mode import AiCustomRuleRevisionExecutionMode + from datadog_api_client.v2.model.language import Language + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + return { + "category": (CustomRuleRevisionAttributesCategory,), + "checksum": (str,), + "content": (str,), + "cwe": (str,), + "description": (str,), + "directories": ([str],), + "execution_mode": (AiCustomRuleRevisionExecutionMode,), + "file_search_keywords": ([str],), + "globs": ([str],), + "is_default": (bool,), + "is_testing": (bool,), + "language": (Language,), + "result_keywords_exclude": ([str],), + "rule_version": (str,), + "severity": (CustomRuleRevisionAttributesSeverity,), + "short_description": (str,), + } + attribute_map = { + "category": "category", + "checksum": "checksum", + "content": "content", + "cwe": "cwe", + "description": "description", + "directories": "directories", + "execution_mode": "execution_mode", + "file_search_keywords": "file_search_keywords", + "globs": "globs", + "is_default": "is_default", + "is_testing": "is_testing", + "language": "language", + "result_keywords_exclude": "result_keywords_exclude", + "rule_version": "rule_version", + "severity": "severity", + "short_description": "short_description", + } + + def __init__(self_, category: CustomRuleRevisionAttributesCategory, checksum: str, content: str, description: str, directories: List[str], execution_mode: AiCustomRuleRevisionExecutionMode, file_search_keywords: List[str], globs: List[str], is_default: bool, is_testing: bool, result_keywords_exclude: List[str], rule_version: str, severity: CustomRuleRevisionAttributesSeverity, short_description: str, cwe: Union[str, UnsetType]=unset, language: Union[Language, UnsetType]=unset, **kwargs): + """ + Response attributes of an AI prompt. + + :param category: Rule category + :type category: CustomRuleRevisionAttributesCategory + + :param checksum: Checksum of the prompt content. + :type checksum: str + + :param content: Base64-encoded AI prompt content. + :type content: str + + :param cwe: The CWE identifier associated with this prompt. + :type cwe: str, optional + + :param description: Base64-encoded full description. + :type description: str + + :param directories: Directory patterns this prompt applies to. + :type directories: [str] + + :param execution_mode: The execution mode for an AI rule revision. + :type execution_mode: AiCustomRuleRevisionExecutionMode + + :param file_search_keywords: Keywords used to search for relevant files. + :type file_search_keywords: [str] + + :param globs: File glob patterns this prompt applies to. + :type globs: [str] + + :param is_default: Whether this is a default Datadog prompt. + :type is_default: bool + + :param is_testing: Whether this prompt is for testing only. + :type is_testing: bool + + :param language: Programming language + :type language: Language, optional + + :param result_keywords_exclude: Keywords to exclude from results. + :type result_keywords_exclude: [str] + + :param rule_version: The version of the rule this prompt is associated with. + :type rule_version: str + + :param severity: Rule severity + :type severity: CustomRuleRevisionAttributesSeverity + + :param short_description: Base64-encoded short description. + :type short_description: str + """ + if cwe is not unset: + kwargs["cwe"] = cwe + if language is not unset: + kwargs["language"] = language + super().__init__(kwargs) + + + self_.category = category + self_.checksum = checksum + self_.content = content + self_.description = description + self_.directories = directories + self_.execution_mode = execution_mode + self_.file_search_keywords = file_search_keywords + self_.globs = globs + self_.is_default = is_default + self_.is_testing = is_testing + self_.result_keywords_exclude = result_keywords_exclude + self_.rule_version = rule_version + self_.severity = severity + self_.short_description = short_description diff --git a/datadog_api_client/v2/model/ai_prompt_response_data.py b/datadog_api_client/v2/model/ai_prompt_response_data.py new file mode 100644 index 0000000000..bf716b4811 --- /dev/null +++ b/datadog_api_client/v2/model/ai_prompt_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_prompt_response_attributes import AiPromptResponseAttributes + from datadog_api_client.v2.model.ai_prompt_data_type import AiPromptDataType + +class AiPromptResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_prompt_response_attributes import AiPromptResponseAttributes + from datadog_api_client.v2.model.ai_prompt_data_type import AiPromptDataType + return { + "attributes": (AiPromptResponseAttributes,), + "id": (str,), + "type": (AiPromptDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AiPromptResponseAttributes, id: str, type: AiPromptDataType, **kwargs): + """ + Response data for an AI prompt. + + :param attributes: Response attributes of an AI prompt. + :type attributes: AiPromptResponseAttributes + + :param id: The prompt identifier. + :type id: str + + :param type: AI prompt resource type. + :type type: AiPromptDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ai_prompts_response.py b/datadog_api_client/v2/model/ai_prompts_response.py new file mode 100644 index 0000000000..a907901f8c --- /dev/null +++ b/datadog_api_client/v2/model/ai_prompts_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ai_prompt_response_data import AiPromptResponseData + +class AiPromptsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ai_prompt_response_data import AiPromptResponseData + return { + "data": ([AiPromptResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AiPromptResponseData], **kwargs): + """ + Response containing a list of AI prompts. + + :param data: The list of AI prompts. + :type data: [AiPromptResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/alert_event_attributes.py b/datadog_api_client/v2/model/alert_event_attributes.py new file mode 100644 index 0000000000..b68128c3cb --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_system_attributes import EventSystemAttributes + from datadog_api_client.v2.model.alert_event_attributes_links_item import AlertEventAttributesLinksItem + from datadog_api_client.v2.model.alert_event_attributes_priority import AlertEventAttributesPriority + from datadog_api_client.v2.model.alert_event_attributes_status import AlertEventAttributesStatus + +class AlertEventAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_system_attributes import EventSystemAttributes + from datadog_api_client.v2.model.alert_event_attributes_links_item import AlertEventAttributesLinksItem + from datadog_api_client.v2.model.alert_event_attributes_priority import AlertEventAttributesPriority + from datadog_api_client.v2.model.alert_event_attributes_status import AlertEventAttributesStatus + return { + "aggregation_key": (str,), + "custom": (dict,), + "evt": (EventSystemAttributes,), + "links": ([AlertEventAttributesLinksItem],), + "priority": (AlertEventAttributesPriority,), + "service": (str,), + "status": (AlertEventAttributesStatus,), + "timestamp": (int,), + "title": (str,), + } + attribute_map = { + "aggregation_key": "aggregation_key", + "custom": "custom", + "evt": "evt", + "links": "links", + "priority": "priority", + "service": "service", + "status": "status", + "timestamp": "timestamp", + "title": "title", + } + + def __init__(self_, aggregation_key: Union[str, UnsetType]=unset, custom: Union[dict, UnsetType]=unset, evt: Union[EventSystemAttributes, UnsetType]=unset, links: Union[List[AlertEventAttributesLinksItem], UnsetType]=unset, priority: Union[AlertEventAttributesPriority, UnsetType]=unset, service: Union[str, UnsetType]=unset, status: Union[AlertEventAttributesStatus, UnsetType]=unset, timestamp: Union[int, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Alert event attributes. + + :param aggregation_key: Aggregation key of the event. + :type aggregation_key: str, optional + + :param custom: JSON object of custom attributes. + :type custom: dict, optional + + :param evt: JSON object of event system attributes. + :type evt: EventSystemAttributes, optional + + :param links: The links related to the event. + :type links: [AlertEventAttributesLinksItem], optional + + :param priority: The priority of the alert. + :type priority: AlertEventAttributesPriority, optional + + :param service: Service that triggered the event. + :type service: str, optional + + :param status: The status of the alert. + :type status: AlertEventAttributesStatus, optional + + :param timestamp: POSIX timestamp of the event. + :type timestamp: int, optional + + :param title: The title of the event. + :type title: str, optional + """ + if aggregation_key is not unset: + kwargs["aggregation_key"] = aggregation_key + if custom is not unset: + kwargs["custom"] = custom + if evt is not unset: + kwargs["evt"] = evt + if links is not unset: + kwargs["links"] = links + if priority is not unset: + kwargs["priority"] = priority + if service is not unset: + kwargs["service"] = service + if status is not unset: + kwargs["status"] = status + if timestamp is not unset: + kwargs["timestamp"] = timestamp + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/alert_event_attributes_links_item.py b/datadog_api_client/v2/model/alert_event_attributes_links_item.py new file mode 100644 index 0000000000..400c23a135 --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_attributes_links_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.alert_event_attributes_links_item_category import AlertEventAttributesLinksItemCategory + +class AlertEventAttributesLinksItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.alert_event_attributes_links_item_category import AlertEventAttributesLinksItemCategory + return { + "category": (AlertEventAttributesLinksItemCategory,), + "title": (str,), + "url": (str,), + } + attribute_map = { + "category": "category", + "title": "title", + "url": "url", + } + + def __init__(self_, category: Union[AlertEventAttributesLinksItemCategory, UnsetType]=unset, title: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + A link. + + :param category: The category of the link. + :type category: AlertEventAttributesLinksItemCategory, optional + + :param title: The display text of the link. + :type title: str, optional + + :param url: The URL of the link. + :type url: str, optional + """ + if category is not unset: + kwargs["category"] = category + if title is not unset: + kwargs["title"] = title + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/alert_event_attributes_links_item_category.py b/datadog_api_client/v2/model/alert_event_attributes_links_item_category.py new file mode 100644 index 0000000000..9754db1920 --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_attributes_links_item_category.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AlertEventAttributesLinksItemCategory(ModelSimple): + """ + The category of the link. + + :param value: Must be one of ["runbook", "documentation", "dashboard"]. + :type value: str + """ + + allowed_values = { + "runbook", + "documentation", + "dashboard", + } + RUNBOOK: ClassVar["AlertEventAttributesLinksItemCategory"] + DOCUMENTATION: ClassVar["AlertEventAttributesLinksItemCategory"] + DASHBOARD: ClassVar["AlertEventAttributesLinksItemCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AlertEventAttributesLinksItemCategory.RUNBOOK = AlertEventAttributesLinksItemCategory("runbook") +AlertEventAttributesLinksItemCategory.DOCUMENTATION = AlertEventAttributesLinksItemCategory("documentation") +AlertEventAttributesLinksItemCategory.DASHBOARD = AlertEventAttributesLinksItemCategory("dashboard") diff --git a/datadog_api_client/v2/model/alert_event_attributes_priority.py b/datadog_api_client/v2/model/alert_event_attributes_priority.py new file mode 100644 index 0000000000..3425002ba3 --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_attributes_priority.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AlertEventAttributesPriority(ModelSimple): + """ + The priority of the alert. + + :param value: Must be one of ["1", "2", "3", "4", "5"]. + :type value: str + """ + + allowed_values = { + "1", + "2", + "3", + "4", + "5", + } + PRIORITY_ONE: ClassVar["AlertEventAttributesPriority"] + PRIORITY_TWO: ClassVar["AlertEventAttributesPriority"] + PRIORITY_THREE: ClassVar["AlertEventAttributesPriority"] + PRIORITY_FOUR: ClassVar["AlertEventAttributesPriority"] + PRIORITY_FIVE: ClassVar["AlertEventAttributesPriority"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AlertEventAttributesPriority.PRIORITY_ONE = AlertEventAttributesPriority("1") +AlertEventAttributesPriority.PRIORITY_TWO = AlertEventAttributesPriority("2") +AlertEventAttributesPriority.PRIORITY_THREE = AlertEventAttributesPriority("3") +AlertEventAttributesPriority.PRIORITY_FOUR = AlertEventAttributesPriority("4") +AlertEventAttributesPriority.PRIORITY_FIVE = AlertEventAttributesPriority("5") diff --git a/datadog_api_client/v2/model/alert_event_attributes_status.py b/datadog_api_client/v2/model/alert_event_attributes_status.py new file mode 100644 index 0000000000..0faa7b1807 --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_attributes_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AlertEventAttributesStatus(ModelSimple): + """ + The status of the alert. + + :param value: Must be one of ["warn", "error", "ok"]. + :type value: str + """ + + allowed_values = { + "warn", + "error", + "ok", + } + WARN: ClassVar["AlertEventAttributesStatus"] + ERROR: ClassVar["AlertEventAttributesStatus"] + OK: ClassVar["AlertEventAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AlertEventAttributesStatus.WARN = AlertEventAttributesStatus("warn") +AlertEventAttributesStatus.ERROR = AlertEventAttributesStatus("error") +AlertEventAttributesStatus.OK = AlertEventAttributesStatus("ok") diff --git a/datadog_api_client/v2/model/alert_event_custom_attributes.py b/datadog_api_client/v2/model/alert_event_custom_attributes.py new file mode 100644 index 0000000000..e1b249174a --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_custom_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.alert_event_custom_attributes_custom import AlertEventCustomAttributesCustom + from datadog_api_client.v2.model.alert_event_custom_attributes_links_items import AlertEventCustomAttributesLinksItems + from datadog_api_client.v2.model.alert_event_custom_attributes_priority import AlertEventCustomAttributesPriority + from datadog_api_client.v2.model.alert_event_custom_attributes_status import AlertEventCustomAttributesStatus + +class AlertEventCustomAttributes(ModelNormal): + validations = { + "links": { + "max_items": 20, + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.alert_event_custom_attributes_custom import AlertEventCustomAttributesCustom + from datadog_api_client.v2.model.alert_event_custom_attributes_links_items import AlertEventCustomAttributesLinksItems + from datadog_api_client.v2.model.alert_event_custom_attributes_priority import AlertEventCustomAttributesPriority + from datadog_api_client.v2.model.alert_event_custom_attributes_status import AlertEventCustomAttributesStatus + return { + "custom": (AlertEventCustomAttributesCustom,), + "links": ([AlertEventCustomAttributesLinksItems],), + "priority": (AlertEventCustomAttributesPriority,), + "status": (AlertEventCustomAttributesStatus,), + } + attribute_map = { + "custom": "custom", + "links": "links", + "priority": "priority", + "status": "status", + } + + def __init__(self_, status: AlertEventCustomAttributesStatus, custom: Union[AlertEventCustomAttributesCustom, UnsetType]=unset, links: Union[List[AlertEventCustomAttributesLinksItems], UnsetType]=unset, priority: Union[AlertEventCustomAttributesPriority, UnsetType]=unset, **kwargs): + """ + Alert event attributes. + + :param custom: Free form JSON object for arbitrary data. Supports up to 100 properties per object and a maximum nesting depth of 10 levels. + :type custom: AlertEventCustomAttributesCustom, optional + + :param links: The links related to the event. Maximum of 20 links allowed. + :type links: [AlertEventCustomAttributesLinksItems], optional + + :param priority: The priority of the alert. + :type priority: AlertEventCustomAttributesPriority, optional + + :param status: The status of the alert. + :type status: AlertEventCustomAttributesStatus + """ + if custom is not unset: + kwargs["custom"] = custom + if links is not unset: + kwargs["links"] = links + if priority is not unset: + kwargs["priority"] = priority + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/alert_event_custom_attributes_custom.py b/datadog_api_client/v2/model/alert_event_custom_attributes_custom.py new file mode 100644 index 0000000000..e88195eed6 --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_custom_attributes_custom.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AlertEventCustomAttributesCustom(ModelNormal): + + def __init__(self_, **kwargs): + """ + Free form JSON object for arbitrary data. Supports up to 100 properties per object and a maximum nesting depth of 10 levels. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/alert_event_custom_attributes_links_items.py b/datadog_api_client/v2/model/alert_event_custom_attributes_links_items.py new file mode 100644 index 0000000000..bd7d3e4b6e --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_custom_attributes_links_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.alert_event_custom_attributes_links_items_category import AlertEventCustomAttributesLinksItemsCategory + +class AlertEventCustomAttributesLinksItems(ModelNormal): + validations = { + "title": { + "max_length": 300, + "min_length": 1, + }, + "url": { + "max_length": 2048, + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.alert_event_custom_attributes_links_items_category import AlertEventCustomAttributesLinksItemsCategory + return { + "category": (AlertEventCustomAttributesLinksItemsCategory,), + "title": (str,), + "url": (str,), + } + attribute_map = { + "category": "category", + "title": "title", + "url": "url", + } + + def __init__(self_, category: AlertEventCustomAttributesLinksItemsCategory, url: str, title: Union[str, UnsetType]=unset, **kwargs): + """ + A link. + + :param category: The category of the link. + :type category: AlertEventCustomAttributesLinksItemsCategory + + :param title: The display text of the link. Limited to 300 characters. + :type title: str, optional + + :param url: The URL of the link. Limited to 2048 characters. + :type url: str + """ + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + + self_.category = category + self_.url = url diff --git a/datadog_api_client/v2/model/alert_event_custom_attributes_links_items_category.py b/datadog_api_client/v2/model/alert_event_custom_attributes_links_items_category.py new file mode 100644 index 0000000000..0aef59f3a1 --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_custom_attributes_links_items_category.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AlertEventCustomAttributesLinksItemsCategory(ModelSimple): + """ + The category of the link. + + :param value: Must be one of ["runbook", "documentation", "dashboard", "resource"]. + :type value: str + """ + + allowed_values = { + "runbook", + "documentation", + "dashboard", + "resource", + } + RUNBOOK: ClassVar["AlertEventCustomAttributesLinksItemsCategory"] + DOCUMENTATION: ClassVar["AlertEventCustomAttributesLinksItemsCategory"] + DASHBOARD: ClassVar["AlertEventCustomAttributesLinksItemsCategory"] + RESOURCE: ClassVar["AlertEventCustomAttributesLinksItemsCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AlertEventCustomAttributesLinksItemsCategory.RUNBOOK = AlertEventCustomAttributesLinksItemsCategory("runbook") +AlertEventCustomAttributesLinksItemsCategory.DOCUMENTATION = AlertEventCustomAttributesLinksItemsCategory("documentation") +AlertEventCustomAttributesLinksItemsCategory.DASHBOARD = AlertEventCustomAttributesLinksItemsCategory("dashboard") +AlertEventCustomAttributesLinksItemsCategory.RESOURCE = AlertEventCustomAttributesLinksItemsCategory("resource") diff --git a/datadog_api_client/v2/model/alert_event_custom_attributes_priority.py b/datadog_api_client/v2/model/alert_event_custom_attributes_priority.py new file mode 100644 index 0000000000..9bb4c89791 --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_custom_attributes_priority.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AlertEventCustomAttributesPriority(ModelSimple): + """ + The priority of the alert. + + :param value: If omitted defaults to "5". Must be one of ["1", "2", "3", "4", "5"]. + :type value: str + """ + + allowed_values = { + "1", + "2", + "3", + "4", + "5", + } + PRIORITY_ONE: ClassVar["AlertEventCustomAttributesPriority"] + PRIORITY_TWO: ClassVar["AlertEventCustomAttributesPriority"] + PRIORITY_THREE: ClassVar["AlertEventCustomAttributesPriority"] + PRIORITY_FOUR: ClassVar["AlertEventCustomAttributesPriority"] + PRIORITY_FIVE: ClassVar["AlertEventCustomAttributesPriority"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AlertEventCustomAttributesPriority.PRIORITY_ONE = AlertEventCustomAttributesPriority("1") +AlertEventCustomAttributesPriority.PRIORITY_TWO = AlertEventCustomAttributesPriority("2") +AlertEventCustomAttributesPriority.PRIORITY_THREE = AlertEventCustomAttributesPriority("3") +AlertEventCustomAttributesPriority.PRIORITY_FOUR = AlertEventCustomAttributesPriority("4") +AlertEventCustomAttributesPriority.PRIORITY_FIVE = AlertEventCustomAttributesPriority("5") diff --git a/datadog_api_client/v2/model/alert_event_custom_attributes_status.py b/datadog_api_client/v2/model/alert_event_custom_attributes_status.py new file mode 100644 index 0000000000..88ac2972bd --- /dev/null +++ b/datadog_api_client/v2/model/alert_event_custom_attributes_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AlertEventCustomAttributesStatus(ModelSimple): + """ + The status of the alert. + + :param value: Must be one of ["warn", "error", "ok"]. + :type value: str + """ + + allowed_values = { + "warn", + "error", + "ok", + } + WARN: ClassVar["AlertEventCustomAttributesStatus"] + ERROR: ClassVar["AlertEventCustomAttributesStatus"] + OK: ClassVar["AlertEventCustomAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AlertEventCustomAttributesStatus.WARN = AlertEventCustomAttributesStatus("warn") +AlertEventCustomAttributesStatus.ERROR = AlertEventCustomAttributesStatus("error") +AlertEventCustomAttributesStatus.OK = AlertEventCustomAttributesStatus("ok") diff --git a/datadog_api_client/v2/model/allocation.py b/datadog_api_client/v2/model/allocation.py new file mode 100644 index 0000000000..89423d1ccf --- /dev/null +++ b/datadog_api_client/v2/model/allocation.py @@ -0,0 +1,131 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.allocation_exposure_schedule import AllocationExposureSchedule + from datadog_api_client.v2.model.guardrail_metric import GuardrailMetric + from datadog_api_client.v2.model.targeting_rule import TargetingRule + from datadog_api_client.v2.model.allocation_type import AllocationType + from datadog_api_client.v2.model.variant_weight import VariantWeight + +class Allocation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.allocation_exposure_schedule import AllocationExposureSchedule + from datadog_api_client.v2.model.guardrail_metric import GuardrailMetric + from datadog_api_client.v2.model.targeting_rule import TargetingRule + from datadog_api_client.v2.model.allocation_type import AllocationType + from datadog_api_client.v2.model.variant_weight import VariantWeight + return { + "created_at": (datetime,), + "environment_ids": ([UUID],), + "experiment_id": (str, none_type), + "exposure_schedule": (AllocationExposureSchedule,), + "guardrail_metrics": ([GuardrailMetric],), + "id": (UUID,), + "key": (str,), + "name": (str,), + "order_position": (int,), + "targeting_rules": ([TargetingRule],), + "type": (AllocationType,), + "updated_at": (datetime,), + "variant_weights": ([VariantWeight],), + } + attribute_map = { + "created_at": "created_at", + "environment_ids": "environment_ids", + "experiment_id": "experiment_id", + "exposure_schedule": "exposure_schedule", + "guardrail_metrics": "guardrail_metrics", + "id": "id", + "key": "key", + "name": "name", + "order_position": "order_position", + "targeting_rules": "targeting_rules", + "type": "type", + "updated_at": "updated_at", + "variant_weights": "variant_weights", + } + + def __init__(self_, created_at: datetime, environment_ids: List[UUID], guardrail_metrics: List[GuardrailMetric], key: str, name: str, order_position: int, targeting_rules: List[TargetingRule], type: AllocationType, updated_at: datetime, variant_weights: List[VariantWeight], experiment_id: Union[str, none_type, UnsetType]=unset, exposure_schedule: Union[AllocationExposureSchedule, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Targeting rule (allocation) details for a feature flag environment. + + :param created_at: The timestamp when the targeting rule allocation was created. + :type created_at: datetime + + :param environment_ids: Environment IDs associated with this targeting rule allocation. + :type environment_ids: [UUID] + + :param experiment_id: The experiment ID linked to this targeting rule allocation. + :type experiment_id: str, none_type, optional + + :param exposure_schedule: Progressive release details for a targeting rule allocation. + :type exposure_schedule: AllocationExposureSchedule, optional + + :param guardrail_metrics: Guardrail metrics associated with this targeting rule allocation. + :type guardrail_metrics: [GuardrailMetric] + + :param id: The unique identifier of the targeting rule allocation. + :type id: UUID, optional + + :param key: The unique key of the targeting rule allocation. + :type key: str + + :param name: The display name of the targeting rule. + :type name: str + + :param order_position: Sort order position within the environment. + :type order_position: int + + :param targeting_rules: Conditions associated with this targeting rule allocation. + :type targeting_rules: [TargetingRule] + + :param type: The type of targeting rule (called allocation in the API model). + :type type: AllocationType + + :param updated_at: The timestamp when the targeting rule allocation was last updated. + :type updated_at: datetime + + :param variant_weights: Weighted variant assignments for this targeting rule allocation. + :type variant_weights: [VariantWeight] + """ + if experiment_id is not unset: + kwargs["experiment_id"] = experiment_id + if exposure_schedule is not unset: + kwargs["exposure_schedule"] = exposure_schedule + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.created_at = created_at + self_.environment_ids = environment_ids + self_.guardrail_metrics = guardrail_metrics + self_.key = key + self_.name = name + self_.order_position = order_position + self_.targeting_rules = targeting_rules + self_.type = type + self_.updated_at = updated_at + self_.variant_weights = variant_weights diff --git a/datadog_api_client/v2/model/allocation_data_request.py b/datadog_api_client/v2/model/allocation_data_request.py new file mode 100644 index 0000000000..9216dca83d --- /dev/null +++ b/datadog_api_client/v2/model/allocation_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.upsert_allocation_request import UpsertAllocationRequest + from datadog_api_client.v2.model.allocation_data_type import AllocationDataType + +class AllocationDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.upsert_allocation_request import UpsertAllocationRequest + from datadog_api_client.v2.model.allocation_data_type import AllocationDataType + return { + "attributes": (UpsertAllocationRequest,), + "type": (AllocationDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: UpsertAllocationRequest, type: AllocationDataType, **kwargs): + """ + Data wrapper for allocation request payloads. + + :param attributes: Request to create or update a targeting rule (allocation) for a feature flag environment. + :type attributes: UpsertAllocationRequest + + :param type: The resource type. + :type type: AllocationDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/allocation_data_response.py b/datadog_api_client/v2/model/allocation_data_response.py new file mode 100644 index 0000000000..3c632bdec7 --- /dev/null +++ b/datadog_api_client/v2/model/allocation_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.allocation import Allocation + from datadog_api_client.v2.model.allocation_data_type import AllocationDataType + +class AllocationDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.allocation import Allocation + from datadog_api_client.v2.model.allocation_data_type import AllocationDataType + return { + "attributes": (Allocation,), + "id": (UUID,), + "type": (AllocationDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Allocation, id: UUID, type: AllocationDataType, **kwargs): + """ + Data wrapper for targeting rule allocation responses. + + :param attributes: Targeting rule (allocation) details for a feature flag environment. + :type attributes: Allocation + + :param id: The unique identifier of the targeting rule allocation. + :type id: UUID + + :param type: The resource type. + :type type: AllocationDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/allocation_data_type.py b/datadog_api_client/v2/model/allocation_data_type.py new file mode 100644 index 0000000000..b117d7b842 --- /dev/null +++ b/datadog_api_client/v2/model/allocation_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AllocationDataType(ModelSimple): + """ + The resource type. + + :param value: If omitted defaults to "allocations". Must be one of ["allocations"]. + :type value: str + """ + + allowed_values = { + "allocations", + } + ALLOCATIONS: ClassVar["AllocationDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AllocationDataType.ALLOCATIONS = AllocationDataType("allocations") diff --git a/datadog_api_client/v2/model/allocation_exposure_guardrail_trigger.py b/datadog_api_client/v2/model/allocation_exposure_guardrail_trigger.py new file mode 100644 index 0000000000..fd8e6f30ea --- /dev/null +++ b/datadog_api_client/v2/model/allocation_exposure_guardrail_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AllocationExposureGuardrailTrigger(ModelNormal): + @cached_property + def openapi_types(_): + return { + "allocation_exposure_schedule_id": (UUID,), + "created_at": (datetime,), + "flagging_variant_id": (UUID,), + "id": (UUID,), + "metric_id": (str,), + "triggered_action": (str,), + "updated_at": (datetime,), + } + attribute_map = { + "allocation_exposure_schedule_id": "allocation_exposure_schedule_id", + "created_at": "created_at", + "flagging_variant_id": "flagging_variant_id", + "id": "id", + "metric_id": "metric_id", + "triggered_action": "triggered_action", + "updated_at": "updated_at", + } + + def __init__(self_, allocation_exposure_schedule_id: UUID, created_at: datetime, flagging_variant_id: UUID, id: UUID, metric_id: str, triggered_action: str, updated_at: datetime, **kwargs): + """ + Guardrail trigger details for a progressive rollout. + + :param allocation_exposure_schedule_id: The progressive rollout ID this trigger belongs to. + :type allocation_exposure_schedule_id: UUID + + :param created_at: The timestamp when this trigger was created. + :type created_at: datetime + + :param flagging_variant_id: The variant ID that triggered this event. + :type flagging_variant_id: UUID + + :param id: The unique identifier of the guardrail trigger. + :type id: UUID + + :param metric_id: The metric ID associated with the trigger. + :type metric_id: str + + :param triggered_action: The action that was triggered. + :type triggered_action: str + + :param updated_at: The timestamp when this trigger was last updated. + :type updated_at: datetime + """ + super().__init__(kwargs) + + + self_.allocation_exposure_schedule_id = allocation_exposure_schedule_id + self_.created_at = created_at + self_.flagging_variant_id = flagging_variant_id + self_.id = id + self_.metric_id = metric_id + self_.triggered_action = triggered_action + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/allocation_exposure_rollout_step.py b/datadog_api_client/v2/model/allocation_exposure_rollout_step.py new file mode 100644 index 0000000000..253ce408f5 --- /dev/null +++ b/datadog_api_client/v2/model/allocation_exposure_rollout_step.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AllocationExposureRolloutStep(ModelNormal): + validations = { + "exposure_ratio": { + "inclusive_maximum": 1, + "inclusive_minimum": 0, + }, + "grouped_step_index": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "allocation_exposure_schedule_id": (UUID,), + "created_at": (datetime,), + "exposure_ratio": (float,), + "grouped_step_index": (int,), + "id": (UUID,), + "interval_ms": (int, none_type), + "is_pause_record": (bool,), + "order_position": (int,), + "updated_at": (datetime,), + } + attribute_map = { + "allocation_exposure_schedule_id": "allocation_exposure_schedule_id", + "created_at": "created_at", + "exposure_ratio": "exposure_ratio", + "grouped_step_index": "grouped_step_index", + "id": "id", + "interval_ms": "interval_ms", + "is_pause_record": "is_pause_record", + "order_position": "order_position", + "updated_at": "updated_at", + } + + def __init__(self_, allocation_exposure_schedule_id: UUID, created_at: datetime, exposure_ratio: float, grouped_step_index: int, id: UUID, is_pause_record: bool, order_position: int, updated_at: datetime, interval_ms: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Exposure progression step details. + + :param allocation_exposure_schedule_id: The progressive rollout ID this step belongs to. + :type allocation_exposure_schedule_id: UUID + + :param created_at: The timestamp when the progression step was created. + :type created_at: datetime + + :param exposure_ratio: The exposure ratio for this step. + :type exposure_ratio: float + + :param grouped_step_index: Logical index grouping related steps. + :type grouped_step_index: int + + :param id: The unique identifier of the progression step. + :type id: UUID + + :param interval_ms: Step duration in milliseconds. + :type interval_ms: int, none_type, optional + + :param is_pause_record: Whether this step represents a pause record. + :type is_pause_record: bool + + :param order_position: Sort order for the progression step. + :type order_position: int + + :param updated_at: The timestamp when the progression step was last updated. + :type updated_at: datetime + """ + if interval_ms is not unset: + kwargs["interval_ms"] = interval_ms + super().__init__(kwargs) + + + self_.allocation_exposure_schedule_id = allocation_exposure_schedule_id + self_.created_at = created_at + self_.exposure_ratio = exposure_ratio + self_.grouped_step_index = grouped_step_index + self_.id = id + self_.is_pause_record = is_pause_record + self_.order_position = order_position + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/allocation_exposure_schedule.py b/datadog_api_client/v2/model/allocation_exposure_schedule.py new file mode 100644 index 0000000000..213f847765 --- /dev/null +++ b/datadog_api_client/v2/model/allocation_exposure_schedule.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.allocation_exposure_guardrail_trigger import AllocationExposureGuardrailTrigger + from datadog_api_client.v2.model.rollout_options import RolloutOptions + from datadog_api_client.v2.model.allocation_exposure_rollout_step import AllocationExposureRolloutStep + +class AllocationExposureSchedule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.allocation_exposure_guardrail_trigger import AllocationExposureGuardrailTrigger + from datadog_api_client.v2.model.rollout_options import RolloutOptions + from datadog_api_client.v2.model.allocation_exposure_rollout_step import AllocationExposureRolloutStep + return { + "absolute_start_time": (datetime, none_type), + "allocation_id": (UUID,), + "control_variant_id": (str, none_type), + "created_at": (datetime,), + "guardrail_triggered_action": (str, none_type), + "guardrail_triggers": ([AllocationExposureGuardrailTrigger],), + "id": (UUID,), + "rollout_options": (RolloutOptions,), + "rollout_steps": ([AllocationExposureRolloutStep],), + "updated_at": (datetime,), + } + attribute_map = { + "absolute_start_time": "absolute_start_time", + "allocation_id": "allocation_id", + "control_variant_id": "control_variant_id", + "created_at": "created_at", + "guardrail_triggered_action": "guardrail_triggered_action", + "guardrail_triggers": "guardrail_triggers", + "id": "id", + "rollout_options": "rollout_options", + "rollout_steps": "rollout_steps", + "updated_at": "updated_at", + } + + def __init__(self_, allocation_id: UUID, created_at: datetime, guardrail_triggers: List[AllocationExposureGuardrailTrigger], rollout_options: RolloutOptions, rollout_steps: List[AllocationExposureRolloutStep], updated_at: datetime, absolute_start_time: Union[datetime, none_type, UnsetType]=unset, control_variant_id: Union[str, none_type, UnsetType]=unset, guardrail_triggered_action: Union[str, none_type, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Progressive release details for a targeting rule allocation. + + :param absolute_start_time: The absolute UTC start time for this schedule. + :type absolute_start_time: datetime, none_type, optional + + :param allocation_id: The targeting rule allocation ID this progressive rollout belongs to. + :type allocation_id: UUID + + :param control_variant_id: The control variant ID used for experiment comparisons. + :type control_variant_id: str, none_type, optional + + :param created_at: The timestamp when the schedule was created. + :type created_at: datetime + + :param guardrail_triggered_action: Last guardrail action triggered for this schedule. + :type guardrail_triggered_action: str, none_type, optional + + :param guardrail_triggers: Guardrail trigger records for this schedule. + :type guardrail_triggers: [AllocationExposureGuardrailTrigger] + + :param id: The unique identifier of the progressive rollout. + :type id: UUID, optional + + :param rollout_options: Applied progression options for a progressive rollout. + :type rollout_options: RolloutOptions + + :param rollout_steps: Ordered progression steps for exposure. + :type rollout_steps: [AllocationExposureRolloutStep] + + :param updated_at: The timestamp when the schedule was last updated. + :type updated_at: datetime + """ + if absolute_start_time is not unset: + kwargs["absolute_start_time"] = absolute_start_time + if control_variant_id is not unset: + kwargs["control_variant_id"] = control_variant_id + if guardrail_triggered_action is not unset: + kwargs["guardrail_triggered_action"] = guardrail_triggered_action + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.allocation_id = allocation_id + self_.created_at = created_at + self_.guardrail_triggers = guardrail_triggers + self_.rollout_options = rollout_options + self_.rollout_steps = rollout_steps + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/allocation_exposure_schedule_data.py b/datadog_api_client/v2/model/allocation_exposure_schedule_data.py new file mode 100644 index 0000000000..0125b689db --- /dev/null +++ b/datadog_api_client/v2/model/allocation_exposure_schedule_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.allocation_exposure_schedule import AllocationExposureSchedule + from datadog_api_client.v2.model.allocation_exposure_schedule_data_type import AllocationExposureScheduleDataType + +class AllocationExposureScheduleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.allocation_exposure_schedule import AllocationExposureSchedule + from datadog_api_client.v2.model.allocation_exposure_schedule_data_type import AllocationExposureScheduleDataType + return { + "attributes": (AllocationExposureSchedule,), + "id": (UUID,), + "type": (AllocationExposureScheduleDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AllocationExposureSchedule, id: UUID, type: AllocationExposureScheduleDataType, **kwargs): + """ + Data wrapper for progressive rollout schedule responses. + + :param attributes: Progressive release details for a targeting rule allocation. + :type attributes: AllocationExposureSchedule + + :param id: The unique identifier of the progressive rollout. + :type id: UUID + + :param type: The resource type for progressive rollout schedules. + :type type: AllocationExposureScheduleDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/allocation_exposure_schedule_data_type.py b/datadog_api_client/v2/model/allocation_exposure_schedule_data_type.py new file mode 100644 index 0000000000..3db20fb030 --- /dev/null +++ b/datadog_api_client/v2/model/allocation_exposure_schedule_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AllocationExposureScheduleDataType(ModelSimple): + """ + The resource type for progressive rollout schedules. + + :param value: If omitted defaults to "allocation_exposure_schedules". Must be one of ["allocation_exposure_schedules"]. + :type value: str + """ + + allowed_values = { + "allocation_exposure_schedules", + } + ALLOCATION_EXPOSURE_SCHEDULES: ClassVar["AllocationExposureScheduleDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AllocationExposureScheduleDataType.ALLOCATION_EXPOSURE_SCHEDULES = AllocationExposureScheduleDataType("allocation_exposure_schedules") diff --git a/datadog_api_client/v2/model/allocation_exposure_schedule_response.py b/datadog_api_client/v2/model/allocation_exposure_schedule_response.py new file mode 100644 index 0000000000..9bf5e194bd --- /dev/null +++ b/datadog_api_client/v2/model/allocation_exposure_schedule_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.allocation_exposure_schedule_data import AllocationExposureScheduleData + +class AllocationExposureScheduleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.allocation_exposure_schedule_data import AllocationExposureScheduleData + return { + "data": (AllocationExposureScheduleData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AllocationExposureScheduleData, **kwargs): + """ + Response containing a progressive rollout schedule. + + :param data: Data wrapper for progressive rollout schedule responses. + :type data: AllocationExposureScheduleData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/allocation_response.py b/datadog_api_client/v2/model/allocation_response.py new file mode 100644 index 0000000000..504b664b4c --- /dev/null +++ b/datadog_api_client/v2/model/allocation_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.allocation_data_response import AllocationDataResponse + +class AllocationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.allocation_data_response import AllocationDataResponse + return { + "data": (AllocationDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AllocationDataResponse, **kwargs): + """ + Response containing a single targeting rule (allocation). + + :param data: Data wrapper for targeting rule allocation responses. + :type data: AllocationDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/allocation_type.py b/datadog_api_client/v2/model/allocation_type.py new file mode 100644 index 0000000000..cf207dec67 --- /dev/null +++ b/datadog_api_client/v2/model/allocation_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AllocationType(ModelSimple): + """ + The type of targeting rule (called allocation in the API model). + + :param value: Must be one of ["FEATURE_GATE", "CANARY"]. + :type value: str + """ + + allowed_values = { + "FEATURE_GATE", + "CANARY", + } + FEATURE_GATE: ClassVar["AllocationType"] + CANARY: ClassVar["AllocationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AllocationType.FEATURE_GATE = AllocationType("FEATURE_GATE") +AllocationType.CANARY = AllocationType("CANARY") diff --git a/datadog_api_client/v2/model/analysis_edit.py b/datadog_api_client/v2/model/analysis_edit.py new file mode 100644 index 0000000000..ee9406ee64 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_edit.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_edit_type import AnalysisEditType + from datadog_api_client.v2.model.analysis_position import AnalysisPosition + +class AnalysisEdit(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_edit_type import AnalysisEditType + from datadog_api_client.v2.model.analysis_position import AnalysisPosition + return { + "content": (str, none_type), + "edit_type": (AnalysisEditType,), + "end": (AnalysisPosition,), + "start": (AnalysisPosition,), + } + attribute_map = { + "content": "content", + "edit_type": "edit_type", + "end": "end", + "start": "start", + } + + def __init__(self_, content: Union[str, none_type], edit_type: AnalysisEditType, end: AnalysisPosition, start: AnalysisPosition, **kwargs): + """ + A single edit operation within a fix suggestion for a rule violation. + + :param content: The content to insert or replace at the specified position, if applicable. + :type content: str, none_type + + :param edit_type: The type of code edit to apply when fixing a violation. + :type edit_type: AnalysisEditType + + :param end: A position in source code, identified by line and column numbers. + :type end: AnalysisPosition + + :param start: A position in source code, identified by line and column numbers. + :type start: AnalysisPosition + """ + super().__init__(kwargs) + + + self_.content = content + self_.edit_type = edit_type + self_.end = end + self_.start = start diff --git a/datadog_api_client/v2/model/analysis_edit_type.py b/datadog_api_client/v2/model/analysis_edit_type.py new file mode 100644 index 0000000000..0f8f544c99 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_edit_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnalysisEditType(ModelSimple): + """ + The type of code edit to apply when fixing a violation. + + :param value: If omitted defaults to "ADD". Must be one of ["ADD", "UPDATE", "REMOVE"]. + :type value: str + """ + + allowed_values = { + "ADD", + "UPDATE", + "REMOVE", + } + ADD: ClassVar["AnalysisEditType"] + UPDATE: ClassVar["AnalysisEditType"] + REMOVE: ClassVar["AnalysisEditType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnalysisEditType.ADD = AnalysisEditType("ADD") +AnalysisEditType.UPDATE = AnalysisEditType("UPDATE") +AnalysisEditType.REMOVE = AnalysisEditType("REMOVE") diff --git a/datadog_api_client/v2/model/analysis_fix.py b/datadog_api_client/v2/model/analysis_fix.py new file mode 100644 index 0000000000..6132e510e7 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_fix.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_edit import AnalysisEdit + +class AnalysisFix(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_edit import AnalysisEdit + return { + "description": (str,), + "edits": ([AnalysisEdit],), + } + attribute_map = { + "description": "description", + "edits": "edits", + } + + def __init__(self_, description: str, edits: List[AnalysisEdit], **kwargs): + """ + A fix suggestion for a rule violation, consisting of one or more edit operations. + + :param description: A human-readable description of what the fix does. + :type description: str + + :param edits: The list of edit operations that constitute the fix. + :type edits: [AnalysisEdit] + """ + super().__init__(kwargs) + + + self_.description = description + self_.edits = edits diff --git a/datadog_api_client/v2/model/analysis_position.py b/datadog_api_client/v2/model/analysis_position.py new file mode 100644 index 0000000000..be3cfcaf0e --- /dev/null +++ b/datadog_api_client/v2/model/analysis_position.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnalysisPosition(ModelNormal): + @cached_property + def openapi_types(_): + return { + "col": (int,), + "line": (int,), + } + attribute_map = { + "col": "col", + "line": "line", + } + + def __init__(self_, col: int, line: int, **kwargs): + """ + A position in source code, identified by line and column numbers. + + :param col: The column number in the source file (1-based). + :type col: int + + :param line: The line number in the source file (1-based). + :type line: int + """ + super().__init__(kwargs) + + + self_.col = col + self_.line = line diff --git a/datadog_api_client/v2/model/analysis_request.py b/datadog_api_client/v2/model/analysis_request.py new file mode 100644 index 0000000000..6c794a6814 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_request_data import AnalysisRequestData + +class AnalysisRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_request_data import AnalysisRequestData + return { + "data": (AnalysisRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AnalysisRequestData, **kwargs): + """ + The request payload for running static analysis on source code. + + :param data: The primary data object in the analysis request. + :type data: AnalysisRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/analysis_request_data.py b/datadog_api_client/v2/model/analysis_request_data.py new file mode 100644 index 0000000000..2064ea8d68 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_request_data_attributes import AnalysisRequestDataAttributes + from datadog_api_client.v2.model.analysis_request_data_type import AnalysisRequestDataType + +class AnalysisRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_request_data_attributes import AnalysisRequestDataAttributes + from datadog_api_client.v2.model.analysis_request_data_type import AnalysisRequestDataType + return { + "attributes": (AnalysisRequestDataAttributes,), + "id": (str,), + "type": (AnalysisRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AnalysisRequestDataAttributes, type: AnalysisRequestDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The primary data object in the analysis request. + + :param attributes: The attributes of the analysis request, containing the source code and rules to apply. + :type attributes: AnalysisRequestDataAttributes + + :param id: An optional identifier for the analysis request resource. + :type id: str, optional + + :param type: Analysis request resource type. + :type type: AnalysisRequestDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/analysis_request_data_attributes.py b/datadog_api_client/v2/model/analysis_request_data_attributes.py new file mode 100644 index 0000000000..0e7d6a6e85 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_request_data_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_request_rule import AnalysisRequestRule + +class AnalysisRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_request_rule import AnalysisRequestRule + return { + "code": (str,), + "file_encoding": (str,), + "filename": (str,), + "language": (str,), + "rules": ([AnalysisRequestRule],), + } + attribute_map = { + "code": "code", + "file_encoding": "file_encoding", + "filename": "filename", + "language": "language", + "rules": "rules", + } + + def __init__(self_, code: str, file_encoding: str, filename: str, language: str, rules: List[AnalysisRequestRule], **kwargs): + """ + The attributes of the analysis request, containing the source code and rules to apply. + + :param code: The base64-encoded source code to analyze. + :type code: str + + :param file_encoding: The encoding of the source code file (must be ``utf-8`` ). + :type file_encoding: str + + :param filename: The name of the file being analyzed. + :type filename: str + + :param language: The programming language of the source code. + :type language: str + + :param rules: The list of static analysis rules to apply during analysis. + :type rules: [AnalysisRequestRule] + """ + super().__init__(kwargs) + + + self_.code = code + self_.file_encoding = file_encoding + self_.filename = filename + self_.language = language + self_.rules = rules diff --git a/datadog_api_client/v2/model/analysis_request_data_type.py b/datadog_api_client/v2/model/analysis_request_data_type.py new file mode 100644 index 0000000000..6698d840ce --- /dev/null +++ b/datadog_api_client/v2/model/analysis_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnalysisRequestDataType(ModelSimple): + """ + Analysis request resource type. + + :param value: If omitted defaults to "analysis_request". Must be one of ["analysis_request"]. + :type value: str + """ + + allowed_values = { + "analysis_request", + } + ANALYSIS_REQUEST: ClassVar["AnalysisRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnalysisRequestDataType.ANALYSIS_REQUEST = AnalysisRequestDataType("analysis_request") diff --git a/datadog_api_client/v2/model/analysis_request_rule.py b/datadog_api_client/v2/model/analysis_request_rule.py new file mode 100644 index 0000000000..e6e104910b --- /dev/null +++ b/datadog_api_client/v2/model/analysis_request_rule.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnalysisRequestRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "category": (str,), + "checksum": (str,), + "code": (str,), + "entity_checked": (str, none_type), + "id": (str,), + "language": (str,), + "regex": (str, none_type), + "severity": (str,), + "tree_sitter_query": (str,), + "type": (str,), + } + attribute_map = { + "category": "category", + "checksum": "checksum", + "code": "code", + "entity_checked": "entity_checked", + "id": "id", + "language": "language", + "regex": "regex", + "severity": "severity", + "tree_sitter_query": "tree_sitter_query", + "type": "type", + } + + def __init__(self_, category: str, checksum: str, code: str, id: str, language: str, severity: str, tree_sitter_query: str, type: str, entity_checked: Union[str, none_type, UnsetType]=unset, regex: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + A static analysis rule to apply during code analysis. + + :param category: The category of the rule (for example, ``BEST_PRACTICES`` , ``SECURITY`` ). + :type category: str + + :param checksum: A checksum of the rule definition. + :type checksum: str + + :param code: The base64-encoded rule implementation code. + :type code: str + + :param entity_checked: The code entity type checked by the rule, applicable when rule type is ``AST_CHECK``. + :type entity_checked: str, none_type, optional + + :param id: The unique identifier of the rule. + :type id: str + + :param language: The programming language this rule targets. + :type language: str + + :param regex: A base64-encoded regex pattern used by the rule, applicable when rule type is ``REGEX``. + :type regex: str, none_type, optional + + :param severity: The severity of findings from this rule (for example, ``ERROR`` , ``WARNING`` ). + :type severity: str + + :param tree_sitter_query: The base64-encoded tree-sitter query used by the rule. + :type tree_sitter_query: str + + :param type: The rule type indicating the detection mechanism (for example, ``TREE_SITTER_QUERY`` ). + :type type: str + """ + if entity_checked is not unset: + kwargs["entity_checked"] = entity_checked + if regex is not unset: + kwargs["regex"] = regex + super().__init__(kwargs) + + + self_.category = category + self_.checksum = checksum + self_.code = code + self_.id = id + self_.language = language + self_.severity = severity + self_.tree_sitter_query = tree_sitter_query + self_.type = type diff --git a/datadog_api_client/v2/model/analysis_response.py b/datadog_api_client/v2/model/analysis_response.py new file mode 100644 index 0000000000..bc0d770f33 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_response_data import AnalysisResponseData + +class AnalysisResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_response_data import AnalysisResponseData + return { + "data": (AnalysisResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AnalysisResponseData, **kwargs): + """ + The response payload from running static analysis on source code. + + :param data: The primary data object in the analysis response. + :type data: AnalysisResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/analysis_response_data.py b/datadog_api_client/v2/model/analysis_response_data.py new file mode 100644 index 0000000000..f1a72ed1c9 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_response_data_attributes import AnalysisResponseDataAttributes + from datadog_api_client.v2.model.analysis_response_data_type import AnalysisResponseDataType + +class AnalysisResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_response_data_attributes import AnalysisResponseDataAttributes + from datadog_api_client.v2.model.analysis_response_data_type import AnalysisResponseDataType + return { + "attributes": (AnalysisResponseDataAttributes,), + "id": (str,), + "type": (AnalysisResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AnalysisResponseDataAttributes, id: str, type: AnalysisResponseDataType, **kwargs): + """ + The primary data object in the analysis response. + + :param attributes: The attributes of the analysis response, containing rule results and any top-level errors. + :type attributes: AnalysisResponseDataAttributes + + :param id: The unique identifier of the analysis response resource. + :type id: str + + :param type: Analysis response resource type. + :type type: AnalysisResponseDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/analysis_response_data_attributes.py b/datadog_api_client/v2/model/analysis_response_data_attributes.py new file mode 100644 index 0000000000..2e81cd5409 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_response_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_rule_response import AnalysisRuleResponse + +class AnalysisResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_rule_response import AnalysisRuleResponse + return { + "errors": ([str],), + "rule_responses": ([AnalysisRuleResponse],), + } + attribute_map = { + "errors": "errors", + "rule_responses": "rule_responses", + } + + def __init__(self_, errors: List[str], rule_responses: List[AnalysisRuleResponse], **kwargs): + """ + The attributes of the analysis response, containing rule results and any top-level errors. + + :param errors: Top-level error messages encountered during the analysis operation. + :type errors: [str] + + :param rule_responses: The list of results for each static analysis rule applied during analysis. + :type rule_responses: [AnalysisRuleResponse] + """ + super().__init__(kwargs) + + + self_.errors = errors + self_.rule_responses = rule_responses diff --git a/datadog_api_client/v2/model/analysis_response_data_type.py b/datadog_api_client/v2/model/analysis_response_data_type.py new file mode 100644 index 0000000000..f0a0971ab4 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnalysisResponseDataType(ModelSimple): + """ + Analysis response resource type. + + :param value: If omitted defaults to "server_request". Must be one of ["server_request"]. + :type value: str + """ + + allowed_values = { + "server_request", + } + SERVER_REQUEST: ClassVar["AnalysisResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnalysisResponseDataType.SERVER_REQUEST = AnalysisResponseDataType("server_request") diff --git a/datadog_api_client/v2/model/analysis_rule_response.py b/datadog_api_client/v2/model/analysis_rule_response.py new file mode 100644 index 0000000000..e6e4d3d0ed --- /dev/null +++ b/datadog_api_client/v2/model/analysis_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_violation import AnalysisViolation + +class AnalysisRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_violation import AnalysisViolation + return { + "errors": ([str],), + "execution_error": (str, none_type), + "execution_time_ms": (int,), + "identifier": (str,), + "output": (str,), + "violations": ([AnalysisViolation],), + } + attribute_map = { + "errors": "errors", + "execution_error": "execution_error", + "execution_time_ms": "execution_time_ms", + "identifier": "identifier", + "output": "output", + "violations": "violations", + } + + def __init__(self_, errors: List[str], execution_error: Union[str, none_type], execution_time_ms: int, identifier: str, output: str, violations: List[AnalysisViolation], **kwargs): + """ + The result of applying a single static analysis rule to the analyzed source code. + + :param errors: A list of error messages encountered while executing the rule. + :type errors: [str] + + :param execution_error: An error message if the rule execution failed, or null if execution succeeded. + :type execution_error: str, none_type + + :param execution_time_ms: The time taken to execute the rule, in milliseconds. + :type execution_time_ms: int + + :param identifier: The identifier of the rule that produced this response. + :type identifier: str + + :param output: The raw output produced by the rule engine during execution. + :type output: str + + :param violations: The list of violations found by this rule. + :type violations: [AnalysisViolation] + """ + super().__init__(kwargs) + + + self_.errors = errors + self_.execution_error = execution_error + self_.execution_time_ms = execution_time_ms + self_.identifier = identifier + self_.output = output + self_.violations = violations diff --git a/datadog_api_client/v2/model/analysis_violation.py b/datadog_api_client/v2/model/analysis_violation.py new file mode 100644 index 0000000000..2ab7816637 --- /dev/null +++ b/datadog_api_client/v2/model/analysis_violation.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.analysis_position import AnalysisPosition + from datadog_api_client.v2.model.analysis_fix import AnalysisFix + +class AnalysisViolation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.analysis_position import AnalysisPosition + from datadog_api_client.v2.model.analysis_fix import AnalysisFix + return { + "category": (str,), + "end": (AnalysisPosition,), + "fixes": ([AnalysisFix],), + "message": (str,), + "severity": (str,), + "start": (AnalysisPosition,), + } + attribute_map = { + "category": "category", + "end": "end", + "fixes": "fixes", + "message": "message", + "severity": "severity", + "start": "start", + } + + def __init__(self_, category: str, end: AnalysisPosition, fixes: List[AnalysisFix], message: str, severity: str, start: AnalysisPosition, **kwargs): + """ + A rule violation found in the analyzed source code. + + :param category: The category of the violation. + :type category: str + + :param end: A position in source code, identified by line and column numbers. + :type end: AnalysisPosition + + :param fixes: The list of suggested fixes for this violation. + :type fixes: [AnalysisFix] + + :param message: A human-readable description of the violation. + :type message: str + + :param severity: The severity level of the violation. + :type severity: str + + :param start: A position in source code, identified by line and column numbers. + :type start: AnalysisPosition + """ + super().__init__(kwargs) + + + self_.category = category + self_.end = end + self_.fixes = fixes + self_.message = message + self_.severity = severity + self_.start = start diff --git a/datadog_api_client/v2/model/annotation.py b/datadog_api_client/v2/model/annotation.py new file mode 100644 index 0000000000..72bbbd5815 --- /dev/null +++ b/datadog_api_client/v2/model/annotation.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_display import AnnotationDisplay + from datadog_api_client.v2.model.annotation_markdown_text_annotation import AnnotationMarkdownTextAnnotation + +class Annotation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_display import AnnotationDisplay + from datadog_api_client.v2.model.annotation_markdown_text_annotation import AnnotationMarkdownTextAnnotation + return { + "display": (AnnotationDisplay,), + "id": (str,), + "markdown_text_annotation": (AnnotationMarkdownTextAnnotation,), + } + attribute_map = { + "display": "display", + "id": "id", + "markdown_text_annotation": "markdownTextAnnotation", + } + + def __init__(self_, display: AnnotationDisplay, id: str, markdown_text_annotation: AnnotationMarkdownTextAnnotation, **kwargs): + """ + A list of annotations used in the workflow. These are like sticky notes for your workflow! + + :param display: The definition of ``AnnotationDisplay`` object. + :type display: AnnotationDisplay + + :param id: The ``Annotation`` ``id``. + :type id: str + + :param markdown_text_annotation: The definition of ``AnnotationMarkdownTextAnnotation`` object. + :type markdown_text_annotation: AnnotationMarkdownTextAnnotation + """ + super().__init__(kwargs) + + + self_.display = display + self_.id = id + self_.markdown_text_annotation = markdown_text_annotation diff --git a/datadog_api_client/v2/model/annotation_attributes.py b/datadog_api_client/v2/model/annotation_attributes.py new file mode 100644 index 0000000000..94b60d511f --- /dev/null +++ b/datadog_api_client/v2/model/annotation_attributes.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_color import AnnotationColor + from datadog_api_client.v2.model.annotation_kind import AnnotationKind + +class AnnotationAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_color import AnnotationColor + from datadog_api_client.v2.model.annotation_kind import AnnotationKind + return { + "author_id": (str,), + "color": (AnnotationColor,), + "created_at": (int,), + "description": (str,), + "end_time": (int, none_type), + "modified_at": (int,), + "page_id": (str,), + "start_time": (int,), + "type": (AnnotationKind,), + "widget_ids": ([str],), + } + attribute_map = { + "author_id": "author_id", + "color": "color", + "created_at": "created_at", + "description": "description", + "end_time": "end_time", + "modified_at": "modified_at", + "page_id": "page_id", + "start_time": "start_time", + "type": "type", + "widget_ids": "widget_ids", + } + + def __init__(self_, author_id: str, color: AnnotationColor, created_at: int, description: str, end_time: Union[int, none_type], modified_at: int, page_id: str, start_time: int, type: AnnotationKind, widget_ids: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of an annotation returned in a response. + + :param author_id: Identifier of the user who created the annotation. + :type author_id: str + + :param color: Color used to render the annotation in the UI. + :type color: AnnotationColor + + :param created_at: Creation time of the annotation in milliseconds since the Unix epoch. + :type created_at: int + + :param description: User-defined text attached to the annotation. + :type description: str + + :param end_time: End time of the annotation in milliseconds since the Unix epoch. Null for ``pointInTime`` annotations. + :type end_time: int, none_type + + :param modified_at: Last modification time of the annotation in milliseconds since the Unix epoch. + :type modified_at: int + + :param page_id: ID of the page the annotation belongs to, prefixed with the page type and joined by a colon + (for example, ``dashboard:abc-def-xyz`` or ``notebook:1234567890`` ). + :type page_id: str + + :param start_time: Start time of the annotation in milliseconds since the Unix epoch. + :type start_time: int + + :param type: Kind of annotation. ``pointInTime`` annotations mark a single moment in time, + while ``timeRegion`` annotations span a window of time and require an ``end_time``. + :type type: AnnotationKind + + :param widget_ids: IDs of widgets the annotation is associated with. When empty or omitted, the annotation applies to the whole page. + :type widget_ids: [str], optional + """ + if widget_ids is not unset: + kwargs["widget_ids"] = widget_ids + super().__init__(kwargs) + + + self_.author_id = author_id + self_.color = color + self_.created_at = created_at + self_.description = description + self_.end_time = end_time + self_.modified_at = modified_at + self_.page_id = page_id + self_.start_time = start_time + self_.type = type diff --git a/datadog_api_client/v2/model/annotation_color.py b/datadog_api_client/v2/model/annotation_color.py new file mode 100644 index 0000000000..53171888c4 --- /dev/null +++ b/datadog_api_client/v2/model/annotation_color.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnnotationColor(ModelSimple): + """ + Color used to render the annotation in the UI. + + :param value: Must be one of ["gray", "blue", "purple", "green", "yellow", "red"]. + :type value: str + """ + + allowed_values = { + "gray", + "blue", + "purple", + "green", + "yellow", + "red", + } + GRAY: ClassVar["AnnotationColor"] + BLUE: ClassVar["AnnotationColor"] + PURPLE: ClassVar["AnnotationColor"] + GREEN: ClassVar["AnnotationColor"] + YELLOW: ClassVar["AnnotationColor"] + RED: ClassVar["AnnotationColor"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnnotationColor.GRAY = AnnotationColor("gray") +AnnotationColor.BLUE = AnnotationColor("blue") +AnnotationColor.PURPLE = AnnotationColor("purple") +AnnotationColor.GREEN = AnnotationColor("green") +AnnotationColor.YELLOW = AnnotationColor("yellow") +AnnotationColor.RED = AnnotationColor("red") diff --git a/datadog_api_client/v2/model/annotation_create_attributes.py b/datadog_api_client/v2/model/annotation_create_attributes.py new file mode 100644 index 0000000000..c784ee028a --- /dev/null +++ b/datadog_api_client/v2/model/annotation_create_attributes.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_color import AnnotationColor + from datadog_api_client.v2.model.annotation_kind import AnnotationKind + +class AnnotationCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_color import AnnotationColor + from datadog_api_client.v2.model.annotation_kind import AnnotationKind + return { + "color": (AnnotationColor,), + "description": (str,), + "end_time": (int, none_type), + "page_id": (str,), + "start_time": (int,), + "type": (AnnotationKind,), + "widget_ids": ([str],), + } + attribute_map = { + "color": "color", + "description": "description", + "end_time": "end_time", + "page_id": "page_id", + "start_time": "start_time", + "type": "type", + "widget_ids": "widget_ids", + } + + def __init__(self_, color: AnnotationColor, description: str, page_id: str, start_time: int, type: AnnotationKind, end_time: Union[int, none_type, UnsetType]=unset, widget_ids: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating an annotation. + + :param color: Color used to render the annotation in the UI. + :type color: AnnotationColor + + :param description: User-defined text attached to the annotation. + :type description: str + + :param end_time: End time of the annotation in milliseconds since the Unix epoch. Required for ``timeRegion`` annotations; omit or set to null for ``pointInTime`` annotations. + :type end_time: int, none_type, optional + + :param page_id: ID of the page the annotation belongs to, prefixed with the page type and joined by a colon + (for example, ``dashboard:abc-def-xyz`` or ``notebook:1234567890`` ). + :type page_id: str + + :param start_time: Start time of the annotation in milliseconds since the Unix epoch. + :type start_time: int + + :param type: Kind of annotation. ``pointInTime`` annotations mark a single moment in time, + while ``timeRegion`` annotations span a window of time and require an ``end_time``. + :type type: AnnotationKind + + :param widget_ids: IDs of widgets the annotation is associated with. When empty or omitted, the annotation applies to the whole page. + :type widget_ids: [str], optional + """ + if end_time is not unset: + kwargs["end_time"] = end_time + if widget_ids is not unset: + kwargs["widget_ids"] = widget_ids + super().__init__(kwargs) + + + self_.color = color + self_.description = description + self_.page_id = page_id + self_.start_time = start_time + self_.type = type diff --git a/datadog_api_client/v2/model/annotation_create_request.py b/datadog_api_client/v2/model/annotation_create_request.py new file mode 100644 index 0000000000..51a63654ae --- /dev/null +++ b/datadog_api_client/v2/model/annotation_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_request_data import AnnotationRequestData + +class AnnotationCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_request_data import AnnotationRequestData + return { + "data": (AnnotationRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AnnotationRequestData, **kwargs): + """ + Request body for creating an annotation. + + :param data: Data for creating an annotation. + :type data: AnnotationRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/annotation_data.py b/datadog_api_client/v2/model/annotation_data.py new file mode 100644 index 0000000000..9b256910c6 --- /dev/null +++ b/datadog_api_client/v2/model/annotation_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_attributes import AnnotationAttributes + from datadog_api_client.v2.model.annotation_type import AnnotationType + +class AnnotationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_attributes import AnnotationAttributes + from datadog_api_client.v2.model.annotation_type import AnnotationType + return { + "attributes": (AnnotationAttributes,), + "id": (UUID,), + "type": (AnnotationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AnnotationAttributes, id: UUID, type: AnnotationType, **kwargs): + """ + A single annotation resource. + + :param attributes: Attributes of an annotation returned in a response. + :type attributes: AnnotationAttributes + + :param id: Unique identifier of the annotation. + :type id: UUID + + :param type: Annotation resource type. + :type type: AnnotationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/annotation_display.py b/datadog_api_client/v2/model/annotation_display.py new file mode 100644 index 0000000000..999ee2c676 --- /dev/null +++ b/datadog_api_client/v2/model/annotation_display.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_display_bounds import AnnotationDisplayBounds + +class AnnotationDisplay(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_display_bounds import AnnotationDisplayBounds + return { + "bounds": (AnnotationDisplayBounds,), + } + attribute_map = { + "bounds": "bounds", + } + + def __init__(self_, bounds: Union[AnnotationDisplayBounds, UnsetType]=unset, **kwargs): + """ + The definition of ``AnnotationDisplay`` object. + + :param bounds: The definition of ``AnnotationDisplayBounds`` object. + :type bounds: AnnotationDisplayBounds, optional + """ + if bounds is not unset: + kwargs["bounds"] = bounds + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/annotation_display_bounds.py b/datadog_api_client/v2/model/annotation_display_bounds.py new file mode 100644 index 0000000000..5355d844df --- /dev/null +++ b/datadog_api_client/v2/model/annotation_display_bounds.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnnotationDisplayBounds(ModelNormal): + @cached_property + def openapi_types(_): + return { + "height": (float,), + "width": (float,), + "x": (float,), + "y": (float,), + } + attribute_map = { + "height": "height", + "width": "width", + "x": "x", + "y": "y", + } + + def __init__(self_, height: Union[float, UnsetType]=unset, width: Union[float, UnsetType]=unset, x: Union[float, UnsetType]=unset, y: Union[float, UnsetType]=unset, **kwargs): + """ + The definition of ``AnnotationDisplayBounds`` object. + + :param height: The ``bounds`` ``height``. + :type height: float, optional + + :param width: The ``bounds`` ``width``. + :type width: float, optional + + :param x: The ``bounds`` ``x``. + :type x: float, optional + + :param y: The ``bounds`` ``y``. + :type y: float, optional + """ + if height is not unset: + kwargs["height"] = height + if width is not unset: + kwargs["width"] = width + if x is not unset: + kwargs["x"] = x + if y is not unset: + kwargs["y"] = y + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/annotation_in_page.py b/datadog_api_client/v2/model/annotation_in_page.py new file mode 100644 index 0000000000..bc2034d2db --- /dev/null +++ b/datadog_api_client/v2/model/annotation_in_page.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_color import AnnotationColor + from datadog_api_client.v2.model.annotation_kind import AnnotationKind + +class AnnotationInPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_color import AnnotationColor + from datadog_api_client.v2.model.annotation_kind import AnnotationKind + return { + "author_id": (str,), + "color": (AnnotationColor,), + "created_at": (int,), + "description": (str,), + "end_time": (int, none_type), + "id": (UUID,), + "modified_at": (int,), + "page_id": (str,), + "start_time": (int,), + "type": (AnnotationKind,), + "widget_ids": ([str],), + } + attribute_map = { + "author_id": "author_id", + "color": "color", + "created_at": "created_at", + "description": "description", + "end_time": "end_time", + "id": "id", + "modified_at": "modified_at", + "page_id": "page_id", + "start_time": "start_time", + "type": "type", + "widget_ids": "widget_ids", + } + + def __init__(self_, author_id: str, color: AnnotationColor, created_at: int, description: str, end_time: Union[int, none_type], id: UUID, modified_at: int, page_id: str, start_time: int, type: AnnotationKind, widget_ids: Union[List[str], UnsetType]=unset, **kwargs): + """ + A flat annotation object as it appears within a page annotations response. + + :param author_id: Identifier of the user who created the annotation. + :type author_id: str + + :param color: Color used to render the annotation in the UI. + :type color: AnnotationColor + + :param created_at: Creation time of the annotation in milliseconds since the Unix epoch. + :type created_at: int + + :param description: User-defined text attached to the annotation. + :type description: str + + :param end_time: End time of the annotation in milliseconds since the Unix epoch. Null for ``pointInTime`` annotations. + :type end_time: int, none_type + + :param id: Unique identifier of the annotation. + :type id: UUID + + :param modified_at: Last modification time of the annotation in milliseconds since the Unix epoch. + :type modified_at: int + + :param page_id: ID of the page the annotation belongs to, prefixed with the page type and joined by a colon + (for example, ``dashboard:abc-def-xyz`` or ``notebook:1234567890`` ). + :type page_id: str + + :param start_time: Start time of the annotation in milliseconds since the Unix epoch. + :type start_time: int + + :param type: Kind of annotation. ``pointInTime`` annotations mark a single moment in time, + while ``timeRegion`` annotations span a window of time and require an ``end_time``. + :type type: AnnotationKind + + :param widget_ids: IDs of widgets the annotation is associated with. When empty or omitted, the annotation applies to the whole page. + :type widget_ids: [str], optional + """ + if widget_ids is not unset: + kwargs["widget_ids"] = widget_ids + super().__init__(kwargs) + + + self_.author_id = author_id + self_.color = color + self_.created_at = created_at + self_.description = description + self_.end_time = end_time + self_.id = id + self_.modified_at = modified_at + self_.page_id = page_id + self_.start_time = start_time + self_.type = type diff --git a/datadog_api_client/v2/model/annotation_kind.py b/datadog_api_client/v2/model/annotation_kind.py new file mode 100644 index 0000000000..228c2e4e52 --- /dev/null +++ b/datadog_api_client/v2/model/annotation_kind.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnnotationKind(ModelSimple): + """ + Kind of annotation. `pointInTime` annotations mark a single moment in time, + while `timeRegion` annotations span a window of time and require an `end_time`. + + :param value: Must be one of ["pointInTime", "timeRegion"]. + :type value: str + """ + + allowed_values = { + "pointInTime", + "timeRegion", + } + POINT_IN_TIME: ClassVar["AnnotationKind"] + TIME_REGION: ClassVar["AnnotationKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnnotationKind.POINT_IN_TIME = AnnotationKind("pointInTime") +AnnotationKind.TIME_REGION = AnnotationKind("timeRegion") diff --git a/datadog_api_client/v2/model/annotation_markdown_text_annotation.py b/datadog_api_client/v2/model/annotation_markdown_text_annotation.py new file mode 100644 index 0000000000..8f12f37403 --- /dev/null +++ b/datadog_api_client/v2/model/annotation_markdown_text_annotation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnnotationMarkdownTextAnnotation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "text": (str,), + } + attribute_map = { + "text": "text", + } + + def __init__(self_, text: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``AnnotationMarkdownTextAnnotation`` object. + + :param text: The ``markdownTextAnnotation`` ``text``. + :type text: str, optional + """ + if text is not unset: + kwargs["text"] = text + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/annotation_request_data.py b/datadog_api_client/v2/model/annotation_request_data.py new file mode 100644 index 0000000000..53f7676a10 --- /dev/null +++ b/datadog_api_client/v2/model/annotation_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_create_attributes import AnnotationCreateAttributes + from datadog_api_client.v2.model.annotation_type import AnnotationType + +class AnnotationRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_create_attributes import AnnotationCreateAttributes + from datadog_api_client.v2.model.annotation_type import AnnotationType + return { + "attributes": (AnnotationCreateAttributes,), + "type": (AnnotationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AnnotationCreateAttributes, type: AnnotationType, **kwargs): + """ + Data for creating an annotation. + + :param attributes: Attributes for creating or updating an annotation. + :type attributes: AnnotationCreateAttributes + + :param type: Annotation resource type. + :type type: AnnotationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/annotation_response.py b/datadog_api_client/v2/model/annotation_response.py new file mode 100644 index 0000000000..b6f1f1f851 --- /dev/null +++ b/datadog_api_client/v2/model/annotation_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_data import AnnotationData + +class AnnotationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_data import AnnotationData + return { + "data": (AnnotationData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AnnotationData, **kwargs): + """ + Response containing a single annotation. + + :param data: A single annotation resource. + :type data: AnnotationData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/annotation_type.py b/datadog_api_client/v2/model/annotation_type.py new file mode 100644 index 0000000000..14d637002e --- /dev/null +++ b/datadog_api_client/v2/model/annotation_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnnotationType(ModelSimple): + """ + Annotation resource type. + + :param value: If omitted defaults to "annotation". Must be one of ["annotation"]. + :type value: str + """ + + allowed_values = { + "annotation", + } + ANNOTATION: ClassVar["AnnotationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnnotationType.ANNOTATION = AnnotationType("annotation") diff --git a/datadog_api_client/v2/model/annotation_update_request.py b/datadog_api_client/v2/model/annotation_update_request.py new file mode 100644 index 0000000000..e2d891708f --- /dev/null +++ b/datadog_api_client/v2/model/annotation_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_request_data import AnnotationRequestData + +class AnnotationUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_request_data import AnnotationRequestData + return { + "data": (AnnotationRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AnnotationRequestData, **kwargs): + """ + Request body for updating an annotation. + + :param data: Data for creating an annotation. + :type data: AnnotationRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/annotations_in_page_map.py b/datadog_api_client/v2/model/annotations_in_page_map.py new file mode 100644 index 0000000000..8f20cf0b00 --- /dev/null +++ b/datadog_api_client/v2/model/annotations_in_page_map.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_in_page import AnnotationInPage + +class AnnotationsInPageMap(ModelNormal): + @cached_property + def additional_properties_type(_): + from datadog_api_client.v2.model.annotation_in_page import AnnotationInPage + return (AnnotationInPage,) + + def __init__(self_, **kwargs): + """ + Map of annotation UUID to annotation object, keyed by annotation ID. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/annotations_response.py b/datadog_api_client/v2/model/annotations_response.py new file mode 100644 index 0000000000..a910b348d1 --- /dev/null +++ b/datadog_api_client/v2/model/annotations_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation_data import AnnotationData + +class AnnotationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation_data import AnnotationData + return { + "data": ([AnnotationData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AnnotationData], **kwargs): + """ + Response containing a list of annotations. + + :param data: List of annotation resources. + :type data: [AnnotationData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/anonymize_user_error.py b/datadog_api_client/v2/model/anonymize_user_error.py new file mode 100644 index 0000000000..69e109f0ee --- /dev/null +++ b/datadog_api_client/v2/model/anonymize_user_error.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnonymizeUserError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "error": (str,), + "user_id": (str,), + } + attribute_map = { + "error": "error", + "user_id": "user_id", + } + + def __init__(self_, error: str, user_id: str, **kwargs): + """ + Error encountered when anonymizing a specific user. + + :param error: Error message describing why anonymization failed. + :type error: str + + :param user_id: UUID of the user that failed to be anonymized. + :type user_id: str + """ + super().__init__(kwargs) + + + self_.error = error + self_.user_id = user_id diff --git a/datadog_api_client/v2/model/anonymize_users_request.py b/datadog_api_client/v2/model/anonymize_users_request.py new file mode 100644 index 0000000000..2407a826b6 --- /dev/null +++ b/datadog_api_client/v2/model/anonymize_users_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.anonymize_users_request_data import AnonymizeUsersRequestData + +class AnonymizeUsersRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.anonymize_users_request_data import AnonymizeUsersRequestData + return { + "data": (AnonymizeUsersRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AnonymizeUsersRequestData, **kwargs): + """ + Request body for anonymizing users. + + :param data: Object to anonymize a list of users. + :type data: AnonymizeUsersRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/anonymize_users_request_attributes.py b/datadog_api_client/v2/model/anonymize_users_request_attributes.py new file mode 100644 index 0000000000..72699f1cdb --- /dev/null +++ b/datadog_api_client/v2/model/anonymize_users_request_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnonymizeUsersRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "user_ids": ([str],), + } + attribute_map = { + "user_ids": "user_ids", + } + + def __init__(self_, user_ids: List[str], **kwargs): + """ + Attributes of an anonymize users request. + + :param user_ids: List of user IDs (UUIDs) to anonymize. + :type user_ids: [str] + """ + super().__init__(kwargs) + + + self_.user_ids = user_ids diff --git a/datadog_api_client/v2/model/anonymize_users_request_data.py b/datadog_api_client/v2/model/anonymize_users_request_data.py new file mode 100644 index 0000000000..bd6ca4c1bc --- /dev/null +++ b/datadog_api_client/v2/model/anonymize_users_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.anonymize_users_request_attributes import AnonymizeUsersRequestAttributes + from datadog_api_client.v2.model.anonymize_users_request_type import AnonymizeUsersRequestType + +class AnonymizeUsersRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.anonymize_users_request_attributes import AnonymizeUsersRequestAttributes + from datadog_api_client.v2.model.anonymize_users_request_type import AnonymizeUsersRequestType + return { + "attributes": (AnonymizeUsersRequestAttributes,), + "id": (str,), + "type": (AnonymizeUsersRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AnonymizeUsersRequestAttributes, type: AnonymizeUsersRequestType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Object to anonymize a list of users. + + :param attributes: Attributes of an anonymize users request. + :type attributes: AnonymizeUsersRequestAttributes + + :param id: Unique identifier for the request. Not used server-side. + :type id: str, optional + + :param type: Type of the anonymize users request. + :type type: AnonymizeUsersRequestType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/anonymize_users_request_type.py b/datadog_api_client/v2/model/anonymize_users_request_type.py new file mode 100644 index 0000000000..ad20d11feb --- /dev/null +++ b/datadog_api_client/v2/model/anonymize_users_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnonymizeUsersRequestType(ModelSimple): + """ + Type of the anonymize users request. + + :param value: If omitted defaults to "anonymize_users_request". Must be one of ["anonymize_users_request"]. + :type value: str + """ + + allowed_values = { + "anonymize_users_request", + } + ANONYMIZE_USERS_REQUEST: ClassVar["AnonymizeUsersRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnonymizeUsersRequestType.ANONYMIZE_USERS_REQUEST = AnonymizeUsersRequestType("anonymize_users_request") diff --git a/datadog_api_client/v2/model/anonymize_users_response.py b/datadog_api_client/v2/model/anonymize_users_response.py new file mode 100644 index 0000000000..d7976b3b51 --- /dev/null +++ b/datadog_api_client/v2/model/anonymize_users_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.anonymize_users_response_data import AnonymizeUsersResponseData + +class AnonymizeUsersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.anonymize_users_response_data import AnonymizeUsersResponseData + return { + "data": (AnonymizeUsersResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AnonymizeUsersResponseData, UnsetType]=unset, **kwargs): + """ + Response containing the result of an anonymize users request. + + :param data: Response data for anonymizing users. + :type data: AnonymizeUsersResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/anonymize_users_response_attributes.py b/datadog_api_client/v2/model/anonymize_users_response_attributes.py new file mode 100644 index 0000000000..39e12609ad --- /dev/null +++ b/datadog_api_client/v2/model/anonymize_users_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.anonymize_user_error import AnonymizeUserError + +class AnonymizeUsersResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.anonymize_user_error import AnonymizeUserError + return { + "anonymize_errors": ([AnonymizeUserError],), + "anonymized_user_ids": ([str],), + } + attribute_map = { + "anonymize_errors": "anonymize_errors", + "anonymized_user_ids": "anonymized_user_ids", + } + + def __init__(self_, anonymize_errors: List[AnonymizeUserError], anonymized_user_ids: List[str], **kwargs): + """ + Attributes of an anonymize users response. + + :param anonymize_errors: List of errors encountered during anonymization, one entry per failed user. + :type anonymize_errors: [AnonymizeUserError] + + :param anonymized_user_ids: List of user IDs (UUIDs) that were successfully anonymized. + :type anonymized_user_ids: [str] + """ + super().__init__(kwargs) + + + self_.anonymize_errors = anonymize_errors + self_.anonymized_user_ids = anonymized_user_ids diff --git a/datadog_api_client/v2/model/anonymize_users_response_data.py b/datadog_api_client/v2/model/anonymize_users_response_data.py new file mode 100644 index 0000000000..28d0cee202 --- /dev/null +++ b/datadog_api_client/v2/model/anonymize_users_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.anonymize_users_response_attributes import AnonymizeUsersResponseAttributes + from datadog_api_client.v2.model.anonymize_users_response_type import AnonymizeUsersResponseType + +class AnonymizeUsersResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.anonymize_users_response_attributes import AnonymizeUsersResponseAttributes + from datadog_api_client.v2.model.anonymize_users_response_type import AnonymizeUsersResponseType + return { + "attributes": (AnonymizeUsersResponseAttributes,), + "id": (str,), + "type": (AnonymizeUsersResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AnonymizeUsersResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AnonymizeUsersResponseType, UnsetType]=unset, **kwargs): + """ + Response data for anonymizing users. + + :param attributes: Attributes of an anonymize users response. + :type attributes: AnonymizeUsersResponseAttributes, optional + + :param id: Unique identifier of the response. + :type id: str, optional + + :param type: Type of the anonymize users response. + :type type: AnonymizeUsersResponseType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/anonymize_users_response_type.py b/datadog_api_client/v2/model/anonymize_users_response_type.py new file mode 100644 index 0000000000..65f7167e67 --- /dev/null +++ b/datadog_api_client/v2/model/anonymize_users_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnonymizeUsersResponseType(ModelSimple): + """ + Type of the anonymize users response. + + :param value: If omitted defaults to "anonymize_users_response". Must be one of ["anonymize_users_response"]. + :type value: str + """ + + allowed_values = { + "anonymize_users_response", + } + ANONYMIZE_USERS_RESPONSE: ClassVar["AnonymizeUsersResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnonymizeUsersResponseType.ANONYMIZE_USERS_RESPONSE = AnonymizeUsersResponseType("anonymize_users_response") diff --git a/datadog_api_client/v2/model/anthropic_api_key.py b/datadog_api_client/v2/model/anthropic_api_key.py new file mode 100644 index 0000000000..e6a3d4fce8 --- /dev/null +++ b/datadog_api_client/v2/model/anthropic_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.anthropic_api_key_type import AnthropicAPIKeyType + +class AnthropicAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.anthropic_api_key_type import AnthropicAPIKeyType + return { + "api_token": (str,), + "type": (AnthropicAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, api_token: str, type: AnthropicAPIKeyType, **kwargs): + """ + The definition of the ``AnthropicAPIKey`` object. + + :param api_token: The ``AnthropicAPIKey`` ``api_token``. + :type api_token: str + + :param type: The definition of the ``AnthropicAPIKey`` object. + :type type: AnthropicAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_token = api_token + self_.type = type diff --git a/datadog_api_client/v2/model/anthropic_api_key_type.py b/datadog_api_client/v2/model/anthropic_api_key_type.py new file mode 100644 index 0000000000..cd6e279e9b --- /dev/null +++ b/datadog_api_client/v2/model/anthropic_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnthropicAPIKeyType(ModelSimple): + """ + The definition of the `AnthropicAPIKey` object. + + :param value: If omitted defaults to "AnthropicAPIKey". Must be one of ["AnthropicAPIKey"]. + :type value: str + """ + + allowed_values = { + "AnthropicAPIKey", + } + ANTHROPICAPIKEY: ClassVar["AnthropicAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnthropicAPIKeyType.ANTHROPICAPIKEY = AnthropicAPIKeyType("AnthropicAPIKey") diff --git a/datadog_api_client/v2/model/anthropic_api_key_update.py b/datadog_api_client/v2/model/anthropic_api_key_update.py new file mode 100644 index 0000000000..55c731f2ba --- /dev/null +++ b/datadog_api_client/v2/model/anthropic_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.anthropic_api_key_type import AnthropicAPIKeyType + +class AnthropicAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.anthropic_api_key_type import AnthropicAPIKeyType + return { + "api_token": (str,), + "type": (AnthropicAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, type: AnthropicAPIKeyType, api_token: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``AnthropicAPIKey`` object. + + :param api_token: The ``AnthropicAPIKeyUpdate`` ``api_token``. + :type api_token: str, optional + + :param type: The definition of the ``AnthropicAPIKey`` object. + :type type: AnthropicAPIKeyType + """ + if api_token is not unset: + kwargs["api_token"] = api_token + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/anthropic_credentials.py b/datadog_api_client/v2/model/anthropic_credentials.py new file mode 100644 index 0000000000..8fd49332e7 --- /dev/null +++ b/datadog_api_client/v2/model/anthropic_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnthropicCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``AnthropicCredentials`` object. + + :param api_token: The `AnthropicAPIKey` `api_token`. + :type api_token: str + + :param type: The definition of the `AnthropicAPIKey` object. + :type type: AnthropicAPIKeyType + """ + 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.anthropic_api_key import AnthropicAPIKey + return { + "oneOf": [ + AnthropicAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/anthropic_credentials_update.py b/datadog_api_client/v2/model/anthropic_credentials_update.py new file mode 100644 index 0000000000..a1ee33ee81 --- /dev/null +++ b/datadog_api_client/v2/model/anthropic_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnthropicCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``AnthropicCredentialsUpdate`` object. + + :param api_token: The `AnthropicAPIKeyUpdate` `api_token`. + :type api_token: str, optional + + :param type: The definition of the `AnthropicAPIKey` object. + :type type: AnthropicAPIKeyType + """ + 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.anthropic_api_key_update import AnthropicAPIKeyUpdate + return { + "oneOf": [ + AnthropicAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/anthropic_integration.py b/datadog_api_client/v2/model/anthropic_integration.py new file mode 100644 index 0000000000..116d16ca97 --- /dev/null +++ b/datadog_api_client/v2/model/anthropic_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.anthropic_credentials import AnthropicCredentials + from datadog_api_client.v2.model.anthropic_integration_type import AnthropicIntegrationType + from datadog_api_client.v2.model.anthropic_api_key import AnthropicAPIKey + +class AnthropicIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.anthropic_credentials import AnthropicCredentials + from datadog_api_client.v2.model.anthropic_integration_type import AnthropicIntegrationType + return { + "credentials": (AnthropicCredentials,), + "type": (AnthropicIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[AnthropicCredentials, AnthropicAPIKey], type: AnthropicIntegrationType, **kwargs): + """ + The definition of the ``AnthropicIntegration`` object. + + :param credentials: The definition of the ``AnthropicCredentials`` object. + :type credentials: AnthropicCredentials + + :param type: The definition of the ``AnthropicIntegrationType`` object. + :type type: AnthropicIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/anthropic_integration_type.py b/datadog_api_client/v2/model/anthropic_integration_type.py new file mode 100644 index 0000000000..c0fa54e6b1 --- /dev/null +++ b/datadog_api_client/v2/model/anthropic_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AnthropicIntegrationType(ModelSimple): + """ + The definition of the `AnthropicIntegrationType` object. + + :param value: If omitted defaults to "Anthropic". Must be one of ["Anthropic"]. + :type value: str + """ + + allowed_values = { + "Anthropic", + } + ANTHROPIC: ClassVar["AnthropicIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AnthropicIntegrationType.ANTHROPIC = AnthropicIntegrationType("Anthropic") diff --git a/datadog_api_client/v2/model/anthropic_integration_update.py b/datadog_api_client/v2/model/anthropic_integration_update.py new file mode 100644 index 0000000000..64310129b8 --- /dev/null +++ b/datadog_api_client/v2/model/anthropic_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.anthropic_credentials_update import AnthropicCredentialsUpdate + from datadog_api_client.v2.model.anthropic_integration_type import AnthropicIntegrationType + from datadog_api_client.v2.model.anthropic_api_key_update import AnthropicAPIKeyUpdate + +class AnthropicIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.anthropic_credentials_update import AnthropicCredentialsUpdate + from datadog_api_client.v2.model.anthropic_integration_type import AnthropicIntegrationType + return { + "credentials": (AnthropicCredentialsUpdate,), + "type": (AnthropicIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: AnthropicIntegrationType, credentials: Union[AnthropicCredentialsUpdate, AnthropicAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``AnthropicIntegrationUpdate`` object. + + :param credentials: The definition of the ``AnthropicCredentialsUpdate`` object. + :type credentials: AnthropicCredentialsUpdate, optional + + :param type: The definition of the ``AnthropicIntegrationType`` object. + :type type: AnthropicIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/any_value.py b/datadog_api_client/v2/model/any_value.py new file mode 100644 index 0000000000..8d3ec1f85b --- /dev/null +++ b/datadog_api_client/v2/model/any_value.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnyValue(ModelComposed): + + + _nullable = True + + def __init__(self, **kwargs): + """ + Represents any valid JSON value. + """ + 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.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + return { + "oneOf": [ + str, + float, + AnyValueObject, + [AnyValueItem], + bool, + ], + } diff --git a/datadog_api_client/v2/model/any_value_item.py b/datadog_api_client/v2/model/any_value_item.py new file mode 100644 index 0000000000..6894761828 --- /dev/null +++ b/datadog_api_client/v2/model/any_value_item.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnyValueItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A single item in an array of arbitrary values, which can be a string, number, object, or boolean. + """ + 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.any_value_object import AnyValueObject + return { + "oneOf": [ + str, + float, + AnyValueObject, + bool, + ], + } diff --git a/datadog_api_client/v2/model/any_value_object.py b/datadog_api_client/v2/model/any_value_object.py new file mode 100644 index 0000000000..8869fe3db8 --- /dev/null +++ b/datadog_api_client/v2/model/any_value_object.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AnyValueObject(ModelNormal): + + def __init__(self_, **kwargs): + """ + An arbitrary object value with additional properties. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/api_error_response.py b/datadog_api_client/v2/model/api_error_response.py new file mode 100644 index 0000000000..a7fe0cb5f4 --- /dev/null +++ b/datadog_api_client/v2/model/api_error_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class APIErrorResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "errors": ([str],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: List[str], **kwargs): + """ + API error response. + + :param errors: A list of errors. + :type errors: [str] + """ + super().__init__(kwargs) + + + self_.errors = errors diff --git a/datadog_api_client/v2/model/api_key_create_attributes.py b/datadog_api_client/v2/model/api_key_create_attributes.py new file mode 100644 index 0000000000..510f2b6110 --- /dev/null +++ b/datadog_api_client/v2/model/api_key_create_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class APIKeyCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "category": (str,), + "name": (str,), + "remote_config_read_enabled": (bool,), + } + attribute_map = { + "category": "category", + "name": "name", + "remote_config_read_enabled": "remote_config_read_enabled", + } + + def __init__(self_, name: str, category: Union[str, UnsetType]=unset, remote_config_read_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes used to create an API Key. + + :param category: The APIKeyCreateAttributes category. + :type category: str, optional + + :param name: Name of the API key. + :type name: str + + :param remote_config_read_enabled: The APIKeyCreateAttributes remote_config_read_enabled. + :type remote_config_read_enabled: bool, optional + """ + if category is not unset: + kwargs["category"] = category + if remote_config_read_enabled is not unset: + kwargs["remote_config_read_enabled"] = remote_config_read_enabled + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/api_key_create_data.py b/datadog_api_client/v2/model/api_key_create_data.py new file mode 100644 index 0000000000..dfc894e214 --- /dev/null +++ b/datadog_api_client/v2/model/api_key_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.api_key_create_attributes import APIKeyCreateAttributes + from datadog_api_client.v2.model.api_keys_type import APIKeysType + +class APIKeyCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.api_key_create_attributes import APIKeyCreateAttributes + from datadog_api_client.v2.model.api_keys_type import APIKeysType + return { + "attributes": (APIKeyCreateAttributes,), + "type": (APIKeysType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: APIKeyCreateAttributes, type: APIKeysType, **kwargs): + """ + Object used to create an API key. + + :param attributes: Attributes used to create an API Key. + :type attributes: APIKeyCreateAttributes + + :param type: API Keys resource type. + :type type: APIKeysType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/api_key_create_request.py b/datadog_api_client/v2/model/api_key_create_request.py new file mode 100644 index 0000000000..1173d25a4a --- /dev/null +++ b/datadog_api_client/v2/model/api_key_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.api_key_create_data import APIKeyCreateData + +class APIKeyCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.api_key_create_data import APIKeyCreateData + return { + "data": (APIKeyCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: APIKeyCreateData, **kwargs): + """ + Request used to create an API key. + + :param data: Object used to create an API key. + :type data: APIKeyCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/api_key_relationships.py b/datadog_api_client/v2/model/api_key_relationships.py new file mode 100644 index 0000000000..893c52a90a --- /dev/null +++ b/datadog_api_client/v2/model/api_key_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + +class APIKeyRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + return { + "created_by": (RelationshipToUser,), + "modified_by": (NullableRelationshipToUser,), + } + attribute_map = { + "created_by": "created_by", + "modified_by": "modified_by", + } + + def __init__(self_, created_by: Union[RelationshipToUser, UnsetType]=unset, modified_by: Union[NullableRelationshipToUser, none_type, UnsetType]=unset, **kwargs): + """ + Resources related to the API key. + + :param created_by: Relationship to user. + :type created_by: RelationshipToUser, optional + + :param modified_by: Relationship to user. + :type modified_by: NullableRelationshipToUser, none_type, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if modified_by is not unset: + kwargs["modified_by"] = modified_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/api_key_response.py b/datadog_api_client/v2/model/api_key_response.py new file mode 100644 index 0000000000..0aeda7d438 --- /dev/null +++ b/datadog_api_client/v2/model/api_key_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_api_key import FullAPIKey + from datadog_api_client.v2.model.api_key_response_included_item import APIKeyResponseIncludedItem + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.leaked_key import LeakedKey + +class APIKeyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_api_key import FullAPIKey + from datadog_api_client.v2.model.api_key_response_included_item import APIKeyResponseIncludedItem + return { + "data": (FullAPIKey,), + "included": ([APIKeyResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[FullAPIKey, UnsetType]=unset, included: Union[List[Union[APIKeyResponseIncludedItem, User, LeakedKey]], UnsetType]=unset, **kwargs): + """ + Response for retrieving an API key. + + :param data: Datadog API key. + :type data: FullAPIKey, optional + + :param included: Array of objects related to the API key. + :type included: [APIKeyResponseIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/api_key_response_included_item.py b/datadog_api_client/v2/model/api_key_response_included_item.py new file mode 100644 index 0000000000..c58c99bb20 --- /dev/null +++ b/datadog_api_client/v2/model/api_key_response_included_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class APIKeyResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to an API key. + + :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.leaked_key import LeakedKey + return { + "oneOf": [ + User, + LeakedKey, + ], + } diff --git a/datadog_api_client/v2/model/api_key_update_attributes.py b/datadog_api_client/v2/model/api_key_update_attributes.py new file mode 100644 index 0000000000..352a26f053 --- /dev/null +++ b/datadog_api_client/v2/model/api_key_update_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class APIKeyUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "category": (str,), + "name": (str,), + "remote_config_read_enabled": (bool,), + } + attribute_map = { + "category": "category", + "name": "name", + "remote_config_read_enabled": "remote_config_read_enabled", + } + + def __init__(self_, name: str, category: Union[str, UnsetType]=unset, remote_config_read_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes used to update an API Key. + + :param category: The APIKeyUpdateAttributes category. + :type category: str, optional + + :param name: Name of the API key. + :type name: str + + :param remote_config_read_enabled: The APIKeyUpdateAttributes remote_config_read_enabled. + :type remote_config_read_enabled: bool, optional + """ + if category is not unset: + kwargs["category"] = category + if remote_config_read_enabled is not unset: + kwargs["remote_config_read_enabled"] = remote_config_read_enabled + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/api_key_update_data.py b/datadog_api_client/v2/model/api_key_update_data.py new file mode 100644 index 0000000000..f080ed4953 --- /dev/null +++ b/datadog_api_client/v2/model/api_key_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.api_key_update_attributes import APIKeyUpdateAttributes + from datadog_api_client.v2.model.api_keys_type import APIKeysType + +class APIKeyUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.api_key_update_attributes import APIKeyUpdateAttributes + from datadog_api_client.v2.model.api_keys_type import APIKeysType + return { + "attributes": (APIKeyUpdateAttributes,), + "id": (str,), + "type": (APIKeysType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: APIKeyUpdateAttributes, id: str, type: APIKeysType, **kwargs): + """ + Object used to update an API key. + + :param attributes: Attributes used to update an API Key. + :type attributes: APIKeyUpdateAttributes + + :param id: ID of the API key. + :type id: str + + :param type: API Keys resource type. + :type type: APIKeysType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/api_key_update_request.py b/datadog_api_client/v2/model/api_key_update_request.py new file mode 100644 index 0000000000..4607ee9e9b --- /dev/null +++ b/datadog_api_client/v2/model/api_key_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.api_key_update_data import APIKeyUpdateData + +class APIKeyUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.api_key_update_data import APIKeyUpdateData + return { + "data": (APIKeyUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: APIKeyUpdateData, **kwargs): + """ + Request used to update an API key. + + :param data: Object used to update an API key. + :type data: APIKeyUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/api_keys_response.py b/datadog_api_client/v2/model/api_keys_response.py new file mode 100644 index 0000000000..f65aef4c87 --- /dev/null +++ b/datadog_api_client/v2/model/api_keys_response.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.partial_api_key import PartialAPIKey + from datadog_api_client.v2.model.api_key_response_included_item import APIKeyResponseIncludedItem + from datadog_api_client.v2.model.api_keys_response_meta import APIKeysResponseMeta + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.leaked_key import LeakedKey + +class APIKeysResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.partial_api_key import PartialAPIKey + from datadog_api_client.v2.model.api_key_response_included_item import APIKeyResponseIncludedItem + from datadog_api_client.v2.model.api_keys_response_meta import APIKeysResponseMeta + return { + "data": ([PartialAPIKey],), + "included": ([APIKeyResponseIncludedItem],), + "meta": (APIKeysResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: Union[List[PartialAPIKey], UnsetType]=unset, included: Union[List[Union[APIKeyResponseIncludedItem, User, LeakedKey]], UnsetType]=unset, meta: Union[APIKeysResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for a list of API keys. + + :param data: Array of API keys. + :type data: [PartialAPIKey], optional + + :param included: Array of objects related to the API key. + :type included: [APIKeyResponseIncludedItem], optional + + :param meta: Additional information related to api keys response. + :type meta: APIKeysResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/api_keys_response_meta.py b/datadog_api_client/v2/model/api_keys_response_meta.py new file mode 100644 index 0000000000..14f88722d4 --- /dev/null +++ b/datadog_api_client/v2/model/api_keys_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.api_keys_response_meta_page import APIKeysResponseMetaPage + +class APIKeysResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.api_keys_response_meta_page import APIKeysResponseMetaPage + return { + "max_allowed": (int,), + "page": (APIKeysResponseMetaPage,), + } + attribute_map = { + "max_allowed": "max_allowed", + "page": "page", + } + + def __init__(self_, max_allowed: Union[int, UnsetType]=unset, page: Union[APIKeysResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Additional information related to api keys response. + + :param max_allowed: Max allowed number of API keys. + :type max_allowed: int, optional + + :param page: Additional information related to the API keys response. + :type page: APIKeysResponseMetaPage, optional + """ + if max_allowed is not unset: + kwargs["max_allowed"] = max_allowed + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/api_keys_response_meta_page.py b/datadog_api_client/v2/model/api_keys_response_meta_page.py new file mode 100644 index 0000000000..c45c193fd5 --- /dev/null +++ b/datadog_api_client/v2/model/api_keys_response_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class APIKeysResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_filtered_count": (int,), + } + attribute_map = { + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Additional information related to the API keys response. + + :param total_filtered_count: Total filtered application key count. + :type total_filtered_count: int, optional + """ + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/api_keys_sort.py b/datadog_api_client/v2/model/api_keys_sort.py new file mode 100644 index 0000000000..89e910cc16 --- /dev/null +++ b/datadog_api_client/v2/model/api_keys_sort.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class APIKeysSort(ModelSimple): + """ + Sorting options + + :param value: If omitted defaults to "name". Must be one of ["created_at", "-created_at", "last4", "-last4", "modified_at", "-modified_at", "name", "-name"]. + :type value: str + """ + + allowed_values = { + "created_at", + "-created_at", + "last4", + "-last4", + "modified_at", + "-modified_at", + "name", + "-name", + } + CREATED_AT_ASCENDING: ClassVar["APIKeysSort"] + CREATED_AT_DESCENDING: ClassVar["APIKeysSort"] + LAST4_ASCENDING: ClassVar["APIKeysSort"] + LAST4_DESCENDING: ClassVar["APIKeysSort"] + MODIFIED_AT_ASCENDING: ClassVar["APIKeysSort"] + MODIFIED_AT_DESCENDING: ClassVar["APIKeysSort"] + NAME_ASCENDING: ClassVar["APIKeysSort"] + NAME_DESCENDING: ClassVar["APIKeysSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +APIKeysSort.CREATED_AT_ASCENDING = APIKeysSort("created_at") +APIKeysSort.CREATED_AT_DESCENDING = APIKeysSort("-created_at") +APIKeysSort.LAST4_ASCENDING = APIKeysSort("last4") +APIKeysSort.LAST4_DESCENDING = APIKeysSort("-last4") +APIKeysSort.MODIFIED_AT_ASCENDING = APIKeysSort("modified_at") +APIKeysSort.MODIFIED_AT_DESCENDING = APIKeysSort("-modified_at") +APIKeysSort.NAME_ASCENDING = APIKeysSort("name") +APIKeysSort.NAME_DESCENDING = APIKeysSort("-name") diff --git a/datadog_api_client/v2/model/api_keys_type.py b/datadog_api_client/v2/model/api_keys_type.py new file mode 100644 index 0000000000..6d6912f5a5 --- /dev/null +++ b/datadog_api_client/v2/model/api_keys_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class APIKeysType(ModelSimple): + """ + API Keys resource type. + + :param value: If omitted defaults to "api_keys". Must be one of ["api_keys"]. + :type value: str + """ + + allowed_values = { + "api_keys", + } + API_KEYS: ClassVar["APIKeysType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +APIKeysType.API_KEYS = APIKeysType("api_keys") diff --git a/datadog_api_client/v2/model/api_trigger.py b/datadog_api_client/v2/model/api_trigger.py new file mode 100644 index 0000000000..a26edd4610 --- /dev/null +++ b/datadog_api_client/v2/model/api_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + +class APITrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + return { + "rate_limit": (TriggerRateLimit,), + } + attribute_map = { + "rate_limit": "rateLimit", + } + + def __init__(self_, rate_limit: Union[TriggerRateLimit, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from an API request. The workflow must be published. + + :param rate_limit: Defines a rate limit for a trigger. + :type rate_limit: TriggerRateLimit, optional + """ + if rate_limit is not unset: + kwargs["rate_limit"] = rate_limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/api_trigger_wrapper.py b/datadog_api_client/v2/model/api_trigger_wrapper.py new file mode 100644 index 0000000000..16bb0ba41c --- /dev/null +++ b/datadog_api_client/v2/model/api_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.api_trigger import APITrigger + +class APITriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.api_trigger import APITrigger + return { + "api_trigger": (APITrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "api_trigger": "apiTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, api_trigger: APITrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for an API-based trigger. + + :param api_trigger: Trigger a workflow from an API request. The workflow must be published. + :type api_trigger: APITrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.api_trigger = api_trigger diff --git a/datadog_api_client/v2/model/apm_dependency_stat_name.py b/datadog_api_client/v2/model/apm_dependency_stat_name.py new file mode 100644 index 0000000000..6b1721a408 --- /dev/null +++ b/datadog_api_client/v2/model/apm_dependency_stat_name.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApmDependencyStatName(ModelSimple): + """ + The APM dependency statistic to query. + + :param value: Must be one of ["avg_duration", "avg_root_duration", "avg_spans_per_trace", "error_rate", "pct_exec_time", "pct_of_traces", "total_traces_count"]. + :type value: str + """ + + allowed_values = { + "avg_duration", + "avg_root_duration", + "avg_spans_per_trace", + "error_rate", + "pct_exec_time", + "pct_of_traces", + "total_traces_count", + } + AVG_DURATION: ClassVar["ApmDependencyStatName"] + AVG_ROOT_DURATION: ClassVar["ApmDependencyStatName"] + AVG_SPANS_PER_TRACE: ClassVar["ApmDependencyStatName"] + ERROR_RATE: ClassVar["ApmDependencyStatName"] + PCT_EXEC_TIME: ClassVar["ApmDependencyStatName"] + PCT_OF_TRACES: ClassVar["ApmDependencyStatName"] + TOTAL_TRACES_COUNT: ClassVar["ApmDependencyStatName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApmDependencyStatName.AVG_DURATION = ApmDependencyStatName("avg_duration") +ApmDependencyStatName.AVG_ROOT_DURATION = ApmDependencyStatName("avg_root_duration") +ApmDependencyStatName.AVG_SPANS_PER_TRACE = ApmDependencyStatName("avg_spans_per_trace") +ApmDependencyStatName.ERROR_RATE = ApmDependencyStatName("error_rate") +ApmDependencyStatName.PCT_EXEC_TIME = ApmDependencyStatName("pct_exec_time") +ApmDependencyStatName.PCT_OF_TRACES = ApmDependencyStatName("pct_of_traces") +ApmDependencyStatName.TOTAL_TRACES_COUNT = ApmDependencyStatName("total_traces_count") diff --git a/datadog_api_client/v2/model/apm_dependency_stats_data_source.py b/datadog_api_client/v2/model/apm_dependency_stats_data_source.py new file mode 100644 index 0000000000..44586d1061 --- /dev/null +++ b/datadog_api_client/v2/model/apm_dependency_stats_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApmDependencyStatsDataSource(ModelSimple): + """ + A data source for APM dependency statistics queries. + + :param value: If omitted defaults to "apm_dependency_stats". Must be one of ["apm_dependency_stats"]. + :type value: str + """ + + allowed_values = { + "apm_dependency_stats", + } + APM_DEPENDENCY_STATS: ClassVar["ApmDependencyStatsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApmDependencyStatsDataSource.APM_DEPENDENCY_STATS = ApmDependencyStatsDataSource("apm_dependency_stats") diff --git a/datadog_api_client/v2/model/apm_dependency_stats_query.py b/datadog_api_client/v2/model/apm_dependency_stats_query.py new file mode 100644 index 0000000000..97f3829ee4 --- /dev/null +++ b/datadog_api_client/v2/model/apm_dependency_stats_query.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.apm_dependency_stats_data_source import ApmDependencyStatsDataSource + from datadog_api_client.v2.model.apm_dependency_stat_name import ApmDependencyStatName + +class ApmDependencyStatsQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.apm_dependency_stats_data_source import ApmDependencyStatsDataSource + from datadog_api_client.v2.model.apm_dependency_stat_name import ApmDependencyStatName + return { + "cross_org_uuids": ([str],), + "data_source": (ApmDependencyStatsDataSource,), + "env": (str,), + "is_upstream": (bool,), + "name": (str,), + "operation_name": (str,), + "primary_tag_name": (str,), + "primary_tag_value": (str,), + "resource_name": (str,), + "service": (str,), + "stat": (ApmDependencyStatName,), + } + attribute_map = { + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "env": "env", + "is_upstream": "is_upstream", + "name": "name", + "operation_name": "operation_name", + "primary_tag_name": "primary_tag_name", + "primary_tag_value": "primary_tag_value", + "resource_name": "resource_name", + "service": "service", + "stat": "stat", + } + + def __init__(self_, data_source: ApmDependencyStatsDataSource, env: str, name: str, operation_name: str, resource_name: str, service: str, stat: ApmDependencyStatName, cross_org_uuids: Union[List[str], UnsetType]=unset, is_upstream: Union[bool, UnsetType]=unset, primary_tag_name: Union[str, UnsetType]=unset, primary_tag_value: Union[str, UnsetType]=unset, **kwargs): + """ + A query for APM dependency statistics between services, such as call latency and error rates. + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source for APM dependency statistics queries. + :type data_source: ApmDependencyStatsDataSource + + :param env: The environment to query. + :type env: str + + :param is_upstream: Determines whether stats for upstream or downstream dependencies should be queried. + :type is_upstream: bool, optional + + :param name: The variable name for use in formulas. + :type name: str + + :param operation_name: The APM operation name. + :type operation_name: str + + :param primary_tag_name: The name of the second primary tag used within APM; required when ``primary_tag_value`` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog. + :type primary_tag_name: str, optional + + :param primary_tag_value: Filter APM data by the second primary tag. ``primary_tag_name`` must also be specified. + :type primary_tag_value: str, optional + + :param resource_name: The resource name to filter by. + :type resource_name: str + + :param service: The service name to filter by. + :type service: str + + :param stat: The APM dependency statistic to query. + :type stat: ApmDependencyStatName + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if is_upstream is not unset: + kwargs["is_upstream"] = is_upstream + if primary_tag_name is not unset: + kwargs["primary_tag_name"] = primary_tag_name + if primary_tag_value is not unset: + kwargs["primary_tag_value"] = primary_tag_value + super().__init__(kwargs) + + + self_.data_source = data_source + self_.env = env + self_.name = name + self_.operation_name = operation_name + self_.resource_name = resource_name + self_.service = service + self_.stat = stat diff --git a/datadog_api_client/v2/model/apm_metrics_data_source.py b/datadog_api_client/v2/model/apm_metrics_data_source.py new file mode 100644 index 0000000000..30eb6bd7be --- /dev/null +++ b/datadog_api_client/v2/model/apm_metrics_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApmMetricsDataSource(ModelSimple): + """ + A data source for APM metrics queries. + + :param value: If omitted defaults to "apm_metrics". Must be one of ["apm_metrics"]. + :type value: str + """ + + allowed_values = { + "apm_metrics", + } + APM_METRICS: ClassVar["ApmMetricsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApmMetricsDataSource.APM_METRICS = ApmMetricsDataSource("apm_metrics") diff --git a/datadog_api_client/v2/model/apm_metrics_query.py b/datadog_api_client/v2/model/apm_metrics_query.py new file mode 100644 index 0000000000..a7a99a2c9c --- /dev/null +++ b/datadog_api_client/v2/model/apm_metrics_query.py @@ -0,0 +1,139 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.apm_metrics_data_source import ApmMetricsDataSource + from datadog_api_client.v2.model.apm_metrics_span_kind import ApmMetricsSpanKind + from datadog_api_client.v2.model.apm_metrics_stat import ApmMetricsStat + +class ApmMetricsQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.apm_metrics_data_source import ApmMetricsDataSource + from datadog_api_client.v2.model.apm_metrics_span_kind import ApmMetricsSpanKind + from datadog_api_client.v2.model.apm_metrics_stat import ApmMetricsStat + return { + "cross_org_uuids": ([str],), + "data_source": (ApmMetricsDataSource,), + "group_by": ([str],), + "name": (str,), + "operation_mode": (str,), + "operation_name": (str,), + "peer_tags": ([str],), + "query_filter": (str,), + "resource_hash": (str,), + "resource_name": (str,), + "service": (str,), + "span_kind": (ApmMetricsSpanKind,), + "stat": (ApmMetricsStat,), + } + attribute_map = { + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "group_by": "group_by", + "name": "name", + "operation_mode": "operation_mode", + "operation_name": "operation_name", + "peer_tags": "peer_tags", + "query_filter": "query_filter", + "resource_hash": "resource_hash", + "resource_name": "resource_name", + "service": "service", + "span_kind": "span_kind", + "stat": "stat", + } + + def __init__(self_, data_source: ApmMetricsDataSource, name: str, stat: ApmMetricsStat, cross_org_uuids: Union[List[str], UnsetType]=unset, group_by: Union[List[str], UnsetType]=unset, operation_mode: Union[str, UnsetType]=unset, operation_name: Union[str, UnsetType]=unset, peer_tags: Union[List[str], UnsetType]=unset, query_filter: Union[str, UnsetType]=unset, resource_hash: Union[str, UnsetType]=unset, resource_name: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, span_kind: Union[ApmMetricsSpanKind, UnsetType]=unset, **kwargs): + """ + A query for APM trace metrics such as hits, errors, and latency percentiles, aggregated across services. + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source for APM metrics queries. + :type data_source: ApmMetricsDataSource + + :param group_by: Optional fields to group the query results by. + :type group_by: [str], optional + + :param name: The variable name for use in formulas. + :type name: str + + :param operation_mode: Optional operation mode to aggregate across operation names. + :type operation_mode: str, optional + + :param operation_name: Name of operation on service. If not provided, the primary operation name is used. + :type operation_name: str, optional + + :param peer_tags: Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, peer.s3.bucket, etc.). + :type peer_tags: [str], optional + + :param query_filter: Additional filters for the query using metrics query syntax (for example, env, primary_tag). + :type query_filter: str, optional + + :param resource_hash: The resource hash for exact matching. + :type resource_hash: str, optional + + :param resource_name: The full name of a specific resource to filter by. + :type resource_name: str, optional + + :param service: The service name to filter by. + :type service: str, optional + + :param span_kind: Describes the relationship between the span, its parents, and its children in a trace. + :type span_kind: ApmMetricsSpanKind, optional + + :param stat: The APM metric statistic to query. + :type stat: ApmMetricsStat + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if group_by is not unset: + kwargs["group_by"] = group_by + if operation_mode is not unset: + kwargs["operation_mode"] = operation_mode + if operation_name is not unset: + kwargs["operation_name"] = operation_name + if peer_tags is not unset: + kwargs["peer_tags"] = peer_tags + if query_filter is not unset: + kwargs["query_filter"] = query_filter + if resource_hash is not unset: + kwargs["resource_hash"] = resource_hash + if resource_name is not unset: + kwargs["resource_name"] = resource_name + if service is not unset: + kwargs["service"] = service + if span_kind is not unset: + kwargs["span_kind"] = span_kind + super().__init__(kwargs) + + + self_.data_source = data_source + self_.name = name + self_.stat = stat diff --git a/datadog_api_client/v2/model/apm_metrics_span_kind.py b/datadog_api_client/v2/model/apm_metrics_span_kind.py new file mode 100644 index 0000000000..d1df6a0799 --- /dev/null +++ b/datadog_api_client/v2/model/apm_metrics_span_kind.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApmMetricsSpanKind(ModelSimple): + """ + Describes the relationship between the span, its parents, and its children in a trace. + + :param value: Must be one of ["consumer", "server", "client", "producer", "internal"]. + :type value: str + """ + + allowed_values = { + "consumer", + "server", + "client", + "producer", + "internal", + } + CONSUMER: ClassVar["ApmMetricsSpanKind"] + SERVER: ClassVar["ApmMetricsSpanKind"] + CLIENT: ClassVar["ApmMetricsSpanKind"] + PRODUCER: ClassVar["ApmMetricsSpanKind"] + INTERNAL: ClassVar["ApmMetricsSpanKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApmMetricsSpanKind.CONSUMER = ApmMetricsSpanKind("consumer") +ApmMetricsSpanKind.SERVER = ApmMetricsSpanKind("server") +ApmMetricsSpanKind.CLIENT = ApmMetricsSpanKind("client") +ApmMetricsSpanKind.PRODUCER = ApmMetricsSpanKind("producer") +ApmMetricsSpanKind.INTERNAL = ApmMetricsSpanKind("internal") diff --git a/datadog_api_client/v2/model/apm_metrics_stat.py b/datadog_api_client/v2/model/apm_metrics_stat.py new file mode 100644 index 0000000000..28db576cd8 --- /dev/null +++ b/datadog_api_client/v2/model/apm_metrics_stat.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApmMetricsStat(ModelSimple): + """ + The APM metric statistic to query. + + :param value: Must be one of ["error_rate", "errors", "errors_per_second", "hits", "hits_per_second", "apdex", "latency_avg", "latency_max", "latency_p50", "latency_p75", "latency_p90", "latency_p95", "latency_p99", "latency_p999", "latency_distribution", "total_time"]. + :type value: str + """ + + allowed_values = { + "error_rate", + "errors", + "errors_per_second", + "hits", + "hits_per_second", + "apdex", + "latency_avg", + "latency_max", + "latency_p50", + "latency_p75", + "latency_p90", + "latency_p95", + "latency_p99", + "latency_p999", + "latency_distribution", + "total_time", + } + ERROR_RATE: ClassVar["ApmMetricsStat"] + ERRORS: ClassVar["ApmMetricsStat"] + ERRORS_PER_SECOND: ClassVar["ApmMetricsStat"] + HITS: ClassVar["ApmMetricsStat"] + HITS_PER_SECOND: ClassVar["ApmMetricsStat"] + APDEX: ClassVar["ApmMetricsStat"] + LATENCY_AVG: ClassVar["ApmMetricsStat"] + LATENCY_MAX: ClassVar["ApmMetricsStat"] + LATENCY_P50: ClassVar["ApmMetricsStat"] + LATENCY_P75: ClassVar["ApmMetricsStat"] + LATENCY_P90: ClassVar["ApmMetricsStat"] + LATENCY_P95: ClassVar["ApmMetricsStat"] + LATENCY_P99: ClassVar["ApmMetricsStat"] + LATENCY_P999: ClassVar["ApmMetricsStat"] + LATENCY_DISTRIBUTION: ClassVar["ApmMetricsStat"] + TOTAL_TIME: ClassVar["ApmMetricsStat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApmMetricsStat.ERROR_RATE = ApmMetricsStat("error_rate") +ApmMetricsStat.ERRORS = ApmMetricsStat("errors") +ApmMetricsStat.ERRORS_PER_SECOND = ApmMetricsStat("errors_per_second") +ApmMetricsStat.HITS = ApmMetricsStat("hits") +ApmMetricsStat.HITS_PER_SECOND = ApmMetricsStat("hits_per_second") +ApmMetricsStat.APDEX = ApmMetricsStat("apdex") +ApmMetricsStat.LATENCY_AVG = ApmMetricsStat("latency_avg") +ApmMetricsStat.LATENCY_MAX = ApmMetricsStat("latency_max") +ApmMetricsStat.LATENCY_P50 = ApmMetricsStat("latency_p50") +ApmMetricsStat.LATENCY_P75 = ApmMetricsStat("latency_p75") +ApmMetricsStat.LATENCY_P90 = ApmMetricsStat("latency_p90") +ApmMetricsStat.LATENCY_P95 = ApmMetricsStat("latency_p95") +ApmMetricsStat.LATENCY_P99 = ApmMetricsStat("latency_p99") +ApmMetricsStat.LATENCY_P999 = ApmMetricsStat("latency_p999") +ApmMetricsStat.LATENCY_DISTRIBUTION = ApmMetricsStat("latency_distribution") +ApmMetricsStat.TOTAL_TIME = ApmMetricsStat("total_time") diff --git a/datadog_api_client/v2/model/apm_resource_stat_name.py b/datadog_api_client/v2/model/apm_resource_stat_name.py new file mode 100644 index 0000000000..298ecb9392 --- /dev/null +++ b/datadog_api_client/v2/model/apm_resource_stat_name.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApmResourceStatName(ModelSimple): + """ + The APM resource statistic to query. + + :param value: Must be one of ["error_rate", "errors", "hits", "latency_avg", "latency_max", "latency_p50", "latency_p75", "latency_p90", "latency_p95", "latency_p99", "latency_distribution", "total_time"]. + :type value: str + """ + + allowed_values = { + "error_rate", + "errors", + "hits", + "latency_avg", + "latency_max", + "latency_p50", + "latency_p75", + "latency_p90", + "latency_p95", + "latency_p99", + "latency_distribution", + "total_time", + } + ERROR_RATE: ClassVar["ApmResourceStatName"] + ERRORS: ClassVar["ApmResourceStatName"] + HITS: ClassVar["ApmResourceStatName"] + LATENCY_AVG: ClassVar["ApmResourceStatName"] + LATENCY_MAX: ClassVar["ApmResourceStatName"] + LATENCY_P50: ClassVar["ApmResourceStatName"] + LATENCY_P75: ClassVar["ApmResourceStatName"] + LATENCY_P90: ClassVar["ApmResourceStatName"] + LATENCY_P95: ClassVar["ApmResourceStatName"] + LATENCY_P99: ClassVar["ApmResourceStatName"] + LATENCY_DISTRIBUTION: ClassVar["ApmResourceStatName"] + TOTAL_TIME: ClassVar["ApmResourceStatName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApmResourceStatName.ERROR_RATE = ApmResourceStatName("error_rate") +ApmResourceStatName.ERRORS = ApmResourceStatName("errors") +ApmResourceStatName.HITS = ApmResourceStatName("hits") +ApmResourceStatName.LATENCY_AVG = ApmResourceStatName("latency_avg") +ApmResourceStatName.LATENCY_MAX = ApmResourceStatName("latency_max") +ApmResourceStatName.LATENCY_P50 = ApmResourceStatName("latency_p50") +ApmResourceStatName.LATENCY_P75 = ApmResourceStatName("latency_p75") +ApmResourceStatName.LATENCY_P90 = ApmResourceStatName("latency_p90") +ApmResourceStatName.LATENCY_P95 = ApmResourceStatName("latency_p95") +ApmResourceStatName.LATENCY_P99 = ApmResourceStatName("latency_p99") +ApmResourceStatName.LATENCY_DISTRIBUTION = ApmResourceStatName("latency_distribution") +ApmResourceStatName.TOTAL_TIME = ApmResourceStatName("total_time") diff --git a/datadog_api_client/v2/model/apm_resource_stats_data_source.py b/datadog_api_client/v2/model/apm_resource_stats_data_source.py new file mode 100644 index 0000000000..19abc4aee5 --- /dev/null +++ b/datadog_api_client/v2/model/apm_resource_stats_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApmResourceStatsDataSource(ModelSimple): + """ + A data source for APM resource statistics queries. + + :param value: If omitted defaults to "apm_resource_stats". Must be one of ["apm_resource_stats"]. + :type value: str + """ + + allowed_values = { + "apm_resource_stats", + } + APM_RESOURCE_STATS: ClassVar["ApmResourceStatsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApmResourceStatsDataSource.APM_RESOURCE_STATS = ApmResourceStatsDataSource("apm_resource_stats") diff --git a/datadog_api_client/v2/model/apm_resource_stats_query.py b/datadog_api_client/v2/model/apm_resource_stats_query.py new file mode 100644 index 0000000000..e5e2fdb1ad --- /dev/null +++ b/datadog_api_client/v2/model/apm_resource_stats_query.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.apm_resource_stats_data_source import ApmResourceStatsDataSource + from datadog_api_client.v2.model.apm_resource_stat_name import ApmResourceStatName + +class ApmResourceStatsQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.apm_resource_stats_data_source import ApmResourceStatsDataSource + from datadog_api_client.v2.model.apm_resource_stat_name import ApmResourceStatName + return { + "cross_org_uuids": ([str],), + "data_source": (ApmResourceStatsDataSource,), + "env": (str,), + "group_by": ([str],), + "name": (str,), + "operation_name": (str,), + "primary_tag_name": (str,), + "primary_tag_value": (str,), + "resource_name": (str,), + "service": (str,), + "stat": (ApmResourceStatName,), + } + attribute_map = { + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "env": "env", + "group_by": "group_by", + "name": "name", + "operation_name": "operation_name", + "primary_tag_name": "primary_tag_name", + "primary_tag_value": "primary_tag_value", + "resource_name": "resource_name", + "service": "service", + "stat": "stat", + } + + def __init__(self_, data_source: ApmResourceStatsDataSource, env: str, name: str, service: str, stat: ApmResourceStatName, cross_org_uuids: Union[List[str], UnsetType]=unset, group_by: Union[List[str], UnsetType]=unset, operation_name: Union[str, UnsetType]=unset, primary_tag_name: Union[str, UnsetType]=unset, primary_tag_value: Union[str, UnsetType]=unset, resource_name: Union[str, UnsetType]=unset, **kwargs): + """ + A query for APM resource statistics such as latency, error rate, and hit count, grouped by resource name. + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source for APM resource statistics queries. + :type data_source: ApmResourceStatsDataSource + + :param env: The environment to query. + :type env: str + + :param group_by: Tag keys to group results by. + :type group_by: [str], optional + + :param name: The variable name for use in formulas. + :type name: str + + :param operation_name: The APM operation name. + :type operation_name: str, optional + + :param primary_tag_name: Name of the second primary tag used within APM. Required when ``primary_tag_value`` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog + :type primary_tag_name: str, optional + + :param primary_tag_value: Value of the second primary tag by which to filter APM data. ``primary_tag_name`` must also be specified. + :type primary_tag_value: str, optional + + :param resource_name: The resource name to filter by. + :type resource_name: str, optional + + :param service: The service name to filter by. + :type service: str + + :param stat: The APM resource statistic to query. + :type stat: ApmResourceStatName + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if group_by is not unset: + kwargs["group_by"] = group_by + if operation_name is not unset: + kwargs["operation_name"] = operation_name + if primary_tag_name is not unset: + kwargs["primary_tag_name"] = primary_tag_name + if primary_tag_value is not unset: + kwargs["primary_tag_value"] = primary_tag_value + if resource_name is not unset: + kwargs["resource_name"] = resource_name + super().__init__(kwargs) + + + self_.data_source = data_source + self_.env = env + self_.name = name + self_.service = service + self_.stat = stat diff --git a/datadog_api_client/v2/model/apm_retention_filter_type.py b/datadog_api_client/v2/model/apm_retention_filter_type.py new file mode 100644 index 0000000000..168b2d2aa3 --- /dev/null +++ b/datadog_api_client/v2/model/apm_retention_filter_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApmRetentionFilterType(ModelSimple): + """ + The type of the resource. + + :param value: If omitted defaults to "apm_retention_filter". Must be one of ["apm_retention_filter"]. + :type value: str + """ + + allowed_values = { + "apm_retention_filter", + } + apm_retention_filter: ClassVar["ApmRetentionFilterType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApmRetentionFilterType.apm_retention_filter = ApmRetentionFilterType("apm_retention_filter") diff --git a/datadog_api_client/v2/model/apm_span_error_flag.py b/datadog_api_client/v2/model/apm_span_error_flag.py new file mode 100644 index 0000000000..7040d3b01f --- /dev/null +++ b/datadog_api_client/v2/model/apm_span_error_flag.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class APMSpanErrorFlag(ModelSimple): + """ + Error flag for a span. `1` when the span is in error, `0` otherwise. + + :param value: Must be one of [0, 1]. + :type value: int + """ + + allowed_values = { + 0, + 1, + } + NO_ERROR: ClassVar["APMSpanErrorFlag"] + ERROR: ClassVar["APMSpanErrorFlag"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +APMSpanErrorFlag.NO_ERROR = APMSpanErrorFlag(0) +APMSpanErrorFlag.ERROR = APMSpanErrorFlag(1) diff --git a/datadog_api_client/v2/model/apm_trace_span.py b/datadog_api_client/v2/model/apm_trace_span.py new file mode 100644 index 0000000000..a78d4c851f --- /dev/null +++ b/datadog_api_client/v2/model/apm_trace_span.py @@ -0,0 +1,149 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.apm_span_error_flag import APMSpanErrorFlag + +class APMTraceSpan(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.apm_span_error_flag import APMSpanErrorFlag + return { + "duration": (int,), + "end_time": (int,), + "error": (APMSpanErrorFlag,), + "meta": ({str: (str,)},), + "metrics": ({str: (float,)},), + "name": (str,), + "parent_id": (int,), + "resource": (str,), + "resource_hash": (str,), + "restricted": (bool,), + "self_time": (float,), + "service": (str,), + "span_id": (int,), + "start_time": (int,), + "trace_id": (int,), + "trace_id_full": (str,), + "type": (str,), + } + attribute_map = { + "duration": "duration", + "end_time": "endTime", + "error": "error", + "meta": "meta", + "metrics": "metrics", + "name": "name", + "parent_id": "parentID", + "resource": "resource", + "resource_hash": "resourceHash", + "restricted": "restricted", + "self_time": "self_time", + "service": "service", + "span_id": "spanID", + "start_time": "startTime", + "trace_id": "traceID", + "trace_id_full": "traceIDFull", + "type": "type", + } + + def __init__(self_, duration: int, end_time: int, error: APMSpanErrorFlag, meta: Dict[str, str], metrics: Dict[str, float], name: str, parent_id: int, resource: str, service: str, span_id: int, start_time: int, trace_id: int, trace_id_full: str, type: str, resource_hash: Union[str, UnsetType]=unset, restricted: Union[bool, UnsetType]=unset, self_time: Union[float, UnsetType]=unset, **kwargs): + """ + A single APM span returned as part of a trace. + + :param duration: The duration of the span, in nanoseconds. + :type duration: int + + :param end_time: The end time of the span, in Unix nanoseconds. + :type end_time: int + + :param error: Error flag for a span. ``1`` when the span is in error, ``0`` otherwise. + :type error: APMSpanErrorFlag + + :param meta: String-valued tags attached to the span. Tag keys starting with ``_`` are + filtered out of the response. + :type meta: {str: (str,)} + + :param metrics: Numeric metrics attached to the span. Metric keys starting with ``_`` are + filtered out of the response. + :type metrics: {str: (float,)} + + :param name: The operation name of the span. + :type name: str + + :param parent_id: The ID of the parent span, or ``0`` when the span is a trace root. + :type parent_id: int + + :param resource: The resource that the span describes. + :type resource: str + + :param resource_hash: A hash of the resource field. + :type resource_hash: str, optional + + :param restricted: Whether access to the span is restricted by the organization's data access policies. + :type restricted: bool, optional + + :param self_time: The time spent in the span itself, excluding time spent in child spans, in nanoseconds. + :type self_time: float, optional + + :param service: The name of the service that emitted the span. + :type service: str + + :param span_id: The span ID, as an unsigned 64-bit integer. + :type span_id: int + + :param start_time: The start time of the span, in Unix nanoseconds. + :type start_time: int + + :param trace_id: The lower 64 bits of the trace ID, as an unsigned 64-bit integer. + :type trace_id: int + + :param trace_id_full: The full 128-bit trace ID, encoded as a 32-character hexadecimal string. + :type trace_id_full: str + + :param type: The type of the span (for example, ``web`` , ``db`` , or ``rpc`` ). + :type type: str + """ + if resource_hash is not unset: + kwargs["resource_hash"] = resource_hash + if restricted is not unset: + kwargs["restricted"] = restricted + if self_time is not unset: + kwargs["self_time"] = self_time + super().__init__(kwargs) + + + self_.duration = duration + self_.end_time = end_time + self_.error = error + self_.meta = meta + self_.metrics = metrics + self_.name = name + self_.parent_id = parent_id + self_.resource = resource + self_.service = service + self_.span_id = span_id + self_.start_time = start_time + self_.trace_id = trace_id + self_.trace_id_full = trace_id_full + self_.type = type diff --git a/datadog_api_client/v2/model/app_builder_event.py b/datadog_api_client/v2/model/app_builder_event.py new file mode 100644 index 0000000000..074cf5cfa7 --- /dev/null +++ b/datadog_api_client/v2/model/app_builder_event.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_builder_event_name import AppBuilderEventName + from datadog_api_client.v2.model.app_builder_event_type import AppBuilderEventType + +class AppBuilderEvent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_builder_event_name import AppBuilderEventName + from datadog_api_client.v2.model.app_builder_event_type import AppBuilderEventType + return { + "name": (AppBuilderEventName,), + "type": (AppBuilderEventType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: Union[AppBuilderEventName, UnsetType]=unset, type: Union[AppBuilderEventType, UnsetType]=unset, **kwargs): + """ + An event on a UI component that triggers a response or action in an app. + + :param name: The triggering action for the event. + :type name: AppBuilderEventName, optional + + :param type: The response to the event. + :type type: AppBuilderEventType, optional + """ + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/app_builder_event_name.py b/datadog_api_client/v2/model/app_builder_event_name.py new file mode 100644 index 0000000000..b68eb5be13 --- /dev/null +++ b/datadog_api_client/v2/model/app_builder_event_name.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppBuilderEventName(ModelSimple): + """ + The triggering action for the event. + + :param value: Must be one of ["pageChange", "tableRowClick", "_tableRowButtonClick", "change", "submit", "click", "toggleOpen", "close", "open", "executionFinished"]. + :type value: str + """ + + allowed_values = { + "pageChange", + "tableRowClick", + "_tableRowButtonClick", + "change", + "submit", + "click", + "toggleOpen", + "close", + "open", + "executionFinished", + } + PAGECHANGE: ClassVar["AppBuilderEventName"] + TABLEROWCLICK: ClassVar["AppBuilderEventName"] + TABLEROWBUTTONCLICK: ClassVar["AppBuilderEventName"] + CHANGE: ClassVar["AppBuilderEventName"] + SUBMIT: ClassVar["AppBuilderEventName"] + CLICK: ClassVar["AppBuilderEventName"] + TOGGLEOPEN: ClassVar["AppBuilderEventName"] + CLOSE: ClassVar["AppBuilderEventName"] + OPEN: ClassVar["AppBuilderEventName"] + EXECUTIONFINISHED: ClassVar["AppBuilderEventName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppBuilderEventName.PAGECHANGE = AppBuilderEventName("pageChange") +AppBuilderEventName.TABLEROWCLICK = AppBuilderEventName("tableRowClick") +AppBuilderEventName.TABLEROWBUTTONCLICK = AppBuilderEventName("_tableRowButtonClick") +AppBuilderEventName.CHANGE = AppBuilderEventName("change") +AppBuilderEventName.SUBMIT = AppBuilderEventName("submit") +AppBuilderEventName.CLICK = AppBuilderEventName("click") +AppBuilderEventName.TOGGLEOPEN = AppBuilderEventName("toggleOpen") +AppBuilderEventName.CLOSE = AppBuilderEventName("close") +AppBuilderEventName.OPEN = AppBuilderEventName("open") +AppBuilderEventName.EXECUTIONFINISHED = AppBuilderEventName("executionFinished") diff --git a/datadog_api_client/v2/model/app_builder_event_type.py b/datadog_api_client/v2/model/app_builder_event_type.py new file mode 100644 index 0000000000..bfed334e64 --- /dev/null +++ b/datadog_api_client/v2/model/app_builder_event_type.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppBuilderEventType(ModelSimple): + """ + The response to the event. + + :param value: Must be one of ["custom", "setComponentState", "triggerQuery", "openModal", "closeModal", "openUrl", "downloadFile", "setStateVariableValue"]. + :type value: str + """ + + allowed_values = { + "custom", + "setComponentState", + "triggerQuery", + "openModal", + "closeModal", + "openUrl", + "downloadFile", + "setStateVariableValue", + } + CUSTOM: ClassVar["AppBuilderEventType"] + SETCOMPONENTSTATE: ClassVar["AppBuilderEventType"] + TRIGGERQUERY: ClassVar["AppBuilderEventType"] + OPENMODAL: ClassVar["AppBuilderEventType"] + CLOSEMODAL: ClassVar["AppBuilderEventType"] + OPENURL: ClassVar["AppBuilderEventType"] + DOWNLOADFILE: ClassVar["AppBuilderEventType"] + SETSTATEVARIABLEVALUE: ClassVar["AppBuilderEventType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppBuilderEventType.CUSTOM = AppBuilderEventType("custom") +AppBuilderEventType.SETCOMPONENTSTATE = AppBuilderEventType("setComponentState") +AppBuilderEventType.TRIGGERQUERY = AppBuilderEventType("triggerQuery") +AppBuilderEventType.OPENMODAL = AppBuilderEventType("openModal") +AppBuilderEventType.CLOSEMODAL = AppBuilderEventType("closeModal") +AppBuilderEventType.OPENURL = AppBuilderEventType("openUrl") +AppBuilderEventType.DOWNLOADFILE = AppBuilderEventType("downloadFile") +AppBuilderEventType.SETSTATEVARIABLEVALUE = AppBuilderEventType("setStateVariableValue") diff --git a/datadog_api_client/v2/model/app_builder_list_tags_response.py b/datadog_api_client/v2/model/app_builder_list_tags_response.py new file mode 100644 index 0000000000..f034ecf59c --- /dev/null +++ b/datadog_api_client/v2/model/app_builder_list_tags_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_data import TagData + +class AppBuilderListTagsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_data import TagData + return { + "data": ([TagData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[TagData], UnsetType]=unset, **kwargs): + """ + The response for listing tags associated with apps. + + :param data: An array of tags. + :type data: [TagData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/app_definition_type.py b/datadog_api_client/v2/model/app_definition_type.py new file mode 100644 index 0000000000..be269f30eb --- /dev/null +++ b/datadog_api_client/v2/model/app_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppDefinitionType(ModelSimple): + """ + The app definition type. + + :param value: If omitted defaults to "appDefinitions". Must be one of ["appDefinitions"]. + :type value: str + """ + + allowed_values = { + "appDefinitions", + } + APPDEFINITIONS: ClassVar["AppDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppDefinitionType.APPDEFINITIONS = AppDefinitionType("appDefinitions") diff --git a/datadog_api_client/v2/model/app_deployment_type.py b/datadog_api_client/v2/model/app_deployment_type.py new file mode 100644 index 0000000000..45a3dad2e0 --- /dev/null +++ b/datadog_api_client/v2/model/app_deployment_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppDeploymentType(ModelSimple): + """ + The deployment type. + + :param value: If omitted defaults to "deployment". Must be one of ["deployment"]. + :type value: str + """ + + allowed_values = { + "deployment", + } + DEPLOYMENT: ClassVar["AppDeploymentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppDeploymentType.DEPLOYMENT = AppDeploymentType("deployment") diff --git a/datadog_api_client/v2/model/app_favorite_type.py b/datadog_api_client/v2/model/app_favorite_type.py new file mode 100644 index 0000000000..9369699d45 --- /dev/null +++ b/datadog_api_client/v2/model/app_favorite_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppFavoriteType(ModelSimple): + """ + The favorite resource type. + + :param value: If omitted defaults to "favorites". Must be one of ["favorites"]. + :type value: str + """ + + allowed_values = { + "favorites", + } + FAVORITES: ClassVar["AppFavoriteType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppFavoriteType.FAVORITES = AppFavoriteType("favorites") diff --git a/datadog_api_client/v2/model/app_key_registration_data.py b/datadog_api_client/v2/model/app_key_registration_data.py new file mode 100644 index 0000000000..32d2d6910d --- /dev/null +++ b/datadog_api_client/v2/model/app_key_registration_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_key_registration_data_type import AppKeyRegistrationDataType + +class AppKeyRegistrationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_key_registration_data_type import AppKeyRegistrationDataType + return { + "id": (UUID,), + "type": (AppKeyRegistrationDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, type: AppKeyRegistrationDataType, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Data related to the app key registration. + + :param id: The app key registration identifier + :type id: UUID, optional + + :param type: The definition of ``AppKeyRegistrationDataType`` object. + :type type: AppKeyRegistrationDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/app_key_registration_data_type.py b/datadog_api_client/v2/model/app_key_registration_data_type.py new file mode 100644 index 0000000000..8468f11273 --- /dev/null +++ b/datadog_api_client/v2/model/app_key_registration_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppKeyRegistrationDataType(ModelSimple): + """ + The definition of `AppKeyRegistrationDataType` object. + + :param value: If omitted defaults to "app_key_registration". Must be one of ["app_key_registration"]. + :type value: str + """ + + allowed_values = { + "app_key_registration", + } + APP_KEY_REGISTRATION: ClassVar["AppKeyRegistrationDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppKeyRegistrationDataType.APP_KEY_REGISTRATION = AppKeyRegistrationDataType("app_key_registration") diff --git a/datadog_api_client/v2/model/app_meta.py b/datadog_api_client/v2/model/app_meta.py new file mode 100644 index 0000000000..01e63da169 --- /dev/null +++ b/datadog_api_client/v2/model/app_meta.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AppMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "deleted_at": (datetime,), + "org_id": (int,), + "updated_at": (datetime,), + "updated_since_deployment": (bool,), + "user_id": (int,), + "user_name": (str,), + "user_uuid": (UUID,), + "version": (int,), + } + attribute_map = { + "created_at": "created_at", + "deleted_at": "deleted_at", + "org_id": "org_id", + "updated_at": "updated_at", + "updated_since_deployment": "updated_since_deployment", + "user_id": "user_id", + "user_name": "user_name", + "user_uuid": "user_uuid", + "version": "version", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, deleted_at: Union[datetime, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, updated_since_deployment: Union[bool, UnsetType]=unset, user_id: Union[int, UnsetType]=unset, user_name: Union[str, UnsetType]=unset, user_uuid: Union[UUID, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata of an app. + + :param created_at: Timestamp of when the app was created. + :type created_at: datetime, optional + + :param deleted_at: Timestamp of when the app was deleted. + :type deleted_at: datetime, optional + + :param org_id: The Datadog organization ID that owns the app. + :type org_id: int, optional + + :param updated_at: Timestamp of when the app was last updated. + :type updated_at: datetime, optional + + :param updated_since_deployment: Whether the app was updated since it was last published. Published apps are pinned to a specific version and do not automatically update when the app is updated. + :type updated_since_deployment: bool, optional + + :param user_id: The ID of the user who created the app. + :type user_id: int, optional + + :param user_name: The name (or email address) of the user who created the app. + :type user_name: str, optional + + :param user_uuid: The UUID of the user who created the app. + :type user_uuid: UUID, optional + + :param version: The version number of the app. This starts at 1 and increments with each update. + :type version: int, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if org_id is not unset: + kwargs["org_id"] = org_id + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updated_since_deployment is not unset: + kwargs["updated_since_deployment"] = updated_since_deployment + if user_id is not unset: + kwargs["user_id"] = user_id + if user_name is not unset: + kwargs["user_name"] = user_name + if user_uuid is not unset: + kwargs["user_uuid"] = user_uuid + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/app_protection_level.py b/datadog_api_client/v2/model/app_protection_level.py new file mode 100644 index 0000000000..ef1feeb836 --- /dev/null +++ b/datadog_api_client/v2/model/app_protection_level.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppProtectionLevel(ModelSimple): + """ + The publication protection level of the app. `approval_required` means changes must go through an approval workflow before being published. + + :param value: Must be one of ["direct_publish", "approval_required"]. + :type value: str + """ + + allowed_values = { + "direct_publish", + "approval_required", + } + DIRECT_PUBLISH: ClassVar["AppProtectionLevel"] + APPROVAL_REQUIRED: ClassVar["AppProtectionLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppProtectionLevel.DIRECT_PUBLISH = AppProtectionLevel("direct_publish") +AppProtectionLevel.APPROVAL_REQUIRED = AppProtectionLevel("approval_required") diff --git a/datadog_api_client/v2/model/app_protection_level_type.py b/datadog_api_client/v2/model/app_protection_level_type.py new file mode 100644 index 0000000000..deb109aa6b --- /dev/null +++ b/datadog_api_client/v2/model/app_protection_level_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppProtectionLevelType(ModelSimple): + """ + The protection-level resource type. + + :param value: If omitted defaults to "protectionLevel". Must be one of ["protectionLevel"]. + :type value: str + """ + + allowed_values = { + "protectionLevel", + } + PROTECTIONLEVEL: ClassVar["AppProtectionLevelType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppProtectionLevelType.PROTECTIONLEVEL = AppProtectionLevelType("protectionLevel") diff --git a/datadog_api_client/v2/model/app_relationship.py b/datadog_api_client/v2/model/app_relationship.py new file mode 100644 index 0000000000..8d93789a6e --- /dev/null +++ b/datadog_api_client/v2/model/app_relationship.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_connection import CustomConnection + from datadog_api_client.v2.model.deployment_relationship import DeploymentRelationship + +class AppRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_connection import CustomConnection + from datadog_api_client.v2.model.deployment_relationship import DeploymentRelationship + return { + "connections": ([CustomConnection],), + "deployment": (DeploymentRelationship,), + } + attribute_map = { + "connections": "connections", + "deployment": "deployment", + } + + def __init__(self_, connections: Union[List[CustomConnection], UnsetType]=unset, deployment: Union[DeploymentRelationship, UnsetType]=unset, **kwargs): + """ + The app's publication relationship and custom connections. + + :param connections: Array of custom connections used by the app. + :type connections: [CustomConnection], optional + + :param deployment: Information pointing to the app's publication status. + :type deployment: DeploymentRelationship, optional + """ + if connections is not unset: + kwargs["connections"] = connections + if deployment is not unset: + kwargs["deployment"] = deployment + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/app_self_service_type.py b/datadog_api_client/v2/model/app_self_service_type.py new file mode 100644 index 0000000000..89e54a1705 --- /dev/null +++ b/datadog_api_client/v2/model/app_self_service_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppSelfServiceType(ModelSimple): + """ + The self-service resource type. + + :param value: If omitted defaults to "selfService". Must be one of ["selfService"]. + :type value: str + """ + + allowed_values = { + "selfService", + } + SELFSERVICE: ClassVar["AppSelfServiceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppSelfServiceType.SELFSERVICE = AppSelfServiceType("selfService") diff --git a/datadog_api_client/v2/model/app_tags_type.py b/datadog_api_client/v2/model/app_tags_type.py new file mode 100644 index 0000000000..d24a5abc92 --- /dev/null +++ b/datadog_api_client/v2/model/app_tags_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppTagsType(ModelSimple): + """ + The tags resource type. + + :param value: If omitted defaults to "tags". Must be one of ["tags"]. + :type value: str + """ + + allowed_values = { + "tags", + } + TAGS: ClassVar["AppTagsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppTagsType.TAGS = AppTagsType("tags") diff --git a/datadog_api_client/v2/model/app_trigger_wrapper.py b/datadog_api_client/v2/model/app_trigger_wrapper.py new file mode 100644 index 0000000000..eeb90a2b0a --- /dev/null +++ b/datadog_api_client/v2/model/app_trigger_wrapper.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AppTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + return { + "app_trigger": (dict,), + "start_step_names": ([str],), + } + attribute_map = { + "app_trigger": "appTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, app_trigger: dict, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for an App-based trigger. + + :param app_trigger: Trigger a workflow from an App. + :type app_trigger: dict + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.app_trigger = app_trigger diff --git a/datadog_api_client/v2/model/app_version.py b/datadog_api_client/v2/model/app_version.py new file mode 100644 index 0000000000..0a600a8fc3 --- /dev/null +++ b/datadog_api_client/v2/model/app_version.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_version_attributes import AppVersionAttributes + from datadog_api_client.v2.model.app_version_type import AppVersionType + +class AppVersion(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_version_attributes import AppVersionAttributes + from datadog_api_client.v2.model.app_version_type import AppVersionType + return { + "attributes": (AppVersionAttributes,), + "id": (UUID,), + "type": (AppVersionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AppVersionAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, type: Union[AppVersionType, UnsetType]=unset, **kwargs): + """ + A version of an app. + + :param attributes: Attributes describing an app version. + :type attributes: AppVersionAttributes, optional + + :param id: The ID of the app version. + :type id: UUID, optional + + :param type: The app-version resource type. + :type type: AppVersionType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/app_version_attributes.py b/datadog_api_client/v2/model/app_version_attributes.py new file mode 100644 index 0000000000..a6d091fb8d --- /dev/null +++ b/datadog_api_client/v2/model/app_version_attributes.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AppVersionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "app_id": (UUID,), + "created_at": (datetime,), + "has_ever_been_published": (bool,), + "name": (str,), + "updated_at": (datetime,), + "user_id": (int,), + "user_name": (str,), + "user_uuid": (UUID,), + "version": (int,), + } + attribute_map = { + "app_id": "app_id", + "created_at": "created_at", + "has_ever_been_published": "has_ever_been_published", + "name": "name", + "updated_at": "updated_at", + "user_id": "user_id", + "user_name": "user_name", + "user_uuid": "user_uuid", + "version": "version", + } + + def __init__(self_, app_id: Union[UUID, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, has_ever_been_published: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, user_id: Union[int, UnsetType]=unset, user_name: Union[str, UnsetType]=unset, user_uuid: Union[UUID, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes describing an app version. + + :param app_id: The ID of the app this version belongs to. + :type app_id: UUID, optional + + :param created_at: Timestamp of when the version was created. + :type created_at: datetime, optional + + :param has_ever_been_published: Whether this version has ever been published. + :type has_ever_been_published: bool, optional + + :param name: The optional human-readable name of the version. + :type name: str, optional + + :param updated_at: Timestamp of when the version was last updated. + :type updated_at: datetime, optional + + :param user_id: The ID of the user who created the version. + :type user_id: int, optional + + :param user_name: The name (or email) of the user who created the version. + :type user_name: str, optional + + :param user_uuid: The UUID of the user who created the version. + :type user_uuid: UUID, optional + + :param version: The version number of the app, starting at 1. + :type version: int, optional + """ + if app_id is not unset: + kwargs["app_id"] = app_id + if created_at is not unset: + kwargs["created_at"] = created_at + if has_ever_been_published is not unset: + kwargs["has_ever_been_published"] = has_ever_been_published + if name is not unset: + kwargs["name"] = name + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if user_id is not unset: + kwargs["user_id"] = user_id + if user_name is not unset: + kwargs["user_name"] = user_name + if user_uuid is not unset: + kwargs["user_uuid"] = user_uuid + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/app_version_name_type.py b/datadog_api_client/v2/model/app_version_name_type.py new file mode 100644 index 0000000000..aae8afb80d --- /dev/null +++ b/datadog_api_client/v2/model/app_version_name_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppVersionNameType(ModelSimple): + """ + The version-name resource type. + + :param value: If omitted defaults to "versionNames". Must be one of ["versionNames"]. + :type value: str + """ + + allowed_values = { + "versionNames", + } + VERSIONNAMES: ClassVar["AppVersionNameType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppVersionNameType.VERSIONNAMES = AppVersionNameType("versionNames") diff --git a/datadog_api_client/v2/model/app_version_type.py b/datadog_api_client/v2/model/app_version_type.py new file mode 100644 index 0000000000..676aa8eada --- /dev/null +++ b/datadog_api_client/v2/model/app_version_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppVersionType(ModelSimple): + """ + The app-version resource type. + + :param value: If omitted defaults to "appVersions". Must be one of ["appVersions"]. + :type value: str + """ + + allowed_values = { + "appVersions", + } + APPVERSIONS: ClassVar["AppVersionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppVersionType.APPVERSIONS = AppVersionType("appVersions") diff --git a/datadog_api_client/v2/model/application_key_create_attributes.py b/datadog_api_client/v2/model/application_key_create_attributes.py new file mode 100644 index 0000000000..ea0c16feea --- /dev/null +++ b/datadog_api_client/v2/model/application_key_create_attributes.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationKeyCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "scopes": ([str], none_type), + } + attribute_map = { + "name": "name", + "scopes": "scopes", + } + + def __init__(self_, name: str, scopes: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Attributes used to create an application Key. + + :param name: Name of the application key. + :type name: str + + :param scopes: Array of scopes to grant the application key. + :type scopes: [str], none_type, optional + """ + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/application_key_create_data.py b/datadog_api_client/v2/model/application_key_create_data.py new file mode 100644 index 0000000000..f7c621319c --- /dev/null +++ b/datadog_api_client/v2/model/application_key_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_key_create_attributes import ApplicationKeyCreateAttributes + from datadog_api_client.v2.model.application_keys_type import ApplicationKeysType + +class ApplicationKeyCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_key_create_attributes import ApplicationKeyCreateAttributes + from datadog_api_client.v2.model.application_keys_type import ApplicationKeysType + return { + "attributes": (ApplicationKeyCreateAttributes,), + "type": (ApplicationKeysType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ApplicationKeyCreateAttributes, type: ApplicationKeysType, **kwargs): + """ + Object used to create an application key. + + :param attributes: Attributes used to create an application Key. + :type attributes: ApplicationKeyCreateAttributes + + :param type: Application Keys resource type. + :type type: ApplicationKeysType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/application_key_create_request.py b/datadog_api_client/v2/model/application_key_create_request.py new file mode 100644 index 0000000000..3278a99ced --- /dev/null +++ b/datadog_api_client/v2/model/application_key_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_key_create_data import ApplicationKeyCreateData + +class ApplicationKeyCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_key_create_data import ApplicationKeyCreateData + return { + "data": (ApplicationKeyCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ApplicationKeyCreateData, **kwargs): + """ + Request used to create an application key. + + :param data: Object used to create an application key. + :type data: ApplicationKeyCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/application_key_relationships.py b/datadog_api_client/v2/model/application_key_relationships.py new file mode 100644 index 0000000000..77d064e26e --- /dev/null +++ b/datadog_api_client/v2/model/application_key_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + +class ApplicationKeyRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + return { + "owned_by": (RelationshipToUser,), + } + attribute_map = { + "owned_by": "owned_by", + } + + def __init__(self_, owned_by: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + Resources related to the application key. + + :param owned_by: Relationship to user. + :type owned_by: RelationshipToUser, optional + """ + if owned_by is not unset: + kwargs["owned_by"] = owned_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_key_response.py b/datadog_api_client/v2/model/application_key_response.py new file mode 100644 index 0000000000..3a69cc408a --- /dev/null +++ b/datadog_api_client/v2/model/application_key_response.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_application_key import FullApplicationKey + from datadog_api_client.v2.model.application_key_response_included_item import ApplicationKeyResponseIncludedItem + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.role import Role + from datadog_api_client.v2.model.leaked_key import LeakedKey + +class ApplicationKeyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_application_key import FullApplicationKey + from datadog_api_client.v2.model.application_key_response_included_item import ApplicationKeyResponseIncludedItem + return { + "data": (FullApplicationKey,), + "included": ([ApplicationKeyResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[FullApplicationKey, UnsetType]=unset, included: Union[List[Union[ApplicationKeyResponseIncludedItem, User, Role, LeakedKey]], UnsetType]=unset, **kwargs): + """ + Response for retrieving an application key. + + :param data: Datadog application key. + :type data: FullApplicationKey, optional + + :param included: Array of objects related to the application key. + :type included: [ApplicationKeyResponseIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_key_response_included_item.py b/datadog_api_client/v2/model/application_key_response_included_item.py new file mode 100644 index 0000000000..b0bbc39dfa --- /dev/null +++ b/datadog_api_client/v2/model/application_key_response_included_item.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationKeyResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to an application key. + + :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.role import Role + from datadog_api_client.v2.model.leaked_key import LeakedKey + return { + "oneOf": [ + User, + Role, + LeakedKey, + ], + } diff --git a/datadog_api_client/v2/model/application_key_response_meta.py b/datadog_api_client/v2/model/application_key_response_meta.py new file mode 100644 index 0000000000..570063ece1 --- /dev/null +++ b/datadog_api_client/v2/model/application_key_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_key_response_meta_page import ApplicationKeyResponseMetaPage + +class ApplicationKeyResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_key_response_meta_page import ApplicationKeyResponseMetaPage + return { + "max_allowed_per_user": (int,), + "page": (ApplicationKeyResponseMetaPage,), + } + attribute_map = { + "max_allowed_per_user": "max_allowed_per_user", + "page": "page", + } + + def __init__(self_, max_allowed_per_user: Union[int, UnsetType]=unset, page: Union[ApplicationKeyResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Additional information related to the application key response. + + :param max_allowed_per_user: Max allowed number of application keys per user. + :type max_allowed_per_user: int, optional + + :param page: Additional information related to the application key response. + :type page: ApplicationKeyResponseMetaPage, optional + """ + if max_allowed_per_user is not unset: + kwargs["max_allowed_per_user"] = max_allowed_per_user + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_key_response_meta_page.py b/datadog_api_client/v2/model/application_key_response_meta_page.py new file mode 100644 index 0000000000..f17f1d3786 --- /dev/null +++ b/datadog_api_client/v2/model/application_key_response_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationKeyResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_filtered_count": (int,), + } + attribute_map = { + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Additional information related to the application key response. + + :param total_filtered_count: Total filtered application key count. + :type total_filtered_count: int, optional + """ + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_key_update_attributes.py b/datadog_api_client/v2/model/application_key_update_attributes.py new file mode 100644 index 0000000000..6d05641b4e --- /dev/null +++ b/datadog_api_client/v2/model/application_key_update_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationKeyUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "scopes": ([str], none_type), + } + attribute_map = { + "name": "name", + "scopes": "scopes", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, scopes: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Attributes used to update an application Key. + + :param name: Name of the application key. + :type name: str, optional + + :param scopes: Array of scopes to grant the application key. + :type scopes: [str], none_type, optional + """ + if name is not unset: + kwargs["name"] = name + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_key_update_data.py b/datadog_api_client/v2/model/application_key_update_data.py new file mode 100644 index 0000000000..2ef0d23cbf --- /dev/null +++ b/datadog_api_client/v2/model/application_key_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_key_update_attributes import ApplicationKeyUpdateAttributes + from datadog_api_client.v2.model.application_keys_type import ApplicationKeysType + +class ApplicationKeyUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_key_update_attributes import ApplicationKeyUpdateAttributes + from datadog_api_client.v2.model.application_keys_type import ApplicationKeysType + return { + "attributes": (ApplicationKeyUpdateAttributes,), + "id": (str,), + "type": (ApplicationKeysType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ApplicationKeyUpdateAttributes, id: str, type: ApplicationKeysType, **kwargs): + """ + Object used to update an application key. + + :param attributes: Attributes used to update an application Key. + :type attributes: ApplicationKeyUpdateAttributes + + :param id: ID of the application key. + :type id: str + + :param type: Application Keys resource type. + :type type: ApplicationKeysType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/application_key_update_request.py b/datadog_api_client/v2/model/application_key_update_request.py new file mode 100644 index 0000000000..7c4f81d97b --- /dev/null +++ b/datadog_api_client/v2/model/application_key_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_key_update_data import ApplicationKeyUpdateData + +class ApplicationKeyUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_key_update_data import ApplicationKeyUpdateData + return { + "data": (ApplicationKeyUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ApplicationKeyUpdateData, **kwargs): + """ + Request used to update an application key. + + :param data: Object used to update an application key. + :type data: ApplicationKeyUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/application_keys_sort.py b/datadog_api_client/v2/model/application_keys_sort.py new file mode 100644 index 0000000000..8d335fc6a5 --- /dev/null +++ b/datadog_api_client/v2/model/application_keys_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationKeysSort(ModelSimple): + """ + Sorting options + + :param value: If omitted defaults to "name". Must be one of ["created_at", "-created_at", "last4", "-last4", "name", "-name"]. + :type value: str + """ + + allowed_values = { + "created_at", + "-created_at", + "last4", + "-last4", + "name", + "-name", + } + CREATED_AT_ASCENDING: ClassVar["ApplicationKeysSort"] + CREATED_AT_DESCENDING: ClassVar["ApplicationKeysSort"] + LAST4_ASCENDING: ClassVar["ApplicationKeysSort"] + LAST4_DESCENDING: ClassVar["ApplicationKeysSort"] + NAME_ASCENDING: ClassVar["ApplicationKeysSort"] + NAME_DESCENDING: ClassVar["ApplicationKeysSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationKeysSort.CREATED_AT_ASCENDING = ApplicationKeysSort("created_at") +ApplicationKeysSort.CREATED_AT_DESCENDING = ApplicationKeysSort("-created_at") +ApplicationKeysSort.LAST4_ASCENDING = ApplicationKeysSort("last4") +ApplicationKeysSort.LAST4_DESCENDING = ApplicationKeysSort("-last4") +ApplicationKeysSort.NAME_ASCENDING = ApplicationKeysSort("name") +ApplicationKeysSort.NAME_DESCENDING = ApplicationKeysSort("-name") diff --git a/datadog_api_client/v2/model/application_keys_type.py b/datadog_api_client/v2/model/application_keys_type.py new file mode 100644 index 0000000000..7802ebdecd --- /dev/null +++ b/datadog_api_client/v2/model/application_keys_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationKeysType(ModelSimple): + """ + Application Keys resource type. + + :param value: If omitted defaults to "application_keys". Must be one of ["application_keys"]. + :type value: str + """ + + allowed_values = { + "application_keys", + } + APPLICATION_KEYS: ClassVar["ApplicationKeysType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationKeysType.APPLICATION_KEYS = ApplicationKeysType("application_keys") diff --git a/datadog_api_client/v2/model/application_security_policy_attributes.py b/datadog_api_client/v2/model/application_security_policy_attributes.py new file mode 100644 index 0000000000..d0e27ea54c --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_attributes.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_rule_override import ApplicationSecurityPolicyRuleOverride + from datadog_api_client.v2.model.application_security_policy_ruleset_override import ApplicationSecurityPolicyRulesetOverride + from datadog_api_client.v2.model.application_security_policy_scope import ApplicationSecurityPolicyScope + +class ApplicationSecurityPolicyAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_rule_override import ApplicationSecurityPolicyRuleOverride + from datadog_api_client.v2.model.application_security_policy_ruleset_override import ApplicationSecurityPolicyRulesetOverride + from datadog_api_client.v2.model.application_security_policy_scope import ApplicationSecurityPolicyScope + return { + "description": (str,), + "is_default": (bool,), + "name": (str,), + "protection_presets": ([str],), + "rules": ([ApplicationSecurityPolicyRuleOverride],), + "rulesets": ([ApplicationSecurityPolicyRulesetOverride],), + "scope": ([ApplicationSecurityPolicyScope],), + "version": (int,), + } + attribute_map = { + "description": "description", + "is_default": "isDefault", + "name": "name", + "protection_presets": "protectionPresets", + "rules": "rules", + "rulesets": "rulesets", + "scope": "scope", + "version": "version", + } + + def __init__(self_, description: str, name: str, is_default: Union[bool, UnsetType]=unset, protection_presets: Union[List[str], UnsetType]=unset, rules: Union[List[ApplicationSecurityPolicyRuleOverride], UnsetType]=unset, rulesets: Union[List[ApplicationSecurityPolicyRulesetOverride], UnsetType]=unset, scope: Union[List[ApplicationSecurityPolicyScope], UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + A WAF policy. + + :param description: Description of the WAF policy. + :type description: str + + :param is_default: Make this policy the default policy. The default policy is applied to + every service not specifically assigned to another policy. + :type is_default: bool, optional + + :param name: The name of the WAF policy. + :type name: str + + :param protection_presets: Presets enabled on this policy. + :type protection_presets: [str], optional + + :param rules: Rule overrides applied by the policy. + :type rules: [ApplicationSecurityPolicyRuleOverride], optional + + :param rulesets: Deprecated: Ruleset overrides. Use ``protectionPresets`` instead. **Deprecated**. + :type rulesets: [ApplicationSecurityPolicyRulesetOverride], optional + + :param scope: The scope of the WAF policy. + :type scope: [ApplicationSecurityPolicyScope], optional + + :param version: Version of the WAF ruleset maintained by Datadog used by this policy. 0 is the default value. + :type version: int, optional + """ + if is_default is not unset: + kwargs["is_default"] = is_default + if protection_presets is not unset: + kwargs["protection_presets"] = protection_presets + if rules is not unset: + kwargs["rules"] = rules + if rulesets is not unset: + kwargs["rulesets"] = rulesets + if scope is not unset: + kwargs["scope"] = scope + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.description = description + self_.name = name diff --git a/datadog_api_client/v2/model/application_security_policy_create_attributes.py b/datadog_api_client/v2/model/application_security_policy_create_attributes.py new file mode 100644 index 0000000000..0ba4453541 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_create_attributes.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_rule_override import ApplicationSecurityPolicyRuleOverride + from datadog_api_client.v2.model.application_security_policy_ruleset_override import ApplicationSecurityPolicyRulesetOverride + from datadog_api_client.v2.model.application_security_policy_scope import ApplicationSecurityPolicyScope + +class ApplicationSecurityPolicyCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_rule_override import ApplicationSecurityPolicyRuleOverride + from datadog_api_client.v2.model.application_security_policy_ruleset_override import ApplicationSecurityPolicyRulesetOverride + from datadog_api_client.v2.model.application_security_policy_scope import ApplicationSecurityPolicyScope + return { + "based_on": (str,), + "description": (str,), + "is_default": (bool,), + "name": (str,), + "protection_presets": ([str],), + "rules": ([ApplicationSecurityPolicyRuleOverride],), + "rulesets": ([ApplicationSecurityPolicyRulesetOverride],), + "scope": ([ApplicationSecurityPolicyScope],), + "version": (int,), + } + attribute_map = { + "based_on": "basedOn", + "description": "description", + "is_default": "isDefault", + "name": "name", + "protection_presets": "protectionPresets", + "rules": "rules", + "rulesets": "rulesets", + "scope": "scope", + "version": "version", + } + + def __init__(self_, based_on: str, description: str, name: str, is_default: Union[bool, UnsetType]=unset, protection_presets: Union[List[str], UnsetType]=unset, rules: Union[List[ApplicationSecurityPolicyRuleOverride], UnsetType]=unset, rulesets: Union[List[ApplicationSecurityPolicyRulesetOverride], UnsetType]=unset, scope: Union[List[ApplicationSecurityPolicyScope], UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Create a new WAF policy. + + :param based_on: When creating a new policy, clone the policy indicated by this identifier. + :type based_on: str + + :param description: Description of the WAF policy. + :type description: str + + :param is_default: Make this policy the default policy. The default policy is applied to + every service not specifically assigned to another policy. + :type is_default: bool, optional + + :param name: The name of the WAF policy. + :type name: str + + :param protection_presets: Presets enabled on this policy. + :type protection_presets: [str], optional + + :param rules: Rule overrides applied by the policy. + :type rules: [ApplicationSecurityPolicyRuleOverride], optional + + :param rulesets: Deprecated: Ruleset overrides. Use ``protectionPresets`` instead. **Deprecated**. + :type rulesets: [ApplicationSecurityPolicyRulesetOverride], optional + + :param scope: The scope of the WAF policy. + :type scope: [ApplicationSecurityPolicyScope], optional + + :param version: Version of the WAF ruleset maintained by Datadog used by this policy. 0 is the default value. + :type version: int, optional + """ + if is_default is not unset: + kwargs["is_default"] = is_default + if protection_presets is not unset: + kwargs["protection_presets"] = protection_presets + if rules is not unset: + kwargs["rules"] = rules + if rulesets is not unset: + kwargs["rulesets"] = rulesets + if scope is not unset: + kwargs["scope"] = scope + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.based_on = based_on + self_.description = description + self_.name = name diff --git a/datadog_api_client/v2/model/application_security_policy_create_data.py b/datadog_api_client/v2/model/application_security_policy_create_data.py new file mode 100644 index 0000000000..8892841194 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_create_attributes import ApplicationSecurityPolicyCreateAttributes + from datadog_api_client.v2.model.application_security_policy_type import ApplicationSecurityPolicyType + +class ApplicationSecurityPolicyCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_create_attributes import ApplicationSecurityPolicyCreateAttributes + from datadog_api_client.v2.model.application_security_policy_type import ApplicationSecurityPolicyType + return { + "attributes": (ApplicationSecurityPolicyCreateAttributes,), + "type": (ApplicationSecurityPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ApplicationSecurityPolicyCreateAttributes, type: ApplicationSecurityPolicyType, **kwargs): + """ + Object for a single WAF policy. + + :param attributes: Create a new WAF policy. + :type attributes: ApplicationSecurityPolicyCreateAttributes + + :param type: The type of the resource. The value should always be ``policy``. + :type type: ApplicationSecurityPolicyType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/application_security_policy_create_request.py b/datadog_api_client/v2/model/application_security_policy_create_request.py new file mode 100644 index 0000000000..16e1338beb --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_create_data import ApplicationSecurityPolicyCreateData + +class ApplicationSecurityPolicyCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_create_data import ApplicationSecurityPolicyCreateData + return { + "data": (ApplicationSecurityPolicyCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ApplicationSecurityPolicyCreateData, **kwargs): + """ + Request object that includes the policy to create. + + :param data: Object for a single WAF policy. + :type data: ApplicationSecurityPolicyCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/application_security_policy_data.py b/datadog_api_client/v2/model/application_security_policy_data.py new file mode 100644 index 0000000000..e9a0e8e114 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_attributes import ApplicationSecurityPolicyAttributes + from datadog_api_client.v2.model.application_security_policy_metadata import ApplicationSecurityPolicyMetadata + from datadog_api_client.v2.model.application_security_policy_type import ApplicationSecurityPolicyType + +class ApplicationSecurityPolicyData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_attributes import ApplicationSecurityPolicyAttributes + from datadog_api_client.v2.model.application_security_policy_metadata import ApplicationSecurityPolicyMetadata + from datadog_api_client.v2.model.application_security_policy_type import ApplicationSecurityPolicyType + return { + "attributes": (ApplicationSecurityPolicyAttributes,), + "id": (str,), + "meta": (ApplicationSecurityPolicyMetadata,), + "type": (ApplicationSecurityPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "type": "type", + } + read_only_vars = { + "id", + "meta", + } + + def __init__(self_, attributes: Union[ApplicationSecurityPolicyAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, meta: Union[ApplicationSecurityPolicyMetadata, UnsetType]=unset, type: Union[ApplicationSecurityPolicyType, UnsetType]=unset, **kwargs): + """ + Object for a single WAF policy. + + :param attributes: A WAF policy. + :type attributes: ApplicationSecurityPolicyAttributes, optional + + :param id: The ID of the policy. + :type id: str, optional + + :param meta: Metadata associated with the WAF policy. + :type meta: ApplicationSecurityPolicyMetadata, optional + + :param type: The type of the resource. The value should always be ``policy``. + :type type: ApplicationSecurityPolicyType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if meta is not unset: + kwargs["meta"] = meta + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_policy_list_response.py b/datadog_api_client/v2/model/application_security_policy_list_response.py new file mode 100644 index 0000000000..dccb7010ba --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_data import ApplicationSecurityPolicyData + +class ApplicationSecurityPolicyListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_data import ApplicationSecurityPolicyData + return { + "data": ([ApplicationSecurityPolicyData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ApplicationSecurityPolicyData], UnsetType]=unset, **kwargs): + """ + Response object that includes a list of WAF policies. + + :param data: The WAF policy data. + :type data: [ApplicationSecurityPolicyData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_policy_metadata.py b/datadog_api_client/v2/model/application_security_policy_metadata.py new file mode 100644 index 0000000000..12174b9c2d --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityPolicyMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "added_at": (datetime,), + "added_by": (str,), + "added_by_name": (str,), + "modified_at": (datetime,), + "modified_by": (str,), + "modified_by_name": (str,), + } + attribute_map = { + "added_at": "added_at", + "added_by": "added_by", + "added_by_name": "added_by_name", + "modified_at": "modified_at", + "modified_by": "modified_by", + "modified_by_name": "modified_by_name", + } + + def __init__(self_, added_at: Union[datetime, UnsetType]=unset, added_by: Union[str, UnsetType]=unset, added_by_name: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, modified_by: Union[str, UnsetType]=unset, modified_by_name: Union[str, UnsetType]=unset, **kwargs): + """ + Metadata associated with the WAF policy. + + :param added_at: The date and time the WAF policy was created. + :type added_at: datetime, optional + + :param added_by: The handle of the user who created the WAF policy. + :type added_by: str, optional + + :param added_by_name: The name of the user who created the WAF policy. + :type added_by_name: str, optional + + :param modified_at: The date and time the WAF policy was last updated. + :type modified_at: datetime, optional + + :param modified_by: The handle of the user who last updated the WAF policy. + :type modified_by: str, optional + + :param modified_by_name: The name of the user who last updated the WAF policy. + :type modified_by_name: str, optional + """ + if added_at is not unset: + kwargs["added_at"] = added_at + if added_by is not unset: + kwargs["added_by"] = added_by + if added_by_name is not unset: + kwargs["added_by_name"] = added_by_name + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if modified_by is not unset: + kwargs["modified_by"] = modified_by + if modified_by_name is not unset: + kwargs["modified_by_name"] = modified_by_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_policy_response.py b/datadog_api_client/v2/model/application_security_policy_response.py new file mode 100644 index 0000000000..de8d1ae7e7 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_data import ApplicationSecurityPolicyData + +class ApplicationSecurityPolicyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_data import ApplicationSecurityPolicyData + return { + "data": (ApplicationSecurityPolicyData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ApplicationSecurityPolicyData, UnsetType]=unset, **kwargs): + """ + Response object that includes a single WAF policy. + + :param data: Object for a single WAF policy. + :type data: ApplicationSecurityPolicyData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_policy_rule_override.py b/datadog_api_client/v2/model/application_security_policy_rule_override.py new file mode 100644 index 0000000000..87e2970612 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_rule_override.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityPolicyRuleOverride(ModelNormal): + @cached_property + def openapi_types(_): + return { + "blocking": (bool,), + "enabled": (bool,), + "extended_data_collection": (bool,), + "id": (str,), + } + attribute_map = { + "blocking": "blocking", + "enabled": "enabled", + "extended_data_collection": "extended_data_collection", + "id": "id", + } + + def __init__(self_, blocking: bool, enabled: bool, id: str, extended_data_collection: Union[bool, UnsetType]=unset, **kwargs): + """ + Override WAF rule parameters for services in a policy. + + :param blocking: When blocking is enabled, the rule will block the traffic matched by this rule. + :type blocking: bool + + :param enabled: When false, this rule will not match any traffic. + :type enabled: bool + + :param extended_data_collection: When true, collects additional data from the WAF for this rule. + :type extended_data_collection: bool, optional + + :param id: Override the parameters for this WAF rule identifier. + :type id: str + """ + if extended_data_collection is not unset: + kwargs["extended_data_collection"] = extended_data_collection + super().__init__(kwargs) + + + self_.blocking = blocking + self_.enabled = enabled + self_.id = id diff --git a/datadog_api_client/v2/model/application_security_policy_ruleset_override.py b/datadog_api_client/v2/model/application_security_policy_ruleset_override.py new file mode 100644 index 0000000000..48fab851e6 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_ruleset_override.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityPolicyRulesetOverride(ModelNormal): + @cached_property + def openapi_types(_): + return { + "blocking": (bool,), + "enabled": (bool,), + "id": (str,), + } + attribute_map = { + "blocking": "blocking", + "enabled": "enabled", + "id": "id", + } + + def __init__(self_, blocking: bool, enabled: bool, id: str, **kwargs): + """ + Deprecated: Override WAF ruleset parameters. Use ``protectionPresets`` instead. + + :param blocking: When blocking is enabled, the ruleset will block the traffic it matches. + :type blocking: bool + + :param enabled: When false, this ruleset will not match any traffic. + :type enabled: bool + + :param id: The identifier of the ruleset to override. + :type id: str + """ + super().__init__(kwargs) + + + self_.blocking = blocking + self_.enabled = enabled + self_.id = id diff --git a/datadog_api_client/v2/model/application_security_policy_scope.py b/datadog_api_client/v2/model/application_security_policy_scope.py new file mode 100644 index 0000000000..c788ddbd78 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_scope.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityPolicyScope(ModelNormal): + @cached_property + def openapi_types(_): + return { + "env": (str,), + "service": (str,), + } + attribute_map = { + "env": "env", + "service": "service", + } + + def __init__(self_, env: str, service: str, **kwargs): + """ + The scope of the WAF policy. + + :param env: The environment scope for the WAF policy. + :type env: str + + :param service: The service scope for the WAF policy. + :type service: str + """ + super().__init__(kwargs) + + + self_.env = env + self_.service = service diff --git a/datadog_api_client/v2/model/application_security_policy_type.py b/datadog_api_client/v2/model/application_security_policy_type.py new file mode 100644 index 0000000000..0758b4c598 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityPolicyType(ModelSimple): + """ + The type of the resource. The value should always be `policy`. + + :param value: If omitted defaults to "policy". Must be one of ["policy"]. + :type value: str + """ + + allowed_values = { + "policy", + } + POLICY: ClassVar["ApplicationSecurityPolicyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityPolicyType.POLICY = ApplicationSecurityPolicyType("policy") diff --git a/datadog_api_client/v2/model/application_security_policy_update_attributes.py b/datadog_api_client/v2/model/application_security_policy_update_attributes.py new file mode 100644 index 0000000000..e96ce11678 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_update_attributes.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_rule_override import ApplicationSecurityPolicyRuleOverride + from datadog_api_client.v2.model.application_security_policy_ruleset_override import ApplicationSecurityPolicyRulesetOverride + from datadog_api_client.v2.model.application_security_policy_scope import ApplicationSecurityPolicyScope + +class ApplicationSecurityPolicyUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_rule_override import ApplicationSecurityPolicyRuleOverride + from datadog_api_client.v2.model.application_security_policy_ruleset_override import ApplicationSecurityPolicyRulesetOverride + from datadog_api_client.v2.model.application_security_policy_scope import ApplicationSecurityPolicyScope + return { + "description": (str,), + "is_default": (bool,), + "name": (str,), + "protection_presets": ([str],), + "rules": ([ApplicationSecurityPolicyRuleOverride],), + "rulesets": ([ApplicationSecurityPolicyRulesetOverride],), + "scope": ([ApplicationSecurityPolicyScope],), + "version": (int,), + } + attribute_map = { + "description": "description", + "is_default": "isDefault", + "name": "name", + "protection_presets": "protectionPresets", + "rules": "rules", + "rulesets": "rulesets", + "scope": "scope", + "version": "version", + } + + def __init__(self_, description: str, is_default: bool, name: str, protection_presets: List[str], rules: List[ApplicationSecurityPolicyRuleOverride], scope: List[ApplicationSecurityPolicyScope], rulesets: Union[List[ApplicationSecurityPolicyRulesetOverride], UnsetType]=unset, **kwargs): + """ + Update a WAF policy. + + :param description: Description of the WAF policy. + :type description: str + + :param is_default: Make this policy the default policy. The default policy is applied to + every service not specifically assigned to another policy. + :type is_default: bool + + :param name: The name of the WAF policy. + :type name: str + + :param protection_presets: Presets enabled on this policy. + :type protection_presets: [str] + + :param rules: Rule overrides applied by the policy. + :type rules: [ApplicationSecurityPolicyRuleOverride] + + :param rulesets: Deprecated: Ruleset overrides. Use ``protectionPresets`` instead. **Deprecated**. + :type rulesets: [ApplicationSecurityPolicyRulesetOverride], optional + + :param scope: The scope of the WAF policy. + :type scope: [ApplicationSecurityPolicyScope] + + :param version: Version of the WAF ruleset maintained by Datadog used by this policy. 0 is the default value. + :type version: int + """ + if rulesets is not unset: + kwargs["rulesets"] = rulesets + super().__init__(kwargs) + version = kwargs.get("version", 0) + + + self_.description = description + self_.is_default = is_default + self_.name = name + self_.protection_presets = protection_presets + self_.rules = rules + self_.scope = scope + self_.version = version diff --git a/datadog_api_client/v2/model/application_security_policy_update_data.py b/datadog_api_client/v2/model/application_security_policy_update_data.py new file mode 100644 index 0000000000..031f34cab6 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_update_attributes import ApplicationSecurityPolicyUpdateAttributes + from datadog_api_client.v2.model.application_security_policy_type import ApplicationSecurityPolicyType + +class ApplicationSecurityPolicyUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_update_attributes import ApplicationSecurityPolicyUpdateAttributes + from datadog_api_client.v2.model.application_security_policy_type import ApplicationSecurityPolicyType + return { + "attributes": (ApplicationSecurityPolicyUpdateAttributes,), + "type": (ApplicationSecurityPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ApplicationSecurityPolicyUpdateAttributes, type: ApplicationSecurityPolicyType, **kwargs): + """ + Object for a single WAF policy. + + :param attributes: Update a WAF policy. + :type attributes: ApplicationSecurityPolicyUpdateAttributes + + :param type: The type of the resource. The value should always be ``policy``. + :type type: ApplicationSecurityPolicyType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/application_security_policy_update_request.py b/datadog_api_client/v2/model/application_security_policy_update_request.py new file mode 100644 index 0000000000..977d622e70 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_policy_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_policy_update_data import ApplicationSecurityPolicyUpdateData + +class ApplicationSecurityPolicyUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_policy_update_data import ApplicationSecurityPolicyUpdateData + return { + "data": (ApplicationSecurityPolicyUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ApplicationSecurityPolicyUpdateData, **kwargs): + """ + Request object that includes the policy to update. + + :param data: Object for a single WAF policy. + :type data: ApplicationSecurityPolicyUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/application_security_service_attributes.py b/datadog_api_client/v2/model/application_security_service_attributes.py new file mode 100644 index 0000000000..b34ce0c9a5 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_service_attributes.py @@ -0,0 +1,231 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityServiceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "agent_versions": ([str],), + "app_type": (str,), + "asm_threat_compatible": (bool,), + "backend_waf_event_count": (int,), + "business_logic": ([str],), + "color": (str,), + "env": (str,), + "event_count": (int,), + "event_trend": ([int],), + "has_appsec_enabled": (bool,), + "hits": (int,), + "iast_product_activation": (bool,), + "iast_product_compatibility": (str,), + "iast_product_compatibility_reasons": ([str],), + "languages": ([str],), + "last_ingested_spans": (int,), + "rc_capabilities": ([str],), + "recommended_business_logic": ([str],), + "risk_product_activation": (bool,), + "risk_product_compatibility": (str,), + "risk_product_compatibility_reasons": ([str],), + "rules_version": ([str],), + "service": (str,), + "signal_count": (int,), + "signal_trend": ([int],), + "source": ([str],), + "teams": ([str],), + "tracer_versions": ([str],), + "vm_activation": (str,), + "vuln_critical_count": (int,), + "vuln_high_count": (int,), + "without_filter_services": (int,), + } + attribute_map = { + "agent_versions": "agent_versions", + "app_type": "app_type", + "asm_threat_compatible": "asm_threat_compatible", + "backend_waf_event_count": "backend_waf_event_count", + "business_logic": "business_logic", + "color": "color", + "env": "env", + "event_count": "event_count", + "event_trend": "event_trend", + "has_appsec_enabled": "has_appsec_enabled", + "hits": "hits", + "iast_product_activation": "iast_product_activation", + "iast_product_compatibility": "iast_product_compatibility", + "iast_product_compatibility_reasons": "iast_product_compatibility_reasons", + "languages": "languages", + "last_ingested_spans": "last_ingested_spans", + "rc_capabilities": "rc_capabilities", + "recommended_business_logic": "recommended_business_logic", + "risk_product_activation": "risk_product_activation", + "risk_product_compatibility": "risk_product_compatibility", + "risk_product_compatibility_reasons": "risk_product_compatibility_reasons", + "rules_version": "rules_version", + "service": "service", + "signal_count": "signal_count", + "signal_trend": "signal_trend", + "source": "source", + "teams": "teams", + "tracer_versions": "tracer_versions", + "vm_activation": "vm-activation", + "vuln_critical_count": "vuln_critical_count", + "vuln_high_count": "vuln_high_count", + "without_filter_services": "without_filter_services", + } + + def __init__(self_, agent_versions: List[str], app_type: str, asm_threat_compatible: bool, backend_waf_event_count: int, business_logic: List[str], color: str, env: str, event_count: int, event_trend: List[int], has_appsec_enabled: bool, hits: int, iast_product_activation: bool, iast_product_compatibility: str, iast_product_compatibility_reasons: List[str], languages: List[str], last_ingested_spans: int, rc_capabilities: List[str], recommended_business_logic: List[str], risk_product_activation: bool, risk_product_compatibility: str, risk_product_compatibility_reasons: List[str], rules_version: List[str], service: str, signal_count: int, signal_trend: List[int], source: List[str], teams: List[str], tracer_versions: List[str], vm_activation: str, vuln_critical_count: int, vuln_high_count: int, without_filter_services: int, **kwargs): + """ + Application Security details describing a service in a given environment. + + :param agent_versions: The Datadog Agent versions reporting for the service. + :type agent_versions: [str] + + :param app_type: The application type of the service, such as ``web`` or ``serverless``. + :type app_type: str + + :param asm_threat_compatible: Whether the service is compatible with Application Security Management (Threats). + :type asm_threat_compatible: bool + + :param backend_waf_event_count: The number of backend WAF events detected for the service. + :type backend_waf_event_count: int + + :param business_logic: The enabled business logic detection rules for the service. + :type business_logic: [str] + + :param color: Deprecated: a display color associated with the service in the UI. **Deprecated**. + :type color: str + + :param env: The environment the service runs in. + :type env: str + + :param event_count: The number of Application Security events detected for the service. + :type event_count: int + + :param event_trend: Deprecated: the trend of Application Security events over time. **Deprecated**. + :type event_trend: [int] + + :param has_appsec_enabled: Whether Application Security Management (Threats) is enabled for the service. + :type has_appsec_enabled: bool + + :param hits: Deprecated: the number of hits for the service. **Deprecated**. + :type hits: int + + :param iast_product_activation: Whether Interactive Application Security Testing (IAST) is enabled for the service. + :type iast_product_activation: bool + + :param iast_product_compatibility: The Interactive Application Security Testing (IAST) compatibility status of the service. + :type iast_product_compatibility: str + + :param iast_product_compatibility_reasons: The reasons explaining the Interactive Application Security Testing (IAST) compatibility status. + :type iast_product_compatibility_reasons: [str] + + :param languages: The programming languages detected for the service. + :type languages: [str] + + :param last_ingested_spans: The Unix timestamp, in seconds, of the last ingested span for the service. + :type last_ingested_spans: int + + :param rc_capabilities: The Remote Configuration capabilities reported by the service. + :type rc_capabilities: [str] + + :param recommended_business_logic: The recommended business logic detection rules for the service. + :type recommended_business_logic: [str] + + :param risk_product_activation: Whether Software Composition Analysis (SCA) is enabled for the service. + :type risk_product_activation: bool + + :param risk_product_compatibility: The Software Composition Analysis (SCA) compatibility status of the service. + :type risk_product_compatibility: str + + :param risk_product_compatibility_reasons: The reasons explaining the Software Composition Analysis (SCA) compatibility status. + :type risk_product_compatibility_reasons: [str] + + :param rules_version: The WAF rules versions applied to the service. + :type rules_version: [str] + + :param service: The name of the service. + :type service: str + + :param signal_count: Deprecated: the number of security signals for the service. **Deprecated**. + :type signal_count: int + + :param signal_trend: Deprecated: the trend of security signals over time. **Deprecated**. + :type signal_trend: [int] + + :param source: The data sources that contributed information about the service. + :type source: [str] + + :param teams: The teams that own the service. + :type teams: [str] + + :param tracer_versions: The Datadog tracing library versions reporting for the service. + :type tracer_versions: [str] + + :param vm_activation: The Vulnerability Management activation status of the service. + :type vm_activation: str + + :param vuln_critical_count: Deprecated: the number of critical-severity vulnerabilities for the service. **Deprecated**. + :type vuln_critical_count: int + + :param vuln_high_count: Deprecated: the number of high-severity vulnerabilities for the service. **Deprecated**. + :type vuln_high_count: int + + :param without_filter_services: The total number of services available without applying the service filter. + :type without_filter_services: int + """ + super().__init__(kwargs) + + + self_.agent_versions = agent_versions + self_.app_type = app_type + self_.asm_threat_compatible = asm_threat_compatible + self_.backend_waf_event_count = backend_waf_event_count + self_.business_logic = business_logic + self_.color = color + self_.env = env + self_.event_count = event_count + self_.event_trend = event_trend + self_.has_appsec_enabled = has_appsec_enabled + self_.hits = hits + self_.iast_product_activation = iast_product_activation + self_.iast_product_compatibility = iast_product_compatibility + self_.iast_product_compatibility_reasons = iast_product_compatibility_reasons + self_.languages = languages + self_.last_ingested_spans = last_ingested_spans + self_.rc_capabilities = rc_capabilities + self_.recommended_business_logic = recommended_business_logic + self_.risk_product_activation = risk_product_activation + self_.risk_product_compatibility = risk_product_compatibility + self_.risk_product_compatibility_reasons = risk_product_compatibility_reasons + self_.rules_version = rules_version + self_.service = service + self_.signal_count = signal_count + self_.signal_trend = signal_trend + self_.source = source + self_.teams = teams + self_.tracer_versions = tracer_versions + self_.vm_activation = vm_activation + self_.vuln_critical_count = vuln_critical_count + self_.vuln_high_count = vuln_high_count + self_.without_filter_services = without_filter_services diff --git a/datadog_api_client/v2/model/application_security_service_resource.py b/datadog_api_client/v2/model/application_security_service_resource.py new file mode 100644 index 0000000000..46f98985f1 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_service_resource.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_service_attributes import ApplicationSecurityServiceAttributes + from datadog_api_client.v2.model.application_security_service_type import ApplicationSecurityServiceType + +class ApplicationSecurityServiceResource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_service_attributes import ApplicationSecurityServiceAttributes + from datadog_api_client.v2.model.application_security_service_type import ApplicationSecurityServiceType + return { + "attributes": (ApplicationSecurityServiceAttributes,), + "id": (str,), + "type": (ApplicationSecurityServiceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ApplicationSecurityServiceAttributes, id: str, type: ApplicationSecurityServiceType, **kwargs): + """ + A JSON:API resource describing a service and its Application Security details. + + :param attributes: Application Security details describing a service in a given environment. + :type attributes: ApplicationSecurityServiceAttributes + + :param id: The unique identifier of the service, formatted as ``_``. + :type id: str + + :param type: The type of the resource. The value should always be ``service_env``. + :type type: ApplicationSecurityServiceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/application_security_service_type.py b/datadog_api_client/v2/model/application_security_service_type.py new file mode 100644 index 0000000000..3ae5ba55aa --- /dev/null +++ b/datadog_api_client/v2/model/application_security_service_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityServiceType(ModelSimple): + """ + The type of the resource. The value should always be `service_env`. + + :param value: If omitted defaults to "service_env". Must be one of ["service_env"]. + :type value: str + """ + + allowed_values = { + "service_env", + } + SERVICE_ENV: ClassVar["ApplicationSecurityServiceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityServiceType.SERVICE_ENV = ApplicationSecurityServiceType("service_env") diff --git a/datadog_api_client/v2/model/application_security_services_metadata.py b/datadog_api_client/v2/model/application_security_services_metadata.py new file mode 100644 index 0000000000..1e323e2d43 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_services_metadata.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityServicesMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "num_services_with_appsec": (int,), + } + attribute_map = { + "num_services_with_appsec": "num_services_with_appsec", + } + + def __init__(self_, num_services_with_appsec: int, **kwargs): + """ + Metadata returned alongside the list of services. + + :param num_services_with_appsec: The number of services with Application Security Management (Threats) enabled. + :type num_services_with_appsec: int + """ + super().__init__(kwargs) + + + self_.num_services_with_appsec = num_services_with_appsec diff --git a/datadog_api_client/v2/model/application_security_services_response.py b/datadog_api_client/v2/model/application_security_services_response.py new file mode 100644 index 0000000000..05dead4f2e --- /dev/null +++ b/datadog_api_client/v2/model/application_security_services_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_service_resource import ApplicationSecurityServiceResource + from datadog_api_client.v2.model.application_security_services_metadata import ApplicationSecurityServicesMetadata + +class ApplicationSecurityServicesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_service_resource import ApplicationSecurityServiceResource + from datadog_api_client.v2.model.application_security_services_metadata import ApplicationSecurityServicesMetadata + return { + "data": ([ApplicationSecurityServiceResource],), + "meta": (ApplicationSecurityServicesMetadata,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[ApplicationSecurityServiceResource], meta: ApplicationSecurityServicesMetadata, **kwargs): + """ + Response object containing the list of services matching the requested name. + + :param data: The list of services matching the requested name. + :type data: [ApplicationSecurityServiceResource] + + :param meta: Metadata returned alongside the list of services. + :type meta: ApplicationSecurityServicesMetadata + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_action.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_action.py new file mode 100644 index 0000000000..900ca14298 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_action.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_action_action import ApplicationSecurityWafCustomRuleActionAction + from datadog_api_client.v2.model.application_security_waf_custom_rule_action_parameters import ApplicationSecurityWafCustomRuleActionParameters + +class ApplicationSecurityWafCustomRuleAction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_action_action import ApplicationSecurityWafCustomRuleActionAction + from datadog_api_client.v2.model.application_security_waf_custom_rule_action_parameters import ApplicationSecurityWafCustomRuleActionParameters + return { + "action": (ApplicationSecurityWafCustomRuleActionAction,), + "parameters": (ApplicationSecurityWafCustomRuleActionParameters,), + } + attribute_map = { + "action": "action", + "parameters": "parameters", + } + + def __init__(self_, action: Union[ApplicationSecurityWafCustomRuleActionAction, UnsetType]=unset, parameters: Union[ApplicationSecurityWafCustomRuleActionParameters, UnsetType]=unset, **kwargs): + """ + The definition of ``ApplicationSecurityWafCustomRuleAction`` object. + + :param action: Override the default action to take when the WAF custom rule would block. + :type action: ApplicationSecurityWafCustomRuleActionAction, optional + + :param parameters: The definition of ``ApplicationSecurityWafCustomRuleActionParameters`` object. + :type parameters: ApplicationSecurityWafCustomRuleActionParameters, optional + """ + if action is not unset: + kwargs["action"] = action + if parameters is not unset: + kwargs["parameters"] = parameters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_action_action.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_action_action.py new file mode 100644 index 0000000000..074a440238 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_action_action.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityWafCustomRuleActionAction(ModelSimple): + """ + Override the default action to take when the WAF custom rule would block. + + :param value: If omitted defaults to "block_request". Must be one of ["redirect_request", "block_request"]. + :type value: str + """ + + allowed_values = { + "redirect_request", + "block_request", + } + REDIRECT_REQUEST: ClassVar["ApplicationSecurityWafCustomRuleActionAction"] + BLOCK_REQUEST: ClassVar["ApplicationSecurityWafCustomRuleActionAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityWafCustomRuleActionAction.REDIRECT_REQUEST = ApplicationSecurityWafCustomRuleActionAction("redirect_request") +ApplicationSecurityWafCustomRuleActionAction.BLOCK_REQUEST = ApplicationSecurityWafCustomRuleActionAction("block_request") diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_action_parameters.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_action_parameters.py new file mode 100644 index 0000000000..01f64e444e --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_action_parameters.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityWafCustomRuleActionParameters(ModelNormal): + @cached_property + def openapi_types(_): + return { + "location": (str,), + "status_code": (int,), + } + attribute_map = { + "location": "location", + "status_code": "status_code", + } + + def __init__(self_, location: Union[str, UnsetType]=unset, status_code: Union[int, UnsetType]=unset, **kwargs): + """ + The definition of ``ApplicationSecurityWafCustomRuleActionParameters`` object. + + :param location: The location to redirect to when the WAF custom rule triggers. + :type location: str, optional + + :param status_code: The status code to return when the WAF custom rule triggers. + :type status_code: int, optional + """ + if location is not unset: + kwargs["location"] = location + if status_code is not unset: + kwargs["status_code"] = status_code + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_attributes.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_attributes.py new file mode 100644 index 0000000000..a9dfbc0fc5 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_attributes.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_action import ApplicationSecurityWafCustomRuleAction + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition import ApplicationSecurityWafCustomRuleCondition + from datadog_api_client.v2.model.application_security_waf_custom_rule_metadata import ApplicationSecurityWafCustomRuleMetadata + from datadog_api_client.v2.model.application_security_waf_custom_rule_scope import ApplicationSecurityWafCustomRuleScope + from datadog_api_client.v2.model.application_security_waf_custom_rule_tags import ApplicationSecurityWafCustomRuleTags + +class ApplicationSecurityWafCustomRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_action import ApplicationSecurityWafCustomRuleAction + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition import ApplicationSecurityWafCustomRuleCondition + from datadog_api_client.v2.model.application_security_waf_custom_rule_metadata import ApplicationSecurityWafCustomRuleMetadata + from datadog_api_client.v2.model.application_security_waf_custom_rule_scope import ApplicationSecurityWafCustomRuleScope + from datadog_api_client.v2.model.application_security_waf_custom_rule_tags import ApplicationSecurityWafCustomRuleTags + return { + "action": (ApplicationSecurityWafCustomRuleAction,), + "blocking": (bool,), + "conditions": ([ApplicationSecurityWafCustomRuleCondition],), + "enabled": (bool,), + "metadata": (ApplicationSecurityWafCustomRuleMetadata,), + "name": (str,), + "path_glob": (str,), + "scope": ([ApplicationSecurityWafCustomRuleScope],), + "tags": (ApplicationSecurityWafCustomRuleTags,), + } + attribute_map = { + "action": "action", + "blocking": "blocking", + "conditions": "conditions", + "enabled": "enabled", + "metadata": "metadata", + "name": "name", + "path_glob": "path_glob", + "scope": "scope", + "tags": "tags", + } + read_only_vars = { + "metadata", + } + + def __init__(self_, blocking: bool, conditions: List[ApplicationSecurityWafCustomRuleCondition], enabled: bool, name: str, tags: ApplicationSecurityWafCustomRuleTags, action: Union[ApplicationSecurityWafCustomRuleAction, UnsetType]=unset, metadata: Union[ApplicationSecurityWafCustomRuleMetadata, UnsetType]=unset, path_glob: Union[str, UnsetType]=unset, scope: Union[List[ApplicationSecurityWafCustomRuleScope], UnsetType]=unset, **kwargs): + """ + A WAF custom rule. + + :param action: The definition of ``ApplicationSecurityWafCustomRuleAction`` object. + :type action: ApplicationSecurityWafCustomRuleAction, optional + + :param blocking: Indicates whether the WAF custom rule will block the request. + :type blocking: bool + + :param conditions: Conditions for which the WAF Custom Rule will triggers, all conditions needs to match in order for the WAF + rule to trigger. + :type conditions: [ApplicationSecurityWafCustomRuleCondition] + + :param enabled: Indicates whether the WAF custom rule is enabled. + :type enabled: bool + + :param metadata: Metadata associated with the WAF Custom Rule. + :type metadata: ApplicationSecurityWafCustomRuleMetadata, optional + + :param name: The name of the WAF custom rule. + :type name: str + + :param path_glob: The path glob for the WAF custom rule. + :type path_glob: str, optional + + :param scope: The scope of the WAF custom rule. + :type scope: [ApplicationSecurityWafCustomRuleScope], optional + + :param tags: Tags associated with the WAF Custom Rule. The concatenation of category and type will form the security + activity field associated with the traces. + :type tags: ApplicationSecurityWafCustomRuleTags + """ + if action is not unset: + kwargs["action"] = action + if metadata is not unset: + kwargs["metadata"] = metadata + if path_glob is not unset: + kwargs["path_glob"] = path_glob + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.blocking = blocking + self_.conditions = conditions + self_.enabled = enabled + self_.name = name + self_.tags = tags diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_condition.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition.py new file mode 100644 index 0000000000..9869025c54 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_operator import ApplicationSecurityWafCustomRuleConditionOperator + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_parameters import ApplicationSecurityWafCustomRuleConditionParameters + +class ApplicationSecurityWafCustomRuleCondition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_operator import ApplicationSecurityWafCustomRuleConditionOperator + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_parameters import ApplicationSecurityWafCustomRuleConditionParameters + return { + "operator": (ApplicationSecurityWafCustomRuleConditionOperator,), + "parameters": (ApplicationSecurityWafCustomRuleConditionParameters,), + } + attribute_map = { + "operator": "operator", + "parameters": "parameters", + } + + def __init__(self_, operator: ApplicationSecurityWafCustomRuleConditionOperator, parameters: ApplicationSecurityWafCustomRuleConditionParameters, **kwargs): + """ + One condition of the WAF Custom Rule. + + :param operator: Operator to use for the WAF Condition. + :type operator: ApplicationSecurityWafCustomRuleConditionOperator + + :param parameters: The scope of the WAF custom rule. + :type parameters: ApplicationSecurityWafCustomRuleConditionParameters + """ + super().__init__(kwargs) + + + self_.operator = operator + self_.parameters = parameters diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_input.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_input.py new file mode 100644 index 0000000000..e117f37df7 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_input.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_input_address import ApplicationSecurityWafCustomRuleConditionInputAddress + +class ApplicationSecurityWafCustomRuleConditionInput(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_input_address import ApplicationSecurityWafCustomRuleConditionInputAddress + return { + "address": (ApplicationSecurityWafCustomRuleConditionInputAddress,), + "key_path": ([str],), + } + attribute_map = { + "address": "address", + "key_path": "key_path", + } + + def __init__(self_, address: ApplicationSecurityWafCustomRuleConditionInputAddress, key_path: Union[List[str], UnsetType]=unset, **kwargs): + """ + Input from the request on which the condition should apply. + + :param address: Input from the request on which the condition should apply. + :type address: ApplicationSecurityWafCustomRuleConditionInputAddress + + :param key_path: Specific path for the input. + :type key_path: [str], optional + """ + if key_path is not unset: + kwargs["key_path"] = key_path + super().__init__(kwargs) + + + self_.address = address diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_input_address.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_input_address.py new file mode 100644 index 0000000000..1cb3222bb4 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_input_address.py @@ -0,0 +1,141 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityWafCustomRuleConditionInputAddress(ModelSimple): + """ + Input from the request on which the condition should apply. + + :param value: Must be one of ["server.db.statement", "server.io.fs.file", "server.io.fs.file_write", "server.io.net.url", "server.sys.shell.cmd", "server.request.method", "server.request.uri.raw", "server.request.path_params", "server.request.query", "server.request.headers", "server.request.headers.no_cookies", "server.request.custom-auth", "server.request.cookies", "server.request.trailers", "server.request.body", "server.request.body.filenames", "server.request.body.files_content", "server.response.status", "server.response.headers.no_cookies", "server.response.trailers", "server.response.body", "grpc.server.request.metadata", "grpc.server.request.message", "grpc.server.method", "graphql.server.all_resolvers", "usr.id", "http.client_ip", "server.llm.event", "server.llm.guard.verdict", "_dd.appsec.fp.http.header", "_dd.appsec.fp.http.network", "_dd.appsec.fp.session", "_dd.appsec.fp.http.endpoint"]. + :type value: str + """ + + allowed_values = { + "server.db.statement", + "server.io.fs.file", + "server.io.fs.file_write", + "server.io.net.url", + "server.sys.shell.cmd", + "server.request.method", + "server.request.uri.raw", + "server.request.path_params", + "server.request.query", + "server.request.headers", + "server.request.headers.no_cookies", + "server.request.custom-auth", + "server.request.cookies", + "server.request.trailers", + "server.request.body", + "server.request.body.filenames", + "server.request.body.files_content", + "server.response.status", + "server.response.headers.no_cookies", + "server.response.trailers", + "server.response.body", + "grpc.server.request.metadata", + "grpc.server.request.message", + "grpc.server.method", + "graphql.server.all_resolvers", + "usr.id", + "http.client_ip", + "server.llm.event", + "server.llm.guard.verdict", + "_dd.appsec.fp.http.header", + "_dd.appsec.fp.http.network", + "_dd.appsec.fp.session", + "_dd.appsec.fp.http.endpoint", + } + SERVER_DB_STATEMENT: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_IO_FS_FILE: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_IO_FS_FILE_WRITE: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_IO_NET_URL: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_SYS_SHELL_CMD: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_METHOD: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_URI_RAW: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_PATH_PARAMS: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_QUERY: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_HEADERS: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_HEADERS_NO_COOKIES: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_CUSTOM_AUTH: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_COOKIES: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_TRAILERS: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_BODY: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_BODY_FILENAMES: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_REQUEST_BODY_FILES_CONTENT: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_RESPONSE_STATUS: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_RESPONSE_HEADERS_NO_COOKIES: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_RESPONSE_TRAILERS: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_RESPONSE_BODY: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + GRPC_SERVER_REQUEST_METADATA: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + GRPC_SERVER_REQUEST_MESSAGE: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + GRPC_SERVER_METHOD: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + GRAPHQL_SERVER_ALL_RESOLVERS: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + USR_ID: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + HTTP_CLIENT_IP: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_LLM_EVENT: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + SERVER_LLM_GUARD_VERDICT: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + DD_APPSEC_FP_HTTP_HEADER: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + DD_APPSEC_FP_HTTP_NETWORK: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + DD_APPSEC_FP_SESSION: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + DD_APPSEC_FP_HTTP_ENDPOINT: ClassVar["ApplicationSecurityWafCustomRuleConditionInputAddress"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_DB_STATEMENT = ApplicationSecurityWafCustomRuleConditionInputAddress("server.db.statement") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_IO_FS_FILE = ApplicationSecurityWafCustomRuleConditionInputAddress("server.io.fs.file") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_IO_FS_FILE_WRITE = ApplicationSecurityWafCustomRuleConditionInputAddress("server.io.fs.file_write") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_IO_NET_URL = ApplicationSecurityWafCustomRuleConditionInputAddress("server.io.net.url") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_SYS_SHELL_CMD = ApplicationSecurityWafCustomRuleConditionInputAddress("server.sys.shell.cmd") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_METHOD = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.method") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_URI_RAW = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.uri.raw") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_PATH_PARAMS = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.path_params") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_QUERY = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.query") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_HEADERS = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.headers") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_HEADERS_NO_COOKIES = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.headers.no_cookies") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_CUSTOM_AUTH = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.custom-auth") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_COOKIES = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.cookies") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_TRAILERS = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.trailers") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_BODY = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.body") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_BODY_FILENAMES = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.body.filenames") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_REQUEST_BODY_FILES_CONTENT = ApplicationSecurityWafCustomRuleConditionInputAddress("server.request.body.files_content") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_RESPONSE_STATUS = ApplicationSecurityWafCustomRuleConditionInputAddress("server.response.status") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_RESPONSE_HEADERS_NO_COOKIES = ApplicationSecurityWafCustomRuleConditionInputAddress("server.response.headers.no_cookies") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_RESPONSE_TRAILERS = ApplicationSecurityWafCustomRuleConditionInputAddress("server.response.trailers") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_RESPONSE_BODY = ApplicationSecurityWafCustomRuleConditionInputAddress("server.response.body") +ApplicationSecurityWafCustomRuleConditionInputAddress.GRPC_SERVER_REQUEST_METADATA = ApplicationSecurityWafCustomRuleConditionInputAddress("grpc.server.request.metadata") +ApplicationSecurityWafCustomRuleConditionInputAddress.GRPC_SERVER_REQUEST_MESSAGE = ApplicationSecurityWafCustomRuleConditionInputAddress("grpc.server.request.message") +ApplicationSecurityWafCustomRuleConditionInputAddress.GRPC_SERVER_METHOD = ApplicationSecurityWafCustomRuleConditionInputAddress("grpc.server.method") +ApplicationSecurityWafCustomRuleConditionInputAddress.GRAPHQL_SERVER_ALL_RESOLVERS = ApplicationSecurityWafCustomRuleConditionInputAddress("graphql.server.all_resolvers") +ApplicationSecurityWafCustomRuleConditionInputAddress.USR_ID = ApplicationSecurityWafCustomRuleConditionInputAddress("usr.id") +ApplicationSecurityWafCustomRuleConditionInputAddress.HTTP_CLIENT_IP = ApplicationSecurityWafCustomRuleConditionInputAddress("http.client_ip") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_LLM_EVENT = ApplicationSecurityWafCustomRuleConditionInputAddress("server.llm.event") +ApplicationSecurityWafCustomRuleConditionInputAddress.SERVER_LLM_GUARD_VERDICT = ApplicationSecurityWafCustomRuleConditionInputAddress("server.llm.guard.verdict") +ApplicationSecurityWafCustomRuleConditionInputAddress.DD_APPSEC_FP_HTTP_HEADER = ApplicationSecurityWafCustomRuleConditionInputAddress("_dd.appsec.fp.http.header") +ApplicationSecurityWafCustomRuleConditionInputAddress.DD_APPSEC_FP_HTTP_NETWORK = ApplicationSecurityWafCustomRuleConditionInputAddress("_dd.appsec.fp.http.network") +ApplicationSecurityWafCustomRuleConditionInputAddress.DD_APPSEC_FP_SESSION = ApplicationSecurityWafCustomRuleConditionInputAddress("_dd.appsec.fp.session") +ApplicationSecurityWafCustomRuleConditionInputAddress.DD_APPSEC_FP_HTTP_ENDPOINT = ApplicationSecurityWafCustomRuleConditionInputAddress("_dd.appsec.fp.http.endpoint") diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_operator.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_operator.py new file mode 100644 index 0000000000..61492a1d2b --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_operator.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityWafCustomRuleConditionOperator(ModelSimple): + """ + Operator to use for the WAF Condition. + + :param value: Must be one of ["match_regex", "!match_regex", "phrase_match", "!phrase_match", "is_xss", "is_sqli", "exact_match", "!exact_match", "ip_match", "!ip_match", "capture_data", "exists", "!exists", "equals", "!equals"]. + :type value: str + """ + + allowed_values = { + "match_regex", + "!match_regex", + "phrase_match", + "!phrase_match", + "is_xss", + "is_sqli", + "exact_match", + "!exact_match", + "ip_match", + "!ip_match", + "capture_data", + "exists", + "!exists", + "equals", + "!equals", + } + MATCH_REGEX: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + NOT_MATCH_REGEX: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + PHRASE_MATCH: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + NOT_PHRASE_MATCH: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + IS_XSS: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + IS_SQLI: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + EXACT_MATCH: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + NOT_EXACT_MATCH: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + IP_MATCH: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + NOT_IP_MATCH: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + CAPTURE_DATA: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + EXISTS: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + NOT_EXISTS: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + EQUALS: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + NOT_EQUALS: ClassVar["ApplicationSecurityWafCustomRuleConditionOperator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityWafCustomRuleConditionOperator.MATCH_REGEX = ApplicationSecurityWafCustomRuleConditionOperator("match_regex") +ApplicationSecurityWafCustomRuleConditionOperator.NOT_MATCH_REGEX = ApplicationSecurityWafCustomRuleConditionOperator("!match_regex") +ApplicationSecurityWafCustomRuleConditionOperator.PHRASE_MATCH = ApplicationSecurityWafCustomRuleConditionOperator("phrase_match") +ApplicationSecurityWafCustomRuleConditionOperator.NOT_PHRASE_MATCH = ApplicationSecurityWafCustomRuleConditionOperator("!phrase_match") +ApplicationSecurityWafCustomRuleConditionOperator.IS_XSS = ApplicationSecurityWafCustomRuleConditionOperator("is_xss") +ApplicationSecurityWafCustomRuleConditionOperator.IS_SQLI = ApplicationSecurityWafCustomRuleConditionOperator("is_sqli") +ApplicationSecurityWafCustomRuleConditionOperator.EXACT_MATCH = ApplicationSecurityWafCustomRuleConditionOperator("exact_match") +ApplicationSecurityWafCustomRuleConditionOperator.NOT_EXACT_MATCH = ApplicationSecurityWafCustomRuleConditionOperator("!exact_match") +ApplicationSecurityWafCustomRuleConditionOperator.IP_MATCH = ApplicationSecurityWafCustomRuleConditionOperator("ip_match") +ApplicationSecurityWafCustomRuleConditionOperator.NOT_IP_MATCH = ApplicationSecurityWafCustomRuleConditionOperator("!ip_match") +ApplicationSecurityWafCustomRuleConditionOperator.CAPTURE_DATA = ApplicationSecurityWafCustomRuleConditionOperator("capture_data") +ApplicationSecurityWafCustomRuleConditionOperator.EXISTS = ApplicationSecurityWafCustomRuleConditionOperator("exists") +ApplicationSecurityWafCustomRuleConditionOperator.NOT_EXISTS = ApplicationSecurityWafCustomRuleConditionOperator("!exists") +ApplicationSecurityWafCustomRuleConditionOperator.EQUALS = ApplicationSecurityWafCustomRuleConditionOperator("equals") +ApplicationSecurityWafCustomRuleConditionOperator.NOT_EQUALS = ApplicationSecurityWafCustomRuleConditionOperator("!equals") diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_options.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_options.py new file mode 100644 index 0000000000..07164bbefe --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_options.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityWafCustomRuleConditionOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "case_sensitive": (bool,), + "min_length": (int,), + } + attribute_map = { + "case_sensitive": "case_sensitive", + "min_length": "min_length", + } + + def __init__(self_, case_sensitive: Union[bool, UnsetType]=unset, min_length: Union[int, UnsetType]=unset, **kwargs): + """ + Options for the operator of this condition. + + :param case_sensitive: Evaluate the value as case sensitive. + :type case_sensitive: bool, optional + + :param min_length: Only evaluate this condition if the value has a minimum amount of characters. + :type min_length: int, optional + """ + if case_sensitive is not unset: + kwargs["case_sensitive"] = case_sensitive + if min_length is not unset: + kwargs["min_length"] = min_length + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_parameters.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_parameters.py new file mode 100644 index 0000000000..b21f58d093 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_parameters.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_input import ApplicationSecurityWafCustomRuleConditionInput + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_options import ApplicationSecurityWafCustomRuleConditionOptions + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_parameters_type import ApplicationSecurityWafCustomRuleConditionParametersType + +class ApplicationSecurityWafCustomRuleConditionParameters(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_input import ApplicationSecurityWafCustomRuleConditionInput + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_options import ApplicationSecurityWafCustomRuleConditionOptions + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_parameters_type import ApplicationSecurityWafCustomRuleConditionParametersType + return { + "data": (str,), + "inputs": ([ApplicationSecurityWafCustomRuleConditionInput],), + "list": ([str],), + "options": (ApplicationSecurityWafCustomRuleConditionOptions,), + "regex": (str,), + "type": (ApplicationSecurityWafCustomRuleConditionParametersType,), + "value": (str,), + } + attribute_map = { + "data": "data", + "inputs": "inputs", + "list": "list", + "options": "options", + "regex": "regex", + "type": "type", + "value": "value", + } + + def __init__(self_, inputs: List[ApplicationSecurityWafCustomRuleConditionInput], data: Union[str, UnsetType]=unset, list: Union[List[str], UnsetType]=unset, options: Union[ApplicationSecurityWafCustomRuleConditionOptions, UnsetType]=unset, regex: Union[str, UnsetType]=unset, type: Union[ApplicationSecurityWafCustomRuleConditionParametersType, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + The scope of the WAF custom rule. + + :param data: Identifier of a list of data from the denylist. Can only be used as substitution from the list parameter. + :type data: str, optional + + :param inputs: List of inputs on which at least one should match with the given operator. + :type inputs: [ApplicationSecurityWafCustomRuleConditionInput] + + :param list: List of value to use with the condition. Only used with the phrase_match, !phrase_match, exact_match and + !exact_match operator. + :type list: [str], optional + + :param options: Options for the operator of this condition. + :type options: ApplicationSecurityWafCustomRuleConditionOptions, optional + + :param regex: Regex to use with the condition. Only used with match_regex and !match_regex operator. + :type regex: str, optional + + :param type: The type of the value to compare against. Only used with the equals and !equals operator. + :type type: ApplicationSecurityWafCustomRuleConditionParametersType, optional + + :param value: Store the captured value in the specified tag name. Only used with the capture_data operator. + :type value: str, optional + """ + if data is not unset: + kwargs["data"] = data + if list is not unset: + kwargs["list"] = list + if options is not unset: + kwargs["options"] = options + if regex is not unset: + kwargs["regex"] = regex + if type is not unset: + kwargs["type"] = type + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.inputs = inputs diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_parameters_type.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_parameters_type.py new file mode 100644 index 0000000000..6b796069e1 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_condition_parameters_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityWafCustomRuleConditionParametersType(ModelSimple): + """ + The type of the value to compare against. Only used with the equals and !equals operator. + + :param value: Must be one of ["boolean", "signed", "unsigned", "float", "string"]. + :type value: str + """ + + allowed_values = { + "boolean", + "signed", + "unsigned", + "float", + "string", + } + BOOLEAN: ClassVar["ApplicationSecurityWafCustomRuleConditionParametersType"] + SIGNED: ClassVar["ApplicationSecurityWafCustomRuleConditionParametersType"] + UNSIGNED: ClassVar["ApplicationSecurityWafCustomRuleConditionParametersType"] + FLOAT: ClassVar["ApplicationSecurityWafCustomRuleConditionParametersType"] + STRING: ClassVar["ApplicationSecurityWafCustomRuleConditionParametersType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityWafCustomRuleConditionParametersType.BOOLEAN = ApplicationSecurityWafCustomRuleConditionParametersType("boolean") +ApplicationSecurityWafCustomRuleConditionParametersType.SIGNED = ApplicationSecurityWafCustomRuleConditionParametersType("signed") +ApplicationSecurityWafCustomRuleConditionParametersType.UNSIGNED = ApplicationSecurityWafCustomRuleConditionParametersType("unsigned") +ApplicationSecurityWafCustomRuleConditionParametersType.FLOAT = ApplicationSecurityWafCustomRuleConditionParametersType("float") +ApplicationSecurityWafCustomRuleConditionParametersType.STRING = ApplicationSecurityWafCustomRuleConditionParametersType("string") diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_create_attributes.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_create_attributes.py new file mode 100644 index 0000000000..fd623b1de6 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_create_attributes.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_action import ApplicationSecurityWafCustomRuleAction + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition import ApplicationSecurityWafCustomRuleCondition + from datadog_api_client.v2.model.application_security_waf_custom_rule_scope import ApplicationSecurityWafCustomRuleScope + from datadog_api_client.v2.model.application_security_waf_custom_rule_tags import ApplicationSecurityWafCustomRuleTags + +class ApplicationSecurityWafCustomRuleCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_action import ApplicationSecurityWafCustomRuleAction + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition import ApplicationSecurityWafCustomRuleCondition + from datadog_api_client.v2.model.application_security_waf_custom_rule_scope import ApplicationSecurityWafCustomRuleScope + from datadog_api_client.v2.model.application_security_waf_custom_rule_tags import ApplicationSecurityWafCustomRuleTags + return { + "action": (ApplicationSecurityWafCustomRuleAction,), + "blocking": (bool,), + "conditions": ([ApplicationSecurityWafCustomRuleCondition],), + "enabled": (bool,), + "name": (str,), + "path_glob": (str,), + "scope": ([ApplicationSecurityWafCustomRuleScope],), + "tags": (ApplicationSecurityWafCustomRuleTags,), + } + attribute_map = { + "action": "action", + "blocking": "blocking", + "conditions": "conditions", + "enabled": "enabled", + "name": "name", + "path_glob": "path_glob", + "scope": "scope", + "tags": "tags", + } + + def __init__(self_, blocking: bool, conditions: List[ApplicationSecurityWafCustomRuleCondition], enabled: bool, name: str, tags: ApplicationSecurityWafCustomRuleTags, action: Union[ApplicationSecurityWafCustomRuleAction, UnsetType]=unset, path_glob: Union[str, UnsetType]=unset, scope: Union[List[ApplicationSecurityWafCustomRuleScope], UnsetType]=unset, **kwargs): + """ + Create a new WAF custom rule. + + :param action: The definition of ``ApplicationSecurityWafCustomRuleAction`` object. + :type action: ApplicationSecurityWafCustomRuleAction, optional + + :param blocking: Indicates whether the WAF custom rule will block the request. + :type blocking: bool + + :param conditions: Conditions for which the WAF Custom Rule will triggers, all conditions needs to match in order for the WAF + rule to trigger + :type conditions: [ApplicationSecurityWafCustomRuleCondition] + + :param enabled: Indicates whether the WAF custom rule is enabled. + :type enabled: bool + + :param name: The name of the WAF custom rule. + :type name: str + + :param path_glob: The path glob for the WAF custom rule. + :type path_glob: str, optional + + :param scope: The scope of the WAF custom rule. + :type scope: [ApplicationSecurityWafCustomRuleScope], optional + + :param tags: Tags associated with the WAF Custom Rule. The concatenation of category and type will form the security + activity field associated with the traces. + :type tags: ApplicationSecurityWafCustomRuleTags + """ + if action is not unset: + kwargs["action"] = action + if path_glob is not unset: + kwargs["path_glob"] = path_glob + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.blocking = blocking + self_.conditions = conditions + self_.enabled = enabled + self_.name = name + self_.tags = tags diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_create_data.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_create_data.py new file mode 100644 index 0000000000..57d6d0e3d3 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_create_attributes import ApplicationSecurityWafCustomRuleCreateAttributes + from datadog_api_client.v2.model.application_security_waf_custom_rule_type import ApplicationSecurityWafCustomRuleType + +class ApplicationSecurityWafCustomRuleCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_create_attributes import ApplicationSecurityWafCustomRuleCreateAttributes + from datadog_api_client.v2.model.application_security_waf_custom_rule_type import ApplicationSecurityWafCustomRuleType + return { + "attributes": (ApplicationSecurityWafCustomRuleCreateAttributes,), + "type": (ApplicationSecurityWafCustomRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ApplicationSecurityWafCustomRuleCreateAttributes, type: ApplicationSecurityWafCustomRuleType, **kwargs): + """ + Object for a single WAF custom rule. + + :param attributes: Create a new WAF custom rule. + :type attributes: ApplicationSecurityWafCustomRuleCreateAttributes + + :param type: The type of the resource. The value should always be ``custom_rule``. + :type type: ApplicationSecurityWafCustomRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_create_request.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_create_request.py new file mode 100644 index 0000000000..100192e9f4 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_create_data import ApplicationSecurityWafCustomRuleCreateData + +class ApplicationSecurityWafCustomRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_create_data import ApplicationSecurityWafCustomRuleCreateData + return { + "data": (ApplicationSecurityWafCustomRuleCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ApplicationSecurityWafCustomRuleCreateData, **kwargs): + """ + Request object that includes the custom rule to create. + + :param data: Object for a single WAF custom rule. + :type data: ApplicationSecurityWafCustomRuleCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_data.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_data.py new file mode 100644 index 0000000000..9d5b3ce49e --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_attributes import ApplicationSecurityWafCustomRuleAttributes + from datadog_api_client.v2.model.application_security_waf_custom_rule_type import ApplicationSecurityWafCustomRuleType + +class ApplicationSecurityWafCustomRuleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_attributes import ApplicationSecurityWafCustomRuleAttributes + from datadog_api_client.v2.model.application_security_waf_custom_rule_type import ApplicationSecurityWafCustomRuleType + return { + "attributes": (ApplicationSecurityWafCustomRuleAttributes,), + "id": (str,), + "type": (ApplicationSecurityWafCustomRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: Union[ApplicationSecurityWafCustomRuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ApplicationSecurityWafCustomRuleType, UnsetType]=unset, **kwargs): + """ + Object for a single WAF custom rule. + + :param attributes: A WAF custom rule. + :type attributes: ApplicationSecurityWafCustomRuleAttributes, optional + + :param id: The ID of the custom rule. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``custom_rule``. + :type type: ApplicationSecurityWafCustomRuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_list_response.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_list_response.py new file mode 100644 index 0000000000..e3c77fd0a7 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_data import ApplicationSecurityWafCustomRuleData + +class ApplicationSecurityWafCustomRuleListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_data import ApplicationSecurityWafCustomRuleData + return { + "data": ([ApplicationSecurityWafCustomRuleData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ApplicationSecurityWafCustomRuleData], UnsetType]=unset, **kwargs): + """ + Response object that includes a list of WAF custom rules. + + :param data: The WAF custom rule data. + :type data: [ApplicationSecurityWafCustomRuleData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_metadata.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_metadata.py new file mode 100644 index 0000000000..820403413f --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityWafCustomRuleMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "added_at": (datetime,), + "added_by": (str,), + "added_by_name": (str,), + "modified_at": (datetime,), + "modified_by": (str,), + "modified_by_name": (str,), + } + attribute_map = { + "added_at": "added_at", + "added_by": "added_by", + "added_by_name": "added_by_name", + "modified_at": "modified_at", + "modified_by": "modified_by", + "modified_by_name": "modified_by_name", + } + + def __init__(self_, added_at: Union[datetime, UnsetType]=unset, added_by: Union[str, UnsetType]=unset, added_by_name: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, modified_by: Union[str, UnsetType]=unset, modified_by_name: Union[str, UnsetType]=unset, **kwargs): + """ + Metadata associated with the WAF Custom Rule. + + :param added_at: The date and time the WAF custom rule was created. + :type added_at: datetime, optional + + :param added_by: The handle of the user who created the WAF custom rule. + :type added_by: str, optional + + :param added_by_name: The name of the user who created the WAF custom rule. + :type added_by_name: str, optional + + :param modified_at: The date and time the WAF custom rule was last updated. + :type modified_at: datetime, optional + + :param modified_by: The handle of the user who last updated the WAF custom rule. + :type modified_by: str, optional + + :param modified_by_name: The name of the user who last updated the WAF custom rule. + :type modified_by_name: str, optional + """ + if added_at is not unset: + kwargs["added_at"] = added_at + if added_by is not unset: + kwargs["added_by"] = added_by + if added_by_name is not unset: + kwargs["added_by_name"] = added_by_name + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if modified_by is not unset: + kwargs["modified_by"] = modified_by + if modified_by_name is not unset: + kwargs["modified_by_name"] = modified_by_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_response.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_response.py new file mode 100644 index 0000000000..8c6706ac28 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_data import ApplicationSecurityWafCustomRuleData + +class ApplicationSecurityWafCustomRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_data import ApplicationSecurityWafCustomRuleData + return { + "data": (ApplicationSecurityWafCustomRuleData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ApplicationSecurityWafCustomRuleData, UnsetType]=unset, **kwargs): + """ + Response object that includes a single WAF custom rule. + + :param data: Object for a single WAF custom rule. + :type data: ApplicationSecurityWafCustomRuleData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_scope.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_scope.py new file mode 100644 index 0000000000..bc0eeafcac --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_scope.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityWafCustomRuleScope(ModelNormal): + @cached_property + def openapi_types(_): + return { + "env": (str,), + "service": (str,), + } + attribute_map = { + "env": "env", + "service": "service", + } + + def __init__(self_, env: str, service: str, **kwargs): + """ + The scope of the WAF custom rule. + + :param env: The environment scope for the WAF custom rule. + :type env: str + + :param service: The service scope for the WAF custom rule. + :type service: str + """ + super().__init__(kwargs) + + + self_.env = env + self_.service = service diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_tags.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_tags.py new file mode 100644 index 0000000000..50ac039016 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_tags.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_tags_category import ApplicationSecurityWafCustomRuleTagsCategory + +class ApplicationSecurityWafCustomRuleTags(ModelNormal): + @cached_property + def additional_properties_type(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_tags_category import ApplicationSecurityWafCustomRuleTagsCategory + return (str,) + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_tags_category import ApplicationSecurityWafCustomRuleTagsCategory + return { + "category": (ApplicationSecurityWafCustomRuleTagsCategory,), + "type": (str,), + } + attribute_map = { + "category": "category", + "type": "type", + } + + def __init__(self_, category: ApplicationSecurityWafCustomRuleTagsCategory, type: str, **kwargs): + """ + Tags associated with the WAF Custom Rule. The concatenation of category and type will form the security + activity field associated with the traces. + + :param category: The category of the WAF Rule, can be either ``business_logic`` , ``attack_attempt`` or ``security_response``. + :type category: ApplicationSecurityWafCustomRuleTagsCategory + + :param type: The type of the WAF rule, associated with the category will form the security activity. + :type type: str + """ + super().__init__(kwargs) + + + self_.category = category + self_.type = type diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_tags_category.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_tags_category.py new file mode 100644 index 0000000000..e9bee0e257 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_tags_category.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityWafCustomRuleTagsCategory(ModelSimple): + """ + The category of the WAF Rule, can be either `business_logic`, `attack_attempt` or `security_response`. + + :param value: Must be one of ["attack_attempt", "business_logic", "security_response"]. + :type value: str + """ + + allowed_values = { + "attack_attempt", + "business_logic", + "security_response", + } + ATTACK_ATTEMPT: ClassVar["ApplicationSecurityWafCustomRuleTagsCategory"] + BUSINESS_LOGIC: ClassVar["ApplicationSecurityWafCustomRuleTagsCategory"] + SECURITY_RESPONSE: ClassVar["ApplicationSecurityWafCustomRuleTagsCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityWafCustomRuleTagsCategory.ATTACK_ATTEMPT = ApplicationSecurityWafCustomRuleTagsCategory("attack_attempt") +ApplicationSecurityWafCustomRuleTagsCategory.BUSINESS_LOGIC = ApplicationSecurityWafCustomRuleTagsCategory("business_logic") +ApplicationSecurityWafCustomRuleTagsCategory.SECURITY_RESPONSE = ApplicationSecurityWafCustomRuleTagsCategory("security_response") diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_type.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_type.py new file mode 100644 index 0000000000..df7dfe83b1 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityWafCustomRuleType(ModelSimple): + """ + The type of the resource. The value should always be `custom_rule`. + + :param value: If omitted defaults to "custom_rule". Must be one of ["custom_rule"]. + :type value: str + """ + + allowed_values = { + "custom_rule", + } + CUSTOM_RULE: ClassVar["ApplicationSecurityWafCustomRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityWafCustomRuleType.CUSTOM_RULE = ApplicationSecurityWafCustomRuleType("custom_rule") diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_update_attributes.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_update_attributes.py new file mode 100644 index 0000000000..e37b4d9695 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_update_attributes.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_action import ApplicationSecurityWafCustomRuleAction + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition import ApplicationSecurityWafCustomRuleCondition + from datadog_api_client.v2.model.application_security_waf_custom_rule_scope import ApplicationSecurityWafCustomRuleScope + from datadog_api_client.v2.model.application_security_waf_custom_rule_tags import ApplicationSecurityWafCustomRuleTags + +class ApplicationSecurityWafCustomRuleUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_action import ApplicationSecurityWafCustomRuleAction + from datadog_api_client.v2.model.application_security_waf_custom_rule_condition import ApplicationSecurityWafCustomRuleCondition + from datadog_api_client.v2.model.application_security_waf_custom_rule_scope import ApplicationSecurityWafCustomRuleScope + from datadog_api_client.v2.model.application_security_waf_custom_rule_tags import ApplicationSecurityWafCustomRuleTags + return { + "action": (ApplicationSecurityWafCustomRuleAction,), + "blocking": (bool,), + "conditions": ([ApplicationSecurityWafCustomRuleCondition],), + "enabled": (bool,), + "name": (str,), + "path_glob": (str,), + "scope": ([ApplicationSecurityWafCustomRuleScope],), + "tags": (ApplicationSecurityWafCustomRuleTags,), + } + attribute_map = { + "action": "action", + "blocking": "blocking", + "conditions": "conditions", + "enabled": "enabled", + "name": "name", + "path_glob": "path_glob", + "scope": "scope", + "tags": "tags", + } + + def __init__(self_, blocking: bool, conditions: List[ApplicationSecurityWafCustomRuleCondition], enabled: bool, name: str, tags: ApplicationSecurityWafCustomRuleTags, action: Union[ApplicationSecurityWafCustomRuleAction, UnsetType]=unset, path_glob: Union[str, UnsetType]=unset, scope: Union[List[ApplicationSecurityWafCustomRuleScope], UnsetType]=unset, **kwargs): + """ + Update a WAF custom rule. + + :param action: The definition of ``ApplicationSecurityWafCustomRuleAction`` object. + :type action: ApplicationSecurityWafCustomRuleAction, optional + + :param blocking: Indicates whether the WAF custom rule will block the request. + :type blocking: bool + + :param conditions: Conditions for which the WAF Custom Rule will triggers, all conditions needs to match in order for the WAF + rule to trigger. + :type conditions: [ApplicationSecurityWafCustomRuleCondition] + + :param enabled: Indicates whether the WAF custom rule is enabled. + :type enabled: bool + + :param name: The name of the WAF custom rule. + :type name: str + + :param path_glob: The path glob for the WAF custom rule. + :type path_glob: str, optional + + :param scope: The scope of the WAF custom rule. + :type scope: [ApplicationSecurityWafCustomRuleScope], optional + + :param tags: Tags associated with the WAF Custom Rule. The concatenation of category and type will form the security + activity field associated with the traces. + :type tags: ApplicationSecurityWafCustomRuleTags + """ + if action is not unset: + kwargs["action"] = action + if path_glob is not unset: + kwargs["path_glob"] = path_glob + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.blocking = blocking + self_.conditions = conditions + self_.enabled = enabled + self_.name = name + self_.tags = tags diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_update_data.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_update_data.py new file mode 100644 index 0000000000..9bfa4191ac --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_update_attributes import ApplicationSecurityWafCustomRuleUpdateAttributes + from datadog_api_client.v2.model.application_security_waf_custom_rule_type import ApplicationSecurityWafCustomRuleType + +class ApplicationSecurityWafCustomRuleUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_update_attributes import ApplicationSecurityWafCustomRuleUpdateAttributes + from datadog_api_client.v2.model.application_security_waf_custom_rule_type import ApplicationSecurityWafCustomRuleType + return { + "attributes": (ApplicationSecurityWafCustomRuleUpdateAttributes,), + "type": (ApplicationSecurityWafCustomRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ApplicationSecurityWafCustomRuleUpdateAttributes, type: ApplicationSecurityWafCustomRuleType, **kwargs): + """ + Object for a single WAF Custom Rule. + + :param attributes: Update a WAF custom rule. + :type attributes: ApplicationSecurityWafCustomRuleUpdateAttributes + + :param type: The type of the resource. The value should always be ``custom_rule``. + :type type: ApplicationSecurityWafCustomRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/application_security_waf_custom_rule_update_request.py b/datadog_api_client/v2/model/application_security_waf_custom_rule_update_request.py new file mode 100644 index 0000000000..7e59608587 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_custom_rule_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_custom_rule_update_data import ApplicationSecurityWafCustomRuleUpdateData + +class ApplicationSecurityWafCustomRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_custom_rule_update_data import ApplicationSecurityWafCustomRuleUpdateData + return { + "data": (ApplicationSecurityWafCustomRuleUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ApplicationSecurityWafCustomRuleUpdateData, **kwargs): + """ + Request object that includes the Custom Rule to update. + + :param data: Object for a single WAF Custom Rule. + :type data: ApplicationSecurityWafCustomRuleUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_attributes.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_attributes.py new file mode 100644 index 0000000000..be690dc744 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_attributes.py @@ -0,0 +1,129 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_metadata import ApplicationSecurityWafExclusionFilterMetadata + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_on_match import ApplicationSecurityWafExclusionFilterOnMatch + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target import ApplicationSecurityWafExclusionFilterRulesTarget + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_scope import ApplicationSecurityWafExclusionFilterScope + +class ApplicationSecurityWafExclusionFilterAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_metadata import ApplicationSecurityWafExclusionFilterMetadata + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_on_match import ApplicationSecurityWafExclusionFilterOnMatch + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target import ApplicationSecurityWafExclusionFilterRulesTarget + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_scope import ApplicationSecurityWafExclusionFilterScope + return { + "description": (str,), + "enabled": (bool,), + "event_query": (str,), + "ip_list": ([str],), + "metadata": (ApplicationSecurityWafExclusionFilterMetadata,), + "on_match": (ApplicationSecurityWafExclusionFilterOnMatch,), + "parameters": ([str],), + "path_glob": (str,), + "rules_target": ([ApplicationSecurityWafExclusionFilterRulesTarget],), + "scope": ([ApplicationSecurityWafExclusionFilterScope],), + "search_query": (str,), + } + attribute_map = { + "description": "description", + "enabled": "enabled", + "event_query": "event_query", + "ip_list": "ip_list", + "metadata": "metadata", + "on_match": "on_match", + "parameters": "parameters", + "path_glob": "path_glob", + "rules_target": "rules_target", + "scope": "scope", + "search_query": "search_query", + } + read_only_vars = { + "metadata", + "search_query", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, event_query: Union[str, UnsetType]=unset, ip_list: Union[List[str], UnsetType]=unset, metadata: Union[ApplicationSecurityWafExclusionFilterMetadata, UnsetType]=unset, on_match: Union[ApplicationSecurityWafExclusionFilterOnMatch, UnsetType]=unset, parameters: Union[List[str], UnsetType]=unset, path_glob: Union[str, UnsetType]=unset, rules_target: Union[List[ApplicationSecurityWafExclusionFilterRulesTarget], UnsetType]=unset, scope: Union[List[ApplicationSecurityWafExclusionFilterScope], UnsetType]=unset, search_query: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes describing a WAF exclusion filter. + + :param description: A description for the exclusion filter. + :type description: str, optional + + :param enabled: Indicates whether the exclusion filter is enabled. + :type enabled: bool, optional + + :param event_query: The event query matched by the legacy exclusion filter. Cannot be created nor updated. + :type event_query: str, optional + + :param ip_list: The client IP addresses matched by the exclusion filter (CIDR notation is supported). + :type ip_list: [str], optional + + :param metadata: Extra information about the exclusion filter. + :type metadata: ApplicationSecurityWafExclusionFilterMetadata, optional + + :param on_match: The action taken when the exclusion filter matches. When set to ``monitor`` , security traces are emitted but the requests are not blocked. By default, security traces are not emitted and the requests are not blocked. + :type on_match: ApplicationSecurityWafExclusionFilterOnMatch, optional + + :param parameters: A list of parameters matched by the exclusion filter in the HTTP query string and HTTP request body. Nested parameters can be matched by joining fields with a dot character. + :type parameters: [str], optional + + :param path_glob: The HTTP path glob expression matched by the exclusion filter. + :type path_glob: str, optional + + :param rules_target: The WAF rules targeted by the exclusion filter. + :type rules_target: [ApplicationSecurityWafExclusionFilterRulesTarget], optional + + :param scope: The services where the exclusion filter is deployed. + :type scope: [ApplicationSecurityWafExclusionFilterScope], optional + + :param search_query: Generated event search query for traces matching the exclusion filter. + :type search_query: str, optional + """ + if description is not unset: + kwargs["description"] = description + if enabled is not unset: + kwargs["enabled"] = enabled + if event_query is not unset: + kwargs["event_query"] = event_query + if ip_list is not unset: + kwargs["ip_list"] = ip_list + if metadata is not unset: + kwargs["metadata"] = metadata + if on_match is not unset: + kwargs["on_match"] = on_match + if parameters is not unset: + kwargs["parameters"] = parameters + if path_glob is not unset: + kwargs["path_glob"] = path_glob + if rules_target is not unset: + kwargs["rules_target"] = rules_target + if scope is not unset: + kwargs["scope"] = scope + if search_query is not unset: + kwargs["search_query"] = search_query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_create_attributes.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_create_attributes.py new file mode 100644 index 0000000000..84039c1dfe --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_create_attributes.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_on_match import ApplicationSecurityWafExclusionFilterOnMatch + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target import ApplicationSecurityWafExclusionFilterRulesTarget + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_scope import ApplicationSecurityWafExclusionFilterScope + +class ApplicationSecurityWafExclusionFilterCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_on_match import ApplicationSecurityWafExclusionFilterOnMatch + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target import ApplicationSecurityWafExclusionFilterRulesTarget + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_scope import ApplicationSecurityWafExclusionFilterScope + return { + "description": (str,), + "enabled": (bool,), + "ip_list": ([str],), + "on_match": (ApplicationSecurityWafExclusionFilterOnMatch,), + "parameters": ([str],), + "path_glob": (str,), + "rules_target": ([ApplicationSecurityWafExclusionFilterRulesTarget],), + "scope": ([ApplicationSecurityWafExclusionFilterScope],), + } + attribute_map = { + "description": "description", + "enabled": "enabled", + "ip_list": "ip_list", + "on_match": "on_match", + "parameters": "parameters", + "path_glob": "path_glob", + "rules_target": "rules_target", + "scope": "scope", + } + + def __init__(self_, description: str, enabled: bool, ip_list: Union[List[str], UnsetType]=unset, on_match: Union[ApplicationSecurityWafExclusionFilterOnMatch, UnsetType]=unset, parameters: Union[List[str], UnsetType]=unset, path_glob: Union[str, UnsetType]=unset, rules_target: Union[List[ApplicationSecurityWafExclusionFilterRulesTarget], UnsetType]=unset, scope: Union[List[ApplicationSecurityWafExclusionFilterScope], UnsetType]=unset, **kwargs): + """ + Attributes for creating a WAF exclusion filter. + + :param description: A description for the exclusion filter. + :type description: str + + :param enabled: Indicates whether the exclusion filter is enabled. + :type enabled: bool + + :param ip_list: The client IP addresses matched by the exclusion filter (CIDR notation is supported). + :type ip_list: [str], optional + + :param on_match: The action taken when the exclusion filter matches. When set to ``monitor`` , security traces are emitted but the requests are not blocked. By default, security traces are not emitted and the requests are not blocked. + :type on_match: ApplicationSecurityWafExclusionFilterOnMatch, optional + + :param parameters: A list of parameters matched by the exclusion filter in the HTTP query string and HTTP request body. Nested parameters can be matched by joining fields with a dot character. + :type parameters: [str], optional + + :param path_glob: The HTTP path glob expression matched by the exclusion filter. + :type path_glob: str, optional + + :param rules_target: The WAF rules targeted by the exclusion filter. + :type rules_target: [ApplicationSecurityWafExclusionFilterRulesTarget], optional + + :param scope: The services where the exclusion filter is deployed. + :type scope: [ApplicationSecurityWafExclusionFilterScope], optional + """ + if ip_list is not unset: + kwargs["ip_list"] = ip_list + if on_match is not unset: + kwargs["on_match"] = on_match + if parameters is not unset: + kwargs["parameters"] = parameters + if path_glob is not unset: + kwargs["path_glob"] = path_glob + if rules_target is not unset: + kwargs["rules_target"] = rules_target + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.description = description + self_.enabled = enabled diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_create_data.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_create_data.py new file mode 100644 index 0000000000..027ef5e63b --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_create_attributes import ApplicationSecurityWafExclusionFilterCreateAttributes + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_type import ApplicationSecurityWafExclusionFilterType + +class ApplicationSecurityWafExclusionFilterCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_create_attributes import ApplicationSecurityWafExclusionFilterCreateAttributes + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_type import ApplicationSecurityWafExclusionFilterType + return { + "attributes": (ApplicationSecurityWafExclusionFilterCreateAttributes,), + "type": (ApplicationSecurityWafExclusionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ApplicationSecurityWafExclusionFilterCreateAttributes, type: ApplicationSecurityWafExclusionFilterType, **kwargs): + """ + Object for creating a single WAF exclusion filter. + + :param attributes: Attributes for creating a WAF exclusion filter. + :type attributes: ApplicationSecurityWafExclusionFilterCreateAttributes + + :param type: Type of the resource. The value should always be ``exclusion_filter``. + :type type: ApplicationSecurityWafExclusionFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_create_request.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_create_request.py new file mode 100644 index 0000000000..b7742bfd35 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_create_data import ApplicationSecurityWafExclusionFilterCreateData + +class ApplicationSecurityWafExclusionFilterCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_create_data import ApplicationSecurityWafExclusionFilterCreateData + return { + "data": (ApplicationSecurityWafExclusionFilterCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ApplicationSecurityWafExclusionFilterCreateData, **kwargs): + """ + Request object for creating a single WAF exclusion filter. + + :param data: Object for creating a single WAF exclusion filter. + :type data: ApplicationSecurityWafExclusionFilterCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_metadata.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_metadata.py new file mode 100644 index 0000000000..24139514a0 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityWafExclusionFilterMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "added_at": (datetime,), + "added_by": (str,), + "added_by_name": (str,), + "modified_at": (datetime,), + "modified_by": (str,), + "modified_by_name": (str,), + } + attribute_map = { + "added_at": "added_at", + "added_by": "added_by", + "added_by_name": "added_by_name", + "modified_at": "modified_at", + "modified_by": "modified_by", + "modified_by_name": "modified_by_name", + } + + def __init__(self_, added_at: Union[datetime, UnsetType]=unset, added_by: Union[str, UnsetType]=unset, added_by_name: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, modified_by: Union[str, UnsetType]=unset, modified_by_name: Union[str, UnsetType]=unset, **kwargs): + """ + Extra information about the exclusion filter. + + :param added_at: The creation date of the exclusion filter. + :type added_at: datetime, optional + + :param added_by: The handle of the user who created the exclusion filter. + :type added_by: str, optional + + :param added_by_name: The name of the user who created the exclusion filter. + :type added_by_name: str, optional + + :param modified_at: The last modification date of the exclusion filter. + :type modified_at: datetime, optional + + :param modified_by: The handle of the user who last modified the exclusion filter. + :type modified_by: str, optional + + :param modified_by_name: The name of the user who last modified the exclusion filter. + :type modified_by_name: str, optional + """ + if added_at is not unset: + kwargs["added_at"] = added_at + if added_by is not unset: + kwargs["added_by"] = added_by + if added_by_name is not unset: + kwargs["added_by_name"] = added_by_name + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if modified_by is not unset: + kwargs["modified_by"] = modified_by + if modified_by_name is not unset: + kwargs["modified_by_name"] = modified_by_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_on_match.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_on_match.py new file mode 100644 index 0000000000..bb39911001 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_on_match.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityWafExclusionFilterOnMatch(ModelSimple): + """ + The action taken when the exclusion filter matches. When set to `monitor`, security traces are emitted but the requests are not blocked. By default, security traces are not emitted and the requests are not blocked. + + :param value: If omitted defaults to "monitor". Must be one of ["monitor"]. + :type value: str + """ + + allowed_values = { + "monitor", + } + MONITOR: ClassVar["ApplicationSecurityWafExclusionFilterOnMatch"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityWafExclusionFilterOnMatch.MONITOR = ApplicationSecurityWafExclusionFilterOnMatch("monitor") diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_resource.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_resource.py new file mode 100644 index 0000000000..2030fa3a9f --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_resource.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_attributes import ApplicationSecurityWafExclusionFilterAttributes + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_type import ApplicationSecurityWafExclusionFilterType + +class ApplicationSecurityWafExclusionFilterResource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_attributes import ApplicationSecurityWafExclusionFilterAttributes + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_type import ApplicationSecurityWafExclusionFilterType + return { + "attributes": (ApplicationSecurityWafExclusionFilterAttributes,), + "id": (str,), + "type": (ApplicationSecurityWafExclusionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: Union[ApplicationSecurityWafExclusionFilterAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ApplicationSecurityWafExclusionFilterType, UnsetType]=unset, **kwargs): + """ + A JSON:API resource for an WAF exclusion filter. + + :param attributes: Attributes describing a WAF exclusion filter. + :type attributes: ApplicationSecurityWafExclusionFilterAttributes, optional + + :param id: The identifier of the WAF exclusion filter. + :type id: str, optional + + :param type: Type of the resource. The value should always be ``exclusion_filter``. + :type type: ApplicationSecurityWafExclusionFilterType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_response.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_response.py new file mode 100644 index 0000000000..d08f1d8147 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_resource import ApplicationSecurityWafExclusionFilterResource + +class ApplicationSecurityWafExclusionFilterResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_resource import ApplicationSecurityWafExclusionFilterResource + return { + "data": (ApplicationSecurityWafExclusionFilterResource,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ApplicationSecurityWafExclusionFilterResource, UnsetType]=unset, **kwargs): + """ + Response object for a single WAF exclusion filter. + + :param data: A JSON:API resource for an WAF exclusion filter. + :type data: ApplicationSecurityWafExclusionFilterResource, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_rules_target.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_rules_target.py new file mode 100644 index 0000000000..9775dad3eb --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_rules_target.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target_tags import ApplicationSecurityWafExclusionFilterRulesTargetTags + +class ApplicationSecurityWafExclusionFilterRulesTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target_tags import ApplicationSecurityWafExclusionFilterRulesTargetTags + return { + "rule_id": (str,), + "tags": (ApplicationSecurityWafExclusionFilterRulesTargetTags,), + } + attribute_map = { + "rule_id": "rule_id", + "tags": "tags", + } + + def __init__(self_, rule_id: Union[str, UnsetType]=unset, tags: Union[ApplicationSecurityWafExclusionFilterRulesTargetTags, UnsetType]=unset, **kwargs): + """ + Target WAF rules based either on an identifier or tags. + + :param rule_id: Target a single WAF rule based on its identifier. + :type rule_id: str, optional + + :param tags: Target multiple WAF rules based on their tags. + :type tags: ApplicationSecurityWafExclusionFilterRulesTargetTags, optional + """ + if rule_id is not unset: + kwargs["rule_id"] = rule_id + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_rules_target_tags.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_rules_target_tags.py new file mode 100644 index 0000000000..40af8ed539 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_rules_target_tags.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityWafExclusionFilterRulesTargetTags(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + @cached_property + def openapi_types(_): + return { + "category": (str,), + "type": (str,), + } + attribute_map = { + "category": "category", + "type": "type", + } + + def __init__(self_, category: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Target multiple WAF rules based on their tags. + + :param category: The category of the targeted WAF rules. + :type category: str, optional + + :param type: The type of the targeted WAF rules. + :type type: str, optional + """ + if category is not unset: + kwargs["category"] = category + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_scope.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_scope.py new file mode 100644 index 0000000000..7079b5f9d6 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_scope.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ApplicationSecurityWafExclusionFilterScope(ModelNormal): + @cached_property + def openapi_types(_): + return { + "env": (str,), + "service": (str,), + } + attribute_map = { + "env": "env", + "service": "service", + } + + def __init__(self_, env: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, **kwargs): + """ + Deploy on services based on their environment and/or service name. + + :param env: Deploy on this environment. + :type env: str, optional + + :param service: Deploy on this service. + :type service: str, optional + """ + if env is not unset: + kwargs["env"] = env + if service is not unset: + kwargs["service"] = service + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_type.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_type.py new file mode 100644 index 0000000000..9f725118d0 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ApplicationSecurityWafExclusionFilterType(ModelSimple): + """ + Type of the resource. The value should always be `exclusion_filter`. + + :param value: If omitted defaults to "exclusion_filter". Must be one of ["exclusion_filter"]. + :type value: str + """ + + allowed_values = { + "exclusion_filter", + } + EXCLUSION_FILTER: ClassVar["ApplicationSecurityWafExclusionFilterType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ApplicationSecurityWafExclusionFilterType.EXCLUSION_FILTER = ApplicationSecurityWafExclusionFilterType("exclusion_filter") diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_update_attributes.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_update_attributes.py new file mode 100644 index 0000000000..54bd84a257 --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_update_attributes.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_on_match import ApplicationSecurityWafExclusionFilterOnMatch + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target import ApplicationSecurityWafExclusionFilterRulesTarget + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_scope import ApplicationSecurityWafExclusionFilterScope + +class ApplicationSecurityWafExclusionFilterUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_on_match import ApplicationSecurityWafExclusionFilterOnMatch + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target import ApplicationSecurityWafExclusionFilterRulesTarget + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_scope import ApplicationSecurityWafExclusionFilterScope + return { + "description": (str,), + "enabled": (bool,), + "ip_list": ([str],), + "on_match": (ApplicationSecurityWafExclusionFilterOnMatch,), + "parameters": ([str],), + "path_glob": (str,), + "rules_target": ([ApplicationSecurityWafExclusionFilterRulesTarget],), + "scope": ([ApplicationSecurityWafExclusionFilterScope],), + } + attribute_map = { + "description": "description", + "enabled": "enabled", + "ip_list": "ip_list", + "on_match": "on_match", + "parameters": "parameters", + "path_glob": "path_glob", + "rules_target": "rules_target", + "scope": "scope", + } + + def __init__(self_, description: str, enabled: bool, ip_list: Union[List[str], UnsetType]=unset, on_match: Union[ApplicationSecurityWafExclusionFilterOnMatch, UnsetType]=unset, parameters: Union[List[str], UnsetType]=unset, path_glob: Union[str, UnsetType]=unset, rules_target: Union[List[ApplicationSecurityWafExclusionFilterRulesTarget], UnsetType]=unset, scope: Union[List[ApplicationSecurityWafExclusionFilterScope], UnsetType]=unset, **kwargs): + """ + Attributes for updating a WAF exclusion filter. + + :param description: A description for the exclusion filter. + :type description: str + + :param enabled: Indicates whether the exclusion filter is enabled. + :type enabled: bool + + :param ip_list: The client IP addresses matched by the exclusion filter (CIDR notation is supported). + :type ip_list: [str], optional + + :param on_match: The action taken when the exclusion filter matches. When set to ``monitor`` , security traces are emitted but the requests are not blocked. By default, security traces are not emitted and the requests are not blocked. + :type on_match: ApplicationSecurityWafExclusionFilterOnMatch, optional + + :param parameters: A list of parameters matched by the exclusion filter in the HTTP query string and HTTP request body. Nested parameters can be matched by joining fields with a dot character. + :type parameters: [str], optional + + :param path_glob: The HTTP path glob expression matched by the exclusion filter. + :type path_glob: str, optional + + :param rules_target: The WAF rules targeted by the exclusion filter. + :type rules_target: [ApplicationSecurityWafExclusionFilterRulesTarget], optional + + :param scope: The services where the exclusion filter is deployed. + :type scope: [ApplicationSecurityWafExclusionFilterScope], optional + """ + if ip_list is not unset: + kwargs["ip_list"] = ip_list + if on_match is not unset: + kwargs["on_match"] = on_match + if parameters is not unset: + kwargs["parameters"] = parameters + if path_glob is not unset: + kwargs["path_glob"] = path_glob + if rules_target is not unset: + kwargs["rules_target"] = rules_target + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.description = description + self_.enabled = enabled diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_update_data.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_update_data.py new file mode 100644 index 0000000000..27c99147cd --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_update_attributes import ApplicationSecurityWafExclusionFilterUpdateAttributes + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_type import ApplicationSecurityWafExclusionFilterType + +class ApplicationSecurityWafExclusionFilterUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_update_attributes import ApplicationSecurityWafExclusionFilterUpdateAttributes + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_type import ApplicationSecurityWafExclusionFilterType + return { + "attributes": (ApplicationSecurityWafExclusionFilterUpdateAttributes,), + "type": (ApplicationSecurityWafExclusionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ApplicationSecurityWafExclusionFilterUpdateAttributes, type: ApplicationSecurityWafExclusionFilterType, **kwargs): + """ + Object for updating a single WAF exclusion filter. + + :param attributes: Attributes for updating a WAF exclusion filter. + :type attributes: ApplicationSecurityWafExclusionFilterUpdateAttributes + + :param type: Type of the resource. The value should always be ``exclusion_filter``. + :type type: ApplicationSecurityWafExclusionFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filter_update_request.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_update_request.py new file mode 100644 index 0000000000..8a8326a47f --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filter_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_update_data import ApplicationSecurityWafExclusionFilterUpdateData + +class ApplicationSecurityWafExclusionFilterUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_update_data import ApplicationSecurityWafExclusionFilterUpdateData + return { + "data": (ApplicationSecurityWafExclusionFilterUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ApplicationSecurityWafExclusionFilterUpdateData, **kwargs): + """ + Request object for updating a single WAF exclusion filter. + + :param data: Object for updating a single WAF exclusion filter. + :type data: ApplicationSecurityWafExclusionFilterUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/application_security_waf_exclusion_filters_response.py b/datadog_api_client/v2/model/application_security_waf_exclusion_filters_response.py new file mode 100644 index 0000000000..87429d3abe --- /dev/null +++ b/datadog_api_client/v2/model/application_security_waf_exclusion_filters_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_resource import ApplicationSecurityWafExclusionFilterResource + +class ApplicationSecurityWafExclusionFiltersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.application_security_waf_exclusion_filter_resource import ApplicationSecurityWafExclusionFilterResource + return { + "data": ([ApplicationSecurityWafExclusionFilterResource],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ApplicationSecurityWafExclusionFilterResource], UnsetType]=unset, **kwargs): + """ + Response object for multiple WAF exclusion filters. + + :param data: A list of WAF exclusion filters. + :type data: [ApplicationSecurityWafExclusionFilterResource], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/apps_sort_field.py b/datadog_api_client/v2/model/apps_sort_field.py new file mode 100644 index 0000000000..e62fe88a5a --- /dev/null +++ b/datadog_api_client/v2/model/apps_sort_field.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AppsSortField(ModelSimple): + """ + The field and direction to sort apps by + + :param value: Must be one of ["name", "created_at", "updated_at", "user_name", "-name", "-created_at", "-updated_at", "-user_name"]. + :type value: str + """ + + allowed_values = { + "name", + "created_at", + "updated_at", + "user_name", + "-name", + "-created_at", + "-updated_at", + "-user_name", + } + NAME: ClassVar["AppsSortField"] + CREATED_AT: ClassVar["AppsSortField"] + UPDATED_AT: ClassVar["AppsSortField"] + USER_NAME: ClassVar["AppsSortField"] + NAME_DESC: ClassVar["AppsSortField"] + CREATED_AT_DESC: ClassVar["AppsSortField"] + UPDATED_AT_DESC: ClassVar["AppsSortField"] + USER_NAME_DESC: ClassVar["AppsSortField"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AppsSortField.NAME = AppsSortField("name") +AppsSortField.CREATED_AT = AppsSortField("created_at") +AppsSortField.UPDATED_AT = AppsSortField("updated_at") +AppsSortField.USER_NAME = AppsSortField("user_name") +AppsSortField.NAME_DESC = AppsSortField("-name") +AppsSortField.CREATED_AT_DESC = AppsSortField("-created_at") +AppsSortField.UPDATED_AT_DESC = AppsSortField("-updated_at") +AppsSortField.USER_NAME_DESC = AppsSortField("-user_name") diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request.py new file mode 100644 index 0000000000..91bfeec522 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data import ArbitraryCostUpsertRequestData + +class ArbitraryCostUpsertRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data import ArbitraryCostUpsertRequestData + return { + "data": (ArbitraryCostUpsertRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ArbitraryCostUpsertRequestData, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequest`` object. + + :param data: The definition of ``ArbitraryCostUpsertRequestData`` object. + :type data: ArbitraryCostUpsertRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data.py new file mode 100644 index 0000000000..cbe3af941f --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes import ArbitraryCostUpsertRequestDataAttributes + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_type import ArbitraryCostUpsertRequestDataType + +class ArbitraryCostUpsertRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes import ArbitraryCostUpsertRequestDataAttributes + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_type import ArbitraryCostUpsertRequestDataType + return { + "attributes": (ArbitraryCostUpsertRequestDataAttributes,), + "id": (str,), + "type": (ArbitraryCostUpsertRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ArbitraryCostUpsertRequestDataType, attributes: Union[ArbitraryCostUpsertRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequestData`` object. + + :param attributes: The definition of ``ArbitraryCostUpsertRequestDataAttributes`` object. + :type attributes: ArbitraryCostUpsertRequestDataAttributes, optional + + :param id: The ``ArbitraryCostUpsertRequestData`` ``id``. + :type id: str, optional + + :param type: Upsert arbitrary rule resource type. + :type type: ArbitraryCostUpsertRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes.py new file mode 100644 index 0000000000..f3e7651057 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_costs_to_allocate_items import ArbitraryCostUpsertRequestDataAttributesCostsToAllocateItems + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy import ArbitraryCostUpsertRequestDataAttributesStrategy + +class ArbitraryCostUpsertRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_costs_to_allocate_items import ArbitraryCostUpsertRequestDataAttributesCostsToAllocateItems + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy import ArbitraryCostUpsertRequestDataAttributesStrategy + return { + "costs_to_allocate": ([ArbitraryCostUpsertRequestDataAttributesCostsToAllocateItems],), + "enabled": (bool,), + "order_id": (int,), + "provider": ([str],), + "rejected": (bool,), + "rule_name": (str,), + "strategy": (ArbitraryCostUpsertRequestDataAttributesStrategy,), + "type": (str,), + } + attribute_map = { + "costs_to_allocate": "costs_to_allocate", + "enabled": "enabled", + "order_id": "order_id", + "provider": "provider", + "rejected": "rejected", + "rule_name": "rule_name", + "strategy": "strategy", + "type": "type", + } + + def __init__(self_, costs_to_allocate: List[ArbitraryCostUpsertRequestDataAttributesCostsToAllocateItems], provider: List[str], rule_name: str, strategy: ArbitraryCostUpsertRequestDataAttributesStrategy, type: str, enabled: Union[bool, UnsetType]=unset, order_id: Union[int, UnsetType]=unset, rejected: Union[bool, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequestDataAttributes`` object. + + :param costs_to_allocate: The ``attributes`` ``costs_to_allocate``. + :type costs_to_allocate: [ArbitraryCostUpsertRequestDataAttributesCostsToAllocateItems] + + :param enabled: The ``attributes`` ``enabled``. + :type enabled: bool, optional + + :param order_id: The ``attributes`` ``order_id``. + :type order_id: int, optional + + :param provider: The ``attributes`` ``provider``. + :type provider: [str] + + :param rejected: The ``attributes`` ``rejected``. + :type rejected: bool, optional + + :param rule_name: The ``attributes`` ``rule_name``. + :type rule_name: str + + :param strategy: The definition of ``ArbitraryCostUpsertRequestDataAttributesStrategy`` object. + :type strategy: ArbitraryCostUpsertRequestDataAttributesStrategy + + :param type: The ``attributes`` ``type``. + :type type: str + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if order_id is not unset: + kwargs["order_id"] = order_id + if rejected is not unset: + kwargs["rejected"] = rejected + super().__init__(kwargs) + + + self_.costs_to_allocate = costs_to_allocate + self_.provider = provider + self_.rule_name = rule_name + self_.strategy = strategy + self_.type = type diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_costs_to_allocate_items.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_costs_to_allocate_items.py new file mode 100644 index 0000000000..ae370cdd96 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_costs_to_allocate_items.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryCostUpsertRequestDataAttributesCostsToAllocateItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "condition": (str,), + "tag": (str,), + "value": (str,), + "values": ([str], none_type), + } + attribute_map = { + "condition": "condition", + "tag": "tag", + "value": "value", + "values": "values", + } + + def __init__(self_, condition: str, tag: str, value: Union[str, UnsetType]=unset, values: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequestDataAttributesCostsToAllocateItems`` object. + + :param condition: The ``items`` ``condition``. + :type condition: str + + :param tag: The ``items`` ``tag``. + :type tag: str + + :param value: The ``items`` ``value``. + :type value: str, optional + + :param values: The ``items`` ``values``. + :type values: [str], none_type, optional + """ + if value is not unset: + kwargs["value"] = value + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + + self_.condition = condition + self_.tag = tag diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy.py new file mode 100644 index 0000000000..5986c35475 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items import ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItems + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_filters_items import ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByFiltersItems + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_based_on_costs_items import ArbitraryCostUpsertRequestDataAttributesStrategyBasedOnCostsItems + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_evaluate_grouped_by_filters_items import ArbitraryCostUpsertRequestDataAttributesStrategyEvaluateGroupedByFiltersItems + +class ArbitraryCostUpsertRequestDataAttributesStrategy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items import ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItems + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_filters_items import ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByFiltersItems + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_based_on_costs_items import ArbitraryCostUpsertRequestDataAttributesStrategyBasedOnCostsItems + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_evaluate_grouped_by_filters_items import ArbitraryCostUpsertRequestDataAttributesStrategyEvaluateGroupedByFiltersItems + return { + "allocated_by": ([ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItems],), + "allocated_by_filters": ([ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByFiltersItems],), + "allocated_by_tag_keys": ([str],), + "based_on_costs": ([ArbitraryCostUpsertRequestDataAttributesStrategyBasedOnCostsItems],), + "based_on_timeseries": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "evaluate_grouped_by_filters": ([ArbitraryCostUpsertRequestDataAttributesStrategyEvaluateGroupedByFiltersItems],), + "evaluate_grouped_by_tag_keys": ([str],), + "granularity": (str,), + "method": (str,), + } + attribute_map = { + "allocated_by": "allocated_by", + "allocated_by_filters": "allocated_by_filters", + "allocated_by_tag_keys": "allocated_by_tag_keys", + "based_on_costs": "based_on_costs", + "based_on_timeseries": "based_on_timeseries", + "evaluate_grouped_by_filters": "evaluate_grouped_by_filters", + "evaluate_grouped_by_tag_keys": "evaluate_grouped_by_tag_keys", + "granularity": "granularity", + "method": "method", + } + + def __init__(self_, method: str, allocated_by: Union[List[ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItems], UnsetType]=unset, allocated_by_filters: Union[List[ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByFiltersItems], UnsetType]=unset, allocated_by_tag_keys: Union[List[str], UnsetType]=unset, based_on_costs: Union[List[ArbitraryCostUpsertRequestDataAttributesStrategyBasedOnCostsItems], UnsetType]=unset, based_on_timeseries: Union[Dict[str, Any], UnsetType]=unset, evaluate_grouped_by_filters: Union[List[ArbitraryCostUpsertRequestDataAttributesStrategyEvaluateGroupedByFiltersItems], UnsetType]=unset, evaluate_grouped_by_tag_keys: Union[List[str], UnsetType]=unset, granularity: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequestDataAttributesStrategy`` object. + + :param allocated_by: The ``strategy`` ``allocated_by``. + :type allocated_by: [ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItems], optional + + :param allocated_by_filters: The ``strategy`` ``allocated_by_filters``. + :type allocated_by_filters: [ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByFiltersItems], optional + + :param allocated_by_tag_keys: The ``strategy`` ``allocated_by_tag_keys``. + :type allocated_by_tag_keys: [str], optional + + :param based_on_costs: The ``strategy`` ``based_on_costs``. + :type based_on_costs: [ArbitraryCostUpsertRequestDataAttributesStrategyBasedOnCostsItems], optional + + :param based_on_timeseries: The ``strategy`` ``based_on_timeseries``. + :type based_on_timeseries: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param evaluate_grouped_by_filters: The ``strategy`` ``evaluate_grouped_by_filters``. + :type evaluate_grouped_by_filters: [ArbitraryCostUpsertRequestDataAttributesStrategyEvaluateGroupedByFiltersItems], optional + + :param evaluate_grouped_by_tag_keys: The ``strategy`` ``evaluate_grouped_by_tag_keys``. + :type evaluate_grouped_by_tag_keys: [str], optional + + :param granularity: The ``strategy`` ``granularity``. + :type granularity: str, optional + + :param method: The ``strategy`` ``method``. + :type method: str + """ + if allocated_by is not unset: + kwargs["allocated_by"] = allocated_by + if allocated_by_filters is not unset: + kwargs["allocated_by_filters"] = allocated_by_filters + if allocated_by_tag_keys is not unset: + kwargs["allocated_by_tag_keys"] = allocated_by_tag_keys + if based_on_costs is not unset: + kwargs["based_on_costs"] = based_on_costs + if based_on_timeseries is not unset: + kwargs["based_on_timeseries"] = based_on_timeseries + if evaluate_grouped_by_filters is not unset: + kwargs["evaluate_grouped_by_filters"] = evaluate_grouped_by_filters + if evaluate_grouped_by_tag_keys is not unset: + kwargs["evaluate_grouped_by_tag_keys"] = evaluate_grouped_by_tag_keys + if granularity is not unset: + kwargs["granularity"] = granularity + super().__init__(kwargs) + + + self_.method = method diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_filters_items.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_filters_items.py new file mode 100644 index 0000000000..8cc4b91cc0 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_filters_items.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByFiltersItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "condition": (str,), + "tag": (str,), + "value": (str,), + "values": ([str], none_type), + } + attribute_map = { + "condition": "condition", + "tag": "tag", + "value": "value", + "values": "values", + } + + def __init__(self_, condition: str, tag: str, value: Union[str, UnsetType]=unset, values: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByFiltersItems`` object. + + :param condition: The ``items`` ``condition``. + :type condition: str + + :param tag: The ``items`` ``tag``. + :type tag: str + + :param value: The ``items`` ``value``. + :type value: str, optional + + :param values: The ``items`` ``values``. + :type values: [str], none_type, optional + """ + if value is not unset: + kwargs["value"] = value + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + + self_.condition = condition + self_.tag = tag diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items.py new file mode 100644 index 0000000000..6a5773c5da --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items_allocated_tags_items import ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItemsAllocatedTagsItems + +class ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items_allocated_tags_items import ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItemsAllocatedTagsItems + return { + "allocated_tags": ([ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItemsAllocatedTagsItems],), + "percentage": (float,), + } + attribute_map = { + "allocated_tags": "allocated_tags", + "percentage": "percentage", + } + + def __init__(self_, allocated_tags: List[ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItemsAllocatedTagsItems], percentage: float, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItems`` object. + + :param allocated_tags: The ``items`` ``allocated_tags``. + :type allocated_tags: [ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItemsAllocatedTagsItems] + + :param percentage: The ``items`` ``percentage``. The numeric value format should be a 32bit float value. + :type percentage: float + """ + super().__init__(kwargs) + + + self_.allocated_tags = allocated_tags + self_.percentage = percentage diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items_allocated_tags_items.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items_allocated_tags_items.py new file mode 100644 index 0000000000..5881ee5b8d --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items_allocated_tags_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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItemsAllocatedTagsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: str, value: str, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItemsAllocatedTagsItems`` object. + + :param key: The ``items`` ``key``. + :type key: str + + :param value: The ``items`` ``value``. + :type value: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.value = value diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_based_on_costs_items.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_based_on_costs_items.py new file mode 100644 index 0000000000..33cab95a93 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_based_on_costs_items.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryCostUpsertRequestDataAttributesStrategyBasedOnCostsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "condition": (str,), + "tag": (str,), + "value": (str,), + "values": ([str], none_type), + } + attribute_map = { + "condition": "condition", + "tag": "tag", + "value": "value", + "values": "values", + } + + def __init__(self_, condition: str, tag: str, value: Union[str, UnsetType]=unset, values: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequestDataAttributesStrategyBasedOnCostsItems`` object. + + :param condition: The ``items`` ``condition``. + :type condition: str + + :param tag: The ``items`` ``tag``. + :type tag: str + + :param value: The ``items`` ``value``. + :type value: str, optional + + :param values: The ``items`` ``values``. + :type values: [str], none_type, optional + """ + if value is not unset: + kwargs["value"] = value + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + + self_.condition = condition + self_.tag = tag diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_evaluate_grouped_by_filters_items.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_evaluate_grouped_by_filters_items.py new file mode 100644 index 0000000000..344ee99f39 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_attributes_strategy_evaluate_grouped_by_filters_items.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryCostUpsertRequestDataAttributesStrategyEvaluateGroupedByFiltersItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "condition": (str,), + "tag": (str,), + "value": (str,), + "values": ([str], none_type), + } + attribute_map = { + "condition": "condition", + "tag": "tag", + "value": "value", + "values": "values", + } + + def __init__(self_, condition: str, tag: str, value: Union[str, UnsetType]=unset, values: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryCostUpsertRequestDataAttributesStrategyEvaluateGroupedByFiltersItems`` object. + + :param condition: The ``items`` ``condition``. + :type condition: str + + :param tag: The ``items`` ``tag``. + :type tag: str + + :param value: The ``items`` ``value``. + :type value: str, optional + + :param values: The ``items`` ``values``. + :type values: [str], none_type, optional + """ + if value is not unset: + kwargs["value"] = value + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + + self_.condition = condition + self_.tag = tag diff --git a/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_type.py b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_type.py new file mode 100644 index 0000000000..ddc30d9259 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_cost_upsert_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ArbitraryCostUpsertRequestDataType(ModelSimple): + """ + Upsert arbitrary rule resource type. + + :param value: If omitted defaults to "upsert_arbitrary_rule". Must be one of ["upsert_arbitrary_rule"]. + :type value: str + """ + + allowed_values = { + "upsert_arbitrary_rule", + } + UPSERT_ARBITRARY_RULE: ClassVar["ArbitraryCostUpsertRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ArbitraryCostUpsertRequestDataType.UPSERT_ARBITRARY_RULE = ArbitraryCostUpsertRequestDataType("upsert_arbitrary_rule") diff --git a/datadog_api_client/v2/model/arbitrary_rule_response.py b/datadog_api_client/v2/model/arbitrary_rule_response.py new file mode 100644 index 0000000000..fda713aec0 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_rule_response_data import ArbitraryRuleResponseData + +class ArbitraryRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_rule_response_data import ArbitraryRuleResponseData + return { + "data": (ArbitraryRuleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ArbitraryRuleResponseData, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryRuleResponse`` object. + + :param data: The definition of ``ArbitraryRuleResponseData`` object. + :type data: ArbitraryRuleResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_array.py b/datadog_api_client/v2/model/arbitrary_rule_response_array.py new file mode 100644 index 0000000000..d83cf80f23 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_array.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_rule_response_data import ArbitraryRuleResponseData + from datadog_api_client.v2.model.arbitrary_rule_response_array_meta import ArbitraryRuleResponseArrayMeta + +class ArbitraryRuleResponseArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_rule_response_data import ArbitraryRuleResponseData + from datadog_api_client.v2.model.arbitrary_rule_response_array_meta import ArbitraryRuleResponseArrayMeta + return { + "data": ([ArbitraryRuleResponseData],), + "meta": (ArbitraryRuleResponseArrayMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[ArbitraryRuleResponseData], meta: Union[ArbitraryRuleResponseArrayMeta, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryRuleResponseArray`` object. + + :param data: The ``ArbitraryRuleResponseArray`` ``data``. + :type data: [ArbitraryRuleResponseData] + + :param meta: The ``ArbitraryRuleResponseArray`` ``meta``. + :type meta: ArbitraryRuleResponseArrayMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_array_meta.py b/datadog_api_client/v2/model/arbitrary_rule_response_array_meta.py new file mode 100644 index 0000000000..1c058cf48a --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryRuleResponseArrayMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "total_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + The ``ArbitraryRuleResponseArray`` ``meta``. + + :param total_count: The ``meta`` ``total_count``. + :type total_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data.py b/datadog_api_client/v2/model/arbitrary_rule_response_data.py new file mode 100644 index 0000000000..b6a8fe7961 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes import ArbitraryRuleResponseDataAttributes + from datadog_api_client.v2.model.arbitrary_rule_response_data_type import ArbitraryRuleResponseDataType + +class ArbitraryRuleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes import ArbitraryRuleResponseDataAttributes + from datadog_api_client.v2.model.arbitrary_rule_response_data_type import ArbitraryRuleResponseDataType + return { + "attributes": (ArbitraryRuleResponseDataAttributes,), + "id": (str,), + "type": (ArbitraryRuleResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ArbitraryRuleResponseDataType, attributes: Union[ArbitraryRuleResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryRuleResponseData`` object. + + :param attributes: The definition of ``ArbitraryRuleResponseDataAttributes`` object. + :type attributes: ArbitraryRuleResponseDataAttributes, optional + + :param id: The ``ArbitraryRuleResponseData`` ``id``. + :type id: str, optional + + :param type: Arbitrary rule resource type. + :type type: ArbitraryRuleResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes.py b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes.py new file mode 100644 index 0000000000..80ecbcccda --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes.py @@ -0,0 +1,129 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_costs_to_allocate_items import ArbitraryRuleResponseDataAttributesCostsToAllocateItems + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy import ArbitraryRuleResponseDataAttributesStrategy + +class ArbitraryRuleResponseDataAttributes(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_costs_to_allocate_items import ArbitraryRuleResponseDataAttributesCostsToAllocateItems + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy import ArbitraryRuleResponseDataAttributesStrategy + return { + "costs_to_allocate": ([ArbitraryRuleResponseDataAttributesCostsToAllocateItems],), + "created": (datetime,), + "enabled": (bool,), + "last_modified_user_uuid": (str,), + "order_id": (int,), + "processing_status": (str,), + "provider": ([str],), + "rejected": (bool,), + "rule_name": (str,), + "strategy": (ArbitraryRuleResponseDataAttributesStrategy,), + "type": (str,), + "updated": (datetime,), + "version": (int,), + } + attribute_map = { + "costs_to_allocate": "costs_to_allocate", + "created": "created", + "enabled": "enabled", + "last_modified_user_uuid": "last_modified_user_uuid", + "order_id": "order_id", + "processing_status": "processing_status", + "provider": "provider", + "rejected": "rejected", + "rule_name": "rule_name", + "strategy": "strategy", + "type": "type", + "updated": "updated", + "version": "version", + } + + def __init__(self_, costs_to_allocate: List[ArbitraryRuleResponseDataAttributesCostsToAllocateItems], created: datetime, enabled: bool, last_modified_user_uuid: str, order_id: int, provider: List[str], rule_name: str, strategy: ArbitraryRuleResponseDataAttributesStrategy, type: str, updated: datetime, version: int, processing_status: Union[str, UnsetType]=unset, rejected: Union[bool, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryRuleResponseDataAttributes`` object. + + :param costs_to_allocate: The ``attributes`` ``costs_to_allocate``. + :type costs_to_allocate: [ArbitraryRuleResponseDataAttributesCostsToAllocateItems] + + :param created: The ``attributes`` ``created``. + :type created: datetime + + :param enabled: The ``attributes`` ``enabled``. + :type enabled: bool + + :param last_modified_user_uuid: The ``attributes`` ``last_modified_user_uuid``. + :type last_modified_user_uuid: str + + :param order_id: The ``attributes`` ``order_id``. + :type order_id: int + + :param processing_status: The ``attributes`` ``processing_status``. + :type processing_status: str, optional + + :param provider: The ``attributes`` ``provider``. + :type provider: [str] + + :param rejected: The ``attributes`` ``rejected``. + :type rejected: bool, optional + + :param rule_name: The ``attributes`` ``rule_name``. + :type rule_name: str + + :param strategy: The definition of ``ArbitraryRuleResponseDataAttributesStrategy`` object. + :type strategy: ArbitraryRuleResponseDataAttributesStrategy + + :param type: The ``attributes`` ``type``. + :type type: str + + :param updated: The ``attributes`` ``updated``. + :type updated: datetime + + :param version: The ``attributes`` ``version``. + :type version: int + """ + if processing_status is not unset: + kwargs["processing_status"] = processing_status + if rejected is not unset: + kwargs["rejected"] = rejected + super().__init__(kwargs) + + + self_.costs_to_allocate = costs_to_allocate + self_.created = created + self_.enabled = enabled + self_.last_modified_user_uuid = last_modified_user_uuid + self_.order_id = order_id + self_.provider = provider + self_.rule_name = rule_name + self_.strategy = strategy + self_.type = type + self_.updated = updated + self_.version = version diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_costs_to_allocate_items.py b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_costs_to_allocate_items.py new file mode 100644 index 0000000000..0d33ecbd6b --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_costs_to_allocate_items.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryRuleResponseDataAttributesCostsToAllocateItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "condition": (str,), + "tag": (str,), + "value": (str,), + "values": ([str], none_type), + } + attribute_map = { + "condition": "condition", + "tag": "tag", + "value": "value", + "values": "values", + } + + def __init__(self_, condition: str, tag: str, value: Union[str, UnsetType]=unset, values: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryRuleResponseDataAttributesCostsToAllocateItems`` object. + + :param condition: The ``items`` ``condition``. + :type condition: str + + :param tag: The ``items`` ``tag``. + :type tag: str + + :param value: The ``items`` ``value``. + :type value: str, optional + + :param values: The ``items`` ``values``. + :type values: [str], none_type, optional + """ + if value is not unset: + kwargs["value"] = value + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + + self_.condition = condition + self_.tag = tag diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy.py b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy.py new file mode 100644 index 0000000000..bdd47f08c8 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_allocated_by_items import ArbitraryRuleResponseDataAttributesStrategyAllocatedByItems + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_allocated_by_filters_items import ArbitraryRuleResponseDataAttributesStrategyAllocatedByFiltersItems + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_based_on_costs_items import ArbitraryRuleResponseDataAttributesStrategyBasedOnCostsItems + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_evaluate_grouped_by_filters_items import ArbitraryRuleResponseDataAttributesStrategyEvaluateGroupedByFiltersItems + +class ArbitraryRuleResponseDataAttributesStrategy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_allocated_by_items import ArbitraryRuleResponseDataAttributesStrategyAllocatedByItems + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_allocated_by_filters_items import ArbitraryRuleResponseDataAttributesStrategyAllocatedByFiltersItems + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_based_on_costs_items import ArbitraryRuleResponseDataAttributesStrategyBasedOnCostsItems + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_evaluate_grouped_by_filters_items import ArbitraryRuleResponseDataAttributesStrategyEvaluateGroupedByFiltersItems + return { + "allocated_by": ([ArbitraryRuleResponseDataAttributesStrategyAllocatedByItems],), + "allocated_by_filters": ([ArbitraryRuleResponseDataAttributesStrategyAllocatedByFiltersItems],), + "allocated_by_tag_keys": ([str],), + "based_on_costs": ([ArbitraryRuleResponseDataAttributesStrategyBasedOnCostsItems],), + "based_on_timeseries": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "evaluate_grouped_by_filters": ([ArbitraryRuleResponseDataAttributesStrategyEvaluateGroupedByFiltersItems],), + "evaluate_grouped_by_tag_keys": ([str],), + "granularity": (str,), + "method": (str,), + } + attribute_map = { + "allocated_by": "allocated_by", + "allocated_by_filters": "allocated_by_filters", + "allocated_by_tag_keys": "allocated_by_tag_keys", + "based_on_costs": "based_on_costs", + "based_on_timeseries": "based_on_timeseries", + "evaluate_grouped_by_filters": "evaluate_grouped_by_filters", + "evaluate_grouped_by_tag_keys": "evaluate_grouped_by_tag_keys", + "granularity": "granularity", + "method": "method", + } + + def __init__(self_, method: str, allocated_by: Union[List[ArbitraryRuleResponseDataAttributesStrategyAllocatedByItems], UnsetType]=unset, allocated_by_filters: Union[List[ArbitraryRuleResponseDataAttributesStrategyAllocatedByFiltersItems], UnsetType]=unset, allocated_by_tag_keys: Union[List[str], UnsetType]=unset, based_on_costs: Union[List[ArbitraryRuleResponseDataAttributesStrategyBasedOnCostsItems], UnsetType]=unset, based_on_timeseries: Union[Dict[str, Any], UnsetType]=unset, evaluate_grouped_by_filters: Union[List[ArbitraryRuleResponseDataAttributesStrategyEvaluateGroupedByFiltersItems], UnsetType]=unset, evaluate_grouped_by_tag_keys: Union[List[str], UnsetType]=unset, granularity: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryRuleResponseDataAttributesStrategy`` object. + + :param allocated_by: The ``strategy`` ``allocated_by``. + :type allocated_by: [ArbitraryRuleResponseDataAttributesStrategyAllocatedByItems], optional + + :param allocated_by_filters: The ``strategy`` ``allocated_by_filters``. + :type allocated_by_filters: [ArbitraryRuleResponseDataAttributesStrategyAllocatedByFiltersItems], optional + + :param allocated_by_tag_keys: The ``strategy`` ``allocated_by_tag_keys``. + :type allocated_by_tag_keys: [str], optional + + :param based_on_costs: The ``strategy`` ``based_on_costs``. + :type based_on_costs: [ArbitraryRuleResponseDataAttributesStrategyBasedOnCostsItems], optional + + :param based_on_timeseries: The rule ``strategy`` ``based_on_timeseries``. + :type based_on_timeseries: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param evaluate_grouped_by_filters: The ``strategy`` ``evaluate_grouped_by_filters``. + :type evaluate_grouped_by_filters: [ArbitraryRuleResponseDataAttributesStrategyEvaluateGroupedByFiltersItems], optional + + :param evaluate_grouped_by_tag_keys: The ``strategy`` ``evaluate_grouped_by_tag_keys``. + :type evaluate_grouped_by_tag_keys: [str], optional + + :param granularity: The ``strategy`` ``granularity``. + :type granularity: str, optional + + :param method: The ``strategy`` ``method``. + :type method: str + """ + if allocated_by is not unset: + kwargs["allocated_by"] = allocated_by + if allocated_by_filters is not unset: + kwargs["allocated_by_filters"] = allocated_by_filters + if allocated_by_tag_keys is not unset: + kwargs["allocated_by_tag_keys"] = allocated_by_tag_keys + if based_on_costs is not unset: + kwargs["based_on_costs"] = based_on_costs + if based_on_timeseries is not unset: + kwargs["based_on_timeseries"] = based_on_timeseries + if evaluate_grouped_by_filters is not unset: + kwargs["evaluate_grouped_by_filters"] = evaluate_grouped_by_filters + if evaluate_grouped_by_tag_keys is not unset: + kwargs["evaluate_grouped_by_tag_keys"] = evaluate_grouped_by_tag_keys + if granularity is not unset: + kwargs["granularity"] = granularity + super().__init__(kwargs) + + + self_.method = method diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_allocated_by_filters_items.py b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_allocated_by_filters_items.py new file mode 100644 index 0000000000..827ee57d72 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_allocated_by_filters_items.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryRuleResponseDataAttributesStrategyAllocatedByFiltersItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "condition": (str,), + "tag": (str,), + "value": (str,), + "values": ([str], none_type), + } + attribute_map = { + "condition": "condition", + "tag": "tag", + "value": "value", + "values": "values", + } + + def __init__(self_, condition: str, tag: str, value: Union[str, UnsetType]=unset, values: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryRuleResponseDataAttributesStrategyAllocatedByFiltersItems`` object. + + :param condition: The ``items`` ``condition``. + :type condition: str + + :param tag: The ``items`` ``tag``. + :type tag: str + + :param value: The ``items`` ``value``. + :type value: str, optional + + :param values: The ``items`` ``values``. + :type values: [str], none_type, optional + """ + if value is not unset: + kwargs["value"] = value + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + + self_.condition = condition + self_.tag = tag diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_allocated_by_items.py b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_allocated_by_items.py new file mode 100644 index 0000000000..8df4dbc10b --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_allocated_by_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_allocated_by_items_allocated_tags_items import ArbitraryRuleResponseDataAttributesStrategyAllocatedByItemsAllocatedTagsItems + +class ArbitraryRuleResponseDataAttributesStrategyAllocatedByItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_allocated_by_items_allocated_tags_items import ArbitraryRuleResponseDataAttributesStrategyAllocatedByItemsAllocatedTagsItems + return { + "allocated_tags": ([ArbitraryRuleResponseDataAttributesStrategyAllocatedByItemsAllocatedTagsItems],), + "percentage": (float,), + } + attribute_map = { + "allocated_tags": "allocated_tags", + "percentage": "percentage", + } + + def __init__(self_, allocated_tags: List[ArbitraryRuleResponseDataAttributesStrategyAllocatedByItemsAllocatedTagsItems], percentage: float, **kwargs): + """ + The definition of ``ArbitraryRuleResponseDataAttributesStrategyAllocatedByItems`` object. + + :param allocated_tags: The ``items`` ``allocated_tags``. + :type allocated_tags: [ArbitraryRuleResponseDataAttributesStrategyAllocatedByItemsAllocatedTagsItems] + + :param percentage: The ``items`` ``percentage``. The numeric value format should be a 32bit float value. + :type percentage: float + """ + super().__init__(kwargs) + + + self_.allocated_tags = allocated_tags + self_.percentage = percentage diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_allocated_by_items_allocated_tags_items.py b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_allocated_by_items_allocated_tags_items.py new file mode 100644 index 0000000000..a6b44522fd --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_allocated_by_items_allocated_tags_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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryRuleResponseDataAttributesStrategyAllocatedByItemsAllocatedTagsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: str, value: str, **kwargs): + """ + The definition of ``ArbitraryRuleResponseDataAttributesStrategyAllocatedByItemsAllocatedTagsItems`` object. + + :param key: The ``items`` ``key``. + :type key: str + + :param value: The ``items`` ``value``. + :type value: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.value = value diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_based_on_costs_items.py b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_based_on_costs_items.py new file mode 100644 index 0000000000..24b1eb5670 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_based_on_costs_items.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryRuleResponseDataAttributesStrategyBasedOnCostsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "condition": (str,), + "tag": (str,), + "value": (str,), + "values": ([str], none_type), + } + attribute_map = { + "condition": "condition", + "tag": "tag", + "value": "value", + "values": "values", + } + + def __init__(self_, condition: str, tag: str, value: Union[str, UnsetType]=unset, values: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryRuleResponseDataAttributesStrategyBasedOnCostsItems`` object. + + :param condition: The ``items`` ``condition``. + :type condition: str + + :param tag: The ``items`` ``tag``. + :type tag: str + + :param value: The ``items`` ``value``. + :type value: str, optional + + :param values: The ``items`` ``values``. + :type values: [str], none_type, optional + """ + if value is not unset: + kwargs["value"] = value + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + + self_.condition = condition + self_.tag = tag diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_evaluate_grouped_by_filters_items.py b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_evaluate_grouped_by_filters_items.py new file mode 100644 index 0000000000..5cbb5eddf7 --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data_attributes_strategy_evaluate_grouped_by_filters_items.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryRuleResponseDataAttributesStrategyEvaluateGroupedByFiltersItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "condition": (str,), + "tag": (str,), + "value": (str,), + "values": ([str], none_type), + } + attribute_map = { + "condition": "condition", + "tag": "tag", + "value": "value", + "values": "values", + } + + def __init__(self_, condition: str, tag: str, value: Union[str, UnsetType]=unset, values: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``ArbitraryRuleResponseDataAttributesStrategyEvaluateGroupedByFiltersItems`` object. + + :param condition: The ``items`` ``condition``. + :type condition: str + + :param tag: The ``items`` ``tag``. + :type tag: str + + :param value: The ``items`` ``value``. + :type value: str, optional + + :param values: The ``items`` ``values``. + :type values: [str], none_type, optional + """ + if value is not unset: + kwargs["value"] = value + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + + self_.condition = condition + self_.tag = tag diff --git a/datadog_api_client/v2/model/arbitrary_rule_response_data_type.py b/datadog_api_client/v2/model/arbitrary_rule_response_data_type.py new file mode 100644 index 0000000000..d82c8960ed --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ArbitraryRuleResponseDataType(ModelSimple): + """ + Arbitrary rule resource type. + + :param value: If omitted defaults to "arbitrary_rule". Must be one of ["arbitrary_rule"]. + :type value: str + """ + + allowed_values = { + "arbitrary_rule", + } + ARBITRARY_RULE: ClassVar["ArbitraryRuleResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ArbitraryRuleResponseDataType.ARBITRARY_RULE = ArbitraryRuleResponseDataType("arbitrary_rule") diff --git a/datadog_api_client/v2/model/arbitrary_rule_status_response_array.py b/datadog_api_client/v2/model/arbitrary_rule_status_response_array.py new file mode 100644 index 0000000000..80ed5801ee --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_status_response_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_rule_status_response_data import ArbitraryRuleStatusResponseData + +class ArbitraryRuleStatusResponseArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_rule_status_response_data import ArbitraryRuleStatusResponseData + return { + "data": ([ArbitraryRuleStatusResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ArbitraryRuleStatusResponseData], **kwargs): + """ + Processing statuses for all custom allocation rules in the specified organization. + + :param data: Processing status for a custom allocation rule. + :type data: [ArbitraryRuleStatusResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/arbitrary_rule_status_response_data.py b/datadog_api_client/v2/model/arbitrary_rule_status_response_data.py new file mode 100644 index 0000000000..c64e8eb31e --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_status_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.arbitrary_rule_status_response_data_attributes import ArbitraryRuleStatusResponseDataAttributes + from datadog_api_client.v2.model.arbitrary_rule_status_response_data_type import ArbitraryRuleStatusResponseDataType + +class ArbitraryRuleStatusResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.arbitrary_rule_status_response_data_attributes import ArbitraryRuleStatusResponseDataAttributes + from datadog_api_client.v2.model.arbitrary_rule_status_response_data_type import ArbitraryRuleStatusResponseDataType + return { + "attributes": (ArbitraryRuleStatusResponseDataAttributes,), + "id": (str,), + "type": (ArbitraryRuleStatusResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ArbitraryRuleStatusResponseDataAttributes, id: str, type: ArbitraryRuleStatusResponseDataType, **kwargs): + """ + Processing status for a custom allocation rule. + + :param attributes: Processing status for a custom allocation rule. + :type attributes: ArbitraryRuleStatusResponseDataAttributes + + :param id: The unique identifier of the custom allocation rule. + :type id: str + + :param type: Custom allocation rule status resource type. + :type type: ArbitraryRuleStatusResponseDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/arbitrary_rule_status_response_data_attributes.py b/datadog_api_client/v2/model/arbitrary_rule_status_response_data_attributes.py new file mode 100644 index 0000000000..d86a39377f --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_status_response_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ArbitraryRuleStatusResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "processing_status": (str,), + } + attribute_map = { + "processing_status": "processing_status", + } + + def __init__(self_, processing_status: str, **kwargs): + """ + Processing status for a custom allocation rule. + + :param processing_status: The processing status of the custom allocation rule. + :type processing_status: str + """ + super().__init__(kwargs) + + + self_.processing_status = processing_status diff --git a/datadog_api_client/v2/model/arbitrary_rule_status_response_data_type.py b/datadog_api_client/v2/model/arbitrary_rule_status_response_data_type.py new file mode 100644 index 0000000000..e6f632432c --- /dev/null +++ b/datadog_api_client/v2/model/arbitrary_rule_status_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ArbitraryRuleStatusResponseDataType(ModelSimple): + """ + Custom allocation rule status resource type. + + :param value: If omitted defaults to "arbitrary_rule_status". Must be one of ["arbitrary_rule_status"]. + :type value: str + """ + + allowed_values = { + "arbitrary_rule_status", + } + ARBITRARY_RULE_STATUS: ClassVar["ArbitraryRuleStatusResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ArbitraryRuleStatusResponseDataType.ARBITRARY_RULE_STATUS = ArbitraryRuleStatusResponseDataType("arbitrary_rule_status") diff --git a/datadog_api_client/v2/model/argument.py b/datadog_api_client/v2/model/argument.py new file mode 100644 index 0000000000..4d5ac35d6f --- /dev/null +++ b/datadog_api_client/v2/model/argument.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Argument(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + } + + def __init__(self_, description: str, name: str, **kwargs): + """ + A named argument for a custom static analysis rule. + + :param description: Base64-encoded argument description + :type description: str + + :param name: Base64-encoded argument name + :type name: str + """ + super().__init__(kwargs) + + + self_.description = description + self_.name = name diff --git a/datadog_api_client/v2/model/asana_access_token.py b/datadog_api_client/v2/model/asana_access_token.py new file mode 100644 index 0000000000..47dcfd47b1 --- /dev/null +++ b/datadog_api_client/v2/model/asana_access_token.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.asana_access_token_type import AsanaAccessTokenType + +class AsanaAccessToken(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.asana_access_token_type import AsanaAccessTokenType + return { + "access_token": (str,), + "type": (AsanaAccessTokenType,), + } + attribute_map = { + "access_token": "access_token", + "type": "type", + } + + def __init__(self_, access_token: str, type: AsanaAccessTokenType, **kwargs): + """ + The definition of the ``AsanaAccessToken`` object. + + :param access_token: The ``AsanaAccessToken`` ``access_token``. + :type access_token: str + + :param type: The definition of the ``AsanaAccessToken`` object. + :type type: AsanaAccessTokenType + """ + super().__init__(kwargs) + + + self_.access_token = access_token + self_.type = type diff --git a/datadog_api_client/v2/model/asana_access_token_type.py b/datadog_api_client/v2/model/asana_access_token_type.py new file mode 100644 index 0000000000..9c0be49320 --- /dev/null +++ b/datadog_api_client/v2/model/asana_access_token_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AsanaAccessTokenType(ModelSimple): + """ + The definition of the `AsanaAccessToken` object. + + :param value: If omitted defaults to "AsanaAccessToken". Must be one of ["AsanaAccessToken"]. + :type value: str + """ + + allowed_values = { + "AsanaAccessToken", + } + ASANAACCESSTOKEN: ClassVar["AsanaAccessTokenType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AsanaAccessTokenType.ASANAACCESSTOKEN = AsanaAccessTokenType("AsanaAccessToken") diff --git a/datadog_api_client/v2/model/asana_access_token_update.py b/datadog_api_client/v2/model/asana_access_token_update.py new file mode 100644 index 0000000000..f5480512ed --- /dev/null +++ b/datadog_api_client/v2/model/asana_access_token_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.asana_access_token_type import AsanaAccessTokenType + +class AsanaAccessTokenUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.asana_access_token_type import AsanaAccessTokenType + return { + "access_token": (str,), + "type": (AsanaAccessTokenType,), + } + attribute_map = { + "access_token": "access_token", + "type": "type", + } + + def __init__(self_, type: AsanaAccessTokenType, access_token: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``AsanaAccessToken`` object. + + :param access_token: The ``AsanaAccessTokenUpdate`` ``access_token``. + :type access_token: str, optional + + :param type: The definition of the ``AsanaAccessToken`` object. + :type type: AsanaAccessTokenType + """ + if access_token is not unset: + kwargs["access_token"] = access_token + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/asana_credentials.py b/datadog_api_client/v2/model/asana_credentials.py new file mode 100644 index 0000000000..88317face2 --- /dev/null +++ b/datadog_api_client/v2/model/asana_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AsanaCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``AsanaCredentials`` object. + + :param access_token: The `AsanaAccessToken` `access_token`. + :type access_token: str + + :param type: The definition of the `AsanaAccessToken` object. + :type type: AsanaAccessTokenType + """ + 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.asana_access_token import AsanaAccessToken + return { + "oneOf": [ + AsanaAccessToken, + ], + } diff --git a/datadog_api_client/v2/model/asana_credentials_update.py b/datadog_api_client/v2/model/asana_credentials_update.py new file mode 100644 index 0000000000..ac373ee108 --- /dev/null +++ b/datadog_api_client/v2/model/asana_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AsanaCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``AsanaCredentialsUpdate`` object. + + :param access_token: The `AsanaAccessTokenUpdate` `access_token`. + :type access_token: str, optional + + :param type: The definition of the `AsanaAccessToken` object. + :type type: AsanaAccessTokenType + """ + 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.asana_access_token_update import AsanaAccessTokenUpdate + return { + "oneOf": [ + AsanaAccessTokenUpdate, + ], + } diff --git a/datadog_api_client/v2/model/asana_integration.py b/datadog_api_client/v2/model/asana_integration.py new file mode 100644 index 0000000000..bc45f53cc9 --- /dev/null +++ b/datadog_api_client/v2/model/asana_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.asana_credentials import AsanaCredentials + from datadog_api_client.v2.model.asana_integration_type import AsanaIntegrationType + from datadog_api_client.v2.model.asana_access_token import AsanaAccessToken + +class AsanaIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.asana_credentials import AsanaCredentials + from datadog_api_client.v2.model.asana_integration_type import AsanaIntegrationType + return { + "credentials": (AsanaCredentials,), + "type": (AsanaIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[AsanaCredentials, AsanaAccessToken], type: AsanaIntegrationType, **kwargs): + """ + The definition of the ``AsanaIntegration`` object. + + :param credentials: The definition of the ``AsanaCredentials`` object. + :type credentials: AsanaCredentials + + :param type: The definition of the ``AsanaIntegrationType`` object. + :type type: AsanaIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/asana_integration_type.py b/datadog_api_client/v2/model/asana_integration_type.py new file mode 100644 index 0000000000..b28f473cbf --- /dev/null +++ b/datadog_api_client/v2/model/asana_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AsanaIntegrationType(ModelSimple): + """ + The definition of the `AsanaIntegrationType` object. + + :param value: If omitted defaults to "Asana". Must be one of ["Asana"]. + :type value: str + """ + + allowed_values = { + "Asana", + } + ASANA: ClassVar["AsanaIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AsanaIntegrationType.ASANA = AsanaIntegrationType("Asana") diff --git a/datadog_api_client/v2/model/asana_integration_update.py b/datadog_api_client/v2/model/asana_integration_update.py new file mode 100644 index 0000000000..2377f42e11 --- /dev/null +++ b/datadog_api_client/v2/model/asana_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.asana_credentials_update import AsanaCredentialsUpdate + from datadog_api_client.v2.model.asana_integration_type import AsanaIntegrationType + from datadog_api_client.v2.model.asana_access_token_update import AsanaAccessTokenUpdate + +class AsanaIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.asana_credentials_update import AsanaCredentialsUpdate + from datadog_api_client.v2.model.asana_integration_type import AsanaIntegrationType + return { + "credentials": (AsanaCredentialsUpdate,), + "type": (AsanaIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: AsanaIntegrationType, credentials: Union[AsanaCredentialsUpdate, AsanaAccessTokenUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``AsanaIntegrationUpdate`` object. + + :param credentials: The definition of the ``AsanaCredentialsUpdate`` object. + :type credentials: AsanaCredentialsUpdate, optional + + :param type: The definition of the ``AsanaIntegrationType`` object. + :type type: AsanaIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/asset.py b/datadog_api_client/v2/model/asset.py new file mode 100644 index 0000000000..e1596be56e --- /dev/null +++ b/datadog_api_client/v2/model/asset.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.asset_attributes import AssetAttributes + from datadog_api_client.v2.model.asset_entity_type import AssetEntityType + +class Asset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.asset_attributes import AssetAttributes + from datadog_api_client.v2.model.asset_entity_type import AssetEntityType + return { + "attributes": (AssetAttributes,), + "id": (str,), + "type": (AssetEntityType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AssetAttributes, id: str, type: AssetEntityType, **kwargs): + """ + A single vulnerable asset + + :param attributes: The JSON:API attributes of the asset. + :type attributes: AssetAttributes + + :param id: The unique ID for this asset. + :type id: str + + :param type: The JSON:API type. + :type type: AssetEntityType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/asset_attributes.py b/datadog_api_client/v2/model/asset_attributes.py new file mode 100644 index 0000000000..b4a8138731 --- /dev/null +++ b/datadog_api_client/v2/model/asset_attributes.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.asset_operating_system import AssetOperatingSystem + from datadog_api_client.v2.model.asset_risks import AssetRisks + from datadog_api_client.v2.model.asset_type import AssetType + from datadog_api_client.v2.model.asset_version import AssetVersion + +class AssetAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.asset_operating_system import AssetOperatingSystem + from datadog_api_client.v2.model.asset_risks import AssetRisks + from datadog_api_client.v2.model.asset_type import AssetType + from datadog_api_client.v2.model.asset_version import AssetVersion + return { + "arch": (str,), + "environments": ([str],), + "name": (str,), + "operating_system": (AssetOperatingSystem,), + "risks": (AssetRisks,), + "teams": ([str],), + "type": (AssetType,), + "version": (AssetVersion,), + } + attribute_map = { + "arch": "arch", + "environments": "environments", + "name": "name", + "operating_system": "operating_system", + "risks": "risks", + "teams": "teams", + "type": "type", + "version": "version", + } + + def __init__(self_, environments: List[str], name: str, risks: AssetRisks, type: AssetType, arch: Union[str, UnsetType]=unset, operating_system: Union[AssetOperatingSystem, UnsetType]=unset, teams: Union[List[str], UnsetType]=unset, version: Union[AssetVersion, UnsetType]=unset, **kwargs): + """ + The JSON:API attributes of the asset. + + :param arch: Asset architecture. + :type arch: str, optional + + :param environments: List of environments where the asset is deployed. + :type environments: [str] + + :param name: Asset name. + :type name: str + + :param operating_system: Asset operating system. + :type operating_system: AssetOperatingSystem, optional + + :param risks: Asset risks. + :type risks: AssetRisks + + :param teams: List of teams that own the asset. + :type teams: [str], optional + + :param type: The asset type + :type type: AssetType + + :param version: Asset version. + :type version: AssetVersion, optional + """ + if arch is not unset: + kwargs["arch"] = arch + if operating_system is not unset: + kwargs["operating_system"] = operating_system + if teams is not unset: + kwargs["teams"] = teams + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.environments = environments + self_.name = name + self_.risks = risks + self_.type = type diff --git a/datadog_api_client/v2/model/asset_entity_type.py b/datadog_api_client/v2/model/asset_entity_type.py new file mode 100644 index 0000000000..63d1be2e32 --- /dev/null +++ b/datadog_api_client/v2/model/asset_entity_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AssetEntityType(ModelSimple): + """ + The JSON:API type. + + :param value: If omitted defaults to "assets". Must be one of ["assets"]. + :type value: str + """ + + allowed_values = { + "assets", + } + ASSETS: ClassVar["AssetEntityType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AssetEntityType.ASSETS = AssetEntityType("assets") diff --git a/datadog_api_client/v2/model/asset_operating_system.py b/datadog_api_client/v2/model/asset_operating_system.py new file mode 100644 index 0000000000..8a279cde73 --- /dev/null +++ b/datadog_api_client/v2/model/asset_operating_system.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AssetOperatingSystem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + } + + def __init__(self_, name: str, description: Union[str, UnsetType]=unset, **kwargs): + """ + Asset operating system. + + :param description: Operating system version. + :type description: str, optional + + :param name: Operating system name. + :type name: str + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/asset_risks.py b/datadog_api_client/v2/model/asset_risks.py new file mode 100644 index 0000000000..ebc172188e --- /dev/null +++ b/datadog_api_client/v2/model/asset_risks.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AssetRisks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "has_access_to_sensitive_data": (bool,), + "has_privileged_access": (bool,), + "in_production": (bool,), + "is_publicly_accessible": (bool,), + "under_attack": (bool,), + } + attribute_map = { + "has_access_to_sensitive_data": "has_access_to_sensitive_data", + "has_privileged_access": "has_privileged_access", + "in_production": "in_production", + "is_publicly_accessible": "is_publicly_accessible", + "under_attack": "under_attack", + } + + def __init__(self_, in_production: bool, has_access_to_sensitive_data: Union[bool, UnsetType]=unset, has_privileged_access: Union[bool, UnsetType]=unset, is_publicly_accessible: Union[bool, UnsetType]=unset, under_attack: Union[bool, UnsetType]=unset, **kwargs): + """ + Asset risks. + + :param has_access_to_sensitive_data: Whether the asset has access to sensitive data or not. + :type has_access_to_sensitive_data: bool, optional + + :param has_privileged_access: Whether the asset has privileged access or not. + :type has_privileged_access: bool, optional + + :param in_production: Whether the asset is in production or not. + :type in_production: bool + + :param is_publicly_accessible: Whether the asset is publicly accessible or not. + :type is_publicly_accessible: bool, optional + + :param under_attack: Whether the asset is under attack or not. + :type under_attack: bool, optional + """ + if has_access_to_sensitive_data is not unset: + kwargs["has_access_to_sensitive_data"] = has_access_to_sensitive_data + if has_privileged_access is not unset: + kwargs["has_privileged_access"] = has_privileged_access + if is_publicly_accessible is not unset: + kwargs["is_publicly_accessible"] = is_publicly_accessible + if under_attack is not unset: + kwargs["under_attack"] = under_attack + super().__init__(kwargs) + + + self_.in_production = in_production diff --git a/datadog_api_client/v2/model/asset_type.py b/datadog_api_client/v2/model/asset_type.py new file mode 100644 index 0000000000..211afd701c --- /dev/null +++ b/datadog_api_client/v2/model/asset_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AssetType(ModelSimple): + """ + The asset type + + :param value: Must be one of ["Repository", "Service", "Host", "HostImage", "Image", "ServerlessFunction"]. + :type value: str + """ + + allowed_values = { + "Repository", + "Service", + "Host", + "HostImage", + "Image", + "ServerlessFunction", + } + REPOSITORY: ClassVar["AssetType"] + SERVICE: ClassVar["AssetType"] + HOST: ClassVar["AssetType"] + HOSTIMAGE: ClassVar["AssetType"] + IMAGE: ClassVar["AssetType"] + SERVERLESSFUNCTION: ClassVar["AssetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AssetType.REPOSITORY = AssetType("Repository") +AssetType.SERVICE = AssetType("Service") +AssetType.HOST = AssetType("Host") +AssetType.HOSTIMAGE = AssetType("HostImage") +AssetType.IMAGE = AssetType("Image") +AssetType.SERVERLESSFUNCTION = AssetType("ServerlessFunction") diff --git a/datadog_api_client/v2/model/asset_version.py b/datadog_api_client/v2/model/asset_version.py new file mode 100644 index 0000000000..47aeb84a79 --- /dev/null +++ b/datadog_api_client/v2/model/asset_version.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AssetVersion(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, UnsetType]=unset, **kwargs): + """ + Asset version. + + :param first: Asset first version. + :type first: str, optional + + :param last: Asset last version. + :type last: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/assign_seats_user_request.py b/datadog_api_client/v2/model/assign_seats_user_request.py new file mode 100644 index 0000000000..bb13cd7f2b --- /dev/null +++ b/datadog_api_client/v2/model/assign_seats_user_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.assign_seats_user_request_data import AssignSeatsUserRequestData + +class AssignSeatsUserRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.assign_seats_user_request_data import AssignSeatsUserRequestData + return { + "data": (AssignSeatsUserRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AssignSeatsUserRequestData, UnsetType]=unset, **kwargs): + """ + The request body for assigning seats to users for a product code. + + :param data: The request data object containing attributes for assigning seats to users. + :type data: AssignSeatsUserRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/assign_seats_user_request_data.py b/datadog_api_client/v2/model/assign_seats_user_request_data.py new file mode 100644 index 0000000000..152e302dfe --- /dev/null +++ b/datadog_api_client/v2/model/assign_seats_user_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.assign_seats_user_request_data_attributes import AssignSeatsUserRequestDataAttributes + from datadog_api_client.v2.model.seat_assignments_data_type import SeatAssignmentsDataType + +class AssignSeatsUserRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.assign_seats_user_request_data_attributes import AssignSeatsUserRequestDataAttributes + from datadog_api_client.v2.model.seat_assignments_data_type import SeatAssignmentsDataType + return { + "attributes": (AssignSeatsUserRequestDataAttributes,), + "id": (str,), + "type": (SeatAssignmentsDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AssignSeatsUserRequestDataAttributes, type: SeatAssignmentsDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The request data object containing attributes for assigning seats to users. + + :param attributes: Attributes specifying the product and users to whom seats will be assigned. + :type attributes: AssignSeatsUserRequestDataAttributes + + :param id: The ID of the assign seats user request. + :type id: str, optional + + :param type: Seat assignments resource type. + :type type: SeatAssignmentsDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/assign_seats_user_request_data_attributes.py b/datadog_api_client/v2/model/assign_seats_user_request_data_attributes.py new file mode 100644 index 0000000000..2343bad6ea --- /dev/null +++ b/datadog_api_client/v2/model/assign_seats_user_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AssignSeatsUserRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "product_code": (str,), + "user_uuids": ([str],), + } + attribute_map = { + "product_code": "product_code", + "user_uuids": "user_uuids", + } + + def __init__(self_, product_code: str, user_uuids: List[str], **kwargs): + """ + Attributes specifying the product and users to whom seats will be assigned. + + :param product_code: The product code for which to assign seats. + :type product_code: str + + :param user_uuids: The list of user IDs to assign seats to. + :type user_uuids: [str] + """ + super().__init__(kwargs) + + + self_.product_code = product_code + self_.user_uuids = user_uuids diff --git a/datadog_api_client/v2/model/assign_seats_user_response.py b/datadog_api_client/v2/model/assign_seats_user_response.py new file mode 100644 index 0000000000..dcca61b310 --- /dev/null +++ b/datadog_api_client/v2/model/assign_seats_user_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.assign_seats_user_response_data import AssignSeatsUserResponseData + +class AssignSeatsUserResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.assign_seats_user_response_data import AssignSeatsUserResponseData + return { + "data": (AssignSeatsUserResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AssignSeatsUserResponseData, UnsetType]=unset, **kwargs): + """ + The response body returned after successfully assigning seats to users. + + :param data: The response data object containing attributes of the seat assignment result. + :type data: AssignSeatsUserResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/assign_seats_user_response_data.py b/datadog_api_client/v2/model/assign_seats_user_response_data.py new file mode 100644 index 0000000000..3ee6f99bb3 --- /dev/null +++ b/datadog_api_client/v2/model/assign_seats_user_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.assign_seats_user_response_data_attributes import AssignSeatsUserResponseDataAttributes + from datadog_api_client.v2.model.seat_assignments_data_type import SeatAssignmentsDataType + +class AssignSeatsUserResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.assign_seats_user_response_data_attributes import AssignSeatsUserResponseDataAttributes + from datadog_api_client.v2.model.seat_assignments_data_type import SeatAssignmentsDataType + return { + "attributes": (AssignSeatsUserResponseDataAttributes,), + "id": (str,), + "type": (SeatAssignmentsDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AssignSeatsUserResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SeatAssignmentsDataType, UnsetType]=unset, **kwargs): + """ + The response data object containing attributes of the seat assignment result. + + :param attributes: Attributes of the assign seats response, including the list of users assigned and the product code. + :type attributes: AssignSeatsUserResponseDataAttributes, optional + + :param id: The ID of the assign seats user response. + :type id: str, optional + + :param type: Seat assignments resource type. + :type type: SeatAssignmentsDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/assign_seats_user_response_data_attributes.py b/datadog_api_client/v2/model/assign_seats_user_response_data_attributes.py new file mode 100644 index 0000000000..152a65c4ea --- /dev/null +++ b/datadog_api_client/v2/model/assign_seats_user_response_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AssignSeatsUserResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assigned_ids": ([str],), + "product_code": (str,), + } + attribute_map = { + "assigned_ids": "assigned_ids", + "product_code": "product_code", + } + + def __init__(self_, assigned_ids: Union[List[str], UnsetType]=unset, product_code: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the assign seats response, including the list of users assigned and the product code. + + :param assigned_ids: The list of user IDs to which the seats were assigned. + :type assigned_ids: [str], optional + + :param product_code: The product code for which the seats were assigned. + :type product_code: str, optional + """ + if assigned_ids is not unset: + kwargs["assigned_ids"] = assigned_ids + if product_code is not unset: + kwargs["product_code"] = product_code + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/assignee_data_type.py b/datadog_api_client/v2/model/assignee_data_type.py new file mode 100644 index 0000000000..82bb12a949 --- /dev/null +++ b/datadog_api_client/v2/model/assignee_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AssigneeDataType(ModelSimple): + """ + Assignee resource type. + + :param value: If omitted defaults to "assignee". Must be one of ["assignee"]. + :type value: str + """ + + allowed_values = { + "assignee", + } + ASSIGNEE: ClassVar["AssigneeDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AssigneeDataType.ASSIGNEE = AssigneeDataType("assignee") diff --git a/datadog_api_client/v2/model/assignee_request.py b/datadog_api_client/v2/model/assignee_request.py new file mode 100644 index 0000000000..28639dd175 --- /dev/null +++ b/datadog_api_client/v2/model/assignee_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.assignee_request_data import AssigneeRequestData + +class AssigneeRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.assignee_request_data import AssigneeRequestData + return { + "data": (AssigneeRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AssigneeRequestData, **kwargs): + """ + Request to assign or unassign security findings. + + :param data: Data of the assignee request. + :type data: AssigneeRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/assignee_request_data.py b/datadog_api_client/v2/model/assignee_request_data.py new file mode 100644 index 0000000000..58aa9cc3d4 --- /dev/null +++ b/datadog_api_client/v2/model/assignee_request_data.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.assignee_request_data_attributes import AssigneeRequestDataAttributes + from datadog_api_client.v2.model.assignee_request_data_relationships import AssigneeRequestDataRelationships + from datadog_api_client.v2.model.assignee_data_type import AssigneeDataType + +class AssigneeRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.assignee_request_data_attributes import AssigneeRequestDataAttributes + from datadog_api_client.v2.model.assignee_request_data_relationships import AssigneeRequestDataRelationships + from datadog_api_client.v2.model.assignee_data_type import AssigneeDataType + return { + "attributes": (AssigneeRequestDataAttributes,), + "id": (str,), + "relationships": (AssigneeRequestDataRelationships,), + "type": (AssigneeDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, relationships: AssigneeRequestDataRelationships, type: AssigneeDataType, attributes: Union[AssigneeRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data of the assignee request. + + :param attributes: Attributes of the assignee request. + :type attributes: AssigneeRequestDataAttributes, optional + + :param id: Unique identifier of the assignee request. + :type id: str, optional + + :param relationships: Relationships of the assignee request. + :type relationships: AssigneeRequestDataRelationships + + :param type: Assignee resource type. + :type type: AssigneeDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/assignee_request_data_attributes.py b/datadog_api_client/v2/model/assignee_request_data_attributes.py new file mode 100644 index 0000000000..356a11a5c2 --- /dev/null +++ b/datadog_api_client/v2/model/assignee_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AssigneeRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignee_id": (str,), + } + attribute_map = { + "assignee_id": "assignee_id", + } + + def __init__(self_, assignee_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the assignee request. + + :param assignee_id: Unique identifier of the Datadog user to assign the security findings to. If this field is not provided, the security findings are unassigned. + :type assignee_id: str, optional + """ + if assignee_id is not unset: + kwargs["assignee_id"] = assignee_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/assignee_request_data_relationships.py b/datadog_api_client/v2/model/assignee_request_data_relationships.py new file mode 100644 index 0000000000..c81f92eb5f --- /dev/null +++ b/datadog_api_client/v2/model/assignee_request_data_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + +class AssigneeRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + return { + "findings": (Findings,), + } + attribute_map = { + "findings": "findings", + } + + def __init__(self_, findings: Findings, **kwargs): + """ + Relationships of the assignee request. + + :param findings: A list of security findings. + :type findings: Findings + """ + super().__init__(kwargs) + + + self_.findings = findings diff --git a/datadog_api_client/v2/model/assignee_response.py b/datadog_api_client/v2/model/assignee_response.py new file mode 100644 index 0000000000..25992760eb --- /dev/null +++ b/datadog_api_client/v2/model/assignee_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.assignee_response_data import AssigneeResponseData + from datadog_api_client.v2.model.assignee_response_meta import AssigneeResponseMeta + +class AssigneeResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.assignee_response_data import AssigneeResponseData + from datadog_api_client.v2.model.assignee_response_meta import AssigneeResponseMeta + return { + "data": (AssigneeResponseData,), + "meta": (AssigneeResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: AssigneeResponseData, meta: Union[AssigneeResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for the assign or unassign request. + + :param data: Data of the assignee response. + :type data: AssigneeResponseData + + :param meta: Per-finding warnings and failures produced while processing the bulk assignee request. + :type meta: AssigneeResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/assignee_response_data.py b/datadog_api_client/v2/model/assignee_response_data.py new file mode 100644 index 0000000000..389a65c7c8 --- /dev/null +++ b/datadog_api_client/v2/model/assignee_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.assignee_response_data_attributes import AssigneeResponseDataAttributes + from datadog_api_client.v2.model.assignee_data_type import AssigneeDataType + +class AssigneeResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.assignee_response_data_attributes import AssigneeResponseDataAttributes + from datadog_api_client.v2.model.assignee_data_type import AssigneeDataType + return { + "attributes": (AssigneeResponseDataAttributes,), + "id": (str,), + "type": (AssigneeDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AssigneeResponseDataAttributes, id: str, type: AssigneeDataType, **kwargs): + """ + Data of the assignee response. + + :param attributes: Attributes of the assignee response. + :type attributes: AssigneeResponseDataAttributes + + :param id: Unique identifier of the assignee request. + :type id: str + + :param type: Assignee resource type. + :type type: AssigneeDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/assignee_response_data_attributes.py b/datadog_api_client/v2/model/assignee_response_data_attributes.py new file mode 100644 index 0000000000..13b3ac63cd --- /dev/null +++ b/datadog_api_client/v2/model/assignee_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AssigneeResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignee_id": (str,), + } + attribute_map = { + "assignee_id": "assignee_id", + } + + def __init__(self_, assignee_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the assignee response. + + :param assignee_id: Unique identifier of the Datadog user assigned to the security findings. Omitted when the findings were unassigned. + :type assignee_id: str, optional + """ + if assignee_id is not unset: + kwargs["assignee_id"] = assignee_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/assignee_response_meta.py b/datadog_api_client/v2/model/assignee_response_meta.py new file mode 100644 index 0000000000..730115f3ff --- /dev/null +++ b/datadog_api_client/v2/model/assignee_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.assignment_result import AssignmentResult + +class AssigneeResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.assignment_result import AssignmentResult + return { + "failures": ([AssignmentResult],), + "warnings": ([AssignmentResult],), + } + attribute_map = { + "failures": "failures", + "warnings": "warnings", + } + + def __init__(self_, failures: Union[List[AssignmentResult], UnsetType]=unset, warnings: Union[List[AssignmentResult], UnsetType]=unset, **kwargs): + """ + Per-finding warnings and failures produced while processing the bulk assignee request. + + :param failures: Findings that could not be assigned or unassigned. + :type failures: [AssignmentResult], optional + + :param warnings: Findings for which the assignment succeeded but a non-critical error occurred during processing. + :type warnings: [AssignmentResult], optional + """ + if failures is not unset: + kwargs["failures"] = failures + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/assignment_result.py b/datadog_api_client/v2/model/assignment_result.py new file mode 100644 index 0000000000..6ac6dc0008 --- /dev/null +++ b/datadog_api_client/v2/model/assignment_result.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AssignmentResult(ModelNormal): + validations = { + "status": { + "inclusive_maximum": 599, + }, + } + @cached_property + def openapi_types(_): + return { + "detail": (str,), + "finding_id": (str,), + "status": (int,), + "title": (str,), + } + attribute_map = { + "detail": "detail", + "finding_id": "finding_id", + "status": "status", + "title": "title", + } + + def __init__(self_, detail: str, finding_id: str, status: int, title: str, **kwargs): + """ + Per-finding outcome of an assign or unassign operation. + + :param detail: Human-readable explanation of the outcome. + :type detail: str + + :param finding_id: Unique identifier of the security finding. + :type finding_id: str + + :param status: HTTP-like status code describing the outcome for this finding. + :type status: int + + :param title: Short label describing the outcome for this finding. + :type title: str + """ + super().__init__(kwargs) + + + self_.detail = detail + self_.finding_id = finding_id + self_.status = status + self_.title = title diff --git a/datadog_api_client/v2/model/attach_case_request.py b/datadog_api_client/v2/model/attach_case_request.py new file mode 100644 index 0000000000..cebe2db400 --- /dev/null +++ b/datadog_api_client/v2/model/attach_case_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attach_case_request_data import AttachCaseRequestData + +class AttachCaseRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attach_case_request_data import AttachCaseRequestData + return { + "data": (AttachCaseRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AttachCaseRequestData, UnsetType]=unset, **kwargs): + """ + Request for attaching security findings to a case. + + :param data: Data of the case to attach security findings to. + :type data: AttachCaseRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/attach_case_request_data.py b/datadog_api_client/v2/model/attach_case_request_data.py new file mode 100644 index 0000000000..765bd3ea73 --- /dev/null +++ b/datadog_api_client/v2/model/attach_case_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attach_case_request_data_relationships import AttachCaseRequestDataRelationships + from datadog_api_client.v2.model.case_data_type import CaseDataType + +class AttachCaseRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attach_case_request_data_relationships import AttachCaseRequestDataRelationships + from datadog_api_client.v2.model.case_data_type import CaseDataType + return { + "id": (str,), + "relationships": (AttachCaseRequestDataRelationships,), + "type": (CaseDataType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: CaseDataType, relationships: Union[AttachCaseRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + Data of the case to attach security findings to. + + :param id: Unique identifier of the case. + :type id: str + + :param relationships: Relationships of the case to attach security findings to. + :type relationships: AttachCaseRequestDataRelationships, optional + + :param type: Cases resource type. + :type type: CaseDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/attach_case_request_data_relationships.py b/datadog_api_client/v2/model/attach_case_request_data_relationships.py new file mode 100644 index 0000000000..02a77caa4b --- /dev/null +++ b/datadog_api_client/v2/model/attach_case_request_data_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + +class AttachCaseRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + return { + "findings": (Findings,), + } + attribute_map = { + "findings": "findings", + } + + def __init__(self_, findings: Findings, **kwargs): + """ + Relationships of the case to attach security findings to. + + :param findings: A list of security findings. + :type findings: Findings + """ + super().__init__(kwargs) + + + self_.findings = findings diff --git a/datadog_api_client/v2/model/attach_jira_issue_request.py b/datadog_api_client/v2/model/attach_jira_issue_request.py new file mode 100644 index 0000000000..deacc3c1d5 --- /dev/null +++ b/datadog_api_client/v2/model/attach_jira_issue_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attach_jira_issue_request_data import AttachJiraIssueRequestData + +class AttachJiraIssueRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attach_jira_issue_request_data import AttachJiraIssueRequestData + return { + "data": (AttachJiraIssueRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AttachJiraIssueRequestData, UnsetType]=unset, **kwargs): + """ + Request for attaching security findings to a Jira issue. + + :param data: Data of the Jira issue to attach security findings to. + :type data: AttachJiraIssueRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/attach_jira_issue_request_data.py b/datadog_api_client/v2/model/attach_jira_issue_request_data.py new file mode 100644 index 0000000000..9bf27db54e --- /dev/null +++ b/datadog_api_client/v2/model/attach_jira_issue_request_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attach_jira_issue_request_data_attributes import AttachJiraIssueRequestDataAttributes + from datadog_api_client.v2.model.attach_jira_issue_request_data_relationships import AttachJiraIssueRequestDataRelationships + from datadog_api_client.v2.model.jira_issues_data_type import JiraIssuesDataType + +class AttachJiraIssueRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attach_jira_issue_request_data_attributes import AttachJiraIssueRequestDataAttributes + from datadog_api_client.v2.model.attach_jira_issue_request_data_relationships import AttachJiraIssueRequestDataRelationships + from datadog_api_client.v2.model.jira_issues_data_type import JiraIssuesDataType + return { + "attributes": (AttachJiraIssueRequestDataAttributes,), + "relationships": (AttachJiraIssueRequestDataRelationships,), + "type": (JiraIssuesDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: JiraIssuesDataType, attributes: Union[AttachJiraIssueRequestDataAttributes, UnsetType]=unset, relationships: Union[AttachJiraIssueRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + Data of the Jira issue to attach security findings to. + + :param attributes: Attributes of the Jira issue to attach security findings to. + :type attributes: AttachJiraIssueRequestDataAttributes, optional + + :param relationships: Relationships of the Jira issue to attach security findings to. + :type relationships: AttachJiraIssueRequestDataRelationships, optional + + :param type: Jira issues resource type. + :type type: JiraIssuesDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/attach_jira_issue_request_data_attributes.py b/datadog_api_client/v2/model/attach_jira_issue_request_data_attributes.py new file mode 100644 index 0000000000..282a7c3967 --- /dev/null +++ b/datadog_api_client/v2/model/attach_jira_issue_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AttachJiraIssueRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "jira_issue_url": (str,), + } + attribute_map = { + "jira_issue_url": "jira_issue_url", + } + + def __init__(self_, jira_issue_url: str, **kwargs): + """ + Attributes of the Jira issue to attach security findings to. + + :param jira_issue_url: URL of the Jira issue to attach security findings to. + :type jira_issue_url: str + """ + super().__init__(kwargs) + + + self_.jira_issue_url = jira_issue_url diff --git a/datadog_api_client/v2/model/attach_jira_issue_request_data_relationships.py b/datadog_api_client/v2/model/attach_jira_issue_request_data_relationships.py new file mode 100644 index 0000000000..884bce851f --- /dev/null +++ b/datadog_api_client/v2/model/attach_jira_issue_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + +class AttachJiraIssueRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + return { + "findings": (Findings,), + "project": (CaseManagementProject,), + } + attribute_map = { + "findings": "findings", + "project": "project", + } + + def __init__(self_, findings: Findings, project: CaseManagementProject, **kwargs): + """ + Relationships of the Jira issue to attach security findings to. + + :param findings: A list of security findings. + :type findings: Findings + + :param project: Case management project. + :type project: CaseManagementProject + """ + super().__init__(kwargs) + + + self_.findings = findings + self_.project = project diff --git a/datadog_api_client/v2/model/attach_linear_issue_request.py b/datadog_api_client/v2/model/attach_linear_issue_request.py new file mode 100644 index 0000000000..ffb8621d76 --- /dev/null +++ b/datadog_api_client/v2/model/attach_linear_issue_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attach_linear_issue_request_data import AttachLinearIssueRequestData + +class AttachLinearIssueRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attach_linear_issue_request_data import AttachLinearIssueRequestData + return { + "data": (AttachLinearIssueRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AttachLinearIssueRequestData, **kwargs): + """ + Request for attaching security findings to a Linear issue. + + :param data: Data of the Linear issue to attach security findings to. + :type data: AttachLinearIssueRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/attach_linear_issue_request_data.py b/datadog_api_client/v2/model/attach_linear_issue_request_data.py new file mode 100644 index 0000000000..63b72eb1b4 --- /dev/null +++ b/datadog_api_client/v2/model/attach_linear_issue_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attach_linear_issue_request_data_attributes import AttachLinearIssueRequestDataAttributes + from datadog_api_client.v2.model.attach_linear_issue_request_data_relationships import AttachLinearIssueRequestDataRelationships + from datadog_api_client.v2.model.linear_issues_data_type import LinearIssuesDataType + +class AttachLinearIssueRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attach_linear_issue_request_data_attributes import AttachLinearIssueRequestDataAttributes + from datadog_api_client.v2.model.attach_linear_issue_request_data_relationships import AttachLinearIssueRequestDataRelationships + from datadog_api_client.v2.model.linear_issues_data_type import LinearIssuesDataType + return { + "attributes": (AttachLinearIssueRequestDataAttributes,), + "relationships": (AttachLinearIssueRequestDataRelationships,), + "type": (LinearIssuesDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: AttachLinearIssueRequestDataAttributes, relationships: AttachLinearIssueRequestDataRelationships, type: LinearIssuesDataType, **kwargs): + """ + Data of the Linear issue to attach security findings to. + + :param attributes: Attributes of the Linear issue to attach security findings to. + :type attributes: AttachLinearIssueRequestDataAttributes + + :param relationships: Relationships of the Linear issue to attach security findings to. + :type relationships: AttachLinearIssueRequestDataRelationships + + :param type: Linear issues resource type. + :type type: LinearIssuesDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/attach_linear_issue_request_data_attributes.py b/datadog_api_client/v2/model/attach_linear_issue_request_data_attributes.py new file mode 100644 index 0000000000..493e26461a --- /dev/null +++ b/datadog_api_client/v2/model/attach_linear_issue_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AttachLinearIssueRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "linear_issue_url": (str,), + } + attribute_map = { + "linear_issue_url": "linear_issue_url", + } + + def __init__(self_, linear_issue_url: str, **kwargs): + """ + Attributes of the Linear issue to attach security findings to. + + :param linear_issue_url: URL of the Linear issue to attach security findings to. + :type linear_issue_url: str + """ + super().__init__(kwargs) + + + self_.linear_issue_url = linear_issue_url diff --git a/datadog_api_client/v2/model/attach_linear_issue_request_data_relationships.py b/datadog_api_client/v2/model/attach_linear_issue_request_data_relationships.py new file mode 100644 index 0000000000..fff98f0c14 --- /dev/null +++ b/datadog_api_client/v2/model/attach_linear_issue_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + +class AttachLinearIssueRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + return { + "findings": (Findings,), + "project": (CaseManagementProject,), + } + attribute_map = { + "findings": "findings", + "project": "project", + } + + def __init__(self_, findings: Findings, project: CaseManagementProject, **kwargs): + """ + Relationships of the Linear issue to attach security findings to. + + :param findings: A list of security findings. + :type findings: Findings + + :param project: Case management project. + :type project: CaseManagementProject + """ + super().__init__(kwargs) + + + self_.findings = findings + self_.project = project diff --git a/datadog_api_client/v2/model/attach_service_now_ticket_request.py b/datadog_api_client/v2/model/attach_service_now_ticket_request.py new file mode 100644 index 0000000000..362ac41fe9 --- /dev/null +++ b/datadog_api_client/v2/model/attach_service_now_ticket_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attach_service_now_ticket_request_data import AttachServiceNowTicketRequestData + +class AttachServiceNowTicketRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attach_service_now_ticket_request_data import AttachServiceNowTicketRequestData + return { + "data": (AttachServiceNowTicketRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AttachServiceNowTicketRequestData, **kwargs): + """ + Request for attaching security findings to a ServiceNow ticket. + + :param data: Data of the ServiceNow ticket to attach security findings to. + :type data: AttachServiceNowTicketRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/attach_service_now_ticket_request_data.py b/datadog_api_client/v2/model/attach_service_now_ticket_request_data.py new file mode 100644 index 0000000000..8a09ffd22c --- /dev/null +++ b/datadog_api_client/v2/model/attach_service_now_ticket_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attach_service_now_ticket_request_data_attributes import AttachServiceNowTicketRequestDataAttributes + from datadog_api_client.v2.model.attach_service_now_ticket_request_data_relationships import AttachServiceNowTicketRequestDataRelationships + from datadog_api_client.v2.model.service_now_tickets_data_type import ServiceNowTicketsDataType + +class AttachServiceNowTicketRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attach_service_now_ticket_request_data_attributes import AttachServiceNowTicketRequestDataAttributes + from datadog_api_client.v2.model.attach_service_now_ticket_request_data_relationships import AttachServiceNowTicketRequestDataRelationships + from datadog_api_client.v2.model.service_now_tickets_data_type import ServiceNowTicketsDataType + return { + "attributes": (AttachServiceNowTicketRequestDataAttributes,), + "relationships": (AttachServiceNowTicketRequestDataRelationships,), + "type": (ServiceNowTicketsDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: AttachServiceNowTicketRequestDataAttributes, relationships: AttachServiceNowTicketRequestDataRelationships, type: ServiceNowTicketsDataType, **kwargs): + """ + Data of the ServiceNow ticket to attach security findings to. + + :param attributes: Attributes of the ServiceNow ticket to attach security findings to. + :type attributes: AttachServiceNowTicketRequestDataAttributes + + :param relationships: Relationships of the ServiceNow ticket to attach security findings to. + :type relationships: AttachServiceNowTicketRequestDataRelationships + + :param type: ServiceNow tickets resource type. + :type type: ServiceNowTicketsDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/attach_service_now_ticket_request_data_attributes.py b/datadog_api_client/v2/model/attach_service_now_ticket_request_data_attributes.py new file mode 100644 index 0000000000..fb71310f1e --- /dev/null +++ b/datadog_api_client/v2/model/attach_service_now_ticket_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AttachServiceNowTicketRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "servicenow_ticket_url": (str,), + } + attribute_map = { + "servicenow_ticket_url": "servicenow_ticket_url", + } + + def __init__(self_, servicenow_ticket_url: str, **kwargs): + """ + Attributes of the ServiceNow ticket to attach security findings to. + + :param servicenow_ticket_url: URL of the ServiceNow incident to attach security findings to. Must be a service-now.com URL pointing to an incident record. + :type servicenow_ticket_url: str + """ + super().__init__(kwargs) + + + self_.servicenow_ticket_url = servicenow_ticket_url diff --git a/datadog_api_client/v2/model/attach_service_now_ticket_request_data_relationships.py b/datadog_api_client/v2/model/attach_service_now_ticket_request_data_relationships.py new file mode 100644 index 0000000000..d045e913ac --- /dev/null +++ b/datadog_api_client/v2/model/attach_service_now_ticket_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + +class AttachServiceNowTicketRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + return { + "findings": (Findings,), + "project": (CaseManagementProject,), + } + attribute_map = { + "findings": "findings", + "project": "project", + } + + def __init__(self_, findings: Findings, project: CaseManagementProject, **kwargs): + """ + Relationships of the ServiceNow ticket to attach security findings to. + + :param findings: A list of security findings. + :type findings: Findings + + :param project: Case management project. + :type project: CaseManagementProject + """ + super().__init__(kwargs) + + + self_.findings = findings + self_.project = project diff --git a/datadog_api_client/v2/model/attachment.py b/datadog_api_client/v2/model/attachment.py new file mode 100644 index 0000000000..869ca6b1fc --- /dev/null +++ b/datadog_api_client/v2/model/attachment.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attachment_data import AttachmentData + from datadog_api_client.v2.model.attachment_included import AttachmentIncluded + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class Attachment(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attachment_data import AttachmentData + from datadog_api_client.v2.model.attachment_included import AttachmentIncluded + return { + "data": (AttachmentData,), + "included": ([AttachmentIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[AttachmentData, UnsetType]=unset, included: Union[List[Union[AttachmentIncluded, IncidentUserData]], UnsetType]=unset, **kwargs): + """ + An attachment response containing the attachment data and related objects. + + :param data: Attachment data from a response. + :type data: AttachmentData, optional + + :param included: A list of related objects included in the response. + :type included: [AttachmentIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/attachment_array.py b/datadog_api_client/v2/model/attachment_array.py new file mode 100644 index 0000000000..76e00502a9 --- /dev/null +++ b/datadog_api_client/v2/model/attachment_array.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attachment_data import AttachmentData + from datadog_api_client.v2.model.attachment_included import AttachmentIncluded + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class AttachmentArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attachment_data import AttachmentData + from datadog_api_client.v2.model.attachment_included import AttachmentIncluded + return { + "data": ([AttachmentData],), + "included": ([AttachmentIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[AttachmentData], included: Union[List[Union[AttachmentIncluded, IncidentUserData]], UnsetType]=unset, **kwargs): + """ + A list of incident attachments. + + :param data: An array of attachment data objects. + :type data: [AttachmentData] + + :param included: A list of related objects included in the response. + :type included: [AttachmentIncluded], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/attachment_data.py b/datadog_api_client/v2/model/attachment_data.py new file mode 100644 index 0000000000..dd3f005f11 --- /dev/null +++ b/datadog_api_client/v2/model/attachment_data.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attachment_data_attributes import AttachmentDataAttributes + from datadog_api_client.v2.model.attachment_data_relationships import AttachmentDataRelationships + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + +class AttachmentData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attachment_data_attributes import AttachmentDataAttributes + from datadog_api_client.v2.model.attachment_data_relationships import AttachmentDataRelationships + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + return { + "attributes": (AttachmentDataAttributes,), + "id": (str,), + "relationships": (AttachmentDataRelationships,), + "type": (IncidentAttachmentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: AttachmentDataAttributes, id: str, relationships: AttachmentDataRelationships, type: IncidentAttachmentType, **kwargs): + """ + Attachment data from a response. + + :param attributes: The attachment's attributes. + :type attributes: AttachmentDataAttributes + + :param id: The unique identifier of the attachment. + :type id: str + + :param relationships: The attachment's resource relationships. + :type relationships: AttachmentDataRelationships + + :param type: The incident attachment resource type. + :type type: IncidentAttachmentType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/attachment_data_attributes.py b/datadog_api_client/v2/model/attachment_data_attributes.py new file mode 100644 index 0000000000..97d3d0e20a --- /dev/null +++ b/datadog_api_client/v2/model/attachment_data_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.attachment_data_attributes_attachment import AttachmentDataAttributesAttachment + from datadog_api_client.v2.model.attachment_data_attributes_attachment_type import AttachmentDataAttributesAttachmentType + +class AttachmentDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.attachment_data_attributes_attachment import AttachmentDataAttributesAttachment + from datadog_api_client.v2.model.attachment_data_attributes_attachment_type import AttachmentDataAttributesAttachmentType + return { + "attachment": (AttachmentDataAttributesAttachment,), + "attachment_type": (AttachmentDataAttributesAttachmentType,), + "modified": (datetime,), + } + attribute_map = { + "attachment": "attachment", + "attachment_type": "attachment_type", + "modified": "modified", + } + + def __init__(self_, attachment: Union[AttachmentDataAttributesAttachment, UnsetType]=unset, attachment_type: Union[AttachmentDataAttributesAttachmentType, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, **kwargs): + """ + The attachment's attributes. + + :param attachment: The attachment object. + :type attachment: AttachmentDataAttributesAttachment, optional + + :param attachment_type: The type of the attachment. + :type attachment_type: AttachmentDataAttributesAttachmentType, optional + + :param modified: Timestamp when the attachment was last modified. + :type modified: datetime, optional + """ + if attachment is not unset: + kwargs["attachment"] = attachment + if attachment_type is not unset: + kwargs["attachment_type"] = attachment_type + if modified is not unset: + kwargs["modified"] = modified + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/attachment_data_attributes_attachment.py b/datadog_api_client/v2/model/attachment_data_attributes_attachment.py new file mode 100644 index 0000000000..fb56007188 --- /dev/null +++ b/datadog_api_client/v2/model/attachment_data_attributes_attachment.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AttachmentDataAttributesAttachment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "document_url": (str,), + "title": (str,), + } + attribute_map = { + "document_url": "documentUrl", + "title": "title", + } + + def __init__(self_, document_url: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + The attachment object. + + :param document_url: The URL of the attachment. + :type document_url: str, optional + + :param title: The title of the attachment. + :type title: str, optional + """ + if document_url is not unset: + kwargs["document_url"] = document_url + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/attachment_data_attributes_attachment_type.py b/datadog_api_client/v2/model/attachment_data_attributes_attachment_type.py new file mode 100644 index 0000000000..b1ea91aa4b --- /dev/null +++ b/datadog_api_client/v2/model/attachment_data_attributes_attachment_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AttachmentDataAttributesAttachmentType(ModelSimple): + """ + The type of the attachment. + + :param value: Must be one of ["postmortem", "link"]. + :type value: str + """ + + allowed_values = { + "postmortem", + "link", + } + POSTMORTEM: ClassVar["AttachmentDataAttributesAttachmentType"] + LINK: ClassVar["AttachmentDataAttributesAttachmentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AttachmentDataAttributesAttachmentType.POSTMORTEM = AttachmentDataAttributesAttachmentType("postmortem") +AttachmentDataAttributesAttachmentType.LINK = AttachmentDataAttributesAttachmentType("link") diff --git a/datadog_api_client/v2/model/attachment_data_relationships.py b/datadog_api_client/v2/model/attachment_data_relationships.py new file mode 100644 index 0000000000..6723a30aeb --- /dev/null +++ b/datadog_api_client/v2/model/attachment_data_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident import RelationshipToIncident + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + +class AttachmentDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident import RelationshipToIncident + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + return { + "incident": (RelationshipToIncident,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "incident": "incident", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, incident: Union[RelationshipToIncident, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + The attachment's resource relationships. + + :param incident: Relationship to incident. + :type incident: RelationshipToIncident, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + """ + if incident is not unset: + kwargs["incident"] = incident + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/attachment_included.py b/datadog_api_client/v2/model/attachment_included.py new file mode 100644 index 0000000000..20ccd62606 --- /dev/null +++ b/datadog_api_client/v2/model/attachment_included.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AttachmentIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Objects related to an attachment. + + :param attributes: Attributes of user object returned by the API. + :type attributes: IncidentUserAttributes, optional + + :param id: ID of the user. + :type id: str, 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.incident_user_data import IncidentUserData + return { + "oneOf": [ + IncidentUserData, + ], + } diff --git a/datadog_api_client/v2/model/audit_logs_event.py b/datadog_api_client/v2/model/audit_logs_event.py new file mode 100644 index 0000000000..b1577e2fc8 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_event.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.audit_logs_event_attributes import AuditLogsEventAttributes + from datadog_api_client.v2.model.audit_logs_event_type import AuditLogsEventType + +class AuditLogsEvent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.audit_logs_event_attributes import AuditLogsEventAttributes + from datadog_api_client.v2.model.audit_logs_event_type import AuditLogsEventType + return { + "attributes": (AuditLogsEventAttributes,), + "id": (str,), + "type": (AuditLogsEventType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AuditLogsEventAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AuditLogsEventType, UnsetType]=unset, **kwargs): + """ + Object description of an Audit Logs event after it is processed and stored by Datadog. + + :param attributes: JSON object containing all event attributes and their associated values. + :type attributes: AuditLogsEventAttributes, optional + + :param id: Unique ID of the event. + :type id: str, optional + + :param type: Type of the event. + :type type: AuditLogsEventType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_event_attributes.py b/datadog_api_client/v2/model/audit_logs_event_attributes.py new file mode 100644 index 0000000000..b7234d3648 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_event_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuditLogsEventAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "message": (str,), + "service": (str,), + "tags": ([str],), + "timestamp": (datetime,), + } + attribute_map = { + "attributes": "attributes", + "message": "message", + "service": "service", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, message: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[datetime, UnsetType]=unset, **kwargs): + """ + JSON object containing all event attributes and their associated values. + + :param attributes: JSON object of attributes from Audit Logs events. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param message: Message of the event. + :type message: str, optional + + :param service: Name of the application or service generating Audit Logs events. + This name is used to correlate Audit Logs to APM, so make sure you specify the same + value when you use both products. + :type service: str, optional + + :param tags: Array of tags associated with your event. + :type tags: [str], optional + + :param timestamp: Timestamp of your event. + :type timestamp: datetime, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if message is not unset: + kwargs["message"] = message + if service is not unset: + kwargs["service"] = service + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_event_type.py b/datadog_api_client/v2/model/audit_logs_event_type.py new file mode 100644 index 0000000000..78c9146a09 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_event_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AuditLogsEventType(ModelSimple): + """ + Type of the event. + + :param value: If omitted defaults to "audit". Must be one of ["audit"]. + :type value: str + """ + + allowed_values = { + "audit", + } + Audit: ClassVar["AuditLogsEventType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AuditLogsEventType.Audit = AuditLogsEventType("audit") diff --git a/datadog_api_client/v2/model/audit_logs_events_response.py b/datadog_api_client/v2/model/audit_logs_events_response.py new file mode 100644 index 0000000000..3f364ecf04 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_events_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.audit_logs_event import AuditLogsEvent + from datadog_api_client.v2.model.audit_logs_response_links import AuditLogsResponseLinks + from datadog_api_client.v2.model.audit_logs_response_metadata import AuditLogsResponseMetadata + +class AuditLogsEventsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.audit_logs_event import AuditLogsEvent + from datadog_api_client.v2.model.audit_logs_response_links import AuditLogsResponseLinks + from datadog_api_client.v2.model.audit_logs_response_metadata import AuditLogsResponseMetadata + return { + "data": ([AuditLogsEvent],), + "links": (AuditLogsResponseLinks,), + "meta": (AuditLogsResponseMetadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[AuditLogsEvent], UnsetType]=unset, links: Union[AuditLogsResponseLinks, UnsetType]=unset, meta: Union[AuditLogsResponseMetadata, UnsetType]=unset, **kwargs): + """ + Response object with all events matching the request and pagination information. + + :param data: Array of events matching the request. + :type data: [AuditLogsEvent], optional + + :param links: Links attributes. + :type links: AuditLogsResponseLinks, optional + + :param meta: The metadata associated with a request. + :type meta: AuditLogsResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_query_filter.py b/datadog_api_client/v2/model/audit_logs_query_filter.py new file mode 100644 index 0000000000..3cc9ada96d --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_query_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuditLogsQueryFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (str,), + "query": (str,), + "to": (str,), + } + attribute_map = { + "_from": "from", + "query": "query", + "to": "to", + } + + def __init__(self_, _from: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, to: Union[str, UnsetType]=unset, **kwargs): + """ + Search and filter query settings. + + :param _from: Minimum time for the requested events. Supports date, math, and regular timestamps (in milliseconds). + :type _from: str, optional + + :param query: Search query following the Audit Logs search syntax. + :type query: str, optional + + :param to: Maximum time for the requested events. Supports date, math, and regular timestamps (in milliseconds). + :type to: str, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if query is not unset: + kwargs["query"] = query + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_query_options.py b/datadog_api_client/v2/model/audit_logs_query_options.py new file mode 100644 index 0000000000..8726802f62 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_query_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuditLogsQueryOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time_offset": (int,), + "timezone": (str,), + } + attribute_map = { + "time_offset": "time_offset", + "timezone": "timezone", + } + + def __init__(self_, time_offset: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Global query options that are used during the query. + Note: Specify either timezone or time offset, not both. Otherwise, the query fails. + + :param time_offset: Time offset (in seconds) to apply to the query. + :type time_offset: int, optional + + :param timezone: The timezone can be specified as GMT, UTC, an offset from UTC (like UTC+1), or as a Timezone Database identifier (like America/New_York). + :type timezone: str, optional + """ + if time_offset is not unset: + kwargs["time_offset"] = time_offset + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_query_page_options.py b/datadog_api_client/v2/model/audit_logs_query_page_options.py new file mode 100644 index 0000000000..ee55535153 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_query_page_options.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuditLogsQueryPageOptions(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Paging attributes for listing events. + + :param cursor: List following results with a cursor provided in the previous query. + :type cursor: str, optional + + :param limit: Maximum number of events in the response. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_response_links.py b/datadog_api_client/v2/model/audit_logs_response_links.py new file mode 100644 index 0000000000..47dce901ac --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuditLogsResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param next: Link for the next set of results. Note that the request can also be made using the + POST endpoint. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_response_metadata.py b/datadog_api_client/v2/model/audit_logs_response_metadata.py new file mode 100644 index 0000000000..be94b58d57 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.audit_logs_response_page import AuditLogsResponsePage + from datadog_api_client.v2.model.audit_logs_response_status import AuditLogsResponseStatus + from datadog_api_client.v2.model.audit_logs_warning import AuditLogsWarning + +class AuditLogsResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.audit_logs_response_page import AuditLogsResponsePage + from datadog_api_client.v2.model.audit_logs_response_status import AuditLogsResponseStatus + from datadog_api_client.v2.model.audit_logs_warning import AuditLogsWarning + return { + "elapsed": (int,), + "page": (AuditLogsResponsePage,), + "request_id": (str,), + "status": (AuditLogsResponseStatus,), + "warnings": ([AuditLogsWarning],), + } + attribute_map = { + "elapsed": "elapsed", + "page": "page", + "request_id": "request_id", + "status": "status", + "warnings": "warnings", + } + + def __init__(self_, elapsed: Union[int, UnsetType]=unset, page: Union[AuditLogsResponsePage, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, status: Union[AuditLogsResponseStatus, UnsetType]=unset, warnings: Union[List[AuditLogsWarning], UnsetType]=unset, **kwargs): + """ + The metadata associated with a request. + + :param elapsed: Time elapsed in milliseconds. + :type elapsed: int, optional + + :param page: Paging attributes. + :type page: AuditLogsResponsePage, optional + + :param request_id: The identifier of the request. + :type request_id: str, optional + + :param status: The status of the response. + :type status: AuditLogsResponseStatus, optional + + :param warnings: A list of warnings (non-fatal errors) encountered. Partial results may return if + warnings are present in the response. + :type warnings: [AuditLogsWarning], optional + """ + if elapsed is not unset: + kwargs["elapsed"] = elapsed + if page is not unset: + kwargs["page"] = page + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_response_page.py b/datadog_api_client/v2/model/audit_logs_response_page.py new file mode 100644 index 0000000000..a4c5414397 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_response_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuditLogsResponsePage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str,), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param after: The cursor to use to get the next results, if any. To make the next request, use the same parameters with the addition of ``page[cursor]``. + :type after: str, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_response_status.py b/datadog_api_client/v2/model/audit_logs_response_status.py new file mode 100644 index 0000000000..a5f5bc70c2 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_response_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AuditLogsResponseStatus(ModelSimple): + """ + The status of the response. + + :param value: Must be one of ["done", "timeout"]. + :type value: str + """ + + allowed_values = { + "done", + "timeout", + } + DONE: ClassVar["AuditLogsResponseStatus"] + TIMEOUT: ClassVar["AuditLogsResponseStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AuditLogsResponseStatus.DONE = AuditLogsResponseStatus("done") +AuditLogsResponseStatus.TIMEOUT = AuditLogsResponseStatus("timeout") diff --git a/datadog_api_client/v2/model/audit_logs_search_events_request.py b/datadog_api_client/v2/model/audit_logs_search_events_request.py new file mode 100644 index 0000000000..0d094eded7 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_search_events_request.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.audit_logs_query_filter import AuditLogsQueryFilter + from datadog_api_client.v2.model.audit_logs_query_options import AuditLogsQueryOptions + from datadog_api_client.v2.model.audit_logs_query_page_options import AuditLogsQueryPageOptions + from datadog_api_client.v2.model.audit_logs_sort import AuditLogsSort + +class AuditLogsSearchEventsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.audit_logs_query_filter import AuditLogsQueryFilter + from datadog_api_client.v2.model.audit_logs_query_options import AuditLogsQueryOptions + from datadog_api_client.v2.model.audit_logs_query_page_options import AuditLogsQueryPageOptions + from datadog_api_client.v2.model.audit_logs_sort import AuditLogsSort + return { + "filter": (AuditLogsQueryFilter,), + "options": (AuditLogsQueryOptions,), + "page": (AuditLogsQueryPageOptions,), + "sort": (AuditLogsSort,), + } + attribute_map = { + "filter": "filter", + "options": "options", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[AuditLogsQueryFilter, UnsetType]=unset, options: Union[AuditLogsQueryOptions, UnsetType]=unset, page: Union[AuditLogsQueryPageOptions, UnsetType]=unset, sort: Union[AuditLogsSort, UnsetType]=unset, **kwargs): + """ + The request for a Audit Logs events list. + + :param filter: Search and filter query settings. + :type filter: AuditLogsQueryFilter, optional + + :param options: Global query options that are used during the query. + Note: Specify either timezone or time offset, not both. Otherwise, the query fails. + :type options: AuditLogsQueryOptions, optional + + :param page: Paging attributes for listing events. + :type page: AuditLogsQueryPageOptions, optional + + :param sort: Sort parameters when querying events. + :type sort: AuditLogsSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/audit_logs_sort.py b/datadog_api_client/v2/model/audit_logs_sort.py new file mode 100644 index 0000000000..560cc3f751 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AuditLogsSort(ModelSimple): + """ + Sort parameters when querying events. + + :param value: Must be one of ["timestamp", "-timestamp"]. + :type value: str + """ + + allowed_values = { + "timestamp", + "-timestamp", + } + TIMESTAMP_ASCENDING: ClassVar["AuditLogsSort"] + TIMESTAMP_DESCENDING: ClassVar["AuditLogsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AuditLogsSort.TIMESTAMP_ASCENDING = AuditLogsSort("timestamp") +AuditLogsSort.TIMESTAMP_DESCENDING = AuditLogsSort("-timestamp") diff --git a/datadog_api_client/v2/model/audit_logs_warning.py b/datadog_api_client/v2/model/audit_logs_warning.py new file mode 100644 index 0000000000..2f150477c1 --- /dev/null +++ b/datadog_api_client/v2/model/audit_logs_warning.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuditLogsWarning(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "detail": (str,), + "title": (str,), + } + attribute_map = { + "code": "code", + "detail": "detail", + "title": "title", + } + + def __init__(self_, code: Union[str, UnsetType]=unset, detail: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Warning message indicating something that went wrong with the query. + + :param code: Unique code for this type of warning. + :type code: str, optional + + :param detail: Detailed explanation of this specific warning. + :type detail: str, optional + + :param title: Short human-readable summary of the warning. + :type title: str, optional + """ + if code is not unset: + kwargs["code"] = code + if detail is not unset: + kwargs["detail"] = detail + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/authn_mapping.py b/datadog_api_client/v2/model/authn_mapping.py new file mode 100644 index 0000000000..6a6cb9972e --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.authn_mapping_attributes import AuthNMappingAttributes + from datadog_api_client.v2.model.authn_mapping_relationships import AuthNMappingRelationships + from datadog_api_client.v2.model.authn_mappings_type import AuthNMappingsType + +class AuthNMapping(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.authn_mapping_attributes import AuthNMappingAttributes + from datadog_api_client.v2.model.authn_mapping_relationships import AuthNMappingRelationships + from datadog_api_client.v2.model.authn_mappings_type import AuthNMappingsType + return { + "attributes": (AuthNMappingAttributes,), + "id": (str,), + "relationships": (AuthNMappingRelationships,), + "type": (AuthNMappingsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: AuthNMappingsType, attributes: Union[AuthNMappingAttributes, UnsetType]=unset, relationships: Union[AuthNMappingRelationships, UnsetType]=unset, **kwargs): + """ + The AuthN Mapping object returned by API. + + :param attributes: Attributes of AuthN Mapping. + :type attributes: AuthNMappingAttributes, optional + + :param id: ID of the AuthN Mapping. + :type id: str + + :param relationships: All relationships associated with AuthN Mapping. + :type relationships: AuthNMappingRelationships, optional + + :param type: AuthN Mappings resource type. + :type type: AuthNMappingsType + """ + 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/datadog_api_client/v2/model/authn_mapping_attributes.py b/datadog_api_client/v2/model/authn_mapping_attributes.py new file mode 100644 index 0000000000..5adbdcb361 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuthNMappingAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attribute_key": (str,), + "attribute_value": (str,), + "created_at": (datetime,), + "modified_at": (datetime,), + "saml_assertion_attribute_id": (str,), + } + attribute_map = { + "attribute_key": "attribute_key", + "attribute_value": "attribute_value", + "created_at": "created_at", + "modified_at": "modified_at", + "saml_assertion_attribute_id": "saml_assertion_attribute_id", + } + read_only_vars = { + "created_at", + "modified_at", + } + + def __init__(self_, attribute_key: Union[str, UnsetType]=unset, attribute_value: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, saml_assertion_attribute_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of AuthN Mapping. + + :param attribute_key: Key portion of a key/value pair of the attribute sent from the Identity Provider. + :type attribute_key: str, optional + + :param attribute_value: Value portion of a key/value pair of the attribute sent from the Identity Provider. + :type attribute_value: str, optional + + :param created_at: Creation time of the AuthN Mapping. + :type created_at: datetime, optional + + :param modified_at: Time of last AuthN Mapping modification. + :type modified_at: datetime, optional + + :param saml_assertion_attribute_id: The ID of the SAML assertion attribute. + :type saml_assertion_attribute_id: str, optional + """ + if attribute_key is not unset: + kwargs["attribute_key"] = attribute_key + if attribute_value is not unset: + kwargs["attribute_value"] = attribute_value + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if saml_assertion_attribute_id is not unset: + kwargs["saml_assertion_attribute_id"] = saml_assertion_attribute_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/authn_mapping_create_attributes.py b/datadog_api_client/v2/model/authn_mapping_create_attributes.py new file mode 100644 index 0000000000..78c1df2a88 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_create_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuthNMappingCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attribute_key": (str,), + "attribute_value": (str,), + } + attribute_map = { + "attribute_key": "attribute_key", + "attribute_value": "attribute_value", + } + + def __init__(self_, attribute_key: Union[str, UnsetType]=unset, attribute_value: Union[str, UnsetType]=unset, **kwargs): + """ + Key/Value pair of attributes used for create request. + + :param attribute_key: Key portion of a key/value pair of the attribute sent from the Identity Provider. + :type attribute_key: str, optional + + :param attribute_value: Value portion of a key/value pair of the attribute sent from the Identity Provider. + :type attribute_value: str, optional + """ + if attribute_key is not unset: + kwargs["attribute_key"] = attribute_key + if attribute_value is not unset: + kwargs["attribute_value"] = attribute_value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/authn_mapping_create_data.py b/datadog_api_client/v2/model/authn_mapping_create_data.py new file mode 100644 index 0000000000..eae37a3ec8 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_create_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.authn_mapping_create_attributes import AuthNMappingCreateAttributes + from datadog_api_client.v2.model.authn_mapping_create_relationships import AuthNMappingCreateRelationships + from datadog_api_client.v2.model.authn_mappings_type import AuthNMappingsType + from datadog_api_client.v2.model.authn_mapping_relationship_to_role import AuthNMappingRelationshipToRole + from datadog_api_client.v2.model.authn_mapping_relationship_to_team import AuthNMappingRelationshipToTeam + +class AuthNMappingCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.authn_mapping_create_attributes import AuthNMappingCreateAttributes + from datadog_api_client.v2.model.authn_mapping_create_relationships import AuthNMappingCreateRelationships + from datadog_api_client.v2.model.authn_mappings_type import AuthNMappingsType + return { + "attributes": (AuthNMappingCreateAttributes,), + "relationships": (AuthNMappingCreateRelationships,), + "type": (AuthNMappingsType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: AuthNMappingsType, attributes: Union[AuthNMappingCreateAttributes, UnsetType]=unset, relationships: Union[AuthNMappingCreateRelationships, AuthNMappingRelationshipToRole, AuthNMappingRelationshipToTeam, UnsetType]=unset, **kwargs): + """ + Data for creating an AuthN Mapping. + + :param attributes: Key/Value pair of attributes used for create request. + :type attributes: AuthNMappingCreateAttributes, optional + + :param relationships: Relationship of AuthN Mapping create object to a Role or Team. + :type relationships: AuthNMappingCreateRelationships, optional + + :param type: AuthN Mappings resource type. + :type type: AuthNMappingsType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/authn_mapping_create_relationships.py b/datadog_api_client/v2/model/authn_mapping_create_relationships.py new file mode 100644 index 0000000000..2b91746136 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_create_relationships.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuthNMappingCreateRelationships(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Relationship of AuthN Mapping create object to a Role or Team. + + :param role: Relationship to role. + :type role: RelationshipToRole + + :param team: Relationship to team. + :type team: RelationshipToTeam + """ + 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.authn_mapping_relationship_to_role import AuthNMappingRelationshipToRole + from datadog_api_client.v2.model.authn_mapping_relationship_to_team import AuthNMappingRelationshipToTeam + return { + "oneOf": [ + AuthNMappingRelationshipToRole, + AuthNMappingRelationshipToTeam, + ], + } diff --git a/datadog_api_client/v2/model/authn_mapping_create_request.py b/datadog_api_client/v2/model/authn_mapping_create_request.py new file mode 100644 index 0000000000..d27c2a544c --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_create_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.authn_mapping_create_data import AuthNMappingCreateData + from datadog_api_client.v2.model.authn_mapping_relationship_to_role import AuthNMappingRelationshipToRole + from datadog_api_client.v2.model.authn_mapping_relationship_to_team import AuthNMappingRelationshipToTeam + +class AuthNMappingCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.authn_mapping_create_data import AuthNMappingCreateData + return { + "data": (AuthNMappingCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AuthNMappingCreateData, **kwargs): + """ + Request for creating an AuthN Mapping. + + :param data: Data for creating an AuthN Mapping. + :type data: AuthNMappingCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/authn_mapping_included.py b/datadog_api_client/v2/model/authn_mapping_included.py new file mode 100644 index 0000000000..f5f068fcbd --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_included.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuthNMappingIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Included data in the AuthN Mapping response. + + :param attributes: Key/Value pair of attributes used in SAML assertion attributes. + :type attributes: SAMLAssertionAttributeAttributes, optional + + :param id: The ID of the SAML assertion attribute. + :type id: str + + :param type: SAML assertion attributes resource type. + :type type: SAMLAssertionAttributesType + + :param relationships: Relationships of the role object returned by the API. + :type relationships: RoleResponseRelationships, 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.saml_assertion_attribute import SAMLAssertionAttribute + from datadog_api_client.v2.model.role import Role + from datadog_api_client.v2.model.authn_mapping_team import AuthNMappingTeam + return { + "oneOf": [ + SAMLAssertionAttribute, + Role, + AuthNMappingTeam, + ], + } diff --git a/datadog_api_client/v2/model/authn_mapping_relationship_to_role.py b/datadog_api_client/v2/model/authn_mapping_relationship_to_role.py new file mode 100644 index 0000000000..7a21067d0a --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_relationship_to_role.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_role import RelationshipToRole + +class AuthNMappingRelationshipToRole(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_role import RelationshipToRole + return { + "role": (RelationshipToRole,), + } + attribute_map = { + "role": "role", + } + + def __init__(self_, role: RelationshipToRole, **kwargs): + """ + Relationship of AuthN Mapping to a Role. + + :param role: Relationship to role. + :type role: RelationshipToRole + """ + super().__init__(kwargs) + + + self_.role = role diff --git a/datadog_api_client/v2/model/authn_mapping_relationship_to_team.py b/datadog_api_client/v2/model/authn_mapping_relationship_to_team.py new file mode 100644 index 0000000000..b4e33d51a4 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_relationship_to_team.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_team import RelationshipToTeam + +class AuthNMappingRelationshipToTeam(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_team import RelationshipToTeam + return { + "team": (RelationshipToTeam,), + } + attribute_map = { + "team": "team", + } + + def __init__(self_, team: RelationshipToTeam, **kwargs): + """ + Relationship of AuthN Mapping to a Team. + + :param team: Relationship to team. + :type team: RelationshipToTeam + """ + super().__init__(kwargs) + + + self_.team = team diff --git a/datadog_api_client/v2/model/authn_mapping_relationships.py b/datadog_api_client/v2/model/authn_mapping_relationships.py new file mode 100644 index 0000000000..8ccaeed2b4 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_relationships.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_role import RelationshipToRole + from datadog_api_client.v2.model.relationship_to_saml_assertion_attribute import RelationshipToSAMLAssertionAttribute + from datadog_api_client.v2.model.relationship_to_team import RelationshipToTeam + +class AuthNMappingRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_role import RelationshipToRole + from datadog_api_client.v2.model.relationship_to_saml_assertion_attribute import RelationshipToSAMLAssertionAttribute + from datadog_api_client.v2.model.relationship_to_team import RelationshipToTeam + return { + "role": (RelationshipToRole,), + "saml_assertion_attribute": (RelationshipToSAMLAssertionAttribute,), + "team": (RelationshipToTeam,), + } + attribute_map = { + "role": "role", + "saml_assertion_attribute": "saml_assertion_attribute", + "team": "team", + } + + def __init__(self_, role: Union[RelationshipToRole, UnsetType]=unset, saml_assertion_attribute: Union[RelationshipToSAMLAssertionAttribute, UnsetType]=unset, team: Union[RelationshipToTeam, UnsetType]=unset, **kwargs): + """ + All relationships associated with AuthN Mapping. + + :param role: Relationship to role. + :type role: RelationshipToRole, optional + + :param saml_assertion_attribute: AuthN Mapping relationship to SAML Assertion Attribute. + :type saml_assertion_attribute: RelationshipToSAMLAssertionAttribute, optional + + :param team: Relationship to team. + :type team: RelationshipToTeam, optional + """ + if role is not unset: + kwargs["role"] = role + if saml_assertion_attribute is not unset: + kwargs["saml_assertion_attribute"] = saml_assertion_attribute + if team is not unset: + kwargs["team"] = team + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/authn_mapping_resource_type.py b/datadog_api_client/v2/model/authn_mapping_resource_type.py new file mode 100644 index 0000000000..dd8f01e2c4 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_resource_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AuthNMappingResourceType(ModelSimple): + """ + The type of resource being mapped to. + + :param value: Must be one of ["role", "team"]. + :type value: str + """ + + allowed_values = { + "role", + "team", + } + ROLE: ClassVar["AuthNMappingResourceType"] + TEAM: ClassVar["AuthNMappingResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AuthNMappingResourceType.ROLE = AuthNMappingResourceType("role") +AuthNMappingResourceType.TEAM = AuthNMappingResourceType("team") diff --git a/datadog_api_client/v2/model/authn_mapping_response.py b/datadog_api_client/v2/model/authn_mapping_response.py new file mode 100644 index 0000000000..73fb98a640 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_response.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.authn_mapping import AuthNMapping + from datadog_api_client.v2.model.authn_mapping_included import AuthNMappingIncluded + from datadog_api_client.v2.model.saml_assertion_attribute import SAMLAssertionAttribute + from datadog_api_client.v2.model.role import Role + from datadog_api_client.v2.model.authn_mapping_team import AuthNMappingTeam + +class AuthNMappingResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.authn_mapping import AuthNMapping + from datadog_api_client.v2.model.authn_mapping_included import AuthNMappingIncluded + return { + "data": (AuthNMapping,), + "included": ([AuthNMappingIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[AuthNMapping, UnsetType]=unset, included: Union[List[Union[AuthNMappingIncluded, SAMLAssertionAttribute, Role, AuthNMappingTeam]], UnsetType]=unset, **kwargs): + """ + AuthN Mapping response from the API. + + :param data: The AuthN Mapping object returned by API. + :type data: AuthNMapping, optional + + :param included: Included data in the AuthN Mapping response. + :type included: [AuthNMappingIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/authn_mapping_team.py b/datadog_api_client/v2/model/authn_mapping_team.py new file mode 100644 index 0000000000..79d0f2b0ba --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_team.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.authn_mapping_team_attributes import AuthNMappingTeamAttributes + from datadog_api_client.v2.model.team_type import TeamType + +class AuthNMappingTeam(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.authn_mapping_team_attributes import AuthNMappingTeamAttributes + from datadog_api_client.v2.model.team_type import TeamType + return { + "attributes": (AuthNMappingTeamAttributes,), + "id": (str,), + "type": (TeamType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AuthNMappingTeamAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[TeamType, UnsetType]=unset, **kwargs): + """ + Team. + + :param attributes: Team attributes. + :type attributes: AuthNMappingTeamAttributes, optional + + :param id: The ID of the Team. + :type id: str, optional + + :param type: Team type + :type type: TeamType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/authn_mapping_team_attributes.py b/datadog_api_client/v2/model/authn_mapping_team_attributes.py new file mode 100644 index 0000000000..372b9c6267 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_team_attributes.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuthNMappingTeamAttributes(ModelNormal): + validations = { + "handle": { + "max_length": 195, + }, + "link_count": { + "inclusive_maximum": 2147483647, + }, + "name": { + "max_length": 200, + }, + "summary": { + "max_length": 120, + }, + "user_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "avatar": (str, none_type), + "banner": (int, none_type), + "handle": (str,), + "link_count": (int,), + "name": (str,), + "summary": (str, none_type), + "user_count": (int,), + } + attribute_map = { + "avatar": "avatar", + "banner": "banner", + "handle": "handle", + "link_count": "link_count", + "name": "name", + "summary": "summary", + "user_count": "user_count", + } + read_only_vars = { + "link_count", + "user_count", + } + + def __init__(self_, avatar: Union[str, none_type, UnsetType]=unset, banner: Union[int, none_type, UnsetType]=unset, handle: Union[str, UnsetType]=unset, link_count: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, summary: Union[str, none_type, UnsetType]=unset, user_count: Union[int, UnsetType]=unset, **kwargs): + """ + Team attributes. + + :param avatar: Unicode representation of the avatar for the team, limited to a single grapheme + :type avatar: str, none_type, optional + + :param banner: Banner selection for the team + :type banner: int, none_type, optional + + :param handle: The team's identifier + :type handle: str, optional + + :param link_count: The number of links belonging to the team + :type link_count: int, optional + + :param name: The name of the team + :type name: str, optional + + :param summary: A brief summary of the team, derived from the ``description`` + :type summary: str, none_type, optional + + :param user_count: The number of users belonging to the team + :type user_count: int, optional + """ + if avatar is not unset: + kwargs["avatar"] = avatar + if banner is not unset: + kwargs["banner"] = banner + if handle is not unset: + kwargs["handle"] = handle + if link_count is not unset: + kwargs["link_count"] = link_count + if name is not unset: + kwargs["name"] = name + if summary is not unset: + kwargs["summary"] = summary + if user_count is not unset: + kwargs["user_count"] = user_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/authn_mapping_update_attributes.py b/datadog_api_client/v2/model/authn_mapping_update_attributes.py new file mode 100644 index 0000000000..c8dfefe5c6 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_update_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuthNMappingUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attribute_key": (str,), + "attribute_value": (str,), + } + attribute_map = { + "attribute_key": "attribute_key", + "attribute_value": "attribute_value", + } + + def __init__(self_, attribute_key: Union[str, UnsetType]=unset, attribute_value: Union[str, UnsetType]=unset, **kwargs): + """ + Key/Value pair of attributes used for update request. + + :param attribute_key: Key portion of a key/value pair of the attribute sent from the Identity Provider. + :type attribute_key: str, optional + + :param attribute_value: Value portion of a key/value pair of the attribute sent from the Identity Provider. + :type attribute_value: str, optional + """ + if attribute_key is not unset: + kwargs["attribute_key"] = attribute_key + if attribute_value is not unset: + kwargs["attribute_value"] = attribute_value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/authn_mapping_update_data.py b/datadog_api_client/v2/model/authn_mapping_update_data.py new file mode 100644 index 0000000000..24bba9ef5f --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.authn_mapping_update_attributes import AuthNMappingUpdateAttributes + from datadog_api_client.v2.model.authn_mapping_update_relationships import AuthNMappingUpdateRelationships + from datadog_api_client.v2.model.authn_mappings_type import AuthNMappingsType + from datadog_api_client.v2.model.authn_mapping_relationship_to_role import AuthNMappingRelationshipToRole + from datadog_api_client.v2.model.authn_mapping_relationship_to_team import AuthNMappingRelationshipToTeam + +class AuthNMappingUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.authn_mapping_update_attributes import AuthNMappingUpdateAttributes + from datadog_api_client.v2.model.authn_mapping_update_relationships import AuthNMappingUpdateRelationships + from datadog_api_client.v2.model.authn_mappings_type import AuthNMappingsType + return { + "attributes": (AuthNMappingUpdateAttributes,), + "id": (str,), + "relationships": (AuthNMappingUpdateRelationships,), + "type": (AuthNMappingsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: AuthNMappingsType, attributes: Union[AuthNMappingUpdateAttributes, UnsetType]=unset, relationships: Union[AuthNMappingUpdateRelationships, AuthNMappingRelationshipToRole, AuthNMappingRelationshipToTeam, UnsetType]=unset, **kwargs): + """ + Data for updating an AuthN Mapping. + + :param attributes: Key/Value pair of attributes used for update request. + :type attributes: AuthNMappingUpdateAttributes, optional + + :param id: ID of the AuthN Mapping. + :type id: str + + :param relationships: Relationship of AuthN Mapping update object to a Role or Team. + :type relationships: AuthNMappingUpdateRelationships, optional + + :param type: AuthN Mappings resource type. + :type type: AuthNMappingsType + """ + 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/datadog_api_client/v2/model/authn_mapping_update_relationships.py b/datadog_api_client/v2/model/authn_mapping_update_relationships.py new file mode 100644 index 0000000000..6cbeae21c2 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_update_relationships.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AuthNMappingUpdateRelationships(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Relationship of AuthN Mapping update object to a Role or Team. + + :param role: Relationship to role. + :type role: RelationshipToRole + + :param team: Relationship to team. + :type team: RelationshipToTeam + """ + 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.authn_mapping_relationship_to_role import AuthNMappingRelationshipToRole + from datadog_api_client.v2.model.authn_mapping_relationship_to_team import AuthNMappingRelationshipToTeam + return { + "oneOf": [ + AuthNMappingRelationshipToRole, + AuthNMappingRelationshipToTeam, + ], + } diff --git a/datadog_api_client/v2/model/authn_mapping_update_request.py b/datadog_api_client/v2/model/authn_mapping_update_request.py new file mode 100644 index 0000000000..3ee9b4fe41 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mapping_update_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.authn_mapping_update_data import AuthNMappingUpdateData + from datadog_api_client.v2.model.authn_mapping_relationship_to_role import AuthNMappingRelationshipToRole + from datadog_api_client.v2.model.authn_mapping_relationship_to_team import AuthNMappingRelationshipToTeam + +class AuthNMappingUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.authn_mapping_update_data import AuthNMappingUpdateData + return { + "data": (AuthNMappingUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AuthNMappingUpdateData, **kwargs): + """ + Request to update an AuthN Mapping. + + :param data: Data for updating an AuthN Mapping. + :type data: AuthNMappingUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/authn_mappings_response.py b/datadog_api_client/v2/model/authn_mappings_response.py new file mode 100644 index 0000000000..8d00d0c05b --- /dev/null +++ b/datadog_api_client/v2/model/authn_mappings_response.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.authn_mapping import AuthNMapping + from datadog_api_client.v2.model.authn_mapping_included import AuthNMappingIncluded + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + from datadog_api_client.v2.model.saml_assertion_attribute import SAMLAssertionAttribute + from datadog_api_client.v2.model.role import Role + from datadog_api_client.v2.model.authn_mapping_team import AuthNMappingTeam + +class AuthNMappingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.authn_mapping import AuthNMapping + from datadog_api_client.v2.model.authn_mapping_included import AuthNMappingIncluded + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + return { + "data": ([AuthNMapping],), + "included": ([AuthNMappingIncluded],), + "meta": (ResponseMetaAttributes,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: Union[List[AuthNMapping], UnsetType]=unset, included: Union[List[Union[AuthNMappingIncluded, SAMLAssertionAttribute, Role, AuthNMappingTeam]], UnsetType]=unset, meta: Union[ResponseMetaAttributes, UnsetType]=unset, **kwargs): + """ + Array of AuthN Mappings response. + + :param data: Array of returned AuthN Mappings. + :type data: [AuthNMapping], optional + + :param included: Included data in the AuthN Mapping response. + :type included: [AuthNMappingIncluded], optional + + :param meta: Object describing meta attributes of response. + :type meta: ResponseMetaAttributes, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/authn_mappings_sort.py b/datadog_api_client/v2/model/authn_mappings_sort.py new file mode 100644 index 0000000000..4660cd0d41 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mappings_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AuthNMappingsSort(ModelSimple): + """ + Sorting options for AuthN Mappings. + + :param value: Must be one of ["created_at", "-created_at", "role_id", "-role_id", "saml_assertion_attribute_id", "-saml_assertion_attribute_id", "role.name", "-role.name", "saml_assertion_attribute.attribute_key", "-saml_assertion_attribute.attribute_key", "saml_assertion_attribute.attribute_value", "-saml_assertion_attribute.attribute_value"]. + :type value: str + """ + + allowed_values = { + "created_at", + "-created_at", + "role_id", + "-role_id", + "saml_assertion_attribute_id", + "-saml_assertion_attribute_id", + "role.name", + "-role.name", + "saml_assertion_attribute.attribute_key", + "-saml_assertion_attribute.attribute_key", + "saml_assertion_attribute.attribute_value", + "-saml_assertion_attribute.attribute_value", + } + CREATED_AT_ASCENDING: ClassVar["AuthNMappingsSort"] + CREATED_AT_DESCENDING: ClassVar["AuthNMappingsSort"] + ROLE_ID_ASCENDING: ClassVar["AuthNMappingsSort"] + ROLE_ID_DESCENDING: ClassVar["AuthNMappingsSort"] + SAML_ASSERTION_ATTRIBUTE_ID_ASCENDING: ClassVar["AuthNMappingsSort"] + SAML_ASSERTION_ATTRIBUTE_ID_DESCENDING: ClassVar["AuthNMappingsSort"] + ROLE_NAME_ASCENDING: ClassVar["AuthNMappingsSort"] + ROLE_NAME_DESCENDING: ClassVar["AuthNMappingsSort"] + SAML_ASSERTION_ATTRIBUTE_KEY_ASCENDING: ClassVar["AuthNMappingsSort"] + SAML_ASSERTION_ATTRIBUTE_KEY_DESCENDING: ClassVar["AuthNMappingsSort"] + SAML_ASSERTION_ATTRIBUTE_VALUE_ASCENDING: ClassVar["AuthNMappingsSort"] + SAML_ASSERTION_ATTRIBUTE_VALUE_DESCENDING: ClassVar["AuthNMappingsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AuthNMappingsSort.CREATED_AT_ASCENDING = AuthNMappingsSort("created_at") +AuthNMappingsSort.CREATED_AT_DESCENDING = AuthNMappingsSort("-created_at") +AuthNMappingsSort.ROLE_ID_ASCENDING = AuthNMappingsSort("role_id") +AuthNMappingsSort.ROLE_ID_DESCENDING = AuthNMappingsSort("-role_id") +AuthNMappingsSort.SAML_ASSERTION_ATTRIBUTE_ID_ASCENDING = AuthNMappingsSort("saml_assertion_attribute_id") +AuthNMappingsSort.SAML_ASSERTION_ATTRIBUTE_ID_DESCENDING = AuthNMappingsSort("-saml_assertion_attribute_id") +AuthNMappingsSort.ROLE_NAME_ASCENDING = AuthNMappingsSort("role.name") +AuthNMappingsSort.ROLE_NAME_DESCENDING = AuthNMappingsSort("-role.name") +AuthNMappingsSort.SAML_ASSERTION_ATTRIBUTE_KEY_ASCENDING = AuthNMappingsSort("saml_assertion_attribute.attribute_key") +AuthNMappingsSort.SAML_ASSERTION_ATTRIBUTE_KEY_DESCENDING = AuthNMappingsSort("-saml_assertion_attribute.attribute_key") +AuthNMappingsSort.SAML_ASSERTION_ATTRIBUTE_VALUE_ASCENDING = AuthNMappingsSort("saml_assertion_attribute.attribute_value") +AuthNMappingsSort.SAML_ASSERTION_ATTRIBUTE_VALUE_DESCENDING = AuthNMappingsSort("-saml_assertion_attribute.attribute_value") diff --git a/datadog_api_client/v2/model/authn_mappings_type.py b/datadog_api_client/v2/model/authn_mappings_type.py new file mode 100644 index 0000000000..c4c0ac9ee8 --- /dev/null +++ b/datadog_api_client/v2/model/authn_mappings_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AuthNMappingsType(ModelSimple): + """ + AuthN Mappings resource type. + + :param value: If omitted defaults to "authn_mappings". Must be one of ["authn_mappings"]. + :type value: str + """ + + allowed_values = { + "authn_mappings", + } + AUTHN_MAPPINGS: ClassVar["AuthNMappingsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AuthNMappingsType.AUTHN_MAPPINGS = AuthNMappingsType("authn_mappings") diff --git a/datadog_api_client/v2/model/auto_close_inactive_cases.py b/datadog_api_client/v2/model/auto_close_inactive_cases.py new file mode 100644 index 0000000000..14cdb68d63 --- /dev/null +++ b/datadog_api_client/v2/model/auto_close_inactive_cases.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AutoCloseInactiveCases(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + "max_inactive_time_in_secs": (int,), + } + attribute_map = { + "enabled": "enabled", + "max_inactive_time_in_secs": "max_inactive_time_in_secs", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, max_inactive_time_in_secs: Union[int, UnsetType]=unset, **kwargs): + """ + Auto-close inactive cases settings. + + :param enabled: Whether auto-close is enabled. + :type enabled: bool, optional + + :param max_inactive_time_in_secs: Maximum inactive time in seconds before auto-closing. + :type max_inactive_time_in_secs: int, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if max_inactive_time_in_secs is not unset: + kwargs["max_inactive_time_in_secs"] = max_inactive_time_in_secs + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/auto_transition_assigned_cases.py b/datadog_api_client/v2/model/auto_transition_assigned_cases.py new file mode 100644 index 0000000000..3f380f91f7 --- /dev/null +++ b/datadog_api_client/v2/model/auto_transition_assigned_cases.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AutoTransitionAssignedCases(ModelNormal): + @cached_property + def openapi_types(_): + return { + "auto_transition_assigned_cases_on_self_assigned": (bool,), + } + attribute_map = { + "auto_transition_assigned_cases_on_self_assigned": "auto_transition_assigned_cases_on_self_assigned", + } + + def __init__(self_, auto_transition_assigned_cases_on_self_assigned: Union[bool, UnsetType]=unset, **kwargs): + """ + Auto-transition assigned cases settings. + + :param auto_transition_assigned_cases_on_self_assigned: Whether to auto-transition cases when self-assigned. + :type auto_transition_assigned_cases_on_self_assigned: bool, optional + """ + if auto_transition_assigned_cases_on_self_assigned is not unset: + kwargs["auto_transition_assigned_cases_on_self_assigned"] = auto_transition_assigned_cases_on_self_assigned + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/automation_rule.py b/datadog_api_client/v2/model/automation_rule.py new file mode 100644 index 0000000000..2a3675936b --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_attributes import AutomationRuleAttributes + from datadog_api_client.v2.model.automation_rule_relationships import AutomationRuleRelationships + from datadog_api_client.v2.model.case_automation_rule_resource_type import CaseAutomationRuleResourceType + +class AutomationRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_attributes import AutomationRuleAttributes + from datadog_api_client.v2.model.automation_rule_relationships import AutomationRuleRelationships + from datadog_api_client.v2.model.case_automation_rule_resource_type import CaseAutomationRuleResourceType + return { + "attributes": (AutomationRuleAttributes,), + "id": (str,), + "relationships": (AutomationRuleRelationships,), + "type": (CaseAutomationRuleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: AutomationRuleAttributes, id: str, type: CaseAutomationRuleResourceType, relationships: Union[AutomationRuleRelationships, UnsetType]=unset, **kwargs): + """ + An automation rule that executes an action (such as running a Datadog workflow or assigning an AI agent) when a specified case event occurs within a project. + + :param attributes: Core attributes of an automation rule, including its name, trigger condition, action to execute, and current state. + :type attributes: AutomationRuleAttributes + + :param id: Automation rule identifier. + :type id: str + + :param relationships: Related resources for the automation rule, including the users who created and last modified it. + :type relationships: AutomationRuleRelationships, optional + + :param type: JSON:API resource type for case automation rules. + :type type: CaseAutomationRuleResourceType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/automation_rule_action.py b/datadog_api_client/v2/model/automation_rule_action.py new file mode 100644 index 0000000000..8cc2247817 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_action.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_action_data import AutomationRuleActionData + from datadog_api_client.v2.model.automation_rule_action_type import AutomationRuleActionType + +class AutomationRuleAction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_action_data import AutomationRuleActionData + from datadog_api_client.v2.model.automation_rule_action_type import AutomationRuleActionType + return { + "data": (AutomationRuleActionData,), + "type": (AutomationRuleActionType,), + } + attribute_map = { + "data": "data", + "type": "type", + } + + def __init__(self_, data: AutomationRuleActionData, type: AutomationRuleActionType, **kwargs): + """ + Defines what happens when the rule triggers. Combines an action type with action-specific configuration data. + + :param data: Configuration for the action to execute, dependent on the action type. + :type data: AutomationRuleActionData + + :param type: The type of automated action to perform when the rule triggers. ``EXECUTE_WORKFLOW`` runs a Datadog workflow; ``ASSIGN_AGENT`` assigns an AI agent to the case. + :type type: AutomationRuleActionType + """ + super().__init__(kwargs) + + + self_.data = data + self_.type = type diff --git a/datadog_api_client/v2/model/automation_rule_action_data.py b/datadog_api_client/v2/model/automation_rule_action_data.py new file mode 100644 index 0000000000..cf24e1e476 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_action_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AutomationRuleActionData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "agent_type": (str,), + "assigned_agent_id": (str,), + "handle": (str,), + } + attribute_map = { + "agent_type": "agent_type", + "assigned_agent_id": "assigned_agent_id", + "handle": "handle", + } + + def __init__(self_, agent_type: Union[str, UnsetType]=unset, assigned_agent_id: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration for the action to execute, dependent on the action type. + + :param agent_type: The type of AI agent to assign. Required when the action type is ``ASSIGN_AGENT``. + :type agent_type: str, optional + + :param assigned_agent_id: The identifier of the AI agent to assign to the case. Required when the action type is ``ASSIGN_AGENT``. + :type assigned_agent_id: str, optional + + :param handle: The handle of the Datadog workflow to execute. Required when the action type is ``EXECUTE_WORKFLOW``. + :type handle: str, optional + """ + if agent_type is not unset: + kwargs["agent_type"] = agent_type + if assigned_agent_id is not unset: + kwargs["assigned_agent_id"] = assigned_agent_id + if handle is not unset: + kwargs["handle"] = handle + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/automation_rule_action_type.py b/datadog_api_client/v2/model/automation_rule_action_type.py new file mode 100644 index 0000000000..cb1160547b --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_action_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AutomationRuleActionType(ModelSimple): + """ + The type of automated action to perform when the rule triggers. `EXECUTE_WORKFLOW` runs a Datadog workflow; `ASSIGN_AGENT` assigns an AI agent to the case. + + :param value: Must be one of ["EXECUTE_WORKFLOW", "ASSIGN_AGENT"]. + :type value: str + """ + + allowed_values = { + "EXECUTE_WORKFLOW", + "ASSIGN_AGENT", + } + EXECUTE_WORKFLOW: ClassVar["AutomationRuleActionType"] + ASSIGN_AGENT: ClassVar["AutomationRuleActionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AutomationRuleActionType.EXECUTE_WORKFLOW = AutomationRuleActionType("EXECUTE_WORKFLOW") +AutomationRuleActionType.ASSIGN_AGENT = AutomationRuleActionType("ASSIGN_AGENT") diff --git a/datadog_api_client/v2/model/automation_rule_actor_type.py b/datadog_api_client/v2/model/automation_rule_actor_type.py new file mode 100644 index 0000000000..1250f806d0 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_actor_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AutomationRuleActorType(ModelSimple): + """ + Whether the actor is a user or the Datadog system. + + :param value: Must be one of ["user", "system"]. + :type value: str + """ + + allowed_values = { + "user", + "system", + } + USER: ClassVar["AutomationRuleActorType"] + SYSTEM: ClassVar["AutomationRuleActorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AutomationRuleActorType.USER = AutomationRuleActorType("user") +AutomationRuleActorType.SYSTEM = AutomationRuleActorType("system") diff --git a/datadog_api_client/v2/model/automation_rule_attributes.py b/datadog_api_client/v2/model/automation_rule_attributes.py new file mode 100644 index 0000000000..a70d977289 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_action import AutomationRuleAction + from datadog_api_client.v2.model.case_automation_rule_state import CaseAutomationRuleState + from datadog_api_client.v2.model.automation_rule_trigger import AutomationRuleTrigger + +class AutomationRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_action import AutomationRuleAction + from datadog_api_client.v2.model.case_automation_rule_state import CaseAutomationRuleState + from datadog_api_client.v2.model.automation_rule_trigger import AutomationRuleTrigger + return { + "action": (AutomationRuleAction,), + "created_at": (datetime,), + "modified_at": (datetime,), + "name": (str,), + "state": (CaseAutomationRuleState,), + "trigger": (AutomationRuleTrigger,), + } + attribute_map = { + "action": "action", + "created_at": "created_at", + "modified_at": "modified_at", + "name": "name", + "state": "state", + "trigger": "trigger", + } + read_only_vars = { + "created_at", + "modified_at", + } + + def __init__(self_, action: AutomationRuleAction, created_at: datetime, name: str, state: CaseAutomationRuleState, trigger: AutomationRuleTrigger, modified_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Core attributes of an automation rule, including its name, trigger condition, action to execute, and current state. + + :param action: Defines what happens when the rule triggers. Combines an action type with action-specific configuration data. + :type action: AutomationRuleAction + + :param created_at: Timestamp when the automation rule was created. + :type created_at: datetime + + :param modified_at: Timestamp when the automation rule was last modified. + :type modified_at: datetime, optional + + :param name: A human-readable name for the automation rule, used to identify the rule in the UI and API responses. + :type name: str + + :param state: Whether the automation rule is active. Enabled rules trigger on matching case events; disabled rules are inactive but preserve their configuration. + :type state: CaseAutomationRuleState + + :param trigger: Defines when the rule activates. Combines a trigger type (the case event to listen for) with optional trigger data (conditions that narrow when the trigger fires). + :type trigger: AutomationRuleTrigger + """ + if modified_at is not unset: + kwargs["modified_at"] = modified_at + super().__init__(kwargs) + + + self_.action = action + self_.created_at = created_at + self_.name = name + self_.state = state + self_.trigger = trigger diff --git a/datadog_api_client/v2/model/automation_rule_create.py b/datadog_api_client/v2/model/automation_rule_create.py new file mode 100644 index 0000000000..49d6de6c8e --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_create_attributes import AutomationRuleCreateAttributes + from datadog_api_client.v2.model.case_automation_rule_resource_type import CaseAutomationRuleResourceType + +class AutomationRuleCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_create_attributes import AutomationRuleCreateAttributes + from datadog_api_client.v2.model.case_automation_rule_resource_type import CaseAutomationRuleResourceType + return { + "attributes": (AutomationRuleCreateAttributes,), + "type": (CaseAutomationRuleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AutomationRuleCreateAttributes, type: CaseAutomationRuleResourceType, **kwargs): + """ + Data object for creating an automation rule. + + :param attributes: Attributes required to create an automation rule. + :type attributes: AutomationRuleCreateAttributes + + :param type: JSON:API resource type for case automation rules. + :type type: CaseAutomationRuleResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/automation_rule_create_attributes.py b/datadog_api_client/v2/model/automation_rule_create_attributes.py new file mode 100644 index 0000000000..5011178d41 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_create_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_action import AutomationRuleAction + from datadog_api_client.v2.model.case_automation_rule_state import CaseAutomationRuleState + from datadog_api_client.v2.model.automation_rule_trigger import AutomationRuleTrigger + +class AutomationRuleCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_action import AutomationRuleAction + from datadog_api_client.v2.model.case_automation_rule_state import CaseAutomationRuleState + from datadog_api_client.v2.model.automation_rule_trigger import AutomationRuleTrigger + return { + "action": (AutomationRuleAction,), + "name": (str,), + "state": (CaseAutomationRuleState,), + "trigger": (AutomationRuleTrigger,), + } + attribute_map = { + "action": "action", + "name": "name", + "state": "state", + "trigger": "trigger", + } + + def __init__(self_, action: AutomationRuleAction, name: str, trigger: AutomationRuleTrigger, state: Union[CaseAutomationRuleState, UnsetType]=unset, **kwargs): + """ + Attributes required to create an automation rule. + + :param action: Defines what happens when the rule triggers. Combines an action type with action-specific configuration data. + :type action: AutomationRuleAction + + :param name: Name of the automation rule. + :type name: str + + :param state: Whether the automation rule is active. Enabled rules trigger on matching case events; disabled rules are inactive but preserve their configuration. + :type state: CaseAutomationRuleState, optional + + :param trigger: Defines when the rule activates. Combines a trigger type (the case event to listen for) with optional trigger data (conditions that narrow when the trigger fires). + :type trigger: AutomationRuleTrigger + """ + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + + self_.action = action + self_.name = name + self_.trigger = trigger diff --git a/datadog_api_client/v2/model/automation_rule_create_request.py b/datadog_api_client/v2/model/automation_rule_create_request.py new file mode 100644 index 0000000000..c43037cd21 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_create import AutomationRuleCreate + +class AutomationRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_create import AutomationRuleCreate + return { + "data": (AutomationRuleCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AutomationRuleCreate, **kwargs): + """ + Request payload for creating an automation rule. + + :param data: Data object for creating an automation rule. + :type data: AutomationRuleCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/automation_rule_created_by.py b/datadog_api_client/v2/model/automation_rule_created_by.py new file mode 100644 index 0000000000..2098e4554f --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_created_by.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_actor_type import AutomationRuleActorType + +class AutomationRuleCreatedBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_actor_type import AutomationRuleActorType + return { + "id": (str,), + "name": (str,), + "type": (AutomationRuleActorType,), + } + attribute_map = { + "id": "id", + "name": "name", + "type": "type", + } + + def __init__(self_, id: str, name: str, type: AutomationRuleActorType, **kwargs): + """ + The user or Datadog system who created the rule. + + :param id: The actor's identifier (a user UUID or a system identifier). + :type id: str + + :param name: The name of the actor. + :type name: str + + :param type: Whether the actor is a user or the Datadog system. + :type type: AutomationRuleActorType + """ + super().__init__(kwargs) + + + self_.id = id + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/automation_rule_modified_by.py b/datadog_api_client/v2/model/automation_rule_modified_by.py new file mode 100644 index 0000000000..4d7df8dbde --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_modified_by.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_actor_type import AutomationRuleActorType + +class AutomationRuleModifiedBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_actor_type import AutomationRuleActorType + return { + "id": (str,), + "name": (str,), + "type": (AutomationRuleActorType,), + } + attribute_map = { + "id": "id", + "name": "name", + "type": "type", + } + + def __init__(self_, id: str, name: str, type: AutomationRuleActorType, **kwargs): + """ + The user or Datadog system who last modified the rule. + + :param id: The actor's identifier (a user UUID or a system identifier). + :type id: str + + :param name: The name of the actor. + :type name: str + + :param type: Whether the actor is a user or the Datadog system. + :type type: AutomationRuleActorType + """ + super().__init__(kwargs) + + + self_.id = id + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/automation_rule_relationships.py b/datadog_api_client/v2/model/automation_rule_relationships.py new file mode 100644 index 0000000000..0069da6fe6 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + +class AutomationRuleRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + return { + "created_by": (NullableUserRelationship,), + "modified_by": (NullableUserRelationship,), + } + attribute_map = { + "created_by": "created_by", + "modified_by": "modified_by", + } + + def __init__(self_, created_by: Union[NullableUserRelationship, none_type, UnsetType]=unset, modified_by: Union[NullableUserRelationship, none_type, UnsetType]=unset, **kwargs): + """ + Related resources for the automation rule, including the users who created and last modified it. + + :param created_by: Relationship to user. + :type created_by: NullableUserRelationship, none_type, optional + + :param modified_by: Relationship to user. + :type modified_by: NullableUserRelationship, none_type, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if modified_by is not unset: + kwargs["modified_by"] = modified_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/automation_rule_response.py b/datadog_api_client/v2/model/automation_rule_response.py new file mode 100644 index 0000000000..993502b1d3 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule import AutomationRule + +class AutomationRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule import AutomationRule + return { + "data": (AutomationRule,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AutomationRule, **kwargs): + """ + Response containing a single automation rule. + + :param data: An automation rule that executes an action (such as running a Datadog workflow or assigning an AI agent) when a specified case event occurs within a project. + :type data: AutomationRule + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/automation_rule_scope.py b/datadog_api_client/v2/model/automation_rule_scope.py new file mode 100644 index 0000000000..5eee105400 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_scope.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_finding_type import SecurityFindingType + +class AutomationRuleScope(ModelNormal): + validations = { + "finding_types": { + "min_items": 1, + }, + "query": { + "max_length": 30000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_finding_type import SecurityFindingType + return { + "finding_types": ([SecurityFindingType],), + "query": (str,), + } + attribute_map = { + "finding_types": "finding_types", + "query": "query", + } + + def __init__(self_, finding_types: List[SecurityFindingType], query: Union[str, UnsetType]=unset, **kwargs): + """ + Defines the scope of findings to which the automation rule applies. + + :param finding_types: The list of security finding types that the automation rule applies to. + :type finding_types: [SecurityFindingType] + + :param query: A search query to further filter the findings matched by this rule. The ``@workflow.*`` namespace and ``@status`` fields are not permitted. For a reference of available fields, see the `Security Findings schema documentation `_. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + + self_.finding_types = finding_types diff --git a/datadog_api_client/v2/model/automation_rule_trigger.py b/datadog_api_client/v2/model/automation_rule_trigger.py new file mode 100644 index 0000000000..6ecc52d00e --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_trigger.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_trigger_data import AutomationRuleTriggerData + from datadog_api_client.v2.model.automation_rule_trigger_type import AutomationRuleTriggerType + +class AutomationRuleTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_trigger_data import AutomationRuleTriggerData + from datadog_api_client.v2.model.automation_rule_trigger_type import AutomationRuleTriggerType + return { + "data": (AutomationRuleTriggerData,), + "type": (AutomationRuleTriggerType,), + } + attribute_map = { + "data": "data", + "type": "type", + } + + def __init__(self_, type: AutomationRuleTriggerType, data: Union[AutomationRuleTriggerData, UnsetType]=unset, **kwargs): + """ + Defines when the rule activates. Combines a trigger type (the case event to listen for) with optional trigger data (conditions that narrow when the trigger fires). + + :param data: Additional configuration for the trigger, dependent on the trigger type. For ``STATUS_TRANSITIONED`` triggers, specify ``from_status_name`` and ``to_status_name``. For ``ATTRIBUTE_VALUE_CHANGED`` triggers, specify ``field`` and ``change_type``. + :type data: AutomationRuleTriggerData, optional + + :param type: The case event that activates the automation rule. + :type type: AutomationRuleTriggerType + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/automation_rule_trigger_data.py b/datadog_api_client/v2/model/automation_rule_trigger_data.py new file mode 100644 index 0000000000..480f0d721c --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_trigger_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AutomationRuleTriggerData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "approval_type": (str,), + "change_type": (str,), + "field": (str,), + "from_status_name": (str,), + "to_status_name": (str,), + } + attribute_map = { + "approval_type": "approval_type", + "change_type": "change_type", + "field": "field", + "from_status_name": "from_status_name", + "to_status_name": "to_status_name", + } + + def __init__(self_, approval_type: Union[str, UnsetType]=unset, change_type: Union[str, UnsetType]=unset, field: Union[str, UnsetType]=unset, from_status_name: Union[str, UnsetType]=unset, to_status_name: Union[str, UnsetType]=unset, **kwargs): + """ + Additional configuration for the trigger, dependent on the trigger type. For ``STATUS_TRANSITIONED`` triggers, specify ``from_status_name`` and ``to_status_name``. For ``ATTRIBUTE_VALUE_CHANGED`` triggers, specify ``field`` and ``change_type``. + + :param approval_type: The approval outcome to match. Used with ``CASE_REVIEW_APPROVED`` triggers. + :type approval_type: str, optional + + :param change_type: The kind of attribute change to match. Allowed values: ``VALUE_ADDED`` , ``VALUE_DELETED`` , ``ANY_CHANGES``. Used with ``ATTRIBUTE_VALUE_CHANGED`` triggers. + :type change_type: str, optional + + :param field: The case attribute field name to monitor for changes. Used with ``ATTRIBUTE_VALUE_CHANGED`` triggers. + :type field: str, optional + + :param from_status_name: The originating status name. Used with ``STATUS_TRANSITIONED`` triggers to match transitions from this status. + :type from_status_name: str, optional + + :param to_status_name: The destination status name. Used with ``STATUS_TRANSITIONED`` triggers to match transitions to this status. + :type to_status_name: str, optional + """ + if approval_type is not unset: + kwargs["approval_type"] = approval_type + if change_type is not unset: + kwargs["change_type"] = change_type + if field is not unset: + kwargs["field"] = field + if from_status_name is not unset: + kwargs["from_status_name"] = from_status_name + if to_status_name is not unset: + kwargs["to_status_name"] = to_status_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/automation_rule_trigger_type.py b/datadog_api_client/v2/model/automation_rule_trigger_type.py new file mode 100644 index 0000000000..694235c639 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_trigger_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AutomationRuleTriggerType(ModelSimple): + """ + The case event that activates the automation rule. + + :param value: Must be one of ["CASE_CREATED", "STATUS_TRANSITIONED", "ATTRIBUTE_VALUE_CHANGED", "EVENT_CORRELATION_SIGNAL_CORRELATED", "CASE_REVIEW_APPROVED", "COMMENT_ADDED"]. + :type value: str + """ + + allowed_values = { + "CASE_CREATED", + "STATUS_TRANSITIONED", + "ATTRIBUTE_VALUE_CHANGED", + "EVENT_CORRELATION_SIGNAL_CORRELATED", + "CASE_REVIEW_APPROVED", + "COMMENT_ADDED", + } + CASE_CREATED: ClassVar["AutomationRuleTriggerType"] + STATUS_TRANSITIONED: ClassVar["AutomationRuleTriggerType"] + ATTRIBUTE_VALUE_CHANGED: ClassVar["AutomationRuleTriggerType"] + EVENT_CORRELATION_SIGNAL_CORRELATED: ClassVar["AutomationRuleTriggerType"] + CASE_REVIEW_APPROVED: ClassVar["AutomationRuleTriggerType"] + COMMENT_ADDED: ClassVar["AutomationRuleTriggerType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AutomationRuleTriggerType.CASE_CREATED = AutomationRuleTriggerType("CASE_CREATED") +AutomationRuleTriggerType.STATUS_TRANSITIONED = AutomationRuleTriggerType("STATUS_TRANSITIONED") +AutomationRuleTriggerType.ATTRIBUTE_VALUE_CHANGED = AutomationRuleTriggerType("ATTRIBUTE_VALUE_CHANGED") +AutomationRuleTriggerType.EVENT_CORRELATION_SIGNAL_CORRELATED = AutomationRuleTriggerType("EVENT_CORRELATION_SIGNAL_CORRELATED") +AutomationRuleTriggerType.CASE_REVIEW_APPROVED = AutomationRuleTriggerType("CASE_REVIEW_APPROVED") +AutomationRuleTriggerType.COMMENT_ADDED = AutomationRuleTriggerType("COMMENT_ADDED") diff --git a/datadog_api_client/v2/model/automation_rule_update.py b/datadog_api_client/v2/model/automation_rule_update.py new file mode 100644 index 0000000000..bc38e07ee5 --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_update.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_create_attributes import AutomationRuleCreateAttributes + from datadog_api_client.v2.model.case_automation_rule_resource_type import CaseAutomationRuleResourceType + +class AutomationRuleUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_create_attributes import AutomationRuleCreateAttributes + from datadog_api_client.v2.model.case_automation_rule_resource_type import CaseAutomationRuleResourceType + return { + "attributes": (AutomationRuleCreateAttributes,), + "type": (CaseAutomationRuleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: CaseAutomationRuleResourceType, attributes: Union[AutomationRuleCreateAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating an automation rule. + + :param attributes: Attributes required to create an automation rule. + :type attributes: AutomationRuleCreateAttributes, optional + + :param type: JSON:API resource type for case automation rules. + :type type: CaseAutomationRuleResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/automation_rule_update_request.py b/datadog_api_client/v2/model/automation_rule_update_request.py new file mode 100644 index 0000000000..020a1436db --- /dev/null +++ b/datadog_api_client/v2/model/automation_rule_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule_update import AutomationRuleUpdate + +class AutomationRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule_update import AutomationRuleUpdate + return { + "data": (AutomationRuleUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AutomationRuleUpdate, **kwargs): + """ + Request payload for updating an automation rule. + + :param data: Data object for updating an automation rule. + :type data: AutomationRuleUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/automation_rules_response.py b/datadog_api_client/v2/model/automation_rules_response.py new file mode 100644 index 0000000000..8a2483256a --- /dev/null +++ b/datadog_api_client/v2/model/automation_rules_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.automation_rule import AutomationRule + +class AutomationRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.automation_rule import AutomationRule + return { + "data": ([AutomationRule],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AutomationRule], **kwargs): + """ + Response containing a list of automation rules for a project. + + :param data: List of automation rules. + :type data: [AutomationRule] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_account_create_request.py b/datadog_api_client/v2/model/aws_account_create_request.py new file mode 100644 index 0000000000..bf2132fa98 --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_create_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_account_create_request_data import AWSAccountCreateRequestData + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_account_create_request_data import AWSAccountCreateRequestData + return { + "data": (AWSAccountCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSAccountCreateRequestData, **kwargs): + """ + AWS Account Create Request body. + + :param data: AWS Account Create Request data. + :type data: AWSAccountCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_account_create_request_attributes.py b/datadog_api_client/v2/model/aws_account_create_request_attributes.py new file mode 100644 index 0000000000..24e64f050f --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_create_request_attributes.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_auth_config import AWSAuthConfig + from datadog_api_client.v2.model.aws_account_partition import AWSAccountPartition + from datadog_api_client.v2.model.aws_regions import AWSRegions + from datadog_api_client.v2.model.aws_logs_config import AWSLogsConfig + from datadog_api_client.v2.model.aws_metrics_config import AWSMetricsConfig + from datadog_api_client.v2.model.aws_resources_config import AWSResourcesConfig + from datadog_api_client.v2.model.aws_traces_config import AWSTracesConfig + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_auth_config import AWSAuthConfig + from datadog_api_client.v2.model.aws_account_partition import AWSAccountPartition + from datadog_api_client.v2.model.aws_regions import AWSRegions + from datadog_api_client.v2.model.aws_logs_config import AWSLogsConfig + from datadog_api_client.v2.model.aws_metrics_config import AWSMetricsConfig + from datadog_api_client.v2.model.aws_resources_config import AWSResourcesConfig + from datadog_api_client.v2.model.aws_traces_config import AWSTracesConfig + return { + "account_tags": ([str],), + "auth_config": (AWSAuthConfig,), + "aws_account_id": (str,), + "aws_partition": (AWSAccountPartition,), + "aws_regions": (AWSRegions,), + "logs_config": (AWSLogsConfig,), + "metrics_config": (AWSMetricsConfig,), + "resources_config": (AWSResourcesConfig,), + "traces_config": (AWSTracesConfig,), + } + attribute_map = { + "account_tags": "account_tags", + "auth_config": "auth_config", + "aws_account_id": "aws_account_id", + "aws_partition": "aws_partition", + "aws_regions": "aws_regions", + "logs_config": "logs_config", + "metrics_config": "metrics_config", + "resources_config": "resources_config", + "traces_config": "traces_config", + } + + def __init__(self_, auth_config: Union[AWSAuthConfig, AWSAuthConfigKeys, AWSAuthConfigRole], aws_account_id: str, aws_partition: AWSAccountPartition, account_tags: Union[List[str], none_type, UnsetType]=unset, aws_regions: Union[AWSRegions, AWSRegionsIncludeAll, AWSRegionsIncludeOnly, UnsetType]=unset, logs_config: Union[AWSLogsConfig, UnsetType]=unset, metrics_config: Union[AWSMetricsConfig, UnsetType]=unset, resources_config: Union[AWSResourcesConfig, UnsetType]=unset, traces_config: Union[AWSTracesConfig, UnsetType]=unset, **kwargs): + """ + The AWS Account Integration Config to be created. + + :param account_tags: Tags to apply to all hosts and metrics reporting for this account. Defaults to ``[]``. + :type account_tags: [str], none_type, optional + + :param auth_config: AWS Authentication config. + :type auth_config: AWSAuthConfig + + :param aws_account_id: AWS Account ID. + :type aws_account_id: str + + :param aws_partition: AWS partition your AWS account is scoped to. Defaults to ``aws``. + See `Partitions `_ + in the AWS documentation for more information. + :type aws_partition: AWSAccountPartition + + :param aws_regions: AWS Regions to collect data from. Defaults to ``include_all``. + :type aws_regions: AWSRegions, optional + + :param logs_config: AWS Logs Collection config. + :type logs_config: AWSLogsConfig, optional + + :param metrics_config: AWS Metrics Collection config. + :type metrics_config: AWSMetricsConfig, optional + + :param resources_config: AWS Resources Collection config. + :type resources_config: AWSResourcesConfig, optional + + :param traces_config: AWS Traces Collection config. + :type traces_config: AWSTracesConfig, optional + """ + if account_tags is not unset: + kwargs["account_tags"] = account_tags + if aws_regions is not unset: + kwargs["aws_regions"] = aws_regions + if logs_config is not unset: + kwargs["logs_config"] = logs_config + if metrics_config is not unset: + kwargs["metrics_config"] = metrics_config + if resources_config is not unset: + kwargs["resources_config"] = resources_config + if traces_config is not unset: + kwargs["traces_config"] = traces_config + super().__init__(kwargs) + + + self_.auth_config = auth_config + self_.aws_account_id = aws_account_id + self_.aws_partition = aws_partition diff --git a/datadog_api_client/v2/model/aws_account_create_request_data.py b/datadog_api_client/v2/model/aws_account_create_request_data.py new file mode 100644 index 0000000000..c8034b1a6d --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_create_request_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_account_create_request_attributes import AWSAccountCreateRequestAttributes + from datadog_api_client.v2.model.aws_account_type import AWSAccountType + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_account_create_request_attributes import AWSAccountCreateRequestAttributes + from datadog_api_client.v2.model.aws_account_type import AWSAccountType + return { + "attributes": (AWSAccountCreateRequestAttributes,), + "type": (AWSAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AWSAccountCreateRequestAttributes, type: AWSAccountType, **kwargs): + """ + AWS Account Create Request data. + + :param attributes: The AWS Account Integration Config to be created. + :type attributes: AWSAccountCreateRequestAttributes + + :param type: AWS Account resource type. + :type type: AWSAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_account_partition.py b/datadog_api_client/v2/model/aws_account_partition.py new file mode 100644 index 0000000000..8e59d191b4 --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_partition.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSAccountPartition(ModelSimple): + """ + AWS partition your AWS account is scoped to. Defaults to `aws`. + See [Partitions](https://docs.aws.amazon.com/whitepapers/latest/aws-fault-isolation-boundaries/partitions.html) + in the AWS documentation for more information. + + :param value: Must be one of ["aws", "aws-cn", "aws-us-gov"]. + :type value: str + """ + + allowed_values = { + "aws", + "aws-cn", + "aws-us-gov", + } + AWS: ClassVar["AWSAccountPartition"] + AWS_CN: ClassVar["AWSAccountPartition"] + AWS_US_GOV: ClassVar["AWSAccountPartition"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSAccountPartition.AWS = AWSAccountPartition("aws") +AWSAccountPartition.AWS_CN = AWSAccountPartition("aws-cn") +AWSAccountPartition.AWS_US_GOV = AWSAccountPartition("aws-us-gov") diff --git a/datadog_api_client/v2/model/aws_account_response.py b/datadog_api_client/v2/model/aws_account_response.py new file mode 100644 index 0000000000..e90d9718d1 --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_account_response_data import AWSAccountResponseData + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_account_response_data import AWSAccountResponseData + return { + "data": (AWSAccountResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSAccountResponseData, **kwargs): + """ + AWS Account response body. + + :param data: AWS Account response data. + :type data: AWSAccountResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_account_response_attributes.py b/datadog_api_client/v2/model/aws_account_response_attributes.py new file mode 100644 index 0000000000..e89bba668d --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_response_attributes.py @@ -0,0 +1,146 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_auth_config import AWSAuthConfig + from datadog_api_client.v2.model.aws_account_partition import AWSAccountPartition + from datadog_api_client.v2.model.aws_regions import AWSRegions + from datadog_api_client.v2.model.aws_logs_config import AWSLogsConfig + from datadog_api_client.v2.model.aws_metrics_config import AWSMetricsConfig + from datadog_api_client.v2.model.aws_resources_config import AWSResourcesConfig + from datadog_api_client.v2.model.aws_traces_config import AWSTracesConfig + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_auth_config import AWSAuthConfig + from datadog_api_client.v2.model.aws_account_partition import AWSAccountPartition + from datadog_api_client.v2.model.aws_regions import AWSRegions + from datadog_api_client.v2.model.aws_logs_config import AWSLogsConfig + from datadog_api_client.v2.model.aws_metrics_config import AWSMetricsConfig + from datadog_api_client.v2.model.aws_resources_config import AWSResourcesConfig + from datadog_api_client.v2.model.aws_traces_config import AWSTracesConfig + return { + "account_tags": ([str],), + "auth_config": (AWSAuthConfig,), + "aws_account_id": (str,), + "aws_partition": (AWSAccountPartition,), + "aws_regions": (AWSRegions,), + "created_at": (datetime,), + "logs_config": (AWSLogsConfig,), + "metrics_config": (AWSMetricsConfig,), + "modified_at": (datetime,), + "resources_config": (AWSResourcesConfig,), + "traces_config": (AWSTracesConfig,), + } + attribute_map = { + "account_tags": "account_tags", + "auth_config": "auth_config", + "aws_account_id": "aws_account_id", + "aws_partition": "aws_partition", + "aws_regions": "aws_regions", + "created_at": "created_at", + "logs_config": "logs_config", + "metrics_config": "metrics_config", + "modified_at": "modified_at", + "resources_config": "resources_config", + "traces_config": "traces_config", + } + read_only_vars = { + "created_at", + "modified_at", + } + + def __init__(self_, aws_account_id: str, account_tags: Union[List[str], none_type, UnsetType]=unset, auth_config: Union[AWSAuthConfig, AWSAuthConfigKeys, AWSAuthConfigRole, UnsetType]=unset, aws_partition: Union[AWSAccountPartition, UnsetType]=unset, aws_regions: Union[AWSRegions, AWSRegionsIncludeAll, AWSRegionsIncludeOnly, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, logs_config: Union[AWSLogsConfig, UnsetType]=unset, metrics_config: Union[AWSMetricsConfig, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, resources_config: Union[AWSResourcesConfig, UnsetType]=unset, traces_config: Union[AWSTracesConfig, UnsetType]=unset, **kwargs): + """ + AWS Account response attributes. + + :param account_tags: Tags to apply to all hosts and metrics reporting for this account. Defaults to ``[]``. + :type account_tags: [str], none_type, optional + + :param auth_config: AWS Authentication config. + :type auth_config: AWSAuthConfig, optional + + :param aws_account_id: AWS Account ID. + :type aws_account_id: str + + :param aws_partition: AWS partition your AWS account is scoped to. Defaults to ``aws``. + See `Partitions `_ + in the AWS documentation for more information. + :type aws_partition: AWSAccountPartition, optional + + :param aws_regions: AWS Regions to collect data from. Defaults to ``include_all``. + :type aws_regions: AWSRegions, optional + + :param created_at: Timestamp of when the account integration was created. + :type created_at: datetime, optional + + :param logs_config: AWS Logs Collection config. + :type logs_config: AWSLogsConfig, optional + + :param metrics_config: AWS Metrics Collection config. + :type metrics_config: AWSMetricsConfig, optional + + :param modified_at: Timestamp of when the account integration was updated. + :type modified_at: datetime, optional + + :param resources_config: AWS Resources Collection config. + :type resources_config: AWSResourcesConfig, optional + + :param traces_config: AWS Traces Collection config. + :type traces_config: AWSTracesConfig, optional + """ + if account_tags is not unset: + kwargs["account_tags"] = account_tags + if auth_config is not unset: + kwargs["auth_config"] = auth_config + if aws_partition is not unset: + kwargs["aws_partition"] = aws_partition + if aws_regions is not unset: + kwargs["aws_regions"] = aws_regions + if created_at is not unset: + kwargs["created_at"] = created_at + if logs_config is not unset: + kwargs["logs_config"] = logs_config + if metrics_config is not unset: + kwargs["metrics_config"] = metrics_config + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if resources_config is not unset: + kwargs["resources_config"] = resources_config + if traces_config is not unset: + kwargs["traces_config"] = traces_config + super().__init__(kwargs) + + + self_.aws_account_id = aws_account_id diff --git a/datadog_api_client/v2/model/aws_account_response_data.py b/datadog_api_client/v2/model/aws_account_response_data.py new file mode 100644 index 0000000000..f74dcfd23e --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_response_data.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_account_response_attributes import AWSAccountResponseAttributes + from datadog_api_client.v2.model.aws_account_type import AWSAccountType + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_account_response_attributes import AWSAccountResponseAttributes + from datadog_api_client.v2.model.aws_account_type import AWSAccountType + return { + "attributes": (AWSAccountResponseAttributes,), + "id": (str,), + "type": (AWSAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: AWSAccountType, attributes: Union[AWSAccountResponseAttributes, UnsetType]=unset, **kwargs): + """ + AWS Account response data. + + :param attributes: AWS Account response attributes. + :type attributes: AWSAccountResponseAttributes, optional + + :param id: Unique Datadog ID of the AWS Account Integration Config. + To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type id: str + + :param type: AWS Account resource type. + :type type: AWSAccountType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_account_type.py b/datadog_api_client/v2/model/aws_account_type.py new file mode 100644 index 0000000000..d48ab2e32c --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSAccountType(ModelSimple): + """ + AWS Account resource type. + + :param value: If omitted defaults to "account". Must be one of ["account"]. + :type value: str + """ + + allowed_values = { + "account", + } + ACCOUNT: ClassVar["AWSAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSAccountType.ACCOUNT = AWSAccountType("account") diff --git a/datadog_api_client/v2/model/aws_account_update_request.py b/datadog_api_client/v2/model/aws_account_update_request.py new file mode 100644 index 0000000000..5026efb85a --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_update_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_account_update_request_data import AWSAccountUpdateRequestData + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_account_update_request_data import AWSAccountUpdateRequestData + return { + "data": (AWSAccountUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSAccountUpdateRequestData, **kwargs): + """ + AWS Account Update Request body. + + :param data: AWS Account Update Request data. + :type data: AWSAccountUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_account_update_request_attributes.py b/datadog_api_client/v2/model/aws_account_update_request_attributes.py new file mode 100644 index 0000000000..69391b7767 --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_update_request_attributes.py @@ -0,0 +1,128 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_auth_config import AWSAuthConfig + from datadog_api_client.v2.model.aws_account_partition import AWSAccountPartition + from datadog_api_client.v2.model.aws_regions import AWSRegions + from datadog_api_client.v2.model.aws_logs_config import AWSLogsConfig + from datadog_api_client.v2.model.aws_metrics_config import AWSMetricsConfig + from datadog_api_client.v2.model.aws_resources_config import AWSResourcesConfig + from datadog_api_client.v2.model.aws_traces_config import AWSTracesConfig + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_auth_config import AWSAuthConfig + from datadog_api_client.v2.model.aws_account_partition import AWSAccountPartition + from datadog_api_client.v2.model.aws_regions import AWSRegions + from datadog_api_client.v2.model.aws_logs_config import AWSLogsConfig + from datadog_api_client.v2.model.aws_metrics_config import AWSMetricsConfig + from datadog_api_client.v2.model.aws_resources_config import AWSResourcesConfig + from datadog_api_client.v2.model.aws_traces_config import AWSTracesConfig + return { + "account_tags": ([str],), + "auth_config": (AWSAuthConfig,), + "aws_account_id": (str,), + "aws_partition": (AWSAccountPartition,), + "aws_regions": (AWSRegions,), + "logs_config": (AWSLogsConfig,), + "metrics_config": (AWSMetricsConfig,), + "resources_config": (AWSResourcesConfig,), + "traces_config": (AWSTracesConfig,), + } + attribute_map = { + "account_tags": "account_tags", + "auth_config": "auth_config", + "aws_account_id": "aws_account_id", + "aws_partition": "aws_partition", + "aws_regions": "aws_regions", + "logs_config": "logs_config", + "metrics_config": "metrics_config", + "resources_config": "resources_config", + "traces_config": "traces_config", + } + + def __init__(self_, aws_account_id: str, account_tags: Union[List[str], none_type, UnsetType]=unset, auth_config: Union[AWSAuthConfig, AWSAuthConfigKeys, AWSAuthConfigRole, UnsetType]=unset, aws_partition: Union[AWSAccountPartition, UnsetType]=unset, aws_regions: Union[AWSRegions, AWSRegionsIncludeAll, AWSRegionsIncludeOnly, UnsetType]=unset, logs_config: Union[AWSLogsConfig, UnsetType]=unset, metrics_config: Union[AWSMetricsConfig, UnsetType]=unset, resources_config: Union[AWSResourcesConfig, UnsetType]=unset, traces_config: Union[AWSTracesConfig, UnsetType]=unset, **kwargs): + """ + The AWS Account Integration Config to be updated. + + :param account_tags: Tags to apply to all hosts and metrics reporting for this account. Defaults to ``[]``. + :type account_tags: [str], none_type, optional + + :param auth_config: AWS Authentication config. + :type auth_config: AWSAuthConfig, optional + + :param aws_account_id: AWS Account ID. + :type aws_account_id: str + + :param aws_partition: AWS partition your AWS account is scoped to. Defaults to ``aws``. + See `Partitions `_ + in the AWS documentation for more information. + :type aws_partition: AWSAccountPartition, optional + + :param aws_regions: AWS Regions to collect data from. Defaults to ``include_all``. + :type aws_regions: AWSRegions, optional + + :param logs_config: AWS Logs Collection config. + :type logs_config: AWSLogsConfig, optional + + :param metrics_config: AWS Metrics Collection config. + :type metrics_config: AWSMetricsConfig, optional + + :param resources_config: AWS Resources Collection config. + :type resources_config: AWSResourcesConfig, optional + + :param traces_config: AWS Traces Collection config. + :type traces_config: AWSTracesConfig, optional + """ + if account_tags is not unset: + kwargs["account_tags"] = account_tags + if auth_config is not unset: + kwargs["auth_config"] = auth_config + if aws_partition is not unset: + kwargs["aws_partition"] = aws_partition + if aws_regions is not unset: + kwargs["aws_regions"] = aws_regions + if logs_config is not unset: + kwargs["logs_config"] = logs_config + if metrics_config is not unset: + kwargs["metrics_config"] = metrics_config + if resources_config is not unset: + kwargs["resources_config"] = resources_config + if traces_config is not unset: + kwargs["traces_config"] = traces_config + super().__init__(kwargs) + + + self_.aws_account_id = aws_account_id diff --git a/datadog_api_client/v2/model/aws_account_update_request_data.py b/datadog_api_client/v2/model/aws_account_update_request_data.py new file mode 100644 index 0000000000..bf0f6b7a56 --- /dev/null +++ b/datadog_api_client/v2/model/aws_account_update_request_data.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_account_update_request_attributes import AWSAccountUpdateRequestAttributes + from datadog_api_client.v2.model.aws_account_type import AWSAccountType + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_account_update_request_attributes import AWSAccountUpdateRequestAttributes + from datadog_api_client.v2.model.aws_account_type import AWSAccountType + return { + "attributes": (AWSAccountUpdateRequestAttributes,), + "id": (str,), + "type": (AWSAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AWSAccountUpdateRequestAttributes, type: AWSAccountType, id: Union[str, UnsetType]=unset, **kwargs): + """ + AWS Account Update Request data. + + :param attributes: The AWS Account Integration Config to be updated. + :type attributes: AWSAccountUpdateRequestAttributes + + :param id: Unique Datadog ID of the AWS Account Integration Config. + To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type id: str, optional + + :param type: AWS Account resource type. + :type type: AWSAccountType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_accounts_response.py b/datadog_api_client/v2/model/aws_accounts_response.py new file mode 100644 index 0000000000..5525940f39 --- /dev/null +++ b/datadog_api_client/v2/model/aws_accounts_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_account_response_data import AWSAccountResponseData + from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_account_response_data import AWSAccountResponseData + return { + "data": ([AWSAccountResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AWSAccountResponseData], **kwargs): + """ + AWS Accounts response body. + + :param data: List of AWS Account Integration Configs. + :type data: [AWSAccountResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_assume_role.py b/datadog_api_client/v2/model/aws_assume_role.py new file mode 100644 index 0000000000..4fd63da39f --- /dev/null +++ b/datadog_api_client/v2/model/aws_assume_role.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_assume_role_type import AWSAssumeRoleType + +class AWSAssumeRole(ModelNormal): + validations = { + "account_id": { + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_assume_role_type import AWSAssumeRoleType + return { + "account_id": (str,), + "external_id": (str,), + "principal_id": (str,), + "role": (str,), + "type": (AWSAssumeRoleType,), + } + attribute_map = { + "account_id": "account_id", + "external_id": "external_id", + "principal_id": "principal_id", + "role": "role", + "type": "type", + } + read_only_vars = { + "external_id", + "principal_id", + } + + def __init__(self_, account_id: str, role: str, type: AWSAssumeRoleType, external_id: Union[str, UnsetType]=unset, principal_id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``AWSAssumeRole`` object. + + :param account_id: AWS account the connection is created for + :type account_id: str + + :param external_id: External ID used to scope which connection can be used to assume the role + :type external_id: str, optional + + :param principal_id: AWS account that will assume the role + :type principal_id: str, optional + + :param role: Role to assume + :type role: str + + :param type: The definition of ``AWSAssumeRoleType`` object. + :type type: AWSAssumeRoleType + """ + if external_id is not unset: + kwargs["external_id"] = external_id + if principal_id is not unset: + kwargs["principal_id"] = principal_id + super().__init__(kwargs) + + + self_.account_id = account_id + self_.role = role + self_.type = type diff --git a/datadog_api_client/v2/model/aws_assume_role_type.py b/datadog_api_client/v2/model/aws_assume_role_type.py new file mode 100644 index 0000000000..4add7b4f0f --- /dev/null +++ b/datadog_api_client/v2/model/aws_assume_role_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSAssumeRoleType(ModelSimple): + """ + The definition of `AWSAssumeRoleType` object. + + :param value: If omitted defaults to "AWSAssumeRole". Must be one of ["AWSAssumeRole"]. + :type value: str + """ + + allowed_values = { + "AWSAssumeRole", + } + AWSASSUMEROLE: ClassVar["AWSAssumeRoleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSAssumeRoleType.AWSASSUMEROLE = AWSAssumeRoleType("AWSAssumeRole") diff --git a/datadog_api_client/v2/model/aws_assume_role_update.py b/datadog_api_client/v2/model/aws_assume_role_update.py new file mode 100644 index 0000000000..7885d016fb --- /dev/null +++ b/datadog_api_client/v2/model/aws_assume_role_update.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_assume_role_type import AWSAssumeRoleType + +class AWSAssumeRoleUpdate(ModelNormal): + validations = { + "account_id": { + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_assume_role_type import AWSAssumeRoleType + return { + "account_id": (str,), + "generate_new_external_id": (bool,), + "role": (str,), + "type": (AWSAssumeRoleType,), + } + attribute_map = { + "account_id": "account_id", + "generate_new_external_id": "generate_new_external_id", + "role": "role", + "type": "type", + } + + def __init__(self_, type: AWSAssumeRoleType, account_id: Union[str, UnsetType]=unset, generate_new_external_id: Union[bool, UnsetType]=unset, role: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``AWSAssumeRoleUpdate`` object. + + :param account_id: AWS account the connection is created for + :type account_id: str, optional + + :param generate_new_external_id: The ``AWSAssumeRoleUpdate`` ``generate_new_external_id``. + :type generate_new_external_id: bool, optional + + :param role: Role to assume + :type role: str, optional + + :param type: The definition of ``AWSAssumeRoleType`` object. + :type type: AWSAssumeRoleType + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if generate_new_external_id is not unset: + kwargs["generate_new_external_id"] = generate_new_external_id + if role is not unset: + kwargs["role"] = role + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/aws_auth_config.py b/datadog_api_client/v2/model/aws_auth_config.py new file mode 100644 index 0000000000..10ced69d2e --- /dev/null +++ b/datadog_api_client/v2/model/aws_auth_config.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSAuthConfig(ModelComposed): + + + + def __init__(self, **kwargs): + """ + AWS Authentication config. + + :param access_key_id: AWS Access Key ID. + :type access_key_id: str + + :param secret_access_key: AWS Secret Access Key. + :type secret_access_key: str, optional + + :param external_id: AWS IAM External ID for associated role. + :type external_id: str, optional + + :param role_name: AWS IAM Role name. + :type role_name: str + """ + 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.aws_auth_config_keys import AWSAuthConfigKeys + from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole + return { + "oneOf": [ + AWSAuthConfigKeys, + AWSAuthConfigRole, + ], + } diff --git a/datadog_api_client/v2/model/aws_auth_config_keys.py b/datadog_api_client/v2/model/aws_auth_config_keys.py new file mode 100644 index 0000000000..f180039623 --- /dev/null +++ b/datadog_api_client/v2/model/aws_auth_config_keys.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSAuthConfigKeys(ModelNormal): + validations = { + "secret_access_key": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "access_key_id": (str,), + "secret_access_key": (str,), + } + attribute_map = { + "access_key_id": "access_key_id", + "secret_access_key": "secret_access_key", + } + + def __init__(self_, access_key_id: str, secret_access_key: Union[str, UnsetType]=unset, **kwargs): + """ + AWS Authentication config to integrate your account using an access key pair. + + :param access_key_id: AWS Access Key ID. + :type access_key_id: str + + :param secret_access_key: AWS Secret Access Key. + :type secret_access_key: str, optional + """ + if secret_access_key is not unset: + kwargs["secret_access_key"] = secret_access_key + super().__init__(kwargs) + + + self_.access_key_id = access_key_id diff --git a/datadog_api_client/v2/model/aws_auth_config_role.py b/datadog_api_client/v2/model/aws_auth_config_role.py new file mode 100644 index 0000000000..9b3e30a2cf --- /dev/null +++ b/datadog_api_client/v2/model/aws_auth_config_role.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSAuthConfigRole(ModelNormal): + validations = { + "role_name": { + "max_length": 576, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "external_id": (str,), + "role_name": (str,), + } + attribute_map = { + "external_id": "external_id", + "role_name": "role_name", + } + + def __init__(self_, role_name: str, external_id: Union[str, UnsetType]=unset, **kwargs): + """ + AWS Authentication config to integrate your account using an IAM role. + + :param external_id: AWS IAM External ID for associated role. + :type external_id: str, optional + + :param role_name: AWS IAM Role name. + :type role_name: str + """ + if external_id is not unset: + kwargs["external_id"] = external_id + super().__init__(kwargs) + + + self_.role_name = role_name diff --git a/datadog_api_client/v2/model/aws_ccm_config.py b/datadog_api_client/v2/model/aws_ccm_config.py new file mode 100644 index 0000000000..9c41c68ad2 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_export_config import DataExportConfig + +class AWSCcmConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_export_config import DataExportConfig + return { + "data_export_configs": ([DataExportConfig],), + } + attribute_map = { + "data_export_configs": "data_export_configs", + } + + def __init__(self_, data_export_configs: List[DataExportConfig], **kwargs): + """ + AWS Cloud Cost Management config. + + :param data_export_configs: List of data export configurations for Cost and Usage Reports. + :type data_export_configs: [DataExportConfig] + """ + super().__init__(kwargs) + + + self_.data_export_configs = data_export_configs diff --git a/datadog_api_client/v2/model/aws_ccm_config_request.py b/datadog_api_client/v2/model/aws_ccm_config_request.py new file mode 100644 index 0000000000..7b584ea692 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_request_data import AWSCcmConfigRequestData + +class AWSCcmConfigRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_request_data import AWSCcmConfigRequestData + return { + "data": (AWSCcmConfigRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSCcmConfigRequestData, **kwargs): + """ + AWS CCM Config Create/Update Request body. + + :param data: AWS CCM Config Create/Update Request data. + :type data: AWSCcmConfigRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_ccm_config_request_attributes.py b/datadog_api_client/v2/model/aws_ccm_config_request_attributes.py new file mode 100644 index 0000000000..c9696d1bf8 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_request_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config import AWSCcmConfig + +class AWSCcmConfigRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config import AWSCcmConfig + return { + "ccm_config": (AWSCcmConfig,), + } + attribute_map = { + "ccm_config": "ccm_config", + } + + def __init__(self_, ccm_config: AWSCcmConfig, **kwargs): + """ + AWS CCM Config attributes for Create/Update requests. + + :param ccm_config: AWS Cloud Cost Management config. + :type ccm_config: AWSCcmConfig + """ + super().__init__(kwargs) + + + self_.ccm_config = ccm_config diff --git a/datadog_api_client/v2/model/aws_ccm_config_request_data.py b/datadog_api_client/v2/model/aws_ccm_config_request_data.py new file mode 100644 index 0000000000..476f460a86 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_request_attributes import AWSCcmConfigRequestAttributes + from datadog_api_client.v2.model.aws_ccm_config_type import AWSCcmConfigType + +class AWSCcmConfigRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_request_attributes import AWSCcmConfigRequestAttributes + from datadog_api_client.v2.model.aws_ccm_config_type import AWSCcmConfigType + return { + "attributes": (AWSCcmConfigRequestAttributes,), + "type": (AWSCcmConfigType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AWSCcmConfigRequestAttributes, type: AWSCcmConfigType, **kwargs): + """ + AWS CCM Config Create/Update Request data. + + :param attributes: AWS CCM Config attributes for Create/Update requests. + :type attributes: AWSCcmConfigRequestAttributes + + :param type: AWS CCM Config resource type. + :type type: AWSCcmConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_ccm_config_response.py b/datadog_api_client/v2/model/aws_ccm_config_response.py new file mode 100644 index 0000000000..c17b1cc895 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_response_data import AWSCcmConfigResponseData + +class AWSCcmConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_response_data import AWSCcmConfigResponseData + return { + "data": (AWSCcmConfigResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSCcmConfigResponseData, **kwargs): + """ + AWS CCM Config response body. + + :param data: AWS CCM Config response data. + :type data: AWSCcmConfigResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_ccm_config_response_attributes.py b/datadog_api_client/v2/model/aws_ccm_config_response_attributes.py new file mode 100644 index 0000000000..3747eab52b --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_export_config import DataExportConfig + +class AWSCcmConfigResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_export_config import DataExportConfig + return { + "data_export_configs": ([DataExportConfig],), + } + attribute_map = { + "data_export_configs": "data_export_configs", + } + + def __init__(self_, data_export_configs: Union[List[DataExportConfig], UnsetType]=unset, **kwargs): + """ + AWS CCM Config response attributes. + + :param data_export_configs: List of data export configurations for Cost and Usage Reports. + :type data_export_configs: [DataExportConfig], optional + """ + if data_export_configs is not unset: + kwargs["data_export_configs"] = data_export_configs + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_ccm_config_response_data.py b/datadog_api_client/v2/model/aws_ccm_config_response_data.py new file mode 100644 index 0000000000..94aa7663e1 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_response_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_response_attributes import AWSCcmConfigResponseAttributes + from datadog_api_client.v2.model.aws_ccm_config_type import AWSCcmConfigType + +class AWSCcmConfigResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_response_attributes import AWSCcmConfigResponseAttributes + from datadog_api_client.v2.model.aws_ccm_config_type import AWSCcmConfigType + return { + "attributes": (AWSCcmConfigResponseAttributes,), + "id": (str,), + "type": (AWSCcmConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: AWSCcmConfigType, attributes: Union[AWSCcmConfigResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + AWS CCM Config response data. + + :param attributes: AWS CCM Config response attributes. + :type attributes: AWSCcmConfigResponseAttributes, optional + + :param id: Unique Datadog ID of the AWS Account Integration Config. + To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type id: str, optional + + :param type: AWS CCM Config resource type. + :type type: AWSCcmConfigType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/aws_ccm_config_type.py b/datadog_api_client/v2/model/aws_ccm_config_type.py new file mode 100644 index 0000000000..30372125e4 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSCcmConfigType(ModelSimple): + """ + AWS CCM Config resource type. + + :param value: If omitted defaults to "ccm_config". Must be one of ["ccm_config"]. + :type value: str + """ + + allowed_values = { + "ccm_config", + } + CCM_CONFIG: ClassVar["AWSCcmConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSCcmConfigType.CCM_CONFIG = AWSCcmConfigType("ccm_config") diff --git a/datadog_api_client/v2/model/aws_ccm_config_validation_issue.py b/datadog_api_client/v2/model/aws_ccm_config_validation_issue.py new file mode 100644 index 0000000000..21e0057e21 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_validation_issue.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_validation_issue_code import AWSCcmConfigValidationIssueCode + +class AWSCcmConfigValidationIssue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_validation_issue_code import AWSCcmConfigValidationIssueCode + return { + "code": (AWSCcmConfigValidationIssueCode,), + "description": (str,), + } + attribute_map = { + "code": "code", + "description": "description", + } + + def __init__(self_, code: AWSCcmConfigValidationIssueCode, description: str, **kwargs): + """ + A single validation issue found while validating an AWS Cost and Usage Report (CUR) 2.0 configuration. + + :param code: Identifies the specific reason a Cost and Usage Report (CUR) 2.0 configuration failed validation. + :type code: AWSCcmConfigValidationIssueCode + + :param description: Human-readable description of the validation issue. + :type description: str + """ + super().__init__(kwargs) + + + self_.code = code + self_.description = description diff --git a/datadog_api_client/v2/model/aws_ccm_config_validation_issue_code.py b/datadog_api_client/v2/model/aws_ccm_config_validation_issue_code.py new file mode 100644 index 0000000000..628a92d5fb --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_validation_issue_code.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSCcmConfigValidationIssueCode(ModelSimple): + """ + Identifies the specific reason a Cost and Usage Report (CUR) 2.0 configuration failed validation. + + :param value: Must be one of ["ISSUE_CODE_UNSPECIFIED", "CREDENTIAL_ERROR", "BUCKET_NAME_INVALID_GOVCLOUD", "S3_LIST_PERMISSION_MISSING", "S3_GET_PERMISSION_MISSING", "S3_BUCKET_REGION_MISMATCH", "S3_BUCKET_NOT_ACCESSIBLE", "EXPORT_LIST_PERMISSION_MISSING", "EXPORT_GET_PERMISSION_MISSING", "EXPORT_NOT_FOUND", "EXPORT_STATUS_UNHEALTHY", "TIME_GRANULARITY_INVALID", "FILE_FORMAT_INVALID", "INCLUDE_RESOURCES_DISABLED", "REFRESH_CADENCE_INVALID", "OVERWRITE_MODE_INVALID", "QUERY_STATEMENT_INVALID"]. + :type value: str + """ + + allowed_values = { + "ISSUE_CODE_UNSPECIFIED", + "CREDENTIAL_ERROR", + "BUCKET_NAME_INVALID_GOVCLOUD", + "S3_LIST_PERMISSION_MISSING", + "S3_GET_PERMISSION_MISSING", + "S3_BUCKET_REGION_MISMATCH", + "S3_BUCKET_NOT_ACCESSIBLE", + "EXPORT_LIST_PERMISSION_MISSING", + "EXPORT_GET_PERMISSION_MISSING", + "EXPORT_NOT_FOUND", + "EXPORT_STATUS_UNHEALTHY", + "TIME_GRANULARITY_INVALID", + "FILE_FORMAT_INVALID", + "INCLUDE_RESOURCES_DISABLED", + "REFRESH_CADENCE_INVALID", + "OVERWRITE_MODE_INVALID", + "QUERY_STATEMENT_INVALID", + } + ISSUE_CODE_UNSPECIFIED: ClassVar["AWSCcmConfigValidationIssueCode"] + CREDENTIAL_ERROR: ClassVar["AWSCcmConfigValidationIssueCode"] + BUCKET_NAME_INVALID_GOVCLOUD: ClassVar["AWSCcmConfigValidationIssueCode"] + S3_LIST_PERMISSION_MISSING: ClassVar["AWSCcmConfigValidationIssueCode"] + S3_GET_PERMISSION_MISSING: ClassVar["AWSCcmConfigValidationIssueCode"] + S3_BUCKET_REGION_MISMATCH: ClassVar["AWSCcmConfigValidationIssueCode"] + S3_BUCKET_NOT_ACCESSIBLE: ClassVar["AWSCcmConfigValidationIssueCode"] + EXPORT_LIST_PERMISSION_MISSING: ClassVar["AWSCcmConfigValidationIssueCode"] + EXPORT_GET_PERMISSION_MISSING: ClassVar["AWSCcmConfigValidationIssueCode"] + EXPORT_NOT_FOUND: ClassVar["AWSCcmConfigValidationIssueCode"] + EXPORT_STATUS_UNHEALTHY: ClassVar["AWSCcmConfigValidationIssueCode"] + TIME_GRANULARITY_INVALID: ClassVar["AWSCcmConfigValidationIssueCode"] + FILE_FORMAT_INVALID: ClassVar["AWSCcmConfigValidationIssueCode"] + INCLUDE_RESOURCES_DISABLED: ClassVar["AWSCcmConfigValidationIssueCode"] + REFRESH_CADENCE_INVALID: ClassVar["AWSCcmConfigValidationIssueCode"] + OVERWRITE_MODE_INVALID: ClassVar["AWSCcmConfigValidationIssueCode"] + QUERY_STATEMENT_INVALID: ClassVar["AWSCcmConfigValidationIssueCode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSCcmConfigValidationIssueCode.ISSUE_CODE_UNSPECIFIED = AWSCcmConfigValidationIssueCode("ISSUE_CODE_UNSPECIFIED") +AWSCcmConfigValidationIssueCode.CREDENTIAL_ERROR = AWSCcmConfigValidationIssueCode("CREDENTIAL_ERROR") +AWSCcmConfigValidationIssueCode.BUCKET_NAME_INVALID_GOVCLOUD = AWSCcmConfigValidationIssueCode("BUCKET_NAME_INVALID_GOVCLOUD") +AWSCcmConfigValidationIssueCode.S3_LIST_PERMISSION_MISSING = AWSCcmConfigValidationIssueCode("S3_LIST_PERMISSION_MISSING") +AWSCcmConfigValidationIssueCode.S3_GET_PERMISSION_MISSING = AWSCcmConfigValidationIssueCode("S3_GET_PERMISSION_MISSING") +AWSCcmConfigValidationIssueCode.S3_BUCKET_REGION_MISMATCH = AWSCcmConfigValidationIssueCode("S3_BUCKET_REGION_MISMATCH") +AWSCcmConfigValidationIssueCode.S3_BUCKET_NOT_ACCESSIBLE = AWSCcmConfigValidationIssueCode("S3_BUCKET_NOT_ACCESSIBLE") +AWSCcmConfigValidationIssueCode.EXPORT_LIST_PERMISSION_MISSING = AWSCcmConfigValidationIssueCode("EXPORT_LIST_PERMISSION_MISSING") +AWSCcmConfigValidationIssueCode.EXPORT_GET_PERMISSION_MISSING = AWSCcmConfigValidationIssueCode("EXPORT_GET_PERMISSION_MISSING") +AWSCcmConfigValidationIssueCode.EXPORT_NOT_FOUND = AWSCcmConfigValidationIssueCode("EXPORT_NOT_FOUND") +AWSCcmConfigValidationIssueCode.EXPORT_STATUS_UNHEALTHY = AWSCcmConfigValidationIssueCode("EXPORT_STATUS_UNHEALTHY") +AWSCcmConfigValidationIssueCode.TIME_GRANULARITY_INVALID = AWSCcmConfigValidationIssueCode("TIME_GRANULARITY_INVALID") +AWSCcmConfigValidationIssueCode.FILE_FORMAT_INVALID = AWSCcmConfigValidationIssueCode("FILE_FORMAT_INVALID") +AWSCcmConfigValidationIssueCode.INCLUDE_RESOURCES_DISABLED = AWSCcmConfigValidationIssueCode("INCLUDE_RESOURCES_DISABLED") +AWSCcmConfigValidationIssueCode.REFRESH_CADENCE_INVALID = AWSCcmConfigValidationIssueCode("REFRESH_CADENCE_INVALID") +AWSCcmConfigValidationIssueCode.OVERWRITE_MODE_INVALID = AWSCcmConfigValidationIssueCode("OVERWRITE_MODE_INVALID") +AWSCcmConfigValidationIssueCode.QUERY_STATEMENT_INVALID = AWSCcmConfigValidationIssueCode("QUERY_STATEMENT_INVALID") diff --git a/datadog_api_client/v2/model/aws_ccm_config_validation_request.py b/datadog_api_client/v2/model/aws_ccm_config_validation_request.py new file mode 100644 index 0000000000..3125338067 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_validation_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_validation_request_data import AWSCcmConfigValidationRequestData + +class AWSCcmConfigValidationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_validation_request_data import AWSCcmConfigValidationRequestData + return { + "data": (AWSCcmConfigValidationRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSCcmConfigValidationRequestData, **kwargs): + """ + AWS CCM config validation request body. + + :param data: AWS CCM config validation request data. + :type data: AWSCcmConfigValidationRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_ccm_config_validation_request_attributes.py b/datadog_api_client/v2/model/aws_ccm_config_validation_request_attributes.py new file mode 100644 index 0000000000..bbfbe85334 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_validation_request_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSCcmConfigValidationRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "bucket_name": (str,), + "bucket_region": (str,), + "report_name": (str,), + "report_prefix": (str,), + } + attribute_map = { + "account_id": "account_id", + "bucket_name": "bucket_name", + "bucket_region": "bucket_region", + "report_name": "report_name", + "report_prefix": "report_prefix", + } + + def __init__(self_, account_id: str, bucket_name: str, bucket_region: str, report_name: str, report_prefix: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for an AWS CCM config validation request. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str + + :param bucket_name: Name of the S3 bucket where the Cost and Usage Report is stored. + :type bucket_name: str + + :param bucket_region: AWS region of the S3 bucket. + :type bucket_region: str + + :param report_name: Name of the Cost and Usage Report. + :type report_name: str + + :param report_prefix: S3 prefix where the Cost and Usage Report is stored. + :type report_prefix: str, optional + """ + if report_prefix is not unset: + kwargs["report_prefix"] = report_prefix + super().__init__(kwargs) + + + self_.account_id = account_id + self_.bucket_name = bucket_name + self_.bucket_region = bucket_region + self_.report_name = report_name diff --git a/datadog_api_client/v2/model/aws_ccm_config_validation_request_data.py b/datadog_api_client/v2/model/aws_ccm_config_validation_request_data.py new file mode 100644 index 0000000000..a93f09cfb3 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_validation_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_validation_request_attributes import AWSCcmConfigValidationRequestAttributes + from datadog_api_client.v2.model.aws_ccm_config_validation_type import AWSCcmConfigValidationType + +class AWSCcmConfigValidationRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_validation_request_attributes import AWSCcmConfigValidationRequestAttributes + from datadog_api_client.v2.model.aws_ccm_config_validation_type import AWSCcmConfigValidationType + return { + "attributes": (AWSCcmConfigValidationRequestAttributes,), + "type": (AWSCcmConfigValidationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AWSCcmConfigValidationRequestAttributes, type: AWSCcmConfigValidationType, **kwargs): + """ + AWS CCM config validation request data. + + :param attributes: Attributes for an AWS CCM config validation request. + :type attributes: AWSCcmConfigValidationRequestAttributes + + :param type: AWS CCM config validation resource type. + :type type: AWSCcmConfigValidationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_ccm_config_validation_response.py b/datadog_api_client/v2/model/aws_ccm_config_validation_response.py new file mode 100644 index 0000000000..dca6195e96 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_validation_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_validation_response_data import AWSCcmConfigValidationResponseData + +class AWSCcmConfigValidationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_validation_response_data import AWSCcmConfigValidationResponseData + return { + "data": (AWSCcmConfigValidationResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSCcmConfigValidationResponseData, **kwargs): + """ + AWS CCM config validation response body. + + :param data: AWS CCM config validation response data. + :type data: AWSCcmConfigValidationResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_ccm_config_validation_response_attributes.py b/datadog_api_client/v2/model/aws_ccm_config_validation_response_attributes.py new file mode 100644 index 0000000000..9f06d15846 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_validation_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_validation_issue import AWSCcmConfigValidationIssue + +class AWSCcmConfigValidationResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_validation_issue import AWSCcmConfigValidationIssue + return { + "account_id": (str,), + "issues": ([AWSCcmConfigValidationIssue],), + } + attribute_map = { + "account_id": "account_id", + "issues": "issues", + } + + def __init__(self_, account_id: str, issues: List[AWSCcmConfigValidationIssue], **kwargs): + """ + Attributes for an AWS CCM config validation response. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str + + :param issues: List of validation issues found for the Cost and Usage Report (CUR) 2.0 configuration. Empty when the configuration is valid. + :type issues: [AWSCcmConfigValidationIssue] + """ + super().__init__(kwargs) + + + self_.account_id = account_id + self_.issues = issues diff --git a/datadog_api_client/v2/model/aws_ccm_config_validation_response_data.py b/datadog_api_client/v2/model/aws_ccm_config_validation_response_data.py new file mode 100644 index 0000000000..0bd90346f0 --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_validation_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_ccm_config_validation_response_attributes import AWSCcmConfigValidationResponseAttributes + from datadog_api_client.v2.model.aws_ccm_config_validation_type import AWSCcmConfigValidationType + +class AWSCcmConfigValidationResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_ccm_config_validation_response_attributes import AWSCcmConfigValidationResponseAttributes + from datadog_api_client.v2.model.aws_ccm_config_validation_type import AWSCcmConfigValidationType + return { + "attributes": (AWSCcmConfigValidationResponseAttributes,), + "id": (str,), + "type": (AWSCcmConfigValidationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AWSCcmConfigValidationResponseAttributes, id: str, type: AWSCcmConfigValidationType, **kwargs): + """ + AWS CCM config validation response data. + + :param attributes: Attributes for an AWS CCM config validation response. + :type attributes: AWSCcmConfigValidationResponseAttributes + + :param id: AWS CCM config validation resource identifier. + :type id: str + + :param type: AWS CCM config validation resource type. + :type type: AWSCcmConfigValidationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_ccm_config_validation_type.py b/datadog_api_client/v2/model/aws_ccm_config_validation_type.py new file mode 100644 index 0000000000..c1eb6cae2a --- /dev/null +++ b/datadog_api_client/v2/model/aws_ccm_config_validation_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSCcmConfigValidationType(ModelSimple): + """ + AWS CCM config validation resource type. + + :param value: If omitted defaults to "ccm_config_validation". Must be one of ["ccm_config_validation"]. + :type value: str + """ + + allowed_values = { + "ccm_config_validation", + } + CCM_CONFIG_VALIDATION: ClassVar["AWSCcmConfigValidationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSCcmConfigValidationType.CCM_CONFIG_VALIDATION = AWSCcmConfigValidationType("ccm_config_validation") diff --git a/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_attributes_response.py b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_attributes_response.py new file mode 100644 index 0000000000..03a8bd6daa --- /dev/null +++ b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_attributes_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSCloudAuthPersonaMappingAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_identifier": (str,), + "account_uuid": (str,), + "arn_pattern": (str,), + } + attribute_map = { + "account_identifier": "account_identifier", + "account_uuid": "account_uuid", + "arn_pattern": "arn_pattern", + } + + def __init__(self_, account_identifier: str, account_uuid: str, arn_pattern: str, **kwargs): + """ + Attributes for AWS cloud authentication persona mapping response + + :param account_identifier: Datadog account identifier (email or handle) mapped to the AWS principal + :type account_identifier: str + + :param account_uuid: Datadog account UUID + :type account_uuid: str + + :param arn_pattern: AWS IAM ARN pattern to match for authentication + :type arn_pattern: str + """ + super().__init__(kwargs) + + + self_.account_identifier = account_identifier + self_.account_uuid = account_uuid + self_.arn_pattern = arn_pattern diff --git a/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_create_attributes.py b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_create_attributes.py new file mode 100644 index 0000000000..a8f9dcb591 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_create_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSCloudAuthPersonaMappingCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_identifier": (str,), + "arn_pattern": (str,), + } + attribute_map = { + "account_identifier": "account_identifier", + "arn_pattern": "arn_pattern", + } + + def __init__(self_, account_identifier: str, arn_pattern: str, **kwargs): + """ + Attributes for creating an AWS cloud authentication persona mapping + + :param account_identifier: Datadog account identifier (email or handle) mapped to the AWS principal + :type account_identifier: str + + :param arn_pattern: AWS IAM ARN pattern to match for authentication + :type arn_pattern: str + """ + super().__init__(kwargs) + + + self_.account_identifier = account_identifier + self_.arn_pattern = arn_pattern diff --git a/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_create_data.py b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_create_data.py new file mode 100644 index 0000000000..bc9d9beef3 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_create_attributes import AWSCloudAuthPersonaMappingCreateAttributes + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_type import AWSCloudAuthPersonaMappingType + +class AWSCloudAuthPersonaMappingCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_create_attributes import AWSCloudAuthPersonaMappingCreateAttributes + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_type import AWSCloudAuthPersonaMappingType + return { + "attributes": (AWSCloudAuthPersonaMappingCreateAttributes,), + "type": (AWSCloudAuthPersonaMappingType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AWSCloudAuthPersonaMappingCreateAttributes, type: AWSCloudAuthPersonaMappingType, **kwargs): + """ + Data for creating an AWS cloud authentication persona mapping + + :param attributes: Attributes for creating an AWS cloud authentication persona mapping + :type attributes: AWSCloudAuthPersonaMappingCreateAttributes + + :param type: Type identifier for AWS cloud authentication persona mapping + :type type: AWSCloudAuthPersonaMappingType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_create_request.py b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_create_request.py new file mode 100644 index 0000000000..dc74922841 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_create_data import AWSCloudAuthPersonaMappingCreateData + +class AWSCloudAuthPersonaMappingCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_create_data import AWSCloudAuthPersonaMappingCreateData + return { + "data": (AWSCloudAuthPersonaMappingCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSCloudAuthPersonaMappingCreateData, **kwargs): + """ + Request used to create an AWS cloud authentication persona mapping + + :param data: Data for creating an AWS cloud authentication persona mapping + :type data: AWSCloudAuthPersonaMappingCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_data_response.py b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_data_response.py new file mode 100644 index 0000000000..6b3443f0dc --- /dev/null +++ b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_attributes_response import AWSCloudAuthPersonaMappingAttributesResponse + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_type import AWSCloudAuthPersonaMappingType + +class AWSCloudAuthPersonaMappingDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_attributes_response import AWSCloudAuthPersonaMappingAttributesResponse + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_type import AWSCloudAuthPersonaMappingType + return { + "attributes": (AWSCloudAuthPersonaMappingAttributesResponse,), + "id": (str,), + "type": (AWSCloudAuthPersonaMappingType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AWSCloudAuthPersonaMappingAttributesResponse, id: str, type: AWSCloudAuthPersonaMappingType, **kwargs): + """ + Data for AWS cloud authentication persona mapping response + + :param attributes: Attributes for AWS cloud authentication persona mapping response + :type attributes: AWSCloudAuthPersonaMappingAttributesResponse + + :param id: Unique identifier for the persona mapping + :type id: str + + :param type: Type identifier for AWS cloud authentication persona mapping + :type type: AWSCloudAuthPersonaMappingType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_response.py b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_response.py new file mode 100644 index 0000000000..a3a6e9c9f8 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_data_response import AWSCloudAuthPersonaMappingDataResponse + +class AWSCloudAuthPersonaMappingResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_data_response import AWSCloudAuthPersonaMappingDataResponse + return { + "data": (AWSCloudAuthPersonaMappingDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSCloudAuthPersonaMappingDataResponse, **kwargs): + """ + Response containing a single AWS cloud authentication persona mapping + + :param data: Data for AWS cloud authentication persona mapping response + :type data: AWSCloudAuthPersonaMappingDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_type.py b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_type.py new file mode 100644 index 0000000000..46561bb7c7 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cloud_auth_persona_mapping_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSCloudAuthPersonaMappingType(ModelSimple): + """ + Type identifier for AWS cloud authentication persona mapping + + :param value: If omitted defaults to "aws_cloud_auth_config". Must be one of ["aws_cloud_auth_config"]. + :type value: str + """ + + allowed_values = { + "aws_cloud_auth_config", + } + AWS_CLOUD_AUTH_CONFIG: ClassVar["AWSCloudAuthPersonaMappingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSCloudAuthPersonaMappingType.AWS_CLOUD_AUTH_CONFIG = AWSCloudAuthPersonaMappingType("aws_cloud_auth_config") diff --git a/datadog_api_client/v2/model/aws_cloud_auth_persona_mappings_response.py b/datadog_api_client/v2/model/aws_cloud_auth_persona_mappings_response.py new file mode 100644 index 0000000000..f717898c7b --- /dev/null +++ b/datadog_api_client/v2/model/aws_cloud_auth_persona_mappings_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_data_response import AWSCloudAuthPersonaMappingDataResponse + +class AWSCloudAuthPersonaMappingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_data_response import AWSCloudAuthPersonaMappingDataResponse + return { + "data": ([AWSCloudAuthPersonaMappingDataResponse],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AWSCloudAuthPersonaMappingDataResponse], **kwargs): + """ + Response containing a list of AWS cloud authentication persona mappings + + :param data: List of AWS cloud authentication persona mappings + :type data: [AWSCloudAuthPersonaMappingDataResponse] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_credentials.py b/datadog_api_client/v2/model/aws_credentials.py new file mode 100644 index 0000000000..f679e6bb87 --- /dev/null +++ b/datadog_api_client/v2/model/aws_credentials.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of ``AWSCredentials`` object. + + :param account_id: AWS account the connection is created for + :type account_id: str + + :param external_id: External ID used to scope which connection can be used to assume the role + :type external_id: str, optional + + :param principal_id: AWS account that will assume the role + :type principal_id: str, optional + + :param role: Role to assume + :type role: str + + :param type: The definition of `AWSAssumeRoleType` object. + :type type: AWSAssumeRoleType + """ + 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.aws_assume_role import AWSAssumeRole + return { + "oneOf": [ + AWSAssumeRole, + ], + } diff --git a/datadog_api_client/v2/model/aws_credentials_update.py b/datadog_api_client/v2/model/aws_credentials_update.py new file mode 100644 index 0000000000..7b8e474112 --- /dev/null +++ b/datadog_api_client/v2/model/aws_credentials_update.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of ``AWSCredentialsUpdate`` object. + + :param account_id: AWS account the connection is created for + :type account_id: str, optional + + :param generate_new_external_id: The `AWSAssumeRoleUpdate` `generate_new_external_id`. + :type generate_new_external_id: bool, optional + + :param role: Role to assume + :type role: str, optional + + :param type: The definition of `AWSAssumeRoleType` object. + :type type: AWSAssumeRoleType + """ + 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.aws_assume_role_update import AWSAssumeRoleUpdate + return { + "oneOf": [ + AWSAssumeRoleUpdate, + ], + } diff --git a/datadog_api_client/v2/model/aws_cur_config.py b/datadog_api_client/v2/model/aws_cur_config.py new file mode 100644 index 0000000000..bcf7fd4a3d --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cur_config_attributes import AwsCURConfigAttributes + from datadog_api_client.v2.model.aws_cur_config_type import AwsCURConfigType + +class AwsCURConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cur_config_attributes import AwsCURConfigAttributes + from datadog_api_client.v2.model.aws_cur_config_type import AwsCURConfigType + return { + "attributes": (AwsCURConfigAttributes,), + "id": (str,), + "type": (AwsCURConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AwsCURConfigAttributes, type: AwsCURConfigType, id: Union[str, UnsetType]=unset, **kwargs): + """ + AWS CUR config. + + :param attributes: Attributes for An AWS CUR config. + :type attributes: AwsCURConfigAttributes + + :param id: The ID of the AWS CUR config. + :type id: str, optional + + :param type: Type of AWS CUR config. + :type type: AwsCURConfigType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_cur_config_attributes.py b/datadog_api_client/v2/model/aws_cur_config_attributes.py new file mode 100644 index 0000000000..1650673cc6 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_attributes.py @@ -0,0 +1,131 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + +class AwsCURConfigAttributes(ModelNormal): + validations = { + "created_at": { + }, + "months": { + "inclusive_maximum": 36, + }, + "status_updated_at": { + }, + "updated_at": { + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + return { + "account_filters": (AccountFilteringConfig,), + "account_id": (str,), + "bucket_name": (str,), + "bucket_region": (str,), + "created_at": (str,), + "error_messages": ([str], none_type), + "months": (int,), + "report_name": (str,), + "report_prefix": (str,), + "status": (str,), + "status_updated_at": (str,), + "updated_at": (str,), + } + attribute_map = { + "account_filters": "account_filters", + "account_id": "account_id", + "bucket_name": "bucket_name", + "bucket_region": "bucket_region", + "created_at": "created_at", + "error_messages": "error_messages", + "months": "months", + "report_name": "report_name", + "report_prefix": "report_prefix", + "status": "status", + "status_updated_at": "status_updated_at", + "updated_at": "updated_at", + } + + def __init__(self_, account_id: str, bucket_name: str, bucket_region: str, report_name: str, report_prefix: str, status: str, account_filters: Union[AccountFilteringConfig, UnsetType]=unset, created_at: Union[str, UnsetType]=unset, error_messages: Union[List[str], none_type, UnsetType]=unset, months: Union[int, UnsetType]=unset, status_updated_at: Union[str, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for An AWS CUR config. + + :param account_filters: The account filtering configuration. + :type account_filters: AccountFilteringConfig, optional + + :param account_id: The AWS account ID. + :type account_id: str + + :param bucket_name: The AWS bucket name used to store the Cost and Usage Report. + :type bucket_name: str + + :param bucket_region: The region the bucket is located in. + :type bucket_region: str + + :param created_at: The timestamp when the AWS CUR config was created. + :type created_at: str, optional + + :param error_messages: The error messages for the AWS CUR config. + :type error_messages: [str], none_type, optional + + :param months: The number of months the report has been backfilled. **Deprecated**. + :type months: int, optional + + :param report_name: The name of the Cost and Usage Report. + :type report_name: str + + :param report_prefix: The report prefix used for the Cost and Usage Report. + :type report_prefix: str + + :param status: The status of the AWS CUR. + :type status: str + + :param status_updated_at: The timestamp when the AWS CUR config status was updated. + :type status_updated_at: str, optional + + :param updated_at: The timestamp when the AWS CUR config status was updated. + :type updated_at: str, optional + """ + if account_filters is not unset: + kwargs["account_filters"] = account_filters + if created_at is not unset: + kwargs["created_at"] = created_at + if error_messages is not unset: + kwargs["error_messages"] = error_messages + if months is not unset: + kwargs["months"] = months + if status_updated_at is not unset: + kwargs["status_updated_at"] = status_updated_at + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.account_id = account_id + self_.bucket_name = bucket_name + self_.bucket_region = bucket_region + self_.report_name = report_name + self_.report_prefix = report_prefix + self_.status = status diff --git a/datadog_api_client/v2/model/aws_cur_config_patch_data.py b/datadog_api_client/v2/model/aws_cur_config_patch_data.py new file mode 100644 index 0000000000..2dfe8b9d04 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_patch_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cur_config_patch_request_attributes import AwsCURConfigPatchRequestAttributes + from datadog_api_client.v2.model.aws_cur_config_patch_request_type import AwsCURConfigPatchRequestType + +class AwsCURConfigPatchData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cur_config_patch_request_attributes import AwsCURConfigPatchRequestAttributes + from datadog_api_client.v2.model.aws_cur_config_patch_request_type import AwsCURConfigPatchRequestType + return { + "attributes": (AwsCURConfigPatchRequestAttributes,), + "type": (AwsCURConfigPatchRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AwsCURConfigPatchRequestAttributes, type: AwsCURConfigPatchRequestType, **kwargs): + """ + AWS CUR config Patch data. + + :param attributes: Attributes for AWS CUR config Patch Request. + :type attributes: AwsCURConfigPatchRequestAttributes + + :param type: Type of AWS CUR config Patch Request. + :type type: AwsCURConfigPatchRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_cur_config_patch_request.py b/datadog_api_client/v2/model/aws_cur_config_patch_request.py new file mode 100644 index 0000000000..acf18fbd87 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cur_config_patch_data import AwsCURConfigPatchData + +class AwsCURConfigPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cur_config_patch_data import AwsCURConfigPatchData + return { + "data": (AwsCURConfigPatchData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AwsCURConfigPatchData, **kwargs): + """ + AWS CUR config Patch Request. + + :param data: AWS CUR config Patch data. + :type data: AwsCURConfigPatchData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_cur_config_patch_request_attributes.py b/datadog_api_client/v2/model/aws_cur_config_patch_request_attributes.py new file mode 100644 index 0000000000..d605f11941 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_patch_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + +class AwsCURConfigPatchRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + return { + "account_filters": (AccountFilteringConfig,), + "is_enabled": (bool,), + } + attribute_map = { + "account_filters": "account_filters", + "is_enabled": "is_enabled", + } + + def __init__(self_, account_filters: Union[AccountFilteringConfig, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for AWS CUR config Patch Request. + + :param account_filters: The account filtering configuration. + :type account_filters: AccountFilteringConfig, optional + + :param is_enabled: Whether or not the Cloud Cost Management account is enabled. + :type is_enabled: bool, optional + """ + if account_filters is not unset: + kwargs["account_filters"] = account_filters + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_cur_config_patch_request_type.py b/datadog_api_client/v2/model/aws_cur_config_patch_request_type.py new file mode 100644 index 0000000000..a8e084710d --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_patch_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AwsCURConfigPatchRequestType(ModelSimple): + """ + Type of AWS CUR config Patch Request. + + :param value: If omitted defaults to "aws_cur_config_patch_request". Must be one of ["aws_cur_config_patch_request"]. + :type value: str + """ + + allowed_values = { + "aws_cur_config_patch_request", + } + AWS_CUR_CONFIG_PATCH_REQUEST: ClassVar["AwsCURConfigPatchRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AwsCURConfigPatchRequestType.AWS_CUR_CONFIG_PATCH_REQUEST = AwsCURConfigPatchRequestType("aws_cur_config_patch_request") diff --git a/datadog_api_client/v2/model/aws_cur_config_post_data.py b/datadog_api_client/v2/model/aws_cur_config_post_data.py new file mode 100644 index 0000000000..e678c9dae3 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_post_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cur_config_post_request_attributes import AwsCURConfigPostRequestAttributes + from datadog_api_client.v2.model.aws_cur_config_post_request_type import AwsCURConfigPostRequestType + +class AwsCURConfigPostData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cur_config_post_request_attributes import AwsCURConfigPostRequestAttributes + from datadog_api_client.v2.model.aws_cur_config_post_request_type import AwsCURConfigPostRequestType + return { + "attributes": (AwsCURConfigPostRequestAttributes,), + "type": (AwsCURConfigPostRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: AwsCURConfigPostRequestType, attributes: Union[AwsCURConfigPostRequestAttributes, UnsetType]=unset, **kwargs): + """ + AWS CUR config Post data. + + :param attributes: Attributes for AWS CUR config Post Request. + :type attributes: AwsCURConfigPostRequestAttributes, optional + + :param type: Type of AWS CUR config Post Request. + :type type: AwsCURConfigPostRequestType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/aws_cur_config_post_request.py b/datadog_api_client/v2/model/aws_cur_config_post_request.py new file mode 100644 index 0000000000..2f85a91cb3 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_post_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cur_config_post_data import AwsCURConfigPostData + +class AwsCURConfigPostRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cur_config_post_data import AwsCURConfigPostData + return { + "data": (AwsCURConfigPostData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AwsCURConfigPostData, **kwargs): + """ + AWS CUR config Post Request. + + :param data: AWS CUR config Post data. + :type data: AwsCURConfigPostData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_cur_config_post_request_attributes.py b/datadog_api_client/v2/model/aws_cur_config_post_request_attributes.py new file mode 100644 index 0000000000..607e8ccaa5 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_post_request_attributes.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + +class AwsCURConfigPostRequestAttributes(ModelNormal): + validations = { + "months": { + "inclusive_maximum": 36, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig + return { + "account_filters": (AccountFilteringConfig,), + "account_id": (str,), + "bucket_name": (str,), + "bucket_region": (str,), + "months": (int,), + "report_name": (str,), + "report_prefix": (str,), + } + attribute_map = { + "account_filters": "account_filters", + "account_id": "account_id", + "bucket_name": "bucket_name", + "bucket_region": "bucket_region", + "months": "months", + "report_name": "report_name", + "report_prefix": "report_prefix", + } + + def __init__(self_, account_id: str, bucket_name: str, report_name: str, report_prefix: str, account_filters: Union[AccountFilteringConfig, UnsetType]=unset, bucket_region: Union[str, UnsetType]=unset, months: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for AWS CUR config Post Request. + + :param account_filters: The account filtering configuration. + :type account_filters: AccountFilteringConfig, optional + + :param account_id: The AWS account ID. + :type account_id: str + + :param bucket_name: The AWS bucket name used to store the Cost and Usage Report. + :type bucket_name: str + + :param bucket_region: The region the bucket is located in. + :type bucket_region: str, optional + + :param months: The month of the report. + :type months: int, optional + + :param report_name: The name of the Cost and Usage Report. + :type report_name: str + + :param report_prefix: The report prefix used for the Cost and Usage Report. + :type report_prefix: str + """ + if account_filters is not unset: + kwargs["account_filters"] = account_filters + if bucket_region is not unset: + kwargs["bucket_region"] = bucket_region + if months is not unset: + kwargs["months"] = months + super().__init__(kwargs) + + + self_.account_id = account_id + self_.bucket_name = bucket_name + self_.report_name = report_name + self_.report_prefix = report_prefix diff --git a/datadog_api_client/v2/model/aws_cur_config_post_request_type.py b/datadog_api_client/v2/model/aws_cur_config_post_request_type.py new file mode 100644 index 0000000000..c386b59ca2 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_post_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AwsCURConfigPostRequestType(ModelSimple): + """ + Type of AWS CUR config Post Request. + + :param value: If omitted defaults to "aws_cur_config_post_request". Must be one of ["aws_cur_config_post_request"]. + :type value: str + """ + + allowed_values = { + "aws_cur_config_post_request", + } + AWS_CUR_CONFIG_POST_REQUEST: ClassVar["AwsCURConfigPostRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AwsCURConfigPostRequestType.AWS_CUR_CONFIG_POST_REQUEST = AwsCURConfigPostRequestType("aws_cur_config_post_request") diff --git a/datadog_api_client/v2/model/aws_cur_config_response.py b/datadog_api_client/v2/model/aws_cur_config_response.py new file mode 100644 index 0000000000..2910030de2 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cur_config_response_data import AwsCurConfigResponseData + +class AwsCurConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cur_config_response_data import AwsCurConfigResponseData + return { + "data": (AwsCurConfigResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AwsCurConfigResponseData, UnsetType]=unset, **kwargs): + """ + The definition of ``AwsCurConfigResponse`` object. + + :param data: The definition of ``AwsCurConfigResponseData`` object. + :type data: AwsCurConfigResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_cur_config_response_data.py b/datadog_api_client/v2/model/aws_cur_config_response_data.py new file mode 100644 index 0000000000..a734f30625 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cur_config_response_data_attributes import AwsCurConfigResponseDataAttributes + from datadog_api_client.v2.model.aws_cur_config_response_data_type import AwsCurConfigResponseDataType + +class AwsCurConfigResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cur_config_response_data_attributes import AwsCurConfigResponseDataAttributes + from datadog_api_client.v2.model.aws_cur_config_response_data_type import AwsCurConfigResponseDataType + return { + "attributes": (AwsCurConfigResponseDataAttributes,), + "id": (str,), + "type": (AwsCurConfigResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: AwsCurConfigResponseDataType, attributes: Union[AwsCurConfigResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``AwsCurConfigResponseData`` object. + + :param attributes: The definition of ``AwsCurConfigResponseDataAttributes`` object. + :type attributes: AwsCurConfigResponseDataAttributes, optional + + :param id: The ``AwsCurConfigResponseData`` ``id``. + :type id: str, optional + + :param type: AWS CUR config resource type. + :type type: AwsCurConfigResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/aws_cur_config_response_data_attributes.py b/datadog_api_client/v2/model/aws_cur_config_response_data_attributes.py new file mode 100644 index 0000000000..c34cbbe62c --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_response_data_attributes.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cur_config_response_data_attributes_account_filters import AwsCurConfigResponseDataAttributesAccountFilters + +class AwsCurConfigResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cur_config_response_data_attributes_account_filters import AwsCurConfigResponseDataAttributesAccountFilters + return { + "account_filters": (AwsCurConfigResponseDataAttributesAccountFilters,), + "account_id": (str,), + "bucket_name": (str,), + "bucket_region": (str,), + "created_at": (str,), + "error_messages": ([str], none_type), + "months": (int,), + "report_name": (str,), + "report_prefix": (str,), + "status": (str,), + "status_updated_at": (str,), + "updated_at": (str,), + } + attribute_map = { + "account_filters": "account_filters", + "account_id": "account_id", + "bucket_name": "bucket_name", + "bucket_region": "bucket_region", + "created_at": "created_at", + "error_messages": "error_messages", + "months": "months", + "report_name": "report_name", + "report_prefix": "report_prefix", + "status": "status", + "status_updated_at": "status_updated_at", + "updated_at": "updated_at", + } + + def __init__(self_, account_filters: Union[AwsCurConfigResponseDataAttributesAccountFilters, UnsetType]=unset, account_id: Union[str, UnsetType]=unset, bucket_name: Union[str, UnsetType]=unset, bucket_region: Union[str, UnsetType]=unset, created_at: Union[str, UnsetType]=unset, error_messages: Union[List[str], none_type, UnsetType]=unset, months: Union[int, UnsetType]=unset, report_name: Union[str, UnsetType]=unset, report_prefix: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, status_updated_at: Union[str, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``AwsCurConfigResponseDataAttributes`` object. + + :param account_filters: The definition of ``AwsCurConfigResponseDataAttributesAccountFilters`` object. + :type account_filters: AwsCurConfigResponseDataAttributesAccountFilters, optional + + :param account_id: The ``attributes`` ``account_id``. + :type account_id: str, optional + + :param bucket_name: The ``attributes`` ``bucket_name``. + :type bucket_name: str, optional + + :param bucket_region: The ``attributes`` ``bucket_region``. + :type bucket_region: str, optional + + :param created_at: The ``attributes`` ``created_at``. + :type created_at: str, optional + + :param error_messages: The ``attributes`` ``error_messages``. + :type error_messages: [str], none_type, optional + + :param months: The ``attributes`` ``months``. + :type months: int, optional + + :param report_name: The ``attributes`` ``report_name``. + :type report_name: str, optional + + :param report_prefix: The ``attributes`` ``report_prefix``. + :type report_prefix: str, optional + + :param status: The ``attributes`` ``status``. + :type status: str, optional + + :param status_updated_at: The ``attributes`` ``status_updated_at``. + :type status_updated_at: str, optional + + :param updated_at: The ``attributes`` ``updated_at``. + :type updated_at: str, optional + """ + if account_filters is not unset: + kwargs["account_filters"] = account_filters + if account_id is not unset: + kwargs["account_id"] = account_id + if bucket_name is not unset: + kwargs["bucket_name"] = bucket_name + if bucket_region is not unset: + kwargs["bucket_region"] = bucket_region + if created_at is not unset: + kwargs["created_at"] = created_at + if error_messages is not unset: + kwargs["error_messages"] = error_messages + if months is not unset: + kwargs["months"] = months + if report_name is not unset: + kwargs["report_name"] = report_name + if report_prefix is not unset: + kwargs["report_prefix"] = report_prefix + if status is not unset: + kwargs["status"] = status + if status_updated_at is not unset: + kwargs["status_updated_at"] = status_updated_at + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_cur_config_response_data_attributes_account_filters.py b/datadog_api_client/v2/model/aws_cur_config_response_data_attributes_account_filters.py new file mode 100644 index 0000000000..4560cb62a4 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_response_data_attributes_account_filters.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AwsCurConfigResponseDataAttributesAccountFilters(ModelNormal): + @cached_property + def openapi_types(_): + return { + "excluded_accounts": ([str],), + "include_new_accounts": (bool, none_type), + "included_accounts": ([str],), + } + attribute_map = { + "excluded_accounts": "excluded_accounts", + "include_new_accounts": "include_new_accounts", + "included_accounts": "included_accounts", + } + + def __init__(self_, excluded_accounts: Union[List[str], UnsetType]=unset, include_new_accounts: Union[bool, none_type, UnsetType]=unset, included_accounts: Union[List[str], UnsetType]=unset, **kwargs): + """ + The definition of ``AwsCurConfigResponseDataAttributesAccountFilters`` object. + + :param excluded_accounts: The ``account_filters`` ``excluded_accounts``. + :type excluded_accounts: [str], optional + + :param include_new_accounts: The ``account_filters`` ``include_new_accounts``. + :type include_new_accounts: bool, none_type, optional + + :param included_accounts: The ``account_filters`` ``included_accounts``. + :type included_accounts: [str], optional + """ + if excluded_accounts is not unset: + kwargs["excluded_accounts"] = excluded_accounts + if include_new_accounts is not unset: + kwargs["include_new_accounts"] = include_new_accounts + if included_accounts is not unset: + kwargs["included_accounts"] = included_accounts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_cur_config_response_data_type.py b/datadog_api_client/v2/model/aws_cur_config_response_data_type.py new file mode 100644 index 0000000000..a030cbe560 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AwsCurConfigResponseDataType(ModelSimple): + """ + AWS CUR config resource type. + + :param value: If omitted defaults to "aws_cur_config". Must be one of ["aws_cur_config"]. + :type value: str + """ + + allowed_values = { + "aws_cur_config", + } + AWS_CUR_CONFIG: ClassVar["AwsCurConfigResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AwsCurConfigResponseDataType.AWS_CUR_CONFIG = AwsCurConfigResponseDataType("aws_cur_config") diff --git a/datadog_api_client/v2/model/aws_cur_config_type.py b/datadog_api_client/v2/model/aws_cur_config_type.py new file mode 100644 index 0000000000..2e22f98d90 --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AwsCURConfigType(ModelSimple): + """ + Type of AWS CUR config. + + :param value: If omitted defaults to "aws_cur_config". Must be one of ["aws_cur_config"]. + :type value: str + """ + + allowed_values = { + "aws_cur_config", + } + AWS_CUR_CONFIG: ClassVar["AwsCURConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AwsCURConfigType.AWS_CUR_CONFIG = AwsCURConfigType("aws_cur_config") diff --git a/datadog_api_client/v2/model/aws_cur_configs_response.py b/datadog_api_client/v2/model/aws_cur_configs_response.py new file mode 100644 index 0000000000..c06d88de4b --- /dev/null +++ b/datadog_api_client/v2/model/aws_cur_configs_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_cur_config import AwsCURConfig + +class AwsCURConfigsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_cur_config import AwsCURConfig + return { + "data": ([AwsCURConfig],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AwsCURConfig], **kwargs): + """ + List of AWS CUR configs. + + :param data: An AWS CUR config. + :type data: [AwsCURConfig] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_event_bridge_account_configuration.py b/datadog_api_client/v2/model/aws_event_bridge_account_configuration.py new file mode 100644 index 0000000000..1c2abd1301 --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_account_configuration.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_source import AWSEventBridgeSource + +class AWSEventBridgeAccountConfiguration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_source import AWSEventBridgeSource + return { + "account_id": (str,), + "event_hubs": ([AWSEventBridgeSource],), + "tags": ([str],), + } + attribute_map = { + "account_id": "account_id", + "event_hubs": "event_hubs", + "tags": "tags", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, event_hubs: Union[List[AWSEventBridgeSource], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The EventBridge configuration for one AWS account. + + :param account_id: Your AWS Account ID without dashes. + :type account_id: str, optional + + :param event_hubs: Array of AWS event sources associated with this account. + :type event_hubs: [AWSEventBridgeSource], optional + + :param tags: Array of tags (in the form ``key:value`` ) which are added to all hosts + and metrics reporting through the main AWS integration. + :type tags: [str], optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if event_hubs is not unset: + kwargs["event_hubs"] = event_hubs + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_event_bridge_create_request.py b/datadog_api_client/v2/model/aws_event_bridge_create_request.py new file mode 100644 index 0000000000..e104ef25e0 --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_create_request_data import AWSEventBridgeCreateRequestData + +class AWSEventBridgeCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_create_request_data import AWSEventBridgeCreateRequestData + return { + "data": (AWSEventBridgeCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSEventBridgeCreateRequestData, **kwargs): + """ + Amazon EventBridge create request body. + + :param data: Amazon EventBridge create request data. + :type data: AWSEventBridgeCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_event_bridge_create_request_attributes.py b/datadog_api_client/v2/model/aws_event_bridge_create_request_attributes.py new file mode 100644 index 0000000000..f1bfca6d1a --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_create_request_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSEventBridgeCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "create_event_bus": (bool,), + "event_generator_name": (str,), + "region": (str,), + } + attribute_map = { + "account_id": "account_id", + "create_event_bus": "create_event_bus", + "event_generator_name": "event_generator_name", + "region": "region", + } + + def __init__(self_, account_id: str, event_generator_name: str, region: str, create_event_bus: Union[bool, UnsetType]=unset, **kwargs): + """ + The EventBridge source to be created. + + :param account_id: AWS Account ID. + :type account_id: str + + :param create_event_bus: Set to true if Datadog should create the event bus in addition to the event + source. Requires the ``events:CreateEventBus`` permission. + :type create_event_bus: bool, optional + + :param event_generator_name: The given part of the event source name, which is then combined with an + assigned suffix to form the full name. + :type event_generator_name: str + + :param region: The event source's + `AWS region `_. + :type region: str + """ + if create_event_bus is not unset: + kwargs["create_event_bus"] = create_event_bus + super().__init__(kwargs) + + + self_.account_id = account_id + self_.event_generator_name = event_generator_name + self_.region = region diff --git a/datadog_api_client/v2/model/aws_event_bridge_create_request_data.py b/datadog_api_client/v2/model/aws_event_bridge_create_request_data.py new file mode 100644 index 0000000000..32e28384c3 --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_create_request_attributes import AWSEventBridgeCreateRequestAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + +class AWSEventBridgeCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_create_request_attributes import AWSEventBridgeCreateRequestAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + return { + "attributes": (AWSEventBridgeCreateRequestAttributes,), + "type": (AWSEventBridgeType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AWSEventBridgeCreateRequestAttributes, type: AWSEventBridgeType, **kwargs): + """ + Amazon EventBridge create request data. + + :param attributes: The EventBridge source to be created. + :type attributes: AWSEventBridgeCreateRequestAttributes + + :param type: Amazon EventBridge resource type. + :type type: AWSEventBridgeType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_event_bridge_create_response.py b/datadog_api_client/v2/model/aws_event_bridge_create_response.py new file mode 100644 index 0000000000..b8e6666dc2 --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_create_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_create_response_data import AWSEventBridgeCreateResponseData + +class AWSEventBridgeCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_create_response_data import AWSEventBridgeCreateResponseData + return { + "data": (AWSEventBridgeCreateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSEventBridgeCreateResponseData, **kwargs): + """ + Amazon EventBridge create response body. + + :param data: Amazon EventBridge create response data. + :type data: AWSEventBridgeCreateResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_event_bridge_create_response_attributes.py b/datadog_api_client/v2/model/aws_event_bridge_create_response_attributes.py new file mode 100644 index 0000000000..bd2a6f9a3c --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_create_response_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_create_status import AWSEventBridgeCreateStatus + +class AWSEventBridgeCreateResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_create_status import AWSEventBridgeCreateStatus + return { + "event_source_name": (str,), + "has_bus": (bool,), + "region": (str,), + "status": (AWSEventBridgeCreateStatus,), + } + attribute_map = { + "event_source_name": "event_source_name", + "has_bus": "has_bus", + "region": "region", + "status": "status", + } + + def __init__(self_, event_source_name: Union[str, UnsetType]=unset, has_bus: Union[bool, UnsetType]=unset, region: Union[str, UnsetType]=unset, status: Union[AWSEventBridgeCreateStatus, UnsetType]=unset, **kwargs): + """ + A created EventBridge source. + + :param event_source_name: The event source name. + :type event_source_name: str, optional + + :param has_bus: True if the event bus was created in addition to the source. + :type has_bus: bool, optional + + :param region: The event source's + `AWS region `_. + :type region: str, optional + + :param status: The event source status "created". + :type status: AWSEventBridgeCreateStatus, optional + """ + if event_source_name is not unset: + kwargs["event_source_name"] = event_source_name + if has_bus is not unset: + kwargs["has_bus"] = has_bus + if region is not unset: + kwargs["region"] = region + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_event_bridge_create_response_data.py b/datadog_api_client/v2/model/aws_event_bridge_create_response_data.py new file mode 100644 index 0000000000..9fccbea1d7 --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_create_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_create_response_attributes import AWSEventBridgeCreateResponseAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + +class AWSEventBridgeCreateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_create_response_attributes import AWSEventBridgeCreateResponseAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + return { + "attributes": (AWSEventBridgeCreateResponseAttributes,), + "id": (str,), + "type": (AWSEventBridgeType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AWSEventBridgeCreateResponseAttributes, type: AWSEventBridgeType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Amazon EventBridge create response data. + + :param attributes: A created EventBridge source. + :type attributes: AWSEventBridgeCreateResponseAttributes + + :param id: The ID of the Amazon EventBridge create response data. + :type id: str, optional + + :param type: Amazon EventBridge resource type. + :type type: AWSEventBridgeType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_event_bridge_create_status.py b/datadog_api_client/v2/model/aws_event_bridge_create_status.py new file mode 100644 index 0000000000..1fb56a2ccb --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_create_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSEventBridgeCreateStatus(ModelSimple): + """ + The event source status "created". + + :param value: If omitted defaults to "created". Must be one of ["created"]. + :type value: str + """ + + allowed_values = { + "created", + } + CREATED: ClassVar["AWSEventBridgeCreateStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSEventBridgeCreateStatus.CREATED = AWSEventBridgeCreateStatus("created") diff --git a/datadog_api_client/v2/model/aws_event_bridge_delete_request.py b/datadog_api_client/v2/model/aws_event_bridge_delete_request.py new file mode 100644 index 0000000000..f4f1a3894e --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_delete_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_delete_request_data import AWSEventBridgeDeleteRequestData + +class AWSEventBridgeDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_delete_request_data import AWSEventBridgeDeleteRequestData + return { + "data": (AWSEventBridgeDeleteRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSEventBridgeDeleteRequestData, **kwargs): + """ + Amazon EventBridge delete request body. + + :param data: Amazon EventBridge delete request data. + :type data: AWSEventBridgeDeleteRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_event_bridge_delete_request_attributes.py b/datadog_api_client/v2/model/aws_event_bridge_delete_request_attributes.py new file mode 100644 index 0000000000..eb7bfe1981 --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_delete_request_attributes.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSEventBridgeDeleteRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "event_generator_name": (str,), + "region": (str,), + } + attribute_map = { + "account_id": "account_id", + "event_generator_name": "event_generator_name", + "region": "region", + } + + def __init__(self_, account_id: str, event_generator_name: str, region: str, **kwargs): + """ + The EventBridge source to be deleted. + + :param account_id: AWS Account ID. + :type account_id: str + + :param event_generator_name: The event source name. + :type event_generator_name: str + + :param region: The event source's + `AWS region `_. + :type region: str + """ + super().__init__(kwargs) + + + self_.account_id = account_id + self_.event_generator_name = event_generator_name + self_.region = region diff --git a/datadog_api_client/v2/model/aws_event_bridge_delete_request_data.py b/datadog_api_client/v2/model/aws_event_bridge_delete_request_data.py new file mode 100644 index 0000000000..2543196c4e --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_delete_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_delete_request_attributes import AWSEventBridgeDeleteRequestAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + +class AWSEventBridgeDeleteRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_delete_request_attributes import AWSEventBridgeDeleteRequestAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + return { + "attributes": (AWSEventBridgeDeleteRequestAttributes,), + "type": (AWSEventBridgeType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AWSEventBridgeDeleteRequestAttributes, type: AWSEventBridgeType, **kwargs): + """ + Amazon EventBridge delete request data. + + :param attributes: The EventBridge source to be deleted. + :type attributes: AWSEventBridgeDeleteRequestAttributes + + :param type: Amazon EventBridge resource type. + :type type: AWSEventBridgeType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_event_bridge_delete_response.py b/datadog_api_client/v2/model/aws_event_bridge_delete_response.py new file mode 100644 index 0000000000..604cab86aa --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_delete_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_delete_response_data import AWSEventBridgeDeleteResponseData + +class AWSEventBridgeDeleteResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_delete_response_data import AWSEventBridgeDeleteResponseData + return { + "data": (AWSEventBridgeDeleteResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSEventBridgeDeleteResponseData, **kwargs): + """ + Amazon EventBridge delete response body. + + :param data: Amazon EventBridge delete response data. + :type data: AWSEventBridgeDeleteResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_event_bridge_delete_response_attributes.py b/datadog_api_client/v2/model/aws_event_bridge_delete_response_attributes.py new file mode 100644 index 0000000000..159a4a481c --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_delete_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_delete_status import AWSEventBridgeDeleteStatus + +class AWSEventBridgeDeleteResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_delete_status import AWSEventBridgeDeleteStatus + return { + "status": (AWSEventBridgeDeleteStatus,), + } + attribute_map = { + "status": "status", + } + + def __init__(self_, status: Union[AWSEventBridgeDeleteStatus, UnsetType]=unset, **kwargs): + """ + The EventBridge source delete response attributes. + + :param status: The event source status "empty". + :type status: AWSEventBridgeDeleteStatus, optional + """ + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_event_bridge_delete_response_data.py b/datadog_api_client/v2/model/aws_event_bridge_delete_response_data.py new file mode 100644 index 0000000000..c09a61d514 --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_delete_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_delete_response_attributes import AWSEventBridgeDeleteResponseAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + +class AWSEventBridgeDeleteResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_delete_response_attributes import AWSEventBridgeDeleteResponseAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + return { + "attributes": (AWSEventBridgeDeleteResponseAttributes,), + "id": (str,), + "type": (AWSEventBridgeType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AWSEventBridgeDeleteResponseAttributes, type: AWSEventBridgeType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Amazon EventBridge delete response data. + + :param attributes: The EventBridge source delete response attributes. + :type attributes: AWSEventBridgeDeleteResponseAttributes + + :param id: The ID of the Amazon EventBridge list response data. + :type id: str, optional + + :param type: Amazon EventBridge resource type. + :type type: AWSEventBridgeType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_event_bridge_delete_status.py b/datadog_api_client/v2/model/aws_event_bridge_delete_status.py new file mode 100644 index 0000000000..202838d7cb --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_delete_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSEventBridgeDeleteStatus(ModelSimple): + """ + The event source status "empty". + + :param value: If omitted defaults to "empty". Must be one of ["empty"]. + :type value: str + """ + + allowed_values = { + "empty", + } + EMPTY: ClassVar["AWSEventBridgeDeleteStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSEventBridgeDeleteStatus.EMPTY = AWSEventBridgeDeleteStatus("empty") diff --git a/datadog_api_client/v2/model/aws_event_bridge_list_response.py b/datadog_api_client/v2/model/aws_event_bridge_list_response.py new file mode 100644 index 0000000000..8ecd5f1c9c --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_list_response_data import AWSEventBridgeListResponseData + +class AWSEventBridgeListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_list_response_data import AWSEventBridgeListResponseData + return { + "data": (AWSEventBridgeListResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSEventBridgeListResponseData, **kwargs): + """ + Amazon EventBridge list response body. + + :param data: Amazon EventBridge list response data. + :type data: AWSEventBridgeListResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_event_bridge_list_response_attributes.py b/datadog_api_client/v2/model/aws_event_bridge_list_response_attributes.py new file mode 100644 index 0000000000..e721df3137 --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_list_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_account_configuration import AWSEventBridgeAccountConfiguration + +class AWSEventBridgeListResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_account_configuration import AWSEventBridgeAccountConfiguration + return { + "accounts": ([AWSEventBridgeAccountConfiguration],), + "is_installed": (bool,), + } + attribute_map = { + "accounts": "accounts", + "is_installed": "is_installed", + } + + def __init__(self_, accounts: Union[List[AWSEventBridgeAccountConfiguration], UnsetType]=unset, is_installed: Union[bool, UnsetType]=unset, **kwargs): + """ + An object describing the EventBridge configuration for multiple accounts. + + :param accounts: List of accounts with their event sources. + :type accounts: [AWSEventBridgeAccountConfiguration], optional + + :param is_installed: True if the EventBridge integration is enabled for your organization. + :type is_installed: bool, optional + """ + if accounts is not unset: + kwargs["accounts"] = accounts + if is_installed is not unset: + kwargs["is_installed"] = is_installed + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_event_bridge_list_response_data.py b/datadog_api_client/v2/model/aws_event_bridge_list_response_data.py new file mode 100644 index 0000000000..0e10a49f2f --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_list_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_event_bridge_list_response_attributes import AWSEventBridgeListResponseAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + +class AWSEventBridgeListResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_event_bridge_list_response_attributes import AWSEventBridgeListResponseAttributes + from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType + return { + "attributes": (AWSEventBridgeListResponseAttributes,), + "id": (str,), + "type": (AWSEventBridgeType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AWSEventBridgeListResponseAttributes, type: AWSEventBridgeType, **kwargs): + """ + Amazon EventBridge list response data. + + :param attributes: An object describing the EventBridge configuration for multiple accounts. + :type attributes: AWSEventBridgeListResponseAttributes + + :param id: The ID of the Amazon EventBridge list response data. + :type id: str + + :param type: Amazon EventBridge resource type. + :type type: AWSEventBridgeType + """ + super().__init__(kwargs) + id = kwargs.get("id", "get_event_bridge") + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_event_bridge_source.py b/datadog_api_client/v2/model/aws_event_bridge_source.py new file mode 100644 index 0000000000..87897bc5df --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSEventBridgeSource(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "region": (str,), + } + attribute_map = { + "name": "name", + "region": "region", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, **kwargs): + """ + An EventBridge source. + + :param name: The event source name. + :type name: str, optional + + :param region: The event source's + `AWS region `_. + :type region: str, optional + """ + if name is not unset: + kwargs["name"] = name + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_event_bridge_type.py b/datadog_api_client/v2/model/aws_event_bridge_type.py new file mode 100644 index 0000000000..07289ea89a --- /dev/null +++ b/datadog_api_client/v2/model/aws_event_bridge_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSEventBridgeType(ModelSimple): + """ + Amazon EventBridge resource type. + + :param value: If omitted defaults to "event_bridge". Must be one of ["event_bridge"]. + :type value: str + """ + + allowed_values = { + "event_bridge", + } + EVENT_BRIDGE: ClassVar["AWSEventBridgeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSEventBridgeType.EVENT_BRIDGE = AWSEventBridgeType("event_bridge") diff --git a/datadog_api_client/v2/model/aws_integration.py b/datadog_api_client/v2/model/aws_integration.py new file mode 100644 index 0000000000..30af709a2e --- /dev/null +++ b/datadog_api_client/v2/model/aws_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_credentials import AWSCredentials + from datadog_api_client.v2.model.aws_integration_type import AWSIntegrationType + from datadog_api_client.v2.model.aws_assume_role import AWSAssumeRole + +class AWSIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_credentials import AWSCredentials + from datadog_api_client.v2.model.aws_integration_type import AWSIntegrationType + return { + "credentials": (AWSCredentials,), + "type": (AWSIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[AWSCredentials, AWSAssumeRole], type: AWSIntegrationType, **kwargs): + """ + The definition of ``AWSIntegration`` object. + + :param credentials: The definition of ``AWSCredentials`` object. + :type credentials: AWSCredentials + + :param type: The definition of ``AWSIntegrationType`` object. + :type type: AWSIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/aws_integration_iam_permissions_response.py b/datadog_api_client/v2/model/aws_integration_iam_permissions_response.py new file mode 100644 index 0000000000..529105e1ad --- /dev/null +++ b/datadog_api_client/v2/model/aws_integration_iam_permissions_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_integration_iam_permissions_response_data import AWSIntegrationIamPermissionsResponseData + +class AWSIntegrationIamPermissionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_integration_iam_permissions_response_data import AWSIntegrationIamPermissionsResponseData + return { + "data": (AWSIntegrationIamPermissionsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSIntegrationIamPermissionsResponseData, **kwargs): + """ + AWS Integration IAM Permissions response body. + + :param data: AWS Integration IAM Permissions response data. + :type data: AWSIntegrationIamPermissionsResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_integration_iam_permissions_response_attributes.py b/datadog_api_client/v2/model/aws_integration_iam_permissions_response_attributes.py new file mode 100644 index 0000000000..3b4dfb5e21 --- /dev/null +++ b/datadog_api_client/v2/model/aws_integration_iam_permissions_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSIntegrationIamPermissionsResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "permissions": ([str],), + } + attribute_map = { + "permissions": "permissions", + } + + def __init__(self_, permissions: List[str], **kwargs): + """ + AWS Integration IAM Permissions response attributes. + + :param permissions: List of AWS IAM permissions required for the integration. + :type permissions: [str] + """ + super().__init__(kwargs) + + + self_.permissions = permissions diff --git a/datadog_api_client/v2/model/aws_integration_iam_permissions_response_data.py b/datadog_api_client/v2/model/aws_integration_iam_permissions_response_data.py new file mode 100644 index 0000000000..20e90797ed --- /dev/null +++ b/datadog_api_client/v2/model/aws_integration_iam_permissions_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_integration_iam_permissions_response_attributes import AWSIntegrationIamPermissionsResponseAttributes + from datadog_api_client.v2.model.aws_integration_iam_permissions_response_data_type import AWSIntegrationIamPermissionsResponseDataType + +class AWSIntegrationIamPermissionsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_integration_iam_permissions_response_attributes import AWSIntegrationIamPermissionsResponseAttributes + from datadog_api_client.v2.model.aws_integration_iam_permissions_response_data_type import AWSIntegrationIamPermissionsResponseDataType + return { + "attributes": (AWSIntegrationIamPermissionsResponseAttributes,), + "id": (str,), + "type": (AWSIntegrationIamPermissionsResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AWSIntegrationIamPermissionsResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AWSIntegrationIamPermissionsResponseDataType, UnsetType]=unset, **kwargs): + """ + AWS Integration IAM Permissions response data. + + :param attributes: AWS Integration IAM Permissions response attributes. + :type attributes: AWSIntegrationIamPermissionsResponseAttributes, optional + + :param id: The ``AWSIntegrationIamPermissionsResponseData`` ``id``. + :type id: str, optional + + :param type: The ``AWSIntegrationIamPermissionsResponseData`` ``type``. + :type type: AWSIntegrationIamPermissionsResponseDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_integration_iam_permissions_response_data_type.py b/datadog_api_client/v2/model/aws_integration_iam_permissions_response_data_type.py new file mode 100644 index 0000000000..1173433f3d --- /dev/null +++ b/datadog_api_client/v2/model/aws_integration_iam_permissions_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSIntegrationIamPermissionsResponseDataType(ModelSimple): + """ + The `AWSIntegrationIamPermissionsResponseData` `type`. + + :param value: If omitted defaults to "permissions". Must be one of ["permissions"]. + :type value: str + """ + + allowed_values = { + "permissions", + } + PERMISSIONS: ClassVar["AWSIntegrationIamPermissionsResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSIntegrationIamPermissionsResponseDataType.PERMISSIONS = AWSIntegrationIamPermissionsResponseDataType("permissions") diff --git a/datadog_api_client/v2/model/aws_integration_type.py b/datadog_api_client/v2/model/aws_integration_type.py new file mode 100644 index 0000000000..c39f5f939b --- /dev/null +++ b/datadog_api_client/v2/model/aws_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSIntegrationType(ModelSimple): + """ + The definition of `AWSIntegrationType` object. + + :param value: If omitted defaults to "AWS". Must be one of ["AWS"]. + :type value: str + """ + + allowed_values = { + "AWS", + } + AWS: ClassVar["AWSIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSIntegrationType.AWS = AWSIntegrationType("AWS") diff --git a/datadog_api_client/v2/model/aws_integration_update.py b/datadog_api_client/v2/model/aws_integration_update.py new file mode 100644 index 0000000000..076f64890d --- /dev/null +++ b/datadog_api_client/v2/model/aws_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_credentials_update import AWSCredentialsUpdate + from datadog_api_client.v2.model.aws_integration_type import AWSIntegrationType + from datadog_api_client.v2.model.aws_assume_role_update import AWSAssumeRoleUpdate + +class AWSIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_credentials_update import AWSCredentialsUpdate + from datadog_api_client.v2.model.aws_integration_type import AWSIntegrationType + return { + "credentials": (AWSCredentialsUpdate,), + "type": (AWSIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: AWSIntegrationType, credentials: Union[AWSCredentialsUpdate, AWSAssumeRoleUpdate, UnsetType]=unset, **kwargs): + """ + The definition of ``AWSIntegrationUpdate`` object. + + :param credentials: The definition of ``AWSCredentialsUpdate`` object. + :type credentials: AWSCredentialsUpdate, optional + + :param type: The definition of ``AWSIntegrationType`` object. + :type type: AWSIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/aws_lambda_forwarder_config.py b/datadog_api_client/v2/model/aws_lambda_forwarder_config.py new file mode 100644 index 0000000000..34abc9cd3d --- /dev/null +++ b/datadog_api_client/v2/model/aws_lambda_forwarder_config.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_lambda_forwarder_config_log_source_config import AWSLambdaForwarderConfigLogSourceConfig + +class AWSLambdaForwarderConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_lambda_forwarder_config_log_source_config import AWSLambdaForwarderConfigLogSourceConfig + return { + "lambdas": ([str],), + "log_source_config": (AWSLambdaForwarderConfigLogSourceConfig,), + "sources": ([str],), + } + attribute_map = { + "lambdas": "lambdas", + "log_source_config": "log_source_config", + "sources": "sources", + } + + def __init__(self_, lambdas: Union[List[str], UnsetType]=unset, log_source_config: Union[AWSLambdaForwarderConfigLogSourceConfig, UnsetType]=unset, sources: Union[List[str], UnsetType]=unset, **kwargs): + """ + Log Autosubscription configuration for Datadog Forwarder Lambda functions. + Automatically set up triggers for existing and new logs for some services, + ensuring no logs from new resources are missed and saving time spent on manual configuration. + + :param lambdas: List of Datadog Lambda Log Forwarder ARNs in your AWS account. Defaults to ``[]``. + :type lambdas: [str], optional + + :param log_source_config: Log source configuration. + :type log_source_config: AWSLambdaForwarderConfigLogSourceConfig, optional + + :param sources: List of service IDs set to enable automatic log collection. + Discover the list of available services with the + `Get list of AWS log ready + services `_ + endpoint. + :type sources: [str], optional + """ + if lambdas is not unset: + kwargs["lambdas"] = lambdas + if log_source_config is not unset: + kwargs["log_source_config"] = log_source_config + if sources is not unset: + kwargs["sources"] = sources + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_lambda_forwarder_config_log_source_config.py b/datadog_api_client/v2/model/aws_lambda_forwarder_config_log_source_config.py new file mode 100644 index 0000000000..38c669f9b0 --- /dev/null +++ b/datadog_api_client/v2/model/aws_lambda_forwarder_config_log_source_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_log_source_tag_filter import AWSLogSourceTagFilter + +class AWSLambdaForwarderConfigLogSourceConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_log_source_tag_filter import AWSLogSourceTagFilter + return { + "tag_filters": ([AWSLogSourceTagFilter],), + } + attribute_map = { + "tag_filters": "tag_filters", + } + + def __init__(self_, tag_filters: Union[List[AWSLogSourceTagFilter], UnsetType]=unset, **kwargs): + """ + Log source configuration. + + :param tag_filters: List of AWS log source tag filters. Defaults to ``[]``. + :type tag_filters: [AWSLogSourceTagFilter], optional + """ + if tag_filters is not unset: + kwargs["tag_filters"] = tag_filters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_log_source_tag_filter.py b/datadog_api_client/v2/model/aws_log_source_tag_filter.py new file mode 100644 index 0000000000..f25350ffac --- /dev/null +++ b/datadog_api_client/v2/model/aws_log_source_tag_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSLogSourceTagFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "source": (str,), + "tags": ([str], none_type), + } + attribute_map = { + "source": "source", + "tags": "tags", + } + + def __init__(self_, source: Union[str, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + AWS log source tag filter list. Defaults to ``[]``. + Array of log source to AWS resource tag mappings. Each mapping contains a log source and its + associated AWS resource tags (in ``key:value`` format) used to filter logs submitted to Datadog. + Tag filters are applied for tags on the AWS resource emitting logs; tags associated with the + log storage entity (such as a CloudWatch Log Group or S3 Bucket) are not considered. + For more information on resource tag filter syntax, + `see AWS resource exclusion `_ + in the AWS integration billing page. + + :param source: The AWS log source to which the tag filters defined in ``tags`` are applied. + :type source: str, optional + + :param tags: The AWS resource tags to filter on for the log source specified by ``source``. + :type tags: [str], none_type, optional + """ + if source is not unset: + kwargs["source"] = source + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_logs_config.py b/datadog_api_client/v2/model/aws_logs_config.py new file mode 100644 index 0000000000..b88e6173da --- /dev/null +++ b/datadog_api_client/v2/model/aws_logs_config.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_lambda_forwarder_config import AWSLambdaForwarderConfig + +class AWSLogsConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_lambda_forwarder_config import AWSLambdaForwarderConfig + return { + "lambda_forwarder": (AWSLambdaForwarderConfig,), + } + attribute_map = { + "lambda_forwarder": "lambda_forwarder", + } + + def __init__(self_, lambda_forwarder: Union[AWSLambdaForwarderConfig, UnsetType]=unset, **kwargs): + """ + AWS Logs Collection config. + + :param lambda_forwarder: Log Autosubscription configuration for Datadog Forwarder Lambda functions. + Automatically set up triggers for existing and new logs for some services, + ensuring no logs from new resources are missed and saving time spent on manual configuration. + :type lambda_forwarder: AWSLambdaForwarderConfig, optional + """ + if lambda_forwarder is not unset: + kwargs["lambda_forwarder"] = lambda_forwarder + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_logs_services_response.py b/datadog_api_client/v2/model/aws_logs_services_response.py new file mode 100644 index 0000000000..8a7b9c937e --- /dev/null +++ b/datadog_api_client/v2/model/aws_logs_services_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_logs_services_response_data import AWSLogsServicesResponseData + +class AWSLogsServicesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_logs_services_response_data import AWSLogsServicesResponseData + return { + "data": (AWSLogsServicesResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSLogsServicesResponseData, **kwargs): + """ + AWS Logs Services response body + + :param data: AWS Logs Services response body + :type data: AWSLogsServicesResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_logs_services_response_attributes.py b/datadog_api_client/v2/model/aws_logs_services_response_attributes.py new file mode 100644 index 0000000000..317189799a --- /dev/null +++ b/datadog_api_client/v2/model/aws_logs_services_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSLogsServicesResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "logs_services": ([str],), + } + attribute_map = { + "logs_services": "logs_services", + } + + def __init__(self_, logs_services: List[str], **kwargs): + """ + AWS Logs Services response body + + :param logs_services: List of AWS services that can send logs to Datadog + :type logs_services: [str] + """ + super().__init__(kwargs) + + + self_.logs_services = logs_services diff --git a/datadog_api_client/v2/model/aws_logs_services_response_data.py b/datadog_api_client/v2/model/aws_logs_services_response_data.py new file mode 100644 index 0000000000..bfda7313c6 --- /dev/null +++ b/datadog_api_client/v2/model/aws_logs_services_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_logs_services_response_attributes import AWSLogsServicesResponseAttributes + from datadog_api_client.v2.model.aws_logs_services_response_data_type import AWSLogsServicesResponseDataType + +class AWSLogsServicesResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_logs_services_response_attributes import AWSLogsServicesResponseAttributes + from datadog_api_client.v2.model.aws_logs_services_response_data_type import AWSLogsServicesResponseDataType + return { + "attributes": (AWSLogsServicesResponseAttributes,), + "id": (str,), + "type": (AWSLogsServicesResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: AWSLogsServicesResponseDataType, attributes: Union[AWSLogsServicesResponseAttributes, UnsetType]=unset, **kwargs): + """ + AWS Logs Services response body + + :param attributes: AWS Logs Services response body + :type attributes: AWSLogsServicesResponseAttributes, optional + + :param id: The ``AWSLogsServicesResponseData`` ``id``. + :type id: str + + :param type: The ``AWSLogsServicesResponseData`` ``type``. + :type type: AWSLogsServicesResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + id = kwargs.get("id", "logs_services") + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_logs_services_response_data_type.py b/datadog_api_client/v2/model/aws_logs_services_response_data_type.py new file mode 100644 index 0000000000..5e5f40478a --- /dev/null +++ b/datadog_api_client/v2/model/aws_logs_services_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSLogsServicesResponseDataType(ModelSimple): + """ + The `AWSLogsServicesResponseData` `type`. + + :param value: If omitted defaults to "logs_services". Must be one of ["logs_services"]. + :type value: str + """ + + allowed_values = { + "logs_services", + } + LOGS_SERVICES: ClassVar["AWSLogsServicesResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSLogsServicesResponseDataType.LOGS_SERVICES = AWSLogsServicesResponseDataType("logs_services") diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_dd_name.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_dd_name.py new file mode 100644 index 0000000000..e0fca0762b --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_dd_name.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSMetricNameFilterPreviewDDName(ModelNormal): + @cached_property + def openapi_types(_): + return { + "filtered": (bool,), + "name": (str,), + } + attribute_map = { + "filtered": "filtered", + "name": "name", + } + + def __init__(self_, filtered: bool, name: str, **kwargs): + """ + A Datadog metric name and whether it is filtered. + + :param filtered: Whether this Datadog metric name is filtered out. + :type filtered: bool + + :param name: The Datadog metric name. + :type name: str + """ + super().__init__(kwargs) + + + self_.filtered = filtered + self_.name = name diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_filter_match.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_filter_match.py new file mode 100644 index 0000000000..8ad15363d0 --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_filter_match.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSMetricNameFilterPreviewFilterMatch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "match_count": (int,), + "pattern": (str,), + } + attribute_map = { + "match_count": "match_count", + "pattern": "pattern", + } + + def __init__(self_, match_count: int, pattern: str, **kwargs): + """ + A metric name filter pattern and how many metrics it matched. + + :param match_count: The number of Datadog metric names matched by this pattern. + :type match_count: int + + :param pattern: The metric name filter pattern. + :type pattern: str + """ + super().__init__(kwargs) + + + self_.match_count = match_count + self_.pattern = pattern diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_metric.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_metric.py new file mode 100644 index 0000000000..4970fbc272 --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_metric.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_metric_name_filter_preview_dd_name import AWSMetricNameFilterPreviewDDName + +class AWSMetricNameFilterPreviewMetric(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_metric_name_filter_preview_dd_name import AWSMetricNameFilterPreviewDDName + return { + "cw_name": (str,), + "dd_names": ([AWSMetricNameFilterPreviewDDName],), + } + attribute_map = { + "cw_name": "cw_name", + "dd_names": "dd_names", + } + + def __init__(self_, cw_name: str, dd_names: List[AWSMetricNameFilterPreviewDDName], **kwargs): + """ + A CloudWatch metric and the Datadog metric names it produces. + + :param cw_name: The CloudWatch metric name. + :type cw_name: str + + :param dd_names: The Datadog metric names produced from this CloudWatch metric. + :type dd_names: [AWSMetricNameFilterPreviewDDName] + """ + super().__init__(kwargs) + + + self_.cw_name = cw_name + self_.dd_names = dd_names diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_namespace.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_namespace.py new file mode 100644 index 0000000000..a2b6e8d4a9 --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_namespace.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_metric_name_filter_preview_filter_match import AWSMetricNameFilterPreviewFilterMatch + from datadog_api_client.v2.model.aws_metric_name_filter_preview_metric import AWSMetricNameFilterPreviewMetric + +class AWSMetricNameFilterPreviewNamespace(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_metric_name_filter_preview_filter_match import AWSMetricNameFilterPreviewFilterMatch + from datadog_api_client.v2.model.aws_metric_name_filter_preview_metric import AWSMetricNameFilterPreviewMetric + return { + "filters": ([AWSMetricNameFilterPreviewFilterMatch],), + "metrics": ([AWSMetricNameFilterPreviewMetric],), + "namespace": (str,), + } + attribute_map = { + "filters": "filters", + "metrics": "metrics", + "namespace": "namespace", + } + + def __init__(self_, filters: List[AWSMetricNameFilterPreviewFilterMatch], metrics: List[AWSMetricNameFilterPreviewMetric], namespace: str, **kwargs): + """ + The metric name filter preview for a single namespace. + + :param filters: The metric name filter patterns evaluated for this namespace and how many metrics they matched. + :type filters: [AWSMetricNameFilterPreviewFilterMatch] + + :param metrics: The CloudWatch metrics collected for this namespace and whether each resulting + Datadog metric is filtered. + :type metrics: [AWSMetricNameFilterPreviewMetric] + + :param namespace: The AWS CloudWatch namespace. + :type namespace: str + """ + super().__init__(kwargs) + + + self_.filters = filters + self_.metrics = metrics + self_.namespace = namespace diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_request.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_request.py new file mode 100644 index 0000000000..57ea9de80c --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_metric_name_filter_preview_request_data import AWSMetricNameFilterPreviewRequestData + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + +class AWSMetricNameFilterPreviewRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_metric_name_filter_preview_request_data import AWSMetricNameFilterPreviewRequestData + return { + "data": (AWSMetricNameFilterPreviewRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSMetricNameFilterPreviewRequestData, **kwargs): + """ + AWS metric name filter preview request body. + + :param data: AWS metric name filter preview request data. + :type data: AWSMetricNameFilterPreviewRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_request_attributes.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_request_attributes.py new file mode 100644 index 0000000000..b3185384c7 --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_request_attributes.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_metric_name_filters import AWSMetricNameFilters + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + +class AWSMetricNameFilterPreviewRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_metric_name_filters import AWSMetricNameFilters + return { + "metric_name_filters": ([AWSMetricNameFilters],), + } + attribute_map = { + "metric_name_filters": "metric_name_filters", + } + + def __init__(self_, metric_name_filters: List[Union[AWSMetricNameFilters, AWSMetricNameFiltersIncludeOnly, AWSMetricNameFiltersExcludeOnly]], **kwargs): + """ + AWS metric name filter preview request attributes. + + :param metric_name_filters: The metric name filters to preview. + :type metric_name_filters: [AWSMetricNameFilters] + """ + super().__init__(kwargs) + + + self_.metric_name_filters = metric_name_filters diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_request_data.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_request_data.py new file mode 100644 index 0000000000..a4927d8682 --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_metric_name_filter_preview_request_attributes import AWSMetricNameFilterPreviewRequestAttributes + from datadog_api_client.v2.model.aws_metric_name_filter_preview_type import AWSMetricNameFilterPreviewType + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + +class AWSMetricNameFilterPreviewRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_metric_name_filter_preview_request_attributes import AWSMetricNameFilterPreviewRequestAttributes + from datadog_api_client.v2.model.aws_metric_name_filter_preview_type import AWSMetricNameFilterPreviewType + return { + "attributes": (AWSMetricNameFilterPreviewRequestAttributes,), + "type": (AWSMetricNameFilterPreviewType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AWSMetricNameFilterPreviewRequestAttributes, type: AWSMetricNameFilterPreviewType, **kwargs): + """ + AWS metric name filter preview request data. + + :param attributes: AWS metric name filter preview request attributes. + :type attributes: AWSMetricNameFilterPreviewRequestAttributes + + :param type: The ``AWSMetricNameFilterPreviewResponseData`` ``type``. + :type type: AWSMetricNameFilterPreviewType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_response.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_response.py new file mode 100644 index 0000000000..b43da5d9ed --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_metric_name_filter_preview_response_data import AWSMetricNameFilterPreviewResponseData + +class AWSMetricNameFilterPreviewResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_metric_name_filter_preview_response_data import AWSMetricNameFilterPreviewResponseData + return { + "data": (AWSMetricNameFilterPreviewResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSMetricNameFilterPreviewResponseData, **kwargs): + """ + AWS metric name filter preview response body. + + :param data: AWS metric name filter preview response data. + :type data: AWSMetricNameFilterPreviewResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_response_attributes.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_response_attributes.py new file mode 100644 index 0000000000..4adcc2b18d --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_response_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_metric_name_filter_preview_namespace import AWSMetricNameFilterPreviewNamespace + +class AWSMetricNameFilterPreviewResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_metric_name_filter_preview_namespace import AWSMetricNameFilterPreviewNamespace + return { + "namespaces": ([AWSMetricNameFilterPreviewNamespace],), + } + attribute_map = { + "namespaces": "namespaces", + } + + def __init__(self_, namespaces: List[AWSMetricNameFilterPreviewNamespace], **kwargs): + """ + AWS metric name filter preview response attributes. + + :param namespaces: The list of namespaces affected by the previewed metric name filters. + :type namespaces: [AWSMetricNameFilterPreviewNamespace] + """ + super().__init__(kwargs) + + + self_.namespaces = namespaces diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_response_data.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_response_data.py new file mode 100644 index 0000000000..a6ae6d7d6c --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_metric_name_filter_preview_response_attributes import AWSMetricNameFilterPreviewResponseAttributes + from datadog_api_client.v2.model.aws_metric_name_filter_preview_type import AWSMetricNameFilterPreviewType + +class AWSMetricNameFilterPreviewResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_metric_name_filter_preview_response_attributes import AWSMetricNameFilterPreviewResponseAttributes + from datadog_api_client.v2.model.aws_metric_name_filter_preview_type import AWSMetricNameFilterPreviewType + return { + "attributes": (AWSMetricNameFilterPreviewResponseAttributes,), + "id": (str,), + "type": (AWSMetricNameFilterPreviewType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AWSMetricNameFilterPreviewResponseAttributes, id: str, type: AWSMetricNameFilterPreviewType, **kwargs): + """ + AWS metric name filter preview response data. + + :param attributes: AWS metric name filter preview response attributes. + :type attributes: AWSMetricNameFilterPreviewResponseAttributes + + :param id: Unique Datadog ID of the AWS Account Integration Config. + To get the config ID for an account, use the + `List all AWS integrations `_ + endpoint and query by AWS Account ID. + :type id: str + + :param type: The ``AWSMetricNameFilterPreviewResponseData`` ``type``. + :type type: AWSMetricNameFilterPreviewType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_metric_name_filter_preview_type.py b/datadog_api_client/v2/model/aws_metric_name_filter_preview_type.py new file mode 100644 index 0000000000..ffa36279e7 --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filter_preview_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSMetricNameFilterPreviewType(ModelSimple): + """ + The `AWSMetricNameFilterPreviewResponseData` `type`. + + :param value: If omitted defaults to "metric_name_filter_preview". Must be one of ["metric_name_filter_preview"]. + :type value: str + """ + + allowed_values = { + "metric_name_filter_preview", + } + METRIC_NAME_FILTER_PREVIEW: ClassVar["AWSMetricNameFilterPreviewType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSMetricNameFilterPreviewType.METRIC_NAME_FILTER_PREVIEW = AWSMetricNameFilterPreviewType("metric_name_filter_preview") diff --git a/datadog_api_client/v2/model/aws_metric_name_filters.py b/datadog_api_client/v2/model/aws_metric_name_filters.py new file mode 100644 index 0000000000..35dc3b47f2 --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filters.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSMetricNameFilters(ModelComposed): + + + + def __init__(self, **kwargs): + """ + AWS CloudWatch metric name filter for a single namespace. + Exactly one of ``include_only`` or ``exclude_only`` must be set. + + :param include_only: Include only metric names matching one of these patterns. + :type include_only: [str] + + :param namespace: The AWS CloudWatch namespace to which this metric name filter applies. + :type namespace: str + + :param exclude_only: Exclude metric names matching one of these patterns. + :type exclude_only: [str] + """ + 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.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + return { + "oneOf": [ + AWSMetricNameFiltersIncludeOnly, + AWSMetricNameFiltersExcludeOnly, + ], + } diff --git a/datadog_api_client/v2/model/aws_metric_name_filters_exclude_only.py b/datadog_api_client/v2/model/aws_metric_name_filters_exclude_only.py new file mode 100644 index 0000000000..7d0029519d --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filters_exclude_only.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSMetricNameFiltersExcludeOnly(ModelNormal): + @cached_property + def openapi_types(_): + return { + "exclude_only": ([str],), + "namespace": (str,), + } + attribute_map = { + "exclude_only": "exclude_only", + "namespace": "namespace", + } + + def __init__(self_, exclude_only: List[str], namespace: str, **kwargs): + """ + Exclude metric names matching one of these patterns for a single namespace. + + :param exclude_only: Exclude metric names matching one of these patterns. + :type exclude_only: [str] + + :param namespace: The AWS CloudWatch namespace to which this metric name filter applies. + :type namespace: str + """ + super().__init__(kwargs) + + + self_.exclude_only = exclude_only + self_.namespace = namespace diff --git a/datadog_api_client/v2/model/aws_metric_name_filters_include_only.py b/datadog_api_client/v2/model/aws_metric_name_filters_include_only.py new file mode 100644 index 0000000000..9c398d58c2 --- /dev/null +++ b/datadog_api_client/v2/model/aws_metric_name_filters_include_only.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSMetricNameFiltersIncludeOnly(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_only": ([str],), + "namespace": (str,), + } + attribute_map = { + "include_only": "include_only", + "namespace": "namespace", + } + + def __init__(self_, include_only: List[str], namespace: str, **kwargs): + """ + Include only metric names matching one of these patterns for a single namespace. + + :param include_only: Include only metric names matching one of these patterns. + :type include_only: [str] + + :param namespace: The AWS CloudWatch namespace to which this metric name filter applies. + :type namespace: str + """ + super().__init__(kwargs) + + + self_.include_only = include_only + self_.namespace = namespace diff --git a/datadog_api_client/v2/model/aws_metrics_config.py b/datadog_api_client/v2/model/aws_metrics_config.py new file mode 100644 index 0000000000..347a2de0b3 --- /dev/null +++ b/datadog_api_client/v2/model/aws_metrics_config.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_metric_name_filters import AWSMetricNameFilters + from datadog_api_client.v2.model.aws_namespace_filters import AWSNamespaceFilters + from datadog_api_client.v2.model.aws_namespace_tag_filter import AWSNamespaceTagFilter + from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly + from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + +class AWSMetricsConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_metric_name_filters import AWSMetricNameFilters + from datadog_api_client.v2.model.aws_namespace_filters import AWSNamespaceFilters + from datadog_api_client.v2.model.aws_namespace_tag_filter import AWSNamespaceTagFilter + return { + "automute_enabled": (bool,), + "collect_cloudwatch_alarms": (bool,), + "collect_custom_metrics": (bool,), + "enabled": (bool,), + "metric_name_filters": ([AWSMetricNameFilters],), + "namespace_filters": (AWSNamespaceFilters,), + "tag_filters": ([AWSNamespaceTagFilter],), + } + attribute_map = { + "automute_enabled": "automute_enabled", + "collect_cloudwatch_alarms": "collect_cloudwatch_alarms", + "collect_custom_metrics": "collect_custom_metrics", + "enabled": "enabled", + "metric_name_filters": "metric_name_filters", + "namespace_filters": "namespace_filters", + "tag_filters": "tag_filters", + } + + def __init__(self_, automute_enabled: Union[bool, UnsetType]=unset, collect_cloudwatch_alarms: Union[bool, UnsetType]=unset, collect_custom_metrics: Union[bool, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, metric_name_filters: Union[List[Union[AWSMetricNameFilters, AWSMetricNameFiltersIncludeOnly, AWSMetricNameFiltersExcludeOnly]], UnsetType]=unset, namespace_filters: Union[AWSNamespaceFilters, AWSNamespaceFiltersExcludeOnly, AWSNamespaceFiltersIncludeOnly, UnsetType]=unset, tag_filters: Union[List[AWSNamespaceTagFilter], UnsetType]=unset, **kwargs): + """ + AWS Metrics Collection config. + + :param automute_enabled: Enable EC2 automute for AWS metrics. Defaults to ``true``. + :type automute_enabled: bool, optional + + :param collect_cloudwatch_alarms: Enable CloudWatch alarms collection. Defaults to ``false``. + :type collect_cloudwatch_alarms: bool, optional + + :param collect_custom_metrics: Enable custom metrics collection. Defaults to ``false``. + :type collect_custom_metrics: bool, optional + + :param enabled: Enable AWS metrics collection. Defaults to ``true``. + :type enabled: bool, optional + + :param metric_name_filters: AWS CloudWatch metric name filters. Each filter applies to a single namespace. + Exactly one of ``include_only`` or ``exclude_only`` must be set on each filter. + :type metric_name_filters: [AWSMetricNameFilters], optional + + :param namespace_filters: AWS Metrics namespace filters. Defaults to ``exclude_only``. + :type namespace_filters: AWSNamespaceFilters, optional + + :param tag_filters: AWS Metrics collection tag filters list. Defaults to ``[]``. + :type tag_filters: [AWSNamespaceTagFilter], optional + """ + if automute_enabled is not unset: + kwargs["automute_enabled"] = automute_enabled + if collect_cloudwatch_alarms is not unset: + kwargs["collect_cloudwatch_alarms"] = collect_cloudwatch_alarms + if collect_custom_metrics is not unset: + kwargs["collect_custom_metrics"] = collect_custom_metrics + if enabled is not unset: + kwargs["enabled"] = enabled + if metric_name_filters is not unset: + kwargs["metric_name_filters"] = metric_name_filters + if namespace_filters is not unset: + kwargs["namespace_filters"] = namespace_filters + if tag_filters is not unset: + kwargs["tag_filters"] = tag_filters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_namespace_filters.py b/datadog_api_client/v2/model/aws_namespace_filters.py new file mode 100644 index 0000000000..d2ab2eb6fb --- /dev/null +++ b/datadog_api_client/v2/model/aws_namespace_filters.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSNamespaceFilters(ModelComposed): + + + + def __init__(self, **kwargs): + """ + AWS Metrics namespace filters. Defaults to ``exclude_only``. + + :param exclude_only: Exclude only these namespaces from metrics collection. + Defaults to `["AWS/SQS", "AWS/ElasticMapReduce", "AWS/Usage"]`. + `AWS/SQS`, `AWS/ElasticMapReduce`, and `AWS/Usage` are excluded by default + to reduce your AWS CloudWatch costs from `GetMetricData` API calls. + :type exclude_only: [str] + + :param include_only: Include only these namespaces. + :type include_only: [str] + """ + 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.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly + from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly + return { + "oneOf": [ + AWSNamespaceFiltersExcludeOnly, + AWSNamespaceFiltersIncludeOnly, + ], + } diff --git a/datadog_api_client/v2/model/aws_namespace_filters_exclude_only.py b/datadog_api_client/v2/model/aws_namespace_filters_exclude_only.py new file mode 100644 index 0000000000..4f12948301 --- /dev/null +++ b/datadog_api_client/v2/model/aws_namespace_filters_exclude_only.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSNamespaceFiltersExcludeOnly(ModelNormal): + @cached_property + def openapi_types(_): + return { + "exclude_only": ([str],), + } + attribute_map = { + "exclude_only": "exclude_only", + } + + def __init__(self_, exclude_only: List[str], **kwargs): + """ + Exclude only these namespaces from metrics collection. + Defaults to ``["AWS/SQS", "AWS/ElasticMapReduce", "AWS/Usage"]``. + ``AWS/SQS`` , ``AWS/ElasticMapReduce`` , and ``AWS/Usage`` are excluded by default + to reduce your AWS CloudWatch costs from ``GetMetricData`` API calls. + + :param exclude_only: Exclude only these namespaces from metrics collection. + Defaults to ``["AWS/SQS", "AWS/ElasticMapReduce", "AWS/Usage"]``. + ``AWS/SQS`` , ``AWS/ElasticMapReduce`` , and ``AWS/Usage`` are excluded by default + to reduce your AWS CloudWatch costs from ``GetMetricData`` API calls. + :type exclude_only: [str] + """ + super().__init__(kwargs) + + + self_.exclude_only = exclude_only diff --git a/datadog_api_client/v2/model/aws_namespace_filters_include_only.py b/datadog_api_client/v2/model/aws_namespace_filters_include_only.py new file mode 100644 index 0000000000..372dda487b --- /dev/null +++ b/datadog_api_client/v2/model/aws_namespace_filters_include_only.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSNamespaceFiltersIncludeOnly(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_only": ([str],), + } + attribute_map = { + "include_only": "include_only", + } + + def __init__(self_, include_only: List[str], **kwargs): + """ + Include only these namespaces. + + :param include_only: Include only these namespaces. + :type include_only: [str] + """ + super().__init__(kwargs) + + + self_.include_only = include_only diff --git a/datadog_api_client/v2/model/aws_namespace_tag_filter.py b/datadog_api_client/v2/model/aws_namespace_tag_filter.py new file mode 100644 index 0000000000..d5838a245b --- /dev/null +++ b/datadog_api_client/v2/model/aws_namespace_tag_filter.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSNamespaceTagFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "namespace": (str,), + "tags": ([str], none_type), + } + attribute_map = { + "namespace": "namespace", + "tags": "tags", + } + + def __init__(self_, namespace: Union[str, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + AWS Metrics Collection tag filters list. Defaults to ``[]``. + The array of custom AWS resource tags (in the form ``key:value`` ) defines a filter that Datadog uses + when collecting metrics from a specified service. + Wildcards, such as ``?`` (match a single character) and ``*`` (match multiple characters), + and exclusion using ``!`` before the tag are supported. + For EC2, only hosts that match one of the defined tags are imported into Datadog. + The rest are ignored. For example, ``env:production,instance-type:c?.*,!region:us-east-1``. + + :param namespace: The AWS service for which the tag filters defined in ``tags`` will be applied. + :type namespace: str, optional + + :param tags: The AWS resource tags to filter on for the service specified by ``namespace``. + :type tags: [str], none_type, optional + """ + if namespace is not unset: + kwargs["namespace"] = namespace + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_namespaces_response.py b/datadog_api_client/v2/model/aws_namespaces_response.py new file mode 100644 index 0000000000..650951e9e6 --- /dev/null +++ b/datadog_api_client/v2/model/aws_namespaces_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_namespaces_response_data import AWSNamespacesResponseData + +class AWSNamespacesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_namespaces_response_data import AWSNamespacesResponseData + return { + "data": (AWSNamespacesResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSNamespacesResponseData, **kwargs): + """ + AWS Namespaces response body. + + :param data: AWS Namespaces response data. + :type data: AWSNamespacesResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_namespaces_response_attributes.py b/datadog_api_client/v2/model/aws_namespaces_response_attributes.py new file mode 100644 index 0000000000..f91931aa0e --- /dev/null +++ b/datadog_api_client/v2/model/aws_namespaces_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSNamespacesResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "namespaces": ([str],), + } + attribute_map = { + "namespaces": "namespaces", + } + + def __init__(self_, namespaces: List[str], **kwargs): + """ + AWS Namespaces response attributes. + + :param namespaces: AWS CloudWatch namespace. + :type namespaces: [str] + """ + super().__init__(kwargs) + + + self_.namespaces = namespaces diff --git a/datadog_api_client/v2/model/aws_namespaces_response_data.py b/datadog_api_client/v2/model/aws_namespaces_response_data.py new file mode 100644 index 0000000000..47e37680fe --- /dev/null +++ b/datadog_api_client/v2/model/aws_namespaces_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_namespaces_response_attributes import AWSNamespacesResponseAttributes + from datadog_api_client.v2.model.aws_namespaces_response_data_type import AWSNamespacesResponseDataType + +class AWSNamespacesResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_namespaces_response_attributes import AWSNamespacesResponseAttributes + from datadog_api_client.v2.model.aws_namespaces_response_data_type import AWSNamespacesResponseDataType + return { + "attributes": (AWSNamespacesResponseAttributes,), + "id": (str,), + "type": (AWSNamespacesResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: AWSNamespacesResponseDataType, attributes: Union[AWSNamespacesResponseAttributes, UnsetType]=unset, **kwargs): + """ + AWS Namespaces response data. + + :param attributes: AWS Namespaces response attributes. + :type attributes: AWSNamespacesResponseAttributes, optional + + :param id: The ``AWSNamespacesResponseData`` ``id``. + :type id: str + + :param type: The ``AWSNamespacesResponseData`` ``type``. + :type type: AWSNamespacesResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + id = kwargs.get("id", "namespaces") + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_namespaces_response_data_type.py b/datadog_api_client/v2/model/aws_namespaces_response_data_type.py new file mode 100644 index 0000000000..5ebcd05007 --- /dev/null +++ b/datadog_api_client/v2/model/aws_namespaces_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSNamespacesResponseDataType(ModelSimple): + """ + The `AWSNamespacesResponseData` `type`. + + :param value: If omitted defaults to "namespaces". Must be one of ["namespaces"]. + :type value: str + """ + + allowed_values = { + "namespaces", + } + NAMESPACES: ClassVar["AWSNamespacesResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSNamespacesResponseDataType.NAMESPACES = AWSNamespacesResponseDataType("namespaces") diff --git a/datadog_api_client/v2/model/aws_new_external_id_response.py b/datadog_api_client/v2/model/aws_new_external_id_response.py new file mode 100644 index 0000000000..187962a5a6 --- /dev/null +++ b/datadog_api_client/v2/model/aws_new_external_id_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_new_external_id_response_data import AWSNewExternalIDResponseData + +class AWSNewExternalIDResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_new_external_id_response_data import AWSNewExternalIDResponseData + return { + "data": (AWSNewExternalIDResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AWSNewExternalIDResponseData, **kwargs): + """ + AWS External ID response body. + + :param data: AWS External ID response body. + :type data: AWSNewExternalIDResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_new_external_id_response_attributes.py b/datadog_api_client/v2/model/aws_new_external_id_response_attributes.py new file mode 100644 index 0000000000..86ec1bbadb --- /dev/null +++ b/datadog_api_client/v2/model/aws_new_external_id_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSNewExternalIDResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "external_id": (str,), + } + attribute_map = { + "external_id": "external_id", + } + + def __init__(self_, external_id: str, **kwargs): + """ + AWS External ID response body. + + :param external_id: AWS IAM External ID for associated role. + :type external_id: str + """ + super().__init__(kwargs) + + + self_.external_id = external_id diff --git a/datadog_api_client/v2/model/aws_new_external_id_response_data.py b/datadog_api_client/v2/model/aws_new_external_id_response_data.py new file mode 100644 index 0000000000..3f60d0583a --- /dev/null +++ b/datadog_api_client/v2/model/aws_new_external_id_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_new_external_id_response_attributes import AWSNewExternalIDResponseAttributes + from datadog_api_client.v2.model.aws_new_external_id_response_data_type import AWSNewExternalIDResponseDataType + +class AWSNewExternalIDResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_new_external_id_response_attributes import AWSNewExternalIDResponseAttributes + from datadog_api_client.v2.model.aws_new_external_id_response_data_type import AWSNewExternalIDResponseDataType + return { + "attributes": (AWSNewExternalIDResponseAttributes,), + "id": (str,), + "type": (AWSNewExternalIDResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: AWSNewExternalIDResponseDataType, attributes: Union[AWSNewExternalIDResponseAttributes, UnsetType]=unset, **kwargs): + """ + AWS External ID response body. + + :param attributes: AWS External ID response body. + :type attributes: AWSNewExternalIDResponseAttributes, optional + + :param id: The ``AWSNewExternalIDResponseData`` ``id``. + :type id: str + + :param type: The ``AWSNewExternalIDResponseData`` ``type``. + :type type: AWSNewExternalIDResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + id = kwargs.get("id", "external_id") + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_new_external_id_response_data_type.py b/datadog_api_client/v2/model/aws_new_external_id_response_data_type.py new file mode 100644 index 0000000000..363f60fad1 --- /dev/null +++ b/datadog_api_client/v2/model/aws_new_external_id_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AWSNewExternalIDResponseDataType(ModelSimple): + """ + The `AWSNewExternalIDResponseData` `type`. + + :param value: If omitted defaults to "external_id". Must be one of ["external_id"]. + :type value: str + """ + + allowed_values = { + "external_id", + } + EXTERNAL_ID: ClassVar["AWSNewExternalIDResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AWSNewExternalIDResponseDataType.EXTERNAL_ID = AWSNewExternalIDResponseDataType("external_id") diff --git a/datadog_api_client/v2/model/aws_on_demand_attributes.py b/datadog_api_client/v2/model/aws_on_demand_attributes.py new file mode 100644 index 0000000000..84d880e639 --- /dev/null +++ b/datadog_api_client/v2/model/aws_on_demand_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AwsOnDemandAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "arn": (str,), + "assigned_at": (str,), + "created_at": (str,), + "status": (str,), + } + attribute_map = { + "arn": "arn", + "assigned_at": "assigned_at", + "created_at": "created_at", + "status": "status", + } + + def __init__(self_, arn: Union[str, UnsetType]=unset, assigned_at: Union[str, UnsetType]=unset, created_at: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for the AWS on demand task. + + :param arn: The arn of the resource to scan. + :type arn: str, optional + + :param assigned_at: Specifies the assignment timestamp if the task has been already assigned to a scanner. + :type assigned_at: str, optional + + :param created_at: The task submission timestamp. + :type created_at: str, optional + + :param status: Indicates the status of the task. + QUEUED: the task has been submitted successfully and the resource has not been assigned to a scanner yet. + ASSIGNED: the task has been assigned. + ABORTED: the scan has been aborted after a period of time due to technical reasons, such as resource not found, insufficient permissions, or the absence of a configured scanner. + :type status: str, optional + """ + if arn is not unset: + kwargs["arn"] = arn + if assigned_at is not unset: + kwargs["assigned_at"] = assigned_at + if created_at is not unset: + kwargs["created_at"] = created_at + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_on_demand_create_attributes.py b/datadog_api_client/v2/model/aws_on_demand_create_attributes.py new file mode 100644 index 0000000000..814ce8641e --- /dev/null +++ b/datadog_api_client/v2/model/aws_on_demand_create_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AwsOnDemandCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "arn": (str,), + } + attribute_map = { + "arn": "arn", + } + + def __init__(self_, arn: str, **kwargs): + """ + Attributes for the AWS on demand task. + + :param arn: The arn of the resource to scan. Agentless supports the scan of EC2 instances, lambda functions, AMI, ECR, RDS and S3 buckets. + :type arn: str + """ + super().__init__(kwargs) + + + self_.arn = arn diff --git a/datadog_api_client/v2/model/aws_on_demand_create_data.py b/datadog_api_client/v2/model/aws_on_demand_create_data.py new file mode 100644 index 0000000000..c7cc3e3d95 --- /dev/null +++ b/datadog_api_client/v2/model/aws_on_demand_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_on_demand_create_attributes import AwsOnDemandCreateAttributes + from datadog_api_client.v2.model.aws_on_demand_type import AwsOnDemandType + +class AwsOnDemandCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_on_demand_create_attributes import AwsOnDemandCreateAttributes + from datadog_api_client.v2.model.aws_on_demand_type import AwsOnDemandType + return { + "attributes": (AwsOnDemandCreateAttributes,), + "type": (AwsOnDemandType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: AwsOnDemandCreateAttributes, type: AwsOnDemandType, **kwargs): + """ + Object for a single AWS on demand task. + + :param attributes: Attributes for the AWS on demand task. + :type attributes: AwsOnDemandCreateAttributes + + :param type: The type of the on demand task. The value should always be ``aws_resource``. + :type type: AwsOnDemandType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/aws_on_demand_create_request.py b/datadog_api_client/v2/model/aws_on_demand_create_request.py new file mode 100644 index 0000000000..592e91ea16 --- /dev/null +++ b/datadog_api_client/v2/model/aws_on_demand_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_on_demand_create_data import AwsOnDemandCreateData + +class AwsOnDemandCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_on_demand_create_data import AwsOnDemandCreateData + return { + "data": (AwsOnDemandCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AwsOnDemandCreateData, **kwargs): + """ + Request object that includes the on demand task to submit. + + :param data: Object for a single AWS on demand task. + :type data: AwsOnDemandCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_on_demand_data.py b/datadog_api_client/v2/model/aws_on_demand_data.py new file mode 100644 index 0000000000..eaca00c455 --- /dev/null +++ b/datadog_api_client/v2/model/aws_on_demand_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_on_demand_attributes import AwsOnDemandAttributes + from datadog_api_client.v2.model.aws_on_demand_type import AwsOnDemandType + +class AwsOnDemandData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_on_demand_attributes import AwsOnDemandAttributes + from datadog_api_client.v2.model.aws_on_demand_type import AwsOnDemandType + return { + "attributes": (AwsOnDemandAttributes,), + "id": (str,), + "type": (AwsOnDemandType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AwsOnDemandAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AwsOnDemandType, UnsetType]=unset, **kwargs): + """ + Single AWS on demand task. + + :param attributes: Attributes for the AWS on demand task. + :type attributes: AwsOnDemandAttributes, optional + + :param id: The UUID of the task. + :type id: str, optional + + :param type: The type of the on demand task. The value should always be ``aws_resource``. + :type type: AwsOnDemandType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_on_demand_list_response.py b/datadog_api_client/v2/model/aws_on_demand_list_response.py new file mode 100644 index 0000000000..b97e83b180 --- /dev/null +++ b/datadog_api_client/v2/model/aws_on_demand_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_on_demand_data import AwsOnDemandData + +class AwsOnDemandListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_on_demand_data import AwsOnDemandData + return { + "data": ([AwsOnDemandData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[AwsOnDemandData], UnsetType]=unset, **kwargs): + """ + Response object that includes a list of AWS on demand tasks. + + :param data: A list of on demand tasks. + :type data: [AwsOnDemandData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_on_demand_response.py b/datadog_api_client/v2/model/aws_on_demand_response.py new file mode 100644 index 0000000000..f8ba618b96 --- /dev/null +++ b/datadog_api_client/v2/model/aws_on_demand_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_on_demand_data import AwsOnDemandData + +class AwsOnDemandResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_on_demand_data import AwsOnDemandData + return { + "data": (AwsOnDemandData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AwsOnDemandData, UnsetType]=unset, **kwargs): + """ + Response object that includes an AWS on demand task. + + :param data: Single AWS on demand task. + :type data: AwsOnDemandData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_on_demand_type.py b/datadog_api_client/v2/model/aws_on_demand_type.py new file mode 100644 index 0000000000..c7e29c22bf --- /dev/null +++ b/datadog_api_client/v2/model/aws_on_demand_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AwsOnDemandType(ModelSimple): + """ + The type of the on demand task. The value should always be `aws_resource`. + + :param value: If omitted defaults to "aws_resource". Must be one of ["aws_resource"]. + :type value: str + """ + + allowed_values = { + "aws_resource", + } + AWS_RESOURCE: ClassVar["AwsOnDemandType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AwsOnDemandType.AWS_RESOURCE = AwsOnDemandType("aws_resource") diff --git a/datadog_api_client/v2/model/aws_regions.py b/datadog_api_client/v2/model/aws_regions.py new file mode 100644 index 0000000000..6c71a404fa --- /dev/null +++ b/datadog_api_client/v2/model/aws_regions.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSRegions(ModelComposed): + + + + def __init__(self, **kwargs): + """ + AWS Regions to collect data from. Defaults to ``include_all``. + + :param include_all: Include all regions. + :type include_all: bool + + :param include_only: Include only these regions. + :type include_only: [str] + """ + 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.aws_regions_include_all import AWSRegionsIncludeAll + from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly + return { + "oneOf": [ + AWSRegionsIncludeAll, + AWSRegionsIncludeOnly, + ], + } diff --git a/datadog_api_client/v2/model/aws_regions_include_all.py b/datadog_api_client/v2/model/aws_regions_include_all.py new file mode 100644 index 0000000000..ec9df61e61 --- /dev/null +++ b/datadog_api_client/v2/model/aws_regions_include_all.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSRegionsIncludeAll(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_all": (bool,), + } + attribute_map = { + "include_all": "include_all", + } + + def __init__(self_, include_all: bool, **kwargs): + """ + Include all regions. Defaults to ``true``. + + :param include_all: Include all regions. + :type include_all: bool + """ + super().__init__(kwargs) + + + self_.include_all = include_all diff --git a/datadog_api_client/v2/model/aws_regions_include_only.py b/datadog_api_client/v2/model/aws_regions_include_only.py new file mode 100644 index 0000000000..78b2ace881 --- /dev/null +++ b/datadog_api_client/v2/model/aws_regions_include_only.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSRegionsIncludeOnly(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_only": ([str],), + } + attribute_map = { + "include_only": "include_only", + } + + def __init__(self_, include_only: List[str], **kwargs): + """ + Include only these regions. + + :param include_only: Include only these regions. + :type include_only: [str] + """ + super().__init__(kwargs) + + + self_.include_only = include_only diff --git a/datadog_api_client/v2/model/aws_resources_config.py b/datadog_api_client/v2/model/aws_resources_config.py new file mode 100644 index 0000000000..23f722bf46 --- /dev/null +++ b/datadog_api_client/v2/model/aws_resources_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AWSResourcesConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cloud_security_posture_management_collection": (bool,), + "extended_collection": (bool,), + } + attribute_map = { + "cloud_security_posture_management_collection": "cloud_security_posture_management_collection", + "extended_collection": "extended_collection", + } + + def __init__(self_, cloud_security_posture_management_collection: Union[bool, UnsetType]=unset, extended_collection: Union[bool, UnsetType]=unset, **kwargs): + """ + AWS Resources Collection config. + + :param cloud_security_posture_management_collection: Enable Cloud Security Management to scan AWS resources for vulnerabilities, misconfigurations, + identity risks, and compliance violations. Defaults to ``false``. + Requires ``extended_collection`` to be set to ``true``. + :type cloud_security_posture_management_collection: bool, optional + + :param extended_collection: Whether Datadog collects additional attributes and configuration information about the resources + in your AWS account. Defaults to ``true``. Required for ``cloud_security_posture_management_collection``. + :type extended_collection: bool, optional + """ + if cloud_security_posture_management_collection is not unset: + kwargs["cloud_security_posture_management_collection"] = cloud_security_posture_management_collection + if extended_collection is not unset: + kwargs["extended_collection"] = extended_collection + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_scan_options_attributes.py b/datadog_api_client/v2/model/aws_scan_options_attributes.py new file mode 100644 index 0000000000..fb4012ef92 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AwsScanOptionsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compliance_host": (bool,), + "_lambda": (bool,), + "sensitive_data": (bool,), + "vuln_containers_os": (bool,), + "vuln_host_os": (bool,), + } + attribute_map = { + "compliance_host": "compliance_host", + "_lambda": "lambda", + "sensitive_data": "sensitive_data", + "vuln_containers_os": "vuln_containers_os", + "vuln_host_os": "vuln_host_os", + } + + def __init__(self_, compliance_host: Union[bool, UnsetType]=unset, _lambda: Union[bool, UnsetType]=unset, sensitive_data: Union[bool, UnsetType]=unset, vuln_containers_os: Union[bool, UnsetType]=unset, vuln_host_os: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for the AWS scan options. + + :param compliance_host: Indicates whether host compliance scanning is enabled. + :type compliance_host: bool, optional + + :param _lambda: Indicates if scanning of Lambda functions is enabled. + :type _lambda: bool, optional + + :param sensitive_data: Indicates if scanning for sensitive data is enabled. + :type sensitive_data: bool, optional + + :param vuln_containers_os: Indicates if scanning for vulnerabilities in containers is enabled. + :type vuln_containers_os: bool, optional + + :param vuln_host_os: Indicates if scanning for vulnerabilities in hosts is enabled. + :type vuln_host_os: bool, optional + """ + if compliance_host is not unset: + kwargs["compliance_host"] = compliance_host + if _lambda is not unset: + kwargs["_lambda"] = _lambda + if sensitive_data is not unset: + kwargs["sensitive_data"] = sensitive_data + if vuln_containers_os is not unset: + kwargs["vuln_containers_os"] = vuln_containers_os + if vuln_host_os is not unset: + kwargs["vuln_host_os"] = vuln_host_os + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_scan_options_create_attributes.py b/datadog_api_client/v2/model/aws_scan_options_create_attributes.py new file mode 100644 index 0000000000..bf0f36dd5c --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_create_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AwsScanOptionsCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compliance_host": (bool,), + "_lambda": (bool,), + "sensitive_data": (bool,), + "vuln_containers_os": (bool,), + "vuln_host_os": (bool,), + } + attribute_map = { + "compliance_host": "compliance_host", + "_lambda": "lambda", + "sensitive_data": "sensitive_data", + "vuln_containers_os": "vuln_containers_os", + "vuln_host_os": "vuln_host_os", + } + + def __init__(self_, compliance_host: bool, _lambda: bool, sensitive_data: bool, vuln_containers_os: bool, vuln_host_os: bool, **kwargs): + """ + Attributes for the AWS scan options to create. + + :param compliance_host: Indicates whether host compliance scanning is enabled. + :type compliance_host: bool + + :param _lambda: Indicates if scanning of Lambda functions is enabled. + :type _lambda: bool + + :param sensitive_data: Indicates if scanning for sensitive data is enabled. + :type sensitive_data: bool + + :param vuln_containers_os: Indicates if scanning for vulnerabilities in containers is enabled. + :type vuln_containers_os: bool + + :param vuln_host_os: Indicates if scanning for vulnerabilities in hosts is enabled. + :type vuln_host_os: bool + """ + super().__init__(kwargs) + + + self_.compliance_host = compliance_host + self_._lambda = _lambda + self_.sensitive_data = sensitive_data + self_.vuln_containers_os = vuln_containers_os + self_.vuln_host_os = vuln_host_os diff --git a/datadog_api_client/v2/model/aws_scan_options_create_data.py b/datadog_api_client/v2/model/aws_scan_options_create_data.py new file mode 100644 index 0000000000..57fb018a15 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_create_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_scan_options_create_attributes import AwsScanOptionsCreateAttributes + from datadog_api_client.v2.model.aws_scan_options_type import AwsScanOptionsType + +class AwsScanOptionsCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_scan_options_create_attributes import AwsScanOptionsCreateAttributes + from datadog_api_client.v2.model.aws_scan_options_type import AwsScanOptionsType + return { + "attributes": (AwsScanOptionsCreateAttributes,), + "id": (str,), + "type": (AwsScanOptionsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AwsScanOptionsCreateAttributes, id: str, type: AwsScanOptionsType, **kwargs): + """ + Object for the scan options of a single AWS account. + + :param attributes: Attributes for the AWS scan options to create. + :type attributes: AwsScanOptionsCreateAttributes + + :param id: The ID of the AWS account. + :type id: str + + :param type: The type of the resource. The value should always be ``aws_scan_options``. + :type type: AwsScanOptionsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_scan_options_create_request.py b/datadog_api_client/v2/model/aws_scan_options_create_request.py new file mode 100644 index 0000000000..f103e41f70 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_scan_options_create_data import AwsScanOptionsCreateData + +class AwsScanOptionsCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_scan_options_create_data import AwsScanOptionsCreateData + return { + "data": (AwsScanOptionsCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AwsScanOptionsCreateData, **kwargs): + """ + Request object that includes the scan options to create. + + :param data: Object for the scan options of a single AWS account. + :type data: AwsScanOptionsCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_scan_options_data.py b/datadog_api_client/v2/model/aws_scan_options_data.py new file mode 100644 index 0000000000..445f5dc981 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_scan_options_attributes import AwsScanOptionsAttributes + from datadog_api_client.v2.model.aws_scan_options_type import AwsScanOptionsType + +class AwsScanOptionsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_scan_options_attributes import AwsScanOptionsAttributes + from datadog_api_client.v2.model.aws_scan_options_type import AwsScanOptionsType + return { + "attributes": (AwsScanOptionsAttributes,), + "id": (str,), + "type": (AwsScanOptionsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[AwsScanOptionsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[AwsScanOptionsType, UnsetType]=unset, **kwargs): + """ + Single AWS Scan Options entry. + + :param attributes: Attributes for the AWS scan options. + :type attributes: AwsScanOptionsAttributes, optional + + :param id: The ID of the AWS account. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``aws_scan_options``. + :type type: AwsScanOptionsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_scan_options_list_response.py b/datadog_api_client/v2/model/aws_scan_options_list_response.py new file mode 100644 index 0000000000..c3b042b054 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_scan_options_data import AwsScanOptionsData + +class AwsScanOptionsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_scan_options_data import AwsScanOptionsData + return { + "data": ([AwsScanOptionsData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[AwsScanOptionsData], UnsetType]=unset, **kwargs): + """ + Response object that includes a list of AWS scan options. + + :param data: A list of AWS scan options. + :type data: [AwsScanOptionsData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_scan_options_response.py b/datadog_api_client/v2/model/aws_scan_options_response.py new file mode 100644 index 0000000000..a722f61914 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_scan_options_data import AwsScanOptionsData + +class AwsScanOptionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_scan_options_data import AwsScanOptionsData + return { + "data": (AwsScanOptionsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AwsScanOptionsData, UnsetType]=unset, **kwargs): + """ + Response object that includes the scan options of an AWS account. + + :param data: Single AWS Scan Options entry. + :type data: AwsScanOptionsData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_scan_options_type.py b/datadog_api_client/v2/model/aws_scan_options_type.py new file mode 100644 index 0000000000..b3c62e23a2 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AwsScanOptionsType(ModelSimple): + """ + The type of the resource. The value should always be `aws_scan_options`. + + :param value: If omitted defaults to "aws_scan_options". Must be one of ["aws_scan_options"]. + :type value: str + """ + + allowed_values = { + "aws_scan_options", + } + AWS_SCAN_OPTIONS: ClassVar["AwsScanOptionsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AwsScanOptionsType.AWS_SCAN_OPTIONS = AwsScanOptionsType("aws_scan_options") diff --git a/datadog_api_client/v2/model/aws_scan_options_update_attributes.py b/datadog_api_client/v2/model/aws_scan_options_update_attributes.py new file mode 100644 index 0000000000..714c0e8696 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AwsScanOptionsUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compliance_host": (bool,), + "_lambda": (bool,), + "sensitive_data": (bool,), + "vuln_containers_os": (bool,), + "vuln_host_os": (bool,), + } + attribute_map = { + "compliance_host": "compliance_host", + "_lambda": "lambda", + "sensitive_data": "sensitive_data", + "vuln_containers_os": "vuln_containers_os", + "vuln_host_os": "vuln_host_os", + } + + def __init__(self_, compliance_host: Union[bool, UnsetType]=unset, _lambda: Union[bool, UnsetType]=unset, sensitive_data: Union[bool, UnsetType]=unset, vuln_containers_os: Union[bool, UnsetType]=unset, vuln_host_os: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for the AWS scan options to update. + + :param compliance_host: Indicates whether host compliance scanning is enabled. + :type compliance_host: bool, optional + + :param _lambda: Indicates if scanning of Lambda functions is enabled. + :type _lambda: bool, optional + + :param sensitive_data: Indicates if scanning for sensitive data is enabled. + :type sensitive_data: bool, optional + + :param vuln_containers_os: Indicates if scanning for vulnerabilities in containers is enabled. + :type vuln_containers_os: bool, optional + + :param vuln_host_os: Indicates if scanning for vulnerabilities in hosts is enabled. + :type vuln_host_os: bool, optional + """ + if compliance_host is not unset: + kwargs["compliance_host"] = compliance_host + if _lambda is not unset: + kwargs["_lambda"] = _lambda + if sensitive_data is not unset: + kwargs["sensitive_data"] = sensitive_data + if vuln_containers_os is not unset: + kwargs["vuln_containers_os"] = vuln_containers_os + if vuln_host_os is not unset: + kwargs["vuln_host_os"] = vuln_host_os + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/aws_scan_options_update_data.py b/datadog_api_client/v2/model/aws_scan_options_update_data.py new file mode 100644 index 0000000000..73c7a70417 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_scan_options_update_attributes import AwsScanOptionsUpdateAttributes + from datadog_api_client.v2.model.aws_scan_options_type import AwsScanOptionsType + +class AwsScanOptionsUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_scan_options_update_attributes import AwsScanOptionsUpdateAttributes + from datadog_api_client.v2.model.aws_scan_options_type import AwsScanOptionsType + return { + "attributes": (AwsScanOptionsUpdateAttributes,), + "id": (str,), + "type": (AwsScanOptionsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AwsScanOptionsUpdateAttributes, id: str, type: AwsScanOptionsType, **kwargs): + """ + Object for the scan options of a single AWS account. + + :param attributes: Attributes for the AWS scan options to update. + :type attributes: AwsScanOptionsUpdateAttributes + + :param id: The ID of the AWS account. + :type id: str + + :param type: The type of the resource. The value should always be ``aws_scan_options``. + :type type: AwsScanOptionsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/aws_scan_options_update_request.py b/datadog_api_client/v2/model/aws_scan_options_update_request.py new file mode 100644 index 0000000000..dfb90fe2c6 --- /dev/null +++ b/datadog_api_client/v2/model/aws_scan_options_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aws_scan_options_update_data import AwsScanOptionsUpdateData + +class AwsScanOptionsUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aws_scan_options_update_data import AwsScanOptionsUpdateData + return { + "data": (AwsScanOptionsUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AwsScanOptionsUpdateData, **kwargs): + """ + Request object that includes the scan options to update. + + :param data: Object for the scan options of a single AWS account. + :type data: AwsScanOptionsUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/aws_traces_config.py b/datadog_api_client/v2/model/aws_traces_config.py new file mode 100644 index 0000000000..71f518bc74 --- /dev/null +++ b/datadog_api_client/v2/model/aws_traces_config.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.x_ray_services_list import XRayServicesList + from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + +class AWSTracesConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.x_ray_services_list import XRayServicesList + return { + "xray_services": (XRayServicesList,), + } + attribute_map = { + "xray_services": "xray_services", + } + + def __init__(self_, xray_services: Union[XRayServicesList, XRayServicesIncludeAll, XRayServicesIncludeOnly, UnsetType]=unset, **kwargs): + """ + AWS Traces Collection config. + + :param xray_services: AWS X-Ray services to collect traces from. Defaults to ``include_only``. + :type xray_services: XRayServicesList, optional + """ + if xray_services is not unset: + kwargs["xray_services"] = xray_services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/azure_credentials.py b/datadog_api_client/v2/model/azure_credentials.py new file mode 100644 index 0000000000..48b0a69216 --- /dev/null +++ b/datadog_api_client/v2/model/azure_credentials.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AzureCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``AzureCredentials`` object. + + :param app_client_id: The Client ID, also known as the Application ID in Azure, is a unique identifier for an application. It's used to identify the application during the authentication process. Your Application (client) ID is listed in the application's overview page. You can navigate to your application via the Azure Directory. + :type app_client_id: str + + :param client_secret: The Client Secret is a confidential piece of information known only to the application and Azure AD. It's used to prove the application's identity. Your Client Secret is available from the application’s secrets page. You can navigate to your application via the Azure Directory. + :type client_secret: str + + :param custom_scopes: If provided, the custom scope to be requested from Microsoft when acquiring an OAuth 2 access token. This custom scope is used only in conjunction with the HTTP action. A resource's scope is constructed by using the identifier URI for the resource and .default, separated by a forward slash (/) as follows:{identifierURI}/.default. + :type custom_scopes: str, optional + + :param tenant_id: The Tenant ID, also known as the Directory ID in Azure, is a unique identifier that represents an Azure AD instance. Your Tenant ID (Directory ID) is listed in your Active Directory overview page under the 'Tenant information' section. + :type tenant_id: str + + :param type: The definition of the `AzureTenant` object. + :type type: AzureTenantType + """ + 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.azure_tenant import AzureTenant + return { + "oneOf": [ + AzureTenant, + ], + } diff --git a/datadog_api_client/v2/model/azure_credentials_update.py b/datadog_api_client/v2/model/azure_credentials_update.py new file mode 100644 index 0000000000..ce3f803f52 --- /dev/null +++ b/datadog_api_client/v2/model/azure_credentials_update.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AzureCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``AzureCredentialsUpdate`` object. + + :param app_client_id: The Client ID, also known as the Application ID in Azure, is a unique identifier for an application. It's used to identify the application during the authentication process. Your Application (client) ID is listed in the application's overview page. You can navigate to your application via the Azure Directory. + :type app_client_id: str, optional + + :param client_secret: The Client Secret is a confidential piece of information known only to the application and Azure AD. It's used to prove the application's identity. Your Client Secret is available from the application’s secrets page. You can navigate to your application via the Azure Directory. + :type client_secret: str, optional + + :param custom_scopes: If provided, the custom scope to be requested from Microsoft when acquiring an OAuth 2 access token. This custom scope is used only in conjunction with the HTTP action. A resource's scope is constructed by using the identifier URI for the resource and .default, separated by a forward slash (/) as follows:{identifierURI}/.default. + :type custom_scopes: str, optional + + :param tenant_id: The Tenant ID, also known as the Directory ID in Azure, is a unique identifier that represents an Azure AD instance. Your Tenant ID (Directory ID) is listed in your Active Directory overview page under the 'Tenant information' section. + :type tenant_id: str, optional + + :param type: The definition of the `AzureTenant` object. + :type type: AzureTenantType + """ + 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.azure_tenant_update import AzureTenantUpdate + return { + "oneOf": [ + AzureTenantUpdate, + ], + } diff --git a/datadog_api_client/v2/model/azure_integration.py b/datadog_api_client/v2/model/azure_integration.py new file mode 100644 index 0000000000..ffd05e449d --- /dev/null +++ b/datadog_api_client/v2/model/azure_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_credentials import AzureCredentials + from datadog_api_client.v2.model.azure_integration_type import AzureIntegrationType + from datadog_api_client.v2.model.azure_tenant import AzureTenant + +class AzureIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_credentials import AzureCredentials + from datadog_api_client.v2.model.azure_integration_type import AzureIntegrationType + return { + "credentials": (AzureCredentials,), + "type": (AzureIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[AzureCredentials, AzureTenant], type: AzureIntegrationType, **kwargs): + """ + The definition of the ``AzureIntegration`` object. + + :param credentials: The definition of the ``AzureCredentials`` object. + :type credentials: AzureCredentials + + :param type: The definition of the ``AzureIntegrationType`` object. + :type type: AzureIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/azure_integration_type.py b/datadog_api_client/v2/model/azure_integration_type.py new file mode 100644 index 0000000000..ab8e1aff0e --- /dev/null +++ b/datadog_api_client/v2/model/azure_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AzureIntegrationType(ModelSimple): + """ + The definition of the `AzureIntegrationType` object. + + :param value: If omitted defaults to "Azure". Must be one of ["Azure"]. + :type value: str + """ + + allowed_values = { + "Azure", + } + AZURE: ClassVar["AzureIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AzureIntegrationType.AZURE = AzureIntegrationType("Azure") diff --git a/datadog_api_client/v2/model/azure_integration_update.py b/datadog_api_client/v2/model/azure_integration_update.py new file mode 100644 index 0000000000..4665e93d77 --- /dev/null +++ b/datadog_api_client/v2/model/azure_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_credentials_update import AzureCredentialsUpdate + from datadog_api_client.v2.model.azure_integration_type import AzureIntegrationType + from datadog_api_client.v2.model.azure_tenant_update import AzureTenantUpdate + +class AzureIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_credentials_update import AzureCredentialsUpdate + from datadog_api_client.v2.model.azure_integration_type import AzureIntegrationType + return { + "credentials": (AzureCredentialsUpdate,), + "type": (AzureIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: AzureIntegrationType, credentials: Union[AzureCredentialsUpdate, AzureTenantUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``AzureIntegrationUpdate`` object. + + :param credentials: The definition of the ``AzureCredentialsUpdate`` object. + :type credentials: AzureCredentialsUpdate, optional + + :param type: The definition of the ``AzureIntegrationType`` object. + :type type: AzureIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/azure_scan_options.py b/datadog_api_client/v2/model/azure_scan_options.py new file mode 100644 index 0000000000..9d05b75e2b --- /dev/null +++ b/datadog_api_client/v2/model/azure_scan_options.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_scan_options_data import AzureScanOptionsData + +class AzureScanOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_scan_options_data import AzureScanOptionsData + return { + "data": (AzureScanOptionsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AzureScanOptionsData, UnsetType]=unset, **kwargs): + """ + Response object containing Azure scan options for a single subscription. + + :param data: Single Azure scan options entry. + :type data: AzureScanOptionsData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/azure_scan_options_array.py b/datadog_api_client/v2/model/azure_scan_options_array.py new file mode 100644 index 0000000000..0cc239a358 --- /dev/null +++ b/datadog_api_client/v2/model/azure_scan_options_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_scan_options_data import AzureScanOptionsData + +class AzureScanOptionsArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_scan_options_data import AzureScanOptionsData + return { + "data": ([AzureScanOptionsData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AzureScanOptionsData], **kwargs): + """ + Response object containing a list of Azure scan options. + + :param data: A list of Azure scan options. + :type data: [AzureScanOptionsData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/azure_scan_options_data.py b/datadog_api_client/v2/model/azure_scan_options_data.py new file mode 100644 index 0000000000..46e97acea4 --- /dev/null +++ b/datadog_api_client/v2/model/azure_scan_options_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_scan_options_data_attributes import AzureScanOptionsDataAttributes + from datadog_api_client.v2.model.azure_scan_options_data_type import AzureScanOptionsDataType + +class AzureScanOptionsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_scan_options_data_attributes import AzureScanOptionsDataAttributes + from datadog_api_client.v2.model.azure_scan_options_data_type import AzureScanOptionsDataType + return { + "attributes": (AzureScanOptionsDataAttributes,), + "id": (str,), + "type": (AzureScanOptionsDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: AzureScanOptionsDataType, attributes: Union[AzureScanOptionsDataAttributes, UnsetType]=unset, **kwargs): + """ + Single Azure scan options entry. + + :param attributes: Attributes for Azure scan options configuration. + :type attributes: AzureScanOptionsDataAttributes, optional + + :param id: The Azure subscription ID. + :type id: str + + :param type: The type of the resource. The value should always be ``azure_scan_options``. + :type type: AzureScanOptionsDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/azure_scan_options_data_attributes.py b/datadog_api_client/v2/model/azure_scan_options_data_attributes.py new file mode 100644 index 0000000000..63e867cb59 --- /dev/null +++ b/datadog_api_client/v2/model/azure_scan_options_data_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AzureScanOptionsDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compliance_host": (bool,), + "function": (bool,), + "vuln_containers_os": (bool,), + "vuln_host_os": (bool,), + } + attribute_map = { + "compliance_host": "compliance_host", + "function": "function", + "vuln_containers_os": "vuln_containers_os", + "vuln_host_os": "vuln_host_os", + } + + def __init__(self_, compliance_host: Union[bool, UnsetType]=unset, function: Union[bool, UnsetType]=unset, vuln_containers_os: Union[bool, UnsetType]=unset, vuln_host_os: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for Azure scan options configuration. + + :param compliance_host: Indicates whether host compliance scanning is enabled. + :type compliance_host: bool, optional + + :param function: Indicates if scanning of Azure Functions is enabled. + :type function: bool, optional + + :param vuln_containers_os: Indicates if scanning for vulnerabilities in containers is enabled. + :type vuln_containers_os: bool, optional + + :param vuln_host_os: Indicates if scanning for vulnerabilities in hosts is enabled. + :type vuln_host_os: bool, optional + """ + if compliance_host is not unset: + kwargs["compliance_host"] = compliance_host + if function is not unset: + kwargs["function"] = function + if vuln_containers_os is not unset: + kwargs["vuln_containers_os"] = vuln_containers_os + if vuln_host_os is not unset: + kwargs["vuln_host_os"] = vuln_host_os + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/azure_scan_options_data_type.py b/datadog_api_client/v2/model/azure_scan_options_data_type.py new file mode 100644 index 0000000000..e238d9a0c0 --- /dev/null +++ b/datadog_api_client/v2/model/azure_scan_options_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AzureScanOptionsDataType(ModelSimple): + """ + The type of the resource. The value should always be `azure_scan_options`. + + :param value: If omitted defaults to "azure_scan_options". Must be one of ["azure_scan_options"]. + :type value: str + """ + + allowed_values = { + "azure_scan_options", + } + AZURE_SCAN_OPTIONS: ClassVar["AzureScanOptionsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AzureScanOptionsDataType.AZURE_SCAN_OPTIONS = AzureScanOptionsDataType("azure_scan_options") diff --git a/datadog_api_client/v2/model/azure_scan_options_input_update.py b/datadog_api_client/v2/model/azure_scan_options_input_update.py new file mode 100644 index 0000000000..d7d78349f7 --- /dev/null +++ b/datadog_api_client/v2/model/azure_scan_options_input_update.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_scan_options_input_update_data import AzureScanOptionsInputUpdateData + +class AzureScanOptionsInputUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_scan_options_input_update_data import AzureScanOptionsInputUpdateData + return { + "data": (AzureScanOptionsInputUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AzureScanOptionsInputUpdateData, UnsetType]=unset, **kwargs): + """ + Request object for updating Azure scan options. + + :param data: Data object for updating the scan options of a single Azure subscription. + :type data: AzureScanOptionsInputUpdateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/azure_scan_options_input_update_data.py b/datadog_api_client/v2/model/azure_scan_options_input_update_data.py new file mode 100644 index 0000000000..69c5a315f9 --- /dev/null +++ b/datadog_api_client/v2/model/azure_scan_options_input_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_scan_options_input_update_data_attributes import AzureScanOptionsInputUpdateDataAttributes + from datadog_api_client.v2.model.azure_scan_options_input_update_data_type import AzureScanOptionsInputUpdateDataType + +class AzureScanOptionsInputUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_scan_options_input_update_data_attributes import AzureScanOptionsInputUpdateDataAttributes + from datadog_api_client.v2.model.azure_scan_options_input_update_data_type import AzureScanOptionsInputUpdateDataType + return { + "attributes": (AzureScanOptionsInputUpdateDataAttributes,), + "id": (str,), + "type": (AzureScanOptionsInputUpdateDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: AzureScanOptionsInputUpdateDataType, attributes: Union[AzureScanOptionsInputUpdateDataAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating the scan options of a single Azure subscription. + + :param attributes: Attributes for updating Azure scan options configuration. + :type attributes: AzureScanOptionsInputUpdateDataAttributes, optional + + :param id: The Azure subscription ID. + :type id: str + + :param type: Azure scan options resource type. + :type type: AzureScanOptionsInputUpdateDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/azure_scan_options_input_update_data_attributes.py b/datadog_api_client/v2/model/azure_scan_options_input_update_data_attributes.py new file mode 100644 index 0000000000..3867b323a4 --- /dev/null +++ b/datadog_api_client/v2/model/azure_scan_options_input_update_data_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AzureScanOptionsInputUpdateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compliance_host": (bool,), + "function": (bool,), + "vuln_containers_os": (bool,), + "vuln_host_os": (bool,), + } + attribute_map = { + "compliance_host": "compliance_host", + "function": "function", + "vuln_containers_os": "vuln_containers_os", + "vuln_host_os": "vuln_host_os", + } + + def __init__(self_, compliance_host: Union[bool, UnsetType]=unset, function: Union[bool, UnsetType]=unset, vuln_containers_os: Union[bool, UnsetType]=unset, vuln_host_os: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for updating Azure scan options configuration. + + :param compliance_host: Indicates whether host compliance scanning is enabled. + :type compliance_host: bool, optional + + :param function: Indicates if scanning of Azure Functions is enabled. + :type function: bool, optional + + :param vuln_containers_os: Indicates if scanning for vulnerabilities in containers is enabled. + :type vuln_containers_os: bool, optional + + :param vuln_host_os: Indicates if scanning for vulnerabilities in hosts is enabled. + :type vuln_host_os: bool, optional + """ + if compliance_host is not unset: + kwargs["compliance_host"] = compliance_host + if function is not unset: + kwargs["function"] = function + if vuln_containers_os is not unset: + kwargs["vuln_containers_os"] = vuln_containers_os + if vuln_host_os is not unset: + kwargs["vuln_host_os"] = vuln_host_os + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/azure_scan_options_input_update_data_type.py b/datadog_api_client/v2/model/azure_scan_options_input_update_data_type.py new file mode 100644 index 0000000000..a76f77e13d --- /dev/null +++ b/datadog_api_client/v2/model/azure_scan_options_input_update_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AzureScanOptionsInputUpdateDataType(ModelSimple): + """ + Azure scan options resource type. + + :param value: If omitted defaults to "azure_scan_options". Must be one of ["azure_scan_options"]. + :type value: str + """ + + allowed_values = { + "azure_scan_options", + } + AZURE_SCAN_OPTIONS: ClassVar["AzureScanOptionsInputUpdateDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AzureScanOptionsInputUpdateDataType.AZURE_SCAN_OPTIONS = AzureScanOptionsInputUpdateDataType("azure_scan_options") diff --git a/datadog_api_client/v2/model/azure_storage_destination.py b/datadog_api_client/v2/model/azure_storage_destination.py new file mode 100644 index 0000000000..d97cfee9b5 --- /dev/null +++ b/datadog_api_client/v2/model/azure_storage_destination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.azure_storage_destination_type import AzureStorageDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class AzureStorageDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.azure_storage_destination_type import AzureStorageDestinationType + return { + "blob_prefix": (str,), + "buffer": (ObservabilityPipelineBufferOptions,), + "connection_string_key": (str,), + "container_name": (str,), + "id": (str,), + "inputs": ([str],), + "type": (AzureStorageDestinationType,), + } + attribute_map = { + "blob_prefix": "blob_prefix", + "buffer": "buffer", + "connection_string_key": "connection_string_key", + "container_name": "container_name", + "id": "id", + "inputs": "inputs", + "type": "type", + } + + def __init__(self_, container_name: str, id: str, inputs: List[str], type: AzureStorageDestinationType, blob_prefix: Union[str, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, connection_string_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``azure_storage`` destination forwards logs to an Azure Blob Storage container. + + **Supported pipeline types:** logs + + :param blob_prefix: Optional prefix for blobs written to the container. + :type blob_prefix: str, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param connection_string_key: Name of the environment variable or secret that holds the Azure Storage connection string. + :type connection_string_key: str, optional + + :param container_name: The name of the Azure Blob Storage container to store logs in. + :type container_name: str + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param type: The destination type. The value should always be ``azure_storage``. + :type type: AzureStorageDestinationType + """ + if blob_prefix is not unset: + kwargs["blob_prefix"] = blob_prefix + if buffer is not unset: + kwargs["buffer"] = buffer + if connection_string_key is not unset: + kwargs["connection_string_key"] = connection_string_key + super().__init__(kwargs) + + + self_.container_name = container_name + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/azure_storage_destination_type.py b/datadog_api_client/v2/model/azure_storage_destination_type.py new file mode 100644 index 0000000000..bcb2686272 --- /dev/null +++ b/datadog_api_client/v2/model/azure_storage_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AzureStorageDestinationType(ModelSimple): + """ + The destination type. The value should always be `azure_storage`. + + :param value: If omitted defaults to "azure_storage". Must be one of ["azure_storage"]. + :type value: str + """ + + allowed_values = { + "azure_storage", + } + AZURE_STORAGE: ClassVar["AzureStorageDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AzureStorageDestinationType.AZURE_STORAGE = AzureStorageDestinationType("azure_storage") diff --git a/datadog_api_client/v2/model/azure_tenant.py b/datadog_api_client/v2/model/azure_tenant.py new file mode 100644 index 0000000000..cceb46db34 --- /dev/null +++ b/datadog_api_client/v2/model/azure_tenant.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_tenant_type import AzureTenantType + +class AzureTenant(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_tenant_type import AzureTenantType + return { + "app_client_id": (str,), + "client_secret": (str,), + "custom_scopes": (str,), + "tenant_id": (str,), + "type": (AzureTenantType,), + } + attribute_map = { + "app_client_id": "app_client_id", + "client_secret": "client_secret", + "custom_scopes": "custom_scopes", + "tenant_id": "tenant_id", + "type": "type", + } + + def __init__(self_, app_client_id: str, client_secret: str, tenant_id: str, type: AzureTenantType, custom_scopes: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``AzureTenant`` object. + + :param app_client_id: The Client ID, also known as the Application ID in Azure, is a unique identifier for an application. It's used to identify the application during the authentication process. Your Application (client) ID is listed in the application's overview page. You can navigate to your application via the Azure Directory. + :type app_client_id: str + + :param client_secret: The Client Secret is a confidential piece of information known only to the application and Azure AD. It's used to prove the application's identity. Your Client Secret is available from the application’s secrets page. You can navigate to your application via the Azure Directory. + :type client_secret: str + + :param custom_scopes: If provided, the custom scope to be requested from Microsoft when acquiring an OAuth 2 access token. This custom scope is used only in conjunction with the HTTP action. A resource's scope is constructed by using the identifier URI for the resource and .default, separated by a forward slash (/) as follows:{identifierURI}/.default. + :type custom_scopes: str, optional + + :param tenant_id: The Tenant ID, also known as the Directory ID in Azure, is a unique identifier that represents an Azure AD instance. Your Tenant ID (Directory ID) is listed in your Active Directory overview page under the 'Tenant information' section. + :type tenant_id: str + + :param type: The definition of the ``AzureTenant`` object. + :type type: AzureTenantType + """ + if custom_scopes is not unset: + kwargs["custom_scopes"] = custom_scopes + super().__init__(kwargs) + + + self_.app_client_id = app_client_id + self_.client_secret = client_secret + self_.tenant_id = tenant_id + self_.type = type diff --git a/datadog_api_client/v2/model/azure_tenant_type.py b/datadog_api_client/v2/model/azure_tenant_type.py new file mode 100644 index 0000000000..682497e8c3 --- /dev/null +++ b/datadog_api_client/v2/model/azure_tenant_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AzureTenantType(ModelSimple): + """ + The definition of the `AzureTenant` object. + + :param value: If omitted defaults to "AzureTenant". Must be one of ["AzureTenant"]. + :type value: str + """ + + allowed_values = { + "AzureTenant", + } + AZURETENANT: ClassVar["AzureTenantType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AzureTenantType.AZURETENANT = AzureTenantType("AzureTenant") diff --git a/datadog_api_client/v2/model/azure_tenant_update.py b/datadog_api_client/v2/model/azure_tenant_update.py new file mode 100644 index 0000000000..a18578796d --- /dev/null +++ b/datadog_api_client/v2/model/azure_tenant_update.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_tenant_type import AzureTenantType + +class AzureTenantUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_tenant_type import AzureTenantType + return { + "app_client_id": (str,), + "client_secret": (str,), + "custom_scopes": (str,), + "tenant_id": (str,), + "type": (AzureTenantType,), + } + attribute_map = { + "app_client_id": "app_client_id", + "client_secret": "client_secret", + "custom_scopes": "custom_scopes", + "tenant_id": "tenant_id", + "type": "type", + } + + def __init__(self_, type: AzureTenantType, app_client_id: Union[str, UnsetType]=unset, client_secret: Union[str, UnsetType]=unset, custom_scopes: Union[str, UnsetType]=unset, tenant_id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``AzureTenant`` object. + + :param app_client_id: The Client ID, also known as the Application ID in Azure, is a unique identifier for an application. It's used to identify the application during the authentication process. Your Application (client) ID is listed in the application's overview page. You can navigate to your application via the Azure Directory. + :type app_client_id: str, optional + + :param client_secret: The Client Secret is a confidential piece of information known only to the application and Azure AD. It's used to prove the application's identity. Your Client Secret is available from the application’s secrets page. You can navigate to your application via the Azure Directory. + :type client_secret: str, optional + + :param custom_scopes: If provided, the custom scope to be requested from Microsoft when acquiring an OAuth 2 access token. This custom scope is used only in conjunction with the HTTP action. A resource's scope is constructed by using the identifier URI for the resource and .default, separated by a forward slash (/) as follows:{identifierURI}/.default. + :type custom_scopes: str, optional + + :param tenant_id: The Tenant ID, also known as the Directory ID in Azure, is a unique identifier that represents an Azure AD instance. Your Tenant ID (Directory ID) is listed in your Active Directory overview page under the 'Tenant information' section. + :type tenant_id: str, optional + + :param type: The definition of the ``AzureTenant`` object. + :type type: AzureTenantType + """ + if app_client_id is not unset: + kwargs["app_client_id"] = app_client_id + if client_secret is not unset: + kwargs["client_secret"] = client_secret + if custom_scopes is not unset: + kwargs["custom_scopes"] = custom_scopes + if tenant_id is not unset: + kwargs["tenant_id"] = tenant_id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/azure_uc_config.py b/datadog_api_client/v2/model/azure_uc_config.py new file mode 100644 index 0000000000..7f6396b867 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config.py @@ -0,0 +1,146 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AzureUCConfig(ModelNormal): + validations = { + "created_at": { + }, + "months": { + "inclusive_maximum": 36, + }, + "status_updated_at": { + }, + "updated_at": { + }, + } + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "client_id": (str,), + "created_at": (str,), + "dataset_type": (str,), + "error_messages": ([str], none_type), + "export_name": (str,), + "export_path": (str,), + "id": (str,), + "months": (int,), + "scope": (str,), + "status": (str,), + "status_updated_at": (str,), + "storage_account": (str,), + "storage_container": (str,), + "updated_at": (str,), + } + attribute_map = { + "account_id": "account_id", + "client_id": "client_id", + "created_at": "created_at", + "dataset_type": "dataset_type", + "error_messages": "error_messages", + "export_name": "export_name", + "export_path": "export_path", + "id": "id", + "months": "months", + "scope": "scope", + "status": "status", + "status_updated_at": "status_updated_at", + "storage_account": "storage_account", + "storage_container": "storage_container", + "updated_at": "updated_at", + } + + def __init__(self_, account_id: str, client_id: str, dataset_type: str, export_name: str, export_path: str, scope: str, status: str, storage_account: str, storage_container: str, created_at: Union[str, UnsetType]=unset, error_messages: Union[List[str], none_type, UnsetType]=unset, id: Union[str, UnsetType]=unset, months: Union[int, UnsetType]=unset, status_updated_at: Union[str, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, **kwargs): + """ + Azure config. + + :param account_id: The tenant ID of the Azure account. + :type account_id: str + + :param client_id: The client ID of the Azure account. + :type client_id: str + + :param created_at: The timestamp when the Azure config was created. + :type created_at: str, optional + + :param dataset_type: The dataset type of the Azure config. + :type dataset_type: str + + :param error_messages: The error messages for the Azure config. + :type error_messages: [str], none_type, optional + + :param export_name: The name of the configured Azure Export. + :type export_name: str + + :param export_path: The path where the Azure Export is saved. + :type export_path: str + + :param id: The ID of the Azure config. + :type id: str, optional + + :param months: The number of months the report has been backfilled. **Deprecated**. + :type months: int, optional + + :param scope: The scope of your observed subscription. + :type scope: str + + :param status: The status of the Azure config. + :type status: str + + :param status_updated_at: The timestamp when the Azure config status was last updated. + :type status_updated_at: str, optional + + :param storage_account: The name of the storage account where the Azure Export is saved. + :type storage_account: str + + :param storage_container: The name of the storage container where the Azure Export is saved. + :type storage_container: str + + :param updated_at: The timestamp when the Azure config was last updated. + :type updated_at: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if error_messages is not unset: + kwargs["error_messages"] = error_messages + if id is not unset: + kwargs["id"] = id + if months is not unset: + kwargs["months"] = months + if status_updated_at is not unset: + kwargs["status_updated_at"] = status_updated_at + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.account_id = account_id + self_.client_id = client_id + self_.dataset_type = dataset_type + self_.export_name = export_name + self_.export_path = export_path + self_.scope = scope + self_.status = status + self_.storage_account = storage_account + self_.storage_container = storage_container diff --git a/datadog_api_client/v2/model/azure_uc_config_pair.py b/datadog_api_client/v2/model/azure_uc_config_pair.py new file mode 100644 index 0000000000..2fee09ff81 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_pair.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_uc_config_pair_attributes import AzureUCConfigPairAttributes + from datadog_api_client.v2.model.azure_uc_config_pair_type import AzureUCConfigPairType + +class AzureUCConfigPair(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_uc_config_pair_attributes import AzureUCConfigPairAttributes + from datadog_api_client.v2.model.azure_uc_config_pair_type import AzureUCConfigPairType + return { + "attributes": (AzureUCConfigPairAttributes,), + "id": (str,), + "type": (AzureUCConfigPairType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: AzureUCConfigPairAttributes, type: AzureUCConfigPairType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Azure config pair. + + :param attributes: Attributes for Azure config pair. + :type attributes: AzureUCConfigPairAttributes + + :param id: The ID of Cloud Cost Management account. + :type id: str, optional + + :param type: Type of Azure config pair. + :type type: AzureUCConfigPairType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/azure_uc_config_pair_attributes.py b/datadog_api_client/v2/model/azure_uc_config_pair_attributes.py new file mode 100644 index 0000000000..0148c03278 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_pair_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_uc_config import AzureUCConfig + +class AzureUCConfigPairAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_uc_config import AzureUCConfig + return { + "configs": ([AzureUCConfig],), + "id": (str,), + } + attribute_map = { + "configs": "configs", + "id": "id", + } + + def __init__(self_, configs: List[AzureUCConfig], id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for Azure config pair. + + :param configs: An Azure config. + :type configs: [AzureUCConfig] + + :param id: The ID of the Azure config pair. + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.configs = configs diff --git a/datadog_api_client/v2/model/azure_uc_config_pair_type.py b/datadog_api_client/v2/model/azure_uc_config_pair_type.py new file mode 100644 index 0000000000..f3704721c6 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_pair_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AzureUCConfigPairType(ModelSimple): + """ + Type of Azure config pair. + + :param value: If omitted defaults to "azure_uc_configs". Must be one of ["azure_uc_configs"]. + :type value: str + """ + + allowed_values = { + "azure_uc_configs", + } + AZURE_UC_CONFIGS: ClassVar["AzureUCConfigPairType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AzureUCConfigPairType.AZURE_UC_CONFIGS = AzureUCConfigPairType("azure_uc_configs") diff --git a/datadog_api_client/v2/model/azure_uc_config_pairs_response.py b/datadog_api_client/v2/model/azure_uc_config_pairs_response.py new file mode 100644 index 0000000000..11db6534b9 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_pairs_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_uc_config_pair import AzureUCConfigPair + +class AzureUCConfigPairsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_uc_config_pair import AzureUCConfigPair + return { + "data": (AzureUCConfigPair,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AzureUCConfigPair, UnsetType]=unset, **kwargs): + """ + Response of Azure config pair. + + :param data: Azure config pair. + :type data: AzureUCConfigPair, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/azure_uc_config_patch_data.py b/datadog_api_client/v2/model/azure_uc_config_patch_data.py new file mode 100644 index 0000000000..2f2aa9bc1a --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_patch_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_uc_config_patch_request_attributes import AzureUCConfigPatchRequestAttributes + from datadog_api_client.v2.model.azure_uc_config_patch_request_type import AzureUCConfigPatchRequestType + +class AzureUCConfigPatchData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_uc_config_patch_request_attributes import AzureUCConfigPatchRequestAttributes + from datadog_api_client.v2.model.azure_uc_config_patch_request_type import AzureUCConfigPatchRequestType + return { + "attributes": (AzureUCConfigPatchRequestAttributes,), + "type": (AzureUCConfigPatchRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: AzureUCConfigPatchRequestType, attributes: Union[AzureUCConfigPatchRequestAttributes, UnsetType]=unset, **kwargs): + """ + Azure config Patch data. + + :param attributes: Attributes for Azure config Patch Request. + :type attributes: AzureUCConfigPatchRequestAttributes, optional + + :param type: Type of Azure config Patch Request. + :type type: AzureUCConfigPatchRequestType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/azure_uc_config_patch_request.py b/datadog_api_client/v2/model/azure_uc_config_patch_request.py new file mode 100644 index 0000000000..231c693d89 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_uc_config_patch_data import AzureUCConfigPatchData + +class AzureUCConfigPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_uc_config_patch_data import AzureUCConfigPatchData + return { + "data": (AzureUCConfigPatchData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AzureUCConfigPatchData, **kwargs): + """ + Azure config Patch Request. + + :param data: Azure config Patch data. + :type data: AzureUCConfigPatchData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/azure_uc_config_patch_request_attributes.py b/datadog_api_client/v2/model/azure_uc_config_patch_request_attributes.py new file mode 100644 index 0000000000..4b17d17392 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_patch_request_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class AzureUCConfigPatchRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "is_enabled": (bool,), + } + attribute_map = { + "is_enabled": "is_enabled", + } + + def __init__(self_, is_enabled: bool, **kwargs): + """ + Attributes for Azure config Patch Request. + + :param is_enabled: Whether or not the Cloud Cost Management account is enabled. + :type is_enabled: bool + """ + super().__init__(kwargs) + + + self_.is_enabled = is_enabled diff --git a/datadog_api_client/v2/model/azure_uc_config_patch_request_type.py b/datadog_api_client/v2/model/azure_uc_config_patch_request_type.py new file mode 100644 index 0000000000..66a8f48632 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_patch_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AzureUCConfigPatchRequestType(ModelSimple): + """ + Type of Azure config Patch Request. + + :param value: If omitted defaults to "azure_uc_config_patch_request". Must be one of ["azure_uc_config_patch_request"]. + :type value: str + """ + + allowed_values = { + "azure_uc_config_patch_request", + } + AZURE_UC_CONFIG_PATCH_REQUEST: ClassVar["AzureUCConfigPatchRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AzureUCConfigPatchRequestType.AZURE_UC_CONFIG_PATCH_REQUEST = AzureUCConfigPatchRequestType("azure_uc_config_patch_request") diff --git a/datadog_api_client/v2/model/azure_uc_config_post_data.py b/datadog_api_client/v2/model/azure_uc_config_post_data.py new file mode 100644 index 0000000000..534fa89eee --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_post_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_uc_config_post_request_attributes import AzureUCConfigPostRequestAttributes + from datadog_api_client.v2.model.azure_uc_config_post_request_type import AzureUCConfigPostRequestType + +class AzureUCConfigPostData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_uc_config_post_request_attributes import AzureUCConfigPostRequestAttributes + from datadog_api_client.v2.model.azure_uc_config_post_request_type import AzureUCConfigPostRequestType + return { + "attributes": (AzureUCConfigPostRequestAttributes,), + "type": (AzureUCConfigPostRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: AzureUCConfigPostRequestType, attributes: Union[AzureUCConfigPostRequestAttributes, UnsetType]=unset, **kwargs): + """ + Azure config Post data. + + :param attributes: Attributes for Azure config Post Request. + :type attributes: AzureUCConfigPostRequestAttributes, optional + + :param type: Type of Azure config Post Request. + :type type: AzureUCConfigPostRequestType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/azure_uc_config_post_request.py b/datadog_api_client/v2/model/azure_uc_config_post_request.py new file mode 100644 index 0000000000..d1c648ead5 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_post_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_uc_config_post_data import AzureUCConfigPostData + +class AzureUCConfigPostRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_uc_config_post_data import AzureUCConfigPostData + return { + "data": (AzureUCConfigPostData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AzureUCConfigPostData, **kwargs): + """ + Azure config Post Request. + + :param data: Azure config Post data. + :type data: AzureUCConfigPostData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/azure_uc_config_post_request_attributes.py b/datadog_api_client/v2/model/azure_uc_config_post_request_attributes.py new file mode 100644 index 0000000000..218b1223b8 --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_post_request_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.bill_config import BillConfig + +class AzureUCConfigPostRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.bill_config import BillConfig + return { + "account_id": (str,), + "actual_bill_config": (BillConfig,), + "amortized_bill_config": (BillConfig,), + "client_id": (str,), + "scope": (str,), + } + attribute_map = { + "account_id": "account_id", + "actual_bill_config": "actual_bill_config", + "amortized_bill_config": "amortized_bill_config", + "client_id": "client_id", + "scope": "scope", + } + + def __init__(self_, account_id: str, actual_bill_config: BillConfig, amortized_bill_config: BillConfig, client_id: str, scope: str, **kwargs): + """ + Attributes for Azure config Post Request. + + :param account_id: The tenant ID of the Azure account. + :type account_id: str + + :param actual_bill_config: Bill config. + :type actual_bill_config: BillConfig + + :param amortized_bill_config: Bill config. + :type amortized_bill_config: BillConfig + + :param client_id: The client ID of the Azure account. + :type client_id: str + + :param scope: The scope of your observed subscription. + :type scope: str + """ + super().__init__(kwargs) + + + self_.account_id = account_id + self_.actual_bill_config = actual_bill_config + self_.amortized_bill_config = amortized_bill_config + self_.client_id = client_id + self_.scope = scope diff --git a/datadog_api_client/v2/model/azure_uc_config_post_request_type.py b/datadog_api_client/v2/model/azure_uc_config_post_request_type.py new file mode 100644 index 0000000000..2e3fa540fa --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_config_post_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class AzureUCConfigPostRequestType(ModelSimple): + """ + Type of Azure config Post Request. + + :param value: If omitted defaults to "azure_uc_config_post_request". Must be one of ["azure_uc_config_post_request"]. + :type value: str + """ + + allowed_values = { + "azure_uc_config_post_request", + } + AZURE_UC_CONFIG_POST_REQUEST: ClassVar["AzureUCConfigPostRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +AzureUCConfigPostRequestType.AZURE_UC_CONFIG_POST_REQUEST = AzureUCConfigPostRequestType("azure_uc_config_post_request") diff --git a/datadog_api_client/v2/model/azure_uc_configs_response.py b/datadog_api_client/v2/model/azure_uc_configs_response.py new file mode 100644 index 0000000000..ed839be96f --- /dev/null +++ b/datadog_api_client/v2/model/azure_uc_configs_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.azure_uc_config_pair import AzureUCConfigPair + +class AzureUCConfigsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.azure_uc_config_pair import AzureUCConfigPair + return { + "data": ([AzureUCConfigPair],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AzureUCConfigPair], **kwargs): + """ + List of Azure accounts with configs. + + :param data: An Azure config pair. + :type data: [AzureUCConfigPair] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/batch_delete_rows_request_array.py b/datadog_api_client/v2/model/batch_delete_rows_request_array.py new file mode 100644 index 0000000000..8f4e6c2f65 --- /dev/null +++ b/datadog_api_client/v2/model/batch_delete_rows_request_array.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_row_resource_identifier import TableRowResourceIdentifier + +class BatchDeleteRowsRequestArray(ModelNormal): + validations = { + "data": { + "max_items": 200, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_row_resource_identifier import TableRowResourceIdentifier + return { + "data": ([TableRowResourceIdentifier],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[TableRowResourceIdentifier], **kwargs): + """ + The request body for deleting multiple rows from a reference table. + + :param data: List of row resources to delete from the reference table. + :type data: [TableRowResourceIdentifier] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/batch_rows_query_data_type.py b/datadog_api_client/v2/model/batch_rows_query_data_type.py new file mode 100644 index 0000000000..618e5532d2 --- /dev/null +++ b/datadog_api_client/v2/model/batch_rows_query_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BatchRowsQueryDataType(ModelSimple): + """ + Resource type identifier for batch queries of reference table rows. + + :param value: If omitted defaults to "reference-tables-batch-rows-query". Must be one of ["reference-tables-batch-rows-query"]. + :type value: str + """ + + allowed_values = { + "reference-tables-batch-rows-query", + } + REFERENCE_TABLES_BATCH_ROWS_QUERY: ClassVar["BatchRowsQueryDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BatchRowsQueryDataType.REFERENCE_TABLES_BATCH_ROWS_QUERY = BatchRowsQueryDataType("reference-tables-batch-rows-query") diff --git a/datadog_api_client/v2/model/batch_rows_query_request.py b/datadog_api_client/v2/model/batch_rows_query_request.py new file mode 100644 index 0000000000..7a1bcbbf74 --- /dev/null +++ b/datadog_api_client/v2/model/batch_rows_query_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.batch_rows_query_request_data import BatchRowsQueryRequestData + +class BatchRowsQueryRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.batch_rows_query_request_data import BatchRowsQueryRequestData + return { + "data": (BatchRowsQueryRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[BatchRowsQueryRequestData, UnsetType]=unset, **kwargs): + """ + Request object for querying multiple rows from a reference table by their identifiers. + + :param data: Data object for a batch rows query request. + :type data: BatchRowsQueryRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/batch_rows_query_request_data.py b/datadog_api_client/v2/model/batch_rows_query_request_data.py new file mode 100644 index 0000000000..87c7bdf159 --- /dev/null +++ b/datadog_api_client/v2/model/batch_rows_query_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.batch_rows_query_request_data_attributes import BatchRowsQueryRequestDataAttributes + from datadog_api_client.v2.model.batch_rows_query_data_type import BatchRowsQueryDataType + +class BatchRowsQueryRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.batch_rows_query_request_data_attributes import BatchRowsQueryRequestDataAttributes + from datadog_api_client.v2.model.batch_rows_query_data_type import BatchRowsQueryDataType + return { + "attributes": (BatchRowsQueryRequestDataAttributes,), + "type": (BatchRowsQueryDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: BatchRowsQueryDataType, attributes: Union[BatchRowsQueryRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + Data object for a batch rows query request. + + :param attributes: Attributes for a batch rows query request. + :type attributes: BatchRowsQueryRequestDataAttributes, optional + + :param type: Resource type identifier for batch queries of reference table rows. + :type type: BatchRowsQueryDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/batch_rows_query_request_data_attributes.py b/datadog_api_client/v2/model/batch_rows_query_request_data_attributes.py new file mode 100644 index 0000000000..81f9f47e6d --- /dev/null +++ b/datadog_api_client/v2/model/batch_rows_query_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BatchRowsQueryRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "row_ids": ([str],), + "table_id": (str,), + } + attribute_map = { + "row_ids": "row_ids", + "table_id": "table_id", + } + + def __init__(self_, row_ids: List[str], table_id: str, **kwargs): + """ + Attributes for a batch rows query request. + + :param row_ids: List of row identifiers to query from the reference table. + :type row_ids: [str] + + :param table_id: Unique identifier of the reference table to query. + :type table_id: str + """ + super().__init__(kwargs) + + + self_.row_ids = row_ids + self_.table_id = table_id diff --git a/datadog_api_client/v2/model/batch_rows_query_response.py b/datadog_api_client/v2/model/batch_rows_query_response.py new file mode 100644 index 0000000000..81b2f7d339 --- /dev/null +++ b/datadog_api_client/v2/model/batch_rows_query_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.batch_rows_query_response_data import BatchRowsQueryResponseData + from datadog_api_client.v2.model.table_row_resource_data import TableRowResourceData + +class BatchRowsQueryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.batch_rows_query_response_data import BatchRowsQueryResponseData + from datadog_api_client.v2.model.table_row_resource_data import TableRowResourceData + return { + "data": (BatchRowsQueryResponseData,), + "included": ([TableRowResourceData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[BatchRowsQueryResponseData, UnsetType]=unset, included: Union[List[TableRowResourceData], UnsetType]=unset, **kwargs): + """ + Response object for a batch rows query against a reference table. + + :param data: Data object for a batch rows query response. + :type data: BatchRowsQueryResponseData, optional + + :param included: Full row resources matching the query, included alongside the relationship references in ``data``. + :type included: [TableRowResourceData], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/batch_rows_query_response_data.py b/datadog_api_client/v2/model/batch_rows_query_response_data.py new file mode 100644 index 0000000000..8327b8ee76 --- /dev/null +++ b/datadog_api_client/v2/model/batch_rows_query_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.batch_rows_query_response_data_relationships import BatchRowsQueryResponseDataRelationships + from datadog_api_client.v2.model.batch_rows_query_data_type import BatchRowsQueryDataType + +class BatchRowsQueryResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.batch_rows_query_response_data_relationships import BatchRowsQueryResponseDataRelationships + from datadog_api_client.v2.model.batch_rows_query_data_type import BatchRowsQueryDataType + return { + "id": (str,), + "relationships": (BatchRowsQueryResponseDataRelationships,), + "type": (BatchRowsQueryDataType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: BatchRowsQueryDataType, id: Union[str, UnsetType]=unset, relationships: Union[BatchRowsQueryResponseDataRelationships, UnsetType]=unset, **kwargs): + """ + Data object for a batch rows query response. + + :param id: Unique identifier of the batch query. + :type id: str, optional + + :param relationships: Relationships of the batch rows query response data. + :type relationships: BatchRowsQueryResponseDataRelationships, optional + + :param type: Resource type identifier for batch queries of reference table rows. + :type type: BatchRowsQueryDataType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/batch_rows_query_response_data_relationships.py b/datadog_api_client/v2/model/batch_rows_query_response_data_relationships.py new file mode 100644 index 0000000000..15c700d8ce --- /dev/null +++ b/datadog_api_client/v2/model/batch_rows_query_response_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.batch_rows_query_response_data_relationships_rows import BatchRowsQueryResponseDataRelationshipsRows + +class BatchRowsQueryResponseDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.batch_rows_query_response_data_relationships_rows import BatchRowsQueryResponseDataRelationshipsRows + return { + "rows": (BatchRowsQueryResponseDataRelationshipsRows,), + } + attribute_map = { + "rows": "rows", + } + + def __init__(self_, rows: Union[BatchRowsQueryResponseDataRelationshipsRows, UnsetType]=unset, **kwargs): + """ + Relationships of the batch rows query response data. + + :param rows: Relationship data containing the list of matching rows. + :type rows: BatchRowsQueryResponseDataRelationshipsRows, optional + """ + if rows is not unset: + kwargs["rows"] = rows + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/batch_rows_query_response_data_relationships_rows.py b/datadog_api_client/v2/model/batch_rows_query_response_data_relationships_rows.py new file mode 100644 index 0000000000..d7e4c0e7c3 --- /dev/null +++ b/datadog_api_client/v2/model/batch_rows_query_response_data_relationships_rows.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_row_resource_identifier import TableRowResourceIdentifier + +class BatchRowsQueryResponseDataRelationshipsRows(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_row_resource_identifier import TableRowResourceIdentifier + return { + "data": ([TableRowResourceIdentifier],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[TableRowResourceIdentifier], UnsetType]=unset, **kwargs): + """ + Relationship data containing the list of matching rows. + + :param data: + :type data: [TableRowResourceIdentifier], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/batch_upsert_rows_request_array.py b/datadog_api_client/v2/model/batch_upsert_rows_request_array.py new file mode 100644 index 0000000000..8105063828 --- /dev/null +++ b/datadog_api_client/v2/model/batch_upsert_rows_request_array.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.batch_upsert_rows_request_data import BatchUpsertRowsRequestData + +class BatchUpsertRowsRequestArray(ModelNormal): + validations = { + "data": { + "max_items": 200, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.batch_upsert_rows_request_data import BatchUpsertRowsRequestData + return { + "data": ([BatchUpsertRowsRequestData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[BatchUpsertRowsRequestData], **kwargs): + """ + The request body for creating or updating multiple rows into a reference table. + + :param data: List of row resources to create or update in the reference table. + :type data: [BatchUpsertRowsRequestData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/batch_upsert_rows_request_data.py b/datadog_api_client/v2/model/batch_upsert_rows_request_data.py new file mode 100644 index 0000000000..58fe43de85 --- /dev/null +++ b/datadog_api_client/v2/model/batch_upsert_rows_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.batch_upsert_rows_request_data_attributes import BatchUpsertRowsRequestDataAttributes + from datadog_api_client.v2.model.table_row_resource_data_type import TableRowResourceDataType + +class BatchUpsertRowsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.batch_upsert_rows_request_data_attributes import BatchUpsertRowsRequestDataAttributes + from datadog_api_client.v2.model.table_row_resource_data_type import TableRowResourceDataType + return { + "attributes": (BatchUpsertRowsRequestDataAttributes,), + "id": (str,), + "type": (TableRowResourceDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TableRowResourceDataType, attributes: Union[BatchUpsertRowsRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + Row resource containing a single row identifier and its column values. + + :param attributes: Attributes containing row data values for row creation or update operations. + :type attributes: BatchUpsertRowsRequestDataAttributes, optional + + :param id: The primary key value that uniquely identifies the row to create or update. + :type id: str + + :param type: Row resource type. + :type type: TableRowResourceDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/batch_upsert_rows_request_data_attributes.py b/datadog_api_client/v2/model/batch_upsert_rows_request_data_attributes.py new file mode 100644 index 0000000000..bb1b8f6c41 --- /dev/null +++ b/datadog_api_client/v2/model/batch_upsert_rows_request_data_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.batch_upsert_rows_request_data_attributes_value import BatchUpsertRowsRequestDataAttributesValue + +class BatchUpsertRowsRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.batch_upsert_rows_request_data_attributes_value import BatchUpsertRowsRequestDataAttributesValue + return { + "values": ({str: (BatchUpsertRowsRequestDataAttributesValue,)},), + } + attribute_map = { + "values": "values", + } + + def __init__(self_, values: Dict[str, Union[BatchUpsertRowsRequestDataAttributesValue, str, int]], **kwargs): + """ + Attributes containing row data values for row creation or update operations. + + :param values: Key-value pairs representing row data, where keys are schema field names and values match the corresponding column types. + :type values: {str: (BatchUpsertRowsRequestDataAttributesValue,)} + """ + super().__init__(kwargs) + + + self_.values = values diff --git a/datadog_api_client/v2/model/batch_upsert_rows_request_data_attributes_value.py b/datadog_api_client/v2/model/batch_upsert_rows_request_data_attributes_value.py new file mode 100644 index 0000000000..207dbbda2c --- /dev/null +++ b/datadog_api_client/v2/model/batch_upsert_rows_request_data_attributes_value.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BatchUpsertRowsRequestDataAttributesValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Types allowed for Reference Table row values. + """ + 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 + return { + "oneOf": [ + str, + int, + ], + } diff --git a/datadog_api_client/v2/model/bill_config.py b/datadog_api_client/v2/model/bill_config.py new file mode 100644 index 0000000000..c06319d999 --- /dev/null +++ b/datadog_api_client/v2/model/bill_config.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BillConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "export_name": (str,), + "export_path": (str,), + "storage_account": (str,), + "storage_container": (str,), + } + attribute_map = { + "export_name": "export_name", + "export_path": "export_path", + "storage_account": "storage_account", + "storage_container": "storage_container", + } + + def __init__(self_, export_name: str, export_path: str, storage_account: str, storage_container: str, **kwargs): + """ + Bill config. + + :param export_name: The name of the configured Azure Export. + :type export_name: str + + :param export_path: The path where the Azure Export is saved. + :type export_path: str + + :param storage_account: The name of the storage account where the Azure Export is saved. + :type storage_account: str + + :param storage_container: The name of the storage container where the Azure Export is saved. + :type storage_container: str + """ + super().__init__(kwargs) + + + self_.export_name = export_name + self_.export_path = export_path + self_.storage_account = storage_account + self_.storage_container = storage_container diff --git a/datadog_api_client/v2/model/billing_dimensions_mapping_body_item.py b/datadog_api_client/v2/model/billing_dimensions_mapping_body_item.py new file mode 100644 index 0000000000..ca5cadad30 --- /dev/null +++ b/datadog_api_client/v2/model/billing_dimensions_mapping_body_item.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.billing_dimensions_mapping_body_item_attributes import BillingDimensionsMappingBodyItemAttributes + from datadog_api_client.v2.model.active_billing_dimensions_type import ActiveBillingDimensionsType + +class BillingDimensionsMappingBodyItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.billing_dimensions_mapping_body_item_attributes import BillingDimensionsMappingBodyItemAttributes + from datadog_api_client.v2.model.active_billing_dimensions_type import ActiveBillingDimensionsType + return { + "attributes": (BillingDimensionsMappingBodyItemAttributes,), + "id": (str,), + "type": (ActiveBillingDimensionsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[BillingDimensionsMappingBodyItemAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ActiveBillingDimensionsType, UnsetType]=unset, **kwargs): + """ + The mapping data for each billing dimension. + + :param attributes: Mapping of billing dimensions to endpoint keys. + :type attributes: BillingDimensionsMappingBodyItemAttributes, optional + + :param id: ID of the billing dimension. + :type id: str, optional + + :param type: Type of active billing dimensions data. + :type type: ActiveBillingDimensionsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/billing_dimensions_mapping_body_item_attributes.py b/datadog_api_client/v2/model/billing_dimensions_mapping_body_item_attributes.py new file mode 100644 index 0000000000..47f96e6ee9 --- /dev/null +++ b/datadog_api_client/v2/model/billing_dimensions_mapping_body_item_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.billing_dimensions_mapping_body_item_attributes_endpoints_items import BillingDimensionsMappingBodyItemAttributesEndpointsItems + +class BillingDimensionsMappingBodyItemAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.billing_dimensions_mapping_body_item_attributes_endpoints_items import BillingDimensionsMappingBodyItemAttributesEndpointsItems + return { + "endpoints": ([BillingDimensionsMappingBodyItemAttributesEndpointsItems],), + "in_app_label": (str,), + "timestamp": (datetime,), + } + attribute_map = { + "endpoints": "endpoints", + "in_app_label": "in_app_label", + "timestamp": "timestamp", + } + + def __init__(self_, endpoints: Union[List[BillingDimensionsMappingBodyItemAttributesEndpointsItems], UnsetType]=unset, in_app_label: Union[str, UnsetType]=unset, timestamp: Union[datetime, UnsetType]=unset, **kwargs): + """ + Mapping of billing dimensions to endpoint keys. + + :param endpoints: List of supported endpoints with their keys mapped to the billing_dimension. + :type endpoints: [BillingDimensionsMappingBodyItemAttributesEndpointsItems], optional + + :param in_app_label: Label used for the billing dimension in the Plan & Usage charts. + :type in_app_label: str, optional + + :param timestamp: Month in ISO-8601 format, UTC, and precise to the second: ``[YYYY-MM-DDThh:mm:ss]``. + :type timestamp: datetime, optional + """ + if endpoints is not unset: + kwargs["endpoints"] = endpoints + if in_app_label is not unset: + kwargs["in_app_label"] = in_app_label + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/billing_dimensions_mapping_body_item_attributes_endpoints_items.py b/datadog_api_client/v2/model/billing_dimensions_mapping_body_item_attributes_endpoints_items.py new file mode 100644 index 0000000000..09db63b73d --- /dev/null +++ b/datadog_api_client/v2/model/billing_dimensions_mapping_body_item_attributes_endpoints_items.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.billing_dimensions_mapping_body_item_attributes_endpoints_items_status import BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus + +class BillingDimensionsMappingBodyItemAttributesEndpointsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.billing_dimensions_mapping_body_item_attributes_endpoints_items_status import BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus + return { + "id": (str,), + "keys": ([str],), + "status": (BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus,), + } + attribute_map = { + "id": "id", + "keys": "keys", + "status": "status", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, keys: Union[List[str], UnsetType]=unset, status: Union[BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus, UnsetType]=unset, **kwargs): + """ + An endpoint's keys mapped to the billing_dimension. + + :param id: The URL for the endpoint. + :type id: str, optional + + :param keys: The billing dimension. + :type keys: [str], optional + + :param status: Denotes whether mapping keys were available for this endpoint. + :type status: BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus, optional + """ + if id is not unset: + kwargs["id"] = id + if keys is not unset: + kwargs["keys"] = keys + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/billing_dimensions_mapping_body_item_attributes_endpoints_items_status.py b/datadog_api_client/v2/model/billing_dimensions_mapping_body_item_attributes_endpoints_items_status.py new file mode 100644 index 0000000000..5a0115525e --- /dev/null +++ b/datadog_api_client/v2/model/billing_dimensions_mapping_body_item_attributes_endpoints_items_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus(ModelSimple): + """ + Denotes whether mapping keys were available for this endpoint. + + :param value: Must be one of ["OK", "NOT_FOUND"]. + :type value: str + """ + + allowed_values = { + "OK", + "NOT_FOUND", + } + OK: ClassVar["BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus"] + NOT_FOUND: ClassVar["BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus.OK = BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus("OK") +BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus.NOT_FOUND = BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus("NOT_FOUND") diff --git a/datadog_api_client/v2/model/billing_dimensions_mapping_response.py b/datadog_api_client/v2/model/billing_dimensions_mapping_response.py new file mode 100644 index 0000000000..927689a174 --- /dev/null +++ b/datadog_api_client/v2/model/billing_dimensions_mapping_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.billing_dimensions_mapping_body_item import BillingDimensionsMappingBodyItem + +class BillingDimensionsMappingResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.billing_dimensions_mapping_body_item import BillingDimensionsMappingBodyItem + return { + "data": ([BillingDimensionsMappingBodyItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[BillingDimensionsMappingBodyItem], UnsetType]=unset, **kwargs): + """ + Billing dimensions mapping response. + + :param data: Billing dimensions mapping data. + :type data: [BillingDimensionsMappingBodyItem], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/blueprint_attributes.py b/datadog_api_client/v2/model/blueprint_attributes.py new file mode 100644 index 0000000000..9751b5a02c --- /dev/null +++ b/datadog_api_client/v2/model/blueprint_attributes.py @@ -0,0 +1,136 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + from datadog_api_client.v2.model.blueprint_native_action import BlueprintNativeAction + +class BlueprintAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + from datadog_api_client.v2.model.blueprint_native_action import BlueprintNativeAction + return { + "created_at": (datetime,), + "definition": (AppDefinitionType,), + "description": (str,), + "embedded_datastore_blueprints": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "embedded_native_actions": ([BlueprintNativeAction],), + "embedded_workflow_blueprints": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "integration_id": (str,), + "mocked_outputs": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "name": (str,), + "slug": (str,), + "tags": ([str],), + "tile_background": (str,), + "tile_icon_action_fqn": (str,), + "updated_at": (datetime,), + } + attribute_map = { + "created_at": "created_at", + "definition": "definition", + "description": "description", + "embedded_datastore_blueprints": "embedded_datastore_blueprints", + "embedded_native_actions": "embedded_native_actions", + "embedded_workflow_blueprints": "embedded_workflow_blueprints", + "integration_id": "integration_id", + "mocked_outputs": "mocked_outputs", + "name": "name", + "slug": "slug", + "tags": "tags", + "tile_background": "tile_background", + "tile_icon_action_fqn": "tile_icon_action_fqn", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: datetime, definition: AppDefinitionType, description: str, name: str, slug: str, updated_at: datetime, embedded_datastore_blueprints: Union[Dict[str, Any], UnsetType]=unset, embedded_native_actions: Union[List[BlueprintNativeAction], UnsetType]=unset, embedded_workflow_blueprints: Union[Dict[str, Any], UnsetType]=unset, integration_id: Union[str, UnsetType]=unset, mocked_outputs: Union[Dict[str, Any], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, tile_background: Union[str, UnsetType]=unset, tile_icon_action_fqn: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a blueprint resource. + + :param created_at: The timestamp when the blueprint was created. + :type created_at: datetime + + :param definition: The app definition type. + :type definition: AppDefinitionType + + :param description: A description of what the blueprint does. + :type description: str + + :param embedded_datastore_blueprints: Embedded datastore blueprints. + :type embedded_datastore_blueprints: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param embedded_native_actions: Embedded native actions. + :type embedded_native_actions: [BlueprintNativeAction], optional + + :param embedded_workflow_blueprints: Embedded workflow blueprints. + :type embedded_workflow_blueprints: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integration_id: The integration ID associated with the blueprint. + :type integration_id: str, optional + + :param mocked_outputs: Mocked outputs for testing the blueprint. + :type mocked_outputs: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param name: The human-readable name of the blueprint. + :type name: str + + :param slug: The unique slug identifier of the blueprint. + :type slug: str + + :param tags: Tags associated with the blueprint. + :type tags: [str], optional + + :param tile_background: The background style of the blueprint tile. + :type tile_background: str, optional + + :param tile_icon_action_fqn: The fully qualified name of the action used as the tile icon. + :type tile_icon_action_fqn: str, optional + + :param updated_at: The timestamp when the blueprint was last updated. + :type updated_at: datetime + """ + if embedded_datastore_blueprints is not unset: + kwargs["embedded_datastore_blueprints"] = embedded_datastore_blueprints + if embedded_native_actions is not unset: + kwargs["embedded_native_actions"] = embedded_native_actions + if embedded_workflow_blueprints is not unset: + kwargs["embedded_workflow_blueprints"] = embedded_workflow_blueprints + if integration_id is not unset: + kwargs["integration_id"] = integration_id + if mocked_outputs is not unset: + kwargs["mocked_outputs"] = mocked_outputs + if tags is not unset: + kwargs["tags"] = tags + if tile_background is not unset: + kwargs["tile_background"] = tile_background + if tile_icon_action_fqn is not unset: + kwargs["tile_icon_action_fqn"] = tile_icon_action_fqn + super().__init__(kwargs) + + + self_.created_at = created_at + self_.definition = definition + self_.description = description + self_.name = name + self_.slug = slug + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/blueprint_data.py b/datadog_api_client/v2/model/blueprint_data.py new file mode 100644 index 0000000000..fe32d7fa2a --- /dev/null +++ b/datadog_api_client/v2/model/blueprint_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.blueprint_attributes import BlueprintAttributes + from datadog_api_client.v2.model.blueprint_data_type import BlueprintDataType + +class BlueprintData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.blueprint_attributes import BlueprintAttributes + from datadog_api_client.v2.model.blueprint_data_type import BlueprintDataType + return { + "attributes": (BlueprintAttributes,), + "id": (UUID,), + "type": (BlueprintDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: BlueprintAttributes, id: UUID, type: BlueprintDataType, **kwargs): + """ + A blueprint resource. + + :param attributes: The attributes of a blueprint resource. + :type attributes: BlueprintAttributes + + :param id: The ID of the blueprint. + :type id: UUID + + :param type: The resource type for a blueprint. + :type type: BlueprintDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/blueprint_data_type.py b/datadog_api_client/v2/model/blueprint_data_type.py new file mode 100644 index 0000000000..0d6191bc3d --- /dev/null +++ b/datadog_api_client/v2/model/blueprint_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BlueprintDataType(ModelSimple): + """ + The resource type for a blueprint. + + :param value: If omitted defaults to "blueprint". Must be one of ["blueprint"]. + :type value: str + """ + + allowed_values = { + "blueprint", + } + BLUEPRINT: ClassVar["BlueprintDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BlueprintDataType.BLUEPRINT = BlueprintDataType("blueprint") diff --git a/datadog_api_client/v2/model/blueprint_metadata_attributes.py b/datadog_api_client/v2/model/blueprint_metadata_attributes.py new file mode 100644 index 0000000000..f171b0b0e3 --- /dev/null +++ b/datadog_api_client/v2/model/blueprint_metadata_attributes.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BlueprintMetadataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "description": (str,), + "name": (str,), + "slug": (str,), + "tags": ([str],), + "tile_background": (str,), + "tile_icon_action_fqn": (str,), + "updated_at": (datetime,), + } + attribute_map = { + "created_at": "created_at", + "description": "description", + "name": "name", + "slug": "slug", + "tags": "tags", + "tile_background": "tile_background", + "tile_icon_action_fqn": "tile_icon_action_fqn", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: datetime, description: str, name: str, slug: str, updated_at: datetime, tags: Union[List[str], UnsetType]=unset, tile_background: Union[str, UnsetType]=unset, tile_icon_action_fqn: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a blueprint metadata resource. + + :param created_at: The timestamp when the blueprint was created. + :type created_at: datetime + + :param description: A description of what the blueprint does. + :type description: str + + :param name: The human-readable name of the blueprint. + :type name: str + + :param slug: The unique slug identifier of the blueprint. + :type slug: str + + :param tags: Tags associated with the blueprint. + :type tags: [str], optional + + :param tile_background: The background style of the blueprint tile. + :type tile_background: str, optional + + :param tile_icon_action_fqn: The fully qualified name of the action used as the tile icon. + :type tile_icon_action_fqn: str, optional + + :param updated_at: The timestamp when the blueprint was last updated. + :type updated_at: datetime + """ + if tags is not unset: + kwargs["tags"] = tags + if tile_background is not unset: + kwargs["tile_background"] = tile_background + if tile_icon_action_fqn is not unset: + kwargs["tile_icon_action_fqn"] = tile_icon_action_fqn + super().__init__(kwargs) + + + self_.created_at = created_at + self_.description = description + self_.name = name + self_.slug = slug + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/blueprint_metadata_data.py b/datadog_api_client/v2/model/blueprint_metadata_data.py new file mode 100644 index 0000000000..38561c0208 --- /dev/null +++ b/datadog_api_client/v2/model/blueprint_metadata_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.blueprint_metadata_attributes import BlueprintMetadataAttributes + from datadog_api_client.v2.model.blueprint_data_type import BlueprintDataType + +class BlueprintMetadataData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.blueprint_metadata_attributes import BlueprintMetadataAttributes + from datadog_api_client.v2.model.blueprint_data_type import BlueprintDataType + return { + "attributes": (BlueprintMetadataAttributes,), + "id": (UUID,), + "type": (BlueprintDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: BlueprintMetadataAttributes, id: UUID, type: BlueprintDataType, **kwargs): + """ + A blueprint metadata resource. + + :param attributes: The attributes of a blueprint metadata resource. + :type attributes: BlueprintMetadataAttributes + + :param id: The ID of the blueprint. + :type id: UUID + + :param type: The resource type for a blueprint. + :type type: BlueprintDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/blueprint_native_action.py b/datadog_api_client/v2/model/blueprint_native_action.py new file mode 100644 index 0000000000..2dedaa1220 --- /dev/null +++ b/datadog_api_client/v2/model/blueprint_native_action.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BlueprintNativeAction(ModelNormal): + + def __init__(self_, **kwargs): + """ + An embedded native action in a blueprint. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/branch_coverage_summary_request.py b/datadog_api_client/v2/model/branch_coverage_summary_request.py new file mode 100644 index 0000000000..04925f8892 --- /dev/null +++ b/datadog_api_client/v2/model/branch_coverage_summary_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.branch_coverage_summary_request_data import BranchCoverageSummaryRequestData + +class BranchCoverageSummaryRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.branch_coverage_summary_request_data import BranchCoverageSummaryRequestData + return { + "data": (BranchCoverageSummaryRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: BranchCoverageSummaryRequestData, **kwargs): + """ + Request object for getting code coverage summary for a branch. + + :param data: Data object for branch summary request. + :type data: BranchCoverageSummaryRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/branch_coverage_summary_request_attributes.py b/datadog_api_client/v2/model/branch_coverage_summary_request_attributes.py new file mode 100644 index 0000000000..18baea6196 --- /dev/null +++ b/datadog_api_client/v2/model/branch_coverage_summary_request_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BranchCoverageSummaryRequestAttributes(ModelNormal): + validations = { + "branch": { + "min_length": 1, + }, + "repository_id": { + "min_length": 1, + }, + "repository_url": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "branch": (str,), + "repository_id": (str,), + "repository_url": (str,), + } + attribute_map = { + "branch": "branch", + "repository_id": "repository_id", + "repository_url": "repository_url", + } + + def __init__(self_, branch: str, repository_id: Union[str, UnsetType]=unset, repository_url: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for requesting code coverage summary for a branch. + + :param branch: The branch name. + :type branch: str + + :param repository_id: Deprecated: use ``repository_url`` instead. The repository URL. **Deprecated**. + :type repository_id: str, optional + + :param repository_url: The repository URL. Accepts a full URL with or without a scheme (for example, ``https://github.com/org/repo`` or ``github.com/org/repo`` ). + :type repository_url: str, optional + """ + if repository_id is not unset: + kwargs["repository_id"] = repository_id + if repository_url is not unset: + kwargs["repository_url"] = repository_url + super().__init__(kwargs) + + + self_.branch = branch diff --git a/datadog_api_client/v2/model/branch_coverage_summary_request_data.py b/datadog_api_client/v2/model/branch_coverage_summary_request_data.py new file mode 100644 index 0000000000..f99ec2aa22 --- /dev/null +++ b/datadog_api_client/v2/model/branch_coverage_summary_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.branch_coverage_summary_request_attributes import BranchCoverageSummaryRequestAttributes + from datadog_api_client.v2.model.branch_coverage_summary_request_type import BranchCoverageSummaryRequestType + +class BranchCoverageSummaryRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.branch_coverage_summary_request_attributes import BranchCoverageSummaryRequestAttributes + from datadog_api_client.v2.model.branch_coverage_summary_request_type import BranchCoverageSummaryRequestType + return { + "attributes": (BranchCoverageSummaryRequestAttributes,), + "type": (BranchCoverageSummaryRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: BranchCoverageSummaryRequestAttributes, type: BranchCoverageSummaryRequestType, **kwargs): + """ + Data object for branch summary request. + + :param attributes: Attributes for requesting code coverage summary for a branch. + :type attributes: BranchCoverageSummaryRequestAttributes + + :param type: JSON:API type for branch coverage summary request. The value must always be ``ci_app_coverage_branch_summary_request``. + :type type: BranchCoverageSummaryRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/branch_coverage_summary_request_type.py b/datadog_api_client/v2/model/branch_coverage_summary_request_type.py new file mode 100644 index 0000000000..a27bc9a45e --- /dev/null +++ b/datadog_api_client/v2/model/branch_coverage_summary_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BranchCoverageSummaryRequestType(ModelSimple): + """ + JSON:API type for branch coverage summary request. The value must always be `ci_app_coverage_branch_summary_request`. + + :param value: If omitted defaults to "ci_app_coverage_branch_summary_request". Must be one of ["ci_app_coverage_branch_summary_request"]. + :type value: str + """ + + allowed_values = { + "ci_app_coverage_branch_summary_request", + } + CI_APP_COVERAGE_BRANCH_SUMMARY_REQUEST: ClassVar["BranchCoverageSummaryRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BranchCoverageSummaryRequestType.CI_APP_COVERAGE_BRANCH_SUMMARY_REQUEST = BranchCoverageSummaryRequestType("ci_app_coverage_branch_summary_request") diff --git a/datadog_api_client/v2/model/budget.py b/datadog_api_client/v2/model/budget.py new file mode 100644 index 0000000000..d2df0a5f83 --- /dev/null +++ b/datadog_api_client/v2/model/budget.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_attributes import BudgetAttributes + +class Budget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_attributes import BudgetAttributes + return { + "attributes": (BudgetAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: str, attributes: Union[BudgetAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + A budget. + + :param attributes: The attributes of a budget. + :type attributes: BudgetAttributes, optional + + :param id: The id of the budget. + :type id: str, optional + + :param type: The type of the object, must be ``budget``. + :type type: str + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/budget_array.py b/datadog_api_client/v2/model/budget_array.py new file mode 100644 index 0000000000..ab223fbef2 --- /dev/null +++ b/datadog_api_client/v2/model/budget_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget import Budget + +class BudgetArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget import Budget + return { + "data": ([Budget],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[Budget], **kwargs): + """ + An array of budgets. + + :param data: The ``BudgetArray`` ``data``. + :type data: [Budget] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/budget_attributes.py b/datadog_api_client/v2/model/budget_attributes.py new file mode 100644 index 0000000000..f8c181fb48 --- /dev/null +++ b/datadog_api_client/v2/model/budget_attributes.py @@ -0,0 +1,151 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_attributes_costs import BudgetAttributesCosts + from datadog_api_client.v2.model.budget_attributes_costs_unit import BudgetAttributesCostsUnit + from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items import BudgetWithEntriesDataAttributesEntriesItems + +class BudgetAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_attributes_costs import BudgetAttributesCosts + from datadog_api_client.v2.model.budget_attributes_costs_unit import BudgetAttributesCostsUnit + from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items import BudgetWithEntriesDataAttributesEntriesItems + return { + "costs": (BudgetAttributesCosts,), + "costs_period_end": (int,), + "costs_period_start": (int,), + "costs_unit": (BudgetAttributesCostsUnit,), + "created_at": (int,), + "created_by": (str,), + "end_month": (int,), + "entries": ([BudgetWithEntriesDataAttributesEntriesItems],), + "metrics_query": (str,), + "name": (str,), + "org_id": (int,), + "start_month": (int,), + "total_amount": (float,), + "updated_at": (int,), + "updated_by": (str,), + } + attribute_map = { + "costs": "costs", + "costs_period_end": "costs_period_end", + "costs_period_start": "costs_period_start", + "costs_unit": "costs_unit", + "created_at": "created_at", + "created_by": "created_by", + "end_month": "end_month", + "entries": "entries", + "metrics_query": "metrics_query", + "name": "name", + "org_id": "org_id", + "start_month": "start_month", + "total_amount": "total_amount", + "updated_at": "updated_at", + "updated_by": "updated_by", + } + + def __init__(self_, costs: Union[BudgetAttributesCosts, UnsetType]=unset, costs_period_end: Union[int, UnsetType]=unset, costs_period_start: Union[int, UnsetType]=unset, costs_unit: Union[BudgetAttributesCostsUnit, UnsetType]=unset, created_at: Union[int, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, end_month: Union[int, UnsetType]=unset, entries: Union[List[BudgetWithEntriesDataAttributesEntriesItems], UnsetType]=unset, metrics_query: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, start_month: Union[int, UnsetType]=unset, total_amount: Union[float, UnsetType]=unset, updated_at: Union[int, UnsetType]=unset, updated_by: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a budget. + + :param costs: Aggregated cost data for the budget over the requested period. + :type costs: BudgetAttributesCosts, optional + + :param costs_period_end: The end of the period used to compute cost data, in milliseconds since epoch. + :type costs_period_end: int, optional + + :param costs_period_start: The start of the period used to compute cost data, in milliseconds since epoch. + :type costs_period_start: int, optional + + :param costs_unit: The unit used for all cost values in the response. + :type costs_unit: BudgetAttributesCostsUnit, optional + + :param created_at: The timestamp when the budget was created. + :type created_at: int, optional + + :param created_by: The id of the user that created the budget. + :type created_by: str, optional + + :param end_month: The month when the budget ends. + :type end_month: int, optional + + :param entries: The list of monthly budget entries. + :type entries: [BudgetWithEntriesDataAttributesEntriesItems], optional + + :param metrics_query: The cost query used to track against the budget. + :type metrics_query: str, optional + + :param name: The name of the budget. + :type name: str, optional + + :param org_id: The id of the org the budget belongs to. + :type org_id: int, optional + + :param start_month: The month when the budget starts. + :type start_month: int, optional + + :param total_amount: The sum of all budget entries' amounts. + :type total_amount: float, optional + + :param updated_at: The timestamp when the budget was last updated. + :type updated_at: int, optional + + :param updated_by: The id of the user that created the budget. + :type updated_by: str, optional + """ + if costs is not unset: + kwargs["costs"] = costs + if costs_period_end is not unset: + kwargs["costs_period_end"] = costs_period_end + if costs_period_start is not unset: + kwargs["costs_period_start"] = costs_period_start + if costs_unit is not unset: + kwargs["costs_unit"] = costs_unit + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if end_month is not unset: + kwargs["end_month"] = end_month + if entries is not unset: + kwargs["entries"] = entries + if metrics_query is not unset: + kwargs["metrics_query"] = metrics_query + if name is not unset: + kwargs["name"] = name + if org_id is not unset: + kwargs["org_id"] = org_id + if start_month is not unset: + kwargs["start_month"] = start_month + if total_amount is not unset: + kwargs["total_amount"] = total_amount + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updated_by is not unset: + kwargs["updated_by"] = updated_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_attributes_costs.py b/datadog_api_client/v2/model/budget_attributes_costs.py new file mode 100644 index 0000000000..ba4f83b6c8 --- /dev/null +++ b/datadog_api_client/v2/model/budget_attributes_costs.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BudgetAttributesCosts(ModelNormal): + @cached_property + def openapi_types(_): + return { + "actual": (float, none_type), + "amount": (float, none_type), + "forecast": (float, none_type), + "ootb_forecast": (float, none_type), + } + attribute_map = { + "actual": "actual", + "amount": "amount", + "forecast": "forecast", + "ootb_forecast": "ootb_forecast", + } + + def __init__(self_, actual: Union[float, none_type, UnsetType]=unset, amount: Union[float, none_type, UnsetType]=unset, forecast: Union[float, none_type, UnsetType]=unset, ootb_forecast: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + Aggregated cost data for the budget over the requested period. + + :param actual: The total actual cost. Present only when ``actual=true`` is requested. + :type actual: float, none_type, optional + + :param amount: The total budgeted amount over the requested period. + :type amount: float, none_type, optional + + :param forecast: The total forecast cost, with any custom forecast overrides applied. Present only when ``forecast=true`` is requested. + :type forecast: float, none_type, optional + + :param ootb_forecast: The out-of-the-box ML forecast before custom overrides. Present only when ``forecast=true`` is requested. + :type ootb_forecast: float, none_type, optional + """ + if actual is not unset: + kwargs["actual"] = actual + if amount is not unset: + kwargs["amount"] = amount + if forecast is not unset: + kwargs["forecast"] = forecast + if ootb_forecast is not unset: + kwargs["ootb_forecast"] = ootb_forecast + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_attributes_costs_unit.py b/datadog_api_client/v2/model/budget_attributes_costs_unit.py new file mode 100644 index 0000000000..d471bf6d04 --- /dev/null +++ b/datadog_api_client/v2/model/budget_attributes_costs_unit.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BudgetAttributesCostsUnit(ModelNormal): + @cached_property + def openapi_types(_): + return { + "family": (str,), + "id": (str,), + "name": (str,), + "plural": (str,), + "scale_factor": (float,), + "short_name": (str,), + } + attribute_map = { + "family": "family", + "id": "id", + "name": "name", + "plural": "plural", + "scale_factor": "scale_factor", + "short_name": "short_name", + } + + def __init__(self_, family: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, plural: Union[str, UnsetType]=unset, scale_factor: Union[float, UnsetType]=unset, short_name: Union[str, UnsetType]=unset, **kwargs): + """ + The unit used for all cost values in the response. + + :param family: The unit family (for example, ``currency`` ). + :type family: str, optional + + :param id: The unique identifier for the unit. + :type id: str, optional + + :param name: The full name of the unit. + :type name: str, optional + + :param plural: The plural form of the unit name. + :type plural: str, optional + + :param scale_factor: The scale factor applied to raw cost values. + :type scale_factor: float, optional + + :param short_name: The abbreviated unit name. + :type short_name: str, optional + """ + if family is not unset: + kwargs["family"] = family + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if plural is not unset: + kwargs["plural"] = plural + if scale_factor is not unset: + kwargs["scale_factor"] = scale_factor + if short_name is not unset: + kwargs["short_name"] = short_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_validation_request.py b/datadog_api_client/v2/model/budget_validation_request.py new file mode 100644 index 0000000000..f8817a5df8 --- /dev/null +++ b/datadog_api_client/v2/model/budget_validation_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_validation_request_data import BudgetValidationRequestData + +class BudgetValidationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_validation_request_data import BudgetValidationRequestData + return { + "data": (BudgetValidationRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[BudgetValidationRequestData, UnsetType]=unset, **kwargs): + """ + The request object for validating a budget configuration before creating or updating it. + + :param data: The data object for a budget validation request, containing the resource type, ID, and budget attributes to validate. + :type data: BudgetValidationRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_validation_request_data.py b/datadog_api_client/v2/model/budget_validation_request_data.py new file mode 100644 index 0000000000..4b52c313ab --- /dev/null +++ b/datadog_api_client/v2/model/budget_validation_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_with_entries_data_attributes import BudgetWithEntriesDataAttributes + from datadog_api_client.v2.model.budget_with_entries_data_type import BudgetWithEntriesDataType + +class BudgetValidationRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_with_entries_data_attributes import BudgetWithEntriesDataAttributes + from datadog_api_client.v2.model.budget_with_entries_data_type import BudgetWithEntriesDataType + return { + "attributes": (BudgetWithEntriesDataAttributes,), + "id": (str,), + "type": (BudgetWithEntriesDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: BudgetWithEntriesDataType, attributes: Union[BudgetWithEntriesDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object for a budget validation request, containing the resource type, ID, and budget attributes to validate. + + :param attributes: The attributes of a budget including all its monthly entries. + :type attributes: BudgetWithEntriesDataAttributes, optional + + :param id: The unique identifier of the budget to validate. + :type id: str, optional + + :param type: Budget resource type. + :type type: BudgetWithEntriesDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/budget_validation_response.py b/datadog_api_client/v2/model/budget_validation_response.py new file mode 100644 index 0000000000..f6c77d5a11 --- /dev/null +++ b/datadog_api_client/v2/model/budget_validation_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_validation_response_data import BudgetValidationResponseData + +class BudgetValidationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_validation_response_data import BudgetValidationResponseData + return { + "data": (BudgetValidationResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[BudgetValidationResponseData, UnsetType]=unset, **kwargs): + """ + The response object for a budget validation request, containing the validation result data. + + :param data: The data object for a budget validation response, containing the resource type, ID, and validation attributes. + :type data: BudgetValidationResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_validation_response_data.py b/datadog_api_client/v2/model/budget_validation_response_data.py new file mode 100644 index 0000000000..8a2b73f7f2 --- /dev/null +++ b/datadog_api_client/v2/model/budget_validation_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_validation_response_data_attributes import BudgetValidationResponseDataAttributes + from datadog_api_client.v2.model.budget_validation_response_data_type import BudgetValidationResponseDataType + +class BudgetValidationResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_validation_response_data_attributes import BudgetValidationResponseDataAttributes + from datadog_api_client.v2.model.budget_validation_response_data_type import BudgetValidationResponseDataType + return { + "attributes": (BudgetValidationResponseDataAttributes,), + "id": (str,), + "type": (BudgetValidationResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: BudgetValidationResponseDataType, attributes: Union[BudgetValidationResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object for a budget validation response, containing the resource type, ID, and validation attributes. + + :param attributes: The attributes of a budget validation response, including any validation errors and the validity status. + :type attributes: BudgetValidationResponseDataAttributes, optional + + :param id: The unique identifier of the budget being validated. + :type id: str, optional + + :param type: Budget validation resource type. + :type type: BudgetValidationResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/budget_validation_response_data_attributes.py b/datadog_api_client/v2/model/budget_validation_response_data_attributes.py new file mode 100644 index 0000000000..3f94c04cb0 --- /dev/null +++ b/datadog_api_client/v2/model/budget_validation_response_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BudgetValidationResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "errors": ([str],), + "valid": (bool,), + } + attribute_map = { + "errors": "errors", + "valid": "valid", + } + + def __init__(self_, errors: Union[List[str], UnsetType]=unset, valid: Union[bool, UnsetType]=unset, **kwargs): + """ + The attributes of a budget validation response, including any validation errors and the validity status. + + :param errors: A list of validation error messages for the budget. + :type errors: [str], optional + + :param valid: Whether the budget configuration is valid. + :type valid: bool, optional + """ + if errors is not unset: + kwargs["errors"] = errors + if valid is not unset: + kwargs["valid"] = valid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_validation_response_data_type.py b/datadog_api_client/v2/model/budget_validation_response_data_type.py new file mode 100644 index 0000000000..b5205a6b11 --- /dev/null +++ b/datadog_api_client/v2/model/budget_validation_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BudgetValidationResponseDataType(ModelSimple): + """ + Budget validation resource type. + + :param value: If omitted defaults to "budget_validation". Must be one of ["budget_validation"]. + :type value: str + """ + + allowed_values = { + "budget_validation", + } + BUDGET_VALIDATION: ClassVar["BudgetValidationResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BudgetValidationResponseDataType.BUDGET_VALIDATION = BudgetValidationResponseDataType("budget_validation") diff --git a/datadog_api_client/v2/model/budget_with_entries.py b/datadog_api_client/v2/model/budget_with_entries.py new file mode 100644 index 0000000000..0f39a88ad7 --- /dev/null +++ b/datadog_api_client/v2/model/budget_with_entries.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_with_entries_data import BudgetWithEntriesData + +class BudgetWithEntries(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_with_entries_data import BudgetWithEntriesData + return { + "data": (BudgetWithEntriesData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[BudgetWithEntriesData, UnsetType]=unset, **kwargs): + """ + The definition of the ``BudgetWithEntries`` object. + + :param data: A budget and all its entries. + :type data: BudgetWithEntriesData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_with_entries_data.py b/datadog_api_client/v2/model/budget_with_entries_data.py new file mode 100644 index 0000000000..dc4d6e0070 --- /dev/null +++ b/datadog_api_client/v2/model/budget_with_entries_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_attributes import BudgetAttributes + +class BudgetWithEntriesData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_attributes import BudgetAttributes + return { + "attributes": (BudgetAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[BudgetAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A budget and all its entries. + + :param attributes: The attributes of a budget. + :type attributes: BudgetAttributes, optional + + :param id: The ``BudgetWithEntriesData`` ``id``. + :type id: str, optional + + :param type: The type of the object, must be ``budget``. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_with_entries_data_attributes.py b/datadog_api_client/v2/model/budget_with_entries_data_attributes.py new file mode 100644 index 0000000000..44c34ab2e7 --- /dev/null +++ b/datadog_api_client/v2/model/budget_with_entries_data_attributes.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items import BudgetWithEntriesDataAttributesEntriesItems + +class BudgetWithEntriesDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items import BudgetWithEntriesDataAttributesEntriesItems + return { + "created_at": (int,), + "created_by": (str,), + "end_month": (int,), + "entries": ([BudgetWithEntriesDataAttributesEntriesItems],), + "metrics_query": (str,), + "name": (str,), + "org_id": (int,), + "start_month": (int,), + "total_amount": (float,), + "updated_at": (int,), + "updated_by": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "end_month": "end_month", + "entries": "entries", + "metrics_query": "metrics_query", + "name": "name", + "org_id": "org_id", + "start_month": "start_month", + "total_amount": "total_amount", + "updated_at": "updated_at", + "updated_by": "updated_by", + } + + def __init__(self_, created_at: Union[int, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, end_month: Union[int, UnsetType]=unset, entries: Union[List[BudgetWithEntriesDataAttributesEntriesItems], UnsetType]=unset, metrics_query: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, start_month: Union[int, UnsetType]=unset, total_amount: Union[float, UnsetType]=unset, updated_at: Union[int, UnsetType]=unset, updated_by: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a budget including all its monthly entries. + + :param created_at: The timestamp when the budget was created. + :type created_at: int, optional + + :param created_by: The ID of the user that created the budget. + :type created_by: str, optional + + :param end_month: The month when the budget ends, in YYYYMM format. + :type end_month: int, optional + + :param entries: The list of monthly budget entries. + :type entries: [BudgetWithEntriesDataAttributesEntriesItems], optional + + :param metrics_query: The cost query used to track spending against the budget. + :type metrics_query: str, optional + + :param name: The name of the budget. + :type name: str, optional + + :param org_id: The ID of the organization the budget belongs to. + :type org_id: int, optional + + :param start_month: The month when the budget starts, in YYYYMM format. + :type start_month: int, optional + + :param total_amount: The total budget amount across all entries. + :type total_amount: float, optional + + :param updated_at: The timestamp when the budget was last updated. + :type updated_at: int, optional + + :param updated_by: The ID of the user that last updated the budget. + :type updated_by: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if end_month is not unset: + kwargs["end_month"] = end_month + if entries is not unset: + kwargs["entries"] = entries + if metrics_query is not unset: + kwargs["metrics_query"] = metrics_query + if name is not unset: + kwargs["name"] = name + if org_id is not unset: + kwargs["org_id"] = org_id + if start_month is not unset: + kwargs["start_month"] = start_month + if total_amount is not unset: + kwargs["total_amount"] = total_amount + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updated_by is not unset: + kwargs["updated_by"] = updated_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_with_entries_data_attributes_entries_items.py b/datadog_api_client/v2/model/budget_with_entries_data_attributes_entries_items.py new file mode 100644 index 0000000000..74b3a5049c --- /dev/null +++ b/datadog_api_client/v2/model/budget_with_entries_data_attributes_entries_items.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items_costs import BudgetWithEntriesDataAttributesEntriesItemsCosts + from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items_tag_filters_items import BudgetWithEntriesDataAttributesEntriesItemsTagFiltersItems + +class BudgetWithEntriesDataAttributesEntriesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items_costs import BudgetWithEntriesDataAttributesEntriesItemsCosts + from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items_tag_filters_items import BudgetWithEntriesDataAttributesEntriesItemsTagFiltersItems + return { + "amount": (float,), + "costs": (BudgetWithEntriesDataAttributesEntriesItemsCosts,), + "month": (int,), + "tag_filters": ([BudgetWithEntriesDataAttributesEntriesItemsTagFiltersItems],), + } + attribute_map = { + "amount": "amount", + "costs": "costs", + "month": "month", + "tag_filters": "tag_filters", + } + + def __init__(self_, amount: Union[float, UnsetType]=unset, costs: Union[BudgetWithEntriesDataAttributesEntriesItemsCosts, UnsetType]=unset, month: Union[int, UnsetType]=unset, tag_filters: Union[List[BudgetWithEntriesDataAttributesEntriesItemsTagFiltersItems], UnsetType]=unset, **kwargs): + """ + A single monthly budget entry defining the allocated amount and optional tag filters for a specific month. + + :param amount: The budgeted amount for this entry. + :type amount: float, optional + + :param costs: Cost data for a single budget entry. + :type costs: BudgetWithEntriesDataAttributesEntriesItemsCosts, optional + + :param month: The month this budget entry applies to, in YYYYMM format. + :type month: int, optional + + :param tag_filters: The list of tag filters that scope this budget entry to specific resources. + :type tag_filters: [BudgetWithEntriesDataAttributesEntriesItemsTagFiltersItems], optional + """ + if amount is not unset: + kwargs["amount"] = amount + if costs is not unset: + kwargs["costs"] = costs + if month is not unset: + kwargs["month"] = month + if tag_filters is not unset: + kwargs["tag_filters"] = tag_filters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_with_entries_data_attributes_entries_items_costs.py b/datadog_api_client/v2/model/budget_with_entries_data_attributes_entries_items_costs.py new file mode 100644 index 0000000000..a9e441fd49 --- /dev/null +++ b/datadog_api_client/v2/model/budget_with_entries_data_attributes_entries_items_costs.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BudgetWithEntriesDataAttributesEntriesItemsCosts(ModelNormal): + @cached_property + def openapi_types(_): + return { + "actual": (float, none_type), + "amount": (float, none_type), + "custom_forecast": (float, none_type), + "forecast": (float, none_type), + "ootb_forecast": (float, none_type), + } + attribute_map = { + "actual": "actual", + "amount": "amount", + "custom_forecast": "custom_forecast", + "forecast": "forecast", + "ootb_forecast": "ootb_forecast", + } + + def __init__(self_, actual: Union[float, none_type, UnsetType]=unset, amount: Union[float, none_type, UnsetType]=unset, custom_forecast: Union[float, none_type, UnsetType]=unset, forecast: Union[float, none_type, UnsetType]=unset, ootb_forecast: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + Cost data for a single budget entry. + + :param actual: The actual cost for this entry. Present only when ``actual=true`` is requested. + :type actual: float, none_type, optional + + :param amount: The budgeted amount for this entry. + :type amount: float, none_type, optional + + :param custom_forecast: The custom forecast override for this entry. ``null`` when ``forecast=true`` is requested but no custom forecast has been set for this entry's month. A numeric value, including ``0`` , indicates an explicit custom forecast override. Omitted when ``forecast=false`` or the feature is not available for the organization. + :type custom_forecast: float, none_type, optional + + :param forecast: The final forecast for this entry, with any custom forecast override applied. Present only when ``forecast=true`` is requested. + :type forecast: float, none_type, optional + + :param ootb_forecast: The out-of-the-box ML forecast for this entry, before custom overrides. Present only when ``forecast=true`` is requested. + :type ootb_forecast: float, none_type, optional + """ + if actual is not unset: + kwargs["actual"] = actual + if amount is not unset: + kwargs["amount"] = amount + if custom_forecast is not unset: + kwargs["custom_forecast"] = custom_forecast + if forecast is not unset: + kwargs["forecast"] = forecast + if ootb_forecast is not unset: + kwargs["ootb_forecast"] = ootb_forecast + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_with_entries_data_attributes_entries_items_tag_filters_items.py b/datadog_api_client/v2/model/budget_with_entries_data_attributes_entries_items_tag_filters_items.py new file mode 100644 index 0000000000..a444c00b22 --- /dev/null +++ b/datadog_api_client/v2/model/budget_with_entries_data_attributes_entries_items_tag_filters_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BudgetWithEntriesDataAttributesEntriesItemsTagFiltersItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "tag_key": (str,), + "tag_value": (str,), + } + attribute_map = { + "tag_key": "tag_key", + "tag_value": "tag_value", + } + + def __init__(self_, tag_key: Union[str, UnsetType]=unset, tag_value: Union[str, UnsetType]=unset, **kwargs): + """ + A tag filter used to scope a budget entry to specific resource tags. + + :param tag_key: The tag key to filter on. + :type tag_key: str, optional + + :param tag_value: The tag value to filter on. + :type tag_value: str, optional + """ + if tag_key is not unset: + kwargs["tag_key"] = tag_key + if tag_value is not unset: + kwargs["tag_value"] = tag_value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/budget_with_entries_data_type.py b/datadog_api_client/v2/model/budget_with_entries_data_type.py new file mode 100644 index 0000000000..ba539f6950 --- /dev/null +++ b/datadog_api_client/v2/model/budget_with_entries_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BudgetWithEntriesDataType(ModelSimple): + """ + Budget resource type. + + :param value: If omitted defaults to "budget". Must be one of ["budget"]. + :type value: str + """ + + allowed_values = { + "budget", + } + BUDGET: ClassVar["BudgetWithEntriesDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BudgetWithEntriesDataType.BUDGET = BudgetWithEntriesDataType("budget") diff --git a/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request.py b/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request.py new file mode 100644 index 0000000000..5c9da78671 --- /dev/null +++ b/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request_data import BulkDeleteAppsDatastoreItemsRequestData + +class BulkDeleteAppsDatastoreItemsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request_data import BulkDeleteAppsDatastoreItemsRequestData + return { + "data": (BulkDeleteAppsDatastoreItemsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[BulkDeleteAppsDatastoreItemsRequestData, UnsetType]=unset, **kwargs): + """ + Request to delete items from a datastore. + + :param data: Data wrapper containing the data needed to delete items from a datastore. + :type data: BulkDeleteAppsDatastoreItemsRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request_data.py b/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request_data.py new file mode 100644 index 0000000000..5a18a5206f --- /dev/null +++ b/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request_data_attributes import BulkDeleteAppsDatastoreItemsRequestDataAttributes + from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request_data_type import BulkDeleteAppsDatastoreItemsRequestDataType + +class BulkDeleteAppsDatastoreItemsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request_data_attributes import BulkDeleteAppsDatastoreItemsRequestDataAttributes + from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request_data_type import BulkDeleteAppsDatastoreItemsRequestDataType + return { + "attributes": (BulkDeleteAppsDatastoreItemsRequestDataAttributes,), + "id": (str,), + "type": (BulkDeleteAppsDatastoreItemsRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: BulkDeleteAppsDatastoreItemsRequestDataType, attributes: Union[BulkDeleteAppsDatastoreItemsRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data wrapper containing the data needed to delete items from a datastore. + + :param attributes: Attributes of request data to delete items from a datastore. + :type attributes: BulkDeleteAppsDatastoreItemsRequestDataAttributes, optional + + :param id: ID for the datastore of the items to delete. + :type id: str, optional + + :param type: Items resource type. + :type type: BulkDeleteAppsDatastoreItemsRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request_data_attributes.py b/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request_data_attributes.py new file mode 100644 index 0000000000..22941e5258 --- /dev/null +++ b/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class BulkDeleteAppsDatastoreItemsRequestDataAttributes(ModelNormal): + validations = { + "item_keys": { + "max_items": 100, + }, + } + @cached_property + def openapi_types(_): + return { + "item_keys": ([str],), + } + attribute_map = { + "item_keys": "item_keys", + } + + def __init__(self_, item_keys: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of request data to delete items from a datastore. + + :param item_keys: List of primary keys identifying items to delete from datastore. Up to 100 items can be deleted in a single request. + :type item_keys: [str], optional + """ + if item_keys is not unset: + kwargs["item_keys"] = item_keys + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request_data_type.py b/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request_data_type.py new file mode 100644 index 0000000000..63888ffc90 --- /dev/null +++ b/datadog_api_client/v2/model/bulk_delete_apps_datastore_items_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class BulkDeleteAppsDatastoreItemsRequestDataType(ModelSimple): + """ + Items resource type. + + :param value: If omitted defaults to "items". Must be one of ["items"]. + :type value: str + """ + + allowed_values = { + "items", + } + ITEMS: ClassVar["BulkDeleteAppsDatastoreItemsRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +BulkDeleteAppsDatastoreItemsRequestDataType.ITEMS = BulkDeleteAppsDatastoreItemsRequestDataType("items") diff --git a/datadog_api_client/v2/model/bulk_put_apps_datastore_items_request.py b/datadog_api_client/v2/model/bulk_put_apps_datastore_items_request.py new file mode 100644 index 0000000000..fbf9258d87 --- /dev/null +++ b/datadog_api_client/v2/model/bulk_put_apps_datastore_items_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.bulk_put_apps_datastore_items_request_data import BulkPutAppsDatastoreItemsRequestData + +class BulkPutAppsDatastoreItemsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.bulk_put_apps_datastore_items_request_data import BulkPutAppsDatastoreItemsRequestData + return { + "data": (BulkPutAppsDatastoreItemsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[BulkPutAppsDatastoreItemsRequestData, UnsetType]=unset, **kwargs): + """ + Request to insert multiple items into a datastore in a single operation. + + :param data: Data wrapper containing the items to insert and their configuration for the bulk insert operation. + :type data: BulkPutAppsDatastoreItemsRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/bulk_put_apps_datastore_items_request_data.py b/datadog_api_client/v2/model/bulk_put_apps_datastore_items_request_data.py new file mode 100644 index 0000000000..c241a6bfc6 --- /dev/null +++ b/datadog_api_client/v2/model/bulk_put_apps_datastore_items_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.bulk_put_apps_datastore_items_request_data_attributes import BulkPutAppsDatastoreItemsRequestDataAttributes + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + +class BulkPutAppsDatastoreItemsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.bulk_put_apps_datastore_items_request_data_attributes import BulkPutAppsDatastoreItemsRequestDataAttributes + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + return { + "attributes": (BulkPutAppsDatastoreItemsRequestDataAttributes,), + "type": (DatastoreItemsDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: DatastoreItemsDataType, attributes: Union[BulkPutAppsDatastoreItemsRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + Data wrapper containing the items to insert and their configuration for the bulk insert operation. + + :param attributes: Configuration for bulk inserting multiple items into a datastore. + :type attributes: BulkPutAppsDatastoreItemsRequestDataAttributes, optional + + :param type: The resource type for datastore items. + :type type: DatastoreItemsDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/bulk_put_apps_datastore_items_request_data_attributes.py b/datadog_api_client/v2/model/bulk_put_apps_datastore_items_request_data_attributes.py new file mode 100644 index 0000000000..3424e0ac9d --- /dev/null +++ b/datadog_api_client/v2/model/bulk_put_apps_datastore_items_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datastore_item_conflict_mode import DatastoreItemConflictMode + +class BulkPutAppsDatastoreItemsRequestDataAttributes(ModelNormal): + validations = { + "values": { + "max_items": 100, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datastore_item_conflict_mode import DatastoreItemConflictMode + return { + "conflict_mode": (DatastoreItemConflictMode,), + "values": ([{str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}],), + } + attribute_map = { + "conflict_mode": "conflict_mode", + "values": "values", + } + + def __init__(self_, values: List[Dict[str, Any]], conflict_mode: Union[DatastoreItemConflictMode, UnsetType]=unset, **kwargs): + """ + Configuration for bulk inserting multiple items into a datastore. + + :param conflict_mode: How to handle conflicts when inserting items that already exist in the datastore. + :type conflict_mode: DatastoreItemConflictMode, optional + + :param values: An array of items to add to the datastore, where each item is a set of key-value pairs representing the item's data. Up to 100 items can be updated in a single request. + :type values: [{str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}] + """ + if conflict_mode is not unset: + kwargs["conflict_mode"] = conflict_mode + super().__init__(kwargs) + + + self_.values = values diff --git a/datadog_api_client/v2/model/calculated_field.py b/datadog_api_client/v2/model/calculated_field.py new file mode 100644 index 0000000000..9a55c29e0e --- /dev/null +++ b/datadog_api_client/v2/model/calculated_field.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CalculatedField(ModelNormal): + @cached_property + def openapi_types(_): + return { + "expression": (str,), + "name": (str,), + } + attribute_map = { + "expression": "expression", + "name": "name", + } + + def __init__(self_, expression: str, name: str, **kwargs): + """ + Calculated field. + + :param expression: Expression. + :type expression: str + + :param name: Field name. + :type name: str + """ + super().__init__(kwargs) + + + self_.expression = expression + self_.name = name diff --git a/datadog_api_client/v2/model/campaign_response.py b/datadog_api_client/v2/model/campaign_response.py new file mode 100644 index 0000000000..abb520b982 --- /dev/null +++ b/datadog_api_client/v2/model/campaign_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.campaign_response_data import CampaignResponseData + +class CampaignResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.campaign_response_data import CampaignResponseData + return { + "data": (CampaignResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CampaignResponseData, **kwargs): + """ + Response containing campaign data. + + :param data: Campaign data. + :type data: CampaignResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/campaign_response_attributes.py b/datadog_api_client/v2/model/campaign_response_attributes.py new file mode 100644 index 0000000000..7ee8613e2e --- /dev/null +++ b/datadog_api_client/v2/model/campaign_response_attributes.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CampaignResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "description": (str,), + "due_date": (datetime,), + "entity_scope": (str,), + "guidance": (str,), + "key": (str,), + "modified_at": (datetime,), + "name": (str,), + "owner": (str,), + "start_date": (datetime,), + "status": (str,), + } + attribute_map = { + "created_at": "created_at", + "description": "description", + "due_date": "due_date", + "entity_scope": "entity_scope", + "guidance": "guidance", + "key": "key", + "modified_at": "modified_at", + "name": "name", + "owner": "owner", + "start_date": "start_date", + "status": "status", + } + + def __init__(self_, created_at: datetime, key: str, modified_at: datetime, name: str, owner: str, start_date: datetime, status: str, description: Union[str, UnsetType]=unset, due_date: Union[datetime, UnsetType]=unset, entity_scope: Union[str, UnsetType]=unset, guidance: Union[str, UnsetType]=unset, **kwargs): + """ + Campaign attributes. + + :param created_at: Creation time of the campaign. + :type created_at: datetime + + :param description: The description of the campaign. + :type description: str, optional + + :param due_date: The due date of the campaign. + :type due_date: datetime, optional + + :param entity_scope: Entity scope query to filter entities for this campaign. + :type entity_scope: str, optional + + :param guidance: Guidance for the campaign. + :type guidance: str, optional + + :param key: The unique key for the campaign. + :type key: str + + :param modified_at: Time of last campaign modification. + :type modified_at: datetime + + :param name: The name of the campaign. + :type name: str + + :param owner: The UUID of the campaign owner. + :type owner: str + + :param start_date: The start date of the campaign. + :type start_date: datetime + + :param status: The status of the campaign. + :type status: str + """ + if description is not unset: + kwargs["description"] = description + if due_date is not unset: + kwargs["due_date"] = due_date + if entity_scope is not unset: + kwargs["entity_scope"] = entity_scope + if guidance is not unset: + kwargs["guidance"] = guidance + super().__init__(kwargs) + + + self_.created_at = created_at + self_.key = key + self_.modified_at = modified_at + self_.name = name + self_.owner = owner + self_.start_date = start_date + self_.status = status diff --git a/datadog_api_client/v2/model/campaign_response_data.py b/datadog_api_client/v2/model/campaign_response_data.py new file mode 100644 index 0000000000..3b22138267 --- /dev/null +++ b/datadog_api_client/v2/model/campaign_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.campaign_response_attributes import CampaignResponseAttributes + from datadog_api_client.v2.model.campaign_type import CampaignType + +class CampaignResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.campaign_response_attributes import CampaignResponseAttributes + from datadog_api_client.v2.model.campaign_type import CampaignType + return { + "attributes": (CampaignResponseAttributes,), + "id": (str,), + "type": (CampaignType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CampaignResponseAttributes, id: str, type: CampaignType, **kwargs): + """ + Campaign data. + + :param attributes: Campaign attributes. + :type attributes: CampaignResponseAttributes + + :param id: The unique ID of the campaign. + :type id: str + + :param type: The JSON:API type for campaigns. + :type type: CampaignType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/campaign_status.py b/datadog_api_client/v2/model/campaign_status.py new file mode 100644 index 0000000000..91211edf02 --- /dev/null +++ b/datadog_api_client/v2/model/campaign_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CampaignStatus(ModelSimple): + """ + The status of the campaign. + + :param value: Must be one of ["in_progress", "not_started", "completed"]. + :type value: str + """ + + allowed_values = { + "in_progress", + "not_started", + "completed", + } + IN_PROGRESS: ClassVar["CampaignStatus"] + NOT_STARTED: ClassVar["CampaignStatus"] + COMPLETED: ClassVar["CampaignStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CampaignStatus.IN_PROGRESS = CampaignStatus("in_progress") +CampaignStatus.NOT_STARTED = CampaignStatus("not_started") +CampaignStatus.COMPLETED = CampaignStatus("completed") diff --git a/datadog_api_client/v2/model/campaign_type.py b/datadog_api_client/v2/model/campaign_type.py new file mode 100644 index 0000000000..f60f467156 --- /dev/null +++ b/datadog_api_client/v2/model/campaign_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CampaignType(ModelSimple): + """ + The JSON:API type for campaigns. + + :param value: If omitted defaults to "campaign". Must be one of ["campaign"]. + :type value: str + """ + + allowed_values = { + "campaign", + } + CAMPAIGN: ClassVar["CampaignType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CampaignType.CAMPAIGN = CampaignType("campaign") diff --git a/datadog_api_client/v2/model/cancel_data_deletion_response_body.py b/datadog_api_client/v2/model/cancel_data_deletion_response_body.py new file mode 100644 index 0000000000..86e7f51dde --- /dev/null +++ b/datadog_api_client/v2/model/cancel_data_deletion_response_body.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_deletion_response_item import DataDeletionResponseItem + from datadog_api_client.v2.model.data_deletion_response_meta import DataDeletionResponseMeta + +class CancelDataDeletionResponseBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_deletion_response_item import DataDeletionResponseItem + from datadog_api_client.v2.model.data_deletion_response_meta import DataDeletionResponseMeta + return { + "data": (DataDeletionResponseItem,), + "meta": (DataDeletionResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[DataDeletionResponseItem, UnsetType]=unset, meta: Union[DataDeletionResponseMeta, UnsetType]=unset, **kwargs): + """ + The response from the cancel data deletion request endpoint. + + :param data: The created data deletion request information. + :type data: DataDeletionResponseItem, optional + + :param meta: The metadata of the data deletion response. + :type meta: DataDeletionResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case.py b/datadog_api_client/v2/model/case.py new file mode 100644 index 0000000000..45e54d57fc --- /dev/null +++ b/datadog_api_client/v2/model/case.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_attributes import CaseAttributes + from datadog_api_client.v2.model.case_relationships import CaseRelationships + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class Case(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_attributes import CaseAttributes + from datadog_api_client.v2.model.case_relationships import CaseRelationships + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseAttributes,), + "id": (str,), + "relationships": (CaseRelationships,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: CaseAttributes, id: str, type: CaseResourceType, relationships: Union[CaseRelationships, UnsetType]=unset, **kwargs): + """ + A case + + :param attributes: Case resource attributes + :type attributes: CaseAttributes + + :param id: Case's identifier + :type id: str + + :param relationships: Resources related to a case + :type relationships: CaseRelationships, optional + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/case3rd_party_ticket_status.py b/datadog_api_client/v2/model/case3rd_party_ticket_status.py new file mode 100644 index 0000000000..4620eab4a9 --- /dev/null +++ b/datadog_api_client/v2/model/case3rd_party_ticket_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class Case3rdPartyTicketStatus(ModelSimple): + """ + Case status + + :param value: If omitted defaults to "IN_PROGRESS". Must be one of ["IN_PROGRESS", "COMPLETED", "FAILED"]. + :type value: str + """ + + allowed_values = { + "IN_PROGRESS", + "COMPLETED", + "FAILED", + } + IN_PROGRESS: ClassVar["Case3rdPartyTicketStatus"] + COMPLETED: ClassVar["Case3rdPartyTicketStatus"] + FAILED: ClassVar["Case3rdPartyTicketStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +Case3rdPartyTicketStatus.IN_PROGRESS = Case3rdPartyTicketStatus("IN_PROGRESS") +Case3rdPartyTicketStatus.COMPLETED = Case3rdPartyTicketStatus("COMPLETED") +Case3rdPartyTicketStatus.FAILED = Case3rdPartyTicketStatus("FAILED") diff --git a/datadog_api_client/v2/model/case_aggregate_group.py b/datadog_api_client/v2/model/case_aggregate_group.py new file mode 100644 index 0000000000..2e63228cf5 --- /dev/null +++ b/datadog_api_client/v2/model/case_aggregate_group.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseAggregateGroup(ModelNormal): + @cached_property + def openapi_types(_): + return { + "group": (str,), + "value": ([float],), + } + attribute_map = { + "group": "group", + "value": "value", + } + + def __init__(self_, group: str, value: List[float], **kwargs): + """ + A single group within the aggregation results, containing the group key and its associated count values. + + :param group: The value of the field being grouped on (for example, ``OPEN`` when grouping by status). + :type group: str + + :param value: The count of cases in this group. + :type value: [float] + """ + super().__init__(kwargs) + + + self_.group = group + self_.value = value diff --git a/datadog_api_client/v2/model/case_aggregate_group_by.py b/datadog_api_client/v2/model/case_aggregate_group_by.py new file mode 100644 index 0000000000..ac9de979c8 --- /dev/null +++ b/datadog_api_client/v2/model/case_aggregate_group_by.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseAggregateGroupBy(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "groups": ([str],), + "limit": (int,), + } + attribute_map = { + "groups": "groups", + "limit": "limit", + } + + def __init__(self_, groups: List[str], limit: int, **kwargs): + """ + Configuration for grouping aggregated results by one or more case fields. + + :param groups: Fields to group by. + :type groups: [str] + + :param limit: Maximum number of groups to return. + :type limit: int + """ + super().__init__(kwargs) + + + self_.groups = groups + self_.limit = limit diff --git a/datadog_api_client/v2/model/case_aggregate_request.py b/datadog_api_client/v2/model/case_aggregate_request.py new file mode 100644 index 0000000000..cc7239f2b4 --- /dev/null +++ b/datadog_api_client/v2/model/case_aggregate_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_aggregate_request_data import CaseAggregateRequestData + +class CaseAggregateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_aggregate_request_data import CaseAggregateRequestData + return { + "data": (CaseAggregateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseAggregateRequestData, **kwargs): + """ + Request payload for aggregating case counts with grouping. Use this to get faceted breakdowns of cases (for example, count of cases grouped by priority and status). + + :param data: Data object wrapping the aggregation query type and attributes. + :type data: CaseAggregateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_aggregate_request_attributes.py b/datadog_api_client/v2/model/case_aggregate_request_attributes.py new file mode 100644 index 0000000000..22d4f4c42c --- /dev/null +++ b/datadog_api_client/v2/model/case_aggregate_request_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_aggregate_group_by import CaseAggregateGroupBy + +class CaseAggregateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_aggregate_group_by import CaseAggregateGroupBy + return { + "group_by": (CaseAggregateGroupBy,), + "query_filter": (str,), + } + attribute_map = { + "group_by": "group_by", + "query_filter": "query_filter", + } + + def __init__(self_, group_by: CaseAggregateGroupBy, query_filter: str, **kwargs): + """ + Attributes for the aggregation request, including the search query and grouping configuration. + + :param group_by: Configuration for grouping aggregated results by one or more case fields. + :type group_by: CaseAggregateGroupBy + + :param query_filter: A search query to filter which cases are included in the aggregation. Uses the same syntax as the Case Management search bar. + :type query_filter: str + """ + super().__init__(kwargs) + + + self_.group_by = group_by + self_.query_filter = query_filter diff --git a/datadog_api_client/v2/model/case_aggregate_request_data.py b/datadog_api_client/v2/model/case_aggregate_request_data.py new file mode 100644 index 0000000000..1515320acc --- /dev/null +++ b/datadog_api_client/v2/model/case_aggregate_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_aggregate_request_attributes import CaseAggregateRequestAttributes + from datadog_api_client.v2.model.case_aggregate_resource_type import CaseAggregateResourceType + +class CaseAggregateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_aggregate_request_attributes import CaseAggregateRequestAttributes + from datadog_api_client.v2.model.case_aggregate_resource_type import CaseAggregateResourceType + return { + "attributes": (CaseAggregateRequestAttributes,), + "type": (CaseAggregateResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseAggregateRequestAttributes, type: CaseAggregateResourceType, **kwargs): + """ + Data object wrapping the aggregation query type and attributes. + + :param attributes: Attributes for the aggregation request, including the search query and grouping configuration. + :type attributes: CaseAggregateRequestAttributes + + :param type: JSON:API resource type for case aggregation requests. + :type type: CaseAggregateResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_aggregate_resource_type.py b/datadog_api_client/v2/model/case_aggregate_resource_type.py new file mode 100644 index 0000000000..fe1a986db9 --- /dev/null +++ b/datadog_api_client/v2/model/case_aggregate_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseAggregateResourceType(ModelSimple): + """ + JSON:API resource type for case aggregation requests. + + :param value: If omitted defaults to "aggregate". Must be one of ["aggregate"]. + :type value: str + """ + + allowed_values = { + "aggregate", + } + AGGREGATE: ClassVar["CaseAggregateResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseAggregateResourceType.AGGREGATE = CaseAggregateResourceType("aggregate") diff --git a/datadog_api_client/v2/model/case_aggregate_response.py b/datadog_api_client/v2/model/case_aggregate_response.py new file mode 100644 index 0000000000..c68fa6833d --- /dev/null +++ b/datadog_api_client/v2/model/case_aggregate_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_aggregate_response_data import CaseAggregateResponseData + +class CaseAggregateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_aggregate_response_data import CaseAggregateResponseData + return { + "data": (CaseAggregateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseAggregateResponseData, **kwargs): + """ + Response containing aggregated case counts grouped by the requested fields. + + :param data: Data object containing the aggregation results, including total count and per-group breakdowns. + :type data: CaseAggregateResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_aggregate_response_attributes.py b/datadog_api_client/v2/model/case_aggregate_response_attributes.py new file mode 100644 index 0000000000..2364b8a680 --- /dev/null +++ b/datadog_api_client/v2/model/case_aggregate_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_aggregate_group import CaseAggregateGroup + +class CaseAggregateResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_aggregate_group import CaseAggregateGroup + return { + "groups": ([CaseAggregateGroup],), + "total": (float,), + } + attribute_map = { + "groups": "groups", + "total": "total", + } + + def __init__(self_, groups: List[CaseAggregateGroup], total: float, **kwargs): + """ + Attributes of the aggregation result, including the total count across all groups and the per-group breakdowns. + + :param groups: Aggregated groups. + :type groups: [CaseAggregateGroup] + + :param total: Total count of aggregated cases. + :type total: float + """ + super().__init__(kwargs) + + + self_.groups = groups + self_.total = total diff --git a/datadog_api_client/v2/model/case_aggregate_response_data.py b/datadog_api_client/v2/model/case_aggregate_response_data.py new file mode 100644 index 0000000000..f3f8f7afbf --- /dev/null +++ b/datadog_api_client/v2/model/case_aggregate_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_aggregate_response_attributes import CaseAggregateResponseAttributes + +class CaseAggregateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_aggregate_response_attributes import CaseAggregateResponseAttributes + return { + "attributes": (CaseAggregateResponseAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CaseAggregateResponseAttributes, id: str, type: str, **kwargs): + """ + Data object containing the aggregation results, including total count and per-group breakdowns. + + :param attributes: Attributes of the aggregation result, including the total count across all groups and the per-group breakdowns. + :type attributes: CaseAggregateResponseAttributes + + :param id: Aggregate response identifier. + :type id: str + + :param type: Aggregate resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/case_assign.py b/datadog_api_client/v2/model/case_assign.py new file mode 100644 index 0000000000..142c970a93 --- /dev/null +++ b/datadog_api_client/v2/model/case_assign.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_assign_attributes import CaseAssignAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseAssign(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_assign_attributes import CaseAssignAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseAssignAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseAssignAttributes, type: CaseResourceType, **kwargs): + """ + Case assign + + :param attributes: Case assign attributes + :type attributes: CaseAssignAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_assign_attributes.py b/datadog_api_client/v2/model/case_assign_attributes.py new file mode 100644 index 0000000000..51746a960c --- /dev/null +++ b/datadog_api_client/v2/model/case_assign_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseAssignAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignee_id": (str,), + } + attribute_map = { + "assignee_id": "assignee_id", + } + + def __init__(self_, assignee_id: str, **kwargs): + """ + Case assign attributes + + :param assignee_id: Assignee's UUID + :type assignee_id: str + """ + super().__init__(kwargs) + + + self_.assignee_id = assignee_id diff --git a/datadog_api_client/v2/model/case_assign_request.py b/datadog_api_client/v2/model/case_assign_request.py new file mode 100644 index 0000000000..26ed13cc0c --- /dev/null +++ b/datadog_api_client/v2/model/case_assign_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_assign import CaseAssign + +class CaseAssignRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_assign import CaseAssign + return { + "data": (CaseAssign,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseAssign, **kwargs): + """ + Case assign request + + :param data: Case assign + :type data: CaseAssign + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_attributes.py b/datadog_api_client/v2/model/case_attributes.py new file mode 100644 index 0000000000..c55d51b4c0 --- /dev/null +++ b/datadog_api_client/v2/model/case_attributes.py @@ -0,0 +1,183 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_object_attributes import CaseObjectAttributes + from datadog_api_client.v2.model.custom_attribute_value import CustomAttributeValue + from datadog_api_client.v2.model.jira_issue import JiraIssue + from datadog_api_client.v2.model.case_priority import CasePriority + from datadog_api_client.v2.model.service_now_ticket import ServiceNowTicket + from datadog_api_client.v2.model.case_status import CaseStatus + from datadog_api_client.v2.model.case_status_group import CaseStatusGroup + from datadog_api_client.v2.model.case_type import CaseType + +class CaseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_object_attributes import CaseObjectAttributes + from datadog_api_client.v2.model.custom_attribute_value import CustomAttributeValue + from datadog_api_client.v2.model.jira_issue import JiraIssue + from datadog_api_client.v2.model.case_priority import CasePriority + from datadog_api_client.v2.model.service_now_ticket import ServiceNowTicket + from datadog_api_client.v2.model.case_status import CaseStatus + from datadog_api_client.v2.model.case_status_group import CaseStatusGroup + from datadog_api_client.v2.model.case_type import CaseType + return { + "archived_at": (datetime, none_type), + "attributes": (CaseObjectAttributes,), + "closed_at": (datetime, none_type), + "created_at": (datetime,), + "custom_attributes": ({str: (CustomAttributeValue,)},), + "description": (str,), + "jira_issue": (JiraIssue,), + "key": (str,), + "modified_at": (datetime, none_type), + "priority": (CasePriority,), + "service_now_ticket": (ServiceNowTicket,), + "status": (CaseStatus,), + "status_group": (CaseStatusGroup,), + "status_name": (str,), + "title": (str,), + "type": (CaseType,), + "type_id": (str,), + } + attribute_map = { + "archived_at": "archived_at", + "attributes": "attributes", + "closed_at": "closed_at", + "created_at": "created_at", + "custom_attributes": "custom_attributes", + "description": "description", + "jira_issue": "jira_issue", + "key": "key", + "modified_at": "modified_at", + "priority": "priority", + "service_now_ticket": "service_now_ticket", + "status": "status", + "status_group": "status_group", + "status_name": "status_name", + "title": "title", + "type": "type", + "type_id": "type_id", + } + read_only_vars = { + "archived_at", + "closed_at", + "created_at", + "jira_issue", + "modified_at", + "service_now_ticket", + } + + def __init__(self_, archived_at: Union[datetime, none_type, UnsetType]=unset, attributes: Union[CaseObjectAttributes, UnsetType]=unset, closed_at: Union[datetime, none_type, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, custom_attributes: Union[Dict[str, CustomAttributeValue], UnsetType]=unset, description: Union[str, UnsetType]=unset, jira_issue: Union[JiraIssue, none_type, UnsetType]=unset, key: Union[str, UnsetType]=unset, modified_at: Union[datetime, none_type, UnsetType]=unset, priority: Union[CasePriority, UnsetType]=unset, service_now_ticket: Union[ServiceNowTicket, none_type, UnsetType]=unset, status: Union[CaseStatus, UnsetType]=unset, status_group: Union[CaseStatusGroup, UnsetType]=unset, status_name: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, type: Union[CaseType, UnsetType]=unset, type_id: Union[str, UnsetType]=unset, **kwargs): + """ + Case resource attributes + + :param archived_at: Timestamp of when the case was archived + :type archived_at: datetime, none_type, optional + + :param attributes: Key-value pairs of case attributes. Each key maps to an array of string values, used for flexible metadata such as labels or tags. + :type attributes: CaseObjectAttributes, optional + + :param closed_at: Timestamp of when the case was closed + :type closed_at: datetime, none_type, optional + + :param created_at: Timestamp of when the case was created + :type created_at: datetime, optional + + :param custom_attributes: Case custom attributes + :type custom_attributes: {str: (CustomAttributeValue,)}, optional + + :param description: Description + :type description: str, optional + + :param jira_issue: Jira issue attached to case + :type jira_issue: JiraIssue, none_type, optional + + :param key: Key + :type key: str, optional + + :param modified_at: Timestamp of when the case was last modified + :type modified_at: datetime, none_type, optional + + :param priority: Case priority + :type priority: CasePriority, optional + + :param service_now_ticket: ServiceNow ticket attached to case + :type service_now_ticket: ServiceNowTicket, none_type, optional + + :param status: Deprecated way of representing the case status, which only supports OPEN, IN_PROGRESS, and CLOSED statuses. Use ``status_name`` instead. **Deprecated**. + :type status: CaseStatus, optional + + :param status_group: Status group of the case. + :type status_group: CaseStatusGroup, optional + + :param status_name: Status of the case. Must be one of the existing statuses for the case's type. + :type status_name: str, optional + + :param title: Title + :type title: str, optional + + :param type: Case type **Deprecated**. + :type type: CaseType, optional + + :param type_id: Case type UUID + :type type_id: str, optional + """ + if archived_at is not unset: + kwargs["archived_at"] = archived_at + if attributes is not unset: + kwargs["attributes"] = attributes + if closed_at is not unset: + kwargs["closed_at"] = closed_at + if created_at is not unset: + kwargs["created_at"] = created_at + if custom_attributes is not unset: + kwargs["custom_attributes"] = custom_attributes + if description is not unset: + kwargs["description"] = description + if jira_issue is not unset: + kwargs["jira_issue"] = jira_issue + if key is not unset: + kwargs["key"] = key + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if priority is not unset: + kwargs["priority"] = priority + if service_now_ticket is not unset: + kwargs["service_now_ticket"] = service_now_ticket + if status is not unset: + kwargs["status"] = status + if status_group is not unset: + kwargs["status_group"] = status_group + if status_name is not unset: + kwargs["status_name"] = status_name + if title is not unset: + kwargs["title"] = title + if type is not unset: + kwargs["type"] = type + if type_id is not unset: + kwargs["type_id"] = type_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_automation_rule_resource_type.py b/datadog_api_client/v2/model/case_automation_rule_resource_type.py new file mode 100644 index 0000000000..6b3c3dcc7c --- /dev/null +++ b/datadog_api_client/v2/model/case_automation_rule_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseAutomationRuleResourceType(ModelSimple): + """ + JSON:API resource type for case automation rules. + + :param value: If omitted defaults to "rule". Must be one of ["rule"]. + :type value: str + """ + + allowed_values = { + "rule", + } + RULE: ClassVar["CaseAutomationRuleResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseAutomationRuleResourceType.RULE = CaseAutomationRuleResourceType("rule") diff --git a/datadog_api_client/v2/model/case_automation_rule_state.py b/datadog_api_client/v2/model/case_automation_rule_state.py new file mode 100644 index 0000000000..a6baeda439 --- /dev/null +++ b/datadog_api_client/v2/model/case_automation_rule_state.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseAutomationRuleState(ModelSimple): + """ + Whether the automation rule is active. Enabled rules trigger on matching case events; disabled rules are inactive but preserve their configuration. + + :param value: Must be one of ["ENABLED", "DISABLED"]. + :type value: str + """ + + allowed_values = { + "ENABLED", + "DISABLED", + } + ENABLED: ClassVar["CaseAutomationRuleState"] + DISABLED: ClassVar["CaseAutomationRuleState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseAutomationRuleState.ENABLED = CaseAutomationRuleState("ENABLED") +CaseAutomationRuleState.DISABLED = CaseAutomationRuleState("DISABLED") diff --git a/datadog_api_client/v2/model/case_bulk_action_type.py b/datadog_api_client/v2/model/case_bulk_action_type.py new file mode 100644 index 0000000000..6f5d1dbe66 --- /dev/null +++ b/datadog_api_client/v2/model/case_bulk_action_type.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseBulkActionType(ModelSimple): + """ + The type of action to apply in a bulk update. Allowed values are `priority`, `status`, `assign`, `unassign`, `archive`, `unarchive`, `jira`, `servicenow`, `linear`, `update_project`. + + :param value: Must be one of ["priority", "status", "assign", "unassign", "archive", "unarchive", "jira", "servicenow", "linear", "update_project"]. + :type value: str + """ + + allowed_values = { + "priority", + "status", + "assign", + "unassign", + "archive", + "unarchive", + "jira", + "servicenow", + "linear", + "update_project", + } + PRIORITY: ClassVar["CaseBulkActionType"] + STATUS: ClassVar["CaseBulkActionType"] + ASSIGN: ClassVar["CaseBulkActionType"] + UNASSIGN: ClassVar["CaseBulkActionType"] + ARCHIVE: ClassVar["CaseBulkActionType"] + UNARCHIVE: ClassVar["CaseBulkActionType"] + JIRA: ClassVar["CaseBulkActionType"] + SERVICENOW: ClassVar["CaseBulkActionType"] + LINEAR: ClassVar["CaseBulkActionType"] + UPDATE_PROJECT: ClassVar["CaseBulkActionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseBulkActionType.PRIORITY = CaseBulkActionType("priority") +CaseBulkActionType.STATUS = CaseBulkActionType("status") +CaseBulkActionType.ASSIGN = CaseBulkActionType("assign") +CaseBulkActionType.UNASSIGN = CaseBulkActionType("unassign") +CaseBulkActionType.ARCHIVE = CaseBulkActionType("archive") +CaseBulkActionType.UNARCHIVE = CaseBulkActionType("unarchive") +CaseBulkActionType.JIRA = CaseBulkActionType("jira") +CaseBulkActionType.SERVICENOW = CaseBulkActionType("servicenow") +CaseBulkActionType.LINEAR = CaseBulkActionType("linear") +CaseBulkActionType.UPDATE_PROJECT = CaseBulkActionType("update_project") diff --git a/datadog_api_client/v2/model/case_bulk_resource_type.py b/datadog_api_client/v2/model/case_bulk_resource_type.py new file mode 100644 index 0000000000..8d8c4b3875 --- /dev/null +++ b/datadog_api_client/v2/model/case_bulk_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseBulkResourceType(ModelSimple): + """ + JSON:API resource type for bulk case operations. + + :param value: If omitted defaults to "bulk". Must be one of ["bulk"]. + :type value: str + """ + + allowed_values = { + "bulk", + } + BULK: ClassVar["CaseBulkResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseBulkResourceType.BULK = CaseBulkResourceType("bulk") diff --git a/datadog_api_client/v2/model/case_bulk_update_request.py b/datadog_api_client/v2/model/case_bulk_update_request.py new file mode 100644 index 0000000000..7161d15b5e --- /dev/null +++ b/datadog_api_client/v2/model/case_bulk_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_bulk_update_request_data import CaseBulkUpdateRequestData + +class CaseBulkUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_bulk_update_request_data import CaseBulkUpdateRequestData + return { + "data": (CaseBulkUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseBulkUpdateRequestData, **kwargs): + """ + Request payload for applying a single action (such as changing priority, status, or assignment) to multiple cases at once. + + :param data: Data object wrapping the bulk update type and attributes. + :type data: CaseBulkUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_bulk_update_request_attributes.py b/datadog_api_client/v2/model/case_bulk_update_request_attributes.py new file mode 100644 index 0000000000..3278440136 --- /dev/null +++ b/datadog_api_client/v2/model/case_bulk_update_request_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_bulk_action_type import CaseBulkActionType + +class CaseBulkUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_bulk_action_type import CaseBulkActionType + return { + "case_ids": ([str],), + "payload": ({str: (str,)},), + "type": (CaseBulkActionType,), + } + attribute_map = { + "case_ids": "case_ids", + "payload": "payload", + "type": "type", + } + + def __init__(self_, case_ids: List[str], type: CaseBulkActionType, payload: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + Attributes for the bulk update, specifying which cases to update and the action to apply. + + :param case_ids: An array of case identifiers to apply the bulk action to. + :type case_ids: [str] + + :param payload: A key-value map of action-specific parameters. The required keys depend on the action type (for example, ``priority`` for the priority action, ``assignee_id`` for assign). + :type payload: {str: (str,)}, optional + + :param type: The type of action to apply in a bulk update. Allowed values are ``priority`` , ``status`` , ``assign`` , ``unassign`` , ``archive`` , ``unarchive`` , ``jira`` , ``servicenow`` , ``linear`` , ``update_project``. + :type type: CaseBulkActionType + """ + if payload is not unset: + kwargs["payload"] = payload + super().__init__(kwargs) + + + self_.case_ids = case_ids + self_.type = type diff --git a/datadog_api_client/v2/model/case_bulk_update_request_data.py b/datadog_api_client/v2/model/case_bulk_update_request_data.py new file mode 100644 index 0000000000..37b38c1313 --- /dev/null +++ b/datadog_api_client/v2/model/case_bulk_update_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_bulk_update_request_attributes import CaseBulkUpdateRequestAttributes + from datadog_api_client.v2.model.case_bulk_resource_type import CaseBulkResourceType + +class CaseBulkUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_bulk_update_request_attributes import CaseBulkUpdateRequestAttributes + from datadog_api_client.v2.model.case_bulk_resource_type import CaseBulkResourceType + return { + "attributes": (CaseBulkUpdateRequestAttributes,), + "type": (CaseBulkResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseBulkUpdateRequestAttributes, type: CaseBulkResourceType, **kwargs): + """ + Data object wrapping the bulk update type and attributes. + + :param attributes: Attributes for the bulk update, specifying which cases to update and the action to apply. + :type attributes: CaseBulkUpdateRequestAttributes + + :param type: JSON:API resource type for bulk case operations. + :type type: CaseBulkResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_comment.py b/datadog_api_client/v2/model/case_comment.py new file mode 100644 index 0000000000..c74a40ee6d --- /dev/null +++ b/datadog_api_client/v2/model/case_comment.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_comment_attributes import CaseCommentAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseComment(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_comment_attributes import CaseCommentAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseCommentAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseCommentAttributes, type: CaseResourceType, **kwargs): + """ + Case comment + + :param attributes: Case comment attributes + :type attributes: CaseCommentAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_comment_attributes.py b/datadog_api_client/v2/model/case_comment_attributes.py new file mode 100644 index 0000000000..8cac77af74 --- /dev/null +++ b/datadog_api_client/v2/model/case_comment_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseCommentAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "comment": (str,), + } + attribute_map = { + "comment": "comment", + } + + def __init__(self_, comment: str, **kwargs): + """ + Case comment attributes + + :param comment: The ``CaseCommentAttributes`` ``message``. + :type comment: str + """ + super().__init__(kwargs) + + + self_.comment = comment diff --git a/datadog_api_client/v2/model/case_comment_request.py b/datadog_api_client/v2/model/case_comment_request.py new file mode 100644 index 0000000000..8368c796bb --- /dev/null +++ b/datadog_api_client/v2/model/case_comment_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_comment import CaseComment + +class CaseCommentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_comment import CaseComment + return { + "data": (CaseComment,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseComment, **kwargs): + """ + Case comment request + + :param data: Case comment + :type data: CaseComment + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_count_group.py b/datadog_api_client/v2/model/case_count_group.py new file mode 100644 index 0000000000..01d5a26e19 --- /dev/null +++ b/datadog_api_client/v2/model/case_count_group.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_count_group_value import CaseCountGroupValue + +class CaseCountGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_count_group_value import CaseCountGroupValue + return { + "group": (str,), + "group_values": ([CaseCountGroupValue],), + } + attribute_map = { + "group": "group", + "group_values": "group_values", + } + + def __init__(self_, group: str, group_values: List[CaseCountGroupValue], **kwargs): + """ + A facet group containing counts broken down by the distinct values of a case field (for example, status or priority). + + :param group: The name of the field being grouped on (for example, ``status`` or ``priority`` ). + :type group: str + + :param group_values: Values within this group. + :type group_values: [CaseCountGroupValue] + """ + super().__init__(kwargs) + + + self_.group = group + self_.group_values = group_values diff --git a/datadog_api_client/v2/model/case_count_group_value.py b/datadog_api_client/v2/model/case_count_group_value.py new file mode 100644 index 0000000000..85d715bd43 --- /dev/null +++ b/datadog_api_client/v2/model/case_count_group_value.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseCountGroupValue(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "value": (str,), + } + attribute_map = { + "count": "count", + "value": "value", + } + + def __init__(self_, count: int, value: str, **kwargs): + """ + A single value within a count group, representing the number of cases with that specific field value. + + :param count: Count of cases for this value. + :type count: int + + :param value: The group value. + :type value: str + """ + super().__init__(kwargs) + + + self_.count = count + self_.value = value diff --git a/datadog_api_client/v2/model/case_count_response.py b/datadog_api_client/v2/model/case_count_response.py new file mode 100644 index 0000000000..b90cbdcd32 --- /dev/null +++ b/datadog_api_client/v2/model/case_count_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_count_response_data import CaseCountResponseData + +class CaseCountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_count_response_data import CaseCountResponseData + return { + "data": (CaseCountResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseCountResponseData, **kwargs): + """ + Response containing the total number of cases matching a query, optionally grouped by specified fields. + + :param data: Data object containing the count results, including per-field group breakdowns. + :type data: CaseCountResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_count_response_attributes.py b/datadog_api_client/v2/model/case_count_response_attributes.py new file mode 100644 index 0000000000..b07aa479a3 --- /dev/null +++ b/datadog_api_client/v2/model/case_count_response_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_count_group import CaseCountGroup + +class CaseCountResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_count_group import CaseCountGroup + return { + "groups": ([CaseCountGroup],), + } + attribute_map = { + "groups": "groups", + } + + def __init__(self_, groups: List[CaseCountGroup], **kwargs): + """ + Attributes for the count response, including the total count and optional facet breakdowns. + + :param groups: List of facet groups, one per field specified in ``group_bys``. + :type groups: [CaseCountGroup] + """ + super().__init__(kwargs) + + + self_.groups = groups diff --git a/datadog_api_client/v2/model/case_count_response_data.py b/datadog_api_client/v2/model/case_count_response_data.py new file mode 100644 index 0000000000..6b250254f5 --- /dev/null +++ b/datadog_api_client/v2/model/case_count_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_count_response_attributes import CaseCountResponseAttributes + +class CaseCountResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_count_response_attributes import CaseCountResponseAttributes + return { + "attributes": (CaseCountResponseAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CaseCountResponseAttributes, id: str, type: str, **kwargs): + """ + Data object containing the count results, including per-field group breakdowns. + + :param attributes: Attributes for the count response, including the total count and optional facet breakdowns. + :type attributes: CaseCountResponseAttributes + + :param id: Count response identifier. + :type id: str + + :param type: Count resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/case_create.py b/datadog_api_client/v2/model/case_create.py new file mode 100644 index 0000000000..c1ba678591 --- /dev/null +++ b/datadog_api_client/v2/model/case_create.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_create_attributes import CaseCreateAttributes + from datadog_api_client.v2.model.case_create_relationships import CaseCreateRelationships + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_create_attributes import CaseCreateAttributes + from datadog_api_client.v2.model.case_create_relationships import CaseCreateRelationships + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseCreateAttributes,), + "relationships": (CaseCreateRelationships,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: CaseCreateAttributes, type: CaseResourceType, relationships: Union[CaseCreateRelationships, UnsetType]=unset, **kwargs): + """ + Case creation data + + :param attributes: Case creation attributes + :type attributes: CaseCreateAttributes + + :param relationships: Relationships formed with the case on creation + :type relationships: CaseCreateRelationships, optional + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_create_attributes.py b/datadog_api_client/v2/model/case_create_attributes.py new file mode 100644 index 0000000000..793f1cfb77 --- /dev/null +++ b/datadog_api_client/v2/model/case_create_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_value import CustomAttributeValue + from datadog_api_client.v2.model.case_priority import CasePriority + +class CaseCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_value import CustomAttributeValue + from datadog_api_client.v2.model.case_priority import CasePriority + return { + "custom_attributes": ({str: (CustomAttributeValue,)},), + "description": (str,), + "priority": (CasePriority,), + "status_name": (str,), + "title": (str,), + "type_id": (str,), + } + attribute_map = { + "custom_attributes": "custom_attributes", + "description": "description", + "priority": "priority", + "status_name": "status_name", + "title": "title", + "type_id": "type_id", + } + + def __init__(self_, title: str, type_id: str, custom_attributes: Union[Dict[str, CustomAttributeValue], UnsetType]=unset, description: Union[str, UnsetType]=unset, priority: Union[CasePriority, UnsetType]=unset, status_name: Union[str, UnsetType]=unset, **kwargs): + """ + Case creation attributes + + :param custom_attributes: Case custom attributes + :type custom_attributes: {str: (CustomAttributeValue,)}, optional + + :param description: Description + :type description: str, optional + + :param priority: Case priority + :type priority: CasePriority, optional + + :param status_name: Status of the case. Must be one of the existing statuses for the case's type. + :type status_name: str, optional + + :param title: Title + :type title: str + + :param type_id: Case type UUID + :type type_id: str + """ + if custom_attributes is not unset: + kwargs["custom_attributes"] = custom_attributes + if description is not unset: + kwargs["description"] = description + if priority is not unset: + kwargs["priority"] = priority + if status_name is not unset: + kwargs["status_name"] = status_name + super().__init__(kwargs) + + + self_.title = title + self_.type_id = type_id diff --git a/datadog_api_client/v2/model/case_create_relationships.py b/datadog_api_client/v2/model/case_create_relationships.py new file mode 100644 index 0000000000..f497d143e5 --- /dev/null +++ b/datadog_api_client/v2/model/case_create_relationships.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + from datadog_api_client.v2.model.project_relationship import ProjectRelationship + +class CaseCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + from datadog_api_client.v2.model.project_relationship import ProjectRelationship + return { + "assignee": (NullableUserRelationship,), + "project": (ProjectRelationship,), + } + attribute_map = { + "assignee": "assignee", + "project": "project", + } + + def __init__(self_, project: ProjectRelationship, assignee: Union[NullableUserRelationship, none_type, UnsetType]=unset, **kwargs): + """ + Relationships formed with the case on creation + + :param assignee: Relationship to user. + :type assignee: NullableUserRelationship, none_type, optional + + :param project: Relationship to project. + :type project: ProjectRelationship + """ + if assignee is not unset: + kwargs["assignee"] = assignee + super().__init__(kwargs) + + + self_.project = project diff --git a/datadog_api_client/v2/model/case_create_request.py b/datadog_api_client/v2/model/case_create_request.py new file mode 100644 index 0000000000..4ec2fced8a --- /dev/null +++ b/datadog_api_client/v2/model/case_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_create import CaseCreate + +class CaseCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_create import CaseCreate + return { + "data": (CaseCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseCreate, **kwargs): + """ + Case create request + + :param data: Case creation data + :type data: CaseCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_data_type.py b/datadog_api_client/v2/model/case_data_type.py new file mode 100644 index 0000000000..fde5d6dd29 --- /dev/null +++ b/datadog_api_client/v2/model/case_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseDataType(ModelSimple): + """ + Cases resource type. + + :param value: If omitted defaults to "cases". Must be one of ["cases"]. + :type value: str + """ + + allowed_values = { + "cases", + } + CASES: ClassVar["CaseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseDataType.CASES = CaseDataType("cases") diff --git a/datadog_api_client/v2/model/case_empty.py b/datadog_api_client/v2/model/case_empty.py new file mode 100644 index 0000000000..7b7b4d87ab --- /dev/null +++ b/datadog_api_client/v2/model/case_empty.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseEmpty(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "type": (CaseResourceType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: CaseResourceType, **kwargs): + """ + Case empty request data + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/case_empty_request.py b/datadog_api_client/v2/model/case_empty_request.py new file mode 100644 index 0000000000..e0f885fff7 --- /dev/null +++ b/datadog_api_client/v2/model/case_empty_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_empty import CaseEmpty + +class CaseEmptyRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_empty import CaseEmpty + return { + "data": (CaseEmpty,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseEmpty, **kwargs): + """ + Case empty request + + :param data: Case empty request data + :type data: CaseEmpty + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_insight.py b/datadog_api_client/v2/model/case_insight.py new file mode 100644 index 0000000000..bd219aec3e --- /dev/null +++ b/datadog_api_client/v2/model/case_insight.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_insight_type import CaseInsightType + +class CaseInsight(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_insight_type import CaseInsightType + return { + "ref": (str,), + "resource_id": (str,), + "type": (CaseInsightType,), + } + attribute_map = { + "ref": "ref", + "resource_id": "resource_id", + "type": "type", + } + + def __init__(self_, ref: str, resource_id: str, type: CaseInsightType, **kwargs): + """ + A reference to an external Datadog resource that provides investigative context for a case, such as a security signal, monitor alert, error tracking issue, or incident. + + :param ref: The URL path or deep link to the insight resource within Datadog (for example, ``/monitors/12345?q=total`` ). + :type ref: str + + :param resource_id: The unique identifier of the referenced Datadog resource (for example, a monitor ID, incident ID, or signal ID). + :type resource_id: str + + :param type: The type of Datadog resource linked to the case as contextual evidence. Each type corresponds to a different Datadog product signal (for example, a security finding, a monitor alert, or an incident). + :type type: CaseInsightType + """ + super().__init__(kwargs) + + + self_.ref = ref + self_.resource_id = resource_id + self_.type = type diff --git a/datadog_api_client/v2/model/case_insight_type.py b/datadog_api_client/v2/model/case_insight_type.py new file mode 100644 index 0000000000..838822dbd0 --- /dev/null +++ b/datadog_api_client/v2/model/case_insight_type.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseInsightType(ModelSimple): + """ + The type of Datadog resource linked to the case as contextual evidence. Each type corresponds to a different Datadog product signal (for example, a security finding, a monitor alert, or an incident). + + :param value: Must be one of ["SECURITY_SIGNAL", "MONITOR", "EVENT_CORRELATION", "ERROR_TRACKING", "CLOUD_COST_RECOMMENDATION", "INCIDENT", "SENSITIVE_DATA_SCANNER_ISSUE", "EVENT", "WATCHDOG_STORY", "WIDGET", "SECURITY_FINDING", "INSIGHT_SCORECARD_CAMPAIGN", "RESOURCE_POLICY", "APM_RECOMMENDATION", "SCM_URL", "PROFILING_DOWNSIZING_EXPERIMENT"]. + :type value: str + """ + + allowed_values = { + "SECURITY_SIGNAL", + "MONITOR", + "EVENT_CORRELATION", + "ERROR_TRACKING", + "CLOUD_COST_RECOMMENDATION", + "INCIDENT", + "SENSITIVE_DATA_SCANNER_ISSUE", + "EVENT", + "WATCHDOG_STORY", + "WIDGET", + "SECURITY_FINDING", + "INSIGHT_SCORECARD_CAMPAIGN", + "RESOURCE_POLICY", + "APM_RECOMMENDATION", + "SCM_URL", + "PROFILING_DOWNSIZING_EXPERIMENT", + } + SECURITY_SIGNAL: ClassVar["CaseInsightType"] + MONITOR: ClassVar["CaseInsightType"] + EVENT_CORRELATION: ClassVar["CaseInsightType"] + ERROR_TRACKING: ClassVar["CaseInsightType"] + CLOUD_COST_RECOMMENDATION: ClassVar["CaseInsightType"] + INCIDENT: ClassVar["CaseInsightType"] + SENSITIVE_DATA_SCANNER_ISSUE: ClassVar["CaseInsightType"] + EVENT: ClassVar["CaseInsightType"] + WATCHDOG_STORY: ClassVar["CaseInsightType"] + WIDGET: ClassVar["CaseInsightType"] + SECURITY_FINDING: ClassVar["CaseInsightType"] + INSIGHT_SCORECARD_CAMPAIGN: ClassVar["CaseInsightType"] + RESOURCE_POLICY: ClassVar["CaseInsightType"] + APM_RECOMMENDATION: ClassVar["CaseInsightType"] + SCM_URL: ClassVar["CaseInsightType"] + PROFILING_DOWNSIZING_EXPERIMENT: ClassVar["CaseInsightType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseInsightType.SECURITY_SIGNAL = CaseInsightType("SECURITY_SIGNAL") +CaseInsightType.MONITOR = CaseInsightType("MONITOR") +CaseInsightType.EVENT_CORRELATION = CaseInsightType("EVENT_CORRELATION") +CaseInsightType.ERROR_TRACKING = CaseInsightType("ERROR_TRACKING") +CaseInsightType.CLOUD_COST_RECOMMENDATION = CaseInsightType("CLOUD_COST_RECOMMENDATION") +CaseInsightType.INCIDENT = CaseInsightType("INCIDENT") +CaseInsightType.SENSITIVE_DATA_SCANNER_ISSUE = CaseInsightType("SENSITIVE_DATA_SCANNER_ISSUE") +CaseInsightType.EVENT = CaseInsightType("EVENT") +CaseInsightType.WATCHDOG_STORY = CaseInsightType("WATCHDOG_STORY") +CaseInsightType.WIDGET = CaseInsightType("WIDGET") +CaseInsightType.SECURITY_FINDING = CaseInsightType("SECURITY_FINDING") +CaseInsightType.INSIGHT_SCORECARD_CAMPAIGN = CaseInsightType("INSIGHT_SCORECARD_CAMPAIGN") +CaseInsightType.RESOURCE_POLICY = CaseInsightType("RESOURCE_POLICY") +CaseInsightType.APM_RECOMMENDATION = CaseInsightType("APM_RECOMMENDATION") +CaseInsightType.SCM_URL = CaseInsightType("SCM_URL") +CaseInsightType.PROFILING_DOWNSIZING_EXPERIMENT = CaseInsightType("PROFILING_DOWNSIZING_EXPERIMENT") diff --git a/datadog_api_client/v2/model/case_insights_attributes.py b/datadog_api_client/v2/model/case_insights_attributes.py new file mode 100644 index 0000000000..352d054a8f --- /dev/null +++ b/datadog_api_client/v2/model/case_insights_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_insight import CaseInsight + +class CaseInsightsAttributes(ModelNormal): + validations = { + "insights": { + "max_items": 100, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_insight import CaseInsight + return { + "insights": ([CaseInsight],), + } + attribute_map = { + "insights": "insights", + } + + def __init__(self_, insights: List[CaseInsight], **kwargs): + """ + Attributes for adding or removing insights from a case. + + :param insights: Array of insights to add to or remove from a case. + :type insights: [CaseInsight] + """ + super().__init__(kwargs) + + + self_.insights = insights diff --git a/datadog_api_client/v2/model/case_insights_data.py b/datadog_api_client/v2/model/case_insights_data.py new file mode 100644 index 0000000000..87eddbf5fe --- /dev/null +++ b/datadog_api_client/v2/model/case_insights_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_insights_attributes import CaseInsightsAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseInsightsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_insights_attributes import CaseInsightsAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseInsightsAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseInsightsAttributes, type: CaseResourceType, **kwargs): + """ + Data object containing the insights to add or remove. + + :param attributes: Attributes for adding or removing insights from a case. + :type attributes: CaseInsightsAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_insights_items.py b/datadog_api_client/v2/model/case_insights_items.py new file mode 100644 index 0000000000..7540144479 --- /dev/null +++ b/datadog_api_client/v2/model/case_insights_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseInsightsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ref": (str,), + "resource_id": (str,), + "type": (str,), + } + attribute_map = { + "ref": "ref", + "resource_id": "resource_id", + "type": "type", + } + + def __init__(self_, ref: Union[str, UnsetType]=unset, resource_id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + An insight of the case. + + :param ref: Reference of the insight. + :type ref: str, optional + + :param resource_id: Unique identifier of the resource. For example, the unique identifier of a security finding. + :type resource_id: str, optional + + :param type: Type of the resource. For example, the type of a security finding is "SECURITY_FINDING". + :type type: str, optional + """ + if ref is not unset: + kwargs["ref"] = ref + if resource_id is not unset: + kwargs["resource_id"] = resource_id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_insights_request.py b/datadog_api_client/v2/model/case_insights_request.py new file mode 100644 index 0000000000..bcb830cc7e --- /dev/null +++ b/datadog_api_client/v2/model/case_insights_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_insights_data import CaseInsightsData + +class CaseInsightsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_insights_data import CaseInsightsData + return { + "data": (CaseInsightsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseInsightsData, **kwargs): + """ + Request payload for adding or removing case insights. + + :param data: Data object containing the insights to add or remove. + :type data: CaseInsightsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_link.py b/datadog_api_client/v2/model/case_link.py new file mode 100644 index 0000000000..a840a12ed6 --- /dev/null +++ b/datadog_api_client/v2/model/case_link.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_link_attributes import CaseLinkAttributes + from datadog_api_client.v2.model.case_link_resource_type import CaseLinkResourceType + +class CaseLink(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_link_attributes import CaseLinkAttributes + from datadog_api_client.v2.model.case_link_resource_type import CaseLinkResourceType + return { + "attributes": (CaseLinkAttributes,), + "id": (str,), + "type": (CaseLinkResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CaseLinkAttributes, id: str, type: CaseLinkResourceType, **kwargs): + """ + A directional link representing a relationship between two entities. At least one entity must be a case. + + :param attributes: Attributes describing a directional relationship between two entities (cases, incidents, or pages). + :type attributes: CaseLinkAttributes + + :param id: The case link identifier. + :type id: str + + :param type: JSON:API resource type for case links. + :type type: CaseLinkResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/case_link_attributes.py b/datadog_api_client/v2/model/case_link_attributes.py new file mode 100644 index 0000000000..17ea854df3 --- /dev/null +++ b/datadog_api_client/v2/model/case_link_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseLinkAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "child_entity_id": (str,), + "child_entity_type": (str,), + "parent_entity_id": (str,), + "parent_entity_type": (str,), + "relationship": (str,), + } + attribute_map = { + "child_entity_id": "child_entity_id", + "child_entity_type": "child_entity_type", + "parent_entity_id": "parent_entity_id", + "parent_entity_type": "parent_entity_type", + "relationship": "relationship", + } + + def __init__(self_, child_entity_id: str, child_entity_type: str, parent_entity_id: str, parent_entity_type: str, relationship: str, **kwargs): + """ + Attributes describing a directional relationship between two entities (cases, incidents, or pages). + + :param child_entity_id: The UUID of the child (target) entity in the relationship. + :type child_entity_id: str + + :param child_entity_type: The type of the child entity. Allowed values: ``CASE`` , ``INCIDENT`` , ``PAGE`` , ``AGENT_CONVERSATION``. + :type child_entity_type: str + + :param parent_entity_id: The UUID of the parent (source) entity in the relationship. + :type parent_entity_id: str + + :param parent_entity_type: The type of the parent entity. Allowed values: ``CASE`` , ``INCIDENT`` , ``PAGE`` , ``AGENT_CONVERSATION``. + :type parent_entity_type: str + + :param relationship: The type of directional relationship. Allowed values: ``RELATES_TO`` (bidirectional association), ``CAUSES`` (parent causes child), ``BLOCKS`` (parent blocks child), ``DUPLICATES`` (parent duplicates child), ``PARENT_OF`` (hierarchical), ``SUCCESSOR_OF`` (sequence), ``ESCALATES_TO`` (priority escalation). + :type relationship: str + """ + super().__init__(kwargs) + + + self_.child_entity_id = child_entity_id + self_.child_entity_type = child_entity_type + self_.parent_entity_id = parent_entity_id + self_.parent_entity_type = parent_entity_type + self_.relationship = relationship diff --git a/datadog_api_client/v2/model/case_link_create.py b/datadog_api_client/v2/model/case_link_create.py new file mode 100644 index 0000000000..6e59c520f8 --- /dev/null +++ b/datadog_api_client/v2/model/case_link_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_link_attributes import CaseLinkAttributes + from datadog_api_client.v2.model.case_link_resource_type import CaseLinkResourceType + +class CaseLinkCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_link_attributes import CaseLinkAttributes + from datadog_api_client.v2.model.case_link_resource_type import CaseLinkResourceType + return { + "attributes": (CaseLinkAttributes,), + "type": (CaseLinkResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseLinkAttributes, type: CaseLinkResourceType, **kwargs): + """ + Data object for creating a case link. + + :param attributes: Attributes describing a directional relationship between two entities (cases, incidents, or pages). + :type attributes: CaseLinkAttributes + + :param type: JSON:API resource type for case links. + :type type: CaseLinkResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_link_create_request.py b/datadog_api_client/v2/model/case_link_create_request.py new file mode 100644 index 0000000000..711f3f5f1f --- /dev/null +++ b/datadog_api_client/v2/model/case_link_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_link_create import CaseLinkCreate + +class CaseLinkCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_link_create import CaseLinkCreate + return { + "data": (CaseLinkCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseLinkCreate, **kwargs): + """ + Request payload for creating a link between two entities. + + :param data: Data object for creating a case link. + :type data: CaseLinkCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_link_resource_type.py b/datadog_api_client/v2/model/case_link_resource_type.py new file mode 100644 index 0000000000..d0c92a622f --- /dev/null +++ b/datadog_api_client/v2/model/case_link_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseLinkResourceType(ModelSimple): + """ + JSON:API resource type for case links. + + :param value: If omitted defaults to "link". Must be one of ["link"]. + :type value: str + """ + + allowed_values = { + "link", + } + LINK: ClassVar["CaseLinkResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseLinkResourceType.LINK = CaseLinkResourceType("link") diff --git a/datadog_api_client/v2/model/case_link_response.py b/datadog_api_client/v2/model/case_link_response.py new file mode 100644 index 0000000000..b562f314e1 --- /dev/null +++ b/datadog_api_client/v2/model/case_link_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_link import CaseLink + +class CaseLinkResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_link import CaseLink + return { + "data": (CaseLink,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseLink, **kwargs): + """ + Response containing a single case link. + + :param data: A directional link representing a relationship between two entities. At least one entity must be a case. + :type data: CaseLink + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_links_response.py b/datadog_api_client/v2/model/case_links_response.py new file mode 100644 index 0000000000..8b4c9415f3 --- /dev/null +++ b/datadog_api_client/v2/model/case_links_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_link import CaseLink + +class CaseLinksResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_link import CaseLink + return { + "data": ([CaseLink],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CaseLink], **kwargs): + """ + Response containing a list of case links. + + :param data: A list of case links. + :type data: [CaseLink] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_management_project.py b/datadog_api_client/v2/model/case_management_project.py new file mode 100644 index 0000000000..5e31f7f68a --- /dev/null +++ b/datadog_api_client/v2/model/case_management_project.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_management_project_data import CaseManagementProjectData + +class CaseManagementProject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_management_project_data import CaseManagementProjectData + return { + "data": (CaseManagementProjectData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseManagementProjectData, **kwargs): + """ + Case management project. + + :param data: Data object representing a case management project. + :type data: CaseManagementProjectData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_management_project_data.py b/datadog_api_client/v2/model/case_management_project_data.py new file mode 100644 index 0000000000..15a020d76b --- /dev/null +++ b/datadog_api_client/v2/model/case_management_project_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_management_project_data_type import CaseManagementProjectDataType + +class CaseManagementProjectData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_management_project_data_type import CaseManagementProjectDataType + return { + "id": (str,), + "type": (CaseManagementProjectDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: CaseManagementProjectDataType, **kwargs): + """ + Data object representing a case management project. + + :param id: Unique identifier of the case management project. + :type id: str + + :param type: Projects resource type. + :type type: CaseManagementProjectDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/case_management_project_data_type.py b/datadog_api_client/v2/model/case_management_project_data_type.py new file mode 100644 index 0000000000..72424f5141 --- /dev/null +++ b/datadog_api_client/v2/model/case_management_project_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseManagementProjectDataType(ModelSimple): + """ + Projects resource type. + + :param value: If omitted defaults to "projects". Must be one of ["projects"]. + :type value: str + """ + + allowed_values = { + "projects", + } + PROJECTS: ClassVar["CaseManagementProjectDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseManagementProjectDataType.PROJECTS = CaseManagementProjectDataType("projects") diff --git a/datadog_api_client/v2/model/case_notification_rule.py b/datadog_api_client/v2/model/case_notification_rule.py new file mode 100644 index 0000000000..49774ab1fe --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule_attributes import CaseNotificationRuleAttributes + from datadog_api_client.v2.model.case_notification_rule_resource_type import CaseNotificationRuleResourceType + +class CaseNotificationRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule_attributes import CaseNotificationRuleAttributes + from datadog_api_client.v2.model.case_notification_rule_resource_type import CaseNotificationRuleResourceType + return { + "attributes": (CaseNotificationRuleAttributes,), + "id": (str,), + "type": (CaseNotificationRuleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CaseNotificationRuleAttributes, id: str, type: CaseNotificationRuleResourceType, **kwargs): + """ + A notification rule for case management + + :param attributes: Notification rule attributes + :type attributes: CaseNotificationRuleAttributes + + :param id: The notification rule's identifier + :type id: str + + :param type: Notification rule resource type + :type type: CaseNotificationRuleResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/case_notification_rule_attributes.py b/datadog_api_client/v2/model/case_notification_rule_attributes.py new file mode 100644 index 0000000000..a9dcc251c2 --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule_recipient import CaseNotificationRuleRecipient + from datadog_api_client.v2.model.case_notification_rule_trigger import CaseNotificationRuleTrigger + +class CaseNotificationRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule_recipient import CaseNotificationRuleRecipient + from datadog_api_client.v2.model.case_notification_rule_trigger import CaseNotificationRuleTrigger + return { + "is_enabled": (bool,), + "query": (str,), + "recipients": ([CaseNotificationRuleRecipient],), + "triggers": ([CaseNotificationRuleTrigger],), + } + attribute_map = { + "is_enabled": "is_enabled", + "query": "query", + "recipients": "recipients", + "triggers": "triggers", + } + + def __init__(self_, is_enabled: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, recipients: Union[List[CaseNotificationRuleRecipient], UnsetType]=unset, triggers: Union[List[CaseNotificationRuleTrigger], UnsetType]=unset, **kwargs): + """ + Notification rule attributes + + :param is_enabled: Whether the notification rule is enabled + :type is_enabled: bool, optional + + :param query: Query to filter cases for this notification rule + :type query: str, optional + + :param recipients: List of notification recipients + :type recipients: [CaseNotificationRuleRecipient], optional + + :param triggers: List of triggers for this notification rule + :type triggers: [CaseNotificationRuleTrigger], optional + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if query is not unset: + kwargs["query"] = query + if recipients is not unset: + kwargs["recipients"] = recipients + if triggers is not unset: + kwargs["triggers"] = triggers + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_notification_rule_create.py b/datadog_api_client/v2/model/case_notification_rule_create.py new file mode 100644 index 0000000000..27c1220f11 --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule_create_attributes import CaseNotificationRuleCreateAttributes + from datadog_api_client.v2.model.case_notification_rule_resource_type import CaseNotificationRuleResourceType + +class CaseNotificationRuleCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule_create_attributes import CaseNotificationRuleCreateAttributes + from datadog_api_client.v2.model.case_notification_rule_resource_type import CaseNotificationRuleResourceType + return { + "attributes": (CaseNotificationRuleCreateAttributes,), + "type": (CaseNotificationRuleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseNotificationRuleCreateAttributes, type: CaseNotificationRuleResourceType, **kwargs): + """ + Notification rule create + + :param attributes: Notification rule creation attributes + :type attributes: CaseNotificationRuleCreateAttributes + + :param type: Notification rule resource type + :type type: CaseNotificationRuleResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_notification_rule_create_attributes.py b/datadog_api_client/v2/model/case_notification_rule_create_attributes.py new file mode 100644 index 0000000000..dd999ab56a --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_create_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule_recipient import CaseNotificationRuleRecipient + from datadog_api_client.v2.model.case_notification_rule_trigger import CaseNotificationRuleTrigger + +class CaseNotificationRuleCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule_recipient import CaseNotificationRuleRecipient + from datadog_api_client.v2.model.case_notification_rule_trigger import CaseNotificationRuleTrigger + return { + "is_enabled": (bool,), + "query": (str,), + "recipients": ([CaseNotificationRuleRecipient],), + "triggers": ([CaseNotificationRuleTrigger],), + } + attribute_map = { + "is_enabled": "is_enabled", + "query": "query", + "recipients": "recipients", + "triggers": "triggers", + } + + def __init__(self_, recipients: List[CaseNotificationRuleRecipient], triggers: List[CaseNotificationRuleTrigger], is_enabled: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Notification rule creation attributes + + :param is_enabled: Whether the notification rule is enabled + :type is_enabled: bool, optional + + :param query: Query to filter cases for this notification rule + :type query: str, optional + + :param recipients: List of notification recipients + :type recipients: [CaseNotificationRuleRecipient] + + :param triggers: List of triggers for this notification rule + :type triggers: [CaseNotificationRuleTrigger] + """ + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + + self_.recipients = recipients + self_.triggers = triggers diff --git a/datadog_api_client/v2/model/case_notification_rule_create_request.py b/datadog_api_client/v2/model/case_notification_rule_create_request.py new file mode 100644 index 0000000000..24869b778b --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule_create import CaseNotificationRuleCreate + +class CaseNotificationRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule_create import CaseNotificationRuleCreate + return { + "data": (CaseNotificationRuleCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseNotificationRuleCreate, **kwargs): + """ + Notification rule create request + + :param data: Notification rule create + :type data: CaseNotificationRuleCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_notification_rule_recipient.py b/datadog_api_client/v2/model/case_notification_rule_recipient.py new file mode 100644 index 0000000000..19ea3d502a --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_recipient.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule_recipient_data import CaseNotificationRuleRecipientData + +class CaseNotificationRuleRecipient(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule_recipient_data import CaseNotificationRuleRecipientData + return { + "data": (CaseNotificationRuleRecipientData,), + "type": (str,), + } + attribute_map = { + "data": "data", + "type": "type", + } + + def __init__(self_, data: Union[CaseNotificationRuleRecipientData, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Notification rule recipient + + :param data: Recipient data + :type data: CaseNotificationRuleRecipientData, optional + + :param type: Type of recipient (SLACK_CHANNEL, EMAIL, HTTP, PAGERDUTY_SERVICE, MS_TEAMS_CHANNEL) + :type type: str, optional + """ + if data is not unset: + kwargs["data"] = data + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_notification_rule_recipient_data.py b/datadog_api_client/v2/model/case_notification_rule_recipient_data.py new file mode 100644 index 0000000000..bdcd3085a2 --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_recipient_data.py @@ -0,0 +1,130 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseNotificationRuleRecipientData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "channel": (str,), + "channel_id": (str,), + "channel_name": (str,), + "connector_name": (str,), + "email": (str,), + "name": (str,), + "service_name": (str,), + "team_id": (str,), + "team_name": (str,), + "tenant_id": (str,), + "tenant_name": (str,), + "workspace": (str,), + "workspace_id": (str,), + } + attribute_map = { + "channel": "channel", + "channel_id": "channel_id", + "channel_name": "channel_name", + "connector_name": "connector_name", + "email": "email", + "name": "name", + "service_name": "service_name", + "team_id": "team_id", + "team_name": "team_name", + "tenant_id": "tenant_id", + "tenant_name": "tenant_name", + "workspace": "workspace", + "workspace_id": "workspace_id", + } + + def __init__(self_, channel: Union[str, UnsetType]=unset, channel_id: Union[str, UnsetType]=unset, channel_name: Union[str, UnsetType]=unset, connector_name: Union[str, UnsetType]=unset, email: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, service_name: Union[str, UnsetType]=unset, team_id: Union[str, UnsetType]=unset, team_name: Union[str, UnsetType]=unset, tenant_id: Union[str, UnsetType]=unset, tenant_name: Union[str, UnsetType]=unset, workspace: Union[str, UnsetType]=unset, workspace_id: Union[str, UnsetType]=unset, **kwargs): + """ + Recipient data + + :param channel: Slack channel name + :type channel: str, optional + + :param channel_id: Slack channel ID + :type channel_id: str, optional + + :param channel_name: Microsoft Teams channel name + :type channel_name: str, optional + + :param connector_name: Microsoft Teams connector name + :type connector_name: str, optional + + :param email: Email address + :type email: str, optional + + :param name: HTTP webhook name + :type name: str, optional + + :param service_name: PagerDuty service name + :type service_name: str, optional + + :param team_id: Microsoft Teams team ID + :type team_id: str, optional + + :param team_name: Microsoft Teams team name + :type team_name: str, optional + + :param tenant_id: Microsoft Teams tenant ID + :type tenant_id: str, optional + + :param tenant_name: Microsoft Teams tenant name + :type tenant_name: str, optional + + :param workspace: Slack workspace name + :type workspace: str, optional + + :param workspace_id: Slack workspace ID + :type workspace_id: str, optional + """ + if channel is not unset: + kwargs["channel"] = channel + if channel_id is not unset: + kwargs["channel_id"] = channel_id + if channel_name is not unset: + kwargs["channel_name"] = channel_name + if connector_name is not unset: + kwargs["connector_name"] = connector_name + if email is not unset: + kwargs["email"] = email + if name is not unset: + kwargs["name"] = name + if service_name is not unset: + kwargs["service_name"] = service_name + if team_id is not unset: + kwargs["team_id"] = team_id + if team_name is not unset: + kwargs["team_name"] = team_name + if tenant_id is not unset: + kwargs["tenant_id"] = tenant_id + if tenant_name is not unset: + kwargs["tenant_name"] = tenant_name + if workspace is not unset: + kwargs["workspace"] = workspace + if workspace_id is not unset: + kwargs["workspace_id"] = workspace_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_notification_rule_resource_type.py b/datadog_api_client/v2/model/case_notification_rule_resource_type.py new file mode 100644 index 0000000000..ba003693e0 --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseNotificationRuleResourceType(ModelSimple): + """ + Notification rule resource type + + :param value: If omitted defaults to "notification_rule". Must be one of ["notification_rule"]. + :type value: str + """ + + allowed_values = { + "notification_rule", + } + NOTIFICATION_RULE: ClassVar["CaseNotificationRuleResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseNotificationRuleResourceType.NOTIFICATION_RULE = CaseNotificationRuleResourceType("notification_rule") diff --git a/datadog_api_client/v2/model/case_notification_rule_response.py b/datadog_api_client/v2/model/case_notification_rule_response.py new file mode 100644 index 0000000000..e41c105608 --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule import CaseNotificationRule + +class CaseNotificationRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule import CaseNotificationRule + return { + "data": (CaseNotificationRule,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CaseNotificationRule, UnsetType]=unset, **kwargs): + """ + Notification rule response + + :param data: A notification rule for case management + :type data: CaseNotificationRule, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_notification_rule_trigger.py b/datadog_api_client/v2/model/case_notification_rule_trigger.py new file mode 100644 index 0000000000..d786d130db --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule_trigger_data import CaseNotificationRuleTriggerData + +class CaseNotificationRuleTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule_trigger_data import CaseNotificationRuleTriggerData + return { + "data": (CaseNotificationRuleTriggerData,), + "type": (str,), + } + attribute_map = { + "data": "data", + "type": "type", + } + + def __init__(self_, data: Union[CaseNotificationRuleTriggerData, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Notification rule trigger + + :param data: Trigger data + :type data: CaseNotificationRuleTriggerData, optional + + :param type: Type of trigger (CASE_CREATED, STATUS_TRANSITIONED, ATTRIBUTE_VALUE_CHANGED, EVENT_CORRELATION_SIGNAL_CORRELATED) + :type type: str, optional + """ + if data is not unset: + kwargs["data"] = data + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_notification_rule_trigger_data.py b/datadog_api_client/v2/model/case_notification_rule_trigger_data.py new file mode 100644 index 0000000000..9471e5c2c2 --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_trigger_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseNotificationRuleTriggerData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "change_type": (str,), + "field": (str,), + "from_status": (str,), + "from_status_name": (str,), + "to_status": (str,), + "to_status_name": (str,), + } + attribute_map = { + "change_type": "change_type", + "field": "field", + "from_status": "from_status", + "from_status_name": "from_status_name", + "to_status": "to_status", + "to_status_name": "to_status_name", + } + + def __init__(self_, change_type: Union[str, UnsetType]=unset, field: Union[str, UnsetType]=unset, from_status: Union[str, UnsetType]=unset, from_status_name: Union[str, UnsetType]=unset, to_status: Union[str, UnsetType]=unset, to_status_name: Union[str, UnsetType]=unset, **kwargs): + """ + Trigger data + + :param change_type: Change type (added, removed, changed) + :type change_type: str, optional + + :param field: Field name for attribute value changed trigger + :type field: str, optional + + :param from_status: Status ID to transition from + :type from_status: str, optional + + :param from_status_name: Status name to transition from + :type from_status_name: str, optional + + :param to_status: Status ID to transition to + :type to_status: str, optional + + :param to_status_name: Status name to transition to + :type to_status_name: str, optional + """ + if change_type is not unset: + kwargs["change_type"] = change_type + if field is not unset: + kwargs["field"] = field + if from_status is not unset: + kwargs["from_status"] = from_status + if from_status_name is not unset: + kwargs["from_status_name"] = from_status_name + if to_status is not unset: + kwargs["to_status"] = to_status + if to_status_name is not unset: + kwargs["to_status_name"] = to_status_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_notification_rule_update.py b/datadog_api_client/v2/model/case_notification_rule_update.py new file mode 100644 index 0000000000..e100ba958e --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_update.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule_attributes import CaseNotificationRuleAttributes + from datadog_api_client.v2.model.case_notification_rule_resource_type import CaseNotificationRuleResourceType + +class CaseNotificationRuleUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule_attributes import CaseNotificationRuleAttributes + from datadog_api_client.v2.model.case_notification_rule_resource_type import CaseNotificationRuleResourceType + return { + "attributes": (CaseNotificationRuleAttributes,), + "type": (CaseNotificationRuleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: CaseNotificationRuleResourceType, attributes: Union[CaseNotificationRuleAttributes, UnsetType]=unset, **kwargs): + """ + Notification rule update + + :param attributes: Notification rule attributes + :type attributes: CaseNotificationRuleAttributes, optional + + :param type: Notification rule resource type + :type type: CaseNotificationRuleResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/case_notification_rule_update_request.py b/datadog_api_client/v2/model/case_notification_rule_update_request.py new file mode 100644 index 0000000000..1acc386aae --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rule_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule_update import CaseNotificationRuleUpdate + +class CaseNotificationRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule_update import CaseNotificationRuleUpdate + return { + "data": (CaseNotificationRuleUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseNotificationRuleUpdate, **kwargs): + """ + Notification rule update request + + :param data: Notification rule update + :type data: CaseNotificationRuleUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_notification_rules_response.py b/datadog_api_client/v2/model/case_notification_rules_response.py new file mode 100644 index 0000000000..8aa442774c --- /dev/null +++ b/datadog_api_client/v2/model/case_notification_rules_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_notification_rule import CaseNotificationRule + +class CaseNotificationRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_notification_rule import CaseNotificationRule + return { + "data": ([CaseNotificationRule],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[CaseNotificationRule], UnsetType]=unset, **kwargs): + """ + Response with notification rules + + :param data: Notification rules data + :type data: [CaseNotificationRule], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_object_attributes.py b/datadog_api_client/v2/model/case_object_attributes.py new file mode 100644 index 0000000000..33b2b7b004 --- /dev/null +++ b/datadog_api_client/v2/model/case_object_attributes.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseObjectAttributes(ModelNormal): + @cached_property + def additional_properties_type(_): + return ([str],) + + def __init__(self_, **kwargs): + """ + Key-value pairs of case attributes. Each key maps to an array of string values, used for flexible metadata such as labels or tags. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_priority.py b/datadog_api_client/v2/model/case_priority.py new file mode 100644 index 0000000000..ddeba0ef41 --- /dev/null +++ b/datadog_api_client/v2/model/case_priority.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CasePriority(ModelSimple): + """ + Case priority + + :param value: If omitted defaults to "NOT_DEFINED". Must be one of ["NOT_DEFINED", "P1", "P2", "P3", "P4", "P5"]. + :type value: str + """ + + allowed_values = { + "NOT_DEFINED", + "P1", + "P2", + "P3", + "P4", + "P5", + } + NOT_DEFINED: ClassVar["CasePriority"] + P1: ClassVar["CasePriority"] + P2: ClassVar["CasePriority"] + P3: ClassVar["CasePriority"] + P4: ClassVar["CasePriority"] + P5: ClassVar["CasePriority"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CasePriority.NOT_DEFINED = CasePriority("NOT_DEFINED") +CasePriority.P1 = CasePriority("P1") +CasePriority.P2 = CasePriority("P2") +CasePriority.P3 = CasePriority("P3") +CasePriority.P4 = CasePriority("P4") +CasePriority.P5 = CasePriority("P5") diff --git a/datadog_api_client/v2/model/case_relationships.py b/datadog_api_client/v2/model/case_relationships.py new file mode 100644 index 0000000000..d4dcbaeda5 --- /dev/null +++ b/datadog_api_client/v2/model/case_relationships.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + from datadog_api_client.v2.model.project_relationship import ProjectRelationship + +class CaseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + from datadog_api_client.v2.model.project_relationship import ProjectRelationship + return { + "assignee": (NullableUserRelationship,), + "created_by": (NullableUserRelationship,), + "modified_by": (NullableUserRelationship,), + "project": (ProjectRelationship,), + } + attribute_map = { + "assignee": "assignee", + "created_by": "created_by", + "modified_by": "modified_by", + "project": "project", + } + + def __init__(self_, assignee: Union[NullableUserRelationship, none_type, UnsetType]=unset, created_by: Union[NullableUserRelationship, none_type, UnsetType]=unset, modified_by: Union[NullableUserRelationship, none_type, UnsetType]=unset, project: Union[ProjectRelationship, UnsetType]=unset, **kwargs): + """ + Resources related to a case + + :param assignee: Relationship to user. + :type assignee: NullableUserRelationship, none_type, optional + + :param created_by: Relationship to user. + :type created_by: NullableUserRelationship, none_type, optional + + :param modified_by: Relationship to user. + :type modified_by: NullableUserRelationship, none_type, optional + + :param project: Relationship to project. + :type project: ProjectRelationship, optional + """ + if assignee is not unset: + kwargs["assignee"] = assignee + if created_by is not unset: + kwargs["created_by"] = created_by + if modified_by is not unset: + kwargs["modified_by"] = modified_by + if project is not unset: + kwargs["project"] = project + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_resource_type.py b/datadog_api_client/v2/model/case_resource_type.py new file mode 100644 index 0000000000..f0d894db74 --- /dev/null +++ b/datadog_api_client/v2/model/case_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseResourceType(ModelSimple): + """ + JSON:API resource type for cases. + + :param value: If omitted defaults to "case". Must be one of ["case"]. + :type value: str + """ + + allowed_values = { + "case", + } + CASE: ClassVar["CaseResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseResourceType.CASE = CaseResourceType("case") diff --git a/datadog_api_client/v2/model/case_response.py b/datadog_api_client/v2/model/case_response.py new file mode 100644 index 0000000000..c86de4ffa5 --- /dev/null +++ b/datadog_api_client/v2/model/case_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case import Case + +class CaseResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case import Case + return { + "data": (Case,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[Case, UnsetType]=unset, **kwargs): + """ + Case response + + :param data: A case + :type data: Case, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_sortable_field.py b/datadog_api_client/v2/model/case_sortable_field.py new file mode 100644 index 0000000000..ca6a2ca78e --- /dev/null +++ b/datadog_api_client/v2/model/case_sortable_field.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseSortableField(ModelSimple): + """ + Case field that can be sorted on + + :param value: Must be one of ["created_at", "priority", "status"]. + :type value: str + """ + + allowed_values = { + "created_at", + "priority", + "status", + } + CREATED_AT: ClassVar["CaseSortableField"] + PRIORITY: ClassVar["CaseSortableField"] + STATUS: ClassVar["CaseSortableField"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseSortableField.CREATED_AT = CaseSortableField("created_at") +CaseSortableField.PRIORITY = CaseSortableField("priority") +CaseSortableField.STATUS = CaseSortableField("status") diff --git a/datadog_api_client/v2/model/case_status.py b/datadog_api_client/v2/model/case_status.py new file mode 100644 index 0000000000..3ca68268bf --- /dev/null +++ b/datadog_api_client/v2/model/case_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseStatus(ModelSimple): + """ + Deprecated way of representing the case status, which only supports OPEN, IN_PROGRESS, and CLOSED statuses. Use `status_name` instead. + + :param value: Must be one of ["OPEN", "IN_PROGRESS", "CLOSED"]. + :type value: str + """ + + allowed_values = { + "OPEN", + "IN_PROGRESS", + "CLOSED", + } + OPEN: ClassVar["CaseStatus"] + IN_PROGRESS: ClassVar["CaseStatus"] + CLOSED: ClassVar["CaseStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseStatus.OPEN = CaseStatus("OPEN") +CaseStatus.IN_PROGRESS = CaseStatus("IN_PROGRESS") +CaseStatus.CLOSED = CaseStatus("CLOSED") diff --git a/datadog_api_client/v2/model/case_status_group.py b/datadog_api_client/v2/model/case_status_group.py new file mode 100644 index 0000000000..639feeb39c --- /dev/null +++ b/datadog_api_client/v2/model/case_status_group.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseStatusGroup(ModelSimple): + """ + Status group of the case. + + :param value: Must be one of ["SG_OPEN", "SG_IN_PROGRESS", "SG_CLOSED"]. + :type value: str + """ + + allowed_values = { + "SG_OPEN", + "SG_IN_PROGRESS", + "SG_CLOSED", + } + SG_OPEN: ClassVar["CaseStatusGroup"] + SG_IN_PROGRESS: ClassVar["CaseStatusGroup"] + SG_CLOSED: ClassVar["CaseStatusGroup"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseStatusGroup.SG_OPEN = CaseStatusGroup("SG_OPEN") +CaseStatusGroup.SG_IN_PROGRESS = CaseStatusGroup("SG_IN_PROGRESS") +CaseStatusGroup.SG_CLOSED = CaseStatusGroup("SG_CLOSED") diff --git a/datadog_api_client/v2/model/case_trigger.py b/datadog_api_client/v2/model/case_trigger.py new file mode 100644 index 0000000000..13962e848e --- /dev/null +++ b/datadog_api_client/v2/model/case_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + +class CaseTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + return { + "rate_limit": (TriggerRateLimit,), + } + attribute_map = { + "rate_limit": "rateLimit", + } + + def __init__(self_, rate_limit: Union[TriggerRateLimit, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from a Case. For automatic triggering a handle must be configured and the workflow must be published. + + :param rate_limit: Defines a rate limit for a trigger. + :type rate_limit: TriggerRateLimit, optional + """ + if rate_limit is not unset: + kwargs["rate_limit"] = rate_limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_trigger_wrapper.py b/datadog_api_client/v2/model/case_trigger_wrapper.py new file mode 100644 index 0000000000..2e407e6521 --- /dev/null +++ b/datadog_api_client/v2/model/case_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_trigger import CaseTrigger + +class CaseTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_trigger import CaseTrigger + return { + "case_trigger": (CaseTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "case_trigger": "caseTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, case_trigger: CaseTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Case-based trigger. + + :param case_trigger: Trigger a workflow from a Case. For automatic triggering a handle must be configured and the workflow must be published. + :type case_trigger: CaseTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.case_trigger = case_trigger diff --git a/datadog_api_client/v2/model/case_type.py b/datadog_api_client/v2/model/case_type.py new file mode 100644 index 0000000000..7683faddbb --- /dev/null +++ b/datadog_api_client/v2/model/case_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseType(ModelSimple): + """ + Case type + + :param value: If omitted defaults to "STANDARD". Must be one of ["STANDARD"]. + :type value: str + """ + + allowed_values = { + "STANDARD", + } + STANDARD: ClassVar["CaseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseType.STANDARD = CaseType("STANDARD") diff --git a/datadog_api_client/v2/model/case_type_create.py b/datadog_api_client/v2/model/case_type_create.py new file mode 100644 index 0000000000..ca0e7eeb7c --- /dev/null +++ b/datadog_api_client/v2/model/case_type_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_type_resource_attributes import CaseTypeResourceAttributes + from datadog_api_client.v2.model.case_type_resource_type import CaseTypeResourceType + +class CaseTypeCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_type_resource_attributes import CaseTypeResourceAttributes + from datadog_api_client.v2.model.case_type_resource_type import CaseTypeResourceType + return { + "attributes": (CaseTypeResourceAttributes,), + "type": (CaseTypeResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseTypeResourceAttributes, type: CaseTypeResourceType, **kwargs): + """ + Data object for creating a case type. + + :param attributes: Attributes of a case type, which define a classification category for cases. Organizations use case types to model different workflows (for example, Security Incident, Bug Report, Change Request). + :type attributes: CaseTypeResourceAttributes + + :param type: JSON:API resource type for case types. + :type type: CaseTypeResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_type_create_request.py b/datadog_api_client/v2/model/case_type_create_request.py new file mode 100644 index 0000000000..5a3b362117 --- /dev/null +++ b/datadog_api_client/v2/model/case_type_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_type_create import CaseTypeCreate + +class CaseTypeCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_type_create import CaseTypeCreate + return { + "data": (CaseTypeCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseTypeCreate, **kwargs): + """ + Request payload for creating a case type. + + :param data: Data object for creating a case type. + :type data: CaseTypeCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_type_resource.py b/datadog_api_client/v2/model/case_type_resource.py new file mode 100644 index 0000000000..93ce0b5497 --- /dev/null +++ b/datadog_api_client/v2/model/case_type_resource.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_type_resource_attributes import CaseTypeResourceAttributes + from datadog_api_client.v2.model.case_type_resource_type import CaseTypeResourceType + +class CaseTypeResource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_type_resource_attributes import CaseTypeResourceAttributes + from datadog_api_client.v2.model.case_type_resource_type import CaseTypeResourceType + return { + "attributes": (CaseTypeResourceAttributes,), + "id": (str,), + "type": (CaseTypeResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CaseTypeResourceAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CaseTypeResourceType, UnsetType]=unset, **kwargs): + """ + A case type that defines a classification category for cases. Each case type can have its own custom attributes, statuses, and automation rules. + + :param attributes: Attributes of a case type, which define a classification category for cases. Organizations use case types to model different workflows (for example, Security Incident, Bug Report, Change Request). + :type attributes: CaseTypeResourceAttributes, optional + + :param id: Case type's identifier + :type id: str, optional + + :param type: JSON:API resource type for case types. + :type type: CaseTypeResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_type_resource_attributes.py b/datadog_api_client/v2/model/case_type_resource_attributes.py new file mode 100644 index 0000000000..510d547083 --- /dev/null +++ b/datadog_api_client/v2/model/case_type_resource_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseTypeResourceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_at": (datetime, none_type), + "description": (str,), + "emoji": (str,), + "name": (str,), + } + attribute_map = { + "deleted_at": "deleted_at", + "description": "description", + "emoji": "emoji", + "name": "name", + } + read_only_vars = { + "deleted_at", + } + + def __init__(self_, name: str, deleted_at: Union[datetime, none_type, UnsetType]=unset, description: Union[str, UnsetType]=unset, emoji: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a case type, which define a classification category for cases. Organizations use case types to model different workflows (for example, Security Incident, Bug Report, Change Request). + + :param deleted_at: Timestamp when the case type was marked as deleted. A null value indicates the case type is active. + :type deleted_at: datetime, none_type, optional + + :param description: A detailed description explaining when this case type should be used. + :type description: str, optional + + :param emoji: An emoji icon representing the case type in the UI. + :type emoji: str, optional + + :param name: The display name of the case type, shown in the Case Management UI when creating or viewing cases. + :type name: str + """ + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if description is not unset: + kwargs["description"] = description + if emoji is not unset: + kwargs["emoji"] = emoji + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/case_type_resource_type.py b/datadog_api_client/v2/model/case_type_resource_type.py new file mode 100644 index 0000000000..bc7dfb67f4 --- /dev/null +++ b/datadog_api_client/v2/model/case_type_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseTypeResourceType(ModelSimple): + """ + JSON:API resource type for case types. + + :param value: If omitted defaults to "case_type". Must be one of ["case_type"]. + :type value: str + """ + + allowed_values = { + "case_type", + } + CASE_TYPE: ClassVar["CaseTypeResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseTypeResourceType.CASE_TYPE = CaseTypeResourceType("case_type") diff --git a/datadog_api_client/v2/model/case_type_response.py b/datadog_api_client/v2/model/case_type_response.py new file mode 100644 index 0000000000..8b9f634500 --- /dev/null +++ b/datadog_api_client/v2/model/case_type_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_type_resource import CaseTypeResource + +class CaseTypeResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_type_resource import CaseTypeResource + return { + "data": (CaseTypeResource,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CaseTypeResource, UnsetType]=unset, **kwargs): + """ + Response containing a single case type. + + :param data: A case type that defines a classification category for cases. Each case type can have its own custom attributes, statuses, and automation rules. + :type data: CaseTypeResource, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_type_update.py b/datadog_api_client/v2/model/case_type_update.py new file mode 100644 index 0000000000..c0a45e5722 --- /dev/null +++ b/datadog_api_client/v2/model/case_type_update.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_type_resource_attributes import CaseTypeResourceAttributes + from datadog_api_client.v2.model.case_type_resource_type import CaseTypeResourceType + +class CaseTypeUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_type_resource_attributes import CaseTypeResourceAttributes + from datadog_api_client.v2.model.case_type_resource_type import CaseTypeResourceType + return { + "attributes": (CaseTypeResourceAttributes,), + "type": (CaseTypeResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: CaseTypeResourceType, attributes: Union[CaseTypeResourceAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating a case type. + + :param attributes: Attributes of a case type, which define a classification category for cases. Organizations use case types to model different workflows (for example, Security Incident, Bug Report, Change Request). + :type attributes: CaseTypeResourceAttributes, optional + + :param type: JSON:API resource type for case types. + :type type: CaseTypeResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/case_type_update_request.py b/datadog_api_client/v2/model/case_type_update_request.py new file mode 100644 index 0000000000..fc48b2ea8c --- /dev/null +++ b/datadog_api_client/v2/model/case_type_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_type_update import CaseTypeUpdate + +class CaseTypeUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_type_update import CaseTypeUpdate + return { + "data": (CaseTypeUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseTypeUpdate, **kwargs): + """ + Request payload for updating a case type. + + :param data: Data object for updating a case type. + :type data: CaseTypeUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_types_response.py b/datadog_api_client/v2/model/case_types_response.py new file mode 100644 index 0000000000..a0f86018a3 --- /dev/null +++ b/datadog_api_client/v2/model/case_types_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_type_resource import CaseTypeResource + +class CaseTypesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_type_resource import CaseTypeResource + return { + "data": ([CaseTypeResource],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[CaseTypeResource], UnsetType]=unset, **kwargs): + """ + Response containing a list of case types. + + :param data: List of case types + :type data: [CaseTypeResource], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_update_attributes.py b/datadog_api_client/v2/model/case_update_attributes.py new file mode 100644 index 0000000000..c3e13036b8 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_attributes_attributes import CaseUpdateAttributesAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_attributes_attributes import CaseUpdateAttributesAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseUpdateAttributesAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseUpdateAttributesAttributes, type: CaseResourceType, **kwargs): + """ + Case update attributes + + :param attributes: Case update attributes attributes + :type attributes: CaseUpdateAttributesAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_update_attributes_attributes.py b/datadog_api_client/v2/model/case_update_attributes_attributes.py new file mode 100644 index 0000000000..46efd2281e --- /dev/null +++ b/datadog_api_client/v2/model/case_update_attributes_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_object_attributes import CaseObjectAttributes + +class CaseUpdateAttributesAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_object_attributes import CaseObjectAttributes + return { + "attributes": (CaseObjectAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: CaseObjectAttributes, **kwargs): + """ + Case update attributes attributes + + :param attributes: Key-value pairs of case attributes. Each key maps to an array of string values, used for flexible metadata such as labels or tags. + :type attributes: CaseObjectAttributes + """ + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/case_update_attributes_request.py b/datadog_api_client/v2/model/case_update_attributes_request.py new file mode 100644 index 0000000000..0096469494 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_attributes_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_attributes import CaseUpdateAttributes + +class CaseUpdateAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_attributes import CaseUpdateAttributes + return { + "data": (CaseUpdateAttributes,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseUpdateAttributes, **kwargs): + """ + Case update attributes request + + :param data: Case update attributes + :type data: CaseUpdateAttributes + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_update_comment.py b/datadog_api_client/v2/model/case_update_comment.py new file mode 100644 index 0000000000..5fa11c08a7 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_comment.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_comment_attributes import CaseUpdateCommentAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseUpdateComment(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_comment_attributes import CaseUpdateCommentAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseUpdateCommentAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseUpdateCommentAttributes, type: CaseResourceType, **kwargs): + """ + Data object for updating a case comment. + + :param attributes: Attributes for updating a comment. + :type attributes: CaseUpdateCommentAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_update_comment_attributes.py b/datadog_api_client/v2/model/case_update_comment_attributes.py new file mode 100644 index 0000000000..aecf49a06f --- /dev/null +++ b/datadog_api_client/v2/model/case_update_comment_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseUpdateCommentAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "comment": (str,), + } + attribute_map = { + "comment": "comment", + } + + def __init__(self_, comment: str, **kwargs): + """ + Attributes for updating a comment. + + :param comment: The updated comment message. + :type comment: str + """ + super().__init__(kwargs) + + + self_.comment = comment diff --git a/datadog_api_client/v2/model/case_update_comment_request.py b/datadog_api_client/v2/model/case_update_comment_request.py new file mode 100644 index 0000000000..aa0d30d52f --- /dev/null +++ b/datadog_api_client/v2/model/case_update_comment_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_comment import CaseUpdateComment + +class CaseUpdateCommentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_comment import CaseUpdateComment + return { + "data": (CaseUpdateComment,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseUpdateComment, **kwargs): + """ + Request payload for updating a comment on a case timeline. + + :param data: Data object for updating a case comment. + :type data: CaseUpdateComment + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_update_custom_attribute.py b/datadog_api_client/v2/model/case_update_custom_attribute.py new file mode 100644 index 0000000000..2600bf83d1 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_custom_attribute.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_value import CustomAttributeValue + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseUpdateCustomAttribute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_value import CustomAttributeValue + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CustomAttributeValue,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CustomAttributeValue, type: CaseResourceType, **kwargs): + """ + Case update custom attribute + + :param attributes: A typed value for a custom attribute on a specific case. + :type attributes: CustomAttributeValue + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_update_custom_attribute_request.py b/datadog_api_client/v2/model/case_update_custom_attribute_request.py new file mode 100644 index 0000000000..54f86f3a7b --- /dev/null +++ b/datadog_api_client/v2/model/case_update_custom_attribute_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_custom_attribute import CaseUpdateCustomAttribute + +class CaseUpdateCustomAttributeRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_custom_attribute import CaseUpdateCustomAttribute + return { + "data": (CaseUpdateCustomAttribute,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseUpdateCustomAttribute, **kwargs): + """ + Case update custom attribute request + + :param data: Case update custom attribute + :type data: CaseUpdateCustomAttribute + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_update_description.py b/datadog_api_client/v2/model/case_update_description.py new file mode 100644 index 0000000000..81043e97ad --- /dev/null +++ b/datadog_api_client/v2/model/case_update_description.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_description_attributes import CaseUpdateDescriptionAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseUpdateDescription(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_description_attributes import CaseUpdateDescriptionAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseUpdateDescriptionAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseUpdateDescriptionAttributes, type: CaseResourceType, **kwargs): + """ + Case update description + + :param attributes: Case update description attributes + :type attributes: CaseUpdateDescriptionAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_update_description_attributes.py b/datadog_api_client/v2/model/case_update_description_attributes.py new file mode 100644 index 0000000000..af55c0093f --- /dev/null +++ b/datadog_api_client/v2/model/case_update_description_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseUpdateDescriptionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + } + attribute_map = { + "description": "description", + } + + def __init__(self_, description: str, **kwargs): + """ + Case update description attributes + + :param description: Case new description + :type description: str + """ + super().__init__(kwargs) + + + self_.description = description diff --git a/datadog_api_client/v2/model/case_update_description_request.py b/datadog_api_client/v2/model/case_update_description_request.py new file mode 100644 index 0000000000..99a6c6cfe8 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_description_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_description import CaseUpdateDescription + +class CaseUpdateDescriptionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_description import CaseUpdateDescription + return { + "data": (CaseUpdateDescription,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseUpdateDescription, **kwargs): + """ + Case update description request + + :param data: Case update description + :type data: CaseUpdateDescription + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_update_due_date.py b/datadog_api_client/v2/model/case_update_due_date.py new file mode 100644 index 0000000000..df1fe4c67a --- /dev/null +++ b/datadog_api_client/v2/model/case_update_due_date.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_due_date_attributes import CaseUpdateDueDateAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseUpdateDueDate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_due_date_attributes import CaseUpdateDueDateAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseUpdateDueDateAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseUpdateDueDateAttributes, type: CaseResourceType, **kwargs): + """ + Data object for updating a case's due date. + + :param attributes: Attributes for setting or clearing a case's due date. + :type attributes: CaseUpdateDueDateAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_update_due_date_attributes.py b/datadog_api_client/v2/model/case_update_due_date_attributes.py new file mode 100644 index 0000000000..23d72dde20 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_due_date_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseUpdateDueDateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "due_date": (str,), + } + attribute_map = { + "due_date": "due_date", + } + + def __init__(self_, due_date: str, **kwargs): + """ + Attributes for setting or clearing a case's due date. + + :param due_date: The target resolution date for the case, in ``YYYY-MM-DD`` format. Set to ``null`` to clear the due date. + :type due_date: str + """ + super().__init__(kwargs) + + + self_.due_date = due_date diff --git a/datadog_api_client/v2/model/case_update_due_date_request.py b/datadog_api_client/v2/model/case_update_due_date_request.py new file mode 100644 index 0000000000..1c6ce86b32 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_due_date_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_due_date import CaseUpdateDueDate + +class CaseUpdateDueDateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_due_date import CaseUpdateDueDate + return { + "data": (CaseUpdateDueDate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseUpdateDueDate, **kwargs): + """ + Request payload for updating a case's due date. + + :param data: Data object for updating a case's due date. + :type data: CaseUpdateDueDate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_update_priority.py b/datadog_api_client/v2/model/case_update_priority.py new file mode 100644 index 0000000000..98da6f6a13 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_priority.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_priority_attributes import CaseUpdatePriorityAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseUpdatePriority(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_priority_attributes import CaseUpdatePriorityAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseUpdatePriorityAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseUpdatePriorityAttributes, type: CaseResourceType, **kwargs): + """ + Case priority status + + :param attributes: Case update priority attributes + :type attributes: CaseUpdatePriorityAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_update_priority_attributes.py b/datadog_api_client/v2/model/case_update_priority_attributes.py new file mode 100644 index 0000000000..8c44e4b842 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_priority_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_priority import CasePriority + +class CaseUpdatePriorityAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_priority import CasePriority + return { + "priority": (CasePriority,), + } + attribute_map = { + "priority": "priority", + } + + def __init__(self_, priority: CasePriority, **kwargs): + """ + Case update priority attributes + + :param priority: Case priority + :type priority: CasePriority + """ + super().__init__(kwargs) + + + self_.priority = priority diff --git a/datadog_api_client/v2/model/case_update_priority_request.py b/datadog_api_client/v2/model/case_update_priority_request.py new file mode 100644 index 0000000000..6159ee9842 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_priority_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_priority import CaseUpdatePriority + +class CaseUpdatePriorityRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_priority import CaseUpdatePriority + return { + "data": (CaseUpdatePriority,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseUpdatePriority, **kwargs): + """ + Case update priority request + + :param data: Case priority status + :type data: CaseUpdatePriority + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_update_resolved_reason.py b/datadog_api_client/v2/model/case_update_resolved_reason.py new file mode 100644 index 0000000000..da05288b2a --- /dev/null +++ b/datadog_api_client/v2/model/case_update_resolved_reason.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_resolved_reason_attributes import CaseUpdateResolvedReasonAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseUpdateResolvedReason(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_resolved_reason_attributes import CaseUpdateResolvedReasonAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseUpdateResolvedReasonAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseUpdateResolvedReasonAttributes, type: CaseResourceType, **kwargs): + """ + Data object for updating a case's resolved reason. + + :param attributes: Attributes for setting the resolution reason on a security case. + :type attributes: CaseUpdateResolvedReasonAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_update_resolved_reason_attributes.py b/datadog_api_client/v2/model/case_update_resolved_reason_attributes.py new file mode 100644 index 0000000000..b02738fc7d --- /dev/null +++ b/datadog_api_client/v2/model/case_update_resolved_reason_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseUpdateResolvedReasonAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "security_resolved_reason": (str,), + } + attribute_map = { + "security_resolved_reason": "security_resolved_reason", + } + + def __init__(self_, security_resolved_reason: str, **kwargs): + """ + Attributes for setting the resolution reason on a security case. + + :param security_resolved_reason: The reason the security case was resolved (for example, ``FALSE_POSITIVE`` , ``TRUE_POSITIVE`` , ``BENIGN_POSITIVE`` ). + :type security_resolved_reason: str + """ + super().__init__(kwargs) + + + self_.security_resolved_reason = security_resolved_reason diff --git a/datadog_api_client/v2/model/case_update_resolved_reason_request.py b/datadog_api_client/v2/model/case_update_resolved_reason_request.py new file mode 100644 index 0000000000..51649c1c93 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_resolved_reason_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_resolved_reason import CaseUpdateResolvedReason + +class CaseUpdateResolvedReasonRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_resolved_reason import CaseUpdateResolvedReason + return { + "data": (CaseUpdateResolvedReason,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseUpdateResolvedReason, **kwargs): + """ + Request payload for updating the resolution reason on a closed security case. + + :param data: Data object for updating a case's resolved reason. + :type data: CaseUpdateResolvedReason + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_update_status.py b/datadog_api_client/v2/model/case_update_status.py new file mode 100644 index 0000000000..e94478fd31 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_status.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_status_attributes import CaseUpdateStatusAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseUpdateStatus(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_status_attributes import CaseUpdateStatusAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseUpdateStatusAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseUpdateStatusAttributes, type: CaseResourceType, **kwargs): + """ + Case update status + + :param attributes: Case update status attributes + :type attributes: CaseUpdateStatusAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_update_status_attributes.py b/datadog_api_client/v2/model/case_update_status_attributes.py new file mode 100644 index 0000000000..bd807194ac --- /dev/null +++ b/datadog_api_client/v2/model/case_update_status_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_status import CaseStatus + +class CaseUpdateStatusAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_status import CaseStatus + return { + "status": (CaseStatus,), + "status_name": (str,), + } + attribute_map = { + "status": "status", + "status_name": "status_name", + } + + def __init__(self_, status: Union[CaseStatus, UnsetType]=unset, status_name: Union[str, UnsetType]=unset, **kwargs): + """ + Case update status attributes + + :param status: Deprecated way of representing the case status, which only supports OPEN, IN_PROGRESS, and CLOSED statuses. Use ``status_name`` instead. **Deprecated**. + :type status: CaseStatus, optional + + :param status_name: Status of the case. Must be one of the existing statuses for the case's type. + :type status_name: str, optional + """ + if status is not unset: + kwargs["status"] = status + if status_name is not unset: + kwargs["status_name"] = status_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_update_status_request.py b/datadog_api_client/v2/model/case_update_status_request.py new file mode 100644 index 0000000000..ab8146d2b1 --- /dev/null +++ b/datadog_api_client/v2/model/case_update_status_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_status import CaseUpdateStatus + +class CaseUpdateStatusRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_status import CaseUpdateStatus + return { + "data": (CaseUpdateStatus,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseUpdateStatus, **kwargs): + """ + Case update status request + + :param data: Case update status + :type data: CaseUpdateStatus + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_update_title.py b/datadog_api_client/v2/model/case_update_title.py new file mode 100644 index 0000000000..06562a120e --- /dev/null +++ b/datadog_api_client/v2/model/case_update_title.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_title_attributes import CaseUpdateTitleAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + +class CaseUpdateTitle(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_title_attributes import CaseUpdateTitleAttributes + from datadog_api_client.v2.model.case_resource_type import CaseResourceType + return { + "attributes": (CaseUpdateTitleAttributes,), + "type": (CaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseUpdateTitleAttributes, type: CaseResourceType, **kwargs): + """ + Case update title + + :param attributes: Case update title attributes + :type attributes: CaseUpdateTitleAttributes + + :param type: JSON:API resource type for cases. + :type type: CaseResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_update_title_attributes.py b/datadog_api_client/v2/model/case_update_title_attributes.py new file mode 100644 index 0000000000..5d5bedf5af --- /dev/null +++ b/datadog_api_client/v2/model/case_update_title_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseUpdateTitleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "title": (str,), + } + attribute_map = { + "title": "title", + } + + def __init__(self_, title: str, **kwargs): + """ + Case update title attributes + + :param title: Case new title + :type title: str + """ + super().__init__(kwargs) + + + self_.title = title diff --git a/datadog_api_client/v2/model/case_update_title_request.py b/datadog_api_client/v2/model/case_update_title_request.py new file mode 100644 index 0000000000..3ec4ca4cbc --- /dev/null +++ b/datadog_api_client/v2/model/case_update_title_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_update_title import CaseUpdateTitle + +class CaseUpdateTitleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_update_title import CaseUpdateTitle + return { + "data": (CaseUpdateTitle,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseUpdateTitle, **kwargs): + """ + Case update title request + + :param data: Case update title + :type data: CaseUpdateTitle + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_view.py b/datadog_api_client/v2/model/case_view.py new file mode 100644 index 0000000000..b2ad375fcc --- /dev/null +++ b/datadog_api_client/v2/model/case_view.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_view_attributes import CaseViewAttributes + from datadog_api_client.v2.model.case_view_relationships import CaseViewRelationships + from datadog_api_client.v2.model.case_view_resource_type import CaseViewResourceType + +class CaseView(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_view_attributes import CaseViewAttributes + from datadog_api_client.v2.model.case_view_relationships import CaseViewRelationships + from datadog_api_client.v2.model.case_view_resource_type import CaseViewResourceType + return { + "attributes": (CaseViewAttributes,), + "id": (str,), + "relationships": (CaseViewRelationships,), + "type": (CaseViewResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: CaseViewAttributes, id: str, type: CaseViewResourceType, relationships: Union[CaseViewRelationships, UnsetType]=unset, **kwargs): + """ + A saved case view that provides a filtered, reusable list of cases matching a specific query. Views act as persistent dashboards for monitoring case subsets. + + :param attributes: Attributes of a case view, including the filter query and optional notification rule. + :type attributes: CaseViewAttributes + + :param id: The view's identifier. + :type id: str + + :param relationships: Related resources for the case view, including the creator, last modifier, and associated project. + :type relationships: CaseViewRelationships, optional + + :param type: JSON:API resource type for case views. + :type type: CaseViewResourceType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/case_view_attributes.py b/datadog_api_client/v2/model/case_view_attributes.py new file mode 100644 index 0000000000..f4e1d0630d --- /dev/null +++ b/datadog_api_client/v2/model/case_view_attributes.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseViewAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "modified_at": (datetime,), + "name": (str,), + "np_rule_id": (str,), + "query": (str,), + } + attribute_map = { + "created_at": "created_at", + "modified_at": "modified_at", + "name": "name", + "np_rule_id": "np_rule_id", + "query": "query", + } + read_only_vars = { + "created_at", + "modified_at", + } + + def __init__(self_, created_at: datetime, name: str, query: str, modified_at: Union[datetime, UnsetType]=unset, np_rule_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a case view, including the filter query and optional notification rule. + + :param created_at: Timestamp when the view was created. + :type created_at: datetime + + :param modified_at: Timestamp when the view was last modified. + :type modified_at: datetime, optional + + :param name: A human-readable name for the view, displayed in the Case Management UI. + :type name: str + + :param np_rule_id: The identifier of a notification rule linked to this view. When set, users subscribed to the view receive alerts for matching cases. + :type np_rule_id: str, optional + + :param query: The search query that determines which cases appear in this view. Uses the same syntax as the Case Management search bar (for example, ``status:open priority:P1`` ). + :type query: str + """ + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if np_rule_id is not unset: + kwargs["np_rule_id"] = np_rule_id + super().__init__(kwargs) + + + self_.created_at = created_at + self_.name = name + self_.query = query diff --git a/datadog_api_client/v2/model/case_view_create.py b/datadog_api_client/v2/model/case_view_create.py new file mode 100644 index 0000000000..9fee04134c --- /dev/null +++ b/datadog_api_client/v2/model/case_view_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_view_create_attributes import CaseViewCreateAttributes + from datadog_api_client.v2.model.case_view_resource_type import CaseViewResourceType + +class CaseViewCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_view_create_attributes import CaseViewCreateAttributes + from datadog_api_client.v2.model.case_view_resource_type import CaseViewResourceType + return { + "attributes": (CaseViewCreateAttributes,), + "type": (CaseViewResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CaseViewCreateAttributes, type: CaseViewResourceType, **kwargs): + """ + Data object for creating a case view. + + :param attributes: Attributes required to create a case view. + :type attributes: CaseViewCreateAttributes + + :param type: JSON:API resource type for case views. + :type type: CaseViewResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/case_view_create_attributes.py b/datadog_api_client/v2/model/case_view_create_attributes.py new file mode 100644 index 0000000000..0ac767d3b3 --- /dev/null +++ b/datadog_api_client/v2/model/case_view_create_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseViewCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "np_rule_id": (str,), + "project_id": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "np_rule_id": "np_rule_id", + "project_id": "project_id", + "query": "query", + } + + def __init__(self_, name: str, project_id: str, query: str, np_rule_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes required to create a case view. + + :param name: The name of the view. + :type name: str + + :param np_rule_id: The identifier of a notification rule linked to this view. When set, users subscribed to the view receive alerts for matching cases. + :type np_rule_id: str, optional + + :param project_id: The UUID of the project this view belongs to. Views are scoped to a single project. + :type project_id: str + + :param query: The query used to filter cases in this view. + :type query: str + """ + if np_rule_id is not unset: + kwargs["np_rule_id"] = np_rule_id + super().__init__(kwargs) + + + self_.name = name + self_.project_id = project_id + self_.query = query diff --git a/datadog_api_client/v2/model/case_view_create_request.py b/datadog_api_client/v2/model/case_view_create_request.py new file mode 100644 index 0000000000..4e95030013 --- /dev/null +++ b/datadog_api_client/v2/model/case_view_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_view_create import CaseViewCreate + +class CaseViewCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_view_create import CaseViewCreate + return { + "data": (CaseViewCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseViewCreate, **kwargs): + """ + Request payload for creating a case view. + + :param data: Data object for creating a case view. + :type data: CaseViewCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_view_relationships.py b/datadog_api_client/v2/model/case_view_relationships.py new file mode 100644 index 0000000000..1c74d8598e --- /dev/null +++ b/datadog_api_client/v2/model/case_view_relationships.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + from datadog_api_client.v2.model.project_relationship import ProjectRelationship + +class CaseViewRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + from datadog_api_client.v2.model.project_relationship import ProjectRelationship + return { + "created_by": (NullableUserRelationship,), + "modified_by": (NullableUserRelationship,), + "project": (ProjectRelationship,), + } + attribute_map = { + "created_by": "created_by", + "modified_by": "modified_by", + "project": "project", + } + + def __init__(self_, created_by: Union[NullableUserRelationship, none_type, UnsetType]=unset, modified_by: Union[NullableUserRelationship, none_type, UnsetType]=unset, project: Union[ProjectRelationship, UnsetType]=unset, **kwargs): + """ + Related resources for the case view, including the creator, last modifier, and associated project. + + :param created_by: Relationship to user. + :type created_by: NullableUserRelationship, none_type, optional + + :param modified_by: Relationship to user. + :type modified_by: NullableUserRelationship, none_type, optional + + :param project: Relationship to project. + :type project: ProjectRelationship, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if modified_by is not unset: + kwargs["modified_by"] = modified_by + if project is not unset: + kwargs["project"] = project + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_view_resource_type.py b/datadog_api_client/v2/model/case_view_resource_type.py new file mode 100644 index 0000000000..aa002e1cfe --- /dev/null +++ b/datadog_api_client/v2/model/case_view_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseViewResourceType(ModelSimple): + """ + JSON:API resource type for case views. + + :param value: If omitted defaults to "view". Must be one of ["view"]. + :type value: str + """ + + allowed_values = { + "view", + } + VIEW: ClassVar["CaseViewResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseViewResourceType.VIEW = CaseViewResourceType("view") diff --git a/datadog_api_client/v2/model/case_view_response.py b/datadog_api_client/v2/model/case_view_response.py new file mode 100644 index 0000000000..efefc1b8bf --- /dev/null +++ b/datadog_api_client/v2/model/case_view_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_view import CaseView + +class CaseViewResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_view import CaseView + return { + "data": (CaseView,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseView, **kwargs): + """ + Response containing a single case view. + + :param data: A saved case view that provides a filtered, reusable list of cases matching a specific query. Views act as persistent dashboards for monitoring case subsets. + :type data: CaseView + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_view_update.py b/datadog_api_client/v2/model/case_view_update.py new file mode 100644 index 0000000000..5508c29ffc --- /dev/null +++ b/datadog_api_client/v2/model/case_view_update.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_view_update_attributes import CaseViewUpdateAttributes + from datadog_api_client.v2.model.case_view_resource_type import CaseViewResourceType + +class CaseViewUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_view_update_attributes import CaseViewUpdateAttributes + from datadog_api_client.v2.model.case_view_resource_type import CaseViewResourceType + return { + "attributes": (CaseViewUpdateAttributes,), + "type": (CaseViewResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: CaseViewResourceType, attributes: Union[CaseViewUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating a case view. + + :param attributes: Attributes that can be updated on a case view. All fields are optional; only provided fields are changed. + :type attributes: CaseViewUpdateAttributes, optional + + :param type: JSON:API resource type for case views. + :type type: CaseViewResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/case_view_update_attributes.py b/datadog_api_client/v2/model/case_view_update_attributes.py new file mode 100644 index 0000000000..20fb253c48 --- /dev/null +++ b/datadog_api_client/v2/model/case_view_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CaseViewUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "np_rule_id": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "np_rule_id": "np_rule_id", + "query": "query", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, np_rule_id: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes that can be updated on a case view. All fields are optional; only provided fields are changed. + + :param name: The name of the view. + :type name: str, optional + + :param np_rule_id: The identifier of a notification rule linked to this view. When set, users subscribed to the view receive alerts for matching cases. + :type np_rule_id: str, optional + + :param query: The query used to filter cases in this view. + :type query: str, optional + """ + if name is not unset: + kwargs["name"] = name + if np_rule_id is not unset: + kwargs["np_rule_id"] = np_rule_id + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/case_view_update_request.py b/datadog_api_client/v2/model/case_view_update_request.py new file mode 100644 index 0000000000..f44d22cf08 --- /dev/null +++ b/datadog_api_client/v2/model/case_view_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_view_update import CaseViewUpdate + +class CaseViewUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_view_update import CaseViewUpdate + return { + "data": (CaseViewUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CaseViewUpdate, **kwargs): + """ + Request payload for updating a case view. + + :param data: Data object for updating a case view. + :type data: CaseViewUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_views_response.py b/datadog_api_client/v2/model/case_views_response.py new file mode 100644 index 0000000000..860eeac1af --- /dev/null +++ b/datadog_api_client/v2/model/case_views_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_view import CaseView + +class CaseViewsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_view import CaseView + return { + "data": ([CaseView],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CaseView], **kwargs): + """ + Response containing a list of case views. + + :param data: A list of case views. + :type data: [CaseView] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_watcher.py b/datadog_api_client/v2/model/case_watcher.py new file mode 100644 index 0000000000..ff4c4a84f1 --- /dev/null +++ b/datadog_api_client/v2/model/case_watcher.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_watcher_relationships import CaseWatcherRelationships + from datadog_api_client.v2.model.case_watcher_resource_type import CaseWatcherResourceType + +class CaseWatcher(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_watcher_relationships import CaseWatcherRelationships + from datadog_api_client.v2.model.case_watcher_resource_type import CaseWatcherResourceType + return { + "id": (str,), + "relationships": (CaseWatcherRelationships,), + "type": (CaseWatcherResourceType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, relationships: CaseWatcherRelationships, type: CaseWatcherResourceType, **kwargs): + """ + Represents a user who is subscribed to notifications for a case. Watchers receive updates when the case's status, priority, assignee, or comments change. + + :param id: The primary identifier of the case watcher. + :type id: str + + :param relationships: Relationships for a case watcher, linking to the underlying user resource. + :type relationships: CaseWatcherRelationships + + :param type: JSON:API resource type for case watchers. + :type type: CaseWatcherResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/case_watcher_relationships.py b/datadog_api_client/v2/model/case_watcher_relationships.py new file mode 100644 index 0000000000..cf5e90088e --- /dev/null +++ b/datadog_api_client/v2/model/case_watcher_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_watcher_user_relationship import CaseWatcherUserRelationship + +class CaseWatcherRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_watcher_user_relationship import CaseWatcherUserRelationship + return { + "user": (CaseWatcherUserRelationship,), + } + attribute_map = { + "user": "user", + } + + def __init__(self_, user: CaseWatcherUserRelationship, **kwargs): + """ + Relationships for a case watcher, linking to the underlying user resource. + + :param user: The user relationship for a case watcher. + :type user: CaseWatcherUserRelationship + """ + super().__init__(kwargs) + + + self_.user = user diff --git a/datadog_api_client/v2/model/case_watcher_resource_type.py b/datadog_api_client/v2/model/case_watcher_resource_type.py new file mode 100644 index 0000000000..b3c00c1da8 --- /dev/null +++ b/datadog_api_client/v2/model/case_watcher_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CaseWatcherResourceType(ModelSimple): + """ + JSON:API resource type for case watchers. + + :param value: If omitted defaults to "watcher". Must be one of ["watcher"]. + :type value: str + """ + + allowed_values = { + "watcher", + } + WATCHER: ClassVar["CaseWatcherResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CaseWatcherResourceType.WATCHER = CaseWatcherResourceType("watcher") diff --git a/datadog_api_client/v2/model/case_watcher_user_relationship.py b/datadog_api_client/v2/model/case_watcher_user_relationship.py new file mode 100644 index 0000000000..af7e7276b7 --- /dev/null +++ b/datadog_api_client/v2/model/case_watcher_user_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_relationship_data import UserRelationshipData + +class CaseWatcherUserRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_relationship_data import UserRelationshipData + return { + "data": (UserRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UserRelationshipData, **kwargs): + """ + The user relationship for a case watcher. + + :param data: Relationship to user object. + :type data: UserRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/case_watchers_response.py b/datadog_api_client/v2/model/case_watchers_response.py new file mode 100644 index 0000000000..b398c3137e --- /dev/null +++ b/datadog_api_client/v2/model/case_watchers_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_watcher import CaseWatcher + +class CaseWatchersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_watcher import CaseWatcher + return { + "data": ([CaseWatcher],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CaseWatcher], **kwargs): + """ + Response containing the list of users watching a case. + + :param data: List of case watchers. + :type data: [CaseWatcher] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cases_response.py b/datadog_api_client/v2/model/cases_response.py new file mode 100644 index 0000000000..9e97f27df1 --- /dev/null +++ b/datadog_api_client/v2/model/cases_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case import Case + from datadog_api_client.v2.model.cases_response_meta import CasesResponseMeta + +class CasesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case import Case + from datadog_api_client.v2.model.cases_response_meta import CasesResponseMeta + return { + "data": ([Case],), + "meta": (CasesResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[Case], UnsetType]=unset, meta: Union[CasesResponseMeta, UnsetType]=unset, **kwargs): + """ + Response with cases + + :param data: Cases response data + :type data: [Case], optional + + :param meta: Cases response metadata + :type meta: CasesResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cases_response_meta.py b/datadog_api_client/v2/model/cases_response_meta.py new file mode 100644 index 0000000000..62cb6bd729 --- /dev/null +++ b/datadog_api_client/v2/model/cases_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cases_response_meta_pagination import CasesResponseMetaPagination + +class CasesResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cases_response_meta_pagination import CasesResponseMetaPagination + return { + "page": (CasesResponseMetaPagination,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[CasesResponseMetaPagination, UnsetType]=unset, **kwargs): + """ + Cases response metadata + + :param page: Pagination metadata + :type page: CasesResponseMetaPagination, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cases_response_meta_pagination.py b/datadog_api_client/v2/model/cases_response_meta_pagination.py new file mode 100644 index 0000000000..7b6b252dd6 --- /dev/null +++ b/datadog_api_client/v2/model/cases_response_meta_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CasesResponseMetaPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "current": (int,), + "size": (int,), + "total": (int,), + } + attribute_map = { + "current": "current", + "size": "size", + "total": "total", + } + + def __init__(self_, current: Union[int, UnsetType]=unset, size: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata + + :param current: Current page number + :type current: int, optional + + :param size: Number of cases in current page + :type size: int, optional + + :param total: Total number of pages + :type total: int, optional + """ + if current is not unset: + kwargs["current"] = current + if size is not unset: + kwargs["size"] = size + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_event_attributes.py b/datadog_api_client/v2/model/change_event_attributes.py new file mode 100644 index 0000000000..a811818feb --- /dev/null +++ b/datadog_api_client/v2/model/change_event_attributes.py @@ -0,0 +1,125 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_event_attributes_author import ChangeEventAttributesAuthor + from datadog_api_client.v2.model.change_event_attributes_changed_resource import ChangeEventAttributesChangedResource + from datadog_api_client.v2.model.event_system_attributes import EventSystemAttributes + from datadog_api_client.v2.model.change_event_attributes_impacted_resources_item import ChangeEventAttributesImpactedResourcesItem + +class ChangeEventAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_event_attributes_author import ChangeEventAttributesAuthor + from datadog_api_client.v2.model.change_event_attributes_changed_resource import ChangeEventAttributesChangedResource + from datadog_api_client.v2.model.event_system_attributes import EventSystemAttributes + from datadog_api_client.v2.model.change_event_attributes_impacted_resources_item import ChangeEventAttributesImpactedResourcesItem + return { + "aggregation_key": (str,), + "author": (ChangeEventAttributesAuthor,), + "change_metadata": (dict,), + "changed_resource": (ChangeEventAttributesChangedResource,), + "evt": (EventSystemAttributes,), + "impacted_resources": ([ChangeEventAttributesImpactedResourcesItem],), + "new_value": (dict,), + "prev_value": (dict,), + "service": (str,), + "timestamp": (int,), + "title": (str,), + } + attribute_map = { + "aggregation_key": "aggregation_key", + "author": "author", + "change_metadata": "change_metadata", + "changed_resource": "changed_resource", + "evt": "evt", + "impacted_resources": "impacted_resources", + "new_value": "new_value", + "prev_value": "prev_value", + "service": "service", + "timestamp": "timestamp", + "title": "title", + } + + def __init__(self_, aggregation_key: Union[str, UnsetType]=unset, author: Union[ChangeEventAttributesAuthor, UnsetType]=unset, change_metadata: Union[dict, UnsetType]=unset, changed_resource: Union[ChangeEventAttributesChangedResource, UnsetType]=unset, evt: Union[EventSystemAttributes, UnsetType]=unset, impacted_resources: Union[List[ChangeEventAttributesImpactedResourcesItem], UnsetType]=unset, new_value: Union[dict, UnsetType]=unset, prev_value: Union[dict, UnsetType]=unset, service: Union[str, UnsetType]=unset, timestamp: Union[int, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Change event attributes. + + :param aggregation_key: Aggregation key of the event. + :type aggregation_key: str, optional + + :param author: The entity that made the change. + :type author: ChangeEventAttributesAuthor, optional + + :param change_metadata: JSON object of change metadata. + :type change_metadata: dict, optional + + :param changed_resource: A uniquely identified resource. + :type changed_resource: ChangeEventAttributesChangedResource, optional + + :param evt: JSON object of event system attributes. + :type evt: EventSystemAttributes, optional + + :param impacted_resources: A list of resources impacted by this change. + :type impacted_resources: [ChangeEventAttributesImpactedResourcesItem], optional + + :param new_value: The new state of the changed resource. + :type new_value: dict, optional + + :param prev_value: The previous state of the changed resource. + :type prev_value: dict, optional + + :param service: Service that triggered the event. + :type service: str, optional + + :param timestamp: POSIX timestamp of the event. + :type timestamp: int, optional + + :param title: The title of the event. + :type title: str, optional + """ + if aggregation_key is not unset: + kwargs["aggregation_key"] = aggregation_key + if author is not unset: + kwargs["author"] = author + if change_metadata is not unset: + kwargs["change_metadata"] = change_metadata + if changed_resource is not unset: + kwargs["changed_resource"] = changed_resource + if evt is not unset: + kwargs["evt"] = evt + if impacted_resources is not unset: + kwargs["impacted_resources"] = impacted_resources + if new_value is not unset: + kwargs["new_value"] = new_value + if prev_value is not unset: + kwargs["prev_value"] = prev_value + if service is not unset: + kwargs["service"] = service + if timestamp is not unset: + kwargs["timestamp"] = timestamp + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_event_attributes_author.py b/datadog_api_client/v2/model/change_event_attributes_author.py new file mode 100644 index 0000000000..d2873df2f2 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_attributes_author.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_event_attributes_author_type import ChangeEventAttributesAuthorType + +class ChangeEventAttributesAuthor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_event_attributes_author_type import ChangeEventAttributesAuthorType + return { + "name": (str,), + "type": (ChangeEventAttributesAuthorType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, type: Union[ChangeEventAttributesAuthorType, UnsetType]=unset, **kwargs): + """ + The entity that made the change. + + :param name: The name of the user or system that made the change. + :type name: str, optional + + :param type: The type of the author. + :type type: ChangeEventAttributesAuthorType, optional + """ + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_event_attributes_author_type.py b/datadog_api_client/v2/model/change_event_attributes_author_type.py new file mode 100644 index 0000000000..bb7be8141f --- /dev/null +++ b/datadog_api_client/v2/model/change_event_attributes_author_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeEventAttributesAuthorType(ModelSimple): + """ + The type of the author. + + :param value: Must be one of ["user", "system", "api", "automation"]. + :type value: str + """ + + allowed_values = { + "user", + "system", + "api", + "automation", + } + USER: ClassVar["ChangeEventAttributesAuthorType"] + SYSTEM: ClassVar["ChangeEventAttributesAuthorType"] + API: ClassVar["ChangeEventAttributesAuthorType"] + AUTOMATION: ClassVar["ChangeEventAttributesAuthorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeEventAttributesAuthorType.USER = ChangeEventAttributesAuthorType("user") +ChangeEventAttributesAuthorType.SYSTEM = ChangeEventAttributesAuthorType("system") +ChangeEventAttributesAuthorType.API = ChangeEventAttributesAuthorType("api") +ChangeEventAttributesAuthorType.AUTOMATION = ChangeEventAttributesAuthorType("automation") diff --git a/datadog_api_client/v2/model/change_event_attributes_changed_resource.py b/datadog_api_client/v2/model/change_event_attributes_changed_resource.py new file mode 100644 index 0000000000..fab84eddd1 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_attributes_changed_resource.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_event_attributes_changed_resource_type import ChangeEventAttributesChangedResourceType + +class ChangeEventAttributesChangedResource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_event_attributes_changed_resource_type import ChangeEventAttributesChangedResourceType + return { + "name": (str,), + "type": (ChangeEventAttributesChangedResourceType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, type: Union[ChangeEventAttributesChangedResourceType, UnsetType]=unset, **kwargs): + """ + A uniquely identified resource. + + :param name: The name of the changed resource. + :type name: str, optional + + :param type: The type of the changed resource. + :type type: ChangeEventAttributesChangedResourceType, optional + """ + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_event_attributes_changed_resource_type.py b/datadog_api_client/v2/model/change_event_attributes_changed_resource_type.py new file mode 100644 index 0000000000..7075007dc6 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_attributes_changed_resource_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeEventAttributesChangedResourceType(ModelSimple): + """ + The type of the changed resource. + + :param value: Must be one of ["feature_flag", "configuration"]. + :type value: str + """ + + allowed_values = { + "feature_flag", + "configuration", + } + FEATURE_FLAG: ClassVar["ChangeEventAttributesChangedResourceType"] + CONFIGURATION: ClassVar["ChangeEventAttributesChangedResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeEventAttributesChangedResourceType.FEATURE_FLAG = ChangeEventAttributesChangedResourceType("feature_flag") +ChangeEventAttributesChangedResourceType.CONFIGURATION = ChangeEventAttributesChangedResourceType("configuration") diff --git a/datadog_api_client/v2/model/change_event_attributes_impacted_resources_item.py b/datadog_api_client/v2/model/change_event_attributes_impacted_resources_item.py new file mode 100644 index 0000000000..b4381fcff0 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_attributes_impacted_resources_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_event_attributes_impacted_resources_item_type import ChangeEventAttributesImpactedResourcesItemType + +class ChangeEventAttributesImpactedResourcesItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_event_attributes_impacted_resources_item_type import ChangeEventAttributesImpactedResourcesItemType + return { + "name": (str,), + "type": (ChangeEventAttributesImpactedResourcesItemType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, type: Union[ChangeEventAttributesImpactedResourcesItemType, UnsetType]=unset, **kwargs): + """ + A uniquely identified resource. + + :param name: The name of the impacted resource. + :type name: str, optional + + :param type: The type of the impacted resource. + :type type: ChangeEventAttributesImpactedResourcesItemType, optional + """ + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_event_attributes_impacted_resources_item_type.py b/datadog_api_client/v2/model/change_event_attributes_impacted_resources_item_type.py new file mode 100644 index 0000000000..42510eb2b5 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_attributes_impacted_resources_item_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeEventAttributesImpactedResourcesItemType(ModelSimple): + """ + The type of the impacted resource. + + :param value: If omitted defaults to "service". Must be one of ["service"]. + :type value: str + """ + + allowed_values = { + "service", + } + SERVICE: ClassVar["ChangeEventAttributesImpactedResourcesItemType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeEventAttributesImpactedResourcesItemType.SERVICE = ChangeEventAttributesImpactedResourcesItemType("service") diff --git a/datadog_api_client/v2/model/change_event_custom_attributes.py b/datadog_api_client/v2/model/change_event_custom_attributes.py new file mode 100644 index 0000000000..4972a98739 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_custom_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_event_custom_attributes_author import ChangeEventCustomAttributesAuthor + from datadog_api_client.v2.model.change_event_custom_attributes_changed_resource import ChangeEventCustomAttributesChangedResource + from datadog_api_client.v2.model.change_event_custom_attributes_impacted_resources_items import ChangeEventCustomAttributesImpactedResourcesItems + +class ChangeEventCustomAttributes(ModelNormal): + validations = { + "impacted_resources": { + "max_items": 100, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_event_custom_attributes_author import ChangeEventCustomAttributesAuthor + from datadog_api_client.v2.model.change_event_custom_attributes_changed_resource import ChangeEventCustomAttributesChangedResource + from datadog_api_client.v2.model.change_event_custom_attributes_impacted_resources_items import ChangeEventCustomAttributesImpactedResourcesItems + return { + "author": (ChangeEventCustomAttributesAuthor,), + "change_metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "changed_resource": (ChangeEventCustomAttributesChangedResource,), + "impacted_resources": ([ChangeEventCustomAttributesImpactedResourcesItems],), + "new_value": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "prev_value": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "author": "author", + "change_metadata": "change_metadata", + "changed_resource": "changed_resource", + "impacted_resources": "impacted_resources", + "new_value": "new_value", + "prev_value": "prev_value", + } + + def __init__(self_, changed_resource: ChangeEventCustomAttributesChangedResource, author: Union[ChangeEventCustomAttributesAuthor, UnsetType]=unset, change_metadata: Union[Dict[str, Any], UnsetType]=unset, impacted_resources: Union[List[ChangeEventCustomAttributesImpactedResourcesItems], UnsetType]=unset, new_value: Union[Dict[str, Any], UnsetType]=unset, prev_value: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + Change event attributes. + + :param author: The entity that made the change. Optional, if provided it must include ``type`` and ``name``. + :type author: ChangeEventCustomAttributesAuthor, optional + + :param change_metadata: Free form JSON object with information related to the ``change`` event. Supports up to 100 properties per object and a maximum nesting depth of 10 levels. + :type change_metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param changed_resource: A uniquely identified resource. + :type changed_resource: ChangeEventCustomAttributesChangedResource + + :param impacted_resources: A list of resources impacted by this change. It is recommended to provide an impacted resource to display + the change event at the correct location. Only resources of type ``service`` are supported. Maximum of 100 impacted resources allowed. + :type impacted_resources: [ChangeEventCustomAttributesImpactedResourcesItems], optional + + :param new_value: Free form JSON object representing the new state of the changed resource. + :type new_value: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param prev_value: Free form JSON object representing the previous state of the changed resource. + :type prev_value: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + """ + if author is not unset: + kwargs["author"] = author + if change_metadata is not unset: + kwargs["change_metadata"] = change_metadata + if impacted_resources is not unset: + kwargs["impacted_resources"] = impacted_resources + if new_value is not unset: + kwargs["new_value"] = new_value + if prev_value is not unset: + kwargs["prev_value"] = prev_value + super().__init__(kwargs) + + + self_.changed_resource = changed_resource diff --git a/datadog_api_client/v2/model/change_event_custom_attributes_author.py b/datadog_api_client/v2/model/change_event_custom_attributes_author.py new file mode 100644 index 0000000000..a8f78ce15e --- /dev/null +++ b/datadog_api_client/v2/model/change_event_custom_attributes_author.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_event_custom_attributes_author_type import ChangeEventCustomAttributesAuthorType + +class ChangeEventCustomAttributesAuthor(ModelNormal): + validations = { + "name": { + "max_length": 128, + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_event_custom_attributes_author_type import ChangeEventCustomAttributesAuthorType + return { + "name": (str,), + "type": (ChangeEventCustomAttributesAuthorType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: ChangeEventCustomAttributesAuthorType, **kwargs): + """ + The entity that made the change. Optional, if provided it must include ``type`` and ``name``. + + :param name: The name of the user or system that made the change. Limited to 128 characters. + :type name: str + + :param type: Author's type. + :type type: ChangeEventCustomAttributesAuthorType + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/change_event_custom_attributes_author_type.py b/datadog_api_client/v2/model/change_event_custom_attributes_author_type.py new file mode 100644 index 0000000000..3166e47afb --- /dev/null +++ b/datadog_api_client/v2/model/change_event_custom_attributes_author_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeEventCustomAttributesAuthorType(ModelSimple): + """ + Author's type. + + :param value: Must be one of ["user", "system", "api", "automation"]. + :type value: str + """ + + allowed_values = { + "user", + "system", + "api", + "automation", + } + USER: ClassVar["ChangeEventCustomAttributesAuthorType"] + SYSTEM: ClassVar["ChangeEventCustomAttributesAuthorType"] + API: ClassVar["ChangeEventCustomAttributesAuthorType"] + AUTOMATION: ClassVar["ChangeEventCustomAttributesAuthorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeEventCustomAttributesAuthorType.USER = ChangeEventCustomAttributesAuthorType("user") +ChangeEventCustomAttributesAuthorType.SYSTEM = ChangeEventCustomAttributesAuthorType("system") +ChangeEventCustomAttributesAuthorType.API = ChangeEventCustomAttributesAuthorType("api") +ChangeEventCustomAttributesAuthorType.AUTOMATION = ChangeEventCustomAttributesAuthorType("automation") diff --git a/datadog_api_client/v2/model/change_event_custom_attributes_changed_resource.py b/datadog_api_client/v2/model/change_event_custom_attributes_changed_resource.py new file mode 100644 index 0000000000..5b3d0a571e --- /dev/null +++ b/datadog_api_client/v2/model/change_event_custom_attributes_changed_resource.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_event_custom_attributes_changed_resource_type import ChangeEventCustomAttributesChangedResourceType + +class ChangeEventCustomAttributesChangedResource(ModelNormal): + validations = { + "name": { + "max_length": 128, + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_event_custom_attributes_changed_resource_type import ChangeEventCustomAttributesChangedResourceType + return { + "name": (str,), + "type": (ChangeEventCustomAttributesChangedResourceType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: ChangeEventCustomAttributesChangedResourceType, **kwargs): + """ + A uniquely identified resource. + + :param name: The name of the resource that was changed. Limited to 128 characters. Must contain at least one non-whitespace character. + :type name: str + + :param type: The type of the resource that was changed. + :type type: ChangeEventCustomAttributesChangedResourceType + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/change_event_custom_attributes_changed_resource_type.py b/datadog_api_client/v2/model/change_event_custom_attributes_changed_resource_type.py new file mode 100644 index 0000000000..5bdd412d44 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_custom_attributes_changed_resource_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeEventCustomAttributesChangedResourceType(ModelSimple): + """ + The type of the resource that was changed. + + :param value: Must be one of ["feature_flag", "configuration"]. + :type value: str + """ + + allowed_values = { + "feature_flag", + "configuration", + } + FEATURE_FLAG: ClassVar["ChangeEventCustomAttributesChangedResourceType"] + CONFIGURATION: ClassVar["ChangeEventCustomAttributesChangedResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeEventCustomAttributesChangedResourceType.FEATURE_FLAG = ChangeEventCustomAttributesChangedResourceType("feature_flag") +ChangeEventCustomAttributesChangedResourceType.CONFIGURATION = ChangeEventCustomAttributesChangedResourceType("configuration") diff --git a/datadog_api_client/v2/model/change_event_custom_attributes_impacted_resources_items.py b/datadog_api_client/v2/model/change_event_custom_attributes_impacted_resources_items.py new file mode 100644 index 0000000000..a35ca52559 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_custom_attributes_impacted_resources_items.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_event_custom_attributes_impacted_resources_items_type import ChangeEventCustomAttributesImpactedResourcesItemsType + +class ChangeEventCustomAttributesImpactedResourcesItems(ModelNormal): + validations = { + "name": { + "max_length": 128, + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_event_custom_attributes_impacted_resources_items_type import ChangeEventCustomAttributesImpactedResourcesItemsType + return { + "name": (str,), + "type": (ChangeEventCustomAttributesImpactedResourcesItemsType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: ChangeEventCustomAttributesImpactedResourcesItemsType, **kwargs): + """ + Object representing a uniquely identified resource. + + :param name: The name of the impacted resource. Limited to 128 characters. + :type name: str + + :param type: The type of the impacted resource. + :type type: ChangeEventCustomAttributesImpactedResourcesItemsType + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/change_event_custom_attributes_impacted_resources_items_type.py b/datadog_api_client/v2/model/change_event_custom_attributes_impacted_resources_items_type.py new file mode 100644 index 0000000000..cc7fb06904 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_custom_attributes_impacted_resources_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeEventCustomAttributesImpactedResourcesItemsType(ModelSimple): + """ + The type of the impacted resource. + + :param value: If omitted defaults to "service". Must be one of ["service"]. + :type value: str + """ + + allowed_values = { + "service", + } + SERVICE: ClassVar["ChangeEventCustomAttributesImpactedResourcesItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeEventCustomAttributesImpactedResourcesItemsType.SERVICE = ChangeEventCustomAttributesImpactedResourcesItemsType("service") diff --git a/datadog_api_client/v2/model/change_event_trigger_wrapper.py b/datadog_api_client/v2/model/change_event_trigger_wrapper.py new file mode 100644 index 0000000000..9707612258 --- /dev/null +++ b/datadog_api_client/v2/model/change_event_trigger_wrapper.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ChangeEventTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + return { + "change_event_trigger": (dict,), + "start_step_names": ([str],), + } + attribute_map = { + "change_event_trigger": "changeEventTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, change_event_trigger: dict, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Change Event-based trigger. + + :param change_event_trigger: Trigger a workflow from a Change Event. + :type change_event_trigger: dict + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.change_event_trigger = change_event_trigger diff --git a/datadog_api_client/v2/model/change_request_branch_create_attributes.py b/datadog_api_client/v2/model/change_request_branch_create_attributes.py new file mode 100644 index 0000000000..9549dffada --- /dev/null +++ b/datadog_api_client/v2/model/change_request_branch_create_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ChangeRequestBranchCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "branch_name": (str,), + "repo_id": (str,), + } + attribute_map = { + "branch_name": "branch_name", + "repo_id": "repo_id", + } + + def __init__(self_, branch_name: str, repo_id: str, **kwargs): + """ + Attributes for creating a change request branch. + + :param branch_name: The name of the branch to create. + :type branch_name: str + + :param repo_id: The repository identifier in the format owner/repository. + :type repo_id: str + """ + super().__init__(kwargs) + + + self_.branch_name = branch_name + self_.repo_id = repo_id diff --git a/datadog_api_client/v2/model/change_request_branch_create_data.py b/datadog_api_client/v2/model/change_request_branch_create_data.py new file mode 100644 index 0000000000..f09c2f9d47 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_branch_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_branch_create_attributes import ChangeRequestBranchCreateAttributes + from datadog_api_client.v2.model.change_request_branch_resource_type import ChangeRequestBranchResourceType + +class ChangeRequestBranchCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_branch_create_attributes import ChangeRequestBranchCreateAttributes + from datadog_api_client.v2.model.change_request_branch_resource_type import ChangeRequestBranchResourceType + return { + "attributes": (ChangeRequestBranchCreateAttributes,), + "type": (ChangeRequestBranchResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ChangeRequestBranchCreateAttributes, type: ChangeRequestBranchResourceType, **kwargs): + """ + Data object to create a change request branch. + + :param attributes: Attributes for creating a change request branch. + :type attributes: ChangeRequestBranchCreateAttributes + + :param type: Change request branch resource type. + :type type: ChangeRequestBranchResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/change_request_branch_create_request.py b/datadog_api_client/v2/model/change_request_branch_create_request.py new file mode 100644 index 0000000000..6bd88fb2ab --- /dev/null +++ b/datadog_api_client/v2/model/change_request_branch_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_branch_create_data import ChangeRequestBranchCreateData + +class ChangeRequestBranchCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_branch_create_data import ChangeRequestBranchCreateData + return { + "data": (ChangeRequestBranchCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ChangeRequestBranchCreateData, **kwargs): + """ + Request object to create a branch for a change request. + + :param data: Data object to create a change request branch. + :type data: ChangeRequestBranchCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/change_request_branch_resource_type.py b/datadog_api_client/v2/model/change_request_branch_resource_type.py new file mode 100644 index 0000000000..3d8ba8e7f1 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_branch_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeRequestBranchResourceType(ModelSimple): + """ + Change request branch resource type. + + :param value: If omitted defaults to "change_request_branch". Must be one of ["change_request_branch"]. + :type value: str + """ + + allowed_values = { + "change_request_branch", + } + CHANGE_REQUEST_BRANCH: ClassVar["ChangeRequestBranchResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeRequestBranchResourceType.CHANGE_REQUEST_BRANCH = ChangeRequestBranchResourceType("change_request_branch") diff --git a/datadog_api_client/v2/model/change_request_change_type.py b/datadog_api_client/v2/model/change_request_change_type.py new file mode 100644 index 0000000000..f4176785b6 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_change_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeRequestChangeType(ModelSimple): + """ + The type of the change request. + + :param value: Must be one of ["NORMAL", "STANDARD", "EMERGENCY"]. + :type value: str + """ + + allowed_values = { + "NORMAL", + "STANDARD", + "EMERGENCY", + } + NORMAL: ClassVar["ChangeRequestChangeType"] + STANDARD: ClassVar["ChangeRequestChangeType"] + EMERGENCY: ClassVar["ChangeRequestChangeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeRequestChangeType.NORMAL = ChangeRequestChangeType("NORMAL") +ChangeRequestChangeType.STANDARD = ChangeRequestChangeType("STANDARD") +ChangeRequestChangeType.EMERGENCY = ChangeRequestChangeType("EMERGENCY") diff --git a/datadog_api_client/v2/model/change_request_create_attributes.py b/datadog_api_client/v2/model/change_request_create_attributes.py new file mode 100644 index 0000000000..f157c3fb2b --- /dev/null +++ b/datadog_api_client/v2/model/change_request_create_attributes.py @@ -0,0 +1,120 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_risk_level import ChangeRequestRiskLevel + from datadog_api_client.v2.model.change_request_change_type import ChangeRequestChangeType + +class ChangeRequestCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_risk_level import ChangeRequestRiskLevel + from datadog_api_client.v2.model.change_request_change_type import ChangeRequestChangeType + return { + "change_request_linked_incident_uuid": (str,), + "change_request_maintenance_window_query": (str,), + "change_request_plan": (str,), + "change_request_risk": (ChangeRequestRiskLevel,), + "change_request_type": (ChangeRequestChangeType,), + "description": (str,), + "end_date": (datetime,), + "project_id": (str,), + "requested_teams": ([str],), + "start_date": (datetime,), + "title": (str,), + } + attribute_map = { + "change_request_linked_incident_uuid": "change_request_linked_incident_uuid", + "change_request_maintenance_window_query": "change_request_maintenance_window_query", + "change_request_plan": "change_request_plan", + "change_request_risk": "change_request_risk", + "change_request_type": "change_request_type", + "description": "description", + "end_date": "end_date", + "project_id": "project_id", + "requested_teams": "requested_teams", + "start_date": "start_date", + "title": "title", + } + + def __init__(self_, title: str, change_request_linked_incident_uuid: Union[str, UnsetType]=unset, change_request_maintenance_window_query: Union[str, UnsetType]=unset, change_request_plan: Union[str, UnsetType]=unset, change_request_risk: Union[ChangeRequestRiskLevel, UnsetType]=unset, change_request_type: Union[ChangeRequestChangeType, UnsetType]=unset, description: Union[str, UnsetType]=unset, end_date: Union[datetime, UnsetType]=unset, project_id: Union[str, UnsetType]=unset, requested_teams: Union[List[str], UnsetType]=unset, start_date: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes for creating a change request. + + :param change_request_linked_incident_uuid: The UUID of an incident to link to the change request. + :type change_request_linked_incident_uuid: str, optional + + :param change_request_maintenance_window_query: The maintenance window query for the change request. + :type change_request_maintenance_window_query: str, optional + + :param change_request_plan: The plan associated with the change request. + :type change_request_plan: str, optional + + :param change_request_risk: The risk level of the change request. + :type change_request_risk: ChangeRequestRiskLevel, optional + + :param change_request_type: The type of the change request. + :type change_request_type: ChangeRequestChangeType, optional + + :param description: The description of the change request. + :type description: str, optional + + :param end_date: The planned end date of the change request. + :type end_date: datetime, optional + + :param project_id: The project UUID to associate with the change request. + :type project_id: str, optional + + :param requested_teams: A list of team handles to request decisions from. + :type requested_teams: [str], optional + + :param start_date: The planned start date of the change request. + :type start_date: datetime, optional + + :param title: The title of the change request. + :type title: str + """ + if change_request_linked_incident_uuid is not unset: + kwargs["change_request_linked_incident_uuid"] = change_request_linked_incident_uuid + if change_request_maintenance_window_query is not unset: + kwargs["change_request_maintenance_window_query"] = change_request_maintenance_window_query + if change_request_plan is not unset: + kwargs["change_request_plan"] = change_request_plan + if change_request_risk is not unset: + kwargs["change_request_risk"] = change_request_risk + if change_request_type is not unset: + kwargs["change_request_type"] = change_request_type + if description is not unset: + kwargs["description"] = description + if end_date is not unset: + kwargs["end_date"] = end_date + if project_id is not unset: + kwargs["project_id"] = project_id + if requested_teams is not unset: + kwargs["requested_teams"] = requested_teams + if start_date is not unset: + kwargs["start_date"] = start_date + super().__init__(kwargs) + + + self_.title = title diff --git a/datadog_api_client/v2/model/change_request_create_data.py b/datadog_api_client/v2/model/change_request_create_data.py new file mode 100644 index 0000000000..0cf328066c --- /dev/null +++ b/datadog_api_client/v2/model/change_request_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_create_attributes import ChangeRequestCreateAttributes + from datadog_api_client.v2.model.change_request_resource_type import ChangeRequestResourceType + +class ChangeRequestCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_create_attributes import ChangeRequestCreateAttributes + from datadog_api_client.v2.model.change_request_resource_type import ChangeRequestResourceType + return { + "attributes": (ChangeRequestCreateAttributes,), + "type": (ChangeRequestResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ChangeRequestCreateAttributes, type: ChangeRequestResourceType, **kwargs): + """ + Data object to create a change request. + + :param attributes: Attributes for creating a change request. + :type attributes: ChangeRequestCreateAttributes + + :param type: Change request resource type. + :type type: ChangeRequestResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/change_request_create_request.py b/datadog_api_client/v2/model/change_request_create_request.py new file mode 100644 index 0000000000..46db4b5e26 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_create_data import ChangeRequestCreateData + +class ChangeRequestCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_create_data import ChangeRequestCreateData + return { + "data": (ChangeRequestCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ChangeRequestCreateData, **kwargs): + """ + Request object to create a change request. + + :param data: Data object to create a change request. + :type data: ChangeRequestCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/change_request_decision_create_attributes.py b/datadog_api_client/v2/model/change_request_decision_create_attributes.py new file mode 100644 index 0000000000..c733586f8e --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_create_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decision_status_type import ChangeRequestDecisionStatusType + +class ChangeRequestDecisionCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decision_status_type import ChangeRequestDecisionStatusType + return { + "change_request_status": (ChangeRequestDecisionStatusType,), + "request_reason": (str,), + } + attribute_map = { + "change_request_status": "change_request_status", + "request_reason": "request_reason", + } + + def __init__(self_, change_request_status: Union[ChangeRequestDecisionStatusType, UnsetType]=unset, request_reason: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating a change request decision. + + :param change_request_status: The status of a change request decision. + :type change_request_status: ChangeRequestDecisionStatusType, optional + + :param request_reason: The reason for requesting the decision. + :type request_reason: str, optional + """ + if change_request_status is not unset: + kwargs["change_request_status"] = change_request_status + if request_reason is not unset: + kwargs["request_reason"] = request_reason + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_request_decision_create_item.py b/datadog_api_client/v2/model/change_request_decision_create_item.py new file mode 100644 index 0000000000..402ae1d967 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_create_item.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decision_create_attributes import ChangeRequestDecisionCreateAttributes + from datadog_api_client.v2.model.change_request_decision_create_relationships import ChangeRequestDecisionCreateRelationships + from datadog_api_client.v2.model.change_request_decision_resource_type import ChangeRequestDecisionResourceType + +class ChangeRequestDecisionCreateItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decision_create_attributes import ChangeRequestDecisionCreateAttributes + from datadog_api_client.v2.model.change_request_decision_create_relationships import ChangeRequestDecisionCreateRelationships + from datadog_api_client.v2.model.change_request_decision_resource_type import ChangeRequestDecisionResourceType + return { + "attributes": (ChangeRequestDecisionCreateAttributes,), + "id": (str,), + "relationships": (ChangeRequestDecisionCreateRelationships,), + "type": (ChangeRequestDecisionResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: ChangeRequestDecisionResourceType, attributes: Union[ChangeRequestDecisionCreateAttributes, UnsetType]=unset, relationships: Union[ChangeRequestDecisionCreateRelationships, UnsetType]=unset, **kwargs): + """ + An included change request decision for a create or update operation. + + :param attributes: Attributes for creating a change request decision. + :type attributes: ChangeRequestDecisionCreateAttributes, optional + + :param id: The decision identifier. + :type id: str + + :param relationships: Relationships for creating a change request decision. + :type relationships: ChangeRequestDecisionCreateRelationships, optional + + :param type: Change request decision resource type. + :type type: ChangeRequestDecisionResourceType + """ + 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/datadog_api_client/v2/model/change_request_decision_create_relationships.py b/datadog_api_client/v2/model/change_request_decision_create_relationships.py new file mode 100644 index 0000000000..4d7a310a76 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_create_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_user_relationship import ChangeRequestUserRelationship + +class ChangeRequestDecisionCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_user_relationship import ChangeRequestUserRelationship + return { + "requested_user": (ChangeRequestUserRelationship,), + } + attribute_map = { + "requested_user": "requested_user", + } + + def __init__(self_, requested_user: Union[ChangeRequestUserRelationship, UnsetType]=unset, **kwargs): + """ + Relationships for creating a change request decision. + + :param requested_user: Relationship to a user. + :type requested_user: ChangeRequestUserRelationship, optional + """ + if requested_user is not unset: + kwargs["requested_user"] = requested_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_request_decision_relationship_data.py b/datadog_api_client/v2/model/change_request_decision_relationship_data.py new file mode 100644 index 0000000000..da04308daa --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decision_resource_type import ChangeRequestDecisionResourceType + +class ChangeRequestDecisionRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decision_resource_type import ChangeRequestDecisionResourceType + return { + "id": (str,), + "type": (ChangeRequestDecisionResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ChangeRequestDecisionResourceType, **kwargs): + """ + Change request decision relationship data. + + :param id: The decision UUID. + :type id: str + + :param type: Change request decision resource type. + :type type: ChangeRequestDecisionResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/change_request_decision_relationships.py b/datadog_api_client/v2/model/change_request_decision_relationships.py new file mode 100644 index 0000000000..214fce13a6 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_user_relationship import ChangeRequestUserRelationship + +class ChangeRequestDecisionRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_user_relationship import ChangeRequestUserRelationship + return { + "modified_by": (ChangeRequestUserRelationship,), + "requested_by_user": (ChangeRequestUserRelationship,), + "requested_user": (ChangeRequestUserRelationship,), + } + attribute_map = { + "modified_by": "modified_by", + "requested_by_user": "requested_by_user", + "requested_user": "requested_user", + } + + def __init__(self_, modified_by: ChangeRequestUserRelationship, requested_by_user: ChangeRequestUserRelationship, requested_user: ChangeRequestUserRelationship, **kwargs): + """ + Relationships of a change request decision. + + :param modified_by: Relationship to a user. + :type modified_by: ChangeRequestUserRelationship + + :param requested_by_user: Relationship to a user. + :type requested_by_user: ChangeRequestUserRelationship + + :param requested_user: Relationship to a user. + :type requested_user: ChangeRequestUserRelationship + """ + super().__init__(kwargs) + + + self_.modified_by = modified_by + self_.requested_by_user = requested_by_user + self_.requested_user = requested_user diff --git a/datadog_api_client/v2/model/change_request_decision_resource_type.py b/datadog_api_client/v2/model/change_request_decision_resource_type.py new file mode 100644 index 0000000000..00a2ffa74a --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeRequestDecisionResourceType(ModelSimple): + """ + Change request decision resource type. + + :param value: If omitted defaults to "change_request_decision". Must be one of ["change_request_decision"]. + :type value: str + """ + + allowed_values = { + "change_request_decision", + } + CHANGE_REQUEST_DECISION: ClassVar["ChangeRequestDecisionResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeRequestDecisionResourceType.CHANGE_REQUEST_DECISION = ChangeRequestDecisionResourceType("change_request_decision") diff --git a/datadog_api_client/v2/model/change_request_decision_response_attributes.py b/datadog_api_client/v2/model/change_request_decision_response_attributes.py new file mode 100644 index 0000000000..8eb742d19c --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decision_status_type import ChangeRequestDecisionStatusType + +class ChangeRequestDecisionResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decision_status_type import ChangeRequestDecisionStatusType + return { + "change_request_status": (ChangeRequestDecisionStatusType,), + "decided_at": (datetime,), + "decision_reason": (str,), + "deleted_at": (datetime,), + "request_reason": (str,), + "requested_at": (datetime,), + } + attribute_map = { + "change_request_status": "change_request_status", + "decided_at": "decided_at", + "decision_reason": "decision_reason", + "deleted_at": "deleted_at", + "request_reason": "request_reason", + "requested_at": "requested_at", + } + + def __init__(self_, change_request_status: ChangeRequestDecisionStatusType, decided_at: datetime, decision_reason: str, deleted_at: datetime, request_reason: str, requested_at: datetime, **kwargs): + """ + Attributes of a change request decision in a response. + + :param change_request_status: The status of a change request decision. + :type change_request_status: ChangeRequestDecisionStatusType + + :param decided_at: Timestamp of when the decision was made. + :type decided_at: datetime + + :param decision_reason: The reason for the decision. + :type decision_reason: str + + :param deleted_at: Timestamp of when the decision was deleted. + :type deleted_at: datetime + + :param request_reason: The reason for requesting the decision. + :type request_reason: str + + :param requested_at: Timestamp of when the decision was requested. + :type requested_at: datetime + """ + super().__init__(kwargs) + + + self_.change_request_status = change_request_status + self_.decided_at = decided_at + self_.decision_reason = decision_reason + self_.deleted_at = deleted_at + self_.request_reason = request_reason + self_.requested_at = requested_at diff --git a/datadog_api_client/v2/model/change_request_decision_status_type.py b/datadog_api_client/v2/model/change_request_decision_status_type.py new file mode 100644 index 0000000000..e1668dcb6a --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_status_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeRequestDecisionStatusType(ModelSimple): + """ + The status of a change request decision. + + :param value: Must be one of ["REQUESTED", "APPROVED", "DECLINED"]. + :type value: str + """ + + allowed_values = { + "REQUESTED", + "APPROVED", + "DECLINED", + } + REQUESTED: ClassVar["ChangeRequestDecisionStatusType"] + APPROVED: ClassVar["ChangeRequestDecisionStatusType"] + DECLINED: ClassVar["ChangeRequestDecisionStatusType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeRequestDecisionStatusType.REQUESTED = ChangeRequestDecisionStatusType("REQUESTED") +ChangeRequestDecisionStatusType.APPROVED = ChangeRequestDecisionStatusType("APPROVED") +ChangeRequestDecisionStatusType.DECLINED = ChangeRequestDecisionStatusType("DECLINED") diff --git a/datadog_api_client/v2/model/change_request_decision_update_data.py b/datadog_api_client/v2/model/change_request_decision_update_data.py new file mode 100644 index 0000000000..6935cd8752 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_update_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decision_update_data_attributes import ChangeRequestDecisionUpdateDataAttributes + from datadog_api_client.v2.model.change_request_decision_update_data_relationships import ChangeRequestDecisionUpdateDataRelationships + from datadog_api_client.v2.model.change_request_resource_type import ChangeRequestResourceType + +class ChangeRequestDecisionUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decision_update_data_attributes import ChangeRequestDecisionUpdateDataAttributes + from datadog_api_client.v2.model.change_request_decision_update_data_relationships import ChangeRequestDecisionUpdateDataRelationships + from datadog_api_client.v2.model.change_request_resource_type import ChangeRequestResourceType + return { + "attributes": (ChangeRequestDecisionUpdateDataAttributes,), + "relationships": (ChangeRequestDecisionUpdateDataRelationships,), + "type": (ChangeRequestResourceType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: ChangeRequestResourceType, attributes: Union[ChangeRequestDecisionUpdateDataAttributes, UnsetType]=unset, relationships: Union[ChangeRequestDecisionUpdateDataRelationships, UnsetType]=unset, **kwargs): + """ + Data object to update a change request decision. + + :param attributes: Attributes of the parent change request for a decision update. + :type attributes: ChangeRequestDecisionUpdateDataAttributes, optional + + :param relationships: Relationships for updating a change request decision. + :type relationships: ChangeRequestDecisionUpdateDataRelationships, optional + + :param type: Change request resource type. + :type type: ChangeRequestResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/change_request_decision_update_data_attributes.py b/datadog_api_client/v2/model/change_request_decision_update_data_attributes.py new file mode 100644 index 0000000000..6e1f990b8c --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_update_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ChangeRequestDecisionUpdateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the parent change request for a decision update. + + :param id: The identifier of the change request. + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_request_decision_update_data_relationships.py b/datadog_api_client/v2/model/change_request_decision_update_data_relationships.py new file mode 100644 index 0000000000..97351a3918 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_update_data_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decisions_relationship import ChangeRequestDecisionsRelationship + +class ChangeRequestDecisionUpdateDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decisions_relationship import ChangeRequestDecisionsRelationship + return { + "change_request_decisions": (ChangeRequestDecisionsRelationship,), + } + attribute_map = { + "change_request_decisions": "change_request_decisions", + } + + def __init__(self_, change_request_decisions: ChangeRequestDecisionsRelationship, **kwargs): + """ + Relationships for updating a change request decision. + + :param change_request_decisions: Relationship to change request decisions. + :type change_request_decisions: ChangeRequestDecisionsRelationship + """ + super().__init__(kwargs) + + + self_.change_request_decisions = change_request_decisions diff --git a/datadog_api_client/v2/model/change_request_decision_update_request.py b/datadog_api_client/v2/model/change_request_decision_update_request.py new file mode 100644 index 0000000000..df836322cb --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decision_update_request.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decision_update_data import ChangeRequestDecisionUpdateData + from datadog_api_client.v2.model.change_request_decision_create_item import ChangeRequestDecisionCreateItem + +class ChangeRequestDecisionUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decision_update_data import ChangeRequestDecisionUpdateData + from datadog_api_client.v2.model.change_request_decision_create_item import ChangeRequestDecisionCreateItem + return { + "data": (ChangeRequestDecisionUpdateData,), + "included": ([ChangeRequestDecisionCreateItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: ChangeRequestDecisionUpdateData, included: Union[List[ChangeRequestDecisionCreateItem], UnsetType]=unset, **kwargs): + """ + Request object to update a change request decision. + + :param data: Data object to update a change request decision. + :type data: ChangeRequestDecisionUpdateData + + :param included: Included resources for the change request update. + :type included: [ChangeRequestDecisionCreateItem], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/change_request_decisions_relationship.py b/datadog_api_client/v2/model/change_request_decisions_relationship.py new file mode 100644 index 0000000000..b63d857302 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_decisions_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decision_relationship_data import ChangeRequestDecisionRelationshipData + +class ChangeRequestDecisionsRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decision_relationship_data import ChangeRequestDecisionRelationshipData + return { + "data": ([ChangeRequestDecisionRelationshipData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ChangeRequestDecisionRelationshipData], **kwargs): + """ + Relationship to change request decisions. + + :param data: Array of decision relationship data. + :type data: [ChangeRequestDecisionRelationshipData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/change_request_included_decision.py b/datadog_api_client/v2/model/change_request_included_decision.py new file mode 100644 index 0000000000..af6b1e6b83 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_included_decision.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decision_response_attributes import ChangeRequestDecisionResponseAttributes + from datadog_api_client.v2.model.change_request_decision_relationships import ChangeRequestDecisionRelationships + from datadog_api_client.v2.model.change_request_decision_resource_type import ChangeRequestDecisionResourceType + +class ChangeRequestIncludedDecision(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decision_response_attributes import ChangeRequestDecisionResponseAttributes + from datadog_api_client.v2.model.change_request_decision_relationships import ChangeRequestDecisionRelationships + from datadog_api_client.v2.model.change_request_decision_resource_type import ChangeRequestDecisionResourceType + return { + "attributes": (ChangeRequestDecisionResponseAttributes,), + "id": (str,), + "relationships": (ChangeRequestDecisionRelationships,), + "type": (ChangeRequestDecisionResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ChangeRequestDecisionResponseAttributes, id: str, type: ChangeRequestDecisionResourceType, relationships: Union[ChangeRequestDecisionRelationships, UnsetType]=unset, **kwargs): + """ + An included change request decision resource. + + :param attributes: Attributes of a change request decision in a response. + :type attributes: ChangeRequestDecisionResponseAttributes + + :param id: The decision UUID. + :type id: str + + :param relationships: Relationships of a change request decision. + :type relationships: ChangeRequestDecisionRelationships, optional + + :param type: Change request decision resource type. + :type type: ChangeRequestDecisionResourceType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/change_request_included_item.py b/datadog_api_client/v2/model/change_request_included_item.py new file mode 100644 index 0000000000..2bad1d3902 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_included_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ChangeRequestIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An included resource item in the change request response. + + :param attributes: Attributes of an included user. + :type attributes: ChangeRequestIncludedUserAttributes + + :param id: The user UUID. + :type id: str + + :param type: The resource type. + :type type: str + + :param relationships: Relationships of a change request decision. + :type relationships: ChangeRequestDecisionRelationships, 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.change_request_included_user import ChangeRequestIncludedUser + from datadog_api_client.v2.model.change_request_included_decision import ChangeRequestIncludedDecision + return { + "oneOf": [ + ChangeRequestIncludedUser, + ChangeRequestIncludedDecision, + ], + } diff --git a/datadog_api_client/v2/model/change_request_included_user.py b/datadog_api_client/v2/model/change_request_included_user.py new file mode 100644 index 0000000000..ee7cadb2f6 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_included_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_included_user_attributes import ChangeRequestIncludedUserAttributes + +class ChangeRequestIncludedUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_included_user_attributes import ChangeRequestIncludedUserAttributes + return { + "attributes": (ChangeRequestIncludedUserAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ChangeRequestIncludedUserAttributes, id: str, type: str, **kwargs): + """ + An included user resource. + + :param attributes: Attributes of an included user. + :type attributes: ChangeRequestIncludedUserAttributes + + :param id: The user UUID. + :type id: str + + :param type: The resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/change_request_included_user_attributes.py b/datadog_api_client/v2/model/change_request_included_user_attributes.py new file mode 100644 index 0000000000..369c6f1806 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_included_user_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ChangeRequestIncludedUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "name": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "name": "name", + } + + def __init__(self_, email: str, handle: str, name: str, **kwargs): + """ + Attributes of an included user. + + :param email: The email of the user. + :type email: str + + :param handle: The handle of the user. + :type handle: str + + :param name: The name of the user. + :type name: str + """ + super().__init__(kwargs) + + + self_.email = email + self_.handle = handle + self_.name = name diff --git a/datadog_api_client/v2/model/change_request_object_attributes.py b/datadog_api_client/v2/model/change_request_object_attributes.py new file mode 100644 index 0000000000..45a99c7114 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_object_attributes.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ChangeRequestObjectAttributes(ModelNormal): + @cached_property + def additional_properties_type(_): + return ([str],) + + def __init__(self_, **kwargs): + """ + Custom attributes of the change request as key-value pairs. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_request_relationships.py b/datadog_api_client/v2/model/change_request_relationships.py new file mode 100644 index 0000000000..fe3e7f76f7 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_relationships.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decisions_relationship import ChangeRequestDecisionsRelationship + from datadog_api_client.v2.model.change_request_user_relationship import ChangeRequestUserRelationship + +class ChangeRequestRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decisions_relationship import ChangeRequestDecisionsRelationship + from datadog_api_client.v2.model.change_request_user_relationship import ChangeRequestUserRelationship + return { + "change_request_decisions": (ChangeRequestDecisionsRelationship,), + "created_by": (ChangeRequestUserRelationship,), + "modified_by": (ChangeRequestUserRelationship,), + } + attribute_map = { + "change_request_decisions": "change_request_decisions", + "created_by": "created_by", + "modified_by": "modified_by", + } + + def __init__(self_, change_request_decisions: ChangeRequestDecisionsRelationship, created_by: ChangeRequestUserRelationship, modified_by: ChangeRequestUserRelationship, **kwargs): + """ + Relationships of a change request. + + :param change_request_decisions: Relationship to change request decisions. + :type change_request_decisions: ChangeRequestDecisionsRelationship + + :param created_by: Relationship to a user. + :type created_by: ChangeRequestUserRelationship + + :param modified_by: Relationship to a user. + :type modified_by: ChangeRequestUserRelationship + """ + super().__init__(kwargs) + + + self_.change_request_decisions = change_request_decisions + self_.created_by = created_by + self_.modified_by = modified_by diff --git a/datadog_api_client/v2/model/change_request_resource_type.py b/datadog_api_client/v2/model/change_request_resource_type.py new file mode 100644 index 0000000000..3a7ff21d07 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeRequestResourceType(ModelSimple): + """ + Change request resource type. + + :param value: If omitted defaults to "change_request". Must be one of ["change_request"]. + :type value: str + """ + + allowed_values = { + "change_request", + } + CHANGE_REQUEST: ClassVar["ChangeRequestResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeRequestResourceType.CHANGE_REQUEST = ChangeRequestResourceType("change_request") diff --git a/datadog_api_client/v2/model/change_request_response.py b/datadog_api_client/v2/model/change_request_response.py new file mode 100644 index 0000000000..8bdcdb1094 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_response_data import ChangeRequestResponseData + from datadog_api_client.v2.model.change_request_included_item import ChangeRequestIncludedItem + from datadog_api_client.v2.model.change_request_included_user import ChangeRequestIncludedUser + from datadog_api_client.v2.model.change_request_included_decision import ChangeRequestIncludedDecision + +class ChangeRequestResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_response_data import ChangeRequestResponseData + from datadog_api_client.v2.model.change_request_included_item import ChangeRequestIncludedItem + return { + "data": (ChangeRequestResponseData,), + "included": ([ChangeRequestIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: ChangeRequestResponseData, included: Union[List[Union[ChangeRequestIncludedItem, ChangeRequestIncludedUser, ChangeRequestIncludedDecision]], UnsetType]=unset, **kwargs): + """ + Response object for a change request. + + :param data: Data object for a change request response. + :type data: ChangeRequestResponseData + + :param included: Included resources related to the change request. + :type included: [ChangeRequestIncludedItem], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/change_request_response_attributes.py b/datadog_api_client/v2/model/change_request_response_attributes.py new file mode 100644 index 0000000000..99dd2ca9b0 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_response_attributes.py @@ -0,0 +1,182 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_object_attributes import ChangeRequestObjectAttributes + from datadog_api_client.v2.model.change_request_risk_level import ChangeRequestRiskLevel + from datadog_api_client.v2.model.change_request_change_type import ChangeRequestChangeType + +class ChangeRequestResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_object_attributes import ChangeRequestObjectAttributes + from datadog_api_client.v2.model.change_request_risk_level import ChangeRequestRiskLevel + from datadog_api_client.v2.model.change_request_change_type import ChangeRequestChangeType + return { + "archived_at": (datetime, none_type), + "attributes": (ChangeRequestObjectAttributes,), + "change_request_linked_incident_uuid": (str,), + "change_request_maintenance_window_query": (str,), + "change_request_plan": (str,), + "change_request_risk": (ChangeRequestRiskLevel,), + "change_request_type": (ChangeRequestChangeType,), + "closed_at": (datetime, none_type), + "created_at": (datetime,), + "creation_source": (str,), + "description": (str,), + "end_date": (datetime,), + "key": (str,), + "modified_at": (datetime,), + "plan_notebook_id": (int,), + "priority": (str,), + "project_id": (str,), + "start_date": (datetime,), + "status": (str,), + "title": (str,), + "type": (str,), + } + attribute_map = { + "archived_at": "archived_at", + "attributes": "attributes", + "change_request_linked_incident_uuid": "change_request_linked_incident_uuid", + "change_request_maintenance_window_query": "change_request_maintenance_window_query", + "change_request_plan": "change_request_plan", + "change_request_risk": "change_request_risk", + "change_request_type": "change_request_type", + "closed_at": "closed_at", + "created_at": "created_at", + "creation_source": "creation_source", + "description": "description", + "end_date": "end_date", + "key": "key", + "modified_at": "modified_at", + "plan_notebook_id": "plan_notebook_id", + "priority": "priority", + "project_id": "project_id", + "start_date": "start_date", + "status": "status", + "title": "title", + "type": "type", + } + read_only_vars = { + "archived_at", + "closed_at", + "created_at", + "modified_at", + } + + def __init__(self_, attributes: ChangeRequestObjectAttributes, change_request_linked_incident_uuid: str, change_request_maintenance_window_query: str, change_request_plan: str, change_request_risk: ChangeRequestRiskLevel, change_request_type: ChangeRequestChangeType, created_at: datetime, creation_source: str, description: str, key: str, modified_at: datetime, plan_notebook_id: int, priority: str, project_id: str, status: str, title: str, type: str, archived_at: Union[datetime, none_type, UnsetType]=unset, closed_at: Union[datetime, none_type, UnsetType]=unset, end_date: Union[datetime, UnsetType]=unset, start_date: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a change request response. + + :param archived_at: Timestamp of when the change request was archived. + :type archived_at: datetime, none_type, optional + + :param attributes: Custom attributes of the change request as key-value pairs. + :type attributes: ChangeRequestObjectAttributes + + :param change_request_linked_incident_uuid: The UUID of the linked incident. + :type change_request_linked_incident_uuid: str + + :param change_request_maintenance_window_query: The maintenance window query for the change request. + :type change_request_maintenance_window_query: str + + :param change_request_plan: The plan associated with the change request. + :type change_request_plan: str + + :param change_request_risk: The risk level of the change request. + :type change_request_risk: ChangeRequestRiskLevel + + :param change_request_type: The type of the change request. + :type change_request_type: ChangeRequestChangeType + + :param closed_at: Timestamp of when the change request was closed. + :type closed_at: datetime, none_type, optional + + :param created_at: Timestamp of when the change request was created. + :type created_at: datetime + + :param creation_source: The source from which the change request was created. + :type creation_source: str + + :param description: The description of the change request. + :type description: str + + :param end_date: The planned end date of the change request. + :type end_date: datetime, optional + + :param key: The human-readable key of the change request. + :type key: str + + :param modified_at: Timestamp of when the change request was last modified. + :type modified_at: datetime + + :param plan_notebook_id: The notebook ID associated with the change request plan. + :type plan_notebook_id: int + + :param priority: The priority of the change request. + :type priority: str + + :param project_id: The project UUID associated with the change request. + :type project_id: str + + :param start_date: The planned start date of the change request. + :type start_date: datetime, optional + + :param status: The current status of the change request. + :type status: str + + :param title: The title of the change request. + :type title: str + + :param type: The case type. + :type type: str + """ + if archived_at is not unset: + kwargs["archived_at"] = archived_at + if closed_at is not unset: + kwargs["closed_at"] = closed_at + if end_date is not unset: + kwargs["end_date"] = end_date + if start_date is not unset: + kwargs["start_date"] = start_date + super().__init__(kwargs) + + + self_.attributes = attributes + self_.change_request_linked_incident_uuid = change_request_linked_incident_uuid + self_.change_request_maintenance_window_query = change_request_maintenance_window_query + self_.change_request_plan = change_request_plan + self_.change_request_risk = change_request_risk + self_.change_request_type = change_request_type + self_.created_at = created_at + self_.creation_source = creation_source + self_.description = description + self_.key = key + self_.modified_at = modified_at + self_.plan_notebook_id = plan_notebook_id + self_.priority = priority + self_.project_id = project_id + self_.status = status + self_.title = title + self_.type = type diff --git a/datadog_api_client/v2/model/change_request_response_data.py b/datadog_api_client/v2/model/change_request_response_data.py new file mode 100644 index 0000000000..7aa7fb3cf9 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_response_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_response_attributes import ChangeRequestResponseAttributes + from datadog_api_client.v2.model.change_request_relationships import ChangeRequestRelationships + from datadog_api_client.v2.model.change_request_resource_type import ChangeRequestResourceType + +class ChangeRequestResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_response_attributes import ChangeRequestResponseAttributes + from datadog_api_client.v2.model.change_request_relationships import ChangeRequestRelationships + from datadog_api_client.v2.model.change_request_resource_type import ChangeRequestResourceType + return { + "attributes": (ChangeRequestResponseAttributes,), + "id": (str,), + "relationships": (ChangeRequestRelationships,), + "type": (ChangeRequestResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ChangeRequestResponseAttributes, id: str, type: ChangeRequestResourceType, relationships: Union[ChangeRequestRelationships, UnsetType]=unset, **kwargs): + """ + Data object for a change request response. + + :param attributes: Attributes of a change request response. + :type attributes: ChangeRequestResponseAttributes + + :param id: The identifier of the change request. + :type id: str + + :param relationships: Relationships of a change request. + :type relationships: ChangeRequestRelationships, optional + + :param type: Change request resource type. + :type type: ChangeRequestResourceType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/change_request_risk_level.py b/datadog_api_client/v2/model/change_request_risk_level.py new file mode 100644 index 0000000000..092a01a8a4 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_risk_level.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ChangeRequestRiskLevel(ModelSimple): + """ + The risk level of the change request. + + :param value: Must be one of ["UNDEFINED", "LOW", "MEDIUM", "HIGH"]. + :type value: str + """ + + allowed_values = { + "UNDEFINED", + "LOW", + "MEDIUM", + "HIGH", + } + UNDEFINED: ClassVar["ChangeRequestRiskLevel"] + LOW: ClassVar["ChangeRequestRiskLevel"] + MEDIUM: ClassVar["ChangeRequestRiskLevel"] + HIGH: ClassVar["ChangeRequestRiskLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ChangeRequestRiskLevel.UNDEFINED = ChangeRequestRiskLevel("UNDEFINED") +ChangeRequestRiskLevel.LOW = ChangeRequestRiskLevel("LOW") +ChangeRequestRiskLevel.MEDIUM = ChangeRequestRiskLevel("MEDIUM") +ChangeRequestRiskLevel.HIGH = ChangeRequestRiskLevel("HIGH") diff --git a/datadog_api_client/v2/model/change_request_update_attributes.py b/datadog_api_client/v2/model/change_request_update_attributes.py new file mode 100644 index 0000000000..3fdcb6597c --- /dev/null +++ b/datadog_api_client/v2/model/change_request_update_attributes.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_risk_level import ChangeRequestRiskLevel + from datadog_api_client.v2.model.change_request_change_type import ChangeRequestChangeType + +class ChangeRequestUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_risk_level import ChangeRequestRiskLevel + from datadog_api_client.v2.model.change_request_change_type import ChangeRequestChangeType + return { + "change_request_plan": (str,), + "change_request_risk": (ChangeRequestRiskLevel,), + "change_request_type": (ChangeRequestChangeType,), + "end_date": (datetime,), + "id": (str,), + "start_date": (datetime,), + } + attribute_map = { + "change_request_plan": "change_request_plan", + "change_request_risk": "change_request_risk", + "change_request_type": "change_request_type", + "end_date": "end_date", + "id": "id", + "start_date": "start_date", + } + + def __init__(self_, change_request_plan: Union[str, UnsetType]=unset, change_request_risk: Union[ChangeRequestRiskLevel, UnsetType]=unset, change_request_type: Union[ChangeRequestChangeType, UnsetType]=unset, end_date: Union[datetime, UnsetType]=unset, id: Union[str, UnsetType]=unset, start_date: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes for updating a change request. + + :param change_request_plan: The plan associated with the change request. + :type change_request_plan: str, optional + + :param change_request_risk: The risk level of the change request. + :type change_request_risk: ChangeRequestRiskLevel, optional + + :param change_request_type: The type of the change request. + :type change_request_type: ChangeRequestChangeType, optional + + :param end_date: The planned end date of the change request. + :type end_date: datetime, optional + + :param id: The identifier of the change request to update. + :type id: str, optional + + :param start_date: The planned start date of the change request. + :type start_date: datetime, optional + """ + if change_request_plan is not unset: + kwargs["change_request_plan"] = change_request_plan + if change_request_risk is not unset: + kwargs["change_request_risk"] = change_request_risk + if change_request_type is not unset: + kwargs["change_request_type"] = change_request_type + if end_date is not unset: + kwargs["end_date"] = end_date + if id is not unset: + kwargs["id"] = id + if start_date is not unset: + kwargs["start_date"] = start_date + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_request_update_data.py b/datadog_api_client/v2/model/change_request_update_data.py new file mode 100644 index 0000000000..8b29336bc7 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_update_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_update_attributes import ChangeRequestUpdateAttributes + from datadog_api_client.v2.model.change_request_update_relationships import ChangeRequestUpdateRelationships + from datadog_api_client.v2.model.change_request_resource_type import ChangeRequestResourceType + +class ChangeRequestUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_update_attributes import ChangeRequestUpdateAttributes + from datadog_api_client.v2.model.change_request_update_relationships import ChangeRequestUpdateRelationships + from datadog_api_client.v2.model.change_request_resource_type import ChangeRequestResourceType + return { + "attributes": (ChangeRequestUpdateAttributes,), + "relationships": (ChangeRequestUpdateRelationships,), + "type": (ChangeRequestResourceType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: ChangeRequestResourceType, attributes: Union[ChangeRequestUpdateAttributes, UnsetType]=unset, relationships: Union[ChangeRequestUpdateRelationships, UnsetType]=unset, **kwargs): + """ + Data object to update a change request. + + :param attributes: Attributes for updating a change request. + :type attributes: ChangeRequestUpdateAttributes, optional + + :param relationships: Relationships for updating a change request. + :type relationships: ChangeRequestUpdateRelationships, optional + + :param type: Change request resource type. + :type type: ChangeRequestResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/change_request_update_relationships.py b/datadog_api_client/v2/model/change_request_update_relationships.py new file mode 100644 index 0000000000..648ca4bc3b --- /dev/null +++ b/datadog_api_client/v2/model/change_request_update_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_decisions_relationship import ChangeRequestDecisionsRelationship + +class ChangeRequestUpdateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_decisions_relationship import ChangeRequestDecisionsRelationship + return { + "change_request_decisions": (ChangeRequestDecisionsRelationship,), + } + attribute_map = { + "change_request_decisions": "change_request_decisions", + } + + def __init__(self_, change_request_decisions: Union[ChangeRequestDecisionsRelationship, UnsetType]=unset, **kwargs): + """ + Relationships for updating a change request. + + :param change_request_decisions: Relationship to change request decisions. + :type change_request_decisions: ChangeRequestDecisionsRelationship, optional + """ + if change_request_decisions is not unset: + kwargs["change_request_decisions"] = change_request_decisions + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/change_request_update_request.py b/datadog_api_client/v2/model/change_request_update_request.py new file mode 100644 index 0000000000..31bd8eded3 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_update_request.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_update_data import ChangeRequestUpdateData + from datadog_api_client.v2.model.change_request_decision_create_item import ChangeRequestDecisionCreateItem + +class ChangeRequestUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_update_data import ChangeRequestUpdateData + from datadog_api_client.v2.model.change_request_decision_create_item import ChangeRequestDecisionCreateItem + return { + "data": (ChangeRequestUpdateData,), + "included": ([ChangeRequestDecisionCreateItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: ChangeRequestUpdateData, included: Union[List[ChangeRequestDecisionCreateItem], UnsetType]=unset, **kwargs): + """ + Request object to update a change request. + + :param data: Data object to update a change request. + :type data: ChangeRequestUpdateData + + :param included: Included resources for the change request update. + :type included: [ChangeRequestDecisionCreateItem], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/change_request_user_relationship.py b/datadog_api_client/v2/model/change_request_user_relationship.py new file mode 100644 index 0000000000..002b575645 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_user_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.change_request_user_relationship_data import ChangeRequestUserRelationshipData + +class ChangeRequestUserRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.change_request_user_relationship_data import ChangeRequestUserRelationshipData + return { + "data": (ChangeRequestUserRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ChangeRequestUserRelationshipData, none_type], **kwargs): + """ + Relationship to a user. + + :param data: User relationship data. + :type data: ChangeRequestUserRelationshipData, none_type + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/change_request_user_relationship_data.py b/datadog_api_client/v2/model/change_request_user_relationship_data.py new file mode 100644 index 0000000000..5f95cfe281 --- /dev/null +++ b/datadog_api_client/v2/model/change_request_user_relationship_data.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ChangeRequestUserRelationshipData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: str, **kwargs): + """ + User relationship data. + + :param id: The user UUID. + :type id: str + + :param type: The user resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/chargeback_breakdown.py b/datadog_api_client/v2/model/chargeback_breakdown.py new file mode 100644 index 0000000000..1494762bc4 --- /dev/null +++ b/datadog_api_client/v2/model/chargeback_breakdown.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ChargebackBreakdown(ModelNormal): + @cached_property + def openapi_types(_): + return { + "charge_type": (str,), + "cost": (float,), + "product_name": (str,), + } + attribute_map = { + "charge_type": "charge_type", + "cost": "cost", + "product_name": "product_name", + } + + def __init__(self_, charge_type: Union[str, UnsetType]=unset, cost: Union[float, UnsetType]=unset, product_name: Union[str, UnsetType]=unset, **kwargs): + """ + Charges breakdown. + + :param charge_type: The type of charge for a particular product. + :type charge_type: str, optional + + :param cost: The cost for a particular product and charge type during a given month. + :type cost: float, optional + + :param product_name: The product for which cost is being reported. + :type product_name: str, optional + """ + if charge_type is not unset: + kwargs["charge_type"] = charge_type + if cost is not unset: + kwargs["cost"] = cost + if product_name is not unset: + kwargs["product_name"] = product_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_aggregate_bucket_value.py b/datadog_api_client/v2/model/ci_app_aggregate_bucket_value.py new file mode 100644 index 0000000000..4ab9a9e99e --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_aggregate_bucket_value.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppAggregateBucketValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A bucket value, can either be a timeseries or a single value. + """ + 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.ci_app_aggregate_bucket_value_timeseries import CIAppAggregateBucketValueTimeseries + return { + "oneOf": [ + str, + float, + CIAppAggregateBucketValueTimeseries, + ], + } diff --git a/datadog_api_client/v2/model/ci_app_aggregate_bucket_value_timeseries.py b/datadog_api_client/v2/model/ci_app_aggregate_bucket_value_timeseries.py new file mode 100644 index 0000000000..830d17782c --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_aggregate_bucket_value_timeseries.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppAggregateBucketValueTimeseries(ModelSimple): + """ + A timeseries array. + + + :type value: [CIAppAggregateBucketValueTimeseriesPoint] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_aggregate_bucket_value_timeseries_point import CIAppAggregateBucketValueTimeseriesPoint + return { + "value": ([CIAppAggregateBucketValueTimeseriesPoint],), + } diff --git a/datadog_api_client/v2/model/ci_app_aggregate_bucket_value_timeseries_point.py b/datadog_api_client/v2/model/ci_app_aggregate_bucket_value_timeseries_point.py new file mode 100644 index 0000000000..058fa93aad --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_aggregate_bucket_value_timeseries_point.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppAggregateBucketValueTimeseriesPoint(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time": (datetime,), + "value": (float,), + } + attribute_map = { + "time": "time", + "value": "value", + } + + def __init__(self_, time: Union[datetime, UnsetType]=unset, value: Union[float, UnsetType]=unset, **kwargs): + """ + A timeseries point. + + :param time: The time value for this point. + :type time: datetime, optional + + :param value: The value for this point. + :type value: float, optional + """ + if time is not unset: + kwargs["time"] = time + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_aggregate_sort.py b/datadog_api_client/v2/model/ci_app_aggregate_sort.py new file mode 100644 index 0000000000..1828b7a796 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_aggregate_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_aggregation_function import CIAppAggregationFunction + from datadog_api_client.v2.model.ci_app_sort_order import CIAppSortOrder + from datadog_api_client.v2.model.ci_app_aggregate_sort_type import CIAppAggregateSortType + +class CIAppAggregateSort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_aggregation_function import CIAppAggregationFunction + from datadog_api_client.v2.model.ci_app_sort_order import CIAppSortOrder + from datadog_api_client.v2.model.ci_app_aggregate_sort_type import CIAppAggregateSortType + return { + "aggregation": (CIAppAggregationFunction,), + "metric": (str,), + "order": (CIAppSortOrder,), + "type": (CIAppAggregateSortType,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + "order": "order", + "type": "type", + } + + def __init__(self_, aggregation: Union[CIAppAggregationFunction, UnsetType]=unset, metric: Union[str, UnsetType]=unset, order: Union[CIAppSortOrder, UnsetType]=unset, type: Union[CIAppAggregateSortType, UnsetType]=unset, **kwargs): + """ + A sort rule. The ``aggregation`` field is required when ``type`` is ``measure``. + + :param aggregation: An aggregation function. + :type aggregation: CIAppAggregationFunction, optional + + :param metric: The metric to sort by (only used for ``type=measure`` ). + :type metric: str, optional + + :param order: The order to use, ascending or descending. + :type order: CIAppSortOrder, optional + + :param type: The type of sorting algorithm. + :type type: CIAppAggregateSortType, optional + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if metric is not unset: + kwargs["metric"] = metric + if order is not unset: + kwargs["order"] = order + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_aggregate_sort_type.py b/datadog_api_client/v2/model/ci_app_aggregate_sort_type.py new file mode 100644 index 0000000000..d7d83d7248 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_aggregate_sort_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppAggregateSortType(ModelSimple): + """ + The type of sorting algorithm. + + :param value: If omitted defaults to "alphabetical". Must be one of ["alphabetical", "measure"]. + :type value: str + """ + + allowed_values = { + "alphabetical", + "measure", + } + ALPHABETICAL: ClassVar["CIAppAggregateSortType"] + MEASURE: ClassVar["CIAppAggregateSortType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppAggregateSortType.ALPHABETICAL = CIAppAggregateSortType("alphabetical") +CIAppAggregateSortType.MEASURE = CIAppAggregateSortType("measure") diff --git a/datadog_api_client/v2/model/ci_app_aggregation_function.py b/datadog_api_client/v2/model/ci_app_aggregation_function.py new file mode 100644 index 0000000000..8adf85ba86 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_aggregation_function.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppAggregationFunction(ModelSimple): + """ + An aggregation function. + + :param value: Must be one of ["count", "cardinality", "pc75", "pc90", "pc95", "pc98", "pc99", "sum", "min", "max", "avg", "median", "latest", "earliest", "most_frequent", "delta"]. + :type value: str + """ + + allowed_values = { + "count", + "cardinality", + "pc75", + "pc90", + "pc95", + "pc98", + "pc99", + "sum", + "min", + "max", + "avg", + "median", + "latest", + "earliest", + "most_frequent", + "delta", + } + COUNT: ClassVar["CIAppAggregationFunction"] + CARDINALITY: ClassVar["CIAppAggregationFunction"] + PERCENTILE_75: ClassVar["CIAppAggregationFunction"] + PERCENTILE_90: ClassVar["CIAppAggregationFunction"] + PERCENTILE_95: ClassVar["CIAppAggregationFunction"] + PERCENTILE_98: ClassVar["CIAppAggregationFunction"] + PERCENTILE_99: ClassVar["CIAppAggregationFunction"] + SUM: ClassVar["CIAppAggregationFunction"] + MIN: ClassVar["CIAppAggregationFunction"] + MAX: ClassVar["CIAppAggregationFunction"] + AVG: ClassVar["CIAppAggregationFunction"] + MEDIAN: ClassVar["CIAppAggregationFunction"] + LATEST: ClassVar["CIAppAggregationFunction"] + EARLIEST: ClassVar["CIAppAggregationFunction"] + MOST_FREQUENT: ClassVar["CIAppAggregationFunction"] + DELTA: ClassVar["CIAppAggregationFunction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppAggregationFunction.COUNT = CIAppAggregationFunction("count") +CIAppAggregationFunction.CARDINALITY = CIAppAggregationFunction("cardinality") +CIAppAggregationFunction.PERCENTILE_75 = CIAppAggregationFunction("pc75") +CIAppAggregationFunction.PERCENTILE_90 = CIAppAggregationFunction("pc90") +CIAppAggregationFunction.PERCENTILE_95 = CIAppAggregationFunction("pc95") +CIAppAggregationFunction.PERCENTILE_98 = CIAppAggregationFunction("pc98") +CIAppAggregationFunction.PERCENTILE_99 = CIAppAggregationFunction("pc99") +CIAppAggregationFunction.SUM = CIAppAggregationFunction("sum") +CIAppAggregationFunction.MIN = CIAppAggregationFunction("min") +CIAppAggregationFunction.MAX = CIAppAggregationFunction("max") +CIAppAggregationFunction.AVG = CIAppAggregationFunction("avg") +CIAppAggregationFunction.MEDIAN = CIAppAggregationFunction("median") +CIAppAggregationFunction.LATEST = CIAppAggregationFunction("latest") +CIAppAggregationFunction.EARLIEST = CIAppAggregationFunction("earliest") +CIAppAggregationFunction.MOST_FREQUENT = CIAppAggregationFunction("most_frequent") +CIAppAggregationFunction.DELTA = CIAppAggregationFunction("delta") diff --git a/datadog_api_client/v2/model/ci_app_ci_error.py b/datadog_api_client/v2/model/ci_app_ci_error.py new file mode 100644 index 0000000000..66b0f69d33 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_ci_error.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_ci_error_domain import CIAppCIErrorDomain + +class CIAppCIError(ModelNormal): + validations = { + "message": { + "max_length": 5000, + }, + "type": { + "max_length": 100, + }, + } + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_ci_error_domain import CIAppCIErrorDomain + return { + "domain": (CIAppCIErrorDomain,), + "message": (str, none_type), + "stack": (str, none_type), + "type": (str, none_type), + } + attribute_map = { + "domain": "domain", + "message": "message", + "stack": "stack", + "type": "type", + } + + def __init__(self_, domain: Union[CIAppCIErrorDomain, UnsetType]=unset, message: Union[str, none_type, UnsetType]=unset, stack: Union[str, none_type, UnsetType]=unset, type: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Contains information of the CI error. + + :param domain: Error category used to differentiate between issues related to the developer or provider environments. + :type domain: CIAppCIErrorDomain, optional + + :param message: Error message. + :type message: str, none_type, optional + + :param stack: The stack trace of the reported errors. + :type stack: str, none_type, optional + + :param type: Short description of the error type. + :type type: str, none_type, optional + """ + if domain is not unset: + kwargs["domain"] = domain + if message is not unset: + kwargs["message"] = message + if stack is not unset: + kwargs["stack"] = stack + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_ci_error_domain.py b/datadog_api_client/v2/model/ci_app_ci_error_domain.py new file mode 100644 index 0000000000..07fe8f1d6c --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_ci_error_domain.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppCIErrorDomain(ModelSimple): + """ + Error category used to differentiate between issues related to the developer or provider environments. + + :param value: Must be one of ["provider", "user", "unknown"]. + :type value: str + """ + + allowed_values = { + "provider", + "user", + "unknown", + } + PROVIDER: ClassVar["CIAppCIErrorDomain"] + USER: ClassVar["CIAppCIErrorDomain"] + UNKNOWN: ClassVar["CIAppCIErrorDomain"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppCIErrorDomain.PROVIDER = CIAppCIErrorDomain("provider") +CIAppCIErrorDomain.USER = CIAppCIErrorDomain("user") +CIAppCIErrorDomain.UNKNOWN = CIAppCIErrorDomain("unknown") diff --git a/datadog_api_client/v2/model/ci_app_compute.py b/datadog_api_client/v2/model/ci_app_compute.py new file mode 100644 index 0000000000..7b79d4ac8a --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_compute.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_aggregation_function import CIAppAggregationFunction + from datadog_api_client.v2.model.ci_app_compute_type import CIAppComputeType + +class CIAppCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_aggregation_function import CIAppAggregationFunction + from datadog_api_client.v2.model.ci_app_compute_type import CIAppComputeType + return { + "aggregation": (CIAppAggregationFunction,), + "interval": (str,), + "metric": (str,), + "type": (CIAppComputeType,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + "type": "type", + } + + def __init__(self_, aggregation: CIAppAggregationFunction, interval: Union[str, UnsetType]=unset, metric: Union[str, UnsetType]=unset, type: Union[CIAppComputeType, UnsetType]=unset, **kwargs): + """ + A compute rule to compute metrics or timeseries. + + :param aggregation: An aggregation function. + :type aggregation: CIAppAggregationFunction + + :param interval: The time buckets' size (only used for type=timeseries) + Defaults to a resolution of 150 points. + :type interval: str, optional + + :param metric: The metric to use. + :type metric: str, optional + + :param type: The type of compute. + :type type: CIAppComputeType, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v2/model/ci_app_compute_type.py b/datadog_api_client/v2/model/ci_app_compute_type.py new file mode 100644 index 0000000000..3720dc4519 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_compute_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppComputeType(ModelSimple): + """ + The type of compute. + + :param value: If omitted defaults to "total". Must be one of ["timeseries", "total"]. + :type value: str + """ + + allowed_values = { + "timeseries", + "total", + } + TIMESERIES: ClassVar["CIAppComputeType"] + TOTAL: ClassVar["CIAppComputeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppComputeType.TIMESERIES = CIAppComputeType("timeseries") +CIAppComputeType.TOTAL = CIAppComputeType("total") diff --git a/datadog_api_client/v2/model/ci_app_computes.py b/datadog_api_client/v2/model/ci_app_computes.py new file mode 100644 index 0000000000..2cf12632cd --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_computes.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_aggregate_bucket_value import CIAppAggregateBucketValue + +class CIAppComputes(ModelNormal): + @cached_property + def additional_properties_type(_): + from datadog_api_client.v2.model.ci_app_aggregate_bucket_value import CIAppAggregateBucketValue + return (CIAppAggregateBucketValue,) + + def __init__(self_, **kwargs): + """ + A map of the metric name to value for regular compute, or a list of values for a timeseries. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_create_pipeline_event_request.py b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request.py new file mode 100644 index 0000000000..d259c209cf --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_data_single_or_array import CIAppCreatePipelineEventRequestDataSingleOrArray + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_data import CIAppCreatePipelineEventRequestData + +class CIAppCreatePipelineEventRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_data_single_or_array import CIAppCreatePipelineEventRequestDataSingleOrArray + return { + "data": (CIAppCreatePipelineEventRequestDataSingleOrArray,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CIAppCreatePipelineEventRequestDataSingleOrArray, CIAppCreatePipelineEventRequestData, List[CIAppCreatePipelineEventRequestData], UnsetType]=unset, **kwargs): + """ + Request object. + + :param data: Data of the pipeline events to create. + :type data: CIAppCreatePipelineEventRequestDataSingleOrArray, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_attributes.py b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_attributes.py new file mode 100644 index 0000000000..9dc0288e38 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_attributes_resource import CIAppCreatePipelineEventRequestAttributesResource + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline import CIAppPipelineEventPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_stage import CIAppPipelineEventStage + from datadog_api_client.v2.model.ci_app_pipeline_event_job import CIAppPipelineEventJob + from datadog_api_client.v2.model.ci_app_pipeline_event_step import CIAppPipelineEventStep + +class CIAppCreatePipelineEventRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_attributes_resource import CIAppCreatePipelineEventRequestAttributesResource + return { + "env": (str,), + "provider_name": (str,), + "resource": (CIAppCreatePipelineEventRequestAttributesResource,), + "service": (str,), + } + attribute_map = { + "env": "env", + "provider_name": "provider_name", + "resource": "resource", + "service": "service", + } + + def __init__(self_, resource: Union[CIAppCreatePipelineEventRequestAttributesResource, CIAppPipelineEventPipeline, CIAppPipelineEventStage, CIAppPipelineEventJob, CIAppPipelineEventStep], env: Union[str, UnsetType]=unset, provider_name: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the pipeline event to create. + + :param env: The Datadog environment. + :type env: str, optional + + :param provider_name: The name of the CI provider. By default, this is "custom". + :type provider_name: str, optional + + :param resource: Details of the CI pipeline event. + :type resource: CIAppCreatePipelineEventRequestAttributesResource + + :param service: If the CI provider is SaaS, use this to differentiate between instances. + :type service: str, optional + """ + if env is not unset: + kwargs["env"] = env + if provider_name is not unset: + kwargs["provider_name"] = provider_name + if service is not unset: + kwargs["service"] = service + super().__init__(kwargs) + + + self_.resource = resource diff --git a/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_attributes_resource.py b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_attributes_resource.py new file mode 100644 index 0000000000..0166b12a24 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_attributes_resource.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppCreatePipelineEventRequestAttributesResource(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Details of the CI pipeline event. + + :param dependencies: A list of stage IDs that this stage depends on. + :type dependencies: [str], none_type, optional + + :param end: Time when the stage run finished. The time format must be RFC3339. + :type end: datetime + + :param error: Contains information of the CI error. + :type error: CIAppCIError, none_type, optional + + :param git: If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either `tag` or `branch` has to be provided, but not both. + :type git: CIAppGitInfo, none_type, optional + + :param id: UUID for the stage. It has to be unique at least in the pipeline scope. + :type id: str + + :param level: Used to distinguish between pipelines, stages, jobs and steps. + :type level: CIAppPipelineEventStageLevel + + :param metrics: A list of user-defined metrics. The metrics must follow the `key:value` pattern and the value must be numeric. + :type metrics: [str], none_type, optional + + :param name: The name for the stage. + :type name: str + + :param node: Contains information of the host running the pipeline, stage, job, or step. + :type node: CIAppHostInfo, none_type, optional + + :param parameters: A map of key-value parameters or environment variables that were defined for the pipeline. + :type parameters: CIAppPipelineEventParameters, none_type, optional + + :param pipeline_name: The parent pipeline name. + :type pipeline_name: str + + :param pipeline_unique_id: The parent pipeline UUID. + :type pipeline_unique_id: str + + :param queue_time: The queue time in milliseconds, if applicable. + :type queue_time: int, none_type, optional + + :param start: Time when the stage run started (it should not include any queue time). The time format must be RFC3339. + :type start: datetime + + :param status: The final status of the stage. + :type status: CIAppPipelineEventStageStatus + + :param tags: A list of user-defined tags. The tags must follow the `key:value` pattern. + :type tags: [str], none_type, optional + + :param job_id: The parent job UUID (if applicable). + :type job_id: str, none_type, optional + + :param job_name: The parent job name (if applicable). + :type job_name: str, none_type, optional + + :param stage_id: The parent stage UUID (if applicable). + :type stage_id: str, none_type, optional + + :param stage_name: The parent stage name (if applicable). + :type stage_name: str, none_type, optional + + :param url: The URL to look at the step in the CI provider UI. + :type url: str, none_type, 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.ci_app_pipeline_event_pipeline import CIAppPipelineEventPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_stage import CIAppPipelineEventStage + from datadog_api_client.v2.model.ci_app_pipeline_event_job import CIAppPipelineEventJob + from datadog_api_client.v2.model.ci_app_pipeline_event_step import CIAppPipelineEventStep + return { + "oneOf": [ + CIAppPipelineEventPipeline, + CIAppPipelineEventStage, + CIAppPipelineEventJob, + CIAppPipelineEventStep, + ], + } diff --git a/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_data.py b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_data.py new file mode 100644 index 0000000000..668c46c012 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_attributes import CIAppCreatePipelineEventRequestAttributes + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_data_type import CIAppCreatePipelineEventRequestDataType + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline import CIAppPipelineEventPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_stage import CIAppPipelineEventStage + from datadog_api_client.v2.model.ci_app_pipeline_event_job import CIAppPipelineEventJob + from datadog_api_client.v2.model.ci_app_pipeline_event_step import CIAppPipelineEventStep + +class CIAppCreatePipelineEventRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_attributes import CIAppCreatePipelineEventRequestAttributes + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_data_type import CIAppCreatePipelineEventRequestDataType + return { + "attributes": (CIAppCreatePipelineEventRequestAttributes,), + "type": (CIAppCreatePipelineEventRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[CIAppCreatePipelineEventRequestAttributes, UnsetType]=unset, type: Union[CIAppCreatePipelineEventRequestDataType, UnsetType]=unset, **kwargs): + """ + Data of the pipeline event to create. + + :param attributes: Attributes of the pipeline event to create. + :type attributes: CIAppCreatePipelineEventRequestAttributes, optional + + :param type: Type of the event. + :type type: CIAppCreatePipelineEventRequestDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_data_single_or_array.py b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_data_single_or_array.py new file mode 100644 index 0000000000..79838b15d1 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_data_single_or_array.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppCreatePipelineEventRequestDataSingleOrArray(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Data of the pipeline events to create. + + :param attributes: Attributes of the pipeline event to create. + :type attributes: CIAppCreatePipelineEventRequestAttributes, optional + + :param type: Type of the event. + :type type: CIAppCreatePipelineEventRequestDataType, 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.ci_app_create_pipeline_event_request_data import CIAppCreatePipelineEventRequestData + from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_data import CIAppCreatePipelineEventRequestData + return { + "oneOf": [ + CIAppCreatePipelineEventRequestData, + [CIAppCreatePipelineEventRequestData], + ], + } diff --git a/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_data_type.py b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_data_type.py new file mode 100644 index 0000000000..490694923c --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_create_pipeline_event_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppCreatePipelineEventRequestDataType(ModelSimple): + """ + Type of the event. + + :param value: If omitted defaults to "cipipeline_resource_request". Must be one of ["cipipeline_resource_request"]. + :type value: str + """ + + allowed_values = { + "cipipeline_resource_request", + } + CIPIPELINE_RESOURCE_REQUEST: ClassVar["CIAppCreatePipelineEventRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppCreatePipelineEventRequestDataType.CIPIPELINE_RESOURCE_REQUEST = CIAppCreatePipelineEventRequestDataType("cipipeline_resource_request") diff --git a/datadog_api_client/v2/model/ci_app_event_attributes.py b/datadog_api_client/v2/model/ci_app_event_attributes.py new file mode 100644 index 0000000000..b10e1a517f --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_event_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tags_event_attribute import TagsEventAttribute + from datadog_api_client.v2.model.ci_app_test_level import CIAppTestLevel + +class CIAppEventAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tags_event_attribute import TagsEventAttribute + from datadog_api_client.v2.model.ci_app_test_level import CIAppTestLevel + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tags": (TagsEventAttribute,), + "test_level": (CIAppTestLevel,), + } + attribute_map = { + "attributes": "attributes", + "tags": "tags", + "test_level": "test_level", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, tags: Union[TagsEventAttribute, UnsetType]=unset, test_level: Union[CIAppTestLevel, UnsetType]=unset, **kwargs): + """ + JSON object containing all event attributes and their associated values. + + :param attributes: JSON object of attributes from CI Visibility test events. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tags: Array of tags associated with your event. + :type tags: TagsEventAttribute, optional + + :param test_level: Test run level. + :type test_level: CIAppTestLevel, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if tags is not unset: + kwargs["tags"] = tags + if test_level is not unset: + kwargs["test_level"] = test_level + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_git_hub_account_attributes.py b/datadog_api_client/v2/model/ci_app_git_hub_account_attributes.py new file mode 100644 index 0000000000..9ce6d1063a --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_account_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_git_hub_account_repository import CIAppGitHubAccountRepository + +class CIAppGitHubAccountAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_git_hub_account_repository import CIAppGitHubAccountRepository + return { + "account": (str,), + "enabled": (bool,), + "host": (str,), + "repo_count": (int,), + "repositories": ([CIAppGitHubAccountRepository],), + } + attribute_map = { + "account": "account", + "enabled": "enabled", + "host": "host", + "repo_count": "repo_count", + "repositories": "repositories", + } + + def __init__(self_, account: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, host: Union[str, UnsetType]=unset, repo_count: Union[int, UnsetType]=unset, repositories: Union[List[CIAppGitHubAccountRepository], UnsetType]=unset, **kwargs): + """ + Attributes describing a GitHub account's CI Visibility opt-in status. + + :param account: The GitHub account (organization or user) name. + :type account: str, optional + + :param enabled: Whether CI Visibility is enabled at the account level. + :type enabled: bool, optional + + :param host: The GitHub host ( ``github.com`` or a GitHub Enterprise Server (GHES) hostname) this account belongs to. + :type host: str, optional + + :param repo_count: The number of repositories known for this account. + :type repo_count: int, optional + + :param repositories: The repositories belonging to this account, with their individual opt-in status. + :type repositories: [CIAppGitHubAccountRepository], optional + """ + if account is not unset: + kwargs["account"] = account + if enabled is not unset: + kwargs["enabled"] = enabled + if host is not unset: + kwargs["host"] = host + if repo_count is not unset: + kwargs["repo_count"] = repo_count + if repositories is not unset: + kwargs["repositories"] = repositories + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_git_hub_account_data.py b/datadog_api_client/v2/model/ci_app_git_hub_account_data.py new file mode 100644 index 0000000000..954fc9e0e8 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_account_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_git_hub_account_attributes import CIAppGitHubAccountAttributes + from datadog_api_client.v2.model.ci_app_git_hub_account_type import CIAppGitHubAccountType + +class CIAppGitHubAccountData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_git_hub_account_attributes import CIAppGitHubAccountAttributes + from datadog_api_client.v2.model.ci_app_git_hub_account_type import CIAppGitHubAccountType + return { + "attributes": (CIAppGitHubAccountAttributes,), + "id": (str,), + "type": (CIAppGitHubAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CIAppGitHubAccountAttributes, id: str, type: CIAppGitHubAccountType, **kwargs): + """ + Data object for a GitHub account. + + :param attributes: Attributes describing a GitHub account's CI Visibility opt-in status. + :type attributes: CIAppGitHubAccountAttributes + + :param id: The account's unique identifier, in the form ``/`` + (for example ``github.com/datadog`` ). + :type id: str + + :param type: JSON:API type for the GitHub account resource. + The value must always be ``ci_github_account``. + :type type: CIAppGitHubAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ci_app_git_hub_account_repository.py b/datadog_api_client/v2/model/ci_app_git_hub_account_repository.py new file mode 100644 index 0000000000..f3900d64f3 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_account_repository.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppGitHubAccountRepository(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + "name": (str,), + } + attribute_map = { + "enabled": "enabled", + "name": "name", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A GitHub repository within a GitHub account, and its CI Visibility opt-in status. + + :param enabled: Whether CI Visibility is enabled for this repository. + :type enabled: bool, optional + + :param name: The repository name. + :type name: str, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_git_hub_account_response.py b/datadog_api_client/v2/model/ci_app_git_hub_account_response.py new file mode 100644 index 0000000000..e980e04bec --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_account_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_git_hub_account_data import CIAppGitHubAccountData + +class CIAppGitHubAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_git_hub_account_data import CIAppGitHubAccountData + return { + "data": (CIAppGitHubAccountData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CIAppGitHubAccountData, **kwargs): + """ + Response object containing a single GitHub account's CI Visibility opt-in status. + + :param data: Data object for a GitHub account. + :type data: CIAppGitHubAccountData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ci_app_git_hub_account_type.py b/datadog_api_client/v2/model/ci_app_git_hub_account_type.py new file mode 100644 index 0000000000..7c590d754c --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_account_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppGitHubAccountType(ModelSimple): + """ + JSON:API type for the GitHub account resource. + The value must always be `ci_github_account`. + + :param value: If omitted defaults to "ci_github_account". Must be one of ["ci_github_account"]. + :type value: str + """ + + allowed_values = { + "ci_github_account", + } + CI_GITHUB_ACCOUNT: ClassVar["CIAppGitHubAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppGitHubAccountType.CI_GITHUB_ACCOUNT = CIAppGitHubAccountType("ci_github_account") diff --git a/datadog_api_client/v2/model/ci_app_git_hub_account_update_request.py b/datadog_api_client/v2/model/ci_app_git_hub_account_update_request.py new file mode 100644 index 0000000000..5c367f195b --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_account_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_git_hub_account_update_request_data import CIAppGitHubAccountUpdateRequestData + +class CIAppGitHubAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_git_hub_account_update_request_data import CIAppGitHubAccountUpdateRequestData + return { + "data": (CIAppGitHubAccountUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CIAppGitHubAccountUpdateRequestData, **kwargs): + """ + Request object for updating a GitHub account's CI Visibility opt-in status. + + :param data: Data object for updating a GitHub account's CI Visibility opt-in status. + :type data: CIAppGitHubAccountUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ci_app_git_hub_account_update_request_attributes.py b/datadog_api_client/v2/model/ci_app_git_hub_account_update_request_attributes.py new file mode 100644 index 0000000000..bf7b1116de --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_account_update_request_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_git_hub_account_update_request_repository import CIAppGitHubAccountUpdateRequestRepository + +class CIAppGitHubAccountUpdateRequestAttributes(ModelNormal): + validations = { + "account": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_git_hub_account_update_request_repository import CIAppGitHubAccountUpdateRequestRepository + return { + "account": (str,), + "enabled": (bool,), + "host": (str,), + "repository": (CIAppGitHubAccountUpdateRequestRepository,), + } + attribute_map = { + "account": "account", + "enabled": "enabled", + "host": "host", + "repository": "repository", + } + + def __init__(self_, account: str, enabled: Union[bool, UnsetType]=unset, host: Union[str, UnsetType]=unset, repository: Union[CIAppGitHubAccountUpdateRequestRepository, UnsetType]=unset, **kwargs): + """ + Attributes for updating a GitHub account's CI Visibility opt-in status. + At least one of ``enabled`` or ``repository.enabled`` must be provided. + + :param account: The GitHub account (organization or user) name to update, identified by name. + :type account: str + + :param enabled: Whether to enable or disable CI Visibility at the account level. + :type enabled: bool, optional + + :param host: The GitHub host ( ``github.com`` or a GHES hostname) the account belongs to. Required to disambiguate + when the same account name exists on more than one host. + :type host: str, optional + + :param repository: Repository-level opt-in change to apply, identified by name. + :type repository: CIAppGitHubAccountUpdateRequestRepository, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if host is not unset: + kwargs["host"] = host + if repository is not unset: + kwargs["repository"] = repository + super().__init__(kwargs) + + + self_.account = account diff --git a/datadog_api_client/v2/model/ci_app_git_hub_account_update_request_data.py b/datadog_api_client/v2/model/ci_app_git_hub_account_update_request_data.py new file mode 100644 index 0000000000..69c924ec53 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_account_update_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_git_hub_account_update_request_attributes import CIAppGitHubAccountUpdateRequestAttributes + from datadog_api_client.v2.model.ci_app_git_hub_account_type import CIAppGitHubAccountType + +class CIAppGitHubAccountUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_git_hub_account_update_request_attributes import CIAppGitHubAccountUpdateRequestAttributes + from datadog_api_client.v2.model.ci_app_git_hub_account_type import CIAppGitHubAccountType + return { + "attributes": (CIAppGitHubAccountUpdateRequestAttributes,), + "type": (CIAppGitHubAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CIAppGitHubAccountUpdateRequestAttributes, type: CIAppGitHubAccountType, **kwargs): + """ + Data object for updating a GitHub account's CI Visibility opt-in status. + + :param attributes: Attributes for updating a GitHub account's CI Visibility opt-in status. + At least one of ``enabled`` or ``repository.enabled`` must be provided. + :type attributes: CIAppGitHubAccountUpdateRequestAttributes + + :param type: JSON:API type for the GitHub account resource. + The value must always be ``ci_github_account``. + :type type: CIAppGitHubAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/ci_app_git_hub_account_update_request_repository.py b/datadog_api_client/v2/model/ci_app_git_hub_account_update_request_repository.py new file mode 100644 index 0000000000..ffe55f5e1c --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_account_update_request_repository.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppGitHubAccountUpdateRequestRepository(ModelNormal): + validations = { + "name": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + "name": (str,), + } + attribute_map = { + "enabled": "enabled", + "name": "name", + } + + def __init__(self_, enabled: bool, name: str, **kwargs): + """ + Repository-level opt-in change to apply, identified by name. + + :param enabled: Whether to enable or disable CI Visibility for this repository. + :type enabled: bool + + :param name: The repository name to update. + :type name: str + """ + super().__init__(kwargs) + + + self_.enabled = enabled + self_.name = name diff --git a/datadog_api_client/v2/model/ci_app_git_hub_accounts_response.py b/datadog_api_client/v2/model/ci_app_git_hub_accounts_response.py new file mode 100644 index 0000000000..a7316b9aa1 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_hub_accounts_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_git_hub_account_data import CIAppGitHubAccountData + +class CIAppGitHubAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_git_hub_account_data import CIAppGitHubAccountData + return { + "data": ([CIAppGitHubAccountData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CIAppGitHubAccountData], **kwargs): + """ + Response object containing a list of GitHub accounts and their CI Visibility opt-in status. + + :param data: + :type data: [CIAppGitHubAccountData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ci_app_git_info.py b/datadog_api_client/v2/model/ci_app_git_info.py new file mode 100644 index 0000000000..32bb60c345 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_git_info.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppGitInfo(ModelNormal): + validations = { + "sha": { + }, + } + _nullable = True + @cached_property + def openapi_types(_): + return { + "author_email": (str,), + "author_name": (str, none_type), + "author_time": (str, none_type), + "branch": (str, none_type), + "commit_time": (str, none_type), + "committer_email": (str, none_type), + "committer_name": (str, none_type), + "default_branch": (str, none_type), + "message": (str, none_type), + "repository_url": (str,), + "sha": (str,), + "tag": (str, none_type), + } + attribute_map = { + "author_email": "author_email", + "author_name": "author_name", + "author_time": "author_time", + "branch": "branch", + "commit_time": "commit_time", + "committer_email": "committer_email", + "committer_name": "committer_name", + "default_branch": "default_branch", + "message": "message", + "repository_url": "repository_url", + "sha": "sha", + "tag": "tag", + } + + def __init__(self_, author_email: str, repository_url: str, sha: str, author_name: Union[str, none_type, UnsetType]=unset, author_time: Union[str, none_type, UnsetType]=unset, branch: Union[str, none_type, UnsetType]=unset, commit_time: Union[str, none_type, UnsetType]=unset, committer_email: Union[str, none_type, UnsetType]=unset, committer_name: Union[str, none_type, UnsetType]=unset, default_branch: Union[str, none_type, UnsetType]=unset, message: Union[str, none_type, UnsetType]=unset, tag: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either ``tag`` or ``branch`` has to be provided, but not both. + + :param author_email: The commit author email. + :type author_email: str + + :param author_name: The commit author name. + :type author_name: str, none_type, optional + + :param author_time: The commit author timestamp in RFC3339 format. + :type author_time: str, none_type, optional + + :param branch: The branch name (if a tag use the tag parameter). + :type branch: str, none_type, optional + + :param commit_time: The commit timestamp in RFC3339 format. + :type commit_time: str, none_type, optional + + :param committer_email: The committer email. + :type committer_email: str, none_type, optional + + :param committer_name: The committer name. + :type committer_name: str, none_type, optional + + :param default_branch: The Git repository's default branch. + :type default_branch: str, none_type, optional + + :param message: The commit message. + :type message: str, none_type, optional + + :param repository_url: The URL of the repository. + :type repository_url: str + + :param sha: The git commit SHA. + :type sha: str + + :param tag: The tag name (if a branch use the branch parameter). + :type tag: str, none_type, optional + """ + if author_name is not unset: + kwargs["author_name"] = author_name + if author_time is not unset: + kwargs["author_time"] = author_time + if branch is not unset: + kwargs["branch"] = branch + if commit_time is not unset: + kwargs["commit_time"] = commit_time + if committer_email is not unset: + kwargs["committer_email"] = committer_email + if committer_name is not unset: + kwargs["committer_name"] = committer_name + if default_branch is not unset: + kwargs["default_branch"] = default_branch + if message is not unset: + kwargs["message"] = message + if tag is not unset: + kwargs["tag"] = tag + super().__init__(kwargs) + + + self_.author_email = author_email + self_.repository_url = repository_url + self_.sha = sha diff --git a/datadog_api_client/v2/model/ci_app_group_by_histogram.py b/datadog_api_client/v2/model/ci_app_group_by_histogram.py new file mode 100644 index 0000000000..ba6240cf81 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_group_by_histogram.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppGroupByHistogram(ModelNormal): + @cached_property + def openapi_types(_): + return { + "interval": (float,), + "max": (float,), + "min": (float,), + } + attribute_map = { + "interval": "interval", + "max": "max", + "min": "min", + } + + def __init__(self_, interval: float, max: float, min: float, **kwargs): + """ + Used to perform a histogram computation (only for measure facets). + At most, 100 buckets are allowed, the number of buckets is ``(max - min)/interval``. + + :param interval: The bin size of the histogram buckets. + :type interval: float + + :param max: The maximum value for the measure used in the histogram + (values greater than this one are filtered out). + :type max: float + + :param min: The minimum value for the measure used in the histogram + (values smaller than this one are filtered out). + :type min: float + """ + super().__init__(kwargs) + + + self_.interval = interval + self_.max = max + self_.min = min diff --git a/datadog_api_client/v2/model/ci_app_group_by_missing.py b/datadog_api_client/v2/model/ci_app_group_by_missing.py new file mode 100644 index 0000000000..d8a4578ae5 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_group_by_missing.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppGroupByMissing(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The value to use for logs that don't have the facet used to group-by. + """ + 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 + return { + "oneOf": [ + str, + float, + ], + } diff --git a/datadog_api_client/v2/model/ci_app_group_by_total.py b/datadog_api_client/v2/model/ci_app_group_by_total.py new file mode 100644 index 0000000000..b94a65a30b --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_group_by_total.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppGroupByTotal(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A resulting object to put the given computes in over all the matching records. + """ + 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 + return { + "oneOf": [ + bool, + str, + float, + ], + } diff --git a/datadog_api_client/v2/model/ci_app_host_info.py b/datadog_api_client/v2/model/ci_app_host_info.py new file mode 100644 index 0000000000..8abb3ecbba --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_host_info.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppHostInfo(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "hostname": (str,), + "labels": ([str],), + "name": (str,), + "workspace": (str,), + } + attribute_map = { + "hostname": "hostname", + "labels": "labels", + "name": "name", + "workspace": "workspace", + } + + def __init__(self_, hostname: Union[str, UnsetType]=unset, labels: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, workspace: Union[str, UnsetType]=unset, **kwargs): + """ + Contains information of the host running the pipeline, stage, job, or step. + + :param hostname: FQDN of the host. + :type hostname: str, optional + + :param labels: A list of labels used to select or identify the node. + :type labels: [str], optional + + :param name: Name for the host. + :type name: str, optional + + :param workspace: The path where the code is checked out. + :type workspace: str, optional + """ + if hostname is not unset: + kwargs["hostname"] = hostname + if labels is not unset: + kwargs["labels"] = labels + if name is not unset: + kwargs["name"] = name + if workspace is not unset: + kwargs["workspace"] = workspace + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event.py b/datadog_api_client/v2/model/ci_app_pipeline_event.py new file mode 100644 index 0000000000..41c89a64c1 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_pipeline_event_attributes import CIAppPipelineEventAttributes + from datadog_api_client.v2.model.ci_app_pipeline_event_type_name import CIAppPipelineEventTypeName + +class CIAppPipelineEvent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_pipeline_event_attributes import CIAppPipelineEventAttributes + from datadog_api_client.v2.model.ci_app_pipeline_event_type_name import CIAppPipelineEventTypeName + return { + "attributes": (CIAppPipelineEventAttributes,), + "id": (str,), + "type": (CIAppPipelineEventTypeName,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CIAppPipelineEventAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CIAppPipelineEventTypeName, UnsetType]=unset, **kwargs): + """ + Object description of a pipeline event after being processed and stored by Datadog. + + :param attributes: JSON object containing all event attributes and their associated values. + :type attributes: CIAppPipelineEventAttributes, optional + + :param id: Unique ID of the event. + :type id: str, optional + + :param type: Type of the event. + :type type: CIAppPipelineEventTypeName, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_attributes.py b/datadog_api_client/v2/model/ci_app_pipeline_event_attributes.py new file mode 100644 index 0000000000..01d9cce179 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_pipeline_level import CIAppPipelineLevel + from datadog_api_client.v2.model.tags_event_attribute import TagsEventAttribute + +class CIAppPipelineEventAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_pipeline_level import CIAppPipelineLevel + from datadog_api_client.v2.model.tags_event_attribute import TagsEventAttribute + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "ci_level": (CIAppPipelineLevel,), + "tags": (TagsEventAttribute,), + } + attribute_map = { + "attributes": "attributes", + "ci_level": "ci_level", + "tags": "tags", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, ci_level: Union[CIAppPipelineLevel, UnsetType]=unset, tags: Union[TagsEventAttribute, UnsetType]=unset, **kwargs): + """ + JSON object containing all event attributes and their associated values. + + :param attributes: JSON object of attributes from CI Visibility pipeline events. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param ci_level: Pipeline execution level. + :type ci_level: CIAppPipelineLevel, optional + + :param tags: Array of tags associated with your event. + :type tags: TagsEventAttribute, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if ci_level is not unset: + kwargs["ci_level"] = ci_level + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_finished_job.py b/datadog_api_client/v2/model/ci_app_pipeline_event_finished_job.py new file mode 100644 index 0000000000..9d0d37f7a5 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_finished_job.py @@ -0,0 +1,183 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_job_level import CIAppPipelineEventJobLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_job_status import CIAppPipelineEventJobStatus + +class CIAppPipelineEventFinishedJob(ModelNormal): + validations = { + "queue_time": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_job_level import CIAppPipelineEventJobLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_job_status import CIAppPipelineEventJobStatus + return { + "dependencies": ([str], none_type), + "end": (datetime,), + "error": (CIAppCIError,), + "git": (CIAppGitInfo,), + "id": (str,), + "level": (CIAppPipelineEventJobLevel,), + "metrics": ([str],), + "name": (str,), + "node": (CIAppHostInfo,), + "parameters": (CIAppPipelineEventParameters,), + "pipeline_name": (str,), + "pipeline_unique_id": (str,), + "queue_time": (int, none_type), + "stage_id": (str, none_type), + "stage_name": (str, none_type), + "start": (datetime,), + "status": (CIAppPipelineEventJobStatus,), + "tags": ([str],), + "url": (str,), + } + attribute_map = { + "dependencies": "dependencies", + "end": "end", + "error": "error", + "git": "git", + "id": "id", + "level": "level", + "metrics": "metrics", + "name": "name", + "node": "node", + "parameters": "parameters", + "pipeline_name": "pipeline_name", + "pipeline_unique_id": "pipeline_unique_id", + "queue_time": "queue_time", + "stage_id": "stage_id", + "stage_name": "stage_name", + "start": "start", + "status": "status", + "tags": "tags", + "url": "url", + } + + def __init__(self_, end: datetime, id: str, level: CIAppPipelineEventJobLevel, name: str, pipeline_name: str, pipeline_unique_id: str, start: datetime, status: CIAppPipelineEventJobStatus, url: str, dependencies: Union[List[str], none_type, UnsetType]=unset, error: Union[CIAppCIError, none_type, UnsetType]=unset, git: Union[CIAppGitInfo, none_type, UnsetType]=unset, metrics: Union[List[str], none_type, UnsetType]=unset, node: Union[CIAppHostInfo, none_type, UnsetType]=unset, parameters: Union[CIAppPipelineEventParameters, none_type, UnsetType]=unset, queue_time: Union[int, none_type, UnsetType]=unset, stage_id: Union[str, none_type, UnsetType]=unset, stage_name: Union[str, none_type, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Details of a finished CI job. + + :param dependencies: A list of job IDs that this job depends on. + :type dependencies: [str], none_type, optional + + :param end: Time when the job run finished. The time format must be RFC3339. + :type end: datetime + + :param error: Contains information of the CI error. + :type error: CIAppCIError, none_type, optional + + :param git: If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either ``tag`` or ``branch`` has to be provided, but not both. + :type git: CIAppGitInfo, none_type, optional + + :param id: The UUID for the job. It has to be unique within each pipeline execution. + :type id: str + + :param level: Used to distinguish between pipelines, stages, jobs, and steps. + :type level: CIAppPipelineEventJobLevel + + :param metrics: A list of user-defined metrics. The metrics must follow the ``key:value`` pattern and the value must be numeric. + :type metrics: [str], none_type, optional + + :param name: The name for the job. + :type name: str + + :param node: Contains information of the host running the pipeline, stage, job, or step. + :type node: CIAppHostInfo, none_type, optional + + :param parameters: A map of key-value parameters or environment variables that were defined for the pipeline. + :type parameters: CIAppPipelineEventParameters, none_type, optional + + :param pipeline_name: The parent pipeline name. + :type pipeline_name: str + + :param pipeline_unique_id: The parent pipeline UUID. + :type pipeline_unique_id: str + + :param queue_time: The queue time in milliseconds, if applicable. + :type queue_time: int, none_type, optional + + :param stage_id: The parent stage UUID (if applicable). + :type stage_id: str, none_type, optional + + :param stage_name: The parent stage name (if applicable). + :type stage_name: str, none_type, optional + + :param start: Time when the job run instance started (it should not include any queue time). + The time format must be RFC3339. + :type start: datetime + + :param status: The final status of the job. + :type status: CIAppPipelineEventJobStatus + + :param tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. + :type tags: [str], none_type, optional + + :param url: The URL to look at the job in the CI provider UI. + :type url: str + """ + if dependencies is not unset: + kwargs["dependencies"] = dependencies + if error is not unset: + kwargs["error"] = error + if git is not unset: + kwargs["git"] = git + if metrics is not unset: + kwargs["metrics"] = metrics + if node is not unset: + kwargs["node"] = node + if parameters is not unset: + kwargs["parameters"] = parameters + if queue_time is not unset: + kwargs["queue_time"] = queue_time + if stage_id is not unset: + kwargs["stage_id"] = stage_id + if stage_name is not unset: + kwargs["stage_name"] = stage_name + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.end = end + self_.id = id + self_.level = level + self_.name = name + self_.pipeline_name = pipeline_name + self_.pipeline_unique_id = pipeline_unique_id + self_.start = start + self_.status = status + self_.url = url diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_finished_pipeline.py b/datadog_api_client/v2/model/ci_app_pipeline_event_finished_pipeline.py new file mode 100644 index 0000000000..bd1181917e --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_finished_pipeline.py @@ -0,0 +1,197 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_level import CIAppPipelineEventPipelineLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_parent_pipeline import CIAppPipelineEventParentPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_previous_pipeline import CIAppPipelineEventPreviousPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_status import CIAppPipelineEventPipelineStatus + +class CIAppPipelineEventFinishedPipeline(ModelNormal): + validations = { + "queue_time": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_level import CIAppPipelineEventPipelineLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_parent_pipeline import CIAppPipelineEventParentPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_previous_pipeline import CIAppPipelineEventPreviousPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_status import CIAppPipelineEventPipelineStatus + return { + "end": (datetime,), + "error": (CIAppCIError,), + "git": (CIAppGitInfo,), + "is_manual": (bool, none_type), + "is_resumed": (bool, none_type), + "level": (CIAppPipelineEventPipelineLevel,), + "metrics": ([str],), + "name": (str,), + "node": (CIAppHostInfo,), + "parameters": (CIAppPipelineEventParameters,), + "parent_pipeline": (CIAppPipelineEventParentPipeline,), + "partial_retry": (bool,), + "pipeline_id": (str,), + "previous_attempt": (CIAppPipelineEventPreviousPipeline,), + "queue_time": (int, none_type), + "start": (datetime,), + "status": (CIAppPipelineEventPipelineStatus,), + "tags": ([str],), + "unique_id": (str,), + "url": (str,), + } + attribute_map = { + "end": "end", + "error": "error", + "git": "git", + "is_manual": "is_manual", + "is_resumed": "is_resumed", + "level": "level", + "metrics": "metrics", + "name": "name", + "node": "node", + "parameters": "parameters", + "parent_pipeline": "parent_pipeline", + "partial_retry": "partial_retry", + "pipeline_id": "pipeline_id", + "previous_attempt": "previous_attempt", + "queue_time": "queue_time", + "start": "start", + "status": "status", + "tags": "tags", + "unique_id": "unique_id", + "url": "url", + } + + def __init__(self_, end: datetime, level: CIAppPipelineEventPipelineLevel, name: str, partial_retry: bool, start: datetime, status: CIAppPipelineEventPipelineStatus, unique_id: str, url: str, error: Union[CIAppCIError, none_type, UnsetType]=unset, git: Union[CIAppGitInfo, none_type, UnsetType]=unset, is_manual: Union[bool, none_type, UnsetType]=unset, is_resumed: Union[bool, none_type, UnsetType]=unset, metrics: Union[List[str], none_type, UnsetType]=unset, node: Union[CIAppHostInfo, none_type, UnsetType]=unset, parameters: Union[CIAppPipelineEventParameters, none_type, UnsetType]=unset, parent_pipeline: Union[CIAppPipelineEventParentPipeline, none_type, UnsetType]=unset, pipeline_id: Union[str, UnsetType]=unset, previous_attempt: Union[CIAppPipelineEventPreviousPipeline, none_type, UnsetType]=unset, queue_time: Union[int, none_type, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Details of a finished pipeline. + + :param end: Time when the pipeline run finished. It cannot be older than 18 hours in the past from the current time. The time format must be RFC3339. + :type end: datetime + + :param error: Contains information of the CI error. + :type error: CIAppCIError, none_type, optional + + :param git: If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either ``tag`` or ``branch`` has to be provided, but not both. + :type git: CIAppGitInfo, none_type, optional + + :param is_manual: Whether or not the pipeline was triggered manually by the user. + :type is_manual: bool, none_type, optional + + :param is_resumed: Whether or not the pipeline was resumed after being blocked. + :type is_resumed: bool, none_type, optional + + :param level: Used to distinguish between pipelines, stages, jobs, and steps. + :type level: CIAppPipelineEventPipelineLevel + + :param metrics: A list of user-defined metrics. The metrics must follow the ``key:value`` pattern and the value must be numeric. + :type metrics: [str], none_type, optional + + :param name: Name of the pipeline. All pipeline runs for the builds should have the same name. + :type name: str + + :param node: Contains information of the host running the pipeline, stage, job, or step. + :type node: CIAppHostInfo, none_type, optional + + :param parameters: A map of key-value parameters or environment variables that were defined for the pipeline. + :type parameters: CIAppPipelineEventParameters, none_type, optional + + :param parent_pipeline: If the pipeline is triggered as child of another pipeline, this should contain the details of the parent pipeline. + :type parent_pipeline: CIAppPipelineEventParentPipeline, none_type, optional + + :param partial_retry: Whether or not the pipeline was a partial retry of a previous attempt. A partial retry is one + which only runs a subset of the original jobs. + :type partial_retry: bool + + :param pipeline_id: Any ID used in the provider to identify the pipeline run even if it is not unique across retries. + If the ``pipeline_id`` is unique, then both ``unique_id`` and ``pipeline_id`` can be set to the same value. + :type pipeline_id: str, optional + + :param previous_attempt: If the pipeline is a retry, this should contain the details of the previous attempt. + :type previous_attempt: CIAppPipelineEventPreviousPipeline, none_type, optional + + :param queue_time: The queue time in milliseconds, if applicable. + :type queue_time: int, none_type, optional + + :param start: Time when the pipeline run started (it should not include any queue time). The time format must be RFC3339. + :type start: datetime + + :param status: The final status of the pipeline. + :type status: CIAppPipelineEventPipelineStatus + + :param tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. + :type tags: [str], none_type, optional + + :param unique_id: UUID of the pipeline run. The ID has to be unique across retries and pipelines, + including partial retries. + :type unique_id: str + + :param url: The URL to look at the pipeline in the CI provider UI. + :type url: str + """ + if error is not unset: + kwargs["error"] = error + if git is not unset: + kwargs["git"] = git + if is_manual is not unset: + kwargs["is_manual"] = is_manual + if is_resumed is not unset: + kwargs["is_resumed"] = is_resumed + if metrics is not unset: + kwargs["metrics"] = metrics + if node is not unset: + kwargs["node"] = node + if parameters is not unset: + kwargs["parameters"] = parameters + if parent_pipeline is not unset: + kwargs["parent_pipeline"] = parent_pipeline + if pipeline_id is not unset: + kwargs["pipeline_id"] = pipeline_id + if previous_attempt is not unset: + kwargs["previous_attempt"] = previous_attempt + if queue_time is not unset: + kwargs["queue_time"] = queue_time + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.end = end + self_.level = level + self_.name = name + self_.partial_retry = partial_retry + self_.start = start + self_.status = status + self_.unique_id = unique_id + self_.url = url diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_in_progress_job.py b/datadog_api_client/v2/model/ci_app_pipeline_event_in_progress_job.py new file mode 100644 index 0000000000..12431fa64d --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_in_progress_job.py @@ -0,0 +1,177 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_job_level import CIAppPipelineEventJobLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_job_in_progress_status import CIAppPipelineEventJobInProgressStatus + +class CIAppPipelineEventInProgressJob(ModelNormal): + validations = { + "queue_time": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_job_level import CIAppPipelineEventJobLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_job_in_progress_status import CIAppPipelineEventJobInProgressStatus + return { + "dependencies": ([str], none_type), + "error": (CIAppCIError,), + "git": (CIAppGitInfo,), + "id": (str,), + "level": (CIAppPipelineEventJobLevel,), + "metrics": ([str],), + "name": (str,), + "node": (CIAppHostInfo,), + "parameters": (CIAppPipelineEventParameters,), + "pipeline_name": (str,), + "pipeline_unique_id": (str,), + "queue_time": (int, none_type), + "stage_id": (str, none_type), + "stage_name": (str, none_type), + "start": (datetime,), + "status": (CIAppPipelineEventJobInProgressStatus,), + "tags": ([str],), + "url": (str,), + } + attribute_map = { + "dependencies": "dependencies", + "error": "error", + "git": "git", + "id": "id", + "level": "level", + "metrics": "metrics", + "name": "name", + "node": "node", + "parameters": "parameters", + "pipeline_name": "pipeline_name", + "pipeline_unique_id": "pipeline_unique_id", + "queue_time": "queue_time", + "stage_id": "stage_id", + "stage_name": "stage_name", + "start": "start", + "status": "status", + "tags": "tags", + "url": "url", + } + + def __init__(self_, id: str, level: CIAppPipelineEventJobLevel, name: str, pipeline_name: str, pipeline_unique_id: str, start: datetime, status: CIAppPipelineEventJobInProgressStatus, url: str, dependencies: Union[List[str], none_type, UnsetType]=unset, error: Union[CIAppCIError, none_type, UnsetType]=unset, git: Union[CIAppGitInfo, none_type, UnsetType]=unset, metrics: Union[List[str], none_type, UnsetType]=unset, node: Union[CIAppHostInfo, none_type, UnsetType]=unset, parameters: Union[CIAppPipelineEventParameters, none_type, UnsetType]=unset, queue_time: Union[int, none_type, UnsetType]=unset, stage_id: Union[str, none_type, UnsetType]=unset, stage_name: Union[str, none_type, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Details of a running CI job. + + :param dependencies: A list of job IDs that this job depends on. + :type dependencies: [str], none_type, optional + + :param error: Contains information of the CI error. + :type error: CIAppCIError, none_type, optional + + :param git: If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either ``tag`` or ``branch`` has to be provided, but not both. + :type git: CIAppGitInfo, none_type, optional + + :param id: The UUID for the job. It must match the ID of the corresponding finished job. + :type id: str + + :param level: Used to distinguish between pipelines, stages, jobs, and steps. + :type level: CIAppPipelineEventJobLevel + + :param metrics: A list of user-defined metrics. The metrics must follow the ``key:value`` pattern and the value must be numeric. + :type metrics: [str], none_type, optional + + :param name: The name for the job. + :type name: str + + :param node: Contains information of the host running the pipeline, stage, job, or step. + :type node: CIAppHostInfo, none_type, optional + + :param parameters: A map of key-value parameters or environment variables that were defined for the pipeline. + :type parameters: CIAppPipelineEventParameters, none_type, optional + + :param pipeline_name: The parent pipeline name. + :type pipeline_name: str + + :param pipeline_unique_id: The parent pipeline UUID. + :type pipeline_unique_id: str + + :param queue_time: The queue time in milliseconds, if applicable. + :type queue_time: int, none_type, optional + + :param stage_id: The parent stage UUID (if applicable). + :type stage_id: str, none_type, optional + + :param stage_name: The parent stage name (if applicable). + :type stage_name: str, none_type, optional + + :param start: Time when the job run instance started (it should not include any queue time). + The time format must be RFC3339. + :type start: datetime + + :param status: The in-progress status of the job. + :type status: CIAppPipelineEventJobInProgressStatus + + :param tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. + :type tags: [str], none_type, optional + + :param url: The URL to look at the job in the CI provider UI. + :type url: str + """ + if dependencies is not unset: + kwargs["dependencies"] = dependencies + if error is not unset: + kwargs["error"] = error + if git is not unset: + kwargs["git"] = git + if metrics is not unset: + kwargs["metrics"] = metrics + if node is not unset: + kwargs["node"] = node + if parameters is not unset: + kwargs["parameters"] = parameters + if queue_time is not unset: + kwargs["queue_time"] = queue_time + if stage_id is not unset: + kwargs["stage_id"] = stage_id + if stage_name is not unset: + kwargs["stage_name"] = stage_name + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.id = id + self_.level = level + self_.name = name + self_.pipeline_name = pipeline_name + self_.pipeline_unique_id = pipeline_unique_id + self_.start = start + self_.status = status + self_.url = url diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_in_progress_pipeline.py b/datadog_api_client/v2/model/ci_app_pipeline_event_in_progress_pipeline.py new file mode 100644 index 0000000000..d10b9cb19d --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_in_progress_pipeline.py @@ -0,0 +1,190 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_level import CIAppPipelineEventPipelineLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_parent_pipeline import CIAppPipelineEventParentPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_previous_pipeline import CIAppPipelineEventPreviousPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_in_progress_status import CIAppPipelineEventPipelineInProgressStatus + +class CIAppPipelineEventInProgressPipeline(ModelNormal): + validations = { + "queue_time": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_level import CIAppPipelineEventPipelineLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_parent_pipeline import CIAppPipelineEventParentPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_previous_pipeline import CIAppPipelineEventPreviousPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_in_progress_status import CIAppPipelineEventPipelineInProgressStatus + return { + "error": (CIAppCIError,), + "git": (CIAppGitInfo,), + "is_manual": (bool, none_type), + "is_resumed": (bool, none_type), + "level": (CIAppPipelineEventPipelineLevel,), + "metrics": ([str],), + "name": (str,), + "node": (CIAppHostInfo,), + "parameters": (CIAppPipelineEventParameters,), + "parent_pipeline": (CIAppPipelineEventParentPipeline,), + "partial_retry": (bool,), + "pipeline_id": (str,), + "previous_attempt": (CIAppPipelineEventPreviousPipeline,), + "queue_time": (int, none_type), + "start": (datetime,), + "status": (CIAppPipelineEventPipelineInProgressStatus,), + "tags": ([str],), + "unique_id": (str,), + "url": (str,), + } + attribute_map = { + "error": "error", + "git": "git", + "is_manual": "is_manual", + "is_resumed": "is_resumed", + "level": "level", + "metrics": "metrics", + "name": "name", + "node": "node", + "parameters": "parameters", + "parent_pipeline": "parent_pipeline", + "partial_retry": "partial_retry", + "pipeline_id": "pipeline_id", + "previous_attempt": "previous_attempt", + "queue_time": "queue_time", + "start": "start", + "status": "status", + "tags": "tags", + "unique_id": "unique_id", + "url": "url", + } + + def __init__(self_, level: CIAppPipelineEventPipelineLevel, name: str, partial_retry: bool, start: datetime, status: CIAppPipelineEventPipelineInProgressStatus, unique_id: str, url: str, error: Union[CIAppCIError, none_type, UnsetType]=unset, git: Union[CIAppGitInfo, none_type, UnsetType]=unset, is_manual: Union[bool, none_type, UnsetType]=unset, is_resumed: Union[bool, none_type, UnsetType]=unset, metrics: Union[List[str], none_type, UnsetType]=unset, node: Union[CIAppHostInfo, none_type, UnsetType]=unset, parameters: Union[CIAppPipelineEventParameters, none_type, UnsetType]=unset, parent_pipeline: Union[CIAppPipelineEventParentPipeline, none_type, UnsetType]=unset, pipeline_id: Union[str, UnsetType]=unset, previous_attempt: Union[CIAppPipelineEventPreviousPipeline, none_type, UnsetType]=unset, queue_time: Union[int, none_type, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Details of a running pipeline. + + :param error: Contains information of the CI error. + :type error: CIAppCIError, none_type, optional + + :param git: If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either ``tag`` or ``branch`` has to be provided, but not both. + :type git: CIAppGitInfo, none_type, optional + + :param is_manual: Whether or not the pipeline was triggered manually by the user. + :type is_manual: bool, none_type, optional + + :param is_resumed: Whether or not the pipeline was resumed after being blocked. + :type is_resumed: bool, none_type, optional + + :param level: Used to distinguish between pipelines, stages, jobs, and steps. + :type level: CIAppPipelineEventPipelineLevel + + :param metrics: A list of user-defined metrics. The metrics must follow the ``key:value`` pattern and the value must be numeric. + :type metrics: [str], none_type, optional + + :param name: Name of the pipeline. All pipeline runs for the builds should have the same name. + :type name: str + + :param node: Contains information of the host running the pipeline, stage, job, or step. + :type node: CIAppHostInfo, none_type, optional + + :param parameters: A map of key-value parameters or environment variables that were defined for the pipeline. + :type parameters: CIAppPipelineEventParameters, none_type, optional + + :param parent_pipeline: If the pipeline is triggered as child of another pipeline, this should contain the details of the parent pipeline. + :type parent_pipeline: CIAppPipelineEventParentPipeline, none_type, optional + + :param partial_retry: Whether or not the pipeline was a partial retry of a previous attempt. A partial retry is one + which only runs a subset of the original jobs. + :type partial_retry: bool + + :param pipeline_id: Any ID used in the provider to identify the pipeline run even if it is not unique across retries. + If the ``pipeline_id`` is unique, then both ``unique_id`` and ``pipeline_id`` can be set to the same value. + :type pipeline_id: str, optional + + :param previous_attempt: If the pipeline is a retry, this should contain the details of the previous attempt. + :type previous_attempt: CIAppPipelineEventPreviousPipeline, none_type, optional + + :param queue_time: The queue time in milliseconds, if applicable. + :type queue_time: int, none_type, optional + + :param start: Time when the pipeline run started (it should not include any queue time). The time format must be RFC3339. + :type start: datetime + + :param status: The in progress status of the pipeline. + :type status: CIAppPipelineEventPipelineInProgressStatus + + :param tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. + :type tags: [str], none_type, optional + + :param unique_id: UUID of the pipeline run. The ID has to be the same as the finished pipeline. + :type unique_id: str + + :param url: The URL to look at the pipeline in the CI provider UI. + :type url: str + """ + if error is not unset: + kwargs["error"] = error + if git is not unset: + kwargs["git"] = git + if is_manual is not unset: + kwargs["is_manual"] = is_manual + if is_resumed is not unset: + kwargs["is_resumed"] = is_resumed + if metrics is not unset: + kwargs["metrics"] = metrics + if node is not unset: + kwargs["node"] = node + if parameters is not unset: + kwargs["parameters"] = parameters + if parent_pipeline is not unset: + kwargs["parent_pipeline"] = parent_pipeline + if pipeline_id is not unset: + kwargs["pipeline_id"] = pipeline_id + if previous_attempt is not unset: + kwargs["previous_attempt"] = previous_attempt + if queue_time is not unset: + kwargs["queue_time"] = queue_time + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.level = level + self_.name = name + self_.partial_retry = partial_retry + self_.start = start + self_.status = status + self_.unique_id = unique_id + self_.url = url diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_job.py b/datadog_api_client/v2/model/ci_app_pipeline_event_job.py new file mode 100644 index 0000000000..f2389d8a3a --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_job.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppPipelineEventJob(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Details of a CI job. + + :param dependencies: A list of job IDs that this job depends on. + :type dependencies: [str], none_type, optional + + :param end: Time when the job run finished. The time format must be RFC3339. + :type end: datetime + + :param error: Contains information of the CI error. + :type error: CIAppCIError, none_type, optional + + :param git: If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either `tag` or `branch` has to be provided, but not both. + :type git: CIAppGitInfo, none_type, optional + + :param id: The UUID for the job. It has to be unique within each pipeline execution. + :type id: str + + :param level: Used to distinguish between pipelines, stages, jobs, and steps. + :type level: CIAppPipelineEventJobLevel + + :param metrics: A list of user-defined metrics. The metrics must follow the `key:value` pattern and the value must be numeric. + :type metrics: [str], none_type, optional + + :param name: The name for the job. + :type name: str + + :param node: Contains information of the host running the pipeline, stage, job, or step. + :type node: CIAppHostInfo, none_type, optional + + :param parameters: A map of key-value parameters or environment variables that were defined for the pipeline. + :type parameters: CIAppPipelineEventParameters, none_type, optional + + :param pipeline_name: The parent pipeline name. + :type pipeline_name: str + + :param pipeline_unique_id: The parent pipeline UUID. + :type pipeline_unique_id: str + + :param queue_time: The queue time in milliseconds, if applicable. + :type queue_time: int, none_type, optional + + :param stage_id: The parent stage UUID (if applicable). + :type stage_id: str, none_type, optional + + :param stage_name: The parent stage name (if applicable). + :type stage_name: str, none_type, optional + + :param start: Time when the job run instance started (it should not include any queue time). + The time format must be RFC3339. + :type start: datetime + + :param status: The final status of the job. + :type status: CIAppPipelineEventJobStatus + + :param tags: A list of user-defined tags. The tags must follow the `key:value` pattern. + :type tags: [str], none_type, optional + + :param url: The URL to look at the job in the CI provider UI. + :type url: str + """ + 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.ci_app_pipeline_event_finished_job import CIAppPipelineEventFinishedJob + from datadog_api_client.v2.model.ci_app_pipeline_event_in_progress_job import CIAppPipelineEventInProgressJob + return { + "oneOf": [ + CIAppPipelineEventFinishedJob, + CIAppPipelineEventInProgressJob, + ], + } diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_job_in_progress_status.py b/datadog_api_client/v2/model/ci_app_pipeline_event_job_in_progress_status.py new file mode 100644 index 0000000000..9a2da86fb3 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_job_in_progress_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventJobInProgressStatus(ModelSimple): + """ + The in-progress status of the job. + + :param value: If omitted defaults to "running". Must be one of ["running"]. + :type value: str + """ + + allowed_values = { + "running", + } + RUNNING: ClassVar["CIAppPipelineEventJobInProgressStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventJobInProgressStatus.RUNNING = CIAppPipelineEventJobInProgressStatus("running") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_job_level.py b/datadog_api_client/v2/model/ci_app_pipeline_event_job_level.py new file mode 100644 index 0000000000..ccc4ef2f91 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_job_level.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventJobLevel(ModelSimple): + """ + Used to distinguish between pipelines, stages, jobs, and steps. + + :param value: If omitted defaults to "job". Must be one of ["job"]. + :type value: str + """ + + allowed_values = { + "job", + } + JOB: ClassVar["CIAppPipelineEventJobLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventJobLevel.JOB = CIAppPipelineEventJobLevel("job") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_job_status.py b/datadog_api_client/v2/model/ci_app_pipeline_event_job_status.py new file mode 100644 index 0000000000..4fa225b2c8 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_job_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventJobStatus(ModelSimple): + """ + The final status of the job. + + :param value: Must be one of ["success", "error", "canceled", "skipped"]. + :type value: str + """ + + allowed_values = { + "success", + "error", + "canceled", + "skipped", + } + SUCCESS: ClassVar["CIAppPipelineEventJobStatus"] + ERROR: ClassVar["CIAppPipelineEventJobStatus"] + CANCELED: ClassVar["CIAppPipelineEventJobStatus"] + SKIPPED: ClassVar["CIAppPipelineEventJobStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventJobStatus.SUCCESS = CIAppPipelineEventJobStatus("success") +CIAppPipelineEventJobStatus.ERROR = CIAppPipelineEventJobStatus("error") +CIAppPipelineEventJobStatus.CANCELED = CIAppPipelineEventJobStatus("canceled") +CIAppPipelineEventJobStatus.SKIPPED = CIAppPipelineEventJobStatus("skipped") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_parameters.py b/datadog_api_client/v2/model/ci_app_pipeline_event_parameters.py new file mode 100644 index 0000000000..4a89a275b1 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_parameters.py @@ -0,0 +1,37 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppPipelineEventParameters(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + _nullable = True + + def __init__(self_, **kwargs): + """ + A map of key-value parameters or environment variables that were defined for the pipeline. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_parent_pipeline.py b/datadog_api_client/v2/model/ci_app_pipeline_event_parent_pipeline.py new file mode 100644 index 0000000000..391672229e --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_parent_pipeline.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppPipelineEventParentPipeline(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "id": (str,), + "url": (str,), + } + attribute_map = { + "id": "id", + "url": "url", + } + + def __init__(self_, id: str, url: Union[str, UnsetType]=unset, **kwargs): + """ + If the pipeline is triggered as child of another pipeline, this should contain the details of the parent pipeline. + + :param id: UUID of a pipeline. + :type id: str + + :param url: The URL to look at the pipeline in the CI provider UI. + :type url: str, optional + """ + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline.py b/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline.py new file mode 100644 index 0000000000..2bc703b23d --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppPipelineEventPipeline(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Details of the top level pipeline, build, or workflow of your CI. + + :param end: Time when the pipeline run finished. It cannot be older than 18 hours in the past from the current time. The time format must be RFC3339. + :type end: datetime + + :param error: Contains information of the CI error. + :type error: CIAppCIError, none_type, optional + + :param git: If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either `tag` or `branch` has to be provided, but not both. + :type git: CIAppGitInfo, none_type, optional + + :param is_manual: Whether or not the pipeline was triggered manually by the user. + :type is_manual: bool, none_type, optional + + :param is_resumed: Whether or not the pipeline was resumed after being blocked. + :type is_resumed: bool, none_type, optional + + :param level: Used to distinguish between pipelines, stages, jobs, and steps. + :type level: CIAppPipelineEventPipelineLevel + + :param metrics: A list of user-defined metrics. The metrics must follow the `key:value` pattern and the value must be numeric. + :type metrics: [str], none_type, optional + + :param name: Name of the pipeline. All pipeline runs for the builds should have the same name. + :type name: str + + :param node: Contains information of the host running the pipeline, stage, job, or step. + :type node: CIAppHostInfo, none_type, optional + + :param parameters: A map of key-value parameters or environment variables that were defined for the pipeline. + :type parameters: CIAppPipelineEventParameters, none_type, optional + + :param parent_pipeline: If the pipeline is triggered as child of another pipeline, this should contain the details of the parent pipeline. + :type parent_pipeline: CIAppPipelineEventParentPipeline, none_type, optional + + :param partial_retry: Whether or not the pipeline was a partial retry of a previous attempt. A partial retry is one + which only runs a subset of the original jobs. + :type partial_retry: bool + + :param pipeline_id: Any ID used in the provider to identify the pipeline run even if it is not unique across retries. + If the `pipeline_id` is unique, then both `unique_id` and `pipeline_id` can be set to the same value. + :type pipeline_id: str, optional + + :param previous_attempt: If the pipeline is a retry, this should contain the details of the previous attempt. + :type previous_attempt: CIAppPipelineEventPreviousPipeline, none_type, optional + + :param queue_time: The queue time in milliseconds, if applicable. + :type queue_time: int, none_type, optional + + :param start: Time when the pipeline run started (it should not include any queue time). The time format must be RFC3339. + :type start: datetime + + :param status: The final status of the pipeline. + :type status: CIAppPipelineEventPipelineStatus + + :param tags: A list of user-defined tags. The tags must follow the `key:value` pattern. + :type tags: [str], none_type, optional + + :param unique_id: UUID of the pipeline run. The ID has to be unique across retries and pipelines, + including partial retries. + :type unique_id: str + + :param url: The URL to look at the pipeline in the CI provider UI. + :type url: str + """ + 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.ci_app_pipeline_event_finished_pipeline import CIAppPipelineEventFinishedPipeline + from datadog_api_client.v2.model.ci_app_pipeline_event_in_progress_pipeline import CIAppPipelineEventInProgressPipeline + return { + "oneOf": [ + CIAppPipelineEventFinishedPipeline, + CIAppPipelineEventInProgressPipeline, + ], + } diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline_in_progress_status.py b/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline_in_progress_status.py new file mode 100644 index 0000000000..8cbf3ad9de --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline_in_progress_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventPipelineInProgressStatus(ModelSimple): + """ + The in progress status of the pipeline. + + :param value: If omitted defaults to "running". Must be one of ["running"]. + :type value: str + """ + + allowed_values = { + "running", + } + RUNNING: ClassVar["CIAppPipelineEventPipelineInProgressStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventPipelineInProgressStatus.RUNNING = CIAppPipelineEventPipelineInProgressStatus("running") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline_level.py b/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline_level.py new file mode 100644 index 0000000000..41d894b46b --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline_level.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventPipelineLevel(ModelSimple): + """ + Used to distinguish between pipelines, stages, jobs, and steps. + + :param value: If omitted defaults to "pipeline". Must be one of ["pipeline"]. + :type value: str + """ + + allowed_values = { + "pipeline", + } + PIPELINE: ClassVar["CIAppPipelineEventPipelineLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventPipelineLevel.PIPELINE = CIAppPipelineEventPipelineLevel("pipeline") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline_status.py b/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline_status.py new file mode 100644 index 0000000000..7540859c84 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_pipeline_status.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventPipelineStatus(ModelSimple): + """ + The final status of the pipeline. + + :param value: Must be one of ["success", "error", "canceled", "skipped", "blocked"]. + :type value: str + """ + + allowed_values = { + "success", + "error", + "canceled", + "skipped", + "blocked", + } + SUCCESS: ClassVar["CIAppPipelineEventPipelineStatus"] + ERROR: ClassVar["CIAppPipelineEventPipelineStatus"] + CANCELED: ClassVar["CIAppPipelineEventPipelineStatus"] + SKIPPED: ClassVar["CIAppPipelineEventPipelineStatus"] + BLOCKED: ClassVar["CIAppPipelineEventPipelineStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventPipelineStatus.SUCCESS = CIAppPipelineEventPipelineStatus("success") +CIAppPipelineEventPipelineStatus.ERROR = CIAppPipelineEventPipelineStatus("error") +CIAppPipelineEventPipelineStatus.CANCELED = CIAppPipelineEventPipelineStatus("canceled") +CIAppPipelineEventPipelineStatus.SKIPPED = CIAppPipelineEventPipelineStatus("skipped") +CIAppPipelineEventPipelineStatus.BLOCKED = CIAppPipelineEventPipelineStatus("blocked") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_previous_pipeline.py b/datadog_api_client/v2/model/ci_app_pipeline_event_previous_pipeline.py new file mode 100644 index 0000000000..78be4ee3d0 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_previous_pipeline.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppPipelineEventPreviousPipeline(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "id": (str,), + "url": (str,), + } + attribute_map = { + "id": "id", + "url": "url", + } + + def __init__(self_, id: str, url: Union[str, UnsetType]=unset, **kwargs): + """ + If the pipeline is a retry, this should contain the details of the previous attempt. + + :param id: UUID of a pipeline. + :type id: str + + :param url: The URL to look at the pipeline in the CI provider UI. + :type url: str, optional + """ + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_stage.py b/datadog_api_client/v2/model/ci_app_pipeline_event_stage.py new file mode 100644 index 0000000000..71a20e3d26 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_stage.py @@ -0,0 +1,162 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_stage_level import CIAppPipelineEventStageLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_stage_status import CIAppPipelineEventStageStatus + +class CIAppPipelineEventStage(ModelNormal): + validations = { + "queue_time": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_stage_level import CIAppPipelineEventStageLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_stage_status import CIAppPipelineEventStageStatus + return { + "dependencies": ([str], none_type), + "end": (datetime,), + "error": (CIAppCIError,), + "git": (CIAppGitInfo,), + "id": (str,), + "level": (CIAppPipelineEventStageLevel,), + "metrics": ([str],), + "name": (str,), + "node": (CIAppHostInfo,), + "parameters": (CIAppPipelineEventParameters,), + "pipeline_name": (str,), + "pipeline_unique_id": (str,), + "queue_time": (int, none_type), + "start": (datetime,), + "status": (CIAppPipelineEventStageStatus,), + "tags": ([str],), + } + attribute_map = { + "dependencies": "dependencies", + "end": "end", + "error": "error", + "git": "git", + "id": "id", + "level": "level", + "metrics": "metrics", + "name": "name", + "node": "node", + "parameters": "parameters", + "pipeline_name": "pipeline_name", + "pipeline_unique_id": "pipeline_unique_id", + "queue_time": "queue_time", + "start": "start", + "status": "status", + "tags": "tags", + } + + def __init__(self_, end: datetime, id: str, level: CIAppPipelineEventStageLevel, name: str, pipeline_name: str, pipeline_unique_id: str, start: datetime, status: CIAppPipelineEventStageStatus, dependencies: Union[List[str], none_type, UnsetType]=unset, error: Union[CIAppCIError, none_type, UnsetType]=unset, git: Union[CIAppGitInfo, none_type, UnsetType]=unset, metrics: Union[List[str], none_type, UnsetType]=unset, node: Union[CIAppHostInfo, none_type, UnsetType]=unset, parameters: Union[CIAppPipelineEventParameters, none_type, UnsetType]=unset, queue_time: Union[int, none_type, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Details of a CI stage. + + :param dependencies: A list of stage IDs that this stage depends on. + :type dependencies: [str], none_type, optional + + :param end: Time when the stage run finished. The time format must be RFC3339. + :type end: datetime + + :param error: Contains information of the CI error. + :type error: CIAppCIError, none_type, optional + + :param git: If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either ``tag`` or ``branch`` has to be provided, but not both. + :type git: CIAppGitInfo, none_type, optional + + :param id: UUID for the stage. It has to be unique at least in the pipeline scope. + :type id: str + + :param level: Used to distinguish between pipelines, stages, jobs and steps. + :type level: CIAppPipelineEventStageLevel + + :param metrics: A list of user-defined metrics. The metrics must follow the ``key:value`` pattern and the value must be numeric. + :type metrics: [str], none_type, optional + + :param name: The name for the stage. + :type name: str + + :param node: Contains information of the host running the pipeline, stage, job, or step. + :type node: CIAppHostInfo, none_type, optional + + :param parameters: A map of key-value parameters or environment variables that were defined for the pipeline. + :type parameters: CIAppPipelineEventParameters, none_type, optional + + :param pipeline_name: The parent pipeline name. + :type pipeline_name: str + + :param pipeline_unique_id: The parent pipeline UUID. + :type pipeline_unique_id: str + + :param queue_time: The queue time in milliseconds, if applicable. + :type queue_time: int, none_type, optional + + :param start: Time when the stage run started (it should not include any queue time). The time format must be RFC3339. + :type start: datetime + + :param status: The final status of the stage. + :type status: CIAppPipelineEventStageStatus + + :param tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. + :type tags: [str], none_type, optional + """ + if dependencies is not unset: + kwargs["dependencies"] = dependencies + if error is not unset: + kwargs["error"] = error + if git is not unset: + kwargs["git"] = git + if metrics is not unset: + kwargs["metrics"] = metrics + if node is not unset: + kwargs["node"] = node + if parameters is not unset: + kwargs["parameters"] = parameters + if queue_time is not unset: + kwargs["queue_time"] = queue_time + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.end = end + self_.id = id + self_.level = level + self_.name = name + self_.pipeline_name = pipeline_name + self_.pipeline_unique_id = pipeline_unique_id + self_.start = start + self_.status = status diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_stage_level.py b/datadog_api_client/v2/model/ci_app_pipeline_event_stage_level.py new file mode 100644 index 0000000000..6b26a57e23 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_stage_level.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventStageLevel(ModelSimple): + """ + Used to distinguish between pipelines, stages, jobs and steps. + + :param value: If omitted defaults to "stage". Must be one of ["stage"]. + :type value: str + """ + + allowed_values = { + "stage", + } + STAGE: ClassVar["CIAppPipelineEventStageLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventStageLevel.STAGE = CIAppPipelineEventStageLevel("stage") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_stage_status.py b/datadog_api_client/v2/model/ci_app_pipeline_event_stage_status.py new file mode 100644 index 0000000000..c059c55ad2 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_stage_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventStageStatus(ModelSimple): + """ + The final status of the stage. + + :param value: Must be one of ["success", "error", "canceled", "skipped"]. + :type value: str + """ + + allowed_values = { + "success", + "error", + "canceled", + "skipped", + } + SUCCESS: ClassVar["CIAppPipelineEventStageStatus"] + ERROR: ClassVar["CIAppPipelineEventStageStatus"] + CANCELED: ClassVar["CIAppPipelineEventStageStatus"] + SKIPPED: ClassVar["CIAppPipelineEventStageStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventStageStatus.SUCCESS = CIAppPipelineEventStageStatus("success") +CIAppPipelineEventStageStatus.ERROR = CIAppPipelineEventStageStatus("error") +CIAppPipelineEventStageStatus.CANCELED = CIAppPipelineEventStageStatus("canceled") +CIAppPipelineEventStageStatus.SKIPPED = CIAppPipelineEventStageStatus("skipped") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_step.py b/datadog_api_client/v2/model/ci_app_pipeline_event_step.py new file mode 100644 index 0000000000..3241b747fd --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_step.py @@ -0,0 +1,178 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_step_level import CIAppPipelineEventStepLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_step_status import CIAppPipelineEventStepStatus + +class CIAppPipelineEventStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError + from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_step_level import CIAppPipelineEventStepLevel + from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo + from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters + from datadog_api_client.v2.model.ci_app_pipeline_event_step_status import CIAppPipelineEventStepStatus + return { + "end": (datetime,), + "error": (CIAppCIError,), + "git": (CIAppGitInfo,), + "id": (str,), + "job_id": (str, none_type), + "job_name": (str, none_type), + "level": (CIAppPipelineEventStepLevel,), + "metrics": ([str],), + "name": (str,), + "node": (CIAppHostInfo,), + "parameters": (CIAppPipelineEventParameters,), + "pipeline_name": (str,), + "pipeline_unique_id": (str,), + "stage_id": (str, none_type), + "stage_name": (str, none_type), + "start": (datetime,), + "status": (CIAppPipelineEventStepStatus,), + "tags": ([str],), + "url": (str, none_type), + } + attribute_map = { + "end": "end", + "error": "error", + "git": "git", + "id": "id", + "job_id": "job_id", + "job_name": "job_name", + "level": "level", + "metrics": "metrics", + "name": "name", + "node": "node", + "parameters": "parameters", + "pipeline_name": "pipeline_name", + "pipeline_unique_id": "pipeline_unique_id", + "stage_id": "stage_id", + "stage_name": "stage_name", + "start": "start", + "status": "status", + "tags": "tags", + "url": "url", + } + + def __init__(self_, end: datetime, id: str, level: CIAppPipelineEventStepLevel, name: str, pipeline_name: str, pipeline_unique_id: str, start: datetime, status: CIAppPipelineEventStepStatus, error: Union[CIAppCIError, none_type, UnsetType]=unset, git: Union[CIAppGitInfo, none_type, UnsetType]=unset, job_id: Union[str, none_type, UnsetType]=unset, job_name: Union[str, none_type, UnsetType]=unset, metrics: Union[List[str], none_type, UnsetType]=unset, node: Union[CIAppHostInfo, none_type, UnsetType]=unset, parameters: Union[CIAppPipelineEventParameters, none_type, UnsetType]=unset, stage_id: Union[str, none_type, UnsetType]=unset, stage_name: Union[str, none_type, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, url: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Details of a CI step. + + :param end: Time when the step run finished. The time format must be RFC3339. + :type end: datetime + + :param error: Contains information of the CI error. + :type error: CIAppCIError, none_type, optional + + :param git: If pipelines are triggered due to actions to a Git repository, then all payloads must contain this. + Note that either ``tag`` or ``branch`` has to be provided, but not both. + :type git: CIAppGitInfo, none_type, optional + + :param id: UUID for the step. It has to be unique within each pipeline execution. + :type id: str + + :param job_id: The parent job UUID (if applicable). + :type job_id: str, none_type, optional + + :param job_name: The parent job name (if applicable). + :type job_name: str, none_type, optional + + :param level: Used to distinguish between pipelines, stages, jobs and steps. + :type level: CIAppPipelineEventStepLevel + + :param metrics: A list of user-defined metrics. The metrics must follow the ``key:value`` pattern and the value must be numeric. + :type metrics: [str], none_type, optional + + :param name: The name for the step. + :type name: str + + :param node: Contains information of the host running the pipeline, stage, job, or step. + :type node: CIAppHostInfo, none_type, optional + + :param parameters: A map of key-value parameters or environment variables that were defined for the pipeline. + :type parameters: CIAppPipelineEventParameters, none_type, optional + + :param pipeline_name: The parent pipeline name. + :type pipeline_name: str + + :param pipeline_unique_id: The parent pipeline UUID. + :type pipeline_unique_id: str + + :param stage_id: The parent stage UUID (if applicable). + :type stage_id: str, none_type, optional + + :param stage_name: The parent stage name (if applicable). + :type stage_name: str, none_type, optional + + :param start: Time when the step run started. The time format must be RFC3339. + :type start: datetime + + :param status: The final status of the step. + :type status: CIAppPipelineEventStepStatus + + :param tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. + :type tags: [str], none_type, optional + + :param url: The URL to look at the step in the CI provider UI. + :type url: str, none_type, optional + """ + if error is not unset: + kwargs["error"] = error + if git is not unset: + kwargs["git"] = git + if job_id is not unset: + kwargs["job_id"] = job_id + if job_name is not unset: + kwargs["job_name"] = job_name + if metrics is not unset: + kwargs["metrics"] = metrics + if node is not unset: + kwargs["node"] = node + if parameters is not unset: + kwargs["parameters"] = parameters + if stage_id is not unset: + kwargs["stage_id"] = stage_id + if stage_name is not unset: + kwargs["stage_name"] = stage_name + if tags is not unset: + kwargs["tags"] = tags + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + + self_.end = end + self_.id = id + self_.level = level + self_.name = name + self_.pipeline_name = pipeline_name + self_.pipeline_unique_id = pipeline_unique_id + self_.start = start + self_.status = status diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_step_level.py b/datadog_api_client/v2/model/ci_app_pipeline_event_step_level.py new file mode 100644 index 0000000000..58b13e3d09 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_step_level.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventStepLevel(ModelSimple): + """ + Used to distinguish between pipelines, stages, jobs and steps. + + :param value: If omitted defaults to "step". Must be one of ["step"]. + :type value: str + """ + + allowed_values = { + "step", + } + STEP: ClassVar["CIAppPipelineEventStepLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventStepLevel.STEP = CIAppPipelineEventStepLevel("step") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_step_status.py b/datadog_api_client/v2/model/ci_app_pipeline_event_step_status.py new file mode 100644 index 0000000000..b37a9abf30 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_step_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventStepStatus(ModelSimple): + """ + The final status of the step. + + :param value: Must be one of ["success", "error"]. + :type value: str + """ + + allowed_values = { + "success", + "error", + } + SUCCESS: ClassVar["CIAppPipelineEventStepStatus"] + ERROR: ClassVar["CIAppPipelineEventStepStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventStepStatus.SUCCESS = CIAppPipelineEventStepStatus("success") +CIAppPipelineEventStepStatus.ERROR = CIAppPipelineEventStepStatus("error") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_event_type_name.py b/datadog_api_client/v2/model/ci_app_pipeline_event_type_name.py new file mode 100644 index 0000000000..764f8efe7f --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_event_type_name.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineEventTypeName(ModelSimple): + """ + Type of the event. + + :param value: If omitted defaults to "cipipeline". Must be one of ["cipipeline"]. + :type value: str + """ + + allowed_values = { + "cipipeline", + } + CIPIPELINE: ClassVar["CIAppPipelineEventTypeName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineEventTypeName.CIPIPELINE = CIAppPipelineEventTypeName("cipipeline") diff --git a/datadog_api_client/v2/model/ci_app_pipeline_events_request.py b/datadog_api_client/v2/model/ci_app_pipeline_events_request.py new file mode 100644 index 0000000000..7a74e01333 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_events_request.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_pipelines_query_filter import CIAppPipelinesQueryFilter + from datadog_api_client.v2.model.ci_app_query_options import CIAppQueryOptions + from datadog_api_client.v2.model.ci_app_query_page_options import CIAppQueryPageOptions + from datadog_api_client.v2.model.ci_app_sort import CIAppSort + +class CIAppPipelineEventsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_pipelines_query_filter import CIAppPipelinesQueryFilter + from datadog_api_client.v2.model.ci_app_query_options import CIAppQueryOptions + from datadog_api_client.v2.model.ci_app_query_page_options import CIAppQueryPageOptions + from datadog_api_client.v2.model.ci_app_sort import CIAppSort + return { + "filter": (CIAppPipelinesQueryFilter,), + "options": (CIAppQueryOptions,), + "page": (CIAppQueryPageOptions,), + "sort": (CIAppSort,), + } + attribute_map = { + "filter": "filter", + "options": "options", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[CIAppPipelinesQueryFilter, UnsetType]=unset, options: Union[CIAppQueryOptions, UnsetType]=unset, page: Union[CIAppQueryPageOptions, UnsetType]=unset, sort: Union[CIAppSort, UnsetType]=unset, **kwargs): + """ + The request for a pipelines search. + + :param filter: The search and filter query settings. + :type filter: CIAppPipelinesQueryFilter, optional + + :param options: Global query options that are used during the query. + Only supply timezone or time offset, not both. Otherwise, the query fails. + :type options: CIAppQueryOptions, optional + + :param page: Paging attributes for listing events. + :type page: CIAppQueryPageOptions, optional + + :param sort: Sort parameters when querying events. + :type sort: CIAppSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipeline_events_response.py b/datadog_api_client/v2/model/ci_app_pipeline_events_response.py new file mode 100644 index 0000000000..8164da7eaf --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_events_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_pipeline_event import CIAppPipelineEvent + from datadog_api_client.v2.model.ci_app_response_links import CIAppResponseLinks + from datadog_api_client.v2.model.ci_app_response_metadata_with_pagination import CIAppResponseMetadataWithPagination + +class CIAppPipelineEventsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_pipeline_event import CIAppPipelineEvent + from datadog_api_client.v2.model.ci_app_response_links import CIAppResponseLinks + from datadog_api_client.v2.model.ci_app_response_metadata_with_pagination import CIAppResponseMetadataWithPagination + return { + "data": ([CIAppPipelineEvent],), + "links": (CIAppResponseLinks,), + "meta": (CIAppResponseMetadataWithPagination,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[CIAppPipelineEvent], UnsetType]=unset, links: Union[CIAppResponseLinks, UnsetType]=unset, meta: Union[CIAppResponseMetadataWithPagination, UnsetType]=unset, **kwargs): + """ + Response object with all pipeline events matching the request and pagination information. + + :param data: Array of events matching the request. + :type data: [CIAppPipelineEvent], optional + + :param links: Links attributes. + :type links: CIAppResponseLinks, optional + + :param meta: The metadata associated with a request. + :type meta: CIAppResponseMetadataWithPagination, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipeline_level.py b/datadog_api_client/v2/model/ci_app_pipeline_level.py new file mode 100644 index 0000000000..6a56677e02 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipeline_level.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppPipelineLevel(ModelSimple): + """ + Pipeline execution level. + + :param value: Must be one of ["pipeline", "stage", "job", "step", "custom"]. + :type value: str + """ + + allowed_values = { + "pipeline", + "stage", + "job", + "step", + "custom", + } + PIPELINE: ClassVar["CIAppPipelineLevel"] + STAGE: ClassVar["CIAppPipelineLevel"] + JOB: ClassVar["CIAppPipelineLevel"] + STEP: ClassVar["CIAppPipelineLevel"] + CUSTOM: ClassVar["CIAppPipelineLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppPipelineLevel.PIPELINE = CIAppPipelineLevel("pipeline") +CIAppPipelineLevel.STAGE = CIAppPipelineLevel("stage") +CIAppPipelineLevel.JOB = CIAppPipelineLevel("job") +CIAppPipelineLevel.STEP = CIAppPipelineLevel("step") +CIAppPipelineLevel.CUSTOM = CIAppPipelineLevel("custom") diff --git a/datadog_api_client/v2/model/ci_app_pipelines_aggregate_request.py b/datadog_api_client/v2/model/ci_app_pipelines_aggregate_request.py new file mode 100644 index 0000000000..061cb70131 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipelines_aggregate_request.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_compute import CIAppCompute + from datadog_api_client.v2.model.ci_app_pipelines_query_filter import CIAppPipelinesQueryFilter + from datadog_api_client.v2.model.ci_app_pipelines_group_by import CIAppPipelinesGroupBy + from datadog_api_client.v2.model.ci_app_query_options import CIAppQueryOptions + +class CIAppPipelinesAggregateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_compute import CIAppCompute + from datadog_api_client.v2.model.ci_app_pipelines_query_filter import CIAppPipelinesQueryFilter + from datadog_api_client.v2.model.ci_app_pipelines_group_by import CIAppPipelinesGroupBy + from datadog_api_client.v2.model.ci_app_query_options import CIAppQueryOptions + return { + "compute": ([CIAppCompute],), + "filter": (CIAppPipelinesQueryFilter,), + "group_by": ([CIAppPipelinesGroupBy],), + "options": (CIAppQueryOptions,), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + "options": "options", + } + + def __init__(self_, compute: Union[List[CIAppCompute], UnsetType]=unset, filter: Union[CIAppPipelinesQueryFilter, UnsetType]=unset, group_by: Union[List[CIAppPipelinesGroupBy], UnsetType]=unset, options: Union[CIAppQueryOptions, UnsetType]=unset, **kwargs): + """ + The object sent with the request to retrieve aggregation buckets of pipeline events from your organization. + + :param compute: The list of metrics or timeseries to compute for the retrieved buckets. + :type compute: [CIAppCompute], optional + + :param filter: The search and filter query settings. + :type filter: CIAppPipelinesQueryFilter, optional + + :param group_by: The rules for the group-by. + :type group_by: [CIAppPipelinesGroupBy], optional + + :param options: Global query options that are used during the query. + Only supply timezone or time offset, not both. Otherwise, the query fails. + :type options: CIAppQueryOptions, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if options is not unset: + kwargs["options"] = options + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipelines_aggregation_buckets_response.py b/datadog_api_client/v2/model/ci_app_pipelines_aggregation_buckets_response.py new file mode 100644 index 0000000000..d918d1af8e --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipelines_aggregation_buckets_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_pipelines_bucket_response import CIAppPipelinesBucketResponse + from datadog_api_client.v2.model.ci_app_aggregate_bucket_value_timeseries import CIAppAggregateBucketValueTimeseries + +class CIAppPipelinesAggregationBucketsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_pipelines_bucket_response import CIAppPipelinesBucketResponse + return { + "buckets": ([CIAppPipelinesBucketResponse],), + } + attribute_map = { + "buckets": "buckets", + } + + def __init__(self_, buckets: Union[List[CIAppPipelinesBucketResponse], UnsetType]=unset, **kwargs): + """ + The query results. + + :param buckets: The list of matching buckets, one item per bucket. + :type buckets: [CIAppPipelinesBucketResponse], optional + """ + if buckets is not unset: + kwargs["buckets"] = buckets + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipelines_analytics_aggregate_response.py b/datadog_api_client/v2/model/ci_app_pipelines_analytics_aggregate_response.py new file mode 100644 index 0000000000..88739d3ead --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipelines_analytics_aggregate_response.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_pipelines_aggregation_buckets_response import CIAppPipelinesAggregationBucketsResponse + from datadog_api_client.v2.model.ci_app_response_links import CIAppResponseLinks + from datadog_api_client.v2.model.ci_app_response_metadata import CIAppResponseMetadata + from datadog_api_client.v2.model.ci_app_aggregate_bucket_value_timeseries import CIAppAggregateBucketValueTimeseries + +class CIAppPipelinesAnalyticsAggregateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_pipelines_aggregation_buckets_response import CIAppPipelinesAggregationBucketsResponse + from datadog_api_client.v2.model.ci_app_response_links import CIAppResponseLinks + from datadog_api_client.v2.model.ci_app_response_metadata import CIAppResponseMetadata + return { + "data": (CIAppPipelinesAggregationBucketsResponse,), + "links": (CIAppResponseLinks,), + "meta": (CIAppResponseMetadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[CIAppPipelinesAggregationBucketsResponse, UnsetType]=unset, links: Union[CIAppResponseLinks, UnsetType]=unset, meta: Union[CIAppResponseMetadata, UnsetType]=unset, **kwargs): + """ + The response object for the pipeline events aggregate API endpoint. + + :param data: The query results. + :type data: CIAppPipelinesAggregationBucketsResponse, optional + + :param links: Links attributes. + :type links: CIAppResponseLinks, optional + + :param meta: The metadata associated with a request. + :type meta: CIAppResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipelines_bucket_response.py b/datadog_api_client/v2/model/ci_app_pipelines_bucket_response.py new file mode 100644 index 0000000000..4434ac479f --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipelines_bucket_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_computes import CIAppComputes + from datadog_api_client.v2.model.ci_app_aggregate_bucket_value_timeseries import CIAppAggregateBucketValueTimeseries + +class CIAppPipelinesBucketResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_computes import CIAppComputes + return { + "by": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "computes": (CIAppComputes,), + } + attribute_map = { + "by": "by", + "computes": "computes", + } + + def __init__(self_, by: Union[Dict[str, Any], UnsetType]=unset, computes: Union[CIAppComputes, UnsetType]=unset, **kwargs): + """ + Bucket values. + + :param by: The key-value pairs for each group-by. + :type by: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param computes: A map of the metric name to value for regular compute, or a list of values for a timeseries. + :type computes: CIAppComputes, optional + """ + if by is not unset: + kwargs["by"] = by + if computes is not unset: + kwargs["computes"] = computes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_pipelines_group_by.py b/datadog_api_client/v2/model/ci_app_pipelines_group_by.py new file mode 100644 index 0000000000..6a9df99f8d --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipelines_group_by.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_group_by_histogram import CIAppGroupByHistogram + from datadog_api_client.v2.model.ci_app_group_by_missing import CIAppGroupByMissing + from datadog_api_client.v2.model.ci_app_aggregate_sort import CIAppAggregateSort + from datadog_api_client.v2.model.ci_app_group_by_total import CIAppGroupByTotal + +class CIAppPipelinesGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_group_by_histogram import CIAppGroupByHistogram + from datadog_api_client.v2.model.ci_app_group_by_missing import CIAppGroupByMissing + from datadog_api_client.v2.model.ci_app_aggregate_sort import CIAppAggregateSort + from datadog_api_client.v2.model.ci_app_group_by_total import CIAppGroupByTotal + return { + "facet": (str,), + "histogram": (CIAppGroupByHistogram,), + "limit": (int,), + "missing": (CIAppGroupByMissing,), + "sort": (CIAppAggregateSort,), + "total": (CIAppGroupByTotal,), + } + attribute_map = { + "facet": "facet", + "histogram": "histogram", + "limit": "limit", + "missing": "missing", + "sort": "sort", + "total": "total", + } + + def __init__(self_, facet: str, histogram: Union[CIAppGroupByHistogram, UnsetType]=unset, limit: Union[int, UnsetType]=unset, missing: Union[CIAppGroupByMissing, str, float, UnsetType]=unset, sort: Union[CIAppAggregateSort, UnsetType]=unset, total: Union[CIAppGroupByTotal, bool, str, float, UnsetType]=unset, **kwargs): + """ + A group-by rule. + + :param facet: The name of the facet to use (required). + :type facet: str + + :param histogram: Used to perform a histogram computation (only for measure facets). + At most, 100 buckets are allowed, the number of buckets is ``(max - min)/interval``. + :type histogram: CIAppGroupByHistogram, optional + + :param limit: The maximum buckets to return for this group-by. + :type limit: int, optional + + :param missing: The value to use for logs that don't have the facet used to group-by. + :type missing: CIAppGroupByMissing, optional + + :param sort: A sort rule. The ``aggregation`` field is required when ``type`` is ``measure``. + :type sort: CIAppAggregateSort, optional + + :param total: A resulting object to put the given computes in over all the matching records. + :type total: CIAppGroupByTotal, optional + """ + if histogram is not unset: + kwargs["histogram"] = histogram + if limit is not unset: + kwargs["limit"] = limit + if missing is not unset: + kwargs["missing"] = missing + if sort is not unset: + kwargs["sort"] = sort + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v2/model/ci_app_pipelines_query_filter.py b/datadog_api_client/v2/model/ci_app_pipelines_query_filter.py new file mode 100644 index 0000000000..8e65e28de3 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_pipelines_query_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppPipelinesQueryFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (str,), + "query": (str,), + "to": (str,), + } + attribute_map = { + "_from": "from", + "query": "query", + "to": "to", + } + + def __init__(self_, _from: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, to: Union[str, UnsetType]=unset, **kwargs): + """ + The search and filter query settings. + + :param _from: The minimum time for the requested events; supports date, math, and regular timestamps (in milliseconds). + :type _from: str, optional + + :param query: The search query following the CI Visibility Explorer search syntax. + :type query: str, optional + + :param to: The maximum time for the requested events, supports date, math, and regular timestamps (in milliseconds). + :type to: str, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if query is not unset: + kwargs["query"] = query + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_query_options.py b/datadog_api_client/v2/model/ci_app_query_options.py new file mode 100644 index 0000000000..f662abe637 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_query_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppQueryOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time_offset": (int,), + "timezone": (str,), + } + attribute_map = { + "time_offset": "time_offset", + "timezone": "timezone", + } + + def __init__(self_, time_offset: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Global query options that are used during the query. + Only supply timezone or time offset, not both. Otherwise, the query fails. + + :param time_offset: The time offset (in seconds) to apply to the query. + :type time_offset: int, optional + + :param timezone: The timezone can be specified as GMT, UTC, an offset from UTC (like UTC+1), or as a Timezone Database identifier (like America/New_York). + :type timezone: str, optional + """ + if time_offset is not unset: + kwargs["time_offset"] = time_offset + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_query_page_options.py b/datadog_api_client/v2/model/ci_app_query_page_options.py new file mode 100644 index 0000000000..482ef19459 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_query_page_options.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppQueryPageOptions(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Paging attributes for listing events. + + :param cursor: List following results with a cursor provided in the previous query. + :type cursor: str, optional + + :param limit: Maximum number of events in the response. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_response_links.py b/datadog_api_client/v2/model/ci_app_response_links.py new file mode 100644 index 0000000000..80535da7b6 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param next: Link for the next set of results. The request can also be made using the + POST endpoint. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_response_metadata.py b/datadog_api_client/v2/model/ci_app_response_metadata.py new file mode 100644 index 0000000000..7d46ffd4c1 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_response_status import CIAppResponseStatus + from datadog_api_client.v2.model.ci_app_warning import CIAppWarning + +class CIAppResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_response_status import CIAppResponseStatus + from datadog_api_client.v2.model.ci_app_warning import CIAppWarning + return { + "elapsed": (int,), + "request_id": (str,), + "status": (CIAppResponseStatus,), + "warnings": ([CIAppWarning],), + } + attribute_map = { + "elapsed": "elapsed", + "request_id": "request_id", + "status": "status", + "warnings": "warnings", + } + + def __init__(self_, elapsed: Union[int, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, status: Union[CIAppResponseStatus, UnsetType]=unset, warnings: Union[List[CIAppWarning], UnsetType]=unset, **kwargs): + """ + The metadata associated with a request. + + :param elapsed: The time elapsed in milliseconds. + :type elapsed: int, optional + + :param request_id: The identifier of the request. + :type request_id: str, optional + + :param status: The status of the response. + :type status: CIAppResponseStatus, optional + + :param warnings: A list of warnings (non-fatal errors) encountered. Partial results may return if + warnings are present in the response. + :type warnings: [CIAppWarning], optional + """ + if elapsed is not unset: + kwargs["elapsed"] = elapsed + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_response_metadata_with_pagination.py b/datadog_api_client/v2/model/ci_app_response_metadata_with_pagination.py new file mode 100644 index 0000000000..f8cb3ecb72 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_response_metadata_with_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_response_page import CIAppResponsePage + from datadog_api_client.v2.model.ci_app_response_status import CIAppResponseStatus + from datadog_api_client.v2.model.ci_app_warning import CIAppWarning + +class CIAppResponseMetadataWithPagination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_response_page import CIAppResponsePage + from datadog_api_client.v2.model.ci_app_response_status import CIAppResponseStatus + from datadog_api_client.v2.model.ci_app_warning import CIAppWarning + return { + "elapsed": (int,), + "page": (CIAppResponsePage,), + "request_id": (str,), + "status": (CIAppResponseStatus,), + "warnings": ([CIAppWarning],), + } + attribute_map = { + "elapsed": "elapsed", + "page": "page", + "request_id": "request_id", + "status": "status", + "warnings": "warnings", + } + + def __init__(self_, elapsed: Union[int, UnsetType]=unset, page: Union[CIAppResponsePage, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, status: Union[CIAppResponseStatus, UnsetType]=unset, warnings: Union[List[CIAppWarning], UnsetType]=unset, **kwargs): + """ + The metadata associated with a request. + + :param elapsed: The time elapsed in milliseconds. + :type elapsed: int, optional + + :param page: Paging attributes. + :type page: CIAppResponsePage, optional + + :param request_id: The identifier of the request. + :type request_id: str, optional + + :param status: The status of the response. + :type status: CIAppResponseStatus, optional + + :param warnings: A list of warnings (non-fatal errors) encountered. Partial results may return if + warnings are present in the response. + :type warnings: [CIAppWarning], optional + """ + if elapsed is not unset: + kwargs["elapsed"] = elapsed + if page is not unset: + kwargs["page"] = page + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_response_page.py b/datadog_api_client/v2/model/ci_app_response_page.py new file mode 100644 index 0000000000..6faf531b2c --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_response_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppResponsePage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str,), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param after: The cursor to use to get the next results, if any. To make the next request, use the same parameters with the addition of ``page[cursor]``. + :type after: str, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_response_status.py b/datadog_api_client/v2/model/ci_app_response_status.py new file mode 100644 index 0000000000..8b79245869 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_response_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppResponseStatus(ModelSimple): + """ + The status of the response. + + :param value: Must be one of ["done", "timeout"]. + :type value: str + """ + + allowed_values = { + "done", + "timeout", + } + DONE: ClassVar["CIAppResponseStatus"] + TIMEOUT: ClassVar["CIAppResponseStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppResponseStatus.DONE = CIAppResponseStatus("done") +CIAppResponseStatus.TIMEOUT = CIAppResponseStatus("timeout") diff --git a/datadog_api_client/v2/model/ci_app_sort.py b/datadog_api_client/v2/model/ci_app_sort.py new file mode 100644 index 0000000000..db93848d4a --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppSort(ModelSimple): + """ + Sort parameters when querying events. + + :param value: Must be one of ["timestamp", "-timestamp"]. + :type value: str + """ + + allowed_values = { + "timestamp", + "-timestamp", + } + TIMESTAMP_ASCENDING: ClassVar["CIAppSort"] + TIMESTAMP_DESCENDING: ClassVar["CIAppSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppSort.TIMESTAMP_ASCENDING = CIAppSort("timestamp") +CIAppSort.TIMESTAMP_DESCENDING = CIAppSort("-timestamp") diff --git a/datadog_api_client/v2/model/ci_app_sort_order.py b/datadog_api_client/v2/model/ci_app_sort_order.py new file mode 100644 index 0000000000..beb4313de2 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_sort_order.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppSortOrder(ModelSimple): + """ + The order to use, ascending or descending. + + :param value: Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + ASCENDING: ClassVar["CIAppSortOrder"] + DESCENDING: ClassVar["CIAppSortOrder"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppSortOrder.ASCENDING = CIAppSortOrder("asc") +CIAppSortOrder.DESCENDING = CIAppSortOrder("desc") diff --git a/datadog_api_client/v2/model/ci_app_test_event.py b/datadog_api_client/v2/model/ci_app_test_event.py new file mode 100644 index 0000000000..74a48f9ea5 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_test_event.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_event_attributes import CIAppEventAttributes + from datadog_api_client.v2.model.ci_app_test_event_type_name import CIAppTestEventTypeName + +class CIAppTestEvent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_event_attributes import CIAppEventAttributes + from datadog_api_client.v2.model.ci_app_test_event_type_name import CIAppTestEventTypeName + return { + "attributes": (CIAppEventAttributes,), + "id": (str,), + "type": (CIAppTestEventTypeName,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CIAppEventAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CIAppTestEventTypeName, UnsetType]=unset, **kwargs): + """ + Object description of test event after being processed and stored by Datadog. + + :param attributes: JSON object containing all event attributes and their associated values. + :type attributes: CIAppEventAttributes, optional + + :param id: Unique ID of the event. + :type id: str, optional + + :param type: Type of the event. + :type type: CIAppTestEventTypeName, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_test_event_type_name.py b/datadog_api_client/v2/model/ci_app_test_event_type_name.py new file mode 100644 index 0000000000..be069c683b --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_test_event_type_name.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppTestEventTypeName(ModelSimple): + """ + Type of the event. + + :param value: If omitted defaults to "citest". Must be one of ["citest"]. + :type value: str + """ + + allowed_values = { + "citest", + } + CITEST: ClassVar["CIAppTestEventTypeName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppTestEventTypeName.CITEST = CIAppTestEventTypeName("citest") diff --git a/datadog_api_client/v2/model/ci_app_test_events_request.py b/datadog_api_client/v2/model/ci_app_test_events_request.py new file mode 100644 index 0000000000..5dd4de9c38 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_test_events_request.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_tests_query_filter import CIAppTestsQueryFilter + from datadog_api_client.v2.model.ci_app_query_options import CIAppQueryOptions + from datadog_api_client.v2.model.ci_app_query_page_options import CIAppQueryPageOptions + from datadog_api_client.v2.model.ci_app_sort import CIAppSort + +class CIAppTestEventsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_tests_query_filter import CIAppTestsQueryFilter + from datadog_api_client.v2.model.ci_app_query_options import CIAppQueryOptions + from datadog_api_client.v2.model.ci_app_query_page_options import CIAppQueryPageOptions + from datadog_api_client.v2.model.ci_app_sort import CIAppSort + return { + "filter": (CIAppTestsQueryFilter,), + "options": (CIAppQueryOptions,), + "page": (CIAppQueryPageOptions,), + "sort": (CIAppSort,), + } + attribute_map = { + "filter": "filter", + "options": "options", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[CIAppTestsQueryFilter, UnsetType]=unset, options: Union[CIAppQueryOptions, UnsetType]=unset, page: Union[CIAppQueryPageOptions, UnsetType]=unset, sort: Union[CIAppSort, UnsetType]=unset, **kwargs): + """ + The request for a tests search. + + :param filter: The search and filter query settings. + :type filter: CIAppTestsQueryFilter, optional + + :param options: Global query options that are used during the query. + Only supply timezone or time offset, not both. Otherwise, the query fails. + :type options: CIAppQueryOptions, optional + + :param page: Paging attributes for listing events. + :type page: CIAppQueryPageOptions, optional + + :param sort: Sort parameters when querying events. + :type sort: CIAppSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_test_events_response.py b/datadog_api_client/v2/model/ci_app_test_events_response.py new file mode 100644 index 0000000000..a45091bb82 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_test_events_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_test_event import CIAppTestEvent + from datadog_api_client.v2.model.ci_app_response_links import CIAppResponseLinks + from datadog_api_client.v2.model.ci_app_response_metadata_with_pagination import CIAppResponseMetadataWithPagination + +class CIAppTestEventsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_test_event import CIAppTestEvent + from datadog_api_client.v2.model.ci_app_response_links import CIAppResponseLinks + from datadog_api_client.v2.model.ci_app_response_metadata_with_pagination import CIAppResponseMetadataWithPagination + return { + "data": ([CIAppTestEvent],), + "links": (CIAppResponseLinks,), + "meta": (CIAppResponseMetadataWithPagination,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[CIAppTestEvent], UnsetType]=unset, links: Union[CIAppResponseLinks, UnsetType]=unset, meta: Union[CIAppResponseMetadataWithPagination, UnsetType]=unset, **kwargs): + """ + Response object with all test events matching the request and pagination information. + + :param data: Array of events matching the request. + :type data: [CIAppTestEvent], optional + + :param links: Links attributes. + :type links: CIAppResponseLinks, optional + + :param meta: The metadata associated with a request. + :type meta: CIAppResponseMetadataWithPagination, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_test_level.py b/datadog_api_client/v2/model/ci_app_test_level.py new file mode 100644 index 0000000000..fe867f6bef --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_test_level.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CIAppTestLevel(ModelSimple): + """ + Test run level. + + :param value: Must be one of ["session", "module", "suite", "test"]. + :type value: str + """ + + allowed_values = { + "session", + "module", + "suite", + "test", + } + SESSION: ClassVar["CIAppTestLevel"] + MODULE: ClassVar["CIAppTestLevel"] + SUITE: ClassVar["CIAppTestLevel"] + TEST: ClassVar["CIAppTestLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CIAppTestLevel.SESSION = CIAppTestLevel("session") +CIAppTestLevel.MODULE = CIAppTestLevel("module") +CIAppTestLevel.SUITE = CIAppTestLevel("suite") +CIAppTestLevel.TEST = CIAppTestLevel("test") diff --git a/datadog_api_client/v2/model/ci_app_tests_aggregate_request.py b/datadog_api_client/v2/model/ci_app_tests_aggregate_request.py new file mode 100644 index 0000000000..5f8f697836 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_tests_aggregate_request.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_compute import CIAppCompute + from datadog_api_client.v2.model.ci_app_tests_query_filter import CIAppTestsQueryFilter + from datadog_api_client.v2.model.ci_app_tests_group_by import CIAppTestsGroupBy + from datadog_api_client.v2.model.ci_app_query_options import CIAppQueryOptions + +class CIAppTestsAggregateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_compute import CIAppCompute + from datadog_api_client.v2.model.ci_app_tests_query_filter import CIAppTestsQueryFilter + from datadog_api_client.v2.model.ci_app_tests_group_by import CIAppTestsGroupBy + from datadog_api_client.v2.model.ci_app_query_options import CIAppQueryOptions + return { + "compute": ([CIAppCompute],), + "filter": (CIAppTestsQueryFilter,), + "group_by": ([CIAppTestsGroupBy],), + "options": (CIAppQueryOptions,), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + "options": "options", + } + + def __init__(self_, compute: Union[List[CIAppCompute], UnsetType]=unset, filter: Union[CIAppTestsQueryFilter, UnsetType]=unset, group_by: Union[List[CIAppTestsGroupBy], UnsetType]=unset, options: Union[CIAppQueryOptions, UnsetType]=unset, **kwargs): + """ + The object sent with the request to retrieve aggregation buckets of test events from your organization. + + :param compute: The list of metrics or timeseries to compute for the retrieved buckets. + :type compute: [CIAppCompute], optional + + :param filter: The search and filter query settings. + :type filter: CIAppTestsQueryFilter, optional + + :param group_by: The rules for the group-by. + :type group_by: [CIAppTestsGroupBy], optional + + :param options: Global query options that are used during the query. + Only supply timezone or time offset, not both. Otherwise, the query fails. + :type options: CIAppQueryOptions, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if options is not unset: + kwargs["options"] = options + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_tests_aggregation_buckets_response.py b/datadog_api_client/v2/model/ci_app_tests_aggregation_buckets_response.py new file mode 100644 index 0000000000..33c26f7664 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_tests_aggregation_buckets_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_tests_bucket_response import CIAppTestsBucketResponse + from datadog_api_client.v2.model.ci_app_aggregate_bucket_value_timeseries import CIAppAggregateBucketValueTimeseries + +class CIAppTestsAggregationBucketsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_tests_bucket_response import CIAppTestsBucketResponse + return { + "buckets": ([CIAppTestsBucketResponse],), + } + attribute_map = { + "buckets": "buckets", + } + + def __init__(self_, buckets: Union[List[CIAppTestsBucketResponse], UnsetType]=unset, **kwargs): + """ + The query results. + + :param buckets: The list of matching buckets, one item per bucket. + :type buckets: [CIAppTestsBucketResponse], optional + """ + if buckets is not unset: + kwargs["buckets"] = buckets + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_tests_analytics_aggregate_response.py b/datadog_api_client/v2/model/ci_app_tests_analytics_aggregate_response.py new file mode 100644 index 0000000000..7d6fe84ab5 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_tests_analytics_aggregate_response.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_tests_aggregation_buckets_response import CIAppTestsAggregationBucketsResponse + from datadog_api_client.v2.model.ci_app_response_links import CIAppResponseLinks + from datadog_api_client.v2.model.ci_app_response_metadata_with_pagination import CIAppResponseMetadataWithPagination + from datadog_api_client.v2.model.ci_app_aggregate_bucket_value_timeseries import CIAppAggregateBucketValueTimeseries + +class CIAppTestsAnalyticsAggregateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_tests_aggregation_buckets_response import CIAppTestsAggregationBucketsResponse + from datadog_api_client.v2.model.ci_app_response_links import CIAppResponseLinks + from datadog_api_client.v2.model.ci_app_response_metadata_with_pagination import CIAppResponseMetadataWithPagination + return { + "data": (CIAppTestsAggregationBucketsResponse,), + "links": (CIAppResponseLinks,), + "meta": (CIAppResponseMetadataWithPagination,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[CIAppTestsAggregationBucketsResponse, UnsetType]=unset, links: Union[CIAppResponseLinks, UnsetType]=unset, meta: Union[CIAppResponseMetadataWithPagination, UnsetType]=unset, **kwargs): + """ + The response object for the test events aggregate API endpoint. + + :param data: The query results. + :type data: CIAppTestsAggregationBucketsResponse, optional + + :param links: Links attributes. + :type links: CIAppResponseLinks, optional + + :param meta: The metadata associated with a request. + :type meta: CIAppResponseMetadataWithPagination, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_tests_bucket_response.py b/datadog_api_client/v2/model/ci_app_tests_bucket_response.py new file mode 100644 index 0000000000..ddfc5db070 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_tests_bucket_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_computes import CIAppComputes + from datadog_api_client.v2.model.ci_app_aggregate_bucket_value_timeseries import CIAppAggregateBucketValueTimeseries + +class CIAppTestsBucketResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_computes import CIAppComputes + return { + "by": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "computes": (CIAppComputes,), + } + attribute_map = { + "by": "by", + "computes": "computes", + } + + def __init__(self_, by: Union[Dict[str, Any], UnsetType]=unset, computes: Union[CIAppComputes, UnsetType]=unset, **kwargs): + """ + Bucket values. + + :param by: The key-value pairs for each group-by. + :type by: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param computes: A map of the metric name to value for regular compute, or a list of values for a timeseries. + :type computes: CIAppComputes, optional + """ + if by is not unset: + kwargs["by"] = by + if computes is not unset: + kwargs["computes"] = computes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_tests_group_by.py b/datadog_api_client/v2/model/ci_app_tests_group_by.py new file mode 100644 index 0000000000..4705b5fdc5 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_tests_group_by.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ci_app_group_by_histogram import CIAppGroupByHistogram + from datadog_api_client.v2.model.ci_app_group_by_missing import CIAppGroupByMissing + from datadog_api_client.v2.model.ci_app_aggregate_sort import CIAppAggregateSort + from datadog_api_client.v2.model.ci_app_group_by_total import CIAppGroupByTotal + +class CIAppTestsGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ci_app_group_by_histogram import CIAppGroupByHistogram + from datadog_api_client.v2.model.ci_app_group_by_missing import CIAppGroupByMissing + from datadog_api_client.v2.model.ci_app_aggregate_sort import CIAppAggregateSort + from datadog_api_client.v2.model.ci_app_group_by_total import CIAppGroupByTotal + return { + "facet": (str,), + "histogram": (CIAppGroupByHistogram,), + "limit": (int,), + "missing": (CIAppGroupByMissing,), + "sort": (CIAppAggregateSort,), + "total": (CIAppGroupByTotal,), + } + attribute_map = { + "facet": "facet", + "histogram": "histogram", + "limit": "limit", + "missing": "missing", + "sort": "sort", + "total": "total", + } + + def __init__(self_, facet: str, histogram: Union[CIAppGroupByHistogram, UnsetType]=unset, limit: Union[int, UnsetType]=unset, missing: Union[CIAppGroupByMissing, str, float, UnsetType]=unset, sort: Union[CIAppAggregateSort, UnsetType]=unset, total: Union[CIAppGroupByTotal, bool, str, float, UnsetType]=unset, **kwargs): + """ + A group-by rule. + + :param facet: The name of the facet to use (required). + :type facet: str + + :param histogram: Used to perform a histogram computation (only for measure facets). + At most, 100 buckets are allowed, the number of buckets is ``(max - min)/interval``. + :type histogram: CIAppGroupByHistogram, optional + + :param limit: The maximum buckets to return for this group-by. + :type limit: int, optional + + :param missing: The value to use for logs that don't have the facet used to group-by. + :type missing: CIAppGroupByMissing, optional + + :param sort: A sort rule. The ``aggregation`` field is required when ``type`` is ``measure``. + :type sort: CIAppAggregateSort, optional + + :param total: A resulting object to put the given computes in over all the matching records. + :type total: CIAppGroupByTotal, optional + """ + if histogram is not unset: + kwargs["histogram"] = histogram + if limit is not unset: + kwargs["limit"] = limit + if missing is not unset: + kwargs["missing"] = missing + if sort is not unset: + kwargs["sort"] = sort + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v2/model/ci_app_tests_query_filter.py b/datadog_api_client/v2/model/ci_app_tests_query_filter.py new file mode 100644 index 0000000000..c58d8380f8 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_tests_query_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppTestsQueryFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (str,), + "query": (str,), + "to": (str,), + } + attribute_map = { + "_from": "from", + "query": "query", + "to": "to", + } + + def __init__(self_, _from: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, to: Union[str, UnsetType]=unset, **kwargs): + """ + The search and filter query settings. + + :param _from: The minimum time for the requested events; supports date, math, and regular timestamps (in milliseconds). + :type _from: str, optional + + :param query: The search query following the CI Visibility Explorer search syntax. + :type query: str, optional + + :param to: The maximum time for the requested events, supports date, math, and regular timestamps (in milliseconds). + :type to: str, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if query is not unset: + kwargs["query"] = query + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ci_app_warning.py b/datadog_api_client/v2/model/ci_app_warning.py new file mode 100644 index 0000000000..b8bfa53385 --- /dev/null +++ b/datadog_api_client/v2/model/ci_app_warning.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CIAppWarning(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "detail": (str,), + "title": (str,), + } + attribute_map = { + "code": "code", + "detail": "detail", + "title": "title", + } + + def __init__(self_, code: Union[str, UnsetType]=unset, detail: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + A warning message indicating something that went wrong with the query. + + :param code: A unique code for this type of warning. + :type code: str, optional + + :param detail: A detailed explanation of this specific warning. + :type detail: str, optional + + :param title: A short human-readable summary of the warning. + :type title: str, optional + """ + if code is not unset: + kwargs["code"] = code + if detail is not unset: + kwargs["detail"] = detail + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/circle_ci_credentials.py b/datadog_api_client/v2/model/circle_ci_credentials.py new file mode 100644 index 0000000000..eeee445496 --- /dev/null +++ b/datadog_api_client/v2/model/circle_ci_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CircleCICredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``CircleCICredentials`` object. + + :param api_token: The `CircleCIAPIKey` `api_token`. + :type api_token: str + + :param type: The definition of the `CircleCIAPIKey` object. + :type type: CircleCIAPIKeyType + """ + 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.circle_ciapi_key import CircleCIAPIKey + return { + "oneOf": [ + CircleCIAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/circle_ci_credentials_update.py b/datadog_api_client/v2/model/circle_ci_credentials_update.py new file mode 100644 index 0000000000..c00d0dc0e3 --- /dev/null +++ b/datadog_api_client/v2/model/circle_ci_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CircleCICredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``CircleCICredentialsUpdate`` object. + + :param api_token: The `CircleCIAPIKeyUpdate` `api_token`. + :type api_token: str, optional + + :param type: The definition of the `CircleCIAPIKey` object. + :type type: CircleCIAPIKeyType + """ + 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.circle_ciapi_key_update import CircleCIAPIKeyUpdate + return { + "oneOf": [ + CircleCIAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/circle_ci_integration.py b/datadog_api_client/v2/model/circle_ci_integration.py new file mode 100644 index 0000000000..fdca874e5c --- /dev/null +++ b/datadog_api_client/v2/model/circle_ci_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.circle_ci_credentials import CircleCICredentials + from datadog_api_client.v2.model.circle_ci_integration_type import CircleCIIntegrationType + from datadog_api_client.v2.model.circle_ciapi_key import CircleCIAPIKey + +class CircleCIIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.circle_ci_credentials import CircleCICredentials + from datadog_api_client.v2.model.circle_ci_integration_type import CircleCIIntegrationType + return { + "credentials": (CircleCICredentials,), + "type": (CircleCIIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[CircleCICredentials, CircleCIAPIKey], type: CircleCIIntegrationType, **kwargs): + """ + The definition of the ``CircleCIIntegration`` object. + + :param credentials: The definition of the ``CircleCICredentials`` object. + :type credentials: CircleCICredentials + + :param type: The definition of the ``CircleCIIntegrationType`` object. + :type type: CircleCIIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/circle_ci_integration_type.py b/datadog_api_client/v2/model/circle_ci_integration_type.py new file mode 100644 index 0000000000..2f9a4eee4c --- /dev/null +++ b/datadog_api_client/v2/model/circle_ci_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CircleCIIntegrationType(ModelSimple): + """ + The definition of the `CircleCIIntegrationType` object. + + :param value: If omitted defaults to "CircleCI". Must be one of ["CircleCI"]. + :type value: str + """ + + allowed_values = { + "CircleCI", + } + CIRCLECI: ClassVar["CircleCIIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CircleCIIntegrationType.CIRCLECI = CircleCIIntegrationType("CircleCI") diff --git a/datadog_api_client/v2/model/circle_ci_integration_update.py b/datadog_api_client/v2/model/circle_ci_integration_update.py new file mode 100644 index 0000000000..2ce815cc9c --- /dev/null +++ b/datadog_api_client/v2/model/circle_ci_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.circle_ci_credentials_update import CircleCICredentialsUpdate + from datadog_api_client.v2.model.circle_ci_integration_type import CircleCIIntegrationType + from datadog_api_client.v2.model.circle_ciapi_key_update import CircleCIAPIKeyUpdate + +class CircleCIIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.circle_ci_credentials_update import CircleCICredentialsUpdate + from datadog_api_client.v2.model.circle_ci_integration_type import CircleCIIntegrationType + return { + "credentials": (CircleCICredentialsUpdate,), + "type": (CircleCIIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: CircleCIIntegrationType, credentials: Union[CircleCICredentialsUpdate, CircleCIAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``CircleCIIntegrationUpdate`` object. + + :param credentials: The definition of the ``CircleCICredentialsUpdate`` object. + :type credentials: CircleCICredentialsUpdate, optional + + :param type: The definition of the ``CircleCIIntegrationType`` object. + :type type: CircleCIIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/circle_ciapi_key.py b/datadog_api_client/v2/model/circle_ciapi_key.py new file mode 100644 index 0000000000..63eab03f38 --- /dev/null +++ b/datadog_api_client/v2/model/circle_ciapi_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.circle_ciapi_key_type import CircleCIAPIKeyType + +class CircleCIAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.circle_ciapi_key_type import CircleCIAPIKeyType + return { + "api_token": (str,), + "type": (CircleCIAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, api_token: str, type: CircleCIAPIKeyType, **kwargs): + """ + The definition of the ``CircleCIAPIKey`` object. + + :param api_token: The ``CircleCIAPIKey`` ``api_token``. + :type api_token: str + + :param type: The definition of the ``CircleCIAPIKey`` object. + :type type: CircleCIAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_token = api_token + self_.type = type diff --git a/datadog_api_client/v2/model/circle_ciapi_key_type.py b/datadog_api_client/v2/model/circle_ciapi_key_type.py new file mode 100644 index 0000000000..2375a19f46 --- /dev/null +++ b/datadog_api_client/v2/model/circle_ciapi_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CircleCIAPIKeyType(ModelSimple): + """ + The definition of the `CircleCIAPIKey` object. + + :param value: If omitted defaults to "CircleCIAPIKey". Must be one of ["CircleCIAPIKey"]. + :type value: str + """ + + allowed_values = { + "CircleCIAPIKey", + } + CIRCLECIAPIKEY: ClassVar["CircleCIAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CircleCIAPIKeyType.CIRCLECIAPIKEY = CircleCIAPIKeyType("CircleCIAPIKey") diff --git a/datadog_api_client/v2/model/circle_ciapi_key_update.py b/datadog_api_client/v2/model/circle_ciapi_key_update.py new file mode 100644 index 0000000000..4c6bc3d61b --- /dev/null +++ b/datadog_api_client/v2/model/circle_ciapi_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.circle_ciapi_key_type import CircleCIAPIKeyType + +class CircleCIAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.circle_ciapi_key_type import CircleCIAPIKeyType + return { + "api_token": (str,), + "type": (CircleCIAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, type: CircleCIAPIKeyType, api_token: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``CircleCIAPIKey`` object. + + :param api_token: The ``CircleCIAPIKeyUpdate`` ``api_token``. + :type api_token: str, optional + + :param type: The definition of the ``CircleCIAPIKey`` object. + :type type: CircleCIAPIKeyType + """ + if api_token is not unset: + kwargs["api_token"] = api_token + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/clickup_api_key.py b/datadog_api_client/v2/model/clickup_api_key.py new file mode 100644 index 0000000000..cc54a26e25 --- /dev/null +++ b/datadog_api_client/v2/model/clickup_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.clickup_api_key_type import ClickupAPIKeyType + +class ClickupAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.clickup_api_key_type import ClickupAPIKeyType + return { + "api_token": (str,), + "type": (ClickupAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, api_token: str, type: ClickupAPIKeyType, **kwargs): + """ + The definition of the ``ClickupAPIKey`` object. + + :param api_token: The ``ClickupAPIKey`` ``api_token``. + :type api_token: str + + :param type: The definition of the ``ClickupAPIKey`` object. + :type type: ClickupAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_token = api_token + self_.type = type diff --git a/datadog_api_client/v2/model/clickup_api_key_type.py b/datadog_api_client/v2/model/clickup_api_key_type.py new file mode 100644 index 0000000000..32e148538e --- /dev/null +++ b/datadog_api_client/v2/model/clickup_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ClickupAPIKeyType(ModelSimple): + """ + The definition of the `ClickupAPIKey` object. + + :param value: If omitted defaults to "ClickupAPIKey". Must be one of ["ClickupAPIKey"]. + :type value: str + """ + + allowed_values = { + "ClickupAPIKey", + } + CLICKUPAPIKEY: ClassVar["ClickupAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ClickupAPIKeyType.CLICKUPAPIKEY = ClickupAPIKeyType("ClickupAPIKey") diff --git a/datadog_api_client/v2/model/clickup_api_key_update.py b/datadog_api_client/v2/model/clickup_api_key_update.py new file mode 100644 index 0000000000..d8d2d664ea --- /dev/null +++ b/datadog_api_client/v2/model/clickup_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.clickup_api_key_type import ClickupAPIKeyType + +class ClickupAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.clickup_api_key_type import ClickupAPIKeyType + return { + "api_token": (str,), + "type": (ClickupAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, type: ClickupAPIKeyType, api_token: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``ClickupAPIKey`` object. + + :param api_token: The ``ClickupAPIKeyUpdate`` ``api_token``. + :type api_token: str, optional + + :param type: The definition of the ``ClickupAPIKey`` object. + :type type: ClickupAPIKeyType + """ + if api_token is not unset: + kwargs["api_token"] = api_token + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/clickup_credentials.py b/datadog_api_client/v2/model/clickup_credentials.py new file mode 100644 index 0000000000..989938d33b --- /dev/null +++ b/datadog_api_client/v2/model/clickup_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ClickupCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``ClickupCredentials`` object. + + :param api_token: The `ClickupAPIKey` `api_token`. + :type api_token: str + + :param type: The definition of the `ClickupAPIKey` object. + :type type: ClickupAPIKeyType + """ + 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.clickup_api_key import ClickupAPIKey + return { + "oneOf": [ + ClickupAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/clickup_credentials_update.py b/datadog_api_client/v2/model/clickup_credentials_update.py new file mode 100644 index 0000000000..ff8328b7c0 --- /dev/null +++ b/datadog_api_client/v2/model/clickup_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ClickupCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``ClickupCredentialsUpdate`` object. + + :param api_token: The `ClickupAPIKeyUpdate` `api_token`. + :type api_token: str, optional + + :param type: The definition of the `ClickupAPIKey` object. + :type type: ClickupAPIKeyType + """ + 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.clickup_api_key_update import ClickupAPIKeyUpdate + return { + "oneOf": [ + ClickupAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/clickup_integration.py b/datadog_api_client/v2/model/clickup_integration.py new file mode 100644 index 0000000000..1b0cdae7a4 --- /dev/null +++ b/datadog_api_client/v2/model/clickup_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.clickup_credentials import ClickupCredentials + from datadog_api_client.v2.model.clickup_integration_type import ClickupIntegrationType + from datadog_api_client.v2.model.clickup_api_key import ClickupAPIKey + +class ClickupIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.clickup_credentials import ClickupCredentials + from datadog_api_client.v2.model.clickup_integration_type import ClickupIntegrationType + return { + "credentials": (ClickupCredentials,), + "type": (ClickupIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[ClickupCredentials, ClickupAPIKey], type: ClickupIntegrationType, **kwargs): + """ + The definition of the ``ClickupIntegration`` object. + + :param credentials: The definition of the ``ClickupCredentials`` object. + :type credentials: ClickupCredentials + + :param type: The definition of the ``ClickupIntegrationType`` object. + :type type: ClickupIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/clickup_integration_type.py b/datadog_api_client/v2/model/clickup_integration_type.py new file mode 100644 index 0000000000..9612009984 --- /dev/null +++ b/datadog_api_client/v2/model/clickup_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ClickupIntegrationType(ModelSimple): + """ + The definition of the `ClickupIntegrationType` object. + + :param value: If omitted defaults to "Clickup". Must be one of ["Clickup"]. + :type value: str + """ + + allowed_values = { + "Clickup", + } + CLICKUP: ClassVar["ClickupIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ClickupIntegrationType.CLICKUP = ClickupIntegrationType("Clickup") diff --git a/datadog_api_client/v2/model/clickup_integration_update.py b/datadog_api_client/v2/model/clickup_integration_update.py new file mode 100644 index 0000000000..4b60b63b24 --- /dev/null +++ b/datadog_api_client/v2/model/clickup_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.clickup_credentials_update import ClickupCredentialsUpdate + from datadog_api_client.v2.model.clickup_integration_type import ClickupIntegrationType + from datadog_api_client.v2.model.clickup_api_key_update import ClickupAPIKeyUpdate + +class ClickupIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.clickup_credentials_update import ClickupCredentialsUpdate + from datadog_api_client.v2.model.clickup_integration_type import ClickupIntegrationType + return { + "credentials": (ClickupCredentialsUpdate,), + "type": (ClickupIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: ClickupIntegrationType, credentials: Union[ClickupCredentialsUpdate, ClickupAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``ClickupIntegrationUpdate`` object. + + :param credentials: The definition of the ``ClickupCredentialsUpdate`` object. + :type credentials: ClickupCredentialsUpdate, optional + + :param type: The definition of the ``ClickupIntegrationType`` object. + :type type: ClickupIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/clone_form_data.py b/datadog_api_client/v2/model/clone_form_data.py new file mode 100644 index 0000000000..23a93be05f --- /dev/null +++ b/datadog_api_client/v2/model/clone_form_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.clone_form_data_attributes import CloneFormDataAttributes + from datadog_api_client.v2.model.form_type import FormType + +class CloneFormData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.clone_form_data_attributes import CloneFormDataAttributes + from datadog_api_client.v2.model.form_type import FormType + return { + "attributes": (CloneFormDataAttributes,), + "type": (FormType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: FormType, attributes: Union[CloneFormDataAttributes, UnsetType]=unset, **kwargs): + """ + The data for cloning a form. + + :param attributes: The attributes for cloning a form. + :type attributes: CloneFormDataAttributes, optional + + :param type: The resource type for a form. + :type type: FormType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/clone_form_data_attributes.py b/datadog_api_client/v2/model/clone_form_data_attributes.py new file mode 100644 index 0000000000..357d8bfa53 --- /dev/null +++ b/datadog_api_client/v2/model/clone_form_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloneFormDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes for cloning a form. + + :param name: The name for the cloned form. Defaults to "Copy of (source form name)" if not provided. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/clone_form_request.py b/datadog_api_client/v2/model/clone_form_request.py new file mode 100644 index 0000000000..201bea2588 --- /dev/null +++ b/datadog_api_client/v2/model/clone_form_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.clone_form_data import CloneFormData + +class CloneFormRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.clone_form_data import CloneFormData + return { + "data": (CloneFormData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CloneFormData, **kwargs): + """ + A request to clone a form. + + :param data: The data for cloning a form. + :type data: CloneFormData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cloud_asset_type.py b/datadog_api_client/v2/model/cloud_asset_type.py new file mode 100644 index 0000000000..1e11a376f1 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_asset_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudAssetType(ModelSimple): + """ + The cloud asset type + + :param value: Must be one of ["Host", "HostImage", "Image"]. + :type value: str + """ + + allowed_values = { + "Host", + "HostImage", + "Image", + } + HOST: ClassVar["CloudAssetType"] + HOST_IMAGE: ClassVar["CloudAssetType"] + IMAGE: ClassVar["CloudAssetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudAssetType.HOST = CloudAssetType("Host") +CloudAssetType.HOST_IMAGE = CloudAssetType("HostImage") +CloudAssetType.IMAGE = CloudAssetType("Image") diff --git a/datadog_api_client/v2/model/cloud_configuration_compliance_rule_options.py b/datadog_api_client/v2/model/cloud_configuration_compliance_rule_options.py new file mode 100644 index 0000000000..d1e7b771cb --- /dev/null +++ b/datadog_api_client/v2/model/cloud_configuration_compliance_rule_options.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_configuration_rego_rule import CloudConfigurationRegoRule + +class CloudConfigurationComplianceRuleOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_configuration_rego_rule import CloudConfigurationRegoRule + return { + "complex_rule": (bool,), + "rego_rule": (CloudConfigurationRegoRule,), + "resource_type": (str,), + } + attribute_map = { + "complex_rule": "complexRule", + "rego_rule": "regoRule", + "resource_type": "resourceType", + } + + def __init__(self_, complex_rule: Union[bool, UnsetType]=unset, rego_rule: Union[CloudConfigurationRegoRule, UnsetType]=unset, resource_type: Union[str, UnsetType]=unset, **kwargs): + """ + Options for cloud_configuration rules. + Fields ``resourceType`` and ``regoRule`` are mandatory when managing custom ``cloud_configuration`` rules. + + :param complex_rule: Whether the rule is a complex one. + Must be set to true if ``regoRule.resourceTypes`` contains more than one item. Defaults to false. + :type complex_rule: bool, optional + + :param rego_rule: Rule details. + :type rego_rule: CloudConfigurationRegoRule, optional + + :param resource_type: Main resource type to be checked by the rule. It should be specified again in ``regoRule.resourceTypes``. + :type resource_type: str, optional + """ + if complex_rule is not unset: + kwargs["complex_rule"] = complex_rule + if rego_rule is not unset: + kwargs["rego_rule"] = rego_rule + if resource_type is not unset: + kwargs["resource_type"] = resource_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_configuration_rego_rule.py b/datadog_api_client/v2/model/cloud_configuration_rego_rule.py new file mode 100644 index 0000000000..30ee70b4ba --- /dev/null +++ b/datadog_api_client/v2/model/cloud_configuration_rego_rule.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudConfigurationRegoRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "policy": (str,), + "resource_types": ([str],), + } + attribute_map = { + "policy": "policy", + "resource_types": "resourceTypes", + } + + def __init__(self_, policy: str, resource_types: List[str], **kwargs): + """ + Rule details. + + :param policy: The policy written in ``rego`` , see: https://www.openpolicyagent.org/docs/latest/policy-language/ + :type policy: str + + :param resource_types: List of resource types that will be evaluated upon. Must have at least one element. + :type resource_types: [str] + """ + super().__init__(kwargs) + + + self_.policy = policy + self_.resource_types = resource_types diff --git a/datadog_api_client/v2/model/cloud_configuration_rule_case_create.py b/datadog_api_client/v2/model/cloud_configuration_rule_case_create.py new file mode 100644 index 0000000000..a25ec39307 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_configuration_rule_case_create.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + +class CloudConfigurationRuleCaseCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + return { + "notifications": ([str],), + "status": (SecurityMonitoringRuleSeverity,), + } + attribute_map = { + "notifications": "notifications", + "status": "status", + } + + def __init__(self_, status: SecurityMonitoringRuleSeverity, notifications: Union[List[str], UnsetType]=unset, **kwargs): + """ + Description of signals. + + :param notifications: Notification targets for each rule case. + :type notifications: [str], optional + + :param status: Severity of the Security Signal. + :type status: SecurityMonitoringRuleSeverity + """ + if notifications is not unset: + kwargs["notifications"] = notifications + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/cloud_configuration_rule_compliance_signal_options.py b/datadog_api_client/v2/model/cloud_configuration_rule_compliance_signal_options.py new file mode 100644 index 0000000000..23f07d9e74 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_configuration_rule_compliance_signal_options.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudConfigurationRuleComplianceSignalOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "default_activation_status": (bool, none_type), + "default_group_by_fields": ([str], none_type), + "user_activation_status": (bool, none_type), + "user_group_by_fields": ([str], none_type), + } + attribute_map = { + "default_activation_status": "defaultActivationStatus", + "default_group_by_fields": "defaultGroupByFields", + "user_activation_status": "userActivationStatus", + "user_group_by_fields": "userGroupByFields", + } + + def __init__(self_, default_activation_status: Union[bool, none_type, UnsetType]=unset, default_group_by_fields: Union[List[str], none_type, UnsetType]=unset, user_activation_status: Union[bool, none_type, UnsetType]=unset, user_group_by_fields: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + How to generate compliance signals. Useful for cloud_configuration rules only. + + :param default_activation_status: The default activation status. + :type default_activation_status: bool, none_type, optional + + :param default_group_by_fields: The default group by fields. + :type default_group_by_fields: [str], none_type, optional + + :param user_activation_status: Whether signals will be sent. + :type user_activation_status: bool, none_type, optional + + :param user_group_by_fields: Fields to use to group findings by when sending signals. + :type user_group_by_fields: [str], none_type, optional + """ + if default_activation_status is not unset: + kwargs["default_activation_status"] = default_activation_status + if default_group_by_fields is not unset: + kwargs["default_group_by_fields"] = default_group_by_fields + if user_activation_status is not unset: + kwargs["user_activation_status"] = user_activation_status + if user_group_by_fields is not unset: + kwargs["user_group_by_fields"] = user_group_by_fields + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_configuration_rule_create_payload.py b/datadog_api_client/v2/model/cloud_configuration_rule_create_payload.py new file mode 100644 index 0000000000..5b074686f9 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_configuration_rule_create_payload.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_configuration_rule_case_create import CloudConfigurationRuleCaseCreate + from datadog_api_client.v2.model.cloud_configuration_rule_compliance_signal_options import CloudConfigurationRuleComplianceSignalOptions + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.cloud_configuration_rule_options import CloudConfigurationRuleOptions + from datadog_api_client.v2.model.cloud_configuration_rule_type import CloudConfigurationRuleType + +class CloudConfigurationRuleCreatePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_configuration_rule_case_create import CloudConfigurationRuleCaseCreate + from datadog_api_client.v2.model.cloud_configuration_rule_compliance_signal_options import CloudConfigurationRuleComplianceSignalOptions + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.cloud_configuration_rule_options import CloudConfigurationRuleOptions + from datadog_api_client.v2.model.cloud_configuration_rule_type import CloudConfigurationRuleType + return { + "cases": ([CloudConfigurationRuleCaseCreate],), + "compliance_signal_options": (CloudConfigurationRuleComplianceSignalOptions,), + "filters": ([SecurityMonitoringFilter],), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (CloudConfigurationRuleOptions,), + "tags": ([str],), + "type": (CloudConfigurationRuleType,), + } + attribute_map = { + "cases": "cases", + "compliance_signal_options": "complianceSignalOptions", + "filters": "filters", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "tags": "tags", + "type": "type", + } + + def __init__(self_, cases: List[CloudConfigurationRuleCaseCreate], compliance_signal_options: CloudConfigurationRuleComplianceSignalOptions, is_enabled: bool, message: str, name: str, options: CloudConfigurationRuleOptions, filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[CloudConfigurationRuleType, UnsetType]=unset, **kwargs): + """ + Create a new cloud configuration rule. + + :param cases: Description of generated findings and signals (severity and channels to be notified in case of a signal). Must contain exactly one item. + :type cases: [CloudConfigurationRuleCaseCreate] + + :param compliance_signal_options: How to generate compliance signals. Useful for cloud_configuration rules only. + :type compliance_signal_options: CloudConfigurationRuleComplianceSignalOptions + + :param filters: Additional queries to filter matched events before they are processed. + :type filters: [SecurityMonitoringFilter], optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message in markdown format for generated findings and signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options on cloud configuration rules. + :type options: CloudConfigurationRuleOptions + + :param tags: Tags for generated findings and signals. + :type tags: [str], optional + + :param type: The rule type. + :type type: CloudConfigurationRuleType, optional + """ + if filters is not unset: + kwargs["filters"] = filters + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.cases = cases + self_.compliance_signal_options = compliance_signal_options + self_.is_enabled = is_enabled + self_.message = message + self_.name = name + self_.options = options diff --git a/datadog_api_client/v2/model/cloud_configuration_rule_options.py b/datadog_api_client/v2/model/cloud_configuration_rule_options.py new file mode 100644 index 0000000000..d216b87562 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_configuration_rule_options.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_configuration_compliance_rule_options import CloudConfigurationComplianceRuleOptions + +class CloudConfigurationRuleOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_configuration_compliance_rule_options import CloudConfigurationComplianceRuleOptions + return { + "compliance_rule_options": (CloudConfigurationComplianceRuleOptions,), + } + attribute_map = { + "compliance_rule_options": "complianceRuleOptions", + } + + def __init__(self_, compliance_rule_options: CloudConfigurationComplianceRuleOptions, **kwargs): + """ + Options on cloud configuration rules. + + :param compliance_rule_options: Options for cloud_configuration rules. + Fields ``resourceType`` and ``regoRule`` are mandatory when managing custom ``cloud_configuration`` rules. + :type compliance_rule_options: CloudConfigurationComplianceRuleOptions + """ + super().__init__(kwargs) + + + self_.compliance_rule_options = compliance_rule_options diff --git a/datadog_api_client/v2/model/cloud_configuration_rule_payload.py b/datadog_api_client/v2/model/cloud_configuration_rule_payload.py new file mode 100644 index 0000000000..eeb09f1329 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_configuration_rule_payload.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_configuration_rule_case_create import CloudConfigurationRuleCaseCreate + from datadog_api_client.v2.model.cloud_configuration_rule_compliance_signal_options import CloudConfigurationRuleComplianceSignalOptions + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.cloud_configuration_rule_options import CloudConfigurationRuleOptions + from datadog_api_client.v2.model.cloud_configuration_rule_type import CloudConfigurationRuleType + +class CloudConfigurationRulePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_configuration_rule_case_create import CloudConfigurationRuleCaseCreate + from datadog_api_client.v2.model.cloud_configuration_rule_compliance_signal_options import CloudConfigurationRuleComplianceSignalOptions + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.cloud_configuration_rule_options import CloudConfigurationRuleOptions + from datadog_api_client.v2.model.cloud_configuration_rule_type import CloudConfigurationRuleType + return { + "cases": ([CloudConfigurationRuleCaseCreate],), + "compliance_signal_options": (CloudConfigurationRuleComplianceSignalOptions,), + "custom_message": (str,), + "custom_name": (str,), + "filters": ([SecurityMonitoringFilter],), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (CloudConfigurationRuleOptions,), + "tags": ([str],), + "type": (CloudConfigurationRuleType,), + } + attribute_map = { + "cases": "cases", + "compliance_signal_options": "complianceSignalOptions", + "custom_message": "customMessage", + "custom_name": "customName", + "filters": "filters", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "tags": "tags", + "type": "type", + } + + def __init__(self_, cases: List[CloudConfigurationRuleCaseCreate], compliance_signal_options: CloudConfigurationRuleComplianceSignalOptions, is_enabled: bool, message: str, name: str, options: CloudConfigurationRuleOptions, custom_message: Union[str, UnsetType]=unset, custom_name: Union[str, UnsetType]=unset, filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[CloudConfigurationRuleType, UnsetType]=unset, **kwargs): + """ + The payload of a cloud configuration rule. + + :param cases: Description of generated findings and signals (severity and channels to be notified in case of a signal). Must contain exactly one item. + :type cases: [CloudConfigurationRuleCaseCreate] + + :param compliance_signal_options: How to generate compliance signals. Useful for cloud_configuration rules only. + :type compliance_signal_options: CloudConfigurationRuleComplianceSignalOptions + + :param custom_message: Custom/Overridden message for generated signals (used in case of Default rule update). + :type custom_message: str, optional + + :param custom_name: Custom/Overridden name of the rule (used in case of Default rule update). + :type custom_name: str, optional + + :param filters: Additional queries to filter matched events before they are processed. + :type filters: [SecurityMonitoringFilter], optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message in markdown format for generated findings and signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options on cloud configuration rules. + :type options: CloudConfigurationRuleOptions + + :param tags: Tags for generated findings and signals. + :type tags: [str], optional + + :param type: The rule type. + :type type: CloudConfigurationRuleType, optional + """ + if custom_message is not unset: + kwargs["custom_message"] = custom_message + if custom_name is not unset: + kwargs["custom_name"] = custom_name + if filters is not unset: + kwargs["filters"] = filters + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.cases = cases + self_.compliance_signal_options = compliance_signal_options + self_.is_enabled = is_enabled + self_.message = message + self_.name = name + self_.options = options diff --git a/datadog_api_client/v2/model/cloud_configuration_rule_type.py b/datadog_api_client/v2/model/cloud_configuration_rule_type.py new file mode 100644 index 0000000000..97a7f029c8 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_configuration_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudConfigurationRuleType(ModelSimple): + """ + The rule type. + + :param value: If omitted defaults to "cloud_configuration". Must be one of ["cloud_configuration"]. + :type value: str + """ + + allowed_values = { + "cloud_configuration", + } + CLOUD_CONFIGURATION: ClassVar["CloudConfigurationRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudConfigurationRuleType.CLOUD_CONFIGURATION = CloudConfigurationRuleType("cloud_configuration") diff --git a/datadog_api_client/v2/model/cloud_inventory_cloud_provider_id.py b/datadog_api_client/v2/model/cloud_inventory_cloud_provider_id.py new file mode 100644 index 0000000000..41e3daf5ac --- /dev/null +++ b/datadog_api_client/v2/model/cloud_inventory_cloud_provider_id.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudInventoryCloudProviderId(ModelSimple): + """ + Cloud provider for this sync configuration (`aws`, `gcp`, or `azure`). For requests, must match the provider block supplied under `attributes`. + + :param value: Must be one of ["aws", "gcp", "azure"]. + :type value: str + """ + + allowed_values = { + "aws", + "gcp", + "azure", + } + AWS: ClassVar["CloudInventoryCloudProviderId"] + GCP: ClassVar["CloudInventoryCloudProviderId"] + AZURE: ClassVar["CloudInventoryCloudProviderId"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudInventoryCloudProviderId.AWS = CloudInventoryCloudProviderId("aws") +CloudInventoryCloudProviderId.GCP = CloudInventoryCloudProviderId("gcp") +CloudInventoryCloudProviderId.AZURE = CloudInventoryCloudProviderId("azure") diff --git a/datadog_api_client/v2/model/cloud_inventory_cloud_provider_request_type.py b/datadog_api_client/v2/model/cloud_inventory_cloud_provider_request_type.py new file mode 100644 index 0000000000..26618832ff --- /dev/null +++ b/datadog_api_client/v2/model/cloud_inventory_cloud_provider_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudInventoryCloudProviderRequestType(ModelSimple): + """ + Always `cloud_provider`. + + :param value: If omitted defaults to "cloud_provider". Must be one of ["cloud_provider"]. + :type value: str + """ + + allowed_values = { + "cloud_provider", + } + CLOUD_PROVIDER: ClassVar["CloudInventoryCloudProviderRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudInventoryCloudProviderRequestType.CLOUD_PROVIDER = CloudInventoryCloudProviderRequestType("cloud_provider") diff --git a/datadog_api_client/v2/model/cloud_inventory_sync_config_attributes.py b/datadog_api_client/v2/model/cloud_inventory_sync_config_attributes.py new file mode 100644 index 0000000000..37aca34707 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_inventory_sync_config_attributes.py @@ -0,0 +1,131 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_inventory_cloud_provider_id import CloudInventoryCloudProviderId + +class CloudInventorySyncConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_inventory_cloud_provider_id import CloudInventoryCloudProviderId + return { + "aws_account_id": (str,), + "aws_bucket_name": (str,), + "aws_region": (str,), + "azure_client_id": (str,), + "azure_container_name": (str,), + "azure_storage_account_name": (str,), + "azure_tenant_id": (str,), + "cloud_provider": (CloudInventoryCloudProviderId,), + "error": (str,), + "error_code": (str,), + "gcp_bucket_name": (str,), + "gcp_project_id": (str,), + "gcp_service_account_email": (str,), + "prefix": (str,), + } + attribute_map = { + "aws_account_id": "aws_account_id", + "aws_bucket_name": "aws_bucket_name", + "aws_region": "aws_region", + "azure_client_id": "azure_client_id", + "azure_container_name": "azure_container_name", + "azure_storage_account_name": "azure_storage_account_name", + "azure_tenant_id": "azure_tenant_id", + "cloud_provider": "cloud_provider", + "error": "error", + "error_code": "error_code", + "gcp_bucket_name": "gcp_bucket_name", + "gcp_project_id": "gcp_project_id", + "gcp_service_account_email": "gcp_service_account_email", + "prefix": "prefix", + } + read_only_vars = { + "error", + "error_code", + "prefix", + } + + def __init__(self_, aws_account_id: str, aws_bucket_name: str, aws_region: str, azure_client_id: str, azure_container_name: str, azure_storage_account_name: str, azure_tenant_id: str, cloud_provider: CloudInventoryCloudProviderId, error: str, error_code: str, gcp_bucket_name: str, gcp_project_id: str, gcp_service_account_email: str, prefix: str, **kwargs): + """ + Attributes for a Storage Management configuration. Fields other than ``id`` may be empty in the response immediately after a create or update; subsequent reads return the full configuration. + + :param aws_account_id: AWS account ID for the inventory bucket. + :type aws_account_id: str + + :param aws_bucket_name: AWS S3 bucket name for inventory files. + :type aws_bucket_name: str + + :param aws_region: AWS Region for the inventory bucket. + :type aws_region: str + + :param azure_client_id: Azure AD application (client) ID. + :type azure_client_id: str + + :param azure_container_name: Azure blob container name. + :type azure_container_name: str + + :param azure_storage_account_name: Azure storage account name. + :type azure_storage_account_name: str + + :param azure_tenant_id: Azure AD tenant ID. + :type azure_tenant_id: str + + :param cloud_provider: Cloud provider for this sync configuration ( ``aws`` , ``gcp`` , or ``azure`` ). For requests, must match the provider block supplied under ``attributes``. + :type cloud_provider: CloudInventoryCloudProviderId + + :param error: Human-readable error detail when sync is unhealthy. + :type error: str + + :param error_code: Machine-readable error code when sync is unhealthy. + :type error_code: str + + :param gcp_bucket_name: GCS bucket name for inventory files Datadog reads. + :type gcp_bucket_name: str + + :param gcp_project_id: GCP project ID. + :type gcp_project_id: str + + :param gcp_service_account_email: Service account email for bucket access. + :type gcp_service_account_email: str + + :param prefix: Object key prefix where inventory reports are written. Returns ``/`` when reports are written at the bucket root. + :type prefix: str + """ + super().__init__(kwargs) + + + self_.aws_account_id = aws_account_id + self_.aws_bucket_name = aws_bucket_name + self_.aws_region = aws_region + self_.azure_client_id = azure_client_id + self_.azure_container_name = azure_container_name + self_.azure_storage_account_name = azure_storage_account_name + self_.azure_tenant_id = azure_tenant_id + self_.cloud_provider = cloud_provider + self_.error = error + self_.error_code = error_code + self_.gcp_bucket_name = gcp_bucket_name + self_.gcp_project_id = gcp_project_id + self_.gcp_service_account_email = gcp_service_account_email + self_.prefix = prefix diff --git a/datadog_api_client/v2/model/cloud_inventory_sync_config_aws_request_attributes.py b/datadog_api_client/v2/model/cloud_inventory_sync_config_aws_request_attributes.py new file mode 100644 index 0000000000..b736f865b4 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_inventory_sync_config_aws_request_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudInventorySyncConfigAWSRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aws_account_id": (str,), + "destination_bucket_name": (str,), + "destination_bucket_region": (str,), + "destination_prefix": (str,), + } + attribute_map = { + "aws_account_id": "aws_account_id", + "destination_bucket_name": "destination_bucket_name", + "destination_bucket_region": "destination_bucket_region", + "destination_prefix": "destination_prefix", + } + + def __init__(self_, aws_account_id: str, destination_bucket_name: str, destination_bucket_region: str, destination_prefix: Union[str, UnsetType]=unset, **kwargs): + """ + AWS settings for the S3 bucket Storage Management reads inventory reports from. + + :param aws_account_id: AWS account ID that owns the inventory bucket. + :type aws_account_id: str + + :param destination_bucket_name: Name of the S3 bucket containing inventory files. + :type destination_bucket_name: str + + :param destination_bucket_region: AWS Region of the inventory bucket. + :type destination_bucket_region: str + + :param destination_prefix: Object key prefix where inventory reports are written. Omit or set to ``/`` when reports are written at the bucket root. + :type destination_prefix: str, optional + """ + if destination_prefix is not unset: + kwargs["destination_prefix"] = destination_prefix + super().__init__(kwargs) + + + self_.aws_account_id = aws_account_id + self_.destination_bucket_name = destination_bucket_name + self_.destination_bucket_region = destination_bucket_region diff --git a/datadog_api_client/v2/model/cloud_inventory_sync_config_azure_request_attributes.py b/datadog_api_client/v2/model/cloud_inventory_sync_config_azure_request_attributes.py new file mode 100644 index 0000000000..bf3e8121b8 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_inventory_sync_config_azure_request_attributes.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudInventorySyncConfigAzureRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "client_id": (str,), + "container": (str,), + "resource_group": (str,), + "storage_account": (str,), + "subscription_id": (str,), + "tenant_id": (str,), + } + attribute_map = { + "client_id": "client_id", + "container": "container", + "resource_group": "resource_group", + "storage_account": "storage_account", + "subscription_id": "subscription_id", + "tenant_id": "tenant_id", + } + + def __init__(self_, client_id: str, container: str, resource_group: str, storage_account: str, subscription_id: str, tenant_id: str, **kwargs): + """ + Azure settings for the storage account and container with inventory data. + + :param client_id: Azure AD application (client) ID used for access. + :type client_id: str + + :param container: Blob container name. + :type container: str + + :param resource_group: Resource group containing the storage account. + :type resource_group: str + + :param storage_account: Storage account name. + :type storage_account: str + + :param subscription_id: Azure subscription ID. + :type subscription_id: str + + :param tenant_id: Azure AD tenant ID. + :type tenant_id: str + """ + super().__init__(kwargs) + + + self_.client_id = client_id + self_.container = container + self_.resource_group = resource_group + self_.storage_account = storage_account + self_.subscription_id = subscription_id + self_.tenant_id = tenant_id diff --git a/datadog_api_client/v2/model/cloud_inventory_sync_config_gcp_request_attributes.py b/datadog_api_client/v2/model/cloud_inventory_sync_config_gcp_request_attributes.py new file mode 100644 index 0000000000..c1768343c0 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_inventory_sync_config_gcp_request_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudInventorySyncConfigGCPRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "destination_bucket_name": (str,), + "project_id": (str,), + "service_account_email": (str,), + "source_bucket_name": (str,), + } + attribute_map = { + "destination_bucket_name": "destination_bucket_name", + "project_id": "project_id", + "service_account_email": "service_account_email", + "source_bucket_name": "source_bucket_name", + } + + def __init__(self_, destination_bucket_name: str, project_id: str, service_account_email: str, source_bucket_name: str, **kwargs): + """ + GCP settings for buckets involved in inventory reporting. + + :param destination_bucket_name: GCS bucket name where Datadog reads inventory reports. + :type destination_bucket_name: str + + :param project_id: GCP project ID for the inventory destination bucket. + :type project_id: str + + :param service_account_email: Service account email used to read the destination bucket. + :type service_account_email: str + + :param source_bucket_name: GCS bucket name that inventory reports are generated for. + :type source_bucket_name: str + """ + super().__init__(kwargs) + + + self_.destination_bucket_name = destination_bucket_name + self_.project_id = project_id + self_.service_account_email = service_account_email + self_.source_bucket_name = source_bucket_name diff --git a/datadog_api_client/v2/model/cloud_inventory_sync_config_resource_type.py b/datadog_api_client/v2/model/cloud_inventory_sync_config_resource_type.py new file mode 100644 index 0000000000..7464fbce0c --- /dev/null +++ b/datadog_api_client/v2/model/cloud_inventory_sync_config_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudInventorySyncConfigResourceType(ModelSimple): + """ + Always `sync_configs`. + + :param value: If omitted defaults to "sync_configs". Must be one of ["sync_configs"]. + :type value: str + """ + + allowed_values = { + "sync_configs", + } + SYNC_CONFIGS: ClassVar["CloudInventorySyncConfigResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudInventorySyncConfigResourceType.SYNC_CONFIGS = CloudInventorySyncConfigResourceType("sync_configs") diff --git a/datadog_api_client/v2/model/cloud_inventory_sync_config_response.py b/datadog_api_client/v2/model/cloud_inventory_sync_config_response.py new file mode 100644 index 0000000000..81376df8a5 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_inventory_sync_config_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_inventory_sync_config_response_data import CloudInventorySyncConfigResponseData + +class CloudInventorySyncConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_inventory_sync_config_response_data import CloudInventorySyncConfigResponseData + return { + "data": (CloudInventorySyncConfigResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CloudInventorySyncConfigResponseData, **kwargs): + """ + Storage Management configuration returned after a create or update. Additional read-only fields appear on list and get responses. + + :param data: Storage Management configuration data. + :type data: CloudInventorySyncConfigResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cloud_inventory_sync_config_response_data.py b/datadog_api_client/v2/model/cloud_inventory_sync_config_response_data.py new file mode 100644 index 0000000000..e8ffef3501 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_inventory_sync_config_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_inventory_sync_config_attributes import CloudInventorySyncConfigAttributes + from datadog_api_client.v2.model.cloud_inventory_sync_config_resource_type import CloudInventorySyncConfigResourceType + +class CloudInventorySyncConfigResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_inventory_sync_config_attributes import CloudInventorySyncConfigAttributes + from datadog_api_client.v2.model.cloud_inventory_sync_config_resource_type import CloudInventorySyncConfigResourceType + return { + "attributes": (CloudInventorySyncConfigAttributes,), + "id": (str,), + "type": (CloudInventorySyncConfigResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CloudInventorySyncConfigAttributes, id: str, type: CloudInventorySyncConfigResourceType, **kwargs): + """ + Storage Management configuration data. + + :param attributes: Attributes for a Storage Management configuration. Fields other than ``id`` may be empty in the response immediately after a create or update; subsequent reads return the full configuration. + :type attributes: CloudInventorySyncConfigAttributes + + :param id: Unique identifier for this Storage Management configuration. + :type id: str + + :param type: Always ``sync_configs``. + :type type: CloudInventorySyncConfigResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policies_list_response.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policies_list_response.py new file mode 100644 index 0000000000..43e1515509 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policies_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_data import CloudWorkloadSecurityAgentPolicyData + +class CloudWorkloadSecurityAgentPoliciesListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_data import CloudWorkloadSecurityAgentPolicyData + return { + "data": ([CloudWorkloadSecurityAgentPolicyData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[CloudWorkloadSecurityAgentPolicyData], UnsetType]=unset, **kwargs): + """ + Response object that includes a list of Agent policies + + :param data: A list of Agent policy objects + :type data: [CloudWorkloadSecurityAgentPolicyData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_attributes.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_attributes.py new file mode 100644 index 0000000000..d46b6c1f59 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_attributes.py @@ -0,0 +1,184 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_updater_attributes import CloudWorkloadSecurityAgentPolicyUpdaterAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_version import CloudWorkloadSecurityAgentPolicyVersion + +class CloudWorkloadSecurityAgentPolicyAttributes(ModelNormal): + validations = { + "blocking_rules_count": { + "inclusive_maximum": 2147483647, + }, + "disabled_rules_count": { + "inclusive_maximum": 2147483647, + }, + "monitoring_rules_count": { + "inclusive_maximum": 2147483647, + }, + "rule_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_updater_attributes import CloudWorkloadSecurityAgentPolicyUpdaterAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_version import CloudWorkloadSecurityAgentPolicyVersion + return { + "blocking_rules_count": (int,), + "datadog_managed": (bool,), + "description": (str,), + "disabled_rules_count": (int,), + "enabled": (bool,), + "host_tags": ([str],), + "host_tags_lists": ([[str]],), + "monitoring_rules_count": (int,), + "name": (str,), + "pinned": (bool,), + "policy_type": (str,), + "policy_version": (str,), + "priority": (int,), + "rule_count": (int,), + "update_date": (int,), + "updated_at": (int,), + "updater": (CloudWorkloadSecurityAgentPolicyUpdaterAttributes,), + "versions": ([CloudWorkloadSecurityAgentPolicyVersion],), + } + attribute_map = { + "blocking_rules_count": "blockingRulesCount", + "datadog_managed": "datadogManaged", + "description": "description", + "disabled_rules_count": "disabledRulesCount", + "enabled": "enabled", + "host_tags": "hostTags", + "host_tags_lists": "hostTagsLists", + "monitoring_rules_count": "monitoringRulesCount", + "name": "name", + "pinned": "pinned", + "policy_type": "policyType", + "policy_version": "policyVersion", + "priority": "priority", + "rule_count": "ruleCount", + "update_date": "updateDate", + "updated_at": "updatedAt", + "updater": "updater", + "versions": "versions", + } + + def __init__(self_, blocking_rules_count: Union[int, UnsetType]=unset, datadog_managed: Union[bool, UnsetType]=unset, description: Union[str, UnsetType]=unset, disabled_rules_count: Union[int, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, host_tags: Union[List[str], UnsetType]=unset, host_tags_lists: Union[List[List[str]], UnsetType]=unset, monitoring_rules_count: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, pinned: Union[bool, UnsetType]=unset, policy_type: Union[str, UnsetType]=unset, policy_version: Union[str, UnsetType]=unset, priority: Union[int, UnsetType]=unset, rule_count: Union[int, UnsetType]=unset, update_date: Union[int, UnsetType]=unset, updated_at: Union[int, UnsetType]=unset, updater: Union[CloudWorkloadSecurityAgentPolicyUpdaterAttributes, UnsetType]=unset, versions: Union[List[CloudWorkloadSecurityAgentPolicyVersion], UnsetType]=unset, **kwargs): + """ + A Cloud Workload Security Agent policy returned by the API + + :param blocking_rules_count: The number of rules with the blocking feature in this policy + :type blocking_rules_count: int, optional + + :param datadog_managed: Whether the policy is managed by Datadog + :type datadog_managed: bool, optional + + :param description: The description of the policy + :type description: str, optional + + :param disabled_rules_count: The number of rules that are disabled in this policy + :type disabled_rules_count: int, optional + + :param enabled: Whether the Agent policy is enabled + :type enabled: bool, optional + + :param host_tags: The host tags defining where this policy is deployed + :type host_tags: [str], optional + + :param host_tags_lists: The host tags defining where this policy is deployed, the inner values are linked with AND, the outer values are linked with OR + :type host_tags_lists: [[str]], optional + + :param monitoring_rules_count: The number of rules in the monitoring state in this policy + :type monitoring_rules_count: int, optional + + :param name: The name of the policy + :type name: str, optional + + :param pinned: Whether the policy is pinned + :type pinned: bool, optional + + :param policy_type: The type of the policy + :type policy_type: str, optional + + :param policy_version: The version of the policy + :type policy_version: str, optional + + :param priority: The priority of the policy + :type priority: int, optional + + :param rule_count: The number of rules in this policy + :type rule_count: int, optional + + :param update_date: Timestamp in milliseconds when the policy was last updated + :type update_date: int, optional + + :param updated_at: When the policy was last updated, timestamp in milliseconds + :type updated_at: int, optional + + :param updater: The attributes of the user who last updated the policy + :type updater: CloudWorkloadSecurityAgentPolicyUpdaterAttributes, optional + + :param versions: The versions of the policy + :type versions: [CloudWorkloadSecurityAgentPolicyVersion], optional + """ + if blocking_rules_count is not unset: + kwargs["blocking_rules_count"] = blocking_rules_count + if datadog_managed is not unset: + kwargs["datadog_managed"] = datadog_managed + if description is not unset: + kwargs["description"] = description + if disabled_rules_count is not unset: + kwargs["disabled_rules_count"] = disabled_rules_count + if enabled is not unset: + kwargs["enabled"] = enabled + if host_tags is not unset: + kwargs["host_tags"] = host_tags + if host_tags_lists is not unset: + kwargs["host_tags_lists"] = host_tags_lists + if monitoring_rules_count is not unset: + kwargs["monitoring_rules_count"] = monitoring_rules_count + if name is not unset: + kwargs["name"] = name + if pinned is not unset: + kwargs["pinned"] = pinned + if policy_type is not unset: + kwargs["policy_type"] = policy_type + if policy_version is not unset: + kwargs["policy_version"] = policy_version + if priority is not unset: + kwargs["priority"] = priority + if rule_count is not unset: + kwargs["rule_count"] = rule_count + if update_date is not unset: + kwargs["update_date"] = update_date + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updater is not unset: + kwargs["updater"] = updater + if versions is not unset: + kwargs["versions"] = versions + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_create_attributes.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_create_attributes.py new file mode 100644 index 0000000000..5b5077deee --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_create_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentPolicyCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "enabled": (bool,), + "host_tags": ([str],), + "host_tags_lists": ([[str]],), + "name": (str,), + } + attribute_map = { + "description": "description", + "enabled": "enabled", + "host_tags": "hostTags", + "host_tags_lists": "hostTagsLists", + "name": "name", + } + + def __init__(self_, name: str, description: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, host_tags: Union[List[str], UnsetType]=unset, host_tags_lists: Union[List[List[str]], UnsetType]=unset, **kwargs): + """ + Create a new Cloud Workload Security Agent policy + + :param description: The description of the policy + :type description: str, optional + + :param enabled: Whether the policy is enabled + :type enabled: bool, optional + + :param host_tags: The host tags defining where this policy is deployed + :type host_tags: [str], optional + + :param host_tags_lists: The host tags defining where this policy is deployed, the inner values are linked with AND, the outer values are linked with OR + :type host_tags_lists: [[str]], optional + + :param name: The name of the policy + :type name: str + """ + if description is not unset: + kwargs["description"] = description + if enabled is not unset: + kwargs["enabled"] = enabled + if host_tags is not unset: + kwargs["host_tags"] = host_tags + if host_tags_lists is not unset: + kwargs["host_tags_lists"] = host_tags_lists + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_create_data.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_create_data.py new file mode 100644 index 0000000000..df853101d7 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_create_attributes import CloudWorkloadSecurityAgentPolicyCreateAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_type import CloudWorkloadSecurityAgentPolicyType + +class CloudWorkloadSecurityAgentPolicyCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_create_attributes import CloudWorkloadSecurityAgentPolicyCreateAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_type import CloudWorkloadSecurityAgentPolicyType + return { + "attributes": (CloudWorkloadSecurityAgentPolicyCreateAttributes,), + "type": (CloudWorkloadSecurityAgentPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CloudWorkloadSecurityAgentPolicyCreateAttributes, type: CloudWorkloadSecurityAgentPolicyType, **kwargs): + """ + Object for a single Agent rule + + :param attributes: Create a new Cloud Workload Security Agent policy + :type attributes: CloudWorkloadSecurityAgentPolicyCreateAttributes + + :param type: The type of the resource, must always be ``policy`` + :type type: CloudWorkloadSecurityAgentPolicyType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_create_request.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_create_request.py new file mode 100644 index 0000000000..8b188742b4 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_create_data import CloudWorkloadSecurityAgentPolicyCreateData + +class CloudWorkloadSecurityAgentPolicyCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_create_data import CloudWorkloadSecurityAgentPolicyCreateData + return { + "data": (CloudWorkloadSecurityAgentPolicyCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CloudWorkloadSecurityAgentPolicyCreateData, **kwargs): + """ + Request object that includes the Agent policy to create + + :param data: Object for a single Agent rule + :type data: CloudWorkloadSecurityAgentPolicyCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_data.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_data.py new file mode 100644 index 0000000000..5a26acbf22 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_attributes import CloudWorkloadSecurityAgentPolicyAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_type import CloudWorkloadSecurityAgentPolicyType + +class CloudWorkloadSecurityAgentPolicyData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_attributes import CloudWorkloadSecurityAgentPolicyAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_type import CloudWorkloadSecurityAgentPolicyType + return { + "attributes": (CloudWorkloadSecurityAgentPolicyAttributes,), + "id": (str,), + "type": (CloudWorkloadSecurityAgentPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CloudWorkloadSecurityAgentPolicyAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CloudWorkloadSecurityAgentPolicyType, UnsetType]=unset, **kwargs): + """ + Object for a single Agent policy + + :param attributes: A Cloud Workload Security Agent policy returned by the API + :type attributes: CloudWorkloadSecurityAgentPolicyAttributes, optional + + :param id: The ID of the Agent policy + :type id: str, optional + + :param type: The type of the resource, must always be ``policy`` + :type type: CloudWorkloadSecurityAgentPolicyType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_response.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_response.py new file mode 100644 index 0000000000..d76a9390dc --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_data import CloudWorkloadSecurityAgentPolicyData + +class CloudWorkloadSecurityAgentPolicyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_data import CloudWorkloadSecurityAgentPolicyData + return { + "data": (CloudWorkloadSecurityAgentPolicyData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CloudWorkloadSecurityAgentPolicyData, UnsetType]=unset, **kwargs): + """ + Response object that includes an Agent policy + + :param data: Object for a single Agent policy + :type data: CloudWorkloadSecurityAgentPolicyData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_type.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_type.py new file mode 100644 index 0000000000..7e4212e2da --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudWorkloadSecurityAgentPolicyType(ModelSimple): + """ + The type of the resource, must always be `policy` + + :param value: If omitted defaults to "policy". Must be one of ["policy"]. + :type value: str + """ + + allowed_values = { + "policy", + } + POLICY: ClassVar["CloudWorkloadSecurityAgentPolicyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudWorkloadSecurityAgentPolicyType.POLICY = CloudWorkloadSecurityAgentPolicyType("policy") diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_update_attributes.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_update_attributes.py new file mode 100644 index 0000000000..5629729799 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentPolicyUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "enabled": (bool,), + "host_tags": ([str],), + "host_tags_lists": ([[str]],), + "name": (str,), + } + attribute_map = { + "description": "description", + "enabled": "enabled", + "host_tags": "hostTags", + "host_tags_lists": "hostTagsLists", + "name": "name", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, host_tags: Union[List[str], UnsetType]=unset, host_tags_lists: Union[List[List[str]], UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Update an existing Cloud Workload Security Agent policy + + :param description: The description of the policy + :type description: str, optional + + :param enabled: Whether the policy is enabled + :type enabled: bool, optional + + :param host_tags: The host tags defining where this policy is deployed + :type host_tags: [str], optional + + :param host_tags_lists: The host tags defining where this policy is deployed, the inner values are linked with AND, the outer values are linked with OR + :type host_tags_lists: [[str]], optional + + :param name: The name of the policy + :type name: str, optional + """ + if description is not unset: + kwargs["description"] = description + if enabled is not unset: + kwargs["enabled"] = enabled + if host_tags is not unset: + kwargs["host_tags"] = host_tags + if host_tags_lists is not unset: + kwargs["host_tags_lists"] = host_tags_lists + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_update_data.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_update_data.py new file mode 100644 index 0000000000..d390d91374 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_update_attributes import CloudWorkloadSecurityAgentPolicyUpdateAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_type import CloudWorkloadSecurityAgentPolicyType + +class CloudWorkloadSecurityAgentPolicyUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_update_attributes import CloudWorkloadSecurityAgentPolicyUpdateAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_type import CloudWorkloadSecurityAgentPolicyType + return { + "attributes": (CloudWorkloadSecurityAgentPolicyUpdateAttributes,), + "id": (str,), + "type": (CloudWorkloadSecurityAgentPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CloudWorkloadSecurityAgentPolicyUpdateAttributes, type: CloudWorkloadSecurityAgentPolicyType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Object for a single Agent policy + + :param attributes: Update an existing Cloud Workload Security Agent policy + :type attributes: CloudWorkloadSecurityAgentPolicyUpdateAttributes + + :param id: The ID of the Agent policy + :type id: str, optional + + :param type: The type of the resource, must always be ``policy`` + :type type: CloudWorkloadSecurityAgentPolicyType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_update_request.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_update_request.py new file mode 100644 index 0000000000..66e5b554db --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_update_data import CloudWorkloadSecurityAgentPolicyUpdateData + +class CloudWorkloadSecurityAgentPolicyUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_policy_update_data import CloudWorkloadSecurityAgentPolicyUpdateData + return { + "data": (CloudWorkloadSecurityAgentPolicyUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CloudWorkloadSecurityAgentPolicyUpdateData, **kwargs): + """ + Request object that includes the Agent policy with the attributes to update + + :param data: Object for a single Agent policy + :type data: CloudWorkloadSecurityAgentPolicyUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_updater_attributes.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_updater_attributes.py new file mode 100644 index 0000000000..b9d5f2f957 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_updater_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentPolicyUpdaterAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str, none_type), + } + attribute_map = { + "handle": "handle", + "name": "name", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The attributes of the user who last updated the policy + + :param handle: The handle of the user + :type handle: str, optional + + :param name: The name of the user + :type name: str, none_type, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_policy_version.py b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_version.py new file mode 100644 index 0000000000..e1ebba9927 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_policy_version.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentPolicyVersion(ModelNormal): + @cached_property + def openapi_types(_): + return { + "date": (str, none_type), + "name": (str,), + } + attribute_map = { + "date": "date", + "name": "name", + } + + def __init__(self_, date: Union[str, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The versions of the policy + + :param date: The date and time the version was created + :type date: str, none_type, optional + + :param name: The version of the policy + :type name: str, optional + """ + if date is not unset: + kwargs["date"] = date + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action.py new file mode 100644 index 0000000000..cf4a37f1d2 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_hash import CloudWorkloadSecurityAgentRuleActionHash + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_kill import CloudWorkloadSecurityAgentRuleKill + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_metadata import CloudWorkloadSecurityAgentRuleActionMetadata + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_set import CloudWorkloadSecurityAgentRuleActionSet + +class CloudWorkloadSecurityAgentRuleAction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_hash import CloudWorkloadSecurityAgentRuleActionHash + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_kill import CloudWorkloadSecurityAgentRuleKill + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_metadata import CloudWorkloadSecurityAgentRuleActionMetadata + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_set import CloudWorkloadSecurityAgentRuleActionSet + return { + "filter": (str,), + "hash": (CloudWorkloadSecurityAgentRuleActionHash,), + "kill": (CloudWorkloadSecurityAgentRuleKill,), + "metadata": (CloudWorkloadSecurityAgentRuleActionMetadata,), + "set": (CloudWorkloadSecurityAgentRuleActionSet,), + } + attribute_map = { + "filter": "filter", + "hash": "hash", + "kill": "kill", + "metadata": "metadata", + "set": "set", + } + + def __init__(self_, filter: Union[str, UnsetType]=unset, hash: Union[CloudWorkloadSecurityAgentRuleActionHash, UnsetType]=unset, kill: Union[CloudWorkloadSecurityAgentRuleKill, UnsetType]=unset, metadata: Union[CloudWorkloadSecurityAgentRuleActionMetadata, UnsetType]=unset, set: Union[CloudWorkloadSecurityAgentRuleActionSet, UnsetType]=unset, **kwargs): + """ + The action the rule can perform if triggered + + :param filter: SECL expression used to target the container to apply the action on + :type filter: str, optional + + :param hash: Hash file specified by the field attribute + :type hash: CloudWorkloadSecurityAgentRuleActionHash, optional + + :param kill: Kill system call applied on the container matching the rule + :type kill: CloudWorkloadSecurityAgentRuleKill, optional + + :param metadata: The metadata action applied on the scope matching the rule + :type metadata: CloudWorkloadSecurityAgentRuleActionMetadata, optional + + :param set: The set action applied on the scope matching the rule + :type set: CloudWorkloadSecurityAgentRuleActionSet, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if hash is not unset: + kwargs["hash"] = hash + if kill is not unset: + kwargs["kill"] = kill + if metadata is not unset: + kwargs["metadata"] = metadata + if set is not unset: + kwargs["set"] = set + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_hash.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_hash.py new file mode 100644 index 0000000000..6c51f21014 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_hash.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentRuleActionHash(ModelNormal): + @cached_property + def openapi_types(_): + return { + "field": (str,), + } + attribute_map = { + "field": "field", + } + + def __init__(self_, field: Union[str, UnsetType]=unset, **kwargs): + """ + Hash file specified by the field attribute + + :param field: The field of the hash action + :type field: str, optional + """ + if field is not unset: + kwargs["field"] = field + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_metadata.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_metadata.py new file mode 100644 index 0000000000..3bb20ef10f --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentRuleActionMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "image_tag": (str,), + "service": (str,), + "short_image": (str,), + } + attribute_map = { + "image_tag": "image_tag", + "service": "service", + "short_image": "short_image", + } + + def __init__(self_, image_tag: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, short_image: Union[str, UnsetType]=unset, **kwargs): + """ + The metadata action applied on the scope matching the rule + + :param image_tag: The image tag of the metadata action + :type image_tag: str, optional + + :param service: The service of the metadata action + :type service: str, optional + + :param short_image: The short image of the metadata action + :type short_image: str, optional + """ + if image_tag is not unset: + kwargs["image_tag"] = image_tag + if service is not unset: + kwargs["service"] = service + if short_image is not unset: + kwargs["short_image"] = short_image + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_set.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_set.py new file mode 100644 index 0000000000..91159b8366 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_set.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_set_value import CloudWorkloadSecurityAgentRuleActionSetValue + +class CloudWorkloadSecurityAgentRuleActionSet(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_set_value import CloudWorkloadSecurityAgentRuleActionSetValue + return { + "append": (bool,), + "default_value": (str,), + "expression": (str,), + "field": (str,), + "inherited": (bool,), + "name": (str,), + "scope": (str,), + "size": (int,), + "ttl": (int,), + "value": (CloudWorkloadSecurityAgentRuleActionSetValue,), + } + attribute_map = { + "append": "append", + "default_value": "default_value", + "expression": "expression", + "field": "field", + "inherited": "inherited", + "name": "name", + "scope": "scope", + "size": "size", + "ttl": "ttl", + "value": "value", + } + + def __init__(self_, append: Union[bool, UnsetType]=unset, default_value: Union[str, UnsetType]=unset, expression: Union[str, UnsetType]=unset, field: Union[str, UnsetType]=unset, inherited: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, scope: Union[str, UnsetType]=unset, size: Union[int, UnsetType]=unset, ttl: Union[int, UnsetType]=unset, value: Union[CloudWorkloadSecurityAgentRuleActionSetValue, str, int, bool, UnsetType]=unset, **kwargs): + """ + The set action applied on the scope matching the rule + + :param append: Whether the value should be appended to the field. + :type append: bool, optional + + :param default_value: The default value of the set action + :type default_value: str, optional + + :param expression: The expression of the set action. + :type expression: str, optional + + :param field: The field of the set action + :type field: str, optional + + :param inherited: Whether the value should be inherited. + :type inherited: bool, optional + + :param name: The name of the set action + :type name: str, optional + + :param scope: The scope of the set action. + :type scope: str, optional + + :param size: The size of the set action. + :type size: int, optional + + :param ttl: The time to live of the set action. + :type ttl: int, optional + + :param value: The value of the set action + :type value: CloudWorkloadSecurityAgentRuleActionSetValue, optional + """ + if append is not unset: + kwargs["append"] = append + if default_value is not unset: + kwargs["default_value"] = default_value + if expression is not unset: + kwargs["expression"] = expression + if field is not unset: + kwargs["field"] = field + if inherited is not unset: + kwargs["inherited"] = inherited + if name is not unset: + kwargs["name"] = name + if scope is not unset: + kwargs["scope"] = scope + if size is not unset: + kwargs["size"] = size + if ttl is not unset: + kwargs["ttl"] = ttl + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_set_value.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_set_value.py new file mode 100644 index 0000000000..a6932e5c9f --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_action_set_value.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentRuleActionSetValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The value of the set action + """ + 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 + return { + "oneOf": [ + str, + int, + bool, + ], + } diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_attributes.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_attributes.py new file mode 100644 index 0000000000..2640703411 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_attributes.py @@ -0,0 +1,200 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action import CloudWorkloadSecurityAgentRuleAction + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_creator_attributes import CloudWorkloadSecurityAgentRuleCreatorAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_updater_attributes import CloudWorkloadSecurityAgentRuleUpdaterAttributes + +class CloudWorkloadSecurityAgentRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action import CloudWorkloadSecurityAgentRuleAction + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_creator_attributes import CloudWorkloadSecurityAgentRuleCreatorAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_updater_attributes import CloudWorkloadSecurityAgentRuleUpdaterAttributes + return { + "actions": ([CloudWorkloadSecurityAgentRuleAction],), + "agent_constraint": (str,), + "blocking": ([str],), + "category": (str,), + "creation_author_uu_id": (str,), + "creation_date": (int,), + "creator": (CloudWorkloadSecurityAgentRuleCreatorAttributes,), + "default_rule": (bool,), + "description": (str,), + "disabled": ([str],), + "enabled": (bool,), + "expression": (str,), + "filters": ([str],), + "monitoring": ([str],), + "name": (str,), + "product_tags": ([str],), + "silent": (bool,), + "update_author_uu_id": (str,), + "update_date": (int,), + "updated_at": (int,), + "updater": (CloudWorkloadSecurityAgentRuleUpdaterAttributes,), + "version": (int,), + } + attribute_map = { + "actions": "actions", + "agent_constraint": "agentConstraint", + "blocking": "blocking", + "category": "category", + "creation_author_uu_id": "creationAuthorUuId", + "creation_date": "creationDate", + "creator": "creator", + "default_rule": "defaultRule", + "description": "description", + "disabled": "disabled", + "enabled": "enabled", + "expression": "expression", + "filters": "filters", + "monitoring": "monitoring", + "name": "name", + "product_tags": "product_tags", + "silent": "silent", + "update_author_uu_id": "updateAuthorUuId", + "update_date": "updateDate", + "updated_at": "updatedAt", + "updater": "updater", + "version": "version", + } + + def __init__(self_, actions: Union[List[CloudWorkloadSecurityAgentRuleAction], none_type, UnsetType]=unset, agent_constraint: Union[str, UnsetType]=unset, blocking: Union[List[str], UnsetType]=unset, category: Union[str, UnsetType]=unset, creation_author_uu_id: Union[str, UnsetType]=unset, creation_date: Union[int, UnsetType]=unset, creator: Union[CloudWorkloadSecurityAgentRuleCreatorAttributes, UnsetType]=unset, default_rule: Union[bool, UnsetType]=unset, description: Union[str, UnsetType]=unset, disabled: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, expression: Union[str, UnsetType]=unset, filters: Union[List[str], UnsetType]=unset, monitoring: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, product_tags: Union[List[str], UnsetType]=unset, silent: Union[bool, UnsetType]=unset, update_author_uu_id: Union[str, UnsetType]=unset, update_date: Union[int, UnsetType]=unset, updated_at: Union[int, UnsetType]=unset, updater: Union[CloudWorkloadSecurityAgentRuleUpdaterAttributes, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + A Cloud Workload Security Agent rule returned by the API + + :param actions: The array of actions the rule can perform if triggered + :type actions: [CloudWorkloadSecurityAgentRuleAction], none_type, optional + + :param agent_constraint: The version of the Agent + :type agent_constraint: str, optional + + :param blocking: The blocking policies that the rule belongs to + :type blocking: [str], optional + + :param category: The category of the Agent rule + :type category: str, optional + + :param creation_author_uu_id: The ID of the user who created the rule + :type creation_author_uu_id: str, optional + + :param creation_date: When the Agent rule was created, timestamp in milliseconds + :type creation_date: int, optional + + :param creator: The attributes of the user who created the Agent rule + :type creator: CloudWorkloadSecurityAgentRuleCreatorAttributes, optional + + :param default_rule: Whether the rule is included by default + :type default_rule: bool, optional + + :param description: The description of the Agent rule + :type description: str, optional + + :param disabled: The disabled policies that the rule belongs to + :type disabled: [str], optional + + :param enabled: Whether the Agent rule is enabled + :type enabled: bool, optional + + :param expression: The SECL expression of the Agent rule + :type expression: str, optional + + :param filters: The platforms the Agent rule is supported on + :type filters: [str], optional + + :param monitoring: The monitoring policies that the rule belongs to + :type monitoring: [str], optional + + :param name: The name of the Agent rule + :type name: str, optional + + :param product_tags: The list of product tags associated with the rule + :type product_tags: [str], optional + + :param silent: Whether the rule is silent. + :type silent: bool, optional + + :param update_author_uu_id: The ID of the user who updated the rule + :type update_author_uu_id: str, optional + + :param update_date: Timestamp in milliseconds when the Agent rule was last updated + :type update_date: int, optional + + :param updated_at: When the Agent rule was last updated, timestamp in milliseconds + :type updated_at: int, optional + + :param updater: The attributes of the user who last updated the Agent rule + :type updater: CloudWorkloadSecurityAgentRuleUpdaterAttributes, optional + + :param version: The version of the Agent rule + :type version: int, optional + """ + if actions is not unset: + kwargs["actions"] = actions + if agent_constraint is not unset: + kwargs["agent_constraint"] = agent_constraint + if blocking is not unset: + kwargs["blocking"] = blocking + if category is not unset: + kwargs["category"] = category + if creation_author_uu_id is not unset: + kwargs["creation_author_uu_id"] = creation_author_uu_id + if creation_date is not unset: + kwargs["creation_date"] = creation_date + if creator is not unset: + kwargs["creator"] = creator + if default_rule is not unset: + kwargs["default_rule"] = default_rule + if description is not unset: + kwargs["description"] = description + if disabled is not unset: + kwargs["disabled"] = disabled + if enabled is not unset: + kwargs["enabled"] = enabled + if expression is not unset: + kwargs["expression"] = expression + if filters is not unset: + kwargs["filters"] = filters + if monitoring is not unset: + kwargs["monitoring"] = monitoring + if name is not unset: + kwargs["name"] = name + if product_tags is not unset: + kwargs["product_tags"] = product_tags + if silent is not unset: + kwargs["silent"] = silent + if update_author_uu_id is not unset: + kwargs["update_author_uu_id"] = update_author_uu_id + if update_date is not unset: + kwargs["update_date"] = update_date + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updater is not unset: + kwargs["updater"] = updater + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_create_attributes.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_create_attributes.py new file mode 100644 index 0000000000..42a67f2ade --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_create_attributes.py @@ -0,0 +1,131 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action import CloudWorkloadSecurityAgentRuleAction + +class CloudWorkloadSecurityAgentRuleCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action import CloudWorkloadSecurityAgentRuleAction + return { + "actions": ([CloudWorkloadSecurityAgentRuleAction],), + "agent_version": (str,), + "blocking": ([str],), + "description": (str,), + "disabled": ([str],), + "enabled": (bool,), + "expression": (str,), + "filters": ([str],), + "monitoring": ([str],), + "name": (str,), + "policy_id": (str,), + "product_tags": ([str],), + "silent": (bool,), + } + attribute_map = { + "actions": "actions", + "agent_version": "agent_version", + "blocking": "blocking", + "description": "description", + "disabled": "disabled", + "enabled": "enabled", + "expression": "expression", + "filters": "filters", + "monitoring": "monitoring", + "name": "name", + "policy_id": "policy_id", + "product_tags": "product_tags", + "silent": "silent", + } + + def __init__(self_, expression: str, name: str, actions: Union[List[CloudWorkloadSecurityAgentRuleAction], none_type, UnsetType]=unset, agent_version: Union[str, UnsetType]=unset, blocking: Union[List[str], UnsetType]=unset, description: Union[str, UnsetType]=unset, disabled: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, filters: Union[List[str], UnsetType]=unset, monitoring: Union[List[str], UnsetType]=unset, policy_id: Union[str, UnsetType]=unset, product_tags: Union[List[str], UnsetType]=unset, silent: Union[bool, UnsetType]=unset, **kwargs): + """ + Create a new Cloud Workload Security Agent rule. + + :param actions: The array of actions the rule can perform if triggered + :type actions: [CloudWorkloadSecurityAgentRuleAction], none_type, optional + + :param agent_version: Constrain the rule to specific versions of the Datadog Agent. + :type agent_version: str, optional + + :param blocking: The blocking policies that the rule belongs to. + :type blocking: [str], optional + + :param description: The description of the Agent rule. + :type description: str, optional + + :param disabled: The disabled policies that the rule belongs to. + :type disabled: [str], optional + + :param enabled: Whether the Agent rule is enabled. + :type enabled: bool, optional + + :param expression: The SECL expression of the Agent rule. + :type expression: str + + :param filters: The platforms the Agent rule is supported on. + :type filters: [str], optional + + :param monitoring: The monitoring policies that the rule belongs to. + :type monitoring: [str], optional + + :param name: The name of the Agent rule. + :type name: str + + :param policy_id: The ID of the policy where the Agent rule is saved. + :type policy_id: str, optional + + :param product_tags: The list of product tags associated with the rule. + :type product_tags: [str], optional + + :param silent: Whether the rule is silent. + :type silent: bool, optional + """ + if actions is not unset: + kwargs["actions"] = actions + if agent_version is not unset: + kwargs["agent_version"] = agent_version + if blocking is not unset: + kwargs["blocking"] = blocking + if description is not unset: + kwargs["description"] = description + if disabled is not unset: + kwargs["disabled"] = disabled + if enabled is not unset: + kwargs["enabled"] = enabled + if filters is not unset: + kwargs["filters"] = filters + if monitoring is not unset: + kwargs["monitoring"] = monitoring + if policy_id is not unset: + kwargs["policy_id"] = policy_id + if product_tags is not unset: + kwargs["product_tags"] = product_tags + if silent is not unset: + kwargs["silent"] = silent + super().__init__(kwargs) + + + self_.expression = expression + self_.name = name diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_create_data.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_create_data.py new file mode 100644 index 0000000000..ac76252eaf --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_create_attributes import CloudWorkloadSecurityAgentRuleCreateAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_type import CloudWorkloadSecurityAgentRuleType + +class CloudWorkloadSecurityAgentRuleCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_create_attributes import CloudWorkloadSecurityAgentRuleCreateAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_type import CloudWorkloadSecurityAgentRuleType + return { + "attributes": (CloudWorkloadSecurityAgentRuleCreateAttributes,), + "type": (CloudWorkloadSecurityAgentRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CloudWorkloadSecurityAgentRuleCreateAttributes, type: CloudWorkloadSecurityAgentRuleType, **kwargs): + """ + Object for a single Agent rule + + :param attributes: Create a new Cloud Workload Security Agent rule. + :type attributes: CloudWorkloadSecurityAgentRuleCreateAttributes + + :param type: The type of the resource, must always be ``agent_rule`` + :type type: CloudWorkloadSecurityAgentRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_create_request.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_create_request.py new file mode 100644 index 0000000000..7da2ecb351 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_create_data import CloudWorkloadSecurityAgentRuleCreateData + +class CloudWorkloadSecurityAgentRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_create_data import CloudWorkloadSecurityAgentRuleCreateData + return { + "data": (CloudWorkloadSecurityAgentRuleCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CloudWorkloadSecurityAgentRuleCreateData, **kwargs): + """ + Request object that includes the Agent rule to create + + :param data: Object for a single Agent rule + :type data: CloudWorkloadSecurityAgentRuleCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_creator_attributes.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_creator_attributes.py new file mode 100644 index 0000000000..4a8df599d3 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_creator_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentRuleCreatorAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str, none_type), + } + attribute_map = { + "handle": "handle", + "name": "name", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The attributes of the user who created the Agent rule + + :param handle: The handle of the user + :type handle: str, optional + + :param name: The name of the user + :type name: str, none_type, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_data.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_data.py new file mode 100644 index 0000000000..7b96e8cd79 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_attributes import CloudWorkloadSecurityAgentRuleAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_type import CloudWorkloadSecurityAgentRuleType + +class CloudWorkloadSecurityAgentRuleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_attributes import CloudWorkloadSecurityAgentRuleAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_type import CloudWorkloadSecurityAgentRuleType + return { + "attributes": (CloudWorkloadSecurityAgentRuleAttributes,), + "id": (str,), + "type": (CloudWorkloadSecurityAgentRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CloudWorkloadSecurityAgentRuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CloudWorkloadSecurityAgentRuleType, UnsetType]=unset, **kwargs): + """ + Object for a single Agent rule + + :param attributes: A Cloud Workload Security Agent rule returned by the API + :type attributes: CloudWorkloadSecurityAgentRuleAttributes, optional + + :param id: The ID of the Agent rule + :type id: str, optional + + :param type: The type of the resource, must always be ``agent_rule`` + :type type: CloudWorkloadSecurityAgentRuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_kill.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_kill.py new file mode 100644 index 0000000000..229cf29e90 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_kill.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentRuleKill(ModelNormal): + @cached_property + def openapi_types(_): + return { + "signal": (str,), + } + attribute_map = { + "signal": "signal", + } + + def __init__(self_, signal: Union[str, UnsetType]=unset, **kwargs): + """ + Kill system call applied on the container matching the rule + + :param signal: Supported signals for the kill system call + :type signal: str, optional + """ + if signal is not unset: + kwargs["signal"] = signal + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_response.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_response.py new file mode 100644 index 0000000000..cbee5ad473 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_data import CloudWorkloadSecurityAgentRuleData + +class CloudWorkloadSecurityAgentRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_data import CloudWorkloadSecurityAgentRuleData + return { + "data": (CloudWorkloadSecurityAgentRuleData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CloudWorkloadSecurityAgentRuleData, UnsetType]=unset, **kwargs): + """ + Response object that includes an Agent rule + + :param data: Object for a single Agent rule + :type data: CloudWorkloadSecurityAgentRuleData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_type.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_type.py new file mode 100644 index 0000000000..ef17878c45 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudWorkloadSecurityAgentRuleType(ModelSimple): + """ + The type of the resource, must always be `agent_rule` + + :param value: If omitted defaults to "agent_rule". Must be one of ["agent_rule"]. + :type value: str + """ + + allowed_values = { + "agent_rule", + } + AGENT_RULE: ClassVar["CloudWorkloadSecurityAgentRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudWorkloadSecurityAgentRuleType.AGENT_RULE = CloudWorkloadSecurityAgentRuleType("agent_rule") diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_update_attributes.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_update_attributes.py new file mode 100644 index 0000000000..d52ee79f6d --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_update_attributes.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action import CloudWorkloadSecurityAgentRuleAction + +class CloudWorkloadSecurityAgentRuleUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action import CloudWorkloadSecurityAgentRuleAction + return { + "actions": ([CloudWorkloadSecurityAgentRuleAction],), + "agent_version": (str,), + "blocking": ([str],), + "description": (str,), + "disabled": ([str],), + "enabled": (bool,), + "expression": (str,), + "monitoring": ([str],), + "policy_id": (str,), + "product_tags": ([str],), + "silent": (bool,), + } + attribute_map = { + "actions": "actions", + "agent_version": "agent_version", + "blocking": "blocking", + "description": "description", + "disabled": "disabled", + "enabled": "enabled", + "expression": "expression", + "monitoring": "monitoring", + "policy_id": "policy_id", + "product_tags": "product_tags", + "silent": "silent", + } + + def __init__(self_, actions: Union[List[CloudWorkloadSecurityAgentRuleAction], none_type, UnsetType]=unset, agent_version: Union[str, UnsetType]=unset, blocking: Union[List[str], UnsetType]=unset, description: Union[str, UnsetType]=unset, disabled: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, expression: Union[str, UnsetType]=unset, monitoring: Union[List[str], UnsetType]=unset, policy_id: Union[str, UnsetType]=unset, product_tags: Union[List[str], UnsetType]=unset, silent: Union[bool, UnsetType]=unset, **kwargs): + """ + Update an existing Cloud Workload Security Agent rule + + :param actions: The array of actions the rule can perform if triggered + :type actions: [CloudWorkloadSecurityAgentRuleAction], none_type, optional + + :param agent_version: Constrain the rule to specific versions of the Datadog Agent + :type agent_version: str, optional + + :param blocking: The blocking policies that the rule belongs to + :type blocking: [str], optional + + :param description: The description of the Agent rule + :type description: str, optional + + :param disabled: The disabled policies that the rule belongs to + :type disabled: [str], optional + + :param enabled: Whether the Agent rule is enabled + :type enabled: bool, optional + + :param expression: The SECL expression of the Agent rule + :type expression: str, optional + + :param monitoring: The monitoring policies that the rule belongs to + :type monitoring: [str], optional + + :param policy_id: The ID of the policy where the Agent rule is saved + :type policy_id: str, optional + + :param product_tags: The list of product tags associated with the rule + :type product_tags: [str], optional + + :param silent: Whether the rule is silent. + :type silent: bool, optional + """ + if actions is not unset: + kwargs["actions"] = actions + if agent_version is not unset: + kwargs["agent_version"] = agent_version + if blocking is not unset: + kwargs["blocking"] = blocking + if description is not unset: + kwargs["description"] = description + if disabled is not unset: + kwargs["disabled"] = disabled + if enabled is not unset: + kwargs["enabled"] = enabled + if expression is not unset: + kwargs["expression"] = expression + if monitoring is not unset: + kwargs["monitoring"] = monitoring + if policy_id is not unset: + kwargs["policy_id"] = policy_id + if product_tags is not unset: + kwargs["product_tags"] = product_tags + if silent is not unset: + kwargs["silent"] = silent + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_update_data.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_update_data.py new file mode 100644 index 0000000000..bb9adb3561 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_update_attributes import CloudWorkloadSecurityAgentRuleUpdateAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_type import CloudWorkloadSecurityAgentRuleType + +class CloudWorkloadSecurityAgentRuleUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_update_attributes import CloudWorkloadSecurityAgentRuleUpdateAttributes + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_type import CloudWorkloadSecurityAgentRuleType + return { + "attributes": (CloudWorkloadSecurityAgentRuleUpdateAttributes,), + "id": (str,), + "type": (CloudWorkloadSecurityAgentRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CloudWorkloadSecurityAgentRuleUpdateAttributes, type: CloudWorkloadSecurityAgentRuleType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Object for a single Agent rule + + :param attributes: Update an existing Cloud Workload Security Agent rule + :type attributes: CloudWorkloadSecurityAgentRuleUpdateAttributes + + :param id: The ID of the Agent rule + :type id: str, optional + + :param type: The type of the resource, must always be ``agent_rule`` + :type type: CloudWorkloadSecurityAgentRuleType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_update_request.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_update_request.py new file mode 100644 index 0000000000..fe34608c94 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_update_data import CloudWorkloadSecurityAgentRuleUpdateData + +class CloudWorkloadSecurityAgentRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_update_data import CloudWorkloadSecurityAgentRuleUpdateData + return { + "data": (CloudWorkloadSecurityAgentRuleUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CloudWorkloadSecurityAgentRuleUpdateData, **kwargs): + """ + Request object that includes the Agent rule with the attributes to update + + :param data: Object for a single Agent rule + :type data: CloudWorkloadSecurityAgentRuleUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rule_updater_attributes.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_updater_attributes.py new file mode 100644 index 0000000000..ad493033df --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rule_updater_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudWorkloadSecurityAgentRuleUpdaterAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str, none_type), + } + attribute_map = { + "handle": "handle", + "name": "name", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The attributes of the user who last updated the Agent rule + + :param handle: The handle of the user + :type handle: str, optional + + :param name: The name of the user + :type name: str, none_type, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloud_workload_security_agent_rules_list_response.py b/datadog_api_client/v2/model/cloud_workload_security_agent_rules_list_response.py new file mode 100644 index 0000000000..20c693d606 --- /dev/null +++ b/datadog_api_client/v2/model/cloud_workload_security_agent_rules_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_data import CloudWorkloadSecurityAgentRuleData + +class CloudWorkloadSecurityAgentRulesListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_workload_security_agent_rule_data import CloudWorkloadSecurityAgentRuleData + return { + "data": ([CloudWorkloadSecurityAgentRuleData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[CloudWorkloadSecurityAgentRuleData], UnsetType]=unset, **kwargs): + """ + Response object that includes a list of Agent rule + + :param data: A list of Agent rules objects + :type data: [CloudWorkloadSecurityAgentRuleData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloudflare_account_create_request.py b/datadog_api_client/v2/model/cloudflare_account_create_request.py new file mode 100644 index 0000000000..4b4968c8ce --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_account_create_request_data import CloudflareAccountCreateRequestData + +class CloudflareAccountCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_account_create_request_data import CloudflareAccountCreateRequestData + return { + "data": (CloudflareAccountCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CloudflareAccountCreateRequestData, **kwargs): + """ + Payload schema when adding a Cloudflare account. + + :param data: Data object for creating a Cloudflare account. + :type data: CloudflareAccountCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cloudflare_account_create_request_attributes.py b/datadog_api_client/v2/model/cloudflare_account_create_request_attributes.py new file mode 100644 index 0000000000..fd56cb1b7e --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_create_request_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudflareAccountCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_key": (str,), + "email": (str,), + "name": (str,), + "resources": ([str],), + "zones": ([str],), + } + attribute_map = { + "api_key": "api_key", + "email": "email", + "name": "name", + "resources": "resources", + "zones": "zones", + } + + def __init__(self_, api_key: str, name: str, email: Union[str, UnsetType]=unset, resources: Union[List[str], UnsetType]=unset, zones: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes object for creating a Cloudflare account. + + :param api_key: The API key (or token) for the Cloudflare account. + :type api_key: str + + :param email: The email associated with the Cloudflare account. If an API key is provided (and not a token), this field is also required. + :type email: str, optional + + :param name: The name of the Cloudflare account. + :type name: str + + :param resources: An allowlist of resources to restrict pulling metrics for including ``'web', 'dns', 'lb' (load balancer), 'worker'``. + :type resources: [str], optional + + :param zones: An allowlist of zones to restrict pulling metrics for. + :type zones: [str], optional + """ + if email is not unset: + kwargs["email"] = email + if resources is not unset: + kwargs["resources"] = resources + if zones is not unset: + kwargs["zones"] = zones + super().__init__(kwargs) + + + self_.api_key = api_key + self_.name = name diff --git a/datadog_api_client/v2/model/cloudflare_account_create_request_data.py b/datadog_api_client/v2/model/cloudflare_account_create_request_data.py new file mode 100644 index 0000000000..5259858bbe --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_account_create_request_attributes import CloudflareAccountCreateRequestAttributes + from datadog_api_client.v2.model.cloudflare_account_type import CloudflareAccountType + +class CloudflareAccountCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_account_create_request_attributes import CloudflareAccountCreateRequestAttributes + from datadog_api_client.v2.model.cloudflare_account_type import CloudflareAccountType + return { + "attributes": (CloudflareAccountCreateRequestAttributes,), + "type": (CloudflareAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CloudflareAccountCreateRequestAttributes, type: CloudflareAccountType, **kwargs): + """ + Data object for creating a Cloudflare account. + + :param attributes: Attributes object for creating a Cloudflare account. + :type attributes: CloudflareAccountCreateRequestAttributes + + :param type: The JSON:API type for this API. Should always be ``cloudflare-accounts``. + :type type: CloudflareAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/cloudflare_account_response.py b/datadog_api_client/v2/model/cloudflare_account_response.py new file mode 100644 index 0000000000..069db8294b --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_account_response_data import CloudflareAccountResponseData + +class CloudflareAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_account_response_data import CloudflareAccountResponseData + return { + "data": (CloudflareAccountResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CloudflareAccountResponseData, UnsetType]=unset, **kwargs): + """ + The expected response schema when getting a Cloudflare account. + + :param data: Data object of a Cloudflare account. + :type data: CloudflareAccountResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloudflare_account_response_attributes.py b/datadog_api_client/v2/model/cloudflare_account_response_attributes.py new file mode 100644 index 0000000000..30737899ff --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_response_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudflareAccountResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "name": (str,), + "resources": ([str],), + "zones": ([str],), + } + attribute_map = { + "email": "email", + "name": "name", + "resources": "resources", + "zones": "zones", + } + + def __init__(self_, name: str, email: Union[str, UnsetType]=unset, resources: Union[List[str], UnsetType]=unset, zones: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes object of a Cloudflare account. + + :param email: The email associated with the Cloudflare account. + :type email: str, optional + + :param name: The name of the Cloudflare account. + :type name: str + + :param resources: An allowlist of resources, such as ``web`` , ``dns`` , ``lb`` (load balancer), ``worker`` , that restricts pulling metrics from those resources. + :type resources: [str], optional + + :param zones: An allowlist of zones to restrict pulling metrics for. + :type zones: [str], optional + """ + if email is not unset: + kwargs["email"] = email + if resources is not unset: + kwargs["resources"] = resources + if zones is not unset: + kwargs["zones"] = zones + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/cloudflare_account_response_data.py b/datadog_api_client/v2/model/cloudflare_account_response_data.py new file mode 100644 index 0000000000..7344596c72 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_account_response_attributes import CloudflareAccountResponseAttributes + from datadog_api_client.v2.model.cloudflare_account_type import CloudflareAccountType + +class CloudflareAccountResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_account_response_attributes import CloudflareAccountResponseAttributes + from datadog_api_client.v2.model.cloudflare_account_type import CloudflareAccountType + return { + "attributes": (CloudflareAccountResponseAttributes,), + "id": (str,), + "type": (CloudflareAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CloudflareAccountResponseAttributes, id: str, type: CloudflareAccountType, **kwargs): + """ + Data object of a Cloudflare account. + + :param attributes: Attributes object of a Cloudflare account. + :type attributes: CloudflareAccountResponseAttributes + + :param id: The ID of the Cloudflare account, a hash of the account name. + :type id: str + + :param type: The JSON:API type for this API. Should always be ``cloudflare-accounts``. + :type type: CloudflareAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cloudflare_account_type.py b/datadog_api_client/v2/model/cloudflare_account_type.py new file mode 100644 index 0000000000..959552b2aa --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudflareAccountType(ModelSimple): + """ + The JSON:API type for this API. Should always be `cloudflare-accounts`. + + :param value: If omitted defaults to "cloudflare-accounts". Must be one of ["cloudflare-accounts"]. + :type value: str + """ + + allowed_values = { + "cloudflare-accounts", + } + CLOUDFLARE_ACCOUNTS: ClassVar["CloudflareAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudflareAccountType.CLOUDFLARE_ACCOUNTS = CloudflareAccountType("cloudflare-accounts") diff --git a/datadog_api_client/v2/model/cloudflare_account_update_request.py b/datadog_api_client/v2/model/cloudflare_account_update_request.py new file mode 100644 index 0000000000..d3ca7657ff --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_account_update_request_data import CloudflareAccountUpdateRequestData + +class CloudflareAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_account_update_request_data import CloudflareAccountUpdateRequestData + return { + "data": (CloudflareAccountUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CloudflareAccountUpdateRequestData, **kwargs): + """ + Payload schema when updating a Cloudflare account. + + :param data: Data object for updating a Cloudflare account. + :type data: CloudflareAccountUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cloudflare_account_update_request_attributes.py b/datadog_api_client/v2/model/cloudflare_account_update_request_attributes.py new file mode 100644 index 0000000000..c09a70b3c5 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_update_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudflareAccountUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_key": (str,), + "email": (str,), + "name": (str,), + "resources": ([str],), + "zones": ([str],), + } + attribute_map = { + "api_key": "api_key", + "email": "email", + "name": "name", + "resources": "resources", + "zones": "zones", + } + + def __init__(self_, api_key: str, email: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, resources: Union[List[str], UnsetType]=unset, zones: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes object for updating a Cloudflare account. + + :param api_key: The API key of the Cloudflare account. + :type api_key: str + + :param email: The email associated with the Cloudflare account. If an API key is provided (and not a token), this field is also required. + :type email: str, optional + + :param name: The name of the Cloudflare account. + :type name: str, optional + + :param resources: An allowlist of resources to restrict pulling metrics for including ``'web', 'dns', 'lb' (load balancer), 'worker'``. + :type resources: [str], optional + + :param zones: An allowlist of zones to restrict pulling metrics for. + :type zones: [str], optional + """ + if email is not unset: + kwargs["email"] = email + if name is not unset: + kwargs["name"] = name + if resources is not unset: + kwargs["resources"] = resources + if zones is not unset: + kwargs["zones"] = zones + super().__init__(kwargs) + + + self_.api_key = api_key diff --git a/datadog_api_client/v2/model/cloudflare_account_update_request_data.py b/datadog_api_client/v2/model/cloudflare_account_update_request_data.py new file mode 100644 index 0000000000..ec67dd3545 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_account_update_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_account_update_request_attributes import CloudflareAccountUpdateRequestAttributes + from datadog_api_client.v2.model.cloudflare_account_type import CloudflareAccountType + +class CloudflareAccountUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_account_update_request_attributes import CloudflareAccountUpdateRequestAttributes + from datadog_api_client.v2.model.cloudflare_account_type import CloudflareAccountType + return { + "attributes": (CloudflareAccountUpdateRequestAttributes,), + "type": (CloudflareAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[CloudflareAccountUpdateRequestAttributes, UnsetType]=unset, type: Union[CloudflareAccountType, UnsetType]=unset, **kwargs): + """ + Data object for updating a Cloudflare account. + + :param attributes: Attributes object for updating a Cloudflare account. + :type attributes: CloudflareAccountUpdateRequestAttributes, optional + + :param type: The JSON:API type for this API. Should always be ``cloudflare-accounts``. + :type type: CloudflareAccountType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloudflare_accounts_response.py b/datadog_api_client/v2/model/cloudflare_accounts_response.py new file mode 100644 index 0000000000..05a2a772b3 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_accounts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_account_response_data import CloudflareAccountResponseData + +class CloudflareAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_account_response_data import CloudflareAccountResponseData + return { + "data": ([CloudflareAccountResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[CloudflareAccountResponseData], UnsetType]=unset, **kwargs): + """ + The expected response schema when getting Cloudflare accounts. + + :param data: The JSON:API data schema. + :type data: [CloudflareAccountResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cloudflare_api_token.py b/datadog_api_client/v2/model/cloudflare_api_token.py new file mode 100644 index 0000000000..0a8f15e273 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_api_token.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_api_token_type import CloudflareAPITokenType + +class CloudflareAPIToken(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_api_token_type import CloudflareAPITokenType + return { + "api_token": (str,), + "type": (CloudflareAPITokenType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, api_token: str, type: CloudflareAPITokenType, **kwargs): + """ + The definition of the ``CloudflareAPIToken`` object. + + :param api_token: The ``CloudflareAPIToken`` ``api_token``. + :type api_token: str + + :param type: The definition of the ``CloudflareAPIToken`` object. + :type type: CloudflareAPITokenType + """ + super().__init__(kwargs) + + + self_.api_token = api_token + self_.type = type diff --git a/datadog_api_client/v2/model/cloudflare_api_token_type.py b/datadog_api_client/v2/model/cloudflare_api_token_type.py new file mode 100644 index 0000000000..756ad2d328 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_api_token_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudflareAPITokenType(ModelSimple): + """ + The definition of the `CloudflareAPIToken` object. + + :param value: If omitted defaults to "CloudflareAPIToken". Must be one of ["CloudflareAPIToken"]. + :type value: str + """ + + allowed_values = { + "CloudflareAPIToken", + } + CLOUDFLAREAPITOKEN: ClassVar["CloudflareAPITokenType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudflareAPITokenType.CLOUDFLAREAPITOKEN = CloudflareAPITokenType("CloudflareAPIToken") diff --git a/datadog_api_client/v2/model/cloudflare_api_token_update.py b/datadog_api_client/v2/model/cloudflare_api_token_update.py new file mode 100644 index 0000000000..aa2fef3bce --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_api_token_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_api_token_type import CloudflareAPITokenType + +class CloudflareAPITokenUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_api_token_type import CloudflareAPITokenType + return { + "api_token": (str,), + "type": (CloudflareAPITokenType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, type: CloudflareAPITokenType, api_token: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``CloudflareAPIToken`` object. + + :param api_token: The ``CloudflareAPITokenUpdate`` ``api_token``. + :type api_token: str, optional + + :param type: The definition of the ``CloudflareAPIToken`` object. + :type type: CloudflareAPITokenType + """ + if api_token is not unset: + kwargs["api_token"] = api_token + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/cloudflare_credentials.py b/datadog_api_client/v2/model/cloudflare_credentials.py new file mode 100644 index 0000000000..476fd53956 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_credentials.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudflareCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``CloudflareCredentials`` object. + + :param api_token: The `CloudflareAPIToken` `api_token`. + :type api_token: str + + :param type: The definition of the `CloudflareAPIToken` object. + :type type: CloudflareAPITokenType + + :param auth_email: The `CloudflareGlobalAPIToken` `auth_email`. + :type auth_email: str + + :param global_api_key: The `CloudflareGlobalAPIToken` `global_api_key`. + :type global_api_key: str + """ + 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.cloudflare_api_token import CloudflareAPIToken + from datadog_api_client.v2.model.cloudflare_global_api_token import CloudflareGlobalAPIToken + return { + "oneOf": [ + CloudflareAPIToken, + CloudflareGlobalAPIToken, + ], + } diff --git a/datadog_api_client/v2/model/cloudflare_credentials_update.py b/datadog_api_client/v2/model/cloudflare_credentials_update.py new file mode 100644 index 0000000000..02ee96f0ee --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_credentials_update.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CloudflareCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``CloudflareCredentialsUpdate`` object. + + :param api_token: The `CloudflareAPITokenUpdate` `api_token`. + :type api_token: str, optional + + :param type: The definition of the `CloudflareAPIToken` object. + :type type: CloudflareAPITokenType + + :param auth_email: The `CloudflareGlobalAPITokenUpdate` `auth_email`. + :type auth_email: str, optional + + :param global_api_key: The `CloudflareGlobalAPITokenUpdate` `global_api_key`. + :type global_api_key: str, 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.cloudflare_api_token_update import CloudflareAPITokenUpdate + from datadog_api_client.v2.model.cloudflare_global_api_token_update import CloudflareGlobalAPITokenUpdate + return { + "oneOf": [ + CloudflareAPITokenUpdate, + CloudflareGlobalAPITokenUpdate, + ], + } diff --git a/datadog_api_client/v2/model/cloudflare_global_api_token.py b/datadog_api_client/v2/model/cloudflare_global_api_token.py new file mode 100644 index 0000000000..f7a3a0d190 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_global_api_token.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_global_api_token_type import CloudflareGlobalAPITokenType + +class CloudflareGlobalAPIToken(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_global_api_token_type import CloudflareGlobalAPITokenType + return { + "auth_email": (str,), + "global_api_key": (str,), + "type": (CloudflareGlobalAPITokenType,), + } + attribute_map = { + "auth_email": "auth_email", + "global_api_key": "global_api_key", + "type": "type", + } + + def __init__(self_, auth_email: str, global_api_key: str, type: CloudflareGlobalAPITokenType, **kwargs): + """ + The definition of the ``CloudflareGlobalAPIToken`` object. + + :param auth_email: The ``CloudflareGlobalAPIToken`` ``auth_email``. + :type auth_email: str + + :param global_api_key: The ``CloudflareGlobalAPIToken`` ``global_api_key``. + :type global_api_key: str + + :param type: The definition of the ``CloudflareGlobalAPIToken`` object. + :type type: CloudflareGlobalAPITokenType + """ + super().__init__(kwargs) + + + self_.auth_email = auth_email + self_.global_api_key = global_api_key + self_.type = type diff --git a/datadog_api_client/v2/model/cloudflare_global_api_token_type.py b/datadog_api_client/v2/model/cloudflare_global_api_token_type.py new file mode 100644 index 0000000000..de9d40459c --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_global_api_token_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudflareGlobalAPITokenType(ModelSimple): + """ + The definition of the `CloudflareGlobalAPIToken` object. + + :param value: If omitted defaults to "CloudflareGlobalAPIToken". Must be one of ["CloudflareGlobalAPIToken"]. + :type value: str + """ + + allowed_values = { + "CloudflareGlobalAPIToken", + } + CLOUDFLAREGLOBALAPITOKEN: ClassVar["CloudflareGlobalAPITokenType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudflareGlobalAPITokenType.CLOUDFLAREGLOBALAPITOKEN = CloudflareGlobalAPITokenType("CloudflareGlobalAPIToken") diff --git a/datadog_api_client/v2/model/cloudflare_global_api_token_update.py b/datadog_api_client/v2/model/cloudflare_global_api_token_update.py new file mode 100644 index 0000000000..54dc7c75c9 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_global_api_token_update.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_global_api_token_type import CloudflareGlobalAPITokenType + +class CloudflareGlobalAPITokenUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_global_api_token_type import CloudflareGlobalAPITokenType + return { + "auth_email": (str,), + "global_api_key": (str,), + "type": (CloudflareGlobalAPITokenType,), + } + attribute_map = { + "auth_email": "auth_email", + "global_api_key": "global_api_key", + "type": "type", + } + + def __init__(self_, type: CloudflareGlobalAPITokenType, auth_email: Union[str, UnsetType]=unset, global_api_key: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``CloudflareGlobalAPIToken`` object. + + :param auth_email: The ``CloudflareGlobalAPITokenUpdate`` ``auth_email``. + :type auth_email: str, optional + + :param global_api_key: The ``CloudflareGlobalAPITokenUpdate`` ``global_api_key``. + :type global_api_key: str, optional + + :param type: The definition of the ``CloudflareGlobalAPIToken`` object. + :type type: CloudflareGlobalAPITokenType + """ + if auth_email is not unset: + kwargs["auth_email"] = auth_email + if global_api_key is not unset: + kwargs["global_api_key"] = global_api_key + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/cloudflare_integration.py b/datadog_api_client/v2/model/cloudflare_integration.py new file mode 100644 index 0000000000..18cc156078 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_integration.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_credentials import CloudflareCredentials + from datadog_api_client.v2.model.cloudflare_integration_type import CloudflareIntegrationType + from datadog_api_client.v2.model.cloudflare_api_token import CloudflareAPIToken + from datadog_api_client.v2.model.cloudflare_global_api_token import CloudflareGlobalAPIToken + +class CloudflareIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_credentials import CloudflareCredentials + from datadog_api_client.v2.model.cloudflare_integration_type import CloudflareIntegrationType + return { + "credentials": (CloudflareCredentials,), + "type": (CloudflareIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[CloudflareCredentials, CloudflareAPIToken, CloudflareGlobalAPIToken], type: CloudflareIntegrationType, **kwargs): + """ + The definition of the ``CloudflareIntegration`` object. + + :param credentials: The definition of the ``CloudflareCredentials`` object. + :type credentials: CloudflareCredentials + + :param type: The definition of the ``CloudflareIntegrationType`` object. + :type type: CloudflareIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/cloudflare_integration_type.py b/datadog_api_client/v2/model/cloudflare_integration_type.py new file mode 100644 index 0000000000..f0f12999a6 --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CloudflareIntegrationType(ModelSimple): + """ + The definition of the `CloudflareIntegrationType` object. + + :param value: If omitted defaults to "Cloudflare". Must be one of ["Cloudflare"]. + :type value: str + """ + + allowed_values = { + "Cloudflare", + } + CLOUDFLARE: ClassVar["CloudflareIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CloudflareIntegrationType.CLOUDFLARE = CloudflareIntegrationType("Cloudflare") diff --git a/datadog_api_client/v2/model/cloudflare_integration_update.py b/datadog_api_client/v2/model/cloudflare_integration_update.py new file mode 100644 index 0000000000..8a6a0f521d --- /dev/null +++ b/datadog_api_client/v2/model/cloudflare_integration_update.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloudflare_credentials_update import CloudflareCredentialsUpdate + from datadog_api_client.v2.model.cloudflare_integration_type import CloudflareIntegrationType + from datadog_api_client.v2.model.cloudflare_api_token_update import CloudflareAPITokenUpdate + from datadog_api_client.v2.model.cloudflare_global_api_token_update import CloudflareGlobalAPITokenUpdate + +class CloudflareIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloudflare_credentials_update import CloudflareCredentialsUpdate + from datadog_api_client.v2.model.cloudflare_integration_type import CloudflareIntegrationType + return { + "credentials": (CloudflareCredentialsUpdate,), + "type": (CloudflareIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: CloudflareIntegrationType, credentials: Union[CloudflareCredentialsUpdate, CloudflareAPITokenUpdate, CloudflareGlobalAPITokenUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``CloudflareIntegrationUpdate`` object. + + :param credentials: The definition of the ``CloudflareCredentialsUpdate`` object. + :type credentials: CloudflareCredentialsUpdate, optional + + :param type: The definition of the ``CloudflareIntegrationType`` object. + :type type: CloudflareIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/code_location.py b/datadog_api_client/v2/model/code_location.py new file mode 100644 index 0000000000..3c3499cf4e --- /dev/null +++ b/datadog_api_client/v2/model/code_location.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CodeLocation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "file_path": (str,), + "location": (str,), + "method": (str,), + } + attribute_map = { + "file_path": "file_path", + "location": "location", + "method": "method", + } + + def __init__(self_, location: str, file_path: Union[str, UnsetType]=unset, method: Union[str, UnsetType]=unset, **kwargs): + """ + Code vulnerability location. + + :param file_path: Vulnerability location file path. + :type file_path: str, optional + + :param location: Vulnerability extracted location. + :type location: str + + :param method: Vulnerability location method. + :type method: str, optional + """ + if file_path is not unset: + kwargs["file_path"] = file_path + if method is not unset: + kwargs["method"] = method + super().__init__(kwargs) + + + self_.location = location diff --git a/datadog_api_client/v2/model/commit_coverage_summary_request.py b/datadog_api_client/v2/model/commit_coverage_summary_request.py new file mode 100644 index 0000000000..ef1224347f --- /dev/null +++ b/datadog_api_client/v2/model/commit_coverage_summary_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commit_coverage_summary_request_data import CommitCoverageSummaryRequestData + +class CommitCoverageSummaryRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commit_coverage_summary_request_data import CommitCoverageSummaryRequestData + return { + "data": (CommitCoverageSummaryRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CommitCoverageSummaryRequestData, **kwargs): + """ + Request object for getting code coverage summary for a commit. + + :param data: Data object for commit summary request. + :type data: CommitCoverageSummaryRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/commit_coverage_summary_request_attributes.py b/datadog_api_client/v2/model/commit_coverage_summary_request_attributes.py new file mode 100644 index 0000000000..ad644e8c49 --- /dev/null +++ b/datadog_api_client/v2/model/commit_coverage_summary_request_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitCoverageSummaryRequestAttributes(ModelNormal): + validations = { + "commit_sha": { + }, + "repository_id": { + "min_length": 1, + }, + "repository_url": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "commit_sha": (str,), + "repository_id": (str,), + "repository_url": (str,), + } + attribute_map = { + "commit_sha": "commit_sha", + "repository_id": "repository_id", + "repository_url": "repository_url", + } + + def __init__(self_, commit_sha: str, repository_id: Union[str, UnsetType]=unset, repository_url: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for requesting code coverage summary for a commit. + + :param commit_sha: The commit SHA (40-character hexadecimal string). + :type commit_sha: str + + :param repository_id: Deprecated: use ``repository_url`` instead. The repository URL. **Deprecated**. + :type repository_id: str, optional + + :param repository_url: The repository URL. Accepts a full URL with or without a scheme (for example, ``https://github.com/org/repo`` or ``github.com/org/repo`` ). + :type repository_url: str, optional + """ + if repository_id is not unset: + kwargs["repository_id"] = repository_id + if repository_url is not unset: + kwargs["repository_url"] = repository_url + super().__init__(kwargs) + + + self_.commit_sha = commit_sha diff --git a/datadog_api_client/v2/model/commit_coverage_summary_request_data.py b/datadog_api_client/v2/model/commit_coverage_summary_request_data.py new file mode 100644 index 0000000000..4bcf5dcb0b --- /dev/null +++ b/datadog_api_client/v2/model/commit_coverage_summary_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commit_coverage_summary_request_attributes import CommitCoverageSummaryRequestAttributes + from datadog_api_client.v2.model.commit_coverage_summary_request_type import CommitCoverageSummaryRequestType + +class CommitCoverageSummaryRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commit_coverage_summary_request_attributes import CommitCoverageSummaryRequestAttributes + from datadog_api_client.v2.model.commit_coverage_summary_request_type import CommitCoverageSummaryRequestType + return { + "attributes": (CommitCoverageSummaryRequestAttributes,), + "type": (CommitCoverageSummaryRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CommitCoverageSummaryRequestAttributes, type: CommitCoverageSummaryRequestType, **kwargs): + """ + Data object for commit summary request. + + :param attributes: Attributes for requesting code coverage summary for a commit. + :type attributes: CommitCoverageSummaryRequestAttributes + + :param type: JSON:API type for commit coverage summary request. The value must always be ``ci_app_coverage_commit_summary_request``. + :type type: CommitCoverageSummaryRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/commit_coverage_summary_request_type.py b/datadog_api_client/v2/model/commit_coverage_summary_request_type.py new file mode 100644 index 0000000000..168585ba33 --- /dev/null +++ b/datadog_api_client/v2/model/commit_coverage_summary_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CommitCoverageSummaryRequestType(ModelSimple): + """ + JSON:API type for commit coverage summary request. The value must always be `ci_app_coverage_commit_summary_request`. + + :param value: If omitted defaults to "ci_app_coverage_commit_summary_request". Must be one of ["ci_app_coverage_commit_summary_request"]. + :type value: str + """ + + allowed_values = { + "ci_app_coverage_commit_summary_request", + } + CI_APP_COVERAGE_COMMIT_SUMMARY_REQUEST: ClassVar["CommitCoverageSummaryRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CommitCoverageSummaryRequestType.CI_APP_COVERAGE_COMMIT_SUMMARY_REQUEST = CommitCoverageSummaryRequestType("ci_app_coverage_commit_summary_request") diff --git a/datadog_api_client/v2/model/commitments_aws_ec2_ri_commitment.py b/datadog_api_client/v2/model/commitments_aws_ec2_ri_commitment.py new file mode 100644 index 0000000000..14edcc367d --- /dev/null +++ b/datadog_api_client/v2/model/commitments_aws_ec2_ri_commitment.py @@ -0,0 +1,124 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitmentsAwsEC2RICommitment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "availability_zone": (str,), + "commitment_id": (str,), + "expiration_date": (str,), + "instance_type": (str,), + "number_of_nfus": (float,), + "number_of_reservations": (float,), + "offering_class": (str,), + "operating_system": (str,), + "purchase_option": (str,), + "region": (str,), + "start_date": (str,), + "term_length": (float,), + "utilization": (float,), + } + attribute_map = { + "availability_zone": "availability_zone", + "commitment_id": "commitment_id", + "expiration_date": "expiration_date", + "instance_type": "instance_type", + "number_of_nfus": "number_of_nfus", + "number_of_reservations": "number_of_reservations", + "offering_class": "offering_class", + "operating_system": "operating_system", + "purchase_option": "purchase_option", + "region": "region", + "start_date": "start_date", + "term_length": "term_length", + "utilization": "utilization", + } + + def __init__(self_, commitment_id: str, instance_type: str, offering_class: str, operating_system: str, purchase_option: str, region: str, availability_zone: Union[str, UnsetType]=unset, expiration_date: Union[str, UnsetType]=unset, number_of_nfus: Union[float, UnsetType]=unset, number_of_reservations: Union[float, UnsetType]=unset, start_date: Union[str, UnsetType]=unset, term_length: Union[float, UnsetType]=unset, utilization: Union[float, UnsetType]=unset, **kwargs): + """ + AWS EC2 Reserved Instance commitment details. + + :param availability_zone: The availability zone of the reservation. + :type availability_zone: str, optional + + :param commitment_id: The unique identifier of the Reserved Instance. + :type commitment_id: str + + :param expiration_date: The expiration date of the commitment. + :type expiration_date: str, optional + + :param instance_type: The EC2 instance type. + :type instance_type: str + + :param number_of_nfus: The number of Normalized Capacity Units. + :type number_of_nfus: float, optional + + :param number_of_reservations: The number of reserved instances. + :type number_of_reservations: float, optional + + :param offering_class: The offering class of the Reserved Instance. + :type offering_class: str + + :param operating_system: The operating system of the Reserved Instance. + :type operating_system: str + + :param purchase_option: The payment option for the Reserved Instance. + :type purchase_option: str + + :param region: The AWS region of the Reserved Instance. + :type region: str + + :param start_date: The start date of the commitment. + :type start_date: str, optional + + :param term_length: The term length in years. + :type term_length: float, optional + + :param utilization: The utilization percentage of the commitment. + :type utilization: float, optional + """ + if availability_zone is not unset: + kwargs["availability_zone"] = availability_zone + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if number_of_nfus is not unset: + kwargs["number_of_nfus"] = number_of_nfus + if number_of_reservations is not unset: + kwargs["number_of_reservations"] = number_of_reservations + if start_date is not unset: + kwargs["start_date"] = start_date + if term_length is not unset: + kwargs["term_length"] = term_length + if utilization is not unset: + kwargs["utilization"] = utilization + super().__init__(kwargs) + + + self_.commitment_id = commitment_id + self_.instance_type = instance_type + self_.offering_class = offering_class + self_.operating_system = operating_system + self_.purchase_option = purchase_option + self_.region = region diff --git a/datadog_api_client/v2/model/commitments_aws_elasticache_ri_commitment.py b/datadog_api_client/v2/model/commitments_aws_elasticache_ri_commitment.py new file mode 100644 index 0000000000..53e44bb1e7 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_aws_elasticache_ri_commitment.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitmentsAwsElasticacheRICommitment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cache_engine": (str,), + "commitment_id": (str,), + "expiration_date": (str,), + "instance_type": (str,), + "number_of_nfus": (float,), + "number_of_reservations": (float,), + "purchase_option": (str,), + "region": (str,), + "start_date": (str,), + "term_length": (float,), + "utilization": (float,), + } + attribute_map = { + "cache_engine": "cache_engine", + "commitment_id": "commitment_id", + "expiration_date": "expiration_date", + "instance_type": "instance_type", + "number_of_nfus": "number_of_nfus", + "number_of_reservations": "number_of_reservations", + "purchase_option": "purchase_option", + "region": "region", + "start_date": "start_date", + "term_length": "term_length", + "utilization": "utilization", + } + + def __init__(self_, cache_engine: str, commitment_id: str, instance_type: str, purchase_option: str, region: str, expiration_date: Union[str, UnsetType]=unset, number_of_nfus: Union[float, UnsetType]=unset, number_of_reservations: Union[float, UnsetType]=unset, start_date: Union[str, UnsetType]=unset, term_length: Union[float, UnsetType]=unset, utilization: Union[float, UnsetType]=unset, **kwargs): + """ + AWS ElastiCache Reserved Instance commitment details. + + :param cache_engine: The cache engine type of the Reserved Instance. + :type cache_engine: str + + :param commitment_id: The unique identifier of the Reserved Instance. + :type commitment_id: str + + :param expiration_date: The expiration date of the commitment. + :type expiration_date: str, optional + + :param instance_type: The ElastiCache instance type. + :type instance_type: str + + :param number_of_nfus: The number of Normalized Capacity Units. + :type number_of_nfus: float, optional + + :param number_of_reservations: The number of reserved instances. + :type number_of_reservations: float, optional + + :param purchase_option: The payment option for the Reserved Instance. + :type purchase_option: str + + :param region: The AWS region of the Reserved Instance. + :type region: str + + :param start_date: The start date of the commitment. + :type start_date: str, optional + + :param term_length: The term length in years. + :type term_length: float, optional + + :param utilization: The utilization percentage of the commitment. + :type utilization: float, optional + """ + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if number_of_nfus is not unset: + kwargs["number_of_nfus"] = number_of_nfus + if number_of_reservations is not unset: + kwargs["number_of_reservations"] = number_of_reservations + if start_date is not unset: + kwargs["start_date"] = start_date + if term_length is not unset: + kwargs["term_length"] = term_length + if utilization is not unset: + kwargs["utilization"] = utilization + super().__init__(kwargs) + + + self_.cache_engine = cache_engine + self_.commitment_id = commitment_id + self_.instance_type = instance_type + self_.purchase_option = purchase_option + self_.region = region diff --git a/datadog_api_client/v2/model/commitments_aws_rdsri_commitment.py b/datadog_api_client/v2/model/commitments_aws_rdsri_commitment.py new file mode 100644 index 0000000000..eb30ed23dd --- /dev/null +++ b/datadog_api_client/v2/model/commitments_aws_rdsri_commitment.py @@ -0,0 +1,118 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitmentsAwsRDSRICommitment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "commitment_id": (str,), + "database_engine": (str,), + "expiration_date": (str,), + "instance_type": (str,), + "is_multi_az": (bool,), + "number_of_nfus": (float,), + "number_of_reservations": (float,), + "purchase_option": (str,), + "region": (str,), + "start_date": (str,), + "term_length": (float,), + "utilization": (float,), + } + attribute_map = { + "commitment_id": "commitment_id", + "database_engine": "database_engine", + "expiration_date": "expiration_date", + "instance_type": "instance_type", + "is_multi_az": "is_multi_az", + "number_of_nfus": "number_of_nfus", + "number_of_reservations": "number_of_reservations", + "purchase_option": "purchase_option", + "region": "region", + "start_date": "start_date", + "term_length": "term_length", + "utilization": "utilization", + } + + def __init__(self_, commitment_id: str, database_engine: str, instance_type: str, purchase_option: str, region: str, expiration_date: Union[str, UnsetType]=unset, is_multi_az: Union[bool, UnsetType]=unset, number_of_nfus: Union[float, UnsetType]=unset, number_of_reservations: Union[float, UnsetType]=unset, start_date: Union[str, UnsetType]=unset, term_length: Union[float, UnsetType]=unset, utilization: Union[float, UnsetType]=unset, **kwargs): + """ + AWS RDS Reserved Instance commitment details. + + :param commitment_id: The unique identifier of the Reserved Instance. + :type commitment_id: str + + :param database_engine: The database engine of the Reserved Instance. + :type database_engine: str + + :param expiration_date: The expiration date of the commitment. + :type expiration_date: str, optional + + :param instance_type: The RDS instance type. + :type instance_type: str + + :param is_multi_az: Whether the Reserved Instance is Multi-AZ. + :type is_multi_az: bool, optional + + :param number_of_nfus: The number of Normalized Capacity Units. + :type number_of_nfus: float, optional + + :param number_of_reservations: The number of reserved instances. + :type number_of_reservations: float, optional + + :param purchase_option: The payment option for the Reserved Instance. + :type purchase_option: str + + :param region: The AWS region of the Reserved Instance. + :type region: str + + :param start_date: The start date of the commitment. + :type start_date: str, optional + + :param term_length: The term length in years. + :type term_length: float, optional + + :param utilization: The utilization percentage of the commitment. + :type utilization: float, optional + """ + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if is_multi_az is not unset: + kwargs["is_multi_az"] = is_multi_az + if number_of_nfus is not unset: + kwargs["number_of_nfus"] = number_of_nfus + if number_of_reservations is not unset: + kwargs["number_of_reservations"] = number_of_reservations + if start_date is not unset: + kwargs["start_date"] = start_date + if term_length is not unset: + kwargs["term_length"] = term_length + if utilization is not unset: + kwargs["utilization"] = utilization + super().__init__(kwargs) + + + self_.commitment_id = commitment_id + self_.database_engine = database_engine + self_.instance_type = instance_type + self_.purchase_option = purchase_option + self_.region = region diff --git a/datadog_api_client/v2/model/commitments_aws_sp_commitment.py b/datadog_api_client/v2/model/commitments_aws_sp_commitment.py new file mode 100644 index 0000000000..a4ab2da85d --- /dev/null +++ b/datadog_api_client/v2/model/commitments_aws_sp_commitment.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitmentsAwsSPCommitment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "commitment_id": (str,), + "committed_spend_per_hour": (float,), + "expiration_date": (str,), + "purchase_option": (str,), + "savings_plan_type": (str,), + "start_date": (str,), + "term_length": (float,), + "utilization": (float,), + } + attribute_map = { + "commitment_id": "commitment_id", + "committed_spend_per_hour": "committed_spend_per_hour", + "expiration_date": "expiration_date", + "purchase_option": "purchase_option", + "savings_plan_type": "savings_plan_type", + "start_date": "start_date", + "term_length": "term_length", + "utilization": "utilization", + } + + def __init__(self_, commitment_id: str, purchase_option: str, savings_plan_type: str, committed_spend_per_hour: Union[float, UnsetType]=unset, expiration_date: Union[str, UnsetType]=unset, start_date: Union[str, UnsetType]=unset, term_length: Union[float, UnsetType]=unset, utilization: Union[float, UnsetType]=unset, **kwargs): + """ + AWS Savings Plan commitment details. + + :param commitment_id: The unique identifier of the Savings Plan. + :type commitment_id: str + + :param committed_spend_per_hour: The hourly committed spend for the Savings Plan. + :type committed_spend_per_hour: float, optional + + :param expiration_date: The expiration date of the commitment. + :type expiration_date: str, optional + + :param purchase_option: The payment option for the Savings Plan. + :type purchase_option: str + + :param savings_plan_type: The Savings Plan type. + :type savings_plan_type: str + + :param start_date: The start date of the commitment. + :type start_date: str, optional + + :param term_length: The term length in years. + :type term_length: float, optional + + :param utilization: The utilization percentage of the commitment. + :type utilization: float, optional + """ + if committed_spend_per_hour is not unset: + kwargs["committed_spend_per_hour"] = committed_spend_per_hour + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if start_date is not unset: + kwargs["start_date"] = start_date + if term_length is not unset: + kwargs["term_length"] = term_length + if utilization is not unset: + kwargs["utilization"] = utilization + super().__init__(kwargs) + + + self_.commitment_id = commitment_id + self_.purchase_option = purchase_option + self_.savings_plan_type = savings_plan_type diff --git a/datadog_api_client/v2/model/commitments_azure_compute_sp_commitment.py b/datadog_api_client/v2/model/commitments_azure_compute_sp_commitment.py new file mode 100644 index 0000000000..8887f91a4c --- /dev/null +++ b/datadog_api_client/v2/model/commitments_azure_compute_sp_commitment.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitmentsAzureComputeSPCommitment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "benefit_name": (str,), + "commitment_id": (str,), + "committed_spend_per_hour": (float,), + "expiration_date": (str,), + "start_date": (str,), + "term_length": (float,), + "utilization": (float,), + } + attribute_map = { + "benefit_name": "benefit_name", + "commitment_id": "commitment_id", + "committed_spend_per_hour": "committed_spend_per_hour", + "expiration_date": "expiration_date", + "start_date": "start_date", + "term_length": "term_length", + "utilization": "utilization", + } + + def __init__(self_, benefit_name: str, commitment_id: str, committed_spend_per_hour: Union[float, UnsetType]=unset, expiration_date: Union[str, UnsetType]=unset, start_date: Union[str, UnsetType]=unset, term_length: Union[float, UnsetType]=unset, utilization: Union[float, UnsetType]=unset, **kwargs): + """ + Azure Compute Savings Plan commitment details. + + :param benefit_name: The display name of the Azure Savings Plan. + :type benefit_name: str + + :param commitment_id: The unique identifier of the Savings Plan. + :type commitment_id: str + + :param committed_spend_per_hour: The hourly committed spend for the Savings Plan. + :type committed_spend_per_hour: float, optional + + :param expiration_date: The expiration date of the commitment. + :type expiration_date: str, optional + + :param start_date: The start date of the commitment. + :type start_date: str, optional + + :param term_length: The term length in years. + :type term_length: float, optional + + :param utilization: The utilization percentage of the commitment. + :type utilization: float, optional + """ + if committed_spend_per_hour is not unset: + kwargs["committed_spend_per_hour"] = committed_spend_per_hour + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if start_date is not unset: + kwargs["start_date"] = start_date + if term_length is not unset: + kwargs["term_length"] = term_length + if utilization is not unset: + kwargs["utilization"] = utilization + super().__init__(kwargs) + + + self_.benefit_name = benefit_name + self_.commitment_id = commitment_id diff --git a/datadog_api_client/v2/model/commitments_azure_vmri_commitment.py b/datadog_api_client/v2/model/commitments_azure_vmri_commitment.py new file mode 100644 index 0000000000..4a6b439520 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_azure_vmri_commitment.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_azure_vmri_status import CommitmentsAzureVMRIStatus + +class CommitmentsAzureVMRICommitment(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_azure_vmri_status import CommitmentsAzureVMRIStatus + return { + "benefit_name": (str,), + "commitment_id": (str,), + "expiration_date": (str,), + "instance_type": (str,), + "meter_sub_category": (str,), + "region": (str,), + "start_date": (str,), + "status": (CommitmentsAzureVMRIStatus,), + "term_length": (float,), + "utilization": (float,), + } + attribute_map = { + "benefit_name": "benefit_name", + "commitment_id": "commitment_id", + "expiration_date": "expiration_date", + "instance_type": "instance_type", + "meter_sub_category": "meter_sub_category", + "region": "region", + "start_date": "start_date", + "status": "status", + "term_length": "term_length", + "utilization": "utilization", + } + + def __init__(self_, benefit_name: str, commitment_id: str, instance_type: str, meter_sub_category: str, region: str, status: CommitmentsAzureVMRIStatus, expiration_date: Union[str, UnsetType]=unset, start_date: Union[str, UnsetType]=unset, term_length: Union[float, UnsetType]=unset, utilization: Union[float, UnsetType]=unset, **kwargs): + """ + Azure Virtual Machine Reserved Instance commitment details. + + :param benefit_name: The display name of the Azure reservation. + :type benefit_name: str + + :param commitment_id: The unique identifier of the Reserved Instance. + :type commitment_id: str + + :param expiration_date: The expiration date of the commitment. + :type expiration_date: str, optional + + :param instance_type: The Azure VM instance type. + :type instance_type: str + + :param meter_sub_category: The Azure meter sub-category for the reservation. + :type meter_sub_category: str + + :param region: The Azure region of the Reserved Instance. + :type region: str + + :param start_date: The start date of the commitment. + :type start_date: str, optional + + :param status: Status of an Azure VM Reserved Instance. + :type status: CommitmentsAzureVMRIStatus + + :param term_length: The term length in years. + :type term_length: float, optional + + :param utilization: The utilization percentage of the commitment. + :type utilization: float, optional + """ + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if start_date is not unset: + kwargs["start_date"] = start_date + if term_length is not unset: + kwargs["term_length"] = term_length + if utilization is not unset: + kwargs["utilization"] = utilization + super().__init__(kwargs) + + + self_.benefit_name = benefit_name + self_.commitment_id = commitment_id + self_.instance_type = instance_type + self_.meter_sub_category = meter_sub_category + self_.region = region + self_.status = status diff --git a/datadog_api_client/v2/model/commitments_azure_vmri_status.py b/datadog_api_client/v2/model/commitments_azure_vmri_status.py new file mode 100644 index 0000000000..8debf5b8ec --- /dev/null +++ b/datadog_api_client/v2/model/commitments_azure_vmri_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CommitmentsAzureVMRIStatus(ModelSimple): + """ + Status of an Azure VM Reserved Instance. + + :param value: Must be one of ["running", "expired", "cancelled"]. + :type value: str + """ + + allowed_values = { + "running", + "expired", + "cancelled", + } + RUNNING: ClassVar["CommitmentsAzureVMRIStatus"] + EXPIRED: ClassVar["CommitmentsAzureVMRIStatus"] + CANCELLED: ClassVar["CommitmentsAzureVMRIStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CommitmentsAzureVMRIStatus.RUNNING = CommitmentsAzureVMRIStatus("running") +CommitmentsAzureVMRIStatus.EXPIRED = CommitmentsAzureVMRIStatus("expired") +CommitmentsAzureVMRIStatus.CANCELLED = CommitmentsAzureVMRIStatus("cancelled") diff --git a/datadog_api_client/v2/model/commitments_commitment_type.py b/datadog_api_client/v2/model/commitments_commitment_type.py new file mode 100644 index 0000000000..0f9ae31df1 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_commitment_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CommitmentsCommitmentType(ModelSimple): + """ + Type of commitment. ri for Reserved Instances, sp for Savings Plans. + + :param value: Must be one of ["ri", "sp"]. + :type value: str + """ + + allowed_values = { + "ri", + "sp", + } + RESERVED_INSTANCES: ClassVar["CommitmentsCommitmentType"] + SAVINGS_PLANS: ClassVar["CommitmentsCommitmentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CommitmentsCommitmentType.RESERVED_INSTANCES = CommitmentsCommitmentType("ri") +CommitmentsCommitmentType.SAVINGS_PLANS = CommitmentsCommitmentType("sp") diff --git a/datadog_api_client/v2/model/commitments_coverage_scalar_response.py b/datadog_api_client/v2/model/commitments_coverage_scalar_response.py new file mode 100644 index 0000000000..3e4585f2b9 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_coverage_scalar_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_scalar_column import CommitmentsScalarColumn + +class CommitmentsCoverageScalarResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_scalar_column import CommitmentsScalarColumn + return { + "columns": ([CommitmentsScalarColumn],), + } + attribute_map = { + "columns": "columns", + } + + def __init__(self_, columns: List[CommitmentsScalarColumn], **kwargs): + """ + Response containing scalar coverage metrics for cloud commitment programs. + + :param columns: Array of scalar columns in the response. + :type columns: [CommitmentsScalarColumn] + """ + super().__init__(kwargs) + + + self_.columns = columns diff --git a/datadog_api_client/v2/model/commitments_coverage_timeseries_response.py b/datadog_api_client/v2/model/commitments_coverage_timeseries_response.py new file mode 100644 index 0000000000..745bf4bb0f --- /dev/null +++ b/datadog_api_client/v2/model/commitments_coverage_timeseries_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_timeseries_metric import CommitmentsTimeseriesMetric + +class CommitmentsCoverageTimeseriesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_timeseries_metric import CommitmentsTimeseriesMetric + return { + "cost": (CommitmentsTimeseriesMetric,), + "hours": (CommitmentsTimeseriesMetric,), + } + attribute_map = { + "cost": "cost", + "hours": "hours", + } + + def __init__(self_, cost: CommitmentsTimeseriesMetric, hours: CommitmentsTimeseriesMetric, **kwargs): + """ + Response containing timeseries coverage metrics for cloud commitment programs. + + :param cost: A timeseries metric containing timestamps, series values, and optional unit metadata. + :type cost: CommitmentsTimeseriesMetric + + :param hours: A timeseries metric containing timestamps, series values, and optional unit metadata. + :type hours: CommitmentsTimeseriesMetric + """ + super().__init__(kwargs) + + + self_.cost = cost + self_.hours = hours diff --git a/datadog_api_client/v2/model/commitments_list_item.py b/datadog_api_client/v2/model/commitments_list_item.py new file mode 100644 index 0000000000..c9a59c3898 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_list_item.py @@ -0,0 +1,122 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitmentsListItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A commitment item, which varies based on the provider, product, and commitment type. + + :param availability_zone: The availability zone of the reservation. + :type availability_zone: str, optional + + :param commitment_id: The unique identifier of the Reserved Instance. + :type commitment_id: str + + :param expiration_date: The expiration date of the commitment. + :type expiration_date: str, optional + + :param instance_type: The EC2 instance type. + :type instance_type: str + + :param number_of_nfus: The number of Normalized Capacity Units. + :type number_of_nfus: float, optional + + :param number_of_reservations: The number of reserved instances. + :type number_of_reservations: float, optional + + :param offering_class: The offering class of the Reserved Instance. + :type offering_class: str + + :param operating_system: The operating system of the Reserved Instance. + :type operating_system: str + + :param purchase_option: The payment option for the Reserved Instance. + :type purchase_option: str + + :param region: The AWS region of the Reserved Instance. + :type region: str + + :param start_date: The start date of the commitment. + :type start_date: str, optional + + :param term_length: The term length in years. + :type term_length: float, optional + + :param utilization: The utilization percentage of the commitment. + :type utilization: float, optional + + :param database_engine: The database engine of the Reserved Instance. + :type database_engine: str + + :param is_multi_az: Whether the Reserved Instance is Multi-AZ. + :type is_multi_az: bool, optional + + :param cache_engine: The cache engine type of the Reserved Instance. + :type cache_engine: str + + :param committed_spend_per_hour: The hourly committed spend for the Savings Plan. + :type committed_spend_per_hour: float, optional + + :param savings_plan_type: The Savings Plan type. + :type savings_plan_type: str + + :param benefit_name: The display name of the Azure reservation. + :type benefit_name: str + + :param meter_sub_category: The Azure meter sub-category for the reservation. + :type meter_sub_category: str + + :param status: Status of an Azure VM Reserved Instance. + :type status: CommitmentsAzureVMRIStatus + """ + 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.commitments_aws_ec2_ri_commitment import CommitmentsAwsEC2RICommitment + from datadog_api_client.v2.model.commitments_aws_rdsri_commitment import CommitmentsAwsRDSRICommitment + from datadog_api_client.v2.model.commitments_aws_elasticache_ri_commitment import CommitmentsAwsElasticacheRICommitment + from datadog_api_client.v2.model.commitments_aws_sp_commitment import CommitmentsAwsSPCommitment + from datadog_api_client.v2.model.commitments_azure_vmri_commitment import CommitmentsAzureVMRICommitment + from datadog_api_client.v2.model.commitments_azure_compute_sp_commitment import CommitmentsAzureComputeSPCommitment + return { + "oneOf": [ + CommitmentsAwsEC2RICommitment, + CommitmentsAwsRDSRICommitment, + CommitmentsAwsElasticacheRICommitment, + CommitmentsAwsSPCommitment, + CommitmentsAzureVMRICommitment, + CommitmentsAzureComputeSPCommitment, + ], + } diff --git a/datadog_api_client/v2/model/commitments_list_meta.py b/datadog_api_client/v2/model/commitments_list_meta.py new file mode 100644 index 0000000000..d4e33ad682 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_list_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_unit import CommitmentsUnit + +class CommitmentsListMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_unit import CommitmentsUnit + return { + "committed_spend_unit": (CommitmentsUnit,), + } + attribute_map = { + "committed_spend_unit": "committed_spend_unit", + } + + def __init__(self_, committed_spend_unit: Union[CommitmentsUnit, UnsetType]=unset, **kwargs): + """ + Metadata for a commitments list response. + + :param committed_spend_unit: Unit metadata for a numeric metric. + :type committed_spend_unit: CommitmentsUnit, optional + """ + if committed_spend_unit is not unset: + kwargs["committed_spend_unit"] = committed_spend_unit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/commitments_list_response.py b/datadog_api_client/v2/model/commitments_list_response.py new file mode 100644 index 0000000000..2ce97fd0aa --- /dev/null +++ b/datadog_api_client/v2/model/commitments_list_response.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_list_item import CommitmentsListItem + from datadog_api_client.v2.model.commitments_list_meta import CommitmentsListMeta + from datadog_api_client.v2.model.commitments_aws_ec2_ri_commitment import CommitmentsAwsEC2RICommitment + from datadog_api_client.v2.model.commitments_aws_rdsri_commitment import CommitmentsAwsRDSRICommitment + from datadog_api_client.v2.model.commitments_aws_elasticache_ri_commitment import CommitmentsAwsElasticacheRICommitment + from datadog_api_client.v2.model.commitments_aws_sp_commitment import CommitmentsAwsSPCommitment + from datadog_api_client.v2.model.commitments_azure_vmri_commitment import CommitmentsAzureVMRICommitment + from datadog_api_client.v2.model.commitments_azure_compute_sp_commitment import CommitmentsAzureComputeSPCommitment + +class CommitmentsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_list_item import CommitmentsListItem + from datadog_api_client.v2.model.commitments_list_meta import CommitmentsListMeta + return { + "commitments": ([CommitmentsListItem],), + "meta": (CommitmentsListMeta,), + } + attribute_map = { + "commitments": "commitments", + "meta": "meta", + } + + def __init__(self_, commitments: List[Union[CommitmentsListItem, CommitmentsAwsEC2RICommitment, CommitmentsAwsRDSRICommitment, CommitmentsAwsElasticacheRICommitment, CommitmentsAwsSPCommitment, CommitmentsAzureVMRICommitment, CommitmentsAzureComputeSPCommitment]], meta: Union[CommitmentsListMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of cloud commitment details. + + :param commitments: Array of commitment items. + :type commitments: [CommitmentsListItem] + + :param meta: Metadata for a commitments list response. + :type meta: CommitmentsListMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.commitments = commitments diff --git a/datadog_api_client/v2/model/commitments_on_demand_hotspots_scalar_meta.py b/datadog_api_client/v2/model/commitments_on_demand_hotspots_scalar_meta.py new file mode 100644 index 0000000000..8cbbbcdfb9 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_on_demand_hotspots_scalar_meta.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitmentsOnDemandHotspotsScalarMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "on_demand_filters": (str,), + } + attribute_map = { + "on_demand_filters": "on_demand_filters", + } + + def __init__(self_, on_demand_filters: str, **kwargs): + """ + Metadata for the on-demand hot-spots scalar response. + + :param on_demand_filters: Active on-demand filters applied to the response. + :type on_demand_filters: str + """ + super().__init__(kwargs) + + + self_.on_demand_filters = on_demand_filters diff --git a/datadog_api_client/v2/model/commitments_on_demand_hotspots_scalar_response.py b/datadog_api_client/v2/model/commitments_on_demand_hotspots_scalar_response.py new file mode 100644 index 0000000000..847d9bbe75 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_on_demand_hotspots_scalar_response.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_scalar_column import CommitmentsScalarColumn + from datadog_api_client.v2.model.commitments_on_demand_hotspots_scalar_meta import CommitmentsOnDemandHotspotsScalarMeta + +class CommitmentsOnDemandHotspotsScalarResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_scalar_column import CommitmentsScalarColumn + from datadog_api_client.v2.model.commitments_on_demand_hotspots_scalar_meta import CommitmentsOnDemandHotspotsScalarMeta + return { + "columns": ([CommitmentsScalarColumn],), + "meta": (CommitmentsOnDemandHotspotsScalarMeta,), + "total": ([CommitmentsScalarColumn],), + } + attribute_map = { + "columns": "columns", + "meta": "meta", + "total": "total", + } + + def __init__(self_, columns: List[CommitmentsScalarColumn], total: List[CommitmentsScalarColumn], meta: Union[CommitmentsOnDemandHotspotsScalarMeta, UnsetType]=unset, **kwargs): + """ + Response containing scalar on-demand hot-spots data for cloud commitment programs. + + :param columns: Array of scalar columns in the response. + :type columns: [CommitmentsScalarColumn] + + :param meta: Metadata for the on-demand hot-spots scalar response. + :type meta: CommitmentsOnDemandHotspotsScalarMeta, optional + + :param total: Array of scalar columns in the response. + :type total: [CommitmentsScalarColumn] + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.columns = columns + self_.total = total diff --git a/datadog_api_client/v2/model/commitments_provider.py b/datadog_api_client/v2/model/commitments_provider.py new file mode 100644 index 0000000000..0815afbb13 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_provider.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CommitmentsProvider(ModelSimple): + """ + Cloud provider for commitment programs. + + :param value: Must be one of ["aws", "azure"]. + :type value: str + """ + + allowed_values = { + "aws", + "azure", + } + AWS: ClassVar["CommitmentsProvider"] + AZURE: ClassVar["CommitmentsProvider"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CommitmentsProvider.AWS = CommitmentsProvider("aws") +CommitmentsProvider.AZURE = CommitmentsProvider("azure") diff --git a/datadog_api_client/v2/model/commitments_savings_scalar_response.py b/datadog_api_client/v2/model/commitments_savings_scalar_response.py new file mode 100644 index 0000000000..43a784d5e4 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_savings_scalar_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_scalar_column import CommitmentsScalarColumn + +class CommitmentsSavingsScalarResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_scalar_column import CommitmentsScalarColumn + return { + "columns": ([CommitmentsScalarColumn],), + } + attribute_map = { + "columns": "columns", + } + + def __init__(self_, columns: List[CommitmentsScalarColumn], **kwargs): + """ + Response containing scalar savings metrics for cloud commitment programs. + + :param columns: Array of scalar columns in the response. + :type columns: [CommitmentsScalarColumn] + """ + super().__init__(kwargs) + + + self_.columns = columns diff --git a/datadog_api_client/v2/model/commitments_savings_timeseries_response.py b/datadog_api_client/v2/model/commitments_savings_timeseries_response.py new file mode 100644 index 0000000000..8fe8f74274 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_savings_timeseries_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_timeseries_metric import CommitmentsTimeseriesMetric + +class CommitmentsSavingsTimeseriesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_timeseries_metric import CommitmentsTimeseriesMetric + return { + "actual_cost": (CommitmentsTimeseriesMetric,), + "effective_savings_rate": (CommitmentsTimeseriesMetric,), + "on_demand_equivalent_cost": (CommitmentsTimeseriesMetric,), + "realized_savings": (CommitmentsTimeseriesMetric,), + } + attribute_map = { + "actual_cost": "actual_cost", + "effective_savings_rate": "effective_savings_rate", + "on_demand_equivalent_cost": "on_demand_equivalent_cost", + "realized_savings": "realized_savings", + } + + def __init__(self_, actual_cost: CommitmentsTimeseriesMetric, effective_savings_rate: CommitmentsTimeseriesMetric, on_demand_equivalent_cost: CommitmentsTimeseriesMetric, realized_savings: CommitmentsTimeseriesMetric, **kwargs): + """ + Response containing timeseries savings metrics for cloud commitment programs. + + :param actual_cost: A timeseries metric containing timestamps, series values, and optional unit metadata. + :type actual_cost: CommitmentsTimeseriesMetric + + :param effective_savings_rate: A timeseries metric containing timestamps, series values, and optional unit metadata. + :type effective_savings_rate: CommitmentsTimeseriesMetric + + :param on_demand_equivalent_cost: A timeseries metric containing timestamps, series values, and optional unit metadata. + :type on_demand_equivalent_cost: CommitmentsTimeseriesMetric + + :param realized_savings: A timeseries metric containing timestamps, series values, and optional unit metadata. + :type realized_savings: CommitmentsTimeseriesMetric + """ + super().__init__(kwargs) + + + self_.actual_cost = actual_cost + self_.effective_savings_rate = effective_savings_rate + self_.on_demand_equivalent_cost = on_demand_equivalent_cost + self_.realized_savings = realized_savings diff --git a/datadog_api_client/v2/model/commitments_scalar_column.py b/datadog_api_client/v2/model/commitments_scalar_column.py new file mode 100644 index 0000000000..442d00d6b8 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_scalar_column.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_scalar_column_meta import CommitmentsScalarColumnMeta + from datadog_api_client.v2.model.commitments_scalar_column_type import CommitmentsScalarColumnType + +class CommitmentsScalarColumn(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_scalar_column_meta import CommitmentsScalarColumnMeta + from datadog_api_client.v2.model.commitments_scalar_column_type import CommitmentsScalarColumnType + return { + "meta": (CommitmentsScalarColumnMeta,), + "name": (str,), + "type": (CommitmentsScalarColumnType,), + "values": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + } + attribute_map = { + "meta": "meta", + "name": "name", + "type": "type", + "values": "values", + } + + def __init__(self_, name: str, type: CommitmentsScalarColumnType, values: List[Any], meta: Union[CommitmentsScalarColumnMeta, UnsetType]=unset, **kwargs): + """ + A column in a scalar response. When type is "group", values contains arrays of strings. When type is "number", values contains numeric values. + + :param meta: Metadata for a scalar column, including unit information. + :type meta: CommitmentsScalarColumnMeta, optional + + :param name: The column name. + :type name: str + + :param type: The column type. "group" for dimension columns, "number" for metric columns. + :type type: CommitmentsScalarColumnType + + :param values: Values for a scalar column. Arrays of strings for group columns, numbers for value columns. + :type values: [bool, date, datetime, dict, float, int, list, str, UUID, none_type] + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.name = name + self_.type = type + self_.values = values diff --git a/datadog_api_client/v2/model/commitments_scalar_column_meta.py b/datadog_api_client/v2/model/commitments_scalar_column_meta.py new file mode 100644 index 0000000000..bc9d6251ab --- /dev/null +++ b/datadog_api_client/v2/model/commitments_scalar_column_meta.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_unit import CommitmentsUnit + +class CommitmentsScalarColumnMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_unit import CommitmentsUnit + return { + "unit": (CommitmentsUnit,), + } + attribute_map = { + "unit": "unit", + } + + def __init__(self_, unit: CommitmentsUnit, **kwargs): + """ + Metadata for a scalar column, including unit information. + + :param unit: Unit metadata for a numeric metric. + :type unit: CommitmentsUnit + """ + super().__init__(kwargs) + + + self_.unit = unit diff --git a/datadog_api_client/v2/model/commitments_scalar_column_type.py b/datadog_api_client/v2/model/commitments_scalar_column_type.py new file mode 100644 index 0000000000..29068139e7 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_scalar_column_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CommitmentsScalarColumnType(ModelSimple): + """ + The column type. "group" for dimension columns, "number" for metric columns. + + :param value: Must be one of ["group", "number"]. + :type value: str + """ + + allowed_values = { + "group", + "number", + } + GROUP: ClassVar["CommitmentsScalarColumnType"] + NUMBER: ClassVar["CommitmentsScalarColumnType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CommitmentsScalarColumnType.GROUP = CommitmentsScalarColumnType("group") +CommitmentsScalarColumnType.NUMBER = CommitmentsScalarColumnType("number") diff --git a/datadog_api_client/v2/model/commitments_timeseries_metric.py b/datadog_api_client/v2/model/commitments_timeseries_metric.py new file mode 100644 index 0000000000..0b6555e5aa --- /dev/null +++ b/datadog_api_client/v2/model/commitments_timeseries_metric.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_timeseries_series import CommitmentsTimeseriesSeries + from datadog_api_client.v2.model.commitments_unit import CommitmentsUnit + +class CommitmentsTimeseriesMetric(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_timeseries_series import CommitmentsTimeseriesSeries + from datadog_api_client.v2.model.commitments_unit import CommitmentsUnit + return { + "series": (CommitmentsTimeseriesSeries,), + "times": ([int],), + "unit": (CommitmentsUnit,), + } + attribute_map = { + "series": "series", + "times": "times", + "unit": "unit", + } + + def __init__(self_, series: CommitmentsTimeseriesSeries, times: List[int], unit: Union[CommitmentsUnit, UnsetType]=unset, **kwargs): + """ + A timeseries metric containing timestamps, series values, and optional unit metadata. + + :param series: Timeseries data as a map of series names to their corresponding value arrays. + :type series: CommitmentsTimeseriesSeries + + :param times: Unix timestamps in seconds for the timeseries data points. + :type times: [int] + + :param unit: Unit metadata for a numeric metric. + :type unit: CommitmentsUnit, optional + """ + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + + self_.series = series + self_.times = times diff --git a/datadog_api_client/v2/model/commitments_timeseries_series.py b/datadog_api_client/v2/model/commitments_timeseries_series.py new file mode 100644 index 0000000000..35cc5a3400 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_timeseries_series.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_timeseries_values import CommitmentsTimeseriesValues + +class CommitmentsTimeseriesSeries(ModelNormal): + @cached_property + def additional_properties_type(_): + from datadog_api_client.v2.model.commitments_timeseries_values import CommitmentsTimeseriesValues + return ([float],) + + def __init__(self_, **kwargs): + """ + Timeseries data as a map of series names to their corresponding value arrays. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/commitments_unit.py b/datadog_api_client/v2/model/commitments_unit.py new file mode 100644 index 0000000000..eeb8cc8579 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_unit.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitmentsUnit(ModelNormal): + @cached_property + def openapi_types(_): + return { + "family": (str,), + "id": (int,), + "name": (str,), + "plural": (str,), + "scale_factor": (float,), + "short_name": (str,), + } + attribute_map = { + "family": "family", + "id": "id", + "name": "name", + "plural": "plural", + "scale_factor": "scale_factor", + "short_name": "short_name", + } + + def __init__(self_, family: str, id: int, name: str, plural: str, scale_factor: float, short_name: str, **kwargs): + """ + Unit metadata for a numeric metric. + + :param family: The unit family (for example, percentage or money). + :type family: str + + :param id: The unit identifier. + :type id: int + + :param name: The unit name (for example, percent or dollar). + :type name: str + + :param plural: The plural form of the unit name. + :type plural: str + + :param scale_factor: The scale factor for the unit. + :type scale_factor: float + + :param short_name: The abbreviated unit name (for example, % or $). + :type short_name: str + """ + super().__init__(kwargs) + + + self_.family = family + self_.id = id + self_.name = name + self_.plural = plural + self_.scale_factor = scale_factor + self_.short_name = short_name diff --git a/datadog_api_client/v2/model/commitments_utilization_scalar_product_breakdown_entry.py b/datadog_api_client/v2/model/commitments_utilization_scalar_product_breakdown_entry.py new file mode 100644 index 0000000000..f1a85f71d5 --- /dev/null +++ b/datadog_api_client/v2/model/commitments_utilization_scalar_product_breakdown_entry.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CommitmentsUtilizationScalarProductBreakdownEntry(ModelNormal): + @cached_property + def openapi_types(_): + return { + "product": (str,), + "utilization": (float,), + } + attribute_map = { + "product": "product", + "utilization": "utilization", + } + + def __init__(self_, product: str, utilization: float, **kwargs): + """ + Per-product utilization data in a scalar utilization response. + + :param product: The cloud product name. + :type product: str + + :param utilization: The utilization percentage for the product. + :type utilization: float + """ + super().__init__(kwargs) + + + self_.product = product + self_.utilization = utilization diff --git a/datadog_api_client/v2/model/commitments_utilization_scalar_response.py b/datadog_api_client/v2/model/commitments_utilization_scalar_response.py new file mode 100644 index 0000000000..5064bb84ea --- /dev/null +++ b/datadog_api_client/v2/model/commitments_utilization_scalar_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_scalar_column import CommitmentsScalarColumn + from datadog_api_client.v2.model.commitments_utilization_scalar_product_breakdown_entry import CommitmentsUtilizationScalarProductBreakdownEntry + +class CommitmentsUtilizationScalarResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_scalar_column import CommitmentsScalarColumn + from datadog_api_client.v2.model.commitments_utilization_scalar_product_breakdown_entry import CommitmentsUtilizationScalarProductBreakdownEntry + return { + "columns": ([CommitmentsScalarColumn],), + "product_breakdown": ([CommitmentsUtilizationScalarProductBreakdownEntry],), + } + attribute_map = { + "columns": "columns", + "product_breakdown": "product_breakdown", + } + + def __init__(self_, columns: List[CommitmentsScalarColumn], product_breakdown: Union[List[CommitmentsUtilizationScalarProductBreakdownEntry], UnsetType]=unset, **kwargs): + """ + Response containing scalar utilization metrics for cloud commitment programs. + + :param columns: Array of scalar columns in the response. + :type columns: [CommitmentsScalarColumn] + + :param product_breakdown: Array of per-product utilization breakdown entries. + :type product_breakdown: [CommitmentsUtilizationScalarProductBreakdownEntry], optional + """ + if product_breakdown is not unset: + kwargs["product_breakdown"] = product_breakdown + super().__init__(kwargs) + + + self_.columns = columns diff --git a/datadog_api_client/v2/model/commitments_utilization_timeseries_response.py b/datadog_api_client/v2/model/commitments_utilization_timeseries_response.py new file mode 100644 index 0000000000..1fdd0bae0c --- /dev/null +++ b/datadog_api_client/v2/model/commitments_utilization_timeseries_response.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.commitments_timeseries_series import CommitmentsTimeseriesSeries + from datadog_api_client.v2.model.commitments_unit import CommitmentsUnit + +class CommitmentsUtilizationTimeseriesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.commitments_timeseries_series import CommitmentsTimeseriesSeries + from datadog_api_client.v2.model.commitments_unit import CommitmentsUnit + return { + "series": (CommitmentsTimeseriesSeries,), + "times": ([int],), + "unit": (CommitmentsUnit,), + } + attribute_map = { + "series": "series", + "times": "times", + "unit": "unit", + } + + def __init__(self_, series: CommitmentsTimeseriesSeries, times: List[int], unit: Union[CommitmentsUnit, UnsetType]=unset, **kwargs): + """ + Response containing timeseries utilization metrics for cloud commitment programs. + + :param series: Timeseries data as a map of series names to their corresponding value arrays. + :type series: CommitmentsTimeseriesSeries + + :param times: Unix timestamps in seconds for the timeseries data points. + :type times: [int] + + :param unit: Unit metadata for a numeric metric. + :type unit: CommitmentsUnit, optional + """ + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + + self_.series = series + self_.times = times diff --git a/datadog_api_client/v2/model/completion_condition.py b/datadog_api_client/v2/model/completion_condition.py new file mode 100644 index 0000000000..f6e5a8f94e --- /dev/null +++ b/datadog_api_client/v2/model/completion_condition.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.completion_condition_operator import CompletionConditionOperator + +class CompletionCondition(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.completion_condition_operator import CompletionConditionOperator + return { + "operand1": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "operand2": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "operator": (CompletionConditionOperator,), + } + attribute_map = { + "operand1": "operand1", + "operand2": "operand2", + "operator": "operator", + } + + def __init__(self_, operand1: Any, operator: CompletionConditionOperator, operand2: Union[Any, UnsetType]=unset, **kwargs): + """ + The definition of ``CompletionCondition`` object. + + :param operand1: The ``CompletionCondition`` ``operand1``. + :type operand1: bool, date, datetime, dict, float, int, list, str, UUID, none_type + + :param operand2: The ``CompletionCondition`` ``operand2``. + :type operand2: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param operator: The definition of ``CompletionConditionOperator`` object. + :type operator: CompletionConditionOperator + """ + if operand2 is not unset: + kwargs["operand2"] = operand2 + super().__init__(kwargs) + + + self_.operand1 = operand1 + self_.operator = operator diff --git a/datadog_api_client/v2/model/completion_condition_operator.py b/datadog_api_client/v2/model/completion_condition_operator.py new file mode 100644 index 0000000000..38fa0cfa16 --- /dev/null +++ b/datadog_api_client/v2/model/completion_condition_operator.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CompletionConditionOperator(ModelSimple): + """ + The definition of `CompletionConditionOperator` object. + + :param value: Must be one of ["OPERATOR_EQUAL", "OPERATOR_NOT_EQUAL", "OPERATOR_GREATER_THAN", "OPERATOR_LESS_THAN", "OPERATOR_GREATER_THAN_OR_EQUAL_TO", "OPERATOR_LESS_THAN_OR_EQUAL_TO", "OPERATOR_CONTAINS", "OPERATOR_DOES_NOT_CONTAIN", "OPERATOR_IS_NULL", "OPERATOR_IS_NOT_NULL", "OPERATOR_IS_EMPTY", "OPERATOR_IS_NOT_EMPTY"]. + :type value: str + """ + + allowed_values = { + "OPERATOR_EQUAL", + "OPERATOR_NOT_EQUAL", + "OPERATOR_GREATER_THAN", + "OPERATOR_LESS_THAN", + "OPERATOR_GREATER_THAN_OR_EQUAL_TO", + "OPERATOR_LESS_THAN_OR_EQUAL_TO", + "OPERATOR_CONTAINS", + "OPERATOR_DOES_NOT_CONTAIN", + "OPERATOR_IS_NULL", + "OPERATOR_IS_NOT_NULL", + "OPERATOR_IS_EMPTY", + "OPERATOR_IS_NOT_EMPTY", + } + OPERATOR_EQUAL: ClassVar["CompletionConditionOperator"] + OPERATOR_NOT_EQUAL: ClassVar["CompletionConditionOperator"] + OPERATOR_GREATER_THAN: ClassVar["CompletionConditionOperator"] + OPERATOR_LESS_THAN: ClassVar["CompletionConditionOperator"] + OPERATOR_GREATER_THAN_OR_EQUAL_TO: ClassVar["CompletionConditionOperator"] + OPERATOR_LESS_THAN_OR_EQUAL_TO: ClassVar["CompletionConditionOperator"] + OPERATOR_CONTAINS: ClassVar["CompletionConditionOperator"] + OPERATOR_DOES_NOT_CONTAIN: ClassVar["CompletionConditionOperator"] + OPERATOR_IS_NULL: ClassVar["CompletionConditionOperator"] + OPERATOR_IS_NOT_NULL: ClassVar["CompletionConditionOperator"] + OPERATOR_IS_EMPTY: ClassVar["CompletionConditionOperator"] + OPERATOR_IS_NOT_EMPTY: ClassVar["CompletionConditionOperator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CompletionConditionOperator.OPERATOR_EQUAL = CompletionConditionOperator("OPERATOR_EQUAL") +CompletionConditionOperator.OPERATOR_NOT_EQUAL = CompletionConditionOperator("OPERATOR_NOT_EQUAL") +CompletionConditionOperator.OPERATOR_GREATER_THAN = CompletionConditionOperator("OPERATOR_GREATER_THAN") +CompletionConditionOperator.OPERATOR_LESS_THAN = CompletionConditionOperator("OPERATOR_LESS_THAN") +CompletionConditionOperator.OPERATOR_GREATER_THAN_OR_EQUAL_TO = CompletionConditionOperator("OPERATOR_GREATER_THAN_OR_EQUAL_TO") +CompletionConditionOperator.OPERATOR_LESS_THAN_OR_EQUAL_TO = CompletionConditionOperator("OPERATOR_LESS_THAN_OR_EQUAL_TO") +CompletionConditionOperator.OPERATOR_CONTAINS = CompletionConditionOperator("OPERATOR_CONTAINS") +CompletionConditionOperator.OPERATOR_DOES_NOT_CONTAIN = CompletionConditionOperator("OPERATOR_DOES_NOT_CONTAIN") +CompletionConditionOperator.OPERATOR_IS_NULL = CompletionConditionOperator("OPERATOR_IS_NULL") +CompletionConditionOperator.OPERATOR_IS_NOT_NULL = CompletionConditionOperator("OPERATOR_IS_NOT_NULL") +CompletionConditionOperator.OPERATOR_IS_EMPTY = CompletionConditionOperator("OPERATOR_IS_EMPTY") +CompletionConditionOperator.OPERATOR_IS_NOT_EMPTY = CompletionConditionOperator("OPERATOR_IS_NOT_EMPTY") diff --git a/datadog_api_client/v2/model/completion_gate.py b/datadog_api_client/v2/model/completion_gate.py new file mode 100644 index 0000000000..84ef04df34 --- /dev/null +++ b/datadog_api_client/v2/model/completion_gate.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.completion_condition import CompletionCondition + from datadog_api_client.v2.model.retry_strategy import RetryStrategy + +class CompletionGate(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.completion_condition import CompletionCondition + from datadog_api_client.v2.model.retry_strategy import RetryStrategy + return { + "completion_condition": (CompletionCondition,), + "retry_strategy": (RetryStrategy,), + } + attribute_map = { + "completion_condition": "completionCondition", + "retry_strategy": "retryStrategy", + } + + def __init__(self_, completion_condition: CompletionCondition, retry_strategy: RetryStrategy, **kwargs): + """ + Used to create conditions before running subsequent actions. + + :param completion_condition: The definition of ``CompletionCondition`` object. + :type completion_condition: CompletionCondition + + :param retry_strategy: The definition of ``RetryStrategy`` object. + :type retry_strategy: RetryStrategy + """ + super().__init__(kwargs) + + + self_.completion_condition = completion_condition + self_.retry_strategy = retry_strategy diff --git a/datadog_api_client/v2/model/component.py b/datadog_api_client/v2/model/component.py new file mode 100644 index 0000000000..4e3eedaaac --- /dev/null +++ b/datadog_api_client/v2/model/component.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_builder_event import AppBuilderEvent + from datadog_api_client.v2.model.component_properties import ComponentProperties + from datadog_api_client.v2.model.component_type import ComponentType + +class Component(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_builder_event import AppBuilderEvent + from datadog_api_client.v2.model.component_properties import ComponentProperties + from datadog_api_client.v2.model.component_type import ComponentType + return { + "events": ([AppBuilderEvent],), + "id": (str, none_type), + "name": (str,), + "properties": (ComponentProperties,), + "type": (ComponentType,), + } + attribute_map = { + "events": "events", + "id": "id", + "name": "name", + "properties": "properties", + "type": "type", + } + + def __init__(self_, name: str, properties: ComponentProperties, type: ComponentType, events: Union[List[AppBuilderEvent], UnsetType]=unset, id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + `Definition of a UI component in the app `_ + + :param events: Events to listen for on the UI component. + :type events: [AppBuilderEvent], optional + + :param id: The ID of the UI component. This property is deprecated; use ``name`` to identify individual components instead. + :type id: str, none_type, optional + + :param name: A unique identifier for this UI component. This name is also visible in the app editor. + :type name: str + + :param properties: Properties of a UI component. Different component types can have their own additional unique properties. See the `components documentation `_ for more detail on each component type and its properties. + :type properties: ComponentProperties + + :param type: The UI component type. + :type type: ComponentType + """ + if events is not unset: + kwargs["events"] = events + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.name = name + self_.properties = properties + self_.type = type diff --git a/datadog_api_client/v2/model/component_grid.py b/datadog_api_client/v2/model/component_grid.py new file mode 100644 index 0000000000..454c8f9d0c --- /dev/null +++ b/datadog_api_client/v2/model/component_grid.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_builder_event import AppBuilderEvent + from datadog_api_client.v2.model.component_grid_properties import ComponentGridProperties + from datadog_api_client.v2.model.component_grid_type import ComponentGridType + +class ComponentGrid(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_builder_event import AppBuilderEvent + from datadog_api_client.v2.model.component_grid_properties import ComponentGridProperties + from datadog_api_client.v2.model.component_grid_type import ComponentGridType + return { + "events": ([AppBuilderEvent],), + "id": (str,), + "name": (str,), + "properties": (ComponentGridProperties,), + "type": (ComponentGridType,), + } + attribute_map = { + "events": "events", + "id": "id", + "name": "name", + "properties": "properties", + "type": "type", + } + + def __init__(self_, name: str, properties: ComponentGridProperties, type: ComponentGridType, events: Union[List[AppBuilderEvent], UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + A grid component. The grid component is the root canvas for an app and contains all other components. + + :param events: Events to listen for on the grid component. + :type events: [AppBuilderEvent], optional + + :param id: The ID of the grid component. This property is deprecated; use ``name`` to identify individual components instead. + :type id: str, optional + + :param name: A unique identifier for this grid component. This name is also visible in the app editor. + :type name: str + + :param properties: Properties of a grid component. + :type properties: ComponentGridProperties + + :param type: The grid component type. + :type type: ComponentGridType + """ + if events is not unset: + kwargs["events"] = events + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.name = name + self_.properties = properties + self_.type = type diff --git a/datadog_api_client/v2/model/component_grid_properties.py b/datadog_api_client/v2/model/component_grid_properties.py new file mode 100644 index 0000000000..a0f49770e1 --- /dev/null +++ b/datadog_api_client/v2/model/component_grid_properties.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.component import Component + from datadog_api_client.v2.model.component_grid_properties_is_visible import ComponentGridPropertiesIsVisible + +class ComponentGridProperties(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.component import Component + from datadog_api_client.v2.model.component_grid_properties_is_visible import ComponentGridPropertiesIsVisible + return { + "background_color": (str,), + "children": ([Component],), + "is_visible": (ComponentGridPropertiesIsVisible,), + } + attribute_map = { + "background_color": "backgroundColor", + "children": "children", + "is_visible": "isVisible", + } + + def __init__(self_, background_color: Union[str, UnsetType]=unset, children: Union[List[Component], UnsetType]=unset, is_visible: Union[ComponentGridPropertiesIsVisible, str, bool, UnsetType]=unset, **kwargs): + """ + Properties of a grid component. + + :param background_color: The background color of the grid. + :type background_color: str, optional + + :param children: The child components of the grid. + :type children: [Component], optional + + :param is_visible: Whether the grid component and its children are visible. If a string, it must be a valid JavaScript expression that evaluates to a boolean. + :type is_visible: ComponentGridPropertiesIsVisible, optional + """ + if background_color is not unset: + kwargs["background_color"] = background_color + if children is not unset: + kwargs["children"] = children + if is_visible is not unset: + kwargs["is_visible"] = is_visible + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/component_grid_properties_is_visible.py b/datadog_api_client/v2/model/component_grid_properties_is_visible.py new file mode 100644 index 0000000000..96fc4a9ae6 --- /dev/null +++ b/datadog_api_client/v2/model/component_grid_properties_is_visible.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ComponentGridPropertiesIsVisible(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Whether the grid component and its children are visible. If a string, it must be a valid JavaScript expression that evaluates to a boolean. + """ + 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 + return { + "oneOf": [ + str, + bool, + ], + } diff --git a/datadog_api_client/v2/model/component_grid_type.py b/datadog_api_client/v2/model/component_grid_type.py new file mode 100644 index 0000000000..3818d0b590 --- /dev/null +++ b/datadog_api_client/v2/model/component_grid_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ComponentGridType(ModelSimple): + """ + The grid component type. + + :param value: If omitted defaults to "grid". Must be one of ["grid"]. + :type value: str + """ + + allowed_values = { + "grid", + } + GRID: ClassVar["ComponentGridType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ComponentGridType.GRID = ComponentGridType("grid") diff --git a/datadog_api_client/v2/model/component_properties.py b/datadog_api_client/v2/model/component_properties.py new file mode 100644 index 0000000000..7d58acda5e --- /dev/null +++ b/datadog_api_client/v2/model/component_properties.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.component import Component + from datadog_api_client.v2.model.component_properties_is_visible import ComponentPropertiesIsVisible + +class ComponentProperties(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.component import Component + from datadog_api_client.v2.model.component_properties_is_visible import ComponentPropertiesIsVisible + return { + "children": ([Component],), + "is_visible": (ComponentPropertiesIsVisible,), + } + attribute_map = { + "children": "children", + "is_visible": "isVisible", + } + + def __init__(self_, children: Union[List[Component], UnsetType]=unset, is_visible: Union[ComponentPropertiesIsVisible, bool, str, UnsetType]=unset, **kwargs): + """ + Properties of a UI component. Different component types can have their own additional unique properties. See the `components documentation `_ for more detail on each component type and its properties. + + :param children: The child components of the UI component. + :type children: [Component], optional + + :param is_visible: Whether the UI component is visible. If this is a string, it must be a valid JavaScript expression that evaluates to a boolean. + :type is_visible: ComponentPropertiesIsVisible, optional + """ + if children is not unset: + kwargs["children"] = children + if is_visible is not unset: + kwargs["is_visible"] = is_visible + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/component_properties_is_visible.py b/datadog_api_client/v2/model/component_properties_is_visible.py new file mode 100644 index 0000000000..7b6aaa38c3 --- /dev/null +++ b/datadog_api_client/v2/model/component_properties_is_visible.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ComponentPropertiesIsVisible(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Whether the UI component is visible. If this is a string, it must be a valid JavaScript expression that evaluates to a boolean. + """ + 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 + return { + "oneOf": [ + bool, + str, + ], + } diff --git a/datadog_api_client/v2/model/component_recommendation.py b/datadog_api_client/v2/model/component_recommendation.py new file mode 100644 index 0000000000..d95cd6aaa4 --- /dev/null +++ b/datadog_api_client/v2/model/component_recommendation.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.estimation import Estimation + +class ComponentRecommendation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.estimation import Estimation + return { + "estimation": (Estimation,), + } + attribute_map = { + "estimation": "estimation", + } + + def __init__(self_, estimation: Estimation, **kwargs): + """ + Resource recommendation for a single Spark component (driver or executor). Contains estimation data used to patch Spark job specs. + + :param estimation: Recommended resource values for a Spark driver or executor, derived from recent real usage metrics. Used by SPA to propose more efficient pod sizing. + :type estimation: Estimation + """ + super().__init__(kwargs) + + + self_.estimation = estimation diff --git a/datadog_api_client/v2/model/component_type.py b/datadog_api_client/v2/model/component_type.py new file mode 100644 index 0000000000..25a93cd978 --- /dev/null +++ b/datadog_api_client/v2/model/component_type.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ComponentType(ModelSimple): + """ + The UI component type. + + :param value: Must be one of ["table", "textInput", "textArea", "button", "text", "select", "modal", "schemaForm", "checkbox", "tabs", "vegaChart", "radioButtons", "numberInput", "fileInput", "jsonInput", "gridCell", "dateRangePicker", "search", "container", "calloutValue"]. + :type value: str + """ + + allowed_values = { + "table", + "textInput", + "textArea", + "button", + "text", + "select", + "modal", + "schemaForm", + "checkbox", + "tabs", + "vegaChart", + "radioButtons", + "numberInput", + "fileInput", + "jsonInput", + "gridCell", + "dateRangePicker", + "search", + "container", + "calloutValue", + } + TABLE: ClassVar["ComponentType"] + TEXTINPUT: ClassVar["ComponentType"] + TEXTAREA: ClassVar["ComponentType"] + BUTTON: ClassVar["ComponentType"] + TEXT: ClassVar["ComponentType"] + SELECT: ClassVar["ComponentType"] + MODAL: ClassVar["ComponentType"] + SCHEMAFORM: ClassVar["ComponentType"] + CHECKBOX: ClassVar["ComponentType"] + TABS: ClassVar["ComponentType"] + VEGACHART: ClassVar["ComponentType"] + RADIOBUTTONS: ClassVar["ComponentType"] + NUMBERINPUT: ClassVar["ComponentType"] + FILEINPUT: ClassVar["ComponentType"] + JSONINPUT: ClassVar["ComponentType"] + GRIDCELL: ClassVar["ComponentType"] + DATERANGEPICKER: ClassVar["ComponentType"] + SEARCH: ClassVar["ComponentType"] + CONTAINER: ClassVar["ComponentType"] + CALLOUTVALUE: ClassVar["ComponentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ComponentType.TABLE = ComponentType("table") +ComponentType.TEXTINPUT = ComponentType("textInput") +ComponentType.TEXTAREA = ComponentType("textArea") +ComponentType.BUTTON = ComponentType("button") +ComponentType.TEXT = ComponentType("text") +ComponentType.SELECT = ComponentType("select") +ComponentType.MODAL = ComponentType("modal") +ComponentType.SCHEMAFORM = ComponentType("schemaForm") +ComponentType.CHECKBOX = ComponentType("checkbox") +ComponentType.TABS = ComponentType("tabs") +ComponentType.VEGACHART = ComponentType("vegaChart") +ComponentType.RADIOBUTTONS = ComponentType("radioButtons") +ComponentType.NUMBERINPUT = ComponentType("numberInput") +ComponentType.FILEINPUT = ComponentType("fileInput") +ComponentType.JSONINPUT = ComponentType("jsonInput") +ComponentType.GRIDCELL = ComponentType("gridCell") +ComponentType.DATERANGEPICKER = ComponentType("dateRangePicker") +ComponentType.SEARCH = ComponentType("search") +ComponentType.CONTAINER = ComponentType("container") +ComponentType.CALLOUTVALUE = ComponentType("calloutValue") diff --git a/datadog_api_client/v2/model/condition.py b/datadog_api_client/v2/model/condition.py new file mode 100644 index 0000000000..8096724818 --- /dev/null +++ b/datadog_api_client/v2/model/condition.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.condition_operator import ConditionOperator + +class Condition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.condition_operator import ConditionOperator + return { + "attribute": (str,), + "created_at": (datetime,), + "id": (UUID,), + "operator": (ConditionOperator,), + "saved_filter_id": (UUID, none_type), + "updated_at": (datetime,), + "value": ([str],), + } + attribute_map = { + "attribute": "attribute", + "created_at": "created_at", + "id": "id", + "operator": "operator", + "saved_filter_id": "saved_filter_id", + "updated_at": "updated_at", + "value": "value", + } + + def __init__(self_, created_at: datetime, id: UUID, updated_at: datetime, attribute: Union[str, UnsetType]=unset, operator: Union[ConditionOperator, UnsetType]=unset, saved_filter_id: Union[UUID, none_type, UnsetType]=unset, value: Union[List[str], UnsetType]=unset, **kwargs): + """ + Targeting condition details. A condition is either an inline + predicate with ``operator`` , ``attribute`` , and ``value`` , or a reference to a + saved filter with ``saved_filter_id``. The inline fields are omitted for saved-filter + references. + + :param attribute: The user or request attribute to evaluate. Omitted for saved-filter references. + :type attribute: str, optional + + :param created_at: The timestamp when the condition was created. + :type created_at: datetime + + :param id: The unique identifier of the condition. + :type id: UUID + + :param operator: The operator used in a targeting condition. + :type operator: ConditionOperator, optional + + :param saved_filter_id: The ID of the saved filter referenced by this condition, or null for inline conditions. + :type saved_filter_id: UUID, none_type, optional + + :param updated_at: The timestamp when the condition was last updated. + :type updated_at: datetime + + :param value: Values used by the selected operator. Omitted for saved-filter references. + :type value: [str], optional + """ + if attribute is not unset: + kwargs["attribute"] = attribute + if operator is not unset: + kwargs["operator"] = operator + if saved_filter_id is not unset: + kwargs["saved_filter_id"] = saved_filter_id + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.created_at = created_at + self_.id = id + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/condition_operator.py b/datadog_api_client/v2/model/condition_operator.py new file mode 100644 index 0000000000..cc6caa8f93 --- /dev/null +++ b/datadog_api_client/v2/model/condition_operator.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ConditionOperator(ModelSimple): + """ + The operator used in a targeting condition. + + :param value: Must be one of ["LT", "LTE", "GT", "GTE", "MATCHES", "NOT_MATCHES", "ONE_OF", "NOT_ONE_OF", "IS_NULL", "EQUALS"]. + :type value: str + """ + + allowed_values = { + "LT", + "LTE", + "GT", + "GTE", + "MATCHES", + "NOT_MATCHES", + "ONE_OF", + "NOT_ONE_OF", + "IS_NULL", + "EQUALS", + } + LT: ClassVar["ConditionOperator"] + LTE: ClassVar["ConditionOperator"] + GT: ClassVar["ConditionOperator"] + GTE: ClassVar["ConditionOperator"] + MATCHES: ClassVar["ConditionOperator"] + NOT_MATCHES: ClassVar["ConditionOperator"] + ONE_OF: ClassVar["ConditionOperator"] + NOT_ONE_OF: ClassVar["ConditionOperator"] + IS_NULL: ClassVar["ConditionOperator"] + EQUALS: ClassVar["ConditionOperator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ConditionOperator.LT = ConditionOperator("LT") +ConditionOperator.LTE = ConditionOperator("LTE") +ConditionOperator.GT = ConditionOperator("GT") +ConditionOperator.GTE = ConditionOperator("GTE") +ConditionOperator.MATCHES = ConditionOperator("MATCHES") +ConditionOperator.NOT_MATCHES = ConditionOperator("NOT_MATCHES") +ConditionOperator.ONE_OF = ConditionOperator("ONE_OF") +ConditionOperator.NOT_ONE_OF = ConditionOperator("NOT_ONE_OF") +ConditionOperator.IS_NULL = ConditionOperator("IS_NULL") +ConditionOperator.EQUALS = ConditionOperator("EQUALS") diff --git a/datadog_api_client/v2/model/condition_request.py b/datadog_api_client/v2/model/condition_request.py new file mode 100644 index 0000000000..aea08dda03 --- /dev/null +++ b/datadog_api_client/v2/model/condition_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.condition_operator import ConditionOperator + +class ConditionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.condition_operator import ConditionOperator + return { + "attribute": (str,), + "operator": (ConditionOperator,), + "saved_filter_id": (UUID,), + "value": ([str],), + } + attribute_map = { + "attribute": "attribute", + "operator": "operator", + "saved_filter_id": "saved_filter_id", + "value": "value", + } + + def __init__(self_, attribute: Union[str, UnsetType]=unset, operator: Union[ConditionOperator, UnsetType]=unset, saved_filter_id: Union[UUID, UnsetType]=unset, value: Union[List[str], UnsetType]=unset, **kwargs): + """ + Condition request payload for targeting rules. A condition is either an inline + predicate with ``operator`` , ``attribute`` , and ``value`` , or a reference to a + saved filter with ``saved_filter_id``. The two shapes are mutually exclusive. + + :param attribute: The user or request attribute to evaluate. Required for inline conditions; omit when ``saved_filter_id`` is set. + :type attribute: str, optional + + :param operator: The operator used in a targeting condition. + :type operator: ConditionOperator, optional + + :param saved_filter_id: The ID of a saved filter to reference as this condition. Mutually exclusive + with ``operator`` , ``attribute`` , and ``value``. When set, the saved filter's + targeting rules are evaluated in place of an inline predicate. + :type saved_filter_id: UUID, optional + + :param value: Values used by the selected operator. Required for inline conditions; omit when ``saved_filter_id`` is set. + :type value: [str], optional + """ + if attribute is not unset: + kwargs["attribute"] = attribute + if operator is not unset: + kwargs["operator"] = operator + if saved_filter_id is not unset: + kwargs["saved_filter_id"] = saved_filter_id + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/config_cat_credentials.py b/datadog_api_client/v2/model/config_cat_credentials.py new file mode 100644 index 0000000000..c334a318e6 --- /dev/null +++ b/datadog_api_client/v2/model/config_cat_credentials.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ConfigCatCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``ConfigCatCredentials`` object. + + :param api_password: The `ConfigCatSDKKey` `api_password`. + :type api_password: str + + :param api_username: The `ConfigCatSDKKey` `api_username`. + :type api_username: str + + :param sdk_key: The `ConfigCatSDKKey` `sdk_key`. + :type sdk_key: str + + :param type: The definition of the `ConfigCatSDKKey` object. + :type type: ConfigCatSDKKeyType + """ + 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.config_cat_sdk_key import ConfigCatSDKKey + return { + "oneOf": [ + ConfigCatSDKKey, + ], + } diff --git a/datadog_api_client/v2/model/config_cat_credentials_update.py b/datadog_api_client/v2/model/config_cat_credentials_update.py new file mode 100644 index 0000000000..6f24df0248 --- /dev/null +++ b/datadog_api_client/v2/model/config_cat_credentials_update.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ConfigCatCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``ConfigCatCredentialsUpdate`` object. + + :param api_password: The `ConfigCatSDKKeyUpdate` `api_password`. + :type api_password: str, optional + + :param api_username: The `ConfigCatSDKKeyUpdate` `api_username`. + :type api_username: str, optional + + :param sdk_key: The `ConfigCatSDKKeyUpdate` `sdk_key`. + :type sdk_key: str, optional + + :param type: The definition of the `ConfigCatSDKKey` object. + :type type: ConfigCatSDKKeyType + """ + 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.config_cat_sdk_key_update import ConfigCatSDKKeyUpdate + return { + "oneOf": [ + ConfigCatSDKKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/config_cat_integration.py b/datadog_api_client/v2/model/config_cat_integration.py new file mode 100644 index 0000000000..2fb55560d6 --- /dev/null +++ b/datadog_api_client/v2/model/config_cat_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.config_cat_credentials import ConfigCatCredentials + from datadog_api_client.v2.model.config_cat_integration_type import ConfigCatIntegrationType + from datadog_api_client.v2.model.config_cat_sdk_key import ConfigCatSDKKey + +class ConfigCatIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.config_cat_credentials import ConfigCatCredentials + from datadog_api_client.v2.model.config_cat_integration_type import ConfigCatIntegrationType + return { + "credentials": (ConfigCatCredentials,), + "type": (ConfigCatIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[ConfigCatCredentials, ConfigCatSDKKey], type: ConfigCatIntegrationType, **kwargs): + """ + The definition of the ``ConfigCatIntegration`` object. + + :param credentials: The definition of the ``ConfigCatCredentials`` object. + :type credentials: ConfigCatCredentials + + :param type: The definition of the ``ConfigCatIntegrationType`` object. + :type type: ConfigCatIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/config_cat_integration_type.py b/datadog_api_client/v2/model/config_cat_integration_type.py new file mode 100644 index 0000000000..406b8145f1 --- /dev/null +++ b/datadog_api_client/v2/model/config_cat_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ConfigCatIntegrationType(ModelSimple): + """ + The definition of the `ConfigCatIntegrationType` object. + + :param value: If omitted defaults to "ConfigCat". Must be one of ["ConfigCat"]. + :type value: str + """ + + allowed_values = { + "ConfigCat", + } + CONFIGCAT: ClassVar["ConfigCatIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ConfigCatIntegrationType.CONFIGCAT = ConfigCatIntegrationType("ConfigCat") diff --git a/datadog_api_client/v2/model/config_cat_integration_update.py b/datadog_api_client/v2/model/config_cat_integration_update.py new file mode 100644 index 0000000000..e8b51e7c21 --- /dev/null +++ b/datadog_api_client/v2/model/config_cat_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.config_cat_credentials_update import ConfigCatCredentialsUpdate + from datadog_api_client.v2.model.config_cat_integration_type import ConfigCatIntegrationType + from datadog_api_client.v2.model.config_cat_sdk_key_update import ConfigCatSDKKeyUpdate + +class ConfigCatIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.config_cat_credentials_update import ConfigCatCredentialsUpdate + from datadog_api_client.v2.model.config_cat_integration_type import ConfigCatIntegrationType + return { + "credentials": (ConfigCatCredentialsUpdate,), + "type": (ConfigCatIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: ConfigCatIntegrationType, credentials: Union[ConfigCatCredentialsUpdate, ConfigCatSDKKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``ConfigCatIntegrationUpdate`` object. + + :param credentials: The definition of the ``ConfigCatCredentialsUpdate`` object. + :type credentials: ConfigCatCredentialsUpdate, optional + + :param type: The definition of the ``ConfigCatIntegrationType`` object. + :type type: ConfigCatIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/config_cat_sdk_key.py b/datadog_api_client/v2/model/config_cat_sdk_key.py new file mode 100644 index 0000000000..942b92b0f7 --- /dev/null +++ b/datadog_api_client/v2/model/config_cat_sdk_key.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.config_cat_sdk_key_type import ConfigCatSDKKeyType + +class ConfigCatSDKKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.config_cat_sdk_key_type import ConfigCatSDKKeyType + return { + "api_password": (str,), + "api_username": (str,), + "sdk_key": (str,), + "type": (ConfigCatSDKKeyType,), + } + attribute_map = { + "api_password": "api_password", + "api_username": "api_username", + "sdk_key": "sdk_key", + "type": "type", + } + + def __init__(self_, api_password: str, api_username: str, sdk_key: str, type: ConfigCatSDKKeyType, **kwargs): + """ + The definition of the ``ConfigCatSDKKey`` object. + + :param api_password: The ``ConfigCatSDKKey`` ``api_password``. + :type api_password: str + + :param api_username: The ``ConfigCatSDKKey`` ``api_username``. + :type api_username: str + + :param sdk_key: The ``ConfigCatSDKKey`` ``sdk_key``. + :type sdk_key: str + + :param type: The definition of the ``ConfigCatSDKKey`` object. + :type type: ConfigCatSDKKeyType + """ + super().__init__(kwargs) + + + self_.api_password = api_password + self_.api_username = api_username + self_.sdk_key = sdk_key + self_.type = type diff --git a/datadog_api_client/v2/model/config_cat_sdk_key_type.py b/datadog_api_client/v2/model/config_cat_sdk_key_type.py new file mode 100644 index 0000000000..4fadeb6d12 --- /dev/null +++ b/datadog_api_client/v2/model/config_cat_sdk_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ConfigCatSDKKeyType(ModelSimple): + """ + The definition of the `ConfigCatSDKKey` object. + + :param value: If omitted defaults to "ConfigCatSDKKey". Must be one of ["ConfigCatSDKKey"]. + :type value: str + """ + + allowed_values = { + "ConfigCatSDKKey", + } + CONFIGCATSDKKEY: ClassVar["ConfigCatSDKKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ConfigCatSDKKeyType.CONFIGCATSDKKEY = ConfigCatSDKKeyType("ConfigCatSDKKey") diff --git a/datadog_api_client/v2/model/config_cat_sdk_key_update.py b/datadog_api_client/v2/model/config_cat_sdk_key_update.py new file mode 100644 index 0000000000..ac2f0b575c --- /dev/null +++ b/datadog_api_client/v2/model/config_cat_sdk_key_update.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.config_cat_sdk_key_type import ConfigCatSDKKeyType + +class ConfigCatSDKKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.config_cat_sdk_key_type import ConfigCatSDKKeyType + return { + "api_password": (str,), + "api_username": (str,), + "sdk_key": (str,), + "type": (ConfigCatSDKKeyType,), + } + attribute_map = { + "api_password": "api_password", + "api_username": "api_username", + "sdk_key": "sdk_key", + "type": "type", + } + + def __init__(self_, type: ConfigCatSDKKeyType, api_password: Union[str, UnsetType]=unset, api_username: Union[str, UnsetType]=unset, sdk_key: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``ConfigCatSDKKey`` object. + + :param api_password: The ``ConfigCatSDKKeyUpdate`` ``api_password``. + :type api_password: str, optional + + :param api_username: The ``ConfigCatSDKKeyUpdate`` ``api_username``. + :type api_username: str, optional + + :param sdk_key: The ``ConfigCatSDKKeyUpdate`` ``sdk_key``. + :type sdk_key: str, optional + + :param type: The definition of the ``ConfigCatSDKKey`` object. + :type type: ConfigCatSDKKeyType + """ + if api_password is not unset: + kwargs["api_password"] = api_password + if api_username is not unset: + kwargs["api_username"] = api_username + if sdk_key is not unset: + kwargs["sdk_key"] = sdk_key + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/configured_schedule.py b/datadog_api_client/v2/model/configured_schedule.py new file mode 100644 index 0000000000..fd4b73bc61 --- /dev/null +++ b/datadog_api_client/v2/model/configured_schedule.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.configured_schedule_target_attributes import ConfiguredScheduleTargetAttributes + from datadog_api_client.v2.model.configured_schedule_target_relationships import ConfiguredScheduleTargetRelationships + from datadog_api_client.v2.model.configured_schedule_target_type import ConfiguredScheduleTargetType + +class ConfiguredSchedule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.configured_schedule_target_attributes import ConfiguredScheduleTargetAttributes + from datadog_api_client.v2.model.configured_schedule_target_relationships import ConfiguredScheduleTargetRelationships + from datadog_api_client.v2.model.configured_schedule_target_type import ConfiguredScheduleTargetType + return { + "attributes": (ConfiguredScheduleTargetAttributes,), + "id": (str,), + "relationships": (ConfiguredScheduleTargetRelationships,), + "type": (ConfiguredScheduleTargetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ConfiguredScheduleTargetAttributes, id: str, relationships: ConfiguredScheduleTargetRelationships, type: ConfiguredScheduleTargetType, **kwargs): + """ + Full resource representation of a configured schedule target with position (previous, current, or next). + + :param attributes: Attributes for a configured schedule target, including position. + :type attributes: ConfiguredScheduleTargetAttributes + + :param id: Specifies the unique identifier of the configured schedule target. + :type id: str + + :param relationships: Represents the relationships of a configured schedule target. + :type relationships: ConfiguredScheduleTargetRelationships + + :param type: Indicates that the resource is of type ``schedule_target``. + :type type: ConfiguredScheduleTargetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/configured_schedule_target.py b/datadog_api_client/v2/model/configured_schedule_target.py new file mode 100644 index 0000000000..7a4c302955 --- /dev/null +++ b/datadog_api_client/v2/model/configured_schedule_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.configured_schedule_target_type import ConfiguredScheduleTargetType + +class ConfiguredScheduleTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.configured_schedule_target_type import ConfiguredScheduleTargetType + return { + "id": (str,), + "type": (ConfiguredScheduleTargetType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ConfiguredScheduleTargetType, **kwargs): + """ + Relationship reference to a configured schedule target. + + :param id: Specifies the unique identifier of the configured schedule target. + :type id: str + + :param type: Indicates that the resource is of type ``schedule_target``. + :type type: ConfiguredScheduleTargetType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/configured_schedule_target_attributes.py b/datadog_api_client/v2/model/configured_schedule_target_attributes.py new file mode 100644 index 0000000000..669e953269 --- /dev/null +++ b/datadog_api_client/v2/model/configured_schedule_target_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_target_position import ScheduleTargetPosition + +class ConfiguredScheduleTargetAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_target_position import ScheduleTargetPosition + return { + "position": (ScheduleTargetPosition,), + } + attribute_map = { + "position": "position", + } + + def __init__(self_, position: ScheduleTargetPosition, **kwargs): + """ + Attributes for a configured schedule target, including position. + + :param position: Specifies the position of a schedule target (example ``previous`` , ``current`` , or ``next`` ). + :type position: ScheduleTargetPosition + """ + super().__init__(kwargs) + + + self_.position = position diff --git a/datadog_api_client/v2/model/configured_schedule_target_relationships.py b/datadog_api_client/v2/model/configured_schedule_target_relationships.py new file mode 100644 index 0000000000..763109824b --- /dev/null +++ b/datadog_api_client/v2/model/configured_schedule_target_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.configured_schedule_target_relationships_schedule import ConfiguredScheduleTargetRelationshipsSchedule + +class ConfiguredScheduleTargetRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.configured_schedule_target_relationships_schedule import ConfiguredScheduleTargetRelationshipsSchedule + return { + "schedule": (ConfiguredScheduleTargetRelationshipsSchedule,), + } + attribute_map = { + "schedule": "schedule", + } + + def __init__(self_, schedule: ConfiguredScheduleTargetRelationshipsSchedule, **kwargs): + """ + Represents the relationships of a configured schedule target. + + :param schedule: Holds the schedule reference for a configured schedule target. + :type schedule: ConfiguredScheduleTargetRelationshipsSchedule + """ + super().__init__(kwargs) + + + self_.schedule = schedule diff --git a/datadog_api_client/v2/model/configured_schedule_target_relationships_schedule.py b/datadog_api_client/v2/model/configured_schedule_target_relationships_schedule.py new file mode 100644 index 0000000000..e0b8961880 --- /dev/null +++ b/datadog_api_client/v2/model/configured_schedule_target_relationships_schedule.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_target import ScheduleTarget + +class ConfiguredScheduleTargetRelationshipsSchedule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_target import ScheduleTarget + return { + "data": (ScheduleTarget,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ScheduleTarget, **kwargs): + """ + Holds the schedule reference for a configured schedule target. + + :param data: Represents a schedule target for an escalation policy step, including its ID and resource type. This is a shortcut for a configured schedule target with position set to 'current'. + :type data: ScheduleTarget + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/configured_schedule_target_type.py b/datadog_api_client/v2/model/configured_schedule_target_type.py new file mode 100644 index 0000000000..b15ee1e393 --- /dev/null +++ b/datadog_api_client/v2/model/configured_schedule_target_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ConfiguredScheduleTargetType(ModelSimple): + """ + Indicates that the resource is of type `schedule_target`. + + :param value: If omitted defaults to "schedule_target". Must be one of ["schedule_target"]. + :type value: str + """ + + allowed_values = { + "schedule_target", + } + SCHEDULE_TARGET: ClassVar["ConfiguredScheduleTargetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ConfiguredScheduleTargetType.SCHEDULE_TARGET = ConfiguredScheduleTargetType("schedule_target") diff --git a/datadog_api_client/v2/model/confluence_postmortem_settings.py b/datadog_api_client/v2/model/confluence_postmortem_settings.py new file mode 100644 index 0000000000..d34244654e --- /dev/null +++ b/datadog_api_client/v2/model/confluence_postmortem_settings.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ConfluencePostmortemSettings(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "parent_id": (str, none_type), + "space_id": (str,), + } + attribute_map = { + "account_id": "account_id", + "parent_id": "parent_id", + "space_id": "space_id", + } + + def __init__(self_, account_id: str, space_id: str, parent_id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Settings for a postmortem template stored in Confluence. Required when ``location`` is ``confluence``. + + :param account_id: The ID of the Confluence integration account. + :type account_id: str + + :param parent_id: The ID of the parent Confluence page under which postmortems are created. + :type parent_id: str, none_type, optional + + :param space_id: The ID of the Confluence space where postmortems are created. + :type space_id: str + """ + if parent_id is not unset: + kwargs["parent_id"] = parent_id + super().__init__(kwargs) + + + self_.account_id = account_id + self_.space_id = space_id diff --git a/datadog_api_client/v2/model/confluent_account_create_request.py b/datadog_api_client/v2/model/confluent_account_create_request.py new file mode 100644 index 0000000000..f9bfacb8a0 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_account_create_request_data import ConfluentAccountCreateRequestData + +class ConfluentAccountCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_account_create_request_data import ConfluentAccountCreateRequestData + return { + "data": (ConfluentAccountCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ConfluentAccountCreateRequestData, **kwargs): + """ + Payload schema when adding a Confluent account. + + :param data: The data body for adding a Confluent account. + :type data: ConfluentAccountCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/confluent_account_create_request_attributes.py b/datadog_api_client/v2/model/confluent_account_create_request_attributes.py new file mode 100644 index 0000000000..0d3ac6f588 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_create_request_attributes.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_account_resource_attributes import ConfluentAccountResourceAttributes + +class ConfluentAccountCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_account_resource_attributes import ConfluentAccountResourceAttributes + return { + "api_key": (str,), + "api_secret": (str,), + "resources": ([ConfluentAccountResourceAttributes],), + "tags": ([str],), + } + attribute_map = { + "api_key": "api_key", + "api_secret": "api_secret", + "resources": "resources", + "tags": "tags", + } + + def __init__(self_, api_key: str, api_secret: str, resources: Union[List[ConfluentAccountResourceAttributes], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes associated with the account creation request. + + :param api_key: The API key associated with your Confluent account. + :type api_key: str + + :param api_secret: The API secret associated with your Confluent account. + :type api_secret: str + + :param resources: A list of Confluent resources associated with the Confluent account. + :type resources: [ConfluentAccountResourceAttributes], optional + + :param tags: A list of strings representing tags. Can be a single key, or key-value pairs separated by a colon. + :type tags: [str], optional + """ + if resources is not unset: + kwargs["resources"] = resources + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.api_key = api_key + self_.api_secret = api_secret diff --git a/datadog_api_client/v2/model/confluent_account_create_request_data.py b/datadog_api_client/v2/model/confluent_account_create_request_data.py new file mode 100644 index 0000000000..ce10e21951 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_account_create_request_attributes import ConfluentAccountCreateRequestAttributes + from datadog_api_client.v2.model.confluent_account_type import ConfluentAccountType + +class ConfluentAccountCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_account_create_request_attributes import ConfluentAccountCreateRequestAttributes + from datadog_api_client.v2.model.confluent_account_type import ConfluentAccountType + return { + "attributes": (ConfluentAccountCreateRequestAttributes,), + "type": (ConfluentAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ConfluentAccountCreateRequestAttributes, type: ConfluentAccountType, **kwargs): + """ + The data body for adding a Confluent account. + + :param attributes: Attributes associated with the account creation request. + :type attributes: ConfluentAccountCreateRequestAttributes + + :param type: The JSON:API type for this API. Should always be ``confluent-cloud-accounts``. + :type type: ConfluentAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/confluent_account_resource_attributes.py b/datadog_api_client/v2/model/confluent_account_resource_attributes.py new file mode 100644 index 0000000000..b6ae8d6cfa --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_resource_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ConfluentAccountResourceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enable_custom_metrics": (bool,), + "id": (str,), + "resource_type": (str,), + "tags": ([str],), + } + attribute_map = { + "enable_custom_metrics": "enable_custom_metrics", + "id": "id", + "resource_type": "resource_type", + "tags": "tags", + } + + def __init__(self_, resource_type: str, enable_custom_metrics: Union[bool, UnsetType]=unset, id: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes object for updating a Confluent resource. + + :param enable_custom_metrics: Enable the ``custom.consumer_lag_offset`` metric, which contains extra metric tags. + :type enable_custom_metrics: bool, optional + + :param id: The ID associated with a Confluent resource. + :type id: str, optional + + :param resource_type: The resource type of the Resource. Can be ``kafka`` , ``connector`` , ``ksql`` , or ``schema_registry``. + :type resource_type: str + + :param tags: A list of strings representing tags. Can be a single key, or key-value pairs separated by a colon. + :type tags: [str], optional + """ + if enable_custom_metrics is not unset: + kwargs["enable_custom_metrics"] = enable_custom_metrics + if id is not unset: + kwargs["id"] = id + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.resource_type = resource_type diff --git a/datadog_api_client/v2/model/confluent_account_response.py b/datadog_api_client/v2/model/confluent_account_response.py new file mode 100644 index 0000000000..5c3f551968 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_account_response_data import ConfluentAccountResponseData + +class ConfluentAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_account_response_data import ConfluentAccountResponseData + return { + "data": (ConfluentAccountResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ConfluentAccountResponseData, UnsetType]=unset, **kwargs): + """ + The expected response schema when getting a Confluent account. + + :param data: An API key and API secret pair that represents a Confluent account. + :type data: ConfluentAccountResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/confluent_account_response_attributes.py b/datadog_api_client/v2/model/confluent_account_response_attributes.py new file mode 100644 index 0000000000..27c2bb52ba --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_response_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_resource_response_attributes import ConfluentResourceResponseAttributes + +class ConfluentAccountResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_resource_response_attributes import ConfluentResourceResponseAttributes + return { + "api_key": (str,), + "resources": ([ConfluentResourceResponseAttributes],), + "tags": ([str],), + } + attribute_map = { + "api_key": "api_key", + "resources": "resources", + "tags": "tags", + } + + def __init__(self_, api_key: str, resources: Union[List[ConfluentResourceResponseAttributes], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The attributes of a Confluent account. + + :param api_key: The API key associated with your Confluent account. + :type api_key: str + + :param resources: A list of Confluent resources associated with the Confluent account. + :type resources: [ConfluentResourceResponseAttributes], optional + + :param tags: A list of strings representing tags. Can be a single key, or key-value pairs separated by a colon. + :type tags: [str], optional + """ + if resources is not unset: + kwargs["resources"] = resources + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.api_key = api_key diff --git a/datadog_api_client/v2/model/confluent_account_response_data.py b/datadog_api_client/v2/model/confluent_account_response_data.py new file mode 100644 index 0000000000..64045ac8e7 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_account_response_attributes import ConfluentAccountResponseAttributes + from datadog_api_client.v2.model.confluent_account_type import ConfluentAccountType + +class ConfluentAccountResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_account_response_attributes import ConfluentAccountResponseAttributes + from datadog_api_client.v2.model.confluent_account_type import ConfluentAccountType + return { + "attributes": (ConfluentAccountResponseAttributes,), + "id": (str,), + "type": (ConfluentAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ConfluentAccountResponseAttributes, id: str, type: ConfluentAccountType, **kwargs): + """ + An API key and API secret pair that represents a Confluent account. + + :param attributes: The attributes of a Confluent account. + :type attributes: ConfluentAccountResponseAttributes + + :param id: A randomly generated ID associated with a Confluent account. + :type id: str + + :param type: The JSON:API type for this API. Should always be ``confluent-cloud-accounts``. + :type type: ConfluentAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/confluent_account_type.py b/datadog_api_client/v2/model/confluent_account_type.py new file mode 100644 index 0000000000..29b828a96b --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ConfluentAccountType(ModelSimple): + """ + The JSON:API type for this API. Should always be `confluent-cloud-accounts`. + + :param value: If omitted defaults to "confluent-cloud-accounts". Must be one of ["confluent-cloud-accounts"]. + :type value: str + """ + + allowed_values = { + "confluent-cloud-accounts", + } + CONFLUENT_CLOUD_ACCOUNTS: ClassVar["ConfluentAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ConfluentAccountType.CONFLUENT_CLOUD_ACCOUNTS = ConfluentAccountType("confluent-cloud-accounts") diff --git a/datadog_api_client/v2/model/confluent_account_update_request.py b/datadog_api_client/v2/model/confluent_account_update_request.py new file mode 100644 index 0000000000..ae9358fcf5 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_account_update_request_data import ConfluentAccountUpdateRequestData + +class ConfluentAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_account_update_request_data import ConfluentAccountUpdateRequestData + return { + "data": (ConfluentAccountUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ConfluentAccountUpdateRequestData, **kwargs): + """ + The JSON:API request for updating a Confluent account. + + :param data: Data object for updating a Confluent account. + :type data: ConfluentAccountUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/confluent_account_update_request_attributes.py b/datadog_api_client/v2/model/confluent_account_update_request_attributes.py new file mode 100644 index 0000000000..a566ad15d5 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_update_request_attributes.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ConfluentAccountUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_key": (str,), + "api_secret": (str,), + "tags": ([str],), + } + attribute_map = { + "api_key": "api_key", + "api_secret": "api_secret", + "tags": "tags", + } + + def __init__(self_, api_key: str, api_secret: str, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes object for updating a Confluent account. + + :param api_key: The API key associated with your Confluent account. + :type api_key: str + + :param api_secret: The API secret associated with your Confluent account. + :type api_secret: str + + :param tags: A list of strings representing tags. Can be a single key, or key-value pairs separated by a colon. + :type tags: [str], optional + """ + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.api_key = api_key + self_.api_secret = api_secret diff --git a/datadog_api_client/v2/model/confluent_account_update_request_data.py b/datadog_api_client/v2/model/confluent_account_update_request_data.py new file mode 100644 index 0000000000..35cc0c661e --- /dev/null +++ b/datadog_api_client/v2/model/confluent_account_update_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_account_update_request_attributes import ConfluentAccountUpdateRequestAttributes + from datadog_api_client.v2.model.confluent_account_type import ConfluentAccountType + +class ConfluentAccountUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_account_update_request_attributes import ConfluentAccountUpdateRequestAttributes + from datadog_api_client.v2.model.confluent_account_type import ConfluentAccountType + return { + "attributes": (ConfluentAccountUpdateRequestAttributes,), + "type": (ConfluentAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ConfluentAccountUpdateRequestAttributes, type: ConfluentAccountType, **kwargs): + """ + Data object for updating a Confluent account. + + :param attributes: Attributes object for updating a Confluent account. + :type attributes: ConfluentAccountUpdateRequestAttributes + + :param type: The JSON:API type for this API. Should always be ``confluent-cloud-accounts``. + :type type: ConfluentAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/confluent_accounts_response.py b/datadog_api_client/v2/model/confluent_accounts_response.py new file mode 100644 index 0000000000..753dae866b --- /dev/null +++ b/datadog_api_client/v2/model/confluent_accounts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_account_response_data import ConfluentAccountResponseData + +class ConfluentAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_account_response_data import ConfluentAccountResponseData + return { + "data": ([ConfluentAccountResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ConfluentAccountResponseData], UnsetType]=unset, **kwargs): + """ + Confluent account returned by the API. + + :param data: The Confluent account. + :type data: [ConfluentAccountResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/confluent_resource_request.py b/datadog_api_client/v2/model/confluent_resource_request.py new file mode 100644 index 0000000000..fee0183f28 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_resource_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_resource_request_data import ConfluentResourceRequestData + +class ConfluentResourceRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_resource_request_data import ConfluentResourceRequestData + return { + "data": (ConfluentResourceRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ConfluentResourceRequestData, **kwargs): + """ + The JSON:API request for updating a Confluent resource. + + :param data: JSON:API request for updating a Confluent resource. + :type data: ConfluentResourceRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/confluent_resource_request_attributes.py b/datadog_api_client/v2/model/confluent_resource_request_attributes.py new file mode 100644 index 0000000000..3c5493955a --- /dev/null +++ b/datadog_api_client/v2/model/confluent_resource_request_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ConfluentResourceRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enable_custom_metrics": (bool,), + "resource_type": (str,), + "tags": ([str],), + } + attribute_map = { + "enable_custom_metrics": "enable_custom_metrics", + "resource_type": "resource_type", + "tags": "tags", + } + + def __init__(self_, resource_type: str, enable_custom_metrics: Union[bool, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes object for updating a Confluent resource. + + :param enable_custom_metrics: Enable the ``custom.consumer_lag_offset`` metric, which contains extra metric tags. + :type enable_custom_metrics: bool, optional + + :param resource_type: The resource type of the Resource. Can be ``kafka`` , ``connector`` , ``ksql`` , or ``schema_registry``. + :type resource_type: str + + :param tags: A list of strings representing tags. Can be a single key, or key-value pairs separated by a colon. + :type tags: [str], optional + """ + if enable_custom_metrics is not unset: + kwargs["enable_custom_metrics"] = enable_custom_metrics + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.resource_type = resource_type diff --git a/datadog_api_client/v2/model/confluent_resource_request_data.py b/datadog_api_client/v2/model/confluent_resource_request_data.py new file mode 100644 index 0000000000..6f83721956 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_resource_request_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_resource_request_attributes import ConfluentResourceRequestAttributes + from datadog_api_client.v2.model.confluent_resource_type import ConfluentResourceType + +class ConfluentResourceRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_resource_request_attributes import ConfluentResourceRequestAttributes + from datadog_api_client.v2.model.confluent_resource_type import ConfluentResourceType + return { + "attributes": (ConfluentResourceRequestAttributes,), + "id": (str,), + "type": (ConfluentResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ConfluentResourceRequestAttributes, id: str, type: ConfluentResourceType, **kwargs): + """ + JSON:API request for updating a Confluent resource. + + :param attributes: Attributes object for updating a Confluent resource. + :type attributes: ConfluentResourceRequestAttributes + + :param id: The ID associated with a Confluent resource. + :type id: str + + :param type: The JSON:API type for this request. + :type type: ConfluentResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/confluent_resource_response.py b/datadog_api_client/v2/model/confluent_resource_response.py new file mode 100644 index 0000000000..736b86afb3 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_resource_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_resource_response_data import ConfluentResourceResponseData + +class ConfluentResourceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_resource_response_data import ConfluentResourceResponseData + return { + "data": (ConfluentResourceResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ConfluentResourceResponseData, UnsetType]=unset, **kwargs): + """ + Response schema when interacting with a Confluent resource. + + :param data: Confluent Cloud resource data. + :type data: ConfluentResourceResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/confluent_resource_response_attributes.py b/datadog_api_client/v2/model/confluent_resource_response_attributes.py new file mode 100644 index 0000000000..51254a3bf6 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_resource_response_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ConfluentResourceResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enable_custom_metrics": (bool,), + "id": (str,), + "resource_type": (str,), + "tags": ([str],), + } + attribute_map = { + "enable_custom_metrics": "enable_custom_metrics", + "id": "id", + "resource_type": "resource_type", + "tags": "tags", + } + + def __init__(self_, resource_type: str, enable_custom_metrics: Union[bool, UnsetType]=unset, id: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Model representation of a Confluent Cloud resource. + + :param enable_custom_metrics: Enable the ``custom.consumer_lag_offset`` metric, which contains extra metric tags. + :type enable_custom_metrics: bool, optional + + :param id: The ID associated with the Confluent resource. + :type id: str, optional + + :param resource_type: The resource type of the Resource. Can be ``kafka`` , ``connector`` , ``ksql`` , or ``schema_registry``. + :type resource_type: str + + :param tags: A list of strings representing tags. Can be a single key, or key-value pairs separated by a colon. + :type tags: [str], optional + """ + if enable_custom_metrics is not unset: + kwargs["enable_custom_metrics"] = enable_custom_metrics + if id is not unset: + kwargs["id"] = id + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.resource_type = resource_type diff --git a/datadog_api_client/v2/model/confluent_resource_response_data.py b/datadog_api_client/v2/model/confluent_resource_response_data.py new file mode 100644 index 0000000000..3f926a148f --- /dev/null +++ b/datadog_api_client/v2/model/confluent_resource_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_resource_response_attributes import ConfluentResourceResponseAttributes + from datadog_api_client.v2.model.confluent_resource_type import ConfluentResourceType + +class ConfluentResourceResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_resource_response_attributes import ConfluentResourceResponseAttributes + from datadog_api_client.v2.model.confluent_resource_type import ConfluentResourceType + return { + "attributes": (ConfluentResourceResponseAttributes,), + "id": (str,), + "type": (ConfluentResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ConfluentResourceResponseAttributes, id: str, type: ConfluentResourceType, **kwargs): + """ + Confluent Cloud resource data. + + :param attributes: Model representation of a Confluent Cloud resource. + :type attributes: ConfluentResourceResponseAttributes + + :param id: The ID associated with the Confluent resource. + :type id: str + + :param type: The JSON:API type for this request. + :type type: ConfluentResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/confluent_resource_type.py b/datadog_api_client/v2/model/confluent_resource_type.py new file mode 100644 index 0000000000..b47c6424f6 --- /dev/null +++ b/datadog_api_client/v2/model/confluent_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ConfluentResourceType(ModelSimple): + """ + The JSON:API type for this request. + + :param value: If omitted defaults to "confluent-cloud-resources". Must be one of ["confluent-cloud-resources"]. + :type value: str + """ + + allowed_values = { + "confluent-cloud-resources", + } + CONFLUENT_CLOUD_RESOURCES: ClassVar["ConfluentResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ConfluentResourceType.CONFLUENT_CLOUD_RESOURCES = ConfluentResourceType("confluent-cloud-resources") diff --git a/datadog_api_client/v2/model/confluent_resources_response.py b/datadog_api_client/v2/model/confluent_resources_response.py new file mode 100644 index 0000000000..26035bc90c --- /dev/null +++ b/datadog_api_client/v2/model/confluent_resources_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluent_resource_response_data import ConfluentResourceResponseData + +class ConfluentResourcesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluent_resource_response_data import ConfluentResourceResponseData + return { + "data": ([ConfluentResourceResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ConfluentResourceResponseData], UnsetType]=unset, **kwargs): + """ + Response schema when interacting with a list of Confluent resources. + + :param data: The JSON:API data attribute. + :type data: [ConfluentResourceResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/connected_team_ref.py b/datadog_api_client/v2/model/connected_team_ref.py new file mode 100644 index 0000000000..f8c793e889 --- /dev/null +++ b/datadog_api_client/v2/model/connected_team_ref.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.connected_team_ref_data import ConnectedTeamRefData + +class ConnectedTeamRef(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.connected_team_ref_data import ConnectedTeamRefData + return { + "data": (ConnectedTeamRefData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ConnectedTeamRefData, UnsetType]=unset, **kwargs): + """ + Reference to a team from an external system. + + :param data: Reference to connected external team. + :type data: ConnectedTeamRefData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/connected_team_ref_data.py b/datadog_api_client/v2/model/connected_team_ref_data.py new file mode 100644 index 0000000000..8ebb207c8d --- /dev/null +++ b/datadog_api_client/v2/model/connected_team_ref_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.connected_team_ref_data_type import ConnectedTeamRefDataType + +class ConnectedTeamRefData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.connected_team_ref_data_type import ConnectedTeamRefDataType + return { + "id": (str,), + "type": (ConnectedTeamRefDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ConnectedTeamRefDataType, **kwargs): + """ + Reference to connected external team. + + :param id: The connected team ID as it is referenced throughout the Datadog ecosystem. + :type id: str + + :param type: External team resource type. + :type type: ConnectedTeamRefDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/connected_team_ref_data_type.py b/datadog_api_client/v2/model/connected_team_ref_data_type.py new file mode 100644 index 0000000000..54eee6eeef --- /dev/null +++ b/datadog_api_client/v2/model/connected_team_ref_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ConnectedTeamRefDataType(ModelSimple): + """ + External team resource type. + + :param value: If omitted defaults to "github_team". Must be one of ["github_team"]. + :type value: str + """ + + allowed_values = { + "github_team", + } + GITHUB_TEAM: ClassVar["ConnectedTeamRefDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ConnectedTeamRefDataType.GITHUB_TEAM = ConnectedTeamRefDataType("github_team") diff --git a/datadog_api_client/v2/model/connection.py b/datadog_api_client/v2/model/connection.py new file mode 100644 index 0000000000..90362c0881 --- /dev/null +++ b/datadog_api_client/v2/model/connection.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Connection(ModelNormal): + @cached_property + def openapi_types(_): + return { + "connection_id": (str,), + "label": (str,), + } + attribute_map = { + "connection_id": "connectionId", + "label": "label", + } + + def __init__(self_, connection_id: str, label: str, **kwargs): + """ + The definition of ``Connection`` object. + + :param connection_id: The ``Connection`` ``connectionId``. + :type connection_id: str + + :param label: The ``Connection`` ``label``. + :type label: str + """ + super().__init__(kwargs) + + + self_.connection_id = connection_id + self_.label = label diff --git a/datadog_api_client/v2/model/connection_env.py b/datadog_api_client/v2/model/connection_env.py new file mode 100644 index 0000000000..2a28d7cb5c --- /dev/null +++ b/datadog_api_client/v2/model/connection_env.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.connection_group import ConnectionGroup + from datadog_api_client.v2.model.connection import Connection + from datadog_api_client.v2.model.connection_env_env import ConnectionEnvEnv + +class ConnectionEnv(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.connection_group import ConnectionGroup + from datadog_api_client.v2.model.connection import Connection + from datadog_api_client.v2.model.connection_env_env import ConnectionEnvEnv + return { + "connection_groups": ([ConnectionGroup],), + "connections": ([Connection],), + "env": (ConnectionEnvEnv,), + } + attribute_map = { + "connection_groups": "connectionGroups", + "connections": "connections", + "env": "env", + } + + def __init__(self_, env: ConnectionEnvEnv, connection_groups: Union[List[ConnectionGroup], UnsetType]=unset, connections: Union[List[Connection], UnsetType]=unset, **kwargs): + """ + A list of connections or connection groups used in the workflow. + + :param connection_groups: The ``ConnectionEnv`` ``connectionGroups``. + :type connection_groups: [ConnectionGroup], optional + + :param connections: The ``ConnectionEnv`` ``connections``. + :type connections: [Connection], optional + + :param env: The definition of ``ConnectionEnvEnv`` object. + :type env: ConnectionEnvEnv + """ + if connection_groups is not unset: + kwargs["connection_groups"] = connection_groups + if connections is not unset: + kwargs["connections"] = connections + super().__init__(kwargs) + + + self_.env = env diff --git a/datadog_api_client/v2/model/connection_env_env.py b/datadog_api_client/v2/model/connection_env_env.py new file mode 100644 index 0000000000..bad3ccaacf --- /dev/null +++ b/datadog_api_client/v2/model/connection_env_env.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ConnectionEnvEnv(ModelSimple): + """ + The definition of `ConnectionEnvEnv` object. + + :param value: If omitted defaults to "default". Must be one of ["default"]. + :type value: str + """ + + allowed_values = { + "default", + } + DEFAULT: ClassVar["ConnectionEnvEnv"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ConnectionEnvEnv.DEFAULT = ConnectionEnvEnv("default") diff --git a/datadog_api_client/v2/model/connection_group.py b/datadog_api_client/v2/model/connection_group.py new file mode 100644 index 0000000000..d43d869f7a --- /dev/null +++ b/datadog_api_client/v2/model/connection_group.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ConnectionGroup(ModelNormal): + @cached_property + def openapi_types(_): + return { + "connection_group_id": (str,), + "label": (str,), + "tags": ([str],), + } + attribute_map = { + "connection_group_id": "connectionGroupId", + "label": "label", + "tags": "tags", + } + + def __init__(self_, connection_group_id: str, label: str, tags: List[str], **kwargs): + """ + The definition of ``ConnectionGroup`` object. + + :param connection_group_id: The ``ConnectionGroup`` ``connectionGroupId``. + :type connection_group_id: str + + :param label: The ``ConnectionGroup`` ``label``. + :type label: str + + :param tags: The ``ConnectionGroup`` ``tags``. + :type tags: [str] + """ + super().__init__(kwargs) + + + self_.connection_group_id = connection_group_id + self_.label = label + self_.tags = tags diff --git a/datadog_api_client/v2/model/connections_page_pagination.py b/datadog_api_client/v2/model/connections_page_pagination.py new file mode 100644 index 0000000000..8ffe58fd89 --- /dev/null +++ b/datadog_api_client/v2/model/connections_page_pagination.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ConnectionsPagePagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_number": (int,), + "last_number": (int,), + "next_number": (int, none_type), + "number": (int,), + "prev_number": (int, none_type), + "size": (int,), + "total": (int,), + "type": (str,), + } + attribute_map = { + "first_number": "first_number", + "last_number": "last_number", + "next_number": "next_number", + "number": "number", + "prev_number": "prev_number", + "size": "size", + "total": "total", + "type": "type", + } + + def __init__(self_, first_number: Union[int, UnsetType]=unset, last_number: Union[int, UnsetType]=unset, next_number: Union[int, none_type, UnsetType]=unset, number: Union[int, UnsetType]=unset, prev_number: Union[int, none_type, UnsetType]=unset, size: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Page-based pagination metadata. + + :param first_number: The first page number. + :type first_number: int, optional + + :param last_number: The last page number. + :type last_number: int, optional + + :param next_number: The next page number. + :type next_number: int, none_type, optional + + :param number: The current page number. + :type number: int, optional + + :param prev_number: The previous page number. + :type prev_number: int, none_type, optional + + :param size: The page size. + :type size: int, optional + + :param total: Total connections matching request. + :type total: int, optional + + :param type: Pagination type. + :type type: str, optional + """ + if first_number is not unset: + kwargs["first_number"] = first_number + if last_number is not unset: + kwargs["last_number"] = last_number + if next_number is not unset: + kwargs["next_number"] = next_number + if number is not unset: + kwargs["number"] = number + if prev_number is not unset: + kwargs["prev_number"] = prev_number + if size is not unset: + kwargs["size"] = size + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/connections_response_meta.py b/datadog_api_client/v2/model/connections_response_meta.py new file mode 100644 index 0000000000..c14a6f20dc --- /dev/null +++ b/datadog_api_client/v2/model/connections_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.connections_page_pagination import ConnectionsPagePagination + +class ConnectionsResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.connections_page_pagination import ConnectionsPagePagination + return { + "page": (ConnectionsPagePagination,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[ConnectionsPagePagination, UnsetType]=unset, **kwargs): + """ + Connections response metadata. + + :param page: Page-based pagination metadata. + :type page: ConnectionsPagePagination, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container.py b/datadog_api_client/v2/model/container.py new file mode 100644 index 0000000000..e0bcf48a0b --- /dev/null +++ b/datadog_api_client/v2/model/container.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_attributes import ContainerAttributes + from datadog_api_client.v2.model.container_type import ContainerType + +class Container(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_attributes import ContainerAttributes + from datadog_api_client.v2.model.container_type import ContainerType + return { + "attributes": (ContainerAttributes,), + "id": (str,), + "type": (ContainerType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ContainerAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ContainerType, UnsetType]=unset, **kwargs): + """ + Container object. + + :param attributes: Attributes for a container. + :type attributes: ContainerAttributes, optional + + :param id: Container ID. + :type id: str, optional + + :param type: Type of container. + :type type: ContainerType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_attributes.py b/datadog_api_client/v2/model/container_attributes.py new file mode 100644 index 0000000000..193c96f507 --- /dev/null +++ b/datadog_api_client/v2/model/container_attributes.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "container_id": (str,), + "created_at": (str,), + "host": (str,), + "image_digest": (str, none_type), + "image_name": (str,), + "image_tags": ([str], none_type), + "name": (str,), + "started_at": (str,), + "state": (str,), + "tags": ([str],), + } + attribute_map = { + "container_id": "container_id", + "created_at": "created_at", + "host": "host", + "image_digest": "image_digest", + "image_name": "image_name", + "image_tags": "image_tags", + "name": "name", + "started_at": "started_at", + "state": "state", + "tags": "tags", + } + + def __init__(self_, container_id: Union[str, UnsetType]=unset, created_at: Union[str, UnsetType]=unset, host: Union[str, UnsetType]=unset, image_digest: Union[str, none_type, UnsetType]=unset, image_name: Union[str, UnsetType]=unset, image_tags: Union[List[str], none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, started_at: Union[str, UnsetType]=unset, state: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for a container. + + :param container_id: The ID of the container. + :type container_id: str, optional + + :param created_at: Time the container was created. + :type created_at: str, optional + + :param host: Hostname of the host running the container. + :type host: str, optional + + :param image_digest: Digest of the compressed image manifest. + :type image_digest: str, none_type, optional + + :param image_name: Name of the associated container image. + :type image_name: str, optional + + :param image_tags: List of image tags associated with the container image. + :type image_tags: [str], none_type, optional + + :param name: Name of the container. + :type name: str, optional + + :param started_at: Time the container was started. + :type started_at: str, optional + + :param state: State of the container. This depends on the container runtime. + :type state: str, optional + + :param tags: List of tags associated with the container. + :type tags: [str], optional + """ + if container_id is not unset: + kwargs["container_id"] = container_id + if created_at is not unset: + kwargs["created_at"] = created_at + if host is not unset: + kwargs["host"] = host + if image_digest is not unset: + kwargs["image_digest"] = image_digest + if image_name is not unset: + kwargs["image_name"] = image_name + if image_tags is not unset: + kwargs["image_tags"] = image_tags + if name is not unset: + kwargs["name"] = name + if started_at is not unset: + kwargs["started_at"] = started_at + if state is not unset: + kwargs["state"] = state + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_data_source.py b/datadog_api_client/v2/model/container_data_source.py new file mode 100644 index 0000000000..3756552af9 --- /dev/null +++ b/datadog_api_client/v2/model/container_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ContainerDataSource(ModelSimple): + """ + A data source for container-level infrastructure metrics. + + :param value: If omitted defaults to "container". Must be one of ["container"]. + :type value: str + """ + + allowed_values = { + "container", + } + CONTAINER: ClassVar["ContainerDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ContainerDataSource.CONTAINER = ContainerDataSource("container") diff --git a/datadog_api_client/v2/model/container_group.py b/datadog_api_client/v2/model/container_group.py new file mode 100644 index 0000000000..03d3ecb52c --- /dev/null +++ b/datadog_api_client/v2/model/container_group.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_group_attributes import ContainerGroupAttributes + from datadog_api_client.v2.model.container_group_relationships import ContainerGroupRelationships + from datadog_api_client.v2.model.container_group_type import ContainerGroupType + +class ContainerGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_group_attributes import ContainerGroupAttributes + from datadog_api_client.v2.model.container_group_relationships import ContainerGroupRelationships + from datadog_api_client.v2.model.container_group_type import ContainerGroupType + return { + "attributes": (ContainerGroupAttributes,), + "id": (str,), + "relationships": (ContainerGroupRelationships,), + "type": (ContainerGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[ContainerGroupAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ContainerGroupRelationships, UnsetType]=unset, type: Union[ContainerGroupType, UnsetType]=unset, **kwargs): + """ + Container group object. + + :param attributes: Attributes for a container group. + :type attributes: ContainerGroupAttributes, optional + + :param id: Container Group ID. + :type id: str, optional + + :param relationships: Relationships to containers inside a container group. + :type relationships: ContainerGroupRelationships, optional + + :param type: Type of container group. + :type type: ContainerGroupType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_group_attributes.py b/datadog_api_client/v2/model/container_group_attributes.py new file mode 100644 index 0000000000..d50b91c2bf --- /dev/null +++ b/datadog_api_client/v2/model/container_group_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerGroupAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "tags": (dict,), + } + attribute_map = { + "count": "count", + "tags": "tags", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, tags: Union[dict, UnsetType]=unset, **kwargs): + """ + Attributes for a container group. + + :param count: Number of containers in the group. + :type count: int, optional + + :param tags: Tags from the group name parsed in key/value format. + :type tags: dict, optional + """ + if count is not unset: + kwargs["count"] = count + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_group_relationships.py b/datadog_api_client/v2/model/container_group_relationships.py new file mode 100644 index 0000000000..ad7157e430 --- /dev/null +++ b/datadog_api_client/v2/model/container_group_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_group_relationships_link import ContainerGroupRelationshipsLink + +class ContainerGroupRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_group_relationships_link import ContainerGroupRelationshipsLink + return { + "containers": (ContainerGroupRelationshipsLink,), + } + attribute_map = { + "containers": "containers", + } + + def __init__(self_, containers: Union[ContainerGroupRelationshipsLink, UnsetType]=unset, **kwargs): + """ + Relationships to containers inside a container group. + + :param containers: Relationships to Containers inside a Container Group. + :type containers: ContainerGroupRelationshipsLink, optional + """ + if containers is not unset: + kwargs["containers"] = containers + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_group_relationships_link.py b/datadog_api_client/v2/model/container_group_relationships_link.py new file mode 100644 index 0000000000..07d765bc62 --- /dev/null +++ b/datadog_api_client/v2/model/container_group_relationships_link.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_group_relationships_links import ContainerGroupRelationshipsLinks + +class ContainerGroupRelationshipsLink(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_group_relationships_links import ContainerGroupRelationshipsLinks + return { + "data": ([str],), + "links": (ContainerGroupRelationshipsLinks,), + } + attribute_map = { + "data": "data", + "links": "links", + } + + def __init__(self_, data: Union[List[str], UnsetType]=unset, links: Union[ContainerGroupRelationshipsLinks, UnsetType]=unset, **kwargs): + """ + Relationships to Containers inside a Container Group. + + :param data: Links data. + :type data: [str], optional + + :param links: Links attributes. + :type links: ContainerGroupRelationshipsLinks, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_group_relationships_links.py b/datadog_api_client/v2/model/container_group_relationships_links.py new file mode 100644 index 0000000000..7703317b44 --- /dev/null +++ b/datadog_api_client/v2/model/container_group_relationships_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerGroupRelationshipsLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "related": (str,), + } + attribute_map = { + "related": "related", + } + + def __init__(self_, related: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param related: Link to related containers. + :type related: str, optional + """ + if related is not unset: + kwargs["related"] = related + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_group_type.py b/datadog_api_client/v2/model/container_group_type.py new file mode 100644 index 0000000000..041f75fa0b --- /dev/null +++ b/datadog_api_client/v2/model/container_group_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ContainerGroupType(ModelSimple): + """ + Type of container group. + + :param value: If omitted defaults to "container_group". Must be one of ["container_group"]. + :type value: str + """ + + allowed_values = { + "container_group", + } + CONTAINER_GROUP: ClassVar["ContainerGroupType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ContainerGroupType.CONTAINER_GROUP = ContainerGroupType("container_group") diff --git a/datadog_api_client/v2/model/container_image.py b/datadog_api_client/v2/model/container_image.py new file mode 100644 index 0000000000..d3d1ed6977 --- /dev/null +++ b/datadog_api_client/v2/model/container_image.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_image_attributes import ContainerImageAttributes + from datadog_api_client.v2.model.container_image_type import ContainerImageType + +class ContainerImage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_image_attributes import ContainerImageAttributes + from datadog_api_client.v2.model.container_image_type import ContainerImageType + return { + "attributes": (ContainerImageAttributes,), + "id": (str,), + "type": (ContainerImageType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ContainerImageAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ContainerImageType, UnsetType]=unset, **kwargs): + """ + Container Image object. + + :param attributes: Attributes for a Container Image. + :type attributes: ContainerImageAttributes, optional + + :param id: Container Image ID. + :type id: str, optional + + :param type: Type of Container Image. + :type type: ContainerImageType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_attributes.py b/datadog_api_client/v2/model/container_image_attributes.py new file mode 100644 index 0000000000..372e000883 --- /dev/null +++ b/datadog_api_client/v2/model/container_image_attributes.py @@ -0,0 +1,166 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_image_flavor import ContainerImageFlavor + from datadog_api_client.v2.model.container_image_vulnerabilities import ContainerImageVulnerabilities + +class ContainerImageAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_image_flavor import ContainerImageFlavor + from datadog_api_client.v2.model.container_image_vulnerabilities import ContainerImageVulnerabilities + return { + "container_count": (int,), + "image_flavors": ([ContainerImageFlavor],), + "image_tags": ([str],), + "images_built_at": ([str],), + "name": (str,), + "os_architectures": ([str],), + "os_names": ([str],), + "os_versions": ([str],), + "published_at": (str,), + "registry": (str,), + "repo_digest": (str,), + "repository": (str,), + "short_image": (str,), + "sizes": ([int],), + "sources": ([str],), + "tags": ([str],), + "vulnerability_count": (ContainerImageVulnerabilities,), + } + attribute_map = { + "container_count": "container_count", + "image_flavors": "image_flavors", + "image_tags": "image_tags", + "images_built_at": "images_built_at", + "name": "name", + "os_architectures": "os_architectures", + "os_names": "os_names", + "os_versions": "os_versions", + "published_at": "published_at", + "registry": "registry", + "repo_digest": "repo_digest", + "repository": "repository", + "short_image": "short_image", + "sizes": "sizes", + "sources": "sources", + "tags": "tags", + "vulnerability_count": "vulnerability_count", + } + + def __init__(self_, container_count: Union[int, UnsetType]=unset, image_flavors: Union[List[ContainerImageFlavor], UnsetType]=unset, image_tags: Union[List[str], UnsetType]=unset, images_built_at: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, os_architectures: Union[List[str], UnsetType]=unset, os_names: Union[List[str], UnsetType]=unset, os_versions: Union[List[str], UnsetType]=unset, published_at: Union[str, UnsetType]=unset, registry: Union[str, UnsetType]=unset, repo_digest: Union[str, UnsetType]=unset, repository: Union[str, UnsetType]=unset, short_image: Union[str, UnsetType]=unset, sizes: Union[List[int], UnsetType]=unset, sources: Union[List[str], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, vulnerability_count: Union[ContainerImageVulnerabilities, UnsetType]=unset, **kwargs): + """ + Attributes for a Container Image. + + :param container_count: Number of containers running the image. + :type container_count: int, optional + + :param image_flavors: List of platform-specific images associated with the image record. + The list contains more than 1 entry for multi-architecture images. + :type image_flavors: [ContainerImageFlavor], optional + + :param image_tags: List of image tags associated with the Container Image. + :type image_tags: [str], optional + + :param images_built_at: List of build times associated with the Container Image. + The list contains more than 1 entry for multi-architecture images. + :type images_built_at: [str], optional + + :param name: Name of the Container Image. + :type name: str, optional + + :param os_architectures: List of Operating System architectures supported by the Container Image. + :type os_architectures: [str], optional + + :param os_names: List of Operating System names supported by the Container Image. + :type os_names: [str], optional + + :param os_versions: List of Operating System versions supported by the Container Image. + :type os_versions: [str], optional + + :param published_at: Time the image was pushed to the container registry. + :type published_at: str, optional + + :param registry: Registry the Container Image was pushed to. + :type registry: str, optional + + :param repo_digest: Digest of the compressed image manifest. + :type repo_digest: str, optional + + :param repository: Repository where the Container Image is stored in. + :type repository: str, optional + + :param short_image: Short version of the Container Image name. + :type short_image: str, optional + + :param sizes: List of size for each platform-specific image associated with the image record. + The list contains more than 1 entry for multi-architecture images. + :type sizes: [int], optional + + :param sources: List of sources where the Container Image was collected from. + :type sources: [str], optional + + :param tags: List of tags associated with the Container Image. + :type tags: [str], optional + + :param vulnerability_count: Vulnerability counts associated with the Container Image. + :type vulnerability_count: ContainerImageVulnerabilities, optional + """ + if container_count is not unset: + kwargs["container_count"] = container_count + if image_flavors is not unset: + kwargs["image_flavors"] = image_flavors + if image_tags is not unset: + kwargs["image_tags"] = image_tags + if images_built_at is not unset: + kwargs["images_built_at"] = images_built_at + if name is not unset: + kwargs["name"] = name + if os_architectures is not unset: + kwargs["os_architectures"] = os_architectures + if os_names is not unset: + kwargs["os_names"] = os_names + if os_versions is not unset: + kwargs["os_versions"] = os_versions + if published_at is not unset: + kwargs["published_at"] = published_at + if registry is not unset: + kwargs["registry"] = registry + if repo_digest is not unset: + kwargs["repo_digest"] = repo_digest + if repository is not unset: + kwargs["repository"] = repository + if short_image is not unset: + kwargs["short_image"] = short_image + if sizes is not unset: + kwargs["sizes"] = sizes + if sources is not unset: + kwargs["sources"] = sources + if tags is not unset: + kwargs["tags"] = tags + if vulnerability_count is not unset: + kwargs["vulnerability_count"] = vulnerability_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_flavor.py b/datadog_api_client/v2/model/container_image_flavor.py new file mode 100644 index 0000000000..6d2b7d9eb2 --- /dev/null +++ b/datadog_api_client/v2/model/container_image_flavor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerImageFlavor(ModelNormal): + @cached_property + def openapi_types(_): + return { + "built_at": (str,), + "os_architecture": (str,), + "os_name": (str,), + "os_version": (str,), + "size": (int,), + } + attribute_map = { + "built_at": "built_at", + "os_architecture": "os_architecture", + "os_name": "os_name", + "os_version": "os_version", + "size": "size", + } + + def __init__(self_, built_at: Union[str, UnsetType]=unset, os_architecture: Union[str, UnsetType]=unset, os_name: Union[str, UnsetType]=unset, os_version: Union[str, UnsetType]=unset, size: Union[int, UnsetType]=unset, **kwargs): + """ + Container Image breakdown by supported platform. + + :param built_at: Time the platform-specific Container Image was built. + :type built_at: str, optional + + :param os_architecture: Operating System architecture supported by the Container Image. + :type os_architecture: str, optional + + :param os_name: Operating System name supported by the Container Image. + :type os_name: str, optional + + :param os_version: Operating System version supported by the Container Image. + :type os_version: str, optional + + :param size: Size of the platform-specific Container Image. + :type size: int, optional + """ + if built_at is not unset: + kwargs["built_at"] = built_at + if os_architecture is not unset: + kwargs["os_architecture"] = os_architecture + if os_name is not unset: + kwargs["os_name"] = os_name + if os_version is not unset: + kwargs["os_version"] = os_version + if size is not unset: + kwargs["size"] = size + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_group.py b/datadog_api_client/v2/model/container_image_group.py new file mode 100644 index 0000000000..14075a69a1 --- /dev/null +++ b/datadog_api_client/v2/model/container_image_group.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_image_group_attributes import ContainerImageGroupAttributes + from datadog_api_client.v2.model.container_image_group_relationships import ContainerImageGroupRelationships + from datadog_api_client.v2.model.container_image_group_type import ContainerImageGroupType + +class ContainerImageGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_image_group_attributes import ContainerImageGroupAttributes + from datadog_api_client.v2.model.container_image_group_relationships import ContainerImageGroupRelationships + from datadog_api_client.v2.model.container_image_group_type import ContainerImageGroupType + return { + "attributes": (ContainerImageGroupAttributes,), + "id": (str,), + "relationships": (ContainerImageGroupRelationships,), + "type": (ContainerImageGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[ContainerImageGroupAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ContainerImageGroupRelationships, UnsetType]=unset, type: Union[ContainerImageGroupType, UnsetType]=unset, **kwargs): + """ + Container Image Group object. + + :param attributes: Attributes for a Container Image Group. + :type attributes: ContainerImageGroupAttributes, optional + + :param id: Container Image Group ID. + :type id: str, optional + + :param relationships: Relationships inside a Container Image Group. + :type relationships: ContainerImageGroupRelationships, optional + + :param type: Type of Container Image Group. + :type type: ContainerImageGroupType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_group_attributes.py b/datadog_api_client/v2/model/container_image_group_attributes.py new file mode 100644 index 0000000000..93b4f4b2ad --- /dev/null +++ b/datadog_api_client/v2/model/container_image_group_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerImageGroupAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "name": (str,), + "tags": (dict,), + } + attribute_map = { + "count": "count", + "name": "name", + "tags": "tags", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, tags: Union[dict, UnsetType]=unset, **kwargs): + """ + Attributes for a Container Image Group. + + :param count: Number of Container Images in the group. + :type count: int, optional + + :param name: Name of the Container Image group. + :type name: str, optional + + :param tags: Tags from the group name parsed in key/value format. + :type tags: dict, optional + """ + if count is not unset: + kwargs["count"] = count + if name is not unset: + kwargs["name"] = name + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_group_images_relationships_link.py b/datadog_api_client/v2/model/container_image_group_images_relationships_link.py new file mode 100644 index 0000000000..5c896ed239 --- /dev/null +++ b/datadog_api_client/v2/model/container_image_group_images_relationships_link.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_image_group_relationships_links import ContainerImageGroupRelationshipsLinks + +class ContainerImageGroupImagesRelationshipsLink(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_image_group_relationships_links import ContainerImageGroupRelationshipsLinks + return { + "data": ([str],), + "links": (ContainerImageGroupRelationshipsLinks,), + } + attribute_map = { + "data": "data", + "links": "links", + } + + def __init__(self_, data: Union[List[str], UnsetType]=unset, links: Union[ContainerImageGroupRelationshipsLinks, UnsetType]=unset, **kwargs): + """ + Relationships to Container Images inside a Container Image Group. + + :param data: Links data. + :type data: [str], optional + + :param links: Links attributes. + :type links: ContainerImageGroupRelationshipsLinks, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_group_relationships.py b/datadog_api_client/v2/model/container_image_group_relationships.py new file mode 100644 index 0000000000..783a7b1c66 --- /dev/null +++ b/datadog_api_client/v2/model/container_image_group_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_image_group_images_relationships_link import ContainerImageGroupImagesRelationshipsLink + +class ContainerImageGroupRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_image_group_images_relationships_link import ContainerImageGroupImagesRelationshipsLink + return { + "container_images": (ContainerImageGroupImagesRelationshipsLink,), + } + attribute_map = { + "container_images": "container_images", + } + + def __init__(self_, container_images: Union[ContainerImageGroupImagesRelationshipsLink, UnsetType]=unset, **kwargs): + """ + Relationships inside a Container Image Group. + + :param container_images: Relationships to Container Images inside a Container Image Group. + :type container_images: ContainerImageGroupImagesRelationshipsLink, optional + """ + if container_images is not unset: + kwargs["container_images"] = container_images + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_group_relationships_links.py b/datadog_api_client/v2/model/container_image_group_relationships_links.py new file mode 100644 index 0000000000..8ee0740293 --- /dev/null +++ b/datadog_api_client/v2/model/container_image_group_relationships_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerImageGroupRelationshipsLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "related": (str,), + } + attribute_map = { + "related": "related", + } + + def __init__(self_, related: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param related: Link to related Container Images. + :type related: str, optional + """ + if related is not unset: + kwargs["related"] = related + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_group_type.py b/datadog_api_client/v2/model/container_image_group_type.py new file mode 100644 index 0000000000..fc222537de --- /dev/null +++ b/datadog_api_client/v2/model/container_image_group_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ContainerImageGroupType(ModelSimple): + """ + Type of Container Image Group. + + :param value: If omitted defaults to "container_image_group". Must be one of ["container_image_group"]. + :type value: str + """ + + allowed_values = { + "container_image_group", + } + CONTAINER_IMAGE_GROUP: ClassVar["ContainerImageGroupType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ContainerImageGroupType.CONTAINER_IMAGE_GROUP = ContainerImageGroupType("container_image_group") diff --git a/datadog_api_client/v2/model/container_image_item.py b/datadog_api_client/v2/model/container_image_item.py new file mode 100644 index 0000000000..24941711eb --- /dev/null +++ b/datadog_api_client/v2/model/container_image_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerImageItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Possible Container Image models. + + :param attributes: Attributes for a Container Image. + :type attributes: ContainerImageAttributes, optional + + :param id: Container Image ID. + :type id: str, optional + + :param type: Type of Container Image. + :type type: ContainerImageType, optional + + :param relationships: Relationships inside a Container Image Group. + :type relationships: ContainerImageGroupRelationships, 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.container_image import ContainerImage + from datadog_api_client.v2.model.container_image_group import ContainerImageGroup + return { + "oneOf": [ + ContainerImage, + ContainerImageGroup, + ], + } diff --git a/datadog_api_client/v2/model/container_image_meta.py b/datadog_api_client/v2/model/container_image_meta.py new file mode 100644 index 0000000000..c5dbd6f375 --- /dev/null +++ b/datadog_api_client/v2/model/container_image_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_image_meta_page import ContainerImageMetaPage + +class ContainerImageMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_image_meta_page import ContainerImageMetaPage + return { + "pagination": (ContainerImageMetaPage,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[ContainerImageMetaPage, UnsetType]=unset, **kwargs): + """ + Response metadata object. + + :param pagination: Paging attributes. + :type pagination: ContainerImageMetaPage, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_meta_page.py b/datadog_api_client/v2/model/container_image_meta_page.py new file mode 100644 index 0000000000..5e2973e15b --- /dev/null +++ b/datadog_api_client/v2/model/container_image_meta_page.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_image_meta_page_type import ContainerImageMetaPageType + +class ContainerImageMetaPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 10000, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_image_meta_page_type import ContainerImageMetaPageType + return { + "cursor": (str,), + "limit": (int,), + "next_cursor": (str,), + "prev_cursor": (str, none_type), + "total": (int,), + "type": (ContainerImageMetaPageType,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + "next_cursor": "next_cursor", + "prev_cursor": "prev_cursor", + "total": "total", + "type": "type", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_cursor: Union[str, UnsetType]=unset, prev_cursor: Union[str, none_type, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[ContainerImageMetaPageType, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param cursor: The cursor used to get the current results, if any. + :type cursor: str, optional + + :param limit: Number of results returned + :type limit: int, optional + + :param next_cursor: The cursor used to get the next results, if any. + :type next_cursor: str, optional + + :param prev_cursor: The cursor used to get the previous results, if any. + :type prev_cursor: str, none_type, optional + + :param total: Total number of records that match the query. + :type total: int, optional + + :param type: Type of Container Image pagination. + :type type: ContainerImageMetaPageType, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + if next_cursor is not unset: + kwargs["next_cursor"] = next_cursor + if prev_cursor is not unset: + kwargs["prev_cursor"] = prev_cursor + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_image_meta_page_type.py b/datadog_api_client/v2/model/container_image_meta_page_type.py new file mode 100644 index 0000000000..ef3a7a49f7 --- /dev/null +++ b/datadog_api_client/v2/model/container_image_meta_page_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ContainerImageMetaPageType(ModelSimple): + """ + Type of Container Image pagination. + + :param value: If omitted defaults to "cursor_limit". Must be one of ["cursor_limit"]. + :type value: str + """ + + allowed_values = { + "cursor_limit", + } + CURSOR_LIMIT: ClassVar["ContainerImageMetaPageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ContainerImageMetaPageType.CURSOR_LIMIT = ContainerImageMetaPageType("cursor_limit") diff --git a/datadog_api_client/v2/model/container_image_type.py b/datadog_api_client/v2/model/container_image_type.py new file mode 100644 index 0000000000..bf7beddaa2 --- /dev/null +++ b/datadog_api_client/v2/model/container_image_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ContainerImageType(ModelSimple): + """ + Type of Container Image. + + :param value: If omitted defaults to "container_image". Must be one of ["container_image"]. + :type value: str + """ + + allowed_values = { + "container_image", + } + CONTAINER_IMAGE: ClassVar["ContainerImageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ContainerImageType.CONTAINER_IMAGE = ContainerImageType("container_image") diff --git a/datadog_api_client/v2/model/container_image_vulnerabilities.py b/datadog_api_client/v2/model/container_image_vulnerabilities.py new file mode 100644 index 0000000000..7cb5c4259b --- /dev/null +++ b/datadog_api_client/v2/model/container_image_vulnerabilities.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerImageVulnerabilities(ModelNormal): + @cached_property + def openapi_types(_): + return { + "asset_id": (str,), + "critical": (int,), + "high": (int,), + "low": (int,), + "medium": (int,), + "none": (int,), + "unknown": (int,), + } + attribute_map = { + "asset_id": "asset_id", + "critical": "critical", + "high": "high", + "low": "low", + "medium": "medium", + "none": "none", + "unknown": "unknown", + } + + def __init__(self_, asset_id: Union[str, UnsetType]=unset, critical: Union[int, UnsetType]=unset, high: Union[int, UnsetType]=unset, low: Union[int, UnsetType]=unset, medium: Union[int, UnsetType]=unset, none: Union[int, UnsetType]=unset, unknown: Union[int, UnsetType]=unset, **kwargs): + """ + Vulnerability counts associated with the Container Image. + + :param asset_id: ID of the Container Image. + :type asset_id: str, optional + + :param critical: Number of vulnerabilities with CVSS Critical severity. + :type critical: int, optional + + :param high: Number of vulnerabilities with CVSS High severity. + :type high: int, optional + + :param low: Number of vulnerabilities with CVSS Low severity. + :type low: int, optional + + :param medium: Number of vulnerabilities with CVSS Medium severity. + :type medium: int, optional + + :param none: Number of vulnerabilities with CVSS None severity. + :type none: int, optional + + :param unknown: Number of vulnerabilities with an unknown CVSS severity. + :type unknown: int, optional + """ + if asset_id is not unset: + kwargs["asset_id"] = asset_id + if critical is not unset: + kwargs["critical"] = critical + if high is not unset: + kwargs["high"] = high + if low is not unset: + kwargs["low"] = low + if medium is not unset: + kwargs["medium"] = medium + if none is not unset: + kwargs["none"] = none + if unknown is not unset: + kwargs["unknown"] = unknown + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_images_response.py b/datadog_api_client/v2/model/container_images_response.py new file mode 100644 index 0000000000..ad262c8dd6 --- /dev/null +++ b/datadog_api_client/v2/model/container_images_response.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_image_item import ContainerImageItem + from datadog_api_client.v2.model.container_images_response_links import ContainerImagesResponseLinks + from datadog_api_client.v2.model.container_image_meta import ContainerImageMeta + from datadog_api_client.v2.model.container_image import ContainerImage + from datadog_api_client.v2.model.container_image_group import ContainerImageGroup + +class ContainerImagesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_image_item import ContainerImageItem + from datadog_api_client.v2.model.container_images_response_links import ContainerImagesResponseLinks + from datadog_api_client.v2.model.container_image_meta import ContainerImageMeta + return { + "data": ([ContainerImageItem],), + "links": (ContainerImagesResponseLinks,), + "meta": (ContainerImageMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[Union[ContainerImageItem, ContainerImage, ContainerImageGroup]], UnsetType]=unset, links: Union[ContainerImagesResponseLinks, UnsetType]=unset, meta: Union[ContainerImageMeta, UnsetType]=unset, **kwargs): + """ + List of Container Images. + + :param data: Array of Container Image objects. + :type data: [ContainerImageItem], optional + + :param links: Pagination links. + :type links: ContainerImagesResponseLinks, optional + + :param meta: Response metadata object. + :type meta: ContainerImageMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_images_response_links.py b/datadog_api_client/v2/model/container_images_response_links.py new file mode 100644 index 0000000000..9682ff0903 --- /dev/null +++ b/datadog_api_client/v2/model/container_images_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerImagesResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str, none_type), + "next": (str, none_type), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, none_type, UnsetType]=unset, next: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links. + + :param first: Link to the first page. + :type first: str, optional + + :param last: Link to the last page. + :type last: str, none_type, optional + + :param next: Link to the next page. + :type next: str, none_type, optional + + :param prev: Link to previous page. + :type prev: str, none_type, optional + + :param self: Link to current page. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_item.py b/datadog_api_client/v2/model/container_item.py new file mode 100644 index 0000000000..1cc5bc7925 --- /dev/null +++ b/datadog_api_client/v2/model/container_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainerItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Possible Container models. + + :param attributes: Attributes for a container. + :type attributes: ContainerAttributes, optional + + :param id: Container ID. + :type id: str, optional + + :param type: Type of container. + :type type: ContainerType, optional + + :param relationships: Relationships to containers inside a container group. + :type relationships: ContainerGroupRelationships, 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.container import Container + from datadog_api_client.v2.model.container_group import ContainerGroup + return { + "oneOf": [ + Container, + ContainerGroup, + ], + } diff --git a/datadog_api_client/v2/model/container_meta.py b/datadog_api_client/v2/model/container_meta.py new file mode 100644 index 0000000000..8e62dd1bb8 --- /dev/null +++ b/datadog_api_client/v2/model/container_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_meta_page import ContainerMetaPage + +class ContainerMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_meta_page import ContainerMetaPage + return { + "pagination": (ContainerMetaPage,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[ContainerMetaPage, UnsetType]=unset, **kwargs): + """ + Response metadata object. + + :param pagination: Paging attributes. + :type pagination: ContainerMetaPage, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_meta_page.py b/datadog_api_client/v2/model/container_meta_page.py new file mode 100644 index 0000000000..89566fc572 --- /dev/null +++ b/datadog_api_client/v2/model/container_meta_page.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_meta_page_type import ContainerMetaPageType + +class ContainerMetaPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 10000, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_meta_page_type import ContainerMetaPageType + return { + "cursor": (str,), + "limit": (int,), + "next_cursor": (str,), + "prev_cursor": (str, none_type), + "total": (int,), + "type": (ContainerMetaPageType,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + "next_cursor": "next_cursor", + "prev_cursor": "prev_cursor", + "total": "total", + "type": "type", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_cursor: Union[str, UnsetType]=unset, prev_cursor: Union[str, none_type, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[ContainerMetaPageType, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param cursor: The cursor used to get the current results, if any. + :type cursor: str, optional + + :param limit: Number of results returned + :type limit: int, optional + + :param next_cursor: The cursor used to get the next results, if any. + :type next_cursor: str, optional + + :param prev_cursor: The cursor used to get the previous results, if any. + :type prev_cursor: str, none_type, optional + + :param total: Total number of records that match the query. + :type total: int, optional + + :param type: Type of Container pagination. + :type type: ContainerMetaPageType, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + if next_cursor is not unset: + kwargs["next_cursor"] = next_cursor + if prev_cursor is not unset: + kwargs["prev_cursor"] = prev_cursor + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/container_meta_page_type.py b/datadog_api_client/v2/model/container_meta_page_type.py new file mode 100644 index 0000000000..cc17d726a8 --- /dev/null +++ b/datadog_api_client/v2/model/container_meta_page_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ContainerMetaPageType(ModelSimple): + """ + Type of Container pagination. + + :param value: If omitted defaults to "cursor_limit". Must be one of ["cursor_limit"]. + :type value: str + """ + + allowed_values = { + "cursor_limit", + } + CURSOR_LIMIT: ClassVar["ContainerMetaPageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ContainerMetaPageType.CURSOR_LIMIT = ContainerMetaPageType("cursor_limit") diff --git a/datadog_api_client/v2/model/container_scalar_query.py b/datadog_api_client/v2/model/container_scalar_query.py new file mode 100644 index 0000000000..9144cb36c4 --- /dev/null +++ b/datadog_api_client/v2/model/container_scalar_query.py @@ -0,0 +1,118 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metrics_aggregator import MetricsAggregator + from datadog_api_client.v2.model.container_data_source import ContainerDataSource + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + +class ContainerScalarQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metrics_aggregator import MetricsAggregator + from datadog_api_client.v2.model.container_data_source import ContainerDataSource + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + return { + "aggregator": (MetricsAggregator,), + "cross_org_uuids": ([str],), + "data_source": (ContainerDataSource,), + "is_normalized_cpu": (bool,), + "limit": (int,), + "metric": (str,), + "name": (str,), + "sort": (QuerySortOrder,), + "tag_filters": ([str],), + "text_filter": (str,), + } + attribute_map = { + "aggregator": "aggregator", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "is_normalized_cpu": "is_normalized_cpu", + "limit": "limit", + "metric": "metric", + "name": "name", + "sort": "sort", + "tag_filters": "tag_filters", + "text_filter": "text_filter", + } + + def __init__(self_, data_source: ContainerDataSource, metric: str, name: str, aggregator: Union[MetricsAggregator, UnsetType]=unset, cross_org_uuids: Union[List[str], UnsetType]=unset, is_normalized_cpu: Union[bool, UnsetType]=unset, limit: Union[int, UnsetType]=unset, sort: Union[QuerySortOrder, UnsetType]=unset, tag_filters: Union[List[str], UnsetType]=unset, text_filter: Union[str, UnsetType]=unset, **kwargs): + """ + A query for container-level metrics such as CPU and memory usage. + + :param aggregator: The type of aggregation that can be performed on metrics-based queries. + :type aggregator: MetricsAggregator, optional + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source for container-level infrastructure metrics. + :type data_source: ContainerDataSource + + :param is_normalized_cpu: Whether CPU metrics should be normalized by core count. + :type is_normalized_cpu: bool, optional + + :param limit: Maximum number of results to return. + :type limit: int, optional + + :param metric: The container metric to query. + :type metric: str + + :param name: The variable name for use in formulas. + :type name: str + + :param sort: Direction of sort. + :type sort: QuerySortOrder, optional + + :param tag_filters: Tag filters to narrow down containers. + :type tag_filters: [str], optional + + :param text_filter: A full-text search filter to match container names. + :type text_filter: str, optional + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if is_normalized_cpu is not unset: + kwargs["is_normalized_cpu"] = is_normalized_cpu + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + if tag_filters is not unset: + kwargs["tag_filters"] = tag_filters + if text_filter is not unset: + kwargs["text_filter"] = text_filter + super().__init__(kwargs) + + + self_.data_source = data_source + self_.metric = metric + self_.name = name diff --git a/datadog_api_client/v2/model/container_timeseries_query.py b/datadog_api_client/v2/model/container_timeseries_query.py new file mode 100644 index 0000000000..5114b7abe9 --- /dev/null +++ b/datadog_api_client/v2/model/container_timeseries_query.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_data_source import ContainerDataSource + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + +class ContainerTimeseriesQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_data_source import ContainerDataSource + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + return { + "cross_org_uuids": ([str],), + "data_source": (ContainerDataSource,), + "is_normalized_cpu": (bool,), + "limit": (int,), + "metric": (str,), + "name": (str,), + "sort": (QuerySortOrder,), + "tag_filters": ([str],), + "text_filter": (str,), + } + attribute_map = { + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "is_normalized_cpu": "is_normalized_cpu", + "limit": "limit", + "metric": "metric", + "name": "name", + "sort": "sort", + "tag_filters": "tag_filters", + "text_filter": "text_filter", + } + + def __init__(self_, data_source: ContainerDataSource, metric: str, name: str, cross_org_uuids: Union[List[str], UnsetType]=unset, is_normalized_cpu: Union[bool, UnsetType]=unset, limit: Union[int, UnsetType]=unset, sort: Union[QuerySortOrder, UnsetType]=unset, tag_filters: Union[List[str], UnsetType]=unset, text_filter: Union[str, UnsetType]=unset, **kwargs): + """ + A query for container-level metrics such as CPU and memory usage. + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source for container-level infrastructure metrics. + :type data_source: ContainerDataSource + + :param is_normalized_cpu: Whether CPU metrics should be normalized by core count. + :type is_normalized_cpu: bool, optional + + :param limit: Maximum number of results to return. + :type limit: int, optional + + :param metric: The container metric to query. + :type metric: str + + :param name: The variable name for use in formulas. + :type name: str + + :param sort: Direction of sort. + :type sort: QuerySortOrder, optional + + :param tag_filters: Tag filters to narrow down containers. + :type tag_filters: [str], optional + + :param text_filter: A full-text search filter to match container names. + :type text_filter: str, optional + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if is_normalized_cpu is not unset: + kwargs["is_normalized_cpu"] = is_normalized_cpu + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + if tag_filters is not unset: + kwargs["tag_filters"] = tag_filters + if text_filter is not unset: + kwargs["text_filter"] = text_filter + super().__init__(kwargs) + + + self_.data_source = data_source + self_.metric = metric + self_.name = name diff --git a/datadog_api_client/v2/model/container_type.py b/datadog_api_client/v2/model/container_type.py new file mode 100644 index 0000000000..f8b4d34dd1 --- /dev/null +++ b/datadog_api_client/v2/model/container_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ContainerType(ModelSimple): + """ + Type of container. + + :param value: If omitted defaults to "container". Must be one of ["container"]. + :type value: str + """ + + allowed_values = { + "container", + } + CONTAINER: ClassVar["ContainerType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ContainerType.CONTAINER = ContainerType("container") diff --git a/datadog_api_client/v2/model/containers_response.py b/datadog_api_client/v2/model/containers_response.py new file mode 100644 index 0000000000..f307a54ae6 --- /dev/null +++ b/datadog_api_client/v2/model/containers_response.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.container_item import ContainerItem + from datadog_api_client.v2.model.containers_response_links import ContainersResponseLinks + from datadog_api_client.v2.model.container_meta import ContainerMeta + from datadog_api_client.v2.model.container import Container + from datadog_api_client.v2.model.container_group import ContainerGroup + +class ContainersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.container_item import ContainerItem + from datadog_api_client.v2.model.containers_response_links import ContainersResponseLinks + from datadog_api_client.v2.model.container_meta import ContainerMeta + return { + "data": ([ContainerItem],), + "links": (ContainersResponseLinks,), + "meta": (ContainerMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[Union[ContainerItem, Container, ContainerGroup]], UnsetType]=unset, links: Union[ContainersResponseLinks, UnsetType]=unset, meta: Union[ContainerMeta, UnsetType]=unset, **kwargs): + """ + List of containers. + + :param data: Array of Container objects. + :type data: [ContainerItem], optional + + :param links: Pagination links. + :type links: ContainersResponseLinks, optional + + :param meta: Response metadata object. + :type meta: ContainerMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/containers_response_links.py b/datadog_api_client/v2/model/containers_response_links.py new file mode 100644 index 0000000000..9809b41792 --- /dev/null +++ b/datadog_api_client/v2/model/containers_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ContainersResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str, none_type), + "next": (str, none_type), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, none_type, UnsetType]=unset, next: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links. + + :param first: Link to the first page. + :type first: str, optional + + :param last: Link to the last page. + :type last: str, none_type, optional + + :param next: Link to the next page. + :type next: str, none_type, optional + + :param prev: Link to previous page. + :type prev: str, none_type, optional + + :param self: Link to current page. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/content_encoding.py b/datadog_api_client/v2/model/content_encoding.py new file mode 100644 index 0000000000..ea6cb15694 --- /dev/null +++ b/datadog_api_client/v2/model/content_encoding.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ContentEncoding(ModelSimple): + """ + HTTP header used to compress the media-type. + + :param value: Must be one of ["identity", "gzip", "deflate"]. + :type value: str + """ + + allowed_values = { + "identity", + "gzip", + "deflate", + } + IDENTITY: ClassVar["ContentEncoding"] + GZIP: ClassVar["ContentEncoding"] + DEFLATE: ClassVar["ContentEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ContentEncoding.IDENTITY = ContentEncoding("identity") +ContentEncoding.GZIP = ContentEncoding("gzip") +ContentEncoding.DEFLATE = ContentEncoding("deflate") diff --git a/datadog_api_client/v2/model/control_notification_event_setting.py b/datadog_api_client/v2/model/control_notification_event_setting.py new file mode 100644 index 0000000000..aaf58c2ac1 --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_event_setting.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.control_notification_target import ControlNotificationTarget + +class ControlNotificationEventSetting(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.control_notification_target import ControlNotificationTarget + return { + "enabled": (bool,), + "event_type": (str,), + "targets": ([ControlNotificationTarget],), + } + attribute_map = { + "enabled": "enabled", + "event_type": "event_type", + "targets": "targets", + } + + def __init__(self_, enabled: bool, event_type: str, targets: List[ControlNotificationTarget], **kwargs): + """ + The notification settings for a single event type on a control. + + :param enabled: Whether notifications are enabled for this event type. + :type enabled: bool + + :param event_type: The event type the notification settings apply to, such as ``new_detection``. + :type event_type: str + + :param targets: The destinations that receive notifications for an event type. + :type targets: [ControlNotificationTarget] + """ + super().__init__(kwargs) + + + self_.enabled = enabled + self_.event_type = event_type + self_.targets = targets diff --git a/datadog_api_client/v2/model/control_notification_settings_attributes.py b/datadog_api_client/v2/model/control_notification_settings_attributes.py new file mode 100644 index 0000000000..c0e0500ba0 --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_settings_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.control_notification_event_setting import ControlNotificationEventSetting + +class ControlNotificationSettingsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.control_notification_event_setting import ControlNotificationEventSetting + return { + "event_settings": ([ControlNotificationEventSetting],), + } + attribute_map = { + "event_settings": "event_settings", + } + + def __init__(self_, event_settings: List[ControlNotificationEventSetting], **kwargs): + """ + The attributes of a governance control's notification settings. + + :param event_settings: The notification settings for each supported event type on the control. + :type event_settings: [ControlNotificationEventSetting] + """ + super().__init__(kwargs) + + + self_.event_settings = event_settings diff --git a/datadog_api_client/v2/model/control_notification_settings_data.py b/datadog_api_client/v2/model/control_notification_settings_data.py new file mode 100644 index 0000000000..150667ba92 --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_settings_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.control_notification_settings_attributes import ControlNotificationSettingsAttributes + from datadog_api_client.v2.model.control_notification_settings_resource_type import ControlNotificationSettingsResourceType + +class ControlNotificationSettingsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.control_notification_settings_attributes import ControlNotificationSettingsAttributes + from datadog_api_client.v2.model.control_notification_settings_resource_type import ControlNotificationSettingsResourceType + return { + "attributes": (ControlNotificationSettingsAttributes,), + "id": (str,), + "type": (ControlNotificationSettingsResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ControlNotificationSettingsAttributes, id: str, type: ControlNotificationSettingsResourceType, **kwargs): + """ + A control notification settings resource. + + :param attributes: The attributes of a governance control's notification settings. + :type attributes: ControlNotificationSettingsAttributes + + :param id: The detection type the notification settings apply to. + :type id: str + + :param type: Control notification settings resource type. + :type type: ControlNotificationSettingsResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/control_notification_settings_resource_type.py b/datadog_api_client/v2/model/control_notification_settings_resource_type.py new file mode 100644 index 0000000000..bfef69cf49 --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_settings_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ControlNotificationSettingsResourceType(ModelSimple): + """ + Control notification settings resource type. + + :param value: If omitted defaults to "control_notification_settings". Must be one of ["control_notification_settings"]. + :type value: str + """ + + allowed_values = { + "control_notification_settings", + } + CONTROL_NOTIFICATION_SETTINGS: ClassVar["ControlNotificationSettingsResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ControlNotificationSettingsResourceType.CONTROL_NOTIFICATION_SETTINGS = ControlNotificationSettingsResourceType("control_notification_settings") diff --git a/datadog_api_client/v2/model/control_notification_settings_response.py b/datadog_api_client/v2/model/control_notification_settings_response.py new file mode 100644 index 0000000000..bd0d3942ab --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_settings_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.control_notification_settings_data import ControlNotificationSettingsData + +class ControlNotificationSettingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.control_notification_settings_data import ControlNotificationSettingsData + return { + "data": (ControlNotificationSettingsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ControlNotificationSettingsData, **kwargs): + """ + The notification settings for a governance control. + + :param data: A control notification settings resource. + :type data: ControlNotificationSettingsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/control_notification_settings_update_attributes.py b/datadog_api_client/v2/model/control_notification_settings_update_attributes.py new file mode 100644 index 0000000000..532af6af0a --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_settings_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.control_notification_event_setting import ControlNotificationEventSetting + +class ControlNotificationSettingsUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.control_notification_event_setting import ControlNotificationEventSetting + return { + "event_settings": ([ControlNotificationEventSetting],), + } + attribute_map = { + "event_settings": "event_settings", + } + + def __init__(self_, event_settings: Union[List[ControlNotificationEventSetting], UnsetType]=unset, **kwargs): + """ + The attributes of a governance control's notification settings that can be updated. + + :param event_settings: The notification settings for each supported event type on the control. + :type event_settings: [ControlNotificationEventSetting], optional + """ + if event_settings is not unset: + kwargs["event_settings"] = event_settings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/control_notification_settings_update_data.py b/datadog_api_client/v2/model/control_notification_settings_update_data.py new file mode 100644 index 0000000000..115c926c58 --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_settings_update_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.control_notification_settings_update_attributes import ControlNotificationSettingsUpdateAttributes + from datadog_api_client.v2.model.control_notification_settings_resource_type import ControlNotificationSettingsResourceType + +class ControlNotificationSettingsUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.control_notification_settings_update_attributes import ControlNotificationSettingsUpdateAttributes + from datadog_api_client.v2.model.control_notification_settings_resource_type import ControlNotificationSettingsResourceType + return { + "attributes": (ControlNotificationSettingsUpdateAttributes,), + "type": (ControlNotificationSettingsResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: ControlNotificationSettingsResourceType, attributes: Union[ControlNotificationSettingsUpdateAttributes, UnsetType]=unset, **kwargs): + """ + The data of a control notification settings update request. + + :param attributes: The attributes of a governance control's notification settings that can be updated. + :type attributes: ControlNotificationSettingsUpdateAttributes, optional + + :param type: Control notification settings resource type. + :type type: ControlNotificationSettingsResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/control_notification_settings_update_request.py b/datadog_api_client/v2/model/control_notification_settings_update_request.py new file mode 100644 index 0000000000..01211b9f5b --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_settings_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.control_notification_settings_update_data import ControlNotificationSettingsUpdateData + +class ControlNotificationSettingsUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.control_notification_settings_update_data import ControlNotificationSettingsUpdateData + return { + "data": (ControlNotificationSettingsUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ControlNotificationSettingsUpdateData, **kwargs): + """ + A request to update the notification settings for a governance control. + + :param data: The data of a control notification settings update request. + :type data: ControlNotificationSettingsUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/control_notification_target.py b/datadog_api_client/v2/model/control_notification_target.py new file mode 100644 index 0000000000..6b2c90adf6 --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.control_notification_target_type import ControlNotificationTargetType + +class ControlNotificationTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.control_notification_target_type import ControlNotificationTargetType + return { + "handle": (str,), + "type": (ControlNotificationTargetType,), + } + attribute_map = { + "handle": "handle", + "type": "type", + } + + def __init__(self_, handle: str, type: ControlNotificationTargetType, **kwargs): + """ + A destination that receives notifications for an event type. + + :param handle: The destination handle, such as an email address, Slack channel, or user handle. + :type handle: str + + :param type: The type of notification destination. + :type type: ControlNotificationTargetType + """ + super().__init__(kwargs) + + + self_.handle = handle + self_.type = type diff --git a/datadog_api_client/v2/model/control_notification_target_type.py b/datadog_api_client/v2/model/control_notification_target_type.py new file mode 100644 index 0000000000..c274d78b2a --- /dev/null +++ b/datadog_api_client/v2/model/control_notification_target_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ControlNotificationTargetType(ModelSimple): + """ + The type of notification destination. + + :param value: Must be one of ["email", "slack", "at_mention", "case"]. + :type value: str + """ + + allowed_values = { + "email", + "slack", + "at_mention", + "case", + } + EMAIL: ClassVar["ControlNotificationTargetType"] + SLACK: ClassVar["ControlNotificationTargetType"] + AT_MENTION: ClassVar["ControlNotificationTargetType"] + CASE: ClassVar["ControlNotificationTargetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ControlNotificationTargetType.EMAIL = ControlNotificationTargetType("email") +ControlNotificationTargetType.SLACK = ControlNotificationTargetType("slack") +ControlNotificationTargetType.AT_MENTION = ControlNotificationTargetType("at_mention") +ControlNotificationTargetType.CASE = ControlNotificationTargetType("case") diff --git a/datadog_api_client/v2/model/convert_job_results_to_signals_attributes.py b/datadog_api_client/v2/model/convert_job_results_to_signals_attributes.py new file mode 100644 index 0000000000..16f301f20a --- /dev/null +++ b/datadog_api_client/v2/model/convert_job_results_to_signals_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + +class ConvertJobResultsToSignalsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + return { + "job_result_ids": ([str],), + "notifications": ([str],), + "signal_message": (str,), + "signal_severity": (SecurityMonitoringRuleSeverity,), + } + attribute_map = { + "job_result_ids": "jobResultIds", + "notifications": "notifications", + "signal_message": "signalMessage", + "signal_severity": "signalSeverity", + } + + def __init__(self_, job_result_ids: List[str], notifications: List[str], signal_message: str, signal_severity: SecurityMonitoringRuleSeverity, **kwargs): + """ + Attributes for converting historical job results to signals. + + :param job_result_ids: Job result IDs. + :type job_result_ids: [str] + + :param notifications: Notifications sent. + :type notifications: [str] + + :param signal_message: Message of generated signals. + :type signal_message: str + + :param signal_severity: Severity of the Security Signal. + :type signal_severity: SecurityMonitoringRuleSeverity + """ + super().__init__(kwargs) + + + self_.job_result_ids = job_result_ids + self_.notifications = notifications + self_.signal_message = signal_message + self_.signal_severity = signal_severity diff --git a/datadog_api_client/v2/model/convert_job_results_to_signals_data.py b/datadog_api_client/v2/model/convert_job_results_to_signals_data.py new file mode 100644 index 0000000000..176380e11d --- /dev/null +++ b/datadog_api_client/v2/model/convert_job_results_to_signals_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.convert_job_results_to_signals_attributes import ConvertJobResultsToSignalsAttributes + from datadog_api_client.v2.model.convert_job_results_to_signals_data_type import ConvertJobResultsToSignalsDataType + +class ConvertJobResultsToSignalsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.convert_job_results_to_signals_attributes import ConvertJobResultsToSignalsAttributes + from datadog_api_client.v2.model.convert_job_results_to_signals_data_type import ConvertJobResultsToSignalsDataType + return { + "attributes": (ConvertJobResultsToSignalsAttributes,), + "type": (ConvertJobResultsToSignalsDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[ConvertJobResultsToSignalsAttributes, UnsetType]=unset, type: Union[ConvertJobResultsToSignalsDataType, UnsetType]=unset, **kwargs): + """ + Data for converting historical job results to signals. + + :param attributes: Attributes for converting historical job results to signals. + :type attributes: ConvertJobResultsToSignalsAttributes, optional + + :param type: Type of payload. + :type type: ConvertJobResultsToSignalsDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/convert_job_results_to_signals_data_type.py b/datadog_api_client/v2/model/convert_job_results_to_signals_data_type.py new file mode 100644 index 0000000000..68f4910bd7 --- /dev/null +++ b/datadog_api_client/v2/model/convert_job_results_to_signals_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ConvertJobResultsToSignalsDataType(ModelSimple): + """ + Type of payload. + + :param value: If omitted defaults to "historicalDetectionsJobResultSignalConversion". Must be one of ["historicalDetectionsJobResultSignalConversion"]. + :type value: str + """ + + allowed_values = { + "historicalDetectionsJobResultSignalConversion", + } + HISTORICALDETECTIONSJOBRESULTSIGNALCONVERSION: ClassVar["ConvertJobResultsToSignalsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ConvertJobResultsToSignalsDataType.HISTORICALDETECTIONSJOBRESULTSIGNALCONVERSION = ConvertJobResultsToSignalsDataType("historicalDetectionsJobResultSignalConversion") diff --git a/datadog_api_client/v2/model/convert_job_results_to_signals_request.py b/datadog_api_client/v2/model/convert_job_results_to_signals_request.py new file mode 100644 index 0000000000..2813a8fb31 --- /dev/null +++ b/datadog_api_client/v2/model/convert_job_results_to_signals_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.convert_job_results_to_signals_data import ConvertJobResultsToSignalsData + +class ConvertJobResultsToSignalsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.convert_job_results_to_signals_data import ConvertJobResultsToSignalsData + return { + "data": (ConvertJobResultsToSignalsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ConvertJobResultsToSignalsData, UnsetType]=unset, **kwargs): + """ + Request for converting historical job results to signals. + + :param data: Data for converting historical job results to signals. + :type data: ConvertJobResultsToSignalsData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_aggregation_type.py b/datadog_api_client/v2/model/cost_aggregation_type.py new file mode 100644 index 0000000000..25b2eb6392 --- /dev/null +++ b/datadog_api_client/v2/model/cost_aggregation_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostAggregationType(ModelSimple): + """ + Controls how costs are aggregated when using `start_date`. The `cumulative` option returns month-to-date running totals. + + :param value: If omitted defaults to "cumulative". Must be one of ["cumulative"]. + :type value: str + """ + + allowed_values = { + "cumulative", + } + CUMULATIVE: ClassVar["CostAggregationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostAggregationType.CUMULATIVE = CostAggregationType("cumulative") diff --git a/datadog_api_client/v2/model/cost_anomalies_response.py b/datadog_api_client/v2/model/cost_anomalies_response.py new file mode 100644 index 0000000000..b9c8b77927 --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomalies_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_anomalies_response_data import CostAnomaliesResponseData + +class CostAnomaliesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_anomalies_response_data import CostAnomaliesResponseData + return { + "data": (CostAnomaliesResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CostAnomaliesResponseData, UnsetType]=unset, **kwargs): + """ + Response object containing a list of detected Cloud Cost Management anomalies and aggregated totals. + + :param data: Resource wrapper for the list of cost anomalies and aggregated totals. + :type data: CostAnomaliesResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_anomalies_response_data.py b/datadog_api_client/v2/model/cost_anomalies_response_data.py new file mode 100644 index 0000000000..eb098f2168 --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomalies_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_anomalies_response_data_attributes import CostAnomaliesResponseDataAttributes + from datadog_api_client.v2.model.cost_anomalies_response_data_type import CostAnomaliesResponseDataType + +class CostAnomaliesResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_anomalies_response_data_attributes import CostAnomaliesResponseDataAttributes + from datadog_api_client.v2.model.cost_anomalies_response_data_type import CostAnomaliesResponseDataType + return { + "attributes": (CostAnomaliesResponseDataAttributes,), + "id": (str,), + "type": (CostAnomaliesResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CostAnomaliesResponseDataAttributes, id: str, type: CostAnomaliesResponseDataType, **kwargs): + """ + Resource wrapper for the list of cost anomalies and aggregated totals. + + :param attributes: Cost anomaly results and aggregated totals for the queried window. + :type attributes: CostAnomaliesResponseDataAttributes + + :param id: Static identifier of the cost anomalies collection resource. + :type id: str + + :param type: Type of the cost anomalies collection resource. Must be ``anomalies``. + :type type: CostAnomaliesResponseDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_anomalies_response_data_attributes.py b/datadog_api_client/v2/model/cost_anomalies_response_data_attributes.py new file mode 100644 index 0000000000..c8403377dd --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomalies_response_data_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_anomaly import CostAnomaly + +class CostAnomaliesResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_anomaly import CostAnomaly + return { + "anomalies": ([CostAnomaly],), + "avg_daily_anomalous_cost": (float,), + "total_actual_cost": (float,), + "total_anomalous_cost": (float,), + "total_count": (int,), + } + attribute_map = { + "anomalies": "anomalies", + "avg_daily_anomalous_cost": "avg_daily_anomalous_cost", + "total_actual_cost": "total_actual_cost", + "total_anomalous_cost": "total_anomalous_cost", + "total_count": "total_count", + } + + def __init__(self_, anomalies: List[CostAnomaly], avg_daily_anomalous_cost: float, total_actual_cost: float, total_anomalous_cost: float, total_count: int, **kwargs): + """ + Cost anomaly results and aggregated totals for the queried window. + + :param anomalies: The list of cost anomalies that match the request. + :type anomalies: [CostAnomaly] + + :param avg_daily_anomalous_cost: Average daily anomalous cost change across the queried window. + :type avg_daily_anomalous_cost: float + + :param total_actual_cost: Total actual cost spent across the queried window for the matching providers. + :type total_actual_cost: float + + :param total_anomalous_cost: Sum of the anomalous cost change across all returned anomalies. + :type total_anomalous_cost: float + + :param total_count: Total number of anomalies that match the request. + :type total_count: int + """ + super().__init__(kwargs) + + + self_.anomalies = anomalies + self_.avg_daily_anomalous_cost = avg_daily_anomalous_cost + self_.total_actual_cost = total_actual_cost + self_.total_anomalous_cost = total_anomalous_cost + self_.total_count = total_count diff --git a/datadog_api_client/v2/model/cost_anomalies_response_data_type.py b/datadog_api_client/v2/model/cost_anomalies_response_data_type.py new file mode 100644 index 0000000000..b8f4661a7d --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomalies_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostAnomaliesResponseDataType(ModelSimple): + """ + Type of the cost anomalies collection resource. Must be `anomalies`. + + :param value: If omitted defaults to "anomalies". Must be one of ["anomalies"]. + :type value: str + """ + + allowed_values = { + "anomalies", + } + ANOMALIES: ClassVar["CostAnomaliesResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostAnomaliesResponseDataType.ANOMALIES = CostAnomaliesResponseDataType("anomalies") diff --git a/datadog_api_client/v2/model/cost_anomaly.py b/datadog_api_client/v2/model/cost_anomaly.py new file mode 100644 index 0000000000..933dbdf7d2 --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomaly.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_anomaly_correlated_tags import CostAnomalyCorrelatedTags + from datadog_api_client.v2.model.cost_anomaly_dimensions import CostAnomalyDimensions + from datadog_api_client.v2.model.cost_anomaly_dismissal import CostAnomalyDismissal + +class CostAnomaly(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_anomaly_correlated_tags import CostAnomalyCorrelatedTags + from datadog_api_client.v2.model.cost_anomaly_dimensions import CostAnomalyDimensions + from datadog_api_client.v2.model.cost_anomaly_dismissal import CostAnomalyDismissal + return { + "actual_cost": (float,), + "anomalous_cost_change": (float,), + "anomaly_end": (int,), + "anomaly_start": (int,), + "correlated_tags": (CostAnomalyCorrelatedTags,), + "dimensions": (CostAnomalyDimensions,), + "dismissal": (CostAnomalyDismissal,), + "max_cost": (float,), + "provider": (str,), + "query": (str,), + "uuid": (str,), + } + attribute_map = { + "actual_cost": "actual_cost", + "anomalous_cost_change": "anomalous_cost_change", + "anomaly_end": "anomaly_end", + "anomaly_start": "anomaly_start", + "correlated_tags": "correlated_tags", + "dimensions": "dimensions", + "dismissal": "dismissal", + "max_cost": "max_cost", + "provider": "provider", + "query": "query", + "uuid": "uuid", + } + + def __init__(self_, actual_cost: float, anomalous_cost_change: float, anomaly_end: int, anomaly_start: int, correlated_tags: Union[CostAnomalyCorrelatedTags, none_type], dimensions: CostAnomalyDimensions, max_cost: float, provider: str, query: str, uuid: str, dismissal: Union[CostAnomalyDismissal, UnsetType]=unset, **kwargs): + """ + A single detected Cloud Cost Management anomaly. + + :param actual_cost: Actual cost incurred during the anomaly window. + :type actual_cost: float + + :param anomalous_cost_change: Anomalous cost change relative to the expected baseline. + :type anomalous_cost_change: float + + :param anomaly_end: Anomaly end timestamp in Unix milliseconds. + :type anomaly_end: int + + :param anomaly_start: Anomaly start timestamp in Unix milliseconds. + :type anomaly_start: int + + :param correlated_tags: Map of correlated tag keys to the list of correlated tag values. + :type correlated_tags: CostAnomalyCorrelatedTags, none_type + + :param dimensions: Map of cost dimension keys to their values for the anomaly grouping. + :type dimensions: CostAnomalyDimensions + + :param dismissal: Resolution metadata for an anomaly that has been dismissed. + :type dismissal: CostAnomalyDismissal, optional + + :param max_cost: Maximum cost observed during the anomaly window. + :type max_cost: float + + :param provider: Cloud or SaaS provider associated with the anomaly (for example ``aws`` , ``gcp`` , ``azure`` ). + :type provider: str + + :param query: The metrics query that detected the anomaly. + :type query: str + + :param uuid: The unique identifier of the anomaly. + :type uuid: str + """ + if dismissal is not unset: + kwargs["dismissal"] = dismissal + super().__init__(kwargs) + + + self_.actual_cost = actual_cost + self_.anomalous_cost_change = anomalous_cost_change + self_.anomaly_end = anomaly_end + self_.anomaly_start = anomaly_start + self_.correlated_tags = correlated_tags + self_.dimensions = dimensions + self_.max_cost = max_cost + self_.provider = provider + self_.query = query + self_.uuid = uuid diff --git a/datadog_api_client/v2/model/cost_anomaly_correlated_tags.py b/datadog_api_client/v2/model/cost_anomaly_correlated_tags.py new file mode 100644 index 0000000000..a18f4b2046 --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomaly_correlated_tags.py @@ -0,0 +1,37 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostAnomalyCorrelatedTags(ModelNormal): + @cached_property + def additional_properties_type(_): + return ([str],) + _nullable = True + + def __init__(self_, **kwargs): + """ + Map of correlated tag keys to the list of correlated tag values. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_anomaly_dimensions.py b/datadog_api_client/v2/model/cost_anomaly_dimensions.py new file mode 100644 index 0000000000..154af313a0 --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomaly_dimensions.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostAnomalyDimensions(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + + def __init__(self_, **kwargs): + """ + Map of cost dimension keys to their values for the anomaly grouping. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_anomaly_dismissal.py b/datadog_api_client/v2/model/cost_anomaly_dismissal.py new file mode 100644 index 0000000000..0a5f79f92e --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomaly_dismissal.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostAnomalyDismissal(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cause": (str,), + "dismissal_id": (str,), + "message": (str,), + "updated_at": (int,), + "updated_by": (str,), + } + attribute_map = { + "cause": "cause", + "dismissal_id": "dismissal_id", + "message": "message", + "updated_at": "updated_at", + "updated_by": "updated_by", + } + + def __init__(self_, cause: str, dismissal_id: str, message: str, updated_at: int, updated_by: str, **kwargs): + """ + Resolution metadata for an anomaly that has been dismissed. + + :param cause: Reason the anomaly was dismissed. + :type cause: str + + :param dismissal_id: Unique identifier of the dismissal record. + :type dismissal_id: str + + :param message: Optional message explaining the dismissal. + :type message: str + + :param updated_at: Timestamp of the last dismissal update in Unix milliseconds. + :type updated_at: int + + :param updated_by: Identifier of the user that last updated the dismissal. + :type updated_by: str + """ + super().__init__(kwargs) + + + self_.cause = cause + self_.dismissal_id = dismissal_id + self_.message = message + self_.updated_at = updated_at + self_.updated_by = updated_by diff --git a/datadog_api_client/v2/model/cost_anomaly_response.py b/datadog_api_client/v2/model/cost_anomaly_response.py new file mode 100644 index 0000000000..eea00132e8 --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomaly_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_anomaly_response_data import CostAnomalyResponseData + +class CostAnomalyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_anomaly_response_data import CostAnomalyResponseData + return { + "data": (CostAnomalyResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CostAnomalyResponseData, UnsetType]=unset, **kwargs): + """ + Response object containing a single Cloud Cost Management anomaly. + + :param data: Resource wrapper for a single cost anomaly. + :type data: CostAnomalyResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_anomaly_response_data.py b/datadog_api_client/v2/model/cost_anomaly_response_data.py new file mode 100644 index 0000000000..463eecb4d9 --- /dev/null +++ b/datadog_api_client/v2/model/cost_anomaly_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_anomaly import CostAnomaly + from datadog_api_client.v2.model.cost_anomalies_response_data_type import CostAnomaliesResponseDataType + +class CostAnomalyResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_anomaly import CostAnomaly + from datadog_api_client.v2.model.cost_anomalies_response_data_type import CostAnomaliesResponseDataType + return { + "attributes": (CostAnomaly,), + "id": (str,), + "type": (CostAnomaliesResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CostAnomaly, id: str, type: CostAnomaliesResponseDataType, **kwargs): + """ + Resource wrapper for a single cost anomaly. + + :param attributes: A single detected Cloud Cost Management anomaly. + :type attributes: CostAnomaly + + :param id: The unique identifier of the anomaly. + :type id: str + + :param type: Type of the cost anomalies collection resource. Must be ``anomalies``. + :type type: CostAnomaliesResponseDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_attribution_aggregates_body.py b/datadog_api_client/v2/model/cost_attribution_aggregates_body.py new file mode 100644 index 0000000000..6ed3868154 --- /dev/null +++ b/datadog_api_client/v2/model/cost_attribution_aggregates_body.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostAttributionAggregatesBody(ModelNormal): + @cached_property + def openapi_types(_): + return { + "agg_type": (str,), + "field": (str,), + "value": (float,), + } + attribute_map = { + "agg_type": "agg_type", + "field": "field", + "value": "value", + } + + def __init__(self_, agg_type: Union[str, UnsetType]=unset, field: Union[str, UnsetType]=unset, value: Union[float, UnsetType]=unset, **kwargs): + """ + The object containing the aggregates. + + :param agg_type: The aggregate type. + :type agg_type: str, optional + + :param field: The field. + :type field: str, optional + + :param value: The value for a given field. + :type value: float, optional + """ + if agg_type is not unset: + kwargs["agg_type"] = agg_type + if field is not unset: + kwargs["field"] = field + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_attribution_tag_names.py b/datadog_api_client/v2/model/cost_attribution_tag_names.py new file mode 100644 index 0000000000..afa62cd7a7 --- /dev/null +++ b/datadog_api_client/v2/model/cost_attribution_tag_names.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostAttributionTagNames(ModelNormal): + @cached_property + def additional_properties_type(_): + return ([str],) + _nullable = True + + def __init__(self_, **kwargs): + """ + Tag keys and values. + A ``null`` value here means that the requested tag breakdown cannot be applied because it does not match the `tags + configured for usage attribution `_. + In this scenario the API returns the total cost, not broken down by tags. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_attribution_type.py b/datadog_api_client/v2/model/cost_attribution_type.py new file mode 100644 index 0000000000..3ce98037ba --- /dev/null +++ b/datadog_api_client/v2/model/cost_attribution_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostAttributionType(ModelSimple): + """ + Type of cost attribution data. + + :param value: If omitted defaults to "cost_by_tag". Must be one of ["cost_by_tag"]. + :type value: str + """ + + allowed_values = { + "cost_by_tag", + } + COST_BY_TAG: ClassVar["CostAttributionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostAttributionType.COST_BY_TAG = CostAttributionType("cost_by_tag") diff --git a/datadog_api_client/v2/model/cost_by_org.py b/datadog_api_client/v2/model/cost_by_org.py new file mode 100644 index 0000000000..c4b22a7e3d --- /dev/null +++ b/datadog_api_client/v2/model/cost_by_org.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_by_org_attributes import CostByOrgAttributes + from datadog_api_client.v2.model.cost_by_org_type import CostByOrgType + +class CostByOrg(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_by_org_attributes import CostByOrgAttributes + from datadog_api_client.v2.model.cost_by_org_type import CostByOrgType + return { + "attributes": (CostByOrgAttributes,), + "id": (str,), + "type": (CostByOrgType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CostByOrgAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CostByOrgType, UnsetType]=unset, **kwargs): + """ + Cost data. + + :param attributes: Cost attributes data. + :type attributes: CostByOrgAttributes, optional + + :param id: Unique ID of the response. + :type id: str, optional + + :param type: Type of cost data. + :type type: CostByOrgType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_by_org_attributes.py b/datadog_api_client/v2/model/cost_by_org_attributes.py new file mode 100644 index 0000000000..7c8d873210 --- /dev/null +++ b/datadog_api_client/v2/model/cost_by_org_attributes.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.chargeback_breakdown import ChargebackBreakdown + +class CostByOrgAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.chargeback_breakdown import ChargebackBreakdown + return { + "account_name": (str,), + "account_public_id": (str,), + "charges": ([ChargebackBreakdown],), + "date": (datetime,), + "org_name": (str,), + "public_id": (str,), + "region": (str,), + "total_cost": (float,), + } + attribute_map = { + "account_name": "account_name", + "account_public_id": "account_public_id", + "charges": "charges", + "date": "date", + "org_name": "org_name", + "public_id": "public_id", + "region": "region", + "total_cost": "total_cost", + } + + def __init__(self_, account_name: Union[str, UnsetType]=unset, account_public_id: Union[str, UnsetType]=unset, charges: Union[List[ChargebackBreakdown], UnsetType]=unset, date: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, total_cost: Union[float, UnsetType]=unset, **kwargs): + """ + Cost attributes data. + + :param account_name: The account name. + :type account_name: str, optional + + :param account_public_id: The account public ID. + :type account_public_id: str, optional + + :param charges: List of charges data reported for the requested month. + :type charges: [ChargebackBreakdown], optional + + :param date: The month requested. + :type date: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param region: The region of the Datadog instance that the organization belongs to. + :type region: str, optional + + :param total_cost: The total cost of products for the month. + :type total_cost: float, optional + """ + if account_name is not unset: + kwargs["account_name"] = account_name + if account_public_id is not unset: + kwargs["account_public_id"] = account_public_id + if charges is not unset: + kwargs["charges"] = charges + if date is not unset: + kwargs["date"] = date + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if region is not unset: + kwargs["region"] = region + if total_cost is not unset: + kwargs["total_cost"] = total_cost + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_by_org_response.py b/datadog_api_client/v2/model/cost_by_org_response.py new file mode 100644 index 0000000000..3b919d4f76 --- /dev/null +++ b/datadog_api_client/v2/model/cost_by_org_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_by_org import CostByOrg + +class CostByOrgResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_by_org import CostByOrg + return { + "data": ([CostByOrg],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[CostByOrg], UnsetType]=unset, **kwargs): + """ + Chargeback Summary response. + + :param data: Response containing Chargeback Summary. + :type data: [CostByOrg], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_by_org_type.py b/datadog_api_client/v2/model/cost_by_org_type.py new file mode 100644 index 0000000000..538a73f20e --- /dev/null +++ b/datadog_api_client/v2/model/cost_by_org_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostByOrgType(ModelSimple): + """ + Type of cost data. + + :param value: If omitted defaults to "cost_by_org". Must be one of ["cost_by_org"]. + :type value: str + """ + + allowed_values = { + "cost_by_org", + } + COST_BY_ORG: ClassVar["CostByOrgType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostByOrgType.COST_BY_ORG = CostByOrgType("cost_by_org") diff --git a/datadog_api_client/v2/model/cost_currency.py b/datadog_api_client/v2/model/cost_currency.py new file mode 100644 index 0000000000..f721475a67 --- /dev/null +++ b/datadog_api_client/v2/model/cost_currency.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_currency_type import CostCurrencyType + +class CostCurrency(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_currency_type import CostCurrencyType + return { + "id": (str,), + "type": (CostCurrencyType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: CostCurrencyType, **kwargs): + """ + A Cloud Cost Management billing currency entry. + + :param id: The currency code (for example, ``USD`` ). + :type id: str + + :param type: Type of the Cloud Cost Management billing currency resource. + :type type: CostCurrencyType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_currency_response.py b/datadog_api_client/v2/model/cost_currency_response.py new file mode 100644 index 0000000000..f8d9527374 --- /dev/null +++ b/datadog_api_client/v2/model/cost_currency_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_currency import CostCurrency + +class CostCurrencyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_currency import CostCurrency + return { + "data": ([CostCurrency],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CostCurrency], **kwargs): + """ + The dominant Cloud Cost Management billing currency for the requested period. The ``data`` array contains at most one entry, and is empty when no currency data is available. + + :param data: The dominant billing currency. Empty when no data is available, or a single entry otherwise. + :type data: [CostCurrency] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_currency_type.py b/datadog_api_client/v2/model/cost_currency_type.py new file mode 100644 index 0000000000..75e15b9569 --- /dev/null +++ b/datadog_api_client/v2/model/cost_currency_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostCurrencyType(ModelSimple): + """ + Type of the Cloud Cost Management billing currency resource. + + :param value: If omitted defaults to "cost_currency". Must be one of ["cost_currency"]. + :type value: str + """ + + allowed_values = { + "cost_currency", + } + COST_CURRENCY: ClassVar["CostCurrencyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostCurrencyType.COST_CURRENCY = CostCurrencyType("cost_currency") diff --git a/datadog_api_client/v2/model/cost_metric.py b/datadog_api_client/v2/model/cost_metric.py new file mode 100644 index 0000000000..6b26ec361d --- /dev/null +++ b/datadog_api_client/v2/model/cost_metric.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_metric_type import CostMetricType + +class CostMetric(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_metric_type import CostMetricType + return { + "id": (str,), + "type": (CostMetricType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: CostMetricType, **kwargs): + """ + A Cloud Cost Management metric that has data for the requested period. + + :param id: The metric name, for example ``aws.cost.net.amortized``. + :type id: str + + :param type: Type of the Cloud Cost Management available metric resource. + :type type: CostMetricType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_metric_type.py b/datadog_api_client/v2/model/cost_metric_type.py new file mode 100644 index 0000000000..2af4811fe9 --- /dev/null +++ b/datadog_api_client/v2/model/cost_metric_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostMetricType(ModelSimple): + """ + Type of the Cloud Cost Management available metric resource. + + :param value: If omitted defaults to "cost_metric". Must be one of ["cost_metric"]. + :type value: str + """ + + allowed_values = { + "cost_metric", + } + COST_METRIC: ClassVar["CostMetricType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostMetricType.COST_METRIC = CostMetricType("cost_metric") diff --git a/datadog_api_client/v2/model/cost_metrics_response.py b/datadog_api_client/v2/model/cost_metrics_response.py new file mode 100644 index 0000000000..94529cce21 --- /dev/null +++ b/datadog_api_client/v2/model/cost_metrics_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_metric import CostMetric + +class CostMetricsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_metric import CostMetric + return { + "data": ([CostMetric],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CostMetric], **kwargs): + """ + List of available Cloud Cost Management metrics for the requested period. + + :param data: List of available metrics. + :type data: [CostMetric] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_orchestrator.py b/datadog_api_client/v2/model/cost_orchestrator.py new file mode 100644 index 0000000000..ac169d4fd1 --- /dev/null +++ b/datadog_api_client/v2/model/cost_orchestrator.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_orchestrator_type import CostOrchestratorType + +class CostOrchestrator(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_orchestrator_type import CostOrchestratorType + return { + "id": (str,), + "type": (CostOrchestratorType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: CostOrchestratorType, **kwargs): + """ + A container orchestrator detected in Cloud Cost Management data. + + :param id: The orchestrator name, for example ``kubernetes`` or ``ecs``. + :type id: str + + :param type: Type of the Cloud Cost Management orchestrator resource. + :type type: CostOrchestratorType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_orchestrator_type.py b/datadog_api_client/v2/model/cost_orchestrator_type.py new file mode 100644 index 0000000000..35efc06af3 --- /dev/null +++ b/datadog_api_client/v2/model/cost_orchestrator_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostOrchestratorType(ModelSimple): + """ + Type of the Cloud Cost Management orchestrator resource. + + :param value: If omitted defaults to "cost_orchestrator". Must be one of ["cost_orchestrator"]. + :type value: str + """ + + allowed_values = { + "cost_orchestrator", + } + COST_ORCHESTRATOR: ClassVar["CostOrchestratorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostOrchestratorType.COST_ORCHESTRATOR = CostOrchestratorType("cost_orchestrator") diff --git a/datadog_api_client/v2/model/cost_orchestrators_response.py b/datadog_api_client/v2/model/cost_orchestrators_response.py new file mode 100644 index 0000000000..c0d5b2d73c --- /dev/null +++ b/datadog_api_client/v2/model/cost_orchestrators_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_orchestrator import CostOrchestrator + +class CostOrchestratorsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_orchestrator import CostOrchestrator + return { + "data": ([CostOrchestrator],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CostOrchestrator], **kwargs): + """ + List of container orchestrators detected in Cloud Cost Management data for the requested period. + + :param data: List of detected container orchestrators. + :type data: [CostOrchestrator] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_recommendation_array.py b/datadog_api_client/v2/model/cost_recommendation_array.py new file mode 100644 index 0000000000..1e6a18447f --- /dev/null +++ b/datadog_api_client/v2/model/cost_recommendation_array.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_recommendation_data import CostRecommendationData + from datadog_api_client.v2.model.recommendations_page_meta import RecommendationsPageMeta + +class CostRecommendationArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_recommendation_data import CostRecommendationData + from datadog_api_client.v2.model.recommendations_page_meta import RecommendationsPageMeta + return { + "data": ([CostRecommendationData],), + "meta": (RecommendationsPageMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[CostRecommendationData], meta: Union[RecommendationsPageMeta, UnsetType]=unset, **kwargs): + """ + A page of cost recommendations with pagination metadata. + + :param data: The list of cost recommendations on this page. + :type data: [CostRecommendationData] + + :param meta: Top-level JSON:API meta object for paginated cost recommendation responses. + :type meta: RecommendationsPageMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_recommendation_data.py b/datadog_api_client/v2/model/cost_recommendation_data.py new file mode 100644 index 0000000000..c9473a18d5 --- /dev/null +++ b/datadog_api_client/v2/model/cost_recommendation_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_recommendation_data_attributes import CostRecommendationDataAttributes + from datadog_api_client.v2.model.cost_recommendation_data_type import CostRecommendationDataType + +class CostRecommendationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_recommendation_data_attributes import CostRecommendationDataAttributes + from datadog_api_client.v2.model.cost_recommendation_data_type import CostRecommendationDataType + return { + "attributes": (CostRecommendationDataAttributes,), + "id": (str,), + "type": (CostRecommendationDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: CostRecommendationDataType, attributes: Union[CostRecommendationDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + A single cost recommendation entry in JSON:API form. + + :param attributes: Attributes describing a single cost recommendation. + :type attributes: CostRecommendationDataAttributes, optional + + :param id: Unique identifier for the recommendation. + :type id: str, optional + + :param type: Recommendation resource type. + :type type: CostRecommendationDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/cost_recommendation_data_attributes.py b/datadog_api_client/v2/model/cost_recommendation_data_attributes.py new file mode 100644 index 0000000000..8f23fe919a --- /dev/null +++ b/datadog_api_client/v2/model/cost_recommendation_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_recommendation_data_attributes_potential_daily_savings import CostRecommendationDataAttributesPotentialDailySavings + +class CostRecommendationDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_recommendation_data_attributes_potential_daily_savings import CostRecommendationDataAttributesPotentialDailySavings + return { + "dd_resource_key": (str,), + "potential_daily_savings": (CostRecommendationDataAttributesPotentialDailySavings,), + "recommendation_type": (str,), + "resource_id": (str,), + "resource_type": (str,), + "tags": ([str],), + } + attribute_map = { + "dd_resource_key": "dd_resource_key", + "potential_daily_savings": "potential_daily_savings", + "recommendation_type": "recommendation_type", + "resource_id": "resource_id", + "resource_type": "resource_type", + "tags": "tags", + } + + def __init__(self_, dd_resource_key: Union[str, UnsetType]=unset, potential_daily_savings: Union[CostRecommendationDataAttributesPotentialDailySavings, UnsetType]=unset, recommendation_type: Union[str, UnsetType]=unset, resource_id: Union[str, UnsetType]=unset, resource_type: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes describing a single cost recommendation. + + :param dd_resource_key: Datadog resource key identifying the recommended resource. + :type dd_resource_key: str, optional + + :param potential_daily_savings: Estimated daily savings if the recommendation is applied. + :type potential_daily_savings: CostRecommendationDataAttributesPotentialDailySavings, optional + + :param recommendation_type: The kind of recommendation (for example, ``terminate`` or ``rightsize`` ). + :type recommendation_type: str, optional + + :param resource_id: Cloud provider identifier of the resource. + :type resource_id: str, optional + + :param resource_type: Resource type (for example, ``aws_ec2_instance`` ). + :type resource_type: str, optional + + :param tags: Tags attached to the recommended resource. + :type tags: [str], optional + """ + if dd_resource_key is not unset: + kwargs["dd_resource_key"] = dd_resource_key + if potential_daily_savings is not unset: + kwargs["potential_daily_savings"] = potential_daily_savings + if recommendation_type is not unset: + kwargs["recommendation_type"] = recommendation_type + if resource_id is not unset: + kwargs["resource_id"] = resource_id + if resource_type is not unset: + kwargs["resource_type"] = resource_type + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_recommendation_data_attributes_potential_daily_savings.py b/datadog_api_client/v2/model/cost_recommendation_data_attributes_potential_daily_savings.py new file mode 100644 index 0000000000..ab616f79ac --- /dev/null +++ b/datadog_api_client/v2/model/cost_recommendation_data_attributes_potential_daily_savings.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostRecommendationDataAttributesPotentialDailySavings(ModelNormal): + @cached_property + def openapi_types(_): + return { + "amount": (float,), + "currency": (str,), + } + attribute_map = { + "amount": "amount", + "currency": "currency", + } + + def __init__(self_, amount: Union[float, UnsetType]=unset, currency: Union[str, UnsetType]=unset, **kwargs): + """ + Estimated daily savings if the recommendation is applied. + + :param amount: Numeric amount of the potential daily savings. + :type amount: float, optional + + :param currency: ISO 4217 currency code for the savings amount. + :type currency: str, optional + """ + if amount is not unset: + kwargs["amount"] = amount + if currency is not unset: + kwargs["currency"] = currency + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_recommendation_data_type.py b/datadog_api_client/v2/model/cost_recommendation_data_type.py new file mode 100644 index 0000000000..52316a624e --- /dev/null +++ b/datadog_api_client/v2/model/cost_recommendation_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostRecommendationDataType(ModelSimple): + """ + Recommendation resource type. + + :param value: If omitted defaults to "recommendation". Must be one of ["recommendation"]. + :type value: str + """ + + allowed_values = { + "recommendation", + } + RECOMMENDATION: ClassVar["CostRecommendationDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostRecommendationDataType.RECOMMENDATION = CostRecommendationDataType("recommendation") diff --git a/datadog_api_client/v2/model/cost_tag.py b/datadog_api_client/v2/model/cost_tag.py new file mode 100644 index 0000000000..8efb24c270 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_attributes import CostTagAttributes + from datadog_api_client.v2.model.cost_tag_type import CostTagType + +class CostTag(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_attributes import CostTagAttributes + from datadog_api_client.v2.model.cost_tag_type import CostTagType + return { + "attributes": (CostTagAttributes,), + "id": (str,), + "type": (CostTagType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CostTagAttributes, id: str, type: CostTagType, **kwargs): + """ + A Cloud Cost Management tag. + + :param attributes: Attributes of a Cloud Cost Management tag. + :type attributes: CostTagAttributes + + :param id: The tag identifier, equal to its ``key:value`` representation. + :type id: str + + :param type: Type of the Cloud Cost Management tag resource. + :type type: CostTagType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_tag_attributes.py b/datadog_api_client/v2/model/cost_tag_attributes.py new file mode 100644 index 0000000000..c1acc334ef --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostTagAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "sources": ([str],), + "value": (str,), + } + attribute_map = { + "sources": "sources", + "value": "value", + } + + def __init__(self_, sources: List[str], value: str, **kwargs): + """ + Attributes of a Cloud Cost Management tag. + + :param sources: List of sources that define this tag. + :type sources: [str] + + :param value: The tag value in ``key:value`` format. + :type value: str + """ + super().__init__(kwargs) + + + self_.sources = sources + self_.value = value diff --git a/datadog_api_client/v2/model/cost_tag_description.py b/datadog_api_client/v2/model/cost_tag_description.py new file mode 100644 index 0000000000..6f0eae37dc --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_description.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_description_attributes import CostTagDescriptionAttributes + from datadog_api_client.v2.model.cost_tag_description_type import CostTagDescriptionType + +class CostTagDescription(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_description_attributes import CostTagDescriptionAttributes + from datadog_api_client.v2.model.cost_tag_description_type import CostTagDescriptionType + return { + "attributes": (CostTagDescriptionAttributes,), + "id": (str,), + "type": (CostTagDescriptionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CostTagDescriptionAttributes, id: str, type: CostTagDescriptionType, **kwargs): + """ + A Cloud Cost Management tag key description, either cross-cloud or scoped to a single cloud provider. + + :param attributes: Human-readable description and metadata attached to a Cloud Cost Management tag key, optionally scoped to a single cloud provider. + :type attributes: CostTagDescriptionAttributes + + :param id: Stable identifier of the tag description. Equals the tag key when the description is the cross-cloud default; encodes both the cloud and the tag key when the description is cloud-specific. + :type id: str + + :param type: Type of the Cloud Cost Management tag description resource. + :type type: CostTagDescriptionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_tag_description_attributes.py b/datadog_api_client/v2/model/cost_tag_description_attributes.py new file mode 100644 index 0000000000..b5f5fc6f1e --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_description_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_description_source import CostTagDescriptionSource + +class CostTagDescriptionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_description_source import CostTagDescriptionSource + return { + "cloud": (str,), + "created_at": (str,), + "description": (str,), + "source": (CostTagDescriptionSource,), + "tag_key": (str,), + "updated_at": (str,), + } + attribute_map = { + "cloud": "cloud", + "created_at": "created_at", + "description": "description", + "source": "source", + "tag_key": "tag_key", + "updated_at": "updated_at", + } + + def __init__(self_, cloud: str, created_at: str, description: str, source: CostTagDescriptionSource, tag_key: str, updated_at: str, **kwargs): + """ + Human-readable description and metadata attached to a Cloud Cost Management tag key, optionally scoped to a single cloud provider. + + :param cloud: Cloud provider this description applies to (for example, ``aws`` ). Empty when the description is the cross-cloud default for the tag key. + :type cloud: str + + :param created_at: Timestamp when the description was created, in RFC 3339 format. + :type created_at: str + + :param description: The human-readable description for the tag key. + :type description: str + + :param source: Origin of the description. ``human`` indicates the description was written by a user, ``ai_generated`` was produced by AI, and ``datadog`` is a default supplied by Datadog. + :type source: CostTagDescriptionSource + + :param tag_key: The tag key this description applies to. + :type tag_key: str + + :param updated_at: Timestamp when the description was last updated, in RFC 3339 format. + :type updated_at: str + """ + super().__init__(kwargs) + + + self_.cloud = cloud + self_.created_at = created_at + self_.description = description + self_.source = source + self_.tag_key = tag_key + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/cost_tag_description_response.py b/datadog_api_client/v2/model/cost_tag_description_response.py new file mode 100644 index 0000000000..f83013046b --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_description_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_description import CostTagDescription + +class CostTagDescriptionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_description import CostTagDescription + return { + "data": (CostTagDescription,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CostTagDescription, **kwargs): + """ + Single Cloud Cost Management tag key description returned by the get-by-key endpoint. + + :param data: A Cloud Cost Management tag key description, either cross-cloud or scoped to a single cloud provider. + :type data: CostTagDescription + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_tag_description_source.py b/datadog_api_client/v2/model/cost_tag_description_source.py new file mode 100644 index 0000000000..b9a2583928 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_description_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostTagDescriptionSource(ModelSimple): + """ + Origin of the description. `human` indicates the description was written by a user, `ai_generated` was produced by AI, and `datadog` is a default supplied by Datadog. + + :param value: Must be one of ["human", "ai_generated", "datadog"]. + :type value: str + """ + + allowed_values = { + "human", + "ai_generated", + "datadog", + } + HUMAN: ClassVar["CostTagDescriptionSource"] + AI_GENERATED: ClassVar["CostTagDescriptionSource"] + DATADOG: ClassVar["CostTagDescriptionSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostTagDescriptionSource.HUMAN = CostTagDescriptionSource("human") +CostTagDescriptionSource.AI_GENERATED = CostTagDescriptionSource("ai_generated") +CostTagDescriptionSource.DATADOG = CostTagDescriptionSource("datadog") diff --git a/datadog_api_client/v2/model/cost_tag_description_type.py b/datadog_api_client/v2/model/cost_tag_description_type.py new file mode 100644 index 0000000000..6690dfbcdf --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_description_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostTagDescriptionType(ModelSimple): + """ + Type of the Cloud Cost Management tag description resource. + + :param value: If omitted defaults to "cost_tag_description". Must be one of ["cost_tag_description"]. + :type value: str + """ + + allowed_values = { + "cost_tag_description", + } + COST_TAG_DESCRIPTION: ClassVar["CostTagDescriptionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostTagDescriptionType.COST_TAG_DESCRIPTION = CostTagDescriptionType("cost_tag_description") diff --git a/datadog_api_client/v2/model/cost_tag_description_upsert_request.py b/datadog_api_client/v2/model/cost_tag_description_upsert_request.py new file mode 100644 index 0000000000..453bf103c5 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_description_upsert_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_description_upsert_request_data import CostTagDescriptionUpsertRequestData + +class CostTagDescriptionUpsertRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_description_upsert_request_data import CostTagDescriptionUpsertRequestData + return { + "data": (CostTagDescriptionUpsertRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CostTagDescriptionUpsertRequestData, **kwargs): + """ + Request body for creating or updating a Cloud Cost Management tag key description. + + :param data: Resource envelope carrying the tag key description being upserted. The ``id`` is informational; the authoritative tag key is taken from the URL path. + :type data: CostTagDescriptionUpsertRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_tag_description_upsert_request_data.py b/datadog_api_client/v2/model/cost_tag_description_upsert_request_data.py new file mode 100644 index 0000000000..de24bcff7a --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_description_upsert_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_description_upsert_request_data_attributes import CostTagDescriptionUpsertRequestDataAttributes + from datadog_api_client.v2.model.cost_tag_description_type import CostTagDescriptionType + +class CostTagDescriptionUpsertRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_description_upsert_request_data_attributes import CostTagDescriptionUpsertRequestDataAttributes + from datadog_api_client.v2.model.cost_tag_description_type import CostTagDescriptionType + return { + "attributes": (CostTagDescriptionUpsertRequestDataAttributes,), + "id": (str,), + "type": (CostTagDescriptionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CostTagDescriptionUpsertRequestDataAttributes, type: CostTagDescriptionType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Resource envelope carrying the tag key description being upserted. The ``id`` is informational; the authoritative tag key is taken from the URL path. + + :param attributes: Mutable attributes set when creating or updating a Cloud Cost Management tag key description. + :type attributes: CostTagDescriptionUpsertRequestDataAttributes + + :param id: Identifier of the tag key the description applies to. Matches the ``tag_key`` path parameter. + :type id: str, optional + + :param type: Type of the Cloud Cost Management tag description resource. + :type type: CostTagDescriptionType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/cost_tag_description_upsert_request_data_attributes.py b/datadog_api_client/v2/model/cost_tag_description_upsert_request_data_attributes.py new file mode 100644 index 0000000000..f6b6954525 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_description_upsert_request_data_attributes.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostTagDescriptionUpsertRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cloud": (str,), + "description": (str,), + } + attribute_map = { + "cloud": "cloud", + "description": "description", + } + + def __init__(self_, description: str, cloud: Union[str, UnsetType]=unset, **kwargs): + """ + Mutable attributes set when creating or updating a Cloud Cost Management tag key description. + + :param cloud: Cloud provider this description applies to (for example, ``aws`` ). Omit to set the cross-cloud default for the tag key. + :type cloud: str, optional + + :param description: The human-readable description for the tag key. + :type description: str + """ + if cloud is not unset: + kwargs["cloud"] = cloud + super().__init__(kwargs) + + + self_.description = description diff --git a/datadog_api_client/v2/model/cost_tag_descriptions_response.py b/datadog_api_client/v2/model/cost_tag_descriptions_response.py new file mode 100644 index 0000000000..6e17ad285a --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_descriptions_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_description import CostTagDescription + +class CostTagDescriptionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_description import CostTagDescription + return { + "data": ([CostTagDescription],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CostTagDescription], **kwargs): + """ + List of Cloud Cost Management tag key descriptions for the organization, optionally filtered to a single cloud provider. + + :param data: List of tag key descriptions. + :type data: [CostTagDescription] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_tag_key.py b/datadog_api_client/v2/model/cost_tag_key.py new file mode 100644 index 0000000000..e6090cdc41 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_key_attributes import CostTagKeyAttributes + from datadog_api_client.v2.model.cost_tag_key_type import CostTagKeyType + +class CostTagKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_key_attributes import CostTagKeyAttributes + from datadog_api_client.v2.model.cost_tag_key_type import CostTagKeyType + return { + "attributes": (CostTagKeyAttributes,), + "id": (str,), + "type": (CostTagKeyType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CostTagKeyAttributes, id: str, type: CostTagKeyType, **kwargs): + """ + A Cloud Cost Management tag key. + + :param attributes: Attributes of a Cloud Cost Management tag key. + :type attributes: CostTagKeyAttributes + + :param id: The tag key identifier. + :type id: str + + :param type: Type of the Cloud Cost Management tag key resource. + :type type: CostTagKeyType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_tag_key_attributes.py b/datadog_api_client/v2/model/cost_tag_key_attributes.py new file mode 100644 index 0000000000..c69008c432 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_key_details import CostTagKeyDetails + +class CostTagKeyAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_key_details import CostTagKeyDetails + return { + "details": (CostTagKeyDetails,), + "sources": ([str],), + "value": (str,), + } + attribute_map = { + "details": "details", + "sources": "sources", + "value": "value", + } + + def __init__(self_, sources: List[str], value: str, details: Union[CostTagKeyDetails, UnsetType]=unset, **kwargs): + """ + Attributes of a Cloud Cost Management tag key. + + :param details: Additional details for a Cloud Cost Management tag key, including its description and example tag values. + :type details: CostTagKeyDetails, optional + + :param sources: List of sources that define this tag key. + :type sources: [str] + + :param value: The tag key name. + :type value: str + """ + if details is not unset: + kwargs["details"] = details + super().__init__(kwargs) + + + self_.sources = sources + self_.value = value diff --git a/datadog_api_client/v2/model/cost_tag_key_details.py b/datadog_api_client/v2/model/cost_tag_key_details.py new file mode 100644 index 0000000000..6ecb49acde --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_details.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostTagKeyDetails(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "tag_values": ([str],), + } + attribute_map = { + "description": "description", + "tag_values": "tag_values", + } + + def __init__(self_, description: str, tag_values: List[str], **kwargs): + """ + Additional details for a Cloud Cost Management tag key, including its description and example tag values. + + :param description: Description of the tag key. + :type description: str + + :param tag_values: Example tag values observed for this tag key. + :type tag_values: [str] + """ + super().__init__(kwargs) + + + self_.description = description + self_.tag_values = tag_values diff --git a/datadog_api_client/v2/model/cost_tag_key_metadata.py b/datadog_api_client/v2/model/cost_tag_key_metadata.py new file mode 100644 index 0000000000..1c05f2dc24 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_metadata.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_key_metadata_attributes import CostTagKeyMetadataAttributes + from datadog_api_client.v2.model.cost_tag_key_metadata_type import CostTagKeyMetadataType + +class CostTagKeyMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_key_metadata_attributes import CostTagKeyMetadataAttributes + from datadog_api_client.v2.model.cost_tag_key_metadata_type import CostTagKeyMetadataType + return { + "attributes": (CostTagKeyMetadataAttributes,), + "id": (str,), + "type": (CostTagKeyMetadataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CostTagKeyMetadataAttributes, id: str, type: CostTagKeyMetadataType, **kwargs): + """ + A Cloud Cost Management tag key metadata entry, aggregating coverage and example values for a single tag key, metric, and period. + + :param attributes: Attributes of a Cloud Cost Management tag key metadata entry. + :type attributes: CostTagKeyMetadataAttributes + + :param id: A composite identifier of the form ``tag_key:metric`` for monthly roll-ups, or ``tag_key:metric:YYYY-MM-DD`` when ``filter[daily]=true``. + :type id: str + + :param type: Type of the Cloud Cost Management tag key metadata resource. + :type type: CostTagKeyMetadataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_tag_key_metadata_attributes.py b/datadog_api_client/v2/model/cost_tag_key_metadata_attributes.py new file mode 100644 index 0000000000..99555d65eb --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_metadata_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_key_metadata_cardinality_by_account import CostTagKeyMetadataCardinalityByAccount + from datadog_api_client.v2.model.cost_tag_key_metadata_top_values_by_account import CostTagKeyMetadataTopValuesByAccount + +class CostTagKeyMetadataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_key_metadata_cardinality_by_account import CostTagKeyMetadataCardinalityByAccount + from datadog_api_client.v2.model.cost_tag_key_metadata_top_values_by_account import CostTagKeyMetadataTopValuesByAccount + return { + "cardinality_by_account": (CostTagKeyMetadataCardinalityByAccount,), + "cost_covered": (float,), + "date": (str,), + "metric": (str,), + "row_count": (int,), + "tag_sources": ([str],), + "top_values_by_account": (CostTagKeyMetadataTopValuesByAccount,), + } + attribute_map = { + "cardinality_by_account": "cardinality_by_account", + "cost_covered": "cost_covered", + "date": "date", + "metric": "metric", + "row_count": "row_count", + "tag_sources": "tag_sources", + "top_values_by_account": "top_values_by_account", + } + + def __init__(self_, cardinality_by_account: CostTagKeyMetadataCardinalityByAccount, cost_covered: float, metric: str, row_count: int, tag_sources: List[str], top_values_by_account: CostTagKeyMetadataTopValuesByAccount, date: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a Cloud Cost Management tag key metadata entry. + + :param cardinality_by_account: Number of unique tag values observed for this tag key, keyed by cloud account ID. + :type cardinality_by_account: CostTagKeyMetadataCardinalityByAccount + + :param cost_covered: Total cost (in the report currency) of cost line items that carry this tag key for the requested period. + :type cost_covered: float + + :param date: The day this row corresponds to, in ``YYYY-MM-DD`` format. Present only when ``filter[daily]=true`` ; omitted for the monthly roll-up returned by default. + :type date: str, optional + + :param metric: The Cloud Cost Management metric this row aggregates, for example ``aws.cost.net.amortized``. + :type metric: str + + :param row_count: Number of cost rows that carry this tag key over the requested period. + :type row_count: int + + :param tag_sources: Origins where this tag key was observed (for example, ``aws-user-defined`` ). + :type tag_sources: [str] + + :param top_values_by_account: A sample of the most frequent tag values observed for this tag key, keyed by cloud account ID. + :type top_values_by_account: CostTagKeyMetadataTopValuesByAccount + """ + if date is not unset: + kwargs["date"] = date + super().__init__(kwargs) + + + self_.cardinality_by_account = cardinality_by_account + self_.cost_covered = cost_covered + self_.metric = metric + self_.row_count = row_count + self_.tag_sources = tag_sources + self_.top_values_by_account = top_values_by_account diff --git a/datadog_api_client/v2/model/cost_tag_key_metadata_cardinality_by_account.py b/datadog_api_client/v2/model/cost_tag_key_metadata_cardinality_by_account.py new file mode 100644 index 0000000000..911ca1f7fa --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_metadata_cardinality_by_account.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostTagKeyMetadataCardinalityByAccount(ModelNormal): + @cached_property + def additional_properties_type(_): + return (int,) + + def __init__(self_, **kwargs): + """ + Number of unique tag values observed for this tag key, keyed by cloud account ID. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_tag_key_metadata_response.py b/datadog_api_client/v2/model/cost_tag_key_metadata_response.py new file mode 100644 index 0000000000..78ca236733 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_metadata_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_key_metadata import CostTagKeyMetadata + +class CostTagKeyMetadataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_key_metadata import CostTagKeyMetadata + return { + "data": ([CostTagKeyMetadata],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CostTagKeyMetadata], **kwargs): + """ + List of Cloud Cost Management tag key metadata entries for the requested period. + + :param data: List of tag key metadata entries. + :type data: [CostTagKeyMetadata] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_tag_key_metadata_top_values_by_account.py b/datadog_api_client/v2/model/cost_tag_key_metadata_top_values_by_account.py new file mode 100644 index 0000000000..d3d9b845f2 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_metadata_top_values_by_account.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostTagKeyMetadataTopValuesByAccount(ModelNormal): + @cached_property + def additional_properties_type(_): + return ([str],) + + def __init__(self_, **kwargs): + """ + A sample of the most frequent tag values observed for this tag key, keyed by cloud account ID. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cost_tag_key_metadata_type.py b/datadog_api_client/v2/model/cost_tag_key_metadata_type.py new file mode 100644 index 0000000000..ee078f2bea --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_metadata_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostTagKeyMetadataType(ModelSimple): + """ + Type of the Cloud Cost Management tag key metadata resource. + + :param value: If omitted defaults to "cost_tag_key_metadata". Must be one of ["cost_tag_key_metadata"]. + :type value: str + """ + + allowed_values = { + "cost_tag_key_metadata", + } + COST_TAG_KEY_METADATA: ClassVar["CostTagKeyMetadataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostTagKeyMetadataType.COST_TAG_KEY_METADATA = CostTagKeyMetadataType("cost_tag_key_metadata") diff --git a/datadog_api_client/v2/model/cost_tag_key_response.py b/datadog_api_client/v2/model/cost_tag_key_response.py new file mode 100644 index 0000000000..b84b7ec686 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_key import CostTagKey + +class CostTagKeyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_key import CostTagKey + return { + "data": (CostTagKey,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CostTagKey, **kwargs): + """ + A single Cloud Cost Management tag key. + + :param data: A Cloud Cost Management tag key. + :type data: CostTagKey + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_tag_key_source.py b/datadog_api_client/v2/model/cost_tag_key_source.py new file mode 100644 index 0000000000..38b5a3c76c --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_source.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_key_source_attributes import CostTagKeySourceAttributes + from datadog_api_client.v2.model.cost_tag_key_source_type import CostTagKeySourceType + +class CostTagKeySource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_key_source_attributes import CostTagKeySourceAttributes + from datadog_api_client.v2.model.cost_tag_key_source_type import CostTagKeySourceType + return { + "attributes": (CostTagKeySourceAttributes,), + "id": (str,), + "type": (CostTagKeySourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CostTagKeySourceAttributes, id: str, type: CostTagKeySourceType, **kwargs): + """ + A Cloud Cost Management tag key paired with the sources that produced it. + + :param attributes: Attributes of a Cloud Cost Management tag source. + :type attributes: CostTagKeySourceAttributes + + :param id: The tag key identifier. Equal to the empty-tag sentinel ``__empty_tag_key__`` when the tag key is empty. + :type id: str + + :param type: Type of the Cloud Cost Management tag source resource. + :type type: CostTagKeySourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_tag_key_source_attributes.py b/datadog_api_client/v2/model/cost_tag_key_source_attributes.py new file mode 100644 index 0000000000..cbceba6d24 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_source_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CostTagKeySourceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "tag_key": (str,), + "tag_sources": ([str],), + } + attribute_map = { + "tag_key": "tag_key", + "tag_sources": "tag_sources", + } + + def __init__(self_, tag_key: str, tag_sources: List[str], **kwargs): + """ + Attributes of a Cloud Cost Management tag source. + + :param tag_key: The tag key name. + :type tag_key: str + + :param tag_sources: Origins where this tag key was observed (for example, ``aws-user-defined`` ). + :type tag_sources: [str] + """ + super().__init__(kwargs) + + + self_.tag_key = tag_key + self_.tag_sources = tag_sources diff --git a/datadog_api_client/v2/model/cost_tag_key_source_type.py b/datadog_api_client/v2/model/cost_tag_key_source_type.py new file mode 100644 index 0000000000..4ddc702b34 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostTagKeySourceType(ModelSimple): + """ + Type of the Cloud Cost Management tag source resource. + + :param value: If omitted defaults to "cost_tag_key_source". Must be one of ["cost_tag_key_source"]. + :type value: str + """ + + allowed_values = { + "cost_tag_key_source", + } + COST_TAG_KEY_SOURCE: ClassVar["CostTagKeySourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostTagKeySourceType.COST_TAG_KEY_SOURCE = CostTagKeySourceType("cost_tag_key_source") diff --git a/datadog_api_client/v2/model/cost_tag_key_sources_response.py b/datadog_api_client/v2/model/cost_tag_key_sources_response.py new file mode 100644 index 0000000000..4a8bf82362 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_sources_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_key_source import CostTagKeySource + +class CostTagKeySourcesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_key_source import CostTagKeySource + return { + "data": ([CostTagKeySource],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CostTagKeySource], **kwargs): + """ + List of Cloud Cost Management tag keys with their origin sources for the requested period. + + :param data: List of tag keys with their origin sources. + :type data: [CostTagKeySource] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_tag_key_type.py b/datadog_api_client/v2/model/cost_tag_key_type.py new file mode 100644 index 0000000000..6934cbe463 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostTagKeyType(ModelSimple): + """ + Type of the Cloud Cost Management tag key resource. + + :param value: If omitted defaults to "cost_tag_key". Must be one of ["cost_tag_key"]. + :type value: str + """ + + allowed_values = { + "cost_tag_key", + } + COST_TAG_KEY: ClassVar["CostTagKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostTagKeyType.COST_TAG_KEY = CostTagKeyType("cost_tag_key") diff --git a/datadog_api_client/v2/model/cost_tag_keys_response.py b/datadog_api_client/v2/model/cost_tag_keys_response.py new file mode 100644 index 0000000000..f43fffafac --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_keys_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_key import CostTagKey + +class CostTagKeysResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_key import CostTagKey + return { + "data": ([CostTagKey],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CostTagKey], **kwargs): + """ + A list of Cloud Cost Management tag keys. + + :param data: The list of Cloud Cost Management tag keys. + :type data: [CostTagKey] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_tag_metadata_daily_filter.py b/datadog_api_client/v2/model/cost_tag_metadata_daily_filter.py new file mode 100644 index 0000000000..5c3a54c657 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_metadata_daily_filter.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostTagMetadataDailyFilter(ModelSimple): + """ + Granularity for tag metadata results. `true` returns one row per day, `false` (or omitted) returns the monthly roll-up. + + :param value: Must be one of ["true", "false"]. + :type value: str + """ + + allowed_values = { + "true", + "false", + } + TRUE: ClassVar["CostTagMetadataDailyFilter"] + FALSE: ClassVar["CostTagMetadataDailyFilter"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostTagMetadataDailyFilter.TRUE = CostTagMetadataDailyFilter("true") +CostTagMetadataDailyFilter.FALSE = CostTagMetadataDailyFilter("false") diff --git a/datadog_api_client/v2/model/cost_tag_metadata_month.py b/datadog_api_client/v2/model/cost_tag_metadata_month.py new file mode 100644 index 0000000000..0d9faf6a5d --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_metadata_month.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_metadata_month_type import CostTagMetadataMonthType + +class CostTagMetadataMonth(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_metadata_month_type import CostTagMetadataMonthType + return { + "id": (str,), + "type": (CostTagMetadataMonthType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: CostTagMetadataMonthType, **kwargs): + """ + A month that has Cloud Cost Management tag metadata available for a given provider. + + :param id: The month, in ``YYYY-MM`` format. + :type id: str + + :param type: Type of the Cloud Cost Management tag metadata month resource. + :type type: CostTagMetadataMonthType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/cost_tag_metadata_month_type.py b/datadog_api_client/v2/model/cost_tag_metadata_month_type.py new file mode 100644 index 0000000000..23bd34e714 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_metadata_month_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostTagMetadataMonthType(ModelSimple): + """ + Type of the Cloud Cost Management tag metadata month resource. + + :param value: If omitted defaults to "cost_tag_metadata_month". Must be one of ["cost_tag_metadata_month"]. + :type value: str + """ + + allowed_values = { + "cost_tag_metadata_month", + } + COST_TAG_METADATA_MONTH: ClassVar["CostTagMetadataMonthType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostTagMetadataMonthType.COST_TAG_METADATA_MONTH = CostTagMetadataMonthType("cost_tag_metadata_month") diff --git a/datadog_api_client/v2/model/cost_tag_metadata_months_response.py b/datadog_api_client/v2/model/cost_tag_metadata_months_response.py new file mode 100644 index 0000000000..d77d4d969d --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_metadata_months_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag_metadata_month import CostTagMetadataMonth + +class CostTagMetadataMonthsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag_metadata_month import CostTagMetadataMonth + return { + "data": ([CostTagMetadataMonth],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CostTagMetadataMonth], **kwargs): + """ + List of months that have Cloud Cost Management tag metadata for the requested provider, ordered most-recent first and capped at 36 months. + + :param data: List of months that have tag metadata available. + :type data: [CostTagMetadataMonth] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/cost_tag_type.py b/datadog_api_client/v2/model/cost_tag_type.py new file mode 100644 index 0000000000..2b2ef87d24 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tag_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CostTagType(ModelSimple): + """ + Type of the Cloud Cost Management tag resource. + + :param value: If omitted defaults to "cost_tag". Must be one of ["cost_tag"]. + :type value: str + """ + + allowed_values = { + "cost_tag", + } + COST_TAG: ClassVar["CostTagType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CostTagType.COST_TAG = CostTagType("cost_tag") diff --git a/datadog_api_client/v2/model/cost_tags_response.py b/datadog_api_client/v2/model/cost_tags_response.py new file mode 100644 index 0000000000..481ec4c974 --- /dev/null +++ b/datadog_api_client/v2/model/cost_tags_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_tag import CostTag + +class CostTagsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_tag import CostTag + return { + "data": ([CostTag],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CostTag], **kwargs): + """ + A list of Cloud Cost Management tags. + + :param data: The list of Cloud Cost Management tags. + :type data: [CostTag] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/coverage_summary_attributes.py b/datadog_api_client/v2/model/coverage_summary_attributes.py new file mode 100644 index 0000000000..e052bf3170 --- /dev/null +++ b/datadog_api_client/v2/model/coverage_summary_attributes.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.coverage_summary_codeowner_stats import CoverageSummaryCodeownerStats + from datadog_api_client.v2.model.coverage_summary_service_stats import CoverageSummaryServiceStats + +class CoverageSummaryAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.coverage_summary_codeowner_stats import CoverageSummaryCodeownerStats + from datadog_api_client.v2.model.coverage_summary_service_stats import CoverageSummaryServiceStats + return { + "codeowners": ({str: (CoverageSummaryCodeownerStats,)}, none_type), + "evaluated_flags_count": (int,), + "evaluated_reports_count": (int,), + "patch_coverage": (float, none_type), + "services": ({str: (CoverageSummaryServiceStats,)}, none_type), + "total_coverage": (float, none_type), + } + attribute_map = { + "codeowners": "codeowners", + "evaluated_flags_count": "evaluated_flags_count", + "evaluated_reports_count": "evaluated_reports_count", + "patch_coverage": "patch_coverage", + "services": "services", + "total_coverage": "total_coverage", + } + + def __init__(self_, codeowners: Union[Dict[str, CoverageSummaryCodeownerStats], none_type, UnsetType]=unset, evaluated_flags_count: Union[int, UnsetType]=unset, evaluated_reports_count: Union[int, UnsetType]=unset, patch_coverage: Union[float, none_type, UnsetType]=unset, services: Union[Dict[str, CoverageSummaryServiceStats], none_type, UnsetType]=unset, total_coverage: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + Attributes object for code coverage summary response. + + :param codeowners: Coverage statistics broken down by code owner. + :type codeowners: {str: (CoverageSummaryCodeownerStats,)}, none_type, optional + + :param evaluated_flags_count: Total number of coverage flags evaluated. + :type evaluated_flags_count: int, optional + + :param evaluated_reports_count: Total number of coverage reports evaluated. + :type evaluated_reports_count: int, optional + + :param patch_coverage: Overall patch coverage percentage. + :type patch_coverage: float, none_type, optional + + :param services: Coverage statistics broken down by service. + :type services: {str: (CoverageSummaryServiceStats,)}, none_type, optional + + :param total_coverage: Overall total coverage percentage. + :type total_coverage: float, none_type, optional + """ + if codeowners is not unset: + kwargs["codeowners"] = codeowners + if evaluated_flags_count is not unset: + kwargs["evaluated_flags_count"] = evaluated_flags_count + if evaluated_reports_count is not unset: + kwargs["evaluated_reports_count"] = evaluated_reports_count + if patch_coverage is not unset: + kwargs["patch_coverage"] = patch_coverage + if services is not unset: + kwargs["services"] = services + if total_coverage is not unset: + kwargs["total_coverage"] = total_coverage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/coverage_summary_codeowner_stats.py b/datadog_api_client/v2/model/coverage_summary_codeowner_stats.py new file mode 100644 index 0000000000..2310b8607a --- /dev/null +++ b/datadog_api_client/v2/model/coverage_summary_codeowner_stats.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CoverageSummaryCodeownerStats(ModelNormal): + @cached_property + def openapi_types(_): + return { + "evaluated_flags_count": (int,), + "evaluated_reports_count": (int,), + "patch_coverage": (float, none_type), + "total_coverage": (float, none_type), + } + attribute_map = { + "evaluated_flags_count": "evaluated_flags_count", + "evaluated_reports_count": "evaluated_reports_count", + "patch_coverage": "patch_coverage", + "total_coverage": "total_coverage", + } + + def __init__(self_, evaluated_flags_count: Union[int, UnsetType]=unset, evaluated_reports_count: Union[int, UnsetType]=unset, patch_coverage: Union[float, none_type, UnsetType]=unset, total_coverage: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + Coverage statistics for a specific code owner. + + :param evaluated_flags_count: Number of coverage flags evaluated for the code owner. + :type evaluated_flags_count: int, optional + + :param evaluated_reports_count: Number of coverage reports evaluated for the code owner. + :type evaluated_reports_count: int, optional + + :param patch_coverage: Patch coverage percentage for the code owner. + :type patch_coverage: float, none_type, optional + + :param total_coverage: Total coverage percentage for the code owner. + :type total_coverage: float, none_type, optional + """ + if evaluated_flags_count is not unset: + kwargs["evaluated_flags_count"] = evaluated_flags_count + if evaluated_reports_count is not unset: + kwargs["evaluated_reports_count"] = evaluated_reports_count + if patch_coverage is not unset: + kwargs["patch_coverage"] = patch_coverage + if total_coverage is not unset: + kwargs["total_coverage"] = total_coverage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/coverage_summary_data.py b/datadog_api_client/v2/model/coverage_summary_data.py new file mode 100644 index 0000000000..5c38cd3d23 --- /dev/null +++ b/datadog_api_client/v2/model/coverage_summary_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.coverage_summary_attributes import CoverageSummaryAttributes + from datadog_api_client.v2.model.coverage_summary_type import CoverageSummaryType + +class CoverageSummaryData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.coverage_summary_attributes import CoverageSummaryAttributes + from datadog_api_client.v2.model.coverage_summary_type import CoverageSummaryType + return { + "attributes": (CoverageSummaryAttributes,), + "id": (str,), + "type": (CoverageSummaryType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CoverageSummaryAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CoverageSummaryType, UnsetType]=unset, **kwargs): + """ + Data object for coverage summary response. + + :param attributes: Attributes object for code coverage summary response. + :type attributes: CoverageSummaryAttributes, optional + + :param id: Unique identifier for the coverage summary (base64-hashed). + :type id: str, optional + + :param type: JSON:API type for coverage summary response. The value must always be ``ci_app_coverage_summary``. + :type type: CoverageSummaryType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/coverage_summary_response.py b/datadog_api_client/v2/model/coverage_summary_response.py new file mode 100644 index 0000000000..ece105e859 --- /dev/null +++ b/datadog_api_client/v2/model/coverage_summary_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.coverage_summary_data import CoverageSummaryData + +class CoverageSummaryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.coverage_summary_data import CoverageSummaryData + return { + "data": (CoverageSummaryData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CoverageSummaryData, UnsetType]=unset, **kwargs): + """ + Response object containing code coverage summary. + + :param data: Data object for coverage summary response. + :type data: CoverageSummaryData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/coverage_summary_service_stats.py b/datadog_api_client/v2/model/coverage_summary_service_stats.py new file mode 100644 index 0000000000..f04a3a4ec5 --- /dev/null +++ b/datadog_api_client/v2/model/coverage_summary_service_stats.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CoverageSummaryServiceStats(ModelNormal): + @cached_property + def openapi_types(_): + return { + "evaluated_flags_count": (int,), + "evaluated_reports_count": (int,), + "patch_coverage": (float, none_type), + "total_coverage": (float, none_type), + } + attribute_map = { + "evaluated_flags_count": "evaluated_flags_count", + "evaluated_reports_count": "evaluated_reports_count", + "patch_coverage": "patch_coverage", + "total_coverage": "total_coverage", + } + + def __init__(self_, evaluated_flags_count: Union[int, UnsetType]=unset, evaluated_reports_count: Union[int, UnsetType]=unset, patch_coverage: Union[float, none_type, UnsetType]=unset, total_coverage: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + Coverage statistics for a specific service. + + :param evaluated_flags_count: Number of coverage flags evaluated for the service. + :type evaluated_flags_count: int, optional + + :param evaluated_reports_count: Number of coverage reports evaluated for the service. + :type evaluated_reports_count: int, optional + + :param patch_coverage: Patch coverage percentage for the service. + :type patch_coverage: float, none_type, optional + + :param total_coverage: Total coverage percentage for the service. + :type total_coverage: float, none_type, optional + """ + if evaluated_flags_count is not unset: + kwargs["evaluated_flags_count"] = evaluated_flags_count + if evaluated_reports_count is not unset: + kwargs["evaluated_reports_count"] = evaluated_reports_count + if patch_coverage is not unset: + kwargs["patch_coverage"] = patch_coverage + if total_coverage is not unset: + kwargs["total_coverage"] = total_coverage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/coverage_summary_type.py b/datadog_api_client/v2/model/coverage_summary_type.py new file mode 100644 index 0000000000..3a871a87b9 --- /dev/null +++ b/datadog_api_client/v2/model/coverage_summary_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CoverageSummaryType(ModelSimple): + """ + JSON:API type for coverage summary response. The value must always be `ci_app_coverage_summary`. + + :param value: If omitted defaults to "ci_app_coverage_summary". Must be one of ["ci_app_coverage_summary"]. + :type value: str + """ + + allowed_values = { + "ci_app_coverage_summary", + } + CI_APP_COVERAGE_SUMMARY: ClassVar["CoverageSummaryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CoverageSummaryType.CI_APP_COVERAGE_SUMMARY = CoverageSummaryType("ci_app_coverage_summary") diff --git a/datadog_api_client/v2/model/cpu.py b/datadog_api_client/v2/model/cpu.py new file mode 100644 index 0000000000..03274e838f --- /dev/null +++ b/datadog_api_client/v2/model/cpu.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Cpu(ModelNormal): + @cached_property + def openapi_types(_): + return { + "max": (int,), + "p75": (int,), + "p95": (int,), + } + attribute_map = { + "max": "max", + "p75": "p75", + "p95": "p95", + } + + def __init__(self_, max: Union[int, UnsetType]=unset, p75: Union[int, UnsetType]=unset, p95: Union[int, UnsetType]=unset, **kwargs): + """ + CPU usage statistics derived from historical Spark job metrics. Provides multiple estimates so users can choose between conservative and cost-saving risk profiles. + + :param max: Maximum CPU usage observed for the job, expressed in millicores. This represents the upper bound of usage. + :type max: int, optional + + :param p75: 75th percentile of CPU usage (millicores). Represents a cost-saving configuration while covering most workloads. + :type p75: int, optional + + :param p95: 95th percentile of CPU usage (millicores). Balances performance and cost, providing a safer margin than p75. + :type p95: int, optional + """ + if max is not unset: + kwargs["max"] = max + if p75 is not unset: + kwargs["p75"] = p75 + if p95 is not unset: + kwargs["p95"] = p95 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_action_connection_request.py b/datadog_api_client/v2/model/create_action_connection_request.py new file mode 100644 index 0000000000..dea45baddc --- /dev/null +++ b/datadog_api_client/v2/model/create_action_connection_request.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_connection_data import ActionConnectionData + from datadog_api_client.v2.model.aws_integration import AWSIntegration + from datadog_api_client.v2.model.anthropic_integration import AnthropicIntegration + from datadog_api_client.v2.model.asana_integration import AsanaIntegration + from datadog_api_client.v2.model.azure_integration import AzureIntegration + from datadog_api_client.v2.model.circle_ci_integration import CircleCIIntegration + from datadog_api_client.v2.model.clickup_integration import ClickupIntegration + from datadog_api_client.v2.model.cloudflare_integration import CloudflareIntegration + from datadog_api_client.v2.model.config_cat_integration import ConfigCatIntegration + from datadog_api_client.v2.model.datadog_integration import DatadogIntegration + from datadog_api_client.v2.model.fastly_integration import FastlyIntegration + from datadog_api_client.v2.model.freshservice_integration import FreshserviceIntegration + from datadog_api_client.v2.model.gcp_integration import GCPIntegration + from datadog_api_client.v2.model.gemini_integration import GeminiIntegration + from datadog_api_client.v2.model.gitlab_integration import GitlabIntegration + from datadog_api_client.v2.model.grey_noise_integration import GreyNoiseIntegration + from datadog_api_client.v2.model.http_integration import HTTPIntegration + from datadog_api_client.v2.model.launch_darkly_integration import LaunchDarklyIntegration + from datadog_api_client.v2.model.notion_integration import NotionIntegration + from datadog_api_client.v2.model.okta_integration import OktaIntegration + from datadog_api_client.v2.model.open_ai_integration import OpenAIIntegration + from datadog_api_client.v2.model.service_now_integration import ServiceNowIntegration + from datadog_api_client.v2.model.split_integration import SplitIntegration + from datadog_api_client.v2.model.statsig_integration import StatsigIntegration + from datadog_api_client.v2.model.virus_total_integration import VirusTotalIntegration + +class CreateActionConnectionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_connection_data import ActionConnectionData + return { + "data": (ActionConnectionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ActionConnectionData, **kwargs): + """ + Request used to create an action connection. + + :param data: Data related to the connection. + :type data: ActionConnectionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_action_connection_response.py b/datadog_api_client/v2/model/create_action_connection_response.py new file mode 100644 index 0000000000..814ce67a2b --- /dev/null +++ b/datadog_api_client/v2/model/create_action_connection_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_connection_data import ActionConnectionData + from datadog_api_client.v2.model.aws_integration import AWSIntegration + from datadog_api_client.v2.model.anthropic_integration import AnthropicIntegration + from datadog_api_client.v2.model.asana_integration import AsanaIntegration + from datadog_api_client.v2.model.azure_integration import AzureIntegration + from datadog_api_client.v2.model.circle_ci_integration import CircleCIIntegration + from datadog_api_client.v2.model.clickup_integration import ClickupIntegration + from datadog_api_client.v2.model.cloudflare_integration import CloudflareIntegration + from datadog_api_client.v2.model.config_cat_integration import ConfigCatIntegration + from datadog_api_client.v2.model.datadog_integration import DatadogIntegration + from datadog_api_client.v2.model.fastly_integration import FastlyIntegration + from datadog_api_client.v2.model.freshservice_integration import FreshserviceIntegration + from datadog_api_client.v2.model.gcp_integration import GCPIntegration + from datadog_api_client.v2.model.gemini_integration import GeminiIntegration + from datadog_api_client.v2.model.gitlab_integration import GitlabIntegration + from datadog_api_client.v2.model.grey_noise_integration import GreyNoiseIntegration + from datadog_api_client.v2.model.http_integration import HTTPIntegration + from datadog_api_client.v2.model.launch_darkly_integration import LaunchDarklyIntegration + from datadog_api_client.v2.model.notion_integration import NotionIntegration + from datadog_api_client.v2.model.okta_integration import OktaIntegration + from datadog_api_client.v2.model.open_ai_integration import OpenAIIntegration + from datadog_api_client.v2.model.service_now_integration import ServiceNowIntegration + from datadog_api_client.v2.model.split_integration import SplitIntegration + from datadog_api_client.v2.model.statsig_integration import StatsigIntegration + from datadog_api_client.v2.model.virus_total_integration import VirusTotalIntegration + +class CreateActionConnectionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_connection_data import ActionConnectionData + return { + "data": (ActionConnectionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ActionConnectionData, UnsetType]=unset, **kwargs): + """ + The response for a created connection + + :param data: Data related to the connection. + :type data: ActionConnectionData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_allocations_request.py b/datadog_api_client/v2/model/create_allocations_request.py new file mode 100644 index 0000000000..af8fdace28 --- /dev/null +++ b/datadog_api_client/v2/model/create_allocations_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.allocation_data_request import AllocationDataRequest + +class CreateAllocationsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.allocation_data_request import AllocationDataRequest + return { + "data": (AllocationDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: AllocationDataRequest, **kwargs): + """ + Request to create targeting rules (allocations) for a feature flag in an environment. + + :param data: Data wrapper for allocation request payloads. + :type data: AllocationDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_app_request.py b/datadog_api_client/v2/model/create_app_request.py new file mode 100644 index 0000000000..461f5d7ebc --- /dev/null +++ b/datadog_api_client/v2/model/create_app_request.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_app_request_data import CreateAppRequestData + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class CreateAppRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_app_request_data import CreateAppRequestData + return { + "data": (CreateAppRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateAppRequestData, UnsetType]=unset, **kwargs): + """ + A request object for creating a new app. + + :param data: The data object containing the app definition. + :type data: CreateAppRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_app_request_data.py b/datadog_api_client/v2/model/create_app_request_data.py new file mode 100644 index 0000000000..e3bdc9c912 --- /dev/null +++ b/datadog_api_client/v2/model/create_app_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_app_request_data_attributes import CreateAppRequestDataAttributes + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class CreateAppRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_app_request_data_attributes import CreateAppRequestDataAttributes + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + return { + "attributes": (CreateAppRequestDataAttributes,), + "type": (AppDefinitionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: AppDefinitionType, attributes: Union[CreateAppRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object containing the app definition. + + :param attributes: App definition attributes such as name, description, and components. + :type attributes: CreateAppRequestDataAttributes, optional + + :param type: The app definition type. + :type type: AppDefinitionType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_app_request_data_attributes.py b/datadog_api_client/v2/model/create_app_request_data_attributes.py new file mode 100644 index 0000000000..6b540dd71d --- /dev/null +++ b/datadog_api_client/v2/model/create_app_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.component_grid import ComponentGrid + from datadog_api_client.v2.model.query import Query + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class CreateAppRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.component_grid import ComponentGrid + from datadog_api_client.v2.model.query import Query + return { + "components": ([ComponentGrid],), + "description": (str,), + "name": (str,), + "queries": ([Query],), + "root_instance_name": (str,), + "tags": ([str],), + } + attribute_map = { + "components": "components", + "description": "description", + "name": "name", + "queries": "queries", + "root_instance_name": "rootInstanceName", + "tags": "tags", + } + + def __init__(self_, components: Union[List[ComponentGrid], UnsetType]=unset, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, queries: Union[List[Union[Query, ActionQuery, DataTransform, StateVariable]], UnsetType]=unset, root_instance_name: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + App definition attributes such as name, description, and components. + + :param components: The UI components that make up the app. + :type components: [ComponentGrid], optional + + :param description: A human-readable description for the app. + :type description: str, optional + + :param name: The name of the app. + :type name: str, optional + + :param queries: An array of queries, such as external actions and state variables, that the app uses. + :type queries: [Query], optional + + :param root_instance_name: The name of the root component of the app. This must be a ``grid`` component that contains all other components. + :type root_instance_name: str, optional + + :param tags: A list of tags for the app, which can be used to filter apps. + :type tags: [str], optional + """ + if components is not unset: + kwargs["components"] = components + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if queries is not unset: + kwargs["queries"] = queries + if root_instance_name is not unset: + kwargs["root_instance_name"] = root_instance_name + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_app_response.py b/datadog_api_client/v2/model/create_app_response.py new file mode 100644 index 0000000000..4392060ef3 --- /dev/null +++ b/datadog_api_client/v2/model/create_app_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_app_response_data import CreateAppResponseData + +class CreateAppResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_app_response_data import CreateAppResponseData + return { + "data": (CreateAppResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateAppResponseData, UnsetType]=unset, **kwargs): + """ + The response object after a new app is successfully created, with the app ID. + + :param data: The data object containing the app ID. + :type data: CreateAppResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_app_response_data.py b/datadog_api_client/v2/model/create_app_response_data.py new file mode 100644 index 0000000000..90a42333d0 --- /dev/null +++ b/datadog_api_client/v2/model/create_app_response_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + +class CreateAppResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + return { + "id": (UUID,), + "type": (AppDefinitionType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: AppDefinitionType, **kwargs): + """ + The data object containing the app ID. + + :param id: The ID of the created app. + :type id: UUID + + :param type: The app definition type. + :type type: AppDefinitionType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/create_apps_datastore_request.py b/datadog_api_client/v2/model/create_apps_datastore_request.py new file mode 100644 index 0000000000..11730fa475 --- /dev/null +++ b/datadog_api_client/v2/model/create_apps_datastore_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_apps_datastore_request_data import CreateAppsDatastoreRequestData + +class CreateAppsDatastoreRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_apps_datastore_request_data import CreateAppsDatastoreRequestData + return { + "data": (CreateAppsDatastoreRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateAppsDatastoreRequestData, UnsetType]=unset, **kwargs): + """ + Request to create a new datastore with specified configuration and metadata. + + :param data: Data wrapper containing the configuration needed to create a new datastore. + :type data: CreateAppsDatastoreRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_apps_datastore_request_data.py b/datadog_api_client/v2/model/create_apps_datastore_request_data.py new file mode 100644 index 0000000000..99d142ea73 --- /dev/null +++ b/datadog_api_client/v2/model/create_apps_datastore_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_apps_datastore_request_data_attributes import CreateAppsDatastoreRequestDataAttributes + from datadog_api_client.v2.model.datastore_data_type import DatastoreDataType + +class CreateAppsDatastoreRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_apps_datastore_request_data_attributes import CreateAppsDatastoreRequestDataAttributes + from datadog_api_client.v2.model.datastore_data_type import DatastoreDataType + return { + "attributes": (CreateAppsDatastoreRequestDataAttributes,), + "id": (str,), + "type": (DatastoreDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: DatastoreDataType, attributes: Union[CreateAppsDatastoreRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data wrapper containing the configuration needed to create a new datastore. + + :param attributes: Configuration and metadata to create a new datastore. + :type attributes: CreateAppsDatastoreRequestDataAttributes, optional + + :param id: Optional ID for the new datastore. If not provided, one will be generated automatically. + :type id: str, optional + + :param type: The resource type for datastores. + :type type: DatastoreDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_apps_datastore_request_data_attributes.py b/datadog_api_client/v2/model/create_apps_datastore_request_data_attributes.py new file mode 100644 index 0000000000..6f20662055 --- /dev/null +++ b/datadog_api_client/v2/model/create_apps_datastore_request_data_attributes.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_apps_datastore_request_data_attributes_org_access import CreateAppsDatastoreRequestDataAttributesOrgAccess + from datadog_api_client.v2.model.datastore_primary_key_generation_strategy import DatastorePrimaryKeyGenerationStrategy + +class CreateAppsDatastoreRequestDataAttributes(ModelNormal): + validations = { + "primary_column_name": { + "max_length": 63, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_apps_datastore_request_data_attributes_org_access import CreateAppsDatastoreRequestDataAttributesOrgAccess + from datadog_api_client.v2.model.datastore_primary_key_generation_strategy import DatastorePrimaryKeyGenerationStrategy + return { + "description": (str,), + "name": (str,), + "org_access": (CreateAppsDatastoreRequestDataAttributesOrgAccess,), + "primary_column_name": (str,), + "primary_key_generation_strategy": (DatastorePrimaryKeyGenerationStrategy,), + } + attribute_map = { + "description": "description", + "name": "name", + "org_access": "org_access", + "primary_column_name": "primary_column_name", + "primary_key_generation_strategy": "primary_key_generation_strategy", + } + + def __init__(self_, name: str, primary_column_name: str, description: Union[str, UnsetType]=unset, org_access: Union[CreateAppsDatastoreRequestDataAttributesOrgAccess, UnsetType]=unset, primary_key_generation_strategy: Union[DatastorePrimaryKeyGenerationStrategy, UnsetType]=unset, **kwargs): + """ + Configuration and metadata to create a new datastore. + + :param description: A human-readable description about the datastore. + :type description: str, optional + + :param name: The display name for the new datastore. + :type name: str + + :param org_access: The organization access level for the datastore. For example, 'contributor'. + :type org_access: CreateAppsDatastoreRequestDataAttributesOrgAccess, optional + + :param primary_column_name: The name of the primary key column for this datastore. Primary column names: + + * Must abide by both `PostgreSQL naming conventions `_ + * Cannot exceed 63 characters + :type primary_column_name: str + + :param primary_key_generation_strategy: Can be set to ``uuid`` to automatically generate primary keys when new items are added. Default value is ``none`` , which requires you to supply a primary key for each new item. + :type primary_key_generation_strategy: DatastorePrimaryKeyGenerationStrategy, optional + """ + if description is not unset: + kwargs["description"] = description + if org_access is not unset: + kwargs["org_access"] = org_access + if primary_key_generation_strategy is not unset: + kwargs["primary_key_generation_strategy"] = primary_key_generation_strategy + super().__init__(kwargs) + + + self_.name = name + self_.primary_column_name = primary_column_name diff --git a/datadog_api_client/v2/model/create_apps_datastore_request_data_attributes_org_access.py b/datadog_api_client/v2/model/create_apps_datastore_request_data_attributes_org_access.py new file mode 100644 index 0000000000..d394a9e628 --- /dev/null +++ b/datadog_api_client/v2/model/create_apps_datastore_request_data_attributes_org_access.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateAppsDatastoreRequestDataAttributesOrgAccess(ModelSimple): + """ + The organization access level for the datastore. For example, 'contributor'. + + :param value: Must be one of ["contributor", "viewer", "manager"]. + :type value: str + """ + + allowed_values = { + "contributor", + "viewer", + "manager", + } + CONTRIBUTOR: ClassVar["CreateAppsDatastoreRequestDataAttributesOrgAccess"] + VIEWER: ClassVar["CreateAppsDatastoreRequestDataAttributesOrgAccess"] + MANAGER: ClassVar["CreateAppsDatastoreRequestDataAttributesOrgAccess"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateAppsDatastoreRequestDataAttributesOrgAccess.CONTRIBUTOR = CreateAppsDatastoreRequestDataAttributesOrgAccess("contributor") +CreateAppsDatastoreRequestDataAttributesOrgAccess.VIEWER = CreateAppsDatastoreRequestDataAttributesOrgAccess("viewer") +CreateAppsDatastoreRequestDataAttributesOrgAccess.MANAGER = CreateAppsDatastoreRequestDataAttributesOrgAccess("manager") diff --git a/datadog_api_client/v2/model/create_apps_datastore_response.py b/datadog_api_client/v2/model/create_apps_datastore_response.py new file mode 100644 index 0000000000..b79f09b4f8 --- /dev/null +++ b/datadog_api_client/v2/model/create_apps_datastore_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_apps_datastore_response_data import CreateAppsDatastoreResponseData + +class CreateAppsDatastoreResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_apps_datastore_response_data import CreateAppsDatastoreResponseData + return { + "data": (CreateAppsDatastoreResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateAppsDatastoreResponseData, UnsetType]=unset, **kwargs): + """ + Response after successfully creating a new datastore, containing the datastore's assigned ID. + + :param data: The newly created datastore's data. + :type data: CreateAppsDatastoreResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_apps_datastore_response_data.py b/datadog_api_client/v2/model/create_apps_datastore_response_data.py new file mode 100644 index 0000000000..ea2040e6b0 --- /dev/null +++ b/datadog_api_client/v2/model/create_apps_datastore_response_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datastore_data_type import DatastoreDataType + +class CreateAppsDatastoreResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datastore_data_type import DatastoreDataType + return { + "id": (str,), + "type": (DatastoreDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, type: DatastoreDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The newly created datastore's data. + + :param id: The unique identifier assigned to the newly created datastore. + :type id: str, optional + + :param type: The resource type for datastores. + :type type: DatastoreDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_attachment_request.py b/datadog_api_client/v2/model/create_attachment_request.py new file mode 100644 index 0000000000..7b46d782ef --- /dev/null +++ b/datadog_api_client/v2/model/create_attachment_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_attachment_request_data import CreateAttachmentRequestData + +class CreateAttachmentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_attachment_request_data import CreateAttachmentRequestData + return { + "data": (CreateAttachmentRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateAttachmentRequestData, UnsetType]=unset, **kwargs): + """ + Create request for an attachment. + + :param data: Attachment data for a create request. + :type data: CreateAttachmentRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_attachment_request_data.py b/datadog_api_client/v2/model/create_attachment_request_data.py new file mode 100644 index 0000000000..9f24ef545a --- /dev/null +++ b/datadog_api_client/v2/model/create_attachment_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_attachment_request_data_attributes import CreateAttachmentRequestDataAttributes + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + +class CreateAttachmentRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_attachment_request_data_attributes import CreateAttachmentRequestDataAttributes + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + return { + "attributes": (CreateAttachmentRequestDataAttributes,), + "id": (str,), + "type": (IncidentAttachmentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: IncidentAttachmentType, attributes: Union[CreateAttachmentRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Attachment data for a create request. + + :param attributes: The attributes for creating an attachment. + :type attributes: CreateAttachmentRequestDataAttributes, optional + + :param id: The unique identifier of the attachment. + :type id: str, optional + + :param type: The incident attachment resource type. + :type type: IncidentAttachmentType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_attachment_request_data_attributes.py b/datadog_api_client/v2/model/create_attachment_request_data_attributes.py new file mode 100644 index 0000000000..84e2b861d2 --- /dev/null +++ b/datadog_api_client/v2/model/create_attachment_request_data_attributes.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_attachment_request_data_attributes_attachment import CreateAttachmentRequestDataAttributesAttachment + from datadog_api_client.v2.model.attachment_data_attributes_attachment_type import AttachmentDataAttributesAttachmentType + +class CreateAttachmentRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_attachment_request_data_attributes_attachment import CreateAttachmentRequestDataAttributesAttachment + from datadog_api_client.v2.model.attachment_data_attributes_attachment_type import AttachmentDataAttributesAttachmentType + return { + "attachment": (CreateAttachmentRequestDataAttributesAttachment,), + "attachment_type": (AttachmentDataAttributesAttachmentType,), + } + attribute_map = { + "attachment": "attachment", + "attachment_type": "attachment_type", + } + + def __init__(self_, attachment: Union[CreateAttachmentRequestDataAttributesAttachment, UnsetType]=unset, attachment_type: Union[AttachmentDataAttributesAttachmentType, UnsetType]=unset, **kwargs): + """ + The attributes for creating an attachment. + + :param attachment: The attachment object for creating an attachment. + :type attachment: CreateAttachmentRequestDataAttributesAttachment, optional + + :param attachment_type: The type of the attachment. + :type attachment_type: AttachmentDataAttributesAttachmentType, optional + """ + if attachment is not unset: + kwargs["attachment"] = attachment + if attachment_type is not unset: + kwargs["attachment_type"] = attachment_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_attachment_request_data_attributes_attachment.py b/datadog_api_client/v2/model/create_attachment_request_data_attributes_attachment.py new file mode 100644 index 0000000000..8b691589c5 --- /dev/null +++ b/datadog_api_client/v2/model/create_attachment_request_data_attributes_attachment.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateAttachmentRequestDataAttributesAttachment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "document_url": (str,), + "title": (str,), + } + attribute_map = { + "document_url": "documentUrl", + "title": "title", + } + + def __init__(self_, document_url: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + The attachment object for creating an attachment. + + :param document_url: The URL of the attachment. + :type document_url: str, optional + + :param title: The title of the attachment. + :type title: str, optional + """ + if document_url is not unset: + kwargs["document_url"] = document_url + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_backfilled_degradation_request.py b/datadog_api_client/v2/model/create_backfilled_degradation_request.py new file mode 100644 index 0000000000..7ef68b249b --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_degradation_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_degradation_request_data import CreateBackfilledDegradationRequestData + +class CreateBackfilledDegradationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_degradation_request_data import CreateBackfilledDegradationRequestData + return { + "data": (CreateBackfilledDegradationRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateBackfilledDegradationRequestData, UnsetType]=unset, **kwargs): + """ + Request object for creating a backfilled degradation. + + :param data: The data object for creating a backfilled degradation. + :type data: CreateBackfilledDegradationRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_backfilled_degradation_request_data.py b/datadog_api_client/v2/model/create_backfilled_degradation_request_data.py new file mode 100644 index 0000000000..c4232a97e8 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_degradation_request_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_attributes import CreateBackfilledDegradationRequestDataAttributes + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_relationships import CreateBackfilledDegradationRequestDataRelationships + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + +class CreateBackfilledDegradationRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_attributes import CreateBackfilledDegradationRequestDataAttributes + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_relationships import CreateBackfilledDegradationRequestDataRelationships + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + return { + "attributes": (CreateBackfilledDegradationRequestDataAttributes,), + "relationships": (CreateBackfilledDegradationRequestDataRelationships,), + "type": (PatchDegradationRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: PatchDegradationRequestDataType, attributes: Union[CreateBackfilledDegradationRequestDataAttributes, UnsetType]=unset, relationships: Union[CreateBackfilledDegradationRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for creating a backfilled degradation. + + :param attributes: The supported attributes for creating a backfilled degradation. + :type attributes: CreateBackfilledDegradationRequestDataAttributes, optional + + :param relationships: The supported relationships for creating a backfilled degradation. + :type relationships: CreateBackfilledDegradationRequestDataRelationships, optional + + :param type: Degradations resource type. + :type type: PatchDegradationRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_backfilled_degradation_request_data_attributes.py b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_attributes.py new file mode 100644 index 0000000000..9d093058b6 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_attributes_updates_items import CreateBackfilledDegradationRequestDataAttributesUpdatesItems + +class CreateBackfilledDegradationRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_attributes_updates_items import CreateBackfilledDegradationRequestDataAttributesUpdatesItems + return { + "title": (str,), + "updates": ([CreateBackfilledDegradationRequestDataAttributesUpdatesItems],), + } + attribute_map = { + "title": "title", + "updates": "updates", + } + + def __init__(self_, title: str, updates: List[CreateBackfilledDegradationRequestDataAttributesUpdatesItems], **kwargs): + """ + The supported attributes for creating a backfilled degradation. + + :param title: The title of the backfilled degradation. + :type title: str + + :param updates: The list of status updates describing the timeline of the degradation. + :type updates: [CreateBackfilledDegradationRequestDataAttributesUpdatesItems] + """ + super().__init__(kwargs) + + + self_.title = title + self_.updates = updates diff --git a/datadog_api_client/v2/model/create_backfilled_degradation_request_data_attributes_updates_items.py b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_attributes_updates_items.py new file mode 100644 index 0000000000..c55e3dd08a --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_attributes_updates_items.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_request_data_attributes_components_affected_items import CreateDegradationRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + +class CreateBackfilledDegradationRequestDataAttributesUpdatesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_request_data_attributes_components_affected_items import CreateDegradationRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + return { + "components_affected": ([CreateDegradationRequestDataAttributesComponentsAffectedItems],), + "description": (str,), + "started_at": (datetime,), + "status": (CreateDegradationRequestDataAttributesStatus,), + } + attribute_map = { + "components_affected": "components_affected", + "description": "description", + "started_at": "started_at", + "status": "status", + } + + def __init__(self_, started_at: datetime, status: CreateDegradationRequestDataAttributesStatus, components_affected: Union[List[CreateDegradationRequestDataAttributesComponentsAffectedItems], UnsetType]=unset, description: Union[str, UnsetType]=unset, **kwargs): + """ + A backfilled degradation update entry. + + :param components_affected: The components affected. + :type components_affected: [CreateDegradationRequestDataAttributesComponentsAffectedItems], optional + + :param description: A description of the update. + :type description: str, optional + + :param started_at: Timestamp of when the update occurred. + :type started_at: datetime + + :param status: The status of the degradation. + :type status: CreateDegradationRequestDataAttributesStatus + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.started_at = started_at + self_.status = status diff --git a/datadog_api_client/v2/model/create_backfilled_degradation_request_data_relationships.py b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_relationships.py new file mode 100644 index 0000000000..2a5f830f65 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_relationships_template import CreateBackfilledDegradationRequestDataRelationshipsTemplate + +class CreateBackfilledDegradationRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_relationships_template import CreateBackfilledDegradationRequestDataRelationshipsTemplate + return { + "template": (CreateBackfilledDegradationRequestDataRelationshipsTemplate,), + } + attribute_map = { + "template": "template", + } + + def __init__(self_, template: Union[CreateBackfilledDegradationRequestDataRelationshipsTemplate, UnsetType]=unset, **kwargs): + """ + The supported relationships for creating a backfilled degradation. + + :param template: The template used to create the backfilled degradation. + :type template: CreateBackfilledDegradationRequestDataRelationshipsTemplate, optional + """ + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_backfilled_degradation_request_data_relationships_template.py b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_relationships_template.py new file mode 100644 index 0000000000..6e1e4a7193 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_relationships_template.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_relationships_template_data import CreateBackfilledDegradationRequestDataRelationshipsTemplateData + +class CreateBackfilledDegradationRequestDataRelationshipsTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_degradation_request_data_relationships_template_data import CreateBackfilledDegradationRequestDataRelationshipsTemplateData + return { + "data": (CreateBackfilledDegradationRequestDataRelationshipsTemplateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateBackfilledDegradationRequestDataRelationshipsTemplateData, **kwargs): + """ + The template used to create the backfilled degradation. + + :param data: The data object identifying the template used to create the backfilled degradation. + :type data: CreateBackfilledDegradationRequestDataRelationshipsTemplateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_backfilled_degradation_request_data_relationships_template_data.py b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_relationships_template_data.py new file mode 100644 index 0000000000..cdec1db6e9 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_degradation_request_data_relationships_template_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + +class CreateBackfilledDegradationRequestDataRelationshipsTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + return { + "id": (str,), + "type": (PatchDegradationTemplateRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchDegradationTemplateRequestDataType, **kwargs): + """ + The data object identifying the template used to create the backfilled degradation. + + :param id: The ID of the degradation template. + :type id: str + + :param type: Degradation templates resource type. + :type type: PatchDegradationTemplateRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/create_backfilled_maintenance_request.py b/datadog_api_client/v2/model/create_backfilled_maintenance_request.py new file mode 100644 index 0000000000..9589900170 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_maintenance_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data import CreateBackfilledMaintenanceRequestData + +class CreateBackfilledMaintenanceRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data import CreateBackfilledMaintenanceRequestData + return { + "data": (CreateBackfilledMaintenanceRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateBackfilledMaintenanceRequestData, UnsetType]=unset, **kwargs): + """ + Request object for creating a backfilled maintenance. + + :param data: The data object for creating a backfilled maintenance. + :type data: CreateBackfilledMaintenanceRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_backfilled_maintenance_request_data.py b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data.py new file mode 100644 index 0000000000..6be708a538 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_attributes import CreateBackfilledMaintenanceRequestDataAttributes + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_relationships import CreateBackfilledMaintenanceRequestDataRelationships + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + +class CreateBackfilledMaintenanceRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_attributes import CreateBackfilledMaintenanceRequestDataAttributes + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_relationships import CreateBackfilledMaintenanceRequestDataRelationships + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + return { + "attributes": (CreateBackfilledMaintenanceRequestDataAttributes,), + "relationships": (CreateBackfilledMaintenanceRequestDataRelationships,), + "type": (PatchMaintenanceRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: PatchMaintenanceRequestDataType, attributes: Union[CreateBackfilledMaintenanceRequestDataAttributes, UnsetType]=unset, relationships: Union[CreateBackfilledMaintenanceRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for creating a backfilled maintenance. + + :param attributes: The supported attributes for creating a backfilled maintenance. + :type attributes: CreateBackfilledMaintenanceRequestDataAttributes, optional + + :param relationships: The supported relationships for creating a backfilled maintenance. + :type relationships: CreateBackfilledMaintenanceRequestDataRelationships, optional + + :param type: Maintenances resource type. + :type type: PatchMaintenanceRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_attributes.py b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_attributes.py new file mode 100644 index 0000000000..cdaa66f286 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_attributes_updates_items import CreateBackfilledMaintenanceRequestDataAttributesUpdatesItems + +class CreateBackfilledMaintenanceRequestDataAttributes(ModelNormal): + validations = { + "updates": { + "max_items": 2, + "min_items": 2, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_attributes_updates_items import CreateBackfilledMaintenanceRequestDataAttributesUpdatesItems + return { + "title": (str,), + "updates": ([CreateBackfilledMaintenanceRequestDataAttributesUpdatesItems],), + } + attribute_map = { + "title": "title", + "updates": "updates", + } + + def __init__(self_, title: str, updates: List[CreateBackfilledMaintenanceRequestDataAttributesUpdatesItems], **kwargs): + """ + The supported attributes for creating a backfilled maintenance. + + :param title: The title of the backfilled maintenance. + :type title: str + + :param updates: The list of updates. Exactly two updates are required: the start ( ``in_progress`` ) and the end ( ``completed`` ). + :type updates: [CreateBackfilledMaintenanceRequestDataAttributesUpdatesItems] + """ + super().__init__(kwargs) + + + self_.title = title + self_.updates = updates diff --git a/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_attributes_updates_items.py b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_attributes_updates_items.py new file mode 100644 index 0000000000..18686e6bf4 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_attributes_updates_items.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_maintenance_request_data_attributes_components_affected_items import CreateMaintenanceRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_maintenance_request_data_attributes_updates_items_status import CreateMaintenanceRequestDataAttributesUpdatesItemsStatus + +class CreateBackfilledMaintenanceRequestDataAttributesUpdatesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_maintenance_request_data_attributes_components_affected_items import CreateMaintenanceRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_maintenance_request_data_attributes_updates_items_status import CreateMaintenanceRequestDataAttributesUpdatesItemsStatus + return { + "components_affected": ([CreateMaintenanceRequestDataAttributesComponentsAffectedItems],), + "description": (str,), + "started_at": (datetime,), + "status": (CreateMaintenanceRequestDataAttributesUpdatesItemsStatus,), + } + attribute_map = { + "components_affected": "components_affected", + "description": "description", + "started_at": "started_at", + "status": "status", + } + + def __init__(self_, description: str, started_at: datetime, status: CreateMaintenanceRequestDataAttributesUpdatesItemsStatus, components_affected: Union[List[CreateMaintenanceRequestDataAttributesComponentsAffectedItems], UnsetType]=unset, **kwargs): + """ + A backfilled maintenance update entry. + + :param components_affected: The components affected. + :type components_affected: [CreateMaintenanceRequestDataAttributesComponentsAffectedItems], optional + + :param description: A description of the update. + :type description: str + + :param started_at: Timestamp of when the update occurred. + :type started_at: datetime + + :param status: The status of a maintenance update. + :type status: CreateMaintenanceRequestDataAttributesUpdatesItemsStatus + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + super().__init__(kwargs) + + + self_.description = description + self_.started_at = started_at + self_.status = status diff --git a/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_relationships.py b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_relationships.py new file mode 100644 index 0000000000..5c925f7d49 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_relationships_template import CreateBackfilledMaintenanceRequestDataRelationshipsTemplate + +class CreateBackfilledMaintenanceRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_relationships_template import CreateBackfilledMaintenanceRequestDataRelationshipsTemplate + return { + "template": (CreateBackfilledMaintenanceRequestDataRelationshipsTemplate,), + } + attribute_map = { + "template": "template", + } + + def __init__(self_, template: Union[CreateBackfilledMaintenanceRequestDataRelationshipsTemplate, UnsetType]=unset, **kwargs): + """ + The supported relationships for creating a backfilled maintenance. + + :param template: The template used to create the backfilled maintenance. + :type template: CreateBackfilledMaintenanceRequestDataRelationshipsTemplate, optional + """ + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_relationships_template.py b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_relationships_template.py new file mode 100644 index 0000000000..32a6775e4f --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_relationships_template.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_relationships_template_data import CreateBackfilledMaintenanceRequestDataRelationshipsTemplateData + +class CreateBackfilledMaintenanceRequestDataRelationshipsTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_relationships_template_data import CreateBackfilledMaintenanceRequestDataRelationshipsTemplateData + return { + "data": (CreateBackfilledMaintenanceRequestDataRelationshipsTemplateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateBackfilledMaintenanceRequestDataRelationshipsTemplateData, **kwargs): + """ + The template used to create the backfilled maintenance. + + :param data: The data object identifying the template used to create the backfilled maintenance. + :type data: CreateBackfilledMaintenanceRequestDataRelationshipsTemplateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_relationships_template_data.py b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_relationships_template_data.py new file mode 100644 index 0000000000..68ca864a12 --- /dev/null +++ b/datadog_api_client/v2/model/create_backfilled_maintenance_request_data_relationships_template_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + +class CreateBackfilledMaintenanceRequestDataRelationshipsTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + return { + "id": (str,), + "type": (PatchMaintenanceTemplateRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchMaintenanceTemplateRequestDataType, **kwargs): + """ + The data object identifying the template used to create the backfilled maintenance. + + :param id: The ID of the maintenance template. + :type id: str + + :param type: Maintenance templates resource type. + :type type: PatchMaintenanceTemplateRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/create_campaign_request.py b/datadog_api_client/v2/model/create_campaign_request.py new file mode 100644 index 0000000000..e7b96425ba --- /dev/null +++ b/datadog_api_client/v2/model/create_campaign_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_campaign_request_data import CreateCampaignRequestData + +class CreateCampaignRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_campaign_request_data import CreateCampaignRequestData + return { + "data": (CreateCampaignRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateCampaignRequestData, **kwargs): + """ + Request to create a new campaign. + + :param data: Data for creating a new campaign. + :type data: CreateCampaignRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_campaign_request_attributes.py b/datadog_api_client/v2/model/create_campaign_request_attributes.py new file mode 100644 index 0000000000..7d11753c86 --- /dev/null +++ b/datadog_api_client/v2/model/create_campaign_request_attributes.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.campaign_status import CampaignStatus + +class CreateCampaignRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.campaign_status import CampaignStatus + return { + "description": (str,), + "due_date": (datetime,), + "entity_scope": (str,), + "guidance": (str,), + "key": (str,), + "name": (str,), + "owner_id": (str,), + "rule_ids": ([str],), + "start_date": (datetime,), + "status": (CampaignStatus,), + } + attribute_map = { + "description": "description", + "due_date": "due_date", + "entity_scope": "entity_scope", + "guidance": "guidance", + "key": "key", + "name": "name", + "owner_id": "owner_id", + "rule_ids": "rule_ids", + "start_date": "start_date", + "status": "status", + } + + def __init__(self_, key: str, name: str, owner_id: str, rule_ids: List[str], start_date: datetime, description: Union[str, UnsetType]=unset, due_date: Union[datetime, UnsetType]=unset, entity_scope: Union[str, UnsetType]=unset, guidance: Union[str, UnsetType]=unset, status: Union[CampaignStatus, UnsetType]=unset, **kwargs): + """ + Attributes for creating a new campaign. + + :param description: The description of the campaign. + :type description: str, optional + + :param due_date: The due date of the campaign. + :type due_date: datetime, optional + + :param entity_scope: Entity scope query to filter entities for this campaign. + :type entity_scope: str, optional + + :param guidance: Guidance for the campaign. + :type guidance: str, optional + + :param key: The unique key for the campaign. + :type key: str + + :param name: The name of the campaign. + :type name: str + + :param owner_id: The UUID of the campaign owner. + :type owner_id: str + + :param rule_ids: Array of rule IDs associated with this campaign. + :type rule_ids: [str] + + :param start_date: The start date of the campaign. + :type start_date: datetime + + :param status: The status of the campaign. + :type status: CampaignStatus, optional + """ + if description is not unset: + kwargs["description"] = description + if due_date is not unset: + kwargs["due_date"] = due_date + if entity_scope is not unset: + kwargs["entity_scope"] = entity_scope + if guidance is not unset: + kwargs["guidance"] = guidance + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + + self_.key = key + self_.name = name + self_.owner_id = owner_id + self_.rule_ids = rule_ids + self_.start_date = start_date diff --git a/datadog_api_client/v2/model/create_campaign_request_data.py b/datadog_api_client/v2/model/create_campaign_request_data.py new file mode 100644 index 0000000000..a189f9ab77 --- /dev/null +++ b/datadog_api_client/v2/model/create_campaign_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_campaign_request_attributes import CreateCampaignRequestAttributes + from datadog_api_client.v2.model.campaign_type import CampaignType + +class CreateCampaignRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_campaign_request_attributes import CreateCampaignRequestAttributes + from datadog_api_client.v2.model.campaign_type import CampaignType + return { + "attributes": (CreateCampaignRequestAttributes,), + "type": (CampaignType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateCampaignRequestAttributes, type: CampaignType, **kwargs): + """ + Data for creating a new campaign. + + :param attributes: Attributes for creating a new campaign. + :type attributes: CreateCampaignRequestAttributes + + :param type: The JSON:API type for campaigns. + :type type: CampaignType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_case_request_array.py b/datadog_api_client/v2/model/create_case_request_array.py new file mode 100644 index 0000000000..e79b0aa099 --- /dev/null +++ b/datadog_api_client/v2/model/create_case_request_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_case_request_data import CreateCaseRequestData + +class CreateCaseRequestArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_case_request_data import CreateCaseRequestData + return { + "data": ([CreateCaseRequestData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CreateCaseRequestData], **kwargs): + """ + List of requests to create cases for security findings. + + :param data: Array of case creation request data objects. + :type data: [CreateCaseRequestData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_case_request_data.py b/datadog_api_client/v2/model/create_case_request_data.py new file mode 100644 index 0000000000..acbc705e59 --- /dev/null +++ b/datadog_api_client/v2/model/create_case_request_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_case_request_data_attributes import CreateCaseRequestDataAttributes + from datadog_api_client.v2.model.create_case_request_data_relationships import CreateCaseRequestDataRelationships + from datadog_api_client.v2.model.case_data_type import CaseDataType + +class CreateCaseRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_case_request_data_attributes import CreateCaseRequestDataAttributes + from datadog_api_client.v2.model.create_case_request_data_relationships import CreateCaseRequestDataRelationships + from datadog_api_client.v2.model.case_data_type import CaseDataType + return { + "attributes": (CreateCaseRequestDataAttributes,), + "relationships": (CreateCaseRequestDataRelationships,), + "type": (CaseDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: CaseDataType, attributes: Union[CreateCaseRequestDataAttributes, UnsetType]=unset, relationships: Union[CreateCaseRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + Data of the case to create. + + :param attributes: Attributes of the case to create. + :type attributes: CreateCaseRequestDataAttributes, optional + + :param relationships: Relationships of the case to create. + :type relationships: CreateCaseRequestDataRelationships, optional + + :param type: Cases resource type. + :type type: CaseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_case_request_data_attributes.py b/datadog_api_client/v2/model/create_case_request_data_attributes.py new file mode 100644 index 0000000000..0950683bcf --- /dev/null +++ b/datadog_api_client/v2/model/create_case_request_data_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_priority import CasePriority + +class CreateCaseRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_priority import CasePriority + return { + "assignee_id": (str,), + "description": (str,), + "priority": (CasePriority,), + "title": (str,), + } + attribute_map = { + "assignee_id": "assignee_id", + "description": "description", + "priority": "priority", + "title": "title", + } + + def __init__(self_, assignee_id: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, priority: Union[CasePriority, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the case to create. + + :param assignee_id: Unique identifier of the user assigned to the case. + :type assignee_id: str, optional + + :param description: Description of the case. If not provided, the description will be automatically generated. + :type description: str, optional + + :param priority: Case priority + :type priority: CasePriority, optional + + :param title: Title of the case. If not provided, the title will be automatically generated. + :type title: str, optional + """ + if assignee_id is not unset: + kwargs["assignee_id"] = assignee_id + if description is not unset: + kwargs["description"] = description + if priority is not unset: + kwargs["priority"] = priority + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_case_request_data_relationships.py b/datadog_api_client/v2/model/create_case_request_data_relationships.py new file mode 100644 index 0000000000..a02cf34e8a --- /dev/null +++ b/datadog_api_client/v2/model/create_case_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + +class CreateCaseRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + return { + "findings": (Findings,), + "project": (CaseManagementProject,), + } + attribute_map = { + "findings": "findings", + "project": "project", + } + + def __init__(self_, findings: Findings, project: CaseManagementProject, **kwargs): + """ + Relationships of the case to create. + + :param findings: A list of security findings. + :type findings: Findings + + :param project: Case management project. + :type project: CaseManagementProject + """ + super().__init__(kwargs) + + + self_.findings = findings + self_.project = project diff --git a/datadog_api_client/v2/model/create_component_request.py b/datadog_api_client/v2/model/create_component_request.py new file mode 100644 index 0000000000..d560f253dd --- /dev/null +++ b/datadog_api_client/v2/model/create_component_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_component_request_data import CreateComponentRequestData + +class CreateComponentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_component_request_data import CreateComponentRequestData + return { + "data": (CreateComponentRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateComponentRequestData, UnsetType]=unset, **kwargs): + """ + Request object for creating a component. + + :param data: The data object for creating a component. + :type data: CreateComponentRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_component_request_data.py b/datadog_api_client/v2/model/create_component_request_data.py new file mode 100644 index 0000000000..051046f683 --- /dev/null +++ b/datadog_api_client/v2/model/create_component_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_component_request_data_attributes import CreateComponentRequestDataAttributes + from datadog_api_client.v2.model.create_component_request_data_relationships import CreateComponentRequestDataRelationships + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + +class CreateComponentRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_component_request_data_attributes import CreateComponentRequestDataAttributes + from datadog_api_client.v2.model.create_component_request_data_relationships import CreateComponentRequestDataRelationships + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + return { + "attributes": (CreateComponentRequestDataAttributes,), + "relationships": (CreateComponentRequestDataRelationships,), + "type": (StatusPagesComponentGroupType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: CreateComponentRequestDataAttributes, type: StatusPagesComponentGroupType, relationships: Union[CreateComponentRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for creating a component. + + :param attributes: The supported attributes for creating a component. + :type attributes: CreateComponentRequestDataAttributes + + :param relationships: The supported relationships for creating a component. + :type relationships: CreateComponentRequestDataRelationships, optional + + :param type: Components resource type. + :type type: StatusPagesComponentGroupType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_component_request_data_attributes.py b/datadog_api_client/v2/model/create_component_request_data_attributes.py new file mode 100644 index 0000000000..6a2f6145e1 --- /dev/null +++ b/datadog_api_client/v2/model/create_component_request_data_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_component_request_data_attributes_components_items import CreateComponentRequestDataAttributesComponentsItems + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + +class CreateComponentRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_component_request_data_attributes_components_items import CreateComponentRequestDataAttributesComponentsItems + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + return { + "components": ([CreateComponentRequestDataAttributesComponentsItems],), + "name": (str,), + "position": (int,), + "type": (CreateComponentRequestDataAttributesType,), + } + attribute_map = { + "components": "components", + "name": "name", + "position": "position", + "type": "type", + } + + def __init__(self_, name: str, position: int, type: CreateComponentRequestDataAttributesType, components: Union[List[CreateComponentRequestDataAttributesComponentsItems], UnsetType]=unset, **kwargs): + """ + The supported attributes for creating a component. + + :param components: If creating a component of type ``group`` , the components to create within the group. + :type components: [CreateComponentRequestDataAttributesComponentsItems], optional + + :param name: The name of the component. + :type name: str + + :param position: The zero-indexed position of the component. + :type position: int + + :param type: The type of the component. + :type type: CreateComponentRequestDataAttributesType + """ + if components is not unset: + kwargs["components"] = components + super().__init__(kwargs) + + + self_.name = name + self_.position = position + self_.type = type diff --git a/datadog_api_client/v2/model/create_component_request_data_attributes_components_items.py b/datadog_api_client/v2/model/create_component_request_data_attributes_components_items.py new file mode 100644 index 0000000000..55f533d7f2 --- /dev/null +++ b/datadog_api_client/v2/model/create_component_request_data_attributes_components_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + +class CreateComponentRequestDataAttributesComponentsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + return { + "name": (str,), + "position": (int,), + "type": (StatusPagesComponentGroupAttributesComponentsItemsType,), + } + attribute_map = { + "name": "name", + "position": "position", + "type": "type", + } + + def __init__(self_, name: str, position: int, type: StatusPagesComponentGroupAttributesComponentsItemsType, **kwargs): + """ + A component to be created within a group. + + :param name: The name of the grouped component. + :type name: str + + :param position: The zero-indexed position of the grouped component relative to the other components in the group. + :type position: int + + :param type: The type of the component. + :type type: StatusPagesComponentGroupAttributesComponentsItemsType + """ + super().__init__(kwargs) + + + self_.name = name + self_.position = position + self_.type = type diff --git a/datadog_api_client/v2/model/create_component_request_data_attributes_type.py b/datadog_api_client/v2/model/create_component_request_data_attributes_type.py new file mode 100644 index 0000000000..0ec51bbb4f --- /dev/null +++ b/datadog_api_client/v2/model/create_component_request_data_attributes_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateComponentRequestDataAttributesType(ModelSimple): + """ + The type of the component. + + :param value: Must be one of ["component", "group"]. + :type value: str + """ + + allowed_values = { + "component", + "group", + } + COMPONENT: ClassVar["CreateComponentRequestDataAttributesType"] + GROUP: ClassVar["CreateComponentRequestDataAttributesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateComponentRequestDataAttributesType.COMPONENT = CreateComponentRequestDataAttributesType("component") +CreateComponentRequestDataAttributesType.GROUP = CreateComponentRequestDataAttributesType("group") diff --git a/datadog_api_client/v2/model/create_component_request_data_relationships.py b/datadog_api_client/v2/model/create_component_request_data_relationships.py new file mode 100644 index 0000000000..da9a8c1399 --- /dev/null +++ b/datadog_api_client/v2/model/create_component_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_component_request_data_relationships_group import CreateComponentRequestDataRelationshipsGroup + +class CreateComponentRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_component_request_data_relationships_group import CreateComponentRequestDataRelationshipsGroup + return { + "group": (CreateComponentRequestDataRelationshipsGroup,), + } + attribute_map = { + "group": "group", + } + + def __init__(self_, group: Union[CreateComponentRequestDataRelationshipsGroup, UnsetType]=unset, **kwargs): + """ + The supported relationships for creating a component. + + :param group: The group to create the component within. + :type group: CreateComponentRequestDataRelationshipsGroup, optional + """ + if group is not unset: + kwargs["group"] = group + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_component_request_data_relationships_group.py b/datadog_api_client/v2/model/create_component_request_data_relationships_group.py new file mode 100644 index 0000000000..040acea06d --- /dev/null +++ b/datadog_api_client/v2/model/create_component_request_data_relationships_group.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_component_request_data_relationships_group_data import CreateComponentRequestDataRelationshipsGroupData + +class CreateComponentRequestDataRelationshipsGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_component_request_data_relationships_group_data import CreateComponentRequestDataRelationshipsGroupData + return { + "data": (CreateComponentRequestDataRelationshipsGroupData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateComponentRequestDataRelationshipsGroupData, none_type], **kwargs): + """ + The group to create the component within. + + :param data: The data object identifying the group to create the component within. + :type data: CreateComponentRequestDataRelationshipsGroupData, none_type + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_component_request_data_relationships_group_data.py b/datadog_api_client/v2/model/create_component_request_data_relationships_group_data.py new file mode 100644 index 0000000000..84575944c5 --- /dev/null +++ b/datadog_api_client/v2/model/create_component_request_data_relationships_group_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + +class CreateComponentRequestDataRelationshipsGroupData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + return { + "id": (UUID,), + "type": (StatusPagesComponentGroupType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPagesComponentGroupType, **kwargs): + """ + The data object identifying the group to create the component within. + + :param id: The ID of the group. + :type id: UUID + + :param type: Components resource type. + :type type: StatusPagesComponentGroupType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/create_connection_request.py b/datadog_api_client/v2/model/create_connection_request.py new file mode 100644 index 0000000000..5fd573bd1a --- /dev/null +++ b/datadog_api_client/v2/model/create_connection_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_connection_request_data import CreateConnectionRequestData + +class CreateConnectionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_connection_request_data import CreateConnectionRequestData + return { + "data": (CreateConnectionRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateConnectionRequestData, UnsetType]=unset, **kwargs): + """ + Request body for creating a new data source connection for an entity. + + :param data: The data object containing the resource type and attributes for creating a new connection. + :type data: CreateConnectionRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_connection_request_data.py b/datadog_api_client/v2/model/create_connection_request_data.py new file mode 100644 index 0000000000..60b93561fe --- /dev/null +++ b/datadog_api_client/v2/model/create_connection_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_connection_request_data_attributes import CreateConnectionRequestDataAttributes + from datadog_api_client.v2.model.update_connection_request_data_type import UpdateConnectionRequestDataType + +class CreateConnectionRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_connection_request_data_attributes import CreateConnectionRequestDataAttributes + from datadog_api_client.v2.model.update_connection_request_data_type import UpdateConnectionRequestDataType + return { + "attributes": (CreateConnectionRequestDataAttributes,), + "id": (str,), + "type": (UpdateConnectionRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: UpdateConnectionRequestDataType, attributes: Union[CreateConnectionRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the resource type and attributes for creating a new connection. + + :param attributes: Attributes defining the data source connection, including join configuration and custom fields. + :type attributes: CreateConnectionRequestDataAttributes, optional + + :param id: Unique identifier for the new connection resource. + :type id: str, optional + + :param type: Connection id resource type. + :type type: UpdateConnectionRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_connection_request_data_attributes.py b/datadog_api_client/v2/model/create_connection_request_data_attributes.py new file mode 100644 index 0000000000..43e6107464 --- /dev/null +++ b/datadog_api_client/v2/model/create_connection_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_connection_request_data_attributes_fields_items import CreateConnectionRequestDataAttributesFieldsItems + +class CreateConnectionRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_connection_request_data_attributes_fields_items import CreateConnectionRequestDataAttributesFieldsItems + return { + "fields": ([CreateConnectionRequestDataAttributesFieldsItems],), + "join_attribute": (str,), + "join_type": (str,), + "metadata": ({str: (str,)},), + "type": (str,), + } + attribute_map = { + "fields": "fields", + "join_attribute": "join_attribute", + "join_type": "join_type", + "metadata": "metadata", + "type": "type", + } + + def __init__(self_, join_attribute: str, join_type: str, type: str, fields: Union[List[CreateConnectionRequestDataAttributesFieldsItems], UnsetType]=unset, metadata: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + Attributes defining the data source connection, including join configuration and custom fields. + + :param fields: List of custom attribute fields to import from the data source. + :type fields: [CreateConnectionRequestDataAttributesFieldsItems], optional + + :param join_attribute: The attribute in the data source used to join records with the entity. + :type join_attribute: str + + :param join_type: The type of join key used to link the data source to the entity (for example, email or user_id). + :type join_type: str + + :param metadata: Additional key-value metadata associated with the connection. + :type metadata: {str: (str,)}, optional + + :param type: The type of data source connection (for example, ref_table). + :type type: str + """ + if fields is not unset: + kwargs["fields"] = fields + if metadata is not unset: + kwargs["metadata"] = metadata + super().__init__(kwargs) + + + self_.join_attribute = join_attribute + self_.join_type = join_type + self_.type = type diff --git a/datadog_api_client/v2/model/create_connection_request_data_attributes_fields_items.py b/datadog_api_client/v2/model/create_connection_request_data_attributes_fields_items.py new file mode 100644 index 0000000000..868f88854d --- /dev/null +++ b/datadog_api_client/v2/model/create_connection_request_data_attributes_fields_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateConnectionRequestDataAttributesFieldsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "display_name": (str,), + "groups": ([str],), + "id": (str,), + "source_name": (str,), + "type": (str,), + } + attribute_map = { + "description": "description", + "display_name": "display_name", + "groups": "groups", + "id": "id", + "source_name": "source_name", + "type": "type", + } + + def __init__(self_, id: str, source_name: str, type: str, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, groups: Union[List[str], UnsetType]=unset, **kwargs): + """ + Definition of a custom attribute field to import from a data source connection. + + :param description: Human-readable explanation of what the field represents. + :type description: str, optional + + :param display_name: The human-readable label for the field shown in the UI. + :type display_name: str, optional + + :param groups: List of group labels used to categorize the field. + :type groups: [str], optional + + :param id: The unique identifier for the field within the connection. + :type id: str + + :param source_name: The name of the column or attribute in the source data system that maps to this field. + :type source_name: str + + :param type: The data type of the field (for example, string or number). + :type type: str + """ + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if groups is not unset: + kwargs["groups"] = groups + super().__init__(kwargs) + + + self_.id = id + self_.source_name = source_name + self_.type = type diff --git a/datadog_api_client/v2/model/create_custom_framework_request.py b/datadog_api_client/v2/model/create_custom_framework_request.py new file mode 100644 index 0000000000..7254d192f5 --- /dev/null +++ b/datadog_api_client/v2/model/create_custom_framework_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_framework_data import CustomFrameworkData + +class CreateCustomFrameworkRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_framework_data import CustomFrameworkData + return { + "data": (CustomFrameworkData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomFrameworkData, **kwargs): + """ + Request object to create a custom framework. + + :param data: Contains type and attributes for custom frameworks. + :type data: CustomFrameworkData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_custom_framework_response.py b/datadog_api_client/v2/model/create_custom_framework_response.py new file mode 100644 index 0000000000..33f096248b --- /dev/null +++ b/datadog_api_client/v2/model/create_custom_framework_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.framework_handle_and_version_response_data import FrameworkHandleAndVersionResponseData + +class CreateCustomFrameworkResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.framework_handle_and_version_response_data import FrameworkHandleAndVersionResponseData + return { + "data": (FrameworkHandleAndVersionResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FrameworkHandleAndVersionResponseData, **kwargs): + """ + Response object to create a custom framework. + + :param data: Contains type and attributes for custom frameworks. + :type data: FrameworkHandleAndVersionResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_data_deletion_request_body.py b/datadog_api_client/v2/model/create_data_deletion_request_body.py new file mode 100644 index 0000000000..56a61e3f21 --- /dev/null +++ b/datadog_api_client/v2/model/create_data_deletion_request_body.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_data_deletion_request_body_data import CreateDataDeletionRequestBodyData + +class CreateDataDeletionRequestBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_data_deletion_request_body_data import CreateDataDeletionRequestBodyData + return { + "data": (CreateDataDeletionRequestBodyData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateDataDeletionRequestBodyData, **kwargs): + """ + Object needed to create a data deletion request. + + :param data: Data needed to create a data deletion request. + :type data: CreateDataDeletionRequestBodyData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_data_deletion_request_body_attributes.py b/datadog_api_client/v2/model/create_data_deletion_request_body_attributes.py new file mode 100644 index 0000000000..6dca2d86e9 --- /dev/null +++ b/datadog_api_client/v2/model/create_data_deletion_request_body_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateDataDeletionRequestBodyAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (int,), + "indexes": ([str],), + "query": ({str: (str,)},), + "to": (int,), + } + attribute_map = { + "_from": "from", + "indexes": "indexes", + "query": "query", + "to": "to", + } + + def __init__(self_, _from: int, query: Dict[str, str], to: int, indexes: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for creating a data deletion request. + + :param _from: Start of requested time window, milliseconds since Unix epoch. + :type _from: int + + :param indexes: List of indexes for the search. If not provided, the search is performed in all indexes. + :type indexes: [str], optional + + :param query: Query for creating a data deletion request. + :type query: {str: (str,)} + + :param to: End of requested time window, milliseconds since Unix epoch. + :type to: int + """ + if indexes is not unset: + kwargs["indexes"] = indexes + super().__init__(kwargs) + + + self_._from = _from + self_.query = query + self_.to = to diff --git a/datadog_api_client/v2/model/create_data_deletion_request_body_data.py b/datadog_api_client/v2/model/create_data_deletion_request_body_data.py new file mode 100644 index 0000000000..acb4d71512 --- /dev/null +++ b/datadog_api_client/v2/model/create_data_deletion_request_body_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_data_deletion_request_body_attributes import CreateDataDeletionRequestBodyAttributes + from datadog_api_client.v2.model.create_data_deletion_request_body_data_type import CreateDataDeletionRequestBodyDataType + +class CreateDataDeletionRequestBodyData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_data_deletion_request_body_attributes import CreateDataDeletionRequestBodyAttributes + from datadog_api_client.v2.model.create_data_deletion_request_body_data_type import CreateDataDeletionRequestBodyDataType + return { + "attributes": (CreateDataDeletionRequestBodyAttributes,), + "type": (CreateDataDeletionRequestBodyDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateDataDeletionRequestBodyAttributes, type: CreateDataDeletionRequestBodyDataType, **kwargs): + """ + Data needed to create a data deletion request. + + :param attributes: Attributes for creating a data deletion request. + :type attributes: CreateDataDeletionRequestBodyAttributes + + :param type: The deletion request type. + :type type: CreateDataDeletionRequestBodyDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_data_deletion_request_body_data_type.py b/datadog_api_client/v2/model/create_data_deletion_request_body_data_type.py new file mode 100644 index 0000000000..ecc238844e --- /dev/null +++ b/datadog_api_client/v2/model/create_data_deletion_request_body_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateDataDeletionRequestBodyDataType(ModelSimple): + """ + The deletion request type. + + :param value: If omitted defaults to "create_deletion_req". Must be one of ["create_deletion_req"]. + :type value: str + """ + + allowed_values = { + "create_deletion_req", + } + CREATE_DELETION_REQ: ClassVar["CreateDataDeletionRequestBodyDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateDataDeletionRequestBodyDataType.CREATE_DELETION_REQ = CreateDataDeletionRequestBodyDataType("create_deletion_req") diff --git a/datadog_api_client/v2/model/create_data_deletion_response_body.py b/datadog_api_client/v2/model/create_data_deletion_response_body.py new file mode 100644 index 0000000000..173f6a03d2 --- /dev/null +++ b/datadog_api_client/v2/model/create_data_deletion_response_body.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_deletion_response_item import DataDeletionResponseItem + from datadog_api_client.v2.model.data_deletion_response_meta import DataDeletionResponseMeta + +class CreateDataDeletionResponseBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_deletion_response_item import DataDeletionResponseItem + from datadog_api_client.v2.model.data_deletion_response_meta import DataDeletionResponseMeta + return { + "data": (DataDeletionResponseItem,), + "meta": (DataDeletionResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[DataDeletionResponseItem, UnsetType]=unset, meta: Union[DataDeletionResponseMeta, UnsetType]=unset, **kwargs): + """ + The response from the create data deletion request endpoint. + + :param data: The created data deletion request information. + :type data: DataDeletionResponseItem, optional + + :param meta: The metadata of the data deletion response. + :type meta: DataDeletionResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_degradation_request.py b/datadog_api_client/v2/model/create_degradation_request.py new file mode 100644 index 0000000000..9166f7ef2d --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_request_data import CreateDegradationRequestData + from datadog_api_client.v2.model.degradation_request_meta import DegradationRequestMeta + +class CreateDegradationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_request_data import CreateDegradationRequestData + from datadog_api_client.v2.model.degradation_request_meta import DegradationRequestMeta + return { + "data": (CreateDegradationRequestData,), + "meta": (DegradationRequestMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[CreateDegradationRequestData, UnsetType]=unset, meta: Union[DegradationRequestMeta, UnsetType]=unset, **kwargs): + """ + Request object for creating a degradation. + + :param data: The data object for creating a degradation. + :type data: CreateDegradationRequestData, optional + + :param meta: The supported metadata for a degradation request. + :type meta: DegradationRequestMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_degradation_request_data.py b/datadog_api_client/v2/model/create_degradation_request_data.py new file mode 100644 index 0000000000..2f6274d0e5 --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_request_data_attributes import CreateDegradationRequestDataAttributes + from datadog_api_client.v2.model.create_degradation_request_data_relationships import CreateDegradationRequestDataRelationships + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + +class CreateDegradationRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_request_data_attributes import CreateDegradationRequestDataAttributes + from datadog_api_client.v2.model.create_degradation_request_data_relationships import CreateDegradationRequestDataRelationships + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + return { + "attributes": (CreateDegradationRequestDataAttributes,), + "relationships": (CreateDegradationRequestDataRelationships,), + "type": (PatchDegradationRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: CreateDegradationRequestDataAttributes, type: PatchDegradationRequestDataType, relationships: Union[CreateDegradationRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for creating a degradation. + + :param attributes: The supported attributes for creating a degradation. + :type attributes: CreateDegradationRequestDataAttributes + + :param relationships: The supported relationships for creating a degradation. + :type relationships: CreateDegradationRequestDataRelationships, optional + + :param type: Degradations resource type. + :type type: PatchDegradationRequestDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_degradation_request_data_attributes.py b/datadog_api_client/v2/model/create_degradation_request_data_attributes.py new file mode 100644 index 0000000000..84912a4793 --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_request_data_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_request_data_attributes_components_affected_items import CreateDegradationRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + +class CreateDegradationRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_request_data_attributes_components_affected_items import CreateDegradationRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + return { + "components_affected": ([CreateDegradationRequestDataAttributesComponentsAffectedItems],), + "description": (str,), + "status": (CreateDegradationRequestDataAttributesStatus,), + "title": (str,), + } + attribute_map = { + "components_affected": "components_affected", + "description": "description", + "status": "status", + "title": "title", + } + + def __init__(self_, components_affected: List[CreateDegradationRequestDataAttributesComponentsAffectedItems], status: CreateDegradationRequestDataAttributesStatus, title: str, description: Union[str, UnsetType]=unset, **kwargs): + """ + The supported attributes for creating a degradation. + + :param components_affected: The components affected by the degradation. + :type components_affected: [CreateDegradationRequestDataAttributesComponentsAffectedItems] + + :param description: The description of the degradation. + :type description: str, optional + + :param status: The status of the degradation. + :type status: CreateDegradationRequestDataAttributesStatus + + :param title: The title of the degradation. + :type title: str + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.components_affected = components_affected + self_.status = status + self_.title = title diff --git a/datadog_api_client/v2/model/create_degradation_request_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/create_degradation_request_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..e851782566 --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_request_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + +class CreateDegradationRequestDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + return { + "id": (UUID,), + "name": (str,), + "status": (StatusPagesComponentDataAttributesStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: UUID, status: StatusPagesComponentDataAttributesStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a degradation. + + :param id: The ID of the component. Must be a component of type ``component``. + :type id: UUID + + :param name: The name of the component. + :type name: str, optional + + :param status: The status of the component. + :type status: StatusPagesComponentDataAttributesStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/create_degradation_request_data_attributes_status.py b/datadog_api_client/v2/model/create_degradation_request_data_attributes_status.py new file mode 100644 index 0000000000..de995e813a --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_request_data_attributes_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateDegradationRequestDataAttributesStatus(ModelSimple): + """ + The status of the degradation. + + :param value: Must be one of ["investigating", "identified", "monitoring", "resolved"]. + :type value: str + """ + + allowed_values = { + "investigating", + "identified", + "monitoring", + "resolved", + } + INVESTIGATING: ClassVar["CreateDegradationRequestDataAttributesStatus"] + IDENTIFIED: ClassVar["CreateDegradationRequestDataAttributesStatus"] + MONITORING: ClassVar["CreateDegradationRequestDataAttributesStatus"] + RESOLVED: ClassVar["CreateDegradationRequestDataAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateDegradationRequestDataAttributesStatus.INVESTIGATING = CreateDegradationRequestDataAttributesStatus("investigating") +CreateDegradationRequestDataAttributesStatus.IDENTIFIED = CreateDegradationRequestDataAttributesStatus("identified") +CreateDegradationRequestDataAttributesStatus.MONITORING = CreateDegradationRequestDataAttributesStatus("monitoring") +CreateDegradationRequestDataAttributesStatus.RESOLVED = CreateDegradationRequestDataAttributesStatus("resolved") diff --git a/datadog_api_client/v2/model/create_degradation_request_data_relationships.py b/datadog_api_client/v2/model/create_degradation_request_data_relationships.py new file mode 100644 index 0000000000..815996c685 --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_request_data_relationships_template import CreateDegradationRequestDataRelationshipsTemplate + +class CreateDegradationRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_request_data_relationships_template import CreateDegradationRequestDataRelationshipsTemplate + return { + "template": (CreateDegradationRequestDataRelationshipsTemplate,), + } + attribute_map = { + "template": "template", + } + + def __init__(self_, template: Union[CreateDegradationRequestDataRelationshipsTemplate, UnsetType]=unset, **kwargs): + """ + The supported relationships for creating a degradation. + + :param template: The template used to create the degradation. + :type template: CreateDegradationRequestDataRelationshipsTemplate, optional + """ + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_degradation_request_data_relationships_template.py b/datadog_api_client/v2/model/create_degradation_request_data_relationships_template.py new file mode 100644 index 0000000000..5a39cb6263 --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_request_data_relationships_template.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_request_data_relationships_template_data import CreateDegradationRequestDataRelationshipsTemplateData + +class CreateDegradationRequestDataRelationshipsTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_request_data_relationships_template_data import CreateDegradationRequestDataRelationshipsTemplateData + return { + "data": (CreateDegradationRequestDataRelationshipsTemplateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateDegradationRequestDataRelationshipsTemplateData, **kwargs): + """ + The template used to create the degradation. + + :param data: The data object identifying the template used to create the degradation. + :type data: CreateDegradationRequestDataRelationshipsTemplateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_degradation_request_data_relationships_template_data.py b/datadog_api_client/v2/model/create_degradation_request_data_relationships_template_data.py new file mode 100644 index 0000000000..846225fd3a --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_request_data_relationships_template_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + +class CreateDegradationRequestDataRelationshipsTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + return { + "id": (str,), + "type": (PatchDegradationTemplateRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchDegradationTemplateRequestDataType, **kwargs): + """ + The data object identifying the template used to create the degradation. + + :param id: The ID of the degradation template. + :type id: str + + :param type: Degradation templates resource type. + :type type: PatchDegradationTemplateRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/create_degradation_template_request.py b/datadog_api_client/v2/model/create_degradation_template_request.py new file mode 100644 index 0000000000..92cbdc513c --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_template_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_template_request_data import CreateDegradationTemplateRequestData + +class CreateDegradationTemplateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_template_request_data import CreateDegradationTemplateRequestData + return { + "data": (CreateDegradationTemplateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateDegradationTemplateRequestData, UnsetType]=unset, **kwargs): + """ + Request object for creating a degradation template. + + :param data: The data object for creating a degradation template. + :type data: CreateDegradationTemplateRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_degradation_template_request_data.py b/datadog_api_client/v2/model/create_degradation_template_request_data.py new file mode 100644 index 0000000000..524a792f18 --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_template_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_template_request_data_attributes import CreateDegradationTemplateRequestDataAttributes + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + +class CreateDegradationTemplateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_template_request_data_attributes import CreateDegradationTemplateRequestDataAttributes + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + return { + "attributes": (CreateDegradationTemplateRequestDataAttributes,), + "type": (PatchDegradationTemplateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: PatchDegradationTemplateRequestDataType, attributes: Union[CreateDegradationTemplateRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object for creating a degradation template. + + :param attributes: The attributes for creating a degradation template. + :type attributes: CreateDegradationTemplateRequestDataAttributes, optional + + :param type: Degradation templates resource type. + :type type: PatchDegradationTemplateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_degradation_template_request_data_attributes.py b/datadog_api_client/v2/model/create_degradation_template_request_data_attributes.py new file mode 100644 index 0000000000..32dee78eee --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_template_request_data_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_template_request_data_attributes_components_affected_items import CreateDegradationTemplateRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_template_request_data_attributes_updates_items import CreateDegradationTemplateRequestDataAttributesUpdatesItems + +class CreateDegradationTemplateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_template_request_data_attributes_components_affected_items import CreateDegradationTemplateRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_template_request_data_attributes_updates_items import CreateDegradationTemplateRequestDataAttributesUpdatesItems + return { + "components_affected": ([CreateDegradationTemplateRequestDataAttributesComponentsAffectedItems],), + "degradation_title": (str,), + "name": (str,), + "updates": ([CreateDegradationTemplateRequestDataAttributesUpdatesItems],), + } + attribute_map = { + "components_affected": "components_affected", + "degradation_title": "degradation_title", + "name": "name", + "updates": "updates", + } + + def __init__(self_, name: str, components_affected: Union[List[CreateDegradationTemplateRequestDataAttributesComponentsAffectedItems], UnsetType]=unset, degradation_title: Union[str, UnsetType]=unset, updates: Union[List[CreateDegradationTemplateRequestDataAttributesUpdatesItems], UnsetType]=unset, **kwargs): + """ + The attributes for creating a degradation template. + + :param components_affected: The components affected by a degradation created from this template. + :type components_affected: [CreateDegradationTemplateRequestDataAttributesComponentsAffectedItems], optional + + :param degradation_title: The title used for a degradation created from this template. + :type degradation_title: str, optional + + :param name: The name of the degradation template. + :type name: str + + :param updates: The pre-filled updates for a degradation created from this template. + :type updates: [CreateDegradationTemplateRequestDataAttributesUpdatesItems], optional + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if degradation_title is not unset: + kwargs["degradation_title"] = degradation_title + if updates is not unset: + kwargs["updates"] = updates + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/create_degradation_template_request_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/create_degradation_template_request_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..beda6f8a98 --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_template_request_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items_status import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus + +class CreateDegradationTemplateRequestDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items_status import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus + return { + "id": (str,), + "name": (str,), + "status": (PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: str, status: PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a degradation created from this template. + + :param id: The ID of the component. Must be a component of type ``component``. + :type id: str + + :param name: The name of the component. + :type name: str, optional + + :param status: The status of the component. + :type status: PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/create_degradation_template_request_data_attributes_updates_items.py b/datadog_api_client/v2/model/create_degradation_template_request_data_attributes_updates_items.py new file mode 100644 index 0000000000..56483dadde --- /dev/null +++ b/datadog_api_client/v2/model/create_degradation_template_request_data_attributes_updates_items.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + +class CreateDegradationTemplateRequestDataAttributesUpdatesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + return { + "message": (str,), + "status": (CreateDegradationRequestDataAttributesStatus,), + } + attribute_map = { + "message": "message", + "status": "status", + } + + def __init__(self_, status: CreateDegradationRequestDataAttributesStatus, message: Union[str, UnsetType]=unset, **kwargs): + """ + A pre-filled update for a degradation created from this template. + + :param message: The message of the update. + :type message: str, optional + + :param status: The status of the degradation. + :type status: CreateDegradationRequestDataAttributesStatus + """ + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/create_deployment_gate_params.py b/datadog_api_client/v2/model/create_deployment_gate_params.py new file mode 100644 index 0000000000..4e4139036d --- /dev/null +++ b/datadog_api_client/v2/model/create_deployment_gate_params.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_deployment_gate_params_data import CreateDeploymentGateParamsData + +class CreateDeploymentGateParams(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_deployment_gate_params_data import CreateDeploymentGateParamsData + return { + "data": (CreateDeploymentGateParamsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateDeploymentGateParamsData, **kwargs): + """ + Parameters for creating a deployment gate. + + :param data: Parameters for creating a deployment gate. + :type data: CreateDeploymentGateParamsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_deployment_gate_params_data.py b/datadog_api_client/v2/model/create_deployment_gate_params_data.py new file mode 100644 index 0000000000..48613e235a --- /dev/null +++ b/datadog_api_client/v2/model/create_deployment_gate_params_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_deployment_gate_params_data_attributes import CreateDeploymentGateParamsDataAttributes + from datadog_api_client.v2.model.deployment_gate_data_type import DeploymentGateDataType + +class CreateDeploymentGateParamsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_deployment_gate_params_data_attributes import CreateDeploymentGateParamsDataAttributes + from datadog_api_client.v2.model.deployment_gate_data_type import DeploymentGateDataType + return { + "attributes": (CreateDeploymentGateParamsDataAttributes,), + "type": (DeploymentGateDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateDeploymentGateParamsDataAttributes, type: DeploymentGateDataType, **kwargs): + """ + Parameters for creating a deployment gate. + + :param attributes: Parameters for creating a deployment gate. + :type attributes: CreateDeploymentGateParamsDataAttributes + + :param type: Deployment gate resource type. + :type type: DeploymentGateDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_deployment_gate_params_data_attributes.py b/datadog_api_client/v2/model/create_deployment_gate_params_data_attributes.py new file mode 100644 index 0000000000..71b4058203 --- /dev/null +++ b/datadog_api_client/v2/model/create_deployment_gate_params_data_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateDeploymentGateParamsDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dry_run": (bool,), + "env": (str,), + "identifier": (str,), + "service": (str,), + } + attribute_map = { + "dry_run": "dry_run", + "env": "env", + "identifier": "identifier", + "service": "service", + } + + def __init__(self_, env: str, service: str, dry_run: Union[bool, UnsetType]=unset, identifier: Union[str, UnsetType]=unset, **kwargs): + """ + Parameters for creating a deployment gate. + + :param dry_run: Whether this gate is run in dry-run mode. + :type dry_run: bool, optional + + :param env: The environment of the deployment gate. + :type env: str + + :param identifier: The identifier of the deployment gate. + :type identifier: str, optional + + :param service: The service of the deployment gate. + :type service: str + """ + if dry_run is not unset: + kwargs["dry_run"] = dry_run + if identifier is not unset: + kwargs["identifier"] = identifier + super().__init__(kwargs) + + + self_.env = env + self_.service = service diff --git a/datadog_api_client/v2/model/create_deployment_rule_params.py b/datadog_api_client/v2/model/create_deployment_rule_params.py new file mode 100644 index 0000000000..5d06c11e92 --- /dev/null +++ b/datadog_api_client/v2/model/create_deployment_rule_params.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_deployment_rule_params_data import CreateDeploymentRuleParamsData + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class CreateDeploymentRuleParams(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_deployment_rule_params_data import CreateDeploymentRuleParamsData + return { + "data": (CreateDeploymentRuleParamsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateDeploymentRuleParamsData, UnsetType]=unset, **kwargs): + """ + Parameters for creating a deployment rule. + + :param data: Parameters for creating a deployment rule. + :type data: CreateDeploymentRuleParamsData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_deployment_rule_params_data.py b/datadog_api_client/v2/model/create_deployment_rule_params_data.py new file mode 100644 index 0000000000..375c57fae8 --- /dev/null +++ b/datadog_api_client/v2/model/create_deployment_rule_params_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_deployment_rule_params_data_attributes import CreateDeploymentRuleParamsDataAttributes + from datadog_api_client.v2.model.deployment_rule_data_type import DeploymentRuleDataType + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class CreateDeploymentRuleParamsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_deployment_rule_params_data_attributes import CreateDeploymentRuleParamsDataAttributes + from datadog_api_client.v2.model.deployment_rule_data_type import DeploymentRuleDataType + return { + "attributes": (CreateDeploymentRuleParamsDataAttributes,), + "type": (DeploymentRuleDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateDeploymentRuleParamsDataAttributes, type: DeploymentRuleDataType, **kwargs): + """ + Parameters for creating a deployment rule. + + :param attributes: Parameters for creating a deployment rule. + :type attributes: CreateDeploymentRuleParamsDataAttributes + + :param type: Deployment rule resource type. + :type type: DeploymentRuleDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_deployment_rule_params_data_attributes.py b/datadog_api_client/v2/model/create_deployment_rule_params_data_attributes.py new file mode 100644 index 0000000000..bb7988e1e4 --- /dev/null +++ b/datadog_api_client/v2/model/create_deployment_rule_params_data_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_rules_options import DeploymentRulesOptions + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class CreateDeploymentRuleParamsDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_rules_options import DeploymentRulesOptions + return { + "dry_run": (bool,), + "name": (str,), + "options": (DeploymentRulesOptions,), + "type": (str,), + } + attribute_map = { + "dry_run": "dry_run", + "name": "name", + "options": "options", + "type": "type", + } + + def __init__(self_, name: str, options: Union[DeploymentRulesOptions, DeploymentRuleOptionsFaultyDeploymentDetection, DeploymentRuleOptionsMonitor], type: str, dry_run: Union[bool, UnsetType]=unset, **kwargs): + """ + Parameters for creating a deployment rule. + + :param dry_run: Whether this rule is run in dry-run mode. + :type dry_run: bool, optional + + :param name: The name of the deployment rule. + :type name: str + + :param options: Options for deployment rule response representing either faulty deployment detection or monitor options. + :type options: DeploymentRulesOptions + + :param type: The type of the deployment rule (faulty_deployment_detection or monitor). + :type type: str + """ + if dry_run is not unset: + kwargs["dry_run"] = dry_run + super().__init__(kwargs) + + + self_.name = name + self_.options = options + self_.type = type diff --git a/datadog_api_client/v2/model/create_email_notification_channel_config.py b/datadog_api_client/v2/model/create_email_notification_channel_config.py new file mode 100644 index 0000000000..1c618dbfa1 --- /dev/null +++ b/datadog_api_client/v2/model/create_email_notification_channel_config.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_email_format_type import NotificationChannelEmailFormatType + from datadog_api_client.v2.model.notification_channel_email_config_type import NotificationChannelEmailConfigType + +class CreateEmailNotificationChannelConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_email_format_type import NotificationChannelEmailFormatType + from datadog_api_client.v2.model.notification_channel_email_config_type import NotificationChannelEmailConfigType + return { + "address": (str,), + "formats": ([NotificationChannelEmailFormatType],), + "type": (NotificationChannelEmailConfigType,), + } + attribute_map = { + "address": "address", + "formats": "formats", + "type": "type", + } + + def __init__(self_, address: str, formats: List[NotificationChannelEmailFormatType], type: NotificationChannelEmailConfigType, **kwargs): + """ + Configuration to create an e-mail notification channel + + :param address: The e-mail address to be notified + :type address: str + + :param formats: Preferred content formats for notifications. + :type formats: [NotificationChannelEmailFormatType] + + :param type: Indicates that the notification channel is an e-mail address + :type type: NotificationChannelEmailConfigType + """ + super().__init__(kwargs) + + + self_.address = address + self_.formats = formats + self_.type = type diff --git a/datadog_api_client/v2/model/create_environment_attributes.py b/datadog_api_client/v2/model/create_environment_attributes.py new file mode 100644 index 0000000000..8db0995aed --- /dev/null +++ b/datadog_api_client/v2/model/create_environment_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateEnvironmentAttributes(ModelNormal): + validations = { + "queries": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "is_production": (bool,), + "name": (str,), + "queries": ([str],), + "require_feature_flag_approval": (bool,), + } + attribute_map = { + "is_production": "is_production", + "name": "name", + "queries": "queries", + "require_feature_flag_approval": "require_feature_flag_approval", + } + + def __init__(self_, name: str, queries: List[str], is_production: Union[bool, UnsetType]=unset, require_feature_flag_approval: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for creating a new environment. + + :param is_production: Indicates whether this is a production environment. + :type is_production: bool, optional + + :param name: The name of the environment. + :type name: str + + :param queries: List of queries to define the environment scope. + :type queries: [str] + + :param require_feature_flag_approval: Indicates whether feature flag changes require approval in this environment. + :type require_feature_flag_approval: bool, optional + """ + if is_production is not unset: + kwargs["is_production"] = is_production + if require_feature_flag_approval is not unset: + kwargs["require_feature_flag_approval"] = require_feature_flag_approval + super().__init__(kwargs) + + + self_.name = name + self_.queries = queries diff --git a/datadog_api_client/v2/model/create_environment_data.py b/datadog_api_client/v2/model/create_environment_data.py new file mode 100644 index 0000000000..d7136e28a3 --- /dev/null +++ b/datadog_api_client/v2/model/create_environment_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_environment_attributes import CreateEnvironmentAttributes + from datadog_api_client.v2.model.create_environment_data_type import CreateEnvironmentDataType + +class CreateEnvironmentData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_environment_attributes import CreateEnvironmentAttributes + from datadog_api_client.v2.model.create_environment_data_type import CreateEnvironmentDataType + return { + "attributes": (CreateEnvironmentAttributes,), + "type": (CreateEnvironmentDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateEnvironmentAttributes, type: CreateEnvironmentDataType, **kwargs): + """ + Data for creating a new environment. + + :param attributes: Attributes for creating a new environment. + :type attributes: CreateEnvironmentAttributes + + :param type: The resource type. + :type type: CreateEnvironmentDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_environment_data_type.py b/datadog_api_client/v2/model/create_environment_data_type.py new file mode 100644 index 0000000000..fdea6a0f86 --- /dev/null +++ b/datadog_api_client/v2/model/create_environment_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateEnvironmentDataType(ModelSimple): + """ + The resource type. + + :param value: If omitted defaults to "environments". Must be one of ["environments"]. + :type value: str + """ + + allowed_values = { + "environments", + } + ENVIRONMENTS: ClassVar["CreateEnvironmentDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateEnvironmentDataType.ENVIRONMENTS = CreateEnvironmentDataType("environments") diff --git a/datadog_api_client/v2/model/create_environment_request.py b/datadog_api_client/v2/model/create_environment_request.py new file mode 100644 index 0000000000..ea2117d9ea --- /dev/null +++ b/datadog_api_client/v2/model/create_environment_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_environment_data import CreateEnvironmentData + +class CreateEnvironmentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_environment_data import CreateEnvironmentData + return { + "data": (CreateEnvironmentData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateEnvironmentData, **kwargs): + """ + Request to create a new environment. + + :param data: Data for creating a new environment. + :type data: CreateEnvironmentData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_feature_flag_attributes.py b/datadog_api_client/v2/model/create_feature_flag_attributes.py new file mode 100644 index 0000000000..1e88e28c52 --- /dev/null +++ b/datadog_api_client/v2/model/create_feature_flag_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.value_type import ValueType + from datadog_api_client.v2.model.create_variant import CreateVariant + +class CreateFeatureFlagAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.value_type import ValueType + from datadog_api_client.v2.model.create_variant import CreateVariant + return { + "default_variant_key": (str, none_type), + "description": (str,), + "json_schema": (str, none_type), + "key": (str,), + "name": (str,), + "value_type": (ValueType,), + "variants": ([CreateVariant],), + } + attribute_map = { + "default_variant_key": "default_variant_key", + "description": "description", + "json_schema": "json_schema", + "key": "key", + "name": "name", + "value_type": "value_type", + "variants": "variants", + } + + def __init__(self_, description: str, key: str, name: str, value_type: ValueType, variants: List[CreateVariant], default_variant_key: Union[str, none_type, UnsetType]=unset, json_schema: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes for creating a new feature flag. + + :param default_variant_key: The key of the default variant. + :type default_variant_key: str, none_type, optional + + :param description: The description of the feature flag. + :type description: str + + :param json_schema: JSON schema for validation when value_type is JSON. + :type json_schema: str, none_type, optional + + :param key: The unique key of the feature flag. + :type key: str + + :param name: The name of the feature flag. + :type name: str + + :param value_type: The type of values for the feature flag variants. + :type value_type: ValueType + + :param variants: The variants of the feature flag. + :type variants: [CreateVariant] + """ + if default_variant_key is not unset: + kwargs["default_variant_key"] = default_variant_key + if json_schema is not unset: + kwargs["json_schema"] = json_schema + super().__init__(kwargs) + + + self_.description = description + self_.key = key + self_.name = name + self_.value_type = value_type + self_.variants = variants diff --git a/datadog_api_client/v2/model/create_feature_flag_data.py b/datadog_api_client/v2/model/create_feature_flag_data.py new file mode 100644 index 0000000000..2625e5ad39 --- /dev/null +++ b/datadog_api_client/v2/model/create_feature_flag_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_feature_flag_attributes import CreateFeatureFlagAttributes + from datadog_api_client.v2.model.create_feature_flag_data_type import CreateFeatureFlagDataType + +class CreateFeatureFlagData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_feature_flag_attributes import CreateFeatureFlagAttributes + from datadog_api_client.v2.model.create_feature_flag_data_type import CreateFeatureFlagDataType + return { + "attributes": (CreateFeatureFlagAttributes,), + "type": (CreateFeatureFlagDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateFeatureFlagAttributes, type: CreateFeatureFlagDataType, **kwargs): + """ + Data for creating a new feature flag. + + :param attributes: Attributes for creating a new feature flag. + :type attributes: CreateFeatureFlagAttributes + + :param type: The resource type. + :type type: CreateFeatureFlagDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_feature_flag_data_type.py b/datadog_api_client/v2/model/create_feature_flag_data_type.py new file mode 100644 index 0000000000..0902853d93 --- /dev/null +++ b/datadog_api_client/v2/model/create_feature_flag_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateFeatureFlagDataType(ModelSimple): + """ + The resource type. + + :param value: If omitted defaults to "feature-flags". Must be one of ["feature-flags"]. + :type value: str + """ + + allowed_values = { + "feature-flags", + } + FEATURE_FLAGS: ClassVar["CreateFeatureFlagDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateFeatureFlagDataType.FEATURE_FLAGS = CreateFeatureFlagDataType("feature-flags") diff --git a/datadog_api_client/v2/model/create_feature_flag_request.py b/datadog_api_client/v2/model/create_feature_flag_request.py new file mode 100644 index 0000000000..e620412d4d --- /dev/null +++ b/datadog_api_client/v2/model/create_feature_flag_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_feature_flag_data import CreateFeatureFlagData + +class CreateFeatureFlagRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_feature_flag_data import CreateFeatureFlagData + return { + "data": (CreateFeatureFlagData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateFeatureFlagData, **kwargs): + """ + Request to create a new feature flag. + + :param data: Data for creating a new feature flag. + :type data: CreateFeatureFlagData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_form_data.py b/datadog_api_client/v2/model/create_form_data.py new file mode 100644 index 0000000000..d559fb5c4e --- /dev/null +++ b/datadog_api_client/v2/model/create_form_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_form_data_attributes import CreateFormDataAttributes + from datadog_api_client.v2.model.form_type import FormType + +class CreateFormData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_form_data_attributes import CreateFormDataAttributes + from datadog_api_client.v2.model.form_type import FormType + return { + "attributes": (CreateFormDataAttributes,), + "type": (FormType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateFormDataAttributes, type: FormType, **kwargs): + """ + The data for creating a form. + + :param attributes: The attributes for creating a form. + :type attributes: CreateFormDataAttributes + + :param type: The resource type for a form. + :type type: FormType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_form_data_attributes.py b/datadog_api_client/v2/model/create_form_data_attributes.py new file mode 100644 index 0000000000..b8d43f6b58 --- /dev/null +++ b/datadog_api_client/v2/model/create_form_data_attributes.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_data_definition import FormDataDefinition + from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition + +class CreateFormDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_data_definition import FormDataDefinition + from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition + return { + "anonymous": (bool,), + "data_definition": (FormDataDefinition,), + "description": (str,), + "idp_survey": (bool,), + "name": (str,), + "single_response": (bool,), + "ui_definition": (FormUiDefinition,), + } + attribute_map = { + "anonymous": "anonymous", + "data_definition": "data_definition", + "description": "description", + "idp_survey": "idp_survey", + "name": "name", + "single_response": "single_response", + "ui_definition": "ui_definition", + } + + def __init__(self_, data_definition: FormDataDefinition, name: str, ui_definition: FormUiDefinition, anonymous: Union[bool, UnsetType]=unset, description: Union[str, UnsetType]=unset, idp_survey: Union[bool, UnsetType]=unset, single_response: Union[bool, UnsetType]=unset, **kwargs): + """ + The attributes for creating a form. + + :param anonymous: Whether the form accepts anonymous submissions. + :type anonymous: bool, optional + + :param data_definition: A JSON Schema definition that describes the form's data fields. + :type data_definition: FormDataDefinition + + :param description: The description of the form. + :type description: str, optional + + :param idp_survey: Whether the form is an IDP survey. + :type idp_survey: bool, optional + + :param name: The name of the form. + :type name: str + + :param single_response: Whether each user can only submit one response. + :type single_response: bool, optional + + :param ui_definition: UI configuration for rendering form fields, including widget overrides, field ordering, and themes. + :type ui_definition: FormUiDefinition + """ + if anonymous is not unset: + kwargs["anonymous"] = anonymous + if description is not unset: + kwargs["description"] = description + if idp_survey is not unset: + kwargs["idp_survey"] = idp_survey + if single_response is not unset: + kwargs["single_response"] = single_response + super().__init__(kwargs) + + + self_.data_definition = data_definition + self_.name = name + self_.ui_definition = ui_definition diff --git a/datadog_api_client/v2/model/create_form_request.py b/datadog_api_client/v2/model/create_form_request.py new file mode 100644 index 0000000000..6c4fd398eb --- /dev/null +++ b/datadog_api_client/v2/model/create_form_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_form_data import CreateFormData + +class CreateFormRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_form_data import CreateFormData + return { + "data": (CreateFormData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateFormData, **kwargs): + """ + A request to create a form. + + :param data: The data for creating a form. + :type data: CreateFormData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_incident_notification_rule_request.py b/datadog_api_client/v2/model/create_incident_notification_rule_request.py new file mode 100644 index 0000000000..ac58513fc9 --- /dev/null +++ b/datadog_api_client/v2/model/create_incident_notification_rule_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/create_incident_notification_template_request.py b/datadog_api_client/v2/model/create_incident_notification_template_request.py new file mode 100644 index 0000000000..b6af63c015 --- /dev/null +++ b/datadog_api_client/v2/model/create_incident_notification_template_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_template_create_data import IncidentNotificationTemplateCreateData + +class CreateIncidentNotificationTemplateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_template_create_data import IncidentNotificationTemplateCreateData + return { + "data": (IncidentNotificationTemplateCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentNotificationTemplateCreateData, **kwargs): + """ + Create request for a notification template. + + :param data: Notification template data for a create request. + :type data: IncidentNotificationTemplateCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_jira_issue_request_array.py b/datadog_api_client/v2/model/create_jira_issue_request_array.py new file mode 100644 index 0000000000..708afae13b --- /dev/null +++ b/datadog_api_client/v2/model/create_jira_issue_request_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_jira_issue_request_data import CreateJiraIssueRequestData + +class CreateJiraIssueRequestArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_jira_issue_request_data import CreateJiraIssueRequestData + return { + "data": ([CreateJiraIssueRequestData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CreateJiraIssueRequestData], **kwargs): + """ + List of requests to create Jira issues for security findings. + + :param data: Array of Jira issue creation request data objects. + :type data: [CreateJiraIssueRequestData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_jira_issue_request_data.py b/datadog_api_client/v2/model/create_jira_issue_request_data.py new file mode 100644 index 0000000000..a3e4f5969c --- /dev/null +++ b/datadog_api_client/v2/model/create_jira_issue_request_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_jira_issue_request_data_attributes import CreateJiraIssueRequestDataAttributes + from datadog_api_client.v2.model.create_jira_issue_request_data_relationships import CreateJiraIssueRequestDataRelationships + from datadog_api_client.v2.model.jira_issues_data_type import JiraIssuesDataType + +class CreateJiraIssueRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_jira_issue_request_data_attributes import CreateJiraIssueRequestDataAttributes + from datadog_api_client.v2.model.create_jira_issue_request_data_relationships import CreateJiraIssueRequestDataRelationships + from datadog_api_client.v2.model.jira_issues_data_type import JiraIssuesDataType + return { + "attributes": (CreateJiraIssueRequestDataAttributes,), + "relationships": (CreateJiraIssueRequestDataRelationships,), + "type": (JiraIssuesDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: JiraIssuesDataType, attributes: Union[CreateJiraIssueRequestDataAttributes, UnsetType]=unset, relationships: Union[CreateJiraIssueRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + Data of the Jira issue to create. + + :param attributes: Attributes of the Jira issue to create. + :type attributes: CreateJiraIssueRequestDataAttributes, optional + + :param relationships: Relationships of the Jira issue to create. + :type relationships: CreateJiraIssueRequestDataRelationships, optional + + :param type: Jira issues resource type. + :type type: JiraIssuesDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_jira_issue_request_data_attributes.py b/datadog_api_client/v2/model/create_jira_issue_request_data_attributes.py new file mode 100644 index 0000000000..47211044c9 --- /dev/null +++ b/datadog_api_client/v2/model/create_jira_issue_request_data_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_priority import CasePriority + +class CreateJiraIssueRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_priority import CasePriority + return { + "assignee_id": (str,), + "description": (str,), + "fields": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "priority": (CasePriority,), + "title": (str,), + } + attribute_map = { + "assignee_id": "assignee_id", + "description": "description", + "fields": "fields", + "priority": "priority", + "title": "title", + } + + def __init__(self_, assignee_id: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, fields: Union[Dict[str, Any], UnsetType]=unset, priority: Union[CasePriority, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the Jira issue to create. + + :param assignee_id: Unique identifier of the Datadog user assigned to the Jira issue. + :type assignee_id: str, optional + + :param description: Description of the Jira issue. If not provided, the description will be automatically generated. + :type description: str, optional + + :param fields: Custom fields of the Jira issue to create. For the list of available fields, see `Jira documentation `_. + :type fields: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param priority: Case priority + :type priority: CasePriority, optional + + :param title: Title of the Jira issue. If not provided, the title will be automatically generated. + :type title: str, optional + """ + if assignee_id is not unset: + kwargs["assignee_id"] = assignee_id + if description is not unset: + kwargs["description"] = description + if fields is not unset: + kwargs["fields"] = fields + if priority is not unset: + kwargs["priority"] = priority + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_jira_issue_request_data_relationships.py b/datadog_api_client/v2/model/create_jira_issue_request_data_relationships.py new file mode 100644 index 0000000000..0cd79ccf87 --- /dev/null +++ b/datadog_api_client/v2/model/create_jira_issue_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + +class CreateJiraIssueRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + return { + "findings": (Findings,), + "project": (CaseManagementProject,), + } + attribute_map = { + "findings": "findings", + "project": "project", + } + + def __init__(self_, findings: Findings, project: CaseManagementProject, **kwargs): + """ + Relationships of the Jira issue to create. + + :param findings: A list of security findings. + :type findings: Findings + + :param project: Case management project. + :type project: CaseManagementProject + """ + super().__init__(kwargs) + + + self_.findings = findings + self_.project = project diff --git a/datadog_api_client/v2/model/create_linear_issue_request_array.py b/datadog_api_client/v2/model/create_linear_issue_request_array.py new file mode 100644 index 0000000000..76a3268344 --- /dev/null +++ b/datadog_api_client/v2/model/create_linear_issue_request_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_linear_issue_request_data import CreateLinearIssueRequestData + +class CreateLinearIssueRequestArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_linear_issue_request_data import CreateLinearIssueRequestData + return { + "data": ([CreateLinearIssueRequestData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CreateLinearIssueRequestData], **kwargs): + """ + List of requests to create Linear issues for security findings. + + :param data: Array of Linear issue creation request data objects. + :type data: [CreateLinearIssueRequestData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_linear_issue_request_data.py b/datadog_api_client/v2/model/create_linear_issue_request_data.py new file mode 100644 index 0000000000..9e97df2d18 --- /dev/null +++ b/datadog_api_client/v2/model/create_linear_issue_request_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_linear_issue_request_data_attributes import CreateLinearIssueRequestDataAttributes + from datadog_api_client.v2.model.create_linear_issue_request_data_relationships import CreateLinearIssueRequestDataRelationships + from datadog_api_client.v2.model.linear_issues_data_type import LinearIssuesDataType + +class CreateLinearIssueRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_linear_issue_request_data_attributes import CreateLinearIssueRequestDataAttributes + from datadog_api_client.v2.model.create_linear_issue_request_data_relationships import CreateLinearIssueRequestDataRelationships + from datadog_api_client.v2.model.linear_issues_data_type import LinearIssuesDataType + return { + "attributes": (CreateLinearIssueRequestDataAttributes,), + "relationships": (CreateLinearIssueRequestDataRelationships,), + "type": (LinearIssuesDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: LinearIssuesDataType, attributes: Union[CreateLinearIssueRequestDataAttributes, UnsetType]=unset, relationships: Union[CreateLinearIssueRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + Data of the Linear issue to create. + + :param attributes: Attributes of the Linear issue to create. + :type attributes: CreateLinearIssueRequestDataAttributes, optional + + :param relationships: Relationships of the Linear issue to create. + :type relationships: CreateLinearIssueRequestDataRelationships, optional + + :param type: Linear issues resource type. + :type type: LinearIssuesDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_linear_issue_request_data_attributes.py b/datadog_api_client/v2/model/create_linear_issue_request_data_attributes.py new file mode 100644 index 0000000000..87d4584c54 --- /dev/null +++ b/datadog_api_client/v2/model/create_linear_issue_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_priority import CasePriority + +class CreateLinearIssueRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_priority import CasePriority + return { + "assignee_id": (str,), + "description": (str,), + "label_ids": ([str],), + "linear_project_id": (str,), + "priority": (CasePriority,), + "title": (str,), + } + attribute_map = { + "assignee_id": "assignee_id", + "description": "description", + "label_ids": "label_ids", + "linear_project_id": "linear_project_id", + "priority": "priority", + "title": "title", + } + + def __init__(self_, assignee_id: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, label_ids: Union[List[str], UnsetType]=unset, linear_project_id: Union[str, UnsetType]=unset, priority: Union[CasePriority, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the Linear issue to create. + + :param assignee_id: Unique identifier of the Datadog user assigned to the Linear issue. + :type assignee_id: str, optional + + :param description: Description of the Linear issue. If not provided, the description will be automatically generated. + :type description: str, optional + + :param label_ids: Linear label IDs to set on the created issue. + :type label_ids: [str], optional + + :param linear_project_id: Unique identifier of the Linear project to pin the issue to. If not provided, the issue is not associated with a Linear project. + :type linear_project_id: str, optional + + :param priority: Case priority + :type priority: CasePriority, optional + + :param title: Title of the Linear issue. If not provided, the title will be automatically generated. + :type title: str, optional + """ + if assignee_id is not unset: + kwargs["assignee_id"] = assignee_id + if description is not unset: + kwargs["description"] = description + if label_ids is not unset: + kwargs["label_ids"] = label_ids + if linear_project_id is not unset: + kwargs["linear_project_id"] = linear_project_id + if priority is not unset: + kwargs["priority"] = priority + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_linear_issue_request_data_relationships.py b/datadog_api_client/v2/model/create_linear_issue_request_data_relationships.py new file mode 100644 index 0000000000..98ace8218a --- /dev/null +++ b/datadog_api_client/v2/model/create_linear_issue_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + +class CreateLinearIssueRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + return { + "findings": (Findings,), + "project": (CaseManagementProject,), + } + attribute_map = { + "findings": "findings", + "project": "project", + } + + def __init__(self_, findings: Findings, project: CaseManagementProject, **kwargs): + """ + Relationships of the Linear issue to create. + + :param findings: A list of security findings. + :type findings: Findings + + :param project: Case management project. + :type project: CaseManagementProject + """ + super().__init__(kwargs) + + + self_.findings = findings + self_.project = project diff --git a/datadog_api_client/v2/model/create_maintenance_request.py b/datadog_api_client/v2/model/create_maintenance_request.py new file mode 100644 index 0000000000..a2c42a28b7 --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_maintenance_request_data import CreateMaintenanceRequestData + +class CreateMaintenanceRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_maintenance_request_data import CreateMaintenanceRequestData + return { + "data": (CreateMaintenanceRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateMaintenanceRequestData, UnsetType]=unset, **kwargs): + """ + Request object for creating a maintenance. + + :param data: The data object for creating a maintenance. + :type data: CreateMaintenanceRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_maintenance_request_data.py b/datadog_api_client/v2/model/create_maintenance_request_data.py new file mode 100644 index 0000000000..49b8819c9e --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_maintenance_request_data_attributes import CreateMaintenanceRequestDataAttributes + from datadog_api_client.v2.model.create_maintenance_request_data_relationships import CreateMaintenanceRequestDataRelationships + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + +class CreateMaintenanceRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_maintenance_request_data_attributes import CreateMaintenanceRequestDataAttributes + from datadog_api_client.v2.model.create_maintenance_request_data_relationships import CreateMaintenanceRequestDataRelationships + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + return { + "attributes": (CreateMaintenanceRequestDataAttributes,), + "relationships": (CreateMaintenanceRequestDataRelationships,), + "type": (PatchMaintenanceRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: CreateMaintenanceRequestDataAttributes, type: PatchMaintenanceRequestDataType, relationships: Union[CreateMaintenanceRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for creating a maintenance. + + :param attributes: The supported attributes for creating a maintenance. + :type attributes: CreateMaintenanceRequestDataAttributes + + :param relationships: The supported relationships for creating a maintenance. + :type relationships: CreateMaintenanceRequestDataRelationships, optional + + :param type: Maintenances resource type. + :type type: PatchMaintenanceRequestDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_maintenance_request_data_attributes.py b/datadog_api_client/v2/model/create_maintenance_request_data_attributes.py new file mode 100644 index 0000000000..289eca5fb6 --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_request_data_attributes.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_maintenance_request_data_attributes_components_affected_items import CreateMaintenanceRequestDataAttributesComponentsAffectedItems + +class CreateMaintenanceRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_maintenance_request_data_attributes_components_affected_items import CreateMaintenanceRequestDataAttributesComponentsAffectedItems + return { + "completed_date": (datetime,), + "completed_description": (str,), + "components_affected": ([CreateMaintenanceRequestDataAttributesComponentsAffectedItems],), + "in_progress_description": (str,), + "scheduled_description": (str,), + "start_date": (datetime,), + "title": (str,), + } + attribute_map = { + "completed_date": "completed_date", + "completed_description": "completed_description", + "components_affected": "components_affected", + "in_progress_description": "in_progress_description", + "scheduled_description": "scheduled_description", + "start_date": "start_date", + "title": "title", + } + + def __init__(self_, completed_date: datetime, completed_description: str, in_progress_description: str, scheduled_description: str, start_date: datetime, title: str, components_affected: Union[List[CreateMaintenanceRequestDataAttributesComponentsAffectedItems], UnsetType]=unset, **kwargs): + """ + The supported attributes for creating a maintenance. + + :param completed_date: Timestamp of when the maintenance was completed. + :type completed_date: datetime + + :param completed_description: The description shown when the maintenance is completed. + :type completed_description: str + + :param components_affected: The components affected by the maintenance. + :type components_affected: [CreateMaintenanceRequestDataAttributesComponentsAffectedItems], optional + + :param in_progress_description: The description shown while the maintenance is in progress. + :type in_progress_description: str + + :param scheduled_description: The description shown when the maintenance is scheduled. + :type scheduled_description: str + + :param start_date: Timestamp of when the maintenance is scheduled to start. + :type start_date: datetime + + :param title: The title of the maintenance. + :type title: str + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + super().__init__(kwargs) + + + self_.completed_date = completed_date + self_.completed_description = completed_description + self_.in_progress_description = in_progress_description + self_.scheduled_description = scheduled_description + self_.start_date = start_date + self_.title = title diff --git a/datadog_api_client/v2/model/create_maintenance_request_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/create_maintenance_request_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..e290876d83 --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_request_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items_status import PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + +class CreateMaintenanceRequestDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items_status import PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + return { + "id": (UUID,), + "name": (str,), + "status": (PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: UUID, status: PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a maintenance. + + :param id: The ID of the component. Must be a component of type ``component``. + :type id: UUID + + :param name: The name of the component. + :type name: str, optional + + :param status: The status of the component. + :type status: PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/create_maintenance_request_data_attributes_updates_items_status.py b/datadog_api_client/v2/model/create_maintenance_request_data_attributes_updates_items_status.py new file mode 100644 index 0000000000..4715ad80c5 --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_request_data_attributes_updates_items_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateMaintenanceRequestDataAttributesUpdatesItemsStatus(ModelSimple): + """ + The status of a maintenance update. + + :param value: Must be one of ["in_progress", "completed"]. + :type value: str + """ + + allowed_values = { + "in_progress", + "completed", + } + IN_PROGRESS: ClassVar["CreateMaintenanceRequestDataAttributesUpdatesItemsStatus"] + COMPLETED: ClassVar["CreateMaintenanceRequestDataAttributesUpdatesItemsStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateMaintenanceRequestDataAttributesUpdatesItemsStatus.IN_PROGRESS = CreateMaintenanceRequestDataAttributesUpdatesItemsStatus("in_progress") +CreateMaintenanceRequestDataAttributesUpdatesItemsStatus.COMPLETED = CreateMaintenanceRequestDataAttributesUpdatesItemsStatus("completed") diff --git a/datadog_api_client/v2/model/create_maintenance_request_data_relationships.py b/datadog_api_client/v2/model/create_maintenance_request_data_relationships.py new file mode 100644 index 0000000000..a7bba67711 --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_maintenance_request_data_relationships_template import CreateMaintenanceRequestDataRelationshipsTemplate + +class CreateMaintenanceRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_maintenance_request_data_relationships_template import CreateMaintenanceRequestDataRelationshipsTemplate + return { + "template": (CreateMaintenanceRequestDataRelationshipsTemplate,), + } + attribute_map = { + "template": "template", + } + + def __init__(self_, template: Union[CreateMaintenanceRequestDataRelationshipsTemplate, UnsetType]=unset, **kwargs): + """ + The supported relationships for creating a maintenance. + + :param template: The template used to create the maintenance. + :type template: CreateMaintenanceRequestDataRelationshipsTemplate, optional + """ + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_maintenance_request_data_relationships_template.py b/datadog_api_client/v2/model/create_maintenance_request_data_relationships_template.py new file mode 100644 index 0000000000..1ef6aae223 --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_request_data_relationships_template.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_maintenance_request_data_relationships_template_data import CreateMaintenanceRequestDataRelationshipsTemplateData + +class CreateMaintenanceRequestDataRelationshipsTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_maintenance_request_data_relationships_template_data import CreateMaintenanceRequestDataRelationshipsTemplateData + return { + "data": (CreateMaintenanceRequestDataRelationshipsTemplateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateMaintenanceRequestDataRelationshipsTemplateData, **kwargs): + """ + The template used to create the maintenance. + + :param data: The data object identifying the template used to create the maintenance. + :type data: CreateMaintenanceRequestDataRelationshipsTemplateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_maintenance_request_data_relationships_template_data.py b/datadog_api_client/v2/model/create_maintenance_request_data_relationships_template_data.py new file mode 100644 index 0000000000..4e0bb538bc --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_request_data_relationships_template_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + +class CreateMaintenanceRequestDataRelationshipsTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + return { + "id": (str,), + "type": (PatchMaintenanceTemplateRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchMaintenanceTemplateRequestDataType, **kwargs): + """ + The data object identifying the template used to create the maintenance. + + :param id: The ID of the maintenance template. + :type id: str + + :param type: Maintenance templates resource type. + :type type: PatchMaintenanceTemplateRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/create_maintenance_template_request.py b/datadog_api_client/v2/model/create_maintenance_template_request.py new file mode 100644 index 0000000000..c8cee928b5 --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_template_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_maintenance_template_request_data import CreateMaintenanceTemplateRequestData + +class CreateMaintenanceTemplateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_maintenance_template_request_data import CreateMaintenanceTemplateRequestData + return { + "data": (CreateMaintenanceTemplateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateMaintenanceTemplateRequestData, UnsetType]=unset, **kwargs): + """ + Request object for creating a maintenance template. + + :param data: The data object for creating a maintenance template. + :type data: CreateMaintenanceTemplateRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_maintenance_template_request_data.py b/datadog_api_client/v2/model/create_maintenance_template_request_data.py new file mode 100644 index 0000000000..e5b0e1bd0d --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_template_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_maintenance_template_request_data_attributes import CreateMaintenanceTemplateRequestDataAttributes + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + +class CreateMaintenanceTemplateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_maintenance_template_request_data_attributes import CreateMaintenanceTemplateRequestDataAttributes + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + return { + "attributes": (CreateMaintenanceTemplateRequestDataAttributes,), + "type": (PatchMaintenanceTemplateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: PatchMaintenanceTemplateRequestDataType, attributes: Union[CreateMaintenanceTemplateRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object for creating a maintenance template. + + :param attributes: The attributes for creating a maintenance template. + :type attributes: CreateMaintenanceTemplateRequestDataAttributes, optional + + :param type: Maintenance templates resource type. + :type type: PatchMaintenanceTemplateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_maintenance_template_request_data_attributes.py b/datadog_api_client/v2/model/create_maintenance_template_request_data_attributes.py new file mode 100644 index 0000000000..c499c77ab3 --- /dev/null +++ b/datadog_api_client/v2/model/create_maintenance_template_request_data_attributes.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateMaintenanceTemplateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "completed_description": (str,), + "component_ids": ([str],), + "in_progress_description": (str,), + "maintenance_title": (str,), + "name": (str,), + "scheduled_description": (str,), + } + attribute_map = { + "completed_description": "completed_description", + "component_ids": "component_ids", + "in_progress_description": "in_progress_description", + "maintenance_title": "maintenance_title", + "name": "name", + "scheduled_description": "scheduled_description", + } + + def __init__(self_, name: str, completed_description: Union[str, UnsetType]=unset, component_ids: Union[List[str], UnsetType]=unset, in_progress_description: Union[str, UnsetType]=unset, maintenance_title: Union[str, UnsetType]=unset, scheduled_description: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes for creating a maintenance template. + + :param completed_description: The description shown when a maintenance created from this template is completed. + :type completed_description: str, optional + + :param component_ids: The IDs of the components affected by a maintenance created from this template. + :type component_ids: [str], optional + + :param in_progress_description: The description shown while a maintenance created from this template is in progress. + :type in_progress_description: str, optional + + :param maintenance_title: The title used for a maintenance created from this template. + :type maintenance_title: str, optional + + :param name: The name of the maintenance template. + :type name: str + + :param scheduled_description: The description shown when a maintenance created from this template is scheduled. + :type scheduled_description: str, optional + """ + if completed_description is not unset: + kwargs["completed_description"] = completed_description + if component_ids is not unset: + kwargs["component_ids"] = component_ids + if in_progress_description is not unset: + kwargs["in_progress_description"] = in_progress_description + if maintenance_title is not unset: + kwargs["maintenance_title"] = maintenance_title + if scheduled_description is not unset: + kwargs["scheduled_description"] = scheduled_description + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/create_notification_channel_attributes.py b/datadog_api_client/v2/model/create_notification_channel_attributes.py new file mode 100644 index 0000000000..7922fa5173 --- /dev/null +++ b/datadog_api_client/v2/model/create_notification_channel_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_notification_channel_config import CreateNotificationChannelConfig + from datadog_api_client.v2.model.create_phone_notification_channel_config import CreatePhoneNotificationChannelConfig + from datadog_api_client.v2.model.create_email_notification_channel_config import CreateEmailNotificationChannelConfig + +class CreateNotificationChannelAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_notification_channel_config import CreateNotificationChannelConfig + return { + "config": (CreateNotificationChannelConfig,), + } + attribute_map = { + "config": "config", + } + + def __init__(self_, config: Union[CreateNotificationChannelConfig, CreatePhoneNotificationChannelConfig, CreateEmailNotificationChannelConfig, UnsetType]=unset, **kwargs): + """ + Attributes for creating an on-call notification channel. + + :param config: Defines the configuration for creating an On-Call notification channel + :type config: CreateNotificationChannelConfig, optional + """ + if config is not unset: + kwargs["config"] = config + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_notification_channel_config.py b/datadog_api_client/v2/model/create_notification_channel_config.py new file mode 100644 index 0000000000..189bf64b5e --- /dev/null +++ b/datadog_api_client/v2/model/create_notification_channel_config.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateNotificationChannelConfig(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Defines the configuration for creating an On-Call notification channel + + :param number: The E-164 formatted phone number (e.g. +3371234567) + :type number: str + + :param type: Indicates that the notification channel is a phone + :type type: NotificationChannelPhoneConfigType + + :param address: The e-mail address to be notified + :type address: str + + :param formats: Preferred content formats for notifications. + :type formats: [NotificationChannelEmailFormatType] + """ + 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.create_phone_notification_channel_config import CreatePhoneNotificationChannelConfig + from datadog_api_client.v2.model.create_email_notification_channel_config import CreateEmailNotificationChannelConfig + return { + "oneOf": [ + CreatePhoneNotificationChannelConfig, + CreateEmailNotificationChannelConfig, + ], + } diff --git a/datadog_api_client/v2/model/create_notification_channel_data.py b/datadog_api_client/v2/model/create_notification_channel_data.py new file mode 100644 index 0000000000..b71a73bd11 --- /dev/null +++ b/datadog_api_client/v2/model/create_notification_channel_data.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_notification_channel_attributes import CreateNotificationChannelAttributes + from datadog_api_client.v2.model.notification_channel_type import NotificationChannelType + from datadog_api_client.v2.model.create_phone_notification_channel_config import CreatePhoneNotificationChannelConfig + from datadog_api_client.v2.model.create_email_notification_channel_config import CreateEmailNotificationChannelConfig + +class CreateNotificationChannelData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_notification_channel_attributes import CreateNotificationChannelAttributes + from datadog_api_client.v2.model.notification_channel_type import NotificationChannelType + return { + "attributes": (CreateNotificationChannelAttributes,), + "type": (NotificationChannelType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: NotificationChannelType, attributes: Union[CreateNotificationChannelAttributes, UnsetType]=unset, **kwargs): + """ + Data for creating an on-call notification channel + + :param attributes: Attributes for creating an on-call notification channel. + :type attributes: CreateNotificationChannelAttributes, optional + + :param type: Indicates that the resource is of type 'notification_channels'. + :type type: NotificationChannelType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_notification_rule_parameters.py b/datadog_api_client/v2/model/create_notification_rule_parameters.py new file mode 100644 index 0000000000..199ce1e0aa --- /dev/null +++ b/datadog_api_client/v2/model/create_notification_rule_parameters.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_notification_rule_parameters_data import CreateNotificationRuleParametersData + +class CreateNotificationRuleParameters(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_notification_rule_parameters_data import CreateNotificationRuleParametersData + return { + "data": (CreateNotificationRuleParametersData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateNotificationRuleParametersData, UnsetType]=unset, **kwargs): + """ + Body of the notification rule create request. + + :param data: Data of the notification rule create request: the rule type, and the rule attributes. All fields are required. + :type data: CreateNotificationRuleParametersData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_notification_rule_parameters_data.py b/datadog_api_client/v2/model/create_notification_rule_parameters_data.py new file mode 100644 index 0000000000..863c5dbd20 --- /dev/null +++ b/datadog_api_client/v2/model/create_notification_rule_parameters_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_notification_rule_parameters_data_attributes import CreateNotificationRuleParametersDataAttributes + from datadog_api_client.v2.model.notification_rules_type import NotificationRulesType + +class CreateNotificationRuleParametersData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_notification_rule_parameters_data_attributes import CreateNotificationRuleParametersDataAttributes + from datadog_api_client.v2.model.notification_rules_type import NotificationRulesType + return { + "attributes": (CreateNotificationRuleParametersDataAttributes,), + "type": (NotificationRulesType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateNotificationRuleParametersDataAttributes, type: NotificationRulesType, **kwargs): + """ + Data of the notification rule create request: the rule type, and the rule attributes. All fields are required. + + :param attributes: Attributes of the notification rule create request. + :type attributes: CreateNotificationRuleParametersDataAttributes + + :param type: The rule type associated to notification rules. + :type type: NotificationRulesType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_notification_rule_parameters_data_attributes.py b/datadog_api_client/v2/model/create_notification_rule_parameters_data_attributes.py new file mode 100644 index 0000000000..307d41f742 --- /dev/null +++ b/datadog_api_client/v2/model/create_notification_rule_parameters_data_attributes.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule_routing import NotificationRuleRouting + from datadog_api_client.v2.model.selectors import Selectors + +class CreateNotificationRuleParametersDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule_routing import NotificationRuleRouting + from datadog_api_client.v2.model.selectors import Selectors + return { + "enabled": (bool,), + "name": (str,), + "routing": (NotificationRuleRouting,), + "selectors": (Selectors,), + "targets": ([str],), + "time_aggregation": (int,), + } + attribute_map = { + "enabled": "enabled", + "name": "name", + "routing": "routing", + "selectors": "selectors", + "targets": "targets", + "time_aggregation": "time_aggregation", + } + + def __init__(self_, name: str, selectors: Selectors, targets: List[str], enabled: Union[bool, UnsetType]=unset, routing: Union[NotificationRuleRouting, UnsetType]=unset, time_aggregation: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of the notification rule create request. + + :param enabled: Field used to enable or disable the rule. + :type enabled: bool, optional + + :param name: Name of the notification rule. + :type name: str + + :param routing: Routing configuration for the notification rule. + :type routing: NotificationRuleRouting, optional + + :param selectors: Selectors are used to filter security issues for which notifications should be generated. + Users can specify rule severities, rule types, a query to filter security issues on tags and attributes, and the trigger source. + Only the trigger_source field is required. + :type selectors: Selectors + + :param targets: List of recipients to notify when a notification rule is triggered. Many different target types are supported, + such as email addresses, Slack channels, and PagerDuty services. + The appropriate integrations need to be properly configured to send notifications to the specified targets. + :type targets: [str] + + :param time_aggregation: Time aggregation period (in seconds) is used to aggregate the results of the notification rule evaluation. + Results are aggregated over a selected time frame using a rolling window, which updates with each new evaluation. + Notifications are only sent for new issues discovered during the window. + Time aggregation is only available for vulnerability-based notification rules. When omitted or set to 0, no aggregation + is done. + :type time_aggregation: int, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if routing is not unset: + kwargs["routing"] = routing + if time_aggregation is not unset: + kwargs["time_aggregation"] = time_aggregation + super().__init__(kwargs) + + + self_.name = name + self_.selectors = selectors + self_.targets = targets diff --git a/datadog_api_client/v2/model/create_on_call_notification_rule_request.py b/datadog_api_client/v2/model/create_on_call_notification_rule_request.py new file mode 100644 index 0000000000..197ed66742 --- /dev/null +++ b/datadog_api_client/v2/model/create_on_call_notification_rule_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_on_call_notification_rule_request_data import CreateOnCallNotificationRuleRequestData + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + +class CreateOnCallNotificationRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_on_call_notification_rule_request_data import CreateOnCallNotificationRuleRequestData + return { + "data": (CreateOnCallNotificationRuleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateOnCallNotificationRuleRequestData, **kwargs): + """ + A top-level wrapper for creating a notification rule for a user + + :param data: Data for creating an on-call notification rule + :type data: CreateOnCallNotificationRuleRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_on_call_notification_rule_request_data.py b/datadog_api_client/v2/model/create_on_call_notification_rule_request_data.py new file mode 100644 index 0000000000..592d020676 --- /dev/null +++ b/datadog_api_client/v2/model/create_on_call_notification_rule_request_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_notification_rule_request_attributes import OnCallNotificationRuleRequestAttributes + from datadog_api_client.v2.model.on_call_notification_rule_relationships import OnCallNotificationRuleRelationships + from datadog_api_client.v2.model.on_call_notification_rule_type import OnCallNotificationRuleType + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + +class CreateOnCallNotificationRuleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_notification_rule_request_attributes import OnCallNotificationRuleRequestAttributes + from datadog_api_client.v2.model.on_call_notification_rule_relationships import OnCallNotificationRuleRelationships + from datadog_api_client.v2.model.on_call_notification_rule_type import OnCallNotificationRuleType + return { + "attributes": (OnCallNotificationRuleRequestAttributes,), + "relationships": (OnCallNotificationRuleRelationships,), + "type": (OnCallNotificationRuleType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: OnCallNotificationRuleType, attributes: Union[OnCallNotificationRuleRequestAttributes, UnsetType]=unset, relationships: Union[OnCallNotificationRuleRelationships, UnsetType]=unset, **kwargs): + """ + Data for creating an on-call notification rule + + :param attributes: Attributes for creating or modifying an on-call notification rule. + :type attributes: OnCallNotificationRuleRequestAttributes, optional + + :param relationships: Relationship object for creating a notification rule + :type relationships: OnCallNotificationRuleRelationships, optional + + :param type: Indicates that the resource is of type 'notification_rules'. + :type type: OnCallNotificationRuleType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_open_api_response.py b/datadog_api_client/v2/model/create_open_api_response.py new file mode 100644 index 0000000000..2c132d36fe --- /dev/null +++ b/datadog_api_client/v2/model/create_open_api_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_open_api_response_data import CreateOpenAPIResponseData + +class CreateOpenAPIResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_open_api_response_data import CreateOpenAPIResponseData + return { + "data": (CreateOpenAPIResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateOpenAPIResponseData, UnsetType]=unset, **kwargs): + """ + Response for ``CreateOpenAPI`` operation. + + :param data: Data envelope for ``CreateOpenAPIResponse``. + :type data: CreateOpenAPIResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_open_api_response_attributes.py b/datadog_api_client/v2/model/create_open_api_response_attributes.py new file mode 100644 index 0000000000..efc1de1dce --- /dev/null +++ b/datadog_api_client/v2/model/create_open_api_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.open_api_endpoint import OpenAPIEndpoint + +class CreateOpenAPIResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.open_api_endpoint import OpenAPIEndpoint + return { + "failed_endpoints": ([OpenAPIEndpoint],), + } + attribute_map = { + "failed_endpoints": "failed_endpoints", + } + + def __init__(self_, failed_endpoints: Union[List[OpenAPIEndpoint], UnsetType]=unset, **kwargs): + """ + Attributes for ``CreateOpenAPI``. + + :param failed_endpoints: List of endpoints which couldn't be parsed. + :type failed_endpoints: [OpenAPIEndpoint], optional + """ + if failed_endpoints is not unset: + kwargs["failed_endpoints"] = failed_endpoints + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_open_api_response_data.py b/datadog_api_client/v2/model/create_open_api_response_data.py new file mode 100644 index 0000000000..79442ff8fb --- /dev/null +++ b/datadog_api_client/v2/model/create_open_api_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_open_api_response_attributes import CreateOpenAPIResponseAttributes + +class CreateOpenAPIResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_open_api_response_attributes import CreateOpenAPIResponseAttributes + return { + "attributes": (CreateOpenAPIResponseAttributes,), + "id": (UUID,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + } + + def __init__(self_, attributes: Union[CreateOpenAPIResponseAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Data envelope for ``CreateOpenAPIResponse``. + + :param attributes: Attributes for ``CreateOpenAPI``. + :type attributes: CreateOpenAPIResponseAttributes, optional + + :param id: API identifier. + :type id: UUID, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_or_update_widget_request.py b/datadog_api_client/v2/model/create_or_update_widget_request.py new file mode 100644 index 0000000000..5d6a846c61 --- /dev/null +++ b/datadog_api_client/v2/model/create_or_update_widget_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_or_update_widget_request_data import CreateOrUpdateWidgetRequestData + +class CreateOrUpdateWidgetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_or_update_widget_request_data import CreateOrUpdateWidgetRequestData + return { + "data": (CreateOrUpdateWidgetRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateOrUpdateWidgetRequestData, **kwargs): + """ + Request body for creating or updating a widget. + + :param data: Data for creating or updating a widget. + :type data: CreateOrUpdateWidgetRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_or_update_widget_request_attributes.py b/datadog_api_client/v2/model/create_or_update_widget_request_attributes.py new file mode 100644 index 0000000000..01ac33eac0 --- /dev/null +++ b/datadog_api_client/v2/model/create_or_update_widget_request_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_definition import WidgetDefinition + +class CreateOrUpdateWidgetRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.widget_definition import WidgetDefinition + return { + "definition": (WidgetDefinition,), + "tags": ([str], none_type), + } + attribute_map = { + "definition": "definition", + "tags": "tags", + } + + def __init__(self_, definition: WidgetDefinition, tags: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a widget. + + :param definition: The definition of a widget, including its type and configuration. + :type definition: WidgetDefinition + + :param tags: User-defined tags for organizing the widget. + :type tags: [str], none_type, optional + """ + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v2/model/create_or_update_widget_request_data.py b/datadog_api_client/v2/model/create_or_update_widget_request_data.py new file mode 100644 index 0000000000..3faae01954 --- /dev/null +++ b/datadog_api_client/v2/model/create_or_update_widget_request_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_or_update_widget_request_attributes import CreateOrUpdateWidgetRequestAttributes + +class CreateOrUpdateWidgetRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_or_update_widget_request_attributes import CreateOrUpdateWidgetRequestAttributes + return { + "attributes": (CreateOrUpdateWidgetRequestAttributes,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateOrUpdateWidgetRequestAttributes, type: str, **kwargs): + """ + Data for creating or updating a widget. + + :param attributes: Attributes for creating or updating a widget. + :type attributes: CreateOrUpdateWidgetRequestAttributes + + :param type: Widgets resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_page_request.py b/datadog_api_client/v2/model/create_page_request.py new file mode 100644 index 0000000000..887651ec8f --- /dev/null +++ b/datadog_api_client/v2/model/create_page_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_page_request_data import CreatePageRequestData + +class CreatePageRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_page_request_data import CreatePageRequestData + return { + "data": (CreatePageRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreatePageRequestData, UnsetType]=unset, **kwargs): + """ + Full request to trigger an On-Call Page. + + :param data: The main request body, including attributes and resource type. + :type data: CreatePageRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_page_request_data.py b/datadog_api_client/v2/model/create_page_request_data.py new file mode 100644 index 0000000000..45b73bc7f4 --- /dev/null +++ b/datadog_api_client/v2/model/create_page_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_page_request_data_attributes import CreatePageRequestDataAttributes + from datadog_api_client.v2.model.create_page_request_data_type import CreatePageRequestDataType + +class CreatePageRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_page_request_data_attributes import CreatePageRequestDataAttributes + from datadog_api_client.v2.model.create_page_request_data_type import CreatePageRequestDataType + return { + "attributes": (CreatePageRequestDataAttributes,), + "type": (CreatePageRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: CreatePageRequestDataType, attributes: Union[CreatePageRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The main request body, including attributes and resource type. + + :param attributes: Details about the On-Call Page you want to create. + :type attributes: CreatePageRequestDataAttributes, optional + + :param type: The type of resource used when creating an On-Call Page. + :type type: CreatePageRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_page_request_data_attributes.py b/datadog_api_client/v2/model/create_page_request_data_attributes.py new file mode 100644 index 0000000000..7114d71f34 --- /dev/null +++ b/datadog_api_client/v2/model/create_page_request_data_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_page_request_data_attributes_target import CreatePageRequestDataAttributesTarget + from datadog_api_client.v2.model.page_urgency import PageUrgency + +class CreatePageRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_page_request_data_attributes_target import CreatePageRequestDataAttributesTarget + from datadog_api_client.v2.model.page_urgency import PageUrgency + return { + "description": (str,), + "tags": ([str],), + "target": (CreatePageRequestDataAttributesTarget,), + "title": (str,), + "urgency": (PageUrgency,), + } + attribute_map = { + "description": "description", + "tags": "tags", + "target": "target", + "title": "title", + "urgency": "urgency", + } + + def __init__(self_, target: CreatePageRequestDataAttributesTarget, title: str, urgency: PageUrgency, description: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Details about the On-Call Page you want to create. + + :param description: A short summary of the issue or context. + :type description: str, optional + + :param tags: Tags to help categorize or filter the page. + :type tags: [str], optional + + :param target: Information about the target to notify (such as a team or user). + :type target: CreatePageRequestDataAttributesTarget + + :param title: The title of the page. + :type title: str + + :param urgency: On-Call Page urgency level. + :type urgency: PageUrgency + """ + if description is not unset: + kwargs["description"] = description + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.target = target + self_.title = title + self_.urgency = urgency diff --git a/datadog_api_client/v2/model/create_page_request_data_attributes_target.py b/datadog_api_client/v2/model/create_page_request_data_attributes_target.py new file mode 100644 index 0000000000..5ece940ae9 --- /dev/null +++ b/datadog_api_client/v2/model/create_page_request_data_attributes_target.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_page_target_type import OnCallPageTargetType + +class CreatePageRequestDataAttributesTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_page_target_type import OnCallPageTargetType + return { + "identifier": (str,), + "type": (OnCallPageTargetType,), + } + attribute_map = { + "identifier": "identifier", + "type": "type", + } + + def __init__(self_, identifier: Union[str, UnsetType]=unset, type: Union[OnCallPageTargetType, UnsetType]=unset, **kwargs): + """ + Information about the target to notify (such as a team or user). + + :param identifier: Identifier for the target (for example, team handle or user ID). + :type identifier: str, optional + + :param type: The kind of target, ``team_id`` | ``team_handle`` | ``user_id``. + :type type: OnCallPageTargetType, optional + """ + if identifier is not unset: + kwargs["identifier"] = identifier + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_page_request_data_type.py b/datadog_api_client/v2/model/create_page_request_data_type.py new file mode 100644 index 0000000000..33a2c0e358 --- /dev/null +++ b/datadog_api_client/v2/model/create_page_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreatePageRequestDataType(ModelSimple): + """ + The type of resource used when creating an On-Call Page. + + :param value: If omitted defaults to "pages". Must be one of ["pages"]. + :type value: str + """ + + allowed_values = { + "pages", + } + PAGES: ClassVar["CreatePageRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreatePageRequestDataType.PAGES = CreatePageRequestDataType("pages") diff --git a/datadog_api_client/v2/model/create_page_response.py b/datadog_api_client/v2/model/create_page_response.py new file mode 100644 index 0000000000..e5b7ce9d22 --- /dev/null +++ b/datadog_api_client/v2/model/create_page_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_page_response_data import CreatePageResponseData + +class CreatePageResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_page_response_data import CreatePageResponseData + return { + "data": (CreatePageResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreatePageResponseData, UnsetType]=unset, **kwargs): + """ + The full response object after creating a new On-Call Page. + + :param data: The information returned after successfully creating a page. + :type data: CreatePageResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_page_response_data.py b/datadog_api_client/v2/model/create_page_response_data.py new file mode 100644 index 0000000000..09ec474e73 --- /dev/null +++ b/datadog_api_client/v2/model/create_page_response_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_page_response_data_type import CreatePageResponseDataType + +class CreatePageResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_page_response_data_type import CreatePageResponseDataType + return { + "id": (str,), + "type": (CreatePageResponseDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, type: CreatePageResponseDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The information returned after successfully creating a page. + + :param id: The unique ID of the created page. + :type id: str, optional + + :param type: The type of resource used when creating an On-Call Page. + :type type: CreatePageResponseDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_page_response_data_type.py b/datadog_api_client/v2/model/create_page_response_data_type.py new file mode 100644 index 0000000000..edde889336 --- /dev/null +++ b/datadog_api_client/v2/model/create_page_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreatePageResponseDataType(ModelSimple): + """ + The type of resource used when creating an On-Call Page. + + :param value: If omitted defaults to "pages". Must be one of ["pages"]. + :type value: str + """ + + allowed_values = { + "pages", + } + PAGES: ClassVar["CreatePageResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreatePageResponseDataType.PAGES = CreatePageResponseDataType("pages") diff --git a/datadog_api_client/v2/model/create_phone_notification_channel_config.py b/datadog_api_client/v2/model/create_phone_notification_channel_config.py new file mode 100644 index 0000000000..e129650031 --- /dev/null +++ b/datadog_api_client/v2/model/create_phone_notification_channel_config.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_phone_config_type import NotificationChannelPhoneConfigType + +class CreatePhoneNotificationChannelConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_phone_config_type import NotificationChannelPhoneConfigType + return { + "number": (str,), + "type": (NotificationChannelPhoneConfigType,), + } + attribute_map = { + "number": "number", + "type": "type", + } + + def __init__(self_, number: str, type: NotificationChannelPhoneConfigType, **kwargs): + """ + Configuration to create a phone notification channel + + :param number: The E-164 formatted phone number (e.g. +3371234567) + :type number: str + + :param type: Indicates that the notification channel is a phone + :type type: NotificationChannelPhoneConfigType + """ + super().__init__(kwargs) + + + self_.number = number + self_.type = type diff --git a/datadog_api_client/v2/model/create_publish_request_request.py b/datadog_api_client/v2/model/create_publish_request_request.py new file mode 100644 index 0000000000..66f2746bdf --- /dev/null +++ b/datadog_api_client/v2/model/create_publish_request_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_publish_request_request_data import CreatePublishRequestRequestData + +class CreatePublishRequestRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_publish_request_request_data import CreatePublishRequestRequestData + return { + "data": (CreatePublishRequestRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreatePublishRequestRequestData, UnsetType]=unset, **kwargs): + """ + A request to ask for approval to publish an app whose protection level is ``approval_required``. + + :param data: Data for creating a publish request. + :type data: CreatePublishRequestRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_publish_request_request_data.py b/datadog_api_client/v2/model/create_publish_request_request_data.py new file mode 100644 index 0000000000..9e5f2ed7fc --- /dev/null +++ b/datadog_api_client/v2/model/create_publish_request_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_publish_request_request_data_attributes import CreatePublishRequestRequestDataAttributes + from datadog_api_client.v2.model.publish_request_type import PublishRequestType + +class CreatePublishRequestRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_publish_request_request_data_attributes import CreatePublishRequestRequestDataAttributes + from datadog_api_client.v2.model.publish_request_type import PublishRequestType + return { + "attributes": (CreatePublishRequestRequestDataAttributes,), + "type": (PublishRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[CreatePublishRequestRequestDataAttributes, UnsetType]=unset, type: Union[PublishRequestType, UnsetType]=unset, **kwargs): + """ + Data for creating a publish request. + + :param attributes: Attributes for creating a publish request. + :type attributes: CreatePublishRequestRequestDataAttributes, optional + + :param type: The publish-request resource type. + :type type: PublishRequestType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_publish_request_request_data_attributes.py b/datadog_api_client/v2/model/create_publish_request_request_data_attributes.py new file mode 100644 index 0000000000..4f567b354c --- /dev/null +++ b/datadog_api_client/v2/model/create_publish_request_request_data_attributes.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreatePublishRequestRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "title": (str,), + } + attribute_map = { + "description": "description", + "title": "title", + } + + def __init__(self_, title: str, description: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating a publish request. + + :param description: An optional description of the changes in this publish request. + :type description: str, optional + + :param title: A short title for the publish request. + :type title: str + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.title = title diff --git a/datadog_api_client/v2/model/create_rule_request.py b/datadog_api_client/v2/model/create_rule_request.py new file mode 100644 index 0000000000..301d30a5ec --- /dev/null +++ b/datadog_api_client/v2/model/create_rule_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_rule_request_data import CreateRuleRequestData + +class CreateRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_rule_request_data import CreateRuleRequestData + return { + "data": (CreateRuleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateRuleRequestData, UnsetType]=unset, **kwargs): + """ + Scorecard create rule request. + + :param data: Scorecard create rule request data. + :type data: CreateRuleRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_rule_request_data.py b/datadog_api_client/v2/model/create_rule_request_data.py new file mode 100644 index 0000000000..faa3c5919b --- /dev/null +++ b/datadog_api_client/v2/model/create_rule_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_attributes_request import RuleAttributesRequest + from datadog_api_client.v2.model.rule_type import RuleType + +class CreateRuleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_attributes_request import RuleAttributesRequest + from datadog_api_client.v2.model.rule_type import RuleType + return { + "attributes": (RuleAttributesRequest,), + "type": (RuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[RuleAttributesRequest, UnsetType]=unset, type: Union[RuleType, UnsetType]=unset, **kwargs): + """ + Scorecard create rule request data. + + :param attributes: Attributes for creating or updating a rule. Server-managed fields (created_at, modified_at, custom) are excluded. + :type attributes: RuleAttributesRequest, optional + + :param type: The JSON:API type for scorecard rules. + :type type: RuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_rule_response.py b/datadog_api_client/v2/model/create_rule_response.py new file mode 100644 index 0000000000..d3947d08d2 --- /dev/null +++ b/datadog_api_client/v2/model/create_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_rule_response_data import CreateRuleResponseData + +class CreateRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_rule_response_data import CreateRuleResponseData + return { + "data": (CreateRuleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateRuleResponseData, UnsetType]=unset, **kwargs): + """ + Created rule in response. + + :param data: Create rule response data. + :type data: CreateRuleResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_rule_response_data.py b/datadog_api_client/v2/model/create_rule_response_data.py new file mode 100644 index 0000000000..ace5b29040 --- /dev/null +++ b/datadog_api_client/v2/model/create_rule_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_attributes import RuleAttributes + from datadog_api_client.v2.model.relationship_to_rule import RelationshipToRule + from datadog_api_client.v2.model.rule_type import RuleType + +class CreateRuleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_attributes import RuleAttributes + from datadog_api_client.v2.model.relationship_to_rule import RelationshipToRule + from datadog_api_client.v2.model.rule_type import RuleType + return { + "attributes": (RuleAttributes,), + "id": (str,), + "relationships": (RelationshipToRule,), + "type": (RuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[RuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[RelationshipToRule, UnsetType]=unset, type: Union[RuleType, UnsetType]=unset, **kwargs): + """ + Create rule response data. + + :param attributes: Details of a rule. + :type attributes: RuleAttributes, optional + + :param id: The unique ID for a scorecard rule. + :type id: str, optional + + :param relationships: Scorecard create rule response relationship. + :type relationships: RelationshipToRule, optional + + :param type: The JSON:API type for scorecard rules. + :type type: RuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_ruleset_request.py b/datadog_api_client/v2/model/create_ruleset_request.py new file mode 100644 index 0000000000..e548d1e334 --- /dev/null +++ b/datadog_api_client/v2/model/create_ruleset_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_ruleset_request_data import CreateRulesetRequestData + +class CreateRulesetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_ruleset_request_data import CreateRulesetRequestData + return { + "data": (CreateRulesetRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateRulesetRequestData, UnsetType]=unset, **kwargs): + """ + The definition of ``CreateRulesetRequest`` object. + + :param data: The definition of ``CreateRulesetRequestData`` object. + :type data: CreateRulesetRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_ruleset_request_data.py b/datadog_api_client/v2/model/create_ruleset_request_data.py new file mode 100644 index 0000000000..d6f9073d58 --- /dev/null +++ b/datadog_api_client/v2/model/create_ruleset_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_ruleset_request_data_attributes import CreateRulesetRequestDataAttributes + from datadog_api_client.v2.model.create_ruleset_request_data_type import CreateRulesetRequestDataType + +class CreateRulesetRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_ruleset_request_data_attributes import CreateRulesetRequestDataAttributes + from datadog_api_client.v2.model.create_ruleset_request_data_type import CreateRulesetRequestDataType + return { + "attributes": (CreateRulesetRequestDataAttributes,), + "id": (str,), + "type": (CreateRulesetRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: CreateRulesetRequestDataType, attributes: Union[CreateRulesetRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``CreateRulesetRequestData`` object. + + :param attributes: The definition of ``CreateRulesetRequestDataAttributes`` object. + :type attributes: CreateRulesetRequestDataAttributes, optional + + :param id: The ``CreateRulesetRequestData`` ``id``. + :type id: str, optional + + :param type: Create ruleset resource type. + :type type: CreateRulesetRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_ruleset_request_data_attributes.py b/datadog_api_client/v2/model/create_ruleset_request_data_attributes.py new file mode 100644 index 0000000000..dc04729643 --- /dev/null +++ b/datadog_api_client/v2/model/create_ruleset_request_data_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items import CreateRulesetRequestDataAttributesRulesItems + +class CreateRulesetRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items import CreateRulesetRequestDataAttributesRulesItems + return { + "enabled": (bool,), + "rules": ([CreateRulesetRequestDataAttributesRulesItems],), + } + attribute_map = { + "enabled": "enabled", + "rules": "rules", + } + + def __init__(self_, rules: List[CreateRulesetRequestDataAttributesRulesItems], enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + The definition of ``CreateRulesetRequestDataAttributes`` object. + + :param enabled: The ``attributes`` ``enabled``. + :type enabled: bool, optional + + :param rules: The ``attributes`` ``rules``. + :type rules: [CreateRulesetRequestDataAttributesRulesItems] + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + + self_.rules = rules diff --git a/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items.py b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items.py new file mode 100644 index 0000000000..948b4c95e5 --- /dev/null +++ b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping + from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query import CreateRulesetRequestDataAttributesRulesItemsQuery + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_reference_table import CreateRulesetRequestDataAttributesRulesItemsReferenceTable + +class CreateRulesetRequestDataAttributesRulesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping + from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query import CreateRulesetRequestDataAttributesRulesItemsQuery + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_reference_table import CreateRulesetRequestDataAttributesRulesItemsReferenceTable + return { + "enabled": (bool,), + "mapping": (DataAttributesRulesItemsMapping,), + "metadata": (RulesetItemMetadata,), + "name": (str,), + "query": (CreateRulesetRequestDataAttributesRulesItemsQuery,), + "reference_table": (CreateRulesetRequestDataAttributesRulesItemsReferenceTable,), + } + attribute_map = { + "enabled": "enabled", + "mapping": "mapping", + "metadata": "metadata", + "name": "name", + "query": "query", + "reference_table": "reference_table", + } + + def __init__(self_, enabled: bool, name: str, mapping: Union[DataAttributesRulesItemsMapping, none_type, UnsetType]=unset, metadata: Union[RulesetItemMetadata, none_type, UnsetType]=unset, query: Union[CreateRulesetRequestDataAttributesRulesItemsQuery, none_type, UnsetType]=unset, reference_table: Union[CreateRulesetRequestDataAttributesRulesItemsReferenceTable, none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``CreateRulesetRequestDataAttributesRulesItems`` object. + + :param enabled: The ``items`` ``enabled``. + :type enabled: bool + + :param mapping: The definition of ``DataAttributesRulesItemsMapping`` object. + :type mapping: DataAttributesRulesItemsMapping, none_type, optional + + :param metadata: The ``items`` ``metadata``. + :type metadata: RulesetItemMetadata, none_type, optional + + :param name: The ``items`` ``name``. + :type name: str + + :param query: The definition of ``CreateRulesetRequestDataAttributesRulesItemsQuery`` object. + :type query: CreateRulesetRequestDataAttributesRulesItemsQuery, none_type, optional + + :param reference_table: The definition of ``CreateRulesetRequestDataAttributesRulesItemsReferenceTable`` object. + :type reference_table: CreateRulesetRequestDataAttributesRulesItemsReferenceTable, none_type, optional + """ + if mapping is not unset: + kwargs["mapping"] = mapping + if metadata is not unset: + kwargs["metadata"] = metadata + if query is not unset: + kwargs["query"] = query + if reference_table is not unset: + kwargs["reference_table"] = reference_table + super().__init__(kwargs) + + + self_.enabled = enabled + self_.name = name diff --git a/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query.py b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query.py new file mode 100644 index 0000000000..a1edbca7db --- /dev/null +++ b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query_addition import CreateRulesetRequestDataAttributesRulesItemsQueryAddition + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + +class CreateRulesetRequestDataAttributesRulesItemsQuery(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query_addition import CreateRulesetRequestDataAttributesRulesItemsQueryAddition + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + return { + "addition": (CreateRulesetRequestDataAttributesRulesItemsQueryAddition,), + "case_insensitivity": (bool,), + "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), + "query": (str,), + } + attribute_map = { + "addition": "addition", + "case_insensitivity": "case_insensitivity", + "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", + "query": "query", + } + + def __init__(self_, addition: Union[CreateRulesetRequestDataAttributesRulesItemsQueryAddition, none_type], query: str, case_insensitivity: Union[bool, UnsetType]=unset, if_not_exists: Union[bool, UnsetType]=unset, if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType]=unset, **kwargs): + """ + The definition of ``CreateRulesetRequestDataAttributesRulesItemsQuery`` object. + + :param addition: The definition of ``CreateRulesetRequestDataAttributesRulesItemsQueryAddition`` object. + :type addition: CreateRulesetRequestDataAttributesRulesItemsQueryAddition, none_type + + :param case_insensitivity: The ``query`` ``case_insensitivity``. + :type case_insensitivity: bool, optional + + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``query`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + + :param query: The ``query`` ``query``. + :type query: str + """ + if case_insensitivity is not unset: + kwargs["case_insensitivity"] = case_insensitivity + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists + super().__init__(kwargs) + + + self_.addition = addition + self_.query = query diff --git a/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query_addition.py b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query_addition.py new file mode 100644 index 0000000000..7835ce7fbf --- /dev/null +++ b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query_addition.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateRulesetRequestDataAttributesRulesItemsQueryAddition(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: str, value: str, **kwargs): + """ + The definition of ``CreateRulesetRequestDataAttributesRulesItemsQueryAddition`` object. + + :param key: The ``addition`` ``key``. + :type key: str + + :param value: The ``addition`` ``value``. + :type value: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.value = value diff --git a/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table.py b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table.py new file mode 100644 index 0000000000..d4b7368a4f --- /dev/null +++ b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + +class CreateRulesetRequestDataAttributesRulesItemsReferenceTable(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + return { + "case_insensitivity": (bool,), + "field_pairs": ([CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems],), + "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), + "source_keys": ([str],), + "table_name": (str,), + } + attribute_map = { + "case_insensitivity": "case_insensitivity", + "field_pairs": "field_pairs", + "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", + "source_keys": "source_keys", + "table_name": "table_name", + } + + def __init__(self_, field_pairs: List[CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems], source_keys: List[str], table_name: str, case_insensitivity: Union[bool, UnsetType]=unset, if_not_exists: Union[bool, UnsetType]=unset, if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType]=unset, **kwargs): + """ + The definition of ``CreateRulesetRequestDataAttributesRulesItemsReferenceTable`` object. + + :param case_insensitivity: The ``reference_table`` ``case_insensitivity``. + :type case_insensitivity: bool, optional + + :param field_pairs: The ``reference_table`` ``field_pairs``. + :type field_pairs: [CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems] + + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``reference_table`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + + :param source_keys: The ``reference_table`` ``source_keys``. + :type source_keys: [str] + + :param table_name: The ``reference_table`` ``table_name``. + :type table_name: str + """ + if case_insensitivity is not unset: + kwargs["case_insensitivity"] = case_insensitivity + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists + super().__init__(kwargs) + + + self_.field_pairs = field_pairs + self_.source_keys = source_keys + self_.table_name = table_name diff --git a/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items.py b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items.py new file mode 100644 index 0000000000..6f401faacb --- /dev/null +++ b/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "input_column": (str,), + "output_key": (str,), + } + attribute_map = { + "input_column": "input_column", + "output_key": "output_key", + } + + def __init__(self_, input_column: str, output_key: str, **kwargs): + """ + The definition of ``CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems`` object. + + :param input_column: The ``items`` ``input_column``. + :type input_column: str + + :param output_key: The ``items`` ``output_key``. + :type output_key: str + """ + super().__init__(kwargs) + + + self_.input_column = input_column + self_.output_key = output_key diff --git a/datadog_api_client/v2/model/create_ruleset_request_data_type.py b/datadog_api_client/v2/model/create_ruleset_request_data_type.py new file mode 100644 index 0000000000..026af17521 --- /dev/null +++ b/datadog_api_client/v2/model/create_ruleset_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateRulesetRequestDataType(ModelSimple): + """ + Create ruleset resource type. + + :param value: If omitted defaults to "create_ruleset". Must be one of ["create_ruleset"]. + :type value: str + """ + + allowed_values = { + "create_ruleset", + } + CREATE_RULESET: ClassVar["CreateRulesetRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateRulesetRequestDataType.CREATE_RULESET = CreateRulesetRequestDataType("create_ruleset") diff --git a/datadog_api_client/v2/model/create_service_now_ticket_request_array.py b/datadog_api_client/v2/model/create_service_now_ticket_request_array.py new file mode 100644 index 0000000000..c5b2bcd20e --- /dev/null +++ b/datadog_api_client/v2/model/create_service_now_ticket_request_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_service_now_ticket_request_data import CreateServiceNowTicketRequestData + +class CreateServiceNowTicketRequestArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_service_now_ticket_request_data import CreateServiceNowTicketRequestData + return { + "data": ([CreateServiceNowTicketRequestData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CreateServiceNowTicketRequestData], **kwargs): + """ + List of requests to create ServiceNow tickets for security findings. + + :param data: Array of ServiceNow ticket creation request data objects. + :type data: [CreateServiceNowTicketRequestData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_service_now_ticket_request_data.py b/datadog_api_client/v2/model/create_service_now_ticket_request_data.py new file mode 100644 index 0000000000..432fe64e81 --- /dev/null +++ b/datadog_api_client/v2/model/create_service_now_ticket_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_service_now_ticket_request_data_attributes import CreateServiceNowTicketRequestDataAttributes + from datadog_api_client.v2.model.create_service_now_ticket_request_data_relationships import CreateServiceNowTicketRequestDataRelationships + from datadog_api_client.v2.model.service_now_tickets_data_type import ServiceNowTicketsDataType + +class CreateServiceNowTicketRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_service_now_ticket_request_data_attributes import CreateServiceNowTicketRequestDataAttributes + from datadog_api_client.v2.model.create_service_now_ticket_request_data_relationships import CreateServiceNowTicketRequestDataRelationships + from datadog_api_client.v2.model.service_now_tickets_data_type import ServiceNowTicketsDataType + return { + "attributes": (CreateServiceNowTicketRequestDataAttributes,), + "relationships": (CreateServiceNowTicketRequestDataRelationships,), + "type": (ServiceNowTicketsDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, relationships: CreateServiceNowTicketRequestDataRelationships, type: ServiceNowTicketsDataType, attributes: Union[CreateServiceNowTicketRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + Data of the ServiceNow ticket to create. + + :param attributes: Attributes of the ServiceNow ticket to create. + :type attributes: CreateServiceNowTicketRequestDataAttributes, optional + + :param relationships: Relationships of the ServiceNow ticket to create. + :type relationships: CreateServiceNowTicketRequestDataRelationships + + :param type: ServiceNow tickets resource type. + :type type: ServiceNowTicketsDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/create_service_now_ticket_request_data_attributes.py b/datadog_api_client/v2/model/create_service_now_ticket_request_data_attributes.py new file mode 100644 index 0000000000..a4a3ce8a9d --- /dev/null +++ b/datadog_api_client/v2/model/create_service_now_ticket_request_data_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.case_priority import CasePriority + +class CreateServiceNowTicketRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.case_priority import CasePriority + return { + "assignee_id": (str,), + "description": (str,), + "priority": (CasePriority,), + "title": (str,), + } + attribute_map = { + "assignee_id": "assignee_id", + "description": "description", + "priority": "priority", + "title": "title", + } + + def __init__(self_, assignee_id: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, priority: Union[CasePriority, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the ServiceNow ticket to create. + + :param assignee_id: Unique identifier of the Datadog user assigned to the case backing the ServiceNow ticket. + :type assignee_id: str, optional + + :param description: Description of the ServiceNow ticket. If not provided, the description will be automatically generated. + :type description: str, optional + + :param priority: Case priority + :type priority: CasePriority, optional + + :param title: Title of the ServiceNow ticket. If not provided, the title will be automatically generated. + :type title: str, optional + """ + if assignee_id is not unset: + kwargs["assignee_id"] = assignee_id + if description is not unset: + kwargs["description"] = description + if priority is not unset: + kwargs["priority"] = priority + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_service_now_ticket_request_data_relationships.py b/datadog_api_client/v2/model/create_service_now_ticket_request_data_relationships.py new file mode 100644 index 0000000000..9e79b025fe --- /dev/null +++ b/datadog_api_client/v2/model/create_service_now_ticket_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + +class CreateServiceNowTicketRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + return { + "findings": (Findings,), + "project": (CaseManagementProject,), + } + attribute_map = { + "findings": "findings", + "project": "project", + } + + def __init__(self_, findings: Findings, project: CaseManagementProject, **kwargs): + """ + Relationships of the ServiceNow ticket to create. + + :param findings: A list of security findings. + :type findings: Findings + + :param project: Case management project. + :type project: CaseManagementProject + """ + super().__init__(kwargs) + + + self_.findings = findings + self_.project = project diff --git a/datadog_api_client/v2/model/create_snapshot_additional_config.py b/datadog_api_client/v2/model/create_snapshot_additional_config.py new file mode 100644 index 0000000000..9630f7c868 --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_additional_config.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_snapshot_template_variable import CreateSnapshotTemplateVariable + from datadog_api_client.v2.model.create_snapshot_timeseries_legend_type import CreateSnapshotTimeseriesLegendType + +class CreateSnapshotAdditionalConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_snapshot_template_variable import CreateSnapshotTemplateVariable + from datadog_api_client.v2.model.create_snapshot_timeseries_legend_type import CreateSnapshotTimeseriesLegendType + return { + "template_variables": ([CreateSnapshotTemplateVariable],), + "timeseries_legend_type": (CreateSnapshotTimeseriesLegendType,), + "timezone_offset_minutes": (int,), + } + attribute_map = { + "template_variables": "template_variables", + "timeseries_legend_type": "timeseries_legend_type", + "timezone_offset_minutes": "timezone_offset_minutes", + } + + def __init__(self_, template_variables: Union[List[CreateSnapshotTemplateVariable], UnsetType]=unset, timeseries_legend_type: Union[CreateSnapshotTimeseriesLegendType, UnsetType]=unset, timezone_offset_minutes: Union[int, UnsetType]=unset, **kwargs): + """ + Additional configuration options for snapshot creation. + + :param template_variables: List of template variable definitions for snapshot rendering. + :type template_variables: [CreateSnapshotTemplateVariable], optional + + :param timeseries_legend_type: The legend display type for timeseries widgets. A value of ``none`` hides the legend entirely; omitting the field lets the frontend choose automatically. + :type timeseries_legend_type: CreateSnapshotTimeseriesLegendType, optional + + :param timezone_offset_minutes: Timezone offset in minutes from UTC. Positive values are west of UTC (for example, ``300`` for UTC-5). Use ``0`` for UTC. + :type timezone_offset_minutes: int, optional + """ + if template_variables is not unset: + kwargs["template_variables"] = template_variables + if timeseries_legend_type is not unset: + kwargs["timeseries_legend_type"] = timeseries_legend_type + if timezone_offset_minutes is not unset: + kwargs["timezone_offset_minutes"] = timezone_offset_minutes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_snapshot_data_attributes_request.py b/datadog_api_client/v2/model/create_snapshot_data_attributes_request.py new file mode 100644 index 0000000000..9f15f027bc --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_data_attributes_request.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_snapshot_additional_config import CreateSnapshotAdditionalConfig + from datadog_api_client.v2.model.create_snapshot_ttl import CreateSnapshotTTL + +class CreateSnapshotDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_snapshot_additional_config import CreateSnapshotAdditionalConfig + from datadog_api_client.v2.model.create_snapshot_ttl import CreateSnapshotTTL + return { + "additional_config": (CreateSnapshotAdditionalConfig,), + "end": (int,), + "height": (int,), + "is_authenticated": (bool,), + "start": (int,), + "ttl": (CreateSnapshotTTL,), + "widget_definition": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "width": (int,), + } + attribute_map = { + "additional_config": "additional_config", + "end": "end", + "height": "height", + "is_authenticated": "is_authenticated", + "start": "start", + "ttl": "ttl", + "widget_definition": "widget_definition", + "width": "width", + } + + def __init__(self_, end: int, start: int, widget_definition: Dict[str, Any], additional_config: Union[CreateSnapshotAdditionalConfig, UnsetType]=unset, height: Union[int, UnsetType]=unset, is_authenticated: Union[bool, UnsetType]=unset, ttl: Union[CreateSnapshotTTL, UnsetType]=unset, width: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for snapshot creation. + + :param additional_config: Additional configuration options for snapshot creation. + :type additional_config: CreateSnapshotAdditionalConfig, optional + + :param end: End of the time window for the snapshot, in milliseconds since Unix epoch. + :type end: int + + :param height: The height of the rendered snapshot in pixels. + :type height: int, optional + + :param is_authenticated: Whether the snapshot requires authentication to view. Authenticated snapshots are scoped to the creating organization. + :type is_authenticated: bool, optional + + :param start: Start of the time window for the snapshot, in milliseconds since Unix epoch. + :type start: int + + :param ttl: The time-to-live for the snapshot. This value corresponds to storage lifecycle policies that automatically delete the snapshot after the specified period. + :type ttl: CreateSnapshotTTL, optional + + :param widget_definition: The widget definition to render as a snapshot. Must include a valid ``type`` field and non-empty ``requests`` array. + :type widget_definition: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + + :param width: The width of the rendered snapshot in pixels. + :type width: int, optional + """ + if additional_config is not unset: + kwargs["additional_config"] = additional_config + if height is not unset: + kwargs["height"] = height + if is_authenticated is not unset: + kwargs["is_authenticated"] = is_authenticated + if ttl is not unset: + kwargs["ttl"] = ttl + if width is not unset: + kwargs["width"] = width + super().__init__(kwargs) + + + self_.end = end + self_.start = start + self_.widget_definition = widget_definition diff --git a/datadog_api_client/v2/model/create_snapshot_data_attributes_response.py b/datadog_api_client/v2/model/create_snapshot_data_attributes_response.py new file mode 100644 index 0000000000..ad81c0f935 --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_data_attributes_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateSnapshotDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "url": (str,), + } + attribute_map = { + "url": "url", + } + + def __init__(self_, url: str, **kwargs): + """ + Attributes of the created snapshot. + + :param url: The URL to access the rendered snapshot image. + :type url: str + """ + super().__init__(kwargs) + + + self_.url = url diff --git a/datadog_api_client/v2/model/create_snapshot_data_request.py b/datadog_api_client/v2/model/create_snapshot_data_request.py new file mode 100644 index 0000000000..edba7b2d8f --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_snapshot_data_attributes_request import CreateSnapshotDataAttributesRequest + from datadog_api_client.v2.model.create_snapshot_type import CreateSnapshotType + +class CreateSnapshotDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_snapshot_data_attributes_request import CreateSnapshotDataAttributesRequest + from datadog_api_client.v2.model.create_snapshot_type import CreateSnapshotType + return { + "attributes": (CreateSnapshotDataAttributesRequest,), + "type": (CreateSnapshotType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateSnapshotDataAttributesRequest, type: CreateSnapshotType, **kwargs): + """ + Data envelope for snapshot creation. + + :param attributes: Attributes for snapshot creation. + :type attributes: CreateSnapshotDataAttributesRequest + + :param type: The type identifier for snapshot creation resources. + :type type: CreateSnapshotType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_snapshot_data_response.py b/datadog_api_client/v2/model/create_snapshot_data_response.py new file mode 100644 index 0000000000..6a45298bd0 --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_snapshot_data_attributes_response import CreateSnapshotDataAttributesResponse + from datadog_api_client.v2.model.create_snapshot_type import CreateSnapshotType + +class CreateSnapshotDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_snapshot_data_attributes_response import CreateSnapshotDataAttributesResponse + from datadog_api_client.v2.model.create_snapshot_type import CreateSnapshotType + return { + "attributes": (CreateSnapshotDataAttributesResponse,), + "id": (str,), + "type": (CreateSnapshotType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CreateSnapshotDataAttributesResponse, id: str, type: CreateSnapshotType, **kwargs): + """ + Data envelope for the snapshot creation response. + + :param attributes: Attributes of the created snapshot. + :type attributes: CreateSnapshotDataAttributesResponse + + :param id: The unique identifier of the created snapshot. + :type id: str + + :param type: The type identifier for snapshot creation resources. + :type type: CreateSnapshotType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/create_snapshot_request.py b/datadog_api_client/v2/model/create_snapshot_request.py new file mode 100644 index 0000000000..ff0ba6c427 --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_snapshot_data_request import CreateSnapshotDataRequest + +class CreateSnapshotRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_snapshot_data_request import CreateSnapshotDataRequest + return { + "data": (CreateSnapshotDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateSnapshotDataRequest, **kwargs): + """ + Request body for creating a graph snapshot. + + :param data: Data envelope for snapshot creation. + :type data: CreateSnapshotDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_snapshot_response.py b/datadog_api_client/v2/model/create_snapshot_response.py new file mode 100644 index 0000000000..f19eff24ab --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_snapshot_data_response import CreateSnapshotDataResponse + +class CreateSnapshotResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_snapshot_data_response import CreateSnapshotDataResponse + return { + "data": (CreateSnapshotDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateSnapshotDataResponse, **kwargs): + """ + Response body for a snapshot creation request. + + :param data: Data envelope for the snapshot creation response. + :type data: CreateSnapshotDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_snapshot_template_variable.py b/datadog_api_client/v2/model/create_snapshot_template_variable.py new file mode 100644 index 0000000000..d90790f644 --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_template_variable.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateSnapshotTemplateVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "prefix": (str,), + "values": ([str],), + } + attribute_map = { + "name": "name", + "prefix": "prefix", + "values": "values", + } + + def __init__(self_, name: str, prefix: str, values: List[str], **kwargs): + """ + A template variable definition for snapshot rendering. + + :param name: The template variable name. + :type name: str + + :param prefix: The tag prefix associated with the template variable. For example, a prefix of ``host`` with a value of ``web-server-1`` scopes the snapshot to ``host:web-server-1``. + :type prefix: str + + :param values: The list of scoped values for this template variable. + :type values: [str] + """ + super().__init__(kwargs) + + + self_.name = name + self_.prefix = prefix + self_.values = values diff --git a/datadog_api_client/v2/model/create_snapshot_timeseries_legend_type.py b/datadog_api_client/v2/model/create_snapshot_timeseries_legend_type.py new file mode 100644 index 0000000000..f375011262 --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_timeseries_legend_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateSnapshotTimeseriesLegendType(ModelSimple): + """ + The legend display type for timeseries widgets. A value of `none` hides the legend entirely; omitting the field lets the frontend choose automatically. + + :param value: Must be one of ["compact", "expanded", "none"]. + :type value: str + """ + + allowed_values = { + "compact", + "expanded", + "none", + } + COMPACT: ClassVar["CreateSnapshotTimeseriesLegendType"] + EXPANDED: ClassVar["CreateSnapshotTimeseriesLegendType"] + NONE: ClassVar["CreateSnapshotTimeseriesLegendType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateSnapshotTimeseriesLegendType.COMPACT = CreateSnapshotTimeseriesLegendType("compact") +CreateSnapshotTimeseriesLegendType.EXPANDED = CreateSnapshotTimeseriesLegendType("expanded") +CreateSnapshotTimeseriesLegendType.NONE = CreateSnapshotTimeseriesLegendType("none") diff --git a/datadog_api_client/v2/model/create_snapshot_ttl.py b/datadog_api_client/v2/model/create_snapshot_ttl.py new file mode 100644 index 0000000000..85ca35e762 --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_ttl.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateSnapshotTTL(ModelSimple): + """ + The time-to-live for the snapshot. This value corresponds to storage lifecycle policies that automatically delete the snapshot after the specified period. + + :param value: Must be one of ["30d", "60d", "90d", "1y", "2y", "inf"]. + :type value: str + """ + + allowed_values = { + "30d", + "60d", + "90d", + "1y", + "2y", + "inf", + } + THIRTY_DAYS: ClassVar["CreateSnapshotTTL"] + SIXTY_DAYS: ClassVar["CreateSnapshotTTL"] + NINETY_DAYS: ClassVar["CreateSnapshotTTL"] + ONE_YEAR: ClassVar["CreateSnapshotTTL"] + TWO_YEARS: ClassVar["CreateSnapshotTTL"] + INFINITE: ClassVar["CreateSnapshotTTL"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateSnapshotTTL.THIRTY_DAYS = CreateSnapshotTTL("30d") +CreateSnapshotTTL.SIXTY_DAYS = CreateSnapshotTTL("60d") +CreateSnapshotTTL.NINETY_DAYS = CreateSnapshotTTL("90d") +CreateSnapshotTTL.ONE_YEAR = CreateSnapshotTTL("1y") +CreateSnapshotTTL.TWO_YEARS = CreateSnapshotTTL("2y") +CreateSnapshotTTL.INFINITE = CreateSnapshotTTL("inf") diff --git a/datadog_api_client/v2/model/create_snapshot_type.py b/datadog_api_client/v2/model/create_snapshot_type.py new file mode 100644 index 0000000000..a53302eb58 --- /dev/null +++ b/datadog_api_client/v2/model/create_snapshot_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateSnapshotType(ModelSimple): + """ + The type identifier for snapshot creation resources. + + :param value: If omitted defaults to "create_snapshot". Must be one of ["create_snapshot"]. + :type value: str + """ + + allowed_values = { + "create_snapshot", + } + CREATE_SNAPSHOT: ClassVar["CreateSnapshotType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateSnapshotType.CREATE_SNAPSHOT = CreateSnapshotType("create_snapshot") diff --git a/datadog_api_client/v2/model/create_status_page_request.py b/datadog_api_client/v2/model/create_status_page_request.py new file mode 100644 index 0000000000..0229c9d501 --- /dev/null +++ b/datadog_api_client/v2/model/create_status_page_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_status_page_request_data import CreateStatusPageRequestData + +class CreateStatusPageRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_status_page_request_data import CreateStatusPageRequestData + return { + "data": (CreateStatusPageRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateStatusPageRequestData, UnsetType]=unset, **kwargs): + """ + Request object for creating a status page. + + :param data: The data object for creating a status page. + :type data: CreateStatusPageRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_status_page_request_data.py b/datadog_api_client/v2/model/create_status_page_request_data.py new file mode 100644 index 0000000000..cb00f50d1b --- /dev/null +++ b/datadog_api_client/v2/model/create_status_page_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_status_page_request_data_attributes import CreateStatusPageRequestDataAttributes + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class CreateStatusPageRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_status_page_request_data_attributes import CreateStatusPageRequestDataAttributes + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "attributes": (CreateStatusPageRequestDataAttributes,), + "type": (StatusPageDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CreateStatusPageRequestDataAttributes, type: StatusPageDataType, **kwargs): + """ + The data object for creating a status page. + + :param attributes: The supported attributes for creating a status page. + :type attributes: CreateStatusPageRequestDataAttributes + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/create_status_page_request_data_attributes.py b/datadog_api_client/v2/model/create_status_page_request_data_attributes.py new file mode 100644 index 0000000000..2dbac6947a --- /dev/null +++ b/datadog_api_client/v2/model/create_status_page_request_data_attributes.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_status_page_request_data_attributes_components_items import CreateStatusPageRequestDataAttributesComponentsItems + from datadog_api_client.v2.model.create_status_page_request_data_attributes_type import CreateStatusPageRequestDataAttributesType + from datadog_api_client.v2.model.create_status_page_request_data_attributes_visualization_type import CreateStatusPageRequestDataAttributesVisualizationType + +class CreateStatusPageRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_status_page_request_data_attributes_components_items import CreateStatusPageRequestDataAttributesComponentsItems + from datadog_api_client.v2.model.create_status_page_request_data_attributes_type import CreateStatusPageRequestDataAttributesType + from datadog_api_client.v2.model.create_status_page_request_data_attributes_visualization_type import CreateStatusPageRequestDataAttributesVisualizationType + return { + "company_logo": (str,), + "components": ([CreateStatusPageRequestDataAttributesComponentsItems],), + "domain_prefix": (str,), + "email_header_image": (str,), + "favicon": (str,), + "name": (str,), + "slack_app_icon": (str,), + "slack_subscriptions_enabled": (bool,), + "subscriptions_enabled": (bool,), + "type": (CreateStatusPageRequestDataAttributesType,), + "visualization_type": (CreateStatusPageRequestDataAttributesVisualizationType,), + } + attribute_map = { + "company_logo": "company_logo", + "components": "components", + "domain_prefix": "domain_prefix", + "email_header_image": "email_header_image", + "favicon": "favicon", + "name": "name", + "slack_app_icon": "slack_app_icon", + "slack_subscriptions_enabled": "slack_subscriptions_enabled", + "subscriptions_enabled": "subscriptions_enabled", + "type": "type", + "visualization_type": "visualization_type", + } + + def __init__(self_, domain_prefix: str, name: str, type: CreateStatusPageRequestDataAttributesType, visualization_type: CreateStatusPageRequestDataAttributesVisualizationType, company_logo: Union[str, UnsetType]=unset, components: Union[List[CreateStatusPageRequestDataAttributesComponentsItems], UnsetType]=unset, email_header_image: Union[str, UnsetType]=unset, favicon: Union[str, UnsetType]=unset, slack_app_icon: Union[str, UnsetType]=unset, slack_subscriptions_enabled: Union[bool, UnsetType]=unset, subscriptions_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + The supported attributes for creating a status page. + + :param company_logo: The base64-encoded image data displayed on the status page. + :type company_logo: str, optional + + :param components: The components displayed on the status page. + :type components: [CreateStatusPageRequestDataAttributesComponentsItems], optional + + :param domain_prefix: The subdomain of the status page's url taking the form ``https://{domain_prefix}.statuspage.datadoghq.com``. Globally unique across Datadog Status Pages. + :type domain_prefix: str + + :param email_header_image: Base64-encoded image data included in email notifications sent to status page subscribers. + :type email_header_image: str, optional + + :param favicon: Base64-encoded image data displayed in the browser tab. + :type favicon: str, optional + + :param name: The name of the status page. + :type name: str + + :param slack_app_icon: The Slack app icon URL for the status page. + :type slack_app_icon: str, optional + + :param slack_subscriptions_enabled: Whether Slack subscriptions are enabled for the status page. + :type slack_subscriptions_enabled: bool, optional + + :param subscriptions_enabled: Whether users can subscribe to the status page. + :type subscriptions_enabled: bool, optional + + :param type: The type of the status page controlling how the status page is accessed. + :type type: CreateStatusPageRequestDataAttributesType + + :param visualization_type: The visualization type of the status page. + :type visualization_type: CreateStatusPageRequestDataAttributesVisualizationType + """ + if company_logo is not unset: + kwargs["company_logo"] = company_logo + if components is not unset: + kwargs["components"] = components + if email_header_image is not unset: + kwargs["email_header_image"] = email_header_image + if favicon is not unset: + kwargs["favicon"] = favicon + if slack_app_icon is not unset: + kwargs["slack_app_icon"] = slack_app_icon + if slack_subscriptions_enabled is not unset: + kwargs["slack_subscriptions_enabled"] = slack_subscriptions_enabled + if subscriptions_enabled is not unset: + kwargs["subscriptions_enabled"] = subscriptions_enabled + super().__init__(kwargs) + + + self_.domain_prefix = domain_prefix + self_.name = name + self_.type = type + self_.visualization_type = visualization_type diff --git a/datadog_api_client/v2/model/create_status_page_request_data_attributes_components_items.py b/datadog_api_client/v2/model/create_status_page_request_data_attributes_components_items.py new file mode 100644 index 0000000000..864290b447 --- /dev/null +++ b/datadog_api_client/v2/model/create_status_page_request_data_attributes_components_items.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_status_page_request_data_attributes_components_items_components_items import CreateStatusPageRequestDataAttributesComponentsItemsComponentsItems + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + +class CreateStatusPageRequestDataAttributesComponentsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_status_page_request_data_attributes_components_items_components_items import CreateStatusPageRequestDataAttributesComponentsItemsComponentsItems + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + return { + "components": ([CreateStatusPageRequestDataAttributesComponentsItemsComponentsItems],), + "id": (UUID,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentGroupAttributesComponentsItemsStatus,), + "type": (CreateComponentRequestDataAttributesType,), + } + attribute_map = { + "components": "components", + "id": "id", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + read_only_vars = { + "id", + "status", + } + + def __init__(self_, components: Union[List[CreateStatusPageRequestDataAttributesComponentsItemsComponentsItems], UnsetType]=unset, id: Union[UUID, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentGroupAttributesComponentsItemsStatus, UnsetType]=unset, type: Union[CreateComponentRequestDataAttributesType, UnsetType]=unset, **kwargs): + """ + A component to be created on a status page. + + :param components: If creating a component of type ``group`` , the components to create within the group. + :type components: [CreateStatusPageRequestDataAttributesComponentsItemsComponentsItems], optional + + :param id: The ID of the component. + :type id: UUID, optional + + :param name: The name of the component. + :type name: str, optional + + :param position: The zero-indexed position of the component. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentGroupAttributesComponentsItemsStatus, optional + + :param type: The type of the component. + :type type: CreateComponentRequestDataAttributesType, optional + """ + if components is not unset: + kwargs["components"] = components + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_status_page_request_data_attributes_components_items_components_items.py b/datadog_api_client/v2/model/create_status_page_request_data_attributes_components_items_components_items.py new file mode 100644 index 0000000000..a474b48f9e --- /dev/null +++ b/datadog_api_client/v2/model/create_status_page_request_data_attributes_components_items_components_items.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + +class CreateStatusPageRequestDataAttributesComponentsItemsComponentsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + return { + "id": (UUID,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentGroupAttributesComponentsItemsStatus,), + "type": (StatusPagesComponentGroupAttributesComponentsItemsType,), + } + attribute_map = { + "id": "id", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + read_only_vars = { + "id", + "status", + } + + def __init__(self_, id: Union[UUID, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentGroupAttributesComponentsItemsStatus, UnsetType]=unset, type: Union[StatusPagesComponentGroupAttributesComponentsItemsType, UnsetType]=unset, **kwargs): + """ + A grouped component to be created within a status page component group. + + :param id: The ID of the grouped component. + :type id: UUID, optional + + :param name: The name of the grouped component. + :type name: str, optional + + :param position: The zero-indexed position of the grouped component. Relative to the other components in the group. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentGroupAttributesComponentsItemsStatus, optional + + :param type: The type of the component. + :type type: StatusPagesComponentGroupAttributesComponentsItemsType, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_status_page_request_data_attributes_type.py b/datadog_api_client/v2/model/create_status_page_request_data_attributes_type.py new file mode 100644 index 0000000000..901d227d47 --- /dev/null +++ b/datadog_api_client/v2/model/create_status_page_request_data_attributes_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateStatusPageRequestDataAttributesType(ModelSimple): + """ + The type of the status page controlling how the status page is accessed. + + :param value: Must be one of ["public", "internal"]. + :type value: str + """ + + allowed_values = { + "public", + "internal", + } + PUBLIC: ClassVar["CreateStatusPageRequestDataAttributesType"] + INTERNAL: ClassVar["CreateStatusPageRequestDataAttributesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateStatusPageRequestDataAttributesType.PUBLIC = CreateStatusPageRequestDataAttributesType("public") +CreateStatusPageRequestDataAttributesType.INTERNAL = CreateStatusPageRequestDataAttributesType("internal") diff --git a/datadog_api_client/v2/model/create_status_page_request_data_attributes_visualization_type.py b/datadog_api_client/v2/model/create_status_page_request_data_attributes_visualization_type.py new file mode 100644 index 0000000000..0d1212b061 --- /dev/null +++ b/datadog_api_client/v2/model/create_status_page_request_data_attributes_visualization_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateStatusPageRequestDataAttributesVisualizationType(ModelSimple): + """ + The visualization type of the status page. + + :param value: Must be one of ["bars_and_uptime_percentage", "bars_only", "component_name_only"]. + :type value: str + """ + + allowed_values = { + "bars_and_uptime_percentage", + "bars_only", + "component_name_only", + } + BARS_AND_UPTIME_PERCENTAGE: ClassVar["CreateStatusPageRequestDataAttributesVisualizationType"] + BARS_ONLY: ClassVar["CreateStatusPageRequestDataAttributesVisualizationType"] + COMPONENT_NAME_ONLY: ClassVar["CreateStatusPageRequestDataAttributesVisualizationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateStatusPageRequestDataAttributesVisualizationType.BARS_AND_UPTIME_PERCENTAGE = CreateStatusPageRequestDataAttributesVisualizationType("bars_and_uptime_percentage") +CreateStatusPageRequestDataAttributesVisualizationType.BARS_ONLY = CreateStatusPageRequestDataAttributesVisualizationType("bars_only") +CreateStatusPageRequestDataAttributesVisualizationType.COMPONENT_NAME_ONLY = CreateStatusPageRequestDataAttributesVisualizationType("component_name_only") diff --git a/datadog_api_client/v2/model/create_table_request.py b/datadog_api_client/v2/model/create_table_request.py new file mode 100644 index 0000000000..8850c17a71 --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_table_request_data import CreateTableRequestData + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_cloud_storage import CreateTableRequestDataAttributesFileMetadataCloudStorage + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_local_file import CreateTableRequestDataAttributesFileMetadataLocalFile + +class CreateTableRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_table_request_data import CreateTableRequestData + return { + "data": (CreateTableRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateTableRequestData, UnsetType]=unset, **kwargs): + """ + Request body for creating a new reference table from a local file or cloud storage. + + :param data: The data object containing the table definition. + :type data: CreateTableRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_table_request_data.py b/datadog_api_client/v2/model/create_table_request_data.py new file mode 100644 index 0000000000..2917e68a79 --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_table_request_data_attributes import CreateTableRequestDataAttributes + from datadog_api_client.v2.model.create_table_request_data_type import CreateTableRequestDataType + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_cloud_storage import CreateTableRequestDataAttributesFileMetadataCloudStorage + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_local_file import CreateTableRequestDataAttributesFileMetadataLocalFile + +class CreateTableRequestData(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_table_request_data_attributes import CreateTableRequestDataAttributes + from datadog_api_client.v2.model.create_table_request_data_type import CreateTableRequestDataType + return { + "attributes": (CreateTableRequestDataAttributes,), + "type": (CreateTableRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: CreateTableRequestDataType, attributes: Union[CreateTableRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object containing the table definition. + + :param attributes: Attributes that define the reference table's configuration and properties. + :type attributes: CreateTableRequestDataAttributes, optional + + :param type: Reference table resource type. + :type type: CreateTableRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes.py b/datadog_api_client/v2/model/create_table_request_data_attributes.py new file mode 100644 index 0000000000..1fbd86d89e --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata import CreateTableRequestDataAttributesFileMetadata + from datadog_api_client.v2.model.create_table_request_data_attributes_schema import CreateTableRequestDataAttributesSchema + from datadog_api_client.v2.model.reference_table_create_source_type import ReferenceTableCreateSourceType + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_cloud_storage import CreateTableRequestDataAttributesFileMetadataCloudStorage + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_local_file import CreateTableRequestDataAttributesFileMetadataLocalFile + +class CreateTableRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata import CreateTableRequestDataAttributesFileMetadata + from datadog_api_client.v2.model.create_table_request_data_attributes_schema import CreateTableRequestDataAttributesSchema + from datadog_api_client.v2.model.reference_table_create_source_type import ReferenceTableCreateSourceType + return { + "description": (str,), + "file_metadata": (CreateTableRequestDataAttributesFileMetadata,), + "schema": (CreateTableRequestDataAttributesSchema,), + "source": (ReferenceTableCreateSourceType,), + "table_name": (str,), + "tags": ([str],), + } + attribute_map = { + "description": "description", + "file_metadata": "file_metadata", + "schema": "schema", + "source": "source", + "table_name": "table_name", + "tags": "tags", + } + + def __init__(self_, schema: CreateTableRequestDataAttributesSchema, source: ReferenceTableCreateSourceType, table_name: str, description: Union[str, UnsetType]=unset, file_metadata: Union[CreateTableRequestDataAttributesFileMetadata, CreateTableRequestDataAttributesFileMetadataCloudStorage, CreateTableRequestDataAttributesFileMetadataLocalFile, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes that define the reference table's configuration and properties. + + :param description: Optional text describing the purpose or contents of this reference table. + :type description: str, optional + + :param file_metadata: Metadata specifying where and how to access the reference table's data file. + :type file_metadata: CreateTableRequestDataAttributesFileMetadata, optional + + :param schema: Schema defining the structure and columns of the reference table. + :type schema: CreateTableRequestDataAttributesSchema + + :param source: The source type for creating reference table data. Only these source types can be created through this API. + :type source: ReferenceTableCreateSourceType + + :param table_name: Name to identify this reference table. + :type table_name: str + + :param tags: Tags for organizing and filtering reference tables. + :type tags: [str], optional + """ + if description is not unset: + kwargs["description"] = description + if file_metadata is not unset: + kwargs["file_metadata"] = file_metadata + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.schema = schema + self_.source = source + self_.table_name = table_name diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata.py b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata.py new file mode 100644 index 0000000000..217d00db17 --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateTableRequestDataAttributesFileMetadata(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Metadata specifying where and how to access the reference table's data file. + + :param access_details: Cloud storage access configuration for the reference table data file. + :type access_details: CreateTableRequestDataAttributesFileMetadataOneOfAccessDetails + + :param sync_enabled: Whether this table is synced automatically. + :type sync_enabled: bool + + :param upload_id: The upload ID. + :type upload_id: str + """ + 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.create_table_request_data_attributes_file_metadata_cloud_storage import CreateTableRequestDataAttributesFileMetadataCloudStorage + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_local_file import CreateTableRequestDataAttributesFileMetadataLocalFile + return { + "oneOf": [ + CreateTableRequestDataAttributesFileMetadataCloudStorage, + CreateTableRequestDataAttributesFileMetadataLocalFile, + ], + } diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_cloud_storage.py b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_cloud_storage.py new file mode 100644 index 0000000000..d6226fd792 --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_cloud_storage.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetails + +class CreateTableRequestDataAttributesFileMetadataCloudStorage(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetails + return { + "access_details": (CreateTableRequestDataAttributesFileMetadataOneOfAccessDetails,), + "sync_enabled": (bool,), + } + attribute_map = { + "access_details": "access_details", + "sync_enabled": "sync_enabled", + } + + def __init__(self_, access_details: CreateTableRequestDataAttributesFileMetadataOneOfAccessDetails, sync_enabled: bool, **kwargs): + """ + Cloud storage file metadata for create requests. Both access_details and sync_enabled are required. + + :param access_details: Cloud storage access configuration for the reference table data file. + :type access_details: CreateTableRequestDataAttributesFileMetadataOneOfAccessDetails + + :param sync_enabled: Whether this table is synced automatically. + :type sync_enabled: bool + """ + super().__init__(kwargs) + + + self_.access_details = access_details + self_.sync_enabled = sync_enabled diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_local_file.py b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_local_file.py new file mode 100644 index 0000000000..ae67dbb85c --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_local_file.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateTableRequestDataAttributesFileMetadataLocalFile(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "upload_id": (str,), + } + attribute_map = { + "upload_id": "upload_id", + } + + def __init__(self_, upload_id: str, **kwargs): + """ + Local file metadata for create requests using the upload ID. + + :param upload_id: The upload ID. + :type upload_id: str + """ + super().__init__(kwargs) + + + self_.upload_id = upload_id diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details.py b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details.py new file mode 100644 index 0000000000..3f1e35e6f9 --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail + +class CreateTableRequestDataAttributesFileMetadataOneOfAccessDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail + from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail + return { + "aws_detail": (CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail,), + "azure_detail": (CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail,), + "gcp_detail": (CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail,), + } + attribute_map = { + "aws_detail": "aws_detail", + "azure_detail": "azure_detail", + "gcp_detail": "gcp_detail", + } + + def __init__(self_, aws_detail: Union[CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail, UnsetType]=unset, azure_detail: Union[CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail, UnsetType]=unset, gcp_detail: Union[CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail, UnsetType]=unset, **kwargs): + """ + Cloud storage access configuration for the reference table data file. + + :param aws_detail: Amazon Web Services S3 storage access configuration. + :type aws_detail: CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail, optional + + :param azure_detail: Azure Blob Storage access configuration. + :type azure_detail: CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail, optional + + :param gcp_detail: Google Cloud Platform storage access configuration. + :type gcp_detail: CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail, optional + """ + if aws_detail is not unset: + kwargs["aws_detail"] = aws_detail + if azure_detail is not unset: + kwargs["azure_detail"] = azure_detail + if gcp_detail is not unset: + kwargs["gcp_detail"] = gcp_detail + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail.py b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail.py new file mode 100644 index 0000000000..c4396aeddc --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aws_account_id": (str,), + "aws_bucket_name": (str,), + "file_path": (str,), + } + attribute_map = { + "aws_account_id": "aws_account_id", + "aws_bucket_name": "aws_bucket_name", + "file_path": "file_path", + } + + def __init__(self_, aws_account_id: str, aws_bucket_name: str, file_path: str, **kwargs): + """ + Amazon Web Services S3 storage access configuration. + + :param aws_account_id: AWS account ID where the S3 bucket is located. + :type aws_account_id: str + + :param aws_bucket_name: S3 bucket containing the CSV file. + :type aws_bucket_name: str + + :param file_path: The relative file path from the S3 bucket root to the CSV file. + :type file_path: str + """ + super().__init__(kwargs) + + + self_.aws_account_id = aws_account_id + self_.aws_bucket_name = aws_bucket_name + self_.file_path = file_path diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail.py b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail.py new file mode 100644 index 0000000000..2e02b3683d --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "azure_client_id": (str,), + "azure_container_name": (str,), + "azure_storage_account_name": (str,), + "azure_tenant_id": (str,), + "file_path": (str,), + } + attribute_map = { + "azure_client_id": "azure_client_id", + "azure_container_name": "azure_container_name", + "azure_storage_account_name": "azure_storage_account_name", + "azure_tenant_id": "azure_tenant_id", + "file_path": "file_path", + } + + def __init__(self_, azure_client_id: str, azure_container_name: str, azure_storage_account_name: str, azure_tenant_id: str, file_path: str, **kwargs): + """ + Azure Blob Storage access configuration. + + :param azure_client_id: Azure service principal (application) client ID with permissions to read from the container. + :type azure_client_id: str + + :param azure_container_name: Azure Blob Storage container containing the CSV file. + :type azure_container_name: str + + :param azure_storage_account_name: Azure storage account where the container is located. + :type azure_storage_account_name: str + + :param azure_tenant_id: Azure Active Directory tenant ID. + :type azure_tenant_id: str + + :param file_path: The relative file path from the Azure container root to the CSV file. + :type file_path: str + """ + super().__init__(kwargs) + + + self_.azure_client_id = azure_client_id + self_.azure_container_name = azure_container_name + self_.azure_storage_account_name = azure_storage_account_name + self_.azure_tenant_id = azure_tenant_id + self_.file_path = file_path diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail.py b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail.py new file mode 100644 index 0000000000..56fb3db670 --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "file_path": (str,), + "gcp_bucket_name": (str,), + "gcp_project_id": (str,), + "gcp_service_account_email": (str,), + } + attribute_map = { + "file_path": "file_path", + "gcp_bucket_name": "gcp_bucket_name", + "gcp_project_id": "gcp_project_id", + "gcp_service_account_email": "gcp_service_account_email", + } + + def __init__(self_, file_path: str, gcp_bucket_name: str, gcp_project_id: str, gcp_service_account_email: str, **kwargs): + """ + Google Cloud Platform storage access configuration. + + :param file_path: The relative file path from the GCS bucket root to the CSV file. + :type file_path: str + + :param gcp_bucket_name: GCP bucket containing the CSV file. + :type gcp_bucket_name: str + + :param gcp_project_id: GCP project ID where the bucket is located. + :type gcp_project_id: str + + :param gcp_service_account_email: Service account email with read permissions for the GCS bucket. + :type gcp_service_account_email: str + """ + super().__init__(kwargs) + + + self_.file_path = file_path + self_.gcp_bucket_name = gcp_bucket_name + self_.gcp_project_id = gcp_project_id + self_.gcp_service_account_email = gcp_service_account_email diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes_schema.py b/datadog_api_client/v2/model/create_table_request_data_attributes_schema.py new file mode 100644 index 0000000000..625d66c1ef --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes_schema.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_table_request_data_attributes_schema_fields_items import CreateTableRequestDataAttributesSchemaFieldsItems + +class CreateTableRequestDataAttributesSchema(ModelNormal): + validations = { + "fields": { + "max_items": 200, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_table_request_data_attributes_schema_fields_items import CreateTableRequestDataAttributesSchemaFieldsItems + return { + "fields": ([CreateTableRequestDataAttributesSchemaFieldsItems],), + "primary_keys": ([str],), + } + attribute_map = { + "fields": "fields", + "primary_keys": "primary_keys", + } + + def __init__(self_, fields: List[CreateTableRequestDataAttributesSchemaFieldsItems], primary_keys: List[str], **kwargs): + """ + Schema defining the structure and columns of the reference table. + + :param fields: The schema fields. Maximum of 200 columns. + :type fields: [CreateTableRequestDataAttributesSchemaFieldsItems] + + :param primary_keys: List of field names that serve as primary keys for the table. Only one primary key is supported, and it is used as an ID to retrieve rows. + :type primary_keys: [str] + """ + super().__init__(kwargs) + + + self_.fields = fields + self_.primary_keys = primary_keys diff --git a/datadog_api_client/v2/model/create_table_request_data_attributes_schema_fields_items.py b/datadog_api_client/v2/model/create_table_request_data_attributes_schema_fields_items.py new file mode 100644 index 0000000000..f0d2be4ca7 --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_attributes_schema_fields_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.reference_table_schema_field_type import ReferenceTableSchemaFieldType + +class CreateTableRequestDataAttributesSchemaFieldsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.reference_table_schema_field_type import ReferenceTableSchemaFieldType + return { + "name": (str,), + "type": (ReferenceTableSchemaFieldType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: ReferenceTableSchemaFieldType, **kwargs): + """ + A single field (column) in the reference table schema to be created. + + :param name: The field name. + :type name: str + + :param type: The field type for reference table schema fields. + :type type: ReferenceTableSchemaFieldType + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/create_table_request_data_type.py b/datadog_api_client/v2/model/create_table_request_data_type.py new file mode 100644 index 0000000000..98479b5c49 --- /dev/null +++ b/datadog_api_client/v2/model/create_table_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateTableRequestDataType(ModelSimple): + """ + Reference table resource type. + + :param value: If omitted defaults to "reference_table". Must be one of ["reference_table"]. + :type value: str + """ + + allowed_values = { + "reference_table", + } + REFERENCE_TABLE: ClassVar["CreateTableRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateTableRequestDataType.REFERENCE_TABLE = CreateTableRequestDataType("reference_table") diff --git a/datadog_api_client/v2/model/create_tenancy_config_data.py b/datadog_api_client/v2/model/create_tenancy_config_data.py new file mode 100644 index 0000000000..72390ebcb4 --- /dev/null +++ b/datadog_api_client/v2/model/create_tenancy_config_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_tenancy_config_data_attributes import CreateTenancyConfigDataAttributes + from datadog_api_client.v2.model.update_tenancy_config_data_type import UpdateTenancyConfigDataType + +class CreateTenancyConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_tenancy_config_data_attributes import CreateTenancyConfigDataAttributes + from datadog_api_client.v2.model.update_tenancy_config_data_type import UpdateTenancyConfigDataType + return { + "attributes": (CreateTenancyConfigDataAttributes,), + "id": (str,), + "type": (UpdateTenancyConfigDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UpdateTenancyConfigDataType, attributes: Union[CreateTenancyConfigDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object for creating a new OCI tenancy integration configuration, including the tenancy ID, type, and configuration attributes. + + :param attributes: Attributes for creating a new OCI tenancy integration configuration, including credentials, region settings, and collection options. + :type attributes: CreateTenancyConfigDataAttributes, optional + + :param id: The OCID of the OCI tenancy to configure. + :type id: str + + :param type: OCI tenancy resource type. + :type type: UpdateTenancyConfigDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/create_tenancy_config_data_attributes.py b/datadog_api_client/v2/model/create_tenancy_config_data_attributes.py new file mode 100644 index 0000000000..fa9d233b55 --- /dev/null +++ b/datadog_api_client/v2/model/create_tenancy_config_data_attributes.py @@ -0,0 +1,122 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_tenancy_config_data_attributes_auth_credentials import CreateTenancyConfigDataAttributesAuthCredentials + from datadog_api_client.v2.model.create_tenancy_config_data_attributes_logs_config import CreateTenancyConfigDataAttributesLogsConfig + from datadog_api_client.v2.model.create_tenancy_config_data_attributes_metrics_config import CreateTenancyConfigDataAttributesMetricsConfig + from datadog_api_client.v2.model.create_tenancy_config_data_attributes_regions_config import CreateTenancyConfigDataAttributesRegionsConfig + +class CreateTenancyConfigDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_tenancy_config_data_attributes_auth_credentials import CreateTenancyConfigDataAttributesAuthCredentials + from datadog_api_client.v2.model.create_tenancy_config_data_attributes_logs_config import CreateTenancyConfigDataAttributesLogsConfig + from datadog_api_client.v2.model.create_tenancy_config_data_attributes_metrics_config import CreateTenancyConfigDataAttributesMetricsConfig + from datadog_api_client.v2.model.create_tenancy_config_data_attributes_regions_config import CreateTenancyConfigDataAttributesRegionsConfig + return { + "auth_credentials": (CreateTenancyConfigDataAttributesAuthCredentials,), + "config_version": (int, none_type), + "cost_collection_enabled": (bool,), + "dd_compartment_id": (str,), + "dd_stack_id": (str,), + "home_region": (str,), + "logs_config": (CreateTenancyConfigDataAttributesLogsConfig,), + "metrics_config": (CreateTenancyConfigDataAttributesMetricsConfig,), + "regions_config": (CreateTenancyConfigDataAttributesRegionsConfig,), + "resource_collection_enabled": (bool,), + "user_ocid": (str,), + } + attribute_map = { + "auth_credentials": "auth_credentials", + "config_version": "config_version", + "cost_collection_enabled": "cost_collection_enabled", + "dd_compartment_id": "dd_compartment_id", + "dd_stack_id": "dd_stack_id", + "home_region": "home_region", + "logs_config": "logs_config", + "metrics_config": "metrics_config", + "regions_config": "regions_config", + "resource_collection_enabled": "resource_collection_enabled", + "user_ocid": "user_ocid", + } + + def __init__(self_, auth_credentials: CreateTenancyConfigDataAttributesAuthCredentials, home_region: str, user_ocid: str, config_version: Union[int, none_type, UnsetType]=unset, cost_collection_enabled: Union[bool, UnsetType]=unset, dd_compartment_id: Union[str, UnsetType]=unset, dd_stack_id: Union[str, UnsetType]=unset, logs_config: Union[CreateTenancyConfigDataAttributesLogsConfig, UnsetType]=unset, metrics_config: Union[CreateTenancyConfigDataAttributesMetricsConfig, UnsetType]=unset, regions_config: Union[CreateTenancyConfigDataAttributesRegionsConfig, UnsetType]=unset, resource_collection_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for creating a new OCI tenancy integration configuration, including credentials, region settings, and collection options. + + :param auth_credentials: OCI API signing key credentials used to authenticate the Datadog integration with the OCI tenancy. + :type auth_credentials: CreateTenancyConfigDataAttributesAuthCredentials + + :param config_version: Version number of the integration the tenancy is integrated with + :type config_version: int, none_type, optional + + :param cost_collection_enabled: Whether cost data collection from OCI is enabled for the tenancy. + :type cost_collection_enabled: bool, optional + + :param dd_compartment_id: The OCID of the OCI compartment used by the Datadog integration stack. + :type dd_compartment_id: str, optional + + :param dd_stack_id: The OCID of the OCI Resource Manager stack used by the Datadog integration. + :type dd_stack_id: str, optional + + :param home_region: The home region of the OCI tenancy (for example, us-ashburn-1). + :type home_region: str + + :param logs_config: Log collection configuration for an OCI tenancy, controlling which compartments and services have log collection enabled. + :type logs_config: CreateTenancyConfigDataAttributesLogsConfig, optional + + :param metrics_config: Metrics collection configuration for an OCI tenancy, controlling which compartments and services are included or excluded. + :type metrics_config: CreateTenancyConfigDataAttributesMetricsConfig, optional + + :param regions_config: Region configuration for an OCI tenancy, specifying which regions are available, enabled, or disabled for data collection. + :type regions_config: CreateTenancyConfigDataAttributesRegionsConfig, optional + + :param resource_collection_enabled: Whether resource collection from OCI is enabled for the tenancy. + :type resource_collection_enabled: bool, optional + + :param user_ocid: The OCID of the OCI user used by the Datadog integration for authentication. + :type user_ocid: str + """ + if config_version is not unset: + kwargs["config_version"] = config_version + if cost_collection_enabled is not unset: + kwargs["cost_collection_enabled"] = cost_collection_enabled + if dd_compartment_id is not unset: + kwargs["dd_compartment_id"] = dd_compartment_id + if dd_stack_id is not unset: + kwargs["dd_stack_id"] = dd_stack_id + if logs_config is not unset: + kwargs["logs_config"] = logs_config + if metrics_config is not unset: + kwargs["metrics_config"] = metrics_config + if regions_config is not unset: + kwargs["regions_config"] = regions_config + if resource_collection_enabled is not unset: + kwargs["resource_collection_enabled"] = resource_collection_enabled + super().__init__(kwargs) + + + self_.auth_credentials = auth_credentials + self_.home_region = home_region + self_.user_ocid = user_ocid diff --git a/datadog_api_client/v2/model/create_tenancy_config_data_attributes_auth_credentials.py b/datadog_api_client/v2/model/create_tenancy_config_data_attributes_auth_credentials.py new file mode 100644 index 0000000000..e13921ae13 --- /dev/null +++ b/datadog_api_client/v2/model/create_tenancy_config_data_attributes_auth_credentials.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateTenancyConfigDataAttributesAuthCredentials(ModelNormal): + @cached_property + def openapi_types(_): + return { + "fingerprint": (str,), + "private_key": (str,), + } + attribute_map = { + "fingerprint": "fingerprint", + "private_key": "private_key", + } + + def __init__(self_, private_key: str, fingerprint: Union[str, UnsetType]=unset, **kwargs): + """ + OCI API signing key credentials used to authenticate the Datadog integration with the OCI tenancy. + + :param fingerprint: The fingerprint of the OCI API signing key used for authentication. + :type fingerprint: str, optional + + :param private_key: The PEM-encoded private key corresponding to the OCI API signing key fingerprint. + :type private_key: str + """ + if fingerprint is not unset: + kwargs["fingerprint"] = fingerprint + super().__init__(kwargs) + + + self_.private_key = private_key diff --git a/datadog_api_client/v2/model/create_tenancy_config_data_attributes_logs_config.py b/datadog_api_client/v2/model/create_tenancy_config_data_attributes_logs_config.py new file mode 100644 index 0000000000..e7628c9d1f --- /dev/null +++ b/datadog_api_client/v2/model/create_tenancy_config_data_attributes_logs_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateTenancyConfigDataAttributesLogsConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compartment_tag_filters": ([str],), + "enabled": (bool,), + "enabled_services": ([str],), + } + attribute_map = { + "compartment_tag_filters": "compartment_tag_filters", + "enabled": "enabled", + "enabled_services": "enabled_services", + } + + def __init__(self_, compartment_tag_filters: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, enabled_services: Union[List[str], UnsetType]=unset, **kwargs): + """ + Log collection configuration for an OCI tenancy, controlling which compartments and services have log collection enabled. + + :param compartment_tag_filters: List of compartment tag filters to scope log collection to specific compartments. + :type compartment_tag_filters: [str], optional + + :param enabled: Whether log collection is enabled for the tenancy. + :type enabled: bool, optional + + :param enabled_services: List of OCI service names for which log collection is enabled. + :type enabled_services: [str], optional + """ + if compartment_tag_filters is not unset: + kwargs["compartment_tag_filters"] = compartment_tag_filters + if enabled is not unset: + kwargs["enabled"] = enabled + if enabled_services is not unset: + kwargs["enabled_services"] = enabled_services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_tenancy_config_data_attributes_metrics_config.py b/datadog_api_client/v2/model/create_tenancy_config_data_attributes_metrics_config.py new file mode 100644 index 0000000000..f02ec33e92 --- /dev/null +++ b/datadog_api_client/v2/model/create_tenancy_config_data_attributes_metrics_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateTenancyConfigDataAttributesMetricsConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compartment_tag_filters": ([str],), + "enabled": (bool,), + "excluded_services": ([str],), + } + attribute_map = { + "compartment_tag_filters": "compartment_tag_filters", + "enabled": "enabled", + "excluded_services": "excluded_services", + } + + def __init__(self_, compartment_tag_filters: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, excluded_services: Union[List[str], UnsetType]=unset, **kwargs): + """ + Metrics collection configuration for an OCI tenancy, controlling which compartments and services are included or excluded. + + :param compartment_tag_filters: List of compartment tag filters to scope metrics collection to specific compartments. + :type compartment_tag_filters: [str], optional + + :param enabled: Whether metrics collection is enabled for the tenancy. + :type enabled: bool, optional + + :param excluded_services: List of OCI service names to exclude from metrics collection. + :type excluded_services: [str], optional + """ + if compartment_tag_filters is not unset: + kwargs["compartment_tag_filters"] = compartment_tag_filters + if enabled is not unset: + kwargs["enabled"] = enabled + if excluded_services is not unset: + kwargs["excluded_services"] = excluded_services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_tenancy_config_data_attributes_regions_config.py b/datadog_api_client/v2/model/create_tenancy_config_data_attributes_regions_config.py new file mode 100644 index 0000000000..d8ebb4427a --- /dev/null +++ b/datadog_api_client/v2/model/create_tenancy_config_data_attributes_regions_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateTenancyConfigDataAttributesRegionsConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "available": ([str],), + "disabled": ([str],), + "enabled": ([str],), + } + attribute_map = { + "available": "available", + "disabled": "disabled", + "enabled": "enabled", + } + + def __init__(self_, available: Union[List[str], UnsetType]=unset, disabled: Union[List[str], UnsetType]=unset, enabled: Union[List[str], UnsetType]=unset, **kwargs): + """ + Region configuration for an OCI tenancy, specifying which regions are available, enabled, or disabled for data collection. + + :param available: List of OCI regions available for data collection in the tenancy. + :type available: [str], optional + + :param disabled: List of OCI regions explicitly disabled for data collection. + :type disabled: [str], optional + + :param enabled: List of OCI regions enabled for data collection. + :type enabled: [str], optional + """ + if available is not unset: + kwargs["available"] = available + if disabled is not unset: + kwargs["disabled"] = disabled + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_tenancy_config_request.py b/datadog_api_client/v2/model/create_tenancy_config_request.py new file mode 100644 index 0000000000..fb3576d262 --- /dev/null +++ b/datadog_api_client/v2/model/create_tenancy_config_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_tenancy_config_data import CreateTenancyConfigData + +class CreateTenancyConfigRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_tenancy_config_data import CreateTenancyConfigData + return { + "data": (CreateTenancyConfigData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateTenancyConfigData, **kwargs): + """ + Request body for creating a new OCI tenancy integration configuration. + + :param data: The data object for creating a new OCI tenancy integration configuration, including the tenancy ID, type, and configuration attributes. + :type data: CreateTenancyConfigData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_upload_request.py b/datadog_api_client/v2/model/create_upload_request.py new file mode 100644 index 0000000000..bed945581e --- /dev/null +++ b/datadog_api_client/v2/model/create_upload_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_upload_request_data import CreateUploadRequestData + +class CreateUploadRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_upload_request_data import CreateUploadRequestData + return { + "data": (CreateUploadRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateUploadRequestData, UnsetType]=unset, **kwargs): + """ + Request to create an upload for a file to be ingested into a reference table. + + :param data: Request data for creating an upload for a file to be ingested into a reference table. + :type data: CreateUploadRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_upload_request_data.py b/datadog_api_client/v2/model/create_upload_request_data.py new file mode 100644 index 0000000000..b12dcc3df7 --- /dev/null +++ b/datadog_api_client/v2/model/create_upload_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_upload_request_data_attributes import CreateUploadRequestDataAttributes + from datadog_api_client.v2.model.create_upload_request_data_type import CreateUploadRequestDataType + +class CreateUploadRequestData(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_upload_request_data_attributes import CreateUploadRequestDataAttributes + from datadog_api_client.v2.model.create_upload_request_data_type import CreateUploadRequestDataType + return { + "attributes": (CreateUploadRequestDataAttributes,), + "type": (CreateUploadRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: CreateUploadRequestDataType, attributes: Union[CreateUploadRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + Request data for creating an upload for a file to be ingested into a reference table. + + :param attributes: Upload configuration specifying how data is uploaded by the user, and properties of the table to associate the upload with. + :type attributes: CreateUploadRequestDataAttributes, optional + + :param type: Upload resource type. + :type type: CreateUploadRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_upload_request_data_attributes.py b/datadog_api_client/v2/model/create_upload_request_data_attributes.py new file mode 100644 index 0000000000..7e1780509a --- /dev/null +++ b/datadog_api_client/v2/model/create_upload_request_data_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateUploadRequestDataAttributes(ModelNormal): + validations = { + "headers": { + "max_items": 200, + }, + "part_count": { + "inclusive_maximum": 20, + }, + } + @cached_property + def openapi_types(_): + return { + "headers": ([str],), + "part_count": (int,), + "part_size": (int,), + "table_name": (str,), + } + attribute_map = { + "headers": "headers", + "part_count": "part_count", + "part_size": "part_size", + "table_name": "table_name", + } + + def __init__(self_, headers: List[str], part_count: int, part_size: int, table_name: str, **kwargs): + """ + Upload configuration specifying how data is uploaded by the user, and properties of the table to associate the upload with. + + :param headers: The CSV file headers that define the schema fields, provided in the same order as the columns in the uploaded file. Maximum of 200 columns. + :type headers: [str] + + :param part_count: Number of parts to split the file into for multipart upload. + :type part_count: int + + :param part_size: The size of each part in the upload in bytes. All parts except the last one must be at least 5,000,000 bytes. + :type part_size: int + + :param table_name: Name of the table to associate with this upload. + :type table_name: str + """ + super().__init__(kwargs) + + + self_.headers = headers + self_.part_count = part_count + self_.part_size = part_size + self_.table_name = table_name diff --git a/datadog_api_client/v2/model/create_upload_request_data_type.py b/datadog_api_client/v2/model/create_upload_request_data_type.py new file mode 100644 index 0000000000..5baa204b57 --- /dev/null +++ b/datadog_api_client/v2/model/create_upload_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateUploadRequestDataType(ModelSimple): + """ + Upload resource type. + + :param value: If omitted defaults to "upload". Must be one of ["upload"]. + :type value: str + """ + + allowed_values = { + "upload", + } + UPLOAD: ClassVar["CreateUploadRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateUploadRequestDataType.UPLOAD = CreateUploadRequestDataType("upload") diff --git a/datadog_api_client/v2/model/create_upload_response.py b/datadog_api_client/v2/model/create_upload_response.py new file mode 100644 index 0000000000..ccd5b82080 --- /dev/null +++ b/datadog_api_client/v2/model/create_upload_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_upload_response_data import CreateUploadResponseData + +class CreateUploadResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_upload_response_data import CreateUploadResponseData + return { + "data": (CreateUploadResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CreateUploadResponseData, UnsetType]=unset, **kwargs): + """ + Information about the upload created containing the upload ID and pre-signed URLs to PUT chunks of the CSV file to. + + :param data: Upload ID and attributes of the created upload. + :type data: CreateUploadResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_upload_response_data.py b/datadog_api_client/v2/model/create_upload_response_data.py new file mode 100644 index 0000000000..2a60f76e9b --- /dev/null +++ b/datadog_api_client/v2/model/create_upload_response_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_upload_response_data_attributes import CreateUploadResponseDataAttributes + from datadog_api_client.v2.model.create_upload_response_data_type import CreateUploadResponseDataType + +class CreateUploadResponseData(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_upload_response_data_attributes import CreateUploadResponseDataAttributes + from datadog_api_client.v2.model.create_upload_response_data_type import CreateUploadResponseDataType + return { + "attributes": (CreateUploadResponseDataAttributes,), + "id": (str,), + "type": (CreateUploadResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: CreateUploadResponseDataType, attributes: Union[CreateUploadResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Upload ID and attributes of the created upload. + + :param attributes: Pre-signed URLs for uploading parts of the file. + :type attributes: CreateUploadResponseDataAttributes, optional + + :param id: Unique identifier for this upload. Use this ID when creating the reference table. + :type id: str, optional + + :param type: Upload resource type. + :type type: CreateUploadResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/create_upload_response_data_attributes.py b/datadog_api_client/v2/model/create_upload_response_data_attributes.py new file mode 100644 index 0000000000..3b85c8d8dc --- /dev/null +++ b/datadog_api_client/v2/model/create_upload_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateUploadResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "part_urls": ([str],), + } + attribute_map = { + "part_urls": "part_urls", + } + + def __init__(self_, part_urls: Union[List[str], UnsetType]=unset, **kwargs): + """ + Pre-signed URLs for uploading parts of the file. + + :param part_urls: The pre-signed URLs for uploading parts. These URLs expire after 5 minutes. + :type part_urls: [str], optional + """ + if part_urls is not unset: + kwargs["part_urls"] = part_urls + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/create_upload_response_data_type.py b/datadog_api_client/v2/model/create_upload_response_data_type.py new file mode 100644 index 0000000000..79c1de5a71 --- /dev/null +++ b/datadog_api_client/v2/model/create_upload_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CreateUploadResponseDataType(ModelSimple): + """ + Upload resource type. + + :param value: If omitted defaults to "upload". Must be one of ["upload"]. + :type value: str + """ + + allowed_values = { + "upload", + } + UPLOAD: ClassVar["CreateUploadResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CreateUploadResponseDataType.UPLOAD = CreateUploadResponseDataType("upload") diff --git a/datadog_api_client/v2/model/create_user_notification_channel_request.py b/datadog_api_client/v2/model/create_user_notification_channel_request.py new file mode 100644 index 0000000000..6aab98ace1 --- /dev/null +++ b/datadog_api_client/v2/model/create_user_notification_channel_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_notification_channel_data import CreateNotificationChannelData + from datadog_api_client.v2.model.create_phone_notification_channel_config import CreatePhoneNotificationChannelConfig + from datadog_api_client.v2.model.create_email_notification_channel_config import CreateEmailNotificationChannelConfig + +class CreateUserNotificationChannelRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_notification_channel_data import CreateNotificationChannelData + return { + "data": (CreateNotificationChannelData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CreateNotificationChannelData, **kwargs): + """ + A top-level wrapper for creating a notification channel for a user + + :param data: Data for creating an on-call notification channel + :type data: CreateNotificationChannelData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_variant.py b/datadog_api_client/v2/model/create_variant.py new file mode 100644 index 0000000000..7b1cac1d29 --- /dev/null +++ b/datadog_api_client/v2/model/create_variant.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CreateVariant(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + "name": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "name": "name", + "value": "value", + } + + def __init__(self_, key: str, name: str, value: str, **kwargs): + """ + Request to create a variant. + + :param key: The unique key of the variant. + :type key: str + + :param name: The name of the variant. + :type name: str + + :param value: The value of the variant as a string. + :type value: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/create_workflow_request.py b/datadog_api_client/v2/model/create_workflow_request.py new file mode 100644 index 0000000000..b7d3472600 --- /dev/null +++ b/datadog_api_client/v2/model/create_workflow_request.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_data import WorkflowData + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class CreateWorkflowRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_data import WorkflowData + return { + "data": (WorkflowData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: WorkflowData, **kwargs): + """ + A request object for creating a new workflow. + + :param data: Data related to the workflow. + :type data: WorkflowData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/create_workflow_response.py b/datadog_api_client/v2/model/create_workflow_response.py new file mode 100644 index 0000000000..6e2babbdfc --- /dev/null +++ b/datadog_api_client/v2/model/create_workflow_response.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_data import WorkflowData + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class CreateWorkflowResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_data import WorkflowData + return { + "data": (WorkflowData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: WorkflowData, **kwargs): + """ + The response object after creating a new workflow. + + :param data: Data related to the workflow. + :type data: WorkflowData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/creator.py b/datadog_api_client/v2/model/creator.py new file mode 100644 index 0000000000..46c286f07e --- /dev/null +++ b/datadog_api_client/v2/model/creator.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Creator(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "name": (str, none_type), + } + attribute_map = { + "email": "email", + "handle": "handle", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Creator of the object. + + :param email: Email of the creator. + :type email: str, optional + + :param handle: Handle of the creator. + :type handle: str, optional + + :param name: Name of the creator. + :type name: str, none_type, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_agent_data.py b/datadog_api_client/v2/model/csm_agent_data.py new file mode 100644 index 0000000000..4f4e91cf2f --- /dev/null +++ b/datadog_api_client/v2/model/csm_agent_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_agents_attributes import CsmAgentsAttributes + from datadog_api_client.v2.model.csm_agents_type import CSMAgentsType + +class CsmAgentData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_agents_attributes import CsmAgentsAttributes + from datadog_api_client.v2.model.csm_agents_type import CSMAgentsType + return { + "attributes": (CsmAgentsAttributes,), + "id": (str,), + "type": (CSMAgentsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CsmAgentsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CSMAgentsType, UnsetType]=unset, **kwargs): + """ + Single Agent Data. + + :param attributes: A CSM Agent returned by the API. + :type attributes: CsmAgentsAttributes, optional + + :param id: The ID of the Agent. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``datadog_agent``. + :type type: CSMAgentsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_agentless_host_attributes.py b/datadog_api_client/v2/model/csm_agentless_host_attributes.py new file mode 100644 index 0000000000..8633eaf5ba --- /dev/null +++ b/datadog_api_client/v2/model/csm_agentless_host_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_cloud_provider import CsmCloudProvider + from datadog_api_client.v2.model.csm_agentless_host_resource_type import CsmAgentlessHostResourceType + +class CsmAgentlessHostAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_cloud_provider import CsmCloudProvider + from datadog_api_client.v2.model.csm_agentless_host_resource_type import CsmAgentlessHostResourceType + return { + "account_id": (str,), + "cloud_provider": (CsmCloudProvider,), + "has_posture_management": (bool,), + "has_vulnerability_scanning": (bool,), + "resource_type": (CsmAgentlessHostResourceType,), + } + attribute_map = { + "account_id": "account_id", + "cloud_provider": "cloud_provider", + "has_posture_management": "has_posture_management", + "has_vulnerability_scanning": "has_vulnerability_scanning", + "resource_type": "resource_type", + } + + def __init__(self_, account_id: str, cloud_provider: CsmCloudProvider, has_posture_management: bool, has_vulnerability_scanning: bool, resource_type: CsmAgentlessHostResourceType, **kwargs): + """ + Attributes of an agentless host. + + :param account_id: The ID of the cloud account that the host belongs to. + :type account_id: str + + :param cloud_provider: The cloud provider of a host resource. + :type cloud_provider: CsmCloudProvider + + :param has_posture_management: Whether CSM Misconfigurations is enabled for this host. ``true`` if enabled; ``false`` if disabled. + :type has_posture_management: bool + + :param has_vulnerability_scanning: Whether CSM Vulnerabilities is enabled for this host. ``true`` if enabled; ``false`` if disabled. + :type has_vulnerability_scanning: bool + + :param resource_type: The type of cloud resource for an agentless host. + :type resource_type: CsmAgentlessHostResourceType + """ + super().__init__(kwargs) + + + self_.account_id = account_id + self_.cloud_provider = cloud_provider + self_.has_posture_management = has_posture_management + self_.has_vulnerability_scanning = has_vulnerability_scanning + self_.resource_type = resource_type diff --git a/datadog_api_client/v2/model/csm_agentless_host_data.py b/datadog_api_client/v2/model/csm_agentless_host_data.py new file mode 100644 index 0000000000..121e6d0356 --- /dev/null +++ b/datadog_api_client/v2/model/csm_agentless_host_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_agentless_host_attributes import CsmAgentlessHostAttributes + from datadog_api_client.v2.model.csm_agentless_host_type import CsmAgentlessHostType + +class CsmAgentlessHostData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_agentless_host_attributes import CsmAgentlessHostAttributes + from datadog_api_client.v2.model.csm_agentless_host_type import CsmAgentlessHostType + return { + "attributes": (CsmAgentlessHostAttributes,), + "id": (str,), + "type": (CsmAgentlessHostType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CsmAgentlessHostAttributes, id: str, type: CsmAgentlessHostType, **kwargs): + """ + A single agentless host resource. + + :param attributes: Attributes of an agentless host. + :type attributes: CsmAgentlessHostAttributes + + :param id: The resource identifier of the agentless host. + :type id: str + + :param type: The JSON:API type for agentless host resources. The value should always be ``agentless_host``. + :type type: CsmAgentlessHostType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/csm_agentless_host_facet_attributes.py b/datadog_api_client/v2/model/csm_agentless_host_facet_attributes.py new file mode 100644 index 0000000000..4a91c8fd29 --- /dev/null +++ b/datadog_api_client/v2/model/csm_agentless_host_facet_attributes.py @@ -0,0 +1,117 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CsmAgentlessHostFacetAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "bounded": (bool,), + "bundled": (bool,), + "bundled_and_used": (bool,), + "default_values": ([str],), + "description": (str,), + "editable": (bool,), + "facet_type": (str,), + "groups": ([str],), + "name": (str,), + "path": (str,), + "source": (str,), + "type": (str,), + "values": ([str],), + } + attribute_map = { + "bounded": "bounded", + "bundled": "bundled", + "bundled_and_used": "bundledAndUsed", + "default_values": "defaultValues", + "description": "description", + "editable": "editable", + "facet_type": "facetType", + "groups": "groups", + "name": "name", + "path": "path", + "source": "source", + "type": "type", + "values": "values", + } + + def __init__(self_, bounded: bool, bundled: bool, bundled_and_used: bool, default_values: List[str], description: str, editable: bool, facet_type: str, groups: List[str], name: str, path: str, source: str, type: str, values: List[str], **kwargs): + """ + Attributes of an agentless host facet. + + :param bounded: Whether the facet has a bounded set of allowed values. ``true`` indicates a fixed value set and ``false`` indicates free-form values. + :type bounded: bool + + :param bundled: Whether the facet is bundled as part of the default facet set. ``true`` indicates bundled and ``false`` indicates custom. + :type bundled: bool + + :param bundled_and_used: Whether the facet is both bundled and actively used. ``true`` indicates in use; ``false`` indicates unused. + :type bundled_and_used: bool + + :param default_values: The list of default filter values for the facet. + :type default_values: [str] + + :param description: A human-readable description of what the facet represents. + :type description: str + + :param editable: Whether the facet can be edited by users. ``true`` indicates editable; ``false`` indicates read-only. + :type editable: bool + + :param facet_type: The UI display type for the facet, such as ``list``. + :type facet_type: str + + :param groups: The list of UI groups that this facet belongs to. + :type groups: [str] + + :param name: The display name of the facet. + :type name: str + + :param path: The field path used when filtering by this facet. + :type path: str + + :param source: The data source that provides the facet values. + :type source: str + + :param type: The data type of the facet values. + :type type: str + + :param values: The list of allowed filter values for bounded facets. Empty for unbounded facets. + :type values: [str] + """ + super().__init__(kwargs) + + + self_.bounded = bounded + self_.bundled = bundled + self_.bundled_and_used = bundled_and_used + self_.default_values = default_values + self_.description = description + self_.editable = editable + self_.facet_type = facet_type + self_.groups = groups + self_.name = name + self_.path = path + self_.source = source + self_.type = type + self_.values = values diff --git a/datadog_api_client/v2/model/csm_agentless_host_facet_data.py b/datadog_api_client/v2/model/csm_agentless_host_facet_data.py new file mode 100644 index 0000000000..1a483985ba --- /dev/null +++ b/datadog_api_client/v2/model/csm_agentless_host_facet_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_agentless_host_facet_attributes import CsmAgentlessHostFacetAttributes + from datadog_api_client.v2.model.csm_agentless_host_facet_type import CsmAgentlessHostFacetType + +class CsmAgentlessHostFacetData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_agentless_host_facet_attributes import CsmAgentlessHostFacetAttributes + from datadog_api_client.v2.model.csm_agentless_host_facet_type import CsmAgentlessHostFacetType + return { + "attributes": (CsmAgentlessHostFacetAttributes,), + "id": (str,), + "type": (CsmAgentlessHostFacetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CsmAgentlessHostFacetAttributes, id: str, type: CsmAgentlessHostFacetType, **kwargs): + """ + A single agentless host facet resource. + + :param attributes: Attributes of an agentless host facet. + :type attributes: CsmAgentlessHostFacetAttributes + + :param id: The identifier of the facet, corresponding to the field path. + :type id: str + + :param type: The JSON:API type for agentless host facet resources. The value should always be ``agentless_host_facet``. + :type type: CsmAgentlessHostFacetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/csm_agentless_host_facet_type.py b/datadog_api_client/v2/model/csm_agentless_host_facet_type.py new file mode 100644 index 0000000000..acd84e540c --- /dev/null +++ b/datadog_api_client/v2/model/csm_agentless_host_facet_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CsmAgentlessHostFacetType(ModelSimple): + """ + The JSON:API type for agentless host facet resources. The value should always be `agentless_host_facet`. + + :param value: If omitted defaults to "agentless_host_facet". Must be one of ["agentless_host_facet"]. + :type value: str + """ + + allowed_values = { + "agentless_host_facet", + } + AGENTLESS_HOST_FACET: ClassVar["CsmAgentlessHostFacetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CsmAgentlessHostFacetType.AGENTLESS_HOST_FACET = CsmAgentlessHostFacetType("agentless_host_facet") diff --git a/datadog_api_client/v2/model/csm_agentless_host_facets_response.py b/datadog_api_client/v2/model/csm_agentless_host_facets_response.py new file mode 100644 index 0000000000..269c313f76 --- /dev/null +++ b/datadog_api_client/v2/model/csm_agentless_host_facets_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_agentless_host_facet_data import CsmAgentlessHostFacetData + +class CsmAgentlessHostFacetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_agentless_host_facet_data import CsmAgentlessHostFacetData + return { + "data": ([CsmAgentlessHostFacetData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CsmAgentlessHostFacetData], **kwargs): + """ + The response returned when listing facets for agentless hosts. + + :param data: The list of available facets for agentless hosts. + :type data: [CsmAgentlessHostFacetData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/csm_agentless_host_resource_type.py b/datadog_api_client/v2/model/csm_agentless_host_resource_type.py new file mode 100644 index 0000000000..9ca61d223f --- /dev/null +++ b/datadog_api_client/v2/model/csm_agentless_host_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CsmAgentlessHostResourceType(ModelSimple): + """ + The type of cloud resource for an agentless host. + + :param value: Must be one of ["aws_ec2_instance", "azure_virtual_machine_instance", "gcp_compute_instance", "oci_instance"]. + :type value: str + """ + + allowed_values = { + "aws_ec2_instance", + "azure_virtual_machine_instance", + "gcp_compute_instance", + "oci_instance", + } + AWS_EC2_INSTANCE: ClassVar["CsmAgentlessHostResourceType"] + AZURE_VIRTUAL_MACHINE_INSTANCE: ClassVar["CsmAgentlessHostResourceType"] + GCP_COMPUTE_INSTANCE: ClassVar["CsmAgentlessHostResourceType"] + OCI_INSTANCE: ClassVar["CsmAgentlessHostResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CsmAgentlessHostResourceType.AWS_EC2_INSTANCE = CsmAgentlessHostResourceType("aws_ec2_instance") +CsmAgentlessHostResourceType.AZURE_VIRTUAL_MACHINE_INSTANCE = CsmAgentlessHostResourceType("azure_virtual_machine_instance") +CsmAgentlessHostResourceType.GCP_COMPUTE_INSTANCE = CsmAgentlessHostResourceType("gcp_compute_instance") +CsmAgentlessHostResourceType.OCI_INSTANCE = CsmAgentlessHostResourceType("oci_instance") diff --git a/datadog_api_client/v2/model/csm_agentless_host_type.py b/datadog_api_client/v2/model/csm_agentless_host_type.py new file mode 100644 index 0000000000..8254a21614 --- /dev/null +++ b/datadog_api_client/v2/model/csm_agentless_host_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CsmAgentlessHostType(ModelSimple): + """ + The JSON:API type for agentless host resources. The value should always be `agentless_host`. + + :param value: If omitted defaults to "agentless_host". Must be one of ["agentless_host"]. + :type value: str + """ + + allowed_values = { + "agentless_host", + } + AGENTLESS_HOST: ClassVar["CsmAgentlessHostType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CsmAgentlessHostType.AGENTLESS_HOST = CsmAgentlessHostType("agentless_host") diff --git a/datadog_api_client/v2/model/csm_agentless_hosts_response.py b/datadog_api_client/v2/model/csm_agentless_hosts_response.py new file mode 100644 index 0000000000..1ed0e45e69 --- /dev/null +++ b/datadog_api_client/v2/model/csm_agentless_hosts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_agentless_host_data import CsmAgentlessHostData + from datadog_api_client.v2.model.csm_settings_meta import CsmSettingsMeta + +class CsmAgentlessHostsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_agentless_host_data import CsmAgentlessHostData + from datadog_api_client.v2.model.csm_settings_meta import CsmSettingsMeta + return { + "data": ([CsmAgentlessHostData],), + "meta": (CsmSettingsMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[CsmAgentlessHostData], meta: CsmSettingsMeta, **kwargs): + """ + The response returned when listing agentless hosts. + + :param data: The list of agentless hosts for the current page. + :type data: [CsmAgentlessHostData] + + :param meta: Pagination metadata for a CSM settings list response. + :type meta: CsmSettingsMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/csm_agents_attributes.py b/datadog_api_client/v2/model/csm_agents_attributes.py new file mode 100644 index 0000000000..e76ff74bba --- /dev/null +++ b/datadog_api_client/v2/model/csm_agents_attributes.py @@ -0,0 +1,158 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CsmAgentsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "agent_version": (str,), + "aws_fargate": (str,), + "cluster_name": ([str],), + "datadog_agent": (str,), + "ecs_fargate_task_arn": (str,), + "envs": ([str], none_type), + "host_id": (int,), + "hostname": (str,), + "install_method_installer_version": (str,), + "install_method_tool": (str,), + "is_csm_vm_containers_enabled": (bool, none_type), + "is_csm_vm_hosts_enabled": (bool, none_type), + "is_cspm_enabled": (bool, none_type), + "is_cws_enabled": (bool, none_type), + "is_cws_remote_configuration_enabled": (bool, none_type), + "is_remote_configuration_enabled": (bool, none_type), + "os": (str,), + } + attribute_map = { + "agent_version": "agent_version", + "aws_fargate": "aws_fargate", + "cluster_name": "cluster_name", + "datadog_agent": "datadog_agent", + "ecs_fargate_task_arn": "ecs_fargate_task_arn", + "envs": "envs", + "host_id": "host_id", + "hostname": "hostname", + "install_method_installer_version": "install_method_installer_version", + "install_method_tool": "install_method_tool", + "is_csm_vm_containers_enabled": "is_csm_vm_containers_enabled", + "is_csm_vm_hosts_enabled": "is_csm_vm_hosts_enabled", + "is_cspm_enabled": "is_cspm_enabled", + "is_cws_enabled": "is_cws_enabled", + "is_cws_remote_configuration_enabled": "is_cws_remote_configuration_enabled", + "is_remote_configuration_enabled": "is_remote_configuration_enabled", + "os": "os", + } + + def __init__(self_, agent_version: Union[str, UnsetType]=unset, aws_fargate: Union[str, UnsetType]=unset, cluster_name: Union[List[str], UnsetType]=unset, datadog_agent: Union[str, UnsetType]=unset, ecs_fargate_task_arn: Union[str, UnsetType]=unset, envs: Union[List[str], none_type, UnsetType]=unset, host_id: Union[int, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, install_method_installer_version: Union[str, UnsetType]=unset, install_method_tool: Union[str, UnsetType]=unset, is_csm_vm_containers_enabled: Union[bool, none_type, UnsetType]=unset, is_csm_vm_hosts_enabled: Union[bool, none_type, UnsetType]=unset, is_cspm_enabled: Union[bool, none_type, UnsetType]=unset, is_cws_enabled: Union[bool, none_type, UnsetType]=unset, is_cws_remote_configuration_enabled: Union[bool, none_type, UnsetType]=unset, is_remote_configuration_enabled: Union[bool, none_type, UnsetType]=unset, os: Union[str, UnsetType]=unset, **kwargs): + """ + A CSM Agent returned by the API. + + :param agent_version: Version of the Datadog Agent. + :type agent_version: str, optional + + :param aws_fargate: AWS Fargate details. + :type aws_fargate: str, optional + + :param cluster_name: List of cluster names associated with the Agent. + :type cluster_name: [str], optional + + :param datadog_agent: Unique identifier for the Datadog Agent. + :type datadog_agent: str, optional + + :param ecs_fargate_task_arn: ARN of the ECS Fargate task. + :type ecs_fargate_task_arn: str, optional + + :param envs: List of environments associated with the Agent. + :type envs: [str], none_type, optional + + :param host_id: ID of the host. + :type host_id: int, optional + + :param hostname: Name of the host. + :type hostname: str, optional + + :param install_method_installer_version: Version of the installer used for installing the Datadog Agent. + :type install_method_installer_version: str, optional + + :param install_method_tool: Tool used for installing the Datadog Agent. + :type install_method_tool: str, optional + + :param is_csm_vm_containers_enabled: Indicates if CSM VM Containers is enabled. + :type is_csm_vm_containers_enabled: bool, none_type, optional + + :param is_csm_vm_hosts_enabled: Indicates if CSM VM Hosts is enabled. + :type is_csm_vm_hosts_enabled: bool, none_type, optional + + :param is_cspm_enabled: Indicates if CSPM is enabled. + :type is_cspm_enabled: bool, none_type, optional + + :param is_cws_enabled: Indicates if CWS is enabled. + :type is_cws_enabled: bool, none_type, optional + + :param is_cws_remote_configuration_enabled: Indicates if CWS Remote Configuration is enabled. + :type is_cws_remote_configuration_enabled: bool, none_type, optional + + :param is_remote_configuration_enabled: Indicates if Remote Configuration is enabled. + :type is_remote_configuration_enabled: bool, none_type, optional + + :param os: Operating system of the host. + :type os: str, optional + """ + if agent_version is not unset: + kwargs["agent_version"] = agent_version + if aws_fargate is not unset: + kwargs["aws_fargate"] = aws_fargate + if cluster_name is not unset: + kwargs["cluster_name"] = cluster_name + if datadog_agent is not unset: + kwargs["datadog_agent"] = datadog_agent + if ecs_fargate_task_arn is not unset: + kwargs["ecs_fargate_task_arn"] = ecs_fargate_task_arn + if envs is not unset: + kwargs["envs"] = envs + if host_id is not unset: + kwargs["host_id"] = host_id + if hostname is not unset: + kwargs["hostname"] = hostname + if install_method_installer_version is not unset: + kwargs["install_method_installer_version"] = install_method_installer_version + if install_method_tool is not unset: + kwargs["install_method_tool"] = install_method_tool + if is_csm_vm_containers_enabled is not unset: + kwargs["is_csm_vm_containers_enabled"] = is_csm_vm_containers_enabled + if is_csm_vm_hosts_enabled is not unset: + kwargs["is_csm_vm_hosts_enabled"] = is_csm_vm_hosts_enabled + if is_cspm_enabled is not unset: + kwargs["is_cspm_enabled"] = is_cspm_enabled + if is_cws_enabled is not unset: + kwargs["is_cws_enabled"] = is_cws_enabled + if is_cws_remote_configuration_enabled is not unset: + kwargs["is_cws_remote_configuration_enabled"] = is_cws_remote_configuration_enabled + if is_remote_configuration_enabled is not unset: + kwargs["is_remote_configuration_enabled"] = is_remote_configuration_enabled + if os is not unset: + kwargs["os"] = os + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_agents_metadata.py b/datadog_api_client/v2/model/csm_agents_metadata.py new file mode 100644 index 0000000000..14d9431965 --- /dev/null +++ b/datadog_api_client/v2/model/csm_agents_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CSMAgentsMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "page_index": (int,), + "page_size": (int,), + "total_filtered": (int,), + } + attribute_map = { + "page_index": "page_index", + "page_size": "page_size", + "total_filtered": "total_filtered", + } + + def __init__(self_, page_index: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, total_filtered: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata related to the paginated response. + + :param page_index: The index of the current page in the paginated results. + :type page_index: int, optional + + :param page_size: The number of items per page in the paginated results. + :type page_size: int, optional + + :param total_filtered: Total number of items that match the filter criteria. + :type total_filtered: int, optional + """ + if page_index is not unset: + kwargs["page_index"] = page_index + if page_size is not unset: + kwargs["page_size"] = page_size + if total_filtered is not unset: + kwargs["total_filtered"] = total_filtered + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_agents_response.py b/datadog_api_client/v2/model/csm_agents_response.py new file mode 100644 index 0000000000..02acf172c7 --- /dev/null +++ b/datadog_api_client/v2/model/csm_agents_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_agent_data import CsmAgentData + from datadog_api_client.v2.model.csm_agents_metadata import CSMAgentsMetadata + +class CsmAgentsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_agent_data import CsmAgentData + from datadog_api_client.v2.model.csm_agents_metadata import CSMAgentsMetadata + return { + "data": ([CsmAgentData],), + "meta": (CSMAgentsMetadata,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[CsmAgentData], UnsetType]=unset, meta: Union[CSMAgentsMetadata, UnsetType]=unset, **kwargs): + """ + Response object that includes a list of CSM Agents. + + :param data: A list of Agents. + :type data: [CsmAgentData], optional + + :param meta: Metadata related to the paginated response. + :type meta: CSMAgentsMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_agents_type.py b/datadog_api_client/v2/model/csm_agents_type.py new file mode 100644 index 0000000000..82eed6ce69 --- /dev/null +++ b/datadog_api_client/v2/model/csm_agents_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CSMAgentsType(ModelSimple): + """ + The type of the resource. The value should always be `datadog_agent`. + + :param value: If omitted defaults to "datadog_agent". Must be one of ["datadog_agent"]. + :type value: str + """ + + allowed_values = { + "datadog_agent", + } + DATADOG_AGENT: ClassVar["CSMAgentsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CSMAgentsType.DATADOG_AGENT = CSMAgentsType("datadog_agent") diff --git a/datadog_api_client/v2/model/csm_cloud_accounts_coverage_analysis_attributes.py b/datadog_api_client/v2/model/csm_cloud_accounts_coverage_analysis_attributes.py new file mode 100644 index 0000000000..066fbbcc21 --- /dev/null +++ b/datadog_api_client/v2/model/csm_cloud_accounts_coverage_analysis_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_coverage_analysis import CsmCoverageAnalysis + +class CsmCloudAccountsCoverageAnalysisAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_coverage_analysis import CsmCoverageAnalysis + return { + "aws_coverage": (CsmCoverageAnalysis,), + "azure_coverage": (CsmCoverageAnalysis,), + "gcp_coverage": (CsmCoverageAnalysis,), + "org_id": (int,), + "total_coverage": (CsmCoverageAnalysis,), + } + attribute_map = { + "aws_coverage": "aws_coverage", + "azure_coverage": "azure_coverage", + "gcp_coverage": "gcp_coverage", + "org_id": "org_id", + "total_coverage": "total_coverage", + } + + def __init__(self_, aws_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, azure_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, gcp_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, total_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, **kwargs): + """ + CSM Cloud Accounts Coverage Analysis attributes. + + :param aws_coverage: CSM Coverage Analysis. + :type aws_coverage: CsmCoverageAnalysis, optional + + :param azure_coverage: CSM Coverage Analysis. + :type azure_coverage: CsmCoverageAnalysis, optional + + :param gcp_coverage: CSM Coverage Analysis. + :type gcp_coverage: CsmCoverageAnalysis, optional + + :param org_id: The ID of your organization. + :type org_id: int, optional + + :param total_coverage: CSM Coverage Analysis. + :type total_coverage: CsmCoverageAnalysis, optional + """ + if aws_coverage is not unset: + kwargs["aws_coverage"] = aws_coverage + if azure_coverage is not unset: + kwargs["azure_coverage"] = azure_coverage + if gcp_coverage is not unset: + kwargs["gcp_coverage"] = gcp_coverage + if org_id is not unset: + kwargs["org_id"] = org_id + if total_coverage is not unset: + kwargs["total_coverage"] = total_coverage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_cloud_accounts_coverage_analysis_data.py b/datadog_api_client/v2/model/csm_cloud_accounts_coverage_analysis_data.py new file mode 100644 index 0000000000..45050b39b7 --- /dev/null +++ b/datadog_api_client/v2/model/csm_cloud_accounts_coverage_analysis_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_cloud_accounts_coverage_analysis_attributes import CsmCloudAccountsCoverageAnalysisAttributes + +class CsmCloudAccountsCoverageAnalysisData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_cloud_accounts_coverage_analysis_attributes import CsmCloudAccountsCoverageAnalysisAttributes + return { + "attributes": (CsmCloudAccountsCoverageAnalysisAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CsmCloudAccountsCoverageAnalysisAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + CSM Cloud Accounts Coverage Analysis data. + + :param attributes: CSM Cloud Accounts Coverage Analysis attributes. + :type attributes: CsmCloudAccountsCoverageAnalysisAttributes, optional + + :param id: The ID of your organization. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``get_cloud_accounts_coverage_analysis_response_public_v0``. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_cloud_accounts_coverage_analysis_response.py b/datadog_api_client/v2/model/csm_cloud_accounts_coverage_analysis_response.py new file mode 100644 index 0000000000..aa38bebd7f --- /dev/null +++ b/datadog_api_client/v2/model/csm_cloud_accounts_coverage_analysis_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_cloud_accounts_coverage_analysis_data import CsmCloudAccountsCoverageAnalysisData + +class CsmCloudAccountsCoverageAnalysisResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_cloud_accounts_coverage_analysis_data import CsmCloudAccountsCoverageAnalysisData + return { + "data": (CsmCloudAccountsCoverageAnalysisData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CsmCloudAccountsCoverageAnalysisData, UnsetType]=unset, **kwargs): + """ + CSM Cloud Accounts Coverage Analysis response. + + :param data: CSM Cloud Accounts Coverage Analysis data. + :type data: CsmCloudAccountsCoverageAnalysisData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_cloud_provider.py b/datadog_api_client/v2/model/csm_cloud_provider.py new file mode 100644 index 0000000000..8cc7a70cc6 --- /dev/null +++ b/datadog_api_client/v2/model/csm_cloud_provider.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CsmCloudProvider(ModelSimple): + """ + The cloud provider of a host resource. + + :param value: Must be one of ["aws", "gcp", "azure", "oci"]. + :type value: str + """ + + allowed_values = { + "aws", + "gcp", + "azure", + "oci", + } + AWS: ClassVar["CsmCloudProvider"] + GCP: ClassVar["CsmCloudProvider"] + AZURE: ClassVar["CsmCloudProvider"] + OCI: ClassVar["CsmCloudProvider"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CsmCloudProvider.AWS = CsmCloudProvider("aws") +CsmCloudProvider.GCP = CsmCloudProvider("gcp") +CsmCloudProvider.AZURE = CsmCloudProvider("azure") +CsmCloudProvider.OCI = CsmCloudProvider("oci") diff --git a/datadog_api_client/v2/model/csm_coverage_analysis.py b/datadog_api_client/v2/model/csm_coverage_analysis.py new file mode 100644 index 0000000000..e40494c0d9 --- /dev/null +++ b/datadog_api_client/v2/model/csm_coverage_analysis.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CsmCoverageAnalysis(ModelNormal): + @cached_property + def openapi_types(_): + return { + "configured_resources_count": (int,), + "coverage": (float,), + "partially_configured_resources_count": (int,), + "total_resources_count": (int,), + } + attribute_map = { + "configured_resources_count": "configured_resources_count", + "coverage": "coverage", + "partially_configured_resources_count": "partially_configured_resources_count", + "total_resources_count": "total_resources_count", + } + + def __init__(self_, configured_resources_count: Union[int, UnsetType]=unset, coverage: Union[float, UnsetType]=unset, partially_configured_resources_count: Union[int, UnsetType]=unset, total_resources_count: Union[int, UnsetType]=unset, **kwargs): + """ + CSM Coverage Analysis. + + :param configured_resources_count: The number of fully configured resources. + :type configured_resources_count: int, optional + + :param coverage: The coverage percentage. + :type coverage: float, optional + + :param partially_configured_resources_count: The number of partially configured resources. + :type partially_configured_resources_count: int, optional + + :param total_resources_count: The total number of resources. + :type total_resources_count: int, optional + """ + if configured_resources_count is not unset: + kwargs["configured_resources_count"] = configured_resources_count + if coverage is not unset: + kwargs["coverage"] = coverage + if partially_configured_resources_count is not unset: + kwargs["partially_configured_resources_count"] = partially_configured_resources_count + if total_resources_count is not unset: + kwargs["total_resources_count"] = total_resources_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_facet_info_type.py b/datadog_api_client/v2/model/csm_facet_info_type.py new file mode 100644 index 0000000000..4d831f5edc --- /dev/null +++ b/datadog_api_client/v2/model/csm_facet_info_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CsmFacetInfoType(ModelSimple): + """ + The JSON:API type for facet info resources. The value should always be `facet_info`. + + :param value: If omitted defaults to "facet_info". Must be one of ["facet_info"]. + :type value: str + """ + + allowed_values = { + "facet_info", + } + FACET_INFO: ClassVar["CsmFacetInfoType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CsmFacetInfoType.FACET_INFO = CsmFacetInfoType("facet_info") diff --git a/datadog_api_client/v2/model/csm_host_facet_info_attributes.py b/datadog_api_client/v2/model/csm_host_facet_info_attributes.py new file mode 100644 index 0000000000..d595837cbc --- /dev/null +++ b/datadog_api_client/v2/model/csm_host_facet_info_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_host_facet_info_item import CsmHostFacetInfoItem + +class CsmHostFacetInfoAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_host_facet_info_item import CsmHostFacetInfoItem + return { + "items": ([CsmHostFacetInfoItem],), + } + attribute_map = { + "items": "items", + } + + def __init__(self_, items: List[CsmHostFacetInfoItem], **kwargs): + """ + Attributes of a facet info response, containing the value distribution for the requested facet. + + :param items: The list of facet value entries for the current page. + :type items: [CsmHostFacetInfoItem] + """ + super().__init__(kwargs) + + + self_.items = items diff --git a/datadog_api_client/v2/model/csm_host_facet_info_data.py b/datadog_api_client/v2/model/csm_host_facet_info_data.py new file mode 100644 index 0000000000..87dc4ab381 --- /dev/null +++ b/datadog_api_client/v2/model/csm_host_facet_info_data.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_host_facet_info_attributes import CsmHostFacetInfoAttributes + from datadog_api_client.v2.model.csm_host_facet_info_meta import CsmHostFacetInfoMeta + from datadog_api_client.v2.model.csm_facet_info_type import CsmFacetInfoType + +class CsmHostFacetInfoData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_host_facet_info_attributes import CsmHostFacetInfoAttributes + from datadog_api_client.v2.model.csm_host_facet_info_meta import CsmHostFacetInfoMeta + from datadog_api_client.v2.model.csm_facet_info_type import CsmFacetInfoType + return { + "attributes": (CsmHostFacetInfoAttributes,), + "id": (str,), + "meta": (CsmHostFacetInfoMeta,), + "type": (CsmFacetInfoType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "type": "type", + } + + def __init__(self_, attributes: CsmHostFacetInfoAttributes, id: str, meta: CsmHostFacetInfoMeta, type: CsmFacetInfoType, **kwargs): + """ + The data wrapper for a facet info response. + + :param attributes: Attributes of a facet info response, containing the value distribution for the requested facet. + :type attributes: CsmHostFacetInfoAttributes + + :param id: The identifier of the facet. + :type id: str + + :param meta: Metadata for the facet info response. + :type meta: CsmHostFacetInfoMeta + + :param type: The JSON:API type for facet info resources. The value should always be ``facet_info``. + :type type: CsmFacetInfoType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.meta = meta + self_.type = type diff --git a/datadog_api_client/v2/model/csm_host_facet_info_item.py b/datadog_api_client/v2/model/csm_host_facet_info_item.py new file mode 100644 index 0000000000..9e7de58777 --- /dev/null +++ b/datadog_api_client/v2/model/csm_host_facet_info_item.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CsmHostFacetInfoItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "value": (str,), + } + attribute_map = { + "count": "count", + "value": "value", + } + + def __init__(self_, count: int, value: str, **kwargs): + """ + A single value and its occurrence count for a facet. + + :param count: The number of resources with this facet value. + :type count: int + + :param value: The facet value. + :type value: str + """ + super().__init__(kwargs) + + + self_.count = count + self_.value = value diff --git a/datadog_api_client/v2/model/csm_host_facet_info_meta.py b/datadog_api_client/v2/model/csm_host_facet_info_meta.py new file mode 100644 index 0000000000..24d26f7320 --- /dev/null +++ b/datadog_api_client/v2/model/csm_host_facet_info_meta.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CsmHostFacetInfoMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "total_count", + } + + def __init__(self_, total_count: int, **kwargs): + """ + Metadata for the facet info response. + + :param total_count: The total number of distinct values for this facet. + :type total_count: int + """ + super().__init__(kwargs) + + + self_.total_count = total_count diff --git a/datadog_api_client/v2/model/csm_host_facet_info_response.py b/datadog_api_client/v2/model/csm_host_facet_info_response.py new file mode 100644 index 0000000000..7f6e03ecce --- /dev/null +++ b/datadog_api_client/v2/model/csm_host_facet_info_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_host_facet_info_data import CsmHostFacetInfoData + +class CsmHostFacetInfoResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_host_facet_info_data import CsmHostFacetInfoData + return { + "data": (CsmHostFacetInfoData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CsmHostFacetInfoData, **kwargs): + """ + The response returned when requesting value distribution for a specific facet. + + :param data: The data wrapper for a facet info response. + :type data: CsmHostFacetInfoData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/csm_hosts_and_containers_coverage_analysis_attributes.py b/datadog_api_client/v2/model/csm_hosts_and_containers_coverage_analysis_attributes.py new file mode 100644 index 0000000000..1b3b7c6d81 --- /dev/null +++ b/datadog_api_client/v2/model/csm_hosts_and_containers_coverage_analysis_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_coverage_analysis import CsmCoverageAnalysis + +class CsmHostsAndContainersCoverageAnalysisAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_coverage_analysis import CsmCoverageAnalysis + return { + "cspm_coverage": (CsmCoverageAnalysis,), + "cws_coverage": (CsmCoverageAnalysis,), + "org_id": (int,), + "total_coverage": (CsmCoverageAnalysis,), + "vm_coverage": (CsmCoverageAnalysis,), + } + attribute_map = { + "cspm_coverage": "cspm_coverage", + "cws_coverage": "cws_coverage", + "org_id": "org_id", + "total_coverage": "total_coverage", + "vm_coverage": "vm_coverage", + } + + def __init__(self_, cspm_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, cws_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, total_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, vm_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, **kwargs): + """ + CSM Hosts and Containers Coverage Analysis attributes. + + :param cspm_coverage: CSM Coverage Analysis. + :type cspm_coverage: CsmCoverageAnalysis, optional + + :param cws_coverage: CSM Coverage Analysis. + :type cws_coverage: CsmCoverageAnalysis, optional + + :param org_id: The ID of your organization. + :type org_id: int, optional + + :param total_coverage: CSM Coverage Analysis. + :type total_coverage: CsmCoverageAnalysis, optional + + :param vm_coverage: CSM Coverage Analysis. + :type vm_coverage: CsmCoverageAnalysis, optional + """ + if cspm_coverage is not unset: + kwargs["cspm_coverage"] = cspm_coverage + if cws_coverage is not unset: + kwargs["cws_coverage"] = cws_coverage + if org_id is not unset: + kwargs["org_id"] = org_id + if total_coverage is not unset: + kwargs["total_coverage"] = total_coverage + if vm_coverage is not unset: + kwargs["vm_coverage"] = vm_coverage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_hosts_and_containers_coverage_analysis_data.py b/datadog_api_client/v2/model/csm_hosts_and_containers_coverage_analysis_data.py new file mode 100644 index 0000000000..652c18905a --- /dev/null +++ b/datadog_api_client/v2/model/csm_hosts_and_containers_coverage_analysis_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_hosts_and_containers_coverage_analysis_attributes import CsmHostsAndContainersCoverageAnalysisAttributes + +class CsmHostsAndContainersCoverageAnalysisData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_hosts_and_containers_coverage_analysis_attributes import CsmHostsAndContainersCoverageAnalysisAttributes + return { + "attributes": (CsmHostsAndContainersCoverageAnalysisAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CsmHostsAndContainersCoverageAnalysisAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + CSM Hosts and Containers Coverage Analysis data. + + :param attributes: CSM Hosts and Containers Coverage Analysis attributes. + :type attributes: CsmHostsAndContainersCoverageAnalysisAttributes, optional + + :param id: The ID of your organization. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``get_hosts_and_containers_coverage_analysis_response_public_v0``. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_hosts_and_containers_coverage_analysis_response.py b/datadog_api_client/v2/model/csm_hosts_and_containers_coverage_analysis_response.py new file mode 100644 index 0000000000..b9e114187e --- /dev/null +++ b/datadog_api_client/v2/model/csm_hosts_and_containers_coverage_analysis_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_hosts_and_containers_coverage_analysis_data import CsmHostsAndContainersCoverageAnalysisData + +class CsmHostsAndContainersCoverageAnalysisResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_hosts_and_containers_coverage_analysis_data import CsmHostsAndContainersCoverageAnalysisData + return { + "data": (CsmHostsAndContainersCoverageAnalysisData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CsmHostsAndContainersCoverageAnalysisData, UnsetType]=unset, **kwargs): + """ + CSM Hosts and Containers Coverage Analysis response. + + :param data: CSM Hosts and Containers Coverage Analysis data. + :type data: CsmHostsAndContainersCoverageAnalysisData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_serverless_coverage_analysis_attributes.py b/datadog_api_client/v2/model/csm_serverless_coverage_analysis_attributes.py new file mode 100644 index 0000000000..330287cf98 --- /dev/null +++ b/datadog_api_client/v2/model/csm_serverless_coverage_analysis_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_coverage_analysis import CsmCoverageAnalysis + +class CsmServerlessCoverageAnalysisAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_coverage_analysis import CsmCoverageAnalysis + return { + "cws_coverage": (CsmCoverageAnalysis,), + "org_id": (int,), + "total_coverage": (CsmCoverageAnalysis,), + } + attribute_map = { + "cws_coverage": "cws_coverage", + "org_id": "org_id", + "total_coverage": "total_coverage", + } + + def __init__(self_, cws_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, total_coverage: Union[CsmCoverageAnalysis, UnsetType]=unset, **kwargs): + """ + CSM Serverless Resources Coverage Analysis attributes. + + :param cws_coverage: CSM Coverage Analysis. + :type cws_coverage: CsmCoverageAnalysis, optional + + :param org_id: The ID of your organization. + :type org_id: int, optional + + :param total_coverage: CSM Coverage Analysis. + :type total_coverage: CsmCoverageAnalysis, optional + """ + if cws_coverage is not unset: + kwargs["cws_coverage"] = cws_coverage + if org_id is not unset: + kwargs["org_id"] = org_id + if total_coverage is not unset: + kwargs["total_coverage"] = total_coverage + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_serverless_coverage_analysis_data.py b/datadog_api_client/v2/model/csm_serverless_coverage_analysis_data.py new file mode 100644 index 0000000000..b8c06100c9 --- /dev/null +++ b/datadog_api_client/v2/model/csm_serverless_coverage_analysis_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_serverless_coverage_analysis_attributes import CsmServerlessCoverageAnalysisAttributes + +class CsmServerlessCoverageAnalysisData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_serverless_coverage_analysis_attributes import CsmServerlessCoverageAnalysisAttributes + return { + "attributes": (CsmServerlessCoverageAnalysisAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CsmServerlessCoverageAnalysisAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + CSM Serverless Resources Coverage Analysis data. + + :param attributes: CSM Serverless Resources Coverage Analysis attributes. + :type attributes: CsmServerlessCoverageAnalysisAttributes, optional + + :param id: The ID of your organization. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``get_serverless_coverage_analysis_response_public_v0``. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_serverless_coverage_analysis_response.py b/datadog_api_client/v2/model/csm_serverless_coverage_analysis_response.py new file mode 100644 index 0000000000..bb808427c3 --- /dev/null +++ b/datadog_api_client/v2/model/csm_serverless_coverage_analysis_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_serverless_coverage_analysis_data import CsmServerlessCoverageAnalysisData + +class CsmServerlessCoverageAnalysisResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_serverless_coverage_analysis_data import CsmServerlessCoverageAnalysisData + return { + "data": (CsmServerlessCoverageAnalysisData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CsmServerlessCoverageAnalysisData, UnsetType]=unset, **kwargs): + """ + CSM Serverless Resources Coverage Analysis response. + + :param data: CSM Serverless Resources Coverage Analysis data. + :type data: CsmServerlessCoverageAnalysisData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/csm_settings_meta.py b/datadog_api_client/v2/model/csm_settings_meta.py new file mode 100644 index 0000000000..0f31ed1142 --- /dev/null +++ b/datadog_api_client/v2/model/csm_settings_meta.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CsmSettingsMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "page_index": (int,), + "page_size": (int,), + "total_filtered": (int,), + } + attribute_map = { + "page_index": "page_index", + "page_size": "page_size", + "total_filtered": "total_filtered", + } + + def __init__(self_, page_index: int, page_size: int, total_filtered: int, **kwargs): + """ + Pagination metadata for a CSM settings list response. + + :param page_index: The current page index (zero-based). + :type page_index: int + + :param page_size: The number of resources returned per page. + :type page_size: int + + :param total_filtered: The total number of resources matching the filter criteria. + :type total_filtered: int + """ + super().__init__(kwargs) + + + self_.page_index = page_index + self_.page_size = page_size + self_.total_filtered = total_filtered diff --git a/datadog_api_client/v2/model/csm_unified_host_attributes.py b/datadog_api_client/v2/model/csm_unified_host_attributes.py new file mode 100644 index 0000000000..aac3c71cad --- /dev/null +++ b/datadog_api_client/v2/model/csm_unified_host_attributes.py @@ -0,0 +1,164 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_cloud_provider import CsmCloudProvider + from datadog_api_client.v2.model.csm_agentless_host_resource_type import CsmAgentlessHostResourceType + from datadog_api_client.v2.model.csm_unified_host_source import CsmUnifiedHostSource + +class CsmUnifiedHostAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_cloud_provider import CsmCloudProvider + from datadog_api_client.v2.model.csm_agentless_host_resource_type import CsmAgentlessHostResourceType + from datadog_api_client.v2.model.csm_unified_host_source import CsmUnifiedHostSource + return { + "account_id": (str, none_type), + "agent_csm_vm_containers_enabled": (bool, none_type), + "agent_csm_vm_hosts_enabled": (bool, none_type), + "agent_cws_enabled": (bool, none_type), + "agent_posture_management": (bool, none_type), + "agent_version": (str, none_type), + "agentless_posture_management": (bool, none_type), + "agentless_vulnerability_scanning": (bool, none_type), + "cloud_provider": (CsmCloudProvider,), + "cluster_name": (str, none_type), + "datadog_agent_key": (str, none_type), + "env": ([str], none_type), + "host_id": (int, none_type), + "install_method_tool": (str, none_type), + "os": (str, none_type), + "resource_type": (CsmAgentlessHostResourceType,), + "source": (CsmUnifiedHostSource,), + } + attribute_map = { + "account_id": "account_id", + "agent_csm_vm_containers_enabled": "agent_csm_vm_containers_enabled", + "agent_csm_vm_hosts_enabled": "agent_csm_vm_hosts_enabled", + "agent_cws_enabled": "agent_cws_enabled", + "agent_posture_management": "agent_posture_management", + "agent_version": "agent_version", + "agentless_posture_management": "agentless_posture_management", + "agentless_vulnerability_scanning": "agentless_vulnerability_scanning", + "cloud_provider": "cloud_provider", + "cluster_name": "cluster_name", + "datadog_agent_key": "datadog_agent_key", + "env": "env", + "host_id": "host_id", + "install_method_tool": "install_method_tool", + "os": "os", + "resource_type": "resource_type", + "source": "source", + } + + def __init__(self_, source: CsmUnifiedHostSource, account_id: Union[str, none_type, UnsetType]=unset, agent_csm_vm_containers_enabled: Union[bool, none_type, UnsetType]=unset, agent_csm_vm_hosts_enabled: Union[bool, none_type, UnsetType]=unset, agent_cws_enabled: Union[bool, none_type, UnsetType]=unset, agent_posture_management: Union[bool, none_type, UnsetType]=unset, agent_version: Union[str, none_type, UnsetType]=unset, agentless_posture_management: Union[bool, none_type, UnsetType]=unset, agentless_vulnerability_scanning: Union[bool, none_type, UnsetType]=unset, cloud_provider: Union[CsmCloudProvider, UnsetType]=unset, cluster_name: Union[str, none_type, UnsetType]=unset, datadog_agent_key: Union[str, none_type, UnsetType]=unset, env: Union[List[str], none_type, UnsetType]=unset, host_id: Union[int, none_type, UnsetType]=unset, install_method_tool: Union[str, none_type, UnsetType]=unset, os: Union[str, none_type, UnsetType]=unset, resource_type: Union[CsmAgentlessHostResourceType, UnsetType]=unset, **kwargs): + """ + Attributes of a unified host, combining data from agent and agentless sources. + + :param account_id: The ID of the cloud account that the host belongs to. Present only when the host was discovered through agentless scanning. + :type account_id: str, none_type, optional + + :param agent_csm_vm_containers_enabled: Whether CSM Vulnerabilities is enabled for containers through the Datadog Agent. ``true`` if enabled; ``false`` if disabled. + :type agent_csm_vm_containers_enabled: bool, none_type, optional + + :param agent_csm_vm_hosts_enabled: Whether CSM Vulnerabilities is enabled for hosts through the Datadog Agent. ``true`` if enabled; ``false`` if disabled. + :type agent_csm_vm_hosts_enabled: bool, none_type, optional + + :param agent_cws_enabled: Whether CSM Threats is enabled for this host through the Datadog Agent. ``true`` if enabled; ``false`` if disabled. + :type agent_cws_enabled: bool, none_type, optional + + :param agent_posture_management: Whether CSM Misconfigurations is enabled for this host through the Datadog Agent. ``true`` if enabled; ``false`` if disabled. + :type agent_posture_management: bool, none_type, optional + + :param agent_version: The version of the Datadog Agent running on this host. + :type agent_version: str, none_type, optional + + :param agentless_posture_management: Whether CSM Misconfigurations is enabled for this host via agentless scanning. ``true`` if enabled; ``false`` if disabled. + :type agentless_posture_management: bool, none_type, optional + + :param agentless_vulnerability_scanning: Whether CSM Vulnerabilities is enabled for this host via agentless scanning. ``true`` if enabled; ``false`` if disabled. + :type agentless_vulnerability_scanning: bool, none_type, optional + + :param cloud_provider: The cloud provider of a host resource. + :type cloud_provider: CsmCloudProvider, optional + + :param cluster_name: The name of the Kubernetes cluster the host belongs to, if applicable. + :type cluster_name: str, none_type, optional + + :param datadog_agent_key: The Datadog Agent key associated with this host. Present only for agent-sourced hosts. + :type datadog_agent_key: str, none_type, optional + + :param env: The list of environment tags associated with this host. + :type env: [str], none_type, optional + + :param host_id: The internal Datadog host identifier. Present only for agent-sourced hosts. + :type host_id: int, none_type, optional + + :param install_method_tool: The tool used to install the Datadog Agent on this host. + :type install_method_tool: str, none_type, optional + + :param os: The operating system of the host. Present only for agent-sourced hosts. + :type os: str, none_type, optional + + :param resource_type: The type of cloud resource for an agentless host. + :type resource_type: CsmAgentlessHostResourceType, optional + + :param source: The source of a unified host entry, indicating whether it was discovered via agent, agentless scanning, or both. + :type source: CsmUnifiedHostSource + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if agent_csm_vm_containers_enabled is not unset: + kwargs["agent_csm_vm_containers_enabled"] = agent_csm_vm_containers_enabled + if agent_csm_vm_hosts_enabled is not unset: + kwargs["agent_csm_vm_hosts_enabled"] = agent_csm_vm_hosts_enabled + if agent_cws_enabled is not unset: + kwargs["agent_cws_enabled"] = agent_cws_enabled + if agent_posture_management is not unset: + kwargs["agent_posture_management"] = agent_posture_management + if agent_version is not unset: + kwargs["agent_version"] = agent_version + if agentless_posture_management is not unset: + kwargs["agentless_posture_management"] = agentless_posture_management + if agentless_vulnerability_scanning is not unset: + kwargs["agentless_vulnerability_scanning"] = agentless_vulnerability_scanning + if cloud_provider is not unset: + kwargs["cloud_provider"] = cloud_provider + if cluster_name is not unset: + kwargs["cluster_name"] = cluster_name + if datadog_agent_key is not unset: + kwargs["datadog_agent_key"] = datadog_agent_key + if env is not unset: + kwargs["env"] = env + if host_id is not unset: + kwargs["host_id"] = host_id + if install_method_tool is not unset: + kwargs["install_method_tool"] = install_method_tool + if os is not unset: + kwargs["os"] = os + if resource_type is not unset: + kwargs["resource_type"] = resource_type + super().__init__(kwargs) + + + self_.source = source diff --git a/datadog_api_client/v2/model/csm_unified_host_data.py b/datadog_api_client/v2/model/csm_unified_host_data.py new file mode 100644 index 0000000000..9c6569d53d --- /dev/null +++ b/datadog_api_client/v2/model/csm_unified_host_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_unified_host_attributes import CsmUnifiedHostAttributes + from datadog_api_client.v2.model.csm_unified_host_type import CsmUnifiedHostType + +class CsmUnifiedHostData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_unified_host_attributes import CsmUnifiedHostAttributes + from datadog_api_client.v2.model.csm_unified_host_type import CsmUnifiedHostType + return { + "attributes": (CsmUnifiedHostAttributes,), + "id": (str,), + "type": (CsmUnifiedHostType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CsmUnifiedHostAttributes, id: str, type: CsmUnifiedHostType, **kwargs): + """ + A single unified host resource, combining agent and agentless data. + + :param attributes: Attributes of a unified host, combining data from agent and agentless sources. + :type attributes: CsmUnifiedHostAttributes + + :param id: The resource identifier of the unified host. + :type id: str + + :param type: The JSON:API type for unified host resources. The value should always be ``unified_host``. + :type type: CsmUnifiedHostType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/csm_unified_host_facet_data.py b/datadog_api_client/v2/model/csm_unified_host_facet_data.py new file mode 100644 index 0000000000..d4e858ac7f --- /dev/null +++ b/datadog_api_client/v2/model/csm_unified_host_facet_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_agentless_host_facet_attributes import CsmAgentlessHostFacetAttributes + from datadog_api_client.v2.model.csm_unified_host_facet_type import CsmUnifiedHostFacetType + +class CsmUnifiedHostFacetData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_agentless_host_facet_attributes import CsmAgentlessHostFacetAttributes + from datadog_api_client.v2.model.csm_unified_host_facet_type import CsmUnifiedHostFacetType + return { + "attributes": (CsmAgentlessHostFacetAttributes,), + "id": (str,), + "type": (CsmUnifiedHostFacetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CsmAgentlessHostFacetAttributes, id: str, type: CsmUnifiedHostFacetType, **kwargs): + """ + A single unified host facet resource. + + :param attributes: Attributes of an agentless host facet. + :type attributes: CsmAgentlessHostFacetAttributes + + :param id: The identifier of the facet, corresponding to the field path. + :type id: str + + :param type: The JSON:API type for unified host facet resources. The value should always be ``unified_host_facet``. + :type type: CsmUnifiedHostFacetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/csm_unified_host_facet_type.py b/datadog_api_client/v2/model/csm_unified_host_facet_type.py new file mode 100644 index 0000000000..b952e88352 --- /dev/null +++ b/datadog_api_client/v2/model/csm_unified_host_facet_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CsmUnifiedHostFacetType(ModelSimple): + """ + The JSON:API type for unified host facet resources. The value should always be `unified_host_facet`. + + :param value: If omitted defaults to "unified_host_facet". Must be one of ["unified_host_facet"]. + :type value: str + """ + + allowed_values = { + "unified_host_facet", + } + UNIFIED_HOST_FACET: ClassVar["CsmUnifiedHostFacetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CsmUnifiedHostFacetType.UNIFIED_HOST_FACET = CsmUnifiedHostFacetType("unified_host_facet") diff --git a/datadog_api_client/v2/model/csm_unified_host_facets_response.py b/datadog_api_client/v2/model/csm_unified_host_facets_response.py new file mode 100644 index 0000000000..660347eabc --- /dev/null +++ b/datadog_api_client/v2/model/csm_unified_host_facets_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_unified_host_facet_data import CsmUnifiedHostFacetData + +class CsmUnifiedHostFacetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_unified_host_facet_data import CsmUnifiedHostFacetData + return { + "data": ([CsmUnifiedHostFacetData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CsmUnifiedHostFacetData], **kwargs): + """ + The response returned when listing facets for unified hosts. + + :param data: The list of available facets for unified hosts. + :type data: [CsmUnifiedHostFacetData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/csm_unified_host_source.py b/datadog_api_client/v2/model/csm_unified_host_source.py new file mode 100644 index 0000000000..523f1ded4d --- /dev/null +++ b/datadog_api_client/v2/model/csm_unified_host_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CsmUnifiedHostSource(ModelSimple): + """ + The source of a unified host entry, indicating whether it was discovered via agent, agentless scanning, or both. + + :param value: Must be one of ["agent", "agentless", "both"]. + :type value: str + """ + + allowed_values = { + "agent", + "agentless", + "both", + } + AGENT: ClassVar["CsmUnifiedHostSource"] + AGENTLESS: ClassVar["CsmUnifiedHostSource"] + BOTH: ClassVar["CsmUnifiedHostSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CsmUnifiedHostSource.AGENT = CsmUnifiedHostSource("agent") +CsmUnifiedHostSource.AGENTLESS = CsmUnifiedHostSource("agentless") +CsmUnifiedHostSource.BOTH = CsmUnifiedHostSource("both") diff --git a/datadog_api_client/v2/model/csm_unified_host_type.py b/datadog_api_client/v2/model/csm_unified_host_type.py new file mode 100644 index 0000000000..95bcc10454 --- /dev/null +++ b/datadog_api_client/v2/model/csm_unified_host_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CsmUnifiedHostType(ModelSimple): + """ + The JSON:API type for unified host resources. The value should always be `unified_host`. + + :param value: If omitted defaults to "unified_host". Must be one of ["unified_host"]. + :type value: str + """ + + allowed_values = { + "unified_host", + } + UNIFIED_HOST: ClassVar["CsmUnifiedHostType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CsmUnifiedHostType.UNIFIED_HOST = CsmUnifiedHostType("unified_host") diff --git a/datadog_api_client/v2/model/csm_unified_hosts_meta.py b/datadog_api_client/v2/model/csm_unified_hosts_meta.py new file mode 100644 index 0000000000..38a8539f28 --- /dev/null +++ b/datadog_api_client/v2/model/csm_unified_hosts_meta.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CsmUnifiedHostsMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "page_index": (int,), + "page_size": (int,), + "total_filtered": (int,), + "total_pages": (int,), + } + attribute_map = { + "page_index": "page_index", + "page_size": "page_size", + "total_filtered": "total_filtered", + "total_pages": "total_pages", + } + + def __init__(self_, page_index: int, page_size: int, total_filtered: int, total_pages: int, **kwargs): + """ + Pagination metadata for a unified hosts list response. + + :param page_index: The current page index (zero-based). + :type page_index: int + + :param page_size: The number of hosts returned per page. + :type page_size: int + + :param total_filtered: The total number of hosts matching the filter criteria. + :type total_filtered: int + + :param total_pages: The total number of pages available. + :type total_pages: int + """ + super().__init__(kwargs) + + + self_.page_index = page_index + self_.page_size = page_size + self_.total_filtered = total_filtered + self_.total_pages = total_pages diff --git a/datadog_api_client/v2/model/csm_unified_hosts_response.py b/datadog_api_client/v2/model/csm_unified_hosts_response.py new file mode 100644 index 0000000000..ef66dc581c --- /dev/null +++ b/datadog_api_client/v2/model/csm_unified_hosts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.csm_unified_host_data import CsmUnifiedHostData + from datadog_api_client.v2.model.csm_unified_hosts_meta import CsmUnifiedHostsMeta + +class CsmUnifiedHostsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.csm_unified_host_data import CsmUnifiedHostData + from datadog_api_client.v2.model.csm_unified_hosts_meta import CsmUnifiedHostsMeta + return { + "data": ([CsmUnifiedHostData],), + "meta": (CsmUnifiedHostsMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[CsmUnifiedHostData], meta: CsmUnifiedHostsMeta, **kwargs): + """ + The response returned when listing unified hosts. + + :param data: The list of unified hosts for the current page. + :type data: [CsmUnifiedHostData] + + :param meta: Pagination metadata for a unified hosts list response. + :type meta: CsmUnifiedHostsMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/custom_attribute_config.py b/datadog_api_client/v2/model/custom_attribute_config.py new file mode 100644 index 0000000000..cee140e5a7 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_config_resource_attributes import CustomAttributeConfigResourceAttributes + from datadog_api_client.v2.model.custom_attribute_config_resource_type import CustomAttributeConfigResourceType + +class CustomAttributeConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_config_resource_attributes import CustomAttributeConfigResourceAttributes + from datadog_api_client.v2.model.custom_attribute_config_resource_type import CustomAttributeConfigResourceType + return { + "attributes": (CustomAttributeConfigResourceAttributes,), + "id": (str,), + "type": (CustomAttributeConfigResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CustomAttributeConfigResourceAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CustomAttributeConfigResourceType, UnsetType]=unset, **kwargs): + """ + A custom attribute configuration that defines an organization-specific metadata field on cases. Custom attributes are scoped to a case type and can hold text, URLs, numbers, or predefined select options. + + :param attributes: Attributes of a custom attribute configuration, defining an organization-specific metadata field that can be added to cases of a given type. + :type attributes: CustomAttributeConfigResourceAttributes, optional + + :param id: Custom attribute configs identifier + :type id: str, optional + + :param type: JSON:API resource type for custom attribute configurations. + :type type: CustomAttributeConfigResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_attribute_config_attributes_create.py b/datadog_api_client/v2/model/custom_attribute_config_attributes_create.py new file mode 100644 index 0000000000..576a3035c3 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config_attributes_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_type import CustomAttributeType + +class CustomAttributeConfigAttributesCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_type import CustomAttributeType + return { + "description": (str,), + "display_name": (str,), + "is_multi": (bool,), + "key": (str,), + "type": (CustomAttributeType,), + } + attribute_map = { + "description": "description", + "display_name": "display_name", + "is_multi": "is_multi", + "key": "key", + "type": "type", + } + + def __init__(self_, display_name: str, is_multi: bool, key: str, type: CustomAttributeType, description: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes required to create a custom attribute configuration. + + :param description: A description explaining the purpose and expected values for this custom attribute. + :type description: str, optional + + :param display_name: The human-readable label shown in the Case Management UI for this custom attribute. + :type display_name: str + + :param is_multi: If ``true`` , this attribute accepts an array of values. If ``false`` , only a single value is allowed. + :type is_multi: bool + + :param key: The programmatic key used to reference this custom attribute in search queries and API calls. + :type key: str + + :param type: The data type of the custom attribute, which determines the allowed values and UI input control. + :type type: CustomAttributeType + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.display_name = display_name + self_.is_multi = is_multi + self_.key = key + self_.type = type diff --git a/datadog_api_client/v2/model/custom_attribute_config_create.py b/datadog_api_client/v2/model/custom_attribute_config_create.py new file mode 100644 index 0000000000..a670fbafa4 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_config_attributes_create import CustomAttributeConfigAttributesCreate + from datadog_api_client.v2.model.custom_attribute_config_resource_type import CustomAttributeConfigResourceType + +class CustomAttributeConfigCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_config_attributes_create import CustomAttributeConfigAttributesCreate + from datadog_api_client.v2.model.custom_attribute_config_resource_type import CustomAttributeConfigResourceType + return { + "attributes": (CustomAttributeConfigAttributesCreate,), + "type": (CustomAttributeConfigResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CustomAttributeConfigAttributesCreate, type: CustomAttributeConfigResourceType, **kwargs): + """ + Data object for creating a custom attribute configuration. + + :param attributes: Attributes required to create a custom attribute configuration. + :type attributes: CustomAttributeConfigAttributesCreate + + :param type: JSON:API resource type for custom attribute configurations. + :type type: CustomAttributeConfigResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/custom_attribute_config_create_request.py b/datadog_api_client/v2/model/custom_attribute_config_create_request.py new file mode 100644 index 0000000000..c3665a113d --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_config_create import CustomAttributeConfigCreate + +class CustomAttributeConfigCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_config_create import CustomAttributeConfigCreate + return { + "data": (CustomAttributeConfigCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomAttributeConfigCreate, **kwargs): + """ + Request payload for creating a custom attribute configuration. + + :param data: Data object for creating a custom attribute configuration. + :type data: CustomAttributeConfigCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/custom_attribute_config_resource_attributes.py b/datadog_api_client/v2/model/custom_attribute_config_resource_attributes.py new file mode 100644 index 0000000000..9df56add94 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config_resource_attributes.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_type import CustomAttributeType + +class CustomAttributeConfigResourceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_type import CustomAttributeType + return { + "case_type_id": (str,), + "description": (str,), + "display_name": (str,), + "is_multi": (bool,), + "key": (str,), + "type": (CustomAttributeType,), + } + attribute_map = { + "case_type_id": "case_type_id", + "description": "description", + "display_name": "display_name", + "is_multi": "is_multi", + "key": "key", + "type": "type", + } + + def __init__(self_, case_type_id: str, display_name: str, is_multi: bool, key: str, type: CustomAttributeType, description: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a custom attribute configuration, defining an organization-specific metadata field that can be added to cases of a given type. + + :param case_type_id: The UUID of the case type this custom attribute belongs to. + :type case_type_id: str + + :param description: A description explaining the purpose and expected values for this custom attribute. + :type description: str, optional + + :param display_name: The human-readable label shown in the Case Management UI for this custom attribute. + :type display_name: str + + :param is_multi: If ``true`` , this attribute accepts an array of values. If ``false`` , only a single value is allowed. + :type is_multi: bool + + :param key: The programmatic key used to reference this custom attribute in search queries and API calls. + :type key: str + + :param type: The data type of the custom attribute, which determines the allowed values and UI input control. + :type type: CustomAttributeType + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.case_type_id = case_type_id + self_.display_name = display_name + self_.is_multi = is_multi + self_.key = key + self_.type = type diff --git a/datadog_api_client/v2/model/custom_attribute_config_resource_type.py b/datadog_api_client/v2/model/custom_attribute_config_resource_type.py new file mode 100644 index 0000000000..4bb480ad83 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomAttributeConfigResourceType(ModelSimple): + """ + JSON:API resource type for custom attribute configurations. + + :param value: If omitted defaults to "custom_attribute". Must be one of ["custom_attribute"]. + :type value: str + """ + + allowed_values = { + "custom_attribute", + } + CUSTOM_ATTRIBUTE: ClassVar["CustomAttributeConfigResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomAttributeConfigResourceType.CUSTOM_ATTRIBUTE = CustomAttributeConfigResourceType("custom_attribute") diff --git a/datadog_api_client/v2/model/custom_attribute_config_response.py b/datadog_api_client/v2/model/custom_attribute_config_response.py new file mode 100644 index 0000000000..c223e1fd58 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_config import CustomAttributeConfig + +class CustomAttributeConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_config import CustomAttributeConfig + return { + "data": (CustomAttributeConfig,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CustomAttributeConfig, UnsetType]=unset, **kwargs): + """ + Response containing a single custom attribute configuration. + + :param data: A custom attribute configuration that defines an organization-specific metadata field on cases. Custom attributes are scoped to a case type and can hold text, URLs, numbers, or predefined select options. + :type data: CustomAttributeConfig, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_attribute_config_update.py b/datadog_api_client/v2/model/custom_attribute_config_update.py new file mode 100644 index 0000000000..f20295e21b --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config_update.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_config_update_attributes import CustomAttributeConfigUpdateAttributes + from datadog_api_client.v2.model.custom_attribute_config_resource_type import CustomAttributeConfigResourceType + +class CustomAttributeConfigUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_config_update_attributes import CustomAttributeConfigUpdateAttributes + from datadog_api_client.v2.model.custom_attribute_config_resource_type import CustomAttributeConfigResourceType + return { + "attributes": (CustomAttributeConfigUpdateAttributes,), + "type": (CustomAttributeConfigResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: CustomAttributeConfigResourceType, attributes: Union[CustomAttributeConfigUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating a custom attribute configuration. + + :param attributes: Attributes that can be updated on a custom attribute configuration. All fields are optional; only provided fields are changed. + :type attributes: CustomAttributeConfigUpdateAttributes, optional + + :param type: JSON:API resource type for custom attribute configurations. + :type type: CustomAttributeConfigResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/custom_attribute_config_update_attributes.py b/datadog_api_client/v2/model/custom_attribute_config_update_attributes.py new file mode 100644 index 0000000000..e4736e8572 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config_update_attributes.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_type import CustomAttributeType + from datadog_api_client.v2.model.custom_attribute_type_data import CustomAttributeTypeData + +class CustomAttributeConfigUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_type import CustomAttributeType + from datadog_api_client.v2.model.custom_attribute_type_data import CustomAttributeTypeData + return { + "description": (str,), + "display_name": (str,), + "map_from": (str,), + "type": (CustomAttributeType,), + "type_data": (CustomAttributeTypeData,), + } + attribute_map = { + "description": "description", + "display_name": "display_name", + "map_from": "map_from", + "type": "type", + "type_data": "type_data", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, map_from: Union[str, UnsetType]=unset, type: Union[CustomAttributeType, UnsetType]=unset, type_data: Union[CustomAttributeTypeData, UnsetType]=unset, **kwargs): + """ + Attributes that can be updated on a custom attribute configuration. All fields are optional; only provided fields are changed. + + :param description: A description explaining the purpose and expected values for this custom attribute. + :type description: str, optional + + :param display_name: The human-readable label shown in the Case Management UI for this custom attribute. + :type display_name: str, optional + + :param map_from: An external field identifier to auto-populate this attribute from (used for integrations with external systems). + :type map_from: str, optional + + :param type: The data type of the custom attribute, which determines the allowed values and UI input control. + :type type: CustomAttributeType, optional + + :param type_data: Type-specific configuration for the custom attribute. For SELECT-type attributes, this contains the list of allowed options. + :type type_data: CustomAttributeTypeData, optional + """ + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if map_from is not unset: + kwargs["map_from"] = map_from + if type is not unset: + kwargs["type"] = type + if type_data is not unset: + kwargs["type_data"] = type_data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_attribute_config_update_request.py b/datadog_api_client/v2/model/custom_attribute_config_update_request.py new file mode 100644 index 0000000000..5bba38ecd3 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_config_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_config_update import CustomAttributeConfigUpdate + +class CustomAttributeConfigUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_config_update import CustomAttributeConfigUpdate + return { + "data": (CustomAttributeConfigUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomAttributeConfigUpdate, **kwargs): + """ + Request payload for updating a custom attribute configuration. + + :param data: Data object for updating a custom attribute configuration. + :type data: CustomAttributeConfigUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/custom_attribute_configs_response.py b/datadog_api_client/v2/model/custom_attribute_configs_response.py new file mode 100644 index 0000000000..a5cc15a9b7 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_configs_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_config import CustomAttributeConfig + +class CustomAttributeConfigsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_config import CustomAttributeConfig + return { + "data": ([CustomAttributeConfig],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[CustomAttributeConfig], UnsetType]=unset, **kwargs): + """ + Response containing a list of custom attribute configurations. + + :param data: List of custom attribute configs of case type + :type data: [CustomAttributeConfig], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_attribute_select_option.py b/datadog_api_client/v2/model/custom_attribute_select_option.py new file mode 100644 index 0000000000..5aeaec51db --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_select_option.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomAttributeSelectOption(ModelNormal): + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + attribute_map = { + "value": "value", + } + + def __init__(self_, value: str, **kwargs): + """ + A selectable option for a SELECT-type custom attribute. + + :param value: Option value. + :type value: str + """ + super().__init__(kwargs) + + + self_.value = value diff --git a/datadog_api_client/v2/model/custom_attribute_type.py b/datadog_api_client/v2/model/custom_attribute_type.py new file mode 100644 index 0000000000..465e446041 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomAttributeType(ModelSimple): + """ + The data type of the custom attribute, which determines the allowed values and UI input control. + + :param value: Must be one of ["URL", "TEXT", "NUMBER", "SELECT"]. + :type value: str + """ + + allowed_values = { + "URL", + "TEXT", + "NUMBER", + "SELECT", + } + URL: ClassVar["CustomAttributeType"] + TEXT: ClassVar["CustomAttributeType"] + NUMBER: ClassVar["CustomAttributeType"] + SELECT: ClassVar["CustomAttributeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomAttributeType.URL = CustomAttributeType("URL") +CustomAttributeType.TEXT = CustomAttributeType("TEXT") +CustomAttributeType.NUMBER = CustomAttributeType("NUMBER") +CustomAttributeType.SELECT = CustomAttributeType("SELECT") diff --git a/datadog_api_client/v2/model/custom_attribute_type_data.py b/datadog_api_client/v2/model/custom_attribute_type_data.py new file mode 100644 index 0000000000..659fde9439 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_type_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_select_option import CustomAttributeSelectOption + +class CustomAttributeTypeData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_select_option import CustomAttributeSelectOption + return { + "options": ([CustomAttributeSelectOption],), + } + attribute_map = { + "options": "options", + } + + def __init__(self_, options: Union[List[CustomAttributeSelectOption], UnsetType]=unset, **kwargs): + """ + Type-specific configuration for the custom attribute. For SELECT-type attributes, this contains the list of allowed options. + + :param options: Options for SELECT type custom attributes. + :type options: [CustomAttributeSelectOption], optional + """ + if options is not unset: + kwargs["options"] = options + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_attribute_value.py b/datadog_api_client/v2/model/custom_attribute_value.py new file mode 100644 index 0000000000..6f16890242 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_value.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_attribute_type import CustomAttributeType + from datadog_api_client.v2.model.custom_attribute_values_union import CustomAttributeValuesUnion + +class CustomAttributeValue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_attribute_type import CustomAttributeType + from datadog_api_client.v2.model.custom_attribute_values_union import CustomAttributeValuesUnion + return { + "is_multi": (bool,), + "type": (CustomAttributeType,), + "value": (CustomAttributeValuesUnion,), + } + attribute_map = { + "is_multi": "is_multi", + "type": "type", + "value": "value", + } + + def __init__(self_, is_multi: bool, type: CustomAttributeType, value: Union[CustomAttributeValuesUnion, str, List[str], float, List[float]], **kwargs): + """ + A typed value for a custom attribute on a specific case. + + :param is_multi: If true, value must be an array + :type is_multi: bool + + :param type: The data type of the custom attribute, which determines the allowed values and UI input control. + :type type: CustomAttributeType + + :param value: The value of a custom attribute. The accepted format depends on the attribute's type and whether it accepts multiple values. + :type value: CustomAttributeValuesUnion + """ + super().__init__(kwargs) + + + self_.is_multi = is_multi + self_.type = type + self_.value = value diff --git a/datadog_api_client/v2/model/custom_attribute_values_union.py b/datadog_api_client/v2/model/custom_attribute_values_union.py new file mode 100644 index 0000000000..974a64a547 --- /dev/null +++ b/datadog_api_client/v2/model/custom_attribute_values_union.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomAttributeValuesUnion(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The value of a custom attribute. The accepted format depends on the attribute's type and whether it accepts multiple values. + """ + 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 + return { + "oneOf": [ + str, + [str], + float, + [float], + ], + } diff --git a/datadog_api_client/v2/model/custom_connection.py b/datadog_api_client/v2/model/custom_connection.py new file mode 100644 index 0000000000..72fbf3bc2c --- /dev/null +++ b/datadog_api_client/v2/model/custom_connection.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_connection_attributes import CustomConnectionAttributes + from datadog_api_client.v2.model.custom_connection_type import CustomConnectionType + +class CustomConnection(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_connection_attributes import CustomConnectionAttributes + from datadog_api_client.v2.model.custom_connection_type import CustomConnectionType + return { + "attributes": (CustomConnectionAttributes,), + "id": (UUID,), + "type": (CustomConnectionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CustomConnectionAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, type: Union[CustomConnectionType, UnsetType]=unset, **kwargs): + """ + A custom connection used by an app. + + :param attributes: The custom connection attributes. + :type attributes: CustomConnectionAttributes, optional + + :param id: The ID of the custom connection. + :type id: UUID, optional + + :param type: The custom connection type. + :type type: CustomConnectionType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_connection_attributes.py b/datadog_api_client/v2/model/custom_connection_attributes.py new file mode 100644 index 0000000000..ad2c9c1c5e --- /dev/null +++ b/datadog_api_client/v2/model/custom_connection_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_connection_attributes_on_prem_runner import CustomConnectionAttributesOnPremRunner + +class CustomConnectionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_connection_attributes_on_prem_runner import CustomConnectionAttributesOnPremRunner + return { + "name": (str,), + "on_prem_runner": (CustomConnectionAttributesOnPremRunner,), + } + attribute_map = { + "name": "name", + "on_prem_runner": "onPremRunner", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, on_prem_runner: Union[CustomConnectionAttributesOnPremRunner, UnsetType]=unset, **kwargs): + """ + The custom connection attributes. + + :param name: The name of the custom connection. + :type name: str, optional + + :param on_prem_runner: Information about the Private Action Runner used by the custom connection, if the custom connection is associated with a Private Action Runner. + :type on_prem_runner: CustomConnectionAttributesOnPremRunner, optional + """ + if name is not unset: + kwargs["name"] = name + if on_prem_runner is not unset: + kwargs["on_prem_runner"] = on_prem_runner + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_connection_attributes_on_prem_runner.py b/datadog_api_client/v2/model/custom_connection_attributes_on_prem_runner.py new file mode 100644 index 0000000000..6fb8000801 --- /dev/null +++ b/datadog_api_client/v2/model/custom_connection_attributes_on_prem_runner.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomConnectionAttributesOnPremRunner(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "url": (str,), + } + attribute_map = { + "id": "id", + "url": "url", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Information about the Private Action Runner used by the custom connection, if the custom connection is associated with a Private Action Runner. + + :param id: The Private Action Runner ID. + :type id: str, optional + + :param url: The URL of the Private Action Runner. + :type url: str, optional + """ + if id is not unset: + kwargs["id"] = id + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_connection_type.py b/datadog_api_client/v2/model/custom_connection_type.py new file mode 100644 index 0000000000..9d94279ac1 --- /dev/null +++ b/datadog_api_client/v2/model/custom_connection_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomConnectionType(ModelSimple): + """ + The custom connection type. + + :param value: If omitted defaults to "custom_connections". Must be one of ["custom_connections"]. + :type value: str + """ + + allowed_values = { + "custom_connections", + } + CUSTOM_CONNECTIONS: ClassVar["CustomConnectionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomConnectionType.CUSTOM_CONNECTIONS = CustomConnectionType("custom_connections") diff --git a/datadog_api_client/v2/model/custom_cost_get_response_meta.py b/datadog_api_client/v2/model/custom_cost_get_response_meta.py new file mode 100644 index 0000000000..f0e974da9a --- /dev/null +++ b/datadog_api_client/v2/model/custom_cost_get_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomCostGetResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "version": (str,), + } + attribute_map = { + "version": "version", + } + + def __init__(self_, version: Union[str, UnsetType]=unset, **kwargs): + """ + Meta for the response from the Get Custom Costs endpoints. + + :param version: Version of Custom Costs file + :type version: str, optional + """ + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_cost_list_response_meta.py b/datadog_api_client/v2/model/custom_cost_list_response_meta.py new file mode 100644 index 0000000000..d5f4605641 --- /dev/null +++ b/datadog_api_client/v2/model/custom_cost_list_response_meta.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomCostListResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count_by_status": ({str: (int,)},), + "providers": ([str],), + "total_filtered_count": (int,), + "version": (str,), + } + attribute_map = { + "count_by_status": "count_by_status", + "providers": "providers", + "total_filtered_count": "total_filtered_count", + "version": "version", + } + + def __init__(self_, count_by_status: Union[Dict[str, int], UnsetType]=unset, providers: Union[List[str], UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Meta for the response from the List Custom Costs endpoints. + + :param count_by_status: Number of Custom Costs files per status. + :type count_by_status: {str: (int,)}, optional + + :param providers: List of available providers. + :type providers: [str], optional + + :param total_filtered_count: Number of Custom Costs files returned by the List Custom Costs endpoint + :type total_filtered_count: int, optional + + :param version: Version of Custom Costs file + :type version: str, optional + """ + if count_by_status is not unset: + kwargs["count_by_status"] = count_by_status + if providers is not unset: + kwargs["providers"] = providers + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_cost_upload_response_meta.py b/datadog_api_client/v2/model/custom_cost_upload_response_meta.py new file mode 100644 index 0000000000..44bf41c198 --- /dev/null +++ b/datadog_api_client/v2/model/custom_cost_upload_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomCostUploadResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "version": (str,), + } + attribute_map = { + "version": "version", + } + + def __init__(self_, version: Union[str, UnsetType]=unset, **kwargs): + """ + Meta for the response from the Upload Custom Costs endpoints. + + :param version: Version of Custom Costs file + :type version: str, optional + """ + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_file_get_response.py b/datadog_api_client/v2/model/custom_costs_file_get_response.py new file mode 100644 index 0000000000..a17152cd2f --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_file_get_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_costs_file_metadata_with_content_high_level import CustomCostsFileMetadataWithContentHighLevel + from datadog_api_client.v2.model.custom_cost_get_response_meta import CustomCostGetResponseMeta + +class CustomCostsFileGetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_costs_file_metadata_with_content_high_level import CustomCostsFileMetadataWithContentHighLevel + from datadog_api_client.v2.model.custom_cost_get_response_meta import CustomCostGetResponseMeta + return { + "data": (CustomCostsFileMetadataWithContentHighLevel,), + "meta": (CustomCostGetResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[CustomCostsFileMetadataWithContentHighLevel, UnsetType]=unset, meta: Union[CustomCostGetResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for Get Custom Costs files. + + :param data: JSON API format of for a Custom Costs file with content. + :type data: CustomCostsFileMetadataWithContentHighLevel, optional + + :param meta: Meta for the response from the Get Custom Costs endpoints. + :type meta: CustomCostGetResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_file_line_item.py b/datadog_api_client/v2/model/custom_costs_file_line_item.py new file mode 100644 index 0000000000..caeb57380f --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_file_line_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomCostsFileLineItem(ModelNormal): + validations = { + "charge_period_end": { + }, + "charge_period_start": { + }, + } + @cached_property + def openapi_types(_): + return { + "billed_cost": (float,), + "billing_currency": (str,), + "charge_description": (str,), + "charge_period_end": (str,), + "charge_period_start": (str,), + "provider_name": (str,), + "tags": ({str: (str,)},), + } + attribute_map = { + "billed_cost": "BilledCost", + "billing_currency": "BillingCurrency", + "charge_description": "ChargeDescription", + "charge_period_end": "ChargePeriodEnd", + "charge_period_start": "ChargePeriodStart", + "provider_name": "ProviderName", + "tags": "Tags", + } + + def __init__(self_, billed_cost: Union[float, UnsetType]=unset, billing_currency: Union[str, UnsetType]=unset, charge_description: Union[str, UnsetType]=unset, charge_period_end: Union[str, UnsetType]=unset, charge_period_start: Union[str, UnsetType]=unset, provider_name: Union[str, UnsetType]=unset, tags: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + Line item details from a Custom Costs file. + + :param billed_cost: Total cost in the cost file. + :type billed_cost: float, optional + + :param billing_currency: Currency used in the Custom Costs file. + :type billing_currency: str, optional + + :param charge_description: Description for the line item cost. + :type charge_description: str, optional + + :param charge_period_end: End date of the usage charge. + :type charge_period_end: str, optional + + :param charge_period_start: Start date of the usage charge. + :type charge_period_start: str, optional + + :param provider_name: Name of the provider for the line item. + :type provider_name: str, optional + + :param tags: Additional tags for the line item. + :type tags: {str: (str,)}, optional + """ + if billed_cost is not unset: + kwargs["billed_cost"] = billed_cost + if billing_currency is not unset: + kwargs["billing_currency"] = billing_currency + if charge_description is not unset: + kwargs["charge_description"] = charge_description + if charge_period_end is not unset: + kwargs["charge_period_end"] = charge_period_end + if charge_period_start is not unset: + kwargs["charge_period_start"] = charge_period_start + if provider_name is not unset: + kwargs["provider_name"] = provider_name + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_file_list_response.py b/datadog_api_client/v2/model/custom_costs_file_list_response.py new file mode 100644 index 0000000000..31c634fd03 --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_file_list_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_costs_file_metadata_high_level import CustomCostsFileMetadataHighLevel + from datadog_api_client.v2.model.custom_cost_list_response_meta import CustomCostListResponseMeta + +class CustomCostsFileListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_costs_file_metadata_high_level import CustomCostsFileMetadataHighLevel + from datadog_api_client.v2.model.custom_cost_list_response_meta import CustomCostListResponseMeta + return { + "data": ([CustomCostsFileMetadataHighLevel],), + "meta": (CustomCostListResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[CustomCostsFileMetadataHighLevel], UnsetType]=unset, meta: Union[CustomCostListResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for List Custom Costs files. + + :param data: List of Custom Costs files. + :type data: [CustomCostsFileMetadataHighLevel], optional + + :param meta: Meta for the response from the List Custom Costs endpoints. + :type meta: CustomCostListResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_file_metadata.py b/datadog_api_client/v2/model/custom_costs_file_metadata.py new file mode 100644 index 0000000000..d85cea3c51 --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_file_metadata.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_costs_file_usage_charge_period import CustomCostsFileUsageChargePeriod + from datadog_api_client.v2.model.custom_costs_user import CustomCostsUser + +class CustomCostsFileMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_costs_file_usage_charge_period import CustomCostsFileUsageChargePeriod + from datadog_api_client.v2.model.custom_costs_user import CustomCostsUser + return { + "billed_cost": (float,), + "billing_currency": (str,), + "charge_period": (CustomCostsFileUsageChargePeriod,), + "name": (str,), + "provider_names": ([str],), + "status": (str,), + "uploaded_at": (float,), + "uploaded_by": (CustomCostsUser,), + } + attribute_map = { + "billed_cost": "billed_cost", + "billing_currency": "billing_currency", + "charge_period": "charge_period", + "name": "name", + "provider_names": "provider_names", + "status": "status", + "uploaded_at": "uploaded_at", + "uploaded_by": "uploaded_by", + } + + def __init__(self_, billed_cost: Union[float, UnsetType]=unset, billing_currency: Union[str, UnsetType]=unset, charge_period: Union[CustomCostsFileUsageChargePeriod, UnsetType]=unset, name: Union[str, UnsetType]=unset, provider_names: Union[List[str], UnsetType]=unset, status: Union[str, UnsetType]=unset, uploaded_at: Union[float, UnsetType]=unset, uploaded_by: Union[CustomCostsUser, UnsetType]=unset, **kwargs): + """ + Schema of a Custom Costs metadata. + + :param billed_cost: Total cost in the cost file. + :type billed_cost: float, optional + + :param billing_currency: Currency used in the Custom Costs file. + :type billing_currency: str, optional + + :param charge_period: Usage charge period of a Custom Costs file. + :type charge_period: CustomCostsFileUsageChargePeriod, optional + + :param name: Name of the Custom Costs file. + :type name: str, optional + + :param provider_names: Providers contained in the Custom Costs file. + :type provider_names: [str], optional + + :param status: Status of the Custom Costs file. + :type status: str, optional + + :param uploaded_at: Timestamp, in millisecond, of the upload time of the Custom Costs file. + :type uploaded_at: float, optional + + :param uploaded_by: Metadata of the user that has uploaded the Custom Costs file. + :type uploaded_by: CustomCostsUser, optional + """ + if billed_cost is not unset: + kwargs["billed_cost"] = billed_cost + if billing_currency is not unset: + kwargs["billing_currency"] = billing_currency + if charge_period is not unset: + kwargs["charge_period"] = charge_period + if name is not unset: + kwargs["name"] = name + if provider_names is not unset: + kwargs["provider_names"] = provider_names + if status is not unset: + kwargs["status"] = status + if uploaded_at is not unset: + kwargs["uploaded_at"] = uploaded_at + if uploaded_by is not unset: + kwargs["uploaded_by"] = uploaded_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_file_metadata_high_level.py b/datadog_api_client/v2/model/custom_costs_file_metadata_high_level.py new file mode 100644 index 0000000000..1d5117ad1a --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_file_metadata_high_level.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_costs_file_metadata import CustomCostsFileMetadata + +class CustomCostsFileMetadataHighLevel(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_costs_file_metadata import CustomCostsFileMetadata + return { + "attributes": (CustomCostsFileMetadata,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CustomCostsFileMetadata, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + JSON API format for a Custom Costs file. + + :param attributes: Schema of a Custom Costs metadata. + :type attributes: CustomCostsFileMetadata, optional + + :param id: ID of the Custom Costs metadata. + :type id: str, optional + + :param type: Type of the Custom Costs file metadata. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_file_metadata_with_content.py b/datadog_api_client/v2/model/custom_costs_file_metadata_with_content.py new file mode 100644 index 0000000000..7c23e0aa22 --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_file_metadata_with_content.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_costs_file_usage_charge_period import CustomCostsFileUsageChargePeriod + from datadog_api_client.v2.model.custom_costs_file_line_item import CustomCostsFileLineItem + from datadog_api_client.v2.model.custom_costs_user import CustomCostsUser + +class CustomCostsFileMetadataWithContent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_costs_file_usage_charge_period import CustomCostsFileUsageChargePeriod + from datadog_api_client.v2.model.custom_costs_file_line_item import CustomCostsFileLineItem + from datadog_api_client.v2.model.custom_costs_user import CustomCostsUser + return { + "billed_cost": (float,), + "billing_currency": (str,), + "charge_period": (CustomCostsFileUsageChargePeriod,), + "content": ([CustomCostsFileLineItem],), + "name": (str,), + "provider_names": ([str],), + "status": (str,), + "uploaded_at": (float,), + "uploaded_by": (CustomCostsUser,), + } + attribute_map = { + "billed_cost": "billed_cost", + "billing_currency": "billing_currency", + "charge_period": "charge_period", + "content": "content", + "name": "name", + "provider_names": "provider_names", + "status": "status", + "uploaded_at": "uploaded_at", + "uploaded_by": "uploaded_by", + } + + def __init__(self_, billed_cost: Union[float, UnsetType]=unset, billing_currency: Union[str, UnsetType]=unset, charge_period: Union[CustomCostsFileUsageChargePeriod, UnsetType]=unset, content: Union[List[CustomCostsFileLineItem], UnsetType]=unset, name: Union[str, UnsetType]=unset, provider_names: Union[List[str], UnsetType]=unset, status: Union[str, UnsetType]=unset, uploaded_at: Union[float, UnsetType]=unset, uploaded_by: Union[CustomCostsUser, UnsetType]=unset, **kwargs): + """ + Schema of a cost file's metadata. + + :param billed_cost: Total cost in the cost file. + :type billed_cost: float, optional + + :param billing_currency: Currency used in the Custom Costs file. + :type billing_currency: str, optional + + :param charge_period: Usage charge period of a Custom Costs file. + :type charge_period: CustomCostsFileUsageChargePeriod, optional + + :param content: Detail of the line items from the Custom Costs file. + :type content: [CustomCostsFileLineItem], optional + + :param name: Name of the Custom Costs file. + :type name: str, optional + + :param provider_names: Providers contained in the Custom Costs file. + :type provider_names: [str], optional + + :param status: Status of the Custom Costs file. + :type status: str, optional + + :param uploaded_at: Timestamp in millisecond of the upload time of the Custom Costs file. + :type uploaded_at: float, optional + + :param uploaded_by: Metadata of the user that has uploaded the Custom Costs file. + :type uploaded_by: CustomCostsUser, optional + """ + if billed_cost is not unset: + kwargs["billed_cost"] = billed_cost + if billing_currency is not unset: + kwargs["billing_currency"] = billing_currency + if charge_period is not unset: + kwargs["charge_period"] = charge_period + if content is not unset: + kwargs["content"] = content + if name is not unset: + kwargs["name"] = name + if provider_names is not unset: + kwargs["provider_names"] = provider_names + if status is not unset: + kwargs["status"] = status + if uploaded_at is not unset: + kwargs["uploaded_at"] = uploaded_at + if uploaded_by is not unset: + kwargs["uploaded_by"] = uploaded_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_file_metadata_with_content_high_level.py b/datadog_api_client/v2/model/custom_costs_file_metadata_with_content_high_level.py new file mode 100644 index 0000000000..85543a38f2 --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_file_metadata_with_content_high_level.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_costs_file_metadata_with_content import CustomCostsFileMetadataWithContent + +class CustomCostsFileMetadataWithContentHighLevel(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_costs_file_metadata_with_content import CustomCostsFileMetadataWithContent + return { + "attributes": (CustomCostsFileMetadataWithContent,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CustomCostsFileMetadataWithContent, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + JSON API format of for a Custom Costs file with content. + + :param attributes: Schema of a cost file's metadata. + :type attributes: CustomCostsFileMetadataWithContent, optional + + :param id: ID of the Custom Costs metadata. + :type id: str, optional + + :param type: Type of the Custom Costs file metadata. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_file_upload_response.py b/datadog_api_client/v2/model/custom_costs_file_upload_response.py new file mode 100644 index 0000000000..a8d84c1ba2 --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_file_upload_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_costs_file_metadata_high_level import CustomCostsFileMetadataHighLevel + from datadog_api_client.v2.model.custom_cost_upload_response_meta import CustomCostUploadResponseMeta + +class CustomCostsFileUploadResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_costs_file_metadata_high_level import CustomCostsFileMetadataHighLevel + from datadog_api_client.v2.model.custom_cost_upload_response_meta import CustomCostUploadResponseMeta + return { + "data": (CustomCostsFileMetadataHighLevel,), + "meta": (CustomCostUploadResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[CustomCostsFileMetadataHighLevel, UnsetType]=unset, meta: Union[CustomCostUploadResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for Uploaded Custom Costs files. + + :param data: JSON API format for a Custom Costs file. + :type data: CustomCostsFileMetadataHighLevel, optional + + :param meta: Meta for the response from the Upload Custom Costs endpoints. + :type meta: CustomCostUploadResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_file_usage_charge_period.py b/datadog_api_client/v2/model/custom_costs_file_usage_charge_period.py new file mode 100644 index 0000000000..7dd03304fd --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_file_usage_charge_period.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomCostsFileUsageChargePeriod(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (float,), + "start": (float,), + } + attribute_map = { + "end": "end", + "start": "start", + } + + def __init__(self_, end: Union[float, UnsetType]=unset, start: Union[float, UnsetType]=unset, **kwargs): + """ + Usage charge period of a Custom Costs file. + + :param end: End of the usage of the Custom Costs file. + :type end: float, optional + + :param start: Start of the usage of the Custom Costs file. + :type start: float, optional + """ + if end is not unset: + kwargs["end"] = end + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_costs_user.py b/datadog_api_client/v2/model/custom_costs_user.py new file mode 100644 index 0000000000..4a56d193a7 --- /dev/null +++ b/datadog_api_client/v2/model/custom_costs_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomCostsUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "icon": (str,), + "name": (str,), + } + attribute_map = { + "email": "email", + "icon": "icon", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, icon: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Metadata of the user that has uploaded the Custom Costs file. + + :param email: The name of the Custom Costs file. + :type email: str, optional + + :param icon: The name of the Custom Costs file. + :type icon: str, optional + + :param name: Name of the user. + :type name: str, optional + """ + if email is not unset: + kwargs["email"] = email + if icon is not unset: + kwargs["icon"] = icon + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_destination_attribute_tags_restriction_list_type.py b/datadog_api_client/v2/model/custom_destination_attribute_tags_restriction_list_type.py new file mode 100644 index 0000000000..ff18b59c9f --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_attribute_tags_restriction_list_type.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationAttributeTagsRestrictionListType(ModelSimple): + """ + How `forward_tags_restriction_list` parameter should be interpreted. + If `ALLOW_LIST`, then only tags whose keys on the forwarded logs match the ones on the restriction list + are forwarded. + + `BLOCK_LIST` works the opposite way. It does not forward the tags matching the ones on the list. + + :param value: If omitted defaults to "ALLOW_LIST". Must be one of ["ALLOW_LIST", "BLOCK_LIST"]. + :type value: str + """ + + allowed_values = { + "ALLOW_LIST", + "BLOCK_LIST", + } + ALLOW_LIST: ClassVar["CustomDestinationAttributeTagsRestrictionListType"] + BLOCK_LIST: ClassVar["CustomDestinationAttributeTagsRestrictionListType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationAttributeTagsRestrictionListType.ALLOW_LIST = CustomDestinationAttributeTagsRestrictionListType("ALLOW_LIST") +CustomDestinationAttributeTagsRestrictionListType.BLOCK_LIST = CustomDestinationAttributeTagsRestrictionListType("BLOCK_LIST") diff --git a/datadog_api_client/v2/model/custom_destination_create_request.py b/datadog_api_client/v2/model/custom_destination_create_request.py new file mode 100644 index 0000000000..3af5f0d50e --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_create_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_create_request_definition import CustomDestinationCreateRequestDefinition + from datadog_api_client.v2.model.custom_destination_forward_destination_http import CustomDestinationForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_forward_destination_splunk import CustomDestinationForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch import CustomDestinationForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel import CustomDestinationForwardDestinationMicrosoftSentinel + +class CustomDestinationCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_create_request_definition import CustomDestinationCreateRequestDefinition + return { + "data": (CustomDestinationCreateRequestDefinition,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CustomDestinationCreateRequestDefinition, UnsetType]=unset, **kwargs): + """ + The custom destination. + + :param data: The definition of a custom destination. + :type data: CustomDestinationCreateRequestDefinition, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_destination_create_request_attributes.py b/datadog_api_client/v2/model/custom_destination_create_request_attributes.py new file mode 100644 index 0000000000..8ef9d70ab5 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_create_request_attributes.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_attribute_tags_restriction_list_type import CustomDestinationAttributeTagsRestrictionListType + from datadog_api_client.v2.model.custom_destination_forward_destination import CustomDestinationForwardDestination + from datadog_api_client.v2.model.custom_destination_forward_destination_http import CustomDestinationForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_forward_destination_splunk import CustomDestinationForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch import CustomDestinationForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel import CustomDestinationForwardDestinationMicrosoftSentinel + +class CustomDestinationCreateRequestAttributes(ModelNormal): + validations = { + "forward_tags_restriction_list": { + "max_items": 10, + "min_items": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_attribute_tags_restriction_list_type import CustomDestinationAttributeTagsRestrictionListType + from datadog_api_client.v2.model.custom_destination_forward_destination import CustomDestinationForwardDestination + return { + "enabled": (bool,), + "forward_tags": (bool,), + "forward_tags_restriction_list": ([str],), + "forward_tags_restriction_list_type": (CustomDestinationAttributeTagsRestrictionListType,), + "forwarder_destination": (CustomDestinationForwardDestination,), + "name": (str,), + "query": (str,), + } + attribute_map = { + "enabled": "enabled", + "forward_tags": "forward_tags", + "forward_tags_restriction_list": "forward_tags_restriction_list", + "forward_tags_restriction_list_type": "forward_tags_restriction_list_type", + "forwarder_destination": "forwarder_destination", + "name": "name", + "query": "query", + } + + def __init__(self_, forwarder_destination: Union[CustomDestinationForwardDestination, CustomDestinationForwardDestinationHttp, CustomDestinationForwardDestinationSplunk, CustomDestinationForwardDestinationElasticsearch, CustomDestinationForwardDestinationMicrosoftSentinel], name: str, enabled: Union[bool, UnsetType]=unset, forward_tags: Union[bool, UnsetType]=unset, forward_tags_restriction_list: Union[List[str], UnsetType]=unset, forward_tags_restriction_list_type: Union[CustomDestinationAttributeTagsRestrictionListType, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes associated with the custom destination. + + :param enabled: Whether logs matching this custom destination should be forwarded or not. + :type enabled: bool, optional + + :param forward_tags: Whether tags from the forwarded logs should be forwarded or not. + :type forward_tags: bool, optional + + :param forward_tags_restriction_list: List of `keys of tags `_ to be filtered. + + An empty list represents no restriction is in place and either all or no tags will be + forwarded depending on ``forward_tags_restriction_list_type`` parameter. + :type forward_tags_restriction_list: [str], optional + + :param forward_tags_restriction_list_type: How ``forward_tags_restriction_list`` parameter should be interpreted. + If ``ALLOW_LIST`` , then only tags whose keys on the forwarded logs match the ones on the restriction list + are forwarded. + + ``BLOCK_LIST`` works the opposite way. It does not forward the tags matching the ones on the list. + :type forward_tags_restriction_list_type: CustomDestinationAttributeTagsRestrictionListType, optional + + :param forwarder_destination: A custom destination's location to forward logs. + :type forwarder_destination: CustomDestinationForwardDestination + + :param name: The custom destination name. + :type name: str + + :param query: The custom destination query and filter. Logs matching this query are forwarded to the destination. + :type query: str, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if forward_tags is not unset: + kwargs["forward_tags"] = forward_tags + if forward_tags_restriction_list is not unset: + kwargs["forward_tags_restriction_list"] = forward_tags_restriction_list + if forward_tags_restriction_list_type is not unset: + kwargs["forward_tags_restriction_list_type"] = forward_tags_restriction_list_type + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + + self_.forwarder_destination = forwarder_destination + self_.name = name diff --git a/datadog_api_client/v2/model/custom_destination_create_request_definition.py b/datadog_api_client/v2/model/custom_destination_create_request_definition.py new file mode 100644 index 0000000000..93e7106cbf --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_create_request_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_create_request_attributes import CustomDestinationCreateRequestAttributes + from datadog_api_client.v2.model.custom_destination_type import CustomDestinationType + from datadog_api_client.v2.model.custom_destination_forward_destination_http import CustomDestinationForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_forward_destination_splunk import CustomDestinationForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch import CustomDestinationForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel import CustomDestinationForwardDestinationMicrosoftSentinel + +class CustomDestinationCreateRequestDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_create_request_attributes import CustomDestinationCreateRequestAttributes + from datadog_api_client.v2.model.custom_destination_type import CustomDestinationType + return { + "attributes": (CustomDestinationCreateRequestAttributes,), + "type": (CustomDestinationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CustomDestinationCreateRequestAttributes, type: CustomDestinationType, **kwargs): + """ + The definition of a custom destination. + + :param attributes: The attributes associated with the custom destination. + :type attributes: CustomDestinationCreateRequestAttributes + + :param type: The type of the resource. The value should always be ``custom_destination``. + :type type: CustomDestinationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_elasticsearch_destination_auth.py b/datadog_api_client/v2/model/custom_destination_elasticsearch_destination_auth.py new file mode 100644 index 0000000000..25520e9cf6 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_elasticsearch_destination_auth.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomDestinationElasticsearchDestinationAuth(ModelNormal): + @cached_property + def openapi_types(_): + return { + "password": (str,), + "username": (str,), + } + attribute_map = { + "password": "password", + "username": "username", + } + + def __init__(self_, password: str, username: str, **kwargs): + """ + Basic access authentication. + + :param password: The password of the authentication. This field is not returned by the API. + :type password: str + + :param username: The username of the authentication. This field is not returned by the API. + :type username: str + """ + super().__init__(kwargs) + + + self_.password = password + self_.username = username diff --git a/datadog_api_client/v2/model/custom_destination_forward_destination.py b/datadog_api_client/v2/model/custom_destination_forward_destination.py new file mode 100644 index 0000000000..ac9d137f3e --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_forward_destination.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomDestinationForwardDestination(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A custom destination's location to forward logs. + + :param auth: Authentication method of the HTTP requests. + :type auth: CustomDestinationHttpDestinationAuth + + :param endpoint: The destination for which logs will be forwarded to. + Must have HTTPS scheme and forwarding back to Datadog is not allowed. + :type endpoint: str + + :param type: Type of the HTTP destination. + :type type: CustomDestinationForwardDestinationHttpType + + :param access_token: Access token of the Splunk HTTP Event Collector. This field is not returned by the API. + :type access_token: str + + :param sourcetype: The Splunk sourcetype for the events sent to this Splunk destination. + + If the field is absent from the request and no sourcetype has been previously set on this destination, the default sourcetype `_json` is used. + On update, if the field is absent from the request but a sourcetype was previously set, the previous value is kept. + If set to `null`, the sourcetype field is omitted from the forwarded event entirely. + Otherwise, the provided string value is used as the sourcetype. + :type sourcetype: str, none_type, optional + + :param index_name: Name of the Elasticsearch index (must follow [Elasticsearch's criteria](https://www.elastic.co/guide/en/elasticsearch/reference/8.11/indices-create-index.html#indices-create-api-path-params)). + :type index_name: str + + :param index_rotation: Date pattern with US locale and UTC timezone to be appended to the index name after adding `-` + (that is, `${index_name}-${indexPattern}`). + You can customize the index rotation naming pattern by choosing one of these options: + - Hourly: `yyyy-MM-dd-HH` (as an example, it would render: `2022-10-19-09`) + - Daily: `yyyy-MM-dd` (as an example, it would render: `2022-10-19`) + - Weekly: `yyyy-'W'ww` (as an example, it would render: `2022-W42`) + - Monthly: `yyyy-MM` (as an example, it would render: `2022-10`) + + If this field is missing or is blank, it means that the index name will always be the same + (that is, no rotation). + :type index_rotation: str, optional + + :param client_id: Client ID from the Datadog Azure integration. + :type client_id: str + + :param data_collection_endpoint: Azure data collection endpoint. + :type data_collection_endpoint: str + + :param data_collection_rule_id: Azure data collection rule ID. + :type data_collection_rule_id: str + + :param stream_name: Azure stream name. + :type stream_name: str + + :param tenant_id: Tenant ID from the Datadog Azure integration. + :type tenant_id: str + """ + 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.custom_destination_forward_destination_http import CustomDestinationForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_forward_destination_splunk import CustomDestinationForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch import CustomDestinationForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel import CustomDestinationForwardDestinationMicrosoftSentinel + return { + "oneOf": [ + CustomDestinationForwardDestinationHttp, + CustomDestinationForwardDestinationSplunk, + CustomDestinationForwardDestinationElasticsearch, + CustomDestinationForwardDestinationMicrosoftSentinel, + ], + } diff --git a/datadog_api_client/v2/model/custom_destination_forward_destination_elasticsearch.py b/datadog_api_client/v2/model/custom_destination_forward_destination_elasticsearch.py new file mode 100644 index 0000000000..79e24a8f32 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_forward_destination_elasticsearch.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_elasticsearch_destination_auth import CustomDestinationElasticsearchDestinationAuth + from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch_type import CustomDestinationForwardDestinationElasticsearchType + +class CustomDestinationForwardDestinationElasticsearch(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_elasticsearch_destination_auth import CustomDestinationElasticsearchDestinationAuth + from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch_type import CustomDestinationForwardDestinationElasticsearchType + return { + "auth": (CustomDestinationElasticsearchDestinationAuth,), + "endpoint": (str,), + "index_name": (str,), + "index_rotation": (str,), + "type": (CustomDestinationForwardDestinationElasticsearchType,), + } + attribute_map = { + "auth": "auth", + "endpoint": "endpoint", + "index_name": "index_name", + "index_rotation": "index_rotation", + "type": "type", + } + + def __init__(self_, auth: CustomDestinationElasticsearchDestinationAuth, endpoint: str, index_name: str, type: CustomDestinationForwardDestinationElasticsearchType, index_rotation: Union[str, UnsetType]=unset, **kwargs): + """ + The Elasticsearch destination. + + :param auth: Basic access authentication. + :type auth: CustomDestinationElasticsearchDestinationAuth + + :param endpoint: The destination for which logs will be forwarded to. + Must have HTTPS scheme and forwarding back to Datadog is not allowed. + :type endpoint: str + + :param index_name: Name of the Elasticsearch index (must follow `Elasticsearch's criteria `_ ). + :type index_name: str + + :param index_rotation: Date pattern with US locale and UTC timezone to be appended to the index name after adding ``-`` + (that is, ``${index_name}-${indexPattern}`` ). + You can customize the index rotation naming pattern by choosing one of these options: + + * Hourly: ``yyyy-MM-dd-HH`` (as an example, it would render: ``2022-10-19-09`` ) + * Daily: ``yyyy-MM-dd`` (as an example, it would render: ``2022-10-19`` ) + * Weekly: ``yyyy-'W'ww`` (as an example, it would render: ``2022-W42`` ) + * Monthly: ``yyyy-MM`` (as an example, it would render: ``2022-10`` ) + + If this field is missing or is blank, it means that the index name will always be the same + (that is, no rotation). + :type index_rotation: str, optional + + :param type: Type of the Elasticsearch destination. + :type type: CustomDestinationForwardDestinationElasticsearchType + """ + if index_rotation is not unset: + kwargs["index_rotation"] = index_rotation + super().__init__(kwargs) + + + self_.auth = auth + self_.endpoint = endpoint + self_.index_name = index_name + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_forward_destination_elasticsearch_type.py b/datadog_api_client/v2/model/custom_destination_forward_destination_elasticsearch_type.py new file mode 100644 index 0000000000..c86fb09566 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_forward_destination_elasticsearch_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationForwardDestinationElasticsearchType(ModelSimple): + """ + Type of the Elasticsearch destination. + + :param value: If omitted defaults to "elasticsearch". Must be one of ["elasticsearch"]. + :type value: str + """ + + allowed_values = { + "elasticsearch", + } + ELASTICSEARCH: ClassVar["CustomDestinationForwardDestinationElasticsearchType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationForwardDestinationElasticsearchType.ELASTICSEARCH = CustomDestinationForwardDestinationElasticsearchType("elasticsearch") diff --git a/datadog_api_client/v2/model/custom_destination_forward_destination_http.py b/datadog_api_client/v2/model/custom_destination_forward_destination_http.py new file mode 100644 index 0000000000..73e9327795 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_forward_destination_http.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_http_destination_auth import CustomDestinationHttpDestinationAuth + from datadog_api_client.v2.model.custom_destination_forward_destination_http_type import CustomDestinationForwardDestinationHttpType + from datadog_api_client.v2.model.custom_destination_http_destination_auth_basic import CustomDestinationHttpDestinationAuthBasic + from datadog_api_client.v2.model.custom_destination_http_destination_auth_custom_header import CustomDestinationHttpDestinationAuthCustomHeader + +class CustomDestinationForwardDestinationHttp(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_http_destination_auth import CustomDestinationHttpDestinationAuth + from datadog_api_client.v2.model.custom_destination_forward_destination_http_type import CustomDestinationForwardDestinationHttpType + return { + "auth": (CustomDestinationHttpDestinationAuth,), + "endpoint": (str,), + "type": (CustomDestinationForwardDestinationHttpType,), + } + attribute_map = { + "auth": "auth", + "endpoint": "endpoint", + "type": "type", + } + + def __init__(self_, auth: Union[CustomDestinationHttpDestinationAuth, CustomDestinationHttpDestinationAuthBasic, CustomDestinationHttpDestinationAuthCustomHeader], endpoint: str, type: CustomDestinationForwardDestinationHttpType, **kwargs): + """ + The HTTP destination. + + :param auth: Authentication method of the HTTP requests. + :type auth: CustomDestinationHttpDestinationAuth + + :param endpoint: The destination for which logs will be forwarded to. + Must have HTTPS scheme and forwarding back to Datadog is not allowed. + :type endpoint: str + + :param type: Type of the HTTP destination. + :type type: CustomDestinationForwardDestinationHttpType + """ + super().__init__(kwargs) + + + self_.auth = auth + self_.endpoint = endpoint + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_forward_destination_http_type.py b/datadog_api_client/v2/model/custom_destination_forward_destination_http_type.py new file mode 100644 index 0000000000..0533de4421 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_forward_destination_http_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationForwardDestinationHttpType(ModelSimple): + """ + Type of the HTTP destination. + + :param value: If omitted defaults to "http". Must be one of ["http"]. + :type value: str + """ + + allowed_values = { + "http", + } + HTTP: ClassVar["CustomDestinationForwardDestinationHttpType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationForwardDestinationHttpType.HTTP = CustomDestinationForwardDestinationHttpType("http") diff --git a/datadog_api_client/v2/model/custom_destination_forward_destination_microsoft_sentinel.py b/datadog_api_client/v2/model/custom_destination_forward_destination_microsoft_sentinel.py new file mode 100644 index 0000000000..4fa8b33a46 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_forward_destination_microsoft_sentinel.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel_type import CustomDestinationForwardDestinationMicrosoftSentinelType + +class CustomDestinationForwardDestinationMicrosoftSentinel(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel_type import CustomDestinationForwardDestinationMicrosoftSentinelType + return { + "client_id": (str,), + "data_collection_endpoint": (str,), + "data_collection_rule_id": (str,), + "stream_name": (str,), + "tenant_id": (str,), + "type": (CustomDestinationForwardDestinationMicrosoftSentinelType,), + } + attribute_map = { + "client_id": "client_id", + "data_collection_endpoint": "data_collection_endpoint", + "data_collection_rule_id": "data_collection_rule_id", + "stream_name": "stream_name", + "tenant_id": "tenant_id", + "type": "type", + } + + def __init__(self_, client_id: str, data_collection_endpoint: str, data_collection_rule_id: str, stream_name: str, tenant_id: str, type: CustomDestinationForwardDestinationMicrosoftSentinelType, **kwargs): + """ + The Microsoft Sentinel destination. + + :param client_id: Client ID from the Datadog Azure integration. + :type client_id: str + + :param data_collection_endpoint: Azure data collection endpoint. + :type data_collection_endpoint: str + + :param data_collection_rule_id: Azure data collection rule ID. + :type data_collection_rule_id: str + + :param stream_name: Azure stream name. + :type stream_name: str + + :param tenant_id: Tenant ID from the Datadog Azure integration. + :type tenant_id: str + + :param type: Type of the Microsoft Sentinel destination. + :type type: CustomDestinationForwardDestinationMicrosoftSentinelType + """ + super().__init__(kwargs) + + + self_.client_id = client_id + self_.data_collection_endpoint = data_collection_endpoint + self_.data_collection_rule_id = data_collection_rule_id + self_.stream_name = stream_name + self_.tenant_id = tenant_id + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_forward_destination_microsoft_sentinel_type.py b/datadog_api_client/v2/model/custom_destination_forward_destination_microsoft_sentinel_type.py new file mode 100644 index 0000000000..a68faf4bd5 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_forward_destination_microsoft_sentinel_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationForwardDestinationMicrosoftSentinelType(ModelSimple): + """ + Type of the Microsoft Sentinel destination. + + :param value: If omitted defaults to "microsoft_sentinel". Must be one of ["microsoft_sentinel"]. + :type value: str + """ + + allowed_values = { + "microsoft_sentinel", + } + MICROSOFT_SENTINEL: ClassVar["CustomDestinationForwardDestinationMicrosoftSentinelType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationForwardDestinationMicrosoftSentinelType.MICROSOFT_SENTINEL = CustomDestinationForwardDestinationMicrosoftSentinelType("microsoft_sentinel") diff --git a/datadog_api_client/v2/model/custom_destination_forward_destination_splunk.py b/datadog_api_client/v2/model/custom_destination_forward_destination_splunk.py new file mode 100644 index 0000000000..124e2cf222 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_forward_destination_splunk.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_forward_destination_splunk_type import CustomDestinationForwardDestinationSplunkType + +class CustomDestinationForwardDestinationSplunk(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_forward_destination_splunk_type import CustomDestinationForwardDestinationSplunkType + return { + "access_token": (str,), + "endpoint": (str,), + "sourcetype": (str, none_type), + "type": (CustomDestinationForwardDestinationSplunkType,), + } + attribute_map = { + "access_token": "access_token", + "endpoint": "endpoint", + "sourcetype": "sourcetype", + "type": "type", + } + + def __init__(self_, access_token: str, endpoint: str, type: CustomDestinationForwardDestinationSplunkType, sourcetype: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The Splunk HTTP Event Collector (HEC) destination. + + :param access_token: Access token of the Splunk HTTP Event Collector. This field is not returned by the API. + :type access_token: str + + :param endpoint: The destination for which logs will be forwarded to. + Must have HTTPS scheme and forwarding back to Datadog is not allowed. + :type endpoint: str + + :param sourcetype: The Splunk sourcetype for the events sent to this Splunk destination. + + If the field is absent from the request and no sourcetype has been previously set on this destination, the default sourcetype ``_json`` is used. + On update, if the field is absent from the request but a sourcetype was previously set, the previous value is kept. + If set to ``null`` , the sourcetype field is omitted from the forwarded event entirely. + Otherwise, the provided string value is used as the sourcetype. + :type sourcetype: str, none_type, optional + + :param type: Type of the Splunk HTTP Event Collector (HEC) destination. + :type type: CustomDestinationForwardDestinationSplunkType + """ + if sourcetype is not unset: + kwargs["sourcetype"] = sourcetype + super().__init__(kwargs) + + + self_.access_token = access_token + self_.endpoint = endpoint + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_forward_destination_splunk_type.py b/datadog_api_client/v2/model/custom_destination_forward_destination_splunk_type.py new file mode 100644 index 0000000000..18a5d3ed65 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_forward_destination_splunk_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationForwardDestinationSplunkType(ModelSimple): + """ + Type of the Splunk HTTP Event Collector (HEC) destination. + + :param value: If omitted defaults to "splunk_hec". Must be one of ["splunk_hec"]. + :type value: str + """ + + allowed_values = { + "splunk_hec", + } + SPLUNK_HEC: ClassVar["CustomDestinationForwardDestinationSplunkType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationForwardDestinationSplunkType.SPLUNK_HEC = CustomDestinationForwardDestinationSplunkType("splunk_hec") diff --git a/datadog_api_client/v2/model/custom_destination_http_destination_auth.py b/datadog_api_client/v2/model/custom_destination_http_destination_auth.py new file mode 100644 index 0000000000..f5101cf47c --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_http_destination_auth.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomDestinationHttpDestinationAuth(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Authentication method of the HTTP requests. + + :param password: The password of the authentication. This field is not returned by the API. + :type password: str + + :param type: Type of the basic access authentication. + :type type: CustomDestinationHttpDestinationAuthBasicType + + :param username: The username of the authentication. This field is not returned by the API. + :type username: str + + :param header_name: The header name of the authentication. + :type header_name: str + + :param header_value: The header value of the authentication. This field is not returned by the API. + :type header_value: str + """ + 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.custom_destination_http_destination_auth_basic import CustomDestinationHttpDestinationAuthBasic + from datadog_api_client.v2.model.custom_destination_http_destination_auth_custom_header import CustomDestinationHttpDestinationAuthCustomHeader + return { + "oneOf": [ + CustomDestinationHttpDestinationAuthBasic, + CustomDestinationHttpDestinationAuthCustomHeader, + ], + } diff --git a/datadog_api_client/v2/model/custom_destination_http_destination_auth_basic.py b/datadog_api_client/v2/model/custom_destination_http_destination_auth_basic.py new file mode 100644 index 0000000000..db47dbf83e --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_http_destination_auth_basic.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_http_destination_auth_basic_type import CustomDestinationHttpDestinationAuthBasicType + +class CustomDestinationHttpDestinationAuthBasic(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_http_destination_auth_basic_type import CustomDestinationHttpDestinationAuthBasicType + return { + "password": (str,), + "type": (CustomDestinationHttpDestinationAuthBasicType,), + "username": (str,), + } + attribute_map = { + "password": "password", + "type": "type", + "username": "username", + } + + def __init__(self_, password: str, type: CustomDestinationHttpDestinationAuthBasicType, username: str, **kwargs): + """ + Basic access authentication. + + :param password: The password of the authentication. This field is not returned by the API. + :type password: str + + :param type: Type of the basic access authentication. + :type type: CustomDestinationHttpDestinationAuthBasicType + + :param username: The username of the authentication. This field is not returned by the API. + :type username: str + """ + super().__init__(kwargs) + + + self_.password = password + self_.type = type + self_.username = username diff --git a/datadog_api_client/v2/model/custom_destination_http_destination_auth_basic_type.py b/datadog_api_client/v2/model/custom_destination_http_destination_auth_basic_type.py new file mode 100644 index 0000000000..f5919ad5d6 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_http_destination_auth_basic_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationHttpDestinationAuthBasicType(ModelSimple): + """ + Type of the basic access authentication. + + :param value: If omitted defaults to "basic". Must be one of ["basic"]. + :type value: str + """ + + allowed_values = { + "basic", + } + BASIC: ClassVar["CustomDestinationHttpDestinationAuthBasicType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationHttpDestinationAuthBasicType.BASIC = CustomDestinationHttpDestinationAuthBasicType("basic") diff --git a/datadog_api_client/v2/model/custom_destination_http_destination_auth_custom_header.py b/datadog_api_client/v2/model/custom_destination_http_destination_auth_custom_header.py new file mode 100644 index 0000000000..ae9e1af723 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_http_destination_auth_custom_header.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_http_destination_auth_custom_header_type import CustomDestinationHttpDestinationAuthCustomHeaderType + +class CustomDestinationHttpDestinationAuthCustomHeader(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_http_destination_auth_custom_header_type import CustomDestinationHttpDestinationAuthCustomHeaderType + return { + "header_name": (str,), + "header_value": (str,), + "type": (CustomDestinationHttpDestinationAuthCustomHeaderType,), + } + attribute_map = { + "header_name": "header_name", + "header_value": "header_value", + "type": "type", + } + + def __init__(self_, header_name: str, header_value: str, type: CustomDestinationHttpDestinationAuthCustomHeaderType, **kwargs): + """ + Custom header access authentication. + + :param header_name: The header name of the authentication. + :type header_name: str + + :param header_value: The header value of the authentication. This field is not returned by the API. + :type header_value: str + + :param type: Type of the custom header access authentication. + :type type: CustomDestinationHttpDestinationAuthCustomHeaderType + """ + super().__init__(kwargs) + + + self_.header_name = header_name + self_.header_value = header_value + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_http_destination_auth_custom_header_type.py b/datadog_api_client/v2/model/custom_destination_http_destination_auth_custom_header_type.py new file mode 100644 index 0000000000..afd3030272 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_http_destination_auth_custom_header_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationHttpDestinationAuthCustomHeaderType(ModelSimple): + """ + Type of the custom header access authentication. + + :param value: If omitted defaults to "custom_header". Must be one of ["custom_header"]. + :type value: str + """ + + allowed_values = { + "custom_header", + } + CUSTOM_HEADER: ClassVar["CustomDestinationHttpDestinationAuthCustomHeaderType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationHttpDestinationAuthCustomHeaderType.CUSTOM_HEADER = CustomDestinationHttpDestinationAuthCustomHeaderType("custom_header") diff --git a/datadog_api_client/v2/model/custom_destination_response.py b/datadog_api_client/v2/model/custom_destination_response.py new file mode 100644 index 0000000000..acf712e2fa --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_response_definition import CustomDestinationResponseDefinition + from datadog_api_client.v2.model.custom_destination_response_forward_destination_http import CustomDestinationResponseForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_response_forward_destination_splunk import CustomDestinationResponseForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_response_forward_destination_elasticsearch import CustomDestinationResponseForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_response_forward_destination_microsoft_sentinel import CustomDestinationResponseForwardDestinationMicrosoftSentinel + +class CustomDestinationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_response_definition import CustomDestinationResponseDefinition + return { + "data": (CustomDestinationResponseDefinition,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CustomDestinationResponseDefinition, UnsetType]=unset, **kwargs): + """ + The custom destination. + + :param data: The definition of a custom destination. + :type data: CustomDestinationResponseDefinition, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_destination_response_attributes.py b/datadog_api_client/v2/model/custom_destination_response_attributes.py new file mode 100644 index 0000000000..be0f9f5f22 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_attributes.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_attribute_tags_restriction_list_type import CustomDestinationAttributeTagsRestrictionListType + from datadog_api_client.v2.model.custom_destination_response_forward_destination import CustomDestinationResponseForwardDestination + from datadog_api_client.v2.model.custom_destination_response_forward_destination_http import CustomDestinationResponseForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_response_forward_destination_splunk import CustomDestinationResponseForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_response_forward_destination_elasticsearch import CustomDestinationResponseForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_response_forward_destination_microsoft_sentinel import CustomDestinationResponseForwardDestinationMicrosoftSentinel + +class CustomDestinationResponseAttributes(ModelNormal): + validations = { + "forward_tags_restriction_list": { + "max_items": 10, + "min_items": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_attribute_tags_restriction_list_type import CustomDestinationAttributeTagsRestrictionListType + from datadog_api_client.v2.model.custom_destination_response_forward_destination import CustomDestinationResponseForwardDestination + return { + "enabled": (bool,), + "forward_tags": (bool,), + "forward_tags_restriction_list": ([str],), + "forward_tags_restriction_list_type": (CustomDestinationAttributeTagsRestrictionListType,), + "forwarder_destination": (CustomDestinationResponseForwardDestination,), + "name": (str,), + "query": (str,), + } + attribute_map = { + "enabled": "enabled", + "forward_tags": "forward_tags", + "forward_tags_restriction_list": "forward_tags_restriction_list", + "forward_tags_restriction_list_type": "forward_tags_restriction_list_type", + "forwarder_destination": "forwarder_destination", + "name": "name", + "query": "query", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, forward_tags: Union[bool, UnsetType]=unset, forward_tags_restriction_list: Union[List[str], UnsetType]=unset, forward_tags_restriction_list_type: Union[CustomDestinationAttributeTagsRestrictionListType, UnsetType]=unset, forwarder_destination: Union[CustomDestinationResponseForwardDestination, CustomDestinationResponseForwardDestinationHttp, CustomDestinationResponseForwardDestinationSplunk, CustomDestinationResponseForwardDestinationElasticsearch, CustomDestinationResponseForwardDestinationMicrosoftSentinel, UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes associated with the custom destination. + + :param enabled: Whether logs matching this custom destination should be forwarded or not. + :type enabled: bool, optional + + :param forward_tags: Whether tags from the forwarded logs should be forwarded or not. + :type forward_tags: bool, optional + + :param forward_tags_restriction_list: List of `keys of tags `_ to be filtered. + + An empty list represents no restriction is in place and either all or no tags will be + forwarded depending on ``forward_tags_restriction_list_type`` parameter. + :type forward_tags_restriction_list: [str], optional + + :param forward_tags_restriction_list_type: How ``forward_tags_restriction_list`` parameter should be interpreted. + If ``ALLOW_LIST`` , then only tags whose keys on the forwarded logs match the ones on the restriction list + are forwarded. + + ``BLOCK_LIST`` works the opposite way. It does not forward the tags matching the ones on the list. + :type forward_tags_restriction_list_type: CustomDestinationAttributeTagsRestrictionListType, optional + + :param forwarder_destination: A custom destination's location to forward logs. + :type forwarder_destination: CustomDestinationResponseForwardDestination, optional + + :param name: The custom destination name. + :type name: str, optional + + :param query: The custom destination query filter. Logs matching this query are forwarded to the destination. + :type query: str, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if forward_tags is not unset: + kwargs["forward_tags"] = forward_tags + if forward_tags_restriction_list is not unset: + kwargs["forward_tags_restriction_list"] = forward_tags_restriction_list + if forward_tags_restriction_list_type is not unset: + kwargs["forward_tags_restriction_list_type"] = forward_tags_restriction_list_type + if forwarder_destination is not unset: + kwargs["forwarder_destination"] = forwarder_destination + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_destination_response_definition.py b/datadog_api_client/v2/model/custom_destination_response_definition.py new file mode 100644 index 0000000000..e8543fe3b0 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_definition.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_response_attributes import CustomDestinationResponseAttributes + from datadog_api_client.v2.model.custom_destination_type import CustomDestinationType + from datadog_api_client.v2.model.custom_destination_response_forward_destination_http import CustomDestinationResponseForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_response_forward_destination_splunk import CustomDestinationResponseForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_response_forward_destination_elasticsearch import CustomDestinationResponseForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_response_forward_destination_microsoft_sentinel import CustomDestinationResponseForwardDestinationMicrosoftSentinel + +class CustomDestinationResponseDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_response_attributes import CustomDestinationResponseAttributes + from datadog_api_client.v2.model.custom_destination_type import CustomDestinationType + return { + "attributes": (CustomDestinationResponseAttributes,), + "id": (str,), + "type": (CustomDestinationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: Union[CustomDestinationResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CustomDestinationType, UnsetType]=unset, **kwargs): + """ + The definition of a custom destination. + + :param attributes: The attributes associated with the custom destination. + :type attributes: CustomDestinationResponseAttributes, optional + + :param id: The custom destination ID. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``custom_destination``. + :type type: CustomDestinationType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_destination_response_elasticsearch_destination_auth.py b/datadog_api_client/v2/model/custom_destination_response_elasticsearch_destination_auth.py new file mode 100644 index 0000000000..69deb61a48 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_elasticsearch_destination_auth.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomDestinationResponseElasticsearchDestinationAuth(ModelNormal): + @cached_property + def additional_properties_type(_): + return (bool, date, datetime, dict, float, int, list, str, UUID, none_type,) + + def __init__(self_, **kwargs): + """ + Basic access authentication. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_destination_response_forward_destination.py b/datadog_api_client/v2/model/custom_destination_response_forward_destination.py new file mode 100644 index 0000000000..ed6402138d --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_forward_destination.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomDestinationResponseForwardDestination(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A custom destination's location to forward logs. + + :param auth: Authentication method of the HTTP requests. + :type auth: CustomDestinationResponseHttpDestinationAuth + + :param endpoint: The destination for which logs will be forwarded to. + Must have HTTPS scheme and forwarding back to Datadog is not allowed. + :type endpoint: str + + :param type: Type of the HTTP destination. + :type type: CustomDestinationResponseForwardDestinationHttpType + + :param sourcetype: The Splunk sourcetype for the events sent to this Splunk destination. + + If the field is absent from the request and no sourcetype has been previously set on this destination, the default sourcetype `_json` is used. + On update, if the field is absent from the request but a sourcetype was previously set, the previous value is kept. + If set to `null`, the sourcetype field is omitted from the forwarded event entirely. + Otherwise, the provided string value is used as the sourcetype. + :type sourcetype: str, none_type, optional + + :param index_name: Name of the Elasticsearch index (must follow [Elasticsearch's criteria](https://www.elastic.co/guide/en/elasticsearch/reference/8.11/indices-create-index.html#indices-create-api-path-params)). + :type index_name: str + + :param index_rotation: Date pattern with US locale and UTC timezone to be appended to the index name after adding `-` + (that is, `${index_name}-${indexPattern}`). + You can customize the index rotation naming pattern by choosing one of these options: + - Hourly: `yyyy-MM-dd-HH` (as an example, it would render: `2022-10-19-09`) + - Daily: `yyyy-MM-dd` (as an example, it would render: `2022-10-19`) + - Weekly: `yyyy-'W'ww` (as an example, it would render: `2022-W42`) + - Monthly: `yyyy-MM` (as an example, it would render: `2022-10`) + + If this field is missing or is blank, it means that the index name will always be the same + (that is, no rotation). + :type index_rotation: str, optional + + :param client_id: Client ID from the Datadog Azure integration. + :type client_id: str + + :param data_collection_endpoint: Azure data collection endpoint. + :type data_collection_endpoint: str + + :param data_collection_rule_id: Azure data collection rule ID. + :type data_collection_rule_id: str + + :param stream_name: Azure stream name. + :type stream_name: str + + :param tenant_id: Tenant ID from the Datadog Azure integration. + :type tenant_id: str + """ + 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.custom_destination_response_forward_destination_http import CustomDestinationResponseForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_response_forward_destination_splunk import CustomDestinationResponseForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_response_forward_destination_elasticsearch import CustomDestinationResponseForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_response_forward_destination_microsoft_sentinel import CustomDestinationResponseForwardDestinationMicrosoftSentinel + return { + "oneOf": [ + CustomDestinationResponseForwardDestinationHttp, + CustomDestinationResponseForwardDestinationSplunk, + CustomDestinationResponseForwardDestinationElasticsearch, + CustomDestinationResponseForwardDestinationMicrosoftSentinel, + ], + } diff --git a/datadog_api_client/v2/model/custom_destination_response_forward_destination_elasticsearch.py b/datadog_api_client/v2/model/custom_destination_response_forward_destination_elasticsearch.py new file mode 100644 index 0000000000..bed7e2d163 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_forward_destination_elasticsearch.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_response_elasticsearch_destination_auth import CustomDestinationResponseElasticsearchDestinationAuth + from datadog_api_client.v2.model.custom_destination_response_forward_destination_elasticsearch_type import CustomDestinationResponseForwardDestinationElasticsearchType + +class CustomDestinationResponseForwardDestinationElasticsearch(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_response_elasticsearch_destination_auth import CustomDestinationResponseElasticsearchDestinationAuth + from datadog_api_client.v2.model.custom_destination_response_forward_destination_elasticsearch_type import CustomDestinationResponseForwardDestinationElasticsearchType + return { + "auth": (CustomDestinationResponseElasticsearchDestinationAuth,), + "endpoint": (str,), + "index_name": (str,), + "index_rotation": (str,), + "type": (CustomDestinationResponseForwardDestinationElasticsearchType,), + } + attribute_map = { + "auth": "auth", + "endpoint": "endpoint", + "index_name": "index_name", + "index_rotation": "index_rotation", + "type": "type", + } + + def __init__(self_, auth: CustomDestinationResponseElasticsearchDestinationAuth, endpoint: str, index_name: str, type: CustomDestinationResponseForwardDestinationElasticsearchType, index_rotation: Union[str, UnsetType]=unset, **kwargs): + """ + The Elasticsearch destination. + + :param auth: Basic access authentication. + :type auth: CustomDestinationResponseElasticsearchDestinationAuth + + :param endpoint: The destination for which logs will be forwarded to. + Must have HTTPS scheme and forwarding back to Datadog is not allowed. + :type endpoint: str + + :param index_name: Name of the Elasticsearch index (must follow `Elasticsearch's criteria `_ ). + :type index_name: str + + :param index_rotation: Date pattern with US locale and UTC timezone to be appended to the index name after adding ``-`` + (that is, ``${index_name}-${indexPattern}`` ). + You can customize the index rotation naming pattern by choosing one of these options: + + * Hourly: ``yyyy-MM-dd-HH`` (as an example, it would render: ``2022-10-19-09`` ) + * Daily: ``yyyy-MM-dd`` (as an example, it would render: ``2022-10-19`` ) + * Weekly: ``yyyy-'W'ww`` (as an example, it would render: ``2022-W42`` ) + * Monthly: ``yyyy-MM`` (as an example, it would render: ``2022-10`` ) + + If this field is missing or is blank, it means that the index name will always be the same + (that is, no rotation). + :type index_rotation: str, optional + + :param type: Type of the Elasticsearch destination. + :type type: CustomDestinationResponseForwardDestinationElasticsearchType + """ + if index_rotation is not unset: + kwargs["index_rotation"] = index_rotation + super().__init__(kwargs) + + + self_.auth = auth + self_.endpoint = endpoint + self_.index_name = index_name + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_response_forward_destination_elasticsearch_type.py b/datadog_api_client/v2/model/custom_destination_response_forward_destination_elasticsearch_type.py new file mode 100644 index 0000000000..c4b62184bf --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_forward_destination_elasticsearch_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationResponseForwardDestinationElasticsearchType(ModelSimple): + """ + Type of the Elasticsearch destination. + + :param value: If omitted defaults to "elasticsearch". Must be one of ["elasticsearch"]. + :type value: str + """ + + allowed_values = { + "elasticsearch", + } + ELASTICSEARCH: ClassVar["CustomDestinationResponseForwardDestinationElasticsearchType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationResponseForwardDestinationElasticsearchType.ELASTICSEARCH = CustomDestinationResponseForwardDestinationElasticsearchType("elasticsearch") diff --git a/datadog_api_client/v2/model/custom_destination_response_forward_destination_http.py b/datadog_api_client/v2/model/custom_destination_response_forward_destination_http.py new file mode 100644 index 0000000000..631bc1ab20 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_forward_destination_http.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_response_http_destination_auth import CustomDestinationResponseHttpDestinationAuth + from datadog_api_client.v2.model.custom_destination_response_forward_destination_http_type import CustomDestinationResponseForwardDestinationHttpType + from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_basic import CustomDestinationResponseHttpDestinationAuthBasic + from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_custom_header import CustomDestinationResponseHttpDestinationAuthCustomHeader + +class CustomDestinationResponseForwardDestinationHttp(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_response_http_destination_auth import CustomDestinationResponseHttpDestinationAuth + from datadog_api_client.v2.model.custom_destination_response_forward_destination_http_type import CustomDestinationResponseForwardDestinationHttpType + return { + "auth": (CustomDestinationResponseHttpDestinationAuth,), + "endpoint": (str,), + "type": (CustomDestinationResponseForwardDestinationHttpType,), + } + attribute_map = { + "auth": "auth", + "endpoint": "endpoint", + "type": "type", + } + + def __init__(self_, auth: Union[CustomDestinationResponseHttpDestinationAuth, CustomDestinationResponseHttpDestinationAuthBasic, CustomDestinationResponseHttpDestinationAuthCustomHeader], endpoint: str, type: CustomDestinationResponseForwardDestinationHttpType, **kwargs): + """ + The HTTP destination. + + :param auth: Authentication method of the HTTP requests. + :type auth: CustomDestinationResponseHttpDestinationAuth + + :param endpoint: The destination for which logs will be forwarded to. + Must have HTTPS scheme and forwarding back to Datadog is not allowed. + :type endpoint: str + + :param type: Type of the HTTP destination. + :type type: CustomDestinationResponseForwardDestinationHttpType + """ + super().__init__(kwargs) + + + self_.auth = auth + self_.endpoint = endpoint + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_response_forward_destination_http_type.py b/datadog_api_client/v2/model/custom_destination_response_forward_destination_http_type.py new file mode 100644 index 0000000000..b52156ded7 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_forward_destination_http_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationResponseForwardDestinationHttpType(ModelSimple): + """ + Type of the HTTP destination. + + :param value: If omitted defaults to "http". Must be one of ["http"]. + :type value: str + """ + + allowed_values = { + "http", + } + HTTP: ClassVar["CustomDestinationResponseForwardDestinationHttpType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationResponseForwardDestinationHttpType.HTTP = CustomDestinationResponseForwardDestinationHttpType("http") diff --git a/datadog_api_client/v2/model/custom_destination_response_forward_destination_microsoft_sentinel.py b/datadog_api_client/v2/model/custom_destination_response_forward_destination_microsoft_sentinel.py new file mode 100644 index 0000000000..ed22d8995a --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_forward_destination_microsoft_sentinel.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_response_forward_destination_microsoft_sentinel_type import CustomDestinationResponseForwardDestinationMicrosoftSentinelType + +class CustomDestinationResponseForwardDestinationMicrosoftSentinel(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_response_forward_destination_microsoft_sentinel_type import CustomDestinationResponseForwardDestinationMicrosoftSentinelType + return { + "client_id": (str,), + "data_collection_endpoint": (str,), + "data_collection_rule_id": (str,), + "stream_name": (str,), + "tenant_id": (str,), + "type": (CustomDestinationResponseForwardDestinationMicrosoftSentinelType,), + } + attribute_map = { + "client_id": "client_id", + "data_collection_endpoint": "data_collection_endpoint", + "data_collection_rule_id": "data_collection_rule_id", + "stream_name": "stream_name", + "tenant_id": "tenant_id", + "type": "type", + } + + def __init__(self_, client_id: str, data_collection_endpoint: str, data_collection_rule_id: str, stream_name: str, tenant_id: str, type: CustomDestinationResponseForwardDestinationMicrosoftSentinelType, **kwargs): + """ + The Microsoft Sentinel destination. + + :param client_id: Client ID from the Datadog Azure integration. + :type client_id: str + + :param data_collection_endpoint: Azure data collection endpoint. + :type data_collection_endpoint: str + + :param data_collection_rule_id: Azure data collection rule ID. + :type data_collection_rule_id: str + + :param stream_name: Azure stream name. + :type stream_name: str + + :param tenant_id: Tenant ID from the Datadog Azure integration. + :type tenant_id: str + + :param type: Type of the Microsoft Sentinel destination. + :type type: CustomDestinationResponseForwardDestinationMicrosoftSentinelType + """ + super().__init__(kwargs) + + + self_.client_id = client_id + self_.data_collection_endpoint = data_collection_endpoint + self_.data_collection_rule_id = data_collection_rule_id + self_.stream_name = stream_name + self_.tenant_id = tenant_id + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_response_forward_destination_microsoft_sentinel_type.py b/datadog_api_client/v2/model/custom_destination_response_forward_destination_microsoft_sentinel_type.py new file mode 100644 index 0000000000..955e134b3f --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_forward_destination_microsoft_sentinel_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationResponseForwardDestinationMicrosoftSentinelType(ModelSimple): + """ + Type of the Microsoft Sentinel destination. + + :param value: If omitted defaults to "microsoft_sentinel". Must be one of ["microsoft_sentinel"]. + :type value: str + """ + + allowed_values = { + "microsoft_sentinel", + } + MICROSOFT_SENTINEL: ClassVar["CustomDestinationResponseForwardDestinationMicrosoftSentinelType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationResponseForwardDestinationMicrosoftSentinelType.MICROSOFT_SENTINEL = CustomDestinationResponseForwardDestinationMicrosoftSentinelType("microsoft_sentinel") diff --git a/datadog_api_client/v2/model/custom_destination_response_forward_destination_splunk.py b/datadog_api_client/v2/model/custom_destination_response_forward_destination_splunk.py new file mode 100644 index 0000000000..aef8e952bb --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_forward_destination_splunk.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_response_forward_destination_splunk_type import CustomDestinationResponseForwardDestinationSplunkType + +class CustomDestinationResponseForwardDestinationSplunk(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_response_forward_destination_splunk_type import CustomDestinationResponseForwardDestinationSplunkType + return { + "endpoint": (str,), + "sourcetype": (str, none_type), + "type": (CustomDestinationResponseForwardDestinationSplunkType,), + } + attribute_map = { + "endpoint": "endpoint", + "sourcetype": "sourcetype", + "type": "type", + } + + def __init__(self_, endpoint: str, type: CustomDestinationResponseForwardDestinationSplunkType, sourcetype: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The Splunk HTTP Event Collector (HEC) destination. + + :param endpoint: The destination for which logs will be forwarded to. + Must have HTTPS scheme and forwarding back to Datadog is not allowed. + :type endpoint: str + + :param sourcetype: The Splunk sourcetype for the events sent to this Splunk destination. + + If the field is absent from the request and no sourcetype has been previously set on this destination, the default sourcetype ``_json`` is used. + On update, if the field is absent from the request but a sourcetype was previously set, the previous value is kept. + If set to ``null`` , the sourcetype field is omitted from the forwarded event entirely. + Otherwise, the provided string value is used as the sourcetype. + :type sourcetype: str, none_type, optional + + :param type: Type of the Splunk HTTP Event Collector (HEC) destination. + :type type: CustomDestinationResponseForwardDestinationSplunkType + """ + if sourcetype is not unset: + kwargs["sourcetype"] = sourcetype + super().__init__(kwargs) + + + self_.endpoint = endpoint + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_response_forward_destination_splunk_type.py b/datadog_api_client/v2/model/custom_destination_response_forward_destination_splunk_type.py new file mode 100644 index 0000000000..f1576a5528 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_forward_destination_splunk_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationResponseForwardDestinationSplunkType(ModelSimple): + """ + Type of the Splunk HTTP Event Collector (HEC) destination. + + :param value: If omitted defaults to "splunk_hec". Must be one of ["splunk_hec"]. + :type value: str + """ + + allowed_values = { + "splunk_hec", + } + SPLUNK_HEC: ClassVar["CustomDestinationResponseForwardDestinationSplunkType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationResponseForwardDestinationSplunkType.SPLUNK_HEC = CustomDestinationResponseForwardDestinationSplunkType("splunk_hec") diff --git a/datadog_api_client/v2/model/custom_destination_response_http_destination_auth.py b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth.py new file mode 100644 index 0000000000..e0193b54ba --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomDestinationResponseHttpDestinationAuth(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Authentication method of the HTTP requests. + + :param type: Type of the basic access authentication. + :type type: CustomDestinationResponseHttpDestinationAuthBasicType + + :param header_name: The header name of the authentication. + :type header_name: str + """ + 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.custom_destination_response_http_destination_auth_basic import CustomDestinationResponseHttpDestinationAuthBasic + from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_custom_header import CustomDestinationResponseHttpDestinationAuthCustomHeader + return { + "oneOf": [ + CustomDestinationResponseHttpDestinationAuthBasic, + CustomDestinationResponseHttpDestinationAuthCustomHeader, + ], + } diff --git a/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_basic.py b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_basic.py new file mode 100644 index 0000000000..728726040e --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_basic.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_basic_type import CustomDestinationResponseHttpDestinationAuthBasicType + +class CustomDestinationResponseHttpDestinationAuthBasic(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_basic_type import CustomDestinationResponseHttpDestinationAuthBasicType + return { + "type": (CustomDestinationResponseHttpDestinationAuthBasicType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: CustomDestinationResponseHttpDestinationAuthBasicType, **kwargs): + """ + Basic access authentication. + + :param type: Type of the basic access authentication. + :type type: CustomDestinationResponseHttpDestinationAuthBasicType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_basic_type.py b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_basic_type.py new file mode 100644 index 0000000000..aa0b89d050 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_basic_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationResponseHttpDestinationAuthBasicType(ModelSimple): + """ + Type of the basic access authentication. + + :param value: If omitted defaults to "basic". Must be one of ["basic"]. + :type value: str + """ + + allowed_values = { + "basic", + } + BASIC: ClassVar["CustomDestinationResponseHttpDestinationAuthBasicType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationResponseHttpDestinationAuthBasicType.BASIC = CustomDestinationResponseHttpDestinationAuthBasicType("basic") diff --git a/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_custom_header.py b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_custom_header.py new file mode 100644 index 0000000000..18fed8fae6 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_custom_header.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_custom_header_type import CustomDestinationResponseHttpDestinationAuthCustomHeaderType + +class CustomDestinationResponseHttpDestinationAuthCustomHeader(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_custom_header_type import CustomDestinationResponseHttpDestinationAuthCustomHeaderType + return { + "header_name": (str,), + "type": (CustomDestinationResponseHttpDestinationAuthCustomHeaderType,), + } + attribute_map = { + "header_name": "header_name", + "type": "type", + } + + def __init__(self_, header_name: str, type: CustomDestinationResponseHttpDestinationAuthCustomHeaderType, **kwargs): + """ + Custom header access authentication. + + :param header_name: The header name of the authentication. + :type header_name: str + + :param type: Type of the custom header access authentication. + :type type: CustomDestinationResponseHttpDestinationAuthCustomHeaderType + """ + super().__init__(kwargs) + + + self_.header_name = header_name + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_custom_header_type.py b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_custom_header_type.py new file mode 100644 index 0000000000..abc1dbf3c6 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_response_http_destination_auth_custom_header_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationResponseHttpDestinationAuthCustomHeaderType(ModelSimple): + """ + Type of the custom header access authentication. + + :param value: If omitted defaults to "custom_header". Must be one of ["custom_header"]. + :type value: str + """ + + allowed_values = { + "custom_header", + } + CUSTOM_HEADER: ClassVar["CustomDestinationResponseHttpDestinationAuthCustomHeaderType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationResponseHttpDestinationAuthCustomHeaderType.CUSTOM_HEADER = CustomDestinationResponseHttpDestinationAuthCustomHeaderType("custom_header") diff --git a/datadog_api_client/v2/model/custom_destination_type.py b/datadog_api_client/v2/model/custom_destination_type.py new file mode 100644 index 0000000000..9351f70a77 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomDestinationType(ModelSimple): + """ + The type of the resource. The value should always be `custom_destination`. + + :param value: If omitted defaults to "custom_destination". Must be one of ["custom_destination"]. + :type value: str + """ + + allowed_values = { + "custom_destination", + } + CUSTOM_DESTINATION: ClassVar["CustomDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomDestinationType.CUSTOM_DESTINATION = CustomDestinationType("custom_destination") diff --git a/datadog_api_client/v2/model/custom_destination_update_request.py b/datadog_api_client/v2/model/custom_destination_update_request.py new file mode 100644 index 0000000000..c4c02c0d52 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_update_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_update_request_definition import CustomDestinationUpdateRequestDefinition + from datadog_api_client.v2.model.custom_destination_forward_destination_http import CustomDestinationForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_forward_destination_splunk import CustomDestinationForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch import CustomDestinationForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel import CustomDestinationForwardDestinationMicrosoftSentinel + +class CustomDestinationUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_update_request_definition import CustomDestinationUpdateRequestDefinition + return { + "data": (CustomDestinationUpdateRequestDefinition,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CustomDestinationUpdateRequestDefinition, UnsetType]=unset, **kwargs): + """ + The custom destination. + + :param data: The definition of a custom destination. + :type data: CustomDestinationUpdateRequestDefinition, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_destination_update_request_attributes.py b/datadog_api_client/v2/model/custom_destination_update_request_attributes.py new file mode 100644 index 0000000000..2c5d7ad4d4 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_update_request_attributes.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_attribute_tags_restriction_list_type import CustomDestinationAttributeTagsRestrictionListType + from datadog_api_client.v2.model.custom_destination_forward_destination import CustomDestinationForwardDestination + from datadog_api_client.v2.model.custom_destination_forward_destination_http import CustomDestinationForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_forward_destination_splunk import CustomDestinationForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch import CustomDestinationForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel import CustomDestinationForwardDestinationMicrosoftSentinel + +class CustomDestinationUpdateRequestAttributes(ModelNormal): + validations = { + "forward_tags_restriction_list": { + "max_items": 10, + "min_items": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_attribute_tags_restriction_list_type import CustomDestinationAttributeTagsRestrictionListType + from datadog_api_client.v2.model.custom_destination_forward_destination import CustomDestinationForwardDestination + return { + "enabled": (bool,), + "forward_tags": (bool,), + "forward_tags_restriction_list": ([str],), + "forward_tags_restriction_list_type": (CustomDestinationAttributeTagsRestrictionListType,), + "forwarder_destination": (CustomDestinationForwardDestination,), + "name": (str,), + "query": (str,), + } + attribute_map = { + "enabled": "enabled", + "forward_tags": "forward_tags", + "forward_tags_restriction_list": "forward_tags_restriction_list", + "forward_tags_restriction_list_type": "forward_tags_restriction_list_type", + "forwarder_destination": "forwarder_destination", + "name": "name", + "query": "query", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, forward_tags: Union[bool, UnsetType]=unset, forward_tags_restriction_list: Union[List[str], UnsetType]=unset, forward_tags_restriction_list_type: Union[CustomDestinationAttributeTagsRestrictionListType, UnsetType]=unset, forwarder_destination: Union[CustomDestinationForwardDestination, CustomDestinationForwardDestinationHttp, CustomDestinationForwardDestinationSplunk, CustomDestinationForwardDestinationElasticsearch, CustomDestinationForwardDestinationMicrosoftSentinel, UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes associated with the custom destination. + + :param enabled: Whether logs matching this custom destination should be forwarded or not. + :type enabled: bool, optional + + :param forward_tags: Whether tags from the forwarded logs should be forwarded or not. + :type forward_tags: bool, optional + + :param forward_tags_restriction_list: List of `keys of tags `_ to be restricted from being forwarded. + An empty list represents no restriction is in place and either all or no tags will be forwarded depending on ``forward_tags_restriction_list_type`` parameter. + :type forward_tags_restriction_list: [str], optional + + :param forward_tags_restriction_list_type: How ``forward_tags_restriction_list`` parameter should be interpreted. + If ``ALLOW_LIST`` , then only tags whose keys on the forwarded logs match the ones on the restriction list + are forwarded. + + ``BLOCK_LIST`` works the opposite way. It does not forward the tags matching the ones on the list. + :type forward_tags_restriction_list_type: CustomDestinationAttributeTagsRestrictionListType, optional + + :param forwarder_destination: A custom destination's location to forward logs. + :type forwarder_destination: CustomDestinationForwardDestination, optional + + :param name: The custom destination name. + :type name: str, optional + + :param query: The custom destination query and filter. Logs matching this query are forwarded to the destination. + :type query: str, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if forward_tags is not unset: + kwargs["forward_tags"] = forward_tags + if forward_tags_restriction_list is not unset: + kwargs["forward_tags_restriction_list"] = forward_tags_restriction_list + if forward_tags_restriction_list_type is not unset: + kwargs["forward_tags_restriction_list_type"] = forward_tags_restriction_list_type + if forwarder_destination is not unset: + kwargs["forwarder_destination"] = forwarder_destination + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_destination_update_request_definition.py b/datadog_api_client/v2/model/custom_destination_update_request_definition.py new file mode 100644 index 0000000000..03eb83c339 --- /dev/null +++ b/datadog_api_client/v2/model/custom_destination_update_request_definition.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_update_request_attributes import CustomDestinationUpdateRequestAttributes + from datadog_api_client.v2.model.custom_destination_type import CustomDestinationType + from datadog_api_client.v2.model.custom_destination_forward_destination_http import CustomDestinationForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_forward_destination_splunk import CustomDestinationForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch import CustomDestinationForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel import CustomDestinationForwardDestinationMicrosoftSentinel + +class CustomDestinationUpdateRequestDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_update_request_attributes import CustomDestinationUpdateRequestAttributes + from datadog_api_client.v2.model.custom_destination_type import CustomDestinationType + return { + "attributes": (CustomDestinationUpdateRequestAttributes,), + "id": (str,), + "type": (CustomDestinationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: CustomDestinationType, attributes: Union[CustomDestinationUpdateRequestAttributes, UnsetType]=unset, **kwargs): + """ + The definition of a custom destination. + + :param attributes: The attributes associated with the custom destination. + :type attributes: CustomDestinationUpdateRequestAttributes, optional + + :param id: The custom destination ID. + :type id: str + + :param type: The type of the resource. The value should always be ``custom_destination``. + :type type: CustomDestinationType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/custom_destinations_response.py b/datadog_api_client/v2/model/custom_destinations_response.py new file mode 100644 index 0000000000..4f5fc1830e --- /dev/null +++ b/datadog_api_client/v2/model/custom_destinations_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_destination_response_definition import CustomDestinationResponseDefinition + from datadog_api_client.v2.model.custom_destination_response_forward_destination_http import CustomDestinationResponseForwardDestinationHttp + from datadog_api_client.v2.model.custom_destination_response_forward_destination_splunk import CustomDestinationResponseForwardDestinationSplunk + from datadog_api_client.v2.model.custom_destination_response_forward_destination_elasticsearch import CustomDestinationResponseForwardDestinationElasticsearch + from datadog_api_client.v2.model.custom_destination_response_forward_destination_microsoft_sentinel import CustomDestinationResponseForwardDestinationMicrosoftSentinel + +class CustomDestinationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_destination_response_definition import CustomDestinationResponseDefinition + return { + "data": ([CustomDestinationResponseDefinition],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[CustomDestinationResponseDefinition], UnsetType]=unset, **kwargs): + """ + The available custom destinations. + + :param data: A list of custom destinations. + :type data: [CustomDestinationResponseDefinition], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_forecast_entry.py b/datadog_api_client/v2/model/custom_forecast_entry.py new file mode 100644 index 0000000000..9a72dd3f6d --- /dev/null +++ b/datadog_api_client/v2/model/custom_forecast_entry.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_forecast_entry_tag_filter import CustomForecastEntryTagFilter + +class CustomForecastEntry(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_forecast_entry_tag_filter import CustomForecastEntryTagFilter + return { + "amount": (float,), + "month": (int,), + "tag_filters": ([CustomForecastEntryTagFilter],), + } + attribute_map = { + "amount": "amount", + "month": "month", + "tag_filters": "tag_filters", + } + + def __init__(self_, amount: float, month: int, tag_filters: List[CustomForecastEntryTagFilter], **kwargs): + """ + A monthly entry of a custom budget forecast. + + :param amount: Forecast amount for the month. + :type amount: float + + :param month: Month the custom forecast entry applies to, in ``YYYYMM`` format. + :type month: int + + :param tag_filters: Tag filters that scope this custom forecast entry to specific resources. + :type tag_filters: [CustomForecastEntryTagFilter] + """ + super().__init__(kwargs) + + + self_.amount = amount + self_.month = month + self_.tag_filters = tag_filters diff --git a/datadog_api_client/v2/model/custom_forecast_entry_tag_filter.py b/datadog_api_client/v2/model/custom_forecast_entry_tag_filter.py new file mode 100644 index 0000000000..29a8ad3c4a --- /dev/null +++ b/datadog_api_client/v2/model/custom_forecast_entry_tag_filter.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomForecastEntryTagFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "tag_key": (str,), + "tag_value": (str,), + } + attribute_map = { + "tag_key": "tag_key", + "tag_value": "tag_value", + } + + def __init__(self_, tag_key: str, tag_value: str, **kwargs): + """ + A tag filter that scopes a custom forecast entry to specific resource tags. + + :param tag_key: The tag key to filter on. + :type tag_key: str + + :param tag_value: The tag value to filter on. + :type tag_value: str + """ + super().__init__(kwargs) + + + self_.tag_key = tag_key + self_.tag_value = tag_value diff --git a/datadog_api_client/v2/model/custom_forecast_response.py b/datadog_api_client/v2/model/custom_forecast_response.py new file mode 100644 index 0000000000..d4d031c08c --- /dev/null +++ b/datadog_api_client/v2/model/custom_forecast_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_forecast_response_data import CustomForecastResponseData + +class CustomForecastResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_forecast_response_data import CustomForecastResponseData + return { + "data": (CustomForecastResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomForecastResponseData, **kwargs): + """ + Response object containing the custom forecast for a budget. + + :param data: Custom forecast resource wrapper in a response. + :type data: CustomForecastResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/custom_forecast_response_data.py b/datadog_api_client/v2/model/custom_forecast_response_data.py new file mode 100644 index 0000000000..dc3fafec59 --- /dev/null +++ b/datadog_api_client/v2/model/custom_forecast_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_forecast_response_data_attributes import CustomForecastResponseDataAttributes + from datadog_api_client.v2.model.custom_forecast_type import CustomForecastType + +class CustomForecastResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_forecast_response_data_attributes import CustomForecastResponseDataAttributes + from datadog_api_client.v2.model.custom_forecast_type import CustomForecastType + return { + "attributes": (CustomForecastResponseDataAttributes,), + "id": (str,), + "type": (CustomForecastType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CustomForecastResponseDataAttributes, id: str, type: CustomForecastType, **kwargs): + """ + Custom forecast resource wrapper in a response. + + :param attributes: Attributes of a custom forecast. + :type attributes: CustomForecastResponseDataAttributes + + :param id: The unique identifier of the custom forecast. + :type id: str + + :param type: The type of the custom forecast resource. Must be ``custom_forecast``. + :type type: CustomForecastType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/custom_forecast_response_data_attributes.py b/datadog_api_client/v2/model/custom_forecast_response_data_attributes.py new file mode 100644 index 0000000000..96684bb0ae --- /dev/null +++ b/datadog_api_client/v2/model/custom_forecast_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_forecast_entry import CustomForecastEntry + +class CustomForecastResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_forecast_entry import CustomForecastEntry + return { + "budget_uid": (str,), + "created_at": (int,), + "created_by": (str,), + "entries": ([CustomForecastEntry],), + "updated_at": (int,), + "updated_by": (str,), + } + attribute_map = { + "budget_uid": "budget_uid", + "created_at": "created_at", + "created_by": "created_by", + "entries": "entries", + "updated_at": "updated_at", + "updated_by": "updated_by", + } + + def __init__(self_, budget_uid: str, created_at: int, created_by: str, entries: List[CustomForecastEntry], updated_at: int, updated_by: str, **kwargs): + """ + Attributes of a custom forecast. + + :param budget_uid: The UUID of the budget that this custom forecast belongs to. + :type budget_uid: str + + :param created_at: Timestamp the custom forecast was created, in Unix milliseconds. + :type created_at: int + + :param created_by: The id of the user that created the custom forecast. + :type created_by: str + + :param entries: Monthly custom forecast entries. + :type entries: [CustomForecastEntry] + + :param updated_at: Timestamp the custom forecast was last updated, in Unix milliseconds. + :type updated_at: int + + :param updated_by: The id of the user that last updated the custom forecast. + :type updated_by: str + """ + super().__init__(kwargs) + + + self_.budget_uid = budget_uid + self_.created_at = created_at + self_.created_by = created_by + self_.entries = entries + self_.updated_at = updated_at + self_.updated_by = updated_by diff --git a/datadog_api_client/v2/model/custom_forecast_type.py b/datadog_api_client/v2/model/custom_forecast_type.py new file mode 100644 index 0000000000..219258caa6 --- /dev/null +++ b/datadog_api_client/v2/model/custom_forecast_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomForecastType(ModelSimple): + """ + The type of the custom forecast resource. Must be `custom_forecast`. + + :param value: If omitted defaults to "custom_forecast". Must be one of ["custom_forecast"]. + :type value: str + """ + + allowed_values = { + "custom_forecast", + } + CUSTOM_FORECAST: ClassVar["CustomForecastType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomForecastType.CUSTOM_FORECAST = CustomForecastType("custom_forecast") diff --git a/datadog_api_client/v2/model/custom_forecast_upsert_request.py b/datadog_api_client/v2/model/custom_forecast_upsert_request.py new file mode 100644 index 0000000000..d11900fa07 --- /dev/null +++ b/datadog_api_client/v2/model/custom_forecast_upsert_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_forecast_upsert_request_data import CustomForecastUpsertRequestData + +class CustomForecastUpsertRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_forecast_upsert_request_data import CustomForecastUpsertRequestData + return { + "data": (CustomForecastUpsertRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomForecastUpsertRequestData, **kwargs): + """ + Request body to upsert (create or replace) the custom forecast for a budget. + + :param data: Custom forecast resource wrapper in an upsert request. + :type data: CustomForecastUpsertRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/custom_forecast_upsert_request_data.py b/datadog_api_client/v2/model/custom_forecast_upsert_request_data.py new file mode 100644 index 0000000000..85802adbd2 --- /dev/null +++ b/datadog_api_client/v2/model/custom_forecast_upsert_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_forecast_upsert_request_data_attributes import CustomForecastUpsertRequestDataAttributes + from datadog_api_client.v2.model.custom_forecast_type import CustomForecastType + +class CustomForecastUpsertRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_forecast_upsert_request_data_attributes import CustomForecastUpsertRequestDataAttributes + from datadog_api_client.v2.model.custom_forecast_type import CustomForecastType + return { + "attributes": (CustomForecastUpsertRequestDataAttributes,), + "id": (str,), + "type": (CustomForecastType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CustomForecastUpsertRequestDataAttributes, type: CustomForecastType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Custom forecast resource wrapper in an upsert request. + + :param attributes: Attributes of a custom forecast upsert request. + :type attributes: CustomForecastUpsertRequestDataAttributes + + :param id: Unused on upsert; the resource is keyed by ``budget_uid``. Send an empty string. + :type id: str, optional + + :param type: The type of the custom forecast resource. Must be ``custom_forecast``. + :type type: CustomForecastType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/custom_forecast_upsert_request_data_attributes.py b/datadog_api_client/v2/model/custom_forecast_upsert_request_data_attributes.py new file mode 100644 index 0000000000..03181f07d8 --- /dev/null +++ b/datadog_api_client/v2/model/custom_forecast_upsert_request_data_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_forecast_entry import CustomForecastEntry + +class CustomForecastUpsertRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_forecast_entry import CustomForecastEntry + return { + "budget_uid": (str,), + "entries": ([CustomForecastEntry],), + } + attribute_map = { + "budget_uid": "budget_uid", + "entries": "entries", + } + + def __init__(self_, budget_uid: str, entries: List[CustomForecastEntry], **kwargs): + """ + Attributes of a custom forecast upsert request. + + :param budget_uid: The UUID of the budget that this custom forecast belongs to. + :type budget_uid: str + + :param entries: Monthly custom forecast entries. An empty list deletes any existing + custom forecast for the budget. + :type entries: [CustomForecastEntry] + """ + super().__init__(kwargs) + + + self_.budget_uid = budget_uid + self_.entries = entries diff --git a/datadog_api_client/v2/model/custom_framework_control.py b/datadog_api_client/v2/model/custom_framework_control.py new file mode 100644 index 0000000000..4feb57c94e --- /dev/null +++ b/datadog_api_client/v2/model/custom_framework_control.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomFrameworkControl(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "rules_id": ([str],), + } + attribute_map = { + "name": "name", + "rules_id": "rules_id", + } + + def __init__(self_, name: str, rules_id: List[str], **kwargs): + """ + Framework Control. + + :param name: Control Name. + :type name: str + + :param rules_id: Rule IDs. + :type rules_id: [str] + """ + super().__init__(kwargs) + + + self_.name = name + self_.rules_id = rules_id diff --git a/datadog_api_client/v2/model/custom_framework_data.py b/datadog_api_client/v2/model/custom_framework_data.py new file mode 100644 index 0000000000..7303418f11 --- /dev/null +++ b/datadog_api_client/v2/model/custom_framework_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_framework_data_attributes import CustomFrameworkDataAttributes + from datadog_api_client.v2.model.custom_framework_type import CustomFrameworkType + +class CustomFrameworkData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_framework_data_attributes import CustomFrameworkDataAttributes + from datadog_api_client.v2.model.custom_framework_type import CustomFrameworkType + return { + "attributes": (CustomFrameworkDataAttributes,), + "type": (CustomFrameworkType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: CustomFrameworkDataAttributes, type: CustomFrameworkType, **kwargs): + """ + Contains type and attributes for custom frameworks. + + :param attributes: Framework Data Attributes. + :type attributes: CustomFrameworkDataAttributes + + :param type: The type of the resource. The value must be ``custom_framework``. + :type type: CustomFrameworkType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/custom_framework_data_attributes.py b/datadog_api_client/v2/model/custom_framework_data_attributes.py new file mode 100644 index 0000000000..e9b09fe110 --- /dev/null +++ b/datadog_api_client/v2/model/custom_framework_data_attributes.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_framework_requirement import CustomFrameworkRequirement + +class CustomFrameworkDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_framework_requirement import CustomFrameworkRequirement + return { + "description": (str,), + "handle": (str,), + "icon_url": (str,), + "name": (str,), + "requirements": ([CustomFrameworkRequirement],), + "version": (str,), + } + attribute_map = { + "description": "description", + "handle": "handle", + "icon_url": "icon_url", + "name": "name", + "requirements": "requirements", + "version": "version", + } + + def __init__(self_, handle: str, name: str, requirements: List[CustomFrameworkRequirement], version: str, description: Union[str, UnsetType]=unset, icon_url: Union[str, UnsetType]=unset, **kwargs): + """ + Framework Data Attributes. + + :param description: Framework Description + :type description: str, optional + + :param handle: Framework Handle + :type handle: str + + :param icon_url: Framework Icon URL + :type icon_url: str, optional + + :param name: Framework Name + :type name: str + + :param requirements: Framework Requirements + :type requirements: [CustomFrameworkRequirement] + + :param version: Framework Version + :type version: str + """ + if description is not unset: + kwargs["description"] = description + if icon_url is not unset: + kwargs["icon_url"] = icon_url + super().__init__(kwargs) + + + self_.handle = handle + self_.name = name + self_.requirements = requirements + self_.version = version diff --git a/datadog_api_client/v2/model/custom_framework_data_handle_and_version.py b/datadog_api_client/v2/model/custom_framework_data_handle_and_version.py new file mode 100644 index 0000000000..c5629d5e98 --- /dev/null +++ b/datadog_api_client/v2/model/custom_framework_data_handle_and_version.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomFrameworkDataHandleAndVersion(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "version": (str,), + } + attribute_map = { + "handle": "handle", + "version": "version", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Framework Handle and Version. + + :param handle: Framework Handle + :type handle: str, optional + + :param version: Framework Version + :type version: str, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_framework_metadata.py b/datadog_api_client/v2/model/custom_framework_metadata.py new file mode 100644 index 0000000000..26522e81f6 --- /dev/null +++ b/datadog_api_client/v2/model/custom_framework_metadata.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_framework_without_requirements import CustomFrameworkWithoutRequirements + from datadog_api_client.v2.model.custom_framework_type import CustomFrameworkType + +class CustomFrameworkMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_framework_without_requirements import CustomFrameworkWithoutRequirements + from datadog_api_client.v2.model.custom_framework_type import CustomFrameworkType + return { + "attributes": (CustomFrameworkWithoutRequirements,), + "id": (str,), + "type": (CustomFrameworkType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CustomFrameworkWithoutRequirements, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CustomFrameworkType, UnsetType]=unset, **kwargs): + """ + Metadata for custom frameworks. + + :param attributes: Framework without requirements. + :type attributes: CustomFrameworkWithoutRequirements, optional + + :param id: The ID of the custom framework. + :type id: str, optional + + :param type: The type of the resource. The value must be ``custom_framework``. + :type type: CustomFrameworkType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_framework_requirement.py b/datadog_api_client/v2/model/custom_framework_requirement.py new file mode 100644 index 0000000000..25d023b0a9 --- /dev/null +++ b/datadog_api_client/v2/model/custom_framework_requirement.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_framework_control import CustomFrameworkControl + +class CustomFrameworkRequirement(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_framework_control import CustomFrameworkControl + return { + "controls": ([CustomFrameworkControl],), + "name": (str,), + } + attribute_map = { + "controls": "controls", + "name": "name", + } + + def __init__(self_, controls: List[CustomFrameworkControl], name: str, **kwargs): + """ + Framework Requirement. + + :param controls: Requirement Controls. + :type controls: [CustomFrameworkControl] + + :param name: Requirement Name. + :type name: str + """ + super().__init__(kwargs) + + + self_.controls = controls + self_.name = name diff --git a/datadog_api_client/v2/model/custom_framework_type.py b/datadog_api_client/v2/model/custom_framework_type.py new file mode 100644 index 0000000000..5351ad02bf --- /dev/null +++ b/datadog_api_client/v2/model/custom_framework_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomFrameworkType(ModelSimple): + """ + The type of the resource. The value must be `custom_framework`. + + :param value: If omitted defaults to "custom_framework". Must be one of ["custom_framework"]. + :type value: str + """ + + allowed_values = { + "custom_framework", + } + CUSTOM_FRAMEWORK: ClassVar["CustomFrameworkType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomFrameworkType.CUSTOM_FRAMEWORK = CustomFrameworkType("custom_framework") diff --git a/datadog_api_client/v2/model/custom_framework_without_requirements.py b/datadog_api_client/v2/model/custom_framework_without_requirements.py new file mode 100644 index 0000000000..ed0d823720 --- /dev/null +++ b/datadog_api_client/v2/model/custom_framework_without_requirements.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomFrameworkWithoutRequirements(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "handle": (str,), + "icon_url": (str,), + "name": (str,), + "version": (str,), + } + attribute_map = { + "description": "description", + "handle": "handle", + "icon_url": "icon_url", + "name": "name", + "version": "version", + } + + def __init__(self_, handle: str, name: str, version: str, description: Union[str, UnsetType]=unset, icon_url: Union[str, UnsetType]=unset, **kwargs): + """ + Framework without requirements. + + :param description: Framework Description + :type description: str, optional + + :param handle: Framework Handle + :type handle: str + + :param icon_url: Framework Icon URL + :type icon_url: str, optional + + :param name: Framework Name + :type name: str + + :param version: Framework Version + :type version: str + """ + if description is not unset: + kwargs["description"] = description + if icon_url is not unset: + kwargs["icon_url"] = icon_url + super().__init__(kwargs) + + + self_.handle = handle + self_.name = name + self_.version = version diff --git a/datadog_api_client/v2/model/custom_rule.py b/datadog_api_client/v2/model/custom_rule.py new file mode 100644 index 0000000000..acdc132657 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_revision import CustomRuleRevision + +class CustomRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_revision import CustomRuleRevision + return { + "created_at": (datetime,), + "created_by": (str,), + "last_revision": (CustomRuleRevision,), + "name": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "last_revision": "last_revision", + "name": "name", + } + + def __init__(self_, created_at: datetime, created_by: str, last_revision: CustomRuleRevision, name: str, **kwargs): + """ + A custom static analysis rule within a ruleset. + + :param created_at: Creation timestamp + :type created_at: datetime + + :param created_by: Creator identifier + :type created_by: str + + :param last_revision: A specific revision of a custom static analysis rule. + :type last_revision: CustomRuleRevision + + :param name: Rule name + :type name: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.last_revision = last_revision + self_.name = name diff --git a/datadog_api_client/v2/model/custom_rule_data_type.py b/datadog_api_client/v2/model/custom_rule_data_type.py new file mode 100644 index 0000000000..25dae1233c --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomRuleDataType(ModelSimple): + """ + Resource type + + :param value: If omitted defaults to "custom_rule". Must be one of ["custom_rule"]. + :type value: str + """ + + allowed_values = { + "custom_rule", + } + CUSTOM_RULE: ClassVar["CustomRuleDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomRuleDataType.CUSTOM_RULE = CustomRuleDataType("custom_rule") diff --git a/datadog_api_client/v2/model/custom_rule_request.py b/datadog_api_client/v2/model/custom_rule_request.py new file mode 100644 index 0000000000..946b5533ff --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_request_data import CustomRuleRequestData + +class CustomRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_request_data import CustomRuleRequestData + return { + "data": (CustomRuleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CustomRuleRequestData, UnsetType]=unset, **kwargs): + """ + Request body for creating or updating a custom rule. + + :param data: Data object for a custom rule create or update request. + :type data: CustomRuleRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_rule_request_data.py b/datadog_api_client/v2/model/custom_rule_request_data.py new file mode 100644 index 0000000000..8e2ba46fb9 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_request_data_attributes import CustomRuleRequestDataAttributes + from datadog_api_client.v2.model.custom_rule_data_type import CustomRuleDataType + +class CustomRuleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_request_data_attributes import CustomRuleRequestDataAttributes + from datadog_api_client.v2.model.custom_rule_data_type import CustomRuleDataType + return { + "attributes": (CustomRuleRequestDataAttributes,), + "id": (str,), + "type": (CustomRuleDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CustomRuleRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CustomRuleDataType, UnsetType]=unset, **kwargs): + """ + Data object for a custom rule create or update request. + + :param attributes: Attributes for creating or updating a custom rule. + :type attributes: CustomRuleRequestDataAttributes, optional + + :param id: Rule identifier + :type id: str, optional + + :param type: Resource type + :type type: CustomRuleDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_rule_request_data_attributes.py b/datadog_api_client/v2/model/custom_rule_request_data_attributes.py new file mode 100644 index 0000000000..dc245c2107 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomRuleRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a custom rule. + + :param name: Rule name + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_rule_response.py b/datadog_api_client/v2/model/custom_rule_response.py new file mode 100644 index 0000000000..c070d2e769 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_response_data import CustomRuleResponseData + +class CustomRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_response_data import CustomRuleResponseData + return { + "data": (CustomRuleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomRuleResponseData, **kwargs): + """ + Response containing a single custom rule. + + :param data: Data object returned in a custom rule response, including its ID, type, and attributes. + :type data: CustomRuleResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/custom_rule_response_data.py b/datadog_api_client/v2/model/custom_rule_response_data.py new file mode 100644 index 0000000000..8d9cbb91ec --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule import CustomRule + from datadog_api_client.v2.model.custom_rule_data_type import CustomRuleDataType + +class CustomRuleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule import CustomRule + from datadog_api_client.v2.model.custom_rule_data_type import CustomRuleDataType + return { + "attributes": (CustomRule,), + "id": (str,), + "type": (CustomRuleDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CustomRule, id: str, type: CustomRuleDataType, **kwargs): + """ + Data object returned in a custom rule response, including its ID, type, and attributes. + + :param attributes: A custom static analysis rule within a ruleset. + :type attributes: CustomRule + + :param id: Rule identifier + :type id: str + + :param type: Resource type + :type type: CustomRuleDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/custom_rule_revision.py b/datadog_api_client/v2/model/custom_rule_revision.py new file mode 100644 index 0000000000..f16d94f834 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_revision_attributes import CustomRuleRevisionAttributes + from datadog_api_client.v2.model.custom_rule_revision_data_type import CustomRuleRevisionDataType + +class CustomRuleRevision(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_revision_attributes import CustomRuleRevisionAttributes + from datadog_api_client.v2.model.custom_rule_revision_data_type import CustomRuleRevisionDataType + return { + "attributes": (CustomRuleRevisionAttributes,), + "id": (str,), + "type": (CustomRuleRevisionDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CustomRuleRevisionAttributes, id: str, type: CustomRuleRevisionDataType, **kwargs): + """ + A specific revision of a custom static analysis rule. + + :param attributes: Attributes of a custom rule revision, including code, metadata, and test cases. + :type attributes: CustomRuleRevisionAttributes + + :param id: Revision identifier + :type id: str + + :param type: Resource type + :type type: CustomRuleRevisionDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/custom_rule_revision_attributes.py b/datadog_api_client/v2/model/custom_rule_revision_attributes.py new file mode 100644 index 0000000000..f78f07edf7 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision_attributes.py @@ -0,0 +1,170 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.argument import Argument + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.language import Language + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + from datadog_api_client.v2.model.custom_rule_revision_test import CustomRuleRevisionTest + +class CustomRuleRevisionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.argument import Argument + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.language import Language + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + from datadog_api_client.v2.model.custom_rule_revision_test import CustomRuleRevisionTest + return { + "arguments": ([Argument],), + "category": (CustomRuleRevisionAttributesCategory,), + "checksum": (str,), + "code": (str,), + "created_at": (datetime,), + "created_by": (str,), + "creation_message": (str,), + "cve": (str, none_type), + "cwe": (str, none_type), + "description": (str,), + "documentation_url": (str, none_type), + "is_published": (bool,), + "is_testing": (bool,), + "language": (Language,), + "severity": (CustomRuleRevisionAttributesSeverity,), + "short_description": (str,), + "should_use_ai_fix": (bool,), + "tags": ([str],), + "tests": ([CustomRuleRevisionTest],), + "tree_sitter_query": (str,), + } + attribute_map = { + "arguments": "arguments", + "category": "category", + "checksum": "checksum", + "code": "code", + "created_at": "created_at", + "created_by": "created_by", + "creation_message": "creation_message", + "cve": "cve", + "cwe": "cwe", + "description": "description", + "documentation_url": "documentation_url", + "is_published": "is_published", + "is_testing": "is_testing", + "language": "language", + "severity": "severity", + "short_description": "short_description", + "should_use_ai_fix": "should_use_ai_fix", + "tags": "tags", + "tests": "tests", + "tree_sitter_query": "tree_sitter_query", + } + + def __init__(self_, arguments: List[Argument], category: CustomRuleRevisionAttributesCategory, checksum: str, code: str, created_at: datetime, created_by: str, creation_message: str, cve: Union[str, none_type], cwe: Union[str, none_type], description: str, documentation_url: Union[str, none_type], is_published: bool, is_testing: bool, language: Language, severity: CustomRuleRevisionAttributesSeverity, short_description: str, should_use_ai_fix: bool, tags: List[str], tests: List[CustomRuleRevisionTest], tree_sitter_query: str, **kwargs): + """ + Attributes of a custom rule revision, including code, metadata, and test cases. + + :param arguments: Rule arguments + :type arguments: [Argument] + + :param category: Rule category + :type category: CustomRuleRevisionAttributesCategory + + :param checksum: Code checksum + :type checksum: str + + :param code: Rule code + :type code: str + + :param created_at: Creation timestamp + :type created_at: datetime + + :param created_by: Creator identifier + :type created_by: str + + :param creation_message: Revision creation message + :type creation_message: str + + :param cve: Associated CVE + :type cve: str, none_type + + :param cwe: Associated CWE + :type cwe: str, none_type + + :param description: Full description + :type description: str + + :param documentation_url: Documentation URL + :type documentation_url: str, none_type + + :param is_published: Whether the revision is published + :type is_published: bool + + :param is_testing: Whether this is a testing revision + :type is_testing: bool + + :param language: Programming language + :type language: Language + + :param severity: Rule severity + :type severity: CustomRuleRevisionAttributesSeverity + + :param short_description: Short description + :type short_description: str + + :param should_use_ai_fix: Whether to use AI for fixes + :type should_use_ai_fix: bool + + :param tags: Rule tags + :type tags: [str] + + :param tests: Rule tests + :type tests: [CustomRuleRevisionTest] + + :param tree_sitter_query: Tree-sitter query + :type tree_sitter_query: str + """ + super().__init__(kwargs) + + + self_.arguments = arguments + self_.category = category + self_.checksum = checksum + self_.code = code + self_.created_at = created_at + self_.created_by = created_by + self_.creation_message = creation_message + self_.cve = cve + self_.cwe = cwe + self_.description = description + self_.documentation_url = documentation_url + self_.is_published = is_published + self_.is_testing = is_testing + self_.language = language + self_.severity = severity + self_.short_description = short_description + self_.should_use_ai_fix = should_use_ai_fix + self_.tags = tags + self_.tests = tests + self_.tree_sitter_query = tree_sitter_query diff --git a/datadog_api_client/v2/model/custom_rule_revision_attributes_category.py b/datadog_api_client/v2/model/custom_rule_revision_attributes_category.py new file mode 100644 index 0000000000..5b972be70e --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision_attributes_category.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomRuleRevisionAttributesCategory(ModelSimple): + """ + Rule category + + :param value: Must be one of ["SECURITY", "BEST_PRACTICES", "CODE_STYLE", "ERROR_PRONE", "PERFORMANCE"]. + :type value: str + """ + + allowed_values = { + "SECURITY", + "BEST_PRACTICES", + "CODE_STYLE", + "ERROR_PRONE", + "PERFORMANCE", + } + SECURITY: ClassVar["CustomRuleRevisionAttributesCategory"] + BEST_PRACTICES: ClassVar["CustomRuleRevisionAttributesCategory"] + CODE_STYLE: ClassVar["CustomRuleRevisionAttributesCategory"] + ERROR_PRONE: ClassVar["CustomRuleRevisionAttributesCategory"] + PERFORMANCE: ClassVar["CustomRuleRevisionAttributesCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomRuleRevisionAttributesCategory.SECURITY = CustomRuleRevisionAttributesCategory("SECURITY") +CustomRuleRevisionAttributesCategory.BEST_PRACTICES = CustomRuleRevisionAttributesCategory("BEST_PRACTICES") +CustomRuleRevisionAttributesCategory.CODE_STYLE = CustomRuleRevisionAttributesCategory("CODE_STYLE") +CustomRuleRevisionAttributesCategory.ERROR_PRONE = CustomRuleRevisionAttributesCategory("ERROR_PRONE") +CustomRuleRevisionAttributesCategory.PERFORMANCE = CustomRuleRevisionAttributesCategory("PERFORMANCE") diff --git a/datadog_api_client/v2/model/custom_rule_revision_attributes_severity.py b/datadog_api_client/v2/model/custom_rule_revision_attributes_severity.py new file mode 100644 index 0000000000..a8a7c050e7 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision_attributes_severity.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomRuleRevisionAttributesSeverity(ModelSimple): + """ + Rule severity + + :param value: Must be one of ["ERROR", "WARNING", "NOTICE"]. + :type value: str + """ + + allowed_values = { + "ERROR", + "WARNING", + "NOTICE", + } + ERROR: ClassVar["CustomRuleRevisionAttributesSeverity"] + WARNING: ClassVar["CustomRuleRevisionAttributesSeverity"] + NOTICE: ClassVar["CustomRuleRevisionAttributesSeverity"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomRuleRevisionAttributesSeverity.ERROR = CustomRuleRevisionAttributesSeverity("ERROR") +CustomRuleRevisionAttributesSeverity.WARNING = CustomRuleRevisionAttributesSeverity("WARNING") +CustomRuleRevisionAttributesSeverity.NOTICE = CustomRuleRevisionAttributesSeverity("NOTICE") diff --git a/datadog_api_client/v2/model/custom_rule_revision_data_type.py b/datadog_api_client/v2/model/custom_rule_revision_data_type.py new file mode 100644 index 0000000000..7e8410392e --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomRuleRevisionDataType(ModelSimple): + """ + Resource type + + :param value: If omitted defaults to "custom_rule_revision". Must be one of ["custom_rule_revision"]. + :type value: str + """ + + allowed_values = { + "custom_rule_revision", + } + CUSTOM_RULE_REVISION: ClassVar["CustomRuleRevisionDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomRuleRevisionDataType.CUSTOM_RULE_REVISION = CustomRuleRevisionDataType("custom_rule_revision") diff --git a/datadog_api_client/v2/model/custom_rule_revision_input_attributes.py b/datadog_api_client/v2/model/custom_rule_revision_input_attributes.py new file mode 100644 index 0000000000..8755737567 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision_input_attributes.py @@ -0,0 +1,152 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.argument import Argument + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.language import Language + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + from datadog_api_client.v2.model.custom_rule_revision_test import CustomRuleRevisionTest + +class CustomRuleRevisionInputAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.argument import Argument + from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory + from datadog_api_client.v2.model.language import Language + from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity + from datadog_api_client.v2.model.custom_rule_revision_test import CustomRuleRevisionTest + return { + "arguments": ([Argument],), + "category": (CustomRuleRevisionAttributesCategory,), + "code": (str,), + "creation_message": (str,), + "cve": (str, none_type), + "cwe": (str, none_type), + "description": (str,), + "documentation_url": (str, none_type), + "is_published": (bool,), + "is_testing": (bool,), + "language": (Language,), + "severity": (CustomRuleRevisionAttributesSeverity,), + "short_description": (str,), + "should_use_ai_fix": (bool,), + "tags": ([str],), + "tests": ([CustomRuleRevisionTest],), + "tree_sitter_query": (str,), + } + attribute_map = { + "arguments": "arguments", + "category": "category", + "code": "code", + "creation_message": "creation_message", + "cve": "cve", + "cwe": "cwe", + "description": "description", + "documentation_url": "documentation_url", + "is_published": "is_published", + "is_testing": "is_testing", + "language": "language", + "severity": "severity", + "short_description": "short_description", + "should_use_ai_fix": "should_use_ai_fix", + "tags": "tags", + "tests": "tests", + "tree_sitter_query": "tree_sitter_query", + } + + def __init__(self_, arguments: List[Argument], category: CustomRuleRevisionAttributesCategory, code: str, creation_message: str, cve: Union[str, none_type], cwe: Union[str, none_type], description: str, documentation_url: Union[str, none_type], is_published: bool, is_testing: bool, language: Language, severity: CustomRuleRevisionAttributesSeverity, short_description: str, should_use_ai_fix: bool, tags: List[str], tests: List[CustomRuleRevisionTest], tree_sitter_query: str, **kwargs): + """ + Input attributes for creating or updating a custom rule revision. + + :param arguments: Rule arguments + :type arguments: [Argument] + + :param category: Rule category + :type category: CustomRuleRevisionAttributesCategory + + :param code: Rule code + :type code: str + + :param creation_message: Revision creation message + :type creation_message: str + + :param cve: Associated CVE + :type cve: str, none_type + + :param cwe: Associated CWE + :type cwe: str, none_type + + :param description: Full description + :type description: str + + :param documentation_url: Documentation URL + :type documentation_url: str, none_type + + :param is_published: Whether the revision is published + :type is_published: bool + + :param is_testing: Whether this is a testing revision + :type is_testing: bool + + :param language: Programming language + :type language: Language + + :param severity: Rule severity + :type severity: CustomRuleRevisionAttributesSeverity + + :param short_description: Short description + :type short_description: str + + :param should_use_ai_fix: Whether to use AI for fixes + :type should_use_ai_fix: bool + + :param tags: Rule tags + :type tags: [str] + + :param tests: Rule tests + :type tests: [CustomRuleRevisionTest] + + :param tree_sitter_query: Tree-sitter query + :type tree_sitter_query: str + """ + super().__init__(kwargs) + + + self_.arguments = arguments + self_.category = category + self_.code = code + self_.creation_message = creation_message + self_.cve = cve + self_.cwe = cwe + self_.description = description + self_.documentation_url = documentation_url + self_.is_published = is_published + self_.is_testing = is_testing + self_.language = language + self_.severity = severity + self_.short_description = short_description + self_.should_use_ai_fix = should_use_ai_fix + self_.tags = tags + self_.tests = tests + self_.tree_sitter_query = tree_sitter_query diff --git a/datadog_api_client/v2/model/custom_rule_revision_request.py b/datadog_api_client/v2/model/custom_rule_revision_request.py new file mode 100644 index 0000000000..075833f254 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_revision_request_data import CustomRuleRevisionRequestData + +class CustomRuleRevisionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_revision_request_data import CustomRuleRevisionRequestData + return { + "data": (CustomRuleRevisionRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CustomRuleRevisionRequestData, UnsetType]=unset, **kwargs): + """ + Request body for creating a new custom rule revision. + + :param data: Data object for a custom rule revision create request. + :type data: CustomRuleRevisionRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_rule_revision_request_data.py b/datadog_api_client/v2/model/custom_rule_revision_request_data.py new file mode 100644 index 0000000000..b9329251f7 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_revision_input_attributes import CustomRuleRevisionInputAttributes + from datadog_api_client.v2.model.custom_rule_revision_data_type import CustomRuleRevisionDataType + +class CustomRuleRevisionRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_revision_input_attributes import CustomRuleRevisionInputAttributes + from datadog_api_client.v2.model.custom_rule_revision_data_type import CustomRuleRevisionDataType + return { + "attributes": (CustomRuleRevisionInputAttributes,), + "id": (str,), + "type": (CustomRuleRevisionDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CustomRuleRevisionInputAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CustomRuleRevisionDataType, UnsetType]=unset, **kwargs): + """ + Data object for a custom rule revision create request. + + :param attributes: Input attributes for creating or updating a custom rule revision. + :type attributes: CustomRuleRevisionInputAttributes, optional + + :param id: Revision identifier + :type id: str, optional + + :param type: Resource type + :type type: CustomRuleRevisionDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_rule_revision_response.py b/datadog_api_client/v2/model/custom_rule_revision_response.py new file mode 100644 index 0000000000..d108a367fd --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_revision import CustomRuleRevision + +class CustomRuleRevisionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_revision import CustomRuleRevision + return { + "data": (CustomRuleRevision,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomRuleRevision, **kwargs): + """ + Response containing a single custom rule revision. + + :param data: A specific revision of a custom static analysis rule. + :type data: CustomRuleRevision + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/custom_rule_revision_test.py b/datadog_api_client/v2/model/custom_rule_revision_test.py new file mode 100644 index 0000000000..8b0e606fd6 --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revision_test.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomRuleRevisionTest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "annotation_count": (int,), + "code": (str,), + "filename": (str,), + } + attribute_map = { + "annotation_count": "annotation_count", + "code": "code", + "filename": "filename", + } + + def __init__(self_, annotation_count: int, code: str, filename: str, **kwargs): + """ + A test case associated with a custom rule revision, used to validate rule behavior. + + :param annotation_count: Expected violation count + :type annotation_count: int + + :param code: Test code + :type code: str + + :param filename: Test filename + :type filename: str + """ + super().__init__(kwargs) + + + self_.annotation_count = annotation_count + self_.code = code + self_.filename = filename diff --git a/datadog_api_client/v2/model/custom_rule_revisions_response.py b/datadog_api_client/v2/model/custom_rule_revisions_response.py new file mode 100644 index 0000000000..d18962b15a --- /dev/null +++ b/datadog_api_client/v2/model/custom_rule_revisions_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule_revision import CustomRuleRevision + +class CustomRuleRevisionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule_revision import CustomRuleRevision + return { + "data": ([CustomRuleRevision],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[CustomRuleRevision], UnsetType]=unset, **kwargs): + """ + Response containing a paginated list of custom rule revisions. + + :param data: List of custom rule revisions. + :type data: [CustomRuleRevision], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_ruleset.py b/datadog_api_client/v2/model/custom_ruleset.py new file mode 100644 index 0000000000..2023d98d2b --- /dev/null +++ b/datadog_api_client/v2/model/custom_ruleset.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_ruleset_attributes import CustomRulesetAttributes + from datadog_api_client.v2.model.custom_ruleset_data_type import CustomRulesetDataType + +class CustomRuleset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_ruleset_attributes import CustomRulesetAttributes + from datadog_api_client.v2.model.custom_ruleset_data_type import CustomRulesetDataType + return { + "attributes": (CustomRulesetAttributes,), + "id": (str,), + "type": (CustomRulesetDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CustomRulesetAttributes, id: str, type: CustomRulesetDataType, **kwargs): + """ + A custom static analysis ruleset containing a set of user-defined rules. + + :param attributes: Attributes of a custom ruleset, including its name, description, and rules. + :type attributes: CustomRulesetAttributes + + :param id: Ruleset identifier + :type id: str + + :param type: Resource type + :type type: CustomRulesetDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/custom_ruleset_attributes.py b/datadog_api_client/v2/model/custom_ruleset_attributes.py new file mode 100644 index 0000000000..32a543d805 --- /dev/null +++ b/datadog_api_client/v2/model/custom_ruleset_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule import CustomRule + +class CustomRulesetAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule import CustomRule + return { + "created_at": (datetime,), + "created_by": (str,), + "description": (str,), + "name": (str,), + "rules": ([CustomRule], none_type), + "short_description": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "description": "description", + "name": "name", + "rules": "rules", + "short_description": "short_description", + } + + def __init__(self_, created_at: datetime, created_by: str, description: str, name: str, rules: Union[List[CustomRule], none_type], short_description: str, **kwargs): + """ + Attributes of a custom ruleset, including its name, description, and rules. + + :param created_at: Creation timestamp + :type created_at: datetime + + :param created_by: Creator identifier + :type created_by: str + + :param description: Base64-encoded full description + :type description: str + + :param name: Ruleset name + :type name: str + + :param rules: Rules in the ruleset + :type rules: [CustomRule], none_type + + :param short_description: Base64-encoded short description + :type short_description: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.description = description + self_.name = name + self_.rules = rules + self_.short_description = short_description diff --git a/datadog_api_client/v2/model/custom_ruleset_data_type.py b/datadog_api_client/v2/model/custom_ruleset_data_type.py new file mode 100644 index 0000000000..561971c2f3 --- /dev/null +++ b/datadog_api_client/v2/model/custom_ruleset_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomRulesetDataType(ModelSimple): + """ + Resource type + + :param value: If omitted defaults to "custom_ruleset". Must be one of ["custom_ruleset"]. + :type value: str + """ + + allowed_values = { + "custom_ruleset", + } + CUSTOM_RULESET: ClassVar["CustomRulesetDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomRulesetDataType.CUSTOM_RULESET = CustomRulesetDataType("custom_ruleset") diff --git a/datadog_api_client/v2/model/custom_ruleset_list_response.py b/datadog_api_client/v2/model/custom_ruleset_list_response.py new file mode 100644 index 0000000000..df369ef8ca --- /dev/null +++ b/datadog_api_client/v2/model/custom_ruleset_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_ruleset import CustomRuleset + +class CustomRulesetListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_ruleset import CustomRuleset + return { + "data": ([CustomRuleset],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[CustomRuleset], **kwargs): + """ + Response containing a list of custom rulesets for the authenticated organization. + + :param data: The list of custom rulesets. + :type data: [CustomRuleset] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/custom_ruleset_request.py b/datadog_api_client/v2/model/custom_ruleset_request.py new file mode 100644 index 0000000000..12efcf67ca --- /dev/null +++ b/datadog_api_client/v2/model/custom_ruleset_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_ruleset_request_data import CustomRulesetRequestData + +class CustomRulesetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_ruleset_request_data import CustomRulesetRequestData + return { + "data": (CustomRulesetRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[CustomRulesetRequestData, UnsetType]=unset, **kwargs): + """ + Request body for creating or updating a custom ruleset. + + :param data: Data object for a custom ruleset create or update request. + :type data: CustomRulesetRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_ruleset_request_data.py b/datadog_api_client/v2/model/custom_ruleset_request_data.py new file mode 100644 index 0000000000..2bf105b1ca --- /dev/null +++ b/datadog_api_client/v2/model/custom_ruleset_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_ruleset_request_data_attributes import CustomRulesetRequestDataAttributes + from datadog_api_client.v2.model.custom_ruleset_data_type import CustomRulesetDataType + +class CustomRulesetRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_ruleset_request_data_attributes import CustomRulesetRequestDataAttributes + from datadog_api_client.v2.model.custom_ruleset_data_type import CustomRulesetDataType + return { + "attributes": (CustomRulesetRequestDataAttributes,), + "id": (str,), + "type": (CustomRulesetDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[CustomRulesetRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CustomRulesetDataType, UnsetType]=unset, **kwargs): + """ + Data object for a custom ruleset create or update request. + + :param attributes: Attributes for creating or updating a custom ruleset. + :type attributes: CustomRulesetRequestDataAttributes, optional + + :param id: Ruleset identifier + :type id: str, optional + + :param type: Resource type + :type type: CustomRulesetDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_ruleset_request_data_attributes.py b/datadog_api_client/v2/model/custom_ruleset_request_data_attributes.py new file mode 100644 index 0000000000..b525ba9c6e --- /dev/null +++ b/datadog_api_client/v2/model/custom_ruleset_request_data_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_rule import CustomRule + +class CustomRulesetRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_rule import CustomRule + return { + "description": (str,), + "name": (str,), + "rules": ([CustomRule], none_type), + "short_description": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + "rules": "rules", + "short_description": "short_description", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, rules: Union[List[CustomRule], none_type, UnsetType]=unset, short_description: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a custom ruleset. + + :param description: Base64-encoded full description + :type description: str, optional + + :param name: Ruleset name + :type name: str, optional + + :param rules: Rules in the ruleset + :type rules: [CustomRule], none_type, optional + + :param short_description: Base64-encoded short description + :type short_description: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if rules is not unset: + kwargs["rules"] = rules + if short_description is not unset: + kwargs["short_description"] = short_description + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/custom_ruleset_response.py b/datadog_api_client/v2/model/custom_ruleset_response.py new file mode 100644 index 0000000000..bcbfa3e79d --- /dev/null +++ b/datadog_api_client/v2/model/custom_ruleset_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_ruleset import CustomRuleset + +class CustomRulesetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_ruleset import CustomRuleset + return { + "data": (CustomRuleset,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomRuleset, **kwargs): + """ + Response containing a single custom ruleset. + + :param data: A custom static analysis ruleset containing a set of user-defined rules. + :type data: CustomRuleset + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/customer_org_disable_request.py b/datadog_api_client/v2/model/customer_org_disable_request.py new file mode 100644 index 0000000000..baf4002554 --- /dev/null +++ b/datadog_api_client/v2/model/customer_org_disable_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.customer_org_disable_request_data import CustomerOrgDisableRequestData + +class CustomerOrgDisableRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.customer_org_disable_request_data import CustomerOrgDisableRequestData + return { + "data": (CustomerOrgDisableRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomerOrgDisableRequestData, **kwargs): + """ + Request payload for disabling the authenticated customer organization. + + :param data: Data object for a customer org disable request. + :type data: CustomerOrgDisableRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/customer_org_disable_request_attributes.py b/datadog_api_client/v2/model/customer_org_disable_request_attributes.py new file mode 100644 index 0000000000..00fb6ae295 --- /dev/null +++ b/datadog_api_client/v2/model/customer_org_disable_request_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CustomerOrgDisableRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "org_uuid": (str,), + } + attribute_map = { + "org_uuid": "org_uuid", + } + + def __init__(self_, org_uuid: Union[str, UnsetType]=unset, **kwargs): + """ + Optional attributes for a customer org disable request. When supplied, ``org_uuid`` + must match the authenticated organization or the request is rejected. + + :param org_uuid: Datadog organization UUID. If supplied, must match the authenticated + organization. + :type org_uuid: str, optional + """ + if org_uuid is not unset: + kwargs["org_uuid"] = org_uuid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/customer_org_disable_request_data.py b/datadog_api_client/v2/model/customer_org_disable_request_data.py new file mode 100644 index 0000000000..3087ac65b0 --- /dev/null +++ b/datadog_api_client/v2/model/customer_org_disable_request_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.customer_org_disable_request_attributes import CustomerOrgDisableRequestAttributes + from datadog_api_client.v2.model.customer_org_disable_type import CustomerOrgDisableType + +class CustomerOrgDisableRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.customer_org_disable_request_attributes import CustomerOrgDisableRequestAttributes + from datadog_api_client.v2.model.customer_org_disable_type import CustomerOrgDisableType + return { + "attributes": (CustomerOrgDisableRequestAttributes,), + "id": (str,), + "type": (CustomerOrgDisableType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: CustomerOrgDisableType, attributes: Union[CustomerOrgDisableRequestAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data object for a customer org disable request. + + :param attributes: Optional attributes for a customer org disable request. When supplied, ``org_uuid`` + must match the authenticated organization or the request is rejected. + :type attributes: CustomerOrgDisableRequestAttributes, optional + + :param id: Optional client-supplied identifier for the request. Useful for client-side + correlation; the server does not use this value. + :type id: str, optional + + :param type: JSON:API resource type for a customer org disable request. + :type type: CustomerOrgDisableType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/customer_org_disable_response.py b/datadog_api_client/v2/model/customer_org_disable_response.py new file mode 100644 index 0000000000..2175305a81 --- /dev/null +++ b/datadog_api_client/v2/model/customer_org_disable_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.customer_org_disable_response_data import CustomerOrgDisableResponseData + +class CustomerOrgDisableResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.customer_org_disable_response_data import CustomerOrgDisableResponseData + return { + "data": (CustomerOrgDisableResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomerOrgDisableResponseData, **kwargs): + """ + Response describing the outcome of disabling the customer organization. + + :param data: Data object returned after disabling the customer organization. + :type data: CustomerOrgDisableResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/customer_org_disable_response_attributes.py b/datadog_api_client/v2/model/customer_org_disable_response_attributes.py new file mode 100644 index 0000000000..eafc9753ff --- /dev/null +++ b/datadog_api_client/v2/model/customer_org_disable_response_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.customer_org_disable_status import CustomerOrgDisableStatus + +class CustomerOrgDisableResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.customer_org_disable_status import CustomerOrgDisableStatus + return { + "status": (CustomerOrgDisableStatus,), + } + attribute_map = { + "status": "status", + } + + def __init__(self_, status: CustomerOrgDisableStatus, **kwargs): + """ + Attributes describing the outcome of the disable action on the customer organization. + + :param status: Resulting lifecycle status of the organization after the disable action. + :type status: CustomerOrgDisableStatus + """ + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/customer_org_disable_response_data.py b/datadog_api_client/v2/model/customer_org_disable_response_data.py new file mode 100644 index 0000000000..431847e2ff --- /dev/null +++ b/datadog_api_client/v2/model/customer_org_disable_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.customer_org_disable_response_attributes import CustomerOrgDisableResponseAttributes + from datadog_api_client.v2.model.customer_org_disable_response_type import CustomerOrgDisableResponseType + +class CustomerOrgDisableResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.customer_org_disable_response_attributes import CustomerOrgDisableResponseAttributes + from datadog_api_client.v2.model.customer_org_disable_response_type import CustomerOrgDisableResponseType + return { + "attributes": (CustomerOrgDisableResponseAttributes,), + "id": (str,), + "type": (CustomerOrgDisableResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CustomerOrgDisableResponseAttributes, id: str, type: CustomerOrgDisableResponseType, **kwargs): + """ + Data object returned after disabling the customer organization. + + :param attributes: Attributes describing the outcome of the disable action on the customer organization. + :type attributes: CustomerOrgDisableResponseAttributes + + :param id: Identifier of the disabled organization. + :type id: str + + :param type: JSON:API resource type for a customer org disable response. + :type type: CustomerOrgDisableResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/customer_org_disable_response_type.py b/datadog_api_client/v2/model/customer_org_disable_response_type.py new file mode 100644 index 0000000000..d927ef4270 --- /dev/null +++ b/datadog_api_client/v2/model/customer_org_disable_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomerOrgDisableResponseType(ModelSimple): + """ + JSON:API resource type for a customer org disable response. + + :param value: If omitted defaults to "org_disable". Must be one of ["org_disable"]. + :type value: str + """ + + allowed_values = { + "org_disable", + } + ORG_DISABLE: ClassVar["CustomerOrgDisableResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomerOrgDisableResponseType.ORG_DISABLE = CustomerOrgDisableResponseType("org_disable") diff --git a/datadog_api_client/v2/model/customer_org_disable_status.py b/datadog_api_client/v2/model/customer_org_disable_status.py new file mode 100644 index 0000000000..b68b7cf041 --- /dev/null +++ b/datadog_api_client/v2/model/customer_org_disable_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomerOrgDisableStatus(ModelSimple): + """ + Resulting lifecycle status of the organization after the disable action. + + :param value: Must be one of ["disabled", "pending_disable"]. + :type value: str + """ + + allowed_values = { + "disabled", + "pending_disable", + } + DISABLED: ClassVar["CustomerOrgDisableStatus"] + PENDING_DISABLE: ClassVar["CustomerOrgDisableStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomerOrgDisableStatus.DISABLED = CustomerOrgDisableStatus("disabled") +CustomerOrgDisableStatus.PENDING_DISABLE = CustomerOrgDisableStatus("pending_disable") diff --git a/datadog_api_client/v2/model/customer_org_disable_type.py b/datadog_api_client/v2/model/customer_org_disable_type.py new file mode 100644 index 0000000000..42db9f774e --- /dev/null +++ b/datadog_api_client/v2/model/customer_org_disable_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CustomerOrgDisableType(ModelSimple): + """ + JSON:API resource type for a customer org disable request. + + :param value: If omitted defaults to "customer_org_disable". Must be one of ["customer_org_disable"]. + :type value: str + """ + + allowed_values = { + "customer_org_disable", + } + CUSTOMER_ORG_DISABLE: ClassVar["CustomerOrgDisableType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CustomerOrgDisableType.CUSTOMER_ORG_DISABLE = CustomerOrgDisableType("customer_org_disable") diff --git a/datadog_api_client/v2/model/cvss.py b/datadog_api_client/v2/model/cvss.py new file mode 100644 index 0000000000..70398d89c7 --- /dev/null +++ b/datadog_api_client/v2/model/cvss.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.vulnerability_severity import VulnerabilitySeverity + +class CVSS(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.vulnerability_severity import VulnerabilitySeverity + return { + "score": (float,), + "severity": (VulnerabilitySeverity,), + "vector": (str,), + } + attribute_map = { + "score": "score", + "severity": "severity", + "vector": "vector", + } + + def __init__(self_, score: float, severity: VulnerabilitySeverity, vector: str, **kwargs): + """ + Vulnerability severity. + + :param score: Vulnerability severity score. + :type score: float + + :param severity: The vulnerability severity. + :type severity: VulnerabilitySeverity + + :param vector: Vulnerability CVSS vector. + :type vector: str + """ + super().__init__(kwargs) + + + self_.score = score + self_.severity = severity + self_.vector = vector diff --git a/datadog_api_client/v2/model/cyclone_dx_bom.py b/datadog_api_client/v2/model/cyclone_dx_bom.py new file mode 100644 index 0000000000..7a2ff3f2df --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_bom.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cyclone_dx_component import CycloneDXComponent + from datadog_api_client.v2.model.cyclone_dx_metadata import CycloneDXMetadata + from datadog_api_client.v2.model.cyclone_dx_vulnerability import CycloneDXVulnerability + +class CycloneDXBom(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cyclone_dx_component import CycloneDXComponent + from datadog_api_client.v2.model.cyclone_dx_metadata import CycloneDXMetadata + from datadog_api_client.v2.model.cyclone_dx_vulnerability import CycloneDXVulnerability + return { + "bom_format": (str,), + "components": ([CycloneDXComponent],), + "metadata": (CycloneDXMetadata,), + "spec_version": (str,), + "version": (int,), + "vulnerabilities": ([CycloneDXVulnerability],), + } + attribute_map = { + "bom_format": "bomFormat", + "components": "components", + "metadata": "metadata", + "spec_version": "specVersion", + "version": "version", + "vulnerabilities": "vulnerabilities", + } + + def __init__(self_, bom_format: str, components: List[CycloneDXComponent], metadata: CycloneDXMetadata, spec_version: str, vulnerabilities: List[CycloneDXVulnerability], version: Union[int, UnsetType]=unset, **kwargs): + """ + A CycloneDX 1.5 Bill of Materials (BOM) document containing vulnerability data. + + :param bom_format: The BOM format identifier. Must be ``CycloneDX``. + :type bom_format: str + + :param components: The list of scanned software components. Cannot be empty. + :type components: [CycloneDXComponent] + + :param metadata: Metadata about the BOM, including the scanned asset and the scanner tool. + :type metadata: CycloneDXMetadata + + :param spec_version: The CycloneDX specification version. Must be ``1.5``. + :type spec_version: str + + :param version: The version number of the BOM document. + :type version: int, optional + + :param vulnerabilities: The list of detected vulnerabilities. Cannot be empty. + :type vulnerabilities: [CycloneDXVulnerability] + """ + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.bom_format = bom_format + self_.components = components + self_.metadata = metadata + self_.spec_version = spec_version + self_.vulnerabilities = vulnerabilities diff --git a/datadog_api_client/v2/model/cyclone_dx_component.py b/datadog_api_client/v2/model/cyclone_dx_component.py new file mode 100644 index 0000000000..a476f8bb9e --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_component.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cyclone_dx_component_type import CycloneDXComponentType + +class CycloneDXComponent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cyclone_dx_component_type import CycloneDXComponentType + return { + "bom_ref": (str,), + "name": (str,), + "purl": (str,), + "type": (CycloneDXComponentType,), + "version": (str,), + } + attribute_map = { + "bom_ref": "bom-ref", + "name": "name", + "purl": "purl", + "type": "type", + "version": "version", + } + + def __init__(self_, bom_ref: str, name: str, type: CycloneDXComponentType, version: str, purl: Union[str, UnsetType]=unset, **kwargs): + """ + A software component identified during scanning. + + :param bom_ref: A unique reference identifier used to link vulnerabilities to this component. + :type bom_ref: str + + :param name: The name of the component. + :type name: str + + :param purl: The Package URL (PURL) of the component. Required when ``type`` is ``library``. + :type purl: str, optional + + :param type: The type of the scanned component. + :type type: CycloneDXComponentType + + :param version: The version of the component. + :type version: str + """ + if purl is not unset: + kwargs["purl"] = purl + super().__init__(kwargs) + + + self_.bom_ref = bom_ref + self_.name = name + self_.type = type + self_.version = version diff --git a/datadog_api_client/v2/model/cyclone_dx_component_type.py b/datadog_api_client/v2/model/cyclone_dx_component_type.py new file mode 100644 index 0000000000..a07ed8d838 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_component_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class CycloneDXComponentType(ModelSimple): + """ + The type of the scanned component. + + :param value: Must be one of ["library", "application", "operating-system"]. + :type value: str + """ + + allowed_values = { + "library", + "application", + "operating-system", + } + LIBRARY: ClassVar["CycloneDXComponentType"] + APPLICATION: ClassVar["CycloneDXComponentType"] + OPERATING_SYSTEM: ClassVar["CycloneDXComponentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +CycloneDXComponentType.LIBRARY = CycloneDXComponentType("library") +CycloneDXComponentType.APPLICATION = CycloneDXComponentType("application") +CycloneDXComponentType.OPERATING_SYSTEM = CycloneDXComponentType("operating-system") diff --git a/datadog_api_client/v2/model/cyclone_dx_metadata.py b/datadog_api_client/v2/model/cyclone_dx_metadata.py new file mode 100644 index 0000000000..aea4fb1903 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cyclone_dx_metadata_component import CycloneDXMetadataComponent + from datadog_api_client.v2.model.cyclone_dx_metadata_tools import CycloneDXMetadataTools + +class CycloneDXMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cyclone_dx_metadata_component import CycloneDXMetadataComponent + from datadog_api_client.v2.model.cyclone_dx_metadata_tools import CycloneDXMetadataTools + return { + "component": (CycloneDXMetadataComponent,), + "tools": (CycloneDXMetadataTools,), + } + attribute_map = { + "component": "component", + "tools": "tools", + } + + def __init__(self_, component: CycloneDXMetadataComponent, tools: CycloneDXMetadataTools, **kwargs): + """ + Metadata about the BOM, including the scanned asset and the scanner tool. + + :param component: The asset that was scanned (for example, a host or container image). + :type component: CycloneDXMetadataComponent + + :param tools: Information about the scanner tool that produced this BOM. + :type tools: CycloneDXMetadataTools + """ + super().__init__(kwargs) + + + self_.component = component + self_.tools = tools diff --git a/datadog_api_client/v2/model/cyclone_dx_metadata_component.py b/datadog_api_client/v2/model/cyclone_dx_metadata_component.py new file mode 100644 index 0000000000..b11585e8b8 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_metadata_component.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CycloneDXMetadataComponent(ModelNormal): + @cached_property + def openapi_types(_): + return { + "bom_ref": (str,), + "name": (str,), + "type": (str,), + } + attribute_map = { + "bom_ref": "bom-ref", + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, bom_ref: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The asset that was scanned (for example, a host or container image). + + :param bom_ref: A unique reference identifier for this metadata component. If set, must match a ``bom-ref`` in ``components``. + :type bom_ref: str, optional + + :param name: The name or identifier of the scanned asset (for example, an instance ID or hostname). + :type name: str + + :param type: The type of the scanned asset. + :type type: str, optional + """ + if bom_ref is not unset: + kwargs["bom_ref"] = bom_ref + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/cyclone_dx_metadata_tools.py b/datadog_api_client/v2/model/cyclone_dx_metadata_tools.py new file mode 100644 index 0000000000..ac9ea32f04 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_metadata_tools.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cyclone_dx_tool_component import CycloneDXToolComponent + +class CycloneDXMetadataTools(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cyclone_dx_tool_component import CycloneDXToolComponent + return { + "components": ([CycloneDXToolComponent],), + } + attribute_map = { + "components": "components", + } + + def __init__(self_, components: List[CycloneDXToolComponent], **kwargs): + """ + Information about the scanner tool that produced this BOM. + + :param components: The scanner tool components. Must contain exactly one element. + :type components: [CycloneDXToolComponent] + """ + super().__init__(kwargs) + + + self_.components = components diff --git a/datadog_api_client/v2/model/cyclone_dx_tool_component.py b/datadog_api_client/v2/model/cyclone_dx_tool_component.py new file mode 100644 index 0000000000..a7d3cceca1 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_tool_component.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CycloneDXToolComponent(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "type": (str,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: Union[str, UnsetType]=unset, **kwargs): + """ + A scanner tool component. + + :param name: The name of the scanner tool. + :type name: str + + :param type: The type of the tool component. + :type type: str, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/cyclone_dx_vulnerability.py b/datadog_api_client/v2/model/cyclone_dx_vulnerability.py new file mode 100644 index 0000000000..97427bfe37 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_vulnerability.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cyclone_dx_vulnerability_advisory import CycloneDXVulnerabilityAdvisory + from datadog_api_client.v2.model.cyclone_dx_vulnerability_affects import CycloneDXVulnerabilityAffects + from datadog_api_client.v2.model.cyclone_dx_vulnerability_analysis import CycloneDXVulnerabilityAnalysis + from datadog_api_client.v2.model.cyclone_dx_vulnerability_rating import CycloneDXVulnerabilityRating + from datadog_api_client.v2.model.cyclone_dx_vulnerability_reference import CycloneDXVulnerabilityReference + +class CycloneDXVulnerability(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cyclone_dx_vulnerability_advisory import CycloneDXVulnerabilityAdvisory + from datadog_api_client.v2.model.cyclone_dx_vulnerability_affects import CycloneDXVulnerabilityAffects + from datadog_api_client.v2.model.cyclone_dx_vulnerability_analysis import CycloneDXVulnerabilityAnalysis + from datadog_api_client.v2.model.cyclone_dx_vulnerability_rating import CycloneDXVulnerabilityRating + from datadog_api_client.v2.model.cyclone_dx_vulnerability_reference import CycloneDXVulnerabilityReference + return { + "advisories": ([CycloneDXVulnerabilityAdvisory],), + "affects": ([CycloneDXVulnerabilityAffects],), + "analysis": (CycloneDXVulnerabilityAnalysis,), + "cwes": ([int],), + "description": (str,), + "detail": (str,), + "id": (str,), + "ratings": ([CycloneDXVulnerabilityRating],), + "references": ([CycloneDXVulnerabilityReference],), + } + attribute_map = { + "advisories": "advisories", + "affects": "affects", + "analysis": "analysis", + "cwes": "cwes", + "description": "description", + "detail": "detail", + "id": "id", + "ratings": "ratings", + "references": "references", + } + + def __init__(self_, affects: List[CycloneDXVulnerabilityAffects], id: str, ratings: List[CycloneDXVulnerabilityRating], advisories: Union[List[CycloneDXVulnerabilityAdvisory], UnsetType]=unset, analysis: Union[CycloneDXVulnerabilityAnalysis, UnsetType]=unset, cwes: Union[List[int], UnsetType]=unset, description: Union[str, UnsetType]=unset, detail: Union[str, UnsetType]=unset, references: Union[List[CycloneDXVulnerabilityReference], UnsetType]=unset, **kwargs): + """ + A security vulnerability affecting one or more components. + + :param advisories: External advisory references for the vulnerability. + :type advisories: [CycloneDXVulnerabilityAdvisory], optional + + :param affects: The components affected by this vulnerability. Must be non-empty. Each ``ref`` must match a ``bom-ref`` in ``components``. + :type affects: [CycloneDXVulnerabilityAffects] + + :param analysis: The exploitability analysis for the vulnerability. When ``state`` is set to ``resolved`` + or ``resolved_with_pedigree`` , the vulnerability is closed in Datadog. + Other state values are accepted but have no effect on the vulnerability status. + :type analysis: CycloneDXVulnerabilityAnalysis, optional + + :param cwes: CWE identifiers associated with the vulnerability. + :type cwes: [int], optional + + :param description: A short description of the vulnerability. + :type description: str, optional + + :param detail: Detailed information about the vulnerability. + :type detail: str, optional + + :param id: The vulnerability identifier (for example, a CVE ID). + :type id: str + + :param ratings: The severity ratings for the vulnerability. Must contain exactly one element. + :type ratings: [CycloneDXVulnerabilityRating] + + :param references: External reference identifiers for the vulnerability. + :type references: [CycloneDXVulnerabilityReference], optional + """ + if advisories is not unset: + kwargs["advisories"] = advisories + if analysis is not unset: + kwargs["analysis"] = analysis + if cwes is not unset: + kwargs["cwes"] = cwes + if description is not unset: + kwargs["description"] = description + if detail is not unset: + kwargs["detail"] = detail + if references is not unset: + kwargs["references"] = references + super().__init__(kwargs) + + + self_.affects = affects + self_.id = id + self_.ratings = ratings diff --git a/datadog_api_client/v2/model/cyclone_dx_vulnerability_advisory.py b/datadog_api_client/v2/model/cyclone_dx_vulnerability_advisory.py new file mode 100644 index 0000000000..1d43434f03 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_vulnerability_advisory.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CycloneDXVulnerabilityAdvisory(ModelNormal): + @cached_property + def openapi_types(_): + return { + "url": (str,), + } + attribute_map = { + "url": "url", + } + + def __init__(self_, url: Union[str, UnsetType]=unset, **kwargs): + """ + An external advisory reference for a vulnerability. + + :param url: The URL of the advisory. + :type url: str, optional + """ + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cyclone_dx_vulnerability_affects.py b/datadog_api_client/v2/model/cyclone_dx_vulnerability_affects.py new file mode 100644 index 0000000000..a638c2917d --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_vulnerability_affects.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CycloneDXVulnerabilityAffects(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ref": (str,), + } + attribute_map = { + "ref": "ref", + } + + def __init__(self_, ref: str, **kwargs): + """ + A reference to a component affected by a vulnerability. + + :param ref: The ``bom-ref`` of the affected component. + :type ref: str + """ + super().__init__(kwargs) + + + self_.ref = ref diff --git a/datadog_api_client/v2/model/cyclone_dx_vulnerability_analysis.py b/datadog_api_client/v2/model/cyclone_dx_vulnerability_analysis.py new file mode 100644 index 0000000000..29261094e9 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_vulnerability_analysis.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CycloneDXVulnerabilityAnalysis(ModelNormal): + @cached_property + def openapi_types(_): + return { + "state": (str,), + } + attribute_map = { + "state": "state", + } + + def __init__(self_, state: Union[str, UnsetType]=unset, **kwargs): + """ + The exploitability analysis for the vulnerability. When ``state`` is set to ``resolved`` + or ``resolved_with_pedigree`` , the vulnerability is closed in Datadog. + Other state values are accepted but have no effect on the vulnerability status. + + :param state: The vulnerability analysis state. + :type state: str, optional + """ + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cyclone_dx_vulnerability_rating.py b/datadog_api_client/v2/model/cyclone_dx_vulnerability_rating.py new file mode 100644 index 0000000000..5dd14ca33b --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_vulnerability_rating.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CycloneDXVulnerabilityRating(ModelNormal): + @cached_property + def openapi_types(_): + return { + "score": (float,), + "severity": (str,), + "vector": (str,), + } + attribute_map = { + "score": "score", + "severity": "severity", + "vector": "vector", + } + + def __init__(self_, score: Union[float, UnsetType]=unset, severity: Union[str, UnsetType]=unset, vector: Union[str, UnsetType]=unset, **kwargs): + """ + A severity rating for a vulnerability. + + :param score: The CVSS score. + :type score: float, optional + + :param severity: The severity level. + :type severity: str, optional + + :param vector: The CVSS vector string. + :type vector: str, optional + """ + if score is not unset: + kwargs["score"] = score + if severity is not unset: + kwargs["severity"] = severity + if vector is not unset: + kwargs["vector"] = vector + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cyclone_dx_vulnerability_reference.py b/datadog_api_client/v2/model/cyclone_dx_vulnerability_reference.py new file mode 100644 index 0000000000..4697faa801 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_vulnerability_reference.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cyclone_dx_vulnerability_reference_source import CycloneDXVulnerabilityReferenceSource + +class CycloneDXVulnerabilityReference(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cyclone_dx_vulnerability_reference_source import CycloneDXVulnerabilityReferenceSource + return { + "id": (str,), + "source": (CycloneDXVulnerabilityReferenceSource,), + } + attribute_map = { + "id": "id", + "source": "source", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, source: Union[CycloneDXVulnerabilityReferenceSource, UnsetType]=unset, **kwargs): + """ + An external reference identifier for a vulnerability. + + :param id: The identifier of the external reference (for example, a GHSA ID). + :type id: str, optional + + :param source: The source of an external vulnerability reference. + :type source: CycloneDXVulnerabilityReferenceSource, optional + """ + if id is not unset: + kwargs["id"] = id + if source is not unset: + kwargs["source"] = source + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/cyclone_dx_vulnerability_reference_source.py b/datadog_api_client/v2/model/cyclone_dx_vulnerability_reference_source.py new file mode 100644 index 0000000000..e359e4f694 --- /dev/null +++ b/datadog_api_client/v2/model/cyclone_dx_vulnerability_reference_source.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class CycloneDXVulnerabilityReferenceSource(ModelNormal): + @cached_property + def openapi_types(_): + return { + "url": (str,), + } + attribute_map = { + "url": "url", + } + + def __init__(self_, url: Union[str, UnsetType]=unset, **kwargs): + """ + The source of an external vulnerability reference. + + :param url: The URL of the reference source. + :type url: str, optional + """ + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dashboard_list_add_items_request.py b/datadog_api_client/v2/model/dashboard_list_add_items_request.py new file mode 100644 index 0000000000..fa41314a69 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_add_items_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_list_item_request import DashboardListItemRequest + +class DashboardListAddItemsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_list_item_request import DashboardListItemRequest + return { + "dashboards": ([DashboardListItemRequest],), + } + attribute_map = { + "dashboards": "dashboards", + } + + def __init__(self_, dashboards: Union[List[DashboardListItemRequest], UnsetType]=unset, **kwargs): + """ + Request containing a list of dashboards to add. + + :param dashboards: List of dashboards to add the dashboard list. + :type dashboards: [DashboardListItemRequest], optional + """ + if dashboards is not unset: + kwargs["dashboards"] = dashboards + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dashboard_list_add_items_response.py b/datadog_api_client/v2/model/dashboard_list_add_items_response.py new file mode 100644 index 0000000000..81af32c2f4 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_add_items_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_list_item_response import DashboardListItemResponse + +class DashboardListAddItemsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_list_item_response import DashboardListItemResponse + return { + "added_dashboards_to_list": ([DashboardListItemResponse],), + } + attribute_map = { + "added_dashboards_to_list": "added_dashboards_to_list", + } + + def __init__(self_, added_dashboards_to_list: Union[List[DashboardListItemResponse], UnsetType]=unset, **kwargs): + """ + Response containing a list of added dashboards. + + :param added_dashboards_to_list: List of dashboards added to the dashboard list. + :type added_dashboards_to_list: [DashboardListItemResponse], optional + """ + if added_dashboards_to_list is not unset: + kwargs["added_dashboards_to_list"] = added_dashboards_to_list + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dashboard_list_delete_items_request.py b/datadog_api_client/v2/model/dashboard_list_delete_items_request.py new file mode 100644 index 0000000000..2fd097503f --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_delete_items_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_list_item_request import DashboardListItemRequest + +class DashboardListDeleteItemsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_list_item_request import DashboardListItemRequest + return { + "dashboards": ([DashboardListItemRequest],), + } + attribute_map = { + "dashboards": "dashboards", + } + + def __init__(self_, dashboards: Union[List[DashboardListItemRequest], UnsetType]=unset, **kwargs): + """ + Request containing a list of dashboards to delete. + + :param dashboards: List of dashboards to delete from the dashboard list. + :type dashboards: [DashboardListItemRequest], optional + """ + if dashboards is not unset: + kwargs["dashboards"] = dashboards + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dashboard_list_delete_items_response.py b/datadog_api_client/v2/model/dashboard_list_delete_items_response.py new file mode 100644 index 0000000000..f28aa3c23e --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_delete_items_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_list_item_response import DashboardListItemResponse + +class DashboardListDeleteItemsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_list_item_response import DashboardListItemResponse + return { + "deleted_dashboards_from_list": ([DashboardListItemResponse],), + } + attribute_map = { + "deleted_dashboards_from_list": "deleted_dashboards_from_list", + } + + def __init__(self_, deleted_dashboards_from_list: Union[List[DashboardListItemResponse], UnsetType]=unset, **kwargs): + """ + Response containing a list of deleted dashboards. + + :param deleted_dashboards_from_list: List of dashboards deleted from the dashboard list. + :type deleted_dashboards_from_list: [DashboardListItemResponse], optional + """ + if deleted_dashboards_from_list is not unset: + kwargs["deleted_dashboards_from_list"] = deleted_dashboards_from_list + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dashboard_list_item.py b/datadog_api_client/v2/model/dashboard_list_item.py new file mode 100644 index 0000000000..b59b990808 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_item.py @@ -0,0 +1,161 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.creator import Creator + from datadog_api_client.v2.model.dashboard_type import DashboardType + +class DashboardListItem(ModelNormal): + validations = { + "popularity": { + "inclusive_maximum": 5, + }, + "tags": { + "max_items": 5, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.creator import Creator + from datadog_api_client.v2.model.dashboard_type import DashboardType + return { + "author": (Creator,), + "created": (datetime,), + "icon": (str, none_type), + "id": (str,), + "integration_id": (str, none_type), + "is_favorite": (bool,), + "is_read_only": (bool,), + "is_shared": (bool,), + "modified": (datetime,), + "popularity": (int,), + "tags": ([str], none_type), + "title": (str,), + "type": (DashboardType,), + "url": (str,), + } + attribute_map = { + "author": "author", + "created": "created", + "icon": "icon", + "id": "id", + "integration_id": "integration_id", + "is_favorite": "is_favorite", + "is_read_only": "is_read_only", + "is_shared": "is_shared", + "modified": "modified", + "popularity": "popularity", + "tags": "tags", + "title": "title", + "type": "type", + "url": "url", + } + read_only_vars = { + "created", + "icon", + "integration_id", + "is_favorite", + "is_read_only", + "is_shared", + "modified", + "popularity", + "tags", + "title", + "url", + } + + def __init__(self_, id: str, type: DashboardType, author: Union[Creator, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, icon: Union[str, none_type, UnsetType]=unset, integration_id: Union[str, none_type, UnsetType]=unset, is_favorite: Union[bool, UnsetType]=unset, is_read_only: Union[bool, UnsetType]=unset, is_shared: Union[bool, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, popularity: Union[int, UnsetType]=unset, tags: Union[List[str], none_type, UnsetType]=unset, title: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + A dashboard within a list. + + :param author: Creator of the object. + :type author: Creator, optional + + :param created: Date of creation of the dashboard. + :type created: datetime, optional + + :param icon: URL to the icon of the dashboard. + :type icon: str, none_type, optional + + :param id: ID of the dashboard. + :type id: str + + :param integration_id: The short name of the integration. + :type integration_id: str, none_type, optional + + :param is_favorite: Whether or not the dashboard is in the favorites. + :type is_favorite: bool, optional + + :param is_read_only: Whether or not the dashboard is read only. + :type is_read_only: bool, optional + + :param is_shared: Whether the dashboard is publicly shared or not. + :type is_shared: bool, optional + + :param modified: Date of last edition of the dashboard. + :type modified: datetime, optional + + :param popularity: Popularity of the dashboard. + :type popularity: int, optional + + :param tags: List of team names representing ownership of a dashboard. + :type tags: [str], none_type, optional + + :param title: Title of the dashboard. + :type title: str, optional + + :param type: The type of the dashboard. + :type type: DashboardType + + :param url: URL path to the dashboard. + :type url: str, optional + """ + if author is not unset: + kwargs["author"] = author + if created is not unset: + kwargs["created"] = created + if icon is not unset: + kwargs["icon"] = icon + if integration_id is not unset: + kwargs["integration_id"] = integration_id + if is_favorite is not unset: + kwargs["is_favorite"] = is_favorite + if is_read_only is not unset: + kwargs["is_read_only"] = is_read_only + if is_shared is not unset: + kwargs["is_shared"] = is_shared + if modified is not unset: + kwargs["modified"] = modified + if popularity is not unset: + kwargs["popularity"] = popularity + if tags is not unset: + kwargs["tags"] = tags + if title is not unset: + kwargs["title"] = title + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/dashboard_list_item_request.py b/datadog_api_client/v2/model/dashboard_list_item_request.py new file mode 100644 index 0000000000..9244c84732 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_item_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_type import DashboardType + +class DashboardListItemRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_type import DashboardType + return { + "id": (str,), + "type": (DashboardType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: DashboardType, **kwargs): + """ + A dashboard within a list. + + :param id: ID of the dashboard. + :type id: str + + :param type: The type of the dashboard. + :type type: DashboardType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/dashboard_list_item_response.py b/datadog_api_client/v2/model/dashboard_list_item_response.py new file mode 100644 index 0000000000..5cad074004 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_item_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_type import DashboardType + +class DashboardListItemResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_type import DashboardType + return { + "id": (str,), + "type": (DashboardType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, id: str, type: DashboardType, **kwargs): + """ + A dashboard within a list. + + :param id: ID of the dashboard. + :type id: str + + :param type: The type of the dashboard. + :type type: DashboardType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/dashboard_list_items.py b/datadog_api_client/v2/model/dashboard_list_items.py new file mode 100644 index 0000000000..6f6dfe5ad3 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_items.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_list_item import DashboardListItem + +class DashboardListItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_list_item import DashboardListItem + return { + "dashboards": ([DashboardListItem],), + "total": (int,), + } + attribute_map = { + "dashboards": "dashboards", + "total": "total", + } + read_only_vars = { + "total", + } + + def __init__(self_, dashboards: List[DashboardListItem], total: Union[int, UnsetType]=unset, **kwargs): + """ + Dashboards within a list. + + :param dashboards: List of dashboards in the dashboard list. + :type dashboards: [DashboardListItem] + + :param total: Number of dashboards in the dashboard list. + :type total: int, optional + """ + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + + self_.dashboards = dashboards diff --git a/datadog_api_client/v2/model/dashboard_list_update_items_request.py b/datadog_api_client/v2/model/dashboard_list_update_items_request.py new file mode 100644 index 0000000000..ebf214c95e --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_update_items_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_list_item_request import DashboardListItemRequest + +class DashboardListUpdateItemsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_list_item_request import DashboardListItemRequest + return { + "dashboards": ([DashboardListItemRequest],), + } + attribute_map = { + "dashboards": "dashboards", + } + + def __init__(self_, dashboards: Union[List[DashboardListItemRequest], UnsetType]=unset, **kwargs): + """ + Request containing the list of dashboards to update to. + + :param dashboards: List of dashboards to update the dashboard list to. + :type dashboards: [DashboardListItemRequest], optional + """ + if dashboards is not unset: + kwargs["dashboards"] = dashboards + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dashboard_list_update_items_response.py b/datadog_api_client/v2/model/dashboard_list_update_items_response.py new file mode 100644 index 0000000000..5783b652b6 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_list_update_items_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_list_item_response import DashboardListItemResponse + +class DashboardListUpdateItemsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_list_item_response import DashboardListItemResponse + return { + "dashboards": ([DashboardListItemResponse],), + } + attribute_map = { + "dashboards": "dashboards", + } + + def __init__(self_, dashboards: Union[List[DashboardListItemResponse], UnsetType]=unset, **kwargs): + """ + Response containing a list of updated dashboards. + + :param dashboards: List of dashboards in the dashboard list. + :type dashboards: [DashboardListItemResponse], optional + """ + if dashboards is not unset: + kwargs["dashboards"] = dashboards + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dashboard_trigger_wrapper.py b/datadog_api_client/v2/model/dashboard_trigger_wrapper.py new file mode 100644 index 0000000000..9fb85b3e59 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_trigger_wrapper.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DashboardTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dashboard_trigger": (dict,), + "start_step_names": ([str],), + } + attribute_map = { + "dashboard_trigger": "dashboardTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, dashboard_trigger: dict, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Dashboard-based trigger. + + :param dashboard_trigger: Trigger a workflow from a Dashboard. + :type dashboard_trigger: dict + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.dashboard_trigger = dashboard_trigger diff --git a/datadog_api_client/v2/model/dashboard_type.py b/datadog_api_client/v2/model/dashboard_type.py new file mode 100644 index 0000000000..1c0710e6d1 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardType(ModelSimple): + """ + The type of the dashboard. + + :param value: Must be one of ["custom_timeboard", "custom_screenboard", "integration_screenboard", "integration_timeboard", "host_timeboard"]. + :type value: str + """ + + allowed_values = { + "custom_timeboard", + "custom_screenboard", + "integration_screenboard", + "integration_timeboard", + "host_timeboard", + } + CUSTOM_TIMEBOARD: ClassVar["DashboardType"] + CUSTOM_SCREENBOARD: ClassVar["DashboardType"] + INTEGRATION_SCREENBOARD: ClassVar["DashboardType"] + INTEGRATION_TIMEBOARD: ClassVar["DashboardType"] + HOST_TIMEBOARD: ClassVar["DashboardType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardType.CUSTOM_TIMEBOARD = DashboardType("custom_timeboard") +DashboardType.CUSTOM_SCREENBOARD = DashboardType("custom_screenboard") +DashboardType.INTEGRATION_SCREENBOARD = DashboardType("integration_screenboard") +DashboardType.INTEGRATION_TIMEBOARD = DashboardType("integration_timeboard") +DashboardType.HOST_TIMEBOARD = DashboardType("host_timeboard") diff --git a/datadog_api_client/v2/model/dashboard_usage.py b/datadog_api_client/v2/model/dashboard_usage.py new file mode 100644 index 0000000000..39d0a2b707 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_usage.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_usage_attributes import DashboardUsageAttributes + from datadog_api_client.v2.model.dashboard_usage_type import DashboardUsageType + +class DashboardUsage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_usage_attributes import DashboardUsageAttributes + from datadog_api_client.v2.model.dashboard_usage_type import DashboardUsageType + return { + "attributes": (DashboardUsageAttributes,), + "id": (str,), + "type": (DashboardUsageType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DashboardUsageAttributes, id: str, type: DashboardUsageType, **kwargs): + """ + A single dashboard usage record. + + :param attributes: Usage statistics for a dashboard. The ``viewer`` field and all view-count fields ( ``total_views`` , ``viewed_at`` , ``total_views_by_type`` ) are populated only when Real User Monitoring (RUM) is active for the org. + :type attributes: DashboardUsageAttributes + + :param id: The dashboard ID. + :type id: str + + :param type: The type of the resource. Always ``dashboards-usages``. + :type type: DashboardUsageType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/dashboard_usage_attributes.py b/datadog_api_client/v2/model/dashboard_usage_attributes.py new file mode 100644 index 0000000000..33ccfcbf5a --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_usage_attributes.py @@ -0,0 +1,132 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_usage_user import DashboardUsageUser + +class DashboardUsageAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_usage_user import DashboardUsageUser + return { + "author": (DashboardUsageUser,), + "created_at": (datetime, none_type), + "dashboard_quality_score": (float, none_type), + "edited_at": (datetime, none_type), + "org_id": (int,), + "teams": ([str], none_type), + "title": (str,), + "total_views": (int,), + "total_views_by_type": ({str: (int,)}, none_type), + "viewed_at": (datetime, none_type), + "viewer": (DashboardUsageUser,), + "widget_count": (int, none_type), + "widget_count_by_type": ({str: (int,)}, none_type), + } + attribute_map = { + "author": "author", + "created_at": "created_at", + "dashboard_quality_score": "dashboard_quality_score", + "edited_at": "edited_at", + "org_id": "org_id", + "teams": "teams", + "title": "title", + "total_views": "total_views", + "total_views_by_type": "total_views_by_type", + "viewed_at": "viewed_at", + "viewer": "viewer", + "widget_count": "widget_count", + "widget_count_by_type": "widget_count_by_type", + } + + def __init__(self_, org_id: int, author: Union[DashboardUsageUser, none_type, UnsetType]=unset, created_at: Union[datetime, none_type, UnsetType]=unset, dashboard_quality_score: Union[float, none_type, UnsetType]=unset, edited_at: Union[datetime, none_type, UnsetType]=unset, teams: Union[List[str], none_type, UnsetType]=unset, title: Union[str, UnsetType]=unset, total_views: Union[int, UnsetType]=unset, total_views_by_type: Union[Dict[str, int], none_type, UnsetType]=unset, viewed_at: Union[datetime, none_type, UnsetType]=unset, viewer: Union[DashboardUsageUser, none_type, UnsetType]=unset, widget_count: Union[int, none_type, UnsetType]=unset, widget_count_by_type: Union[Dict[str, int], none_type, UnsetType]=unset, **kwargs): + """ + Usage statistics for a dashboard. The ``viewer`` field and all view-count fields ( ``total_views`` , ``viewed_at`` , ``total_views_by_type`` ) are populated only when Real User Monitoring (RUM) is active for the org. + + :param author: A user referenced from a dashboard usage record (author or viewer). + :type author: DashboardUsageUser, none_type, optional + + :param created_at: When the dashboard was created. + :type created_at: datetime, none_type, optional + + :param dashboard_quality_score: The dashboard quality score, or ``null`` when no score is available. + :type dashboard_quality_score: float, none_type, optional + + :param edited_at: When the dashboard was most recently edited. + :type edited_at: datetime, none_type, optional + + :param org_id: The Datadog organization that owns the dashboard. + :type org_id: int + + :param teams: Teams the dashboard is tagged with. + :type teams: [str], none_type, optional + + :param title: The dashboard title. + :type title: str, optional + + :param total_views: Total view count for the dashboard. Counts only views captured by Real User Monitoring (RUM); ``0`` in orgs without RUM. + :type total_views: int, optional + + :param total_views_by_type: View counts keyed by view type ( ``in_app`` , ``embed`` , ``public`` , ``shared`` , ``api`` , ``unknown`` ). Counts only views captured by Real User Monitoring (RUM); empty in orgs without RUM. + :type total_views_by_type: {str: (int,)}, none_type, optional + + :param viewed_at: When the dashboard was most recently viewed. Populated only when Real User Monitoring (RUM) is active for the org; ``null`` in orgs without RUM. + :type viewed_at: datetime, none_type, optional + + :param viewer: A user referenced from a dashboard usage record (author or viewer). + :type viewer: DashboardUsageUser, none_type, optional + + :param widget_count: The total number of widgets on the dashboard. + :type widget_count: int, none_type, optional + + :param widget_count_by_type: Widget counts keyed by widget type. The map includes group widgets and widgets without requests. + :type widget_count_by_type: {str: (int,)}, none_type, optional + """ + if author is not unset: + kwargs["author"] = author + if created_at is not unset: + kwargs["created_at"] = created_at + if dashboard_quality_score is not unset: + kwargs["dashboard_quality_score"] = dashboard_quality_score + if edited_at is not unset: + kwargs["edited_at"] = edited_at + if teams is not unset: + kwargs["teams"] = teams + if title is not unset: + kwargs["title"] = title + if total_views is not unset: + kwargs["total_views"] = total_views + if total_views_by_type is not unset: + kwargs["total_views_by_type"] = total_views_by_type + if viewed_at is not unset: + kwargs["viewed_at"] = viewed_at + if viewer is not unset: + kwargs["viewer"] = viewer + if widget_count is not unset: + kwargs["widget_count"] = widget_count + if widget_count_by_type is not unset: + kwargs["widget_count_by_type"] = widget_count_by_type + super().__init__(kwargs) + + + self_.org_id = org_id diff --git a/datadog_api_client/v2/model/dashboard_usage_response.py b/datadog_api_client/v2/model/dashboard_usage_response.py new file mode 100644 index 0000000000..0357036693 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_usage_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_usage import DashboardUsage + +class DashboardUsageResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_usage import DashboardUsage + return { + "data": (DashboardUsage,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DashboardUsage, **kwargs): + """ + Response containing usage statistics for a single dashboard. + + :param data: A single dashboard usage record. + :type data: DashboardUsage + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dashboard_usage_type.py b/datadog_api_client/v2/model/dashboard_usage_type.py new file mode 100644 index 0000000000..d9ffcefb96 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_usage_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DashboardUsageType(ModelSimple): + """ + The type of the resource. Always `dashboards-usages`. + + :param value: If omitted defaults to "dashboards-usages". Must be one of ["dashboards-usages"]. + :type value: str + """ + + allowed_values = { + "dashboards-usages", + } + DASHBOARDS_USAGES: ClassVar["DashboardUsageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DashboardUsageType.DASHBOARDS_USAGES = DashboardUsageType("dashboards-usages") diff --git a/datadog_api_client/v2/model/dashboard_usage_user.py b/datadog_api_client/v2/model/dashboard_usage_user.py new file mode 100644 index 0000000000..de99f55173 --- /dev/null +++ b/datadog_api_client/v2/model/dashboard_usage_user.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DashboardUsageUser(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "id": (str,), + "is_disabled": (bool,), + "name": (str,), + } + attribute_map = { + "handle": "handle", + "id": "id", + "is_disabled": "is_disabled", + "name": "name", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_disabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A user referenced from a dashboard usage record (author or viewer). + + :param handle: Datadog handle (login) of the user. + :type handle: str, optional + + :param id: The user ID. + :type id: str, optional + + :param is_disabled: Whether the user account is disabled. + :type is_disabled: bool, optional + + :param name: Display name of the user. + :type name: str, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if id is not unset: + kwargs["id"] = id + if is_disabled is not unset: + kwargs["is_disabled"] = is_disabled + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/data_attributes_rules_items_if_tag_exists.py b/datadog_api_client/v2/model/data_attributes_rules_items_if_tag_exists.py new file mode 100644 index 0000000000..ceb2a34f3b --- /dev/null +++ b/datadog_api_client/v2/model/data_attributes_rules_items_if_tag_exists.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DataAttributesRulesItemsIfTagExists(ModelSimple): + """ + The behavior when the tag already exists. + + :param value: Must be one of ["append", "do_not_apply", "replace"]. + :type value: str + """ + + allowed_values = { + "append", + "do_not_apply", + "replace", + } + APPEND: ClassVar["DataAttributesRulesItemsIfTagExists"] + DO_NOT_APPLY: ClassVar["DataAttributesRulesItemsIfTagExists"] + REPLACE: ClassVar["DataAttributesRulesItemsIfTagExists"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DataAttributesRulesItemsIfTagExists.APPEND = DataAttributesRulesItemsIfTagExists("append") +DataAttributesRulesItemsIfTagExists.DO_NOT_APPLY = DataAttributesRulesItemsIfTagExists("do_not_apply") +DataAttributesRulesItemsIfTagExists.REPLACE = DataAttributesRulesItemsIfTagExists("replace") diff --git a/datadog_api_client/v2/model/data_attributes_rules_items_mapping.py b/datadog_api_client/v2/model/data_attributes_rules_items_mapping.py new file mode 100644 index 0000000000..a430af3f70 --- /dev/null +++ b/datadog_api_client/v2/model/data_attributes_rules_items_mapping.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + +class DataAttributesRulesItemsMapping(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + return { + "destination_key": (str,), + "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), + "source_keys": ([str],), + } + attribute_map = { + "destination_key": "destination_key", + "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", + "source_keys": "source_keys", + } + + def __init__(self_, destination_key: str, source_keys: List[str], if_not_exists: Union[bool, UnsetType]=unset, if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType]=unset, **kwargs): + """ + The definition of ``DataAttributesRulesItemsMapping`` object. + + :param destination_key: The ``mapping`` ``destination_key``. + :type destination_key: str + + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``mapping`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + + :param source_keys: The ``mapping`` ``source_keys``. + :type source_keys: [str] + """ + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists + super().__init__(kwargs) + + + self_.destination_key = destination_key + self_.source_keys = source_keys diff --git a/datadog_api_client/v2/model/data_deletion_response_item.py b/datadog_api_client/v2/model/data_deletion_response_item.py new file mode 100644 index 0000000000..a25177d440 --- /dev/null +++ b/datadog_api_client/v2/model/data_deletion_response_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_deletion_response_item_attributes import DataDeletionResponseItemAttributes + +class DataDeletionResponseItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_deletion_response_item_attributes import DataDeletionResponseItemAttributes + return { + "attributes": (DataDeletionResponseItemAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DataDeletionResponseItemAttributes, id: str, type: str, **kwargs): + """ + The created data deletion request information. + + :param attributes: Deletion attribute for data deletion response. + :type attributes: DataDeletionResponseItemAttributes + + :param id: The ID of the created data deletion request. + :type id: str + + :param type: The type of the request created. + :type type: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/data_deletion_response_item_attributes.py b/datadog_api_client/v2/model/data_deletion_response_item_attributes.py new file mode 100644 index 0000000000..fe940292a0 --- /dev/null +++ b/datadog_api_client/v2/model/data_deletion_response_item_attributes.py @@ -0,0 +1,118 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DataDeletionResponseItemAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (str,), + "created_by": (str,), + "from_time": (int,), + "indexes": ([str],), + "is_created": (bool,), + "org_id": (int,), + "product": (str,), + "query": (str,), + "starting_at": (str,), + "status": (str,), + "to_time": (int,), + "total_unrestricted": (int,), + "updated_at": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "from_time": "from_time", + "indexes": "indexes", + "is_created": "is_created", + "org_id": "org_id", + "product": "product", + "query": "query", + "starting_at": "starting_at", + "status": "status", + "to_time": "to_time", + "total_unrestricted": "total_unrestricted", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: str, created_by: str, from_time: int, is_created: bool, org_id: int, product: str, query: str, starting_at: str, status: str, to_time: int, total_unrestricted: int, updated_at: str, indexes: Union[List[str], UnsetType]=unset, **kwargs): + """ + Deletion attribute for data deletion response. + + :param created_at: Creation time of the deletion request. + :type created_at: str + + :param created_by: User who created the deletion request. + :type created_by: str + + :param from_time: Start of requested time window, milliseconds since Unix epoch. + :type from_time: int + + :param indexes: List of indexes for the search. If not provided, the search is performed in all indexes. + :type indexes: [str], optional + + :param is_created: Whether the deletion request is fully created or not. It can take several minutes to fully create a deletion request depending on the target query and timeframe. + :type is_created: bool + + :param org_id: Organization ID. + :type org_id: int + + :param product: Product name. + :type product: str + + :param query: Query for creating a data deletion request. + :type query: str + + :param starting_at: Starting time of the process to delete the requested data. + :type starting_at: str + + :param status: Status of the deletion request. + :type status: str + + :param to_time: End of requested time window, milliseconds since Unix epoch. + :type to_time: int + + :param total_unrestricted: Total number of elements to be deleted. Only the data accessible to the current user that matches the query and timeframe provided will be deleted. + :type total_unrestricted: int + + :param updated_at: Update time of the deletion request. + :type updated_at: str + """ + if indexes is not unset: + kwargs["indexes"] = indexes + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.from_time = from_time + self_.is_created = is_created + self_.org_id = org_id + self_.product = product + self_.query = query + self_.starting_at = starting_at + self_.status = status + self_.to_time = to_time + self_.total_unrestricted = total_unrestricted + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/data_deletion_response_meta.py b/datadog_api_client/v2/model/data_deletion_response_meta.py new file mode 100644 index 0000000000..0f7fe230d3 --- /dev/null +++ b/datadog_api_client/v2/model/data_deletion_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DataDeletionResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count_product": ({str: (int,)},), + "count_status": ({str: (int,)},), + "next_page": (str,), + "product": (str,), + "request_status": (str,), + } + attribute_map = { + "count_product": "count_product", + "count_status": "count_status", + "next_page": "next_page", + "product": "product", + "request_status": "request_status", + } + + def __init__(self_, count_product: Union[Dict[str, int], UnsetType]=unset, count_status: Union[Dict[str, int], UnsetType]=unset, next_page: Union[str, UnsetType]=unset, product: Union[str, UnsetType]=unset, request_status: Union[str, UnsetType]=unset, **kwargs): + """ + The metadata of the data deletion response. + + :param count_product: The total deletion requests created by product. + :type count_product: {str: (int,)}, optional + + :param count_status: The total deletion requests created by status. + :type count_status: {str: (int,)}, optional + + :param next_page: The next page when searching deletion requests created in the current organization. + :type next_page: str, optional + + :param product: The product of the deletion request. + :type product: str, optional + + :param request_status: The status of the executed request. + :type request_status: str, optional + """ + if count_product is not unset: + kwargs["count_product"] = count_product + if count_status is not unset: + kwargs["count_status"] = count_status + if next_page is not unset: + kwargs["next_page"] = next_page + if product is not unset: + kwargs["product"] = product + if request_status is not unset: + kwargs["request_status"] = request_status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/data_export_config.py b/datadog_api_client/v2/model/data_export_config.py new file mode 100644 index 0000000000..8894e686f8 --- /dev/null +++ b/datadog_api_client/v2/model/data_export_config.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DataExportConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "bucket_name": (str,), + "bucket_region": (str,), + "report_name": (str,), + "report_prefix": (str,), + "report_type": (str,), + } + attribute_map = { + "bucket_name": "bucket_name", + "bucket_region": "bucket_region", + "report_name": "report_name", + "report_prefix": "report_prefix", + "report_type": "report_type", + } + + def __init__(self_, bucket_name: str, bucket_region: str, report_name: str, report_prefix: str, report_type: str, **kwargs): + """ + AWS Cost and Usage Report data export configuration. + + :param bucket_name: Name of the S3 bucket where the Cost and Usage Report is stored. + :type bucket_name: str + + :param bucket_region: AWS region of the S3 bucket. + :type bucket_region: str + + :param report_name: Name of the Cost and Usage Report. + :type report_name: str + + :param report_prefix: S3 prefix where the Cost and Usage Report is stored. + :type report_prefix: str + + :param report_type: Type of the Cost and Usage Report. Currently only ``CUR2.0`` is supported. + :type report_type: str + """ + super().__init__(kwargs) + + + self_.bucket_name = bucket_name + self_.bucket_region = bucket_region + self_.report_name = report_name + self_.report_prefix = report_prefix + self_.report_type = report_type diff --git a/datadog_api_client/v2/model/data_observability_monitor_run_status.py b/datadog_api_client/v2/model/data_observability_monitor_run_status.py new file mode 100644 index 0000000000..47de2ec727 --- /dev/null +++ b/datadog_api_client/v2/model/data_observability_monitor_run_status.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DataObservabilityMonitorRunStatus(ModelSimple): + """ + The status of a data observability monitor run. + + :param value: Must be one of ["pending", "ok", "warn", "alert", "error"]. + :type value: str + """ + + allowed_values = { + "pending", + "ok", + "warn", + "alert", + "error", + } + PENDING: ClassVar["DataObservabilityMonitorRunStatus"] + OK: ClassVar["DataObservabilityMonitorRunStatus"] + WARN: ClassVar["DataObservabilityMonitorRunStatus"] + ALERT: ClassVar["DataObservabilityMonitorRunStatus"] + ERROR: ClassVar["DataObservabilityMonitorRunStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DataObservabilityMonitorRunStatus.PENDING = DataObservabilityMonitorRunStatus("pending") +DataObservabilityMonitorRunStatus.OK = DataObservabilityMonitorRunStatus("ok") +DataObservabilityMonitorRunStatus.WARN = DataObservabilityMonitorRunStatus("warn") +DataObservabilityMonitorRunStatus.ALERT = DataObservabilityMonitorRunStatus("alert") +DataObservabilityMonitorRunStatus.ERROR = DataObservabilityMonitorRunStatus("error") diff --git a/datadog_api_client/v2/model/data_observability_monitor_run_type.py b/datadog_api_client/v2/model/data_observability_monitor_run_type.py new file mode 100644 index 0000000000..2958bcfb7e --- /dev/null +++ b/datadog_api_client/v2/model/data_observability_monitor_run_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DataObservabilityMonitorRunType(ModelSimple): + """ + The JSON:API resource type for a data observability monitor run. + + :param value: If omitted defaults to "monitor_run". Must be one of ["monitor_run"]. + :type value: str + """ + + allowed_values = { + "monitor_run", + } + MONITOR_RUN: ClassVar["DataObservabilityMonitorRunType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DataObservabilityMonitorRunType.MONITOR_RUN = DataObservabilityMonitorRunType("monitor_run") diff --git a/datadog_api_client/v2/model/data_relationships_teams.py b/datadog_api_client/v2/model/data_relationships_teams.py new file mode 100644 index 0000000000..02e925ba5b --- /dev/null +++ b/datadog_api_client/v2/model/data_relationships_teams.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_relationships_teams_data_items import DataRelationshipsTeamsDataItems + +class DataRelationshipsTeams(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_relationships_teams_data_items import DataRelationshipsTeamsDataItems + return { + "data": ([DataRelationshipsTeamsDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[DataRelationshipsTeamsDataItems], UnsetType]=unset, **kwargs): + """ + Associates teams with this schedule in a data structure. + + :param data: An array of team references for this schedule. + :type data: [DataRelationshipsTeamsDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/data_relationships_teams_data_items.py b/datadog_api_client/v2/model/data_relationships_teams_data_items.py new file mode 100644 index 0000000000..ed6bdfa9d1 --- /dev/null +++ b/datadog_api_client/v2/model/data_relationships_teams_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_relationships_teams_data_items_type import DataRelationshipsTeamsDataItemsType + +class DataRelationshipsTeamsDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_relationships_teams_data_items_type import DataRelationshipsTeamsDataItemsType + return { + "id": (str,), + "type": (DataRelationshipsTeamsDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: DataRelationshipsTeamsDataItemsType, **kwargs): + """ + Relates a team to this schedule, identified by ``id`` and ``type`` (must be ``teams`` ). + + :param id: The unique identifier of the team in this relationship. + :type id: str + + :param type: Teams resource type. + :type type: DataRelationshipsTeamsDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/data_relationships_teams_data_items_type.py b/datadog_api_client/v2/model/data_relationships_teams_data_items_type.py new file mode 100644 index 0000000000..7caac52076 --- /dev/null +++ b/datadog_api_client/v2/model/data_relationships_teams_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DataRelationshipsTeamsDataItemsType(ModelSimple): + """ + Teams resource type. + + :param value: If omitted defaults to "teams". Must be one of ["teams"]. + :type value: str + """ + + allowed_values = { + "teams", + } + TEAMS: ClassVar["DataRelationshipsTeamsDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DataRelationshipsTeamsDataItemsType.TEAMS = DataRelationshipsTeamsDataItemsType("teams") diff --git a/datadog_api_client/v2/model/data_scalar_column.py b/datadog_api_client/v2/model/data_scalar_column.py new file mode 100644 index 0000000000..a6b797dc24 --- /dev/null +++ b/datadog_api_client/v2/model/data_scalar_column.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scalar_meta import ScalarMeta + from datadog_api_client.v2.model.scalar_column_type_number import ScalarColumnTypeNumber + +class DataScalarColumn(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scalar_meta import ScalarMeta + from datadog_api_client.v2.model.scalar_column_type_number import ScalarColumnTypeNumber + return { + "meta": (ScalarMeta,), + "name": (str,), + "type": (ScalarColumnTypeNumber,), + "values": ([float, none_type],), + } + attribute_map = { + "meta": "meta", + "name": "name", + "type": "type", + "values": "values", + } + + def __init__(self_, meta: Union[ScalarMeta, UnsetType]=unset, name: Union[str, UnsetType]=unset, type: Union[ScalarColumnTypeNumber, UnsetType]=unset, values: Union[List[float], UnsetType]=unset, **kwargs): + """ + A column containing the numerical results for a formula or query. + + :param meta: Metadata for the resulting numerical values. + :type meta: ScalarMeta, optional + + :param name: The name referencing the formula or query for this column. + :type name: str, optional + + :param type: The type of column present for numbers. + :type type: ScalarColumnTypeNumber, optional + + :param values: The array of numerical values for one formula or query. + :type values: [float, none_type], optional + """ + if meta is not unset: + kwargs["meta"] = meta + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/data_transform.py b/datadog_api_client/v2/model/data_transform.py new file mode 100644 index 0000000000..d2d541b758 --- /dev/null +++ b/datadog_api_client/v2/model/data_transform.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_transform_properties import DataTransformProperties + from datadog_api_client.v2.model.data_transform_type import DataTransformType + +class DataTransform(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_transform_properties import DataTransformProperties + from datadog_api_client.v2.model.data_transform_type import DataTransformType + return { + "id": (UUID,), + "name": (str,), + "properties": (DataTransformProperties,), + "type": (DataTransformType,), + } + attribute_map = { + "id": "id", + "name": "name", + "properties": "properties", + "type": "type", + } + + def __init__(self_, id: UUID, name: str, properties: DataTransformProperties, type: DataTransformType, **kwargs): + """ + A data transformer, which is custom JavaScript code that executes and transforms data when its inputs change. + + :param id: The ID of the data transformer. + :type id: UUID + + :param name: A unique identifier for this data transformer. This name is also used to access the transformer's result throughout the app. + :type name: str + + :param properties: The properties of the data transformer. + :type properties: DataTransformProperties + + :param type: The data transform type. + :type type: DataTransformType + """ + super().__init__(kwargs) + + + self_.id = id + self_.name = name + self_.properties = properties + self_.type = type diff --git a/datadog_api_client/v2/model/data_transform_properties.py b/datadog_api_client/v2/model/data_transform_properties.py new file mode 100644 index 0000000000..e3ca114e07 --- /dev/null +++ b/datadog_api_client/v2/model/data_transform_properties.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DataTransformProperties(ModelNormal): + @cached_property + def openapi_types(_): + return { + "outputs": (str,), + } + attribute_map = { + "outputs": "outputs", + } + + def __init__(self_, outputs: Union[str, UnsetType]=unset, **kwargs): + """ + The properties of the data transformer. + + :param outputs: A JavaScript function that returns the transformed data. + :type outputs: str, optional + """ + if outputs is not unset: + kwargs["outputs"] = outputs + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/data_transform_type.py b/datadog_api_client/v2/model/data_transform_type.py new file mode 100644 index 0000000000..0299dd6109 --- /dev/null +++ b/datadog_api_client/v2/model/data_transform_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DataTransformType(ModelSimple): + """ + The data transform type. + + :param value: If omitted defaults to "dataTransform". Must be one of ["dataTransform"]. + :type value: str + """ + + allowed_values = { + "dataTransform", + } + DATATRANSFORM: ClassVar["DataTransformType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DataTransformType.DATATRANSFORM = DataTransformType("dataTransform") diff --git a/datadog_api_client/v2/model/database_monitoring_trigger_wrapper.py b/datadog_api_client/v2/model/database_monitoring_trigger_wrapper.py new file mode 100644 index 0000000000..0d8d63301e --- /dev/null +++ b/datadog_api_client/v2/model/database_monitoring_trigger_wrapper.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DatabaseMonitoringTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + return { + "database_monitoring_trigger": (dict,), + "start_step_names": ([str],), + } + attribute_map = { + "database_monitoring_trigger": "databaseMonitoringTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, database_monitoring_trigger: dict, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Database Monitoring-based trigger. + + :param database_monitoring_trigger: Trigger a workflow from Database Monitoring. + :type database_monitoring_trigger: dict + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.database_monitoring_trigger = database_monitoring_trigger diff --git a/datadog_api_client/v2/model/datadog_api_key.py b/datadog_api_client/v2/model/datadog_api_key.py new file mode 100644 index 0000000000..d36a5a653d --- /dev/null +++ b/datadog_api_client/v2/model/datadog_api_key.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datadog_api_key_type import DatadogAPIKeyType + +class DatadogAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datadog_api_key_type import DatadogAPIKeyType + return { + "api_key": (str,), + "app_key": (str,), + "datacenter": (str,), + "subdomain": (str,), + "type": (DatadogAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "app_key": "app_key", + "datacenter": "datacenter", + "subdomain": "subdomain", + "type": "type", + } + + def __init__(self_, api_key: str, app_key: str, datacenter: str, type: DatadogAPIKeyType, subdomain: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``DatadogAPIKey`` object. + + :param api_key: The ``DatadogAPIKey`` ``api_key``. + :type api_key: str + + :param app_key: The ``DatadogAPIKey`` ``app_key``. + :type app_key: str + + :param datacenter: The ``DatadogAPIKey`` ``datacenter``. + :type datacenter: str + + :param subdomain: Custom subdomain used for Datadog URLs generated with this Connection. For example, if this org uses ``https://acme.datadoghq.com`` to access Datadog, set this field to ``acme``. If this field is omitted, generated URLs will use the default site URL for its datacenter (see `https://docs.datadoghq.com/getting_started/site `_ ). + :type subdomain: str, optional + + :param type: The definition of the ``DatadogAPIKey`` object. + :type type: DatadogAPIKeyType + """ + if subdomain is not unset: + kwargs["subdomain"] = subdomain + super().__init__(kwargs) + + + self_.api_key = api_key + self_.app_key = app_key + self_.datacenter = datacenter + self_.type = type diff --git a/datadog_api_client/v2/model/datadog_api_key_type.py b/datadog_api_client/v2/model/datadog_api_key_type.py new file mode 100644 index 0000000000..28da2fe3f9 --- /dev/null +++ b/datadog_api_client/v2/model/datadog_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DatadogAPIKeyType(ModelSimple): + """ + The definition of the `DatadogAPIKey` object. + + :param value: If omitted defaults to "DatadogAPIKey". Must be one of ["DatadogAPIKey"]. + :type value: str + """ + + allowed_values = { + "DatadogAPIKey", + } + DATADOGAPIKEY: ClassVar["DatadogAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DatadogAPIKeyType.DATADOGAPIKEY = DatadogAPIKeyType("DatadogAPIKey") diff --git a/datadog_api_client/v2/model/datadog_api_key_update.py b/datadog_api_client/v2/model/datadog_api_key_update.py new file mode 100644 index 0000000000..97a7a8215c --- /dev/null +++ b/datadog_api_client/v2/model/datadog_api_key_update.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datadog_api_key_type import DatadogAPIKeyType + +class DatadogAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datadog_api_key_type import DatadogAPIKeyType + return { + "api_key": (str,), + "app_key": (str,), + "datacenter": (str,), + "subdomain": (str,), + "type": (DatadogAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "app_key": "app_key", + "datacenter": "datacenter", + "subdomain": "subdomain", + "type": "type", + } + + def __init__(self_, type: DatadogAPIKeyType, api_key: Union[str, UnsetType]=unset, app_key: Union[str, UnsetType]=unset, datacenter: Union[str, UnsetType]=unset, subdomain: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``DatadogAPIKey`` object. + + :param api_key: The ``DatadogAPIKeyUpdate`` ``api_key``. + :type api_key: str, optional + + :param app_key: The ``DatadogAPIKeyUpdate`` ``app_key``. + :type app_key: str, optional + + :param datacenter: The ``DatadogAPIKeyUpdate`` ``datacenter``. + :type datacenter: str, optional + + :param subdomain: Custom subdomain used for Datadog URLs generated with this Connection. For example, if this org uses ``https://acme.datadoghq.com`` to access Datadog, set this field to ``acme``. If this field is omitted, generated URLs will use the default site URL for its datacenter (see `https://docs.datadoghq.com/getting_started/site `_ ). + :type subdomain: str, optional + + :param type: The definition of the ``DatadogAPIKey`` object. + :type type: DatadogAPIKeyType + """ + if api_key is not unset: + kwargs["api_key"] = api_key + if app_key is not unset: + kwargs["app_key"] = app_key + if datacenter is not unset: + kwargs["datacenter"] = datacenter + if subdomain is not unset: + kwargs["subdomain"] = subdomain + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/datadog_credentials.py b/datadog_api_client/v2/model/datadog_credentials.py new file mode 100644 index 0000000000..0325a00af7 --- /dev/null +++ b/datadog_api_client/v2/model/datadog_credentials.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DatadogCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``DatadogCredentials`` object. + + :param api_key: The `DatadogAPIKey` `api_key`. + :type api_key: str + + :param app_key: The `DatadogAPIKey` `app_key`. + :type app_key: str + + :param datacenter: The `DatadogAPIKey` `datacenter`. + :type datacenter: str + + :param subdomain: Custom subdomain used for Datadog URLs generated with this Connection. For example, if this org uses `https://acme.datadoghq.com` to access Datadog, set this field to `acme`. If this field is omitted, generated URLs will use the default site URL for its datacenter (see [https://docs.datadoghq.com/getting_started/site](https://docs.datadoghq.com/getting_started/site)). + :type subdomain: str, optional + + :param type: The definition of the `DatadogAPIKey` object. + :type type: DatadogAPIKeyType + """ + 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.datadog_api_key import DatadogAPIKey + return { + "oneOf": [ + DatadogAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/datadog_credentials_update.py b/datadog_api_client/v2/model/datadog_credentials_update.py new file mode 100644 index 0000000000..febc969221 --- /dev/null +++ b/datadog_api_client/v2/model/datadog_credentials_update.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DatadogCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``DatadogCredentialsUpdate`` object. + + :param api_key: The `DatadogAPIKeyUpdate` `api_key`. + :type api_key: str, optional + + :param app_key: The `DatadogAPIKeyUpdate` `app_key`. + :type app_key: str, optional + + :param datacenter: The `DatadogAPIKeyUpdate` `datacenter`. + :type datacenter: str, optional + + :param subdomain: Custom subdomain used for Datadog URLs generated with this Connection. For example, if this org uses `https://acme.datadoghq.com` to access Datadog, set this field to `acme`. If this field is omitted, generated URLs will use the default site URL for its datacenter (see [https://docs.datadoghq.com/getting_started/site](https://docs.datadoghq.com/getting_started/site)). + :type subdomain: str, optional + + :param type: The definition of the `DatadogAPIKey` object. + :type type: DatadogAPIKeyType + """ + 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.datadog_api_key_update import DatadogAPIKeyUpdate + return { + "oneOf": [ + DatadogAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/datadog_integration.py b/datadog_api_client/v2/model/datadog_integration.py new file mode 100644 index 0000000000..619414fa78 --- /dev/null +++ b/datadog_api_client/v2/model/datadog_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datadog_credentials import DatadogCredentials + from datadog_api_client.v2.model.datadog_integration_type import DatadogIntegrationType + from datadog_api_client.v2.model.datadog_api_key import DatadogAPIKey + +class DatadogIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datadog_credentials import DatadogCredentials + from datadog_api_client.v2.model.datadog_integration_type import DatadogIntegrationType + return { + "credentials": (DatadogCredentials,), + "type": (DatadogIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[DatadogCredentials, DatadogAPIKey], type: DatadogIntegrationType, **kwargs): + """ + The definition of the ``DatadogIntegration`` object. + + :param credentials: The definition of the ``DatadogCredentials`` object. + :type credentials: DatadogCredentials + + :param type: The definition of the ``DatadogIntegrationType`` object. + :type type: DatadogIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/datadog_integration_type.py b/datadog_api_client/v2/model/datadog_integration_type.py new file mode 100644 index 0000000000..41e8184f3a --- /dev/null +++ b/datadog_api_client/v2/model/datadog_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DatadogIntegrationType(ModelSimple): + """ + The definition of the `DatadogIntegrationType` object. + + :param value: If omitted defaults to "Datadog". Must be one of ["Datadog"]. + :type value: str + """ + + allowed_values = { + "Datadog", + } + DATADOG: ClassVar["DatadogIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DatadogIntegrationType.DATADOG = DatadogIntegrationType("Datadog") diff --git a/datadog_api_client/v2/model/datadog_integration_update.py b/datadog_api_client/v2/model/datadog_integration_update.py new file mode 100644 index 0000000000..877a6febad --- /dev/null +++ b/datadog_api_client/v2/model/datadog_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datadog_credentials_update import DatadogCredentialsUpdate + from datadog_api_client.v2.model.datadog_integration_type import DatadogIntegrationType + from datadog_api_client.v2.model.datadog_api_key_update import DatadogAPIKeyUpdate + +class DatadogIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datadog_credentials_update import DatadogCredentialsUpdate + from datadog_api_client.v2.model.datadog_integration_type import DatadogIntegrationType + return { + "credentials": (DatadogCredentialsUpdate,), + "type": (DatadogIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: DatadogIntegrationType, credentials: Union[DatadogCredentialsUpdate, DatadogAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``DatadogIntegrationUpdate`` object. + + :param credentials: The definition of the ``DatadogCredentialsUpdate`` object. + :type credentials: DatadogCredentialsUpdate, optional + + :param type: The definition of the ``DatadogIntegrationType`` object. + :type type: DatadogIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/dataset_attributes_request.py b/datadog_api_client/v2/model/dataset_attributes_request.py new file mode 100644 index 0000000000..9ad4ebf245 --- /dev/null +++ b/datadog_api_client/v2/model/dataset_attributes_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct + +class DatasetAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct + return { + "name": (str,), + "principals": ([str],), + "product_filters": ([FiltersPerProduct],), + } + attribute_map = { + "name": "name", + "principals": "principals", + "product_filters": "product_filters", + } + + def __init__(self_, name: str, principals: List[str], product_filters: List[FiltersPerProduct], **kwargs): + """ + Dataset metadata and configurations. + + :param name: Name of the dataset. + :type name: str + + :param principals: List of access principals, formatted as ``principal_type:id``. Principal can be 'team' or 'role'. + :type principals: [str] + + :param product_filters: List of product-specific filters. + :type product_filters: [FiltersPerProduct] + """ + super().__init__(kwargs) + + + self_.name = name + self_.principals = principals + self_.product_filters = product_filters diff --git a/datadog_api_client/v2/model/dataset_attributes_response.py b/datadog_api_client/v2/model/dataset_attributes_response.py new file mode 100644 index 0000000000..701566c8dc --- /dev/null +++ b/datadog_api_client/v2/model/dataset_attributes_response.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct + +class DatasetAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct + return { + "created_at": (datetime, none_type), + "created_by": (UUID,), + "name": (str,), + "principals": ([str],), + "product_filters": ([FiltersPerProduct],), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "name": "name", + "principals": "principals", + "product_filters": "product_filters", + } + + def __init__(self_, created_at: Union[datetime, none_type, UnsetType]=unset, created_by: Union[UUID, UnsetType]=unset, name: Union[str, UnsetType]=unset, principals: Union[List[str], UnsetType]=unset, product_filters: Union[List[FiltersPerProduct], UnsetType]=unset, **kwargs): + """ + Dataset metadata and configuration(s). + + :param created_at: Timestamp when the dataset was created. + :type created_at: datetime, none_type, optional + + :param created_by: Unique ID of the user who created the dataset. + :type created_by: UUID, optional + + :param name: Name of the dataset. + :type name: str, optional + + :param principals: List of access principals, formatted as ``principal_type:id``. Principal can be 'team' or 'role'. + :type principals: [str], optional + + :param product_filters: List of product-specific filters. + :type product_filters: [FiltersPerProduct], optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if name is not unset: + kwargs["name"] = name + if principals is not unset: + kwargs["principals"] = principals + if product_filters is not unset: + kwargs["product_filters"] = product_filters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dataset_create_request.py b/datadog_api_client/v2/model/dataset_create_request.py new file mode 100644 index 0000000000..41d1b9e7a7 --- /dev/null +++ b/datadog_api_client/v2/model/dataset_create_request.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_request import DatasetRequest + +class DatasetCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_request import DatasetRequest + return { + "data": (DatasetRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DatasetRequest, **kwargs): + """ + Create request for a dataset. + + :param data: **Datasets Object Constraints** + + * + **Tag limit per dataset** : + + * Each restricted dataset supports a maximum of 10 key:value pairs per product. + + * + **Tag key rules per telemetry type** : + + * Only one tag key or attribute may be used to define access within a single telemetry type. + * The same or different tag key may be used across different telemetry types. + + * + **Tag value uniqueness** : + + * Tag values must be unique within a single dataset. + * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + :type data: DatasetRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dataset_report_schedule_list_response.py b/datadog_api_client/v2/model/dataset_report_schedule_list_response.py new file mode 100644 index 0000000000..fd6cdfbb54 --- /dev/null +++ b/datadog_api_client/v2/model/dataset_report_schedule_list_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_report_schedule_response_data import DatasetReportScheduleResponseData + from datadog_api_client.v2.model.report_schedule_included_resource import ReportScheduleIncludedResource + from datadog_api_client.v2.model.report_schedule_author import ReportScheduleAuthor + from datadog_api_client.v2.model.report_schedule_resource import ReportScheduleResource + +class DatasetReportScheduleListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_report_schedule_response_data import DatasetReportScheduleResponseData + from datadog_api_client.v2.model.report_schedule_included_resource import ReportScheduleIncludedResource + return { + "data": ([DatasetReportScheduleResponseData],), + "included": ([ReportScheduleIncludedResource],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[DatasetReportScheduleResponseData], included: Union[List[Union[ReportScheduleIncludedResource, ReportScheduleAuthor, ReportScheduleResource]], UnsetType]=unset, **kwargs): + """ + Response containing a list of report schedules for a published dataset. + + :param data: A list of report schedules for the dataset. + :type data: [DatasetReportScheduleResponseData] + + :param included: Related resources included with the report schedules, such as authors. + :type included: [ReportScheduleIncludedResource], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dataset_report_schedule_resource_type.py b/datadog_api_client/v2/model/dataset_report_schedule_resource_type.py new file mode 100644 index 0000000000..065df646b5 --- /dev/null +++ b/datadog_api_client/v2/model/dataset_report_schedule_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DatasetReportScheduleResourceType(ModelSimple): + """ + The type of resource targeted by a dataset report schedule. + + :param value: If omitted defaults to "widget_dataset_list". Must be one of ["widget_dataset_list"]. + :type value: str + """ + + allowed_values = { + "widget_dataset_list", + } + WIDGET_DATASET_LIST: ClassVar["DatasetReportScheduleResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DatasetReportScheduleResourceType.WIDGET_DATASET_LIST = DatasetReportScheduleResourceType("widget_dataset_list") diff --git a/datadog_api_client/v2/model/dataset_report_schedule_response_attributes.py b/datadog_api_client/v2/model/dataset_report_schedule_response_attributes.py new file mode 100644 index 0000000000..7eb01f4ce1 --- /dev/null +++ b/datadog_api_client/v2/model/dataset_report_schedule_response_attributes.py @@ -0,0 +1,136 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_report_schedule_resource_type import DatasetReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_status import ReportScheduleStatus + +class DatasetReportScheduleResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_report_schedule_resource_type import DatasetReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_status import ReportScheduleStatus + return { + "cell_id": (str, none_type), + "dataset_id": (str, none_type), + "description": (str,), + "file_row_limit": (int, none_type), + "inline_row_limit": (int, none_type), + "next_recurrence": (int, none_type), + "notebook_id": (int, none_type), + "recipients": ([str],), + "resource_id": (str,), + "resource_type": (DatasetReportScheduleResourceType,), + "rrule": (str,), + "status": (ReportScheduleStatus,), + "timeframe": (str,), + "timezone": (str,), + "title": (str,), + } + attribute_map = { + "cell_id": "cell_id", + "dataset_id": "dataset_id", + "description": "description", + "file_row_limit": "file_row_limit", + "inline_row_limit": "inline_row_limit", + "next_recurrence": "next_recurrence", + "notebook_id": "notebook_id", + "recipients": "recipients", + "resource_id": "resource_id", + "resource_type": "resource_type", + "rrule": "rrule", + "status": "status", + "timeframe": "timeframe", + "timezone": "timezone", + "title": "title", + } + + def __init__(self_, cell_id: Union[str, none_type], dataset_id: Union[str, none_type], description: str, file_row_limit: Union[int, none_type], inline_row_limit: Union[int, none_type], next_recurrence: Union[int, none_type], notebook_id: Union[int, none_type], recipients: List[str], resource_id: str, resource_type: DatasetReportScheduleResourceType, rrule: str, status: ReportScheduleStatus, timeframe: str, timezone: str, title: str, **kwargs): + """ + The configuration and derived state of a report schedule for a published dataset. + + :param cell_id: The identifier of the notebook cell that published the dataset, or ``null`` if not set. + :type cell_id: str, none_type + + :param dataset_id: The identifier of the dataset, or ``null`` if not set. + :type dataset_id: str, none_type + + :param description: The description of the report. + :type description: str + + :param file_row_limit: The maximum number of rows included in the attached CSV file, or ``null`` if not set. + :type file_row_limit: int, none_type + + :param inline_row_limit: The maximum number of rows included inline in the email body, or ``null`` if not set. + :type inline_row_limit: int, none_type + + :param next_recurrence: The Unix timestamp, in milliseconds, of the next scheduled delivery, or + ``null`` if none is scheduled. + :type next_recurrence: int, none_type + + :param notebook_id: The identifier of the notebook containing the dataset cell, or ``null`` if not set. + :type notebook_id: int, none_type + + :param recipients: The recipients of the report (email addresses, Slack channel references, or + Microsoft Teams channel references). + :type recipients: [str] + + :param resource_id: The identifier of the widget containing the dataset. + :type resource_id: str + + :param resource_type: The type of resource targeted by a dataset report schedule. + :type resource_type: DatasetReportScheduleResourceType + + :param rrule: The recurrence rule for the schedule, expressed as an iCalendar ``RRULE`` string. + :type rrule: str + + :param status: Whether the schedule is currently delivering reports ( ``active`` ) or paused ( ``inactive`` ). + :type status: ReportScheduleStatus + + :param timeframe: The relative timeframe of data included in the report. + :type timeframe: str + + :param timezone: The IANA time zone identifier the recurrence rule is evaluated in. + :type timezone: str + + :param title: The title of the report. + :type title: str + """ + super().__init__(kwargs) + + + self_.cell_id = cell_id + self_.dataset_id = dataset_id + self_.description = description + self_.file_row_limit = file_row_limit + self_.inline_row_limit = inline_row_limit + self_.next_recurrence = next_recurrence + self_.notebook_id = notebook_id + self_.recipients = recipients + self_.resource_id = resource_id + self_.resource_type = resource_type + self_.rrule = rrule + self_.status = status + self_.timeframe = timeframe + self_.timezone = timezone + self_.title = title diff --git a/datadog_api_client/v2/model/dataset_report_schedule_response_data.py b/datadog_api_client/v2/model/dataset_report_schedule_response_data.py new file mode 100644 index 0000000000..1ea54f0364 --- /dev/null +++ b/datadog_api_client/v2/model/dataset_report_schedule_response_data.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_report_schedule_response_attributes import DatasetReportScheduleResponseAttributes + from datadog_api_client.v2.model.report_schedule_response_relationships import ReportScheduleResponseRelationships + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + +class DatasetReportScheduleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_report_schedule_response_attributes import DatasetReportScheduleResponseAttributes + from datadog_api_client.v2.model.report_schedule_response_relationships import ReportScheduleResponseRelationships + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + return { + "attributes": (DatasetReportScheduleResponseAttributes,), + "id": (UUID,), + "relationships": (ReportScheduleResponseRelationships,), + "type": (ReportScheduleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: DatasetReportScheduleResponseAttributes, id: UUID, relationships: ReportScheduleResponseRelationships, type: ReportScheduleType, **kwargs): + """ + The JSON:API data object representing a dataset report schedule. + + :param attributes: The configuration and derived state of a report schedule for a published dataset. + :type attributes: DatasetReportScheduleResponseAttributes + + :param id: The unique identifier of the dataset report schedule. + :type id: UUID + + :param relationships: Relationships for the report schedule. + :type relationships: ReportScheduleResponseRelationships + + :param type: JSON:API resource type for report schedules. + :type type: ReportScheduleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/dataset_request.py b/datadog_api_client/v2/model/dataset_request.py new file mode 100644 index 0000000000..3b3ccb09db --- /dev/null +++ b/datadog_api_client/v2/model/dataset_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_attributes_request import DatasetAttributesRequest + from datadog_api_client.v2.model.dataset_type import DatasetType + +class DatasetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_attributes_request import DatasetAttributesRequest + from datadog_api_client.v2.model.dataset_type import DatasetType + return { + "attributes": (DatasetAttributesRequest,), + "type": (DatasetType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DatasetAttributesRequest, type: DatasetType, **kwargs): + """ + **Datasets Object Constraints** + + * + **Tag limit per dataset** : + + * Each restricted dataset supports a maximum of 10 key:value pairs per product. + + * + **Tag key rules per telemetry type** : + + * Only one tag key or attribute may be used to define access within a single telemetry type. + * The same or different tag key may be used across different telemetry types. + + * + **Tag value uniqueness** : + + * Tag values must be unique within a single dataset. + * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + + :param attributes: Dataset metadata and configurations. + :type attributes: DatasetAttributesRequest + + :param type: Resource type, always set to ``dataset``. + :type type: DatasetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/dataset_response.py b/datadog_api_client/v2/model/dataset_response.py new file mode 100644 index 0000000000..bb2ec6651d --- /dev/null +++ b/datadog_api_client/v2/model/dataset_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_attributes_response import DatasetAttributesResponse + from datadog_api_client.v2.model.dataset_type import DatasetType + +class DatasetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_attributes_response import DatasetAttributesResponse + from datadog_api_client.v2.model.dataset_type import DatasetType + return { + "attributes": (DatasetAttributesResponse,), + "id": (str,), + "type": (DatasetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[DatasetAttributesResponse, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[DatasetType, UnsetType]=unset, **kwargs): + """ + **Datasets Object Constraints** + + * + **Tag Limit per Dataset** : + + * Each restricted dataset supports a maximum of 10 key:value pairs per product. + + * + **Tag Key Rules per Telemetry Type** : + + * Only one tag key or attribute may be used to define access within a single telemetry type. + * The same or different tag key may be used across different telemetry types. + + * + **Tag Value Uniqueness** : + + * Tag values must be unique within a single dataset. + * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + + :param attributes: Dataset metadata and configuration(s). + :type attributes: DatasetAttributesResponse, optional + + :param id: Unique identifier for the dataset. + :type id: str, optional + + :param type: Resource type, always set to ``dataset``. + :type type: DatasetType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dataset_response_multi.py b/datadog_api_client/v2/model/dataset_response_multi.py new file mode 100644 index 0000000000..59b9509f13 --- /dev/null +++ b/datadog_api_client/v2/model/dataset_response_multi.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_response import DatasetResponse + +class DatasetResponseMulti(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_response import DatasetResponse + return { + "data": ([DatasetResponse],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[DatasetResponse], UnsetType]=unset, **kwargs): + """ + Response containing a list of datasets. + + :param data: The list of datasets returned in response. + :type data: [DatasetResponse], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dataset_response_single.py b/datadog_api_client/v2/model/dataset_response_single.py new file mode 100644 index 0000000000..d56d56e2de --- /dev/null +++ b/datadog_api_client/v2/model/dataset_response_single.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_response import DatasetResponse + +class DatasetResponseSingle(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_response import DatasetResponse + return { + "data": (DatasetResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DatasetResponse, UnsetType]=unset, **kwargs): + """ + Response containing a single dataset object. + + :param data: **Datasets Object Constraints** + + * + **Tag Limit per Dataset** : + + * Each restricted dataset supports a maximum of 10 key:value pairs per product. + + * + **Tag Key Rules per Telemetry Type** : + + * Only one tag key or attribute may be used to define access within a single telemetry type. + * The same or different tag key may be used across different telemetry types. + + * + **Tag Value Uniqueness** : + + * Tag values must be unique within a single dataset. + * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + :type data: DatasetResponse, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dataset_type.py b/datadog_api_client/v2/model/dataset_type.py new file mode 100644 index 0000000000..3cd7aa60e1 --- /dev/null +++ b/datadog_api_client/v2/model/dataset_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DatasetType(ModelSimple): + """ + Resource type, always set to `dataset`. + + :param value: If omitted defaults to "dataset". Must be one of ["dataset"]. + :type value: str + """ + + allowed_values = { + "dataset", + } + DATASET: ClassVar["DatasetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DatasetType.DATASET = DatasetType("dataset") diff --git a/datadog_api_client/v2/model/dataset_update_request.py b/datadog_api_client/v2/model/dataset_update_request.py new file mode 100644 index 0000000000..a168feb20f --- /dev/null +++ b/datadog_api_client/v2/model/dataset_update_request.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_request import DatasetRequest + +class DatasetUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_request import DatasetRequest + return { + "data": (DatasetRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DatasetRequest, **kwargs): + """ + Edit request for a dataset. + + :param data: **Datasets Object Constraints** + + * + **Tag limit per dataset** : + + * Each restricted dataset supports a maximum of 10 key:value pairs per product. + + * + **Tag key rules per telemetry type** : + + * Only one tag key or attribute may be used to define access within a single telemetry type. + * The same or different tag key may be used across different telemetry types. + + * + **Tag value uniqueness** : + + * Tag values must be unique within a single dataset. + * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + :type data: DatasetRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/datastore.py b/datadog_api_client/v2/model/datastore.py new file mode 100644 index 0000000000..8f0407a6e5 --- /dev/null +++ b/datadog_api_client/v2/model/datastore.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datastore_data import DatastoreData + +class Datastore(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datastore_data import DatastoreData + return { + "data": (DatastoreData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DatastoreData, UnsetType]=unset, **kwargs): + """ + A datastore's complete configuration and metadata. + + :param data: Core information about a datastore, including its unique identifier and attributes. + :type data: DatastoreData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/datastore_array.py b/datadog_api_client/v2/model/datastore_array.py new file mode 100644 index 0000000000..8734a9e2ed --- /dev/null +++ b/datadog_api_client/v2/model/datastore_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datastore_data import DatastoreData + +class DatastoreArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datastore_data import DatastoreData + return { + "data": ([DatastoreData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[DatastoreData], **kwargs): + """ + A collection of datastores returned by list operations. + + :param data: An array of datastore objects containing their configurations and metadata. + :type data: [DatastoreData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/datastore_data.py b/datadog_api_client/v2/model/datastore_data.py new file mode 100644 index 0000000000..f6a920b8f3 --- /dev/null +++ b/datadog_api_client/v2/model/datastore_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datastore_data_attributes import DatastoreDataAttributes + from datadog_api_client.v2.model.datastore_data_type import DatastoreDataType + +class DatastoreData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datastore_data_attributes import DatastoreDataAttributes + from datadog_api_client.v2.model.datastore_data_type import DatastoreDataType + return { + "attributes": (DatastoreDataAttributes,), + "id": (str,), + "type": (DatastoreDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: DatastoreDataType, attributes: Union[DatastoreDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Core information about a datastore, including its unique identifier and attributes. + + :param attributes: Detailed information about a datastore. + :type attributes: DatastoreDataAttributes, optional + + :param id: The unique identifier of the datastore. + :type id: str, optional + + :param type: The resource type for datastores. + :type type: DatastoreDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/datastore_data_attributes.py b/datadog_api_client/v2/model/datastore_data_attributes.py new file mode 100644 index 0000000000..c4133e82c1 --- /dev/null +++ b/datadog_api_client/v2/model/datastore_data_attributes.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datastore_primary_key_generation_strategy import DatastorePrimaryKeyGenerationStrategy + +class DatastoreDataAttributes(ModelNormal): + validations = { + "primary_column_name": { + "max_length": 63, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datastore_primary_key_generation_strategy import DatastorePrimaryKeyGenerationStrategy + return { + "created_at": (datetime,), + "creator_user_id": (int,), + "creator_user_uuid": (str,), + "description": (str,), + "modified_at": (datetime,), + "name": (str,), + "org_id": (int,), + "primary_column_name": (str,), + "primary_key_generation_strategy": (DatastorePrimaryKeyGenerationStrategy,), + } + attribute_map = { + "created_at": "created_at", + "creator_user_id": "creator_user_id", + "creator_user_uuid": "creator_user_uuid", + "description": "description", + "modified_at": "modified_at", + "name": "name", + "org_id": "org_id", + "primary_column_name": "primary_column_name", + "primary_key_generation_strategy": "primary_key_generation_strategy", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, creator_user_id: Union[int, UnsetType]=unset, creator_user_uuid: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, primary_column_name: Union[str, UnsetType]=unset, primary_key_generation_strategy: Union[DatastorePrimaryKeyGenerationStrategy, UnsetType]=unset, **kwargs): + """ + Detailed information about a datastore. + + :param created_at: Timestamp when the datastore was created. + :type created_at: datetime, optional + + :param creator_user_id: The numeric ID of the user who created the datastore. + :type creator_user_id: int, optional + + :param creator_user_uuid: The UUID of the user who created the datastore. + :type creator_user_uuid: str, optional + + :param description: A human-readable description about the datastore. + :type description: str, optional + + :param modified_at: Timestamp when the datastore was last modified. + :type modified_at: datetime, optional + + :param name: The display name of the datastore. + :type name: str, optional + + :param org_id: The ID of the organization that owns this datastore. + :type org_id: int, optional + + :param primary_column_name: The name of the primary key column for this datastore. Primary column names: + + * Must abide by both `PostgreSQL naming conventions `_ + * Cannot exceed 63 characters + :type primary_column_name: str, optional + + :param primary_key_generation_strategy: Can be set to ``uuid`` to automatically generate primary keys when new items are added. Default value is ``none`` , which requires you to supply a primary key for each new item. + :type primary_key_generation_strategy: DatastorePrimaryKeyGenerationStrategy, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if creator_user_id is not unset: + kwargs["creator_user_id"] = creator_user_id + if creator_user_uuid is not unset: + kwargs["creator_user_uuid"] = creator_user_uuid + if description is not unset: + kwargs["description"] = description + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if org_id is not unset: + kwargs["org_id"] = org_id + if primary_column_name is not unset: + kwargs["primary_column_name"] = primary_column_name + if primary_key_generation_strategy is not unset: + kwargs["primary_key_generation_strategy"] = primary_key_generation_strategy + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/datastore_data_type.py b/datadog_api_client/v2/model/datastore_data_type.py new file mode 100644 index 0000000000..8214bdec19 --- /dev/null +++ b/datadog_api_client/v2/model/datastore_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DatastoreDataType(ModelSimple): + """ + The resource type for datastores. + + :param value: If omitted defaults to "datastores". Must be one of ["datastores"]. + :type value: str + """ + + allowed_values = { + "datastores", + } + DATASTORES: ClassVar["DatastoreDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DatastoreDataType.DATASTORES = DatastoreDataType("datastores") diff --git a/datadog_api_client/v2/model/datastore_item_conflict_mode.py b/datadog_api_client/v2/model/datastore_item_conflict_mode.py new file mode 100644 index 0000000000..cf406fd706 --- /dev/null +++ b/datadog_api_client/v2/model/datastore_item_conflict_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DatastoreItemConflictMode(ModelSimple): + """ + How to handle conflicts when inserting items that already exist in the datastore. + + :param value: Must be one of ["fail_on_conflict", "overwrite_on_conflict"]. + :type value: str + """ + + allowed_values = { + "fail_on_conflict", + "overwrite_on_conflict", + } + FAIL_ON_CONFLICT: ClassVar["DatastoreItemConflictMode"] + OVERWRITE_ON_CONFLICT: ClassVar["DatastoreItemConflictMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DatastoreItemConflictMode.FAIL_ON_CONFLICT = DatastoreItemConflictMode("fail_on_conflict") +DatastoreItemConflictMode.OVERWRITE_ON_CONFLICT = DatastoreItemConflictMode("overwrite_on_conflict") diff --git a/datadog_api_client/v2/model/datastore_items_data_type.py b/datadog_api_client/v2/model/datastore_items_data_type.py new file mode 100644 index 0000000000..ff331eb398 --- /dev/null +++ b/datadog_api_client/v2/model/datastore_items_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DatastoreItemsDataType(ModelSimple): + """ + The resource type for datastore items. + + :param value: If omitted defaults to "items". Must be one of ["items"]. + :type value: str + """ + + allowed_values = { + "items", + } + ITEMS: ClassVar["DatastoreItemsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DatastoreItemsDataType.ITEMS = DatastoreItemsDataType("items") diff --git a/datadog_api_client/v2/model/datastore_primary_key_generation_strategy.py b/datadog_api_client/v2/model/datastore_primary_key_generation_strategy.py new file mode 100644 index 0000000000..2688123ba5 --- /dev/null +++ b/datadog_api_client/v2/model/datastore_primary_key_generation_strategy.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DatastorePrimaryKeyGenerationStrategy(ModelSimple): + """ + Can be set to `uuid` to automatically generate primary keys when new items are added. Default value is `none`, which requires you to supply a primary key for each new item. + + :param value: Must be one of ["none", "uuid"]. + :type value: str + """ + + allowed_values = { + "none", + "uuid", + } + NONE: ClassVar["DatastorePrimaryKeyGenerationStrategy"] + UUID: ClassVar["DatastorePrimaryKeyGenerationStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DatastorePrimaryKeyGenerationStrategy.NONE = DatastorePrimaryKeyGenerationStrategy("none") +DatastorePrimaryKeyGenerationStrategy.UUID = DatastorePrimaryKeyGenerationStrategy("uuid") diff --git a/datadog_api_client/v2/model/datastore_trigger.py b/datadog_api_client/v2/model/datastore_trigger.py new file mode 100644 index 0000000000..f8a59fbdae --- /dev/null +++ b/datadog_api_client/v2/model/datastore_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + +class DatastoreTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + return { + "rate_limit": (TriggerRateLimit,), + } + attribute_map = { + "rate_limit": "rateLimit", + } + + def __init__(self_, rate_limit: Union[TriggerRateLimit, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from a Datastore. For automatic triggering a handle must be configured and the workflow must be published. + + :param rate_limit: Defines a rate limit for a trigger. + :type rate_limit: TriggerRateLimit, optional + """ + if rate_limit is not unset: + kwargs["rate_limit"] = rate_limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/datastore_trigger_wrapper.py b/datadog_api_client/v2/model/datastore_trigger_wrapper.py new file mode 100644 index 0000000000..2c2f6f5df9 --- /dev/null +++ b/datadog_api_client/v2/model/datastore_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datastore_trigger import DatastoreTrigger + +class DatastoreTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datastore_trigger import DatastoreTrigger + return { + "datastore_trigger": (DatastoreTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "datastore_trigger": "datastoreTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, datastore_trigger: DatastoreTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Datastore-based trigger. + + :param datastore_trigger: Trigger a workflow from a Datastore. For automatic triggering a handle must be configured and the workflow must be published. + :type datastore_trigger: DatastoreTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.datastore_trigger = datastore_trigger diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_column.py b/datadog_api_client/v2/model/ddsql_tabular_query_column.py new file mode 100644 index 0000000000..5f6f46e900 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_column.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DdsqlTabularQueryColumn(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "type": (str,), + "values": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + } + attribute_map = { + "name": "name", + "type": "type", + "values": "values", + } + + def __init__(self_, name: str, type: str, values: List[Any], **kwargs): + """ + A single column of a DDSQL tabular query result. + + :param name: Name of the column as projected by the SQL statement. + :type name: str + + :param type: DDSQL data type of the column's values, for example ``VARCHAR`` , ``BIGINT`` , + ``DECIMAL`` , ``BOOLEAN`` , ``TIMESTAMP`` , ``JSON`` , or an array variant such as + ``VARCHAR[]``. See the + `DDSQL data-types reference `_ + for the full, up-to-date list. + :type type: str + + :param values: Column values in row order, one entry per result row. The element type + follows the column's ``type``. The following serialization rules should be + taken into account: + + * ``BIGINT`` values are encoded as JSON numbers in the signed 64-bit integer range. + * ``DECIMAL`` values are encoded as JSON numbers with 64-bit double precision. + * ``TIMESTAMP`` and ``DATE`` values are encoded as Unix-millisecond integers; a + ``DATE`` resolves to midnight UTC. + * ``JSON`` values are returned as a JSON-encoded string. + + ``null`` is allowed for any column type where a value is missing. + :type values: [bool, date, datetime, dict, float, int, list, str, UUID, none_type] + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type + self_.values = values diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request.py b/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request.py new file mode 100644 index 0000000000..3aad211ac0 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request_data import DdsqlTabularQueryFetchRequestData + +class DdsqlTabularQueryFetchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request_data import DdsqlTabularQueryFetchRequestData + return { + "data": (DdsqlTabularQueryFetchRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DdsqlTabularQueryFetchRequestData, **kwargs): + """ + Wrapper for a DDSQL tabular query fetch request. + + :param data: JSON:API resource object for a DDSQL tabular query fetch request. + :type data: DdsqlTabularQueryFetchRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request_attributes.py b/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request_attributes.py new file mode 100644 index 0000000000..85989b765d --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DdsqlTabularQueryFetchRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query_id": (str,), + } + attribute_map = { + "query_id": "query_id", + } + + def __init__(self_, query_id: str, **kwargs): + """ + Attributes describing which previously submitted DDSQL query to fetch. + + :param query_id: Opaque token returned by an earlier execute or fetch response that carried + ``state: running``. Identifies the query to poll for results. + :type query_id: str + """ + super().__init__(kwargs) + + + self_.query_id = query_id diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request_data.py b/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request_data.py new file mode 100644 index 0000000000..6b71f3b901 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request_attributes import DdsqlTabularQueryFetchRequestAttributes + from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request_type import DdsqlTabularQueryFetchRequestType + +class DdsqlTabularQueryFetchRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request_attributes import DdsqlTabularQueryFetchRequestAttributes + from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request_type import DdsqlTabularQueryFetchRequestType + return { + "attributes": (DdsqlTabularQueryFetchRequestAttributes,), + "type": (DdsqlTabularQueryFetchRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DdsqlTabularQueryFetchRequestAttributes, type: DdsqlTabularQueryFetchRequestType, **kwargs): + """ + JSON:API resource object for a DDSQL tabular query fetch request. + + :param attributes: Attributes describing which previously submitted DDSQL query to fetch. + :type attributes: DdsqlTabularQueryFetchRequestAttributes + + :param type: JSON:API resource type for a DDSQL tabular query fetch request. + :type type: DdsqlTabularQueryFetchRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request_type.py b/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request_type.py new file mode 100644 index 0000000000..4ba22bd8b2 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_fetch_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DdsqlTabularQueryFetchRequestType(ModelSimple): + """ + JSON:API resource type for a DDSQL tabular query fetch request. + + :param value: If omitted defaults to "ddsql_query_fetch_request". Must be one of ["ddsql_query_fetch_request"]. + :type value: str + """ + + allowed_values = { + "ddsql_query_fetch_request", + } + DDSQL_QUERY_FETCH_REQUEST: ClassVar["DdsqlTabularQueryFetchRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DdsqlTabularQueryFetchRequestType.DDSQL_QUERY_FETCH_REQUEST = DdsqlTabularQueryFetchRequestType("ddsql_query_fetch_request") diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_request.py b/datadog_api_client/v2/model/ddsql_tabular_query_request.py new file mode 100644 index 0000000000..5f1f74d31c --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ddsql_tabular_query_request_data import DdsqlTabularQueryRequestData + +class DdsqlTabularQueryRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ddsql_tabular_query_request_data import DdsqlTabularQueryRequestData + return { + "data": (DdsqlTabularQueryRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DdsqlTabularQueryRequestData, **kwargs): + """ + Wrapper for a DDSQL tabular query execution request. + + :param data: JSON:API resource object for a DDSQL tabular query execution request. + :type data: DdsqlTabularQueryRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_request_attributes.py b/datadog_api_client/v2/model/ddsql_tabular_query_request_attributes.py new file mode 100644 index 0000000000..074bc083ab --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_request_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ddsql_tabular_query_time_window import DdsqlTabularQueryTimeWindow + +class DdsqlTabularQueryRequestAttributes(ModelNormal): + validations = { + "row_limit": { + "inclusive_maximum": 10000, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ddsql_tabular_query_time_window import DdsqlTabularQueryTimeWindow + return { + "query": (str,), + "row_limit": (int,), + "time": (DdsqlTabularQueryTimeWindow,), + } + attribute_map = { + "query": "query", + "row_limit": "row_limit", + "time": "time", + } + + def __init__(self_, query: str, time: DdsqlTabularQueryTimeWindow, row_limit: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes describing the DDSQL query to execute. + + :param query: The DDSQL statement to execute. DDSQL is Datadog's SQL dialect, which is a subset + of PostgreSQL, scoped to Datadog data sources. + :type query: str + + :param row_limit: Cap on the number of rows returned. Defaults to 5,000 when omitted. Must be + between 1 and 10,000 inclusive; values outside this range are rejected with 400. + :type row_limit: int, optional + + :param time: Time window scoping the underlying data sources, expressed in Unix milliseconds + since the epoch. Inclusive on ``from_timestamp`` , exclusive on ``to_timestamp``. + Results from static tables (for example, ``dd.hosts`` ) are not affected by the + time window, but the field must still be provided. + :type time: DdsqlTabularQueryTimeWindow + """ + if row_limit is not unset: + kwargs["row_limit"] = row_limit + super().__init__(kwargs) + + + self_.query = query + self_.time = time diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_request_data.py b/datadog_api_client/v2/model/ddsql_tabular_query_request_data.py new file mode 100644 index 0000000000..785b5ef3e8 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ddsql_tabular_query_request_attributes import DdsqlTabularQueryRequestAttributes + from datadog_api_client.v2.model.ddsql_tabular_query_request_type import DdsqlTabularQueryRequestType + +class DdsqlTabularQueryRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ddsql_tabular_query_request_attributes import DdsqlTabularQueryRequestAttributes + from datadog_api_client.v2.model.ddsql_tabular_query_request_type import DdsqlTabularQueryRequestType + return { + "attributes": (DdsqlTabularQueryRequestAttributes,), + "type": (DdsqlTabularQueryRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DdsqlTabularQueryRequestAttributes, type: DdsqlTabularQueryRequestType, **kwargs): + """ + JSON:API resource object for a DDSQL tabular query execution request. + + :param attributes: Attributes describing the DDSQL query to execute. + :type attributes: DdsqlTabularQueryRequestAttributes + + :param type: JSON:API resource type for a DDSQL tabular query request. + :type type: DdsqlTabularQueryRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_request_type.py b/datadog_api_client/v2/model/ddsql_tabular_query_request_type.py new file mode 100644 index 0000000000..65f1dfd30c --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DdsqlTabularQueryRequestType(ModelSimple): + """ + JSON:API resource type for a DDSQL tabular query request. + + :param value: If omitted defaults to "ddsql_query_request". Must be one of ["ddsql_query_request"]. + :type value: str + """ + + allowed_values = { + "ddsql_query_request", + } + DDSQL_QUERY_REQUEST: ClassVar["DdsqlTabularQueryRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DdsqlTabularQueryRequestType.DDSQL_QUERY_REQUEST = DdsqlTabularQueryRequestType("ddsql_query_request") diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_response.py b/datadog_api_client/v2/model/ddsql_tabular_query_response.py new file mode 100644 index 0000000000..9e631fa792 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ddsql_tabular_query_response_data import DdsqlTabularQueryResponseData + from datadog_api_client.v2.model.ddsql_tabular_query_response_meta import DdsqlTabularQueryResponseMeta + +class DdsqlTabularQueryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ddsql_tabular_query_response_data import DdsqlTabularQueryResponseData + from datadog_api_client.v2.model.ddsql_tabular_query_response_meta import DdsqlTabularQueryResponseMeta + return { + "data": (DdsqlTabularQueryResponseData,), + "meta": (DdsqlTabularQueryResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: DdsqlTabularQueryResponseData, meta: DdsqlTabularQueryResponseMeta, **kwargs): + """ + Response envelope for both the execute and fetch DDSQL tabular query endpoints. + Carries the JSON:API primary resource and a top-level ``meta`` block with + request-scoped observability handles. + + :param data: JSON:API resource object for a DDSQL tabular query response. + :type data: DdsqlTabularQueryResponseData + + :param meta: Top-level JSON:API meta block accompanying every DDSQL tabular query response. + Carries standard observability handles for client-side correlation. + :type meta: DdsqlTabularQueryResponseMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_response_attributes.py b/datadog_api_client/v2/model/ddsql_tabular_query_response_attributes.py new file mode 100644 index 0000000000..e6d10f4055 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_response_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ddsql_tabular_query_column import DdsqlTabularQueryColumn + from datadog_api_client.v2.model.ddsql_tabular_query_state import DdsqlTabularQueryState + +class DdsqlTabularQueryResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ddsql_tabular_query_column import DdsqlTabularQueryColumn + from datadog_api_client.v2.model.ddsql_tabular_query_state import DdsqlTabularQueryState + return { + "columns": ([DdsqlTabularQueryColumn],), + "query_id": (str,), + "state": (DdsqlTabularQueryState,), + "warnings": ([str],), + } + attribute_map = { + "columns": "columns", + "query_id": "query_id", + "state": "state", + "warnings": "warnings", + } + + def __init__(self_, state: DdsqlTabularQueryState, columns: Union[List[DdsqlTabularQueryColumn], UnsetType]=unset, query_id: Union[str, UnsetType]=unset, warnings: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of a DDSQL tabular query response. ``query_id`` is set when + ``state`` is ``running`` ; ``columns`` is set when ``state`` is ``completed``. + + :param columns: Column-major result set. Each element carries one column's name, type, and values, + with one value per row of the result. Set when ``state`` is ``completed``. + :type columns: [DdsqlTabularQueryColumn], optional + + :param query_id: Opaque token to pass to the fetch endpoint to poll for results. + Set when ``state`` is ``running`` and absent when ``state`` is ``completed``. + :type query_id: str, optional + + :param state: Lifecycle state of a DDSQL tabular query response. + ``running`` means the query is still executing and the client should poll + the fetch endpoint with the returned ``query_id``. ``completed`` means the + result set is inlined in ``columns`` and no further polling is required. + :type state: DdsqlTabularQueryState + + :param warnings: Non-fatal messages emitted by the query engine while serving this response. + :type warnings: [str], optional + """ + if columns is not unset: + kwargs["columns"] = columns + if query_id is not unset: + kwargs["query_id"] = query_id + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + + self_.state = state diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_response_data.py b/datadog_api_client/v2/model/ddsql_tabular_query_response_data.py new file mode 100644 index 0000000000..e56db23f28 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ddsql_tabular_query_response_attributes import DdsqlTabularQueryResponseAttributes + from datadog_api_client.v2.model.ddsql_tabular_query_response_type import DdsqlTabularQueryResponseType + +class DdsqlTabularQueryResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ddsql_tabular_query_response_attributes import DdsqlTabularQueryResponseAttributes + from datadog_api_client.v2.model.ddsql_tabular_query_response_type import DdsqlTabularQueryResponseType + return { + "attributes": (DdsqlTabularQueryResponseAttributes,), + "id": (str,), + "type": (DdsqlTabularQueryResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DdsqlTabularQueryResponseAttributes, id: str, type: DdsqlTabularQueryResponseType, **kwargs): + """ + JSON:API resource object for a DDSQL tabular query response. + + :param attributes: Attributes of a DDSQL tabular query response. ``query_id`` is set when + ``state`` is ``running`` ; ``columns`` is set when ``state`` is ``completed``. + :type attributes: DdsqlTabularQueryResponseAttributes + + :param id: Stable identifier for the query response resource. + :type id: str + + :param type: JSON:API resource type for a DDSQL tabular query response. + :type type: DdsqlTabularQueryResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_response_meta.py b/datadog_api_client/v2/model/ddsql_tabular_query_response_meta.py new file mode 100644 index 0000000000..a734e02711 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_response_meta.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DdsqlTabularQueryResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "elapsed": (int,), + "request_id": (str,), + } + attribute_map = { + "elapsed": "elapsed", + "request_id": "request_id", + } + + def __init__(self_, elapsed: int, request_id: str, **kwargs): + """ + Top-level JSON:API meta block accompanying every DDSQL tabular query response. + Carries standard observability handles for client-side correlation. + + :param elapsed: Server-side time spent serving this request, in milliseconds. + :type elapsed: int + + :param request_id: Echo of the ``DD-Request-ID`` header assigned by Datadog's edge to this request, + for support correlation. + :type request_id: str + """ + super().__init__(kwargs) + + + self_.elapsed = elapsed + self_.request_id = request_id diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_response_type.py b/datadog_api_client/v2/model/ddsql_tabular_query_response_type.py new file mode 100644 index 0000000000..81864d43a1 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DdsqlTabularQueryResponseType(ModelSimple): + """ + JSON:API resource type for a DDSQL tabular query response. + + :param value: If omitted defaults to "ddsql_query_response". Must be one of ["ddsql_query_response"]. + :type value: str + """ + + allowed_values = { + "ddsql_query_response", + } + DDSQL_QUERY_RESPONSE: ClassVar["DdsqlTabularQueryResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DdsqlTabularQueryResponseType.DDSQL_QUERY_RESPONSE = DdsqlTabularQueryResponseType("ddsql_query_response") diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_state.py b/datadog_api_client/v2/model/ddsql_tabular_query_state.py new file mode 100644 index 0000000000..75da030440 --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DdsqlTabularQueryState(ModelSimple): + """ + Lifecycle state of a DDSQL tabular query response. + `running` means the query is still executing and the client should poll + the fetch endpoint with the returned `query_id`. `completed` means the + result set is inlined in `columns` and no further polling is required. + + :param value: Must be one of ["running", "completed"]. + :type value: str + """ + + allowed_values = { + "running", + "completed", + } + RUNNING: ClassVar["DdsqlTabularQueryState"] + COMPLETED: ClassVar["DdsqlTabularQueryState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DdsqlTabularQueryState.RUNNING = DdsqlTabularQueryState("running") +DdsqlTabularQueryState.COMPLETED = DdsqlTabularQueryState("completed") diff --git a/datadog_api_client/v2/model/ddsql_tabular_query_time_window.py b/datadog_api_client/v2/model/ddsql_tabular_query_time_window.py new file mode 100644 index 0000000000..6ac78b4ace --- /dev/null +++ b/datadog_api_client/v2/model/ddsql_tabular_query_time_window.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DdsqlTabularQueryTimeWindow(ModelNormal): + @cached_property + def openapi_types(_): + return { + "from_timestamp": (int,), + "to_timestamp": (int,), + } + attribute_map = { + "from_timestamp": "from_timestamp", + "to_timestamp": "to_timestamp", + } + + def __init__(self_, from_timestamp: int, to_timestamp: int, **kwargs): + """ + Time window scoping the underlying data sources, expressed in Unix milliseconds + since the epoch. Inclusive on ``from_timestamp`` , exclusive on ``to_timestamp``. + Results from static tables (for example, ``dd.hosts`` ) are not affected by the + time window, but the field must still be provided. + + :param from_timestamp: Start of the query window (inclusive), in Unix milliseconds since the epoch. + :type from_timestamp: int + + :param to_timestamp: End of the query window (exclusive), in Unix milliseconds since the epoch. + :type to_timestamp: int + """ + super().__init__(kwargs) + + + self_.from_timestamp = from_timestamp + self_.to_timestamp = to_timestamp diff --git a/datadog_api_client/v2/model/default_rulesets_per_language_data.py b/datadog_api_client/v2/model/default_rulesets_per_language_data.py new file mode 100644 index 0000000000..1de2e29fbd --- /dev/null +++ b/datadog_api_client/v2/model/default_rulesets_per_language_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.default_rulesets_per_language_data_attributes import DefaultRulesetsPerLanguageDataAttributes + from datadog_api_client.v2.model.default_rulesets_per_language_data_type import DefaultRulesetsPerLanguageDataType + +class DefaultRulesetsPerLanguageData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.default_rulesets_per_language_data_attributes import DefaultRulesetsPerLanguageDataAttributes + from datadog_api_client.v2.model.default_rulesets_per_language_data_type import DefaultRulesetsPerLanguageDataType + return { + "attributes": (DefaultRulesetsPerLanguageDataAttributes,), + "id": (str,), + "type": (DefaultRulesetsPerLanguageDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DefaultRulesetsPerLanguageDataAttributes, id: str, type: DefaultRulesetsPerLanguageDataType, **kwargs): + """ + The primary data object in the default rulesets per language response. + + :param attributes: The attributes of the default rulesets per language response, containing the list of default ruleset names. + :type attributes: DefaultRulesetsPerLanguageDataAttributes + + :param id: The language identifier used as the resource identifier. + :type id: str + + :param type: Default rulesets per language resource type. + :type type: DefaultRulesetsPerLanguageDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/default_rulesets_per_language_data_attributes.py b/datadog_api_client/v2/model/default_rulesets_per_language_data_attributes.py new file mode 100644 index 0000000000..24ac8686c5 --- /dev/null +++ b/datadog_api_client/v2/model/default_rulesets_per_language_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DefaultRulesetsPerLanguageDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "rulesets": ([str],), + } + attribute_map = { + "rulesets": "rulesets", + } + + def __init__(self_, rulesets: List[str], **kwargs): + """ + The attributes of the default rulesets per language response, containing the list of default ruleset names. + + :param rulesets: The list of default ruleset names for the specified programming language. + :type rulesets: [str] + """ + super().__init__(kwargs) + + + self_.rulesets = rulesets diff --git a/datadog_api_client/v2/model/default_rulesets_per_language_data_type.py b/datadog_api_client/v2/model/default_rulesets_per_language_data_type.py new file mode 100644 index 0000000000..98107d7fb6 --- /dev/null +++ b/datadog_api_client/v2/model/default_rulesets_per_language_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DefaultRulesetsPerLanguageDataType(ModelSimple): + """ + Default rulesets per language resource type. + + :param value: If omitted defaults to "defaultRulesetsPerLanguage". Must be one of ["defaultRulesetsPerLanguage"]. + :type value: str + """ + + allowed_values = { + "defaultRulesetsPerLanguage", + } + DEFAULT_RULESETS_PER_LANGUAGE: ClassVar["DefaultRulesetsPerLanguageDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DefaultRulesetsPerLanguageDataType.DEFAULT_RULESETS_PER_LANGUAGE = DefaultRulesetsPerLanguageDataType("defaultRulesetsPerLanguage") diff --git a/datadog_api_client/v2/model/default_rulesets_per_language_response.py b/datadog_api_client/v2/model/default_rulesets_per_language_response.py new file mode 100644 index 0000000000..52eeca4b99 --- /dev/null +++ b/datadog_api_client/v2/model/default_rulesets_per_language_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.default_rulesets_per_language_data import DefaultRulesetsPerLanguageData + +class DefaultRulesetsPerLanguageResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.default_rulesets_per_language_data import DefaultRulesetsPerLanguageData + return { + "data": (DefaultRulesetsPerLanguageData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DefaultRulesetsPerLanguageData, **kwargs): + """ + The response payload containing the default ruleset names for a programming language. + + :param data: The primary data object in the default rulesets per language response. + :type data: DefaultRulesetsPerLanguageData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation.py b/datadog_api_client/v2/model/degradation.py new file mode 100644 index 0000000000..f5670a8e69 --- /dev/null +++ b/datadog_api_client/v2/model/degradation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data import DegradationData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + +class Degradation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data import DegradationData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + return { + "data": (DegradationData,), + "included": ([DegradationIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[DegradationData, UnsetType]=unset, included: Union[List[Union[DegradationIncluded, StatusPagesUser, StatusPageAsIncluded]], UnsetType]=unset, **kwargs): + """ + Response object for a single degradation. + + :param data: The data object for a degradation. + :type data: DegradationData, optional + + :param included: The included related resources of a degradation. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [DegradationIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_array.py b/datadog_api_client/v2/model/degradation_array.py new file mode 100644 index 0000000000..91f01452c4 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_array.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data import DegradationData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.pagination_meta import PaginationMeta + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + +class DegradationArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data import DegradationData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.pagination_meta import PaginationMeta + return { + "data": ([DegradationData],), + "included": ([DegradationIncluded],), + "meta": (PaginationMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + read_only_vars = { + "meta", + } + + def __init__(self_, data: List[DegradationData], included: Union[List[Union[DegradationIncluded, StatusPagesUser, StatusPageAsIncluded]], UnsetType]=unset, meta: Union[PaginationMeta, UnsetType]=unset, **kwargs): + """ + Response object for a list of degradations. + + :param data: A list of degradation data objects. + :type data: [DegradationData] + + :param included: The included related resources of a degradation. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [DegradationIncluded], optional + + :param meta: Response metadata. + :type meta: PaginationMeta, 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/datadog_api_client/v2/model/degradation_data.py b/datadog_api_client/v2/model/degradation_data.py new file mode 100644 index 0000000000..f3f3f8b9ba --- /dev/null +++ b/datadog_api_client/v2/model/degradation_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data_attributes import DegradationDataAttributes + from datadog_api_client.v2.model.degradation_data_relationships import DegradationDataRelationships + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + +class DegradationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data_attributes import DegradationDataAttributes + from datadog_api_client.v2.model.degradation_data_relationships import DegradationDataRelationships + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + return { + "attributes": (DegradationDataAttributes,), + "id": (UUID,), + "relationships": (DegradationDataRelationships,), + "type": (PatchDegradationRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: PatchDegradationRequestDataType, attributes: Union[DegradationDataAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, relationships: Union[DegradationDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for a degradation. + + :param attributes: The attributes of a degradation. + :type attributes: DegradationDataAttributes, optional + + :param id: The ID of the degradation. + :type id: UUID, optional + + :param relationships: The relationships of a degradation. + :type relationships: DegradationDataRelationships, optional + + :param type: Degradations resource type. + :type type: PatchDegradationRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_data_attributes.py b/datadog_api_client/v2/model/degradation_data_attributes.py new file mode 100644 index 0000000000..682c809250 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data_attributes_components_affected_items import DegradationDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.degradation_data_attributes_source import DegradationDataAttributesSource + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + from datadog_api_client.v2.model.degradation_data_attributes_updates_items import DegradationDataAttributesUpdatesItems + +class DegradationDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data_attributes_components_affected_items import DegradationDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.degradation_data_attributes_source import DegradationDataAttributesSource + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + from datadog_api_client.v2.model.degradation_data_attributes_updates_items import DegradationDataAttributesUpdatesItems + return { + "components_affected": ([DegradationDataAttributesComponentsAffectedItems],), + "created_at": (datetime,), + "description": (str,), + "is_backfilled": (bool,), + "modified_at": (datetime,), + "source": (DegradationDataAttributesSource,), + "status": (CreateDegradationRequestDataAttributesStatus,), + "title": (str,), + "updates": ([DegradationDataAttributesUpdatesItems],), + } + attribute_map = { + "components_affected": "components_affected", + "created_at": "created_at", + "description": "description", + "is_backfilled": "is_backfilled", + "modified_at": "modified_at", + "source": "source", + "status": "status", + "title": "title", + "updates": "updates", + } + + def __init__(self_, components_affected: Union[List[DegradationDataAttributesComponentsAffectedItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, description: Union[str, UnsetType]=unset, is_backfilled: Union[bool, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, source: Union[DegradationDataAttributesSource, UnsetType]=unset, status: Union[CreateDegradationRequestDataAttributesStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, updates: Union[List[DegradationDataAttributesUpdatesItems], UnsetType]=unset, **kwargs): + """ + The attributes of a degradation. + + :param components_affected: Components affected by the degradation. + :type components_affected: [DegradationDataAttributesComponentsAffectedItems], optional + + :param created_at: Timestamp of when the degradation was created. + :type created_at: datetime, optional + + :param description: Description of the degradation. + :type description: str, optional + + :param is_backfilled: Whether the degradation was backfilled. + :type is_backfilled: bool, optional + + :param modified_at: Timestamp of when the degradation was last modified. + :type modified_at: datetime, optional + + :param source: The source of the degradation. + :type source: DegradationDataAttributesSource, optional + + :param status: The status of the degradation. + :type status: CreateDegradationRequestDataAttributesStatus, optional + + :param title: Title of the degradation. + :type title: str, optional + + :param updates: Past updates made to the degradation. + :type updates: [DegradationDataAttributesUpdatesItems], optional + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if is_backfilled is not unset: + kwargs["is_backfilled"] = is_backfilled + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if source is not unset: + kwargs["source"] = source + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if updates is not unset: + kwargs["updates"] = updates + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/degradation_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..eb5f60e8f4 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + +class DegradationDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + return { + "id": (UUID,), + "name": (str,), + "status": (StatusPagesComponentDataAttributesStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: UUID, status: StatusPagesComponentDataAttributesStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a degradation. + + :param id: The ID of the component. + :type id: UUID + + :param name: The name of the component. + :type name: str, optional + + :param status: The status of the component. + :type status: StatusPagesComponentDataAttributesStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/degradation_data_attributes_source.py b/datadog_api_client/v2/model/degradation_data_attributes_source.py new file mode 100644 index 0000000000..a5c59f5c49 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_attributes_source.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data_attributes_source_type import DegradationDataAttributesSourceType + +class DegradationDataAttributesSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data_attributes_source_type import DegradationDataAttributesSourceType + return { + "created_at": (datetime,), + "source_id": (str,), + "type": (DegradationDataAttributesSourceType,), + } + attribute_map = { + "created_at": "created_at", + "source_id": "source_id", + "type": "type", + } + + def __init__(self_, created_at: datetime, source_id: str, type: DegradationDataAttributesSourceType, **kwargs): + """ + The source of the degradation. + + :param created_at: Timestamp of when the source was created. + :type created_at: datetime + + :param source_id: The ID of the source. + :type source_id: str + + :param type: The type of the source. + :type type: DegradationDataAttributesSourceType + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.source_id = source_id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_data_attributes_source_type.py b/datadog_api_client/v2/model/degradation_data_attributes_source_type.py new file mode 100644 index 0000000000..a3ad7cfdfe --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_attributes_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DegradationDataAttributesSourceType(ModelSimple): + """ + The type of the source. + + :param value: If omitted defaults to "incident". Must be one of ["incident"]. + :type value: str + """ + + allowed_values = { + "incident", + } + INCIDENT: ClassVar["DegradationDataAttributesSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DegradationDataAttributesSourceType.INCIDENT = DegradationDataAttributesSourceType("incident") diff --git a/datadog_api_client/v2/model/degradation_data_attributes_updates_items.py b/datadog_api_client/v2/model/degradation_data_attributes_updates_items.py new file mode 100644 index 0000000000..9c04f06040 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_attributes_updates_items.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data_attributes_updates_items_components_affected_items import DegradationDataAttributesUpdatesItemsComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + +class DegradationDataAttributesUpdatesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data_attributes_updates_items_components_affected_items import DegradationDataAttributesUpdatesItemsComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + return { + "components_affected": ([DegradationDataAttributesUpdatesItemsComponentsAffectedItems],), + "created_at": (datetime,), + "deleted_at": (str,), + "deleted_by_user_uuid": (str,), + "description": (str,), + "id": (UUID,), + "last_modified_by_user_uuid": (str,), + "modified_at": (datetime,), + "started_at": (datetime,), + "status": (CreateDegradationRequestDataAttributesStatus,), + } + attribute_map = { + "components_affected": "components_affected", + "created_at": "created_at", + "deleted_at": "deleted_at", + "deleted_by_user_uuid": "deleted_by_user_uuid", + "description": "description", + "id": "id", + "last_modified_by_user_uuid": "last_modified_by_user_uuid", + "modified_at": "modified_at", + "started_at": "started_at", + "status": "status", + } + read_only_vars = { + "created_at", + "id", + "modified_at", + } + + def __init__(self_, components_affected: Union[List[DegradationDataAttributesUpdatesItemsComponentsAffectedItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, deleted_at: Union[str, UnsetType]=unset, deleted_by_user_uuid: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, last_modified_by_user_uuid: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, started_at: Union[datetime, UnsetType]=unset, status: Union[CreateDegradationRequestDataAttributesStatus, UnsetType]=unset, **kwargs): + """ + A status update recorded during a degradation. + + :param components_affected: The components affected at the time of the update. + :type components_affected: [DegradationDataAttributesUpdatesItemsComponentsAffectedItems], optional + + :param created_at: Timestamp of when the update was created. + :type created_at: datetime, optional + + :param deleted_at: The date and time the resource was deleted. + :type deleted_at: str, optional + + :param deleted_by_user_uuid: UUID of the user who deleted the resource. + :type deleted_by_user_uuid: str, optional + + :param description: Description of the update. + :type description: str, optional + + :param id: Identifier of the update. + :type id: UUID, optional + + :param last_modified_by_user_uuid: UUID of the user who last modified the resource. + :type last_modified_by_user_uuid: str, optional + + :param modified_at: Timestamp of when the update was last modified. + :type modified_at: datetime, optional + + :param started_at: Timestamp of when the update started. + :type started_at: datetime, optional + + :param status: The status of the degradation. + :type status: CreateDegradationRequestDataAttributesStatus, optional + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if created_at is not unset: + kwargs["created_at"] = created_at + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if deleted_by_user_uuid is not unset: + kwargs["deleted_by_user_uuid"] = deleted_by_user_uuid + if description is not unset: + kwargs["description"] = description + if id is not unset: + kwargs["id"] = id + if last_modified_by_user_uuid is not unset: + kwargs["last_modified_by_user_uuid"] = last_modified_by_user_uuid + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if started_at is not unset: + kwargs["started_at"] = started_at + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_data_attributes_updates_items_components_affected_items.py b/datadog_api_client/v2/model/degradation_data_attributes_updates_items_components_affected_items.py new file mode 100644 index 0000000000..9ae8c74540 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_attributes_updates_items_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + +class DegradationDataAttributesUpdatesItemsComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + return { + "id": (UUID,), + "name": (str,), + "status": (StatusPagesComponentDataAttributesStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: UUID, status: StatusPagesComponentDataAttributesStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected at the time of a degradation update. + + :param id: Identifier of the component affected at the time of the update. + :type id: UUID + + :param name: The name of the component affected at the time of the update. + :type name: str, optional + + :param status: The status of the component. + :type status: StatusPagesComponentDataAttributesStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/degradation_data_relationships.py b/datadog_api_client/v2/model/degradation_data_relationships.py new file mode 100644 index 0000000000..834515f23e --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_relationships.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data_relationships_created_by_user import DegradationDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.degradation_data_relationships_last_modified_by_user import DegradationDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.degradation_data_relationships_status_page import DegradationDataRelationshipsStatusPage + from datadog_api_client.v2.model.degradation_data_relationships_template import DegradationDataRelationshipsTemplate + +class DegradationDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data_relationships_created_by_user import DegradationDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.degradation_data_relationships_last_modified_by_user import DegradationDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.degradation_data_relationships_status_page import DegradationDataRelationshipsStatusPage + from datadog_api_client.v2.model.degradation_data_relationships_template import DegradationDataRelationshipsTemplate + return { + "created_by_user": (DegradationDataRelationshipsCreatedByUser,), + "last_modified_by_user": (DegradationDataRelationshipsLastModifiedByUser,), + "status_page": (DegradationDataRelationshipsStatusPage,), + "template": (DegradationDataRelationshipsTemplate,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + "status_page": "status_page", + "template": "template", + } + + def __init__(self_, created_by_user: Union[DegradationDataRelationshipsCreatedByUser, UnsetType]=unset, last_modified_by_user: Union[DegradationDataRelationshipsLastModifiedByUser, UnsetType]=unset, status_page: Union[DegradationDataRelationshipsStatusPage, UnsetType]=unset, template: Union[DegradationDataRelationshipsTemplate, UnsetType]=unset, **kwargs): + """ + The relationships of a degradation. + + :param created_by_user: The Datadog user who created the degradation. + :type created_by_user: DegradationDataRelationshipsCreatedByUser, optional + + :param last_modified_by_user: The Datadog user who last modified the degradation. + :type last_modified_by_user: DegradationDataRelationshipsLastModifiedByUser, optional + + :param status_page: The status page the degradation belongs to. + :type status_page: DegradationDataRelationshipsStatusPage, optional + + :param template: The template the degradation was created from. + :type template: DegradationDataRelationshipsTemplate, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if status_page is not unset: + kwargs["status_page"] = status_page + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_data_relationships_created_by_user.py b/datadog_api_client/v2/model/degradation_data_relationships_created_by_user.py new file mode 100644 index 0000000000..dc4b635e53 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_relationships_created_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data_relationships_created_by_user_data import DegradationDataRelationshipsCreatedByUserData + +class DegradationDataRelationshipsCreatedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data_relationships_created_by_user_data import DegradationDataRelationshipsCreatedByUserData + return { + "data": (DegradationDataRelationshipsCreatedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationDataRelationshipsCreatedByUserData, **kwargs): + """ + The Datadog user who created the degradation. + + :param data: The data object identifying the Datadog user who created the degradation. + :type data: DegradationDataRelationshipsCreatedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_data_relationships_created_by_user_data.py b/datadog_api_client/v2/model/degradation_data_relationships_created_by_user_data.py new file mode 100644 index 0000000000..7f7e914779 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_relationships_created_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class DegradationDataRelationshipsCreatedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who created the degradation. + + :param id: The ID of the Datadog user who created the degradation. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_data_relationships_last_modified_by_user.py b/datadog_api_client/v2/model/degradation_data_relationships_last_modified_by_user.py new file mode 100644 index 0000000000..619cf2e0b7 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_relationships_last_modified_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data_relationships_last_modified_by_user_data import DegradationDataRelationshipsLastModifiedByUserData + +class DegradationDataRelationshipsLastModifiedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data_relationships_last_modified_by_user_data import DegradationDataRelationshipsLastModifiedByUserData + return { + "data": (DegradationDataRelationshipsLastModifiedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationDataRelationshipsLastModifiedByUserData, **kwargs): + """ + The Datadog user who last modified the degradation. + + :param data: The data object identifying the Datadog user who last modified the degradation. + :type data: DegradationDataRelationshipsLastModifiedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_data_relationships_last_modified_by_user_data.py b/datadog_api_client/v2/model/degradation_data_relationships_last_modified_by_user_data.py new file mode 100644 index 0000000000..697cca48f0 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_relationships_last_modified_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class DegradationDataRelationshipsLastModifiedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who last modified the degradation. + + :param id: The ID of the Datadog user who last modified the degradation. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_data_relationships_status_page.py b/datadog_api_client/v2/model/degradation_data_relationships_status_page.py new file mode 100644 index 0000000000..afb6ac3cf8 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_relationships_status_page.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data_relationships_status_page_data import DegradationDataRelationshipsStatusPageData + +class DegradationDataRelationshipsStatusPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data_relationships_status_page_data import DegradationDataRelationshipsStatusPageData + return { + "data": (DegradationDataRelationshipsStatusPageData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationDataRelationshipsStatusPageData, **kwargs): + """ + The status page the degradation belongs to. + + :param data: The data object identifying the status page the degradation belongs to. + :type data: DegradationDataRelationshipsStatusPageData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_data_relationships_status_page_data.py b/datadog_api_client/v2/model/degradation_data_relationships_status_page_data.py new file mode 100644 index 0000000000..7accf745b0 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_relationships_status_page_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class DegradationDataRelationshipsStatusPageData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "id": (UUID,), + "type": (StatusPageDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPageDataType, **kwargs): + """ + The data object identifying the status page the degradation belongs to. + + :param id: The ID of the status page. + :type id: UUID + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_data_relationships_template.py b/datadog_api_client/v2/model/degradation_data_relationships_template.py new file mode 100644 index 0000000000..56f2fb596b --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_relationships_template.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_data_relationships_template_data import DegradationDataRelationshipsTemplateData + +class DegradationDataRelationshipsTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_data_relationships_template_data import DegradationDataRelationshipsTemplateData + return { + "data": (DegradationDataRelationshipsTemplateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationDataRelationshipsTemplateData, **kwargs): + """ + The template the degradation was created from. + + :param data: The data object identifying the template the degradation was created from. + :type data: DegradationDataRelationshipsTemplateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_data_relationships_template_data.py b/datadog_api_client/v2/model/degradation_data_relationships_template_data.py new file mode 100644 index 0000000000..bf310215a5 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_data_relationships_template_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + +class DegradationDataRelationshipsTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + return { + "id": (str,), + "type": (PatchDegradationTemplateRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchDegradationTemplateRequestDataType, **kwargs): + """ + The data object identifying the template the degradation was created from. + + :param id: The ID of the degradation template. + :type id: str + + :param type: Degradation templates resource type. + :type type: PatchDegradationTemplateRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_included.py b/datadog_api_client/v2/model/degradation_included.py new file mode 100644 index 0000000000..73e69fce08 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_included.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DegradationIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An included resource related to a degradation or maintenance. + + :param attributes: Attributes of the Datadog user. + :type attributes: StatusPagesUserAttributes, optional + + :param id: The ID of the Datadog user. + :type id: UUID, optional + + :param type: Users resource type. + :type type: StatusPagesUserType + + :param relationships: The relationships of a status page. + :type relationships: StatusPageAsIncludedRelationships, 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.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + return { + "oneOf": [ + StatusPagesUser, + StatusPageAsIncluded, + ], + } diff --git a/datadog_api_client/v2/model/degradation_request_meta.py b/datadog_api_client/v2/model/degradation_request_meta.py new file mode 100644 index 0000000000..04fac8b2db --- /dev/null +++ b/datadog_api_client/v2/model/degradation_request_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DegradationRequestMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "idempotency_key": (UUID,), + } + attribute_map = { + "idempotency_key": "idempotency_key", + } + + def __init__(self_, idempotency_key: Union[UUID, UnsetType]=unset, **kwargs): + """ + The supported metadata for a degradation request. + + :param idempotency_key: A unique key used to ensure idempotent requests. + :type idempotency_key: UUID, optional + """ + if idempotency_key is not unset: + kwargs["idempotency_key"] = idempotency_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_template.py b/datadog_api_client/v2/model/degradation_template.py new file mode 100644 index 0000000000..2b2b94914a --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_template_data import DegradationTemplateData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + +class DegradationTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_template_data import DegradationTemplateData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + return { + "data": (DegradationTemplateData,), + "included": ([DegradationIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[DegradationTemplateData, UnsetType]=unset, included: Union[List[Union[DegradationIncluded, StatusPagesUser, StatusPageAsIncluded]], UnsetType]=unset, **kwargs): + """ + Response object for a single degradation template. + + :param data: The data object for a degradation template. + :type data: DegradationTemplateData, optional + + :param included: The included related resources of a degradation template. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [DegradationIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_template_array.py b/datadog_api_client/v2/model/degradation_template_array.py new file mode 100644 index 0000000000..b20cfc214f --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_array.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_template_data import DegradationTemplateData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + +class DegradationTemplateArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_template_data import DegradationTemplateData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + return { + "data": ([DegradationTemplateData],), + "included": ([DegradationIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[DegradationTemplateData], included: Union[List[Union[DegradationIncluded, StatusPagesUser, StatusPageAsIncluded]], UnsetType]=unset, **kwargs): + """ + Response object for a list of degradation templates. + + :param data: A list of degradation template data objects. + :type data: [DegradationTemplateData] + + :param included: The included related resources of a degradation template. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [DegradationIncluded], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_template_data.py b/datadog_api_client/v2/model/degradation_template_data.py new file mode 100644 index 0000000000..eface47d59 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_template_data_attributes import DegradationTemplateDataAttributes + from datadog_api_client.v2.model.degradation_template_data_relationships import DegradationTemplateDataRelationships + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + +class DegradationTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_template_data_attributes import DegradationTemplateDataAttributes + from datadog_api_client.v2.model.degradation_template_data_relationships import DegradationTemplateDataRelationships + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + return { + "attributes": (DegradationTemplateDataAttributes,), + "id": (str,), + "relationships": (DegradationTemplateDataRelationships,), + "type": (PatchDegradationTemplateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: PatchDegradationTemplateRequestDataType, attributes: Union[DegradationTemplateDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[DegradationTemplateDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for a degradation template. + + :param attributes: The attributes of a degradation template. + :type attributes: DegradationTemplateDataAttributes, optional + + :param id: The ID of the degradation template. + :type id: str, optional + + :param relationships: The relationships of a degradation template. + :type relationships: DegradationTemplateDataRelationships, optional + + :param type: Degradation templates resource type. + :type type: PatchDegradationTemplateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_template_data_attributes.py b/datadog_api_client/v2/model/degradation_template_data_attributes.py new file mode 100644 index 0000000000..1eba28cab0 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_attributes.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_template_data_attributes_components_affected_items import DegradationTemplateDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.degradation_template_data_attributes_updates_items import DegradationTemplateDataAttributesUpdatesItems + +class DegradationTemplateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_template_data_attributes_components_affected_items import DegradationTemplateDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.degradation_template_data_attributes_updates_items import DegradationTemplateDataAttributesUpdatesItems + return { + "components_affected": ([DegradationTemplateDataAttributesComponentsAffectedItems],), + "created_at": (datetime,), + "degradation_title": (str,), + "modified_at": (datetime,), + "name": (str,), + "updates": ([DegradationTemplateDataAttributesUpdatesItems],), + } + attribute_map = { + "components_affected": "components_affected", + "created_at": "created_at", + "degradation_title": "degradation_title", + "modified_at": "modified_at", + "name": "name", + "updates": "updates", + } + + def __init__(self_, components_affected: Union[List[DegradationTemplateDataAttributesComponentsAffectedItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, degradation_title: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, updates: Union[List[DegradationTemplateDataAttributesUpdatesItems], UnsetType]=unset, **kwargs): + """ + The attributes of a degradation template. + + :param components_affected: The components affected by a degradation created from this template. + :type components_affected: [DegradationTemplateDataAttributesComponentsAffectedItems], optional + + :param created_at: Timestamp of when the degradation template was created. + :type created_at: datetime, optional + + :param degradation_title: The title used for a degradation created from this template. + :type degradation_title: str, optional + + :param modified_at: Timestamp of when the degradation template was last modified. + :type modified_at: datetime, optional + + :param name: The name of the degradation template. + :type name: str, optional + + :param updates: The pre-filled updates for a degradation created from this template. + :type updates: [DegradationTemplateDataAttributesUpdatesItems], optional + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if created_at is not unset: + kwargs["created_at"] = created_at + if degradation_title is not unset: + kwargs["degradation_title"] = degradation_title + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if updates is not unset: + kwargs["updates"] = updates + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_template_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/degradation_template_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..c1c3924f30 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items_status import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus + +class DegradationTemplateDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items_status import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus + return { + "id": (str,), + "name": (str,), + "status": (PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: str, status: PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a degradation created from this template. + + :param id: The ID of the component. + :type id: str + + :param name: The name of the component. + :type name: str, optional + + :param status: The status of the component. + :type status: PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/degradation_template_data_attributes_updates_items.py b/datadog_api_client/v2/model/degradation_template_data_attributes_updates_items.py new file mode 100644 index 0000000000..90bf633dd3 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_attributes_updates_items.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + +class DegradationTemplateDataAttributesUpdatesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + return { + "message": (str,), + "status": (CreateDegradationRequestDataAttributesStatus,), + } + attribute_map = { + "message": "message", + "status": "status", + } + + def __init__(self_, status: CreateDegradationRequestDataAttributesStatus, message: Union[str, UnsetType]=unset, **kwargs): + """ + A pre-filled update for a degradation created from this template. + + :param message: The message of the update. + :type message: str, optional + + :param status: The status of the degradation. + :type status: CreateDegradationRequestDataAttributesStatus + """ + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/degradation_template_data_relationships.py b/datadog_api_client/v2/model/degradation_template_data_relationships.py new file mode 100644 index 0000000000..7b0318d36d --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_relationships.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_template_data_relationships_created_by_user import DegradationTemplateDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.degradation_template_data_relationships_last_modified_by_user import DegradationTemplateDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.degradation_template_data_relationships_status_page import DegradationTemplateDataRelationshipsStatusPage + +class DegradationTemplateDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_template_data_relationships_created_by_user import DegradationTemplateDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.degradation_template_data_relationships_last_modified_by_user import DegradationTemplateDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.degradation_template_data_relationships_status_page import DegradationTemplateDataRelationshipsStatusPage + return { + "created_by_user": (DegradationTemplateDataRelationshipsCreatedByUser,), + "last_modified_by_user": (DegradationTemplateDataRelationshipsLastModifiedByUser,), + "status_page": (DegradationTemplateDataRelationshipsStatusPage,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + "status_page": "status_page", + } + + def __init__(self_, created_by_user: Union[DegradationTemplateDataRelationshipsCreatedByUser, UnsetType]=unset, last_modified_by_user: Union[DegradationTemplateDataRelationshipsLastModifiedByUser, UnsetType]=unset, status_page: Union[DegradationTemplateDataRelationshipsStatusPage, UnsetType]=unset, **kwargs): + """ + The relationships of a degradation template. + + :param created_by_user: The Datadog user who created the degradation template. + :type created_by_user: DegradationTemplateDataRelationshipsCreatedByUser, optional + + :param last_modified_by_user: The Datadog user who last modified the degradation template. + :type last_modified_by_user: DegradationTemplateDataRelationshipsLastModifiedByUser, optional + + :param status_page: The status page the degradation template belongs to. + :type status_page: DegradationTemplateDataRelationshipsStatusPage, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if status_page is not unset: + kwargs["status_page"] = status_page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_template_data_relationships_created_by_user.py b/datadog_api_client/v2/model/degradation_template_data_relationships_created_by_user.py new file mode 100644 index 0000000000..87434bc58b --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_relationships_created_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_template_data_relationships_created_by_user_data import DegradationTemplateDataRelationshipsCreatedByUserData + +class DegradationTemplateDataRelationshipsCreatedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_template_data_relationships_created_by_user_data import DegradationTemplateDataRelationshipsCreatedByUserData + return { + "data": (DegradationTemplateDataRelationshipsCreatedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationTemplateDataRelationshipsCreatedByUserData, **kwargs): + """ + The Datadog user who created the degradation template. + + :param data: The data object identifying the Datadog user who created the degradation template. + :type data: DegradationTemplateDataRelationshipsCreatedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_template_data_relationships_created_by_user_data.py b/datadog_api_client/v2/model/degradation_template_data_relationships_created_by_user_data.py new file mode 100644 index 0000000000..bf3173586c --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_relationships_created_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class DegradationTemplateDataRelationshipsCreatedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who created the degradation template. + + :param id: The ID of the Datadog user who created the degradation template. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_template_data_relationships_last_modified_by_user.py b/datadog_api_client/v2/model/degradation_template_data_relationships_last_modified_by_user.py new file mode 100644 index 0000000000..2b31a3c524 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_relationships_last_modified_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_template_data_relationships_last_modified_by_user_data import DegradationTemplateDataRelationshipsLastModifiedByUserData + +class DegradationTemplateDataRelationshipsLastModifiedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_template_data_relationships_last_modified_by_user_data import DegradationTemplateDataRelationshipsLastModifiedByUserData + return { + "data": (DegradationTemplateDataRelationshipsLastModifiedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationTemplateDataRelationshipsLastModifiedByUserData, **kwargs): + """ + The Datadog user who last modified the degradation template. + + :param data: The data object identifying the Datadog user who last modified the degradation template. + :type data: DegradationTemplateDataRelationshipsLastModifiedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_template_data_relationships_last_modified_by_user_data.py b/datadog_api_client/v2/model/degradation_template_data_relationships_last_modified_by_user_data.py new file mode 100644 index 0000000000..0527276231 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_relationships_last_modified_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class DegradationTemplateDataRelationshipsLastModifiedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who last modified the degradation template. + + :param id: The ID of the Datadog user who last modified the degradation template. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_template_data_relationships_status_page.py b/datadog_api_client/v2/model/degradation_template_data_relationships_status_page.py new file mode 100644 index 0000000000..dbe31ce3ef --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_relationships_status_page.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_template_data_relationships_status_page_data import DegradationTemplateDataRelationshipsStatusPageData + +class DegradationTemplateDataRelationshipsStatusPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_template_data_relationships_status_page_data import DegradationTemplateDataRelationshipsStatusPageData + return { + "data": (DegradationTemplateDataRelationshipsStatusPageData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationTemplateDataRelationshipsStatusPageData, **kwargs): + """ + The status page the degradation template belongs to. + + :param data: The data object identifying the status page associated with a degradation template. + :type data: DegradationTemplateDataRelationshipsStatusPageData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_template_data_relationships_status_page_data.py b/datadog_api_client/v2/model/degradation_template_data_relationships_status_page_data.py new file mode 100644 index 0000000000..80e693cd29 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_template_data_relationships_status_page_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class DegradationTemplateDataRelationshipsStatusPageData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "id": (str,), + "type": (StatusPageDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPageDataType, **kwargs): + """ + The data object identifying the status page associated with a degradation template. + + :param id: The ID of the status page. + :type id: str + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_update.py b/datadog_api_client/v2/model/degradation_update.py new file mode 100644 index 0000000000..73e40812ec --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_update_data import DegradationUpdateData + from datadog_api_client.v2.model.degradation_update_included import DegradationUpdateIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.degradation import Degradation + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + +class DegradationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_update_data import DegradationUpdateData + from datadog_api_client.v2.model.degradation_update_included import DegradationUpdateIncluded + return { + "data": (DegradationUpdateData,), + "included": ([DegradationUpdateIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[DegradationUpdateData, UnsetType]=unset, included: Union[List[Union[DegradationUpdateIncluded, StatusPagesUser, Degradation, StatusPageAsIncluded]], UnsetType]=unset, **kwargs): + """ + Response object for a degradation update. + + :param data: The data object for a degradation update. + :type data: DegradationUpdateData, optional + + :param included: Resources related to the degradation update. + :type included: [DegradationUpdateIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_update_data.py b/datadog_api_client/v2/model/degradation_update_data.py new file mode 100644 index 0000000000..ecc90ef958 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_update_data_attributes import DegradationUpdateDataAttributes + from datadog_api_client.v2.model.degradation_update_data_relationships import DegradationUpdateDataRelationships + from datadog_api_client.v2.model.patch_degradation_update_request_data_type import PatchDegradationUpdateRequestDataType + +class DegradationUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_update_data_attributes import DegradationUpdateDataAttributes + from datadog_api_client.v2.model.degradation_update_data_relationships import DegradationUpdateDataRelationships + from datadog_api_client.v2.model.patch_degradation_update_request_data_type import PatchDegradationUpdateRequestDataType + return { + "attributes": (DegradationUpdateDataAttributes,), + "id": (str,), + "relationships": (DegradationUpdateDataRelationships,), + "type": (PatchDegradationUpdateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: PatchDegradationUpdateRequestDataType, attributes: Union[DegradationUpdateDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[DegradationUpdateDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for a degradation update. + + :param attributes: Attributes of a degradation update resource. + :type attributes: DegradationUpdateDataAttributes, optional + + :param id: The ID of the degradation update. + :type id: str, optional + + :param relationships: Relationships of a degradation update resource. + :type relationships: DegradationUpdateDataRelationships, optional + + :param type: Degradation updates resource type. + :type type: PatchDegradationUpdateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_update_data_attributes.py b/datadog_api_client/v2/model/degradation_update_data_attributes.py new file mode 100644 index 0000000000..bfc4de03e6 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_data_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_update_data_attributes_components_affected_items import DegradationUpdateDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + +class DegradationUpdateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_update_data_attributes_components_affected_items import DegradationUpdateDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + return { + "components_affected": ([DegradationUpdateDataAttributesComponentsAffectedItems],), + "created_at": (datetime,), + "deleted_at": (datetime,), + "description": (str,), + "modified_at": (datetime,), + "started_at": (datetime,), + "status": (CreateDegradationRequestDataAttributesStatus,), + } + attribute_map = { + "components_affected": "components_affected", + "created_at": "created_at", + "deleted_at": "deleted_at", + "description": "description", + "modified_at": "modified_at", + "started_at": "started_at", + "status": "status", + } + + def __init__(self_, components_affected: Union[List[DegradationUpdateDataAttributesComponentsAffectedItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, deleted_at: Union[datetime, UnsetType]=unset, description: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, started_at: Union[datetime, UnsetType]=unset, status: Union[CreateDegradationRequestDataAttributesStatus, UnsetType]=unset, **kwargs): + """ + Attributes of a degradation update resource. + + :param components_affected: Components affected by this update. + :type components_affected: [DegradationUpdateDataAttributesComponentsAffectedItems], optional + + :param created_at: The date and time the update was created. + :type created_at: datetime, optional + + :param deleted_at: The date and time the update was soft-deleted. + :type deleted_at: datetime, optional + + :param description: The message body of the update. + :type description: str, optional + + :param modified_at: The date and time the update was last modified. + :type modified_at: datetime, optional + + :param started_at: The date and time the update started. + :type started_at: datetime, optional + + :param status: The status of the degradation. + :type status: CreateDegradationRequestDataAttributesStatus, optional + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if created_at is not unset: + kwargs["created_at"] = created_at + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if description is not unset: + kwargs["description"] = description + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if started_at is not unset: + kwargs["started_at"] = started_at + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_update_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/degradation_update_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..88383585e9 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + +class DegradationUpdateDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + return { + "id": (str,), + "name": (str,), + "status": (StatusPagesComponentDataAttributesStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: str, status: StatusPagesComponentDataAttributesStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a degradation update. + + :param id: The ID of the affected component. + :type id: str + + :param name: The name of the affected component. + :type name: str, optional + + :param status: The status of the component. + :type status: StatusPagesComponentDataAttributesStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/degradation_update_data_relationships.py b/datadog_api_client/v2/model/degradation_update_data_relationships.py new file mode 100644 index 0000000000..f0b0ac64d6 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_update_data_relationships_user import DegradationUpdateDataRelationshipsUser + from datadog_api_client.v2.model.degradation_update_data_relationships_degradation import DegradationUpdateDataRelationshipsDegradation + from datadog_api_client.v2.model.degradation_update_data_relationships_status_page import DegradationUpdateDataRelationshipsStatusPage + +class DegradationUpdateDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_update_data_relationships_user import DegradationUpdateDataRelationshipsUser + from datadog_api_client.v2.model.degradation_update_data_relationships_degradation import DegradationUpdateDataRelationshipsDegradation + from datadog_api_client.v2.model.degradation_update_data_relationships_status_page import DegradationUpdateDataRelationshipsStatusPage + return { + "created_by_user": (DegradationUpdateDataRelationshipsUser,), + "degradation": (DegradationUpdateDataRelationshipsDegradation,), + "deleted_by_user": (DegradationUpdateDataRelationshipsUser,), + "last_modified_by_user": (DegradationUpdateDataRelationshipsUser,), + "status_page": (DegradationUpdateDataRelationshipsStatusPage,), + } + attribute_map = { + "created_by_user": "created_by_user", + "degradation": "degradation", + "deleted_by_user": "deleted_by_user", + "last_modified_by_user": "last_modified_by_user", + "status_page": "status_page", + } + + def __init__(self_, created_by_user: Union[DegradationUpdateDataRelationshipsUser, UnsetType]=unset, degradation: Union[DegradationUpdateDataRelationshipsDegradation, UnsetType]=unset, deleted_by_user: Union[DegradationUpdateDataRelationshipsUser, UnsetType]=unset, last_modified_by_user: Union[DegradationUpdateDataRelationshipsUser, UnsetType]=unset, status_page: Union[DegradationUpdateDataRelationshipsStatusPage, UnsetType]=unset, **kwargs): + """ + Relationships of a degradation update resource. + + :param created_by_user: A user relationship of a degradation update. + :type created_by_user: DegradationUpdateDataRelationshipsUser, optional + + :param degradation: The degradation relationship of a degradation update. + :type degradation: DegradationUpdateDataRelationshipsDegradation, optional + + :param deleted_by_user: A user relationship of a degradation update. + :type deleted_by_user: DegradationUpdateDataRelationshipsUser, optional + + :param last_modified_by_user: A user relationship of a degradation update. + :type last_modified_by_user: DegradationUpdateDataRelationshipsUser, optional + + :param status_page: The status page relationship of a degradation update. + :type status_page: DegradationUpdateDataRelationshipsStatusPage, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if degradation is not unset: + kwargs["degradation"] = degradation + if deleted_by_user is not unset: + kwargs["deleted_by_user"] = deleted_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if status_page is not unset: + kwargs["status_page"] = status_page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/degradation_update_data_relationships_degradation.py b/datadog_api_client/v2/model/degradation_update_data_relationships_degradation.py new file mode 100644 index 0000000000..524a617020 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_data_relationships_degradation.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_update_data_relationships_degradation_data import DegradationUpdateDataRelationshipsDegradationData + +class DegradationUpdateDataRelationshipsDegradation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_update_data_relationships_degradation_data import DegradationUpdateDataRelationshipsDegradationData + return { + "data": (DegradationUpdateDataRelationshipsDegradationData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationUpdateDataRelationshipsDegradationData, **kwargs): + """ + The degradation relationship of a degradation update. + + :param data: The degradation linked to a degradation update. + :type data: DegradationUpdateDataRelationshipsDegradationData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_update_data_relationships_degradation_data.py b/datadog_api_client/v2/model/degradation_update_data_relationships_degradation_data.py new file mode 100644 index 0000000000..14ba2f5cd8 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_data_relationships_degradation_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + +class DegradationUpdateDataRelationshipsDegradationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + return { + "id": (str,), + "type": (PatchDegradationRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchDegradationRequestDataType, **kwargs): + """ + The degradation linked to a degradation update. + + :param id: The ID of the degradation. + :type id: str + + :param type: Degradations resource type. + :type type: PatchDegradationRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_update_data_relationships_status_page.py b/datadog_api_client/v2/model/degradation_update_data_relationships_status_page.py new file mode 100644 index 0000000000..f7f15e8340 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_data_relationships_status_page.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_update_data_relationships_status_page_data import DegradationUpdateDataRelationshipsStatusPageData + +class DegradationUpdateDataRelationshipsStatusPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_update_data_relationships_status_page_data import DegradationUpdateDataRelationshipsStatusPageData + return { + "data": (DegradationUpdateDataRelationshipsStatusPageData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationUpdateDataRelationshipsStatusPageData, **kwargs): + """ + The status page relationship of a degradation update. + + :param data: The status page linked to a degradation update. + :type data: DegradationUpdateDataRelationshipsStatusPageData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_update_data_relationships_status_page_data.py b/datadog_api_client/v2/model/degradation_update_data_relationships_status_page_data.py new file mode 100644 index 0000000000..d6adc3827e --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_data_relationships_status_page_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class DegradationUpdateDataRelationshipsStatusPageData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "id": (str,), + "type": (StatusPageDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPageDataType, **kwargs): + """ + The status page linked to a degradation update. + + :param id: The ID of the status page. + :type id: str + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_update_data_relationships_user.py b/datadog_api_client/v2/model/degradation_update_data_relationships_user.py new file mode 100644 index 0000000000..abe46d7a13 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_data_relationships_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.degradation_update_data_relationships_user_data import DegradationUpdateDataRelationshipsUserData + +class DegradationUpdateDataRelationshipsUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.degradation_update_data_relationships_user_data import DegradationUpdateDataRelationshipsUserData + return { + "data": (DegradationUpdateDataRelationshipsUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DegradationUpdateDataRelationshipsUserData, **kwargs): + """ + A user relationship of a degradation update. + + :param data: A Datadog user linked to a degradation update. + :type data: DegradationUpdateDataRelationshipsUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/degradation_update_data_relationships_user_data.py b/datadog_api_client/v2/model/degradation_update_data_relationships_user_data.py new file mode 100644 index 0000000000..f84addd70a --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_data_relationships_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class DegradationUpdateDataRelationshipsUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + A Datadog user linked to a degradation update. + + :param id: The ID of the user. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/degradation_update_included.py b/datadog_api_client/v2/model/degradation_update_included.py new file mode 100644 index 0000000000..6a74bc9c47 --- /dev/null +++ b/datadog_api_client/v2/model/degradation_update_included.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DegradationUpdateIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Resources included in a degradation update response. + + :param attributes: Attributes of the Datadog user. + :type attributes: StatusPagesUserAttributes, optional + + :param id: The ID of the Datadog user. + :type id: UUID, optional + + :param type: Users resource type. + :type type: StatusPagesUserType + + :param data: The data object for a degradation. + :type data: DegradationData, optional + + :param included: The included related resources of a degradation. Client must explicitly request these resources by name in the `include` query parameter. + :type included: [DegradationIncluded], optional + + :param relationships: The relationships of a status page. + :type relationships: StatusPageAsIncludedRelationships, 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.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.degradation import Degradation + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + return { + "oneOf": [ + StatusPagesUser, + Degradation, + StatusPageAsIncluded, + ], + } diff --git a/datadog_api_client/v2/model/delete_app_response.py b/datadog_api_client/v2/model/delete_app_response.py new file mode 100644 index 0000000000..1e62b0673f --- /dev/null +++ b/datadog_api_client/v2/model/delete_app_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.delete_app_response_data import DeleteAppResponseData + +class DeleteAppResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.delete_app_response_data import DeleteAppResponseData + return { + "data": (DeleteAppResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DeleteAppResponseData, UnsetType]=unset, **kwargs): + """ + The response object after an app is successfully deleted. + + :param data: The definition of ``DeleteAppResponseData`` object. + :type data: DeleteAppResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/delete_app_response_data.py b/datadog_api_client/v2/model/delete_app_response_data.py new file mode 100644 index 0000000000..4584631ba5 --- /dev/null +++ b/datadog_api_client/v2/model/delete_app_response_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + +class DeleteAppResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + return { + "id": (UUID,), + "type": (AppDefinitionType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: AppDefinitionType, **kwargs): + """ + The definition of ``DeleteAppResponseData`` object. + + :param id: The ID of the deleted app. + :type id: UUID + + :param type: The app definition type. + :type type: AppDefinitionType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/delete_apps_datastore_item_request.py b/datadog_api_client/v2/model/delete_apps_datastore_item_request.py new file mode 100644 index 0000000000..37c16b0836 --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_datastore_item_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.delete_apps_datastore_item_request_data import DeleteAppsDatastoreItemRequestData + +class DeleteAppsDatastoreItemRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.delete_apps_datastore_item_request_data import DeleteAppsDatastoreItemRequestData + return { + "data": (DeleteAppsDatastoreItemRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DeleteAppsDatastoreItemRequestData, UnsetType]=unset, **kwargs): + """ + Request to delete a specific item from a datastore by its primary key. + + :param data: Data wrapper containing the information needed to identify and delete a specific datastore item. + :type data: DeleteAppsDatastoreItemRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/delete_apps_datastore_item_request_data.py b/datadog_api_client/v2/model/delete_apps_datastore_item_request_data.py new file mode 100644 index 0000000000..7d785480df --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_datastore_item_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.delete_apps_datastore_item_request_data_attributes import DeleteAppsDatastoreItemRequestDataAttributes + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + +class DeleteAppsDatastoreItemRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.delete_apps_datastore_item_request_data_attributes import DeleteAppsDatastoreItemRequestDataAttributes + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + return { + "attributes": (DeleteAppsDatastoreItemRequestDataAttributes,), + "type": (DatastoreItemsDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: DatastoreItemsDataType, attributes: Union[DeleteAppsDatastoreItemRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + Data wrapper containing the information needed to identify and delete a specific datastore item. + + :param attributes: Attributes specifying which datastore item to delete by its primary key. + :type attributes: DeleteAppsDatastoreItemRequestDataAttributes, optional + + :param type: The resource type for datastore items. + :type type: DatastoreItemsDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/delete_apps_datastore_item_request_data_attributes.py b/datadog_api_client/v2/model/delete_apps_datastore_item_request_data_attributes.py new file mode 100644 index 0000000000..8f6d6ff23d --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_datastore_item_request_data_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeleteAppsDatastoreItemRequestDataAttributes(ModelNormal): + validations = { + "item_key": { + "max_length": 256, + }, + } + @cached_property + def openapi_types(_): + return { + "id": (str,), + "item_key": (str,), + } + attribute_map = { + "id": "id", + "item_key": "item_key", + } + + def __init__(self_, item_key: str, id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes specifying which datastore item to delete by its primary key. + + :param id: Optional unique identifier of the item to delete. + :type id: str, optional + + :param item_key: The primary key value that identifies the item to delete. Cannot exceed 256 characters. + :type item_key: str + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.item_key = item_key diff --git a/datadog_api_client/v2/model/delete_apps_datastore_item_response.py b/datadog_api_client/v2/model/delete_apps_datastore_item_response.py new file mode 100644 index 0000000000..961482f599 --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_datastore_item_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.delete_apps_datastore_item_response_data import DeleteAppsDatastoreItemResponseData + +class DeleteAppsDatastoreItemResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.delete_apps_datastore_item_response_data import DeleteAppsDatastoreItemResponseData + return { + "data": (DeleteAppsDatastoreItemResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DeleteAppsDatastoreItemResponseData, UnsetType]=unset, **kwargs): + """ + Response from successfully deleting a datastore item. + + :param data: Data containing the identifier of the datastore item that was successfully deleted. + :type data: DeleteAppsDatastoreItemResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/delete_apps_datastore_item_response_array.py b/datadog_api_client/v2/model/delete_apps_datastore_item_response_array.py new file mode 100644 index 0000000000..d0bc1ba425 --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_datastore_item_response_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.delete_apps_datastore_item_response_data import DeleteAppsDatastoreItemResponseData + +class DeleteAppsDatastoreItemResponseArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.delete_apps_datastore_item_response_data import DeleteAppsDatastoreItemResponseData + return { + "data": ([DeleteAppsDatastoreItemResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[DeleteAppsDatastoreItemResponseData], **kwargs): + """ + The definition of ``DeleteAppsDatastoreItemResponseArray`` object. + + :param data: The ``DeleteAppsDatastoreItemResponseArray`` ``data``. + :type data: [DeleteAppsDatastoreItemResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/delete_apps_datastore_item_response_data.py b/datadog_api_client/v2/model/delete_apps_datastore_item_response_data.py new file mode 100644 index 0000000000..9bb248fe8d --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_datastore_item_response_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + +class DeleteAppsDatastoreItemResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + return { + "id": (str,), + "type": (DatastoreItemsDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, type: DatastoreItemsDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data containing the identifier of the datastore item that was successfully deleted. + + :param id: The unique identifier of the item that was deleted. + :type id: str, optional + + :param type: The resource type for datastore items. + :type type: DatastoreItemsDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/delete_apps_request.py b/datadog_api_client/v2/model/delete_apps_request.py new file mode 100644 index 0000000000..5a6ca7e324 --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.delete_apps_request_data_items import DeleteAppsRequestDataItems + +class DeleteAppsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.delete_apps_request_data_items import DeleteAppsRequestDataItems + return { + "data": ([DeleteAppsRequestDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[DeleteAppsRequestDataItems], UnsetType]=unset, **kwargs): + """ + A request object for deleting multiple apps by ID. + + :param data: An array of objects containing the IDs of the apps to delete. + :type data: [DeleteAppsRequestDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/delete_apps_request_data_items.py b/datadog_api_client/v2/model/delete_apps_request_data_items.py new file mode 100644 index 0000000000..0d4e79e619 --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_request_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + +class DeleteAppsRequestDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + return { + "id": (UUID,), + "type": (AppDefinitionType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: AppDefinitionType, **kwargs): + """ + An object containing the ID of an app to delete. + + :param id: The ID of the app to delete. + :type id: UUID + + :param type: The app definition type. + :type type: AppDefinitionType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/delete_apps_response.py b/datadog_api_client/v2/model/delete_apps_response.py new file mode 100644 index 0000000000..35d84cc693 --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.delete_apps_response_data_items import DeleteAppsResponseDataItems + +class DeleteAppsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.delete_apps_response_data_items import DeleteAppsResponseDataItems + return { + "data": ([DeleteAppsResponseDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[DeleteAppsResponseDataItems], UnsetType]=unset, **kwargs): + """ + The response object after multiple apps are successfully deleted. + + :param data: An array of objects containing the IDs of the deleted apps. + :type data: [DeleteAppsResponseDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/delete_apps_response_data_items.py b/datadog_api_client/v2/model/delete_apps_response_data_items.py new file mode 100644 index 0000000000..3f0ed22f13 --- /dev/null +++ b/datadog_api_client/v2/model/delete_apps_response_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + +class DeleteAppsResponseDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + return { + "id": (UUID,), + "type": (AppDefinitionType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: AppDefinitionType, **kwargs): + """ + An object containing the ID of a deleted app. + + :param id: The ID of the deleted app. + :type id: UUID + + :param type: The app definition type. + :type type: AppDefinitionType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/delete_custom_framework_response.py b/datadog_api_client/v2/model/delete_custom_framework_response.py new file mode 100644 index 0000000000..b117a12e9e --- /dev/null +++ b/datadog_api_client/v2/model/delete_custom_framework_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_framework_metadata import CustomFrameworkMetadata + +class DeleteCustomFrameworkResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_framework_metadata import CustomFrameworkMetadata + return { + "data": (CustomFrameworkMetadata,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomFrameworkMetadata, **kwargs): + """ + Response object to delete a custom framework. + + :param data: Metadata for custom frameworks. + :type data: CustomFrameworkMetadata + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/delete_form_data.py b/datadog_api_client/v2/model/delete_form_data.py new file mode 100644 index 0000000000..4afe4195b4 --- /dev/null +++ b/datadog_api_client/v2/model/delete_form_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_type import FormType + +class DeleteFormData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_type import FormType + return { + "id": (UUID,), + "type": (FormType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: FormType, **kwargs): + """ + The data returned when a form is deleted. + + :param id: The ID of the deleted form. + :type id: UUID + + :param type: The resource type for a form. + :type type: FormType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/delete_form_response.py b/datadog_api_client/v2/model/delete_form_response.py new file mode 100644 index 0000000000..f71dd7cb9f --- /dev/null +++ b/datadog_api_client/v2/model/delete_form_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.delete_form_data import DeleteFormData + +class DeleteFormResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.delete_form_data import DeleteFormData + return { + "data": (DeleteFormData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DeleteFormData, UnsetType]=unset, **kwargs): + """ + A response returned after deleting a form. + + :param data: The data returned when a form is deleted. + :type data: DeleteFormData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deleted_suite_response_data.py b/datadog_api_client/v2/model/deleted_suite_response_data.py new file mode 100644 index 0000000000..15d4cc1285 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_suite_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deleted_suite_response_data_attributes import DeletedSuiteResponseDataAttributes + from datadog_api_client.v2.model.synthetics_suite_types import SyntheticsSuiteTypes + +class DeletedSuiteResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deleted_suite_response_data_attributes import DeletedSuiteResponseDataAttributes + from datadog_api_client.v2.model.synthetics_suite_types import SyntheticsSuiteTypes + return { + "attributes": (DeletedSuiteResponseDataAttributes,), + "id": (str,), + "type": (SyntheticsSuiteTypes,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[DeletedSuiteResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SyntheticsSuiteTypes, UnsetType]=unset, **kwargs): + """ + Data object for a deleted Synthetic test suite. + + :param attributes: Attributes of a deleted Synthetic test suite, including deletion timestamp and public ID. + :type attributes: DeletedSuiteResponseDataAttributes, optional + + :param id: The public ID of the deleted Synthetic test suite. + :type id: str, optional + + :param type: Type for the Synthetics suites responses, ``suites``. + :type type: SyntheticsSuiteTypes, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deleted_suite_response_data_attributes.py b/datadog_api_client/v2/model/deleted_suite_response_data_attributes.py new file mode 100644 index 0000000000..a5f81df46c --- /dev/null +++ b/datadog_api_client/v2/model/deleted_suite_response_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeletedSuiteResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_at": (str,), + "public_id": (str,), + } + attribute_map = { + "deleted_at": "deleted_at", + "public_id": "public_id", + } + + def __init__(self_, deleted_at: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a deleted Synthetic test suite, including deletion timestamp and public ID. + + :param deleted_at: Deletion timestamp of the Synthetic suite ID. + :type deleted_at: str, optional + + :param public_id: The Synthetic suite ID deleted. + :type public_id: str, optional + """ + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deleted_suites_request_delete.py b/datadog_api_client/v2/model/deleted_suites_request_delete.py new file mode 100644 index 0000000000..4e2cca7566 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_suites_request_delete.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deleted_suites_request_delete_attributes import DeletedSuitesRequestDeleteAttributes + from datadog_api_client.v2.model.deleted_suites_request_type import DeletedSuitesRequestType + +class DeletedSuitesRequestDelete(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deleted_suites_request_delete_attributes import DeletedSuitesRequestDeleteAttributes + from datadog_api_client.v2.model.deleted_suites_request_type import DeletedSuitesRequestType + return { + "attributes": (DeletedSuitesRequestDeleteAttributes,), + "id": (str,), + "type": (DeletedSuitesRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DeletedSuitesRequestDeleteAttributes, id: Union[str, UnsetType]=unset, type: Union[DeletedSuitesRequestType, UnsetType]=unset, **kwargs): + """ + Data object for a bulk delete Synthetic test suites request. + + :param attributes: Attributes for a bulk delete Synthetic test suites request. + :type attributes: DeletedSuitesRequestDeleteAttributes + + :param id: An optional identifier for the delete request. + :type id: str, optional + + :param type: Type for the bulk delete Synthetic suites request, ``delete_suites_request``. + :type type: DeletedSuitesRequestType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/deleted_suites_request_delete_attributes.py b/datadog_api_client/v2/model/deleted_suites_request_delete_attributes.py new file mode 100644 index 0000000000..c5b0ac5858 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_suites_request_delete_attributes.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeletedSuitesRequestDeleteAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "force_delete_dependencies": (bool,), + "public_ids": ([str],), + } + attribute_map = { + "force_delete_dependencies": "force_delete_dependencies", + "public_ids": "public_ids", + } + + def __init__(self_, public_ids: List[str], force_delete_dependencies: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for a bulk delete Synthetic test suites request. + + :param force_delete_dependencies: Whether to force deletion of suites that have dependent resources. + :type force_delete_dependencies: bool, optional + + :param public_ids: List of public IDs of the Synthetic test suites to delete. + :type public_ids: [str] + """ + if force_delete_dependencies is not unset: + kwargs["force_delete_dependencies"] = force_delete_dependencies + super().__init__(kwargs) + + + self_.public_ids = public_ids diff --git a/datadog_api_client/v2/model/deleted_suites_request_delete_request.py b/datadog_api_client/v2/model/deleted_suites_request_delete_request.py new file mode 100644 index 0000000000..fc6c1c2381 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_suites_request_delete_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deleted_suites_request_delete import DeletedSuitesRequestDelete + +class DeletedSuitesRequestDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deleted_suites_request_delete import DeletedSuitesRequestDelete + return { + "data": (DeletedSuitesRequestDelete,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DeletedSuitesRequestDelete, **kwargs): + """ + Request body for bulk deleting Synthetic test suites. + + :param data: Data object for a bulk delete Synthetic test suites request. + :type data: DeletedSuitesRequestDelete + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/deleted_suites_request_type.py b/datadog_api_client/v2/model/deleted_suites_request_type.py new file mode 100644 index 0000000000..3d17b56990 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_suites_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeletedSuitesRequestType(ModelSimple): + """ + Type for the bulk delete Synthetic suites request, `delete_suites_request`. + + :param value: If omitted defaults to "delete_suites_request". Must be one of ["delete_suites_request"]. + :type value: str + """ + + allowed_values = { + "delete_suites_request", + } + DELETE_SUITES_REQUEST: ClassVar["DeletedSuitesRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeletedSuitesRequestType.DELETE_SUITES_REQUEST = DeletedSuitesRequestType("delete_suites_request") diff --git a/datadog_api_client/v2/model/deleted_suites_response.py b/datadog_api_client/v2/model/deleted_suites_response.py new file mode 100644 index 0000000000..b36247e1d1 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_suites_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deleted_suite_response_data import DeletedSuiteResponseData + +class DeletedSuitesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deleted_suite_response_data import DeletedSuiteResponseData + return { + "data": ([DeletedSuiteResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[DeletedSuiteResponseData], UnsetType]=unset, **kwargs): + """ + Response containing the list of deleted Synthetic test suites. + + :param data: List of deleted Synthetic suite data objects. + :type data: [DeletedSuiteResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deleted_test_response_data.py b/datadog_api_client/v2/model/deleted_test_response_data.py new file mode 100644 index 0000000000..76094fc1b1 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_test_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deleted_test_response_data_attributes import DeletedTestResponseDataAttributes + from datadog_api_client.v2.model.deleted_tests_response_type import DeletedTestsResponseType + +class DeletedTestResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deleted_test_response_data_attributes import DeletedTestResponseDataAttributes + from datadog_api_client.v2.model.deleted_tests_response_type import DeletedTestsResponseType + return { + "attributes": (DeletedTestResponseDataAttributes,), + "id": (str,), + "type": (DeletedTestsResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[DeletedTestResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[DeletedTestsResponseType, UnsetType]=unset, **kwargs): + """ + Data object for a deleted Synthetic test. + + :param attributes: Attributes of a deleted Synthetic test, including deletion timestamp and public ID. + :type attributes: DeletedTestResponseDataAttributes, optional + + :param id: The public ID of the deleted Synthetic test. + :type id: str, optional + + :param type: Type for the bulk delete Synthetic tests response, ``delete_tests``. + :type type: DeletedTestsResponseType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deleted_test_response_data_attributes.py b/datadog_api_client/v2/model/deleted_test_response_data_attributes.py new file mode 100644 index 0000000000..380c0ab544 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_test_response_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeletedTestResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_at": (str,), + "public_id": (str,), + } + attribute_map = { + "deleted_at": "deleted_at", + "public_id": "public_id", + } + + def __init__(self_, deleted_at: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a deleted Synthetic test, including deletion timestamp and public ID. + + :param deleted_at: Deletion timestamp of the Synthetic test ID. + :type deleted_at: str, optional + + :param public_id: The Synthetic test ID deleted. + :type public_id: str, optional + """ + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deleted_tests_request_delete.py b/datadog_api_client/v2/model/deleted_tests_request_delete.py new file mode 100644 index 0000000000..c5452a93b1 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_tests_request_delete.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deleted_tests_request_delete_attributes import DeletedTestsRequestDeleteAttributes + from datadog_api_client.v2.model.deleted_tests_request_type import DeletedTestsRequestType + +class DeletedTestsRequestDelete(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deleted_tests_request_delete_attributes import DeletedTestsRequestDeleteAttributes + from datadog_api_client.v2.model.deleted_tests_request_type import DeletedTestsRequestType + return { + "attributes": (DeletedTestsRequestDeleteAttributes,), + "id": (str,), + "type": (DeletedTestsRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DeletedTestsRequestDeleteAttributes, id: Union[str, UnsetType]=unset, type: Union[DeletedTestsRequestType, UnsetType]=unset, **kwargs): + """ + Data object for a bulk delete Synthetic tests request. + + :param attributes: Attributes for a bulk delete Synthetic tests request. + :type attributes: DeletedTestsRequestDeleteAttributes + + :param id: An optional identifier for the delete request. + :type id: str, optional + + :param type: Type for the bulk delete Synthetic tests request, ``delete_tests_request``. + :type type: DeletedTestsRequestType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/deleted_tests_request_delete_attributes.py b/datadog_api_client/v2/model/deleted_tests_request_delete_attributes.py new file mode 100644 index 0000000000..70179d7762 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_tests_request_delete_attributes.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeletedTestsRequestDeleteAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "force_delete_dependencies": (bool,), + "public_ids": ([str],), + } + attribute_map = { + "force_delete_dependencies": "force_delete_dependencies", + "public_ids": "public_ids", + } + + def __init__(self_, public_ids: List[str], force_delete_dependencies: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for a bulk delete Synthetic tests request. + + :param force_delete_dependencies: Whether to force deletion of tests that have dependent resources. + :type force_delete_dependencies: bool, optional + + :param public_ids: List of public IDs of the Synthetic tests to delete. + :type public_ids: [str] + """ + if force_delete_dependencies is not unset: + kwargs["force_delete_dependencies"] = force_delete_dependencies + super().__init__(kwargs) + + + self_.public_ids = public_ids diff --git a/datadog_api_client/v2/model/deleted_tests_request_delete_request.py b/datadog_api_client/v2/model/deleted_tests_request_delete_request.py new file mode 100644 index 0000000000..ec84d0273b --- /dev/null +++ b/datadog_api_client/v2/model/deleted_tests_request_delete_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deleted_tests_request_delete import DeletedTestsRequestDelete + +class DeletedTestsRequestDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deleted_tests_request_delete import DeletedTestsRequestDelete + return { + "data": (DeletedTestsRequestDelete,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DeletedTestsRequestDelete, **kwargs): + """ + Request body for bulk deleting Synthetic tests. + + :param data: Data object for a bulk delete Synthetic tests request. + :type data: DeletedTestsRequestDelete + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/deleted_tests_request_type.py b/datadog_api_client/v2/model/deleted_tests_request_type.py new file mode 100644 index 0000000000..e1ec2315bd --- /dev/null +++ b/datadog_api_client/v2/model/deleted_tests_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeletedTestsRequestType(ModelSimple): + """ + Type for the bulk delete Synthetic tests request, `delete_tests_request`. + + :param value: If omitted defaults to "delete_tests_request". Must be one of ["delete_tests_request"]. + :type value: str + """ + + allowed_values = { + "delete_tests_request", + } + DELETE_TESTS_REQUEST: ClassVar["DeletedTestsRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeletedTestsRequestType.DELETE_TESTS_REQUEST = DeletedTestsRequestType("delete_tests_request") diff --git a/datadog_api_client/v2/model/deleted_tests_response.py b/datadog_api_client/v2/model/deleted_tests_response.py new file mode 100644 index 0000000000..cba29f5d25 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_tests_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deleted_test_response_data import DeletedTestResponseData + +class DeletedTestsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deleted_test_response_data import DeletedTestResponseData + return { + "data": ([DeletedTestResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[DeletedTestResponseData], UnsetType]=unset, **kwargs): + """ + Response containing the list of deleted Synthetic tests. + + :param data: List of deleted Synthetic test data objects. + :type data: [DeletedTestResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deleted_tests_response_type.py b/datadog_api_client/v2/model/deleted_tests_response_type.py new file mode 100644 index 0000000000..4468e1aa00 --- /dev/null +++ b/datadog_api_client/v2/model/deleted_tests_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeletedTestsResponseType(ModelSimple): + """ + Type for the bulk delete Synthetic tests response, `delete_tests`. + + :param value: If omitted defaults to "delete_tests". Must be one of ["delete_tests"]. + :type value: str + """ + + allowed_values = { + "delete_tests", + } + DELETE_TESTS: ClassVar["DeletedTestsResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeletedTestsResponseType.DELETE_TESTS = DeletedTestsResponseType("delete_tests") diff --git a/datadog_api_client/v2/model/dependency_location.py b/datadog_api_client/v2/model/dependency_location.py new file mode 100644 index 0000000000..303bd5e239 --- /dev/null +++ b/datadog_api_client/v2/model/dependency_location.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DependencyLocation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "column_end": (int,), + "column_start": (int,), + "file_name": (str,), + "line_end": (int,), + "line_start": (int,), + } + attribute_map = { + "column_end": "column_end", + "column_start": "column_start", + "file_name": "file_name", + "line_end": "line_end", + "line_start": "line_start", + } + + def __init__(self_, column_end: int, column_start: int, file_name: str, line_end: int, line_start: int, **kwargs): + """ + Static library vulnerability location. + + :param column_end: Location column end. + :type column_end: int + + :param column_start: Location column start. + :type column_start: int + + :param file_name: Location file name. + :type file_name: str + + :param line_end: Location line end. + :type line_end: int + + :param line_start: Location line start. + :type line_start: int + """ + super().__init__(kwargs) + + + self_.column_end = column_end + self_.column_start = column_start + self_.file_name = file_name + self_.line_end = line_end + self_.line_start = line_start diff --git a/datadog_api_client/v2/model/deployment.py b/datadog_api_client/v2/model/deployment.py new file mode 100644 index 0000000000..2cce7be53f --- /dev/null +++ b/datadog_api_client/v2/model/deployment.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_attributes import DeploymentAttributes + from datadog_api_client.v2.model.deployment_metadata import DeploymentMetadata + from datadog_api_client.v2.model.app_deployment_type import AppDeploymentType + +class Deployment(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_attributes import DeploymentAttributes + from datadog_api_client.v2.model.deployment_metadata import DeploymentMetadata + from datadog_api_client.v2.model.app_deployment_type import AppDeploymentType + return { + "attributes": (DeploymentAttributes,), + "id": (UUID,), + "meta": (DeploymentMetadata,), + "type": (AppDeploymentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "type": "type", + } + + def __init__(self_, attributes: Union[DeploymentAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, meta: Union[DeploymentMetadata, UnsetType]=unset, type: Union[AppDeploymentType, UnsetType]=unset, **kwargs): + """ + The version of the app that was published. + + :param attributes: The attributes object containing the version ID of the published app. + :type attributes: DeploymentAttributes, optional + + :param id: The deployment ID. + :type id: UUID, optional + + :param meta: Metadata object containing the publication creation information. + :type meta: DeploymentMetadata, optional + + :param type: The deployment type. + :type type: AppDeploymentType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if meta is not unset: + kwargs["meta"] = meta + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_attributes.py b/datadog_api_client/v2/model/deployment_attributes.py new file mode 100644 index 0000000000..aec1e7e906 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "app_version_id": (UUID,), + } + attribute_map = { + "app_version_id": "app_version_id", + } + + def __init__(self_, app_version_id: Union[UUID, UnsetType]=unset, **kwargs): + """ + The attributes object containing the version ID of the published app. + + :param app_version_id: The version ID of the app that was published. For an unpublished app, this is always the nil UUID ( ``00000000-0000-0000-0000-000000000000`` ). + :type app_version_id: UUID, optional + """ + if app_version_id is not unset: + kwargs["app_version_id"] = app_version_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_gate_data_type.py b/datadog_api_client/v2/model/deployment_gate_data_type.py new file mode 100644 index 0000000000..a9cdf1c86b --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gate_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeploymentGateDataType(ModelSimple): + """ + Deployment gate resource type. + + :param value: If omitted defaults to "deployment_gate". Must be one of ["deployment_gate"]. + :type value: str + """ + + allowed_values = { + "deployment_gate", + } + DEPLOYMENT_GATE: ClassVar["DeploymentGateDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeploymentGateDataType.DEPLOYMENT_GATE = DeploymentGateDataType("deployment_gate") diff --git a/datadog_api_client/v2/model/deployment_gate_response.py b/datadog_api_client/v2/model/deployment_gate_response.py new file mode 100644 index 0000000000..0428568e66 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gate_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gate_response_data import DeploymentGateResponseData + +class DeploymentGateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gate_response_data import DeploymentGateResponseData + return { + "data": (DeploymentGateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DeploymentGateResponseData, UnsetType]=unset, **kwargs): + """ + Response for a deployment gate. + + :param data: Data for a deployment gate. + :type data: DeploymentGateResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_gate_response_data.py b/datadog_api_client/v2/model/deployment_gate_response_data.py new file mode 100644 index 0000000000..e1e07a2753 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gate_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gate_response_data_attributes import DeploymentGateResponseDataAttributes + from datadog_api_client.v2.model.deployment_gate_data_type import DeploymentGateDataType + +class DeploymentGateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gate_response_data_attributes import DeploymentGateResponseDataAttributes + from datadog_api_client.v2.model.deployment_gate_data_type import DeploymentGateDataType + return { + "attributes": (DeploymentGateResponseDataAttributes,), + "id": (str,), + "type": (DeploymentGateDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DeploymentGateResponseDataAttributes, id: str, type: DeploymentGateDataType, **kwargs): + """ + Data for a deployment gate. + + :param attributes: Basic information about a deployment gate. + :type attributes: DeploymentGateResponseDataAttributes + + :param id: Unique identifier of the deployment gate. + :type id: str + + :param type: Deployment gate resource type. + :type type: DeploymentGateDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/deployment_gate_response_data_attributes.py b/datadog_api_client/v2/model/deployment_gate_response_data_attributes.py new file mode 100644 index 0000000000..3fc761d547 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gate_response_data_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gate_response_data_attributes_created_by import DeploymentGateResponseDataAttributesCreatedBy + from datadog_api_client.v2.model.deployment_gate_response_data_attributes_updated_by import DeploymentGateResponseDataAttributesUpdatedBy + +class DeploymentGateResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gate_response_data_attributes_created_by import DeploymentGateResponseDataAttributesCreatedBy + from datadog_api_client.v2.model.deployment_gate_response_data_attributes_updated_by import DeploymentGateResponseDataAttributesUpdatedBy + return { + "created_at": (datetime,), + "created_by": (DeploymentGateResponseDataAttributesCreatedBy,), + "dry_run": (bool,), + "env": (str,), + "identifier": (str,), + "service": (str,), + "updated_at": (datetime,), + "updated_by": (DeploymentGateResponseDataAttributesUpdatedBy,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "dry_run": "dry_run", + "env": "env", + "identifier": "identifier", + "service": "service", + "updated_at": "updated_at", + "updated_by": "updated_by", + } + + def __init__(self_, created_at: datetime, created_by: DeploymentGateResponseDataAttributesCreatedBy, dry_run: bool, env: str, identifier: str, service: str, updated_at: Union[datetime, UnsetType]=unset, updated_by: Union[DeploymentGateResponseDataAttributesUpdatedBy, UnsetType]=unset, **kwargs): + """ + Basic information about a deployment gate. + + :param created_at: The timestamp when the deployment gate was created. + :type created_at: datetime + + :param created_by: Information about the user who created the deployment gate. + :type created_by: DeploymentGateResponseDataAttributesCreatedBy + + :param dry_run: Whether this gate is run in dry-run mode. + :type dry_run: bool + + :param env: The environment of the deployment gate. + :type env: str + + :param identifier: The identifier of the deployment gate. + :type identifier: str + + :param service: The service of the deployment gate. + :type service: str + + :param updated_at: The timestamp when the deployment gate was last updated. + :type updated_at: datetime, optional + + :param updated_by: Information about the user who updated the deployment gate. + :type updated_by: DeploymentGateResponseDataAttributesUpdatedBy, optional + """ + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updated_by is not unset: + kwargs["updated_by"] = updated_by + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.dry_run = dry_run + self_.env = env + self_.identifier = identifier + self_.service = service diff --git a/datadog_api_client/v2/model/deployment_gate_response_data_attributes_created_by.py b/datadog_api_client/v2/model/deployment_gate_response_data_attributes_created_by.py new file mode 100644 index 0000000000..053e8195d3 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gate_response_data_attributes_created_by.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentGateResponseDataAttributesCreatedBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "id": (str,), + "name": (str,), + } + attribute_map = { + "handle": "handle", + "id": "id", + "name": "name", + } + + def __init__(self_, id: str, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Information about the user who created the deployment gate. + + :param handle: The handle of the user who created the deployment rule. + :type handle: str, optional + + :param id: The ID of the user who created the deployment rule. + :type id: str + + :param name: The name of the user who created the deployment rule. + :type name: str, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/deployment_gate_response_data_attributes_updated_by.py b/datadog_api_client/v2/model/deployment_gate_response_data_attributes_updated_by.py new file mode 100644 index 0000000000..5f0ffabaf8 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gate_response_data_attributes_updated_by.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentGateResponseDataAttributesUpdatedBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "id": (str,), + "name": (str,), + } + attribute_map = { + "handle": "handle", + "id": "id", + "name": "name", + } + + def __init__(self_, id: str, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Information about the user who updated the deployment gate. + + :param handle: The handle of the user who updated the deployment rule. + :type handle: str, optional + + :param id: The ID of the user who updated the deployment rule. + :type id: str + + :param name: The name of the user who updated the deployment rule. + :type name: str, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/deployment_gate_rules_response.py b/datadog_api_client/v2/model/deployment_gate_rules_response.py new file mode 100644 index 0000000000..7ba69fa718 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gate_rules_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_deployment_rule_response_data import ListDeploymentRuleResponseData + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class DeploymentGateRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_deployment_rule_response_data import ListDeploymentRuleResponseData + return { + "data": (ListDeploymentRuleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ListDeploymentRuleResponseData, UnsetType]=unset, **kwargs): + """ + Response for a deployment gate rules. + + :param data: Data for a list of deployment rules. + :type data: ListDeploymentRuleResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_configuration.py b/datadog_api_client/v2/model/deployment_gates_evaluation_configuration.py new file mode 100644 index 0000000000..3f1755efe7 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_configuration.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_rule import DeploymentGatesEvaluationRule + from datadog_api_client.v2.model.deployment_gates_monitor_rule import DeploymentGatesMonitorRule + from datadog_api_client.v2.model.deployment_gates_fdd_rule import DeploymentGatesFDDRule + +class DeploymentGatesEvaluationConfiguration(ModelNormal): + validations = { + "rules": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_rule import DeploymentGatesEvaluationRule + return { + "dry_run": (bool,), + "rules": ([DeploymentGatesEvaluationRule],), + } + attribute_map = { + "dry_run": "dry_run", + "rules": "rules", + } + + def __init__(self_, rules: List[Union[DeploymentGatesEvaluationRule, DeploymentGatesMonitorRule, DeploymentGatesFDDRule]], dry_run: Union[bool, UnsetType]=unset, **kwargs): + """ + Inline rule definitions for a deployment gate evaluation. When provided, rules are evaluated + directly from this configuration instead of using the preconfigured gate rules. + At least one rule is required. + + :param dry_run: Gate-level dry run. When enabled, the rules are evaluated normally but the gate always returns ``pass``. The real result is visible in the Datadog UI. + :type dry_run: bool, optional + + :param rules: The list of rules to evaluate. At least one rule is required. + :type rules: [DeploymentGatesEvaluationRule] + """ + if dry_run is not unset: + kwargs["dry_run"] = dry_run + super().__init__(kwargs) + + + self_.rules = rules diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_request.py b/datadog_api_client/v2/model/deployment_gates_evaluation_request.py new file mode 100644 index 0000000000..8082903b50 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_request_data import DeploymentGatesEvaluationRequestData + from datadog_api_client.v2.model.deployment_gates_monitor_rule import DeploymentGatesMonitorRule + from datadog_api_client.v2.model.deployment_gates_fdd_rule import DeploymentGatesFDDRule + +class DeploymentGatesEvaluationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_request_data import DeploymentGatesEvaluationRequestData + return { + "data": (DeploymentGatesEvaluationRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DeploymentGatesEvaluationRequestData, **kwargs): + """ + Request body for triggering a deployment gate evaluation. + + :param data: Data for a deployment gate evaluation request. + :type data: DeploymentGatesEvaluationRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_request_attributes.py b/datadog_api_client/v2/model/deployment_gates_evaluation_request_attributes.py new file mode 100644 index 0000000000..7fd817163e --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_request_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_configuration import DeploymentGatesEvaluationConfiguration + from datadog_api_client.v2.model.deployment_gates_monitor_rule import DeploymentGatesMonitorRule + from datadog_api_client.v2.model.deployment_gates_fdd_rule import DeploymentGatesFDDRule + +class DeploymentGatesEvaluationRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_configuration import DeploymentGatesEvaluationConfiguration + return { + "configuration": (DeploymentGatesEvaluationConfiguration,), + "env": (str,), + "identifier": (str,), + "primary_tag": (str,), + "service": (str,), + "version": (str,), + } + attribute_map = { + "configuration": "configuration", + "env": "env", + "identifier": "identifier", + "primary_tag": "primary_tag", + "service": "service", + "version": "version", + } + + def __init__(self_, env: str, service: str, configuration: Union[DeploymentGatesEvaluationConfiguration, UnsetType]=unset, identifier: Union[str, UnsetType]=unset, primary_tag: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for a deployment gate evaluation request. + When ``configuration`` is provided, rules are evaluated inline from that configuration. + When omitted, rules are resolved from the preconfigured gate for the given service and environment. + + :param configuration: Inline rule definitions for a deployment gate evaluation. When provided, rules are evaluated + directly from this configuration instead of using the preconfigured gate rules. + At least one rule is required. + :type configuration: DeploymentGatesEvaluationConfiguration, optional + + :param env: The environment of the deployment. + :type env: str + + :param identifier: The identifier of the deployment gate. Defaults to "default". + :type identifier: str, optional + + :param primary_tag: A primary tag to scope APM Faulty Deployment Detection rules. + :type primary_tag: str, optional + + :param service: The service being deployed. + :type service: str + + :param version: The version of the deployment. Required for APM Faulty Deployment Detection rules. + :type version: str, optional + """ + if configuration is not unset: + kwargs["configuration"] = configuration + if identifier is not unset: + kwargs["identifier"] = identifier + if primary_tag is not unset: + kwargs["primary_tag"] = primary_tag + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.env = env + self_.service = service diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_request_data.py b/datadog_api_client/v2/model/deployment_gates_evaluation_request_data.py new file mode 100644 index 0000000000..9a4244beaf --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_request_attributes import DeploymentGatesEvaluationRequestAttributes + from datadog_api_client.v2.model.deployment_gates_evaluation_request_data_type import DeploymentGatesEvaluationRequestDataType + from datadog_api_client.v2.model.deployment_gates_monitor_rule import DeploymentGatesMonitorRule + from datadog_api_client.v2.model.deployment_gates_fdd_rule import DeploymentGatesFDDRule + +class DeploymentGatesEvaluationRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_request_attributes import DeploymentGatesEvaluationRequestAttributes + from datadog_api_client.v2.model.deployment_gates_evaluation_request_data_type import DeploymentGatesEvaluationRequestDataType + return { + "attributes": (DeploymentGatesEvaluationRequestAttributes,), + "type": (DeploymentGatesEvaluationRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DeploymentGatesEvaluationRequestAttributes, type: DeploymentGatesEvaluationRequestDataType, **kwargs): + """ + Data for a deployment gate evaluation request. + + :param attributes: Attributes for a deployment gate evaluation request. + When ``configuration`` is provided, rules are evaluated inline from that configuration. + When omitted, rules are resolved from the preconfigured gate for the given service and environment. + :type attributes: DeploymentGatesEvaluationRequestAttributes + + :param type: JSON:API type for a deployment gate evaluation request. + :type type: DeploymentGatesEvaluationRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_request_data_type.py b/datadog_api_client/v2/model/deployment_gates_evaluation_request_data_type.py new file mode 100644 index 0000000000..81926e8613 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeploymentGatesEvaluationRequestDataType(ModelSimple): + """ + JSON:API type for a deployment gate evaluation request. + + :param value: If omitted defaults to "deployment_gates_evaluation_request". Must be one of ["deployment_gates_evaluation_request"]. + :type value: str + """ + + allowed_values = { + "deployment_gates_evaluation_request", + } + DEPLOYMENT_GATES_EVALUATION_REQUEST: ClassVar["DeploymentGatesEvaluationRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeploymentGatesEvaluationRequestDataType.DEPLOYMENT_GATES_EVALUATION_REQUEST = DeploymentGatesEvaluationRequestDataType("deployment_gates_evaluation_request") diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_response.py b/datadog_api_client/v2/model/deployment_gates_evaluation_response.py new file mode 100644 index 0000000000..a37f77efbb --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_response_data import DeploymentGatesEvaluationResponseData + +class DeploymentGatesEvaluationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_response_data import DeploymentGatesEvaluationResponseData + return { + "data": (DeploymentGatesEvaluationResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DeploymentGatesEvaluationResponseData, UnsetType]=unset, **kwargs): + """ + Response for a deployment gate evaluation request. + + :param data: Data for a deployment gate evaluation response. + :type data: DeploymentGatesEvaluationResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_response_attributes.py b/datadog_api_client/v2/model/deployment_gates_evaluation_response_attributes.py new file mode 100644 index 0000000000..d537468207 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentGatesEvaluationResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "evaluation_id": (str,), + } + attribute_map = { + "evaluation_id": "evaluation_id", + } + + def __init__(self_, evaluation_id: str, **kwargs): + """ + Attributes for a deployment gate evaluation response. + + :param evaluation_id: The unique identifier of the gate evaluation. + :type evaluation_id: str + """ + super().__init__(kwargs) + + + self_.evaluation_id = evaluation_id diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_response_data.py b/datadog_api_client/v2/model/deployment_gates_evaluation_response_data.py new file mode 100644 index 0000000000..cb455b9db0 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_response_attributes import DeploymentGatesEvaluationResponseAttributes + from datadog_api_client.v2.model.deployment_gates_evaluation_response_data_type import DeploymentGatesEvaluationResponseDataType + +class DeploymentGatesEvaluationResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_response_attributes import DeploymentGatesEvaluationResponseAttributes + from datadog_api_client.v2.model.deployment_gates_evaluation_response_data_type import DeploymentGatesEvaluationResponseDataType + return { + "attributes": (DeploymentGatesEvaluationResponseAttributes,), + "id": (UUID,), + "type": (DeploymentGatesEvaluationResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DeploymentGatesEvaluationResponseAttributes, id: UUID, type: DeploymentGatesEvaluationResponseDataType, **kwargs): + """ + Data for a deployment gate evaluation response. + + :param attributes: Attributes for a deployment gate evaluation response. + :type attributes: DeploymentGatesEvaluationResponseAttributes + + :param id: The unique identifier of the evaluation response. + :type id: UUID + + :param type: JSON:API type for a deployment gate evaluation response. + :type type: DeploymentGatesEvaluationResponseDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_response_data_type.py b/datadog_api_client/v2/model/deployment_gates_evaluation_response_data_type.py new file mode 100644 index 0000000000..1a07cec51a --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeploymentGatesEvaluationResponseDataType(ModelSimple): + """ + JSON:API type for a deployment gate evaluation response. + + :param value: If omitted defaults to "deployment_gates_evaluation_response". Must be one of ["deployment_gates_evaluation_response"]. + :type value: str + """ + + allowed_values = { + "deployment_gates_evaluation_response", + } + DEPLOYMENT_GATES_EVALUATION_RESPONSE: ClassVar["DeploymentGatesEvaluationResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeploymentGatesEvaluationResponseDataType.DEPLOYMENT_GATES_EVALUATION_RESPONSE = DeploymentGatesEvaluationResponseDataType("deployment_gates_evaluation_response") diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_result_response.py b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response.py new file mode 100644 index 0000000000..80ae3763e8 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_data import DeploymentGatesEvaluationResultResponseData + +class DeploymentGatesEvaluationResultResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_data import DeploymentGatesEvaluationResultResponseData + return { + "data": (DeploymentGatesEvaluationResultResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DeploymentGatesEvaluationResultResponseData, UnsetType]=unset, **kwargs): + """ + Response containing the result of a deployment gate evaluation. + + :param data: Data for a deployment gate evaluation result response. + :type data: DeploymentGatesEvaluationResultResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_attributes.py b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_attributes.py new file mode 100644 index 0000000000..4ed97d010a --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_attributes_gate_status import DeploymentGatesEvaluationResultResponseAttributesGateStatus + from datadog_api_client.v2.model.deployment_gates_rule_response import DeploymentGatesRuleResponse + +class DeploymentGatesEvaluationResultResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_attributes_gate_status import DeploymentGatesEvaluationResultResponseAttributesGateStatus + from datadog_api_client.v2.model.deployment_gates_rule_response import DeploymentGatesRuleResponse + return { + "dry_run": (bool,), + "evaluation_id": (str,), + "evaluation_url": (str,), + "gate_id": (UUID,), + "gate_status": (DeploymentGatesEvaluationResultResponseAttributesGateStatus,), + "rules": ([DeploymentGatesRuleResponse],), + } + attribute_map = { + "dry_run": "dry_run", + "evaluation_id": "evaluation_id", + "evaluation_url": "evaluation_url", + "gate_id": "gate_id", + "gate_status": "gate_status", + "rules": "rules", + } + + def __init__(self_, dry_run: bool, evaluation_id: str, evaluation_url: str, gate_id: UUID, gate_status: DeploymentGatesEvaluationResultResponseAttributesGateStatus, rules: List[DeploymentGatesRuleResponse], **kwargs): + """ + Attributes for a deployment gate evaluation result response. + + :param dry_run: Whether the gate was evaluated in dry-run mode. + :type dry_run: bool + + :param evaluation_id: The unique identifier of the gate evaluation. + :type evaluation_id: str + + :param evaluation_url: A URL to view the evaluation details in the Datadog UI. + :type evaluation_url: str + + :param gate_id: The unique identifier of the deployment gate. + :type gate_id: UUID + + :param gate_status: The overall status of the gate evaluation. + + * ``in_progress`` : The evaluation is still running. + * ``pass`` : All rules passed successfully and the deployment is allowed to proceed. + * ``fail`` : One or more rules did not pass; the deployment should not proceed. + :type gate_status: DeploymentGatesEvaluationResultResponseAttributesGateStatus + + :param rules: The results of individual rule evaluations. + :type rules: [DeploymentGatesRuleResponse] + """ + super().__init__(kwargs) + + + self_.dry_run = dry_run + self_.evaluation_id = evaluation_id + self_.evaluation_url = evaluation_url + self_.gate_id = gate_id + self_.gate_status = gate_status + self_.rules = rules diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_attributes_gate_status.py b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_attributes_gate_status.py new file mode 100644 index 0000000000..2a53979253 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_attributes_gate_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeploymentGatesEvaluationResultResponseAttributesGateStatus(ModelSimple): + """ + The overall status of the gate evaluation. + - `in_progress`: The evaluation is still running. + - `pass`: All rules passed successfully and the deployment is allowed to proceed. + - `fail`: One or more rules did not pass; the deployment should not proceed. + + :param value: Must be one of ["in_progress", "pass", "fail"]. + :type value: str + """ + + allowed_values = { + "in_progress", + "pass", + "fail", + } + IN_PROGRESS: ClassVar["DeploymentGatesEvaluationResultResponseAttributesGateStatus"] + PASS: ClassVar["DeploymentGatesEvaluationResultResponseAttributesGateStatus"] + FAIL: ClassVar["DeploymentGatesEvaluationResultResponseAttributesGateStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeploymentGatesEvaluationResultResponseAttributesGateStatus.IN_PROGRESS = DeploymentGatesEvaluationResultResponseAttributesGateStatus("in_progress") +DeploymentGatesEvaluationResultResponseAttributesGateStatus.PASS = DeploymentGatesEvaluationResultResponseAttributesGateStatus("pass") +DeploymentGatesEvaluationResultResponseAttributesGateStatus.FAIL = DeploymentGatesEvaluationResultResponseAttributesGateStatus("fail") diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_data.py b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_data.py new file mode 100644 index 0000000000..1b850f01fa --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_attributes import DeploymentGatesEvaluationResultResponseAttributes + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_data_type import DeploymentGatesEvaluationResultResponseDataType + +class DeploymentGatesEvaluationResultResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_attributes import DeploymentGatesEvaluationResultResponseAttributes + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_data_type import DeploymentGatesEvaluationResultResponseDataType + return { + "attributes": (DeploymentGatesEvaluationResultResponseAttributes,), + "id": (str,), + "type": (DeploymentGatesEvaluationResultResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DeploymentGatesEvaluationResultResponseAttributes, id: str, type: DeploymentGatesEvaluationResultResponseDataType, **kwargs): + """ + Data for a deployment gate evaluation result response. + + :param attributes: Attributes for a deployment gate evaluation result response. + :type attributes: DeploymentGatesEvaluationResultResponseAttributes + + :param id: The unique identifier of the evaluation. + :type id: str + + :param type: JSON:API type for a deployment gate evaluation result response. + :type type: DeploymentGatesEvaluationResultResponseDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_data_type.py b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_data_type.py new file mode 100644 index 0000000000..f7c0d0943e --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_result_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeploymentGatesEvaluationResultResponseDataType(ModelSimple): + """ + JSON:API type for a deployment gate evaluation result response. + + :param value: If omitted defaults to "deployment_gates_evaluation_result_response". Must be one of ["deployment_gates_evaluation_result_response"]. + :type value: str + """ + + allowed_values = { + "deployment_gates_evaluation_result_response", + } + DEPLOYMENT_GATES_EVALUATION_RESULT_RESPONSE: ClassVar["DeploymentGatesEvaluationResultResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeploymentGatesEvaluationResultResponseDataType.DEPLOYMENT_GATES_EVALUATION_RESULT_RESPONSE = DeploymentGatesEvaluationResultResponseDataType("deployment_gates_evaluation_result_response") diff --git a/datadog_api_client/v2/model/deployment_gates_evaluation_rule.py b/datadog_api_client/v2/model/deployment_gates_evaluation_rule.py new file mode 100644 index 0000000000..b5ce0a6ee4 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_evaluation_rule.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentGatesEvaluationRule(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A rule to evaluate as part of a deployment gate evaluation. + + :param dry_run: Rule-level dry run. When enabled, the rule is evaluated normally but always returns `pass`. The real result is visible in the Datadog UI. + :type dry_run: bool, optional + + :param name: Human-readable name for this rule. + :type name: str + + :param options: Options for a `monitor` rule. + :type options: DeploymentGatesMonitorRuleOptions, optional + + :param type: The type identifier for a monitor rule. + :type type: DeploymentGatesMonitorRuleType + """ + 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.deployment_gates_monitor_rule import DeploymentGatesMonitorRule + from datadog_api_client.v2.model.deployment_gates_fdd_rule import DeploymentGatesFDDRule + return { + "oneOf": [ + DeploymentGatesMonitorRule, + DeploymentGatesFDDRule, + ], + } diff --git a/datadog_api_client/v2/model/deployment_gates_fdd_rule.py b/datadog_api_client/v2/model/deployment_gates_fdd_rule.py new file mode 100644 index 0000000000..e86216943b --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_fdd_rule.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_fdd_rule_options import DeploymentGatesFDDRuleOptions + from datadog_api_client.v2.model.deployment_gates_fdd_rule_type import DeploymentGatesFDDRuleType + +class DeploymentGatesFDDRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_fdd_rule_options import DeploymentGatesFDDRuleOptions + from datadog_api_client.v2.model.deployment_gates_fdd_rule_type import DeploymentGatesFDDRuleType + return { + "dry_run": (bool,), + "name": (str,), + "options": (DeploymentGatesFDDRuleOptions,), + "type": (DeploymentGatesFDDRuleType,), + } + attribute_map = { + "dry_run": "dry_run", + "name": "name", + "options": "options", + "type": "type", + } + + def __init__(self_, name: str, type: DeploymentGatesFDDRuleType, dry_run: Union[bool, UnsetType]=unset, options: Union[DeploymentGatesFDDRuleOptions, UnsetType]=unset, **kwargs): + """ + A faulty deployment detection rule to evaluate as part of a deployment gate evaluation. + + :param dry_run: Rule-level dry run. When enabled, the rule is evaluated normally but it always returns ``pass``. The real result is visible in the Datadog UI. + :type dry_run: bool, optional + + :param name: Human-readable name for this rule. + :type name: str + + :param options: Options for a ``faulty_deployment_detection`` rule. + :type options: DeploymentGatesFDDRuleOptions, optional + + :param type: The type identifier for a faulty deployment detection rule. + :type type: DeploymentGatesFDDRuleType + """ + if dry_run is not unset: + kwargs["dry_run"] = dry_run + if options is not unset: + kwargs["options"] = options + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/deployment_gates_fdd_rule_options.py b/datadog_api_client/v2/model/deployment_gates_fdd_rule_options.py new file mode 100644 index 0000000000..9c61931e33 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_fdd_rule_options.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentGatesFDDRuleOptions(ModelNormal): + validations = { + "duration": { + "inclusive_maximum": 7200, + }, + } + @cached_property + def openapi_types(_): + return { + "allowed_resources": ([str],), + "duration": (int,), + "excluded_resources": ([str],), + } + attribute_map = { + "allowed_resources": "allowed_resources", + "duration": "duration", + "excluded_resources": "excluded_resources", + } + + def __init__(self_, allowed_resources: Union[List[str], UnsetType]=unset, duration: Union[int, UnsetType]=unset, excluded_resources: Union[List[str], UnsetType]=unset, **kwargs): + """ + Options for a ``faulty_deployment_detection`` rule. + + :param allowed_resources: APM resource names to include in analysis. Mutually exclusive with ``excluded_resources``. + :type allowed_resources: [str], optional + + :param duration: Evaluation window in seconds. Maximum 7200 (2 hours). + :type duration: int, optional + + :param excluded_resources: APM resource names to exclude from analysis. + :type excluded_resources: [str], optional + """ + if allowed_resources is not unset: + kwargs["allowed_resources"] = allowed_resources + if duration is not unset: + kwargs["duration"] = duration + if excluded_resources is not unset: + kwargs["excluded_resources"] = excluded_resources + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_gates_fdd_rule_type.py b/datadog_api_client/v2/model/deployment_gates_fdd_rule_type.py new file mode 100644 index 0000000000..1ec687bcef --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_fdd_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeploymentGatesFDDRuleType(ModelSimple): + """ + The type identifier for a faulty deployment detection rule. + + :param value: If omitted defaults to "faulty_deployment_detection". Must be one of ["faulty_deployment_detection"]. + :type value: str + """ + + allowed_values = { + "faulty_deployment_detection", + } + FAULTY_DEPLOYMENT_DETECTION: ClassVar["DeploymentGatesFDDRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeploymentGatesFDDRuleType.FAULTY_DEPLOYMENT_DETECTION = DeploymentGatesFDDRuleType("faulty_deployment_detection") diff --git a/datadog_api_client/v2/model/deployment_gates_list_response.py b/datadog_api_client/v2/model/deployment_gates_list_response.py new file mode 100644 index 0000000000..965dfa1a41 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_list_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gate_response_data import DeploymentGateResponseData + from datadog_api_client.v2.model.deployment_gates_list_response_meta import DeploymentGatesListResponseMeta + +class DeploymentGatesListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gate_response_data import DeploymentGateResponseData + from datadog_api_client.v2.model.deployment_gates_list_response_meta import DeploymentGatesListResponseMeta + return { + "data": ([DeploymentGateResponseData],), + "meta": (DeploymentGatesListResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[DeploymentGateResponseData], UnsetType]=unset, meta: Union[DeploymentGatesListResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a paginated list of deployment gates. + + :param data: Array of deployment gates. + :type data: [DeploymentGateResponseData], optional + + :param meta: Metadata for a list of deployment gates response. + :type meta: DeploymentGatesListResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_gates_list_response_meta.py b/datadog_api_client/v2/model/deployment_gates_list_response_meta.py new file mode 100644 index 0000000000..a55f27588d --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_list_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_list_response_meta_page import DeploymentGatesListResponseMetaPage + +class DeploymentGatesListResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_list_response_meta_page import DeploymentGatesListResponseMetaPage + return { + "page": (DeploymentGatesListResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[DeploymentGatesListResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Metadata for a list of deployment gates response. + + :param page: Pagination information for a list of deployment gates. + :type page: DeploymentGatesListResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_gates_list_response_meta_page.py b/datadog_api_client/v2/model/deployment_gates_list_response_meta_page.py new file mode 100644 index 0000000000..e8c219a474 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_list_response_meta_page.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentGatesListResponseMetaPage(ModelNormal): + validations = { + "size": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "next_cursor": (str,), + "size": (int,), + } + attribute_map = { + "cursor": "cursor", + "next_cursor": "next_cursor", + "size": "size", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, next_cursor: Union[str, UnsetType]=unset, size: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination information for a list of deployment gates. + + :param cursor: The cursor used for the current page. + :type cursor: str, optional + + :param next_cursor: The cursor to use to fetch the next page. This is absent when there are no more pages. + :type next_cursor: str, optional + + :param size: The number of results per page. + :type size: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if next_cursor is not unset: + kwargs["next_cursor"] = next_cursor + if size is not unset: + kwargs["size"] = size + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_gates_monitor_rule.py b/datadog_api_client/v2/model/deployment_gates_monitor_rule.py new file mode 100644 index 0000000000..fce28d4a77 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_monitor_rule.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_monitor_rule_options import DeploymentGatesMonitorRuleOptions + from datadog_api_client.v2.model.deployment_gates_monitor_rule_type import DeploymentGatesMonitorRuleType + +class DeploymentGatesMonitorRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_monitor_rule_options import DeploymentGatesMonitorRuleOptions + from datadog_api_client.v2.model.deployment_gates_monitor_rule_type import DeploymentGatesMonitorRuleType + return { + "dry_run": (bool,), + "name": (str,), + "options": (DeploymentGatesMonitorRuleOptions,), + "type": (DeploymentGatesMonitorRuleType,), + } + attribute_map = { + "dry_run": "dry_run", + "name": "name", + "options": "options", + "type": "type", + } + + def __init__(self_, name: str, type: DeploymentGatesMonitorRuleType, dry_run: Union[bool, UnsetType]=unset, options: Union[DeploymentGatesMonitorRuleOptions, UnsetType]=unset, **kwargs): + """ + A monitor rule to evaluate as part of a deployment gate evaluation. + + :param dry_run: Rule-level dry run. When enabled, the rule is evaluated normally but always returns ``pass``. The real result is visible in the Datadog UI. + :type dry_run: bool, optional + + :param name: Human-readable name for this rule. + :type name: str + + :param options: Options for a ``monitor`` rule. + :type options: DeploymentGatesMonitorRuleOptions, optional + + :param type: The type identifier for a monitor rule. + :type type: DeploymentGatesMonitorRuleType + """ + if dry_run is not unset: + kwargs["dry_run"] = dry_run + if options is not unset: + kwargs["options"] = options + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/deployment_gates_monitor_rule_options.py b/datadog_api_client/v2/model/deployment_gates_monitor_rule_options.py new file mode 100644 index 0000000000..5f5d658ce1 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_monitor_rule_options.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentGatesMonitorRuleOptions(ModelNormal): + validations = { + "duration": { + "inclusive_maximum": 7200, + }, + } + @cached_property + def openapi_types(_): + return { + "duration": (int,), + "query": (str,), + } + attribute_map = { + "duration": "duration", + "query": "query", + } + + def __init__(self_, query: str, duration: Union[int, UnsetType]=unset, **kwargs): + """ + Options for a ``monitor`` rule. + + :param duration: Evaluation window in seconds. Maximum 7200 (2 hours). + :type duration: int, optional + + :param query: Monitor search query. + :type query: str + """ + if duration is not unset: + kwargs["duration"] = duration + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v2/model/deployment_gates_monitor_rule_type.py b/datadog_api_client/v2/model/deployment_gates_monitor_rule_type.py new file mode 100644 index 0000000000..21fe99cf69 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_monitor_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeploymentGatesMonitorRuleType(ModelSimple): + """ + The type identifier for a monitor rule. + + :param value: If omitted defaults to "monitor". Must be one of ["monitor"]. + :type value: str + """ + + allowed_values = { + "monitor", + } + MONITOR: ClassVar["DeploymentGatesMonitorRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeploymentGatesMonitorRuleType.MONITOR = DeploymentGatesMonitorRuleType("monitor") diff --git a/datadog_api_client/v2/model/deployment_gates_rule_response.py b/datadog_api_client/v2/model/deployment_gates_rule_response.py new file mode 100644 index 0000000000..d8a0824b07 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_gates_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_attributes_gate_status import DeploymentGatesEvaluationResultResponseAttributesGateStatus + +class DeploymentGatesRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_attributes_gate_status import DeploymentGatesEvaluationResultResponseAttributesGateStatus + return { + "dry_run": (bool,), + "name": (str,), + "reason": (str,), + "status": (DeploymentGatesEvaluationResultResponseAttributesGateStatus,), + } + attribute_map = { + "dry_run": "dry_run", + "name": "name", + "reason": "reason", + "status": "status", + } + + def __init__(self_, dry_run: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, reason: Union[str, UnsetType]=unset, status: Union[DeploymentGatesEvaluationResultResponseAttributesGateStatus, UnsetType]=unset, **kwargs): + """ + The result of a single rule evaluation. + + :param dry_run: Whether this rule was evaluated in dry-run mode. + :type dry_run: bool, optional + + :param name: The name of the rule. + :type name: str, optional + + :param reason: The reason for the rule result, if applicable. + :type reason: str, optional + + :param status: The overall status of the gate evaluation. + + * ``in_progress`` : The evaluation is still running. + * ``pass`` : All rules passed successfully and the deployment is allowed to proceed. + * ``fail`` : One or more rules did not pass; the deployment should not proceed. + :type status: DeploymentGatesEvaluationResultResponseAttributesGateStatus, optional + """ + if dry_run is not unset: + kwargs["dry_run"] = dry_run + if name is not unset: + kwargs["name"] = name + if reason is not unset: + kwargs["reason"] = reason + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_metadata.py b/datadog_api_client/v2/model/deployment_metadata.py new file mode 100644 index 0000000000..25e1af16b8 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_metadata.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "user_id": (int,), + "user_name": (str,), + "user_uuid": (UUID,), + } + attribute_map = { + "created_at": "created_at", + "user_id": "user_id", + "user_name": "user_name", + "user_uuid": "user_uuid", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, user_id: Union[int, UnsetType]=unset, user_name: Union[str, UnsetType]=unset, user_uuid: Union[UUID, UnsetType]=unset, **kwargs): + """ + Metadata object containing the publication creation information. + + :param created_at: Timestamp of when the app was published. + :type created_at: datetime, optional + + :param user_id: The ID of the user who published the app. + :type user_id: int, optional + + :param user_name: The name (or email address) of the user who published the app. + :type user_name: str, optional + + :param user_uuid: The UUID of the user who published the app. + :type user_uuid: UUID, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if user_id is not unset: + kwargs["user_id"] = user_id + if user_name is not unset: + kwargs["user_name"] = user_name + if user_uuid is not unset: + kwargs["user_uuid"] = user_uuid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_relationship.py b/datadog_api_client/v2/model/deployment_relationship.py new file mode 100644 index 0000000000..325741d2cc --- /dev/null +++ b/datadog_api_client/v2/model/deployment_relationship.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_relationship_data import DeploymentRelationshipData + from datadog_api_client.v2.model.deployment_metadata import DeploymentMetadata + +class DeploymentRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_relationship_data import DeploymentRelationshipData + from datadog_api_client.v2.model.deployment_metadata import DeploymentMetadata + return { + "data": (DeploymentRelationshipData,), + "meta": (DeploymentMetadata,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[DeploymentRelationshipData, UnsetType]=unset, meta: Union[DeploymentMetadata, UnsetType]=unset, **kwargs): + """ + Information pointing to the app's publication status. + + :param data: Data object containing the deployment ID. + :type data: DeploymentRelationshipData, optional + + :param meta: Metadata object containing the publication creation information. + :type meta: DeploymentMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_relationship_data.py b/datadog_api_client/v2/model/deployment_relationship_data.py new file mode 100644 index 0000000000..fb05c0e518 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_relationship_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_deployment_type import AppDeploymentType + +class DeploymentRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_deployment_type import AppDeploymentType + return { + "id": (UUID,), + "type": (AppDeploymentType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[UUID, UnsetType]=unset, type: Union[AppDeploymentType, UnsetType]=unset, **kwargs): + """ + Data object containing the deployment ID. + + :param id: The deployment ID. + :type id: UUID, optional + + :param type: The deployment type. + :type type: AppDeploymentType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_rule_data_type.py b/datadog_api_client/v2/model/deployment_rule_data_type.py new file mode 100644 index 0000000000..f83a7cb68f --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rule_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeploymentRuleDataType(ModelSimple): + """ + Deployment rule resource type. + + :param value: If omitted defaults to "deployment_rule". Must be one of ["deployment_rule"]. + :type value: str + """ + + allowed_values = { + "deployment_rule", + } + DEPLOYMENT_RULE: ClassVar["DeploymentRuleDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeploymentRuleDataType.DEPLOYMENT_RULE = DeploymentRuleDataType("deployment_rule") diff --git a/datadog_api_client/v2/model/deployment_rule_options_faulty_deployment_detection.py b/datadog_api_client/v2/model/deployment_rule_options_faulty_deployment_detection.py new file mode 100644 index 0000000000..feefd916c6 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rule_options_faulty_deployment_detection.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentRuleOptionsFaultyDeploymentDetection(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "allowed_resources": ([str],), + "duration": (int,), + "excluded_resources": ([str],), + } + attribute_map = { + "allowed_resources": "allowed_resources", + "duration": "duration", + "excluded_resources": "excluded_resources", + } + + def __init__(self_, allowed_resources: Union[List[str], UnsetType]=unset, duration: Union[int, UnsetType]=unset, excluded_resources: Union[List[str], UnsetType]=unset, **kwargs): + """ + Faulty deployment detection options for deployment rules. + + :param allowed_resources: Resources to include in faulty deployment detection. Mutually exclusive with ``excluded_resources``. + :type allowed_resources: [str], optional + + :param duration: The duration for faulty deployment detection. + :type duration: int, optional + + :param excluded_resources: Resources to exclude from faulty deployment detection. + :type excluded_resources: [str], optional + """ + if allowed_resources is not unset: + kwargs["allowed_resources"] = allowed_resources + if duration is not unset: + kwargs["duration"] = duration + if excluded_resources is not unset: + kwargs["excluded_resources"] = excluded_resources + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_rule_options_monitor.py b/datadog_api_client/v2/model/deployment_rule_options_monitor.py new file mode 100644 index 0000000000..554b5ede20 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rule_options_monitor.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentRuleOptionsMonitor(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "duration": (int,), + "query": (str,), + } + attribute_map = { + "duration": "duration", + "query": "query", + } + + def __init__(self_, query: str, duration: Union[int, UnsetType]=unset, **kwargs): + """ + Monitor options for deployment rules. + + :param duration: Seconds the monitor needs to stay in OK status for the rule to pass. + :type duration: int, optional + + :param query: Monitors that match this query are evaluated. + :type query: str + """ + if duration is not unset: + kwargs["duration"] = duration + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v2/model/deployment_rule_response.py b/datadog_api_client/v2/model/deployment_rule_response.py new file mode 100644 index 0000000000..9157ade78e --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rule_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_rule_response_data import DeploymentRuleResponseData + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class DeploymentRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_rule_response_data import DeploymentRuleResponseData + return { + "data": (DeploymentRuleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DeploymentRuleResponseData, UnsetType]=unset, **kwargs): + """ + Response for a deployment rule. + + :param data: Data for a deployment rule. + :type data: DeploymentRuleResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/deployment_rule_response_data.py b/datadog_api_client/v2/model/deployment_rule_response_data.py new file mode 100644 index 0000000000..a06298923f --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rule_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_rule_response_data_attributes import DeploymentRuleResponseDataAttributes + from datadog_api_client.v2.model.deployment_rule_data_type import DeploymentRuleDataType + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class DeploymentRuleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_rule_response_data_attributes import DeploymentRuleResponseDataAttributes + from datadog_api_client.v2.model.deployment_rule_data_type import DeploymentRuleDataType + return { + "attributes": (DeploymentRuleResponseDataAttributes,), + "id": (str,), + "type": (DeploymentRuleDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DeploymentRuleResponseDataAttributes, id: str, type: DeploymentRuleDataType, **kwargs): + """ + Data for a deployment rule. + + :param attributes: Basic information about a deployment rule. + :type attributes: DeploymentRuleResponseDataAttributes + + :param id: Unique identifier of the deployment rule. + :type id: str + + :param type: Deployment rule resource type. + :type type: DeploymentRuleDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/deployment_rule_response_data_attributes.py b/datadog_api_client/v2/model/deployment_rule_response_data_attributes.py new file mode 100644 index 0000000000..167afcb2e2 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rule_response_data_attributes.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_rule_response_data_attributes_created_by import DeploymentRuleResponseDataAttributesCreatedBy + from datadog_api_client.v2.model.deployment_rules_options import DeploymentRulesOptions + from datadog_api_client.v2.model.deployment_rule_response_data_attributes_type import DeploymentRuleResponseDataAttributesType + from datadog_api_client.v2.model.deployment_rule_response_data_attributes_updated_by import DeploymentRuleResponseDataAttributesUpdatedBy + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class DeploymentRuleResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_rule_response_data_attributes_created_by import DeploymentRuleResponseDataAttributesCreatedBy + from datadog_api_client.v2.model.deployment_rules_options import DeploymentRulesOptions + from datadog_api_client.v2.model.deployment_rule_response_data_attributes_type import DeploymentRuleResponseDataAttributesType + from datadog_api_client.v2.model.deployment_rule_response_data_attributes_updated_by import DeploymentRuleResponseDataAttributesUpdatedBy + return { + "created_at": (datetime,), + "created_by": (DeploymentRuleResponseDataAttributesCreatedBy,), + "dry_run": (bool,), + "gate_id": (str,), + "name": (str,), + "options": (DeploymentRulesOptions,), + "type": (DeploymentRuleResponseDataAttributesType,), + "updated_at": (datetime,), + "updated_by": (DeploymentRuleResponseDataAttributesUpdatedBy,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "dry_run": "dry_run", + "gate_id": "gate_id", + "name": "name", + "options": "options", + "type": "type", + "updated_at": "updated_at", + "updated_by": "updated_by", + } + + def __init__(self_, created_at: datetime, created_by: DeploymentRuleResponseDataAttributesCreatedBy, dry_run: bool, gate_id: str, name: str, options: Union[DeploymentRulesOptions, DeploymentRuleOptionsFaultyDeploymentDetection, DeploymentRuleOptionsMonitor], type: DeploymentRuleResponseDataAttributesType, updated_at: Union[datetime, UnsetType]=unset, updated_by: Union[DeploymentRuleResponseDataAttributesUpdatedBy, UnsetType]=unset, **kwargs): + """ + Basic information about a deployment rule. + + :param created_at: The timestamp when the deployment rule was created. + :type created_at: datetime + + :param created_by: Information about the user who created the deployment rule. + :type created_by: DeploymentRuleResponseDataAttributesCreatedBy + + :param dry_run: Whether this rule is run in dry-run mode. + :type dry_run: bool + + :param gate_id: The ID of the deployment gate. + :type gate_id: str + + :param name: The name of the deployment rule. + :type name: str + + :param options: Options for deployment rule response representing either faulty deployment detection or monitor options. + :type options: DeploymentRulesOptions + + :param type: The type of the deployment rule. + :type type: DeploymentRuleResponseDataAttributesType + + :param updated_at: The timestamp when the deployment rule was last updated. + :type updated_at: datetime, optional + + :param updated_by: Information about the user who updated the deployment rule. + :type updated_by: DeploymentRuleResponseDataAttributesUpdatedBy, optional + """ + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updated_by is not unset: + kwargs["updated_by"] = updated_by + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.dry_run = dry_run + self_.gate_id = gate_id + self_.name = name + self_.options = options + self_.type = type diff --git a/datadog_api_client/v2/model/deployment_rule_response_data_attributes_created_by.py b/datadog_api_client/v2/model/deployment_rule_response_data_attributes_created_by.py new file mode 100644 index 0000000000..82fc717255 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rule_response_data_attributes_created_by.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentRuleResponseDataAttributesCreatedBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "id": (str,), + "name": (str,), + } + attribute_map = { + "handle": "handle", + "id": "id", + "name": "name", + } + + def __init__(self_, id: str, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Information about the user who created the deployment rule. + + :param handle: The handle of the user who created the deployment rule. + :type handle: str, optional + + :param id: The ID of the user who created the deployment rule. + :type id: str + + :param name: The name of the user who created the deployment rule. + :type name: str, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/deployment_rule_response_data_attributes_type.py b/datadog_api_client/v2/model/deployment_rule_response_data_attributes_type.py new file mode 100644 index 0000000000..fe23ec34b4 --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rule_response_data_attributes_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DeploymentRuleResponseDataAttributesType(ModelSimple): + """ + The type of the deployment rule. + + :param value: Must be one of ["faulty_deployment_detection", "monitor"]. + :type value: str + """ + + allowed_values = { + "faulty_deployment_detection", + "monitor", + } + FAULTY_DEPLOYMENT_DETECTION: ClassVar["DeploymentRuleResponseDataAttributesType"] + MONITOR: ClassVar["DeploymentRuleResponseDataAttributesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DeploymentRuleResponseDataAttributesType.FAULTY_DEPLOYMENT_DETECTION = DeploymentRuleResponseDataAttributesType("faulty_deployment_detection") +DeploymentRuleResponseDataAttributesType.MONITOR = DeploymentRuleResponseDataAttributesType("monitor") diff --git a/datadog_api_client/v2/model/deployment_rule_response_data_attributes_updated_by.py b/datadog_api_client/v2/model/deployment_rule_response_data_attributes_updated_by.py new file mode 100644 index 0000000000..c8f13617ef --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rule_response_data_attributes_updated_by.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentRuleResponseDataAttributesUpdatedBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "id": (str,), + "name": (str,), + } + attribute_map = { + "handle": "handle", + "id": "id", + "name": "name", + } + + def __init__(self_, id: str, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Information about the user who updated the deployment rule. + + :param handle: The handle of the user who updated the deployment rule. + :type handle: str, optional + + :param id: The ID of the user who updated the deployment rule. + :type id: str + + :param name: The name of the user who updated the deployment rule. + :type name: str, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/deployment_rules_options.py b/datadog_api_client/v2/model/deployment_rules_options.py new file mode 100644 index 0000000000..88c838fcfa --- /dev/null +++ b/datadog_api_client/v2/model/deployment_rules_options.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeploymentRulesOptions(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Options for deployment rule response representing either faulty deployment detection or monitor options. + + :param allowed_resources: Resources to include in faulty deployment detection. Mutually exclusive with `excluded_resources`. + :type allowed_resources: [str], optional + + :param duration: The duration for faulty deployment detection. + :type duration: int, optional + + :param excluded_resources: Resources to exclude from faulty deployment detection. + :type excluded_resources: [str], optional + + :param query: Monitors that match this query are evaluated. + :type query: str + """ + 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.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + return { + "oneOf": [ + DeploymentRuleOptionsFaultyDeploymentDetection, + DeploymentRuleOptionsMonitor, + ], + } diff --git a/datadog_api_client/v2/model/detach_case_request.py b/datadog_api_client/v2/model/detach_case_request.py new file mode 100644 index 0000000000..8048b35a78 --- /dev/null +++ b/datadog_api_client/v2/model/detach_case_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.detach_case_request_data import DetachCaseRequestData + +class DetachCaseRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.detach_case_request_data import DetachCaseRequestData + return { + "data": (DetachCaseRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DetachCaseRequestData, UnsetType]=unset, **kwargs): + """ + Request for detaching security findings from their case. + + :param data: Data for detaching security findings from their case. + :type data: DetachCaseRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/detach_case_request_data.py b/datadog_api_client/v2/model/detach_case_request_data.py new file mode 100644 index 0000000000..ee2e832cd5 --- /dev/null +++ b/datadog_api_client/v2/model/detach_case_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.detach_case_request_data_relationships import DetachCaseRequestDataRelationships + from datadog_api_client.v2.model.case_data_type import CaseDataType + +class DetachCaseRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.detach_case_request_data_relationships import DetachCaseRequestDataRelationships + from datadog_api_client.v2.model.case_data_type import CaseDataType + return { + "relationships": (DetachCaseRequestDataRelationships,), + "type": (CaseDataType,), + } + attribute_map = { + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: CaseDataType, relationships: Union[DetachCaseRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + Data for detaching security findings from their case. + + :param relationships: Relationships detaching security findings from their case. + :type relationships: DetachCaseRequestDataRelationships, optional + + :param type: Cases resource type. + :type type: CaseDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/detach_case_request_data_relationships.py b/datadog_api_client/v2/model/detach_case_request_data_relationships.py new file mode 100644 index 0000000000..7f41d28fdd --- /dev/null +++ b/datadog_api_client/v2/model/detach_case_request_data_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + +class DetachCaseRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + return { + "findings": (Findings,), + } + attribute_map = { + "findings": "findings", + } + + def __init__(self_, findings: Findings, **kwargs): + """ + Relationships detaching security findings from their case. + + :param findings: A list of security findings. + :type findings: Findings + """ + super().__init__(kwargs) + + + self_.findings = findings diff --git a/datadog_api_client/v2/model/detailed_finding.py b/datadog_api_client/v2/model/detailed_finding.py new file mode 100644 index 0000000000..3d5b7d73eb --- /dev/null +++ b/datadog_api_client/v2/model/detailed_finding.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.detailed_finding_attributes import DetailedFindingAttributes + from datadog_api_client.v2.model.detailed_finding_type import DetailedFindingType + +class DetailedFinding(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.detailed_finding_attributes import DetailedFindingAttributes + from datadog_api_client.v2.model.detailed_finding_type import DetailedFindingType + return { + "attributes": (DetailedFindingAttributes,), + "id": (str,), + "type": (DetailedFindingType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[DetailedFindingAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[DetailedFindingType, UnsetType]=unset, **kwargs): + """ + A single finding with with message and resource configuration. + + :param attributes: The JSON:API attributes of the detailed finding. + :type attributes: DetailedFindingAttributes, optional + + :param id: The unique ID for this finding. + :type id: str, optional + + :param type: The JSON:API type for findings that have the message and resource configuration. + :type type: DetailedFindingType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/detailed_finding_attributes.py b/datadog_api_client/v2/model/detailed_finding_attributes.py new file mode 100644 index 0000000000..1de373955c --- /dev/null +++ b/datadog_api_client/v2/model/detailed_finding_attributes.py @@ -0,0 +1,133 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_evaluation import FindingEvaluation + from datadog_api_client.v2.model.finding_mute import FindingMute + from datadog_api_client.v2.model.finding_rule import FindingRule + from datadog_api_client.v2.model.finding_status import FindingStatus + +class DetailedFindingAttributes(ModelNormal): + validations = { + "evaluation_changed_at": { + "inclusive_minimum": 1, + }, + "resource_discovery_date": { + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_evaluation import FindingEvaluation + from datadog_api_client.v2.model.finding_mute import FindingMute + from datadog_api_client.v2.model.finding_rule import FindingRule + from datadog_api_client.v2.model.finding_status import FindingStatus + return { + "evaluation": (FindingEvaluation,), + "evaluation_changed_at": (int,), + "message": (str,), + "mute": (FindingMute,), + "resource": (str,), + "resource_configuration": (dict,), + "resource_discovery_date": (int,), + "resource_type": (str,), + "rule": (FindingRule,), + "status": (FindingStatus,), + "tags": ([str],), + } + attribute_map = { + "evaluation": "evaluation", + "evaluation_changed_at": "evaluation_changed_at", + "message": "message", + "mute": "mute", + "resource": "resource", + "resource_configuration": "resource_configuration", + "resource_discovery_date": "resource_discovery_date", + "resource_type": "resource_type", + "rule": "rule", + "status": "status", + "tags": "tags", + } + + def __init__(self_, evaluation: Union[FindingEvaluation, UnsetType]=unset, evaluation_changed_at: Union[int, UnsetType]=unset, message: Union[str, UnsetType]=unset, mute: Union[FindingMute, UnsetType]=unset, resource: Union[str, UnsetType]=unset, resource_configuration: Union[dict, UnsetType]=unset, resource_discovery_date: Union[int, UnsetType]=unset, resource_type: Union[str, UnsetType]=unset, rule: Union[FindingRule, UnsetType]=unset, status: Union[FindingStatus, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The JSON:API attributes of the detailed finding. + + :param evaluation: The evaluation of the finding. + :type evaluation: FindingEvaluation, optional + + :param evaluation_changed_at: The date on which the evaluation for this finding changed (Unix ms). + :type evaluation_changed_at: int, optional + + :param message: The remediation message for this finding. + :type message: str, optional + + :param mute: Information about the mute status of this finding. + :type mute: FindingMute, optional + + :param resource: The resource name of this finding. + :type resource: str, optional + + :param resource_configuration: The resource configuration for this finding. + :type resource_configuration: dict, optional + + :param resource_discovery_date: The date on which the resource was discovered (Unix ms). + :type resource_discovery_date: int, optional + + :param resource_type: The resource type of this finding. + :type resource_type: str, optional + + :param rule: The rule that triggered this finding. + :type rule: FindingRule, optional + + :param status: The status of the finding. + :type status: FindingStatus, optional + + :param tags: The tags associated with this finding. + :type tags: [str], optional + """ + if evaluation is not unset: + kwargs["evaluation"] = evaluation + if evaluation_changed_at is not unset: + kwargs["evaluation_changed_at"] = evaluation_changed_at + if message is not unset: + kwargs["message"] = message + if mute is not unset: + kwargs["mute"] = mute + if resource is not unset: + kwargs["resource"] = resource + if resource_configuration is not unset: + kwargs["resource_configuration"] = resource_configuration + if resource_discovery_date is not unset: + kwargs["resource_discovery_date"] = resource_discovery_date + if resource_type is not unset: + kwargs["resource_type"] = resource_type + if rule is not unset: + kwargs["rule"] = rule + if status is not unset: + kwargs["status"] = status + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/detailed_finding_type.py b/datadog_api_client/v2/model/detailed_finding_type.py new file mode 100644 index 0000000000..7c8e9bb79c --- /dev/null +++ b/datadog_api_client/v2/model/detailed_finding_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DetailedFindingType(ModelSimple): + """ + The JSON:API type for findings that have the message and resource configuration. + + :param value: If omitted defaults to "detailed_finding". Must be one of ["detailed_finding"]. + :type value: str + """ + + allowed_values = { + "detailed_finding", + } + DETAILED_FINDING: ClassVar["DetailedFindingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DetailedFindingType.DETAILED_FINDING = DetailedFindingType("detailed_finding") diff --git a/datadog_api_client/v2/model/device_attributes.py b/datadog_api_client/v2/model/device_attributes.py new file mode 100644 index 0000000000..3d936631ea --- /dev/null +++ b/datadog_api_client/v2/model/device_attributes.py @@ -0,0 +1,182 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.device_attributes_interface_statuses import DeviceAttributesInterfaceStatuses + +class DeviceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.device_attributes_interface_statuses import DeviceAttributesInterfaceStatuses + return { + "description": (str,), + "device_type": (str,), + "integration": (str,), + "interface_statuses": (DeviceAttributesInterfaceStatuses,), + "ip_address": (str,), + "location": (str,), + "model": (str,), + "name": (str,), + "os_hostname": (str,), + "os_name": (str,), + "os_version": (str,), + "ping_status": (str,), + "product_name": (str,), + "serial_number": (str,), + "status": (str,), + "subnet": (str,), + "sys_object_id": (str,), + "tags": ([str],), + "vendor": (str,), + "version": (str,), + } + attribute_map = { + "description": "description", + "device_type": "device_type", + "integration": "integration", + "interface_statuses": "interface_statuses", + "ip_address": "ip_address", + "location": "location", + "model": "model", + "name": "name", + "os_hostname": "os_hostname", + "os_name": "os_name", + "os_version": "os_version", + "ping_status": "ping_status", + "product_name": "product_name", + "serial_number": "serial_number", + "status": "status", + "subnet": "subnet", + "sys_object_id": "sys_object_id", + "tags": "tags", + "vendor": "vendor", + "version": "version", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, device_type: Union[str, UnsetType]=unset, integration: Union[str, UnsetType]=unset, interface_statuses: Union[DeviceAttributesInterfaceStatuses, UnsetType]=unset, ip_address: Union[str, UnsetType]=unset, location: Union[str, UnsetType]=unset, model: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, os_hostname: Union[str, UnsetType]=unset, os_name: Union[str, UnsetType]=unset, os_version: Union[str, UnsetType]=unset, ping_status: Union[str, UnsetType]=unset, product_name: Union[str, UnsetType]=unset, serial_number: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, subnet: Union[str, UnsetType]=unset, sys_object_id: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, vendor: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + The device attributes + + :param description: The device description + :type description: str, optional + + :param device_type: The device type + :type device_type: str, optional + + :param integration: The device integration + :type integration: str, optional + + :param interface_statuses: Count of the device interfaces by status + :type interface_statuses: DeviceAttributesInterfaceStatuses, optional + + :param ip_address: The device IP address + :type ip_address: str, optional + + :param location: The device location + :type location: str, optional + + :param model: The device model + :type model: str, optional + + :param name: The device name + :type name: str, optional + + :param os_hostname: The device OS hostname + :type os_hostname: str, optional + + :param os_name: The device OS name + :type os_name: str, optional + + :param os_version: The device OS version + :type os_version: str, optional + + :param ping_status: The device ping status + :type ping_status: str, optional + + :param product_name: The device product name + :type product_name: str, optional + + :param serial_number: The device serial number + :type serial_number: str, optional + + :param status: The device SNMP status + :type status: str, optional + + :param subnet: The device subnet + :type subnet: str, optional + + :param sys_object_id: The device ``sys_object_id`` + :type sys_object_id: str, optional + + :param tags: The list of device tags + :type tags: [str], optional + + :param vendor: The device vendor + :type vendor: str, optional + + :param version: The device version + :type version: str, optional + """ + if description is not unset: + kwargs["description"] = description + if device_type is not unset: + kwargs["device_type"] = device_type + if integration is not unset: + kwargs["integration"] = integration + if interface_statuses is not unset: + kwargs["interface_statuses"] = interface_statuses + if ip_address is not unset: + kwargs["ip_address"] = ip_address + if location is not unset: + kwargs["location"] = location + if model is not unset: + kwargs["model"] = model + if name is not unset: + kwargs["name"] = name + if os_hostname is not unset: + kwargs["os_hostname"] = os_hostname + if os_name is not unset: + kwargs["os_name"] = os_name + if os_version is not unset: + kwargs["os_version"] = os_version + if ping_status is not unset: + kwargs["ping_status"] = ping_status + if product_name is not unset: + kwargs["product_name"] = product_name + if serial_number is not unset: + kwargs["serial_number"] = serial_number + if status is not unset: + kwargs["status"] = status + if subnet is not unset: + kwargs["subnet"] = subnet + if sys_object_id is not unset: + kwargs["sys_object_id"] = sys_object_id + if tags is not unset: + kwargs["tags"] = tags + if vendor is not unset: + kwargs["vendor"] = vendor + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/device_attributes_interface_statuses.py b/datadog_api_client/v2/model/device_attributes_interface_statuses.py new file mode 100644 index 0000000000..2047203209 --- /dev/null +++ b/datadog_api_client/v2/model/device_attributes_interface_statuses.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DeviceAttributesInterfaceStatuses(ModelNormal): + @cached_property + def openapi_types(_): + return { + "down": (int,), + "off": (int,), + "up": (int,), + "warning": (int,), + } + attribute_map = { + "down": "down", + "off": "off", + "up": "up", + "warning": "warning", + } + + def __init__(self_, down: Union[int, UnsetType]=unset, off: Union[int, UnsetType]=unset, up: Union[int, UnsetType]=unset, warning: Union[int, UnsetType]=unset, **kwargs): + """ + Count of the device interfaces by status + + :param down: The number of interfaces that are down + :type down: int, optional + + :param off: The number of interfaces that are off + :type off: int, optional + + :param up: The number of interfaces that are up + :type up: int, optional + + :param warning: The number of interfaces that are in a warning state + :type warning: int, optional + """ + if down is not unset: + kwargs["down"] = down + if off is not unset: + kwargs["off"] = off + if up is not unset: + kwargs["up"] = up + if warning is not unset: + kwargs["warning"] = warning + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/devices_list_data.py b/datadog_api_client/v2/model/devices_list_data.py new file mode 100644 index 0000000000..3f1c9e59b1 --- /dev/null +++ b/datadog_api_client/v2/model/devices_list_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.device_attributes import DeviceAttributes + +class DevicesListData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.device_attributes import DeviceAttributes + return { + "attributes": (DeviceAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[DeviceAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The devices list data + + :param attributes: The device attributes + :type attributes: DeviceAttributes, optional + + :param id: The device ID + :type id: str, optional + + :param type: The type of the resource. The value should always be device. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dns_metric_key.py b/datadog_api_client/v2/model/dns_metric_key.py new file mode 100644 index 0000000000..4c7b0fbf0c --- /dev/null +++ b/datadog_api_client/v2/model/dns_metric_key.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DnsMetricKey(ModelSimple): + """ + The metric key for DNS metrics. + + :param value: Must be one of ["dns_total_requests", "dns_failures", "dns_successful_responses", "dns_failed_responses", "dns_timeouts", "dns_responses.nxdomain", "dns_responses.servfail", "dns_responses.other", "dns_success_latency_percentile", "dns_failure_latency_percentile"]. + :type value: str + """ + + allowed_values = { + "dns_total_requests", + "dns_failures", + "dns_successful_responses", + "dns_failed_responses", + "dns_timeouts", + "dns_responses.nxdomain", + "dns_responses.servfail", + "dns_responses.other", + "dns_success_latency_percentile", + "dns_failure_latency_percentile", + } + DNS_TOTAL_REQUESTS: ClassVar["DnsMetricKey"] + DNS_FAILURES: ClassVar["DnsMetricKey"] + DNS_SUCCESSFUL_RESPONSES: ClassVar["DnsMetricKey"] + DNS_FAILED_RESPONSES: ClassVar["DnsMetricKey"] + DNS_TIMEOUTS: ClassVar["DnsMetricKey"] + DNS_RESPONSES_NXDOMAIN: ClassVar["DnsMetricKey"] + DNS_RESPONSES_SERVFAIL: ClassVar["DnsMetricKey"] + DNS_RESPONSES_OTHER: ClassVar["DnsMetricKey"] + DNS_SUCCESS_LATENCY_PERCENTILE: ClassVar["DnsMetricKey"] + DNS_FAILURE_LATENCY_PERCENTILE: ClassVar["DnsMetricKey"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DnsMetricKey.DNS_TOTAL_REQUESTS = DnsMetricKey("dns_total_requests") +DnsMetricKey.DNS_FAILURES = DnsMetricKey("dns_failures") +DnsMetricKey.DNS_SUCCESSFUL_RESPONSES = DnsMetricKey("dns_successful_responses") +DnsMetricKey.DNS_FAILED_RESPONSES = DnsMetricKey("dns_failed_responses") +DnsMetricKey.DNS_TIMEOUTS = DnsMetricKey("dns_timeouts") +DnsMetricKey.DNS_RESPONSES_NXDOMAIN = DnsMetricKey("dns_responses.nxdomain") +DnsMetricKey.DNS_RESPONSES_SERVFAIL = DnsMetricKey("dns_responses.servfail") +DnsMetricKey.DNS_RESPONSES_OTHER = DnsMetricKey("dns_responses.other") +DnsMetricKey.DNS_SUCCESS_LATENCY_PERCENTILE = DnsMetricKey("dns_success_latency_percentile") +DnsMetricKey.DNS_FAILURE_LATENCY_PERCENTILE = DnsMetricKey("dns_failure_latency_percentile") diff --git a/datadog_api_client/v2/model/domain_allowlist.py b/datadog_api_client/v2/model/domain_allowlist.py new file mode 100644 index 0000000000..92bc97525e --- /dev/null +++ b/datadog_api_client/v2/model/domain_allowlist.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.domain_allowlist_attributes import DomainAllowlistAttributes + from datadog_api_client.v2.model.domain_allowlist_type import DomainAllowlistType + +class DomainAllowlist(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.domain_allowlist_attributes import DomainAllowlistAttributes + from datadog_api_client.v2.model.domain_allowlist_type import DomainAllowlistType + return { + "attributes": (DomainAllowlistAttributes,), + "id": (str, none_type), + "type": (DomainAllowlistType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: DomainAllowlistType, attributes: Union[DomainAllowlistAttributes, UnsetType]=unset, id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The email domain allowlist for an org. + + :param attributes: The details of the email domain allowlist. + :type attributes: DomainAllowlistAttributes, optional + + :param id: The unique identifier of the org. + :type id: str, none_type, optional + + :param type: Email domain allowlist allowlist type. + :type type: DomainAllowlistType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/domain_allowlist_attributes.py b/datadog_api_client/v2/model/domain_allowlist_attributes.py new file mode 100644 index 0000000000..f4646b1504 --- /dev/null +++ b/datadog_api_client/v2/model/domain_allowlist_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DomainAllowlistAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "domains": ([str],), + "enabled": (bool,), + } + attribute_map = { + "domains": "domains", + "enabled": "enabled", + } + + def __init__(self_, domains: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + The details of the email domain allowlist. + + :param domains: The list of domains in the email domain allowlist. + :type domains: [str], optional + + :param enabled: Whether the email domain allowlist is enabled for the org. + :type enabled: bool, optional + """ + if domains is not unset: + kwargs["domains"] = domains + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/domain_allowlist_request.py b/datadog_api_client/v2/model/domain_allowlist_request.py new file mode 100644 index 0000000000..06c9ff000d --- /dev/null +++ b/datadog_api_client/v2/model/domain_allowlist_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.domain_allowlist import DomainAllowlist + +class DomainAllowlistRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.domain_allowlist import DomainAllowlist + return { + "data": (DomainAllowlist,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DomainAllowlist, **kwargs): + """ + Request containing the desired email domain allowlist configuration. + + :param data: The email domain allowlist for an org. + :type data: DomainAllowlist + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/domain_allowlist_response.py b/datadog_api_client/v2/model/domain_allowlist_response.py new file mode 100644 index 0000000000..056d3cbaf1 --- /dev/null +++ b/datadog_api_client/v2/model/domain_allowlist_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.domain_allowlist_response_data import DomainAllowlistResponseData + +class DomainAllowlistResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.domain_allowlist_response_data import DomainAllowlistResponseData + return { + "data": (DomainAllowlistResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DomainAllowlistResponseData, UnsetType]=unset, **kwargs): + """ + Response containing information about the email domain allowlist. + + :param data: The email domain allowlist response for an org. + :type data: DomainAllowlistResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/domain_allowlist_response_data.py b/datadog_api_client/v2/model/domain_allowlist_response_data.py new file mode 100644 index 0000000000..49b59c37f1 --- /dev/null +++ b/datadog_api_client/v2/model/domain_allowlist_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.domain_allowlist_response_data_attributes import DomainAllowlistResponseDataAttributes + from datadog_api_client.v2.model.domain_allowlist_type import DomainAllowlistType + +class DomainAllowlistResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.domain_allowlist_response_data_attributes import DomainAllowlistResponseDataAttributes + from datadog_api_client.v2.model.domain_allowlist_type import DomainAllowlistType + return { + "attributes": (DomainAllowlistResponseDataAttributes,), + "id": (str, none_type), + "type": (DomainAllowlistType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: DomainAllowlistType, attributes: Union[DomainAllowlistResponseDataAttributes, UnsetType]=unset, id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The email domain allowlist response for an org. + + :param attributes: The details of the email domain allowlist. + :type attributes: DomainAllowlistResponseDataAttributes, optional + + :param id: The unique identifier of the org. + :type id: str, none_type, optional + + :param type: Email domain allowlist allowlist type. + :type type: DomainAllowlistType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/domain_allowlist_response_data_attributes.py b/datadog_api_client/v2/model/domain_allowlist_response_data_attributes.py new file mode 100644 index 0000000000..10a4e83031 --- /dev/null +++ b/datadog_api_client/v2/model/domain_allowlist_response_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DomainAllowlistResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "domains": ([str],), + "enabled": (bool,), + } + attribute_map = { + "domains": "domains", + "enabled": "enabled", + } + + def __init__(self_, domains: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + The details of the email domain allowlist. + + :param domains: The list of domains in the email domain allowlist. + :type domains: [str], optional + + :param enabled: Whether the email domain allowlist is enabled for the org. + :type enabled: bool, optional + """ + if domains is not unset: + kwargs["domains"] = domains + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/domain_allowlist_type.py b/datadog_api_client/v2/model/domain_allowlist_type.py new file mode 100644 index 0000000000..a6e1aa197d --- /dev/null +++ b/datadog_api_client/v2/model/domain_allowlist_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DomainAllowlistType(ModelSimple): + """ + Email domain allowlist allowlist type. + + :param value: If omitted defaults to "domain_allowlist". Must be one of ["domain_allowlist"]. + :type value: str + """ + + allowed_values = { + "domain_allowlist", + } + DOMAIN_ALLOWLIST: ClassVar["DomainAllowlistType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DomainAllowlistType.DOMAIN_ALLOWLIST = DomainAllowlistType("domain_allowlist") diff --git a/datadog_api_client/v2/model/dora_deployment_fetch_response.py b/datadog_api_client/v2/model/dora_deployment_fetch_response.py new file mode 100644 index 0000000000..a1c04f130c --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_fetch_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_object import DORADeploymentObject + +class DORADeploymentFetchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_object import DORADeploymentObject + return { + "data": (DORADeploymentObject,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DORADeploymentObject, UnsetType]=unset, **kwargs): + """ + Response for fetching a single deployment event. + + :param data: A DORA deployment event. + :type data: DORADeploymentObject, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_deployment_object.py b/datadog_api_client/v2/model/dora_deployment_object.py new file mode 100644 index 0000000000..328ff754dd --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_object.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_object_attributes import DORADeploymentObjectAttributes + from datadog_api_client.v2.model.dora_deployment_type import DORADeploymentType + +class DORADeploymentObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_object_attributes import DORADeploymentObjectAttributes + from datadog_api_client.v2.model.dora_deployment_type import DORADeploymentType + return { + "attributes": (DORADeploymentObjectAttributes,), + "id": (str,), + "type": (DORADeploymentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[DORADeploymentObjectAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[DORADeploymentType, UnsetType]=unset, **kwargs): + """ + A DORA deployment event. + + :param attributes: The attributes of the deployment event. + :type attributes: DORADeploymentObjectAttributes, optional + + :param id: The ID of the deployment event. + :type id: str, optional + + :param type: JSON:API type for DORA deployment events. + :type type: DORADeploymentType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_deployment_object_attributes.py b/datadog_api_client/v2/model/dora_deployment_object_attributes.py new file mode 100644 index 0000000000..587f2673ee --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_object_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_git_info_response import DORAGitInfoResponse + +class DORADeploymentObjectAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_git_info_response import DORAGitInfoResponse + return { + "custom_tags": ([str],), + "env": (str,), + "finished_at": (datetime,), + "git": (DORAGitInfoResponse,), + "service": (str,), + "started_at": (datetime,), + "team": (str,), + "version": (str,), + } + attribute_map = { + "custom_tags": "custom_tags", + "env": "env", + "finished_at": "finished_at", + "git": "git", + "service": "service", + "started_at": "started_at", + "team": "team", + "version": "version", + } + + def __init__(self_, service: str, started_at: datetime, custom_tags: Union[List[str], none_type, UnsetType]=unset, env: Union[str, UnsetType]=unset, finished_at: Union[datetime, UnsetType]=unset, git: Union[DORAGitInfoResponse, UnsetType]=unset, team: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of the deployment event. + + :param custom_tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. Up to 100 may be added per event. + :type custom_tags: [str], none_type, optional + + :param env: Environment name to where the service was deployed. + :type env: str, optional + + :param finished_at: The time when the deployment finished. + :type finished_at: datetime, optional + + :param git: Git info returned by DORA Metrics events. + :type git: DORAGitInfoResponse, optional + + :param service: Service name. + :type service: str + + :param started_at: The time when the deployment started. + :type started_at: datetime + + :param team: Name of the team owning the deployed service. + :type team: str, optional + + :param version: Version to correlate with APM Deployment Tracking. + :type version: str, optional + """ + if custom_tags is not unset: + kwargs["custom_tags"] = custom_tags + if env is not unset: + kwargs["env"] = env + if finished_at is not unset: + kwargs["finished_at"] = finished_at + if git is not unset: + kwargs["git"] = git + if team is not unset: + kwargs["team"] = team + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.service = service + self_.started_at = started_at diff --git a/datadog_api_client/v2/model/dora_deployment_patch_by_version_remediation.py b/datadog_api_client/v2/model/dora_deployment_patch_by_version_remediation.py new file mode 100644 index 0000000000..75bf629c97 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_by_version_remediation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DORADeploymentPatchByVersionRemediation(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Remediation details for the deployment. Optional, but required to calculate failed deployment recovery time. Specify either ``id`` or ``version`` to identify the remediation deployment, but not both. + + :param id: The ID of the remediation deployment. + :type id: str + + :param type: The type of remediation action taken. Required when the failed deployment must be linked to a remediation deployment. + :type type: DORADeploymentPatchRemediationType + + :param version: The version of the remediation deployment. + :type version: str + """ + 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.dora_deployment_patch_by_version_remediation_by_id import DORADeploymentPatchByVersionRemediationByID + from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation_by_version import DORADeploymentPatchByVersionRemediationByVersion + return { + "oneOf": [ + DORADeploymentPatchByVersionRemediationByID, + DORADeploymentPatchByVersionRemediationByVersion, + ], + } diff --git a/datadog_api_client/v2/model/dora_deployment_patch_by_version_remediation_by_id.py b/datadog_api_client/v2/model/dora_deployment_patch_by_version_remediation_by_id.py new file mode 100644 index 0000000000..b23aa6fea0 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_by_version_remediation_by_id.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_patch_remediation_type import DORADeploymentPatchRemediationType + +class DORADeploymentPatchByVersionRemediationByID(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_patch_remediation_type import DORADeploymentPatchRemediationType + return { + "id": (str,), + "type": (DORADeploymentPatchRemediationType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: DORADeploymentPatchRemediationType, **kwargs): + """ + Remediation details identified by the ID of the remediation deployment. + + :param id: The ID of the remediation deployment. + :type id: str + + :param type: The type of remediation action taken. Required when the failed deployment must be linked to a remediation deployment. + :type type: DORADeploymentPatchRemediationType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/dora_deployment_patch_by_version_remediation_by_version.py b/datadog_api_client/v2/model/dora_deployment_patch_by_version_remediation_by_version.py new file mode 100644 index 0000000000..d781c29595 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_by_version_remediation_by_version.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_patch_remediation_type import DORADeploymentPatchRemediationType + +class DORADeploymentPatchByVersionRemediationByVersion(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_patch_remediation_type import DORADeploymentPatchRemediationType + return { + "type": (DORADeploymentPatchRemediationType,), + "version": (str,), + } + attribute_map = { + "type": "type", + "version": "version", + } + + def __init__(self_, type: DORADeploymentPatchRemediationType, version: str, **kwargs): + """ + Remediation details identified by the version of the remediation deployment, matched against the same service and environment as the failed deployment. + + :param type: The type of remediation action taken. Required when the failed deployment must be linked to a remediation deployment. + :type type: DORADeploymentPatchRemediationType + + :param version: The version of the remediation deployment. + :type version: str + """ + super().__init__(kwargs) + + + self_.type = type + self_.version = version diff --git a/datadog_api_client/v2/model/dora_deployment_patch_by_version_request.py b/datadog_api_client/v2/model/dora_deployment_patch_by_version_request.py new file mode 100644 index 0000000000..9dc4f0b378 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_by_version_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_patch_by_version_request_data import DORADeploymentPatchByVersionRequestData + from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation_by_id import DORADeploymentPatchByVersionRemediationByID + from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation_by_version import DORADeploymentPatchByVersionRemediationByVersion + +class DORADeploymentPatchByVersionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_patch_by_version_request_data import DORADeploymentPatchByVersionRequestData + return { + "data": (DORADeploymentPatchByVersionRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DORADeploymentPatchByVersionRequestData, **kwargs): + """ + Request to patch a DORA deployment event identified by service, environment, and version. + + :param data: The JSON:API data for patching a deployment identified by service, environment, and version. + :type data: DORADeploymentPatchByVersionRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dora_deployment_patch_by_version_request_attributes.py b/datadog_api_client/v2/model/dora_deployment_patch_by_version_request_attributes.py new file mode 100644 index 0000000000..c4a4eaca92 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_by_version_request_attributes.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation import DORADeploymentPatchByVersionRemediation + from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation_by_id import DORADeploymentPatchByVersionRemediationByID + from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation_by_version import DORADeploymentPatchByVersionRemediationByVersion + +class DORADeploymentPatchByVersionRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation import DORADeploymentPatchByVersionRemediation + return { + "change_failure": (bool,), + "env": (str,), + "remediation": (DORADeploymentPatchByVersionRemediation,), + "service": (str,), + "version": (str,), + } + attribute_map = { + "change_failure": "change_failure", + "env": "env", + "remediation": "remediation", + "service": "service", + "version": "version", + } + + def __init__(self_, change_failure: bool, env: str, service: str, version: str, remediation: Union[DORADeploymentPatchByVersionRemediation, DORADeploymentPatchByVersionRemediationByID, DORADeploymentPatchByVersionRemediationByVersion, UnsetType]=unset, **kwargs): + """ + Attributes for patching a DORA deployment event identified by service, environment, and version. + + :param change_failure: Indicates whether the deployment resulted in a change failure. + :type change_failure: bool + + :param env: The environment the deployment was performed in. + :type env: str + + :param remediation: Remediation details for the deployment. Optional, but required to calculate failed deployment recovery time. Specify either ``id`` or ``version`` to identify the remediation deployment, but not both. + :type remediation: DORADeploymentPatchByVersionRemediation, optional + + :param service: The name of the service that was deployed. + :type service: str + + :param version: The version deployed. This can be seen in the Service Catalog or in the APM Deployment Tracking. + :type version: str + """ + if remediation is not unset: + kwargs["remediation"] = remediation + super().__init__(kwargs) + + + self_.change_failure = change_failure + self_.env = env + self_.service = service + self_.version = version diff --git a/datadog_api_client/v2/model/dora_deployment_patch_by_version_request_data.py b/datadog_api_client/v2/model/dora_deployment_patch_by_version_request_data.py new file mode 100644 index 0000000000..9dff06ed8e --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_by_version_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_patch_by_version_request_attributes import DORADeploymentPatchByVersionRequestAttributes + from datadog_api_client.v2.model.dora_deployment_patch_request_data_type import DORADeploymentPatchRequestDataType + from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation_by_id import DORADeploymentPatchByVersionRemediationByID + from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation_by_version import DORADeploymentPatchByVersionRemediationByVersion + +class DORADeploymentPatchByVersionRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_patch_by_version_request_attributes import DORADeploymentPatchByVersionRequestAttributes + from datadog_api_client.v2.model.dora_deployment_patch_request_data_type import DORADeploymentPatchRequestDataType + return { + "attributes": (DORADeploymentPatchByVersionRequestAttributes,), + "type": (DORADeploymentPatchRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DORADeploymentPatchByVersionRequestAttributes, type: DORADeploymentPatchRequestDataType, **kwargs): + """ + The JSON:API data for patching a deployment identified by service, environment, and version. + + :param attributes: Attributes for patching a DORA deployment event identified by service, environment, and version. + :type attributes: DORADeploymentPatchByVersionRequestAttributes + + :param type: JSON:API type for DORA deployment patch request. + :type type: DORADeploymentPatchRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/dora_deployment_patch_remediation.py b/datadog_api_client/v2/model/dora_deployment_patch_remediation.py new file mode 100644 index 0000000000..32ee98b9b5 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_remediation.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_patch_remediation_type import DORADeploymentPatchRemediationType + +class DORADeploymentPatchRemediation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_patch_remediation_type import DORADeploymentPatchRemediationType + return { + "id": (str,), + "type": (DORADeploymentPatchRemediationType,), + "version": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + "version": "version", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[DORADeploymentPatchRemediationType, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Remediation details for the deployment. Optional, but required to calculate failed deployment recovery time. Specify either ``id`` or ``version`` to identify the remediation deployment, but not both. + + :param id: The ID of the remediation deployment. Use this or ``version`` to identify the remediation deployment, but not both. + :type id: str, optional + + :param type: The type of remediation action taken. Required when the failed deployment must be linked to a remediation deployment. + :type type: DORADeploymentPatchRemediationType, optional + + :param version: The version of the remediation deployment, matched against the same service and environment as the failed deployment. Use this or ``id`` to identify the remediation deployment, but not both. + :type version: str, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_deployment_patch_remediation_type.py b/datadog_api_client/v2/model/dora_deployment_patch_remediation_type.py new file mode 100644 index 0000000000..fc0ef14603 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_remediation_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DORADeploymentPatchRemediationType(ModelSimple): + """ + The type of remediation action taken. Required when the failed deployment must be linked to a remediation deployment. + + :param value: Must be one of ["rollback", "rollforward"]. + :type value: str + """ + + allowed_values = { + "rollback", + "rollforward", + } + ROLLBACK: ClassVar["DORADeploymentPatchRemediationType"] + ROLLFORWARD: ClassVar["DORADeploymentPatchRemediationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DORADeploymentPatchRemediationType.ROLLBACK = DORADeploymentPatchRemediationType("rollback") +DORADeploymentPatchRemediationType.ROLLFORWARD = DORADeploymentPatchRemediationType("rollforward") diff --git a/datadog_api_client/v2/model/dora_deployment_patch_request.py b/datadog_api_client/v2/model/dora_deployment_patch_request.py new file mode 100644 index 0000000000..0d3cd4e55d --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_patch_request_data import DORADeploymentPatchRequestData + +class DORADeploymentPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_patch_request_data import DORADeploymentPatchRequestData + return { + "data": (DORADeploymentPatchRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DORADeploymentPatchRequestData, **kwargs): + """ + Request to patch a DORA deployment event. + + :param data: The JSON:API data for patching a deployment. + :type data: DORADeploymentPatchRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dora_deployment_patch_request_attributes.py b/datadog_api_client/v2/model/dora_deployment_patch_request_attributes.py new file mode 100644 index 0000000000..5ff84ee67e --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_patch_remediation import DORADeploymentPatchRemediation + +class DORADeploymentPatchRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_patch_remediation import DORADeploymentPatchRemediation + return { + "change_failure": (bool,), + "remediation": (DORADeploymentPatchRemediation,), + } + attribute_map = { + "change_failure": "change_failure", + "remediation": "remediation", + } + + def __init__(self_, change_failure: Union[bool, UnsetType]=unset, remediation: Union[DORADeploymentPatchRemediation, UnsetType]=unset, **kwargs): + """ + Attributes for patching a DORA deployment event. + + :param change_failure: Indicates whether the deployment resulted in a change failure. + :type change_failure: bool, optional + + :param remediation: Remediation details for the deployment. Optional, but required to calculate failed deployment recovery time. Specify either ``id`` or ``version`` to identify the remediation deployment, but not both. + :type remediation: DORADeploymentPatchRemediation, optional + """ + if change_failure is not unset: + kwargs["change_failure"] = change_failure + if remediation is not unset: + kwargs["remediation"] = remediation + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_deployment_patch_request_data.py b/datadog_api_client/v2/model/dora_deployment_patch_request_data.py new file mode 100644 index 0000000000..960fa45f73 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_request_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_patch_request_attributes import DORADeploymentPatchRequestAttributes + from datadog_api_client.v2.model.dora_deployment_patch_request_data_type import DORADeploymentPatchRequestDataType + +class DORADeploymentPatchRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_patch_request_attributes import DORADeploymentPatchRequestAttributes + from datadog_api_client.v2.model.dora_deployment_patch_request_data_type import DORADeploymentPatchRequestDataType + return { + "attributes": (DORADeploymentPatchRequestAttributes,), + "id": (str,), + "type": (DORADeploymentPatchRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DORADeploymentPatchRequestAttributes, id: str, type: DORADeploymentPatchRequestDataType, **kwargs): + """ + The JSON:API data for patching a deployment. + + :param attributes: Attributes for patching a DORA deployment event. + :type attributes: DORADeploymentPatchRequestAttributes + + :param id: The ID of the deployment to patch. + :type id: str + + :param type: JSON:API type for DORA deployment patch request. + :type type: DORADeploymentPatchRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/dora_deployment_patch_request_data_type.py b/datadog_api_client/v2/model/dora_deployment_patch_request_data_type.py new file mode 100644 index 0000000000..7fde835aa9 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_patch_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DORADeploymentPatchRequestDataType(ModelSimple): + """ + JSON:API type for DORA deployment patch request. + + :param value: If omitted defaults to "dora_deployment_patch_request". Must be one of ["dora_deployment_patch_request"]. + :type value: str + """ + + allowed_values = { + "dora_deployment_patch_request", + } + DORA_DEPLOYMENT_PATCH_REQUEST: ClassVar["DORADeploymentPatchRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DORADeploymentPatchRequestDataType.DORA_DEPLOYMENT_PATCH_REQUEST = DORADeploymentPatchRequestDataType("dora_deployment_patch_request") diff --git a/datadog_api_client/v2/model/dora_deployment_request.py b/datadog_api_client/v2/model/dora_deployment_request.py new file mode 100644 index 0000000000..7a67b48904 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_request_data import DORADeploymentRequestData + +class DORADeploymentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_request_data import DORADeploymentRequestData + return { + "data": (DORADeploymentRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DORADeploymentRequestData, **kwargs): + """ + Request to create a DORA deployment event. + + :param data: The JSON:API data. + :type data: DORADeploymentRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dora_deployment_request_attributes.py b/datadog_api_client/v2/model/dora_deployment_request_attributes.py new file mode 100644 index 0000000000..65e7ba044c --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_request_attributes.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_git_info import DORAGitInfo + +class DORADeploymentRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_git_info import DORAGitInfo + return { + "custom_tags": ([str],), + "env": (str,), + "finished_at": (int,), + "git": (DORAGitInfo,), + "id": (str,), + "service": (str,), + "started_at": (int,), + "team": (str,), + "version": (str,), + } + attribute_map = { + "custom_tags": "custom_tags", + "env": "env", + "finished_at": "finished_at", + "git": "git", + "id": "id", + "service": "service", + "started_at": "started_at", + "team": "team", + "version": "version", + } + + def __init__(self_, finished_at: int, service: str, started_at: int, custom_tags: Union[List[str], none_type, UnsetType]=unset, env: Union[str, UnsetType]=unset, git: Union[DORAGitInfo, UnsetType]=unset, id: Union[str, UnsetType]=unset, team: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes to create a DORA deployment event. + + :param custom_tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. Up to 100 may be added per event. + :type custom_tags: [str], none_type, optional + + :param env: Environment name to where the service was deployed. + :type env: str, optional + + :param finished_at: Unix timestamp when the deployment finished. It must be in nanoseconds, milliseconds, or seconds. + :type finished_at: int + + :param git: Git info for DORA Metrics events. + :type git: DORAGitInfo, optional + + :param id: Deployment ID. Must be 16-128 characters and contain only alphanumeric characters, hyphens, underscores, periods, and colons (a-z, A-Z, 0-9, -, _, ., :). + :type id: str, optional + + :param service: Service name. + :type service: str + + :param started_at: Unix timestamp when the deployment started. It must be in nanoseconds, milliseconds, or seconds. + :type started_at: int + + :param team: Name of the team owning the deployed service. If not provided, this is automatically populated with the team associated with the service in the Service Catalog. + :type team: str, optional + + :param version: Version to correlate with `APM Deployment Tracking `_. + :type version: str, optional + """ + if custom_tags is not unset: + kwargs["custom_tags"] = custom_tags + if env is not unset: + kwargs["env"] = env + if git is not unset: + kwargs["git"] = git + if id is not unset: + kwargs["id"] = id + if team is not unset: + kwargs["team"] = team + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.finished_at = finished_at + self_.service = service + self_.started_at = started_at diff --git a/datadog_api_client/v2/model/dora_deployment_request_data.py b/datadog_api_client/v2/model/dora_deployment_request_data.py new file mode 100644 index 0000000000..3c4f8bcfc0 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_request_data.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_request_attributes import DORADeploymentRequestAttributes + +class DORADeploymentRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_request_attributes import DORADeploymentRequestAttributes + return { + "attributes": (DORADeploymentRequestAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: DORADeploymentRequestAttributes, **kwargs): + """ + The JSON:API data. + + :param attributes: Attributes to create a DORA deployment event. + :type attributes: DORADeploymentRequestAttributes + """ + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/dora_deployment_response.py b/datadog_api_client/v2/model/dora_deployment_response.py new file mode 100644 index 0000000000..7c1751cd84 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_response_data import DORADeploymentResponseData + +class DORADeploymentResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_response_data import DORADeploymentResponseData + return { + "data": (DORADeploymentResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DORADeploymentResponseData, **kwargs): + """ + Response after receiving a DORA deployment event. + + :param data: The JSON:API data. + :type data: DORADeploymentResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dora_deployment_response_data.py b/datadog_api_client/v2/model/dora_deployment_response_data.py new file mode 100644 index 0000000000..c53e3f26a2 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_response_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_type import DORADeploymentType + +class DORADeploymentResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_type import DORADeploymentType + return { + "id": (str,), + "type": (DORADeploymentType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: Union[DORADeploymentType, UnsetType]=unset, **kwargs): + """ + The JSON:API data. + + :param id: The ID of the received DORA deployment event. + :type id: str + + :param type: JSON:API type for DORA deployment events. + :type type: DORADeploymentType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/dora_deployment_type.py b/datadog_api_client/v2/model/dora_deployment_type.py new file mode 100644 index 0000000000..56e4712c8b --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployment_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DORADeploymentType(ModelSimple): + """ + JSON:API type for DORA deployment events. + + :param value: If omitted defaults to "dora_deployment". Must be one of ["dora_deployment"]. + :type value: str + """ + + allowed_values = { + "dora_deployment", + } + DORA_DEPLOYMENT: ClassVar["DORADeploymentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DORADeploymentType.DORA_DEPLOYMENT = DORADeploymentType("dora_deployment") diff --git a/datadog_api_client/v2/model/dora_deployments_list_response.py b/datadog_api_client/v2/model/dora_deployments_list_response.py new file mode 100644 index 0000000000..4b876f1f27 --- /dev/null +++ b/datadog_api_client/v2/model/dora_deployments_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_deployment_object import DORADeploymentObject + +class DORADeploymentsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_deployment_object import DORADeploymentObject + return { + "data": ([DORADeploymentObject],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[DORADeploymentObject], UnsetType]=unset, **kwargs): + """ + Response for the list deployments endpoint. + + :param data: The list of DORA deployment events. + :type data: [DORADeploymentObject], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_failure_fetch_response.py b/datadog_api_client/v2/model/dora_failure_fetch_response.py new file mode 100644 index 0000000000..171c6edf45 --- /dev/null +++ b/datadog_api_client/v2/model/dora_failure_fetch_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_incident_object import DORAIncidentObject + +class DORAFailureFetchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_incident_object import DORAIncidentObject + return { + "data": (DORAIncidentObject,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DORAIncidentObject, UnsetType]=unset, **kwargs): + """ + Response for fetching a single incident event. + + :param data: A DORA incident event. + :type data: DORAIncidentObject, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_failure_request.py b/datadog_api_client/v2/model/dora_failure_request.py new file mode 100644 index 0000000000..88d09d72ec --- /dev/null +++ b/datadog_api_client/v2/model/dora_failure_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_failure_request_data import DORAFailureRequestData + +class DORAFailureRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_failure_request_data import DORAFailureRequestData + return { + "data": (DORAFailureRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DORAFailureRequestData, **kwargs): + """ + Request to create a DORA incident event. + + :param data: The JSON:API data. + :type data: DORAFailureRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dora_failure_request_attributes.py b/datadog_api_client/v2/model/dora_failure_request_attributes.py new file mode 100644 index 0000000000..baef850486 --- /dev/null +++ b/datadog_api_client/v2/model/dora_failure_request_attributes.py @@ -0,0 +1,118 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_git_info import DORAGitInfo + +class DORAFailureRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_git_info import DORAGitInfo + return { + "custom_tags": ([str],), + "env": (str,), + "finished_at": (int,), + "git": (DORAGitInfo,), + "id": (str,), + "name": (str,), + "services": ([str],), + "severity": (str,), + "started_at": (int,), + "team": (str,), + "version": (str,), + } + attribute_map = { + "custom_tags": "custom_tags", + "env": "env", + "finished_at": "finished_at", + "git": "git", + "id": "id", + "name": "name", + "services": "services", + "severity": "severity", + "started_at": "started_at", + "team": "team", + "version": "version", + } + + def __init__(self_, started_at: int, custom_tags: Union[List[str], none_type, UnsetType]=unset, env: Union[str, UnsetType]=unset, finished_at: Union[int, UnsetType]=unset, git: Union[DORAGitInfo, UnsetType]=unset, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, services: Union[List[str], UnsetType]=unset, severity: Union[str, UnsetType]=unset, team: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes to create a DORA incident event. + + :param custom_tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. Up to 100 may be added per event. + :type custom_tags: [str], none_type, optional + + :param env: Environment name that was impacted by the incident. + :type env: str, optional + + :param finished_at: Unix timestamp when the incident finished. It must be in nanoseconds, milliseconds, or seconds. + :type finished_at: int, optional + + :param git: Git info for DORA Metrics events. + :type git: DORAGitInfo, optional + + :param id: Incident ID. Must be 16-128 characters and contain only alphanumeric characters, hyphens, underscores, periods, and colons (a-z, A-Z, 0-9, -, _, ., :). + :type id: str, optional + + :param name: Incident name. + :type name: str, optional + + :param services: Service names impacted by the incident. If possible, use names registered in the Service Catalog. Required when the team field is not provided. + :type services: [str], optional + + :param severity: Incident severity. + :type severity: str, optional + + :param started_at: Unix timestamp when the incident started. It must be in nanoseconds, milliseconds, or seconds. + :type started_at: int + + :param team: Name of the team owning the services impacted. If possible, use team handles registered in Datadog. Required when the services field is not provided. + :type team: str, optional + + :param version: Version to correlate with `APM Deployment Tracking `_. + :type version: str, optional + """ + if custom_tags is not unset: + kwargs["custom_tags"] = custom_tags + if env is not unset: + kwargs["env"] = env + if finished_at is not unset: + kwargs["finished_at"] = finished_at + if git is not unset: + kwargs["git"] = git + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if services is not unset: + kwargs["services"] = services + if severity is not unset: + kwargs["severity"] = severity + if team is not unset: + kwargs["team"] = team + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.started_at = started_at diff --git a/datadog_api_client/v2/model/dora_failure_request_data.py b/datadog_api_client/v2/model/dora_failure_request_data.py new file mode 100644 index 0000000000..eab4f0348f --- /dev/null +++ b/datadog_api_client/v2/model/dora_failure_request_data.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_failure_request_attributes import DORAFailureRequestAttributes + +class DORAFailureRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_failure_request_attributes import DORAFailureRequestAttributes + return { + "attributes": (DORAFailureRequestAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: DORAFailureRequestAttributes, **kwargs): + """ + The JSON:API data. + + :param attributes: Attributes to create a DORA incident event. + :type attributes: DORAFailureRequestAttributes + """ + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/dora_failure_response.py b/datadog_api_client/v2/model/dora_failure_response.py new file mode 100644 index 0000000000..88699aa234 --- /dev/null +++ b/datadog_api_client/v2/model/dora_failure_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_failure_response_data import DORAFailureResponseData + +class DORAFailureResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_failure_response_data import DORAFailureResponseData + return { + "data": (DORAFailureResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DORAFailureResponseData, **kwargs): + """ + Response after receiving a DORA incident event. + + :param data: Response after receiving a DORA incident event. + :type data: DORAFailureResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dora_failure_response_data.py b/datadog_api_client/v2/model/dora_failure_response_data.py new file mode 100644 index 0000000000..e3ac461167 --- /dev/null +++ b/datadog_api_client/v2/model/dora_failure_response_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_failure_type import DORAFailureType + +class DORAFailureResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_failure_type import DORAFailureType + return { + "id": (str,), + "type": (DORAFailureType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: Union[DORAFailureType, UnsetType]=unset, **kwargs): + """ + Response after receiving a DORA incident event. + + :param id: The ID of the received DORA incident event. + :type id: str + + :param type: JSON:API type for DORA incident events. + :type type: DORAFailureType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/dora_failure_type.py b/datadog_api_client/v2/model/dora_failure_type.py new file mode 100644 index 0000000000..dab00e6b5c --- /dev/null +++ b/datadog_api_client/v2/model/dora_failure_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DORAFailureType(ModelSimple): + """ + JSON:API type for DORA incident events. + + :param value: If omitted defaults to "dora_failure". Must be one of ["dora_failure"]. + :type value: str + """ + + allowed_values = { + "dora_failure", + } + DORA_FAILURE: ClassVar["DORAFailureType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DORAFailureType.DORA_FAILURE = DORAFailureType("dora_failure") diff --git a/datadog_api_client/v2/model/dora_failures_list_response.py b/datadog_api_client/v2/model/dora_failures_list_response.py new file mode 100644 index 0000000000..5b2e5367ad --- /dev/null +++ b/datadog_api_client/v2/model/dora_failures_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_incident_object import DORAIncidentObject + +class DORAFailuresListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_incident_object import DORAIncidentObject + return { + "data": ([DORAIncidentObject],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[DORAIncidentObject], UnsetType]=unset, **kwargs): + """ + Response for the list incidents endpoint. + + :param data: The list of DORA incident events. + :type data: [DORAIncidentObject], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_git_info.py b/datadog_api_client/v2/model/dora_git_info.py new file mode 100644 index 0000000000..eaddfd3dc5 --- /dev/null +++ b/datadog_api_client/v2/model/dora_git_info.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DORAGitInfo(ModelNormal): + validations = { + "commit_sha": { + }, + } + @cached_property + def openapi_types(_): + return { + "commit_sha": (str,), + "repository_url": (str,), + } + attribute_map = { + "commit_sha": "commit_sha", + "repository_url": "repository_url", + } + + def __init__(self_, commit_sha: str, repository_url: str, **kwargs): + """ + Git info for DORA Metrics events. + + :param commit_sha: Git Commit SHA. + :type commit_sha: str + + :param repository_url: Git Repository URL + :type repository_url: str + """ + super().__init__(kwargs) + + + self_.commit_sha = commit_sha + self_.repository_url = repository_url diff --git a/datadog_api_client/v2/model/dora_git_info_response.py b/datadog_api_client/v2/model/dora_git_info_response.py new file mode 100644 index 0000000000..b063bf360f --- /dev/null +++ b/datadog_api_client/v2/model/dora_git_info_response.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DORAGitInfoResponse(ModelNormal): + validations = { + "commit_sha": { + }, + } + @cached_property + def openapi_types(_): + return { + "commit_sha": (str,), + "repository_id": (str,), + } + attribute_map = { + "commit_sha": "commit_sha", + "repository_id": "repository_id", + } + + def __init__(self_, commit_sha: str, repository_id: str, **kwargs): + """ + Git info returned by DORA Metrics events. + + :param commit_sha: Git Commit SHA. + :type commit_sha: str + + :param repository_id: Git Repository ID + :type repository_id: str + """ + super().__init__(kwargs) + + + self_.commit_sha = commit_sha + self_.repository_id = repository_id diff --git a/datadog_api_client/v2/model/dora_incident_object.py b/datadog_api_client/v2/model/dora_incident_object.py new file mode 100644 index 0000000000..3be8f19ccb --- /dev/null +++ b/datadog_api_client/v2/model/dora_incident_object.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_incident_object_attributes import DORAIncidentObjectAttributes + from datadog_api_client.v2.model.dora_failure_type import DORAFailureType + +class DORAIncidentObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_incident_object_attributes import DORAIncidentObjectAttributes + from datadog_api_client.v2.model.dora_failure_type import DORAFailureType + return { + "attributes": (DORAIncidentObjectAttributes,), + "id": (str,), + "type": (DORAFailureType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[DORAIncidentObjectAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[DORAFailureType, UnsetType]=unset, **kwargs): + """ + A DORA incident event. + + :param attributes: The attributes of the incident event. + :type attributes: DORAIncidentObjectAttributes, optional + + :param id: The ID of the incident event. + :type id: str, optional + + :param type: JSON:API type for DORA incident events. + :type type: DORAFailureType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_incident_object_attributes.py b/datadog_api_client/v2/model/dora_incident_object_attributes.py new file mode 100644 index 0000000000..43c010be03 --- /dev/null +++ b/datadog_api_client/v2/model/dora_incident_object_attributes.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_git_info import DORAGitInfo + +class DORAIncidentObjectAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_git_info import DORAGitInfo + return { + "custom_tags": ([str],), + "env": (str,), + "finished_at": (datetime,), + "git": (DORAGitInfo,), + "name": (str,), + "services": ([str],), + "severity": (str,), + "started_at": (datetime,), + "team": (str,), + "version": (str,), + } + attribute_map = { + "custom_tags": "custom_tags", + "env": "env", + "finished_at": "finished_at", + "git": "git", + "name": "name", + "services": "services", + "severity": "severity", + "started_at": "started_at", + "team": "team", + "version": "version", + } + + def __init__(self_, custom_tags: Union[List[str], none_type, UnsetType]=unset, env: Union[str, UnsetType]=unset, finished_at: Union[datetime, UnsetType]=unset, git: Union[DORAGitInfo, UnsetType]=unset, name: Union[str, UnsetType]=unset, services: Union[List[str], UnsetType]=unset, severity: Union[str, UnsetType]=unset, started_at: Union[datetime, UnsetType]=unset, team: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of the incident event. + + :param custom_tags: A list of user-defined tags. The tags must follow the ``key:value`` pattern. Up to 100 may be added per event. + :type custom_tags: [str], none_type, optional + + :param env: Environment name that was impacted by the incident. + :type env: str, optional + + :param finished_at: The time when the incident finished. + :type finished_at: datetime, optional + + :param git: Git info for DORA Metrics events. + :type git: DORAGitInfo, optional + + :param name: Incident name. + :type name: str, optional + + :param services: Service names impacted by the incident. + :type services: [str], optional + + :param severity: Incident severity. + :type severity: str, optional + + :param started_at: The time when the incident started. + :type started_at: datetime, optional + + :param team: Name of the team owning the services impacted. + :type team: str, optional + + :param version: Version to correlate with APM Deployment Tracking. + :type version: str, optional + """ + if custom_tags is not unset: + kwargs["custom_tags"] = custom_tags + if env is not unset: + kwargs["env"] = env + if finished_at is not unset: + kwargs["finished_at"] = finished_at + if git is not unset: + kwargs["git"] = git + if name is not unset: + kwargs["name"] = name + if services is not unset: + kwargs["services"] = services + if severity is not unset: + kwargs["severity"] = severity + if started_at is not unset: + kwargs["started_at"] = started_at + if team is not unset: + kwargs["team"] = team + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_list_deployments_request.py b/datadog_api_client/v2/model/dora_list_deployments_request.py new file mode 100644 index 0000000000..37a085c530 --- /dev/null +++ b/datadog_api_client/v2/model/dora_list_deployments_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_list_deployments_request_data import DORAListDeploymentsRequestData + +class DORAListDeploymentsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_list_deployments_request_data import DORAListDeploymentsRequestData + return { + "data": (DORAListDeploymentsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DORAListDeploymentsRequestData, **kwargs): + """ + Request to get a list of deployments. + + :param data: The JSON:API data. + :type data: DORAListDeploymentsRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dora_list_deployments_request_attributes.py b/datadog_api_client/v2/model/dora_list_deployments_request_attributes.py new file mode 100644 index 0000000000..516555dbf3 --- /dev/null +++ b/datadog_api_client/v2/model/dora_list_deployments_request_attributes.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DORAListDeploymentsRequestAttributes(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "_from": (datetime,), + "limit": (int,), + "query": (str,), + "sort": (str,), + "to": (datetime,), + } + attribute_map = { + "_from": "from", + "limit": "limit", + "query": "query", + "sort": "sort", + "to": "to", + } + + def __init__(self_, _from: Union[datetime, UnsetType]=unset, limit: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, to: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes to get a list of deployments. + + :param _from: Minimum timestamp for requested events. + :type _from: datetime, optional + + :param limit: Maximum number of events in the response. + :type limit: int, optional + + :param query: Search query with event platform syntax. + :type query: str, optional + + :param sort: Sort order (prefixed with ``-`` for descending). + :type sort: str, optional + + :param to: Maximum timestamp for requested events. + :type to: datetime, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if limit is not unset: + kwargs["limit"] = limit + if query is not unset: + kwargs["query"] = query + if sort is not unset: + kwargs["sort"] = sort + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_list_deployments_request_data.py b/datadog_api_client/v2/model/dora_list_deployments_request_data.py new file mode 100644 index 0000000000..d024291854 --- /dev/null +++ b/datadog_api_client/v2/model/dora_list_deployments_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_list_deployments_request_attributes import DORAListDeploymentsRequestAttributes + from datadog_api_client.v2.model.dora_list_deployments_request_data_type import DORAListDeploymentsRequestDataType + +class DORAListDeploymentsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_list_deployments_request_attributes import DORAListDeploymentsRequestAttributes + from datadog_api_client.v2.model.dora_list_deployments_request_data_type import DORAListDeploymentsRequestDataType + return { + "attributes": (DORAListDeploymentsRequestAttributes,), + "type": (DORAListDeploymentsRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DORAListDeploymentsRequestAttributes, type: Union[DORAListDeploymentsRequestDataType, UnsetType]=unset, **kwargs): + """ + The JSON:API data. + + :param attributes: Attributes to get a list of deployments. + :type attributes: DORAListDeploymentsRequestAttributes + + :param type: The definition of ``DORAListDeploymentsRequestDataType`` object. + :type type: DORAListDeploymentsRequestDataType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/dora_list_deployments_request_data_type.py b/datadog_api_client/v2/model/dora_list_deployments_request_data_type.py new file mode 100644 index 0000000000..18529a9f07 --- /dev/null +++ b/datadog_api_client/v2/model/dora_list_deployments_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DORAListDeploymentsRequestDataType(ModelSimple): + """ + The definition of `DORAListDeploymentsRequestDataType` object. + + :param value: If omitted defaults to "dora_deployments_list_request". Must be one of ["dora_deployments_list_request"]. + :type value: str + """ + + allowed_values = { + "dora_deployments_list_request", + } + DORA_DEPLOYMENTS_LIST_REQUEST: ClassVar["DORAListDeploymentsRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DORAListDeploymentsRequestDataType.DORA_DEPLOYMENTS_LIST_REQUEST = DORAListDeploymentsRequestDataType("dora_deployments_list_request") diff --git a/datadog_api_client/v2/model/dora_list_failures_request.py b/datadog_api_client/v2/model/dora_list_failures_request.py new file mode 100644 index 0000000000..b52a0393ee --- /dev/null +++ b/datadog_api_client/v2/model/dora_list_failures_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_list_failures_request_data import DORAListFailuresRequestData + +class DORAListFailuresRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_list_failures_request_data import DORAListFailuresRequestData + return { + "data": (DORAListFailuresRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DORAListFailuresRequestData, **kwargs): + """ + Request to get a list of incidents. + + :param data: The JSON:API data. + :type data: DORAListFailuresRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/dora_list_failures_request_attributes.py b/datadog_api_client/v2/model/dora_list_failures_request_attributes.py new file mode 100644 index 0000000000..948d765af0 --- /dev/null +++ b/datadog_api_client/v2/model/dora_list_failures_request_attributes.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DORAListFailuresRequestAttributes(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "_from": (datetime,), + "limit": (int,), + "query": (str,), + "sort": (str,), + "to": (datetime,), + } + attribute_map = { + "_from": "from", + "limit": "limit", + "query": "query", + "sort": "sort", + "to": "to", + } + + def __init__(self_, _from: Union[datetime, UnsetType]=unset, limit: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, sort: Union[str, UnsetType]=unset, to: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes to get a list of incidents. + + :param _from: Minimum timestamp for requested events. + :type _from: datetime, optional + + :param limit: Maximum number of events in the response. + :type limit: int, optional + + :param query: Search query with event platform syntax. + :type query: str, optional + + :param sort: Sort order (prefixed with ``-`` for descending). + :type sort: str, optional + + :param to: Maximum timestamp for requested events. + :type to: datetime, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if limit is not unset: + kwargs["limit"] = limit + if query is not unset: + kwargs["query"] = query + if sort is not unset: + kwargs["sort"] = sort + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/dora_list_failures_request_data.py b/datadog_api_client/v2/model/dora_list_failures_request_data.py new file mode 100644 index 0000000000..bec8fe88cb --- /dev/null +++ b/datadog_api_client/v2/model/dora_list_failures_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dora_list_failures_request_attributes import DORAListFailuresRequestAttributes + from datadog_api_client.v2.model.dora_list_failures_request_data_type import DORAListFailuresRequestDataType + +class DORAListFailuresRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dora_list_failures_request_attributes import DORAListFailuresRequestAttributes + from datadog_api_client.v2.model.dora_list_failures_request_data_type import DORAListFailuresRequestDataType + return { + "attributes": (DORAListFailuresRequestAttributes,), + "type": (DORAListFailuresRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DORAListFailuresRequestAttributes, type: Union[DORAListFailuresRequestDataType, UnsetType]=unset, **kwargs): + """ + The JSON:API data. + + :param attributes: Attributes to get a list of incidents. + :type attributes: DORAListFailuresRequestAttributes + + :param type: The definition of ``DORAListFailuresRequestDataType`` object. + :type type: DORAListFailuresRequestDataType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/dora_list_failures_request_data_type.py b/datadog_api_client/v2/model/dora_list_failures_request_data_type.py new file mode 100644 index 0000000000..22d194cbf7 --- /dev/null +++ b/datadog_api_client/v2/model/dora_list_failures_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DORAListFailuresRequestDataType(ModelSimple): + """ + The definition of `DORAListFailuresRequestDataType` object. + + :param value: If omitted defaults to "dora_failures_list_request". Must be one of ["dora_failures_list_request"]. + :type value: str + """ + + allowed_values = { + "dora_failures_list_request", + } + DORA_FAILURES_LIST_REQUEST: ClassVar["DORAListFailuresRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DORAListFailuresRequestDataType.DORA_FAILURES_LIST_REQUEST = DORAListFailuresRequestDataType("dora_failures_list_request") diff --git a/datadog_api_client/v2/model/downtime_create_request.py b/datadog_api_client/v2/model/downtime_create_request.py new file mode 100644 index 0000000000..29b158d1ac --- /dev/null +++ b/datadog_api_client/v2/model/downtime_create_request.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_create_request_data import DowntimeCreateRequestData + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_create_request import DowntimeScheduleRecurrencesCreateRequest + from datadog_api_client.v2.model.downtime_schedule_one_time_create_update_request import DowntimeScheduleOneTimeCreateUpdateRequest + +class DowntimeCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_create_request_data import DowntimeCreateRequestData + return { + "data": (DowntimeCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DowntimeCreateRequestData, **kwargs): + """ + Request for creating a downtime. + + :param data: Object to create a downtime. + :type data: DowntimeCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/downtime_create_request_attributes.py b/datadog_api_client/v2/model/downtime_create_request_attributes.py new file mode 100644 index 0000000000..189d909167 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_create_request_attributes.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_monitor_identifier import DowntimeMonitorIdentifier + from datadog_api_client.v2.model.downtime_notify_end_state_types import DowntimeNotifyEndStateTypes + from datadog_api_client.v2.model.downtime_notify_end_state_actions import DowntimeNotifyEndStateActions + from datadog_api_client.v2.model.downtime_schedule_create_request import DowntimeScheduleCreateRequest + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_create_request import DowntimeScheduleRecurrencesCreateRequest + from datadog_api_client.v2.model.downtime_schedule_one_time_create_update_request import DowntimeScheduleOneTimeCreateUpdateRequest + +class DowntimeCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_monitor_identifier import DowntimeMonitorIdentifier + from datadog_api_client.v2.model.downtime_notify_end_state_types import DowntimeNotifyEndStateTypes + from datadog_api_client.v2.model.downtime_notify_end_state_actions import DowntimeNotifyEndStateActions + from datadog_api_client.v2.model.downtime_schedule_create_request import DowntimeScheduleCreateRequest + return { + "display_timezone": (str,), + "message": (str,), + "monitor_identifier": (DowntimeMonitorIdentifier,), + "mute_first_recovery_notification": (bool,), + "notify_end_states": ([DowntimeNotifyEndStateTypes],), + "notify_end_types": ([DowntimeNotifyEndStateActions],), + "schedule": (DowntimeScheduleCreateRequest,), + "scope": (str,), + } + attribute_map = { + "display_timezone": "display_timezone", + "message": "message", + "monitor_identifier": "monitor_identifier", + "mute_first_recovery_notification": "mute_first_recovery_notification", + "notify_end_states": "notify_end_states", + "notify_end_types": "notify_end_types", + "schedule": "schedule", + "scope": "scope", + } + + def __init__(self_, monitor_identifier: Union[DowntimeMonitorIdentifier, DowntimeMonitorIdentifierId, DowntimeMonitorIdentifierTags], scope: str, display_timezone: Union[str, none_type, UnsetType]=unset, message: Union[str, none_type, UnsetType]=unset, mute_first_recovery_notification: Union[bool, UnsetType]=unset, notify_end_states: Union[List[DowntimeNotifyEndStateTypes], UnsetType]=unset, notify_end_types: Union[List[DowntimeNotifyEndStateActions], UnsetType]=unset, schedule: Union[DowntimeScheduleCreateRequest, DowntimeScheduleRecurrencesCreateRequest, DowntimeScheduleOneTimeCreateUpdateRequest, UnsetType]=unset, **kwargs): + """ + Downtime details. + + :param display_timezone: The timezone in which to display the downtime's start and end times in Datadog applications. This is not used + as an offset for scheduling. + :type display_timezone: str, none_type, optional + + :param message: A message to include with notifications for this downtime. Email notifications can be sent to specific users + by using the same ``@username`` notation as events. + :type message: str, none_type, optional + + :param monitor_identifier: Monitor identifier for the downtime. + :type monitor_identifier: DowntimeMonitorIdentifier + + :param mute_first_recovery_notification: If the first recovery notification during a downtime should be muted. + :type mute_first_recovery_notification: bool, optional + + :param notify_end_states: States that will trigger a monitor notification when the ``notify_end_types`` action occurs. + :type notify_end_states: [DowntimeNotifyEndStateTypes], optional + + :param notify_end_types: Actions that will trigger a monitor notification if the downtime is in the ``notify_end_types`` state. + :type notify_end_types: [DowntimeNotifyEndStateActions], optional + + :param schedule: Schedule for the downtime. + :type schedule: DowntimeScheduleCreateRequest, optional + + :param scope: The scope to which the downtime applies. Must follow the `common search syntax `_. + :type scope: str + """ + if display_timezone is not unset: + kwargs["display_timezone"] = display_timezone + if message is not unset: + kwargs["message"] = message + if mute_first_recovery_notification is not unset: + kwargs["mute_first_recovery_notification"] = mute_first_recovery_notification + if notify_end_states is not unset: + kwargs["notify_end_states"] = notify_end_states + if notify_end_types is not unset: + kwargs["notify_end_types"] = notify_end_types + if schedule is not unset: + kwargs["schedule"] = schedule + super().__init__(kwargs) + + + self_.monitor_identifier = monitor_identifier + self_.scope = scope diff --git a/datadog_api_client/v2/model/downtime_create_request_data.py b/datadog_api_client/v2/model/downtime_create_request_data.py new file mode 100644 index 0000000000..0ea548f6d8 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_create_request_attributes import DowntimeCreateRequestAttributes + from datadog_api_client.v2.model.downtime_resource_type import DowntimeResourceType + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_create_request import DowntimeScheduleRecurrencesCreateRequest + from datadog_api_client.v2.model.downtime_schedule_one_time_create_update_request import DowntimeScheduleOneTimeCreateUpdateRequest + +class DowntimeCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_create_request_attributes import DowntimeCreateRequestAttributes + from datadog_api_client.v2.model.downtime_resource_type import DowntimeResourceType + return { + "attributes": (DowntimeCreateRequestAttributes,), + "type": (DowntimeResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DowntimeCreateRequestAttributes, type: DowntimeResourceType, **kwargs): + """ + Object to create a downtime. + + :param attributes: Downtime details. + :type attributes: DowntimeCreateRequestAttributes + + :param type: Downtime resource type. + :type type: DowntimeResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/downtime_included_monitor_type.py b/datadog_api_client/v2/model/downtime_included_monitor_type.py new file mode 100644 index 0000000000..7b81b91df1 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_included_monitor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DowntimeIncludedMonitorType(ModelSimple): + """ + Monitor resource type. + + :param value: If omitted defaults to "monitors". Must be one of ["monitors"]. + :type value: str + """ + + allowed_values = { + "monitors", + } + MONITORS: ClassVar["DowntimeIncludedMonitorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DowntimeIncludedMonitorType.MONITORS = DowntimeIncludedMonitorType("monitors") diff --git a/datadog_api_client/v2/model/downtime_meta.py b/datadog_api_client/v2/model/downtime_meta.py new file mode 100644 index 0000000000..acbc6b0c7e --- /dev/null +++ b/datadog_api_client/v2/model/downtime_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_meta_page import DowntimeMetaPage + +class DowntimeMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_meta_page import DowntimeMetaPage + return { + "page": (DowntimeMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[DowntimeMetaPage, UnsetType]=unset, **kwargs): + """ + Pagination metadata returned by the API. + + :param page: Object containing the total filtered count. + :type page: DowntimeMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_meta_page.py b/datadog_api_client/v2/model/downtime_meta_page.py new file mode 100644 index 0000000000..542fbc6418 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_filtered_count": (int,), + } + attribute_map = { + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Object containing the total filtered count. + + :param total_filtered_count: Total count of elements matched by the filter. + :type total_filtered_count: int, optional + """ + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_monitor_identifier.py b/datadog_api_client/v2/model/downtime_monitor_identifier.py new file mode 100644 index 0000000000..44bbd2f634 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_monitor_identifier.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeMonitorIdentifier(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Monitor identifier for the downtime. + + :param monitor_id: ID of the monitor to prevent notifications. + :type monitor_id: int + + :param monitor_tags: A list of monitor tags. For example, tags that are applied directly to monitors, + not tags that are used in monitor queries (which are filtered by the scope parameter), to which the downtime applies. + The resulting downtime applies to monitors that match **all** provided monitor tags. Setting `monitor_tags` + to `[*]` configures the downtime to mute all monitors for the given scope. + :type monitor_tags: [str] + """ + 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.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + return { + "oneOf": [ + DowntimeMonitorIdentifierId, + DowntimeMonitorIdentifierTags, + ], + } diff --git a/datadog_api_client/v2/model/downtime_monitor_identifier_id.py b/datadog_api_client/v2/model/downtime_monitor_identifier_id.py new file mode 100644 index 0000000000..5af8ec8d79 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_monitor_identifier_id.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeMonitorIdentifierId(ModelNormal): + @cached_property + def openapi_types(_): + return { + "monitor_id": (int,), + } + attribute_map = { + "monitor_id": "monitor_id", + } + + def __init__(self_, monitor_id: int, **kwargs): + """ + Object of the monitor identifier. + + :param monitor_id: ID of the monitor to prevent notifications. + :type monitor_id: int + """ + super().__init__(kwargs) + + + self_.monitor_id = monitor_id diff --git a/datadog_api_client/v2/model/downtime_monitor_identifier_tags.py b/datadog_api_client/v2/model/downtime_monitor_identifier_tags.py new file mode 100644 index 0000000000..cc3bc86f78 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_monitor_identifier_tags.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeMonitorIdentifierTags(ModelNormal): + validations = { + "monitor_tags": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "monitor_tags": ([str],), + } + attribute_map = { + "monitor_tags": "monitor_tags", + } + + def __init__(self_, monitor_tags: List[str], **kwargs): + """ + Object of the monitor tags. + + :param monitor_tags: A list of monitor tags. For example, tags that are applied directly to monitors, + not tags that are used in monitor queries (which are filtered by the scope parameter), to which the downtime applies. + The resulting downtime applies to monitors that match **all** provided monitor tags. Setting ``monitor_tags`` + to ``[*]`` configures the downtime to mute all monitors for the given scope. + :type monitor_tags: [str] + """ + super().__init__(kwargs) + + + self_.monitor_tags = monitor_tags diff --git a/datadog_api_client/v2/model/downtime_monitor_included_attributes.py b/datadog_api_client/v2/model/downtime_monitor_included_attributes.py new file mode 100644 index 0000000000..7d97ecd32d --- /dev/null +++ b/datadog_api_client/v2/model/downtime_monitor_included_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeMonitorIncludedAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the monitor identified by the downtime. + + :param name: The name of the monitor identified by the downtime. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_monitor_included_item.py b/datadog_api_client/v2/model/downtime_monitor_included_item.py new file mode 100644 index 0000000000..6901d3d559 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_monitor_included_item.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_monitor_included_attributes import DowntimeMonitorIncludedAttributes + from datadog_api_client.v2.model.downtime_included_monitor_type import DowntimeIncludedMonitorType + +class DowntimeMonitorIncludedItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_monitor_included_attributes import DowntimeMonitorIncludedAttributes + from datadog_api_client.v2.model.downtime_included_monitor_type import DowntimeIncludedMonitorType + return { + "attributes": (DowntimeMonitorIncludedAttributes,), + "id": (int,), + "type": (DowntimeIncludedMonitorType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[DowntimeMonitorIncludedAttributes, UnsetType]=unset, id: Union[int, UnsetType]=unset, type: Union[DowntimeIncludedMonitorType, UnsetType]=unset, **kwargs): + """ + Information about the monitor identified by the downtime. + + :param attributes: Attributes of the monitor identified by the downtime. + :type attributes: DowntimeMonitorIncludedAttributes, optional + + :param id: ID of the monitor identified by the downtime. + :type id: int, optional + + :param type: Monitor resource type. + :type type: DowntimeIncludedMonitorType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_notify_end_state_actions.py b/datadog_api_client/v2/model/downtime_notify_end_state_actions.py new file mode 100644 index 0000000000..028f9036db --- /dev/null +++ b/datadog_api_client/v2/model/downtime_notify_end_state_actions.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DowntimeNotifyEndStateActions(ModelSimple): + """ + Action that will trigger a monitor notification if the downtime is in the `notify_end_types` state. + + :param value: Must be one of ["canceled", "expired"]. + :type value: str + """ + + allowed_values = { + "canceled", + "expired", + } + CANCELED: ClassVar["DowntimeNotifyEndStateActions"] + EXPIRED: ClassVar["DowntimeNotifyEndStateActions"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DowntimeNotifyEndStateActions.CANCELED = DowntimeNotifyEndStateActions("canceled") +DowntimeNotifyEndStateActions.EXPIRED = DowntimeNotifyEndStateActions("expired") diff --git a/datadog_api_client/v2/model/downtime_notify_end_state_types.py b/datadog_api_client/v2/model/downtime_notify_end_state_types.py new file mode 100644 index 0000000000..24d925b653 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_notify_end_state_types.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DowntimeNotifyEndStateTypes(ModelSimple): + """ + State that will trigger a monitor notification when the `notify_end_types` action occurs. + + :param value: Must be one of ["alert", "no data", "warn"]. + :type value: str + """ + + allowed_values = { + "alert", + "no data", + "warn", + } + ALERT: ClassVar["DowntimeNotifyEndStateTypes"] + NO_DATA: ClassVar["DowntimeNotifyEndStateTypes"] + WARN: ClassVar["DowntimeNotifyEndStateTypes"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DowntimeNotifyEndStateTypes.ALERT = DowntimeNotifyEndStateTypes("alert") +DowntimeNotifyEndStateTypes.NO_DATA = DowntimeNotifyEndStateTypes("no data") +DowntimeNotifyEndStateTypes.WARN = DowntimeNotifyEndStateTypes("warn") diff --git a/datadog_api_client/v2/model/downtime_relationships.py b/datadog_api_client/v2/model/downtime_relationships.py new file mode 100644 index 0000000000..aa6b14423a --- /dev/null +++ b/datadog_api_client/v2/model/downtime_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_relationships_created_by import DowntimeRelationshipsCreatedBy + from datadog_api_client.v2.model.downtime_relationships_monitor import DowntimeRelationshipsMonitor + +class DowntimeRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_relationships_created_by import DowntimeRelationshipsCreatedBy + from datadog_api_client.v2.model.downtime_relationships_monitor import DowntimeRelationshipsMonitor + return { + "created_by": (DowntimeRelationshipsCreatedBy,), + "monitor": (DowntimeRelationshipsMonitor,), + } + attribute_map = { + "created_by": "created_by", + "monitor": "monitor", + } + + def __init__(self_, created_by: Union[DowntimeRelationshipsCreatedBy, UnsetType]=unset, monitor: Union[DowntimeRelationshipsMonitor, UnsetType]=unset, **kwargs): + """ + All relationships associated with downtime. + + :param created_by: The user who created the downtime. + :type created_by: DowntimeRelationshipsCreatedBy, optional + + :param monitor: The monitor identified by the downtime. + :type monitor: DowntimeRelationshipsMonitor, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if monitor is not unset: + kwargs["monitor"] = monitor + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_relationships_created_by.py b/datadog_api_client/v2/model/downtime_relationships_created_by.py new file mode 100644 index 0000000000..4946874f25 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_relationships_created_by.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_relationships_created_by_data import DowntimeRelationshipsCreatedByData + +class DowntimeRelationshipsCreatedBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_relationships_created_by_data import DowntimeRelationshipsCreatedByData + return { + "data": (DowntimeRelationshipsCreatedByData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DowntimeRelationshipsCreatedByData, none_type, UnsetType]=unset, **kwargs): + """ + The user who created the downtime. + + :param data: Data for the user who created the downtime. + :type data: DowntimeRelationshipsCreatedByData, none_type, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_relationships_created_by_data.py b/datadog_api_client/v2/model/downtime_relationships_created_by_data.py new file mode 100644 index 0000000000..9589701a3a --- /dev/null +++ b/datadog_api_client/v2/model/downtime_relationships_created_by_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.users_type import UsersType + +class DowntimeRelationshipsCreatedByData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.users_type import UsersType + return { + "id": (str,), + "type": (UsersType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[UsersType, UnsetType]=unset, **kwargs): + """ + Data for the user who created the downtime. + + :param id: User ID of the downtime creator. + :type id: str, optional + + :param type: Users resource type. + :type type: UsersType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_relationships_monitor.py b/datadog_api_client/v2/model/downtime_relationships_monitor.py new file mode 100644 index 0000000000..ee53e283ae --- /dev/null +++ b/datadog_api_client/v2/model/downtime_relationships_monitor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_relationships_monitor_data import DowntimeRelationshipsMonitorData + +class DowntimeRelationshipsMonitor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_relationships_monitor_data import DowntimeRelationshipsMonitorData + return { + "data": (DowntimeRelationshipsMonitorData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[DowntimeRelationshipsMonitorData, none_type, UnsetType]=unset, **kwargs): + """ + The monitor identified by the downtime. + + :param data: Data for the monitor. + :type data: DowntimeRelationshipsMonitorData, none_type, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_relationships_monitor_data.py b/datadog_api_client/v2/model/downtime_relationships_monitor_data.py new file mode 100644 index 0000000000..fa89840b13 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_relationships_monitor_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_included_monitor_type import DowntimeIncludedMonitorType + +class DowntimeRelationshipsMonitorData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_included_monitor_type import DowntimeIncludedMonitorType + return { + "id": (str,), + "type": (DowntimeIncludedMonitorType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[DowntimeIncludedMonitorType, UnsetType]=unset, **kwargs): + """ + Data for the monitor. + + :param id: Monitor ID of the downtime. + :type id: str, optional + + :param type: Monitor resource type. + :type type: DowntimeIncludedMonitorType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_resource_type.py b/datadog_api_client/v2/model/downtime_resource_type.py new file mode 100644 index 0000000000..eef355189a --- /dev/null +++ b/datadog_api_client/v2/model/downtime_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DowntimeResourceType(ModelSimple): + """ + Downtime resource type. + + :param value: If omitted defaults to "downtime". Must be one of ["downtime"]. + :type value: str + """ + + allowed_values = { + "downtime", + } + DOWNTIME: ClassVar["DowntimeResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DowntimeResourceType.DOWNTIME = DowntimeResourceType("downtime") diff --git a/datadog_api_client/v2/model/downtime_response.py b/datadog_api_client/v2/model/downtime_response.py new file mode 100644 index 0000000000..93c3bc8b64 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_response_data import DowntimeResponseData + from datadog_api_client.v2.model.downtime_response_included_item import DowntimeResponseIncludedItem + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_response import DowntimeScheduleRecurrencesResponse + from datadog_api_client.v2.model.downtime_schedule_one_time_response import DowntimeScheduleOneTimeResponse + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.downtime_monitor_included_item import DowntimeMonitorIncludedItem + +class DowntimeResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_response_data import DowntimeResponseData + from datadog_api_client.v2.model.downtime_response_included_item import DowntimeResponseIncludedItem + return { + "data": (DowntimeResponseData,), + "included": ([DowntimeResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[DowntimeResponseData, UnsetType]=unset, included: Union[List[Union[DowntimeResponseIncludedItem, User, DowntimeMonitorIncludedItem]], UnsetType]=unset, **kwargs): + """ + Downtiming gives you greater control over monitor notifications by + allowing you to globally exclude scopes from alerting. + Downtime settings, which can be scheduled with start and end times, + prevent all alerting related to specified Datadog tags. + + :param data: Downtime data. + :type data: DowntimeResponseData, optional + + :param included: Array of objects related to the downtime that the user requested. + :type included: [DowntimeResponseIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_response_attributes.py b/datadog_api_client/v2/model/downtime_response_attributes.py new file mode 100644 index 0000000000..0e2515827b --- /dev/null +++ b/datadog_api_client/v2/model/downtime_response_attributes.py @@ -0,0 +1,142 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_monitor_identifier import DowntimeMonitorIdentifier + from datadog_api_client.v2.model.downtime_notify_end_state_types import DowntimeNotifyEndStateTypes + from datadog_api_client.v2.model.downtime_notify_end_state_actions import DowntimeNotifyEndStateActions + from datadog_api_client.v2.model.downtime_schedule_response import DowntimeScheduleResponse + from datadog_api_client.v2.model.downtime_status import DowntimeStatus + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_response import DowntimeScheduleRecurrencesResponse + from datadog_api_client.v2.model.downtime_schedule_one_time_response import DowntimeScheduleOneTimeResponse + +class DowntimeResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_monitor_identifier import DowntimeMonitorIdentifier + from datadog_api_client.v2.model.downtime_notify_end_state_types import DowntimeNotifyEndStateTypes + from datadog_api_client.v2.model.downtime_notify_end_state_actions import DowntimeNotifyEndStateActions + from datadog_api_client.v2.model.downtime_schedule_response import DowntimeScheduleResponse + from datadog_api_client.v2.model.downtime_status import DowntimeStatus + return { + "canceled": (datetime, none_type), + "created": (datetime,), + "display_timezone": (str,), + "message": (str,), + "modified": (datetime,), + "monitor_identifier": (DowntimeMonitorIdentifier,), + "mute_first_recovery_notification": (bool,), + "notify_end_states": ([DowntimeNotifyEndStateTypes],), + "notify_end_types": ([DowntimeNotifyEndStateActions],), + "schedule": (DowntimeScheduleResponse,), + "scope": (str,), + "status": (DowntimeStatus,), + } + attribute_map = { + "canceled": "canceled", + "created": "created", + "display_timezone": "display_timezone", + "message": "message", + "modified": "modified", + "monitor_identifier": "monitor_identifier", + "mute_first_recovery_notification": "mute_first_recovery_notification", + "notify_end_states": "notify_end_states", + "notify_end_types": "notify_end_types", + "schedule": "schedule", + "scope": "scope", + "status": "status", + } + + def __init__(self_, canceled: Union[datetime, none_type, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, display_timezone: Union[str, none_type, UnsetType]=unset, message: Union[str, none_type, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, monitor_identifier: Union[DowntimeMonitorIdentifier, DowntimeMonitorIdentifierId, DowntimeMonitorIdentifierTags, UnsetType]=unset, mute_first_recovery_notification: Union[bool, UnsetType]=unset, notify_end_states: Union[List[DowntimeNotifyEndStateTypes], UnsetType]=unset, notify_end_types: Union[List[DowntimeNotifyEndStateActions], UnsetType]=unset, schedule: Union[DowntimeScheduleResponse, DowntimeScheduleRecurrencesResponse, DowntimeScheduleOneTimeResponse, UnsetType]=unset, scope: Union[str, UnsetType]=unset, status: Union[DowntimeStatus, UnsetType]=unset, **kwargs): + """ + Downtime details. + + :param canceled: Time that the downtime was canceled. + :type canceled: datetime, none_type, optional + + :param created: Creation time of the downtime. + :type created: datetime, optional + + :param display_timezone: The timezone in which to display the downtime's start and end times in Datadog applications. This is not used + as an offset for scheduling. + :type display_timezone: str, none_type, optional + + :param message: A message to include with notifications for this downtime. Email notifications can be sent to specific users + by using the same ``@username`` notation as events. + :type message: str, none_type, optional + + :param modified: Time that the downtime was last modified. + :type modified: datetime, optional + + :param monitor_identifier: Monitor identifier for the downtime. + :type monitor_identifier: DowntimeMonitorIdentifier, optional + + :param mute_first_recovery_notification: If the first recovery notification during a downtime should be muted. + :type mute_first_recovery_notification: bool, optional + + :param notify_end_states: States that will trigger a monitor notification when the ``notify_end_types`` action occurs. + :type notify_end_states: [DowntimeNotifyEndStateTypes], optional + + :param notify_end_types: Actions that will trigger a monitor notification if the downtime is in the ``notify_end_types`` state. + :type notify_end_types: [DowntimeNotifyEndStateActions], optional + + :param schedule: The schedule that defines when the monitor starts, stops, and recurs. There are two types of schedules: + one-time and recurring. Recurring schedules may have up to five RRULE-based recurrences. If no schedules are + provided, the downtime will begin immediately and never end. + :type schedule: DowntimeScheduleResponse, optional + + :param scope: The scope to which the downtime applies. Must follow the `common search syntax `_. + :type scope: str, optional + + :param status: The current status of the downtime. + :type status: DowntimeStatus, optional + """ + if canceled is not unset: + kwargs["canceled"] = canceled + if created is not unset: + kwargs["created"] = created + if display_timezone is not unset: + kwargs["display_timezone"] = display_timezone + if message is not unset: + kwargs["message"] = message + if modified is not unset: + kwargs["modified"] = modified + if monitor_identifier is not unset: + kwargs["monitor_identifier"] = monitor_identifier + if mute_first_recovery_notification is not unset: + kwargs["mute_first_recovery_notification"] = mute_first_recovery_notification + if notify_end_states is not unset: + kwargs["notify_end_states"] = notify_end_states + if notify_end_types is not unset: + kwargs["notify_end_types"] = notify_end_types + if schedule is not unset: + kwargs["schedule"] = schedule + if scope is not unset: + kwargs["scope"] = scope + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_response_data.py b/datadog_api_client/v2/model/downtime_response_data.py new file mode 100644 index 0000000000..f7a24fcf7c --- /dev/null +++ b/datadog_api_client/v2/model/downtime_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_response_attributes import DowntimeResponseAttributes + from datadog_api_client.v2.model.downtime_relationships import DowntimeRelationships + from datadog_api_client.v2.model.downtime_resource_type import DowntimeResourceType + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_response import DowntimeScheduleRecurrencesResponse + from datadog_api_client.v2.model.downtime_schedule_one_time_response import DowntimeScheduleOneTimeResponse + +class DowntimeResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_response_attributes import DowntimeResponseAttributes + from datadog_api_client.v2.model.downtime_relationships import DowntimeRelationships + from datadog_api_client.v2.model.downtime_resource_type import DowntimeResourceType + return { + "attributes": (DowntimeResponseAttributes,), + "id": (str,), + "relationships": (DowntimeRelationships,), + "type": (DowntimeResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[DowntimeResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[DowntimeRelationships, UnsetType]=unset, type: Union[DowntimeResourceType, UnsetType]=unset, **kwargs): + """ + Downtime data. + + :param attributes: Downtime details. + :type attributes: DowntimeResponseAttributes, optional + + :param id: The downtime ID. + :type id: str, optional + + :param relationships: All relationships associated with downtime. + :type relationships: DowntimeRelationships, optional + + :param type: Downtime resource type. + :type type: DowntimeResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_response_included_item.py b/datadog_api_client/v2/model/downtime_response_included_item.py new file mode 100644 index 0000000000..c420223736 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_response_included_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to a downtime. + + :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.downtime_monitor_included_item import DowntimeMonitorIncludedItem + return { + "oneOf": [ + User, + DowntimeMonitorIncludedItem, + ], + } diff --git a/datadog_api_client/v2/model/downtime_schedule_create_request.py b/datadog_api_client/v2/model/downtime_schedule_create_request.py new file mode 100644 index 0000000000..eeb6f08bae --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_create_request.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeScheduleCreateRequest(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Schedule for the downtime. + + :param recurrences: A list of downtime recurrences. + :type recurrences: [DowntimeScheduleRecurrenceCreateUpdateRequest] + + :param timezone: The timezone in which to schedule the downtime. + :type timezone: str, optional + + :param end: ISO-8601 Datetime to end the downtime. Must include a UTC offset of zero. If not provided, the + downtime continues forever. + :type end: datetime, none_type, optional + + :param start: ISO-8601 Datetime to start the downtime. Must include a UTC offset of zero. If not provided, the + downtime starts the moment it is created. + :type start: datetime, none_type, 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.downtime_schedule_recurrences_create_request import DowntimeScheduleRecurrencesCreateRequest + from datadog_api_client.v2.model.downtime_schedule_one_time_create_update_request import DowntimeScheduleOneTimeCreateUpdateRequest + return { + "oneOf": [ + DowntimeScheduleRecurrencesCreateRequest, + DowntimeScheduleOneTimeCreateUpdateRequest, + ], + } diff --git a/datadog_api_client/v2/model/downtime_schedule_current_downtime_response.py b/datadog_api_client/v2/model/downtime_schedule_current_downtime_response.py new file mode 100644 index 0000000000..2a754cbc4f --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_current_downtime_response.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeScheduleCurrentDowntimeResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (datetime, none_type), + "start": (datetime,), + } + attribute_map = { + "end": "end", + "start": "start", + } + + def __init__(self_, end: Union[datetime, none_type, UnsetType]=unset, start: Union[datetime, UnsetType]=unset, **kwargs): + """ + The most recent actual start and end dates for a recurring downtime. For a canceled downtime, + this is the previously occurring downtime. For active downtimes, this is the ongoing downtime, and for scheduled + downtimes it is the upcoming downtime. + + :param end: The end of the current downtime. + :type end: datetime, none_type, optional + + :param start: The start of the current downtime. + :type start: datetime, optional + """ + if end is not unset: + kwargs["end"] = end + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_schedule_one_time_create_update_request.py b/datadog_api_client/v2/model/downtime_schedule_one_time_create_update_request.py new file mode 100644 index 0000000000..fad81d2009 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_one_time_create_update_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeScheduleOneTimeCreateUpdateRequest(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "end": (datetime, none_type), + "start": (datetime, none_type), + } + attribute_map = { + "end": "end", + "start": "start", + } + + def __init__(self_, end: Union[datetime, none_type, UnsetType]=unset, start: Union[datetime, none_type, UnsetType]=unset, **kwargs): + """ + A one-time downtime definition. + + :param end: ISO-8601 Datetime to end the downtime. Must include a UTC offset of zero. If not provided, the + downtime continues forever. + :type end: datetime, none_type, optional + + :param start: ISO-8601 Datetime to start the downtime. Must include a UTC offset of zero. If not provided, the + downtime starts the moment it is created. + :type start: datetime, none_type, optional + """ + if end is not unset: + kwargs["end"] = end + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_schedule_one_time_response.py b/datadog_api_client/v2/model/downtime_schedule_one_time_response.py new file mode 100644 index 0000000000..9d64a4bc12 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_one_time_response.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeScheduleOneTimeResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (datetime, none_type), + "start": (datetime,), + } + attribute_map = { + "end": "end", + "start": "start", + } + + def __init__(self_, start: datetime, end: Union[datetime, none_type, UnsetType]=unset, **kwargs): + """ + A one-time downtime definition. + + :param end: ISO-8601 Datetime to end the downtime. + :type end: datetime, none_type, optional + + :param start: ISO-8601 Datetime to start the downtime. + :type start: datetime + """ + if end is not unset: + kwargs["end"] = end + super().__init__(kwargs) + + + self_.start = start diff --git a/datadog_api_client/v2/model/downtime_schedule_recurrence_create_update_request.py b/datadog_api_client/v2/model/downtime_schedule_recurrence_create_update_request.py new file mode 100644 index 0000000000..40b1f27ca5 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_recurrence_create_update_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeScheduleRecurrenceCreateUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "duration": (str,), + "rrule": (str,), + "start": (str, none_type), + } + attribute_map = { + "duration": "duration", + "rrule": "rrule", + "start": "start", + } + + def __init__(self_, duration: str, rrule: str, start: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + An object defining the recurrence of the downtime. + + :param duration: The length of the downtime. Must begin with an integer and end with one of 'm', 'h', d', or 'w'. + :type duration: str + + :param rrule: The ``RRULE`` standard for defining recurring events. + For example, to have a recurring event on the first day of each month, set the type to ``rrule`` and set the ``FREQ`` to ``MONTHLY`` and ``BYMONTHDAY`` to ``1``. + Most common ``rrule`` options from the `iCalendar Spec `_ are supported. + + **Note** : Attributes specifying the duration in ``RRULE`` are not supported (for example, ``DTSTART`` , ``DTEND`` , ``DURATION`` ). + More examples available in this `downtime guide `_. + :type rrule: str + + :param start: ISO-8601 Datetime to start the downtime. Must not include a UTC offset. If not provided, the + downtime starts the moment it is created. + :type start: str, none_type, optional + """ + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + + self_.duration = duration + self_.rrule = rrule diff --git a/datadog_api_client/v2/model/downtime_schedule_recurrence_response.py b/datadog_api_client/v2/model/downtime_schedule_recurrence_response.py new file mode 100644 index 0000000000..3de802bd6c --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_recurrence_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeScheduleRecurrenceResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "duration": (str,), + "rrule": (str,), + "start": (str,), + } + attribute_map = { + "duration": "duration", + "rrule": "rrule", + "start": "start", + } + + def __init__(self_, duration: Union[str, UnsetType]=unset, rrule: Union[str, UnsetType]=unset, start: Union[str, UnsetType]=unset, **kwargs): + """ + An RRULE-based recurring downtime. + + :param duration: The length of the downtime. Must begin with an integer and end with one of 'm', 'h', d', or 'w'. + :type duration: str, optional + + :param rrule: The ``RRULE`` standard for defining recurring events. + For example, to have a recurring event on the first day of each month, set the type to ``rrule`` and set the ``FREQ`` to ``MONTHLY`` and ``BYMONTHDAY`` to ``1``. + Most common ``rrule`` options from the `iCalendar Spec `_ are supported. + + **Note** : Attributes specifying the duration in ``RRULE`` are not supported (for example, ``DTSTART`` , ``DTEND`` , ``DURATION`` ). + More examples available in this `downtime guide `_. + :type rrule: str, optional + + :param start: ISO-8601 Datetime to start the downtime. Must not include a UTC offset. If not provided, the + downtime starts the moment it is created. + :type start: str, optional + """ + if duration is not unset: + kwargs["duration"] = duration + if rrule is not unset: + kwargs["rrule"] = rrule + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_schedule_recurrences_create_request.py b/datadog_api_client/v2/model/downtime_schedule_recurrences_create_request.py new file mode 100644 index 0000000000..a76d6e6759 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_recurrences_create_request.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_schedule_recurrence_create_update_request import DowntimeScheduleRecurrenceCreateUpdateRequest + +class DowntimeScheduleRecurrencesCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_schedule_recurrence_create_update_request import DowntimeScheduleRecurrenceCreateUpdateRequest + return { + "recurrences": ([DowntimeScheduleRecurrenceCreateUpdateRequest],), + "timezone": (str,), + } + attribute_map = { + "recurrences": "recurrences", + "timezone": "timezone", + } + + def __init__(self_, recurrences: List[DowntimeScheduleRecurrenceCreateUpdateRequest], timezone: Union[str, UnsetType]=unset, **kwargs): + """ + A recurring downtime schedule definition. + + :param recurrences: A list of downtime recurrences. + :type recurrences: [DowntimeScheduleRecurrenceCreateUpdateRequest] + + :param timezone: The timezone in which to schedule the downtime. + :type timezone: str, optional + """ + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + + self_.recurrences = recurrences diff --git a/datadog_api_client/v2/model/downtime_schedule_recurrences_response.py b/datadog_api_client/v2/model/downtime_schedule_recurrences_response.py new file mode 100644 index 0000000000..657ff49a9e --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_recurrences_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_schedule_current_downtime_response import DowntimeScheduleCurrentDowntimeResponse + from datadog_api_client.v2.model.downtime_schedule_recurrence_response import DowntimeScheduleRecurrenceResponse + +class DowntimeScheduleRecurrencesResponse(ModelNormal): + validations = { + "recurrences": { + "max_items": 5, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_schedule_current_downtime_response import DowntimeScheduleCurrentDowntimeResponse + from datadog_api_client.v2.model.downtime_schedule_recurrence_response import DowntimeScheduleRecurrenceResponse + return { + "current_downtime": (DowntimeScheduleCurrentDowntimeResponse,), + "recurrences": ([DowntimeScheduleRecurrenceResponse],), + "timezone": (str,), + } + attribute_map = { + "current_downtime": "current_downtime", + "recurrences": "recurrences", + "timezone": "timezone", + } + + def __init__(self_, recurrences: List[DowntimeScheduleRecurrenceResponse], current_downtime: Union[DowntimeScheduleCurrentDowntimeResponse, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + A recurring downtime schedule definition. + + :param current_downtime: The most recent actual start and end dates for a recurring downtime. For a canceled downtime, + this is the previously occurring downtime. For active downtimes, this is the ongoing downtime, and for scheduled + downtimes it is the upcoming downtime. + :type current_downtime: DowntimeScheduleCurrentDowntimeResponse, optional + + :param recurrences: A list of downtime recurrences. + :type recurrences: [DowntimeScheduleRecurrenceResponse] + + :param timezone: The timezone in which to schedule the downtime. This affects recurring start and end dates. + Must match ``display_timezone``. + :type timezone: str, optional + """ + if current_downtime is not unset: + kwargs["current_downtime"] = current_downtime + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + + self_.recurrences = recurrences diff --git a/datadog_api_client/v2/model/downtime_schedule_recurrences_update_request.py b/datadog_api_client/v2/model/downtime_schedule_recurrences_update_request.py new file mode 100644 index 0000000000..a8d724090f --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_recurrences_update_request.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_schedule_recurrence_create_update_request import DowntimeScheduleRecurrenceCreateUpdateRequest + +class DowntimeScheduleRecurrencesUpdateRequest(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_schedule_recurrence_create_update_request import DowntimeScheduleRecurrenceCreateUpdateRequest + return { + "recurrences": ([DowntimeScheduleRecurrenceCreateUpdateRequest],), + "timezone": (str,), + } + attribute_map = { + "recurrences": "recurrences", + "timezone": "timezone", + } + + def __init__(self_, recurrences: Union[List[DowntimeScheduleRecurrenceCreateUpdateRequest], UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + A recurring downtime schedule definition. + + :param recurrences: A list of downtime recurrences. + :type recurrences: [DowntimeScheduleRecurrenceCreateUpdateRequest], optional + + :param timezone: The timezone in which to schedule the downtime. + :type timezone: str, optional + """ + if recurrences is not unset: + kwargs["recurrences"] = recurrences + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_schedule_response.py b/datadog_api_client/v2/model/downtime_schedule_response.py new file mode 100644 index 0000000000..b46f81cab5 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeScheduleResponse(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The schedule that defines when the monitor starts, stops, and recurs. There are two types of schedules: + one-time and recurring. Recurring schedules may have up to five RRULE-based recurrences. If no schedules are + provided, the downtime will begin immediately and never end. + + :param current_downtime: The most recent actual start and end dates for a recurring downtime. For a canceled downtime, + this is the previously occurring downtime. For active downtimes, this is the ongoing downtime, and for scheduled + downtimes it is the upcoming downtime. + :type current_downtime: DowntimeScheduleCurrentDowntimeResponse, optional + + :param recurrences: A list of downtime recurrences. + :type recurrences: [DowntimeScheduleRecurrenceResponse] + + :param timezone: The timezone in which to schedule the downtime. This affects recurring start and end dates. + Must match `display_timezone`. + :type timezone: str, optional + + :param end: ISO-8601 Datetime to end the downtime. + :type end: datetime, none_type, optional + + :param start: ISO-8601 Datetime to start the downtime. + :type start: datetime + """ + 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.downtime_schedule_recurrences_response import DowntimeScheduleRecurrencesResponse + from datadog_api_client.v2.model.downtime_schedule_one_time_response import DowntimeScheduleOneTimeResponse + return { + "oneOf": [ + DowntimeScheduleRecurrencesResponse, + DowntimeScheduleOneTimeResponse, + ], + } diff --git a/datadog_api_client/v2/model/downtime_schedule_update_request.py b/datadog_api_client/v2/model/downtime_schedule_update_request.py new file mode 100644 index 0000000000..4d21bf9c4d --- /dev/null +++ b/datadog_api_client/v2/model/downtime_schedule_update_request.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class DowntimeScheduleUpdateRequest(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Schedule for the downtime. + + :param recurrences: A list of downtime recurrences. + :type recurrences: [DowntimeScheduleRecurrenceCreateUpdateRequest], optional + + :param timezone: The timezone in which to schedule the downtime. + :type timezone: str, optional + + :param end: ISO-8601 Datetime to end the downtime. Must include a UTC offset of zero. If not provided, the + downtime continues forever. + :type end: datetime, none_type, optional + + :param start: ISO-8601 Datetime to start the downtime. Must include a UTC offset of zero. If not provided, the + downtime starts the moment it is created. + :type start: datetime, none_type, 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.downtime_schedule_recurrences_update_request import DowntimeScheduleRecurrencesUpdateRequest + from datadog_api_client.v2.model.downtime_schedule_one_time_create_update_request import DowntimeScheduleOneTimeCreateUpdateRequest + return { + "oneOf": [ + DowntimeScheduleRecurrencesUpdateRequest, + DowntimeScheduleOneTimeCreateUpdateRequest, + ], + } diff --git a/datadog_api_client/v2/model/downtime_status.py b/datadog_api_client/v2/model/downtime_status.py new file mode 100644 index 0000000000..6443d1de99 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DowntimeStatus(ModelSimple): + """ + The current status of the downtime. + + :param value: Must be one of ["active", "canceled", "ended", "scheduled"]. + :type value: str + """ + + allowed_values = { + "active", + "canceled", + "ended", + "scheduled", + } + ACTIVE: ClassVar["DowntimeStatus"] + CANCELED: ClassVar["DowntimeStatus"] + ENDED: ClassVar["DowntimeStatus"] + SCHEDULED: ClassVar["DowntimeStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DowntimeStatus.ACTIVE = DowntimeStatus("active") +DowntimeStatus.CANCELED = DowntimeStatus("canceled") +DowntimeStatus.ENDED = DowntimeStatus("ended") +DowntimeStatus.SCHEDULED = DowntimeStatus("scheduled") diff --git a/datadog_api_client/v2/model/downtime_update_request.py b/datadog_api_client/v2/model/downtime_update_request.py new file mode 100644 index 0000000000..25a32bdd94 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_update_request.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_update_request_data import DowntimeUpdateRequestData + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_update_request import DowntimeScheduleRecurrencesUpdateRequest + from datadog_api_client.v2.model.downtime_schedule_one_time_create_update_request import DowntimeScheduleOneTimeCreateUpdateRequest + +class DowntimeUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_update_request_data import DowntimeUpdateRequestData + return { + "data": (DowntimeUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DowntimeUpdateRequestData, **kwargs): + """ + Request for editing a downtime. + + :param data: Object to update a downtime. + :type data: DowntimeUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/downtime_update_request_attributes.py b/datadog_api_client/v2/model/downtime_update_request_attributes.py new file mode 100644 index 0000000000..7c19fa1cc9 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_update_request_attributes.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_monitor_identifier import DowntimeMonitorIdentifier + from datadog_api_client.v2.model.downtime_notify_end_state_types import DowntimeNotifyEndStateTypes + from datadog_api_client.v2.model.downtime_notify_end_state_actions import DowntimeNotifyEndStateActions + from datadog_api_client.v2.model.downtime_schedule_update_request import DowntimeScheduleUpdateRequest + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_update_request import DowntimeScheduleRecurrencesUpdateRequest + from datadog_api_client.v2.model.downtime_schedule_one_time_create_update_request import DowntimeScheduleOneTimeCreateUpdateRequest + +class DowntimeUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_monitor_identifier import DowntimeMonitorIdentifier + from datadog_api_client.v2.model.downtime_notify_end_state_types import DowntimeNotifyEndStateTypes + from datadog_api_client.v2.model.downtime_notify_end_state_actions import DowntimeNotifyEndStateActions + from datadog_api_client.v2.model.downtime_schedule_update_request import DowntimeScheduleUpdateRequest + return { + "display_timezone": (str,), + "message": (str,), + "monitor_identifier": (DowntimeMonitorIdentifier,), + "mute_first_recovery_notification": (bool,), + "notify_end_states": ([DowntimeNotifyEndStateTypes],), + "notify_end_types": ([DowntimeNotifyEndStateActions],), + "schedule": (DowntimeScheduleUpdateRequest,), + "scope": (str,), + } + attribute_map = { + "display_timezone": "display_timezone", + "message": "message", + "monitor_identifier": "monitor_identifier", + "mute_first_recovery_notification": "mute_first_recovery_notification", + "notify_end_states": "notify_end_states", + "notify_end_types": "notify_end_types", + "schedule": "schedule", + "scope": "scope", + } + + def __init__(self_, display_timezone: Union[str, none_type, UnsetType]=unset, message: Union[str, none_type, UnsetType]=unset, monitor_identifier: Union[DowntimeMonitorIdentifier, DowntimeMonitorIdentifierId, DowntimeMonitorIdentifierTags, UnsetType]=unset, mute_first_recovery_notification: Union[bool, UnsetType]=unset, notify_end_states: Union[List[DowntimeNotifyEndStateTypes], UnsetType]=unset, notify_end_types: Union[List[DowntimeNotifyEndStateActions], UnsetType]=unset, schedule: Union[DowntimeScheduleUpdateRequest, DowntimeScheduleRecurrencesUpdateRequest, DowntimeScheduleOneTimeCreateUpdateRequest, UnsetType]=unset, scope: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the downtime to update. + + :param display_timezone: The timezone in which to display the downtime's start and end times in Datadog applications. This is not used + as an offset for scheduling. + :type display_timezone: str, none_type, optional + + :param message: A message to include with notifications for this downtime. Email notifications can be sent to specific users + by using the same ``@username`` notation as events. + :type message: str, none_type, optional + + :param monitor_identifier: Monitor identifier for the downtime. + :type monitor_identifier: DowntimeMonitorIdentifier, optional + + :param mute_first_recovery_notification: If the first recovery notification during a downtime should be muted. + :type mute_first_recovery_notification: bool, optional + + :param notify_end_states: States that will trigger a monitor notification when the ``notify_end_types`` action occurs. + :type notify_end_states: [DowntimeNotifyEndStateTypes], optional + + :param notify_end_types: Actions that will trigger a monitor notification if the downtime is in the ``notify_end_types`` state. + :type notify_end_types: [DowntimeNotifyEndStateActions], optional + + :param schedule: Schedule for the downtime. + :type schedule: DowntimeScheduleUpdateRequest, optional + + :param scope: The scope to which the downtime applies. Must follow the `common search syntax `_. + :type scope: str, optional + """ + if display_timezone is not unset: + kwargs["display_timezone"] = display_timezone + if message is not unset: + kwargs["message"] = message + if monitor_identifier is not unset: + kwargs["monitor_identifier"] = monitor_identifier + if mute_first_recovery_notification is not unset: + kwargs["mute_first_recovery_notification"] = mute_first_recovery_notification + if notify_end_states is not unset: + kwargs["notify_end_states"] = notify_end_states + if notify_end_types is not unset: + kwargs["notify_end_types"] = notify_end_types + if schedule is not unset: + kwargs["schedule"] = schedule + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/downtime_update_request_data.py b/datadog_api_client/v2/model/downtime_update_request_data.py new file mode 100644 index 0000000000..e3a4589c25 --- /dev/null +++ b/datadog_api_client/v2/model/downtime_update_request_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_update_request_attributes import DowntimeUpdateRequestAttributes + from datadog_api_client.v2.model.downtime_resource_type import DowntimeResourceType + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_update_request import DowntimeScheduleRecurrencesUpdateRequest + from datadog_api_client.v2.model.downtime_schedule_one_time_create_update_request import DowntimeScheduleOneTimeCreateUpdateRequest + +class DowntimeUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_update_request_attributes import DowntimeUpdateRequestAttributes + from datadog_api_client.v2.model.downtime_resource_type import DowntimeResourceType + return { + "attributes": (DowntimeUpdateRequestAttributes,), + "id": (str,), + "type": (DowntimeResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DowntimeUpdateRequestAttributes, id: str, type: DowntimeResourceType, **kwargs): + """ + Object to update a downtime. + + :param attributes: Attributes of the downtime to update. + :type attributes: DowntimeUpdateRequestAttributes + + :param id: ID of this downtime. + :type id: str + + :param type: Downtime resource type. + :type type: DowntimeResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/due_date_from.py b/datadog_api_client/v2/model/due_date_from.py new file mode 100644 index 0000000000..0053c63b95 --- /dev/null +++ b/datadog_api_client/v2/model/due_date_from.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DueDateFrom(ModelSimple): + """ + The reference point from which the due date is calculated. When `fix_available` is selected but not applicable to the finding type, `first_seen` is used instead. + + :param value: Must be one of ["first_seen", "fix_available"]. + :type value: str + """ + + allowed_values = { + "first_seen", + "fix_available", + } + FIRST_SEEN: ClassVar["DueDateFrom"] + FIX_AVAILABLE: ClassVar["DueDateFrom"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DueDateFrom.FIRST_SEEN = DueDateFrom("first_seen") +DueDateFrom.FIX_AVAILABLE = DueDateFrom("fix_available") diff --git a/datadog_api_client/v2/model/due_date_per_severity_item.py b/datadog_api_client/v2/model/due_date_per_severity_item.py new file mode 100644 index 0000000000..a53f68916e --- /dev/null +++ b/datadog_api_client/v2/model/due_date_per_severity_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_severity import DueDateSeverity + +class DueDatePerSeverityItem(ModelNormal): + validations = { + "due_in_days": { + "inclusive_maximum": 365, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_severity import DueDateSeverity + return { + "due_in_days": (int,), + "severity": (DueDateSeverity,), + } + attribute_map = { + "due_in_days": "due_in_days", + "severity": "severity", + } + + def __init__(self_, due_in_days: int, severity: DueDateSeverity, **kwargs): + """ + A mapping of a severity level to the number of days until a finding is due. + + :param due_in_days: The number of days from the reference point until the finding is due. + :type due_in_days: int + + :param severity: A severity level used to configure due date thresholds. + :type severity: DueDateSeverity + """ + super().__init__(kwargs) + + + self_.due_in_days = due_in_days + self_.severity = severity diff --git a/datadog_api_client/v2/model/due_date_rule_action.py b/datadog_api_client/v2/model/due_date_rule_action.py new file mode 100644 index 0000000000..5d59d8802d --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_action.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_per_severity_item import DueDatePerSeverityItem + from datadog_api_client.v2.model.due_date_from import DueDateFrom + +class DueDateRuleAction(ModelNormal): + validations = { + "reason_description": { + "max_length": 20000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_per_severity_item import DueDatePerSeverityItem + from datadog_api_client.v2.model.due_date_from import DueDateFrom + return { + "due_days_per_severity": ([DueDatePerSeverityItem],), + "due_from": (DueDateFrom,), + "reason_description": (str,), + } + attribute_map = { + "due_days_per_severity": "due_days_per_severity", + "due_from": "due_from", + "reason_description": "reason_description", + } + + def __init__(self_, due_days_per_severity: List[DueDatePerSeverityItem], due_from: DueDateFrom, reason_description: Union[str, UnsetType]=unset, **kwargs): + """ + The action to take when the due date rule matches a finding. + + :param due_days_per_severity: A list of severity-to-due-date mappings. Each severity may appear at most once. + :type due_days_per_severity: [DueDatePerSeverityItem] + + :param due_from: The reference point from which the due date is calculated. When ``fix_available`` is selected but not applicable to the finding type, ``first_seen`` is used instead. + :type due_from: DueDateFrom + + :param reason_description: An optional description providing more context for the due date assignment. + :type reason_description: str, optional + """ + if reason_description is not unset: + kwargs["reason_description"] = reason_description + super().__init__(kwargs) + + + self_.due_days_per_severity = due_days_per_severity + self_.due_from = due_from diff --git a/datadog_api_client/v2/model/due_date_rule_attributes_create.py b/datadog_api_client/v2/model/due_date_rule_attributes_create.py new file mode 100644 index 0000000000..b9effcb102 --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_attributes_create.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_action import DueDateRuleAction + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + +class DueDateRuleAttributesCreate(ModelNormal): + validations = { + "name": { + "max_length": 255, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_action import DueDateRuleAction + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + return { + "action": (DueDateRuleAction,), + "enabled": (bool,), + "name": (str,), + "rule": (AutomationRuleScope,), + } + attribute_map = { + "action": "action", + "enabled": "enabled", + "name": "name", + "rule": "rule", + } + + def __init__(self_, action: DueDateRuleAction, name: str, rule: AutomationRuleScope, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a due date rule. + + :param action: The action to take when the due date rule matches a finding. + :type action: DueDateRuleAction + + :param enabled: Whether the due date rule is enabled. + :type enabled: bool, optional + + :param name: The name of the due date rule. + :type name: str + + :param rule: Defines the scope of findings to which the automation rule applies. + :type rule: AutomationRuleScope + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + + self_.action = action + self_.name = name + self_.rule = rule diff --git a/datadog_api_client/v2/model/due_date_rule_attributes_response.py b/datadog_api_client/v2/model/due_date_rule_attributes_response.py new file mode 100644 index 0000000000..cb388e27e4 --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_attributes_response.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_action import DueDateRuleAction + from datadog_api_client.v2.model.automation_rule_created_by import AutomationRuleCreatedBy + from datadog_api_client.v2.model.automation_rule_modified_by import AutomationRuleModifiedBy + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + +class DueDateRuleAttributesResponse(ModelNormal): + validations = { + "name": { + "max_length": 255, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_action import DueDateRuleAction + from datadog_api_client.v2.model.automation_rule_created_by import AutomationRuleCreatedBy + from datadog_api_client.v2.model.automation_rule_modified_by import AutomationRuleModifiedBy + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + return { + "action": (DueDateRuleAction,), + "created_at": (int,), + "created_by": (AutomationRuleCreatedBy,), + "enabled": (bool,), + "modified_at": (int,), + "modified_by": (AutomationRuleModifiedBy,), + "name": (str,), + "rule": (AutomationRuleScope,), + } + attribute_map = { + "action": "action", + "created_at": "created_at", + "created_by": "created_by", + "enabled": "enabled", + "modified_at": "modified_at", + "modified_by": "modified_by", + "name": "name", + "rule": "rule", + } + + def __init__(self_, action: DueDateRuleAction, created_at: int, created_by: AutomationRuleCreatedBy, enabled: bool, modified_at: int, modified_by: AutomationRuleModifiedBy, name: str, rule: AutomationRuleScope, **kwargs): + """ + Attributes of a due date rule returned by the API. + + :param action: The action to take when the due date rule matches a finding. + :type action: DueDateRuleAction + + :param created_at: The Unix timestamp in milliseconds when the rule was created. + :type created_at: int + + :param created_by: The user or Datadog system who created the rule. + :type created_by: AutomationRuleCreatedBy + + :param enabled: Whether the due date rule is enabled. + :type enabled: bool + + :param modified_at: The Unix timestamp in milliseconds when the rule was last modified. + :type modified_at: int + + :param modified_by: The user or Datadog system who last modified the rule. + :type modified_by: AutomationRuleModifiedBy + + :param name: The name of the due date rule. + :type name: str + + :param rule: Defines the scope of findings to which the automation rule applies. + :type rule: AutomationRuleScope + """ + super().__init__(kwargs) + + + self_.action = action + self_.created_at = created_at + self_.created_by = created_by + self_.enabled = enabled + self_.modified_at = modified_at + self_.modified_by = modified_by + self_.name = name + self_.rule = rule diff --git a/datadog_api_client/v2/model/due_date_rule_create_request.py b/datadog_api_client/v2/model/due_date_rule_create_request.py new file mode 100644 index 0000000000..9e8f5c98aa --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_data_create import DueDateRuleDataCreate + +class DueDateRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_data_create import DueDateRuleDataCreate + return { + "data": (DueDateRuleDataCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DueDateRuleDataCreate, **kwargs): + """ + The body of a due date rule create request. + + :param data: The data object for a due date rule create or update request. + :type data: DueDateRuleDataCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/due_date_rule_data_create.py b/datadog_api_client/v2/model/due_date_rule_data_create.py new file mode 100644 index 0000000000..2bd18e1f4f --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_data_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_attributes_create import DueDateRuleAttributesCreate + from datadog_api_client.v2.model.due_date_rule_type import DueDateRuleType + +class DueDateRuleDataCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_attributes_create import DueDateRuleAttributesCreate + from datadog_api_client.v2.model.due_date_rule_type import DueDateRuleType + return { + "attributes": (DueDateRuleAttributesCreate,), + "type": (DueDateRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DueDateRuleAttributesCreate, type: DueDateRuleType, **kwargs): + """ + The data object for a due date rule create or update request. + + :param attributes: Attributes for creating or updating a due date rule. + :type attributes: DueDateRuleAttributesCreate + + :param type: The JSON:API type for due date rules. + :type type: DueDateRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/due_date_rule_data_response.py b/datadog_api_client/v2/model/due_date_rule_data_response.py new file mode 100644 index 0000000000..e2914f8111 --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_attributes_response import DueDateRuleAttributesResponse + from datadog_api_client.v2.model.due_date_rule_type import DueDateRuleType + +class DueDateRuleDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_attributes_response import DueDateRuleAttributesResponse + from datadog_api_client.v2.model.due_date_rule_type import DueDateRuleType + return { + "attributes": (DueDateRuleAttributesResponse,), + "id": (UUID,), + "type": (DueDateRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: DueDateRuleAttributesResponse, id: UUID, type: DueDateRuleType, **kwargs): + """ + The data object for a due date rule returned by the API. + + :param attributes: Attributes of a due date rule returned by the API. + :type attributes: DueDateRuleAttributesResponse + + :param id: The ID of the due date rule. + :type id: UUID + + :param type: The JSON:API type for due date rules. + :type type: DueDateRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/due_date_rule_reorder_item.py b/datadog_api_client/v2/model/due_date_rule_reorder_item.py new file mode 100644 index 0000000000..812ee9efa6 --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_reorder_item.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_type import DueDateRuleType + +class DueDateRuleReorderItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_type import DueDateRuleType + return { + "id": (UUID,), + "type": (DueDateRuleType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: DueDateRuleType, **kwargs): + """ + A reference to a due date rule used for reordering. + + :param id: The ID of the automation rule. + :type id: UUID + + :param type: The JSON:API type for due date rules. + :type type: DueDateRuleType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/due_date_rule_reorder_request.py b/datadog_api_client/v2/model/due_date_rule_reorder_request.py new file mode 100644 index 0000000000..dac45c8c13 --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_reorder_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_reorder_item import DueDateRuleReorderItem + +class DueDateRuleReorderRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_reorder_item import DueDateRuleReorderItem + return { + "data": ([DueDateRuleReorderItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[DueDateRuleReorderItem], **kwargs): + """ + The body of the due date rule reorder request. + + :param data: The ordered list of all due date rules; every rule must be included. + :type data: [DueDateRuleReorderItem] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/due_date_rule_response.py b/datadog_api_client/v2/model/due_date_rule_response.py new file mode 100644 index 0000000000..b38fd60b45 --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_data_response import DueDateRuleDataResponse + +class DueDateRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_data_response import DueDateRuleDataResponse + return { + "data": (DueDateRuleDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DueDateRuleDataResponse, **kwargs): + """ + A single due date rule response. + + :param data: The data object for a due date rule returned by the API. + :type data: DueDateRuleDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/due_date_rule_type.py b/datadog_api_client/v2/model/due_date_rule_type.py new file mode 100644 index 0000000000..b12eaeaacf --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DueDateRuleType(ModelSimple): + """ + The JSON:API type for due date rules. + + :param value: If omitted defaults to "due_date_rules". Must be one of ["due_date_rules"]. + :type value: str + """ + + allowed_values = { + "due_date_rules", + } + DUE_DATE_RULES: ClassVar["DueDateRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DueDateRuleType.DUE_DATE_RULES = DueDateRuleType("due_date_rules") diff --git a/datadog_api_client/v2/model/due_date_rule_update_request.py b/datadog_api_client/v2/model/due_date_rule_update_request.py new file mode 100644 index 0000000000..7571081f70 --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rule_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_data_create import DueDateRuleDataCreate + +class DueDateRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_data_create import DueDateRuleDataCreate + return { + "data": (DueDateRuleDataCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DueDateRuleDataCreate, **kwargs): + """ + The body of a due date rule update request. + + :param data: The data object for a due date rule create or update request. + :type data: DueDateRuleDataCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/due_date_rules_response.py b/datadog_api_client/v2/model/due_date_rules_response.py new file mode 100644 index 0000000000..0535184471 --- /dev/null +++ b/datadog_api_client/v2/model/due_date_rules_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.due_date_rule_data_response import DueDateRuleDataResponse + from datadog_api_client.v2.model.security_automation_rules_links import SecurityAutomationRulesLinks + from datadog_api_client.v2.model.security_automation_rules_meta import SecurityAutomationRulesMeta + +class DueDateRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.due_date_rule_data_response import DueDateRuleDataResponse + from datadog_api_client.v2.model.security_automation_rules_links import SecurityAutomationRulesLinks + from datadog_api_client.v2.model.security_automation_rules_meta import SecurityAutomationRulesMeta + return { + "data": ([DueDateRuleDataResponse],), + "links": (SecurityAutomationRulesLinks,), + "meta": (SecurityAutomationRulesMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[DueDateRuleDataResponse], links: SecurityAutomationRulesLinks, meta: SecurityAutomationRulesMeta, **kwargs): + """ + A list of due date rules with pagination metadata. + + :param data: A list of due date rule data objects. + :type data: [DueDateRuleDataResponse] + + :param links: Pagination links for the list of automation rules. + :type links: SecurityAutomationRulesLinks + + :param meta: Metadata for the list of automation rules. + :type meta: SecurityAutomationRulesMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.links = links + self_.meta = meta diff --git a/datadog_api_client/v2/model/due_date_severity.py b/datadog_api_client/v2/model/due_date_severity.py new file mode 100644 index 0000000000..c13bc885ad --- /dev/null +++ b/datadog_api_client/v2/model/due_date_severity.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class DueDateSeverity(ModelSimple): + """ + A severity level used to configure due date thresholds. + + :param value: Must be one of ["critical", "high", "medium", "low", "info", "none", "unknown"]. + :type value: str + """ + + allowed_values = { + "critical", + "high", + "medium", + "low", + "info", + "none", + "unknown", + } + CRITICAL: ClassVar["DueDateSeverity"] + HIGH: ClassVar["DueDateSeverity"] + MEDIUM: ClassVar["DueDateSeverity"] + LOW: ClassVar["DueDateSeverity"] + INFO: ClassVar["DueDateSeverity"] + NONE: ClassVar["DueDateSeverity"] + UNKNOWN: ClassVar["DueDateSeverity"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +DueDateSeverity.CRITICAL = DueDateSeverity("critical") +DueDateSeverity.HIGH = DueDateSeverity("high") +DueDateSeverity.MEDIUM = DueDateSeverity("medium") +DueDateSeverity.LOW = DueDateSeverity("low") +DueDateSeverity.INFO = DueDateSeverity("info") +DueDateSeverity.NONE = DueDateSeverity("none") +DueDateSeverity.UNKNOWN = DueDateSeverity("unknown") diff --git a/datadog_api_client/v2/model/elf_sourcemap_attributes.py b/datadog_api_client/v2/model/elf_sourcemap_attributes.py new file mode 100644 index 0000000000..d0662329fe --- /dev/null +++ b/datadog_api_client/v2/model/elf_sourcemap_attributes.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ELFSourcemapAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "arch": (str,), + "created_at": (datetime,), + "file_hash": (str,), + "file_name": (str,), + "gnu_build_id": (str,), + "go_build_id": (str,), + "mapkind": (str,), + "origin": (str,), + "origin_version": (str,), + "size": (int,), + "symbol_source": (str,), + } + attribute_map = { + "arch": "arch", + "created_at": "created_at", + "file_hash": "file_hash", + "file_name": "file_name", + "gnu_build_id": "gnu_build_id", + "go_build_id": "go_build_id", + "mapkind": "mapkind", + "origin": "origin", + "origin_version": "origin_version", + "size": "size", + "symbol_source": "symbol_source", + } + + def __init__(self_, created_at: datetime, mapkind: str, size: int, arch: Union[str, UnsetType]=unset, file_hash: Union[str, UnsetType]=unset, file_name: Union[str, UnsetType]=unset, gnu_build_id: Union[str, UnsetType]=unset, go_build_id: Union[str, UnsetType]=unset, origin: Union[str, UnsetType]=unset, origin_version: Union[str, UnsetType]=unset, symbol_source: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an ELF symbol file. + + :param arch: The target CPU architecture. + :type arch: str, optional + + :param created_at: The timestamp when the symbol file was created. + :type created_at: datetime + + :param file_hash: The SHA256 hash of the ELF file. + :type file_hash: str, optional + + :param file_name: The ELF file name. + :type file_name: str, optional + + :param gnu_build_id: The GNU build ID (UUID format). + :type gnu_build_id: str, optional + + :param go_build_id: The Go build ID (UUID format). + :type go_build_id: str, optional + + :param mapkind: The type of source map. + :type mapkind: str + + :param origin: The origin of the ELF file. + :type origin: str, optional + + :param origin_version: The version of the origin package. + :type origin_version: str, optional + + :param size: The size of the ELF file in bytes. + :type size: int + + :param symbol_source: The source of the debug symbols. + :type symbol_source: str, optional + """ + if arch is not unset: + kwargs["arch"] = arch + if file_hash is not unset: + kwargs["file_hash"] = file_hash + if file_name is not unset: + kwargs["file_name"] = file_name + if gnu_build_id is not unset: + kwargs["gnu_build_id"] = gnu_build_id + if go_build_id is not unset: + kwargs["go_build_id"] = go_build_id + if origin is not unset: + kwargs["origin"] = origin + if origin_version is not unset: + kwargs["origin_version"] = origin_version + if symbol_source is not unset: + kwargs["symbol_source"] = symbol_source + super().__init__(kwargs) + + + self_.created_at = created_at + self_.mapkind = mapkind + self_.size = size diff --git a/datadog_api_client/v2/model/elf_sourcemap_data.py b/datadog_api_client/v2/model/elf_sourcemap_data.py new file mode 100644 index 0000000000..7e395838a9 --- /dev/null +++ b/datadog_api_client/v2/model/elf_sourcemap_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.elf_sourcemap_attributes import ELFSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + +class ELFSourcemapData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.elf_sourcemap_attributes import ELFSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + return { + "attributes": (ELFSourcemapAttributes,), + "id": (str,), + "type": (SourcemapDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ELFSourcemapAttributes, id: str, type: SourcemapDataType, **kwargs): + """ + ELF symbol file data object. + + :param attributes: Attributes of an ELF symbol file. + :type attributes: ELFSourcemapAttributes + + :param id: The unique identifier of the source map. + :type id: str + + :param type: The resource type for source map objects. + :type type: SourcemapDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/entity_attributes.py b/datadog_api_client/v2/model/entity_attributes.py new file mode 100644 index 0000000000..d52af46019 --- /dev/null +++ b/datadog_api_client/v2/model/entity_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_version": (str,), + "description": (str,), + "display_name": (str,), + "kind": (str,), + "name": (str,), + "namespace": (str,), + "owner": (str,), + "tags": ([str],), + } + attribute_map = { + "api_version": "apiVersion", + "description": "description", + "display_name": "displayName", + "kind": "kind", + "name": "name", + "namespace": "namespace", + "owner": "owner", + "tags": "tags", + } + + def __init__(self_, api_version: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, kind: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, namespace: Union[str, UnsetType]=unset, owner: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Entity attributes. + + :param api_version: The API version. + :type api_version: str, optional + + :param description: The description. + :type description: str, optional + + :param display_name: The display name. + :type display_name: str, optional + + :param kind: The kind. + :type kind: str, optional + + :param name: The name. + :type name: str, optional + + :param namespace: The namespace. + :type namespace: str, optional + + :param owner: The owner. + :type owner: str, optional + + :param tags: The tags. + :type tags: [str], optional + """ + if api_version is not unset: + kwargs["api_version"] = api_version + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if kind is not unset: + kwargs["kind"] = kind + if name is not unset: + kwargs["name"] = name + if namespace is not unset: + kwargs["namespace"] = namespace + if owner is not unset: + kwargs["owner"] = owner + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_context_entity.py b/datadog_api_client/v2/model/entity_context_entity.py new file mode 100644 index 0000000000..4a5b790431 --- /dev/null +++ b/datadog_api_client/v2/model/entity_context_entity.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_context_entity_attributes import EntityContextEntityAttributes + +class EntityContextEntity(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_context_entity_attributes import EntityContextEntityAttributes + return { + "attributes": (EntityContextEntityAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: EntityContextEntityAttributes, id: str, **kwargs): + """ + A single entity returned by the entity context endpoint. + + :param attributes: The attributes of an entity context entry, grouping all the historical revisions of the entity. + :type attributes: EntityContextEntityAttributes + + :param id: The unique identifier of the entity. + :type id: str + + :param type: The type of the entity. Reflects the underlying entity kind from the entity context store + (for example, ``siem_entity_identity`` for identities). Defaults to ``entity`` when the kind is unknown. + :type type: str + """ + super().__init__(kwargs) + type = kwargs.get("type", "entity") + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/entity_context_entity_attributes.py b/datadog_api_client/v2/model/entity_context_entity_attributes.py new file mode 100644 index 0000000000..2504d97226 --- /dev/null +++ b/datadog_api_client/v2/model/entity_context_entity_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_context_revision import EntityContextRevision + +class EntityContextEntityAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_context_revision import EntityContextRevision + return { + "revisions": ([EntityContextRevision],), + } + attribute_map = { + "revisions": "revisions", + } + + def __init__(self_, revisions: List[EntityContextRevision], **kwargs): + """ + The attributes of an entity context entry, grouping all the historical revisions of the entity. + + :param revisions: The historical revisions of the entity, ordered chronologically. + :type revisions: [EntityContextRevision] + """ + super().__init__(kwargs) + + + self_.revisions = revisions diff --git a/datadog_api_client/v2/model/entity_context_page.py b/datadog_api_client/v2/model/entity_context_page.py new file mode 100644 index 0000000000..18ae8984df --- /dev/null +++ b/datadog_api_client/v2/model/entity_context_page.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityContextPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_token": (str,), + } + attribute_map = { + "next_token": "next_token", + } + + def __init__(self_, next_token: str, **kwargs): + """ + Pagination metadata for the entity context response. + + :param next_token: An opaque token to pass as ``page_token`` in a subsequent request to retrieve the next page of results. Empty when there are no more results. + :type next_token: str + """ + super().__init__(kwargs) + + + self_.next_token = next_token diff --git a/datadog_api_client/v2/model/entity_context_response.py b/datadog_api_client/v2/model/entity_context_response.py new file mode 100644 index 0000000000..f9f17e4bbe --- /dev/null +++ b/datadog_api_client/v2/model/entity_context_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_context_entity import EntityContextEntity + from datadog_api_client.v2.model.entity_context_response_meta import EntityContextResponseMeta + +class EntityContextResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_context_entity import EntityContextEntity + from datadog_api_client.v2.model.entity_context_response_meta import EntityContextResponseMeta + return { + "data": ([EntityContextEntity],), + "meta": (EntityContextResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[EntityContextEntity], meta: EntityContextResponseMeta, **kwargs): + """ + Response from the entity context endpoint, containing the matching entities and pagination metadata. + + :param data: The list of entities matching the query. + :type data: [EntityContextEntity] + + :param meta: Metadata returned alongside the entity context response. + :type meta: EntityContextResponseMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/entity_context_response_meta.py b/datadog_api_client/v2/model/entity_context_response_meta.py new file mode 100644 index 0000000000..48ccc5ee8e --- /dev/null +++ b/datadog_api_client/v2/model/entity_context_response_meta.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_context_page import EntityContextPage + +class EntityContextResponseMeta(ModelNormal): + validations = { + "total_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_context_page import EntityContextPage + return { + "page": (EntityContextPage,), + "total_count": (int,), + } + attribute_map = { + "page": "page", + "total_count": "total_count", + } + + def __init__(self_, page: EntityContextPage, total_count: int, **kwargs): + """ + Metadata returned alongside the entity context response. + + :param page: Pagination metadata for the entity context response. + :type page: EntityContextPage + + :param total_count: The total number of entities matching the query, irrespective of pagination. + :type total_count: int + """ + super().__init__(kwargs) + + + self_.page = page + self_.total_count = total_count diff --git a/datadog_api_client/v2/model/entity_context_revision.py b/datadog_api_client/v2/model/entity_context_revision.py new file mode 100644 index 0000000000..d88c34f198 --- /dev/null +++ b/datadog_api_client/v2/model/entity_context_revision.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_context_revision_attributes import EntityContextRevisionAttributes + +class EntityContextRevision(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_context_revision_attributes import EntityContextRevisionAttributes + return { + "attributes": (EntityContextRevisionAttributes,), + "first_seen_at": (datetime,), + "last_seen_at": (datetime,), + } + attribute_map = { + "attributes": "attributes", + "first_seen_at": "first_seen_at", + "last_seen_at": "last_seen_at", + } + + def __init__(self_, attributes: EntityContextRevisionAttributes, first_seen_at: datetime, last_seen_at: datetime, **kwargs): + """ + A single historical revision of an entity, including the time range during which the revision was observed. + + :param attributes: The set of attributes recorded for the entity at this revision. The keys depend on the kind of entity. + :type attributes: EntityContextRevisionAttributes + + :param first_seen_at: The first time the entity was observed at this revision. + :type first_seen_at: datetime + + :param last_seen_at: The last time the entity was observed at this revision. + :type last_seen_at: datetime + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.first_seen_at = first_seen_at + self_.last_seen_at = last_seen_at diff --git a/datadog_api_client/v2/model/entity_context_revision_attributes.py b/datadog_api_client/v2/model/entity_context_revision_attributes.py new file mode 100644 index 0000000000..5686f86d65 --- /dev/null +++ b/datadog_api_client/v2/model/entity_context_revision_attributes.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityContextRevisionAttributes(ModelNormal): + + def __init__(self_, **kwargs): + """ + The set of attributes recorded for the entity at this revision. The keys depend on the kind of entity. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_data.py b/datadog_api_client/v2/model/entity_data.py new file mode 100644 index 0000000000..34ef488eb7 --- /dev/null +++ b/datadog_api_client/v2/model/entity_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_attributes import EntityAttributes + from datadog_api_client.v2.model.entity_meta import EntityMeta + from datadog_api_client.v2.model.entity_relationships import EntityRelationships + +class EntityData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_attributes import EntityAttributes + from datadog_api_client.v2.model.entity_meta import EntityMeta + from datadog_api_client.v2.model.entity_relationships import EntityRelationships + return { + "attributes": (EntityAttributes,), + "id": (str,), + "meta": (EntityMeta,), + "relationships": (EntityRelationships,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[EntityAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, meta: Union[EntityMeta, UnsetType]=unset, relationships: Union[EntityRelationships, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Entity data. + + :param attributes: Entity attributes. + :type attributes: EntityAttributes, optional + + :param id: Entity ID. + :type id: str, optional + + :param meta: Entity metadata. + :type meta: EntityMeta, optional + + :param relationships: Entity relationships. + :type relationships: EntityRelationships, optional + + :param type: Entity. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if meta is not unset: + kwargs["meta"] = meta + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_integration_config_attributes.py b/datadog_api_client/v2/model/entity_integration_config_attributes.py new file mode 100644 index 0000000000..f0a061bc9a --- /dev/null +++ b/datadog_api_client/v2/model/entity_integration_config_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_integration_config_payload import EntityIntegrationConfigPayload + +class EntityIntegrationConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_integration_config_payload import EntityIntegrationConfigPayload + return { + "config": (EntityIntegrationConfigPayload,), + "integration_id": (str,), + "org_id": (int,), + } + attribute_map = { + "config": "config", + "integration_id": "integration_id", + "org_id": "org_id", + } + + def __init__(self_, config: EntityIntegrationConfigPayload, integration_id: str, org_id: int, **kwargs): + """ + The organization ID, integration identifier, and integration-specific configuration payload for an entity integration configuration. + + :param config: Integration-specific configuration payload. The shape of this object depends on the integration identified by the path parameter. For ``github`` , the object must contain an ``enabled_repos`` array. For ``jira`` , it must contain an ``enabled_projects`` array. For ``pagerduty`` , it must contain an ``accounts`` array. + :type config: EntityIntegrationConfigPayload + + :param integration_id: The identifier of the integration this configuration applies to (for example, ``github`` , ``jira`` , or ``pagerduty`` ). + :type integration_id: str + + :param org_id: The Datadog organization identifier that owns this configuration. + :type org_id: int + """ + super().__init__(kwargs) + + + self_.config = config + self_.integration_id = integration_id + self_.org_id = org_id diff --git a/datadog_api_client/v2/model/entity_integration_config_data.py b/datadog_api_client/v2/model/entity_integration_config_data.py new file mode 100644 index 0000000000..0c82bb1d5d --- /dev/null +++ b/datadog_api_client/v2/model/entity_integration_config_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_integration_config_attributes import EntityIntegrationConfigAttributes + from datadog_api_client.v2.model.entity_integration_config_type import EntityIntegrationConfigType + +class EntityIntegrationConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_integration_config_attributes import EntityIntegrationConfigAttributes + from datadog_api_client.v2.model.entity_integration_config_type import EntityIntegrationConfigType + return { + "attributes": (EntityIntegrationConfigAttributes,), + "id": (str,), + "type": (EntityIntegrationConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: EntityIntegrationConfigAttributes, id: str, type: EntityIntegrationConfigType, **kwargs): + """ + JSON:API resource object for an entity integration configuration. + + :param attributes: The organization ID, integration identifier, and integration-specific configuration payload for an entity integration configuration. + :type attributes: EntityIntegrationConfigAttributes + + :param id: Unique identifier of the entity integration configuration. + :type id: str + + :param type: JSON:API resource type for an entity integration configuration. Always ``entity_integration_configs``. + :type type: EntityIntegrationConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/entity_integration_config_payload.py b/datadog_api_client/v2/model/entity_integration_config_payload.py new file mode 100644 index 0000000000..72d81c751e --- /dev/null +++ b/datadog_api_client/v2/model/entity_integration_config_payload.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityIntegrationConfigPayload(ModelNormal): + + def __init__(self_, **kwargs): + """ + Integration-specific configuration payload. The shape of this object depends on the integration identified by the path parameter. For ``github`` , the object must contain an ``enabled_repos`` array. For ``jira`` , it must contain an ``enabled_projects`` array. For ``pagerduty`` , it must contain an ``accounts`` array. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_integration_config_request.py b/datadog_api_client/v2/model/entity_integration_config_request.py new file mode 100644 index 0000000000..1961efc457 --- /dev/null +++ b/datadog_api_client/v2/model/entity_integration_config_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_integration_config_request_data import EntityIntegrationConfigRequestData + +class EntityIntegrationConfigRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_integration_config_request_data import EntityIntegrationConfigRequestData + return { + "data": (EntityIntegrationConfigRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: EntityIntegrationConfigRequestData, **kwargs): + """ + Request body used to create or replace the configuration for a given integration. + + :param data: JSON:API resource object used in a request to create or update an entity integration configuration. + :type data: EntityIntegrationConfigRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/entity_integration_config_request_attributes.py b/datadog_api_client/v2/model/entity_integration_config_request_attributes.py new file mode 100644 index 0000000000..6d600e659f --- /dev/null +++ b/datadog_api_client/v2/model/entity_integration_config_request_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_integration_config_payload import EntityIntegrationConfigPayload + +class EntityIntegrationConfigRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_integration_config_payload import EntityIntegrationConfigPayload + return { + "config": (EntityIntegrationConfigPayload,), + } + attribute_map = { + "config": "config", + } + + def __init__(self_, config: EntityIntegrationConfigPayload, **kwargs): + """ + Attributes used to create or update an entity integration configuration. + + :param config: Integration-specific configuration payload. The shape of this object depends on the integration identified by the path parameter. For ``github`` , the object must contain an ``enabled_repos`` array. For ``jira`` , it must contain an ``enabled_projects`` array. For ``pagerduty`` , it must contain an ``accounts`` array. + :type config: EntityIntegrationConfigPayload + """ + super().__init__(kwargs) + + + self_.config = config diff --git a/datadog_api_client/v2/model/entity_integration_config_request_data.py b/datadog_api_client/v2/model/entity_integration_config_request_data.py new file mode 100644 index 0000000000..e564425b12 --- /dev/null +++ b/datadog_api_client/v2/model/entity_integration_config_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_integration_config_request_attributes import EntityIntegrationConfigRequestAttributes + from datadog_api_client.v2.model.entity_integration_config_request_type import EntityIntegrationConfigRequestType + +class EntityIntegrationConfigRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_integration_config_request_attributes import EntityIntegrationConfigRequestAttributes + from datadog_api_client.v2.model.entity_integration_config_request_type import EntityIntegrationConfigRequestType + return { + "attributes": (EntityIntegrationConfigRequestAttributes,), + "type": (EntityIntegrationConfigRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: EntityIntegrationConfigRequestAttributes, type: EntityIntegrationConfigRequestType, **kwargs): + """ + JSON:API resource object used in a request to create or update an entity integration configuration. + + :param attributes: Attributes used to create or update an entity integration configuration. + :type attributes: EntityIntegrationConfigRequestAttributes + + :param type: JSON:API resource type for the entity integration configuration create or update request. Always ``entity_integration_config_requests``. + :type type: EntityIntegrationConfigRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/entity_integration_config_request_type.py b/datadog_api_client/v2/model/entity_integration_config_request_type.py new file mode 100644 index 0000000000..66b8422be3 --- /dev/null +++ b/datadog_api_client/v2/model/entity_integration_config_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityIntegrationConfigRequestType(ModelSimple): + """ + JSON:API resource type for the entity integration configuration create or update request. Always `entity_integration_config_requests`. + + :param value: If omitted defaults to "entity_integration_config_requests". Must be one of ["entity_integration_config_requests"]. + :type value: str + """ + + allowed_values = { + "entity_integration_config_requests", + } + ENTITY_INTEGRATION_CONFIG_REQUESTS: ClassVar["EntityIntegrationConfigRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityIntegrationConfigRequestType.ENTITY_INTEGRATION_CONFIG_REQUESTS = EntityIntegrationConfigRequestType("entity_integration_config_requests") diff --git a/datadog_api_client/v2/model/entity_integration_config_response.py b/datadog_api_client/v2/model/entity_integration_config_response.py new file mode 100644 index 0000000000..acac552b7f --- /dev/null +++ b/datadog_api_client/v2/model/entity_integration_config_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_integration_config_data import EntityIntegrationConfigData + +class EntityIntegrationConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_integration_config_data import EntityIntegrationConfigData + return { + "data": (EntityIntegrationConfigData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: EntityIntegrationConfigData, **kwargs): + """ + JSON:API document containing a single entity integration configuration resource. + + :param data: JSON:API resource object for an entity integration configuration. + :type data: EntityIntegrationConfigData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/entity_integration_config_type.py b/datadog_api_client/v2/model/entity_integration_config_type.py new file mode 100644 index 0000000000..4099555cf3 --- /dev/null +++ b/datadog_api_client/v2/model/entity_integration_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityIntegrationConfigType(ModelSimple): + """ + JSON:API resource type for an entity integration configuration. Always `entity_integration_configs`. + + :param value: If omitted defaults to "entity_integration_configs". Must be one of ["entity_integration_configs"]. + :type value: str + """ + + allowed_values = { + "entity_integration_configs", + } + ENTITY_INTEGRATION_CONFIGS: ClassVar["EntityIntegrationConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityIntegrationConfigType.ENTITY_INTEGRATION_CONFIGS = EntityIntegrationConfigType("entity_integration_configs") diff --git a/datadog_api_client/v2/model/entity_meta.py b/datadog_api_client/v2/model/entity_meta.py new file mode 100644 index 0000000000..4af6e240f2 --- /dev/null +++ b/datadog_api_client/v2/model/entity_meta.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (str,), + "ingestion_source": (str,), + "modified_at": (str,), + "origin": (str,), + } + attribute_map = { + "created_at": "createdAt", + "ingestion_source": "ingestionSource", + "modified_at": "modifiedAt", + "origin": "origin", + } + + def __init__(self_, created_at: Union[str, UnsetType]=unset, ingestion_source: Union[str, UnsetType]=unset, modified_at: Union[str, UnsetType]=unset, origin: Union[str, UnsetType]=unset, **kwargs): + """ + Entity metadata. + + :param created_at: The creation time. + :type created_at: str, optional + + :param ingestion_source: The ingestion source. + :type ingestion_source: str, optional + + :param modified_at: The modification time. + :type modified_at: str, optional + + :param origin: The origin. + :type origin: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if ingestion_source is not unset: + kwargs["ingestion_source"] = ingestion_source + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if origin is not unset: + kwargs["origin"] = origin + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_relationships.py b/datadog_api_client/v2/model/entity_relationships.py new file mode 100644 index 0000000000..0f59e1787e --- /dev/null +++ b/datadog_api_client/v2/model/entity_relationships.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_to_incidents import EntityToIncidents + from datadog_api_client.v2.model.entity_to_oncalls import EntityToOncalls + from datadog_api_client.v2.model.entity_to_raw_schema import EntityToRawSchema + from datadog_api_client.v2.model.entity_to_related_entities import EntityToRelatedEntities + from datadog_api_client.v2.model.entity_to_schema import EntityToSchema + +class EntityRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_to_incidents import EntityToIncidents + from datadog_api_client.v2.model.entity_to_oncalls import EntityToOncalls + from datadog_api_client.v2.model.entity_to_raw_schema import EntityToRawSchema + from datadog_api_client.v2.model.entity_to_related_entities import EntityToRelatedEntities + from datadog_api_client.v2.model.entity_to_schema import EntityToSchema + return { + "incidents": (EntityToIncidents,), + "oncall": (EntityToOncalls,), + "raw_schema": (EntityToRawSchema,), + "related_entities": (EntityToRelatedEntities,), + "schema": (EntityToSchema,), + } + attribute_map = { + "incidents": "incidents", + "oncall": "oncall", + "raw_schema": "rawSchema", + "related_entities": "relatedEntities", + "schema": "schema", + } + + def __init__(self_, incidents: Union[EntityToIncidents, UnsetType]=unset, oncall: Union[EntityToOncalls, UnsetType]=unset, raw_schema: Union[EntityToRawSchema, UnsetType]=unset, related_entities: Union[EntityToRelatedEntities, UnsetType]=unset, schema: Union[EntityToSchema, UnsetType]=unset, **kwargs): + """ + Entity relationships. + + :param incidents: Entity to incidents relationship. + :type incidents: EntityToIncidents, optional + + :param oncall: Entity to oncalls relationship. + :type oncall: EntityToOncalls, optional + + :param raw_schema: Entity to raw schema relationship. + :type raw_schema: EntityToRawSchema, optional + + :param related_entities: Entity to related entities relationship. + :type related_entities: EntityToRelatedEntities, optional + + :param schema: Entity to detail schema relationship. + :type schema: EntityToSchema, optional + """ + if incidents is not unset: + kwargs["incidents"] = incidents + if oncall is not unset: + kwargs["oncall"] = oncall + if raw_schema is not unset: + kwargs["raw_schema"] = raw_schema + if related_entities is not unset: + kwargs["related_entities"] = related_entities + if schema is not unset: + kwargs["schema"] = schema + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_array.py b/datadog_api_client/v2/model/entity_response_array.py new file mode 100644 index 0000000000..62780ae3f5 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.preview_entity_response_data import PreviewEntityResponseData + +class EntityResponseArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.preview_entity_response_data import PreviewEntityResponseData + return { + "data": ([PreviewEntityResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[PreviewEntityResponseData], **kwargs): + """ + Response object containing an array of entity data items. + + :param data: Array of entity response data items. + :type data: [PreviewEntityResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/entity_response_data_attributes.py b/datadog_api_client/v2/model/entity_response_data_attributes.py new file mode 100644 index 0000000000..d40fd04cee --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_attributes.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_version": (str,), + "description": (str,), + "display_name": (str,), + "kind": (str,), + "name": (str,), + "namespace": (str,), + "owner": (str,), + "properties": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tags": ([str],), + } + attribute_map = { + "api_version": "apiVersion", + "description": "description", + "display_name": "displayName", + "kind": "kind", + "name": "name", + "namespace": "namespace", + "owner": "owner", + "properties": "properties", + "tags": "tags", + } + + def __init__(self_, api_version: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, kind: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, namespace: Union[str, UnsetType]=unset, owner: Union[str, UnsetType]=unset, properties: Union[Dict[str, Any], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Entity response attributes containing core entity metadata fields. + + :param api_version: The API version of the entity schema. + :type api_version: str, optional + + :param description: A short description of the entity. + :type description: str, optional + + :param display_name: The user-friendly display name of the entity. + :type display_name: str, optional + + :param kind: The kind of the entity (e.g. service, datastore, queue). + :type kind: str, optional + + :param name: The unique name of the entity within its kind and namespace. + :type name: str, optional + + :param namespace: The namespace the entity belongs to. + :type namespace: str, optional + + :param owner: The owner of the entity, usually a team. + :type owner: str, optional + + :param properties: Additional custom properties for the entity. + :type properties: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tags: A set of custom tags assigned to the entity. + :type tags: [str], optional + """ + if api_version is not unset: + kwargs["api_version"] = api_version + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if kind is not unset: + kwargs["kind"] = kind + if name is not unset: + kwargs["name"] = name + if namespace is not unset: + kwargs["namespace"] = namespace + if owner is not unset: + kwargs["owner"] = owner + if properties is not unset: + kwargs["properties"] = properties + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_data_relationships.py b/datadog_api_client/v2/model/entity_response_data_relationships.py new file mode 100644 index 0000000000..20972c598c --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_incidents import EntityResponseDataRelationshipsIncidents + from datadog_api_client.v2.model.entity_response_data_relationships_oncalls import EntityResponseDataRelationshipsOncalls + from datadog_api_client.v2.model.entity_response_data_relationships_raw_schema import EntityResponseDataRelationshipsRawSchema + from datadog_api_client.v2.model.entity_response_data_relationships_related_entities import EntityResponseDataRelationshipsRelatedEntities + from datadog_api_client.v2.model.entity_response_data_relationships_schema import EntityResponseDataRelationshipsSchema + +class EntityResponseDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_incidents import EntityResponseDataRelationshipsIncidents + from datadog_api_client.v2.model.entity_response_data_relationships_oncalls import EntityResponseDataRelationshipsOncalls + from datadog_api_client.v2.model.entity_response_data_relationships_raw_schema import EntityResponseDataRelationshipsRawSchema + from datadog_api_client.v2.model.entity_response_data_relationships_related_entities import EntityResponseDataRelationshipsRelatedEntities + from datadog_api_client.v2.model.entity_response_data_relationships_schema import EntityResponseDataRelationshipsSchema + return { + "incidents": (EntityResponseDataRelationshipsIncidents,), + "oncalls": (EntityResponseDataRelationshipsOncalls,), + "raw_schema": (EntityResponseDataRelationshipsRawSchema,), + "related_entities": (EntityResponseDataRelationshipsRelatedEntities,), + "schema": (EntityResponseDataRelationshipsSchema,), + } + attribute_map = { + "incidents": "incidents", + "oncalls": "oncalls", + "raw_schema": "rawSchema", + "related_entities": "relatedEntities", + "schema": "schema", + } + + def __init__(self_, incidents: Union[EntityResponseDataRelationshipsIncidents, UnsetType]=unset, oncalls: Union[EntityResponseDataRelationshipsOncalls, UnsetType]=unset, raw_schema: Union[EntityResponseDataRelationshipsRawSchema, UnsetType]=unset, related_entities: Union[EntityResponseDataRelationshipsRelatedEntities, UnsetType]=unset, schema: Union[EntityResponseDataRelationshipsSchema, UnsetType]=unset, **kwargs): + """ + Entity relationships including incidents, oncalls, schemas, and related entities. + + :param incidents: Incidents relationship containing a list of incident resources associated with this entity. + :type incidents: EntityResponseDataRelationshipsIncidents, optional + + :param oncalls: Oncalls relationship containing a list of oncall resources associated with this entity. + :type oncalls: EntityResponseDataRelationshipsOncalls, optional + + :param raw_schema: Raw schema relationship linking an entity to its raw schema resource. + :type raw_schema: EntityResponseDataRelationshipsRawSchema, optional + + :param related_entities: Related entities relationship containing a list of entity references related to this entity. + :type related_entities: EntityResponseDataRelationshipsRelatedEntities, optional + + :param schema: Schema relationship linking an entity to its associated schema resource. + :type schema: EntityResponseDataRelationshipsSchema, optional + """ + if incidents is not unset: + kwargs["incidents"] = incidents + if oncalls is not unset: + kwargs["oncalls"] = oncalls + if raw_schema is not unset: + kwargs["raw_schema"] = raw_schema + if related_entities is not unset: + kwargs["related_entities"] = related_entities + if schema is not unset: + kwargs["schema"] = schema + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_incidents.py b/datadog_api_client/v2/model/entity_response_data_relationships_incidents.py new file mode 100644 index 0000000000..ec68c9511d --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_incidents.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_incidents_data_items import EntityResponseDataRelationshipsIncidentsDataItems + +class EntityResponseDataRelationshipsIncidents(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_incidents_data_items import EntityResponseDataRelationshipsIncidentsDataItems + return { + "data": ([EntityResponseDataRelationshipsIncidentsDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[EntityResponseDataRelationshipsIncidentsDataItems], UnsetType]=unset, **kwargs): + """ + Incidents relationship containing a list of incident resources associated with this entity. + + :param data: List of incident relationship data items. + :type data: [EntityResponseDataRelationshipsIncidentsDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_incidents_data_items.py b/datadog_api_client/v2/model/entity_response_data_relationships_incidents_data_items.py new file mode 100644 index 0000000000..6ce9f1f710 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_incidents_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_incidents_data_items_type import EntityResponseDataRelationshipsIncidentsDataItemsType + +class EntityResponseDataRelationshipsIncidentsDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_incidents_data_items_type import EntityResponseDataRelationshipsIncidentsDataItemsType + return { + "id": (str,), + "type": (EntityResponseDataRelationshipsIncidentsDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: EntityResponseDataRelationshipsIncidentsDataItemsType, **kwargs): + """ + Incident relationship data item containing the incident resource identifier and type. + + :param id: Incident resource unique identifier. + :type id: str + + :param type: Incident resource type. + :type type: EntityResponseDataRelationshipsIncidentsDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_incidents_data_items_type.py b/datadog_api_client/v2/model/entity_response_data_relationships_incidents_data_items_type.py new file mode 100644 index 0000000000..87c210363a --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_incidents_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseDataRelationshipsIncidentsDataItemsType(ModelSimple): + """ + Incident resource type. + + :param value: If omitted defaults to "incident". Must be one of ["incident"]. + :type value: str + """ + + allowed_values = { + "incident", + } + INCIDENT: ClassVar["EntityResponseDataRelationshipsIncidentsDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseDataRelationshipsIncidentsDataItemsType.INCIDENT = EntityResponseDataRelationshipsIncidentsDataItemsType("incident") diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_oncalls.py b/datadog_api_client/v2/model/entity_response_data_relationships_oncalls.py new file mode 100644 index 0000000000..cc3b5b8d7f --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_oncalls.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_oncalls_data_items import EntityResponseDataRelationshipsOncallsDataItems + +class EntityResponseDataRelationshipsOncalls(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_oncalls_data_items import EntityResponseDataRelationshipsOncallsDataItems + return { + "data": ([EntityResponseDataRelationshipsOncallsDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[EntityResponseDataRelationshipsOncallsDataItems], UnsetType]=unset, **kwargs): + """ + Oncalls relationship containing a list of oncall resources associated with this entity. + + :param data: List of oncall relationship data items. + :type data: [EntityResponseDataRelationshipsOncallsDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_oncalls_data_items.py b/datadog_api_client/v2/model/entity_response_data_relationships_oncalls_data_items.py new file mode 100644 index 0000000000..d431a6951c --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_oncalls_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_oncalls_data_items_type import EntityResponseDataRelationshipsOncallsDataItemsType + +class EntityResponseDataRelationshipsOncallsDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_oncalls_data_items_type import EntityResponseDataRelationshipsOncallsDataItemsType + return { + "id": (str,), + "type": (EntityResponseDataRelationshipsOncallsDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: EntityResponseDataRelationshipsOncallsDataItemsType, **kwargs): + """ + Oncall relationship data item containing the oncall resource identifier and type. + + :param id: Oncall resource unique identifier. + :type id: str + + :param type: Oncall resource type. + :type type: EntityResponseDataRelationshipsOncallsDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_oncalls_data_items_type.py b/datadog_api_client/v2/model/entity_response_data_relationships_oncalls_data_items_type.py new file mode 100644 index 0000000000..34ad1f190a --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_oncalls_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseDataRelationshipsOncallsDataItemsType(ModelSimple): + """ + Oncall resource type. + + :param value: If omitted defaults to "oncall". Must be one of ["oncall"]. + :type value: str + """ + + allowed_values = { + "oncall", + } + ONCALL: ClassVar["EntityResponseDataRelationshipsOncallsDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseDataRelationshipsOncallsDataItemsType.ONCALL = EntityResponseDataRelationshipsOncallsDataItemsType("oncall") diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_raw_schema.py b/datadog_api_client/v2/model/entity_response_data_relationships_raw_schema.py new file mode 100644 index 0000000000..a3810fb039 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_raw_schema.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_raw_schema_data import EntityResponseDataRelationshipsRawSchemaData + +class EntityResponseDataRelationshipsRawSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_raw_schema_data import EntityResponseDataRelationshipsRawSchemaData + return { + "data": (EntityResponseDataRelationshipsRawSchemaData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: EntityResponseDataRelationshipsRawSchemaData, **kwargs): + """ + Raw schema relationship linking an entity to its raw schema resource. + + :param data: Raw schema relationship data containing the raw schema resource identifier and type. + :type data: EntityResponseDataRelationshipsRawSchemaData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_raw_schema_data.py b/datadog_api_client/v2/model/entity_response_data_relationships_raw_schema_data.py new file mode 100644 index 0000000000..357a6bb6f6 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_raw_schema_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_raw_schema_data_type import EntityResponseDataRelationshipsRawSchemaDataType + +class EntityResponseDataRelationshipsRawSchemaData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_raw_schema_data_type import EntityResponseDataRelationshipsRawSchemaDataType + return { + "id": (str,), + "type": (EntityResponseDataRelationshipsRawSchemaDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: EntityResponseDataRelationshipsRawSchemaDataType, **kwargs): + """ + Raw schema relationship data containing the raw schema resource identifier and type. + + :param id: Raw schema unique identifier. + :type id: str + + :param type: Raw schema resource type. + :type type: EntityResponseDataRelationshipsRawSchemaDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_raw_schema_data_type.py b/datadog_api_client/v2/model/entity_response_data_relationships_raw_schema_data_type.py new file mode 100644 index 0000000000..5bda49f311 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_raw_schema_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseDataRelationshipsRawSchemaDataType(ModelSimple): + """ + Raw schema resource type. + + :param value: If omitted defaults to "rawSchema". Must be one of ["rawSchema"]. + :type value: str + """ + + allowed_values = { + "rawSchema", + } + RAWSCHEMA: ClassVar["EntityResponseDataRelationshipsRawSchemaDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseDataRelationshipsRawSchemaDataType.RAWSCHEMA = EntityResponseDataRelationshipsRawSchemaDataType("rawSchema") diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_related_entities.py b/datadog_api_client/v2/model/entity_response_data_relationships_related_entities.py new file mode 100644 index 0000000000..dd26297a2b --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_related_entities.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_related_entities_data_items import EntityResponseDataRelationshipsRelatedEntitiesDataItems + +class EntityResponseDataRelationshipsRelatedEntities(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_related_entities_data_items import EntityResponseDataRelationshipsRelatedEntitiesDataItems + return { + "data": ([EntityResponseDataRelationshipsRelatedEntitiesDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[EntityResponseDataRelationshipsRelatedEntitiesDataItems], UnsetType]=unset, **kwargs): + """ + Related entities relationship containing a list of entity references related to this entity. + + :param data: List of related entity relationship data items. + :type data: [EntityResponseDataRelationshipsRelatedEntitiesDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_related_entities_data_items.py b/datadog_api_client/v2/model/entity_response_data_relationships_related_entities_data_items.py new file mode 100644 index 0000000000..dcee7fa07b --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_related_entities_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_related_entities_data_items_type import EntityResponseDataRelationshipsRelatedEntitiesDataItemsType + +class EntityResponseDataRelationshipsRelatedEntitiesDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_related_entities_data_items_type import EntityResponseDataRelationshipsRelatedEntitiesDataItemsType + return { + "id": (str,), + "type": (EntityResponseDataRelationshipsRelatedEntitiesDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: EntityResponseDataRelationshipsRelatedEntitiesDataItemsType, **kwargs): + """ + Related entity relationship data item containing the related entity resource identifier and type. + + :param id: Related entity unique identifier. + :type id: str + + :param type: Related entity resource type. + :type type: EntityResponseDataRelationshipsRelatedEntitiesDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_related_entities_data_items_type.py b/datadog_api_client/v2/model/entity_response_data_relationships_related_entities_data_items_type.py new file mode 100644 index 0000000000..185df97525 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_related_entities_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseDataRelationshipsRelatedEntitiesDataItemsType(ModelSimple): + """ + Related entity resource type. + + :param value: If omitted defaults to "relatedEntity". Must be one of ["relatedEntity"]. + :type value: str + """ + + allowed_values = { + "relatedEntity", + } + RELATEDENTITY: ClassVar["EntityResponseDataRelationshipsRelatedEntitiesDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseDataRelationshipsRelatedEntitiesDataItemsType.RELATEDENTITY = EntityResponseDataRelationshipsRelatedEntitiesDataItemsType("relatedEntity") diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_schema.py b/datadog_api_client/v2/model/entity_response_data_relationships_schema.py new file mode 100644 index 0000000000..e99764f865 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_schema.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_schema_data import EntityResponseDataRelationshipsSchemaData + +class EntityResponseDataRelationshipsSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_schema_data import EntityResponseDataRelationshipsSchemaData + return { + "data": (EntityResponseDataRelationshipsSchemaData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: EntityResponseDataRelationshipsSchemaData, **kwargs): + """ + Schema relationship linking an entity to its associated schema resource. + + :param data: Schema relationship data containing the schema resource identifier and type. + :type data: EntityResponseDataRelationshipsSchemaData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_schema_data.py b/datadog_api_client/v2/model/entity_response_data_relationships_schema_data.py new file mode 100644 index 0000000000..c8ee60df7a --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_schema_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_relationships_schema_data_type import EntityResponseDataRelationshipsSchemaDataType + +class EntityResponseDataRelationshipsSchemaData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_relationships_schema_data_type import EntityResponseDataRelationshipsSchemaDataType + return { + "id": (str,), + "type": (EntityResponseDataRelationshipsSchemaDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: EntityResponseDataRelationshipsSchemaDataType, **kwargs): + """ + Schema relationship data containing the schema resource identifier and type. + + :param id: Entity schema unique identifier. + :type id: str + + :param type: Schema resource type. + :type type: EntityResponseDataRelationshipsSchemaDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/entity_response_data_relationships_schema_data_type.py b/datadog_api_client/v2/model/entity_response_data_relationships_schema_data_type.py new file mode 100644 index 0000000000..dd8b102046 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_relationships_schema_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseDataRelationshipsSchemaDataType(ModelSimple): + """ + Schema resource type. + + :param value: If omitted defaults to "schema". Must be one of ["schema"]. + :type value: str + """ + + allowed_values = { + "schema", + } + SCHEMA: ClassVar["EntityResponseDataRelationshipsSchemaDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseDataRelationshipsSchemaDataType.SCHEMA = EntityResponseDataRelationshipsSchemaDataType("schema") diff --git a/datadog_api_client/v2/model/entity_response_data_type.py b/datadog_api_client/v2/model/entity_response_data_type.py new file mode 100644 index 0000000000..6fd6b9fb79 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseDataType(ModelSimple): + """ + Entity resource type. + + :param value: If omitted defaults to "entity". Must be one of ["entity"]. + :type value: str + """ + + allowed_values = { + "entity", + } + ENTITY: ClassVar["EntityResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseDataType.ENTITY = EntityResponseDataType("entity") diff --git a/datadog_api_client/v2/model/entity_response_included_incident.py b/datadog_api_client/v2/model/entity_response_included_incident.py new file mode 100644 index 0000000000..5466f894a5 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_incident.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_included_related_incident_attributes import EntityResponseIncludedRelatedIncidentAttributes + from datadog_api_client.v2.model.entity_response_included_incident_type import EntityResponseIncludedIncidentType + +class EntityResponseIncludedIncident(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_included_related_incident_attributes import EntityResponseIncludedRelatedIncidentAttributes + from datadog_api_client.v2.model.entity_response_included_incident_type import EntityResponseIncludedIncidentType + return { + "attributes": (EntityResponseIncludedRelatedIncidentAttributes,), + "id": (str,), + "type": (EntityResponseIncludedIncidentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[EntityResponseIncludedRelatedIncidentAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[EntityResponseIncludedIncidentType, UnsetType]=unset, **kwargs): + """ + Included incident. + + :param attributes: Incident attributes. + :type attributes: EntityResponseIncludedRelatedIncidentAttributes, optional + + :param id: Incident ID. + :type id: str, optional + + :param type: Incident description. + :type type: EntityResponseIncludedIncidentType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_incident_type.py b/datadog_api_client/v2/model/entity_response_included_incident_type.py new file mode 100644 index 0000000000..87b0817917 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_incident_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseIncludedIncidentType(ModelSimple): + """ + Incident description. + + :param value: If omitted defaults to "incident". Must be one of ["incident"]. + :type value: str + """ + + allowed_values = { + "incident", + } + INCIDENT: ClassVar["EntityResponseIncludedIncidentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseIncludedIncidentType.INCIDENT = EntityResponseIncludedIncidentType("incident") diff --git a/datadog_api_client/v2/model/entity_response_included_oncall.py b/datadog_api_client/v2/model/entity_response_included_oncall.py new file mode 100644 index 0000000000..cfec133854 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_oncall.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_included_related_oncall_attributes import EntityResponseIncludedRelatedOncallAttributes + from datadog_api_client.v2.model.entity_response_included_oncall_type import EntityResponseIncludedOncallType + +class EntityResponseIncludedOncall(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_included_related_oncall_attributes import EntityResponseIncludedRelatedOncallAttributes + from datadog_api_client.v2.model.entity_response_included_oncall_type import EntityResponseIncludedOncallType + return { + "attributes": (EntityResponseIncludedRelatedOncallAttributes,), + "id": (str,), + "type": (EntityResponseIncludedOncallType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[EntityResponseIncludedRelatedOncallAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[EntityResponseIncludedOncallType, UnsetType]=unset, **kwargs): + """ + Included oncall. + + :param attributes: Included related oncall attributes. + :type attributes: EntityResponseIncludedRelatedOncallAttributes, optional + + :param id: Oncall ID. + :type id: str, optional + + :param type: Oncall type. + :type type: EntityResponseIncludedOncallType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_oncall_type.py b/datadog_api_client/v2/model/entity_response_included_oncall_type.py new file mode 100644 index 0000000000..e1a468748f --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_oncall_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseIncludedOncallType(ModelSimple): + """ + Oncall type. + + :param value: If omitted defaults to "oncall". Must be one of ["oncall"]. + :type value: str + """ + + allowed_values = { + "oncall", + } + ONCALL: ClassVar["EntityResponseIncludedOncallType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseIncludedOncallType.ONCALL = EntityResponseIncludedOncallType("oncall") diff --git a/datadog_api_client/v2/model/entity_response_included_raw_schema.py b/datadog_api_client/v2/model/entity_response_included_raw_schema.py new file mode 100644 index 0000000000..374b467578 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_raw_schema.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_included_raw_schema_attributes import EntityResponseIncludedRawSchemaAttributes + from datadog_api_client.v2.model.entity_response_included_raw_schema_type import EntityResponseIncludedRawSchemaType + +class EntityResponseIncludedRawSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_included_raw_schema_attributes import EntityResponseIncludedRawSchemaAttributes + from datadog_api_client.v2.model.entity_response_included_raw_schema_type import EntityResponseIncludedRawSchemaType + return { + "attributes": (EntityResponseIncludedRawSchemaAttributes,), + "id": (str,), + "type": (EntityResponseIncludedRawSchemaType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[EntityResponseIncludedRawSchemaAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[EntityResponseIncludedRawSchemaType, UnsetType]=unset, **kwargs): + """ + Included raw schema. + + :param attributes: Included raw schema attributes. + :type attributes: EntityResponseIncludedRawSchemaAttributes, optional + + :param id: Raw schema ID. + :type id: str, optional + + :param type: Raw schema type. + :type type: EntityResponseIncludedRawSchemaType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_raw_schema_attributes.py b/datadog_api_client/v2/model/entity_response_included_raw_schema_attributes.py new file mode 100644 index 0000000000..6a6052c941 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_raw_schema_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityResponseIncludedRawSchemaAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "raw_schema": (str,), + } + attribute_map = { + "raw_schema": "rawSchema", + } + + def __init__(self_, raw_schema: Union[str, UnsetType]=unset, **kwargs): + """ + Included raw schema attributes. + + :param raw_schema: Schema from user input in base64 encoding. + :type raw_schema: str, optional + """ + if raw_schema is not unset: + kwargs["raw_schema"] = raw_schema + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_raw_schema_type.py b/datadog_api_client/v2/model/entity_response_included_raw_schema_type.py new file mode 100644 index 0000000000..51706ebcaf --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_raw_schema_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseIncludedRawSchemaType(ModelSimple): + """ + Raw schema type. + + :param value: If omitted defaults to "rawSchema". Must be one of ["rawSchema"]. + :type value: str + """ + + allowed_values = { + "rawSchema", + } + RAW_SCHEMA: ClassVar["EntityResponseIncludedRawSchemaType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseIncludedRawSchemaType.RAW_SCHEMA = EntityResponseIncludedRawSchemaType("rawSchema") diff --git a/datadog_api_client/v2/model/entity_response_included_related_entity.py b/datadog_api_client/v2/model/entity_response_included_related_entity.py new file mode 100644 index 0000000000..3b5d8dd394 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_related_entity.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_included_related_entity_attributes import EntityResponseIncludedRelatedEntityAttributes + from datadog_api_client.v2.model.entity_response_included_related_entity_meta import EntityResponseIncludedRelatedEntityMeta + from datadog_api_client.v2.model.entity_response_included_related_entity_type import EntityResponseIncludedRelatedEntityType + +class EntityResponseIncludedRelatedEntity(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_included_related_entity_attributes import EntityResponseIncludedRelatedEntityAttributes + from datadog_api_client.v2.model.entity_response_included_related_entity_meta import EntityResponseIncludedRelatedEntityMeta + from datadog_api_client.v2.model.entity_response_included_related_entity_type import EntityResponseIncludedRelatedEntityType + return { + "attributes": (EntityResponseIncludedRelatedEntityAttributes,), + "id": (str,), + "meta": (EntityResponseIncludedRelatedEntityMeta,), + "type": (EntityResponseIncludedRelatedEntityType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "type": "type", + } + + def __init__(self_, attributes: Union[EntityResponseIncludedRelatedEntityAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, meta: Union[EntityResponseIncludedRelatedEntityMeta, UnsetType]=unset, type: Union[EntityResponseIncludedRelatedEntityType, UnsetType]=unset, **kwargs): + """ + Included related entity. + + :param attributes: Related entity attributes. + :type attributes: EntityResponseIncludedRelatedEntityAttributes, optional + + :param id: Entity UUID. + :type id: str, optional + + :param meta: Included related entity meta. + :type meta: EntityResponseIncludedRelatedEntityMeta, optional + + :param type: Related entity. + :type type: EntityResponseIncludedRelatedEntityType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if meta is not unset: + kwargs["meta"] = meta + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_related_entity_attributes.py b/datadog_api_client/v2/model/entity_response_included_related_entity_attributes.py new file mode 100644 index 0000000000..36ef3fd61b --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_related_entity_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityResponseIncludedRelatedEntityAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "kind": (str,), + "name": (str,), + "namespace": (str,), + "type": (str,), + } + attribute_map = { + "kind": "kind", + "name": "name", + "namespace": "namespace", + "type": "type", + } + + def __init__(self_, kind: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, namespace: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Related entity attributes. + + :param kind: Entity kind. + :type kind: str, optional + + :param name: Entity name. + :type name: str, optional + + :param namespace: Entity namespace. + :type namespace: str, optional + + :param type: Entity relation type to the associated entity. + :type type: str, optional + """ + if kind is not unset: + kwargs["kind"] = kind + if name is not unset: + kwargs["name"] = name + if namespace is not unset: + kwargs["namespace"] = namespace + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_related_entity_meta.py b/datadog_api_client/v2/model/entity_response_included_related_entity_meta.py new file mode 100644 index 0000000000..9131b0c6c8 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_related_entity_meta.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityResponseIncludedRelatedEntityMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "defined_by": (str,), + "modified_at": (datetime,), + "source": (str,), + } + attribute_map = { + "created_at": "createdAt", + "defined_by": "defined_by", + "modified_at": "modifiedAt", + "source": "source", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, defined_by: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, source: Union[str, UnsetType]=unset, **kwargs): + """ + Included related entity meta. + + :param created_at: Entity creation time. + :type created_at: datetime, optional + + :param defined_by: Entity relation defined by. + :type defined_by: str, optional + + :param modified_at: Entity modification time. + :type modified_at: datetime, optional + + :param source: Entity relation source. + :type source: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if defined_by is not unset: + kwargs["defined_by"] = defined_by + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if source is not unset: + kwargs["source"] = source + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_related_entity_type.py b/datadog_api_client/v2/model/entity_response_included_related_entity_type.py new file mode 100644 index 0000000000..87ebcb342b --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_related_entity_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseIncludedRelatedEntityType(ModelSimple): + """ + Related entity. + + :param value: If omitted defaults to "relatedEntity". Must be one of ["relatedEntity"]. + :type value: str + """ + + allowed_values = { + "relatedEntity", + } + RELATED_ENTITY: ClassVar["EntityResponseIncludedRelatedEntityType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseIncludedRelatedEntityType.RELATED_ENTITY = EntityResponseIncludedRelatedEntityType("relatedEntity") diff --git a/datadog_api_client/v2/model/entity_response_included_related_incident_attributes.py b/datadog_api_client/v2/model/entity_response_included_related_incident_attributes.py new file mode 100644 index 0000000000..cee865dabe --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_related_incident_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityResponseIncludedRelatedIncidentAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "html_url": (str,), + "provider": (str,), + "status": (str,), + "title": (str,), + } + attribute_map = { + "created_at": "createdAt", + "html_url": "htmlURL", + "provider": "provider", + "status": "status", + "title": "title", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, html_url: Union[str, UnsetType]=unset, provider: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Incident attributes. + + :param created_at: Incident creation time. + :type created_at: datetime, optional + + :param html_url: Incident URL. + :type html_url: str, optional + + :param provider: Incident provider. + :type provider: str, optional + + :param status: Incident status. + :type status: str, optional + + :param title: Incident title. + :type title: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if html_url is not unset: + kwargs["html_url"] = html_url + if provider is not unset: + kwargs["provider"] = provider + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_related_oncall_attributes.py b/datadog_api_client/v2/model/entity_response_included_related_oncall_attributes.py new file mode 100644 index 0000000000..40fd556a04 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_related_oncall_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_included_related_oncall_escalation_item import EntityResponseIncludedRelatedOncallEscalationItem + +class EntityResponseIncludedRelatedOncallAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_included_related_oncall_escalation_item import EntityResponseIncludedRelatedOncallEscalationItem + return { + "escalations": ([EntityResponseIncludedRelatedOncallEscalationItem],), + "provider": (str,), + } + attribute_map = { + "escalations": "escalations", + "provider": "provider", + } + + def __init__(self_, escalations: Union[List[EntityResponseIncludedRelatedOncallEscalationItem], UnsetType]=unset, provider: Union[str, UnsetType]=unset, **kwargs): + """ + Included related oncall attributes. + + :param escalations: Oncall escalations. + :type escalations: [EntityResponseIncludedRelatedOncallEscalationItem], optional + + :param provider: Oncall provider. + :type provider: str, optional + """ + if escalations is not unset: + kwargs["escalations"] = escalations + if provider is not unset: + kwargs["provider"] = provider + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_related_oncall_escalation_item.py b/datadog_api_client/v2/model/entity_response_included_related_oncall_escalation_item.py new file mode 100644 index 0000000000..7b2b6c7887 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_related_oncall_escalation_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityResponseIncludedRelatedOncallEscalationItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "escalation_level": (int,), + "name": (str,), + } + attribute_map = { + "email": "email", + "escalation_level": "escalationLevel", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, escalation_level: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Oncall escalation. + + :param email: Oncall email. + :type email: str, optional + + :param escalation_level: Oncall level. + :type escalation_level: int, optional + + :param name: Oncall name. + :type name: str, optional + """ + if email is not unset: + kwargs["email"] = email + if escalation_level is not unset: + kwargs["escalation_level"] = escalation_level + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_schema.py b/datadog_api_client/v2/model/entity_response_included_schema.py new file mode 100644 index 0000000000..f5d9bcaf86 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_schema.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_included_schema_attributes import EntityResponseIncludedSchemaAttributes + from datadog_api_client.v2.model.entity_response_included_schema_type import EntityResponseIncludedSchemaType + from datadog_api_client.v2.model.entity_v3_service import EntityV3Service + from datadog_api_client.v2.model.entity_v3_datastore import EntityV3Datastore + from datadog_api_client.v2.model.entity_v3_queue import EntityV3Queue + from datadog_api_client.v2.model.entity_v3_system import EntityV3System + from datadog_api_client.v2.model.entity_v3_api import EntityV3API + +class EntityResponseIncludedSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_included_schema_attributes import EntityResponseIncludedSchemaAttributes + from datadog_api_client.v2.model.entity_response_included_schema_type import EntityResponseIncludedSchemaType + return { + "attributes": (EntityResponseIncludedSchemaAttributes,), + "id": (str,), + "type": (EntityResponseIncludedSchemaType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[EntityResponseIncludedSchemaAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[EntityResponseIncludedSchemaType, UnsetType]=unset, **kwargs): + """ + Included detail entity schema. + + :param attributes: Included schema. + :type attributes: EntityResponseIncludedSchemaAttributes, optional + + :param id: Entity ID. + :type id: str, optional + + :param type: Schema type. + :type type: EntityResponseIncludedSchemaType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_schema_attributes.py b/datadog_api_client/v2/model/entity_response_included_schema_attributes.py new file mode 100644 index 0000000000..a769ce4cc3 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_schema_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3 import EntityV3 + from datadog_api_client.v2.model.entity_v3_service import EntityV3Service + from datadog_api_client.v2.model.entity_v3_datastore import EntityV3Datastore + from datadog_api_client.v2.model.entity_v3_queue import EntityV3Queue + from datadog_api_client.v2.model.entity_v3_system import EntityV3System + from datadog_api_client.v2.model.entity_v3_api import EntityV3API + +class EntityResponseIncludedSchemaAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3 import EntityV3 + return { + "schema": (EntityV3,), + } + attribute_map = { + "schema": "schema", + } + + def __init__(self_, schema: Union[EntityV3, EntityV3Service, EntityV3Datastore, EntityV3Queue, EntityV3System, EntityV3API, UnsetType]=unset, **kwargs): + """ + Included schema. + + :param schema: Entity schema v3. + :type schema: EntityV3, optional + """ + if schema is not unset: + kwargs["schema"] = schema + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_response_included_schema_type.py b/datadog_api_client/v2/model/entity_response_included_schema_type.py new file mode 100644 index 0000000000..f2d2f6f0a2 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_included_schema_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityResponseIncludedSchemaType(ModelSimple): + """ + Schema type. + + :param value: If omitted defaults to "schema". Must be one of ["schema"]. + :type value: str + """ + + allowed_values = { + "schema", + } + SCHEMA: ClassVar["EntityResponseIncludedSchemaType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityResponseIncludedSchemaType.SCHEMA = EntityResponseIncludedSchemaType("schema") diff --git a/datadog_api_client/v2/model/entity_response_meta.py b/datadog_api_client/v2/model/entity_response_meta.py new file mode 100644 index 0000000000..8c5d4a9409 --- /dev/null +++ b/datadog_api_client/v2/model/entity_response_meta.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "include_count": (int,), + } + attribute_map = { + "count": "count", + "include_count": "includeCount", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, include_count: Union[int, UnsetType]=unset, **kwargs): + """ + Entity metadata. + + :param count: Total entities count. + :type count: int, optional + + :param include_count: Total included data count. + :type include_count: int, optional + """ + if count is not unset: + kwargs["count"] = count + if include_count is not unset: + kwargs["include_count"] = include_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_to_incidents.py b/datadog_api_client/v2/model/entity_to_incidents.py new file mode 100644 index 0000000000..aba9da7062 --- /dev/null +++ b/datadog_api_client/v2/model/entity_to_incidents.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_item import RelationshipItem + +class EntityToIncidents(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_item import RelationshipItem + return { + "data": ([RelationshipItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RelationshipItem], UnsetType]=unset, **kwargs): + """ + Entity to incidents relationship. + + :param data: Relationships. + :type data: [RelationshipItem], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_to_oncalls.py b/datadog_api_client/v2/model/entity_to_oncalls.py new file mode 100644 index 0000000000..b40b674d01 --- /dev/null +++ b/datadog_api_client/v2/model/entity_to_oncalls.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_item import RelationshipItem + +class EntityToOncalls(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_item import RelationshipItem + return { + "data": ([RelationshipItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RelationshipItem], UnsetType]=unset, **kwargs): + """ + Entity to oncalls relationship. + + :param data: Relationships. + :type data: [RelationshipItem], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_to_raw_schema.py b/datadog_api_client/v2/model/entity_to_raw_schema.py new file mode 100644 index 0000000000..50fb4b2bc3 --- /dev/null +++ b/datadog_api_client/v2/model/entity_to_raw_schema.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_item import RelationshipItem + +class EntityToRawSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_item import RelationshipItem + return { + "data": (RelationshipItem,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RelationshipItem, UnsetType]=unset, **kwargs): + """ + Entity to raw schema relationship. + + :param data: Relationship entry. + :type data: RelationshipItem, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_to_related_entities.py b/datadog_api_client/v2/model/entity_to_related_entities.py new file mode 100644 index 0000000000..a33fd66a7f --- /dev/null +++ b/datadog_api_client/v2/model/entity_to_related_entities.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_item import RelationshipItem + +class EntityToRelatedEntities(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_item import RelationshipItem + return { + "data": ([RelationshipItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RelationshipItem], UnsetType]=unset, **kwargs): + """ + Entity to related entities relationship. + + :param data: Relationships. + :type data: [RelationshipItem], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_to_schema.py b/datadog_api_client/v2/model/entity_to_schema.py new file mode 100644 index 0000000000..b127f92824 --- /dev/null +++ b/datadog_api_client/v2/model/entity_to_schema.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_item import RelationshipItem + +class EntityToSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_item import RelationshipItem + return { + "data": (RelationshipItem,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RelationshipItem, UnsetType]=unset, **kwargs): + """ + Entity to detail schema relationship. + + :param data: Relationship entry. + :type data: RelationshipItem, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3.py b/datadog_api_client/v2/model/entity_v3.py new file mode 100644 index 0000000000..2ad1346f36 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Entity schema v3. + + :param api_version: The version of the schema data that was used to populate this entity's data. This could be via the API, Terraform, or YAML file in a repository. The field is known as schema-version in the previous version. + :type api_version: EntityV3APIVersion + + :param datadog: Datadog product integrations for the service entity. + :type datadog: EntityV3ServiceDatadog, optional + + :param extensions: Custom extensions. This is the free-formed field to send client-side metadata. No Datadog features are affected by this field. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: A base schema for defining third-party integrations. + :type integrations: EntityV3Integrations, optional + + :param kind: The definition of Entity V3 Service Kind object. + :type kind: EntityV3ServiceKind + + :param metadata: The definition of Entity V3 Metadata object. + :type metadata: EntityV3Metadata + + :param spec: The definition of Entity V3 Service Spec object. + :type spec: EntityV3ServiceSpec, 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.entity_v3_service import EntityV3Service + from datadog_api_client.v2.model.entity_v3_datastore import EntityV3Datastore + from datadog_api_client.v2.model.entity_v3_queue import EntityV3Queue + from datadog_api_client.v2.model.entity_v3_system import EntityV3System + from datadog_api_client.v2.model.entity_v3_api import EntityV3API + return { + "oneOf": [ + EntityV3Service, + EntityV3Datastore, + EntityV3Queue, + EntityV3System, + EntityV3API, + ], + } diff --git a/datadog_api_client/v2/model/entity_v3_api.py b/datadog_api_client/v2/model/entity_v3_api.py new file mode 100644 index 0000000000..f28d254b33 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_api.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_api_datadog import EntityV3APIDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_api_kind import EntityV3APIKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_api_spec import EntityV3APISpec + from datadog_api_client.v2.model.entity_v3_api_spec_interface_file_ref import EntityV3APISpecInterfaceFileRef + from datadog_api_client.v2.model.entity_v3_api_spec_interface_definition import EntityV3APISpecInterfaceDefinition + +class EntityV3API(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_api_datadog import EntityV3APIDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_api_kind import EntityV3APIKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_api_spec import EntityV3APISpec + return { + "api_version": (EntityV3APIVersion,), + "datadog": (EntityV3APIDatadog,), + "extensions": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "integrations": (EntityV3Integrations,), + "kind": (EntityV3APIKind,), + "metadata": (EntityV3Metadata,), + "spec": (EntityV3APISpec,), + } + attribute_map = { + "api_version": "apiVersion", + "datadog": "datadog", + "extensions": "extensions", + "integrations": "integrations", + "kind": "kind", + "metadata": "metadata", + "spec": "spec", + } + + def __init__(self_, api_version: EntityV3APIVersion, kind: EntityV3APIKind, metadata: EntityV3Metadata, datadog: Union[EntityV3APIDatadog, UnsetType]=unset, extensions: Union[Dict[str, Any], UnsetType]=unset, integrations: Union[EntityV3Integrations, UnsetType]=unset, spec: Union[EntityV3APISpec, UnsetType]=unset, **kwargs): + """ + Schema for API entities. + + :param api_version: The version of the schema data that was used to populate this entity's data. This could be via the API, Terraform, or YAML file in a repository. The field is known as schema-version in the previous version. + :type api_version: EntityV3APIVersion + + :param datadog: Datadog product integrations for the API entity. + :type datadog: EntityV3APIDatadog, optional + + :param extensions: Custom extensions. This is the free-formed field to send client-side metadata. No Datadog features are affected by this field. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: A base schema for defining third-party integrations. + :type integrations: EntityV3Integrations, optional + + :param kind: The definition of Entity V3 API Kind object. + :type kind: EntityV3APIKind + + :param metadata: The definition of Entity V3 Metadata object. + :type metadata: EntityV3Metadata + + :param spec: The definition of Entity V3 API Spec object. + :type spec: EntityV3APISpec, optional + """ + if datadog is not unset: + kwargs["datadog"] = datadog + if extensions is not unset: + kwargs["extensions"] = extensions + if integrations is not unset: + kwargs["integrations"] = integrations + if spec is not unset: + kwargs["spec"] = spec + super().__init__(kwargs) + + + self_.api_version = api_version + self_.kind = kind + self_.metadata = metadata diff --git a/datadog_api_client/v2/model/entity_v3_api_datadog.py b/datadog_api_client/v2/model/entity_v3_api_datadog.py new file mode 100644 index 0000000000..ad1db1106e --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_api_datadog.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_datadog_code_location_item import EntityV3DatadogCodeLocationItem + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + from datadog_api_client.v2.model.entity_v3_datadog_pipelines import EntityV3DatadogPipelines + +class EntityV3APIDatadog(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_datadog_code_location_item import EntityV3DatadogCodeLocationItem + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + from datadog_api_client.v2.model.entity_v3_datadog_pipelines import EntityV3DatadogPipelines + return { + "code_locations": ([EntityV3DatadogCodeLocationItem],), + "events": ([EntityV3DatadogEventItem],), + "logs": ([EntityV3DatadogLogItem],), + "performance_data": (EntityV3DatadogPerformance,), + "pipelines": (EntityV3DatadogPipelines,), + } + attribute_map = { + "code_locations": "codeLocations", + "events": "events", + "logs": "logs", + "performance_data": "performanceData", + "pipelines": "pipelines", + } + + def __init__(self_, code_locations: Union[List[EntityV3DatadogCodeLocationItem], UnsetType]=unset, events: Union[List[EntityV3DatadogEventItem], UnsetType]=unset, logs: Union[List[EntityV3DatadogLogItem], UnsetType]=unset, performance_data: Union[EntityV3DatadogPerformance, UnsetType]=unset, pipelines: Union[EntityV3DatadogPipelines, UnsetType]=unset, **kwargs): + """ + Datadog product integrations for the API entity. + + :param code_locations: Schema for mapping source code locations to an entity. + :type code_locations: [EntityV3DatadogCodeLocationItem], optional + + :param events: Events associations. + :type events: [EntityV3DatadogEventItem], optional + + :param logs: Logs association. + :type logs: [EntityV3DatadogLogItem], optional + + :param performance_data: Performance stats association. + :type performance_data: EntityV3DatadogPerformance, optional + + :param pipelines: CI Pipelines association. + :type pipelines: EntityV3DatadogPipelines, optional + """ + if code_locations is not unset: + kwargs["code_locations"] = code_locations + if events is not unset: + kwargs["events"] = events + if logs is not unset: + kwargs["logs"] = logs + if performance_data is not unset: + kwargs["performance_data"] = performance_data + if pipelines is not unset: + kwargs["pipelines"] = pipelines + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_api_kind.py b/datadog_api_client/v2/model/entity_v3_api_kind.py new file mode 100644 index 0000000000..909636576b --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_api_kind.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityV3APIKind(ModelSimple): + """ + The definition of Entity V3 API Kind object. + + :param value: If omitted defaults to "api". Must be one of ["api"]. + :type value: str + """ + + allowed_values = { + "api", + } + API: ClassVar["EntityV3APIKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityV3APIKind.API = EntityV3APIKind("api") diff --git a/datadog_api_client/v2/model/entity_v3_api_spec.py b/datadog_api_client/v2/model/entity_v3_api_spec.py new file mode 100644 index 0000000000..df95321e20 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_api_spec.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_api_spec_interface import EntityV3APISpecInterface + from datadog_api_client.v2.model.entity_v3_api_spec_interface_file_ref import EntityV3APISpecInterfaceFileRef + from datadog_api_client.v2.model.entity_v3_api_spec_interface_definition import EntityV3APISpecInterfaceDefinition + +class EntityV3APISpec(ModelNormal): + validations = { + "lifecycle": { + "min_length": 1, + }, + "tier": { + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_api_spec_interface import EntityV3APISpecInterface + return { + "implemented_by": ([str],), + "interface": (EntityV3APISpecInterface,), + "lifecycle": (str,), + "tier": (str,), + "type": (str,), + } + attribute_map = { + "implemented_by": "implementedBy", + "interface": "interface", + "lifecycle": "lifecycle", + "tier": "tier", + "type": "type", + } + + def __init__(self_, implemented_by: Union[List[str], UnsetType]=unset, interface: Union[EntityV3APISpecInterface, EntityV3APISpecInterfaceFileRef, EntityV3APISpecInterfaceDefinition, UnsetType]=unset, lifecycle: Union[str, UnsetType]=unset, tier: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of Entity V3 API Spec object. + + :param implemented_by: Services which implemented the API. + :type implemented_by: [str], optional + + :param interface: The API definition. + :type interface: EntityV3APISpecInterface, optional + + :param lifecycle: The lifecycle state of the component. + :type lifecycle: str, optional + + :param tier: The importance of the component. + :type tier: str, optional + + :param type: The type of API. + :type type: str, optional + """ + if implemented_by is not unset: + kwargs["implemented_by"] = implemented_by + if interface is not unset: + kwargs["interface"] = interface + if lifecycle is not unset: + kwargs["lifecycle"] = lifecycle + if tier is not unset: + kwargs["tier"] = tier + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_api_spec_interface.py b/datadog_api_client/v2/model/entity_v3_api_spec_interface.py new file mode 100644 index 0000000000..d089cabc03 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_api_spec_interface.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3APISpecInterface(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The API definition. + + :param file_ref: The reference to the API definition file. + :type file_ref: str, optional + + :param definition: The API definition. + :type definition: dict, 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.entity_v3_api_spec_interface_file_ref import EntityV3APISpecInterfaceFileRef + from datadog_api_client.v2.model.entity_v3_api_spec_interface_definition import EntityV3APISpecInterfaceDefinition + return { + "oneOf": [ + EntityV3APISpecInterfaceFileRef, + EntityV3APISpecInterfaceDefinition, + ], + } diff --git a/datadog_api_client/v2/model/entity_v3_api_spec_interface_definition.py b/datadog_api_client/v2/model/entity_v3_api_spec_interface_definition.py new file mode 100644 index 0000000000..03e4e4e352 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_api_spec_interface_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3APISpecInterfaceDefinition(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "definition": (dict,), + } + attribute_map = { + "definition": "definition", + } + + def __init__(self_, definition: Union[dict, UnsetType]=unset, **kwargs): + """ + The definition of ``EntityV3APISpecInterfaceDefinition`` object. + + :param definition: The API definition. + :type definition: dict, optional + """ + if definition is not unset: + kwargs["definition"] = definition + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_api_spec_interface_file_ref.py b/datadog_api_client/v2/model/entity_v3_api_spec_interface_file_ref.py new file mode 100644 index 0000000000..a9d9b0e564 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_api_spec_interface_file_ref.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3APISpecInterfaceFileRef(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "file_ref": (str,), + } + attribute_map = { + "file_ref": "fileRef", + } + + def __init__(self_, file_ref: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``EntityV3APISpecInterfaceFileRef`` object. + + :param file_ref: The reference to the API definition file. + :type file_ref: str, optional + """ + if file_ref is not unset: + kwargs["file_ref"] = file_ref + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_api_version.py b/datadog_api_client/v2/model/entity_v3_api_version.py new file mode 100644 index 0000000000..cbcc2b7ed4 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_api_version.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityV3APIVersion(ModelSimple): + """ + The version of the schema data that was used to populate this entity's data. This could be via the API, Terraform, or YAML file in a repository. The field is known as schema-version in the previous version. + + :param value: Must be one of ["v3", "v2.2", "v2.1", "v2"]. + :type value: str + """ + + allowed_values = { + "v3", + "v2.2", + "v2.1", + "v2", + } + V3: ClassVar["EntityV3APIVersion"] + V2_2: ClassVar["EntityV3APIVersion"] + V2_1: ClassVar["EntityV3APIVersion"] + V2: ClassVar["EntityV3APIVersion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityV3APIVersion.V3 = EntityV3APIVersion("v3") +EntityV3APIVersion.V2_2 = EntityV3APIVersion("v2.2") +EntityV3APIVersion.V2_1 = EntityV3APIVersion("v2.1") +EntityV3APIVersion.V2 = EntityV3APIVersion("v2") diff --git a/datadog_api_client/v2/model/entity_v3_datadog_code_location_item.py b/datadog_api_client/v2/model/entity_v3_datadog_code_location_item.py new file mode 100644 index 0000000000..be84baad2e --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datadog_code_location_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3DatadogCodeLocationItem(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "paths": ([str],), + "repository_url": (str,), + } + attribute_map = { + "paths": "paths", + "repository_url": "repositoryURL", + } + + def __init__(self_, paths: Union[List[str], UnsetType]=unset, repository_url: Union[str, UnsetType]=unset, **kwargs): + """ + Code location item. + + :param paths: The paths (glob) to the source code of the service. + :type paths: [str], optional + + :param repository_url: The repository path of the source code of the entity. + :type repository_url: str, optional + """ + if paths is not unset: + kwargs["paths"] = paths + if repository_url is not unset: + kwargs["repository_url"] = repository_url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_datadog_event_item.py b/datadog_api_client/v2/model/entity_v3_datadog_event_item.py new file mode 100644 index 0000000000..84c48d8d21 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datadog_event_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3DatadogEventItem(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "name": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "query": "query", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Events association item. + + :param name: The name of the query. + :type name: str, optional + + :param query: The query to run. + :type query: str, optional + """ + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_datadog_integration_opsgenie.py b/datadog_api_client/v2/model/entity_v3_datadog_integration_opsgenie.py new file mode 100644 index 0000000000..c02d72076e --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datadog_integration_opsgenie.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3DatadogIntegrationOpsgenie(ModelNormal): + validations = { + "region": { + "min_length": 1, + }, + "service_url": { + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "region": (str,), + "service_url": (str,), + } + attribute_map = { + "region": "region", + "service_url": "serviceURL", + } + + def __init__(self_, service_url: str, region: Union[str, UnsetType]=unset, **kwargs): + """ + An Opsgenie integration schema. + + :param region: The region for the Opsgenie integration. + :type region: str, optional + + :param service_url: The service URL for the Opsgenie integration. + :type service_url: str + """ + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + + self_.service_url = service_url diff --git a/datadog_api_client/v2/model/entity_v3_datadog_integration_pagerduty.py b/datadog_api_client/v2/model/entity_v3_datadog_integration_pagerduty.py new file mode 100644 index 0000000000..a2afba2acd --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datadog_integration_pagerduty.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3DatadogIntegrationPagerduty(ModelNormal): + validations = { + "service_url": { + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "service_url": (str,), + } + attribute_map = { + "service_url": "serviceURL", + } + + def __init__(self_, service_url: str, **kwargs): + """ + A PagerDuty integration schema. + + :param service_url: The service URL for the PagerDuty integration. + :type service_url: str + """ + super().__init__(kwargs) + + + self_.service_url = service_url diff --git a/datadog_api_client/v2/model/entity_v3_datadog_log_item.py b/datadog_api_client/v2/model/entity_v3_datadog_log_item.py new file mode 100644 index 0000000000..d6c74c3899 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datadog_log_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3DatadogLogItem(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "name": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "query": "query", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Log association item. + + :param name: The name of the query. + :type name: str, optional + + :param query: The query to run. + :type query: str, optional + """ + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_datadog_performance.py b/datadog_api_client/v2/model/entity_v3_datadog_performance.py new file mode 100644 index 0000000000..24158d113e --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datadog_performance.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3DatadogPerformance(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "tags": ([str],), + } + attribute_map = { + "tags": "tags", + } + + def __init__(self_, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Performance stats association. + + :param tags: A list of APM entity tags that associates the APM Stats data with the entity. + :type tags: [str], optional + """ + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_datadog_pipelines.py b/datadog_api_client/v2/model/entity_v3_datadog_pipelines.py new file mode 100644 index 0000000000..2ec238df1c --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datadog_pipelines.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3DatadogPipelines(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "fingerprints": ([str],), + } + attribute_map = { + "fingerprints": "fingerprints", + } + + def __init__(self_, fingerprints: Union[List[str], UnsetType]=unset, **kwargs): + """ + CI Pipelines association. + + :param fingerprints: A list of CI Fingerprints that associate CI Pipelines with the entity. + :type fingerprints: [str], optional + """ + if fingerprints is not unset: + kwargs["fingerprints"] = fingerprints + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_datastore.py b/datadog_api_client/v2/model/entity_v3_datastore.py new file mode 100644 index 0000000000..e376491177 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datastore.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_datastore_datadog import EntityV3DatastoreDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_datastore_kind import EntityV3DatastoreKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_datastore_spec import EntityV3DatastoreSpec + +class EntityV3Datastore(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_datastore_datadog import EntityV3DatastoreDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_datastore_kind import EntityV3DatastoreKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_datastore_spec import EntityV3DatastoreSpec + return { + "api_version": (EntityV3APIVersion,), + "datadog": (EntityV3DatastoreDatadog,), + "extensions": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "integrations": (EntityV3Integrations,), + "kind": (EntityV3DatastoreKind,), + "metadata": (EntityV3Metadata,), + "spec": (EntityV3DatastoreSpec,), + } + attribute_map = { + "api_version": "apiVersion", + "datadog": "datadog", + "extensions": "extensions", + "integrations": "integrations", + "kind": "kind", + "metadata": "metadata", + "spec": "spec", + } + + def __init__(self_, api_version: EntityV3APIVersion, kind: EntityV3DatastoreKind, metadata: EntityV3Metadata, datadog: Union[EntityV3DatastoreDatadog, UnsetType]=unset, extensions: Union[Dict[str, Any], UnsetType]=unset, integrations: Union[EntityV3Integrations, UnsetType]=unset, spec: Union[EntityV3DatastoreSpec, UnsetType]=unset, **kwargs): + """ + Schema for datastore entities. + + :param api_version: The version of the schema data that was used to populate this entity's data. This could be via the API, Terraform, or YAML file in a repository. The field is known as schema-version in the previous version. + :type api_version: EntityV3APIVersion + + :param datadog: Datadog product integrations for the datastore entity. + :type datadog: EntityV3DatastoreDatadog, optional + + :param extensions: Custom extensions. This is the free-formed field to send client side metadata. No Datadog features are affected by this field. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: A base schema for defining third-party integrations. + :type integrations: EntityV3Integrations, optional + + :param kind: The definition of Entity V3 Datastore Kind object. + :type kind: EntityV3DatastoreKind + + :param metadata: The definition of Entity V3 Metadata object. + :type metadata: EntityV3Metadata + + :param spec: The definition of Entity V3 Datastore Spec object. + :type spec: EntityV3DatastoreSpec, optional + """ + if datadog is not unset: + kwargs["datadog"] = datadog + if extensions is not unset: + kwargs["extensions"] = extensions + if integrations is not unset: + kwargs["integrations"] = integrations + if spec is not unset: + kwargs["spec"] = spec + super().__init__(kwargs) + + + self_.api_version = api_version + self_.kind = kind + self_.metadata = metadata diff --git a/datadog_api_client/v2/model/entity_v3_datastore_datadog.py b/datadog_api_client/v2/model/entity_v3_datastore_datadog.py new file mode 100644 index 0000000000..72fa8828b8 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datastore_datadog.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + +class EntityV3DatastoreDatadog(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + return { + "events": ([EntityV3DatadogEventItem],), + "logs": ([EntityV3DatadogLogItem],), + "performance_data": (EntityV3DatadogPerformance,), + } + attribute_map = { + "events": "events", + "logs": "logs", + "performance_data": "performanceData", + } + + def __init__(self_, events: Union[List[EntityV3DatadogEventItem], UnsetType]=unset, logs: Union[List[EntityV3DatadogLogItem], UnsetType]=unset, performance_data: Union[EntityV3DatadogPerformance, UnsetType]=unset, **kwargs): + """ + Datadog product integrations for the datastore entity. + + :param events: Events associations. + :type events: [EntityV3DatadogEventItem], optional + + :param logs: Logs association. + :type logs: [EntityV3DatadogLogItem], optional + + :param performance_data: Performance stats association. + :type performance_data: EntityV3DatadogPerformance, optional + """ + if events is not unset: + kwargs["events"] = events + if logs is not unset: + kwargs["logs"] = logs + if performance_data is not unset: + kwargs["performance_data"] = performance_data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_datastore_kind.py b/datadog_api_client/v2/model/entity_v3_datastore_kind.py new file mode 100644 index 0000000000..ee712e4490 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datastore_kind.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityV3DatastoreKind(ModelSimple): + """ + The definition of Entity V3 Datastore Kind object. + + :param value: If omitted defaults to "datastore". Must be one of ["datastore"]. + :type value: str + """ + + allowed_values = { + "datastore", + } + DATASTORE: ClassVar["EntityV3DatastoreKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityV3DatastoreKind.DATASTORE = EntityV3DatastoreKind("datastore") diff --git a/datadog_api_client/v2/model/entity_v3_datastore_spec.py b/datadog_api_client/v2/model/entity_v3_datastore_spec.py new file mode 100644 index 0000000000..b063f4952e --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_datastore_spec.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3DatastoreSpec(ModelNormal): + validations = { + "lifecycle": { + "min_length": 1, + }, + "tier": { + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "component_of": ([str],), + "lifecycle": (str,), + "tier": (str,), + "type": (str,), + } + attribute_map = { + "component_of": "componentOf", + "lifecycle": "lifecycle", + "tier": "tier", + "type": "type", + } + + def __init__(self_, component_of: Union[List[str], UnsetType]=unset, lifecycle: Union[str, UnsetType]=unset, tier: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of Entity V3 Datastore Spec object. + + :param component_of: A list of components the datastore is a part of + :type component_of: [str], optional + + :param lifecycle: The lifecycle state of the datastore. + :type lifecycle: str, optional + + :param tier: The importance of the datastore. + :type tier: str, optional + + :param type: The type of datastore. + :type type: str, optional + """ + if component_of is not unset: + kwargs["component_of"] = component_of + if lifecycle is not unset: + kwargs["lifecycle"] = lifecycle + if tier is not unset: + kwargs["tier"] = tier + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_integrations.py b/datadog_api_client/v2/model/entity_v3_integrations.py new file mode 100644 index 0000000000..41569b95ee --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_integrations.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_datadog_integration_opsgenie import EntityV3DatadogIntegrationOpsgenie + from datadog_api_client.v2.model.entity_v3_datadog_integration_pagerduty import EntityV3DatadogIntegrationPagerduty + +class EntityV3Integrations(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_datadog_integration_opsgenie import EntityV3DatadogIntegrationOpsgenie + from datadog_api_client.v2.model.entity_v3_datadog_integration_pagerduty import EntityV3DatadogIntegrationPagerduty + return { + "opsgenie": (EntityV3DatadogIntegrationOpsgenie,), + "pagerduty": (EntityV3DatadogIntegrationPagerduty,), + } + attribute_map = { + "opsgenie": "opsgenie", + "pagerduty": "pagerduty", + } + + def __init__(self_, opsgenie: Union[EntityV3DatadogIntegrationOpsgenie, UnsetType]=unset, pagerduty: Union[EntityV3DatadogIntegrationPagerduty, UnsetType]=unset, **kwargs): + """ + A base schema for defining third-party integrations. + + :param opsgenie: An Opsgenie integration schema. + :type opsgenie: EntityV3DatadogIntegrationOpsgenie, optional + + :param pagerduty: A PagerDuty integration schema. + :type pagerduty: EntityV3DatadogIntegrationPagerduty, optional + """ + if opsgenie is not unset: + kwargs["opsgenie"] = opsgenie + if pagerduty is not unset: + kwargs["pagerduty"] = pagerduty + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_metadata.py b/datadog_api_client/v2/model/entity_v3_metadata.py new file mode 100644 index 0000000000..cc0bed5e2d --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_metadata.py @@ -0,0 +1,143 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_metadata_additional_owners_items import EntityV3MetadataAdditionalOwnersItems + from datadog_api_client.v2.model.entity_v3_metadata_contacts_items import EntityV3MetadataContactsItems + from datadog_api_client.v2.model.entity_v3_metadata_links_items import EntityV3MetadataLinksItems + +class EntityV3Metadata(ModelNormal): + validations = { + "id": { + "min_length": 1, + }, + "name": { + "min_length": 1, + }, + "namespace": { + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_metadata_additional_owners_items import EntityV3MetadataAdditionalOwnersItems + from datadog_api_client.v2.model.entity_v3_metadata_contacts_items import EntityV3MetadataContactsItems + from datadog_api_client.v2.model.entity_v3_metadata_links_items import EntityV3MetadataLinksItems + return { + "additional_owners": ([EntityV3MetadataAdditionalOwnersItems],), + "contacts": ([EntityV3MetadataContactsItems],), + "description": (str,), + "display_name": (str,), + "id": (str,), + "inherit_from": (str,), + "links": ([EntityV3MetadataLinksItems],), + "managed": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "name": (str,), + "namespace": (str,), + "owner": (str,), + "tags": ([str],), + } + attribute_map = { + "additional_owners": "additionalOwners", + "contacts": "contacts", + "description": "description", + "display_name": "displayName", + "id": "id", + "inherit_from": "inheritFrom", + "links": "links", + "managed": "managed", + "name": "name", + "namespace": "namespace", + "owner": "owner", + "tags": "tags", + } + + def __init__(self_, name: str, additional_owners: Union[List[EntityV3MetadataAdditionalOwnersItems], UnsetType]=unset, contacts: Union[List[EntityV3MetadataContactsItems], UnsetType]=unset, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, inherit_from: Union[str, UnsetType]=unset, links: Union[List[EntityV3MetadataLinksItems], UnsetType]=unset, managed: Union[Dict[str, Any], UnsetType]=unset, namespace: Union[str, UnsetType]=unset, owner: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The definition of Entity V3 Metadata object. + + :param additional_owners: The additional owners of the entity, usually a team. + :type additional_owners: [EntityV3MetadataAdditionalOwnersItems], optional + + :param contacts: A list of contacts for the entity. + :type contacts: [EntityV3MetadataContactsItems], optional + + :param description: Short description of the entity. The UI can leverage the description for display. + :type description: str, optional + + :param display_name: User friendly name of the entity. The UI can leverage the display name for display. + :type display_name: str, optional + + :param id: A read-only globally unique identifier for the entity generated by Datadog. User supplied values are ignored. + :type id: str, optional + + :param inherit_from: The entity reference from which to inherit metadata + :type inherit_from: str, optional + + :param links: A list of links for the entity. + :type links: [EntityV3MetadataLinksItems], optional + + :param managed: A read-only set of Datadog managed attributes generated by Datadog. User supplied values are ignored. + :type managed: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param name: Unique name given to an entity under the kind/namespace. + :type name: str + + :param namespace: Namespace is a part of unique identifier. It has a default value of 'default'. + :type namespace: str, optional + + :param owner: The owner of the entity, usually a team. + :type owner: str, optional + + :param tags: A set of custom tags. + :type tags: [str], optional + """ + if additional_owners is not unset: + kwargs["additional_owners"] = additional_owners + if contacts is not unset: + kwargs["contacts"] = contacts + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if id is not unset: + kwargs["id"] = id + if inherit_from is not unset: + kwargs["inherit_from"] = inherit_from + if links is not unset: + kwargs["links"] = links + if managed is not unset: + kwargs["managed"] = managed + if namespace is not unset: + kwargs["namespace"] = namespace + if owner is not unset: + kwargs["owner"] = owner + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/entity_v3_metadata_additional_owners_items.py b/datadog_api_client/v2/model/entity_v3_metadata_additional_owners_items.py new file mode 100644 index 0000000000..e41abe9ce8 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_metadata_additional_owners_items.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3MetadataAdditionalOwnersItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "type": (str,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of Entity V3 Metadata Additional Owners Items object. + + :param name: Team name. + :type name: str + + :param type: Team type. + :type type: str, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/entity_v3_metadata_contacts_items.py b/datadog_api_client/v2/model/entity_v3_metadata_contacts_items.py new file mode 100644 index 0000000000..7e27329222 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_metadata_contacts_items.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3MetadataContactsItems(ModelNormal): + validations = { + "name": { + "min_length": 2, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "contact": (str,), + "name": (str,), + "type": (str,), + } + attribute_map = { + "contact": "contact", + "name": "name", + "type": "type", + } + + def __init__(self_, contact: str, type: str, name: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of Entity V3 Metadata Contacts Items object. + + :param contact: Contact value. + :type contact: str + + :param name: Contact name. + :type name: str, optional + + :param type: Contact type. + :type type: str + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.contact = contact + self_.type = type diff --git a/datadog_api_client/v2/model/entity_v3_metadata_links_items.py b/datadog_api_client/v2/model/entity_v3_metadata_links_items.py new file mode 100644 index 0000000000..03da1efe80 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_metadata_links_items.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3MetadataLinksItems(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "name": (str,), + "provider": (str,), + "type": (str,), + "url": (str,), + } + attribute_map = { + "name": "name", + "provider": "provider", + "type": "type", + "url": "url", + } + + def __init__(self_, name: str, url: str, provider: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of Entity V3 Metadata Links Items object. + + :param name: Link name. + :type name: str + + :param provider: Link provider. + :type provider: str, optional + + :param type: Link type. + :type type: str + + :param url: Link URL. + :type url: str + """ + if provider is not unset: + kwargs["provider"] = provider + super().__init__(kwargs) + type = kwargs.get("type", "other") + + + self_.name = name + self_.type = type + self_.url = url diff --git a/datadog_api_client/v2/model/entity_v3_queue.py b/datadog_api_client/v2/model/entity_v3_queue.py new file mode 100644 index 0000000000..39f7eb6296 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_queue.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_queue_datadog import EntityV3QueueDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_queue_kind import EntityV3QueueKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_queue_spec import EntityV3QueueSpec + +class EntityV3Queue(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_queue_datadog import EntityV3QueueDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_queue_kind import EntityV3QueueKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_queue_spec import EntityV3QueueSpec + return { + "api_version": (EntityV3APIVersion,), + "datadog": (EntityV3QueueDatadog,), + "extensions": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "integrations": (EntityV3Integrations,), + "kind": (EntityV3QueueKind,), + "metadata": (EntityV3Metadata,), + "spec": (EntityV3QueueSpec,), + } + attribute_map = { + "api_version": "apiVersion", + "datadog": "datadog", + "extensions": "extensions", + "integrations": "integrations", + "kind": "kind", + "metadata": "metadata", + "spec": "spec", + } + + def __init__(self_, api_version: EntityV3APIVersion, kind: EntityV3QueueKind, metadata: EntityV3Metadata, datadog: Union[EntityV3QueueDatadog, UnsetType]=unset, extensions: Union[Dict[str, Any], UnsetType]=unset, integrations: Union[EntityV3Integrations, UnsetType]=unset, spec: Union[EntityV3QueueSpec, UnsetType]=unset, **kwargs): + """ + Schema for queue entities. + + :param api_version: The version of the schema data that was used to populate this entity's data. This could be via the API, Terraform, or YAML file in a repository. The field is known as schema-version in the previous version. + :type api_version: EntityV3APIVersion + + :param datadog: Datadog product integrations for the datastore entity. + :type datadog: EntityV3QueueDatadog, optional + + :param extensions: Custom extensions. This is the free-formed field to send client-side metadata. No Datadog features are affected by this field. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: A base schema for defining third-party integrations. + :type integrations: EntityV3Integrations, optional + + :param kind: The definition of Entity V3 Queue Kind object. + :type kind: EntityV3QueueKind + + :param metadata: The definition of Entity V3 Metadata object. + :type metadata: EntityV3Metadata + + :param spec: The definition of Entity V3 Queue Spec object. + :type spec: EntityV3QueueSpec, optional + """ + if datadog is not unset: + kwargs["datadog"] = datadog + if extensions is not unset: + kwargs["extensions"] = extensions + if integrations is not unset: + kwargs["integrations"] = integrations + if spec is not unset: + kwargs["spec"] = spec + super().__init__(kwargs) + + + self_.api_version = api_version + self_.kind = kind + self_.metadata = metadata diff --git a/datadog_api_client/v2/model/entity_v3_queue_datadog.py b/datadog_api_client/v2/model/entity_v3_queue_datadog.py new file mode 100644 index 0000000000..fae7579f8f --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_queue_datadog.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + +class EntityV3QueueDatadog(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + return { + "events": ([EntityV3DatadogEventItem],), + "logs": ([EntityV3DatadogLogItem],), + "performance_data": (EntityV3DatadogPerformance,), + } + attribute_map = { + "events": "events", + "logs": "logs", + "performance_data": "performanceData", + } + + def __init__(self_, events: Union[List[EntityV3DatadogEventItem], UnsetType]=unset, logs: Union[List[EntityV3DatadogLogItem], UnsetType]=unset, performance_data: Union[EntityV3DatadogPerformance, UnsetType]=unset, **kwargs): + """ + Datadog product integrations for the datastore entity. + + :param events: Events associations. + :type events: [EntityV3DatadogEventItem], optional + + :param logs: Logs association. + :type logs: [EntityV3DatadogLogItem], optional + + :param performance_data: Performance stats association. + :type performance_data: EntityV3DatadogPerformance, optional + """ + if events is not unset: + kwargs["events"] = events + if logs is not unset: + kwargs["logs"] = logs + if performance_data is not unset: + kwargs["performance_data"] = performance_data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_queue_kind.py b/datadog_api_client/v2/model/entity_v3_queue_kind.py new file mode 100644 index 0000000000..0fd0da4f4b --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_queue_kind.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityV3QueueKind(ModelSimple): + """ + The definition of Entity V3 Queue Kind object. + + :param value: If omitted defaults to "queue". Must be one of ["queue"]. + :type value: str + """ + + allowed_values = { + "queue", + } + QUEUE: ClassVar["EntityV3QueueKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityV3QueueKind.QUEUE = EntityV3QueueKind("queue") diff --git a/datadog_api_client/v2/model/entity_v3_queue_spec.py b/datadog_api_client/v2/model/entity_v3_queue_spec.py new file mode 100644 index 0000000000..135ea7a452 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_queue_spec.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3QueueSpec(ModelNormal): + validations = { + "lifecycle": { + "min_length": 1, + }, + "tier": { + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "component_of": ([str],), + "lifecycle": (str,), + "tier": (str,), + "type": (str,), + } + attribute_map = { + "component_of": "componentOf", + "lifecycle": "lifecycle", + "tier": "tier", + "type": "type", + } + + def __init__(self_, component_of: Union[List[str], UnsetType]=unset, lifecycle: Union[str, UnsetType]=unset, tier: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of Entity V3 Queue Spec object. + + :param component_of: A list of components the queue is a part of + :type component_of: [str], optional + + :param lifecycle: The lifecycle state of the queue. + :type lifecycle: str, optional + + :param tier: The importance of the queue. + :type tier: str, optional + + :param type: The type of queue. + :type type: str, optional + """ + if component_of is not unset: + kwargs["component_of"] = component_of + if lifecycle is not unset: + kwargs["lifecycle"] = lifecycle + if tier is not unset: + kwargs["tier"] = tier + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_service.py b/datadog_api_client/v2/model/entity_v3_service.py new file mode 100644 index 0000000000..a53fa6ab01 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_service.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_service_datadog import EntityV3ServiceDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_service_kind import EntityV3ServiceKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_service_spec import EntityV3ServiceSpec + +class EntityV3Service(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_service_datadog import EntityV3ServiceDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_service_kind import EntityV3ServiceKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_service_spec import EntityV3ServiceSpec + return { + "api_version": (EntityV3APIVersion,), + "datadog": (EntityV3ServiceDatadog,), + "extensions": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "integrations": (EntityV3Integrations,), + "kind": (EntityV3ServiceKind,), + "metadata": (EntityV3Metadata,), + "spec": (EntityV3ServiceSpec,), + } + attribute_map = { + "api_version": "apiVersion", + "datadog": "datadog", + "extensions": "extensions", + "integrations": "integrations", + "kind": "kind", + "metadata": "metadata", + "spec": "spec", + } + + def __init__(self_, api_version: EntityV3APIVersion, kind: EntityV3ServiceKind, metadata: EntityV3Metadata, datadog: Union[EntityV3ServiceDatadog, UnsetType]=unset, extensions: Union[Dict[str, Any], UnsetType]=unset, integrations: Union[EntityV3Integrations, UnsetType]=unset, spec: Union[EntityV3ServiceSpec, UnsetType]=unset, **kwargs): + """ + Schema for service entities. + + :param api_version: The version of the schema data that was used to populate this entity's data. This could be via the API, Terraform, or YAML file in a repository. The field is known as schema-version in the previous version. + :type api_version: EntityV3APIVersion + + :param datadog: Datadog product integrations for the service entity. + :type datadog: EntityV3ServiceDatadog, optional + + :param extensions: Custom extensions. This is the free-formed field to send client-side metadata. No Datadog features are affected by this field. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: A base schema for defining third-party integrations. + :type integrations: EntityV3Integrations, optional + + :param kind: The definition of Entity V3 Service Kind object. + :type kind: EntityV3ServiceKind + + :param metadata: The definition of Entity V3 Metadata object. + :type metadata: EntityV3Metadata + + :param spec: The definition of Entity V3 Service Spec object. + :type spec: EntityV3ServiceSpec, optional + """ + if datadog is not unset: + kwargs["datadog"] = datadog + if extensions is not unset: + kwargs["extensions"] = extensions + if integrations is not unset: + kwargs["integrations"] = integrations + if spec is not unset: + kwargs["spec"] = spec + super().__init__(kwargs) + + + self_.api_version = api_version + self_.kind = kind + self_.metadata = metadata diff --git a/datadog_api_client/v2/model/entity_v3_service_datadog.py b/datadog_api_client/v2/model/entity_v3_service_datadog.py new file mode 100644 index 0000000000..ed420f006b --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_service_datadog.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_datadog_code_location_item import EntityV3DatadogCodeLocationItem + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + from datadog_api_client.v2.model.entity_v3_datadog_pipelines import EntityV3DatadogPipelines + +class EntityV3ServiceDatadog(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_datadog_code_location_item import EntityV3DatadogCodeLocationItem + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + from datadog_api_client.v2.model.entity_v3_datadog_pipelines import EntityV3DatadogPipelines + return { + "code_locations": ([EntityV3DatadogCodeLocationItem],), + "events": ([EntityV3DatadogEventItem],), + "logs": ([EntityV3DatadogLogItem],), + "performance_data": (EntityV3DatadogPerformance,), + "pipelines": (EntityV3DatadogPipelines,), + } + attribute_map = { + "code_locations": "codeLocations", + "events": "events", + "logs": "logs", + "performance_data": "performanceData", + "pipelines": "pipelines", + } + + def __init__(self_, code_locations: Union[List[EntityV3DatadogCodeLocationItem], UnsetType]=unset, events: Union[List[EntityV3DatadogEventItem], UnsetType]=unset, logs: Union[List[EntityV3DatadogLogItem], UnsetType]=unset, performance_data: Union[EntityV3DatadogPerformance, UnsetType]=unset, pipelines: Union[EntityV3DatadogPipelines, UnsetType]=unset, **kwargs): + """ + Datadog product integrations for the service entity. + + :param code_locations: Schema for mapping source code locations to an entity. + :type code_locations: [EntityV3DatadogCodeLocationItem], optional + + :param events: Events associations. + :type events: [EntityV3DatadogEventItem], optional + + :param logs: Logs association. + :type logs: [EntityV3DatadogLogItem], optional + + :param performance_data: Performance stats association. + :type performance_data: EntityV3DatadogPerformance, optional + + :param pipelines: CI Pipelines association. + :type pipelines: EntityV3DatadogPipelines, optional + """ + if code_locations is not unset: + kwargs["code_locations"] = code_locations + if events is not unset: + kwargs["events"] = events + if logs is not unset: + kwargs["logs"] = logs + if performance_data is not unset: + kwargs["performance_data"] = performance_data + if pipelines is not unset: + kwargs["pipelines"] = pipelines + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_service_kind.py b/datadog_api_client/v2/model/entity_v3_service_kind.py new file mode 100644 index 0000000000..29078ccf72 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_service_kind.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityV3ServiceKind(ModelSimple): + """ + The definition of Entity V3 Service Kind object. + + :param value: If omitted defaults to "service". Must be one of ["service"]. + :type value: str + """ + + allowed_values = { + "service", + } + SERVICE: ClassVar["EntityV3ServiceKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityV3ServiceKind.SERVICE = EntityV3ServiceKind("service") diff --git a/datadog_api_client/v2/model/entity_v3_service_spec.py b/datadog_api_client/v2/model/entity_v3_service_spec.py new file mode 100644 index 0000000000..d3315cf202 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_service_spec.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3ServiceSpec(ModelNormal): + validations = { + "lifecycle": { + "min_length": 1, + }, + "tier": { + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "component_of": ([str],), + "depends_on": ([str],), + "languages": ([str],), + "lifecycle": (str,), + "tier": (str,), + "type": (str,), + } + attribute_map = { + "component_of": "componentOf", + "depends_on": "dependsOn", + "languages": "languages", + "lifecycle": "lifecycle", + "tier": "tier", + "type": "type", + } + + def __init__(self_, component_of: Union[List[str], UnsetType]=unset, depends_on: Union[List[str], UnsetType]=unset, languages: Union[List[str], UnsetType]=unset, lifecycle: Union[str, UnsetType]=unset, tier: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of Entity V3 Service Spec object. + + :param component_of: A list of components the service is a part of + :type component_of: [str], optional + + :param depends_on: A list of components the service depends on. + :type depends_on: [str], optional + + :param languages: The service's programming language. + :type languages: [str], optional + + :param lifecycle: The lifecycle state of the component. + :type lifecycle: str, optional + + :param tier: The importance of the component. + :type tier: str, optional + + :param type: The type of service. + :type type: str, optional + """ + if component_of is not unset: + kwargs["component_of"] = component_of + if depends_on is not unset: + kwargs["depends_on"] = depends_on + if languages is not unset: + kwargs["languages"] = languages + if lifecycle is not unset: + kwargs["lifecycle"] = lifecycle + if tier is not unset: + kwargs["tier"] = tier + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_system.py b/datadog_api_client/v2/model/entity_v3_system.py new file mode 100644 index 0000000000..caa6b3da73 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_system.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_system_datadog import EntityV3SystemDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_system_kind import EntityV3SystemKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_system_spec import EntityV3SystemSpec + +class EntityV3System(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion + from datadog_api_client.v2.model.entity_v3_system_datadog import EntityV3SystemDatadog + from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations + from datadog_api_client.v2.model.entity_v3_system_kind import EntityV3SystemKind + from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata + from datadog_api_client.v2.model.entity_v3_system_spec import EntityV3SystemSpec + return { + "api_version": (EntityV3APIVersion,), + "datadog": (EntityV3SystemDatadog,), + "extensions": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "integrations": (EntityV3Integrations,), + "kind": (EntityV3SystemKind,), + "metadata": (EntityV3Metadata,), + "spec": (EntityV3SystemSpec,), + } + attribute_map = { + "api_version": "apiVersion", + "datadog": "datadog", + "extensions": "extensions", + "integrations": "integrations", + "kind": "kind", + "metadata": "metadata", + "spec": "spec", + } + + def __init__(self_, api_version: EntityV3APIVersion, kind: EntityV3SystemKind, metadata: EntityV3Metadata, datadog: Union[EntityV3SystemDatadog, UnsetType]=unset, extensions: Union[Dict[str, Any], UnsetType]=unset, integrations: Union[EntityV3Integrations, UnsetType]=unset, spec: Union[EntityV3SystemSpec, UnsetType]=unset, **kwargs): + """ + Schema for system entities. + + :param api_version: The version of the schema data that was used to populate this entity's data. This could be via the API, Terraform, or YAML file in a repository. The field is known as schema-version in the previous version. + :type api_version: EntityV3APIVersion + + :param datadog: Datadog product integrations for the service entity. + :type datadog: EntityV3SystemDatadog, optional + + :param extensions: Custom extensions. This is the free-formed field to send client-side metadata. No Datadog features are affected by this field. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: A base schema for defining third-party integrations. + :type integrations: EntityV3Integrations, optional + + :param kind: The definition of Entity V3 System Kind object. + :type kind: EntityV3SystemKind + + :param metadata: The definition of Entity V3 Metadata object. + :type metadata: EntityV3Metadata + + :param spec: The definition of Entity V3 System Spec object. + :type spec: EntityV3SystemSpec, optional + """ + if datadog is not unset: + kwargs["datadog"] = datadog + if extensions is not unset: + kwargs["extensions"] = extensions + if integrations is not unset: + kwargs["integrations"] = integrations + if spec is not unset: + kwargs["spec"] = spec + super().__init__(kwargs) + + + self_.api_version = api_version + self_.kind = kind + self_.metadata = metadata diff --git a/datadog_api_client/v2/model/entity_v3_system_datadog.py b/datadog_api_client/v2/model/entity_v3_system_datadog.py new file mode 100644 index 0000000000..2514b62591 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_system_datadog.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + from datadog_api_client.v2.model.entity_v3_datadog_pipelines import EntityV3DatadogPipelines + +class EntityV3SystemDatadog(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem + from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem + from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance + from datadog_api_client.v2.model.entity_v3_datadog_pipelines import EntityV3DatadogPipelines + return { + "events": ([EntityV3DatadogEventItem],), + "logs": ([EntityV3DatadogLogItem],), + "performance_data": (EntityV3DatadogPerformance,), + "pipelines": (EntityV3DatadogPipelines,), + } + attribute_map = { + "events": "events", + "logs": "logs", + "performance_data": "performanceData", + "pipelines": "pipelines", + } + + def __init__(self_, events: Union[List[EntityV3DatadogEventItem], UnsetType]=unset, logs: Union[List[EntityV3DatadogLogItem], UnsetType]=unset, performance_data: Union[EntityV3DatadogPerformance, UnsetType]=unset, pipelines: Union[EntityV3DatadogPipelines, UnsetType]=unset, **kwargs): + """ + Datadog product integrations for the service entity. + + :param events: Events associations. + :type events: [EntityV3DatadogEventItem], optional + + :param logs: Logs association. + :type logs: [EntityV3DatadogLogItem], optional + + :param performance_data: Performance stats association. + :type performance_data: EntityV3DatadogPerformance, optional + + :param pipelines: CI Pipelines association. + :type pipelines: EntityV3DatadogPipelines, optional + """ + if events is not unset: + kwargs["events"] = events + if logs is not unset: + kwargs["logs"] = logs + if performance_data is not unset: + kwargs["performance_data"] = performance_data + if pipelines is not unset: + kwargs["pipelines"] = pipelines + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/entity_v3_system_kind.py b/datadog_api_client/v2/model/entity_v3_system_kind.py new file mode 100644 index 0000000000..7ec2efedf0 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_system_kind.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EntityV3SystemKind(ModelSimple): + """ + The definition of Entity V3 System Kind object. + + :param value: If omitted defaults to "system". Must be one of ["system"]. + :type value: str + """ + + allowed_values = { + "system", + } + SYSTEM: ClassVar["EntityV3SystemKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EntityV3SystemKind.SYSTEM = EntityV3SystemKind("system") diff --git a/datadog_api_client/v2/model/entity_v3_system_spec.py b/datadog_api_client/v2/model/entity_v3_system_spec.py new file mode 100644 index 0000000000..6d243168e1 --- /dev/null +++ b/datadog_api_client/v2/model/entity_v3_system_spec.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EntityV3SystemSpec(ModelNormal): + validations = { + "lifecycle": { + "min_length": 1, + }, + "tier": { + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "components": ([str],), + "lifecycle": (str,), + "tier": (str,), + } + attribute_map = { + "components": "components", + "lifecycle": "lifecycle", + "tier": "tier", + } + + def __init__(self_, components: Union[List[str], UnsetType]=unset, lifecycle: Union[str, UnsetType]=unset, tier: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of Entity V3 System Spec object. + + :param components: A list of components belongs to the system. + :type components: [str], optional + + :param lifecycle: The lifecycle state of the component. + :type lifecycle: str, optional + + :param tier: An entity reference to the owner of the component. + :type tier: str, optional + """ + if components is not unset: + kwargs["components"] = components + if lifecycle is not unset: + kwargs["lifecycle"] = lifecycle + if tier is not unset: + kwargs["tier"] = tier + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/environment.py b/datadog_api_client/v2/model/environment.py new file mode 100644 index 0000000000..d265f7b058 --- /dev/null +++ b/datadog_api_client/v2/model/environment.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.environment_attributes import EnvironmentAttributes + from datadog_api_client.v2.model.create_environment_data_type import CreateEnvironmentDataType + +class Environment(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.environment_attributes import EnvironmentAttributes + from datadog_api_client.v2.model.create_environment_data_type import CreateEnvironmentDataType + return { + "attributes": (EnvironmentAttributes,), + "id": (UUID,), + "type": (CreateEnvironmentDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: EnvironmentAttributes, id: UUID, type: CreateEnvironmentDataType, **kwargs): + """ + A feature flag environment resource. + + :param attributes: Attributes of an environment. + :type attributes: EnvironmentAttributes + + :param id: The unique identifier of the environment. + :type id: UUID + + :param type: The resource type. + :type type: CreateEnvironmentDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/environment_attributes.py b/datadog_api_client/v2/model/environment_attributes.py new file mode 100644 index 0000000000..0e2333016d --- /dev/null +++ b/datadog_api_client/v2/model/environment_attributes.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EnvironmentAttributes(ModelNormal): + validations = { + "queries": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "description": (str, none_type), + "is_production": (bool,), + "key": (str,), + "name": (str,), + "queries": ([str],), + "require_feature_flag_approval": (bool,), + "updated_at": (datetime,), + } + attribute_map = { + "created_at": "created_at", + "description": "description", + "is_production": "is_production", + "key": "key", + "name": "name", + "queries": "queries", + "require_feature_flag_approval": "require_feature_flag_approval", + "updated_at": "updated_at", + } + + def __init__(self_, name: str, created_at: Union[datetime, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, is_production: Union[bool, UnsetType]=unset, key: Union[str, UnsetType]=unset, queries: Union[List[str], UnsetType]=unset, require_feature_flag_approval: Union[bool, UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of an environment. + + :param created_at: The timestamp when the environment was created. + :type created_at: datetime, optional + + :param description: The description of the environment. + :type description: str, none_type, optional + + :param is_production: Indicates whether this is a production environment. + :type is_production: bool, optional + + :param key: The unique key of the environment. + :type key: str, optional + + :param name: The name of the environment. + :type name: str + + :param queries: List of queries to define the environment scope. + :type queries: [str], optional + + :param require_feature_flag_approval: Indicates whether feature flag changes require approval in this environment. + :type require_feature_flag_approval: bool, optional + + :param updated_at: The timestamp when the environment was last updated. + :type updated_at: datetime, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if is_production is not unset: + kwargs["is_production"] = is_production + if key is not unset: + kwargs["key"] = key + if queries is not unset: + kwargs["queries"] = queries + if require_feature_flag_approval is not unset: + kwargs["require_feature_flag_approval"] = require_feature_flag_approval + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/environment_response.py b/datadog_api_client/v2/model/environment_response.py new file mode 100644 index 0000000000..7522f14fd7 --- /dev/null +++ b/datadog_api_client/v2/model/environment_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.environment import Environment + +class EnvironmentResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.environment import Environment + return { + "data": (Environment,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Environment, **kwargs): + """ + Response containing an environment. + + :param data: A feature flag environment resource. + :type data: Environment + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/environments_pagination_meta.py b/datadog_api_client/v2/model/environments_pagination_meta.py new file mode 100644 index 0000000000..d7dda95fad --- /dev/null +++ b/datadog_api_client/v2/model/environments_pagination_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.environments_pagination_meta_page import EnvironmentsPaginationMetaPage + +class EnvironmentsPaginationMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.environments_pagination_meta_page import EnvironmentsPaginationMetaPage + return { + "page": (EnvironmentsPaginationMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[EnvironmentsPaginationMetaPage, UnsetType]=unset, **kwargs): + """ + Pagination metadata for environments. + + :param page: Pagination metadata for environments list responses. + :type page: EnvironmentsPaginationMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/environments_pagination_meta_page.py b/datadog_api_client/v2/model/environments_pagination_meta_page.py new file mode 100644 index 0000000000..d45b97eaa5 --- /dev/null +++ b/datadog_api_client/v2/model/environments_pagination_meta_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EnvironmentsPaginationMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata for environments list responses. + + :param total_count: Total number of items. + :type total_count: int, optional + + :param total_filtered_count: Total number of items matching the filter. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/epss.py b/datadog_api_client/v2/model/epss.py new file mode 100644 index 0000000000..76058e10f4 --- /dev/null +++ b/datadog_api_client/v2/model/epss.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.vulnerability_severity import VulnerabilitySeverity + +class EPSS(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.vulnerability_severity import VulnerabilitySeverity + return { + "score": (float,), + "severity": (VulnerabilitySeverity,), + } + attribute_map = { + "score": "score", + "severity": "severity", + } + + def __init__(self_, score: float, severity: VulnerabilitySeverity, **kwargs): + """ + Vulnerability EPSS severity. + + :param score: Vulnerability EPSS severity score. + :type score: float + + :param severity: The vulnerability severity. + :type severity: VulnerabilitySeverity + """ + super().__init__(kwargs) + + + self_.score = score + self_.severity = severity diff --git a/datadog_api_client/v2/model/error_handler.py b/datadog_api_client/v2/model/error_handler.py new file mode 100644 index 0000000000..ab299bf1c2 --- /dev/null +++ b/datadog_api_client/v2/model/error_handler.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retry_strategy import RetryStrategy + +class ErrorHandler(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retry_strategy import RetryStrategy + return { + "fallback_step_name": (str,), + "retry_strategy": (RetryStrategy,), + } + attribute_map = { + "fallback_step_name": "fallbackStepName", + "retry_strategy": "retryStrategy", + } + + def __init__(self_, fallback_step_name: str, retry_strategy: RetryStrategy, **kwargs): + """ + Used to handle errors in an action. + + :param fallback_step_name: The ``ErrorHandler`` ``fallbackStepName``. + :type fallback_step_name: str + + :param retry_strategy: The definition of ``RetryStrategy`` object. + :type retry_strategy: RetryStrategy + """ + super().__init__(kwargs) + + + self_.fallback_step_name = fallback_step_name + self_.retry_strategy = retry_strategy diff --git a/datadog_api_client/v2/model/escalation.py b/datadog_api_client/v2/model/escalation.py new file mode 100644 index 0000000000..47d9d66ada --- /dev/null +++ b/datadog_api_client/v2/model/escalation.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_relationships import EscalationRelationships + from datadog_api_client.v2.model.escalation_type import EscalationType + +class Escalation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_relationships import EscalationRelationships + from datadog_api_client.v2.model.escalation_type import EscalationType + return { + "id": (str,), + "relationships": (EscalationRelationships,), + "type": (EscalationType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: EscalationType, id: Union[str, UnsetType]=unset, relationships: Union[EscalationRelationships, UnsetType]=unset, **kwargs): + """ + Represents an escalation policy step. + + :param id: Unique identifier of the escalation step. + :type id: str, optional + + :param relationships: Contains the relationships of an escalation object, including its responders. + :type relationships: EscalationRelationships, optional + + :param type: Represents the resource type for individual steps in an escalation policy used during incident response. + :type type: EscalationType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/escalation_policy.py b/datadog_api_client/v2/model/escalation_policy.py new file mode 100644 index 0000000000..c1a5212dbf --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_data import EscalationPolicyData + from datadog_api_client.v2.model.escalation_policy_included import EscalationPolicyIncluded + from datadog_api_client.v2.model.escalation_policy_step import EscalationPolicyStep + from datadog_api_client.v2.model.escalation_policy_user import EscalationPolicyUser + from datadog_api_client.v2.model.schedule_data import ScheduleData + from datadog_api_client.v2.model.configured_schedule import ConfiguredSchedule + from datadog_api_client.v2.model.team_reference import TeamReference + +class EscalationPolicy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_data import EscalationPolicyData + from datadog_api_client.v2.model.escalation_policy_included import EscalationPolicyIncluded + return { + "data": (EscalationPolicyData,), + "included": ([EscalationPolicyIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[EscalationPolicyData, UnsetType]=unset, included: Union[List[Union[EscalationPolicyIncluded, EscalationPolicyStep, EscalationPolicyUser, ScheduleData, ConfiguredSchedule, TeamReference]], UnsetType]=unset, **kwargs): + """ + Represents a complete escalation policy response, including policy data and optionally included related resources. + + :param data: Represents the data for a single escalation policy, including its attributes, ID, relationships, and resource type. + :type data: EscalationPolicyData, optional + + :param included: Provides any included related resources, such as steps or targets, returned with the policy. + :type included: [EscalationPolicyIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_create_request.py b/datadog_api_client/v2/model/escalation_policy_create_request.py new file mode 100644 index 0000000000..d476dbb96c --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_create_request_data import EscalationPolicyCreateRequestData + +class EscalationPolicyCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_create_request_data import EscalationPolicyCreateRequestData + return { + "data": (EscalationPolicyCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: EscalationPolicyCreateRequestData, **kwargs): + """ + Represents a request to create a new escalation policy, including the policy data. + + :param data: Represents the data for creating an escalation policy, including its attributes, relationships, and resource type. + :type data: EscalationPolicyCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/escalation_policy_create_request_data.py b/datadog_api_client/v2/model/escalation_policy_create_request_data.py new file mode 100644 index 0000000000..b06a41bf02 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_create_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_create_request_data_attributes import EscalationPolicyCreateRequestDataAttributes + from datadog_api_client.v2.model.escalation_policy_create_request_data_relationships import EscalationPolicyCreateRequestDataRelationships + from datadog_api_client.v2.model.escalation_policy_create_request_data_type import EscalationPolicyCreateRequestDataType + +class EscalationPolicyCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_create_request_data_attributes import EscalationPolicyCreateRequestDataAttributes + from datadog_api_client.v2.model.escalation_policy_create_request_data_relationships import EscalationPolicyCreateRequestDataRelationships + from datadog_api_client.v2.model.escalation_policy_create_request_data_type import EscalationPolicyCreateRequestDataType + return { + "attributes": (EscalationPolicyCreateRequestDataAttributes,), + "relationships": (EscalationPolicyCreateRequestDataRelationships,), + "type": (EscalationPolicyCreateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: EscalationPolicyCreateRequestDataAttributes, type: EscalationPolicyCreateRequestDataType, relationships: Union[EscalationPolicyCreateRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + Represents the data for creating an escalation policy, including its attributes, relationships, and resource type. + + :param attributes: Defines the attributes for creating an escalation policy, including its description, name, resolution behavior, retries, and steps. + :type attributes: EscalationPolicyCreateRequestDataAttributes + + :param relationships: Represents relationships in an escalation policy creation request, including references to teams. + :type relationships: EscalationPolicyCreateRequestDataRelationships, optional + + :param type: Indicates that the resource is of type ``policies``. + :type type: EscalationPolicyCreateRequestDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/escalation_policy_create_request_data_attributes.py b/datadog_api_client/v2/model/escalation_policy_create_request_data_attributes.py new file mode 100644 index 0000000000..f824d74782 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_create_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_create_request_data_attributes_steps_items import EscalationPolicyCreateRequestDataAttributesStepsItems + +class EscalationPolicyCreateRequestDataAttributes(ModelNormal): + validations = { + "name": { + "min_length": 1, + }, + "retries": { + "inclusive_maximum": 10, + "inclusive_minimum": 0, + }, + "steps": { + "max_items": 10, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_create_request_data_attributes_steps_items import EscalationPolicyCreateRequestDataAttributesStepsItems + return { + "name": (str,), + "resolve_page_on_policy_end": (bool,), + "retries": (int,), + "steps": ([EscalationPolicyCreateRequestDataAttributesStepsItems],), + } + attribute_map = { + "name": "name", + "resolve_page_on_policy_end": "resolve_page_on_policy_end", + "retries": "retries", + "steps": "steps", + } + + def __init__(self_, name: str, steps: List[EscalationPolicyCreateRequestDataAttributesStepsItems], resolve_page_on_policy_end: Union[bool, UnsetType]=unset, retries: Union[int, UnsetType]=unset, **kwargs): + """ + Defines the attributes for creating an escalation policy, including its description, name, resolution behavior, retries, and steps. + + :param name: Specifies the name for the new escalation policy. + :type name: str + + :param resolve_page_on_policy_end: Indicates whether the page is automatically resolved when the policy ends. + :type resolve_page_on_policy_end: bool, optional + + :param retries: Specifies how many times the escalation sequence is retried if there is no response. + :type retries: int, optional + + :param steps: A list of escalation steps, each defining assignment, escalation timeout, and targets for the new policy. + :type steps: [EscalationPolicyCreateRequestDataAttributesStepsItems] + """ + if resolve_page_on_policy_end is not unset: + kwargs["resolve_page_on_policy_end"] = resolve_page_on_policy_end + if retries is not unset: + kwargs["retries"] = retries + super().__init__(kwargs) + + + self_.name = name + self_.steps = steps diff --git a/datadog_api_client/v2/model/escalation_policy_create_request_data_attributes_steps_items.py b/datadog_api_client/v2/model/escalation_policy_create_request_data_attributes_steps_items.py new file mode 100644 index 0000000000..3362c2af18 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_create_request_data_attributes_steps_items.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_step_attributes_assignment import EscalationPolicyStepAttributesAssignment + from datadog_api_client.v2.model.escalation_policy_step_target import EscalationPolicyStepTarget + +class EscalationPolicyCreateRequestDataAttributesStepsItems(ModelNormal): + validations = { + "escalate_after_seconds": { + "inclusive_maximum": 36000, + "inclusive_minimum": 60, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_step_attributes_assignment import EscalationPolicyStepAttributesAssignment + from datadog_api_client.v2.model.escalation_policy_step_target import EscalationPolicyStepTarget + return { + "assignment": (EscalationPolicyStepAttributesAssignment,), + "escalate_after_seconds": (int,), + "targets": ([EscalationPolicyStepTarget],), + } + attribute_map = { + "assignment": "assignment", + "escalate_after_seconds": "escalate_after_seconds", + "targets": "targets", + } + + def __init__(self_, targets: List[EscalationPolicyStepTarget], assignment: Union[EscalationPolicyStepAttributesAssignment, UnsetType]=unset, escalate_after_seconds: Union[int, UnsetType]=unset, **kwargs): + """ + Defines a single escalation step within an escalation policy creation request. Contains assignment strategy, escalation timeout, and a list of targets. + + :param assignment: Specifies how this escalation step will assign targets (example ``default`` or ``round-robin`` ). + :type assignment: EscalationPolicyStepAttributesAssignment, optional + + :param escalate_after_seconds: Defines how many seconds to wait before escalating to the next step. + :type escalate_after_seconds: int, optional + + :param targets: Specifies the collection of escalation targets for this step. + :type targets: [EscalationPolicyStepTarget] + """ + if assignment is not unset: + kwargs["assignment"] = assignment + if escalate_after_seconds is not unset: + kwargs["escalate_after_seconds"] = escalate_after_seconds + super().__init__(kwargs) + + + self_.targets = targets diff --git a/datadog_api_client/v2/model/escalation_policy_create_request_data_relationships.py b/datadog_api_client/v2/model/escalation_policy_create_request_data_relationships.py new file mode 100644 index 0000000000..28c50916f0 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_create_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + +class EscalationPolicyCreateRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + return { + "teams": (DataRelationshipsTeams,), + } + attribute_map = { + "teams": "teams", + } + + def __init__(self_, teams: Union[DataRelationshipsTeams, UnsetType]=unset, **kwargs): + """ + Represents relationships in an escalation policy creation request, including references to teams. + + :param teams: Associates teams with this schedule in a data structure. + :type teams: DataRelationshipsTeams, optional + """ + if teams is not unset: + kwargs["teams"] = teams + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_create_request_data_type.py b/datadog_api_client/v2/model/escalation_policy_create_request_data_type.py new file mode 100644 index 0000000000..6151e9e9a7 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_create_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationPolicyCreateRequestDataType(ModelSimple): + """ + Indicates that the resource is of type `policies`. + + :param value: If omitted defaults to "policies". Must be one of ["policies"]. + :type value: str + """ + + allowed_values = { + "policies", + } + POLICIES: ClassVar["EscalationPolicyCreateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationPolicyCreateRequestDataType.POLICIES = EscalationPolicyCreateRequestDataType("policies") diff --git a/datadog_api_client/v2/model/escalation_policy_data.py b/datadog_api_client/v2/model/escalation_policy_data.py new file mode 100644 index 0000000000..e9d6091144 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_data_attributes import EscalationPolicyDataAttributes + from datadog_api_client.v2.model.escalation_policy_data_relationships import EscalationPolicyDataRelationships + from datadog_api_client.v2.model.escalation_policy_data_type import EscalationPolicyDataType + +class EscalationPolicyData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_data_attributes import EscalationPolicyDataAttributes + from datadog_api_client.v2.model.escalation_policy_data_relationships import EscalationPolicyDataRelationships + from datadog_api_client.v2.model.escalation_policy_data_type import EscalationPolicyDataType + return { + "attributes": (EscalationPolicyDataAttributes,), + "id": (str,), + "relationships": (EscalationPolicyDataRelationships,), + "type": (EscalationPolicyDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: EscalationPolicyDataType, attributes: Union[EscalationPolicyDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[EscalationPolicyDataRelationships, UnsetType]=unset, **kwargs): + """ + Represents the data for a single escalation policy, including its attributes, ID, relationships, and resource type. + + :param attributes: Defines the main attributes of an escalation policy, such as its name and behavior on policy end. + :type attributes: EscalationPolicyDataAttributes, optional + + :param id: Specifies the unique identifier of the escalation policy. + :type id: str, optional + + :param relationships: Represents the relationships for an escalation policy, including references to steps and teams. + :type relationships: EscalationPolicyDataRelationships, optional + + :param type: Indicates that the resource is of type ``policies``. + :type type: EscalationPolicyDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/escalation_policy_data_attributes.py b/datadog_api_client/v2/model/escalation_policy_data_attributes.py new file mode 100644 index 0000000000..83238e0b54 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_data_attributes.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EscalationPolicyDataAttributes(ModelNormal): + validations = { + "name": { + "min_length": 1, + }, + "retries": { + "inclusive_maximum": 10, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "resolve_page_on_policy_end": (bool,), + "retries": (int,), + } + attribute_map = { + "name": "name", + "resolve_page_on_policy_end": "resolve_page_on_policy_end", + "retries": "retries", + } + + def __init__(self_, name: str, resolve_page_on_policy_end: Union[bool, UnsetType]=unset, retries: Union[int, UnsetType]=unset, **kwargs): + """ + Defines the main attributes of an escalation policy, such as its name and behavior on policy end. + + :param name: Specifies the name of the escalation policy. + :type name: str + + :param resolve_page_on_policy_end: Indicates whether the page is automatically resolved when the policy ends. + :type resolve_page_on_policy_end: bool, optional + + :param retries: Specifies how many times the escalation sequence is retried if there is no response. + :type retries: int, optional + """ + if resolve_page_on_policy_end is not unset: + kwargs["resolve_page_on_policy_end"] = resolve_page_on_policy_end + if retries is not unset: + kwargs["retries"] = retries + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/escalation_policy_data_relationships.py b/datadog_api_client/v2/model/escalation_policy_data_relationships.py new file mode 100644 index 0000000000..57cabd18f0 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_data_relationships.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_data_relationships_steps import EscalationPolicyDataRelationshipsSteps + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + +class EscalationPolicyDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_data_relationships_steps import EscalationPolicyDataRelationshipsSteps + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + return { + "steps": (EscalationPolicyDataRelationshipsSteps,), + "teams": (DataRelationshipsTeams,), + } + attribute_map = { + "steps": "steps", + "teams": "teams", + } + + def __init__(self_, steps: EscalationPolicyDataRelationshipsSteps, teams: Union[DataRelationshipsTeams, UnsetType]=unset, **kwargs): + """ + Represents the relationships for an escalation policy, including references to steps and teams. + + :param steps: Defines the relationship to a collection of steps within an escalation policy. Contains an array of step data references. + :type steps: EscalationPolicyDataRelationshipsSteps + + :param teams: Associates teams with this schedule in a data structure. + :type teams: DataRelationshipsTeams, optional + """ + if teams is not unset: + kwargs["teams"] = teams + super().__init__(kwargs) + + + self_.steps = steps diff --git a/datadog_api_client/v2/model/escalation_policy_data_relationships_steps.py b/datadog_api_client/v2/model/escalation_policy_data_relationships_steps.py new file mode 100644 index 0000000000..74c0ee31c0 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_data_relationships_steps.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_data_relationships_steps_data_items import EscalationPolicyDataRelationshipsStepsDataItems + +class EscalationPolicyDataRelationshipsSteps(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_data_relationships_steps_data_items import EscalationPolicyDataRelationshipsStepsDataItems + return { + "data": ([EscalationPolicyDataRelationshipsStepsDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[EscalationPolicyDataRelationshipsStepsDataItems], UnsetType]=unset, **kwargs): + """ + Defines the relationship to a collection of steps within an escalation policy. Contains an array of step data references. + + :param data: An array of references to the steps defined in this escalation policy. + :type data: [EscalationPolicyDataRelationshipsStepsDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_data_relationships_steps_data_items.py b/datadog_api_client/v2/model/escalation_policy_data_relationships_steps_data_items.py new file mode 100644 index 0000000000..21304757f2 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_data_relationships_steps_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_data_relationships_steps_data_items_type import EscalationPolicyDataRelationshipsStepsDataItemsType + +class EscalationPolicyDataRelationshipsStepsDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_data_relationships_steps_data_items_type import EscalationPolicyDataRelationshipsStepsDataItemsType + return { + "id": (str,), + "type": (EscalationPolicyDataRelationshipsStepsDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: EscalationPolicyDataRelationshipsStepsDataItemsType, **kwargs): + """ + Defines a relationship to a single step within an escalation policy. Contains the step's ``id`` and ``type``. + + :param id: Specifies the unique identifier for the step resource. + :type id: str + + :param type: Indicates that the resource is of type ``steps``. + :type type: EscalationPolicyDataRelationshipsStepsDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/escalation_policy_data_relationships_steps_data_items_type.py b/datadog_api_client/v2/model/escalation_policy_data_relationships_steps_data_items_type.py new file mode 100644 index 0000000000..c215a89c10 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_data_relationships_steps_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationPolicyDataRelationshipsStepsDataItemsType(ModelSimple): + """ + Indicates that the resource is of type `steps`. + + :param value: If omitted defaults to "steps". Must be one of ["steps"]. + :type value: str + """ + + allowed_values = { + "steps", + } + STEPS: ClassVar["EscalationPolicyDataRelationshipsStepsDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationPolicyDataRelationshipsStepsDataItemsType.STEPS = EscalationPolicyDataRelationshipsStepsDataItemsType("steps") diff --git a/datadog_api_client/v2/model/escalation_policy_data_type.py b/datadog_api_client/v2/model/escalation_policy_data_type.py new file mode 100644 index 0000000000..7359603135 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationPolicyDataType(ModelSimple): + """ + Indicates that the resource is of type `policies`. + + :param value: If omitted defaults to "policies". Must be one of ["policies"]. + :type value: str + """ + + allowed_values = { + "policies", + } + POLICIES: ClassVar["EscalationPolicyDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationPolicyDataType.POLICIES = EscalationPolicyDataType("policies") diff --git a/datadog_api_client/v2/model/escalation_policy_included.py b/datadog_api_client/v2/model/escalation_policy_included.py new file mode 100644 index 0000000000..4507f4ddb8 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_included.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EscalationPolicyIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Represents included related resources when retrieving an escalation policy, such as teams, steps, or targets. + + :param attributes: Defines attributes for an escalation policy step, such as assignment strategy and escalation timeout. + :type attributes: EscalationPolicyStepAttributes, optional + + :param id: Specifies the unique identifier of this escalation policy step. + :type id: str, optional + + :param relationships: Represents the relationship of an escalation policy step to its targets. + :type relationships: EscalationPolicyStepRelationships, optional + + :param type: Indicates that the resource is of type `steps`. + :type type: EscalationPolicyStepType + """ + 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.escalation_policy_step import EscalationPolicyStep + from datadog_api_client.v2.model.escalation_policy_user import EscalationPolicyUser + from datadog_api_client.v2.model.schedule_data import ScheduleData + from datadog_api_client.v2.model.configured_schedule import ConfiguredSchedule + from datadog_api_client.v2.model.team_reference import TeamReference + return { + "oneOf": [ + EscalationPolicyStep, + EscalationPolicyUser, + ScheduleData, + ConfiguredSchedule, + TeamReference, + ], + } diff --git a/datadog_api_client/v2/model/escalation_policy_step.py b/datadog_api_client/v2/model/escalation_policy_step.py new file mode 100644 index 0000000000..f0c14d7c33 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_step.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_step_attributes import EscalationPolicyStepAttributes + from datadog_api_client.v2.model.escalation_policy_step_relationships import EscalationPolicyStepRelationships + from datadog_api_client.v2.model.escalation_policy_step_type import EscalationPolicyStepType + from datadog_api_client.v2.model.team_target import TeamTarget + from datadog_api_client.v2.model.user_target import UserTarget + from datadog_api_client.v2.model.schedule_target import ScheduleTarget + from datadog_api_client.v2.model.configured_schedule_target import ConfiguredScheduleTarget + +class EscalationPolicyStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_step_attributes import EscalationPolicyStepAttributes + from datadog_api_client.v2.model.escalation_policy_step_relationships import EscalationPolicyStepRelationships + from datadog_api_client.v2.model.escalation_policy_step_type import EscalationPolicyStepType + return { + "attributes": (EscalationPolicyStepAttributes,), + "id": (str,), + "relationships": (EscalationPolicyStepRelationships,), + "type": (EscalationPolicyStepType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: EscalationPolicyStepType, attributes: Union[EscalationPolicyStepAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[EscalationPolicyStepRelationships, UnsetType]=unset, **kwargs): + """ + Represents a single step in an escalation policy, including its attributes, relationships, and resource type. + + :param attributes: Defines attributes for an escalation policy step, such as assignment strategy and escalation timeout. + :type attributes: EscalationPolicyStepAttributes, optional + + :param id: Specifies the unique identifier of this escalation policy step. + :type id: str, optional + + :param relationships: Represents the relationship of an escalation policy step to its targets. + :type relationships: EscalationPolicyStepRelationships, optional + + :param type: Indicates that the resource is of type ``steps``. + :type type: EscalationPolicyStepType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/escalation_policy_step_attributes.py b/datadog_api_client/v2/model/escalation_policy_step_attributes.py new file mode 100644 index 0000000000..fadcf09126 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_step_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_step_attributes_assignment import EscalationPolicyStepAttributesAssignment + +class EscalationPolicyStepAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_step_attributes_assignment import EscalationPolicyStepAttributesAssignment + return { + "assignment": (EscalationPolicyStepAttributesAssignment,), + "escalate_after_seconds": (int,), + } + attribute_map = { + "assignment": "assignment", + "escalate_after_seconds": "escalate_after_seconds", + } + + def __init__(self_, assignment: Union[EscalationPolicyStepAttributesAssignment, UnsetType]=unset, escalate_after_seconds: Union[int, UnsetType]=unset, **kwargs): + """ + Defines attributes for an escalation policy step, such as assignment strategy and escalation timeout. + + :param assignment: Specifies how this escalation step will assign targets (example ``default`` or ``round-robin`` ). + :type assignment: EscalationPolicyStepAttributesAssignment, optional + + :param escalate_after_seconds: Specifies how many seconds to wait before escalating to the next step. + :type escalate_after_seconds: int, optional + """ + if assignment is not unset: + kwargs["assignment"] = assignment + if escalate_after_seconds is not unset: + kwargs["escalate_after_seconds"] = escalate_after_seconds + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_step_attributes_assignment.py b/datadog_api_client/v2/model/escalation_policy_step_attributes_assignment.py new file mode 100644 index 0000000000..ff2f685a13 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_step_attributes_assignment.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationPolicyStepAttributesAssignment(ModelSimple): + """ + Specifies how this escalation step will assign targets (example `default` or `round-robin`). + + :param value: Must be one of ["default", "round-robin"]. + :type value: str + """ + + allowed_values = { + "default", + "round-robin", + } + DEFAULT: ClassVar["EscalationPolicyStepAttributesAssignment"] + ROUND_ROBIN: ClassVar["EscalationPolicyStepAttributesAssignment"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationPolicyStepAttributesAssignment.DEFAULT = EscalationPolicyStepAttributesAssignment("default") +EscalationPolicyStepAttributesAssignment.ROUND_ROBIN = EscalationPolicyStepAttributesAssignment("round-robin") diff --git a/datadog_api_client/v2/model/escalation_policy_step_relationships.py b/datadog_api_client/v2/model/escalation_policy_step_relationships.py new file mode 100644 index 0000000000..39100e619a --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_step_relationships.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_targets import EscalationTargets + from datadog_api_client.v2.model.team_target import TeamTarget + from datadog_api_client.v2.model.user_target import UserTarget + from datadog_api_client.v2.model.schedule_target import ScheduleTarget + from datadog_api_client.v2.model.configured_schedule_target import ConfiguredScheduleTarget + +class EscalationPolicyStepRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_targets import EscalationTargets + return { + "targets": (EscalationTargets,), + } + attribute_map = { + "targets": "targets", + } + + def __init__(self_, targets: Union[EscalationTargets, UnsetType]=unset, **kwargs): + """ + Represents the relationship of an escalation policy step to its targets. + + :param targets: A list of escalation targets for a step + :type targets: EscalationTargets, optional + """ + if targets is not unset: + kwargs["targets"] = targets + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_step_target.py b/datadog_api_client/v2/model/escalation_policy_step_target.py new file mode 100644 index 0000000000..09717e05a1 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_step_target.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_step_target_config import EscalationPolicyStepTargetConfig + from datadog_api_client.v2.model.escalation_policy_step_target_type import EscalationPolicyStepTargetType + +class EscalationPolicyStepTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_step_target_config import EscalationPolicyStepTargetConfig + from datadog_api_client.v2.model.escalation_policy_step_target_type import EscalationPolicyStepTargetType + return { + "config": (EscalationPolicyStepTargetConfig,), + "id": (str,), + "type": (EscalationPolicyStepTargetType,), + } + attribute_map = { + "config": "config", + "id": "id", + "type": "type", + } + + def __init__(self_, config: Union[EscalationPolicyStepTargetConfig, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[EscalationPolicyStepTargetType, UnsetType]=unset, **kwargs): + """ + Defines a single escalation target within a step for an escalation policy creation request. Contains ``id`` , ``type`` , and optional ``config``. + + :param config: Configuration for an escalation target, such as schedule position. + :type config: EscalationPolicyStepTargetConfig, optional + + :param id: Specifies the unique identifier for this target. + :type id: str, optional + + :param type: Specifies the type of escalation target (example ``users`` , ``schedules`` , or ``teams`` ). + :type type: EscalationPolicyStepTargetType, optional + """ + if config is not unset: + kwargs["config"] = config + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_step_target_config.py b/datadog_api_client/v2/model/escalation_policy_step_target_config.py new file mode 100644 index 0000000000..466363f56f --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_step_target_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_step_target_config_schedule import EscalationPolicyStepTargetConfigSchedule + +class EscalationPolicyStepTargetConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_step_target_config_schedule import EscalationPolicyStepTargetConfigSchedule + return { + "schedule": (EscalationPolicyStepTargetConfigSchedule,), + } + attribute_map = { + "schedule": "schedule", + } + + def __init__(self_, schedule: Union[EscalationPolicyStepTargetConfigSchedule, UnsetType]=unset, **kwargs): + """ + Configuration for an escalation target, such as schedule position. + + :param schedule: Schedule-specific configuration for an escalation target. + :type schedule: EscalationPolicyStepTargetConfigSchedule, optional + """ + if schedule is not unset: + kwargs["schedule"] = schedule + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_step_target_config_schedule.py b/datadog_api_client/v2/model/escalation_policy_step_target_config_schedule.py new file mode 100644 index 0000000000..4aa6805a53 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_step_target_config_schedule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_target_position import ScheduleTargetPosition + +class EscalationPolicyStepTargetConfigSchedule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_target_position import ScheduleTargetPosition + return { + "position": (ScheduleTargetPosition,), + } + attribute_map = { + "position": "position", + } + + def __init__(self_, position: Union[ScheduleTargetPosition, UnsetType]=unset, **kwargs): + """ + Schedule-specific configuration for an escalation target. + + :param position: Specifies the position of a schedule target (example ``previous`` , ``current`` , or ``next`` ). + :type position: ScheduleTargetPosition, optional + """ + if position is not unset: + kwargs["position"] = position + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_step_target_type.py b/datadog_api_client/v2/model/escalation_policy_step_target_type.py new file mode 100644 index 0000000000..c4554ade76 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_step_target_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationPolicyStepTargetType(ModelSimple): + """ + Specifies the type of escalation target (example `users`, `schedules`, or `teams`). + + :param value: Must be one of ["users", "schedules", "teams"]. + :type value: str + """ + + allowed_values = { + "users", + "schedules", + "teams", + } + USERS: ClassVar["EscalationPolicyStepTargetType"] + SCHEDULES: ClassVar["EscalationPolicyStepTargetType"] + TEAMS: ClassVar["EscalationPolicyStepTargetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationPolicyStepTargetType.USERS = EscalationPolicyStepTargetType("users") +EscalationPolicyStepTargetType.SCHEDULES = EscalationPolicyStepTargetType("schedules") +EscalationPolicyStepTargetType.TEAMS = EscalationPolicyStepTargetType("teams") diff --git a/datadog_api_client/v2/model/escalation_policy_step_type.py b/datadog_api_client/v2/model/escalation_policy_step_type.py new file mode 100644 index 0000000000..e0327ac20c --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_step_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationPolicyStepType(ModelSimple): + """ + Indicates that the resource is of type `steps`. + + :param value: If omitted defaults to "steps". Must be one of ["steps"]. + :type value: str + """ + + allowed_values = { + "steps", + } + STEPS: ClassVar["EscalationPolicyStepType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationPolicyStepType.STEPS = EscalationPolicyStepType("steps") diff --git a/datadog_api_client/v2/model/escalation_policy_update_request.py b/datadog_api_client/v2/model/escalation_policy_update_request.py new file mode 100644 index 0000000000..af85667173 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_update_request_data import EscalationPolicyUpdateRequestData + +class EscalationPolicyUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_update_request_data import EscalationPolicyUpdateRequestData + return { + "data": (EscalationPolicyUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: EscalationPolicyUpdateRequestData, **kwargs): + """ + Represents a request to update an existing escalation policy, including the updated policy data. + + :param data: Represents the data for updating an existing escalation policy, including its ID, attributes, relationships, and resource type. + :type data: EscalationPolicyUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/escalation_policy_update_request_data.py b/datadog_api_client/v2/model/escalation_policy_update_request_data.py new file mode 100644 index 0000000000..655a682012 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_update_request_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_update_request_data_attributes import EscalationPolicyUpdateRequestDataAttributes + from datadog_api_client.v2.model.escalation_policy_update_request_data_relationships import EscalationPolicyUpdateRequestDataRelationships + from datadog_api_client.v2.model.escalation_policy_update_request_data_type import EscalationPolicyUpdateRequestDataType + +class EscalationPolicyUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_update_request_data_attributes import EscalationPolicyUpdateRequestDataAttributes + from datadog_api_client.v2.model.escalation_policy_update_request_data_relationships import EscalationPolicyUpdateRequestDataRelationships + from datadog_api_client.v2.model.escalation_policy_update_request_data_type import EscalationPolicyUpdateRequestDataType + return { + "attributes": (EscalationPolicyUpdateRequestDataAttributes,), + "id": (str,), + "relationships": (EscalationPolicyUpdateRequestDataRelationships,), + "type": (EscalationPolicyUpdateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: EscalationPolicyUpdateRequestDataAttributes, id: str, type: EscalationPolicyUpdateRequestDataType, relationships: Union[EscalationPolicyUpdateRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + Represents the data for updating an existing escalation policy, including its ID, attributes, relationships, and resource type. + + :param attributes: Defines the attributes that can be updated for an escalation policy, such as description, name, resolution behavior, retries, and steps. + :type attributes: EscalationPolicyUpdateRequestDataAttributes + + :param id: Specifies the unique identifier of the escalation policy being updated. + :type id: str + + :param relationships: Represents relationships in an escalation policy update request, including references to teams. + :type relationships: EscalationPolicyUpdateRequestDataRelationships, optional + + :param type: Indicates that the resource is of type ``policies``. + :type type: EscalationPolicyUpdateRequestDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/escalation_policy_update_request_data_attributes.py b/datadog_api_client/v2/model/escalation_policy_update_request_data_attributes.py new file mode 100644 index 0000000000..c45751e23d --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_update_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_update_request_data_attributes_steps_items import EscalationPolicyUpdateRequestDataAttributesStepsItems + +class EscalationPolicyUpdateRequestDataAttributes(ModelNormal): + validations = { + "name": { + "min_length": 1, + }, + "retries": { + "inclusive_maximum": 10, + "inclusive_minimum": 0, + }, + "steps": { + "max_items": 10, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_update_request_data_attributes_steps_items import EscalationPolicyUpdateRequestDataAttributesStepsItems + return { + "name": (str,), + "resolve_page_on_policy_end": (bool,), + "retries": (int,), + "steps": ([EscalationPolicyUpdateRequestDataAttributesStepsItems],), + } + attribute_map = { + "name": "name", + "resolve_page_on_policy_end": "resolve_page_on_policy_end", + "retries": "retries", + "steps": "steps", + } + + def __init__(self_, name: str, steps: List[EscalationPolicyUpdateRequestDataAttributesStepsItems], resolve_page_on_policy_end: Union[bool, UnsetType]=unset, retries: Union[int, UnsetType]=unset, **kwargs): + """ + Defines the attributes that can be updated for an escalation policy, such as description, name, resolution behavior, retries, and steps. + + :param name: Specifies the name of the escalation policy. + :type name: str + + :param resolve_page_on_policy_end: Indicates whether the page is automatically resolved when the policy ends. + :type resolve_page_on_policy_end: bool, optional + + :param retries: Specifies how many times the escalation sequence is retried if there is no response. + :type retries: int, optional + + :param steps: A list of escalation steps, each defining assignment, escalation timeout, and targets. + :type steps: [EscalationPolicyUpdateRequestDataAttributesStepsItems] + """ + if resolve_page_on_policy_end is not unset: + kwargs["resolve_page_on_policy_end"] = resolve_page_on_policy_end + if retries is not unset: + kwargs["retries"] = retries + super().__init__(kwargs) + + + self_.name = name + self_.steps = steps diff --git a/datadog_api_client/v2/model/escalation_policy_update_request_data_attributes_steps_items.py b/datadog_api_client/v2/model/escalation_policy_update_request_data_attributes_steps_items.py new file mode 100644 index 0000000000..fefbce6d80 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_update_request_data_attributes_steps_items.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_step_attributes_assignment import EscalationPolicyStepAttributesAssignment + from datadog_api_client.v2.model.escalation_policy_step_target import EscalationPolicyStepTarget + +class EscalationPolicyUpdateRequestDataAttributesStepsItems(ModelNormal): + validations = { + "escalate_after_seconds": { + "inclusive_maximum": 36000, + "inclusive_minimum": 60, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_step_attributes_assignment import EscalationPolicyStepAttributesAssignment + from datadog_api_client.v2.model.escalation_policy_step_target import EscalationPolicyStepTarget + return { + "assignment": (EscalationPolicyStepAttributesAssignment,), + "escalate_after_seconds": (int,), + "id": (str,), + "targets": ([EscalationPolicyStepTarget],), + } + attribute_map = { + "assignment": "assignment", + "escalate_after_seconds": "escalate_after_seconds", + "id": "id", + "targets": "targets", + } + + def __init__(self_, targets: List[EscalationPolicyStepTarget], assignment: Union[EscalationPolicyStepAttributesAssignment, UnsetType]=unset, escalate_after_seconds: Union[int, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Defines a single escalation step within an escalation policy update request. Contains assignment strategy, escalation timeout, an optional step ID, and a list of targets. + + :param assignment: Specifies how this escalation step will assign targets (example ``default`` or ``round-robin`` ). + :type assignment: EscalationPolicyStepAttributesAssignment, optional + + :param escalate_after_seconds: Defines how many seconds to wait before escalating to the next step. + :type escalate_after_seconds: int, optional + + :param id: Specifies the unique identifier of this step. + :type id: str, optional + + :param targets: Specifies the collection of escalation targets for this step. + :type targets: [EscalationPolicyStepTarget] + """ + if assignment is not unset: + kwargs["assignment"] = assignment + if escalate_after_seconds is not unset: + kwargs["escalate_after_seconds"] = escalate_after_seconds + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.targets = targets diff --git a/datadog_api_client/v2/model/escalation_policy_update_request_data_relationships.py b/datadog_api_client/v2/model/escalation_policy_update_request_data_relationships.py new file mode 100644 index 0000000000..81417a6547 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_update_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + +class EscalationPolicyUpdateRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + return { + "teams": (DataRelationshipsTeams,), + } + attribute_map = { + "teams": "teams", + } + + def __init__(self_, teams: Union[DataRelationshipsTeams, UnsetType]=unset, **kwargs): + """ + Represents relationships in an escalation policy update request, including references to teams. + + :param teams: Associates teams with this schedule in a data structure. + :type teams: DataRelationshipsTeams, optional + """ + if teams is not unset: + kwargs["teams"] = teams + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_update_request_data_type.py b/datadog_api_client/v2/model/escalation_policy_update_request_data_type.py new file mode 100644 index 0000000000..fab87869ec --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_update_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationPolicyUpdateRequestDataType(ModelSimple): + """ + Indicates that the resource is of type `policies`. + + :param value: If omitted defaults to "policies". Must be one of ["policies"]. + :type value: str + """ + + allowed_values = { + "policies", + } + POLICIES: ClassVar["EscalationPolicyUpdateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationPolicyUpdateRequestDataType.POLICIES = EscalationPolicyUpdateRequestDataType("policies") diff --git a/datadog_api_client/v2/model/escalation_policy_user.py b/datadog_api_client/v2/model/escalation_policy_user.py new file mode 100644 index 0000000000..e1e5c0f71f --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_user.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_policy_user_attributes import EscalationPolicyUserAttributes + from datadog_api_client.v2.model.escalation_policy_user_type import EscalationPolicyUserType + +class EscalationPolicyUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_policy_user_attributes import EscalationPolicyUserAttributes + from datadog_api_client.v2.model.escalation_policy_user_type import EscalationPolicyUserType + return { + "attributes": (EscalationPolicyUserAttributes,), + "id": (str,), + "type": (EscalationPolicyUserType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: EscalationPolicyUserType, attributes: Union[EscalationPolicyUserAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Represents a user object in the context of an escalation policy, including their ``id`` , type, and basic attributes. + + :param attributes: Provides basic user information for an escalation policy, including a name and email address. + :type attributes: EscalationPolicyUserAttributes, optional + + :param id: The unique user identifier. + :type id: str, optional + + :param type: Users resource type. + :type type: EscalationPolicyUserType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/escalation_policy_user_attributes.py b/datadog_api_client/v2/model/escalation_policy_user_attributes.py new file mode 100644 index 0000000000..a1ad9ae171 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_user_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_attributes_status import UserAttributesStatus + +class EscalationPolicyUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_attributes_status import UserAttributesStatus + return { + "email": (str,), + "name": (str,), + "status": (UserAttributesStatus,), + } + attribute_map = { + "email": "email", + "name": "name", + "status": "status", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, status: Union[UserAttributesStatus, UnsetType]=unset, **kwargs): + """ + Provides basic user information for an escalation policy, including a name and email address. + + :param email: The user's email address. + :type email: str, optional + + :param name: The user's name. + :type name: str, optional + + :param status: The user's status. + :type status: UserAttributesStatus, optional + """ + if email is not unset: + kwargs["email"] = email + if name is not unset: + kwargs["name"] = name + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_policy_user_type.py b/datadog_api_client/v2/model/escalation_policy_user_type.py new file mode 100644 index 0000000000..17504cf592 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_policy_user_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationPolicyUserType(ModelSimple): + """ + Users resource type. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["EscalationPolicyUserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationPolicyUserType.USERS = EscalationPolicyUserType("users") diff --git a/datadog_api_client/v2/model/escalation_relationships.py b/datadog_api_client/v2/model/escalation_relationships.py new file mode 100644 index 0000000000..097c0f80ac --- /dev/null +++ b/datadog_api_client/v2/model/escalation_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_relationships_responders import EscalationRelationshipsResponders + +class EscalationRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_relationships_responders import EscalationRelationshipsResponders + return { + "responders": (EscalationRelationshipsResponders,), + } + attribute_map = { + "responders": "responders", + } + + def __init__(self_, responders: Union[EscalationRelationshipsResponders, UnsetType]=unset, **kwargs): + """ + Contains the relationships of an escalation object, including its responders. + + :param responders: Lists the users involved in a specific step of the escalation policy. + :type responders: EscalationRelationshipsResponders, optional + """ + if responders is not unset: + kwargs["responders"] = responders + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_relationships_responders.py b/datadog_api_client/v2/model/escalation_relationships_responders.py new file mode 100644 index 0000000000..15e6f2218c --- /dev/null +++ b/datadog_api_client/v2/model/escalation_relationships_responders.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_relationships_responders_data_items import EscalationRelationshipsRespondersDataItems + +class EscalationRelationshipsResponders(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_relationships_responders_data_items import EscalationRelationshipsRespondersDataItems + return { + "data": ([EscalationRelationshipsRespondersDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[EscalationRelationshipsRespondersDataItems], UnsetType]=unset, **kwargs): + """ + Lists the users involved in a specific step of the escalation policy. + + :param data: Array of user references assigned as responders for this escalation step. + :type data: [EscalationRelationshipsRespondersDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_relationships_responders_data_items.py b/datadog_api_client/v2/model/escalation_relationships_responders_data_items.py new file mode 100644 index 0000000000..f3b477b4ad --- /dev/null +++ b/datadog_api_client/v2/model/escalation_relationships_responders_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_relationships_responders_data_items_type import EscalationRelationshipsRespondersDataItemsType + +class EscalationRelationshipsRespondersDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_relationships_responders_data_items_type import EscalationRelationshipsRespondersDataItemsType + return { + "id": (str,), + "type": (EscalationRelationshipsRespondersDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: EscalationRelationshipsRespondersDataItemsType, **kwargs): + """ + Represents a user assigned to an escalation step. + + :param id: Unique identifier of the user assigned to the escalation step. + :type id: str + + :param type: Represents the resource type for users assigned as responders in an escalation step. + :type type: EscalationRelationshipsRespondersDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/escalation_relationships_responders_data_items_type.py b/datadog_api_client/v2/model/escalation_relationships_responders_data_items_type.py new file mode 100644 index 0000000000..01840bf857 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_relationships_responders_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationRelationshipsRespondersDataItemsType(ModelSimple): + """ + Represents the resource type for users assigned as responders in an escalation step. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["EscalationRelationshipsRespondersDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationRelationshipsRespondersDataItemsType.USERS = EscalationRelationshipsRespondersDataItemsType("users") diff --git a/datadog_api_client/v2/model/escalation_target.py b/datadog_api_client/v2/model/escalation_target.py new file mode 100644 index 0000000000..dfb55b8374 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_target.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EscalationTarget(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Represents an escalation target, which can be a team, user, schedule, or configured schedule target. + + :param id: Specifies the unique identifier of the team resource. + :type id: str + + :param type: Indicates that the resource is of type `teams`. + :type type: TeamTargetType + """ + 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.team_target import TeamTarget + from datadog_api_client.v2.model.user_target import UserTarget + from datadog_api_client.v2.model.schedule_target import ScheduleTarget + from datadog_api_client.v2.model.configured_schedule_target import ConfiguredScheduleTarget + return { + "oneOf": [ + TeamTarget, + UserTarget, + ScheduleTarget, + ConfiguredScheduleTarget, + ], + } diff --git a/datadog_api_client/v2/model/escalation_targets.py b/datadog_api_client/v2/model/escalation_targets.py new file mode 100644 index 0000000000..0b8d9e5b48 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_targets.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.escalation_target import EscalationTarget + from datadog_api_client.v2.model.team_target import TeamTarget + from datadog_api_client.v2.model.user_target import UserTarget + from datadog_api_client.v2.model.schedule_target import ScheduleTarget + from datadog_api_client.v2.model.configured_schedule_target import ConfiguredScheduleTarget + +class EscalationTargets(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.escalation_target import EscalationTarget + return { + "data": ([EscalationTarget],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[Union[EscalationTarget, TeamTarget, UserTarget, ScheduleTarget, ConfiguredScheduleTarget]], UnsetType]=unset, **kwargs): + """ + A list of escalation targets for a step + + :param data: The ``EscalationTargets`` ``data``. + :type data: [EscalationTarget], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/escalation_type.py b/datadog_api_client/v2/model/escalation_type.py new file mode 100644 index 0000000000..7e4d3dd9c3 --- /dev/null +++ b/datadog_api_client/v2/model/escalation_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EscalationType(ModelSimple): + """ + Represents the resource type for individual steps in an escalation policy used during incident response. + + :param value: If omitted defaults to "escalation_policy_steps". Must be one of ["escalation_policy_steps"]. + :type value: str + """ + + allowed_values = { + "escalation_policy_steps", + } + ESCALATION_POLICY_STEPS: ClassVar["EscalationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EscalationType.ESCALATION_POLICY_STEPS = EscalationType("escalation_policy_steps") diff --git a/datadog_api_client/v2/model/estimation.py b/datadog_api_client/v2/model/estimation.py new file mode 100644 index 0000000000..d75c6d96e0 --- /dev/null +++ b/datadog_api_client/v2/model/estimation.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cpu import Cpu + +class Estimation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cpu import Cpu + return { + "cpu": (Cpu,), + "ephemeral_storage": (int,), + "heap": (int,), + "memory": (int,), + "overhead": (int,), + } + attribute_map = { + "cpu": "cpu", + "ephemeral_storage": "ephemeral_storage", + "heap": "heap", + "memory": "memory", + "overhead": "overhead", + } + + def __init__(self_, cpu: Union[Cpu, UnsetType]=unset, ephemeral_storage: Union[int, UnsetType]=unset, heap: Union[int, UnsetType]=unset, memory: Union[int, UnsetType]=unset, overhead: Union[int, UnsetType]=unset, **kwargs): + """ + Recommended resource values for a Spark driver or executor, derived from recent real usage metrics. Used by SPA to propose more efficient pod sizing. + + :param cpu: CPU usage statistics derived from historical Spark job metrics. Provides multiple estimates so users can choose between conservative and cost-saving risk profiles. + :type cpu: Cpu, optional + + :param ephemeral_storage: Recommended ephemeral storage allocation (in MiB). Derived from job temporary storage patterns. + :type ephemeral_storage: int, optional + + :param heap: Recommended JVM heap size (in MiB). + :type heap: int, optional + + :param memory: Recommended total memory allocation (in MiB). Includes both heap and overhead. + :type memory: int, optional + + :param overhead: Recommended JVM overhead (in MiB). Computed as total memory - heap. + :type overhead: int, optional + """ + if cpu is not unset: + kwargs["cpu"] = cpu + if ephemeral_storage is not unset: + kwargs["ephemeral_storage"] = ephemeral_storage + if heap is not unset: + kwargs["heap"] = heap + if memory is not unset: + kwargs["memory"] = memory + if overhead is not unset: + kwargs["overhead"] = overhead + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event.py b/datadog_api_client/v2/model/event.py new file mode 100644 index 0000000000..0a9ca2bb9d --- /dev/null +++ b/datadog_api_client/v2/model/event.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Event(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "name": (str,), + "source_id": (int,), + "type": (str,), + } + attribute_map = { + "id": "id", + "name": "name", + "source_id": "source_id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, source_id: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The metadata associated with a request. + + :param id: Event ID. + :type id: str, optional + + :param name: The event name. + :type name: str, optional + + :param source_id: Event source ID. + :type source_id: int, optional + + :param type: Event type. + :type type: str, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if source_id is not unset: + kwargs["source_id"] = source_id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_attributes.py b/datadog_api_client/v2/model/event_attributes.py new file mode 100644 index 0000000000..2a6baa1887 --- /dev/null +++ b/datadog_api_client/v2/model/event_attributes.py @@ -0,0 +1,187 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event import Event + from datadog_api_client.v2.model.monitor_type import MonitorType + from datadog_api_client.v2.model.event_priority import EventPriority + from datadog_api_client.v2.model.event_status_type import EventStatusType + +class EventAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event import Event + from datadog_api_client.v2.model.monitor_type import MonitorType + from datadog_api_client.v2.model.event_priority import EventPriority + from datadog_api_client.v2.model.event_status_type import EventStatusType + return { + "aggregation_key": (str,), + "date_happened": (int,), + "device_name": (str,), + "duration": (int,), + "event_object": (str,), + "evt": (Event,), + "hostname": (str,), + "monitor": (MonitorType,), + "monitor_groups": ([str], none_type), + "monitor_id": (int, none_type), + "priority": (EventPriority,), + "related_event_id": (int,), + "service": (str,), + "source_type_name": (str,), + "sourcecategory": (str,), + "status": (EventStatusType,), + "tags": ([str],), + "timestamp": (int,), + "title": (str,), + } + attribute_map = { + "aggregation_key": "aggregation_key", + "date_happened": "date_happened", + "device_name": "device_name", + "duration": "duration", + "event_object": "event_object", + "evt": "evt", + "hostname": "hostname", + "monitor": "monitor", + "monitor_groups": "monitor_groups", + "monitor_id": "monitor_id", + "priority": "priority", + "related_event_id": "related_event_id", + "service": "service", + "source_type_name": "source_type_name", + "sourcecategory": "sourcecategory", + "status": "status", + "tags": "tags", + "timestamp": "timestamp", + "title": "title", + } + + def __init__(self_, aggregation_key: Union[str, UnsetType]=unset, date_happened: Union[int, UnsetType]=unset, device_name: Union[str, UnsetType]=unset, duration: Union[int, UnsetType]=unset, event_object: Union[str, UnsetType]=unset, evt: Union[Event, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, monitor: Union[MonitorType, none_type, UnsetType]=unset, monitor_groups: Union[List[str], none_type, UnsetType]=unset, monitor_id: Union[int, none_type, UnsetType]=unset, priority: Union[EventPriority, none_type, UnsetType]=unset, related_event_id: Union[int, UnsetType]=unset, service: Union[str, UnsetType]=unset, source_type_name: Union[str, UnsetType]=unset, sourcecategory: Union[str, UnsetType]=unset, status: Union[EventStatusType, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[int, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Object description of attributes from your event. + + :param aggregation_key: Aggregation key of the event. + :type aggregation_key: str, optional + + :param date_happened: POSIX timestamp of the event. Must be sent as an integer (no quotation marks). + Limited to events no older than 18 hours. + :type date_happened: int, optional + + :param device_name: A device name. + :type device_name: str, optional + + :param duration: The duration between the triggering of the event and its recovery in nanoseconds. + :type duration: int, optional + + :param event_object: The event title. + :type event_object: str, optional + + :param evt: The metadata associated with a request. + :type evt: Event, optional + + :param hostname: Host name to associate with the event. + Any tags associated with the host are also applied to this event. + :type hostname: str, optional + + :param monitor: Attributes from the monitor that triggered the event. + :type monitor: MonitorType, none_type, optional + + :param monitor_groups: List of groups referred to in the event. + :type monitor_groups: [str], none_type, optional + + :param monitor_id: ID of the monitor that triggered the event. When an event isn't related to a monitor, this field is empty. + :type monitor_id: int, none_type, optional + + :param priority: The priority of the event's monitor. For example, ``normal`` or ``low``. + :type priority: EventPriority, none_type, optional + + :param related_event_id: Related event ID. + :type related_event_id: int, optional + + :param service: Service that triggered the event. + :type service: str, optional + + :param source_type_name: The type of event being posted. + For example, ``nagios`` , ``hudson`` , ``jenkins`` , ``my_apps`` , ``chef`` , ``puppet`` , ``git`` or ``bitbucket``. + The list of standard source attribute values is `available here `_. + :type source_type_name: str, optional + + :param sourcecategory: Identifier for the source of the event, such as a monitor alert, an externally-submitted event, or an integration. + :type sourcecategory: str, optional + + :param status: If an alert event is enabled, its status is one of the following: + ``failure`` , ``error`` , ``warning`` , ``info`` , ``success`` , ``user_update`` , + ``recommendation`` , or ``snapshot``. + :type status: EventStatusType, optional + + :param tags: A list of tags to apply to the event. + :type tags: [str], optional + + :param timestamp: POSIX timestamp of your event in milliseconds. + :type timestamp: int, optional + + :param title: The event title. + :type title: str, optional + """ + if aggregation_key is not unset: + kwargs["aggregation_key"] = aggregation_key + if date_happened is not unset: + kwargs["date_happened"] = date_happened + if device_name is not unset: + kwargs["device_name"] = device_name + if duration is not unset: + kwargs["duration"] = duration + if event_object is not unset: + kwargs["event_object"] = event_object + if evt is not unset: + kwargs["evt"] = evt + if hostname is not unset: + kwargs["hostname"] = hostname + if monitor is not unset: + kwargs["monitor"] = monitor + if monitor_groups is not unset: + kwargs["monitor_groups"] = monitor_groups + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if priority is not unset: + kwargs["priority"] = priority + if related_event_id is not unset: + kwargs["related_event_id"] = related_event_id + if service is not unset: + kwargs["service"] = service + if source_type_name is not unset: + kwargs["source_type_name"] = source_type_name + if sourcecategory is not unset: + kwargs["sourcecategory"] = sourcecategory + if status is not unset: + kwargs["status"] = status + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_category.py b/datadog_api_client/v2/model/event_category.py new file mode 100644 index 0000000000..5afa6934cd --- /dev/null +++ b/datadog_api_client/v2/model/event_category.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventCategory(ModelSimple): + """ + Event category identifying the type of event. + + :param value: Must be one of ["change", "alert"]. + :type value: str + """ + + allowed_values = { + "change", + "alert", + } + CHANGE: ClassVar["EventCategory"] + ALERT: ClassVar["EventCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventCategory.CHANGE = EventCategory("change") +EventCategory.ALERT = EventCategory("alert") diff --git a/datadog_api_client/v2/model/event_create_request.py b/datadog_api_client/v2/model/event_create_request.py new file mode 100644 index 0000000000..9e45814443 --- /dev/null +++ b/datadog_api_client/v2/model/event_create_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_payload import EventPayload + from datadog_api_client.v2.model.event_create_request_type import EventCreateRequestType + from datadog_api_client.v2.model.change_event_custom_attributes import ChangeEventCustomAttributes + from datadog_api_client.v2.model.alert_event_custom_attributes import AlertEventCustomAttributes + +class EventCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_payload import EventPayload + from datadog_api_client.v2.model.event_create_request_type import EventCreateRequestType + return { + "attributes": (EventPayload,), + "type": (EventCreateRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: EventPayload, type: EventCreateRequestType, **kwargs): + """ + An event object. + + :param attributes: Event attributes. + :type attributes: EventPayload + + :param type: Entity type. + :type type: EventCreateRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/event_create_request_payload.py b/datadog_api_client/v2/model/event_create_request_payload.py new file mode 100644 index 0000000000..0ae194c338 --- /dev/null +++ b/datadog_api_client/v2/model/event_create_request_payload.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_create_request import EventCreateRequest + from datadog_api_client.v2.model.change_event_custom_attributes import ChangeEventCustomAttributes + from datadog_api_client.v2.model.alert_event_custom_attributes import AlertEventCustomAttributes + +class EventCreateRequestPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_create_request import EventCreateRequest + return { + "data": (EventCreateRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: EventCreateRequest, **kwargs): + """ + Payload for creating an event. + + :param data: An event object. + :type data: EventCreateRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/event_create_request_type.py b/datadog_api_client/v2/model/event_create_request_type.py new file mode 100644 index 0000000000..6074f45e10 --- /dev/null +++ b/datadog_api_client/v2/model/event_create_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventCreateRequestType(ModelSimple): + """ + Entity type. + + :param value: If omitted defaults to "event". Must be one of ["event"]. + :type value: str + """ + + allowed_values = { + "event", + } + EVENT: ClassVar["EventCreateRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventCreateRequestType.EVENT = EventCreateRequestType("event") diff --git a/datadog_api_client/v2/model/event_create_response.py b/datadog_api_client/v2/model/event_create_response.py new file mode 100644 index 0000000000..0be7dfa0cd --- /dev/null +++ b/datadog_api_client/v2/model/event_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_create_response_attributes import EventCreateResponseAttributes + +class EventCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_create_response_attributes import EventCreateResponseAttributes + return { + "attributes": (EventCreateResponseAttributes,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[EventCreateResponseAttributes, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Event object. + + :param attributes: Event attributes. + :type attributes: EventCreateResponseAttributes, optional + + :param type: Entity type. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_create_response_attributes.py b/datadog_api_client/v2/model/event_create_response_attributes.py new file mode 100644 index 0000000000..8d9798df5f --- /dev/null +++ b/datadog_api_client/v2/model/event_create_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_create_response_attributes_attributes import EventCreateResponseAttributesAttributes + +class EventCreateResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_create_response_attributes_attributes import EventCreateResponseAttributesAttributes + return { + "attributes": (EventCreateResponseAttributesAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: Union[EventCreateResponseAttributesAttributes, UnsetType]=unset, **kwargs): + """ + Event attributes. + + :param attributes: JSON object for category-specific attributes. + :type attributes: EventCreateResponseAttributesAttributes, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_create_response_attributes_attributes.py b/datadog_api_client/v2/model/event_create_response_attributes_attributes.py new file mode 100644 index 0000000000..ff2ab12adb --- /dev/null +++ b/datadog_api_client/v2/model/event_create_response_attributes_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_create_response_attributes_attributes_evt import EventCreateResponseAttributesAttributesEvt + +class EventCreateResponseAttributesAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_create_response_attributes_attributes_evt import EventCreateResponseAttributesAttributesEvt + return { + "evt": (EventCreateResponseAttributesAttributesEvt,), + } + attribute_map = { + "evt": "evt", + } + + def __init__(self_, evt: Union[EventCreateResponseAttributesAttributesEvt, UnsetType]=unset, **kwargs): + """ + JSON object for category-specific attributes. + + :param evt: JSON object of event system attributes. + :type evt: EventCreateResponseAttributesAttributesEvt, optional + """ + if evt is not unset: + kwargs["evt"] = evt + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_create_response_attributes_attributes_evt.py b/datadog_api_client/v2/model/event_create_response_attributes_attributes_evt.py new file mode 100644 index 0000000000..cdd829c8ec --- /dev/null +++ b/datadog_api_client/v2/model/event_create_response_attributes_attributes_evt.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventCreateResponseAttributesAttributesEvt(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "uid": (str,), + } + attribute_map = { + "id": "id", + "uid": "uid", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, uid: Union[str, UnsetType]=unset, **kwargs): + """ + JSON object of event system attributes. + + :param id: Event identifier. This field is deprecated and will be removed in a future version. Use the ``uid`` field instead. **Deprecated**. + :type id: str, optional + + :param uid: A unique identifier for the event. You can use this identifier to query or reference the event. + :type uid: str, optional + """ + if id is not unset: + kwargs["id"] = id + if uid is not unset: + kwargs["uid"] = uid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_create_response_payload.py b/datadog_api_client/v2/model/event_create_response_payload.py new file mode 100644 index 0000000000..3feb8d572a --- /dev/null +++ b/datadog_api_client/v2/model/event_create_response_payload.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_create_response import EventCreateResponse + from datadog_api_client.v2.model.event_create_response_payload_links import EventCreateResponsePayloadLinks + +class EventCreateResponsePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_create_response import EventCreateResponse + from datadog_api_client.v2.model.event_create_response_payload_links import EventCreateResponsePayloadLinks + return { + "data": (EventCreateResponse,), + "links": (EventCreateResponsePayloadLinks,), + } + attribute_map = { + "data": "data", + "links": "links", + } + + def __init__(self_, data: Union[EventCreateResponse, UnsetType]=unset, links: Union[EventCreateResponsePayloadLinks, UnsetType]=unset, **kwargs): + """ + Event creation response. + + :param data: Event object. + :type data: EventCreateResponse, optional + + :param links: Links to the event. + :type links: EventCreateResponsePayloadLinks, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_create_response_payload_links.py b/datadog_api_client/v2/model/event_create_response_payload_links.py new file mode 100644 index 0000000000..663f59cc6b --- /dev/null +++ b/datadog_api_client/v2/model/event_create_response_payload_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventCreateResponsePayloadLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "self": (str,), + } + attribute_map = { + "self": "self", + } + + def __init__(self_, self: Union[str, UnsetType]=unset, **kwargs): + """ + Links to the event. + + :param self: The URL of the event. This link is only functional when using the default subdomain. + :type self: str, optional + """ + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_payload.py b/datadog_api_client/v2/model/event_payload.py new file mode 100644 index 0000000000..aa0d93ddee --- /dev/null +++ b/datadog_api_client/v2/model/event_payload.py @@ -0,0 +1,136 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_payload_attributes import EventPayloadAttributes + from datadog_api_client.v2.model.event_category import EventCategory + from datadog_api_client.v2.model.event_payload_integration_id import EventPayloadIntegrationId + from datadog_api_client.v2.model.change_event_custom_attributes import ChangeEventCustomAttributes + from datadog_api_client.v2.model.alert_event_custom_attributes import AlertEventCustomAttributes + +class EventPayload(ModelNormal): + validations = { + "aggregation_key": { + "max_length": 100, + "min_length": 1, + }, + "host": { + "max_length": 255, + "min_length": 1, + }, + "message": { + "max_length": 4000, + "min_length": 1, + }, + "tags": { + "max_items": 100, + "min_items": 1, + }, + "title": { + "max_length": 500, + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_payload_attributes import EventPayloadAttributes + from datadog_api_client.v2.model.event_category import EventCategory + from datadog_api_client.v2.model.event_payload_integration_id import EventPayloadIntegrationId + return { + "aggregation_key": (str,), + "attributes": (EventPayloadAttributes,), + "category": (EventCategory,), + "host": (str,), + "integration_id": (EventPayloadIntegrationId,), + "message": (str,), + "tags": ([str],), + "timestamp": (str,), + "title": (str,), + } + attribute_map = { + "aggregation_key": "aggregation_key", + "attributes": "attributes", + "category": "category", + "host": "host", + "integration_id": "integration_id", + "message": "message", + "tags": "tags", + "timestamp": "timestamp", + "title": "title", + } + + def __init__(self_, attributes: Union[EventPayloadAttributes, ChangeEventCustomAttributes, AlertEventCustomAttributes], category: EventCategory, title: str, aggregation_key: Union[str, UnsetType]=unset, host: Union[str, UnsetType]=unset, integration_id: Union[EventPayloadIntegrationId, UnsetType]=unset, message: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[str, UnsetType]=unset, **kwargs): + """ + Event attributes. + + :param aggregation_key: A string used for aggregation when `correlating `_ events. If you specify a key, events are deduplicated to alerts based on this key. Limited to 100 characters. + :type aggregation_key: str, optional + + :param attributes: JSON object for category-specific attributes. Schema is different per event category. + :type attributes: EventPayloadAttributes + + :param category: Event category identifying the type of event. + :type category: EventCategory + + :param host: Host name to associate with the event. Any tags associated with the host are also applied to this event. Limited to 255 characters. + :type host: str, optional + + :param integration_id: Integration ID sourced from integration manifests. + :type integration_id: EventPayloadIntegrationId, optional + + :param message: Free formed text associated with the event. It's suggested to use ``data.attributes.attributes.custom`` for well-structured attributes. Limited to 4000 characters. + :type message: str, optional + + :param tags: A list of tags associated with the event. Maximum of 100 tags allowed. + Refer to `Tags docs `_. + :type tags: [str], optional + + :param timestamp: Timestamp when the event occurred. Must follow `ISO 8601 `_ format. + For example ``"2017-01-15T01:30:15.010000Z"``. + Defaults to the timestamp of receipt. Limited to values no older than 18 hours. + :type timestamp: str, optional + + :param title: The title of the event. Limited to 500 characters. + :type title: str + """ + if aggregation_key is not unset: + kwargs["aggregation_key"] = aggregation_key + if host is not unset: + kwargs["host"] = host + if integration_id is not unset: + kwargs["integration_id"] = integration_id + if message is not unset: + kwargs["message"] = message + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + + self_.attributes = attributes + self_.category = category + self_.title = title diff --git a/datadog_api_client/v2/model/event_payload_attributes.py b/datadog_api_client/v2/model/event_payload_attributes.py new file mode 100644 index 0000000000..a531f76548 --- /dev/null +++ b/datadog_api_client/v2/model/event_payload_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventPayloadAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + JSON object for category-specific attributes. Schema is different per event category. + + :param author: The entity that made the change. Optional, if provided it must include `type` and `name`. + :type author: ChangeEventCustomAttributesAuthor, optional + + :param change_metadata: Free form JSON object with information related to the `change` event. Supports up to 100 properties per object and a maximum nesting depth of 10 levels. + :type change_metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param changed_resource: A uniquely identified resource. + :type changed_resource: ChangeEventCustomAttributesChangedResource + + :param impacted_resources: A list of resources impacted by this change. It is recommended to provide an impacted resource to display + the change event at the correct location. Only resources of type `service` are supported. Maximum of 100 impacted resources allowed. + :type impacted_resources: [ChangeEventCustomAttributesImpactedResourcesItems], optional + + :param new_value: Free form JSON object representing the new state of the changed resource. + :type new_value: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param prev_value: Free form JSON object representing the previous state of the changed resource. + :type prev_value: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param custom: Free form JSON object for arbitrary data. Supports up to 100 properties per object and a maximum nesting depth of 10 levels. + :type custom: AlertEventCustomAttributesCustom, optional + + :param links: The links related to the event. Maximum of 20 links allowed. + :type links: [AlertEventCustomAttributesLinksItems], optional + + :param priority: The priority of the alert. + :type priority: AlertEventCustomAttributesPriority, optional + + :param status: The status of the alert. + :type status: AlertEventCustomAttributesStatus + """ + 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.change_event_custom_attributes import ChangeEventCustomAttributes + from datadog_api_client.v2.model.alert_event_custom_attributes import AlertEventCustomAttributes + return { + "oneOf": [ + ChangeEventCustomAttributes, + AlertEventCustomAttributes, + ], + } diff --git a/datadog_api_client/v2/model/event_payload_integration_id.py b/datadog_api_client/v2/model/event_payload_integration_id.py new file mode 100644 index 0000000000..53fb35293d --- /dev/null +++ b/datadog_api_client/v2/model/event_payload_integration_id.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventPayloadIntegrationId(ModelSimple): + """ + Integration ID sourced from integration manifests. + + :param value: If omitted defaults to "custom-events". Must be one of ["custom-events"]. + :type value: str + """ + + allowed_values = { + "custom-events", + } + CUSTOM_EVENTS: ClassVar["EventPayloadIntegrationId"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventPayloadIntegrationId.CUSTOM_EVENTS = EventPayloadIntegrationId("custom-events") diff --git a/datadog_api_client/v2/model/event_priority.py b/datadog_api_client/v2/model/event_priority.py new file mode 100644 index 0000000000..f952547a52 --- /dev/null +++ b/datadog_api_client/v2/model/event_priority.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventPriority(ModelSimple): + """ + The priority of the event's monitor. For example, `normal` or `low`. + + :param value: Must be one of ["normal", "low"]. + :type value: str + """ + + allowed_values = { + "normal", + "low", + } + NORMAL: ClassVar["EventPriority"] + LOW: ClassVar["EventPriority"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventPriority.NORMAL = EventPriority("normal") +EventPriority.LOW = EventPriority("low") diff --git a/datadog_api_client/v2/model/event_response.py b/datadog_api_client/v2/model/event_response.py new file mode 100644 index 0000000000..58cccf60e8 --- /dev/null +++ b/datadog_api_client/v2/model/event_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_response_attributes import EventResponseAttributes + from datadog_api_client.v2.model.event_type import EventType + +class EventResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_response_attributes import EventResponseAttributes + from datadog_api_client.v2.model.event_type import EventType + return { + "attributes": (EventResponseAttributes,), + "id": (str,), + "type": (EventType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[EventResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[EventType, UnsetType]=unset, **kwargs): + """ + The object description of an event after being processed and stored by Datadog. + + :param attributes: The object description of an event response attribute. + :type attributes: EventResponseAttributes, optional + + :param id: the unique ID of the event. + :type id: str, optional + + :param type: Type of the event. + :type type: EventType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_response_attributes.py b/datadog_api_client/v2/model/event_response_attributes.py new file mode 100644 index 0000000000..6a8c56b6e2 --- /dev/null +++ b/datadog_api_client/v2/model/event_response_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_attributes import EventAttributes + +class EventResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_attributes import EventAttributes + return { + "attributes": (EventAttributes,), + "message": (str,), + "tags": ([str],), + "timestamp": (datetime,), + } + attribute_map = { + "attributes": "attributes", + "message": "message", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, attributes: Union[EventAttributes, UnsetType]=unset, message: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[datetime, UnsetType]=unset, **kwargs): + """ + The object description of an event response attribute. + + :param attributes: Object description of attributes from your event. + :type attributes: EventAttributes, optional + + :param message: The message of the event. + :type message: str, optional + + :param tags: An array of tags associated with the event. + :type tags: [str], optional + + :param timestamp: The timestamp of the event. + :type timestamp: datetime, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if message is not unset: + kwargs["message"] = message + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_status_type.py b/datadog_api_client/v2/model/event_status_type.py new file mode 100644 index 0000000000..263addda65 --- /dev/null +++ b/datadog_api_client/v2/model/event_status_type.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventStatusType(ModelSimple): + """ + If an alert event is enabled, its status is one of the following: + `failure`, `error`, `warning`, `info`, `success`, `user_update`, + `recommendation`, or `snapshot`. + + :param value: Must be one of ["failure", "error", "warning", "info", "success", "user_update", "recommendation", "snapshot"]. + :type value: str + """ + + allowed_values = { + "failure", + "error", + "warning", + "info", + "success", + "user_update", + "recommendation", + "snapshot", + } + FAILURE: ClassVar["EventStatusType"] + ERROR: ClassVar["EventStatusType"] + WARNING: ClassVar["EventStatusType"] + INFO: ClassVar["EventStatusType"] + SUCCESS: ClassVar["EventStatusType"] + USER_UPDATE: ClassVar["EventStatusType"] + RECOMMENDATION: ClassVar["EventStatusType"] + SNAPSHOT: ClassVar["EventStatusType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventStatusType.FAILURE = EventStatusType("failure") +EventStatusType.ERROR = EventStatusType("error") +EventStatusType.WARNING = EventStatusType("warning") +EventStatusType.INFO = EventStatusType("info") +EventStatusType.SUCCESS = EventStatusType("success") +EventStatusType.USER_UPDATE = EventStatusType("user_update") +EventStatusType.RECOMMENDATION = EventStatusType("recommendation") +EventStatusType.SNAPSHOT = EventStatusType("snapshot") diff --git a/datadog_api_client/v2/model/event_system_attributes.py b/datadog_api_client/v2/model/event_system_attributes.py new file mode 100644 index 0000000000..2db59527ac --- /dev/null +++ b/datadog_api_client/v2/model/event_system_attributes.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_system_attributes_category import EventSystemAttributesCategory + from datadog_api_client.v2.model.event_system_attributes_integration_id import EventSystemAttributesIntegrationId + +class EventSystemAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_system_attributes_category import EventSystemAttributesCategory + from datadog_api_client.v2.model.event_system_attributes_integration_id import EventSystemAttributesIntegrationId + return { + "category": (EventSystemAttributesCategory,), + "id": (str,), + "integration_id": (EventSystemAttributesIntegrationId,), + "source_id": (int,), + "uid": (str,), + } + attribute_map = { + "category": "category", + "id": "id", + "integration_id": "integration_id", + "source_id": "source_id", + "uid": "uid", + } + + def __init__(self_, category: Union[EventSystemAttributesCategory, UnsetType]=unset, id: Union[str, UnsetType]=unset, integration_id: Union[EventSystemAttributesIntegrationId, UnsetType]=unset, source_id: Union[int, UnsetType]=unset, uid: Union[str, UnsetType]=unset, **kwargs): + """ + JSON object of event system attributes. + + :param category: Event category identifying the type of event. + :type category: EventSystemAttributesCategory, optional + + :param id: Event identifier. This field is deprecated and will be removed in a future version. Use the ``uid`` field instead. + :type id: str, optional + + :param integration_id: Integration ID sourced from integration manifests. + :type integration_id: EventSystemAttributesIntegrationId, optional + + :param source_id: The source type ID of the event. + :type source_id: int, optional + + :param uid: A unique identifier for the event. You can use this identifier to query or reference the event. + :type uid: str, optional + """ + if category is not unset: + kwargs["category"] = category + if id is not unset: + kwargs["id"] = id + if integration_id is not unset: + kwargs["integration_id"] = integration_id + if source_id is not unset: + kwargs["source_id"] = source_id + if uid is not unset: + kwargs["uid"] = uid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/event_system_attributes_category.py b/datadog_api_client/v2/model/event_system_attributes_category.py new file mode 100644 index 0000000000..06a448bb62 --- /dev/null +++ b/datadog_api_client/v2/model/event_system_attributes_category.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventSystemAttributesCategory(ModelSimple): + """ + Event category identifying the type of event. + + :param value: Must be one of ["change", "alert"]. + :type value: str + """ + + allowed_values = { + "change", + "alert", + } + CHANGE: ClassVar["EventSystemAttributesCategory"] + ALERT: ClassVar["EventSystemAttributesCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventSystemAttributesCategory.CHANGE = EventSystemAttributesCategory("change") +EventSystemAttributesCategory.ALERT = EventSystemAttributesCategory("alert") diff --git a/datadog_api_client/v2/model/event_system_attributes_integration_id.py b/datadog_api_client/v2/model/event_system_attributes_integration_id.py new file mode 100644 index 0000000000..8ad506e84f --- /dev/null +++ b/datadog_api_client/v2/model/event_system_attributes_integration_id.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventSystemAttributesIntegrationId(ModelSimple): + """ + Integration ID sourced from integration manifests. + + :param value: If omitted defaults to "custom-events". Must be one of ["custom-events"]. + :type value: str + """ + + allowed_values = { + "custom-events", + } + CUSTOM_EVENTS: ClassVar["EventSystemAttributesIntegrationId"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventSystemAttributesIntegrationId.CUSTOM_EVENTS = EventSystemAttributesIntegrationId("custom-events") diff --git a/datadog_api_client/v2/model/event_type.py b/datadog_api_client/v2/model/event_type.py new file mode 100644 index 0000000000..a53e8c8026 --- /dev/null +++ b/datadog_api_client/v2/model/event_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventType(ModelSimple): + """ + Type of the event. + + :param value: If omitted defaults to "event". Must be one of ["event"]. + :type value: str + """ + + allowed_values = { + "event", + } + EVENT: ClassVar["EventType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventType.EVENT = EventType("event") diff --git a/datadog_api_client/v2/model/events_aggregation.py b/datadog_api_client/v2/model/events_aggregation.py new file mode 100644 index 0000000000..4f39b0b5b0 --- /dev/null +++ b/datadog_api_client/v2/model/events_aggregation.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventsAggregation(ModelSimple): + """ + The type of aggregation that can be performed on events-based queries. + + :param value: If omitted defaults to "count". Must be one of ["count", "cardinality", "pc75", "pc90", "pc95", "pc98", "pc99", "sum", "min", "max", "avg"]. + :type value: str + """ + + allowed_values = { + "count", + "cardinality", + "pc75", + "pc90", + "pc95", + "pc98", + "pc99", + "sum", + "min", + "max", + "avg", + } + COUNT: ClassVar["EventsAggregation"] + CARDINALITY: ClassVar["EventsAggregation"] + PC75: ClassVar["EventsAggregation"] + PC90: ClassVar["EventsAggregation"] + PC95: ClassVar["EventsAggregation"] + PC98: ClassVar["EventsAggregation"] + PC99: ClassVar["EventsAggregation"] + SUM: ClassVar["EventsAggregation"] + MIN: ClassVar["EventsAggregation"] + MAX: ClassVar["EventsAggregation"] + AVG: ClassVar["EventsAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventsAggregation.COUNT = EventsAggregation("count") +EventsAggregation.CARDINALITY = EventsAggregation("cardinality") +EventsAggregation.PC75 = EventsAggregation("pc75") +EventsAggregation.PC90 = EventsAggregation("pc90") +EventsAggregation.PC95 = EventsAggregation("pc95") +EventsAggregation.PC98 = EventsAggregation("pc98") +EventsAggregation.PC99 = EventsAggregation("pc99") +EventsAggregation.SUM = EventsAggregation("sum") +EventsAggregation.MIN = EventsAggregation("min") +EventsAggregation.MAX = EventsAggregation("max") +EventsAggregation.AVG = EventsAggregation("avg") diff --git a/datadog_api_client/v2/model/events_compute.py b/datadog_api_client/v2/model/events_compute.py new file mode 100644 index 0000000000..a98e096c96 --- /dev/null +++ b/datadog_api_client/v2/model/events_compute.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.events_aggregation import EventsAggregation + +class EventsCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.events_aggregation import EventsAggregation + return { + "aggregation": (EventsAggregation,), + "interval": (int,), + "metric": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + } + + def __init__(self_, aggregation: EventsAggregation, interval: Union[int, UnsetType]=unset, metric: Union[str, UnsetType]=unset, **kwargs): + """ + The instructions for what to compute for this query. + + :param aggregation: The type of aggregation that can be performed on events-based queries. + :type aggregation: EventsAggregation + + :param interval: Interval for compute in milliseconds. + :type interval: int, optional + + :param metric: The "measure" attribute on which to perform the computation. + :type metric: str, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v2/model/events_data_source.py b/datadog_api_client/v2/model/events_data_source.py new file mode 100644 index 0000000000..c89f2ae652 --- /dev/null +++ b/datadog_api_client/v2/model/events_data_source.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventsDataSource(ModelSimple): + """ + A data source that is powered by the Events Platform. + + :param value: If omitted defaults to "logs". Must be one of ["logs", "spans", "network", "rum", "security_signals", "profiles", "audit", "events", "ci_tests", "ci_pipelines", "incident_analytics", "product_analytics", "on_call_events", "dora"]. + :type value: str + """ + + allowed_values = { + "logs", + "spans", + "network", + "rum", + "security_signals", + "profiles", + "audit", + "events", + "ci_tests", + "ci_pipelines", + "incident_analytics", + "product_analytics", + "on_call_events", + "dora", + } + LOGS: ClassVar["EventsDataSource"] + SPANS: ClassVar["EventsDataSource"] + NETWORK: ClassVar["EventsDataSource"] + RUM: ClassVar["EventsDataSource"] + SECURITY_SIGNALS: ClassVar["EventsDataSource"] + PROFILES: ClassVar["EventsDataSource"] + AUDIT: ClassVar["EventsDataSource"] + EVENTS: ClassVar["EventsDataSource"] + CI_TESTS: ClassVar["EventsDataSource"] + CI_PIPELINES: ClassVar["EventsDataSource"] + INCIDENT_ANALYTICS: ClassVar["EventsDataSource"] + PRODUCT_ANALYTICS: ClassVar["EventsDataSource"] + ON_CALL_EVENTS: ClassVar["EventsDataSource"] + DORA: ClassVar["EventsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventsDataSource.LOGS = EventsDataSource("logs") +EventsDataSource.SPANS = EventsDataSource("spans") +EventsDataSource.NETWORK = EventsDataSource("network") +EventsDataSource.RUM = EventsDataSource("rum") +EventsDataSource.SECURITY_SIGNALS = EventsDataSource("security_signals") +EventsDataSource.PROFILES = EventsDataSource("profiles") +EventsDataSource.AUDIT = EventsDataSource("audit") +EventsDataSource.EVENTS = EventsDataSource("events") +EventsDataSource.CI_TESTS = EventsDataSource("ci_tests") +EventsDataSource.CI_PIPELINES = EventsDataSource("ci_pipelines") +EventsDataSource.INCIDENT_ANALYTICS = EventsDataSource("incident_analytics") +EventsDataSource.PRODUCT_ANALYTICS = EventsDataSource("product_analytics") +EventsDataSource.ON_CALL_EVENTS = EventsDataSource("on_call_events") +EventsDataSource.DORA = EventsDataSource("dora") diff --git a/datadog_api_client/v2/model/events_group_by.py b/datadog_api_client/v2/model/events_group_by.py new file mode 100644 index 0000000000..489a309b2f --- /dev/null +++ b/datadog_api_client/v2/model/events_group_by.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.events_group_by_sort import EventsGroupBySort + +class EventsGroupBy(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 10000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.events_group_by_sort import EventsGroupBySort + return { + "facet": (str,), + "limit": (int,), + "sort": (EventsGroupBySort,), + } + attribute_map = { + "facet": "facet", + "limit": "limit", + "sort": "sort", + } + + def __init__(self_, facet: str, limit: Union[int, UnsetType]=unset, sort: Union[EventsGroupBySort, UnsetType]=unset, **kwargs): + """ + A dimension on which to split a query's results. + + :param facet: The facet by which to split groups. + :type facet: str + + :param limit: The maximum buckets to return for this group by. Note: at most 10000 buckets are allowed. + If grouping by multiple facets, the product of limits must not exceed 10000. + :type limit: int, optional + + :param sort: The dimension by which to sort a query's results. + :type sort: EventsGroupBySort, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v2/model/events_group_by_sort.py b/datadog_api_client/v2/model/events_group_by_sort.py new file mode 100644 index 0000000000..d4d5bc3585 --- /dev/null +++ b/datadog_api_client/v2/model/events_group_by_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.events_aggregation import EventsAggregation + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + from datadog_api_client.v2.model.events_sort_type import EventsSortType + +class EventsGroupBySort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.events_aggregation import EventsAggregation + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + from datadog_api_client.v2.model.events_sort_type import EventsSortType + return { + "aggregation": (EventsAggregation,), + "metric": (str,), + "order": (QuerySortOrder,), + "type": (EventsSortType,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + "order": "order", + "type": "type", + } + + def __init__(self_, aggregation: EventsAggregation, metric: Union[str, UnsetType]=unset, order: Union[QuerySortOrder, UnsetType]=unset, type: Union[EventsSortType, UnsetType]=unset, **kwargs): + """ + The dimension by which to sort a query's results. + + :param aggregation: The type of aggregation that can be performed on events-based queries. + :type aggregation: EventsAggregation + + :param metric: The metric's calculated value which should be used to define the sort order of a query's results. + :type metric: str, optional + + :param order: Direction of sort. + :type order: QuerySortOrder, optional + + :param type: The type of sort to use on the calculated value. + :type type: EventsSortType, optional + """ + if metric is not unset: + kwargs["metric"] = metric + if order is not unset: + kwargs["order"] = order + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v2/model/events_list_request.py b/datadog_api_client/v2/model/events_list_request.py new file mode 100644 index 0000000000..1a7f49ff8a --- /dev/null +++ b/datadog_api_client/v2/model/events_list_request.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.events_query_filter import EventsQueryFilter + from datadog_api_client.v2.model.events_query_options import EventsQueryOptions + from datadog_api_client.v2.model.events_request_page import EventsRequestPage + from datadog_api_client.v2.model.events_sort import EventsSort + +class EventsListRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.events_query_filter import EventsQueryFilter + from datadog_api_client.v2.model.events_query_options import EventsQueryOptions + from datadog_api_client.v2.model.events_request_page import EventsRequestPage + from datadog_api_client.v2.model.events_sort import EventsSort + return { + "filter": (EventsQueryFilter,), + "options": (EventsQueryOptions,), + "page": (EventsRequestPage,), + "sort": (EventsSort,), + } + attribute_map = { + "filter": "filter", + "options": "options", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[EventsQueryFilter, UnsetType]=unset, options: Union[EventsQueryOptions, UnsetType]=unset, page: Union[EventsRequestPage, UnsetType]=unset, sort: Union[EventsSort, UnsetType]=unset, **kwargs): + """ + The object sent with the request to retrieve a list of events from your organization. + + :param filter: The search and filter query settings. + :type filter: EventsQueryFilter, optional + + :param options: The global query options that are used. Either provide a timezone or a time offset but not both, + otherwise the query fails. + :type options: EventsQueryOptions, optional + + :param page: Pagination settings. + :type page: EventsRequestPage, optional + + :param sort: The sort parameters when querying events. + :type sort: EventsSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/events_list_response.py b/datadog_api_client/v2/model/events_list_response.py new file mode 100644 index 0000000000..fe87de5fb4 --- /dev/null +++ b/datadog_api_client/v2/model/events_list_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.event_response import EventResponse + from datadog_api_client.v2.model.events_list_response_links import EventsListResponseLinks + from datadog_api_client.v2.model.events_response_metadata import EventsResponseMetadata + +class EventsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.event_response import EventResponse + from datadog_api_client.v2.model.events_list_response_links import EventsListResponseLinks + from datadog_api_client.v2.model.events_response_metadata import EventsResponseMetadata + return { + "data": ([EventResponse],), + "links": (EventsListResponseLinks,), + "meta": (EventsResponseMetadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[EventResponse], UnsetType]=unset, links: Union[EventsListResponseLinks, UnsetType]=unset, meta: Union[EventsResponseMetadata, UnsetType]=unset, **kwargs): + """ + The response object with all events matching the request and pagination information. + + :param data: An array of events matching the request. + :type data: [EventResponse], optional + + :param links: Links attributes. + :type links: EventsListResponseLinks, optional + + :param meta: The metadata associated with a request. + :type meta: EventsResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/events_list_response_links.py b/datadog_api_client/v2/model/events_list_response_links.py new file mode 100644 index 0000000000..ef3bfbd755 --- /dev/null +++ b/datadog_api_client/v2/model/events_list_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventsListResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param next: Link for the next set of results. Note that the request can also be made using the + POST endpoint. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/events_query_filter.py b/datadog_api_client/v2/model/events_query_filter.py new file mode 100644 index 0000000000..bf33a0e84c --- /dev/null +++ b/datadog_api_client/v2/model/events_query_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventsQueryFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (str,), + "query": (str,), + "to": (str,), + } + attribute_map = { + "_from": "from", + "query": "query", + "to": "to", + } + + def __init__(self_, _from: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, to: Union[str, UnsetType]=unset, **kwargs): + """ + The search and filter query settings. + + :param _from: The minimum time for the requested events. Supports date math and regular timestamps in milliseconds. + :type _from: str, optional + + :param query: The search query following the event search syntax. + :type query: str, optional + + :param to: The maximum time for the requested events. Supports date math and regular timestamps in milliseconds. + :type to: str, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if query is not unset: + kwargs["query"] = query + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/events_query_group_bys.py b/datadog_api_client/v2/model/events_query_group_bys.py new file mode 100644 index 0000000000..deefff829d --- /dev/null +++ b/datadog_api_client/v2/model/events_query_group_bys.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventsQueryGroupBys(ModelSimple): + """ + The list of facets on which to split results. + + + :type value: [EventsGroupBy] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.events_group_by import EventsGroupBy + return { + "value": ([EventsGroupBy],), + } diff --git a/datadog_api_client/v2/model/events_query_options.py b/datadog_api_client/v2/model/events_query_options.py new file mode 100644 index 0000000000..7d2c1c7b24 --- /dev/null +++ b/datadog_api_client/v2/model/events_query_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventsQueryOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time_offset": (int,), + "timezone": (str,), + } + attribute_map = { + "time_offset": "timeOffset", + "timezone": "timezone", + } + + def __init__(self_, time_offset: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + The global query options that are used. Either provide a timezone or a time offset but not both, + otherwise the query fails. + + :param time_offset: The time offset to apply to the query in seconds. + :type time_offset: int, optional + + :param timezone: The timezone can be specified as GMT, UTC, an offset from UTC (like UTC+1), or as a Timezone Database identifier (like America/New_York). + :type timezone: str, optional + """ + if time_offset is not unset: + kwargs["time_offset"] = time_offset + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/events_request_page.py b/datadog_api_client/v2/model/events_request_page.py new file mode 100644 index 0000000000..f24de2b4a3 --- /dev/null +++ b/datadog_api_client/v2/model/events_request_page.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventsRequestPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination settings. + + :param cursor: The returned paging point to use to get the next results. + :type cursor: str, optional + + :param limit: The maximum number of logs in the response. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/events_response_metadata.py b/datadog_api_client/v2/model/events_response_metadata.py new file mode 100644 index 0000000000..7e39c8fd68 --- /dev/null +++ b/datadog_api_client/v2/model/events_response_metadata.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.events_response_metadata_page import EventsResponseMetadataPage + from datadog_api_client.v2.model.events_warning import EventsWarning + +class EventsResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.events_response_metadata_page import EventsResponseMetadataPage + from datadog_api_client.v2.model.events_warning import EventsWarning + return { + "elapsed": (int,), + "page": (EventsResponseMetadataPage,), + "request_id": (str,), + "status": (str,), + "warnings": ([EventsWarning],), + } + attribute_map = { + "elapsed": "elapsed", + "page": "page", + "request_id": "request_id", + "status": "status", + "warnings": "warnings", + } + + def __init__(self_, elapsed: Union[int, UnsetType]=unset, page: Union[EventsResponseMetadataPage, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, warnings: Union[List[EventsWarning], UnsetType]=unset, **kwargs): + """ + The metadata associated with a request. + + :param elapsed: The time elapsed in milliseconds. + :type elapsed: int, optional + + :param page: Pagination attributes. + :type page: EventsResponseMetadataPage, optional + + :param request_id: The identifier of the request. + :type request_id: str, optional + + :param status: The request status. + :type status: str, optional + + :param warnings: A list of warnings (non-fatal errors) encountered. Partial results might be returned if + warnings are present in the response. + :type warnings: [EventsWarning], optional + """ + if elapsed is not unset: + kwargs["elapsed"] = elapsed + if page is not unset: + kwargs["page"] = page + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/events_response_metadata_page.py b/datadog_api_client/v2/model/events_response_metadata_page.py new file mode 100644 index 0000000000..7466ac51bc --- /dev/null +++ b/datadog_api_client/v2/model/events_response_metadata_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventsResponseMetadataPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str,), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination attributes. + + :param after: The cursor to use to get the next results, if any. To make the next request, use the same + parameters with the addition of the ``page[cursor]``. + :type after: str, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/events_scalar_query.py b/datadog_api_client/v2/model/events_scalar_query.py new file mode 100644 index 0000000000..3e0a10268c --- /dev/null +++ b/datadog_api_client/v2/model/events_scalar_query.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.events_compute import EventsCompute + from datadog_api_client.v2.model.events_data_source import EventsDataSource + from datadog_api_client.v2.model.events_query_group_bys import EventsQueryGroupBys + from datadog_api_client.v2.model.events_search import EventsSearch + +class EventsScalarQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.events_compute import EventsCompute + from datadog_api_client.v2.model.events_data_source import EventsDataSource + from datadog_api_client.v2.model.events_query_group_bys import EventsQueryGroupBys + from datadog_api_client.v2.model.events_search import EventsSearch + return { + "compute": (EventsCompute,), + "cross_org_uuids": ([str],), + "data_source": (EventsDataSource,), + "group_by": (EventsQueryGroupBys,), + "indexes": ([str],), + "name": (str,), + "search": (EventsSearch,), + } + attribute_map = { + "compute": "compute", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "group_by": "group_by", + "indexes": "indexes", + "name": "name", + "search": "search", + } + + def __init__(self_, compute: EventsCompute, data_source: EventsDataSource, cross_org_uuids: Union[List[str], UnsetType]=unset, group_by: Union[EventsQueryGroupBys, UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, search: Union[EventsSearch, UnsetType]=unset, **kwargs): + """ + An individual scalar query for logs, RUM, traces, CI pipelines, security signals, and other event-based data sources. Use this query type for any data source powered by the Events Platform. See the data_source field for the full list of supported sources. + + :param compute: The instructions for what to compute for this query. + :type compute: EventsCompute + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source that is powered by the Events Platform. + :type data_source: EventsDataSource + + :param group_by: The list of facets on which to split results. + :type group_by: EventsQueryGroupBys, optional + + :param indexes: The indexes in which to search. + :type indexes: [str], optional + + :param name: The variable name for use in formulas. + :type name: str, optional + + :param search: Configuration of the search/filter for an events query. + :type search: EventsSearch, optional + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if group_by is not unset: + kwargs["group_by"] = group_by + if indexes is not unset: + kwargs["indexes"] = indexes + if name is not unset: + kwargs["name"] = name + if search is not unset: + kwargs["search"] = search + super().__init__(kwargs) + + + self_.compute = compute + self_.data_source = data_source diff --git a/datadog_api_client/v2/model/events_search.py b/datadog_api_client/v2/model/events_search.py new file mode 100644 index 0000000000..b493152bdd --- /dev/null +++ b/datadog_api_client/v2/model/events_search.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventsSearch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration of the search/filter for an events query. + + :param query: The search/filter string for an events query. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/events_sort.py b/datadog_api_client/v2/model/events_sort.py new file mode 100644 index 0000000000..68e3d0f97c --- /dev/null +++ b/datadog_api_client/v2/model/events_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventsSort(ModelSimple): + """ + The sort parameters when querying events. + + :param value: Must be one of ["timestamp", "-timestamp"]. + :type value: str + """ + + allowed_values = { + "timestamp", + "-timestamp", + } + TIMESTAMP_ASCENDING: ClassVar["EventsSort"] + TIMESTAMP_DESCENDING: ClassVar["EventsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventsSort.TIMESTAMP_ASCENDING = EventsSort("timestamp") +EventsSort.TIMESTAMP_DESCENDING = EventsSort("-timestamp") diff --git a/datadog_api_client/v2/model/events_sort_type.py b/datadog_api_client/v2/model/events_sort_type.py new file mode 100644 index 0000000000..5a5a2d260e --- /dev/null +++ b/datadog_api_client/v2/model/events_sort_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class EventsSortType(ModelSimple): + """ + The type of sort to use on the calculated value. + + :param value: Must be one of ["alphabetical", "measure"]. + :type value: str + """ + + allowed_values = { + "alphabetical", + "measure", + } + ALPHABETICAL: ClassVar["EventsSortType"] + MEASURE: ClassVar["EventsSortType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +EventsSortType.ALPHABETICAL = EventsSortType("alphabetical") +EventsSortType.MEASURE = EventsSortType("measure") diff --git a/datadog_api_client/v2/model/events_timeseries_query.py b/datadog_api_client/v2/model/events_timeseries_query.py new file mode 100644 index 0000000000..c29e4c46e7 --- /dev/null +++ b/datadog_api_client/v2/model/events_timeseries_query.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.events_compute import EventsCompute + from datadog_api_client.v2.model.events_data_source import EventsDataSource + from datadog_api_client.v2.model.events_query_group_bys import EventsQueryGroupBys + from datadog_api_client.v2.model.events_search import EventsSearch + +class EventsTimeseriesQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.events_compute import EventsCompute + from datadog_api_client.v2.model.events_data_source import EventsDataSource + from datadog_api_client.v2.model.events_query_group_bys import EventsQueryGroupBys + from datadog_api_client.v2.model.events_search import EventsSearch + return { + "compute": (EventsCompute,), + "cross_org_uuids": ([str],), + "data_source": (EventsDataSource,), + "group_by": (EventsQueryGroupBys,), + "indexes": ([str],), + "name": (str,), + "search": (EventsSearch,), + } + attribute_map = { + "compute": "compute", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "group_by": "group_by", + "indexes": "indexes", + "name": "name", + "search": "search", + } + + def __init__(self_, compute: EventsCompute, data_source: EventsDataSource, cross_org_uuids: Union[List[str], UnsetType]=unset, group_by: Union[EventsQueryGroupBys, UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, search: Union[EventsSearch, UnsetType]=unset, **kwargs): + """ + An individual timeseries query for logs, RUM, traces, CI pipelines, security signals, and other event-based data sources. Use this query type for any data source powered by the Events Platform. See the data_source field for the full list of supported sources. + + :param compute: The instructions for what to compute for this query. + :type compute: EventsCompute + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source that is powered by the Events Platform. + :type data_source: EventsDataSource + + :param group_by: The list of facets on which to split results. + :type group_by: EventsQueryGroupBys, optional + + :param indexes: The indexes in which to search. + :type indexes: [str], optional + + :param name: The variable name for use in formulas. + :type name: str, optional + + :param search: Configuration of the search/filter for an events query. + :type search: EventsSearch, optional + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if group_by is not unset: + kwargs["group_by"] = group_by + if indexes is not unset: + kwargs["indexes"] = indexes + if name is not unset: + kwargs["name"] = name + if search is not unset: + kwargs["search"] = search + super().__init__(kwargs) + + + self_.compute = compute + self_.data_source = data_source diff --git a/datadog_api_client/v2/model/events_warning.py b/datadog_api_client/v2/model/events_warning.py new file mode 100644 index 0000000000..033ae30e5e --- /dev/null +++ b/datadog_api_client/v2/model/events_warning.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class EventsWarning(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "detail": (str,), + "title": (str,), + } + attribute_map = { + "code": "code", + "detail": "detail", + "title": "title", + } + + def __init__(self_, code: Union[str, UnsetType]=unset, detail: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + A warning message indicating something is wrong with the query. + + :param code: A unique code for this type of warning. + :type code: str, optional + + :param detail: A detailed explanation of this specific warning. + :type detail: str, optional + + :param title: A short human-readable summary of the warning. + :type title: str, optional + """ + if code is not unset: + kwargs["code"] = code + if detail is not unset: + kwargs["detail"] = detail + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/exposure_rollout_step_request.py b/datadog_api_client/v2/model/exposure_rollout_step_request.py new file mode 100644 index 0000000000..161f025463 --- /dev/null +++ b/datadog_api_client/v2/model/exposure_rollout_step_request.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ExposureRolloutStepRequest(ModelNormal): + validations = { + "exposure_ratio": { + "inclusive_maximum": 1, + "inclusive_minimum": 0, + }, + "grouped_step_index": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "exposure_ratio": (float,), + "grouped_step_index": (int,), + "id": (UUID,), + "interval_ms": (int, none_type), + "is_pause_record": (bool,), + } + attribute_map = { + "exposure_ratio": "exposure_ratio", + "grouped_step_index": "grouped_step_index", + "id": "id", + "interval_ms": "interval_ms", + "is_pause_record": "is_pause_record", + } + + def __init__(self_, exposure_ratio: float, grouped_step_index: int, is_pause_record: bool, id: Union[UUID, UnsetType]=unset, interval_ms: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Rollout step request payload. + + :param exposure_ratio: The exposure ratio for this step. + :type exposure_ratio: float + + :param grouped_step_index: Logical index grouping related steps. + :type grouped_step_index: int + + :param id: The unique identifier of the progression step. + :type id: UUID, optional + + :param interval_ms: Step duration in milliseconds. + :type interval_ms: int, none_type, optional + + :param is_pause_record: Whether this step represents a pause record. + :type is_pause_record: bool + """ + if id is not unset: + kwargs["id"] = id + if interval_ms is not unset: + kwargs["interval_ms"] = interval_ms + super().__init__(kwargs) + + + self_.exposure_ratio = exposure_ratio + self_.grouped_step_index = grouped_step_index + self_.is_pause_record = is_pause_record diff --git a/datadog_api_client/v2/model/exposure_schedule_request.py b/datadog_api_client/v2/model/exposure_schedule_request.py new file mode 100644 index 0000000000..dcaf655885 --- /dev/null +++ b/datadog_api_client/v2/model/exposure_schedule_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rollout_options_request import RolloutOptionsRequest + from datadog_api_client.v2.model.exposure_rollout_step_request import ExposureRolloutStepRequest + +class ExposureScheduleRequest(ModelNormal): + validations = { + "rollout_steps": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rollout_options_request import RolloutOptionsRequest + from datadog_api_client.v2.model.exposure_rollout_step_request import ExposureRolloutStepRequest + return { + "absolute_start_time": (datetime, none_type), + "control_variant_id": (str, none_type), + "control_variant_key": (str, none_type), + "id": (UUID,), + "rollout_options": (RolloutOptionsRequest,), + "rollout_steps": ([ExposureRolloutStepRequest],), + } + attribute_map = { + "absolute_start_time": "absolute_start_time", + "control_variant_id": "control_variant_id", + "control_variant_key": "control_variant_key", + "id": "id", + "rollout_options": "rollout_options", + "rollout_steps": "rollout_steps", + } + + def __init__(self_, rollout_options: RolloutOptionsRequest, rollout_steps: List[ExposureRolloutStepRequest], absolute_start_time: Union[datetime, none_type, UnsetType]=unset, control_variant_id: Union[str, none_type, UnsetType]=unset, control_variant_key: Union[str, none_type, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Progressive release request payload. + + :param absolute_start_time: The absolute UTC start time for this schedule. + :type absolute_start_time: datetime, none_type, optional + + :param control_variant_id: The control variant ID used for experiment comparisons. + :type control_variant_id: str, none_type, optional + + :param control_variant_key: The control variant key used during creation workflows. + :type control_variant_key: str, none_type, optional + + :param id: The unique identifier of the progressive rollout. + :type id: UUID, optional + + :param rollout_options: Rollout options request payload. + :type rollout_options: RolloutOptionsRequest + + :param rollout_steps: Ordered progression steps for exposure. + :type rollout_steps: [ExposureRolloutStepRequest] + """ + if absolute_start_time is not unset: + kwargs["absolute_start_time"] = absolute_start_time + if control_variant_id is not unset: + kwargs["control_variant_id"] = control_variant_id + if control_variant_key is not unset: + kwargs["control_variant_key"] = control_variant_key + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.rollout_options = rollout_options + self_.rollout_steps = rollout_steps diff --git a/datadog_api_client/v2/model/facet_info_request.py b/datadog_api_client/v2/model/facet_info_request.py new file mode 100644 index 0000000000..290dd7e6be --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.facet_info_request_data import FacetInfoRequestData + +class FacetInfoRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.facet_info_request_data import FacetInfoRequestData + return { + "data": (FacetInfoRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[FacetInfoRequestData, UnsetType]=unset, **kwargs): + """ + Request body for retrieving facet value information for a specified attribute with optional filtering. + + :param data: The data object containing the resource type and attributes for the facet info request. + :type data: FacetInfoRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/facet_info_request_data.py b/datadog_api_client/v2/model/facet_info_request_data.py new file mode 100644 index 0000000000..8e56ce0fc6 --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.facet_info_request_data_attributes import FacetInfoRequestDataAttributes + from datadog_api_client.v2.model.facet_info_request_data_type import FacetInfoRequestDataType + +class FacetInfoRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.facet_info_request_data_attributes import FacetInfoRequestDataAttributes + from datadog_api_client.v2.model.facet_info_request_data_type import FacetInfoRequestDataType + return { + "attributes": (FacetInfoRequestDataAttributes,), + "id": (str,), + "type": (FacetInfoRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: FacetInfoRequestDataType, attributes: Union[FacetInfoRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the resource type and attributes for the facet info request. + + :param attributes: Attributes for the facet info request, specifying which facet to query and optional filters to apply. + :type attributes: FacetInfoRequestDataAttributes, optional + + :param id: Unique identifier for the facet info request resource. + :type id: str, optional + + :param type: Users facet info request resource type. + :type type: FacetInfoRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/facet_info_request_data_attributes.py b/datadog_api_client/v2/model/facet_info_request_data_attributes.py new file mode 100644 index 0000000000..e2501bc04a --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_request_data_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.facet_info_request_data_attributes_search import FacetInfoRequestDataAttributesSearch + from datadog_api_client.v2.model.facet_info_request_data_attributes_term_search import FacetInfoRequestDataAttributesTermSearch + +class FacetInfoRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.facet_info_request_data_attributes_search import FacetInfoRequestDataAttributesSearch + from datadog_api_client.v2.model.facet_info_request_data_attributes_term_search import FacetInfoRequestDataAttributesTermSearch + return { + "facet_id": (str,), + "limit": (int,), + "search": (FacetInfoRequestDataAttributesSearch,), + "term_search": (FacetInfoRequestDataAttributesTermSearch,), + } + attribute_map = { + "facet_id": "facet_id", + "limit": "limit", + "search": "search", + "term_search": "term_search", + } + + def __init__(self_, facet_id: str, limit: int, search: Union[FacetInfoRequestDataAttributesSearch, UnsetType]=unset, term_search: Union[FacetInfoRequestDataAttributesTermSearch, UnsetType]=unset, **kwargs): + """ + Attributes for the facet info request, specifying which facet to query and optional filters to apply. + + :param facet_id: The identifier of the facet attribute to retrieve value information for. + :type facet_id: str + + :param limit: Maximum number of facet values to return in the response. + :type limit: int + + :param search: Query-based search configuration for filtering the audience context when retrieving facet values. + :type search: FacetInfoRequestDataAttributesSearch, optional + + :param term_search: Term-level search configuration for filtering facet values by an exact or partial term match. + :type term_search: FacetInfoRequestDataAttributesTermSearch, optional + """ + if search is not unset: + kwargs["search"] = search + if term_search is not unset: + kwargs["term_search"] = term_search + super().__init__(kwargs) + + + self_.facet_id = facet_id + self_.limit = limit diff --git a/datadog_api_client/v2/model/facet_info_request_data_attributes_search.py b/datadog_api_client/v2/model/facet_info_request_data_attributes_search.py new file mode 100644 index 0000000000..6f8f24fbb7 --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_request_data_attributes_search.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FacetInfoRequestDataAttributesSearch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + Query-based search configuration for filtering the audience context when retrieving facet values. + + :param query: The filter expression used to scope the audience from which facet values are retrieved. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/facet_info_request_data_attributes_term_search.py b/datadog_api_client/v2/model/facet_info_request_data_attributes_term_search.py new file mode 100644 index 0000000000..2570c5a5ca --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_request_data_attributes_term_search.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FacetInfoRequestDataAttributesTermSearch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + attribute_map = { + "value": "value", + } + + def __init__(self_, value: Union[str, UnsetType]=unset, **kwargs): + """ + Term-level search configuration for filtering facet values by an exact or partial term match. + + :param value: The term string to match against facet values. + :type value: str, optional + """ + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/facet_info_request_data_type.py b/datadog_api_client/v2/model/facet_info_request_data_type.py new file mode 100644 index 0000000000..d73cc09d2a --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FacetInfoRequestDataType(ModelSimple): + """ + Users facet info request resource type. + + :param value: If omitted defaults to "users_facet_info_request". Must be one of ["users_facet_info_request"]. + :type value: str + """ + + allowed_values = { + "users_facet_info_request", + } + USERS_FACET_INFO_REQUEST: ClassVar["FacetInfoRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FacetInfoRequestDataType.USERS_FACET_INFO_REQUEST = FacetInfoRequestDataType("users_facet_info_request") diff --git a/datadog_api_client/v2/model/facet_info_response.py b/datadog_api_client/v2/model/facet_info_response.py new file mode 100644 index 0000000000..8a64d2d143 --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.facet_info_response_data import FacetInfoResponseData + +class FacetInfoResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.facet_info_response_data import FacetInfoResponseData + return { + "data": (FacetInfoResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[FacetInfoResponseData, UnsetType]=unset, **kwargs): + """ + Response containing facet information for an attribute, including its distinct values and occurrence counts. + + :param data: The data object containing the resource type and attributes for the facet info response. + :type data: FacetInfoResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/facet_info_response_data.py b/datadog_api_client/v2/model/facet_info_response_data.py new file mode 100644 index 0000000000..bc7c879f15 --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.facet_info_response_data_attributes import FacetInfoResponseDataAttributes + from datadog_api_client.v2.model.facet_info_response_data_type import FacetInfoResponseDataType + +class FacetInfoResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.facet_info_response_data_attributes import FacetInfoResponseDataAttributes + from datadog_api_client.v2.model.facet_info_response_data_type import FacetInfoResponseDataType + return { + "attributes": (FacetInfoResponseDataAttributes,), + "id": (str,), + "type": (FacetInfoResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: FacetInfoResponseDataType, attributes: Union[FacetInfoResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the resource type and attributes for the facet info response. + + :param attributes: Attributes of the facet info response, containing the facet result data. + :type attributes: FacetInfoResponseDataAttributes, optional + + :param id: Unique identifier for the facet info response resource. + :type id: str, optional + + :param type: Users facet info resource type. + :type type: FacetInfoResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/facet_info_response_data_attributes.py b/datadog_api_client/v2/model/facet_info_response_data_attributes.py new file mode 100644 index 0000000000..e65c855c5a --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.facet_info_response_data_attributes_result import FacetInfoResponseDataAttributesResult + +class FacetInfoResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.facet_info_response_data_attributes_result import FacetInfoResponseDataAttributesResult + return { + "result": (FacetInfoResponseDataAttributesResult,), + } + attribute_map = { + "result": "result", + } + + def __init__(self_, result: Union[FacetInfoResponseDataAttributesResult, UnsetType]=unset, **kwargs): + """ + Attributes of the facet info response, containing the facet result data. + + :param result: The facet query result containing discrete value counts or a numeric range for the requested facet. + :type result: FacetInfoResponseDataAttributesResult, optional + """ + if result is not unset: + kwargs["result"] = result + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/facet_info_response_data_attributes_result.py b/datadog_api_client/v2/model/facet_info_response_data_attributes_result.py new file mode 100644 index 0000000000..fb110521e7 --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_response_data_attributes_result.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.facet_info_response_data_attributes_result_range import FacetInfoResponseDataAttributesResultRange + from datadog_api_client.v2.model.facet_info_response_data_attributes_result_values_items import FacetInfoResponseDataAttributesResultValuesItems + +class FacetInfoResponseDataAttributesResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.facet_info_response_data_attributes_result_range import FacetInfoResponseDataAttributesResultRange + from datadog_api_client.v2.model.facet_info_response_data_attributes_result_values_items import FacetInfoResponseDataAttributesResultValuesItems + return { + "range": (FacetInfoResponseDataAttributesResultRange,), + "values": ([FacetInfoResponseDataAttributesResultValuesItems],), + } + attribute_map = { + "range": "range", + "values": "values", + } + + def __init__(self_, range: Union[FacetInfoResponseDataAttributesResultRange, UnsetType]=unset, values: Union[List[FacetInfoResponseDataAttributesResultValuesItems], UnsetType]=unset, **kwargs): + """ + The facet query result containing discrete value counts or a numeric range for the requested facet. + + :param range: The numeric range of a facet attribute, representing the minimum and maximum observed values. + :type range: FacetInfoResponseDataAttributesResultRange, optional + + :param values: List of discrete facet values with their occurrence counts. + :type values: [FacetInfoResponseDataAttributesResultValuesItems], optional + """ + if range is not unset: + kwargs["range"] = range + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/facet_info_response_data_attributes_result_range.py b/datadog_api_client/v2/model/facet_info_response_data_attributes_result_range.py new file mode 100644 index 0000000000..9e4fccea3d --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_response_data_attributes_result_range.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FacetInfoResponseDataAttributesResultRange(ModelNormal): + @cached_property + def openapi_types(_): + return { + "max": (dict,), + "min": (dict,), + } + attribute_map = { + "max": "max", + "min": "min", + } + + def __init__(self_, max: Union[dict, UnsetType]=unset, min: Union[dict, UnsetType]=unset, **kwargs): + """ + The numeric range of a facet attribute, representing the minimum and maximum observed values. + + :param max: The maximum observed value for the numeric facet attribute. + :type max: dict, optional + + :param min: The minimum observed value for the numeric facet attribute. + :type min: dict, optional + """ + if max is not unset: + kwargs["max"] = max + if min is not unset: + kwargs["min"] = min + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/facet_info_response_data_attributes_result_values_items.py b/datadog_api_client/v2/model/facet_info_response_data_attributes_result_values_items.py new file mode 100644 index 0000000000..7668337cce --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_response_data_attributes_result_values_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FacetInfoResponseDataAttributesResultValuesItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "value": (str,), + } + attribute_map = { + "count": "count", + "value": "value", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + A single facet value with its occurrence count in the dataset. + + :param count: The number of records that have this facet value. + :type count: int, optional + + :param value: The facet value (for example, a browser name or country code). + :type value: str, optional + """ + if count is not unset: + kwargs["count"] = count + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/facet_info_response_data_type.py b/datadog_api_client/v2/model/facet_info_response_data_type.py new file mode 100644 index 0000000000..f7e3d8fb06 --- /dev/null +++ b/datadog_api_client/v2/model/facet_info_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FacetInfoResponseDataType(ModelSimple): + """ + Users facet info resource type. + + :param value: If omitted defaults to "users_facet_info". Must be one of ["users_facet_info"]. + :type value: str + """ + + allowed_values = { + "users_facet_info", + } + USERS_FACET_INFO: ClassVar["FacetInfoResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FacetInfoResponseDataType.USERS_FACET_INFO = FacetInfoResponseDataType("users_facet_info") diff --git a/datadog_api_client/v2/model/fastly_accoun_response_attributes.py b/datadog_api_client/v2/model/fastly_accoun_response_attributes.py new file mode 100644 index 0000000000..a8086c4a76 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_accoun_response_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_service import FastlyService + +class FastlyAccounResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_service import FastlyService + return { + "name": (str,), + "services": ([FastlyService],), + } + attribute_map = { + "name": "name", + "services": "services", + } + + def __init__(self_, name: str, services: Union[List[FastlyService], UnsetType]=unset, **kwargs): + """ + Attributes object of a Fastly account. + + :param name: The name of the Fastly account. + :type name: str + + :param services: A list of services belonging to the parent account. + :type services: [FastlyService], optional + """ + if services is not unset: + kwargs["services"] = services + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/fastly_account_create_request.py b/datadog_api_client/v2/model/fastly_account_create_request.py new file mode 100644 index 0000000000..885a98663c --- /dev/null +++ b/datadog_api_client/v2/model/fastly_account_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_account_create_request_data import FastlyAccountCreateRequestData + +class FastlyAccountCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_account_create_request_data import FastlyAccountCreateRequestData + return { + "data": (FastlyAccountCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FastlyAccountCreateRequestData, **kwargs): + """ + Payload schema when adding a Fastly account. + + :param data: Data object for creating a Fastly account. + :type data: FastlyAccountCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fastly_account_create_request_attributes.py b/datadog_api_client/v2/model/fastly_account_create_request_attributes.py new file mode 100644 index 0000000000..dbd931ea48 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_account_create_request_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_service import FastlyService + +class FastlyAccountCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_service import FastlyService + return { + "api_key": (str,), + "name": (str,), + "services": ([FastlyService],), + } + attribute_map = { + "api_key": "api_key", + "name": "name", + "services": "services", + } + + def __init__(self_, api_key: str, name: str, services: Union[List[FastlyService], UnsetType]=unset, **kwargs): + """ + Attributes object for creating a Fastly account. + + :param api_key: The API key for the Fastly account. + :type api_key: str + + :param name: The name of the Fastly account. + :type name: str + + :param services: A list of services belonging to the parent account. + :type services: [FastlyService], optional + """ + if services is not unset: + kwargs["services"] = services + super().__init__(kwargs) + + + self_.api_key = api_key + self_.name = name diff --git a/datadog_api_client/v2/model/fastly_account_create_request_data.py b/datadog_api_client/v2/model/fastly_account_create_request_data.py new file mode 100644 index 0000000000..0d5ff1feee --- /dev/null +++ b/datadog_api_client/v2/model/fastly_account_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_account_create_request_attributes import FastlyAccountCreateRequestAttributes + from datadog_api_client.v2.model.fastly_account_type import FastlyAccountType + +class FastlyAccountCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_account_create_request_attributes import FastlyAccountCreateRequestAttributes + from datadog_api_client.v2.model.fastly_account_type import FastlyAccountType + return { + "attributes": (FastlyAccountCreateRequestAttributes,), + "type": (FastlyAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: FastlyAccountCreateRequestAttributes, type: FastlyAccountType, **kwargs): + """ + Data object for creating a Fastly account. + + :param attributes: Attributes object for creating a Fastly account. + :type attributes: FastlyAccountCreateRequestAttributes + + :param type: The JSON:API type for this API. Should always be ``fastly-accounts``. + :type type: FastlyAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/fastly_account_response.py b/datadog_api_client/v2/model/fastly_account_response.py new file mode 100644 index 0000000000..bdb98692f3 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_account_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_account_response_data import FastlyAccountResponseData + +class FastlyAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_account_response_data import FastlyAccountResponseData + return { + "data": (FastlyAccountResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[FastlyAccountResponseData, UnsetType]=unset, **kwargs): + """ + The expected response schema when getting a Fastly account. + + :param data: Data object of a Fastly account. + :type data: FastlyAccountResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fastly_account_response_data.py b/datadog_api_client/v2/model/fastly_account_response_data.py new file mode 100644 index 0000000000..87d352338d --- /dev/null +++ b/datadog_api_client/v2/model/fastly_account_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_accoun_response_attributes import FastlyAccounResponseAttributes + from datadog_api_client.v2.model.fastly_account_type import FastlyAccountType + +class FastlyAccountResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_accoun_response_attributes import FastlyAccounResponseAttributes + from datadog_api_client.v2.model.fastly_account_type import FastlyAccountType + return { + "attributes": (FastlyAccounResponseAttributes,), + "id": (str,), + "type": (FastlyAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FastlyAccounResponseAttributes, id: str, type: FastlyAccountType, **kwargs): + """ + Data object of a Fastly account. + + :param attributes: Attributes object of a Fastly account. + :type attributes: FastlyAccounResponseAttributes + + :param id: The ID of the Fastly account, a hash of the account name. + :type id: str + + :param type: The JSON:API type for this API. Should always be ``fastly-accounts``. + :type type: FastlyAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fastly_account_type.py b/datadog_api_client/v2/model/fastly_account_type.py new file mode 100644 index 0000000000..bdedcc6c82 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FastlyAccountType(ModelSimple): + """ + The JSON:API type for this API. Should always be `fastly-accounts`. + + :param value: If omitted defaults to "fastly-accounts". Must be one of ["fastly-accounts"]. + :type value: str + """ + + allowed_values = { + "fastly-accounts", + } + FASTLY_ACCOUNTS: ClassVar["FastlyAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FastlyAccountType.FASTLY_ACCOUNTS = FastlyAccountType("fastly-accounts") diff --git a/datadog_api_client/v2/model/fastly_account_update_request.py b/datadog_api_client/v2/model/fastly_account_update_request.py new file mode 100644 index 0000000000..59a7f856e5 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_account_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_account_update_request_data import FastlyAccountUpdateRequestData + +class FastlyAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_account_update_request_data import FastlyAccountUpdateRequestData + return { + "data": (FastlyAccountUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FastlyAccountUpdateRequestData, **kwargs): + """ + Payload schema when updating a Fastly account. + + :param data: Data object for updating a Fastly account. + :type data: FastlyAccountUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fastly_account_update_request_attributes.py b/datadog_api_client/v2/model/fastly_account_update_request_attributes.py new file mode 100644 index 0000000000..282ee3ccf2 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_account_update_request_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FastlyAccountUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_key": (str,), + "name": (str,), + } + attribute_map = { + "api_key": "api_key", + "name": "name", + } + + def __init__(self_, api_key: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes object for updating a Fastly account. + + :param api_key: The API key of the Fastly account. + :type api_key: str, optional + + :param name: The name of the Fastly account. + :type name: str, optional + """ + if api_key is not unset: + kwargs["api_key"] = api_key + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fastly_account_update_request_data.py b/datadog_api_client/v2/model/fastly_account_update_request_data.py new file mode 100644 index 0000000000..7c320f9729 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_account_update_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_account_update_request_attributes import FastlyAccountUpdateRequestAttributes + from datadog_api_client.v2.model.fastly_account_type import FastlyAccountType + +class FastlyAccountUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_account_update_request_attributes import FastlyAccountUpdateRequestAttributes + from datadog_api_client.v2.model.fastly_account_type import FastlyAccountType + return { + "attributes": (FastlyAccountUpdateRequestAttributes,), + "type": (FastlyAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[FastlyAccountUpdateRequestAttributes, UnsetType]=unset, type: Union[FastlyAccountType, UnsetType]=unset, **kwargs): + """ + Data object for updating a Fastly account. + + :param attributes: Attributes object for updating a Fastly account. + :type attributes: FastlyAccountUpdateRequestAttributes, optional + + :param type: The JSON:API type for this API. Should always be ``fastly-accounts``. + :type type: FastlyAccountType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fastly_accounts_response.py b/datadog_api_client/v2/model/fastly_accounts_response.py new file mode 100644 index 0000000000..9c14dc50c9 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_accounts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_account_response_data import FastlyAccountResponseData + +class FastlyAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_account_response_data import FastlyAccountResponseData + return { + "data": ([FastlyAccountResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[FastlyAccountResponseData], UnsetType]=unset, **kwargs): + """ + The expected response schema when getting Fastly accounts. + + :param data: The JSON:API data schema. + :type data: [FastlyAccountResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fastly_api_key.py b/datadog_api_client/v2/model/fastly_api_key.py new file mode 100644 index 0000000000..ec96babf68 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_api_key_type import FastlyAPIKeyType + +class FastlyAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_api_key_type import FastlyAPIKeyType + return { + "api_key": (str,), + "type": (FastlyAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, api_key: str, type: FastlyAPIKeyType, **kwargs): + """ + The definition of the ``FastlyAPIKey`` object. + + :param api_key: The ``FastlyAPIKey`` ``api_key``. + :type api_key: str + + :param type: The definition of the ``FastlyAPIKey`` object. + :type type: FastlyAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_key = api_key + self_.type = type diff --git a/datadog_api_client/v2/model/fastly_api_key_type.py b/datadog_api_client/v2/model/fastly_api_key_type.py new file mode 100644 index 0000000000..1c2816a0ff --- /dev/null +++ b/datadog_api_client/v2/model/fastly_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FastlyAPIKeyType(ModelSimple): + """ + The definition of the `FastlyAPIKey` object. + + :param value: If omitted defaults to "FastlyAPIKey". Must be one of ["FastlyAPIKey"]. + :type value: str + """ + + allowed_values = { + "FastlyAPIKey", + } + FASTLYAPIKEY: ClassVar["FastlyAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FastlyAPIKeyType.FASTLYAPIKEY = FastlyAPIKeyType("FastlyAPIKey") diff --git a/datadog_api_client/v2/model/fastly_api_key_update.py b/datadog_api_client/v2/model/fastly_api_key_update.py new file mode 100644 index 0000000000..f800b0ad17 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_api_key_type import FastlyAPIKeyType + +class FastlyAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_api_key_type import FastlyAPIKeyType + return { + "api_key": (str,), + "type": (FastlyAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, type: FastlyAPIKeyType, api_key: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``FastlyAPIKey`` object. + + :param api_key: The ``FastlyAPIKeyUpdate`` ``api_key``. + :type api_key: str, optional + + :param type: The definition of the ``FastlyAPIKey`` object. + :type type: FastlyAPIKeyType + """ + if api_key is not unset: + kwargs["api_key"] = api_key + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/fastly_credentials.py b/datadog_api_client/v2/model/fastly_credentials.py new file mode 100644 index 0000000000..da22e694f5 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FastlyCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``FastlyCredentials`` object. + + :param api_key: The `FastlyAPIKey` `api_key`. + :type api_key: str + + :param type: The definition of the `FastlyAPIKey` object. + :type type: FastlyAPIKeyType + """ + 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.fastly_api_key import FastlyAPIKey + return { + "oneOf": [ + FastlyAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/fastly_credentials_update.py b/datadog_api_client/v2/model/fastly_credentials_update.py new file mode 100644 index 0000000000..98b0e1205c --- /dev/null +++ b/datadog_api_client/v2/model/fastly_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FastlyCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``FastlyCredentialsUpdate`` object. + + :param api_key: The `FastlyAPIKeyUpdate` `api_key`. + :type api_key: str, optional + + :param type: The definition of the `FastlyAPIKey` object. + :type type: FastlyAPIKeyType + """ + 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.fastly_api_key_update import FastlyAPIKeyUpdate + return { + "oneOf": [ + FastlyAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/fastly_integration.py b/datadog_api_client/v2/model/fastly_integration.py new file mode 100644 index 0000000000..fa13cb0231 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_credentials import FastlyCredentials + from datadog_api_client.v2.model.fastly_integration_type import FastlyIntegrationType + from datadog_api_client.v2.model.fastly_api_key import FastlyAPIKey + +class FastlyIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_credentials import FastlyCredentials + from datadog_api_client.v2.model.fastly_integration_type import FastlyIntegrationType + return { + "credentials": (FastlyCredentials,), + "type": (FastlyIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[FastlyCredentials, FastlyAPIKey], type: FastlyIntegrationType, **kwargs): + """ + The definition of the ``FastlyIntegration`` object. + + :param credentials: The definition of the ``FastlyCredentials`` object. + :type credentials: FastlyCredentials + + :param type: The definition of the ``FastlyIntegrationType`` object. + :type type: FastlyIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/fastly_integration_type.py b/datadog_api_client/v2/model/fastly_integration_type.py new file mode 100644 index 0000000000..a6dc678055 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FastlyIntegrationType(ModelSimple): + """ + The definition of the `FastlyIntegrationType` object. + + :param value: If omitted defaults to "Fastly". Must be one of ["Fastly"]. + :type value: str + """ + + allowed_values = { + "Fastly", + } + FASTLY: ClassVar["FastlyIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FastlyIntegrationType.FASTLY = FastlyIntegrationType("Fastly") diff --git a/datadog_api_client/v2/model/fastly_integration_update.py b/datadog_api_client/v2/model/fastly_integration_update.py new file mode 100644 index 0000000000..8cbfc020dc --- /dev/null +++ b/datadog_api_client/v2/model/fastly_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_credentials_update import FastlyCredentialsUpdate + from datadog_api_client.v2.model.fastly_integration_type import FastlyIntegrationType + from datadog_api_client.v2.model.fastly_api_key_update import FastlyAPIKeyUpdate + +class FastlyIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_credentials_update import FastlyCredentialsUpdate + from datadog_api_client.v2.model.fastly_integration_type import FastlyIntegrationType + return { + "credentials": (FastlyCredentialsUpdate,), + "type": (FastlyIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: FastlyIntegrationType, credentials: Union[FastlyCredentialsUpdate, FastlyAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``FastlyIntegrationUpdate`` object. + + :param credentials: The definition of the ``FastlyCredentialsUpdate`` object. + :type credentials: FastlyCredentialsUpdate, optional + + :param type: The definition of the ``FastlyIntegrationType`` object. + :type type: FastlyIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/fastly_service.py b/datadog_api_client/v2/model/fastly_service.py new file mode 100644 index 0000000000..6647c12280 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_service.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FastlyService(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "tags": ([str],), + } + attribute_map = { + "id": "id", + "tags": "tags", + } + + def __init__(self_, id: str, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The schema representation of a Fastly service. + + :param id: The ID of the Fastly service + :type id: str + + :param tags: A list of tags for the Fastly service. + :type tags: [str], optional + """ + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/fastly_service_attributes.py b/datadog_api_client/v2/model/fastly_service_attributes.py new file mode 100644 index 0000000000..cdabb48b88 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_service_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FastlyServiceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "tags": ([str],), + } + attribute_map = { + "tags": "tags", + } + + def __init__(self_, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes object for Fastly service requests. + + :param tags: A list of tags for the Fastly service. + :type tags: [str], optional + """ + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fastly_service_data.py b/datadog_api_client/v2/model/fastly_service_data.py new file mode 100644 index 0000000000..bc4489af83 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_service_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_service_attributes import FastlyServiceAttributes + from datadog_api_client.v2.model.fastly_service_type import FastlyServiceType + +class FastlyServiceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_service_attributes import FastlyServiceAttributes + from datadog_api_client.v2.model.fastly_service_type import FastlyServiceType + return { + "attributes": (FastlyServiceAttributes,), + "id": (str,), + "type": (FastlyServiceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: FastlyServiceType, attributes: Union[FastlyServiceAttributes, UnsetType]=unset, **kwargs): + """ + Data object for Fastly service requests. + + :param attributes: Attributes object for Fastly service requests. + :type attributes: FastlyServiceAttributes, optional + + :param id: The ID of the Fastly service. + :type id: str + + :param type: The JSON:API type for this API. Should always be ``fastly-services``. + :type type: FastlyServiceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fastly_service_request.py b/datadog_api_client/v2/model/fastly_service_request.py new file mode 100644 index 0000000000..246fd81dba --- /dev/null +++ b/datadog_api_client/v2/model/fastly_service_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_service_data import FastlyServiceData + +class FastlyServiceRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_service_data import FastlyServiceData + return { + "data": (FastlyServiceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FastlyServiceData, **kwargs): + """ + Payload schema for Fastly service requests. + + :param data: Data object for Fastly service requests. + :type data: FastlyServiceData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fastly_service_response.py b/datadog_api_client/v2/model/fastly_service_response.py new file mode 100644 index 0000000000..1094d2c345 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_service_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_service_data import FastlyServiceData + +class FastlyServiceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_service_data import FastlyServiceData + return { + "data": (FastlyServiceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[FastlyServiceData, UnsetType]=unset, **kwargs): + """ + The expected response schema when getting a Fastly service. + + :param data: Data object for Fastly service requests. + :type data: FastlyServiceData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fastly_service_type.py b/datadog_api_client/v2/model/fastly_service_type.py new file mode 100644 index 0000000000..72800db072 --- /dev/null +++ b/datadog_api_client/v2/model/fastly_service_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FastlyServiceType(ModelSimple): + """ + The JSON:API type for this API. Should always be `fastly-services`. + + :param value: If omitted defaults to "fastly-services". Must be one of ["fastly-services"]. + :type value: str + """ + + allowed_values = { + "fastly-services", + } + FASTLY_SERVICES: ClassVar["FastlyServiceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FastlyServiceType.FASTLY_SERVICES = FastlyServiceType("fastly-services") diff --git a/datadog_api_client/v2/model/fastly_services_response.py b/datadog_api_client/v2/model/fastly_services_response.py new file mode 100644 index 0000000000..38d3d2937c --- /dev/null +++ b/datadog_api_client/v2/model/fastly_services_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fastly_service_data import FastlyServiceData + +class FastlyServicesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fastly_service_data import FastlyServiceData + return { + "data": ([FastlyServiceData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[FastlyServiceData], UnsetType]=unset, **kwargs): + """ + The expected response schema when getting Fastly services. + + :param data: The JSON:API data schema. + :type data: [FastlyServiceData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/feature_flag.py b/datadog_api_client/v2/model/feature_flag.py new file mode 100644 index 0000000000..f750fda704 --- /dev/null +++ b/datadog_api_client/v2/model/feature_flag.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.feature_flag_attributes import FeatureFlagAttributes + from datadog_api_client.v2.model.create_feature_flag_data_type import CreateFeatureFlagDataType + +class FeatureFlag(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.feature_flag_attributes import FeatureFlagAttributes + from datadog_api_client.v2.model.create_feature_flag_data_type import CreateFeatureFlagDataType + return { + "attributes": (FeatureFlagAttributes,), + "id": (UUID,), + "type": (CreateFeatureFlagDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FeatureFlagAttributes, id: UUID, type: CreateFeatureFlagDataType, **kwargs): + """ + A feature flag resource. + + :param attributes: Attributes of a feature flag. + :type attributes: FeatureFlagAttributes + + :param id: The unique identifier of the feature flag. + :type id: UUID + + :param type: The resource type. + :type type: CreateFeatureFlagDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/feature_flag_attributes.py b/datadog_api_client/v2/model/feature_flag_attributes.py new file mode 100644 index 0000000000..96b73490c3 --- /dev/null +++ b/datadog_api_client/v2/model/feature_flag_attributes.py @@ -0,0 +1,153 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.feature_flag_environment import FeatureFlagEnvironment + from datadog_api_client.v2.model.value_type import ValueType + from datadog_api_client.v2.model.variant import Variant + +class FeatureFlagAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.feature_flag_environment import FeatureFlagEnvironment + from datadog_api_client.v2.model.value_type import ValueType + from datadog_api_client.v2.model.variant import Variant + return { + "archived_at": (datetime, none_type), + "created_at": (datetime,), + "created_by": (UUID,), + "description": (str,), + "distribution_channel": (str,), + "feature_flag_environments": ([FeatureFlagEnvironment],), + "json_schema": (str, none_type), + "key": (str,), + "last_updated_by": (UUID,), + "name": (str,), + "require_approval": (bool,), + "staleness_status": (str,), + "tags": ([str],), + "updated_at": (datetime,), + "value_type": (ValueType,), + "variants": ([Variant],), + } + attribute_map = { + "archived_at": "archived_at", + "created_at": "created_at", + "created_by": "created_by", + "description": "description", + "distribution_channel": "distribution_channel", + "feature_flag_environments": "feature_flag_environments", + "json_schema": "json_schema", + "key": "key", + "last_updated_by": "last_updated_by", + "name": "name", + "require_approval": "require_approval", + "staleness_status": "staleness_status", + "tags": "tags", + "updated_at": "updated_at", + "value_type": "value_type", + "variants": "variants", + } + + def __init__(self_, description: str, key: str, name: str, value_type: ValueType, variants: List[Variant], archived_at: Union[datetime, none_type, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, created_by: Union[UUID, UnsetType]=unset, distribution_channel: Union[str, UnsetType]=unset, feature_flag_environments: Union[List[FeatureFlagEnvironment], UnsetType]=unset, json_schema: Union[str, none_type, UnsetType]=unset, last_updated_by: Union[UUID, UnsetType]=unset, require_approval: Union[bool, UnsetType]=unset, staleness_status: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a feature flag. + + :param archived_at: The timestamp when the feature flag was archived. + :type archived_at: datetime, none_type, optional + + :param created_at: The timestamp when the feature flag was created. + :type created_at: datetime, optional + + :param created_by: The ID of the user who created the feature flag. + :type created_by: UUID, optional + + :param description: The description of the feature flag. + :type description: str + + :param distribution_channel: Distribution channel for the feature flag. + :type distribution_channel: str, optional + + :param feature_flag_environments: Environment-specific settings for the feature flag. + :type feature_flag_environments: [FeatureFlagEnvironment], optional + + :param json_schema: JSON schema for validation when value_type is JSON. + :type json_schema: str, none_type, optional + + :param key: The unique key of the feature flag. + :type key: str + + :param last_updated_by: The ID of the user who last updated the feature flag. + :type last_updated_by: UUID, optional + + :param name: The name of the feature flag. + :type name: str + + :param require_approval: Indicates whether this feature flag requires approval for changes. + :type require_approval: bool, optional + + :param staleness_status: Indicates the whether a feature flag is stale or not. + :type staleness_status: str, optional + + :param tags: Tags associated with the feature flag. + :type tags: [str], optional + + :param updated_at: The timestamp when the feature flag was last updated. + :type updated_at: datetime, optional + + :param value_type: The type of values for the feature flag variants. + :type value_type: ValueType + + :param variants: The variants of the feature flag. + :type variants: [Variant] + """ + if archived_at is not unset: + kwargs["archived_at"] = archived_at + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if distribution_channel is not unset: + kwargs["distribution_channel"] = distribution_channel + if feature_flag_environments is not unset: + kwargs["feature_flag_environments"] = feature_flag_environments + if json_schema is not unset: + kwargs["json_schema"] = json_schema + if last_updated_by is not unset: + kwargs["last_updated_by"] = last_updated_by + if require_approval is not unset: + kwargs["require_approval"] = require_approval + if staleness_status is not unset: + kwargs["staleness_status"] = staleness_status + if tags is not unset: + kwargs["tags"] = tags + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.description = description + self_.key = key + self_.name = name + self_.value_type = value_type + self_.variants = variants diff --git a/datadog_api_client/v2/model/feature_flag_environment.py b/datadog_api_client/v2/model/feature_flag_environment.py new file mode 100644 index 0000000000..b9959ceae0 --- /dev/null +++ b/datadog_api_client/v2/model/feature_flag_environment.py @@ -0,0 +1,124 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.feature_flag_status import FeatureFlagStatus + +class FeatureFlagEnvironment(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.feature_flag_status import FeatureFlagStatus + return { + "allocations": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "default_allocation_key": (str,), + "default_variant_id": (str, none_type), + "environment_id": (UUID,), + "environment_name": (str,), + "environment_queries": ([str],), + "is_production": (bool,), + "override_allocation_key": (str,), + "override_variant_id": (str, none_type), + "pending_suggestion_id": (str, none_type), + "require_feature_flag_approval": (bool,), + "status": (FeatureFlagStatus,), + } + attribute_map = { + "allocations": "allocations", + "default_allocation_key": "default_allocation_key", + "default_variant_id": "default_variant_id", + "environment_id": "environment_id", + "environment_name": "environment_name", + "environment_queries": "environment_queries", + "is_production": "is_production", + "override_allocation_key": "override_allocation_key", + "override_variant_id": "override_variant_id", + "pending_suggestion_id": "pending_suggestion_id", + "require_feature_flag_approval": "require_feature_flag_approval", + "status": "status", + } + + def __init__(self_, environment_id: UUID, status: FeatureFlagStatus, allocations: Union[Dict[str, Any], none_type, UnsetType]=unset, default_allocation_key: Union[str, UnsetType]=unset, default_variant_id: Union[str, none_type, UnsetType]=unset, environment_name: Union[str, UnsetType]=unset, environment_queries: Union[List[str], UnsetType]=unset, is_production: Union[bool, UnsetType]=unset, override_allocation_key: Union[str, UnsetType]=unset, override_variant_id: Union[str, none_type, UnsetType]=unset, pending_suggestion_id: Union[str, none_type, UnsetType]=unset, require_feature_flag_approval: Union[bool, UnsetType]=unset, **kwargs): + """ + Environment-specific settings for a feature flag. + + :param allocations: Allocation metadata for this environment. + :type allocations: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type, optional + + :param default_allocation_key: The allocation key used for the default variant. + :type default_allocation_key: str, optional + + :param default_variant_id: The ID of the default variant for this environment. + :type default_variant_id: str, none_type, optional + + :param environment_id: The ID of the environment. + :type environment_id: UUID + + :param environment_name: The name of the environment. + :type environment_name: str, optional + + :param environment_queries: Queries that target this environment. + :type environment_queries: [str], optional + + :param is_production: Indicates whether the environment is production. + :type is_production: bool, optional + + :param override_allocation_key: The allocation key used for the override variant. + :type override_allocation_key: str, optional + + :param override_variant_id: The ID of the override variant for this environment. + :type override_variant_id: str, none_type, optional + + :param pending_suggestion_id: Pending suggestion identifier, if approval is required. + :type pending_suggestion_id: str, none_type, optional + + :param require_feature_flag_approval: Indicates whether feature flag changes require approval in this environment. + :type require_feature_flag_approval: bool, optional + + :param status: The status of a feature flag in an environment. + :type status: FeatureFlagStatus + """ + if allocations is not unset: + kwargs["allocations"] = allocations + if default_allocation_key is not unset: + kwargs["default_allocation_key"] = default_allocation_key + if default_variant_id is not unset: + kwargs["default_variant_id"] = default_variant_id + if environment_name is not unset: + kwargs["environment_name"] = environment_name + if environment_queries is not unset: + kwargs["environment_queries"] = environment_queries + if is_production is not unset: + kwargs["is_production"] = is_production + if override_allocation_key is not unset: + kwargs["override_allocation_key"] = override_allocation_key + if override_variant_id is not unset: + kwargs["override_variant_id"] = override_variant_id + if pending_suggestion_id is not unset: + kwargs["pending_suggestion_id"] = pending_suggestion_id + if require_feature_flag_approval is not unset: + kwargs["require_feature_flag_approval"] = require_feature_flag_approval + super().__init__(kwargs) + + + self_.environment_id = environment_id + self_.status = status diff --git a/datadog_api_client/v2/model/feature_flag_environment_list_item.py b/datadog_api_client/v2/model/feature_flag_environment_list_item.py new file mode 100644 index 0000000000..b520b0e700 --- /dev/null +++ b/datadog_api_client/v2/model/feature_flag_environment_list_item.py @@ -0,0 +1,117 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.feature_flag_status import FeatureFlagStatus + +class FeatureFlagEnvironmentListItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.feature_flag_status import FeatureFlagStatus + return { + "default_allocation_key": (str,), + "default_variant_id": (str, none_type), + "environment_id": (UUID,), + "environment_name": (str,), + "environment_queries": ([str],), + "is_production": (bool,), + "override_allocation_key": (str,), + "override_variant_id": (str, none_type), + "pending_suggestion_id": (str, none_type), + "require_feature_flag_approval": (bool,), + "status": (FeatureFlagStatus,), + } + attribute_map = { + "default_allocation_key": "default_allocation_key", + "default_variant_id": "default_variant_id", + "environment_id": "environment_id", + "environment_name": "environment_name", + "environment_queries": "environment_queries", + "is_production": "is_production", + "override_allocation_key": "override_allocation_key", + "override_variant_id": "override_variant_id", + "pending_suggestion_id": "pending_suggestion_id", + "require_feature_flag_approval": "require_feature_flag_approval", + "status": "status", + } + + def __init__(self_, environment_id: UUID, status: FeatureFlagStatus, default_allocation_key: Union[str, UnsetType]=unset, default_variant_id: Union[str, none_type, UnsetType]=unset, environment_name: Union[str, UnsetType]=unset, environment_queries: Union[List[str], UnsetType]=unset, is_production: Union[bool, UnsetType]=unset, override_allocation_key: Union[str, UnsetType]=unset, override_variant_id: Union[str, none_type, UnsetType]=unset, pending_suggestion_id: Union[str, none_type, UnsetType]=unset, require_feature_flag_approval: Union[bool, UnsetType]=unset, **kwargs): + """ + Environment-specific settings for a feature flag in list responses. + + :param default_allocation_key: The allocation key used for the default variant. + :type default_allocation_key: str, optional + + :param default_variant_id: The ID of the default variant for this environment. + :type default_variant_id: str, none_type, optional + + :param environment_id: The ID of the environment. + :type environment_id: UUID + + :param environment_name: The name of the environment. + :type environment_name: str, optional + + :param environment_queries: Queries that target this environment. + :type environment_queries: [str], optional + + :param is_production: Indicates whether the environment is production. + :type is_production: bool, optional + + :param override_allocation_key: The allocation key used for the override variant. + :type override_allocation_key: str, optional + + :param override_variant_id: The ID of the override variant for this environment. + :type override_variant_id: str, none_type, optional + + :param pending_suggestion_id: Pending suggestion identifier, if approval is required. + :type pending_suggestion_id: str, none_type, optional + + :param require_feature_flag_approval: Indicates whether feature flag changes require approval in this environment. + :type require_feature_flag_approval: bool, optional + + :param status: The status of a feature flag in an environment. + :type status: FeatureFlagStatus + """ + if default_allocation_key is not unset: + kwargs["default_allocation_key"] = default_allocation_key + if default_variant_id is not unset: + kwargs["default_variant_id"] = default_variant_id + if environment_name is not unset: + kwargs["environment_name"] = environment_name + if environment_queries is not unset: + kwargs["environment_queries"] = environment_queries + if is_production is not unset: + kwargs["is_production"] = is_production + if override_allocation_key is not unset: + kwargs["override_allocation_key"] = override_allocation_key + if override_variant_id is not unset: + kwargs["override_variant_id"] = override_variant_id + if pending_suggestion_id is not unset: + kwargs["pending_suggestion_id"] = pending_suggestion_id + if require_feature_flag_approval is not unset: + kwargs["require_feature_flag_approval"] = require_feature_flag_approval + super().__init__(kwargs) + + + self_.environment_id = environment_id + self_.status = status diff --git a/datadog_api_client/v2/model/feature_flag_list_item.py b/datadog_api_client/v2/model/feature_flag_list_item.py new file mode 100644 index 0000000000..f25f5d1775 --- /dev/null +++ b/datadog_api_client/v2/model/feature_flag_list_item.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.feature_flag_list_item_attributes import FeatureFlagListItemAttributes + from datadog_api_client.v2.model.create_feature_flag_data_type import CreateFeatureFlagDataType + +class FeatureFlagListItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.feature_flag_list_item_attributes import FeatureFlagListItemAttributes + from datadog_api_client.v2.model.create_feature_flag_data_type import CreateFeatureFlagDataType + return { + "attributes": (FeatureFlagListItemAttributes,), + "id": (UUID,), + "type": (CreateFeatureFlagDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FeatureFlagListItemAttributes, id: UUID, type: CreateFeatureFlagDataType, **kwargs): + """ + A feature flag resource for list responses. + + :param attributes: Attributes of a feature flag in list responses. + :type attributes: FeatureFlagListItemAttributes + + :param id: The unique identifier of the feature flag. + :type id: UUID + + :param type: The resource type. + :type type: CreateFeatureFlagDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/feature_flag_list_item_attributes.py b/datadog_api_client/v2/model/feature_flag_list_item_attributes.py new file mode 100644 index 0000000000..e1a0dc3eea --- /dev/null +++ b/datadog_api_client/v2/model/feature_flag_list_item_attributes.py @@ -0,0 +1,153 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.feature_flag_environment_list_item import FeatureFlagEnvironmentListItem + from datadog_api_client.v2.model.value_type import ValueType + from datadog_api_client.v2.model.variant import Variant + +class FeatureFlagListItemAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.feature_flag_environment_list_item import FeatureFlagEnvironmentListItem + from datadog_api_client.v2.model.value_type import ValueType + from datadog_api_client.v2.model.variant import Variant + return { + "archived_at": (datetime, none_type), + "created_at": (datetime,), + "created_by": (UUID,), + "description": (str,), + "distribution_channel": (str,), + "feature_flag_environments": ([FeatureFlagEnvironmentListItem],), + "json_schema": (str, none_type), + "key": (str,), + "last_updated_by": (UUID,), + "name": (str,), + "require_approval": (bool,), + "staleness_status": (str,), + "tags": ([str],), + "updated_at": (datetime,), + "value_type": (ValueType,), + "variants": ([Variant],), + } + attribute_map = { + "archived_at": "archived_at", + "created_at": "created_at", + "created_by": "created_by", + "description": "description", + "distribution_channel": "distribution_channel", + "feature_flag_environments": "feature_flag_environments", + "json_schema": "json_schema", + "key": "key", + "last_updated_by": "last_updated_by", + "name": "name", + "require_approval": "require_approval", + "staleness_status": "staleness_status", + "tags": "tags", + "updated_at": "updated_at", + "value_type": "value_type", + "variants": "variants", + } + + def __init__(self_, description: str, key: str, name: str, value_type: ValueType, variants: List[Variant], archived_at: Union[datetime, none_type, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, created_by: Union[UUID, UnsetType]=unset, distribution_channel: Union[str, UnsetType]=unset, feature_flag_environments: Union[List[FeatureFlagEnvironmentListItem], UnsetType]=unset, json_schema: Union[str, none_type, UnsetType]=unset, last_updated_by: Union[UUID, UnsetType]=unset, require_approval: Union[bool, UnsetType]=unset, staleness_status: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a feature flag in list responses. + + :param archived_at: The timestamp when the feature flag was archived. + :type archived_at: datetime, none_type, optional + + :param created_at: The timestamp when the feature flag was created. + :type created_at: datetime, optional + + :param created_by: The ID of the user who created the feature flag. + :type created_by: UUID, optional + + :param description: The description of the feature flag. + :type description: str + + :param distribution_channel: Distribution channel for the feature flag. + :type distribution_channel: str, optional + + :param feature_flag_environments: Environment-specific settings for the feature flag. + :type feature_flag_environments: [FeatureFlagEnvironmentListItem], optional + + :param json_schema: JSON schema for validation when value_type is JSON. + :type json_schema: str, none_type, optional + + :param key: The unique key of the feature flag. + :type key: str + + :param last_updated_by: The ID of the user who last updated the feature flag. + :type last_updated_by: UUID, optional + + :param name: The name of the feature flag. + :type name: str + + :param require_approval: Indicates whether this feature flag requires approval for changes. + :type require_approval: bool, optional + + :param staleness_status: Indicates the staleness status of the feature flag. + :type staleness_status: str, optional + + :param tags: Tags associated with the feature flag. + :type tags: [str], optional + + :param updated_at: The timestamp when the feature flag was last updated. + :type updated_at: datetime, optional + + :param value_type: The type of values for the feature flag variants. + :type value_type: ValueType + + :param variants: The variants of the feature flag. + :type variants: [Variant] + """ + if archived_at is not unset: + kwargs["archived_at"] = archived_at + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if distribution_channel is not unset: + kwargs["distribution_channel"] = distribution_channel + if feature_flag_environments is not unset: + kwargs["feature_flag_environments"] = feature_flag_environments + if json_schema is not unset: + kwargs["json_schema"] = json_schema + if last_updated_by is not unset: + kwargs["last_updated_by"] = last_updated_by + if require_approval is not unset: + kwargs["require_approval"] = require_approval + if staleness_status is not unset: + kwargs["staleness_status"] = staleness_status + if tags is not unset: + kwargs["tags"] = tags + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.description = description + self_.key = key + self_.name = name + self_.value_type = value_type + self_.variants = variants diff --git a/datadog_api_client/v2/model/feature_flag_response.py b/datadog_api_client/v2/model/feature_flag_response.py new file mode 100644 index 0000000000..bac0d1e680 --- /dev/null +++ b/datadog_api_client/v2/model/feature_flag_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.feature_flag import FeatureFlag + +class FeatureFlagResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.feature_flag import FeatureFlag + return { + "data": (FeatureFlag,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FeatureFlag, **kwargs): + """ + Response containing a feature flag. + + :param data: A feature flag resource. + :type data: FeatureFlag + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/feature_flag_status.py b/datadog_api_client/v2/model/feature_flag_status.py new file mode 100644 index 0000000000..675455909a --- /dev/null +++ b/datadog_api_client/v2/model/feature_flag_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FeatureFlagStatus(ModelSimple): + """ + The status of a feature flag in an environment. + + :param value: Must be one of ["ENABLED", "DISABLED"]. + :type value: str + """ + + allowed_values = { + "ENABLED", + "DISABLED", + } + ENABLED: ClassVar["FeatureFlagStatus"] + DISABLED: ClassVar["FeatureFlagStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FeatureFlagStatus.ENABLED = FeatureFlagStatus("ENABLED") +FeatureFlagStatus.DISABLED = FeatureFlagStatus("DISABLED") diff --git a/datadog_api_client/v2/model/feature_flags_pagination_meta.py b/datadog_api_client/v2/model/feature_flags_pagination_meta.py new file mode 100644 index 0000000000..a27f573f8b --- /dev/null +++ b/datadog_api_client/v2/model/feature_flags_pagination_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.feature_flags_pagination_meta_page import FeatureFlagsPaginationMetaPage + +class FeatureFlagsPaginationMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.feature_flags_pagination_meta_page import FeatureFlagsPaginationMetaPage + return { + "page": (FeatureFlagsPaginationMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[FeatureFlagsPaginationMetaPage, UnsetType]=unset, **kwargs): + """ + Pagination metadata for feature flags. + + :param page: Pagination metadata for feature flags list responses. + :type page: FeatureFlagsPaginationMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/feature_flags_pagination_meta_page.py b/datadog_api_client/v2/model/feature_flags_pagination_meta_page.py new file mode 100644 index 0000000000..f56a698ff2 --- /dev/null +++ b/datadog_api_client/v2/model/feature_flags_pagination_meta_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FeatureFlagsPaginationMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata for feature flags list responses. + + :param total_count: Total number of items. + :type total_count: int, optional + + :param total_filtered_count: Total number of items matching the filter. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/filters_per_product.py b/datadog_api_client/v2/model/filters_per_product.py new file mode 100644 index 0000000000..33e69d1839 --- /dev/null +++ b/datadog_api_client/v2/model/filters_per_product.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FiltersPerProduct(ModelNormal): + @cached_property + def openapi_types(_): + return { + "filters": ([str],), + "product": (str,), + } + attribute_map = { + "filters": "filters", + "product": "product", + } + + def __init__(self_, filters: List[str], product: str, **kwargs): + """ + Product-specific filters for the dataset. + + :param filters: Defines the list of tag-based filters used to restrict access to telemetry data for a specific product. + These filters act as access control rules. Each filter must follow the tag query syntax used by + Datadog (such as ``@tag.key:value`` ), and only one tag or attribute may be used to define the access strategy + per telemetry type. + :type filters: [str] + + :param product: Name of the product the dataset is for. Possible values are 'apm', 'rum', + 'metrics', 'logs', 'error_tracking', 'cloud_cost', 'sd_repoinfo', 'secruntime', and 'signal'. + :type product: str + """ + super().__init__(kwargs) + + + self_.filters = filters + self_.product = product diff --git a/datadog_api_client/v2/model/finding.py b/datadog_api_client/v2/model/finding.py new file mode 100644 index 0000000000..baef25cae5 --- /dev/null +++ b/datadog_api_client/v2/model/finding.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_attributes import FindingAttributes + from datadog_api_client.v2.model.finding_type import FindingType + +class Finding(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_attributes import FindingAttributes + from datadog_api_client.v2.model.finding_type import FindingType + return { + "attributes": (FindingAttributes,), + "id": (str,), + "type": (FindingType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[FindingAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[FindingType, UnsetType]=unset, **kwargs): + """ + A single finding without the message and resource configuration. + + :param attributes: The JSON:API attributes of the finding. + :type attributes: FindingAttributes, optional + + :param id: The unique ID for this finding. + :type id: str, optional + + :param type: The JSON:API type for findings. + :type type: FindingType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_attributes.py b/datadog_api_client/v2/model/finding_attributes.py new file mode 100644 index 0000000000..e8528f8882 --- /dev/null +++ b/datadog_api_client/v2/model/finding_attributes.py @@ -0,0 +1,149 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_evaluation import FindingEvaluation + from datadog_api_client.v2.model.finding_mute import FindingMute + from datadog_api_client.v2.model.finding_rule import FindingRule + from datadog_api_client.v2.model.finding_status import FindingStatus + from datadog_api_client.v2.model.finding_vulnerability_type import FindingVulnerabilityType + +class FindingAttributes(ModelNormal): + validations = { + "evaluation_changed_at": { + "inclusive_minimum": 1, + }, + "resource_discovery_date": { + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_evaluation import FindingEvaluation + from datadog_api_client.v2.model.finding_mute import FindingMute + from datadog_api_client.v2.model.finding_rule import FindingRule + from datadog_api_client.v2.model.finding_status import FindingStatus + from datadog_api_client.v2.model.finding_vulnerability_type import FindingVulnerabilityType + return { + "datadog_link": (str,), + "description": (str,), + "evaluation": (FindingEvaluation,), + "evaluation_changed_at": (int,), + "external_id": (str,), + "mute": (FindingMute,), + "resource": (str,), + "resource_discovery_date": (int,), + "resource_type": (str,), + "rule": (FindingRule,), + "status": (FindingStatus,), + "tags": ([str],), + "vulnerability_type": (FindingVulnerabilityType,), + } + attribute_map = { + "datadog_link": "datadog_link", + "description": "description", + "evaluation": "evaluation", + "evaluation_changed_at": "evaluation_changed_at", + "external_id": "external_id", + "mute": "mute", + "resource": "resource", + "resource_discovery_date": "resource_discovery_date", + "resource_type": "resource_type", + "rule": "rule", + "status": "status", + "tags": "tags", + "vulnerability_type": "vulnerability_type", + } + + def __init__(self_, datadog_link: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, evaluation: Union[FindingEvaluation, UnsetType]=unset, evaluation_changed_at: Union[int, UnsetType]=unset, external_id: Union[str, UnsetType]=unset, mute: Union[FindingMute, UnsetType]=unset, resource: Union[str, UnsetType]=unset, resource_discovery_date: Union[int, UnsetType]=unset, resource_type: Union[str, UnsetType]=unset, rule: Union[FindingRule, UnsetType]=unset, status: Union[FindingStatus, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, vulnerability_type: Union[FindingVulnerabilityType, UnsetType]=unset, **kwargs): + """ + The JSON:API attributes of the finding. + + :param datadog_link: The Datadog relative link for this finding. + :type datadog_link: str, optional + + :param description: The description and remediation steps for this finding. + :type description: str, optional + + :param evaluation: The evaluation of the finding. + :type evaluation: FindingEvaluation, optional + + :param evaluation_changed_at: The date on which the evaluation for this finding changed (Unix ms). + :type evaluation_changed_at: int, optional + + :param external_id: The cloud-based ID for the resource related to the finding. + :type external_id: str, optional + + :param mute: Information about the mute status of this finding. + :type mute: FindingMute, optional + + :param resource: The resource name of this finding. + :type resource: str, optional + + :param resource_discovery_date: The date on which the resource was discovered (Unix ms). + :type resource_discovery_date: int, optional + + :param resource_type: The resource type of this finding. + :type resource_type: str, optional + + :param rule: The rule that triggered this finding. + :type rule: FindingRule, optional + + :param status: The status of the finding. + :type status: FindingStatus, optional + + :param tags: The tags associated with this finding. + :type tags: [str], optional + + :param vulnerability_type: The vulnerability type of the finding. + :type vulnerability_type: FindingVulnerabilityType, optional + """ + if datadog_link is not unset: + kwargs["datadog_link"] = datadog_link + if description is not unset: + kwargs["description"] = description + if evaluation is not unset: + kwargs["evaluation"] = evaluation + if evaluation_changed_at is not unset: + kwargs["evaluation_changed_at"] = evaluation_changed_at + if external_id is not unset: + kwargs["external_id"] = external_id + if mute is not unset: + kwargs["mute"] = mute + if resource is not unset: + kwargs["resource"] = resource + if resource_discovery_date is not unset: + kwargs["resource_discovery_date"] = resource_discovery_date + if resource_type is not unset: + kwargs["resource_type"] = resource_type + if rule is not unset: + kwargs["rule"] = rule + if status is not unset: + kwargs["status"] = status + if tags is not unset: + kwargs["tags"] = tags + if vulnerability_type is not unset: + kwargs["vulnerability_type"] = vulnerability_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_case_response.py b/datadog_api_client/v2/model/finding_case_response.py new file mode 100644 index 0000000000..72673213ac --- /dev/null +++ b/datadog_api_client/v2/model/finding_case_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_case_response_data import FindingCaseResponseData + +class FindingCaseResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_case_response_data import FindingCaseResponseData + return { + "data": (FindingCaseResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[FindingCaseResponseData, UnsetType]=unset, **kwargs): + """ + Case response. + + :param data: Data of the case. + :type data: FindingCaseResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_case_response_array.py b/datadog_api_client/v2/model/finding_case_response_array.py new file mode 100644 index 0000000000..14ce99be90 --- /dev/null +++ b/datadog_api_client/v2/model/finding_case_response_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_case_response_data import FindingCaseResponseData + +class FindingCaseResponseArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_case_response_data import FindingCaseResponseData + return { + "data": ([FindingCaseResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[FindingCaseResponseData], **kwargs): + """ + List of case responses. + + :param data: Array of case response data objects. + :type data: [FindingCaseResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/finding_case_response_data.py b/datadog_api_client/v2/model/finding_case_response_data.py new file mode 100644 index 0000000000..6883f4702c --- /dev/null +++ b/datadog_api_client/v2/model/finding_case_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_case_response_data_attributes import FindingCaseResponseDataAttributes + from datadog_api_client.v2.model.finding_case_response_data_relationships import FindingCaseResponseDataRelationships + from datadog_api_client.v2.model.case_data_type import CaseDataType + +class FindingCaseResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_case_response_data_attributes import FindingCaseResponseDataAttributes + from datadog_api_client.v2.model.finding_case_response_data_relationships import FindingCaseResponseDataRelationships + from datadog_api_client.v2.model.case_data_type import CaseDataType + return { + "attributes": (FindingCaseResponseDataAttributes,), + "id": (str,), + "relationships": (FindingCaseResponseDataRelationships,), + "type": (CaseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: CaseDataType, attributes: Union[FindingCaseResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[FindingCaseResponseDataRelationships, UnsetType]=unset, **kwargs): + """ + Data of the case. + + :param attributes: Attributes of the case. + :type attributes: FindingCaseResponseDataAttributes, optional + + :param id: Unique identifier of the case. + :type id: str, optional + + :param relationships: Relationships of the case. + :type relationships: FindingCaseResponseDataRelationships, optional + + :param type: Cases resource type. + :type type: CaseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/finding_case_response_data_attributes.py b/datadog_api_client/v2/model/finding_case_response_data_attributes.py new file mode 100644 index 0000000000..f5e9d6affa --- /dev/null +++ b/datadog_api_client/v2/model/finding_case_response_data_attributes.py @@ -0,0 +1,190 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.case_insights_items import CaseInsightsItems + from datadog_api_client.v2.model.finding_jira_issue import FindingJiraIssue + from datadog_api_client.v2.model.finding_linear_issue import FindingLinearIssue + from datadog_api_client.v2.model.finding_service_now_ticket import FindingServiceNowTicket + +class FindingCaseResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.case_insights_items import CaseInsightsItems + from datadog_api_client.v2.model.finding_jira_issue import FindingJiraIssue + from datadog_api_client.v2.model.finding_linear_issue import FindingLinearIssue + from datadog_api_client.v2.model.finding_service_now_ticket import FindingServiceNowTicket + return { + "archived_at": (datetime,), + "assigned_to": (RelationshipToUser,), + "attributes": ({str: ([str],)},), + "closed_at": (datetime,), + "created_at": (datetime,), + "creation_source": (str,), + "description": (str,), + "due_date": (str,), + "insights": ([CaseInsightsItems],), + "jira_issue": (FindingJiraIssue,), + "key": (str,), + "linear_issue": (FindingLinearIssue,), + "modified_at": (datetime,), + "priority": (str,), + "servicenow_ticket": (FindingServiceNowTicket,), + "status": (str,), + "status_group": (str,), + "status_name": (str,), + "title": (str,), + "type": (str,), + } + attribute_map = { + "archived_at": "archived_at", + "assigned_to": "assigned_to", + "attributes": "attributes", + "closed_at": "closed_at", + "created_at": "created_at", + "creation_source": "creation_source", + "description": "description", + "due_date": "due_date", + "insights": "insights", + "jira_issue": "jira_issue", + "key": "key", + "linear_issue": "linear_issue", + "modified_at": "modified_at", + "priority": "priority", + "servicenow_ticket": "servicenow_ticket", + "status": "status", + "status_group": "status_group", + "status_name": "status_name", + "title": "title", + "type": "type", + } + + def __init__(self_, archived_at: Union[datetime, UnsetType]=unset, assigned_to: Union[RelationshipToUser, UnsetType]=unset, attributes: Union[Dict[str, List[str]], UnsetType]=unset, closed_at: Union[datetime, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, creation_source: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, due_date: Union[str, UnsetType]=unset, insights: Union[List[CaseInsightsItems], UnsetType]=unset, jira_issue: Union[FindingJiraIssue, UnsetType]=unset, key: Union[str, UnsetType]=unset, linear_issue: Union[FindingLinearIssue, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, priority: Union[str, UnsetType]=unset, servicenow_ticket: Union[FindingServiceNowTicket, UnsetType]=unset, status: Union[str, UnsetType]=unset, status_group: Union[str, UnsetType]=unset, status_name: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the case. + + :param archived_at: Timestamp of when the case was archived. + :type archived_at: datetime, optional + + :param assigned_to: Relationship to user. + :type assigned_to: RelationshipToUser, optional + + :param attributes: Custom attributes associated with the case as key-value pairs where values are string arrays. + :type attributes: {str: ([str],)}, optional + + :param closed_at: Timestamp of when the case was closed. + :type closed_at: datetime, optional + + :param created_at: Timestamp of when the case was created. + :type created_at: datetime, optional + + :param creation_source: Source of the case creation. + :type creation_source: str, optional + + :param description: Description of the case. + :type description: str, optional + + :param due_date: Due date of the case. + :type due_date: str, optional + + :param insights: Insights of the case. + :type insights: [CaseInsightsItems], optional + + :param jira_issue: Jira issue associated with the case. + :type jira_issue: FindingJiraIssue, optional + + :param key: Key of the case. + :type key: str, optional + + :param linear_issue: Linear issue associated with the case. + :type linear_issue: FindingLinearIssue, optional + + :param modified_at: Timestamp of when the case was last modified. + :type modified_at: datetime, optional + + :param priority: Priority of the case. + :type priority: str, optional + + :param servicenow_ticket: ServiceNow ticket associated with the case. + :type servicenow_ticket: FindingServiceNowTicket, optional + + :param status: Status of the case. + :type status: str, optional + + :param status_group: Status group of the case. + :type status_group: str, optional + + :param status_name: Status name of the case. + :type status_name: str, optional + + :param title: Title of the case. + :type title: str, optional + + :param type: Type of the case. For security cases, this is always "SECURITY". + :type type: str, optional + """ + if archived_at is not unset: + kwargs["archived_at"] = archived_at + if assigned_to is not unset: + kwargs["assigned_to"] = assigned_to + if attributes is not unset: + kwargs["attributes"] = attributes + if closed_at is not unset: + kwargs["closed_at"] = closed_at + if created_at is not unset: + kwargs["created_at"] = created_at + if creation_source is not unset: + kwargs["creation_source"] = creation_source + if description is not unset: + kwargs["description"] = description + if due_date is not unset: + kwargs["due_date"] = due_date + if insights is not unset: + kwargs["insights"] = insights + if jira_issue is not unset: + kwargs["jira_issue"] = jira_issue + if key is not unset: + kwargs["key"] = key + if linear_issue is not unset: + kwargs["linear_issue"] = linear_issue + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if priority is not unset: + kwargs["priority"] = priority + if servicenow_ticket is not unset: + kwargs["servicenow_ticket"] = servicenow_ticket + if status is not unset: + kwargs["status"] = status + if status_group is not unset: + kwargs["status_group"] = status_group + if status_name is not unset: + kwargs["status_name"] = status_name + if title is not unset: + kwargs["title"] = title + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_case_response_data_relationships.py b/datadog_api_client/v2/model/finding_case_response_data_relationships.py new file mode 100644 index 0000000000..0a6540cd64 --- /dev/null +++ b/datadog_api_client/v2/model/finding_case_response_data_relationships.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + +class FindingCaseResponseDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.case_management_project import CaseManagementProject + return { + "created_by": (RelationshipToUser,), + "modified_by": (RelationshipToUser,), + "project": (CaseManagementProject,), + } + attribute_map = { + "created_by": "created_by", + "modified_by": "modified_by", + "project": "project", + } + + def __init__(self_, created_by: Union[RelationshipToUser, UnsetType]=unset, modified_by: Union[RelationshipToUser, UnsetType]=unset, project: Union[CaseManagementProject, UnsetType]=unset, **kwargs): + """ + Relationships of the case. + + :param created_by: Relationship to user. + :type created_by: RelationshipToUser, optional + + :param modified_by: Relationship to user. + :type modified_by: RelationshipToUser, optional + + :param project: Case management project. + :type project: CaseManagementProject, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if modified_by is not unset: + kwargs["modified_by"] = modified_by + if project is not unset: + kwargs["project"] = project + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_data.py b/datadog_api_client/v2/model/finding_data.py new file mode 100644 index 0000000000..2f82a8f0ee --- /dev/null +++ b/datadog_api_client/v2/model/finding_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_data_type import FindingDataType + +class FindingData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_data_type import FindingDataType + return { + "id": (str,), + "type": (FindingDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: FindingDataType, **kwargs): + """ + Data object representing a security finding. + + :param id: Unique identifier of the security finding. + :type id: str + + :param type: Security findings resource type. + :type type: FindingDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/finding_data_type.py b/datadog_api_client/v2/model/finding_data_type.py new file mode 100644 index 0000000000..5b893562b7 --- /dev/null +++ b/datadog_api_client/v2/model/finding_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FindingDataType(ModelSimple): + """ + Security findings resource type. + + :param value: If omitted defaults to "findings". Must be one of ["findings"]. + :type value: str + """ + + allowed_values = { + "findings", + } + FINDINGS: ClassVar["FindingDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FindingDataType.FINDINGS = FindingDataType("findings") diff --git a/datadog_api_client/v2/model/finding_evaluation.py b/datadog_api_client/v2/model/finding_evaluation.py new file mode 100644 index 0000000000..64f62c1d59 --- /dev/null +++ b/datadog_api_client/v2/model/finding_evaluation.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FindingEvaluation(ModelSimple): + """ + The evaluation of the finding. + + :param value: Must be one of ["pass", "fail"]. + :type value: str + """ + + allowed_values = { + "pass", + "fail", + } + PASS: ClassVar["FindingEvaluation"] + FAIL: ClassVar["FindingEvaluation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FindingEvaluation.PASS = FindingEvaluation("pass") +FindingEvaluation.FAIL = FindingEvaluation("fail") diff --git a/datadog_api_client/v2/model/finding_jira_issue.py b/datadog_api_client/v2/model/finding_jira_issue.py new file mode 100644 index 0000000000..0b162e8afb --- /dev/null +++ b/datadog_api_client/v2/model/finding_jira_issue.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_jira_issue_result import FindingJiraIssueResult + +class FindingJiraIssue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_jira_issue_result import FindingJiraIssueResult + return { + "error_message": (str,), + "result": (FindingJiraIssueResult,), + "status": (str,), + } + attribute_map = { + "error_message": "error_message", + "result": "result", + "status": "status", + } + + def __init__(self_, error_message: Union[str, UnsetType]=unset, result: Union[FindingJiraIssueResult, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Jira issue associated with the case. + + :param error_message: Error message if the Jira issue creation failed. + :type error_message: str, optional + + :param result: Result of the Jira issue creation. + :type result: FindingJiraIssueResult, optional + + :param status: Status of the Jira issue creation. Can be "COMPLETED" if the Jira issue was created successfully, or "FAILED" if the Jira issue creation failed. + :type status: str, optional + """ + if error_message is not unset: + kwargs["error_message"] = error_message + if result is not unset: + kwargs["result"] = result + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_jira_issue_result.py b/datadog_api_client/v2/model/finding_jira_issue_result.py new file mode 100644 index 0000000000..bf72c7b3c1 --- /dev/null +++ b/datadog_api_client/v2/model/finding_jira_issue_result.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FindingJiraIssueResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "issue_id": (str,), + "issue_key": (str,), + "issue_url": (str,), + } + attribute_map = { + "account_id": "account_id", + "issue_id": "issue_id", + "issue_key": "issue_key", + "issue_url": "issue_url", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, issue_id: Union[str, UnsetType]=unset, issue_key: Union[str, UnsetType]=unset, issue_url: Union[str, UnsetType]=unset, **kwargs): + """ + Result of the Jira issue creation. + + :param account_id: Account ID of the Jira issue. + :type account_id: str, optional + + :param issue_id: Unique identifier of the Jira issue. + :type issue_id: str, optional + + :param issue_key: Key of the Jira issue. + :type issue_key: str, optional + + :param issue_url: URL of the Jira issue. + :type issue_url: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if issue_id is not unset: + kwargs["issue_id"] = issue_id + if issue_key is not unset: + kwargs["issue_key"] = issue_key + if issue_url is not unset: + kwargs["issue_url"] = issue_url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_linear_issue.py b/datadog_api_client/v2/model/finding_linear_issue.py new file mode 100644 index 0000000000..ef30ca086b --- /dev/null +++ b/datadog_api_client/v2/model/finding_linear_issue.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_linear_issue_result import FindingLinearIssueResult + +class FindingLinearIssue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_linear_issue_result import FindingLinearIssueResult + return { + "error_message": (str,), + "result": (FindingLinearIssueResult,), + "status": (str,), + } + attribute_map = { + "error_message": "error_message", + "result": "result", + "status": "status", + } + + def __init__(self_, error_message: Union[str, UnsetType]=unset, result: Union[FindingLinearIssueResult, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Linear issue associated with the case. + + :param error_message: Error message if the Linear issue creation failed. + :type error_message: str, optional + + :param result: Result of the Linear issue creation. + :type result: FindingLinearIssueResult, optional + + :param status: Status of the Linear issue creation. Can be "COMPLETED" if the Linear issue was created successfully, or "FAILED" if the Linear issue creation failed. + :type status: str, optional + """ + if error_message is not unset: + kwargs["error_message"] = error_message + if result is not unset: + kwargs["result"] = result + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_linear_issue_result.py b/datadog_api_client/v2/model/finding_linear_issue_result.py new file mode 100644 index 0000000000..4a12b623fa --- /dev/null +++ b/datadog_api_client/v2/model/finding_linear_issue_result.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FindingLinearIssueResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "issue_id": (str,), + "issue_key": (str,), + "team_id": (str,), + "url": (str,), + } + attribute_map = { + "account_id": "account_id", + "issue_id": "issue_id", + "issue_key": "issue_key", + "team_id": "team_id", + "url": "url", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, issue_id: Union[str, UnsetType]=unset, issue_key: Union[str, UnsetType]=unset, team_id: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Result of the Linear issue creation. + + :param account_id: Account ID of the Linear workspace. + :type account_id: str, optional + + :param issue_id: Unique identifier of the Linear issue. + :type issue_id: str, optional + + :param issue_key: Key of the Linear issue. + :type issue_key: str, optional + + :param team_id: Team ID of the Linear issue. + :type team_id: str, optional + + :param url: URL of the Linear issue. + :type url: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if issue_id is not unset: + kwargs["issue_id"] = issue_id + if issue_key is not unset: + kwargs["issue_key"] = issue_key + if team_id is not unset: + kwargs["team_id"] = team_id + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_mute.py b/datadog_api_client/v2/model/finding_mute.py new file mode 100644 index 0000000000..68e3cae1dc --- /dev/null +++ b/datadog_api_client/v2/model/finding_mute.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_mute_reason import FindingMuteReason + +class FindingMute(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_mute_reason import FindingMuteReason + return { + "description": (str,), + "expiration_date": (int,), + "muted": (bool,), + "reason": (FindingMuteReason,), + "start_date": (int,), + "uuid": (str,), + } + attribute_map = { + "description": "description", + "expiration_date": "expiration_date", + "muted": "muted", + "reason": "reason", + "start_date": "start_date", + "uuid": "uuid", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, expiration_date: Union[int, UnsetType]=unset, muted: Union[bool, UnsetType]=unset, reason: Union[FindingMuteReason, UnsetType]=unset, start_date: Union[int, UnsetType]=unset, uuid: Union[str, UnsetType]=unset, **kwargs): + """ + Information about the mute status of this finding. + + :param description: Additional information about the reason why this finding is muted or unmuted. + :type description: str, optional + + :param expiration_date: The expiration date of the mute or unmute action (Unix ms). + :type expiration_date: int, optional + + :param muted: Whether this finding is muted or unmuted. + :type muted: bool, optional + + :param reason: The reason why this finding is muted or unmuted. + :type reason: FindingMuteReason, optional + + :param start_date: The start of the mute period. + :type start_date: int, optional + + :param uuid: The ID of the user who muted or unmuted this finding. + :type uuid: str, optional + """ + if description is not unset: + kwargs["description"] = description + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if muted is not unset: + kwargs["muted"] = muted + if reason is not unset: + kwargs["reason"] = reason + if start_date is not unset: + kwargs["start_date"] = start_date + if uuid is not unset: + kwargs["uuid"] = uuid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_mute_reason.py b/datadog_api_client/v2/model/finding_mute_reason.py new file mode 100644 index 0000000000..2d5518e8fe --- /dev/null +++ b/datadog_api_client/v2/model/finding_mute_reason.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FindingMuteReason(ModelSimple): + """ + The reason why this finding is muted or unmuted. + + :param value: Must be one of ["PENDING_FIX", "FALSE_POSITIVE", "ACCEPTED_RISK", "NO_PENDING_FIX", "HUMAN_ERROR", "NO_LONGER_ACCEPTED_RISK", "OTHER"]. + :type value: str + """ + + allowed_values = { + "PENDING_FIX", + "FALSE_POSITIVE", + "ACCEPTED_RISK", + "NO_PENDING_FIX", + "HUMAN_ERROR", + "NO_LONGER_ACCEPTED_RISK", + "OTHER", + } + PENDING_FIX: ClassVar["FindingMuteReason"] + FALSE_POSITIVE: ClassVar["FindingMuteReason"] + ACCEPTED_RISK: ClassVar["FindingMuteReason"] + NO_PENDING_FIX: ClassVar["FindingMuteReason"] + HUMAN_ERROR: ClassVar["FindingMuteReason"] + NO_LONGER_ACCEPTED_RISK: ClassVar["FindingMuteReason"] + OTHER: ClassVar["FindingMuteReason"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FindingMuteReason.PENDING_FIX = FindingMuteReason("PENDING_FIX") +FindingMuteReason.FALSE_POSITIVE = FindingMuteReason("FALSE_POSITIVE") +FindingMuteReason.ACCEPTED_RISK = FindingMuteReason("ACCEPTED_RISK") +FindingMuteReason.NO_PENDING_FIX = FindingMuteReason("NO_PENDING_FIX") +FindingMuteReason.HUMAN_ERROR = FindingMuteReason("HUMAN_ERROR") +FindingMuteReason.NO_LONGER_ACCEPTED_RISK = FindingMuteReason("NO_LONGER_ACCEPTED_RISK") +FindingMuteReason.OTHER = FindingMuteReason("OTHER") diff --git a/datadog_api_client/v2/model/finding_rule.py b/datadog_api_client/v2/model/finding_rule.py new file mode 100644 index 0000000000..c43a109f9f --- /dev/null +++ b/datadog_api_client/v2/model/finding_rule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FindingRule(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "id": (str,), + "name": (str,), + } + attribute_map = { + "id": "id", + "name": "name", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The rule that triggered this finding. + + :param id: The ID of the rule that triggered this finding. + :type id: str, optional + + :param name: The name of the rule that triggered this finding. + :type name: str, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_service_now_ticket.py b/datadog_api_client/v2/model/finding_service_now_ticket.py new file mode 100644 index 0000000000..5dd87ee76a --- /dev/null +++ b/datadog_api_client/v2/model/finding_service_now_ticket.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_service_now_ticket_result import FindingServiceNowTicketResult + +class FindingServiceNowTicket(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_service_now_ticket_result import FindingServiceNowTicketResult + return { + "result": (FindingServiceNowTicketResult,), + "status": (str,), + } + attribute_map = { + "result": "result", + "status": "status", + } + + def __init__(self_, result: Union[FindingServiceNowTicketResult, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + ServiceNow ticket associated with the case. + + :param result: Result of the ServiceNow ticket creation or attachment. + :type result: FindingServiceNowTicketResult, optional + + :param status: Status of the ServiceNow ticket operation. Can be "COMPLETED" if successful, or "FAILED" if the operation failed. + :type status: str, optional + """ + if result is not unset: + kwargs["result"] = result + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_service_now_ticket_result.py b/datadog_api_client/v2/model/finding_service_now_ticket_result.py new file mode 100644 index 0000000000..5a64f4364a --- /dev/null +++ b/datadog_api_client/v2/model/finding_service_now_ticket_result.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FindingServiceNowTicketResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "instance_name": (str,), + "sys_id": (str,), + "sys_target_link": (str,), + "sys_target_sys_id": (str,), + "table_name": (str,), + "url": (str,), + } + attribute_map = { + "instance_name": "instance_name", + "sys_id": "sys_id", + "sys_target_link": "sys_target_link", + "sys_target_sys_id": "sys_target_sys_id", + "table_name": "table_name", + "url": "url", + } + + def __init__(self_, instance_name: Union[str, UnsetType]=unset, sys_id: Union[str, UnsetType]=unset, sys_target_link: Union[str, UnsetType]=unset, sys_target_sys_id: Union[str, UnsetType]=unset, table_name: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Result of the ServiceNow ticket creation or attachment. + + :param instance_name: ServiceNow instance name extracted from the ticket URL. + :type instance_name: str, optional + + :param sys_id: Unique identifier of the ServiceNow incident record. + :type sys_id: str, optional + + :param sys_target_link: Direct link to the ServiceNow incident record. + :type sys_target_link: str, optional + + :param sys_target_sys_id: Unique identifier of the target ServiceNow record. + :type sys_target_sys_id: str, optional + + :param table_name: ServiceNow table containing the incident record. + :type table_name: str, optional + + :param url: URL of the ServiceNow incident record. + :type url: str, optional + """ + if instance_name is not unset: + kwargs["instance_name"] = instance_name + if sys_id is not unset: + kwargs["sys_id"] = sys_id + if sys_target_link is not unset: + kwargs["sys_target_link"] = sys_target_link + if sys_target_sys_id is not unset: + kwargs["sys_target_sys_id"] = sys_target_sys_id + if table_name is not unset: + kwargs["table_name"] = table_name + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/finding_status.py b/datadog_api_client/v2/model/finding_status.py new file mode 100644 index 0000000000..161b198323 --- /dev/null +++ b/datadog_api_client/v2/model/finding_status.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FindingStatus(ModelSimple): + """ + The status of the finding. + + :param value: Must be one of ["critical", "high", "medium", "low", "info"]. + :type value: str + """ + + allowed_values = { + "critical", + "high", + "medium", + "low", + "info", + } + CRITICAL: ClassVar["FindingStatus"] + HIGH: ClassVar["FindingStatus"] + MEDIUM: ClassVar["FindingStatus"] + LOW: ClassVar["FindingStatus"] + INFO: ClassVar["FindingStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FindingStatus.CRITICAL = FindingStatus("critical") +FindingStatus.HIGH = FindingStatus("high") +FindingStatus.MEDIUM = FindingStatus("medium") +FindingStatus.LOW = FindingStatus("low") +FindingStatus.INFO = FindingStatus("info") diff --git a/datadog_api_client/v2/model/finding_type.py b/datadog_api_client/v2/model/finding_type.py new file mode 100644 index 0000000000..218803c072 --- /dev/null +++ b/datadog_api_client/v2/model/finding_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FindingType(ModelSimple): + """ + The JSON:API type for findings. + + :param value: If omitted defaults to "finding". Must be one of ["finding"]. + :type value: str + """ + + allowed_values = { + "finding", + } + FINDING: ClassVar["FindingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FindingType.FINDING = FindingType("finding") diff --git a/datadog_api_client/v2/model/finding_vulnerability_type.py b/datadog_api_client/v2/model/finding_vulnerability_type.py new file mode 100644 index 0000000000..eaeef85d4e --- /dev/null +++ b/datadog_api_client/v2/model/finding_vulnerability_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FindingVulnerabilityType(ModelSimple): + """ + The vulnerability type of the finding. + + :param value: Must be one of ["misconfiguration", "attack_path", "identity_risk", "api_security"]. + :type value: str + """ + + allowed_values = { + "misconfiguration", + "attack_path", + "identity_risk", + "api_security", + } + MISCONFIGURATION: ClassVar["FindingVulnerabilityType"] + ATTACK_PATH: ClassVar["FindingVulnerabilityType"] + IDENTITY_RISK: ClassVar["FindingVulnerabilityType"] + API_SECURITY: ClassVar["FindingVulnerabilityType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FindingVulnerabilityType.MISCONFIGURATION = FindingVulnerabilityType("misconfiguration") +FindingVulnerabilityType.ATTACK_PATH = FindingVulnerabilityType("attack_path") +FindingVulnerabilityType.IDENTITY_RISK = FindingVulnerabilityType("identity_risk") +FindingVulnerabilityType.API_SECURITY = FindingVulnerabilityType("api_security") diff --git a/datadog_api_client/v2/model/findings.py b/datadog_api_client/v2/model/findings.py new file mode 100644 index 0000000000..29bba3088e --- /dev/null +++ b/datadog_api_client/v2/model/findings.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding_data import FindingData + +class Findings(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding_data import FindingData + return { + "data": ([FindingData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[FindingData], UnsetType]=unset, **kwargs): + """ + A list of security findings. + + :param data: Array of security finding data objects. + :type data: [FindingData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_test.py b/datadog_api_client/v2/model/flaky_test.py new file mode 100644 index 0000000000..f1c9aea6f7 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flaky_test_attributes import FlakyTestAttributes + from datadog_api_client.v2.model.flaky_test_type import FlakyTestType + +class FlakyTest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flaky_test_attributes import FlakyTestAttributes + from datadog_api_client.v2.model.flaky_test_type import FlakyTestType + return { + "attributes": (FlakyTestAttributes,), + "id": (str,), + "type": (FlakyTestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[FlakyTestAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[FlakyTestType, UnsetType]=unset, **kwargs): + """ + A flaky test object. + + :param attributes: Attributes of a flaky test. + :type attributes: FlakyTestAttributes, optional + + :param id: Test's ID. This ID is the hash of the test's Fully Qualified Name and Git repository ID. It is the + value of the ``@test.fingerprint_fqn`` facet on test events, which you can search on in the Test + Optimization Explorer to locate a specific test. To filter search results by this ID, use the + ``fingerprint_fqn`` search key. + :type id: str, optional + + :param type: The type of the flaky test from Flaky Test Management. + :type type: FlakyTestType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_test_attributes.py b/datadog_api_client/v2/model/flaky_test_attributes.py new file mode 100644 index 0000000000..9616e85f5f --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_attributes.py @@ -0,0 +1,218 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flaky_test_attributes_flaky_state import FlakyTestAttributesFlakyState + from datadog_api_client.v2.model.flaky_test_history import FlakyTestHistory + from datadog_api_client.v2.model.flaky_test_impact_level import FlakyTestImpactLevel + from datadog_api_client.v2.model.flaky_test_pipeline_stats import FlakyTestPipelineStats + from datadog_api_client.v2.model.flaky_test_run_metadata import FlakyTestRunMetadata + from datadog_api_client.v2.model.flaky_test_stats import FlakyTestStats + +class FlakyTestAttributes(ModelNormal): + validations = { + "impact_score": { + "inclusive_maximum": 1, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flaky_test_attributes_flaky_state import FlakyTestAttributesFlakyState + from datadog_api_client.v2.model.flaky_test_history import FlakyTestHistory + from datadog_api_client.v2.model.flaky_test_impact_level import FlakyTestImpactLevel + from datadog_api_client.v2.model.flaky_test_pipeline_stats import FlakyTestPipelineStats + from datadog_api_client.v2.model.flaky_test_run_metadata import FlakyTestRunMetadata + from datadog_api_client.v2.model.flaky_test_stats import FlakyTestStats + return { + "attempt_to_fix_id": (str,), + "codeowners": ([str],), + "envs": ([str],), + "first_flaked_branch": (str,), + "first_flaked_sha": (str,), + "first_flaked_ts": (int,), + "flaky_category": (str, none_type), + "flaky_state": (FlakyTestAttributesFlakyState,), + "history": ([FlakyTestHistory],), + "impact_level": (FlakyTestImpactLevel,), + "impact_score": (float, none_type), + "last_flaked_branch": (str,), + "last_flaked_sha": (str,), + "last_flaked_ts": (int,), + "module": (str, none_type), + "name": (str,), + "pipeline_stats": (FlakyTestPipelineStats,), + "services": ([str],), + "suite": (str,), + "test_run_metadata": (FlakyTestRunMetadata,), + "test_stats": (FlakyTestStats,), + } + attribute_map = { + "attempt_to_fix_id": "attempt_to_fix_id", + "codeowners": "codeowners", + "envs": "envs", + "first_flaked_branch": "first_flaked_branch", + "first_flaked_sha": "first_flaked_sha", + "first_flaked_ts": "first_flaked_ts", + "flaky_category": "flaky_category", + "flaky_state": "flaky_state", + "history": "history", + "impact_level": "impact_level", + "impact_score": "impact_score", + "last_flaked_branch": "last_flaked_branch", + "last_flaked_sha": "last_flaked_sha", + "last_flaked_ts": "last_flaked_ts", + "module": "module", + "name": "name", + "pipeline_stats": "pipeline_stats", + "services": "services", + "suite": "suite", + "test_run_metadata": "test_run_metadata", + "test_stats": "test_stats", + } + + def __init__(self_, attempt_to_fix_id: Union[str, UnsetType]=unset, codeowners: Union[List[str], UnsetType]=unset, envs: Union[List[str], UnsetType]=unset, first_flaked_branch: Union[str, UnsetType]=unset, first_flaked_sha: Union[str, UnsetType]=unset, first_flaked_ts: Union[int, UnsetType]=unset, flaky_category: Union[str, none_type, UnsetType]=unset, flaky_state: Union[FlakyTestAttributesFlakyState, UnsetType]=unset, history: Union[List[FlakyTestHistory], UnsetType]=unset, impact_level: Union[FlakyTestImpactLevel, UnsetType]=unset, impact_score: Union[float, none_type, UnsetType]=unset, last_flaked_branch: Union[str, UnsetType]=unset, last_flaked_sha: Union[str, UnsetType]=unset, last_flaked_ts: Union[int, UnsetType]=unset, module: Union[str, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, pipeline_stats: Union[FlakyTestPipelineStats, UnsetType]=unset, services: Union[List[str], UnsetType]=unset, suite: Union[str, UnsetType]=unset, test_run_metadata: Union[FlakyTestRunMetadata, UnsetType]=unset, test_stats: Union[FlakyTestStats, UnsetType]=unset, **kwargs): + """ + Attributes of a flaky test. + + :param attempt_to_fix_id: Unique identifier for the attempt to fix this flaky test. Use this ID in the Git commit message in order to trigger the attempt to fix workflow. + + When the workflow is triggered the test is automatically retried by the tracer a certain number of configurable times. When all retries pass, the test is automatically marked as fixed in Flaky Test Management. + Test runs are tagged with @test.test_management.attempt_to_fix_passed and @test.test_management.is_attempt_to_fix when the attempt to fix workflow is triggered. + :type attempt_to_fix_id: str, optional + + :param codeowners: The name of the test's code owners as inferred from the repository configuration. + :type codeowners: [str], optional + + :param envs: List of environments where this test has been flaky. + :type envs: [str], optional + + :param first_flaked_branch: The branch name where the test exhibited flakiness for the first time. + :type first_flaked_branch: str, optional + + :param first_flaked_sha: The commit SHA where the test exhibited flakiness for the first time. + :type first_flaked_sha: str, optional + + :param first_flaked_ts: Unix timestamp when the test exhibited flakiness for the first time. + :type first_flaked_ts: int, optional + + :param flaky_category: The category of a flaky test. + :type flaky_category: str, none_type, optional + + :param flaky_state: The current state of the flaky test. + :type flaky_state: FlakyTestAttributesFlakyState, optional + + :param history: Chronological history of status changes for this flaky test, ordered from most recent to oldest. + Includes state transitions like new -> quarantined -> fixed, along with the associated commit SHA when available. + :type history: [FlakyTestHistory], optional + + :param impact_level: The impact level of the flaky test, derived from its impact score. + :type impact_level: FlakyTestImpactLevel, optional + + :param impact_score: A score from 0 to 1 indicating the impact of this flaky test, based on factors such as how often it fails and how many pipelines it affects. + :type impact_score: float, none_type, optional + + :param last_flaked_branch: The branch name where the test exhibited flakiness for the last time. + :type last_flaked_branch: str, optional + + :param last_flaked_sha: The commit SHA where the test exhibited flakiness for the last time. + :type last_flaked_sha: str, optional + + :param last_flaked_ts: Unix timestamp when the test exhibited flakiness for the last time. + :type last_flaked_ts: int, optional + + :param module: The name of the test module. The definition of module changes slightly per language: + + * In .NET, a test module groups every test that is run under the same unit test project. + * In Swift, a test module groups every test that is run for a given bundle. + * In JavaScript, the test modules map one-to-one to test sessions. + * In Java, a test module groups every test that is run by the same Maven Surefire/Failsafe or Gradle Test task execution. + * In Python, a test module groups every test that is run under the same ``.py`` file as part of a test suite, which is typically managed by a framework like ``unittest`` or ``pytest``. + * In Ruby, a test module groups every test that is run within the same test file, which is typically managed by a framework like ``RSpec`` or ``Minitest``. + :type module: str, none_type, optional + + :param name: The test name. A concise name for a test case. Defined in the test itself. + :type name: str, optional + + :param pipeline_stats: CI pipeline related statistics for the flaky test. This information is only available if test runs are associated with CI pipeline events from CI Visibility. + :type pipeline_stats: FlakyTestPipelineStats, optional + + :param services: List of test service names where this test has been flaky. + + A test service is a group of tests associated with a project or repository. It contains all the individual tests for your code, optionally organized into test suites, which are like folders for your tests. + :type services: [str], optional + + :param suite: The name of the test suite. A group of tests exercising the same unit of code depending on your language and testing framework. + :type suite: str, optional + + :param test_run_metadata: Metadata about the latest failed test run of the flaky test. + :type test_run_metadata: FlakyTestRunMetadata, optional + + :param test_stats: Test statistics for the flaky test. + :type test_stats: FlakyTestStats, optional + """ + if attempt_to_fix_id is not unset: + kwargs["attempt_to_fix_id"] = attempt_to_fix_id + if codeowners is not unset: + kwargs["codeowners"] = codeowners + if envs is not unset: + kwargs["envs"] = envs + if first_flaked_branch is not unset: + kwargs["first_flaked_branch"] = first_flaked_branch + if first_flaked_sha is not unset: + kwargs["first_flaked_sha"] = first_flaked_sha + if first_flaked_ts is not unset: + kwargs["first_flaked_ts"] = first_flaked_ts + if flaky_category is not unset: + kwargs["flaky_category"] = flaky_category + if flaky_state is not unset: + kwargs["flaky_state"] = flaky_state + if history is not unset: + kwargs["history"] = history + if impact_level is not unset: + kwargs["impact_level"] = impact_level + if impact_score is not unset: + kwargs["impact_score"] = impact_score + if last_flaked_branch is not unset: + kwargs["last_flaked_branch"] = last_flaked_branch + if last_flaked_sha is not unset: + kwargs["last_flaked_sha"] = last_flaked_sha + if last_flaked_ts is not unset: + kwargs["last_flaked_ts"] = last_flaked_ts + if module is not unset: + kwargs["module"] = module + if name is not unset: + kwargs["name"] = name + if pipeline_stats is not unset: + kwargs["pipeline_stats"] = pipeline_stats + if services is not unset: + kwargs["services"] = services + if suite is not unset: + kwargs["suite"] = suite + if test_run_metadata is not unset: + kwargs["test_run_metadata"] = test_run_metadata + if test_stats is not unset: + kwargs["test_stats"] = test_stats + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_test_attributes_flaky_state.py b/datadog_api_client/v2/model/flaky_test_attributes_flaky_state.py new file mode 100644 index 0000000000..bc81675b22 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_attributes_flaky_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FlakyTestAttributesFlakyState(ModelSimple): + """ + The current state of the flaky test. + + :param value: Must be one of ["active", "fixed", "quarantined", "disabled"]. + :type value: str + """ + + allowed_values = { + "active", + "fixed", + "quarantined", + "disabled", + } + ACTIVE: ClassVar["FlakyTestAttributesFlakyState"] + FIXED: ClassVar["FlakyTestAttributesFlakyState"] + QUARANTINED: ClassVar["FlakyTestAttributesFlakyState"] + DISABLED: ClassVar["FlakyTestAttributesFlakyState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FlakyTestAttributesFlakyState.ACTIVE = FlakyTestAttributesFlakyState("active") +FlakyTestAttributesFlakyState.FIXED = FlakyTestAttributesFlakyState("fixed") +FlakyTestAttributesFlakyState.QUARANTINED = FlakyTestAttributesFlakyState("quarantined") +FlakyTestAttributesFlakyState.DISABLED = FlakyTestAttributesFlakyState("disabled") diff --git a/datadog_api_client/v2/model/flaky_test_history.py b/datadog_api_client/v2/model/flaky_test_history.py new file mode 100644 index 0000000000..477a89a955 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_history.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flaky_test_history_policy_id import FlakyTestHistoryPolicyId + from datadog_api_client.v2.model.flaky_test_history_policy_meta import FlakyTestHistoryPolicyMeta + +class FlakyTestHistory(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flaky_test_history_policy_id import FlakyTestHistoryPolicyId + from datadog_api_client.v2.model.flaky_test_history_policy_meta import FlakyTestHistoryPolicyMeta + return { + "commit_sha": (str,), + "policy_id": (FlakyTestHistoryPolicyId,), + "policy_meta": (FlakyTestHistoryPolicyMeta,), + "status": (str,), + "timestamp": (int,), + } + attribute_map = { + "commit_sha": "commit_sha", + "policy_id": "policy_id", + "policy_meta": "policy_meta", + "status": "status", + "timestamp": "timestamp", + } + + def __init__(self_, commit_sha: str, status: str, timestamp: int, policy_id: Union[FlakyTestHistoryPolicyId, UnsetType]=unset, policy_meta: Union[FlakyTestHistoryPolicyMeta, UnsetType]=unset, **kwargs): + """ + A single history entry representing a status change for a flaky test. + + :param commit_sha: The commit SHA associated with this status change. Will be an empty string if the commit SHA is not available. + :type commit_sha: str + + :param policy_id: The policy that triggered this status change. + :type policy_id: FlakyTestHistoryPolicyId, optional + + :param policy_meta: Metadata about the policy that triggered this status change. + :type policy_meta: FlakyTestHistoryPolicyMeta, optional + + :param status: The test status at this point in history. + :type status: str + + :param timestamp: Unix timestamp in milliseconds when this status change occurred. + :type timestamp: int + """ + if policy_id is not unset: + kwargs["policy_id"] = policy_id + if policy_meta is not unset: + kwargs["policy_meta"] = policy_meta + super().__init__(kwargs) + + + self_.commit_sha = commit_sha + self_.status = status + self_.timestamp = timestamp diff --git a/datadog_api_client/v2/model/flaky_test_history_policy_id.py b/datadog_api_client/v2/model/flaky_test_history_policy_id.py new file mode 100644 index 0000000000..ba7d7d3fbc --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_history_policy_id.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FlakyTestHistoryPolicyId(ModelSimple): + """ + The policy that triggered this status change. + + :param value: Must be one of ["ftm_policy.manual", "ftm_policy.fixed", "ftm_policy.disable.failure_rate", "ftm_policy.disable.branch_flake", "ftm_policy.disable.days_active", "ftm_policy.quarantine.failure_rate", "ftm_policy.quarantine.branch_flake", "ftm_policy.quarantine.days_active", "unknown"]. + :type value: str + """ + + allowed_values = { + "ftm_policy.manual", + "ftm_policy.fixed", + "ftm_policy.disable.failure_rate", + "ftm_policy.disable.branch_flake", + "ftm_policy.disable.days_active", + "ftm_policy.quarantine.failure_rate", + "ftm_policy.quarantine.branch_flake", + "ftm_policy.quarantine.days_active", + "unknown", + } + MANUAL: ClassVar["FlakyTestHistoryPolicyId"] + FIXED: ClassVar["FlakyTestHistoryPolicyId"] + DISABLE_FAILURE_RATE: ClassVar["FlakyTestHistoryPolicyId"] + DISABLE_BRANCH_FLAKE: ClassVar["FlakyTestHistoryPolicyId"] + DISABLE_DAYS_ACTIVE: ClassVar["FlakyTestHistoryPolicyId"] + QUARANTINE_FAILURE_RATE: ClassVar["FlakyTestHistoryPolicyId"] + QUARANTINE_BRANCH_FLAKE: ClassVar["FlakyTestHistoryPolicyId"] + QUARANTINE_DAYS_ACTIVE: ClassVar["FlakyTestHistoryPolicyId"] + UNKNOWN: ClassVar["FlakyTestHistoryPolicyId"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FlakyTestHistoryPolicyId.MANUAL = FlakyTestHistoryPolicyId("ftm_policy.manual") +FlakyTestHistoryPolicyId.FIXED = FlakyTestHistoryPolicyId("ftm_policy.fixed") +FlakyTestHistoryPolicyId.DISABLE_FAILURE_RATE = FlakyTestHistoryPolicyId("ftm_policy.disable.failure_rate") +FlakyTestHistoryPolicyId.DISABLE_BRANCH_FLAKE = FlakyTestHistoryPolicyId("ftm_policy.disable.branch_flake") +FlakyTestHistoryPolicyId.DISABLE_DAYS_ACTIVE = FlakyTestHistoryPolicyId("ftm_policy.disable.days_active") +FlakyTestHistoryPolicyId.QUARANTINE_FAILURE_RATE = FlakyTestHistoryPolicyId("ftm_policy.quarantine.failure_rate") +FlakyTestHistoryPolicyId.QUARANTINE_BRANCH_FLAKE = FlakyTestHistoryPolicyId("ftm_policy.quarantine.branch_flake") +FlakyTestHistoryPolicyId.QUARANTINE_DAYS_ACTIVE = FlakyTestHistoryPolicyId("ftm_policy.quarantine.days_active") +FlakyTestHistoryPolicyId.UNKNOWN = FlakyTestHistoryPolicyId("unknown") diff --git a/datadog_api_client/v2/model/flaky_test_history_policy_meta.py b/datadog_api_client/v2/model/flaky_test_history_policy_meta.py new file mode 100644 index 0000000000..96ae86e8c9 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_history_policy_meta.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flaky_test_history_policy_meta_config import FlakyTestHistoryPolicyMetaConfig + +class FlakyTestHistoryPolicyMeta(ModelNormal): + validations = { + "days_active": { + "inclusive_maximum": 2147483647, + }, + "days_without_flake": { + "inclusive_maximum": 2147483647, + }, + "failure_rate": { + "inclusive_maximum": 1, + "inclusive_minimum": 0, + }, + "total_runs": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flaky_test_history_policy_meta_config import FlakyTestHistoryPolicyMetaConfig + return { + "branches": ([str], none_type), + "config": (FlakyTestHistoryPolicyMetaConfig,), + "days_active": (int, none_type), + "days_without_flake": (int, none_type), + "failure_rate": (float, none_type), + "state": (str, none_type), + "total_runs": (int, none_type), + } + attribute_map = { + "branches": "branches", + "config": "config", + "days_active": "days_active", + "days_without_flake": "days_without_flake", + "failure_rate": "failure_rate", + "state": "state", + "total_runs": "total_runs", + } + + def __init__(self_, branches: Union[List[str], none_type, UnsetType]=unset, config: Union[FlakyTestHistoryPolicyMetaConfig, UnsetType]=unset, days_active: Union[int, none_type, UnsetType]=unset, days_without_flake: Union[int, none_type, UnsetType]=unset, failure_rate: Union[float, none_type, UnsetType]=unset, state: Union[str, none_type, UnsetType]=unset, total_runs: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Metadata about the policy that triggered this status change. + + :param branches: Branches where the test was flaky at the time of the status change. + :type branches: [str], none_type, optional + + :param config: Configuration parameters of the policy that triggered this status change. + :type config: FlakyTestHistoryPolicyMetaConfig, optional + + :param days_active: The number of days the test has been active at the time of the status change. + :type days_active: int, none_type, optional + + :param days_without_flake: The number of days since the test last exhibited flakiness. + :type days_without_flake: int, none_type, optional + + :param failure_rate: The failure rate of the test at the time of the status change. + :type failure_rate: float, none_type, optional + + :param state: The previous state of the test. + :type state: str, none_type, optional + + :param total_runs: The total number of test runs at the time of the status change. + :type total_runs: int, none_type, optional + """ + if branches is not unset: + kwargs["branches"] = branches + if config is not unset: + kwargs["config"] = config + if days_active is not unset: + kwargs["days_active"] = days_active + if days_without_flake is not unset: + kwargs["days_without_flake"] = days_without_flake + if failure_rate is not unset: + kwargs["failure_rate"] = failure_rate + if state is not unset: + kwargs["state"] = state + if total_runs is not unset: + kwargs["total_runs"] = total_runs + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_test_history_policy_meta_config.py b/datadog_api_client/v2/model/flaky_test_history_policy_meta_config.py new file mode 100644 index 0000000000..52b1350850 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_history_policy_meta_config.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FlakyTestHistoryPolicyMetaConfig(ModelNormal): + validations = { + "days_active": { + "inclusive_maximum": 2147483647, + }, + "failure_rate": { + "inclusive_maximum": 1, + "inclusive_minimum": 0, + }, + "required_runs": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "branches": ([str], none_type), + "days_active": (int, none_type), + "failure_rate": (float, none_type), + "forget_branches": ([str], none_type), + "required_runs": (int, none_type), + "state": (str, none_type), + "test_services": ([str], none_type), + } + attribute_map = { + "branches": "branches", + "days_active": "days_active", + "failure_rate": "failure_rate", + "forget_branches": "forget_branches", + "required_runs": "required_runs", + "state": "state", + "test_services": "test_services", + } + + def __init__(self_, branches: Union[List[str], none_type, UnsetType]=unset, days_active: Union[int, none_type, UnsetType]=unset, failure_rate: Union[float, none_type, UnsetType]=unset, forget_branches: Union[List[str], none_type, UnsetType]=unset, required_runs: Union[int, none_type, UnsetType]=unset, state: Union[str, none_type, UnsetType]=unset, test_services: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Configuration parameters of the policy that triggered this status change. + + :param branches: The branches considered by the policy. + :type branches: [str], none_type, optional + + :param days_active: The number of days a test must have been active for the policy to trigger. + :type days_active: int, none_type, optional + + :param failure_rate: The failure rate threshold for the policy to trigger. + :type failure_rate: float, none_type, optional + + :param forget_branches: Branches excluded from the policy evaluation. + :type forget_branches: [str], none_type, optional + + :param required_runs: The minimum number of test runs required for the policy to trigger. + :type required_runs: int, none_type, optional + + :param state: The target state the policy transitions the test from. + :type state: str, none_type, optional + + :param test_services: Test services excluded from the policy evaluation. + :type test_services: [str], none_type, optional + """ + if branches is not unset: + kwargs["branches"] = branches + if days_active is not unset: + kwargs["days_active"] = days_active + if failure_rate is not unset: + kwargs["failure_rate"] = failure_rate + if forget_branches is not unset: + kwargs["forget_branches"] = forget_branches + if required_runs is not unset: + kwargs["required_runs"] = required_runs + if state is not unset: + kwargs["state"] = state + if test_services is not unset: + kwargs["test_services"] = test_services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_test_impact_level.py b/datadog_api_client/v2/model/flaky_test_impact_level.py new file mode 100644 index 0000000000..e3bd7a3279 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_impact_level.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FlakyTestImpactLevel(ModelSimple): + """ + The impact level of the flaky test, derived from its impact score. + + :param value: Must be one of ["low", "medium", "high"]. + :type value: str + """ + + allowed_values = { + "low", + "medium", + "high", + } + LOW: ClassVar["FlakyTestImpactLevel"] + MEDIUM: ClassVar["FlakyTestImpactLevel"] + HIGH: ClassVar["FlakyTestImpactLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FlakyTestImpactLevel.LOW = FlakyTestImpactLevel("low") +FlakyTestImpactLevel.MEDIUM = FlakyTestImpactLevel("medium") +FlakyTestImpactLevel.HIGH = FlakyTestImpactLevel("high") diff --git a/datadog_api_client/v2/model/flaky_test_pipeline_stats.py b/datadog_api_client/v2/model/flaky_test_pipeline_stats.py new file mode 100644 index 0000000000..137e690d0a --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_pipeline_stats.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FlakyTestPipelineStats(ModelNormal): + @cached_property + def openapi_types(_): + return { + "failed_pipelines": (int, none_type), + "total_lost_time_ms": (int, none_type), + } + attribute_map = { + "failed_pipelines": "failed_pipelines", + "total_lost_time_ms": "total_lost_time_ms", + } + + def __init__(self_, failed_pipelines: Union[int, none_type, UnsetType]=unset, total_lost_time_ms: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + CI pipeline related statistics for the flaky test. This information is only available if test runs are associated with CI pipeline events from CI Visibility. + + :param failed_pipelines: The number of pipelines that failed due to this test for the past 7 days. This is computed as the sum of failed CI pipeline events associated with test runs where the flaky test failed. + :type failed_pipelines: int, none_type, optional + + :param total_lost_time_ms: The total time lost by CI pipelines due to this flaky test in milliseconds. This is computed as the sum of the duration of failed CI pipeline events associated with test runs where the flaky test failed. + :type total_lost_time_ms: int, none_type, optional + """ + if failed_pipelines is not unset: + kwargs["failed_pipelines"] = failed_pipelines + if total_lost_time_ms is not unset: + kwargs["total_lost_time_ms"] = total_lost_time_ms + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_test_run_metadata.py b/datadog_api_client/v2/model/flaky_test_run_metadata.py new file mode 100644 index 0000000000..d4fd39a62e --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_run_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FlakyTestRunMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "duration_ms": (int, none_type), + "error_message": (str, none_type), + "error_stack": (str, none_type), + "source_end": (int, none_type), + "source_file": (str, none_type), + "source_start": (int, none_type), + } + attribute_map = { + "duration_ms": "duration_ms", + "error_message": "error_message", + "error_stack": "error_stack", + "source_end": "source_end", + "source_file": "source_file", + "source_start": "source_start", + } + + def __init__(self_, duration_ms: Union[int, none_type, UnsetType]=unset, error_message: Union[str, none_type, UnsetType]=unset, error_stack: Union[str, none_type, UnsetType]=unset, source_end: Union[int, none_type, UnsetType]=unset, source_file: Union[str, none_type, UnsetType]=unset, source_start: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Metadata about the latest failed test run of the flaky test. + + :param duration_ms: The duration of the test run in milliseconds. + :type duration_ms: int, none_type, optional + + :param error_message: The error message from the test failure. + :type error_message: str, none_type, optional + + :param error_stack: The stack trace from the test failure. + :type error_stack: str, none_type, optional + + :param source_end: The line number where the test ends in the source file. + :type source_end: int, none_type, optional + + :param source_file: The source file where the test is defined. + :type source_file: str, none_type, optional + + :param source_start: The line number where the test starts in the source file. + :type source_start: int, none_type, optional + """ + if duration_ms is not unset: + kwargs["duration_ms"] = duration_ms + if error_message is not unset: + kwargs["error_message"] = error_message + if error_stack is not unset: + kwargs["error_stack"] = error_stack + if source_end is not unset: + kwargs["source_end"] = source_end + if source_file is not unset: + kwargs["source_file"] = source_file + if source_start is not unset: + kwargs["source_start"] = source_start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_test_stats.py b/datadog_api_client/v2/model/flaky_test_stats.py new file mode 100644 index 0000000000..f2fddea6ea --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_stats.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FlakyTestStats(ModelNormal): + @cached_property + def openapi_types(_): + return { + "failure_rate_pct": (float, none_type), + } + attribute_map = { + "failure_rate_pct": "failure_rate_pct", + } + + def __init__(self_, failure_rate_pct: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + Test statistics for the flaky test. + + :param failure_rate_pct: The failure rate percentage of the test for the past 7 days. This is the number of failed test runs divided by the total number of test runs (excluding skipped test runs). + :type failure_rate_pct: float, none_type, optional + """ + if failure_rate_pct is not unset: + kwargs["failure_rate_pct"] = failure_rate_pct + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_test_type.py b/datadog_api_client/v2/model/flaky_test_type.py new file mode 100644 index 0000000000..4a1bc69e40 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_test_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FlakyTestType(ModelSimple): + """ + The type of the flaky test from Flaky Test Management. + + :param value: If omitted defaults to "flaky_test". Must be one of ["flaky_test"]. + :type value: str + """ + + allowed_values = { + "flaky_test", + } + FLAKY_TEST: ClassVar["FlakyTestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FlakyTestType.FLAKY_TEST = FlakyTestType("flaky_test") diff --git a/datadog_api_client/v2/model/flaky_tests_pagination.py b/datadog_api_client/v2/model/flaky_tests_pagination.py new file mode 100644 index 0000000000..a2a688da65 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FlakyTestsPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_page": (str, none_type), + } + attribute_map = { + "next_page": "next_page", + } + + def __init__(self_, next_page: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Pagination metadata for flaky tests. + + :param next_page: Cursor for the next page of results. + :type next_page: str, none_type, optional + """ + if next_page is not unset: + kwargs["next_page"] = next_page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_tests_search_filter.py b/datadog_api_client/v2/model/flaky_tests_search_filter.py new file mode 100644 index 0000000000..f8ecd8d7f7 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_search_filter.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FlakyTestsSearchFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_history": (bool,), + "query": (str,), + } + attribute_map = { + "include_history": "include_history", + "query": "query", + } + + def __init__(self_, include_history: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Search filter settings. + + :param include_history: Whether to include the status change history for each flaky test in the response. + When set to true, each test will include a ``history`` array with chronological status changes. + Defaults to false. + :type include_history: bool, optional + + :param query: Search query following log syntax used to filter flaky tests, same as on Flaky Tests Management UI. The supported search keys are: + + * ``flaky_test_state`` + * ``flaky_test_category`` + * ``@test.name`` + * ``@test.suite`` + * ``@test.module`` + * ``@test.service`` + * ``@git.repository.id_v2`` + * ``@git.branch`` + * ``@test.codeowners`` + * ``env`` + * ``fingerprint_fqn`` + + Use ``fingerprint_fqn`` to filter by a test's stable Fingerprint FQN (the same value as the test's ``id`` ). + :type query: str, optional + """ + if include_history is not unset: + kwargs["include_history"] = include_history + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_tests_search_page_options.py b/datadog_api_client/v2/model/flaky_tests_search_page_options.py new file mode 100644 index 0000000000..acd9e00bff --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_search_page_options.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FlakyTestsSearchPageOptions(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination attributes for listing flaky tests. + + :param cursor: List following results with a cursor provided in the previous request. + :type cursor: str, optional + + :param limit: Maximum number of flaky tests in the response. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_tests_search_request.py b/datadog_api_client/v2/model/flaky_tests_search_request.py new file mode 100644 index 0000000000..66f82e5fe0 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_search_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flaky_tests_search_request_data import FlakyTestsSearchRequestData + +class FlakyTestsSearchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flaky_tests_search_request_data import FlakyTestsSearchRequestData + return { + "data": (FlakyTestsSearchRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[FlakyTestsSearchRequestData, UnsetType]=unset, **kwargs): + """ + The request for a flaky tests search. + + :param data: The JSON:API data for flaky tests search request. + :type data: FlakyTestsSearchRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_tests_search_request_attributes.py b/datadog_api_client/v2/model/flaky_tests_search_request_attributes.py new file mode 100644 index 0000000000..e5774e79c0 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_search_request_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flaky_tests_search_filter import FlakyTestsSearchFilter + from datadog_api_client.v2.model.flaky_tests_search_page_options import FlakyTestsSearchPageOptions + from datadog_api_client.v2.model.flaky_tests_search_sort import FlakyTestsSearchSort + +class FlakyTestsSearchRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flaky_tests_search_filter import FlakyTestsSearchFilter + from datadog_api_client.v2.model.flaky_tests_search_page_options import FlakyTestsSearchPageOptions + from datadog_api_client.v2.model.flaky_tests_search_sort import FlakyTestsSearchSort + return { + "filter": (FlakyTestsSearchFilter,), + "page": (FlakyTestsSearchPageOptions,), + "sort": (FlakyTestsSearchSort,), + } + attribute_map = { + "filter": "filter", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[FlakyTestsSearchFilter, UnsetType]=unset, page: Union[FlakyTestsSearchPageOptions, UnsetType]=unset, sort: Union[FlakyTestsSearchSort, UnsetType]=unset, **kwargs): + """ + Attributes for the flaky tests search request. + + :param filter: Search filter settings. + :type filter: FlakyTestsSearchFilter, optional + + :param page: Pagination attributes for listing flaky tests. + :type page: FlakyTestsSearchPageOptions, optional + + :param sort: Parameter for sorting flaky test results. The default sort is by ascending Fully Qualified Name (FQN). The FQN is the concatenation of the test module, suite, and name. + :type sort: FlakyTestsSearchSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_tests_search_request_data.py b/datadog_api_client/v2/model/flaky_tests_search_request_data.py new file mode 100644 index 0000000000..4d72e88def --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_search_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flaky_tests_search_request_attributes import FlakyTestsSearchRequestAttributes + from datadog_api_client.v2.model.flaky_tests_search_request_data_type import FlakyTestsSearchRequestDataType + +class FlakyTestsSearchRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flaky_tests_search_request_attributes import FlakyTestsSearchRequestAttributes + from datadog_api_client.v2.model.flaky_tests_search_request_data_type import FlakyTestsSearchRequestDataType + return { + "attributes": (FlakyTestsSearchRequestAttributes,), + "type": (FlakyTestsSearchRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[FlakyTestsSearchRequestAttributes, UnsetType]=unset, type: Union[FlakyTestsSearchRequestDataType, UnsetType]=unset, **kwargs): + """ + The JSON:API data for flaky tests search request. + + :param attributes: Attributes for the flaky tests search request. + :type attributes: FlakyTestsSearchRequestAttributes, optional + + :param type: The definition of ``FlakyTestsSearchRequestDataType`` object. + :type type: FlakyTestsSearchRequestDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_tests_search_request_data_type.py b/datadog_api_client/v2/model/flaky_tests_search_request_data_type.py new file mode 100644 index 0000000000..6e7b29a499 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_search_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FlakyTestsSearchRequestDataType(ModelSimple): + """ + The definition of `FlakyTestsSearchRequestDataType` object. + + :param value: If omitted defaults to "search_flaky_tests_request". Must be one of ["search_flaky_tests_request"]. + :type value: str + """ + + allowed_values = { + "search_flaky_tests_request", + } + SEARCH_FLAKY_TESTS_REQUEST: ClassVar["FlakyTestsSearchRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FlakyTestsSearchRequestDataType.SEARCH_FLAKY_TESTS_REQUEST = FlakyTestsSearchRequestDataType("search_flaky_tests_request") diff --git a/datadog_api_client/v2/model/flaky_tests_search_response.py b/datadog_api_client/v2/model/flaky_tests_search_response.py new file mode 100644 index 0000000000..ecff99c786 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_search_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flaky_test import FlakyTest + from datadog_api_client.v2.model.flaky_tests_search_response_meta import FlakyTestsSearchResponseMeta + +class FlakyTestsSearchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flaky_test import FlakyTest + from datadog_api_client.v2.model.flaky_tests_search_response_meta import FlakyTestsSearchResponseMeta + return { + "data": ([FlakyTest],), + "meta": (FlakyTestsSearchResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[FlakyTest], UnsetType]=unset, meta: Union[FlakyTestsSearchResponseMeta, UnsetType]=unset, **kwargs): + """ + Response object with flaky tests matching the search request. + + :param data: Array of flaky tests matching the request. + :type data: [FlakyTest], optional + + :param meta: Metadata for the flaky tests search response. + :type meta: FlakyTestsSearchResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_tests_search_response_meta.py b/datadog_api_client/v2/model/flaky_tests_search_response_meta.py new file mode 100644 index 0000000000..c12c1e0652 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_search_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flaky_tests_pagination import FlakyTestsPagination + +class FlakyTestsSearchResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flaky_tests_pagination import FlakyTestsPagination + return { + "pagination": (FlakyTestsPagination,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[FlakyTestsPagination, UnsetType]=unset, **kwargs): + """ + Metadata for the flaky tests search response. + + :param pagination: Pagination metadata for flaky tests. + :type pagination: FlakyTestsPagination, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flaky_tests_search_sort.py b/datadog_api_client/v2/model/flaky_tests_search_sort.py new file mode 100644 index 0000000000..8aae19e610 --- /dev/null +++ b/datadog_api_client/v2/model/flaky_tests_search_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FlakyTestsSearchSort(ModelSimple): + """ + Parameter for sorting flaky test results. The default sort is by ascending Fully Qualified Name (FQN). The FQN is the concatenation of the test module, suite, and name. + + :param value: Must be one of ["fqn", "-fqn", "first_flaked", "-first_flaked", "last_flaked", "-last_flaked", "failure_rate", "-failure_rate", "pipelines_failed", "-pipelines_failed", "pipelines_duration_lost", "-pipelines_duration_lost"]. + :type value: str + """ + + allowed_values = { + "fqn", + "-fqn", + "first_flaked", + "-first_flaked", + "last_flaked", + "-last_flaked", + "failure_rate", + "-failure_rate", + "pipelines_failed", + "-pipelines_failed", + "pipelines_duration_lost", + "-pipelines_duration_lost", + } + FQN_ASCENDING: ClassVar["FlakyTestsSearchSort"] + FQN_DESCENDING: ClassVar["FlakyTestsSearchSort"] + FIRST_FLAKED_ASCENDING: ClassVar["FlakyTestsSearchSort"] + FIRST_FLAKED_DESCENDING: ClassVar["FlakyTestsSearchSort"] + LAST_FLAKED_ASCENDING: ClassVar["FlakyTestsSearchSort"] + LAST_FLAKED_DESCENDING: ClassVar["FlakyTestsSearchSort"] + FAILURE_RATE_ASCENDING: ClassVar["FlakyTestsSearchSort"] + FAILURE_RATE_DESCENDING: ClassVar["FlakyTestsSearchSort"] + PIPELINES_FAILED_ASCENDING: ClassVar["FlakyTestsSearchSort"] + PIPELINES_FAILED_DESCENDING: ClassVar["FlakyTestsSearchSort"] + PIPELINES_DURATION_LOST_ASCENDING: ClassVar["FlakyTestsSearchSort"] + PIPELINES_DURATION_LOST_DESCENDING: ClassVar["FlakyTestsSearchSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FlakyTestsSearchSort.FQN_ASCENDING = FlakyTestsSearchSort("fqn") +FlakyTestsSearchSort.FQN_DESCENDING = FlakyTestsSearchSort("-fqn") +FlakyTestsSearchSort.FIRST_FLAKED_ASCENDING = FlakyTestsSearchSort("first_flaked") +FlakyTestsSearchSort.FIRST_FLAKED_DESCENDING = FlakyTestsSearchSort("-first_flaked") +FlakyTestsSearchSort.LAST_FLAKED_ASCENDING = FlakyTestsSearchSort("last_flaked") +FlakyTestsSearchSort.LAST_FLAKED_DESCENDING = FlakyTestsSearchSort("-last_flaked") +FlakyTestsSearchSort.FAILURE_RATE_ASCENDING = FlakyTestsSearchSort("failure_rate") +FlakyTestsSearchSort.FAILURE_RATE_DESCENDING = FlakyTestsSearchSort("-failure_rate") +FlakyTestsSearchSort.PIPELINES_FAILED_ASCENDING = FlakyTestsSearchSort("pipelines_failed") +FlakyTestsSearchSort.PIPELINES_FAILED_DESCENDING = FlakyTestsSearchSort("-pipelines_failed") +FlakyTestsSearchSort.PIPELINES_DURATION_LOST_ASCENDING = FlakyTestsSearchSort("pipelines_duration_lost") +FlakyTestsSearchSort.PIPELINES_DURATION_LOST_DESCENDING = FlakyTestsSearchSort("-pipelines_duration_lost") diff --git a/datadog_api_client/v2/model/fleet_agent_attributes_tags_items.py b/datadog_api_client/v2/model/fleet_agent_attributes_tags_items.py new file mode 100644 index 0000000000..0211b4fb1d --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_attributes_tags_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetAgentAttributesTagsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + A key-value pair representing a tag associated with a Datadog Agent. + + :param key: The tag key. + :type key: str, optional + + :param value: The tag value. + :type value: str, optional + """ + if key is not unset: + kwargs["key"] = key + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_agent_configuration_files_v2.py b/datadog_api_client/v2/model/fleet_agent_configuration_files_v2.py new file mode 100644 index 0000000000..d471f916c4 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_configuration_files_v2.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_configuration_layer import FleetConfigurationLayer + from datadog_api_client.v2.model.fleet_otel_collector_configuration_v2 import FleetOtelCollectorConfigurationV2 + +class FleetAgentConfigurationFilesV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_configuration_layer import FleetConfigurationLayer + from datadog_api_client.v2.model.fleet_otel_collector_configuration_v2 import FleetOtelCollectorConfigurationV2 + return { + "agent_configuration": (FleetConfigurationLayer,), + "application_monitoring_configuration": (FleetConfigurationLayer,), + "otel_collectors_configuration": ([FleetOtelCollectorConfigurationV2],), + "security_agent_configuration": (FleetConfigurationLayer,), + "system_probe_configuration": (FleetConfigurationLayer,), + } + attribute_map = { + "agent_configuration": "agent_configuration", + "application_monitoring_configuration": "application_monitoring_configuration", + "otel_collectors_configuration": "otel_collectors_configuration", + "security_agent_configuration": "security_agent_configuration", + "system_probe_configuration": "system_probe_configuration", + } + + def __init__(self_, agent_configuration: Union[FleetConfigurationLayer, UnsetType]=unset, application_monitoring_configuration: Union[FleetConfigurationLayer, UnsetType]=unset, otel_collectors_configuration: Union[List[FleetOtelCollectorConfigurationV2], UnsetType]=unset, security_agent_configuration: Union[FleetConfigurationLayer, UnsetType]=unset, system_probe_configuration: Union[FleetConfigurationLayer, UnsetType]=unset, **kwargs): + """ + Configuration details for an agent, organized by configuration layer. + + :param agent_configuration: Configuration information organized by layers. + :type agent_configuration: FleetConfigurationLayer, optional + + :param application_monitoring_configuration: Configuration information organized by layers. + :type application_monitoring_configuration: FleetConfigurationLayer, optional + + :param otel_collectors_configuration: Configuration for OpenTelemetry collectors associated with the agent. Present only when the agent has associated OpenTelemetry collectors. + :type otel_collectors_configuration: [FleetOtelCollectorConfigurationV2], optional + + :param security_agent_configuration: Configuration information organized by layers. + :type security_agent_configuration: FleetConfigurationLayer, optional + + :param system_probe_configuration: Configuration information organized by layers. + :type system_probe_configuration: FleetConfigurationLayer, optional + """ + if agent_configuration is not unset: + kwargs["agent_configuration"] = agent_configuration + if application_monitoring_configuration is not unset: + kwargs["application_monitoring_configuration"] = application_monitoring_configuration + if otel_collectors_configuration is not unset: + kwargs["otel_collectors_configuration"] = otel_collectors_configuration + if security_agent_configuration is not unset: + kwargs["security_agent_configuration"] = security_agent_configuration + if system_probe_configuration is not unset: + kwargs["system_probe_configuration"] = system_probe_configuration + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_agent_detail_v2.py b/datadog_api_client/v2/model/fleet_agent_detail_v2.py new file mode 100644 index 0000000000..9817ef2a08 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_detail_v2.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agent_detail_v2_attributes import FleetAgentDetailV2Attributes + from datadog_api_client.v2.model.fleet_agent_v2_resource_type import FleetAgentV2ResourceType + +class FleetAgentDetailV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agent_detail_v2_attributes import FleetAgentDetailV2Attributes + from datadog_api_client.v2.model.fleet_agent_v2_resource_type import FleetAgentV2ResourceType + return { + "attributes": (FleetAgentDetailV2Attributes,), + "id": (str,), + "type": (FleetAgentV2ResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetAgentDetailV2Attributes, id: str, type: FleetAgentV2ResourceType, **kwargs): + """ + Detailed information about a specific Datadog Agent. + + :param attributes: Attributes for the v2 agent detail response. + :type attributes: FleetAgentDetailV2Attributes + + :param id: The unique agent key identifier. + :type id: str + + :param type: The type of the agent resource. + :type type: FleetAgentV2ResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_agent_detail_v2_attributes.py b/datadog_api_client/v2/model/fleet_agent_detail_v2_attributes.py new file mode 100644 index 0000000000..174ac7234e --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_detail_v2_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agent_info_details_v2 import FleetAgentInfoDetailsV2 + from datadog_api_client.v2.model.fleet_agent_configuration_files_v2 import FleetAgentConfigurationFilesV2 + from datadog_api_client.v2.model.fleet_integrations_by_status_v2 import FleetIntegrationsByStatusV2 + +class FleetAgentDetailV2Attributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agent_info_details_v2 import FleetAgentInfoDetailsV2 + from datadog_api_client.v2.model.fleet_agent_configuration_files_v2 import FleetAgentConfigurationFilesV2 + from datadog_api_client.v2.model.fleet_integrations_by_status_v2 import FleetIntegrationsByStatusV2 + return { + "agent_infos": (FleetAgentInfoDetailsV2,), + "configuration_files": (FleetAgentConfigurationFilesV2,), + "integrations": (FleetIntegrationsByStatusV2,), + } + attribute_map = { + "agent_infos": "agent_infos", + "configuration_files": "configuration_files", + "integrations": "integrations", + } + + def __init__(self_, agent_infos: FleetAgentInfoDetailsV2, configuration_files: Union[FleetAgentConfigurationFilesV2, UnsetType]=unset, integrations: Union[FleetIntegrationsByStatusV2, UnsetType]=unset, **kwargs): + """ + Attributes for the v2 agent detail response. + + :param agent_infos: Detailed information about a Datadog Agent. + :type agent_infos: FleetAgentInfoDetailsV2 + + :param configuration_files: Configuration details for an agent, organized by configuration layer. + :type configuration_files: FleetAgentConfigurationFilesV2, optional + + :param integrations: Integrations organized by their status. + :type integrations: FleetIntegrationsByStatusV2, optional + """ + if configuration_files is not unset: + kwargs["configuration_files"] = configuration_files + if integrations is not unset: + kwargs["integrations"] = integrations + super().__init__(kwargs) + + + self_.agent_infos = agent_infos diff --git a/datadog_api_client/v2/model/fleet_agent_detail_v2_response.py b/datadog_api_client/v2/model/fleet_agent_detail_v2_response.py new file mode 100644 index 0000000000..b7a5702fac --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_detail_v2_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agent_detail_v2 import FleetAgentDetailV2 + +class FleetAgentDetailV2Response(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agent_detail_v2 import FleetAgentDetailV2 + return { + "data": (FleetAgentDetailV2,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetAgentDetailV2, **kwargs): + """ + Response containing detailed information about a specific Datadog Agent. + + :param data: Detailed information about a specific Datadog Agent. + :type data: FleetAgentDetailV2 + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_agent_info_details_v2.py b/datadog_api_client/v2/model/fleet_agent_info_details_v2.py new file mode 100644 index 0000000000..0e915f3135 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_info_details_v2.py @@ -0,0 +1,294 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_otel_collector import FleetOtelCollector + +class FleetAgentInfoDetailsV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_otel_collector import FleetOtelCollector + return { + "active_ha_agent": (str,), + "agent_version": (str,), + "api_key_name": (str,), + "api_key_uuid": (str,), + "cloud_provider": (str,), + "cluster_name": (str,), + "config_id": (str,), + "datadog_agent_key": (str,), + "datadog_data_center": (str,), + "ecs_fargate_cluster_name": (str,), + "ecs_fargate_task_arn": (str,), + "enabled_products": ([str],), + "env": ([str],), + "first_seen_at": (int,), + "ha_agent_hosts": ([str],), + "ha_agent_state": (str,), + "hostname": (str,), + "hostname_aliases": ([str],), + "install_method_installer_version": (str,), + "install_method_tool": (str,), + "ip_addresses": ([str],), + "is_single_step_instrumentation_enabled": (bool,), + "last_restart_at": (int,), + "os": (str,), + "os_version": (str,), + "otel_collectors": ([FleetOtelCollector],), + "pod_name": (str,), + "preferred_ha_active_agent": (str,), + "python_version": (str,), + "region": ([str],), + "remote_agent_management": (str,), + "remote_config_status": (str,), + "services": ([str],), + "support_agent_upgrade": (bool,), + "tags": ([str],), + "team": (str,), + } + attribute_map = { + "active_ha_agent": "active_ha_agent", + "agent_version": "agent_version", + "api_key_name": "api_key_name", + "api_key_uuid": "api_key_uuid", + "cloud_provider": "cloud_provider", + "cluster_name": "cluster_name", + "config_id": "config_id", + "datadog_agent_key": "datadog_agent_key", + "datadog_data_center": "datadog_data_center", + "ecs_fargate_cluster_name": "ecs_fargate_cluster_name", + "ecs_fargate_task_arn": "ecs_fargate_task_arn", + "enabled_products": "enabled_products", + "env": "env", + "first_seen_at": "first_seen_at", + "ha_agent_hosts": "ha_agent_hosts", + "ha_agent_state": "ha_agent_state", + "hostname": "hostname", + "hostname_aliases": "hostname_aliases", + "install_method_installer_version": "install_method_installer_version", + "install_method_tool": "install_method_tool", + "ip_addresses": "ip_addresses", + "is_single_step_instrumentation_enabled": "is_single_step_instrumentation_enabled", + "last_restart_at": "last_restart_at", + "os": "os", + "os_version": "os_version", + "otel_collectors": "otel_collectors", + "pod_name": "pod_name", + "preferred_ha_active_agent": "preferred_ha_active_agent", + "python_version": "python_version", + "region": "region", + "remote_agent_management": "remote_agent_management", + "remote_config_status": "remote_config_status", + "services": "services", + "support_agent_upgrade": "support_agent_upgrade", + "tags": "tags", + "team": "team", + } + + def __init__(self_, active_ha_agent: Union[str, UnsetType]=unset, agent_version: Union[str, UnsetType]=unset, api_key_name: Union[str, UnsetType]=unset, api_key_uuid: Union[str, UnsetType]=unset, cloud_provider: Union[str, UnsetType]=unset, cluster_name: Union[str, UnsetType]=unset, config_id: Union[str, UnsetType]=unset, datadog_agent_key: Union[str, UnsetType]=unset, datadog_data_center: Union[str, UnsetType]=unset, ecs_fargate_cluster_name: Union[str, UnsetType]=unset, ecs_fargate_task_arn: Union[str, UnsetType]=unset, enabled_products: Union[List[str], UnsetType]=unset, env: Union[List[str], UnsetType]=unset, first_seen_at: Union[int, UnsetType]=unset, ha_agent_hosts: Union[List[str], UnsetType]=unset, ha_agent_state: Union[str, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, hostname_aliases: Union[List[str], UnsetType]=unset, install_method_installer_version: Union[str, UnsetType]=unset, install_method_tool: Union[str, UnsetType]=unset, ip_addresses: Union[List[str], UnsetType]=unset, is_single_step_instrumentation_enabled: Union[bool, UnsetType]=unset, last_restart_at: Union[int, UnsetType]=unset, os: Union[str, UnsetType]=unset, os_version: Union[str, UnsetType]=unset, otel_collectors: Union[List[FleetOtelCollector], UnsetType]=unset, pod_name: Union[str, UnsetType]=unset, preferred_ha_active_agent: Union[str, UnsetType]=unset, python_version: Union[str, UnsetType]=unset, region: Union[List[str], UnsetType]=unset, remote_agent_management: Union[str, UnsetType]=unset, remote_config_status: Union[str, UnsetType]=unset, services: Union[List[str], UnsetType]=unset, support_agent_upgrade: Union[bool, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, team: Union[str, UnsetType]=unset, **kwargs): + """ + Detailed information about a Datadog Agent. + + :param active_ha_agent: The currently active agent in the high-availability group. + :type active_ha_agent: str, optional + + :param agent_version: The Datadog Agent version. + :type agent_version: str, optional + + :param api_key_name: The API key name (if available and not redacted). + :type api_key_name: str, optional + + :param api_key_uuid: The API key UUID. + :type api_key_uuid: str, optional + + :param cloud_provider: The cloud provider where the agent is running. + :type cloud_provider: str, optional + + :param cluster_name: Kubernetes cluster name (if applicable). + :type cluster_name: str, optional + + :param config_id: The configuration identifier applied to the agent. + :type config_id: str, optional + + :param datadog_agent_key: The unique agent key identifier. + :type datadog_agent_key: str, optional + + :param datadog_data_center: The Datadog data center the agent reports to. + :type datadog_data_center: str, optional + + :param ecs_fargate_cluster_name: The ECS Fargate cluster name, if the agent runs in an ECS Fargate environment. + :type ecs_fargate_cluster_name: str, optional + + :param ecs_fargate_task_arn: The ECS Fargate task ARN, if the agent runs in an ECS Fargate environment. + :type ecs_fargate_task_arn: str, optional + + :param enabled_products: Datadog products enabled on the agent. + :type enabled_products: [str], optional + + :param env: Environments the agent is reporting from. + :type env: [str], optional + + :param first_seen_at: Timestamp when the agent was first seen. + :type first_seen_at: int, optional + + :param ha_agent_hosts: Hosts participating in the agent's high-availability group. + :type ha_agent_hosts: [str], optional + + :param ha_agent_state: The high-availability state of the agent. + :type ha_agent_state: str, optional + + :param hostname: The hostname of the agent. + :type hostname: str, optional + + :param hostname_aliases: Alternative hostname list for the agent. + :type hostname_aliases: [str], optional + + :param install_method_installer_version: The version of the installer used. + :type install_method_installer_version: str, optional + + :param install_method_tool: The tool used to install the agent. + :type install_method_tool: str, optional + + :param ip_addresses: IP addresses of the agent. + :type ip_addresses: [str], optional + + :param is_single_step_instrumentation_enabled: Whether single-step instrumentation is enabled. + :type is_single_step_instrumentation_enabled: bool, optional + + :param last_restart_at: Timestamp of the last agent restart. + :type last_restart_at: int, optional + + :param os: The operating system. + :type os: str, optional + + :param os_version: The operating system version. + :type os_version: str, optional + + :param otel_collectors: OpenTelemetry collectors associated with the agent (if applicable). + :type otel_collectors: [FleetOtelCollector], optional + + :param pod_name: Kubernetes pod name (if applicable). + :type pod_name: str, optional + + :param preferred_ha_active_agent: The preferred active agent in the high-availability group. + :type preferred_ha_active_agent: str, optional + + :param python_version: The Python version used by the agent. + :type python_version: str, optional + + :param region: Regions where the agent is running. + :type region: [str], optional + + :param remote_agent_management: Remote agent management status. + :type remote_agent_management: str, optional + + :param remote_config_status: Remote configuration status. + :type remote_config_status: str, optional + + :param services: Services running on the agent. + :type services: [str], optional + + :param support_agent_upgrade: Whether the agent supports remote agent upgrade. + :type support_agent_upgrade: bool, optional + + :param tags: Tags associated with the agent. + :type tags: [str], optional + + :param team: Team associated with the agent. + :type team: str, optional + """ + if active_ha_agent is not unset: + kwargs["active_ha_agent"] = active_ha_agent + if agent_version is not unset: + kwargs["agent_version"] = agent_version + if api_key_name is not unset: + kwargs["api_key_name"] = api_key_name + if api_key_uuid is not unset: + kwargs["api_key_uuid"] = api_key_uuid + if cloud_provider is not unset: + kwargs["cloud_provider"] = cloud_provider + if cluster_name is not unset: + kwargs["cluster_name"] = cluster_name + if config_id is not unset: + kwargs["config_id"] = config_id + if datadog_agent_key is not unset: + kwargs["datadog_agent_key"] = datadog_agent_key + if datadog_data_center is not unset: + kwargs["datadog_data_center"] = datadog_data_center + if ecs_fargate_cluster_name is not unset: + kwargs["ecs_fargate_cluster_name"] = ecs_fargate_cluster_name + if ecs_fargate_task_arn is not unset: + kwargs["ecs_fargate_task_arn"] = ecs_fargate_task_arn + if enabled_products is not unset: + kwargs["enabled_products"] = enabled_products + if env is not unset: + kwargs["env"] = env + if first_seen_at is not unset: + kwargs["first_seen_at"] = first_seen_at + if ha_agent_hosts is not unset: + kwargs["ha_agent_hosts"] = ha_agent_hosts + if ha_agent_state is not unset: + kwargs["ha_agent_state"] = ha_agent_state + if hostname is not unset: + kwargs["hostname"] = hostname + if hostname_aliases is not unset: + kwargs["hostname_aliases"] = hostname_aliases + if install_method_installer_version is not unset: + kwargs["install_method_installer_version"] = install_method_installer_version + if install_method_tool is not unset: + kwargs["install_method_tool"] = install_method_tool + if ip_addresses is not unset: + kwargs["ip_addresses"] = ip_addresses + if is_single_step_instrumentation_enabled is not unset: + kwargs["is_single_step_instrumentation_enabled"] = is_single_step_instrumentation_enabled + if last_restart_at is not unset: + kwargs["last_restart_at"] = last_restart_at + if os is not unset: + kwargs["os"] = os + if os_version is not unset: + kwargs["os_version"] = os_version + if otel_collectors is not unset: + kwargs["otel_collectors"] = otel_collectors + if pod_name is not unset: + kwargs["pod_name"] = pod_name + if preferred_ha_active_agent is not unset: + kwargs["preferred_ha_active_agent"] = preferred_ha_active_agent + if python_version is not unset: + kwargs["python_version"] = python_version + if region is not unset: + kwargs["region"] = region + if remote_agent_management is not unset: + kwargs["remote_agent_management"] = remote_agent_management + if remote_config_status is not unset: + kwargs["remote_config_status"] = remote_config_status + if services is not unset: + kwargs["services"] = services + if support_agent_upgrade is not unset: + kwargs["support_agent_upgrade"] = support_agent_upgrade + if tags is not unset: + kwargs["tags"] = tags + if team is not unset: + kwargs["team"] = team + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_agent_v2.py b/datadog_api_client/v2/model/fleet_agent_v2.py new file mode 100644 index 0000000000..07f759debc --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_v2.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agent_v2_attributes import FleetAgentV2Attributes + from datadog_api_client.v2.model.fleet_agent_v2_resource_type import FleetAgentV2ResourceType + +class FleetAgentV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agent_v2_attributes import FleetAgentV2Attributes + from datadog_api_client.v2.model.fleet_agent_v2_resource_type import FleetAgentV2ResourceType + return { + "attributes": (FleetAgentV2Attributes,), + "id": (str,), + "type": (FleetAgentV2ResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetAgentV2Attributes, id: str, type: FleetAgentV2ResourceType, **kwargs): + """ + A Datadog Agent resource in the v2 list response. + + :param attributes: Attributes of a Datadog Agent in the v2 list response. + :type attributes: FleetAgentV2Attributes + + :param id: The unique agent key identifier. + :type id: str + + :param type: The type of the agent resource. + :type type: FleetAgentV2ResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_agent_v2_attributes.py b/datadog_api_client/v2/model/fleet_agent_v2_attributes.py new file mode 100644 index 0000000000..b7e627d51b --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_v2_attributes.py @@ -0,0 +1,254 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agent_v2_attributes_instrumentation_status import FleetAgentV2AttributesInstrumentationStatus + from datadog_api_client.v2.model.fleet_agent_attributes_tags_items import FleetAgentAttributesTagsItems + +class FleetAgentV2Attributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agent_v2_attributes_instrumentation_status import FleetAgentV2AttributesInstrumentationStatus + from datadog_api_client.v2.model.fleet_agent_attributes_tags_items import FleetAgentAttributesTagsItems + return { + "agent_version": (str,), + "api_key_name": (str,), + "api_key_uuid": (str,), + "cloud_provider": (str,), + "cluster_name": (str,), + "datadog_data_center": (str,), + "ecs_fargate_cluster_name": (str,), + "ecs_fargate_task_arn": (str,), + "enabled_products": ([str],), + "env": ([str],), + "first_seen_at": (int,), + "fleet_policies": ([str],), + "hostname": (str,), + "instrumentation_error_counts": (int,), + "instrumentation_status": (FleetAgentV2AttributesInstrumentationStatus,), + "integrations": ([str],), + "ip_addresses": ([str],), + "is_single_step_instrumentation_enabled": (bool,), + "last_restart_at": (int,), + "os": (str,), + "otel_collector_deployment_types": ([str],), + "otel_collector_distributions": ([str],), + "otel_collector_versions": ([str],), + "otel_resource_attributes": ([str],), + "pod_name": (str,), + "remote_agent_management": (str,), + "remote_config_status": (str,), + "services": ([str],), + "tags": ([FleetAgentAttributesTagsItems],), + "team": (str,), + } + attribute_map = { + "agent_version": "agent_version", + "api_key_name": "api_key_name", + "api_key_uuid": "api_key_uuid", + "cloud_provider": "cloud_provider", + "cluster_name": "cluster_name", + "datadog_data_center": "datadog_data_center", + "ecs_fargate_cluster_name": "ecs_fargate_cluster_name", + "ecs_fargate_task_arn": "ecs_fargate_task_arn", + "enabled_products": "enabled_products", + "env": "env", + "first_seen_at": "first_seen_at", + "fleet_policies": "fleet_policies", + "hostname": "hostname", + "instrumentation_error_counts": "instrumentation_error_counts", + "instrumentation_status": "instrumentation_status", + "integrations": "integrations", + "ip_addresses": "ip_addresses", + "is_single_step_instrumentation_enabled": "is_single_step_instrumentation_enabled", + "last_restart_at": "last_restart_at", + "os": "os", + "otel_collector_deployment_types": "otel_collector_deployment_types", + "otel_collector_distributions": "otel_collector_distributions", + "otel_collector_versions": "otel_collector_versions", + "otel_resource_attributes": "otel_resource_attributes", + "pod_name": "pod_name", + "remote_agent_management": "remote_agent_management", + "remote_config_status": "remote_config_status", + "services": "services", + "tags": "tags", + "team": "team", + } + + def __init__(self_, agent_version: Union[str, UnsetType]=unset, api_key_name: Union[str, UnsetType]=unset, api_key_uuid: Union[str, UnsetType]=unset, cloud_provider: Union[str, UnsetType]=unset, cluster_name: Union[str, UnsetType]=unset, datadog_data_center: Union[str, UnsetType]=unset, ecs_fargate_cluster_name: Union[str, UnsetType]=unset, ecs_fargate_task_arn: Union[str, UnsetType]=unset, enabled_products: Union[List[str], UnsetType]=unset, env: Union[List[str], UnsetType]=unset, first_seen_at: Union[int, UnsetType]=unset, fleet_policies: Union[List[str], UnsetType]=unset, hostname: Union[str, UnsetType]=unset, instrumentation_error_counts: Union[int, UnsetType]=unset, instrumentation_status: Union[FleetAgentV2AttributesInstrumentationStatus, UnsetType]=unset, integrations: Union[List[str], UnsetType]=unset, ip_addresses: Union[List[str], UnsetType]=unset, is_single_step_instrumentation_enabled: Union[bool, UnsetType]=unset, last_restart_at: Union[int, UnsetType]=unset, os: Union[str, UnsetType]=unset, otel_collector_deployment_types: Union[List[str], UnsetType]=unset, otel_collector_distributions: Union[List[str], UnsetType]=unset, otel_collector_versions: Union[List[str], UnsetType]=unset, otel_resource_attributes: Union[List[str], UnsetType]=unset, pod_name: Union[str, UnsetType]=unset, remote_agent_management: Union[str, UnsetType]=unset, remote_config_status: Union[str, UnsetType]=unset, services: Union[List[str], UnsetType]=unset, tags: Union[List[FleetAgentAttributesTagsItems], UnsetType]=unset, team: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a Datadog Agent in the v2 list response. + + :param agent_version: The Datadog Agent version. + :type agent_version: str, optional + + :param api_key_name: The name of the API key used by the agent, if available and not redacted. + :type api_key_name: str, optional + + :param api_key_uuid: The UUID of the API key used by the agent. + :type api_key_uuid: str, optional + + :param cloud_provider: The cloud provider where the agent is running. + :type cloud_provider: str, optional + + :param cluster_name: The Kubernetes cluster name, if the agent runs in a cluster. + :type cluster_name: str, optional + + :param datadog_data_center: The Datadog data center the agent reports to. + :type datadog_data_center: str, optional + + :param ecs_fargate_cluster_name: The ECS Fargate cluster name, if the agent runs in an ECS Fargate environment. + :type ecs_fargate_cluster_name: str, optional + + :param ecs_fargate_task_arn: The ECS Fargate task ARN, if the agent runs in an ECS Fargate environment. + :type ecs_fargate_task_arn: str, optional + + :param enabled_products: Datadog products enabled on the agent. + :type enabled_products: [str], optional + + :param env: Environments the agent is reporting from. + :type env: [str], optional + + :param first_seen_at: Unix timestamp when the agent was first seen. + :type first_seen_at: int, optional + + :param fleet_policies: Identifiers of fleet policies applied to the agent. + :type fleet_policies: [str], optional + + :param hostname: The hostname of the agent. + :type hostname: str, optional + + :param instrumentation_error_counts: Number of instrumentation errors on the agent. Absent from the response when the count is zero. + :type instrumentation_error_counts: int, optional + + :param instrumentation_status: The single-step instrumentation status of the Agent. + :type instrumentation_status: FleetAgentV2AttributesInstrumentationStatus, optional + + :param integrations: Names of integrations configured on the agent. + :type integrations: [str], optional + + :param ip_addresses: IP addresses of the agent host. + :type ip_addresses: [str], optional + + :param is_single_step_instrumentation_enabled: Whether single-step instrumentation is enabled on the agent. + :type is_single_step_instrumentation_enabled: bool, optional + + :param last_restart_at: Unix timestamp of the last agent restart. + :type last_restart_at: int, optional + + :param os: The operating system of the host. + :type os: str, optional + + :param otel_collector_deployment_types: OpenTelemetry collector deployment types associated with the agent. + :type otel_collector_deployment_types: [str], optional + + :param otel_collector_distributions: OpenTelemetry collector distributions associated with the agent. + :type otel_collector_distributions: [str], optional + + :param otel_collector_versions: All OpenTelemetry collector versions associated with the agent. + :type otel_collector_versions: [str], optional + + :param otel_resource_attributes: OpenTelemetry resource attributes reported by the agent. + :type otel_resource_attributes: [str], optional + + :param pod_name: The Kubernetes pod name, if the agent runs as a pod. + :type pod_name: str, optional + + :param remote_agent_management: The remote agent management status. + :type remote_agent_management: str, optional + + :param remote_config_status: The remote configuration connection status of the agent. + :type remote_config_status: str, optional + + :param services: Services running on the agent. + :type services: [str], optional + + :param tags: Tags associated with the agent. Returned as an empty array when the agent has no tags. + :type tags: [FleetAgentAttributesTagsItems], optional + + :param team: The team associated with the agent. + :type team: str, optional + """ + if agent_version is not unset: + kwargs["agent_version"] = agent_version + if api_key_name is not unset: + kwargs["api_key_name"] = api_key_name + if api_key_uuid is not unset: + kwargs["api_key_uuid"] = api_key_uuid + if cloud_provider is not unset: + kwargs["cloud_provider"] = cloud_provider + if cluster_name is not unset: + kwargs["cluster_name"] = cluster_name + if datadog_data_center is not unset: + kwargs["datadog_data_center"] = datadog_data_center + if ecs_fargate_cluster_name is not unset: + kwargs["ecs_fargate_cluster_name"] = ecs_fargate_cluster_name + if ecs_fargate_task_arn is not unset: + kwargs["ecs_fargate_task_arn"] = ecs_fargate_task_arn + if enabled_products is not unset: + kwargs["enabled_products"] = enabled_products + if env is not unset: + kwargs["env"] = env + if first_seen_at is not unset: + kwargs["first_seen_at"] = first_seen_at + if fleet_policies is not unset: + kwargs["fleet_policies"] = fleet_policies + if hostname is not unset: + kwargs["hostname"] = hostname + if instrumentation_error_counts is not unset: + kwargs["instrumentation_error_counts"] = instrumentation_error_counts + if instrumentation_status is not unset: + kwargs["instrumentation_status"] = instrumentation_status + if integrations is not unset: + kwargs["integrations"] = integrations + if ip_addresses is not unset: + kwargs["ip_addresses"] = ip_addresses + if is_single_step_instrumentation_enabled is not unset: + kwargs["is_single_step_instrumentation_enabled"] = is_single_step_instrumentation_enabled + if last_restart_at is not unset: + kwargs["last_restart_at"] = last_restart_at + if os is not unset: + kwargs["os"] = os + if otel_collector_deployment_types is not unset: + kwargs["otel_collector_deployment_types"] = otel_collector_deployment_types + if otel_collector_distributions is not unset: + kwargs["otel_collector_distributions"] = otel_collector_distributions + if otel_collector_versions is not unset: + kwargs["otel_collector_versions"] = otel_collector_versions + if otel_resource_attributes is not unset: + kwargs["otel_resource_attributes"] = otel_resource_attributes + if pod_name is not unset: + kwargs["pod_name"] = pod_name + if remote_agent_management is not unset: + kwargs["remote_agent_management"] = remote_agent_management + if remote_config_status is not unset: + kwargs["remote_config_status"] = remote_config_status + if services is not unset: + kwargs["services"] = services + if tags is not unset: + kwargs["tags"] = tags + if team is not unset: + kwargs["team"] = team + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_agent_v2_attributes_instrumentation_status.py b/datadog_api_client/v2/model/fleet_agent_v2_attributes_instrumentation_status.py new file mode 100644 index 0000000000..025e059d5d --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_v2_attributes_instrumentation_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FleetAgentV2AttributesInstrumentationStatus(ModelSimple): + """ + The single-step instrumentation status of the Agent. + + :param value: Must be one of ["success", "failure"]. + :type value: str + """ + + allowed_values = { + "success", + "failure", + } + SUCCESS: ClassVar["FleetAgentV2AttributesInstrumentationStatus"] + FAILURE: ClassVar["FleetAgentV2AttributesInstrumentationStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FleetAgentV2AttributesInstrumentationStatus.SUCCESS = FleetAgentV2AttributesInstrumentationStatus("success") +FleetAgentV2AttributesInstrumentationStatus.FAILURE = FleetAgentV2AttributesInstrumentationStatus("failure") diff --git a/datadog_api_client/v2/model/fleet_agent_v2_resource_type.py b/datadog_api_client/v2/model/fleet_agent_v2_resource_type.py new file mode 100644 index 0000000000..8c0bdc9f43 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_v2_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FleetAgentV2ResourceType(ModelSimple): + """ + The type of the agent resource. + + :param value: If omitted defaults to "agent". Must be one of ["agent"]. + :type value: str + """ + + allowed_values = { + "agent", + } + AGENT: ClassVar["FleetAgentV2ResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FleetAgentV2ResourceType.AGENT = FleetAgentV2ResourceType("agent") diff --git a/datadog_api_client/v2/model/fleet_agent_version_v2.py b/datadog_api_client/v2/model/fleet_agent_version_v2.py new file mode 100644 index 0000000000..9c76f6dadf --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_version_v2.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agent_version_v2_attributes import FleetAgentVersionV2Attributes + from datadog_api_client.v2.model.fleet_agent_version_v2_resource_type import FleetAgentVersionV2ResourceType + +class FleetAgentVersionV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agent_version_v2_attributes import FleetAgentVersionV2Attributes + from datadog_api_client.v2.model.fleet_agent_version_v2_resource_type import FleetAgentVersionV2ResourceType + return { + "attributes": (FleetAgentVersionV2Attributes,), + "id": (str,), + "type": (FleetAgentVersionV2ResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetAgentVersionV2Attributes, id: str, type: FleetAgentVersionV2ResourceType, **kwargs): + """ + An available Datadog Agent version resource. + + :param attributes: Attributes of an available Datadog Agent version. + :type attributes: FleetAgentVersionV2Attributes + + :param id: The agent version string used as the unique identifier. + :type id: str + + :param type: The type of the agent version resource. + :type type: FleetAgentVersionV2ResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_agent_version_v2_attributes.py b/datadog_api_client/v2/model/fleet_agent_version_v2_attributes.py new file mode 100644 index 0000000000..f323d4c9e7 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_version_v2_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetAgentVersionV2Attributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "version": (str,), + } + attribute_map = { + "version": "version", + } + + def __init__(self_, version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an available Datadog Agent version. + + :param version: The agent version string. + :type version: str, optional + """ + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_agent_version_v2_resource_type.py b/datadog_api_client/v2/model/fleet_agent_version_v2_resource_type.py new file mode 100644 index 0000000000..6087a027cf --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_version_v2_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FleetAgentVersionV2ResourceType(ModelSimple): + """ + The type of the agent version resource. + + :param value: If omitted defaults to "agent_version". Must be one of ["agent_version"]. + :type value: str + """ + + allowed_values = { + "agent_version", + } + AGENT_VERSION: ClassVar["FleetAgentVersionV2ResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FleetAgentVersionV2ResourceType.AGENT_VERSION = FleetAgentVersionV2ResourceType("agent_version") diff --git a/datadog_api_client/v2/model/fleet_agent_versions_v2_page.py b/datadog_api_client/v2/model/fleet_agent_versions_v2_page.py new file mode 100644 index 0000000000..db1d7ba551 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_versions_v2_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetAgentVersionsV2Page(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "total_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination details for the v2 list of agent versions. + + :param total_count: Total number of available agent versions. + :type total_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_agent_versions_v2_response.py b/datadog_api_client/v2/model/fleet_agent_versions_v2_response.py new file mode 100644 index 0000000000..af62113f27 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_versions_v2_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agent_version_v2 import FleetAgentVersionV2 + from datadog_api_client.v2.model.fleet_agent_versions_v2_response_meta import FleetAgentVersionsV2ResponseMeta + +class FleetAgentVersionsV2Response(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agent_version_v2 import FleetAgentVersionV2 + from datadog_api_client.v2.model.fleet_agent_versions_v2_response_meta import FleetAgentVersionsV2ResponseMeta + return { + "data": ([FleetAgentVersionV2],), + "meta": (FleetAgentVersionsV2ResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[FleetAgentVersionV2], meta: Union[FleetAgentVersionsV2ResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of available Datadog Agent versions. + + :param data: Array of available agent versions. + :type data: [FleetAgentVersionV2] + + :param meta: Metadata for the v2 list of agent versions. + :type meta: FleetAgentVersionsV2ResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_agent_versions_v2_response_meta.py b/datadog_api_client/v2/model/fleet_agent_versions_v2_response_meta.py new file mode 100644 index 0000000000..1bef271192 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agent_versions_v2_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agent_versions_v2_page import FleetAgentVersionsV2Page + +class FleetAgentVersionsV2ResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agent_versions_v2_page import FleetAgentVersionsV2Page + return { + "page": (FleetAgentVersionsV2Page,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[FleetAgentVersionsV2Page, UnsetType]=unset, **kwargs): + """ + Metadata for the v2 list of agent versions. + + :param page: Pagination details for the v2 list of agent versions. + :type page: FleetAgentVersionsV2Page, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_agents_v2_page.py b/datadog_api_client/v2/model/fleet_agents_v2_page.py new file mode 100644 index 0000000000..d847e95a63 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agents_v2_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetAgentsV2Page(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination details for the v2 list of agents. + + :param total_count: Total number of agents in the fleet, regardless of any filter. + :type total_count: int, optional + + :param total_filtered_count: Total number of agents matching the current filter criteria. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_agents_v2_response.py b/datadog_api_client/v2/model/fleet_agents_v2_response.py new file mode 100644 index 0000000000..aa5440234a --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agents_v2_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agent_v2 import FleetAgentV2 + from datadog_api_client.v2.model.fleet_agents_v2_response_meta import FleetAgentsV2ResponseMeta + +class FleetAgentsV2Response(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agent_v2 import FleetAgentV2 + from datadog_api_client.v2.model.fleet_agents_v2_response_meta import FleetAgentsV2ResponseMeta + return { + "data": ([FleetAgentV2],), + "meta": (FleetAgentsV2ResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[FleetAgentV2], meta: Union[FleetAgentsV2ResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a paginated list of Datadog Agents. + + :param data: Array of agents matching the query criteria. + :type data: [FleetAgentV2] + + :param meta: Metadata for the v2 list of agents, including pagination information. + :type meta: FleetAgentsV2ResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_agents_v2_response_meta.py b/datadog_api_client/v2/model/fleet_agents_v2_response_meta.py new file mode 100644 index 0000000000..c2acc8f093 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_agents_v2_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_agents_v2_page import FleetAgentsV2Page + +class FleetAgentsV2ResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_agents_v2_page import FleetAgentsV2Page + return { + "page": (FleetAgentsV2Page,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[FleetAgentsV2Page, UnsetType]=unset, **kwargs): + """ + Metadata for the v2 list of agents, including pagination information. + + :param page: Pagination details for the v2 list of agents. + :type page: FleetAgentsV2Page, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_configuration_file_v2.py b/datadog_api_client/v2/model/fleet_configuration_file_v2.py new file mode 100644 index 0000000000..4554c68824 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_configuration_file_v2.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetConfigurationFileV2(ModelNormal): + @cached_property + def openapi_types(_): + return { + "agent_hash": (str,), + "file_content": (str,), + "file_path": (str,), + "filename": (str,), + } + attribute_map = { + "agent_hash": "agent_hash", + "file_content": "file_content", + "file_path": "file_path", + "filename": "filename", + } + + def __init__(self_, agent_hash: Union[str, UnsetType]=unset, file_content: Union[str, UnsetType]=unset, file_path: Union[str, UnsetType]=unset, filename: Union[str, UnsetType]=unset, **kwargs): + """ + A configuration file for an integration. + + :param agent_hash: Hash of the configuration file as seen by the agent. + :type agent_hash: str, optional + + :param file_content: The raw content of the configuration file. + :type file_content: str, optional + + :param file_path: Path to the configuration file. + :type file_path: str, optional + + :param filename: Name of the configuration file. + :type filename: str, optional + """ + if agent_hash is not unset: + kwargs["agent_hash"] = agent_hash + if file_content is not unset: + kwargs["file_content"] = file_content + if file_path is not unset: + kwargs["file_path"] = file_path + if filename is not unset: + kwargs["filename"] = filename + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_configuration_layer.py b/datadog_api_client/v2/model/fleet_configuration_layer.py new file mode 100644 index 0000000000..25a33e31b9 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_configuration_layer.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetConfigurationLayer(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compiled_configuration": (str,), + "env_configuration": (str,), + "file_configuration": (str,), + "remote_configuration": (str,), + "runtime_configuration": (str,), + } + attribute_map = { + "compiled_configuration": "compiled_configuration", + "env_configuration": "env_configuration", + "file_configuration": "file_configuration", + "remote_configuration": "remote_configuration", + "runtime_configuration": "runtime_configuration", + } + + def __init__(self_, compiled_configuration: Union[str, UnsetType]=unset, env_configuration: Union[str, UnsetType]=unset, file_configuration: Union[str, UnsetType]=unset, remote_configuration: Union[str, UnsetType]=unset, runtime_configuration: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration information organized by layers. + + :param compiled_configuration: The final compiled configuration. + :type compiled_configuration: str, optional + + :param env_configuration: Configuration from environment variables. + :type env_configuration: str, optional + + :param file_configuration: Configuration from files. + :type file_configuration: str, optional + + :param remote_configuration: Remote configuration settings. + :type remote_configuration: str, optional + + :param runtime_configuration: Runtime configuration. + :type runtime_configuration: str, optional + """ + if compiled_configuration is not unset: + kwargs["compiled_configuration"] = compiled_configuration + if env_configuration is not unset: + kwargs["env_configuration"] = env_configuration + if file_configuration is not unset: + kwargs["file_configuration"] = file_configuration + if remote_configuration is not unset: + kwargs["remote_configuration"] = remote_configuration + if runtime_configuration is not unset: + kwargs["runtime_configuration"] = runtime_configuration + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment.py b/datadog_api_client/v2/model/fleet_deployment.py new file mode 100644 index 0000000000..44882c4a90 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_attributes import FleetDeploymentAttributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + +class FleetDeployment(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_attributes import FleetDeploymentAttributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + return { + "attributes": (FleetDeploymentAttributes,), + "id": (str,), + "type": (FleetDeploymentResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetDeploymentAttributes, id: str, type: FleetDeploymentResourceType, **kwargs): + """ + A deployment that defines automated configuration changes for a fleet of hosts. + + :param attributes: Attributes of a deployment in the response. + :type attributes: FleetDeploymentAttributes + + :param id: Unique identifier for the deployment. + :type id: str + + :param type: The type of deployment resource. + :type type: FleetDeploymentResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_deployment_attributes.py b/datadog_api_client/v2/model/fleet_deployment_attributes.py new file mode 100644 index 0000000000..4e72503023 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_attributes.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_operation import FleetDeploymentOperation + from datadog_api_client.v2.model.fleet_deployment_host import FleetDeploymentHost + from datadog_api_client.v2.model.fleet_deployment_package import FleetDeploymentPackage + +class FleetDeploymentAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_operation import FleetDeploymentOperation + from datadog_api_client.v2.model.fleet_deployment_host import FleetDeploymentHost + from datadog_api_client.v2.model.fleet_deployment_package import FleetDeploymentPackage + return { + "config_operations": ([FleetDeploymentOperation],), + "estimated_end_time_unix": (int,), + "filter_query": (str,), + "high_level_status": (str,), + "hosts": ([FleetDeploymentHost],), + "packages": ([FleetDeploymentPackage],), + "total_hosts": (int,), + } + attribute_map = { + "config_operations": "config_operations", + "estimated_end_time_unix": "estimated_end_time_unix", + "filter_query": "filter_query", + "high_level_status": "high_level_status", + "hosts": "hosts", + "packages": "packages", + "total_hosts": "total_hosts", + } + + def __init__(self_, config_operations: Union[List[FleetDeploymentOperation], UnsetType]=unset, estimated_end_time_unix: Union[int, UnsetType]=unset, filter_query: Union[str, UnsetType]=unset, high_level_status: Union[str, UnsetType]=unset, hosts: Union[List[FleetDeploymentHost], UnsetType]=unset, packages: Union[List[FleetDeploymentPackage], UnsetType]=unset, total_hosts: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of a deployment in the response. + + :param config_operations: Ordered list of configuration file operations to perform on the target hosts. + :type config_operations: [FleetDeploymentOperation], optional + + :param estimated_end_time_unix: Estimated completion time of the deployment as a Unix timestamp (seconds since epoch). + :type estimated_end_time_unix: int, optional + + :param filter_query: Query used to filter and select target hosts for the deployment. Uses the Datadog query syntax. + :type filter_query: str, optional + + :param high_level_status: Current high-level status of the deployment (for example, "pending", "running", + "completed", "failed"). + :type high_level_status: str, optional + + :param hosts: Paginated list of hosts in this deployment with their individual statuses. Only included + when fetching a single deployment by ID. Use the ``limit`` and ``page`` query parameters to + navigate through pages. Pagination metadata is included in the response ``meta.hosts`` field. + :type hosts: [FleetDeploymentHost], optional + + :param packages: List of packages to deploy to target hosts. Present only for package upgrade deployments. + :type packages: [FleetDeploymentPackage], optional + + :param total_hosts: Total number of hosts targeted by this deployment. + :type total_hosts: int, optional + """ + if config_operations is not unset: + kwargs["config_operations"] = config_operations + if estimated_end_time_unix is not unset: + kwargs["estimated_end_time_unix"] = estimated_end_time_unix + if filter_query is not unset: + kwargs["filter_query"] = filter_query + if high_level_status is not unset: + kwargs["high_level_status"] = high_level_status + if hosts is not unset: + kwargs["hosts"] = hosts + if packages is not unset: + kwargs["packages"] = packages + if total_hosts is not unset: + kwargs["total_hosts"] = total_hosts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_configure_v2_attributes.py b/datadog_api_client/v2/model/fleet_deployment_configure_v2_attributes.py new file mode 100644 index 0000000000..6cbb26ba7c --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_configure_v2_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_operation import FleetDeploymentOperation + from datadog_api_client.v2.model.fleet_deployment_configure_v2_package import FleetDeploymentConfigureV2Package + +class FleetDeploymentConfigureV2Attributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_operation import FleetDeploymentOperation + from datadog_api_client.v2.model.fleet_deployment_configure_v2_package import FleetDeploymentConfigureV2Package + return { + "config_operations": ([FleetDeploymentOperation],), + "dry_run": (bool,), + "filter_query": (str,), + "target_packages": ([FleetDeploymentConfigureV2Package],), + } + attribute_map = { + "config_operations": "config_operations", + "dry_run": "dry_run", + "filter_query": "filter_query", + "target_packages": "target_packages", + } + + def __init__(self_, config_operations: List[FleetDeploymentOperation], filter_query: str, dry_run: Union[bool, UnsetType]=unset, target_packages: Union[List[FleetDeploymentConfigureV2Package], UnsetType]=unset, **kwargs): + """ + Attributes for creating a new v2 configuration deployment. + + :param config_operations: Ordered list of configuration file operations to perform on the target hosts. + :type config_operations: [FleetDeploymentOperation] + + :param dry_run: Set to ``true`` to validate the configuration and resolve target hosts and packages + without deploying anything. Returns a 200 with the validation result instead of + creating and starting a real deployment. + :type dry_run: bool, optional + + :param filter_query: Query used to filter and select target hosts for the deployment. Uses the Datadog query syntax. + :type filter_query: str + + :param target_packages: List of packages and their target versions to additionally deploy alongside + the configuration change. + :type target_packages: [FleetDeploymentConfigureV2Package], optional + """ + if dry_run is not unset: + kwargs["dry_run"] = dry_run + if target_packages is not unset: + kwargs["target_packages"] = target_packages + super().__init__(kwargs) + + + self_.config_operations = config_operations + self_.filter_query = filter_query diff --git a/datadog_api_client/v2/model/fleet_deployment_configure_v2_create.py b/datadog_api_client/v2/model/fleet_deployment_configure_v2_create.py new file mode 100644 index 0000000000..304943c028 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_configure_v2_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_configure_v2_attributes import FleetDeploymentConfigureV2Attributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + +class FleetDeploymentConfigureV2Create(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_configure_v2_attributes import FleetDeploymentConfigureV2Attributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + return { + "attributes": (FleetDeploymentConfigureV2Attributes,), + "type": (FleetDeploymentResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: FleetDeploymentConfigureV2Attributes, type: FleetDeploymentResourceType, **kwargs): + """ + Data for creating a new v2 configuration deployment. + + :param attributes: Attributes for creating a new v2 configuration deployment. + :type attributes: FleetDeploymentConfigureV2Attributes + + :param type: The type of deployment resource. + :type type: FleetDeploymentResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_deployment_configure_v2_create_request.py b/datadog_api_client/v2/model/fleet_deployment_configure_v2_create_request.py new file mode 100644 index 0000000000..e39d4b9dd9 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_configure_v2_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_configure_v2_create import FleetDeploymentConfigureV2Create + +class FleetDeploymentConfigureV2CreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_configure_v2_create import FleetDeploymentConfigureV2Create + return { + "data": (FleetDeploymentConfigureV2Create,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetDeploymentConfigureV2Create, **kwargs): + """ + Request payload for creating a new v2 configuration deployment. + + :param data: Data for creating a new v2 configuration deployment. + :type data: FleetDeploymentConfigureV2Create + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run.py b/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run.py new file mode 100644 index 0000000000..01c78e7ecd --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run_attributes import FleetDeploymentConfigureV2DryRunAttributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + +class FleetDeploymentConfigureV2DryRun(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run_attributes import FleetDeploymentConfigureV2DryRunAttributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + return { + "attributes": (FleetDeploymentConfigureV2DryRunAttributes,), + "id": (str,), + "type": (FleetDeploymentResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetDeploymentConfigureV2DryRunAttributes, id: str, type: FleetDeploymentResourceType, **kwargs): + """ + The result of a configuration deployment dry run. + + :param attributes: Attributes of a configuration deployment dry-run response. + :type attributes: FleetDeploymentConfigureV2DryRunAttributes + + :param id: Always ``"dry-run"`` for a dry-run response. Does not identify a real deployment + and cannot be used to fetch a deployment by ID. + :type id: str + + :param type: The type of deployment resource. + :type type: FleetDeploymentResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run_attributes.py b/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run_attributes.py new file mode 100644 index 0000000000..a2060faec1 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run_result import FleetDeploymentConfigureV2DryRunResult + +class FleetDeploymentConfigureV2DryRunAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run_result import FleetDeploymentConfigureV2DryRunResult + return { + "dry_run": (FleetDeploymentConfigureV2DryRunResult,), + "query": (str,), + "total_hosts": (int,), + } + attribute_map = { + "dry_run": "dry_run", + "query": "query", + "total_hosts": "total_hosts", + } + + def __init__(self_, dry_run: Union[FleetDeploymentConfigureV2DryRunResult, UnsetType]=unset, query: Union[str, UnsetType]=unset, total_hosts: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of a configuration deployment dry-run response. + + :param dry_run: Validation result of a configuration deployment dry run. + :type dry_run: FleetDeploymentConfigureV2DryRunResult, optional + + :param query: Query used to filter and select target hosts for the deployment. + :type query: str, optional + + :param total_hosts: Total number of hosts targeted by this deployment. + :type total_hosts: int, optional + """ + if dry_run is not unset: + kwargs["dry_run"] = dry_run + if query is not unset: + kwargs["query"] = query + if total_hosts is not unset: + kwargs["total_hosts"] = total_hosts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run_response.py b/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run_response.py new file mode 100644 index 0000000000..bcd141aed1 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run import FleetDeploymentConfigureV2DryRun + +class FleetDeploymentConfigureV2DryRunResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run import FleetDeploymentConfigureV2DryRun + return { + "data": (FleetDeploymentConfigureV2DryRun,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetDeploymentConfigureV2DryRun, **kwargs): + """ + Response containing the result of a configuration deployment dry run. + + :param data: The result of a configuration deployment dry run. + :type data: FleetDeploymentConfigureV2DryRun + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run_result.py b/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run_result.py new file mode 100644 index 0000000000..fdf544146a --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_configure_v2_dry_run_result.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetDeploymentConfigureV2DryRunResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "config_validated": (bool,), + "non_upgradable_by_reason": ({str: (int,)},), + "non_upgradable_hosts": (int,), + } + attribute_map = { + "config_validated": "config_validated", + "non_upgradable_by_reason": "non_upgradable_by_reason", + "non_upgradable_hosts": "non_upgradable_hosts", + } + + def __init__(self_, config_validated: Union[bool, UnsetType]=unset, non_upgradable_by_reason: Union[Dict[str, int], UnsetType]=unset, non_upgradable_hosts: Union[int, UnsetType]=unset, **kwargs): + """ + Validation result of a configuration deployment dry run. + + :param config_validated: Whether the configuration passed schema validation. + :type config_validated: bool, optional + + :param non_upgradable_by_reason: Breakdown of ineligible host counts by reason. Only includes reasons with a + non-zero count. Absent from the response when no targeted host is ineligible. + :type non_upgradable_by_reason: {str: (int,)}, optional + + :param non_upgradable_hosts: Number of targeted hosts that are not eligible to receive this configuration. + :type non_upgradable_hosts: int, optional + """ + if config_validated is not unset: + kwargs["config_validated"] = config_validated + if non_upgradable_by_reason is not unset: + kwargs["non_upgradable_by_reason"] = non_upgradable_by_reason + if non_upgradable_hosts is not unset: + kwargs["non_upgradable_hosts"] = non_upgradable_hosts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_configure_v2_package.py b/datadog_api_client/v2/model/fleet_deployment_configure_v2_package.py new file mode 100644 index 0000000000..c0f56abb46 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_configure_v2_package.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetDeploymentConfigureV2Package(ModelNormal): + @cached_property + def openapi_types(_): + return { + "apm_instrumentation": (str,), + "name": (str,), + "version": (str,), + } + attribute_map = { + "apm_instrumentation": "apm_instrumentation", + "name": "name", + "version": "version", + } + + def __init__(self_, name: str, version: str, apm_instrumentation: Union[str, UnsetType]=unset, **kwargs): + """ + A package and its target version to additionally deploy alongside a configuration change. + + :param apm_instrumentation: APM auto-instrumentation mode to enable for this package, if applicable. + :type apm_instrumentation: str, optional + + :param name: The name of the package to deploy. + :type name: str + + :param version: The target version of the package to deploy. + :type version: str + """ + if apm_instrumentation is not unset: + kwargs["apm_instrumentation"] = apm_instrumentation + super().__init__(kwargs) + + + self_.name = name + self_.version = version diff --git a/datadog_api_client/v2/model/fleet_deployment_file_op.py b/datadog_api_client/v2/model/fleet_deployment_file_op.py new file mode 100644 index 0000000000..23f0903e29 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_file_op.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FleetDeploymentFileOp(ModelSimple): + """ + Type of file operation to perform on the target configuration file. + - `merge-patch`: Merges the provided patch data with the existing configuration file. + Creates the file if it doesn't exist. + - `delete`: Removes the specified configuration file from the target hosts. + + :param value: Must be one of ["merge-patch", "delete"]. + :type value: str + """ + + allowed_values = { + "merge-patch", + "delete", + } + MERGE_PATCH: ClassVar["FleetDeploymentFileOp"] + DELETE: ClassVar["FleetDeploymentFileOp"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FleetDeploymentFileOp.MERGE_PATCH = FleetDeploymentFileOp("merge-patch") +FleetDeploymentFileOp.DELETE = FleetDeploymentFileOp("delete") diff --git a/datadog_api_client/v2/model/fleet_deployment_host.py b/datadog_api_client/v2/model/fleet_deployment_host.py new file mode 100644 index 0000000000..b3e7881956 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_host.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_host_package import FleetDeploymentHostPackage + +class FleetDeploymentHost(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_host_package import FleetDeploymentHostPackage + return { + "error": (str,), + "hostname": (str,), + "status": (str,), + "versions": ([FleetDeploymentHostPackage],), + } + attribute_map = { + "error": "error", + "hostname": "hostname", + "status": "status", + "versions": "versions", + } + + def __init__(self_, error: Union[str, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, versions: Union[List[FleetDeploymentHostPackage], UnsetType]=unset, **kwargs): + """ + A host that is part of a deployment with its current status. + + :param error: Error message if the deployment failed on this host. + :type error: str, optional + + :param hostname: The hostname of the agent. + :type hostname: str, optional + + :param status: Current deployment status for this specific host. + :type status: str, optional + + :param versions: List of packages and their versions currently installed on this host. + :type versions: [FleetDeploymentHostPackage], optional + """ + if error is not unset: + kwargs["error"] = error + if hostname is not unset: + kwargs["hostname"] = hostname + if status is not unset: + kwargs["status"] = status + if versions is not unset: + kwargs["versions"] = versions + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_host_package.py b/datadog_api_client/v2/model/fleet_deployment_host_package.py new file mode 100644 index 0000000000..0601fbaeb2 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_host_package.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetDeploymentHostPackage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "current_version": (str,), + "initial_version": (str,), + "package_name": (str,), + "target_version": (str,), + } + attribute_map = { + "current_version": "current_version", + "initial_version": "initial_version", + "package_name": "package_name", + "target_version": "target_version", + } + + def __init__(self_, current_version: Union[str, UnsetType]=unset, initial_version: Union[str, UnsetType]=unset, package_name: Union[str, UnsetType]=unset, target_version: Union[str, UnsetType]=unset, **kwargs): + """ + Package version information for a host, showing the initial version before deployment, + the target version to deploy, and the current version on the host. + + :param current_version: The current version of the package on the host. + :type current_version: str, optional + + :param initial_version: The initial version of the package on the host before the deployment started. + :type initial_version: str, optional + + :param package_name: The name of the package. + :type package_name: str, optional + + :param target_version: The target version that the deployment is attempting to install. + :type target_version: str, optional + """ + if current_version is not unset: + kwargs["current_version"] = current_version + if initial_version is not unset: + kwargs["initial_version"] = initial_version + if package_name is not unset: + kwargs["package_name"] = package_name + if target_version is not unset: + kwargs["target_version"] = target_version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_hosts_page.py b/datadog_api_client/v2/model/fleet_deployment_hosts_page.py new file mode 100644 index 0000000000..7559d53af3 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_hosts_page.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetDeploymentHostsPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "current_page": (int,), + "page_size": (int,), + "total_hosts": (int,), + "total_pages": (int,), + } + attribute_map = { + "current_page": "current_page", + "page_size": "page_size", + "total_hosts": "total_hosts", + "total_pages": "total_pages", + } + + def __init__(self_, current_page: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, total_hosts: Union[int, UnsetType]=unset, total_pages: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination details for the list of hosts in a deployment. + + :param current_page: Current page index (zero-based). + :type current_page: int, optional + + :param page_size: Number of hosts returned per page. + :type page_size: int, optional + + :param total_hosts: Total number of hosts in this deployment. + :type total_hosts: int, optional + + :param total_pages: Total number of pages available. + :type total_pages: int, optional + """ + if current_page is not unset: + kwargs["current_page"] = current_page + if page_size is not unset: + kwargs["page_size"] = page_size + if total_hosts is not unset: + kwargs["total_hosts"] = total_hosts + if total_pages is not unset: + kwargs["total_pages"] = total_pages + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_operation.py b/datadog_api_client/v2/model/fleet_deployment_operation.py new file mode 100644 index 0000000000..1f1f3ae010 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_operation.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_file_op import FleetDeploymentFileOp + +class FleetDeploymentOperation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_file_op import FleetDeploymentFileOp + return { + "file_op": (FleetDeploymentFileOp,), + "file_path": (str,), + "patch": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "file_op": "file_op", + "file_path": "file_path", + "patch": "patch", + } + + def __init__(self_, file_op: FleetDeploymentFileOp, file_path: str, patch: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + A single configuration file operation to perform on the target hosts. + + :param file_op: Type of file operation to perform on the target configuration file. + + * ``merge-patch`` : Merges the provided patch data with the existing configuration file. + Creates the file if it doesn't exist. + * ``delete`` : Removes the specified configuration file from the target hosts. + :type file_op: FleetDeploymentFileOp + + :param file_path: Absolute path to the target configuration file on the host. + :type file_path: str + + :param patch: Patch data in JSON format to apply to the configuration file. + When using ``merge-patch`` , this object is merged with the existing configuration, + allowing you to add, update, or override specific fields without replacing the entire file. + The structure must match the target configuration file format (for example, YAML structure + for Datadog Agent config). Not applicable when using the ``delete`` operation. + :type patch: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + """ + if patch is not unset: + kwargs["patch"] = patch + super().__init__(kwargs) + + + self_.file_op = file_op + self_.file_path = file_path diff --git a/datadog_api_client/v2/model/fleet_deployment_package.py b/datadog_api_client/v2/model/fleet_deployment_package.py new file mode 100644 index 0000000000..91aa31ae51 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_package.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetDeploymentPackage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "version": (str,), + } + attribute_map = { + "name": "name", + "version": "version", + } + + def __init__(self_, name: str, version: str, **kwargs): + """ + A package and its target version for deployment. + + :param name: The name of the package to deploy. + :type name: str + + :param version: The target version of the package to deploy. + :type version: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.version = version diff --git a/datadog_api_client/v2/model/fleet_deployment_package_upgrade_v2_attributes.py b/datadog_api_client/v2/model/fleet_deployment_package_upgrade_v2_attributes.py new file mode 100644 index 0000000000..2d2667b2ed --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_package_upgrade_v2_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_package import FleetDeploymentPackage + +class FleetDeploymentPackageUpgradeV2Attributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_package import FleetDeploymentPackage + return { + "filter_query": (str,), + "target_packages": ([FleetDeploymentPackage],), + } + attribute_map = { + "filter_query": "filter_query", + "target_packages": "target_packages", + } + + def __init__(self_, filter_query: str, target_packages: List[FleetDeploymentPackage], **kwargs): + """ + Attributes for creating a new v2 package upgrade deployment. + + :param filter_query: Query used to filter and select target hosts for the deployment. Uses the Datadog query syntax. + :type filter_query: str + + :param target_packages: List of packages and their target versions to deploy to the selected hosts. + :type target_packages: [FleetDeploymentPackage] + """ + super().__init__(kwargs) + + + self_.filter_query = filter_query + self_.target_packages = target_packages diff --git a/datadog_api_client/v2/model/fleet_deployment_package_upgrade_v2_create.py b/datadog_api_client/v2/model/fleet_deployment_package_upgrade_v2_create.py new file mode 100644 index 0000000000..a2a4fd34f9 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_package_upgrade_v2_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_attributes import FleetDeploymentPackageUpgradeV2Attributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + +class FleetDeploymentPackageUpgradeV2Create(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_attributes import FleetDeploymentPackageUpgradeV2Attributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + return { + "attributes": (FleetDeploymentPackageUpgradeV2Attributes,), + "type": (FleetDeploymentResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: FleetDeploymentPackageUpgradeV2Attributes, type: FleetDeploymentResourceType, **kwargs): + """ + Data for creating a new v2 package upgrade deployment. + + :param attributes: Attributes for creating a new v2 package upgrade deployment. + :type attributes: FleetDeploymentPackageUpgradeV2Attributes + + :param type: The type of deployment resource. + :type type: FleetDeploymentResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_deployment_package_upgrade_v2_create_request.py b/datadog_api_client/v2/model/fleet_deployment_package_upgrade_v2_create_request.py new file mode 100644 index 0000000000..798569353c --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_package_upgrade_v2_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_create import FleetDeploymentPackageUpgradeV2Create + +class FleetDeploymentPackageUpgradeV2CreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_create import FleetDeploymentPackageUpgradeV2Create + return { + "data": (FleetDeploymentPackageUpgradeV2Create,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetDeploymentPackageUpgradeV2Create, **kwargs): + """ + Request payload for creating a new v2 package upgrade deployment. + + :param data: Data for creating a new v2 package upgrade deployment. + :type data: FleetDeploymentPackageUpgradeV2Create + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_deployment_resource_type.py b/datadog_api_client/v2/model/fleet_deployment_resource_type.py new file mode 100644 index 0000000000..f70410c1a4 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FleetDeploymentResourceType(ModelSimple): + """ + The type of deployment resource. + + :param value: If omitted defaults to "deployment". Must be one of ["deployment"]. + :type value: str + """ + + allowed_values = { + "deployment", + } + DEPLOYMENT: ClassVar["FleetDeploymentResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FleetDeploymentResourceType.DEPLOYMENT = FleetDeploymentResourceType("deployment") diff --git a/datadog_api_client/v2/model/fleet_deployment_response.py b/datadog_api_client/v2/model/fleet_deployment_response.py new file mode 100644 index 0000000000..8ee0bd929b --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment import FleetDeployment + from datadog_api_client.v2.model.fleet_deployment_response_meta import FleetDeploymentResponseMeta + +class FleetDeploymentResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment import FleetDeployment + from datadog_api_client.v2.model.fleet_deployment_response_meta import FleetDeploymentResponseMeta + return { + "data": (FleetDeployment,), + "meta": (FleetDeploymentResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[FleetDeployment, UnsetType]=unset, meta: Union[FleetDeploymentResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a single deployment. + + :param data: A deployment that defines automated configuration changes for a fleet of hosts. + :type data: FleetDeployment, optional + + :param meta: Metadata for a single deployment response, including pagination information for hosts. + :type meta: FleetDeploymentResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_response_meta.py b/datadog_api_client/v2/model/fleet_deployment_response_meta.py new file mode 100644 index 0000000000..d17b78dc36 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_hosts_page import FleetDeploymentHostsPage + +class FleetDeploymentResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_hosts_page import FleetDeploymentHostsPage + return { + "hosts": (FleetDeploymentHostsPage,), + } + attribute_map = { + "hosts": "hosts", + } + + def __init__(self_, hosts: Union[FleetDeploymentHostsPage, UnsetType]=unset, **kwargs): + """ + Metadata for a single deployment response, including pagination information for hosts. + + :param hosts: Pagination details for the list of hosts in a deployment. + :type hosts: FleetDeploymentHostsPage, optional + """ + if hosts is not unset: + kwargs["hosts"] = hosts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_v2.py b/datadog_api_client/v2/model/fleet_deployment_v2.py new file mode 100644 index 0000000000..e85f067268 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_v2_attributes import FleetDeploymentV2Attributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + +class FleetDeploymentV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_v2_attributes import FleetDeploymentV2Attributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + return { + "attributes": (FleetDeploymentV2Attributes,), + "id": (str,), + "type": (FleetDeploymentResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetDeploymentV2Attributes, id: str, type: FleetDeploymentResourceType, **kwargs): + """ + A deployment in the v2 API response. + + :param attributes: Attributes of a deployment in the v2 API response. + :type attributes: FleetDeploymentV2Attributes + + :param id: Unique identifier for the deployment. + :type id: str + + :param type: The type of deployment resource. + :type type: FleetDeploymentResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_deployment_v2_attributes.py b/datadog_api_client/v2/model/fleet_deployment_v2_attributes.py new file mode 100644 index 0000000000..2517a81a4c --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2_attributes.py @@ -0,0 +1,144 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_operation import FleetDeploymentOperation + +class FleetDeploymentV2Attributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_operation import FleetDeploymentOperation + return { + "author": (str,), + "config_operations": ([FleetDeploymentOperation],), + "duration_seconds": (int,), + "error_summary": (str,), + "estimated_finished_at": (int,), + "finished_at": (int,), + "is_scheduled": (bool,), + "query": (str,), + "schedule_id": (str,), + "started_at": (int,), + "status": (str,), + "target_versions": ([str],), + "total_hosts": (int,), + "update_type": (str,), + } + attribute_map = { + "author": "author", + "config_operations": "config_operations", + "duration_seconds": "duration_seconds", + "error_summary": "error_summary", + "estimated_finished_at": "estimated_finished_at", + "finished_at": "finished_at", + "is_scheduled": "is_scheduled", + "query": "query", + "schedule_id": "schedule_id", + "started_at": "started_at", + "status": "status", + "target_versions": "target_versions", + "total_hosts": "total_hosts", + "update_type": "update_type", + } + + def __init__(self_, author: Union[str, UnsetType]=unset, config_operations: Union[List[FleetDeploymentOperation], UnsetType]=unset, duration_seconds: Union[int, UnsetType]=unset, error_summary: Union[str, UnsetType]=unset, estimated_finished_at: Union[int, UnsetType]=unset, finished_at: Union[int, UnsetType]=unset, is_scheduled: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, schedule_id: Union[str, UnsetType]=unset, started_at: Union[int, UnsetType]=unset, status: Union[str, UnsetType]=unset, target_versions: Union[List[str], UnsetType]=unset, total_hosts: Union[int, UnsetType]=unset, update_type: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a deployment in the v2 API response. + + :param author: Handle of the user who triggered the deployment. + :type author: str, optional + + :param config_operations: Ordered list of configuration file operations applied by this deployment. + Absent for package deployments, which have no configuration file operations. + :type config_operations: [FleetDeploymentOperation], optional + + :param duration_seconds: Duration of the deployment in seconds, computed as ``finished_at - started_at``. + Zero if the deployment has not finished. + :type duration_seconds: int, optional + + :param error_summary: Top-level error message for the deployment. Populated only when the deployment has failed. + :type error_summary: str, optional + + :param estimated_finished_at: Estimated completion time of the deployment as a Unix timestamp. Zero if not available. + :type estimated_finished_at: int, optional + + :param finished_at: Time the deployment finished as a Unix timestamp. Zero if not yet finished. + :type finished_at: int, optional + + :param is_scheduled: Whether this deployment was triggered by a schedule ( ``schedule_id`` is non-empty). + :type is_scheduled: bool, optional + + :param query: Query used to filter and select target hosts for the deployment. + :type query: str, optional + + :param schedule_id: Identifier of the schedule that triggered this deployment. Empty if triggered manually. + :type schedule_id: str, optional + + :param started_at: Time the deployment started as a Unix timestamp. Zero if not yet started. + :type started_at: int, optional + + :param status: Current high-level status of the deployment (for example, "pending", "running", + "completed", "failed"). + :type status: str, optional + + :param target_versions: Package versions targeted by this deployment. + :type target_versions: [str], optional + + :param total_hosts: Total number of hosts targeted by this deployment. + :type total_hosts: int, optional + + :param update_type: Type of update operation performed by this deployment + (for example, "update_config_operations", "update_package"). + :type update_type: str, optional + """ + if author is not unset: + kwargs["author"] = author + if config_operations is not unset: + kwargs["config_operations"] = config_operations + if duration_seconds is not unset: + kwargs["duration_seconds"] = duration_seconds + if error_summary is not unset: + kwargs["error_summary"] = error_summary + if estimated_finished_at is not unset: + kwargs["estimated_finished_at"] = estimated_finished_at + if finished_at is not unset: + kwargs["finished_at"] = finished_at + if is_scheduled is not unset: + kwargs["is_scheduled"] = is_scheduled + if query is not unset: + kwargs["query"] = query + if schedule_id is not unset: + kwargs["schedule_id"] = schedule_id + if started_at is not unset: + kwargs["started_at"] = started_at + if status is not unset: + kwargs["status"] = status + if target_versions is not unset: + kwargs["target_versions"] = target_versions + if total_hosts is not unset: + kwargs["total_hosts"] = total_hosts + if update_type is not unset: + kwargs["update_type"] = update_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_v2_cancel.py b/datadog_api_client/v2/model/fleet_deployment_v2_cancel.py new file mode 100644 index 0000000000..7865fc134a --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2_cancel.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_v2_cancel_attributes import FleetDeploymentV2CancelAttributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + +class FleetDeploymentV2Cancel(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_v2_cancel_attributes import FleetDeploymentV2CancelAttributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + return { + "attributes": (FleetDeploymentV2CancelAttributes,), + "id": (str,), + "type": (FleetDeploymentResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetDeploymentV2CancelAttributes, id: str, type: FleetDeploymentResourceType, **kwargs): + """ + A deployment cancellation response. + + :param attributes: Attributes of a deployment cancellation response. + :type attributes: FleetDeploymentV2CancelAttributes + + :param id: Unique identifier for the deployment. + :type id: str + + :param type: The type of deployment resource. + :type type: FleetDeploymentResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_deployment_v2_cancel_attributes.py b/datadog_api_client/v2/model/fleet_deployment_v2_cancel_attributes.py new file mode 100644 index 0000000000..423f6963cd --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2_cancel_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetDeploymentV2CancelAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": (str,), + "status": (str,), + } + attribute_map = { + "message": "message", + "status": "status", + } + + def __init__(self_, message: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a deployment cancellation response. + + :param message: Human-readable message describing the outcome of the cancellation request. + :type message: str, optional + + :param status: Status of the deployment after the cancellation request. + :type status: str, optional + """ + if message is not unset: + kwargs["message"] = message + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_v2_cancel_response.py b/datadog_api_client/v2/model/fleet_deployment_v2_cancel_response.py new file mode 100644 index 0000000000..f1ef0050d6 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2_cancel_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_v2_cancel import FleetDeploymentV2Cancel + +class FleetDeploymentV2CancelResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_v2_cancel import FleetDeploymentV2Cancel + return { + "data": (FleetDeploymentV2Cancel,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetDeploymentV2Cancel, **kwargs): + """ + Response containing the result of a deployment cancellation request. + + :param data: A deployment cancellation response. + :type data: FleetDeploymentV2Cancel + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_deployment_v2_create_response.py b/datadog_api_client/v2/model/fleet_deployment_v2_create_response.py new file mode 100644 index 0000000000..ca83bb2e14 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2_create_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_v2 import FleetDeploymentV2 + +class FleetDeploymentV2CreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_v2 import FleetDeploymentV2 + return { + "data": (FleetDeploymentV2,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetDeploymentV2, **kwargs): + """ + Response containing the newly created deployment. + + :param data: A deployment in the v2 API response. + :type data: FleetDeploymentV2 + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_deployment_v2_detail.py b/datadog_api_client/v2/model/fleet_deployment_v2_detail.py new file mode 100644 index 0000000000..8124bbc4e0 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2_detail.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_v2_detail_attributes import FleetDeploymentV2DetailAttributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + +class FleetDeploymentV2Detail(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_v2_detail_attributes import FleetDeploymentV2DetailAttributes + from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType + return { + "attributes": (FleetDeploymentV2DetailAttributes,), + "id": (str,), + "type": (FleetDeploymentResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetDeploymentV2DetailAttributes, id: str, type: FleetDeploymentResourceType, **kwargs): + """ + Detailed information about a deployment. + + :param attributes: Attributes of a deployment detail response. + :type attributes: FleetDeploymentV2DetailAttributes + + :param id: Unique identifier for the deployment. + :type id: str + + :param type: The type of deployment resource. + :type type: FleetDeploymentResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_deployment_v2_detail_agent.py b/datadog_api_client/v2/model/fleet_deployment_v2_detail_agent.py new file mode 100644 index 0000000000..415d1c5927 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2_detail_agent.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_host_package import FleetDeploymentHostPackage + +class FleetDeploymentV2DetailAgent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_host_package import FleetDeploymentHostPackage + return { + "error": (str,), + "hostname": (str,), + "running_step": (str,), + "status": (str,), + "status_details": (str,), + "versions": ([FleetDeploymentHostPackage],), + } + attribute_map = { + "error": "error", + "hostname": "hostname", + "running_step": "running_step", + "status": "status", + "status_details": "status_details", + "versions": "versions", + } + + def __init__(self_, error: Union[str, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, running_step: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, status_details: Union[str, UnsetType]=unset, versions: Union[List[FleetDeploymentHostPackage], UnsetType]=unset, **kwargs): + """ + Per-host status entry for a deployment. + + :param error: Error message if the deployment failed on this host. + :type error: str, optional + + :param hostname: Hostname of the agent. + :type hostname: str, optional + + :param running_step: Name of the step currently executing on this host. + :type running_step: str, optional + + :param status: Deployment status for this host (for example, "pending", "running", "succeeded", "failed"). + :type status: str, optional + + :param status_details: Additional details about the current deployment status on this host. + :type status_details: str, optional + + :param versions: Package version details for this host. + :type versions: [FleetDeploymentHostPackage], optional + """ + if error is not unset: + kwargs["error"] = error + if hostname is not unset: + kwargs["hostname"] = hostname + if running_step is not unset: + kwargs["running_step"] = running_step + if status is not unset: + kwargs["status"] = status + if status_details is not unset: + kwargs["status_details"] = status_details + if versions is not unset: + kwargs["versions"] = versions + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_v2_detail_attributes.py b/datadog_api_client/v2/model/fleet_deployment_v2_detail_attributes.py new file mode 100644 index 0000000000..352ccfa394 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2_detail_attributes.py @@ -0,0 +1,191 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_operation import FleetDeploymentOperation + from datadog_api_client.v2.model.fleet_deployment_v2_detail_agent import FleetDeploymentV2DetailAgent + +class FleetDeploymentV2DetailAttributes(ModelNormal): + validations = { + "canceled_hosts": { + "inclusive_minimum": 0, + }, + "failed_hosts": { + "inclusive_minimum": 0, + }, + "running_hosts": { + "inclusive_minimum": 0, + }, + "skipped_hosts": { + "inclusive_minimum": 0, + }, + "succeeded_hosts": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_operation import FleetDeploymentOperation + from datadog_api_client.v2.model.fleet_deployment_v2_detail_agent import FleetDeploymentV2DetailAgent + return { + "author": (str,), + "canceled_hosts": (int,), + "config_operations": ([FleetDeploymentOperation],), + "duration_seconds": (int,), + "error_summary": (str,), + "estimated_finished_at": (int,), + "failed_hosts": (int,), + "high_level_status": (str,), + "hosts": ([FleetDeploymentV2DetailAgent],), + "is_scheduled": (bool,), + "query": (str,), + "running_hosts": (int,), + "schedule_id": (str,), + "skipped_hosts": (int,), + "succeeded_hosts": (int,), + "target_versions": ([str],), + "total_hosts": (int,), + "update_type": (str,), + } + attribute_map = { + "author": "author", + "canceled_hosts": "canceled_hosts", + "config_operations": "config_operations", + "duration_seconds": "duration_seconds", + "error_summary": "error_summary", + "estimated_finished_at": "estimated_finished_at", + "failed_hosts": "failed_hosts", + "high_level_status": "high_level_status", + "hosts": "hosts", + "is_scheduled": "is_scheduled", + "query": "query", + "running_hosts": "running_hosts", + "schedule_id": "schedule_id", + "skipped_hosts": "skipped_hosts", + "succeeded_hosts": "succeeded_hosts", + "target_versions": "target_versions", + "total_hosts": "total_hosts", + "update_type": "update_type", + } + + def __init__(self_, author: Union[str, UnsetType]=unset, canceled_hosts: Union[int, UnsetType]=unset, config_operations: Union[List[FleetDeploymentOperation], UnsetType]=unset, duration_seconds: Union[int, UnsetType]=unset, error_summary: Union[str, UnsetType]=unset, estimated_finished_at: Union[int, UnsetType]=unset, failed_hosts: Union[int, UnsetType]=unset, high_level_status: Union[str, UnsetType]=unset, hosts: Union[List[FleetDeploymentV2DetailAgent], UnsetType]=unset, is_scheduled: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, running_hosts: Union[int, UnsetType]=unset, schedule_id: Union[str, UnsetType]=unset, skipped_hosts: Union[int, UnsetType]=unset, succeeded_hosts: Union[int, UnsetType]=unset, target_versions: Union[List[str], UnsetType]=unset, total_hosts: Union[int, UnsetType]=unset, update_type: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a deployment detail response. + + :param author: Handle of the user who triggered the deployment. + :type author: str, optional + + :param canceled_hosts: Number of hosts on which the deployment was canceled. + :type canceled_hosts: int, optional + + :param config_operations: Ordered list of configuration file operations applied by this deployment. + Absent for package deployments, which have no configuration file operations. + :type config_operations: [FleetDeploymentOperation], optional + + :param duration_seconds: Duration of the deployment in seconds, computed as ``finished_at - started_at``. + Zero if the deployment has not finished. + :type duration_seconds: int, optional + + :param error_summary: Top-level error message for the deployment. Populated only when the deployment has failed. + :type error_summary: str, optional + + :param estimated_finished_at: Estimated completion time of the deployment as a Unix timestamp. Zero if not available. + :type estimated_finished_at: int, optional + + :param failed_hosts: Number of hosts on which the deployment failed. + :type failed_hosts: int, optional + + :param high_level_status: Current high-level status of the deployment (for example, "pending", "running", + "completed", "failed"). + :type high_level_status: str, optional + + :param hosts: Per-host status list for this deployment. + :type hosts: [FleetDeploymentV2DetailAgent], optional + + :param is_scheduled: Whether this deployment was triggered by a schedule ( ``schedule_id`` is non-empty). + :type is_scheduled: bool, optional + + :param query: Query used to filter and select target hosts for the deployment. + :type query: str, optional + + :param running_hosts: Number of hosts on which the deployment is currently running. + :type running_hosts: int, optional + + :param schedule_id: Identifier of the schedule that triggered this deployment. Empty if triggered manually. + :type schedule_id: str, optional + + :param skipped_hosts: Number of hosts that were skipped during the deployment. + :type skipped_hosts: int, optional + + :param succeeded_hosts: Number of hosts on which the deployment succeeded. + :type succeeded_hosts: int, optional + + :param target_versions: Distinct package versions targeted by this deployment, in first-seen order. + :type target_versions: [str], optional + + :param total_hosts: Total number of hosts targeted by this deployment. + :type total_hosts: int, optional + + :param update_type: Type of update operation performed by this deployment + (for example, "update_config_operations", "update_package"). + :type update_type: str, optional + """ + if author is not unset: + kwargs["author"] = author + if canceled_hosts is not unset: + kwargs["canceled_hosts"] = canceled_hosts + if config_operations is not unset: + kwargs["config_operations"] = config_operations + if duration_seconds is not unset: + kwargs["duration_seconds"] = duration_seconds + if error_summary is not unset: + kwargs["error_summary"] = error_summary + if estimated_finished_at is not unset: + kwargs["estimated_finished_at"] = estimated_finished_at + if failed_hosts is not unset: + kwargs["failed_hosts"] = failed_hosts + if high_level_status is not unset: + kwargs["high_level_status"] = high_level_status + if hosts is not unset: + kwargs["hosts"] = hosts + if is_scheduled is not unset: + kwargs["is_scheduled"] = is_scheduled + if query is not unset: + kwargs["query"] = query + if running_hosts is not unset: + kwargs["running_hosts"] = running_hosts + if schedule_id is not unset: + kwargs["schedule_id"] = schedule_id + if skipped_hosts is not unset: + kwargs["skipped_hosts"] = skipped_hosts + if succeeded_hosts is not unset: + kwargs["succeeded_hosts"] = succeeded_hosts + if target_versions is not unset: + kwargs["target_versions"] = target_versions + if total_hosts is not unset: + kwargs["total_hosts"] = total_hosts + if update_type is not unset: + kwargs["update_type"] = update_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployment_v2_detail_response.py b/datadog_api_client/v2/model/fleet_deployment_v2_detail_response.py new file mode 100644 index 0000000000..17ce65cc85 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployment_v2_detail_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_v2_detail import FleetDeploymentV2Detail + +class FleetDeploymentV2DetailResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_v2_detail import FleetDeploymentV2Detail + return { + "data": (FleetDeploymentV2Detail,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetDeploymentV2Detail, **kwargs): + """ + Response containing detailed information about a single deployment. + + :param data: Detailed information about a deployment. + :type data: FleetDeploymentV2Detail + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_deployments_v2_page.py b/datadog_api_client/v2/model/fleet_deployments_v2_page.py new file mode 100644 index 0000000000..b126eb8f4c --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployments_v2_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetDeploymentsV2Page(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination details for the v2 list of deployments. + + :param total_count: Total number of deployments available across all pages. + :type total_count: int, optional + + :param total_filtered_count: Total number of deployments matching the current filter query. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_deployments_v2_response.py b/datadog_api_client/v2/model/fleet_deployments_v2_response.py new file mode 100644 index 0000000000..b6b2010352 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployments_v2_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployment_v2 import FleetDeploymentV2 + from datadog_api_client.v2.model.fleet_deployments_v2_response_meta import FleetDeploymentsV2ResponseMeta + +class FleetDeploymentsV2Response(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployment_v2 import FleetDeploymentV2 + from datadog_api_client.v2.model.fleet_deployments_v2_response_meta import FleetDeploymentsV2ResponseMeta + return { + "data": ([FleetDeploymentV2],), + "meta": (FleetDeploymentsV2ResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[FleetDeploymentV2], meta: Union[FleetDeploymentsV2ResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a paginated list of deployments. + + :param data: Array of deployments matching the query criteria. + :type data: [FleetDeploymentV2] + + :param meta: Metadata for the v2 list of deployments, including pagination information. + :type meta: FleetDeploymentsV2ResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_deployments_v2_response_meta.py b/datadog_api_client/v2/model/fleet_deployments_v2_response_meta.py new file mode 100644 index 0000000000..23b58b054c --- /dev/null +++ b/datadog_api_client/v2/model/fleet_deployments_v2_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_deployments_v2_page import FleetDeploymentsV2Page + +class FleetDeploymentsV2ResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_deployments_v2_page import FleetDeploymentsV2Page + return { + "page": (FleetDeploymentsV2Page,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[FleetDeploymentsV2Page, UnsetType]=unset, **kwargs): + """ + Metadata for the v2 list of deployments, including pagination information. + + :param page: Pagination details for the v2 list of deployments. + :type page: FleetDeploymentsV2Page, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_detected_integration.py b/datadog_api_client/v2/model/fleet_detected_integration.py new file mode 100644 index 0000000000..9fb0ca4c36 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_detected_integration.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetDetectedIntegration(ModelNormal): + @cached_property + def openapi_types(_): + return { + "escaped_name": (str,), + "prefix": (str,), + } + attribute_map = { + "escaped_name": "escaped_name", + "prefix": "prefix", + } + + def __init__(self_, escaped_name: Union[str, UnsetType]=unset, prefix: Union[str, UnsetType]=unset, **kwargs): + """ + An integration detected on the agent but not necessarily configured. + + :param escaped_name: Escaped integration name. + :type escaped_name: str, optional + + :param prefix: Integration prefix identifier. + :type prefix: str, optional + """ + if escaped_name is not unset: + kwargs["escaped_name"] = escaped_name + if prefix is not unset: + kwargs["prefix"] = prefix + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_integration_details_v2.py b/datadog_api_client/v2/model/fleet_integration_details_v2.py new file mode 100644 index 0000000000..eeacbb66f4 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_integration_details_v2.py @@ -0,0 +1,130 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetIntegrationDetailsV2(ModelNormal): + @cached_property + def openapi_types(_): + return { + "data_type": (str,), + "error_messages": ([str],), + "init_config": (str,), + "instance_config": (str,), + "is_custom_check": (bool,), + "is_default": (bool,), + "is_init": (bool,), + "log_config": (str,), + "name": (str,), + "pod_count": (int,), + "source_index": (int,), + "source_path": (str,), + "type": (str,), + } + attribute_map = { + "data_type": "data_type", + "error_messages": "error_messages", + "init_config": "init_config", + "instance_config": "instance_config", + "is_custom_check": "is_custom_check", + "is_default": "is_default", + "is_init": "is_init", + "log_config": "log_config", + "name": "name", + "pod_count": "pod_count", + "source_index": "source_index", + "source_path": "source_path", + "type": "type", + } + + def __init__(self_, data_type: Union[str, UnsetType]=unset, error_messages: Union[List[str], UnsetType]=unset, init_config: Union[str, UnsetType]=unset, instance_config: Union[str, UnsetType]=unset, is_custom_check: Union[bool, UnsetType]=unset, is_default: Union[bool, UnsetType]=unset, is_init: Union[bool, UnsetType]=unset, log_config: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, pod_count: Union[int, UnsetType]=unset, source_index: Union[int, UnsetType]=unset, source_path: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Detailed information about a single integration. + + :param data_type: Type of data collected, such as metrics or logs. + :type data_type: str, optional + + :param error_messages: Error messages if the integration has issues. + :type error_messages: [str], optional + + :param init_config: Initialization configuration (YAML format). + :type init_config: str, optional + + :param instance_config: Instance-specific configuration (YAML format). + :type instance_config: str, optional + + :param is_custom_check: Whether this is a custom integration. + :type is_custom_check: bool, optional + + :param is_default: Whether this is a default integration instance. + :type is_default: bool, optional + + :param is_init: Whether this integration configuration is an init config. + :type is_init: bool, optional + + :param log_config: Log collection configuration (YAML format). + :type log_config: str, optional + + :param name: Name of the integration instance. + :type name: str, optional + + :param pod_count: Number of pods running this integration. Absent from the response when the count is zero. + :type pod_count: int, optional + + :param source_index: Index in the configuration file. + :type source_index: int, optional + + :param source_path: Path to the configuration file. + :type source_path: str, optional + + :param type: Integration type. + :type type: str, optional + """ + if data_type is not unset: + kwargs["data_type"] = data_type + if error_messages is not unset: + kwargs["error_messages"] = error_messages + if init_config is not unset: + kwargs["init_config"] = init_config + if instance_config is not unset: + kwargs["instance_config"] = instance_config + if is_custom_check is not unset: + kwargs["is_custom_check"] = is_custom_check + if is_default is not unset: + kwargs["is_default"] = is_default + if is_init is not unset: + kwargs["is_init"] = is_init + if log_config is not unset: + kwargs["log_config"] = log_config + if name is not unset: + kwargs["name"] = name + if pod_count is not unset: + kwargs["pod_count"] = pod_count + if source_index is not unset: + kwargs["source_index"] = source_index + if source_path is not unset: + kwargs["source_path"] = source_path + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_integrations_by_status_v2.py b/datadog_api_client/v2/model/fleet_integrations_by_status_v2.py new file mode 100644 index 0000000000..a6bf84a073 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_integrations_by_status_v2.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_configuration_file_v2 import FleetConfigurationFileV2 + from datadog_api_client.v2.model.fleet_integration_details_v2 import FleetIntegrationDetailsV2 + from datadog_api_client.v2.model.fleet_detected_integration import FleetDetectedIntegration + +class FleetIntegrationsByStatusV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_configuration_file_v2 import FleetConfigurationFileV2 + from datadog_api_client.v2.model.fleet_integration_details_v2 import FleetIntegrationDetailsV2 + from datadog_api_client.v2.model.fleet_detected_integration import FleetDetectedIntegration + return { + "configuration_files": ([FleetConfigurationFileV2],), + "error_integrations": ([FleetIntegrationDetailsV2],), + "missing_integrations": ([FleetDetectedIntegration],), + "warning_integrations": ([FleetIntegrationDetailsV2],), + "working_integrations": ([FleetIntegrationDetailsV2],), + } + attribute_map = { + "configuration_files": "configuration_files", + "error_integrations": "error_integrations", + "missing_integrations": "missing_integrations", + "warning_integrations": "warning_integrations", + "working_integrations": "working_integrations", + } + + def __init__(self_, configuration_files: Union[List[FleetConfigurationFileV2], UnsetType]=unset, error_integrations: Union[List[FleetIntegrationDetailsV2], UnsetType]=unset, missing_integrations: Union[List[FleetDetectedIntegration], UnsetType]=unset, warning_integrations: Union[List[FleetIntegrationDetailsV2], UnsetType]=unset, working_integrations: Union[List[FleetIntegrationDetailsV2], UnsetType]=unset, **kwargs): + """ + Integrations organized by their status. + + :param configuration_files: Configuration files for integrations. + :type configuration_files: [FleetConfigurationFileV2], optional + + :param error_integrations: Integrations with errors. + :type error_integrations: [FleetIntegrationDetailsV2], optional + + :param missing_integrations: Detected but not configured integrations. + :type missing_integrations: [FleetDetectedIntegration], optional + + :param warning_integrations: Integrations with warnings. + :type warning_integrations: [FleetIntegrationDetailsV2], optional + + :param working_integrations: Integrations that are working correctly. + :type working_integrations: [FleetIntegrationDetailsV2], optional + """ + if configuration_files is not unset: + kwargs["configuration_files"] = configuration_files + if error_integrations is not unset: + kwargs["error_integrations"] = error_integrations + if missing_integrations is not unset: + kwargs["missing_integrations"] = missing_integrations + if warning_integrations is not unset: + kwargs["warning_integrations"] = warning_integrations + if working_integrations is not unset: + kwargs["working_integrations"] = working_integrations + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_otel_collector.py b/datadog_api_client/v2/model/fleet_otel_collector.py new file mode 100644 index 0000000000..05ece22adb --- /dev/null +++ b/datadog_api_client/v2/model/fleet_otel_collector.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetOtelCollector(ModelNormal): + + def __init__(self_, **kwargs): + """ + OpenTelemetry collector information. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_otel_collector_configuration_v2.py b/datadog_api_client/v2/model/fleet_otel_collector_configuration_v2.py new file mode 100644 index 0000000000..eeeac10a69 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_otel_collector_configuration_v2.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetOtelCollectorConfigurationV2(ModelNormal): + @cached_property + def openapi_types(_): + return { + "collector_id": (str,), + "compiled_configuration": (str,), + "distribution": (str,), + } + attribute_map = { + "collector_id": "collector_id", + "compiled_configuration": "compiled_configuration", + "distribution": "distribution", + } + + def __init__(self_, collector_id: Union[str, UnsetType]=unset, compiled_configuration: Union[str, UnsetType]=unset, distribution: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration for a single OpenTelemetry collector associated with the agent. + + :param collector_id: The unique identifier of the OpenTelemetry collector. + :type collector_id: str, optional + + :param compiled_configuration: The final compiled configuration of the OpenTelemetry collector. + :type compiled_configuration: str, optional + + :param distribution: The distribution of the OpenTelemetry collector. + :type distribution: str, optional + """ + if collector_id is not unset: + kwargs["collector_id"] = collector_id + if compiled_configuration is not unset: + kwargs["compiled_configuration"] = compiled_configuration + if distribution is not unset: + kwargs["distribution"] = distribution + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_schedule.py b/datadog_api_client/v2/model/fleet_schedule.py new file mode 100644 index 0000000000..69de144dc1 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_attributes import FleetScheduleAttributes + from datadog_api_client.v2.model.fleet_schedule_resource_type import FleetScheduleResourceType + +class FleetSchedule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_attributes import FleetScheduleAttributes + from datadog_api_client.v2.model.fleet_schedule_resource_type import FleetScheduleResourceType + return { + "attributes": (FleetScheduleAttributes,), + "id": (str,), + "type": (FleetScheduleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetScheduleAttributes, id: str, type: FleetScheduleResourceType, **kwargs): + """ + A schedule that automatically creates deployments based on a recurrence rule. + + :param attributes: Attributes of a schedule in the response. + :type attributes: FleetScheduleAttributes + + :param id: Unique identifier for the schedule. + :type id: str + + :param type: The type of schedule resource. + :type type: FleetScheduleResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_schedule_attributes.py b/datadog_api_client/v2/model/fleet_schedule_attributes.py new file mode 100644 index 0000000000..42cd7324d8 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_attributes.py @@ -0,0 +1,122 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_recurrence_rule import FleetScheduleRecurrenceRule + from datadog_api_client.v2.model.fleet_schedule_status import FleetScheduleStatus + +class FleetScheduleAttributes(ModelNormal): + validations = { + "version_to_latest": { + "inclusive_maximum": 2, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_recurrence_rule import FleetScheduleRecurrenceRule + from datadog_api_client.v2.model.fleet_schedule_status import FleetScheduleStatus + return { + "created_at_unix": (int,), + "created_by": (str,), + "name": (str,), + "query": (str,), + "rule": (FleetScheduleRecurrenceRule,), + "status": (FleetScheduleStatus,), + "updated_at_unix": (int,), + "updated_by": (str,), + "version_to_latest": (int,), + } + attribute_map = { + "created_at_unix": "created_at_unix", + "created_by": "created_by", + "name": "name", + "query": "query", + "rule": "rule", + "status": "status", + "updated_at_unix": "updated_at_unix", + "updated_by": "updated_by", + "version_to_latest": "version_to_latest", + } + + def __init__(self_, created_at_unix: Union[int, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, rule: Union[FleetScheduleRecurrenceRule, UnsetType]=unset, status: Union[FleetScheduleStatus, UnsetType]=unset, updated_at_unix: Union[int, UnsetType]=unset, updated_by: Union[str, UnsetType]=unset, version_to_latest: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of a schedule in the response. + + :param created_at_unix: Unix timestamp (seconds since epoch) when the schedule was created. + :type created_at_unix: int, optional + + :param created_by: User handle of the person who created the schedule. + :type created_by: str, optional + + :param name: Human-readable name for the schedule. + :type name: str, optional + + :param query: Query used to filter and select target hosts for scheduled deployments. Uses the Datadog query syntax. + :type query: str, optional + + :param rule: Defines the recurrence pattern for the schedule. Specifies when deployments should be + automatically triggered based on maintenance windows. + :type rule: FleetScheduleRecurrenceRule, optional + + :param status: The status of the schedule. + + * ``active`` : The schedule is active and will create deployments according to its recurrence rule. + * ``inactive`` : The schedule is inactive and will not create any deployments. + :type status: FleetScheduleStatus, optional + + :param updated_at_unix: Unix timestamp (seconds since epoch) when the schedule was last updated. + :type updated_at_unix: int, optional + + :param updated_by: User handle of the person who last updated the schedule. + :type updated_by: str, optional + + :param version_to_latest: Number of major versions behind the latest to target for upgrades. + + * 0: Always upgrade to the latest version + * 1: Upgrade to latest minus 1 major version + * 2: Upgrade to latest minus 2 major versions + Maximum value is 2. + :type version_to_latest: int, optional + """ + if created_at_unix is not unset: + kwargs["created_at_unix"] = created_at_unix + if created_by is not unset: + kwargs["created_by"] = created_by + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if rule is not unset: + kwargs["rule"] = rule + if status is not unset: + kwargs["status"] = status + if updated_at_unix is not unset: + kwargs["updated_at_unix"] = updated_at_unix + if updated_by is not unset: + kwargs["updated_by"] = updated_by + if version_to_latest is not unset: + kwargs["version_to_latest"] = version_to_latest + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_schedule_create.py b/datadog_api_client/v2/model/fleet_schedule_create.py new file mode 100644 index 0000000000..89b7be9c25 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_create_attributes import FleetScheduleCreateAttributes + from datadog_api_client.v2.model.fleet_schedule_resource_type import FleetScheduleResourceType + +class FleetScheduleCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_create_attributes import FleetScheduleCreateAttributes + from datadog_api_client.v2.model.fleet_schedule_resource_type import FleetScheduleResourceType + return { + "attributes": (FleetScheduleCreateAttributes,), + "type": (FleetScheduleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: FleetScheduleCreateAttributes, type: FleetScheduleResourceType, **kwargs): + """ + Data for creating a new schedule. + + :param attributes: Attributes for creating a new schedule. + :type attributes: FleetScheduleCreateAttributes + + :param type: The type of schedule resource. + :type type: FleetScheduleResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_schedule_create_attributes.py b/datadog_api_client/v2/model/fleet_schedule_create_attributes.py new file mode 100644 index 0000000000..da55236a45 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_create_attributes.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_recurrence_rule import FleetScheduleRecurrenceRule + from datadog_api_client.v2.model.fleet_schedule_status import FleetScheduleStatus + +class FleetScheduleCreateAttributes(ModelNormal): + validations = { + "version_to_latest": { + "inclusive_maximum": 2, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_recurrence_rule import FleetScheduleRecurrenceRule + from datadog_api_client.v2.model.fleet_schedule_status import FleetScheduleStatus + return { + "name": (str,), + "query": (str,), + "rule": (FleetScheduleRecurrenceRule,), + "status": (FleetScheduleStatus,), + "version_to_latest": (int,), + } + attribute_map = { + "name": "name", + "query": "query", + "rule": "rule", + "status": "status", + "version_to_latest": "version_to_latest", + } + + def __init__(self_, name: str, query: str, rule: FleetScheduleRecurrenceRule, status: Union[FleetScheduleStatus, UnsetType]=unset, version_to_latest: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for creating a new schedule. + + :param name: Human-readable name for the schedule. + :type name: str + + :param query: Query used to filter and select target hosts for scheduled deployments. Uses the Datadog query syntax. + :type query: str + + :param rule: Defines the recurrence pattern for the schedule. Specifies when deployments should be + automatically triggered based on maintenance windows. + :type rule: FleetScheduleRecurrenceRule + + :param status: The status of the schedule. + + * ``active`` : The schedule is active and will create deployments according to its recurrence rule. + * ``inactive`` : The schedule is inactive and will not create any deployments. + :type status: FleetScheduleStatus, optional + + :param version_to_latest: Number of major versions behind the latest to target for upgrades. + + * 0: Always upgrade to the latest version (default) + * 1: Upgrade to latest minus 1 major version + * 2: Upgrade to latest minus 2 major versions + Maximum value is 2. + :type version_to_latest: int, optional + """ + if status is not unset: + kwargs["status"] = status + if version_to_latest is not unset: + kwargs["version_to_latest"] = version_to_latest + super().__init__(kwargs) + + + self_.name = name + self_.query = query + self_.rule = rule diff --git a/datadog_api_client/v2/model/fleet_schedule_create_request.py b/datadog_api_client/v2/model/fleet_schedule_create_request.py new file mode 100644 index 0000000000..40bd644942 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_create import FleetScheduleCreate + +class FleetScheduleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_create import FleetScheduleCreate + return { + "data": (FleetScheduleCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetScheduleCreate, **kwargs): + """ + Request payload for creating a new schedule. + + :param data: Data for creating a new schedule. + :type data: FleetScheduleCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_schedule_patch.py b/datadog_api_client/v2/model/fleet_schedule_patch.py new file mode 100644 index 0000000000..b5b733f008 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_patch.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_patch_attributes import FleetSchedulePatchAttributes + from datadog_api_client.v2.model.fleet_schedule_resource_type import FleetScheduleResourceType + +class FleetSchedulePatch(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_patch_attributes import FleetSchedulePatchAttributes + from datadog_api_client.v2.model.fleet_schedule_resource_type import FleetScheduleResourceType + return { + "attributes": (FleetSchedulePatchAttributes,), + "type": (FleetScheduleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: FleetScheduleResourceType, attributes: Union[FleetSchedulePatchAttributes, UnsetType]=unset, **kwargs): + """ + Data for partially updating a schedule. + + :param attributes: Attributes for partially updating a schedule. All fields are optional. + :type attributes: FleetSchedulePatchAttributes, optional + + :param type: The type of schedule resource. + :type type: FleetScheduleResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_schedule_patch_attributes.py b/datadog_api_client/v2/model/fleet_schedule_patch_attributes.py new file mode 100644 index 0000000000..ce748ffb81 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_patch_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_recurrence_rule import FleetScheduleRecurrenceRule + from datadog_api_client.v2.model.fleet_schedule_status import FleetScheduleStatus + +class FleetSchedulePatchAttributes(ModelNormal): + validations = { + "version_to_latest": { + "inclusive_maximum": 2, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_recurrence_rule import FleetScheduleRecurrenceRule + from datadog_api_client.v2.model.fleet_schedule_status import FleetScheduleStatus + return { + "name": (str,), + "query": (str,), + "rule": (FleetScheduleRecurrenceRule,), + "status": (FleetScheduleStatus,), + "version_to_latest": (int,), + } + attribute_map = { + "name": "name", + "query": "query", + "rule": "rule", + "status": "status", + "version_to_latest": "version_to_latest", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, rule: Union[FleetScheduleRecurrenceRule, UnsetType]=unset, status: Union[FleetScheduleStatus, UnsetType]=unset, version_to_latest: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for partially updating a schedule. All fields are optional. + + :param name: Human-readable name for the schedule. + :type name: str, optional + + :param query: Query used to filter and select target hosts for scheduled deployments. Uses the Datadog query syntax. + :type query: str, optional + + :param rule: Defines the recurrence pattern for the schedule. Specifies when deployments should be + automatically triggered based on maintenance windows. + :type rule: FleetScheduleRecurrenceRule, optional + + :param status: The status of the schedule. + + * ``active`` : The schedule is active and will create deployments according to its recurrence rule. + * ``inactive`` : The schedule is inactive and will not create any deployments. + :type status: FleetScheduleStatus, optional + + :param version_to_latest: Number of major versions behind the latest to target for upgrades. + + * 0: Always upgrade to the latest version + * 1: Upgrade to latest minus 1 major version + * 2: Upgrade to latest minus 2 major versions + Maximum value is 2. + :type version_to_latest: int, optional + """ + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if rule is not unset: + kwargs["rule"] = rule + if status is not unset: + kwargs["status"] = status + if version_to_latest is not unset: + kwargs["version_to_latest"] = version_to_latest + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_schedule_patch_request.py b/datadog_api_client/v2/model/fleet_schedule_patch_request.py new file mode 100644 index 0000000000..f1f3ccf304 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_patch import FleetSchedulePatch + +class FleetSchedulePatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_patch import FleetSchedulePatch + return { + "data": (FleetSchedulePatch,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetSchedulePatch, **kwargs): + """ + Request payload for partially updating a schedule. + + :param data: Data for partially updating a schedule. + :type data: FleetSchedulePatch + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_schedule_recurrence_rule.py b/datadog_api_client/v2/model/fleet_schedule_recurrence_rule.py new file mode 100644 index 0000000000..0d821e5aef --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_recurrence_rule.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetScheduleRecurrenceRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "days_of_week": ([str],), + "maintenance_window_duration": (int,), + "start_maintenance_window": (str,), + "timezone": (str,), + } + attribute_map = { + "days_of_week": "days_of_week", + "maintenance_window_duration": "maintenance_window_duration", + "start_maintenance_window": "start_maintenance_window", + "timezone": "timezone", + } + + def __init__(self_, days_of_week: List[str], maintenance_window_duration: int, start_maintenance_window: str, timezone: str, **kwargs): + """ + Defines the recurrence pattern for the schedule. Specifies when deployments should be + automatically triggered based on maintenance windows. + + :param days_of_week: List of days of the week when the schedule should trigger. Valid values are: + "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun". + :type days_of_week: [str] + + :param maintenance_window_duration: Duration of the maintenance window in minutes. + :type maintenance_window_duration: int + + :param start_maintenance_window: Start time of the maintenance window in 24-hour clock format (HH:MM). + Deployments will be triggered at this time on the specified days. + :type start_maintenance_window: str + + :param timezone: Timezone for the schedule in IANA Time Zone Database format (e.g., "America/New_York", "UTC"). + :type timezone: str + """ + super().__init__(kwargs) + + + self_.days_of_week = days_of_week + self_.maintenance_window_duration = maintenance_window_duration + self_.start_maintenance_window = start_maintenance_window + self_.timezone = timezone diff --git a/datadog_api_client/v2/model/fleet_schedule_resource_type.py b/datadog_api_client/v2/model/fleet_schedule_resource_type.py new file mode 100644 index 0000000000..1884101ddb --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FleetScheduleResourceType(ModelSimple): + """ + The type of schedule resource. + + :param value: If omitted defaults to "schedule". Must be one of ["schedule"]. + :type value: str + """ + + allowed_values = { + "schedule", + } + SCHEDULE: ClassVar["FleetScheduleResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FleetScheduleResourceType.SCHEDULE = FleetScheduleResourceType("schedule") diff --git a/datadog_api_client/v2/model/fleet_schedule_response.py b/datadog_api_client/v2/model/fleet_schedule_response.py new file mode 100644 index 0000000000..ee859b3b8f --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule import FleetSchedule + +class FleetScheduleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule import FleetSchedule + return { + "data": (FleetSchedule,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[FleetSchedule, UnsetType]=unset, **kwargs): + """ + Response containing a single schedule. + + :param data: A schedule that automatically creates deployments based on a recurrence rule. + :type data: FleetSchedule, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_schedule_status.py b/datadog_api_client/v2/model/fleet_schedule_status.py new file mode 100644 index 0000000000..455b949829 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_status.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FleetScheduleStatus(ModelSimple): + """ + The status of the schedule. + - `active`: The schedule is active and will create deployments according to its recurrence rule. + - `inactive`: The schedule is inactive and will not create any deployments. + + :param value: Must be one of ["active", "inactive"]. + :type value: str + """ + + allowed_values = { + "active", + "inactive", + } + ACTIVE: ClassVar["FleetScheduleStatus"] + INACTIVE: ClassVar["FleetScheduleStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FleetScheduleStatus.ACTIVE = FleetScheduleStatus("active") +FleetScheduleStatus.INACTIVE = FleetScheduleStatus("inactive") diff --git a/datadog_api_client/v2/model/fleet_schedule_v2.py b/datadog_api_client/v2/model/fleet_schedule_v2.py new file mode 100644 index 0000000000..cff06a6b4d --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_v2.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_v2_attributes import FleetScheduleV2Attributes + from datadog_api_client.v2.model.fleet_schedule_resource_type import FleetScheduleResourceType + +class FleetScheduleV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_v2_attributes import FleetScheduleV2Attributes + from datadog_api_client.v2.model.fleet_schedule_resource_type import FleetScheduleResourceType + return { + "attributes": (FleetScheduleV2Attributes,), + "id": (str,), + "type": (FleetScheduleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetScheduleV2Attributes, id: str, type: FleetScheduleResourceType, **kwargs): + """ + A fleet upgrade schedule resource in the v2 API response. + + :param attributes: Attributes of a fleet schedule in the v2 API response. + :type attributes: FleetScheduleV2Attributes + + :param id: Unique identifier for the schedule. + :type id: str + + :param type: The type of schedule resource. + :type type: FleetScheduleResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_schedule_v2_attributes.py b/datadog_api_client/v2/model/fleet_schedule_v2_attributes.py new file mode 100644 index 0000000000..d0849cc024 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_v2_attributes.py @@ -0,0 +1,148 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_v2_notification_rule import FleetScheduleV2NotificationRule + from datadog_api_client.v2.model.fleet_schedule_v2_recurrence_rule import FleetScheduleV2RecurrenceRule + from datadog_api_client.v2.model.fleet_schedule_status import FleetScheduleStatus + +class FleetScheduleV2Attributes(ModelNormal): + validations = { + "version_to_latest": { + "inclusive_maximum": 2, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_v2_notification_rule import FleetScheduleV2NotificationRule + from datadog_api_client.v2.model.fleet_schedule_v2_recurrence_rule import FleetScheduleV2RecurrenceRule + from datadog_api_client.v2.model.fleet_schedule_status import FleetScheduleStatus + return { + "created_at": (str,), + "created_by": (str,), + "is_default": (bool,), + "name": (str,), + "next_run": (str,), + "notification_rule": (FleetScheduleV2NotificationRule,), + "query": (str,), + "rule": (FleetScheduleV2RecurrenceRule,), + "status": (FleetScheduleStatus,), + "updated_at": (str,), + "updated_by": (str,), + "version_to_latest": (int,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "is_default": "is_default", + "name": "name", + "next_run": "next_run", + "notification_rule": "notification_rule", + "query": "query", + "rule": "rule", + "status": "status", + "updated_at": "updated_at", + "updated_by": "updated_by", + "version_to_latest": "version_to_latest", + } + + def __init__(self_, created_at: Union[str, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, is_default: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, next_run: Union[str, UnsetType]=unset, notification_rule: Union[FleetScheduleV2NotificationRule, UnsetType]=unset, query: Union[str, UnsetType]=unset, rule: Union[FleetScheduleV2RecurrenceRule, UnsetType]=unset, status: Union[FleetScheduleStatus, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, updated_by: Union[str, UnsetType]=unset, version_to_latest: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of a fleet schedule in the v2 API response. + + :param created_at: RFC3339 timestamp when the schedule was created. + :type created_at: str, optional + + :param created_by: User handle of the person who created the schedule. + :type created_by: str, optional + + :param is_default: Whether this is the default schedule for the organization. + :type is_default: bool, optional + + :param name: Human-readable name for the schedule. + :type name: str, optional + + :param next_run: RFC3339 timestamp of the next scheduled maintenance window start time. + Absent when the next run time cannot be computed. + :type next_run: str, optional + + :param notification_rule: Notification configuration attached to a schedule. + + Included when available. If the notification rule cannot be retrieved, this field is + omitted and the schedule is still returned. If the notification rule is retrieved but its + handles cannot be resolved, it is still included with an empty ``handles`` array. + :type notification_rule: FleetScheduleV2NotificationRule, optional + + :param query: Query used to filter and select target hosts for scheduled deployments. + :type query: str, optional + + :param rule: Defines the recurrence pattern for the schedule. + :type rule: FleetScheduleV2RecurrenceRule, optional + + :param status: The status of the schedule. + + * ``active`` : The schedule is active and will create deployments according to its recurrence rule. + * ``inactive`` : The schedule is inactive and will not create any deployments. + :type status: FleetScheduleStatus, optional + + :param updated_at: RFC3339 timestamp when the schedule was last updated. + :type updated_at: str, optional + + :param updated_by: User handle of the person who last updated the schedule. + :type updated_by: str, optional + + :param version_to_latest: Number of major versions behind the latest to target for upgrades. + + * 0: Always upgrade to the latest version. + * 1: Upgrade to latest minus 1 major version. + * 2: Upgrade to latest minus 2 major versions. + :type version_to_latest: int, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if is_default is not unset: + kwargs["is_default"] = is_default + if name is not unset: + kwargs["name"] = name + if next_run is not unset: + kwargs["next_run"] = next_run + if notification_rule is not unset: + kwargs["notification_rule"] = notification_rule + if query is not unset: + kwargs["query"] = query + if rule is not unset: + kwargs["rule"] = rule + if status is not unset: + kwargs["status"] = status + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updated_by is not unset: + kwargs["updated_by"] = updated_by + if version_to_latest is not unset: + kwargs["version_to_latest"] = version_to_latest + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_schedule_v2_notification_rule.py b/datadog_api_client/v2/model/fleet_schedule_v2_notification_rule.py new file mode 100644 index 0000000000..fc9b7b0c9f --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_v2_notification_rule.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetScheduleV2NotificationRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handles": ([str],), + "tags": ([str],), + } + attribute_map = { + "handles": "handles", + "tags": "tags", + } + + def __init__(self_, handles: Union[List[str], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Notification configuration attached to a schedule. + + Included when available. If the notification rule cannot be retrieved, this field is + omitted and the schedule is still returned. If the notification rule is retrieved but its + handles cannot be resolved, it is still included with an empty ``handles`` array. + + :param handles: Notification handles (for example, Slack channels or PagerDuty integrations). + :type handles: [str], optional + + :param tags: Tags associated with the notification rule. + :type tags: [str], optional + """ + if handles is not unset: + kwargs["handles"] = handles + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_schedule_v2_recurrence_rule.py b/datadog_api_client/v2/model/fleet_schedule_v2_recurrence_rule.py new file mode 100644 index 0000000000..41f6746990 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_v2_recurrence_rule.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetScheduleV2RecurrenceRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "days_of_week": ([str],), + "interval": (int,), + "maintenance_window_duration": (int,), + "start_maintenance_window": (str,), + "timezone": (str,), + } + attribute_map = { + "days_of_week": "days_of_week", + "interval": "interval", + "maintenance_window_duration": "maintenance_window_duration", + "start_maintenance_window": "start_maintenance_window", + "timezone": "timezone", + } + + def __init__(self_, days_of_week: Union[List[str], UnsetType]=unset, interval: Union[int, UnsetType]=unset, maintenance_window_duration: Union[int, UnsetType]=unset, start_maintenance_window: Union[str, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Defines the recurrence pattern for the schedule. + + :param days_of_week: Days of the week when the schedule triggers. Valid values are + "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun". + :type days_of_week: [str], optional + + :param interval: Interval between schedule runs in weeks. 1 means the schedule runs every week + on the specified days. Higher values repeat every N weeks. + :type interval: int, optional + + :param maintenance_window_duration: Duration of the maintenance window in minutes. + :type maintenance_window_duration: int, optional + + :param start_maintenance_window: Start time of the maintenance window in 24-hour clock format (HHMM). + Deployments are triggered at this time on the specified days. + :type start_maintenance_window: str, optional + + :param timezone: Timezone in IANA Time Zone Database format. + :type timezone: str, optional + """ + if days_of_week is not unset: + kwargs["days_of_week"] = days_of_week + if interval is not unset: + kwargs["interval"] = interval + if maintenance_window_duration is not unset: + kwargs["maintenance_window_duration"] = maintenance_window_duration + if start_maintenance_window is not unset: + kwargs["start_maintenance_window"] = start_maintenance_window + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_schedule_v2_response.py b/datadog_api_client/v2/model/fleet_schedule_v2_response.py new file mode 100644 index 0000000000..984b9fd01e --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedule_v2_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_v2 import FleetScheduleV2 + +class FleetScheduleV2Response(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_v2 import FleetScheduleV2 + return { + "data": (FleetScheduleV2,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FleetScheduleV2, **kwargs): + """ + Response containing a single fleet schedule. + + :param data: A fleet upgrade schedule resource in the v2 API response. + :type data: FleetScheduleV2 + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_schedules_v2_page.py b/datadog_api_client/v2/model/fleet_schedules_v2_page.py new file mode 100644 index 0000000000..549b3e9068 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedules_v2_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetSchedulesV2Page(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "total_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination details for the v2 list of schedules. + + :param total_count: Total number of schedules returned. + :type total_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_schedules_v2_response.py b/datadog_api_client/v2/model/fleet_schedules_v2_response.py new file mode 100644 index 0000000000..ae8a3aa408 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedules_v2_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedule_v2 import FleetScheduleV2 + from datadog_api_client.v2.model.fleet_schedules_v2_response_meta import FleetSchedulesV2ResponseMeta + +class FleetSchedulesV2Response(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedule_v2 import FleetScheduleV2 + from datadog_api_client.v2.model.fleet_schedules_v2_response_meta import FleetSchedulesV2ResponseMeta + return { + "data": ([FleetScheduleV2],), + "meta": (FleetSchedulesV2ResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[FleetScheduleV2], meta: Union[FleetSchedulesV2ResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of fleet schedules. + + :param data: Array of schedules for the organization. + :type data: [FleetScheduleV2] + + :param meta: Metadata for the v2 list of schedules response. + :type meta: FleetSchedulesV2ResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_schedules_v2_response_meta.py b/datadog_api_client/v2/model/fleet_schedules_v2_response_meta.py new file mode 100644 index 0000000000..b67a4f6dc2 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_schedules_v2_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_schedules_v2_page import FleetSchedulesV2Page + +class FleetSchedulesV2ResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_schedules_v2_page import FleetSchedulesV2Page + return { + "page": (FleetSchedulesV2Page,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[FleetSchedulesV2Page, UnsetType]=unset, **kwargs): + """ + Metadata for the v2 list of schedules response. + + :param page: Pagination details for the v2 list of schedules. + :type page: FleetSchedulesV2Page, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_tracer_attributes.py b/datadog_api_client/v2/model/fleet_tracer_attributes.py new file mode 100644 index 0000000000..de10b91a46 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_tracer_attributes.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetTracerAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "env": (str,), + "hostname": (str,), + "language": (str,), + "language_version": (str,), + "remote_config_status": (str,), + "runtime_ids": ([str],), + "service": (str,), + "service_hostname": (str,), + "service_version": (str,), + "tracer_version": (str,), + } + attribute_map = { + "env": "env", + "hostname": "hostname", + "language": "language", + "language_version": "language_version", + "remote_config_status": "remote_config_status", + "runtime_ids": "runtime_ids", + "service": "service", + "service_hostname": "service_hostname", + "service_version": "service_version", + "tracer_version": "tracer_version", + } + + def __init__(self_, env: Union[str, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, language: Union[str, UnsetType]=unset, language_version: Union[str, UnsetType]=unset, remote_config_status: Union[str, UnsetType]=unset, runtime_ids: Union[List[str], UnsetType]=unset, service: Union[str, UnsetType]=unset, service_hostname: Union[str, UnsetType]=unset, service_version: Union[str, UnsetType]=unset, tracer_version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a fleet tracer representing a service instance reporting telemetry. + + :param env: The environment the tracer is reporting from. + :type env: str, optional + + :param hostname: The hostname where the tracer is running. + :type hostname: str, optional + + :param language: The programming language of the traced application. + :type language: str, optional + + :param language_version: The version of the programming language runtime. + :type language_version: str, optional + + :param remote_config_status: The remote configuration status of the tracer. + :type remote_config_status: str, optional + + :param runtime_ids: Runtime identifiers for the tracer instances. + :type runtime_ids: [str], optional + + :param service: The telemetry-derived service name reported by the tracer. + :type service: str, optional + + :param service_hostname: The service hostname reported by the tracer. + :type service_hostname: str, optional + + :param service_version: The version of the traced service. + :type service_version: str, optional + + :param tracer_version: The version of the Datadog tracer library. + :type tracer_version: str, optional + """ + if env is not unset: + kwargs["env"] = env + if hostname is not unset: + kwargs["hostname"] = hostname + if language is not unset: + kwargs["language"] = language + if language_version is not unset: + kwargs["language_version"] = language_version + if remote_config_status is not unset: + kwargs["remote_config_status"] = remote_config_status + if runtime_ids is not unset: + kwargs["runtime_ids"] = runtime_ids + if service is not unset: + kwargs["service"] = service + if service_hostname is not unset: + kwargs["service_hostname"] = service_hostname + if service_version is not unset: + kwargs["service_version"] = service_version + if tracer_version is not unset: + kwargs["tracer_version"] = tracer_version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_tracers_response.py b/datadog_api_client/v2/model/fleet_tracers_response.py new file mode 100644 index 0000000000..719ab331ec --- /dev/null +++ b/datadog_api_client/v2/model/fleet_tracers_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_tracers_response_data import FleetTracersResponseData + from datadog_api_client.v2.model.fleet_tracers_response_meta import FleetTracersResponseMeta + +class FleetTracersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_tracers_response_data import FleetTracersResponseData + from datadog_api_client.v2.model.fleet_tracers_response_meta import FleetTracersResponseMeta + return { + "data": (FleetTracersResponseData,), + "meta": (FleetTracersResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: FleetTracersResponseData, meta: Union[FleetTracersResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a paginated list of fleet tracers. + + :param data: The response data containing status and tracers array. + :type data: FleetTracersResponseData + + :param meta: Metadata for the list of tracers response. + :type meta: FleetTracersResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/fleet_tracers_response_data.py b/datadog_api_client/v2/model/fleet_tracers_response_data.py new file mode 100644 index 0000000000..4465e04d0c --- /dev/null +++ b/datadog_api_client/v2/model/fleet_tracers_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_tracers_response_data_attributes import FleetTracersResponseDataAttributes + +class FleetTracersResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_tracers_response_data_attributes import FleetTracersResponseDataAttributes + return { + "attributes": (FleetTracersResponseDataAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FleetTracersResponseDataAttributes, id: str, type: str, **kwargs): + """ + The response data containing status and tracers array. + + :param attributes: Attributes of the fleet tracers response containing the list of tracers. + :type attributes: FleetTracersResponseDataAttributes + + :param id: Status identifier. + :type id: str + + :param type: Resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/fleet_tracers_response_data_attributes.py b/datadog_api_client/v2/model/fleet_tracers_response_data_attributes.py new file mode 100644 index 0000000000..1d4c84fe9d --- /dev/null +++ b/datadog_api_client/v2/model/fleet_tracers_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.fleet_tracer_attributes import FleetTracerAttributes + +class FleetTracersResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.fleet_tracer_attributes import FleetTracerAttributes + return { + "tracers": ([FleetTracerAttributes],), + } + attribute_map = { + "tracers": "tracers", + } + + def __init__(self_, tracers: Union[List[FleetTracerAttributes], UnsetType]=unset, **kwargs): + """ + Attributes of the fleet tracers response containing the list of tracers. + + :param tracers: Array of tracers matching the query criteria. + :type tracers: [FleetTracerAttributes], optional + """ + if tracers is not unset: + kwargs["tracers"] = tracers + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/fleet_tracers_response_meta.py b/datadog_api_client/v2/model/fleet_tracers_response_meta.py new file mode 100644 index 0000000000..6577bf12f3 --- /dev/null +++ b/datadog_api_client/v2/model/fleet_tracers_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FleetTracersResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_filtered_count": (int,), + } + attribute_map = { + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata for the list of tracers response. + + :param total_filtered_count: Total number of tracers matching the filter criteria across all pages. + :type total_filtered_count: int, optional + """ + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/flutter_sourcemap_attributes.py b/datadog_api_client/v2/model/flutter_sourcemap_attributes.py new file mode 100644 index 0000000000..440d85bba5 --- /dev/null +++ b/datadog_api_client/v2/model/flutter_sourcemap_attributes.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FlutterSourcemapAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "arch": (str,), + "created_at": (datetime,), + "mapkind": (str,), + "service": (str,), + "size": (int,), + "variant": (str,), + "version": (str,), + } + attribute_map = { + "arch": "arch", + "created_at": "created_at", + "mapkind": "mapkind", + "service": "service", + "size": "size", + "variant": "variant", + "version": "version", + } + + def __init__(self_, created_at: datetime, mapkind: str, size: int, arch: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, variant: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a Flutter symbol file. + + :param arch: The target CPU architecture. + :type arch: str, optional + + :param created_at: The timestamp when the symbol file was created. + :type created_at: datetime + + :param mapkind: The type of source map. + :type mapkind: str + + :param service: The service name associated with the symbol file. + :type service: str, optional + + :param size: The size of the symbol file in bytes. + :type size: int + + :param variant: The build variant. + :type variant: str, optional + + :param version: The version of the service associated with the symbol file. + :type version: str, optional + """ + if arch is not unset: + kwargs["arch"] = arch + if service is not unset: + kwargs["service"] = service + if variant is not unset: + kwargs["variant"] = variant + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.created_at = created_at + self_.mapkind = mapkind + self_.size = size diff --git a/datadog_api_client/v2/model/flutter_sourcemap_data.py b/datadog_api_client/v2/model/flutter_sourcemap_data.py new file mode 100644 index 0000000000..782805b7fb --- /dev/null +++ b/datadog_api_client/v2/model/flutter_sourcemap_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.flutter_sourcemap_attributes import FlutterSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + +class FlutterSourcemapData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.flutter_sourcemap_attributes import FlutterSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + return { + "attributes": (FlutterSourcemapAttributes,), + "id": (str,), + "type": (SourcemapDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FlutterSourcemapAttributes, id: str, type: SourcemapDataType, **kwargs): + """ + Flutter symbol file data object. + + :param attributes: Attributes of a Flutter symbol file. + :type attributes: FlutterSourcemapAttributes + + :param id: The unique identifier of the source map. + :type id: str + + :param type: The resource type for source map objects. + :type type: SourcemapDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/form_data.py b/datadog_api_client/v2/model/form_data.py new file mode 100644 index 0000000000..612c8a97ae --- /dev/null +++ b/datadog_api_client/v2/model/form_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_data_attributes import FormDataAttributes + from datadog_api_client.v2.model.form_type import FormType + +class FormData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_data_attributes import FormDataAttributes + from datadog_api_client.v2.model.form_type import FormType + return { + "attributes": (FormDataAttributes,), + "id": (UUID,), + "type": (FormType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FormDataAttributes, id: UUID, type: FormType, **kwargs): + """ + A form resource object. + + :param attributes: The attributes of a form. + :type attributes: FormDataAttributes + + :param id: The ID of the form. + :type id: UUID + + :param type: The resource type for a form. + :type type: FormType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/form_data_attributes.py b/datadog_api_client/v2/model/form_data_attributes.py new file mode 100644 index 0000000000..22bae73a96 --- /dev/null +++ b/datadog_api_client/v2/model/form_data_attributes.py @@ -0,0 +1,152 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_datastore_config_attributes import FormDatastoreConfigAttributes + from datadog_api_client.v2.model.form_publication_attributes import FormPublicationAttributes + from datadog_api_client.v2.model.form_version_attributes import FormVersionAttributes + +class FormDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_datastore_config_attributes import FormDatastoreConfigAttributes + from datadog_api_client.v2.model.form_publication_attributes import FormPublicationAttributes + from datadog_api_client.v2.model.form_version_attributes import FormVersionAttributes + return { + "active": (bool,), + "anonymous": (bool,), + "created_at": (datetime,), + "datastore_config": (FormDatastoreConfigAttributes,), + "description": (str,), + "end_date": (datetime, none_type), + "has_submitted": (bool, none_type), + "idp_survey": (bool,), + "modified_at": (datetime,), + "name": (str,), + "org_id": (int,), + "publication": (FormPublicationAttributes,), + "self_service": (bool,), + "single_response": (bool,), + "user_id": (int,), + "user_uuid": (UUID,), + "version": (FormVersionAttributes,), + } + attribute_map = { + "active": "active", + "anonymous": "anonymous", + "created_at": "created_at", + "datastore_config": "datastore_config", + "description": "description", + "end_date": "end_date", + "has_submitted": "has_submitted", + "idp_survey": "idp_survey", + "modified_at": "modified_at", + "name": "name", + "org_id": "org_id", + "publication": "publication", + "self_service": "self_service", + "single_response": "single_response", + "user_id": "user_id", + "user_uuid": "user_uuid", + "version": "version", + } + + def __init__(self_, active: bool, anonymous: bool, created_at: datetime, datastore_config: FormDatastoreConfigAttributes, description: str, idp_survey: bool, modified_at: datetime, name: str, org_id: int, self_service: bool, single_response: bool, user_id: int, user_uuid: UUID, end_date: Union[datetime, none_type, UnsetType]=unset, has_submitted: Union[bool, none_type, UnsetType]=unset, publication: Union[FormPublicationAttributes, UnsetType]=unset, version: Union[FormVersionAttributes, UnsetType]=unset, **kwargs): + """ + The attributes of a form. + + :param active: Whether the form is currently active. + :type active: bool + + :param anonymous: Whether the form accepts anonymous submissions. + :type anonymous: bool + + :param created_at: The time at which the form was created. + :type created_at: datetime + + :param datastore_config: The datastore configuration for a form. + :type datastore_config: FormDatastoreConfigAttributes + + :param description: The description of the form. + :type description: str + + :param end_date: The date and time at which the form stops accepting responses. + :type end_date: datetime, none_type, optional + + :param has_submitted: Whether the current user has already submitted this form. Only present for forms with ``single_response`` set to ``true``. + :type has_submitted: bool, none_type, optional + + :param idp_survey: Whether the form is an IDP survey. + :type idp_survey: bool + + :param modified_at: The time at which the form was last modified. + :type modified_at: datetime + + :param name: The name of the form. + :type name: str + + :param org_id: The ID of the organization that owns this form. + :type org_id: int + + :param publication: The attributes of a form publication. + :type publication: FormPublicationAttributes, optional + + :param self_service: Whether the form is available in the self-service catalog. + :type self_service: bool + + :param single_response: Whether each user can only submit one response. + :type single_response: bool + + :param user_id: The ID of the user who created this form. + :type user_id: int + + :param user_uuid: The UUID of the user who created this form. + :type user_uuid: UUID + + :param version: The attributes of a form version. + :type version: FormVersionAttributes, optional + """ + if end_date is not unset: + kwargs["end_date"] = end_date + if has_submitted is not unset: + kwargs["has_submitted"] = has_submitted + if publication is not unset: + kwargs["publication"] = publication + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.active = active + self_.anonymous = anonymous + self_.created_at = created_at + self_.datastore_config = datastore_config + self_.description = description + self_.idp_survey = idp_survey + self_.modified_at = modified_at + self_.name = name + self_.org_id = org_id + self_.self_service = self_service + self_.single_response = single_response + self_.user_id = user_id + self_.user_uuid = user_uuid diff --git a/datadog_api_client/v2/model/form_data_definition.py b/datadog_api_client/v2/model/form_data_definition.py new file mode 100644 index 0000000000..f191cfe58d --- /dev/null +++ b/datadog_api_client/v2/model/form_data_definition.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_data_definition_type import FormDataDefinitionType + +class FormDataDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_data_definition_type import FormDataDefinitionType + return { + "description": (str,), + "properties": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "required": ([str],), + "title": (str,), + "type": (FormDataDefinitionType,), + } + attribute_map = { + "description": "description", + "properties": "properties", + "required": "required", + "title": "title", + "type": "type", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, properties: Union[Dict[str, Any], UnsetType]=unset, required: Union[List[str], UnsetType]=unset, title: Union[str, UnsetType]=unset, type: Union[FormDataDefinitionType, UnsetType]=unset, **kwargs): + """ + A JSON Schema definition that describes the form's data fields. + + :param description: A description shown to form respondents. + :type description: str, optional + + :param properties: A map of field names to their JSON Schema definitions. + :type properties: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param required: List of field names that must be answered. + :type required: [str], optional + + :param title: The title of the form schema. + :type title: str, optional + + :param type: The root schema type. + :type type: FormDataDefinitionType, optional + """ + if description is not unset: + kwargs["description"] = description + if properties is not unset: + kwargs["properties"] = properties + if required is not unset: + kwargs["required"] = required + if title is not unset: + kwargs["title"] = title + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/form_data_definition_type.py b/datadog_api_client/v2/model/form_data_definition_type.py new file mode 100644 index 0000000000..20fb8ce208 --- /dev/null +++ b/datadog_api_client/v2/model/form_data_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormDataDefinitionType(ModelSimple): + """ + The root schema type. + + :param value: If omitted defaults to "object". Must be one of ["object"]. + :type value: str + """ + + allowed_values = { + "object", + } + OBJECT: ClassVar["FormDataDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormDataDefinitionType.OBJECT = FormDataDefinitionType("object") diff --git a/datadog_api_client/v2/model/form_datastore_config_attributes.py b/datadog_api_client/v2/model/form_datastore_config_attributes.py new file mode 100644 index 0000000000..237b2f6399 --- /dev/null +++ b/datadog_api_client/v2/model/form_datastore_config_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FormDatastoreConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "datastore_id": (UUID,), + "primary_column_name": (str,), + "primary_key_generation_strategy": (str,), + } + attribute_map = { + "datastore_id": "datastore_id", + "primary_column_name": "primary_column_name", + "primary_key_generation_strategy": "primary_key_generation_strategy", + } + + def __init__(self_, datastore_id: UUID, primary_column_name: str, primary_key_generation_strategy: str, **kwargs): + """ + The datastore configuration for a form. + + :param datastore_id: The ID of the datastore. + :type datastore_id: UUID + + :param primary_column_name: The name of the primary column in the datastore. + :type primary_column_name: str + + :param primary_key_generation_strategy: The strategy used to generate primary keys in the datastore. + :type primary_key_generation_strategy: str + """ + super().__init__(kwargs) + + + self_.datastore_id = datastore_id + self_.primary_column_name = primary_column_name + self_.primary_key_generation_strategy = primary_key_generation_strategy diff --git a/datadog_api_client/v2/model/form_publication_attributes.py b/datadog_api_client/v2/model/form_publication_attributes.py new file mode 100644 index 0000000000..2abe97ab96 --- /dev/null +++ b/datadog_api_client/v2/model/form_publication_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FormPublicationAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "form_id": (UUID,), + "form_version": (int,), + "id": (str,), + "modified_at": (datetime,), + "org_id": (int,), + "publish_seq": (int,), + "user_id": (int,), + "user_uuid": (UUID,), + } + attribute_map = { + "created_at": "created_at", + "form_id": "form_id", + "form_version": "form_version", + "id": "id", + "modified_at": "modified_at", + "org_id": "org_id", + "publish_seq": "publish_seq", + "user_id": "user_id", + "user_uuid": "user_uuid", + } + + def __init__(self_, created_at: datetime, form_id: UUID, form_version: int, modified_at: datetime, org_id: int, publish_seq: int, user_id: int, user_uuid: UUID, id: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a form publication. + + :param created_at: The time at which the publication was created. + :type created_at: datetime + + :param form_id: The ID of the form. + :type form_id: UUID + + :param form_version: The version number that was published. + :type form_version: int + + :param id: The ID of the form publication. + :type id: str, optional + + :param modified_at: The time at which the publication was last modified. + :type modified_at: datetime + + :param org_id: The ID of the organization that owns this publication. + :type org_id: int + + :param publish_seq: The sequential publication number for this form. + :type publish_seq: int + + :param user_id: The ID of the user who created this publication. + :type user_id: int + + :param user_uuid: The UUID of the user who created this publication. + :type user_uuid: UUID + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.created_at = created_at + self_.form_id = form_id + self_.form_version = form_version + self_.modified_at = modified_at + self_.org_id = org_id + self_.publish_seq = publish_seq + self_.user_id = user_id + self_.user_uuid = user_uuid diff --git a/datadog_api_client/v2/model/form_publication_data.py b/datadog_api_client/v2/model/form_publication_data.py new file mode 100644 index 0000000000..d7402c7a0a --- /dev/null +++ b/datadog_api_client/v2/model/form_publication_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_publication_attributes import FormPublicationAttributes + from datadog_api_client.v2.model.form_publication_type import FormPublicationType + +class FormPublicationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_publication_attributes import FormPublicationAttributes + from datadog_api_client.v2.model.form_publication_type import FormPublicationType + return { + "attributes": (FormPublicationAttributes,), + "id": (str,), + "type": (FormPublicationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FormPublicationAttributes, id: str, type: FormPublicationType, **kwargs): + """ + A form publication resource object. + + :param attributes: The attributes of a form publication. + :type attributes: FormPublicationAttributes + + :param id: The ID of the form publication. + :type id: str + + :param type: The resource type for a form publication. + :type type: FormPublicationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/form_publication_response.py b/datadog_api_client/v2/model/form_publication_response.py new file mode 100644 index 0000000000..fcea4e1f26 --- /dev/null +++ b/datadog_api_client/v2/model/form_publication_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_publication_data import FormPublicationData + +class FormPublicationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_publication_data import FormPublicationData + return { + "data": (FormPublicationData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FormPublicationData, **kwargs): + """ + A response containing a single form publication. + + :param data: A form publication resource object. + :type data: FormPublicationData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/form_publication_type.py b/datadog_api_client/v2/model/form_publication_type.py new file mode 100644 index 0000000000..ee1698a954 --- /dev/null +++ b/datadog_api_client/v2/model/form_publication_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormPublicationType(ModelSimple): + """ + The resource type for a form publication. + + :param value: If omitted defaults to "form_publications". Must be one of ["form_publications"]. + :type value: str + """ + + allowed_values = { + "form_publications", + } + FORM_PUBLICATIONS: ClassVar["FormPublicationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormPublicationType.FORM_PUBLICATIONS = FormPublicationType("form_publications") diff --git a/datadog_api_client/v2/model/form_response.py b/datadog_api_client/v2/model/form_response.py new file mode 100644 index 0000000000..aabd6b9055 --- /dev/null +++ b/datadog_api_client/v2/model/form_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_data import FormData + +class FormResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_data import FormData + return { + "data": (FormData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FormData, **kwargs): + """ + A response containing a single form. + + :param data: A form resource object. + :type data: FormData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/form_trigger.py b/datadog_api_client/v2/model/form_trigger.py new file mode 100644 index 0000000000..d5e96786a6 --- /dev/null +++ b/datadog_api_client/v2/model/form_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FormTrigger(ModelNormal): + @cached_property + def openapi_types(_): + return { + "form_id": (str,), + } + attribute_map = { + "form_id": "formId", + } + + def __init__(self_, form_id: Union[str, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from a Form. + + :param form_id: The form UUID. + :type form_id: str, optional + """ + if form_id is not unset: + kwargs["form_id"] = form_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/form_trigger_wrapper.py b/datadog_api_client/v2/model/form_trigger_wrapper.py new file mode 100644 index 0000000000..1b0e2c9459 --- /dev/null +++ b/datadog_api_client/v2/model/form_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_trigger import FormTrigger + +class FormTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_trigger import FormTrigger + return { + "form_trigger": (FormTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "form_trigger": "formTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, form_trigger: FormTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Form-based trigger. + + :param form_trigger: Trigger a workflow from a Form. + :type form_trigger: FormTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.form_trigger = form_trigger diff --git a/datadog_api_client/v2/model/form_type.py b/datadog_api_client/v2/model/form_type.py new file mode 100644 index 0000000000..0f0ca8a21f --- /dev/null +++ b/datadog_api_client/v2/model/form_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormType(ModelSimple): + """ + The resource type for a form. + + :param value: If omitted defaults to "forms". Must be one of ["forms"]. + :type value: str + """ + + allowed_values = { + "forms", + } + FORMS: ClassVar["FormType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormType.FORMS = FormType("forms") diff --git a/datadog_api_client/v2/model/form_ui_definition.py b/datadog_api_client/v2/model/form_ui_definition.py new file mode 100644 index 0000000000..30d7ddd1db --- /dev/null +++ b/datadog_api_client/v2/model/form_ui_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_ui_definition_ui_theme import FormUiDefinitionUiTheme + +class FormUiDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_ui_definition_ui_theme import FormUiDefinitionUiTheme + return { + "ui_order": ([str],), + "ui_theme": (FormUiDefinitionUiTheme,), + } + attribute_map = { + "ui_order": "ui:order", + "ui_theme": "ui:theme", + } + + def __init__(self_, ui_order: Union[List[str], UnsetType]=unset, ui_theme: Union[FormUiDefinitionUiTheme, UnsetType]=unset, **kwargs): + """ + UI configuration for rendering form fields, including widget overrides, field ordering, and themes. + + :param ui_order: The order in which form fields are displayed. + :type ui_order: [str], optional + + :param ui_theme: The visual theme applied to the form. + :type ui_theme: FormUiDefinitionUiTheme, optional + """ + if ui_order is not unset: + kwargs["ui_order"] = ui_order + if ui_theme is not unset: + kwargs["ui_theme"] = ui_theme + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/form_ui_definition_ui_theme.py b/datadog_api_client/v2/model/form_ui_definition_ui_theme.py new file mode 100644 index 0000000000..e9bf7bad7f --- /dev/null +++ b/datadog_api_client/v2/model/form_ui_definition_ui_theme.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_ui_definition_ui_theme_primary_color import FormUiDefinitionUiThemePrimaryColor + +class FormUiDefinitionUiTheme(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_ui_definition_ui_theme_primary_color import FormUiDefinitionUiThemePrimaryColor + return { + "primary_color": (FormUiDefinitionUiThemePrimaryColor,), + } + attribute_map = { + "primary_color": "primaryColor", + } + + def __init__(self_, primary_color: Union[FormUiDefinitionUiThemePrimaryColor, UnsetType]=unset, **kwargs): + """ + The visual theme applied to the form. + + :param primary_color: The primary color of the form theme. + :type primary_color: FormUiDefinitionUiThemePrimaryColor, optional + """ + if primary_color is not unset: + kwargs["primary_color"] = primary_color + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/form_ui_definition_ui_theme_primary_color.py b/datadog_api_client/v2/model/form_ui_definition_ui_theme_primary_color.py new file mode 100644 index 0000000000..e3f4ca1351 --- /dev/null +++ b/datadog_api_client/v2/model/form_ui_definition_ui_theme_primary_color.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormUiDefinitionUiThemePrimaryColor(ModelSimple): + """ + The primary color of the form theme. + + :param value: Must be one of ["gray", "red", "orange", "yellow", "green", "light-blue", "dark-blue", "magenta", "indigo"]. + :type value: str + """ + + allowed_values = { + "gray", + "red", + "orange", + "yellow", + "green", + "light-blue", + "dark-blue", + "magenta", + "indigo", + } + GRAY: ClassVar["FormUiDefinitionUiThemePrimaryColor"] + RED: ClassVar["FormUiDefinitionUiThemePrimaryColor"] + ORANGE: ClassVar["FormUiDefinitionUiThemePrimaryColor"] + YELLOW: ClassVar["FormUiDefinitionUiThemePrimaryColor"] + GREEN: ClassVar["FormUiDefinitionUiThemePrimaryColor"] + LIGHT_BLUE: ClassVar["FormUiDefinitionUiThemePrimaryColor"] + DARK_BLUE: ClassVar["FormUiDefinitionUiThemePrimaryColor"] + MAGENTA: ClassVar["FormUiDefinitionUiThemePrimaryColor"] + INDIGO: ClassVar["FormUiDefinitionUiThemePrimaryColor"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormUiDefinitionUiThemePrimaryColor.GRAY = FormUiDefinitionUiThemePrimaryColor("gray") +FormUiDefinitionUiThemePrimaryColor.RED = FormUiDefinitionUiThemePrimaryColor("red") +FormUiDefinitionUiThemePrimaryColor.ORANGE = FormUiDefinitionUiThemePrimaryColor("orange") +FormUiDefinitionUiThemePrimaryColor.YELLOW = FormUiDefinitionUiThemePrimaryColor("yellow") +FormUiDefinitionUiThemePrimaryColor.GREEN = FormUiDefinitionUiThemePrimaryColor("green") +FormUiDefinitionUiThemePrimaryColor.LIGHT_BLUE = FormUiDefinitionUiThemePrimaryColor("light-blue") +FormUiDefinitionUiThemePrimaryColor.DARK_BLUE = FormUiDefinitionUiThemePrimaryColor("dark-blue") +FormUiDefinitionUiThemePrimaryColor.MAGENTA = FormUiDefinitionUiThemePrimaryColor("magenta") +FormUiDefinitionUiThemePrimaryColor.INDIGO = FormUiDefinitionUiThemePrimaryColor("indigo") diff --git a/datadog_api_client/v2/model/form_update_attributes.py b/datadog_api_client/v2/model/form_update_attributes.py new file mode 100644 index 0000000000..b98b4e6289 --- /dev/null +++ b/datadog_api_client/v2/model/form_update_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_datastore_config_attributes import FormDatastoreConfigAttributes + +class FormUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_datastore_config_attributes import FormDatastoreConfigAttributes + return { + "datastore_config": (FormDatastoreConfigAttributes,), + "description": (str,), + "name": (str,), + } + attribute_map = { + "datastore_config": "datastore_config", + "description": "description", + "name": "name", + } + + def __init__(self_, datastore_config: Union[FormDatastoreConfigAttributes, UnsetType]=unset, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The fields to update on a form. At least one field must be provided. + + :param datastore_config: The datastore configuration for a form. + :type datastore_config: FormDatastoreConfigAttributes, optional + + :param description: The updated description of the form. + :type description: str, optional + + :param name: The updated name of the form. + :type name: str, optional + """ + if datastore_config is not unset: + kwargs["datastore_config"] = datastore_config + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/form_version_attributes.py b/datadog_api_client/v2/model/form_version_attributes.py new file mode 100644 index 0000000000..4eb4058cfe --- /dev/null +++ b/datadog_api_client/v2/model/form_version_attributes.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_data_definition import FormDataDefinition + from datadog_api_client.v2.model.form_version_state import FormVersionState + from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition + +class FormVersionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_data_definition import FormDataDefinition + from datadog_api_client.v2.model.form_version_state import FormVersionState + from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition + return { + "created_at": (datetime,), + "data_definition": (FormDataDefinition,), + "definition_signature": (str,), + "etag": (str, none_type), + "id": (str,), + "modified_at": (datetime,), + "state": (FormVersionState,), + "ui_definition": (FormUiDefinition,), + "user_id": (int,), + "user_uuid": (UUID,), + "version": (int,), + } + attribute_map = { + "created_at": "created_at", + "data_definition": "data_definition", + "definition_signature": "definition_signature", + "etag": "etag", + "id": "id", + "modified_at": "modified_at", + "state": "state", + "ui_definition": "ui_definition", + "user_id": "user_id", + "user_uuid": "user_uuid", + "version": "version", + } + + def __init__(self_, created_at: datetime, data_definition: FormDataDefinition, definition_signature: str, etag: Union[str, none_type], modified_at: datetime, state: FormVersionState, ui_definition: FormUiDefinition, user_id: int, user_uuid: UUID, version: int, id: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a form version. + + :param created_at: The time at which the version was created. + :type created_at: datetime + + :param data_definition: A JSON Schema definition that describes the form's data fields. + :type data_definition: FormDataDefinition + + :param definition_signature: The signature of the version definition. + :type definition_signature: str + + :param etag: The ETag for optimistic concurrency control. + :type etag: str, none_type + + :param id: The ID of the form version. + :type id: str, optional + + :param modified_at: The time at which the version was last modified. + :type modified_at: datetime + + :param state: The state of a form version. + :type state: FormVersionState + + :param ui_definition: UI configuration for rendering form fields, including widget overrides, field ordering, and themes. + :type ui_definition: FormUiDefinition + + :param user_id: The ID of the user who created this version. + :type user_id: int + + :param user_uuid: The UUID of the user who created this version. + :type user_uuid: UUID + + :param version: The sequential version number. + :type version: int + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.created_at = created_at + self_.data_definition = data_definition + self_.definition_signature = definition_signature + self_.etag = etag + self_.modified_at = modified_at + self_.state = state + self_.ui_definition = ui_definition + self_.user_id = user_id + self_.user_uuid = user_uuid + self_.version = version diff --git a/datadog_api_client/v2/model/form_version_data.py b/datadog_api_client/v2/model/form_version_data.py new file mode 100644 index 0000000000..be487f4fa1 --- /dev/null +++ b/datadog_api_client/v2/model/form_version_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_version_attributes import FormVersionAttributes + from datadog_api_client.v2.model.form_version_type import FormVersionType + +class FormVersionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_version_attributes import FormVersionAttributes + from datadog_api_client.v2.model.form_version_type import FormVersionType + return { + "attributes": (FormVersionAttributes,), + "id": (str,), + "type": (FormVersionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FormVersionAttributes, id: str, type: FormVersionType, **kwargs): + """ + A form version resource object. + + :param attributes: The attributes of a form version. + :type attributes: FormVersionAttributes + + :param id: The ID of the form version. + :type id: str + + :param type: The resource type for a form version. + :type type: FormVersionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/form_version_response.py b/datadog_api_client/v2/model/form_version_response.py new file mode 100644 index 0000000000..c9422a1d4b --- /dev/null +++ b/datadog_api_client/v2/model/form_version_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_version_data import FormVersionData + +class FormVersionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_version_data import FormVersionData + return { + "data": (FormVersionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FormVersionData, **kwargs): + """ + A response containing a single form version. + + :param data: A form version resource object. + :type data: FormVersionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/form_version_state.py b/datadog_api_client/v2/model/form_version_state.py new file mode 100644 index 0000000000..0996b8cbab --- /dev/null +++ b/datadog_api_client/v2/model/form_version_state.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormVersionState(ModelSimple): + """ + The state of a form version. + + :param value: Must be one of ["draft", "frozen"]. + :type value: str + """ + + allowed_values = { + "draft", + "frozen", + } + DRAFT: ClassVar["FormVersionState"] + FROZEN: ClassVar["FormVersionState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormVersionState.DRAFT = FormVersionState("draft") +FormVersionState.FROZEN = FormVersionState("frozen") diff --git a/datadog_api_client/v2/model/form_version_type.py b/datadog_api_client/v2/model/form_version_type.py new file mode 100644 index 0000000000..b4acbc5556 --- /dev/null +++ b/datadog_api_client/v2/model/form_version_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FormVersionType(ModelSimple): + """ + The resource type for a form version. + + :param value: If omitted defaults to "form_versions". Must be one of ["form_versions"]. + :type value: str + """ + + allowed_values = { + "form_versions", + } + FORM_VERSIONS: ClassVar["FormVersionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FormVersionType.FORM_VERSIONS = FormVersionType("form_versions") diff --git a/datadog_api_client/v2/model/forms_response.py b/datadog_api_client/v2/model/forms_response.py new file mode 100644 index 0000000000..d17ed4e28d --- /dev/null +++ b/datadog_api_client/v2/model/forms_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_data import FormData + +class FormsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_data import FormData + return { + "data": ([FormData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[FormData], **kwargs): + """ + A response containing a list of forms. + + :param data: A list of form resource objects. + :type data: [FormData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/formula_limit.py b/datadog_api_client/v2/model/formula_limit.py new file mode 100644 index 0000000000..e2a4c092e9 --- /dev/null +++ b/datadog_api_client/v2/model/formula_limit.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + +class FormulaLimit(ModelNormal): + validations = { + "count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + return { + "count": (int,), + "order": (QuerySortOrder,), + } + attribute_map = { + "count": "count", + "order": "order", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, order: Union[QuerySortOrder, UnsetType]=unset, **kwargs): + """ + Message for specifying limits to the number of values returned by a query. + This limit is only for scalar queries and has no effect on timeseries queries. + + :param count: The number of results to which to limit. + :type count: int, optional + + :param order: Direction of sort. + :type order: QuerySortOrder, optional + """ + if count is not unset: + kwargs["count"] = count + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/framework_handle_and_version_response_data.py b/datadog_api_client/v2/model/framework_handle_and_version_response_data.py new file mode 100644 index 0000000000..81c5232bdb --- /dev/null +++ b/datadog_api_client/v2/model/framework_handle_and_version_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_framework_data_handle_and_version import CustomFrameworkDataHandleAndVersion + from datadog_api_client.v2.model.custom_framework_type import CustomFrameworkType + +class FrameworkHandleAndVersionResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_framework_data_handle_and_version import CustomFrameworkDataHandleAndVersion + from datadog_api_client.v2.model.custom_framework_type import CustomFrameworkType + return { + "attributes": (CustomFrameworkDataHandleAndVersion,), + "id": (str,), + "type": (CustomFrameworkType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: CustomFrameworkDataHandleAndVersion, id: str, type: CustomFrameworkType, **kwargs): + """ + Contains type and attributes for custom frameworks. + + :param attributes: Framework Handle and Version. + :type attributes: CustomFrameworkDataHandleAndVersion + + :param id: The ID of the custom framework. + :type id: str + + :param type: The type of the resource. The value must be ``custom_framework``. + :type type: CustomFrameworkType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/freshservice_api_key.py b/datadog_api_client/v2/model/freshservice_api_key.py new file mode 100644 index 0000000000..5401a40665 --- /dev/null +++ b/datadog_api_client/v2/model/freshservice_api_key.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.freshservice_api_key_type import FreshserviceAPIKeyType + +class FreshserviceAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.freshservice_api_key_type import FreshserviceAPIKeyType + return { + "api_key": (str,), + "domain": (str,), + "type": (FreshserviceAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "domain": "domain", + "type": "type", + } + + def __init__(self_, api_key: str, domain: str, type: FreshserviceAPIKeyType, **kwargs): + """ + The definition of the ``FreshserviceAPIKey`` object. + + :param api_key: The ``FreshserviceAPIKey`` ``api_key``. + :type api_key: str + + :param domain: The ``FreshserviceAPIKey`` ``domain``. + :type domain: str + + :param type: The definition of the ``FreshserviceAPIKey`` object. + :type type: FreshserviceAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_key = api_key + self_.domain = domain + self_.type = type diff --git a/datadog_api_client/v2/model/freshservice_api_key_type.py b/datadog_api_client/v2/model/freshservice_api_key_type.py new file mode 100644 index 0000000000..fe2efcf960 --- /dev/null +++ b/datadog_api_client/v2/model/freshservice_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FreshserviceAPIKeyType(ModelSimple): + """ + The definition of the `FreshserviceAPIKey` object. + + :param value: If omitted defaults to "FreshserviceAPIKey". Must be one of ["FreshserviceAPIKey"]. + :type value: str + """ + + allowed_values = { + "FreshserviceAPIKey", + } + FRESHSERVICEAPIKEY: ClassVar["FreshserviceAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FreshserviceAPIKeyType.FRESHSERVICEAPIKEY = FreshserviceAPIKeyType("FreshserviceAPIKey") diff --git a/datadog_api_client/v2/model/freshservice_api_key_update.py b/datadog_api_client/v2/model/freshservice_api_key_update.py new file mode 100644 index 0000000000..aa41464d8d --- /dev/null +++ b/datadog_api_client/v2/model/freshservice_api_key_update.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.freshservice_api_key_type import FreshserviceAPIKeyType + +class FreshserviceAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.freshservice_api_key_type import FreshserviceAPIKeyType + return { + "api_key": (str,), + "domain": (str,), + "type": (FreshserviceAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "domain": "domain", + "type": "type", + } + + def __init__(self_, type: FreshserviceAPIKeyType, api_key: Union[str, UnsetType]=unset, domain: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``FreshserviceAPIKey`` object. + + :param api_key: The ``FreshserviceAPIKeyUpdate`` ``api_key``. + :type api_key: str, optional + + :param domain: The ``FreshserviceAPIKeyUpdate`` ``domain``. + :type domain: str, optional + + :param type: The definition of the ``FreshserviceAPIKey`` object. + :type type: FreshserviceAPIKeyType + """ + if api_key is not unset: + kwargs["api_key"] = api_key + if domain is not unset: + kwargs["domain"] = domain + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/freshservice_credentials.py b/datadog_api_client/v2/model/freshservice_credentials.py new file mode 100644 index 0000000000..422f9ea897 --- /dev/null +++ b/datadog_api_client/v2/model/freshservice_credentials.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FreshserviceCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``FreshserviceCredentials`` object. + + :param api_key: The `FreshserviceAPIKey` `api_key`. + :type api_key: str + + :param domain: The `FreshserviceAPIKey` `domain`. + :type domain: str + + :param type: The definition of the `FreshserviceAPIKey` object. + :type type: FreshserviceAPIKeyType + """ + 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.freshservice_api_key import FreshserviceAPIKey + return { + "oneOf": [ + FreshserviceAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/freshservice_credentials_update.py b/datadog_api_client/v2/model/freshservice_credentials_update.py new file mode 100644 index 0000000000..589cc8346d --- /dev/null +++ b/datadog_api_client/v2/model/freshservice_credentials_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FreshserviceCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``FreshserviceCredentialsUpdate`` object. + + :param api_key: The `FreshserviceAPIKeyUpdate` `api_key`. + :type api_key: str, optional + + :param domain: The `FreshserviceAPIKeyUpdate` `domain`. + :type domain: str, optional + + :param type: The definition of the `FreshserviceAPIKey` object. + :type type: FreshserviceAPIKeyType + """ + 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.freshservice_api_key_update import FreshserviceAPIKeyUpdate + return { + "oneOf": [ + FreshserviceAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/freshservice_integration.py b/datadog_api_client/v2/model/freshservice_integration.py new file mode 100644 index 0000000000..dfe926b210 --- /dev/null +++ b/datadog_api_client/v2/model/freshservice_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.freshservice_credentials import FreshserviceCredentials + from datadog_api_client.v2.model.freshservice_integration_type import FreshserviceIntegrationType + from datadog_api_client.v2.model.freshservice_api_key import FreshserviceAPIKey + +class FreshserviceIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.freshservice_credentials import FreshserviceCredentials + from datadog_api_client.v2.model.freshservice_integration_type import FreshserviceIntegrationType + return { + "credentials": (FreshserviceCredentials,), + "type": (FreshserviceIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[FreshserviceCredentials, FreshserviceAPIKey], type: FreshserviceIntegrationType, **kwargs): + """ + The definition of the ``FreshserviceIntegration`` object. + + :param credentials: The definition of the ``FreshserviceCredentials`` object. + :type credentials: FreshserviceCredentials + + :param type: The definition of the ``FreshserviceIntegrationType`` object. + :type type: FreshserviceIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/freshservice_integration_type.py b/datadog_api_client/v2/model/freshservice_integration_type.py new file mode 100644 index 0000000000..5e6c6df953 --- /dev/null +++ b/datadog_api_client/v2/model/freshservice_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class FreshserviceIntegrationType(ModelSimple): + """ + The definition of the `FreshserviceIntegrationType` object. + + :param value: If omitted defaults to "Freshservice". Must be one of ["Freshservice"]. + :type value: str + """ + + allowed_values = { + "Freshservice", + } + FRESHSERVICE: ClassVar["FreshserviceIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +FreshserviceIntegrationType.FRESHSERVICE = FreshserviceIntegrationType("Freshservice") diff --git a/datadog_api_client/v2/model/freshservice_integration_update.py b/datadog_api_client/v2/model/freshservice_integration_update.py new file mode 100644 index 0000000000..e48419bb80 --- /dev/null +++ b/datadog_api_client/v2/model/freshservice_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.freshservice_credentials_update import FreshserviceCredentialsUpdate + from datadog_api_client.v2.model.freshservice_integration_type import FreshserviceIntegrationType + from datadog_api_client.v2.model.freshservice_api_key_update import FreshserviceAPIKeyUpdate + +class FreshserviceIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.freshservice_credentials_update import FreshserviceCredentialsUpdate + from datadog_api_client.v2.model.freshservice_integration_type import FreshserviceIntegrationType + return { + "credentials": (FreshserviceCredentialsUpdate,), + "type": (FreshserviceIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: FreshserviceIntegrationType, credentials: Union[FreshserviceCredentialsUpdate, FreshserviceAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``FreshserviceIntegrationUpdate`` object. + + :param credentials: The definition of the ``FreshserviceCredentialsUpdate`` object. + :type credentials: FreshserviceCredentialsUpdate, optional + + :param type: The definition of the ``FreshserviceIntegrationType`` object. + :type type: FreshserviceIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/full_api_key.py b/datadog_api_client/v2/model/full_api_key.py new file mode 100644 index 0000000000..d6974f08ae --- /dev/null +++ b/datadog_api_client/v2/model/full_api_key.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_api_key_attributes import FullAPIKeyAttributes + from datadog_api_client.v2.model.api_key_relationships import APIKeyRelationships + from datadog_api_client.v2.model.api_keys_type import APIKeysType + +class FullAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_api_key_attributes import FullAPIKeyAttributes + from datadog_api_client.v2.model.api_key_relationships import APIKeyRelationships + from datadog_api_client.v2.model.api_keys_type import APIKeysType + return { + "attributes": (FullAPIKeyAttributes,), + "id": (str,), + "relationships": (APIKeyRelationships,), + "type": (APIKeysType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[FullAPIKeyAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[APIKeyRelationships, UnsetType]=unset, type: Union[APIKeysType, UnsetType]=unset, **kwargs): + """ + Datadog API key. + + :param attributes: Attributes of a full API key. + :type attributes: FullAPIKeyAttributes, optional + + :param id: ID of the API key. + :type id: str, optional + + :param relationships: Resources related to the API key. + :type relationships: APIKeyRelationships, optional + + :param type: API Keys resource type. + :type type: APIKeysType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/full_api_key_attributes.py b/datadog_api_client/v2/model/full_api_key_attributes.py new file mode 100644 index 0000000000..92f1b4aa1b --- /dev/null +++ b/datadog_api_client/v2/model/full_api_key_attributes.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FullAPIKeyAttributes(ModelNormal): + validations = { + "last4": { + "max_length": 4, + "min_length": 4, + }, + } + @cached_property + def openapi_types(_): + return { + "category": (str,), + "created_at": (datetime,), + "date_last_used": (datetime, none_type), + "key": (str,), + "last4": (str,), + "modified_at": (datetime,), + "name": (str,), + "remote_config_read_enabled": (bool,), + } + attribute_map = { + "category": "category", + "created_at": "created_at", + "date_last_used": "date_last_used", + "key": "key", + "last4": "last4", + "modified_at": "modified_at", + "name": "name", + "remote_config_read_enabled": "remote_config_read_enabled", + } + read_only_vars = { + "created_at", + "date_last_used", + "key", + "last4", + "modified_at", + } + + def __init__(self_, category: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, date_last_used: Union[datetime, none_type, UnsetType]=unset, key: Union[str, UnsetType]=unset, last4: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, remote_config_read_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes of a full API key. + + :param category: The category of the API key. + :type category: str, optional + + :param created_at: Creation date of the API key. + :type created_at: datetime, optional + + :param date_last_used: Date the API Key was last used + :type date_last_used: datetime, none_type, optional + + :param key: The API key. + :type key: str, optional + + :param last4: The last four characters of the API key. + :type last4: str, optional + + :param modified_at: Date the API key was last modified. + :type modified_at: datetime, optional + + :param name: Name of the API key. + :type name: str, optional + + :param remote_config_read_enabled: The remote config read enabled status. + :type remote_config_read_enabled: bool, optional + """ + if category is not unset: + kwargs["category"] = category + if created_at is not unset: + kwargs["created_at"] = created_at + if date_last_used is not unset: + kwargs["date_last_used"] = date_last_used + if key is not unset: + kwargs["key"] = key + if last4 is not unset: + kwargs["last4"] = last4 + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if remote_config_read_enabled is not unset: + kwargs["remote_config_read_enabled"] = remote_config_read_enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/full_application_key.py b/datadog_api_client/v2/model/full_application_key.py new file mode 100644 index 0000000000..95a17e403e --- /dev/null +++ b/datadog_api_client/v2/model/full_application_key.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_application_key_attributes import FullApplicationKeyAttributes + from datadog_api_client.v2.model.application_key_relationships import ApplicationKeyRelationships + from datadog_api_client.v2.model.application_keys_type import ApplicationKeysType + +class FullApplicationKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_application_key_attributes import FullApplicationKeyAttributes + from datadog_api_client.v2.model.application_key_relationships import ApplicationKeyRelationships + from datadog_api_client.v2.model.application_keys_type import ApplicationKeysType + return { + "attributes": (FullApplicationKeyAttributes,), + "id": (str,), + "relationships": (ApplicationKeyRelationships,), + "type": (ApplicationKeysType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[FullApplicationKeyAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ApplicationKeyRelationships, UnsetType]=unset, type: Union[ApplicationKeysType, UnsetType]=unset, **kwargs): + """ + Datadog application key. + + :param attributes: Attributes of a full application key. + :type attributes: FullApplicationKeyAttributes, optional + + :param id: ID of the application key. + :type id: str, optional + + :param relationships: Resources related to the application key. + :type relationships: ApplicationKeyRelationships, optional + + :param type: Application Keys resource type. + :type type: ApplicationKeysType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/full_application_key_attributes.py b/datadog_api_client/v2/model/full_application_key_attributes.py new file mode 100644 index 0000000000..f872d518c0 --- /dev/null +++ b/datadog_api_client/v2/model/full_application_key_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FullApplicationKeyAttributes(ModelNormal): + validations = { + "last4": { + "max_length": 4, + "min_length": 4, + }, + } + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "key": (str,), + "last4": (str,), + "last_used_at": (datetime, none_type), + "name": (str,), + "scopes": ([str], none_type), + } + attribute_map = { + "created_at": "created_at", + "key": "key", + "last4": "last4", + "last_used_at": "last_used_at", + "name": "name", + "scopes": "scopes", + } + read_only_vars = { + "created_at", + "key", + "last4", + "last_used_at", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, key: Union[str, UnsetType]=unset, last4: Union[str, UnsetType]=unset, last_used_at: Union[datetime, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, scopes: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Attributes of a full application key. + + :param created_at: Creation date of the application key. + :type created_at: datetime, optional + + :param key: The application key. + :type key: str, optional + + :param last4: The last four characters of the application key. + :type last4: str, optional + + :param last_used_at: Last usage timestamp of the application key. + :type last_used_at: datetime, none_type, optional + + :param name: Name of the application key. + :type name: str, optional + + :param scopes: Array of scopes to grant the application key. + :type scopes: [str], none_type, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if key is not unset: + kwargs["key"] = key + if last4 is not unset: + kwargs["last4"] = last4 + if last_used_at is not unset: + kwargs["last_used_at"] = last_used_at + if name is not unset: + kwargs["name"] = name + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/full_custom_framework_data.py b/datadog_api_client/v2/model/full_custom_framework_data.py new file mode 100644 index 0000000000..5d1280d07b --- /dev/null +++ b/datadog_api_client/v2/model/full_custom_framework_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_custom_framework_data_attributes import FullCustomFrameworkDataAttributes + from datadog_api_client.v2.model.custom_framework_type import CustomFrameworkType + +class FullCustomFrameworkData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_custom_framework_data_attributes import FullCustomFrameworkDataAttributes + from datadog_api_client.v2.model.custom_framework_type import CustomFrameworkType + return { + "attributes": (FullCustomFrameworkDataAttributes,), + "id": (str,), + "type": (CustomFrameworkType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: FullCustomFrameworkDataAttributes, id: str, type: CustomFrameworkType, **kwargs): + """ + Contains type and attributes for custom frameworks. + + :param attributes: Full Framework Data Attributes. + :type attributes: FullCustomFrameworkDataAttributes + + :param id: The ID of the custom framework. + :type id: str + + :param type: The type of the resource. The value must be ``custom_framework``. + :type type: CustomFrameworkType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/full_custom_framework_data_attributes.py b/datadog_api_client/v2/model/full_custom_framework_data_attributes.py new file mode 100644 index 0000000000..e8006e8acc --- /dev/null +++ b/datadog_api_client/v2/model/full_custom_framework_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_framework_requirement import CustomFrameworkRequirement + +class FullCustomFrameworkDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_framework_requirement import CustomFrameworkRequirement + return { + "handle": (str,), + "icon_url": (str,), + "name": (str,), + "requirements": ([CustomFrameworkRequirement],), + "version": (str,), + } + attribute_map = { + "handle": "handle", + "icon_url": "icon_url", + "name": "name", + "requirements": "requirements", + "version": "version", + } + + def __init__(self_, handle: str, name: str, requirements: List[CustomFrameworkRequirement], version: str, icon_url: Union[str, UnsetType]=unset, **kwargs): + """ + Full Framework Data Attributes. + + :param handle: Framework Handle + :type handle: str + + :param icon_url: Framework Icon URL + :type icon_url: str, optional + + :param name: Framework Name + :type name: str + + :param requirements: Framework Requirements + :type requirements: [CustomFrameworkRequirement] + + :param version: Framework Version + :type version: str + """ + if icon_url is not unset: + kwargs["icon_url"] = icon_url + super().__init__(kwargs) + + + self_.handle = handle + self_.name = name + self_.requirements = requirements + self_.version = version diff --git a/datadog_api_client/v2/model/full_personal_access_token.py b/datadog_api_client/v2/model/full_personal_access_token.py new file mode 100644 index 0000000000..1d288276cb --- /dev/null +++ b/datadog_api_client/v2/model/full_personal_access_token.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_personal_access_token_attributes import FullPersonalAccessTokenAttributes + from datadog_api_client.v2.model.personal_access_token_relationships import PersonalAccessTokenRelationships + from datadog_api_client.v2.model.personal_access_tokens_type import PersonalAccessTokensType + +class FullPersonalAccessToken(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_personal_access_token_attributes import FullPersonalAccessTokenAttributes + from datadog_api_client.v2.model.personal_access_token_relationships import PersonalAccessTokenRelationships + from datadog_api_client.v2.model.personal_access_tokens_type import PersonalAccessTokensType + return { + "attributes": (FullPersonalAccessTokenAttributes,), + "id": (str,), + "relationships": (PersonalAccessTokenRelationships,), + "type": (PersonalAccessTokensType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[FullPersonalAccessTokenAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[PersonalAccessTokenRelationships, UnsetType]=unset, type: Union[PersonalAccessTokensType, UnsetType]=unset, **kwargs): + """ + Datadog access token, including the token key. + + :param attributes: Attributes of a full access token, including the token key. + :type attributes: FullPersonalAccessTokenAttributes, optional + + :param id: ID of the access token. + :type id: str, optional + + :param relationships: Resources related to the access token. + :type relationships: PersonalAccessTokenRelationships, optional + + :param type: Personal access tokens resource type. + :type type: PersonalAccessTokensType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/full_personal_access_token_attributes.py b/datadog_api_client/v2/model/full_personal_access_token_attributes.py new file mode 100644 index 0000000000..81d7bad311 --- /dev/null +++ b/datadog_api_client/v2/model/full_personal_access_token_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FullPersonalAccessTokenAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "expires_at": (datetime, none_type), + "key": (str,), + "name": (str,), + "public_portion": (str,), + "scopes": ([str],), + } + attribute_map = { + "created_at": "created_at", + "expires_at": "expires_at", + "key": "key", + "name": "name", + "public_portion": "public_portion", + "scopes": "scopes", + } + read_only_vars = { + "created_at", + "expires_at", + "key", + "public_portion", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, expires_at: Union[datetime, none_type, UnsetType]=unset, key: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, public_portion: Union[str, UnsetType]=unset, scopes: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of a full access token, including the token key. + + :param created_at: Creation date of the access token. + :type created_at: datetime, optional + + :param expires_at: Expiration date of the access token. + :type expires_at: datetime, none_type, optional + + :param key: The access token key. Only returned upon creation. + :type key: str, optional + + :param name: Name of the access token. + :type name: str, optional + + :param public_portion: The public portion of the access token. + :type public_portion: str, optional + + :param scopes: Array of scopes granted to the access token. + :type scopes: [str], optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if expires_at is not unset: + kwargs["expires_at"] = expires_at + if key is not unset: + kwargs["key"] = key + if name is not unset: + kwargs["name"] = name + if public_portion is not unset: + kwargs["public_portion"] = public_portion + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/full_service_access_token.py b/datadog_api_client/v2/model/full_service_access_token.py new file mode 100644 index 0000000000..da9e0f8cd1 --- /dev/null +++ b/datadog_api_client/v2/model/full_service_access_token.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_service_access_token_attributes import FullServiceAccessTokenAttributes + from datadog_api_client.v2.model.service_access_token_relationships import ServiceAccessTokenRelationships + from datadog_api_client.v2.model.service_access_tokens_type import ServiceAccessTokensType + +class FullServiceAccessToken(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_service_access_token_attributes import FullServiceAccessTokenAttributes + from datadog_api_client.v2.model.service_access_token_relationships import ServiceAccessTokenRelationships + from datadog_api_client.v2.model.service_access_tokens_type import ServiceAccessTokensType + return { + "attributes": (FullServiceAccessTokenAttributes,), + "id": (str,), + "relationships": (ServiceAccessTokenRelationships,), + "type": (ServiceAccessTokensType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[FullServiceAccessTokenAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ServiceAccessTokenRelationships, UnsetType]=unset, type: Union[ServiceAccessTokensType, UnsetType]=unset, **kwargs): + """ + Datadog access token, including the token key. + + :param attributes: Attributes of a full access token, including the token key. + :type attributes: FullServiceAccessTokenAttributes, optional + + :param id: ID of the access token. + :type id: str, optional + + :param relationships: Resources related to the access token. + :type relationships: ServiceAccessTokenRelationships, optional + + :param type: Service access tokens resource type. + :type type: ServiceAccessTokensType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/full_service_access_token_attributes.py b/datadog_api_client/v2/model/full_service_access_token_attributes.py new file mode 100644 index 0000000000..491cc518bf --- /dev/null +++ b/datadog_api_client/v2/model/full_service_access_token_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class FullServiceAccessTokenAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "expires_at": (datetime, none_type), + "key": (str,), + "name": (str,), + "public_portion": (str,), + "scopes": ([str],), + } + attribute_map = { + "created_at": "created_at", + "expires_at": "expires_at", + "key": "key", + "name": "name", + "public_portion": "public_portion", + "scopes": "scopes", + } + read_only_vars = { + "created_at", + "expires_at", + "key", + "public_portion", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, expires_at: Union[datetime, none_type, UnsetType]=unset, key: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, public_portion: Union[str, UnsetType]=unset, scopes: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of a full access token, including the token key. + + :param created_at: Creation date of the access token. + :type created_at: datetime, optional + + :param expires_at: Expiration date of the access token. + :type expires_at: datetime, none_type, optional + + :param key: The access token key. Only returned upon creation. + :type key: str, optional + + :param name: Name of the access token. + :type name: str, optional + + :param public_portion: The public portion of the access token. + :type public_portion: str, optional + + :param scopes: Array of scopes granted to the access token. + :type scopes: [str], optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if expires_at is not unset: + kwargs["expires_at"] = expires_at + if key is not unset: + kwargs["key"] = key + if name is not unset: + kwargs["name"] = name + if public_portion is not unset: + kwargs["public_portion"] = public_portion + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_credentials.py b/datadog_api_client/v2/model/gcp_credentials.py new file mode 100644 index 0000000000..4fc8e01c37 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_credentials.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GCPCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``GCPCredentials`` object. + + :param private_key: The `GCPServiceAccount` `private_key`. + :type private_key: str + + :param service_account_email: The `GCPServiceAccount` `service_account_email`. + :type service_account_email: str + + :param type: The definition of the `GCPServiceAccount` object. + :type type: GCPServiceAccountCredentialType + """ + 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.gcp_service_account import GCPServiceAccount + return { + "oneOf": [ + GCPServiceAccount, + ], + } diff --git a/datadog_api_client/v2/model/gcp_credentials_update.py b/datadog_api_client/v2/model/gcp_credentials_update.py new file mode 100644 index 0000000000..4cbb05d796 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_credentials_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GCPCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``GCPCredentialsUpdate`` object. + + :param private_key: The `GCPServiceAccountUpdate` `private_key`. + :type private_key: str, optional + + :param service_account_email: The `GCPServiceAccountUpdate` `service_account_email`. + :type service_account_email: str, optional + + :param type: The definition of the `GCPServiceAccount` object. + :type type: GCPServiceAccountCredentialType + """ + 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.gcp_service_account_update import GCPServiceAccountUpdate + return { + "oneOf": [ + GCPServiceAccountUpdate, + ], + } diff --git a/datadog_api_client/v2/model/gcp_integration.py b/datadog_api_client/v2/model/gcp_integration.py new file mode 100644 index 0000000000..02a9e9bd53 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_credentials import GCPCredentials + from datadog_api_client.v2.model.gcp_integration_type import GCPIntegrationType + from datadog_api_client.v2.model.gcp_service_account import GCPServiceAccount + +class GCPIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_credentials import GCPCredentials + from datadog_api_client.v2.model.gcp_integration_type import GCPIntegrationType + return { + "credentials": (GCPCredentials,), + "type": (GCPIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[GCPCredentials, GCPServiceAccount], type: GCPIntegrationType, **kwargs): + """ + The definition of the ``GCPIntegration`` object. + + :param credentials: The definition of the ``GCPCredentials`` object. + :type credentials: GCPCredentials + + :param type: The definition of the ``GCPIntegrationType`` object. + :type type: GCPIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_integration_type.py b/datadog_api_client/v2/model/gcp_integration_type.py new file mode 100644 index 0000000000..e774d4e72a --- /dev/null +++ b/datadog_api_client/v2/model/gcp_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GCPIntegrationType(ModelSimple): + """ + The definition of the `GCPIntegrationType` object. + + :param value: If omitted defaults to "GCP". Must be one of ["GCP"]. + :type value: str + """ + + allowed_values = { + "GCP", + } + GCP: ClassVar["GCPIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GCPIntegrationType.GCP = GCPIntegrationType("GCP") diff --git a/datadog_api_client/v2/model/gcp_integration_update.py b/datadog_api_client/v2/model/gcp_integration_update.py new file mode 100644 index 0000000000..5d8f4957cb --- /dev/null +++ b/datadog_api_client/v2/model/gcp_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_credentials_update import GCPCredentialsUpdate + from datadog_api_client.v2.model.gcp_integration_type import GCPIntegrationType + from datadog_api_client.v2.model.gcp_service_account_update import GCPServiceAccountUpdate + +class GCPIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_credentials_update import GCPCredentialsUpdate + from datadog_api_client.v2.model.gcp_integration_type import GCPIntegrationType + return { + "credentials": (GCPCredentialsUpdate,), + "type": (GCPIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: GCPIntegrationType, credentials: Union[GCPCredentialsUpdate, GCPServiceAccountUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``GCPIntegrationUpdate`` object. + + :param credentials: The definition of the ``GCPCredentialsUpdate`` object. + :type credentials: GCPCredentialsUpdate, optional + + :param type: The definition of the ``GCPIntegrationType`` object. + :type type: GCPIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_metric_namespace_config.py b/datadog_api_client/v2/model/gcp_metric_namespace_config.py new file mode 100644 index 0000000000..2af492e9e6 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_metric_namespace_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GCPMetricNamespaceConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "disabled": (bool,), + "filters": ([str],), + "id": (str,), + } + attribute_map = { + "disabled": "disabled", + "filters": "filters", + "id": "id", + } + + def __init__(self_, disabled: Union[bool, UnsetType]=unset, filters: Union[List[str], UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration for a GCP metric namespace. + + :param disabled: When disabled, Datadog does not collect metrics that are related to this GCP metric namespace. + :type disabled: bool, optional + + :param filters: When enabled, Datadog applies these additional filters to limit metric collection. A metric is collected only if it does not match all exclusion filters and matches at least one allow filter. + :type filters: [str], optional + + :param id: The id of the GCP metric namespace. + :type id: str, optional + """ + if disabled is not unset: + kwargs["disabled"] = disabled + if filters is not unset: + kwargs["filters"] = filters + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_monitored_resource_config.py b/datadog_api_client/v2/model/gcp_monitored_resource_config.py new file mode 100644 index 0000000000..46940a895e --- /dev/null +++ b/datadog_api_client/v2/model/gcp_monitored_resource_config.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_monitored_resource_config_type import GCPMonitoredResourceConfigType + +class GCPMonitoredResourceConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_monitored_resource_config_type import GCPMonitoredResourceConfigType + return { + "filters": ([str],), + "type": (GCPMonitoredResourceConfigType,), + } + attribute_map = { + "filters": "filters", + "type": "type", + } + + def __init__(self_, filters: Union[List[str], UnsetType]=unset, type: Union[GCPMonitoredResourceConfigType, UnsetType]=unset, **kwargs): + """ + Configuration for a GCP monitored resource. + + :param filters: List of filters to limit the monitored resources that are pulled into Datadog by using tags. + Only monitored resources that apply to specified filters are imported into Datadog. + :type filters: [str], optional + + :param type: The GCP monitored resource type. Only a subset of resource types are supported. + :type type: GCPMonitoredResourceConfigType, optional + """ + if filters is not unset: + kwargs["filters"] = filters + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_monitored_resource_config_type.py b/datadog_api_client/v2/model/gcp_monitored_resource_config_type.py new file mode 100644 index 0000000000..7a999c8f8a --- /dev/null +++ b/datadog_api_client/v2/model/gcp_monitored_resource_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GCPMonitoredResourceConfigType(ModelSimple): + """ + The GCP monitored resource type. Only a subset of resource types are supported. + + :param value: Must be one of ["cloud_function", "cloud_run_revision", "gce_instance"]. + :type value: str + """ + + allowed_values = { + "cloud_function", + "cloud_run_revision", + "gce_instance", + } + CLOUD_FUNCTION: ClassVar["GCPMonitoredResourceConfigType"] + CLOUD_RUN_REVISION: ClassVar["GCPMonitoredResourceConfigType"] + GCE_INSTANCE: ClassVar["GCPMonitoredResourceConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GCPMonitoredResourceConfigType.CLOUD_FUNCTION = GCPMonitoredResourceConfigType("cloud_function") +GCPMonitoredResourceConfigType.CLOUD_RUN_REVISION = GCPMonitoredResourceConfigType("cloud_run_revision") +GCPMonitoredResourceConfigType.GCE_INSTANCE = GCPMonitoredResourceConfigType("gce_instance") diff --git a/datadog_api_client/v2/model/gcp_scan_options.py b/datadog_api_client/v2/model/gcp_scan_options.py new file mode 100644 index 0000000000..6e0801c2ed --- /dev/null +++ b/datadog_api_client/v2/model/gcp_scan_options.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_scan_options_data import GcpScanOptionsData + +class GcpScanOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_scan_options_data import GcpScanOptionsData + return { + "data": (GcpScanOptionsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GcpScanOptionsData, UnsetType]=unset, **kwargs): + """ + Response object containing GCP scan options for a single project. + + :param data: Single GCP scan options entry. + :type data: GcpScanOptionsData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_scan_options_array.py b/datadog_api_client/v2/model/gcp_scan_options_array.py new file mode 100644 index 0000000000..0d5a8da709 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_scan_options_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_scan_options_data import GcpScanOptionsData + +class GcpScanOptionsArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_scan_options_data import GcpScanOptionsData + return { + "data": ([GcpScanOptionsData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[GcpScanOptionsData], **kwargs): + """ + Response object containing a list of GCP scan options. + + :param data: A list of GCP scan options. + :type data: [GcpScanOptionsData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/gcp_scan_options_data.py b/datadog_api_client/v2/model/gcp_scan_options_data.py new file mode 100644 index 0000000000..f4bdd6c2a5 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_scan_options_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_scan_options_data_attributes import GcpScanOptionsDataAttributes + from datadog_api_client.v2.model.gcp_scan_options_data_type import GcpScanOptionsDataType + +class GcpScanOptionsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_scan_options_data_attributes import GcpScanOptionsDataAttributes + from datadog_api_client.v2.model.gcp_scan_options_data_type import GcpScanOptionsDataType + return { + "attributes": (GcpScanOptionsDataAttributes,), + "id": (str,), + "type": (GcpScanOptionsDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: GcpScanOptionsDataType, attributes: Union[GcpScanOptionsDataAttributes, UnsetType]=unset, **kwargs): + """ + Single GCP scan options entry. + + :param attributes: Attributes for GCP scan options configuration. + :type attributes: GcpScanOptionsDataAttributes, optional + + :param id: The GCP project ID. + :type id: str + + :param type: GCP scan options resource type. + :type type: GcpScanOptionsDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_scan_options_data_attributes.py b/datadog_api_client/v2/model/gcp_scan_options_data_attributes.py new file mode 100644 index 0000000000..1e56c3901a --- /dev/null +++ b/datadog_api_client/v2/model/gcp_scan_options_data_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GcpScanOptionsDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cloud_function": (bool,), + "compliance_host": (bool,), + "vuln_containers_os": (bool,), + "vuln_host_os": (bool,), + } + attribute_map = { + "cloud_function": "cloud_function", + "compliance_host": "compliance_host", + "vuln_containers_os": "vuln_containers_os", + "vuln_host_os": "vuln_host_os", + } + + def __init__(self_, cloud_function: Union[bool, UnsetType]=unset, compliance_host: Union[bool, UnsetType]=unset, vuln_containers_os: Union[bool, UnsetType]=unset, vuln_host_os: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for GCP scan options configuration. + + :param cloud_function: Indicates if scanning of Cloud Functions is enabled. + :type cloud_function: bool, optional + + :param compliance_host: Indicates whether host compliance scanning is enabled. + :type compliance_host: bool, optional + + :param vuln_containers_os: Indicates if scanning for vulnerabilities in containers is enabled. + :type vuln_containers_os: bool, optional + + :param vuln_host_os: Indicates if scanning for vulnerabilities in hosts is enabled. + :type vuln_host_os: bool, optional + """ + if cloud_function is not unset: + kwargs["cloud_function"] = cloud_function + if compliance_host is not unset: + kwargs["compliance_host"] = compliance_host + if vuln_containers_os is not unset: + kwargs["vuln_containers_os"] = vuln_containers_os + if vuln_host_os is not unset: + kwargs["vuln_host_os"] = vuln_host_os + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_scan_options_data_type.py b/datadog_api_client/v2/model/gcp_scan_options_data_type.py new file mode 100644 index 0000000000..b1453b92d9 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_scan_options_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GcpScanOptionsDataType(ModelSimple): + """ + GCP scan options resource type. + + :param value: If omitted defaults to "gcp_scan_options". Must be one of ["gcp_scan_options"]. + :type value: str + """ + + allowed_values = { + "gcp_scan_options", + } + GCP_SCAN_OPTIONS: ClassVar["GcpScanOptionsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GcpScanOptionsDataType.GCP_SCAN_OPTIONS = GcpScanOptionsDataType("gcp_scan_options") diff --git a/datadog_api_client/v2/model/gcp_scan_options_input_update.py b/datadog_api_client/v2/model/gcp_scan_options_input_update.py new file mode 100644 index 0000000000..69afd35e9e --- /dev/null +++ b/datadog_api_client/v2/model/gcp_scan_options_input_update.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_scan_options_input_update_data import GcpScanOptionsInputUpdateData + +class GcpScanOptionsInputUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_scan_options_input_update_data import GcpScanOptionsInputUpdateData + return { + "data": (GcpScanOptionsInputUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GcpScanOptionsInputUpdateData, UnsetType]=unset, **kwargs): + """ + Request object for updating GCP scan options. + + :param data: Data object for updating the scan options of a single GCP project. + :type data: GcpScanOptionsInputUpdateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_scan_options_input_update_data.py b/datadog_api_client/v2/model/gcp_scan_options_input_update_data.py new file mode 100644 index 0000000000..6ee13c1c7a --- /dev/null +++ b/datadog_api_client/v2/model/gcp_scan_options_input_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_scan_options_input_update_data_attributes import GcpScanOptionsInputUpdateDataAttributes + from datadog_api_client.v2.model.gcp_scan_options_input_update_data_type import GcpScanOptionsInputUpdateDataType + +class GcpScanOptionsInputUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_scan_options_input_update_data_attributes import GcpScanOptionsInputUpdateDataAttributes + from datadog_api_client.v2.model.gcp_scan_options_input_update_data_type import GcpScanOptionsInputUpdateDataType + return { + "attributes": (GcpScanOptionsInputUpdateDataAttributes,), + "id": (str,), + "type": (GcpScanOptionsInputUpdateDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: GcpScanOptionsInputUpdateDataType, attributes: Union[GcpScanOptionsInputUpdateDataAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating the scan options of a single GCP project. + + :param attributes: Attributes for updating GCP scan options configuration. + :type attributes: GcpScanOptionsInputUpdateDataAttributes, optional + + :param id: The GCP project ID. + :type id: str + + :param type: GCP scan options resource type. + :type type: GcpScanOptionsInputUpdateDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_scan_options_input_update_data_attributes.py b/datadog_api_client/v2/model/gcp_scan_options_input_update_data_attributes.py new file mode 100644 index 0000000000..0bdd785cb6 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_scan_options_input_update_data_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GcpScanOptionsInputUpdateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cloud_function": (bool,), + "compliance_host": (bool,), + "vuln_containers_os": (bool,), + "vuln_host_os": (bool,), + } + attribute_map = { + "cloud_function": "cloud_function", + "compliance_host": "compliance_host", + "vuln_containers_os": "vuln_containers_os", + "vuln_host_os": "vuln_host_os", + } + + def __init__(self_, cloud_function: Union[bool, UnsetType]=unset, compliance_host: Union[bool, UnsetType]=unset, vuln_containers_os: Union[bool, UnsetType]=unset, vuln_host_os: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for updating GCP scan options configuration. + + :param cloud_function: Indicates if scanning of Cloud Functions is enabled. + :type cloud_function: bool, optional + + :param compliance_host: Indicates whether host compliance scanning is enabled. + :type compliance_host: bool, optional + + :param vuln_containers_os: Indicates if scanning for vulnerabilities in containers is enabled. + :type vuln_containers_os: bool, optional + + :param vuln_host_os: Indicates if scanning for vulnerabilities in hosts is enabled. + :type vuln_host_os: bool, optional + """ + if cloud_function is not unset: + kwargs["cloud_function"] = cloud_function + if compliance_host is not unset: + kwargs["compliance_host"] = compliance_host + if vuln_containers_os is not unset: + kwargs["vuln_containers_os"] = vuln_containers_os + if vuln_host_os is not unset: + kwargs["vuln_host_os"] = vuln_host_os + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_scan_options_input_update_data_type.py b/datadog_api_client/v2/model/gcp_scan_options_input_update_data_type.py new file mode 100644 index 0000000000..1f9c41291a --- /dev/null +++ b/datadog_api_client/v2/model/gcp_scan_options_input_update_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GcpScanOptionsInputUpdateDataType(ModelSimple): + """ + GCP scan options resource type. + + :param value: If omitted defaults to "gcp_scan_options". Must be one of ["gcp_scan_options"]. + :type value: str + """ + + allowed_values = { + "gcp_scan_options", + } + GCP_SCAN_OPTIONS: ClassVar["GcpScanOptionsInputUpdateDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GcpScanOptionsInputUpdateDataType.GCP_SCAN_OPTIONS = GcpScanOptionsInputUpdateDataType("gcp_scan_options") diff --git a/datadog_api_client/v2/model/gcp_service_account.py b/datadog_api_client/v2/model/gcp_service_account.py new file mode 100644 index 0000000000..aa778835a6 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_service_account.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_service_account_credential_type import GCPServiceAccountCredentialType + +class GCPServiceAccount(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_service_account_credential_type import GCPServiceAccountCredentialType + return { + "private_key": (str,), + "service_account_email": (str,), + "type": (GCPServiceAccountCredentialType,), + } + attribute_map = { + "private_key": "private_key", + "service_account_email": "service_account_email", + "type": "type", + } + + def __init__(self_, private_key: str, service_account_email: str, type: GCPServiceAccountCredentialType, **kwargs): + """ + The definition of the ``GCPServiceAccount`` object. + + :param private_key: The ``GCPServiceAccount`` ``private_key``. + :type private_key: str + + :param service_account_email: The ``GCPServiceAccount`` ``service_account_email``. + :type service_account_email: str + + :param type: The definition of the ``GCPServiceAccount`` object. + :type type: GCPServiceAccountCredentialType + """ + super().__init__(kwargs) + + + self_.private_key = private_key + self_.service_account_email = service_account_email + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_service_account_credential_type.py b/datadog_api_client/v2/model/gcp_service_account_credential_type.py new file mode 100644 index 0000000000..081168c5e5 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_service_account_credential_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GCPServiceAccountCredentialType(ModelSimple): + """ + The definition of the `GCPServiceAccount` object. + + :param value: If omitted defaults to "GCPServiceAccount". Must be one of ["GCPServiceAccount"]. + :type value: str + """ + + allowed_values = { + "GCPServiceAccount", + } + GCPSERVICEACCOUNT: ClassVar["GCPServiceAccountCredentialType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GCPServiceAccountCredentialType.GCPSERVICEACCOUNT = GCPServiceAccountCredentialType("GCPServiceAccount") diff --git a/datadog_api_client/v2/model/gcp_service_account_meta.py b/datadog_api_client/v2/model/gcp_service_account_meta.py new file mode 100644 index 0000000000..f0f6c7f6de --- /dev/null +++ b/datadog_api_client/v2/model/gcp_service_account_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GCPServiceAccountMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "accessible_projects": ([str],), + } + attribute_map = { + "accessible_projects": "accessible_projects", + } + + def __init__(self_, accessible_projects: Union[List[str], UnsetType]=unset, **kwargs): + """ + Additional information related to your service account. + + :param accessible_projects: The current list of projects accessible from your service account. + :type accessible_projects: [str], optional + """ + if accessible_projects is not unset: + kwargs["accessible_projects"] = accessible_projects + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_service_account_type.py b/datadog_api_client/v2/model/gcp_service_account_type.py new file mode 100644 index 0000000000..f0aa590d58 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_service_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GCPServiceAccountType(ModelSimple): + """ + The type of account. + + :param value: If omitted defaults to "gcp_service_account". Must be one of ["gcp_service_account"]. + :type value: str + """ + + allowed_values = { + "gcp_service_account", + } + GCP_SERVICE_ACCOUNT: ClassVar["GCPServiceAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GCPServiceAccountType.GCP_SERVICE_ACCOUNT = GCPServiceAccountType("gcp_service_account") diff --git a/datadog_api_client/v2/model/gcp_service_account_update.py b/datadog_api_client/v2/model/gcp_service_account_update.py new file mode 100644 index 0000000000..091ae862dc --- /dev/null +++ b/datadog_api_client/v2/model/gcp_service_account_update.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_service_account_credential_type import GCPServiceAccountCredentialType + +class GCPServiceAccountUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_service_account_credential_type import GCPServiceAccountCredentialType + return { + "private_key": (str,), + "service_account_email": (str,), + "type": (GCPServiceAccountCredentialType,), + } + attribute_map = { + "private_key": "private_key", + "service_account_email": "service_account_email", + "type": "type", + } + + def __init__(self_, type: GCPServiceAccountCredentialType, private_key: Union[str, UnsetType]=unset, service_account_email: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``GCPServiceAccount`` object. + + :param private_key: The ``GCPServiceAccountUpdate`` ``private_key``. + :type private_key: str, optional + + :param service_account_email: The ``GCPServiceAccountUpdate`` ``service_account_email``. + :type service_account_email: str, optional + + :param type: The definition of the ``GCPServiceAccount`` object. + :type type: GCPServiceAccountCredentialType + """ + if private_key is not unset: + kwargs["private_key"] = private_key + if service_account_email is not unset: + kwargs["service_account_email"] = service_account_email + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_uc_config_response.py b/datadog_api_client/v2/model/gcp_uc_config_response.py new file mode 100644 index 0000000000..7bcf223034 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_uc_config_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_uc_config_response_data import GcpUcConfigResponseData + +class GcpUcConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_uc_config_response_data import GcpUcConfigResponseData + return { + "data": (GcpUcConfigResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GcpUcConfigResponseData, UnsetType]=unset, **kwargs): + """ + The definition of ``GcpUcConfigResponse`` object. + + :param data: The definition of ``GcpUcConfigResponseData`` object. + :type data: GcpUcConfigResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_uc_config_response_data.py b/datadog_api_client/v2/model/gcp_uc_config_response_data.py new file mode 100644 index 0000000000..96d386afdd --- /dev/null +++ b/datadog_api_client/v2/model/gcp_uc_config_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_uc_config_response_data_attributes import GcpUcConfigResponseDataAttributes + from datadog_api_client.v2.model.gcp_uc_config_response_data_type import GcpUcConfigResponseDataType + +class GcpUcConfigResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_uc_config_response_data_attributes import GcpUcConfigResponseDataAttributes + from datadog_api_client.v2.model.gcp_uc_config_response_data_type import GcpUcConfigResponseDataType + return { + "attributes": (GcpUcConfigResponseDataAttributes,), + "id": (str,), + "type": (GcpUcConfigResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: GcpUcConfigResponseDataType, attributes: Union[GcpUcConfigResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``GcpUcConfigResponseData`` object. + + :param attributes: The definition of ``GcpUcConfigResponseDataAttributes`` object. + :type attributes: GcpUcConfigResponseDataAttributes, optional + + :param id: The ``GcpUcConfigResponseData`` ``id``. + :type id: str, optional + + :param type: Google Cloud Usage Cost config resource type. + :type type: GcpUcConfigResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_uc_config_response_data_attributes.py b/datadog_api_client/v2/model/gcp_uc_config_response_data_attributes.py new file mode 100644 index 0000000000..1261f25e1c --- /dev/null +++ b/datadog_api_client/v2/model/gcp_uc_config_response_data_attributes.py @@ -0,0 +1,130 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GcpUcConfigResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "bucket_name": (str,), + "created_at": (str,), + "dataset": (str,), + "error_messages": ([str], none_type), + "export_prefix": (str,), + "export_project_name": (str,), + "months": (int,), + "project_id": (str,), + "service_account": (str,), + "status": (str,), + "status_updated_at": (str,), + "updated_at": (str,), + } + attribute_map = { + "account_id": "account_id", + "bucket_name": "bucket_name", + "created_at": "created_at", + "dataset": "dataset", + "error_messages": "error_messages", + "export_prefix": "export_prefix", + "export_project_name": "export_project_name", + "months": "months", + "project_id": "project_id", + "service_account": "service_account", + "status": "status", + "status_updated_at": "status_updated_at", + "updated_at": "updated_at", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, bucket_name: Union[str, UnsetType]=unset, created_at: Union[str, UnsetType]=unset, dataset: Union[str, UnsetType]=unset, error_messages: Union[List[str], none_type, UnsetType]=unset, export_prefix: Union[str, UnsetType]=unset, export_project_name: Union[str, UnsetType]=unset, months: Union[int, UnsetType]=unset, project_id: Union[str, UnsetType]=unset, service_account: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, status_updated_at: Union[str, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``GcpUcConfigResponseDataAttributes`` object. + + :param account_id: The ``attributes`` ``account_id``. + :type account_id: str, optional + + :param bucket_name: The ``attributes`` ``bucket_name``. + :type bucket_name: str, optional + + :param created_at: The ``attributes`` ``created_at``. + :type created_at: str, optional + + :param dataset: The ``attributes`` ``dataset``. + :type dataset: str, optional + + :param error_messages: The ``attributes`` ``error_messages``. + :type error_messages: [str], none_type, optional + + :param export_prefix: The ``attributes`` ``export_prefix``. + :type export_prefix: str, optional + + :param export_project_name: The ``attributes`` ``export_project_name``. + :type export_project_name: str, optional + + :param months: The ``attributes`` ``months``. + :type months: int, optional + + :param project_id: The ``attributes`` ``project_id``. + :type project_id: str, optional + + :param service_account: The ``attributes`` ``service_account``. + :type service_account: str, optional + + :param status: The ``attributes`` ``status``. + :type status: str, optional + + :param status_updated_at: The ``attributes`` ``status_updated_at``. + :type status_updated_at: str, optional + + :param updated_at: The ``attributes`` ``updated_at``. + :type updated_at: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if bucket_name is not unset: + kwargs["bucket_name"] = bucket_name + if created_at is not unset: + kwargs["created_at"] = created_at + if dataset is not unset: + kwargs["dataset"] = dataset + if error_messages is not unset: + kwargs["error_messages"] = error_messages + if export_prefix is not unset: + kwargs["export_prefix"] = export_prefix + if export_project_name is not unset: + kwargs["export_project_name"] = export_project_name + if months is not unset: + kwargs["months"] = months + if project_id is not unset: + kwargs["project_id"] = project_id + if service_account is not unset: + kwargs["service_account"] = service_account + if status is not unset: + kwargs["status"] = status + if status_updated_at is not unset: + kwargs["status_updated_at"] = status_updated_at + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_uc_config_response_data_type.py b/datadog_api_client/v2/model/gcp_uc_config_response_data_type.py new file mode 100644 index 0000000000..7198d37eb4 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_uc_config_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GcpUcConfigResponseDataType(ModelSimple): + """ + Google Cloud Usage Cost config resource type. + + :param value: If omitted defaults to "gcp_uc_config". Must be one of ["gcp_uc_config"]. + :type value: str + """ + + allowed_values = { + "gcp_uc_config", + } + GCP_UC_CONFIG: ClassVar["GcpUcConfigResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GcpUcConfigResponseDataType.GCP_UC_CONFIG = GcpUcConfigResponseDataType("gcp_uc_config") diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config.py b/datadog_api_client/v2/model/gcp_usage_cost_config.py new file mode 100644 index 0000000000..28a7c23502 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_usage_cost_config_attributes import GCPUsageCostConfigAttributes + from datadog_api_client.v2.model.gcp_usage_cost_config_type import GCPUsageCostConfigType + +class GCPUsageCostConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_usage_cost_config_attributes import GCPUsageCostConfigAttributes + from datadog_api_client.v2.model.gcp_usage_cost_config_type import GCPUsageCostConfigType + return { + "attributes": (GCPUsageCostConfigAttributes,), + "id": (str,), + "type": (GCPUsageCostConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GCPUsageCostConfigAttributes, type: GCPUsageCostConfigType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Google Cloud Usage Cost config. + + :param attributes: Attributes for a Google Cloud Usage Cost config. + :type attributes: GCPUsageCostConfigAttributes + + :param id: The ID of the Google Cloud Usage Cost config. + :type id: str, optional + + :param type: Type of Google Cloud Usage Cost config. + :type type: GCPUsageCostConfigType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_attributes.py b/datadog_api_client/v2/model/gcp_usage_cost_config_attributes.py new file mode 100644 index 0000000000..f400a14375 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_attributes.py @@ -0,0 +1,134 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GCPUsageCostConfigAttributes(ModelNormal): + validations = { + "created_at": { + }, + "months": { + "inclusive_maximum": 36, + }, + "status_updated_at": { + }, + "updated_at": { + }, + } + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "bucket_name": (str,), + "created_at": (str,), + "dataset": (str,), + "error_messages": ([str], none_type), + "export_prefix": (str,), + "export_project_name": (str,), + "months": (int,), + "project_id": (str,), + "service_account": (str,), + "status": (str,), + "status_updated_at": (str,), + "updated_at": (str,), + } + attribute_map = { + "account_id": "account_id", + "bucket_name": "bucket_name", + "created_at": "created_at", + "dataset": "dataset", + "error_messages": "error_messages", + "export_prefix": "export_prefix", + "export_project_name": "export_project_name", + "months": "months", + "project_id": "project_id", + "service_account": "service_account", + "status": "status", + "status_updated_at": "status_updated_at", + "updated_at": "updated_at", + } + + def __init__(self_, account_id: str, bucket_name: str, dataset: str, export_prefix: str, export_project_name: str, service_account: str, status: str, created_at: Union[str, UnsetType]=unset, error_messages: Union[List[str], none_type, UnsetType]=unset, months: Union[int, UnsetType]=unset, project_id: Union[str, UnsetType]=unset, status_updated_at: Union[str, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for a Google Cloud Usage Cost config. + + :param account_id: The Google Cloud account ID. + :type account_id: str + + :param bucket_name: The Google Cloud bucket name used to store the Usage Cost export. + :type bucket_name: str + + :param created_at: The timestamp when the Google Cloud Usage Cost config was created. + :type created_at: str, optional + + :param dataset: The export dataset name used for the Google Cloud Usage Cost Report. + :type dataset: str + + :param error_messages: The error messages for the Google Cloud Usage Cost config. + :type error_messages: [str], none_type, optional + + :param export_prefix: The export prefix used for the Google Cloud Usage Cost Report. + :type export_prefix: str + + :param export_project_name: The name of the Google Cloud Usage Cost Report. + :type export_project_name: str + + :param months: The number of months the report has been backfilled. **Deprecated**. + :type months: int, optional + + :param project_id: The ``project_id`` of the Google Cloud Usage Cost report. + :type project_id: str, optional + + :param service_account: The unique Google Cloud service account email. + :type service_account: str + + :param status: The status of the Google Cloud Usage Cost config. + :type status: str + + :param status_updated_at: The timestamp when the Google Cloud Usage Cost config status was updated. + :type status_updated_at: str, optional + + :param updated_at: The timestamp when the Google Cloud Usage Cost config status was updated. + :type updated_at: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if error_messages is not unset: + kwargs["error_messages"] = error_messages + if months is not unset: + kwargs["months"] = months + if project_id is not unset: + kwargs["project_id"] = project_id + if status_updated_at is not unset: + kwargs["status_updated_at"] = status_updated_at + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.account_id = account_id + self_.bucket_name = bucket_name + self_.dataset = dataset + self_.export_prefix = export_prefix + self_.export_project_name = export_project_name + self_.service_account = service_account + self_.status = status diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_patch_data.py b/datadog_api_client/v2/model/gcp_usage_cost_config_patch_data.py new file mode 100644 index 0000000000..98125625d6 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_patch_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_usage_cost_config_patch_request_attributes import GCPUsageCostConfigPatchRequestAttributes + from datadog_api_client.v2.model.gcp_usage_cost_config_patch_request_type import GCPUsageCostConfigPatchRequestType + +class GCPUsageCostConfigPatchData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_usage_cost_config_patch_request_attributes import GCPUsageCostConfigPatchRequestAttributes + from datadog_api_client.v2.model.gcp_usage_cost_config_patch_request_type import GCPUsageCostConfigPatchRequestType + return { + "attributes": (GCPUsageCostConfigPatchRequestAttributes,), + "type": (GCPUsageCostConfigPatchRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: GCPUsageCostConfigPatchRequestAttributes, type: GCPUsageCostConfigPatchRequestType, **kwargs): + """ + Google Cloud Usage Cost config patch data. + + :param attributes: Attributes for Google Cloud Usage Cost config patch request. + :type attributes: GCPUsageCostConfigPatchRequestAttributes + + :param type: Type of Google Cloud Usage Cost config patch request. + :type type: GCPUsageCostConfigPatchRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_patch_request.py b/datadog_api_client/v2/model/gcp_usage_cost_config_patch_request.py new file mode 100644 index 0000000000..53e451ba2d --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_usage_cost_config_patch_data import GCPUsageCostConfigPatchData + +class GCPUsageCostConfigPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_usage_cost_config_patch_data import GCPUsageCostConfigPatchData + return { + "data": (GCPUsageCostConfigPatchData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GCPUsageCostConfigPatchData, **kwargs): + """ + Google Cloud Usage Cost config patch request. + + :param data: Google Cloud Usage Cost config patch data. + :type data: GCPUsageCostConfigPatchData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_patch_request_attributes.py b/datadog_api_client/v2/model/gcp_usage_cost_config_patch_request_attributes.py new file mode 100644 index 0000000000..0bb4807671 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_patch_request_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GCPUsageCostConfigPatchRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "is_enabled": (bool,), + } + attribute_map = { + "is_enabled": "is_enabled", + } + + def __init__(self_, is_enabled: bool, **kwargs): + """ + Attributes for Google Cloud Usage Cost config patch request. + + :param is_enabled: Whether or not the Cloud Cost Management account is enabled. + :type is_enabled: bool + """ + super().__init__(kwargs) + + + self_.is_enabled = is_enabled diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_patch_request_type.py b/datadog_api_client/v2/model/gcp_usage_cost_config_patch_request_type.py new file mode 100644 index 0000000000..77c0d2a0e1 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_patch_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GCPUsageCostConfigPatchRequestType(ModelSimple): + """ + Type of Google Cloud Usage Cost config patch request. + + :param value: If omitted defaults to "gcp_uc_config_patch_request". Must be one of ["gcp_uc_config_patch_request"]. + :type value: str + """ + + allowed_values = { + "gcp_uc_config_patch_request", + } + GCP_USAGE_COST_CONFIG_PATCH_REQUEST: ClassVar["GCPUsageCostConfigPatchRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GCPUsageCostConfigPatchRequestType.GCP_USAGE_COST_CONFIG_PATCH_REQUEST = GCPUsageCostConfigPatchRequestType("gcp_uc_config_patch_request") diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_post_data.py b/datadog_api_client/v2/model/gcp_usage_cost_config_post_data.py new file mode 100644 index 0000000000..0cd5d36265 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_post_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_usage_cost_config_post_request_attributes import GCPUsageCostConfigPostRequestAttributes + from datadog_api_client.v2.model.gcp_usage_cost_config_post_request_type import GCPUsageCostConfigPostRequestType + +class GCPUsageCostConfigPostData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_usage_cost_config_post_request_attributes import GCPUsageCostConfigPostRequestAttributes + from datadog_api_client.v2.model.gcp_usage_cost_config_post_request_type import GCPUsageCostConfigPostRequestType + return { + "attributes": (GCPUsageCostConfigPostRequestAttributes,), + "type": (GCPUsageCostConfigPostRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: GCPUsageCostConfigPostRequestType, attributes: Union[GCPUsageCostConfigPostRequestAttributes, UnsetType]=unset, **kwargs): + """ + Google Cloud Usage Cost config post data. + + :param attributes: Attributes for Google Cloud Usage Cost config post request. + :type attributes: GCPUsageCostConfigPostRequestAttributes, optional + + :param type: Type of Google Cloud Usage Cost config post request. + :type type: GCPUsageCostConfigPostRequestType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_post_request.py b/datadog_api_client/v2/model/gcp_usage_cost_config_post_request.py new file mode 100644 index 0000000000..2d219d7c77 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_post_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_usage_cost_config_post_data import GCPUsageCostConfigPostData + +class GCPUsageCostConfigPostRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_usage_cost_config_post_data import GCPUsageCostConfigPostData + return { + "data": (GCPUsageCostConfigPostData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GCPUsageCostConfigPostData, **kwargs): + """ + Google Cloud Usage Cost config post request. + + :param data: Google Cloud Usage Cost config post data. + :type data: GCPUsageCostConfigPostData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_post_request_attributes.py b/datadog_api_client/v2/model/gcp_usage_cost_config_post_request_attributes.py new file mode 100644 index 0000000000..6956eb0a77 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_post_request_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GCPUsageCostConfigPostRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "billing_account_id": (str,), + "bucket_name": (str,), + "export_dataset_name": (str,), + "export_prefix": (str,), + "export_project_name": (str,), + "service_account": (str,), + } + attribute_map = { + "billing_account_id": "billing_account_id", + "bucket_name": "bucket_name", + "export_dataset_name": "export_dataset_name", + "export_prefix": "export_prefix", + "export_project_name": "export_project_name", + "service_account": "service_account", + } + + def __init__(self_, billing_account_id: str, bucket_name: str, export_dataset_name: str, export_project_name: str, service_account: str, export_prefix: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for Google Cloud Usage Cost config post request. + + :param billing_account_id: The Google Cloud account ID. + :type billing_account_id: str + + :param bucket_name: The Google Cloud bucket name used to store the Usage Cost export. + :type bucket_name: str + + :param export_dataset_name: The export dataset name used for the Google Cloud Usage Cost report. + :type export_dataset_name: str + + :param export_prefix: The export prefix used for the Google Cloud Usage Cost report. + :type export_prefix: str, optional + + :param export_project_name: The name of the Google Cloud Usage Cost report. + :type export_project_name: str + + :param service_account: The unique Google Cloud service account email. + :type service_account: str + """ + if export_prefix is not unset: + kwargs["export_prefix"] = export_prefix + super().__init__(kwargs) + + + self_.billing_account_id = billing_account_id + self_.bucket_name = bucket_name + self_.export_dataset_name = export_dataset_name + self_.export_project_name = export_project_name + self_.service_account = service_account diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_post_request_type.py b/datadog_api_client/v2/model/gcp_usage_cost_config_post_request_type.py new file mode 100644 index 0000000000..f1d170f7b1 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_post_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GCPUsageCostConfigPostRequestType(ModelSimple): + """ + Type of Google Cloud Usage Cost config post request. + + :param value: If omitted defaults to "gcp_uc_config_post_request". Must be one of ["gcp_uc_config_post_request"]. + :type value: str + """ + + allowed_values = { + "gcp_uc_config_post_request", + } + GCP_USAGE_COST_CONFIG_POST_REQUEST: ClassVar["GCPUsageCostConfigPostRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GCPUsageCostConfigPostRequestType.GCP_USAGE_COST_CONFIG_POST_REQUEST = GCPUsageCostConfigPostRequestType("gcp_uc_config_post_request") diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_response.py b/datadog_api_client/v2/model/gcp_usage_cost_config_response.py new file mode 100644 index 0000000000..47b1d2307a --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_usage_cost_config import GCPUsageCostConfig + +class GCPUsageCostConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_usage_cost_config import GCPUsageCostConfig + return { + "data": (GCPUsageCostConfig,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GCPUsageCostConfig, UnsetType]=unset, **kwargs): + """ + Response of Google Cloud Usage Cost config. + + :param data: Google Cloud Usage Cost config. + :type data: GCPUsageCostConfig, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcp_usage_cost_config_type.py b/datadog_api_client/v2/model/gcp_usage_cost_config_type.py new file mode 100644 index 0000000000..01e2dc4b69 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GCPUsageCostConfigType(ModelSimple): + """ + Type of Google Cloud Usage Cost config. + + :param value: If omitted defaults to "gcp_uc_config". Must be one of ["gcp_uc_config"]. + :type value: str + """ + + allowed_values = { + "gcp_uc_config", + } + GCP_UC_CONFIG: ClassVar["GCPUsageCostConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GCPUsageCostConfigType.GCP_UC_CONFIG = GCPUsageCostConfigType("gcp_uc_config") diff --git a/datadog_api_client/v2/model/gcp_usage_cost_configs_response.py b/datadog_api_client/v2/model/gcp_usage_cost_configs_response.py new file mode 100644 index 0000000000..e2c9897bc8 --- /dev/null +++ b/datadog_api_client/v2/model/gcp_usage_cost_configs_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_usage_cost_config import GCPUsageCostConfig + +class GCPUsageCostConfigsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_usage_cost_config import GCPUsageCostConfig + return { + "data": ([GCPUsageCostConfig],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[GCPUsageCostConfig], **kwargs): + """ + List of Google Cloud Usage Cost configs. + + :param data: A Google Cloud Usage Cost config. + :type data: [GCPUsageCostConfig] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/gcpsts_delegate_account.py b/datadog_api_client/v2/model/gcpsts_delegate_account.py new file mode 100644 index 0000000000..59515e2102 --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_delegate_account.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcpsts_delegate_account_attributes import GCPSTSDelegateAccountAttributes + from datadog_api_client.v2.model.gcpsts_delegate_account_type import GCPSTSDelegateAccountType + +class GCPSTSDelegateAccount(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcpsts_delegate_account_attributes import GCPSTSDelegateAccountAttributes + from datadog_api_client.v2.model.gcpsts_delegate_account_type import GCPSTSDelegateAccountType + return { + "attributes": (GCPSTSDelegateAccountAttributes,), + "id": (str,), + "type": (GCPSTSDelegateAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[GCPSTSDelegateAccountAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[GCPSTSDelegateAccountType, UnsetType]=unset, **kwargs): + """ + Datadog principal service account info. + + :param attributes: Your delegate account attributes. + :type attributes: GCPSTSDelegateAccountAttributes, optional + + :param id: The ID of the delegate service account. + :type id: str, optional + + :param type: The type of account. + :type type: GCPSTSDelegateAccountType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_delegate_account_attributes.py b/datadog_api_client/v2/model/gcpsts_delegate_account_attributes.py new file mode 100644 index 0000000000..f8abec28aa --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_delegate_account_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GCPSTSDelegateAccountAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "delegate_account_email": (str,), + } + attribute_map = { + "delegate_account_email": "delegate_account_email", + } + + def __init__(self_, delegate_account_email: Union[str, UnsetType]=unset, **kwargs): + """ + Your delegate account attributes. + + :param delegate_account_email: Your organization's Datadog principal email address. + :type delegate_account_email: str, optional + """ + if delegate_account_email is not unset: + kwargs["delegate_account_email"] = delegate_account_email + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_delegate_account_response.py b/datadog_api_client/v2/model/gcpsts_delegate_account_response.py new file mode 100644 index 0000000000..845627a257 --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_delegate_account_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcpsts_delegate_account import GCPSTSDelegateAccount + +class GCPSTSDelegateAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcpsts_delegate_account import GCPSTSDelegateAccount + return { + "data": (GCPSTSDelegateAccount,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GCPSTSDelegateAccount, UnsetType]=unset, **kwargs): + """ + Your delegate service account response data. + + :param data: Datadog principal service account info. + :type data: GCPSTSDelegateAccount, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_delegate_account_type.py b/datadog_api_client/v2/model/gcpsts_delegate_account_type.py new file mode 100644 index 0000000000..2843d2dc39 --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_delegate_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GCPSTSDelegateAccountType(ModelSimple): + """ + The type of account. + + :param value: If omitted defaults to "gcp_sts_delegate". Must be one of ["gcp_sts_delegate"]. + :type value: str + """ + + allowed_values = { + "gcp_sts_delegate", + } + GCP_STS_DELEGATE: ClassVar["GCPSTSDelegateAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GCPSTSDelegateAccountType.GCP_STS_DELEGATE = GCPSTSDelegateAccountType("gcp_sts_delegate") diff --git a/datadog_api_client/v2/model/gcpsts_service_account.py b/datadog_api_client/v2/model/gcpsts_service_account.py new file mode 100644 index 0000000000..fc8b085b09 --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_service_account.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcpsts_service_account_attributes import GCPSTSServiceAccountAttributes + from datadog_api_client.v2.model.gcp_service_account_meta import GCPServiceAccountMeta + from datadog_api_client.v2.model.gcp_service_account_type import GCPServiceAccountType + +class GCPSTSServiceAccount(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcpsts_service_account_attributes import GCPSTSServiceAccountAttributes + from datadog_api_client.v2.model.gcp_service_account_meta import GCPServiceAccountMeta + from datadog_api_client.v2.model.gcp_service_account_type import GCPServiceAccountType + return { + "attributes": (GCPSTSServiceAccountAttributes,), + "id": (str,), + "meta": (GCPServiceAccountMeta,), + "type": (GCPServiceAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "type": "type", + } + + def __init__(self_, attributes: Union[GCPSTSServiceAccountAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, meta: Union[GCPServiceAccountMeta, UnsetType]=unset, type: Union[GCPServiceAccountType, UnsetType]=unset, **kwargs): + """ + Info on your service account. + + :param attributes: Attributes associated with your service account. + :type attributes: GCPSTSServiceAccountAttributes, optional + + :param id: Your service account's unique ID. + :type id: str, optional + + :param meta: Additional information related to your service account. + :type meta: GCPServiceAccountMeta, optional + + :param type: The type of account. + :type type: GCPServiceAccountType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if meta is not unset: + kwargs["meta"] = meta + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_service_account_attributes.py b/datadog_api_client/v2/model/gcpsts_service_account_attributes.py new file mode 100644 index 0000000000..a72efc6b58 --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_service_account_attributes.py @@ -0,0 +1,146 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcp_metric_namespace_config import GCPMetricNamespaceConfig + from datadog_api_client.v2.model.gcp_monitored_resource_config import GCPMonitoredResourceConfig + +class GCPSTSServiceAccountAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcp_metric_namespace_config import GCPMetricNamespaceConfig + from datadog_api_client.v2.model.gcp_monitored_resource_config import GCPMonitoredResourceConfig + return { + "account_tags": ([str],), + "automute": (bool,), + "client_email": (str,), + "cloud_run_revision_filters": ([str],), + "host_filters": ([str],), + "is_cspm_enabled": (bool,), + "is_global_location_enabled": (bool,), + "is_per_project_quota_enabled": (bool,), + "is_resource_change_collection_enabled": (bool,), + "is_security_command_center_enabled": (bool,), + "metric_namespace_configs": ([GCPMetricNamespaceConfig],), + "monitored_resource_configs": ([GCPMonitoredResourceConfig],), + "region_filter_configs": ([str],), + "resource_collection_enabled": (bool,), + } + attribute_map = { + "account_tags": "account_tags", + "automute": "automute", + "client_email": "client_email", + "cloud_run_revision_filters": "cloud_run_revision_filters", + "host_filters": "host_filters", + "is_cspm_enabled": "is_cspm_enabled", + "is_global_location_enabled": "is_global_location_enabled", + "is_per_project_quota_enabled": "is_per_project_quota_enabled", + "is_resource_change_collection_enabled": "is_resource_change_collection_enabled", + "is_security_command_center_enabled": "is_security_command_center_enabled", + "metric_namespace_configs": "metric_namespace_configs", + "monitored_resource_configs": "monitored_resource_configs", + "region_filter_configs": "region_filter_configs", + "resource_collection_enabled": "resource_collection_enabled", + } + + def __init__(self_, account_tags: Union[List[str], UnsetType]=unset, automute: Union[bool, UnsetType]=unset, client_email: Union[str, UnsetType]=unset, cloud_run_revision_filters: Union[List[str], UnsetType]=unset, host_filters: Union[List[str], UnsetType]=unset, is_cspm_enabled: Union[bool, UnsetType]=unset, is_global_location_enabled: Union[bool, UnsetType]=unset, is_per_project_quota_enabled: Union[bool, UnsetType]=unset, is_resource_change_collection_enabled: Union[bool, UnsetType]=unset, is_security_command_center_enabled: Union[bool, UnsetType]=unset, metric_namespace_configs: Union[List[GCPMetricNamespaceConfig], UnsetType]=unset, monitored_resource_configs: Union[List[GCPMonitoredResourceConfig], UnsetType]=unset, region_filter_configs: Union[List[str], UnsetType]=unset, resource_collection_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes associated with your service account. + + :param account_tags: Tags to be associated with GCP metrics and service checks from your account. + :type account_tags: [str], optional + + :param automute: Silence monitors for expected GCE instance shutdowns. + :type automute: bool, optional + + :param client_email: Your service account email address. + :type client_email: str, optional + + :param cloud_run_revision_filters: List of filters to limit the Cloud Run revisions that are pulled into Datadog by using tags. + Only Cloud Run revision resources that apply to specified filters are imported into Datadog. + **Note:** This field is deprecated. Instead, use ``monitored_resource_configs`` with ``type=cloud_run_revision`` **Deprecated**. + :type cloud_run_revision_filters: [str], optional + + :param host_filters: List of filters to limit the VM instances that are pulled into Datadog by using tags. + Only VM instance resources that apply to specified filters are imported into Datadog. + **Note:** This field is deprecated. Instead, use ``monitored_resource_configs`` with ``type=gce_instance`` **Deprecated**. + :type host_filters: [str], optional + + :param is_cspm_enabled: When enabled, Datadog will activate the Cloud Security Monitoring product for this service account. Note: This requires resource_collection_enabled to be set to true. + :type is_cspm_enabled: bool, optional + + :param is_global_location_enabled: When enabled, Datadog collects metrics where location is explicitly stated as "global" or where location information cannot be deduced from GCP labels. + :type is_global_location_enabled: bool, optional + + :param is_per_project_quota_enabled: When enabled, Datadog applies the ``X-Goog-User-Project`` header, attributing Google Cloud billing and quota usage to the project being monitored rather than the default service account project. + :type is_per_project_quota_enabled: bool, optional + + :param is_resource_change_collection_enabled: When enabled, Datadog scans for all resource change data in your Google Cloud environment. + :type is_resource_change_collection_enabled: bool, optional + + :param is_security_command_center_enabled: When enabled, Datadog will attempt to collect Security Command Center Findings. Note: This requires additional permissions on the service account. + :type is_security_command_center_enabled: bool, optional + + :param metric_namespace_configs: Configurations for GCP metric namespaces. + :type metric_namespace_configs: [GCPMetricNamespaceConfig], optional + + :param monitored_resource_configs: Configurations for GCP monitored resources. + :type monitored_resource_configs: [GCPMonitoredResourceConfig], optional + + :param region_filter_configs: Configurations for GCP location filtering, such as region, multi-region, or zone. Only monitored resources that match the specified regions are imported into Datadog. By default, Datadog collects from all locations. + :type region_filter_configs: [str], optional + + :param resource_collection_enabled: When enabled, Datadog scans for all resources in your GCP environment. + :type resource_collection_enabled: bool, optional + """ + if account_tags is not unset: + kwargs["account_tags"] = account_tags + if automute is not unset: + kwargs["automute"] = automute + if client_email is not unset: + kwargs["client_email"] = client_email + if cloud_run_revision_filters is not unset: + kwargs["cloud_run_revision_filters"] = cloud_run_revision_filters + if host_filters is not unset: + kwargs["host_filters"] = host_filters + if is_cspm_enabled is not unset: + kwargs["is_cspm_enabled"] = is_cspm_enabled + if is_global_location_enabled is not unset: + kwargs["is_global_location_enabled"] = is_global_location_enabled + if is_per_project_quota_enabled is not unset: + kwargs["is_per_project_quota_enabled"] = is_per_project_quota_enabled + if is_resource_change_collection_enabled is not unset: + kwargs["is_resource_change_collection_enabled"] = is_resource_change_collection_enabled + if is_security_command_center_enabled is not unset: + kwargs["is_security_command_center_enabled"] = is_security_command_center_enabled + if metric_namespace_configs is not unset: + kwargs["metric_namespace_configs"] = metric_namespace_configs + if monitored_resource_configs is not unset: + kwargs["monitored_resource_configs"] = monitored_resource_configs + if region_filter_configs is not unset: + kwargs["region_filter_configs"] = region_filter_configs + if resource_collection_enabled is not unset: + kwargs["resource_collection_enabled"] = resource_collection_enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_service_account_create_request.py b/datadog_api_client/v2/model/gcpsts_service_account_create_request.py new file mode 100644 index 0000000000..599d9144e0 --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_service_account_create_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcpsts_service_account_data import GCPSTSServiceAccountData + +class GCPSTSServiceAccountCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcpsts_service_account_data import GCPSTSServiceAccountData + return { + "data": (GCPSTSServiceAccountData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GCPSTSServiceAccountData, UnsetType]=unset, **kwargs): + """ + Data on your newly generated service account. + + :param data: Additional metadata on your generated service account. + :type data: GCPSTSServiceAccountData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_service_account_data.py b/datadog_api_client/v2/model/gcpsts_service_account_data.py new file mode 100644 index 0000000000..22650f895e --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_service_account_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcpsts_service_account_attributes import GCPSTSServiceAccountAttributes + from datadog_api_client.v2.model.gcp_service_account_type import GCPServiceAccountType + +class GCPSTSServiceAccountData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcpsts_service_account_attributes import GCPSTSServiceAccountAttributes + from datadog_api_client.v2.model.gcp_service_account_type import GCPServiceAccountType + return { + "attributes": (GCPSTSServiceAccountAttributes,), + "type": (GCPServiceAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[GCPSTSServiceAccountAttributes, UnsetType]=unset, type: Union[GCPServiceAccountType, UnsetType]=unset, **kwargs): + """ + Additional metadata on your generated service account. + + :param attributes: Attributes associated with your service account. + :type attributes: GCPSTSServiceAccountAttributes, optional + + :param type: The type of account. + :type type: GCPServiceAccountType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_service_account_response.py b/datadog_api_client/v2/model/gcpsts_service_account_response.py new file mode 100644 index 0000000000..49c0cf7ec0 --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_service_account_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcpsts_service_account import GCPSTSServiceAccount + +class GCPSTSServiceAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcpsts_service_account import GCPSTSServiceAccount + return { + "data": (GCPSTSServiceAccount,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GCPSTSServiceAccount, UnsetType]=unset, **kwargs): + """ + The account creation response. + + :param data: Info on your service account. + :type data: GCPSTSServiceAccount, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_service_account_update_request.py b/datadog_api_client/v2/model/gcpsts_service_account_update_request.py new file mode 100644 index 0000000000..114eb7e5fc --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_service_account_update_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcpsts_service_account_update_request_data import GCPSTSServiceAccountUpdateRequestData + +class GCPSTSServiceAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcpsts_service_account_update_request_data import GCPSTSServiceAccountUpdateRequestData + return { + "data": (GCPSTSServiceAccountUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GCPSTSServiceAccountUpdateRequestData, UnsetType]=unset, **kwargs): + """ + Service account info. + + :param data: Data on your service account. + :type data: GCPSTSServiceAccountUpdateRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_service_account_update_request_data.py b/datadog_api_client/v2/model/gcpsts_service_account_update_request_data.py new file mode 100644 index 0000000000..a2edcf91df --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_service_account_update_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcpsts_service_account_attributes import GCPSTSServiceAccountAttributes + from datadog_api_client.v2.model.gcp_service_account_type import GCPServiceAccountType + +class GCPSTSServiceAccountUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcpsts_service_account_attributes import GCPSTSServiceAccountAttributes + from datadog_api_client.v2.model.gcp_service_account_type import GCPServiceAccountType + return { + "attributes": (GCPSTSServiceAccountAttributes,), + "id": (str,), + "type": (GCPServiceAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[GCPSTSServiceAccountAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[GCPServiceAccountType, UnsetType]=unset, **kwargs): + """ + Data on your service account. + + :param attributes: Attributes associated with your service account. + :type attributes: GCPSTSServiceAccountAttributes, optional + + :param id: Your service account's unique ID. + :type id: str, optional + + :param type: The type of account. + :type type: GCPServiceAccountType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gcpsts_service_accounts_response.py b/datadog_api_client/v2/model/gcpsts_service_accounts_response.py new file mode 100644 index 0000000000..a32ec28560 --- /dev/null +++ b/datadog_api_client/v2/model/gcpsts_service_accounts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gcpsts_service_account import GCPSTSServiceAccount + +class GCPSTSServiceAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gcpsts_service_account import GCPSTSServiceAccount + return { + "data": ([GCPSTSServiceAccount],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[GCPSTSServiceAccount], UnsetType]=unset, **kwargs): + """ + Object containing all your STS enabled accounts. + + :param data: Array of GCP STS enabled service accounts. + :type data: [GCPSTSServiceAccount], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/gemini_api_key.py b/datadog_api_client/v2/model/gemini_api_key.py new file mode 100644 index 0000000000..0ee8ffabd0 --- /dev/null +++ b/datadog_api_client/v2/model/gemini_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gemini_api_key_type import GeminiAPIKeyType + +class GeminiAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gemini_api_key_type import GeminiAPIKeyType + return { + "api_key": (str,), + "type": (GeminiAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, api_key: str, type: GeminiAPIKeyType, **kwargs): + """ + The definition of the ``GeminiAPIKey`` object. + + :param api_key: The ``GeminiAPIKey`` ``api_key``. + :type api_key: str + + :param type: The definition of the ``GeminiAPIKey`` object. + :type type: GeminiAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_key = api_key + self_.type = type diff --git a/datadog_api_client/v2/model/gemini_api_key_type.py b/datadog_api_client/v2/model/gemini_api_key_type.py new file mode 100644 index 0000000000..233813988e --- /dev/null +++ b/datadog_api_client/v2/model/gemini_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GeminiAPIKeyType(ModelSimple): + """ + The definition of the `GeminiAPIKey` object. + + :param value: If omitted defaults to "GeminiAPIKey". Must be one of ["GeminiAPIKey"]. + :type value: str + """ + + allowed_values = { + "GeminiAPIKey", + } + GEMINIAPIKEY: ClassVar["GeminiAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GeminiAPIKeyType.GEMINIAPIKEY = GeminiAPIKeyType("GeminiAPIKey") diff --git a/datadog_api_client/v2/model/gemini_api_key_update.py b/datadog_api_client/v2/model/gemini_api_key_update.py new file mode 100644 index 0000000000..8444563bc0 --- /dev/null +++ b/datadog_api_client/v2/model/gemini_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gemini_api_key_type import GeminiAPIKeyType + +class GeminiAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gemini_api_key_type import GeminiAPIKeyType + return { + "api_key": (str,), + "type": (GeminiAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, type: GeminiAPIKeyType, api_key: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``GeminiAPIKey`` object. + + :param api_key: The ``GeminiAPIKeyUpdate`` ``api_key``. + :type api_key: str, optional + + :param type: The definition of the ``GeminiAPIKey`` object. + :type type: GeminiAPIKeyType + """ + if api_key is not unset: + kwargs["api_key"] = api_key + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/gemini_credentials.py b/datadog_api_client/v2/model/gemini_credentials.py new file mode 100644 index 0000000000..2fce82be07 --- /dev/null +++ b/datadog_api_client/v2/model/gemini_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GeminiCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``GeminiCredentials`` object. + + :param api_key: The `GeminiAPIKey` `api_key`. + :type api_key: str + + :param type: The definition of the `GeminiAPIKey` object. + :type type: GeminiAPIKeyType + """ + 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.gemini_api_key import GeminiAPIKey + return { + "oneOf": [ + GeminiAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/gemini_credentials_update.py b/datadog_api_client/v2/model/gemini_credentials_update.py new file mode 100644 index 0000000000..bbea212556 --- /dev/null +++ b/datadog_api_client/v2/model/gemini_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GeminiCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``GeminiCredentialsUpdate`` object. + + :param api_key: The `GeminiAPIKeyUpdate` `api_key`. + :type api_key: str, optional + + :param type: The definition of the `GeminiAPIKey` object. + :type type: GeminiAPIKeyType + """ + 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.gemini_api_key_update import GeminiAPIKeyUpdate + return { + "oneOf": [ + GeminiAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/gemini_integration.py b/datadog_api_client/v2/model/gemini_integration.py new file mode 100644 index 0000000000..4f5e51949b --- /dev/null +++ b/datadog_api_client/v2/model/gemini_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gemini_credentials import GeminiCredentials + from datadog_api_client.v2.model.gemini_integration_type import GeminiIntegrationType + from datadog_api_client.v2.model.gemini_api_key import GeminiAPIKey + +class GeminiIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gemini_credentials import GeminiCredentials + from datadog_api_client.v2.model.gemini_integration_type import GeminiIntegrationType + return { + "credentials": (GeminiCredentials,), + "type": (GeminiIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[GeminiCredentials, GeminiAPIKey], type: GeminiIntegrationType, **kwargs): + """ + The definition of the ``GeminiIntegration`` object. + + :param credentials: The definition of the ``GeminiCredentials`` object. + :type credentials: GeminiCredentials + + :param type: The definition of the ``GeminiIntegrationType`` object. + :type type: GeminiIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/gemini_integration_type.py b/datadog_api_client/v2/model/gemini_integration_type.py new file mode 100644 index 0000000000..b08c20c41b --- /dev/null +++ b/datadog_api_client/v2/model/gemini_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GeminiIntegrationType(ModelSimple): + """ + The definition of the `GeminiIntegrationType` object. + + :param value: If omitted defaults to "Gemini". Must be one of ["Gemini"]. + :type value: str + """ + + allowed_values = { + "Gemini", + } + GEMINI: ClassVar["GeminiIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GeminiIntegrationType.GEMINI = GeminiIntegrationType("Gemini") diff --git a/datadog_api_client/v2/model/gemini_integration_update.py b/datadog_api_client/v2/model/gemini_integration_update.py new file mode 100644 index 0000000000..8bf9fe958f --- /dev/null +++ b/datadog_api_client/v2/model/gemini_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gemini_credentials_update import GeminiCredentialsUpdate + from datadog_api_client.v2.model.gemini_integration_type import GeminiIntegrationType + from datadog_api_client.v2.model.gemini_api_key_update import GeminiAPIKeyUpdate + +class GeminiIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gemini_credentials_update import GeminiCredentialsUpdate + from datadog_api_client.v2.model.gemini_integration_type import GeminiIntegrationType + return { + "credentials": (GeminiCredentialsUpdate,), + "type": (GeminiIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: GeminiIntegrationType, credentials: Union[GeminiCredentialsUpdate, GeminiAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``GeminiIntegrationUpdate`` object. + + :param credentials: The definition of the ``GeminiCredentialsUpdate`` object. + :type credentials: GeminiCredentialsUpdate, optional + + :param type: The definition of the ``GeminiIntegrationType`` object. + :type type: GeminiIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/generate_cost_tag_description_response.py b/datadog_api_client/v2/model/generate_cost_tag_description_response.py new file mode 100644 index 0000000000..d08755ea5f --- /dev/null +++ b/datadog_api_client/v2/model/generate_cost_tag_description_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.generated_cost_tag_description import GeneratedCostTagDescription + +class GenerateCostTagDescriptionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.generated_cost_tag_description import GeneratedCostTagDescription + return { + "data": (GeneratedCostTagDescription,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GeneratedCostTagDescription, **kwargs): + """ + Response wrapping an AI-generated Cloud Cost Management tag key description. + + :param data: AI-generated Cloud Cost Management tag key description returned by the generate endpoint. The result is returned to the client but is not persisted by this endpoint. + :type data: GeneratedCostTagDescription + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/generated_cost_tag_description.py b/datadog_api_client/v2/model/generated_cost_tag_description.py new file mode 100644 index 0000000000..3a7a62aca7 --- /dev/null +++ b/datadog_api_client/v2/model/generated_cost_tag_description.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.generated_cost_tag_description_attributes import GeneratedCostTagDescriptionAttributes + from datadog_api_client.v2.model.generated_cost_tag_description_type import GeneratedCostTagDescriptionType + +class GeneratedCostTagDescription(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.generated_cost_tag_description_attributes import GeneratedCostTagDescriptionAttributes + from datadog_api_client.v2.model.generated_cost_tag_description_type import GeneratedCostTagDescriptionType + return { + "attributes": (GeneratedCostTagDescriptionAttributes,), + "id": (str,), + "type": (GeneratedCostTagDescriptionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GeneratedCostTagDescriptionAttributes, id: str, type: GeneratedCostTagDescriptionType, **kwargs): + """ + AI-generated Cloud Cost Management tag key description returned by the generate endpoint. The result is returned to the client but is not persisted by this endpoint. + + :param attributes: Attributes of an AI-generated Cloud Cost Management tag key description. + :type attributes: GeneratedCostTagDescriptionAttributes + + :param id: The tag key the AI description was generated for. + :type id: str + + :param type: Type of the AI-generated Cloud Cost Management tag description resource. + :type type: GeneratedCostTagDescriptionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/generated_cost_tag_description_attributes.py b/datadog_api_client/v2/model/generated_cost_tag_description_attributes.py new file mode 100644 index 0000000000..9fd07b3f86 --- /dev/null +++ b/datadog_api_client/v2/model/generated_cost_tag_description_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GeneratedCostTagDescriptionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + } + attribute_map = { + "description": "description", + } + + def __init__(self_, description: str, **kwargs): + """ + Attributes of an AI-generated Cloud Cost Management tag key description. + + :param description: The AI-generated description for the tag key. + :type description: str + """ + super().__init__(kwargs) + + + self_.description = description diff --git a/datadog_api_client/v2/model/generated_cost_tag_description_type.py b/datadog_api_client/v2/model/generated_cost_tag_description_type.py new file mode 100644 index 0000000000..423231e8c5 --- /dev/null +++ b/datadog_api_client/v2/model/generated_cost_tag_description_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GeneratedCostTagDescriptionType(ModelSimple): + """ + Type of the AI-generated Cloud Cost Management tag description resource. + + :param value: If omitted defaults to "cost_generated_tag_description". Must be one of ["cost_generated_tag_description"]. + :type value: str + """ + + allowed_values = { + "cost_generated_tag_description", + } + COST_GENERATED_TAG_DESCRIPTION: ClassVar["GeneratedCostTagDescriptionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GeneratedCostTagDescriptionType.COST_GENERATED_TAG_DESCRIPTION = GeneratedCostTagDescriptionType("cost_generated_tag_description") diff --git a/datadog_api_client/v2/model/get_action_connection_response.py b/datadog_api_client/v2/model/get_action_connection_response.py new file mode 100644 index 0000000000..635417776f --- /dev/null +++ b/datadog_api_client/v2/model/get_action_connection_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_connection_data import ActionConnectionData + from datadog_api_client.v2.model.aws_integration import AWSIntegration + from datadog_api_client.v2.model.anthropic_integration import AnthropicIntegration + from datadog_api_client.v2.model.asana_integration import AsanaIntegration + from datadog_api_client.v2.model.azure_integration import AzureIntegration + from datadog_api_client.v2.model.circle_ci_integration import CircleCIIntegration + from datadog_api_client.v2.model.clickup_integration import ClickupIntegration + from datadog_api_client.v2.model.cloudflare_integration import CloudflareIntegration + from datadog_api_client.v2.model.config_cat_integration import ConfigCatIntegration + from datadog_api_client.v2.model.datadog_integration import DatadogIntegration + from datadog_api_client.v2.model.fastly_integration import FastlyIntegration + from datadog_api_client.v2.model.freshservice_integration import FreshserviceIntegration + from datadog_api_client.v2.model.gcp_integration import GCPIntegration + from datadog_api_client.v2.model.gemini_integration import GeminiIntegration + from datadog_api_client.v2.model.gitlab_integration import GitlabIntegration + from datadog_api_client.v2.model.grey_noise_integration import GreyNoiseIntegration + from datadog_api_client.v2.model.http_integration import HTTPIntegration + from datadog_api_client.v2.model.launch_darkly_integration import LaunchDarklyIntegration + from datadog_api_client.v2.model.notion_integration import NotionIntegration + from datadog_api_client.v2.model.okta_integration import OktaIntegration + from datadog_api_client.v2.model.open_ai_integration import OpenAIIntegration + from datadog_api_client.v2.model.service_now_integration import ServiceNowIntegration + from datadog_api_client.v2.model.split_integration import SplitIntegration + from datadog_api_client.v2.model.statsig_integration import StatsigIntegration + from datadog_api_client.v2.model.virus_total_integration import VirusTotalIntegration + +class GetActionConnectionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_connection_data import ActionConnectionData + return { + "data": (ActionConnectionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ActionConnectionData, UnsetType]=unset, **kwargs): + """ + The response for found connection + + :param data: Data related to the connection. + :type data: ActionConnectionData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_app_key_registration_response.py b/datadog_api_client/v2/model/get_app_key_registration_response.py new file mode 100644 index 0000000000..2c9cc31685 --- /dev/null +++ b/datadog_api_client/v2/model/get_app_key_registration_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_key_registration_data import AppKeyRegistrationData + +class GetAppKeyRegistrationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_key_registration_data import AppKeyRegistrationData + return { + "data": (AppKeyRegistrationData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AppKeyRegistrationData, UnsetType]=unset, **kwargs): + """ + The response object after getting an app key registration. + + :param data: Data related to the app key registration. + :type data: AppKeyRegistrationData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_app_response.py b/datadog_api_client/v2/model/get_app_response.py new file mode 100644 index 0000000000..2c5c2bc6fa --- /dev/null +++ b/datadog_api_client/v2/model/get_app_response.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_app_response_data import GetAppResponseData + from datadog_api_client.v2.model.deployment import Deployment + from datadog_api_client.v2.model.app_meta import AppMeta + from datadog_api_client.v2.model.app_relationship import AppRelationship + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class GetAppResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_app_response_data import GetAppResponseData + from datadog_api_client.v2.model.deployment import Deployment + from datadog_api_client.v2.model.app_meta import AppMeta + from datadog_api_client.v2.model.app_relationship import AppRelationship + return { + "data": (GetAppResponseData,), + "included": ([Deployment],), + "meta": (AppMeta,), + "relationship": (AppRelationship,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + "relationship": "relationship", + } + + def __init__(self_, data: Union[GetAppResponseData, UnsetType]=unset, included: Union[List[Deployment], UnsetType]=unset, meta: Union[AppMeta, UnsetType]=unset, relationship: Union[AppRelationship, UnsetType]=unset, **kwargs): + """ + The full app definition response object. + + :param data: The data object containing the app definition. + :type data: GetAppResponseData, optional + + :param included: Data on the version of the app that was published. + :type included: [Deployment], optional + + :param meta: Metadata of an app. + :type meta: AppMeta, optional + + :param relationship: The app's publication relationship and custom connections. + :type relationship: AppRelationship, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + if relationship is not unset: + kwargs["relationship"] = relationship + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_app_response_data.py b/datadog_api_client/v2/model/get_app_response_data.py new file mode 100644 index 0000000000..dc672b6562 --- /dev/null +++ b/datadog_api_client/v2/model/get_app_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_app_response_data_attributes import GetAppResponseDataAttributes + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class GetAppResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_app_response_data_attributes import GetAppResponseDataAttributes + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + return { + "attributes": (GetAppResponseDataAttributes,), + "id": (UUID,), + "type": (AppDefinitionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GetAppResponseDataAttributes, id: UUID, type: AppDefinitionType, **kwargs): + """ + The data object containing the app definition. + + :param attributes: The app definition attributes, such as name, description, and components. + :type attributes: GetAppResponseDataAttributes + + :param id: The ID of the app. + :type id: UUID + + :param type: The app definition type. + :type type: AppDefinitionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/get_app_response_data_attributes.py b/datadog_api_client/v2/model/get_app_response_data_attributes.py new file mode 100644 index 0000000000..755c8f2bcd --- /dev/null +++ b/datadog_api_client/v2/model/get_app_response_data_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.component_grid import ComponentGrid + from datadog_api_client.v2.model.query import Query + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class GetAppResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.component_grid import ComponentGrid + from datadog_api_client.v2.model.query import Query + return { + "components": ([ComponentGrid],), + "description": (str,), + "favorite": (bool,), + "name": (str,), + "queries": ([Query],), + "root_instance_name": (str,), + "tags": ([str],), + } + attribute_map = { + "components": "components", + "description": "description", + "favorite": "favorite", + "name": "name", + "queries": "queries", + "root_instance_name": "rootInstanceName", + "tags": "tags", + } + + def __init__(self_, components: Union[List[ComponentGrid], UnsetType]=unset, description: Union[str, UnsetType]=unset, favorite: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, queries: Union[List[Union[Query, ActionQuery, DataTransform, StateVariable]], UnsetType]=unset, root_instance_name: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The app definition attributes, such as name, description, and components. + + :param components: The UI components that make up the app. + :type components: [ComponentGrid], optional + + :param description: A human-readable description for the app. + :type description: str, optional + + :param favorite: Whether the app is marked as a favorite by the current user. + :type favorite: bool, optional + + :param name: The name of the app. + :type name: str, optional + + :param queries: An array of queries, such as external actions and state variables, that the app uses. + :type queries: [Query], optional + + :param root_instance_name: The name of the root component of the app. This must be a ``grid`` component that contains all other components. + :type root_instance_name: str, optional + + :param tags: A list of tags for the app, which can be used to filter apps. + :type tags: [str], optional + """ + if components is not unset: + kwargs["components"] = components + if description is not unset: + kwargs["description"] = description + if favorite is not unset: + kwargs["favorite"] = favorite + if name is not unset: + kwargs["name"] = name + if queries is not unset: + kwargs["queries"] = queries + if root_instance_name is not unset: + kwargs["root_instance_name"] = root_instance_name + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_ast_request.py b/datadog_api_client/v2/model/get_ast_request.py new file mode 100644 index 0000000000..46246ef4e3 --- /dev/null +++ b/datadog_api_client/v2/model/get_ast_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_ast_request_data import GetAstRequestData + +class GetAstRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_ast_request_data import GetAstRequestData + return { + "data": (GetAstRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GetAstRequestData, **kwargs): + """ + The request payload for parsing source code into an abstract syntax tree. + + :param data: The primary data object in the get-AST request. + :type data: GetAstRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/get_ast_request_data.py b/datadog_api_client/v2/model/get_ast_request_data.py new file mode 100644 index 0000000000..c616270529 --- /dev/null +++ b/datadog_api_client/v2/model/get_ast_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_ast_request_data_attributes import GetAstRequestDataAttributes + from datadog_api_client.v2.model.get_ast_request_data_type import GetAstRequestDataType + +class GetAstRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_ast_request_data_attributes import GetAstRequestDataAttributes + from datadog_api_client.v2.model.get_ast_request_data_type import GetAstRequestDataType + return { + "attributes": (GetAstRequestDataAttributes,), + "id": (str,), + "type": (GetAstRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GetAstRequestDataAttributes, type: GetAstRequestDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The primary data object in the get-AST request. + + :param attributes: The attributes of the get-AST request, containing the source code to parse. + :type attributes: GetAstRequestDataAttributes + + :param id: An optional identifier for the get-AST request resource. + :type id: str, optional + + :param type: Get AST request resource type. + :type type: GetAstRequestDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/get_ast_request_data_attributes.py b/datadog_api_client/v2/model/get_ast_request_data_attributes.py new file mode 100644 index 0000000000..d7dc56a83c --- /dev/null +++ b/datadog_api_client/v2/model/get_ast_request_data_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GetAstRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "file_encoding": (str,), + "language": (str,), + } + attribute_map = { + "code": "code", + "file_encoding": "file_encoding", + "language": "language", + } + + def __init__(self_, code: str, file_encoding: str, language: str, **kwargs): + """ + The attributes of the get-AST request, containing the source code to parse. + + :param code: The base64-encoded source code to parse into an abstract syntax tree. + :type code: str + + :param file_encoding: The encoding of the source code file (must be utf-8). + :type file_encoding: str + + :param language: The programming language of the source code to parse. + :type language: str + """ + super().__init__(kwargs) + + + self_.code = code + self_.file_encoding = file_encoding + self_.language = language diff --git a/datadog_api_client/v2/model/get_ast_request_data_type.py b/datadog_api_client/v2/model/get_ast_request_data_type.py new file mode 100644 index 0000000000..71f4e7e9eb --- /dev/null +++ b/datadog_api_client/v2/model/get_ast_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetAstRequestDataType(ModelSimple): + """ + Get AST request resource type. + + :param value: If omitted defaults to "get_ast_request". Must be one of ["get_ast_request"]. + :type value: str + """ + + allowed_values = { + "get_ast_request", + } + GET_AST_REQUEST: ClassVar["GetAstRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetAstRequestDataType.GET_AST_REQUEST = GetAstRequestDataType("get_ast_request") diff --git a/datadog_api_client/v2/model/get_ast_response.py b/datadog_api_client/v2/model/get_ast_response.py new file mode 100644 index 0000000000..f6d069aa5f --- /dev/null +++ b/datadog_api_client/v2/model/get_ast_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_ast_response_data import GetAstResponseData + +class GetAstResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_ast_response_data import GetAstResponseData + return { + "data": (GetAstResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GetAstResponseData, **kwargs): + """ + The response payload containing the parsed abstract syntax tree. + + :param data: The primary data object in the get-AST response. + :type data: GetAstResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/get_ast_response_data.py b/datadog_api_client/v2/model/get_ast_response_data.py new file mode 100644 index 0000000000..ace858ff83 --- /dev/null +++ b/datadog_api_client/v2/model/get_ast_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_ast_response_data_attributes import GetAstResponseDataAttributes + from datadog_api_client.v2.model.get_ast_response_data_type import GetAstResponseDataType + +class GetAstResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_ast_response_data_attributes import GetAstResponseDataAttributes + from datadog_api_client.v2.model.get_ast_response_data_type import GetAstResponseDataType + return { + "attributes": (GetAstResponseDataAttributes,), + "id": (str,), + "type": (GetAstResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GetAstResponseDataAttributes, type: GetAstResponseDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The primary data object in the get-AST response. + + :param attributes: The attributes of the get-AST response, containing the parsed abstract syntax tree. + :type attributes: GetAstResponseDataAttributes + + :param id: The identifier of the get-AST response resource. + :type id: str, optional + + :param type: Get AST response resource type. + :type type: GetAstResponseDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/get_ast_response_data_attributes.py b/datadog_api_client/v2/model/get_ast_response_data_attributes.py new file mode 100644 index 0000000000..f0ea214a43 --- /dev/null +++ b/datadog_api_client/v2/model/get_ast_response_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GetAstResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ast": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "ast": "ast", + } + + def __init__(self_, ast: Dict[str, Any], **kwargs): + """ + The attributes of the get-AST response, containing the parsed abstract syntax tree. + + :param ast: The parsed abstract syntax tree as a JSON object. + :type ast: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + """ + super().__init__(kwargs) + + + self_.ast = ast diff --git a/datadog_api_client/v2/model/get_ast_response_data_type.py b/datadog_api_client/v2/model/get_ast_response_data_type.py new file mode 100644 index 0000000000..006073f1db --- /dev/null +++ b/datadog_api_client/v2/model/get_ast_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetAstResponseDataType(ModelSimple): + """ + Get AST response resource type. + + :param value: If omitted defaults to "get_ast_response". Must be one of ["get_ast_response"]. + :type value: str + """ + + allowed_values = { + "get_ast_response", + } + GET_AST_RESPONSE: ClassVar["GetAstResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetAstResponseDataType.GET_AST_RESPONSE = GetAstResponseDataType("get_ast_response") diff --git a/datadog_api_client/v2/model/get_blueprint_response.py b/datadog_api_client/v2/model/get_blueprint_response.py new file mode 100644 index 0000000000..eb20363ff6 --- /dev/null +++ b/datadog_api_client/v2/model/get_blueprint_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.blueprint_data import BlueprintData + +class GetBlueprintResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.blueprint_data import BlueprintData + return { + "data": (BlueprintData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[BlueprintData, UnsetType]=unset, **kwargs): + """ + The response for retrieving a single blueprint. + + :param data: A blueprint resource. + :type data: BlueprintData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_blueprints_response.py b/datadog_api_client/v2/model/get_blueprints_response.py new file mode 100644 index 0000000000..699c332148 --- /dev/null +++ b/datadog_api_client/v2/model/get_blueprints_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.blueprint_data import BlueprintData + +class GetBlueprintsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.blueprint_data import BlueprintData + return { + "data": ([BlueprintData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[BlueprintData], UnsetType]=unset, **kwargs): + """ + The response for retrieving multiple blueprints. + + :param data: An array of blueprints. + :type data: [BlueprintData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_custom_framework_response.py b/datadog_api_client/v2/model/get_custom_framework_response.py new file mode 100644 index 0000000000..650110049d --- /dev/null +++ b/datadog_api_client/v2/model/get_custom_framework_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_custom_framework_data import FullCustomFrameworkData + +class GetCustomFrameworkResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_custom_framework_data import FullCustomFrameworkData + return { + "data": (FullCustomFrameworkData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FullCustomFrameworkData, **kwargs): + """ + Response object to get a custom framework. + + :param data: Contains type and attributes for custom frameworks. + :type data: FullCustomFrameworkData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/get_data_deletions_response_body.py b/datadog_api_client/v2/model/get_data_deletions_response_body.py new file mode 100644 index 0000000000..6402d7306a --- /dev/null +++ b/datadog_api_client/v2/model/get_data_deletions_response_body.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_deletion_response_item import DataDeletionResponseItem + from datadog_api_client.v2.model.data_deletion_response_meta import DataDeletionResponseMeta + +class GetDataDeletionsResponseBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_deletion_response_item import DataDeletionResponseItem + from datadog_api_client.v2.model.data_deletion_response_meta import DataDeletionResponseMeta + return { + "data": ([DataDeletionResponseItem],), + "meta": (DataDeletionResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[DataDeletionResponseItem], UnsetType]=unset, meta: Union[DataDeletionResponseMeta, UnsetType]=unset, **kwargs): + """ + The response from the get data deletion requests endpoint. + + :param data: The list of data deletion requests that matches the query. + :type data: [DataDeletionResponseItem], optional + + :param meta: The metadata of the data deletion response. + :type meta: DataDeletionResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_data_observability_monitor_run_status_response.py b/datadog_api_client/v2/model/get_data_observability_monitor_run_status_response.py new file mode 100644 index 0000000000..0e37ec5194 --- /dev/null +++ b/datadog_api_client/v2/model/get_data_observability_monitor_run_status_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_data_observability_monitor_run_status_response_data import GetDataObservabilityMonitorRunStatusResponseData + +class GetDataObservabilityMonitorRunStatusResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_data_observability_monitor_run_status_response_data import GetDataObservabilityMonitorRunStatusResponseData + return { + "data": (GetDataObservabilityMonitorRunStatusResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GetDataObservabilityMonitorRunStatusResponseData, **kwargs): + """ + The response for getting the status of a data observability monitor run. + + :param data: The data object for a data observability monitor run status response. + :type data: GetDataObservabilityMonitorRunStatusResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/get_data_observability_monitor_run_status_response_attributes.py b/datadog_api_client/v2/model/get_data_observability_monitor_run_status_response_attributes.py new file mode 100644 index 0000000000..c9512cc197 --- /dev/null +++ b/datadog_api_client/v2/model/get_data_observability_monitor_run_status_response_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_observability_monitor_run_status import DataObservabilityMonitorRunStatus + +class GetDataObservabilityMonitorRunStatusResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_observability_monitor_run_status import DataObservabilityMonitorRunStatus + return { + "error_message": (str,), + "status": (DataObservabilityMonitorRunStatus,), + } + attribute_map = { + "error_message": "error_message", + "status": "status", + } + + def __init__(self_, status: DataObservabilityMonitorRunStatus, error_message: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a data observability monitor run status response. + + :param error_message: Error message describing why the monitor run failed. Only present when status is error. + :type error_message: str, optional + + :param status: The status of a data observability monitor run. + :type status: DataObservabilityMonitorRunStatus + """ + if error_message is not unset: + kwargs["error_message"] = error_message + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/get_data_observability_monitor_run_status_response_data.py b/datadog_api_client/v2/model/get_data_observability_monitor_run_status_response_data.py new file mode 100644 index 0000000000..60d88cf9d8 --- /dev/null +++ b/datadog_api_client/v2/model/get_data_observability_monitor_run_status_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_data_observability_monitor_run_status_response_attributes import GetDataObservabilityMonitorRunStatusResponseAttributes + from datadog_api_client.v2.model.data_observability_monitor_run_type import DataObservabilityMonitorRunType + +class GetDataObservabilityMonitorRunStatusResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_data_observability_monitor_run_status_response_attributes import GetDataObservabilityMonitorRunStatusResponseAttributes + from datadog_api_client.v2.model.data_observability_monitor_run_type import DataObservabilityMonitorRunType + return { + "attributes": (GetDataObservabilityMonitorRunStatusResponseAttributes,), + "id": (str,), + "type": (DataObservabilityMonitorRunType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GetDataObservabilityMonitorRunStatusResponseAttributes, id: str, type: DataObservabilityMonitorRunType, **kwargs): + """ + The data object for a data observability monitor run status response. + + :param attributes: The attributes of a data observability monitor run status response. + :type attributes: GetDataObservabilityMonitorRunStatusResponseAttributes + + :param id: The unique identifier of the monitor run. + :type id: str + + :param type: The JSON:API resource type for a data observability monitor run. + :type type: DataObservabilityMonitorRunType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/get_device_attributes.py b/datadog_api_client/v2/model/get_device_attributes.py new file mode 100644 index 0000000000..69944fe095 --- /dev/null +++ b/datadog_api_client/v2/model/get_device_attributes.py @@ -0,0 +1,172 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GetDeviceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "device_type": (str,), + "integration": (str,), + "ip_address": (str,), + "location": (str,), + "model": (str,), + "name": (str,), + "os_hostname": (str,), + "os_name": (str,), + "os_version": (str,), + "ping_status": (str,), + "product_name": (str,), + "serial_number": (str,), + "status": (str,), + "subnet": (str,), + "sys_object_id": (str,), + "tags": ([str],), + "vendor": (str,), + "version": (str,), + } + attribute_map = { + "description": "description", + "device_type": "device_type", + "integration": "integration", + "ip_address": "ip_address", + "location": "location", + "model": "model", + "name": "name", + "os_hostname": "os_hostname", + "os_name": "os_name", + "os_version": "os_version", + "ping_status": "ping_status", + "product_name": "product_name", + "serial_number": "serial_number", + "status": "status", + "subnet": "subnet", + "sys_object_id": "sys_object_id", + "tags": "tags", + "vendor": "vendor", + "version": "version", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, device_type: Union[str, UnsetType]=unset, integration: Union[str, UnsetType]=unset, ip_address: Union[str, UnsetType]=unset, location: Union[str, UnsetType]=unset, model: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, os_hostname: Union[str, UnsetType]=unset, os_name: Union[str, UnsetType]=unset, os_version: Union[str, UnsetType]=unset, ping_status: Union[str, UnsetType]=unset, product_name: Union[str, UnsetType]=unset, serial_number: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, subnet: Union[str, UnsetType]=unset, sys_object_id: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, vendor: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + The device attributes + + :param description: A description of the device. + :type description: str, optional + + :param device_type: The type of the device. + :type device_type: str, optional + + :param integration: The integration of the device. + :type integration: str, optional + + :param ip_address: The IP address of the device. + :type ip_address: str, optional + + :param location: The location of the device. + :type location: str, optional + + :param model: The model of the device. + :type model: str, optional + + :param name: The name of the device. + :type name: str, optional + + :param os_hostname: The operating system hostname of the device. + :type os_hostname: str, optional + + :param os_name: The operating system name of the device. + :type os_name: str, optional + + :param os_version: The operating system version of the device. + :type os_version: str, optional + + :param ping_status: The ping status of the device. + :type ping_status: str, optional + + :param product_name: The product name of the device. + :type product_name: str, optional + + :param serial_number: The serial number of the device. + :type serial_number: str, optional + + :param status: The status of the device. + :type status: str, optional + + :param subnet: The subnet of the device. + :type subnet: str, optional + + :param sys_object_id: The device ``sys_object_id``. + :type sys_object_id: str, optional + + :param tags: A list of tags associated with the device. + :type tags: [str], optional + + :param vendor: The vendor of the device. + :type vendor: str, optional + + :param version: The version of the device. + :type version: str, optional + """ + if description is not unset: + kwargs["description"] = description + if device_type is not unset: + kwargs["device_type"] = device_type + if integration is not unset: + kwargs["integration"] = integration + if ip_address is not unset: + kwargs["ip_address"] = ip_address + if location is not unset: + kwargs["location"] = location + if model is not unset: + kwargs["model"] = model + if name is not unset: + kwargs["name"] = name + if os_hostname is not unset: + kwargs["os_hostname"] = os_hostname + if os_name is not unset: + kwargs["os_name"] = os_name + if os_version is not unset: + kwargs["os_version"] = os_version + if ping_status is not unset: + kwargs["ping_status"] = ping_status + if product_name is not unset: + kwargs["product_name"] = product_name + if serial_number is not unset: + kwargs["serial_number"] = serial_number + if status is not unset: + kwargs["status"] = status + if subnet is not unset: + kwargs["subnet"] = subnet + if sys_object_id is not unset: + kwargs["sys_object_id"] = sys_object_id + if tags is not unset: + kwargs["tags"] = tags + if vendor is not unset: + kwargs["vendor"] = vendor + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_device_data.py b/datadog_api_client/v2/model/get_device_data.py new file mode 100644 index 0000000000..da72b8bfe1 --- /dev/null +++ b/datadog_api_client/v2/model/get_device_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_device_attributes import GetDeviceAttributes + +class GetDeviceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_device_attributes import GetDeviceAttributes + return { + "attributes": (GetDeviceAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[GetDeviceAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Get device response data. + + :param attributes: The device attributes + :type attributes: GetDeviceAttributes, optional + + :param id: The device ID + :type id: str, optional + + :param type: The type of the resource. The value should always be device. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_device_response.py b/datadog_api_client/v2/model/get_device_response.py new file mode 100644 index 0000000000..700a8466bf --- /dev/null +++ b/datadog_api_client/v2/model/get_device_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_device_data import GetDeviceData + +class GetDeviceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_device_data import GetDeviceData + return { + "data": (GetDeviceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GetDeviceData, UnsetType]=unset, **kwargs): + """ + The ``GetDevice`` operation's response. + + :param data: Get device response data. + :type data: GetDeviceData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_finding_response.py b/datadog_api_client/v2/model/get_finding_response.py new file mode 100644 index 0000000000..00deae94eb --- /dev/null +++ b/datadog_api_client/v2/model/get_finding_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.detailed_finding import DetailedFinding + +class GetFindingResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.detailed_finding import DetailedFinding + return { + "data": (DetailedFinding,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: DetailedFinding, **kwargs): + """ + The expected response schema when getting a finding. + + :param data: A single finding with with message and resource configuration. + :type data: DetailedFinding + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/get_interfaces_data.py b/datadog_api_client/v2/model/get_interfaces_data.py new file mode 100644 index 0000000000..36882bdaab --- /dev/null +++ b/datadog_api_client/v2/model/get_interfaces_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.interface_attributes import InterfaceAttributes + +class GetInterfacesData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.interface_attributes import InterfaceAttributes + return { + "attributes": (InterfaceAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[InterfaceAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The interfaces list data + + :param attributes: The interface attributes + :type attributes: InterfaceAttributes, optional + + :param id: The interface ID + :type id: str, optional + + :param type: The type of the resource. The value should always be interface. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_interfaces_response.py b/datadog_api_client/v2/model/get_interfaces_response.py new file mode 100644 index 0000000000..d05a587a9f --- /dev/null +++ b/datadog_api_client/v2/model/get_interfaces_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_interfaces_data import GetInterfacesData + +class GetInterfacesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_interfaces_data import GetInterfacesData + return { + "data": ([GetInterfacesData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[GetInterfacesData], UnsetType]=unset, **kwargs): + """ + The ``GetInterfaces`` operation's response. + + :param data: Get Interfaces response + :type data: [GetInterfacesData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_investigation_response.py b/datadog_api_client/v2/model/get_investigation_response.py new file mode 100644 index 0000000000..4474ecf0da --- /dev/null +++ b/datadog_api_client/v2/model/get_investigation_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_investigation_response_data import GetInvestigationResponseData + from datadog_api_client.v2.model.get_investigation_response_links import GetInvestigationResponseLinks + +class GetInvestigationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_investigation_response_data import GetInvestigationResponseData + from datadog_api_client.v2.model.get_investigation_response_links import GetInvestigationResponseLinks + return { + "data": (GetInvestigationResponseData,), + "links": (GetInvestigationResponseLinks,), + } + attribute_map = { + "data": "data", + "links": "links", + } + + def __init__(self_, data: GetInvestigationResponseData, links: GetInvestigationResponseLinks, **kwargs): + """ + Response for a single Bits AI investigation. + + :param data: Data for the get investigation response. + :type data: GetInvestigationResponseData + + :param links: Links related to the investigation. + :type links: GetInvestigationResponseLinks + """ + super().__init__(kwargs) + + + self_.data = data + self_.links = links diff --git a/datadog_api_client/v2/model/get_investigation_response_data.py b/datadog_api_client/v2/model/get_investigation_response_data.py new file mode 100644 index 0000000000..ec6ac2e3dc --- /dev/null +++ b/datadog_api_client/v2/model/get_investigation_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_investigation_response_data_attributes import GetInvestigationResponseDataAttributes + from datadog_api_client.v2.model.investigation_type import InvestigationType + +class GetInvestigationResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_investigation_response_data_attributes import GetInvestigationResponseDataAttributes + from datadog_api_client.v2.model.investigation_type import InvestigationType + return { + "attributes": (GetInvestigationResponseDataAttributes,), + "id": (str,), + "type": (InvestigationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GetInvestigationResponseDataAttributes, id: str, type: InvestigationType, **kwargs): + """ + Data for the get investigation response. + + :param attributes: Attributes of the investigation. + :type attributes: GetInvestigationResponseDataAttributes + + :param id: The unique identifier of the investigation. + :type id: str + + :param type: The resource type for investigations. + :type type: InvestigationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/get_investigation_response_data_attributes.py b/datadog_api_client/v2/model/get_investigation_response_data_attributes.py new file mode 100644 index 0000000000..d6183c0056 --- /dev/null +++ b/datadog_api_client/v2/model/get_investigation_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.investigation_conclusion import InvestigationConclusion + +class GetInvestigationResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.investigation_conclusion import InvestigationConclusion + return { + "conclusions": ([InvestigationConclusion],), + "status": (str,), + "title": (str,), + } + attribute_map = { + "conclusions": "conclusions", + "status": "status", + "title": "title", + } + + def __init__(self_, conclusions: List[InvestigationConclusion], status: str, title: str, **kwargs): + """ + Attributes of the investigation. + + :param conclusions: The conclusions drawn from the investigation. + :type conclusions: [InvestigationConclusion] + + :param status: The current status of the investigation. + :type status: str + + :param title: The title of the investigation. + :type title: str + """ + super().__init__(kwargs) + + + self_.conclusions = conclusions + self_.status = status + self_.title = title diff --git a/datadog_api_client/v2/model/get_investigation_response_links.py b/datadog_api_client/v2/model/get_investigation_response_links.py new file mode 100644 index 0000000000..1aef899824 --- /dev/null +++ b/datadog_api_client/v2/model/get_investigation_response_links.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GetInvestigationResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "self": (str,), + } + attribute_map = { + "self": "self", + } + + def __init__(self_, self: str, **kwargs): + """ + Links related to the investigation. + + :param self: The URL to the investigation in the Datadog app. + :type self: str + """ + super().__init__(kwargs) + + + self_.self = self diff --git a/datadog_api_client/v2/model/get_io_c_indicator_response.py b/datadog_api_client/v2/model/get_io_c_indicator_response.py new file mode 100644 index 0000000000..c2cf1d0cb0 --- /dev/null +++ b/datadog_api_client/v2/model/get_io_c_indicator_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_io_c_indicator_response_data import GetIoCIndicatorResponseData + +class GetIoCIndicatorResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_io_c_indicator_response_data import GetIoCIndicatorResponseData + return { + "data": (GetIoCIndicatorResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GetIoCIndicatorResponseData, UnsetType]=unset, **kwargs): + """ + Response for the get indicator of compromise endpoint. + + :param data: IoC indicator response data object. + :type data: GetIoCIndicatorResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_io_c_indicator_response_attributes.py b/datadog_api_client/v2/model/get_io_c_indicator_response_attributes.py new file mode 100644 index 0000000000..e8bd34312b --- /dev/null +++ b/datadog_api_client/v2/model/get_io_c_indicator_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_indicator_detailed import IoCIndicatorDetailed + +class GetIoCIndicatorResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_indicator_detailed import IoCIndicatorDetailed + return { + "data": (IoCIndicatorDetailed,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[IoCIndicatorDetailed, UnsetType]=unset, **kwargs): + """ + Attributes of the get indicator response. + + :param data: An indicator of compromise with extended context from your environment. + :type data: IoCIndicatorDetailed, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_io_c_indicator_response_data.py b/datadog_api_client/v2/model/get_io_c_indicator_response_data.py new file mode 100644 index 0000000000..b2e4b30fe3 --- /dev/null +++ b/datadog_api_client/v2/model/get_io_c_indicator_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_io_c_indicator_response_attributes import GetIoCIndicatorResponseAttributes + +class GetIoCIndicatorResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_io_c_indicator_response_attributes import GetIoCIndicatorResponseAttributes + return { + "attributes": (GetIoCIndicatorResponseAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[GetIoCIndicatorResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + IoC indicator response data object. + + :param attributes: Attributes of the get indicator response. + :type attributes: GetIoCIndicatorResponseAttributes, optional + + :param id: Unique identifier for the response. + :type id: str, optional + + :param type: Response type identifier. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_issue_include_query_parameter_item.py b/datadog_api_client/v2/model/get_issue_include_query_parameter_item.py new file mode 100644 index 0000000000..88bab24bf3 --- /dev/null +++ b/datadog_api_client/v2/model/get_issue_include_query_parameter_item.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetIssueIncludeQueryParameterItem(ModelSimple): + """ + Relationship object that should be included in the response. + + :param value: Must be one of ["assignee", "case", "team_owners"]. + :type value: str + """ + + allowed_values = { + "assignee", + "case", + "team_owners", + } + ASSIGNEE: ClassVar["GetIssueIncludeQueryParameterItem"] + CASE: ClassVar["GetIssueIncludeQueryParameterItem"] + TEAM_OWNERS: ClassVar["GetIssueIncludeQueryParameterItem"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetIssueIncludeQueryParameterItem.ASSIGNEE = GetIssueIncludeQueryParameterItem("assignee") +GetIssueIncludeQueryParameterItem.CASE = GetIssueIncludeQueryParameterItem("case") +GetIssueIncludeQueryParameterItem.TEAM_OWNERS = GetIssueIncludeQueryParameterItem("team_owners") diff --git a/datadog_api_client/v2/model/get_mapping_response.py b/datadog_api_client/v2/model/get_mapping_response.py new file mode 100644 index 0000000000..14611e0904 --- /dev/null +++ b/datadog_api_client/v2/model/get_mapping_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_mapping_response_data import GetMappingResponseData + +class GetMappingResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_mapping_response_data import GetMappingResponseData + return { + "data": (GetMappingResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GetMappingResponseData, UnsetType]=unset, **kwargs): + """ + Response containing the entity attribute mapping configuration including all available attributes and their properties. + + :param data: The data object containing the resource type and attributes for the get mapping response. + :type data: GetMappingResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_mapping_response_data.py b/datadog_api_client/v2/model/get_mapping_response_data.py new file mode 100644 index 0000000000..5a6f562fe2 --- /dev/null +++ b/datadog_api_client/v2/model/get_mapping_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_mapping_response_data_attributes import GetMappingResponseDataAttributes + from datadog_api_client.v2.model.get_mapping_response_data_type import GetMappingResponseDataType + +class GetMappingResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_mapping_response_data_attributes import GetMappingResponseDataAttributes + from datadog_api_client.v2.model.get_mapping_response_data_type import GetMappingResponseDataType + return { + "attributes": (GetMappingResponseDataAttributes,), + "id": (str,), + "type": (GetMappingResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: GetMappingResponseDataType, attributes: Union[GetMappingResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the resource type and attributes for the get mapping response. + + :param attributes: Attributes of the get mapping response, containing the list of configured entity attributes. + :type attributes: GetMappingResponseDataAttributes, optional + + :param id: Unique identifier for the get mapping response resource. + :type id: str, optional + + :param type: Get mappings response resource type. + :type type: GetMappingResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/get_mapping_response_data_attributes.py b/datadog_api_client/v2/model/get_mapping_response_data_attributes.py new file mode 100644 index 0000000000..86f177df37 --- /dev/null +++ b/datadog_api_client/v2/model/get_mapping_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_mapping_response_data_attributes_attributes_items import GetMappingResponseDataAttributesAttributesItems + +class GetMappingResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_mapping_response_data_attributes_attributes_items import GetMappingResponseDataAttributesAttributesItems + return { + "attributes": ([GetMappingResponseDataAttributesAttributesItems],), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: Union[List[GetMappingResponseDataAttributesAttributesItems], UnsetType]=unset, **kwargs): + """ + Attributes of the get mapping response, containing the list of configured entity attributes. + + :param attributes: The list of entity attributes and their mapping configurations. + :type attributes: [GetMappingResponseDataAttributesAttributesItems], optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_mapping_response_data_attributes_attributes_items.py b/datadog_api_client/v2/model/get_mapping_response_data_attributes_attributes_items.py new file mode 100644 index 0000000000..3551d571fd --- /dev/null +++ b/datadog_api_client/v2/model/get_mapping_response_data_attributes_attributes_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GetMappingResponseDataAttributesAttributesItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attribute": (str,), + "description": (str,), + "display_name": (str,), + "groups": ([str],), + "is_custom": (bool,), + "type": (str,), + } + attribute_map = { + "attribute": "attribute", + "description": "description", + "display_name": "display_name", + "groups": "groups", + "is_custom": "is_custom", + "type": "type", + } + + def __init__(self_, attribute: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, groups: Union[List[str], UnsetType]=unset, is_custom: Union[bool, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Details of a single entity attribute including its mapping configuration and metadata. + + :param attribute: The attribute identifier as used in the entity data model. + :type attribute: str, optional + + :param description: Human-readable explanation of what the attribute represents. + :type description: str, optional + + :param display_name: The human-readable label for the attribute shown in the UI. + :type display_name: str, optional + + :param groups: List of group labels used to categorize the attribute. + :type groups: [str], optional + + :param is_custom: Whether this attribute is a custom user-defined attribute rather than a built-in one. + :type is_custom: bool, optional + + :param type: The data type of the attribute (for example, string or number). + :type type: str, optional + """ + if attribute is not unset: + kwargs["attribute"] = attribute + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if groups is not unset: + kwargs["groups"] = groups + if is_custom is not unset: + kwargs["is_custom"] = is_custom + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_mapping_response_data_type.py b/datadog_api_client/v2/model/get_mapping_response_data_type.py new file mode 100644 index 0000000000..513cd5fe7d --- /dev/null +++ b/datadog_api_client/v2/model/get_mapping_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetMappingResponseDataType(ModelSimple): + """ + Get mappings response resource type. + + :param value: If omitted defaults to "get_mappings_response". Must be one of ["get_mappings_response"]. + :type value: str + """ + + allowed_values = { + "get_mappings_response", + } + GET_MAPPINGS_RESPONSE: ClassVar["GetMappingResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetMappingResponseDataType.GET_MAPPINGS_RESPONSE = GetMappingResponseDataType("get_mappings_response") diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_request.py b/datadog_api_client/v2/model/get_multiple_rulesets_request.py new file mode 100644 index 0000000000..7bcdbfc935 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_request_data import GetMultipleRulesetsRequestData + +class GetMultipleRulesetsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_request_data import GetMultipleRulesetsRequestData + return { + "data": (GetMultipleRulesetsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GetMultipleRulesetsRequestData, UnsetType]=unset, **kwargs): + """ + The request payload for retrieving rules for multiple rulesets in a single batch call. + + :param data: The primary data object in the get-multiple-rulesets request, containing request attributes and resource type. + :type data: GetMultipleRulesetsRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_request_data.py b/datadog_api_client/v2/model/get_multiple_rulesets_request_data.py new file mode 100644 index 0000000000..c6dfab6b5c --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_request_data_attributes import GetMultipleRulesetsRequestDataAttributes + from datadog_api_client.v2.model.get_multiple_rulesets_request_data_type import GetMultipleRulesetsRequestDataType + +class GetMultipleRulesetsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_request_data_attributes import GetMultipleRulesetsRequestDataAttributes + from datadog_api_client.v2.model.get_multiple_rulesets_request_data_type import GetMultipleRulesetsRequestDataType + return { + "attributes": (GetMultipleRulesetsRequestDataAttributes,), + "id": (str,), + "type": (GetMultipleRulesetsRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: GetMultipleRulesetsRequestDataType, attributes: Union[GetMultipleRulesetsRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The primary data object in the get-multiple-rulesets request, containing request attributes and resource type. + + :param attributes: The request attributes for fetching multiple rulesets, specifying which rulesets to retrieve and what data to include. + :type attributes: GetMultipleRulesetsRequestDataAttributes, optional + + :param id: An optional identifier for the get-multiple-rulesets request resource. + :type id: str, optional + + :param type: Get multiple rulesets request resource type. + :type type: GetMultipleRulesetsRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_request_data_attributes.py b/datadog_api_client/v2/model/get_multiple_rulesets_request_data_attributes.py new file mode 100644 index 0000000000..97d2c38f89 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GetMultipleRulesetsRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_testing_rules": (bool,), + "include_tests": (bool,), + "rulesets": ([str],), + } + attribute_map = { + "include_testing_rules": "include_testing_rules", + "include_tests": "include_tests", + "rulesets": "rulesets", + } + + def __init__(self_, include_testing_rules: Union[bool, UnsetType]=unset, include_tests: Union[bool, UnsetType]=unset, rulesets: Union[List[str], UnsetType]=unset, **kwargs): + """ + The request attributes for fetching multiple rulesets, specifying which rulesets to retrieve and what data to include. + + :param include_testing_rules: When true, rules that are available in testing mode are included in the response. + :type include_testing_rules: bool, optional + + :param include_tests: When true, test cases associated with each rule are included in the response. + :type include_tests: bool, optional + + :param rulesets: The list of ruleset names to retrieve. + :type rulesets: [str], optional + """ + if include_testing_rules is not unset: + kwargs["include_testing_rules"] = include_testing_rules + if include_tests is not unset: + kwargs["include_tests"] = include_tests + if rulesets is not unset: + kwargs["rulesets"] = rulesets + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_request_data_type.py b/datadog_api_client/v2/model/get_multiple_rulesets_request_data_type.py new file mode 100644 index 0000000000..375880b3cd --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetMultipleRulesetsRequestDataType(ModelSimple): + """ + Get multiple rulesets request resource type. + + :param value: If omitted defaults to "get_multiple_rulesets_request". Must be one of ["get_multiple_rulesets_request"]. + :type value: str + """ + + allowed_values = { + "get_multiple_rulesets_request", + } + GET_MULTIPLE_RULESETS_REQUEST: ClassVar["GetMultipleRulesetsRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetMultipleRulesetsRequestDataType.GET_MULTIPLE_RULESETS_REQUEST = GetMultipleRulesetsRequestDataType("get_multiple_rulesets_request") diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response.py b/datadog_api_client/v2/model/get_multiple_rulesets_response.py new file mode 100644 index 0000000000..3a2d00dd68 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_response_data import GetMultipleRulesetsResponseData + +class GetMultipleRulesetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_response_data import GetMultipleRulesetsResponseData + return { + "data": (GetMultipleRulesetsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GetMultipleRulesetsResponseData, UnsetType]=unset, **kwargs): + """ + The response payload for the get-multiple-rulesets endpoint, containing the requested rulesets and their rules. + + :param data: The primary data object in the get-multiple-rulesets response, containing the response attributes and resource type. + :type data: GetMultipleRulesetsResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data.py new file mode 100644 index 0000000000..6bf50a9325 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes import GetMultipleRulesetsResponseDataAttributes + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_type import GetMultipleRulesetsResponseDataType + +class GetMultipleRulesetsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes import GetMultipleRulesetsResponseDataAttributes + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_type import GetMultipleRulesetsResponseDataType + return { + "attributes": (GetMultipleRulesetsResponseDataAttributes,), + "id": (str,), + "type": (GetMultipleRulesetsResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: GetMultipleRulesetsResponseDataType, attributes: Union[GetMultipleRulesetsResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The primary data object in the get-multiple-rulesets response, containing the response attributes and resource type. + + :param attributes: The attributes of the get-multiple-rulesets response, containing the list of requested rulesets. + :type attributes: GetMultipleRulesetsResponseDataAttributes, optional + + :param id: The unique identifier of the get-multiple-rulesets response resource. + :type id: str, optional + + :param type: Get multiple rulesets response resource type. + :type type: GetMultipleRulesetsResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes.py new file mode 100644 index 0000000000..50a39f0655 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items import GetMultipleRulesetsResponseDataAttributesRulesetsItems + +class GetMultipleRulesetsResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items import GetMultipleRulesetsResponseDataAttributesRulesetsItems + return { + "rulesets": ([GetMultipleRulesetsResponseDataAttributesRulesetsItems],), + } + attribute_map = { + "rulesets": "rulesets", + } + + def __init__(self_, rulesets: Union[List[GetMultipleRulesetsResponseDataAttributesRulesetsItems], UnsetType]=unset, **kwargs): + """ + The attributes of the get-multiple-rulesets response, containing the list of requested rulesets. + + :param rulesets: The list of rulesets returned in response to the batch request. + :type rulesets: [GetMultipleRulesetsResponseDataAttributesRulesetsItems], optional + """ + if rulesets is not unset: + kwargs["rulesets"] = rulesets + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items.py new file mode 100644 index 0000000000..d2174979cd --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_data import GetMultipleRulesetsResponseDataAttributesRulesetsItemsData + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems + +class GetMultipleRulesetsResponseDataAttributesRulesetsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_data import GetMultipleRulesetsResponseDataAttributesRulesetsItemsData + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems + return { + "data": (GetMultipleRulesetsResponseDataAttributesRulesetsItemsData,), + "description": (str,), + "name": (str,), + "rules": ([GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems],), + "short_description": (str,), + } + attribute_map = { + "data": "data", + "description": "description", + "name": "name", + "rules": "rules", + "short_description": "short_description", + } + + def __init__(self_, data: GetMultipleRulesetsResponseDataAttributesRulesetsItemsData, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, rules: Union[List[GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems], UnsetType]=unset, short_description: Union[str, UnsetType]=unset, **kwargs): + """ + A ruleset returned in the response, containing its metadata and associated rules. + + :param data: The resource identifier and type for a ruleset. + :type data: GetMultipleRulesetsResponseDataAttributesRulesetsItemsData + + :param description: A detailed description of the ruleset's purpose and the types of issues it targets. + :type description: str, optional + + :param name: The unique name of the ruleset. + :type name: str, optional + + :param rules: The list of static analysis rules included in this ruleset. + :type rules: [GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems], optional + + :param short_description: A brief summary of the ruleset, suitable for display in listings. + :type short_description: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if rules is not unset: + kwargs["rules"] = rules + if short_description is not unset: + kwargs["short_description"] = short_description + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_data.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_data.py new file mode 100644 index 0000000000..a7118263d8 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_data_type import GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType + +class GetMultipleRulesetsResponseDataAttributesRulesetsItemsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_data_type import GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType + return { + "id": (str,), + "type": (GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, type: GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The resource identifier and type for a ruleset. + + :param id: The unique identifier of the ruleset resource. + :type id: str, optional + + :param type: Rulesets resource type. + :type type: GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_data_type.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_data_type.py new file mode 100644 index 0000000000..b175bdd1c3 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType(ModelSimple): + """ + Rulesets resource type. + + :param value: If omitted defaults to "rulesets". Must be one of ["rulesets"]. + :type value: str + """ + + allowed_values = { + "rulesets", + } + RULESETS: ClassVar["GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType.RULESETS = GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType("rulesets") diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items.py new file mode 100644 index 0000000000..91e27c1158 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items.py @@ -0,0 +1,220 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_arguments_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsArgumentsItems + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsData + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_tests_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsTestsItems + +class GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_arguments_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsArgumentsItems + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsData + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_tests_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsTestsItems + return { + "arguments": ([GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsArgumentsItems],), + "category": (str,), + "checksum": (str,), + "code": (str,), + "created_at": (datetime,), + "created_by": (str,), + "cve": (str,), + "cwe": (str,), + "data": (GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsData,), + "description": (str,), + "documentation_url": (str,), + "entity_checked": (str,), + "is_published": (bool,), + "is_testing": (bool,), + "language": (str,), + "last_updated_at": (datetime,), + "last_updated_by": (str,), + "name": (str,), + "regex": (str,), + "severity": (str,), + "short_description": (str,), + "should_use_ai_fix": (bool,), + "tests": ([GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsTestsItems],), + "tree_sitter_query": (str,), + "type": (str,), + } + attribute_map = { + "arguments": "arguments", + "category": "category", + "checksum": "checksum", + "code": "code", + "created_at": "created_at", + "created_by": "created_by", + "cve": "cve", + "cwe": "cwe", + "data": "data", + "description": "description", + "documentation_url": "documentation_url", + "entity_checked": "entity_checked", + "is_published": "is_published", + "is_testing": "is_testing", + "language": "language", + "last_updated_at": "last_updated_at", + "last_updated_by": "last_updated_by", + "name": "name", + "regex": "regex", + "severity": "severity", + "short_description": "short_description", + "should_use_ai_fix": "should_use_ai_fix", + "tests": "tests", + "tree_sitter_query": "tree_sitter_query", + "type": "type", + } + + def __init__(self_, data: GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsData, arguments: Union[List[GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsArgumentsItems], UnsetType]=unset, category: Union[str, UnsetType]=unset, checksum: Union[str, UnsetType]=unset, code: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, cve: Union[str, UnsetType]=unset, cwe: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, documentation_url: Union[str, UnsetType]=unset, entity_checked: Union[str, UnsetType]=unset, is_published: Union[bool, UnsetType]=unset, is_testing: Union[bool, UnsetType]=unset, language: Union[str, UnsetType]=unset, last_updated_at: Union[datetime, UnsetType]=unset, last_updated_by: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, regex: Union[str, UnsetType]=unset, severity: Union[str, UnsetType]=unset, short_description: Union[str, UnsetType]=unset, should_use_ai_fix: Union[bool, UnsetType]=unset, tests: Union[List[GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsTestsItems], UnsetType]=unset, tree_sitter_query: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A static analysis rule within a ruleset, including its definition, metadata, and associated test cases. + + :param arguments: The list of configurable arguments accepted by this rule. + :type arguments: [GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsArgumentsItems], optional + + :param category: The category classifying the type of issue this rule detects (e.g., security, style, performance). + :type category: str, optional + + :param checksum: A checksum of the rule definition used to detect changes. + :type checksum: str, optional + + :param code: The rule implementation code used by the static analysis engine. + :type code: str, optional + + :param created_at: The date and time when the rule was created. + :type created_at: datetime, optional + + :param created_by: The identifier of the user or system that created the rule. + :type created_by: str, optional + + :param cve: The CVE identifier associated with the vulnerability this rule detects, if applicable. + :type cve: str, optional + + :param cwe: The CWE identifier associated with the weakness category this rule detects, if applicable. + :type cwe: str, optional + + :param data: The resource identifier and type for a static analysis rule. + :type data: GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsData + + :param description: A detailed explanation of what the rule detects and why it matters. + :type description: str, optional + + :param documentation_url: A URL pointing to additional documentation for this rule. + :type documentation_url: str, optional + + :param entity_checked: The code entity type (e.g., function, class, variable) that this rule inspects. + :type entity_checked: str, optional + + :param is_published: Indicates whether the rule is publicly published and available to all users. + :type is_published: bool, optional + + :param is_testing: Indicates whether the rule is in testing mode and not yet promoted to production. + :type is_testing: bool, optional + + :param language: The programming language this rule applies to. + :type language: str, optional + + :param last_updated_at: The date and time when the rule was last modified. + :type last_updated_at: datetime, optional + + :param last_updated_by: The identifier of the user or system that last updated the rule. + :type last_updated_by: str, optional + + :param name: The unique name identifying this rule within its ruleset. + :type name: str, optional + + :param regex: A regular expression pattern used by the rule for pattern-based detection. + :type regex: str, optional + + :param severity: The severity level of findings produced by this rule (e.g., ERROR, WARNING, NOTICE). + :type severity: str, optional + + :param short_description: A brief summary of what the rule detects, suitable for display in listings. + :type short_description: str, optional + + :param should_use_ai_fix: Indicates whether an AI-generated fix suggestion should be offered for findings from this rule. + :type should_use_ai_fix: bool, optional + + :param tests: The list of test cases used to validate the rule's behavior. + :type tests: [GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsTestsItems], optional + + :param tree_sitter_query: The Tree-sitter query expression used by the rule to match code patterns in the AST. + :type tree_sitter_query: str, optional + + :param type: The rule type indicating the detection mechanism used (e.g., tree_sitter, regex). + :type type: str, optional + """ + if arguments is not unset: + kwargs["arguments"] = arguments + if category is not unset: + kwargs["category"] = category + if checksum is not unset: + kwargs["checksum"] = checksum + if code is not unset: + kwargs["code"] = code + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if cve is not unset: + kwargs["cve"] = cve + if cwe is not unset: + kwargs["cwe"] = cwe + if description is not unset: + kwargs["description"] = description + if documentation_url is not unset: + kwargs["documentation_url"] = documentation_url + if entity_checked is not unset: + kwargs["entity_checked"] = entity_checked + if is_published is not unset: + kwargs["is_published"] = is_published + if is_testing is not unset: + kwargs["is_testing"] = is_testing + if language is not unset: + kwargs["language"] = language + if last_updated_at is not unset: + kwargs["last_updated_at"] = last_updated_at + if last_updated_by is not unset: + kwargs["last_updated_by"] = last_updated_by + if name is not unset: + kwargs["name"] = name + if regex is not unset: + kwargs["regex"] = regex + if severity is not unset: + kwargs["severity"] = severity + if short_description is not unset: + kwargs["short_description"] = short_description + if should_use_ai_fix is not unset: + kwargs["should_use_ai_fix"] = should_use_ai_fix + if tests is not unset: + kwargs["tests"] = tests + if tree_sitter_query is not unset: + kwargs["tree_sitter_query"] = tree_sitter_query + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_arguments_items.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_arguments_items.py new file mode 100644 index 0000000000..2181a83559 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_arguments_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsArgumentsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + An argument parameter for a static analysis rule, with a name and description. + + :param description: A human-readable explanation of the argument's purpose and accepted values. + :type description: str, optional + + :param name: The name of the rule argument. + :type name: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data.py new file mode 100644 index 0000000000..70e3c8fed7 --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data_type import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType + +class GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data_type import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType + return { + "id": (str,), + "type": (GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, type: GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The resource identifier and type for a static analysis rule. + + :param id: The unique identifier of the rule resource. + :type id: str, optional + + :param type: Rules resource type. + :type type: GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data_type.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data_type.py new file mode 100644 index 0000000000..646b45dc1a --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType(ModelSimple): + """ + Rules resource type. + + :param value: If omitted defaults to "rules". Must be one of ["rules"]. + :type value: str + """ + + allowed_values = { + "rules", + } + RULES: ClassVar["GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType.RULES = GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType("rules") diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_tests_items.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_tests_items.py new file mode 100644 index 0000000000..61bfcaacdc --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_tests_items.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsTestsItems(ModelNormal): + validations = { + "annotation_count": { + "inclusive_maximum": 65535, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "annotation_count": (int,), + "code": (str,), + "filename": (str,), + } + attribute_map = { + "annotation_count": "annotation_count", + "code": "code", + "filename": "filename", + } + + def __init__(self_, annotation_count: Union[int, UnsetType]=unset, code: Union[str, UnsetType]=unset, filename: Union[str, UnsetType]=unset, **kwargs): + """ + A test case associated with a static analysis rule, containing the source code and expected annotation count. + + :param annotation_count: The expected number of annotations (findings) the rule should produce when run against the test code. + :type annotation_count: int, optional + + :param code: The source code snippet used as input for the rule test. + :type code: str, optional + + :param filename: The filename associated with the test code snippet. + :type filename: str, optional + """ + if annotation_count is not unset: + kwargs["annotation_count"] = annotation_count + if code is not unset: + kwargs["code"] = code + if filename is not unset: + kwargs["filename"] = filename + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_multiple_rulesets_response_data_type.py b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_type.py new file mode 100644 index 0000000000..2a3af7a9ee --- /dev/null +++ b/datadog_api_client/v2/model/get_multiple_rulesets_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetMultipleRulesetsResponseDataType(ModelSimple): + """ + Get multiple rulesets response resource type. + + :param value: If omitted defaults to "get_multiple_rulesets_response". Must be one of ["get_multiple_rulesets_response"]. + :type value: str + """ + + allowed_values = { + "get_multiple_rulesets_response", + } + GET_MULTIPLE_RULESETS_RESPONSE: ClassVar["GetMultipleRulesetsResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetMultipleRulesetsResponseDataType.GET_MULTIPLE_RULESETS_RESPONSE = GetMultipleRulesetsResponseDataType("get_multiple_rulesets_response") diff --git a/datadog_api_client/v2/model/get_resource_evaluation_filters_response.py b/datadog_api_client/v2/model/get_resource_evaluation_filters_response.py new file mode 100644 index 0000000000..b5a4766208 --- /dev/null +++ b/datadog_api_client/v2/model/get_resource_evaluation_filters_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_resource_evaluation_filters_response_data import GetResourceEvaluationFiltersResponseData + +class GetResourceEvaluationFiltersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_resource_evaluation_filters_response_data import GetResourceEvaluationFiltersResponseData + return { + "data": (GetResourceEvaluationFiltersResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GetResourceEvaluationFiltersResponseData, **kwargs): + """ + The definition of ``GetResourceEvaluationFiltersResponse`` object. + + :param data: The definition of ``GetResourceFilterResponseData`` object. + :type data: GetResourceEvaluationFiltersResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/get_resource_evaluation_filters_response_data.py b/datadog_api_client/v2/model/get_resource_evaluation_filters_response_data.py new file mode 100644 index 0000000000..502a8300e2 --- /dev/null +++ b/datadog_api_client/v2/model/get_resource_evaluation_filters_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resource_filter_attributes import ResourceFilterAttributes + from datadog_api_client.v2.model.resource_filter_request_type import ResourceFilterRequestType + +class GetResourceEvaluationFiltersResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resource_filter_attributes import ResourceFilterAttributes + from datadog_api_client.v2.model.resource_filter_request_type import ResourceFilterRequestType + return { + "attributes": (ResourceFilterAttributes,), + "id": (str,), + "type": (ResourceFilterRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ResourceFilterAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ResourceFilterRequestType, UnsetType]=unset, **kwargs): + """ + The definition of ``GetResourceFilterResponseData`` object. + + :param attributes: Attributes of a resource filter. + :type attributes: ResourceFilterAttributes, optional + + :param id: The ``data`` ``id``. + :type id: str, optional + + :param type: Constant string to identify the request type. + :type type: ResourceFilterRequestType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_rule_version_history_data.py b/datadog_api_client/v2/model/get_rule_version_history_data.py new file mode 100644 index 0000000000..bc1f1db43d --- /dev/null +++ b/datadog_api_client/v2/model/get_rule_version_history_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_version_history import RuleVersionHistory + from datadog_api_client.v2.model.get_rule_version_history_data_type import GetRuleVersionHistoryDataType + from datadog_api_client.v2.model.security_monitoring_standard_rule_response import SecurityMonitoringStandardRuleResponse + from datadog_api_client.v2.model.security_monitoring_signal_rule_response import SecurityMonitoringSignalRuleResponse + +class GetRuleVersionHistoryData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_version_history import RuleVersionHistory + from datadog_api_client.v2.model.get_rule_version_history_data_type import GetRuleVersionHistoryDataType + return { + "attributes": (RuleVersionHistory,), + "id": (str,), + "type": (GetRuleVersionHistoryDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[RuleVersionHistory, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[GetRuleVersionHistoryDataType, UnsetType]=unset, **kwargs): + """ + Data for the rule version history. + + :param attributes: Response object containing the version history of a rule. + :type attributes: RuleVersionHistory, optional + + :param id: ID of the rule. + :type id: str, optional + + :param type: Type of data. + :type type: GetRuleVersionHistoryDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_rule_version_history_data_type.py b/datadog_api_client/v2/model/get_rule_version_history_data_type.py new file mode 100644 index 0000000000..c99ecd3654 --- /dev/null +++ b/datadog_api_client/v2/model/get_rule_version_history_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetRuleVersionHistoryDataType(ModelSimple): + """ + Type of data. + + :param value: If omitted defaults to "GetRuleVersionHistoryResponse". Must be one of ["GetRuleVersionHistoryResponse"]. + :type value: str + """ + + allowed_values = { + "GetRuleVersionHistoryResponse", + } + GETRULEVERSIONHISTORYRESPONSE: ClassVar["GetRuleVersionHistoryDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetRuleVersionHistoryDataType.GETRULEVERSIONHISTORYRESPONSE = GetRuleVersionHistoryDataType("GetRuleVersionHistoryResponse") diff --git a/datadog_api_client/v2/model/get_rule_version_history_response.py b/datadog_api_client/v2/model/get_rule_version_history_response.py new file mode 100644 index 0000000000..319d40f8e5 --- /dev/null +++ b/datadog_api_client/v2/model/get_rule_version_history_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_rule_version_history_data import GetRuleVersionHistoryData + from datadog_api_client.v2.model.security_monitoring_standard_rule_response import SecurityMonitoringStandardRuleResponse + from datadog_api_client.v2.model.security_monitoring_signal_rule_response import SecurityMonitoringSignalRuleResponse + +class GetRuleVersionHistoryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_rule_version_history_data import GetRuleVersionHistoryData + return { + "data": (GetRuleVersionHistoryData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GetRuleVersionHistoryData, UnsetType]=unset, **kwargs): + """ + Response for getting the rule version history. + + :param data: Data for the rule version history. + :type data: GetRuleVersionHistoryData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_sbom_response.py b/datadog_api_client/v2/model/get_sbom_response.py new file mode 100644 index 0000000000..f937299631 --- /dev/null +++ b/datadog_api_client/v2/model/get_sbom_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sbom import SBOM + +class GetSBOMResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sbom import SBOM + return { + "data": (SBOM,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SBOM, **kwargs): + """ + The expected response schema when getting an SBOM. + + :param data: A single SBOM + :type data: SBOM + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/get_suppression_version_history_data.py b/datadog_api_client/v2/model/get_suppression_version_history_data.py new file mode 100644 index 0000000000..e5f7a4bd46 --- /dev/null +++ b/datadog_api_client/v2/model/get_suppression_version_history_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.suppression_version_history import SuppressionVersionHistory + from datadog_api_client.v2.model.get_suppression_version_history_data_type import GetSuppressionVersionHistoryDataType + +class GetSuppressionVersionHistoryData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.suppression_version_history import SuppressionVersionHistory + from datadog_api_client.v2.model.get_suppression_version_history_data_type import GetSuppressionVersionHistoryDataType + return { + "attributes": (SuppressionVersionHistory,), + "id": (str,), + "type": (GetSuppressionVersionHistoryDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SuppressionVersionHistory, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[GetSuppressionVersionHistoryDataType, UnsetType]=unset, **kwargs): + """ + Data for the suppression version history. + + :param attributes: Response object containing the version history of a suppression. + :type attributes: SuppressionVersionHistory, optional + + :param id: ID of the suppression. + :type id: str, optional + + :param type: Type of data. + :type type: GetSuppressionVersionHistoryDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_suppression_version_history_data_type.py b/datadog_api_client/v2/model/get_suppression_version_history_data_type.py new file mode 100644 index 0000000000..8497e20945 --- /dev/null +++ b/datadog_api_client/v2/model/get_suppression_version_history_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetSuppressionVersionHistoryDataType(ModelSimple): + """ + Type of data. + + :param value: If omitted defaults to "suppression_version_history". Must be one of ["suppression_version_history"]. + :type value: str + """ + + allowed_values = { + "suppression_version_history", + } + SUPPRESSIONVERSIONHISTORY: ClassVar["GetSuppressionVersionHistoryDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetSuppressionVersionHistoryDataType.SUPPRESSIONVERSIONHISTORY = GetSuppressionVersionHistoryDataType("suppression_version_history") diff --git a/datadog_api_client/v2/model/get_suppression_version_history_response.py b/datadog_api_client/v2/model/get_suppression_version_history_response.py new file mode 100644 index 0000000000..640eb9f0ca --- /dev/null +++ b/datadog_api_client/v2/model/get_suppression_version_history_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_suppression_version_history_data import GetSuppressionVersionHistoryData + +class GetSuppressionVersionHistoryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_suppression_version_history_data import GetSuppressionVersionHistoryData + return { + "data": (GetSuppressionVersionHistoryData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GetSuppressionVersionHistoryData, UnsetType]=unset, **kwargs): + """ + Response for getting the suppression version history. + + :param data: Data for the suppression version history. + :type data: GetSuppressionVersionHistoryData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/get_team_memberships_sort.py b/datadog_api_client/v2/model/get_team_memberships_sort.py new file mode 100644 index 0000000000..b6da26e7ed --- /dev/null +++ b/datadog_api_client/v2/model/get_team_memberships_sort.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GetTeamMembershipsSort(ModelSimple): + """ + Specifies the order of returned team memberships + + :param value: Must be one of ["manager_name", "-manager_name", "name", "-name", "handle", "-handle", "email", "-email"]. + :type value: str + """ + + allowed_values = { + "manager_name", + "-manager_name", + "name", + "-name", + "handle", + "-handle", + "email", + "-email", + } + MANAGER_NAME: ClassVar["GetTeamMembershipsSort"] + _MANAGER_NAME: ClassVar["GetTeamMembershipsSort"] + NAME: ClassVar["GetTeamMembershipsSort"] + _NAME: ClassVar["GetTeamMembershipsSort"] + HANDLE: ClassVar["GetTeamMembershipsSort"] + _HANDLE: ClassVar["GetTeamMembershipsSort"] + EMAIL: ClassVar["GetTeamMembershipsSort"] + _EMAIL: ClassVar["GetTeamMembershipsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GetTeamMembershipsSort.MANAGER_NAME = GetTeamMembershipsSort("manager_name") +GetTeamMembershipsSort._MANAGER_NAME = GetTeamMembershipsSort("-manager_name") +GetTeamMembershipsSort.NAME = GetTeamMembershipsSort("name") +GetTeamMembershipsSort._NAME = GetTeamMembershipsSort("-name") +GetTeamMembershipsSort.HANDLE = GetTeamMembershipsSort("handle") +GetTeamMembershipsSort._HANDLE = GetTeamMembershipsSort("-handle") +GetTeamMembershipsSort.EMAIL = GetTeamMembershipsSort("email") +GetTeamMembershipsSort._EMAIL = GetTeamMembershipsSort("-email") diff --git a/datadog_api_client/v2/model/get_workflow_response.py b/datadog_api_client/v2/model/get_workflow_response.py new file mode 100644 index 0000000000..fc7d4a6f01 --- /dev/null +++ b/datadog_api_client/v2/model/get_workflow_response.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_data import WorkflowData + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class GetWorkflowResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_data import WorkflowData + return { + "data": (WorkflowData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[WorkflowData, UnsetType]=unset, **kwargs): + """ + The response object after getting a workflow. + + :param data: Data related to the workflow. + :type data: WorkflowData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/github_webhook_trigger.py b/datadog_api_client/v2/model/github_webhook_trigger.py new file mode 100644 index 0000000000..161dd4027e --- /dev/null +++ b/datadog_api_client/v2/model/github_webhook_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + +class GithubWebhookTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + return { + "rate_limit": (TriggerRateLimit,), + } + attribute_map = { + "rate_limit": "rateLimit", + } + + def __init__(self_, rate_limit: Union[TriggerRateLimit, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from a GitHub webhook. To trigger a workflow from GitHub, you must set a ``webhookSecret``. In your GitHub Webhook Settings, set the Payload URL to "base_url"/api/v2/workflows/"workflow_id"/webhook?orgId="org_id", select application/json for the content type, and be highly recommend enabling SSL verification for security. The workflow must be published. + + :param rate_limit: Defines a rate limit for a trigger. + :type rate_limit: TriggerRateLimit, optional + """ + if rate_limit is not unset: + kwargs["rate_limit"] = rate_limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/github_webhook_trigger_wrapper.py b/datadog_api_client/v2/model/github_webhook_trigger_wrapper.py new file mode 100644 index 0000000000..1ac154a2b6 --- /dev/null +++ b/datadog_api_client/v2/model/github_webhook_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.github_webhook_trigger import GithubWebhookTrigger + +class GithubWebhookTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.github_webhook_trigger import GithubWebhookTrigger + return { + "github_webhook_trigger": (GithubWebhookTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "github_webhook_trigger": "githubWebhookTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, github_webhook_trigger: GithubWebhookTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a GitHub webhook-based trigger. + + :param github_webhook_trigger: Trigger a workflow from a GitHub webhook. To trigger a workflow from GitHub, you must set a ``webhookSecret``. In your GitHub Webhook Settings, set the Payload URL to "base_url"/api/v2/workflows/"workflow_id"/webhook?orgId="org_id", select application/json for the content type, and be highly recommend enabling SSL verification for security. The workflow must be published. + :type github_webhook_trigger: GithubWebhookTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.github_webhook_trigger = github_webhook_trigger diff --git a/datadog_api_client/v2/model/gitlab_api_key.py b/datadog_api_client/v2/model/gitlab_api_key.py new file mode 100644 index 0000000000..1775451593 --- /dev/null +++ b/datadog_api_client/v2/model/gitlab_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gitlab_api_key_type import GitlabAPIKeyType + +class GitlabAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gitlab_api_key_type import GitlabAPIKeyType + return { + "api_token": (str,), + "type": (GitlabAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, api_token: str, type: GitlabAPIKeyType, **kwargs): + """ + The definition of the ``GitlabAPIKey`` object. + + :param api_token: The ``GitlabAPIKey`` ``api_token``. + :type api_token: str + + :param type: The definition of the ``GitlabAPIKey`` object. + :type type: GitlabAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_token = api_token + self_.type = type diff --git a/datadog_api_client/v2/model/gitlab_api_key_type.py b/datadog_api_client/v2/model/gitlab_api_key_type.py new file mode 100644 index 0000000000..6deea1c28f --- /dev/null +++ b/datadog_api_client/v2/model/gitlab_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GitlabAPIKeyType(ModelSimple): + """ + The definition of the `GitlabAPIKey` object. + + :param value: If omitted defaults to "GitlabAPIKey". Must be one of ["GitlabAPIKey"]. + :type value: str + """ + + allowed_values = { + "GitlabAPIKey", + } + GITLABAPIKEY: ClassVar["GitlabAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GitlabAPIKeyType.GITLABAPIKEY = GitlabAPIKeyType("GitlabAPIKey") diff --git a/datadog_api_client/v2/model/gitlab_api_key_update.py b/datadog_api_client/v2/model/gitlab_api_key_update.py new file mode 100644 index 0000000000..97988b3cff --- /dev/null +++ b/datadog_api_client/v2/model/gitlab_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gitlab_api_key_type import GitlabAPIKeyType + +class GitlabAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gitlab_api_key_type import GitlabAPIKeyType + return { + "api_token": (str,), + "type": (GitlabAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, type: GitlabAPIKeyType, api_token: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``GitlabAPIKey`` object. + + :param api_token: The ``GitlabAPIKeyUpdate`` ``api_token``. + :type api_token: str, optional + + :param type: The definition of the ``GitlabAPIKey`` object. + :type type: GitlabAPIKeyType + """ + if api_token is not unset: + kwargs["api_token"] = api_token + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/gitlab_credentials.py b/datadog_api_client/v2/model/gitlab_credentials.py new file mode 100644 index 0000000000..c4084ee05b --- /dev/null +++ b/datadog_api_client/v2/model/gitlab_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GitlabCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``GitlabCredentials`` object. + + :param api_token: The `GitlabAPIKey` `api_token`. + :type api_token: str + + :param type: The definition of the `GitlabAPIKey` object. + :type type: GitlabAPIKeyType + """ + 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.gitlab_api_key import GitlabAPIKey + return { + "oneOf": [ + GitlabAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/gitlab_credentials_update.py b/datadog_api_client/v2/model/gitlab_credentials_update.py new file mode 100644 index 0000000000..895f96f742 --- /dev/null +++ b/datadog_api_client/v2/model/gitlab_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GitlabCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``GitlabCredentialsUpdate`` object. + + :param api_token: The `GitlabAPIKeyUpdate` `api_token`. + :type api_token: str, optional + + :param type: The definition of the `GitlabAPIKey` object. + :type type: GitlabAPIKeyType + """ + 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.gitlab_api_key_update import GitlabAPIKeyUpdate + return { + "oneOf": [ + GitlabAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/gitlab_integration.py b/datadog_api_client/v2/model/gitlab_integration.py new file mode 100644 index 0000000000..5fee56a8cb --- /dev/null +++ b/datadog_api_client/v2/model/gitlab_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gitlab_credentials import GitlabCredentials + from datadog_api_client.v2.model.gitlab_integration_type import GitlabIntegrationType + from datadog_api_client.v2.model.gitlab_api_key import GitlabAPIKey + +class GitlabIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gitlab_credentials import GitlabCredentials + from datadog_api_client.v2.model.gitlab_integration_type import GitlabIntegrationType + return { + "credentials": (GitlabCredentials,), + "type": (GitlabIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[GitlabCredentials, GitlabAPIKey], type: GitlabIntegrationType, **kwargs): + """ + The definition of the ``GitlabIntegration`` object. + + :param credentials: The definition of the ``GitlabCredentials`` object. + :type credentials: GitlabCredentials + + :param type: The definition of the ``GitlabIntegrationType`` object. + :type type: GitlabIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/gitlab_integration_type.py b/datadog_api_client/v2/model/gitlab_integration_type.py new file mode 100644 index 0000000000..22e8f086e7 --- /dev/null +++ b/datadog_api_client/v2/model/gitlab_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GitlabIntegrationType(ModelSimple): + """ + The definition of the `GitlabIntegrationType` object. + + :param value: If omitted defaults to "Gitlab". Must be one of ["Gitlab"]. + :type value: str + """ + + allowed_values = { + "Gitlab", + } + GITLAB: ClassVar["GitlabIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GitlabIntegrationType.GITLAB = GitlabIntegrationType("Gitlab") diff --git a/datadog_api_client/v2/model/gitlab_integration_update.py b/datadog_api_client/v2/model/gitlab_integration_update.py new file mode 100644 index 0000000000..e2ea02fdc2 --- /dev/null +++ b/datadog_api_client/v2/model/gitlab_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.gitlab_credentials_update import GitlabCredentialsUpdate + from datadog_api_client.v2.model.gitlab_integration_type import GitlabIntegrationType + from datadog_api_client.v2.model.gitlab_api_key_update import GitlabAPIKeyUpdate + +class GitlabIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.gitlab_credentials_update import GitlabCredentialsUpdate + from datadog_api_client.v2.model.gitlab_integration_type import GitlabIntegrationType + return { + "credentials": (GitlabCredentialsUpdate,), + "type": (GitlabIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: GitlabIntegrationType, credentials: Union[GitlabCredentialsUpdate, GitlabAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``GitlabIntegrationUpdate`` object. + + :param credentials: The definition of the ``GitlabCredentialsUpdate`` object. + :type credentials: GitlabCredentialsUpdate, optional + + :param type: The definition of the ``GitlabIntegrationType`` object. + :type type: GitlabIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/global_incident_settings_attributes_request.py b/datadog_api_client/v2/model/global_incident_settings_attributes_request.py new file mode 100644 index 0000000000..6878a0c7b0 --- /dev/null +++ b/datadog_api_client/v2/model/global_incident_settings_attributes_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GlobalIncidentSettingsAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "analytics_dashboard_id": (str,), + } + attribute_map = { + "analytics_dashboard_id": "analytics_dashboard_id", + } + + def __init__(self_, analytics_dashboard_id: Union[str, UnsetType]=unset, **kwargs): + """ + Global incident settings attributes + + :param analytics_dashboard_id: The analytics dashboard ID + :type analytics_dashboard_id: str, optional + """ + if analytics_dashboard_id is not unset: + kwargs["analytics_dashboard_id"] = analytics_dashboard_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/global_incident_settings_attributes_response.py b/datadog_api_client/v2/model/global_incident_settings_attributes_response.py new file mode 100644 index 0000000000..f47c6e2ffc --- /dev/null +++ b/datadog_api_client/v2/model/global_incident_settings_attributes_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GlobalIncidentSettingsAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "analytics_dashboard_id": (str,), + "created": (datetime,), + "modified": (datetime,), + } + attribute_map = { + "analytics_dashboard_id": "analytics_dashboard_id", + "created": "created", + "modified": "modified", + } + + def __init__(self_, analytics_dashboard_id: str, created: datetime, modified: datetime, **kwargs): + """ + Global incident settings attributes + + :param analytics_dashboard_id: The analytics dashboard ID + :type analytics_dashboard_id: str + + :param created: Timestamp when the settings were created + :type created: datetime + + :param modified: Timestamp when the settings were last modified + :type modified: datetime + """ + super().__init__(kwargs) + + + self_.analytics_dashboard_id = analytics_dashboard_id + self_.created = created + self_.modified = modified diff --git a/datadog_api_client/v2/model/global_incident_settings_data_request.py b/datadog_api_client/v2/model/global_incident_settings_data_request.py new file mode 100644 index 0000000000..07928e671c --- /dev/null +++ b/datadog_api_client/v2/model/global_incident_settings_data_request.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_incident_settings_attributes_request import GlobalIncidentSettingsAttributesRequest + from datadog_api_client.v2.model.global_incident_settings_type import GlobalIncidentSettingsType + +class GlobalIncidentSettingsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_incident_settings_attributes_request import GlobalIncidentSettingsAttributesRequest + from datadog_api_client.v2.model.global_incident_settings_type import GlobalIncidentSettingsType + return { + "attributes": (GlobalIncidentSettingsAttributesRequest,), + "type": (GlobalIncidentSettingsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: GlobalIncidentSettingsType, attributes: Union[GlobalIncidentSettingsAttributesRequest, UnsetType]=unset, **kwargs): + """ + Data object in the global incident settings request. + + :param attributes: Global incident settings attributes + :type attributes: GlobalIncidentSettingsAttributesRequest, optional + + :param type: Global incident settings resource type + :type type: GlobalIncidentSettingsType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/global_incident_settings_data_response.py b/datadog_api_client/v2/model/global_incident_settings_data_response.py new file mode 100644 index 0000000000..b8a83c329d --- /dev/null +++ b/datadog_api_client/v2/model/global_incident_settings_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_incident_settings_attributes_response import GlobalIncidentSettingsAttributesResponse + from datadog_api_client.v2.model.global_incident_settings_type import GlobalIncidentSettingsType + +class GlobalIncidentSettingsDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_incident_settings_attributes_response import GlobalIncidentSettingsAttributesResponse + from datadog_api_client.v2.model.global_incident_settings_type import GlobalIncidentSettingsType + return { + "attributes": (GlobalIncidentSettingsAttributesResponse,), + "id": (str,), + "type": (GlobalIncidentSettingsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GlobalIncidentSettingsAttributesResponse, id: str, type: GlobalIncidentSettingsType, **kwargs): + """ + Data object in the global incident settings response. + + :param attributes: Global incident settings attributes + :type attributes: GlobalIncidentSettingsAttributesResponse + + :param id: The unique identifier for the global incident settings + :type id: str + + :param type: Global incident settings resource type + :type type: GlobalIncidentSettingsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/global_incident_settings_request.py b/datadog_api_client/v2/model/global_incident_settings_request.py new file mode 100644 index 0000000000..237072b615 --- /dev/null +++ b/datadog_api_client/v2/model/global_incident_settings_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_incident_settings_data_request import GlobalIncidentSettingsDataRequest + +class GlobalIncidentSettingsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_incident_settings_data_request import GlobalIncidentSettingsDataRequest + return { + "data": (GlobalIncidentSettingsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GlobalIncidentSettingsDataRequest, **kwargs): + """ + Request payload for updating global incident settings. + + :param data: Data object in the global incident settings request. + :type data: GlobalIncidentSettingsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/global_incident_settings_response.py b/datadog_api_client/v2/model/global_incident_settings_response.py new file mode 100644 index 0000000000..2d4295cebd --- /dev/null +++ b/datadog_api_client/v2/model/global_incident_settings_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_incident_settings_data_response import GlobalIncidentSettingsDataResponse + +class GlobalIncidentSettingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_incident_settings_data_response import GlobalIncidentSettingsDataResponse + return { + "data": (GlobalIncidentSettingsDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GlobalIncidentSettingsDataResponse, **kwargs): + """ + Response payload containing global incident settings. + + :param data: Data object in the global incident settings response. + :type data: GlobalIncidentSettingsDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/global_incident_settings_type.py b/datadog_api_client/v2/model/global_incident_settings_type.py new file mode 100644 index 0000000000..3a0882896c --- /dev/null +++ b/datadog_api_client/v2/model/global_incident_settings_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GlobalIncidentSettingsType(ModelSimple): + """ + Global incident settings resource type + + :param value: If omitted defaults to "incidents_global_settings". Must be one of ["incidents_global_settings"]. + :type value: str + """ + + allowed_values = { + "incidents_global_settings", + } + INCIDENTS_GLOBAL_SETTINGS: ClassVar["GlobalIncidentSettingsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GlobalIncidentSettingsType.INCIDENTS_GLOBAL_SETTINGS = GlobalIncidentSettingsType("incidents_global_settings") diff --git a/datadog_api_client/v2/model/global_org.py b/datadog_api_client/v2/model/global_org.py new file mode 100644 index 0000000000..9287e4e214 --- /dev/null +++ b/datadog_api_client/v2/model/global_org.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GlobalOrg(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "public_id": (str, none_type), + "subdomain": (str, none_type), + "uuid": (UUID,), + } + attribute_map = { + "name": "name", + "public_id": "public_id", + "subdomain": "subdomain", + "uuid": "uuid", + } + + def __init__(self_, name: str, uuid: UUID, public_id: Union[str, none_type, UnsetType]=unset, subdomain: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Organization information for a global organization association. + + :param name: The name of the organization. + :type name: str + + :param public_id: The public identifier of the organization. + :type public_id: str, none_type, optional + + :param subdomain: The subdomain used to access the organization, if configured. + :type subdomain: str, none_type, optional + + :param uuid: The UUID of the organization. + :type uuid: UUID + """ + if public_id is not unset: + kwargs["public_id"] = public_id + if subdomain is not unset: + kwargs["subdomain"] = subdomain + super().__init__(kwargs) + + + self_.name = name + self_.uuid = uuid diff --git a/datadog_api_client/v2/model/global_org_attributes.py b/datadog_api_client/v2/model/global_org_attributes.py new file mode 100644 index 0000000000..85a881ac3b --- /dev/null +++ b/datadog_api_client/v2/model/global_org_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_org import GlobalOrg + from datadog_api_client.v2.model.global_org_user import GlobalOrgUser + +class GlobalOrgAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_org import GlobalOrg + from datadog_api_client.v2.model.global_org_user import GlobalOrgUser + return { + "org": (GlobalOrg,), + "redirect_url": (str, none_type), + "source_region": (str,), + "user": (GlobalOrgUser,), + } + attribute_map = { + "org": "org", + "redirect_url": "redirect_url", + "source_region": "source_region", + "user": "user", + } + + def __init__(self_, org: GlobalOrg, source_region: str, user: GlobalOrgUser, redirect_url: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of an organization associated with the authenticated user. + + :param org: Organization information for a global organization association. + :type org: GlobalOrg + + :param redirect_url: The login URL used to switch into the organization, if available. + :type redirect_url: str, none_type, optional + + :param source_region: The source region of the organization. + :type source_region: str + + :param user: User information for a global organization association. + :type user: GlobalOrgUser + """ + if redirect_url is not unset: + kwargs["redirect_url"] = redirect_url + super().__init__(kwargs) + + + self_.org = org + self_.source_region = source_region + self_.user = user diff --git a/datadog_api_client/v2/model/global_org_data.py b/datadog_api_client/v2/model/global_org_data.py new file mode 100644 index 0000000000..b7a5780a60 --- /dev/null +++ b/datadog_api_client/v2/model/global_org_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_org_attributes import GlobalOrgAttributes + from datadog_api_client.v2.model.global_org_type import GlobalOrgType + +class GlobalOrgData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_org_attributes import GlobalOrgAttributes + from datadog_api_client.v2.model.global_org_type import GlobalOrgType + return { + "attributes": (GlobalOrgAttributes,), + "type": (GlobalOrgType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: GlobalOrgAttributes, type: GlobalOrgType, **kwargs): + """ + An organization associated with the authenticated user. + + :param attributes: Attributes of an organization associated with the authenticated user. + :type attributes: GlobalOrgAttributes + + :param type: The resource type for global user organizations. + :type type: GlobalOrgType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/global_org_identifier.py b/datadog_api_client/v2/model/global_org_identifier.py new file mode 100644 index 0000000000..bef7aacddd --- /dev/null +++ b/datadog_api_client/v2/model/global_org_identifier.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GlobalOrgIdentifier(ModelNormal): + @cached_property + def openapi_types(_): + return { + "org_site": (str,), + "org_uuid": (UUID,), + } + attribute_map = { + "org_site": "org_site", + "org_uuid": "org_uuid", + } + + def __init__(self_, org_site: str, org_uuid: UUID, **kwargs): + """ + A unique identifier for an organization including its site. + + :param org_site: The site of the organization. + :type org_site: str + + :param org_uuid: The UUID of the organization. + :type org_uuid: UUID + """ + super().__init__(kwargs) + + + self_.org_site = org_site + self_.org_uuid = org_uuid diff --git a/datadog_api_client/v2/model/global_org_type.py b/datadog_api_client/v2/model/global_org_type.py new file mode 100644 index 0000000000..728557f797 --- /dev/null +++ b/datadog_api_client/v2/model/global_org_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GlobalOrgType(ModelSimple): + """ + The resource type for global user organizations. + + :param value: If omitted defaults to "global_user_orgs". Must be one of ["global_user_orgs"]. + :type value: str + """ + + allowed_values = { + "global_user_orgs", + } + GLOBAL_USER_ORGS: ClassVar["GlobalOrgType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GlobalOrgType.GLOBAL_USER_ORGS = GlobalOrgType("global_user_orgs") diff --git a/datadog_api_client/v2/model/global_org_user.py b/datadog_api_client/v2/model/global_org_user.py new file mode 100644 index 0000000000..cb60b5bc1c --- /dev/null +++ b/datadog_api_client/v2/model/global_org_user.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GlobalOrgUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "uuid": (UUID,), + } + attribute_map = { + "handle": "handle", + "uuid": "uuid", + } + + def __init__(self_, handle: str, uuid: UUID, **kwargs): + """ + User information for a global organization association. + + :param handle: The handle of the user. + :type handle: str + + :param uuid: The UUID of the user. + :type uuid: UUID + """ + super().__init__(kwargs) + + + self_.handle = handle + self_.uuid = uuid diff --git a/datadog_api_client/v2/model/global_orgs_links.py b/datadog_api_client/v2/model/global_orgs_links.py new file mode 100644 index 0000000000..d0d18acb0b --- /dev/null +++ b/datadog_api_client/v2/model/global_orgs_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GlobalOrgsLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str, none_type), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, next: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links. + + :param next: Link to the next page. + :type next: str, none_type, optional + + :param prev: Link to the previous page. + :type prev: str, none_type, optional + + :param self: Link to the current page. + :type self: str, optional + """ + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/global_orgs_meta.py b/datadog_api_client/v2/model/global_orgs_meta.py new file mode 100644 index 0000000000..c798068933 --- /dev/null +++ b/datadog_api_client/v2/model/global_orgs_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_orgs_meta_page import GlobalOrgsMetaPage + +class GlobalOrgsMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_orgs_meta_page import GlobalOrgsMetaPage + return { + "page": (GlobalOrgsMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[GlobalOrgsMetaPage, UnsetType]=unset, **kwargs): + """ + Response metadata object. + + :param page: Paging attributes. + :type page: GlobalOrgsMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/global_orgs_meta_page.py b/datadog_api_client/v2/model/global_orgs_meta_page.py new file mode 100644 index 0000000000..18c6ac84af --- /dev/null +++ b/datadog_api_client/v2/model/global_orgs_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_orgs_meta_page_type import GlobalOrgsMetaPageType + +class GlobalOrgsMetaPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_orgs_meta_page_type import GlobalOrgsMetaPageType + return { + "cursor": (str,), + "limit": (int,), + "next_cursor": (str, none_type), + "prev_cursor": (str, none_type), + "type": (GlobalOrgsMetaPageType,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + "next_cursor": "next_cursor", + "prev_cursor": "prev_cursor", + "type": "type", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_cursor: Union[str, none_type, UnsetType]=unset, prev_cursor: Union[str, none_type, UnsetType]=unset, type: Union[GlobalOrgsMetaPageType, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param cursor: The cursor used to get the current results, if any. + :type cursor: str, optional + + :param limit: Number of results returned. + :type limit: int, optional + + :param next_cursor: The cursor used to get the next results, if any. + :type next_cursor: str, none_type, optional + + :param prev_cursor: The cursor used to get the previous results, if any. + :type prev_cursor: str, none_type, optional + + :param type: Type of global orgs pagination. + :type type: GlobalOrgsMetaPageType, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + if next_cursor is not unset: + kwargs["next_cursor"] = next_cursor + if prev_cursor is not unset: + kwargs["prev_cursor"] = prev_cursor + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/global_orgs_meta_page_type.py b/datadog_api_client/v2/model/global_orgs_meta_page_type.py new file mode 100644 index 0000000000..e183a31c15 --- /dev/null +++ b/datadog_api_client/v2/model/global_orgs_meta_page_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GlobalOrgsMetaPageType(ModelSimple): + """ + Type of global orgs pagination. + + :param value: If omitted defaults to "cursor". Must be one of ["cursor"]. + :type value: str + """ + + allowed_values = { + "cursor", + } + CURSOR: ClassVar["GlobalOrgsMetaPageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GlobalOrgsMetaPageType.CURSOR = GlobalOrgsMetaPageType("cursor") diff --git a/datadog_api_client/v2/model/global_orgs_response.py b/datadog_api_client/v2/model/global_orgs_response.py new file mode 100644 index 0000000000..19509662fa --- /dev/null +++ b/datadog_api_client/v2/model/global_orgs_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_org_data import GlobalOrgData + from datadog_api_client.v2.model.global_orgs_links import GlobalOrgsLinks + from datadog_api_client.v2.model.global_orgs_meta import GlobalOrgsMeta + +class GlobalOrgsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_org_data import GlobalOrgData + from datadog_api_client.v2.model.global_orgs_links import GlobalOrgsLinks + from datadog_api_client.v2.model.global_orgs_meta import GlobalOrgsMeta + return { + "data": ([GlobalOrgData],), + "links": (GlobalOrgsLinks,), + "meta": (GlobalOrgsMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[GlobalOrgData], links: Union[GlobalOrgsLinks, UnsetType]=unset, meta: Union[GlobalOrgsMeta, UnsetType]=unset, **kwargs): + """ + Response containing organizations across regions for the authenticated user. + + :param data: Organizations across regions for the authenticated user. + :type data: [GlobalOrgData] + + :param links: Pagination links. + :type links: GlobalOrgsLinks, optional + + :param meta: Response metadata object. + :type meta: GlobalOrgsMeta, optional + """ + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/global_variable_data.py b/datadog_api_client/v2/model/global_variable_data.py new file mode 100644 index 0000000000..f0073c3238 --- /dev/null +++ b/datadog_api_client/v2/model/global_variable_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_global_variable import SyntheticsGlobalVariable + from datadog_api_client.v2.model.global_variable_type import GlobalVariableType + +class GlobalVariableData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_global_variable import SyntheticsGlobalVariable + from datadog_api_client.v2.model.global_variable_type import GlobalVariableType + return { + "attributes": (SyntheticsGlobalVariable,), + "id": (str,), + "type": (GlobalVariableType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsGlobalVariable, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[GlobalVariableType, UnsetType]=unset, **kwargs): + """ + Synthetics global variable data. Wrapper around the global variable object. + + :param attributes: Synthetic global variable. + :type attributes: SyntheticsGlobalVariable, optional + + :param id: Global variable identifier. + :type id: str, optional + + :param type: Global variable type. + :type type: GlobalVariableType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/global_variable_json_patch_request.py b/datadog_api_client/v2/model/global_variable_json_patch_request.py new file mode 100644 index 0000000000..4edc8f7500 --- /dev/null +++ b/datadog_api_client/v2/model/global_variable_json_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_variable_json_patch_request_data import GlobalVariableJsonPatchRequestData + +class GlobalVariableJsonPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_variable_json_patch_request_data import GlobalVariableJsonPatchRequestData + return { + "data": (GlobalVariableJsonPatchRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GlobalVariableJsonPatchRequestData, **kwargs): + """ + JSON Patch request for global variable. + + :param data: Data object for a JSON Patch request on a Synthetic global variable. + :type data: GlobalVariableJsonPatchRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/global_variable_json_patch_request_data.py b/datadog_api_client/v2/model/global_variable_json_patch_request_data.py new file mode 100644 index 0000000000..2978804d97 --- /dev/null +++ b/datadog_api_client/v2/model/global_variable_json_patch_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_variable_json_patch_request_data_attributes import GlobalVariableJsonPatchRequestDataAttributes + from datadog_api_client.v2.model.global_variable_json_patch_type import GlobalVariableJsonPatchType + +class GlobalVariableJsonPatchRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_variable_json_patch_request_data_attributes import GlobalVariableJsonPatchRequestDataAttributes + from datadog_api_client.v2.model.global_variable_json_patch_type import GlobalVariableJsonPatchType + return { + "attributes": (GlobalVariableJsonPatchRequestDataAttributes,), + "type": (GlobalVariableJsonPatchType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[GlobalVariableJsonPatchRequestDataAttributes, UnsetType]=unset, type: Union[GlobalVariableJsonPatchType, UnsetType]=unset, **kwargs): + """ + Data object for a JSON Patch request on a Synthetic global variable. + + :param attributes: Attributes for a JSON Patch request on a Synthetic global variable. + :type attributes: GlobalVariableJsonPatchRequestDataAttributes, optional + + :param type: Global variable JSON Patch type. + :type type: GlobalVariableJsonPatchType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/global_variable_json_patch_request_data_attributes.py b/datadog_api_client/v2/model/global_variable_json_patch_request_data_attributes.py new file mode 100644 index 0000000000..41b7b2ad81 --- /dev/null +++ b/datadog_api_client/v2/model/global_variable_json_patch_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.json_patch_operation import JsonPatchOperation + +class GlobalVariableJsonPatchRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.json_patch_operation import JsonPatchOperation + return { + "json_patch": ([JsonPatchOperation],), + } + attribute_map = { + "json_patch": "json_patch", + } + + def __init__(self_, json_patch: Union[List[JsonPatchOperation], UnsetType]=unset, **kwargs): + """ + Attributes for a JSON Patch request on a Synthetic global variable. + + :param json_patch: JSON Patch operations following RFC 6902. + :type json_patch: [JsonPatchOperation], optional + """ + if json_patch is not unset: + kwargs["json_patch"] = json_patch + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/global_variable_json_patch_type.py b/datadog_api_client/v2/model/global_variable_json_patch_type.py new file mode 100644 index 0000000000..19e325df1c --- /dev/null +++ b/datadog_api_client/v2/model/global_variable_json_patch_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GlobalVariableJsonPatchType(ModelSimple): + """ + Global variable JSON Patch type. + + :param value: If omitted defaults to "global_variables_json_patch". Must be one of ["global_variables_json_patch"]. + :type value: str + """ + + allowed_values = { + "global_variables_json_patch", + } + GLOBAL_VARIABLES_JSON_PATCH: ClassVar["GlobalVariableJsonPatchType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GlobalVariableJsonPatchType.GLOBAL_VARIABLES_JSON_PATCH = GlobalVariableJsonPatchType("global_variables_json_patch") diff --git a/datadog_api_client/v2/model/global_variable_response.py b/datadog_api_client/v2/model/global_variable_response.py new file mode 100644 index 0000000000..58c001583f --- /dev/null +++ b/datadog_api_client/v2/model/global_variable_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_variable_data import GlobalVariableData + +class GlobalVariableResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_variable_data import GlobalVariableData + return { + "data": (GlobalVariableData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GlobalVariableData, UnsetType]=unset, **kwargs): + """ + Global variable response. + + :param data: Synthetics global variable data. Wrapper around the global variable object. + :type data: GlobalVariableData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/global_variable_type.py b/datadog_api_client/v2/model/global_variable_type.py new file mode 100644 index 0000000000..c49a3e28f7 --- /dev/null +++ b/datadog_api_client/v2/model/global_variable_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GlobalVariableType(ModelSimple): + """ + Global variable type. + + :param value: If omitted defaults to "global_variables". Must be one of ["global_variables"]. + :type value: str + """ + + allowed_values = { + "global_variables", + } + GLOBAL_VARIABLES: ClassVar["GlobalVariableType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GlobalVariableType.GLOBAL_VARIABLES = GlobalVariableType("global_variables") diff --git a/datadog_api_client/v2/model/google_chat_app_named_space_response.py b/datadog_api_client/v2/model/google_chat_app_named_space_response.py new file mode 100644 index 0000000000..7840c145e5 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_app_named_space_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_app_named_space_response_data import GoogleChatAppNamedSpaceResponseData + +class GoogleChatAppNamedSpaceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_app_named_space_response_data import GoogleChatAppNamedSpaceResponseData + return { + "data": (GoogleChatAppNamedSpaceResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GoogleChatAppNamedSpaceResponseData, **kwargs): + """ + Response with Google Chat space information. + + :param data: Google Chat space data from a response. + :type data: GoogleChatAppNamedSpaceResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_app_named_space_response_attributes.py b/datadog_api_client/v2/model/google_chat_app_named_space_response_attributes.py new file mode 100644 index 0000000000..c53da01d2c --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_app_named_space_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleChatAppNamedSpaceResponseAttributes(ModelNormal): + validations = { + "display_name": { + "max_length": 255, + }, + "organization_binding_id": { + "max_length": 255, + }, + "resource_name": { + "max_length": 255, + }, + "space_uri": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "display_name": (str,), + "organization_binding_id": (str,), + "resource_name": (str,), + "space_uri": (str,), + } + attribute_map = { + "display_name": "display_name", + "organization_binding_id": "organization_binding_id", + "resource_name": "resource_name", + "space_uri": "space_uri", + } + + def __init__(self_, display_name: Union[str, UnsetType]=unset, organization_binding_id: Union[str, UnsetType]=unset, resource_name: Union[str, UnsetType]=unset, space_uri: Union[str, UnsetType]=unset, **kwargs): + """ + Google Chat space attributes. + + :param display_name: Google space display name. + :type display_name: str, optional + + :param organization_binding_id: Organization binding ID. + :type organization_binding_id: str, optional + + :param resource_name: Google space resource name. + :type resource_name: str, optional + + :param space_uri: Google space URI. + :type space_uri: str, optional + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if organization_binding_id is not unset: + kwargs["organization_binding_id"] = organization_binding_id + if resource_name is not unset: + kwargs["resource_name"] = resource_name + if space_uri is not unset: + kwargs["space_uri"] = space_uri + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_app_named_space_response_data.py b/datadog_api_client/v2/model/google_chat_app_named_space_response_data.py new file mode 100644 index 0000000000..897b5c3b45 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_app_named_space_response_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_app_named_space_response_attributes import GoogleChatAppNamedSpaceResponseAttributes + from datadog_api_client.v2.model.google_chat_app_named_space_type import GoogleChatAppNamedSpaceType + +class GoogleChatAppNamedSpaceResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_app_named_space_response_attributes import GoogleChatAppNamedSpaceResponseAttributes + from datadog_api_client.v2.model.google_chat_app_named_space_type import GoogleChatAppNamedSpaceType + return { + "attributes": (GoogleChatAppNamedSpaceResponseAttributes,), + "id": (str,), + "type": (GoogleChatAppNamedSpaceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[GoogleChatAppNamedSpaceResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[GoogleChatAppNamedSpaceType, UnsetType]=unset, **kwargs): + """ + Google Chat space data from a response. + + :param attributes: Google Chat space attributes. + :type attributes: GoogleChatAppNamedSpaceResponseAttributes, optional + + :param id: The ID of the Google Chat space. + :type id: str, optional + + :param type: Google Chat space resource type. + :type type: GoogleChatAppNamedSpaceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_app_named_space_type.py b/datadog_api_client/v2/model/google_chat_app_named_space_type.py new file mode 100644 index 0000000000..00cd17728d --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_app_named_space_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GoogleChatAppNamedSpaceType(ModelSimple): + """ + Google Chat space resource type. + + :param value: If omitted defaults to "google-chat-app-named-space". Must be one of ["google-chat-app-named-space"]. + :type value: str + """ + + allowed_values = { + "google-chat-app-named-space", + } + GOOGLE_CHAT_APP_NAMED_SPACE_TYPE: ClassVar["GoogleChatAppNamedSpaceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GoogleChatAppNamedSpaceType.GOOGLE_CHAT_APP_NAMED_SPACE_TYPE = GoogleChatAppNamedSpaceType("google-chat-app-named-space") diff --git a/datadog_api_client/v2/model/google_chat_create_organization_handle_request.py b/datadog_api_client/v2/model/google_chat_create_organization_handle_request.py new file mode 100644 index 0000000000..dde4585720 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_create_organization_handle_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_create_organization_handle_request_data import GoogleChatCreateOrganizationHandleRequestData + from datadog_api_client.v2.model.google_chat_organization_handle_type import GoogleChatOrganizationHandleType + +class GoogleChatCreateOrganizationHandleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_create_organization_handle_request_data import GoogleChatCreateOrganizationHandleRequestData + from datadog_api_client.v2.model.google_chat_organization_handle_type import GoogleChatOrganizationHandleType + return { + "data": (GoogleChatCreateOrganizationHandleRequestData,), + "type": (GoogleChatOrganizationHandleType,), + } + attribute_map = { + "data": "data", + "type": "type", + } + + def __init__(self_, data: GoogleChatCreateOrganizationHandleRequestData, type: GoogleChatOrganizationHandleType, **kwargs): + """ + Create organization handle request. + + :param data: Organization handle data for a create request. + :type data: GoogleChatCreateOrganizationHandleRequestData + + :param type: Organization handle resource type. + :type type: GoogleChatOrganizationHandleType + """ + super().__init__(kwargs) + + + self_.data = data + self_.type = type diff --git a/datadog_api_client/v2/model/google_chat_create_organization_handle_request_attributes.py b/datadog_api_client/v2/model/google_chat_create_organization_handle_request_attributes.py new file mode 100644 index 0000000000..a0a269b649 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_create_organization_handle_request_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleChatCreateOrganizationHandleRequestAttributes(ModelNormal): + validations = { + "name": { + "max_length": 255, + }, + "space_resource_name": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "space_resource_name": (str,), + } + attribute_map = { + "name": "name", + "space_resource_name": "space_resource_name", + } + + def __init__(self_, name: str, space_resource_name: str, **kwargs): + """ + Organization handle attributes for a create request. + + :param name: Organization handle name. + :type name: str + + :param space_resource_name: Google space resource name. + :type space_resource_name: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.space_resource_name = space_resource_name diff --git a/datadog_api_client/v2/model/google_chat_create_organization_handle_request_data.py b/datadog_api_client/v2/model/google_chat_create_organization_handle_request_data.py new file mode 100644 index 0000000000..804538fd08 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_create_organization_handle_request_data.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_create_organization_handle_request_attributes import GoogleChatCreateOrganizationHandleRequestAttributes + +class GoogleChatCreateOrganizationHandleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_create_organization_handle_request_attributes import GoogleChatCreateOrganizationHandleRequestAttributes + return { + "attributes": (GoogleChatCreateOrganizationHandleRequestAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: GoogleChatCreateOrganizationHandleRequestAttributes, **kwargs): + """ + Organization handle data for a create request. + + :param attributes: Organization handle attributes for a create request. + :type attributes: GoogleChatCreateOrganizationHandleRequestAttributes + """ + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/google_chat_delegated_user_attributes.py b/datadog_api_client/v2/model/google_chat_delegated_user_attributes.py new file mode 100644 index 0000000000..3ef71a46ab --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_delegated_user_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleChatDelegatedUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "display_name": (str,), + "email": (str,), + "features": ([str],), + } + attribute_map = { + "display_name": "display_name", + "email": "email", + "features": "features", + } + + def __init__(self_, display_name: Union[str, UnsetType]=unset, email: Union[str, UnsetType]=unset, features: Union[List[str], UnsetType]=unset, **kwargs): + """ + Google Chat delegated user attributes. + + :param display_name: The delegated user's display name. + :type display_name: str, optional + + :param email: The delegated user's email address. + :type email: str, optional + + :param features: The list of features enabled for the delegated user. + :type features: [str], optional + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if email is not unset: + kwargs["email"] = email + if features is not unset: + kwargs["features"] = features + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_delegated_user_data.py b/datadog_api_client/v2/model/google_chat_delegated_user_data.py new file mode 100644 index 0000000000..ba8ccb7578 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_delegated_user_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_delegated_user_attributes import GoogleChatDelegatedUserAttributes + from datadog_api_client.v2.model.google_chat_delegated_user_type import GoogleChatDelegatedUserType + +class GoogleChatDelegatedUserData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_delegated_user_attributes import GoogleChatDelegatedUserAttributes + from datadog_api_client.v2.model.google_chat_delegated_user_type import GoogleChatDelegatedUserType + return { + "attributes": (GoogleChatDelegatedUserAttributes,), + "id": (str,), + "type": (GoogleChatDelegatedUserType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[GoogleChatDelegatedUserAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[GoogleChatDelegatedUserType, UnsetType]=unset, **kwargs): + """ + Google Chat delegated user data from a response. + + :param attributes: Google Chat delegated user attributes. + :type attributes: GoogleChatDelegatedUserAttributes, optional + + :param id: The ID of the delegated user. + :type id: str, optional + + :param type: Google Chat delegated user resource type. + :type type: GoogleChatDelegatedUserType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_delegated_user_response.py b/datadog_api_client/v2/model/google_chat_delegated_user_response.py new file mode 100644 index 0000000000..81b67d91da --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_delegated_user_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_delegated_user_data import GoogleChatDelegatedUserData + +class GoogleChatDelegatedUserResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_delegated_user_data import GoogleChatDelegatedUserData + return { + "data": (GoogleChatDelegatedUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GoogleChatDelegatedUserData, **kwargs): + """ + Response containing a Google Chat delegated user. + + :param data: Google Chat delegated user data from a response. + :type data: GoogleChatDelegatedUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_delegated_user_type.py b/datadog_api_client/v2/model/google_chat_delegated_user_type.py new file mode 100644 index 0000000000..398cf92e03 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_delegated_user_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GoogleChatDelegatedUserType(ModelSimple): + """ + Google Chat delegated user resource type. + + :param value: If omitted defaults to "google-chat-delegated-user". Must be one of ["google-chat-delegated-user"]. + :type value: str + """ + + allowed_values = { + "google-chat-delegated-user", + } + GOOGLE_CHAT_DELEGATED_USER_TYPE: ClassVar["GoogleChatDelegatedUserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GoogleChatDelegatedUserType.GOOGLE_CHAT_DELEGATED_USER_TYPE = GoogleChatDelegatedUserType("google-chat-delegated-user") diff --git a/datadog_api_client/v2/model/google_chat_organization_attributes.py b/datadog_api_client/v2/model/google_chat_organization_attributes.py new file mode 100644 index 0000000000..2b19a24cb2 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleChatOrganizationAttributes(ModelNormal): + validations = { + "domain_id": { + "max_length": 255, + }, + "domain_name": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "domain_id": (str,), + "domain_name": (str,), + } + attribute_map = { + "domain_id": "domain_id", + "domain_name": "domain_name", + } + + def __init__(self_, domain_id: Union[str, UnsetType]=unset, domain_name: Union[str, UnsetType]=unset, **kwargs): + """ + Google Chat organization attributes. + + :param domain_id: The Google Chat organization domain ID. + :type domain_id: str, optional + + :param domain_name: The Google Chat organization domain name. + :type domain_name: str, optional + """ + if domain_id is not unset: + kwargs["domain_id"] = domain_id + if domain_name is not unset: + kwargs["domain_name"] = domain_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_organization_data.py b/datadog_api_client/v2/model/google_chat_organization_data.py new file mode 100644 index 0000000000..8904c30f00 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_data.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_organization_attributes import GoogleChatOrganizationAttributes + from datadog_api_client.v2.model.google_chat_organization_relationships import GoogleChatOrganizationRelationships + from datadog_api_client.v2.model.google_chat_organization_type import GoogleChatOrganizationType + +class GoogleChatOrganizationData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_organization_attributes import GoogleChatOrganizationAttributes + from datadog_api_client.v2.model.google_chat_organization_relationships import GoogleChatOrganizationRelationships + from datadog_api_client.v2.model.google_chat_organization_type import GoogleChatOrganizationType + return { + "attributes": (GoogleChatOrganizationAttributes,), + "id": (str,), + "relationships": (GoogleChatOrganizationRelationships,), + "type": (GoogleChatOrganizationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[GoogleChatOrganizationAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[GoogleChatOrganizationRelationships, UnsetType]=unset, type: Union[GoogleChatOrganizationType, UnsetType]=unset, **kwargs): + """ + Google Chat organization data from a response. + + :param attributes: Google Chat organization attributes. + :type attributes: GoogleChatOrganizationAttributes, optional + + :param id: The ID of the Google Chat organization binding. + :type id: str, optional + + :param relationships: Google Chat organization relationships. + :type relationships: GoogleChatOrganizationRelationships, optional + + :param type: Google Chat organization resource type. + :type type: GoogleChatOrganizationType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_organization_handle_response.py b/datadog_api_client/v2/model/google_chat_organization_handle_response.py new file mode 100644 index 0000000000..a1e0d601fa --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_handle_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_organization_handle_response_data import GoogleChatOrganizationHandleResponseData + +class GoogleChatOrganizationHandleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_organization_handle_response_data import GoogleChatOrganizationHandleResponseData + return { + "data": (GoogleChatOrganizationHandleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GoogleChatOrganizationHandleResponseData, **kwargs): + """ + Organization handle for monitor notifications to a Google Chat space within a Google organization. + + :param data: Organization handle data from a response. + :type data: GoogleChatOrganizationHandleResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_organization_handle_response_attributes.py b/datadog_api_client/v2/model/google_chat_organization_handle_response_attributes.py new file mode 100644 index 0000000000..1f3602f3a3 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_handle_response_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleChatOrganizationHandleResponseAttributes(ModelNormal): + validations = { + "name": { + "max_length": 255, + }, + "space_display_name": { + "max_length": 255, + }, + "space_resource_name": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "space_display_name": (str,), + "space_resource_name": (str,), + } + attribute_map = { + "name": "name", + "space_display_name": "space_display_name", + "space_resource_name": "space_resource_name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, space_display_name: Union[str, UnsetType]=unset, space_resource_name: Union[str, UnsetType]=unset, **kwargs): + """ + Organization handle attributes. + + :param name: Organization handle name. + :type name: str, optional + + :param space_display_name: Google space display name. + :type space_display_name: str, optional + + :param space_resource_name: Google space resource name. + :type space_resource_name: str, optional + """ + if name is not unset: + kwargs["name"] = name + if space_display_name is not unset: + kwargs["space_display_name"] = space_display_name + if space_resource_name is not unset: + kwargs["space_resource_name"] = space_resource_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_organization_handle_response_data.py b/datadog_api_client/v2/model/google_chat_organization_handle_response_data.py new file mode 100644 index 0000000000..8f15a43074 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_handle_response_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_organization_handle_response_attributes import GoogleChatOrganizationHandleResponseAttributes + from datadog_api_client.v2.model.google_chat_organization_handle_type import GoogleChatOrganizationHandleType + +class GoogleChatOrganizationHandleResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_organization_handle_response_attributes import GoogleChatOrganizationHandleResponseAttributes + from datadog_api_client.v2.model.google_chat_organization_handle_type import GoogleChatOrganizationHandleType + return { + "attributes": (GoogleChatOrganizationHandleResponseAttributes,), + "id": (str,), + "type": (GoogleChatOrganizationHandleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[GoogleChatOrganizationHandleResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[GoogleChatOrganizationHandleType, UnsetType]=unset, **kwargs): + """ + Organization handle data from a response. + + :param attributes: Organization handle attributes. + :type attributes: GoogleChatOrganizationHandleResponseAttributes, optional + + :param id: The ID of the organization handle. + :type id: str, optional + + :param type: Organization handle resource type. + :type type: GoogleChatOrganizationHandleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_organization_handle_type.py b/datadog_api_client/v2/model/google_chat_organization_handle_type.py new file mode 100644 index 0000000000..03a768fb3d --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_handle_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GoogleChatOrganizationHandleType(ModelSimple): + """ + Organization handle resource type. + + :param value: If omitted defaults to "google-chat-organization-handle". Must be one of ["google-chat-organization-handle"]. + :type value: str + """ + + allowed_values = { + "google-chat-organization-handle", + } + GOOGLE_CHAT_ORGANIZATION_HANDLE_TYPE: ClassVar["GoogleChatOrganizationHandleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GoogleChatOrganizationHandleType.GOOGLE_CHAT_ORGANIZATION_HANDLE_TYPE = GoogleChatOrganizationHandleType("google-chat-organization-handle") diff --git a/datadog_api_client/v2/model/google_chat_organization_handles_response.py b/datadog_api_client/v2/model/google_chat_organization_handles_response.py new file mode 100644 index 0000000000..672c9e94d0 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_handles_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_organization_handle_response_data import GoogleChatOrganizationHandleResponseData + +class GoogleChatOrganizationHandlesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_organization_handle_response_data import GoogleChatOrganizationHandleResponseData + return { + "data": ([GoogleChatOrganizationHandleResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[GoogleChatOrganizationHandleResponseData], **kwargs): + """ + List of organization handles for monitor notifications to Google Chat spaces within a Google organization. + + :param data: An array of organization handles. + :type data: [GoogleChatOrganizationHandleResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_organization_relationships.py b/datadog_api_client/v2/model/google_chat_organization_relationships.py new file mode 100644 index 0000000000..be069b2007 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_organization_relationships_delegated_user import GoogleChatOrganizationRelationshipsDelegatedUser + +class GoogleChatOrganizationRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_organization_relationships_delegated_user import GoogleChatOrganizationRelationshipsDelegatedUser + return { + "delegated_user": (GoogleChatOrganizationRelationshipsDelegatedUser,), + } + attribute_map = { + "delegated_user": "delegated_user", + } + + def __init__(self_, delegated_user: Union[GoogleChatOrganizationRelationshipsDelegatedUser, UnsetType]=unset, **kwargs): + """ + Google Chat organization relationships. + + :param delegated_user: The delegated user relationship. + :type delegated_user: GoogleChatOrganizationRelationshipsDelegatedUser, optional + """ + if delegated_user is not unset: + kwargs["delegated_user"] = delegated_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_organization_relationships_delegated_user.py b/datadog_api_client/v2/model/google_chat_organization_relationships_delegated_user.py new file mode 100644 index 0000000000..dcbd0e97e9 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_relationships_delegated_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_organization_relationships_delegated_user_data import GoogleChatOrganizationRelationshipsDelegatedUserData + +class GoogleChatOrganizationRelationshipsDelegatedUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_organization_relationships_delegated_user_data import GoogleChatOrganizationRelationshipsDelegatedUserData + return { + "data": (GoogleChatOrganizationRelationshipsDelegatedUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GoogleChatOrganizationRelationshipsDelegatedUserData, UnsetType]=unset, **kwargs): + """ + The delegated user relationship. + + :param data: Delegated user relationship data. + :type data: GoogleChatOrganizationRelationshipsDelegatedUserData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_organization_relationships_delegated_user_data.py b/datadog_api_client/v2/model/google_chat_organization_relationships_delegated_user_data.py new file mode 100644 index 0000000000..c460114a39 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_relationships_delegated_user_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_delegated_user_type import GoogleChatDelegatedUserType + +class GoogleChatOrganizationRelationshipsDelegatedUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_delegated_user_type import GoogleChatDelegatedUserType + return { + "id": (str,), + "type": (GoogleChatDelegatedUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[GoogleChatDelegatedUserType, UnsetType]=unset, **kwargs): + """ + Delegated user relationship data. + + :param id: The ID of the delegated user. + :type id: str, optional + + :param type: Google Chat delegated user resource type. + :type type: GoogleChatDelegatedUserType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_organization_response.py b/datadog_api_client/v2/model/google_chat_organization_response.py new file mode 100644 index 0000000000..37b692f464 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_organization_data import GoogleChatOrganizationData + +class GoogleChatOrganizationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_organization_data import GoogleChatOrganizationData + return { + "data": (GoogleChatOrganizationData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GoogleChatOrganizationData, **kwargs): + """ + Response containing a Google Chat organization binding. + + :param data: Google Chat organization data from a response. + :type data: GoogleChatOrganizationData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_organization_type.py b/datadog_api_client/v2/model/google_chat_organization_type.py new file mode 100644 index 0000000000..e74978bb0d --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organization_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GoogleChatOrganizationType(ModelSimple): + """ + Google Chat organization resource type. + + :param value: If omitted defaults to "google-chat-organization". Must be one of ["google-chat-organization"]. + :type value: str + """ + + allowed_values = { + "google-chat-organization", + } + GOOGLE_CHAT_ORGANIZATION_TYPE: ClassVar["GoogleChatOrganizationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GoogleChatOrganizationType.GOOGLE_CHAT_ORGANIZATION_TYPE = GoogleChatOrganizationType("google-chat-organization") diff --git a/datadog_api_client/v2/model/google_chat_organizations_response.py b/datadog_api_client/v2/model/google_chat_organizations_response.py new file mode 100644 index 0000000000..21c69b9918 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_organizations_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_organization_data import GoogleChatOrganizationData + +class GoogleChatOrganizationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_organization_data import GoogleChatOrganizationData + return { + "data": ([GoogleChatOrganizationData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[GoogleChatOrganizationData], **kwargs): + """ + Response containing a list of Google Chat organization bindings. + + :param data: An array of Google Chat organization bindings. + :type data: [GoogleChatOrganizationData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_target_audience_attributes.py b/datadog_api_client/v2/model/google_chat_target_audience_attributes.py new file mode 100644 index 0000000000..7a00e16068 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleChatTargetAudienceAttributes(ModelNormal): + validations = { + "audience_id": { + "max_length": 255, + }, + "audience_name": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "audience_id": (str,), + "audience_name": (str,), + } + attribute_map = { + "audience_id": "audience_id", + "audience_name": "audience_name", + } + + def __init__(self_, audience_id: str, audience_name: str, **kwargs): + """ + Google Chat target audience attributes. + + :param audience_id: The audience ID. + :type audience_id: str + + :param audience_name: The audience name. + :type audience_name: str + """ + super().__init__(kwargs) + + + self_.audience_id = audience_id + self_.audience_name = audience_name diff --git a/datadog_api_client/v2/model/google_chat_target_audience_create_request.py b/datadog_api_client/v2/model/google_chat_target_audience_create_request.py new file mode 100644 index 0000000000..b06eeb95bc --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_target_audience_create_request_data import GoogleChatTargetAudienceCreateRequestData + +class GoogleChatTargetAudienceCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_target_audience_create_request_data import GoogleChatTargetAudienceCreateRequestData + return { + "data": (GoogleChatTargetAudienceCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GoogleChatTargetAudienceCreateRequestData, **kwargs): + """ + Create target audience request. + + :param data: Data for a create target audience request. + :type data: GoogleChatTargetAudienceCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_target_audience_create_request_attributes.py b/datadog_api_client/v2/model/google_chat_target_audience_create_request_attributes.py new file mode 100644 index 0000000000..7225de330f --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_create_request_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleChatTargetAudienceCreateRequestAttributes(ModelNormal): + validations = { + "audience_id": { + "max_length": 255, + }, + "audience_name": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "audience_id": (str,), + "audience_name": (str,), + } + attribute_map = { + "audience_id": "audience_id", + "audience_name": "audience_name", + } + + def __init__(self_, audience_id: str, audience_name: str, **kwargs): + """ + Attributes for creating a Google Chat target audience. + + :param audience_id: The audience ID. + :type audience_id: str + + :param audience_name: The audience name. + :type audience_name: str + """ + super().__init__(kwargs) + + + self_.audience_id = audience_id + self_.audience_name = audience_name diff --git a/datadog_api_client/v2/model/google_chat_target_audience_create_request_data.py b/datadog_api_client/v2/model/google_chat_target_audience_create_request_data.py new file mode 100644 index 0000000000..0e9d43df6a --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_target_audience_create_request_attributes import GoogleChatTargetAudienceCreateRequestAttributes + from datadog_api_client.v2.model.google_chat_target_audience_type import GoogleChatTargetAudienceType + +class GoogleChatTargetAudienceCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_target_audience_create_request_attributes import GoogleChatTargetAudienceCreateRequestAttributes + from datadog_api_client.v2.model.google_chat_target_audience_type import GoogleChatTargetAudienceType + return { + "attributes": (GoogleChatTargetAudienceCreateRequestAttributes,), + "type": (GoogleChatTargetAudienceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: GoogleChatTargetAudienceCreateRequestAttributes, type: GoogleChatTargetAudienceType, **kwargs): + """ + Data for a create target audience request. + + :param attributes: Attributes for creating a Google Chat target audience. + :type attributes: GoogleChatTargetAudienceCreateRequestAttributes + + :param type: Google Chat target audience resource type. + :type type: GoogleChatTargetAudienceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/google_chat_target_audience_data.py b/datadog_api_client/v2/model/google_chat_target_audience_data.py new file mode 100644 index 0000000000..75d7dfe871 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_target_audience_attributes import GoogleChatTargetAudienceAttributes + from datadog_api_client.v2.model.google_chat_target_audience_type import GoogleChatTargetAudienceType + +class GoogleChatTargetAudienceData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_target_audience_attributes import GoogleChatTargetAudienceAttributes + from datadog_api_client.v2.model.google_chat_target_audience_type import GoogleChatTargetAudienceType + return { + "attributes": (GoogleChatTargetAudienceAttributes,), + "id": (str,), + "type": (GoogleChatTargetAudienceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[GoogleChatTargetAudienceAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[GoogleChatTargetAudienceType, UnsetType]=unset, **kwargs): + """ + Google Chat target audience data from a response. + + :param attributes: Google Chat target audience attributes. + :type attributes: GoogleChatTargetAudienceAttributes, optional + + :param id: The ID of the target audience. + :type id: str, optional + + :param type: Google Chat target audience resource type. + :type type: GoogleChatTargetAudienceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_target_audience_response.py b/datadog_api_client/v2/model/google_chat_target_audience_response.py new file mode 100644 index 0000000000..303fbe1bf2 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_target_audience_data import GoogleChatTargetAudienceData + +class GoogleChatTargetAudienceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_target_audience_data import GoogleChatTargetAudienceData + return { + "data": (GoogleChatTargetAudienceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GoogleChatTargetAudienceData, **kwargs): + """ + Response containing a Google Chat target audience. + + :param data: Google Chat target audience data from a response. + :type data: GoogleChatTargetAudienceData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_target_audience_type.py b/datadog_api_client/v2/model/google_chat_target_audience_type.py new file mode 100644 index 0000000000..7d37acfd4c --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GoogleChatTargetAudienceType(ModelSimple): + """ + Google Chat target audience resource type. + + :param value: If omitted defaults to "google-chat-target-audience". Must be one of ["google-chat-target-audience"]. + :type value: str + """ + + allowed_values = { + "google-chat-target-audience", + } + GOOGLE_CHAT_TARGET_AUDIENCE_TYPE: ClassVar["GoogleChatTargetAudienceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GoogleChatTargetAudienceType.GOOGLE_CHAT_TARGET_AUDIENCE_TYPE = GoogleChatTargetAudienceType("google-chat-target-audience") diff --git a/datadog_api_client/v2/model/google_chat_target_audience_update_request.py b/datadog_api_client/v2/model/google_chat_target_audience_update_request.py new file mode 100644 index 0000000000..e2f92c8b52 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_target_audience_update_request_data import GoogleChatTargetAudienceUpdateRequestData + +class GoogleChatTargetAudienceUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_target_audience_update_request_data import GoogleChatTargetAudienceUpdateRequestData + return { + "data": (GoogleChatTargetAudienceUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GoogleChatTargetAudienceUpdateRequestData, **kwargs): + """ + Update target audience request. + + :param data: Data for an update target audience request. + :type data: GoogleChatTargetAudienceUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_target_audience_update_request_attributes.py b/datadog_api_client/v2/model/google_chat_target_audience_update_request_attributes.py new file mode 100644 index 0000000000..594423b594 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_update_request_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleChatTargetAudienceUpdateRequestAttributes(ModelNormal): + validations = { + "audience_id": { + "max_length": 255, + }, + "audience_name": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "audience_id": (str,), + "audience_name": (str,), + } + attribute_map = { + "audience_id": "audience_id", + "audience_name": "audience_name", + } + + def __init__(self_, audience_id: Union[str, UnsetType]=unset, audience_name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating a Google Chat target audience. + + :param audience_id: The audience ID. + :type audience_id: str, optional + + :param audience_name: The audience name. + :type audience_name: str, optional + """ + if audience_id is not unset: + kwargs["audience_id"] = audience_id + if audience_name is not unset: + kwargs["audience_name"] = audience_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_target_audience_update_request_data.py b/datadog_api_client/v2/model/google_chat_target_audience_update_request_data.py new file mode 100644 index 0000000000..d57a277c7d --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audience_update_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_target_audience_update_request_attributes import GoogleChatTargetAudienceUpdateRequestAttributes + from datadog_api_client.v2.model.google_chat_target_audience_type import GoogleChatTargetAudienceType + +class GoogleChatTargetAudienceUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_target_audience_update_request_attributes import GoogleChatTargetAudienceUpdateRequestAttributes + from datadog_api_client.v2.model.google_chat_target_audience_type import GoogleChatTargetAudienceType + return { + "attributes": (GoogleChatTargetAudienceUpdateRequestAttributes,), + "type": (GoogleChatTargetAudienceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: GoogleChatTargetAudienceUpdateRequestAttributes, type: GoogleChatTargetAudienceType, **kwargs): + """ + Data for an update target audience request. + + :param attributes: Attributes for updating a Google Chat target audience. + :type attributes: GoogleChatTargetAudienceUpdateRequestAttributes + + :param type: Google Chat target audience resource type. + :type type: GoogleChatTargetAudienceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/google_chat_target_audiences_response.py b/datadog_api_client/v2/model/google_chat_target_audiences_response.py new file mode 100644 index 0000000000..e5b6176d2e --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_target_audiences_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_target_audience_data import GoogleChatTargetAudienceData + +class GoogleChatTargetAudiencesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_target_audience_data import GoogleChatTargetAudienceData + return { + "data": ([GoogleChatTargetAudienceData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[GoogleChatTargetAudienceData], **kwargs): + """ + Response containing a list of Google Chat target audiences. + + :param data: An array of Google Chat target audiences. + :type data: [GoogleChatTargetAudienceData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_chat_update_organization_handle_request.py b/datadog_api_client/v2/model/google_chat_update_organization_handle_request.py new file mode 100644 index 0000000000..79e90d139b --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_update_organization_handle_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_update_organization_handle_request_data import GoogleChatUpdateOrganizationHandleRequestData + from datadog_api_client.v2.model.google_chat_organization_handle_type import GoogleChatOrganizationHandleType + +class GoogleChatUpdateOrganizationHandleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_update_organization_handle_request_data import GoogleChatUpdateOrganizationHandleRequestData + from datadog_api_client.v2.model.google_chat_organization_handle_type import GoogleChatOrganizationHandleType + return { + "data": (GoogleChatUpdateOrganizationHandleRequestData,), + "type": (GoogleChatOrganizationHandleType,), + } + attribute_map = { + "data": "data", + "type": "type", + } + + def __init__(self_, data: GoogleChatUpdateOrganizationHandleRequestData, type: GoogleChatOrganizationHandleType, **kwargs): + """ + Update organization handle request. + + :param data: Organization handle data for an update request. + :type data: GoogleChatUpdateOrganizationHandleRequestData + + :param type: Organization handle resource type. + :type type: GoogleChatOrganizationHandleType + """ + super().__init__(kwargs) + + + self_.data = data + self_.type = type diff --git a/datadog_api_client/v2/model/google_chat_update_organization_handle_request_attributes.py b/datadog_api_client/v2/model/google_chat_update_organization_handle_request_attributes.py new file mode 100644 index 0000000000..5919e70369 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_update_organization_handle_request_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleChatUpdateOrganizationHandleRequestAttributes(ModelNormal): + validations = { + "name": { + "max_length": 255, + }, + "space_resource_name": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "space_resource_name": (str,), + } + attribute_map = { + "name": "name", + "space_resource_name": "space_resource_name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, space_resource_name: Union[str, UnsetType]=unset, **kwargs): + """ + Organization handle attributes for an update request. + + :param name: Organization handle name. + :type name: str, optional + + :param space_resource_name: Google space resource name. + :type space_resource_name: str, optional + """ + if name is not unset: + kwargs["name"] = name + if space_resource_name is not unset: + kwargs["space_resource_name"] = space_resource_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/google_chat_update_organization_handle_request_data.py b/datadog_api_client/v2/model/google_chat_update_organization_handle_request_data.py new file mode 100644 index 0000000000..8fdc849055 --- /dev/null +++ b/datadog_api_client/v2/model/google_chat_update_organization_handle_request_data.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_chat_update_organization_handle_request_attributes import GoogleChatUpdateOrganizationHandleRequestAttributes + +class GoogleChatUpdateOrganizationHandleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_chat_update_organization_handle_request_attributes import GoogleChatUpdateOrganizationHandleRequestAttributes + return { + "attributes": (GoogleChatUpdateOrganizationHandleRequestAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: GoogleChatUpdateOrganizationHandleRequestAttributes, **kwargs): + """ + Organization handle data for an update request. + + :param attributes: Organization handle attributes for an update request. + :type attributes: GoogleChatUpdateOrganizationHandleRequestAttributes + """ + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/google_docs_postmortem_settings.py b/datadog_api_client/v2/model/google_docs_postmortem_settings.py new file mode 100644 index 0000000000..0a9b18cd23 --- /dev/null +++ b/datadog_api_client/v2/model/google_docs_postmortem_settings.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleDocsPostmortemSettings(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "parent_folder_id": (str,), + } + attribute_map = { + "account_id": "account_id", + "parent_folder_id": "parent_folder_id", + } + + def __init__(self_, account_id: str, parent_folder_id: str, **kwargs): + """ + Settings for a postmortem template stored in Google Docs. Required when ``location`` is ``google_docs``. + + :param account_id: The ID of the Google Drive integration account. + :type account_id: str + + :param parent_folder_id: The ID of the Google Drive folder where postmortems are created. + :type parent_folder_id: str + """ + super().__init__(kwargs) + + + self_.account_id = account_id + self_.parent_folder_id = parent_folder_id diff --git a/datadog_api_client/v2/model/google_meet_configuration_reference.py b/datadog_api_client/v2/model/google_meet_configuration_reference.py new file mode 100644 index 0000000000..aead76b340 --- /dev/null +++ b/datadog_api_client/v2/model/google_meet_configuration_reference.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.google_meet_configuration_reference_data import GoogleMeetConfigurationReferenceData + +class GoogleMeetConfigurationReference(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.google_meet_configuration_reference_data import GoogleMeetConfigurationReferenceData + return { + "data": (GoogleMeetConfigurationReferenceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[GoogleMeetConfigurationReferenceData, none_type], **kwargs): + """ + A reference to a Google Meet Configuration resource. + + :param data: The Google Meet configuration relationship data object. + :type data: GoogleMeetConfigurationReferenceData, none_type + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/google_meet_configuration_reference_data.py b/datadog_api_client/v2/model/google_meet_configuration_reference_data.py new file mode 100644 index 0000000000..f54ad00470 --- /dev/null +++ b/datadog_api_client/v2/model/google_meet_configuration_reference_data.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GoogleMeetConfigurationReferenceData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: str, **kwargs): + """ + The Google Meet configuration relationship data object. + + :param id: The unique identifier of the Google Meet configuration. + :type id: str + + :param type: The type of the Google Meet configuration. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/governance_config_attributes.py b/datadog_api_client/v2/model/governance_config_attributes.py new file mode 100644 index 0000000000..81c719df55 --- /dev/null +++ b/datadog_api_client/v2/model/governance_config_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GovernanceConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignment_notifications_enabled": (bool,), + "enabled": (bool,), + "usage_attribution_configured": (bool,), + "xorg_insights_enabled": (bool,), + } + attribute_map = { + "assignment_notifications_enabled": "assignment_notifications_enabled", + "enabled": "enabled", + "usage_attribution_configured": "usage_attribution_configured", + "xorg_insights_enabled": "xorg_insights_enabled", + } + + def __init__(self_, assignment_notifications_enabled: bool, enabled: bool, usage_attribution_configured: bool, xorg_insights_enabled: bool, **kwargs): + """ + The attributes of a Governance Console configuration. + + :param assignment_notifications_enabled: Whether notifications are sent to users when detections are assigned to them. + :type assignment_notifications_enabled: bool + + :param enabled: Whether the Governance Console is enabled for the organization. + :type enabled: bool + + :param usage_attribution_configured: Whether usage attribution is configured for the organization. + :type usage_attribution_configured: bool + + :param xorg_insights_enabled: Whether the organization has opted in to sharing governance data with a managing org + for cross-org insights. + :type xorg_insights_enabled: bool + """ + super().__init__(kwargs) + + + self_.assignment_notifications_enabled = assignment_notifications_enabled + self_.enabled = enabled + self_.usage_attribution_configured = usage_attribution_configured + self_.xorg_insights_enabled = xorg_insights_enabled diff --git a/datadog_api_client/v2/model/governance_config_data.py b/datadog_api_client/v2/model/governance_config_data.py new file mode 100644 index 0000000000..5301fbc31c --- /dev/null +++ b/datadog_api_client/v2/model/governance_config_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_config_attributes import GovernanceConfigAttributes + from datadog_api_client.v2.model.governance_console_config_resource_type import GovernanceConsoleConfigResourceType + +class GovernanceConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_config_attributes import GovernanceConfigAttributes + from datadog_api_client.v2.model.governance_console_config_resource_type import GovernanceConsoleConfigResourceType + return { + "attributes": (GovernanceConfigAttributes,), + "id": (str,), + "type": (GovernanceConsoleConfigResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GovernanceConfigAttributes, id: str, type: GovernanceConsoleConfigResourceType, **kwargs): + """ + A Governance Console configuration resource. + + :param attributes: The attributes of a Governance Console configuration. + :type attributes: GovernanceConfigAttributes + + :param id: The unique identifier of the organization the Governance Console configuration applies + to. May be the nil UUID ( ``00000000-0000-0000-0000-000000000000`` ) when the configuration + is not tied to a specific organization record. + :type id: str + + :param type: Governance console config resource type. + :type type: GovernanceConsoleConfigResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/governance_config_response.py b/datadog_api_client/v2/model/governance_config_response.py new file mode 100644 index 0000000000..c470729e9a --- /dev/null +++ b/datadog_api_client/v2/model/governance_config_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_config_data import GovernanceConfigData + +class GovernanceConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_config_data import GovernanceConfigData + return { + "data": (GovernanceConfigData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GovernanceConfigData, **kwargs): + """ + The Governance Console configuration for an organization. + + :param data: A Governance Console configuration resource. + :type data: GovernanceConfigData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_console_config_resource_type.py b/datadog_api_client/v2/model/governance_console_config_resource_type.py new file mode 100644 index 0000000000..e861f4bff1 --- /dev/null +++ b/datadog_api_client/v2/model/governance_console_config_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GovernanceConsoleConfigResourceType(ModelSimple): + """ + Governance console config resource type. + + :param value: If omitted defaults to "governance_console_config". Must be one of ["governance_console_config"]. + :type value: str + """ + + allowed_values = { + "governance_console_config", + } + GOVERNANCE_CONSOLE_CONFIG: ClassVar["GovernanceConsoleConfigResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GovernanceConsoleConfigResourceType.GOVERNANCE_CONSOLE_CONFIG = GovernanceConsoleConfigResourceType("governance_console_config") diff --git a/datadog_api_client/v2/model/governance_control_attributes.py b/datadog_api_client/v2/model/governance_control_attributes.py new file mode 100644 index 0000000000..d74a0c6937 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_attributes.py @@ -0,0 +1,160 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_parameters_map import GovernanceControlParametersMap + from datadog_api_client.v2.model.governance_control_mitigation_definition import GovernanceControlMitigationDefinition + from datadog_api_client.v2.model.governance_control_parameter_definition import GovernanceControlParameterDefinition + +class GovernanceControlAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_parameters_map import GovernanceControlParametersMap + from datadog_api_client.v2.model.governance_control_mitigation_definition import GovernanceControlMitigationDefinition + from datadog_api_client.v2.model.governance_control_parameter_definition import GovernanceControlParameterDefinition + return { + "active_detections_count": (int,), + "category": (str,), + "created_at": (datetime,), + "created_by": (str,), + "description": (str,), + "detection_parameters": (GovernanceControlParametersMap,), + "insights": ([str],), + "last_detection_at": (datetime, none_type), + "mitigated_detections_count": (int,), + "mitigation_parameters": (GovernanceControlParametersMap,), + "mitigation_type": (str,), + "mitigations": ([GovernanceControlMitigationDefinition],), + "name": (str,), + "priority": (str,), + "product": (str,), + "resource_type": (str,), + "resource_type_display_name": (str,), + "supported_detection_parameters": ([GovernanceControlParameterDefinition],), + "type": (str,), + } + attribute_map = { + "active_detections_count": "active_detections_count", + "category": "category", + "created_at": "created_at", + "created_by": "created_by", + "description": "description", + "detection_parameters": "detection_parameters", + "insights": "insights", + "last_detection_at": "last_detection_at", + "mitigated_detections_count": "mitigated_detections_count", + "mitigation_parameters": "mitigation_parameters", + "mitigation_type": "mitigation_type", + "mitigations": "mitigations", + "name": "name", + "priority": "priority", + "product": "product", + "resource_type": "resource_type", + "resource_type_display_name": "resource_type_display_name", + "supported_detection_parameters": "supported_detection_parameters", + "type": "type", + } + + def __init__(self_, active_detections_count: int, category: str, created_at: datetime, created_by: str, description: str, detection_parameters: GovernanceControlParametersMap, insights: List[str], last_detection_at: Union[datetime, none_type], mitigated_detections_count: int, mitigation_parameters: GovernanceControlParametersMap, mitigation_type: str, mitigations: List[GovernanceControlMitigationDefinition], name: str, priority: str, product: str, resource_type: str, resource_type_display_name: str, supported_detection_parameters: List[GovernanceControlParameterDefinition], type: str, **kwargs): + """ + The attributes of a governance control. + + :param active_detections_count: The number of active detections for the control. + :type active_detections_count: int + + :param category: The value driver the control is grouped under, such as ``security`` or ``cost``. + :type category: str + + :param created_at: The time the control configuration was created. + :type created_at: datetime + + :param created_by: The UUID of the user who created the control configuration. + :type created_by: str + + :param description: A human-readable description of what the control detects. + :type description: str + + :param detection_parameters: A free-form map of parameter names to their configured values. + :type detection_parameters: GovernanceControlParametersMap + + :param insights: The insight slugs associated with the control. + :type insights: [str] + + :param last_detection_at: The time of the most recent detection for the control. ``null`` when there are no detections. + :type last_detection_at: datetime, none_type + + :param mitigated_detections_count: The number of mitigated detections for the control. + :type mitigated_detections_count: int + + :param mitigation_parameters: A free-form map of parameter names to their configured values. + :type mitigation_parameters: GovernanceControlParametersMap + + :param mitigation_type: The configured mitigation type for the control. Empty when not configured. + :type mitigation_type: str + + :param mitigations: The mitigations available for a control. + :type mitigations: [GovernanceControlMitigationDefinition] + + :param name: Human-readable name of the control. + :type name: str + + :param priority: The priority of the control, such as ``High``. + :type priority: str + + :param product: The product the control belongs to. + :type product: str + + :param resource_type: The type of resource the control evaluates. + :type resource_type: str + + :param resource_type_display_name: The human-readable name of the resource type. + :type resource_type_display_name: str + + :param supported_detection_parameters: An array of parameter definitions. + :type supported_detection_parameters: [GovernanceControlParameterDefinition] + + :param type: The control type, such as ``Proactive`` or ``Detection``. + :type type: str + """ + super().__init__(kwargs) + + + self_.active_detections_count = active_detections_count + self_.category = category + self_.created_at = created_at + self_.created_by = created_by + self_.description = description + self_.detection_parameters = detection_parameters + self_.insights = insights + self_.last_detection_at = last_detection_at + self_.mitigated_detections_count = mitigated_detections_count + self_.mitigation_parameters = mitigation_parameters + self_.mitigation_type = mitigation_type + self_.mitigations = mitigations + self_.name = name + self_.priority = priority + self_.product = product + self_.resource_type = resource_type + self_.resource_type_display_name = resource_type_display_name + self_.supported_detection_parameters = supported_detection_parameters + self_.type = type diff --git a/datadog_api_client/v2/model/governance_control_data.py b/datadog_api_client/v2/model/governance_control_data.py new file mode 100644 index 0000000000..13a31bb80b --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_attributes import GovernanceControlAttributes + from datadog_api_client.v2.model.governance_control_resource_type import GovernanceControlResourceType + +class GovernanceControlData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_attributes import GovernanceControlAttributes + from datadog_api_client.v2.model.governance_control_resource_type import GovernanceControlResourceType + return { + "attributes": (GovernanceControlAttributes,), + "id": (str,), + "type": (GovernanceControlResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GovernanceControlAttributes, id: str, type: GovernanceControlResourceType, **kwargs): + """ + A governance control resource. + + :param attributes: The attributes of a governance control. + :type attributes: GovernanceControlAttributes + + :param id: The detection type that uniquely identifies the control. + :type id: str + + :param type: JSON:API resource type for a governance control. + :type type: GovernanceControlResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/governance_control_detection_assignment_source.py b/datadog_api_client/v2/model/governance_control_detection_assignment_source.py new file mode 100644 index 0000000000..cfbfdc429c --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_assignment_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GovernanceControlDetectionAssignmentSource(ModelSimple): + """ + How the detection's current assignment was determined. Possible values are `auto_resolved`, `manual`, `reassigned`, and `cleared`. + + :param value: Must be one of ["auto_resolved", "manual", "reassigned", "cleared"]. + :type value: str + """ + + allowed_values = { + "auto_resolved", + "manual", + "reassigned", + "cleared", + } + AUTO_RESOLVED: ClassVar["GovernanceControlDetectionAssignmentSource"] + MANUAL: ClassVar["GovernanceControlDetectionAssignmentSource"] + REASSIGNED: ClassVar["GovernanceControlDetectionAssignmentSource"] + CLEARED: ClassVar["GovernanceControlDetectionAssignmentSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GovernanceControlDetectionAssignmentSource.AUTO_RESOLVED = GovernanceControlDetectionAssignmentSource("auto_resolved") +GovernanceControlDetectionAssignmentSource.MANUAL = GovernanceControlDetectionAssignmentSource("manual") +GovernanceControlDetectionAssignmentSource.REASSIGNED = GovernanceControlDetectionAssignmentSource("reassigned") +GovernanceControlDetectionAssignmentSource.CLEARED = GovernanceControlDetectionAssignmentSource("cleared") diff --git a/datadog_api_client/v2/model/governance_control_detection_attributes.py b/datadog_api_client/v2/model/governance_control_detection_attributes.py new file mode 100644 index 0000000000..0a76b7ecf1 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_attributes.py @@ -0,0 +1,148 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_detection_assignment_source import GovernanceControlDetectionAssignmentSource + from datadog_api_client.v2.model.governance_control_detection_state import GovernanceControlDetectionState + +class GovernanceControlDetectionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_detection_assignment_source import GovernanceControlDetectionAssignmentSource + from datadog_api_client.v2.model.governance_control_detection_state import GovernanceControlDetectionState + return { + "assigned_team": (str,), + "assigned_to": (str,), + "assignment_source": (GovernanceControlDetectionAssignmentSource,), + "control_id": (str,), + "created_at": (datetime,), + "detection_type": (str,), + "display_name": (str,), + "exception_at": (datetime,), + "exception_by": (str,), + "metadata": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "mitigate_after": (datetime,), + "mitigated_at": (datetime,), + "priority": (int,), + "resource_id": (str,), + "resource_type": (str,), + "state": (GovernanceControlDetectionState,), + } + attribute_map = { + "assigned_team": "assigned_team", + "assigned_to": "assigned_to", + "assignment_source": "assignment_source", + "control_id": "control_id", + "created_at": "created_at", + "detection_type": "detection_type", + "display_name": "display_name", + "exception_at": "exception_at", + "exception_by": "exception_by", + "metadata": "metadata", + "mitigate_after": "mitigate_after", + "mitigated_at": "mitigated_at", + "priority": "priority", + "resource_id": "resource_id", + "resource_type": "resource_type", + "state": "state", + } + + def __init__(self_, assignment_source: GovernanceControlDetectionAssignmentSource, control_id: str, created_at: datetime, detection_type: str, display_name: str, priority: int, resource_id: str, resource_type: str, state: GovernanceControlDetectionState, assigned_team: Union[str, UnsetType]=unset, assigned_to: Union[str, UnsetType]=unset, exception_at: Union[datetime, UnsetType]=unset, exception_by: Union[str, UnsetType]=unset, metadata: Union[Any, UnsetType]=unset, mitigate_after: Union[datetime, UnsetType]=unset, mitigated_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + The attributes of a governance control detection. + + :param assigned_team: The identifier of the team the detection is assigned to, if any. + :type assigned_team: str, optional + + :param assigned_to: The identifier of the user the detection is assigned to, if any. + :type assigned_to: str, optional + + :param assignment_source: How the detection's current assignment was determined. Possible values are ``auto_resolved`` , ``manual`` , ``reassigned`` , and ``cleared``. + :type assignment_source: GovernanceControlDetectionAssignmentSource + + :param control_id: DEPRECATED: mirrors ``detection_type`` for backward compatibility; use ``detection_type`` + instead. **Deprecated**. + :type control_id: str + + :param created_at: The date and time when the detection was created. + :type created_at: datetime + + :param detection_type: The type of detection, which determines what condition was detected. + :type detection_type: str + + :param display_name: The human-readable name of the detected resource. + :type display_name: str + + :param exception_at: The date and time when the detection was marked as an exception, if applicable. + :type exception_at: datetime, optional + + :param exception_by: The identifier of the user who marked the detection as an exception, if applicable. + :type exception_by: str, optional + + :param metadata: Free-form metadata associated with the detection. + :type metadata: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param mitigate_after: The date and time after which the detection is scheduled to be mitigated, if applicable. + :type mitigate_after: datetime, optional + + :param mitigated_at: The date and time when the detection was mitigated, if applicable. + :type mitigated_at: datetime, optional + + :param priority: The priority of the detection, if set. + :type priority: int + + :param resource_id: The identifier of the resource the detection applies to. + :type resource_id: str + + :param resource_type: The type of resource the detection applies to, for example ``api_key`` or ``dashboard``. + :type resource_type: str + + :param state: The current state of the detection. Possible values are ``active`` , ``exception`` , ``mitigated`` , ``inactive`` , ``obsolete`` , ``resolved_externally`` , and ``mitigation_in_progress``. + :type state: GovernanceControlDetectionState + """ + if assigned_team is not unset: + kwargs["assigned_team"] = assigned_team + if assigned_to is not unset: + kwargs["assigned_to"] = assigned_to + if exception_at is not unset: + kwargs["exception_at"] = exception_at + if exception_by is not unset: + kwargs["exception_by"] = exception_by + if metadata is not unset: + kwargs["metadata"] = metadata + if mitigate_after is not unset: + kwargs["mitigate_after"] = mitigate_after + if mitigated_at is not unset: + kwargs["mitigated_at"] = mitigated_at + super().__init__(kwargs) + + + self_.assignment_source = assignment_source + self_.control_id = control_id + self_.created_at = created_at + self_.detection_type = detection_type + self_.display_name = display_name + self_.priority = priority + self_.resource_id = resource_id + self_.resource_type = resource_type + self_.state = state diff --git a/datadog_api_client/v2/model/governance_control_detection_data.py b/datadog_api_client/v2/model/governance_control_detection_data.py new file mode 100644 index 0000000000..37ded7c89d --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_detection_attributes import GovernanceControlDetectionAttributes + from datadog_api_client.v2.model.governance_control_detection_resource_type import GovernanceControlDetectionResourceType + +class GovernanceControlDetectionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_detection_attributes import GovernanceControlDetectionAttributes + from datadog_api_client.v2.model.governance_control_detection_resource_type import GovernanceControlDetectionResourceType + return { + "attributes": (GovernanceControlDetectionAttributes,), + "id": (str,), + "type": (GovernanceControlDetectionResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GovernanceControlDetectionAttributes, id: str, type: GovernanceControlDetectionResourceType, **kwargs): + """ + A governance control detection resource. + + :param attributes: The attributes of a governance control detection. + :type attributes: GovernanceControlDetectionAttributes + + :param id: The unique identifier of the detection. + :type id: str + + :param type: Governance control detection resource type. + :type type: GovernanceControlDetectionResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/governance_control_detection_resource_type.py b/datadog_api_client/v2/model/governance_control_detection_resource_type.py new file mode 100644 index 0000000000..230151e300 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GovernanceControlDetectionResourceType(ModelSimple): + """ + Governance control detection resource type. + + :param value: If omitted defaults to "governance_control_detection". Must be one of ["governance_control_detection"]. + :type value: str + """ + + allowed_values = { + "governance_control_detection", + } + GOVERNANCE_CONTROL_DETECTION: ClassVar["GovernanceControlDetectionResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GovernanceControlDetectionResourceType.GOVERNANCE_CONTROL_DETECTION = GovernanceControlDetectionResourceType("governance_control_detection") diff --git a/datadog_api_client/v2/model/governance_control_detection_response.py b/datadog_api_client/v2/model/governance_control_detection_response.py new file mode 100644 index 0000000000..2399b185e2 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_detection_data import GovernanceControlDetectionData + +class GovernanceControlDetectionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_detection_data import GovernanceControlDetectionData + return { + "data": (GovernanceControlDetectionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GovernanceControlDetectionData, **kwargs): + """ + A single governance control detection. + + :param data: A governance control detection resource. + :type data: GovernanceControlDetectionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_control_detection_state.py b/datadog_api_client/v2/model/governance_control_detection_state.py new file mode 100644 index 0000000000..ca4015be59 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_state.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GovernanceControlDetectionState(ModelSimple): + """ + The current state of the detection. Possible values are `active`, `exception`, `mitigated`, `inactive`, `obsolete`, `resolved_externally`, and `mitigation_in_progress`. + + :param value: Must be one of ["active", "exception", "mitigated", "inactive", "obsolete", "resolved_externally", "mitigation_in_progress"]. + :type value: str + """ + + allowed_values = { + "active", + "exception", + "mitigated", + "inactive", + "obsolete", + "resolved_externally", + "mitigation_in_progress", + } + ACTIVE: ClassVar["GovernanceControlDetectionState"] + EXCEPTION: ClassVar["GovernanceControlDetectionState"] + MITIGATED: ClassVar["GovernanceControlDetectionState"] + INACTIVE: ClassVar["GovernanceControlDetectionState"] + OBSOLETE: ClassVar["GovernanceControlDetectionState"] + RESOLVED_EXTERNALLY: ClassVar["GovernanceControlDetectionState"] + MITIGATION_IN_PROGRESS: ClassVar["GovernanceControlDetectionState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GovernanceControlDetectionState.ACTIVE = GovernanceControlDetectionState("active") +GovernanceControlDetectionState.EXCEPTION = GovernanceControlDetectionState("exception") +GovernanceControlDetectionState.MITIGATED = GovernanceControlDetectionState("mitigated") +GovernanceControlDetectionState.INACTIVE = GovernanceControlDetectionState("inactive") +GovernanceControlDetectionState.OBSOLETE = GovernanceControlDetectionState("obsolete") +GovernanceControlDetectionState.RESOLVED_EXTERNALLY = GovernanceControlDetectionState("resolved_externally") +GovernanceControlDetectionState.MITIGATION_IN_PROGRESS = GovernanceControlDetectionState("mitigation_in_progress") diff --git a/datadog_api_client/v2/model/governance_control_detection_update_attributes.py b/datadog_api_client/v2/model/governance_control_detection_update_attributes.py new file mode 100644 index 0000000000..ae98fc6983 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_update_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_detection_update_state import GovernanceControlDetectionUpdateState + +class GovernanceControlDetectionUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_detection_update_state import GovernanceControlDetectionUpdateState + return { + "assigned_team": (str,), + "assigned_to": (str,), + "mitigate_after": (datetime,), + "state": (GovernanceControlDetectionUpdateState,), + } + attribute_map = { + "assigned_team": "assigned_team", + "assigned_to": "assigned_to", + "mitigate_after": "mitigate_after", + "state": "state", + } + + def __init__(self_, assigned_team: Union[str, UnsetType]=unset, assigned_to: Union[str, UnsetType]=unset, mitigate_after: Union[datetime, UnsetType]=unset, state: Union[GovernanceControlDetectionUpdateState, UnsetType]=unset, **kwargs): + """ + The attributes of a governance control detection that can be updated. Only the attributes present in the request are modified. + + :param assigned_team: The handle of the team the detection is assigned to. Set to an empty string to clear the assignment. + :type assigned_team: str, optional + + :param assigned_to: The UUID of the user the detection is assigned to. Set to an empty string to clear the assignment. + :type assigned_to: str, optional + + :param mitigate_after: The timestamp after which the detection becomes eligible for mitigation. Used to defer mitigation to a later time. + :type mitigate_after: datetime, optional + + :param state: The new state to set for the detection. Set to ``exception`` to acknowledge the detection and exclude it from active counts, or ``active`` to reopen it. + :type state: GovernanceControlDetectionUpdateState, optional + """ + if assigned_team is not unset: + kwargs["assigned_team"] = assigned_team + if assigned_to is not unset: + kwargs["assigned_to"] = assigned_to + if mitigate_after is not unset: + kwargs["mitigate_after"] = mitigate_after + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/governance_control_detection_update_data.py b/datadog_api_client/v2/model/governance_control_detection_update_data.py new file mode 100644 index 0000000000..dcfbf443f3 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_update_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_detection_update_attributes import GovernanceControlDetectionUpdateAttributes + from datadog_api_client.v2.model.governance_control_detection_resource_type import GovernanceControlDetectionResourceType + +class GovernanceControlDetectionUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_detection_update_attributes import GovernanceControlDetectionUpdateAttributes + from datadog_api_client.v2.model.governance_control_detection_resource_type import GovernanceControlDetectionResourceType + return { + "attributes": (GovernanceControlDetectionUpdateAttributes,), + "type": (GovernanceControlDetectionResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: GovernanceControlDetectionResourceType, attributes: Union[GovernanceControlDetectionUpdateAttributes, UnsetType]=unset, **kwargs): + """ + The data of a governance control detection update request. + + :param attributes: The attributes of a governance control detection that can be updated. Only the attributes present in the request are modified. + :type attributes: GovernanceControlDetectionUpdateAttributes, optional + + :param type: Governance control detection resource type. + :type type: GovernanceControlDetectionResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/governance_control_detection_update_request.py b/datadog_api_client/v2/model/governance_control_detection_update_request.py new file mode 100644 index 0000000000..de55783cff --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_detection_update_data import GovernanceControlDetectionUpdateData + +class GovernanceControlDetectionUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_detection_update_data import GovernanceControlDetectionUpdateData + return { + "data": (GovernanceControlDetectionUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GovernanceControlDetectionUpdateData, **kwargs): + """ + A request to update a governance control detection. + + :param data: The data of a governance control detection update request. + :type data: GovernanceControlDetectionUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_control_detection_update_state.py b/datadog_api_client/v2/model/governance_control_detection_update_state.py new file mode 100644 index 0000000000..931072ee9e --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detection_update_state.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GovernanceControlDetectionUpdateState(ModelSimple): + """ + The new state to set for the detection. Set to `exception` to acknowledge the detection and exclude it from active counts, or `active` to reopen it. + + :param value: Must be one of ["exception", "active"]. + :type value: str + """ + + allowed_values = { + "exception", + "active", + } + EXCEPTION: ClassVar["GovernanceControlDetectionUpdateState"] + ACTIVE: ClassVar["GovernanceControlDetectionUpdateState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GovernanceControlDetectionUpdateState.EXCEPTION = GovernanceControlDetectionUpdateState("exception") +GovernanceControlDetectionUpdateState.ACTIVE = GovernanceControlDetectionUpdateState("active") diff --git a/datadog_api_client/v2/model/governance_control_detections_response.py b/datadog_api_client/v2/model/governance_control_detections_response.py new file mode 100644 index 0000000000..dba096f543 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_detections_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_detection_data import GovernanceControlDetectionData + +class GovernanceControlDetectionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_detection_data import GovernanceControlDetectionData + return { + "data": ([GovernanceControlDetectionData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[GovernanceControlDetectionData], **kwargs): + """ + A list of governance control detections. + + :param data: An array of governance control detection resources. + :type data: [GovernanceControlDetectionData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_control_mitigation_definition.py b/datadog_api_client/v2/model/governance_control_mitigation_definition.py new file mode 100644 index 0000000000..95eb45185f --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_mitigation_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_parameter_definition import GovernanceControlParameterDefinition + +class GovernanceControlMitigationDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_parameter_definition import GovernanceControlParameterDefinition + return { + "description": (str,), + "execution_modes": ([str],), + "id": (str,), + "permissions": ([str],), + "supported_parameters": ([GovernanceControlParameterDefinition],), + "title": (str,), + } + attribute_map = { + "description": "description", + "execution_modes": "execution_modes", + "id": "id", + "permissions": "permissions", + "supported_parameters": "supported_parameters", + "title": "title", + } + + def __init__(self_, description: str, execution_modes: List[str], id: str, permissions: List[str], supported_parameters: List[GovernanceControlParameterDefinition], title: str, **kwargs): + """ + The definition of a mitigation available for a control. + + :param description: A human-readable description of the mitigation. + :type description: str + + :param execution_modes: The execution modes the mitigation supports, such as ``manual`` or ``automatic``. + :type execution_modes: [str] + + :param id: The unique identifier of the mitigation. + :type id: str + + :param permissions: The permissions required to apply the mitigation. + :type permissions: [str] + + :param supported_parameters: An array of parameter definitions. + :type supported_parameters: [GovernanceControlParameterDefinition] + + :param title: A short, human-readable name for the mitigation. + :type title: str + """ + super().__init__(kwargs) + + + self_.description = description + self_.execution_modes = execution_modes + self_.id = id + self_.permissions = permissions + self_.supported_parameters = supported_parameters + self_.title = title diff --git a/datadog_api_client/v2/model/governance_control_parameter_definition.py b/datadog_api_client/v2/model/governance_control_parameter_definition.py new file mode 100644 index 0000000000..64e8444dba --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_parameter_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_supported_value import GovernanceControlSupportedValue + +class GovernanceControlParameterDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_supported_value import GovernanceControlSupportedValue + return { + "default_value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "description": (str,), + "display_name": (str,), + "name": (str,), + "required": (bool,), + "supported_values": ([GovernanceControlSupportedValue],), + "type": (str,), + } + attribute_map = { + "default_value": "default_value", + "description": "description", + "display_name": "display_name", + "name": "name", + "required": "required", + "supported_values": "supported_values", + "type": "type", + } + + def __init__(self_, default_value: Any, description: str, display_name: str, name: str, required: bool, supported_values: Union[List[GovernanceControlSupportedValue], none_type], type: str, **kwargs): + """ + The definition of a configurable parameter on a control or mitigation. + + :param default_value: The default value of the parameter. The JSON type depends on the parameter's ``type``. + :type default_value: bool, date, datetime, dict, float, int, list, str, UUID, none_type + + :param description: A human-readable description of the parameter. + :type description: str + + :param display_name: The human-readable name of the parameter. + :type display_name: str + + :param name: The machine-readable name of the parameter. + :type name: str + + :param required: Whether the parameter must be provided. + :type required: bool + + :param supported_values: The supported values for an enumerated parameter. ``null`` when the parameter is not an enumerated type. + :type supported_values: [GovernanceControlSupportedValue], none_type + + :param type: The type of the parameter, such as ``integer`` , ``string`` , ``boolean`` , ``enum`` , or ``pattern_list``. + :type type: str + """ + super().__init__(kwargs) + + + self_.default_value = default_value + self_.description = description + self_.display_name = display_name + self_.name = name + self_.required = required + self_.supported_values = supported_values + self_.type = type diff --git a/datadog_api_client/v2/model/governance_control_parameters_map.py b/datadog_api_client/v2/model/governance_control_parameters_map.py new file mode 100644 index 0000000000..99359e0c52 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_parameters_map.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GovernanceControlParametersMap(ModelNormal): + + def __init__(self_, **kwargs): + """ + A free-form map of parameter names to their configured values. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/governance_control_resource_type.py b/datadog_api_client/v2/model/governance_control_resource_type.py new file mode 100644 index 0000000000..07bcc95840 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GovernanceControlResourceType(ModelSimple): + """ + JSON:API resource type for a governance control. + + :param value: If omitted defaults to "governance_control". Must be one of ["governance_control"]. + :type value: str + """ + + allowed_values = { + "governance_control", + } + GOVERNANCE_CONTROL: ClassVar["GovernanceControlResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GovernanceControlResourceType.GOVERNANCE_CONTROL = GovernanceControlResourceType("governance_control") diff --git a/datadog_api_client/v2/model/governance_control_response.py b/datadog_api_client/v2/model/governance_control_response.py new file mode 100644 index 0000000000..3b911aa00f --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_data import GovernanceControlData + +class GovernanceControlResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_data import GovernanceControlData + return { + "data": (GovernanceControlData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GovernanceControlData, **kwargs): + """ + A single governance control. + + :param data: A governance control resource. + :type data: GovernanceControlData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_control_supported_value.py b/datadog_api_client/v2/model/governance_control_supported_value.py new file mode 100644 index 0000000000..038c536445 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_supported_value.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GovernanceControlSupportedValue(ModelNormal): + @cached_property + def openapi_types(_): + return { + "label": (str,), + "value": (str,), + } + attribute_map = { + "label": "label", + "value": "value", + } + + def __init__(self_, label: str, value: str, **kwargs): + """ + A supported value for an enumerated parameter. + + :param label: The human-readable label for the value. + :type label: str + + :param value: The machine-readable value. + :type value: str + """ + super().__init__(kwargs) + + + self_.label = label + self_.value = value diff --git a/datadog_api_client/v2/model/governance_control_update_attributes.py b/datadog_api_client/v2/model/governance_control_update_attributes.py new file mode 100644 index 0000000000..79fa6109c6 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_update_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_parameters_map import GovernanceControlParametersMap + +class GovernanceControlUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_parameters_map import GovernanceControlParametersMap + return { + "detection_parameters": (GovernanceControlParametersMap,), + "mitigation_parameters": (GovernanceControlParametersMap,), + "mitigation_type": (str,), + } + attribute_map = { + "detection_parameters": "detection_parameters", + "mitigation_parameters": "mitigation_parameters", + "mitigation_type": "mitigation_type", + } + + def __init__(self_, detection_parameters: Union[GovernanceControlParametersMap, UnsetType]=unset, mitigation_parameters: Union[GovernanceControlParametersMap, UnsetType]=unset, mitigation_type: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a governance control that can be updated. Only the attributes present in the request are modified. + + :param detection_parameters: A free-form map of parameter names to their configured values. + :type detection_parameters: GovernanceControlParametersMap, optional + + :param mitigation_parameters: A free-form map of parameter names to their configured values. + :type mitigation_parameters: GovernanceControlParametersMap, optional + + :param mitigation_type: The mitigation type to configure for the control. + :type mitigation_type: str, optional + """ + if detection_parameters is not unset: + kwargs["detection_parameters"] = detection_parameters + if mitigation_parameters is not unset: + kwargs["mitigation_parameters"] = mitigation_parameters + if mitigation_type is not unset: + kwargs["mitigation_type"] = mitigation_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/governance_control_update_data.py b/datadog_api_client/v2/model/governance_control_update_data.py new file mode 100644 index 0000000000..baca99ad4a --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_update_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_update_attributes import GovernanceControlUpdateAttributes + from datadog_api_client.v2.model.governance_control_resource_type import GovernanceControlResourceType + +class GovernanceControlUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_update_attributes import GovernanceControlUpdateAttributes + from datadog_api_client.v2.model.governance_control_resource_type import GovernanceControlResourceType + return { + "attributes": (GovernanceControlUpdateAttributes,), + "type": (GovernanceControlResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: GovernanceControlResourceType, attributes: Union[GovernanceControlUpdateAttributes, UnsetType]=unset, **kwargs): + """ + The data of a governance control update request. + + :param attributes: The attributes of a governance control that can be updated. Only the attributes present in the request are modified. + :type attributes: GovernanceControlUpdateAttributes, optional + + :param type: JSON:API resource type for a governance control. + :type type: GovernanceControlResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/governance_control_update_request.py b/datadog_api_client/v2/model/governance_control_update_request.py new file mode 100644 index 0000000000..2bd2c17037 --- /dev/null +++ b/datadog_api_client/v2/model/governance_control_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_update_data import GovernanceControlUpdateData + +class GovernanceControlUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_update_data import GovernanceControlUpdateData + return { + "data": (GovernanceControlUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GovernanceControlUpdateData, **kwargs): + """ + A request to update a governance control. + + :param data: The data of a governance control update request. + :type data: GovernanceControlUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_controls_response.py b/datadog_api_client/v2/model/governance_controls_response.py new file mode 100644 index 0000000000..7650fb78a7 --- /dev/null +++ b/datadog_api_client/v2/model/governance_controls_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_data import GovernanceControlData + +class GovernanceControlsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_data import GovernanceControlData + return { + "data": ([GovernanceControlData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[GovernanceControlData], **kwargs): + """ + A list of governance controls. + + :param data: An array of governance control resources. + :type data: [GovernanceControlData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_insight_attributes.py b/datadog_api_client/v2/model/governance_insight_attributes.py new file mode 100644 index 0000000000..b47b2119f7 --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_attributes.py @@ -0,0 +1,132 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_insight_audit_query import GovernanceInsightAuditQuery + from datadog_api_client.v2.model.governance_insight_event_query import GovernanceInsightEventQuery + from datadog_api_client.v2.model.governance_insight_metric_query import GovernanceInsightMetricQuery + from datadog_api_client.v2.model.governance_insight_percentage_query import GovernanceInsightPercentageQuery + from datadog_api_client.v2.model.governance_insight_query_config import GovernanceInsightQueryConfig + from datadog_api_client.v2.model.governance_insight_usage_query import GovernanceInsightUsageQuery + +class GovernanceInsightAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_insight_audit_query import GovernanceInsightAuditQuery + from datadog_api_client.v2.model.governance_insight_event_query import GovernanceInsightEventQuery + from datadog_api_client.v2.model.governance_insight_metric_query import GovernanceInsightMetricQuery + from datadog_api_client.v2.model.governance_insight_percentage_query import GovernanceInsightPercentageQuery + from datadog_api_client.v2.model.governance_insight_query_config import GovernanceInsightQueryConfig + from datadog_api_client.v2.model.governance_insight_usage_query import GovernanceInsightUsageQuery + return { + "audit_query": (GovernanceInsightAuditQuery,), + "description": (str,), + "display_name": (str,), + "event_query": (GovernanceInsightEventQuery,), + "metric_query": (GovernanceInsightMetricQuery,), + "percentage_query": (GovernanceInsightPercentageQuery,), + "product": (str,), + "query_config": (GovernanceInsightQueryConfig,), + "sub_product": (str,), + "time_range": (str,), + "unit_name": (str,), + "usage_query": (GovernanceInsightUsageQuery,), + } + attribute_map = { + "audit_query": "audit_query", + "description": "description", + "display_name": "display_name", + "event_query": "event_query", + "metric_query": "metric_query", + "percentage_query": "percentage_query", + "product": "product", + "query_config": "query_config", + "sub_product": "sub_product", + "time_range": "time_range", + "unit_name": "unit_name", + "usage_query": "usage_query", + } + + def __init__(self_, description: str, display_name: str, product: str, sub_product: str, time_range: str, unit_name: str, audit_query: Union[GovernanceInsightAuditQuery, UnsetType]=unset, event_query: Union[GovernanceInsightEventQuery, UnsetType]=unset, metric_query: Union[GovernanceInsightMetricQuery, UnsetType]=unset, percentage_query: Union[GovernanceInsightPercentageQuery, UnsetType]=unset, query_config: Union[GovernanceInsightQueryConfig, UnsetType]=unset, usage_query: Union[GovernanceInsightUsageQuery, UnsetType]=unset, **kwargs): + """ + The attributes of a governance insight. Exactly one of ``metric_query`` , ``event_query`` , + ``usage_query`` , ``audit_query`` , or ``percentage_query`` is populated, depending on the data + source the insight is computed from; the rest are ``null``. + + :param audit_query: An audit log query used to compute an insight value. + :type audit_query: GovernanceInsightAuditQuery, optional + + :param description: A human-readable description of what the insight measures. + :type description: str + + :param display_name: Human-readable name of the insight. + :type display_name: str + + :param event_query: An event query used to compute an insight value. + :type event_query: GovernanceInsightEventQuery, optional + + :param metric_query: A metric query used to compute an insight value. + :type metric_query: GovernanceInsightMetricQuery, optional + + :param percentage_query: A percentage query that computes an insight value as a ratio of two metric queries. + :type percentage_query: GovernanceInsightPercentageQuery, optional + + :param product: The product the insight belongs to. + :type product: str + + :param query_config: Query execution context for running insight queries directly. + :type query_config: GovernanceInsightQueryConfig, optional + + :param sub_product: The sub-product the insight belongs to, if any. + :type sub_product: str + + :param time_range: The time range the insight value is computed over, if applicable. + :type time_range: str + + :param unit_name: The unit that the insight's value is measured in. + :type unit_name: str + + :param usage_query: A usage query used to compute an insight value. + :type usage_query: GovernanceInsightUsageQuery, optional + """ + if audit_query is not unset: + kwargs["audit_query"] = audit_query + if event_query is not unset: + kwargs["event_query"] = event_query + if metric_query is not unset: + kwargs["metric_query"] = metric_query + if percentage_query is not unset: + kwargs["percentage_query"] = percentage_query + if query_config is not unset: + kwargs["query_config"] = query_config + if usage_query is not unset: + kwargs["usage_query"] = usage_query + super().__init__(kwargs) + + + self_.description = description + self_.display_name = display_name + self_.product = product + self_.sub_product = sub_product + self_.time_range = time_range + self_.unit_name = unit_name diff --git a/datadog_api_client/v2/model/governance_insight_audit_compute.py b/datadog_api_client/v2/model/governance_insight_audit_compute.py new file mode 100644 index 0000000000..9b8a5212ce --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_audit_compute.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GovernanceInsightAuditCompute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aggregation": (str,), + "interval": (int,), + "metric": (str,), + "rollup": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + "rollup": "rollup", + } + + def __init__(self_, aggregation: str, interval: int, metric: str, rollup: Union[str, UnsetType]=unset, **kwargs): + """ + The aggregation applied to an audit log query. + + :param aggregation: The aggregation function to apply. + :type aggregation: str + + :param interval: The aggregation time window, in milliseconds. + :type interval: int + + :param metric: The metric or attribute to aggregate. + :type metric: str + + :param rollup: An optional secondary aggregation applied to the audit query result. + :type rollup: str, optional + """ + if rollup is not unset: + kwargs["rollup"] = rollup + super().__init__(kwargs) + + + self_.aggregation = aggregation + self_.interval = interval + self_.metric = metric diff --git a/datadog_api_client/v2/model/governance_insight_audit_query.py b/datadog_api_client/v2/model/governance_insight_audit_query.py new file mode 100644 index 0000000000..1195bb7037 --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_audit_query.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_insight_audit_compute import GovernanceInsightAuditCompute + +class GovernanceInsightAuditQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_insight_audit_compute import GovernanceInsightAuditCompute + return { + "compute": (GovernanceInsightAuditCompute,), + "indexes": ([str],), + "query": (str,), + "source": (str,), + } + attribute_map = { + "compute": "compute", + "indexes": "indexes", + "query": "query", + "source": "source", + } + + def __init__(self_, compute: GovernanceInsightAuditCompute, indexes: List[str], query: str, source: str, **kwargs): + """ + An audit log query used to compute an insight value. + + :param compute: The aggregation applied to an audit log query. + :type compute: GovernanceInsightAuditCompute + + :param indexes: The audit log indexes the query runs against. + :type indexes: [str] + + :param query: The audit log search query string. + :type query: str + + :param source: The data source the query runs against. + :type source: str + """ + super().__init__(kwargs) + + + self_.compute = compute + self_.indexes = indexes + self_.query = query + self_.source = source diff --git a/datadog_api_client/v2/model/governance_insight_data.py b/datadog_api_client/v2/model/governance_insight_data.py new file mode 100644 index 0000000000..c52a4898e7 --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_insight_attributes import GovernanceInsightAttributes + from datadog_api_client.v2.model.governance_insight_resource_type import GovernanceInsightResourceType + +class GovernanceInsightData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_insight_attributes import GovernanceInsightAttributes + from datadog_api_client.v2.model.governance_insight_resource_type import GovernanceInsightResourceType + return { + "attributes": (GovernanceInsightAttributes,), + "id": (str,), + "type": (GovernanceInsightResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GovernanceInsightAttributes, id: str, type: GovernanceInsightResourceType, **kwargs): + """ + A governance insight resource. + + :param attributes: The attributes of a governance insight. Exactly one of ``metric_query`` , ``event_query`` , + ``usage_query`` , ``audit_query`` , or ``percentage_query`` is populated, depending on the data + source the insight is computed from; the rest are ``null``. + :type attributes: GovernanceInsightAttributes + + :param id: The unique identifier of the insight. + :type id: str + + :param type: JSON:API resource type for a governance insight. + :type type: GovernanceInsightResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/governance_insight_directionality.py b/datadog_api_client/v2/model/governance_insight_directionality.py new file mode 100644 index 0000000000..dfa3d4e8de --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_directionality.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GovernanceInsightDirectionality(ModelSimple): + """ + Whether an increase in the insight's value is good, bad, or neutral. + + :param value: Must be one of ["neutral", "increase_better", "decrease_better"]. + :type value: str + """ + + allowed_values = { + "neutral", + "increase_better", + "decrease_better", + } + NEUTRAL: ClassVar["GovernanceInsightDirectionality"] + INCREASE_BETTER: ClassVar["GovernanceInsightDirectionality"] + DECREASE_BETTER: ClassVar["GovernanceInsightDirectionality"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GovernanceInsightDirectionality.NEUTRAL = GovernanceInsightDirectionality("neutral") +GovernanceInsightDirectionality.INCREASE_BETTER = GovernanceInsightDirectionality("increase_better") +GovernanceInsightDirectionality.DECREASE_BETTER = GovernanceInsightDirectionality("decrease_better") diff --git a/datadog_api_client/v2/model/governance_insight_event_compute.py b/datadog_api_client/v2/model/governance_insight_event_compute.py new file mode 100644 index 0000000000..58574e6662 --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_event_compute.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GovernanceInsightEventCompute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aggregation": (str,), + "interval": (int,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + } + + def __init__(self_, aggregation: str, interval: int, **kwargs): + """ + The aggregation applied to an event query. + + :param aggregation: The aggregation function to apply. + :type aggregation: str + + :param interval: The aggregation time window, in milliseconds. + :type interval: int + """ + super().__init__(kwargs) + + + self_.aggregation = aggregation + self_.interval = interval diff --git a/datadog_api_client/v2/model/governance_insight_event_query.py b/datadog_api_client/v2/model/governance_insight_event_query.py new file mode 100644 index 0000000000..ce10b94a45 --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_event_query.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_insight_event_compute import GovernanceInsightEventCompute + +class GovernanceInsightEventQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_insight_event_compute import GovernanceInsightEventCompute + return { + "compute": (GovernanceInsightEventCompute,), + "indexes": ([str],), + "query": (str,), + } + attribute_map = { + "compute": "compute", + "indexes": "indexes", + "query": "query", + } + + def __init__(self_, indexes: List[str], query: str, compute: Union[GovernanceInsightEventCompute, UnsetType]=unset, **kwargs): + """ + An event query used to compute an insight value. + + :param compute: The aggregation applied to an event query. + :type compute: GovernanceInsightEventCompute, optional + + :param indexes: The event indexes the query runs against. + :type indexes: [str] + + :param query: The event search query string. + :type query: str + """ + if compute is not unset: + kwargs["compute"] = compute + super().__init__(kwargs) + + + self_.indexes = indexes + self_.query = query diff --git a/datadog_api_client/v2/model/governance_insight_metric_query.py b/datadog_api_client/v2/model/governance_insight_metric_query.py new file mode 100644 index 0000000000..4e34771084 --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_metric_query.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GovernanceInsightMetricQuery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + "reducer": (str,), + "source": (str,), + } + attribute_map = { + "query": "query", + "reducer": "reducer", + "source": "source", + } + + def __init__(self_, query: str, reducer: str, source: str, **kwargs): + """ + A metric query used to compute an insight value. + + :param query: The query string. + :type query: str + + :param reducer: How the query result series is reduced to a single value. + :type reducer: str + + :param source: The data source the query runs against. + :type source: str + """ + super().__init__(kwargs) + + + self_.query = query + self_.reducer = reducer + self_.source = source diff --git a/datadog_api_client/v2/model/governance_insight_percentage_query.py b/datadog_api_client/v2/model/governance_insight_percentage_query.py new file mode 100644 index 0000000000..8613770d49 --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_percentage_query.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_insight_metric_query import GovernanceInsightMetricQuery + +class GovernanceInsightPercentageQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_insight_metric_query import GovernanceInsightMetricQuery + return { + "denominator_query": (GovernanceInsightMetricQuery,), + "numerator_query": (GovernanceInsightMetricQuery,), + } + attribute_map = { + "denominator_query": "denominator_query", + "numerator_query": "numerator_query", + } + + def __init__(self_, denominator_query: GovernanceInsightMetricQuery, numerator_query: GovernanceInsightMetricQuery, **kwargs): + """ + A percentage query that computes an insight value as a ratio of two metric queries. + + :param denominator_query: A metric query used to compute an insight value. + :type denominator_query: GovernanceInsightMetricQuery + + :param numerator_query: A metric query used to compute an insight value. + :type numerator_query: GovernanceInsightMetricQuery + """ + super().__init__(kwargs) + + + self_.denominator_query = denominator_query + self_.numerator_query = numerator_query diff --git a/datadog_api_client/v2/model/governance_insight_query_config.py b/datadog_api_client/v2/model/governance_insight_query_config.py new file mode 100644 index 0000000000..4fb174733d --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_query_config.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_insight_directionality import GovernanceInsightDirectionality + +class GovernanceInsightQueryConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_insight_directionality import GovernanceInsightDirectionality + return { + "chart_type": (str,), + "comparison_shift": (str,), + "default_value": (int,), + "directionality": (GovernanceInsightDirectionality,), + "effective_time_window_days": (int,), + } + attribute_map = { + "chart_type": "chart_type", + "comparison_shift": "comparison_shift", + "default_value": "default_value", + "directionality": "directionality", + "effective_time_window_days": "effective_time_window_days", + } + + def __init__(self_, comparison_shift: str, effective_time_window_days: int, chart_type: Union[str, UnsetType]=unset, default_value: Union[int, UnsetType]=unset, directionality: Union[GovernanceInsightDirectionality, UnsetType]=unset, **kwargs): + """ + Query execution context for running insight queries directly. + + :param chart_type: The chart type used to render the insight. + :type chart_type: str, optional + + :param comparison_shift: The window used for the previous value comparison; for example, ``week`` or ``month``. + :type comparison_shift: str + + :param default_value: The default value to display when no data is available. + :type default_value: int, optional + + :param directionality: Whether an increase in the insight's value is good, bad, or neutral. + :type directionality: GovernanceInsightDirectionality, optional + + :param effective_time_window_days: The number of days the insight value is computed over. + :type effective_time_window_days: int + """ + if chart_type is not unset: + kwargs["chart_type"] = chart_type + if default_value is not unset: + kwargs["default_value"] = default_value + if directionality is not unset: + kwargs["directionality"] = directionality + super().__init__(kwargs) + + + self_.comparison_shift = comparison_shift + self_.effective_time_window_days = effective_time_window_days diff --git a/datadog_api_client/v2/model/governance_insight_resource_type.py b/datadog_api_client/v2/model/governance_insight_resource_type.py new file mode 100644 index 0000000000..bbc7664d5e --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GovernanceInsightResourceType(ModelSimple): + """ + JSON:API resource type for a governance insight. + + :param value: If omitted defaults to "insight". Must be one of ["insight"]. + :type value: str + """ + + allowed_values = { + "insight", + } + INSIGHT: ClassVar["GovernanceInsightResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GovernanceInsightResourceType.INSIGHT = GovernanceInsightResourceType("insight") diff --git a/datadog_api_client/v2/model/governance_insight_usage_query.py b/datadog_api_client/v2/model/governance_insight_usage_query.py new file mode 100644 index 0000000000..6b4318fc14 --- /dev/null +++ b/datadog_api_client/v2/model/governance_insight_usage_query.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GovernanceInsightUsageQuery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + "reducer": (str,), + } + attribute_map = { + "query": "query", + "reducer": "reducer", + } + + def __init__(self_, query: str, reducer: str, **kwargs): + """ + A usage query used to compute an insight value. + + :param query: The usage query string. + :type query: str + + :param reducer: How the query result series is reduced to a single value. + :type reducer: str + """ + super().__init__(kwargs) + + + self_.query = query + self_.reducer = reducer diff --git a/datadog_api_client/v2/model/governance_insights_response.py b/datadog_api_client/v2/model/governance_insights_response.py new file mode 100644 index 0000000000..d3820c0a69 --- /dev/null +++ b/datadog_api_client/v2/model/governance_insights_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_insight_data import GovernanceInsightData + +class GovernanceInsightsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_insight_data import GovernanceInsightData + return { + "data": ([GovernanceInsightData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[GovernanceInsightData], **kwargs): + """ + A list of governance insights. + + :param data: An array of governance insight resources. + :type data: [GovernanceInsightData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_mitigation_request.py b/datadog_api_client/v2/model/governance_mitigation_request.py new file mode 100644 index 0000000000..72c421f633 --- /dev/null +++ b/datadog_api_client/v2/model/governance_mitigation_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_mitigation_request_data import GovernanceMitigationRequestData + +class GovernanceMitigationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_mitigation_request_data import GovernanceMitigationRequestData + return { + "data": (GovernanceMitigationRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GovernanceMitigationRequestData, **kwargs): + """ + A request to mitigate a set of governance detections. + + :param data: The data of a governance mitigation request. + :type data: GovernanceMitigationRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_mitigation_request_attributes.py b/datadog_api_client/v2/model/governance_mitigation_request_attributes.py new file mode 100644 index 0000000000..a0a374d14d --- /dev/null +++ b/datadog_api_client/v2/model/governance_mitigation_request_attributes.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_control_parameters_map import GovernanceControlParametersMap + +class GovernanceMitigationRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_control_parameters_map import GovernanceControlParametersMap + return { + "detection_ids": ([str],), + "detection_type": (str,), + "mitigation_parameters": (GovernanceControlParametersMap,), + "mitigation_type": (str,), + } + attribute_map = { + "detection_ids": "detection_ids", + "detection_type": "detection_type", + "mitigation_parameters": "mitigation_parameters", + "mitigation_type": "mitigation_type", + } + + def __init__(self_, detection_ids: List[str], detection_type: str, mitigation_parameters: Union[GovernanceControlParametersMap, UnsetType]=unset, mitigation_type: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a governance mitigation request. + + :param detection_ids: The identifiers of the detections to mitigate in this request. + :type detection_ids: [str] + + :param detection_type: The detection type whose detections should be mitigated. + :type detection_type: str + + :param mitigation_parameters: A free-form map of parameter names to their configured values. + :type mitigation_parameters: GovernanceControlParametersMap, optional + + :param mitigation_type: The mitigation to apply to the selected detections. Defaults to the control's configured mitigation when omitted. + :type mitigation_type: str, optional + """ + if mitigation_parameters is not unset: + kwargs["mitigation_parameters"] = mitigation_parameters + if mitigation_type is not unset: + kwargs["mitigation_type"] = mitigation_type + super().__init__(kwargs) + + + self_.detection_ids = detection_ids + self_.detection_type = detection_type diff --git a/datadog_api_client/v2/model/governance_mitigation_request_data.py b/datadog_api_client/v2/model/governance_mitigation_request_data.py new file mode 100644 index 0000000000..d152d9c0d9 --- /dev/null +++ b/datadog_api_client/v2/model/governance_mitigation_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_mitigation_request_attributes import GovernanceMitigationRequestAttributes + from datadog_api_client.v2.model.governance_control_detection_resource_type import GovernanceControlDetectionResourceType + +class GovernanceMitigationRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_mitigation_request_attributes import GovernanceMitigationRequestAttributes + from datadog_api_client.v2.model.governance_control_detection_resource_type import GovernanceControlDetectionResourceType + return { + "attributes": (GovernanceMitigationRequestAttributes,), + "type": (GovernanceControlDetectionResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: GovernanceControlDetectionResourceType, attributes: Union[GovernanceMitigationRequestAttributes, UnsetType]=unset, **kwargs): + """ + The data of a governance mitigation request. + + :param attributes: The attributes of a governance mitigation request. + :type attributes: GovernanceMitigationRequestAttributes, optional + + :param type: Governance control detection resource type. + :type type: GovernanceControlDetectionResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/governance_notification_settings_attributes.py b/datadog_api_client/v2/model/governance_notification_settings_attributes.py new file mode 100644 index 0000000000..6fa635148b --- /dev/null +++ b/datadog_api_client/v2/model/governance_notification_settings_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GovernanceNotificationSettingsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignment_notifications_enabled": (bool,), + } + attribute_map = { + "assignment_notifications_enabled": "assignment_notifications_enabled", + } + + def __init__(self_, assignment_notifications_enabled: bool, **kwargs): + """ + The attributes of the organization-wide governance notification settings. + + :param assignment_notifications_enabled: Whether notifications are sent to users when detections are assigned to them. + :type assignment_notifications_enabled: bool + """ + super().__init__(kwargs) + + + self_.assignment_notifications_enabled = assignment_notifications_enabled diff --git a/datadog_api_client/v2/model/governance_notification_settings_data.py b/datadog_api_client/v2/model/governance_notification_settings_data.py new file mode 100644 index 0000000000..4393dcd4db --- /dev/null +++ b/datadog_api_client/v2/model/governance_notification_settings_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_notification_settings_attributes import GovernanceNotificationSettingsAttributes + from datadog_api_client.v2.model.governance_notification_settings_resource_type import GovernanceNotificationSettingsResourceType + +class GovernanceNotificationSettingsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_notification_settings_attributes import GovernanceNotificationSettingsAttributes + from datadog_api_client.v2.model.governance_notification_settings_resource_type import GovernanceNotificationSettingsResourceType + return { + "attributes": (GovernanceNotificationSettingsAttributes,), + "id": (str,), + "type": (GovernanceNotificationSettingsResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: GovernanceNotificationSettingsAttributes, id: str, type: GovernanceNotificationSettingsResourceType, **kwargs): + """ + A governance notification settings resource. + + :param attributes: The attributes of the organization-wide governance notification settings. + :type attributes: GovernanceNotificationSettingsAttributes + + :param id: The unique identifier of the organization the notification settings apply to. + :type id: str + + :param type: Governance notification settings resource type. + :type type: GovernanceNotificationSettingsResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/governance_notification_settings_resource_type.py b/datadog_api_client/v2/model/governance_notification_settings_resource_type.py new file mode 100644 index 0000000000..031fef98ac --- /dev/null +++ b/datadog_api_client/v2/model/governance_notification_settings_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GovernanceNotificationSettingsResourceType(ModelSimple): + """ + Governance notification settings resource type. + + :param value: If omitted defaults to "governance_notification_settings". Must be one of ["governance_notification_settings"]. + :type value: str + """ + + allowed_values = { + "governance_notification_settings", + } + GOVERNANCE_NOTIFICATION_SETTINGS: ClassVar["GovernanceNotificationSettingsResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GovernanceNotificationSettingsResourceType.GOVERNANCE_NOTIFICATION_SETTINGS = GovernanceNotificationSettingsResourceType("governance_notification_settings") diff --git a/datadog_api_client/v2/model/governance_notification_settings_response.py b/datadog_api_client/v2/model/governance_notification_settings_response.py new file mode 100644 index 0000000000..4bb033b8cc --- /dev/null +++ b/datadog_api_client/v2/model/governance_notification_settings_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_notification_settings_data import GovernanceNotificationSettingsData + +class GovernanceNotificationSettingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_notification_settings_data import GovernanceNotificationSettingsData + return { + "data": (GovernanceNotificationSettingsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GovernanceNotificationSettingsData, **kwargs): + """ + The organization-wide governance notification settings. + + :param data: A governance notification settings resource. + :type data: GovernanceNotificationSettingsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/governance_notification_settings_update_attributes.py b/datadog_api_client/v2/model/governance_notification_settings_update_attributes.py new file mode 100644 index 0000000000..87061983e8 --- /dev/null +++ b/datadog_api_client/v2/model/governance_notification_settings_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GovernanceNotificationSettingsUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignment_notifications_enabled": (bool,), + } + attribute_map = { + "assignment_notifications_enabled": "assignment_notifications_enabled", + } + + def __init__(self_, assignment_notifications_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + The attributes of the governance notification settings that can be updated. Only the attributes present in the request are modified. + + :param assignment_notifications_enabled: Whether notifications are sent to users when detections are assigned to them. + :type assignment_notifications_enabled: bool, optional + """ + if assignment_notifications_enabled is not unset: + kwargs["assignment_notifications_enabled"] = assignment_notifications_enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/governance_notification_settings_update_data.py b/datadog_api_client/v2/model/governance_notification_settings_update_data.py new file mode 100644 index 0000000000..7b85606fa5 --- /dev/null +++ b/datadog_api_client/v2/model/governance_notification_settings_update_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_notification_settings_update_attributes import GovernanceNotificationSettingsUpdateAttributes + from datadog_api_client.v2.model.governance_notification_settings_resource_type import GovernanceNotificationSettingsResourceType + +class GovernanceNotificationSettingsUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_notification_settings_update_attributes import GovernanceNotificationSettingsUpdateAttributes + from datadog_api_client.v2.model.governance_notification_settings_resource_type import GovernanceNotificationSettingsResourceType + return { + "attributes": (GovernanceNotificationSettingsUpdateAttributes,), + "type": (GovernanceNotificationSettingsResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: GovernanceNotificationSettingsResourceType, attributes: Union[GovernanceNotificationSettingsUpdateAttributes, UnsetType]=unset, **kwargs): + """ + The data of a governance notification settings update request. + + :param attributes: The attributes of the governance notification settings that can be updated. Only the attributes present in the request are modified. + :type attributes: GovernanceNotificationSettingsUpdateAttributes, optional + + :param type: Governance notification settings resource type. + :type type: GovernanceNotificationSettingsResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/governance_notification_settings_update_request.py b/datadog_api_client/v2/model/governance_notification_settings_update_request.py new file mode 100644 index 0000000000..258bb1d319 --- /dev/null +++ b/datadog_api_client/v2/model/governance_notification_settings_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.governance_notification_settings_update_data import GovernanceNotificationSettingsUpdateData + +class GovernanceNotificationSettingsUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.governance_notification_settings_update_data import GovernanceNotificationSettingsUpdateData + return { + "data": (GovernanceNotificationSettingsUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: GovernanceNotificationSettingsUpdateData, **kwargs): + """ + A request to update the organization-wide governance notification settings. + + :param data: The data of a governance notification settings update request. + :type data: GovernanceNotificationSettingsUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/grey_noise_api_key.py b/datadog_api_client/v2/model/grey_noise_api_key.py new file mode 100644 index 0000000000..96f1ad6cdb --- /dev/null +++ b/datadog_api_client/v2/model/grey_noise_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.grey_noise_api_key_type import GreyNoiseAPIKeyType + +class GreyNoiseAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.grey_noise_api_key_type import GreyNoiseAPIKeyType + return { + "api_key": (str,), + "type": (GreyNoiseAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, api_key: str, type: GreyNoiseAPIKeyType, **kwargs): + """ + The definition of the ``GreyNoiseAPIKey`` object. + + :param api_key: The ``GreyNoiseAPIKey`` ``api_key``. + :type api_key: str + + :param type: The definition of the ``GreyNoiseAPIKey`` object. + :type type: GreyNoiseAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_key = api_key + self_.type = type diff --git a/datadog_api_client/v2/model/grey_noise_api_key_type.py b/datadog_api_client/v2/model/grey_noise_api_key_type.py new file mode 100644 index 0000000000..c8f1aec181 --- /dev/null +++ b/datadog_api_client/v2/model/grey_noise_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GreyNoiseAPIKeyType(ModelSimple): + """ + The definition of the `GreyNoiseAPIKey` object. + + :param value: If omitted defaults to "GreyNoiseAPIKey". Must be one of ["GreyNoiseAPIKey"]. + :type value: str + """ + + allowed_values = { + "GreyNoiseAPIKey", + } + GREYNOISEAPIKEY: ClassVar["GreyNoiseAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GreyNoiseAPIKeyType.GREYNOISEAPIKEY = GreyNoiseAPIKeyType("GreyNoiseAPIKey") diff --git a/datadog_api_client/v2/model/grey_noise_api_key_update.py b/datadog_api_client/v2/model/grey_noise_api_key_update.py new file mode 100644 index 0000000000..a553b83898 --- /dev/null +++ b/datadog_api_client/v2/model/grey_noise_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.grey_noise_api_key_type import GreyNoiseAPIKeyType + +class GreyNoiseAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.grey_noise_api_key_type import GreyNoiseAPIKeyType + return { + "api_key": (str,), + "type": (GreyNoiseAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, type: GreyNoiseAPIKeyType, api_key: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``GreyNoiseAPIKey`` object. + + :param api_key: The ``GreyNoiseAPIKeyUpdate`` ``api_key``. + :type api_key: str, optional + + :param type: The definition of the ``GreyNoiseAPIKey`` object. + :type type: GreyNoiseAPIKeyType + """ + if api_key is not unset: + kwargs["api_key"] = api_key + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/grey_noise_credentials.py b/datadog_api_client/v2/model/grey_noise_credentials.py new file mode 100644 index 0000000000..1d3daaf483 --- /dev/null +++ b/datadog_api_client/v2/model/grey_noise_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GreyNoiseCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``GreyNoiseCredentials`` object. + + :param api_key: The `GreyNoiseAPIKey` `api_key`. + :type api_key: str + + :param type: The definition of the `GreyNoiseAPIKey` object. + :type type: GreyNoiseAPIKeyType + """ + 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.grey_noise_api_key import GreyNoiseAPIKey + return { + "oneOf": [ + GreyNoiseAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/grey_noise_credentials_update.py b/datadog_api_client/v2/model/grey_noise_credentials_update.py new file mode 100644 index 0000000000..8b84960022 --- /dev/null +++ b/datadog_api_client/v2/model/grey_noise_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GreyNoiseCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``GreyNoiseCredentialsUpdate`` object. + + :param api_key: The `GreyNoiseAPIKeyUpdate` `api_key`. + :type api_key: str, optional + + :param type: The definition of the `GreyNoiseAPIKey` object. + :type type: GreyNoiseAPIKeyType + """ + 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.grey_noise_api_key_update import GreyNoiseAPIKeyUpdate + return { + "oneOf": [ + GreyNoiseAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/grey_noise_integration.py b/datadog_api_client/v2/model/grey_noise_integration.py new file mode 100644 index 0000000000..c375929de1 --- /dev/null +++ b/datadog_api_client/v2/model/grey_noise_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.grey_noise_credentials import GreyNoiseCredentials + from datadog_api_client.v2.model.grey_noise_integration_type import GreyNoiseIntegrationType + from datadog_api_client.v2.model.grey_noise_api_key import GreyNoiseAPIKey + +class GreyNoiseIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.grey_noise_credentials import GreyNoiseCredentials + from datadog_api_client.v2.model.grey_noise_integration_type import GreyNoiseIntegrationType + return { + "credentials": (GreyNoiseCredentials,), + "type": (GreyNoiseIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[GreyNoiseCredentials, GreyNoiseAPIKey], type: GreyNoiseIntegrationType, **kwargs): + """ + The definition of the ``GreyNoiseIntegration`` object. + + :param credentials: The definition of the ``GreyNoiseCredentials`` object. + :type credentials: GreyNoiseCredentials + + :param type: The definition of the ``GreyNoiseIntegrationType`` object. + :type type: GreyNoiseIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/grey_noise_integration_type.py b/datadog_api_client/v2/model/grey_noise_integration_type.py new file mode 100644 index 0000000000..1ce4331144 --- /dev/null +++ b/datadog_api_client/v2/model/grey_noise_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GreyNoiseIntegrationType(ModelSimple): + """ + The definition of the `GreyNoiseIntegrationType` object. + + :param value: If omitted defaults to "GreyNoise". Must be one of ["GreyNoise"]. + :type value: str + """ + + allowed_values = { + "GreyNoise", + } + GREYNOISE: ClassVar["GreyNoiseIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GreyNoiseIntegrationType.GREYNOISE = GreyNoiseIntegrationType("GreyNoise") diff --git a/datadog_api_client/v2/model/grey_noise_integration_update.py b/datadog_api_client/v2/model/grey_noise_integration_update.py new file mode 100644 index 0000000000..1ed7881fe0 --- /dev/null +++ b/datadog_api_client/v2/model/grey_noise_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.grey_noise_credentials_update import GreyNoiseCredentialsUpdate + from datadog_api_client.v2.model.grey_noise_integration_type import GreyNoiseIntegrationType + from datadog_api_client.v2.model.grey_noise_api_key_update import GreyNoiseAPIKeyUpdate + +class GreyNoiseIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.grey_noise_credentials_update import GreyNoiseCredentialsUpdate + from datadog_api_client.v2.model.grey_noise_integration_type import GreyNoiseIntegrationType + return { + "credentials": (GreyNoiseCredentialsUpdate,), + "type": (GreyNoiseIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: GreyNoiseIntegrationType, credentials: Union[GreyNoiseCredentialsUpdate, GreyNoiseAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``GreyNoiseIntegrationUpdate`` object. + + :param credentials: The definition of the ``GreyNoiseCredentialsUpdate`` object. + :type credentials: GreyNoiseCredentialsUpdate, optional + + :param type: The definition of the ``GreyNoiseIntegrationType`` object. + :type type: GreyNoiseIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/group_scalar_column.py b/datadog_api_client/v2/model/group_scalar_column.py new file mode 100644 index 0000000000..0c5ee99bdc --- /dev/null +++ b/datadog_api_client/v2/model/group_scalar_column.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scalar_column_type_group import ScalarColumnTypeGroup + +class GroupScalarColumn(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scalar_column_type_group import ScalarColumnTypeGroup + return { + "name": (str,), + "type": (ScalarColumnTypeGroup,), + "values": ([[str]],), + } + attribute_map = { + "name": "name", + "type": "type", + "values": "values", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, type: Union[ScalarColumnTypeGroup, UnsetType]=unset, values: Union[List[List[str]], UnsetType]=unset, **kwargs): + """ + A column containing the tag keys and values in a group. + + :param name: The name of the tag key or group. + :type name: str, optional + + :param type: The type of column present for groups. + :type type: ScalarColumnTypeGroup, optional + + :param values: The array of tag values for each group found for the results of the formulas or queries. + :type values: [[str]], optional + """ + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/group_tags.py b/datadog_api_client/v2/model/group_tags.py new file mode 100644 index 0000000000..a39f068a53 --- /dev/null +++ b/datadog_api_client/v2/model/group_tags.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class GroupTags(ModelSimple): + """ + List of tags that apply to a single response value. + + + :type value: [str] + """ + + + + @cached_property + def openapi_types(_): + return { + "value": ([str],), + } diff --git a/datadog_api_client/v2/model/guardrail_metric.py b/datadog_api_client/v2/model/guardrail_metric.py new file mode 100644 index 0000000000..0f0fb368d2 --- /dev/null +++ b/datadog_api_client/v2/model/guardrail_metric.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.guardrail_trigger_action import GuardrailTriggerAction + +class GuardrailMetric(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.guardrail_trigger_action import GuardrailTriggerAction + return { + "metric_id": (str,), + "trigger_action": (GuardrailTriggerAction,), + "triggered_by": (str, none_type), + } + attribute_map = { + "metric_id": "metric_id", + "trigger_action": "trigger_action", + "triggered_by": "triggered_by", + } + + def __init__(self_, metric_id: str, trigger_action: GuardrailTriggerAction, triggered_by: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Guardrail metric details. + + :param metric_id: The metric ID to monitor. + :type metric_id: str + + :param trigger_action: Action to perform when a guardrail threshold is triggered. + :type trigger_action: GuardrailTriggerAction + + :param triggered_by: The signal or system that triggered the action. + :type triggered_by: str, none_type, optional + """ + if triggered_by is not unset: + kwargs["triggered_by"] = triggered_by + super().__init__(kwargs) + + + self_.metric_id = metric_id + self_.trigger_action = trigger_action diff --git a/datadog_api_client/v2/model/guardrail_metric_request.py b/datadog_api_client/v2/model/guardrail_metric_request.py new file mode 100644 index 0000000000..9012667689 --- /dev/null +++ b/datadog_api_client/v2/model/guardrail_metric_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.guardrail_trigger_action import GuardrailTriggerAction + +class GuardrailMetricRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.guardrail_trigger_action import GuardrailTriggerAction + return { + "metric_id": (str,), + "trigger_action": (GuardrailTriggerAction,), + } + attribute_map = { + "metric_id": "metric_id", + "trigger_action": "trigger_action", + } + + def __init__(self_, metric_id: str, trigger_action: GuardrailTriggerAction, **kwargs): + """ + Guardrail metric request payload. + + :param metric_id: The metric ID to monitor. + :type metric_id: str + + :param trigger_action: Action to perform when a guardrail threshold is triggered. + :type trigger_action: GuardrailTriggerAction + """ + super().__init__(kwargs) + + + self_.metric_id = metric_id + self_.trigger_action = trigger_action diff --git a/datadog_api_client/v2/model/guardrail_trigger_action.py b/datadog_api_client/v2/model/guardrail_trigger_action.py new file mode 100644 index 0000000000..dfbc9fca2f --- /dev/null +++ b/datadog_api_client/v2/model/guardrail_trigger_action.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class GuardrailTriggerAction(ModelSimple): + """ + Action to perform when a guardrail threshold is triggered. + + :param value: Must be one of ["PAUSE", "ABORT"]. + :type value: str + """ + + allowed_values = { + "PAUSE", + "ABORT", + } + PAUSE: ClassVar["GuardrailTriggerAction"] + ABORT: ClassVar["GuardrailTriggerAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +GuardrailTriggerAction.PAUSE = GuardrailTriggerAction("PAUSE") +GuardrailTriggerAction.ABORT = GuardrailTriggerAction("ABORT") diff --git a/datadog_api_client/v2/model/hamr_org_connection_attributes_request.py b/datadog_api_client/v2/model/hamr_org_connection_attributes_request.py new file mode 100644 index 0000000000..fc7cac0a9c --- /dev/null +++ b/datadog_api_client/v2/model/hamr_org_connection_attributes_request.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hamr_org_connection_status import HamrOrgConnectionStatus + +class HamrOrgConnectionAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hamr_org_connection_status import HamrOrgConnectionStatus + return { + "hamr_status": (HamrOrgConnectionStatus,), + "is_primary": (bool,), + "modified_by": (str,), + "target_org_datacenter": (str,), + "target_org_name": (str,), + "target_org_uuid": (str,), + } + attribute_map = { + "hamr_status": "hamr_status", + "is_primary": "is_primary", + "modified_by": "modified_by", + "target_org_datacenter": "target_org_datacenter", + "target_org_name": "target_org_name", + "target_org_uuid": "target_org_uuid", + } + + def __init__(self_, hamr_status: HamrOrgConnectionStatus, is_primary: bool, modified_by: str, target_org_datacenter: str, target_org_name: str, target_org_uuid: str, **kwargs): + """ + Attributes for a HAMR organization connection request. + + :param hamr_status: Status of the HAMR connection: + + * 0: UNSPECIFIED - Connection status not specified + * 1: ONBOARDING - Initial setup of HAMR connection + * 2: PASSIVE - Secondary organization in passive standby mode + * 3: FAILOVER - Liminal status between PASSIVE and ACTIVE + * 4: ACTIVE - Organization is an active failover + * 5: RECOVERY - Recovery operation in progress + :type hamr_status: HamrOrgConnectionStatus + + :param is_primary: Indicates whether this organization is the primary organization in the HAMR relationship. + If true, this is the primary organization. If false, this is the secondary/backup organization. + :type is_primary: bool + + :param modified_by: Username or identifier of the user who last modified this HAMR connection. + :type modified_by: str + + :param target_org_datacenter: Datacenter location of the target organization (e.g., us1, eu1, us5). + :type target_org_datacenter: str + + :param target_org_name: Name of the target organization in the HAMR relationship. + :type target_org_name: str + + :param target_org_uuid: UUID of the target organization in the HAMR relationship. + :type target_org_uuid: str + """ + super().__init__(kwargs) + + + self_.hamr_status = hamr_status + self_.is_primary = is_primary + self_.modified_by = modified_by + self_.target_org_datacenter = target_org_datacenter + self_.target_org_name = target_org_name + self_.target_org_uuid = target_org_uuid diff --git a/datadog_api_client/v2/model/hamr_org_connection_attributes_response.py b/datadog_api_client/v2/model/hamr_org_connection_attributes_response.py new file mode 100644 index 0000000000..3737772053 --- /dev/null +++ b/datadog_api_client/v2/model/hamr_org_connection_attributes_response.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hamr_org_connection_status import HamrOrgConnectionStatus + +class HamrOrgConnectionAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hamr_org_connection_status import HamrOrgConnectionStatus + return { + "hamr_status": (HamrOrgConnectionStatus,), + "is_primary": (bool,), + "modified_at": (str,), + "modified_by": (str,), + "target_org_datacenter": (str,), + "target_org_name": (str,), + "target_org_uuid": (str,), + } + attribute_map = { + "hamr_status": "hamr_status", + "is_primary": "is_primary", + "modified_at": "modified_at", + "modified_by": "modified_by", + "target_org_datacenter": "target_org_datacenter", + "target_org_name": "target_org_name", + "target_org_uuid": "target_org_uuid", + } + + def __init__(self_, hamr_status: HamrOrgConnectionStatus, is_primary: bool, modified_at: str, modified_by: str, target_org_datacenter: str, target_org_name: str, target_org_uuid: str, **kwargs): + """ + Attributes of a HAMR organization connection response. + + :param hamr_status: Status of the HAMR connection: + + * 0: UNSPECIFIED - Connection status not specified + * 1: ONBOARDING - Initial setup of HAMR connection + * 2: PASSIVE - Secondary organization in passive standby mode + * 3: FAILOVER - Liminal status between PASSIVE and ACTIVE + * 4: ACTIVE - Organization is an active failover + * 5: RECOVERY - Recovery operation in progress + :type hamr_status: HamrOrgConnectionStatus + + :param is_primary: Indicates whether this organization is the primary organization in the HAMR relationship. + If true, this is the primary organization. If false, this is the secondary/backup organization. + :type is_primary: bool + + :param modified_at: Timestamp of when this HAMR connection was last modified (RFC3339 format). + :type modified_at: str + + :param modified_by: Username or identifier of the user who last modified this HAMR connection. + :type modified_by: str + + :param target_org_datacenter: Datacenter location of the target organization (e.g., us1, eu1, us5). + :type target_org_datacenter: str + + :param target_org_name: Name of the target organization in the HAMR relationship. + :type target_org_name: str + + :param target_org_uuid: UUID of the target organization in the HAMR relationship. + :type target_org_uuid: str + """ + super().__init__(kwargs) + + + self_.hamr_status = hamr_status + self_.is_primary = is_primary + self_.modified_at = modified_at + self_.modified_by = modified_by + self_.target_org_datacenter = target_org_datacenter + self_.target_org_name = target_org_name + self_.target_org_uuid = target_org_uuid diff --git a/datadog_api_client/v2/model/hamr_org_connection_data_request.py b/datadog_api_client/v2/model/hamr_org_connection_data_request.py new file mode 100644 index 0000000000..c47553a71f --- /dev/null +++ b/datadog_api_client/v2/model/hamr_org_connection_data_request.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hamr_org_connection_attributes_request import HamrOrgConnectionAttributesRequest + from datadog_api_client.v2.model.hamr_org_connection_type import HamrOrgConnectionType + +class HamrOrgConnectionDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hamr_org_connection_attributes_request import HamrOrgConnectionAttributesRequest + from datadog_api_client.v2.model.hamr_org_connection_type import HamrOrgConnectionType + return { + "attributes": (HamrOrgConnectionAttributesRequest,), + "id": (str,), + "type": (HamrOrgConnectionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: HamrOrgConnectionAttributesRequest, id: str, type: HamrOrgConnectionType, **kwargs): + """ + Data object for a HAMR organization connection request. + + :param attributes: Attributes for a HAMR organization connection request. + :type attributes: HamrOrgConnectionAttributesRequest + + :param id: The organization UUID for this HAMR connection. Must match the authenticated organization's UUID. + :type id: str + + :param type: Type of the HAMR organization connection resource. + :type type: HamrOrgConnectionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/hamr_org_connection_data_response.py b/datadog_api_client/v2/model/hamr_org_connection_data_response.py new file mode 100644 index 0000000000..efb3e5ed71 --- /dev/null +++ b/datadog_api_client/v2/model/hamr_org_connection_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hamr_org_connection_attributes_response import HamrOrgConnectionAttributesResponse + from datadog_api_client.v2.model.hamr_org_connection_type import HamrOrgConnectionType + +class HamrOrgConnectionDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hamr_org_connection_attributes_response import HamrOrgConnectionAttributesResponse + from datadog_api_client.v2.model.hamr_org_connection_type import HamrOrgConnectionType + return { + "attributes": (HamrOrgConnectionAttributesResponse,), + "id": (str,), + "type": (HamrOrgConnectionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: HamrOrgConnectionAttributesResponse, id: str, type: HamrOrgConnectionType, **kwargs): + """ + Data object for a HAMR organization connection response. + + :param attributes: Attributes of a HAMR organization connection response. + :type attributes: HamrOrgConnectionAttributesResponse + + :param id: The organization UUID for this HAMR connection. + :type id: str + + :param type: Type of the HAMR organization connection resource. + :type type: HamrOrgConnectionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/hamr_org_connection_request.py b/datadog_api_client/v2/model/hamr_org_connection_request.py new file mode 100644 index 0000000000..346140eeb5 --- /dev/null +++ b/datadog_api_client/v2/model/hamr_org_connection_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hamr_org_connection_data_request import HamrOrgConnectionDataRequest + +class HamrOrgConnectionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hamr_org_connection_data_request import HamrOrgConnectionDataRequest + return { + "data": (HamrOrgConnectionDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: HamrOrgConnectionDataRequest, **kwargs): + """ + Request payload for creating or updating a HAMR organization connection. + + :param data: Data object for a HAMR organization connection request. + :type data: HamrOrgConnectionDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/hamr_org_connection_response.py b/datadog_api_client/v2/model/hamr_org_connection_response.py new file mode 100644 index 0000000000..298179bc13 --- /dev/null +++ b/datadog_api_client/v2/model/hamr_org_connection_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hamr_org_connection_data_response import HamrOrgConnectionDataResponse + +class HamrOrgConnectionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hamr_org_connection_data_response import HamrOrgConnectionDataResponse + return { + "data": (HamrOrgConnectionDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: HamrOrgConnectionDataResponse, **kwargs): + """ + Response payload for a HAMR organization connection. + + :param data: Data object for a HAMR organization connection response. + :type data: HamrOrgConnectionDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/hamr_org_connection_status.py b/datadog_api_client/v2/model/hamr_org_connection_status.py new file mode 100644 index 0000000000..84c117e1ba --- /dev/null +++ b/datadog_api_client/v2/model/hamr_org_connection_status.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HamrOrgConnectionStatus(ModelSimple): + """ + Status of the HAMR connection: + - 0: UNSPECIFIED - Connection status not specified + - 1: ONBOARDING - Initial setup of HAMR connection + - 2: PASSIVE - Secondary organization in passive standby mode + - 3: FAILOVER - Liminal status between PASSIVE and ACTIVE + - 4: ACTIVE - Organization is an active failover + - 5: RECOVERY - Recovery operation in progress + + :param value: Must be one of [0, 1, 2, 3, 4, 5]. + :type value: int + """ + + allowed_values = { + 0, + 1, + 2, + 3, + 4, + 5, + } + UNSPECIFIED: ClassVar["HamrOrgConnectionStatus"] + ONBOARDING: ClassVar["HamrOrgConnectionStatus"] + PASSIVE: ClassVar["HamrOrgConnectionStatus"] + FAILOVER: ClassVar["HamrOrgConnectionStatus"] + ACTIVE: ClassVar["HamrOrgConnectionStatus"] + RECOVERY: ClassVar["HamrOrgConnectionStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +HamrOrgConnectionStatus.UNSPECIFIED = HamrOrgConnectionStatus(0) +HamrOrgConnectionStatus.ONBOARDING = HamrOrgConnectionStatus(1) +HamrOrgConnectionStatus.PASSIVE = HamrOrgConnectionStatus(2) +HamrOrgConnectionStatus.FAILOVER = HamrOrgConnectionStatus(3) +HamrOrgConnectionStatus.ACTIVE = HamrOrgConnectionStatus(4) +HamrOrgConnectionStatus.RECOVERY = HamrOrgConnectionStatus(5) diff --git a/datadog_api_client/v2/model/hamr_org_connection_type.py b/datadog_api_client/v2/model/hamr_org_connection_type.py new file mode 100644 index 0000000000..9e39df68f6 --- /dev/null +++ b/datadog_api_client/v2/model/hamr_org_connection_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HamrOrgConnectionType(ModelSimple): + """ + Type of the HAMR organization connection resource. + + :param value: If omitted defaults to "hamr_org_connections". Must be one of ["hamr_org_connections"]. + :type value: str + """ + + allowed_values = { + "hamr_org_connections", + } + HAMR_ORG_CONNECTIONS: ClassVar["HamrOrgConnectionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HamrOrgConnectionType.HAMR_ORG_CONNECTIONS = HamrOrgConnectionType("hamr_org_connections") diff --git a/datadog_api_client/v2/model/historical_job_data_type.py b/datadog_api_client/v2/model/historical_job_data_type.py new file mode 100644 index 0000000000..99cb72aff2 --- /dev/null +++ b/datadog_api_client/v2/model/historical_job_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HistoricalJobDataType(ModelSimple): + """ + Type of payload. + + :param value: If omitted defaults to "historicalDetectionsJob". Must be one of ["historicalDetectionsJob"]. + :type value: str + """ + + allowed_values = { + "historicalDetectionsJob", + } + HISTORICALDETECTIONSJOB: ClassVar["HistoricalJobDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HistoricalJobDataType.HISTORICALDETECTIONSJOB = HistoricalJobDataType("historicalDetectionsJob") diff --git a/datadog_api_client/v2/model/historical_job_list_meta.py b/datadog_api_client/v2/model/historical_job_list_meta.py new file mode 100644 index 0000000000..d520ed22eb --- /dev/null +++ b/datadog_api_client/v2/model/historical_job_list_meta.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HistoricalJobListMeta(ModelNormal): + validations = { + "total_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "totalCount", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata about the list of jobs. + + :param total_count: Number of jobs in the list. + :type total_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/historical_job_options.py b/datadog_api_client/v2/model/historical_job_options.py new file mode 100644 index 0000000000..298e20c6c5 --- /dev/null +++ b/datadog_api_client/v2/model/historical_job_options.py @@ -0,0 +1,124 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options import SecurityMonitoringRuleAnomalyDetectionOptions + from datadog_api_client.v2.model.security_monitoring_rule_detection_method import SecurityMonitoringRuleDetectionMethod + from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import SecurityMonitoringRuleEvaluationWindow + from datadog_api_client.v2.model.security_monitoring_rule_impossible_travel_options import SecurityMonitoringRuleImpossibleTravelOptions + from datadog_api_client.v2.model.security_monitoring_rule_keep_alive import SecurityMonitoringRuleKeepAlive + from datadog_api_client.v2.model.security_monitoring_rule_max_signal_duration import SecurityMonitoringRuleMaxSignalDuration + from datadog_api_client.v2.model.security_monitoring_rule_new_value_options import SecurityMonitoringRuleNewValueOptions + from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_options import SecurityMonitoringRuleSequenceDetectionOptions + from datadog_api_client.v2.model.security_monitoring_rule_third_party_options import SecurityMonitoringRuleThirdPartyOptions + +class HistoricalJobOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options import SecurityMonitoringRuleAnomalyDetectionOptions + from datadog_api_client.v2.model.security_monitoring_rule_detection_method import SecurityMonitoringRuleDetectionMethod + from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import SecurityMonitoringRuleEvaluationWindow + from datadog_api_client.v2.model.security_monitoring_rule_impossible_travel_options import SecurityMonitoringRuleImpossibleTravelOptions + from datadog_api_client.v2.model.security_monitoring_rule_keep_alive import SecurityMonitoringRuleKeepAlive + from datadog_api_client.v2.model.security_monitoring_rule_max_signal_duration import SecurityMonitoringRuleMaxSignalDuration + from datadog_api_client.v2.model.security_monitoring_rule_new_value_options import SecurityMonitoringRuleNewValueOptions + from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_options import SecurityMonitoringRuleSequenceDetectionOptions + from datadog_api_client.v2.model.security_monitoring_rule_third_party_options import SecurityMonitoringRuleThirdPartyOptions + return { + "anomaly_detection_options": (SecurityMonitoringRuleAnomalyDetectionOptions,), + "detection_method": (SecurityMonitoringRuleDetectionMethod,), + "evaluation_window": (SecurityMonitoringRuleEvaluationWindow,), + "impossible_travel_options": (SecurityMonitoringRuleImpossibleTravelOptions,), + "keep_alive": (SecurityMonitoringRuleKeepAlive,), + "max_signal_duration": (SecurityMonitoringRuleMaxSignalDuration,), + "new_value_options": (SecurityMonitoringRuleNewValueOptions,), + "sequence_detection_options": (SecurityMonitoringRuleSequenceDetectionOptions,), + "third_party_rule_options": (SecurityMonitoringRuleThirdPartyOptions,), + } + attribute_map = { + "anomaly_detection_options": "anomalyDetectionOptions", + "detection_method": "detectionMethod", + "evaluation_window": "evaluationWindow", + "impossible_travel_options": "impossibleTravelOptions", + "keep_alive": "keepAlive", + "max_signal_duration": "maxSignalDuration", + "new_value_options": "newValueOptions", + "sequence_detection_options": "sequenceDetectionOptions", + "third_party_rule_options": "thirdPartyRuleOptions", + } + + def __init__(self_, anomaly_detection_options: Union[SecurityMonitoringRuleAnomalyDetectionOptions, UnsetType]=unset, detection_method: Union[SecurityMonitoringRuleDetectionMethod, UnsetType]=unset, evaluation_window: Union[SecurityMonitoringRuleEvaluationWindow, UnsetType]=unset, impossible_travel_options: Union[SecurityMonitoringRuleImpossibleTravelOptions, UnsetType]=unset, keep_alive: Union[SecurityMonitoringRuleKeepAlive, UnsetType]=unset, max_signal_duration: Union[SecurityMonitoringRuleMaxSignalDuration, UnsetType]=unset, new_value_options: Union[SecurityMonitoringRuleNewValueOptions, UnsetType]=unset, sequence_detection_options: Union[SecurityMonitoringRuleSequenceDetectionOptions, UnsetType]=unset, third_party_rule_options: Union[SecurityMonitoringRuleThirdPartyOptions, UnsetType]=unset, **kwargs): + """ + Job options. + + :param anomaly_detection_options: Options on anomaly detection method. + :type anomaly_detection_options: SecurityMonitoringRuleAnomalyDetectionOptions, optional + + :param detection_method: The detection method. + :type detection_method: SecurityMonitoringRuleDetectionMethod, optional + + :param evaluation_window: A time window is specified to match when at least one of the cases matches true. This is a sliding window + and evaluates in real time. For third party detection method, this field is not used. + :type evaluation_window: SecurityMonitoringRuleEvaluationWindow, optional + + :param impossible_travel_options: Options on impossible travel detection method. + :type impossible_travel_options: SecurityMonitoringRuleImpossibleTravelOptions, optional + + :param keep_alive: Once a signal is generated, the signal will remain "open" if a case is matched at least once within + this keep alive window. For third party detection method, this field is not used. + :type keep_alive: SecurityMonitoringRuleKeepAlive, optional + + :param max_signal_duration: A signal will "close" regardless of the query being matched once the time exceeds the maximum duration. + This time is calculated from the first seen timestamp. + :type max_signal_duration: SecurityMonitoringRuleMaxSignalDuration, optional + + :param new_value_options: Options on new value detection method. + :type new_value_options: SecurityMonitoringRuleNewValueOptions, optional + + :param sequence_detection_options: Options on sequence detection method. + :type sequence_detection_options: SecurityMonitoringRuleSequenceDetectionOptions, optional + + :param third_party_rule_options: Options on third party detection method. + :type third_party_rule_options: SecurityMonitoringRuleThirdPartyOptions, optional + """ + if anomaly_detection_options is not unset: + kwargs["anomaly_detection_options"] = anomaly_detection_options + if detection_method is not unset: + kwargs["detection_method"] = detection_method + if evaluation_window is not unset: + kwargs["evaluation_window"] = evaluation_window + if impossible_travel_options is not unset: + kwargs["impossible_travel_options"] = impossible_travel_options + if keep_alive is not unset: + kwargs["keep_alive"] = keep_alive + if max_signal_duration is not unset: + kwargs["max_signal_duration"] = max_signal_duration + if new_value_options is not unset: + kwargs["new_value_options"] = new_value_options + if sequence_detection_options is not unset: + kwargs["sequence_detection_options"] = sequence_detection_options + if third_party_rule_options is not unset: + kwargs["third_party_rule_options"] = third_party_rule_options + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/historical_job_query.py b/datadog_api_client/v2/model/historical_job_query.py new file mode 100644 index 0000000000..85e7e5acb5 --- /dev/null +++ b/datadog_api_client/v2/model/historical_job_query.py @@ -0,0 +1,162 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import SecurityMonitoringRuleQueryAggregation + from datadog_api_client.v2.model.security_monitoring_standard_data_source import SecurityMonitoringStandardDataSource + +class HistoricalJobQuery(ModelNormal): + validations = { + "correlated_query_index": { + "inclusive_maximum": 9, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import SecurityMonitoringRuleQueryAggregation + from datadog_api_client.v2.model.security_monitoring_standard_data_source import SecurityMonitoringStandardDataSource + return { + "additional_filters": (str,), + "aggregation": (SecurityMonitoringRuleQueryAggregation,), + "correlated_by_fields": ([str],), + "correlated_query_index": (int,), + "custom_query_extension": (str,), + "data_source": (SecurityMonitoringStandardDataSource,), + "dataset_ids": ([str],), + "distinct_fields": ([str],), + "group_by_fields": ([str],), + "has_optional_group_by_fields": (bool,), + "index": (str,), + "indexes": ([str],), + "metrics": ([str],), + "name": (str,), + "query": (str,), + "query_language": (str,), + } + attribute_map = { + "additional_filters": "additionalFilters", + "aggregation": "aggregation", + "correlated_by_fields": "correlatedByFields", + "correlated_query_index": "correlatedQueryIndex", + "custom_query_extension": "customQueryExtension", + "data_source": "dataSource", + "dataset_ids": "datasetIds", + "distinct_fields": "distinctFields", + "group_by_fields": "groupByFields", + "has_optional_group_by_fields": "hasOptionalGroupByFields", + "index": "index", + "indexes": "indexes", + "metrics": "metrics", + "name": "name", + "query": "query", + "query_language": "queryLanguage", + } + + def __init__(self_, additional_filters: Union[str, UnsetType]=unset, aggregation: Union[SecurityMonitoringRuleQueryAggregation, UnsetType]=unset, correlated_by_fields: Union[List[str], UnsetType]=unset, correlated_query_index: Union[int, UnsetType]=unset, custom_query_extension: Union[str, UnsetType]=unset, data_source: Union[SecurityMonitoringStandardDataSource, UnsetType]=unset, dataset_ids: Union[List[str], UnsetType]=unset, distinct_fields: Union[List[str], UnsetType]=unset, group_by_fields: Union[List[str], UnsetType]=unset, has_optional_group_by_fields: Union[bool, UnsetType]=unset, index: Union[str, UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, metrics: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, query_language: Union[str, UnsetType]=unset, **kwargs): + """ + Query for selecting logs analyzed by the historical job. + + :param additional_filters: Additional filters appended to the query at evaluation time. + :type additional_filters: str, optional + + :param aggregation: The aggregation type. + :type aggregation: SecurityMonitoringRuleQueryAggregation, optional + + :param correlated_by_fields: Fields used to correlate results across queries in sequence detection rules. + :type correlated_by_fields: [str], optional + + :param correlated_query_index: Zero-based index of the query to correlate with in sequence detection rules. Up to 10 queries are supported, so valid values are 0 to 9. + :type correlated_query_index: int, optional + + :param custom_query_extension: Custom query extension used to refine the base query. + :type custom_query_extension: str, optional + + :param data_source: Source of events, either logs, audit trail, security signals, or Datadog events. ``app_sec_spans`` is deprecated in favor of ``spans``. + :type data_source: SecurityMonitoringStandardDataSource, optional + + :param dataset_ids: IDs of reference datasets used by this query. + :type dataset_ids: [str], optional + + :param distinct_fields: Field for which the cardinality is measured. Sent as an array. + :type distinct_fields: [str], optional + + :param group_by_fields: Fields to group by. + :type group_by_fields: [str], optional + + :param has_optional_group_by_fields: When false, events without a group-by value are ignored by the query. When true, events with missing group-by fields are processed with ``N/A`` , replacing the missing values. + :type has_optional_group_by_fields: bool, optional + + :param index: Index used to load the data for this query. + :type index: str, optional + + :param indexes: Indexes used to load the data for this query. Mutually exclusive with ``index``. + :type indexes: [str], optional + + :param metrics: Group of target fields to aggregate over when using the sum, max, geo data, or new value aggregations. The sum, max, and geo data aggregations only accept one value in this list, whereas the new value aggregation accepts up to five values. + :type metrics: [str], optional + + :param name: Name of the query. + :type name: str, optional + + :param query: Query to run on logs. + :type query: str, optional + + :param query_language: Language used to parse the query string. + :type query_language: str, optional + """ + if additional_filters is not unset: + kwargs["additional_filters"] = additional_filters + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if correlated_by_fields is not unset: + kwargs["correlated_by_fields"] = correlated_by_fields + if correlated_query_index is not unset: + kwargs["correlated_query_index"] = correlated_query_index + if custom_query_extension is not unset: + kwargs["custom_query_extension"] = custom_query_extension + if data_source is not unset: + kwargs["data_source"] = data_source + if dataset_ids is not unset: + kwargs["dataset_ids"] = dataset_ids + if distinct_fields is not unset: + kwargs["distinct_fields"] = distinct_fields + if group_by_fields is not unset: + kwargs["group_by_fields"] = group_by_fields + if has_optional_group_by_fields is not unset: + kwargs["has_optional_group_by_fields"] = has_optional_group_by_fields + if index is not unset: + kwargs["index"] = index + if indexes is not unset: + kwargs["indexes"] = indexes + if metrics is not unset: + kwargs["metrics"] = metrics + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if query_language is not unset: + kwargs["query_language"] = query_language + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/historical_job_response.py b/datadog_api_client/v2/model/historical_job_response.py new file mode 100644 index 0000000000..e5cff33d75 --- /dev/null +++ b/datadog_api_client/v2/model/historical_job_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.historical_job_response_data import HistoricalJobResponseData + +class HistoricalJobResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.historical_job_response_data import HistoricalJobResponseData + return { + "data": (HistoricalJobResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[HistoricalJobResponseData, UnsetType]=unset, **kwargs): + """ + Historical job response. + + :param data: Historical job response data. + :type data: HistoricalJobResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/historical_job_response_attributes.py b/datadog_api_client/v2/model/historical_job_response_attributes.py new file mode 100644 index 0000000000..a2cad01ea0 --- /dev/null +++ b/datadog_api_client/v2/model/historical_job_response_attributes.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.job_definition import JobDefinition + +class HistoricalJobResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.job_definition import JobDefinition + return { + "created_at": (str,), + "created_by_handle": (str,), + "created_by_name": (str,), + "created_from_rule_id": (str,), + "job_definition": (JobDefinition,), + "job_name": (str,), + "job_status": (str,), + "modified_at": (str,), + "progress_rate": (float,), + "signal_output": (bool,), + } + attribute_map = { + "created_at": "createdAt", + "created_by_handle": "createdByHandle", + "created_by_name": "createdByName", + "created_from_rule_id": "createdFromRuleId", + "job_definition": "jobDefinition", + "job_name": "jobName", + "job_status": "jobStatus", + "modified_at": "modifiedAt", + "progress_rate": "progressRate", + "signal_output": "signalOutput", + } + + def __init__(self_, created_at: Union[str, UnsetType]=unset, created_by_handle: Union[str, UnsetType]=unset, created_by_name: Union[str, UnsetType]=unset, created_from_rule_id: Union[str, UnsetType]=unset, job_definition: Union[JobDefinition, UnsetType]=unset, job_name: Union[str, UnsetType]=unset, job_status: Union[str, UnsetType]=unset, modified_at: Union[str, UnsetType]=unset, progress_rate: Union[float, UnsetType]=unset, signal_output: Union[bool, UnsetType]=unset, **kwargs): + """ + Historical job attributes. + + :param created_at: Time when the job was created. + :type created_at: str, optional + + :param created_by_handle: The handle of the user who created the job. + :type created_by_handle: str, optional + + :param created_by_name: The name of the user who created the job. + :type created_by_name: str, optional + + :param created_from_rule_id: ID of the rule used to create the job (if it is created from a rule). + :type created_from_rule_id: str, optional + + :param job_definition: Definition of a historical job. + :type job_definition: JobDefinition, optional + + :param job_name: Job name. + :type job_name: str, optional + + :param job_status: Job status. + :type job_status: str, optional + + :param modified_at: Last modification time of the job. + :type modified_at: str, optional + + :param progress_rate: Job execution progress as a value between 0 and 1. Available for ongoing jobs. + :type progress_rate: float, optional + + :param signal_output: Whether the job outputs signals. + :type signal_output: bool, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by_handle is not unset: + kwargs["created_by_handle"] = created_by_handle + if created_by_name is not unset: + kwargs["created_by_name"] = created_by_name + if created_from_rule_id is not unset: + kwargs["created_from_rule_id"] = created_from_rule_id + if job_definition is not unset: + kwargs["job_definition"] = job_definition + if job_name is not unset: + kwargs["job_name"] = job_name + if job_status is not unset: + kwargs["job_status"] = job_status + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if progress_rate is not unset: + kwargs["progress_rate"] = progress_rate + if signal_output is not unset: + kwargs["signal_output"] = signal_output + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/historical_job_response_data.py b/datadog_api_client/v2/model/historical_job_response_data.py new file mode 100644 index 0000000000..34a04d20d8 --- /dev/null +++ b/datadog_api_client/v2/model/historical_job_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.historical_job_response_attributes import HistoricalJobResponseAttributes + from datadog_api_client.v2.model.historical_job_data_type import HistoricalJobDataType + +class HistoricalJobResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.historical_job_response_attributes import HistoricalJobResponseAttributes + from datadog_api_client.v2.model.historical_job_data_type import HistoricalJobDataType + return { + "attributes": (HistoricalJobResponseAttributes,), + "id": (str,), + "type": (HistoricalJobDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[HistoricalJobResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[HistoricalJobDataType, UnsetType]=unset, **kwargs): + """ + Historical job response data. + + :param attributes: Historical job attributes. + :type attributes: HistoricalJobResponseAttributes, optional + + :param id: ID of the job. + :type id: str, optional + + :param type: Type of payload. + :type type: HistoricalJobDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/historical_metrics_configuration_attributes.py b/datadog_api_client/v2/model/historical_metrics_configuration_attributes.py new file mode 100644 index 0000000000..63c97aaa1d --- /dev/null +++ b/datadog_api_client/v2/model/historical_metrics_configuration_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HistoricalMetricsConfigurationAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + } + attribute_map = { + "created_at": "created_at", + } + read_only_vars = { + "created_at", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a historical metrics configuration. + + :param created_at: Timestamp when historical metrics ingestion was enabled for the metric. + :type created_at: datetime, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/historical_metrics_configuration_create_data.py b/datadog_api_client/v2/model/historical_metrics_configuration_create_data.py new file mode 100644 index 0000000000..1d473aa057 --- /dev/null +++ b/datadog_api_client/v2/model/historical_metrics_configuration_create_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.historical_metrics_configuration_type import HistoricalMetricsConfigurationType + +class HistoricalMetricsConfigurationCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.historical_metrics_configuration_type import HistoricalMetricsConfigurationType + return { + "id": (str,), + "type": (HistoricalMetricsConfigurationType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: HistoricalMetricsConfigurationType, **kwargs): + """ + Data object for enabling historical metrics ingestion for a metric. + + :param id: The metric name, used as the resource ID. + :type id: str + + :param type: The historical metrics configuration resource type. + :type type: HistoricalMetricsConfigurationType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/historical_metrics_configuration_create_request.py b/datadog_api_client/v2/model/historical_metrics_configuration_create_request.py new file mode 100644 index 0000000000..fd56815cf1 --- /dev/null +++ b/datadog_api_client/v2/model/historical_metrics_configuration_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.historical_metrics_configuration_create_data import HistoricalMetricsConfigurationCreateData + +class HistoricalMetricsConfigurationCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.historical_metrics_configuration_create_data import HistoricalMetricsConfigurationCreateData + return { + "data": (HistoricalMetricsConfigurationCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: HistoricalMetricsConfigurationCreateData, **kwargs): + """ + Request body for enabling historical metrics ingestion for a metric. + + :param data: Data object for enabling historical metrics ingestion for a metric. + :type data: HistoricalMetricsConfigurationCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/historical_metrics_configuration_data.py b/datadog_api_client/v2/model/historical_metrics_configuration_data.py new file mode 100644 index 0000000000..37fa24a774 --- /dev/null +++ b/datadog_api_client/v2/model/historical_metrics_configuration_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.historical_metrics_configuration_attributes import HistoricalMetricsConfigurationAttributes + from datadog_api_client.v2.model.historical_metrics_configuration_type import HistoricalMetricsConfigurationType + +class HistoricalMetricsConfigurationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.historical_metrics_configuration_attributes import HistoricalMetricsConfigurationAttributes + from datadog_api_client.v2.model.historical_metrics_configuration_type import HistoricalMetricsConfigurationType + return { + "attributes": (HistoricalMetricsConfigurationAttributes,), + "id": (str,), + "type": (HistoricalMetricsConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[HistoricalMetricsConfigurationAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[HistoricalMetricsConfigurationType, UnsetType]=unset, **kwargs): + """ + A historical metrics configuration resource object. Existence of this resource means historical metrics ingestion is enabled for the metric; there is no separate enabled attribute. + + :param attributes: Attributes of a historical metrics configuration. + :type attributes: HistoricalMetricsConfigurationAttributes, optional + + :param id: The metric name, used as the resource ID. + :type id: str, optional + + :param type: The historical metrics configuration resource type. + :type type: HistoricalMetricsConfigurationType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/historical_metrics_configuration_response.py b/datadog_api_client/v2/model/historical_metrics_configuration_response.py new file mode 100644 index 0000000000..50889b7654 --- /dev/null +++ b/datadog_api_client/v2/model/historical_metrics_configuration_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.historical_metrics_configuration_data import HistoricalMetricsConfigurationData + +class HistoricalMetricsConfigurationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.historical_metrics_configuration_data import HistoricalMetricsConfigurationData + return { + "data": (HistoricalMetricsConfigurationData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[HistoricalMetricsConfigurationData, UnsetType]=unset, **kwargs): + """ + Response containing a historical metrics configuration. + + :param data: A historical metrics configuration resource object. Existence of this resource means historical metrics ingestion is enabled for the metric; there is no separate enabled attribute. + :type data: HistoricalMetricsConfigurationData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/historical_metrics_configuration_type.py b/datadog_api_client/v2/model/historical_metrics_configuration_type.py new file mode 100644 index 0000000000..bade3cdb35 --- /dev/null +++ b/datadog_api_client/v2/model/historical_metrics_configuration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HistoricalMetricsConfigurationType(ModelSimple): + """ + The historical metrics configuration resource type. + + :param value: If omitted defaults to "historical_metrics_configurations". Must be one of ["historical_metrics_configurations"]. + :type value: str + """ + + allowed_values = { + "historical_metrics_configurations", + } + HISTORICAL_METRICS_CONFIGURATIONS: ClassVar["HistoricalMetricsConfigurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HistoricalMetricsConfigurationType.HISTORICAL_METRICS_CONFIGURATIONS = HistoricalMetricsConfigurationType("historical_metrics_configurations") diff --git a/datadog_api_client/v2/model/hourly_usage.py b/datadog_api_client/v2/model/hourly_usage.py new file mode 100644 index 0000000000..e12252ce0c --- /dev/null +++ b/datadog_api_client/v2/model/hourly_usage.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hourly_usage_attributes import HourlyUsageAttributes + from datadog_api_client.v2.model.usage_time_series_type import UsageTimeSeriesType + +class HourlyUsage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hourly_usage_attributes import HourlyUsageAttributes + from datadog_api_client.v2.model.usage_time_series_type import UsageTimeSeriesType + return { + "attributes": (HourlyUsageAttributes,), + "id": (str,), + "type": (UsageTimeSeriesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[HourlyUsageAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[UsageTimeSeriesType, UnsetType]=unset, **kwargs): + """ + Hourly usage for a product family for an org. + + :param attributes: Attributes of hourly usage for a product family for an org for a time period. + :type attributes: HourlyUsageAttributes, optional + + :param id: Unique ID of the response. + :type id: str, optional + + :param type: Type of usage data. + :type type: UsageTimeSeriesType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/hourly_usage_attributes.py b/datadog_api_client/v2/model/hourly_usage_attributes.py new file mode 100644 index 0000000000..9c2116d3a6 --- /dev/null +++ b/datadog_api_client/v2/model/hourly_usage_attributes.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hourly_usage_measurement import HourlyUsageMeasurement + +class HourlyUsageAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hourly_usage_measurement import HourlyUsageMeasurement + return { + "account_name": (str,), + "account_public_id": (str,), + "measurements": ([HourlyUsageMeasurement],), + "org_name": (str,), + "product_family": (str,), + "public_id": (str,), + "region": (str,), + "timestamp": (datetime,), + } + attribute_map = { + "account_name": "account_name", + "account_public_id": "account_public_id", + "measurements": "measurements", + "org_name": "org_name", + "product_family": "product_family", + "public_id": "public_id", + "region": "region", + "timestamp": "timestamp", + } + + def __init__(self_, account_name: Union[str, UnsetType]=unset, account_public_id: Union[str, UnsetType]=unset, measurements: Union[List[HourlyUsageMeasurement], UnsetType]=unset, org_name: Union[str, UnsetType]=unset, product_family: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, timestamp: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of hourly usage for a product family for an org for a time period. + + :param account_name: The account name. + :type account_name: str, optional + + :param account_public_id: The account public ID. + :type account_public_id: str, optional + + :param measurements: List of the measured usage values for the product family for the org for the time period. + :type measurements: [HourlyUsageMeasurement], optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param product_family: The product for which usage is being reported. + :type product_family: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param region: The region of the Datadog instance that the organization belongs to. + :type region: str, optional + + :param timestamp: Datetime in ISO-8601 format, UTC. The hour for the usage. + :type timestamp: datetime, optional + """ + if account_name is not unset: + kwargs["account_name"] = account_name + if account_public_id is not unset: + kwargs["account_public_id"] = account_public_id + if measurements is not unset: + kwargs["measurements"] = measurements + if org_name is not unset: + kwargs["org_name"] = org_name + if product_family is not unset: + kwargs["product_family"] = product_family + if public_id is not unset: + kwargs["public_id"] = public_id + if region is not unset: + kwargs["region"] = region + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/hourly_usage_measurement.py b/datadog_api_client/v2/model/hourly_usage_measurement.py new file mode 100644 index 0000000000..b58c4d161b --- /dev/null +++ b/datadog_api_client/v2/model/hourly_usage_measurement.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HourlyUsageMeasurement(ModelNormal): + @cached_property + def openapi_types(_): + return { + "usage_type": (str,), + "value": (int, none_type), + } + attribute_map = { + "usage_type": "usage_type", + "value": "value", + } + + def __init__(self_, usage_type: Union[str, UnsetType]=unset, value: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Usage amount for a given usage type. + + :param usage_type: Type of usage. + :type usage_type: str, optional + + :param value: Contains the number measured for the given usage_type during the hour. + :type value: int, none_type, optional + """ + if usage_type is not unset: + kwargs["usage_type"] = usage_type + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/hourly_usage_metadata.py b/datadog_api_client/v2/model/hourly_usage_metadata.py new file mode 100644 index 0000000000..b91443c5ca --- /dev/null +++ b/datadog_api_client/v2/model/hourly_usage_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hourly_usage_pagination import HourlyUsagePagination + +class HourlyUsageMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hourly_usage_pagination import HourlyUsagePagination + return { + "pagination": (HourlyUsagePagination,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[HourlyUsagePagination, UnsetType]=unset, **kwargs): + """ + The object containing document metadata. + + :param pagination: The metadata for the current pagination. + :type pagination: HourlyUsagePagination, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/hourly_usage_pagination.py b/datadog_api_client/v2/model/hourly_usage_pagination.py new file mode 100644 index 0000000000..a65d097aa8 --- /dev/null +++ b/datadog_api_client/v2/model/hourly_usage_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HourlyUsagePagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_record_id": (str, none_type), + } + attribute_map = { + "next_record_id": "next_record_id", + } + + def __init__(self_, next_record_id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The metadata for the current pagination. + + :param next_record_id: The cursor to get the next results (if any). To make the next request, use the same parameters and add ``next_record_id``. + :type next_record_id: str, none_type, optional + """ + if next_record_id is not unset: + kwargs["next_record_id"] = next_record_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/hourly_usage_response.py b/datadog_api_client/v2/model/hourly_usage_response.py new file mode 100644 index 0000000000..968626a738 --- /dev/null +++ b/datadog_api_client/v2/model/hourly_usage_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.hourly_usage import HourlyUsage + from datadog_api_client.v2.model.hourly_usage_metadata import HourlyUsageMetadata + +class HourlyUsageResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.hourly_usage import HourlyUsage + from datadog_api_client.v2.model.hourly_usage_metadata import HourlyUsageMetadata + return { + "data": ([HourlyUsage],), + "meta": (HourlyUsageMetadata,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[HourlyUsage], UnsetType]=unset, meta: Union[HourlyUsageMetadata, UnsetType]=unset, **kwargs): + """ + Hourly usage response. + + :param data: Response containing hourly usage. + :type data: [HourlyUsage], optional + + :param meta: The object containing document metadata. + :type meta: HourlyUsageMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/hourly_usage_type.py b/datadog_api_client/v2/model/hourly_usage_type.py new file mode 100644 index 0000000000..f03f6928e5 --- /dev/null +++ b/datadog_api_client/v2/model/hourly_usage_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HourlyUsageType(ModelSimple): + """ + Usage type that is being measured. + + :param value: Must be one of ["app_sec_host_count", "observability_pipelines_bytes_processed", "lambda_traced_invocations_count"]. + :type value: str + """ + + allowed_values = { + "app_sec_host_count", + "observability_pipelines_bytes_processed", + "lambda_traced_invocations_count", + } + APP_SEC_HOST_COUNT: ClassVar["HourlyUsageType"] + OBSERVABILITY_PIPELINES_BYTES_PROCESSSED: ClassVar["HourlyUsageType"] + LAMBDA_TRACED_INVOCATIONS_COUNT: ClassVar["HourlyUsageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HourlyUsageType.APP_SEC_HOST_COUNT = HourlyUsageType("app_sec_host_count") +HourlyUsageType.OBSERVABILITY_PIPELINES_BYTES_PROCESSSED = HourlyUsageType("observability_pipelines_bytes_processed") +HourlyUsageType.LAMBDA_TRACED_INVOCATIONS_COUNT = HourlyUsageType("lambda_traced_invocations_count") diff --git a/datadog_api_client/v2/model/http_body.py b/datadog_api_client/v2/model/http_body.py new file mode 100644 index 0000000000..ef77fa3f84 --- /dev/null +++ b/datadog_api_client/v2/model/http_body.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPBody(ModelNormal): + @cached_property + def openapi_types(_): + return { + "content": (str,), + "content_type": (str,), + } + attribute_map = { + "content": "content", + "content_type": "content_type", + } + + def __init__(self_, content: Union[str, UnsetType]=unset, content_type: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``HTTPBody`` object. + + :param content: Serialized body content + :type content: str, optional + + :param content_type: Content type of the body + :type content_type: str, optional + """ + if content is not unset: + kwargs["content"] = content + if content_type is not unset: + kwargs["content_type"] = content_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/http_credentials.py b/datadog_api_client/v2/model/http_credentials.py new file mode 100644 index 0000000000..8a9e33c5b8 --- /dev/null +++ b/datadog_api_client/v2/model/http_credentials.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of ``HTTPCredentials`` object. + + :param body: The definition of `HTTPBody` object. + :type body: HTTPBody, optional + + :param headers: The `HTTPTokenAuth` `headers`. + :type headers: [HTTPHeader], optional + + :param tokens: The `HTTPTokenAuth` `tokens`. + :type tokens: [HTTPToken], optional + + :param type: The definition of `HTTPTokenAuthType` object. + :type type: HTTPTokenAuthType + + :param url_parameters: The `HTTPTokenAuth` `url_parameters`. + :type url_parameters: [UrlParam], 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.http_token_auth import HTTPTokenAuth + return { + "oneOf": [ + HTTPTokenAuth, + ], + } diff --git a/datadog_api_client/v2/model/http_credentials_update.py b/datadog_api_client/v2/model/http_credentials_update.py new file mode 100644 index 0000000000..91e404b5f6 --- /dev/null +++ b/datadog_api_client/v2/model/http_credentials_update.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of ``HTTPCredentialsUpdate`` object. + + :param body: The definition of `HTTPBody` object. + :type body: HTTPBody, optional + + :param headers: The `HTTPTokenAuthUpdate` `headers`. + :type headers: [HTTPHeaderUpdate], optional + + :param tokens: The `HTTPTokenAuthUpdate` `tokens`. + :type tokens: [HTTPTokenUpdate], optional + + :param type: The definition of `HTTPTokenAuthType` object. + :type type: HTTPTokenAuthType + + :param url_parameters: The `HTTPTokenAuthUpdate` `url_parameters`. + :type url_parameters: [UrlParamUpdate], 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.http_token_auth_update import HTTPTokenAuthUpdate + return { + "oneOf": [ + HTTPTokenAuthUpdate, + ], + } diff --git a/datadog_api_client/v2/model/http_header.py b/datadog_api_client/v2/model/http_header.py new file mode 100644 index 0000000000..70e3f1453b --- /dev/null +++ b/datadog_api_client/v2/model/http_header.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPHeader(ModelNormal): + validations = { + "name": { + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, value: str, **kwargs): + """ + The definition of ``HTTPHeader`` object. + + :param name: The ``HTTPHeader`` ``name``. + :type name: str + + :param value: The ``HTTPHeader`` ``value``. + :type value: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/http_header_update.py b/datadog_api_client/v2/model/http_header_update.py new file mode 100644 index 0000000000..dce7154982 --- /dev/null +++ b/datadog_api_client/v2/model/http_header_update.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPHeaderUpdate(ModelNormal): + validations = { + "name": { + }, + } + @cached_property + def openapi_types(_): + return { + "deleted": (bool,), + "name": (str,), + "value": (str,), + } + attribute_map = { + "deleted": "deleted", + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, deleted: Union[bool, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``HTTPHeaderUpdate`` object. + + :param deleted: Should the header be deleted. + :type deleted: bool, optional + + :param name: The ``HTTPHeaderUpdate`` ``name``. + :type name: str + + :param value: The ``HTTPHeaderUpdate`` ``value``. + :type value: str, optional + """ + if deleted is not unset: + kwargs["deleted"] = deleted + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/http_integration.py b/datadog_api_client/v2/model/http_integration.py new file mode 100644 index 0000000000..f70361e59d --- /dev/null +++ b/datadog_api_client/v2/model/http_integration.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.http_credentials import HTTPCredentials + from datadog_api_client.v2.model.http_integration_type import HTTPIntegrationType + from datadog_api_client.v2.model.http_token_auth import HTTPTokenAuth + +class HTTPIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.http_credentials import HTTPCredentials + from datadog_api_client.v2.model.http_integration_type import HTTPIntegrationType + return { + "base_url": (str,), + "credentials": (HTTPCredentials,), + "type": (HTTPIntegrationType,), + } + attribute_map = { + "base_url": "base_url", + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, base_url: str, credentials: Union[HTTPCredentials, HTTPTokenAuth], type: HTTPIntegrationType, **kwargs): + """ + The definition of ``HTTPIntegration`` object. + + :param base_url: Base HTTP url for the integration + :type base_url: str + + :param credentials: The definition of ``HTTPCredentials`` object. + :type credentials: HTTPCredentials + + :param type: The definition of ``HTTPIntegrationType`` object. + :type type: HTTPIntegrationType + """ + super().__init__(kwargs) + + + self_.base_url = base_url + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/http_integration_type.py b/datadog_api_client/v2/model/http_integration_type.py new file mode 100644 index 0000000000..a7832febae --- /dev/null +++ b/datadog_api_client/v2/model/http_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HTTPIntegrationType(ModelSimple): + """ + The definition of `HTTPIntegrationType` object. + + :param value: If omitted defaults to "HTTP". Must be one of ["HTTP"]. + :type value: str + """ + + allowed_values = { + "HTTP", + } + HTTP: ClassVar["HTTPIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HTTPIntegrationType.HTTP = HTTPIntegrationType("HTTP") diff --git a/datadog_api_client/v2/model/http_integration_update.py b/datadog_api_client/v2/model/http_integration_update.py new file mode 100644 index 0000000000..e1bef45e88 --- /dev/null +++ b/datadog_api_client/v2/model/http_integration_update.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.http_credentials_update import HTTPCredentialsUpdate + from datadog_api_client.v2.model.http_integration_type import HTTPIntegrationType + from datadog_api_client.v2.model.http_token_auth_update import HTTPTokenAuthUpdate + +class HTTPIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.http_credentials_update import HTTPCredentialsUpdate + from datadog_api_client.v2.model.http_integration_type import HTTPIntegrationType + return { + "base_url": (str,), + "credentials": (HTTPCredentialsUpdate,), + "type": (HTTPIntegrationType,), + } + attribute_map = { + "base_url": "base_url", + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: HTTPIntegrationType, base_url: Union[str, UnsetType]=unset, credentials: Union[HTTPCredentialsUpdate, HTTPTokenAuthUpdate, UnsetType]=unset, **kwargs): + """ + The definition of ``HTTPIntegrationUpdate`` object. + + :param base_url: Base HTTP url for the integration + :type base_url: str, optional + + :param credentials: The definition of ``HTTPCredentialsUpdate`` object. + :type credentials: HTTPCredentialsUpdate, optional + + :param type: The definition of ``HTTPIntegrationType`` object. + :type type: HTTPIntegrationType + """ + if base_url is not unset: + kwargs["base_url"] = base_url + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/http_log.py b/datadog_api_client/v2/model/http_log.py new file mode 100644 index 0000000000..0613492037 --- /dev/null +++ b/datadog_api_client/v2/model/http_log.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPLog(ModelSimple): + """ + Structured log message. + + + :type value: [HTTPLogItem] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.http_log_item import HTTPLogItem + return { + "value": ([HTTPLogItem],), + } diff --git a/datadog_api_client/v2/model/http_log_error.py b/datadog_api_client/v2/model/http_log_error.py new file mode 100644 index 0000000000..90eba2b7fb --- /dev/null +++ b/datadog_api_client/v2/model/http_log_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPLogError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "detail": (str,), + "status": (str,), + "title": (str,), + } + attribute_map = { + "detail": "detail", + "status": "status", + "title": "title", + } + + def __init__(self_, detail: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + List of errors. + + :param detail: Error message. + :type detail: str, optional + + :param status: Error code. + :type status: str, optional + + :param title: Error title. + :type title: str, optional + """ + if detail is not unset: + kwargs["detail"] = detail + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/http_log_errors.py b/datadog_api_client/v2/model/http_log_errors.py new file mode 100644 index 0000000000..babe360ff6 --- /dev/null +++ b/datadog_api_client/v2/model/http_log_errors.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.http_log_error import HTTPLogError + +class HTTPLogErrors(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.http_log_error import HTTPLogError + return { + "errors": ([HTTPLogError],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: Union[List[HTTPLogError], UnsetType]=unset, **kwargs): + """ + Invalid query performed. + + :param errors: Structured errors. + :type errors: [HTTPLogError], optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/http_log_item.py b/datadog_api_client/v2/model/http_log_item.py new file mode 100644 index 0000000000..31f4b721a2 --- /dev/null +++ b/datadog_api_client/v2/model/http_log_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPLogItem(ModelNormal): + @cached_property + def additional_properties_type(_): + return (bool, date, datetime, dict, float, int, list, str, UUID, none_type,) + @cached_property + def openapi_types(_): + return { + "ddsource": (str,), + "ddtags": (str,), + "hostname": (str,), + "message": (str,), + "service": (str,), + } + attribute_map = { + "ddsource": "ddsource", + "ddtags": "ddtags", + "hostname": "hostname", + "message": "message", + "service": "service", + } + + def __init__(self_, message: str, ddsource: Union[str, UnsetType]=unset, ddtags: Union[str, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, **kwargs): + """ + Logs that are sent over HTTP. + + :param ddsource: The integration name associated with your log: the technology from which the log originated. + When it matches an integration name, Datadog automatically installs the corresponding parsers and facets. + See `reserved attributes `_. + :type ddsource: str, optional + + :param ddtags: Tags associated with your logs. + :type ddtags: str, optional + + :param hostname: The name of the originating host of the log. + :type hostname: str, optional + + :param message: The message `reserved attribute `_ + of your log. By default, Datadog ingests the value of the message attribute as the body of the log entry. + That value is then highlighted and displayed in the Logstream, where it is indexed for full text search. + :type message: str + + :param service: The name of the application or service generating the log events. + It is used to switch from Logs to APM, so make sure you define the same value when you use both products. + See `reserved attributes `_. + :type service: str, optional + """ + if ddsource is not unset: + kwargs["ddsource"] = ddsource + if ddtags is not unset: + kwargs["ddtags"] = ddtags + if hostname is not unset: + kwargs["hostname"] = hostname + if service is not unset: + kwargs["service"] = service + super().__init__(kwargs) + + + self_.message = message diff --git a/datadog_api_client/v2/model/http_token.py b/datadog_api_client/v2/model/http_token.py new file mode 100644 index 0000000000..8d5e8a5d1d --- /dev/null +++ b/datadog_api_client/v2/model/http_token.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.token_type import TokenType + +class HTTPToken(ModelNormal): + validations = { + "name": { + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.token_type import TokenType + return { + "name": (str,), + "type": (TokenType,), + "value": (str,), + } + attribute_map = { + "name": "name", + "type": "type", + "value": "value", + } + + def __init__(self_, name: str, type: TokenType, value: str, **kwargs): + """ + The definition of ``HTTPToken`` object. + + :param name: The ``HTTPToken`` ``name``. + :type name: str + + :param type: The definition of ``TokenType`` object. + :type type: TokenType + + :param value: The ``HTTPToken`` ``value``. + :type value: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type + self_.value = value diff --git a/datadog_api_client/v2/model/http_token_auth.py b/datadog_api_client/v2/model/http_token_auth.py new file mode 100644 index 0000000000..54b43b79a6 --- /dev/null +++ b/datadog_api_client/v2/model/http_token_auth.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.http_body import HTTPBody + from datadog_api_client.v2.model.http_header import HTTPHeader + from datadog_api_client.v2.model.http_token import HTTPToken + from datadog_api_client.v2.model.http_token_auth_type import HTTPTokenAuthType + from datadog_api_client.v2.model.url_param import UrlParam + +class HTTPTokenAuth(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.http_body import HTTPBody + from datadog_api_client.v2.model.http_header import HTTPHeader + from datadog_api_client.v2.model.http_token import HTTPToken + from datadog_api_client.v2.model.http_token_auth_type import HTTPTokenAuthType + from datadog_api_client.v2.model.url_param import UrlParam + return { + "body": (HTTPBody,), + "headers": ([HTTPHeader],), + "tokens": ([HTTPToken],), + "type": (HTTPTokenAuthType,), + "url_parameters": ([UrlParam],), + } + attribute_map = { + "body": "body", + "headers": "headers", + "tokens": "tokens", + "type": "type", + "url_parameters": "url_parameters", + } + + def __init__(self_, type: HTTPTokenAuthType, body: Union[HTTPBody, UnsetType]=unset, headers: Union[List[HTTPHeader], UnsetType]=unset, tokens: Union[List[HTTPToken], UnsetType]=unset, url_parameters: Union[List[UrlParam], UnsetType]=unset, **kwargs): + """ + The definition of ``HTTPTokenAuth`` object. + + :param body: The definition of ``HTTPBody`` object. + :type body: HTTPBody, optional + + :param headers: The ``HTTPTokenAuth`` ``headers``. + :type headers: [HTTPHeader], optional + + :param tokens: The ``HTTPTokenAuth`` ``tokens``. + :type tokens: [HTTPToken], optional + + :param type: The definition of ``HTTPTokenAuthType`` object. + :type type: HTTPTokenAuthType + + :param url_parameters: The ``HTTPTokenAuth`` ``url_parameters``. + :type url_parameters: [UrlParam], optional + """ + if body is not unset: + kwargs["body"] = body + if headers is not unset: + kwargs["headers"] = headers + if tokens is not unset: + kwargs["tokens"] = tokens + if url_parameters is not unset: + kwargs["url_parameters"] = url_parameters + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/http_token_auth_type.py b/datadog_api_client/v2/model/http_token_auth_type.py new file mode 100644 index 0000000000..f4148e5114 --- /dev/null +++ b/datadog_api_client/v2/model/http_token_auth_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class HTTPTokenAuthType(ModelSimple): + """ + The definition of `HTTPTokenAuthType` object. + + :param value: If omitted defaults to "HTTPTokenAuth". Must be one of ["HTTPTokenAuth"]. + :type value: str + """ + + allowed_values = { + "HTTPTokenAuth", + } + HTTPTOKENAUTH: ClassVar["HTTPTokenAuthType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +HTTPTokenAuthType.HTTPTOKENAUTH = HTTPTokenAuthType("HTTPTokenAuth") diff --git a/datadog_api_client/v2/model/http_token_auth_update.py b/datadog_api_client/v2/model/http_token_auth_update.py new file mode 100644 index 0000000000..05ada9b15d --- /dev/null +++ b/datadog_api_client/v2/model/http_token_auth_update.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.http_body import HTTPBody + from datadog_api_client.v2.model.http_header_update import HTTPHeaderUpdate + from datadog_api_client.v2.model.http_token_update import HTTPTokenUpdate + from datadog_api_client.v2.model.http_token_auth_type import HTTPTokenAuthType + from datadog_api_client.v2.model.url_param_update import UrlParamUpdate + +class HTTPTokenAuthUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.http_body import HTTPBody + from datadog_api_client.v2.model.http_header_update import HTTPHeaderUpdate + from datadog_api_client.v2.model.http_token_update import HTTPTokenUpdate + from datadog_api_client.v2.model.http_token_auth_type import HTTPTokenAuthType + from datadog_api_client.v2.model.url_param_update import UrlParamUpdate + return { + "body": (HTTPBody,), + "headers": ([HTTPHeaderUpdate],), + "tokens": ([HTTPTokenUpdate],), + "type": (HTTPTokenAuthType,), + "url_parameters": ([UrlParamUpdate],), + } + attribute_map = { + "body": "body", + "headers": "headers", + "tokens": "tokens", + "type": "type", + "url_parameters": "url_parameters", + } + + def __init__(self_, type: HTTPTokenAuthType, body: Union[HTTPBody, UnsetType]=unset, headers: Union[List[HTTPHeaderUpdate], UnsetType]=unset, tokens: Union[List[HTTPTokenUpdate], UnsetType]=unset, url_parameters: Union[List[UrlParamUpdate], UnsetType]=unset, **kwargs): + """ + The definition of ``HTTPTokenAuthUpdate`` object. + + :param body: The definition of ``HTTPBody`` object. + :type body: HTTPBody, optional + + :param headers: The ``HTTPTokenAuthUpdate`` ``headers``. + :type headers: [HTTPHeaderUpdate], optional + + :param tokens: The ``HTTPTokenAuthUpdate`` ``tokens``. + :type tokens: [HTTPTokenUpdate], optional + + :param type: The definition of ``HTTPTokenAuthType`` object. + :type type: HTTPTokenAuthType + + :param url_parameters: The ``HTTPTokenAuthUpdate`` ``url_parameters``. + :type url_parameters: [UrlParamUpdate], optional + """ + if body is not unset: + kwargs["body"] = body + if headers is not unset: + kwargs["headers"] = headers + if tokens is not unset: + kwargs["tokens"] = tokens + if url_parameters is not unset: + kwargs["url_parameters"] = url_parameters + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/http_token_update.py b/datadog_api_client/v2/model/http_token_update.py new file mode 100644 index 0000000000..ade0412192 --- /dev/null +++ b/datadog_api_client/v2/model/http_token_update.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.token_type import TokenType + +class HTTPTokenUpdate(ModelNormal): + validations = { + "name": { + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.token_type import TokenType + return { + "deleted": (bool,), + "name": (str,), + "type": (TokenType,), + "value": (str,), + } + attribute_map = { + "deleted": "deleted", + "name": "name", + "type": "type", + "value": "value", + } + + def __init__(self_, name: str, type: TokenType, value: str, deleted: Union[bool, UnsetType]=unset, **kwargs): + """ + The definition of ``HTTPTokenUpdate`` object. + + :param deleted: Should the header be deleted. + :type deleted: bool, optional + + :param name: The ``HTTPToken`` ``name``. + :type name: str + + :param type: The definition of ``TokenType`` object. + :type type: TokenType + + :param value: The ``HTTPToken`` ``value``. + :type value: str + """ + if deleted is not unset: + kwargs["deleted"] = deleted + super().__init__(kwargs) + + + self_.name = name + self_.type = type + self_.value = value diff --git a/datadog_api_client/v2/model/httpcd_gates_bad_request_response.py b/datadog_api_client/v2/model/httpcd_gates_bad_request_response.py new file mode 100644 index 0000000000..85ca7cb558 --- /dev/null +++ b/datadog_api_client/v2/model/httpcd_gates_bad_request_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.httpci_app_error import HTTPCIAppError + +class HTTPCDGatesBadRequestResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.httpci_app_error import HTTPCIAppError + return { + "errors": ([HTTPCIAppError],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: Union[List[HTTPCIAppError], UnsetType]=unset, **kwargs): + """ + Bad request. + + :param errors: Structured errors. + :type errors: [HTTPCIAppError], optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/httpcd_gates_not_found_response.py b/datadog_api_client/v2/model/httpcd_gates_not_found_response.py new file mode 100644 index 0000000000..db4f54d0ea --- /dev/null +++ b/datadog_api_client/v2/model/httpcd_gates_not_found_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.httpci_app_error import HTTPCIAppError + +class HTTPCDGatesNotFoundResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.httpci_app_error import HTTPCIAppError + return { + "errors": ([HTTPCIAppError],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: Union[List[HTTPCIAppError], UnsetType]=unset, **kwargs): + """ + Deployment gate not found. + + :param errors: Structured errors. + :type errors: [HTTPCIAppError], optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/httpcd_rules_not_found_response.py b/datadog_api_client/v2/model/httpcd_rules_not_found_response.py new file mode 100644 index 0000000000..493afcc802 --- /dev/null +++ b/datadog_api_client/v2/model/httpcd_rules_not_found_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.httpci_app_error import HTTPCIAppError + +class HTTPCDRulesNotFoundResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.httpci_app_error import HTTPCIAppError + return { + "errors": ([HTTPCIAppError],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: Union[List[HTTPCIAppError], UnsetType]=unset, **kwargs): + """ + Deployment rule not found. + + :param errors: Structured errors. + :type errors: [HTTPCIAppError], optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/httpci_app_error.py b/datadog_api_client/v2/model/httpci_app_error.py new file mode 100644 index 0000000000..2042aefa24 --- /dev/null +++ b/datadog_api_client/v2/model/httpci_app_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class HTTPCIAppError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "detail": (str,), + "status": (str,), + "title": (str,), + } + attribute_map = { + "detail": "detail", + "status": "status", + "title": "title", + } + + def __init__(self_, detail: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + List of errors. + + :param detail: Error message. + :type detail: str, optional + + :param status: Error code. + :type status: str, optional + + :param title: Error title. + :type title: str, optional + """ + if detail is not unset: + kwargs["detail"] = detail + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/httpci_app_errors.py b/datadog_api_client/v2/model/httpci_app_errors.py new file mode 100644 index 0000000000..daf2b313c5 --- /dev/null +++ b/datadog_api_client/v2/model/httpci_app_errors.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.httpci_app_error import HTTPCIAppError + +class HTTPCIAppErrors(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.httpci_app_error import HTTPCIAppError + return { + "errors": ([HTTPCIAppError],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: Union[List[HTTPCIAppError], UnsetType]=unset, **kwargs): + """ + Errors occurred. + + :param errors: Structured errors. + :type errors: [HTTPCIAppError], optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/identity_provider_attributes.py b/datadog_api_client/v2/model/identity_provider_attributes.py new file mode 100644 index 0000000000..ea9e8b115c --- /dev/null +++ b/datadog_api_client/v2/model/identity_provider_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IdentityProviderAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "authentication_method": (str,), + "enabled": (bool,), + } + attribute_map = { + "authentication_method": "authentication_method", + "enabled": "enabled", + } + + def __init__(self_, authentication_method: str, enabled: bool, **kwargs): + """ + Attributes of an organization identity provider. + + :param authentication_method: The authentication method used by this identity provider. + :type authentication_method: str + + :param enabled: Whether this identity provider is enabled for the organization. + :type enabled: bool + """ + super().__init__(kwargs) + + + self_.authentication_method = authentication_method + self_.enabled = enabled diff --git a/datadog_api_client/v2/model/identity_provider_data.py b/datadog_api_client/v2/model/identity_provider_data.py new file mode 100644 index 0000000000..73e0dc3982 --- /dev/null +++ b/datadog_api_client/v2/model/identity_provider_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.identity_provider_attributes import IdentityProviderAttributes + from datadog_api_client.v2.model.identity_provider_type import IdentityProviderType + +class IdentityProviderData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.identity_provider_attributes import IdentityProviderAttributes + from datadog_api_client.v2.model.identity_provider_type import IdentityProviderType + return { + "attributes": (IdentityProviderAttributes,), + "id": (str,), + "type": (IdentityProviderType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IdentityProviderAttributes, id: str, type: IdentityProviderType, **kwargs): + """ + Data object representing an organization identity provider. + + :param attributes: Attributes of an organization identity provider. + :type attributes: IdentityProviderAttributes + + :param id: The unique identifier of the identity provider. + :type id: str + + :param type: The resource type for identity providers. + :type type: IdentityProviderType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/identity_provider_response.py b/datadog_api_client/v2/model/identity_provider_response.py new file mode 100644 index 0000000000..e46e11e9ac --- /dev/null +++ b/datadog_api_client/v2/model/identity_provider_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.identity_provider_data import IdentityProviderData + +class IdentityProviderResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.identity_provider_data import IdentityProviderData + return { + "data": (IdentityProviderData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IdentityProviderData, **kwargs): + """ + Response containing a single organization identity provider. + + :param data: Data object representing an organization identity provider. + :type data: IdentityProviderData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/identity_provider_type.py b/datadog_api_client/v2/model/identity_provider_type.py new file mode 100644 index 0000000000..16d85913d9 --- /dev/null +++ b/datadog_api_client/v2/model/identity_provider_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IdentityProviderType(ModelSimple): + """ + The resource type for identity providers. + + :param value: If omitted defaults to "identity_providers". Must be one of ["identity_providers"]. + :type value: str + """ + + allowed_values = { + "identity_providers", + } + IDENTITY_PROVIDERS: ClassVar["IdentityProviderType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IdentityProviderType.IDENTITY_PROVIDERS = IdentityProviderType("identity_providers") diff --git a/datadog_api_client/v2/model/identity_provider_update_attributes.py b/datadog_api_client/v2/model/identity_provider_update_attributes.py new file mode 100644 index 0000000000..a5e4c53fe1 --- /dev/null +++ b/datadog_api_client/v2/model/identity_provider_update_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IdentityProviderUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + } + attribute_map = { + "enabled": "enabled", + } + + def __init__(self_, enabled: bool, **kwargs): + """ + Attributes for updating an organization identity provider. + + :param enabled: Whether to enable or disable this identity provider for the organization. + :type enabled: bool + """ + super().__init__(kwargs) + + + self_.enabled = enabled diff --git a/datadog_api_client/v2/model/identity_provider_update_data.py b/datadog_api_client/v2/model/identity_provider_update_data.py new file mode 100644 index 0000000000..369bec27de --- /dev/null +++ b/datadog_api_client/v2/model/identity_provider_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.identity_provider_update_attributes import IdentityProviderUpdateAttributes + from datadog_api_client.v2.model.identity_provider_type import IdentityProviderType + +class IdentityProviderUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.identity_provider_update_attributes import IdentityProviderUpdateAttributes + from datadog_api_client.v2.model.identity_provider_type import IdentityProviderType + return { + "attributes": (IdentityProviderUpdateAttributes,), + "id": (str,), + "type": (IdentityProviderType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IdentityProviderUpdateAttributes, id: str, type: IdentityProviderType, **kwargs): + """ + Data object for updating an organization identity provider. + + :param attributes: Attributes for updating an organization identity provider. + :type attributes: IdentityProviderUpdateAttributes + + :param id: The unique identifier of the identity provider to update. + :type id: str + + :param type: The resource type for identity providers. + :type type: IdentityProviderType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/identity_provider_update_request.py b/datadog_api_client/v2/model/identity_provider_update_request.py new file mode 100644 index 0000000000..fff0b47024 --- /dev/null +++ b/datadog_api_client/v2/model/identity_provider_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.identity_provider_update_data import IdentityProviderUpdateData + +class IdentityProviderUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.identity_provider_update_data import IdentityProviderUpdateData + return { + "data": (IdentityProviderUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IdentityProviderUpdateData, **kwargs): + """ + Request body for updating an organization identity provider. + + :param data: Data object for updating an organization identity provider. + :type data: IdentityProviderUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/identity_providers_response.py b/datadog_api_client/v2/model/identity_providers_response.py new file mode 100644 index 0000000000..a600f6b9b9 --- /dev/null +++ b/datadog_api_client/v2/model/identity_providers_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.identity_provider_data import IdentityProviderData + +class IdentityProvidersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.identity_provider_data import IdentityProviderData + return { + "data": ([IdentityProviderData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[IdentityProviderData], **kwargs): + """ + Response containing a list of identity providers for an organization. + + :param data: List of organization identity provider data objects. + :type data: [IdentityProviderData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/idp_metadata_form_data.py b/datadog_api_client/v2/model/idp_metadata_form_data.py new file mode 100644 index 0000000000..cdd2e093cc --- /dev/null +++ b/datadog_api_client/v2/model/idp_metadata_form_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IdPMetadataFormData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "idp_file": (file_type,), + } + attribute_map = { + "idp_file": "idp_file", + } + + def __init__(self_, idp_file: Union[file_type, UnsetType]=unset, **kwargs): + """ + The form data submitted to upload IdP metadata + + :param idp_file: The IdP metadata XML file + :type idp_file: file_type, optional + """ + if idp_file is not unset: + kwargs["idp_file"] = idp_file + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/il2_cpp_sourcemap_attributes.py b/datadog_api_client/v2/model/il2_cpp_sourcemap_attributes.py new file mode 100644 index 0000000000..e9ae1ddf5f --- /dev/null +++ b/datadog_api_client/v2/model/il2_cpp_sourcemap_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IL2CPPSourcemapAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "build_id": (str,), + "created_at": (datetime,), + "mapkind": (str,), + "size": (int,), + } + attribute_map = { + "build_id": "build_id", + "created_at": "created_at", + "mapkind": "mapkind", + "size": "size", + } + + def __init__(self_, created_at: datetime, mapkind: str, size: int, build_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an IL2CPP mapping file. + + :param build_id: The build identifier (UUID format). + :type build_id: str, optional + + :param created_at: The timestamp when the mapping file was created. + :type created_at: datetime + + :param mapkind: The type of source map. + :type mapkind: str + + :param size: The size of the mapping file in bytes. + :type size: int + """ + if build_id is not unset: + kwargs["build_id"] = build_id + super().__init__(kwargs) + + + self_.created_at = created_at + self_.mapkind = mapkind + self_.size = size diff --git a/datadog_api_client/v2/model/il2_cpp_sourcemap_data.py b/datadog_api_client/v2/model/il2_cpp_sourcemap_data.py new file mode 100644 index 0000000000..8572bf6c4a --- /dev/null +++ b/datadog_api_client/v2/model/il2_cpp_sourcemap_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.il2_cpp_sourcemap_attributes import IL2CPPSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + +class IL2CPPSourcemapData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.il2_cpp_sourcemap_attributes import IL2CPPSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + return { + "attributes": (IL2CPPSourcemapAttributes,), + "id": (str,), + "type": (SourcemapDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IL2CPPSourcemapAttributes, id: str, type: SourcemapDataType, **kwargs): + """ + IL2CPP mapping file data object. + + :param attributes: Attributes of an IL2CPP mapping file. + :type attributes: IL2CPPSourcemapAttributes + + :param id: The unique identifier of the source map. + :type id: str + + :param type: The resource type for source map objects. + :type type: SourcemapDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_ai_postmortem_data_attributes_response.py b/datadog_api_client/v2/model/incident_ai_postmortem_data_attributes_response.py new file mode 100644 index 0000000000..7cd5ecd609 --- /dev/null +++ b/datadog_api_client/v2/model/incident_ai_postmortem_data_attributes_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentAIPostmortemDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "action_items": (str,), + "customer_impact": (str,), + "executive_summary": (str,), + "key_timeline": (str,), + "lessons_learned": (str,), + "system_overview": (str,), + } + attribute_map = { + "action_items": "action_items", + "customer_impact": "customer_impact", + "executive_summary": "executive_summary", + "key_timeline": "key_timeline", + "lessons_learned": "lessons_learned", + "system_overview": "system_overview", + } + + def __init__(self_, action_items: Union[str, UnsetType]=unset, customer_impact: Union[str, UnsetType]=unset, executive_summary: Union[str, UnsetType]=unset, key_timeline: Union[str, UnsetType]=unset, lessons_learned: Union[str, UnsetType]=unset, system_overview: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an AI-generated incident postmortem. + + :param action_items: Action items to prevent recurrence. + :type action_items: str, optional + + :param customer_impact: The impact of the incident on customers. + :type customer_impact: str, optional + + :param executive_summary: An executive summary of the incident. + :type executive_summary: str, optional + + :param key_timeline: Key timeline events during the incident. + :type key_timeline: str, optional + + :param lessons_learned: Lessons learned from the incident. + :type lessons_learned: str, optional + + :param system_overview: An overview of the affected systems. + :type system_overview: str, optional + """ + if action_items is not unset: + kwargs["action_items"] = action_items + if customer_impact is not unset: + kwargs["customer_impact"] = customer_impact + if executive_summary is not unset: + kwargs["executive_summary"] = executive_summary + if key_timeline is not unset: + kwargs["key_timeline"] = key_timeline + if lessons_learned is not unset: + kwargs["lessons_learned"] = lessons_learned + if system_overview is not unset: + kwargs["system_overview"] = system_overview + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_ai_postmortem_data_response.py b/datadog_api_client/v2/model/incident_ai_postmortem_data_response.py new file mode 100644 index 0000000000..907e860cff --- /dev/null +++ b/datadog_api_client/v2/model/incident_ai_postmortem_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_ai_postmortem_data_attributes_response import IncidentAIPostmortemDataAttributesResponse + from datadog_api_client.v2.model.incident_ai_postmortem_response_type import IncidentAIPostmortemResponseType + +class IncidentAIPostmortemDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_ai_postmortem_data_attributes_response import IncidentAIPostmortemDataAttributesResponse + from datadog_api_client.v2.model.incident_ai_postmortem_response_type import IncidentAIPostmortemResponseType + return { + "attributes": (IncidentAIPostmortemDataAttributesResponse,), + "id": (UUID,), + "type": (IncidentAIPostmortemResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IncidentAIPostmortemDataAttributesResponse, id: UUID, type: IncidentAIPostmortemResponseType, **kwargs): + """ + AI postmortem data in a response. + + :param attributes: Attributes of an AI-generated incident postmortem. + :type attributes: IncidentAIPostmortemDataAttributesResponse + + :param id: The incident identifier. + :type id: UUID + + :param type: AI postmortem response resource type. + :type type: IncidentAIPostmortemResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_ai_postmortem_response.py b/datadog_api_client/v2/model/incident_ai_postmortem_response.py new file mode 100644 index 0000000000..89aef53e6d --- /dev/null +++ b/datadog_api_client/v2/model/incident_ai_postmortem_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_ai_postmortem_data_response import IncidentAIPostmortemDataResponse + +class IncidentAIPostmortemResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_ai_postmortem_data_response import IncidentAIPostmortemDataResponse + return { + "data": (IncidentAIPostmortemDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentAIPostmortemDataResponse, **kwargs): + """ + Response with an AI-generated incident postmortem. + + :param data: AI postmortem data in a response. + :type data: IncidentAIPostmortemDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_ai_postmortem_response_type.py b/datadog_api_client/v2/model/incident_ai_postmortem_response_type.py new file mode 100644 index 0000000000..05818c64a1 --- /dev/null +++ b/datadog_api_client/v2/model/incident_ai_postmortem_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentAIPostmortemResponseType(ModelSimple): + """ + AI postmortem response resource type. + + :param value: If omitted defaults to "get_incident_ai_postmortem_response". Must be one of ["get_incident_ai_postmortem_response"]. + :type value: str + """ + + allowed_values = { + "get_incident_ai_postmortem_response", + } + GET_INCIDENT_AI_POSTMORTEM_RESPONSE: ClassVar["IncidentAIPostmortemResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentAIPostmortemResponseType.GET_INCIDENT_AI_POSTMORTEM_RESPONSE = IncidentAIPostmortemResponseType("get_incident_ai_postmortem_response") diff --git a/datadog_api_client/v2/model/incident_attachment_type.py b/datadog_api_client/v2/model/incident_attachment_type.py new file mode 100644 index 0000000000..12b4f862ef --- /dev/null +++ b/datadog_api_client/v2/model/incident_attachment_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentAttachmentType(ModelSimple): + """ + The incident attachment resource type. + + :param value: If omitted defaults to "incident_attachments". Must be one of ["incident_attachments"]. + :type value: str + """ + + allowed_values = { + "incident_attachments", + } + INCIDENT_ATTACHMENTS: ClassVar["IncidentAttachmentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentAttachmentType.INCIDENT_ATTACHMENTS = IncidentAttachmentType("incident_attachments") diff --git a/datadog_api_client/v2/model/incident_configuration_data_attributes_request.py b/datadog_api_client/v2/model/incident_configuration_data_attributes_request.py new file mode 100644 index 0000000000..5b5d645d12 --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_data_attributes_request.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentConfigurationDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "execute_integrations": (bool,), + "execute_notification_rules": (bool,), + "include_in_analytics": (bool,), + "include_in_search": (bool,), + } + attribute_map = { + "execute_integrations": "execute_integrations", + "execute_notification_rules": "execute_notification_rules", + "include_in_analytics": "include_in_analytics", + "include_in_search": "include_in_search", + } + + def __init__(self_, execute_integrations: Union[bool, UnsetType]=unset, execute_notification_rules: Union[bool, UnsetType]=unset, include_in_analytics: Union[bool, UnsetType]=unset, include_in_search: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for creating an incident configuration. + + :param execute_integrations: Whether to execute integrations for this incident. + :type execute_integrations: bool, optional + + :param execute_notification_rules: Whether to execute notification rules for this incident. + :type execute_notification_rules: bool, optional + + :param include_in_analytics: Whether to include this incident in analytics. + :type include_in_analytics: bool, optional + + :param include_in_search: Whether to include this incident in search results. + :type include_in_search: bool, optional + """ + if execute_integrations is not unset: + kwargs["execute_integrations"] = execute_integrations + if execute_notification_rules is not unset: + kwargs["execute_notification_rules"] = execute_notification_rules + if include_in_analytics is not unset: + kwargs["include_in_analytics"] = include_in_analytics + if include_in_search is not unset: + kwargs["include_in_search"] = include_in_search + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_configuration_data_attributes_response.py b/datadog_api_client/v2/model/incident_configuration_data_attributes_response.py new file mode 100644 index 0000000000..70ce0b7ff2 --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_data_attributes_response.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentConfigurationDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "execute_integrations": (bool,), + "execute_notification_rules": (bool,), + "incident_id": (str,), + "include_in_analytics": (bool,), + "include_in_search": (bool,), + "modified_at": (datetime,), + } + attribute_map = { + "created_at": "created_at", + "execute_integrations": "execute_integrations", + "execute_notification_rules": "execute_notification_rules", + "incident_id": "incident_id", + "include_in_analytics": "include_in_analytics", + "include_in_search": "include_in_search", + "modified_at": "modified_at", + } + + def __init__(self_, created_at: datetime, incident_id: str, modified_at: datetime, execute_integrations: Union[bool, UnsetType]=unset, execute_notification_rules: Union[bool, UnsetType]=unset, include_in_analytics: Union[bool, UnsetType]=unset, include_in_search: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes of an incident configuration in a response. + + :param created_at: Timestamp when the configuration was created. + :type created_at: datetime + + :param execute_integrations: Whether integrations are executed for this incident. + :type execute_integrations: bool, optional + + :param execute_notification_rules: Whether notification rules are executed for this incident. + :type execute_notification_rules: bool, optional + + :param incident_id: The incident identifier. + :type incident_id: str + + :param include_in_analytics: Whether this incident is included in analytics. + :type include_in_analytics: bool, optional + + :param include_in_search: Whether this incident is included in search results. + :type include_in_search: bool, optional + + :param modified_at: Timestamp when the configuration was last modified. + :type modified_at: datetime + """ + if execute_integrations is not unset: + kwargs["execute_integrations"] = execute_integrations + if execute_notification_rules is not unset: + kwargs["execute_notification_rules"] = execute_notification_rules + if include_in_analytics is not unset: + kwargs["include_in_analytics"] = include_in_analytics + if include_in_search is not unset: + kwargs["include_in_search"] = include_in_search + super().__init__(kwargs) + + + self_.created_at = created_at + self_.incident_id = incident_id + self_.modified_at = modified_at diff --git a/datadog_api_client/v2/model/incident_configuration_data_request.py b/datadog_api_client/v2/model/incident_configuration_data_request.py new file mode 100644 index 0000000000..f73867edab --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_data_request.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_configuration_data_attributes_request import IncidentConfigurationDataAttributesRequest + from datadog_api_client.v2.model.incident_configuration_type import IncidentConfigurationType + +class IncidentConfigurationDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_configuration_data_attributes_request import IncidentConfigurationDataAttributesRequest + from datadog_api_client.v2.model.incident_configuration_type import IncidentConfigurationType + return { + "attributes": (IncidentConfigurationDataAttributesRequest,), + "type": (IncidentConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: IncidentConfigurationType, attributes: Union[IncidentConfigurationDataAttributesRequest, UnsetType]=unset, **kwargs): + """ + Incident configuration data in a create request. + + :param attributes: Attributes for creating an incident configuration. + :type attributes: IncidentConfigurationDataAttributesRequest, optional + + :param type: Incident configuration resource type. + :type type: IncidentConfigurationType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/incident_configuration_data_response.py b/datadog_api_client/v2/model/incident_configuration_data_response.py new file mode 100644 index 0000000000..c14b83365e --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_configuration_data_attributes_response import IncidentConfigurationDataAttributesResponse + from datadog_api_client.v2.model.incident_configuration_relationships import IncidentConfigurationRelationships + from datadog_api_client.v2.model.incident_configuration_type import IncidentConfigurationType + +class IncidentConfigurationDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_configuration_data_attributes_response import IncidentConfigurationDataAttributesResponse + from datadog_api_client.v2.model.incident_configuration_relationships import IncidentConfigurationRelationships + from datadog_api_client.v2.model.incident_configuration_type import IncidentConfigurationType + return { + "attributes": (IncidentConfigurationDataAttributesResponse,), + "id": (UUID,), + "relationships": (IncidentConfigurationRelationships,), + "type": (IncidentConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentConfigurationDataAttributesResponse, id: UUID, type: IncidentConfigurationType, relationships: Union[IncidentConfigurationRelationships, UnsetType]=unset, **kwargs): + """ + Incident configuration data in a response. + + :param attributes: Attributes of an incident configuration in a response. + :type attributes: IncidentConfigurationDataAttributesResponse + + :param id: The incident configuration identifier. + :type id: UUID + + :param relationships: Relationships for an incident configuration. + :type relationships: IncidentConfigurationRelationships, optional + + :param type: Incident configuration resource type. + :type type: IncidentConfigurationType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_configuration_patch_data_attributes_request.py b/datadog_api_client/v2/model/incident_configuration_patch_data_attributes_request.py new file mode 100644 index 0000000000..7bd47af2ea --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_patch_data_attributes_request.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentConfigurationPatchDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "execute_integrations": (bool,), + "execute_notification_rules": (bool,), + "include_in_analytics": (bool,), + "include_in_search": (bool,), + } + attribute_map = { + "execute_integrations": "execute_integrations", + "execute_notification_rules": "execute_notification_rules", + "include_in_analytics": "include_in_analytics", + "include_in_search": "include_in_search", + } + + def __init__(self_, execute_integrations: Union[bool, UnsetType]=unset, execute_notification_rules: Union[bool, UnsetType]=unset, include_in_analytics: Union[bool, UnsetType]=unset, include_in_search: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for patching an incident configuration. All fields are optional. + + :param execute_integrations: Whether to execute integrations for this incident. + :type execute_integrations: bool, optional + + :param execute_notification_rules: Whether to execute notification rules for this incident. + :type execute_notification_rules: bool, optional + + :param include_in_analytics: Whether to include this incident in analytics. + :type include_in_analytics: bool, optional + + :param include_in_search: Whether to include this incident in search results. + :type include_in_search: bool, optional + """ + if execute_integrations is not unset: + kwargs["execute_integrations"] = execute_integrations + if execute_notification_rules is not unset: + kwargs["execute_notification_rules"] = execute_notification_rules + if include_in_analytics is not unset: + kwargs["include_in_analytics"] = include_in_analytics + if include_in_search is not unset: + kwargs["include_in_search"] = include_in_search + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_configuration_patch_data_request.py b/datadog_api_client/v2/model/incident_configuration_patch_data_request.py new file mode 100644 index 0000000000..a180849359 --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_patch_data_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_configuration_patch_data_attributes_request import IncidentConfigurationPatchDataAttributesRequest + from datadog_api_client.v2.model.incident_configuration_type import IncidentConfigurationType + +class IncidentConfigurationPatchDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_configuration_patch_data_attributes_request import IncidentConfigurationPatchDataAttributesRequest + from datadog_api_client.v2.model.incident_configuration_type import IncidentConfigurationType + return { + "attributes": (IncidentConfigurationPatchDataAttributesRequest,), + "id": (UUID,), + "type": (IncidentConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentConfigurationType, attributes: Union[IncidentConfigurationPatchDataAttributesRequest, UnsetType]=unset, **kwargs): + """ + Incident configuration data in a patch request. + + :param attributes: Attributes for patching an incident configuration. All fields are optional. + :type attributes: IncidentConfigurationPatchDataAttributesRequest, optional + + :param id: The incident configuration identifier. + :type id: UUID + + :param type: Incident configuration resource type. + :type type: IncidentConfigurationType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_configuration_patch_request.py b/datadog_api_client/v2/model/incident_configuration_patch_request.py new file mode 100644 index 0000000000..7de0d42435 --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_configuration_patch_data_request import IncidentConfigurationPatchDataRequest + +class IncidentConfigurationPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_configuration_patch_data_request import IncidentConfigurationPatchDataRequest + return { + "data": (IncidentConfigurationPatchDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentConfigurationPatchDataRequest, **kwargs): + """ + Request payload for patching an incident configuration. + + :param data: Incident configuration data in a patch request. + :type data: IncidentConfigurationPatchDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_configuration_relationships.py b/datadog_api_client/v2/model/incident_configuration_relationships.py new file mode 100644 index 0000000000..23d8022162 --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + +class IncidentConfigurationRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + return { + "created_by_user": (RelationshipToUser,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + Relationships for an incident configuration. + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_configuration_request.py b/datadog_api_client/v2/model/incident_configuration_request.py new file mode 100644 index 0000000000..a10024bbcf --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_configuration_data_request import IncidentConfigurationDataRequest + +class IncidentConfigurationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_configuration_data_request import IncidentConfigurationDataRequest + return { + "data": (IncidentConfigurationDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentConfigurationDataRequest, **kwargs): + """ + Request payload for creating an incident configuration. + + :param data: Incident configuration data in a create request. + :type data: IncidentConfigurationDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_configuration_response.py b/datadog_api_client/v2/model/incident_configuration_response.py new file mode 100644 index 0000000000..93ed675fa6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_configuration_data_response import IncidentConfigurationDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentConfigurationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_configuration_data_response import IncidentConfigurationDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": (IncidentConfigurationDataResponse,), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentConfigurationDataResponse, included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with an incident configuration. + + :param data: Incident configuration data in a response. + :type data: IncidentConfigurationDataResponse + + :param included: Included related resources. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_configuration_type.py b/datadog_api_client/v2/model/incident_configuration_type.py new file mode 100644 index 0000000000..15d2856701 --- /dev/null +++ b/datadog_api_client/v2/model/incident_configuration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentConfigurationType(ModelSimple): + """ + Incident configuration resource type. + + :param value: If omitted defaults to "incidents_configurations". Must be one of ["incidents_configurations"]. + :type value: str + """ + + allowed_values = { + "incidents_configurations", + } + INCIDENTS_CONFIGURATIONS: ClassVar["IncidentConfigurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentConfigurationType.INCIDENTS_CONFIGURATIONS = IncidentConfigurationType("incidents_configurations") diff --git a/datadog_api_client/v2/model/incident_create_attributes.py b/datadog_api_client/v2/model/incident_create_attributes.py new file mode 100644 index 0000000000..6d9a5edbfe --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_attributes.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_field_attributes import IncidentFieldAttributes + from datadog_api_client.v2.model.incident_timeline_cell_create_attributes import IncidentTimelineCellCreateAttributes + from datadog_api_client.v2.model.incident_notification_handle import IncidentNotificationHandle + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + from datadog_api_client.v2.model.incident_timeline_cell_markdown_create_attributes import IncidentTimelineCellMarkdownCreateAttributes + +class IncidentCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_field_attributes import IncidentFieldAttributes + from datadog_api_client.v2.model.incident_timeline_cell_create_attributes import IncidentTimelineCellCreateAttributes + from datadog_api_client.v2.model.incident_notification_handle import IncidentNotificationHandle + return { + "customer_impact_scope": (str,), + "customer_impacted": (bool,), + "fields": ({str: (IncidentFieldAttributes,)},), + "incident_type_uuid": (str,), + "initial_cells": ([IncidentTimelineCellCreateAttributes],), + "is_test": (bool,), + "notification_handles": ([IncidentNotificationHandle],), + "title": (str,), + } + attribute_map = { + "customer_impact_scope": "customer_impact_scope", + "customer_impacted": "customer_impacted", + "fields": "fields", + "incident_type_uuid": "incident_type_uuid", + "initial_cells": "initial_cells", + "is_test": "is_test", + "notification_handles": "notification_handles", + "title": "title", + } + + def __init__(self_, customer_impacted: bool, title: str, customer_impact_scope: Union[str, UnsetType]=unset, fields: Union[Dict[str, Union[IncidentFieldAttributes, IncidentFieldAttributesSingleValue, IncidentFieldAttributesMultipleValue]], UnsetType]=unset, incident_type_uuid: Union[str, UnsetType]=unset, initial_cells: Union[List[Union[IncidentTimelineCellCreateAttributes, IncidentTimelineCellMarkdownCreateAttributes]], UnsetType]=unset, is_test: Union[bool, UnsetType]=unset, notification_handles: Union[List[IncidentNotificationHandle], UnsetType]=unset, **kwargs): + """ + The incident's attributes for a create request. + + :param customer_impact_scope: Required if ``customer_impacted:"true"``. A summary of the impact customers experienced during the incident. + :type customer_impact_scope: str, optional + + :param customer_impacted: A flag indicating whether the incident caused customer impact. + :type customer_impacted: bool + + :param fields: A condensed view of the user-defined fields for which to create initial selections. + :type fields: {str: (IncidentFieldAttributes,)}, optional + + :param incident_type_uuid: A unique identifier that represents an incident type. The default incident type will be used if this property is not provided. + :type incident_type_uuid: str, optional + + :param initial_cells: An array of initial timeline cells to be placed at the beginning of the incident timeline. + :type initial_cells: [IncidentTimelineCellCreateAttributes], optional + + :param is_test: A flag indicating whether the incident is a test incident. + :type is_test: bool, optional + + :param notification_handles: Notification handles that will be notified of the incident at creation. + :type notification_handles: [IncidentNotificationHandle], optional + + :param title: The title of the incident, which summarizes what happened. + :type title: str + """ + if customer_impact_scope is not unset: + kwargs["customer_impact_scope"] = customer_impact_scope + if fields is not unset: + kwargs["fields"] = fields + if incident_type_uuid is not unset: + kwargs["incident_type_uuid"] = incident_type_uuid + if initial_cells is not unset: + kwargs["initial_cells"] = initial_cells + if is_test is not unset: + kwargs["is_test"] = is_test + if notification_handles is not unset: + kwargs["notification_handles"] = notification_handles + super().__init__(kwargs) + + + self_.customer_impacted = customer_impacted + self_.title = title diff --git a/datadog_api_client/v2/model/incident_create_data.py b/datadog_api_client/v2/model/incident_create_data.py new file mode 100644 index 0000000000..8d87537955 --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_create_attributes import IncidentCreateAttributes + from datadog_api_client.v2.model.incident_create_relationships import IncidentCreateRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + from datadog_api_client.v2.model.incident_timeline_cell_markdown_create_attributes import IncidentTimelineCellMarkdownCreateAttributes + +class IncidentCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_create_attributes import IncidentCreateAttributes + from datadog_api_client.v2.model.incident_create_relationships import IncidentCreateRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + return { + "attributes": (IncidentCreateAttributes,), + "relationships": (IncidentCreateRelationships,), + "type": (IncidentType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentCreateAttributes, type: IncidentType, relationships: Union[IncidentCreateRelationships, UnsetType]=unset, **kwargs): + """ + Incident data for a create request. + + :param attributes: The incident's attributes for a create request. + :type attributes: IncidentCreateAttributes + + :param relationships: The relationships the incident will have with other resources once created. + :type relationships: IncidentCreateRelationships, optional + + :param type: Incident resource type. + :type type: IncidentType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_create_on_call_page_data_attributes_request.py b/datadog_api_client/v2/model/incident_create_on_call_page_data_attributes_request.py new file mode 100644 index 0000000000..c3499a3eb5 --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_on_call_page_data_attributes_request.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_page_role_reference import IncidentPageRoleReference + from datadog_api_client.v2.model.incident_page_target import IncidentPageTarget + +class IncidentCreateOnCallPageDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_page_role_reference import IncidentPageRoleReference + from datadog_api_client.v2.model.incident_page_target import IncidentPageTarget + return { + "description": (str,), + "role": (IncidentPageRoleReference,), + "services": ([str],), + "tags": ([str],), + "target": (IncidentPageTarget,), + "title": (str,), + } + attribute_map = { + "description": "description", + "role": "role", + "services": "services", + "tags": "tags", + "target": "target", + "title": "title", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, role: Union[IncidentPageRoleReference, UnsetType]=unset, services: Union[List[str], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, target: Union[IncidentPageTarget, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating an on-call page from an incident. + + :param description: The description of the page. + :type description: str, optional + + :param role: A reference to an incident role for a page. + :type role: IncidentPageRoleReference, optional + + :param services: List of affected services. + :type services: [str], optional + + :param tags: List of tags for the page. + :type tags: [str], optional + + :param target: The target recipient for a page. + :type target: IncidentPageTarget, optional + + :param title: The title of the page. + :type title: str, optional + """ + if description is not unset: + kwargs["description"] = description + if role is not unset: + kwargs["role"] = role + if services is not unset: + kwargs["services"] = services + if tags is not unset: + kwargs["tags"] = tags + if target is not unset: + kwargs["target"] = target + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_create_on_call_page_data_request.py b/datadog_api_client/v2/model/incident_create_on_call_page_data_request.py new file mode 100644 index 0000000000..9bdd270d77 --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_on_call_page_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_create_on_call_page_data_attributes_request import IncidentCreateOnCallPageDataAttributesRequest + from datadog_api_client.v2.model.incident_create_page_from_incident_type import IncidentCreatePageFromIncidentType + +class IncidentCreateOnCallPageDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_create_on_call_page_data_attributes_request import IncidentCreateOnCallPageDataAttributesRequest + from datadog_api_client.v2.model.incident_create_page_from_incident_type import IncidentCreatePageFromIncidentType + return { + "attributes": (IncidentCreateOnCallPageDataAttributesRequest,), + "type": (IncidentCreatePageFromIncidentType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentCreateOnCallPageDataAttributesRequest, type: IncidentCreatePageFromIncidentType, **kwargs): + """ + On-call page data in a create request. + + :param attributes: Attributes for creating an on-call page from an incident. + :type attributes: IncidentCreateOnCallPageDataAttributesRequest + + :param type: Resource type for a page creation request. + :type type: IncidentCreatePageFromIncidentType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_create_on_call_page_request.py b/datadog_api_client/v2/model/incident_create_on_call_page_request.py new file mode 100644 index 0000000000..a6fa4cbb09 --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_on_call_page_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_create_on_call_page_data_request import IncidentCreateOnCallPageDataRequest + +class IncidentCreateOnCallPageRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_create_on_call_page_data_request import IncidentCreateOnCallPageDataRequest + return { + "data": (IncidentCreateOnCallPageDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentCreateOnCallPageDataRequest, **kwargs): + """ + Request payload for creating an on-call page from an incident. + + :param data: On-call page data in a create request. + :type data: IncidentCreateOnCallPageDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_create_page_from_incident_data_attributes_request.py b/datadog_api_client/v2/model/incident_create_page_from_incident_data_attributes_request.py new file mode 100644 index 0000000000..678d2cb602 --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_page_from_incident_data_attributes_request.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_page_role_reference import IncidentPageRoleReference + from datadog_api_client.v2.model.incident_page_target import IncidentPageTarget + +class IncidentCreatePageFromIncidentDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_page_role_reference import IncidentPageRoleReference + from datadog_api_client.v2.model.incident_page_target import IncidentPageTarget + return { + "description": (str,), + "incident_public_id": (str,), + "role": (IncidentPageRoleReference,), + "services": ([str],), + "tags": ([str],), + "target": (IncidentPageTarget,), + "title": (str,), + } + attribute_map = { + "description": "description", + "incident_public_id": "incident_public_id", + "role": "role", + "services": "services", + "tags": "tags", + "target": "target", + "title": "title", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, incident_public_id: Union[str, UnsetType]=unset, role: Union[IncidentPageRoleReference, UnsetType]=unset, services: Union[List[str], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, target: Union[IncidentPageTarget, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating a page from an incident. + + :param description: The description of the page. + :type description: str, optional + + :param incident_public_id: The public ID of the incident. + :type incident_public_id: str, optional + + :param role: A reference to an incident role for a page. + :type role: IncidentPageRoleReference, optional + + :param services: List of affected services. + :type services: [str], optional + + :param tags: List of tags for the page. + :type tags: [str], optional + + :param target: The target recipient for a page. + :type target: IncidentPageTarget, optional + + :param title: The title of the page. + :type title: str, optional + """ + if description is not unset: + kwargs["description"] = description + if incident_public_id is not unset: + kwargs["incident_public_id"] = incident_public_id + if role is not unset: + kwargs["role"] = role + if services is not unset: + kwargs["services"] = services + if tags is not unset: + kwargs["tags"] = tags + if target is not unset: + kwargs["target"] = target + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_create_page_from_incident_data_request.py b/datadog_api_client/v2/model/incident_create_page_from_incident_data_request.py new file mode 100644 index 0000000000..f82e4f8bac --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_page_from_incident_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_create_page_from_incident_data_attributes_request import IncidentCreatePageFromIncidentDataAttributesRequest + from datadog_api_client.v2.model.incident_create_page_from_incident_type import IncidentCreatePageFromIncidentType + +class IncidentCreatePageFromIncidentDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_create_page_from_incident_data_attributes_request import IncidentCreatePageFromIncidentDataAttributesRequest + from datadog_api_client.v2.model.incident_create_page_from_incident_type import IncidentCreatePageFromIncidentType + return { + "attributes": (IncidentCreatePageFromIncidentDataAttributesRequest,), + "type": (IncidentCreatePageFromIncidentType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentCreatePageFromIncidentDataAttributesRequest, type: IncidentCreatePageFromIncidentType, **kwargs): + """ + Page data in a create request. + + :param attributes: Attributes for creating a page from an incident. + :type attributes: IncidentCreatePageFromIncidentDataAttributesRequest + + :param type: Resource type for a page creation request. + :type type: IncidentCreatePageFromIncidentType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_create_page_from_incident_request.py b/datadog_api_client/v2/model/incident_create_page_from_incident_request.py new file mode 100644 index 0000000000..f0d53c4706 --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_page_from_incident_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_create_page_from_incident_data_request import IncidentCreatePageFromIncidentDataRequest + +class IncidentCreatePageFromIncidentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_create_page_from_incident_data_request import IncidentCreatePageFromIncidentDataRequest + return { + "data": (IncidentCreatePageFromIncidentDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentCreatePageFromIncidentDataRequest, **kwargs): + """ + Request payload for creating a page from an incident. + + :param data: Page data in a create request. + :type data: IncidentCreatePageFromIncidentDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_create_page_from_incident_type.py b/datadog_api_client/v2/model/incident_create_page_from_incident_type.py new file mode 100644 index 0000000000..98cad32f9d --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_page_from_incident_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentCreatePageFromIncidentType(ModelSimple): + """ + Resource type for a page creation request. + + :param value: If omitted defaults to "page". Must be one of ["page"]. + :type value: str + """ + + allowed_values = { + "page", + } + PAGE: ClassVar["IncidentCreatePageFromIncidentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentCreatePageFromIncidentType.PAGE = IncidentCreatePageFromIncidentType("page") diff --git a/datadog_api_client/v2/model/incident_create_relationships.py b/datadog_api_client/v2/model/incident_create_relationships.py new file mode 100644 index 0000000000..12306c909d --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + +class IncidentCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + return { + "commander_user": (NullableRelationshipToUser,), + } + attribute_map = { + "commander_user": "commander_user", + } + + def __init__(self_, commander_user: Union[NullableRelationshipToUser, none_type], **kwargs): + """ + The relationships the incident will have with other resources once created. + + :param commander_user: Relationship to user. + :type commander_user: NullableRelationshipToUser, none_type + """ + super().__init__(kwargs) + + + self_.commander_user = commander_user diff --git a/datadog_api_client/v2/model/incident_create_request.py b/datadog_api_client/v2/model/incident_create_request.py new file mode 100644 index 0000000000..e6d446d8b5 --- /dev/null +++ b/datadog_api_client/v2/model/incident_create_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_create_data import IncidentCreateData + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + from datadog_api_client.v2.model.incident_timeline_cell_markdown_create_attributes import IncidentTimelineCellMarkdownCreateAttributes + +class IncidentCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_create_data import IncidentCreateData + return { + "data": (IncidentCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentCreateData, **kwargs): + """ + Create request for an incident. + + :param data: Incident data for a create request. + :type data: IncidentCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_field_attributes.py b/datadog_api_client/v2/model/incident_field_attributes.py new file mode 100644 index 0000000000..694d85a35a --- /dev/null +++ b/datadog_api_client/v2/model/incident_field_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentFieldAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Dynamic fields for which selections can be made, with field names as keys. + + :param type: Type of the single value field definitions. + :type type: IncidentFieldAttributesSingleValueType, optional + + :param value: The single value selected for this field. + :type value: str, none_type, 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.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + return { + "oneOf": [ + IncidentFieldAttributesSingleValue, + IncidentFieldAttributesMultipleValue, + ], + } diff --git a/datadog_api_client/v2/model/incident_field_attributes_multiple_value.py b/datadog_api_client/v2/model/incident_field_attributes_multiple_value.py new file mode 100644 index 0000000000..282b698a66 --- /dev/null +++ b/datadog_api_client/v2/model/incident_field_attributes_multiple_value.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_field_attributes_value_type import IncidentFieldAttributesValueType + +class IncidentFieldAttributesMultipleValue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_field_attributes_value_type import IncidentFieldAttributesValueType + return { + "type": (IncidentFieldAttributesValueType,), + "value": ([str], none_type), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: Union[IncidentFieldAttributesValueType, UnsetType]=unset, value: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + A field with potentially multiple values selected. + + :param type: Type of the multiple value field definitions. + :type type: IncidentFieldAttributesValueType, optional + + :param value: The multiple values selected for this field. + :type value: [str], none_type, optional + """ + if type is not unset: + kwargs["type"] = type + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_field_attributes_single_value.py b/datadog_api_client/v2/model/incident_field_attributes_single_value.py new file mode 100644 index 0000000000..9791e358fb --- /dev/null +++ b/datadog_api_client/v2/model/incident_field_attributes_single_value.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_field_attributes_single_value_type import IncidentFieldAttributesSingleValueType + +class IncidentFieldAttributesSingleValue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_field_attributes_single_value_type import IncidentFieldAttributesSingleValueType + return { + "type": (IncidentFieldAttributesSingleValueType,), + "value": (str, none_type), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: Union[IncidentFieldAttributesSingleValueType, UnsetType]=unset, value: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + A field with a single value selected. + + :param type: Type of the single value field definitions. + :type type: IncidentFieldAttributesSingleValueType, optional + + :param value: The single value selected for this field. + :type value: str, none_type, optional + """ + if type is not unset: + kwargs["type"] = type + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_field_attributes_single_value_type.py b/datadog_api_client/v2/model/incident_field_attributes_single_value_type.py new file mode 100644 index 0000000000..e004f38e8c --- /dev/null +++ b/datadog_api_client/v2/model/incident_field_attributes_single_value_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentFieldAttributesSingleValueType(ModelSimple): + """ + Type of the single value field definitions. + + :param value: If omitted defaults to "dropdown". Must be one of ["dropdown", "textbox"]. + :type value: str + """ + + allowed_values = { + "dropdown", + "textbox", + } + DROPDOWN: ClassVar["IncidentFieldAttributesSingleValueType"] + TEXTBOX: ClassVar["IncidentFieldAttributesSingleValueType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentFieldAttributesSingleValueType.DROPDOWN = IncidentFieldAttributesSingleValueType("dropdown") +IncidentFieldAttributesSingleValueType.TEXTBOX = IncidentFieldAttributesSingleValueType("textbox") diff --git a/datadog_api_client/v2/model/incident_field_attributes_value_type.py b/datadog_api_client/v2/model/incident_field_attributes_value_type.py new file mode 100644 index 0000000000..86e2fabc85 --- /dev/null +++ b/datadog_api_client/v2/model/incident_field_attributes_value_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentFieldAttributesValueType(ModelSimple): + """ + Type of the multiple value field definitions. + + :param value: If omitted defaults to "multiselect". Must be one of ["multiselect", "textarray", "metrictag", "autocomplete"]. + :type value: str + """ + + allowed_values = { + "multiselect", + "textarray", + "metrictag", + "autocomplete", + } + MULTISELECT: ClassVar["IncidentFieldAttributesValueType"] + TEXTARRAY: ClassVar["IncidentFieldAttributesValueType"] + METRICTAG: ClassVar["IncidentFieldAttributesValueType"] + AUTOCOMPLETE: ClassVar["IncidentFieldAttributesValueType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentFieldAttributesValueType.MULTISELECT = IncidentFieldAttributesValueType("multiselect") +IncidentFieldAttributesValueType.TEXTARRAY = IncidentFieldAttributesValueType("textarray") +IncidentFieldAttributesValueType.METRICTAG = IncidentFieldAttributesValueType("metrictag") +IncidentFieldAttributesValueType.AUTOCOMPLETE = IncidentFieldAttributesValueType("autocomplete") diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_data_attributes_request.py b/datadog_api_client/v2/model/incident_google_chat_configuration_data_attributes_request.py new file mode 100644 index 0000000000..f13cb32fac --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_data_attributes_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentGoogleChatConfigurationDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "domain_id": (str,), + "space_name_template": (str,), + "space_target_audience_id": (str,), + "space_time_zone": (str,), + } + attribute_map = { + "domain_id": "domain_id", + "space_name_template": "space_name_template", + "space_target_audience_id": "space_target_audience_id", + "space_time_zone": "space_time_zone", + } + + def __init__(self_, domain_id: str, space_name_template: str, space_target_audience_id: str, space_time_zone: str, **kwargs): + """ + Attributes for creating a Google Chat configuration. + + :param domain_id: The Google Chat domain ID. + :type domain_id: str + + :param space_name_template: The template for the Google Chat space name. + :type space_name_template: str + + :param space_target_audience_id: The target audience ID for the Google Chat space. + :type space_target_audience_id: str + + :param space_time_zone: The time zone for the Google Chat space. + :type space_time_zone: str + """ + super().__init__(kwargs) + + + self_.domain_id = domain_id + self_.space_name_template = space_name_template + self_.space_target_audience_id = space_target_audience_id + self_.space_time_zone = space_time_zone diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_data_attributes_response.py b/datadog_api_client/v2/model/incident_google_chat_configuration_data_attributes_response.py new file mode 100644 index 0000000000..b94f979062 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_data_attributes_response.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentGoogleChatConfigurationDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "domain_id": (str,), + "modified_at": (datetime,), + "space_name_template": (str,), + "space_target_audience_id": (str,), + "space_time_zone": (str,), + } + attribute_map = { + "created_at": "created_at", + "domain_id": "domain_id", + "modified_at": "modified_at", + "space_name_template": "space_name_template", + "space_target_audience_id": "space_target_audience_id", + "space_time_zone": "space_time_zone", + } + + def __init__(self_, created_at: datetime, domain_id: str, modified_at: datetime, space_name_template: str, space_target_audience_id: str, space_time_zone: str, **kwargs): + """ + Attributes of a Google Chat configuration. + + :param created_at: Timestamp when the configuration was created. + :type created_at: datetime + + :param domain_id: The Google Chat domain ID. + :type domain_id: str + + :param modified_at: Timestamp when the configuration was last modified. + :type modified_at: datetime + + :param space_name_template: The template for the Google Chat space name. + :type space_name_template: str + + :param space_target_audience_id: The target audience ID for the Google Chat space. + :type space_target_audience_id: str + + :param space_time_zone: The time zone for the Google Chat space. + :type space_time_zone: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.domain_id = domain_id + self_.modified_at = modified_at + self_.space_name_template = space_name_template + self_.space_target_audience_id = space_target_audience_id + self_.space_time_zone = space_time_zone diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_data_request.py b/datadog_api_client/v2/model/incident_google_chat_configuration_data_request.py new file mode 100644 index 0000000000..fc4e9ce8c4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_data_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_chat_configuration_data_attributes_request import IncidentGoogleChatConfigurationDataAttributesRequest + from datadog_api_client.v2.model.incident_google_chat_configuration_relationships_request import IncidentGoogleChatConfigurationRelationshipsRequest + from datadog_api_client.v2.model.incident_google_chat_configuration_type import IncidentGoogleChatConfigurationType + +class IncidentGoogleChatConfigurationDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_chat_configuration_data_attributes_request import IncidentGoogleChatConfigurationDataAttributesRequest + from datadog_api_client.v2.model.incident_google_chat_configuration_relationships_request import IncidentGoogleChatConfigurationRelationshipsRequest + from datadog_api_client.v2.model.incident_google_chat_configuration_type import IncidentGoogleChatConfigurationType + return { + "attributes": (IncidentGoogleChatConfigurationDataAttributesRequest,), + "relationships": (IncidentGoogleChatConfigurationRelationshipsRequest,), + "type": (IncidentGoogleChatConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentGoogleChatConfigurationDataAttributesRequest, relationships: IncidentGoogleChatConfigurationRelationshipsRequest, type: IncidentGoogleChatConfigurationType, **kwargs): + """ + Google Chat configuration data in a create request. + + :param attributes: Attributes for creating a Google Chat configuration. + :type attributes: IncidentGoogleChatConfigurationDataAttributesRequest + + :param relationships: Relationships for a Google Chat configuration create request. + :type relationships: IncidentGoogleChatConfigurationRelationshipsRequest + + :param type: Google Chat configuration resource type. + :type type: IncidentGoogleChatConfigurationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_data_response.py b/datadog_api_client/v2/model/incident_google_chat_configuration_data_response.py new file mode 100644 index 0000000000..18922c555a --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_chat_configuration_data_attributes_response import IncidentGoogleChatConfigurationDataAttributesResponse + from datadog_api_client.v2.model.incident_google_chat_configuration_relationships import IncidentGoogleChatConfigurationRelationships + from datadog_api_client.v2.model.incident_google_chat_configuration_type import IncidentGoogleChatConfigurationType + +class IncidentGoogleChatConfigurationDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_chat_configuration_data_attributes_response import IncidentGoogleChatConfigurationDataAttributesResponse + from datadog_api_client.v2.model.incident_google_chat_configuration_relationships import IncidentGoogleChatConfigurationRelationships + from datadog_api_client.v2.model.incident_google_chat_configuration_type import IncidentGoogleChatConfigurationType + return { + "attributes": (IncidentGoogleChatConfigurationDataAttributesResponse,), + "id": (UUID,), + "relationships": (IncidentGoogleChatConfigurationRelationships,), + "type": (IncidentGoogleChatConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentGoogleChatConfigurationDataAttributesResponse, id: UUID, type: IncidentGoogleChatConfigurationType, relationships: Union[IncidentGoogleChatConfigurationRelationships, UnsetType]=unset, **kwargs): + """ + Google Chat configuration data in a response. + + :param attributes: Attributes of a Google Chat configuration. + :type attributes: IncidentGoogleChatConfigurationDataAttributesResponse + + :param id: The configuration identifier. + :type id: UUID + + :param relationships: Relationships for a Google Chat configuration. + :type relationships: IncidentGoogleChatConfigurationRelationships, optional + + :param type: Google Chat configuration resource type. + :type type: IncidentGoogleChatConfigurationType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_patch_data_attributes_request.py b/datadog_api_client/v2/model/incident_google_chat_configuration_patch_data_attributes_request.py new file mode 100644 index 0000000000..a4be30956d --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_patch_data_attributes_request.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentGoogleChatConfigurationPatchDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "domain_id": (str,), + "space_name_template": (str,), + "space_target_audience_id": (str,), + "space_time_zone": (str,), + } + attribute_map = { + "domain_id": "domain_id", + "space_name_template": "space_name_template", + "space_target_audience_id": "space_target_audience_id", + "space_time_zone": "space_time_zone", + } + + def __init__(self_, domain_id: Union[str, UnsetType]=unset, space_name_template: Union[str, UnsetType]=unset, space_target_audience_id: Union[str, UnsetType]=unset, space_time_zone: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for patching a Google Chat configuration. All fields are optional. + + :param domain_id: The Google Chat domain ID. + :type domain_id: str, optional + + :param space_name_template: The template for the Google Chat space name. + :type space_name_template: str, optional + + :param space_target_audience_id: The target audience ID for the Google Chat space. + :type space_target_audience_id: str, optional + + :param space_time_zone: The time zone for the Google Chat space. + :type space_time_zone: str, optional + """ + if domain_id is not unset: + kwargs["domain_id"] = domain_id + if space_name_template is not unset: + kwargs["space_name_template"] = space_name_template + if space_target_audience_id is not unset: + kwargs["space_target_audience_id"] = space_target_audience_id + if space_time_zone is not unset: + kwargs["space_time_zone"] = space_time_zone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_patch_data_request.py b/datadog_api_client/v2/model/incident_google_chat_configuration_patch_data_request.py new file mode 100644 index 0000000000..add02de6eb --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_patch_data_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_chat_configuration_patch_data_attributes_request import IncidentGoogleChatConfigurationPatchDataAttributesRequest + from datadog_api_client.v2.model.incident_google_chat_configuration_type import IncidentGoogleChatConfigurationType + +class IncidentGoogleChatConfigurationPatchDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_chat_configuration_patch_data_attributes_request import IncidentGoogleChatConfigurationPatchDataAttributesRequest + from datadog_api_client.v2.model.incident_google_chat_configuration_type import IncidentGoogleChatConfigurationType + return { + "attributes": (IncidentGoogleChatConfigurationPatchDataAttributesRequest,), + "id": (UUID,), + "type": (IncidentGoogleChatConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentGoogleChatConfigurationType, attributes: Union[IncidentGoogleChatConfigurationPatchDataAttributesRequest, UnsetType]=unset, **kwargs): + """ + Google Chat configuration data in a patch request. + + :param attributes: Attributes for patching a Google Chat configuration. All fields are optional. + :type attributes: IncidentGoogleChatConfigurationPatchDataAttributesRequest, optional + + :param id: The configuration identifier. + :type id: UUID + + :param type: Google Chat configuration resource type. + :type type: IncidentGoogleChatConfigurationType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_patch_request.py b/datadog_api_client/v2/model/incident_google_chat_configuration_patch_request.py new file mode 100644 index 0000000000..521e36d3df --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_chat_configuration_patch_data_request import IncidentGoogleChatConfigurationPatchDataRequest + +class IncidentGoogleChatConfigurationPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_chat_configuration_patch_data_request import IncidentGoogleChatConfigurationPatchDataRequest + return { + "data": (IncidentGoogleChatConfigurationPatchDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentGoogleChatConfigurationPatchDataRequest, **kwargs): + """ + Request payload for patching a Google Chat configuration. + + :param data: Google Chat configuration data in a patch request. + :type data: IncidentGoogleChatConfigurationPatchDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_relationships.py b/datadog_api_client/v2/model/incident_google_chat_configuration_relationships.py new file mode 100644 index 0000000000..ca52b1b6d2 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_relationships.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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 + +class IncidentGoogleChatConfigurationRelationships(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 + return { + "created_by_user": (RelationshipToUser,), + "incident_type": (RelationshipToIncidentType,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "incident_type": "incident_type", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, incident_type: Union[RelationshipToIncidentType, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + Relationships for a Google Chat configuration. + + :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 + """ + 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 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_relationships_request.py b/datadog_api_client/v2/model/incident_google_chat_configuration_relationships_request.py new file mode 100644 index 0000000000..51f5e059e3 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_relationships_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + +class IncidentGoogleChatConfigurationRelationshipsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + return { + "incident_type": (RelationshipToIncidentType,), + } + attribute_map = { + "incident_type": "incident_type", + } + + def __init__(self_, incident_type: RelationshipToIncidentType, **kwargs): + """ + Relationships for a Google Chat configuration create request. + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType + """ + super().__init__(kwargs) + + + self_.incident_type = incident_type diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_request.py b/datadog_api_client/v2/model/incident_google_chat_configuration_request.py new file mode 100644 index 0000000000..73d816865d --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_chat_configuration_data_request import IncidentGoogleChatConfigurationDataRequest + +class IncidentGoogleChatConfigurationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_chat_configuration_data_request import IncidentGoogleChatConfigurationDataRequest + return { + "data": (IncidentGoogleChatConfigurationDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentGoogleChatConfigurationDataRequest, **kwargs): + """ + Request payload for creating a Google Chat configuration. + + :param data: Google Chat configuration data in a create request. + :type data: IncidentGoogleChatConfigurationDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_response.py b/datadog_api_client/v2/model/incident_google_chat_configuration_response.py new file mode 100644 index 0000000000..8e80a2d306 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_chat_configuration_data_response import IncidentGoogleChatConfigurationDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentGoogleChatConfigurationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_chat_configuration_data_response import IncidentGoogleChatConfigurationDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": (IncidentGoogleChatConfigurationDataResponse,), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentGoogleChatConfigurationDataResponse, included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with a Google Chat configuration. + + :param data: Google Chat configuration data in a response. + :type data: IncidentGoogleChatConfigurationDataResponse + + :param included: Included related resources. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_google_chat_configuration_type.py b/datadog_api_client/v2/model/incident_google_chat_configuration_type.py new file mode 100644 index 0000000000..2071ab8f8b --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_chat_configuration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentGoogleChatConfigurationType(ModelSimple): + """ + Google Chat configuration resource type. + + :param value: If omitted defaults to "google_chat_configurations". Must be one of ["google_chat_configurations"]. + :type value: str + """ + + allowed_values = { + "google_chat_configurations", + } + GOOGLE_CHAT_CONFIGURATIONS: ClassVar["IncidentGoogleChatConfigurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentGoogleChatConfigurationType.GOOGLE_CHAT_CONFIGURATIONS = IncidentGoogleChatConfigurationType("google_chat_configurations") diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_data_attributes_request.py b/datadog_api_client/v2/model/incident_google_meet_configuration_data_attributes_request.py new file mode 100644 index 0000000000..1f75cba5b6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_data_attributes_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentGoogleMeetConfigurationDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "allow_manual_meeting_creation": (bool,), + "auto_summarize": (bool,), + } + attribute_map = { + "allow_manual_meeting_creation": "allow_manual_meeting_creation", + "auto_summarize": "auto_summarize", + } + + def __init__(self_, allow_manual_meeting_creation: bool, auto_summarize: bool, **kwargs): + """ + Attributes for creating a Google Meet configuration. + + :param allow_manual_meeting_creation: Whether to allow manual meeting creation. + :type allow_manual_meeting_creation: bool + + :param auto_summarize: Whether to auto-summarize meetings. + :type auto_summarize: bool + """ + super().__init__(kwargs) + + + self_.allow_manual_meeting_creation = allow_manual_meeting_creation + self_.auto_summarize = auto_summarize diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_data_attributes_response.py b/datadog_api_client/v2/model/incident_google_meet_configuration_data_attributes_response.py new file mode 100644 index 0000000000..29adcf0b11 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_data_attributes_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentGoogleMeetConfigurationDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "allow_manual_meeting_creation": (bool,), + "auto_summarize": (bool,), + "created_at": (datetime,), + "modified_at": (datetime,), + } + attribute_map = { + "allow_manual_meeting_creation": "allow_manual_meeting_creation", + "auto_summarize": "auto_summarize", + "created_at": "created_at", + "modified_at": "modified_at", + } + + def __init__(self_, allow_manual_meeting_creation: bool, auto_summarize: bool, modified_at: datetime, created_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a Google Meet configuration. + + :param allow_manual_meeting_creation: Whether manual meeting creation is allowed. + :type allow_manual_meeting_creation: bool + + :param auto_summarize: Whether meetings are auto-summarized. + :type auto_summarize: bool + + :param created_at: Timestamp when the configuration was created. + :type created_at: datetime, optional + + :param modified_at: Timestamp when the configuration was last modified. + :type modified_at: datetime + """ + if created_at is not unset: + kwargs["created_at"] = created_at + super().__init__(kwargs) + + + self_.allow_manual_meeting_creation = allow_manual_meeting_creation + self_.auto_summarize = auto_summarize + self_.modified_at = modified_at diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_data_request.py b/datadog_api_client/v2/model/incident_google_meet_configuration_data_request.py new file mode 100644 index 0000000000..07824c0cc7 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_data_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_meet_configuration_data_attributes_request import IncidentGoogleMeetConfigurationDataAttributesRequest + from datadog_api_client.v2.model.incident_google_meet_configuration_relationships_request import IncidentGoogleMeetConfigurationRelationshipsRequest + from datadog_api_client.v2.model.incident_google_meet_configuration_type import IncidentGoogleMeetConfigurationType + +class IncidentGoogleMeetConfigurationDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_meet_configuration_data_attributes_request import IncidentGoogleMeetConfigurationDataAttributesRequest + from datadog_api_client.v2.model.incident_google_meet_configuration_relationships_request import IncidentGoogleMeetConfigurationRelationshipsRequest + from datadog_api_client.v2.model.incident_google_meet_configuration_type import IncidentGoogleMeetConfigurationType + return { + "attributes": (IncidentGoogleMeetConfigurationDataAttributesRequest,), + "relationships": (IncidentGoogleMeetConfigurationRelationshipsRequest,), + "type": (IncidentGoogleMeetConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentGoogleMeetConfigurationDataAttributesRequest, relationships: IncidentGoogleMeetConfigurationRelationshipsRequest, type: IncidentGoogleMeetConfigurationType, **kwargs): + """ + Google Meet configuration data in a create request. + + :param attributes: Attributes for creating a Google Meet configuration. + :type attributes: IncidentGoogleMeetConfigurationDataAttributesRequest + + :param relationships: Relationships for a Google Meet configuration create request. + :type relationships: IncidentGoogleMeetConfigurationRelationshipsRequest + + :param type: Google Meet configuration resource type. + :type type: IncidentGoogleMeetConfigurationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_data_response.py b/datadog_api_client/v2/model/incident_google_meet_configuration_data_response.py new file mode 100644 index 0000000000..e1dd0a2060 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_meet_configuration_data_attributes_response import IncidentGoogleMeetConfigurationDataAttributesResponse + from datadog_api_client.v2.model.incident_google_meet_configuration_relationships import IncidentGoogleMeetConfigurationRelationships + from datadog_api_client.v2.model.incident_google_meet_configuration_type import IncidentGoogleMeetConfigurationType + +class IncidentGoogleMeetConfigurationDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_meet_configuration_data_attributes_response import IncidentGoogleMeetConfigurationDataAttributesResponse + from datadog_api_client.v2.model.incident_google_meet_configuration_relationships import IncidentGoogleMeetConfigurationRelationships + from datadog_api_client.v2.model.incident_google_meet_configuration_type import IncidentGoogleMeetConfigurationType + return { + "attributes": (IncidentGoogleMeetConfigurationDataAttributesResponse,), + "id": (UUID,), + "relationships": (IncidentGoogleMeetConfigurationRelationships,), + "type": (IncidentGoogleMeetConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentGoogleMeetConfigurationDataAttributesResponse, id: UUID, type: IncidentGoogleMeetConfigurationType, relationships: Union[IncidentGoogleMeetConfigurationRelationships, UnsetType]=unset, **kwargs): + """ + Google Meet configuration data in a response. + + :param attributes: Attributes of a Google Meet configuration. + :type attributes: IncidentGoogleMeetConfigurationDataAttributesResponse + + :param id: The configuration identifier. + :type id: UUID + + :param relationships: Relationships for a Google Meet configuration. + :type relationships: IncidentGoogleMeetConfigurationRelationships, optional + + :param type: Google Meet configuration resource type. + :type type: IncidentGoogleMeetConfigurationType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_patch_data_attributes_request.py b/datadog_api_client/v2/model/incident_google_meet_configuration_patch_data_attributes_request.py new file mode 100644 index 0000000000..218721faf0 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_patch_data_attributes_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentGoogleMeetConfigurationPatchDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "allow_manual_meeting_creation": (bool,), + "auto_summarize": (bool,), + } + attribute_map = { + "allow_manual_meeting_creation": "allow_manual_meeting_creation", + "auto_summarize": "auto_summarize", + } + + def __init__(self_, allow_manual_meeting_creation: Union[bool, UnsetType]=unset, auto_summarize: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for patching a Google Meet configuration. All fields are optional. + + :param allow_manual_meeting_creation: Whether to allow manual meeting creation. + :type allow_manual_meeting_creation: bool, optional + + :param auto_summarize: Whether to auto-summarize meetings. + :type auto_summarize: bool, optional + """ + if allow_manual_meeting_creation is not unset: + kwargs["allow_manual_meeting_creation"] = allow_manual_meeting_creation + if auto_summarize is not unset: + kwargs["auto_summarize"] = auto_summarize + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_patch_data_request.py b/datadog_api_client/v2/model/incident_google_meet_configuration_patch_data_request.py new file mode 100644 index 0000000000..66f99d1ff6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_patch_data_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_meet_configuration_patch_data_attributes_request import IncidentGoogleMeetConfigurationPatchDataAttributesRequest + from datadog_api_client.v2.model.incident_google_meet_configuration_type import IncidentGoogleMeetConfigurationType + +class IncidentGoogleMeetConfigurationPatchDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_meet_configuration_patch_data_attributes_request import IncidentGoogleMeetConfigurationPatchDataAttributesRequest + from datadog_api_client.v2.model.incident_google_meet_configuration_type import IncidentGoogleMeetConfigurationType + return { + "attributes": (IncidentGoogleMeetConfigurationPatchDataAttributesRequest,), + "id": (UUID,), + "type": (IncidentGoogleMeetConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentGoogleMeetConfigurationType, attributes: Union[IncidentGoogleMeetConfigurationPatchDataAttributesRequest, UnsetType]=unset, **kwargs): + """ + Google Meet configuration data in a patch request. + + :param attributes: Attributes for patching a Google Meet configuration. All fields are optional. + :type attributes: IncidentGoogleMeetConfigurationPatchDataAttributesRequest, optional + + :param id: The configuration identifier. + :type id: UUID + + :param type: Google Meet configuration resource type. + :type type: IncidentGoogleMeetConfigurationType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_patch_request.py b/datadog_api_client/v2/model/incident_google_meet_configuration_patch_request.py new file mode 100644 index 0000000000..287bb330d0 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_meet_configuration_patch_data_request import IncidentGoogleMeetConfigurationPatchDataRequest + +class IncidentGoogleMeetConfigurationPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_meet_configuration_patch_data_request import IncidentGoogleMeetConfigurationPatchDataRequest + return { + "data": (IncidentGoogleMeetConfigurationPatchDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentGoogleMeetConfigurationPatchDataRequest, **kwargs): + """ + Request payload for patching a Google Meet configuration. + + :param data: Google Meet configuration data in a patch request. + :type data: IncidentGoogleMeetConfigurationPatchDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_relationships.py b/datadog_api_client/v2/model/incident_google_meet_configuration_relationships.py new file mode 100644 index 0000000000..7b7e025161 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_relationships.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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 + +class IncidentGoogleMeetConfigurationRelationships(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 + return { + "created_by_user": (RelationshipToUser,), + "incident_type": (RelationshipToIncidentType,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "incident_type": "incident_type", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, incident_type: Union[RelationshipToIncidentType, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + Relationships for a Google Meet configuration. + + :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 + """ + 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 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_relationships_request.py b/datadog_api_client/v2/model/incident_google_meet_configuration_relationships_request.py new file mode 100644 index 0000000000..c91c357152 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_relationships_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + +class IncidentGoogleMeetConfigurationRelationshipsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + return { + "incident_type": (RelationshipToIncidentType,), + } + attribute_map = { + "incident_type": "incident_type", + } + + def __init__(self_, incident_type: RelationshipToIncidentType, **kwargs): + """ + Relationships for a Google Meet configuration create request. + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType + """ + super().__init__(kwargs) + + + self_.incident_type = incident_type diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_request.py b/datadog_api_client/v2/model/incident_google_meet_configuration_request.py new file mode 100644 index 0000000000..acc80e9ce6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_meet_configuration_data_request import IncidentGoogleMeetConfigurationDataRequest + +class IncidentGoogleMeetConfigurationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_meet_configuration_data_request import IncidentGoogleMeetConfigurationDataRequest + return { + "data": (IncidentGoogleMeetConfigurationDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentGoogleMeetConfigurationDataRequest, **kwargs): + """ + Request payload for creating a Google Meet configuration. + + :param data: Google Meet configuration data in a create request. + :type data: IncidentGoogleMeetConfigurationDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_response.py b/datadog_api_client/v2/model/incident_google_meet_configuration_response.py new file mode 100644 index 0000000000..e34359a0b6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_google_meet_configuration_data_response import IncidentGoogleMeetConfigurationDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentGoogleMeetConfigurationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_google_meet_configuration_data_response import IncidentGoogleMeetConfigurationDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": (IncidentGoogleMeetConfigurationDataResponse,), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentGoogleMeetConfigurationDataResponse, included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with a Google Meet configuration. + + :param data: Google Meet configuration data in a response. + :type data: IncidentGoogleMeetConfigurationDataResponse + + :param included: Included related resources. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_google_meet_configuration_type.py b/datadog_api_client/v2/model/incident_google_meet_configuration_type.py new file mode 100644 index 0000000000..2f4a1aefcf --- /dev/null +++ b/datadog_api_client/v2/model/incident_google_meet_configuration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentGoogleMeetConfigurationType(ModelSimple): + """ + Google Meet configuration resource type. + + :param value: If omitted defaults to "google_meet_configurations". Must be one of ["google_meet_configurations"]. + :type value: str + """ + + allowed_values = { + "google_meet_configurations", + } + GOOGLE_MEET_CONFIGURATIONS: ClassVar["IncidentGoogleMeetConfigurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentGoogleMeetConfigurationType.GOOGLE_MEET_CONFIGURATIONS = IncidentGoogleMeetConfigurationType("google_meet_configurations") diff --git a/datadog_api_client/v2/model/incident_handle_attributes_fields.py b/datadog_api_client/v2/model/incident_handle_attributes_fields.py new file mode 100644 index 0000000000..396f8ca142 --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_attributes_fields.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentHandleAttributesFields(ModelNormal): + @cached_property + def openapi_types(_): + return { + "severity": ([str],), + } + attribute_map = { + "severity": "severity", + } + + def __init__(self_, severity: Union[List[str], UnsetType]=unset, **kwargs): + """ + Dynamic fields associated with the handle + + :param severity: Severity levels associated with the handle + :type severity: [str], optional + """ + if severity is not unset: + kwargs["severity"] = severity + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_handle_attributes_request.py b/datadog_api_client/v2/model/incident_handle_attributes_request.py new file mode 100644 index 0000000000..908cee96d2 --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_attributes_request.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_attributes_fields import IncidentHandleAttributesFields + +class IncidentHandleAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_attributes_fields import IncidentHandleAttributesFields + return { + "fields": (IncidentHandleAttributesFields,), + "name": (str,), + } + attribute_map = { + "fields": "fields", + "name": "name", + } + + def __init__(self_, name: str, fields: Union[IncidentHandleAttributesFields, UnsetType]=unset, **kwargs): + """ + Incident handle attributes for requests + + :param fields: Dynamic fields associated with the handle + :type fields: IncidentHandleAttributesFields, optional + + :param name: The handle name + :type name: str + """ + if fields is not unset: + kwargs["fields"] = fields + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/incident_handle_attributes_response.py b/datadog_api_client/v2/model/incident_handle_attributes_response.py new file mode 100644 index 0000000000..32ee9acbf8 --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_attributes_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_attributes_fields import IncidentHandleAttributesFields + +class IncidentHandleAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_attributes_fields import IncidentHandleAttributesFields + return { + "created_at": (datetime,), + "fields": (IncidentHandleAttributesFields,), + "modified_at": (datetime,), + "name": (str,), + } + attribute_map = { + "created_at": "created_at", + "fields": "fields", + "modified_at": "modified_at", + "name": "name", + } + + def __init__(self_, created_at: datetime, fields: IncidentHandleAttributesFields, modified_at: datetime, name: str, **kwargs): + """ + Incident handle attributes for responses + + :param created_at: Timestamp when the handle was created + :type created_at: datetime + + :param fields: Dynamic fields associated with the handle + :type fields: IncidentHandleAttributesFields + + :param modified_at: Timestamp when the handle was last modified + :type modified_at: datetime + + :param name: The handle name + :type name: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.fields = fields + self_.modified_at = modified_at + self_.name = name diff --git a/datadog_api_client/v2/model/incident_handle_data_request.py b/datadog_api_client/v2/model/incident_handle_data_request.py new file mode 100644 index 0000000000..64b1348dfc --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_data_request.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_attributes_request import IncidentHandleAttributesRequest + from datadog_api_client.v2.model.incident_handle_relationships_request import IncidentHandleRelationshipsRequest + from datadog_api_client.v2.model.incident_handle_type import IncidentHandleType + +class IncidentHandleDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_attributes_request import IncidentHandleAttributesRequest + from datadog_api_client.v2.model.incident_handle_relationships_request import IncidentHandleRelationshipsRequest + from datadog_api_client.v2.model.incident_handle_type import IncidentHandleType + return { + "attributes": (IncidentHandleAttributesRequest,), + "id": (str,), + "relationships": (IncidentHandleRelationshipsRequest,), + "type": (IncidentHandleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentHandleAttributesRequest, type: IncidentHandleType, id: Union[str, UnsetType]=unset, relationships: Union[IncidentHandleRelationshipsRequest, none_type, UnsetType]=unset, **kwargs): + """ + Data object representing an incident handle in a create or update request. + + :param attributes: Incident handle attributes for requests + :type attributes: IncidentHandleAttributesRequest + + :param id: The ID of the incident handle (required for PUT requests) + :type id: str, optional + + :param relationships: Relationships to associate with an incident handle in a create or update request. + :type relationships: IncidentHandleRelationshipsRequest, none_type, optional + + :param type: Incident handle resource type + :type type: IncidentHandleType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_handle_data_response.py b/datadog_api_client/v2/model/incident_handle_data_response.py new file mode 100644 index 0000000000..864dcf7eda --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_attributes_response import IncidentHandleAttributesResponse + from datadog_api_client.v2.model.incident_handle_relationships import IncidentHandleRelationships + from datadog_api_client.v2.model.incident_handle_type import IncidentHandleType + +class IncidentHandleDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_attributes_response import IncidentHandleAttributesResponse + from datadog_api_client.v2.model.incident_handle_relationships import IncidentHandleRelationships + from datadog_api_client.v2.model.incident_handle_type import IncidentHandleType + return { + "attributes": (IncidentHandleAttributesResponse,), + "id": (str,), + "relationships": (IncidentHandleRelationships,), + "type": (IncidentHandleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentHandleAttributesResponse, id: str, type: IncidentHandleType, relationships: Union[IncidentHandleRelationships, none_type, UnsetType]=unset, **kwargs): + """ + Data object representing an incident handle in a response. + + :param attributes: Incident handle attributes for responses + :type attributes: IncidentHandleAttributesResponse + + :param id: The ID of the incident handle + :type id: str + + :param relationships: Relationships associated with an incident handle response, including linked users and incident type. + :type relationships: IncidentHandleRelationships, none_type, optional + + :param type: Incident handle resource type + :type type: IncidentHandleType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_handle_included_item_response.py b/datadog_api_client/v2/model/incident_handle_included_item_response.py new file mode 100644 index 0000000000..612a301711 --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_included_item_response.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentHandleIncludedItemResponse(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A single included resource item in an incident handle response, which can be a user or an incident type. + + :param attributes: Attributes of user object returned by the API. + :type attributes: IncidentUserAttributes, optional + + :param id: ID of the user. + :type id: str, optional + + :param type: Users resource type. + :type type: UsersType, optional + + :param relationships: The incident type's resource relationships. + :type relationships: IncidentTypeRelationships, 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.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + return { + "oneOf": [ + IncidentUserData, + IncidentTypeObject, + ], + } diff --git a/datadog_api_client/v2/model/incident_handle_relationship.py b/datadog_api_client/v2/model/incident_handle_relationship.py new file mode 100644 index 0000000000..3320ea1cbb --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_relationship_data import IncidentHandleRelationshipData + +class IncidentHandleRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_relationship_data import IncidentHandleRelationshipData + return { + "data": (IncidentHandleRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentHandleRelationshipData, **kwargs): + """ + A single relationship object for an incident handle, wrapping the related resource data. + + :param data: Relationship data for an incident handle, containing the ID and type of the related resource. + :type data: IncidentHandleRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_handle_relationship_data.py b/datadog_api_client/v2/model/incident_handle_relationship_data.py new file mode 100644 index 0000000000..ae77840961 --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentHandleRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: str, **kwargs): + """ + Relationship data for an incident handle, containing the ID and type of the related resource. + + :param id: The ID of the related resource + :type id: str + + :param type: The type of the related resource + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_handle_relationships.py b/datadog_api_client/v2/model/incident_handle_relationships.py new file mode 100644 index 0000000000..d65bca4223 --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_relationships.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_relationship import IncidentHandleRelationship + +class IncidentHandleRelationships(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_relationship import IncidentHandleRelationship + return { + "commander_user": (IncidentHandleRelationship,), + "created_by_user": (IncidentHandleRelationship,), + "incident_type": (IncidentHandleRelationship,), + "last_modified_by_user": (IncidentHandleRelationship,), + } + attribute_map = { + "commander_user": "commander_user", + "created_by_user": "created_by_user", + "incident_type": "incident_type", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: IncidentHandleRelationship, incident_type: IncidentHandleRelationship, last_modified_by_user: IncidentHandleRelationship, commander_user: Union[IncidentHandleRelationship, UnsetType]=unset, **kwargs): + """ + Relationships associated with an incident handle response, including linked users and incident type. + + :param commander_user: A single relationship object for an incident handle, wrapping the related resource data. + :type commander_user: IncidentHandleRelationship, optional + + :param created_by_user: A single relationship object for an incident handle, wrapping the related resource data. + :type created_by_user: IncidentHandleRelationship + + :param incident_type: A single relationship object for an incident handle, wrapping the related resource data. + :type incident_type: IncidentHandleRelationship + + :param last_modified_by_user: A single relationship object for an incident handle, wrapping the related resource data. + :type last_modified_by_user: IncidentHandleRelationship + """ + if commander_user is not unset: + kwargs["commander_user"] = commander_user + super().__init__(kwargs) + + + self_.created_by_user = created_by_user + self_.incident_type = incident_type + self_.last_modified_by_user = last_modified_by_user diff --git a/datadog_api_client/v2/model/incident_handle_relationships_request.py b/datadog_api_client/v2/model/incident_handle_relationships_request.py new file mode 100644 index 0000000000..c0a353e51b --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_relationships_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_relationship import IncidentHandleRelationship + +class IncidentHandleRelationshipsRequest(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_relationship import IncidentHandleRelationship + return { + "commander_user": (IncidentHandleRelationship,), + "incident_type": (IncidentHandleRelationship,), + } + attribute_map = { + "commander_user": "commander_user", + "incident_type": "incident_type", + } + + def __init__(self_, incident_type: IncidentHandleRelationship, commander_user: Union[IncidentHandleRelationship, UnsetType]=unset, **kwargs): + """ + Relationships to associate with an incident handle in a create or update request. + + :param commander_user: A single relationship object for an incident handle, wrapping the related resource data. + :type commander_user: IncidentHandleRelationship, optional + + :param incident_type: A single relationship object for an incident handle, wrapping the related resource data. + :type incident_type: IncidentHandleRelationship + """ + if commander_user is not unset: + kwargs["commander_user"] = commander_user + super().__init__(kwargs) + + + self_.incident_type = incident_type diff --git a/datadog_api_client/v2/model/incident_handle_request.py b/datadog_api_client/v2/model/incident_handle_request.py new file mode 100644 index 0000000000..3e01ad97b5 --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_data_request import IncidentHandleDataRequest + +class IncidentHandleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_data_request import IncidentHandleDataRequest + return { + "data": (IncidentHandleDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentHandleDataRequest, **kwargs): + """ + Request payload for creating or updating a global incident handle. + + :param data: Data object representing an incident handle in a create or update request. + :type data: IncidentHandleDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_handle_response.py b/datadog_api_client/v2/model/incident_handle_response.py new file mode 100644 index 0000000000..1ee510d3b7 --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_data_response import IncidentHandleDataResponse + from datadog_api_client.v2.model.incident_handle_included_item_response import IncidentHandleIncludedItemResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + +class IncidentHandleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_data_response import IncidentHandleDataResponse + from datadog_api_client.v2.model.incident_handle_included_item_response import IncidentHandleIncludedItemResponse + return { + "data": (IncidentHandleDataResponse,), + "included": ([IncidentHandleIncludedItemResponse],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: IncidentHandleDataResponse, included: Union[List[Union[IncidentHandleIncludedItemResponse, IncidentUserData, IncidentTypeObject]], UnsetType]=unset, **kwargs): + """ + Response payload for a single incident handle, including the handle data and related resources. + + :param data: Data object representing an incident handle in a response. + :type data: IncidentHandleDataResponse + + :param included: Included related resources + :type included: [IncidentHandleIncludedItemResponse], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_handle_type.py b/datadog_api_client/v2/model/incident_handle_type.py new file mode 100644 index 0000000000..6b2474cdf3 --- /dev/null +++ b/datadog_api_client/v2/model/incident_handle_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentHandleType(ModelSimple): + """ + Incident handle resource type + + :param value: If omitted defaults to "incidents_handles". Must be one of ["incidents_handles"]. + :type value: str + """ + + allowed_values = { + "incidents_handles", + } + INCIDENTS_HANDLES: ClassVar["IncidentHandleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentHandleType.INCIDENTS_HANDLES = IncidentHandleType("incidents_handles") diff --git a/datadog_api_client/v2/model/incident_handles_response.py b/datadog_api_client/v2/model/incident_handles_response.py new file mode 100644 index 0000000000..09504c131f --- /dev/null +++ b/datadog_api_client/v2/model/incident_handles_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_handle_data_response import IncidentHandleDataResponse + from datadog_api_client.v2.model.incident_handle_included_item_response import IncidentHandleIncludedItemResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + +class IncidentHandlesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_handle_data_response import IncidentHandleDataResponse + from datadog_api_client.v2.model.incident_handle_included_item_response import IncidentHandleIncludedItemResponse + return { + "data": ([IncidentHandleDataResponse],), + "included": ([IncidentHandleIncludedItemResponse],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[IncidentHandleDataResponse], included: Union[List[Union[IncidentHandleIncludedItemResponse, IncidentUserData, IncidentTypeObject]], UnsetType]=unset, **kwargs): + """ + Response payload for a list of global incident handles, including handle data and related resources. + + :param data: Array of incident handle data objects returned in a list response. + :type data: [IncidentHandleDataResponse] + + :param included: Included related resources + :type included: [IncidentHandleIncludedItemResponse], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_impact_attributes.py b/datadog_api_client/v2/model/incident_impact_attributes.py new file mode 100644 index 0000000000..045d76518f --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_fields_object import IncidentImpactFieldsObject + +class IncidentImpactAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_fields_object import IncidentImpactFieldsObject + return { + "created": (datetime,), + "description": (str,), + "end_at": (datetime, none_type), + "fields": (IncidentImpactFieldsObject,), + "impact_type": (str,), + "modified": (datetime,), + "start_at": (datetime,), + } + attribute_map = { + "created": "created", + "description": "description", + "end_at": "end_at", + "fields": "fields", + "impact_type": "impact_type", + "modified": "modified", + "start_at": "start_at", + } + read_only_vars = { + "created", + "modified", + } + + def __init__(self_, description: str, start_at: datetime, created: Union[datetime, UnsetType]=unset, end_at: Union[datetime, none_type, UnsetType]=unset, fields: Union[IncidentImpactFieldsObject, UnsetType]=unset, impact_type: Union[str, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, **kwargs): + """ + The incident impact's attributes. + + :param created: Timestamp when the impact was created. + :type created: datetime, optional + + :param description: Description of the impact. + :type description: str + + :param end_at: Timestamp when the impact ended. + :type end_at: datetime, none_type, optional + + :param fields: An object mapping impact field names to field values. + :type fields: IncidentImpactFieldsObject, optional + + :param impact_type: The type of impact. + :type impact_type: str, optional + + :param modified: Timestamp when the impact was last modified. + :type modified: datetime, optional + + :param start_at: Timestamp representing when the impact started. + :type start_at: datetime + """ + if created is not unset: + kwargs["created"] = created + if end_at is not unset: + kwargs["end_at"] = end_at + if fields is not unset: + kwargs["fields"] = fields + if impact_type is not unset: + kwargs["impact_type"] = impact_type + if modified is not unset: + kwargs["modified"] = modified + super().__init__(kwargs) + + + self_.description = description + self_.start_at = start_at diff --git a/datadog_api_client/v2/model/incident_impact_create_attributes.py b/datadog_api_client/v2/model/incident_impact_create_attributes.py new file mode 100644 index 0000000000..1dffe40583 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_create_attributes.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_fields_object import IncidentImpactFieldsObject + +class IncidentImpactCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_fields_object import IncidentImpactFieldsObject + return { + "description": (str,), + "end_at": (datetime, none_type), + "fields": (IncidentImpactFieldsObject,), + "start_at": (datetime,), + } + attribute_map = { + "description": "description", + "end_at": "end_at", + "fields": "fields", + "start_at": "start_at", + } + + def __init__(self_, description: str, start_at: datetime, end_at: Union[datetime, none_type, UnsetType]=unset, fields: Union[IncidentImpactFieldsObject, UnsetType]=unset, **kwargs): + """ + The incident impact's attributes for a create request. + + :param description: Description of the impact. + :type description: str + + :param end_at: Timestamp when the impact ended. + :type end_at: datetime, none_type, optional + + :param fields: An object mapping impact field names to field values. + :type fields: IncidentImpactFieldsObject, optional + + :param start_at: Timestamp when the impact started. + :type start_at: datetime + """ + if end_at is not unset: + kwargs["end_at"] = end_at + if fields is not unset: + kwargs["fields"] = fields + super().__init__(kwargs) + + + self_.description = description + self_.start_at = start_at diff --git a/datadog_api_client/v2/model/incident_impact_create_data.py b/datadog_api_client/v2/model/incident_impact_create_data.py new file mode 100644 index 0000000000..d97a4b3dde --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_create_attributes import IncidentImpactCreateAttributes + from datadog_api_client.v2.model.incident_impact_type import IncidentImpactType + +class IncidentImpactCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_create_attributes import IncidentImpactCreateAttributes + from datadog_api_client.v2.model.incident_impact_type import IncidentImpactType + return { + "attributes": (IncidentImpactCreateAttributes,), + "type": (IncidentImpactType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentImpactCreateAttributes, type: IncidentImpactType, **kwargs): + """ + Incident impact data for a create request. + + :param attributes: The incident impact's attributes for a create request. + :type attributes: IncidentImpactCreateAttributes + + :param type: Incident impact resource type. + :type type: IncidentImpactType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_impact_create_request.py b/datadog_api_client/v2/model/incident_impact_create_request.py new file mode 100644 index 0000000000..7c9f41fdbd --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_create_data import IncidentImpactCreateData + +class IncidentImpactCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_create_data import IncidentImpactCreateData + return { + "data": (IncidentImpactCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentImpactCreateData, **kwargs): + """ + Create request for an incident impact. + + :param data: Incident impact data for a create request. + :type data: IncidentImpactCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_impact_field_choice.py b/datadog_api_client/v2/model/incident_impact_field_choice.py new file mode 100644 index 0000000000..444ef39ebe --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_choice.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentImpactFieldChoice(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "display_name": (str,), + "value": (str,), + } + attribute_map = { + "description": "description", + "display_name": "display_name", + "value": "value", + } + + def __init__(self_, display_name: str, value: str, description: Union[str, UnsetType]=unset, **kwargs): + """ + A choice option for a dropdown or multiselect impact field. + + :param description: The description of the choice. + :type description: str, optional + + :param display_name: The display name of the choice. + :type display_name: str + + :param value: The value of the choice. + :type value: str + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.display_name = display_name + self_.value = value diff --git a/datadog_api_client/v2/model/incident_impact_field_data_attributes_request.py b/datadog_api_client/v2/model/incident_impact_field_data_attributes_request.py new file mode 100644 index 0000000000..e50583c59d --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_data_attributes_request.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_field_choice import IncidentImpactFieldChoice + from datadog_api_client.v2.model.incident_impact_field_value_type import IncidentImpactFieldValueType + +class IncidentImpactFieldDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_field_choice import IncidentImpactFieldChoice + from datadog_api_client.v2.model.incident_impact_field_value_type import IncidentImpactFieldValueType + return { + "display_name": (str,), + "field_choices": ([IncidentImpactFieldChoice],), + "field_type": (IncidentImpactFieldValueType,), + "name": (str,), + "tag_key": (str, none_type), + } + attribute_map = { + "display_name": "display_name", + "field_choices": "field_choices", + "field_type": "field_type", + "name": "name", + "tag_key": "tag_key", + } + + def __init__(self_, display_name: str, field_type: IncidentImpactFieldValueType, name: str, field_choices: Union[List[IncidentImpactFieldChoice], UnsetType]=unset, tag_key: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes for creating an impact field. + + :param display_name: The display name of the impact field. + :type display_name: str + + :param field_choices: The choices for dropdown or multiselect fields. + :type field_choices: [IncidentImpactFieldChoice], optional + + :param field_type: The type of an impact field. + :type field_type: IncidentImpactFieldValueType + + :param name: The normalized name of the impact field (used as identifier). + :type name: str + + :param tag_key: The tag key associated with the field (for metrictag type). + :type tag_key: str, none_type, optional + """ + if field_choices is not unset: + kwargs["field_choices"] = field_choices + if tag_key is not unset: + kwargs["tag_key"] = tag_key + super().__init__(kwargs) + + + self_.display_name = display_name + self_.field_type = field_type + self_.name = name diff --git a/datadog_api_client/v2/model/incident_impact_field_data_attributes_response.py b/datadog_api_client/v2/model/incident_impact_field_data_attributes_response.py new file mode 100644 index 0000000000..7538e99354 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_data_attributes_response.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_field_choice import IncidentImpactFieldChoice + from datadog_api_client.v2.model.incident_impact_field_value_type import IncidentImpactFieldValueType + +class IncidentImpactFieldDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_field_choice import IncidentImpactFieldChoice + from datadog_api_client.v2.model.incident_impact_field_value_type import IncidentImpactFieldValueType + return { + "display_name": (str,), + "field_choices": ([IncidentImpactFieldChoice],), + "field_type": (IncidentImpactFieldValueType,), + "name": (str,), + "tag_key": (str, none_type), + } + attribute_map = { + "display_name": "display_name", + "field_choices": "field_choices", + "field_type": "field_type", + "name": "name", + "tag_key": "tag_key", + } + + def __init__(self_, display_name: str, field_type: IncidentImpactFieldValueType, name: str, field_choices: Union[List[IncidentImpactFieldChoice], UnsetType]=unset, tag_key: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of an impact field in a response. + + :param display_name: The display name of the impact field. + :type display_name: str + + :param field_choices: The choices for dropdown or multiselect fields. + :type field_choices: [IncidentImpactFieldChoice], optional + + :param field_type: The type of an impact field. + :type field_type: IncidentImpactFieldValueType + + :param name: The normalized name of the impact field. + :type name: str + + :param tag_key: The tag key associated with the field. + :type tag_key: str, none_type, optional + """ + if field_choices is not unset: + kwargs["field_choices"] = field_choices + if tag_key is not unset: + kwargs["tag_key"] = tag_key + super().__init__(kwargs) + + + self_.display_name = display_name + self_.field_type = field_type + self_.name = name diff --git a/datadog_api_client/v2/model/incident_impact_field_data_request.py b/datadog_api_client/v2/model/incident_impact_field_data_request.py new file mode 100644 index 0000000000..f8668a23e4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_data_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_field_data_attributes_request import IncidentImpactFieldDataAttributesRequest + from datadog_api_client.v2.model.incident_impact_field_relationships_request import IncidentImpactFieldRelationshipsRequest + from datadog_api_client.v2.model.incident_impact_field_type import IncidentImpactFieldType + +class IncidentImpactFieldDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_field_data_attributes_request import IncidentImpactFieldDataAttributesRequest + from datadog_api_client.v2.model.incident_impact_field_relationships_request import IncidentImpactFieldRelationshipsRequest + from datadog_api_client.v2.model.incident_impact_field_type import IncidentImpactFieldType + return { + "attributes": (IncidentImpactFieldDataAttributesRequest,), + "relationships": (IncidentImpactFieldRelationshipsRequest,), + "type": (IncidentImpactFieldType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentImpactFieldDataAttributesRequest, relationships: IncidentImpactFieldRelationshipsRequest, type: IncidentImpactFieldType, **kwargs): + """ + Impact field data in a create request. + + :param attributes: Attributes for creating an impact field. + :type attributes: IncidentImpactFieldDataAttributesRequest + + :param relationships: Relationships for an impact field create request. + :type relationships: IncidentImpactFieldRelationshipsRequest + + :param type: Impact field resource type. + :type type: IncidentImpactFieldType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/incident_impact_field_data_response.py b/datadog_api_client/v2/model/incident_impact_field_data_response.py new file mode 100644 index 0000000000..53e9246c6f --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_field_data_attributes_response import IncidentImpactFieldDataAttributesResponse + from datadog_api_client.v2.model.incident_impact_field_relationships import IncidentImpactFieldRelationships + from datadog_api_client.v2.model.incident_impact_field_type import IncidentImpactFieldType + +class IncidentImpactFieldDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_field_data_attributes_response import IncidentImpactFieldDataAttributesResponse + from datadog_api_client.v2.model.incident_impact_field_relationships import IncidentImpactFieldRelationships + from datadog_api_client.v2.model.incident_impact_field_type import IncidentImpactFieldType + return { + "attributes": (IncidentImpactFieldDataAttributesResponse,), + "id": (UUID,), + "relationships": (IncidentImpactFieldRelationships,), + "type": (IncidentImpactFieldType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentImpactFieldDataAttributesResponse, id: UUID, type: IncidentImpactFieldType, relationships: Union[IncidentImpactFieldRelationships, UnsetType]=unset, **kwargs): + """ + Impact field data in a response. + + :param attributes: Attributes of an impact field in a response. + :type attributes: IncidentImpactFieldDataAttributesResponse + + :param id: The impact field identifier. + :type id: UUID + + :param relationships: Relationships for an impact field. + :type relationships: IncidentImpactFieldRelationships, optional + + :param type: Impact field resource type. + :type type: IncidentImpactFieldType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_impact_field_relationships.py b/datadog_api_client/v2/model/incident_impact_field_relationships.py new file mode 100644 index 0000000000..3fe090f058 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_relationships.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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 + +class IncidentImpactFieldRelationships(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 + return { + "created_by_user": (RelationshipToUser,), + "incident_type": (RelationshipToIncidentType,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "incident_type": "incident_type", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, incident_type: Union[RelationshipToIncidentType, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + Relationships for an impact field. + + :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 + """ + 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 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_impact_field_relationships_request.py b/datadog_api_client/v2/model/incident_impact_field_relationships_request.py new file mode 100644 index 0000000000..bec61e7adc --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_relationships_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + +class IncidentImpactFieldRelationshipsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + return { + "incident_type": (RelationshipToIncidentType,), + } + attribute_map = { + "incident_type": "incident_type", + } + + def __init__(self_, incident_type: RelationshipToIncidentType, **kwargs): + """ + Relationships for an impact field create request. + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType + """ + super().__init__(kwargs) + + + self_.incident_type = incident_type diff --git a/datadog_api_client/v2/model/incident_impact_field_request.py b/datadog_api_client/v2/model/incident_impact_field_request.py new file mode 100644 index 0000000000..759aba887a --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_field_data_request import IncidentImpactFieldDataRequest + +class IncidentImpactFieldRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_field_data_request import IncidentImpactFieldDataRequest + return { + "data": (IncidentImpactFieldDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentImpactFieldDataRequest, **kwargs): + """ + Request payload for creating an impact field. + + :param data: Impact field data in a create request. + :type data: IncidentImpactFieldDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_impact_field_response.py b/datadog_api_client/v2/model/incident_impact_field_response.py new file mode 100644 index 0000000000..887b8027d7 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_field_data_response import IncidentImpactFieldDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentImpactFieldResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_field_data_response import IncidentImpactFieldDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": (IncidentImpactFieldDataResponse,), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentImpactFieldDataResponse, included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with a single impact field. + + :param data: Impact field data in a response. + :type data: IncidentImpactFieldDataResponse + + :param included: Included related resources. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_impact_field_type.py b/datadog_api_client/v2/model/incident_impact_field_type.py new file mode 100644 index 0000000000..ef48a4dcd9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentImpactFieldType(ModelSimple): + """ + Impact field resource type. + + :param value: If omitted defaults to "impact_fields". Must be one of ["impact_fields"]. + :type value: str + """ + + allowed_values = { + "impact_fields", + } + IMPACT_FIELDS: ClassVar["IncidentImpactFieldType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentImpactFieldType.IMPACT_FIELDS = IncidentImpactFieldType("impact_fields") diff --git a/datadog_api_client/v2/model/incident_impact_field_value_type.py b/datadog_api_client/v2/model/incident_impact_field_value_type.py new file mode 100644 index 0000000000..54ba6d80c4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_field_value_type.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentImpactFieldValueType(ModelSimple): + """ + The type of an impact field. + + :param value: Must be one of ["dropdown", "text", "textarray", "metrictag", "number", "datetime", "multiselect"]. + :type value: str + """ + + allowed_values = { + "dropdown", + "text", + "textarray", + "metrictag", + "number", + "datetime", + "multiselect", + } + DROPDOWN: ClassVar["IncidentImpactFieldValueType"] + TEXT: ClassVar["IncidentImpactFieldValueType"] + TEXTARRAY: ClassVar["IncidentImpactFieldValueType"] + METRICTAG: ClassVar["IncidentImpactFieldValueType"] + NUMBER: ClassVar["IncidentImpactFieldValueType"] + DATETIME: ClassVar["IncidentImpactFieldValueType"] + MULTISELECT: ClassVar["IncidentImpactFieldValueType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentImpactFieldValueType.DROPDOWN = IncidentImpactFieldValueType("dropdown") +IncidentImpactFieldValueType.TEXT = IncidentImpactFieldValueType("text") +IncidentImpactFieldValueType.TEXTARRAY = IncidentImpactFieldValueType("textarray") +IncidentImpactFieldValueType.METRICTAG = IncidentImpactFieldValueType("metrictag") +IncidentImpactFieldValueType.NUMBER = IncidentImpactFieldValueType("number") +IncidentImpactFieldValueType.DATETIME = IncidentImpactFieldValueType("datetime") +IncidentImpactFieldValueType.MULTISELECT = IncidentImpactFieldValueType("multiselect") diff --git a/datadog_api_client/v2/model/incident_impact_fields_object.py b/datadog_api_client/v2/model/incident_impact_fields_object.py new file mode 100644 index 0000000000..ceac32ef40 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_fields_object.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentImpactFieldsObject(ModelNormal): + + def __init__(self_, **kwargs): + """ + An object mapping impact field names to field values. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_impact_fields_response.py b/datadog_api_client/v2/model/incident_impact_fields_response.py new file mode 100644 index 0000000000..275b6ec7d3 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_fields_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_field_data_response import IncidentImpactFieldDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentImpactFieldsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_field_data_response import IncidentImpactFieldDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": ([IncidentImpactFieldDataResponse],), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: List[IncidentImpactFieldDataResponse], included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with a list of impact fields. + + :param data: List of impact fields. + :type data: [IncidentImpactFieldDataResponse] + + :param included: Included related resources. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_impact_patch_attributes.py b/datadog_api_client/v2/model/incident_impact_patch_attributes.py new file mode 100644 index 0000000000..28a3caefff --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_patch_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_fields_object import IncidentImpactFieldsObject + +class IncidentImpactPatchAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_fields_object import IncidentImpactFieldsObject + return { + "description": (str,), + "end_at": (datetime, none_type), + "fields": (IncidentImpactFieldsObject,), + "start_at": (datetime,), + } + attribute_map = { + "description": "description", + "end_at": "end_at", + "fields": "fields", + "start_at": "start_at", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, end_at: Union[datetime, none_type, UnsetType]=unset, fields: Union[IncidentImpactFieldsObject, UnsetType]=unset, start_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + The incident impact's attributes for a patch request. All fields are optional. + + :param description: Description of the impact. + :type description: str, optional + + :param end_at: Timestamp when the impact ended. + :type end_at: datetime, none_type, optional + + :param fields: An object mapping impact field names to field values. + :type fields: IncidentImpactFieldsObject, optional + + :param start_at: Timestamp when the impact started. + :type start_at: datetime, optional + """ + if description is not unset: + kwargs["description"] = description + if end_at is not unset: + kwargs["end_at"] = end_at + if fields is not unset: + kwargs["fields"] = fields + if start_at is not unset: + kwargs["start_at"] = start_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_impact_patch_data.py b/datadog_api_client/v2/model/incident_impact_patch_data.py new file mode 100644 index 0000000000..6805b4528a --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_patch_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_patch_attributes import IncidentImpactPatchAttributes + from datadog_api_client.v2.model.incident_impact_type import IncidentImpactType + +class IncidentImpactPatchData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_patch_attributes import IncidentImpactPatchAttributes + from datadog_api_client.v2.model.incident_impact_type import IncidentImpactType + return { + "attributes": (IncidentImpactPatchAttributes,), + "type": (IncidentImpactType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: IncidentImpactType, attributes: Union[IncidentImpactPatchAttributes, UnsetType]=unset, **kwargs): + """ + Incident impact data for a patch request. + + :param attributes: The incident impact's attributes for a patch request. All fields are optional. + :type attributes: IncidentImpactPatchAttributes, optional + + :param type: Incident impact resource type. + :type type: IncidentImpactType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/incident_impact_patch_request.py b/datadog_api_client/v2/model/incident_impact_patch_request.py new file mode 100644 index 0000000000..132831d081 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_patch_data import IncidentImpactPatchData + +class IncidentImpactPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_patch_data import IncidentImpactPatchData + return { + "data": (IncidentImpactPatchData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentImpactPatchData, **kwargs): + """ + Patch request for an incident impact. + + :param data: Incident impact data for a patch request. + :type data: IncidentImpactPatchData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_impact_related_object.py b/datadog_api_client/v2/model/incident_impact_related_object.py new file mode 100644 index 0000000000..8a457b5a32 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_related_object.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentImpactRelatedObject(ModelSimple): + """ + A reference to a resource related to an incident impact. + + :param value: Must be one of ["incident", "created_by_user", "last_modified_by_user"]. + :type value: str + """ + + allowed_values = { + "incident", + "created_by_user", + "last_modified_by_user", + } + INCIDENT: ClassVar["IncidentImpactRelatedObject"] + CREATED_BY_USER: ClassVar["IncidentImpactRelatedObject"] + LAST_MODIFIED_BY_USER: ClassVar["IncidentImpactRelatedObject"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentImpactRelatedObject.INCIDENT = IncidentImpactRelatedObject("incident") +IncidentImpactRelatedObject.CREATED_BY_USER = IncidentImpactRelatedObject("created_by_user") +IncidentImpactRelatedObject.LAST_MODIFIED_BY_USER = IncidentImpactRelatedObject("last_modified_by_user") diff --git a/datadog_api_client/v2/model/incident_impact_relationships.py b/datadog_api_client/v2/model/incident_impact_relationships.py new file mode 100644 index 0000000000..cd8143ce99 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_relationships.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.relationship_to_incident import RelationshipToIncident + +class IncidentImpactRelationships(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 import RelationshipToIncident + return { + "created_by_user": (RelationshipToUser,), + "incident": (RelationshipToIncident,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "incident": "incident", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, incident: Union[RelationshipToIncident, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + The incident impact's resource relationships. + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param incident: Relationship to incident. + :type incident: RelationshipToIncident, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if incident is not unset: + kwargs["incident"] = incident + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_impact_response.py b/datadog_api_client/v2/model/incident_impact_response.py new file mode 100644 index 0000000000..8033981e5a --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_response_data import IncidentImpactResponseData + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentImpactResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_response_data import IncidentImpactResponseData + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": (IncidentImpactResponseData,), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentImpactResponseData, included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with an incident impact. + + :param data: Incident impact data from a response. + :type data: IncidentImpactResponseData + + :param included: Included related resources that the user requested. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_impact_response_data.py b/datadog_api_client/v2/model/incident_impact_response_data.py new file mode 100644 index 0000000000..2bc15dba48 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_response_data.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_attributes import IncidentImpactAttributes + from datadog_api_client.v2.model.incident_impact_relationships import IncidentImpactRelationships + from datadog_api_client.v2.model.incident_impact_type import IncidentImpactType + +class IncidentImpactResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_attributes import IncidentImpactAttributes + from datadog_api_client.v2.model.incident_impact_relationships import IncidentImpactRelationships + from datadog_api_client.v2.model.incident_impact_type import IncidentImpactType + return { + "attributes": (IncidentImpactAttributes,), + "id": (str,), + "relationships": (IncidentImpactRelationships,), + "type": (IncidentImpactType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentImpactType, attributes: Union[IncidentImpactAttributes, UnsetType]=unset, relationships: Union[IncidentImpactRelationships, UnsetType]=unset, **kwargs): + """ + Incident impact data from a response. + + :param attributes: The incident impact's attributes. + :type attributes: IncidentImpactAttributes, optional + + :param id: The incident impact's ID. + :type id: str + + :param relationships: The incident impact's resource relationships. + :type relationships: IncidentImpactRelationships, optional + + :param type: Incident impact resource type. + :type type: IncidentImpactType + """ + 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/datadog_api_client/v2/model/incident_impact_type.py b/datadog_api_client/v2/model/incident_impact_type.py new file mode 100644 index 0000000000..3d966b0f71 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impact_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentImpactType(ModelSimple): + """ + Incident impact resource type. + + :param value: If omitted defaults to "incident_impacts". Must be one of ["incident_impacts"]. + :type value: str + """ + + allowed_values = { + "incident_impacts", + } + INCIDENT_IMPACTS: ClassVar["IncidentImpactType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentImpactType.INCIDENT_IMPACTS = IncidentImpactType("incident_impacts") diff --git a/datadog_api_client/v2/model/incident_impacts_response.py b/datadog_api_client/v2/model/incident_impacts_response.py new file mode 100644 index 0000000000..2414e20625 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impacts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impact_response_data import IncidentImpactResponseData + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentImpactsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impact_response_data import IncidentImpactResponseData + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": ([IncidentImpactResponseData],), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: List[IncidentImpactResponseData], included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with a list of incident impacts. + + :param data: An array of incident impacts. + :type data: [IncidentImpactResponseData] + + :param included: Included related resources that the user requested. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_impacts_type.py b/datadog_api_client/v2/model/incident_impacts_type.py new file mode 100644 index 0000000000..8d450ab502 --- /dev/null +++ b/datadog_api_client/v2/model/incident_impacts_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentImpactsType(ModelSimple): + """ + The incident impacts type. + + :param value: If omitted defaults to "incident_impacts". Must be one of ["incident_impacts"]. + :type value: str + """ + + allowed_values = { + "incident_impacts", + } + INCIDENT_IMPACTS: ClassVar["IncidentImpactsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentImpactsType.INCIDENT_IMPACTS = IncidentImpactsType("incident_impacts") diff --git a/datadog_api_client/v2/model/incident_import_field_attributes.py b/datadog_api_client/v2/model/incident_import_field_attributes.py new file mode 100644 index 0000000000..57ac79ec0d --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_field_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentImportFieldAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Dynamic fields for which selections can be made, with field names as keys. + + :param value: The single value selected for this field. + :type value: str, none_type, 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.incident_import_field_attributes_single_value import IncidentImportFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_import_field_attributes_multiple_value import IncidentImportFieldAttributesMultipleValue + return { + "oneOf": [ + IncidentImportFieldAttributesSingleValue, + IncidentImportFieldAttributesMultipleValue, + ], + } diff --git a/datadog_api_client/v2/model/incident_import_field_attributes_multiple_value.py b/datadog_api_client/v2/model/incident_import_field_attributes_multiple_value.py new file mode 100644 index 0000000000..a7e66e264b --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_field_attributes_multiple_value.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentImportFieldAttributesMultipleValue(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "value": ([str], none_type), + } + attribute_map = { + "value": "value", + } + + def __init__(self_, value: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + A field with potentially multiple values selected. + + :param value: The multiple values selected for this field. + :type value: [str], none_type, optional + """ + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_import_field_attributes_single_value.py b/datadog_api_client/v2/model/incident_import_field_attributes_single_value.py new file mode 100644 index 0000000000..66c20789b9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_field_attributes_single_value.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentImportFieldAttributesSingleValue(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "value": (str, none_type), + } + attribute_map = { + "value": "value", + } + + def __init__(self_, value: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + A field with a single value selected. + + :param value: The single value selected for this field. + :type value: str, none_type, optional + """ + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_import_related_object.py b/datadog_api_client/v2/model/incident_import_related_object.py new file mode 100644 index 0000000000..dc2c88c674 --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_related_object.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentImportRelatedObject(ModelSimple): + """ + Object related to an incident that can be included in the response. + + :param value: Must be one of ["last_modified_by_user", "created_by_user", "commander_user", "declared_by_user", "incident_type"]. + :type value: str + """ + + allowed_values = { + "last_modified_by_user", + "created_by_user", + "commander_user", + "declared_by_user", + "incident_type", + } + LAST_MODIFIED_BY_USER: ClassVar["IncidentImportRelatedObject"] + CREATED_BY_USER: ClassVar["IncidentImportRelatedObject"] + COMMANDER_USER: ClassVar["IncidentImportRelatedObject"] + DECLARED_BY_USER: ClassVar["IncidentImportRelatedObject"] + INCIDENT_TYPE: ClassVar["IncidentImportRelatedObject"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentImportRelatedObject.LAST_MODIFIED_BY_USER = IncidentImportRelatedObject("last_modified_by_user") +IncidentImportRelatedObject.CREATED_BY_USER = IncidentImportRelatedObject("created_by_user") +IncidentImportRelatedObject.COMMANDER_USER = IncidentImportRelatedObject("commander_user") +IncidentImportRelatedObject.DECLARED_BY_USER = IncidentImportRelatedObject("declared_by_user") +IncidentImportRelatedObject.INCIDENT_TYPE = IncidentImportRelatedObject("incident_type") diff --git a/datadog_api_client/v2/model/incident_import_relationships.py b/datadog_api_client/v2/model/incident_import_relationships.py new file mode 100644 index 0000000000..ebe2f42608 --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + +class IncidentImportRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + return { + "commander_user": (NullableRelationshipToUser,), + "declared_by_user": (NullableRelationshipToUser,), + } + attribute_map = { + "commander_user": "commander_user", + "declared_by_user": "declared_by_user", + } + + def __init__(self_, commander_user: Union[NullableRelationshipToUser, none_type, UnsetType]=unset, declared_by_user: Union[NullableRelationshipToUser, none_type, UnsetType]=unset, **kwargs): + """ + The relationships for an incident import request. + + :param commander_user: Relationship to user. + :type commander_user: NullableRelationshipToUser, none_type, optional + + :param declared_by_user: Relationship to user. + :type declared_by_user: NullableRelationshipToUser, none_type, optional + """ + if commander_user is not unset: + kwargs["commander_user"] = commander_user + if declared_by_user is not unset: + kwargs["declared_by_user"] = declared_by_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_import_request.py b/datadog_api_client/v2/model/incident_import_request.py new file mode 100644 index 0000000000..31b717c5ca --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_import_request_data import IncidentImportRequestData + from datadog_api_client.v2.model.incident_import_field_attributes_single_value import IncidentImportFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_import_field_attributes_multiple_value import IncidentImportFieldAttributesMultipleValue + +class IncidentImportRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_import_request_data import IncidentImportRequestData + return { + "data": (IncidentImportRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentImportRequestData, **kwargs): + """ + Import request for an incident. Used to import historical incidents from external systems. + + :param data: Incident data for an import request. + :type data: IncidentImportRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_import_request_attributes.py b/datadog_api_client/v2/model/incident_import_request_attributes.py new file mode 100644 index 0000000000..a3bd5ff377 --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_request_attributes.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_import_field_attributes import IncidentImportFieldAttributes + from datadog_api_client.v2.model.incident_import_visibility import IncidentImportVisibility + from datadog_api_client.v2.model.incident_import_field_attributes_single_value import IncidentImportFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_import_field_attributes_multiple_value import IncidentImportFieldAttributesMultipleValue + +class IncidentImportRequestAttributes(ModelNormal): + validations = { + "title": { + "max_length": 1024, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_import_field_attributes import IncidentImportFieldAttributes + from datadog_api_client.v2.model.incident_import_visibility import IncidentImportVisibility + return { + "declared": (datetime,), + "detected": (datetime,), + "fields": ({str: (IncidentImportFieldAttributes,)},), + "incident_type_uuid": (str,), + "resolved": (datetime,), + "title": (str,), + "visibility": (IncidentImportVisibility,), + } + attribute_map = { + "declared": "declared", + "detected": "detected", + "fields": "fields", + "incident_type_uuid": "incident_type_uuid", + "resolved": "resolved", + "title": "title", + "visibility": "visibility", + } + + def __init__(self_, title: str, declared: Union[datetime, UnsetType]=unset, detected: Union[datetime, UnsetType]=unset, fields: Union[Dict[str, Union[IncidentImportFieldAttributes, IncidentImportFieldAttributesSingleValue, IncidentImportFieldAttributesMultipleValue]], UnsetType]=unset, incident_type_uuid: Union[str, UnsetType]=unset, resolved: Union[datetime, UnsetType]=unset, visibility: Union[IncidentImportVisibility, UnsetType]=unset, **kwargs): + """ + The incident's attributes for an import request. + + :param declared: Timestamp when the incident was declared. + :type declared: datetime, optional + + :param detected: Timestamp when the incident was detected. + :type detected: datetime, optional + + :param fields: A condensed view of the user-defined fields for which to create initial selections. + :type fields: {str: (IncidentImportFieldAttributes,)}, optional + + :param incident_type_uuid: A unique identifier that represents the incident type. If not provided, the default incident type is used. + :type incident_type_uuid: str, optional + + :param resolved: Timestamp when the incident was resolved. Can only be set when the state field is set to 'resolved'. + :type resolved: datetime, optional + + :param title: The title of the incident that summarizes what happened. + :type title: str + + :param visibility: The visibility of the incident. + :type visibility: IncidentImportVisibility, optional + """ + if declared is not unset: + kwargs["declared"] = declared + if detected is not unset: + kwargs["detected"] = detected + if fields is not unset: + kwargs["fields"] = fields + if incident_type_uuid is not unset: + kwargs["incident_type_uuid"] = incident_type_uuid + if resolved is not unset: + kwargs["resolved"] = resolved + if visibility is not unset: + kwargs["visibility"] = visibility + super().__init__(kwargs) + + + self_.title = title diff --git a/datadog_api_client/v2/model/incident_import_request_data.py b/datadog_api_client/v2/model/incident_import_request_data.py new file mode 100644 index 0000000000..9d0420dac8 --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_request_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_import_request_attributes import IncidentImportRequestAttributes + from datadog_api_client.v2.model.incident_import_relationships import IncidentImportRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + from datadog_api_client.v2.model.incident_import_field_attributes_single_value import IncidentImportFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_import_field_attributes_multiple_value import IncidentImportFieldAttributesMultipleValue + +class IncidentImportRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_import_request_attributes import IncidentImportRequestAttributes + from datadog_api_client.v2.model.incident_import_relationships import IncidentImportRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + return { + "attributes": (IncidentImportRequestAttributes,), + "relationships": (IncidentImportRelationships,), + "type": (IncidentType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentImportRequestAttributes, type: IncidentType, relationships: Union[IncidentImportRelationships, UnsetType]=unset, **kwargs): + """ + Incident data for an import request. + + :param attributes: The incident's attributes for an import request. + :type attributes: IncidentImportRequestAttributes + + :param relationships: The relationships for an incident import request. + :type relationships: IncidentImportRelationships, optional + + :param type: Incident resource type. + :type type: IncidentType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_import_response.py b/datadog_api_client/v2/model/incident_import_response.py new file mode 100644 index 0000000000..59546641a6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_import_response_data import IncidentImportResponseData + from datadog_api_client.v2.model.incident_import_response_included_item import IncidentImportResponseIncludedItem + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + +class IncidentImportResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_import_response_data import IncidentImportResponseData + from datadog_api_client.v2.model.incident_import_response_included_item import IncidentImportResponseIncludedItem + return { + "data": (IncidentImportResponseData,), + "included": ([IncidentImportResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentImportResponseData, included: Union[List[Union[IncidentImportResponseIncludedItem, IncidentUserData, IncidentTypeObject]], UnsetType]=unset, **kwargs): + """ + Response with an incident. + + :param data: Incident data from an import response. + :type data: IncidentImportResponseData + + :param included: Included related resources that the user requested. + :type included: [IncidentImportResponseIncludedItem], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_import_response_attributes.py b/datadog_api_client/v2/model/incident_import_response_attributes.py new file mode 100644 index 0000000000..1ab84009e0 --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_response_attributes.py @@ -0,0 +1,222 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_field_attributes import IncidentFieldAttributes + 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_severity import IncidentSeverity + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentImportResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_field_attributes import IncidentFieldAttributes + 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_severity import IncidentSeverity + return { + "archived": (datetime, none_type), + "case_id": (int, none_type), + "created": (datetime,), + "created_by_uuid": (str, none_type), + "creation_idempotency_key": (str, none_type), + "customer_impact_end": (datetime, none_type), + "customer_impact_scope": (str, none_type), + "customer_impact_start": (datetime, none_type), + "declared": (datetime, none_type), + "declared_by_uuid": (str, none_type), + "detected": (datetime, none_type), + "fields": ({str: (IncidentFieldAttributes,)},), + "incident_type_uuid": (str,), + "is_test": (bool,), + "last_modified_by_uuid": (str, none_type), + "modified": (datetime,), + "non_datadog_creator": (IncidentNonDatadogCreator,), + "notification_handles": ([IncidentNotificationHandle], none_type), + "public_id": (int,), + "resolved": (datetime, none_type), + "severity": (IncidentSeverity,), + "state": (str, none_type), + "title": (str,), + "visibility": (str, none_type), + } + attribute_map = { + "archived": "archived", + "case_id": "case_id", + "created": "created", + "created_by_uuid": "created_by_uuid", + "creation_idempotency_key": "creation_idempotency_key", + "customer_impact_end": "customer_impact_end", + "customer_impact_scope": "customer_impact_scope", + "customer_impact_start": "customer_impact_start", + "declared": "declared", + "declared_by_uuid": "declared_by_uuid", + "detected": "detected", + "fields": "fields", + "incident_type_uuid": "incident_type_uuid", + "is_test": "is_test", + "last_modified_by_uuid": "last_modified_by_uuid", + "modified": "modified", + "non_datadog_creator": "non_datadog_creator", + "notification_handles": "notification_handles", + "public_id": "public_id", + "resolved": "resolved", + "severity": "severity", + "state": "state", + "title": "title", + "visibility": "visibility", + } + read_only_vars = { + "archived", + "created", + "modified", + } + + def __init__(self_, title: str, archived: Union[datetime, none_type, UnsetType]=unset, case_id: Union[int, none_type, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, created_by_uuid: Union[str, none_type, UnsetType]=unset, creation_idempotency_key: Union[str, none_type, UnsetType]=unset, customer_impact_end: Union[datetime, none_type, UnsetType]=unset, customer_impact_scope: Union[str, none_type, UnsetType]=unset, customer_impact_start: Union[datetime, none_type, UnsetType]=unset, declared: Union[datetime, none_type, UnsetType]=unset, declared_by_uuid: Union[str, none_type, UnsetType]=unset, detected: Union[datetime, none_type, UnsetType]=unset, fields: Union[Dict[str, Union[IncidentFieldAttributes, IncidentFieldAttributesSingleValue, IncidentFieldAttributesMultipleValue]], UnsetType]=unset, incident_type_uuid: Union[str, UnsetType]=unset, is_test: Union[bool, UnsetType]=unset, last_modified_by_uuid: Union[str, none_type, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, non_datadog_creator: Union[IncidentNonDatadogCreator, none_type, UnsetType]=unset, notification_handles: Union[List[IncidentNotificationHandle], none_type, UnsetType]=unset, public_id: Union[int, UnsetType]=unset, resolved: Union[datetime, none_type, UnsetType]=unset, severity: Union[IncidentSeverity, UnsetType]=unset, state: Union[str, none_type, UnsetType]=unset, visibility: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The incident's attributes from an import response. + + :param archived: Timestamp when the incident was archived. + :type archived: datetime, none_type, optional + + :param case_id: The incident case ID. + :type case_id: int, none_type, optional + + :param created: Timestamp when the incident was created. + :type created: datetime, optional + + :param created_by_uuid: UUID of the user who created the incident. + :type created_by_uuid: str, none_type, optional + + :param creation_idempotency_key: A unique key used to ensure idempotent incident creation. + :type creation_idempotency_key: str, none_type, optional + + :param customer_impact_end: Timestamp when customers were no longer impacted by the incident. + :type customer_impact_end: datetime, none_type, optional + + :param customer_impact_scope: A summary of the impact customers experienced during the incident. + :type customer_impact_scope: str, none_type, optional + + :param customer_impact_start: Timestamp when customers began to be impacted by the incident. + :type customer_impact_start: datetime, none_type, optional + + :param declared: Timestamp when the incident was declared. + :type declared: datetime, none_type, optional + + :param declared_by_uuid: UUID of the user who declared the incident. + :type declared_by_uuid: str, none_type, optional + + :param detected: Timestamp when the incident was detected. + :type detected: datetime, none_type, optional + + :param fields: A condensed view of the user-defined fields attached to incidents. + :type fields: {str: (IncidentFieldAttributes,)}, optional + + :param incident_type_uuid: A unique identifier that represents an incident type. + :type incident_type_uuid: str, optional + + :param is_test: A flag indicating whether the incident is a test incident. + :type is_test: bool, optional + + :param last_modified_by_uuid: UUID of the user who last modified the incident. + :type last_modified_by_uuid: str, none_type, optional + + :param modified: Timestamp when the incident was last modified. + :type modified: datetime, optional + + :param non_datadog_creator: Incident's non Datadog creator. + :type non_datadog_creator: IncidentNonDatadogCreator, none_type, optional + + :param notification_handles: Notification handles that are notified of the incident during update. + :type notification_handles: [IncidentNotificationHandle], none_type, optional + + :param public_id: The monotonically increasing integer ID for the incident. + :type public_id: int, optional + + :param resolved: Timestamp when the incident's state was last changed from active or stable to resolved or completed. + :type resolved: datetime, none_type, optional + + :param severity: The incident severity. + :type severity: IncidentSeverity, optional + + :param state: The state of the incident. + :type state: str, none_type, optional + + :param title: The title of the incident that summarizes what happened. + :type title: str + + :param visibility: The incident visibility status. + :type visibility: str, none_type, optional + """ + if archived is not unset: + kwargs["archived"] = archived + if case_id is not unset: + kwargs["case_id"] = case_id + if created is not unset: + kwargs["created"] = created + if created_by_uuid is not unset: + kwargs["created_by_uuid"] = created_by_uuid + if creation_idempotency_key is not unset: + kwargs["creation_idempotency_key"] = creation_idempotency_key + if customer_impact_end is not unset: + kwargs["customer_impact_end"] = customer_impact_end + if customer_impact_scope is not unset: + kwargs["customer_impact_scope"] = customer_impact_scope + if customer_impact_start is not unset: + kwargs["customer_impact_start"] = customer_impact_start + if declared is not unset: + kwargs["declared"] = declared + if declared_by_uuid is not unset: + kwargs["declared_by_uuid"] = declared_by_uuid + if detected is not unset: + kwargs["detected"] = detected + if fields is not unset: + kwargs["fields"] = fields + if incident_type_uuid is not unset: + kwargs["incident_type_uuid"] = incident_type_uuid + if is_test is not unset: + kwargs["is_test"] = is_test + if last_modified_by_uuid is not unset: + kwargs["last_modified_by_uuid"] = last_modified_by_uuid + if modified is not unset: + kwargs["modified"] = modified + if non_datadog_creator is not unset: + kwargs["non_datadog_creator"] = non_datadog_creator + if notification_handles is not unset: + kwargs["notification_handles"] = notification_handles + if public_id is not unset: + kwargs["public_id"] = public_id + if resolved is not unset: + kwargs["resolved"] = resolved + if severity is not unset: + kwargs["severity"] = severity + if state is not unset: + kwargs["state"] = state + if visibility is not unset: + kwargs["visibility"] = visibility + super().__init__(kwargs) + + + self_.title = title diff --git a/datadog_api_client/v2/model/incident_import_response_data.py b/datadog_api_client/v2/model/incident_import_response_data.py new file mode 100644 index 0000000000..77b07833ec --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_import_response_attributes import IncidentImportResponseAttributes + from datadog_api_client.v2.model.incident_import_response_relationships import IncidentImportResponseRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentImportResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_import_response_attributes import IncidentImportResponseAttributes + from datadog_api_client.v2.model.incident_import_response_relationships import IncidentImportResponseRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + return { + "attributes": (IncidentImportResponseAttributes,), + "id": (str,), + "relationships": (IncidentImportResponseRelationships,), + "type": (IncidentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentType, attributes: Union[IncidentImportResponseAttributes, UnsetType]=unset, relationships: Union[IncidentImportResponseRelationships, UnsetType]=unset, **kwargs): + """ + Incident data from an import response. + + :param attributes: The incident's attributes from an import response. + :type attributes: IncidentImportResponseAttributes, optional + + :param id: The incident's ID. + :type id: str + + :param relationships: The incident's relationships from an import response. + :type relationships: IncidentImportResponseRelationships, optional + + :param type: Incident resource type. + :type type: IncidentType + """ + 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/datadog_api_client/v2/model/incident_import_response_included_item.py b/datadog_api_client/v2/model/incident_import_response_included_item.py new file mode 100644 index 0000000000..bb27df3f4a --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_response_included_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentImportResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to an incident that is included in the response. + + :param attributes: Attributes of user object returned by the API. + :type attributes: IncidentUserAttributes, optional + + :param id: ID of the user. + :type id: str, optional + + :param type: Users resource type. + :type type: UsersType, optional + + :param relationships: The incident type's resource relationships. + :type relationships: IncidentTypeRelationships, 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.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + return { + "oneOf": [ + IncidentUserData, + IncidentTypeObject, + ], + } diff --git a/datadog_api_client/v2/model/incident_import_response_relationships.py b/datadog_api_client/v2/model/incident_import_response_relationships.py new file mode 100644 index 0000000000..405e5281aa --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_response_relationships.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_attachment import RelationshipToIncidentAttachment + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.relationship_to_incident_impacts import RelationshipToIncidentImpacts + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + from datadog_api_client.v2.model.relationship_to_incident_integration_metadatas import RelationshipToIncidentIntegrationMetadatas + from datadog_api_client.v2.model.relationship_to_incident_responders import RelationshipToIncidentResponders + from datadog_api_client.v2.model.relationship_to_incident_user_defined_fields import RelationshipToIncidentUserDefinedFields + +class IncidentImportResponseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_attachment import RelationshipToIncidentAttachment + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.relationship_to_incident_impacts import RelationshipToIncidentImpacts + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + from datadog_api_client.v2.model.relationship_to_incident_integration_metadatas import RelationshipToIncidentIntegrationMetadatas + from datadog_api_client.v2.model.relationship_to_incident_responders import RelationshipToIncidentResponders + from datadog_api_client.v2.model.relationship_to_incident_user_defined_fields import RelationshipToIncidentUserDefinedFields + return { + "attachments": (RelationshipToIncidentAttachment,), + "commander_user": (NullableRelationshipToUser,), + "created_by_user": (RelationshipToUser,), + "declared_by_user": (RelationshipToUser,), + "impacts": (RelationshipToIncidentImpacts,), + "incident_type": (RelationshipToIncidentType,), + "integrations": (RelationshipToIncidentIntegrationMetadatas,), + "last_modified_by_user": (RelationshipToUser,), + "responders": (RelationshipToIncidentResponders,), + "user_defined_fields": (RelationshipToIncidentUserDefinedFields,), + } + attribute_map = { + "attachments": "attachments", + "commander_user": "commander_user", + "created_by_user": "created_by_user", + "declared_by_user": "declared_by_user", + "impacts": "impacts", + "incident_type": "incident_type", + "integrations": "integrations", + "last_modified_by_user": "last_modified_by_user", + "responders": "responders", + "user_defined_fields": "user_defined_fields", + } + + def __init__(self_, attachments: Union[RelationshipToIncidentAttachment, UnsetType]=unset, commander_user: Union[NullableRelationshipToUser, none_type, UnsetType]=unset, created_by_user: Union[RelationshipToUser, UnsetType]=unset, declared_by_user: Union[RelationshipToUser, UnsetType]=unset, impacts: Union[RelationshipToIncidentImpacts, UnsetType]=unset, incident_type: Union[RelationshipToIncidentType, UnsetType]=unset, integrations: Union[RelationshipToIncidentIntegrationMetadatas, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, responders: Union[RelationshipToIncidentResponders, UnsetType]=unset, user_defined_fields: Union[RelationshipToIncidentUserDefinedFields, UnsetType]=unset, **kwargs): + """ + The incident's relationships from an import response. + + :param attachments: A relationship reference for attachments. + :type attachments: RelationshipToIncidentAttachment, optional + + :param commander_user: Relationship to user. + :type commander_user: NullableRelationshipToUser, none_type, optional + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param declared_by_user: Relationship to user. + :type declared_by_user: RelationshipToUser, optional + + :param impacts: Relationship to impacts. + :type impacts: RelationshipToIncidentImpacts, optional + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType, optional + + :param integrations: A relationship reference for multiple integration metadata objects. + :type integrations: RelationshipToIncidentIntegrationMetadatas, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + + :param responders: Relationship to incident responders. + :type responders: RelationshipToIncidentResponders, optional + + :param user_defined_fields: Relationship to incident user defined fields. + :type user_defined_fields: RelationshipToIncidentUserDefinedFields, optional + """ + if attachments is not unset: + kwargs["attachments"] = attachments + if commander_user is not unset: + kwargs["commander_user"] = commander_user + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if declared_by_user is not unset: + kwargs["declared_by_user"] = declared_by_user + if impacts is not unset: + kwargs["impacts"] = impacts + if incident_type is not unset: + kwargs["incident_type"] = incident_type + if integrations is not unset: + kwargs["integrations"] = integrations + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if responders is not unset: + kwargs["responders"] = responders + if user_defined_fields is not unset: + kwargs["user_defined_fields"] = user_defined_fields + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_import_visibility.py b/datadog_api_client/v2/model/incident_import_visibility.py new file mode 100644 index 0000000000..e880036a5a --- /dev/null +++ b/datadog_api_client/v2/model/incident_import_visibility.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentImportVisibility(ModelSimple): + """ + The visibility of the incident. + + :param value: If omitted defaults to "organization". Must be one of ["organization", "private"]. + :type value: str + """ + + allowed_values = { + "organization", + "private", + } + ORGANIZATION: ClassVar["IncidentImportVisibility"] + PRIVATE: ClassVar["IncidentImportVisibility"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentImportVisibility.ORGANIZATION = IncidentImportVisibility("organization") +IncidentImportVisibility.PRIVATE = IncidentImportVisibility("private") diff --git a/datadog_api_client/v2/model/incident_integration_metadata_attributes.py b/datadog_api_client/v2/model/incident_integration_metadata_attributes.py new file mode 100644 index 0000000000..ce4b8b420b --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_attributes.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_integration_metadata_metadata import IncidentIntegrationMetadataMetadata + from datadog_api_client.v2.model.slack_integration_metadata import SlackIntegrationMetadata + from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata + from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata + +class IncidentIntegrationMetadataAttributes(ModelNormal): + validations = { + "integration_type": { + "inclusive_maximum": 100, + }, + "status": { + "inclusive_maximum": 5, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_integration_metadata_metadata import IncidentIntegrationMetadataMetadata + return { + "created": (datetime,), + "incident_id": (str,), + "integration_type": (int,), + "metadata": (IncidentIntegrationMetadataMetadata,), + "modified": (datetime,), + "status": (int,), + } + attribute_map = { + "created": "created", + "incident_id": "incident_id", + "integration_type": "integration_type", + "metadata": "metadata", + "modified": "modified", + "status": "status", + } + read_only_vars = { + "created", + "modified", + } + + def __init__(self_, integration_type: int, metadata: Union[IncidentIntegrationMetadataMetadata, SlackIntegrationMetadata, JiraIntegrationMetadata, MSTeamsIntegrationMetadata], created: Union[datetime, UnsetType]=unset, incident_id: Union[str, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, status: Union[int, UnsetType]=unset, **kwargs): + """ + Incident integration metadata's attributes for a create request. + + :param created: Timestamp when the incident todo was created. + :type created: datetime, optional + + :param incident_id: UUID of the incident this integration metadata is connected to. + :type incident_id: str, optional + + :param integration_type: A number indicating the type of integration this metadata is for. 1 indicates Slack; + 7 indicates Microsoft Teams; + 8 indicates Jira. + :type integration_type: int + + :param metadata: Incident integration metadata's metadata attribute. + :type metadata: IncidentIntegrationMetadataMetadata + + :param modified: Timestamp when the incident todo was last modified. + :type modified: datetime, optional + + :param status: A number indicating the status of this integration metadata. 0 indicates unknown; + 1 indicates pending; 2 indicates complete; 3 indicates manually created; + 4 indicates manually updated; 5 indicates failed. + :type status: int, optional + """ + if created is not unset: + kwargs["created"] = created + if incident_id is not unset: + kwargs["incident_id"] = incident_id + if modified is not unset: + kwargs["modified"] = modified + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + + self_.integration_type = integration_type + self_.metadata = metadata diff --git a/datadog_api_client/v2/model/incident_integration_metadata_create_data.py b/datadog_api_client/v2/model/incident_integration_metadata_create_data.py new file mode 100644 index 0000000000..0b4a71b950 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_create_data.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_integration_metadata_attributes import IncidentIntegrationMetadataAttributes + from datadog_api_client.v2.model.incident_integration_metadata_type import IncidentIntegrationMetadataType + from datadog_api_client.v2.model.slack_integration_metadata import SlackIntegrationMetadata + from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata + from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata + +class IncidentIntegrationMetadataCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_integration_metadata_attributes import IncidentIntegrationMetadataAttributes + from datadog_api_client.v2.model.incident_integration_metadata_type import IncidentIntegrationMetadataType + return { + "attributes": (IncidentIntegrationMetadataAttributes,), + "type": (IncidentIntegrationMetadataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentIntegrationMetadataAttributes, type: IncidentIntegrationMetadataType, **kwargs): + """ + Incident integration metadata data for a create request. + + :param attributes: Incident integration metadata's attributes for a create request. + :type attributes: IncidentIntegrationMetadataAttributes + + :param type: Integration metadata resource type. + :type type: IncidentIntegrationMetadataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_integration_metadata_create_request.py b/datadog_api_client/v2/model/incident_integration_metadata_create_request.py new file mode 100644 index 0000000000..a36b9d9e12 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_create_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_integration_metadata_create_data import IncidentIntegrationMetadataCreateData + from datadog_api_client.v2.model.slack_integration_metadata import SlackIntegrationMetadata + from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata + from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata + +class IncidentIntegrationMetadataCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_integration_metadata_create_data import IncidentIntegrationMetadataCreateData + return { + "data": (IncidentIntegrationMetadataCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentIntegrationMetadataCreateData, **kwargs): + """ + Create request for an incident integration metadata. + + :param data: Incident integration metadata data for a create request. + :type data: IncidentIntegrationMetadataCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_integration_metadata_list_response.py b/datadog_api_client/v2/model/incident_integration_metadata_list_response.py new file mode 100644 index 0000000000..0cf44a9ee3 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_integration_metadata_response_data import IncidentIntegrationMetadataResponseData + from datadog_api_client.v2.model.incident_integration_metadata_response_included_item import IncidentIntegrationMetadataResponseIncludedItem + from datadog_api_client.v2.model.incident_response_meta import IncidentResponseMeta + from datadog_api_client.v2.model.slack_integration_metadata import SlackIntegrationMetadata + from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata + from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata + from datadog_api_client.v2.model.user import User + +class IncidentIntegrationMetadataListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_integration_metadata_response_data import IncidentIntegrationMetadataResponseData + from datadog_api_client.v2.model.incident_integration_metadata_response_included_item import IncidentIntegrationMetadataResponseIncludedItem + from datadog_api_client.v2.model.incident_response_meta import IncidentResponseMeta + return { + "data": ([IncidentIntegrationMetadataResponseData],), + "included": ([IncidentIntegrationMetadataResponseIncludedItem],), + "meta": (IncidentResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + read_only_vars = { + "included", + "meta", + } + + def __init__(self_, data: List[IncidentIntegrationMetadataResponseData], included: Union[List[Union[IncidentIntegrationMetadataResponseIncludedItem, User]], UnsetType]=unset, meta: Union[IncidentResponseMeta, UnsetType]=unset, **kwargs): + """ + Response with a list of incident integration metadata. + + :param data: An array of incident integration metadata. + :type data: [IncidentIntegrationMetadataResponseData] + + :param included: Included related resources that the user requested. + :type included: [IncidentIntegrationMetadataResponseIncludedItem], optional + + :param meta: The metadata object containing pagination metadata. + :type meta: IncidentResponseMeta, 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/datadog_api_client/v2/model/incident_integration_metadata_metadata.py b/datadog_api_client/v2/model/incident_integration_metadata_metadata.py new file mode 100644 index 0000000000..e7da1a10d8 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_metadata.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentIntegrationMetadataMetadata(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Incident integration metadata's metadata attribute. + + :param channels: Array of Slack channels in this integration metadata. + :type channels: [SlackIntegrationMetadataChannelItem] + + :param issues: Array of Jira issues in this integration metadata. + :type issues: [JiraIntegrationMetadataIssuesItem] + + :param teams: Array of Microsoft Teams in this integration metadata. + :type teams: [MSTeamsIntegrationMetadataTeamsItem] + """ + 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.slack_integration_metadata import SlackIntegrationMetadata + from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata + from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata + return { + "oneOf": [ + SlackIntegrationMetadata, + JiraIntegrationMetadata, + MSTeamsIntegrationMetadata, + ], + } diff --git a/datadog_api_client/v2/model/incident_integration_metadata_patch_data.py b/datadog_api_client/v2/model/incident_integration_metadata_patch_data.py new file mode 100644 index 0000000000..25743f3d50 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_patch_data.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_integration_metadata_attributes import IncidentIntegrationMetadataAttributes + from datadog_api_client.v2.model.incident_integration_metadata_type import IncidentIntegrationMetadataType + from datadog_api_client.v2.model.slack_integration_metadata import SlackIntegrationMetadata + from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata + from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata + +class IncidentIntegrationMetadataPatchData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_integration_metadata_attributes import IncidentIntegrationMetadataAttributes + from datadog_api_client.v2.model.incident_integration_metadata_type import IncidentIntegrationMetadataType + return { + "attributes": (IncidentIntegrationMetadataAttributes,), + "type": (IncidentIntegrationMetadataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentIntegrationMetadataAttributes, type: IncidentIntegrationMetadataType, **kwargs): + """ + Incident integration metadata data for a patch request. + + :param attributes: Incident integration metadata's attributes for a create request. + :type attributes: IncidentIntegrationMetadataAttributes + + :param type: Integration metadata resource type. + :type type: IncidentIntegrationMetadataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_integration_metadata_patch_request.py b/datadog_api_client/v2/model/incident_integration_metadata_patch_request.py new file mode 100644 index 0000000000..235113b860 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_patch_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_integration_metadata_patch_data import IncidentIntegrationMetadataPatchData + from datadog_api_client.v2.model.slack_integration_metadata import SlackIntegrationMetadata + from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata + from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata + +class IncidentIntegrationMetadataPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_integration_metadata_patch_data import IncidentIntegrationMetadataPatchData + return { + "data": (IncidentIntegrationMetadataPatchData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentIntegrationMetadataPatchData, **kwargs): + """ + Patch request for an incident integration metadata. + + :param data: Incident integration metadata data for a patch request. + :type data: IncidentIntegrationMetadataPatchData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_integration_metadata_response.py b/datadog_api_client/v2/model/incident_integration_metadata_response.py new file mode 100644 index 0000000000..96d15cf4f1 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_integration_metadata_response_data import IncidentIntegrationMetadataResponseData + from datadog_api_client.v2.model.incident_integration_metadata_response_included_item import IncidentIntegrationMetadataResponseIncludedItem + from datadog_api_client.v2.model.slack_integration_metadata import SlackIntegrationMetadata + from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata + from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata + from datadog_api_client.v2.model.user import User + +class IncidentIntegrationMetadataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_integration_metadata_response_data import IncidentIntegrationMetadataResponseData + from datadog_api_client.v2.model.incident_integration_metadata_response_included_item import IncidentIntegrationMetadataResponseIncludedItem + return { + "data": (IncidentIntegrationMetadataResponseData,), + "included": ([IncidentIntegrationMetadataResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentIntegrationMetadataResponseData, included: Union[List[Union[IncidentIntegrationMetadataResponseIncludedItem, User]], UnsetType]=unset, **kwargs): + """ + Response with an incident integration metadata. + + :param data: Incident integration metadata from a response. + :type data: IncidentIntegrationMetadataResponseData + + :param included: Included related resources that the user requested. + :type included: [IncidentIntegrationMetadataResponseIncludedItem], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_integration_metadata_response_data.py b/datadog_api_client/v2/model/incident_integration_metadata_response_data.py new file mode 100644 index 0000000000..8ead66808f --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_response_data.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_integration_metadata_attributes import IncidentIntegrationMetadataAttributes + from datadog_api_client.v2.model.incident_integration_relationships import IncidentIntegrationRelationships + from datadog_api_client.v2.model.incident_integration_metadata_type import IncidentIntegrationMetadataType + from datadog_api_client.v2.model.slack_integration_metadata import SlackIntegrationMetadata + from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata + from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata + +class IncidentIntegrationMetadataResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_integration_metadata_attributes import IncidentIntegrationMetadataAttributes + from datadog_api_client.v2.model.incident_integration_relationships import IncidentIntegrationRelationships + from datadog_api_client.v2.model.incident_integration_metadata_type import IncidentIntegrationMetadataType + return { + "attributes": (IncidentIntegrationMetadataAttributes,), + "id": (str,), + "relationships": (IncidentIntegrationRelationships,), + "type": (IncidentIntegrationMetadataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentIntegrationMetadataType, attributes: Union[IncidentIntegrationMetadataAttributes, UnsetType]=unset, relationships: Union[IncidentIntegrationRelationships, UnsetType]=unset, **kwargs): + """ + Incident integration metadata from a response. + + :param attributes: Incident integration metadata's attributes for a create request. + :type attributes: IncidentIntegrationMetadataAttributes, optional + + :param id: The incident integration metadata's ID. + :type id: str + + :param relationships: The incident's integration relationships from a response. + :type relationships: IncidentIntegrationRelationships, optional + + :param type: Integration metadata resource type. + :type type: IncidentIntegrationMetadataType + """ + 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/datadog_api_client/v2/model/incident_integration_metadata_response_included_item.py b/datadog_api_client/v2/model/incident_integration_metadata_response_included_item.py new file mode 100644 index 0000000000..c5c71f2db2 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_response_included_item.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentIntegrationMetadataResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to an incident integration metadata that is included in the response. + + :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 + return { + "oneOf": [ + User, + ], + } diff --git a/datadog_api_client/v2/model/incident_integration_metadata_type.py b/datadog_api_client/v2/model/incident_integration_metadata_type.py new file mode 100644 index 0000000000..7b6d237515 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_metadata_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentIntegrationMetadataType(ModelSimple): + """ + Integration metadata resource type. + + :param value: If omitted defaults to "incident_integrations". Must be one of ["incident_integrations"]. + :type value: str + """ + + allowed_values = { + "incident_integrations", + } + INCIDENT_INTEGRATIONS: ClassVar["IncidentIntegrationMetadataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentIntegrationMetadataType.INCIDENT_INTEGRATIONS = IncidentIntegrationMetadataType("incident_integrations") diff --git a/datadog_api_client/v2/model/incident_integration_relationships.py b/datadog_api_client/v2/model/incident_integration_relationships.py new file mode 100644 index 0000000000..249eb4f029 --- /dev/null +++ b/datadog_api_client/v2/model/incident_integration_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + +class IncidentIntegrationRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + return { + "created_by_user": (RelationshipToUser,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + The incident's integration relationships from a response. + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_non_datadog_creator.py b/datadog_api_client/v2/model/incident_non_datadog_creator.py new file mode 100644 index 0000000000..16852aaae0 --- /dev/null +++ b/datadog_api_client/v2/model/incident_non_datadog_creator.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentNonDatadogCreator(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "image_48_px": (str,), + "name": (str,), + } + attribute_map = { + "image_48_px": "image_48_px", + "name": "name", + } + + def __init__(self_, image_48_px: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Incident's non Datadog creator. + + :param image_48_px: Non Datadog creator ``48px`` image. + :type image_48_px: str, optional + + :param name: Non Datadog creator name. + :type name: str, optional + """ + if image_48_px is not unset: + kwargs["image_48_px"] = image_48_px + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_notification_handle.py b/datadog_api_client/v2/model/incident_notification_handle.py new file mode 100644 index 0000000000..d46534b11f --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_handle.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentNotificationHandle(ModelNormal): + @cached_property + def openapi_types(_): + return { + "display_name": (str,), + "handle": (str,), + } + attribute_map = { + "display_name": "display_name", + "handle": "handle", + } + + def __init__(self_, display_name: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, **kwargs): + """ + A notification handle that will be notified at incident creation. + + :param display_name: The name of the notified handle. + :type display_name: str, optional + + :param handle: The handle used for the notification. This includes an email address, Slack channel, or workflow. + :type handle: str, optional + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if handle is not unset: + kwargs["handle"] = handle + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_notification_rule.py b/datadog_api_client/v2/model/incident_notification_rule.py new file mode 100644 index 0000000000..d5035b772d --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/incident_notification_rule_array.py b/datadog_api_client/v2/model/incident_notification_rule_array.py new file mode 100644 index 0000000000..de6fb94ac5 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_array.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/incident_notification_rule_array_meta.py b/datadog_api_client/v2/model/incident_notification_rule_array_meta.py new file mode 100644 index 0000000000..3e0087e97b --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_array_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/incident_notification_rule_array_meta_page.py b/datadog_api_client/v2/model/incident_notification_rule_array_meta_page.py new file mode 100644 index 0000000000..51a62ed983 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_array_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +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/datadog_api_client/v2/model/incident_notification_rule_attributes.py b/datadog_api_client/v2/model/incident_notification_rule_attributes.py new file mode 100644 index 0000000000..585edb1fc9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_attributes.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/incident_notification_rule_attributes_visibility.py b/datadog_api_client/v2/model/incident_notification_rule_attributes_visibility.py new file mode 100644 index 0000000000..cf79a4dcf9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_attributes_visibility.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +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/datadog_api_client/v2/model/incident_notification_rule_conditions_items.py b/datadog_api_client/v2/model/incident_notification_rule_conditions_items.py new file mode 100644 index 0000000000..3a0268dca8 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_conditions_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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +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/datadog_api_client/v2/model/incident_notification_rule_create_attributes.py b/datadog_api_client/v2/model/incident_notification_rule_create_attributes.py new file mode 100644 index 0000000000..6b55b86551 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_create_attributes.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/incident_notification_rule_create_attributes_visibility.py b/datadog_api_client/v2/model/incident_notification_rule_create_attributes_visibility.py new file mode 100644 index 0000000000..2b368406db --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_create_attributes_visibility.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +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/datadog_api_client/v2/model/incident_notification_rule_create_data.py b/datadog_api_client/v2/model/incident_notification_rule_create_data.py new file mode 100644 index 0000000000..0e2172a017 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_create_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + 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 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/datadog_api_client/v2/model/incident_notification_rule_create_data_relationships.py b/datadog_api_client/v2/model/incident_notification_rule_create_data_relationships.py new file mode 100644 index 0000000000..71c64d6097 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_create_data_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/incident_notification_rule_included_items.py b/datadog_api_client/v2/model/incident_notification_rule_included_items.py new file mode 100644 index 0000000000..097453942e --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_included_items.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +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/datadog_api_client/v2/model/incident_notification_rule_relationships.py b/datadog_api_client/v2/model/incident_notification_rule_relationships.py new file mode 100644 index 0000000000..4ce9c21deb --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/incident_notification_rule_response_data.py b/datadog_api_client/v2/model/incident_notification_rule_response_data.py new file mode 100644 index 0000000000..8222758d6a --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_response_data.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + 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/datadog_api_client/v2/model/incident_notification_rule_type.py b/datadog_api_client/v2/model/incident_notification_rule_type.py new file mode 100644 index 0000000000..1732fb5a72 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +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/datadog_api_client/v2/model/incident_notification_rule_update_data.py b/datadog_api_client/v2/model/incident_notification_rule_update_data.py new file mode 100644 index 0000000000..8018732d8f --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_rule_update_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + 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/datadog_api_client/v2/model/incident_notification_template.py b/datadog_api_client/v2/model/incident_notification_template.py new file mode 100644 index 0000000000..db8d771de0 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_template_response_data import IncidentNotificationTemplateResponseData + from datadog_api_client.v2.model.incident_notification_template_included_items import IncidentNotificationTemplateIncludedItems + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + +class IncidentNotificationTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_template_response_data import IncidentNotificationTemplateResponseData + from datadog_api_client.v2.model.incident_notification_template_included_items import IncidentNotificationTemplateIncludedItems + return { + "data": (IncidentNotificationTemplateResponseData,), + "included": ([IncidentNotificationTemplateIncludedItems],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: IncidentNotificationTemplateResponseData, included: Union[List[Union[IncidentNotificationTemplateIncludedItems, User, IncidentTypeObject]], UnsetType]=unset, **kwargs): + """ + Response with a notification template. + + :param data: Notification template data from a response. + :type data: IncidentNotificationTemplateResponseData + + :param included: Related objects that are included in the response. + :type included: [IncidentNotificationTemplateIncludedItems], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_notification_template_array.py b/datadog_api_client/v2/model/incident_notification_template_array.py new file mode 100644 index 0000000000..dcf336bf74 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_array.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_template_response_data import IncidentNotificationTemplateResponseData + from datadog_api_client.v2.model.incident_notification_template_included_items import IncidentNotificationTemplateIncludedItems + from datadog_api_client.v2.model.incident_notification_template_array_meta import IncidentNotificationTemplateArrayMeta + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + +class IncidentNotificationTemplateArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_template_response_data import IncidentNotificationTemplateResponseData + from datadog_api_client.v2.model.incident_notification_template_included_items import IncidentNotificationTemplateIncludedItems + from datadog_api_client.v2.model.incident_notification_template_array_meta import IncidentNotificationTemplateArrayMeta + return { + "data": ([IncidentNotificationTemplateResponseData],), + "included": ([IncidentNotificationTemplateIncludedItems],), + "meta": (IncidentNotificationTemplateArrayMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: List[IncidentNotificationTemplateResponseData], included: Union[List[Union[IncidentNotificationTemplateIncludedItems, User, IncidentTypeObject]], UnsetType]=unset, meta: Union[IncidentNotificationTemplateArrayMeta, UnsetType]=unset, **kwargs): + """ + Response with notification templates. + + :param data: The ``NotificationTemplateArray`` ``data``. + :type data: [IncidentNotificationTemplateResponseData] + + :param included: Related objects that are included in the response. + :type included: [IncidentNotificationTemplateIncludedItems], optional + + :param meta: Response metadata. + :type meta: IncidentNotificationTemplateArrayMeta, 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/datadog_api_client/v2/model/incident_notification_template_array_meta.py b/datadog_api_client/v2/model/incident_notification_template_array_meta.py new file mode 100644 index 0000000000..d6e7a79d34 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_array_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_template_array_meta_page import IncidentNotificationTemplateArrayMetaPage + +class IncidentNotificationTemplateArrayMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_template_array_meta_page import IncidentNotificationTemplateArrayMetaPage + return { + "page": (IncidentNotificationTemplateArrayMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[IncidentNotificationTemplateArrayMetaPage, UnsetType]=unset, **kwargs): + """ + Response metadata. + + :param page: Pagination metadata. + :type page: IncidentNotificationTemplateArrayMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_notification_template_array_meta_page.py b/datadog_api_client/v2/model/incident_notification_template_array_meta_page.py new file mode 100644 index 0000000000..5043b01e80 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_array_meta_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentNotificationTemplateArrayMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata. + + :param total_count: Total number of notification templates. + :type total_count: int, optional + + :param total_filtered_count: Total number of notification templates matching the filter. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_notification_template_attributes.py b/datadog_api_client/v2/model/incident_notification_template_attributes.py new file mode 100644 index 0000000000..7d5cebe1b9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_attributes.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentNotificationTemplateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "category": (str,), + "content": (str,), + "created": (datetime,), + "modified": (datetime,), + "name": (str,), + "subject": (str,), + } + attribute_map = { + "category": "category", + "content": "content", + "created": "created", + "modified": "modified", + "name": "name", + "subject": "subject", + } + read_only_vars = { + "created", + "modified", + } + + def __init__(self_, category: str, content: str, created: datetime, modified: datetime, name: str, subject: str, **kwargs): + """ + The notification template's attributes. + + :param category: The category of the notification template. + :type category: str + + :param content: The content body of the notification template. + :type content: str + + :param created: Timestamp when the notification template was created. + :type created: datetime + + :param modified: Timestamp when the notification template was last modified. + :type modified: datetime + + :param name: The name of the notification template. + :type name: str + + :param subject: The subject line of the notification template. + :type subject: str + """ + super().__init__(kwargs) + + + self_.category = category + self_.content = content + self_.created = created + self_.modified = modified + self_.name = name + self_.subject = subject diff --git a/datadog_api_client/v2/model/incident_notification_template_create_attributes.py b/datadog_api_client/v2/model/incident_notification_template_create_attributes.py new file mode 100644 index 0000000000..71d25be6a0 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_create_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentNotificationTemplateCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "category": (str,), + "content": (str,), + "name": (str,), + "subject": (str,), + } + attribute_map = { + "category": "category", + "content": "content", + "name": "name", + "subject": "subject", + } + + def __init__(self_, category: str, content: str, name: str, subject: str, **kwargs): + """ + The attributes for creating a notification template. + + :param category: The category of the notification template. + :type category: str + + :param content: The content body of the notification template. + :type content: str + + :param name: The name of the notification template. + :type name: str + + :param subject: The subject line of the notification template. + :type subject: str + """ + super().__init__(kwargs) + + + self_.category = category + self_.content = content + self_.name = name + self_.subject = subject diff --git a/datadog_api_client/v2/model/incident_notification_template_create_data.py b/datadog_api_client/v2/model/incident_notification_template_create_data.py new file mode 100644 index 0000000000..f6796a17f4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_create_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_template_create_attributes import IncidentNotificationTemplateCreateAttributes + from datadog_api_client.v2.model.incident_notification_template_create_data_relationships import IncidentNotificationTemplateCreateDataRelationships + from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType + +class IncidentNotificationTemplateCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_template_create_attributes import IncidentNotificationTemplateCreateAttributes + from datadog_api_client.v2.model.incident_notification_template_create_data_relationships import IncidentNotificationTemplateCreateDataRelationships + from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType + return { + "attributes": (IncidentNotificationTemplateCreateAttributes,), + "relationships": (IncidentNotificationTemplateCreateDataRelationships,), + "type": (IncidentNotificationTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentNotificationTemplateCreateAttributes, type: IncidentNotificationTemplateType, relationships: Union[IncidentNotificationTemplateCreateDataRelationships, UnsetType]=unset, **kwargs): + """ + Notification template data for a create request. + + :param attributes: The attributes for creating a notification template. + :type attributes: IncidentNotificationTemplateCreateAttributes + + :param relationships: The definition of ``NotificationTemplateCreateDataRelationships`` object. + :type relationships: IncidentNotificationTemplateCreateDataRelationships, optional + + :param type: Notification templates resource type. + :type type: IncidentNotificationTemplateType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_notification_template_create_data_relationships.py b/datadog_api_client/v2/model/incident_notification_template_create_data_relationships.py new file mode 100644 index 0000000000..76e9ef59d2 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_create_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + +class IncidentNotificationTemplateCreateDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + return { + "incident_type": (RelationshipToIncidentType,), + } + attribute_map = { + "incident_type": "incident_type", + } + + def __init__(self_, incident_type: Union[RelationshipToIncidentType, UnsetType]=unset, **kwargs): + """ + The definition of ``NotificationTemplateCreateDataRelationships`` object. + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType, optional + """ + if incident_type is not unset: + kwargs["incident_type"] = incident_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_notification_template_included_items.py b/datadog_api_client/v2/model/incident_notification_template_included_items.py new file mode 100644 index 0000000000..2fadcbd328 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_included_items.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentNotificationTemplateIncludedItems(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Objects related to a notification template. + + :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 + return { + "oneOf": [ + User, + IncidentTypeObject, + ], + } diff --git a/datadog_api_client/v2/model/incident_notification_template_object.py b/datadog_api_client/v2/model/incident_notification_template_object.py new file mode 100644 index 0000000000..4f03e7d6a1 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_object.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + 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/datadog_api_client/v2/model/incident_notification_template_relationships.py b/datadog_api_client/v2/model/incident_notification_template_relationships.py new file mode 100644 index 0000000000..5ce4bbdbd1 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_relationships.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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 + +class IncidentNotificationTemplateRelationships(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 + return { + "created_by_user": (RelationshipToUser,), + "incident_type": (RelationshipToIncidentType,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "incident_type": "incident_type", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, incident_type: Union[RelationshipToIncidentType, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + The notification template'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 + """ + 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 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_notification_template_response_data.py b/datadog_api_client/v2/model/incident_notification_template_response_data.py new file mode 100644 index 0000000000..397af8f141 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_response_data.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + 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 IncidentNotificationTemplateResponseData(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): + """ + Notification template data from a response. + + :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/datadog_api_client/v2/model/incident_notification_template_type.py b/datadog_api_client/v2/model/incident_notification_template_type.py new file mode 100644 index 0000000000..8a8857ef64 --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentNotificationTemplateType(ModelSimple): + """ + Notification templates resource type. + + :param value: If omitted defaults to "notification_templates". Must be one of ["notification_templates"]. + :type value: str + """ + + allowed_values = { + "notification_templates", + } + NOTIFICATION_TEMPLATES: ClassVar["IncidentNotificationTemplateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentNotificationTemplateType.NOTIFICATION_TEMPLATES = IncidentNotificationTemplateType("notification_templates") diff --git a/datadog_api_client/v2/model/incident_notification_template_update_attributes.py b/datadog_api_client/v2/model/incident_notification_template_update_attributes.py new file mode 100644 index 0000000000..abe94ec93a --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_update_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentNotificationTemplateUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "category": (str,), + "content": (str,), + "name": (str,), + "subject": (str,), + } + attribute_map = { + "category": "category", + "content": "content", + "name": "name", + "subject": "subject", + } + + def __init__(self_, category: Union[str, UnsetType]=unset, content: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, subject: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes to update on a notification template. + + :param category: The category of the notification template. + :type category: str, optional + + :param content: The content body of the notification template. + :type content: str, optional + + :param name: The name of the notification template. + :type name: str, optional + + :param subject: The subject line of the notification template. + :type subject: str, optional + """ + if category is not unset: + kwargs["category"] = category + if content is not unset: + kwargs["content"] = content + if name is not unset: + kwargs["name"] = name + if subject is not unset: + kwargs["subject"] = subject + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_notification_template_update_data.py b/datadog_api_client/v2/model/incident_notification_template_update_data.py new file mode 100644 index 0000000000..67edbd344d --- /dev/null +++ b/datadog_api_client/v2/model/incident_notification_template_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_template_update_attributes import IncidentNotificationTemplateUpdateAttributes + from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType + +class IncidentNotificationTemplateUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_template_update_attributes import IncidentNotificationTemplateUpdateAttributes + from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType + return { + "attributes": (IncidentNotificationTemplateUpdateAttributes,), + "id": (UUID,), + "type": (IncidentNotificationTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentNotificationTemplateType, attributes: Union[IncidentNotificationTemplateUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Notification template data for an update request. + + :param attributes: The attributes to update on a notification template. + :type attributes: IncidentNotificationTemplateUpdateAttributes, optional + + :param id: The unique identifier of the notification template. + :type id: UUID + + :param type: Notification templates resource type. + :type type: IncidentNotificationTemplateType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_on_call_page_data_attributes_request.py b/datadog_api_client/v2/model/incident_on_call_page_data_attributes_request.py new file mode 100644 index 0000000000..0e24ef36b6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_on_call_page_data_attributes_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_on_call_page_target import IncidentOnCallPageTarget + +class IncidentOnCallPageDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_on_call_page_target import IncidentOnCallPageTarget + return { + "key": (str,), + "page_target": (IncidentOnCallPageTarget,), + "team_id": (str,), + } + attribute_map = { + "key": "key", + "page_target": "page_target", + "team_id": "team_id", + } + + def __init__(self_, key: Union[str, UnsetType]=unset, page_target: Union[IncidentOnCallPageTarget, UnsetType]=unset, team_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for linking a page to an incident. + + :param key: The key of the on-call page. + :type key: str, optional + + :param page_target: The target of an on-call page. + :type page_target: IncidentOnCallPageTarget, optional + + :param team_id: The team ID associated with the page (deprecated, use page_target instead). + :type team_id: str, optional + """ + if key is not unset: + kwargs["key"] = key + if page_target is not unset: + kwargs["page_target"] = page_target + if team_id is not unset: + kwargs["team_id"] = team_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_on_call_page_data_request.py b/datadog_api_client/v2/model/incident_on_call_page_data_request.py new file mode 100644 index 0000000000..c8e73954a6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_on_call_page_data_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_on_call_page_data_attributes_request import IncidentOnCallPageDataAttributesRequest + from datadog_api_client.v2.model.incident_on_call_page_type import IncidentOnCallPageType + +class IncidentOnCallPageDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_on_call_page_data_attributes_request import IncidentOnCallPageDataAttributesRequest + from datadog_api_client.v2.model.incident_on_call_page_type import IncidentOnCallPageType + return { + "attributes": (IncidentOnCallPageDataAttributesRequest,), + "id": (str,), + "type": (IncidentOnCallPageType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentOnCallPageType, attributes: Union[IncidentOnCallPageDataAttributesRequest, UnsetType]=unset, **kwargs): + """ + On-call page data in a link request. + + :param attributes: Attributes for linking a page to an incident. + :type attributes: IncidentOnCallPageDataAttributesRequest, optional + + :param id: The ID of the on-call page to link. + :type id: str + + :param type: On-call page resource type. + :type type: IncidentOnCallPageType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_on_call_page_link_request.py b/datadog_api_client/v2/model/incident_on_call_page_link_request.py new file mode 100644 index 0000000000..4420cf9de7 --- /dev/null +++ b/datadog_api_client/v2/model/incident_on_call_page_link_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_on_call_page_data_request import IncidentOnCallPageDataRequest + +class IncidentOnCallPageLinkRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_on_call_page_data_request import IncidentOnCallPageDataRequest + return { + "data": (IncidentOnCallPageDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentOnCallPageDataRequest, **kwargs): + """ + Request payload for linking an on-call page to an incident. + + :param data: On-call page data in a link request. + :type data: IncidentOnCallPageDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_on_call_page_target.py b/datadog_api_client/v2/model/incident_on_call_page_target.py new file mode 100644 index 0000000000..977d2630e3 --- /dev/null +++ b/datadog_api_client/v2/model/incident_on_call_page_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentOnCallPageTarget(ModelNormal): + @cached_property + def openapi_types(_): + return { + "identifier": (str,), + "type": (str,), + } + attribute_map = { + "identifier": "identifier", + "type": "type", + } + + def __init__(self_, identifier: str, type: str, **kwargs): + """ + The target of an on-call page. + + :param identifier: The identifier of the page target. + :type identifier: str + + :param type: The type of the page target. + :type type: str + """ + super().__init__(kwargs) + + + self_.identifier = identifier + self_.type = type diff --git a/datadog_api_client/v2/model/incident_on_call_page_type.py b/datadog_api_client/v2/model/incident_on_call_page_type.py new file mode 100644 index 0000000000..4084f038d4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_on_call_page_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentOnCallPageType(ModelSimple): + """ + On-call page resource type. + + :param value: If omitted defaults to "page". Must be one of ["page"]. + :type value: str + """ + + allowed_values = { + "page", + } + PAGE: ClassVar["IncidentOnCallPageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentOnCallPageType.PAGE = IncidentOnCallPageType("page") diff --git a/datadog_api_client/v2/model/incident_org_settings_data_attributes_response.py b/datadog_api_client/v2/model/incident_org_settings_data_attributes_response.py new file mode 100644 index 0000000000..f701446c7b --- /dev/null +++ b/datadog_api_client/v2/model/incident_org_settings_data_attributes_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_org_settings_meta import IncidentOrgSettingsMeta + +class IncidentOrgSettingsDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_org_settings_meta import IncidentOrgSettingsMeta + return { + "created": (datetime,), + "modified": (datetime,), + "settings": (IncidentOrgSettingsMeta,), + } + attribute_map = { + "created": "created", + "modified": "modified", + "settings": "settings", + } + + def __init__(self_, created: datetime, modified: datetime, settings: IncidentOrgSettingsMeta, **kwargs): + """ + Attributes of an incident org settings resource in a response. + + :param created: Timestamp when the settings were created. + :type created: datetime + + :param modified: Timestamp when the settings were last modified. + :type modified: datetime + + :param settings: The settings configuration for an incident org settings resource. + :type settings: IncidentOrgSettingsMeta + """ + super().__init__(kwargs) + + + self_.created = created + self_.modified = modified + self_.settings = settings diff --git a/datadog_api_client/v2/model/incident_org_settings_data_response.py b/datadog_api_client/v2/model/incident_org_settings_data_response.py new file mode 100644 index 0000000000..42ebd68741 --- /dev/null +++ b/datadog_api_client/v2/model/incident_org_settings_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_org_settings_data_attributes_response import IncidentOrgSettingsDataAttributesResponse + from datadog_api_client.v2.model.incident_org_settings_relationships import IncidentOrgSettingsRelationships + from datadog_api_client.v2.model.incident_org_settings_type import IncidentOrgSettingsType + +class IncidentOrgSettingsDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_org_settings_data_attributes_response import IncidentOrgSettingsDataAttributesResponse + from datadog_api_client.v2.model.incident_org_settings_relationships import IncidentOrgSettingsRelationships + from datadog_api_client.v2.model.incident_org_settings_type import IncidentOrgSettingsType + return { + "attributes": (IncidentOrgSettingsDataAttributesResponse,), + "id": (UUID,), + "relationships": (IncidentOrgSettingsRelationships,), + "type": (IncidentOrgSettingsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentOrgSettingsDataAttributesResponse, id: UUID, type: IncidentOrgSettingsType, relationships: Union[IncidentOrgSettingsRelationships, UnsetType]=unset, **kwargs): + """ + Incident org settings data in a response. + + :param attributes: Attributes of an incident org settings resource in a response. + :type attributes: IncidentOrgSettingsDataAttributesResponse + + :param id: The org settings identifier. + :type id: UUID + + :param relationships: Relationships for an incident org settings resource. + :type relationships: IncidentOrgSettingsRelationships, optional + + :param type: Incident org settings resource type. + :type type: IncidentOrgSettingsType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_org_settings_list_response.py b/datadog_api_client/v2/model/incident_org_settings_list_response.py new file mode 100644 index 0000000000..b3c0c9c8a9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_org_settings_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_org_settings_data_response import IncidentOrgSettingsDataResponse + +class IncidentOrgSettingsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_org_settings_data_response import IncidentOrgSettingsDataResponse + return { + "data": ([IncidentOrgSettingsDataResponse],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[IncidentOrgSettingsDataResponse], **kwargs): + """ + Response with a list of incident org settings resources. + + :param data: List of incident org settings resources. + :type data: [IncidentOrgSettingsDataResponse] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_org_settings_meta.py b/datadog_api_client/v2/model/incident_org_settings_meta.py new file mode 100644 index 0000000000..abc73b7270 --- /dev/null +++ b/datadog_api_client/v2/model/incident_org_settings_meta.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentOrgSettingsMeta(ModelNormal): + + def __init__(self_, **kwargs): + """ + The settings configuration for an incident org settings resource. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_org_settings_relationships.py b/datadog_api_client/v2/model/incident_org_settings_relationships.py new file mode 100644 index 0000000000..60b24e4793 --- /dev/null +++ b/datadog_api_client/v2/model/incident_org_settings_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + +class IncidentOrgSettingsRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + return { + "incident_type": (RelationshipToIncidentType,), + } + attribute_map = { + "incident_type": "incident_type", + } + + def __init__(self_, incident_type: Union[RelationshipToIncidentType, UnsetType]=unset, **kwargs): + """ + Relationships for an incident org settings resource. + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType, optional + """ + if incident_type is not unset: + kwargs["incident_type"] = incident_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_org_settings_response.py b/datadog_api_client/v2/model/incident_org_settings_response.py new file mode 100644 index 0000000000..3f210b9d39 --- /dev/null +++ b/datadog_api_client/v2/model/incident_org_settings_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_org_settings_data_response import IncidentOrgSettingsDataResponse + +class IncidentOrgSettingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_org_settings_data_response import IncidentOrgSettingsDataResponse + return { + "data": (IncidentOrgSettingsDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentOrgSettingsDataResponse, **kwargs): + """ + Response with a single incident org settings resource. + + :param data: Incident org settings data in a response. + :type data: IncidentOrgSettingsDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_org_settings_type.py b/datadog_api_client/v2/model/incident_org_settings_type.py new file mode 100644 index 0000000000..6faa539dba --- /dev/null +++ b/datadog_api_client/v2/model/incident_org_settings_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentOrgSettingsType(ModelSimple): + """ + Incident org settings resource type. + + :param value: If omitted defaults to "incident_org_settings". Must be one of ["incident_org_settings"]. + :type value: str + """ + + allowed_values = { + "incident_org_settings", + } + INCIDENT_ORG_SETTINGS: ClassVar["IncidentOrgSettingsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentOrgSettingsType.INCIDENT_ORG_SETTINGS = IncidentOrgSettingsType("incident_org_settings") diff --git a/datadog_api_client/v2/model/incident_page_role_reference.py b/datadog_api_client/v2/model/incident_page_role_reference.py new file mode 100644 index 0000000000..5c70903453 --- /dev/null +++ b/datadog_api_client/v2/model/incident_page_role_reference.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_page_role_type import IncidentPageRoleType + +class IncidentPageRoleReference(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_page_role_type import IncidentPageRoleType + return { + "id": (UUID,), + "type": (IncidentPageRoleType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentPageRoleType, **kwargs): + """ + A reference to an incident role for a page. + + :param id: The role identifier. + :type id: UUID + + :param type: The type of incident role for a page. + :type type: IncidentPageRoleType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_page_role_type.py b/datadog_api_client/v2/model/incident_page_role_type.py new file mode 100644 index 0000000000..a66c84a920 --- /dev/null +++ b/datadog_api_client/v2/model/incident_page_role_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentPageRoleType(ModelSimple): + """ + The type of incident role for a page. + + :param value: Must be one of ["incident_user_defined_roles", "incident_reserved_roles"]. + :type value: str + """ + + allowed_values = { + "incident_user_defined_roles", + "incident_reserved_roles", + } + INCIDENT_USER_DEFINED_ROLES: ClassVar["IncidentPageRoleType"] + INCIDENT_RESERVED_ROLES: ClassVar["IncidentPageRoleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentPageRoleType.INCIDENT_USER_DEFINED_ROLES = IncidentPageRoleType("incident_user_defined_roles") +IncidentPageRoleType.INCIDENT_RESERVED_ROLES = IncidentPageRoleType("incident_reserved_roles") diff --git a/datadog_api_client/v2/model/incident_page_target.py b/datadog_api_client/v2/model/incident_page_target.py new file mode 100644 index 0000000000..47c56caac2 --- /dev/null +++ b/datadog_api_client/v2/model/incident_page_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_page_target_type import IncidentPageTargetType + +class IncidentPageTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_page_target_type import IncidentPageTargetType + return { + "identifier": (str,), + "type": (IncidentPageTargetType,), + } + attribute_map = { + "identifier": "identifier", + "type": "type", + } + + def __init__(self_, identifier: str, type: IncidentPageTargetType, **kwargs): + """ + The target recipient for a page. + + :param identifier: The identifier of the target (handle, UUID, or user UUID). + :type identifier: str + + :param type: The type of target for a page request. + :type type: IncidentPageTargetType + """ + super().__init__(kwargs) + + + self_.identifier = identifier + self_.type = type diff --git a/datadog_api_client/v2/model/incident_page_target_type.py b/datadog_api_client/v2/model/incident_page_target_type.py new file mode 100644 index 0000000000..60b066dbf4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_page_target_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentPageTargetType(ModelSimple): + """ + The type of target for a page request. + + :param value: Must be one of ["team_handle", "team_uuid", "user_uuid"]. + :type value: str + """ + + allowed_values = { + "team_handle", + "team_uuid", + "user_uuid", + } + TEAM_HANDLE: ClassVar["IncidentPageTargetType"] + TEAM_UUID: ClassVar["IncidentPageTargetType"] + USER_UUID: ClassVar["IncidentPageTargetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentPageTargetType.TEAM_HANDLE = IncidentPageTargetType("team_handle") +IncidentPageTargetType.TEAM_UUID = IncidentPageTargetType("team_uuid") +IncidentPageTargetType.USER_UUID = IncidentPageTargetType("user_uuid") diff --git a/datadog_api_client/v2/model/incident_page_uuid_data_response.py b/datadog_api_client/v2/model/incident_page_uuid_data_response.py new file mode 100644 index 0000000000..06da0d8619 --- /dev/null +++ b/datadog_api_client/v2/model/incident_page_uuid_data_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_page_uuid_type import IncidentPageUUIDType + +class IncidentPageUUIDDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_page_uuid_type import IncidentPageUUIDType + return { + "id": (UUID,), + "type": (IncidentPageUUIDType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentPageUUIDType, **kwargs): + """ + Page UUID data in a response. + + :param id: The UUID of the created page. + :type id: UUID + + :param type: Resource type for a page UUID response. + :type type: IncidentPageUUIDType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_page_uuid_response.py b/datadog_api_client/v2/model/incident_page_uuid_response.py new file mode 100644 index 0000000000..1829b2ddca --- /dev/null +++ b/datadog_api_client/v2/model/incident_page_uuid_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_page_uuid_data_response import IncidentPageUUIDDataResponse + +class IncidentPageUUIDResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_page_uuid_data_response import IncidentPageUUIDDataResponse + return { + "data": (IncidentPageUUIDDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentPageUUIDDataResponse, **kwargs): + """ + Response with a page UUID. + + :param data: Page UUID data in a response. + :type data: IncidentPageUUIDDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_page_uuid_type.py b/datadog_api_client/v2/model/incident_page_uuid_type.py new file mode 100644 index 0000000000..75d501def5 --- /dev/null +++ b/datadog_api_client/v2/model/incident_page_uuid_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentPageUUIDType(ModelSimple): + """ + Resource type for a page UUID response. + + :param value: If omitted defaults to "page_uuid". Must be one of ["page_uuid"]. + :type value: str + """ + + allowed_values = { + "page_uuid", + } + PAGE_UUID: ClassVar["IncidentPageUUIDType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentPageUUIDType.PAGE_UUID = IncidentPageUUIDType("page_uuid") diff --git a/datadog_api_client/v2/model/incident_postmortem_type.py b/datadog_api_client/v2/model/incident_postmortem_type.py new file mode 100644 index 0000000000..614c92c5b3 --- /dev/null +++ b/datadog_api_client/v2/model/incident_postmortem_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentPostmortemType(ModelSimple): + """ + Incident postmortem resource type. + + :param value: If omitted defaults to "incident_postmortems". Must be one of ["incident_postmortems"]. + :type value: str + """ + + allowed_values = { + "incident_postmortems", + } + INCIDENT_POSTMORTEMS: ClassVar["IncidentPostmortemType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentPostmortemType.INCIDENT_POSTMORTEMS = IncidentPostmortemType("incident_postmortems") diff --git a/datadog_api_client/v2/model/incident_related_object.py b/datadog_api_client/v2/model/incident_related_object.py new file mode 100644 index 0000000000..40fa3ec0d2 --- /dev/null +++ b/datadog_api_client/v2/model/incident_related_object.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentRelatedObject(ModelSimple): + """ + Object related to an incident. + + :param value: Must be one of ["users", "attachments"]. + :type value: str + """ + + allowed_values = { + "users", + "attachments", + } + USERS: ClassVar["IncidentRelatedObject"] + ATTACHMENTS: ClassVar["IncidentRelatedObject"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentRelatedObject.USERS = IncidentRelatedObject("users") +IncidentRelatedObject.ATTACHMENTS = IncidentRelatedObject("attachments") diff --git a/datadog_api_client/v2/model/incident_relationship_data.py b/datadog_api_client/v2/model/incident_relationship_data.py new file mode 100644 index 0000000000..591e465d8b --- /dev/null +++ b/datadog_api_client/v2/model/incident_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_resource_type import IncidentResourceType + +class IncidentRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_resource_type import IncidentResourceType + return { + "id": (str,), + "type": (IncidentResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentResourceType, **kwargs): + """ + Incident relationship data + + :param id: Incident identifier + :type id: str + + :param type: Incident resource type + :type type: IncidentResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_resource_type.py b/datadog_api_client/v2/model/incident_resource_type.py new file mode 100644 index 0000000000..f07a8a07ec --- /dev/null +++ b/datadog_api_client/v2/model/incident_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentResourceType(ModelSimple): + """ + Incident resource type + + :param value: If omitted defaults to "incidents". Must be one of ["incidents"]. + :type value: str + """ + + allowed_values = { + "incidents", + } + INCIDENTS: ClassVar["IncidentResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentResourceType.INCIDENTS = IncidentResourceType("incidents") diff --git a/datadog_api_client/v2/model/incident_responder_data_attributes_response.py b/datadog_api_client/v2/model/incident_responder_data_attributes_response.py new file mode 100644 index 0000000000..4e3b11084b --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_data_attributes_response.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentResponderDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created": (datetime,), + "external_id": (str, none_type), + "external_source": (str, none_type), + "is_billable": (bool,), + "last_active": (datetime, none_type), + "meta": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "modified": (datetime,), + } + attribute_map = { + "created": "created", + "external_id": "external_id", + "external_source": "external_source", + "is_billable": "is_billable", + "last_active": "last_active", + "meta": "meta", + "modified": "modified", + } + + def __init__(self_, created: datetime, is_billable: bool, modified: datetime, external_id: Union[str, none_type, UnsetType]=unset, external_source: Union[str, none_type, UnsetType]=unset, last_active: Union[datetime, none_type, UnsetType]=unset, meta: Union[Dict[str, Any], none_type, UnsetType]=unset, **kwargs): + """ + Attributes of an incident responder in a response. + + :param created: Timestamp when the responder was created. + :type created: datetime + + :param external_id: The external ID of the responder. + :type external_id: str, none_type, optional + + :param external_source: The external source of the responder. + :type external_source: str, none_type, optional + + :param is_billable: Whether this responder counts toward billing. + :type is_billable: bool + + :param last_active: Timestamp when the responder was last active. + :type last_active: datetime, none_type, optional + + :param meta: Additional metadata for the responder. + :type meta: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type, optional + + :param modified: Timestamp when the responder was last modified. + :type modified: datetime + """ + if external_id is not unset: + kwargs["external_id"] = external_id + if external_source is not unset: + kwargs["external_source"] = external_source + if last_active is not unset: + kwargs["last_active"] = last_active + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.created = created + self_.is_billable = is_billable + self_.modified = modified diff --git a/datadog_api_client/v2/model/incident_responder_data_request.py b/datadog_api_client/v2/model/incident_responder_data_request.py new file mode 100644 index 0000000000..311be5562b --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_responder_relationships_request import IncidentResponderRelationshipsRequest + from datadog_api_client.v2.model.incident_responder_type import IncidentResponderType + +class IncidentResponderDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_responder_relationships_request import IncidentResponderRelationshipsRequest + from datadog_api_client.v2.model.incident_responder_type import IncidentResponderType + return { + "relationships": (IncidentResponderRelationshipsRequest,), + "type": (IncidentResponderType,), + } + attribute_map = { + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, relationships: IncidentResponderRelationshipsRequest, type: IncidentResponderType, **kwargs): + """ + Incident responder data in a create request. + + :param relationships: Relationships for creating an incident responder. + :type relationships: IncidentResponderRelationshipsRequest + + :param type: Incident responder resource type. + :type type: IncidentResponderType + """ + super().__init__(kwargs) + + + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/incident_responder_data_response.py b/datadog_api_client/v2/model/incident_responder_data_response.py new file mode 100644 index 0000000000..e8a6d81ea2 --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_responder_data_attributes_response import IncidentResponderDataAttributesResponse + from datadog_api_client.v2.model.incident_responder_relationships import IncidentResponderRelationships + from datadog_api_client.v2.model.incident_responder_type import IncidentResponderType + +class IncidentResponderDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_responder_data_attributes_response import IncidentResponderDataAttributesResponse + from datadog_api_client.v2.model.incident_responder_relationships import IncidentResponderRelationships + from datadog_api_client.v2.model.incident_responder_type import IncidentResponderType + return { + "attributes": (IncidentResponderDataAttributesResponse,), + "id": (UUID,), + "relationships": (IncidentResponderRelationships,), + "type": (IncidentResponderType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentResponderDataAttributesResponse, id: UUID, type: IncidentResponderType, relationships: Union[IncidentResponderRelationships, UnsetType]=unset, **kwargs): + """ + Incident responder data in a response. + + :param attributes: Attributes of an incident responder in a response. + :type attributes: IncidentResponderDataAttributesResponse + + :param id: The responder identifier. + :type id: UUID + + :param relationships: Relationships for an incident responder. + :type relationships: IncidentResponderRelationships, optional + + :param type: Incident responder resource type. + :type type: IncidentResponderType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_responder_relationships.py b/datadog_api_client/v2/model/incident_responder_relationships.py new file mode 100644 index 0000000000..ecc6b5fae8 --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.incident_responder_role_assignments_relationship import IncidentResponderRoleAssignmentsRelationship + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + +class IncidentResponderRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.incident_responder_role_assignments_relationship import IncidentResponderRoleAssignmentsRelationship + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + return { + "created_by": (RelationshipToUser,), + "last_modified_by": (RelationshipToUser,), + "role_assignments": (IncidentResponderRoleAssignmentsRelationship,), + "user": (NullableRelationshipToUser,), + } + attribute_map = { + "created_by": "created_by", + "last_modified_by": "last_modified_by", + "role_assignments": "role_assignments", + "user": "user", + } + + def __init__(self_, created_by: Union[RelationshipToUser, UnsetType]=unset, last_modified_by: Union[RelationshipToUser, UnsetType]=unset, role_assignments: Union[IncidentResponderRoleAssignmentsRelationship, UnsetType]=unset, user: Union[NullableRelationshipToUser, none_type, UnsetType]=unset, **kwargs): + """ + Relationships for an incident responder. + + :param created_by: Relationship to user. + :type created_by: RelationshipToUser, optional + + :param last_modified_by: Relationship to user. + :type last_modified_by: RelationshipToUser, optional + + :param role_assignments: Relationship to role assignments for a responder. + :type role_assignments: IncidentResponderRoleAssignmentsRelationship, optional + + :param user: Relationship to user. + :type user: NullableRelationshipToUser, none_type, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if last_modified_by is not unset: + kwargs["last_modified_by"] = last_modified_by + if role_assignments is not unset: + kwargs["role_assignments"] = role_assignments + if user is not unset: + kwargs["user"] = user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_responder_relationships_request.py b/datadog_api_client/v2/model/incident_responder_relationships_request.py new file mode 100644 index 0000000000..093a302cec --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_relationships_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_responder_user_relationship import IncidentResponderUserRelationship + +class IncidentResponderRelationshipsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_responder_user_relationship import IncidentResponderUserRelationship + return { + "user": (IncidentResponderUserRelationship,), + } + attribute_map = { + "user": "user", + } + + def __init__(self_, user: IncidentResponderUserRelationship, **kwargs): + """ + Relationships for creating an incident responder. + + :param user: Relationship to a user for a responder create request. + :type user: IncidentResponderUserRelationship + """ + super().__init__(kwargs) + + + self_.user = user diff --git a/datadog_api_client/v2/model/incident_responder_request.py b/datadog_api_client/v2/model/incident_responder_request.py new file mode 100644 index 0000000000..f107ee0656 --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_responder_data_request import IncidentResponderDataRequest + +class IncidentResponderRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_responder_data_request import IncidentResponderDataRequest + return { + "data": (IncidentResponderDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentResponderDataRequest, **kwargs): + """ + Request payload for creating an incident responder. + + :param data: Incident responder data in a create request. + :type data: IncidentResponderDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_responder_response.py b/datadog_api_client/v2/model/incident_responder_response.py new file mode 100644 index 0000000000..e968ec8323 --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_responder_data_response import IncidentResponderDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentResponderResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_responder_data_response import IncidentResponderDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": (IncidentResponderDataResponse,), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentResponderDataResponse, included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with a single incident responder. + + :param data: Incident responder data in a response. + :type data: IncidentResponderDataResponse + + :param included: Included related resources. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_responder_role_assignment_relationship_data.py b/datadog_api_client/v2/model/incident_responder_role_assignment_relationship_data.py new file mode 100644 index 0000000000..90c5348138 --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_role_assignment_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentResponderRoleAssignmentRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (UUID,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: str, **kwargs): + """ + A single role assignment relationship data object. + + :param id: The role assignment identifier. + :type id: UUID + + :param type: The role assignment resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_responder_role_assignments_relationship.py b/datadog_api_client/v2/model/incident_responder_role_assignments_relationship.py new file mode 100644 index 0000000000..295724cedd --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_role_assignments_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_responder_role_assignment_relationship_data import IncidentResponderRoleAssignmentRelationshipData + +class IncidentResponderRoleAssignmentsRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_responder_role_assignment_relationship_data import IncidentResponderRoleAssignmentRelationshipData + return { + "data": ([IncidentResponderRoleAssignmentRelationshipData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[IncidentResponderRoleAssignmentRelationshipData], UnsetType]=unset, **kwargs): + """ + Relationship to role assignments for a responder. + + :param data: List of role assignment relationship data. + :type data: [IncidentResponderRoleAssignmentRelationshipData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_responder_type.py b/datadog_api_client/v2/model/incident_responder_type.py new file mode 100644 index 0000000000..411fbbaad7 --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentResponderType(ModelSimple): + """ + Incident responder resource type. + + :param value: If omitted defaults to "incident_responders". Must be one of ["incident_responders"]. + :type value: str + """ + + allowed_values = { + "incident_responders", + } + INCIDENT_RESPONDERS: ClassVar["IncidentResponderType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentResponderType.INCIDENT_RESPONDERS = IncidentResponderType("incident_responders") diff --git a/datadog_api_client/v2/model/incident_responder_user_relationship.py b/datadog_api_client/v2/model/incident_responder_user_relationship.py new file mode 100644 index 0000000000..ac38196014 --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_user_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_responder_user_relationship_data import IncidentResponderUserRelationshipData + +class IncidentResponderUserRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_responder_user_relationship_data import IncidentResponderUserRelationshipData + return { + "data": (IncidentResponderUserRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentResponderUserRelationshipData, **kwargs): + """ + Relationship to a user for a responder create request. + + :param data: A user relationship data object for creating a responder. + :type data: IncidentResponderUserRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_responder_user_relationship_data.py b/datadog_api_client/v2/model/incident_responder_user_relationship_data.py new file mode 100644 index 0000000000..8ef91f507a --- /dev/null +++ b/datadog_api_client/v2/model/incident_responder_user_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentResponderUserRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (UUID,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: str, **kwargs): + """ + A user relationship data object for creating a responder. + + :param id: The user identifier. + :type id: UUID + + :param type: The user resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_responders_response.py b/datadog_api_client/v2/model/incident_responders_response.py new file mode 100644 index 0000000000..fa91caa912 --- /dev/null +++ b/datadog_api_client/v2/model/incident_responders_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_responder_data_response import IncidentResponderDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentRespondersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_responder_data_response import IncidentResponderDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": ([IncidentResponderDataResponse],), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: List[IncidentResponderDataResponse], included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with a list of incident responders. + + :param data: List of incident responders. + :type data: [IncidentResponderDataResponse] + + :param included: Included related resources. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_responders_type.py b/datadog_api_client/v2/model/incident_responders_type.py new file mode 100644 index 0000000000..b88f1fb388 --- /dev/null +++ b/datadog_api_client/v2/model/incident_responders_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentRespondersType(ModelSimple): + """ + The incident responders type. + + :param value: If omitted defaults to "incident_responders". Must be one of ["incident_responders"]. + :type value: str + """ + + allowed_values = { + "incident_responders", + } + INCIDENT_RESPONDERS: ClassVar["IncidentRespondersType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentRespondersType.INCIDENT_RESPONDERS = IncidentRespondersType("incident_responders") diff --git a/datadog_api_client/v2/model/incident_response.py b/datadog_api_client/v2/model/incident_response.py new file mode 100644 index 0000000000..7cee90082a --- /dev/null +++ b/datadog_api_client/v2/model/incident_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_response_data import IncidentResponseData + from datadog_api_client.v2.model.incident_response_included_item import IncidentResponseIncludedItem + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.attachment_data import AttachmentData + +class IncidentResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_response_data import IncidentResponseData + from datadog_api_client.v2.model.incident_response_included_item import IncidentResponseIncludedItem + return { + "data": (IncidentResponseData,), + "included": ([IncidentResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentResponseData, included: Union[List[Union[IncidentResponseIncludedItem, IncidentUserData, AttachmentData]], UnsetType]=unset, **kwargs): + """ + Response with an incident. + + :param data: Incident data from a response. + :type data: IncidentResponseData + + :param included: Included related resources that the user requested. + :type included: [IncidentResponseIncludedItem], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_response_attributes.py b/datadog_api_client/v2/model/incident_response_attributes.py new file mode 100644 index 0000000000..7c5fa6f85c --- /dev/null +++ b/datadog_api_client/v2/model/incident_response_attributes.py @@ -0,0 +1,258 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_non_datadog_creator import IncidentNonDatadogCreator + from datadog_api_client.v2.model.incident_field_attributes import IncidentFieldAttributes + from datadog_api_client.v2.model.incident_notification_handle import IncidentNotificationHandle + from datadog_api_client.v2.model.incident_severity import IncidentSeverity + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_non_datadog_creator import IncidentNonDatadogCreator + from datadog_api_client.v2.model.incident_field_attributes import IncidentFieldAttributes + from datadog_api_client.v2.model.incident_notification_handle import IncidentNotificationHandle + from datadog_api_client.v2.model.incident_severity import IncidentSeverity + return { + "archived": (datetime, none_type), + "case_id": (int, none_type), + "created": (datetime,), + "customer_impact_duration": (int,), + "customer_impact_end": (datetime, none_type), + "customer_impact_scope": (str, none_type), + "customer_impact_start": (datetime, none_type), + "customer_impacted": (bool,), + "declared": (datetime,), + "declared_by": (IncidentNonDatadogCreator,), + "declared_by_uuid": (str, none_type), + "detected": (datetime, none_type), + "fields": ({str: (IncidentFieldAttributes,)},), + "incident_type_uuid": (str,), + "is_test": (bool,), + "modified": (datetime,), + "non_datadog_creator": (IncidentNonDatadogCreator,), + "notification_handles": ([IncidentNotificationHandle], none_type), + "public_id": (int,), + "resolved": (datetime, none_type), + "severity": (IncidentSeverity,), + "state": (str, none_type), + "time_to_detect": (int,), + "time_to_internal_response": (int,), + "time_to_repair": (int,), + "time_to_resolve": (int,), + "title": (str,), + "visibility": (str, none_type), + } + attribute_map = { + "archived": "archived", + "case_id": "case_id", + "created": "created", + "customer_impact_duration": "customer_impact_duration", + "customer_impact_end": "customer_impact_end", + "customer_impact_scope": "customer_impact_scope", + "customer_impact_start": "customer_impact_start", + "customer_impacted": "customer_impacted", + "declared": "declared", + "declared_by": "declared_by", + "declared_by_uuid": "declared_by_uuid", + "detected": "detected", + "fields": "fields", + "incident_type_uuid": "incident_type_uuid", + "is_test": "is_test", + "modified": "modified", + "non_datadog_creator": "non_datadog_creator", + "notification_handles": "notification_handles", + "public_id": "public_id", + "resolved": "resolved", + "severity": "severity", + "state": "state", + "time_to_detect": "time_to_detect", + "time_to_internal_response": "time_to_internal_response", + "time_to_repair": "time_to_repair", + "time_to_resolve": "time_to_resolve", + "title": "title", + "visibility": "visibility", + } + read_only_vars = { + "archived", + "created", + "customer_impact_duration", + "declared", + "modified", + "time_to_detect", + "time_to_internal_response", + "time_to_repair", + "time_to_resolve", + } + + def __init__(self_, title: str, archived: Union[datetime, none_type, UnsetType]=unset, case_id: Union[int, none_type, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, customer_impact_duration: Union[int, UnsetType]=unset, customer_impact_end: Union[datetime, none_type, UnsetType]=unset, customer_impact_scope: Union[str, none_type, UnsetType]=unset, customer_impact_start: Union[datetime, none_type, UnsetType]=unset, customer_impacted: Union[bool, UnsetType]=unset, declared: Union[datetime, UnsetType]=unset, declared_by: Union[IncidentNonDatadogCreator, none_type, UnsetType]=unset, declared_by_uuid: Union[str, none_type, UnsetType]=unset, detected: Union[datetime, none_type, UnsetType]=unset, fields: Union[Dict[str, Union[IncidentFieldAttributes, IncidentFieldAttributesSingleValue, IncidentFieldAttributesMultipleValue]], UnsetType]=unset, incident_type_uuid: Union[str, UnsetType]=unset, is_test: Union[bool, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, non_datadog_creator: Union[IncidentNonDatadogCreator, none_type, UnsetType]=unset, notification_handles: Union[List[IncidentNotificationHandle], none_type, UnsetType]=unset, public_id: Union[int, UnsetType]=unset, resolved: Union[datetime, none_type, UnsetType]=unset, severity: Union[IncidentSeverity, UnsetType]=unset, state: Union[str, none_type, UnsetType]=unset, time_to_detect: Union[int, UnsetType]=unset, time_to_internal_response: Union[int, UnsetType]=unset, time_to_repair: Union[int, UnsetType]=unset, time_to_resolve: Union[int, UnsetType]=unset, visibility: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The incident's attributes from a response. + + :param archived: Timestamp of when the incident was archived. + :type archived: datetime, none_type, optional + + :param case_id: The incident case id. + :type case_id: int, none_type, optional + + :param created: Timestamp when the incident was created. + :type created: datetime, optional + + :param customer_impact_duration: Length of the incident's customer impact in seconds. + Equals the difference between ``customer_impact_start`` and ``customer_impact_end``. + :type customer_impact_duration: int, optional + + :param customer_impact_end: Timestamp when customers were no longer impacted by the incident. + :type customer_impact_end: datetime, none_type, optional + + :param customer_impact_scope: A summary of the impact customers experienced during the incident. + :type customer_impact_scope: str, none_type, optional + + :param customer_impact_start: Timestamp when customers began being impacted by the incident. + :type customer_impact_start: datetime, none_type, optional + + :param customer_impacted: A flag indicating whether the incident caused customer impact. + :type customer_impacted: bool, optional + + :param declared: Timestamp when the incident was declared. + :type declared: datetime, optional + + :param declared_by: Incident's non Datadog creator. + :type declared_by: IncidentNonDatadogCreator, none_type, optional + + :param declared_by_uuid: UUID of the user who declared the incident. + :type declared_by_uuid: str, none_type, optional + + :param detected: Timestamp when the incident was detected. + :type detected: datetime, none_type, optional + + :param fields: A condensed view of the user-defined fields attached to incidents. + :type fields: {str: (IncidentFieldAttributes,)}, optional + + :param incident_type_uuid: A unique identifier that represents an incident type. + :type incident_type_uuid: str, optional + + :param is_test: A flag indicating whether the incident is a test incident. + :type is_test: bool, optional + + :param modified: Timestamp when the incident was last modified. + :type modified: datetime, optional + + :param non_datadog_creator: Incident's non Datadog creator. + :type non_datadog_creator: IncidentNonDatadogCreator, none_type, optional + + :param notification_handles: Notification handles that will be notified of the incident during update. + :type notification_handles: [IncidentNotificationHandle], none_type, optional + + :param public_id: The monotonically increasing integer ID for the incident. + :type public_id: int, optional + + :param resolved: Timestamp when the incident's state was last changed from active or stable to resolved or completed. + :type resolved: datetime, none_type, optional + + :param severity: The incident severity. + :type severity: IncidentSeverity, optional + + :param state: The state incident. + :type state: str, none_type, optional + + :param time_to_detect: The amount of time in seconds to detect the incident. + Equals the difference between ``customer_impact_start`` and ``detected``. + :type time_to_detect: int, optional + + :param time_to_internal_response: The amount of time in seconds to call incident after detection. Equals the difference of ``detected`` and ``created``. + :type time_to_internal_response: int, optional + + :param time_to_repair: The amount of time in seconds to resolve customer impact after detecting the issue. Equals the difference between ``customer_impact_end`` and ``detected``. + :type time_to_repair: int, optional + + :param time_to_resolve: The amount of time in seconds to resolve the incident after it was created. Equals the difference between ``created`` and ``resolved``. + :type time_to_resolve: int, optional + + :param title: The title of the incident, which summarizes what happened. + :type title: str + + :param visibility: The incident visibility status. + :type visibility: str, none_type, optional + """ + if archived is not unset: + kwargs["archived"] = archived + if case_id is not unset: + kwargs["case_id"] = case_id + if created is not unset: + kwargs["created"] = created + if customer_impact_duration is not unset: + kwargs["customer_impact_duration"] = customer_impact_duration + if customer_impact_end is not unset: + kwargs["customer_impact_end"] = customer_impact_end + if customer_impact_scope is not unset: + kwargs["customer_impact_scope"] = customer_impact_scope + if customer_impact_start is not unset: + kwargs["customer_impact_start"] = customer_impact_start + if customer_impacted is not unset: + kwargs["customer_impacted"] = customer_impacted + if declared is not unset: + kwargs["declared"] = declared + if declared_by is not unset: + kwargs["declared_by"] = declared_by + if declared_by_uuid is not unset: + kwargs["declared_by_uuid"] = declared_by_uuid + if detected is not unset: + kwargs["detected"] = detected + if fields is not unset: + kwargs["fields"] = fields + if incident_type_uuid is not unset: + kwargs["incident_type_uuid"] = incident_type_uuid + if is_test is not unset: + kwargs["is_test"] = is_test + if modified is not unset: + kwargs["modified"] = modified + if non_datadog_creator is not unset: + kwargs["non_datadog_creator"] = non_datadog_creator + if notification_handles is not unset: + kwargs["notification_handles"] = notification_handles + if public_id is not unset: + kwargs["public_id"] = public_id + if resolved is not unset: + kwargs["resolved"] = resolved + if severity is not unset: + kwargs["severity"] = severity + if state is not unset: + kwargs["state"] = state + if time_to_detect is not unset: + kwargs["time_to_detect"] = time_to_detect + if time_to_internal_response is not unset: + kwargs["time_to_internal_response"] = time_to_internal_response + if time_to_repair is not unset: + kwargs["time_to_repair"] = time_to_repair + if time_to_resolve is not unset: + kwargs["time_to_resolve"] = time_to_resolve + if visibility is not unset: + kwargs["visibility"] = visibility + super().__init__(kwargs) + + + self_.title = title diff --git a/datadog_api_client/v2/model/incident_response_data.py b/datadog_api_client/v2/model/incident_response_data.py new file mode 100644 index 0000000000..ef26edf4e4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_response_attributes import IncidentResponseAttributes + from datadog_api_client.v2.model.incident_response_relationships import IncidentResponseRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_response_attributes import IncidentResponseAttributes + from datadog_api_client.v2.model.incident_response_relationships import IncidentResponseRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + return { + "attributes": (IncidentResponseAttributes,), + "id": (str,), + "relationships": (IncidentResponseRelationships,), + "type": (IncidentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentType, attributes: Union[IncidentResponseAttributes, UnsetType]=unset, relationships: Union[IncidentResponseRelationships, UnsetType]=unset, **kwargs): + """ + Incident data from a response. + + :param attributes: The incident's attributes from a response. + :type attributes: IncidentResponseAttributes, optional + + :param id: The incident's ID. + :type id: str + + :param relationships: The incident's relationships from a response. + :type relationships: IncidentResponseRelationships, optional + + :param type: Incident resource type. + :type type: IncidentType + """ + 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/datadog_api_client/v2/model/incident_response_included_item.py b/datadog_api_client/v2/model/incident_response_included_item.py new file mode 100644 index 0000000000..4bea118b8e --- /dev/null +++ b/datadog_api_client/v2/model/incident_response_included_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to an incident that is included in the response. + + :param attributes: Attributes of user object returned by the API. + :type attributes: IncidentUserAttributes, optional + + :param id: ID of the user. + :type id: str, optional + + :param type: Users resource type. + :type type: UsersType, optional + + :param relationships: The attachment's resource relationships. + :type relationships: AttachmentDataRelationships + """ + 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.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.attachment_data import AttachmentData + return { + "oneOf": [ + IncidentUserData, + AttachmentData, + ], + } diff --git a/datadog_api_client/v2/model/incident_response_meta.py b/datadog_api_client/v2/model/incident_response_meta.py new file mode 100644 index 0000000000..4d913dbef9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_response_meta_pagination import IncidentResponseMetaPagination + +class IncidentResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_response_meta_pagination import IncidentResponseMetaPagination + return { + "pagination": (IncidentResponseMetaPagination,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[IncidentResponseMetaPagination, UnsetType]=unset, **kwargs): + """ + The metadata object containing pagination metadata. + + :param pagination: Pagination properties. + :type pagination: IncidentResponseMetaPagination, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_response_meta_pagination.py b/datadog_api_client/v2/model/incident_response_meta_pagination.py new file mode 100644 index 0000000000..e1c5b1373f --- /dev/null +++ b/datadog_api_client/v2/model/incident_response_meta_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentResponseMetaPagination(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 properties. + + :param next_offset: The index of the first element in the next page of results. Equal to page size added to the current offset. + :type next_offset: int, optional + + :param offset: The index of the first element in the results. + :type offset: int, optional + + :param size: Maximum size of pages to return. + :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/datadog_api_client/v2/model/incident_response_relationships.py b/datadog_api_client/v2/model/incident_response_relationships.py new file mode 100644 index 0000000000..626fa1b277 --- /dev/null +++ b/datadog_api_client/v2/model/incident_response_relationships.py @@ -0,0 +1,117 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_attachment import RelationshipToIncidentAttachment + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.relationship_to_incident_impacts import RelationshipToIncidentImpacts + from datadog_api_client.v2.model.relationship_to_incident_integration_metadatas import RelationshipToIncidentIntegrationMetadatas + from datadog_api_client.v2.model.relationship_to_incident_responders import RelationshipToIncidentResponders + from datadog_api_client.v2.model.relationship_to_incident_user_defined_fields import RelationshipToIncidentUserDefinedFields + +class IncidentResponseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_attachment import RelationshipToIncidentAttachment + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.relationship_to_incident_impacts import RelationshipToIncidentImpacts + from datadog_api_client.v2.model.relationship_to_incident_integration_metadatas import RelationshipToIncidentIntegrationMetadatas + from datadog_api_client.v2.model.relationship_to_incident_responders import RelationshipToIncidentResponders + from datadog_api_client.v2.model.relationship_to_incident_user_defined_fields import RelationshipToIncidentUserDefinedFields + return { + "attachments": (RelationshipToIncidentAttachment,), + "commander_user": (NullableRelationshipToUser,), + "created_by_user": (RelationshipToUser,), + "declared_by_user": (RelationshipToUser,), + "impacts": (RelationshipToIncidentImpacts,), + "integrations": (RelationshipToIncidentIntegrationMetadatas,), + "last_modified_by_user": (RelationshipToUser,), + "responders": (RelationshipToIncidentResponders,), + "user_defined_fields": (RelationshipToIncidentUserDefinedFields,), + } + attribute_map = { + "attachments": "attachments", + "commander_user": "commander_user", + "created_by_user": "created_by_user", + "declared_by_user": "declared_by_user", + "impacts": "impacts", + "integrations": "integrations", + "last_modified_by_user": "last_modified_by_user", + "responders": "responders", + "user_defined_fields": "user_defined_fields", + } + + def __init__(self_, attachments: Union[RelationshipToIncidentAttachment, UnsetType]=unset, commander_user: Union[NullableRelationshipToUser, none_type, UnsetType]=unset, created_by_user: Union[RelationshipToUser, UnsetType]=unset, declared_by_user: Union[RelationshipToUser, UnsetType]=unset, impacts: Union[RelationshipToIncidentImpacts, UnsetType]=unset, integrations: Union[RelationshipToIncidentIntegrationMetadatas, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, responders: Union[RelationshipToIncidentResponders, UnsetType]=unset, user_defined_fields: Union[RelationshipToIncidentUserDefinedFields, UnsetType]=unset, **kwargs): + """ + The incident's relationships from a response. + + :param attachments: A relationship reference for attachments. + :type attachments: RelationshipToIncidentAttachment, optional + + :param commander_user: Relationship to user. + :type commander_user: NullableRelationshipToUser, none_type, optional + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param declared_by_user: Relationship to user. + :type declared_by_user: RelationshipToUser, optional + + :param impacts: Relationship to impacts. + :type impacts: RelationshipToIncidentImpacts, optional + + :param integrations: A relationship reference for multiple integration metadata objects. + :type integrations: RelationshipToIncidentIntegrationMetadatas, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + + :param responders: Relationship to incident responders. + :type responders: RelationshipToIncidentResponders, optional + + :param user_defined_fields: Relationship to incident user defined fields. + :type user_defined_fields: RelationshipToIncidentUserDefinedFields, optional + """ + if attachments is not unset: + kwargs["attachments"] = attachments + if commander_user is not unset: + kwargs["commander_user"] = commander_user + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if declared_by_user is not unset: + kwargs["declared_by_user"] = declared_by_user + if impacts is not unset: + kwargs["impacts"] = impacts + if integrations is not unset: + kwargs["integrations"] = integrations + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if responders is not unset: + kwargs["responders"] = responders + if user_defined_fields is not unset: + kwargs["user_defined_fields"] = user_defined_fields + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_rule_condition.py b/datadog_api_client/v2/model/incident_rule_condition.py new file mode 100644 index 0000000000..8cfb5ef828 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_condition.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentRuleCondition(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 for an incident rule. + + :param field: The field to match on. + :type field: str + + :param values: The values to match. + :type values: [str] + """ + super().__init__(kwargs) + + + self_.field = field + self_.values = values diff --git a/datadog_api_client/v2/model/incident_rule_data_attributes_request.py b/datadog_api_client/v2/model/incident_rule_data_attributes_request.py new file mode 100644 index 0000000000..df572c8a98 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_data_attributes_request.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_query_condition import IncidentRuleQueryCondition + from datadog_api_client.v2.model.incident_rule_condition import IncidentRuleCondition + from datadog_api_client.v2.model.incident_rule_execution_type import IncidentRuleExecutionType + from datadog_api_client.v2.model.incident_rule_task_id_type import IncidentRuleTaskIDType + from datadog_api_client.v2.model.incident_rule_trigger_type import IncidentRuleTriggerType + +class IncidentRuleDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_query_condition import IncidentRuleQueryCondition + from datadog_api_client.v2.model.incident_rule_condition import IncidentRuleCondition + from datadog_api_client.v2.model.incident_rule_execution_type import IncidentRuleExecutionType + from datadog_api_client.v2.model.incident_rule_task_id_type import IncidentRuleTaskIDType + from datadog_api_client.v2.model.incident_rule_trigger_type import IncidentRuleTriggerType + return { + "condition": (IncidentRuleQueryCondition,), + "condition_table_type": (int,), + "conditions": ([IncidentRuleCondition],), + "enabled": (bool,), + "execution_type": (IncidentRuleExecutionType,), + "incident_type_uuid": (UUID, none_type), + "match_any_condition": (bool,), + "task_id": (IncidentRuleTaskIDType,), + "task_payload": (str,), + "trigger": (IncidentRuleTriggerType,), + } + attribute_map = { + "condition": "condition", + "condition_table_type": "condition_table_type", + "conditions": "conditions", + "enabled": "enabled", + "execution_type": "execution_type", + "incident_type_uuid": "incident_type_uuid", + "match_any_condition": "match_any_condition", + "task_id": "task_id", + "task_payload": "task_payload", + "trigger": "trigger", + } + + def __init__(self_, condition: IncidentRuleQueryCondition, condition_table_type: int, enabled: bool, execution_type: IncidentRuleExecutionType, task_id: IncidentRuleTaskIDType, task_payload: str, conditions: Union[List[IncidentRuleCondition], UnsetType]=unset, incident_type_uuid: Union[UUID, none_type, UnsetType]=unset, match_any_condition: Union[bool, UnsetType]=unset, trigger: Union[IncidentRuleTriggerType, UnsetType]=unset, **kwargs): + """ + Attributes for creating an incident rule. + + :param condition: A query-based condition for an incident rule. + :type condition: IncidentRuleQueryCondition + + :param condition_table_type: The condition table type. 1 = raw query. + :type condition_table_type: int + + :param conditions: List of field-based conditions. + :type conditions: [IncidentRuleCondition], optional + + :param enabled: Whether the rule is enabled. + :type enabled: bool + + :param execution_type: The execution type of an incident rule. + :type execution_type: IncidentRuleExecutionType + + :param incident_type_uuid: The UUID of the incident type this rule applies to. + :type incident_type_uuid: UUID, none_type, optional + + :param match_any_condition: Whether any condition (OR logic) should match instead of all (AND logic). + :type match_any_condition: bool, optional + + :param task_id: The task ID for an incident rule. + :type task_id: IncidentRuleTaskIDType + + :param task_payload: The JSON-encoded payload for the task. + :type task_payload: str + + :param trigger: The trigger event for an incident rule. + :type trigger: IncidentRuleTriggerType, optional + """ + if conditions is not unset: + kwargs["conditions"] = conditions + if incident_type_uuid is not unset: + kwargs["incident_type_uuid"] = incident_type_uuid + if match_any_condition is not unset: + kwargs["match_any_condition"] = match_any_condition + if trigger is not unset: + kwargs["trigger"] = trigger + super().__init__(kwargs) + + + self_.condition = condition + self_.condition_table_type = condition_table_type + self_.enabled = enabled + self_.execution_type = execution_type + self_.task_id = task_id + self_.task_payload = task_payload diff --git a/datadog_api_client/v2/model/incident_rule_data_attributes_response.py b/datadog_api_client/v2/model/incident_rule_data_attributes_response.py new file mode 100644 index 0000000000..beb40b12ff --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_data_attributes_response.py @@ -0,0 +1,156 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_query_condition import IncidentRuleQueryCondition + from datadog_api_client.v2.model.incident_rule_condition import IncidentRuleCondition + +class IncidentRuleDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_query_condition import IncidentRuleQueryCondition + from datadog_api_client.v2.model.incident_rule_condition import IncidentRuleCondition + return { + "condition": (IncidentRuleQueryCondition,), + "condition_table_type": (int,), + "conditions": ([IncidentRuleCondition],), + "created": (datetime,), + "created_by_uuid": (UUID,), + "deleted": (datetime, none_type), + "enabled": (bool,), + "execution_type": (int,), + "incident_settings_association_uuid": (UUID, none_type), + "match_any_condition": (bool,), + "modified": (datetime,), + "modified_by_uuid": (UUID,), + "org_id": (int,), + "task_id": (str, none_type), + "task_payload": (str, none_type), + "trigger": (str,), + } + attribute_map = { + "condition": "condition", + "condition_table_type": "condition_table_type", + "conditions": "conditions", + "created": "created", + "created_by_uuid": "created_by_uuid", + "deleted": "deleted", + "enabled": "enabled", + "execution_type": "execution_type", + "incident_settings_association_uuid": "incident_settings_association_uuid", + "match_any_condition": "match_any_condition", + "modified": "modified", + "modified_by_uuid": "modified_by_uuid", + "org_id": "org_id", + "task_id": "task_id", + "task_payload": "task_payload", + "trigger": "trigger", + } + + def __init__(self_, condition: Union[IncidentRuleQueryCondition, UnsetType]=unset, condition_table_type: Union[int, UnsetType]=unset, conditions: Union[List[IncidentRuleCondition], UnsetType]=unset, created: Union[datetime, UnsetType]=unset, created_by_uuid: Union[UUID, UnsetType]=unset, deleted: Union[datetime, none_type, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, execution_type: Union[int, UnsetType]=unset, incident_settings_association_uuid: Union[UUID, none_type, UnsetType]=unset, match_any_condition: Union[bool, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, modified_by_uuid: Union[UUID, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, task_id: Union[str, none_type, UnsetType]=unset, task_payload: Union[str, none_type, UnsetType]=unset, trigger: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an incident rule in a response. + + :param condition: A query-based condition for an incident rule. + :type condition: IncidentRuleQueryCondition, optional + + :param condition_table_type: The condition table type. + :type condition_table_type: int, optional + + :param conditions: List of field-based conditions. + :type conditions: [IncidentRuleCondition], optional + + :param created: Timestamp when the rule was created. + :type created: datetime, optional + + :param created_by_uuid: UUID of the user who created the rule. + :type created_by_uuid: UUID, optional + + :param deleted: Timestamp when the rule was deleted. + :type deleted: datetime, none_type, optional + + :param enabled: Whether the rule is enabled. + :type enabled: bool, optional + + :param execution_type: The execution type of the rule. + :type execution_type: int, optional + + :param incident_settings_association_uuid: The incident settings association UUID. + :type incident_settings_association_uuid: UUID, none_type, optional + + :param match_any_condition: Whether any condition should match. + :type match_any_condition: bool, optional + + :param modified: Timestamp when the rule was last modified. + :type modified: datetime, optional + + :param modified_by_uuid: UUID of the user who last modified the rule. + :type modified_by_uuid: UUID, optional + + :param org_id: The organization ID. + :type org_id: int, optional + + :param task_id: The task ID. + :type task_id: str, none_type, optional + + :param task_payload: The JSON-encoded task payload. + :type task_payload: str, none_type, optional + + :param trigger: The trigger event for the rule. + :type trigger: str, optional + """ + if condition is not unset: + kwargs["condition"] = condition + if condition_table_type is not unset: + kwargs["condition_table_type"] = condition_table_type + if conditions is not unset: + kwargs["conditions"] = conditions + if created is not unset: + kwargs["created"] = created + if created_by_uuid is not unset: + kwargs["created_by_uuid"] = created_by_uuid + if deleted is not unset: + kwargs["deleted"] = deleted + if enabled is not unset: + kwargs["enabled"] = enabled + if execution_type is not unset: + kwargs["execution_type"] = execution_type + if incident_settings_association_uuid is not unset: + kwargs["incident_settings_association_uuid"] = incident_settings_association_uuid + if match_any_condition is not unset: + kwargs["match_any_condition"] = match_any_condition + if modified is not unset: + kwargs["modified"] = modified + if modified_by_uuid is not unset: + kwargs["modified_by_uuid"] = modified_by_uuid + if org_id is not unset: + kwargs["org_id"] = org_id + if task_id is not unset: + kwargs["task_id"] = task_id + if task_payload is not unset: + kwargs["task_payload"] = task_payload + if trigger is not unset: + kwargs["trigger"] = trigger + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_rule_data_request.py b/datadog_api_client/v2/model/incident_rule_data_request.py new file mode 100644 index 0000000000..a680306981 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_data_attributes_request import IncidentRuleDataAttributesRequest + from datadog_api_client.v2.model.incident_rule_type import IncidentRuleType + +class IncidentRuleDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_data_attributes_request import IncidentRuleDataAttributesRequest + from datadog_api_client.v2.model.incident_rule_type import IncidentRuleType + return { + "attributes": (IncidentRuleDataAttributesRequest,), + "type": (IncidentRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentRuleDataAttributesRequest, type: IncidentRuleType, **kwargs): + """ + Incident rule data in a create request. + + :param attributes: Attributes for creating an incident rule. + :type attributes: IncidentRuleDataAttributesRequest + + :param type: Incident rule resource type. + :type type: IncidentRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_rule_data_response.py b/datadog_api_client/v2/model/incident_rule_data_response.py new file mode 100644 index 0000000000..14507ee513 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_data_attributes_response import IncidentRuleDataAttributesResponse + from datadog_api_client.v2.model.incident_rule_response_type import IncidentRuleResponseType + +class IncidentRuleDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_data_attributes_response import IncidentRuleDataAttributesResponse + from datadog_api_client.v2.model.incident_rule_response_type import IncidentRuleResponseType + return { + "attributes": (IncidentRuleDataAttributesResponse,), + "id": (UUID,), + "type": (IncidentRuleResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IncidentRuleDataAttributesResponse, id: UUID, type: IncidentRuleResponseType, **kwargs): + """ + Incident rule data in a response. + + :param attributes: Attributes of an incident rule in a response. + :type attributes: IncidentRuleDataAttributesResponse + + :param id: The rule identifier. + :type id: UUID + + :param type: Incident rule response resource type. + :type type: IncidentRuleResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_rule_execution_type.py b/datadog_api_client/v2/model/incident_rule_execution_type.py new file mode 100644 index 0000000000..38bdc12935 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_execution_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentRuleExecutionType(ModelSimple): + """ + The execution type of an incident rule. + + :param value: Must be one of [1, 2]. + :type value: int + """ + + allowed_values = { + 1, + 2, + } + SINGLE_EXECUTION: ClassVar["IncidentRuleExecutionType"] + MULTI_EXECUTION: ClassVar["IncidentRuleExecutionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +IncidentRuleExecutionType.SINGLE_EXECUTION = IncidentRuleExecutionType(1) +IncidentRuleExecutionType.MULTI_EXECUTION = IncidentRuleExecutionType(2) diff --git a/datadog_api_client/v2/model/incident_rule_patch_data_attributes_request.py b/datadog_api_client/v2/model/incident_rule_patch_data_attributes_request.py new file mode 100644 index 0000000000..a4ea7541b3 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_patch_data_attributes_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_query_condition import IncidentRuleQueryCondition + from datadog_api_client.v2.model.incident_rule_condition import IncidentRuleCondition + from datadog_api_client.v2.model.incident_rule_trigger_type import IncidentRuleTriggerType + +class IncidentRulePatchDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_query_condition import IncidentRuleQueryCondition + from datadog_api_client.v2.model.incident_rule_condition import IncidentRuleCondition + from datadog_api_client.v2.model.incident_rule_trigger_type import IncidentRuleTriggerType + return { + "condition": (IncidentRuleQueryCondition,), + "conditions": ([IncidentRuleCondition],), + "enabled": (bool,), + "task_payload": (str,), + "trigger": (IncidentRuleTriggerType,), + } + attribute_map = { + "condition": "condition", + "conditions": "conditions", + "enabled": "enabled", + "task_payload": "task_payload", + "trigger": "trigger", + } + + def __init__(self_, condition: Union[IncidentRuleQueryCondition, UnsetType]=unset, conditions: Union[List[IncidentRuleCondition], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, task_payload: Union[str, UnsetType]=unset, trigger: Union[IncidentRuleTriggerType, UnsetType]=unset, **kwargs): + """ + Attributes for patching an incident rule. All fields are optional. + + :param condition: A query-based condition for an incident rule. + :type condition: IncidentRuleQueryCondition, optional + + :param conditions: List of field-based conditions. + :type conditions: [IncidentRuleCondition], optional + + :param enabled: Whether the rule is enabled. + :type enabled: bool, optional + + :param task_payload: The JSON-encoded payload for the task. + :type task_payload: str, optional + + :param trigger: The trigger event for an incident rule. + :type trigger: IncidentRuleTriggerType, optional + """ + if condition is not unset: + kwargs["condition"] = condition + if conditions is not unset: + kwargs["conditions"] = conditions + if enabled is not unset: + kwargs["enabled"] = enabled + if task_payload is not unset: + kwargs["task_payload"] = task_payload + if trigger is not unset: + kwargs["trigger"] = trigger + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_rule_patch_data_request.py b/datadog_api_client/v2/model/incident_rule_patch_data_request.py new file mode 100644 index 0000000000..185df087af --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_patch_data_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_patch_data_attributes_request import IncidentRulePatchDataAttributesRequest + from datadog_api_client.v2.model.incident_rule_type import IncidentRuleType + +class IncidentRulePatchDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_patch_data_attributes_request import IncidentRulePatchDataAttributesRequest + from datadog_api_client.v2.model.incident_rule_type import IncidentRuleType + return { + "attributes": (IncidentRulePatchDataAttributesRequest,), + "id": (UUID,), + "type": (IncidentRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentRuleType, attributes: Union[IncidentRulePatchDataAttributesRequest, UnsetType]=unset, **kwargs): + """ + Incident rule data in a patch request. + + :param attributes: Attributes for patching an incident rule. All fields are optional. + :type attributes: IncidentRulePatchDataAttributesRequest, optional + + :param id: The rule identifier. + :type id: UUID + + :param type: Incident rule resource type. + :type type: IncidentRuleType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_rule_patch_request.py b/datadog_api_client/v2/model/incident_rule_patch_request.py new file mode 100644 index 0000000000..e0ed9798d4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_patch_data_request import IncidentRulePatchDataRequest + +class IncidentRulePatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_patch_data_request import IncidentRulePatchDataRequest + return { + "data": (IncidentRulePatchDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentRulePatchDataRequest, **kwargs): + """ + Request payload for patching an incident rule. + + :param data: Incident rule data in a patch request. + :type data: IncidentRulePatchDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_rule_query_condition.py b/datadog_api_client/v2/model/incident_rule_query_condition.py new file mode 100644 index 0000000000..0dde00f6a8 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_query_condition.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentRuleQueryCondition(ModelNormal): + @cached_property + def openapi_types(_): + return { + "normalized_query": (str, none_type), + "raw_query": (str, none_type), + } + attribute_map = { + "normalized_query": "normalized_query", + "raw_query": "raw_query", + } + + def __init__(self_, normalized_query: Union[str, none_type, UnsetType]=unset, raw_query: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + A query-based condition for an incident rule. + + :param normalized_query: The normalized query string. + :type normalized_query: str, none_type, optional + + :param raw_query: The raw query string. + :type raw_query: str, none_type, optional + """ + if normalized_query is not unset: + kwargs["normalized_query"] = normalized_query + if raw_query is not unset: + kwargs["raw_query"] = raw_query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_rule_request.py b/datadog_api_client/v2/model/incident_rule_request.py new file mode 100644 index 0000000000..720dedb10e --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_data_request import IncidentRuleDataRequest + +class IncidentRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_data_request import IncidentRuleDataRequest + return { + "data": (IncidentRuleDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentRuleDataRequest, **kwargs): + """ + Request payload for creating an incident rule. + + :param data: Incident rule data in a create request. + :type data: IncidentRuleDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_rule_response.py b/datadog_api_client/v2/model/incident_rule_response.py new file mode 100644 index 0000000000..a48a8867f2 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_data_response import IncidentRuleDataResponse + +class IncidentRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_data_response import IncidentRuleDataResponse + return { + "data": (IncidentRuleDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentRuleDataResponse, **kwargs): + """ + Response with a single incident rule. + + :param data: Incident rule data in a response. + :type data: IncidentRuleDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_rule_response_type.py b/datadog_api_client/v2/model/incident_rule_response_type.py new file mode 100644 index 0000000000..13a48bf4c9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentRuleResponseType(ModelSimple): + """ + Incident rule response resource type. + + :param value: If omitted defaults to "incidents_rules". Must be one of ["incidents_rules"]. + :type value: str + """ + + allowed_values = { + "incidents_rules", + } + INCIDENTS_RULES: ClassVar["IncidentRuleResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentRuleResponseType.INCIDENTS_RULES = IncidentRuleResponseType("incidents_rules") diff --git a/datadog_api_client/v2/model/incident_rule_task_id_type.py b/datadog_api_client/v2/model/incident_rule_task_id_type.py new file mode 100644 index 0000000000..a1ff5fdce3 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_task_id_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentRuleTaskIDType(ModelSimple): + """ + The task ID for an incident rule. + + :param value: Must be one of ["jira-create-issue-job", "notify-incident-handles-job", "servicenow-create-incident-job", "slack-create-channel-job", "zoom-create-meeting-job", "google-meet-create-meeting-job", "workflow-automation-job", "ms-teams-create-meeting-job", "google-chat-create-space-job", "zoom-suppress-summarization-job", "ms-teams-suppress-summarization-job", "google-meet-suppress-summarization-job"]. + :type value: str + """ + + allowed_values = { + "jira-create-issue-job", + "notify-incident-handles-job", + "servicenow-create-incident-job", + "slack-create-channel-job", + "zoom-create-meeting-job", + "google-meet-create-meeting-job", + "workflow-automation-job", + "ms-teams-create-meeting-job", + "google-chat-create-space-job", + "zoom-suppress-summarization-job", + "ms-teams-suppress-summarization-job", + "google-meet-suppress-summarization-job", + } + JIRA_CREATE_ISSUE_JOB: ClassVar["IncidentRuleTaskIDType"] + NOTIFY_INCIDENT_HANDLES_JOB: ClassVar["IncidentRuleTaskIDType"] + SERVICENOW_CREATE_INCIDENT_JOB: ClassVar["IncidentRuleTaskIDType"] + SLACK_CREATE_CHANNEL_JOB: ClassVar["IncidentRuleTaskIDType"] + ZOOM_CREATE_MEETING_JOB: ClassVar["IncidentRuleTaskIDType"] + GOOGLE_MEET_CREATE_MEETING_JOB: ClassVar["IncidentRuleTaskIDType"] + WORKFLOW_AUTOMATION_JOB: ClassVar["IncidentRuleTaskIDType"] + MS_TEAMS_CREATE_MEETING_JOB: ClassVar["IncidentRuleTaskIDType"] + GOOGLE_CHAT_CREATE_SPACE_JOB: ClassVar["IncidentRuleTaskIDType"] + ZOOM_SUPPRESS_SUMMARIZATION_JOB: ClassVar["IncidentRuleTaskIDType"] + MS_TEAMS_SUPPRESS_SUMMARIZATION_JOB: ClassVar["IncidentRuleTaskIDType"] + GOOGLE_MEET_SUPPRESS_SUMMARIZATION_JOB: ClassVar["IncidentRuleTaskIDType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentRuleTaskIDType.JIRA_CREATE_ISSUE_JOB = IncidentRuleTaskIDType("jira-create-issue-job") +IncidentRuleTaskIDType.NOTIFY_INCIDENT_HANDLES_JOB = IncidentRuleTaskIDType("notify-incident-handles-job") +IncidentRuleTaskIDType.SERVICENOW_CREATE_INCIDENT_JOB = IncidentRuleTaskIDType("servicenow-create-incident-job") +IncidentRuleTaskIDType.SLACK_CREATE_CHANNEL_JOB = IncidentRuleTaskIDType("slack-create-channel-job") +IncidentRuleTaskIDType.ZOOM_CREATE_MEETING_JOB = IncidentRuleTaskIDType("zoom-create-meeting-job") +IncidentRuleTaskIDType.GOOGLE_MEET_CREATE_MEETING_JOB = IncidentRuleTaskIDType("google-meet-create-meeting-job") +IncidentRuleTaskIDType.WORKFLOW_AUTOMATION_JOB = IncidentRuleTaskIDType("workflow-automation-job") +IncidentRuleTaskIDType.MS_TEAMS_CREATE_MEETING_JOB = IncidentRuleTaskIDType("ms-teams-create-meeting-job") +IncidentRuleTaskIDType.GOOGLE_CHAT_CREATE_SPACE_JOB = IncidentRuleTaskIDType("google-chat-create-space-job") +IncidentRuleTaskIDType.ZOOM_SUPPRESS_SUMMARIZATION_JOB = IncidentRuleTaskIDType("zoom-suppress-summarization-job") +IncidentRuleTaskIDType.MS_TEAMS_SUPPRESS_SUMMARIZATION_JOB = IncidentRuleTaskIDType("ms-teams-suppress-summarization-job") +IncidentRuleTaskIDType.GOOGLE_MEET_SUPPRESS_SUMMARIZATION_JOB = IncidentRuleTaskIDType("google-meet-suppress-summarization-job") diff --git a/datadog_api_client/v2/model/incident_rule_trigger_type.py b/datadog_api_client/v2/model/incident_rule_trigger_type.py new file mode 100644 index 0000000000..01a1f09920 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_trigger_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentRuleTriggerType(ModelSimple): + """ + The trigger event for an incident rule. + + :param value: Must be one of ["incident_saved_trigger", "incident_created_trigger", "incident_modified_trigger"]. + :type value: str + """ + + allowed_values = { + "incident_saved_trigger", + "incident_created_trigger", + "incident_modified_trigger", + } + INCIDENT_SAVED_TRIGGER: ClassVar["IncidentRuleTriggerType"] + INCIDENT_CREATED_TRIGGER: ClassVar["IncidentRuleTriggerType"] + INCIDENT_MODIFIED_TRIGGER: ClassVar["IncidentRuleTriggerType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentRuleTriggerType.INCIDENT_SAVED_TRIGGER = IncidentRuleTriggerType("incident_saved_trigger") +IncidentRuleTriggerType.INCIDENT_CREATED_TRIGGER = IncidentRuleTriggerType("incident_created_trigger") +IncidentRuleTriggerType.INCIDENT_MODIFIED_TRIGGER = IncidentRuleTriggerType("incident_modified_trigger") diff --git a/datadog_api_client/v2/model/incident_rule_type.py b/datadog_api_client/v2/model/incident_rule_type.py new file mode 100644 index 0000000000..70fd2eeb89 --- /dev/null +++ b/datadog_api_client/v2/model/incident_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentRuleType(ModelSimple): + """ + Incident rule resource type. + + :param value: If omitted defaults to "incident_rules". Must be one of ["incident_rules"]. + :type value: str + """ + + allowed_values = { + "incident_rules", + } + INCIDENT_RULES: ClassVar["IncidentRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentRuleType.INCIDENT_RULES = IncidentRuleType("incident_rules") diff --git a/datadog_api_client/v2/model/incident_rules_response.py b/datadog_api_client/v2/model/incident_rules_response.py new file mode 100644 index 0000000000..874c8cd95e --- /dev/null +++ b/datadog_api_client/v2/model/incident_rules_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_rule_data_response import IncidentRuleDataResponse + +class IncidentRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_rule_data_response import IncidentRuleDataResponse + return { + "data": ([IncidentRuleDataResponse],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[IncidentRuleDataResponse], **kwargs): + """ + Response with a list of incident rules. + + :param data: List of incident rules. + :type data: [IncidentRuleDataResponse] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_search_response.py b/datadog_api_client/v2/model/incident_search_response.py new file mode 100644 index 0000000000..2beb3fb016 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_search_response_data import IncidentSearchResponseData + from datadog_api_client.v2.model.incident_response_included_item import IncidentResponseIncludedItem + from datadog_api_client.v2.model.incident_search_response_meta import IncidentSearchResponseMeta + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.attachment_data import AttachmentData + +class IncidentSearchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_search_response_data import IncidentSearchResponseData + from datadog_api_client.v2.model.incident_response_included_item import IncidentResponseIncludedItem + from datadog_api_client.v2.model.incident_search_response_meta import IncidentSearchResponseMeta + return { + "data": (IncidentSearchResponseData,), + "included": ([IncidentResponseIncludedItem],), + "meta": (IncidentSearchResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + read_only_vars = { + "included", + "meta", + } + + def __init__(self_, data: IncidentSearchResponseData, included: Union[List[Union[IncidentResponseIncludedItem, IncidentUserData, AttachmentData]], UnsetType]=unset, meta: Union[IncidentSearchResponseMeta, UnsetType]=unset, **kwargs): + """ + Response with incidents and facets. + + :param data: Data returned by an incident search. + :type data: IncidentSearchResponseData + + :param included: Included related resources that the user requested. + :type included: [IncidentResponseIncludedItem], optional + + :param meta: The metadata object containing pagination metadata. + :type meta: IncidentSearchResponseMeta, 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/datadog_api_client/v2/model/incident_search_response_attributes.py b/datadog_api_client/v2/model/incident_search_response_attributes.py new file mode 100644 index 0000000000..4f28191840 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_search_response_facets_data import IncidentSearchResponseFacetsData + from datadog_api_client.v2.model.incident_search_response_incidents_data import IncidentSearchResponseIncidentsData + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentSearchResponseAttributes(ModelNormal): + validations = { + "total": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_search_response_facets_data import IncidentSearchResponseFacetsData + from datadog_api_client.v2.model.incident_search_response_incidents_data import IncidentSearchResponseIncidentsData + return { + "facets": (IncidentSearchResponseFacetsData,), + "incidents": ([IncidentSearchResponseIncidentsData],), + "total": (int,), + } + attribute_map = { + "facets": "facets", + "incidents": "incidents", + "total": "total", + } + + def __init__(self_, facets: IncidentSearchResponseFacetsData, incidents: List[IncidentSearchResponseIncidentsData], total: int, **kwargs): + """ + Attributes returned by an incident search. + + :param facets: Facet data for incidents returned by a search query. + :type facets: IncidentSearchResponseFacetsData + + :param incidents: Incidents returned by the search. + :type incidents: [IncidentSearchResponseIncidentsData] + + :param total: Number of incidents returned by the search. + :type total: int + """ + super().__init__(kwargs) + + + self_.facets = facets + self_.incidents = incidents + self_.total = total diff --git a/datadog_api_client/v2/model/incident_search_response_data.py b/datadog_api_client/v2/model/incident_search_response_data.py new file mode 100644 index 0000000000..34a4b36e90 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_search_response_attributes import IncidentSearchResponseAttributes + from datadog_api_client.v2.model.incident_search_results_type import IncidentSearchResultsType + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentSearchResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_search_response_attributes import IncidentSearchResponseAttributes + from datadog_api_client.v2.model.incident_search_results_type import IncidentSearchResultsType + return { + "attributes": (IncidentSearchResponseAttributes,), + "type": (IncidentSearchResultsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[IncidentSearchResponseAttributes, UnsetType]=unset, type: Union[IncidentSearchResultsType, UnsetType]=unset, **kwargs): + """ + Data returned by an incident search. + + :param attributes: Attributes returned by an incident search. + :type attributes: IncidentSearchResponseAttributes, optional + + :param type: Incident search result type. + :type type: IncidentSearchResultsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_search_response_facets_data.py b/datadog_api_client/v2/model/incident_search_response_facets_data.py new file mode 100644 index 0000000000..9749815a10 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_facets_data.py @@ -0,0 +1,125 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_search_response_user_facet_data import IncidentSearchResponseUserFacetData + from datadog_api_client.v2.model.incident_search_response_property_field_facet_data import IncidentSearchResponsePropertyFieldFacetData + from datadog_api_client.v2.model.incident_search_response_field_facet_data import IncidentSearchResponseFieldFacetData + from datadog_api_client.v2.model.incident_search_response_numeric_facet_data import IncidentSearchResponseNumericFacetData + +class IncidentSearchResponseFacetsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_search_response_user_facet_data import IncidentSearchResponseUserFacetData + from datadog_api_client.v2.model.incident_search_response_property_field_facet_data import IncidentSearchResponsePropertyFieldFacetData + from datadog_api_client.v2.model.incident_search_response_field_facet_data import IncidentSearchResponseFieldFacetData + from datadog_api_client.v2.model.incident_search_response_numeric_facet_data import IncidentSearchResponseNumericFacetData + return { + "commander": ([IncidentSearchResponseUserFacetData],), + "created_by": ([IncidentSearchResponseUserFacetData],), + "fields": ([IncidentSearchResponsePropertyFieldFacetData],), + "impact": ([IncidentSearchResponseFieldFacetData],), + "last_modified_by": ([IncidentSearchResponseUserFacetData],), + "postmortem": ([IncidentSearchResponseFieldFacetData],), + "responder": ([IncidentSearchResponseUserFacetData],), + "severity": ([IncidentSearchResponseFieldFacetData],), + "state": ([IncidentSearchResponseFieldFacetData],), + "time_to_repair": ([IncidentSearchResponseNumericFacetData],), + "time_to_resolve": ([IncidentSearchResponseNumericFacetData],), + } + attribute_map = { + "commander": "commander", + "created_by": "created_by", + "fields": "fields", + "impact": "impact", + "last_modified_by": "last_modified_by", + "postmortem": "postmortem", + "responder": "responder", + "severity": "severity", + "state": "state", + "time_to_repair": "time_to_repair", + "time_to_resolve": "time_to_resolve", + } + + def __init__(self_, commander: Union[List[IncidentSearchResponseUserFacetData], UnsetType]=unset, created_by: Union[List[IncidentSearchResponseUserFacetData], UnsetType]=unset, fields: Union[List[IncidentSearchResponsePropertyFieldFacetData], UnsetType]=unset, impact: Union[List[IncidentSearchResponseFieldFacetData], UnsetType]=unset, last_modified_by: Union[List[IncidentSearchResponseUserFacetData], UnsetType]=unset, postmortem: Union[List[IncidentSearchResponseFieldFacetData], UnsetType]=unset, responder: Union[List[IncidentSearchResponseUserFacetData], UnsetType]=unset, severity: Union[List[IncidentSearchResponseFieldFacetData], UnsetType]=unset, state: Union[List[IncidentSearchResponseFieldFacetData], UnsetType]=unset, time_to_repair: Union[List[IncidentSearchResponseNumericFacetData], UnsetType]=unset, time_to_resolve: Union[List[IncidentSearchResponseNumericFacetData], UnsetType]=unset, **kwargs): + """ + Facet data for incidents returned by a search query. + + :param commander: Facet data for incident commander users. + :type commander: [IncidentSearchResponseUserFacetData], optional + + :param created_by: Facet data for incident creator users. + :type created_by: [IncidentSearchResponseUserFacetData], optional + + :param fields: Facet data for incident property fields. + :type fields: [IncidentSearchResponsePropertyFieldFacetData], optional + + :param impact: Facet data for incident impact attributes. + :type impact: [IncidentSearchResponseFieldFacetData], optional + + :param last_modified_by: Facet data for incident last modified by users. + :type last_modified_by: [IncidentSearchResponseUserFacetData], optional + + :param postmortem: Facet data for incident postmortem existence. + :type postmortem: [IncidentSearchResponseFieldFacetData], optional + + :param responder: Facet data for incident responder users. + :type responder: [IncidentSearchResponseUserFacetData], optional + + :param severity: Facet data for incident severity attributes. + :type severity: [IncidentSearchResponseFieldFacetData], optional + + :param state: Facet data for incident state attributes. + :type state: [IncidentSearchResponseFieldFacetData], optional + + :param time_to_repair: Facet data for incident time to repair metrics. + :type time_to_repair: [IncidentSearchResponseNumericFacetData], optional + + :param time_to_resolve: Facet data for incident time to resolve metrics. + :type time_to_resolve: [IncidentSearchResponseNumericFacetData], optional + """ + if commander is not unset: + kwargs["commander"] = commander + if created_by is not unset: + kwargs["created_by"] = created_by + if fields is not unset: + kwargs["fields"] = fields + if impact is not unset: + kwargs["impact"] = impact + if last_modified_by is not unset: + kwargs["last_modified_by"] = last_modified_by + if postmortem is not unset: + kwargs["postmortem"] = postmortem + if responder is not unset: + kwargs["responder"] = responder + if severity is not unset: + kwargs["severity"] = severity + if state is not unset: + kwargs["state"] = state + if time_to_repair is not unset: + kwargs["time_to_repair"] = time_to_repair + if time_to_resolve is not unset: + kwargs["time_to_resolve"] = time_to_resolve + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_search_response_field_facet_data.py b/datadog_api_client/v2/model/incident_search_response_field_facet_data.py new file mode 100644 index 0000000000..a13e678f85 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_field_facet_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentSearchResponseFieldFacetData(ModelNormal): + validations = { + "count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "count": (int,), + "name": (str,), + } + attribute_map = { + "count": "count", + "name": "name", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Facet value and number of occurrences for a property field of an incident. + + :param count: Count of the facet value appearing in search results. + :type count: int, optional + + :param name: The facet value appearing in search results. + :type name: str, optional + """ + if count is not unset: + kwargs["count"] = count + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_search_response_incidents_data.py b/datadog_api_client/v2/model/incident_search_response_incidents_data.py new file mode 100644 index 0000000000..7d918da465 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_incidents_data.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_response_data import IncidentResponseData + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentSearchResponseIncidentsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_response_data import IncidentResponseData + return { + "data": (IncidentResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentResponseData, **kwargs): + """ + Incident returned by the search. + + :param data: Incident data from a response. + :type data: IncidentResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_search_response_meta.py b/datadog_api_client/v2/model/incident_search_response_meta.py new file mode 100644 index 0000000000..da61aa0a28 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_response_meta_pagination import IncidentResponseMetaPagination + +class IncidentSearchResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_response_meta_pagination import IncidentResponseMetaPagination + return { + "pagination": (IncidentResponseMetaPagination,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[IncidentResponseMetaPagination, UnsetType]=unset, **kwargs): + """ + The metadata object containing pagination metadata. + + :param pagination: Pagination properties. + :type pagination: IncidentResponseMetaPagination, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_search_response_numeric_facet_data.py b/datadog_api_client/v2/model/incident_search_response_numeric_facet_data.py new file mode 100644 index 0000000000..4077a658aa --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_numeric_facet_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_search_response_numeric_facet_data_aggregates import IncidentSearchResponseNumericFacetDataAggregates + +class IncidentSearchResponseNumericFacetData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_search_response_numeric_facet_data_aggregates import IncidentSearchResponseNumericFacetDataAggregates + return { + "aggregates": (IncidentSearchResponseNumericFacetDataAggregates,), + "name": (str,), + } + attribute_map = { + "aggregates": "aggregates", + "name": "name", + } + + def __init__(self_, aggregates: IncidentSearchResponseNumericFacetDataAggregates, name: str, **kwargs): + """ + Facet data numeric attributes of an incident. + + :param aggregates: Aggregate information for numeric incident data. + :type aggregates: IncidentSearchResponseNumericFacetDataAggregates + + :param name: Name of the incident property field. + :type name: str + """ + super().__init__(kwargs) + + + self_.aggregates = aggregates + self_.name = name diff --git a/datadog_api_client/v2/model/incident_search_response_numeric_facet_data_aggregates.py b/datadog_api_client/v2/model/incident_search_response_numeric_facet_data_aggregates.py new file mode 100644 index 0000000000..b419c9a745 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_numeric_facet_data_aggregates.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentSearchResponseNumericFacetDataAggregates(ModelNormal): + @cached_property + def openapi_types(_): + return { + "max": (float, none_type), + "min": (float, none_type), + } + attribute_map = { + "max": "max", + "min": "min", + } + + def __init__(self_, max: Union[float, none_type, UnsetType]=unset, min: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + Aggregate information for numeric incident data. + + :param max: Maximum value of the numeric aggregates. + :type max: float, none_type, optional + + :param min: Minimum value of the numeric aggregates. + :type min: float, none_type, optional + """ + if max is not unset: + kwargs["max"] = max + if min is not unset: + kwargs["min"] = min + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_search_response_property_field_facet_data.py b/datadog_api_client/v2/model/incident_search_response_property_field_facet_data.py new file mode 100644 index 0000000000..3ef248a659 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_property_field_facet_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_search_response_numeric_facet_data_aggregates import IncidentSearchResponseNumericFacetDataAggregates + from datadog_api_client.v2.model.incident_search_response_field_facet_data import IncidentSearchResponseFieldFacetData + +class IncidentSearchResponsePropertyFieldFacetData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_search_response_numeric_facet_data_aggregates import IncidentSearchResponseNumericFacetDataAggregates + from datadog_api_client.v2.model.incident_search_response_field_facet_data import IncidentSearchResponseFieldFacetData + return { + "aggregates": (IncidentSearchResponseNumericFacetDataAggregates,), + "facets": ([IncidentSearchResponseFieldFacetData],), + "name": (str,), + } + attribute_map = { + "aggregates": "aggregates", + "facets": "facets", + "name": "name", + } + + def __init__(self_, facets: List[IncidentSearchResponseFieldFacetData], name: str, aggregates: Union[IncidentSearchResponseNumericFacetDataAggregates, UnsetType]=unset, **kwargs): + """ + Facet data for the incident property fields. + + :param aggregates: Aggregate information for numeric incident data. + :type aggregates: IncidentSearchResponseNumericFacetDataAggregates, optional + + :param facets: Facet data for the property field of an incident. + :type facets: [IncidentSearchResponseFieldFacetData] + + :param name: Name of the incident property field. + :type name: str + """ + if aggregates is not unset: + kwargs["aggregates"] = aggregates + super().__init__(kwargs) + + + self_.facets = facets + self_.name = name diff --git a/datadog_api_client/v2/model/incident_search_response_user_facet_data.py b/datadog_api_client/v2/model/incident_search_response_user_facet_data.py new file mode 100644 index 0000000000..f6d58e5138 --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_response_user_facet_data.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentSearchResponseUserFacetData(ModelNormal): + validations = { + "count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "count": (int,), + "email": (str,), + "handle": (str,), + "name": (str,), + "uuid": (str,), + } + attribute_map = { + "count": "count", + "email": "email", + "handle": "handle", + "name": "name", + "uuid": "uuid", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, uuid: Union[str, UnsetType]=unset, **kwargs): + """ + Facet data for user attributes of an incident. + + :param count: Count of the facet value appearing in search results. + :type count: int, optional + + :param email: Email of the user. + :type email: str, optional + + :param handle: Handle of the user. + :type handle: str, optional + + :param name: Name of the user. + :type name: str, optional + + :param uuid: ID of the user. + :type uuid: str, optional + """ + if count is not unset: + kwargs["count"] = count + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + if uuid is not unset: + kwargs["uuid"] = uuid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_search_results_type.py b/datadog_api_client/v2/model/incident_search_results_type.py new file mode 100644 index 0000000000..8e4addbcbf --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_results_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentSearchResultsType(ModelSimple): + """ + Incident search result type. + + :param value: If omitted defaults to "incidents_search_results". Must be one of ["incidents_search_results"]. + :type value: str + """ + + allowed_values = { + "incidents_search_results", + } + INCIDENTS_SEARCH_RESULTS: ClassVar["IncidentSearchResultsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentSearchResultsType.INCIDENTS_SEARCH_RESULTS = IncidentSearchResultsType("incidents_search_results") diff --git a/datadog_api_client/v2/model/incident_search_sort_order.py b/datadog_api_client/v2/model/incident_search_sort_order.py new file mode 100644 index 0000000000..a16471e1bd --- /dev/null +++ b/datadog_api_client/v2/model/incident_search_sort_order.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentSearchSortOrder(ModelSimple): + """ + The ways searched incidents can be sorted. + + :param value: Must be one of ["created", "-created"]. + :type value: str + """ + + allowed_values = { + "created", + "-created", + } + CREATED_ASCENDING: ClassVar["IncidentSearchSortOrder"] + CREATED_DESCENDING: ClassVar["IncidentSearchSortOrder"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentSearchSortOrder.CREATED_ASCENDING = IncidentSearchSortOrder("created") +IncidentSearchSortOrder.CREATED_DESCENDING = IncidentSearchSortOrder("-created") diff --git a/datadog_api_client/v2/model/incident_service_now_record_data_attributes_request.py b/datadog_api_client/v2/model/incident_service_now_record_data_attributes_request.py new file mode 100644 index 0000000000..af6e89846d --- /dev/null +++ b/datadog_api_client/v2/model/incident_service_now_record_data_attributes_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentServiceNowRecordDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignment_group": (str,), + "configuration_item_mapping": (str,), + "instance_name": (str,), + "record_id": (str,), + } + attribute_map = { + "assignment_group": "assignment_group", + "configuration_item_mapping": "configuration_item_mapping", + "instance_name": "instance_name", + "record_id": "record_id", + } + + def __init__(self_, assignment_group: str, configuration_item_mapping: str, instance_name: str, record_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating a ServiceNow record for an incident. + + :param assignment_group: The ServiceNow assignment group. + :type assignment_group: str + + :param configuration_item_mapping: The ServiceNow configuration item mapping. + :type configuration_item_mapping: str + + :param instance_name: The ServiceNow instance name. + :type instance_name: str + + :param record_id: An existing ServiceNow record ID (Sys ID) to link instead of creating a new record. + :type record_id: str, optional + """ + if record_id is not unset: + kwargs["record_id"] = record_id + super().__init__(kwargs) + + + self_.assignment_group = assignment_group + self_.configuration_item_mapping = configuration_item_mapping + self_.instance_name = instance_name diff --git a/datadog_api_client/v2/model/incident_service_now_record_data_request.py b/datadog_api_client/v2/model/incident_service_now_record_data_request.py new file mode 100644 index 0000000000..cdfd2ac051 --- /dev/null +++ b/datadog_api_client/v2/model/incident_service_now_record_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_service_now_record_data_attributes_request import IncidentServiceNowRecordDataAttributesRequest + from datadog_api_client.v2.model.incident_service_now_record_prompt_type import IncidentServiceNowRecordPromptType + +class IncidentServiceNowRecordDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_service_now_record_data_attributes_request import IncidentServiceNowRecordDataAttributesRequest + from datadog_api_client.v2.model.incident_service_now_record_prompt_type import IncidentServiceNowRecordPromptType + return { + "attributes": (IncidentServiceNowRecordDataAttributesRequest,), + "type": (IncidentServiceNowRecordPromptType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentServiceNowRecordDataAttributesRequest, type: IncidentServiceNowRecordPromptType, **kwargs): + """ + ServiceNow record data in a create request. + + :param attributes: Attributes for creating a ServiceNow record for an incident. + :type attributes: IncidentServiceNowRecordDataAttributesRequest + + :param type: ServiceNow record prompt resource type. + :type type: IncidentServiceNowRecordPromptType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_service_now_record_prompt_type.py b/datadog_api_client/v2/model/incident_service_now_record_prompt_type.py new file mode 100644 index 0000000000..fb91882105 --- /dev/null +++ b/datadog_api_client/v2/model/incident_service_now_record_prompt_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentServiceNowRecordPromptType(ModelSimple): + """ + ServiceNow record prompt resource type. + + :param value: If omitted defaults to "incident_servicenow_record_prompt". Must be one of ["incident_servicenow_record_prompt"]. + :type value: str + """ + + allowed_values = { + "incident_servicenow_record_prompt", + } + INCIDENT_SERVICENOW_RECORD_PROMPT: ClassVar["IncidentServiceNowRecordPromptType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentServiceNowRecordPromptType.INCIDENT_SERVICENOW_RECORD_PROMPT = IncidentServiceNowRecordPromptType("incident_servicenow_record_prompt") diff --git a/datadog_api_client/v2/model/incident_service_now_record_request.py b/datadog_api_client/v2/model/incident_service_now_record_request.py new file mode 100644 index 0000000000..946867bf9d --- /dev/null +++ b/datadog_api_client/v2/model/incident_service_now_record_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_service_now_record_data_request import IncidentServiceNowRecordDataRequest + +class IncidentServiceNowRecordRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_service_now_record_data_request import IncidentServiceNowRecordDataRequest + return { + "data": (IncidentServiceNowRecordDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentServiceNowRecordDataRequest, **kwargs): + """ + Request payload for creating a ServiceNow record for an incident. + + :param data: ServiceNow record data in a create request. + :type data: IncidentServiceNowRecordDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_severity.py b/datadog_api_client/v2/model/incident_severity.py new file mode 100644 index 0000000000..8bc6de4863 --- /dev/null +++ b/datadog_api_client/v2/model/incident_severity.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentSeverity(ModelSimple): + """ + The incident severity. + + :param value: Must be one of ["UNKNOWN", "SEV-0", "SEV-1", "SEV-2", "SEV-3", "SEV-4", "SEV-5"]. + :type value: str + """ + + allowed_values = { + "UNKNOWN", + "SEV-0", + "SEV-1", + "SEV-2", + "SEV-3", + "SEV-4", + "SEV-5", + } + UNKNOWN: ClassVar["IncidentSeverity"] + SEV_0: ClassVar["IncidentSeverity"] + SEV_1: ClassVar["IncidentSeverity"] + SEV_2: ClassVar["IncidentSeverity"] + SEV_3: ClassVar["IncidentSeverity"] + SEV_4: ClassVar["IncidentSeverity"] + SEV_5: ClassVar["IncidentSeverity"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentSeverity.UNKNOWN = IncidentSeverity("UNKNOWN") +IncidentSeverity.SEV_0 = IncidentSeverity("SEV-0") +IncidentSeverity.SEV_1 = IncidentSeverity("SEV-1") +IncidentSeverity.SEV_2 = IncidentSeverity("SEV-2") +IncidentSeverity.SEV_3 = IncidentSeverity("SEV-3") +IncidentSeverity.SEV_4 = IncidentSeverity("SEV-4") +IncidentSeverity.SEV_5 = IncidentSeverity("SEV-5") diff --git a/datadog_api_client/v2/model/incident_timeline_cell_create_attributes.py b/datadog_api_client/v2/model/incident_timeline_cell_create_attributes.py new file mode 100644 index 0000000000..432129a52b --- /dev/null +++ b/datadog_api_client/v2/model/incident_timeline_cell_create_attributes.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentTimelineCellCreateAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The timeline cell's attributes for a create request. + + :param cell_type: Type of the Markdown timeline cell. + :type cell_type: IncidentTimelineCellMarkdownContentType + + :param content: The Markdown timeline cell contents. + :type content: IncidentTimelineCellMarkdownCreateAttributesContent + + :param important: A flag indicating whether the timeline cell is important and should be highlighted. + :type important: bool, 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.incident_timeline_cell_markdown_create_attributes import IncidentTimelineCellMarkdownCreateAttributes + return { + "oneOf": [ + IncidentTimelineCellMarkdownCreateAttributes, + ], + } diff --git a/datadog_api_client/v2/model/incident_timeline_cell_markdown_content_type.py b/datadog_api_client/v2/model/incident_timeline_cell_markdown_content_type.py new file mode 100644 index 0000000000..7e0b04ba7b --- /dev/null +++ b/datadog_api_client/v2/model/incident_timeline_cell_markdown_content_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentTimelineCellMarkdownContentType(ModelSimple): + """ + Type of the Markdown timeline cell. + + :param value: If omitted defaults to "markdown". Must be one of ["markdown"]. + :type value: str + """ + + allowed_values = { + "markdown", + } + MARKDOWN: ClassVar["IncidentTimelineCellMarkdownContentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentTimelineCellMarkdownContentType.MARKDOWN = IncidentTimelineCellMarkdownContentType("markdown") diff --git a/datadog_api_client/v2/model/incident_timeline_cell_markdown_create_attributes.py b/datadog_api_client/v2/model/incident_timeline_cell_markdown_create_attributes.py new file mode 100644 index 0000000000..e913e69bf1 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timeline_cell_markdown_create_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timeline_cell_markdown_content_type import IncidentTimelineCellMarkdownContentType + from datadog_api_client.v2.model.incident_timeline_cell_markdown_create_attributes_content import IncidentTimelineCellMarkdownCreateAttributesContent + +class IncidentTimelineCellMarkdownCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timeline_cell_markdown_content_type import IncidentTimelineCellMarkdownContentType + from datadog_api_client.v2.model.incident_timeline_cell_markdown_create_attributes_content import IncidentTimelineCellMarkdownCreateAttributesContent + return { + "cell_type": (IncidentTimelineCellMarkdownContentType,), + "content": (IncidentTimelineCellMarkdownCreateAttributesContent,), + "important": (bool,), + } + attribute_map = { + "cell_type": "cell_type", + "content": "content", + "important": "important", + } + + def __init__(self_, cell_type: IncidentTimelineCellMarkdownContentType, content: IncidentTimelineCellMarkdownCreateAttributesContent, important: Union[bool, UnsetType]=unset, **kwargs): + """ + Timeline cell data for Markdown timeline cells for a create request. + + :param cell_type: Type of the Markdown timeline cell. + :type cell_type: IncidentTimelineCellMarkdownContentType + + :param content: The Markdown timeline cell contents. + :type content: IncidentTimelineCellMarkdownCreateAttributesContent + + :param important: A flag indicating whether the timeline cell is important and should be highlighted. + :type important: bool, optional + """ + if important is not unset: + kwargs["important"] = important + super().__init__(kwargs) + + + self_.cell_type = cell_type + self_.content = content diff --git a/datadog_api_client/v2/model/incident_timeline_cell_markdown_create_attributes_content.py b/datadog_api_client/v2/model/incident_timeline_cell_markdown_create_attributes_content.py new file mode 100644 index 0000000000..566f8366a5 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timeline_cell_markdown_create_attributes_content.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentTimelineCellMarkdownCreateAttributesContent(ModelNormal): + @cached_property + def openapi_types(_): + return { + "content": (str,), + } + attribute_map = { + "content": "content", + } + + def __init__(self_, content: Union[str, UnsetType]=unset, **kwargs): + """ + The Markdown timeline cell contents. + + :param content: The Markdown content of the cell. + :type content: str, optional + """ + if content is not unset: + kwargs["content"] = content + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_timestamp_override_data_attributes_request.py b/datadog_api_client/v2/model/incident_timestamp_override_data_attributes_request.py new file mode 100644 index 0000000000..2420c210ac --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_data_attributes_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timestamp_type import IncidentTimestampType + +class IncidentTimestampOverrideDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timestamp_type import IncidentTimestampType + return { + "timestamp_type": (IncidentTimestampType,), + "timestamp_value": (datetime,), + } + attribute_map = { + "timestamp_type": "timestamp_type", + "timestamp_value": "timestamp_value", + } + + def __init__(self_, timestamp_type: IncidentTimestampType, timestamp_value: datetime, **kwargs): + """ + Attributes for creating a timestamp override. + + :param timestamp_type: The type of timestamp to override. + :type timestamp_type: IncidentTimestampType + + :param timestamp_value: The overridden timestamp value. + :type timestamp_value: datetime + """ + super().__init__(kwargs) + + + self_.timestamp_type = timestamp_type + self_.timestamp_value = timestamp_value diff --git a/datadog_api_client/v2/model/incident_timestamp_override_data_attributes_response.py b/datadog_api_client/v2/model/incident_timestamp_override_data_attributes_response.py new file mode 100644 index 0000000000..f12dc84d8a --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_data_attributes_response.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timestamp_type import IncidentTimestampType + +class IncidentTimestampOverrideDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timestamp_type import IncidentTimestampType + return { + "created_at": (datetime,), + "deleted_at": (datetime, none_type), + "incident_id": (str,), + "modified_at": (datetime,), + "timestamp_type": (IncidentTimestampType,), + "timestamp_value": (datetime,), + } + attribute_map = { + "created_at": "created_at", + "deleted_at": "deleted_at", + "incident_id": "incident_id", + "modified_at": "modified_at", + "timestamp_type": "timestamp_type", + "timestamp_value": "timestamp_value", + } + + def __init__(self_, created_at: datetime, incident_id: str, modified_at: datetime, timestamp_type: IncidentTimestampType, timestamp_value: datetime, deleted_at: Union[datetime, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of a timestamp override in a response. + + :param created_at: Timestamp when the override was created. + :type created_at: datetime + + :param deleted_at: Timestamp when the override was deleted. + :type deleted_at: datetime, none_type, optional + + :param incident_id: The incident identifier. + :type incident_id: str + + :param modified_at: Timestamp when the override was last modified. + :type modified_at: datetime + + :param timestamp_type: The type of timestamp to override. + :type timestamp_type: IncidentTimestampType + + :param timestamp_value: The overridden timestamp value. + :type timestamp_value: datetime + """ + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + super().__init__(kwargs) + + + self_.created_at = created_at + self_.incident_id = incident_id + self_.modified_at = modified_at + self_.timestamp_type = timestamp_type + self_.timestamp_value = timestamp_value diff --git a/datadog_api_client/v2/model/incident_timestamp_override_data_request.py b/datadog_api_client/v2/model/incident_timestamp_override_data_request.py new file mode 100644 index 0000000000..64f705e4e6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timestamp_override_data_attributes_request import IncidentTimestampOverrideDataAttributesRequest + from datadog_api_client.v2.model.incident_timestamp_override_type import IncidentTimestampOverrideType + +class IncidentTimestampOverrideDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timestamp_override_data_attributes_request import IncidentTimestampOverrideDataAttributesRequest + from datadog_api_client.v2.model.incident_timestamp_override_type import IncidentTimestampOverrideType + return { + "attributes": (IncidentTimestampOverrideDataAttributesRequest,), + "type": (IncidentTimestampOverrideType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentTimestampOverrideDataAttributesRequest, type: IncidentTimestampOverrideType, **kwargs): + """ + Timestamp override data in a create request. + + :param attributes: Attributes for creating a timestamp override. + :type attributes: IncidentTimestampOverrideDataAttributesRequest + + :param type: Incident timestamp override resource type. + :type type: IncidentTimestampOverrideType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_timestamp_override_data_response.py b/datadog_api_client/v2/model/incident_timestamp_override_data_response.py new file mode 100644 index 0000000000..c2dbb80560 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timestamp_override_data_attributes_response import IncidentTimestampOverrideDataAttributesResponse + from datadog_api_client.v2.model.incident_timestamp_override_relationships import IncidentTimestampOverrideRelationships + from datadog_api_client.v2.model.incident_timestamp_override_type import IncidentTimestampOverrideType + +class IncidentTimestampOverrideDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timestamp_override_data_attributes_response import IncidentTimestampOverrideDataAttributesResponse + from datadog_api_client.v2.model.incident_timestamp_override_relationships import IncidentTimestampOverrideRelationships + from datadog_api_client.v2.model.incident_timestamp_override_type import IncidentTimestampOverrideType + return { + "attributes": (IncidentTimestampOverrideDataAttributesResponse,), + "id": (UUID,), + "relationships": (IncidentTimestampOverrideRelationships,), + "type": (IncidentTimestampOverrideType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentTimestampOverrideDataAttributesResponse, id: UUID, type: IncidentTimestampOverrideType, relationships: Union[IncidentTimestampOverrideRelationships, UnsetType]=unset, **kwargs): + """ + Timestamp override data in a response. + + :param attributes: Attributes of a timestamp override in a response. + :type attributes: IncidentTimestampOverrideDataAttributesResponse + + :param id: The timestamp override identifier. + :type id: UUID + + :param relationships: Relationships for a timestamp override. + :type relationships: IncidentTimestampOverrideRelationships, optional + + :param type: Incident timestamp override resource type. + :type type: IncidentTimestampOverrideType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_timestamp_override_patch_data_attributes_request.py b/datadog_api_client/v2/model/incident_timestamp_override_patch_data_attributes_request.py new file mode 100644 index 0000000000..23680cbc4d --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_patch_data_attributes_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentTimestampOverridePatchDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "timestamp_value": (datetime,), + } + attribute_map = { + "timestamp_value": "timestamp_value", + } + + def __init__(self_, timestamp_value: datetime, **kwargs): + """ + Attributes for patching a timestamp override. + + :param timestamp_value: The overridden timestamp value. + :type timestamp_value: datetime + """ + super().__init__(kwargs) + + + self_.timestamp_value = timestamp_value diff --git a/datadog_api_client/v2/model/incident_timestamp_override_patch_data_request.py b/datadog_api_client/v2/model/incident_timestamp_override_patch_data_request.py new file mode 100644 index 0000000000..2402ff9265 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_patch_data_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timestamp_override_patch_data_attributes_request import IncidentTimestampOverridePatchDataAttributesRequest + from datadog_api_client.v2.model.incident_timestamp_override_type import IncidentTimestampOverrideType + +class IncidentTimestampOverridePatchDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timestamp_override_patch_data_attributes_request import IncidentTimestampOverridePatchDataAttributesRequest + from datadog_api_client.v2.model.incident_timestamp_override_type import IncidentTimestampOverrideType + return { + "attributes": (IncidentTimestampOverridePatchDataAttributesRequest,), + "id": (UUID,), + "type": (IncidentTimestampOverrideType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentTimestampOverrideType, attributes: Union[IncidentTimestampOverridePatchDataAttributesRequest, UnsetType]=unset, **kwargs): + """ + Timestamp override data in a patch request. + + :param attributes: Attributes for patching a timestamp override. + :type attributes: IncidentTimestampOverridePatchDataAttributesRequest, optional + + :param id: The timestamp override identifier. + :type id: UUID + + :param type: Incident timestamp override resource type. + :type type: IncidentTimestampOverrideType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_timestamp_override_patch_request.py b/datadog_api_client/v2/model/incident_timestamp_override_patch_request.py new file mode 100644 index 0000000000..fb97923994 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timestamp_override_patch_data_request import IncidentTimestampOverridePatchDataRequest + +class IncidentTimestampOverridePatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timestamp_override_patch_data_request import IncidentTimestampOverridePatchDataRequest + return { + "data": (IncidentTimestampOverridePatchDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentTimestampOverridePatchDataRequest, **kwargs): + """ + Request payload for patching a timestamp override. + + :param data: Timestamp override data in a patch request. + :type data: IncidentTimestampOverridePatchDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_timestamp_override_relationships.py b/datadog_api_client/v2/model/incident_timestamp_override_relationships.py new file mode 100644 index 0000000000..28e2cb84c1 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + +class IncidentTimestampOverrideRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + return { + "created_by_user": (RelationshipToUser,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + Relationships for a timestamp override. + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_timestamp_override_request.py b/datadog_api_client/v2/model/incident_timestamp_override_request.py new file mode 100644 index 0000000000..6c12088f19 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timestamp_override_data_request import IncidentTimestampOverrideDataRequest + +class IncidentTimestampOverrideRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timestamp_override_data_request import IncidentTimestampOverrideDataRequest + return { + "data": (IncidentTimestampOverrideDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentTimestampOverrideDataRequest, **kwargs): + """ + Request payload for creating a timestamp override. + + :param data: Timestamp override data in a create request. + :type data: IncidentTimestampOverrideDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_timestamp_override_response.py b/datadog_api_client/v2/model/incident_timestamp_override_response.py new file mode 100644 index 0000000000..1b1b5ad5d4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timestamp_override_data_response import IncidentTimestampOverrideDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentTimestampOverrideResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timestamp_override_data_response import IncidentTimestampOverrideDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": (IncidentTimestampOverrideDataResponse,), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentTimestampOverrideDataResponse, included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with a single timestamp override. + + :param data: Timestamp override data in a response. + :type data: IncidentTimestampOverrideDataResponse + + :param included: Included related resources. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_timestamp_override_type.py b/datadog_api_client/v2/model/incident_timestamp_override_type.py new file mode 100644 index 0000000000..96602f5fd0 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_override_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentTimestampOverrideType(ModelSimple): + """ + Incident timestamp override resource type. + + :param value: If omitted defaults to "incidents_timestamp_overrides". Must be one of ["incidents_timestamp_overrides"]. + :type value: str + """ + + allowed_values = { + "incidents_timestamp_overrides", + } + INCIDENTS_TIMESTAMP_OVERRIDES: ClassVar["IncidentTimestampOverrideType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentTimestampOverrideType.INCIDENTS_TIMESTAMP_OVERRIDES = IncidentTimestampOverrideType("incidents_timestamp_overrides") diff --git a/datadog_api_client/v2/model/incident_timestamp_overrides_response.py b/datadog_api_client/v2/model/incident_timestamp_overrides_response.py new file mode 100644 index 0000000000..727af46894 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_overrides_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_timestamp_override_data_response import IncidentTimestampOverrideDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + +class IncidentTimestampOverridesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_timestamp_override_data_response import IncidentTimestampOverrideDataResponse + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + return { + "data": ([IncidentTimestampOverrideDataResponse],), + "included": ([IncidentUserData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: List[IncidentTimestampOverrideDataResponse], included: Union[List[IncidentUserData], UnsetType]=unset, **kwargs): + """ + Response with a list of timestamp overrides. + + :param data: List of timestamp overrides. + :type data: [IncidentTimestampOverrideDataResponse] + + :param included: Included related resources. + :type included: [IncidentUserData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_timestamp_type.py b/datadog_api_client/v2/model/incident_timestamp_type.py new file mode 100644 index 0000000000..727dd02228 --- /dev/null +++ b/datadog_api_client/v2/model/incident_timestamp_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentTimestampType(ModelSimple): + """ + The type of timestamp to override. + + :param value: Must be one of ["detected", "resolved", "declared"]. + :type value: str + """ + + allowed_values = { + "detected", + "resolved", + "declared", + } + DETECTED: ClassVar["IncidentTimestampType"] + RESOLVED: ClassVar["IncidentTimestampType"] + DECLARED: ClassVar["IncidentTimestampType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentTimestampType.DETECTED = IncidentTimestampType("detected") +IncidentTimestampType.RESOLVED = IncidentTimestampType("resolved") +IncidentTimestampType.DECLARED = IncidentTimestampType("declared") diff --git a/datadog_api_client/v2/model/incident_todo_anonymous_assignee.py b/datadog_api_client/v2/model/incident_todo_anonymous_assignee.py new file mode 100644 index 0000000000..d91f684963 --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_anonymous_assignee.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_todo_anonymous_assignee_source import IncidentTodoAnonymousAssigneeSource + +class IncidentTodoAnonymousAssignee(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_anonymous_assignee_source import IncidentTodoAnonymousAssigneeSource + return { + "icon": (str,), + "id": (str,), + "name": (str,), + "source": (IncidentTodoAnonymousAssigneeSource,), + } + attribute_map = { + "icon": "icon", + "id": "id", + "name": "name", + "source": "source", + } + + def __init__(self_, icon: str, id: str, name: str, source: IncidentTodoAnonymousAssigneeSource, **kwargs): + """ + Anonymous assignee entity. + + :param icon: URL for assignee's icon. + :type icon: str + + :param id: Anonymous assignee's ID. + :type id: str + + :param name: Assignee's name. + :type name: str + + :param source: The source of the anonymous assignee. + :type source: IncidentTodoAnonymousAssigneeSource + """ + super().__init__(kwargs) + + + self_.icon = icon + self_.id = id + self_.name = name + self_.source = source diff --git a/datadog_api_client/v2/model/incident_todo_anonymous_assignee_source.py b/datadog_api_client/v2/model/incident_todo_anonymous_assignee_source.py new file mode 100644 index 0000000000..f16a78a23a --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_anonymous_assignee_source.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentTodoAnonymousAssigneeSource(ModelSimple): + """ + The source of the anonymous assignee. + + :param value: If omitted defaults to "slack". Must be one of ["slack", "microsoft_teams"]. + :type value: str + """ + + allowed_values = { + "slack", + "microsoft_teams", + } + SLACK: ClassVar["IncidentTodoAnonymousAssigneeSource"] + MICROSOFT_TEAMS: ClassVar["IncidentTodoAnonymousAssigneeSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentTodoAnonymousAssigneeSource.SLACK = IncidentTodoAnonymousAssigneeSource("slack") +IncidentTodoAnonymousAssigneeSource.MICROSOFT_TEAMS = IncidentTodoAnonymousAssigneeSource("microsoft_teams") diff --git a/datadog_api_client/v2/model/incident_todo_assignee.py b/datadog_api_client/v2/model/incident_todo_assignee.py new file mode 100644 index 0000000000..4549e371dd --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_assignee.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentTodoAssignee(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A todo assignee. + + :param icon: URL for assignee's icon. + :type icon: str + + :param id: Anonymous assignee's ID. + :type id: str + + :param name: Assignee's name. + :type name: str + + :param source: The source of the anonymous assignee. + :type source: IncidentTodoAnonymousAssigneeSource + """ + 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.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee + return { + "oneOf": [ + str, + IncidentTodoAnonymousAssignee, + ], + } diff --git a/datadog_api_client/v2/model/incident_todo_assignee_array.py b/datadog_api_client/v2/model/incident_todo_assignee_array.py new file mode 100644 index 0000000000..64b2e83cce --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_assignee_array.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentTodoAssigneeArray(ModelSimple): + """ + Array of todo assignees. + + + :type value: [IncidentTodoAssignee] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_assignee import IncidentTodoAssignee + return { + "value": ([IncidentTodoAssignee],), + } diff --git a/datadog_api_client/v2/model/incident_todo_attributes.py b/datadog_api_client/v2/model/incident_todo_attributes.py new file mode 100644 index 0000000000..074842389f --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_todo_assignee_array import IncidentTodoAssigneeArray + from datadog_api_client.v2.model.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee + +class IncidentTodoAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_assignee_array import IncidentTodoAssigneeArray + return { + "assignees": (IncidentTodoAssigneeArray,), + "completed": (str, none_type), + "content": (str,), + "created": (datetime,), + "due_date": (str, none_type), + "incident_id": (str,), + "modified": (datetime,), + } + attribute_map = { + "assignees": "assignees", + "completed": "completed", + "content": "content", + "created": "created", + "due_date": "due_date", + "incident_id": "incident_id", + "modified": "modified", + } + read_only_vars = { + "created", + "modified", + } + + def __init__(self_, assignees: IncidentTodoAssigneeArray, content: str, completed: Union[str, none_type, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, due_date: Union[str, none_type, UnsetType]=unset, incident_id: Union[str, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, **kwargs): + """ + Incident todo's attributes. + + :param assignees: Array of todo assignees. + :type assignees: IncidentTodoAssigneeArray + + :param completed: Timestamp when the todo was completed. + :type completed: str, none_type, optional + + :param content: The follow-up task's content. + :type content: str + + :param created: Timestamp when the incident todo was created. + :type created: datetime, optional + + :param due_date: Timestamp when the todo should be completed by. + :type due_date: str, none_type, optional + + :param incident_id: UUID of the incident this todo is connected to. + :type incident_id: str, optional + + :param modified: Timestamp when the incident todo was last modified. + :type modified: datetime, optional + """ + if completed is not unset: + kwargs["completed"] = completed + if created is not unset: + kwargs["created"] = created + if due_date is not unset: + kwargs["due_date"] = due_date + if incident_id is not unset: + kwargs["incident_id"] = incident_id + if modified is not unset: + kwargs["modified"] = modified + super().__init__(kwargs) + + + self_.assignees = assignees + self_.content = content diff --git a/datadog_api_client/v2/model/incident_todo_create_data.py b/datadog_api_client/v2/model/incident_todo_create_data.py new file mode 100644 index 0000000000..f5ab689abc --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_create_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_todo_attributes import IncidentTodoAttributes + from datadog_api_client.v2.model.incident_todo_type import IncidentTodoType + from datadog_api_client.v2.model.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee + +class IncidentTodoCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_attributes import IncidentTodoAttributes + from datadog_api_client.v2.model.incident_todo_type import IncidentTodoType + return { + "attributes": (IncidentTodoAttributes,), + "type": (IncidentTodoType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentTodoAttributes, type: IncidentTodoType, **kwargs): + """ + Incident todo data for a create request. + + :param attributes: Incident todo's attributes. + :type attributes: IncidentTodoAttributes + + :param type: Todo resource type. + :type type: IncidentTodoType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_todo_create_request.py b/datadog_api_client/v2/model/incident_todo_create_request.py new file mode 100644 index 0000000000..b4c56b0bcb --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_create_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_todo_create_data import IncidentTodoCreateData + from datadog_api_client.v2.model.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee + +class IncidentTodoCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_create_data import IncidentTodoCreateData + return { + "data": (IncidentTodoCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentTodoCreateData, **kwargs): + """ + Create request for an incident todo. + + :param data: Incident todo data for a create request. + :type data: IncidentTodoCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_todo_list_response.py b/datadog_api_client/v2/model/incident_todo_list_response.py new file mode 100644 index 0000000000..d11f26882d --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_list_response.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_todo_response_data import IncidentTodoResponseData + from datadog_api_client.v2.model.incident_todo_response_included_item import IncidentTodoResponseIncludedItem + from datadog_api_client.v2.model.incident_response_meta import IncidentResponseMeta + from datadog_api_client.v2.model.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee + from datadog_api_client.v2.model.user import User + +class IncidentTodoListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_response_data import IncidentTodoResponseData + from datadog_api_client.v2.model.incident_todo_response_included_item import IncidentTodoResponseIncludedItem + from datadog_api_client.v2.model.incident_response_meta import IncidentResponseMeta + return { + "data": ([IncidentTodoResponseData],), + "included": ([IncidentTodoResponseIncludedItem],), + "meta": (IncidentResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + read_only_vars = { + "included", + "meta", + } + + def __init__(self_, data: List[IncidentTodoResponseData], included: Union[List[Union[IncidentTodoResponseIncludedItem, User]], UnsetType]=unset, meta: Union[IncidentResponseMeta, UnsetType]=unset, **kwargs): + """ + Response with a list of incident todos. + + :param data: An array of incident todos. + :type data: [IncidentTodoResponseData] + + :param included: Included related resources that the user requested. + :type included: [IncidentTodoResponseIncludedItem], optional + + :param meta: The metadata object containing pagination metadata. + :type meta: IncidentResponseMeta, 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/datadog_api_client/v2/model/incident_todo_patch_data.py b/datadog_api_client/v2/model/incident_todo_patch_data.py new file mode 100644 index 0000000000..81538d17d1 --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_patch_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_todo_attributes import IncidentTodoAttributes + from datadog_api_client.v2.model.incident_todo_type import IncidentTodoType + from datadog_api_client.v2.model.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee + +class IncidentTodoPatchData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_attributes import IncidentTodoAttributes + from datadog_api_client.v2.model.incident_todo_type import IncidentTodoType + return { + "attributes": (IncidentTodoAttributes,), + "type": (IncidentTodoType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentTodoAttributes, type: IncidentTodoType, **kwargs): + """ + Incident todo data for a patch request. + + :param attributes: Incident todo's attributes. + :type attributes: IncidentTodoAttributes + + :param type: Todo resource type. + :type type: IncidentTodoType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_todo_patch_request.py b/datadog_api_client/v2/model/incident_todo_patch_request.py new file mode 100644 index 0000000000..afc61e5d5f --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_patch_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_todo_patch_data import IncidentTodoPatchData + from datadog_api_client.v2.model.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee + +class IncidentTodoPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_patch_data import IncidentTodoPatchData + return { + "data": (IncidentTodoPatchData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentTodoPatchData, **kwargs): + """ + Patch request for an incident todo. + + :param data: Incident todo data for a patch request. + :type data: IncidentTodoPatchData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_todo_relationships.py b/datadog_api_client/v2/model/incident_todo_relationships.py new file mode 100644 index 0000000000..761702fa3f --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + +class IncidentTodoRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + return { + "created_by_user": (RelationshipToUser,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + The incident's relationships from a response. + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_todo_response.py b/datadog_api_client/v2/model/incident_todo_response.py new file mode 100644 index 0000000000..537eab0445 --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_todo_response_data import IncidentTodoResponseData + from datadog_api_client.v2.model.incident_todo_response_included_item import IncidentTodoResponseIncludedItem + from datadog_api_client.v2.model.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee + from datadog_api_client.v2.model.user import User + +class IncidentTodoResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_response_data import IncidentTodoResponseData + from datadog_api_client.v2.model.incident_todo_response_included_item import IncidentTodoResponseIncludedItem + return { + "data": (IncidentTodoResponseData,), + "included": ([IncidentTodoResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + read_only_vars = { + "included", + } + + def __init__(self_, data: IncidentTodoResponseData, included: Union[List[Union[IncidentTodoResponseIncludedItem, User]], UnsetType]=unset, **kwargs): + """ + Response with an incident todo. + + :param data: Incident todo response data. + :type data: IncidentTodoResponseData + + :param included: Included related resources that the user requested. + :type included: [IncidentTodoResponseIncludedItem], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_todo_response_data.py b/datadog_api_client/v2/model/incident_todo_response_data.py new file mode 100644 index 0000000000..cc2d390e60 --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_todo_attributes import IncidentTodoAttributes + from datadog_api_client.v2.model.incident_todo_relationships import IncidentTodoRelationships + from datadog_api_client.v2.model.incident_todo_type import IncidentTodoType + from datadog_api_client.v2.model.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee + +class IncidentTodoResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_todo_attributes import IncidentTodoAttributes + from datadog_api_client.v2.model.incident_todo_relationships import IncidentTodoRelationships + from datadog_api_client.v2.model.incident_todo_type import IncidentTodoType + return { + "attributes": (IncidentTodoAttributes,), + "id": (str,), + "relationships": (IncidentTodoRelationships,), + "type": (IncidentTodoType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentTodoType, attributes: Union[IncidentTodoAttributes, UnsetType]=unset, relationships: Union[IncidentTodoRelationships, UnsetType]=unset, **kwargs): + """ + Incident todo response data. + + :param attributes: Incident todo's attributes. + :type attributes: IncidentTodoAttributes, optional + + :param id: The incident todo's ID. + :type id: str + + :param relationships: The incident's relationships from a response. + :type relationships: IncidentTodoRelationships, optional + + :param type: Todo resource type. + :type type: IncidentTodoType + """ + 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/datadog_api_client/v2/model/incident_todo_response_included_item.py b/datadog_api_client/v2/model/incident_todo_response_included_item.py new file mode 100644 index 0000000000..ac274654f9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_response_included_item.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentTodoResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to an incident todo that is included in the response. + + :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 + return { + "oneOf": [ + User, + ], + } diff --git a/datadog_api_client/v2/model/incident_todo_type.py b/datadog_api_client/v2/model/incident_todo_type.py new file mode 100644 index 0000000000..0ad568f02d --- /dev/null +++ b/datadog_api_client/v2/model/incident_todo_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentTodoType(ModelSimple): + """ + Todo resource type. + + :param value: If omitted defaults to "incident_todos". Must be one of ["incident_todos"]. + :type value: str + """ + + allowed_values = { + "incident_todos", + } + INCIDENT_TODOS: ClassVar["IncidentTodoType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentTodoType.INCIDENT_TODOS = IncidentTodoType("incident_todos") diff --git a/datadog_api_client/v2/model/incident_trigger.py b/datadog_api_client/v2/model/incident_trigger.py new file mode 100644 index 0000000000..79388680dc --- /dev/null +++ b/datadog_api_client/v2/model/incident_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + +class IncidentTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + return { + "rate_limit": (TriggerRateLimit,), + } + attribute_map = { + "rate_limit": "rateLimit", + } + + def __init__(self_, rate_limit: Union[TriggerRateLimit, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from an Incident. For automatic triggering a handle must be configured and the workflow must be published. + + :param rate_limit: Defines a rate limit for a trigger. + :type rate_limit: TriggerRateLimit, optional + """ + if rate_limit is not unset: + kwargs["rate_limit"] = rate_limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_trigger_wrapper.py b/datadog_api_client/v2/model/incident_trigger_wrapper.py new file mode 100644 index 0000000000..9f021f2993 --- /dev/null +++ b/datadog_api_client/v2/model/incident_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_trigger import IncidentTrigger + +class IncidentTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_trigger import IncidentTrigger + return { + "incident_trigger": (IncidentTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "incident_trigger": "incidentTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, incident_trigger: IncidentTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for an Incident-based trigger. + + :param incident_trigger: Trigger a workflow from an Incident. For automatic triggering a handle must be configured and the workflow must be published. + :type incident_trigger: IncidentTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.incident_trigger = incident_trigger diff --git a/datadog_api_client/v2/model/incident_type.py b/datadog_api_client/v2/model/incident_type.py new file mode 100644 index 0000000000..fc2229fb62 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentType(ModelSimple): + """ + Incident resource type. + + :param value: If omitted defaults to "incidents". Must be one of ["incidents"]. + :type value: str + """ + + allowed_values = { + "incidents", + } + INCIDENTS: ClassVar["IncidentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentType.INCIDENTS = IncidentType("incidents") diff --git a/datadog_api_client/v2/model/incident_type_attributes.py b/datadog_api_client/v2/model/incident_type_attributes.py new file mode 100644 index 0000000000..0928b0b294 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_configuration import IncidentTypeConfiguration + +class IncidentTypeAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_configuration import IncidentTypeConfiguration + return { + "configuration": (IncidentTypeConfiguration,), + "created_at": (datetime,), + "created_by": (str,), + "description": (str,), + "is_default": (bool,), + "last_modified_by": (str,), + "modified_at": (datetime,), + "name": (str,), + "prefix": (str,), + } + attribute_map = { + "configuration": "configuration", + "created_at": "createdAt", + "created_by": "createdBy", + "description": "description", + "is_default": "is_default", + "last_modified_by": "lastModifiedBy", + "modified_at": "modifiedAt", + "name": "name", + "prefix": "prefix", + } + read_only_vars = { + "created_at", + "created_by", + "last_modified_by", + "modified_at", + "prefix", + } + + def __init__(self_, name: str, configuration: Union[IncidentTypeConfiguration, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, is_default: Union[bool, UnsetType]=unset, last_modified_by: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, prefix: Union[str, UnsetType]=unset, **kwargs): + """ + Incident type's attributes. + + :param configuration: The incident-type-scoped behavior settings. All fields are optional on update. Any field omitted from a PATCH request keeps its current value. This object is read-only on the incident type resource itself and is only mutated through the update (PATCH) endpoint. + :type configuration: IncidentTypeConfiguration, optional + + :param created_at: Timestamp when the incident type was created. + :type created_at: datetime, optional + + :param created_by: A unique identifier that represents the user that created the incident type. + :type created_by: str, optional + + :param description: Text that describes the incident type. + :type description: str, optional + + :param is_default: If true, this incident type will be used as the default incident type if a type is not specified during the creation of incident resources. + :type is_default: bool, optional + + :param last_modified_by: A unique identifier that represents the user that last modified the incident type. + :type last_modified_by: str, optional + + :param modified_at: Timestamp when the incident type was last modified. + :type modified_at: datetime, optional + + :param name: The name of the incident type. + :type name: str + + :param prefix: The string that will be prepended to the incident title across the Datadog app. + :type prefix: str, optional + """ + if configuration is not unset: + kwargs["configuration"] = configuration + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if description is not unset: + kwargs["description"] = description + if is_default is not unset: + kwargs["is_default"] = is_default + if last_modified_by is not unset: + kwargs["last_modified_by"] = last_modified_by + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if prefix is not unset: + kwargs["prefix"] = prefix + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/incident_type_configuration.py b/datadog_api_client/v2/model/incident_type_configuration.py new file mode 100644 index 0000000000..62cf6c6177 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_configuration.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_slug_source import IncidentTypeSlugSource + +class IncidentTypeConfiguration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_slug_source import IncidentTypeSlugSource + return { + "allow_incident_deletion": (bool,), + "allow_workflows": (bool,), + "create_message": (str,), + "editable_timestamps": (bool,), + "private_incidents": (bool,), + "private_incidents_by_default": (bool,), + "slug_source": (IncidentTypeSlugSource,), + "test_incidents": (bool,), + } + attribute_map = { + "allow_incident_deletion": "allow_incident_deletion", + "allow_workflows": "allow_workflows", + "create_message": "create_message", + "editable_timestamps": "editable_timestamps", + "private_incidents": "private_incidents", + "private_incidents_by_default": "private_incidents_by_default", + "slug_source": "slug_source", + "test_incidents": "test_incidents", + } + + def __init__(self_, allow_incident_deletion: Union[bool, UnsetType]=unset, allow_workflows: Union[bool, UnsetType]=unset, create_message: Union[str, UnsetType]=unset, editable_timestamps: Union[bool, UnsetType]=unset, private_incidents: Union[bool, UnsetType]=unset, private_incidents_by_default: Union[bool, UnsetType]=unset, slug_source: Union[IncidentTypeSlugSource, UnsetType]=unset, test_incidents: Union[bool, UnsetType]=unset, **kwargs): + """ + The incident-type-scoped behavior settings. All fields are optional on update. Any field omitted from a PATCH request keeps its current value. This object is read-only on the incident type resource itself and is only mutated through the update (PATCH) endpoint. + + :param allow_incident_deletion: Whether incidents of this type can be deleted. + :type allow_incident_deletion: bool, optional + + :param allow_workflows: Whether automation workflows can be triggered for incidents of this type. + :type allow_workflows: bool, optional + + :param create_message: An optional message shown to users when they declare an incident of this type. + :type create_message: str, optional + + :param editable_timestamps: Whether responders can edit incident timestamps for incidents of this type. + :type editable_timestamps: bool, optional + + :param private_incidents: Whether responders can create private incidents of this type. This is an opt-in setting, distinct from ``private_incidents_by_default`` , which controls whether incidents are created private automatically. + :type private_incidents: bool, optional + + :param private_incidents_by_default: Whether incidents of this type are created as private by default. + :type private_incidents_by_default: bool, optional + + :param slug_source: When set to ``servicenow`` , incidents will display the ServiceNow record ID instead of the public ID. If no ServiceNow integration exists, the public ID will be displayed. + :type slug_source: IncidentTypeSlugSource, optional + + :param test_incidents: Whether incidents of this type are treated as test incidents. + :type test_incidents: bool, optional + """ + if allow_incident_deletion is not unset: + kwargs["allow_incident_deletion"] = allow_incident_deletion + if allow_workflows is not unset: + kwargs["allow_workflows"] = allow_workflows + if create_message is not unset: + kwargs["create_message"] = create_message + if editable_timestamps is not unset: + kwargs["editable_timestamps"] = editable_timestamps + if private_incidents is not unset: + kwargs["private_incidents"] = private_incidents + if private_incidents_by_default is not unset: + kwargs["private_incidents_by_default"] = private_incidents_by_default + if slug_source is not unset: + kwargs["slug_source"] = slug_source + if test_incidents is not unset: + kwargs["test_incidents"] = test_incidents + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_type_create_data.py b/datadog_api_client/v2/model/incident_type_create_data.py new file mode 100644 index 0000000000..25a9f321ef --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_attributes import IncidentTypeAttributes + from datadog_api_client.v2.model.incident_type_type import IncidentTypeType + +class IncidentTypeCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_attributes import IncidentTypeAttributes + from datadog_api_client.v2.model.incident_type_type import IncidentTypeType + return { + "attributes": (IncidentTypeAttributes,), + "type": (IncidentTypeType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IncidentTypeAttributes, type: IncidentTypeType, **kwargs): + """ + Incident type data for a create request. + + :param attributes: Incident type's attributes. + :type attributes: IncidentTypeAttributes + + :param type: Incident type resource type. + :type type: IncidentTypeType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/incident_type_create_request.py b/datadog_api_client/v2/model/incident_type_create_request.py new file mode 100644 index 0000000000..7fbd107900 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_create_data import IncidentTypeCreateData + +class IncidentTypeCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_create_data import IncidentTypeCreateData + return { + "data": (IncidentTypeCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentTypeCreateData, **kwargs): + """ + Create request for an incident type. + + :param data: Incident type data for a create request. + :type data: IncidentTypeCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_type_list_response.py b/datadog_api_client/v2/model/incident_type_list_response.py new file mode 100644 index 0000000000..32cd0dde75 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + +class IncidentTypeListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + return { + "data": ([IncidentTypeObject],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[IncidentTypeObject], **kwargs): + """ + Response with a list of incident types. + + :param data: An array of incident type objects. + :type data: [IncidentTypeObject] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_type_object.py b/datadog_api_client/v2/model/incident_type_object.py new file mode 100644 index 0000000000..d76d974078 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_object.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_attributes import IncidentTypeAttributes + from datadog_api_client.v2.model.incident_type_relationships import IncidentTypeRelationships + from datadog_api_client.v2.model.incident_type_type import IncidentTypeType + +class IncidentTypeObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_attributes import IncidentTypeAttributes + from datadog_api_client.v2.model.incident_type_relationships import IncidentTypeRelationships + from datadog_api_client.v2.model.incident_type_type import IncidentTypeType + return { + "attributes": (IncidentTypeAttributes,), + "id": (str,), + "relationships": (IncidentTypeRelationships,), + "type": (IncidentTypeType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentTypeType, attributes: Union[IncidentTypeAttributes, UnsetType]=unset, relationships: Union[IncidentTypeRelationships, UnsetType]=unset, **kwargs): + """ + Incident type response data. + + :param attributes: Incident type's attributes. + :type attributes: IncidentTypeAttributes, optional + + :param id: The incident type's ID. + :type id: str + + :param relationships: The incident type's resource relationships. + :type relationships: IncidentTypeRelationships, optional + + :param type: Incident type resource type. + :type type: IncidentTypeType + """ + 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/datadog_api_client/v2/model/incident_type_patch_data.py b/datadog_api_client/v2/model/incident_type_patch_data.py new file mode 100644 index 0000000000..ef1fd54bca --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_patch_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_update_attributes import IncidentTypeUpdateAttributes + from datadog_api_client.v2.model.incident_type_type import IncidentTypeType + +class IncidentTypePatchData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_update_attributes import IncidentTypeUpdateAttributes + from datadog_api_client.v2.model.incident_type_type import IncidentTypeType + return { + "attributes": (IncidentTypeUpdateAttributes,), + "id": (str,), + "type": (IncidentTypeType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IncidentTypeUpdateAttributes, id: str, type: IncidentTypeType, **kwargs): + """ + Incident type data for a patch request. + + :param attributes: Incident type's attributes for updates. + :type attributes: IncidentTypeUpdateAttributes + + :param id: The incident type's ID. + :type id: str + + :param type: Incident type resource type. + :type type: IncidentTypeType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_type_patch_request.py b/datadog_api_client/v2/model/incident_type_patch_request.py new file mode 100644 index 0000000000..058ef95aa7 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_patch_data import IncidentTypePatchData + +class IncidentTypePatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_patch_data import IncidentTypePatchData + return { + "data": (IncidentTypePatchData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentTypePatchData, **kwargs): + """ + Patch request for an incident type. + + :param data: Incident type data for a patch request. + :type data: IncidentTypePatchData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_type_relationships.py b/datadog_api_client/v2/model/incident_type_relationships.py new file mode 100644 index 0000000000..09f7024a65 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_relationships.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.google_meet_configuration_reference import GoogleMeetConfigurationReference + from datadog_api_client.v2.model.microsoft_teams_configuration_reference import MicrosoftTeamsConfigurationReference + from datadog_api_client.v2.model.zoom_configuration_reference import ZoomConfigurationReference + +class IncidentTypeRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.google_meet_configuration_reference import GoogleMeetConfigurationReference + from datadog_api_client.v2.model.microsoft_teams_configuration_reference import MicrosoftTeamsConfigurationReference + from datadog_api_client.v2.model.zoom_configuration_reference import ZoomConfigurationReference + return { + "created_by_user": (RelationshipToUser,), + "google_meet_configuration": (GoogleMeetConfigurationReference,), + "last_modified_by_user": (RelationshipToUser,), + "microsoft_teams_configuration": (MicrosoftTeamsConfigurationReference,), + "zoom_configuration": (ZoomConfigurationReference,), + } + attribute_map = { + "created_by_user": "created_by_user", + "google_meet_configuration": "google_meet_configuration", + "last_modified_by_user": "last_modified_by_user", + "microsoft_teams_configuration": "microsoft_teams_configuration", + "zoom_configuration": "zoom_configuration", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, google_meet_configuration: Union[GoogleMeetConfigurationReference, none_type, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, microsoft_teams_configuration: Union[MicrosoftTeamsConfigurationReference, none_type, UnsetType]=unset, zoom_configuration: Union[ZoomConfigurationReference, none_type, UnsetType]=unset, **kwargs): + """ + The incident type's resource relationships. + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param google_meet_configuration: A reference to a Google Meet Configuration resource. + :type google_meet_configuration: GoogleMeetConfigurationReference, none_type, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, optional + + :param microsoft_teams_configuration: A reference to a Microsoft Teams Configuration resource. + :type microsoft_teams_configuration: MicrosoftTeamsConfigurationReference, none_type, optional + + :param zoom_configuration: A reference to a Zoom configuration resource. + :type zoom_configuration: ZoomConfigurationReference, none_type, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if google_meet_configuration is not unset: + kwargs["google_meet_configuration"] = google_meet_configuration + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if microsoft_teams_configuration is not unset: + kwargs["microsoft_teams_configuration"] = microsoft_teams_configuration + if zoom_configuration is not unset: + kwargs["zoom_configuration"] = zoom_configuration + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_type_response.py b/datadog_api_client/v2/model/incident_type_response.py new file mode 100644 index 0000000000..c2cab39063 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + +class IncidentTypeResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + return { + "data": (IncidentTypeObject,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentTypeObject, **kwargs): + """ + Incident type response data. + + :param data: Incident type response data. + :type data: IncidentTypeObject + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_type_slug_source.py b/datadog_api_client/v2/model/incident_type_slug_source.py new file mode 100644 index 0000000000..1f28cae957 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_slug_source.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentTypeSlugSource(ModelSimple): + """ + When set to `servicenow`, incidents will display the ServiceNow record ID instead of the public ID. If no ServiceNow integration exists, the public ID will be displayed. + + :param value: If omitted defaults to "default". Must be one of ["default", "servicenow"]. + :type value: str + """ + + allowed_values = { + "default", + "servicenow", + } + DEFAULT: ClassVar["IncidentTypeSlugSource"] + SERVICENOW: ClassVar["IncidentTypeSlugSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentTypeSlugSource.DEFAULT = IncidentTypeSlugSource("default") +IncidentTypeSlugSource.SERVICENOW = IncidentTypeSlugSource("servicenow") diff --git a/datadog_api_client/v2/model/incident_type_type.py b/datadog_api_client/v2/model/incident_type_type.py new file mode 100644 index 0000000000..77fecc1055 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentTypeType(ModelSimple): + """ + Incident type resource type. + + :param value: If omitted defaults to "incident_types". Must be one of ["incident_types"]. + :type value: str + """ + + allowed_values = { + "incident_types", + } + INCIDENT_TYPES: ClassVar["IncidentTypeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentTypeType.INCIDENT_TYPES = IncidentTypeType("incident_types") diff --git a/datadog_api_client/v2/model/incident_type_update_attributes.py b/datadog_api_client/v2/model/incident_type_update_attributes.py new file mode 100644 index 0000000000..c86bc3d203 --- /dev/null +++ b/datadog_api_client/v2/model/incident_type_update_attributes.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_configuration import IncidentTypeConfiguration + +class IncidentTypeUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_configuration import IncidentTypeConfiguration + return { + "configuration": (IncidentTypeConfiguration,), + "created_at": (datetime,), + "created_by": (str,), + "description": (str,), + "is_default": (bool,), + "last_modified_by": (str,), + "modified_at": (datetime,), + "name": (str,), + "prefix": (str,), + } + attribute_map = { + "configuration": "configuration", + "created_at": "createdAt", + "created_by": "createdBy", + "description": "description", + "is_default": "is_default", + "last_modified_by": "lastModifiedBy", + "modified_at": "modifiedAt", + "name": "name", + "prefix": "prefix", + } + read_only_vars = { + "created_at", + "created_by", + "last_modified_by", + "modified_at", + "prefix", + } + + def __init__(self_, configuration: Union[IncidentTypeConfiguration, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, is_default: Union[bool, UnsetType]=unset, last_modified_by: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, prefix: Union[str, UnsetType]=unset, **kwargs): + """ + Incident type's attributes for updates. + + :param configuration: The incident-type-scoped behavior settings. All fields are optional on update. Any field omitted from a PATCH request keeps its current value. This object is read-only on the incident type resource itself and is only mutated through the update (PATCH) endpoint. + :type configuration: IncidentTypeConfiguration, optional + + :param created_at: Timestamp when the incident type was created. + :type created_at: datetime, optional + + :param created_by: A unique identifier that represents the user that created the incident type. + :type created_by: str, optional + + :param description: Text that describes the incident type. + :type description: str, optional + + :param is_default: When true, this incident type will be used as the default type when an incident type is not specified. + :type is_default: bool, optional + + :param last_modified_by: A unique identifier that represents the user that last modified the incident type. + :type last_modified_by: str, optional + + :param modified_at: Timestamp when the incident type was last modified. + :type modified_at: datetime, optional + + :param name: The name of the incident type. + :type name: str, optional + + :param prefix: The string that will be prepended to the incident title across the Datadog app. + :type prefix: str, optional + """ + if configuration is not unset: + kwargs["configuration"] = configuration + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if description is not unset: + kwargs["description"] = description + if is_default is not unset: + kwargs["is_default"] = is_default + if last_modified_by is not unset: + kwargs["last_modified_by"] = last_modified_by + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if prefix is not unset: + kwargs["prefix"] = prefix + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_update_attributes.py b/datadog_api_client/v2/model/incident_update_attributes.py new file mode 100644 index 0000000000..29e1b37988 --- /dev/null +++ b/datadog_api_client/v2/model/incident_update_attributes.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_field_attributes import IncidentFieldAttributes + from datadog_api_client.v2.model.incident_notification_handle import IncidentNotificationHandle + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_field_attributes import IncidentFieldAttributes + from datadog_api_client.v2.model.incident_notification_handle import IncidentNotificationHandle + return { + "customer_impact_end": (datetime, none_type), + "customer_impact_scope": (str,), + "customer_impact_start": (datetime, none_type), + "customer_impacted": (bool,), + "detected": (datetime, none_type), + "fields": ({str: (IncidentFieldAttributes,)},), + "notification_handles": ([IncidentNotificationHandle],), + "title": (str,), + } + attribute_map = { + "customer_impact_end": "customer_impact_end", + "customer_impact_scope": "customer_impact_scope", + "customer_impact_start": "customer_impact_start", + "customer_impacted": "customer_impacted", + "detected": "detected", + "fields": "fields", + "notification_handles": "notification_handles", + "title": "title", + } + + def __init__(self_, customer_impact_end: Union[datetime, none_type, UnsetType]=unset, customer_impact_scope: Union[str, UnsetType]=unset, customer_impact_start: Union[datetime, none_type, UnsetType]=unset, customer_impacted: Union[bool, UnsetType]=unset, detected: Union[datetime, none_type, UnsetType]=unset, fields: Union[Dict[str, Union[IncidentFieldAttributes, IncidentFieldAttributesSingleValue, IncidentFieldAttributesMultipleValue]], UnsetType]=unset, notification_handles: Union[List[IncidentNotificationHandle], UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + The incident's attributes for an update request. + + :param customer_impact_end: Timestamp when customers were no longer impacted by the incident. + :type customer_impact_end: datetime, none_type, optional + + :param customer_impact_scope: A summary of the impact customers experienced during the incident. + :type customer_impact_scope: str, optional + + :param customer_impact_start: Timestamp when customers began being impacted by the incident. + :type customer_impact_start: datetime, none_type, optional + + :param customer_impacted: A flag indicating whether the incident caused customer impact. + :type customer_impacted: bool, optional + + :param detected: Timestamp when the incident was detected. + :type detected: datetime, none_type, optional + + :param fields: A condensed view of the user-defined fields for which to update selections. + :type fields: {str: (IncidentFieldAttributes,)}, optional + + :param notification_handles: Notification handles that will be notified of the incident during update. + :type notification_handles: [IncidentNotificationHandle], optional + + :param title: The title of the incident, which summarizes what happened. + :type title: str, optional + """ + if customer_impact_end is not unset: + kwargs["customer_impact_end"] = customer_impact_end + if customer_impact_scope is not unset: + kwargs["customer_impact_scope"] = customer_impact_scope + if customer_impact_start is not unset: + kwargs["customer_impact_start"] = customer_impact_start + if customer_impacted is not unset: + kwargs["customer_impacted"] = customer_impacted + if detected is not unset: + kwargs["detected"] = detected + if fields is not unset: + kwargs["fields"] = fields + if notification_handles is not unset: + kwargs["notification_handles"] = notification_handles + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_update_data.py b/datadog_api_client/v2/model/incident_update_data.py new file mode 100644 index 0000000000..e8ce9e66ab --- /dev/null +++ b/datadog_api_client/v2/model/incident_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_update_attributes import IncidentUpdateAttributes + from datadog_api_client.v2.model.incident_update_relationships import IncidentUpdateRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_update_attributes import IncidentUpdateAttributes + from datadog_api_client.v2.model.incident_update_relationships import IncidentUpdateRelationships + from datadog_api_client.v2.model.incident_type import IncidentType + return { + "attributes": (IncidentUpdateAttributes,), + "id": (str,), + "relationships": (IncidentUpdateRelationships,), + "type": (IncidentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentType, attributes: Union[IncidentUpdateAttributes, UnsetType]=unset, relationships: Union[IncidentUpdateRelationships, UnsetType]=unset, **kwargs): + """ + Incident data for an update request. + + :param attributes: The incident's attributes for an update request. + :type attributes: IncidentUpdateAttributes, optional + + :param id: The incident's ID. + :type id: str + + :param relationships: The incident's relationships for an update request. + :type relationships: IncidentUpdateRelationships, optional + + :param type: Incident resource type. + :type type: IncidentType + """ + 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/datadog_api_client/v2/model/incident_update_relationships.py b/datadog_api_client/v2/model/incident_update_relationships.py new file mode 100644 index 0000000000..804802aa62 --- /dev/null +++ b/datadog_api_client/v2/model/incident_update_relationships.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + from datadog_api_client.v2.model.relationship_to_incident_integration_metadatas import RelationshipToIncidentIntegrationMetadatas + from datadog_api_client.v2.model.relationship_to_incident_postmortem import RelationshipToIncidentPostmortem + +class IncidentUpdateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser + from datadog_api_client.v2.model.relationship_to_incident_integration_metadatas import RelationshipToIncidentIntegrationMetadatas + from datadog_api_client.v2.model.relationship_to_incident_postmortem import RelationshipToIncidentPostmortem + return { + "commander_user": (NullableRelationshipToUser,), + "integrations": (RelationshipToIncidentIntegrationMetadatas,), + "postmortem": (RelationshipToIncidentPostmortem,), + } + attribute_map = { + "commander_user": "commander_user", + "integrations": "integrations", + "postmortem": "postmortem", + } + + def __init__(self_, commander_user: Union[NullableRelationshipToUser, none_type, UnsetType]=unset, integrations: Union[RelationshipToIncidentIntegrationMetadatas, UnsetType]=unset, postmortem: Union[RelationshipToIncidentPostmortem, UnsetType]=unset, **kwargs): + """ + The incident's relationships for an update request. + + :param commander_user: Relationship to user. + :type commander_user: NullableRelationshipToUser, none_type, optional + + :param integrations: A relationship reference for multiple integration metadata objects. + :type integrations: RelationshipToIncidentIntegrationMetadatas, optional + + :param postmortem: A relationship reference for postmortems. + :type postmortem: RelationshipToIncidentPostmortem, optional + """ + if commander_user is not unset: + kwargs["commander_user"] = commander_user + if integrations is not unset: + kwargs["integrations"] = integrations + if postmortem is not unset: + kwargs["postmortem"] = postmortem + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_update_request.py b/datadog_api_client/v2/model/incident_update_request.py new file mode 100644 index 0000000000..fe7f9b2a3f --- /dev/null +++ b/datadog_api_client/v2/model/incident_update_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_update_data import IncidentUpdateData + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + +class IncidentUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_update_data import IncidentUpdateData + return { + "data": (IncidentUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentUpdateData, **kwargs): + """ + Update request for an incident. + + :param data: Incident data for an update request. + :type data: IncidentUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_user_attributes.py b/datadog_api_client/v2/model/incident_user_attributes.py new file mode 100644 index 0000000000..e24969921c --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "icon": (str,), + "name": (str, none_type), + "uuid": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "icon": "icon", + "name": "name", + "uuid": "uuid", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, icon: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, uuid: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of user object returned by the API. + + :param email: Email of the user. + :type email: str, optional + + :param handle: Handle of the user. + :type handle: str, optional + + :param icon: URL of the user's icon. + :type icon: str, optional + + :param name: Name of the user. + :type name: str, none_type, optional + + :param uuid: UUID of the user. + :type uuid: str, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if icon is not unset: + kwargs["icon"] = icon + if name is not unset: + kwargs["name"] = name + if uuid is not unset: + kwargs["uuid"] = uuid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_user_data.py b/datadog_api_client/v2/model/incident_user_data.py new file mode 100644 index 0000000000..5d35785fa9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_attributes import IncidentUserAttributes + from datadog_api_client.v2.model.users_type import UsersType + +class IncidentUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_attributes import IncidentUserAttributes + from datadog_api_client.v2.model.users_type import UsersType + return { + "attributes": (IncidentUserAttributes,), + "id": (str,), + "type": (UsersType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[IncidentUserAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[UsersType, UnsetType]=unset, **kwargs): + """ + User object returned by the API. + + :param attributes: Attributes of user object returned by the API. + :type attributes: IncidentUserAttributes, optional + + :param id: ID of the user. + :type id: str, optional + + :param type: Users resource type. + :type type: UsersType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_user_defined_field_attributes_create_request.py b/datadog_api_client/v2/model/incident_user_defined_field_attributes_create_request.py new file mode 100644 index 0000000000..f4b9b37c76 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_attributes_create_request.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_category import IncidentUserDefinedFieldCategory + from datadog_api_client.v2.model.incident_user_defined_field_collected import IncidentUserDefinedFieldCollected + from datadog_api_client.v2.model.incident_user_defined_field_field_type import IncidentUserDefinedFieldFieldType + from datadog_api_client.v2.model.incident_user_defined_field_valid_value import IncidentUserDefinedFieldValidValue + +class IncidentUserDefinedFieldAttributesCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_category import IncidentUserDefinedFieldCategory + from datadog_api_client.v2.model.incident_user_defined_field_collected import IncidentUserDefinedFieldCollected + from datadog_api_client.v2.model.incident_user_defined_field_field_type import IncidentUserDefinedFieldFieldType + from datadog_api_client.v2.model.incident_user_defined_field_valid_value import IncidentUserDefinedFieldValidValue + return { + "category": (IncidentUserDefinedFieldCategory,), + "collected": (IncidentUserDefinedFieldCollected,), + "default_value": (str, none_type), + "display_name": (str,), + "name": (str,), + "ordinal": (str, none_type), + "required": (bool,), + "tag_key": (str, none_type), + "type": (IncidentUserDefinedFieldFieldType,), + "valid_values": ([IncidentUserDefinedFieldValidValue],), + } + attribute_map = { + "category": "category", + "collected": "collected", + "default_value": "default_value", + "display_name": "display_name", + "name": "name", + "ordinal": "ordinal", + "required": "required", + "tag_key": "tag_key", + "type": "type", + "valid_values": "valid_values", + } + + def __init__(self_, name: str, type: IncidentUserDefinedFieldFieldType, category: Union[IncidentUserDefinedFieldCategory, none_type, UnsetType]=unset, collected: Union[IncidentUserDefinedFieldCollected, none_type, UnsetType]=unset, default_value: Union[str, none_type, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, ordinal: Union[str, none_type, UnsetType]=unset, required: Union[bool, UnsetType]=unset, tag_key: Union[str, none_type, UnsetType]=unset, valid_values: Union[List[IncidentUserDefinedFieldValidValue], UnsetType]=unset, **kwargs): + """ + Attributes for creating an incident user-defined field. + + :param category: The section in which the field appears: "what_happened" or "why_it_happened". When null, the field appears in the Attributes section. + :type category: IncidentUserDefinedFieldCategory, none_type, optional + + :param collected: The lifecycle stage at which the app prompts users to fill out this field. Cannot be set on required fields. + :type collected: IncidentUserDefinedFieldCollected, none_type, optional + + :param default_value: The default value for the field. Must be one of the valid values when valid_values is set. + :type default_value: str, none_type, optional + + :param display_name: The human-readable name shown in the UI. Defaults to a formatted version of the name if not provided. + :type display_name: str, optional + + :param name: The unique identifier of the field. Must start with a letter or digit and contain only letters, digits, underscores, or periods. + :type name: str + + :param ordinal: A decimal string representing the field's display order in the UI. + :type ordinal: str, none_type, optional + + :param required: When true, users must fill out this field on incidents. + :type required: bool, optional + + :param tag_key: For metric tag-type fields only, the metric tag key that powers the autocomplete options. + :type tag_key: str, none_type, optional + + :param type: The data type of the field. 1=dropdown, 2=multiselect, 3=textbox, 4=textarray, 5=metrictag, 6=autocomplete, 7=number, 8=datetime. + :type type: IncidentUserDefinedFieldFieldType + + :param valid_values: The list of allowed values for dropdown and multiselect fields. Limited to 1000 values. + :type valid_values: [IncidentUserDefinedFieldValidValue], optional + """ + if category is not unset: + kwargs["category"] = category + if collected is not unset: + kwargs["collected"] = collected + if default_value is not unset: + kwargs["default_value"] = default_value + if display_name is not unset: + kwargs["display_name"] = display_name + if ordinal is not unset: + kwargs["ordinal"] = ordinal + if required is not unset: + kwargs["required"] = required + if tag_key is not unset: + kwargs["tag_key"] = tag_key + if valid_values is not unset: + kwargs["valid_values"] = valid_values + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/incident_user_defined_field_attributes_response.py b/datadog_api_client/v2/model/incident_user_defined_field_attributes_response.py new file mode 100644 index 0000000000..33c1e35b85 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_attributes_response.py @@ -0,0 +1,150 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_category import IncidentUserDefinedFieldCategory + from datadog_api_client.v2.model.incident_user_defined_field_collected import IncidentUserDefinedFieldCollected + from datadog_api_client.v2.model.incident_user_defined_field_metadata import IncidentUserDefinedFieldMetadata + from datadog_api_client.v2.model.incident_user_defined_field_valid_value import IncidentUserDefinedFieldValidValue + +class IncidentUserDefinedFieldAttributesResponse(ModelNormal): + validations = { + "type": { + "inclusive_maximum": 8, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_category import IncidentUserDefinedFieldCategory + from datadog_api_client.v2.model.incident_user_defined_field_collected import IncidentUserDefinedFieldCollected + from datadog_api_client.v2.model.incident_user_defined_field_metadata import IncidentUserDefinedFieldMetadata + from datadog_api_client.v2.model.incident_user_defined_field_valid_value import IncidentUserDefinedFieldValidValue + return { + "category": (IncidentUserDefinedFieldCategory,), + "collected": (IncidentUserDefinedFieldCollected,), + "created": (datetime,), + "default_value": (str, none_type), + "deleted": (datetime, none_type), + "display_name": (str,), + "metadata": (IncidentUserDefinedFieldMetadata,), + "modified": (datetime, none_type), + "name": (str,), + "ordinal": (str, none_type), + "required": (bool,), + "reserved": (bool,), + "tag_key": (str, none_type), + "type": (int, none_type), + "valid_values": ([IncidentUserDefinedFieldValidValue], none_type), + } + attribute_map = { + "category": "category", + "collected": "collected", + "created": "created", + "default_value": "default_value", + "deleted": "deleted", + "display_name": "display_name", + "metadata": "metadata", + "modified": "modified", + "name": "name", + "ordinal": "ordinal", + "required": "required", + "reserved": "reserved", + "tag_key": "tag_key", + "type": "type", + "valid_values": "valid_values", + } + read_only_vars = { + "created", + "deleted", + "modified", + "reserved", + } + + def __init__(self_, category: Union[IncidentUserDefinedFieldCategory, none_type], collected: Union[IncidentUserDefinedFieldCollected, none_type], created: datetime, default_value: Union[str, none_type], deleted: Union[datetime, none_type], display_name: str, metadata: Union[IncidentUserDefinedFieldMetadata, none_type], modified: Union[datetime, none_type], name: str, ordinal: Union[str, none_type], required: bool, reserved: bool, tag_key: Union[str, none_type], type: Union[int, none_type], valid_values: Union[List[IncidentUserDefinedFieldValidValue], none_type], **kwargs): + """ + Attributes of an incident user-defined field. + + :param category: The section in which the field appears: "what_happened" or "why_it_happened". When null, the field appears in the Attributes section. + :type category: IncidentUserDefinedFieldCategory, none_type + + :param collected: The lifecycle stage at which the app prompts users to fill out this field. Cannot be set on required fields. + :type collected: IncidentUserDefinedFieldCollected, none_type + + :param created: Timestamp when the field was created. + :type created: datetime + + :param default_value: The default value for the field. + :type default_value: str, none_type + + :param deleted: Timestamp when the field was soft-deleted, or null if not deleted. + :type deleted: datetime, none_type + + :param display_name: The human-readable name shown in the UI. + :type display_name: str + + :param metadata: Metadata for autocomplete-type user-defined fields, describing how to populate autocomplete options. + :type metadata: IncidentUserDefinedFieldMetadata, none_type + + :param modified: Timestamp when the field was last modified. + :type modified: datetime, none_type + + :param name: The unique identifier of the field. + :type name: str + + :param ordinal: A decimal string representing the field's display order in the UI. + :type ordinal: str, none_type + + :param required: When true, users must fill out this field on incidents. + :type required: bool + + :param reserved: When true, this field is reserved for system use and cannot be deleted. + :type reserved: bool + + :param tag_key: For metric tag-type fields only, the metric tag key that powers the autocomplete options. + :type tag_key: str, none_type + + :param type: The data type of the field. 1=dropdown, 2=multiselect, 3=textbox, 4=textarray, 5=metrictag, 6=autocomplete, 7=number, 8=datetime. + :type type: int, none_type + + :param valid_values: The list of allowed values for dropdown, multiselect, and autocomplete fields. + :type valid_values: [IncidentUserDefinedFieldValidValue], none_type + """ + super().__init__(kwargs) + + + self_.category = category + self_.collected = collected + self_.created = created + self_.default_value = default_value + self_.deleted = deleted + self_.display_name = display_name + self_.metadata = metadata + self_.modified = modified + self_.name = name + self_.ordinal = ordinal + self_.required = required + self_.reserved = reserved + self_.tag_key = tag_key + self_.type = type + self_.valid_values = valid_values diff --git a/datadog_api_client/v2/model/incident_user_defined_field_attributes_update_request.py b/datadog_api_client/v2/model/incident_user_defined_field_attributes_update_request.py new file mode 100644 index 0000000000..b5274b1650 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_attributes_update_request.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_category import IncidentUserDefinedFieldCategory + from datadog_api_client.v2.model.incident_user_defined_field_collected import IncidentUserDefinedFieldCollected + from datadog_api_client.v2.model.incident_user_defined_field_valid_value import IncidentUserDefinedFieldValidValue + +class IncidentUserDefinedFieldAttributesUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_category import IncidentUserDefinedFieldCategory + from datadog_api_client.v2.model.incident_user_defined_field_collected import IncidentUserDefinedFieldCollected + from datadog_api_client.v2.model.incident_user_defined_field_valid_value import IncidentUserDefinedFieldValidValue + return { + "category": (IncidentUserDefinedFieldCategory,), + "collected": (IncidentUserDefinedFieldCollected,), + "default_value": (str, none_type), + "display_name": (str,), + "ordinal": (str, none_type), + "required": (bool, none_type), + "valid_values": ([IncidentUserDefinedFieldValidValue], none_type), + } + attribute_map = { + "category": "category", + "collected": "collected", + "default_value": "default_value", + "display_name": "display_name", + "ordinal": "ordinal", + "required": "required", + "valid_values": "valid_values", + } + + def __init__(self_, category: Union[IncidentUserDefinedFieldCategory, none_type, UnsetType]=unset, collected: Union[IncidentUserDefinedFieldCollected, none_type, UnsetType]=unset, default_value: Union[str, none_type, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, ordinal: Union[str, none_type, UnsetType]=unset, required: Union[bool, none_type, UnsetType]=unset, valid_values: Union[List[IncidentUserDefinedFieldValidValue], none_type, UnsetType]=unset, **kwargs): + """ + Attributes for updating an incident user-defined field. All fields are optional. + + :param category: The section in which the field appears: "what_happened" or "why_it_happened". When null, the field appears in the Attributes section. + :type category: IncidentUserDefinedFieldCategory, none_type, optional + + :param collected: The lifecycle stage at which the app prompts users to fill out this field. Cannot be set on required fields. + :type collected: IncidentUserDefinedFieldCollected, none_type, optional + + :param default_value: The default value for the field. Must be one of the valid values when valid_values is set. + :type default_value: str, none_type, optional + + :param display_name: The human-readable name shown in the UI. + :type display_name: str, optional + + :param ordinal: A decimal string representing the field's display order in the UI. + :type ordinal: str, none_type, optional + + :param required: When true, users must fill out this field on incidents. + :type required: bool, none_type, optional + + :param valid_values: The list of allowed values for dropdown and multiselect fields. Limited to 1000 values. + :type valid_values: [IncidentUserDefinedFieldValidValue], none_type, optional + """ + if category is not unset: + kwargs["category"] = category + if collected is not unset: + kwargs["collected"] = collected + if default_value is not unset: + kwargs["default_value"] = default_value + if display_name is not unset: + kwargs["display_name"] = display_name + if ordinal is not unset: + kwargs["ordinal"] = ordinal + if required is not unset: + kwargs["required"] = required + if valid_values is not unset: + kwargs["valid_values"] = valid_values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_user_defined_field_category.py b/datadog_api_client/v2/model/incident_user_defined_field_category.py new file mode 100644 index 0000000000..ecbefbdbc1 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_category.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentUserDefinedFieldCategory(ModelSimple): + """ + The section in which the field appears: "what_happened" or "why_it_happened". When null, the field appears in the Attributes section. + + :param value: Must be one of ["what_happened", "why_it_happened"]. + :type value: str + """ + + allowed_values = { + "what_happened", + "why_it_happened", + } + WHAT_HAPPENED: ClassVar["IncidentUserDefinedFieldCategory"] + WHY_IT_HAPPENED: ClassVar["IncidentUserDefinedFieldCategory"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentUserDefinedFieldCategory.WHAT_HAPPENED = IncidentUserDefinedFieldCategory("what_happened") +IncidentUserDefinedFieldCategory.WHY_IT_HAPPENED = IncidentUserDefinedFieldCategory("why_it_happened") diff --git a/datadog_api_client/v2/model/incident_user_defined_field_collected.py b/datadog_api_client/v2/model/incident_user_defined_field_collected.py new file mode 100644 index 0000000000..2d9904c0b6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_collected.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentUserDefinedFieldCollected(ModelSimple): + """ + The lifecycle stage at which the app prompts users to fill out this field. Cannot be set on required fields. + + :param value: Must be one of ["active", "stable", "resolved", "completed"]. + :type value: str + """ + + allowed_values = { + "active", + "stable", + "resolved", + "completed", + } + ACTIVE: ClassVar["IncidentUserDefinedFieldCollected"] + STABLE: ClassVar["IncidentUserDefinedFieldCollected"] + RESOLVED: ClassVar["IncidentUserDefinedFieldCollected"] + COMPLETED: ClassVar["IncidentUserDefinedFieldCollected"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentUserDefinedFieldCollected.ACTIVE = IncidentUserDefinedFieldCollected("active") +IncidentUserDefinedFieldCollected.STABLE = IncidentUserDefinedFieldCollected("stable") +IncidentUserDefinedFieldCollected.RESOLVED = IncidentUserDefinedFieldCollected("resolved") +IncidentUserDefinedFieldCollected.COMPLETED = IncidentUserDefinedFieldCollected("completed") diff --git a/datadog_api_client/v2/model/incident_user_defined_field_create_data.py b/datadog_api_client/v2/model/incident_user_defined_field_create_data.py new file mode 100644 index 0000000000..2799036371 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_create_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_attributes_create_request import IncidentUserDefinedFieldAttributesCreateRequest + from datadog_api_client.v2.model.incident_user_defined_field_create_relationships import IncidentUserDefinedFieldCreateRelationships + from datadog_api_client.v2.model.incident_user_defined_field_type import IncidentUserDefinedFieldType + +class IncidentUserDefinedFieldCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_attributes_create_request import IncidentUserDefinedFieldAttributesCreateRequest + from datadog_api_client.v2.model.incident_user_defined_field_create_relationships import IncidentUserDefinedFieldCreateRelationships + from datadog_api_client.v2.model.incident_user_defined_field_type import IncidentUserDefinedFieldType + return { + "attributes": (IncidentUserDefinedFieldAttributesCreateRequest,), + "relationships": (IncidentUserDefinedFieldCreateRelationships,), + "type": (IncidentUserDefinedFieldType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentUserDefinedFieldAttributesCreateRequest, relationships: IncidentUserDefinedFieldCreateRelationships, type: IncidentUserDefinedFieldType, **kwargs): + """ + Data for creating an incident user-defined field. + + :param attributes: Attributes for creating an incident user-defined field. + :type attributes: IncidentUserDefinedFieldAttributesCreateRequest + + :param relationships: Relationships for creating an incident user-defined field. + :type relationships: IncidentUserDefinedFieldCreateRelationships + + :param type: The incident user defined fields type. + :type type: IncidentUserDefinedFieldType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/incident_user_defined_field_create_relationships.py b/datadog_api_client/v2/model/incident_user_defined_field_create_relationships.py new file mode 100644 index 0000000000..78f1d2ba61 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_create_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + +class IncidentUserDefinedFieldCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_type import RelationshipToIncidentType + return { + "incident_type": (RelationshipToIncidentType,), + } + attribute_map = { + "incident_type": "incident_type", + } + + def __init__(self_, incident_type: RelationshipToIncidentType, **kwargs): + """ + Relationships for creating an incident user-defined field. + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType + """ + super().__init__(kwargs) + + + self_.incident_type = incident_type diff --git a/datadog_api_client/v2/model/incident_user_defined_field_create_request.py b/datadog_api_client/v2/model/incident_user_defined_field_create_request.py new file mode 100644 index 0000000000..93b8a730d8 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_create_data import IncidentUserDefinedFieldCreateData + +class IncidentUserDefinedFieldCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_create_data import IncidentUserDefinedFieldCreateData + return { + "data": (IncidentUserDefinedFieldCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentUserDefinedFieldCreateData, **kwargs): + """ + Request body for creating an incident user-defined field. + + :param data: Data for creating an incident user-defined field. + :type data: IncidentUserDefinedFieldCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_user_defined_field_field_type.py b/datadog_api_client/v2/model/incident_user_defined_field_field_type.py new file mode 100644 index 0000000000..520f1c303d --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_field_type.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentUserDefinedFieldFieldType(ModelSimple): + """ + The data type of the field. 1=dropdown, 2=multiselect, 3=textbox, 4=textarray, 5=metrictag, 6=autocomplete, 7=number, 8=datetime. + + :param value: Must be one of [1, 2, 3, 4, 5, 6, 7, 8]. + :type value: int + """ + + allowed_values = { + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + } + DROPDOWN: ClassVar["IncidentUserDefinedFieldFieldType"] + MULTISELECT: ClassVar["IncidentUserDefinedFieldFieldType"] + TEXTBOX: ClassVar["IncidentUserDefinedFieldFieldType"] + TEXTARRAY: ClassVar["IncidentUserDefinedFieldFieldType"] + METRICTAG: ClassVar["IncidentUserDefinedFieldFieldType"] + AUTOCOMPLETE: ClassVar["IncidentUserDefinedFieldFieldType"] + NUMBER: ClassVar["IncidentUserDefinedFieldFieldType"] + DATETIME: ClassVar["IncidentUserDefinedFieldFieldType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +IncidentUserDefinedFieldFieldType.DROPDOWN = IncidentUserDefinedFieldFieldType(1) +IncidentUserDefinedFieldFieldType.MULTISELECT = IncidentUserDefinedFieldFieldType(2) +IncidentUserDefinedFieldFieldType.TEXTBOX = IncidentUserDefinedFieldFieldType(3) +IncidentUserDefinedFieldFieldType.TEXTARRAY = IncidentUserDefinedFieldFieldType(4) +IncidentUserDefinedFieldFieldType.METRICTAG = IncidentUserDefinedFieldFieldType(5) +IncidentUserDefinedFieldFieldType.AUTOCOMPLETE = IncidentUserDefinedFieldFieldType(6) +IncidentUserDefinedFieldFieldType.NUMBER = IncidentUserDefinedFieldFieldType(7) +IncidentUserDefinedFieldFieldType.DATETIME = IncidentUserDefinedFieldFieldType(8) diff --git a/datadog_api_client/v2/model/incident_user_defined_field_list_meta.py b/datadog_api_client/v2/model/incident_user_defined_field_list_meta.py new file mode 100644 index 0000000000..e2fc65e381 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_list_meta.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentUserDefinedFieldListMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "offset": (int,), + "size": (int,), + } + attribute_map = { + "offset": "offset", + "size": "size", + } + + def __init__(self_, offset: Union[int, UnsetType]=unset, size: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata for the user-defined field list response. + + :param offset: The offset of the current page. + :type offset: int, optional + + :param size: The total number of items in the current page. + :type size: int, optional + """ + if offset is not unset: + kwargs["offset"] = offset + if size is not unset: + kwargs["size"] = size + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_user_defined_field_list_response.py b/datadog_api_client/v2/model/incident_user_defined_field_list_response.py new file mode 100644 index 0000000000..cbcbabe3bd --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_response_data import IncidentUserDefinedFieldResponseData + from datadog_api_client.v2.model.incident_user_defined_field_list_meta import IncidentUserDefinedFieldListMeta + +class IncidentUserDefinedFieldListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_response_data import IncidentUserDefinedFieldResponseData + from datadog_api_client.v2.model.incident_user_defined_field_list_meta import IncidentUserDefinedFieldListMeta + return { + "data": ([IncidentUserDefinedFieldResponseData],), + "meta": (IncidentUserDefinedFieldListMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[IncidentUserDefinedFieldResponseData], meta: IncidentUserDefinedFieldListMeta, **kwargs): + """ + Response containing a list of incident user-defined fields. + + :param data: An array of user-defined field objects. + :type data: [IncidentUserDefinedFieldResponseData] + + :param meta: Pagination metadata for the user-defined field list response. + :type meta: IncidentUserDefinedFieldListMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/incident_user_defined_field_metadata.py b/datadog_api_client/v2/model/incident_user_defined_field_metadata.py new file mode 100644 index 0000000000..24cfa724ba --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_metadata.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentUserDefinedFieldMetadata(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "category": (str,), + "search_limit_param": (str,), + "search_params": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "search_query_param": (str,), + "search_result_path": (str,), + "search_url": (str,), + } + attribute_map = { + "category": "category", + "search_limit_param": "search_limit_param", + "search_params": "search_params", + "search_query_param": "search_query_param", + "search_result_path": "search_result_path", + "search_url": "search_url", + } + + def __init__(self_, category: str, search_limit_param: str, search_params: Dict[str, Any], search_query_param: str, search_result_path: str, search_url: str, **kwargs): + """ + Metadata for autocomplete-type user-defined fields, describing how to populate autocomplete options. + + :param category: The category of the autocomplete source. + :type category: str + + :param search_limit_param: The query parameter used to limit the number of autocomplete results. + :type search_limit_param: str + + :param search_params: Additional query parameters to include in the search URL. + :type search_params: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + + :param search_query_param: The query parameter used to pass typed input to the search URL. + :type search_query_param: str + + :param search_result_path: The JSON path to the results in the response body. + :type search_result_path: str + + :param search_url: The URL used to populate autocomplete options. + :type search_url: str + """ + super().__init__(kwargs) + + + self_.category = category + self_.search_limit_param = search_limit_param + self_.search_params = search_params + self_.search_query_param = search_query_param + self_.search_result_path = search_result_path + self_.search_url = search_url diff --git a/datadog_api_client/v2/model/incident_user_defined_field_relationships.py b/datadog_api_client/v2/model/incident_user_defined_field_relationships.py new file mode 100644 index 0000000000..55758ea184 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_relationships.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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 + +class IncidentUserDefinedFieldRelationships(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 + return { + "created_by_user": (RelationshipToUser,), + "incident_type": (RelationshipToIncidentType,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "incident_type": "incident_type", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: RelationshipToUser, incident_type: RelationshipToIncidentType, last_modified_by_user: RelationshipToUser, **kwargs): + """ + Relationships of an incident user-defined field. + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser + + :param incident_type: Relationship to an incident type. + :type incident_type: RelationshipToIncidentType + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser + """ + super().__init__(kwargs) + + + self_.created_by_user = created_by_user + self_.incident_type = incident_type + self_.last_modified_by_user = last_modified_by_user diff --git a/datadog_api_client/v2/model/incident_user_defined_field_response.py b/datadog_api_client/v2/model/incident_user_defined_field_response.py new file mode 100644 index 0000000000..56c5447bbe --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_response_data import IncidentUserDefinedFieldResponseData + +class IncidentUserDefinedFieldResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_response_data import IncidentUserDefinedFieldResponseData + return { + "data": (IncidentUserDefinedFieldResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentUserDefinedFieldResponseData, **kwargs): + """ + Response containing a single incident user-defined field. + + :param data: Data object for an incident user-defined field response. + :type data: IncidentUserDefinedFieldResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_user_defined_field_response_data.py b/datadog_api_client/v2/model/incident_user_defined_field_response_data.py new file mode 100644 index 0000000000..e68ec6d90a --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_response_data.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_attributes_response import IncidentUserDefinedFieldAttributesResponse + from datadog_api_client.v2.model.incident_user_defined_field_relationships import IncidentUserDefinedFieldRelationships + from datadog_api_client.v2.model.incident_user_defined_field_type import IncidentUserDefinedFieldType + +class IncidentUserDefinedFieldResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_attributes_response import IncidentUserDefinedFieldAttributesResponse + from datadog_api_client.v2.model.incident_user_defined_field_relationships import IncidentUserDefinedFieldRelationships + from datadog_api_client.v2.model.incident_user_defined_field_type import IncidentUserDefinedFieldType + return { + "attributes": (IncidentUserDefinedFieldAttributesResponse,), + "id": (str,), + "relationships": (IncidentUserDefinedFieldRelationships,), + "type": (IncidentUserDefinedFieldType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentUserDefinedFieldAttributesResponse, id: str, relationships: IncidentUserDefinedFieldRelationships, type: IncidentUserDefinedFieldType, **kwargs): + """ + Data object for an incident user-defined field response. + + :param attributes: Attributes of an incident user-defined field. + :type attributes: IncidentUserDefinedFieldAttributesResponse + + :param id: The unique identifier of the user-defined field. + :type id: str + + :param relationships: Relationships of an incident user-defined field. + :type relationships: IncidentUserDefinedFieldRelationships + + :param type: The incident user defined fields type. + :type type: IncidentUserDefinedFieldType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/incident_user_defined_field_type.py b/datadog_api_client/v2/model/incident_user_defined_field_type.py new file mode 100644 index 0000000000..ce643caedd --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentUserDefinedFieldType(ModelSimple): + """ + The incident user defined fields type. + + :param value: If omitted defaults to "user_defined_field". Must be one of ["user_defined_field"]. + :type value: str + """ + + allowed_values = { + "user_defined_field", + } + USER_DEFINED_FIELD: ClassVar["IncidentUserDefinedFieldType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentUserDefinedFieldType.USER_DEFINED_FIELD = IncidentUserDefinedFieldType("user_defined_field") diff --git a/datadog_api_client/v2/model/incident_user_defined_field_update_data.py b/datadog_api_client/v2/model/incident_user_defined_field_update_data.py new file mode 100644 index 0000000000..f719dec4fc --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_attributes_update_request import IncidentUserDefinedFieldAttributesUpdateRequest + from datadog_api_client.v2.model.incident_user_defined_field_type import IncidentUserDefinedFieldType + +class IncidentUserDefinedFieldUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_attributes_update_request import IncidentUserDefinedFieldAttributesUpdateRequest + from datadog_api_client.v2.model.incident_user_defined_field_type import IncidentUserDefinedFieldType + return { + "attributes": (IncidentUserDefinedFieldAttributesUpdateRequest,), + "id": (str,), + "type": (IncidentUserDefinedFieldType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IncidentUserDefinedFieldAttributesUpdateRequest, id: str, type: IncidentUserDefinedFieldType, **kwargs): + """ + Data for updating an incident user-defined field. + + :param attributes: Attributes for updating an incident user-defined field. All fields are optional. + :type attributes: IncidentUserDefinedFieldAttributesUpdateRequest + + :param id: The unique identifier of the user-defined field to update. + :type id: str + + :param type: The incident user defined fields type. + :type type: IncidentUserDefinedFieldType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_user_defined_field_update_request.py b/datadog_api_client/v2/model/incident_user_defined_field_update_request.py new file mode 100644 index 0000000000..5b0f39d4ae --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_update_data import IncidentUserDefinedFieldUpdateData + +class IncidentUserDefinedFieldUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_update_data import IncidentUserDefinedFieldUpdateData + return { + "data": (IncidentUserDefinedFieldUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentUserDefinedFieldUpdateData, **kwargs): + """ + Request body for updating an incident user-defined field. + + :param data: Data for updating an incident user-defined field. + :type data: IncidentUserDefinedFieldUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_user_defined_field_valid_value.py b/datadog_api_client/v2/model/incident_user_defined_field_valid_value.py new file mode 100644 index 0000000000..cc2eb316e0 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_field_valid_value.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentUserDefinedFieldValidValue(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "display_name": (str,), + "short_description": (str,), + "value": (str,), + } + attribute_map = { + "description": "description", + "display_name": "display_name", + "short_description": "short_description", + "value": "value", + } + + def __init__(self_, display_name: str, value: str, description: Union[str, UnsetType]=unset, short_description: Union[str, UnsetType]=unset, **kwargs): + """ + A valid value for an incident user-defined field. + + :param description: A detailed description of the valid value. + :type description: str, optional + + :param display_name: The human-readable display name for this value. + :type display_name: str + + :param short_description: A short description of the valid value. + :type short_description: str, optional + + :param value: The identifier that is stored when this option is selected. + :type value: str + """ + if description is not unset: + kwargs["description"] = description + if short_description is not unset: + kwargs["short_description"] = short_description + super().__init__(kwargs) + + + self_.display_name = display_name + self_.value = value diff --git a/datadog_api_client/v2/model/incident_user_defined_role_data_attributes_request.py b/datadog_api_client/v2/model/incident_user_defined_role_data_attributes_request.py new file mode 100644 index 0000000000..a272ce0b2c --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_data_attributes_request.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_policy import IncidentUserDefinedRolePolicy + +class IncidentUserDefinedRoleDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_policy import IncidentUserDefinedRolePolicy + return { + "description": (str, none_type), + "name": (str,), + "policy": (IncidentUserDefinedRolePolicy,), + } + attribute_map = { + "description": "description", + "name": "name", + "policy": "policy", + } + + def __init__(self_, name: str, description: Union[str, none_type, UnsetType]=unset, policy: Union[IncidentUserDefinedRolePolicy, UnsetType]=unset, **kwargs): + """ + Attributes for creating an incident user-defined role. + + :param description: A description of the user-defined role. + :type description: str, none_type, optional + + :param name: The name of the user-defined role. + :type name: str + + :param policy: Policy configuration for a user-defined role. + :type policy: IncidentUserDefinedRolePolicy, optional + """ + if description is not unset: + kwargs["description"] = description + if policy is not unset: + kwargs["policy"] = policy + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/incident_user_defined_role_data_attributes_response.py b/datadog_api_client/v2/model/incident_user_defined_role_data_attributes_response.py new file mode 100644 index 0000000000..5dc4ffd322 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_data_attributes_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_policy import IncidentUserDefinedRolePolicy + +class IncidentUserDefinedRoleDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_policy import IncidentUserDefinedRolePolicy + return { + "created": (datetime,), + "description": (str, none_type), + "modified": (datetime,), + "name": (str,), + "policy": (IncidentUserDefinedRolePolicy,), + } + attribute_map = { + "created": "created", + "description": "description", + "modified": "modified", + "name": "name", + "policy": "policy", + } + + def __init__(self_, created: datetime, modified: datetime, name: str, policy: IncidentUserDefinedRolePolicy, description: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of an incident user-defined role. + + :param created: Timestamp when the role was created. + :type created: datetime + + :param description: A description of the user-defined role. + :type description: str, none_type, optional + + :param modified: Timestamp when the role was last modified. + :type modified: datetime + + :param name: The name of the user-defined role. + :type name: str + + :param policy: Policy configuration for a user-defined role. + :type policy: IncidentUserDefinedRolePolicy + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.created = created + self_.modified = modified + self_.name = name + self_.policy = policy diff --git a/datadog_api_client/v2/model/incident_user_defined_role_data_request.py b/datadog_api_client/v2/model/incident_user_defined_role_data_request.py new file mode 100644 index 0000000000..d7f23d2f8c --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_data_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_data_attributes_request import IncidentUserDefinedRoleDataAttributesRequest + from datadog_api_client.v2.model.incident_user_defined_role_relationships_request import IncidentUserDefinedRoleRelationshipsRequest + from datadog_api_client.v2.model.incident_user_defined_role_type import IncidentUserDefinedRoleType + +class IncidentUserDefinedRoleDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_data_attributes_request import IncidentUserDefinedRoleDataAttributesRequest + from datadog_api_client.v2.model.incident_user_defined_role_relationships_request import IncidentUserDefinedRoleRelationshipsRequest + from datadog_api_client.v2.model.incident_user_defined_role_type import IncidentUserDefinedRoleType + return { + "attributes": (IncidentUserDefinedRoleDataAttributesRequest,), + "relationships": (IncidentUserDefinedRoleRelationshipsRequest,), + "type": (IncidentUserDefinedRoleType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentUserDefinedRoleDataAttributesRequest, relationships: IncidentUserDefinedRoleRelationshipsRequest, type: IncidentUserDefinedRoleType, **kwargs): + """ + Data for creating an incident user-defined role. + + :param attributes: Attributes for creating an incident user-defined role. + :type attributes: IncidentUserDefinedRoleDataAttributesRequest + + :param relationships: Relationships for creating a user-defined role. + :type relationships: IncidentUserDefinedRoleRelationshipsRequest + + :param type: Incident user-defined role resource type. + :type type: IncidentUserDefinedRoleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/incident_user_defined_role_data_response.py b/datadog_api_client/v2/model/incident_user_defined_role_data_response.py new file mode 100644 index 0000000000..6490c713f8 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_data_attributes_response import IncidentUserDefinedRoleDataAttributesResponse + from datadog_api_client.v2.model.incident_user_defined_role_relationships_response import IncidentUserDefinedRoleRelationshipsResponse + from datadog_api_client.v2.model.incident_user_defined_role_type import IncidentUserDefinedRoleType + +class IncidentUserDefinedRoleDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_data_attributes_response import IncidentUserDefinedRoleDataAttributesResponse + from datadog_api_client.v2.model.incident_user_defined_role_relationships_response import IncidentUserDefinedRoleRelationshipsResponse + from datadog_api_client.v2.model.incident_user_defined_role_type import IncidentUserDefinedRoleType + return { + "attributes": (IncidentUserDefinedRoleDataAttributesResponse,), + "id": (UUID,), + "relationships": (IncidentUserDefinedRoleRelationshipsResponse,), + "type": (IncidentUserDefinedRoleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IncidentUserDefinedRoleDataAttributesResponse, id: UUID, type: IncidentUserDefinedRoleType, relationships: Union[IncidentUserDefinedRoleRelationshipsResponse, UnsetType]=unset, **kwargs): + """ + Data for an incident user-defined role response. + + :param attributes: Attributes of an incident user-defined role. + :type attributes: IncidentUserDefinedRoleDataAttributesResponse + + :param id: The ID of the user-defined role. + :type id: UUID + + :param relationships: Relationships of a user-defined role response. + :type relationships: IncidentUserDefinedRoleRelationshipsResponse, optional + + :param type: Incident user-defined role resource type. + :type type: IncidentUserDefinedRoleType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_user_defined_role_incident_type_relationship.py b/datadog_api_client/v2/model/incident_user_defined_role_incident_type_relationship.py new file mode 100644 index 0000000000..d3f2d2b0da --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_incident_type_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_incident_type_relationship_data import IncidentUserDefinedRoleIncidentTypeRelationshipData + +class IncidentUserDefinedRoleIncidentTypeRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_incident_type_relationship_data import IncidentUserDefinedRoleIncidentTypeRelationshipData + return { + "data": (IncidentUserDefinedRoleIncidentTypeRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentUserDefinedRoleIncidentTypeRelationshipData, **kwargs): + """ + Relationship to an incident type for a user-defined role. + + :param data: Data for the incident type relationship of a user-defined role. + :type data: IncidentUserDefinedRoleIncidentTypeRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_user_defined_role_incident_type_relationship_data.py b/datadog_api_client/v2/model/incident_user_defined_role_incident_type_relationship_data.py new file mode 100644 index 0000000000..f4ec797566 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_incident_type_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentUserDefinedRoleIncidentTypeRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (UUID,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: str, **kwargs): + """ + Data for the incident type relationship of a user-defined role. + + :param id: The ID of the incident type. + :type id: UUID + + :param type: The type of the resource. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_user_defined_role_included_item.py b/datadog_api_client/v2/model/incident_user_defined_role_included_item.py new file mode 100644 index 0000000000..faa94f7caa --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_included_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentUserDefinedRoleIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A single included resource in a user-defined role response. + + :param attributes: Attributes of user object returned by the API. + :type attributes: IncidentUserAttributes, optional + + :param id: ID of the user. + :type id: str, optional + + :param type: Users resource type. + :type type: UsersType, optional + + :param relationships: The incident type's resource relationships. + :type relationships: IncidentTypeRelationships, 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.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + return { + "oneOf": [ + IncidentUserData, + IncidentTypeObject, + ], + } diff --git a/datadog_api_client/v2/model/incident_user_defined_role_patch_data_attributes_request.py b/datadog_api_client/v2/model/incident_user_defined_role_patch_data_attributes_request.py new file mode 100644 index 0000000000..306bb852f6 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_patch_data_attributes_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_policy import IncidentUserDefinedRolePolicy + +class IncidentUserDefinedRolePatchDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_policy import IncidentUserDefinedRolePolicy + return { + "description": (str, none_type), + "name": (str,), + "policy": (IncidentUserDefinedRolePolicy,), + } + attribute_map = { + "description": "description", + "name": "name", + "policy": "policy", + } + + def __init__(self_, description: Union[str, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, policy: Union[IncidentUserDefinedRolePolicy, UnsetType]=unset, **kwargs): + """ + Attributes for updating an incident user-defined role. + + :param description: A description of the user-defined role. + :type description: str, none_type, optional + + :param name: The name of the user-defined role. + :type name: str, optional + + :param policy: Policy configuration for a user-defined role. + :type policy: IncidentUserDefinedRolePolicy, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if policy is not unset: + kwargs["policy"] = policy + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_user_defined_role_patch_data_request.py b/datadog_api_client/v2/model/incident_user_defined_role_patch_data_request.py new file mode 100644 index 0000000000..79c667a34f --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_patch_data_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_patch_data_attributes_request import IncidentUserDefinedRolePatchDataAttributesRequest + from datadog_api_client.v2.model.incident_user_defined_role_type import IncidentUserDefinedRoleType + +class IncidentUserDefinedRolePatchDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_patch_data_attributes_request import IncidentUserDefinedRolePatchDataAttributesRequest + from datadog_api_client.v2.model.incident_user_defined_role_type import IncidentUserDefinedRoleType + return { + "attributes": (IncidentUserDefinedRolePatchDataAttributesRequest,), + "id": (UUID,), + "type": (IncidentUserDefinedRoleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: IncidentUserDefinedRoleType, attributes: Union[IncidentUserDefinedRolePatchDataAttributesRequest, UnsetType]=unset, **kwargs): + """ + Data for updating an incident user-defined role. + + :param attributes: Attributes for updating an incident user-defined role. + :type attributes: IncidentUserDefinedRolePatchDataAttributesRequest, optional + + :param id: The ID of the user-defined role to update. + :type id: UUID + + :param type: Incident user-defined role resource type. + :type type: IncidentUserDefinedRoleType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/incident_user_defined_role_patch_request.py b/datadog_api_client/v2/model/incident_user_defined_role_patch_request.py new file mode 100644 index 0000000000..89b28a5dcc --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_patch_data_request import IncidentUserDefinedRolePatchDataRequest + +class IncidentUserDefinedRolePatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_patch_data_request import IncidentUserDefinedRolePatchDataRequest + return { + "data": (IncidentUserDefinedRolePatchDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentUserDefinedRolePatchDataRequest, **kwargs): + """ + Request for updating an incident user-defined role. + + :param data: Data for updating an incident user-defined role. + :type data: IncidentUserDefinedRolePatchDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_user_defined_role_policy.py b/datadog_api_client/v2/model/incident_user_defined_role_policy.py new file mode 100644 index 0000000000..b2f8e968c9 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_policy.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IncidentUserDefinedRolePolicy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "is_single": (bool,), + } + attribute_map = { + "is_single": "is_single", + } + + def __init__(self_, is_single: bool, **kwargs): + """ + Policy configuration for a user-defined role. + + :param is_single: Whether this role can only be assigned to one responder at a time. + :type is_single: bool + """ + super().__init__(kwargs) + + + self_.is_single = is_single diff --git a/datadog_api_client/v2/model/incident_user_defined_role_relationships_request.py b/datadog_api_client/v2/model/incident_user_defined_role_relationships_request.py new file mode 100644 index 0000000000..538e2d5f9b --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_relationships_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_incident_type_relationship import IncidentUserDefinedRoleIncidentTypeRelationship + +class IncidentUserDefinedRoleRelationshipsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_incident_type_relationship import IncidentUserDefinedRoleIncidentTypeRelationship + return { + "incident_type": (IncidentUserDefinedRoleIncidentTypeRelationship,), + } + attribute_map = { + "incident_type": "incident_type", + } + + def __init__(self_, incident_type: IncidentUserDefinedRoleIncidentTypeRelationship, **kwargs): + """ + Relationships for creating a user-defined role. + + :param incident_type: Relationship to an incident type for a user-defined role. + :type incident_type: IncidentUserDefinedRoleIncidentTypeRelationship + """ + super().__init__(kwargs) + + + self_.incident_type = incident_type diff --git a/datadog_api_client/v2/model/incident_user_defined_role_relationships_response.py b/datadog_api_client/v2/model/incident_user_defined_role_relationships_response.py new file mode 100644 index 0000000000..de60c0873e --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_relationships_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.incident_user_defined_role_incident_type_relationship import IncidentUserDefinedRoleIncidentTypeRelationship + +class IncidentUserDefinedRoleRelationshipsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + from datadog_api_client.v2.model.incident_user_defined_role_incident_type_relationship import IncidentUserDefinedRoleIncidentTypeRelationship + return { + "created_by_user": (RelationshipToUser,), + "incident_type": (IncidentUserDefinedRoleIncidentTypeRelationship,), + "last_modified_by_user": (RelationshipToUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "incident_type": "incident_type", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[RelationshipToUser, UnsetType]=unset, incident_type: Union[IncidentUserDefinedRoleIncidentTypeRelationship, UnsetType]=unset, last_modified_by_user: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + Relationships of a user-defined role response. + + :param created_by_user: Relationship to user. + :type created_by_user: RelationshipToUser, optional + + :param incident_type: Relationship to an incident type for a user-defined role. + :type incident_type: IncidentUserDefinedRoleIncidentTypeRelationship, optional + + :param last_modified_by_user: Relationship to user. + :type last_modified_by_user: RelationshipToUser, 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 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/incident_user_defined_role_request.py b/datadog_api_client/v2/model/incident_user_defined_role_request.py new file mode 100644 index 0000000000..e31ba3e94e --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_data_request import IncidentUserDefinedRoleDataRequest + +class IncidentUserDefinedRoleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_data_request import IncidentUserDefinedRoleDataRequest + return { + "data": (IncidentUserDefinedRoleDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentUserDefinedRoleDataRequest, **kwargs): + """ + Request for creating an incident user-defined role. + + :param data: Data for creating an incident user-defined role. + :type data: IncidentUserDefinedRoleDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_user_defined_role_response.py b/datadog_api_client/v2/model/incident_user_defined_role_response.py new file mode 100644 index 0000000000..fcbb57138b --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_data_response import IncidentUserDefinedRoleDataResponse + from datadog_api_client.v2.model.incident_user_defined_role_included_item import IncidentUserDefinedRoleIncludedItem + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + +class IncidentUserDefinedRoleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_data_response import IncidentUserDefinedRoleDataResponse + from datadog_api_client.v2.model.incident_user_defined_role_included_item import IncidentUserDefinedRoleIncludedItem + return { + "data": (IncidentUserDefinedRoleDataResponse,), + "included": ([IncidentUserDefinedRoleIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: IncidentUserDefinedRoleDataResponse, included: Union[List[Union[IncidentUserDefinedRoleIncludedItem, IncidentUserData, IncidentTypeObject]], UnsetType]=unset, **kwargs): + """ + Response with a single incident user-defined role. + + :param data: Data for an incident user-defined role response. + :type data: IncidentUserDefinedRoleDataResponse + + :param included: Included resources for an incident user-defined role response. + :type included: [IncidentUserDefinedRoleIncludedItem], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incident_user_defined_role_type.py b/datadog_api_client/v2/model/incident_user_defined_role_type.py new file mode 100644 index 0000000000..9fee9e12d4 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_role_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncidentUserDefinedRoleType(ModelSimple): + """ + Incident user-defined role resource type. + + :param value: If omitted defaults to "incident_user_defined_roles". Must be one of ["incident_user_defined_roles"]. + :type value: str + """ + + allowed_values = { + "incident_user_defined_roles", + } + INCIDENT_USER_DEFINED_ROLES: ClassVar["IncidentUserDefinedRoleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncidentUserDefinedRoleType.INCIDENT_USER_DEFINED_ROLES = IncidentUserDefinedRoleType("incident_user_defined_roles") diff --git a/datadog_api_client/v2/model/incident_user_defined_roles_response.py b/datadog_api_client/v2/model/incident_user_defined_roles_response.py new file mode 100644 index 0000000000..bc5cc04246 --- /dev/null +++ b/datadog_api_client/v2/model/incident_user_defined_roles_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_role_data_response import IncidentUserDefinedRoleDataResponse + from datadog_api_client.v2.model.incident_user_defined_role_included_item import IncidentUserDefinedRoleIncludedItem + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject + +class IncidentUserDefinedRolesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_role_data_response import IncidentUserDefinedRoleDataResponse + from datadog_api_client.v2.model.incident_user_defined_role_included_item import IncidentUserDefinedRoleIncludedItem + return { + "data": ([IncidentUserDefinedRoleDataResponse],), + "included": ([IncidentUserDefinedRoleIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[IncidentUserDefinedRoleDataResponse], included: Union[List[Union[IncidentUserDefinedRoleIncludedItem, IncidentUserData, IncidentTypeObject]], UnsetType]=unset, **kwargs): + """ + Response with a list of incident user-defined roles. + + :param data: List of incident user-defined role data objects. + :type data: [IncidentUserDefinedRoleDataResponse] + + :param included: Included resources for an incident user-defined role response. + :type included: [IncidentUserDefinedRoleIncludedItem], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/incidents_response.py b/datadog_api_client/v2/model/incidents_response.py new file mode 100644 index 0000000000..fe34bd532b --- /dev/null +++ b/datadog_api_client/v2/model/incidents_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_response_data import IncidentResponseData + from datadog_api_client.v2.model.incident_response_included_item import IncidentResponseIncludedItem + from datadog_api_client.v2.model.incident_response_meta import IncidentResponseMeta + from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue + from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue + from datadog_api_client.v2.model.incident_user_data import IncidentUserData + from datadog_api_client.v2.model.attachment_data import AttachmentData + +class IncidentsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_response_data import IncidentResponseData + from datadog_api_client.v2.model.incident_response_included_item import IncidentResponseIncludedItem + from datadog_api_client.v2.model.incident_response_meta import IncidentResponseMeta + return { + "data": ([IncidentResponseData],), + "included": ([IncidentResponseIncludedItem],), + "meta": (IncidentResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + read_only_vars = { + "included", + "meta", + } + + def __init__(self_, data: List[IncidentResponseData], included: Union[List[Union[IncidentResponseIncludedItem, IncidentUserData, AttachmentData]], UnsetType]=unset, meta: Union[IncidentResponseMeta, UnsetType]=unset, **kwargs): + """ + Response with a list of incidents. + + :param data: An array of incidents. + :type data: [IncidentResponseData] + + :param included: Included related resources that the user requested. + :type included: [IncidentResponseIncludedItem], optional + + :param meta: The metadata object containing pagination metadata. + :type meta: IncidentResponseMeta, 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/datadog_api_client/v2/model/include_type.py b/datadog_api_client/v2/model/include_type.py new file mode 100644 index 0000000000..ef2c29c1f4 --- /dev/null +++ b/datadog_api_client/v2/model/include_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IncludeType(ModelSimple): + """ + Supported include types. + + :param value: Must be one of ["schema", "raw_schema", "oncall", "incident", "relation"]. + :type value: str + """ + + allowed_values = { + "schema", + "raw_schema", + "oncall", + "incident", + "relation", + } + SCHEMA: ClassVar["IncludeType"] + RAW_SCHEMA: ClassVar["IncludeType"] + ONCALL: ClassVar["IncludeType"] + INCIDENT: ClassVar["IncludeType"] + RELATION: ClassVar["IncludeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IncludeType.SCHEMA = IncludeType("schema") +IncludeType.RAW_SCHEMA = IncludeType("raw_schema") +IncludeType.ONCALL = IncludeType("oncall") +IncludeType.INCIDENT = IncludeType("incident") +IncludeType.RELATION = IncludeType("relation") diff --git a/datadog_api_client/v2/model/input_schema.py b/datadog_api_client/v2/model/input_schema.py new file mode 100644 index 0000000000..829a3ace68 --- /dev/null +++ b/datadog_api_client/v2/model/input_schema.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.input_schema_parameters import InputSchemaParameters + +class InputSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.input_schema_parameters import InputSchemaParameters + return { + "parameters": ([InputSchemaParameters],), + } + attribute_map = { + "parameters": "parameters", + } + + def __init__(self_, parameters: Union[List[InputSchemaParameters], UnsetType]=unset, **kwargs): + """ + A list of input parameters for the workflow. These can be used as dynamic runtime values in your workflow. + + :param parameters: The ``InputSchema`` ``parameters``. + :type parameters: [InputSchemaParameters], optional + """ + if parameters is not unset: + kwargs["parameters"] = parameters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/input_schema_parameters.py b/datadog_api_client/v2/model/input_schema_parameters.py new file mode 100644 index 0000000000..e3119bce6d --- /dev/null +++ b/datadog_api_client/v2/model/input_schema_parameters.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.input_schema_parameters_type import InputSchemaParametersType + +class InputSchemaParameters(ModelNormal): + validations = { + "name": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.input_schema_parameters_type import InputSchemaParametersType + return { + "allow_extra_values": (bool,), + "allowed_values": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "default_value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "description": (str,), + "label": (str,), + "name": (str,), + "type": (InputSchemaParametersType,), + } + attribute_map = { + "allow_extra_values": "allowExtraValues", + "allowed_values": "allowedValues", + "default_value": "defaultValue", + "description": "description", + "label": "label", + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: InputSchemaParametersType, allow_extra_values: Union[bool, UnsetType]=unset, allowed_values: Union[Any, UnsetType]=unset, default_value: Union[Any, UnsetType]=unset, description: Union[str, UnsetType]=unset, label: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``InputSchemaParameters`` object. + + :param allow_extra_values: The ``InputSchemaParameters`` ``allowExtraValues``. + :type allow_extra_values: bool, optional + + :param allowed_values: The ``InputSchemaParameters`` ``allowedValues``. + :type allowed_values: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param default_value: The ``InputSchemaParameters`` ``defaultValue``. + :type default_value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param description: The ``InputSchemaParameters`` ``description``. + :type description: str, optional + + :param label: The ``InputSchemaParameters`` ``label``. + :type label: str, optional + + :param name: The ``InputSchemaParameters`` ``name``. + :type name: str + + :param type: The definition of ``InputSchemaParametersType`` object. + :type type: InputSchemaParametersType + """ + if allow_extra_values is not unset: + kwargs["allow_extra_values"] = allow_extra_values + if allowed_values is not unset: + kwargs["allowed_values"] = allowed_values + if default_value is not unset: + kwargs["default_value"] = default_value + if description is not unset: + kwargs["description"] = description + if label is not unset: + kwargs["label"] = label + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/input_schema_parameters_type.py b/datadog_api_client/v2/model/input_schema_parameters_type.py new file mode 100644 index 0000000000..12d5be95bc --- /dev/null +++ b/datadog_api_client/v2/model/input_schema_parameters_type.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class InputSchemaParametersType(ModelSimple): + """ + The definition of `InputSchemaParametersType` object. + + :param value: Must be one of ["STRING", "NUMBER", "BOOLEAN", "OBJECT", "ARRAY_STRING", "ARRAY_NUMBER", "ARRAY_BOOLEAN", "ARRAY_OBJECT"]. + :type value: str + """ + + allowed_values = { + "STRING", + "NUMBER", + "BOOLEAN", + "OBJECT", + "ARRAY_STRING", + "ARRAY_NUMBER", + "ARRAY_BOOLEAN", + "ARRAY_OBJECT", + } + STRING: ClassVar["InputSchemaParametersType"] + NUMBER: ClassVar["InputSchemaParametersType"] + BOOLEAN: ClassVar["InputSchemaParametersType"] + OBJECT: ClassVar["InputSchemaParametersType"] + ARRAY_STRING: ClassVar["InputSchemaParametersType"] + ARRAY_NUMBER: ClassVar["InputSchemaParametersType"] + ARRAY_BOOLEAN: ClassVar["InputSchemaParametersType"] + ARRAY_OBJECT: ClassVar["InputSchemaParametersType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +InputSchemaParametersType.STRING = InputSchemaParametersType("STRING") +InputSchemaParametersType.NUMBER = InputSchemaParametersType("NUMBER") +InputSchemaParametersType.BOOLEAN = InputSchemaParametersType("BOOLEAN") +InputSchemaParametersType.OBJECT = InputSchemaParametersType("OBJECT") +InputSchemaParametersType.ARRAY_STRING = InputSchemaParametersType("ARRAY_STRING") +InputSchemaParametersType.ARRAY_NUMBER = InputSchemaParametersType("ARRAY_NUMBER") +InputSchemaParametersType.ARRAY_BOOLEAN = InputSchemaParametersType("ARRAY_BOOLEAN") +InputSchemaParametersType.ARRAY_OBJECT = InputSchemaParametersType("ARRAY_OBJECT") diff --git a/datadog_api_client/v2/model/intake_payload_accepted.py b/datadog_api_client/v2/model/intake_payload_accepted.py new file mode 100644 index 0000000000..bf681392ff --- /dev/null +++ b/datadog_api_client/v2/model/intake_payload_accepted.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntakePayloadAccepted(ModelNormal): + @cached_property + def openapi_types(_): + return { + "errors": ([str],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: Union[List[str], UnsetType]=unset, **kwargs): + """ + The payload accepted for intake. + + :param errors: A list of errors. + :type errors: [str], optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration.py b/datadog_api_client/v2/model/integration.py new file mode 100644 index 0000000000..477c3912f1 --- /dev/null +++ b/datadog_api_client/v2/model/integration.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_attributes import IntegrationAttributes + from datadog_api_client.v2.model.integration_links import IntegrationLinks + from datadog_api_client.v2.model.integration_type import IntegrationType + +class Integration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_attributes import IntegrationAttributes + from datadog_api_client.v2.model.integration_links import IntegrationLinks + from datadog_api_client.v2.model.integration_type import IntegrationType + return { + "attributes": (IntegrationAttributes,), + "id": (str,), + "links": (IntegrationLinks,), + "type": (IntegrationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "links": "links", + "type": "type", + } + + def __init__(self_, attributes: IntegrationAttributes, id: str, type: IntegrationType, links: Union[IntegrationLinks, UnsetType]=unset, **kwargs): + """ + Integration resource object. + + :param attributes: Attributes for an integration. + :type attributes: IntegrationAttributes + + :param id: The unique identifier of the integration. + :type id: str + + :param links: Links for the integration resource. + :type links: IntegrationLinks, optional + + :param type: Integration resource type. + :type type: IntegrationType + """ + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/integration_attributes.py b/datadog_api_client/v2/model/integration_attributes.py new file mode 100644 index 0000000000..da9c82c75a --- /dev/null +++ b/datadog_api_client/v2/model/integration_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "categories": ([str],), + "description": (str,), + "installed": (bool,), + "title": (str,), + } + attribute_map = { + "categories": "categories", + "description": "description", + "installed": "installed", + "title": "title", + } + + def __init__(self_, categories: List[str], description: str, installed: bool, title: str, **kwargs): + """ + Attributes for an integration. + + :param categories: List of categories associated with the integration. + :type categories: [str] + + :param description: A description of the integration. + :type description: str + + :param installed: Whether the integration is installed. + :type installed: bool + + :param title: The name of the integration. + :type title: str + """ + super().__init__(kwargs) + + + self_.categories = categories + self_.description = description + self_.installed = installed + self_.title = title diff --git a/datadog_api_client/v2/model/integration_incident.py b/datadog_api_client/v2/model/integration_incident.py new file mode 100644 index 0000000000..6cedbb2a3e --- /dev/null +++ b/datadog_api_client/v2/model/integration_incident.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_incident_field_mappings_items import IntegrationIncidentFieldMappingsItems + from datadog_api_client.v2.model.integration_incident_severity_config import IntegrationIncidentSeverityConfig + +class IntegrationIncident(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_incident_field_mappings_items import IntegrationIncidentFieldMappingsItems + from datadog_api_client.v2.model.integration_incident_severity_config import IntegrationIncidentSeverityConfig + return { + "auto_escalation_query": (str,), + "default_incident_commander": (str,), + "enabled": (bool,), + "field_mappings": ([IntegrationIncidentFieldMappingsItems],), + "incident_type": (str,), + "severity_config": (IntegrationIncidentSeverityConfig,), + } + attribute_map = { + "auto_escalation_query": "auto_escalation_query", + "default_incident_commander": "default_incident_commander", + "enabled": "enabled", + "field_mappings": "field_mappings", + "incident_type": "incident_type", + "severity_config": "severity_config", + } + + def __init__(self_, auto_escalation_query: Union[str, UnsetType]=unset, default_incident_commander: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, field_mappings: Union[List[IntegrationIncidentFieldMappingsItems], UnsetType]=unset, incident_type: Union[str, UnsetType]=unset, severity_config: Union[IntegrationIncidentSeverityConfig, UnsetType]=unset, **kwargs): + """ + Incident integration settings. + + :param auto_escalation_query: Query for auto-escalation. + :type auto_escalation_query: str, optional + + :param default_incident_commander: Default incident commander. + :type default_incident_commander: str, optional + + :param enabled: Whether incident integration is enabled. + :type enabled: bool, optional + + :param field_mappings: List of mappings between incident fields and case fields. + :type field_mappings: [IntegrationIncidentFieldMappingsItems], optional + + :param incident_type: Incident type. + :type incident_type: str, optional + + :param severity_config: Severity configuration for mapping incident priorities to case priorities. + :type severity_config: IntegrationIncidentSeverityConfig, optional + """ + if auto_escalation_query is not unset: + kwargs["auto_escalation_query"] = auto_escalation_query + if default_incident_commander is not unset: + kwargs["default_incident_commander"] = default_incident_commander + if enabled is not unset: + kwargs["enabled"] = enabled + if field_mappings is not unset: + kwargs["field_mappings"] = field_mappings + if incident_type is not unset: + kwargs["incident_type"] = incident_type + if severity_config is not unset: + kwargs["severity_config"] = severity_config + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_incident_field_mappings_items.py b/datadog_api_client/v2/model/integration_incident_field_mappings_items.py new file mode 100644 index 0000000000..0c7b097dbb --- /dev/null +++ b/datadog_api_client/v2/model/integration_incident_field_mappings_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationIncidentFieldMappingsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "case_field": (str,), + "incident_user_defined_field_id": (str,), + } + attribute_map = { + "case_field": "case_field", + "incident_user_defined_field_id": "incident_user_defined_field_id", + } + + def __init__(self_, case_field: Union[str, UnsetType]=unset, incident_user_defined_field_id: Union[str, UnsetType]=unset, **kwargs): + """ + Mapping between an incident user-defined field and a case field. + + :param case_field: The case field to map the incident field value to. + :type case_field: str, optional + + :param incident_user_defined_field_id: The identifier of the incident user-defined field to map from. + :type incident_user_defined_field_id: str, optional + """ + if case_field is not unset: + kwargs["case_field"] = case_field + if incident_user_defined_field_id is not unset: + kwargs["incident_user_defined_field_id"] = incident_user_defined_field_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_incident_severity_config.py b/datadog_api_client/v2/model/integration_incident_severity_config.py new file mode 100644 index 0000000000..ec10959ae0 --- /dev/null +++ b/datadog_api_client/v2/model/integration_incident_severity_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationIncidentSeverityConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "priority_mapping": ({str: (str,)},), + } + attribute_map = { + "priority_mapping": "priority_mapping", + } + + def __init__(self_, priority_mapping: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + Severity configuration for mapping incident priorities to case priorities. + + :param priority_mapping: Mapping of incident severity values to case priority values. + :type priority_mapping: {str: (str,)}, optional + """ + if priority_mapping is not unset: + kwargs["priority_mapping"] = priority_mapping + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_jira.py b/datadog_api_client/v2/model/integration_jira.py new file mode 100644 index 0000000000..62f615b8bb --- /dev/null +++ b/datadog_api_client/v2/model/integration_jira.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_jira_auto_creation import IntegrationJiraAutoCreation + from datadog_api_client.v2.model.integration_jira_metadata import IntegrationJiraMetadata + from datadog_api_client.v2.model.integration_jira_sync import IntegrationJiraSync + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class IntegrationJira(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_jira_auto_creation import IntegrationJiraAutoCreation + from datadog_api_client.v2.model.integration_jira_metadata import IntegrationJiraMetadata + from datadog_api_client.v2.model.integration_jira_sync import IntegrationJiraSync + return { + "auto_creation": (IntegrationJiraAutoCreation,), + "enabled": (bool,), + "metadata": (IntegrationJiraMetadata,), + "sync": (IntegrationJiraSync,), + } + attribute_map = { + "auto_creation": "auto_creation", + "enabled": "enabled", + "metadata": "metadata", + "sync": "sync", + } + + def __init__(self_, auto_creation: Union[IntegrationJiraAutoCreation, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, metadata: Union[IntegrationJiraMetadata, UnsetType]=unset, sync: Union[IntegrationJiraSync, UnsetType]=unset, **kwargs): + """ + Jira integration settings. + + :param auto_creation: Auto-creation settings for Jira issues from cases. + :type auto_creation: IntegrationJiraAutoCreation, optional + + :param enabled: Whether Jira integration is enabled. + :type enabled: bool, optional + + :param metadata: Metadata for connecting a case management project to a Jira project. + :type metadata: IntegrationJiraMetadata, optional + + :param sync: Synchronization configuration for Jira integration. + :type sync: IntegrationJiraSync, optional + """ + if auto_creation is not unset: + kwargs["auto_creation"] = auto_creation + if enabled is not unset: + kwargs["enabled"] = enabled + if metadata is not unset: + kwargs["metadata"] = metadata + if sync is not unset: + kwargs["sync"] = sync + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_jira_auto_creation.py b/datadog_api_client/v2/model/integration_jira_auto_creation.py new file mode 100644 index 0000000000..314b7e8702 --- /dev/null +++ b/datadog_api_client/v2/model/integration_jira_auto_creation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationJiraAutoCreation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + } + attribute_map = { + "enabled": "enabled", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Auto-creation settings for Jira issues from cases. + + :param enabled: Whether automatic Jira issue creation is enabled. + :type enabled: bool, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_jira_metadata.py b/datadog_api_client/v2/model/integration_jira_metadata.py new file mode 100644 index 0000000000..8b96df2238 --- /dev/null +++ b/datadog_api_client/v2/model/integration_jira_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationJiraMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "issue_type_id": (str,), + "project_id": (str,), + } + attribute_map = { + "account_id": "account_id", + "issue_type_id": "issue_type_id", + "project_id": "project_id", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, issue_type_id: Union[str, UnsetType]=unset, project_id: Union[str, UnsetType]=unset, **kwargs): + """ + Metadata for connecting a case management project to a Jira project. + + :param account_id: The Jira account identifier. + :type account_id: str, optional + + :param issue_type_id: The Jira issue type identifier to use when creating issues. + :type issue_type_id: str, optional + + :param project_id: The Jira project identifier to associate with this case project. + :type project_id: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if issue_type_id is not unset: + kwargs["issue_type_id"] = issue_type_id + if project_id is not unset: + kwargs["project_id"] = project_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_jira_sync.py b/datadog_api_client/v2/model/integration_jira_sync.py new file mode 100644 index 0000000000..621009989d --- /dev/null +++ b/datadog_api_client/v2/model/integration_jira_sync.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_jira_sync_properties import IntegrationJiraSyncProperties + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class IntegrationJiraSync(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_jira_sync_properties import IntegrationJiraSyncProperties + return { + "enabled": (bool,), + "properties": (IntegrationJiraSyncProperties,), + } + attribute_map = { + "enabled": "enabled", + "properties": "properties", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, properties: Union[IntegrationJiraSyncProperties, UnsetType]=unset, **kwargs): + """ + Synchronization configuration for Jira integration. + + :param enabled: Whether Jira field synchronization is enabled. + :type enabled: bool, optional + + :param properties: Field synchronization properties for Jira integration. + :type properties: IntegrationJiraSyncProperties, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if properties is not unset: + kwargs["properties"] = properties + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_jira_sync_due_date.py b/datadog_api_client/v2/model/integration_jira_sync_due_date.py new file mode 100644 index 0000000000..6fe6d04d9f --- /dev/null +++ b/datadog_api_client/v2/model/integration_jira_sync_due_date.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationJiraSyncDueDate(ModelNormal): + @cached_property + def openapi_types(_): + return { + "jira_field_id": (str,), + "sync_type": (str,), + } + attribute_map = { + "jira_field_id": "jira_field_id", + "sync_type": "sync_type", + } + + def __init__(self_, jira_field_id: Union[str, UnsetType]=unset, sync_type: Union[str, UnsetType]=unset, **kwargs): + """ + Due date synchronization configuration for Jira integration. + + :param jira_field_id: The Jira field identifier used to store the due date. + :type jira_field_id: str, optional + + :param sync_type: The type of synchronization to apply for the due date field. + :type sync_type: str, optional + """ + if jira_field_id is not unset: + kwargs["jira_field_id"] = jira_field_id + if sync_type is not unset: + kwargs["sync_type"] = sync_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_jira_sync_properties.py b/datadog_api_client/v2/model/integration_jira_sync_properties.py new file mode 100644 index 0000000000..05f452cebb --- /dev/null +++ b/datadog_api_client/v2/model/integration_jira_sync_properties.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sync_property import SyncProperty + from datadog_api_client.v2.model.integration_jira_sync_properties_custom_fields_additional_properties import IntegrationJiraSyncPropertiesCustomFieldsAdditionalProperties + from datadog_api_client.v2.model.integration_jira_sync_due_date import IntegrationJiraSyncDueDate + from datadog_api_client.v2.model.sync_property_with_mapping import SyncPropertyWithMapping + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class IntegrationJiraSyncProperties(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sync_property import SyncProperty + from datadog_api_client.v2.model.integration_jira_sync_properties_custom_fields_additional_properties import IntegrationJiraSyncPropertiesCustomFieldsAdditionalProperties + from datadog_api_client.v2.model.integration_jira_sync_due_date import IntegrationJiraSyncDueDate + from datadog_api_client.v2.model.sync_property_with_mapping import SyncPropertyWithMapping + return { + "assignee": (SyncProperty,), + "comments": (SyncProperty,), + "custom_fields": ({str: (IntegrationJiraSyncPropertiesCustomFieldsAdditionalProperties,)},), + "description": (SyncProperty,), + "due_date": (IntegrationJiraSyncDueDate,), + "priority": (SyncPropertyWithMapping,), + "status": (SyncPropertyWithMapping,), + "title": (SyncProperty,), + } + attribute_map = { + "assignee": "assignee", + "comments": "comments", + "custom_fields": "custom_fields", + "description": "description", + "due_date": "due_date", + "priority": "priority", + "status": "status", + "title": "title", + } + + def __init__(self_, assignee: Union[SyncProperty, UnsetType]=unset, comments: Union[SyncProperty, UnsetType]=unset, custom_fields: Union[Dict[str, IntegrationJiraSyncPropertiesCustomFieldsAdditionalProperties], UnsetType]=unset, description: Union[SyncProperty, UnsetType]=unset, due_date: Union[IntegrationJiraSyncDueDate, UnsetType]=unset, priority: Union[SyncPropertyWithMapping, UnsetType]=unset, status: Union[SyncPropertyWithMapping, UnsetType]=unset, title: Union[SyncProperty, UnsetType]=unset, **kwargs): + """ + Field synchronization properties for Jira integration. + + :param assignee: Sync property configuration. + :type assignee: SyncProperty, optional + + :param comments: Sync property configuration. + :type comments: SyncProperty, optional + + :param custom_fields: Map of custom field identifiers to their sync configurations. + :type custom_fields: {str: (IntegrationJiraSyncPropertiesCustomFieldsAdditionalProperties,)}, optional + + :param description: Sync property configuration. + :type description: SyncProperty, optional + + :param due_date: Due date synchronization configuration for Jira integration. + :type due_date: IntegrationJiraSyncDueDate, optional + + :param priority: Sync property with mapping configuration. + :type priority: SyncPropertyWithMapping, optional + + :param status: Sync property with mapping configuration. + :type status: SyncPropertyWithMapping, optional + + :param title: Sync property configuration. + :type title: SyncProperty, optional + """ + if assignee is not unset: + kwargs["assignee"] = assignee + if comments is not unset: + kwargs["comments"] = comments + if custom_fields is not unset: + kwargs["custom_fields"] = custom_fields + if description is not unset: + kwargs["description"] = description + if due_date is not unset: + kwargs["due_date"] = due_date + if priority is not unset: + kwargs["priority"] = priority + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_jira_sync_properties_custom_fields_additional_properties.py b/datadog_api_client/v2/model/integration_jira_sync_properties_custom_fields_additional_properties.py new file mode 100644 index 0000000000..6d134b94b3 --- /dev/null +++ b/datadog_api_client/v2/model/integration_jira_sync_properties_custom_fields_additional_properties.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.any_value import AnyValue + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class IntegrationJiraSyncPropertiesCustomFieldsAdditionalProperties(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.any_value import AnyValue + return { + "sync_type": (str,), + "value": (AnyValue,), + } + attribute_map = { + "sync_type": "sync_type", + "value": "value", + } + + def __init__(self_, sync_type: Union[str, UnsetType]=unset, value: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type, UnsetType]=unset, **kwargs): + """ + Synchronization configuration for a Jira custom field. + + :param sync_type: The type of synchronization to apply for this custom field. + :type sync_type: str, optional + + :param value: Represents any valid JSON value. + :type value: AnyValue, none_type, optional + """ + if sync_type is not unset: + kwargs["sync_type"] = sync_type + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_links.py b/datadog_api_client/v2/model/integration_links.py new file mode 100644 index 0000000000..75a45d2076 --- /dev/null +++ b/datadog_api_client/v2/model/integration_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "self": (str,), + } + attribute_map = { + "self": "self", + } + + def __init__(self_, self: Union[str, UnsetType]=unset, **kwargs): + """ + Links for the integration resource. + + :param self: Link to the integration resource. + :type self: str, optional + """ + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_monitor.py b/datadog_api_client/v2/model/integration_monitor.py new file mode 100644 index 0000000000..462d383d03 --- /dev/null +++ b/datadog_api_client/v2/model/integration_monitor.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationMonitor(ModelNormal): + @cached_property + def openapi_types(_): + return { + "auto_resolve_enabled": (bool,), + "case_type_id": (str,), + "enabled": (bool,), + "handle": (str,), + } + attribute_map = { + "auto_resolve_enabled": "auto_resolve_enabled", + "case_type_id": "case_type_id", + "enabled": "enabled", + "handle": "handle", + } + + def __init__(self_, auto_resolve_enabled: Union[bool, UnsetType]=unset, case_type_id: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, handle: Union[str, UnsetType]=unset, **kwargs): + """ + Monitor integration settings. + + :param auto_resolve_enabled: Whether auto-resolve is enabled. + :type auto_resolve_enabled: bool, optional + + :param case_type_id: Case type ID for monitor integration. + :type case_type_id: str, optional + + :param enabled: Whether monitor integration is enabled. + :type enabled: bool, optional + + :param handle: Monitor handle. + :type handle: str, optional + """ + if auto_resolve_enabled is not unset: + kwargs["auto_resolve_enabled"] = auto_resolve_enabled + if case_type_id is not unset: + kwargs["case_type_id"] = case_type_id + if enabled is not unset: + kwargs["enabled"] = enabled + if handle is not unset: + kwargs["handle"] = handle + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_on_call.py b/datadog_api_client/v2/model/integration_on_call.py new file mode 100644 index 0000000000..0142f2e998 --- /dev/null +++ b/datadog_api_client/v2/model/integration_on_call.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_on_call_escalation_queries_items import IntegrationOnCallEscalationQueriesItems + +class IntegrationOnCall(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_on_call_escalation_queries_items import IntegrationOnCallEscalationQueriesItems + return { + "auto_assign_on_call": (bool,), + "enabled": (bool,), + "escalation_queries": ([IntegrationOnCallEscalationQueriesItems],), + } + attribute_map = { + "auto_assign_on_call": "auto_assign_on_call", + "enabled": "enabled", + "escalation_queries": "escalation_queries", + } + + def __init__(self_, auto_assign_on_call: Union[bool, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, escalation_queries: Union[List[IntegrationOnCallEscalationQueriesItems], UnsetType]=unset, **kwargs): + """ + On-Call integration settings. + + :param auto_assign_on_call: Whether to auto-assign on-call. + :type auto_assign_on_call: bool, optional + + :param enabled: Whether On-Call integration is enabled. + :type enabled: bool, optional + + :param escalation_queries: List of escalation queries for routing cases to on-call responders. + :type escalation_queries: [IntegrationOnCallEscalationQueriesItems], optional + """ + if auto_assign_on_call is not unset: + kwargs["auto_assign_on_call"] = auto_assign_on_call + if enabled is not unset: + kwargs["enabled"] = enabled + if escalation_queries is not unset: + kwargs["escalation_queries"] = escalation_queries + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_on_call_escalation_queries_items.py b/datadog_api_client/v2/model/integration_on_call_escalation_queries_items.py new file mode 100644 index 0000000000..3b5739a919 --- /dev/null +++ b/datadog_api_client/v2/model/integration_on_call_escalation_queries_items.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_on_call_escalation_queries_items_target import IntegrationOnCallEscalationQueriesItemsTarget + +class IntegrationOnCallEscalationQueriesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_on_call_escalation_queries_items_target import IntegrationOnCallEscalationQueriesItemsTarget + return { + "enabled": (bool,), + "id": (str,), + "query": (str,), + "target": (IntegrationOnCallEscalationQueriesItemsTarget,), + } + attribute_map = { + "enabled": "enabled", + "id": "id", + "query": "query", + "target": "target", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, id: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, target: Union[IntegrationOnCallEscalationQueriesItemsTarget, UnsetType]=unset, **kwargs): + """ + An On-Call escalation query entry used to route cases to on-call responders. + + :param enabled: Whether this escalation query is enabled. + :type enabled: bool, optional + + :param id: Unique identifier of the escalation query. + :type id: str, optional + + :param query: The query used to match cases for escalation. + :type query: str, optional + + :param target: The target recipient for an On-Call escalation query. + :type target: IntegrationOnCallEscalationQueriesItemsTarget, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if id is not unset: + kwargs["id"] = id + if query is not unset: + kwargs["query"] = query + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_on_call_escalation_queries_items_target.py b/datadog_api_client/v2/model/integration_on_call_escalation_queries_items_target.py new file mode 100644 index 0000000000..ea56055684 --- /dev/null +++ b/datadog_api_client/v2/model/integration_on_call_escalation_queries_items_target.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationOnCallEscalationQueriesItemsTarget(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dynamic_team_paging": (bool,), + "team_id": (str,), + "user_id": (str,), + } + attribute_map = { + "dynamic_team_paging": "dynamic_team_paging", + "team_id": "team_id", + "user_id": "user_id", + } + + def __init__(self_, dynamic_team_paging: Union[bool, UnsetType]=unset, team_id: Union[str, UnsetType]=unset, user_id: Union[str, UnsetType]=unset, **kwargs): + """ + The target recipient for an On-Call escalation query. + + :param dynamic_team_paging: Whether to use dynamic team paging for escalation. + :type dynamic_team_paging: bool, optional + + :param team_id: The identifier of the team to escalate to. + :type team_id: str, optional + + :param user_id: The identifier of the user to escalate to. + :type user_id: str, optional + """ + if dynamic_team_paging is not unset: + kwargs["dynamic_team_paging"] = dynamic_team_paging + if team_id is not unset: + kwargs["team_id"] = team_id + if user_id is not unset: + kwargs["user_id"] = user_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_service_now.py b/datadog_api_client/v2/model/integration_service_now.py new file mode 100644 index 0000000000..65b44c0567 --- /dev/null +++ b/datadog_api_client/v2/model/integration_service_now.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_service_now_auto_creation import IntegrationServiceNowAutoCreation + from datadog_api_client.v2.model.integration_service_now_sync_config import IntegrationServiceNowSyncConfig + +class IntegrationServiceNow(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_service_now_auto_creation import IntegrationServiceNowAutoCreation + from datadog_api_client.v2.model.integration_service_now_sync_config import IntegrationServiceNowSyncConfig + return { + "assignment_group": (str,), + "auto_creation": (IntegrationServiceNowAutoCreation,), + "enabled": (bool,), + "instance_name": (str,), + "sync_config": (IntegrationServiceNowSyncConfig,), + } + attribute_map = { + "assignment_group": "assignment_group", + "auto_creation": "auto_creation", + "enabled": "enabled", + "instance_name": "instance_name", + "sync_config": "sync_config", + } + + def __init__(self_, assignment_group: Union[str, UnsetType]=unset, auto_creation: Union[IntegrationServiceNowAutoCreation, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, instance_name: Union[str, UnsetType]=unset, sync_config: Union[IntegrationServiceNowSyncConfig, UnsetType]=unset, **kwargs): + """ + ServiceNow integration settings. + + :param assignment_group: Assignment group. + :type assignment_group: str, optional + + :param auto_creation: Auto-creation settings for ServiceNow incidents from cases. + :type auto_creation: IntegrationServiceNowAutoCreation, optional + + :param enabled: Whether ServiceNow integration is enabled. + :type enabled: bool, optional + + :param instance_name: ServiceNow instance name. + :type instance_name: str, optional + + :param sync_config: Synchronization configuration for ServiceNow integration. + :type sync_config: IntegrationServiceNowSyncConfig, optional + """ + if assignment_group is not unset: + kwargs["assignment_group"] = assignment_group + if auto_creation is not unset: + kwargs["auto_creation"] = auto_creation + if enabled is not unset: + kwargs["enabled"] = enabled + if instance_name is not unset: + kwargs["instance_name"] = instance_name + if sync_config is not unset: + kwargs["sync_config"] = sync_config + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_service_now_auto_creation.py b/datadog_api_client/v2/model/integration_service_now_auto_creation.py new file mode 100644 index 0000000000..81cd0779ff --- /dev/null +++ b/datadog_api_client/v2/model/integration_service_now_auto_creation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationServiceNowAutoCreation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + } + attribute_map = { + "enabled": "enabled", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Auto-creation settings for ServiceNow incidents from cases. + + :param enabled: Whether automatic ServiceNow incident creation is enabled. + :type enabled: bool, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_service_now_sync_config.py b/datadog_api_client/v2/model/integration_service_now_sync_config.py new file mode 100644 index 0000000000..8448171747 --- /dev/null +++ b/datadog_api_client/v2/model/integration_service_now_sync_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration_service_now_sync_config139772721534496 import IntegrationServiceNowSyncConfig139772721534496 + +class IntegrationServiceNowSyncConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration_service_now_sync_config139772721534496 import IntegrationServiceNowSyncConfig139772721534496 + return { + "enabled": (bool,), + "properties": (IntegrationServiceNowSyncConfig139772721534496,), + } + attribute_map = { + "enabled": "enabled", + "properties": "properties", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, properties: Union[IntegrationServiceNowSyncConfig139772721534496, UnsetType]=unset, **kwargs): + """ + Synchronization configuration for ServiceNow integration. + + :param enabled: Whether ServiceNow synchronization is enabled. + :type enabled: bool, optional + + :param properties: Field-level synchronization properties for ServiceNow integration. + :type properties: IntegrationServiceNowSyncConfig139772721534496, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if properties is not unset: + kwargs["properties"] = properties + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_service_now_sync_config139772721534496.py b/datadog_api_client/v2/model/integration_service_now_sync_config139772721534496.py new file mode 100644 index 0000000000..5c2e887193 --- /dev/null +++ b/datadog_api_client/v2/model/integration_service_now_sync_config139772721534496.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sync_property import SyncProperty + from datadog_api_client.v2.model.integration_service_now_sync_config_priority import IntegrationServiceNowSyncConfigPriority + from datadog_api_client.v2.model.sync_property_with_mapping import SyncPropertyWithMapping + +class IntegrationServiceNowSyncConfig139772721534496(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sync_property import SyncProperty + from datadog_api_client.v2.model.integration_service_now_sync_config_priority import IntegrationServiceNowSyncConfigPriority + from datadog_api_client.v2.model.sync_property_with_mapping import SyncPropertyWithMapping + return { + "comments": (SyncProperty,), + "priority": (IntegrationServiceNowSyncConfigPriority,), + "status": (SyncPropertyWithMapping,), + } + attribute_map = { + "comments": "comments", + "priority": "priority", + "status": "status", + } + + def __init__(self_, comments: Union[SyncProperty, UnsetType]=unset, priority: Union[IntegrationServiceNowSyncConfigPriority, UnsetType]=unset, status: Union[SyncPropertyWithMapping, UnsetType]=unset, **kwargs): + """ + Field-level synchronization properties for ServiceNow integration. + + :param comments: Sync property configuration. + :type comments: SyncProperty, optional + + :param priority: Priority synchronization configuration for ServiceNow integration. + :type priority: IntegrationServiceNowSyncConfigPriority, optional + + :param status: Sync property with mapping configuration. + :type status: SyncPropertyWithMapping, optional + """ + if comments is not unset: + kwargs["comments"] = comments + if priority is not unset: + kwargs["priority"] = priority + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_service_now_sync_config_priority.py b/datadog_api_client/v2/model/integration_service_now_sync_config_priority.py new file mode 100644 index 0000000000..deb291c96a --- /dev/null +++ b/datadog_api_client/v2/model/integration_service_now_sync_config_priority.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IntegrationServiceNowSyncConfigPriority(ModelNormal): + @cached_property + def openapi_types(_): + return { + "impact_mapping": ({str: (str,)},), + "sync_type": (str,), + "urgency_mapping": ({str: (str,)},), + } + attribute_map = { + "impact_mapping": "impact_mapping", + "sync_type": "sync_type", + "urgency_mapping": "urgency_mapping", + } + + def __init__(self_, impact_mapping: Union[Dict[str, str], UnsetType]=unset, sync_type: Union[str, UnsetType]=unset, urgency_mapping: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + Priority synchronization configuration for ServiceNow integration. + + :param impact_mapping: Mapping of case priority values to ServiceNow impact values. + :type impact_mapping: {str: (str,)}, optional + + :param sync_type: The type of synchronization to apply for priority. + :type sync_type: str, optional + + :param urgency_mapping: Mapping of case priority values to ServiceNow urgency values. + :type urgency_mapping: {str: (str,)}, optional + """ + if impact_mapping is not unset: + kwargs["impact_mapping"] = impact_mapping + if sync_type is not unset: + kwargs["sync_type"] = sync_type + if urgency_mapping is not unset: + kwargs["urgency_mapping"] = urgency_mapping + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/integration_type.py b/datadog_api_client/v2/model/integration_type.py new file mode 100644 index 0000000000..8cf1c1b2a1 --- /dev/null +++ b/datadog_api_client/v2/model/integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IntegrationType(ModelSimple): + """ + Integration resource type. + + :param value: If omitted defaults to "integration". Must be one of ["integration"]. + :type value: str + """ + + allowed_values = { + "integration", + } + INTEGRATION: ClassVar["IntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IntegrationType.INTEGRATION = IntegrationType("integration") diff --git a/datadog_api_client/v2/model/interface_attributes.py b/datadog_api_client/v2/model/interface_attributes.py new file mode 100644 index 0000000000..689aaf6cff --- /dev/null +++ b/datadog_api_client/v2/model/interface_attributes.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.interface_attributes_status import InterfaceAttributesStatus + +class InterfaceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.interface_attributes_status import InterfaceAttributesStatus + return { + "alias": (str,), + "description": (str,), + "index": (int,), + "ip_addresses": ([str],), + "mac_address": (str,), + "name": (str,), + "status": (InterfaceAttributesStatus,), + } + attribute_map = { + "alias": "alias", + "description": "description", + "index": "index", + "ip_addresses": "ip_addresses", + "mac_address": "mac_address", + "name": "name", + "status": "status", + } + + def __init__(self_, alias: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, index: Union[int, UnsetType]=unset, ip_addresses: Union[List[str], UnsetType]=unset, mac_address: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, status: Union[InterfaceAttributesStatus, UnsetType]=unset, **kwargs): + """ + The interface attributes + + :param alias: The interface alias + :type alias: str, optional + + :param description: The interface description + :type description: str, optional + + :param index: The interface index + :type index: int, optional + + :param ip_addresses: The interface IP addresses + :type ip_addresses: [str], optional + + :param mac_address: The interface MAC address + :type mac_address: str, optional + + :param name: The interface name + :type name: str, optional + + :param status: The interface status + :type status: InterfaceAttributesStatus, optional + """ + if alias is not unset: + kwargs["alias"] = alias + if description is not unset: + kwargs["description"] = description + if index is not unset: + kwargs["index"] = index + if ip_addresses is not unset: + kwargs["ip_addresses"] = ip_addresses + if mac_address is not unset: + kwargs["mac_address"] = mac_address + if name is not unset: + kwargs["name"] = name + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/interface_attributes_status.py b/datadog_api_client/v2/model/interface_attributes_status.py new file mode 100644 index 0000000000..2cb44903b1 --- /dev/null +++ b/datadog_api_client/v2/model/interface_attributes_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class InterfaceAttributesStatus(ModelSimple): + """ + The interface status + + :param value: Must be one of ["up", "down", "warning", "off"]. + :type value: str + """ + + allowed_values = { + "up", + "down", + "warning", + "off", + } + UP: ClassVar["InterfaceAttributesStatus"] + DOWN: ClassVar["InterfaceAttributesStatus"] + WARNING: ClassVar["InterfaceAttributesStatus"] + OFF: ClassVar["InterfaceAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +InterfaceAttributesStatus.UP = InterfaceAttributesStatus("up") +InterfaceAttributesStatus.DOWN = InterfaceAttributesStatus("down") +InterfaceAttributesStatus.WARNING = InterfaceAttributesStatus("warning") +InterfaceAttributesStatus.OFF = InterfaceAttributesStatus("off") diff --git a/datadog_api_client/v2/model/investigation_conclusion.py b/datadog_api_client/v2/model/investigation_conclusion.py new file mode 100644 index 0000000000..dce84df1e6 --- /dev/null +++ b/datadog_api_client/v2/model/investigation_conclusion.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class InvestigationConclusion(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "summary": (str,), + "title": (str,), + } + attribute_map = { + "description": "description", + "summary": "summary", + "title": "title", + } + + def __init__(self_, description: str, summary: str, title: str, **kwargs): + """ + A full explanation of the finding, including root cause analysis and supporting evidence. + + :param description: A full explanation of the finding, including root cause analysis and supporting evidence. + :type description: str + + :param summary: A summary of the finding, including affected components and timeframe. + :type summary: str + + :param title: The title of the conclusion. + :type title: str + """ + super().__init__(kwargs) + + + self_.description = description + self_.summary = summary + self_.title = title diff --git a/datadog_api_client/v2/model/investigation_type.py b/datadog_api_client/v2/model/investigation_type.py new file mode 100644 index 0000000000..6ae48fc6f7 --- /dev/null +++ b/datadog_api_client/v2/model/investigation_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class InvestigationType(ModelSimple): + """ + The resource type for investigations. + + :param value: If omitted defaults to "investigation". Must be one of ["investigation"]. + :type value: str + """ + + allowed_values = { + "investigation", + } + INVESTIGATION: ClassVar["InvestigationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +InvestigationType.INVESTIGATION = InvestigationType("investigation") diff --git a/datadog_api_client/v2/model/io_c_explorer_list_response.py b/datadog_api_client/v2/model/io_c_explorer_list_response.py new file mode 100644 index 0000000000..0f615d7cb7 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_explorer_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_explorer_list_response_data import IoCExplorerListResponseData + +class IoCExplorerListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_explorer_list_response_data import IoCExplorerListResponseData + return { + "data": (IoCExplorerListResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[IoCExplorerListResponseData, UnsetType]=unset, **kwargs): + """ + Response for the list indicators of compromise endpoint. + + :param data: IoC Explorer list response data object. + :type data: IoCExplorerListResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_explorer_list_response_attributes.py b/datadog_api_client/v2/model/io_c_explorer_list_response_attributes.py new file mode 100644 index 0000000000..bc4793ee85 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_explorer_list_response_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_indicator import IoCIndicator + from datadog_api_client.v2.model.io_c_explorer_list_response_metadata import IoCExplorerListResponseMetadata + from datadog_api_client.v2.model.io_c_explorer_list_response_paging import IoCExplorerListResponsePaging + +class IoCExplorerListResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_indicator import IoCIndicator + from datadog_api_client.v2.model.io_c_explorer_list_response_metadata import IoCExplorerListResponseMetadata + from datadog_api_client.v2.model.io_c_explorer_list_response_paging import IoCExplorerListResponsePaging + return { + "data": ([IoCIndicator],), + "metadata": (IoCExplorerListResponseMetadata,), + "paging": (IoCExplorerListResponsePaging,), + } + attribute_map = { + "data": "data", + "metadata": "metadata", + "paging": "paging", + } + + def __init__(self_, data: Union[List[IoCIndicator], UnsetType]=unset, metadata: Union[IoCExplorerListResponseMetadata, UnsetType]=unset, paging: Union[IoCExplorerListResponsePaging, UnsetType]=unset, **kwargs): + """ + Attributes of the IoC Explorer list response. + + :param data: List of indicators of compromise. + :type data: [IoCIndicator], optional + + :param metadata: Response metadata. + :type metadata: IoCExplorerListResponseMetadata, optional + + :param paging: Pagination information. + :type paging: IoCExplorerListResponsePaging, optional + """ + if data is not unset: + kwargs["data"] = data + if metadata is not unset: + kwargs["metadata"] = metadata + if paging is not unset: + kwargs["paging"] = paging + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_explorer_list_response_data.py b/datadog_api_client/v2/model/io_c_explorer_list_response_data.py new file mode 100644 index 0000000000..1769de9055 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_explorer_list_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_explorer_list_response_attributes import IoCExplorerListResponseAttributes + +class IoCExplorerListResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_explorer_list_response_attributes import IoCExplorerListResponseAttributes + return { + "attributes": (IoCExplorerListResponseAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[IoCExplorerListResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + IoC Explorer list response data object. + + :param attributes: Attributes of the IoC Explorer list response. + :type attributes: IoCExplorerListResponseAttributes, optional + + :param id: Unique identifier for the response. + :type id: str, optional + + :param type: Response type identifier. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_explorer_list_response_metadata.py b/datadog_api_client/v2/model/io_c_explorer_list_response_metadata.py new file mode 100644 index 0000000000..2136b6e337 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_explorer_list_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IoCExplorerListResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + } + attribute_map = { + "count": "count", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, **kwargs): + """ + Response metadata. + + :param count: Total number of indicators matching the query. + :type count: int, optional + """ + if count is not unset: + kwargs["count"] = count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_explorer_list_response_paging.py b/datadog_api_client/v2/model/io_c_explorer_list_response_paging.py new file mode 100644 index 0000000000..30aabff736 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_explorer_list_response_paging.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IoCExplorerListResponsePaging(ModelNormal): + @cached_property + def openapi_types(_): + return { + "offset": (int,), + } + attribute_map = { + "offset": "offset", + } + + def __init__(self_, offset: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination information. + + :param offset: Current pagination offset. + :type offset: int, optional + """ + if offset is not unset: + kwargs["offset"] = offset + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_geo_location.py b/datadog_api_client/v2/model/io_c_geo_location.py new file mode 100644 index 0000000000..e3e5e4c023 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_geo_location.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IoCGeoLocation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "city": (str,), + "country_code": (str,), + "country_name": (str,), + } + attribute_map = { + "city": "city", + "country_code": "country_code", + "country_name": "country_name", + } + + def __init__(self_, city: Union[str, UnsetType]=unset, country_code: Union[str, UnsetType]=unset, country_name: Union[str, UnsetType]=unset, **kwargs): + """ + Geographic location information for an IP indicator. + + :param city: City name. + :type city: str, optional + + :param country_code: ISO country code. + :type country_code: str, optional + + :param country_name: Full country name. + :type country_name: str, optional + """ + if city is not unset: + kwargs["city"] = city + if country_code is not unset: + kwargs["country_code"] = country_code + if country_name is not unset: + kwargs["country_name"] = country_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_indicator.py b/datadog_api_client/v2/model/io_c_indicator.py new file mode 100644 index 0000000000..796f77a723 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_indicator.py @@ -0,0 +1,216 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_geo_location import IoCGeoLocation + from datadog_api_client.v2.model.io_c_source import IoCSource + from datadog_api_client.v2.model.io_c_score_effect import IoCScoreEffect + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + +class IoCIndicator(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_geo_location import IoCGeoLocation + from datadog_api_client.v2.model.io_c_source import IoCSource + from datadog_api_client.v2.model.io_c_score_effect import IoCScoreEffect + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + return { + "as_geo": (IoCGeoLocation,), + "as_type": (str,), + "benign_sources": ([IoCSource], none_type), + "categories": ([str],), + "first_seen": (datetime,), + "id": (str,), + "indicator": (str,), + "indicator_type": (str,), + "last_seen": (datetime,), + "log_matches": (int,), + "m_as_type": (IoCScoreEffect,), + "m_persistence": (IoCScoreEffect,), + "m_signal": (IoCScoreEffect,), + "m_sources": (IoCScoreEffect,), + "malicious_sources": ([IoCSource], none_type), + "max_trust_score": (IoCScoreEffect,), + "score": (float,), + "signal_matches": (int,), + "signal_tier": (int,), + "suspicious_sources": ([IoCSource], none_type), + "tags": ([str],), + "triage_state": (IoCTriageState,), + "triaged_at": (datetime,), + "triaged_by": (str,), + } + attribute_map = { + "as_geo": "as_geo", + "as_type": "as_type", + "benign_sources": "benign_sources", + "categories": "categories", + "first_seen": "first_seen", + "id": "id", + "indicator": "indicator", + "indicator_type": "indicator_type", + "last_seen": "last_seen", + "log_matches": "log_matches", + "m_as_type": "m_as_type", + "m_persistence": "m_persistence", + "m_signal": "m_signal", + "m_sources": "m_sources", + "malicious_sources": "malicious_sources", + "max_trust_score": "max_trust_score", + "score": "score", + "signal_matches": "signal_matches", + "signal_tier": "signal_tier", + "suspicious_sources": "suspicious_sources", + "tags": "tags", + "triage_state": "triage_state", + "triaged_at": "triaged_at", + "triaged_by": "triaged_by", + } + + def __init__(self_, as_geo: Union[IoCGeoLocation, UnsetType]=unset, as_type: Union[str, UnsetType]=unset, benign_sources: Union[List[IoCSource], none_type, UnsetType]=unset, categories: Union[List[str], UnsetType]=unset, first_seen: Union[datetime, UnsetType]=unset, id: Union[str, UnsetType]=unset, indicator: Union[str, UnsetType]=unset, indicator_type: Union[str, UnsetType]=unset, last_seen: Union[datetime, UnsetType]=unset, log_matches: Union[int, UnsetType]=unset, m_as_type: Union[IoCScoreEffect, UnsetType]=unset, m_persistence: Union[IoCScoreEffect, UnsetType]=unset, m_signal: Union[IoCScoreEffect, UnsetType]=unset, m_sources: Union[IoCScoreEffect, UnsetType]=unset, malicious_sources: Union[List[IoCSource], none_type, UnsetType]=unset, max_trust_score: Union[IoCScoreEffect, UnsetType]=unset, score: Union[float, UnsetType]=unset, signal_matches: Union[int, UnsetType]=unset, signal_tier: Union[int, UnsetType]=unset, suspicious_sources: Union[List[IoCSource], none_type, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, triage_state: Union[IoCTriageState, UnsetType]=unset, triaged_at: Union[datetime, UnsetType]=unset, triaged_by: Union[str, UnsetType]=unset, **kwargs): + """ + An indicator of compromise with threat intelligence data. + + :param as_geo: Geographic location information for an IP indicator. + :type as_geo: IoCGeoLocation, optional + + :param as_type: Autonomous system type. + :type as_type: str, optional + + :param benign_sources: Threat intelligence sources that flagged this indicator as benign. + :type benign_sources: [IoCSource], none_type, optional + + :param categories: Threat categories associated with the indicator. + :type categories: [str], optional + + :param first_seen: Timestamp when the indicator was first seen. + :type first_seen: datetime, optional + + :param id: Unique identifier for the indicator. + :type id: str, optional + + :param indicator: The indicator value (for example, an IP address or domain). + :type indicator: str, optional + + :param indicator_type: Type of indicator (for example, IP address or domain). + :type indicator_type: str, optional + + :param last_seen: Timestamp when the indicator was last seen. + :type last_seen: datetime, optional + + :param log_matches: Number of logs that matched this indicator. + :type log_matches: int, optional + + :param m_as_type: Effect of a scoring factor on the indicator's threat score. + :type m_as_type: IoCScoreEffect, optional + + :param m_persistence: Effect of a scoring factor on the indicator's threat score. + :type m_persistence: IoCScoreEffect, optional + + :param m_signal: Effect of a scoring factor on the indicator's threat score. + :type m_signal: IoCScoreEffect, optional + + :param m_sources: Effect of a scoring factor on the indicator's threat score. + :type m_sources: IoCScoreEffect, optional + + :param malicious_sources: Threat intelligence sources that flagged this indicator as malicious. + :type malicious_sources: [IoCSource], none_type, optional + + :param max_trust_score: Effect of a scoring factor on the indicator's threat score. + :type max_trust_score: IoCScoreEffect, optional + + :param score: Threat score for the indicator (0-100). + :type score: float, optional + + :param signal_matches: Number of security signals that matched this indicator. + :type signal_matches: int, optional + + :param signal_tier: Signal tier level. + :type signal_tier: int, optional + + :param suspicious_sources: Threat intelligence sources that flagged this indicator as suspicious. + :type suspicious_sources: [IoCSource], none_type, optional + + :param tags: Tags associated with the indicator. + :type tags: [str], optional + + :param triage_state: Current triage state of the indicator. + :type triage_state: IoCTriageState, optional + + :param triaged_at: Timestamp when the indicator was last triaged. + :type triaged_at: datetime, optional + + :param triaged_by: UUID of the user who last triaged the indicator. + :type triaged_by: str, optional + """ + if as_geo is not unset: + kwargs["as_geo"] = as_geo + if as_type is not unset: + kwargs["as_type"] = as_type + if benign_sources is not unset: + kwargs["benign_sources"] = benign_sources + if categories is not unset: + kwargs["categories"] = categories + if first_seen is not unset: + kwargs["first_seen"] = first_seen + if id is not unset: + kwargs["id"] = id + if indicator is not unset: + kwargs["indicator"] = indicator + if indicator_type is not unset: + kwargs["indicator_type"] = indicator_type + if last_seen is not unset: + kwargs["last_seen"] = last_seen + if log_matches is not unset: + kwargs["log_matches"] = log_matches + if m_as_type is not unset: + kwargs["m_as_type"] = m_as_type + if m_persistence is not unset: + kwargs["m_persistence"] = m_persistence + if m_signal is not unset: + kwargs["m_signal"] = m_signal + if m_sources is not unset: + kwargs["m_sources"] = m_sources + if malicious_sources is not unset: + kwargs["malicious_sources"] = malicious_sources + if max_trust_score is not unset: + kwargs["max_trust_score"] = max_trust_score + if score is not unset: + kwargs["score"] = score + if signal_matches is not unset: + kwargs["signal_matches"] = signal_matches + if signal_tier is not unset: + kwargs["signal_tier"] = signal_tier + if suspicious_sources is not unset: + kwargs["suspicious_sources"] = suspicious_sources + if tags is not unset: + kwargs["tags"] = tags + if triage_state is not unset: + kwargs["triage_state"] = triage_state + if triaged_at is not unset: + kwargs["triaged_at"] = triaged_at + if triaged_by is not unset: + kwargs["triaged_by"] = triaged_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_indicator_detailed.py b/datadog_api_client/v2/model/io_c_indicator_detailed.py new file mode 100644 index 0000000000..1e2b367540 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_indicator_detailed.py @@ -0,0 +1,297 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_geo_location import IoCGeoLocation + from datadog_api_client.v2.model.io_c_source import IoCSource + from datadog_api_client.v2.model.io_c_score_effect import IoCScoreEffect + from datadog_api_client.v2.model.io_c_signal_severity_count import IoCSignalSeverityCount + from datadog_api_client.v2.model.io_c_triage_event import IoCTriageEvent + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + +class IoCIndicatorDetailed(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_geo_location import IoCGeoLocation + from datadog_api_client.v2.model.io_c_source import IoCSource + from datadog_api_client.v2.model.io_c_score_effect import IoCScoreEffect + from datadog_api_client.v2.model.io_c_signal_severity_count import IoCSignalSeverityCount + from datadog_api_client.v2.model.io_c_triage_event import IoCTriageEvent + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + return { + "additional_data": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "as_cidr_block": (str,), + "as_geo": (IoCGeoLocation,), + "as_number": (str,), + "as_organization": (str,), + "as_type": (str,), + "benign_sources": ([IoCSource], none_type), + "categories": ([str],), + "critical_assets": ([str],), + "first_seen": (datetime,), + "hosts": ([str],), + "id": (str,), + "indicator": (str,), + "indicator_type": (str,), + "last_seen": (datetime,), + "log_matches": (int,), + "log_sources": ([str],), + "m_as_type": (IoCScoreEffect,), + "m_persistence": (IoCScoreEffect,), + "m_signal": (IoCScoreEffect,), + "m_sources": (IoCScoreEffect,), + "malicious_sources": ([IoCSource], none_type), + "max_trust_score": (IoCScoreEffect,), + "score": (float,), + "services": ([str],), + "signal_matches": (int,), + "signal_severity": ([IoCSignalSeverityCount],), + "signal_tier": (int,), + "suspicious_sources": ([IoCSource], none_type), + "tags": ([str],), + "triage_history": ([IoCTriageEvent],), + "triage_state": (IoCTriageState,), + "triaged_at": (datetime,), + "triaged_by": (str,), + "users": ({str: ([str],)},), + } + attribute_map = { + "additional_data": "additional_data", + "as_cidr_block": "as_cidr_block", + "as_geo": "as_geo", + "as_number": "as_number", + "as_organization": "as_organization", + "as_type": "as_type", + "benign_sources": "benign_sources", + "categories": "categories", + "critical_assets": "critical_assets", + "first_seen": "first_seen", + "hosts": "hosts", + "id": "id", + "indicator": "indicator", + "indicator_type": "indicator_type", + "last_seen": "last_seen", + "log_matches": "log_matches", + "log_sources": "log_sources", + "m_as_type": "m_as_type", + "m_persistence": "m_persistence", + "m_signal": "m_signal", + "m_sources": "m_sources", + "malicious_sources": "malicious_sources", + "max_trust_score": "max_trust_score", + "score": "score", + "services": "services", + "signal_matches": "signal_matches", + "signal_severity": "signal_severity", + "signal_tier": "signal_tier", + "suspicious_sources": "suspicious_sources", + "tags": "tags", + "triage_history": "triage_history", + "triage_state": "triage_state", + "triaged_at": "triaged_at", + "triaged_by": "triaged_by", + "users": "users", + } + + def __init__(self_, additional_data: Union[Dict[str, Any], UnsetType]=unset, as_cidr_block: Union[str, UnsetType]=unset, as_geo: Union[IoCGeoLocation, UnsetType]=unset, as_number: Union[str, UnsetType]=unset, as_organization: Union[str, UnsetType]=unset, as_type: Union[str, UnsetType]=unset, benign_sources: Union[List[IoCSource], none_type, UnsetType]=unset, categories: Union[List[str], UnsetType]=unset, critical_assets: Union[List[str], UnsetType]=unset, first_seen: Union[datetime, UnsetType]=unset, hosts: Union[List[str], UnsetType]=unset, id: Union[str, UnsetType]=unset, indicator: Union[str, UnsetType]=unset, indicator_type: Union[str, UnsetType]=unset, last_seen: Union[datetime, UnsetType]=unset, log_matches: Union[int, UnsetType]=unset, log_sources: Union[List[str], UnsetType]=unset, m_as_type: Union[IoCScoreEffect, UnsetType]=unset, m_persistence: Union[IoCScoreEffect, UnsetType]=unset, m_signal: Union[IoCScoreEffect, UnsetType]=unset, m_sources: Union[IoCScoreEffect, UnsetType]=unset, malicious_sources: Union[List[IoCSource], none_type, UnsetType]=unset, max_trust_score: Union[IoCScoreEffect, UnsetType]=unset, score: Union[float, UnsetType]=unset, services: Union[List[str], UnsetType]=unset, signal_matches: Union[int, UnsetType]=unset, signal_severity: Union[List[IoCSignalSeverityCount], UnsetType]=unset, signal_tier: Union[int, UnsetType]=unset, suspicious_sources: Union[List[IoCSource], none_type, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, triage_history: Union[List[IoCTriageEvent], UnsetType]=unset, triage_state: Union[IoCTriageState, UnsetType]=unset, triaged_at: Union[datetime, UnsetType]=unset, triaged_by: Union[str, UnsetType]=unset, users: Union[Dict[str, List[str]], UnsetType]=unset, **kwargs): + """ + An indicator of compromise with extended context from your environment. + + :param additional_data: Additional domain-specific context from threat intelligence sources. + :type additional_data: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param as_cidr_block: Autonomous system CIDR block. + :type as_cidr_block: str, optional + + :param as_geo: Geographic location information for an IP indicator. + :type as_geo: IoCGeoLocation, optional + + :param as_number: Autonomous system number. + :type as_number: str, optional + + :param as_organization: Autonomous system organization name. + :type as_organization: str, optional + + :param as_type: Autonomous system type. + :type as_type: str, optional + + :param benign_sources: Threat intelligence sources that flagged this indicator as benign. + :type benign_sources: [IoCSource], none_type, optional + + :param categories: Threat categories associated with the indicator. + :type categories: [str], optional + + :param critical_assets: Critical assets associated with this indicator. + :type critical_assets: [str], optional + + :param first_seen: Timestamp when the indicator was first seen. + :type first_seen: datetime, optional + + :param hosts: Hosts associated with this indicator. + :type hosts: [str], optional + + :param id: Unique identifier for the indicator. + :type id: str, optional + + :param indicator: The indicator value (for example, an IP address or domain). + :type indicator: str, optional + + :param indicator_type: Type of indicator (for example, IP address or domain). + :type indicator_type: str, optional + + :param last_seen: Timestamp when the indicator was last seen. + :type last_seen: datetime, optional + + :param log_matches: Number of logs that matched this indicator. + :type log_matches: int, optional + + :param log_sources: Log sources where this indicator was observed. + :type log_sources: [str], optional + + :param m_as_type: Effect of a scoring factor on the indicator's threat score. + :type m_as_type: IoCScoreEffect, optional + + :param m_persistence: Effect of a scoring factor on the indicator's threat score. + :type m_persistence: IoCScoreEffect, optional + + :param m_signal: Effect of a scoring factor on the indicator's threat score. + :type m_signal: IoCScoreEffect, optional + + :param m_sources: Effect of a scoring factor on the indicator's threat score. + :type m_sources: IoCScoreEffect, optional + + :param malicious_sources: Threat intelligence sources that flagged this indicator as malicious. + :type malicious_sources: [IoCSource], none_type, optional + + :param max_trust_score: Effect of a scoring factor on the indicator's threat score. + :type max_trust_score: IoCScoreEffect, optional + + :param score: Threat score for the indicator (0-100). + :type score: float, optional + + :param services: Services where this indicator was observed. + :type services: [str], optional + + :param signal_matches: Number of security signals that matched this indicator. + :type signal_matches: int, optional + + :param signal_severity: Breakdown of security signals by severity. + :type signal_severity: [IoCSignalSeverityCount], optional + + :param signal_tier: Signal tier level. + :type signal_tier: int, optional + + :param suspicious_sources: Threat intelligence sources that flagged this indicator as suspicious. + :type suspicious_sources: [IoCSource], none_type, optional + + :param tags: Tags associated with the indicator. + :type tags: [str], optional + + :param triage_history: Full triage history timeline. Returned only when ``include_triage_history`` is true. + :type triage_history: [IoCTriageEvent], optional + + :param triage_state: Current triage state of the indicator. + :type triage_state: IoCTriageState, optional + + :param triaged_at: Timestamp when the indicator was last triaged. + :type triaged_at: datetime, optional + + :param triaged_by: UUID of the user who last triaged the indicator. + :type triaged_by: str, optional + + :param users: Users associated with this indicator, grouped by category. + :type users: {str: ([str],)}, optional + """ + if additional_data is not unset: + kwargs["additional_data"] = additional_data + if as_cidr_block is not unset: + kwargs["as_cidr_block"] = as_cidr_block + if as_geo is not unset: + kwargs["as_geo"] = as_geo + if as_number is not unset: + kwargs["as_number"] = as_number + if as_organization is not unset: + kwargs["as_organization"] = as_organization + if as_type is not unset: + kwargs["as_type"] = as_type + if benign_sources is not unset: + kwargs["benign_sources"] = benign_sources + if categories is not unset: + kwargs["categories"] = categories + if critical_assets is not unset: + kwargs["critical_assets"] = critical_assets + if first_seen is not unset: + kwargs["first_seen"] = first_seen + if hosts is not unset: + kwargs["hosts"] = hosts + if id is not unset: + kwargs["id"] = id + if indicator is not unset: + kwargs["indicator"] = indicator + if indicator_type is not unset: + kwargs["indicator_type"] = indicator_type + if last_seen is not unset: + kwargs["last_seen"] = last_seen + if log_matches is not unset: + kwargs["log_matches"] = log_matches + if log_sources is not unset: + kwargs["log_sources"] = log_sources + if m_as_type is not unset: + kwargs["m_as_type"] = m_as_type + if m_persistence is not unset: + kwargs["m_persistence"] = m_persistence + if m_signal is not unset: + kwargs["m_signal"] = m_signal + if m_sources is not unset: + kwargs["m_sources"] = m_sources + if malicious_sources is not unset: + kwargs["malicious_sources"] = malicious_sources + if max_trust_score is not unset: + kwargs["max_trust_score"] = max_trust_score + if score is not unset: + kwargs["score"] = score + if services is not unset: + kwargs["services"] = services + if signal_matches is not unset: + kwargs["signal_matches"] = signal_matches + if signal_severity is not unset: + kwargs["signal_severity"] = signal_severity + if signal_tier is not unset: + kwargs["signal_tier"] = signal_tier + if suspicious_sources is not unset: + kwargs["suspicious_sources"] = suspicious_sources + if tags is not unset: + kwargs["tags"] = tags + if triage_history is not unset: + kwargs["triage_history"] = triage_history + if triage_state is not unset: + kwargs["triage_state"] = triage_state + if triaged_at is not unset: + kwargs["triaged_at"] = triaged_at + if triaged_by is not unset: + kwargs["triaged_by"] = triaged_by + if users is not unset: + kwargs["users"] = users + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_score_effect.py b/datadog_api_client/v2/model/io_c_score_effect.py new file mode 100644 index 0000000000..ae9a7b8ec1 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_score_effect.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IoCScoreEffect(ModelSimple): + """ + Effect of a scoring factor on the indicator's threat score. + + :param value: Must be one of ["RAISE_SCORE", "LOWER_SCORE", "NO_EFFECT"]. + :type value: str + """ + + allowed_values = { + "RAISE_SCORE", + "LOWER_SCORE", + "NO_EFFECT", + } + RAISE_SCORE: ClassVar["IoCScoreEffect"] + LOWER_SCORE: ClassVar["IoCScoreEffect"] + NO_EFFECT: ClassVar["IoCScoreEffect"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IoCScoreEffect.RAISE_SCORE = IoCScoreEffect("RAISE_SCORE") +IoCScoreEffect.LOWER_SCORE = IoCScoreEffect("LOWER_SCORE") +IoCScoreEffect.NO_EFFECT = IoCScoreEffect("NO_EFFECT") diff --git a/datadog_api_client/v2/model/io_c_signal_severity_count.py b/datadog_api_client/v2/model/io_c_signal_severity_count.py new file mode 100644 index 0000000000..0ba5faa5c2 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_signal_severity_count.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IoCSignalSeverityCount(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "severity": (str,), + } + attribute_map = { + "count": "count", + "severity": "severity", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, severity: Union[str, UnsetType]=unset, **kwargs): + """ + Count of security signals by severity level. + + :param count: Number of signals at this severity level. + :type count: int, optional + + :param severity: Severity level (for example, critical, high, medium, low, info). + :type severity: str, optional + """ + if count is not unset: + kwargs["count"] = count + if severity is not unset: + kwargs["severity"] = severity + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_source.py b/datadog_api_client/v2/model/io_c_source.py new file mode 100644 index 0000000000..8e72f5b9a4 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_source.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IoCSource(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + A threat intelligence source that has flagged an indicator. + + :param name: Name of the threat intelligence source. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_triage_event.py b/datadog_api_client/v2/model/io_c_triage_event.py new file mode 100644 index 0000000000..0a8aeef1ac --- /dev/null +++ b/datadog_api_client/v2/model/io_c_triage_event.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + +class IoCTriageEvent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + return { + "triage_state": (IoCTriageState,), + "triaged_at": (datetime,), + "triaged_by": (str,), + } + attribute_map = { + "triage_state": "triage_state", + "triaged_at": "triaged_at", + "triaged_by": "triaged_by", + } + + def __init__(self_, triage_state: Union[IoCTriageState, UnsetType]=unset, triaged_at: Union[datetime, UnsetType]=unset, triaged_by: Union[str, UnsetType]=unset, **kwargs): + """ + A single entry in an indicator's triage history timeline. + + :param triage_state: Current triage state of the indicator. + :type triage_state: IoCTriageState, optional + + :param triaged_at: Timestamp when this triage action occurred. + :type triaged_at: datetime, optional + + :param triaged_by: UUID of the user who performed this triage action. + :type triaged_by: str, optional + """ + if triage_state is not unset: + kwargs["triage_state"] = triage_state + if triaged_at is not unset: + kwargs["triaged_at"] = triaged_at + if triaged_by is not unset: + kwargs["triaged_by"] = triaged_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_triage_state.py b/datadog_api_client/v2/model/io_c_triage_state.py new file mode 100644 index 0000000000..0d2e2d3c96 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_triage_state.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IoCTriageState(ModelSimple): + """ + Current triage state of the indicator. + + :param value: Must be one of ["not_reviewed", "reviewed"]. + :type value: str + """ + + allowed_values = { + "not_reviewed", + "reviewed", + } + NOT_REVIEWED: ClassVar["IoCTriageState"] + REVIEWED: ClassVar["IoCTriageState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IoCTriageState.NOT_REVIEWED = IoCTriageState("not_reviewed") +IoCTriageState.REVIEWED = IoCTriageState("reviewed") diff --git a/datadog_api_client/v2/model/io_c_triage_write_request.py b/datadog_api_client/v2/model/io_c_triage_write_request.py new file mode 100644 index 0000000000..6177b4705d --- /dev/null +++ b/datadog_api_client/v2/model/io_c_triage_write_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_triage_write_request_data import IoCTriageWriteRequestData + +class IoCTriageWriteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_triage_write_request_data import IoCTriageWriteRequestData + return { + "data": (IoCTriageWriteRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IoCTriageWriteRequestData, **kwargs): + """ + Request body for creating or updating an indicator triage state. + + :param data: Data object for the triage write request. + :type data: IoCTriageWriteRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/io_c_triage_write_request_attributes.py b/datadog_api_client/v2/model/io_c_triage_write_request_attributes.py new file mode 100644 index 0000000000..10bb5edf32 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_triage_write_request_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + +class IoCTriageWriteRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + return { + "indicator": (str,), + "triage_state": (IoCTriageState,), + } + attribute_map = { + "indicator": "indicator", + "triage_state": "triage_state", + } + + def __init__(self_, indicator: str, triage_state: IoCTriageState, **kwargs): + """ + Attributes for setting an indicator's triage state. + + :param indicator: The indicator value to triage (for example, an IP address or domain). + :type indicator: str + + :param triage_state: Current triage state of the indicator. + :type triage_state: IoCTriageState + """ + super().__init__(kwargs) + + + self_.indicator = indicator + self_.triage_state = triage_state diff --git a/datadog_api_client/v2/model/io_c_triage_write_request_data.py b/datadog_api_client/v2/model/io_c_triage_write_request_data.py new file mode 100644 index 0000000000..0dc410ee65 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_triage_write_request_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_triage_write_request_attributes import IoCTriageWriteRequestAttributes + +class IoCTriageWriteRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_triage_write_request_attributes import IoCTriageWriteRequestAttributes + return { + "attributes": (IoCTriageWriteRequestAttributes,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IoCTriageWriteRequestAttributes, **kwargs): + """ + Data object for the triage write request. + + :param attributes: Attributes for setting an indicator's triage state. + :type attributes: IoCTriageWriteRequestAttributes + + :param type: Triage state resource type. + :type type: str + """ + super().__init__(kwargs) + type = kwargs.get("type", "ioc_triage_state") + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/io_c_triage_write_response.py b/datadog_api_client/v2/model/io_c_triage_write_response.py new file mode 100644 index 0000000000..2afbcfa4d6 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_triage_write_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_triage_write_response_data import IoCTriageWriteResponseData + +class IoCTriageWriteResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_triage_write_response_data import IoCTriageWriteResponseData + return { + "data": (IoCTriageWriteResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[IoCTriageWriteResponseData, UnsetType]=unset, **kwargs): + """ + Response for the create indicator triage state endpoint. + + :param data: Data object of the triage write response. + :type data: IoCTriageWriteResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_triage_write_response_attributes.py b/datadog_api_client/v2/model/io_c_triage_write_response_attributes.py new file mode 100644 index 0000000000..7709281403 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_triage_write_response_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + +class IoCTriageWriteResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState + return { + "created_at": (datetime,), + "indicator": (str,), + "triage_state": (IoCTriageState,), + "triaged_at": (datetime,), + "triaged_by": (str,), + } + attribute_map = { + "created_at": "created_at", + "indicator": "indicator", + "triage_state": "triage_state", + "triaged_at": "triaged_at", + "triaged_by": "triaged_by", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, indicator: Union[str, UnsetType]=unset, triage_state: Union[IoCTriageState, UnsetType]=unset, triaged_at: Union[datetime, UnsetType]=unset, triaged_by: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a created or updated triage state. + + :param created_at: Timestamp when the triage record was created. + :type created_at: datetime, optional + + :param indicator: The indicator value that was triaged. + :type indicator: str, optional + + :param triage_state: Current triage state of the indicator. + :type triage_state: IoCTriageState, optional + + :param triaged_at: Timestamp when the triage state was set. + :type triaged_at: datetime, optional + + :param triaged_by: UUID of the user who set the triage state. + :type triaged_by: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if indicator is not unset: + kwargs["indicator"] = indicator + if triage_state is not unset: + kwargs["triage_state"] = triage_state + if triaged_at is not unset: + kwargs["triaged_at"] = triaged_at + if triaged_by is not unset: + kwargs["triaged_by"] = triaged_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/io_c_triage_write_response_data.py b/datadog_api_client/v2/model/io_c_triage_write_response_data.py new file mode 100644 index 0000000000..c76822ee52 --- /dev/null +++ b/datadog_api_client/v2/model/io_c_triage_write_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.io_c_triage_write_response_attributes import IoCTriageWriteResponseAttributes + +class IoCTriageWriteResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.io_c_triage_write_response_attributes import IoCTriageWriteResponseAttributes + return { + "attributes": (IoCTriageWriteResponseAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[IoCTriageWriteResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Data object of the triage write response. + + :param attributes: Attributes of a created or updated triage state. + :type attributes: IoCTriageWriteResponseAttributes, optional + + :param id: Unique identifier for the triage state record. + :type id: str, optional + + :param type: Triage state resource type. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ios_sourcemap_attributes.py b/datadog_api_client/v2/model/ios_sourcemap_attributes.py new file mode 100644 index 0000000000..e691186b07 --- /dev/null +++ b/datadog_api_client/v2/model/ios_sourcemap_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IOSSourcemapAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "mapkind": (str,), + "size": (int,), + "uuids": (str,), + } + attribute_map = { + "created_at": "created_at", + "mapkind": "mapkind", + "size": "size", + "uuids": "uuids", + } + + def __init__(self_, created_at: datetime, mapkind: str, size: int, uuids: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an iOS dSYM source map. + + :param created_at: The timestamp when the source map was created. + :type created_at: datetime + + :param mapkind: The type of source map. + :type mapkind: str + + :param size: The size of the dSYM file in bytes. + :type size: int + + :param uuids: The UUID(s) associated with the dSYM file. + :type uuids: str, optional + """ + if uuids is not unset: + kwargs["uuids"] = uuids + super().__init__(kwargs) + + + self_.created_at = created_at + self_.mapkind = mapkind + self_.size = size diff --git a/datadog_api_client/v2/model/ios_sourcemap_data.py b/datadog_api_client/v2/model/ios_sourcemap_data.py new file mode 100644 index 0000000000..6ce7675117 --- /dev/null +++ b/datadog_api_client/v2/model/ios_sourcemap_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ios_sourcemap_attributes import IOSSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + +class IOSSourcemapData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ios_sourcemap_attributes import IOSSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + return { + "attributes": (IOSSourcemapAttributes,), + "id": (str,), + "type": (SourcemapDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IOSSourcemapAttributes, id: str, type: SourcemapDataType, **kwargs): + """ + iOS dSYM source map data object. + + :param attributes: Attributes of an iOS dSYM source map. + :type attributes: IOSSourcemapAttributes + + :param id: The unique identifier of the source map. + :type id: str + + :param type: The resource type for source map objects. + :type type: SourcemapDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ip_allowlist_attributes.py b/datadog_api_client/v2/model/ip_allowlist_attributes.py new file mode 100644 index 0000000000..99d506dd4a --- /dev/null +++ b/datadog_api_client/v2/model/ip_allowlist_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ip_allowlist_entry import IPAllowlistEntry + +class IPAllowlistAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ip_allowlist_entry import IPAllowlistEntry + return { + "enabled": (bool,), + "entries": ([IPAllowlistEntry],), + } + attribute_map = { + "enabled": "enabled", + "entries": "entries", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, entries: Union[List[IPAllowlistEntry], UnsetType]=unset, **kwargs): + """ + Attributes of the IP allowlist. + + :param enabled: Whether the IP allowlist logic is enabled or not. + :type enabled: bool, optional + + :param entries: Array of entries in the IP allowlist. + :type entries: [IPAllowlistEntry], optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if entries is not unset: + kwargs["entries"] = entries + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ip_allowlist_data.py b/datadog_api_client/v2/model/ip_allowlist_data.py new file mode 100644 index 0000000000..53f9dc61da --- /dev/null +++ b/datadog_api_client/v2/model/ip_allowlist_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ip_allowlist_attributes import IPAllowlistAttributes + from datadog_api_client.v2.model.ip_allowlist_type import IPAllowlistType + +class IPAllowlistData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ip_allowlist_attributes import IPAllowlistAttributes + from datadog_api_client.v2.model.ip_allowlist_type import IPAllowlistType + return { + "attributes": (IPAllowlistAttributes,), + "id": (str,), + "type": (IPAllowlistType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: IPAllowlistType, attributes: Union[IPAllowlistAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + IP allowlist data. + + :param attributes: Attributes of the IP allowlist. + :type attributes: IPAllowlistAttributes, optional + + :param id: The unique identifier of the org. + :type id: str, optional + + :param type: IP allowlist type. + :type type: IPAllowlistType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/ip_allowlist_entry.py b/datadog_api_client/v2/model/ip_allowlist_entry.py new file mode 100644 index 0000000000..030fa000fd --- /dev/null +++ b/datadog_api_client/v2/model/ip_allowlist_entry.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ip_allowlist_entry_data import IPAllowlistEntryData + +class IPAllowlistEntry(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ip_allowlist_entry_data import IPAllowlistEntryData + return { + "data": (IPAllowlistEntryData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IPAllowlistEntryData, **kwargs): + """ + IP allowlist entry object. + + :param data: Data of the IP allowlist entry object. + :type data: IPAllowlistEntryData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ip_allowlist_entry_attributes.py b/datadog_api_client/v2/model/ip_allowlist_entry_attributes.py new file mode 100644 index 0000000000..15f73a391f --- /dev/null +++ b/datadog_api_client/v2/model/ip_allowlist_entry_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IPAllowlistEntryAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cidr_block": (str,), + "created_at": (datetime,), + "modified_at": (datetime,), + "note": (str,), + } + attribute_map = { + "cidr_block": "cidr_block", + "created_at": "created_at", + "modified_at": "modified_at", + "note": "note", + } + read_only_vars = { + "created_at", + "modified_at", + } + + def __init__(self_, cidr_block: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, note: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the IP allowlist entry. + + :param cidr_block: The CIDR block describing the IP range of the entry. + :type cidr_block: str, optional + + :param created_at: Creation time of the entry. + :type created_at: datetime, optional + + :param modified_at: Time of last entry modification. + :type modified_at: datetime, optional + + :param note: A note describing the IP allowlist entry. + :type note: str, optional + """ + if cidr_block is not unset: + kwargs["cidr_block"] = cidr_block + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if note is not unset: + kwargs["note"] = note + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ip_allowlist_entry_data.py b/datadog_api_client/v2/model/ip_allowlist_entry_data.py new file mode 100644 index 0000000000..26d91e5ba0 --- /dev/null +++ b/datadog_api_client/v2/model/ip_allowlist_entry_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ip_allowlist_entry_attributes import IPAllowlistEntryAttributes + from datadog_api_client.v2.model.ip_allowlist_entry_type import IPAllowlistEntryType + +class IPAllowlistEntryData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ip_allowlist_entry_attributes import IPAllowlistEntryAttributes + from datadog_api_client.v2.model.ip_allowlist_entry_type import IPAllowlistEntryType + return { + "attributes": (IPAllowlistEntryAttributes,), + "id": (str,), + "type": (IPAllowlistEntryType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: IPAllowlistEntryType, attributes: Union[IPAllowlistEntryAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data of the IP allowlist entry object. + + :param attributes: Attributes of the IP allowlist entry. + :type attributes: IPAllowlistEntryAttributes, optional + + :param id: The unique identifier of the IP allowlist entry. + :type id: str, optional + + :param type: IP allowlist Entry type. + :type type: IPAllowlistEntryType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/ip_allowlist_entry_type.py b/datadog_api_client/v2/model/ip_allowlist_entry_type.py new file mode 100644 index 0000000000..fa502a03a0 --- /dev/null +++ b/datadog_api_client/v2/model/ip_allowlist_entry_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IPAllowlistEntryType(ModelSimple): + """ + IP allowlist Entry type. + + :param value: If omitted defaults to "ip_allowlist_entry". Must be one of ["ip_allowlist_entry"]. + :type value: str + """ + + allowed_values = { + "ip_allowlist_entry", + } + IP_ALLOWLIST_ENTRY: ClassVar["IPAllowlistEntryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IPAllowlistEntryType.IP_ALLOWLIST_ENTRY = IPAllowlistEntryType("ip_allowlist_entry") diff --git a/datadog_api_client/v2/model/ip_allowlist_response.py b/datadog_api_client/v2/model/ip_allowlist_response.py new file mode 100644 index 0000000000..20606baf0d --- /dev/null +++ b/datadog_api_client/v2/model/ip_allowlist_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ip_allowlist_data import IPAllowlistData + +class IPAllowlistResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ip_allowlist_data import IPAllowlistData + return { + "data": (IPAllowlistData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[IPAllowlistData, UnsetType]=unset, **kwargs): + """ + Response containing information about the IP allowlist. + + :param data: IP allowlist data. + :type data: IPAllowlistData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ip_allowlist_type.py b/datadog_api_client/v2/model/ip_allowlist_type.py new file mode 100644 index 0000000000..151d30ffcd --- /dev/null +++ b/datadog_api_client/v2/model/ip_allowlist_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IPAllowlistType(ModelSimple): + """ + IP allowlist type. + + :param value: If omitted defaults to "ip_allowlist". Must be one of ["ip_allowlist"]. + :type value: str + """ + + allowed_values = { + "ip_allowlist", + } + IP_ALLOWLIST: ClassVar["IPAllowlistType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IPAllowlistType.IP_ALLOWLIST = IPAllowlistType("ip_allowlist") diff --git a/datadog_api_client/v2/model/ip_allowlist_update_request.py b/datadog_api_client/v2/model/ip_allowlist_update_request.py new file mode 100644 index 0000000000..211723e0ba --- /dev/null +++ b/datadog_api_client/v2/model/ip_allowlist_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ip_allowlist_data import IPAllowlistData + +class IPAllowlistUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ip_allowlist_data import IPAllowlistData + return { + "data": (IPAllowlistData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IPAllowlistData, **kwargs): + """ + Update the IP allowlist. + + :param data: IP allowlist data. + :type data: IPAllowlistData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/issue.py b/datadog_api_client/v2/model/issue.py new file mode 100644 index 0000000000..7cdb10218a --- /dev/null +++ b/datadog_api_client/v2/model/issue.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_attributes import IssueAttributes + from datadog_api_client.v2.model.issue_relationships import IssueRelationships + from datadog_api_client.v2.model.issue_type import IssueType + +class Issue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_attributes import IssueAttributes + from datadog_api_client.v2.model.issue_relationships import IssueRelationships + from datadog_api_client.v2.model.issue_type import IssueType + return { + "attributes": (IssueAttributes,), + "id": (str,), + "relationships": (IssueRelationships,), + "type": (IssueType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IssueAttributes, id: str, type: IssueType, relationships: Union[IssueRelationships, UnsetType]=unset, **kwargs): + """ + The issue matching the request. + + :param attributes: Object containing the information of an issue. + :type attributes: IssueAttributes + + :param id: Issue identifier. + :type id: str + + :param relationships: Relationship between the issue and an assignee, case and/or teams. + :type relationships: IssueRelationships, optional + + :param type: Type of the object. + :type type: IssueType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_assignee_relationship.py b/datadog_api_client/v2/model/issue_assignee_relationship.py new file mode 100644 index 0000000000..c0e0ebcd4c --- /dev/null +++ b/datadog_api_client/v2/model/issue_assignee_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_user_reference import IssueUserReference + +class IssueAssigneeRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_user_reference import IssueUserReference + return { + "data": (IssueUserReference,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IssueUserReference, **kwargs): + """ + Relationship between the issue and assignee. + + :param data: The user the issue is assigned to. + :type data: IssueUserReference + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/issue_attributes.py b/datadog_api_client/v2/model/issue_attributes.py new file mode 100644 index 0000000000..9570babf56 --- /dev/null +++ b/datadog_api_client/v2/model/issue_attributes.py @@ -0,0 +1,146 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_language import IssueLanguage + from datadog_api_client.v2.model.issue_platform import IssuePlatform + from datadog_api_client.v2.model.issue_regression import IssueRegression + from datadog_api_client.v2.model.issue_state import IssueState + +class IssueAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_language import IssueLanguage + from datadog_api_client.v2.model.issue_platform import IssuePlatform + from datadog_api_client.v2.model.issue_regression import IssueRegression + from datadog_api_client.v2.model.issue_state import IssueState + return { + "error_message": (str,), + "error_type": (str,), + "file_path": (str,), + "first_seen": (int,), + "first_seen_version": (str,), + "function_name": (str,), + "is_crash": (bool,), + "languages": ([IssueLanguage],), + "last_seen": (int,), + "last_seen_version": (str,), + "platform": (IssuePlatform,), + "regression": (IssueRegression,), + "service": (str,), + "state": (IssueState,), + } + attribute_map = { + "error_message": "error_message", + "error_type": "error_type", + "file_path": "file_path", + "first_seen": "first_seen", + "first_seen_version": "first_seen_version", + "function_name": "function_name", + "is_crash": "is_crash", + "languages": "languages", + "last_seen": "last_seen", + "last_seen_version": "last_seen_version", + "platform": "platform", + "regression": "regression", + "service": "service", + "state": "state", + } + + def __init__(self_, error_message: Union[str, UnsetType]=unset, error_type: Union[str, UnsetType]=unset, file_path: Union[str, UnsetType]=unset, first_seen: Union[int, UnsetType]=unset, first_seen_version: Union[str, UnsetType]=unset, function_name: Union[str, UnsetType]=unset, is_crash: Union[bool, UnsetType]=unset, languages: Union[List[IssueLanguage], UnsetType]=unset, last_seen: Union[int, UnsetType]=unset, last_seen_version: Union[str, UnsetType]=unset, platform: Union[IssuePlatform, UnsetType]=unset, regression: Union[IssueRegression, UnsetType]=unset, service: Union[str, UnsetType]=unset, state: Union[IssueState, UnsetType]=unset, **kwargs): + """ + Object containing the information of an issue. + + :param error_message: Error message associated with the issue. + :type error_message: str, optional + + :param error_type: Type of the error that matches the issue. + :type error_type: str, optional + + :param file_path: Path of the file where the issue occurred. + :type file_path: str, optional + + :param first_seen: Timestamp of the first seen error in milliseconds since the Unix epoch. + :type first_seen: int, optional + + :param first_seen_version: The application version (for example, git commit hash) where the issue was first observed. + :type first_seen_version: str, optional + + :param function_name: Name of the function where the issue occurred. + :type function_name: str, optional + + :param is_crash: Error is a crash. + :type is_crash: bool, optional + + :param languages: Array of programming languages associated with the issue. + :type languages: [IssueLanguage], optional + + :param last_seen: Timestamp of the last seen error in milliseconds since the Unix epoch. + :type last_seen: int, optional + + :param last_seen_version: The application version (for example, git commit hash) where the issue was last observed. + :type last_seen_version: str, optional + + :param platform: Platform associated with the issue. + :type platform: IssuePlatform, optional + + :param regression: Regression information for an issue that was previously resolved and then reopened. + :type regression: IssueRegression, optional + + :param service: Service name. + :type service: str, optional + + :param state: State of the issue + :type state: IssueState, optional + """ + if error_message is not unset: + kwargs["error_message"] = error_message + if error_type is not unset: + kwargs["error_type"] = error_type + if file_path is not unset: + kwargs["file_path"] = file_path + if first_seen is not unset: + kwargs["first_seen"] = first_seen + if first_seen_version is not unset: + kwargs["first_seen_version"] = first_seen_version + if function_name is not unset: + kwargs["function_name"] = function_name + if is_crash is not unset: + kwargs["is_crash"] = is_crash + if languages is not unset: + kwargs["languages"] = languages + if last_seen is not unset: + kwargs["last_seen"] = last_seen + if last_seen_version is not unset: + kwargs["last_seen_version"] = last_seen_version + if platform is not unset: + kwargs["platform"] = platform + if regression is not unset: + kwargs["regression"] = regression + if service is not unset: + kwargs["service"] = service + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_case.py b/datadog_api_client/v2/model/issue_case.py new file mode 100644 index 0000000000..9cbcbb4738 --- /dev/null +++ b/datadog_api_client/v2/model/issue_case.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_case_attributes import IssueCaseAttributes + from datadog_api_client.v2.model.issue_case_relationships import IssueCaseRelationships + from datadog_api_client.v2.model.issue_case_resource_type import IssueCaseResourceType + +class IssueCase(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_case_attributes import IssueCaseAttributes + from datadog_api_client.v2.model.issue_case_relationships import IssueCaseRelationships + from datadog_api_client.v2.model.issue_case_resource_type import IssueCaseResourceType + return { + "attributes": (IssueCaseAttributes,), + "id": (str,), + "relationships": (IssueCaseRelationships,), + "type": (IssueCaseResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IssueCaseAttributes, id: str, type: IssueCaseResourceType, relationships: Union[IssueCaseRelationships, UnsetType]=unset, **kwargs): + """ + The case attached to the issue. + + :param attributes: Object containing the information of a case. + :type attributes: IssueCaseAttributes + + :param id: Case identifier. + :type id: str + + :param relationships: Resources related to a case. + :type relationships: IssueCaseRelationships, optional + + :param type: Type of the object. + :type type: IssueCaseResourceType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_case_attributes.py b/datadog_api_client/v2/model/issue_case_attributes.py new file mode 100644 index 0000000000..5cc865bc53 --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_attributes.py @@ -0,0 +1,155 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_case_insight import IssueCaseInsight + from datadog_api_client.v2.model.issue_case_jira_issue import IssueCaseJiraIssue + from datadog_api_client.v2.model.issue_case_linear_issue import IssueCaseLinearIssue + from datadog_api_client.v2.model.case_priority import CasePriority + from datadog_api_client.v2.model.case_status import CaseStatus + +class IssueCaseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_case_insight import IssueCaseInsight + from datadog_api_client.v2.model.issue_case_jira_issue import IssueCaseJiraIssue + from datadog_api_client.v2.model.issue_case_linear_issue import IssueCaseLinearIssue + from datadog_api_client.v2.model.case_priority import CasePriority + from datadog_api_client.v2.model.case_status import CaseStatus + return { + "archived_at": (datetime,), + "closed_at": (datetime,), + "created_at": (datetime,), + "creation_source": (str,), + "description": (str,), + "due_date": (str,), + "insights": ([IssueCaseInsight],), + "jira_issue": (IssueCaseJiraIssue,), + "key": (str,), + "linear_issue": (IssueCaseLinearIssue,), + "modified_at": (datetime,), + "priority": (CasePriority,), + "status": (CaseStatus,), + "title": (str,), + "type": (str,), + } + attribute_map = { + "archived_at": "archived_at", + "closed_at": "closed_at", + "created_at": "created_at", + "creation_source": "creation_source", + "description": "description", + "due_date": "due_date", + "insights": "insights", + "jira_issue": "jira_issue", + "key": "key", + "linear_issue": "linear_issue", + "modified_at": "modified_at", + "priority": "priority", + "status": "status", + "title": "title", + "type": "type", + } + + def __init__(self_, archived_at: Union[datetime, UnsetType]=unset, closed_at: Union[datetime, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, creation_source: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, due_date: Union[str, UnsetType]=unset, insights: Union[List[IssueCaseInsight], UnsetType]=unset, jira_issue: Union[IssueCaseJiraIssue, UnsetType]=unset, key: Union[str, UnsetType]=unset, linear_issue: Union[IssueCaseLinearIssue, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, priority: Union[CasePriority, UnsetType]=unset, status: Union[CaseStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing the information of a case. + + :param archived_at: Timestamp of when the case was archived. + :type archived_at: datetime, optional + + :param closed_at: Timestamp of when the case was closed. + :type closed_at: datetime, optional + + :param created_at: Timestamp of when the case was created. + :type created_at: datetime, optional + + :param creation_source: Source of the case creation. + :type creation_source: str, optional + + :param description: Description of the case. + :type description: str, optional + + :param due_date: Due date of the case. + :type due_date: str, optional + + :param insights: Insights of the case. + :type insights: [IssueCaseInsight], optional + + :param jira_issue: Jira issue of the case. + :type jira_issue: IssueCaseJiraIssue, optional + + :param key: Key of the case. + :type key: str, optional + + :param linear_issue: Linear issue of the case. + :type linear_issue: IssueCaseLinearIssue, optional + + :param modified_at: Timestamp of when the case was last modified. + :type modified_at: datetime, optional + + :param priority: Case priority + :type priority: CasePriority, optional + + :param status: Deprecated way of representing the case status, which only supports OPEN, IN_PROGRESS, and CLOSED statuses. Use ``status_name`` instead. **Deprecated**. + :type status: CaseStatus, optional + + :param title: Title of the case. + :type title: str, optional + + :param type: Type of the case. + :type type: str, optional + """ + if archived_at is not unset: + kwargs["archived_at"] = archived_at + if closed_at is not unset: + kwargs["closed_at"] = closed_at + if created_at is not unset: + kwargs["created_at"] = created_at + if creation_source is not unset: + kwargs["creation_source"] = creation_source + if description is not unset: + kwargs["description"] = description + if due_date is not unset: + kwargs["due_date"] = due_date + if insights is not unset: + kwargs["insights"] = insights + if jira_issue is not unset: + kwargs["jira_issue"] = jira_issue + if key is not unset: + kwargs["key"] = key + if linear_issue is not unset: + kwargs["linear_issue"] = linear_issue + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if priority is not unset: + kwargs["priority"] = priority + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_case_insight.py b/datadog_api_client/v2/model/issue_case_insight.py new file mode 100644 index 0000000000..d654ba1b37 --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_insight.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IssueCaseInsight(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ref": (str,), + "resource_id": (str,), + "type": (str,), + } + attribute_map = { + "ref": "ref", + "resource_id": "resource_id", + "type": "type", + } + + def __init__(self_, ref: Union[str, UnsetType]=unset, resource_id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Insight of the case. + + :param ref: Reference of the insight. + :type ref: str, optional + + :param resource_id: Insight identifier. + :type resource_id: str, optional + + :param type: Type of the insight. + :type type: str, optional + """ + if ref is not unset: + kwargs["ref"] = ref + if resource_id is not unset: + kwargs["resource_id"] = resource_id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_case_jira_issue.py b/datadog_api_client/v2/model/issue_case_jira_issue.py new file mode 100644 index 0000000000..0f76c4aa7a --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_jira_issue.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_case_jira_issue_result import IssueCaseJiraIssueResult + +class IssueCaseJiraIssue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_case_jira_issue_result import IssueCaseJiraIssueResult + return { + "error_message": (str,), + "result": (IssueCaseJiraIssueResult,), + "status": (str,), + } + attribute_map = { + "error_message": "error_message", + "result": "result", + "status": "status", + } + + def __init__(self_, error_message: Union[str, UnsetType]=unset, result: Union[IssueCaseJiraIssueResult, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Jira issue of the case. + + :param error_message: Error message set when the Jira issue creation fails. + :type error_message: str, optional + + :param result: Contains the identifiers and URL for a successfully created Jira issue. + :type result: IssueCaseJiraIssueResult, optional + + :param status: Creation status of the Jira issue. + :type status: str, optional + """ + if error_message is not unset: + kwargs["error_message"] = error_message + if result is not unset: + kwargs["result"] = result + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_case_jira_issue_result.py b/datadog_api_client/v2/model/issue_case_jira_issue_result.py new file mode 100644 index 0000000000..feff0aec8f --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_jira_issue_result.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IssueCaseJiraIssueResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "issue_id": (str,), + "issue_key": (str,), + "issue_url": (str,), + "project_id": (str,), + "project_key": (str,), + } + attribute_map = { + "account_id": "account_id", + "issue_id": "issue_id", + "issue_key": "issue_key", + "issue_url": "issue_url", + "project_id": "project_id", + "project_key": "project_key", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, issue_id: Union[str, UnsetType]=unset, issue_key: Union[str, UnsetType]=unset, issue_url: Union[str, UnsetType]=unset, project_id: Union[str, UnsetType]=unset, project_key: Union[str, UnsetType]=unset, **kwargs): + """ + Contains the identifiers and URL for a successfully created Jira issue. + + :param account_id: Jira account identifier. + :type account_id: str, optional + + :param issue_id: Jira issue identifier. + :type issue_id: str, optional + + :param issue_key: Jira issue key. + :type issue_key: str, optional + + :param issue_url: Jira issue URL. + :type issue_url: str, optional + + :param project_id: Jira project identifier. + :type project_id: str, optional + + :param project_key: Jira project key. + :type project_key: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if issue_id is not unset: + kwargs["issue_id"] = issue_id + if issue_key is not unset: + kwargs["issue_key"] = issue_key + if issue_url is not unset: + kwargs["issue_url"] = issue_url + if project_id is not unset: + kwargs["project_id"] = project_id + if project_key is not unset: + kwargs["project_key"] = project_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_case_linear_issue.py b/datadog_api_client/v2/model/issue_case_linear_issue.py new file mode 100644 index 0000000000..c98ed07722 --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_linear_issue.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_case_linear_issue_result import IssueCaseLinearIssueResult + +class IssueCaseLinearIssue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_case_linear_issue_result import IssueCaseLinearIssueResult + return { + "error_message": (str,), + "result": (IssueCaseLinearIssueResult,), + "status": (str,), + } + attribute_map = { + "error_message": "error_message", + "result": "result", + "status": "status", + } + + def __init__(self_, error_message: Union[str, UnsetType]=unset, result: Union[IssueCaseLinearIssueResult, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Linear issue of the case. + + :param error_message: Error message set when the Linear issue creation fails. + :type error_message: str, optional + + :param result: Contains the identifiers and URL for a successfully created Linear issue. + :type result: IssueCaseLinearIssueResult, optional + + :param status: Creation status of the Linear issue. + :type status: str, optional + """ + if error_message is not unset: + kwargs["error_message"] = error_message + if result is not unset: + kwargs["result"] = result + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_case_linear_issue_result.py b/datadog_api_client/v2/model/issue_case_linear_issue_result.py new file mode 100644 index 0000000000..6145ced7dd --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_linear_issue_result.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IssueCaseLinearIssueResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "issue_id": (str,), + "issue_key": (str,), + "issue_url": (str,), + "team_id": (str,), + } + attribute_map = { + "account_id": "account_id", + "issue_id": "issue_id", + "issue_key": "issue_key", + "issue_url": "issue_url", + "team_id": "team_id", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, issue_id: Union[str, UnsetType]=unset, issue_key: Union[str, UnsetType]=unset, issue_url: Union[str, UnsetType]=unset, team_id: Union[str, UnsetType]=unset, **kwargs): + """ + Contains the identifiers and URL for a successfully created Linear issue. + + :param account_id: Linear account identifier. + :type account_id: str, optional + + :param issue_id: Linear issue identifier. + :type issue_id: str, optional + + :param issue_key: Linear issue key. + :type issue_key: str, optional + + :param issue_url: Linear issue URL. + :type issue_url: str, optional + + :param team_id: Linear team identifier. + :type team_id: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if issue_id is not unset: + kwargs["issue_id"] = issue_id + if issue_key is not unset: + kwargs["issue_key"] = issue_key + if issue_url is not unset: + kwargs["issue_url"] = issue_url + if team_id is not unset: + kwargs["team_id"] = team_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_case_reference.py b/datadog_api_client/v2/model/issue_case_reference.py new file mode 100644 index 0000000000..e727d6e399 --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_reference.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_case_resource_type import IssueCaseResourceType + +class IssueCaseReference(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_case_resource_type import IssueCaseResourceType + return { + "id": (str,), + "type": (IssueCaseResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IssueCaseResourceType, **kwargs): + """ + The case the issue is attached to. + + :param id: Case identifier. + :type id: str + + :param type: Type of the object. + :type type: IssueCaseResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_case_relationship.py b/datadog_api_client/v2/model/issue_case_relationship.py new file mode 100644 index 0000000000..8adaed72c6 --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_case_reference import IssueCaseReference + +class IssueCaseRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_case_reference import IssueCaseReference + return { + "data": (IssueCaseReference,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IssueCaseReference, **kwargs): + """ + Relationship between the issue and case. + + :param data: The case the issue is attached to. + :type data: IssueCaseReference + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/issue_case_relationships.py b/datadog_api_client/v2/model/issue_case_relationships.py new file mode 100644 index 0000000000..1d7d6bf572 --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_relationships.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + from datadog_api_client.v2.model.project_relationship import ProjectRelationship + +class IssueCaseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship + from datadog_api_client.v2.model.project_relationship import ProjectRelationship + return { + "assignee": (NullableUserRelationship,), + "created_by": (NullableUserRelationship,), + "modified_by": (NullableUserRelationship,), + "project": (ProjectRelationship,), + } + attribute_map = { + "assignee": "assignee", + "created_by": "created_by", + "modified_by": "modified_by", + "project": "project", + } + + def __init__(self_, assignee: Union[NullableUserRelationship, none_type, UnsetType]=unset, created_by: Union[NullableUserRelationship, none_type, UnsetType]=unset, modified_by: Union[NullableUserRelationship, none_type, UnsetType]=unset, project: Union[ProjectRelationship, UnsetType]=unset, **kwargs): + """ + Resources related to a case. + + :param assignee: Relationship to user. + :type assignee: NullableUserRelationship, none_type, optional + + :param created_by: Relationship to user. + :type created_by: NullableUserRelationship, none_type, optional + + :param modified_by: Relationship to user. + :type modified_by: NullableUserRelationship, none_type, optional + + :param project: Relationship to project. + :type project: ProjectRelationship, optional + """ + if assignee is not unset: + kwargs["assignee"] = assignee + if created_by is not unset: + kwargs["created_by"] = created_by + if modified_by is not unset: + kwargs["modified_by"] = modified_by + if project is not unset: + kwargs["project"] = project + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_case_resource_type.py b/datadog_api_client/v2/model/issue_case_resource_type.py new file mode 100644 index 0000000000..21efb66a8a --- /dev/null +++ b/datadog_api_client/v2/model/issue_case_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssueCaseResourceType(ModelSimple): + """ + Type of the object. + + :param value: If omitted defaults to "case". Must be one of ["case"]. + :type value: str + """ + + allowed_values = { + "case", + } + CASE: ClassVar["IssueCaseResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssueCaseResourceType.CASE = IssueCaseResourceType("case") diff --git a/datadog_api_client/v2/model/issue_included.py b/datadog_api_client/v2/model/issue_included.py new file mode 100644 index 0000000000..ba2ba7a5f8 --- /dev/null +++ b/datadog_api_client/v2/model/issue_included.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IssueIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An array of related resources, returned when the ``include`` query parameter is used. + + :param attributes: Object containing the information of a case. + :type attributes: IssueCaseAttributes + + :param id: Case identifier. + :type id: str + + :param relationships: Resources related to a case. + :type relationships: IssueCaseRelationships, optional + + :param type: Type of the object. + :type type: IssueCaseResourceType + """ + 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.issue_case import IssueCase + from datadog_api_client.v2.model.issue_user import IssueUser + from datadog_api_client.v2.model.issue_team import IssueTeam + return { + "oneOf": [ + IssueCase, + IssueUser, + IssueTeam, + ], + } diff --git a/datadog_api_client/v2/model/issue_language.py b/datadog_api_client/v2/model/issue_language.py new file mode 100644 index 0000000000..c78add92c0 --- /dev/null +++ b/datadog_api_client/v2/model/issue_language.py @@ -0,0 +1,123 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssueLanguage(ModelSimple): + """ + Programming language associated with the issue. + + :param value: Must be one of ["BRIGHTSCRIPT", "C", "C_PLUS_PLUS", "C_SHARP", "CLOJURE", "DOT_NET", "ELIXIR", "ERLANG", "GO", "GROOVY", "HASKELL", "HCL", "JAVA", "JAVASCRIPT", "JVM", "KOTLIN", "OBJECTIVE_C", "PERL", "PHP", "PYTHON", "RUBY", "RUST", "SCALA", "SWIFT", "TERRAFORM", "TYPESCRIPT", "UNKNOWN"]. + :type value: str + """ + + allowed_values = { + "BRIGHTSCRIPT", + "C", + "C_PLUS_PLUS", + "C_SHARP", + "CLOJURE", + "DOT_NET", + "ELIXIR", + "ERLANG", + "GO", + "GROOVY", + "HASKELL", + "HCL", + "JAVA", + "JAVASCRIPT", + "JVM", + "KOTLIN", + "OBJECTIVE_C", + "PERL", + "PHP", + "PYTHON", + "RUBY", + "RUST", + "SCALA", + "SWIFT", + "TERRAFORM", + "TYPESCRIPT", + "UNKNOWN", + } + BRIGHTSCRIPT: ClassVar["IssueLanguage"] + C: ClassVar["IssueLanguage"] + C_PLUS_PLUS: ClassVar["IssueLanguage"] + C_SHARP: ClassVar["IssueLanguage"] + CLOJURE: ClassVar["IssueLanguage"] + DOT_NET: ClassVar["IssueLanguage"] + ELIXIR: ClassVar["IssueLanguage"] + ERLANG: ClassVar["IssueLanguage"] + GO: ClassVar["IssueLanguage"] + GROOVY: ClassVar["IssueLanguage"] + HASKELL: ClassVar["IssueLanguage"] + HCL: ClassVar["IssueLanguage"] + JAVA: ClassVar["IssueLanguage"] + JAVASCRIPT: ClassVar["IssueLanguage"] + JVM: ClassVar["IssueLanguage"] + KOTLIN: ClassVar["IssueLanguage"] + OBJECTIVE_C: ClassVar["IssueLanguage"] + PERL: ClassVar["IssueLanguage"] + PHP: ClassVar["IssueLanguage"] + PYTHON: ClassVar["IssueLanguage"] + RUBY: ClassVar["IssueLanguage"] + RUST: ClassVar["IssueLanguage"] + SCALA: ClassVar["IssueLanguage"] + SWIFT: ClassVar["IssueLanguage"] + TERRAFORM: ClassVar["IssueLanguage"] + TYPESCRIPT: ClassVar["IssueLanguage"] + UNKNOWN: ClassVar["IssueLanguage"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssueLanguage.BRIGHTSCRIPT = IssueLanguage("BRIGHTSCRIPT") +IssueLanguage.C = IssueLanguage("C") +IssueLanguage.C_PLUS_PLUS = IssueLanguage("C_PLUS_PLUS") +IssueLanguage.C_SHARP = IssueLanguage("C_SHARP") +IssueLanguage.CLOJURE = IssueLanguage("CLOJURE") +IssueLanguage.DOT_NET = IssueLanguage("DOT_NET") +IssueLanguage.ELIXIR = IssueLanguage("ELIXIR") +IssueLanguage.ERLANG = IssueLanguage("ERLANG") +IssueLanguage.GO = IssueLanguage("GO") +IssueLanguage.GROOVY = IssueLanguage("GROOVY") +IssueLanguage.HASKELL = IssueLanguage("HASKELL") +IssueLanguage.HCL = IssueLanguage("HCL") +IssueLanguage.JAVA = IssueLanguage("JAVA") +IssueLanguage.JAVASCRIPT = IssueLanguage("JAVASCRIPT") +IssueLanguage.JVM = IssueLanguage("JVM") +IssueLanguage.KOTLIN = IssueLanguage("KOTLIN") +IssueLanguage.OBJECTIVE_C = IssueLanguage("OBJECTIVE_C") +IssueLanguage.PERL = IssueLanguage("PERL") +IssueLanguage.PHP = IssueLanguage("PHP") +IssueLanguage.PYTHON = IssueLanguage("PYTHON") +IssueLanguage.RUBY = IssueLanguage("RUBY") +IssueLanguage.RUST = IssueLanguage("RUST") +IssueLanguage.SCALA = IssueLanguage("SCALA") +IssueLanguage.SWIFT = IssueLanguage("SWIFT") +IssueLanguage.TERRAFORM = IssueLanguage("TERRAFORM") +IssueLanguage.TYPESCRIPT = IssueLanguage("TYPESCRIPT") +IssueLanguage.UNKNOWN = IssueLanguage("UNKNOWN") diff --git a/datadog_api_client/v2/model/issue_platform.py b/datadog_api_client/v2/model/issue_platform.py new file mode 100644 index 0000000000..de200a25af --- /dev/null +++ b/datadog_api_client/v2/model/issue_platform.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssuePlatform(ModelSimple): + """ + Platform associated with the issue. + + :param value: Must be one of ["ANDROID", "BACKEND", "BROWSER", "FLUTTER", "IOS", "REACT_NATIVE", "ROKU", "UNKNOWN"]. + :type value: str + """ + + allowed_values = { + "ANDROID", + "BACKEND", + "BROWSER", + "FLUTTER", + "IOS", + "REACT_NATIVE", + "ROKU", + "UNKNOWN", + } + ANDROID: ClassVar["IssuePlatform"] + BACKEND: ClassVar["IssuePlatform"] + BROWSER: ClassVar["IssuePlatform"] + FLUTTER: ClassVar["IssuePlatform"] + IOS: ClassVar["IssuePlatform"] + REACT_NATIVE: ClassVar["IssuePlatform"] + ROKU: ClassVar["IssuePlatform"] + UNKNOWN: ClassVar["IssuePlatform"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssuePlatform.ANDROID = IssuePlatform("ANDROID") +IssuePlatform.BACKEND = IssuePlatform("BACKEND") +IssuePlatform.BROWSER = IssuePlatform("BROWSER") +IssuePlatform.FLUTTER = IssuePlatform("FLUTTER") +IssuePlatform.IOS = IssuePlatform("IOS") +IssuePlatform.REACT_NATIVE = IssuePlatform("REACT_NATIVE") +IssuePlatform.ROKU = IssuePlatform("ROKU") +IssuePlatform.UNKNOWN = IssuePlatform("UNKNOWN") diff --git a/datadog_api_client/v2/model/issue_reference.py b/datadog_api_client/v2/model/issue_reference.py new file mode 100644 index 0000000000..36e3a51439 --- /dev/null +++ b/datadog_api_client/v2/model/issue_reference.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_type import IssueType + +class IssueReference(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_type import IssueType + return { + "id": (str,), + "type": (IssueType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IssueType, **kwargs): + """ + The issue the search result corresponds to. + + :param id: Issue identifier. + :type id: str + + :param type: Type of the object. + :type type: IssueType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_regression.py b/datadog_api_client/v2/model/issue_regression.py new file mode 100644 index 0000000000..b64c148ae3 --- /dev/null +++ b/datadog_api_client/v2/model/issue_regression.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IssueRegression(ModelNormal): + @cached_property + def openapi_types(_): + return { + "regressed_at": (datetime,), + "regressed_at_version": (str,), + "resolved_at": (datetime,), + } + attribute_map = { + "regressed_at": "regressed_at", + "regressed_at_version": "regressed_at_version", + "resolved_at": "resolved_at", + } + + def __init__(self_, regressed_at: datetime, resolved_at: datetime, regressed_at_version: Union[str, UnsetType]=unset, **kwargs): + """ + Regression information for an issue that was previously resolved and then reopened. + + :param regressed_at: Timestamp when the issue was reopened (regressed). + :type regressed_at: datetime + + :param regressed_at_version: Application version where the regression was observed. + :type regressed_at_version: str, optional + + :param resolved_at: Timestamp when the issue was resolved before the regression. + :type resolved_at: datetime + """ + if regressed_at_version is not unset: + kwargs["regressed_at_version"] = regressed_at_version + super().__init__(kwargs) + + + self_.regressed_at = regressed_at + self_.resolved_at = resolved_at diff --git a/datadog_api_client/v2/model/issue_relationships.py b/datadog_api_client/v2/model/issue_relationships.py new file mode 100644 index 0000000000..2455bedf82 --- /dev/null +++ b/datadog_api_client/v2/model/issue_relationships.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_assignee_relationship import IssueAssigneeRelationship + from datadog_api_client.v2.model.issue_case_relationship import IssueCaseRelationship + from datadog_api_client.v2.model.issue_team_owners_relationship import IssueTeamOwnersRelationship + +class IssueRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_assignee_relationship import IssueAssigneeRelationship + from datadog_api_client.v2.model.issue_case_relationship import IssueCaseRelationship + from datadog_api_client.v2.model.issue_team_owners_relationship import IssueTeamOwnersRelationship + return { + "assignee": (IssueAssigneeRelationship,), + "case": (IssueCaseRelationship,), + "team_owners": (IssueTeamOwnersRelationship,), + } + attribute_map = { + "assignee": "assignee", + "case": "case", + "team_owners": "team_owners", + } + + def __init__(self_, assignee: Union[IssueAssigneeRelationship, UnsetType]=unset, case: Union[IssueCaseRelationship, UnsetType]=unset, team_owners: Union[IssueTeamOwnersRelationship, UnsetType]=unset, **kwargs): + """ + Relationship between the issue and an assignee, case and/or teams. + + :param assignee: Relationship between the issue and assignee. + :type assignee: IssueAssigneeRelationship, optional + + :param case: Relationship between the issue and case. + :type case: IssueCaseRelationship, optional + + :param team_owners: Relationship between the issue and teams. + :type team_owners: IssueTeamOwnersRelationship, optional + """ + if assignee is not unset: + kwargs["assignee"] = assignee + if case is not unset: + kwargs["case"] = case + if team_owners is not unset: + kwargs["team_owners"] = team_owners + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_response.py b/datadog_api_client/v2/model/issue_response.py new file mode 100644 index 0000000000..ffa1f2a82f --- /dev/null +++ b/datadog_api_client/v2/model/issue_response.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue import Issue + from datadog_api_client.v2.model.issue_included import IssueIncluded + from datadog_api_client.v2.model.issue_case import IssueCase + from datadog_api_client.v2.model.issue_user import IssueUser + from datadog_api_client.v2.model.issue_team import IssueTeam + +class IssueResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue import Issue + from datadog_api_client.v2.model.issue_included import IssueIncluded + return { + "data": (Issue,), + "included": ([IssueIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[Issue, UnsetType]=unset, included: Union[List[Union[IssueIncluded, IssueCase, IssueUser, IssueTeam]], UnsetType]=unset, **kwargs): + """ + Response containing error tracking issue data. + + :param data: The issue matching the request. + :type data: Issue, optional + + :param included: Array of resources related to the issue. + :type included: [IssueIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_state.py b/datadog_api_client/v2/model/issue_state.py new file mode 100644 index 0000000000..b6be54c0e2 --- /dev/null +++ b/datadog_api_client/v2/model/issue_state.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssueState(ModelSimple): + """ + State of the issue + + :param value: Must be one of ["OPEN", "ACKNOWLEDGED", "RESOLVED", "IGNORED", "EXCLUDED"]. + :type value: str + """ + + allowed_values = { + "OPEN", + "ACKNOWLEDGED", + "RESOLVED", + "IGNORED", + "EXCLUDED", + } + OPEN: ClassVar["IssueState"] + ACKNOWLEDGED: ClassVar["IssueState"] + RESOLVED: ClassVar["IssueState"] + IGNORED: ClassVar["IssueState"] + EXCLUDED: ClassVar["IssueState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssueState.OPEN = IssueState("OPEN") +IssueState.ACKNOWLEDGED = IssueState("ACKNOWLEDGED") +IssueState.RESOLVED = IssueState("RESOLVED") +IssueState.IGNORED = IssueState("IGNORED") +IssueState.EXCLUDED = IssueState("EXCLUDED") diff --git a/datadog_api_client/v2/model/issue_team.py b/datadog_api_client/v2/model/issue_team.py new file mode 100644 index 0000000000..4de23f071b --- /dev/null +++ b/datadog_api_client/v2/model/issue_team.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_team_attributes import IssueTeamAttributes + from datadog_api_client.v2.model.issue_team_type import IssueTeamType + +class IssueTeam(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_team_attributes import IssueTeamAttributes + from datadog_api_client.v2.model.issue_team_type import IssueTeamType + return { + "attributes": (IssueTeamAttributes,), + "id": (str,), + "type": (IssueTeamType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IssueTeamAttributes, id: str, type: IssueTeamType, **kwargs): + """ + A team that owns an issue. + + :param attributes: Object containing the information of a team. + :type attributes: IssueTeamAttributes + + :param id: Team identifier. + :type id: str + + :param type: Type of the object. + :type type: IssueTeamType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_team_attributes.py b/datadog_api_client/v2/model/issue_team_attributes.py new file mode 100644 index 0000000000..bca7578f05 --- /dev/null +++ b/datadog_api_client/v2/model/issue_team_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IssueTeamAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str,), + "summary": (str,), + } + attribute_map = { + "handle": "handle", + "name": "name", + "summary": "summary", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, summary: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing the information of a team. + + :param handle: The team's identifier. + :type handle: str, optional + + :param name: The name of the team. + :type name: str, optional + + :param summary: A brief summary of the team, derived from its description. + :type summary: str, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + if summary is not unset: + kwargs["summary"] = summary + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_team_owners_relationship.py b/datadog_api_client/v2/model/issue_team_owners_relationship.py new file mode 100644 index 0000000000..8e4ed20646 --- /dev/null +++ b/datadog_api_client/v2/model/issue_team_owners_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_team_reference import IssueTeamReference + +class IssueTeamOwnersRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_team_reference import IssueTeamReference + return { + "data": ([IssueTeamReference],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[IssueTeamReference], **kwargs): + """ + Relationship between the issue and teams. + + :param data: Array of teams that are owners of the issue. + :type data: [IssueTeamReference] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/issue_team_reference.py b/datadog_api_client/v2/model/issue_team_reference.py new file mode 100644 index 0000000000..ff75539789 --- /dev/null +++ b/datadog_api_client/v2/model/issue_team_reference.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_team_type import IssueTeamType + +class IssueTeamReference(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_team_type import IssueTeamType + return { + "id": (str,), + "type": (IssueTeamType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IssueTeamType, **kwargs): + """ + A team that owns the issue. + + :param id: Team identifier. + :type id: str + + :param type: Type of the object. + :type type: IssueTeamType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_team_type.py b/datadog_api_client/v2/model/issue_team_type.py new file mode 100644 index 0000000000..4517059bf0 --- /dev/null +++ b/datadog_api_client/v2/model/issue_team_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssueTeamType(ModelSimple): + """ + Type of the object. + + :param value: If omitted defaults to "team". Must be one of ["team"]. + :type value: str + """ + + allowed_values = { + "team", + } + TEAM: ClassVar["IssueTeamType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssueTeamType.TEAM = IssueTeamType("team") diff --git a/datadog_api_client/v2/model/issue_type.py b/datadog_api_client/v2/model/issue_type.py new file mode 100644 index 0000000000..3f2c90032f --- /dev/null +++ b/datadog_api_client/v2/model/issue_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssueType(ModelSimple): + """ + Type of the object. + + :param value: If omitted defaults to "issue". Must be one of ["issue"]. + :type value: str + """ + + allowed_values = { + "issue", + } + ISSUE: ClassVar["IssueType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssueType.ISSUE = IssueType("issue") diff --git a/datadog_api_client/v2/model/issue_update_assignee_request.py b/datadog_api_client/v2/model/issue_update_assignee_request.py new file mode 100644 index 0000000000..7b148abdb3 --- /dev/null +++ b/datadog_api_client/v2/model/issue_update_assignee_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_update_assignee_request_data import IssueUpdateAssigneeRequestData + +class IssueUpdateAssigneeRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_update_assignee_request_data import IssueUpdateAssigneeRequestData + return { + "data": (IssueUpdateAssigneeRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IssueUpdateAssigneeRequestData, **kwargs): + """ + Update issue assignee request payload. + + :param data: Update issue assignee request. + :type data: IssueUpdateAssigneeRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/issue_update_assignee_request_data.py b/datadog_api_client/v2/model/issue_update_assignee_request_data.py new file mode 100644 index 0000000000..9e1c98a675 --- /dev/null +++ b/datadog_api_client/v2/model/issue_update_assignee_request_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_update_assignee_request_data_type import IssueUpdateAssigneeRequestDataType + +class IssueUpdateAssigneeRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_update_assignee_request_data_type import IssueUpdateAssigneeRequestDataType + return { + "id": (str,), + "type": (IssueUpdateAssigneeRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IssueUpdateAssigneeRequestDataType, **kwargs): + """ + Update issue assignee request. + + :param id: User identifier. + :type id: str + + :param type: Type of the object. + :type type: IssueUpdateAssigneeRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_update_assignee_request_data_type.py b/datadog_api_client/v2/model/issue_update_assignee_request_data_type.py new file mode 100644 index 0000000000..89638e739e --- /dev/null +++ b/datadog_api_client/v2/model/issue_update_assignee_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssueUpdateAssigneeRequestDataType(ModelSimple): + """ + Type of the object. + + :param value: If omitted defaults to "assignee". Must be one of ["assignee"]. + :type value: str + """ + + allowed_values = { + "assignee", + } + ASSIGNEE: ClassVar["IssueUpdateAssigneeRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssueUpdateAssigneeRequestDataType.ASSIGNEE = IssueUpdateAssigneeRequestDataType("assignee") diff --git a/datadog_api_client/v2/model/issue_update_state_request.py b/datadog_api_client/v2/model/issue_update_state_request.py new file mode 100644 index 0000000000..79bcd51357 --- /dev/null +++ b/datadog_api_client/v2/model/issue_update_state_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_update_state_request_data import IssueUpdateStateRequestData + +class IssueUpdateStateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_update_state_request_data import IssueUpdateStateRequestData + return { + "data": (IssueUpdateStateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IssueUpdateStateRequestData, **kwargs): + """ + Update issue state request payload. + + :param data: Update issue state request. + :type data: IssueUpdateStateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/issue_update_state_request_data.py b/datadog_api_client/v2/model/issue_update_state_request_data.py new file mode 100644 index 0000000000..b500076059 --- /dev/null +++ b/datadog_api_client/v2/model/issue_update_state_request_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_update_state_request_data_attributes import IssueUpdateStateRequestDataAttributes + from datadog_api_client.v2.model.issue_update_state_request_data_type import IssueUpdateStateRequestDataType + +class IssueUpdateStateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_update_state_request_data_attributes import IssueUpdateStateRequestDataAttributes + from datadog_api_client.v2.model.issue_update_state_request_data_type import IssueUpdateStateRequestDataType + return { + "attributes": (IssueUpdateStateRequestDataAttributes,), + "id": (str,), + "type": (IssueUpdateStateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IssueUpdateStateRequestDataAttributes, id: str, type: IssueUpdateStateRequestDataType, **kwargs): + """ + Update issue state request. + + :param attributes: Object describing an issue state update request. + :type attributes: IssueUpdateStateRequestDataAttributes + + :param id: Issue identifier. + :type id: str + + :param type: Type of the object. + :type type: IssueUpdateStateRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_update_state_request_data_attributes.py b/datadog_api_client/v2/model/issue_update_state_request_data_attributes.py new file mode 100644 index 0000000000..cfb43ce46d --- /dev/null +++ b/datadog_api_client/v2/model/issue_update_state_request_data_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_state import IssueState + +class IssueUpdateStateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_state import IssueState + return { + "state": (IssueState,), + } + attribute_map = { + "state": "state", + } + + def __init__(self_, state: IssueState, **kwargs): + """ + Object describing an issue state update request. + + :param state: State of the issue + :type state: IssueState + """ + super().__init__(kwargs) + + + self_.state = state diff --git a/datadog_api_client/v2/model/issue_update_state_request_data_type.py b/datadog_api_client/v2/model/issue_update_state_request_data_type.py new file mode 100644 index 0000000000..392278bc35 --- /dev/null +++ b/datadog_api_client/v2/model/issue_update_state_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssueUpdateStateRequestDataType(ModelSimple): + """ + Type of the object. + + :param value: If omitted defaults to "error_tracking_issue". Must be one of ["error_tracking_issue"]. + :type value: str + """ + + allowed_values = { + "error_tracking_issue", + } + ERROR_TRACKING_ISSUE: ClassVar["IssueUpdateStateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssueUpdateStateRequestDataType.ERROR_TRACKING_ISSUE = IssueUpdateStateRequestDataType("error_tracking_issue") diff --git a/datadog_api_client/v2/model/issue_user.py b/datadog_api_client/v2/model/issue_user.py new file mode 100644 index 0000000000..b2835b3dc0 --- /dev/null +++ b/datadog_api_client/v2/model/issue_user.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_user_attributes import IssueUserAttributes + from datadog_api_client.v2.model.issue_user_type import IssueUserType + +class IssueUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_user_attributes import IssueUserAttributes + from datadog_api_client.v2.model.issue_user_type import IssueUserType + return { + "attributes": (IssueUserAttributes,), + "id": (str,), + "type": (IssueUserType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: IssueUserAttributes, id: str, type: IssueUserType, **kwargs): + """ + The user to whom the issue is assigned. + + :param attributes: Object containing the information of a user. + :type attributes: IssueUserAttributes + + :param id: User identifier. + :type id: str + + :param type: Type of the object + :type type: IssueUserType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_user_attributes.py b/datadog_api_client/v2/model/issue_user_attributes.py new file mode 100644 index 0000000000..b66debe7de --- /dev/null +++ b/datadog_api_client/v2/model/issue_user_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IssueUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "name": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing the information of a user. + + :param email: Email of the user. + :type email: str, optional + + :param handle: Handle of the user. + :type handle: str, optional + + :param name: Name of the user. + :type name: str, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issue_user_reference.py b/datadog_api_client/v2/model/issue_user_reference.py new file mode 100644 index 0000000000..82c23c9df2 --- /dev/null +++ b/datadog_api_client/v2/model/issue_user_reference.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_user_type import IssueUserType + +class IssueUserReference(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_user_type import IssueUserType + return { + "id": (str,), + "type": (IssueUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IssueUserType, **kwargs): + """ + The user the issue is assigned to. + + :param id: User identifier. + :type id: str + + :param type: Type of the object + :type type: IssueUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issue_user_type.py b/datadog_api_client/v2/model/issue_user_type.py new file mode 100644 index 0000000000..e42e3799e9 --- /dev/null +++ b/datadog_api_client/v2/model/issue_user_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssueUserType(ModelSimple): + """ + Type of the object + + :param value: If omitted defaults to "user". Must be one of ["user"]. + :type value: str + """ + + allowed_values = { + "user", + } + USER: ClassVar["IssueUserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssueUserType.USER = IssueUserType("user") diff --git a/datadog_api_client/v2/model/issues_search_request.py b/datadog_api_client/v2/model/issues_search_request.py new file mode 100644 index 0000000000..156bab9e4a --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issues_search_request_data import IssuesSearchRequestData + +class IssuesSearchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issues_search_request_data import IssuesSearchRequestData + return { + "data": (IssuesSearchRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IssuesSearchRequestData, **kwargs): + """ + Search issues request payload. + + :param data: Search issues request. + :type data: IssuesSearchRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/issues_search_request_data.py b/datadog_api_client/v2/model/issues_search_request_data.py new file mode 100644 index 0000000000..1d8c2fc4ac --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issues_search_request_data_attributes import IssuesSearchRequestDataAttributes + from datadog_api_client.v2.model.issues_search_request_data_type import IssuesSearchRequestDataType + +class IssuesSearchRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issues_search_request_data_attributes import IssuesSearchRequestDataAttributes + from datadog_api_client.v2.model.issues_search_request_data_type import IssuesSearchRequestDataType + return { + "attributes": (IssuesSearchRequestDataAttributes,), + "type": (IssuesSearchRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: IssuesSearchRequestDataAttributes, type: IssuesSearchRequestDataType, **kwargs): + """ + Search issues request. + + :param attributes: Object describing a search issue request. + :type attributes: IssuesSearchRequestDataAttributes + + :param type: Type of the object. + :type type: IssuesSearchRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/issues_search_request_data_attributes.py b/datadog_api_client/v2/model/issues_search_request_data_attributes.py new file mode 100644 index 0000000000..1f310645d1 --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_request_data_attributes.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issues_search_request_data_attributes_order_by import IssuesSearchRequestDataAttributesOrderBy + from datadog_api_client.v2.model.issues_search_request_data_attributes_persona import IssuesSearchRequestDataAttributesPersona + from datadog_api_client.v2.model.issue_state import IssueState + from datadog_api_client.v2.model.issues_search_request_data_attributes_track import IssuesSearchRequestDataAttributesTrack + +class IssuesSearchRequestDataAttributes(ModelNormal): + validations = { + "assignee_ids": { + "max_items": 50, + }, + "states": { + "max_items": 20, + }, + "team_ids": { + "max_items": 50, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issues_search_request_data_attributes_order_by import IssuesSearchRequestDataAttributesOrderBy + from datadog_api_client.v2.model.issues_search_request_data_attributes_persona import IssuesSearchRequestDataAttributesPersona + from datadog_api_client.v2.model.issue_state import IssueState + from datadog_api_client.v2.model.issues_search_request_data_attributes_track import IssuesSearchRequestDataAttributesTrack + return { + "assignee_ids": ([UUID],), + "_from": (int,), + "order_by": (IssuesSearchRequestDataAttributesOrderBy,), + "persona": (IssuesSearchRequestDataAttributesPersona,), + "query": (str,), + "states": ([IssueState],), + "team_ids": ([UUID],), + "to": (int,), + "track": (IssuesSearchRequestDataAttributesTrack,), + } + attribute_map = { + "assignee_ids": "assignee_ids", + "_from": "from", + "order_by": "order_by", + "persona": "persona", + "query": "query", + "states": "states", + "team_ids": "team_ids", + "to": "to", + "track": "track", + } + + def __init__(self_, _from: int, query: str, to: int, assignee_ids: Union[List[UUID], UnsetType]=unset, order_by: Union[IssuesSearchRequestDataAttributesOrderBy, UnsetType]=unset, persona: Union[IssuesSearchRequestDataAttributesPersona, UnsetType]=unset, states: Union[List[IssueState], UnsetType]=unset, team_ids: Union[List[UUID], UnsetType]=unset, track: Union[IssuesSearchRequestDataAttributesTrack, UnsetType]=unset, **kwargs): + """ + Object describing a search issue request. + + :param assignee_ids: Filter issues by assignee IDs. Multiple values are combined with OR logic. + :type assignee_ids: [UUID], optional + + :param _from: Start date (inclusive) of the query in milliseconds since the Unix epoch. + :type _from: int + + :param order_by: The attribute to sort the search results by. + :type order_by: IssuesSearchRequestDataAttributesOrderBy, optional + + :param persona: Persona for the search. Either track(s) or persona(s) must be specified. + :type persona: IssuesSearchRequestDataAttributesPersona, optional + + :param query: Search query following the event search syntax. + :type query: str + + :param states: Filter issues by state. Multiple values are combined with OR logic. + :type states: [IssueState], optional + + :param team_ids: Filter issues by team IDs. Multiple values are combined with OR logic. + :type team_ids: [UUID], optional + + :param to: End date (exclusive) of the query in milliseconds since the Unix epoch. + :type to: int + + :param track: Track of the events to query. Either track(s) or persona(s) must be specified. + :type track: IssuesSearchRequestDataAttributesTrack, optional + """ + if assignee_ids is not unset: + kwargs["assignee_ids"] = assignee_ids + if order_by is not unset: + kwargs["order_by"] = order_by + if persona is not unset: + kwargs["persona"] = persona + if states is not unset: + kwargs["states"] = states + if team_ids is not unset: + kwargs["team_ids"] = team_ids + if track is not unset: + kwargs["track"] = track + super().__init__(kwargs) + + + self_._from = _from + self_.query = query + self_.to = to diff --git a/datadog_api_client/v2/model/issues_search_request_data_attributes_order_by.py b/datadog_api_client/v2/model/issues_search_request_data_attributes_order_by.py new file mode 100644 index 0000000000..4748a5e472 --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_request_data_attributes_order_by.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssuesSearchRequestDataAttributesOrderBy(ModelSimple): + """ + The attribute to sort the search results by. + + :param value: Must be one of ["TOTAL_COUNT", "FIRST_SEEN", "IMPACTED_SESSIONS", "PRIORITY"]. + :type value: str + """ + + allowed_values = { + "TOTAL_COUNT", + "FIRST_SEEN", + "IMPACTED_SESSIONS", + "PRIORITY", + } + TOTAL_COUNT: ClassVar["IssuesSearchRequestDataAttributesOrderBy"] + FIRST_SEEN: ClassVar["IssuesSearchRequestDataAttributesOrderBy"] + IMPACTED_SESSIONS: ClassVar["IssuesSearchRequestDataAttributesOrderBy"] + PRIORITY: ClassVar["IssuesSearchRequestDataAttributesOrderBy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssuesSearchRequestDataAttributesOrderBy.TOTAL_COUNT = IssuesSearchRequestDataAttributesOrderBy("TOTAL_COUNT") +IssuesSearchRequestDataAttributesOrderBy.FIRST_SEEN = IssuesSearchRequestDataAttributesOrderBy("FIRST_SEEN") +IssuesSearchRequestDataAttributesOrderBy.IMPACTED_SESSIONS = IssuesSearchRequestDataAttributesOrderBy("IMPACTED_SESSIONS") +IssuesSearchRequestDataAttributesOrderBy.PRIORITY = IssuesSearchRequestDataAttributesOrderBy("PRIORITY") diff --git a/datadog_api_client/v2/model/issues_search_request_data_attributes_persona.py b/datadog_api_client/v2/model/issues_search_request_data_attributes_persona.py new file mode 100644 index 0000000000..fc9af560f8 --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_request_data_attributes_persona.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssuesSearchRequestDataAttributesPersona(ModelSimple): + """ + Persona for the search. Either track(s) or persona(s) must be specified. + + :param value: Must be one of ["ALL", "BROWSER", "MOBILE", "BACKEND"]. + :type value: str + """ + + allowed_values = { + "ALL", + "BROWSER", + "MOBILE", + "BACKEND", + } + ALL: ClassVar["IssuesSearchRequestDataAttributesPersona"] + BROWSER: ClassVar["IssuesSearchRequestDataAttributesPersona"] + MOBILE: ClassVar["IssuesSearchRequestDataAttributesPersona"] + BACKEND: ClassVar["IssuesSearchRequestDataAttributesPersona"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssuesSearchRequestDataAttributesPersona.ALL = IssuesSearchRequestDataAttributesPersona("ALL") +IssuesSearchRequestDataAttributesPersona.BROWSER = IssuesSearchRequestDataAttributesPersona("BROWSER") +IssuesSearchRequestDataAttributesPersona.MOBILE = IssuesSearchRequestDataAttributesPersona("MOBILE") +IssuesSearchRequestDataAttributesPersona.BACKEND = IssuesSearchRequestDataAttributesPersona("BACKEND") diff --git a/datadog_api_client/v2/model/issues_search_request_data_attributes_track.py b/datadog_api_client/v2/model/issues_search_request_data_attributes_track.py new file mode 100644 index 0000000000..eaeb3d4cbf --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_request_data_attributes_track.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssuesSearchRequestDataAttributesTrack(ModelSimple): + """ + Track of the events to query. Either track(s) or persona(s) must be specified. + + :param value: Must be one of ["trace", "logs", "rum"]. + :type value: str + """ + + allowed_values = { + "trace", + "logs", + "rum", + } + TRACE: ClassVar["IssuesSearchRequestDataAttributesTrack"] + LOGS: ClassVar["IssuesSearchRequestDataAttributesTrack"] + RUM: ClassVar["IssuesSearchRequestDataAttributesTrack"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssuesSearchRequestDataAttributesTrack.TRACE = IssuesSearchRequestDataAttributesTrack("trace") +IssuesSearchRequestDataAttributesTrack.LOGS = IssuesSearchRequestDataAttributesTrack("logs") +IssuesSearchRequestDataAttributesTrack.RUM = IssuesSearchRequestDataAttributesTrack("rum") diff --git a/datadog_api_client/v2/model/issues_search_request_data_type.py b/datadog_api_client/v2/model/issues_search_request_data_type.py new file mode 100644 index 0000000000..57d43a7601 --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssuesSearchRequestDataType(ModelSimple): + """ + Type of the object. + + :param value: If omitted defaults to "search_request". Must be one of ["search_request"]. + :type value: str + """ + + allowed_values = { + "search_request", + } + SEARCH_REQUEST: ClassVar["IssuesSearchRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssuesSearchRequestDataType.SEARCH_REQUEST = IssuesSearchRequestDataType("search_request") diff --git a/datadog_api_client/v2/model/issues_search_response.py b/datadog_api_client/v2/model/issues_search_response.py new file mode 100644 index 0000000000..ac8aa2e654 --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issues_search_result import IssuesSearchResult + from datadog_api_client.v2.model.issues_search_result_included import IssuesSearchResultIncluded + from datadog_api_client.v2.model.issue import Issue + from datadog_api_client.v2.model.case import Case + from datadog_api_client.v2.model.issue_user import IssueUser + from datadog_api_client.v2.model.issue_team import IssueTeam + +class IssuesSearchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issues_search_result import IssuesSearchResult + from datadog_api_client.v2.model.issues_search_result_included import IssuesSearchResultIncluded + return { + "data": ([IssuesSearchResult],), + "included": ([IssuesSearchResultIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[List[IssuesSearchResult], UnsetType]=unset, included: Union[List[Union[IssuesSearchResultIncluded, Issue, Case, IssueUser, IssueTeam]], UnsetType]=unset, **kwargs): + """ + Search issues response payload. + + :param data: Array of results matching the search query. + :type data: [IssuesSearchResult], optional + + :param included: Array of resources related to the search results. + :type included: [IssuesSearchResultIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issues_search_result.py b/datadog_api_client/v2/model/issues_search_result.py new file mode 100644 index 0000000000..6ac4da7aae --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_result.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issues_search_result_attributes import IssuesSearchResultAttributes + from datadog_api_client.v2.model.issues_search_result_relationships import IssuesSearchResultRelationships + from datadog_api_client.v2.model.issues_search_result_type import IssuesSearchResultType + +class IssuesSearchResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issues_search_result_attributes import IssuesSearchResultAttributes + from datadog_api_client.v2.model.issues_search_result_relationships import IssuesSearchResultRelationships + from datadog_api_client.v2.model.issues_search_result_type import IssuesSearchResultType + return { + "attributes": (IssuesSearchResultAttributes,), + "id": (str,), + "relationships": (IssuesSearchResultRelationships,), + "type": (IssuesSearchResultType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: IssuesSearchResultAttributes, id: str, type: IssuesSearchResultType, relationships: Union[IssuesSearchResultRelationships, UnsetType]=unset, **kwargs): + """ + Result matching the search query. + + :param attributes: Object containing the information of a search result. + :type attributes: IssuesSearchResultAttributes + + :param id: Search result identifier (matches the nested issue's identifier). + :type id: str + + :param relationships: Relationships between the search result and other resources. + :type relationships: IssuesSearchResultRelationships, optional + + :param type: Type of the object. + :type type: IssuesSearchResultType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/issues_search_result_attributes.py b/datadog_api_client/v2/model/issues_search_result_attributes.py new file mode 100644 index 0000000000..9a8ece7330 --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_result_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IssuesSearchResultAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "impacted_sessions": (int,), + "impacted_users": (int,), + "total_count": (int,), + } + attribute_map = { + "impacted_sessions": "impacted_sessions", + "impacted_users": "impacted_users", + "total_count": "total_count", + } + + def __init__(self_, impacted_sessions: Union[int, UnsetType]=unset, impacted_users: Union[int, UnsetType]=unset, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Object containing the information of a search result. + + :param impacted_sessions: Count of sessions impacted by the issue over the queried time window. + :type impacted_sessions: int, optional + + :param impacted_users: Count of users impacted by the issue over the queried time window. + :type impacted_users: int, optional + + :param total_count: Total count of errors that match the issue over the queried time window. + :type total_count: int, optional + """ + if impacted_sessions is not unset: + kwargs["impacted_sessions"] = impacted_sessions + if impacted_users is not unset: + kwargs["impacted_users"] = impacted_users + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issues_search_result_included.py b/datadog_api_client/v2/model/issues_search_result_included.py new file mode 100644 index 0000000000..303a2eaab4 --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_result_included.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class IssuesSearchResultIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An array of related resources, returned when the ``include`` query parameter is used. + + :param attributes: Object containing the information of an issue. + :type attributes: IssueAttributes + + :param id: Issue identifier. + :type id: str + + :param relationships: Relationship between the issue and an assignee, case and/or teams. + :type relationships: IssueRelationships, optional + + :param type: Type of the object. + :type type: IssueType + """ + 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.issue import Issue + from datadog_api_client.v2.model.case import Case + from datadog_api_client.v2.model.issue_user import IssueUser + from datadog_api_client.v2.model.issue_team import IssueTeam + return { + "oneOf": [ + Issue, + Case, + IssueUser, + IssueTeam, + ], + } diff --git a/datadog_api_client/v2/model/issues_search_result_issue_relationship.py b/datadog_api_client/v2/model/issues_search_result_issue_relationship.py new file mode 100644 index 0000000000..0900ffc22d --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_result_issue_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issue_reference import IssueReference + +class IssuesSearchResultIssueRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issue_reference import IssueReference + return { + "data": (IssueReference,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IssueReference, **kwargs): + """ + Relationship between the search result and the corresponding issue. + + :param data: The issue the search result corresponds to. + :type data: IssueReference + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/issues_search_result_relationships.py b/datadog_api_client/v2/model/issues_search_result_relationships.py new file mode 100644 index 0000000000..a4aef696d1 --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_result_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.issues_search_result_issue_relationship import IssuesSearchResultIssueRelationship + +class IssuesSearchResultRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.issues_search_result_issue_relationship import IssuesSearchResultIssueRelationship + return { + "issue": (IssuesSearchResultIssueRelationship,), + } + attribute_map = { + "issue": "issue", + } + + def __init__(self_, issue: Union[IssuesSearchResultIssueRelationship, UnsetType]=unset, **kwargs): + """ + Relationships between the search result and other resources. + + :param issue: Relationship between the search result and the corresponding issue. + :type issue: IssuesSearchResultIssueRelationship, optional + """ + if issue is not unset: + kwargs["issue"] = issue + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/issues_search_result_type.py b/datadog_api_client/v2/model/issues_search_result_type.py new file mode 100644 index 0000000000..2f208813e6 --- /dev/null +++ b/datadog_api_client/v2/model/issues_search_result_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class IssuesSearchResultType(ModelSimple): + """ + Type of the object. + + :param value: If omitted defaults to "error_tracking_search_result". Must be one of ["error_tracking_search_result"]. + :type value: str + """ + + allowed_values = { + "error_tracking_search_result", + } + ERROR_TRACKING_SEARCH_RESULT: ClassVar["IssuesSearchResultType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +IssuesSearchResultType.ERROR_TRACKING_SEARCH_RESULT = IssuesSearchResultType("error_tracking_search_result") diff --git a/datadog_api_client/v2/model/item_api_payload.py b/datadog_api_client/v2/model/item_api_payload.py new file mode 100644 index 0000000000..9842197e58 --- /dev/null +++ b/datadog_api_client/v2/model/item_api_payload.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.item_api_payload_data import ItemApiPayloadData + +class ItemApiPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.item_api_payload_data import ItemApiPayloadData + return { + "data": (ItemApiPayloadData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ItemApiPayloadData, UnsetType]=unset, **kwargs): + """ + A single datastore item with its content and metadata. + + :param data: Core data and metadata for a single datastore item. + :type data: ItemApiPayloadData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/item_api_payload_array.py b/datadog_api_client/v2/model/item_api_payload_array.py new file mode 100644 index 0000000000..7fd7593cc7 --- /dev/null +++ b/datadog_api_client/v2/model/item_api_payload_array.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.item_api_payload_data import ItemApiPayloadData + from datadog_api_client.v2.model.item_api_payload_meta import ItemApiPayloadMeta + +class ItemApiPayloadArray(ModelNormal): + validations = { + "data": { + "max_items": 100, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.item_api_payload_data import ItemApiPayloadData + from datadog_api_client.v2.model.item_api_payload_meta import ItemApiPayloadMeta + return { + "data": ([ItemApiPayloadData],), + "meta": (ItemApiPayloadMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[ItemApiPayloadData], meta: Union[ItemApiPayloadMeta, UnsetType]=unset, **kwargs): + """ + A collection of datastore items with pagination and schema metadata. + + :param data: An array of datastore items with their content and metadata. + :type data: [ItemApiPayloadData] + + :param meta: Additional metadata about a collection of datastore items, including pagination and schema information. + :type meta: ItemApiPayloadMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/item_api_payload_data.py b/datadog_api_client/v2/model/item_api_payload_data.py new file mode 100644 index 0000000000..3579a0651a --- /dev/null +++ b/datadog_api_client/v2/model/item_api_payload_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.item_api_payload_data_attributes import ItemApiPayloadDataAttributes + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + +class ItemApiPayloadData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.item_api_payload_data_attributes import ItemApiPayloadDataAttributes + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + return { + "attributes": (ItemApiPayloadDataAttributes,), + "id": (str,), + "type": (DatastoreItemsDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: DatastoreItemsDataType, attributes: Union[ItemApiPayloadDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Core data and metadata for a single datastore item. + + :param attributes: Metadata and content of a datastore item. + :type attributes: ItemApiPayloadDataAttributes, optional + + :param id: The unique identifier of the datastore. + :type id: str, optional + + :param type: The resource type for datastore items. + :type type: DatastoreItemsDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/item_api_payload_data_attributes.py b/datadog_api_client/v2/model/item_api_payload_data_attributes.py new file mode 100644 index 0000000000..1bdfcd07c5 --- /dev/null +++ b/datadog_api_client/v2/model/item_api_payload_data_attributes.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.item_api_payload_data_attributes_value import ItemApiPayloadDataAttributesValue + +class ItemApiPayloadDataAttributes(ModelNormal): + validations = { + "primary_column_name": { + "max_length": 63, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.item_api_payload_data_attributes_value import ItemApiPayloadDataAttributesValue + return { + "created_at": (datetime,), + "modified_at": (datetime,), + "org_id": (int,), + "primary_column_name": (str,), + "signature": (str,), + "store_id": (str,), + "value": (ItemApiPayloadDataAttributesValue,), + } + attribute_map = { + "created_at": "created_at", + "modified_at": "modified_at", + "org_id": "org_id", + "primary_column_name": "primary_column_name", + "signature": "signature", + "store_id": "store_id", + "value": "value", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, primary_column_name: Union[str, UnsetType]=unset, signature: Union[str, UnsetType]=unset, store_id: Union[str, UnsetType]=unset, value: Union[ItemApiPayloadDataAttributesValue, UnsetType]=unset, **kwargs): + """ + Metadata and content of a datastore item. + + :param created_at: Timestamp when the item was first created. + :type created_at: datetime, optional + + :param modified_at: Timestamp when the item was last modified. + :type modified_at: datetime, optional + + :param org_id: The ID of the organization that owns this item. + :type org_id: int, optional + + :param primary_column_name: The name of the primary key column for this datastore. Primary column names: + + * Must abide by both `PostgreSQL naming conventions `_ + * Cannot exceed 63 characters + :type primary_column_name: str, optional + + :param signature: A unique signature identifying this item version. + :type signature: str, optional + + :param store_id: The unique identifier of the datastore containing this item. + :type store_id: str, optional + + :param value: The data content (as key-value pairs) of a datastore item. + :type value: ItemApiPayloadDataAttributesValue, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if org_id is not unset: + kwargs["org_id"] = org_id + if primary_column_name is not unset: + kwargs["primary_column_name"] = primary_column_name + if signature is not unset: + kwargs["signature"] = signature + if store_id is not unset: + kwargs["store_id"] = store_id + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/item_api_payload_data_attributes_value.py b/datadog_api_client/v2/model/item_api_payload_data_attributes_value.py new file mode 100644 index 0000000000..edfb2c0258 --- /dev/null +++ b/datadog_api_client/v2/model/item_api_payload_data_attributes_value.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ItemApiPayloadDataAttributesValue(ModelNormal): + + def __init__(self_, **kwargs): + """ + The data content (as key-value pairs) of a datastore item. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/item_api_payload_meta.py b/datadog_api_client/v2/model/item_api_payload_meta.py new file mode 100644 index 0000000000..738ecb6731 --- /dev/null +++ b/datadog_api_client/v2/model/item_api_payload_meta.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.item_api_payload_meta_page import ItemApiPayloadMetaPage + from datadog_api_client.v2.model.item_api_payload_meta_schema import ItemApiPayloadMetaSchema + +class ItemApiPayloadMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.item_api_payload_meta_page import ItemApiPayloadMetaPage + from datadog_api_client.v2.model.item_api_payload_meta_schema import ItemApiPayloadMetaSchema + return { + "page": (ItemApiPayloadMetaPage,), + "schema": (ItemApiPayloadMetaSchema,), + } + attribute_map = { + "page": "page", + "schema": "schema", + } + + def __init__(self_, page: Union[ItemApiPayloadMetaPage, UnsetType]=unset, schema: Union[ItemApiPayloadMetaSchema, UnsetType]=unset, **kwargs): + """ + Additional metadata about a collection of datastore items, including pagination and schema information. + + :param page: Pagination information for a collection of datastore items. + :type page: ItemApiPayloadMetaPage, optional + + :param schema: Schema information about the datastore, including its primary key and field definitions. + :type schema: ItemApiPayloadMetaSchema, optional + """ + if page is not unset: + kwargs["page"] = page + if schema is not unset: + kwargs["schema"] = schema + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/item_api_payload_meta_page.py b/datadog_api_client/v2/model/item_api_payload_meta_page.py new file mode 100644 index 0000000000..266f5daf43 --- /dev/null +++ b/datadog_api_client/v2/model/item_api_payload_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ItemApiPayloadMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "has_more": (bool,), + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "has_more": "hasMore", + "total_count": "totalCount", + "total_filtered_count": "totalFilteredCount", + } + + def __init__(self_, has_more: Union[bool, UnsetType]=unset, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination information for a collection of datastore items. + + :param has_more: Whether there are additional pages of items beyond the current page. + :type has_more: bool, optional + + :param total_count: The total number of items in the datastore, ignoring any filters. + :type total_count: int, optional + + :param total_filtered_count: The total number of items that match the current filter criteria. + :type total_filtered_count: int, optional + """ + if has_more is not unset: + kwargs["has_more"] = has_more + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/item_api_payload_meta_schema.py b/datadog_api_client/v2/model/item_api_payload_meta_schema.py new file mode 100644 index 0000000000..a57b24bb08 --- /dev/null +++ b/datadog_api_client/v2/model/item_api_payload_meta_schema.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.item_api_payload_meta_schema_field import ItemApiPayloadMetaSchemaField + +class ItemApiPayloadMetaSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.item_api_payload_meta_schema_field import ItemApiPayloadMetaSchemaField + return { + "fields": ([ItemApiPayloadMetaSchemaField],), + "primary_key": (str,), + } + attribute_map = { + "fields": "fields", + "primary_key": "primary_key", + } + + def __init__(self_, fields: Union[List[ItemApiPayloadMetaSchemaField], UnsetType]=unset, primary_key: Union[str, UnsetType]=unset, **kwargs): + """ + Schema information about the datastore, including its primary key and field definitions. + + :param fields: An array describing the columns available in this datastore. + :type fields: [ItemApiPayloadMetaSchemaField], optional + + :param primary_key: The name of the primary key column for this datastore. + :type primary_key: str, optional + """ + if fields is not unset: + kwargs["fields"] = fields + if primary_key is not unset: + kwargs["primary_key"] = primary_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/item_api_payload_meta_schema_field.py b/datadog_api_client/v2/model/item_api_payload_meta_schema_field.py new file mode 100644 index 0000000000..12b89c4785 --- /dev/null +++ b/datadog_api_client/v2/model/item_api_payload_meta_schema_field.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ItemApiPayloadMetaSchemaField(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "type": (str,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: str, **kwargs): + """ + Information about a specific column in the datastore schema. + + :param name: The name of this column in the datastore. + :type name: str + + :param type: The data type of this column. For example, 'string', 'number', or 'boolean'. + :type type: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/jira_account_attributes.py b/datadog_api_client/v2/model/jira_account_attributes.py new file mode 100644 index 0000000000..5eda6096d6 --- /dev/null +++ b/datadog_api_client/v2/model/jira_account_attributes.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JiraAccountAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "consumer_key": (str,), + "instance_url": (str,), + "last_webhook_timestamp": (datetime,), + } + attribute_map = { + "consumer_key": "consumer_key", + "instance_url": "instance_url", + "last_webhook_timestamp": "last_webhook_timestamp", + } + + def __init__(self_, consumer_key: str, instance_url: str, last_webhook_timestamp: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a Jira account + + :param consumer_key: The consumer key for the Jira account + :type consumer_key: str + + :param instance_url: The URL of the Jira instance + :type instance_url: str + + :param last_webhook_timestamp: Timestamp of the last webhook received + :type last_webhook_timestamp: datetime, optional + """ + if last_webhook_timestamp is not unset: + kwargs["last_webhook_timestamp"] = last_webhook_timestamp + super().__init__(kwargs) + + + self_.consumer_key = consumer_key + self_.instance_url = instance_url diff --git a/datadog_api_client/v2/model/jira_account_data.py b/datadog_api_client/v2/model/jira_account_data.py new file mode 100644 index 0000000000..07f0b7b3e2 --- /dev/null +++ b/datadog_api_client/v2/model/jira_account_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_account_attributes import JiraAccountAttributes + from datadog_api_client.v2.model.jira_account_type import JiraAccountType + +class JiraAccountData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_account_attributes import JiraAccountAttributes + from datadog_api_client.v2.model.jira_account_type import JiraAccountType + return { + "attributes": (JiraAccountAttributes,), + "id": (str,), + "type": (JiraAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: JiraAccountAttributes, id: str, type: JiraAccountType, **kwargs): + """ + Data object for a Jira account + + :param attributes: Attributes of a Jira account + :type attributes: JiraAccountAttributes + + :param id: Unique identifier for the Jira account + :type id: str + + :param type: Type identifier for Jira account resources + :type type: JiraAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/jira_account_relationship.py b/datadog_api_client/v2/model/jira_account_relationship.py new file mode 100644 index 0000000000..f43ced703c --- /dev/null +++ b/datadog_api_client/v2/model/jira_account_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_account_data import JiraAccountData + +class JiraAccountRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_account_data import JiraAccountData + return { + "data": (JiraAccountData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: JiraAccountData, **kwargs): + """ + Relationship to a Jira account + + :param data: Data object for a Jira account + :type data: JiraAccountData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/jira_account_type.py b/datadog_api_client/v2/model/jira_account_type.py new file mode 100644 index 0000000000..5f17010c9c --- /dev/null +++ b/datadog_api_client/v2/model/jira_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class JiraAccountType(ModelSimple): + """ + Type identifier for Jira account resources + + :param value: If omitted defaults to "jira-account". Must be one of ["jira-account"]. + :type value: str + """ + + allowed_values = { + "jira-account", + } + JIRA_ACCOUNT: ClassVar["JiraAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +JiraAccountType.JIRA_ACCOUNT = JiraAccountType("jira-account") diff --git a/datadog_api_client/v2/model/jira_accounts_meta.py b/datadog_api_client/v2/model/jira_accounts_meta.py new file mode 100644 index 0000000000..e0b9dfdc96 --- /dev/null +++ b/datadog_api_client/v2/model/jira_accounts_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JiraAccountsMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "public_key": (str,), + } + attribute_map = { + "public_key": "public_key", + } + + def __init__(self_, public_key: Union[str, UnsetType]=unset, **kwargs): + """ + Metadata for Jira accounts response + + :param public_key: Public key for the Jira integration + :type public_key: str, optional + """ + if public_key is not unset: + kwargs["public_key"] = public_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/jira_accounts_response.py b/datadog_api_client/v2/model/jira_accounts_response.py new file mode 100644 index 0000000000..002d3d54f7 --- /dev/null +++ b/datadog_api_client/v2/model/jira_accounts_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_account_data import JiraAccountData + from datadog_api_client.v2.model.jira_accounts_meta import JiraAccountsMeta + +class JiraAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_account_data import JiraAccountData + from datadog_api_client.v2.model.jira_accounts_meta import JiraAccountsMeta + return { + "data": ([JiraAccountData],), + "meta": (JiraAccountsMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[JiraAccountData], meta: Union[JiraAccountsMeta, UnsetType]=unset, **kwargs): + """ + Response containing Jira accounts + + :param data: Array of Jira account data objects + :type data: [JiraAccountData] + + :param meta: Metadata for Jira accounts response + :type meta: JiraAccountsMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/jira_integration_metadata.py b/datadog_api_client/v2/model/jira_integration_metadata.py new file mode 100644 index 0000000000..4fe82e1787 --- /dev/null +++ b/datadog_api_client/v2/model/jira_integration_metadata.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_integration_metadata_issues_item import JiraIntegrationMetadataIssuesItem + +class JiraIntegrationMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_integration_metadata_issues_item import JiraIntegrationMetadataIssuesItem + return { + "issues": ([JiraIntegrationMetadataIssuesItem],), + } + attribute_map = { + "issues": "issues", + } + + def __init__(self_, issues: List[JiraIntegrationMetadataIssuesItem], **kwargs): + """ + Incident integration metadata for the Jira integration. + + :param issues: Array of Jira issues in this integration metadata. + :type issues: [JiraIntegrationMetadataIssuesItem] + """ + super().__init__(kwargs) + + + self_.issues = issues diff --git a/datadog_api_client/v2/model/jira_integration_metadata_issues_item.py b/datadog_api_client/v2/model/jira_integration_metadata_issues_item.py new file mode 100644 index 0000000000..bd30c34fbf --- /dev/null +++ b/datadog_api_client/v2/model/jira_integration_metadata_issues_item.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JiraIntegrationMetadataIssuesItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account": (str,), + "issue_key": (str,), + "issuetype_id": (str,), + "project_key": (str,), + "redirect_url": (str,), + } + attribute_map = { + "account": "account", + "issue_key": "issue_key", + "issuetype_id": "issuetype_id", + "project_key": "project_key", + "redirect_url": "redirect_url", + } + + def __init__(self_, account: str, project_key: str, issue_key: Union[str, UnsetType]=unset, issuetype_id: Union[str, UnsetType]=unset, redirect_url: Union[str, UnsetType]=unset, **kwargs): + """ + Item in the Jira integration metadata issue array. + + :param account: URL of issue's Jira account. + :type account: str + + :param issue_key: Jira issue's issue key. + :type issue_key: str, optional + + :param issuetype_id: Jira issue's issue type. + :type issuetype_id: str, optional + + :param project_key: Jira issue's project keys. + :type project_key: str + + :param redirect_url: URL redirecting to the Jira issue. + :type redirect_url: str, optional + """ + if issue_key is not unset: + kwargs["issue_key"] = issue_key + if issuetype_id is not unset: + kwargs["issuetype_id"] = issuetype_id + if redirect_url is not unset: + kwargs["redirect_url"] = redirect_url + super().__init__(kwargs) + + + self_.account = account + self_.project_key = project_key diff --git a/datadog_api_client/v2/model/jira_issue.py b/datadog_api_client/v2/model/jira_issue.py new file mode 100644 index 0000000000..bed4411a53 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_result import JiraIssueResult + from datadog_api_client.v2.model.case3rd_party_ticket_status import Case3rdPartyTicketStatus + +class JiraIssue(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_result import JiraIssueResult + from datadog_api_client.v2.model.case3rd_party_ticket_status import Case3rdPartyTicketStatus + return { + "result": (JiraIssueResult,), + "status": (Case3rdPartyTicketStatus,), + } + attribute_map = { + "result": "result", + "status": "status", + } + read_only_vars = { + "status", + } + + def __init__(self_, result: Union[JiraIssueResult, UnsetType]=unset, status: Union[Case3rdPartyTicketStatus, UnsetType]=unset, **kwargs): + """ + Jira issue attached to case + + :param result: Jira issue information + :type result: JiraIssueResult, optional + + :param status: Case status + :type status: Case3rdPartyTicketStatus, optional + """ + if result is not unset: + kwargs["result"] = result + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/jira_issue_create_attributes.py b/datadog_api_client/v2/model/jira_issue_create_attributes.py new file mode 100644 index 0000000000..60755068a8 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_create_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JiraIssueCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "fields": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "issue_type_id": (str,), + "jira_account_id": (str,), + "project_id": (str,), + } + attribute_map = { + "fields": "fields", + "issue_type_id": "issue_type_id", + "jira_account_id": "jira_account_id", + "project_id": "project_id", + } + + def __init__(self_, issue_type_id: str, jira_account_id: str, project_id: str, fields: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + Jira issue creation attributes + + :param fields: Additional Jira fields + :type fields: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param issue_type_id: Jira issue type ID + :type issue_type_id: str + + :param jira_account_id: Jira account ID + :type jira_account_id: str + + :param project_id: Jira project ID + :type project_id: str + """ + if fields is not unset: + kwargs["fields"] = fields + super().__init__(kwargs) + + + self_.issue_type_id = issue_type_id + self_.jira_account_id = jira_account_id + self_.project_id = project_id diff --git a/datadog_api_client/v2/model/jira_issue_create_data.py b/datadog_api_client/v2/model/jira_issue_create_data.py new file mode 100644 index 0000000000..bd36316a71 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_create_attributes import JiraIssueCreateAttributes + from datadog_api_client.v2.model.jira_issue_resource_type import JiraIssueResourceType + +class JiraIssueCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_create_attributes import JiraIssueCreateAttributes + from datadog_api_client.v2.model.jira_issue_resource_type import JiraIssueResourceType + return { + "attributes": (JiraIssueCreateAttributes,), + "type": (JiraIssueResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: JiraIssueCreateAttributes, type: JiraIssueResourceType, **kwargs): + """ + Jira issue creation data + + :param attributes: Jira issue creation attributes + :type attributes: JiraIssueCreateAttributes + + :param type: Jira issue resource type + :type type: JiraIssueResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/jira_issue_create_request.py b/datadog_api_client/v2/model/jira_issue_create_request.py new file mode 100644 index 0000000000..aa882f500e --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_create_data import JiraIssueCreateData + +class JiraIssueCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_create_data import JiraIssueCreateData + return { + "data": (JiraIssueCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: JiraIssueCreateData, **kwargs): + """ + Jira issue creation request + + :param data: Jira issue creation data + :type data: JiraIssueCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/jira_issue_link_attributes.py b/datadog_api_client/v2/model/jira_issue_link_attributes.py new file mode 100644 index 0000000000..dc8311b935 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_link_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JiraIssueLinkAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "jira_issue_url": (str,), + } + attribute_map = { + "jira_issue_url": "jira_issue_url", + } + + def __init__(self_, jira_issue_url: str, **kwargs): + """ + Jira issue link attributes + + :param jira_issue_url: URL of the Jira issue + :type jira_issue_url: str + """ + super().__init__(kwargs) + + + self_.jira_issue_url = jira_issue_url diff --git a/datadog_api_client/v2/model/jira_issue_link_data.py b/datadog_api_client/v2/model/jira_issue_link_data.py new file mode 100644 index 0000000000..c8e130a6a7 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_link_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_link_attributes import JiraIssueLinkAttributes + from datadog_api_client.v2.model.jira_issue_resource_type import JiraIssueResourceType + +class JiraIssueLinkData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_link_attributes import JiraIssueLinkAttributes + from datadog_api_client.v2.model.jira_issue_resource_type import JiraIssueResourceType + return { + "attributes": (JiraIssueLinkAttributes,), + "type": (JiraIssueResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: JiraIssueLinkAttributes, type: JiraIssueResourceType, **kwargs): + """ + Jira issue link data + + :param attributes: Jira issue link attributes + :type attributes: JiraIssueLinkAttributes + + :param type: Jira issue resource type + :type type: JiraIssueResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/jira_issue_link_request.py b/datadog_api_client/v2/model/jira_issue_link_request.py new file mode 100644 index 0000000000..ca6fa9b1c8 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_link_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_link_data import JiraIssueLinkData + +class JiraIssueLinkRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_link_data import JiraIssueLinkData + return { + "data": (JiraIssueLinkData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: JiraIssueLinkData, **kwargs): + """ + Jira issue link request + + :param data: Jira issue link data + :type data: JiraIssueLinkData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/jira_issue_resource_type.py b/datadog_api_client/v2/model/jira_issue_resource_type.py new file mode 100644 index 0000000000..de601548ae --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class JiraIssueResourceType(ModelSimple): + """ + Jira issue resource type + + :param value: If omitted defaults to "issues". Must be one of ["issues"]. + :type value: str + """ + + allowed_values = { + "issues", + } + ISSUES: ClassVar["JiraIssueResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +JiraIssueResourceType.ISSUES = JiraIssueResourceType("issues") diff --git a/datadog_api_client/v2/model/jira_issue_result.py b/datadog_api_client/v2/model/jira_issue_result.py new file mode 100644 index 0000000000..e5ad7cf1a2 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_result.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JiraIssueResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "issue_id": (str,), + "issue_key": (str,), + "issue_url": (str,), + "project_key": (str,), + } + attribute_map = { + "issue_id": "issue_id", + "issue_key": "issue_key", + "issue_url": "issue_url", + "project_key": "project_key", + } + + def __init__(self_, issue_id: Union[str, UnsetType]=unset, issue_key: Union[str, UnsetType]=unset, issue_url: Union[str, UnsetType]=unset, project_key: Union[str, UnsetType]=unset, **kwargs): + """ + Jira issue information + + :param issue_id: Jira issue ID + :type issue_id: str, optional + + :param issue_key: Jira issue key + :type issue_key: str, optional + + :param issue_url: Jira issue URL + :type issue_url: str, optional + + :param project_key: Jira project key + :type project_key: str, optional + """ + if issue_id is not unset: + kwargs["issue_id"] = issue_id + if issue_key is not unset: + kwargs["issue_key"] = issue_key + if issue_url is not unset: + kwargs["issue_url"] = issue_url + if project_key is not unset: + kwargs["project_key"] = project_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/jira_issue_template_create_request.py b/datadog_api_client/v2/model/jira_issue_template_create_request.py new file mode 100644 index 0000000000..c645c2a614 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_create_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_template_create_request_data import JiraIssueTemplateCreateRequestData + +class JiraIssueTemplateCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_template_create_request_data import JiraIssueTemplateCreateRequestData + return { + "data": (JiraIssueTemplateCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[JiraIssueTemplateCreateRequestData, UnsetType]=unset, **kwargs): + """ + Request to create a Jira issue template + + :param data: Data object for creating a Jira issue template + :type data: JiraIssueTemplateCreateRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/jira_issue_template_create_request_attributes.py b/datadog_api_client/v2/model/jira_issue_template_create_request_attributes.py new file mode 100644 index 0000000000..2d4761893e --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_create_request_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_template_create_request_attributes_jira_account import JiraIssueTemplateCreateRequestAttributesJiraAccount + +class JiraIssueTemplateCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_template_create_request_attributes_jira_account import JiraIssueTemplateCreateRequestAttributesJiraAccount + return { + "fields": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "issue_type_id": (str,), + "jira_account": (JiraIssueTemplateCreateRequestAttributesJiraAccount,), + "name": (str,), + "project_id": (str,), + } + attribute_map = { + "fields": "fields", + "issue_type_id": "issue_type_id", + "jira_account": "jira-account", + "name": "name", + "project_id": "project_id", + } + + def __init__(self_, fields: Union[Dict[str, Any], UnsetType]=unset, issue_type_id: Union[str, UnsetType]=unset, jira_account: Union[JiraIssueTemplateCreateRequestAttributesJiraAccount, UnsetType]=unset, name: Union[str, UnsetType]=unset, project_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating a Jira issue template + + :param fields: Custom fields for the Jira issue template + :type fields: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param issue_type_id: The ID of the Jira issue type + :type issue_type_id: str, optional + + :param jira_account: Reference to the Jira account + :type jira_account: JiraIssueTemplateCreateRequestAttributesJiraAccount, optional + + :param name: The name of the issue template + :type name: str, optional + + :param project_id: The ID of the Jira project + :type project_id: str, optional + """ + if fields is not unset: + kwargs["fields"] = fields + if issue_type_id is not unset: + kwargs["issue_type_id"] = issue_type_id + if jira_account is not unset: + kwargs["jira_account"] = jira_account + if name is not unset: + kwargs["name"] = name + if project_id is not unset: + kwargs["project_id"] = project_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/jira_issue_template_create_request_attributes_jira_account.py b/datadog_api_client/v2/model/jira_issue_template_create_request_attributes_jira_account.py new file mode 100644 index 0000000000..e96c923993 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_create_request_attributes_jira_account.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JiraIssueTemplateCreateRequestAttributesJiraAccount(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (UUID,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: UUID, **kwargs): + """ + Reference to the Jira account + + :param id: The ID of the Jira account + :type id: UUID + """ + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/jira_issue_template_create_request_data.py b/datadog_api_client/v2/model/jira_issue_template_create_request_data.py new file mode 100644 index 0000000000..78f89c7611 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_create_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_template_create_request_attributes import JiraIssueTemplateCreateRequestAttributes + from datadog_api_client.v2.model.jira_issue_template_type import JiraIssueTemplateType + +class JiraIssueTemplateCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_template_create_request_attributes import JiraIssueTemplateCreateRequestAttributes + from datadog_api_client.v2.model.jira_issue_template_type import JiraIssueTemplateType + return { + "attributes": (JiraIssueTemplateCreateRequestAttributes,), + "type": (JiraIssueTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[JiraIssueTemplateCreateRequestAttributes, UnsetType]=unset, type: Union[JiraIssueTemplateType, UnsetType]=unset, **kwargs): + """ + Data object for creating a Jira issue template + + :param attributes: Attributes for creating a Jira issue template + :type attributes: JiraIssueTemplateCreateRequestAttributes, optional + + :param type: Type identifier for Jira issue template resources + :type type: JiraIssueTemplateType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/jira_issue_template_data.py b/datadog_api_client/v2/model/jira_issue_template_data.py new file mode 100644 index 0000000000..02ae285c61 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_template_data_attributes import JiraIssueTemplateDataAttributes + from datadog_api_client.v2.model.jira_issue_template_data_relationships import JiraIssueTemplateDataRelationships + from datadog_api_client.v2.model.jira_issue_template_type import JiraIssueTemplateType + +class JiraIssueTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_template_data_attributes import JiraIssueTemplateDataAttributes + from datadog_api_client.v2.model.jira_issue_template_data_relationships import JiraIssueTemplateDataRelationships + from datadog_api_client.v2.model.jira_issue_template_type import JiraIssueTemplateType + return { + "attributes": (JiraIssueTemplateDataAttributes,), + "id": (UUID,), + "relationships": (JiraIssueTemplateDataRelationships,), + "type": (JiraIssueTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: JiraIssueTemplateDataAttributes, id: UUID, type: JiraIssueTemplateType, relationships: Union[JiraIssueTemplateDataRelationships, UnsetType]=unset, **kwargs): + """ + Data object for a Jira issue template + + :param attributes: Attributes of a Jira issue template + :type attributes: JiraIssueTemplateDataAttributes + + :param id: Unique identifier for the Jira issue template + :type id: UUID + + :param relationships: Relationships of a Jira issue template + :type relationships: JiraIssueTemplateDataRelationships, optional + + :param type: Type identifier for Jira issue template resources + :type type: JiraIssueTemplateType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/jira_issue_template_data_attributes.py b/datadog_api_client/v2/model/jira_issue_template_data_attributes.py new file mode 100644 index 0000000000..e8991ba989 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_data_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JiraIssueTemplateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "fields": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "issue_type_id": (str,), + "name": (str,), + "project_id": (str,), + } + attribute_map = { + "fields": "fields", + "issue_type_id": "issue_type_id", + "name": "name", + "project_id": "project_id", + } + + def __init__(self_, fields: Dict[str, Any], issue_type_id: str, name: str, project_id: str, **kwargs): + """ + Attributes of a Jira issue template + + :param fields: Custom fields for the Jira issue template + :type fields: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + + :param issue_type_id: The ID of the Jira issue type + :type issue_type_id: str + + :param name: The name of the issue template + :type name: str + + :param project_id: The ID of the Jira project + :type project_id: str + """ + super().__init__(kwargs) + + + self_.fields = fields + self_.issue_type_id = issue_type_id + self_.name = name + self_.project_id = project_id diff --git a/datadog_api_client/v2/model/jira_issue_template_data_relationships.py b/datadog_api_client/v2/model/jira_issue_template_data_relationships.py new file mode 100644 index 0000000000..72c4e99137 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_data_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_account_relationship import JiraAccountRelationship + +class JiraIssueTemplateDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_account_relationship import JiraAccountRelationship + return { + "jira_account": (JiraAccountRelationship,), + } + attribute_map = { + "jira_account": "jira-account", + } + + def __init__(self_, jira_account: JiraAccountRelationship, **kwargs): + """ + Relationships of a Jira issue template + + :param jira_account: Relationship to a Jira account + :type jira_account: JiraAccountRelationship + """ + super().__init__(kwargs) + + + self_.jira_account = jira_account diff --git a/datadog_api_client/v2/model/jira_issue_template_response.py b/datadog_api_client/v2/model/jira_issue_template_response.py new file mode 100644 index 0000000000..f3949f488d --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_template_data import JiraIssueTemplateData + from datadog_api_client.v2.model.jira_account_data import JiraAccountData + +class JiraIssueTemplateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_template_data import JiraIssueTemplateData + from datadog_api_client.v2.model.jira_account_data import JiraAccountData + return { + "data": (JiraIssueTemplateData,), + "included": ([JiraAccountData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: JiraIssueTemplateData, included: Union[List[JiraAccountData], UnsetType]=unset, **kwargs): + """ + Response containing a single Jira issue template + + :param data: Data object for a Jira issue template + :type data: JiraIssueTemplateData + + :param included: Array of Jira account data objects + :type included: [JiraAccountData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/jira_issue_template_type.py b/datadog_api_client/v2/model/jira_issue_template_type.py new file mode 100644 index 0000000000..b62f5c35aa --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class JiraIssueTemplateType(ModelSimple): + """ + Type identifier for Jira issue template resources + + :param value: If omitted defaults to "jira-issue-template". Must be one of ["jira-issue-template"]. + :type value: str + """ + + allowed_values = { + "jira-issue-template", + } + JIRA_ISSUE_TEMPLATE: ClassVar["JiraIssueTemplateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +JiraIssueTemplateType.JIRA_ISSUE_TEMPLATE = JiraIssueTemplateType("jira-issue-template") diff --git a/datadog_api_client/v2/model/jira_issue_template_update_request.py b/datadog_api_client/v2/model/jira_issue_template_update_request.py new file mode 100644 index 0000000000..8ef3f7f147 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_template_update_request_data import JiraIssueTemplateUpdateRequestData + +class JiraIssueTemplateUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_template_update_request_data import JiraIssueTemplateUpdateRequestData + return { + "data": (JiraIssueTemplateUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: JiraIssueTemplateUpdateRequestData, **kwargs): + """ + Request to update a Jira issue template + + :param data: Data object for updating a Jira issue template + :type data: JiraIssueTemplateUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/jira_issue_template_update_request_attributes.py b/datadog_api_client/v2/model/jira_issue_template_update_request_attributes.py new file mode 100644 index 0000000000..1841dc4d13 --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_update_request_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JiraIssueTemplateUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "fields": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "name": (str,), + } + attribute_map = { + "fields": "fields", + "name": "name", + } + + def __init__(self_, fields: Union[Dict[str, Any], UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating a Jira issue template + + :param fields: Custom fields for the Jira issue template + :type fields: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param name: The name of the issue template + :type name: str, optional + """ + if fields is not unset: + kwargs["fields"] = fields + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/jira_issue_template_update_request_data.py b/datadog_api_client/v2/model/jira_issue_template_update_request_data.py new file mode 100644 index 0000000000..52872e16ab --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_template_update_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_template_update_request_attributes import JiraIssueTemplateUpdateRequestAttributes + from datadog_api_client.v2.model.jira_issue_template_type import JiraIssueTemplateType + +class JiraIssueTemplateUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_template_update_request_attributes import JiraIssueTemplateUpdateRequestAttributes + from datadog_api_client.v2.model.jira_issue_template_type import JiraIssueTemplateType + return { + "attributes": (JiraIssueTemplateUpdateRequestAttributes,), + "type": (JiraIssueTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: JiraIssueTemplateUpdateRequestAttributes, type: JiraIssueTemplateType, **kwargs): + """ + Data object for updating a Jira issue template + + :param attributes: Attributes for updating a Jira issue template + :type attributes: JiraIssueTemplateUpdateRequestAttributes + + :param type: Type identifier for Jira issue template resources + :type type: JiraIssueTemplateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/jira_issue_templates_response.py b/datadog_api_client/v2/model/jira_issue_templates_response.py new file mode 100644 index 0000000000..4fb752ac4d --- /dev/null +++ b/datadog_api_client/v2/model/jira_issue_templates_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jira_issue_template_data import JiraIssueTemplateData + from datadog_api_client.v2.model.jira_account_data import JiraAccountData + +class JiraIssueTemplatesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jira_issue_template_data import JiraIssueTemplateData + from datadog_api_client.v2.model.jira_account_data import JiraAccountData + return { + "data": ([JiraIssueTemplateData],), + "included": ([JiraAccountData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[JiraIssueTemplateData], included: Union[List[JiraAccountData], UnsetType]=unset, **kwargs): + """ + Response containing Jira issue templates + + :param data: Array of Jira issue template data objects + :type data: [JiraIssueTemplateData] + + :param included: Array of Jira account data objects + :type included: [JiraAccountData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/jira_issues_data_type.py b/datadog_api_client/v2/model/jira_issues_data_type.py new file mode 100644 index 0000000000..bb9a13275a --- /dev/null +++ b/datadog_api_client/v2/model/jira_issues_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class JiraIssuesDataType(ModelSimple): + """ + Jira issues resource type. + + :param value: If omitted defaults to "jira_issues". Must be one of ["jira_issues"]. + :type value: str + """ + + allowed_values = { + "jira_issues", + } + JIRA_ISSUES: ClassVar["JiraIssuesDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +JiraIssuesDataType.JIRA_ISSUES = JiraIssuesDataType("jira_issues") diff --git a/datadog_api_client/v2/model/job_create_response.py b/datadog_api_client/v2/model/job_create_response.py new file mode 100644 index 0000000000..bbdc0a25f1 --- /dev/null +++ b/datadog_api_client/v2/model/job_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.job_create_response_data import JobCreateResponseData + +class JobCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.job_create_response_data import JobCreateResponseData + return { + "data": (JobCreateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[JobCreateResponseData, UnsetType]=unset, **kwargs): + """ + Run a historical job response. + + :param data: The definition of ``JobCreateResponseData`` object. + :type data: JobCreateResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/job_create_response_data.py b/datadog_api_client/v2/model/job_create_response_data.py new file mode 100644 index 0000000000..0166d34870 --- /dev/null +++ b/datadog_api_client/v2/model/job_create_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.historical_job_data_type import HistoricalJobDataType + +class JobCreateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.historical_job_data_type import HistoricalJobDataType + return { + "id": (str,), + "type": (HistoricalJobDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[HistoricalJobDataType, UnsetType]=unset, **kwargs): + """ + The definition of ``JobCreateResponseData`` object. + + :param id: ID of the created job. + :type id: str, optional + + :param type: Type of payload. + :type type: HistoricalJobDataType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/job_definition.py b/datadog_api_client/v2/model/job_definition.py new file mode 100644 index 0000000000..cc1c178044 --- /dev/null +++ b/datadog_api_client/v2/model/job_definition.py @@ -0,0 +1,154 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.historical_job_options import HistoricalJobOptions + from datadog_api_client.v2.model.historical_job_query import HistoricalJobQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case_create import SecurityMonitoringThirdPartyRuleCaseCreate + +class JobDefinition(ModelNormal): + validations = { + "cases": { + "max_items": 10, + }, + "queries": { + "max_items": 10, + }, + "third_party_cases": { + "max_items": 10, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.historical_job_options import HistoricalJobOptions + from datadog_api_client.v2.model.historical_job_query import HistoricalJobQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case_create import SecurityMonitoringThirdPartyRuleCaseCreate + return { + "calculated_fields": ([CalculatedField],), + "cases": ([SecurityMonitoringRuleCaseCreate],), + "_from": (int,), + "group_signals_by": ([str],), + "index": (str,), + "message": (str,), + "name": (str,), + "options": (HistoricalJobOptions,), + "queries": ([HistoricalJobQuery],), + "reference_tables": ([SecurityMonitoringReferenceTable],), + "tags": ([str],), + "third_party_cases": ([SecurityMonitoringThirdPartyRuleCaseCreate],), + "to": (int,), + "type": (str,), + } + attribute_map = { + "calculated_fields": "calculatedFields", + "cases": "cases", + "_from": "from", + "group_signals_by": "groupSignalsBy", + "index": "index", + "message": "message", + "name": "name", + "options": "options", + "queries": "queries", + "reference_tables": "referenceTables", + "tags": "tags", + "third_party_cases": "thirdPartyCases", + "to": "to", + "type": "type", + } + + def __init__(self_, cases: List[SecurityMonitoringRuleCaseCreate], _from: int, index: str, message: str, name: str, queries: List[HistoricalJobQuery], to: int, calculated_fields: Union[List[CalculatedField], UnsetType]=unset, group_signals_by: Union[List[str], UnsetType]=unset, options: Union[HistoricalJobOptions, UnsetType]=unset, reference_tables: Union[List[SecurityMonitoringReferenceTable], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, third_party_cases: Union[List[SecurityMonitoringThirdPartyRuleCaseCreate], UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Definition of a historical job. + + :param calculated_fields: Calculated fields. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases used for generating job results. Up to 10 cases are allowed. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param _from: Starting time of data analyzed by the job. + :type _from: int + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param index: Index used to load the data. + :type index: str + + :param message: Message for generated results. + :type message: str + + :param name: Job name. + :type name: str + + :param options: Job options. + :type options: HistoricalJobOptions, optional + + :param queries: Queries for selecting logs analyzed by the job. Up to 10 queries are allowed. + :type queries: [HistoricalJobQuery] + + :param reference_tables: Reference tables used in the queries. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating results from third-party detection method. Only available for third-party detection method. Up to 10 cases are allowed. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCaseCreate], optional + + :param to: Ending time of data analyzed by the job. + :type to: int + + :param type: Job type. + :type type: str, optional + """ + if calculated_fields is not unset: + kwargs["calculated_fields"] = calculated_fields + if group_signals_by is not unset: + kwargs["group_signals_by"] = group_signals_by + if options is not unset: + kwargs["options"] = options + if reference_tables is not unset: + kwargs["reference_tables"] = reference_tables + if tags is not unset: + kwargs["tags"] = tags + if third_party_cases is not unset: + kwargs["third_party_cases"] = third_party_cases + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.cases = cases + self_._from = _from + self_.index = index + self_.message = message + self_.name = name + self_.queries = queries + self_.to = to diff --git a/datadog_api_client/v2/model/job_definition_from_rule.py b/datadog_api_client/v2/model/job_definition_from_rule.py new file mode 100644 index 0000000000..d57e25e1f8 --- /dev/null +++ b/datadog_api_client/v2/model/job_definition_from_rule.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JobDefinitionFromRule(ModelNormal): + validations = { + "case_index": { + "inclusive_maximum": 9, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "case_index": (int,), + "_from": (int,), + "id": (str,), + "index": (str,), + "notifications": ([str],), + "to": (int,), + } + attribute_map = { + "case_index": "caseIndex", + "_from": "from", + "id": "id", + "index": "index", + "notifications": "notifications", + "to": "to", + } + + def __init__(self_, _from: int, id: str, index: str, to: int, case_index: Union[int, UnsetType]=unset, notifications: Union[List[str], UnsetType]=unset, **kwargs): + """ + Definition of a historical job based on a security monitoring rule. + + :param case_index: Zero-based index of the rule case to use as the job's signal condition. When omitted, all cases are evaluated. Up to 10 cases are supported, so valid values are 0 to 9. + :type case_index: int, optional + + :param _from: Starting time of data analyzed by the job. + :type _from: int + + :param id: ID of the detection rule used to create the job. + :type id: str + + :param index: Index used to load the data. + :type index: str + + :param notifications: Notifications sent when the job is completed. + :type notifications: [str], optional + + :param to: Ending time of data analyzed by the job. + :type to: int + """ + if case_index is not unset: + kwargs["case_index"] = case_index + if notifications is not unset: + kwargs["notifications"] = notifications + super().__init__(kwargs) + + + self_._from = _from + self_.id = id + self_.index = index + self_.to = to diff --git a/datadog_api_client/v2/model/js_sourcemap_attributes.py b/datadog_api_client/v2/model/js_sourcemap_attributes.py new file mode 100644 index 0000000000..5d8dd95e83 --- /dev/null +++ b/datadog_api_client/v2/model/js_sourcemap_attributes.py @@ -0,0 +1,120 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JSSourcemapAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "absolute_path": (str,), + "blob_storage_sourcemap_path": (str,), + "build_id": (str,), + "created_at": (datetime,), + "domain": (str,), + "file_name": (str,), + "mapkind": (str,), + "service": (str,), + "size": (int,), + "variant": (str,), + "version": (str,), + "version_code": (str,), + } + attribute_map = { + "absolute_path": "absolute_path", + "blob_storage_sourcemap_path": "blob_storage_sourcemap_path", + "build_id": "build_id", + "created_at": "created_at", + "domain": "domain", + "file_name": "file_name", + "mapkind": "mapkind", + "service": "service", + "size": "size", + "variant": "variant", + "version": "version", + "version_code": "version_code", + } + + def __init__(self_, created_at: datetime, mapkind: str, size: int, absolute_path: Union[str, UnsetType]=unset, blob_storage_sourcemap_path: Union[str, UnsetType]=unset, build_id: Union[str, UnsetType]=unset, domain: Union[str, UnsetType]=unset, file_name: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, variant: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, version_code: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a JavaScript source map. + + :param absolute_path: The absolute path to the minified JavaScript file. + :type absolute_path: str, optional + + :param blob_storage_sourcemap_path: The path to the source map in blob storage. + :type blob_storage_sourcemap_path: str, optional + + :param build_id: The build identifier. + :type build_id: str, optional + + :param created_at: The timestamp when the source map was created. + :type created_at: datetime + + :param domain: The domain associated with the source map. + :type domain: str, optional + + :param file_name: The file name of the minified JavaScript file. + :type file_name: str, optional + + :param mapkind: The type of source map. + :type mapkind: str + + :param service: The service name associated with the source map. + :type service: str, optional + + :param size: The size of the source map file in bytes. + :type size: int + + :param variant: The source map variant. + :type variant: str, optional + + :param version: The version of the service associated with the source map. + :type version: str, optional + + :param version_code: The version code. + :type version_code: str, optional + """ + if absolute_path is not unset: + kwargs["absolute_path"] = absolute_path + if blob_storage_sourcemap_path is not unset: + kwargs["blob_storage_sourcemap_path"] = blob_storage_sourcemap_path + if build_id is not unset: + kwargs["build_id"] = build_id + if domain is not unset: + kwargs["domain"] = domain + if file_name is not unset: + kwargs["file_name"] = file_name + if service is not unset: + kwargs["service"] = service + if variant is not unset: + kwargs["variant"] = variant + if version is not unset: + kwargs["version"] = version + if version_code is not unset: + kwargs["version_code"] = version_code + super().__init__(kwargs) + + + self_.created_at = created_at + self_.mapkind = mapkind + self_.size = size diff --git a/datadog_api_client/v2/model/js_sourcemap_data.py b/datadog_api_client/v2/model/js_sourcemap_data.py new file mode 100644 index 0000000000..28e5cc9d74 --- /dev/null +++ b/datadog_api_client/v2/model/js_sourcemap_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.js_sourcemap_attributes import JSSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + +class JSSourcemapData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.js_sourcemap_attributes import JSSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + return { + "attributes": (JSSourcemapAttributes,), + "id": (str,), + "type": (SourcemapDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: JSSourcemapAttributes, id: str, type: SourcemapDataType, **kwargs): + """ + JavaScript source map data object. + + :param attributes: Attributes of a JavaScript source map. + :type attributes: JSSourcemapAttributes + + :param id: The unique identifier of the source map. + :type id: str + + :param type: The resource type for source map objects. + :type type: SourcemapDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/json_patch_operation.py b/datadog_api_client/v2/model/json_patch_operation.py new file mode 100644 index 0000000000..6169fd4528 --- /dev/null +++ b/datadog_api_client/v2/model/json_patch_operation.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.json_patch_operation_op import JsonPatchOperationOp + +class JsonPatchOperation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.json_patch_operation_op import JsonPatchOperationOp + return { + "op": (JsonPatchOperationOp,), + "path": (str,), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "op": "op", + "path": "path", + "value": "value", + } + + def __init__(self_, op: JsonPatchOperationOp, path: str, value: Union[Any, UnsetType]=unset, **kwargs): + """ + A JSON Patch operation as per RFC 6902. + + :param op: The operation to perform. + :type op: JsonPatchOperationOp + + :param path: A JSON Pointer path (e.g., "/name", "/value/secure"). + :type path: str + + :param value: The value to use for the operation (not applicable for "remove" and "test" operations). + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + """ + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.op = op + self_.path = path diff --git a/datadog_api_client/v2/model/json_patch_operation_op.py b/datadog_api_client/v2/model/json_patch_operation_op.py new file mode 100644 index 0000000000..a87d8a2b87 --- /dev/null +++ b/datadog_api_client/v2/model/json_patch_operation_op.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class JsonPatchOperationOp(ModelSimple): + """ + The operation to perform. + + :param value: Must be one of ["add", "remove", "replace", "move", "copy", "test"]. + :type value: str + """ + + allowed_values = { + "add", + "remove", + "replace", + "move", + "copy", + "test", + } + ADD: ClassVar["JsonPatchOperationOp"] + REMOVE: ClassVar["JsonPatchOperationOp"] + REPLACE: ClassVar["JsonPatchOperationOp"] + MOVE: ClassVar["JsonPatchOperationOp"] + COPY: ClassVar["JsonPatchOperationOp"] + TEST: ClassVar["JsonPatchOperationOp"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +JsonPatchOperationOp.ADD = JsonPatchOperationOp("add") +JsonPatchOperationOp.REMOVE = JsonPatchOperationOp("remove") +JsonPatchOperationOp.REPLACE = JsonPatchOperationOp("replace") +JsonPatchOperationOp.MOVE = JsonPatchOperationOp("move") +JsonPatchOperationOp.COPY = JsonPatchOperationOp("copy") +JsonPatchOperationOp.TEST = JsonPatchOperationOp("test") diff --git a/datadog_api_client/v2/model/jsonapi_error_item.py b/datadog_api_client/v2/model/jsonapi_error_item.py new file mode 100644 index 0000000000..c9eb9601ff --- /dev/null +++ b/datadog_api_client/v2/model/jsonapi_error_item.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jsonapi_error_item_source import JSONAPIErrorItemSource + +class JSONAPIErrorItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jsonapi_error_item_source import JSONAPIErrorItemSource + return { + "detail": (str,), + "meta": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "source": (JSONAPIErrorItemSource,), + "status": (str,), + "title": (str,), + } + attribute_map = { + "detail": "detail", + "meta": "meta", + "source": "source", + "status": "status", + "title": "title", + } + + def __init__(self_, detail: Union[str, UnsetType]=unset, meta: Union[Dict[str, Any], UnsetType]=unset, source: Union[JSONAPIErrorItemSource, UnsetType]=unset, status: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + API error response body + + :param detail: A human-readable explanation specific to this occurrence of the error. + :type detail: str, optional + + :param meta: Non-standard meta-information about the error + :type meta: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param source: References to the source of the error. + :type source: JSONAPIErrorItemSource, optional + + :param status: Status code of the response. + :type status: str, optional + + :param title: Short human-readable summary of the error. + :type title: str, optional + """ + if detail is not unset: + kwargs["detail"] = detail + if meta is not unset: + kwargs["meta"] = meta + if source is not unset: + kwargs["source"] = source + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/jsonapi_error_item_source.py b/datadog_api_client/v2/model/jsonapi_error_item_source.py new file mode 100644 index 0000000000..cad1523588 --- /dev/null +++ b/datadog_api_client/v2/model/jsonapi_error_item_source.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JSONAPIErrorItemSource(ModelNormal): + @cached_property + def openapi_types(_): + return { + "header": (str,), + "parameter": (str,), + "pointer": (str,), + } + attribute_map = { + "header": "header", + "parameter": "parameter", + "pointer": "pointer", + } + + def __init__(self_, header: Union[str, UnsetType]=unset, parameter: Union[str, UnsetType]=unset, pointer: Union[str, UnsetType]=unset, **kwargs): + """ + References to the source of the error. + + :param header: A string indicating the name of a single request header which caused the error. + :type header: str, optional + + :param parameter: A string indicating which URI query parameter caused the error. + :type parameter: str, optional + + :param pointer: A JSON pointer to the value in the request document that caused the error. + :type pointer: str, optional + """ + if header is not unset: + kwargs["header"] = header + if parameter is not unset: + kwargs["parameter"] = parameter + if pointer is not unset: + kwargs["pointer"] = pointer + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/jsonapi_error_response.py b/datadog_api_client/v2/model/jsonapi_error_response.py new file mode 100644 index 0000000000..b4e5a2623b --- /dev/null +++ b/datadog_api_client/v2/model/jsonapi_error_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jsonapi_error_item import JSONAPIErrorItem + +class JSONAPIErrorResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jsonapi_error_item import JSONAPIErrorItem + return { + "errors": ([JSONAPIErrorItem],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: List[JSONAPIErrorItem], **kwargs): + """ + API error response. + + :param errors: A list of errors. + :type errors: [JSONAPIErrorItem] + """ + super().__init__(kwargs) + + + self_.errors = errors diff --git a/datadog_api_client/v2/model/jvm_sourcemap_attributes.py b/datadog_api_client/v2/model/jvm_sourcemap_attributes.py new file mode 100644 index 0000000000..6cb33dcf6b --- /dev/null +++ b/datadog_api_client/v2/model/jvm_sourcemap_attributes.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class JVMSourcemapAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "build_id": (str,), + "created_at": (datetime,), + "mapkind": (str,), + "service": (str,), + "size": (int,), + "variant": (str,), + "version": (str,), + "version_code": (str,), + } + attribute_map = { + "build_id": "build_id", + "created_at": "created_at", + "mapkind": "mapkind", + "service": "service", + "size": "size", + "variant": "variant", + "version": "version", + "version_code": "version_code", + } + + def __init__(self_, created_at: datetime, mapkind: str, size: int, build_id: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, variant: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, version_code: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a JVM mapping file. + + :param build_id: The build identifier (UUID format). + :type build_id: str, optional + + :param created_at: The timestamp when the mapping file was created. + :type created_at: datetime + + :param mapkind: The type of source map. + :type mapkind: str + + :param service: The service name associated with the mapping file. + :type service: str, optional + + :param size: The size of the mapping file in bytes. + :type size: int + + :param variant: The build variant (e.g., ``release`` , ``debug`` ). + :type variant: str, optional + + :param version: The version of the service associated with the mapping file. + :type version: str, optional + + :param version_code: The version code. + :type version_code: str, optional + """ + if build_id is not unset: + kwargs["build_id"] = build_id + if service is not unset: + kwargs["service"] = service + if variant is not unset: + kwargs["variant"] = variant + if version is not unset: + kwargs["version"] = version + if version_code is not unset: + kwargs["version_code"] = version_code + super().__init__(kwargs) + + + self_.created_at = created_at + self_.mapkind = mapkind + self_.size = size diff --git a/datadog_api_client/v2/model/jvm_sourcemap_data.py b/datadog_api_client/v2/model/jvm_sourcemap_data.py new file mode 100644 index 0000000000..73489a8ffe --- /dev/null +++ b/datadog_api_client/v2/model/jvm_sourcemap_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.jvm_sourcemap_attributes import JVMSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + +class JVMSourcemapData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.jvm_sourcemap_attributes import JVMSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + return { + "attributes": (JVMSourcemapAttributes,), + "id": (str,), + "type": (SourcemapDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: JVMSourcemapAttributes, id: str, type: SourcemapDataType, **kwargs): + """ + JVM (ProGuard/R8) mapping file data object. + + :param attributes: Attributes of a JVM mapping file. + :type attributes: JVMSourcemapAttributes + + :param id: The unique identifier of the source map. + :type id: str + + :param type: The resource type for source map objects. + :type type: SourcemapDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/kind_attributes.py b/datadog_api_client/v2/model/kind_attributes.py new file mode 100644 index 0000000000..7cd6c380c6 --- /dev/null +++ b/datadog_api_client/v2/model/kind_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class KindAttributes(ModelNormal): + validations = { + "name": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "description": (str,), + "display_name": (str,), + "name": (str,), + } + attribute_map = { + "description": "description", + "display_name": "displayName", + "name": "name", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Kind attributes. + + :param description: Short description of the kind. + :type description: str, optional + + :param display_name: User friendly name of the kind. + :type display_name: str, optional + + :param name: The kind name. + :type name: str, optional + """ + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/kind_data.py b/datadog_api_client/v2/model/kind_data.py new file mode 100644 index 0000000000..85e5678d3e --- /dev/null +++ b/datadog_api_client/v2/model/kind_data.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.kind_attributes import KindAttributes + from datadog_api_client.v2.model.kind_metadata import KindMetadata + +class KindData(ModelNormal): + validations = { + "id": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.kind_attributes import KindAttributes + from datadog_api_client.v2.model.kind_metadata import KindMetadata + return { + "attributes": (KindAttributes,), + "id": (str,), + "meta": (KindMetadata,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "type": "type", + } + + def __init__(self_, attributes: Union[KindAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, meta: Union[KindMetadata, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Schema that defines the structure of a Kind object in the Software Catalog. + + :param attributes: Kind attributes. + :type attributes: KindAttributes, optional + + :param id: A read-only globally unique identifier for the entity generated by Datadog. User supplied values are ignored. + :type id: str, optional + + :param meta: Kind metadata. + :type meta: KindMetadata, optional + + :param type: Kind. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if meta is not unset: + kwargs["meta"] = meta + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/kind_metadata.py b/datadog_api_client/v2/model/kind_metadata.py new file mode 100644 index 0000000000..7947bd7546 --- /dev/null +++ b/datadog_api_client/v2/model/kind_metadata.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class KindMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (str,), + "modified_at": (str,), + } + attribute_map = { + "created_at": "createdAt", + "modified_at": "modifiedAt", + } + + def __init__(self_, created_at: Union[str, UnsetType]=unset, modified_at: Union[str, UnsetType]=unset, **kwargs): + """ + Kind metadata. + + :param created_at: The creation time. + :type created_at: str, optional + + :param modified_at: The modification time. + :type modified_at: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/kind_obj.py b/datadog_api_client/v2/model/kind_obj.py new file mode 100644 index 0000000000..8aea6af19d --- /dev/null +++ b/datadog_api_client/v2/model/kind_obj.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class KindObj(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "display_name": (str,), + "kind": (str,), + } + attribute_map = { + "description": "description", + "display_name": "displayName", + "kind": "kind", + } + + def __init__(self_, kind: str, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + Schema for kind. + + :param description: Short description of the kind. + :type description: str, optional + + :param display_name: The display name of the kind. Automatically generated if not provided. + :type display_name: str, optional + + :param kind: The name of the kind to create or update. This must be in kebab-case format. + :type kind: str + """ + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.kind = kind diff --git a/datadog_api_client/v2/model/kind_response_meta.py b/datadog_api_client/v2/model/kind_response_meta.py new file mode 100644 index 0000000000..02791b3e4e --- /dev/null +++ b/datadog_api_client/v2/model/kind_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class KindResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + } + attribute_map = { + "count": "count", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, **kwargs): + """ + Kind response metadata. + + :param count: Total kinds count. + :type count: int, optional + """ + if count is not unset: + kwargs["count"] = count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/language.py b/datadog_api_client/v2/model/language.py new file mode 100644 index 0000000000..4b6ab80d1e --- /dev/null +++ b/datadog_api_client/v2/model/language.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class Language(ModelSimple): + """ + Programming language + + :param value: Must be one of ["PYTHON", "JAVASCRIPT", "TYPESCRIPT", "JAVA", "GO", "YAML", "RUBY", "CSHARP", "PHP", "KOTLIN", "SWIFT"]. + :type value: str + """ + + allowed_values = { + "PYTHON", + "JAVASCRIPT", + "TYPESCRIPT", + "JAVA", + "GO", + "YAML", + "RUBY", + "CSHARP", + "PHP", + "KOTLIN", + "SWIFT", + } + PYTHON: ClassVar["Language"] + JAVASCRIPT: ClassVar["Language"] + TYPESCRIPT: ClassVar["Language"] + JAVA: ClassVar["Language"] + GO: ClassVar["Language"] + YAML: ClassVar["Language"] + RUBY: ClassVar["Language"] + CSHARP: ClassVar["Language"] + PHP: ClassVar["Language"] + KOTLIN: ClassVar["Language"] + SWIFT: ClassVar["Language"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +Language.PYTHON = Language("PYTHON") +Language.JAVASCRIPT = Language("JAVASCRIPT") +Language.TYPESCRIPT = Language("TYPESCRIPT") +Language.JAVA = Language("JAVA") +Language.GO = Language("GO") +Language.YAML = Language("YAML") +Language.RUBY = Language("RUBY") +Language.CSHARP = Language("CSHARP") +Language.PHP = Language("PHP") +Language.KOTLIN = Language("KOTLIN") +Language.SWIFT = Language("SWIFT") diff --git a/datadog_api_client/v2/model/latest_version_match_policy.py b/datadog_api_client/v2/model/latest_version_match_policy.py new file mode 100644 index 0000000000..5fedf1c688 --- /dev/null +++ b/datadog_api_client/v2/model/latest_version_match_policy.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LatestVersionMatchPolicy(ModelSimple): + """ + The policy for matching the latest form version during an upsert operation. + + :param value: Must be one of ["none", "if_etag_match"]. + :type value: str + """ + + allowed_values = { + "none", + "if_etag_match", + } + NONE: ClassVar["LatestVersionMatchPolicy"] + IF_ETAG_MATCH: ClassVar["LatestVersionMatchPolicy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LatestVersionMatchPolicy.NONE = LatestVersionMatchPolicy("none") +LatestVersionMatchPolicy.IF_ETAG_MATCH = LatestVersionMatchPolicy("if_etag_match") diff --git a/datadog_api_client/v2/model/launch_darkly_api_key.py b/datadog_api_client/v2/model/launch_darkly_api_key.py new file mode 100644 index 0000000000..80c08f9dff --- /dev/null +++ b/datadog_api_client/v2/model/launch_darkly_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.launch_darkly_api_key_type import LaunchDarklyAPIKeyType + +class LaunchDarklyAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.launch_darkly_api_key_type import LaunchDarklyAPIKeyType + return { + "api_token": (str,), + "type": (LaunchDarklyAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, api_token: str, type: LaunchDarklyAPIKeyType, **kwargs): + """ + The definition of the ``LaunchDarklyAPIKey`` object. + + :param api_token: The ``LaunchDarklyAPIKey`` ``api_token``. + :type api_token: str + + :param type: The definition of the ``LaunchDarklyAPIKey`` object. + :type type: LaunchDarklyAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_token = api_token + self_.type = type diff --git a/datadog_api_client/v2/model/launch_darkly_api_key_type.py b/datadog_api_client/v2/model/launch_darkly_api_key_type.py new file mode 100644 index 0000000000..3e06b8d544 --- /dev/null +++ b/datadog_api_client/v2/model/launch_darkly_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LaunchDarklyAPIKeyType(ModelSimple): + """ + The definition of the `LaunchDarklyAPIKey` object. + + :param value: If omitted defaults to "LaunchDarklyAPIKey". Must be one of ["LaunchDarklyAPIKey"]. + :type value: str + """ + + allowed_values = { + "LaunchDarklyAPIKey", + } + LAUNCHDARKLYAPIKEY: ClassVar["LaunchDarklyAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LaunchDarklyAPIKeyType.LAUNCHDARKLYAPIKEY = LaunchDarklyAPIKeyType("LaunchDarklyAPIKey") diff --git a/datadog_api_client/v2/model/launch_darkly_api_key_update.py b/datadog_api_client/v2/model/launch_darkly_api_key_update.py new file mode 100644 index 0000000000..7206868360 --- /dev/null +++ b/datadog_api_client/v2/model/launch_darkly_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.launch_darkly_api_key_type import LaunchDarklyAPIKeyType + +class LaunchDarklyAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.launch_darkly_api_key_type import LaunchDarklyAPIKeyType + return { + "api_token": (str,), + "type": (LaunchDarklyAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, type: LaunchDarklyAPIKeyType, api_token: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``LaunchDarklyAPIKey`` object. + + :param api_token: The ``LaunchDarklyAPIKeyUpdate`` ``api_token``. + :type api_token: str, optional + + :param type: The definition of the ``LaunchDarklyAPIKey`` object. + :type type: LaunchDarklyAPIKeyType + """ + if api_token is not unset: + kwargs["api_token"] = api_token + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/launch_darkly_credentials.py b/datadog_api_client/v2/model/launch_darkly_credentials.py new file mode 100644 index 0000000000..c115f6aee8 --- /dev/null +++ b/datadog_api_client/v2/model/launch_darkly_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LaunchDarklyCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``LaunchDarklyCredentials`` object. + + :param api_token: The `LaunchDarklyAPIKey` `api_token`. + :type api_token: str + + :param type: The definition of the `LaunchDarklyAPIKey` object. + :type type: LaunchDarklyAPIKeyType + """ + 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.launch_darkly_api_key import LaunchDarklyAPIKey + return { + "oneOf": [ + LaunchDarklyAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/launch_darkly_credentials_update.py b/datadog_api_client/v2/model/launch_darkly_credentials_update.py new file mode 100644 index 0000000000..a3bf6b8750 --- /dev/null +++ b/datadog_api_client/v2/model/launch_darkly_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LaunchDarklyCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``LaunchDarklyCredentialsUpdate`` object. + + :param api_token: The `LaunchDarklyAPIKeyUpdate` `api_token`. + :type api_token: str, optional + + :param type: The definition of the `LaunchDarklyAPIKey` object. + :type type: LaunchDarklyAPIKeyType + """ + 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.launch_darkly_api_key_update import LaunchDarklyAPIKeyUpdate + return { + "oneOf": [ + LaunchDarklyAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/launch_darkly_integration.py b/datadog_api_client/v2/model/launch_darkly_integration.py new file mode 100644 index 0000000000..2940c3084e --- /dev/null +++ b/datadog_api_client/v2/model/launch_darkly_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.launch_darkly_credentials import LaunchDarklyCredentials + from datadog_api_client.v2.model.launch_darkly_integration_type import LaunchDarklyIntegrationType + from datadog_api_client.v2.model.launch_darkly_api_key import LaunchDarklyAPIKey + +class LaunchDarklyIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.launch_darkly_credentials import LaunchDarklyCredentials + from datadog_api_client.v2.model.launch_darkly_integration_type import LaunchDarklyIntegrationType + return { + "credentials": (LaunchDarklyCredentials,), + "type": (LaunchDarklyIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[LaunchDarklyCredentials, LaunchDarklyAPIKey], type: LaunchDarklyIntegrationType, **kwargs): + """ + The definition of the ``LaunchDarklyIntegration`` object. + + :param credentials: The definition of the ``LaunchDarklyCredentials`` object. + :type credentials: LaunchDarklyCredentials + + :param type: The definition of the ``LaunchDarklyIntegrationType`` object. + :type type: LaunchDarklyIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/launch_darkly_integration_type.py b/datadog_api_client/v2/model/launch_darkly_integration_type.py new file mode 100644 index 0000000000..a73128abe9 --- /dev/null +++ b/datadog_api_client/v2/model/launch_darkly_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LaunchDarklyIntegrationType(ModelSimple): + """ + The definition of the `LaunchDarklyIntegrationType` object. + + :param value: If omitted defaults to "LaunchDarkly". Must be one of ["LaunchDarkly"]. + :type value: str + """ + + allowed_values = { + "LaunchDarkly", + } + LAUNCHDARKLY: ClassVar["LaunchDarklyIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LaunchDarklyIntegrationType.LAUNCHDARKLY = LaunchDarklyIntegrationType("LaunchDarkly") diff --git a/datadog_api_client/v2/model/launch_darkly_integration_update.py b/datadog_api_client/v2/model/launch_darkly_integration_update.py new file mode 100644 index 0000000000..969fcfcaa1 --- /dev/null +++ b/datadog_api_client/v2/model/launch_darkly_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.launch_darkly_credentials_update import LaunchDarklyCredentialsUpdate + from datadog_api_client.v2.model.launch_darkly_integration_type import LaunchDarklyIntegrationType + from datadog_api_client.v2.model.launch_darkly_api_key_update import LaunchDarklyAPIKeyUpdate + +class LaunchDarklyIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.launch_darkly_credentials_update import LaunchDarklyCredentialsUpdate + from datadog_api_client.v2.model.launch_darkly_integration_type import LaunchDarklyIntegrationType + return { + "credentials": (LaunchDarklyCredentialsUpdate,), + "type": (LaunchDarklyIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: LaunchDarklyIntegrationType, credentials: Union[LaunchDarklyCredentialsUpdate, LaunchDarklyAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``LaunchDarklyIntegrationUpdate`` object. + + :param credentials: The definition of the ``LaunchDarklyCredentialsUpdate`` object. + :type credentials: LaunchDarklyCredentialsUpdate, optional + + :param type: The definition of the ``LaunchDarklyIntegrationType`` object. + :type type: LaunchDarklyIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/layer.py b/datadog_api_client/v2/model/layer.py new file mode 100644 index 0000000000..060c01def0 --- /dev/null +++ b/datadog_api_client/v2/model/layer.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.layer_attributes import LayerAttributes + from datadog_api_client.v2.model.layer_relationships import LayerRelationships + from datadog_api_client.v2.model.layer_type import LayerType + +class Layer(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.layer_attributes import LayerAttributes + from datadog_api_client.v2.model.layer_relationships import LayerRelationships + from datadog_api_client.v2.model.layer_type import LayerType + return { + "attributes": (LayerAttributes,), + "id": (str,), + "relationships": (LayerRelationships,), + "type": (LayerType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: LayerType, attributes: Union[LayerAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[LayerRelationships, UnsetType]=unset, **kwargs): + """ + Encapsulates a layer resource, holding attributes like rotation details, plus relationships to the members covering that layer. + + :param attributes: Describes key properties of a Layer, including rotation details, name, start/end times, and any restrictions. + :type attributes: LayerAttributes, optional + + :param id: A unique identifier for this layer. + :type id: str, optional + + :param relationships: Holds references to objects related to the Layer entity, such as its members. + :type relationships: LayerRelationships, optional + + :param type: Layers resource type. + :type type: LayerType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/layer_attributes.py b/datadog_api_client/v2/model/layer_attributes.py new file mode 100644 index 0000000000..bfa4c0d424 --- /dev/null +++ b/datadog_api_client/v2/model/layer_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.layer_attributes_interval import LayerAttributesInterval + from datadog_api_client.v2.model.time_restriction import TimeRestriction + +class LayerAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.layer_attributes_interval import LayerAttributesInterval + from datadog_api_client.v2.model.time_restriction import TimeRestriction + return { + "effective_date": (datetime,), + "end_date": (datetime,), + "interval": (LayerAttributesInterval,), + "name": (str,), + "restrictions": ([TimeRestriction],), + "rotation_start": (datetime,), + "time_zone": (str,), + } + attribute_map = { + "effective_date": "effective_date", + "end_date": "end_date", + "interval": "interval", + "name": "name", + "restrictions": "restrictions", + "rotation_start": "rotation_start", + "time_zone": "time_zone", + } + + def __init__(self_, effective_date: Union[datetime, UnsetType]=unset, end_date: Union[datetime, UnsetType]=unset, interval: Union[LayerAttributesInterval, UnsetType]=unset, name: Union[str, UnsetType]=unset, restrictions: Union[List[TimeRestriction], UnsetType]=unset, rotation_start: Union[datetime, UnsetType]=unset, time_zone: Union[str, UnsetType]=unset, **kwargs): + """ + Describes key properties of a Layer, including rotation details, name, start/end times, and any restrictions. + + :param effective_date: When the layer becomes active (ISO 8601). + :type effective_date: datetime, optional + + :param end_date: When the layer ceases to be active (ISO 8601). + :type end_date: datetime, optional + + :param interval: Defines how often the rotation repeats, using a combination of days and optional seconds. Should be at least 1 hour. + :type interval: LayerAttributesInterval, optional + + :param name: The name of this layer. + :type name: str, optional + + :param restrictions: An optional list of time restrictions for when this layer is in effect. + :type restrictions: [TimeRestriction], optional + + :param rotation_start: The date/time when the rotation starts (ISO 8601). + :type rotation_start: datetime, optional + + :param time_zone: The time zone for this layer. + :type time_zone: str, optional + """ + if effective_date is not unset: + kwargs["effective_date"] = effective_date + if end_date is not unset: + kwargs["end_date"] = end_date + if interval is not unset: + kwargs["interval"] = interval + if name is not unset: + kwargs["name"] = name + if restrictions is not unset: + kwargs["restrictions"] = restrictions + if rotation_start is not unset: + kwargs["rotation_start"] = rotation_start + if time_zone is not unset: + kwargs["time_zone"] = time_zone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/layer_attributes_interval.py b/datadog_api_client/v2/model/layer_attributes_interval.py new file mode 100644 index 0000000000..ff634ddd28 --- /dev/null +++ b/datadog_api_client/v2/model/layer_attributes_interval.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LayerAttributesInterval(ModelNormal): + validations = { + "days": { + "inclusive_maximum": 400, + }, + "seconds": { + "inclusive_maximum": 2592000, + }, + } + @cached_property + def openapi_types(_): + return { + "days": (int,), + "seconds": (int,), + } + attribute_map = { + "days": "days", + "seconds": "seconds", + } + + def __init__(self_, days: Union[int, UnsetType]=unset, seconds: Union[int, UnsetType]=unset, **kwargs): + """ + Defines how often the rotation repeats, using a combination of days and optional seconds. Should be at least 1 hour. + + :param days: The number of days in each rotation cycle. + :type days: int, optional + + :param seconds: Any additional seconds for the rotation cycle (up to 30 days). + :type seconds: int, optional + """ + if days is not unset: + kwargs["days"] = days + if seconds is not unset: + kwargs["seconds"] = seconds + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/layer_relationships.py b/datadog_api_client/v2/model/layer_relationships.py new file mode 100644 index 0000000000..2d32a9f68b --- /dev/null +++ b/datadog_api_client/v2/model/layer_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.layer_relationships_members import LayerRelationshipsMembers + +class LayerRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.layer_relationships_members import LayerRelationshipsMembers + return { + "members": (LayerRelationshipsMembers,), + } + attribute_map = { + "members": "members", + } + + def __init__(self_, members: Union[LayerRelationshipsMembers, UnsetType]=unset, **kwargs): + """ + Holds references to objects related to the Layer entity, such as its members. + + :param members: Holds an array of references to the members of a Layer, each containing member IDs. + :type members: LayerRelationshipsMembers, optional + """ + if members is not unset: + kwargs["members"] = members + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/layer_relationships_members.py b/datadog_api_client/v2/model/layer_relationships_members.py new file mode 100644 index 0000000000..0aaf9b6de9 --- /dev/null +++ b/datadog_api_client/v2/model/layer_relationships_members.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.layer_relationships_members_data_items import LayerRelationshipsMembersDataItems + +class LayerRelationshipsMembers(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.layer_relationships_members_data_items import LayerRelationshipsMembersDataItems + return { + "data": ([LayerRelationshipsMembersDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[LayerRelationshipsMembersDataItems], UnsetType]=unset, **kwargs): + """ + Holds an array of references to the members of a Layer, each containing member IDs. + + :param data: The list of members who belong to this layer. + :type data: [LayerRelationshipsMembersDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/layer_relationships_members_data_items.py b/datadog_api_client/v2/model/layer_relationships_members_data_items.py new file mode 100644 index 0000000000..3249ec8828 --- /dev/null +++ b/datadog_api_client/v2/model/layer_relationships_members_data_items.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.layer_relationships_members_data_items_type import LayerRelationshipsMembersDataItemsType + +class LayerRelationshipsMembersDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.layer_relationships_members_data_items_type import LayerRelationshipsMembersDataItemsType + return { + "id": (str,), + "type": (LayerRelationshipsMembersDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: LayerRelationshipsMembersDataItemsType, **kwargs): + """ + Represents a single member object in a layer's ``members`` array, referencing + a unique Datadog user ID. + + :param id: The unique user ID of the layer member. + :type id: str + + :param type: Members resource type. + :type type: LayerRelationshipsMembersDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/layer_relationships_members_data_items_type.py b/datadog_api_client/v2/model/layer_relationships_members_data_items_type.py new file mode 100644 index 0000000000..d366f8831b --- /dev/null +++ b/datadog_api_client/v2/model/layer_relationships_members_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LayerRelationshipsMembersDataItemsType(ModelSimple): + """ + Members resource type. + + :param value: If omitted defaults to "members". Must be one of ["members"]. + :type value: str + """ + + allowed_values = { + "members", + } + MEMBERS: ClassVar["LayerRelationshipsMembersDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LayerRelationshipsMembersDataItemsType.MEMBERS = LayerRelationshipsMembersDataItemsType("members") diff --git a/datadog_api_client/v2/model/layer_type.py b/datadog_api_client/v2/model/layer_type.py new file mode 100644 index 0000000000..af89d04497 --- /dev/null +++ b/datadog_api_client/v2/model/layer_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LayerType(ModelSimple): + """ + Layers resource type. + + :param value: If omitted defaults to "layers". Must be one of ["layers"]. + :type value: str + """ + + allowed_values = { + "layers", + } + LAYERS: ClassVar["LayerType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LayerType.LAYERS = LayerType("layers") diff --git a/datadog_api_client/v2/model/leaked_key.py b/datadog_api_client/v2/model/leaked_key.py new file mode 100644 index 0000000000..e8b2bed5b7 --- /dev/null +++ b/datadog_api_client/v2/model/leaked_key.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.leaked_key_attributes import LeakedKeyAttributes + from datadog_api_client.v2.model.leaked_key_type import LeakedKeyType + +class LeakedKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.leaked_key_attributes import LeakedKeyAttributes + from datadog_api_client.v2.model.leaked_key_type import LeakedKeyType + return { + "attributes": (LeakedKeyAttributes,), + "id": (str,), + "type": (LeakedKeyType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LeakedKeyAttributes, id: str, type: LeakedKeyType, **kwargs): + """ + The definition of LeakedKey object. + + :param attributes: The definition of LeakedKeyAttributes object. + :type attributes: LeakedKeyAttributes + + :param id: The LeakedKey id. + :type id: str + + :param type: The definition of LeakedKeyType object. + :type type: LeakedKeyType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/leaked_key_attributes.py b/datadog_api_client/v2/model/leaked_key_attributes.py new file mode 100644 index 0000000000..367616de45 --- /dev/null +++ b/datadog_api_client/v2/model/leaked_key_attributes.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LeakedKeyAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "date": (datetime,), + "leak_source": (str,), + } + attribute_map = { + "date": "date", + "leak_source": "leak_source", + } + + def __init__(self_, date: datetime, leak_source: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of LeakedKeyAttributes object. + + :param date: The LeakedKeyAttributes date. + :type date: datetime + + :param leak_source: The LeakedKeyAttributes leak_source. + :type leak_source: str, optional + """ + if leak_source is not unset: + kwargs["leak_source"] = leak_source + super().__init__(kwargs) + + + self_.date = date diff --git a/datadog_api_client/v2/model/leaked_key_type.py b/datadog_api_client/v2/model/leaked_key_type.py new file mode 100644 index 0000000000..ce88c91be2 --- /dev/null +++ b/datadog_api_client/v2/model/leaked_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LeakedKeyType(ModelSimple): + """ + The definition of LeakedKeyType object. + + :param value: If omitted defaults to "leaked_keys". Must be one of ["leaked_keys"]. + :type value: str + """ + + allowed_values = { + "leaked_keys", + } + LEAKED_KEYS: ClassVar["LeakedKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LeakedKeyType.LEAKED_KEYS = LeakedKeyType("leaked_keys") diff --git a/datadog_api_client/v2/model/library.py b/datadog_api_client/v2/model/library.py new file mode 100644 index 0000000000..88bc28c0a4 --- /dev/null +++ b/datadog_api_client/v2/model/library.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Library(ModelNormal): + @cached_property + def openapi_types(_): + return { + "additional_names": ([str],), + "name": (str,), + "version": (str,), + } + attribute_map = { + "additional_names": "additional_names", + "name": "name", + "version": "version", + } + + def __init__(self_, name: str, additional_names: Union[List[str], UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Vulnerability library. + + :param additional_names: Related library or package names (such as child packages or affected binary paths). + :type additional_names: [str], optional + + :param name: Vulnerability library name. + :type name: str + + :param version: Vulnerability library version. + :type version: str, optional + """ + if additional_names is not unset: + kwargs["additional_names"] = additional_names + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/licenses_list_response.py b/datadog_api_client/v2/model/licenses_list_response.py new file mode 100644 index 0000000000..a2f14c2d99 --- /dev/null +++ b/datadog_api_client/v2/model/licenses_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.licenses_list_response_data import LicensesListResponseData + +class LicensesListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.licenses_list_response_data import LicensesListResponseData + return { + "data": (LicensesListResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LicensesListResponseData, **kwargs): + """ + The top-level response object returned by the licenses list endpoint, containing the array of supported SPDX licenses. + + :param data: The data object in a licenses list response, containing the list of SPDX licenses. + :type data: LicensesListResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/licenses_list_response_data.py b/datadog_api_client/v2/model/licenses_list_response_data.py new file mode 100644 index 0000000000..be2fbf9a7e --- /dev/null +++ b/datadog_api_client/v2/model/licenses_list_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.licenses_list_response_data_attributes import LicensesListResponseDataAttributes + from datadog_api_client.v2.model.licenses_list_response_data_type import LicensesListResponseDataType + +class LicensesListResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.licenses_list_response_data_attributes import LicensesListResponseDataAttributes + from datadog_api_client.v2.model.licenses_list_response_data_type import LicensesListResponseDataType + return { + "attributes": (LicensesListResponseDataAttributes,), + "id": (str,), + "type": (LicensesListResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LicensesListResponseDataAttributes, id: str, type: LicensesListResponseDataType, **kwargs): + """ + The data object in a licenses list response, containing the list of SPDX licenses. + + :param attributes: The attributes of the licenses list response, containing the array of SPDX licenses. + :type attributes: LicensesListResponseDataAttributes + + :param id: The unique identifier for this licenses list response. + :type id: str + + :param type: The type identifier for license list responses. + :type type: LicensesListResponseDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/licenses_list_response_data_attributes.py b/datadog_api_client/v2/model/licenses_list_response_data_attributes.py new file mode 100644 index 0000000000..4bbc22f636 --- /dev/null +++ b/datadog_api_client/v2/model/licenses_list_response_data_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.licenses_list_response_data_attributes_licenses_items import LicensesListResponseDataAttributesLicensesItems + +class LicensesListResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.licenses_list_response_data_attributes_licenses_items import LicensesListResponseDataAttributesLicensesItems + return { + "licenses": ([LicensesListResponseDataAttributesLicensesItems],), + } + attribute_map = { + "licenses": "licenses", + } + + def __init__(self_, licenses: List[LicensesListResponseDataAttributesLicensesItems], **kwargs): + """ + The attributes of the licenses list response, containing the array of SPDX licenses. + + :param licenses: The list of SPDX licenses returned by the API. + :type licenses: [LicensesListResponseDataAttributesLicensesItems] + """ + super().__init__(kwargs) + + + self_.licenses = licenses diff --git a/datadog_api_client/v2/model/licenses_list_response_data_attributes_licenses_items.py b/datadog_api_client/v2/model/licenses_list_response_data_attributes_licenses_items.py new file mode 100644 index 0000000000..dcb853e6f6 --- /dev/null +++ b/datadog_api_client/v2/model/licenses_list_response_data_attributes_licenses_items.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LicensesListResponseDataAttributesLicensesItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "display_name": (str,), + "identifier": (str,), + "short_name": (str,), + } + attribute_map = { + "display_name": "display_name", + "identifier": "identifier", + "short_name": "short_name", + } + + def __init__(self_, display_name: str, identifier: str, short_name: str, **kwargs): + """ + An SPDX license entry returned by the licenses list endpoint. + + :param display_name: The human-readable name of the license. + :type display_name: str + + :param identifier: The SPDX identifier of the license. + :type identifier: str + + :param short_name: The short name of the license, typically matching the SPDX identifier. + :type short_name: str + """ + super().__init__(kwargs) + + + self_.display_name = display_name + self_.identifier = identifier + self_.short_name = short_name diff --git a/datadog_api_client/v2/model/licenses_list_response_data_type.py b/datadog_api_client/v2/model/licenses_list_response_data_type.py new file mode 100644 index 0000000000..64023c4955 --- /dev/null +++ b/datadog_api_client/v2/model/licenses_list_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LicensesListResponseDataType(ModelSimple): + """ + The type identifier for license list responses. + + :param value: If omitted defaults to "licenserequest". Must be one of ["licenserequest"]. + :type value: str + """ + + allowed_values = { + "licenserequest", + } + LICENSEREQUEST: ClassVar["LicensesListResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LicensesListResponseDataType.LICENSEREQUEST = LicensesListResponseDataType("licenserequest") diff --git a/datadog_api_client/v2/model/linear_issues_data_type.py b/datadog_api_client/v2/model/linear_issues_data_type.py new file mode 100644 index 0000000000..734ebbca5e --- /dev/null +++ b/datadog_api_client/v2/model/linear_issues_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LinearIssuesDataType(ModelSimple): + """ + Linear issues resource type. + + :param value: If omitted defaults to "linear_issues". Must be one of ["linear_issues"]. + :type value: str + """ + + allowed_values = { + "linear_issues", + } + LINEAR_ISSUES: ClassVar["LinearIssuesDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LinearIssuesDataType.LINEAR_ISSUES = LinearIssuesDataType("linear_issues") diff --git a/datadog_api_client/v2/model/links.py b/datadog_api_client/v2/model/links.py new file mode 100644 index 0000000000..68ba02a08e --- /dev/null +++ b/datadog_api_client/v2/model/links.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Links(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str,), + "next": (str,), + "previous": (str,), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "previous": "previous", + "self": "self", + } + + def __init__(self_, first: str, last: str, self: str, next: Union[str, UnsetType]=unset, previous: Union[str, UnsetType]=unset, **kwargs): + """ + The JSON:API links related to pagination. + + :param first: First page link. + :type first: str + + :param last: Last page link. + :type last: str + + :param next: Next page link. + :type next: str, optional + + :param previous: Previous page link. + :type previous: str, optional + + :param self: Request link. + :type self: str + """ + if next is not unset: + kwargs["next"] = next + if previous is not unset: + kwargs["previous"] = previous + super().__init__(kwargs) + + + self_.first = first + self_.last = last + self_.self = self diff --git a/datadog_api_client/v2/model/list_allocations_response.py b/datadog_api_client/v2/model/list_allocations_response.py new file mode 100644 index 0000000000..08b878d582 --- /dev/null +++ b/datadog_api_client/v2/model/list_allocations_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.allocation_data_response import AllocationDataResponse + +class ListAllocationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.allocation_data_response import AllocationDataResponse + return { + "data": ([AllocationDataResponse],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AllocationDataResponse], **kwargs): + """ + Response containing a list of targeting rules (allocations). + + :param data: List of targeting rules (allocations). + :type data: [AllocationDataResponse] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_apis_response.py b/datadog_api_client/v2/model/list_apis_response.py new file mode 100644 index 0000000000..5b590f84b4 --- /dev/null +++ b/datadog_api_client/v2/model/list_apis_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_apis_response_data import ListAPIsResponseData + from datadog_api_client.v2.model.list_apis_response_meta import ListAPIsResponseMeta + +class ListAPIsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_apis_response_data import ListAPIsResponseData + from datadog_api_client.v2.model.list_apis_response_meta import ListAPIsResponseMeta + return { + "data": ([ListAPIsResponseData],), + "meta": (ListAPIsResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[ListAPIsResponseData], UnsetType]=unset, meta: Union[ListAPIsResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for ``ListAPIs``. + + :param data: List of API items. + :type data: [ListAPIsResponseData], optional + + :param meta: Metadata for ``ListAPIsResponse``. + :type meta: ListAPIsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_apis_response_data.py b/datadog_api_client/v2/model/list_apis_response_data.py new file mode 100644 index 0000000000..6f29ae1669 --- /dev/null +++ b/datadog_api_client/v2/model/list_apis_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_apis_response_data_attributes import ListAPIsResponseDataAttributes + +class ListAPIsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_apis_response_data_attributes import ListAPIsResponseDataAttributes + return { + "attributes": (ListAPIsResponseDataAttributes,), + "id": (UUID,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + } + + def __init__(self_, attributes: Union[ListAPIsResponseDataAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Data envelope for ``ListAPIsResponse``. + + :param attributes: Attributes for ``ListAPIsResponseData``. + :type attributes: ListAPIsResponseDataAttributes, optional + + :param id: API identifier. + :type id: UUID, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_apis_response_data_attributes.py b/datadog_api_client/v2/model/list_apis_response_data_attributes.py new file mode 100644 index 0000000000..5e6e579213 --- /dev/null +++ b/datadog_api_client/v2/model/list_apis_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListAPIsResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for ``ListAPIsResponseData``. + + :param name: API name. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_apis_response_meta.py b/datadog_api_client/v2/model/list_apis_response_meta.py new file mode 100644 index 0000000000..8c7fba25cf --- /dev/null +++ b/datadog_api_client/v2/model/list_apis_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_apis_response_meta_pagination import ListAPIsResponseMetaPagination + +class ListAPIsResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_apis_response_meta_pagination import ListAPIsResponseMetaPagination + return { + "pagination": (ListAPIsResponseMetaPagination,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[ListAPIsResponseMetaPagination, UnsetType]=unset, **kwargs): + """ + Metadata for ``ListAPIsResponse``. + + :param pagination: Pagination metadata information for ``ListAPIsResponse``. + :type pagination: ListAPIsResponseMetaPagination, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_apis_response_meta_pagination.py b/datadog_api_client/v2/model/list_apis_response_meta_pagination.py new file mode 100644 index 0000000000..25edb20f0c --- /dev/null +++ b/datadog_api_client/v2/model/list_apis_response_meta_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListAPIsResponseMetaPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "limit": (int,), + "offset": (int,), + "total_count": (int,), + } + attribute_map = { + "limit": "limit", + "offset": "offset", + "total_count": "total_count", + } + + def __init__(self_, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata information for ``ListAPIsResponse``. + + :param limit: Number of items in the current page. + :type limit: int, optional + + :param offset: Offset for pagination. + :type offset: int, optional + + :param total_count: Total number of items. + :type total_count: int, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if offset is not unset: + kwargs["offset"] = offset + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_app_key_registrations_response.py b/datadog_api_client/v2/model/list_app_key_registrations_response.py new file mode 100644 index 0000000000..812ad6f53f --- /dev/null +++ b/datadog_api_client/v2/model/list_app_key_registrations_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_key_registration_data import AppKeyRegistrationData + from datadog_api_client.v2.model.list_app_key_registrations_response_meta import ListAppKeyRegistrationsResponseMeta + +class ListAppKeyRegistrationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_key_registration_data import AppKeyRegistrationData + from datadog_api_client.v2.model.list_app_key_registrations_response_meta import ListAppKeyRegistrationsResponseMeta + return { + "data": ([AppKeyRegistrationData],), + "meta": (ListAppKeyRegistrationsResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[AppKeyRegistrationData], UnsetType]=unset, meta: Union[ListAppKeyRegistrationsResponseMeta, UnsetType]=unset, **kwargs): + """ + A paginated list of app key registrations. + + :param data: An array of app key registrations. + :type data: [AppKeyRegistrationData], optional + + :param meta: The definition of ``ListAppKeyRegistrationsResponseMeta`` object. + :type meta: ListAppKeyRegistrationsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_app_key_registrations_response_meta.py b/datadog_api_client/v2/model/list_app_key_registrations_response_meta.py new file mode 100644 index 0000000000..f199cbfdfc --- /dev/null +++ b/datadog_api_client/v2/model/list_app_key_registrations_response_meta.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListAppKeyRegistrationsResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total": (int,), + "total_filtered": (int,), + } + attribute_map = { + "total": "total", + "total_filtered": "total_filtered", + } + + def __init__(self_, total: Union[int, UnsetType]=unset, total_filtered: Union[int, UnsetType]=unset, **kwargs): + """ + The definition of ``ListAppKeyRegistrationsResponseMeta`` object. + + :param total: The total number of app key registrations. + :type total: int, optional + + :param total_filtered: The total number of app key registrations that match the specified filters. + :type total_filtered: int, optional + """ + if total is not unset: + kwargs["total"] = total + if total_filtered is not unset: + kwargs["total_filtered"] = total_filtered + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_app_versions_response.py b/datadog_api_client/v2/model/list_app_versions_response.py new file mode 100644 index 0000000000..bd47164a64 --- /dev/null +++ b/datadog_api_client/v2/model/list_app_versions_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_version import AppVersion + from datadog_api_client.v2.model.list_apps_response_meta import ListAppsResponseMeta + +class ListAppVersionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_version import AppVersion + from datadog_api_client.v2.model.list_apps_response_meta import ListAppsResponseMeta + return { + "data": ([AppVersion],), + "meta": (ListAppsResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[AppVersion], UnsetType]=unset, meta: Union[ListAppsResponseMeta, UnsetType]=unset, **kwargs): + """ + A paginated list of versions for an app. + + :param data: The list of app versions. + :type data: [AppVersion], optional + + :param meta: Pagination metadata. + :type meta: ListAppsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_application_keys_response.py b/datadog_api_client/v2/model/list_application_keys_response.py new file mode 100644 index 0000000000..b477352816 --- /dev/null +++ b/datadog_api_client/v2/model/list_application_keys_response.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.partial_application_key import PartialApplicationKey + from datadog_api_client.v2.model.application_key_response_included_item import ApplicationKeyResponseIncludedItem + from datadog_api_client.v2.model.application_key_response_meta import ApplicationKeyResponseMeta + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.role import Role + from datadog_api_client.v2.model.leaked_key import LeakedKey + +class ListApplicationKeysResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.partial_application_key import PartialApplicationKey + from datadog_api_client.v2.model.application_key_response_included_item import ApplicationKeyResponseIncludedItem + from datadog_api_client.v2.model.application_key_response_meta import ApplicationKeyResponseMeta + return { + "data": ([PartialApplicationKey],), + "included": ([ApplicationKeyResponseIncludedItem],), + "meta": (ApplicationKeyResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: Union[List[PartialApplicationKey], UnsetType]=unset, included: Union[List[Union[ApplicationKeyResponseIncludedItem, User, Role, LeakedKey]], UnsetType]=unset, meta: Union[ApplicationKeyResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for a list of application keys. + + :param data: Array of application keys. + :type data: [PartialApplicationKey], optional + + :param included: Array of objects related to the application key. + :type included: [ApplicationKeyResponseIncludedItem], optional + + :param meta: Additional information related to the application key response. + :type meta: ApplicationKeyResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_apps_response.py b/datadog_api_client/v2/model/list_apps_response.py new file mode 100644 index 0000000000..5eb9f1a4bb --- /dev/null +++ b/datadog_api_client/v2/model/list_apps_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_apps_response_data_items import ListAppsResponseDataItems + from datadog_api_client.v2.model.deployment import Deployment + from datadog_api_client.v2.model.list_apps_response_meta import ListAppsResponseMeta + +class ListAppsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_apps_response_data_items import ListAppsResponseDataItems + from datadog_api_client.v2.model.deployment import Deployment + from datadog_api_client.v2.model.list_apps_response_meta import ListAppsResponseMeta + return { + "data": ([ListAppsResponseDataItems],), + "included": ([Deployment],), + "meta": (ListAppsResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: Union[List[ListAppsResponseDataItems], UnsetType]=unset, included: Union[List[Deployment], UnsetType]=unset, meta: Union[ListAppsResponseMeta, UnsetType]=unset, **kwargs): + """ + A paginated list of apps matching the specified filters and sorting. + + :param data: An array of app definitions. + :type data: [ListAppsResponseDataItems], optional + + :param included: Data on the version of the app that was published. + :type included: [Deployment], optional + + :param meta: Pagination metadata. + :type meta: ListAppsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_apps_response_data_items.py b/datadog_api_client/v2/model/list_apps_response_data_items.py new file mode 100644 index 0000000000..777c42ddcf --- /dev/null +++ b/datadog_api_client/v2/model/list_apps_response_data_items.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_apps_response_data_items_attributes import ListAppsResponseDataItemsAttributes + from datadog_api_client.v2.model.app_meta import AppMeta + from datadog_api_client.v2.model.list_apps_response_data_items_relationships import ListAppsResponseDataItemsRelationships + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + +class ListAppsResponseDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_apps_response_data_items_attributes import ListAppsResponseDataItemsAttributes + from datadog_api_client.v2.model.app_meta import AppMeta + from datadog_api_client.v2.model.list_apps_response_data_items_relationships import ListAppsResponseDataItemsRelationships + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + return { + "attributes": (ListAppsResponseDataItemsAttributes,), + "id": (UUID,), + "meta": (AppMeta,), + "relationships": (ListAppsResponseDataItemsRelationships,), + "type": (AppDefinitionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ListAppsResponseDataItemsAttributes, id: UUID, type: AppDefinitionType, meta: Union[AppMeta, UnsetType]=unset, relationships: Union[ListAppsResponseDataItemsRelationships, UnsetType]=unset, **kwargs): + """ + An app definition object. This contains only basic information about the app such as ID, name, and tags. + + :param attributes: Basic information about the app such as name, description, and tags. + :type attributes: ListAppsResponseDataItemsAttributes + + :param id: The ID of the app. + :type id: UUID + + :param meta: Metadata of an app. + :type meta: AppMeta, optional + + :param relationships: The app's publication information. + :type relationships: ListAppsResponseDataItemsRelationships, optional + + :param type: The app definition type. + :type type: AppDefinitionType + """ + if meta is not unset: + kwargs["meta"] = meta + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/list_apps_response_data_items_attributes.py b/datadog_api_client/v2/model/list_apps_response_data_items_attributes.py new file mode 100644 index 0000000000..1501083542 --- /dev/null +++ b/datadog_api_client/v2/model/list_apps_response_data_items_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListAppsResponseDataItemsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "favorite": (bool,), + "name": (str,), + "self_service": (bool,), + "tags": ([str],), + } + attribute_map = { + "description": "description", + "favorite": "favorite", + "name": "name", + "self_service": "selfService", + "tags": "tags", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, favorite: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, self_service: Union[bool, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Basic information about the app such as name, description, and tags. + + :param description: A human-readable description for the app. + :type description: str, optional + + :param favorite: Whether the app is marked as a favorite by the current user. + :type favorite: bool, optional + + :param name: The name of the app. + :type name: str, optional + + :param self_service: Whether the app is enabled for use in the Datadog self-service hub. + :type self_service: bool, optional + + :param tags: A list of tags for the app, which can be used to filter apps. + :type tags: [str], optional + """ + if description is not unset: + kwargs["description"] = description + if favorite is not unset: + kwargs["favorite"] = favorite + if name is not unset: + kwargs["name"] = name + if self_service is not unset: + kwargs["self_service"] = self_service + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_apps_response_data_items_relationships.py b/datadog_api_client/v2/model/list_apps_response_data_items_relationships.py new file mode 100644 index 0000000000..7cd08c3378 --- /dev/null +++ b/datadog_api_client/v2/model/list_apps_response_data_items_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_relationship import DeploymentRelationship + +class ListAppsResponseDataItemsRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_relationship import DeploymentRelationship + return { + "deployment": (DeploymentRelationship,), + } + attribute_map = { + "deployment": "deployment", + } + + def __init__(self_, deployment: Union[DeploymentRelationship, UnsetType]=unset, **kwargs): + """ + The app's publication information. + + :param deployment: Information pointing to the app's publication status. + :type deployment: DeploymentRelationship, optional + """ + if deployment is not unset: + kwargs["deployment"] = deployment + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_apps_response_meta.py b/datadog_api_client/v2/model/list_apps_response_meta.py new file mode 100644 index 0000000000..14e0239441 --- /dev/null +++ b/datadog_api_client/v2/model/list_apps_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_apps_response_meta_page import ListAppsResponseMetaPage + +class ListAppsResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_apps_response_meta_page import ListAppsResponseMetaPage + return { + "page": (ListAppsResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[ListAppsResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Pagination metadata. + + :param page: Information on the total number of apps, to be used for pagination. + :type page: ListAppsResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_apps_response_meta_page.py b/datadog_api_client/v2/model/list_apps_response_meta_page.py new file mode 100644 index 0000000000..203f1aa44c --- /dev/null +++ b/datadog_api_client/v2/model/list_apps_response_meta_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListAppsResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "totalCount", + "total_filtered_count": "totalFilteredCount", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Information on the total number of apps, to be used for pagination. + + :param total_count: The total number of apps under the Datadog organization, disregarding any filters applied. + :type total_count: int, optional + + :param total_filtered_count: The total number of apps that match the specified filters. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_assets_sbo_ms_response.py b/datadog_api_client/v2/model/list_assets_sbo_ms_response.py new file mode 100644 index 0000000000..028d3cb7fd --- /dev/null +++ b/datadog_api_client/v2/model/list_assets_sbo_ms_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sbom import SBOM + from datadog_api_client.v2.model.links import Links + from datadog_api_client.v2.model.metadata import Metadata + +class ListAssetsSBOMsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sbom import SBOM + from datadog_api_client.v2.model.links import Links + from datadog_api_client.v2.model.metadata import Metadata + return { + "data": ([SBOM],), + "links": (Links,), + "meta": (Metadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[SBOM], links: Union[Links, UnsetType]=unset, meta: Union[Metadata, UnsetType]=unset, **kwargs): + """ + The expected response schema when listing assets SBOMs. + + :param data: List of assets SBOMs. + :type data: [SBOM] + + :param links: The JSON:API links related to pagination. + :type links: Links, optional + + :param meta: The metadata related to this request. + :type meta: Metadata, optional + """ + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_blueprints_response.py b/datadog_api_client/v2/model/list_blueprints_response.py new file mode 100644 index 0000000000..cf15797de8 --- /dev/null +++ b/datadog_api_client/v2/model/list_blueprints_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.blueprint_metadata_data import BlueprintMetadataData + +class ListBlueprintsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.blueprint_metadata_data import BlueprintMetadataData + return { + "data": ([BlueprintMetadataData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[BlueprintMetadataData], UnsetType]=unset, **kwargs): + """ + The response for listing available blueprints. + + :param data: An array of blueprint metadata. + :type data: [BlueprintMetadataData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_campaigns_response.py b/datadog_api_client/v2/model/list_campaigns_response.py new file mode 100644 index 0000000000..181ec85135 --- /dev/null +++ b/datadog_api_client/v2/model/list_campaigns_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.campaign_response_data import CampaignResponseData + from datadog_api_client.v2.model.paginated_response_meta import PaginatedResponseMeta + +class ListCampaignsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.campaign_response_data import CampaignResponseData + from datadog_api_client.v2.model.paginated_response_meta import PaginatedResponseMeta + return { + "data": ([CampaignResponseData],), + "meta": (PaginatedResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[CampaignResponseData], meta: PaginatedResponseMeta, **kwargs): + """ + Response containing a list of campaigns. + + :param data: Array of campaigns. + :type data: [CampaignResponseData] + + :param meta: Metadata for scores response. + :type meta: PaginatedResponseMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/list_connections_response.py b/datadog_api_client/v2/model/list_connections_response.py new file mode 100644 index 0000000000..3cbcf3ac1f --- /dev/null +++ b/datadog_api_client/v2/model/list_connections_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_connections_response_data import ListConnectionsResponseData + +class ListConnectionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_connections_response_data import ListConnectionsResponseData + return { + "data": (ListConnectionsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ListConnectionsResponseData, UnsetType]=unset, **kwargs): + """ + Response containing the list of all data source connections configured for an entity. + + :param data: The data object containing the resource type and attributes for the list connections response. + :type data: ListConnectionsResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_connections_response_data.py b/datadog_api_client/v2/model/list_connections_response_data.py new file mode 100644 index 0000000000..135ec00cd3 --- /dev/null +++ b/datadog_api_client/v2/model/list_connections_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_connections_response_data_attributes import ListConnectionsResponseDataAttributes + from datadog_api_client.v2.model.list_connections_response_data_type import ListConnectionsResponseDataType + +class ListConnectionsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_connections_response_data_attributes import ListConnectionsResponseDataAttributes + from datadog_api_client.v2.model.list_connections_response_data_type import ListConnectionsResponseDataType + return { + "attributes": (ListConnectionsResponseDataAttributes,), + "id": (str,), + "type": (ListConnectionsResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ListConnectionsResponseDataType, attributes: Union[ListConnectionsResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the resource type and attributes for the list connections response. + + :param attributes: Attributes of the list connections response, containing the collection of data source connections. + :type attributes: ListConnectionsResponseDataAttributes, optional + + :param id: Unique identifier for the list connections response resource. + :type id: str, optional + + :param type: List connections response resource type. + :type type: ListConnectionsResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/list_connections_response_data_attributes.py b/datadog_api_client/v2/model/list_connections_response_data_attributes.py new file mode 100644 index 0000000000..cb73813dee --- /dev/null +++ b/datadog_api_client/v2/model/list_connections_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_connections_response_data_attributes_connections_items import ListConnectionsResponseDataAttributesConnectionsItems + +class ListConnectionsResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_connections_response_data_attributes_connections_items import ListConnectionsResponseDataAttributesConnectionsItems + return { + "connections": ([ListConnectionsResponseDataAttributesConnectionsItems],), + } + attribute_map = { + "connections": "connections", + } + + def __init__(self_, connections: Union[List[ListConnectionsResponseDataAttributesConnectionsItems], UnsetType]=unset, **kwargs): + """ + Attributes of the list connections response, containing the collection of data source connections. + + :param connections: The list of data source connections configured for the entity. + :type connections: [ListConnectionsResponseDataAttributesConnectionsItems], optional + """ + if connections is not unset: + kwargs["connections"] = connections + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_connections_response_data_attributes_connections_items.py b/datadog_api_client/v2/model/list_connections_response_data_attributes_connections_items.py new file mode 100644 index 0000000000..464109a10d --- /dev/null +++ b/datadog_api_client/v2/model/list_connections_response_data_attributes_connections_items.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_connection_request_data_attributes_fields_items import CreateConnectionRequestDataAttributesFieldsItems + from datadog_api_client.v2.model.list_connections_response_data_attributes_connections_items_join import ListConnectionsResponseDataAttributesConnectionsItemsJoin + +class ListConnectionsResponseDataAttributesConnectionsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_connection_request_data_attributes_fields_items import CreateConnectionRequestDataAttributesFieldsItems + from datadog_api_client.v2.model.list_connections_response_data_attributes_connections_items_join import ListConnectionsResponseDataAttributesConnectionsItemsJoin + return { + "created_at": (datetime,), + "created_by": (str,), + "fields": ([CreateConnectionRequestDataAttributesFieldsItems],), + "id": (str,), + "join": (ListConnectionsResponseDataAttributesConnectionsItemsJoin,), + "metadata": ({str: (str,)},), + "type": (str,), + "updated_at": (datetime,), + "updated_by": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "fields": "fields", + "id": "id", + "join": "join", + "metadata": "metadata", + "type": "type", + "updated_at": "updated_at", + "updated_by": "updated_by", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, fields: Union[List[CreateConnectionRequestDataAttributesFieldsItems], UnsetType]=unset, id: Union[str, UnsetType]=unset, join: Union[ListConnectionsResponseDataAttributesConnectionsItemsJoin, UnsetType]=unset, metadata: Union[Dict[str, str], UnsetType]=unset, type: Union[str, UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, updated_by: Union[str, UnsetType]=unset, **kwargs): + """ + Details of a single data source connection, including its fields, join configuration, and audit metadata. + + :param created_at: Timestamp indicating when the connection was created. + :type created_at: datetime, optional + + :param created_by: Identifier of the user who created the connection. + :type created_by: str, optional + + :param fields: List of custom attribute fields imported from the data source. + :type fields: [CreateConnectionRequestDataAttributesFieldsItems], optional + + :param id: Unique identifier of the connection. + :type id: str, optional + + :param join: The join configuration describing how the data source is linked to the entity. + :type join: ListConnectionsResponseDataAttributesConnectionsItemsJoin, optional + + :param metadata: Additional key-value metadata associated with the connection. + :type metadata: {str: (str,)}, optional + + :param type: The type of data source connection (for example, ref_table). + :type type: str, optional + + :param updated_at: Timestamp indicating when the connection was last updated. + :type updated_at: datetime, optional + + :param updated_by: Identifier of the user who last updated the connection. + :type updated_by: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if fields is not unset: + kwargs["fields"] = fields + if id is not unset: + kwargs["id"] = id + if join is not unset: + kwargs["join"] = join + if metadata is not unset: + kwargs["metadata"] = metadata + if type is not unset: + kwargs["type"] = type + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updated_by is not unset: + kwargs["updated_by"] = updated_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_connections_response_data_attributes_connections_items_join.py b/datadog_api_client/v2/model/list_connections_response_data_attributes_connections_items_join.py new file mode 100644 index 0000000000..cd50ffcb7c --- /dev/null +++ b/datadog_api_client/v2/model/list_connections_response_data_attributes_connections_items_join.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListConnectionsResponseDataAttributesConnectionsItemsJoin(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attribute": (str,), + "type": (str,), + } + attribute_map = { + "attribute": "attribute", + "type": "type", + } + + def __init__(self_, attribute: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The join configuration describing how the data source is linked to the entity. + + :param attribute: The entity attribute used as the join key to link records from the data source. + :type attribute: str, optional + + :param type: The type of join key used (for example, email or user_id). + :type type: str, optional + """ + if attribute is not unset: + kwargs["attribute"] = attribute + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_connections_response_data_type.py b/datadog_api_client/v2/model/list_connections_response_data_type.py new file mode 100644 index 0000000000..8e1a8fd421 --- /dev/null +++ b/datadog_api_client/v2/model/list_connections_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListConnectionsResponseDataType(ModelSimple): + """ + List connections response resource type. + + :param value: If omitted defaults to "list_connections_response". Must be one of ["list_connections_response"]. + :type value: str + """ + + allowed_values = { + "list_connections_response", + } + LIST_CONNECTIONS_RESPONSE: ClassVar["ListConnectionsResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListConnectionsResponseDataType.LIST_CONNECTIONS_RESPONSE = ListConnectionsResponseDataType("list_connections_response") diff --git a/datadog_api_client/v2/model/list_dashboards_usage_response.py b/datadog_api_client/v2/model/list_dashboards_usage_response.py new file mode 100644 index 0000000000..bb1538ccbb --- /dev/null +++ b/datadog_api_client/v2/model/list_dashboards_usage_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dashboard_usage import DashboardUsage + from datadog_api_client.v2.model.list_dashboards_usage_response_links import ListDashboardsUsageResponseLinks + from datadog_api_client.v2.model.list_dashboards_usage_response_meta import ListDashboardsUsageResponseMeta + +class ListDashboardsUsageResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dashboard_usage import DashboardUsage + from datadog_api_client.v2.model.list_dashboards_usage_response_links import ListDashboardsUsageResponseLinks + from datadog_api_client.v2.model.list_dashboards_usage_response_meta import ListDashboardsUsageResponseMeta + return { + "data": ([DashboardUsage],), + "links": (ListDashboardsUsageResponseLinks,), + "meta": (ListDashboardsUsageResponseMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[DashboardUsage], meta: ListDashboardsUsageResponseMeta, links: Union[ListDashboardsUsageResponseLinks, UnsetType]=unset, **kwargs): + """ + Paginated list of dashboard usage records. + + :param data: Dashboard usage records, one per dashboard in the caller's organization. + :type data: [DashboardUsage] + + :param links: Pagination links for a list of dashboard usage records. + :type links: ListDashboardsUsageResponseLinks, optional + + :param meta: Pagination metadata for a list of dashboard usage records. + :type meta: ListDashboardsUsageResponseMeta + """ + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/list_dashboards_usage_response_links.py b/datadog_api_client/v2/model/list_dashboards_usage_response_links.py new file mode 100644 index 0000000000..d8c5813017 --- /dev/null +++ b/datadog_api_client/v2/model/list_dashboards_usage_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListDashboardsUsageResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str, none_type), + "next": (str, none_type), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, none_type, UnsetType]=unset, next: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links for a list of dashboard usage records. + + :param first: Link to the first page. + :type first: str, optional + + :param last: Link to the last page, or ``null`` if the total is unknown. + :type last: str, none_type, optional + + :param next: Link to the next page. Absent when there is no next page. + :type next: str, none_type, optional + + :param prev: Link to the previous page. Absent when there is no previous page. + :type prev: str, none_type, optional + + :param self: Link to the current page. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_dashboards_usage_response_meta.py b/datadog_api_client/v2/model/list_dashboards_usage_response_meta.py new file mode 100644 index 0000000000..150a52d8b7 --- /dev/null +++ b/datadog_api_client/v2/model/list_dashboards_usage_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.pagination_meta_page import PaginationMetaPage + +class ListDashboardsUsageResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.pagination_meta_page import PaginationMetaPage + return { + "page": (PaginationMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[PaginationMetaPage, UnsetType]=unset, **kwargs): + """ + Pagination metadata for a list of dashboard usage records. + + :param page: Offset-based pagination schema. + :type page: PaginationMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_deployment_rule_response_data.py b/datadog_api_client/v2/model/list_deployment_rule_response_data.py new file mode 100644 index 0000000000..90372fce36 --- /dev/null +++ b/datadog_api_client/v2/model/list_deployment_rule_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_deployment_rules_response_data_attributes import ListDeploymentRulesResponseDataAttributes + from datadog_api_client.v2.model.list_deployment_rules_data_type import ListDeploymentRulesDataType + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class ListDeploymentRuleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_deployment_rules_response_data_attributes import ListDeploymentRulesResponseDataAttributes + from datadog_api_client.v2.model.list_deployment_rules_data_type import ListDeploymentRulesDataType + return { + "attributes": (ListDeploymentRulesResponseDataAttributes,), + "id": (str,), + "type": (ListDeploymentRulesDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ListDeploymentRulesResponseDataAttributes, id: str, type: ListDeploymentRulesDataType, **kwargs): + """ + Data for a list of deployment rules. + + :param attributes: Attributes of the response for listing deployment rules. + :type attributes: ListDeploymentRulesResponseDataAttributes + + :param id: Unique identifier of the deployment rule. + :type id: str + + :param type: List deployment rule resource type. + :type type: ListDeploymentRulesDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/list_deployment_rules_data_type.py b/datadog_api_client/v2/model/list_deployment_rules_data_type.py new file mode 100644 index 0000000000..508e7869c4 --- /dev/null +++ b/datadog_api_client/v2/model/list_deployment_rules_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListDeploymentRulesDataType(ModelSimple): + """ + List deployment rule resource type. + + :param value: If omitted defaults to "list_deployment_rules". Must be one of ["list_deployment_rules"]. + :type value: str + """ + + allowed_values = { + "list_deployment_rules", + } + LIST_DEPLOYMENT_RULES: ClassVar["ListDeploymentRulesDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListDeploymentRulesDataType.LIST_DEPLOYMENT_RULES = ListDeploymentRulesDataType("list_deployment_rules") diff --git a/datadog_api_client/v2/model/list_deployment_rules_response_data_attributes.py b/datadog_api_client/v2/model/list_deployment_rules_response_data_attributes.py new file mode 100644 index 0000000000..456281628a --- /dev/null +++ b/datadog_api_client/v2/model/list_deployment_rules_response_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_rule_response_data_attributes import DeploymentRuleResponseDataAttributes + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class ListDeploymentRulesResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_rule_response_data_attributes import DeploymentRuleResponseDataAttributes + return { + "rules": ([DeploymentRuleResponseDataAttributes],), + } + attribute_map = { + "rules": "rules", + } + + def __init__(self_, rules: Union[List[DeploymentRuleResponseDataAttributes], UnsetType]=unset, **kwargs): + """ + Attributes of the response for listing deployment rules. + + :param rules: The list of deployment rules. + :type rules: [DeploymentRuleResponseDataAttributes], optional + """ + if rules is not unset: + kwargs["rules"] = rules + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_devices_response.py b/datadog_api_client/v2/model/list_devices_response.py new file mode 100644 index 0000000000..f11d18edab --- /dev/null +++ b/datadog_api_client/v2/model/list_devices_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.devices_list_data import DevicesListData + from datadog_api_client.v2.model.list_devices_response_metadata import ListDevicesResponseMetadata + +class ListDevicesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.devices_list_data import DevicesListData + from datadog_api_client.v2.model.list_devices_response_metadata import ListDevicesResponseMetadata + return { + "data": ([DevicesListData],), + "meta": (ListDevicesResponseMetadata,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[DevicesListData], UnsetType]=unset, meta: Union[ListDevicesResponseMetadata, UnsetType]=unset, **kwargs): + """ + List devices response. + + :param data: The list devices response data. + :type data: [DevicesListData], optional + + :param meta: Object describing meta attributes of response. + :type meta: ListDevicesResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_devices_response_metadata.py b/datadog_api_client/v2/model/list_devices_response_metadata.py new file mode 100644 index 0000000000..72b781f868 --- /dev/null +++ b/datadog_api_client/v2/model/list_devices_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_devices_response_metadata_page import ListDevicesResponseMetadataPage + +class ListDevicesResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_devices_response_metadata_page import ListDevicesResponseMetadataPage + return { + "page": (ListDevicesResponseMetadataPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[ListDevicesResponseMetadataPage, UnsetType]=unset, **kwargs): + """ + Object describing meta attributes of response. + + :param page: Pagination object. + :type page: ListDevicesResponseMetadataPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_devices_response_metadata_page.py b/datadog_api_client/v2/model/list_devices_response_metadata_page.py new file mode 100644 index 0000000000..40a47f94d1 --- /dev/null +++ b/datadog_api_client/v2/model/list_devices_response_metadata_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListDevicesResponseMetadataPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_filtered_count": (int,), + } + attribute_map = { + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination object. + + :param total_filtered_count: Total count of devices matched by the filter. + :type total_filtered_count: int, optional + """ + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_downtimes_response.py b/datadog_api_client/v2/model/list_downtimes_response.py new file mode 100644 index 0000000000..9d8e922392 --- /dev/null +++ b/datadog_api_client/v2/model/list_downtimes_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.downtime_response_data import DowntimeResponseData + from datadog_api_client.v2.model.downtime_response_included_item import DowntimeResponseIncludedItem + from datadog_api_client.v2.model.downtime_meta import DowntimeMeta + from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId + from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags + from datadog_api_client.v2.model.downtime_schedule_recurrences_response import DowntimeScheduleRecurrencesResponse + from datadog_api_client.v2.model.downtime_schedule_one_time_response import DowntimeScheduleOneTimeResponse + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.downtime_monitor_included_item import DowntimeMonitorIncludedItem + +class ListDowntimesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.downtime_response_data import DowntimeResponseData + from datadog_api_client.v2.model.downtime_response_included_item import DowntimeResponseIncludedItem + from datadog_api_client.v2.model.downtime_meta import DowntimeMeta + return { + "data": ([DowntimeResponseData],), + "included": ([DowntimeResponseIncludedItem],), + "meta": (DowntimeMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: Union[List[DowntimeResponseData], UnsetType]=unset, included: Union[List[Union[DowntimeResponseIncludedItem, User, DowntimeMonitorIncludedItem]], UnsetType]=unset, meta: Union[DowntimeMeta, UnsetType]=unset, **kwargs): + """ + Response for retrieving all downtimes. + + :param data: An array of downtimes. + :type data: [DowntimeResponseData], optional + + :param included: Array of objects related to the downtimes. + :type included: [DowntimeResponseIncludedItem], optional + + :param meta: Pagination metadata returned by the API. + :type meta: DowntimeMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_entity_catalog_response.py b/datadog_api_client/v2/model/list_entity_catalog_response.py new file mode 100644 index 0000000000..d95d6614a6 --- /dev/null +++ b/datadog_api_client/v2/model/list_entity_catalog_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_data import EntityData + from datadog_api_client.v2.model.list_entity_catalog_response_included_item import ListEntityCatalogResponseIncludedItem + from datadog_api_client.v2.model.list_entity_catalog_response_links import ListEntityCatalogResponseLinks + from datadog_api_client.v2.model.entity_response_meta import EntityResponseMeta + from datadog_api_client.v2.model.entity_response_included_schema import EntityResponseIncludedSchema + from datadog_api_client.v2.model.entity_response_included_raw_schema import EntityResponseIncludedRawSchema + from datadog_api_client.v2.model.entity_response_included_related_entity import EntityResponseIncludedRelatedEntity + from datadog_api_client.v2.model.entity_response_included_oncall import EntityResponseIncludedOncall + from datadog_api_client.v2.model.entity_response_included_incident import EntityResponseIncludedIncident + +class ListEntityCatalogResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_data import EntityData + from datadog_api_client.v2.model.list_entity_catalog_response_included_item import ListEntityCatalogResponseIncludedItem + from datadog_api_client.v2.model.list_entity_catalog_response_links import ListEntityCatalogResponseLinks + from datadog_api_client.v2.model.entity_response_meta import EntityResponseMeta + return { + "data": ([EntityData],), + "included": ([ListEntityCatalogResponseIncludedItem],), + "links": (ListEntityCatalogResponseLinks,), + "meta": (EntityResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[EntityData], UnsetType]=unset, included: Union[List[Union[ListEntityCatalogResponseIncludedItem, EntityResponseIncludedSchema, EntityResponseIncludedRawSchema, EntityResponseIncludedRelatedEntity, EntityResponseIncludedOncall, EntityResponseIncludedIncident]], UnsetType]=unset, links: Union[ListEntityCatalogResponseLinks, UnsetType]=unset, meta: Union[EntityResponseMeta, UnsetType]=unset, **kwargs): + """ + List entity response. + + :param data: List of entity data. + :type data: [EntityData], optional + + :param included: List entity response included. + :type included: [ListEntityCatalogResponseIncludedItem], optional + + :param links: List entity response links. + :type links: ListEntityCatalogResponseLinks, optional + + :param meta: Entity metadata. + :type meta: EntityResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_entity_catalog_response_included_item.py b/datadog_api_client/v2/model/list_entity_catalog_response_included_item.py new file mode 100644 index 0000000000..fa2e005fb4 --- /dev/null +++ b/datadog_api_client/v2/model/list_entity_catalog_response_included_item.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListEntityCatalogResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + List entity response included item. + + :param attributes: Included schema. + :type attributes: EntityResponseIncludedSchemaAttributes, optional + + :param id: Entity ID. + :type id: str, optional + + :param type: Schema type. + :type type: EntityResponseIncludedSchemaType, optional + + :param meta: Included related entity meta. + :type meta: EntityResponseIncludedRelatedEntityMeta, 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.entity_response_included_schema import EntityResponseIncludedSchema + from datadog_api_client.v2.model.entity_response_included_raw_schema import EntityResponseIncludedRawSchema + from datadog_api_client.v2.model.entity_response_included_related_entity import EntityResponseIncludedRelatedEntity + from datadog_api_client.v2.model.entity_response_included_oncall import EntityResponseIncludedOncall + from datadog_api_client.v2.model.entity_response_included_incident import EntityResponseIncludedIncident + return { + "oneOf": [ + EntityResponseIncludedSchema, + EntityResponseIncludedRawSchema, + EntityResponseIncludedRelatedEntity, + EntityResponseIncludedOncall, + EntityResponseIncludedIncident, + ], + } diff --git a/datadog_api_client/v2/model/list_entity_catalog_response_links.py b/datadog_api_client/v2/model/list_entity_catalog_response_links.py new file mode 100644 index 0000000000..3ce37242a4 --- /dev/null +++ b/datadog_api_client/v2/model/list_entity_catalog_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListEntityCatalogResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + "previous": (str,), + "self": (str,), + } + attribute_map = { + "next": "next", + "previous": "previous", + "self": "self", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, previous: Union[str, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + List entity response links. + + :param next: Next link. + :type next: str, optional + + :param previous: Previous link. + :type previous: str, optional + + :param self: Current link. + :type self: str, optional + """ + if next is not unset: + kwargs["next"] = next + if previous is not unset: + kwargs["previous"] = previous + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_environments_response.py b/datadog_api_client/v2/model/list_environments_response.py new file mode 100644 index 0000000000..a677cbc1f3 --- /dev/null +++ b/datadog_api_client/v2/model/list_environments_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.environment import Environment + from datadog_api_client.v2.model.environments_pagination_meta import EnvironmentsPaginationMeta + +class ListEnvironmentsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.environment import Environment + from datadog_api_client.v2.model.environments_pagination_meta import EnvironmentsPaginationMeta + return { + "data": ([Environment],), + "meta": (EnvironmentsPaginationMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[Environment], meta: Union[EnvironmentsPaginationMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of environments. + + :param data: List of environments. + :type data: [Environment] + + :param meta: Pagination metadata for environments. + :type meta: EnvironmentsPaginationMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_feature_flags_response.py b/datadog_api_client/v2/model/list_feature_flags_response.py new file mode 100644 index 0000000000..01d6b73e43 --- /dev/null +++ b/datadog_api_client/v2/model/list_feature_flags_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.feature_flag_list_item import FeatureFlagListItem + from datadog_api_client.v2.model.feature_flags_pagination_meta import FeatureFlagsPaginationMeta + +class ListFeatureFlagsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.feature_flag_list_item import FeatureFlagListItem + from datadog_api_client.v2.model.feature_flags_pagination_meta import FeatureFlagsPaginationMeta + return { + "data": ([FeatureFlagListItem],), + "meta": (FeatureFlagsPaginationMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[FeatureFlagListItem], meta: Union[FeatureFlagsPaginationMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of feature flags. + + :param data: List of feature flags. + :type data: [FeatureFlagListItem] + + :param meta: Pagination metadata for feature flags. + :type meta: FeatureFlagsPaginationMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_findings_meta.py b/datadog_api_client/v2/model/list_findings_meta.py new file mode 100644 index 0000000000..68a2b3024e --- /dev/null +++ b/datadog_api_client/v2/model/list_findings_meta.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_findings_page import ListFindingsPage + +class ListFindingsMeta(ModelNormal): + validations = { + "snapshot_timestamp": { + "inclusive_minimum": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_findings_page import ListFindingsPage + return { + "page": (ListFindingsPage,), + "snapshot_timestamp": (int,), + } + attribute_map = { + "page": "page", + "snapshot_timestamp": "snapshot_timestamp", + } + + def __init__(self_, page: Union[ListFindingsPage, UnsetType]=unset, snapshot_timestamp: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata for pagination. + + :param page: Pagination and findings count information. + :type page: ListFindingsPage, optional + + :param snapshot_timestamp: The point in time corresponding to the listed findings. + :type snapshot_timestamp: int, optional + """ + if page is not unset: + kwargs["page"] = page + if snapshot_timestamp is not unset: + kwargs["snapshot_timestamp"] = snapshot_timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_findings_page.py b/datadog_api_client/v2/model/list_findings_page.py new file mode 100644 index 0000000000..181cf61997 --- /dev/null +++ b/datadog_api_client/v2/model/list_findings_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListFindingsPage(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "total_filtered_count": (int,), + } + attribute_map = { + "cursor": "cursor", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination and findings count information. + + :param cursor: The cursor used to paginate requests. + :type cursor: str, optional + + :param total_filtered_count: The total count of findings after the filter has been applied. + :type total_filtered_count: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_findings_response.py b/datadog_api_client/v2/model/list_findings_response.py new file mode 100644 index 0000000000..2cc40e0090 --- /dev/null +++ b/datadog_api_client/v2/model/list_findings_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.finding import Finding + from datadog_api_client.v2.model.list_findings_meta import ListFindingsMeta + +class ListFindingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.finding import Finding + from datadog_api_client.v2.model.list_findings_meta import ListFindingsMeta + return { + "data": ([Finding],), + "meta": (ListFindingsMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[Finding], meta: ListFindingsMeta, **kwargs): + """ + The expected response schema when listing findings. + + :param data: Array of findings. + :type data: [Finding] + + :param meta: Metadata for pagination. + :type meta: ListFindingsMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/list_historical_jobs_response.py b/datadog_api_client/v2/model/list_historical_jobs_response.py new file mode 100644 index 0000000000..e09b5f0c2d --- /dev/null +++ b/datadog_api_client/v2/model/list_historical_jobs_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.historical_job_response_data import HistoricalJobResponseData + from datadog_api_client.v2.model.historical_job_list_meta import HistoricalJobListMeta + +class ListHistoricalJobsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.historical_job_response_data import HistoricalJobResponseData + from datadog_api_client.v2.model.historical_job_list_meta import HistoricalJobListMeta + return { + "data": ([HistoricalJobResponseData],), + "meta": (HistoricalJobListMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[HistoricalJobResponseData], UnsetType]=unset, meta: Union[HistoricalJobListMeta, UnsetType]=unset, **kwargs): + """ + List of historical jobs. + + :param data: Array containing the list of historical jobs. + :type data: [HistoricalJobResponseData], optional + + :param meta: Metadata about the list of jobs. + :type meta: HistoricalJobListMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_integrations_response.py b/datadog_api_client/v2/model/list_integrations_response.py new file mode 100644 index 0000000000..d58dbfac5c --- /dev/null +++ b/datadog_api_client/v2/model/list_integrations_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.integration import Integration + +class ListIntegrationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.integration import Integration + return { + "data": ([Integration],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[Integration], **kwargs): + """ + Response containing information about multiple integrations. + + :param data: Array of integration objects. + :type data: [Integration] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_interface_tags_response.py b/datadog_api_client/v2/model/list_interface_tags_response.py new file mode 100644 index 0000000000..38f916377b --- /dev/null +++ b/datadog_api_client/v2/model/list_interface_tags_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_interface_tags_response_data import ListInterfaceTagsResponseData + +class ListInterfaceTagsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_interface_tags_response_data import ListInterfaceTagsResponseData + return { + "data": (ListInterfaceTagsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ListInterfaceTagsResponseData, UnsetType]=unset, **kwargs): + """ + Response for listing interface tags. + + :param data: Response data for listing interface tags. + :type data: ListInterfaceTagsResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_interface_tags_response_data.py b/datadog_api_client/v2/model/list_interface_tags_response_data.py new file mode 100644 index 0000000000..f8b4a111ea --- /dev/null +++ b/datadog_api_client/v2/model/list_interface_tags_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_tags_response_data_attributes import ListTagsResponseDataAttributes + +class ListInterfaceTagsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_tags_response_data_attributes import ListTagsResponseDataAttributes + return { + "attributes": (ListTagsResponseDataAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ListTagsResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Response data for listing interface tags. + + :param attributes: The definition of ListTagsResponseDataAttributes object. + :type attributes: ListTagsResponseDataAttributes, optional + + :param id: The interface ID + :type id: str, optional + + :param type: The type of the resource. The value should always be tags. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_investigations_response.py b/datadog_api_client/v2/model/list_investigations_response.py new file mode 100644 index 0000000000..f3894a61a5 --- /dev/null +++ b/datadog_api_client/v2/model/list_investigations_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_investigations_response_data import ListInvestigationsResponseData + from datadog_api_client.v2.model.list_investigations_response_links import ListInvestigationsResponseLinks + from datadog_api_client.v2.model.list_investigations_response_meta import ListInvestigationsResponseMeta + +class ListInvestigationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_investigations_response_data import ListInvestigationsResponseData + from datadog_api_client.v2.model.list_investigations_response_links import ListInvestigationsResponseLinks + from datadog_api_client.v2.model.list_investigations_response_meta import ListInvestigationsResponseMeta + return { + "data": ([ListInvestigationsResponseData],), + "links": (ListInvestigationsResponseLinks,), + "meta": (ListInvestigationsResponseMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[ListInvestigationsResponseData], links: ListInvestigationsResponseLinks, meta: ListInvestigationsResponseMeta, **kwargs): + """ + Response for listing investigations. + + :param data: List of investigations. + :type data: [ListInvestigationsResponseData] + + :param links: Pagination links for the list investigations response. + :type links: ListInvestigationsResponseLinks + + :param meta: Metadata for the list investigations response. + :type meta: ListInvestigationsResponseMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.links = links + self_.meta = meta diff --git a/datadog_api_client/v2/model/list_investigations_response_data.py b/datadog_api_client/v2/model/list_investigations_response_data.py new file mode 100644 index 0000000000..6b78172604 --- /dev/null +++ b/datadog_api_client/v2/model/list_investigations_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_investigations_response_data_attributes import ListInvestigationsResponseDataAttributes + from datadog_api_client.v2.model.investigation_type import InvestigationType + +class ListInvestigationsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_investigations_response_data_attributes import ListInvestigationsResponseDataAttributes + from datadog_api_client.v2.model.investigation_type import InvestigationType + return { + "attributes": (ListInvestigationsResponseDataAttributes,), + "id": (str,), + "type": (InvestigationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ListInvestigationsResponseDataAttributes, id: str, type: InvestigationType, **kwargs): + """ + Data for an investigation list item. + + :param attributes: Attributes of an investigation list item. + :type attributes: ListInvestigationsResponseDataAttributes + + :param id: The unique identifier of the investigation. + :type id: str + + :param type: The resource type for investigations. + :type type: InvestigationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/list_investigations_response_data_attributes.py b/datadog_api_client/v2/model/list_investigations_response_data_attributes.py new file mode 100644 index 0000000000..c22cb2037e --- /dev/null +++ b/datadog_api_client/v2/model/list_investigations_response_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListInvestigationsResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "status": (str,), + "title": (str,), + } + attribute_map = { + "status": "status", + "title": "title", + } + + def __init__(self_, status: str, title: str, **kwargs): + """ + Attributes of an investigation list item. + + :param status: The current status of the investigation. + :type status: str + + :param title: The title of the investigation. + :type title: str + """ + super().__init__(kwargs) + + + self_.status = status + self_.title = title diff --git a/datadog_api_client/v2/model/list_investigations_response_links.py b/datadog_api_client/v2/model/list_investigations_response_links.py new file mode 100644 index 0000000000..d1b354e57f --- /dev/null +++ b/datadog_api_client/v2/model/list_investigations_response_links.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListInvestigationsResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str, none_type), + "next": (str,), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: str, next: str, self: str, last: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Pagination links for the list investigations response. + + :param first: Link to the first page. + :type first: str + + :param last: Link to the last page. + :type last: str, none_type, optional + + :param next: Link to the next page. + :type next: str + + :param prev: Link to the previous page. + :type prev: str, none_type, optional + + :param self: Link to the current page. + :type self: str + """ + if last is not unset: + kwargs["last"] = last + if prev is not unset: + kwargs["prev"] = prev + super().__init__(kwargs) + + + self_.first = first + self_.next = next + self_.self = self diff --git a/datadog_api_client/v2/model/list_investigations_response_meta.py b/datadog_api_client/v2/model/list_investigations_response_meta.py new file mode 100644 index 0000000000..8ff27df7ac --- /dev/null +++ b/datadog_api_client/v2/model/list_investigations_response_meta.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_investigations_response_meta_page import ListInvestigationsResponseMetaPage + +class ListInvestigationsResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_investigations_response_meta_page import ListInvestigationsResponseMetaPage + return { + "page": (ListInvestigationsResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: ListInvestigationsResponseMetaPage, **kwargs): + """ + Metadata for the list investigations response. + + :param page: Pagination metadata. + :type page: ListInvestigationsResponseMetaPage + """ + super().__init__(kwargs) + + + self_.page = page diff --git a/datadog_api_client/v2/model/list_investigations_response_meta_page.py b/datadog_api_client/v2/model/list_investigations_response_meta_page.py new file mode 100644 index 0000000000..ce3ca0a4fa --- /dev/null +++ b/datadog_api_client/v2/model/list_investigations_response_meta_page.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListInvestigationsResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "limit": (int,), + "offset": (int,), + "total": (int,), + } + attribute_map = { + "limit": "limit", + "offset": "offset", + "total": "total", + } + + def __init__(self_, limit: int, offset: int, total: int, **kwargs): + """ + Pagination metadata. + + :param limit: Maximum number of results per page. + :type limit: int + + :param offset: Offset of the current page. + :type offset: int + + :param total: Total number of investigations. + :type total: int + """ + super().__init__(kwargs) + + + self_.limit = limit + self_.offset = offset + self_.total = total diff --git a/datadog_api_client/v2/model/list_kind_catalog_response.py b/datadog_api_client/v2/model/list_kind_catalog_response.py new file mode 100644 index 0000000000..11b1f71304 --- /dev/null +++ b/datadog_api_client/v2/model/list_kind_catalog_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.kind_data import KindData + from datadog_api_client.v2.model.kind_response_meta import KindResponseMeta + +class ListKindCatalogResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.kind_data import KindData + from datadog_api_client.v2.model.kind_response_meta import KindResponseMeta + return { + "data": ([KindData],), + "meta": (KindResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[KindData], UnsetType]=unset, meta: Union[KindResponseMeta, UnsetType]=unset, **kwargs): + """ + List kind response. + + :param data: List of kind responses. + :type data: [KindData], optional + + :param meta: Kind response metadata. + :type meta: KindResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_notification_channels_response.py b/datadog_api_client/v2/model/list_notification_channels_response.py new file mode 100644 index 0000000000..3704a53b2c --- /dev/null +++ b/datadog_api_client/v2/model/list_notification_channels_response.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_data import NotificationChannelData + from datadog_api_client.v2.model.notification_channel_phone_config import NotificationChannelPhoneConfig + from datadog_api_client.v2.model.notification_channel_email_config import NotificationChannelEmailConfig + from datadog_api_client.v2.model.notification_channel_push_config import NotificationChannelPushConfig + +class ListNotificationChannelsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_data import NotificationChannelData + return { + "data": ([NotificationChannelData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[NotificationChannelData], UnsetType]=unset, **kwargs): + """ + Response type for listing notification channels for a user + + :param data: Array of notification channel data objects. + :type data: [NotificationChannelData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_on_call_notification_rules_response.py b/datadog_api_client/v2/model/list_on_call_notification_rules_response.py new file mode 100644 index 0000000000..56f17fba59 --- /dev/null +++ b/datadog_api_client/v2/model/list_on_call_notification_rules_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_notification_rule_data import OnCallNotificationRuleData + from datadog_api_client.v2.model.on_call_notification_rules_included import OnCallNotificationRulesIncluded + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + from datadog_api_client.v2.model.notification_channel_data import NotificationChannelData + +class ListOnCallNotificationRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_notification_rule_data import OnCallNotificationRuleData + from datadog_api_client.v2.model.on_call_notification_rules_included import OnCallNotificationRulesIncluded + return { + "data": ([OnCallNotificationRuleData],), + "included": ([OnCallNotificationRulesIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[List[OnCallNotificationRuleData], UnsetType]=unset, included: Union[List[Union[OnCallNotificationRulesIncluded, NotificationChannelData]], UnsetType]=unset, **kwargs): + """ + Response type for listing notification rules for a user + + :param data: Array of notification rule data objects. + :type data: [OnCallNotificationRuleData], optional + + :param included: + :type included: [OnCallNotificationRulesIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_personal_access_tokens_response.py b/datadog_api_client/v2/model/list_personal_access_tokens_response.py new file mode 100644 index 0000000000..10093897a0 --- /dev/null +++ b/datadog_api_client/v2/model/list_personal_access_tokens_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.access_token_list_item import AccessTokenListItem + from datadog_api_client.v2.model.personal_access_token_response_meta import PersonalAccessTokenResponseMeta + +class ListPersonalAccessTokensResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.access_token_list_item import AccessTokenListItem + from datadog_api_client.v2.model.personal_access_token_response_meta import PersonalAccessTokenResponseMeta + return { + "data": ([AccessTokenListItem],), + "meta": (PersonalAccessTokenResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[AccessTokenListItem], UnsetType]=unset, meta: Union[PersonalAccessTokenResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for a list of access tokens. Includes both personal and service access tokens. + + :param data: Array of access tokens. Includes both personal and service access tokens. + :type data: [AccessTokenListItem], optional + + :param meta: Additional information related to the access token response. + :type meta: PersonalAccessTokenResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_pipelines_response.py b/datadog_api_client/v2/model/list_pipelines_response.py new file mode 100644 index 0000000000..497dc564b5 --- /dev/null +++ b/datadog_api_client/v2/model/list_pipelines_response.py @@ -0,0 +1,129 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_data import ObservabilityPipelineData + from datadog_api_client.v2.model.list_pipelines_response_meta import ListPipelinesResponseMeta + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination import ObservabilityPipelineElasticsearchDestination + from datadog_api_client.v2.model.observability_pipeline_http_client_destination import ObservabilityPipelineHttpClientDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination import ObservabilityPipelineAmazonOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination import ObservabilityPipelineAmazonS3Destination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination import ObservabilityPipelineAmazonS3GenericDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination import ObservabilityPipelineAmazonSecurityLakeDestination + from datadog_api_client.v2.model.azure_storage_destination import AzureStorageDestination + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination import ObservabilityPipelineClickhouseDestination + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination import ObservabilityPipelineCloudPremDestination + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination import ObservabilityPipelineCrowdStrikeNextGenSiemDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination import ObservabilityPipelineDatadogLogsDestination + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination import ObservabilityPipelineGoogleChronicleDestination + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination import ObservabilityPipelineGoogleCloudStorageDestination + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination import ObservabilityPipelineGooglePubSubDestination + from datadog_api_client.v2.model.observability_pipeline_kafka_destination import ObservabilityPipelineKafkaDestination + from datadog_api_client.v2.model.microsoft_sentinel_destination import MicrosoftSentinelDestination + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination import ObservabilityPipelineNewRelicDestination + from datadog_api_client.v2.model.observability_pipeline_open_search_destination import ObservabilityPipelineOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination import ObservabilityPipelineRsyslogDestination + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination import ObservabilityPipelineSentinelOneDestination + from datadog_api_client.v2.model.observability_pipeline_socket_destination import ObservabilityPipelineSocketDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination import ObservabilityPipelineSplunkHecDestination + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination import ObservabilityPipelineSumoLogicDestination + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination import ObservabilityPipelineSyslogNgDestination + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination import ObservabilityPipelineDatabricksZerobusDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import ObservabilityPipelineDatadogMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination import ObservabilityPipelineSplunkHecMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor + from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor + from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor + from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor + from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor + from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source import ObservabilityPipelineDatadogAgentSource + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source import ObservabilityPipelineAmazonDataFirehoseSource + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source import ObservabilityPipelineAmazonS3Source + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source import ObservabilityPipelineFluentBitSource + from datadog_api_client.v2.model.observability_pipeline_fluentd_source import ObservabilityPipelineFluentdSource + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source import ObservabilityPipelineGooglePubSubSource + from datadog_api_client.v2.model.observability_pipeline_http_client_source import ObservabilityPipelineHttpClientSource + from datadog_api_client.v2.model.observability_pipeline_http_server_source import ObservabilityPipelineHttpServerSource + from datadog_api_client.v2.model.observability_pipeline_kafka_source import ObservabilityPipelineKafkaSource + from datadog_api_client.v2.model.observability_pipeline_logstash_source import ObservabilityPipelineLogstashSource + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source import ObservabilityPipelineRsyslogSource + from datadog_api_client.v2.model.observability_pipeline_socket_source import ObservabilityPipelineSocketSource + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source import ObservabilityPipelineSplunkHecSource + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source import ObservabilityPipelineSplunkTcpSource + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source import ObservabilityPipelineSumoLogicSource + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source import ObservabilityPipelineSyslogNgSource + from datadog_api_client.v2.model.observability_pipeline_websocket_source import ObservabilityPipelineWebsocketSource + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import ObservabilityPipelineOpentelemetrySource + +class ListPipelinesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_data import ObservabilityPipelineData + from datadog_api_client.v2.model.list_pipelines_response_meta import ListPipelinesResponseMeta + return { + "data": ([ObservabilityPipelineData],), + "meta": (ListPipelinesResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[ObservabilityPipelineData], meta: Union[ListPipelinesResponseMeta, UnsetType]=unset, **kwargs): + """ + Represents the response payload containing a list of pipelines and associated metadata. + + :param data: The ``schema`` ``data``. + :type data: [ObservabilityPipelineData] + + :param meta: Metadata about the response. + :type meta: ListPipelinesResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_pipelines_response_meta.py b/datadog_api_client/v2/model/list_pipelines_response_meta.py new file mode 100644 index 0000000000..9aa52e1c31 --- /dev/null +++ b/datadog_api_client/v2/model/list_pipelines_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListPipelinesResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "totalCount", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata about the response. + + :param total_count: The total number of pipelines. + :type total_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_powerpacks_response.py b/datadog_api_client/v2/model/list_powerpacks_response.py new file mode 100644 index 0000000000..6899914c04 --- /dev/null +++ b/datadog_api_client/v2/model/list_powerpacks_response.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.powerpack_data import PowerpackData + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.powerpack_response_links import PowerpackResponseLinks + from datadog_api_client.v2.model.powerpacks_response_meta import PowerpacksResponseMeta + +class ListPowerpacksResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.powerpack_data import PowerpackData + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.powerpack_response_links import PowerpackResponseLinks + from datadog_api_client.v2.model.powerpacks_response_meta import PowerpacksResponseMeta + return { + "data": ([PowerpackData],), + "included": ([User],), + "links": (PowerpackResponseLinks,), + "meta": (PowerpacksResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[PowerpackData], UnsetType]=unset, included: Union[List[User], UnsetType]=unset, links: Union[PowerpackResponseLinks, UnsetType]=unset, meta: Union[PowerpacksResponseMeta, UnsetType]=unset, **kwargs): + """ + Response object which includes all powerpack configurations. + + :param data: List of powerpack definitions. + :type data: [PowerpackData], optional + + :param included: Array of objects related to the users. + :type included: [User], optional + + :param links: Links attributes. + :type links: PowerpackResponseLinks, optional + + :param meta: Powerpack response metadata. + :type meta: PowerpacksResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_relation_catalog_response.py b/datadog_api_client/v2/model/list_relation_catalog_response.py new file mode 100644 index 0000000000..343648781b --- /dev/null +++ b/datadog_api_client/v2/model/list_relation_catalog_response.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relation_response import RelationResponse + from datadog_api_client.v2.model.entity_data import EntityData + from datadog_api_client.v2.model.list_relation_catalog_response_links import ListRelationCatalogResponseLinks + from datadog_api_client.v2.model.relation_response_meta import RelationResponseMeta + +class ListRelationCatalogResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relation_response import RelationResponse + from datadog_api_client.v2.model.entity_data import EntityData + from datadog_api_client.v2.model.list_relation_catalog_response_links import ListRelationCatalogResponseLinks + from datadog_api_client.v2.model.relation_response_meta import RelationResponseMeta + return { + "data": ([RelationResponse],), + "included": ([EntityData],), + "links": (ListRelationCatalogResponseLinks,), + "meta": (RelationResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[RelationResponse], UnsetType]=unset, included: Union[List[EntityData], UnsetType]=unset, links: Union[ListRelationCatalogResponseLinks, UnsetType]=unset, meta: Union[RelationResponseMeta, UnsetType]=unset, **kwargs): + """ + List entity relation response. + + :param data: Array of relation responses + :type data: [RelationResponse], optional + + :param included: List relation response included entities. + :type included: [EntityData], optional + + :param links: List relation response links. + :type links: ListRelationCatalogResponseLinks, optional + + :param meta: Relation response metadata. + :type meta: RelationResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_relation_catalog_response_links.py b/datadog_api_client/v2/model/list_relation_catalog_response_links.py new file mode 100644 index 0000000000..db977767b2 --- /dev/null +++ b/datadog_api_client/v2/model/list_relation_catalog_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListRelationCatalogResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + "previous": (str,), + "self": (str,), + } + attribute_map = { + "next": "next", + "previous": "previous", + "self": "self", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, previous: Union[str, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + List relation response links. + + :param next: Next link. + :type next: str, optional + + :param previous: Previous link. + :type previous: str, optional + + :param self: Current link. + :type self: str, optional + """ + if next is not unset: + kwargs["next"] = next + if previous is not unset: + kwargs["previous"] = previous + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_rows_response.py b/datadog_api_client/v2/model/list_rows_response.py new file mode 100644 index 0000000000..89fd9e972d --- /dev/null +++ b/datadog_api_client/v2/model/list_rows_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_row_resource_data import TableRowResourceData + from datadog_api_client.v2.model.list_rows_response_links import ListRowsResponseLinks + from datadog_api_client.v2.model.list_rows_response_meta import ListRowsResponseMeta + +class ListRowsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_row_resource_data import TableRowResourceData + from datadog_api_client.v2.model.list_rows_response_links import ListRowsResponseLinks + from datadog_api_client.v2.model.list_rows_response_meta import ListRowsResponseMeta + return { + "data": ([TableRowResourceData],), + "links": (ListRowsResponseLinks,), + "meta": (ListRowsResponseMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[TableRowResourceData], links: ListRowsResponseLinks, meta: Union[ListRowsResponseMeta, UnsetType]=unset, **kwargs): + """ + Paginated list of reference table rows. + + :param data: The rows. + :type data: [TableRowResourceData] + + :param links: Pagination links for the list rows response. + :type links: ListRowsResponseLinks + + :param meta: Contains pagination details, including the continuation token for fetching additional rows. + :type meta: ListRowsResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data + self_.links = links diff --git a/datadog_api_client/v2/model/list_rows_response_links.py b/datadog_api_client/v2/model/list_rows_response_links.py new file mode 100644 index 0000000000..898ccac1f4 --- /dev/null +++ b/datadog_api_client/v2/model/list_rows_response_links.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListRowsResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "next": (str,), + "self": (str,), + } + attribute_map = { + "first": "first", + "next": "next", + "self": "self", + } + + def __init__(self_, first: str, self: str, next: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links for the list rows response. + + :param first: Link to the first page of results. + :type first: str + + :param next: Link to the next page of results. Only present when more rows are available. + :type next: str, optional + + :param self: Link to the current page of results. + :type self: str + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + + self_.first = first + self_.self = self diff --git a/datadog_api_client/v2/model/list_rows_response_meta.py b/datadog_api_client/v2/model/list_rows_response_meta.py new file mode 100644 index 0000000000..71e84226af --- /dev/null +++ b/datadog_api_client/v2/model/list_rows_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_rows_response_meta_page import ListRowsResponseMetaPage + +class ListRowsResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_rows_response_meta_page import ListRowsResponseMetaPage + return { + "page": (ListRowsResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[ListRowsResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Contains pagination details, including the continuation token for fetching additional rows. + + :param page: Contains the continuation token for navigating to the next page of rows. + :type page: ListRowsResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_rows_response_meta_page.py b/datadog_api_client/v2/model/list_rows_response_meta_page.py new file mode 100644 index 0000000000..bc41267cf3 --- /dev/null +++ b/datadog_api_client/v2/model/list_rows_response_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListRowsResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_continuation_token": (str,), + } + attribute_map = { + "next_continuation_token": "next_continuation_token", + } + + def __init__(self_, next_continuation_token: Union[str, UnsetType]=unset, **kwargs): + """ + Contains the continuation token for navigating to the next page of rows. + + :param next_continuation_token: Opaque token to pass as the ``page[continuation_token]`` query parameter to fetch the next page of results. Only present when more rows are available. + :type next_continuation_token: str, optional + """ + if next_continuation_token is not unset: + kwargs["next_continuation_token"] = next_continuation_token + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_rules_response.py b/datadog_api_client/v2/model/list_rules_response.py new file mode 100644 index 0000000000..549fd1d2d7 --- /dev/null +++ b/datadog_api_client/v2/model/list_rules_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_rules_response_data_item import ListRulesResponseDataItem + from datadog_api_client.v2.model.list_rules_response_links import ListRulesResponseLinks + +class ListRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_rules_response_data_item import ListRulesResponseDataItem + from datadog_api_client.v2.model.list_rules_response_links import ListRulesResponseLinks + return { + "data": ([ListRulesResponseDataItem],), + "links": (ListRulesResponseLinks,), + } + attribute_map = { + "data": "data", + "links": "links", + } + + def __init__(self_, data: Union[List[ListRulesResponseDataItem], UnsetType]=unset, links: Union[ListRulesResponseLinks, UnsetType]=unset, **kwargs): + """ + Scorecard rules response. + + :param data: Array of rule details. + :type data: [ListRulesResponseDataItem], optional + + :param links: Links attributes. + :type links: ListRulesResponseLinks, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_rules_response_data_item.py b/datadog_api_client/v2/model/list_rules_response_data_item.py new file mode 100644 index 0000000000..1c70f9a69d --- /dev/null +++ b/datadog_api_client/v2/model/list_rules_response_data_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_attributes import RuleAttributes + from datadog_api_client.v2.model.relationship_to_rule import RelationshipToRule + from datadog_api_client.v2.model.rule_type import RuleType + +class ListRulesResponseDataItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_attributes import RuleAttributes + from datadog_api_client.v2.model.relationship_to_rule import RelationshipToRule + from datadog_api_client.v2.model.rule_type import RuleType + return { + "attributes": (RuleAttributes,), + "id": (str,), + "relationships": (RelationshipToRule,), + "type": (RuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[RuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[RelationshipToRule, UnsetType]=unset, type: Union[RuleType, UnsetType]=unset, **kwargs): + """ + Rule details. + + :param attributes: Details of a rule. + :type attributes: RuleAttributes, optional + + :param id: The unique ID for a scorecard rule. + :type id: str, optional + + :param relationships: Scorecard create rule response relationship. + :type relationships: RelationshipToRule, optional + + :param type: The JSON:API type for scorecard rules. + :type type: RuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_rules_response_links.py b/datadog_api_client/v2/model/list_rules_response_links.py new file mode 100644 index 0000000000..4bc39cb5d3 --- /dev/null +++ b/datadog_api_client/v2/model/list_rules_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListRulesResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param next: Link for the next set of rules. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_scorecard_scores_meta.py b/datadog_api_client/v2/model/list_scorecard_scores_meta.py new file mode 100644 index 0000000000..87d02c28c3 --- /dev/null +++ b/datadog_api_client/v2/model/list_scorecard_scores_meta.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListScorecardScoresMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "limit": (int,), + "offset": (int,), + "total": (int,), + } + attribute_map = { + "count": "count", + "limit": "limit", + "offset": "offset", + "total": "total", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata for scores. + + :param count: The number of results returned in this page. + :type count: int, optional + + :param limit: The page limit. + :type limit: int, optional + + :param offset: The page offset. + :type offset: int, optional + + :param total: The total number of results. + :type total: int, optional + """ + if count is not unset: + kwargs["count"] = count + if limit is not unset: + kwargs["limit"] = limit + if offset is not unset: + kwargs["offset"] = offset + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_scorecard_scores_response.py b/datadog_api_client/v2/model/list_scorecard_scores_response.py new file mode 100644 index 0000000000..9775e0764e --- /dev/null +++ b/datadog_api_client/v2/model/list_scorecard_scores_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scorecard_score_data import ScorecardScoreData + from datadog_api_client.v2.model.list_rules_response_links import ListRulesResponseLinks + from datadog_api_client.v2.model.list_scorecard_scores_meta import ListScorecardScoresMeta + +class ListScorecardScoresResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scorecard_score_data import ScorecardScoreData + from datadog_api_client.v2.model.list_rules_response_links import ListRulesResponseLinks + from datadog_api_client.v2.model.list_scorecard_scores_meta import ListScorecardScoresMeta + return { + "data": ([ScorecardScoreData],), + "links": (ListRulesResponseLinks,), + "meta": (ListScorecardScoresMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[ScorecardScoreData], UnsetType]=unset, links: Union[ListRulesResponseLinks, UnsetType]=unset, meta: Union[ListScorecardScoresMeta, UnsetType]=unset, **kwargs): + """ + A list of scorecard scores for a given aggregation type. + + :param data: Array of score objects. + :type data: [ScorecardScoreData], optional + + :param links: Links attributes. + :type links: ListRulesResponseLinks, optional + + :param meta: Pagination metadata for scores. + :type meta: ListScorecardScoresMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_scorecards_response.py b/datadog_api_client/v2/model/list_scorecards_response.py new file mode 100644 index 0000000000..b2bab02f01 --- /dev/null +++ b/datadog_api_client/v2/model/list_scorecards_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scorecard_list_response_data import ScorecardListResponseData + +class ListScorecardsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scorecard_list_response_data import ScorecardListResponseData + return { + "data": ([ScorecardListResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ScorecardListResponseData], **kwargs): + """ + Response containing a list of scorecards. + + :param data: Array of scorecards. + :type data: [ScorecardListResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_security_findings_response.py b/datadog_api_client/v2/model/list_security_findings_response.py new file mode 100644 index 0000000000..0374d11cd9 --- /dev/null +++ b/datadog_api_client/v2/model/list_security_findings_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_findings_data import SecurityFindingsData + from datadog_api_client.v2.model.security_findings_links import SecurityFindingsLinks + from datadog_api_client.v2.model.security_findings_meta import SecurityFindingsMeta + +class ListSecurityFindingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_findings_data import SecurityFindingsData + from datadog_api_client.v2.model.security_findings_links import SecurityFindingsLinks + from datadog_api_client.v2.model.security_findings_meta import SecurityFindingsMeta + return { + "data": ([SecurityFindingsData],), + "links": (SecurityFindingsLinks,), + "meta": (SecurityFindingsMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[SecurityFindingsData], UnsetType]=unset, links: Union[SecurityFindingsLinks, UnsetType]=unset, meta: Union[SecurityFindingsMeta, UnsetType]=unset, **kwargs): + """ + The expected response schema when listing security findings. + + :param data: Array of security findings matching the search query. + :type data: [SecurityFindingsData], optional + + :param links: Links for pagination. + :type links: SecurityFindingsLinks, optional + + :param meta: Metadata about the response. + :type meta: SecurityFindingsMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_service_access_tokens_response.py b/datadog_api_client/v2/model/list_service_access_tokens_response.py new file mode 100644 index 0000000000..d294ba2130 --- /dev/null +++ b/datadog_api_client/v2/model/list_service_access_tokens_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_access_token import ServiceAccessToken + from datadog_api_client.v2.model.service_access_token_response_meta import ServiceAccessTokenResponseMeta + +class ListServiceAccessTokensResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_access_token import ServiceAccessToken + from datadog_api_client.v2.model.service_access_token_response_meta import ServiceAccessTokenResponseMeta + return { + "data": ([ServiceAccessToken],), + "meta": (ServiceAccessTokenResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[ServiceAccessToken], UnsetType]=unset, meta: Union[ServiceAccessTokenResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for a list of access tokens. + + :param data: Array of access tokens. + :type data: [ServiceAccessToken], optional + + :param meta: Additional information related to the access token response. + :type meta: ServiceAccessTokenResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_shared_dashboards_response.py b/datadog_api_client/v2/model/list_shared_dashboards_response.py new file mode 100644 index 0000000000..b7e2721740 --- /dev/null +++ b/datadog_api_client/v2/model/list_shared_dashboards_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shared_dashboard_response import SharedDashboardResponse + from datadog_api_client.v2.model.shared_dashboard_included import SharedDashboardIncluded + from datadog_api_client.v2.model.shared_dashboard_included_dashboard import SharedDashboardIncludedDashboard + from datadog_api_client.v2.model.shared_dashboard_included_user import SharedDashboardIncludedUser + +class ListSharedDashboardsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shared_dashboard_response import SharedDashboardResponse + from datadog_api_client.v2.model.shared_dashboard_included import SharedDashboardIncluded + return { + "data": ([SharedDashboardResponse],), + "included": ([SharedDashboardIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[SharedDashboardResponse], included: List[Union[SharedDashboardIncluded, SharedDashboardIncludedDashboard, SharedDashboardIncludedUser]], **kwargs): + """ + Response containing shared dashboards for a dashboard. + + :param data: Shared dashboards for the dashboard. + :type data: [SharedDashboardResponse] + + :param included: Users and dashboards related to the shared dashboards. + :type included: [SharedDashboardIncluded] + """ + super().__init__(kwargs) + + + self_.data = data + self_.included = included diff --git a/datadog_api_client/v2/model/list_sourcemaps_response.py b/datadog_api_client/v2/model/list_sourcemaps_response.py new file mode 100644 index 0000000000..7ea89851fc --- /dev/null +++ b/datadog_api_client/v2/model/list_sourcemaps_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sourcemap_item import SourcemapItem + from datadog_api_client.v2.model.sourcemaps_list_meta import SourcemapsListMeta + from datadog_api_client.v2.model.js_sourcemap_data import JSSourcemapData + from datadog_api_client.v2.model.react_native_sourcemap_data import ReactNativeSourcemapData + from datadog_api_client.v2.model.ios_sourcemap_data import IOSSourcemapData + from datadog_api_client.v2.model.jvm_sourcemap_data import JVMSourcemapData + from datadog_api_client.v2.model.flutter_sourcemap_data import FlutterSourcemapData + from datadog_api_client.v2.model.elf_sourcemap_data import ELFSourcemapData + from datadog_api_client.v2.model.ndk_sourcemap_data import NDKSourcemapData + from datadog_api_client.v2.model.il2_cpp_sourcemap_data import IL2CPPSourcemapData + +class ListSourcemapsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sourcemap_item import SourcemapItem + from datadog_api_client.v2.model.sourcemaps_list_meta import SourcemapsListMeta + return { + "data": ([SourcemapItem],), + "meta": (SourcemapsListMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[Union[SourcemapItem, JSSourcemapData, ReactNativeSourcemapData, IOSSourcemapData, JVMSourcemapData, FlutterSourcemapData, ELFSourcemapData, NDKSourcemapData, IL2CPPSourcemapData]], meta: Union[SourcemapsListMeta, UnsetType]=unset, **kwargs): + """ + Response containing a paginated list of source maps. + + :param data: List of source map data objects. + :type data: [SourcemapItem] + + :param meta: Pagination metadata for the source maps list response. + :type meta: SourcemapsListMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_tags_response.py b/datadog_api_client/v2/model/list_tags_response.py new file mode 100644 index 0000000000..d1aa971eb9 --- /dev/null +++ b/datadog_api_client/v2/model/list_tags_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_tags_response_data import ListTagsResponseData + +class ListTagsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_tags_response_data import ListTagsResponseData + return { + "data": (ListTagsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ListTagsResponseData, UnsetType]=unset, **kwargs): + """ + List tags response. + + :param data: The list tags response data. + :type data: ListTagsResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_tags_response_data.py b/datadog_api_client/v2/model/list_tags_response_data.py new file mode 100644 index 0000000000..b68a9d4bbd --- /dev/null +++ b/datadog_api_client/v2/model/list_tags_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_tags_response_data_attributes import ListTagsResponseDataAttributes + +class ListTagsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_tags_response_data_attributes import ListTagsResponseDataAttributes + return { + "attributes": (ListTagsResponseDataAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ListTagsResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The list tags response data. + + :param attributes: The definition of ListTagsResponseDataAttributes object. + :type attributes: ListTagsResponseDataAttributes, optional + + :param id: The device ID + :type id: str, optional + + :param type: The type of the resource. The value should always be tags. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_tags_response_data_attributes.py b/datadog_api_client/v2/model/list_tags_response_data_attributes.py new file mode 100644 index 0000000000..e40a9091d6 --- /dev/null +++ b/datadog_api_client/v2/model/list_tags_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListTagsResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "tags": ([str],), + } + attribute_map = { + "tags": "tags", + } + + def __init__(self_, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The definition of ListTagsResponseDataAttributes object. + + :param tags: The list of tags + :type tags: [str], optional + """ + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_teams_include.py b/datadog_api_client/v2/model/list_teams_include.py new file mode 100644 index 0000000000..5ec128ed98 --- /dev/null +++ b/datadog_api_client/v2/model/list_teams_include.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListTeamsInclude(ModelSimple): + """ + Included related resources optionally requested. + + :param value: Must be one of ["team_links", "user_team_permissions"]. + :type value: str + """ + + allowed_values = { + "team_links", + "user_team_permissions", + } + TEAM_LINKS: ClassVar["ListTeamsInclude"] + USER_TEAM_PERMISSIONS: ClassVar["ListTeamsInclude"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListTeamsInclude.TEAM_LINKS = ListTeamsInclude("team_links") +ListTeamsInclude.USER_TEAM_PERMISSIONS = ListTeamsInclude("user_team_permissions") diff --git a/datadog_api_client/v2/model/list_teams_sort.py b/datadog_api_client/v2/model/list_teams_sort.py new file mode 100644 index 0000000000..8b2538ab77 --- /dev/null +++ b/datadog_api_client/v2/model/list_teams_sort.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ListTeamsSort(ModelSimple): + """ + Specifies the order of the returned teams + + :param value: Must be one of ["name", "-name", "user_count", "-user_count"]. + :type value: str + """ + + allowed_values = { + "name", + "-name", + "user_count", + "-user_count", + } + NAME: ClassVar["ListTeamsSort"] + _NAME: ClassVar["ListTeamsSort"] + USER_COUNT: ClassVar["ListTeamsSort"] + _USER_COUNT: ClassVar["ListTeamsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ListTeamsSort.NAME = ListTeamsSort("name") +ListTeamsSort._NAME = ListTeamsSort("-name") +ListTeamsSort.USER_COUNT = ListTeamsSort("user_count") +ListTeamsSort._USER_COUNT = ListTeamsSort("-user_count") diff --git a/datadog_api_client/v2/model/list_vulnerabilities_response.py b/datadog_api_client/v2/model/list_vulnerabilities_response.py new file mode 100644 index 0000000000..0c8cd74675 --- /dev/null +++ b/datadog_api_client/v2/model/list_vulnerabilities_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.vulnerability import Vulnerability + from datadog_api_client.v2.model.links import Links + from datadog_api_client.v2.model.metadata import Metadata + +class ListVulnerabilitiesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.vulnerability import Vulnerability + from datadog_api_client.v2.model.links import Links + from datadog_api_client.v2.model.metadata import Metadata + return { + "data": ([Vulnerability],), + "links": (Links,), + "meta": (Metadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[Vulnerability], links: Union[Links, UnsetType]=unset, meta: Union[Metadata, UnsetType]=unset, **kwargs): + """ + The expected response schema when listing vulnerabilities. + + :param data: List of vulnerabilities. + :type data: [Vulnerability] + + :param links: The JSON:API links related to pagination. + :type links: Links, optional + + :param meta: The metadata related to this request. + :type meta: Metadata, optional + """ + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_vulnerable_assets_response.py b/datadog_api_client/v2/model/list_vulnerable_assets_response.py new file mode 100644 index 0000000000..171ad7dfc5 --- /dev/null +++ b/datadog_api_client/v2/model/list_vulnerable_assets_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.asset import Asset + from datadog_api_client.v2.model.links import Links + from datadog_api_client.v2.model.metadata import Metadata + +class ListVulnerableAssetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.asset import Asset + from datadog_api_client.v2.model.links import Links + from datadog_api_client.v2.model.metadata import Metadata + return { + "data": ([Asset],), + "links": (Links,), + "meta": (Metadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[Asset], links: Union[Links, UnsetType]=unset, meta: Union[Metadata, UnsetType]=unset, **kwargs): + """ + The expected response schema when listing vulnerable assets. + + :param data: List of vulnerable assets. + :type data: [Asset] + + :param links: The JSON:API links related to pagination. + :type links: Links, optional + + :param meta: The metadata related to this request. + :type meta: Metadata, optional + """ + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/list_workflows_response.py b/datadog_api_client/v2/model/list_workflows_response.py new file mode 100644 index 0000000000..e7dec2ad75 --- /dev/null +++ b/datadog_api_client/v2/model/list_workflows_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_list_item import WorkflowListItem + from datadog_api_client.v2.model.list_workflows_response_meta import ListWorkflowsResponseMeta + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class ListWorkflowsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_list_item import WorkflowListItem + from datadog_api_client.v2.model.list_workflows_response_meta import ListWorkflowsResponseMeta + return { + "data": ([WorkflowListItem],), + "meta": (ListWorkflowsResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[WorkflowListItem], UnsetType]=unset, meta: Union[ListWorkflowsResponseMeta, UnsetType]=unset, **kwargs): + """ + The response object for a listing workflows request. + + :param data: A list of workflows. + :type data: [WorkflowListItem], optional + + :param meta: Metadata for a List Workflows response. + :type meta: ListWorkflowsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_workflows_response_meta.py b/datadog_api_client/v2/model/list_workflows_response_meta.py new file mode 100644 index 0000000000..b6087af6c2 --- /dev/null +++ b/datadog_api_client/v2/model/list_workflows_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.list_workflows_response_meta_page import ListWorkflowsResponseMetaPage + +class ListWorkflowsResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.list_workflows_response_meta_page import ListWorkflowsResponseMetaPage + return { + "page": (ListWorkflowsResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[ListWorkflowsResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Metadata for a List Workflows response. + + :param page: Pagination metadata for a List Workflows response. + :type page: ListWorkflowsResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/list_workflows_response_meta_page.py b/datadog_api_client/v2/model/list_workflows_response_meta_page.py new file mode 100644 index 0000000000..48aede1fd8 --- /dev/null +++ b/datadog_api_client/v2/model/list_workflows_response_meta_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ListWorkflowsResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "totalCount", + "total_filtered_count": "totalFilteredCount", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata for a List Workflows response. + + :param total_count: The total number of workflows in the organization. + :type total_count: int, optional + + :param total_filtered_count: The total number of workflows matching the applied filters. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interaction_by_trace_item.py b/datadog_api_client/v2/model/llm_obs_annotated_interaction_by_trace_item.py new file mode 100644 index 0000000000..f0a082dce5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interaction_by_trace_item.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_item import LLMObsAnnotationItem + from datadog_api_client.v2.model.llm_obs_content_block import LLMObsContentBlock + from datadog_api_client.v2.model.llm_obs_any_interaction_type import LLMObsAnyInteractionType + +class LLMObsAnnotatedInteractionByTraceItem(ModelNormal): + validations = { + "display_block": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_item import LLMObsAnnotationItem + from datadog_api_client.v2.model.llm_obs_content_block import LLMObsContentBlock + from datadog_api_client.v2.model.llm_obs_any_interaction_type import LLMObsAnyInteractionType + return { + "annotations": ([LLMObsAnnotationItem],), + "content_id": (str,), + "created_at": (datetime,), + "display_block": ([LLMObsContentBlock],), + "id": (str,), + "modified_at": (datetime,), + "queue_id": (str,), + "queue_name": (str,), + "type": (LLMObsAnyInteractionType,), + } + attribute_map = { + "annotations": "annotations", + "content_id": "content_id", + "created_at": "created_at", + "display_block": "display_block", + "id": "id", + "modified_at": "modified_at", + "queue_id": "queue_id", + "queue_name": "queue_name", + "type": "type", + } + + def __init__(self_, annotations: List[LLMObsAnnotationItem], content_id: str, created_at: datetime, id: str, modified_at: datetime, queue_id: str, queue_name: str, type: LLMObsAnyInteractionType, display_block: Union[List[LLMObsContentBlock], UnsetType]=unset, **kwargs): + """ + An annotated interaction returned by the cross-queue lookup, including the source queue metadata. + + :param annotations: List of annotations for this interaction. + :type annotations: [LLMObsAnnotationItem] + + :param content_id: Upstream entity identifier (trace ID, session ID, or deterministic display_block ID). + :type content_id: str + + :param created_at: Timestamp when the interaction was added to the queue. + :type created_at: datetime + + :param display_block: List of content blocks that make up a ``display_block`` interaction. + Must contain at least one block. + :type display_block: [LLMObsContentBlock], optional + + :param id: Unique identifier of the interaction. + :type id: str + + :param modified_at: Timestamp when the interaction was last updated. + :type modified_at: datetime + + :param queue_id: Identifier of the annotation queue this interaction belongs to. + :type queue_id: str + + :param queue_name: Name of the annotation queue this interaction belongs to. + :type queue_name: str + + :param type: Type of an annotated interaction. + :type type: LLMObsAnyInteractionType + """ + if display_block is not unset: + kwargs["display_block"] = display_block + super().__init__(kwargs) + + + self_.annotations = annotations + self_.content_id = content_id + self_.created_at = created_at + self_.id = id + self_.modified_at = modified_at + self_.queue_id = queue_id + self_.queue_name = queue_name + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interaction_item.py b/datadog_api_client/v2/model/llm_obs_annotated_interaction_item.py new file mode 100644 index 0000000000..517bca9d98 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interaction_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsAnnotatedInteractionItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An interaction with its associated annotations. + + :param annotations: List of annotations for this interaction. + :type annotations: [LLMObsAnnotationItem] + + :param content_id: Upstream entity identifier supplied by the caller. + :type content_id: str + + :param created_at: Timestamp when the interaction was added to the queue. + :type created_at: datetime + + :param id: Unique identifier of the interaction. + :type id: str + + :param modified_at: Timestamp when the interaction was last updated. + :type modified_at: datetime + + :param type: Type of an upstream-entity interaction. + :type type: LLMObsTraceInteractionType + + :param display_block: List of content blocks that make up a `display_block` interaction. + Must contain at least one block. + :type display_block: [LLMObsContentBlock] + """ + 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.llm_obs_trace_annotated_interaction_item import LLMObsTraceAnnotatedInteractionItem + from datadog_api_client.v2.model.llm_obs_display_block_annotated_interaction_item import LLMObsDisplayBlockAnnotatedInteractionItem + return { + "oneOf": [ + LLMObsTraceAnnotatedInteractionItem, + LLMObsDisplayBlockAnnotatedInteractionItem, + ], + } diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_data_attributes_response.py new file mode 100644 index 0000000000..6f6089caf6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_data_attributes_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotated_interaction_by_trace_item import LLMObsAnnotatedInteractionByTraceItem + +class LLMObsAnnotatedInteractionsByTraceDataAttributesResponse(ModelNormal): + validations = { + "total_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotated_interaction_by_trace_item import LLMObsAnnotatedInteractionByTraceItem + return { + "annotated_interactions": ([LLMObsAnnotatedInteractionByTraceItem],), + "total_count": (int,), + } + attribute_map = { + "annotated_interactions": "annotated_interactions", + "total_count": "total_count", + } + + def __init__(self_, annotated_interactions: List[LLMObsAnnotatedInteractionByTraceItem], total_count: int, **kwargs): + """ + Attributes of the cross-queue annotated interactions response. + + :param annotated_interactions: List of annotated interactions across all queues for the requested content IDs. + :type annotated_interactions: [LLMObsAnnotatedInteractionByTraceItem] + + :param total_count: Total number of annotated interactions matching the query. + :type total_count: int + """ + super().__init__(kwargs) + + + self_.annotated_interactions = annotated_interactions + self_.total_count = total_count diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_data_response.py b/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_data_response.py new file mode 100644 index 0000000000..a4deb48c0e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_data_attributes_response import LLMObsAnnotatedInteractionsByTraceDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_type import LLMObsAnnotatedInteractionsByTraceType + +class LLMObsAnnotatedInteractionsByTraceDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_data_attributes_response import LLMObsAnnotatedInteractionsByTraceDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_type import LLMObsAnnotatedInteractionsByTraceType + return { + "attributes": (LLMObsAnnotatedInteractionsByTraceDataAttributesResponse,), + "id": (str,), + "type": (LLMObsAnnotatedInteractionsByTraceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotatedInteractionsByTraceDataAttributesResponse, id: str, type: LLMObsAnnotatedInteractionsByTraceType, **kwargs): + """ + Data object for the cross-queue annotated interactions response. + + :param attributes: Attributes of the cross-queue annotated interactions response. + :type attributes: LLMObsAnnotatedInteractionsByTraceDataAttributesResponse + + :param id: Opaque identifier for the response object. + :type id: str + + :param type: Resource type for cross-queue annotated interactions lookup. + :type type: LLMObsAnnotatedInteractionsByTraceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_response.py b/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_response.py new file mode 100644 index 0000000000..1a10da4280 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_data_response import LLMObsAnnotatedInteractionsByTraceDataResponse + +class LLMObsAnnotatedInteractionsByTraceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_data_response import LLMObsAnnotatedInteractionsByTraceDataResponse + return { + "data": (LLMObsAnnotatedInteractionsByTraceDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotatedInteractionsByTraceDataResponse, **kwargs): + """ + Response containing annotated interactions across all queues for the requested content IDs. + + :param data: Data object for the cross-queue annotated interactions response. + :type data: LLMObsAnnotatedInteractionsByTraceDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_type.py b/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_type.py new file mode 100644 index 0000000000..8d81e23d62 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interactions_by_trace_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsAnnotatedInteractionsByTraceType(ModelSimple): + """ + Resource type for cross-queue annotated interactions lookup. + + :param value: If omitted defaults to "annotated_interactions_by_trace". Must be one of ["annotated_interactions_by_trace"]. + :type value: str + """ + + allowed_values = { + "annotated_interactions_by_trace", + } + ANNOTATED_INTERACTIONS_BY_TRACE: ClassVar["LLMObsAnnotatedInteractionsByTraceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsAnnotatedInteractionsByTraceType.ANNOTATED_INTERACTIONS_BY_TRACE = LLMObsAnnotatedInteractionsByTraceType("annotated_interactions_by_trace") diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interactions_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_annotated_interactions_data_attributes_response.py new file mode 100644 index 0000000000..e645134d6e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interactions_data_attributes_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotated_interaction_item import LLMObsAnnotatedInteractionItem + from datadog_api_client.v2.model.llm_obs_trace_annotated_interaction_item import LLMObsTraceAnnotatedInteractionItem + from datadog_api_client.v2.model.llm_obs_display_block_annotated_interaction_item import LLMObsDisplayBlockAnnotatedInteractionItem + +class LLMObsAnnotatedInteractionsDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotated_interaction_item import LLMObsAnnotatedInteractionItem + return { + "annotated_interactions": ([LLMObsAnnotatedInteractionItem],), + } + attribute_map = { + "annotated_interactions": "annotated_interactions", + } + + def __init__(self_, annotated_interactions: List[Union[LLMObsAnnotatedInteractionItem, LLMObsTraceAnnotatedInteractionItem, LLMObsDisplayBlockAnnotatedInteractionItem]], **kwargs): + """ + Attributes containing the list of annotated interactions. + + :param annotated_interactions: List of interactions with their annotations. + :type annotated_interactions: [LLMObsAnnotatedInteractionItem] + """ + super().__init__(kwargs) + + + self_.annotated_interactions = annotated_interactions diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interactions_data_response.py b/datadog_api_client/v2/model/llm_obs_annotated_interactions_data_response.py new file mode 100644 index 0000000000..8fffcc5e2e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interactions_data_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotated_interactions_data_attributes_response import LLMObsAnnotatedInteractionsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotated_interactions_type import LLMObsAnnotatedInteractionsType + from datadog_api_client.v2.model.llm_obs_trace_annotated_interaction_item import LLMObsTraceAnnotatedInteractionItem + from datadog_api_client.v2.model.llm_obs_display_block_annotated_interaction_item import LLMObsDisplayBlockAnnotatedInteractionItem + +class LLMObsAnnotatedInteractionsDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotated_interactions_data_attributes_response import LLMObsAnnotatedInteractionsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotated_interactions_type import LLMObsAnnotatedInteractionsType + return { + "attributes": (LLMObsAnnotatedInteractionsDataAttributesResponse,), + "id": (str,), + "type": (LLMObsAnnotatedInteractionsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotatedInteractionsDataAttributesResponse, id: str, type: LLMObsAnnotatedInteractionsType, **kwargs): + """ + Data object for annotated interactions. + + :param attributes: Attributes containing the list of annotated interactions. + :type attributes: LLMObsAnnotatedInteractionsDataAttributesResponse + + :param id: The annotation queue ID. + :type id: str + + :param type: Resource type for annotated interactions. + :type type: LLMObsAnnotatedInteractionsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interactions_response.py b/datadog_api_client/v2/model/llm_obs_annotated_interactions_response.py new file mode 100644 index 0000000000..d8c3e44c41 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interactions_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotated_interactions_data_response import LLMObsAnnotatedInteractionsDataResponse + from datadog_api_client.v2.model.llm_obs_trace_annotated_interaction_item import LLMObsTraceAnnotatedInteractionItem + from datadog_api_client.v2.model.llm_obs_display_block_annotated_interaction_item import LLMObsDisplayBlockAnnotatedInteractionItem + +class LLMObsAnnotatedInteractionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotated_interactions_data_response import LLMObsAnnotatedInteractionsDataResponse + return { + "data": (LLMObsAnnotatedInteractionsDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotatedInteractionsDataResponse, **kwargs): + """ + Response containing the annotated interactions for an annotation queue. + + :param data: Data object for annotated interactions. + :type data: LLMObsAnnotatedInteractionsDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotated_interactions_type.py b/datadog_api_client/v2/model/llm_obs_annotated_interactions_type.py new file mode 100644 index 0000000000..78889c6117 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotated_interactions_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsAnnotatedInteractionsType(ModelSimple): + """ + Resource type for annotated interactions. + + :param value: If omitted defaults to "annotated_interactions". Must be one of ["annotated_interactions"]. + :type value: str + """ + + allowed_values = { + "annotated_interactions", + } + ANNOTATED_INTERACTIONS: ClassVar["LLMObsAnnotatedInteractionsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsAnnotatedInteractionsType.ANNOTATED_INTERACTIONS = LLMObsAnnotatedInteractionsType("annotated_interactions") diff --git a/datadog_api_client/v2/model/llm_obs_annotation_assessment.py b/datadog_api_client/v2/model/llm_obs_annotation_assessment.py new file mode 100644 index 0000000000..db3ec1b745 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_assessment.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsAnnotationAssessment(ModelSimple): + """ + Assessment result for a label value. + + :param value: Must be one of ["pass", "fail"]. + :type value: str + """ + + allowed_values = { + "pass", + "fail", + } + PASS: ClassVar["LLMObsAnnotationAssessment"] + FAIL: ClassVar["LLMObsAnnotationAssessment"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsAnnotationAssessment.PASS = LLMObsAnnotationAssessment("pass") +LLMObsAnnotationAssessment.FAIL = LLMObsAnnotationAssessment("fail") diff --git a/datadog_api_client/v2/model/llm_obs_annotation_error.py b/datadog_api_client/v2/model/llm_obs_annotation_error.py new file mode 100644 index 0000000000..579ad0f654 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_error.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsAnnotationError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "annotation_id": (str,), + "error": (str,), + "interaction_id": (str,), + } + attribute_map = { + "annotation_id": "annotation_id", + "error": "error", + "interaction_id": "interaction_id", + } + + def __init__(self_, error: str, interaction_id: str, annotation_id: Union[str, UnsetType]=unset, **kwargs): + """ + A partial error for a single annotation that could not be processed. + + :param annotation_id: ID of the annotation that failed, if applicable. + :type annotation_id: str, optional + + :param error: Error message. + :type error: str + + :param interaction_id: ID of the interaction that failed. + :type interaction_id: str + """ + if annotation_id is not unset: + kwargs["annotation_id"] = annotation_id + super().__init__(kwargs) + + + self_.error = error + self_.interaction_id = interaction_id diff --git a/datadog_api_client/v2/model/llm_obs_annotation_item.py b/datadog_api_client/v2/model/llm_obs_annotation_item.py new file mode 100644 index 0000000000..f4e04ec6c8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsAnnotationItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "created_by": (str,), + "id": (str,), + "interaction_id": (str,), + "label_values": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "modified_at": (datetime,), + "modified_by": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "id": "id", + "interaction_id": "interaction_id", + "label_values": "label_values", + "modified_at": "modified_at", + "modified_by": "modified_by", + } + + def __init__(self_, created_at: datetime, created_by: str, id: str, interaction_id: str, label_values: Dict[str, Any], modified_at: datetime, modified_by: str, **kwargs): + """ + A single annotation on an interaction. + + :param created_at: Timestamp when the annotation was created. + :type created_at: datetime + + :param created_by: Identifier of the user who created the annotation. + :type created_by: str + + :param id: Unique identifier of the annotation. + :type id: str + + :param interaction_id: Identifier of the interaction this annotation belongs to. + :type interaction_id: str + + :param label_values: Label values for this annotation. + :type label_values: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + + :param modified_at: Timestamp when the annotation was last modified. + :type modified_at: datetime + + :param modified_by: Identifier of the user who last modified the annotation. + :type modified_by: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.id = id + self_.interaction_id = interaction_id + self_.label_values = label_values + self_.modified_at = modified_at + self_.modified_by = modified_by diff --git a/datadog_api_client/v2/model/llm_obs_annotation_item_response.py b/datadog_api_client/v2/model/llm_obs_annotation_item_response.py new file mode 100644 index 0000000000..44392d83ff --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_item_response.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_label_value_response import LLMObsAnnotationLabelValueResponse + +class LLMObsAnnotationItemResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_label_value_response import LLMObsAnnotationLabelValueResponse + return { + "created_at": (datetime,), + "created_by": (str,), + "id": (str,), + "interaction_id": (str,), + "label_values": ([LLMObsAnnotationLabelValueResponse],), + "modified_at": (datetime,), + "modified_by": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "id": "id", + "interaction_id": "interaction_id", + "label_values": "label_values", + "modified_at": "modified_at", + "modified_by": "modified_by", + } + + def __init__(self_, created_at: datetime, created_by: str, id: str, interaction_id: str, label_values: List[LLMObsAnnotationLabelValueResponse], modified_at: datetime, modified_by: str, **kwargs): + """ + A single annotation on an interaction, as returned by the API. + + :param created_at: Timestamp when the annotation was created. + :type created_at: datetime + + :param created_by: Identifier of the user who created the annotation. + :type created_by: str + + :param id: Unique identifier of the annotation. + :type id: str + + :param interaction_id: Identifier of the interaction this annotation belongs to. + :type interaction_id: str + + :param label_values: Label values for this annotation. Each entry references a label schema by ID + and provides the corresponding value. + :type label_values: [LLMObsAnnotationLabelValueResponse] + + :param modified_at: Timestamp when the annotation was last modified. + :type modified_at: datetime + + :param modified_by: Identifier of the user who last modified the annotation. + :type modified_by: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.id = id + self_.interaction_id = interaction_id + self_.label_values = label_values + self_.modified_at = modified_at + self_.modified_by = modified_by diff --git a/datadog_api_client/v2/model/llm_obs_annotation_label_value.py b/datadog_api_client/v2/model/llm_obs_annotation_label_value.py new file mode 100644 index 0000000000..12aaff8c5c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_label_value.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_assessment import LLMObsAnnotationAssessment + from datadog_api_client.v2.model.llm_obs_annotation_label_value_value import LLMObsAnnotationLabelValueValue + +class LLMObsAnnotationLabelValue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_assessment import LLMObsAnnotationAssessment + from datadog_api_client.v2.model.llm_obs_annotation_label_value_value import LLMObsAnnotationLabelValueValue + return { + "assessment": (LLMObsAnnotationAssessment,), + "label_schema_id": (str,), + "reasoning": (str,), + "value": (LLMObsAnnotationLabelValueValue,), + } + attribute_map = { + "assessment": "assessment", + "label_schema_id": "label_schema_id", + "reasoning": "reasoning", + "value": "value", + } + + def __init__(self_, label_schema_id: str, value: Union[LLMObsAnnotationLabelValueValue, float, str, List[str], bool], assessment: Union[LLMObsAnnotationAssessment, UnsetType]=unset, reasoning: Union[str, UnsetType]=unset, **kwargs): + """ + A single label value entry in an annotation. + The ``value`` type must match the label schema type: + + * ``score`` : a number within the schema ``min`` / ``max`` range (integer if ``is_integer`` is ``true`` ). + * ``categorical`` : a string that is one of the schema ``values``. + * ``boolean`` : ``true`` or ``false``. + * ``text`` : any non-empty string. + + :param assessment: Assessment result for a label value. + :type assessment: LLMObsAnnotationAssessment, optional + + :param label_schema_id: ID of the label schema this value corresponds to. + :type label_schema_id: str + + :param reasoning: Free text reasoning for this label value. + :type reasoning: str, optional + + :param value: The value for this label. Must comply with the label schema type constraints. + :type value: LLMObsAnnotationLabelValueValue + """ + if assessment is not unset: + kwargs["assessment"] = assessment + if reasoning is not unset: + kwargs["reasoning"] = reasoning + super().__init__(kwargs) + + + self_.label_schema_id = label_schema_id + self_.value = value diff --git a/datadog_api_client/v2/model/llm_obs_annotation_label_value_response.py b/datadog_api_client/v2/model/llm_obs_annotation_label_value_response.py new file mode 100644 index 0000000000..47a94d87f9 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_label_value_response.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_assessment import LLMObsAnnotationAssessment + from datadog_api_client.v2.model.llm_obs_label_schema_type import LLMObsLabelSchemaType + from datadog_api_client.v2.model.llm_obs_annotation_label_value_value import LLMObsAnnotationLabelValueValue + +class LLMObsAnnotationLabelValueResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_assessment import LLMObsAnnotationAssessment + from datadog_api_client.v2.model.llm_obs_label_schema_type import LLMObsLabelSchemaType + from datadog_api_client.v2.model.llm_obs_annotation_label_value_value import LLMObsAnnotationLabelValueValue + return { + "assessment": (LLMObsAnnotationAssessment,), + "label_schema_id": (str,), + "name_when_saved": (str,), + "reasoning": (str,), + "type": (LLMObsLabelSchemaType,), + "value": (LLMObsAnnotationLabelValueValue,), + } + attribute_map = { + "assessment": "assessment", + "label_schema_id": "label_schema_id", + "name_when_saved": "name_when_saved", + "reasoning": "reasoning", + "type": "type", + "value": "value", + } + + def __init__(self_, label_schema_id: str, value: Union[LLMObsAnnotationLabelValueValue, float, str, List[str], bool], assessment: Union[LLMObsAnnotationAssessment, UnsetType]=unset, name_when_saved: Union[str, UnsetType]=unset, reasoning: Union[str, UnsetType]=unset, type: Union[LLMObsLabelSchemaType, UnsetType]=unset, **kwargs): + """ + A single label value entry in an annotation response. + In addition to the submitted fields, the server populates ``type`` and + ``name_when_saved`` to mirror the schema state at the time the annotation + was created — these help clients display values correctly when the schema + has since changed. + + :param assessment: Assessment result for a label value. + :type assessment: LLMObsAnnotationAssessment, optional + + :param label_schema_id: ID of the label schema this value corresponds to. + :type label_schema_id: str + + :param name_when_saved: Name of the label schema at the time the annotation was created. + :type name_when_saved: str, optional + + :param reasoning: Free text reasoning for this label value. + :type reasoning: str, optional + + :param type: Type of a label in an annotation queue label schema. + :type type: LLMObsLabelSchemaType, optional + + :param value: The value for this label. Must comply with the label schema type constraints. + :type value: LLMObsAnnotationLabelValueValue + """ + if assessment is not unset: + kwargs["assessment"] = assessment + if name_when_saved is not unset: + kwargs["name_when_saved"] = name_when_saved + if reasoning is not unset: + kwargs["reasoning"] = reasoning + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.label_schema_id = label_schema_id + self_.value = value diff --git a/datadog_api_client/v2/model/llm_obs_annotation_label_value_value.py b/datadog_api_client/v2/model/llm_obs_annotation_label_value_value.py new file mode 100644 index 0000000000..56bca2ad66 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_label_value_value.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsAnnotationLabelValueValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The value for this label. Must comply with the label schema type constraints. + """ + 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 + return { + "oneOf": [ + float, + str, + [str], + bool, + ], + } diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_data_attributes_request.py new file mode 100644 index 0000000000..5ecc2daf14 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_data_attributes_request.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + +class LLMObsAnnotationQueueDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + return { + "annotation_schema": (LLMObsAnnotationSchema,), + "description": (str,), + "name": (str,), + "project_id": (str,), + } + attribute_map = { + "annotation_schema": "annotation_schema", + "description": "description", + "name": "name", + "project_id": "project_id", + } + + def __init__(self_, name: str, project_id: str, annotation_schema: Union[LLMObsAnnotationSchema, UnsetType]=unset, description: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating an LLM Observability annotation queue. + + :param annotation_schema: Schema defining the labels for an annotation queue. + :type annotation_schema: LLMObsAnnotationSchema, optional + + :param description: Description of the annotation queue. + :type description: str, optional + + :param name: Name of the annotation queue. + :type name: str + + :param project_id: Identifier of the project this queue belongs to. + :type project_id: str + """ + if annotation_schema is not unset: + kwargs["annotation_schema"] = annotation_schema + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.name = name + self_.project_id = project_id diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_data_attributes_response.py new file mode 100644 index 0000000000..c4fc0d803b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_data_attributes_response.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + +class LLMObsAnnotationQueueDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + return { + "annotation_schema": (LLMObsAnnotationSchema,), + "created_at": (datetime,), + "created_by": (str,), + "description": (str,), + "modified_at": (datetime,), + "modified_by": (str,), + "name": (str,), + "owned_by": (str,), + "project_id": (str,), + } + attribute_map = { + "annotation_schema": "annotation_schema", + "created_at": "created_at", + "created_by": "created_by", + "description": "description", + "modified_at": "modified_at", + "modified_by": "modified_by", + "name": "name", + "owned_by": "owned_by", + "project_id": "project_id", + } + + def __init__(self_, created_at: datetime, created_by: str, description: str, modified_at: datetime, modified_by: str, name: str, owned_by: str, project_id: str, annotation_schema: Union[LLMObsAnnotationSchema, UnsetType]=unset, **kwargs): + """ + Attributes of an LLM Observability annotation queue. + + :param annotation_schema: Schema defining the labels for an annotation queue. + :type annotation_schema: LLMObsAnnotationSchema, optional + + :param created_at: Timestamp when the queue was created. + :type created_at: datetime + + :param created_by: Identifier of the user who created the queue. + :type created_by: str + + :param description: Description of the annotation queue. + :type description: str + + :param modified_at: Timestamp when the queue was last modified. + :type modified_at: datetime + + :param modified_by: Identifier of the user who last modified the queue. + :type modified_by: str + + :param name: Name of the annotation queue. + :type name: str + + :param owned_by: Identifier of the user who owns the queue. + :type owned_by: str + + :param project_id: Identifier of the project this queue belongs to. + :type project_id: str + """ + if annotation_schema is not unset: + kwargs["annotation_schema"] = annotation_schema + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.description = description + self_.modified_at = modified_at + self_.modified_by = modified_by + self_.name = name + self_.owned_by = owned_by + self_.project_id = project_id diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_data_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_data_request.py new file mode 100644 index 0000000000..49e9d12a27 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_attributes_request import LLMObsAnnotationQueueDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + +class LLMObsAnnotationQueueDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_attributes_request import LLMObsAnnotationQueueDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + return { + "attributes": (LLMObsAnnotationQueueDataAttributesRequest,), + "type": (LLMObsAnnotationQueueType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotationQueueDataAttributesRequest, type: LLMObsAnnotationQueueType, **kwargs): + """ + Data object for creating an LLM Observability annotation queue. + + :param attributes: Attributes for creating an LLM Observability annotation queue. + :type attributes: LLMObsAnnotationQueueDataAttributesRequest + + :param type: Resource type of an LLM Observability annotation queue. + :type type: LLMObsAnnotationQueueType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_data_response.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_data_response.py new file mode 100644 index 0000000000..4b5357c324 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_attributes_response import LLMObsAnnotationQueueDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + +class LLMObsAnnotationQueueDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_attributes_response import LLMObsAnnotationQueueDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + return { + "attributes": (LLMObsAnnotationQueueDataAttributesResponse,), + "id": (str,), + "type": (LLMObsAnnotationQueueType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotationQueueDataAttributesResponse, id: str, type: LLMObsAnnotationQueueType, **kwargs): + """ + Data object for an LLM Observability annotation queue. + + :param attributes: Attributes of an LLM Observability annotation queue. + :type attributes: LLMObsAnnotationQueueDataAttributesResponse + + :param id: Unique identifier of the annotation queue. + :type id: str + + :param type: Resource type of an LLM Observability annotation queue. + :type type: LLMObsAnnotationQueueType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_interaction_item.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_interaction_item.py new file mode 100644 index 0000000000..a1cb37ab70 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_interaction_item.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsAnnotationQueueInteractionItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A single interaction to add to an annotation queue. + + :param content_id: Upstream entity identifier (trace, experiment trace, or session ID). + :type content_id: str + + :param type: Type of an upstream-entity interaction. + :type type: LLMObsTraceInteractionType + + :param display_block: List of content blocks that make up a `display_block` interaction. + Must contain at least one block. + :type display_block: [LLMObsContentBlock] + """ + 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.llm_obs_trace_interaction_item import LLMObsTraceInteractionItem + from datadog_api_client.v2.model.llm_obs_display_block_interaction_item import LLMObsDisplayBlockInteractionItem + return { + "oneOf": [ + LLMObsTraceInteractionItem, + LLMObsDisplayBlockInteractionItem, + ], + } diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_interaction_response_item.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_interaction_response_item.py new file mode 100644 index 0000000000..ee4d9f1601 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_interaction_response_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsAnnotationQueueInteractionResponseItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A single interaction result. + + :param already_existed: Whether this interaction already existed in the queue. + :type already_existed: bool + + :param content_id: Upstream entity identifier supplied by the caller. + :type content_id: str + + :param created_at: Timestamp when the interaction was added to the queue. + :type created_at: datetime + + :param id: Unique identifier of the interaction. + :type id: str + + :param modified_at: Timestamp when the interaction was last updated. + :type modified_at: datetime + + :param type: Type of an upstream-entity interaction. + :type type: LLMObsTraceInteractionType + + :param display_block: List of content blocks that make up a `display_block` interaction. + Must contain at least one block. + :type display_block: [LLMObsContentBlock] + """ + 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.llm_obs_trace_interaction_response_item import LLMObsTraceInteractionResponseItem + from datadog_api_client.v2.model.llm_obs_display_block_interaction_response_item import LLMObsDisplayBlockInteractionResponseItem + return { + "oneOf": [ + LLMObsTraceInteractionResponseItem, + LLMObsDisplayBlockInteractionResponseItem, + ], + } diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_attributes_request.py new file mode 100644 index 0000000000..fb28bff962 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_attributes_request.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_interaction_item import LLMObsAnnotationQueueInteractionItem + from datadog_api_client.v2.model.llm_obs_trace_interaction_item import LLMObsTraceInteractionItem + from datadog_api_client.v2.model.llm_obs_display_block_interaction_item import LLMObsDisplayBlockInteractionItem + +class LLMObsAnnotationQueueInteractionsDataAttributesRequest(ModelNormal): + validations = { + "interactions": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_interaction_item import LLMObsAnnotationQueueInteractionItem + return { + "interactions": ([LLMObsAnnotationQueueInteractionItem],), + } + attribute_map = { + "interactions": "interactions", + } + + def __init__(self_, interactions: List[Union[LLMObsAnnotationQueueInteractionItem, LLMObsTraceInteractionItem, LLMObsDisplayBlockInteractionItem]], **kwargs): + """ + Attributes for adding interactions to an annotation queue. + + :param interactions: List of interactions to add to the queue. Must contain at least one item. + :type interactions: [LLMObsAnnotationQueueInteractionItem] + """ + super().__init__(kwargs) + + + self_.interactions = interactions diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_attributes_response.py new file mode 100644 index 0000000000..0972252588 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_attributes_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_interaction_response_item import LLMObsAnnotationQueueInteractionResponseItem + from datadog_api_client.v2.model.llm_obs_trace_interaction_response_item import LLMObsTraceInteractionResponseItem + from datadog_api_client.v2.model.llm_obs_display_block_interaction_response_item import LLMObsDisplayBlockInteractionResponseItem + +class LLMObsAnnotationQueueInteractionsDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_interaction_response_item import LLMObsAnnotationQueueInteractionResponseItem + return { + "interactions": ([LLMObsAnnotationQueueInteractionResponseItem],), + } + attribute_map = { + "interactions": "interactions", + } + + def __init__(self_, interactions: List[Union[LLMObsAnnotationQueueInteractionResponseItem, LLMObsTraceInteractionResponseItem, LLMObsDisplayBlockInteractionResponseItem]], **kwargs): + """ + Attributes of the interaction addition response. + + :param interactions: List of interactions that were processed. + :type interactions: [LLMObsAnnotationQueueInteractionResponseItem] + """ + super().__init__(kwargs) + + + self_.interactions = interactions diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_request.py new file mode 100644 index 0000000000..b0cf8a87bb --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_attributes_request import LLMObsAnnotationQueueInteractionsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_type import LLMObsAnnotationQueueInteractionsType + from datadog_api_client.v2.model.llm_obs_trace_interaction_item import LLMObsTraceInteractionItem + from datadog_api_client.v2.model.llm_obs_display_block_interaction_item import LLMObsDisplayBlockInteractionItem + +class LLMObsAnnotationQueueInteractionsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_attributes_request import LLMObsAnnotationQueueInteractionsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_type import LLMObsAnnotationQueueInteractionsType + return { + "attributes": (LLMObsAnnotationQueueInteractionsDataAttributesRequest,), + "type": (LLMObsAnnotationQueueInteractionsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotationQueueInteractionsDataAttributesRequest, type: LLMObsAnnotationQueueInteractionsType, **kwargs): + """ + Data object for adding interactions to an annotation queue. + + :param attributes: Attributes for adding interactions to an annotation queue. + :type attributes: LLMObsAnnotationQueueInteractionsDataAttributesRequest + + :param type: Resource type for annotation queue interactions. + :type type: LLMObsAnnotationQueueInteractionsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_response.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_response.py new file mode 100644 index 0000000000..a2247e7e01 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_data_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_attributes_response import LLMObsAnnotationQueueInteractionsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_type import LLMObsAnnotationQueueInteractionsType + from datadog_api_client.v2.model.llm_obs_trace_interaction_response_item import LLMObsTraceInteractionResponseItem + from datadog_api_client.v2.model.llm_obs_display_block_interaction_response_item import LLMObsDisplayBlockInteractionResponseItem + +class LLMObsAnnotationQueueInteractionsDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_attributes_response import LLMObsAnnotationQueueInteractionsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_type import LLMObsAnnotationQueueInteractionsType + return { + "attributes": (LLMObsAnnotationQueueInteractionsDataAttributesResponse,), + "id": (str,), + "type": (LLMObsAnnotationQueueInteractionsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotationQueueInteractionsDataAttributesResponse, id: str, type: LLMObsAnnotationQueueInteractionsType, **kwargs): + """ + Data object for the interaction addition response. + + :param attributes: Attributes of the interaction addition response. + :type attributes: LLMObsAnnotationQueueInteractionsDataAttributesResponse + + :param id: The queue ID the interactions were added to. + :type id: str + + :param type: Resource type for annotation queue interactions. + :type type: LLMObsAnnotationQueueInteractionsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_request.py new file mode 100644 index 0000000000..ebf118888a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_request import LLMObsAnnotationQueueInteractionsDataRequest + from datadog_api_client.v2.model.llm_obs_trace_interaction_item import LLMObsTraceInteractionItem + from datadog_api_client.v2.model.llm_obs_display_block_interaction_item import LLMObsDisplayBlockInteractionItem + +class LLMObsAnnotationQueueInteractionsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_request import LLMObsAnnotationQueueInteractionsDataRequest + return { + "data": (LLMObsAnnotationQueueInteractionsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotationQueueInteractionsDataRequest, **kwargs): + """ + Request to add interactions to an LLM Observability annotation queue. + + :param data: Data object for adding interactions to an annotation queue. + :type data: LLMObsAnnotationQueueInteractionsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_response.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_response.py new file mode 100644 index 0000000000..5f15a51ef7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_response import LLMObsAnnotationQueueInteractionsDataResponse + from datadog_api_client.v2.model.llm_obs_trace_interaction_response_item import LLMObsTraceInteractionResponseItem + from datadog_api_client.v2.model.llm_obs_display_block_interaction_response_item import LLMObsDisplayBlockInteractionResponseItem + +class LLMObsAnnotationQueueInteractionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_response import LLMObsAnnotationQueueInteractionsDataResponse + return { + "data": (LLMObsAnnotationQueueInteractionsDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotationQueueInteractionsDataResponse, **kwargs): + """ + Response containing the result of adding interactions to an annotation queue. + + :param data: Data object for the interaction addition response. + :type data: LLMObsAnnotationQueueInteractionsDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_type.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_type.py new file mode 100644 index 0000000000..19658c8260 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_interactions_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsAnnotationQueueInteractionsType(ModelSimple): + """ + Resource type for annotation queue interactions. + + :param value: If omitted defaults to "interactions". Must be one of ["interactions"]. + :type value: str + """ + + allowed_values = { + "interactions", + } + INTERACTIONS: ClassVar["LLMObsAnnotationQueueInteractionsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsAnnotationQueueInteractionsType.INTERACTIONS = LLMObsAnnotationQueueInteractionsType("interactions") diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_attributes.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_attributes.py new file mode 100644 index 0000000000..a2b1e92aca --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + +class LLMObsAnnotationQueueLabelSchemaAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + return { + "annotation_schema": (LLMObsAnnotationSchema,), + } + attribute_map = { + "annotation_schema": "annotation_schema", + } + + def __init__(self_, annotation_schema: LLMObsAnnotationSchema, **kwargs): + """ + Attributes of an annotation queue label schema. + + :param annotation_schema: Schema defining the labels for an annotation queue. + :type annotation_schema: LLMObsAnnotationSchema + """ + super().__init__(kwargs) + + + self_.annotation_schema = annotation_schema diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_data.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_data.py new file mode 100644 index 0000000000..4912622272 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_attributes import LLMObsAnnotationQueueLabelSchemaAttributes + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + +class LLMObsAnnotationQueueLabelSchemaData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_attributes import LLMObsAnnotationQueueLabelSchemaAttributes + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + return { + "attributes": (LLMObsAnnotationQueueLabelSchemaAttributes,), + "id": (str,), + "type": (LLMObsAnnotationQueueType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotationQueueLabelSchemaAttributes, id: str, type: LLMObsAnnotationQueueType, **kwargs): + """ + Data object for an annotation queue label schema. + + :param attributes: Attributes of an annotation queue label schema. + :type attributes: LLMObsAnnotationQueueLabelSchemaAttributes + + :param id: Unique identifier of the annotation queue. + :type id: str + + :param type: Resource type of an LLM Observability annotation queue. + :type type: LLMObsAnnotationQueueType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_response.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_response.py new file mode 100644 index 0000000000..36bacd3255 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_data import LLMObsAnnotationQueueLabelSchemaData + +class LLMObsAnnotationQueueLabelSchemaResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_data import LLMObsAnnotationQueueLabelSchemaData + return { + "data": (LLMObsAnnotationQueueLabelSchemaData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotationQueueLabelSchemaData, **kwargs): + """ + Response containing the label schema of an annotation queue. + + :param data: Data object for an annotation queue label schema. + :type data: LLMObsAnnotationQueueLabelSchemaData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_update_attributes.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_update_attributes.py new file mode 100644 index 0000000000..af25b6da50 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_update_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + +class LLMObsAnnotationQueueLabelSchemaUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + return { + "annotation_schema": (LLMObsAnnotationSchema,), + } + attribute_map = { + "annotation_schema": "annotation_schema", + } + + def __init__(self_, annotation_schema: LLMObsAnnotationSchema, **kwargs): + """ + Attributes for updating an annotation queue label schema. + + :param annotation_schema: Schema defining the labels for an annotation queue. + :type annotation_schema: LLMObsAnnotationSchema + """ + super().__init__(kwargs) + + + self_.annotation_schema = annotation_schema diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_update_data.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_update_data.py new file mode 100644 index 0000000000..f6cd3d8c3f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_update_attributes import LLMObsAnnotationQueueLabelSchemaUpdateAttributes + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + +class LLMObsAnnotationQueueLabelSchemaUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_update_attributes import LLMObsAnnotationQueueLabelSchemaUpdateAttributes + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + return { + "attributes": (LLMObsAnnotationQueueLabelSchemaUpdateAttributes,), + "type": (LLMObsAnnotationQueueType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotationQueueLabelSchemaUpdateAttributes, type: LLMObsAnnotationQueueType, **kwargs): + """ + Data object for updating an annotation queue label schema. + + :param attributes: Attributes for updating an annotation queue label schema. + :type attributes: LLMObsAnnotationQueueLabelSchemaUpdateAttributes + + :param type: Resource type of an LLM Observability annotation queue. + :type type: LLMObsAnnotationQueueType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_update_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_update_request.py new file mode 100644 index 0000000000..bd939b1b58 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_label_schema_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_update_data import LLMObsAnnotationQueueLabelSchemaUpdateData + +class LLMObsAnnotationQueueLabelSchemaUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_update_data import LLMObsAnnotationQueueLabelSchemaUpdateData + return { + "data": (LLMObsAnnotationQueueLabelSchemaUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotationQueueLabelSchemaUpdateData, **kwargs): + """ + Request to update the label schema of an annotation queue. + + :param data: Data object for updating an annotation queue label schema. + :type data: LLMObsAnnotationQueueLabelSchemaUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_request.py new file mode 100644 index 0000000000..933ff7cddc --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_request import LLMObsAnnotationQueueDataRequest + +class LLMObsAnnotationQueueRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_request import LLMObsAnnotationQueueDataRequest + return { + "data": (LLMObsAnnotationQueueDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotationQueueDataRequest, **kwargs): + """ + Request to create an LLM Observability annotation queue. + + :param data: Data object for creating an LLM Observability annotation queue. + :type data: LLMObsAnnotationQueueDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_response.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_response.py new file mode 100644 index 0000000000..f91f4a6ef6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_response import LLMObsAnnotationQueueDataResponse + +class LLMObsAnnotationQueueResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_response import LLMObsAnnotationQueueDataResponse + return { + "data": (LLMObsAnnotationQueueDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotationQueueDataResponse, **kwargs): + """ + Response containing a single LLM Observability annotation queue. + + :param data: Data object for an LLM Observability annotation queue. + :type data: LLMObsAnnotationQueueDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_type.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_type.py new file mode 100644 index 0000000000..65c5cc1e3f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsAnnotationQueueType(ModelSimple): + """ + Resource type of an LLM Observability annotation queue. + + :param value: If omitted defaults to "queues". Must be one of ["queues"]. + :type value: str + """ + + allowed_values = { + "queues", + } + QUEUES: ClassVar["LLMObsAnnotationQueueType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsAnnotationQueueType.QUEUES = LLMObsAnnotationQueueType("queues") diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_update_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_update_data_attributes_request.py new file mode 100644 index 0000000000..e26840a23d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_update_data_attributes_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + +class LLMObsAnnotationQueueUpdateDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema + return { + "annotation_schema": (LLMObsAnnotationSchema,), + "description": (str,), + "name": (str,), + } + attribute_map = { + "annotation_schema": "annotation_schema", + "description": "description", + "name": "name", + } + + def __init__(self_, annotation_schema: Union[LLMObsAnnotationSchema, UnsetType]=unset, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating an LLM Observability annotation queue. All fields are optional. + + :param annotation_schema: Schema defining the labels for an annotation queue. + :type annotation_schema: LLMObsAnnotationSchema, optional + + :param description: Updated description of the annotation queue. + :type description: str, optional + + :param name: Updated name of the annotation queue. + :type name: str, optional + """ + if annotation_schema is not unset: + kwargs["annotation_schema"] = annotation_schema + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_update_data_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_update_data_request.py new file mode 100644 index 0000000000..3dd6a8640d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_update_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_update_data_attributes_request import LLMObsAnnotationQueueUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + +class LLMObsAnnotationQueueUpdateDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_update_data_attributes_request import LLMObsAnnotationQueueUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType + return { + "attributes": (LLMObsAnnotationQueueUpdateDataAttributesRequest,), + "type": (LLMObsAnnotationQueueType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotationQueueUpdateDataAttributesRequest, type: LLMObsAnnotationQueueType, **kwargs): + """ + Data object for updating an LLM Observability annotation queue. + + :param attributes: Attributes for updating an LLM Observability annotation queue. All fields are optional. + :type attributes: LLMObsAnnotationQueueUpdateDataAttributesRequest + + :param type: Resource type of an LLM Observability annotation queue. + :type type: LLMObsAnnotationQueueType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queue_update_request.py b/datadog_api_client/v2/model/llm_obs_annotation_queue_update_request.py new file mode 100644 index 0000000000..4f0c23e500 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queue_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_update_data_request import LLMObsAnnotationQueueUpdateDataRequest + +class LLMObsAnnotationQueueUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_update_data_request import LLMObsAnnotationQueueUpdateDataRequest + return { + "data": (LLMObsAnnotationQueueUpdateDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotationQueueUpdateDataRequest, **kwargs): + """ + Request to update an LLM Observability annotation queue. + + :param data: Data object for updating an LLM Observability annotation queue. + :type data: LLMObsAnnotationQueueUpdateDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotation_queues_response.py b/datadog_api_client/v2/model/llm_obs_annotation_queues_response.py new file mode 100644 index 0000000000..77bdfc5340 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_queues_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_response import LLMObsAnnotationQueueDataResponse + +class LLMObsAnnotationQueuesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_queue_data_response import LLMObsAnnotationQueueDataResponse + return { + "data": ([LLMObsAnnotationQueueDataResponse],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[LLMObsAnnotationQueueDataResponse], **kwargs): + """ + Response containing a list of LLM Observability annotation queues. + + :param data: List of annotation queues. + :type data: [LLMObsAnnotationQueueDataResponse] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotation_schema.py b/datadog_api_client/v2/model/llm_obs_annotation_schema.py new file mode 100644 index 0000000000..680eef7d94 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotation_schema.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_label_schema import LLMObsLabelSchema + +class LLMObsAnnotationSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_label_schema import LLMObsLabelSchema + return { + "label_schemas": ([LLMObsLabelSchema],), + } + attribute_map = { + "label_schemas": "label_schemas", + } + + def __init__(self_, label_schemas: List[LLMObsLabelSchema], **kwargs): + """ + Schema defining the labels for an annotation queue. + + :param label_schemas: List of label schema definitions. + :type label_schemas: [LLMObsLabelSchema] + """ + super().__init__(kwargs) + + + self_.label_schemas = label_schemas diff --git a/datadog_api_client/v2/model/llm_obs_annotations_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_annotations_data_attributes_request.py new file mode 100644 index 0000000000..b3fcd0a790 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotations_data_attributes_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_upsert_annotation_item import LLMObsUpsertAnnotationItem + +class LLMObsAnnotationsDataAttributesRequest(ModelNormal): + validations = { + "annotations": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_upsert_annotation_item import LLMObsUpsertAnnotationItem + return { + "annotations": ([LLMObsUpsertAnnotationItem],), + } + attribute_map = { + "annotations": "annotations", + } + + def __init__(self_, annotations: List[LLMObsUpsertAnnotationItem], **kwargs): + """ + Attributes for creating or updating annotations. + + :param annotations: List of annotations to create or update. Must contain at least one item. + :type annotations: [LLMObsUpsertAnnotationItem] + """ + super().__init__(kwargs) + + + self_.annotations = annotations diff --git a/datadog_api_client/v2/model/llm_obs_annotations_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_annotations_data_attributes_response.py new file mode 100644 index 0000000000..f3261ae5d8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotations_data_attributes_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_item_response import LLMObsAnnotationItemResponse + from datadog_api_client.v2.model.llm_obs_annotation_error import LLMObsAnnotationError + +class LLMObsAnnotationsDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_item_response import LLMObsAnnotationItemResponse + from datadog_api_client.v2.model.llm_obs_annotation_error import LLMObsAnnotationError + return { + "annotations": ([LLMObsAnnotationItemResponse],), + "errors": ([LLMObsAnnotationError],), + } + attribute_map = { + "annotations": "annotations", + "errors": "errors", + } + + def __init__(self_, annotations: List[LLMObsAnnotationItemResponse], errors: Union[List[LLMObsAnnotationError], UnsetType]=unset, **kwargs): + """ + Attributes of the annotations response. + + :param annotations: Successfully created or updated annotations. + :type annotations: [LLMObsAnnotationItemResponse] + + :param errors: Partial errors for annotations that could not be processed. + :type errors: [LLMObsAnnotationError], optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + + self_.annotations = annotations diff --git a/datadog_api_client/v2/model/llm_obs_annotations_data_request.py b/datadog_api_client/v2/model/llm_obs_annotations_data_request.py new file mode 100644 index 0000000000..0f285fca21 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotations_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotations_data_attributes_request import LLMObsAnnotationsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotations_type import LLMObsAnnotationsType + +class LLMObsAnnotationsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotations_data_attributes_request import LLMObsAnnotationsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotations_type import LLMObsAnnotationsType + return { + "attributes": (LLMObsAnnotationsDataAttributesRequest,), + "type": (LLMObsAnnotationsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotationsDataAttributesRequest, type: LLMObsAnnotationsType, **kwargs): + """ + Data object for creating or updating annotations. + + :param attributes: Attributes for creating or updating annotations. + :type attributes: LLMObsAnnotationsDataAttributesRequest + + :param type: Resource type for LLM Observability annotations. + :type type: LLMObsAnnotationsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotations_data_response.py b/datadog_api_client/v2/model/llm_obs_annotations_data_response.py new file mode 100644 index 0000000000..893919eae3 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotations_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotations_data_attributes_response import LLMObsAnnotationsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotations_type import LLMObsAnnotationsType + +class LLMObsAnnotationsDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotations_data_attributes_response import LLMObsAnnotationsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotations_type import LLMObsAnnotationsType + return { + "attributes": (LLMObsAnnotationsDataAttributesResponse,), + "id": (str,), + "type": (LLMObsAnnotationsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsAnnotationsDataAttributesResponse, id: str, type: LLMObsAnnotationsType, **kwargs): + """ + Data object for the annotations response. + + :param attributes: Attributes of the annotations response. + :type attributes: LLMObsAnnotationsDataAttributesResponse + + :param id: The annotation queue ID. + :type id: str + + :param type: Resource type for LLM Observability annotations. + :type type: LLMObsAnnotationsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_annotations_request.py b/datadog_api_client/v2/model/llm_obs_annotations_request.py new file mode 100644 index 0000000000..913b27a1b4 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotations_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotations_data_request import LLMObsAnnotationsDataRequest + +class LLMObsAnnotationsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotations_data_request import LLMObsAnnotationsDataRequest + return { + "data": (LLMObsAnnotationsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotationsDataRequest, **kwargs): + """ + Request to create or update annotations on interactions in an annotation queue. + + :param data: Data object for creating or updating annotations. + :type data: LLMObsAnnotationsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotations_response.py b/datadog_api_client/v2/model/llm_obs_annotations_response.py new file mode 100644 index 0000000000..c4e70dfa54 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotations_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotations_data_response import LLMObsAnnotationsDataResponse + +class LLMObsAnnotationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotations_data_response import LLMObsAnnotationsDataResponse + return { + "data": (LLMObsAnnotationsDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsAnnotationsDataResponse, **kwargs): + """ + Response containing the created or updated annotations. + + :param data: Data object for the annotations response. + :type data: LLMObsAnnotationsDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_annotations_type.py b/datadog_api_client/v2/model/llm_obs_annotations_type.py new file mode 100644 index 0000000000..fb0610fe3d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_annotations_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsAnnotationsType(ModelSimple): + """ + Resource type for LLM Observability annotations. + + :param value: If omitted defaults to "annotations". Must be one of ["annotations"]. + :type value: str + """ + + allowed_values = { + "annotations", + } + ANNOTATIONS: ClassVar["LLMObsAnnotationsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsAnnotationsType.ANNOTATIONS = LLMObsAnnotationsType("annotations") diff --git a/datadog_api_client/v2/model/llm_obs_anthropic_effort.py b/datadog_api_client/v2/model/llm_obs_anthropic_effort.py new file mode 100644 index 0000000000..f85b0593f2 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_anthropic_effort.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsAnthropicEffort(ModelSimple): + """ + The effort level for Anthropic inference. + + :param value: Must be one of ["low", "medium", "high", "max"]. + :type value: str + """ + + allowed_values = { + "low", + "medium", + "high", + "max", + } + LOW: ClassVar["LLMObsAnthropicEffort"] + MEDIUM: ClassVar["LLMObsAnthropicEffort"] + HIGH: ClassVar["LLMObsAnthropicEffort"] + MAX: ClassVar["LLMObsAnthropicEffort"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsAnthropicEffort.LOW = LLMObsAnthropicEffort("low") +LLMObsAnthropicEffort.MEDIUM = LLMObsAnthropicEffort("medium") +LLMObsAnthropicEffort.HIGH = LLMObsAnthropicEffort("high") +LLMObsAnthropicEffort.MAX = LLMObsAnthropicEffort("max") diff --git a/datadog_api_client/v2/model/llm_obs_anthropic_metadata.py b/datadog_api_client/v2/model/llm_obs_anthropic_metadata.py new file mode 100644 index 0000000000..43ca48da3a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_anthropic_metadata.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_anthropic_effort import LLMObsAnthropicEffort + from datadog_api_client.v2.model.llm_obs_anthropic_thinking_config import LLMObsAnthropicThinkingConfig + +class LLMObsAnthropicMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_anthropic_effort import LLMObsAnthropicEffort + from datadog_api_client.v2.model.llm_obs_anthropic_thinking_config import LLMObsAnthropicThinkingConfig + return { + "effort": (LLMObsAnthropicEffort,), + "thinking": (LLMObsAnthropicThinkingConfig,), + } + attribute_map = { + "effort": "effort", + "thinking": "thinking", + } + + def __init__(self_, effort: Union[LLMObsAnthropicEffort, none_type, UnsetType]=unset, thinking: Union[LLMObsAnthropicThinkingConfig, UnsetType]=unset, **kwargs): + """ + Anthropic-specific metadata for an inference request. + + :param effort: The effort level for Anthropic inference. + :type effort: LLMObsAnthropicEffort, none_type, optional + + :param thinking: Configuration for Anthropic extended thinking feature. + :type thinking: LLMObsAnthropicThinkingConfig, optional + """ + if effort is not unset: + kwargs["effort"] = effort + if thinking is not unset: + kwargs["thinking"] = thinking + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_anthropic_thinking_config.py b/datadog_api_client/v2/model/llm_obs_anthropic_thinking_config.py new file mode 100644 index 0000000000..04db4c0866 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_anthropic_thinking_config.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_anthropic_thinking_type import LLMObsAnthropicThinkingType + +class LLMObsAnthropicThinkingConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_anthropic_thinking_type import LLMObsAnthropicThinkingType + return { + "budget_tokens": (int, none_type), + "type": (LLMObsAnthropicThinkingType,), + } + attribute_map = { + "budget_tokens": "budget_tokens", + "type": "type", + } + + def __init__(self_, type: LLMObsAnthropicThinkingType, budget_tokens: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Configuration for Anthropic extended thinking feature. + + :param budget_tokens: Maximum token budget for extended thinking. Required when type is ``enabled``. + :type budget_tokens: int, none_type, optional + + :param type: The thinking mode for Anthropic extended thinking. + :type type: LLMObsAnthropicThinkingType + """ + if budget_tokens is not unset: + kwargs["budget_tokens"] = budget_tokens + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_anthropic_thinking_type.py b/datadog_api_client/v2/model/llm_obs_anthropic_thinking_type.py new file mode 100644 index 0000000000..8cabdf63c6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_anthropic_thinking_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsAnthropicThinkingType(ModelSimple): + """ + The thinking mode for Anthropic extended thinking. + + :param value: Must be one of ["enabled", "disabled", "adaptive"]. + :type value: str + """ + + allowed_values = { + "enabled", + "disabled", + "adaptive", + } + ENABLED: ClassVar["LLMObsAnthropicThinkingType"] + DISABLED: ClassVar["LLMObsAnthropicThinkingType"] + ADAPTIVE: ClassVar["LLMObsAnthropicThinkingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsAnthropicThinkingType.ENABLED = LLMObsAnthropicThinkingType("enabled") +LLMObsAnthropicThinkingType.DISABLED = LLMObsAnthropicThinkingType("disabled") +LLMObsAnthropicThinkingType.ADAPTIVE = LLMObsAnthropicThinkingType("adaptive") diff --git a/datadog_api_client/v2/model/llm_obs_any_interaction_type.py b/datadog_api_client/v2/model/llm_obs_any_interaction_type.py new file mode 100644 index 0000000000..ad4b2d99d1 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_any_interaction_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsAnyInteractionType(ModelSimple): + """ + Type of an annotated interaction. + + :param value: Must be one of ["trace", "experiment_trace", "session", "display_block"]. + :type value: str + """ + + allowed_values = { + "trace", + "experiment_trace", + "session", + "display_block", + } + TRACE: ClassVar["LLMObsAnyInteractionType"] + EXPERIMENT_TRACE: ClassVar["LLMObsAnyInteractionType"] + SESSION: ClassVar["LLMObsAnyInteractionType"] + DISPLAY_BLOCK: ClassVar["LLMObsAnyInteractionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsAnyInteractionType.TRACE = LLMObsAnyInteractionType("trace") +LLMObsAnyInteractionType.EXPERIMENT_TRACE = LLMObsAnyInteractionType("experiment_trace") +LLMObsAnyInteractionType.SESSION = LLMObsAnyInteractionType("session") +LLMObsAnyInteractionType.DISPLAY_BLOCK = LLMObsAnyInteractionType("display_block") diff --git a/datadog_api_client/v2/model/llm_obs_azure_open_ai_metadata.py b/datadog_api_client/v2/model/llm_obs_azure_open_ai_metadata.py new file mode 100644 index 0000000000..094658277c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_azure_open_ai_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsAzureOpenAIMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deployment_id": (str,), + "model_version": (str,), + "resource_name": (str,), + } + attribute_map = { + "deployment_id": "deployment_id", + "model_version": "model_version", + "resource_name": "resource_name", + } + + def __init__(self_, deployment_id: Union[str, UnsetType]=unset, model_version: Union[str, UnsetType]=unset, resource_name: Union[str, UnsetType]=unset, **kwargs): + """ + Azure OpenAI-specific metadata for an integration account or inference request. + + :param deployment_id: The Azure OpenAI deployment ID. + :type deployment_id: str, optional + + :param model_version: The model version deployed in Azure. + :type model_version: str, optional + + :param resource_name: The Azure OpenAI resource name. + :type resource_name: str, optional + """ + if deployment_id is not unset: + kwargs["deployment_id"] = deployment_id + if model_version is not unset: + kwargs["model_version"] = model_version + if resource_name is not unset: + kwargs["resource_name"] = resource_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_bedrock_metadata.py b/datadog_api_client/v2/model/llm_obs_bedrock_metadata.py new file mode 100644 index 0000000000..51f1ac66c5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_bedrock_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsBedrockMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "region": (str,), + } + attribute_map = { + "region": "region", + } + + def __init__(self_, region: Union[str, UnsetType]=unset, **kwargs): + """ + Amazon Bedrock-specific metadata for an inference request. + + :param region: The AWS region for the Bedrock request. + :type region: str, optional + """ + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_content_block.py b/datadog_api_client/v2/model/llm_obs_content_block.py new file mode 100644 index 0000000000..0d3df4be8b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_content_block.py @@ -0,0 +1,139 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_content_block_llm_obs_trace_interaction_type import LLMObsContentBlockLLMObsTraceInteractionType + from datadog_api_client.v2.model.llm_obs_content_block_header_level import LLMObsContentBlockHeaderLevel + from datadog_api_client.v2.model.llm_obs_content_block_time_frame import LLMObsContentBlockTimeFrame + from datadog_api_client.v2.model.llm_obs_content_block_type import LLMObsContentBlockType + +class LLMObsContentBlock(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_content_block_llm_obs_trace_interaction_type import LLMObsContentBlockLLMObsTraceInteractionType + from datadog_api_client.v2.model.llm_obs_content_block_header_level import LLMObsContentBlockHeaderLevel + from datadog_api_client.v2.model.llm_obs_content_block_time_frame import LLMObsContentBlockTimeFrame + from datadog_api_client.v2.model.llm_obs_content_block_type import LLMObsContentBlockType + return { + "alt": (str,), + "content": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "height": (int,), + "interaction_type": (LLMObsContentBlockLLMObsTraceInteractionType,), + "label": (str,), + "level": (LLMObsContentBlockHeaderLevel,), + "tile_def": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "time_frame": (LLMObsContentBlockTimeFrame,), + "trace_id": (str,), + "type": (LLMObsContentBlockType,), + "url": (str,), + } + attribute_map = { + "alt": "alt", + "content": "content", + "height": "height", + "interaction_type": "interactionType", + "label": "label", + "level": "level", + "tile_def": "tileDef", + "time_frame": "timeFrame", + "trace_id": "traceId", + "type": "type", + "url": "url", + } + + def __init__(self_, type: LLMObsContentBlockType, alt: Union[str, UnsetType]=unset, content: Union[Any, UnsetType]=unset, height: Union[int, UnsetType]=unset, interaction_type: Union[LLMObsContentBlockLLMObsTraceInteractionType, UnsetType]=unset, label: Union[str, UnsetType]=unset, level: Union[LLMObsContentBlockHeaderLevel, UnsetType]=unset, tile_def: Union[Any, UnsetType]=unset, time_frame: Union[LLMObsContentBlockTimeFrame, UnsetType]=unset, trace_id: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + A single content block rendered inside a ``display_block`` interaction. + ``type`` discriminates which other fields are meaningful: + + * ``markdown`` / ``text`` : ``content`` must be a string. + * ``header`` : ``content`` must be a string; ``level`` , when set, must be one of ``sm`` , ``md`` , ``lg`` , ``xl``. + * ``json`` : ``content`` must be a well-formed JSON value (object, array, or scalar). + * ``image`` : ``url`` is required. + * ``widget`` : ``tileDef`` is required (any well-formed JSON; the frontend owns the renderable schema). + * ``llmobs_trace`` : ``traceId`` is required; ``interactionType`` , when set, must be ``trace`` or ``experiment_trace``. + + ``height`` , when set, must be positive. + + :param alt: Alternative text for an ``image`` block. + :type alt: str, optional + + :param content: Block payload. A string for ``markdown`` , ``header`` , and ``text`` ; an + arbitrary JSON value (object, array, or scalar) for ``json``. Omitted + for ``image`` , ``widget`` , and ``llmobs_trace``. + :type content: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param height: Optional rendered height. Must be positive when set. + :type height: int, optional + + :param interaction_type: Upstream interaction type referenced by an ``llmobs_trace`` block. + Restricted to ``trace`` or ``experiment_trace``. + :type interaction_type: LLMObsContentBlockLLMObsTraceInteractionType, optional + + :param label: Optional label rendered alongside the block. + :type label: str, optional + + :param level: Visual size for a ``header`` block. + :type level: LLMObsContentBlockHeaderLevel, optional + + :param tile_def: Tile definition for a ``widget`` block. Required for ``widget``. The + schema is owned by the frontend renderer. + :type tile_def: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param time_frame: Unix-millis time range used by chart blocks. + :type time_frame: LLMObsContentBlockTimeFrame, optional + + :param trace_id: Trace identifier. Required for ``llmobs_trace`` blocks. + :type trace_id: str, optional + + :param type: Discriminator for a single ``display_block`` content block. Adding a + variant requires coordinated changes in the frontend renderer. + :type type: LLMObsContentBlockType + + :param url: URL of the image. Required for ``image`` blocks. + :type url: str, optional + """ + if alt is not unset: + kwargs["alt"] = alt + if content is not unset: + kwargs["content"] = content + if height is not unset: + kwargs["height"] = height + if interaction_type is not unset: + kwargs["interaction_type"] = interaction_type + if label is not unset: + kwargs["label"] = label + if level is not unset: + kwargs["level"] = level + if tile_def is not unset: + kwargs["tile_def"] = tile_def + if time_frame is not unset: + kwargs["time_frame"] = time_frame + if trace_id is not unset: + kwargs["trace_id"] = trace_id + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_content_block_header_level.py b/datadog_api_client/v2/model/llm_obs_content_block_header_level.py new file mode 100644 index 0000000000..cc72e5cad0 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_content_block_header_level.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsContentBlockHeaderLevel(ModelSimple): + """ + Visual size for a `header` block. + + :param value: Must be one of ["sm", "md", "lg", "xl"]. + :type value: str + """ + + allowed_values = { + "sm", + "md", + "lg", + "xl", + } + SM: ClassVar["LLMObsContentBlockHeaderLevel"] + MD: ClassVar["LLMObsContentBlockHeaderLevel"] + LG: ClassVar["LLMObsContentBlockHeaderLevel"] + XL: ClassVar["LLMObsContentBlockHeaderLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsContentBlockHeaderLevel.SM = LLMObsContentBlockHeaderLevel("sm") +LLMObsContentBlockHeaderLevel.MD = LLMObsContentBlockHeaderLevel("md") +LLMObsContentBlockHeaderLevel.LG = LLMObsContentBlockHeaderLevel("lg") +LLMObsContentBlockHeaderLevel.XL = LLMObsContentBlockHeaderLevel("xl") diff --git a/datadog_api_client/v2/model/llm_obs_content_block_llm_obs_trace_interaction_type.py b/datadog_api_client/v2/model/llm_obs_content_block_llm_obs_trace_interaction_type.py new file mode 100644 index 0000000000..21ab6d0653 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_content_block_llm_obs_trace_interaction_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsContentBlockLLMObsTraceInteractionType(ModelSimple): + """ + Upstream interaction type referenced by an `llmobs_trace` block. + Restricted to `trace` or `experiment_trace`. + + :param value: Must be one of ["trace", "experiment_trace"]. + :type value: str + """ + + allowed_values = { + "trace", + "experiment_trace", + } + TRACE: ClassVar["LLMObsContentBlockLLMObsTraceInteractionType"] + EXPERIMENT_TRACE: ClassVar["LLMObsContentBlockLLMObsTraceInteractionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsContentBlockLLMObsTraceInteractionType.TRACE = LLMObsContentBlockLLMObsTraceInteractionType("trace") +LLMObsContentBlockLLMObsTraceInteractionType.EXPERIMENT_TRACE = LLMObsContentBlockLLMObsTraceInteractionType("experiment_trace") diff --git a/datadog_api_client/v2/model/llm_obs_content_block_time_frame.py b/datadog_api_client/v2/model/llm_obs_content_block_time_frame.py new file mode 100644 index 0000000000..4a9183a1c0 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_content_block_time_frame.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsContentBlockTimeFrame(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (int,), + "start": (int,), + } + attribute_map = { + "end": "end", + "start": "start", + } + + def __init__(self_, end: int, start: int, **kwargs): + """ + Unix-millis time range used by chart blocks. + + :param end: End of the range, in Unix milliseconds. + :type end: int + + :param start: Start of the range, in Unix milliseconds. + :type start: int + """ + super().__init__(kwargs) + + + self_.end = end + self_.start = start diff --git a/datadog_api_client/v2/model/llm_obs_content_block_type.py b/datadog_api_client/v2/model/llm_obs_content_block_type.py new file mode 100644 index 0000000000..c444403c80 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_content_block_type.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsContentBlockType(ModelSimple): + """ + Discriminator for a single `display_block` content block. Adding a + variant requires coordinated changes in the frontend renderer. + + :param value: Must be one of ["markdown", "header", "text", "json", "image", "widget", "llmobs_trace"]. + :type value: str + """ + + allowed_values = { + "markdown", + "header", + "text", + "json", + "image", + "widget", + "llmobs_trace", + } + MARKDOWN: ClassVar["LLMObsContentBlockType"] + HEADER: ClassVar["LLMObsContentBlockType"] + TEXT: ClassVar["LLMObsContentBlockType"] + JSON: ClassVar["LLMObsContentBlockType"] + IMAGE: ClassVar["LLMObsContentBlockType"] + WIDGET: ClassVar["LLMObsContentBlockType"] + LLMOBS_TRACE: ClassVar["LLMObsContentBlockType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsContentBlockType.MARKDOWN = LLMObsContentBlockType("markdown") +LLMObsContentBlockType.HEADER = LLMObsContentBlockType("header") +LLMObsContentBlockType.TEXT = LLMObsContentBlockType("text") +LLMObsContentBlockType.JSON = LLMObsContentBlockType("json") +LLMObsContentBlockType.IMAGE = LLMObsContentBlockType("image") +LLMObsContentBlockType.WIDGET = LLMObsContentBlockType("widget") +LLMObsContentBlockType.LLMOBS_TRACE = LLMObsContentBlockType("llmobs_trace") diff --git a/datadog_api_client/v2/model/llm_obs_create_prompt_data.py b/datadog_api_client/v2/model/llm_obs_create_prompt_data.py new file mode 100644 index 0000000000..d4da82b92c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_create_prompt_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_create_prompt_data_attributes import LLMObsCreatePromptDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsCreatePromptData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_create_prompt_data_attributes import LLMObsCreatePromptDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + return { + "attributes": (LLMObsCreatePromptDataAttributes,), + "type": (LLMObsPromptType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsCreatePromptDataAttributes, type: LLMObsPromptType, **kwargs): + """ + Data object for creating an LLM Observability prompt. + + :param attributes: Attributes for creating an LLM Observability prompt and its first version. ``prompt_id`` and ``template`` are required; all other attributes are optional. + :type attributes: LLMObsCreatePromptDataAttributes + + :param type: Resource type of an LLM Observability prompt. + :type type: LLMObsPromptType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_create_prompt_data_attributes.py b/datadog_api_client/v2/model/llm_obs_create_prompt_data_attributes.py new file mode 100644 index 0000000000..0548cba2e1 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_create_prompt_data_attributes.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_version_label import LLMObsPromptVersionLabel + from datadog_api_client.v2.model.llm_obs_prompt_template import LLMObsPromptTemplate + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsCreatePromptDataAttributes(ModelNormal): + validations = { + "prompt_id": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_version_label import LLMObsPromptVersionLabel + from datadog_api_client.v2.model.llm_obs_prompt_template import LLMObsPromptTemplate + return { + "description": (str,), + "env_ids": ([str],), + "labels": ([LLMObsPromptVersionLabel],), + "prompt_id": (str,), + "template": (LLMObsPromptTemplate,), + "title": (str,), + "user_version": (str,), + } + attribute_map = { + "description": "description", + "env_ids": "env_ids", + "labels": "labels", + "prompt_id": "prompt_id", + "template": "template", + "title": "title", + "user_version": "user_version", + } + + def __init__(self_, prompt_id: str, template: Union[LLMObsPromptTemplate, str, List[LLMObsPromptChatMessage]], description: Union[str, UnsetType]=unset, env_ids: Union[List[str], UnsetType]=unset, labels: Union[List[LLMObsPromptVersionLabel], UnsetType]=unset, title: Union[str, UnsetType]=unset, user_version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating an LLM Observability prompt and its first version. ``prompt_id`` and ``template`` are required; all other attributes are optional. + + :param description: Optional description of the prompt. + :type description: str, optional + + :param env_ids: Optional feature-flag environment UUIDs the service attempts to enable and configure to use the first version as their default after creation. + :type env_ids: [str], optional + + :param labels: Optional labels to attach to the first version. Do not use this attribute for new integrations. **Deprecated**. + :type labels: [LLMObsPromptVersionLabel], optional + + :param prompt_id: Customer-provided identifier for the new prompt. + :type prompt_id: str + + :param template: A text template or a list of chat messages. + :type template: LLMObsPromptTemplate + + :param title: Optional title of the prompt. + :type title: str, optional + + :param user_version: Optional user-supplied version identifier for the first version. + :type user_version: str, optional + """ + if description is not unset: + kwargs["description"] = description + if env_ids is not unset: + kwargs["env_ids"] = env_ids + if labels is not unset: + kwargs["labels"] = labels + if title is not unset: + kwargs["title"] = title + if user_version is not unset: + kwargs["user_version"] = user_version + super().__init__(kwargs) + + + self_.prompt_id = prompt_id + self_.template = template diff --git a/datadog_api_client/v2/model/llm_obs_create_prompt_request.py b/datadog_api_client/v2/model/llm_obs_create_prompt_request.py new file mode 100644 index 0000000000..a4c5b769bb --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_create_prompt_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_create_prompt_data import LLMObsCreatePromptData + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsCreatePromptRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_create_prompt_data import LLMObsCreatePromptData + return { + "data": (LLMObsCreatePromptData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsCreatePromptData, **kwargs): + """ + Request to create an LLM Observability prompt. + + :param data: Data object for creating an LLM Observability prompt. + :type data: LLMObsCreatePromptData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_create_prompt_version_data.py b/datadog_api_client/v2/model/llm_obs_create_prompt_version_data.py new file mode 100644 index 0000000000..5a0be1aabb --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_create_prompt_version_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_create_prompt_version_data_attributes import LLMObsCreatePromptVersionDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_version_type import LLMObsPromptVersionType + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsCreatePromptVersionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_create_prompt_version_data_attributes import LLMObsCreatePromptVersionDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_version_type import LLMObsPromptVersionType + return { + "attributes": (LLMObsCreatePromptVersionDataAttributes,), + "type": (LLMObsPromptVersionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsCreatePromptVersionDataAttributes, type: LLMObsPromptVersionType, **kwargs): + """ + Data object for creating an LLM Observability prompt version. + + :param attributes: Attributes for creating a new version of an LLM Observability prompt. ``template`` is required; all other attributes are optional. + :type attributes: LLMObsCreatePromptVersionDataAttributes + + :param type: Resource type of an LLM Observability prompt version. + :type type: LLMObsPromptVersionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_create_prompt_version_data_attributes.py b/datadog_api_client/v2/model/llm_obs_create_prompt_version_data_attributes.py new file mode 100644 index 0000000000..5b23e5ff04 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_create_prompt_version_data_attributes.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_version_label import LLMObsPromptVersionLabel + from datadog_api_client.v2.model.llm_obs_prompt_template import LLMObsPromptTemplate + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsCreatePromptVersionDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_version_label import LLMObsPromptVersionLabel + from datadog_api_client.v2.model.llm_obs_prompt_template import LLMObsPromptTemplate + return { + "description": (str,), + "env_ids": ([str],), + "labels": ([LLMObsPromptVersionLabel],), + "template": (LLMObsPromptTemplate,), + "user_version": (str,), + } + attribute_map = { + "description": "description", + "env_ids": "env_ids", + "labels": "labels", + "template": "template", + "user_version": "user_version", + } + + def __init__(self_, template: Union[LLMObsPromptTemplate, str, List[LLMObsPromptChatMessage]], description: Union[str, UnsetType]=unset, env_ids: Union[List[str], UnsetType]=unset, labels: Union[List[LLMObsPromptVersionLabel], UnsetType]=unset, user_version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating a new version of an LLM Observability prompt. ``template`` is required; all other attributes are optional. + + :param description: Optional description of this version. + :type description: str, optional + + :param env_ids: Optional feature-flag environment UUIDs the service attempts to enable and configure to use this version as their default after creation. + :type env_ids: [str], optional + + :param labels: Optional labels to attach to this version. Do not use this attribute for new integrations. **Deprecated**. + :type labels: [LLMObsPromptVersionLabel], optional + + :param template: A text template or a list of chat messages. + :type template: LLMObsPromptTemplate + + :param user_version: Optional user-supplied version identifier for this version. + :type user_version: str, optional + """ + if description is not unset: + kwargs["description"] = description + if env_ids is not unset: + kwargs["env_ids"] = env_ids + if labels is not unset: + kwargs["labels"] = labels + if user_version is not unset: + kwargs["user_version"] = user_version + super().__init__(kwargs) + + + self_.template = template diff --git a/datadog_api_client/v2/model/llm_obs_create_prompt_version_request.py b/datadog_api_client/v2/model/llm_obs_create_prompt_version_request.py new file mode 100644 index 0000000000..74a7044e18 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_create_prompt_version_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_create_prompt_version_data import LLMObsCreatePromptVersionData + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsCreatePromptVersionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_create_prompt_version_data import LLMObsCreatePromptVersionData + return { + "data": (LLMObsCreatePromptVersionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsCreatePromptVersionData, **kwargs): + """ + Request to create a new version of an LLM Observability prompt. + + :param data: Data object for creating an LLM Observability prompt version. + :type data: LLMObsCreatePromptVersionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_cursor_meta.py b/datadog_api_client/v2/model/llm_obs_cursor_meta.py new file mode 100644 index 0000000000..7a825b2247 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_cursor_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsCursorMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str, none_type), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Pagination cursor metadata. + + :param after: Cursor for the next page of results. + :type after: str, none_type, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_assessment_criteria.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_assessment_criteria.py new file mode 100644 index 0000000000..53060ceaf4 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_assessment_criteria.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsCustomEvalConfigAssessmentCriteria(ModelNormal): + @cached_property + def openapi_types(_): + return { + "max_threshold": (float, none_type), + "min_threshold": (float, none_type), + "pass_values": ([str], none_type), + "pass_when": (bool, none_type), + } + attribute_map = { + "max_threshold": "max_threshold", + "min_threshold": "min_threshold", + "pass_values": "pass_values", + "pass_when": "pass_when", + } + + def __init__(self_, max_threshold: Union[float, none_type, UnsetType]=unset, min_threshold: Union[float, none_type, UnsetType]=unset, pass_values: Union[List[str], none_type, UnsetType]=unset, pass_when: Union[bool, none_type, UnsetType]=unset, **kwargs): + """ + Criteria used to assess the pass/fail result of a custom evaluator. + + :param max_threshold: Maximum numeric threshold for a passing result. + :type max_threshold: float, none_type, optional + + :param min_threshold: Minimum numeric threshold for a passing result. + :type min_threshold: float, none_type, optional + + :param pass_values: Specific output values considered as a passing result. + :type pass_values: [str], none_type, optional + + :param pass_when: When true, a boolean output of true is treated as passing. + :type pass_when: bool, none_type, optional + """ + if max_threshold is not unset: + kwargs["max_threshold"] = max_threshold + if min_threshold is not unset: + kwargs["min_threshold"] = min_threshold + if pass_values is not unset: + kwargs["pass_values"] = pass_values + if pass_when is not unset: + kwargs["pass_when"] = pass_when + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_attributes.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_attributes.py new file mode 100644 index 0000000000..36a1e582d8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_attributes.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_user import LLMObsCustomEvalConfigUser + from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_judge_config import LLMObsCustomEvalConfigLLMJudgeConfig + from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_provider import LLMObsCustomEvalConfigLLMProvider + from datadog_api_client.v2.model.llm_obs_custom_eval_config_target import LLMObsCustomEvalConfigTarget + +class LLMObsCustomEvalConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_user import LLMObsCustomEvalConfigUser + from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_judge_config import LLMObsCustomEvalConfigLLMJudgeConfig + from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_provider import LLMObsCustomEvalConfigLLMProvider + from datadog_api_client.v2.model.llm_obs_custom_eval_config_target import LLMObsCustomEvalConfigTarget + return { + "category": (str,), + "created_at": (datetime,), + "created_by": (LLMObsCustomEvalConfigUser,), + "eval_name": (str,), + "last_updated_by": (LLMObsCustomEvalConfigUser,), + "llm_judge_config": (LLMObsCustomEvalConfigLLMJudgeConfig,), + "llm_provider": (LLMObsCustomEvalConfigLLMProvider,), + "target": (LLMObsCustomEvalConfigTarget,), + "updated_at": (datetime,), + } + attribute_map = { + "category": "category", + "created_at": "created_at", + "created_by": "created_by", + "eval_name": "eval_name", + "last_updated_by": "last_updated_by", + "llm_judge_config": "llm_judge_config", + "llm_provider": "llm_provider", + "target": "target", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: datetime, eval_name: str, updated_at: datetime, category: Union[str, UnsetType]=unset, created_by: Union[LLMObsCustomEvalConfigUser, UnsetType]=unset, last_updated_by: Union[LLMObsCustomEvalConfigUser, UnsetType]=unset, llm_judge_config: Union[LLMObsCustomEvalConfigLLMJudgeConfig, UnsetType]=unset, llm_provider: Union[LLMObsCustomEvalConfigLLMProvider, UnsetType]=unset, target: Union[LLMObsCustomEvalConfigTarget, UnsetType]=unset, **kwargs): + """ + Attributes of a custom LLM Observability evaluator configuration. + + :param category: Category of the evaluator. + :type category: str, optional + + :param created_at: Timestamp when the evaluator configuration was created. + :type created_at: datetime + + :param created_by: A Datadog user associated with a custom evaluator configuration. + :type created_by: LLMObsCustomEvalConfigUser, optional + + :param eval_name: Name of the custom evaluator. + :type eval_name: str + + :param last_updated_by: A Datadog user associated with a custom evaluator configuration. + :type last_updated_by: LLMObsCustomEvalConfigUser, optional + + :param llm_judge_config: LLM judge configuration for a custom evaluator. + :type llm_judge_config: LLMObsCustomEvalConfigLLMJudgeConfig, optional + + :param llm_provider: LLM provider configuration for a custom evaluator. + :type llm_provider: LLMObsCustomEvalConfigLLMProvider, optional + + :param target: Target application configuration for a custom evaluator. + :type target: LLMObsCustomEvalConfigTarget, optional + + :param updated_at: Timestamp when the evaluator configuration was last updated. + :type updated_at: datetime + """ + if category is not unset: + kwargs["category"] = category + if created_by is not unset: + kwargs["created_by"] = created_by + if last_updated_by is not unset: + kwargs["last_updated_by"] = last_updated_by + if llm_judge_config is not unset: + kwargs["llm_judge_config"] = llm_judge_config + if llm_provider is not unset: + kwargs["llm_provider"] = llm_provider + if target is not unset: + kwargs["target"] = target + super().__init__(kwargs) + + + self_.created_at = created_at + self_.eval_name = eval_name + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_bedrock_options.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_bedrock_options.py new file mode 100644 index 0000000000..3879c14cbd --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_bedrock_options.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsCustomEvalConfigBedrockOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "inference_profile": (str,), + "region": (str,), + } + attribute_map = { + "inference_profile": "inference_profile", + "region": "region", + } + + def __init__(self_, inference_profile: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, **kwargs): + """ + AWS Bedrock-specific options for LLM provider configuration. + + :param inference_profile: Bedrock inference profile identifier, such as an application inference profile ARN. + :type inference_profile: str, optional + + :param region: AWS region for Bedrock. + :type region: str, optional + """ + if inference_profile is not unset: + kwargs["inference_profile"] = inference_profile + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_data.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_data.py new file mode 100644 index 0000000000..c084659cb1 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_attributes import LLMObsCustomEvalConfigAttributes + from datadog_api_client.v2.model.llm_obs_custom_eval_config_type import LLMObsCustomEvalConfigType + +class LLMObsCustomEvalConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_attributes import LLMObsCustomEvalConfigAttributes + from datadog_api_client.v2.model.llm_obs_custom_eval_config_type import LLMObsCustomEvalConfigType + return { + "attributes": (LLMObsCustomEvalConfigAttributes,), + "id": (str,), + "type": (LLMObsCustomEvalConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsCustomEvalConfigAttributes, id: str, type: LLMObsCustomEvalConfigType, **kwargs): + """ + Data object for a custom LLM Observability evaluator configuration. + + :param attributes: Attributes of a custom LLM Observability evaluator configuration. + :type attributes: LLMObsCustomEvalConfigAttributes + + :param id: Unique name identifier of the evaluator configuration. + :type id: str + + :param type: Type of the custom LLM Observability evaluator configuration resource. + :type type: LLMObsCustomEvalConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_eval_scope.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_eval_scope.py new file mode 100644 index 0000000000..f47e81727a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_eval_scope.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsCustomEvalConfigEvalScope(ModelSimple): + """ + Scope at which to evaluate spans. + + :param value: Must be one of ["span", "trace", "session"]. + :type value: str + """ + + allowed_values = { + "span", + "trace", + "session", + } + SPAN: ClassVar["LLMObsCustomEvalConfigEvalScope"] + TRACE: ClassVar["LLMObsCustomEvalConfigEvalScope"] + SESSION: ClassVar["LLMObsCustomEvalConfigEvalScope"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsCustomEvalConfigEvalScope.SPAN = LLMObsCustomEvalConfigEvalScope("span") +LLMObsCustomEvalConfigEvalScope.TRACE = LLMObsCustomEvalConfigEvalScope("trace") +LLMObsCustomEvalConfigEvalScope.SESSION = LLMObsCustomEvalConfigEvalScope("session") diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_inference_params.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_inference_params.py new file mode 100644 index 0000000000..9b540e357e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_inference_params.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsCustomEvalConfigInferenceParams(ModelNormal): + @cached_property + def openapi_types(_): + return { + "frequency_penalty": (float,), + "max_tokens": (int,), + "presence_penalty": (float,), + "temperature": (float,), + "top_k": (int,), + "top_p": (float,), + } + attribute_map = { + "frequency_penalty": "frequency_penalty", + "max_tokens": "max_tokens", + "presence_penalty": "presence_penalty", + "temperature": "temperature", + "top_k": "top_k", + "top_p": "top_p", + } + + def __init__(self_, frequency_penalty: Union[float, UnsetType]=unset, max_tokens: Union[int, UnsetType]=unset, presence_penalty: Union[float, UnsetType]=unset, temperature: Union[float, UnsetType]=unset, top_k: Union[int, UnsetType]=unset, top_p: Union[float, UnsetType]=unset, **kwargs): + """ + LLM inference parameters for a custom evaluator. + + :param frequency_penalty: Frequency penalty to reduce repetition. + :type frequency_penalty: float, optional + + :param max_tokens: Maximum number of tokens to generate. + :type max_tokens: int, optional + + :param presence_penalty: Presence penalty to reduce repetition. + :type presence_penalty: float, optional + + :param temperature: Sampling temperature for the LLM. + :type temperature: float, optional + + :param top_k: Top-k sampling parameter. + :type top_k: int, optional + + :param top_p: Top-p (nucleus) sampling parameter. + :type top_p: float, optional + """ + if frequency_penalty is not unset: + kwargs["frequency_penalty"] = frequency_penalty + if max_tokens is not unset: + kwargs["max_tokens"] = max_tokens + if presence_penalty is not unset: + kwargs["presence_penalty"] = presence_penalty + if temperature is not unset: + kwargs["temperature"] = temperature + if top_k is not unset: + kwargs["top_k"] = top_k + if top_p is not unset: + kwargs["top_p"] = top_p + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_integration_provider.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_integration_provider.py new file mode 100644 index 0000000000..0dfefda985 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_integration_provider.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsCustomEvalConfigIntegrationProvider(ModelSimple): + """ + Name of the LLM integration provider. + + :param value: Must be one of ["openai", "amazon-bedrock", "anthropic", "azure-openai", "vertex-ai", "llm-proxy"]. + :type value: str + """ + + allowed_values = { + "openai", + "amazon-bedrock", + "anthropic", + "azure-openai", + "vertex-ai", + "llm-proxy", + } + OPENAI: ClassVar["LLMObsCustomEvalConfigIntegrationProvider"] + AMAZON_BEDROCK: ClassVar["LLMObsCustomEvalConfigIntegrationProvider"] + ANTHROPIC: ClassVar["LLMObsCustomEvalConfigIntegrationProvider"] + AZURE_OPENAI: ClassVar["LLMObsCustomEvalConfigIntegrationProvider"] + VERTEX_AI: ClassVar["LLMObsCustomEvalConfigIntegrationProvider"] + LLM_PROXY: ClassVar["LLMObsCustomEvalConfigIntegrationProvider"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsCustomEvalConfigIntegrationProvider.OPENAI = LLMObsCustomEvalConfigIntegrationProvider("openai") +LLMObsCustomEvalConfigIntegrationProvider.AMAZON_BEDROCK = LLMObsCustomEvalConfigIntegrationProvider("amazon-bedrock") +LLMObsCustomEvalConfigIntegrationProvider.ANTHROPIC = LLMObsCustomEvalConfigIntegrationProvider("anthropic") +LLMObsCustomEvalConfigIntegrationProvider.AZURE_OPENAI = LLMObsCustomEvalConfigIntegrationProvider("azure-openai") +LLMObsCustomEvalConfigIntegrationProvider.VERTEX_AI = LLMObsCustomEvalConfigIntegrationProvider("vertex-ai") +LLMObsCustomEvalConfigIntegrationProvider.LLM_PROXY = LLMObsCustomEvalConfigIntegrationProvider("llm-proxy") diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_list_response.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_list_response.py new file mode 100644 index 0000000000..fa2ec69a69 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_data import LLMObsCustomEvalConfigData + +class LLMObsCustomEvalConfigListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_data import LLMObsCustomEvalConfigData + return { + "data": ([LLMObsCustomEvalConfigData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[LLMObsCustomEvalConfigData], **kwargs): + """ + Response containing a list of custom LLM Observability evaluator configurations. + + :param data: List of custom evaluator configuration data objects. + :type data: [LLMObsCustomEvalConfigData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_llm_judge_config.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_llm_judge_config.py new file mode 100644 index 0000000000..aeedf2ae6e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_llm_judge_config.py @@ -0,0 +1,117 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_assessment_criteria import LLMObsCustomEvalConfigAssessmentCriteria + from datadog_api_client.v2.model.llm_obs_custom_eval_config_inference_params import LLMObsCustomEvalConfigInferenceParams + from datadog_api_client.v2.model.llm_obs_custom_eval_config_parsing_type import LLMObsCustomEvalConfigParsingType + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_message import LLMObsCustomEvalConfigPromptMessage + +class LLMObsCustomEvalConfigLLMJudgeConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_assessment_criteria import LLMObsCustomEvalConfigAssessmentCriteria + from datadog_api_client.v2.model.llm_obs_custom_eval_config_inference_params import LLMObsCustomEvalConfigInferenceParams + from datadog_api_client.v2.model.llm_obs_custom_eval_config_parsing_type import LLMObsCustomEvalConfigParsingType + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_message import LLMObsCustomEvalConfigPromptMessage + return { + "assessment_criteria": (LLMObsCustomEvalConfigAssessmentCriteria,), + "context_query": (str, none_type), + "inference_params": (LLMObsCustomEvalConfigInferenceParams,), + "last_used_library_prompt_template_name": (str, none_type), + "modified_library_prompt_template": (bool, none_type), + "output_schema": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "parsing_type": (LLMObsCustomEvalConfigParsingType,), + "prompt_template": ([LLMObsCustomEvalConfigPromptMessage],), + "target_query": (str, none_type), + "user_specified_json_post_processing_function": (str, none_type), + } + attribute_map = { + "assessment_criteria": "assessment_criteria", + "context_query": "context_query", + "inference_params": "inference_params", + "last_used_library_prompt_template_name": "last_used_library_prompt_template_name", + "modified_library_prompt_template": "modified_library_prompt_template", + "output_schema": "output_schema", + "parsing_type": "parsing_type", + "prompt_template": "prompt_template", + "target_query": "target_query", + "user_specified_json_post_processing_function": "user_specified_json_post_processing_function", + } + + def __init__(self_, inference_params: LLMObsCustomEvalConfigInferenceParams, assessment_criteria: Union[LLMObsCustomEvalConfigAssessmentCriteria, UnsetType]=unset, context_query: Union[str, none_type, UnsetType]=unset, last_used_library_prompt_template_name: Union[str, none_type, UnsetType]=unset, modified_library_prompt_template: Union[bool, none_type, UnsetType]=unset, output_schema: Union[Dict[str, Any], none_type, UnsetType]=unset, parsing_type: Union[LLMObsCustomEvalConfigParsingType, UnsetType]=unset, prompt_template: Union[List[LLMObsCustomEvalConfigPromptMessage], UnsetType]=unset, target_query: Union[str, none_type, UnsetType]=unset, user_specified_json_post_processing_function: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + LLM judge configuration for a custom evaluator. + + :param assessment_criteria: Criteria used to assess the pass/fail result of a custom evaluator. + :type assessment_criteria: LLMObsCustomEvalConfigAssessmentCriteria, optional + + :param context_query: Query used to extract additional context for the evaluation. + :type context_query: str, none_type, optional + + :param inference_params: LLM inference parameters for a custom evaluator. + :type inference_params: LLMObsCustomEvalConfigInferenceParams + + :param last_used_library_prompt_template_name: Name of the last library prompt template used. + :type last_used_library_prompt_template_name: str, none_type, optional + + :param modified_library_prompt_template: Whether the library prompt template was modified. + :type modified_library_prompt_template: bool, none_type, optional + + :param output_schema: JSON schema describing the expected output format of the LLM judge. + :type output_schema: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type, optional + + :param parsing_type: Output parsing type for a custom LLM judge evaluator. + :type parsing_type: LLMObsCustomEvalConfigParsingType, optional + + :param prompt_template: List of messages forming the LLM judge prompt template. + :type prompt_template: [LLMObsCustomEvalConfigPromptMessage], optional + + :param target_query: Query used to extract the target value to evaluate. + :type target_query: str, none_type, optional + + :param user_specified_json_post_processing_function: User-provided function applied to post-process the JSON output of the LLM judge. + :type user_specified_json_post_processing_function: str, none_type, optional + """ + if assessment_criteria is not unset: + kwargs["assessment_criteria"] = assessment_criteria + if context_query is not unset: + kwargs["context_query"] = context_query + if last_used_library_prompt_template_name is not unset: + kwargs["last_used_library_prompt_template_name"] = last_used_library_prompt_template_name + if modified_library_prompt_template is not unset: + kwargs["modified_library_prompt_template"] = modified_library_prompt_template + if output_schema is not unset: + kwargs["output_schema"] = output_schema + if parsing_type is not unset: + kwargs["parsing_type"] = parsing_type + if prompt_template is not unset: + kwargs["prompt_template"] = prompt_template + if target_query is not unset: + kwargs["target_query"] = target_query + if user_specified_json_post_processing_function is not unset: + kwargs["user_specified_json_post_processing_function"] = user_specified_json_post_processing_function + super().__init__(kwargs) + + + self_.inference_params = inference_params diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_llm_provider.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_llm_provider.py new file mode 100644 index 0000000000..4803880183 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_llm_provider.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_bedrock_options import LLMObsCustomEvalConfigBedrockOptions + from datadog_api_client.v2.model.llm_obs_custom_eval_config_integration_provider import LLMObsCustomEvalConfigIntegrationProvider + from datadog_api_client.v2.model.llm_obs_custom_eval_config_vertex_ai_options import LLMObsCustomEvalConfigVertexAIOptions + +class LLMObsCustomEvalConfigLLMProvider(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_bedrock_options import LLMObsCustomEvalConfigBedrockOptions + from datadog_api_client.v2.model.llm_obs_custom_eval_config_integration_provider import LLMObsCustomEvalConfigIntegrationProvider + from datadog_api_client.v2.model.llm_obs_custom_eval_config_vertex_ai_options import LLMObsCustomEvalConfigVertexAIOptions + return { + "bedrock": (LLMObsCustomEvalConfigBedrockOptions,), + "integration_account_id": (str,), + "integration_provider": (LLMObsCustomEvalConfigIntegrationProvider,), + "model_name": (str,), + "vertex_ai": (LLMObsCustomEvalConfigVertexAIOptions,), + } + attribute_map = { + "bedrock": "bedrock", + "integration_account_id": "integration_account_id", + "integration_provider": "integration_provider", + "model_name": "model_name", + "vertex_ai": "vertex_ai", + } + + def __init__(self_, bedrock: Union[LLMObsCustomEvalConfigBedrockOptions, UnsetType]=unset, integration_account_id: Union[str, UnsetType]=unset, integration_provider: Union[LLMObsCustomEvalConfigIntegrationProvider, UnsetType]=unset, model_name: Union[str, UnsetType]=unset, vertex_ai: Union[LLMObsCustomEvalConfigVertexAIOptions, UnsetType]=unset, **kwargs): + """ + LLM provider configuration for a custom evaluator. + + :param bedrock: AWS Bedrock-specific options for LLM provider configuration. + :type bedrock: LLMObsCustomEvalConfigBedrockOptions, optional + + :param integration_account_id: Integration account identifier. + :type integration_account_id: str, optional + + :param integration_provider: Name of the LLM integration provider. + :type integration_provider: LLMObsCustomEvalConfigIntegrationProvider, optional + + :param model_name: Name of the LLM model. + :type model_name: str, optional + + :param vertex_ai: Google Vertex AI-specific options for LLM provider configuration. + :type vertex_ai: LLMObsCustomEvalConfigVertexAIOptions, optional + """ + if bedrock is not unset: + kwargs["bedrock"] = bedrock + if integration_account_id is not unset: + kwargs["integration_account_id"] = integration_account_id + if integration_provider is not unset: + kwargs["integration_provider"] = integration_provider + if model_name is not unset: + kwargs["model_name"] = model_name + if vertex_ai is not unset: + kwargs["vertex_ai"] = vertex_ai + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_parsing_type.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_parsing_type.py new file mode 100644 index 0000000000..eb7c76ad83 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_parsing_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsCustomEvalConfigParsingType(ModelSimple): + """ + Output parsing type for a custom LLM judge evaluator. + + :param value: Must be one of ["structured_output", "json", "keyword_search"]. + :type value: str + """ + + allowed_values = { + "structured_output", + "json", + "keyword_search", + } + STRUCTURED_OUTPUT: ClassVar["LLMObsCustomEvalConfigParsingType"] + JSON: ClassVar["LLMObsCustomEvalConfigParsingType"] + KEYWORD_SEARCH: ClassVar["LLMObsCustomEvalConfigParsingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsCustomEvalConfigParsingType.STRUCTURED_OUTPUT = LLMObsCustomEvalConfigParsingType("structured_output") +LLMObsCustomEvalConfigParsingType.JSON = LLMObsCustomEvalConfigParsingType("json") +LLMObsCustomEvalConfigParsingType.KEYWORD_SEARCH = LLMObsCustomEvalConfigParsingType("keyword_search") diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_content.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_content.py new file mode 100644 index 0000000000..02765170f2 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_content.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_content_value import LLMObsCustomEvalConfigPromptContentValue + +class LLMObsCustomEvalConfigPromptContent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_content_value import LLMObsCustomEvalConfigPromptContentValue + return { + "type": (str,), + "value": (LLMObsCustomEvalConfigPromptContentValue,), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: str, value: LLMObsCustomEvalConfigPromptContentValue, **kwargs): + """ + A content block within a prompt message. + + :param type: Content block type. + :type type: str + + :param value: Value of a prompt message content block. + :type value: LLMObsCustomEvalConfigPromptContentValue + """ + super().__init__(kwargs) + + + self_.type = type + self_.value = value diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_content_value.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_content_value.py new file mode 100644 index 0000000000..7181f0f5d2 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_content_value.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_tool_call import LLMObsCustomEvalConfigPromptToolCall + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_tool_result import LLMObsCustomEvalConfigPromptToolResult + +class LLMObsCustomEvalConfigPromptContentValue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_tool_call import LLMObsCustomEvalConfigPromptToolCall + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_tool_result import LLMObsCustomEvalConfigPromptToolResult + return { + "text": (str,), + "tool_call": (LLMObsCustomEvalConfigPromptToolCall,), + "tool_call_result": (LLMObsCustomEvalConfigPromptToolResult,), + } + attribute_map = { + "text": "text", + "tool_call": "tool_call", + "tool_call_result": "tool_call_result", + } + + def __init__(self_, text: Union[str, UnsetType]=unset, tool_call: Union[LLMObsCustomEvalConfigPromptToolCall, UnsetType]=unset, tool_call_result: Union[LLMObsCustomEvalConfigPromptToolResult, UnsetType]=unset, **kwargs): + """ + Value of a prompt message content block. + + :param text: Text content of the message block. + :type text: str, optional + + :param tool_call: A tool call within a prompt message. + :type tool_call: LLMObsCustomEvalConfigPromptToolCall, optional + + :param tool_call_result: A tool call result within a prompt message. + :type tool_call_result: LLMObsCustomEvalConfigPromptToolResult, optional + """ + if text is not unset: + kwargs["text"] = text + if tool_call is not unset: + kwargs["tool_call"] = tool_call + if tool_call_result is not unset: + kwargs["tool_call_result"] = tool_call_result + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_message.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_message.py new file mode 100644 index 0000000000..9c1bbd37a5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_message.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_content import LLMObsCustomEvalConfigPromptContent + +class LLMObsCustomEvalConfigPromptMessage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_content import LLMObsCustomEvalConfigPromptContent + return { + "content": (str,), + "contents": ([LLMObsCustomEvalConfigPromptContent],), + "role": (str,), + } + attribute_map = { + "content": "content", + "contents": "contents", + "role": "role", + } + + def __init__(self_, role: str, content: Union[str, UnsetType]=unset, contents: Union[List[LLMObsCustomEvalConfigPromptContent], UnsetType]=unset, **kwargs): + """ + A message in the prompt template for a custom LLM judge evaluator. + + :param content: Text content of the message. + :type content: str, optional + + :param contents: Multi-part content blocks for the message. + :type contents: [LLMObsCustomEvalConfigPromptContent], optional + + :param role: Role of the message author. + :type role: str + """ + if content is not unset: + kwargs["content"] = content + if contents is not unset: + kwargs["contents"] = contents + super().__init__(kwargs) + + + self_.role = role diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_tool_call.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_tool_call.py new file mode 100644 index 0000000000..539612f72c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_tool_call.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsCustomEvalConfigPromptToolCall(ModelNormal): + @cached_property + def openapi_types(_): + return { + "arguments": (str,), + "id": (str,), + "name": (str,), + "type": (str,), + } + attribute_map = { + "arguments": "arguments", + "id": "id", + "name": "name", + "type": "type", + } + + def __init__(self_, arguments: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A tool call within a prompt message. + + :param arguments: JSON-encoded arguments for the tool call. + :type arguments: str, optional + + :param id: Unique identifier of the tool call. + :type id: str, optional + + :param name: Name of the tool being called. + :type name: str, optional + + :param type: Type of the tool call. + :type type: str, optional + """ + if arguments is not unset: + kwargs["arguments"] = arguments + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_tool_result.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_tool_result.py new file mode 100644 index 0000000000..1a861f9b27 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_prompt_tool_result.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsCustomEvalConfigPromptToolResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "result": (str,), + "tool_id": (str,), + "type": (str,), + } + attribute_map = { + "name": "name", + "result": "result", + "tool_id": "tool_id", + "type": "type", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, result: Union[str, UnsetType]=unset, tool_id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A tool call result within a prompt message. + + :param name: Name of the tool that produced this result. + :type name: str, optional + + :param result: The result returned by the tool. + :type result: str, optional + + :param tool_id: Identifier of the tool call this result corresponds to. + :type tool_id: str, optional + + :param type: Type of the tool result. + :type type: str, optional + """ + if name is not unset: + kwargs["name"] = name + if result is not unset: + kwargs["result"] = result + if tool_id is not unset: + kwargs["tool_id"] = tool_id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_response.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_response.py new file mode 100644 index 0000000000..519e5e1bc3 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_data import LLMObsCustomEvalConfigData + +class LLMObsCustomEvalConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_data import LLMObsCustomEvalConfigData + return { + "data": (LLMObsCustomEvalConfigData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsCustomEvalConfigData, **kwargs): + """ + Response containing a custom LLM Observability evaluator configuration. + + :param data: Data object for a custom LLM Observability evaluator configuration. + :type data: LLMObsCustomEvalConfigData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_target.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_target.py new file mode 100644 index 0000000000..8954fa7f3a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_target.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_eval_scope import LLMObsCustomEvalConfigEvalScope + +class LLMObsCustomEvalConfigTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_eval_scope import LLMObsCustomEvalConfigEvalScope + return { + "application_name": (str,), + "enabled": (bool,), + "eval_scope": (LLMObsCustomEvalConfigEvalScope,), + "experiment_project_ids": ([UUID],), + "filter": (str, none_type), + "root_spans_only": (bool, none_type), + "sampling_percentage": (float, none_type), + } + attribute_map = { + "application_name": "application_name", + "enabled": "enabled", + "eval_scope": "eval_scope", + "experiment_project_ids": "experiment_project_ids", + "filter": "filter", + "root_spans_only": "root_spans_only", + "sampling_percentage": "sampling_percentage", + } + + def __init__(self_, application_name: str, enabled: bool, eval_scope: Union[LLMObsCustomEvalConfigEvalScope, UnsetType]=unset, experiment_project_ids: Union[List[UUID], UnsetType]=unset, filter: Union[str, none_type, UnsetType]=unset, root_spans_only: Union[bool, none_type, UnsetType]=unset, sampling_percentage: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + Target application configuration for a custom evaluator. + + :param application_name: Name of the ML application this evaluator targets. + :type application_name: str + + :param enabled: Whether the evaluator is active for the target application. + :type enabled: bool + + :param eval_scope: Scope at which to evaluate spans. + :type eval_scope: LLMObsCustomEvalConfigEvalScope, optional + + :param experiment_project_ids: Experiment project IDs this evaluator is scoped to. + :type experiment_project_ids: [UUID], optional + + :param filter: Filter expression to select which spans to evaluate. + :type filter: str, none_type, optional + + :param root_spans_only: When true, only root spans are evaluated. + :type root_spans_only: bool, none_type, optional + + :param sampling_percentage: Percentage of traces to evaluate. Must be greater than 0 and at most 100. + :type sampling_percentage: float, none_type, optional + """ + if eval_scope is not unset: + kwargs["eval_scope"] = eval_scope + if experiment_project_ids is not unset: + kwargs["experiment_project_ids"] = experiment_project_ids + if filter is not unset: + kwargs["filter"] = filter + if root_spans_only is not unset: + kwargs["root_spans_only"] = root_spans_only + if sampling_percentage is not unset: + kwargs["sampling_percentage"] = sampling_percentage + super().__init__(kwargs) + + + self_.application_name = application_name + self_.enabled = enabled diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_type.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_type.py new file mode 100644 index 0000000000..826f19896a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsCustomEvalConfigType(ModelSimple): + """ + Type of the custom LLM Observability evaluator configuration resource. + + :param value: If omitted defaults to "evaluator_config". Must be one of ["evaluator_config"]. + :type value: str + """ + + allowed_values = { + "evaluator_config", + } + EVALUATOR_CONFIG: ClassVar["LLMObsCustomEvalConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsCustomEvalConfigType.EVALUATOR_CONFIG = LLMObsCustomEvalConfigType("evaluator_config") diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_update_attributes.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_update_attributes.py new file mode 100644 index 0000000000..3ee9003cd6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_update_attributes.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_judge_config import LLMObsCustomEvalConfigLLMJudgeConfig + from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_provider import LLMObsCustomEvalConfigLLMProvider + from datadog_api_client.v2.model.llm_obs_custom_eval_config_target import LLMObsCustomEvalConfigTarget + +class LLMObsCustomEvalConfigUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_judge_config import LLMObsCustomEvalConfigLLMJudgeConfig + from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_provider import LLMObsCustomEvalConfigLLMProvider + from datadog_api_client.v2.model.llm_obs_custom_eval_config_target import LLMObsCustomEvalConfigTarget + return { + "category": (str,), + "eval_name": (str,), + "llm_judge_config": (LLMObsCustomEvalConfigLLMJudgeConfig,), + "llm_provider": (LLMObsCustomEvalConfigLLMProvider,), + "target": (LLMObsCustomEvalConfigTarget,), + } + attribute_map = { + "category": "category", + "eval_name": "eval_name", + "llm_judge_config": "llm_judge_config", + "llm_provider": "llm_provider", + "target": "target", + } + + def __init__(self_, target: LLMObsCustomEvalConfigTarget, category: Union[str, UnsetType]=unset, eval_name: Union[str, UnsetType]=unset, llm_judge_config: Union[LLMObsCustomEvalConfigLLMJudgeConfig, UnsetType]=unset, llm_provider: Union[LLMObsCustomEvalConfigLLMProvider, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a custom LLM Observability evaluator configuration. + + :param category: Category of the evaluator. + :type category: str, optional + + :param eval_name: Name of the custom evaluator. If provided, must match the eval_name path parameter. + :type eval_name: str, optional + + :param llm_judge_config: LLM judge configuration for a custom evaluator. + :type llm_judge_config: LLMObsCustomEvalConfigLLMJudgeConfig, optional + + :param llm_provider: LLM provider configuration for a custom evaluator. + :type llm_provider: LLMObsCustomEvalConfigLLMProvider, optional + + :param target: Target application configuration for a custom evaluator. + :type target: LLMObsCustomEvalConfigTarget + """ + if category is not unset: + kwargs["category"] = category + if eval_name is not unset: + kwargs["eval_name"] = eval_name + if llm_judge_config is not unset: + kwargs["llm_judge_config"] = llm_judge_config + if llm_provider is not unset: + kwargs["llm_provider"] = llm_provider + super().__init__(kwargs) + + + self_.target = target diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_update_data.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_update_data.py new file mode 100644 index 0000000000..32b36f8142 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_update_attributes import LLMObsCustomEvalConfigUpdateAttributes + from datadog_api_client.v2.model.llm_obs_custom_eval_config_type import LLMObsCustomEvalConfigType + +class LLMObsCustomEvalConfigUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_update_attributes import LLMObsCustomEvalConfigUpdateAttributes + from datadog_api_client.v2.model.llm_obs_custom_eval_config_type import LLMObsCustomEvalConfigType + return { + "attributes": (LLMObsCustomEvalConfigUpdateAttributes,), + "id": (str,), + "type": (LLMObsCustomEvalConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsCustomEvalConfigUpdateAttributes, type: LLMObsCustomEvalConfigType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data object for creating or updating a custom LLM Observability evaluator configuration. + + :param attributes: Attributes for creating or updating a custom LLM Observability evaluator configuration. + :type attributes: LLMObsCustomEvalConfigUpdateAttributes + + :param id: Name of the evaluator. If provided, must match the eval_name path parameter. + :type id: str, optional + + :param type: Type of the custom LLM Observability evaluator configuration resource. + :type type: LLMObsCustomEvalConfigType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_update_request.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_update_request.py new file mode 100644 index 0000000000..ea35b7b68b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_custom_eval_config_update_data import LLMObsCustomEvalConfigUpdateData + +class LLMObsCustomEvalConfigUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_custom_eval_config_update_data import LLMObsCustomEvalConfigUpdateData + return { + "data": (LLMObsCustomEvalConfigUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsCustomEvalConfigUpdateData, **kwargs): + """ + Request to create or update a custom LLM Observability evaluator configuration. + + :param data: Data object for creating or updating a custom LLM Observability evaluator configuration. + :type data: LLMObsCustomEvalConfigUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_user.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_user.py new file mode 100644 index 0000000000..1d94bc7526 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsCustomEvalConfigUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + } + attribute_map = { + "email": "email", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, **kwargs): + """ + A Datadog user associated with a custom evaluator configuration. + + :param email: Email address of the user. + :type email: str, optional + """ + if email is not unset: + kwargs["email"] = email + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_custom_eval_config_vertex_ai_options.py b/datadog_api_client/v2/model/llm_obs_custom_eval_config_vertex_ai_options.py new file mode 100644 index 0000000000..210cfd4fa7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_custom_eval_config_vertex_ai_options.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsCustomEvalConfigVertexAIOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "location": (str,), + "project": (str,), + } + attribute_map = { + "location": "location", + "project": "project", + } + + def __init__(self_, location: Union[str, UnsetType]=unset, project: Union[str, UnsetType]=unset, **kwargs): + """ + Google Vertex AI-specific options for LLM provider configuration. + + :param location: Google Cloud region. + :type location: str, optional + + :param project: Google Cloud project ID. + :type project: str, optional + """ + if location is not unset: + kwargs["location"] = location + if project is not unset: + kwargs["project"] = project + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_data_deletion_request.py b/datadog_api_client/v2/model/llm_obs_data_deletion_request.py new file mode 100644 index 0000000000..8a7bfcb2c1 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_data_deletion_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_data_deletion_request_data import LLMObsDataDeletionRequestData + +class LLMObsDataDeletionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_data_deletion_request_data import LLMObsDataDeletionRequestData + return { + "data": (LLMObsDataDeletionRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDataDeletionRequestData, **kwargs): + """ + Request to delete LLM Observability data. + + :param data: Data object for an LLM Observability data deletion request. + :type data: LLMObsDataDeletionRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_data_deletion_request_attributes.py b/datadog_api_client/v2/model/llm_obs_data_deletion_request_attributes.py new file mode 100644 index 0000000000..8fba156070 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_data_deletion_request_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDataDeletionRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "delay": (int,), + "_from": (int,), + "query": ({str: (str,)},), + "to": (int,), + } + attribute_map = { + "delay": "delay", + "_from": "from", + "query": "query", + "to": "to", + } + + def __init__(self_, _from: int, query: Dict[str, str], to: int, delay: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for an LLM Observability data deletion request. + + :param delay: Optional delay in seconds before the deletion is executed. + :type delay: int, optional + + :param _from: Start of the deletion time range in milliseconds since Unix epoch. + :type _from: int + + :param query: Query filters selecting the data to delete. Must include a ``query`` key with an ``@trace_id`` filter. + :type query: {str: (str,)} + + :param to: End of the deletion time range in milliseconds since Unix epoch. + :type to: int + """ + if delay is not unset: + kwargs["delay"] = delay + super().__init__(kwargs) + + + self_._from = _from + self_.query = query + self_.to = to diff --git a/datadog_api_client/v2/model/llm_obs_data_deletion_request_data.py b/datadog_api_client/v2/model/llm_obs_data_deletion_request_data.py new file mode 100644 index 0000000000..50e58c4feb --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_data_deletion_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_data_deletion_request_attributes import LLMObsDataDeletionRequestAttributes + from datadog_api_client.v2.model.llm_obs_data_deletion_request_type import LLMObsDataDeletionRequestType + +class LLMObsDataDeletionRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_data_deletion_request_attributes import LLMObsDataDeletionRequestAttributes + from datadog_api_client.v2.model.llm_obs_data_deletion_request_type import LLMObsDataDeletionRequestType + return { + "attributes": (LLMObsDataDeletionRequestAttributes,), + "type": (LLMObsDataDeletionRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDataDeletionRequestAttributes, type: LLMObsDataDeletionRequestType, **kwargs): + """ + Data object for an LLM Observability data deletion request. + + :param attributes: Attributes for an LLM Observability data deletion request. + :type attributes: LLMObsDataDeletionRequestAttributes + + :param type: Resource type for an LLM Observability data deletion request. + :type type: LLMObsDataDeletionRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_data_deletion_request_type.py b/datadog_api_client/v2/model/llm_obs_data_deletion_request_type.py new file mode 100644 index 0000000000..0cd0c6fe2d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_data_deletion_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsDataDeletionRequestType(ModelSimple): + """ + Resource type for an LLM Observability data deletion request. + + :param value: If omitted defaults to "create_deletion_req". Must be one of ["create_deletion_req"]. + :type value: str + """ + + allowed_values = { + "create_deletion_req", + } + CREATE_DELETION_REQ: ClassVar["LLMObsDataDeletionRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsDataDeletionRequestType.CREATE_DELETION_REQ = LLMObsDataDeletionRequestType("create_deletion_req") diff --git a/datadog_api_client/v2/model/llm_obs_data_deletion_response.py b/datadog_api_client/v2/model/llm_obs_data_deletion_response.py new file mode 100644 index 0000000000..31b5166404 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_data_deletion_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_data_deletion_response_data import LLMObsDataDeletionResponseData + +class LLMObsDataDeletionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_data_deletion_response_data import LLMObsDataDeletionResponseData + return { + "data": (LLMObsDataDeletionResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDataDeletionResponseData, **kwargs): + """ + Response containing details of a submitted LLM Observability data deletion request. + + :param data: Data object for an LLM Observability data deletion response. + :type data: LLMObsDataDeletionResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_data_deletion_response_attributes.py b/datadog_api_client/v2/model/llm_obs_data_deletion_response_attributes.py new file mode 100644 index 0000000000..fbf507dda3 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_data_deletion_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDataDeletionResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "created_by": (str,), + "from_time": (int,), + "org_id": (int,), + "product": (str,), + "query": (str,), + "to_time": (int,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "from_time": "from_time", + "org_id": "org_id", + "product": "product", + "query": "query", + "to_time": "to_time", + } + + def __init__(self_, created_at: datetime, created_by: str, from_time: int, org_id: int, product: str, query: str, to_time: int, **kwargs): + """ + Attributes of a submitted LLM Observability data deletion request. + + :param created_at: Timestamp when the deletion request was created. + :type created_at: datetime + + :param created_by: UUID of the user who created the deletion request. + :type created_by: str + + :param from_time: Start of the deletion time range in milliseconds since Unix epoch. + :type from_time: int + + :param org_id: ID of the organization that submitted the deletion request. + :type org_id: int + + :param product: Product name for the deletion request. + :type product: str + + :param query: The query string used to select data for deletion. + :type query: str + + :param to_time: End of the deletion time range in milliseconds since Unix epoch. + :type to_time: int + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.from_time = from_time + self_.org_id = org_id + self_.product = product + self_.query = query + self_.to_time = to_time diff --git a/datadog_api_client/v2/model/llm_obs_data_deletion_response_data.py b/datadog_api_client/v2/model/llm_obs_data_deletion_response_data.py new file mode 100644 index 0000000000..30f3c8c20b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_data_deletion_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_data_deletion_response_attributes import LLMObsDataDeletionResponseAttributes + from datadog_api_client.v2.model.llm_obs_data_deletion_response_type import LLMObsDataDeletionResponseType + +class LLMObsDataDeletionResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_data_deletion_response_attributes import LLMObsDataDeletionResponseAttributes + from datadog_api_client.v2.model.llm_obs_data_deletion_response_type import LLMObsDataDeletionResponseType + return { + "attributes": (LLMObsDataDeletionResponseAttributes,), + "id": (str,), + "type": (LLMObsDataDeletionResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDataDeletionResponseAttributes, id: str, type: LLMObsDataDeletionResponseType, **kwargs): + """ + Data object for an LLM Observability data deletion response. + + :param attributes: Attributes of a submitted LLM Observability data deletion request. + :type attributes: LLMObsDataDeletionResponseAttributes + + :param id: Unique identifier of the deletion request. + :type id: str + + :param type: Resource type for an LLM Observability data deletion response. + :type type: LLMObsDataDeletionResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_data_deletion_response_type.py b/datadog_api_client/v2/model/llm_obs_data_deletion_response_type.py new file mode 100644 index 0000000000..31dd122c31 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_data_deletion_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsDataDeletionResponseType(ModelSimple): + """ + Resource type for an LLM Observability data deletion response. + + :param value: If omitted defaults to "deletion_request". Must be one of ["deletion_request"]. + :type value: str + """ + + allowed_values = { + "deletion_request", + } + DELETION_REQUEST: ClassVar["LLMObsDataDeletionResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsDataDeletionResponseType.DELETION_REQUEST = LLMObsDataDeletionResponseType("deletion_request") diff --git a/datadog_api_client/v2/model/llm_obs_dataset_batch_update_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_data_attributes_request.py new file mode 100644 index 0000000000..04dacef03a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_data_attributes_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_batch_update_insert_record import LLMObsDatasetBatchUpdateInsertRecord + from datadog_api_client.v2.model.llm_obs_dataset_batch_update_update_record import LLMObsDatasetBatchUpdateUpdateRecord + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetBatchUpdateDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_batch_update_insert_record import LLMObsDatasetBatchUpdateInsertRecord + from datadog_api_client.v2.model.llm_obs_dataset_batch_update_update_record import LLMObsDatasetBatchUpdateUpdateRecord + return { + "create_new_version": (bool,), + "delete_records": ([str],), + "insert_records": ([LLMObsDatasetBatchUpdateInsertRecord],), + "tags": ([str],), + "update_records": ([LLMObsDatasetBatchUpdateUpdateRecord],), + } + attribute_map = { + "create_new_version": "create_new_version", + "delete_records": "delete_records", + "insert_records": "insert_records", + "tags": "tags", + "update_records": "update_records", + } + + def __init__(self_, create_new_version: Union[bool, UnsetType]=unset, delete_records: Union[List[str], UnsetType]=unset, insert_records: Union[List[LLMObsDatasetBatchUpdateInsertRecord], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, update_records: Union[List[LLMObsDatasetBatchUpdateUpdateRecord], UnsetType]=unset, **kwargs): + """ + Attributes for batch-updating records in an LLM Observability dataset. + + :param create_new_version: Whether to create a new dataset version when applying the batch update. Defaults to ``true``. + :type create_new_version: bool, optional + + :param delete_records: Record IDs to delete. + :type delete_records: [str], optional + + :param insert_records: Records to insert. + :type insert_records: [LLMObsDatasetBatchUpdateInsertRecord], optional + + :param tags: List of tag strings. + :type tags: [str], optional + + :param update_records: Records to update by ID. + :type update_records: [LLMObsDatasetBatchUpdateUpdateRecord], optional + """ + if create_new_version is not unset: + kwargs["create_new_version"] = create_new_version + if delete_records is not unset: + kwargs["delete_records"] = delete_records + if insert_records is not unset: + kwargs["insert_records"] = insert_records + if tags is not unset: + kwargs["tags"] = tags + if update_records is not unset: + kwargs["update_records"] = update_records + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_dataset_batch_update_data_request.py b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_data_request.py new file mode 100644 index 0000000000..c2930a50b7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_data_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_batch_update_data_attributes_request import LLMObsDatasetBatchUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetBatchUpdateDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_batch_update_data_attributes_request import LLMObsDatasetBatchUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + return { + "attributes": (LLMObsDatasetBatchUpdateDataAttributesRequest,), + "id": (str,), + "type": (LLMObsDatasetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetBatchUpdateDataAttributesRequest, id: str, type: LLMObsDatasetType, **kwargs): + """ + Data object for batch-updating records in an LLM Observability dataset. + + :param attributes: Attributes for batch-updating records in an LLM Observability dataset. + :type attributes: LLMObsDatasetBatchUpdateDataAttributesRequest + + :param id: Unique identifier of the dataset. + :type id: str + + :param type: Resource type of an LLM Observability dataset. + :type type: LLMObsDatasetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_batch_update_insert_record.py b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_insert_record.py new file mode 100644 index 0000000000..127f01a206 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_insert_record.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.any_value import AnyValue + from datadog_api_client.v2.model.llm_obs_dataset_record_tag_operations import LLMObsDatasetRecordTagOperations + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetBatchUpdateInsertRecord(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.any_value import AnyValue + from datadog_api_client.v2.model.llm_obs_dataset_record_tag_operations import LLMObsDatasetRecordTagOperations + return { + "expected_output": (AnyValue,), + "id": (str,), + "input": (AnyValue,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tag_operations": (LLMObsDatasetRecordTagOperations,), + "tags": ([str],), + } + attribute_map = { + "expected_output": "expected_output", + "id": "id", + "input": "input", + "metadata": "metadata", + "tag_operations": "tag_operations", + "tags": "tags", + } + + def __init__(self_, input: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type], expected_output: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type, UnsetType]=unset, id: Union[str, UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, tag_operations: Union[LLMObsDatasetRecordTagOperations, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + A record to insert as part of a batch update on an LLM Observability dataset. + + :param expected_output: Represents any valid JSON value. + :type expected_output: AnyValue, none_type, optional + + :param id: Optional user-provided identifier for the record. If omitted, the server generates an identifier. + :type id: str, optional + + :param input: Represents any valid JSON value. + :type input: AnyValue, none_type + + :param metadata: Arbitrary metadata associated with the record. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tag_operations: Explicit tag operations for updating records. Operations are applied in order, Remove then Add then Set. ``set`` is the final override; if specified, the result of ``remove`` and ``add`` is discarded. + :type tag_operations: LLMObsDatasetRecordTagOperations, optional + + :param tags: List of tag strings. + :type tags: [str], optional + """ + if expected_output is not unset: + kwargs["expected_output"] = expected_output + if id is not unset: + kwargs["id"] = id + if metadata is not unset: + kwargs["metadata"] = metadata + if tag_operations is not unset: + kwargs["tag_operations"] = tag_operations + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.input = input diff --git a/datadog_api_client/v2/model/llm_obs_dataset_batch_update_request.py b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_request.py new file mode 100644 index 0000000000..c2b13194c8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_batch_update_data_request import LLMObsDatasetBatchUpdateDataRequest + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetBatchUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_batch_update_data_request import LLMObsDatasetBatchUpdateDataRequest + return { + "data": (LLMObsDatasetBatchUpdateDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDatasetBatchUpdateDataRequest, **kwargs): + """ + Request to batch-insert, update, and delete records in an LLM Observability dataset. + + :param data: Data object for batch-updating records in an LLM Observability dataset. + :type data: LLMObsDatasetBatchUpdateDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_batch_update_update_record.py b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_update_record.py new file mode 100644 index 0000000000..2e93ac9b21 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_batch_update_update_record.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.any_value import AnyValue + from datadog_api_client.v2.model.llm_obs_dataset_record_tag_operations import LLMObsDatasetRecordTagOperations + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetBatchUpdateUpdateRecord(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.any_value import AnyValue + from datadog_api_client.v2.model.llm_obs_dataset_record_tag_operations import LLMObsDatasetRecordTagOperations + return { + "expected_output": (AnyValue,), + "id": (str,), + "input": (AnyValue,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tag_operations": (LLMObsDatasetRecordTagOperations,), + } + attribute_map = { + "expected_output": "expected_output", + "id": "id", + "input": "input", + "metadata": "metadata", + "tag_operations": "tag_operations", + } + + def __init__(self_, id: str, expected_output: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type, UnsetType]=unset, input: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type, UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, tag_operations: Union[LLMObsDatasetRecordTagOperations, UnsetType]=unset, **kwargs): + """ + A record update payload as part of a batch update on an LLM Observability dataset. + + :param expected_output: Represents any valid JSON value. + :type expected_output: AnyValue, none_type, optional + + :param id: Unique identifier of the record to update. + :type id: str + + :param input: Represents any valid JSON value. + :type input: AnyValue, none_type, optional + + :param metadata: Updated metadata associated with the record. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tag_operations: Explicit tag operations for updating records. Operations are applied in order, Remove then Add then Set. ``set`` is the final override; if specified, the result of ``remove`` and ``add`` is discarded. + :type tag_operations: LLMObsDatasetRecordTagOperations, optional + """ + if expected_output is not unset: + kwargs["expected_output"] = expected_output + if input is not unset: + kwargs["input"] = input + if metadata is not unset: + kwargs["metadata"] = metadata + if tag_operations is not unset: + kwargs["tag_operations"] = tag_operations + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/llm_obs_dataset_clone_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_dataset_clone_data_attributes_request.py new file mode 100644 index 0000000000..76a2d5ebab --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_clone_data_attributes_request.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDatasetCloneDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + } + + def __init__(self_, name: str, description: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for cloning an LLM Observability dataset. + + :param description: Description of the cloned dataset. + :type description: str, optional + + :param name: Name of the cloned dataset. + :type name: str + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/llm_obs_dataset_clone_data_request.py b/datadog_api_client/v2/model/llm_obs_dataset_clone_data_request.py new file mode 100644 index 0000000000..1f5e35bc7b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_clone_data_request.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_clone_data_attributes_request import LLMObsDatasetCloneDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + +class LLMObsDatasetCloneDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_clone_data_attributes_request import LLMObsDatasetCloneDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + return { + "attributes": (LLMObsDatasetCloneDataAttributesRequest,), + "id": (str,), + "type": (LLMObsDatasetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetCloneDataAttributesRequest, id: str, type: LLMObsDatasetType, **kwargs): + """ + Data object for cloning an LLM Observability dataset. + + :param attributes: Attributes for cloning an LLM Observability dataset. + :type attributes: LLMObsDatasetCloneDataAttributesRequest + + :param id: Identifier of the source dataset to clone. + :type id: str + + :param type: Resource type of an LLM Observability dataset. + :type type: LLMObsDatasetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_clone_request.py b/datadog_api_client/v2/model/llm_obs_dataset_clone_request.py new file mode 100644 index 0000000000..4d5c389686 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_clone_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_clone_data_request import LLMObsDatasetCloneDataRequest + +class LLMObsDatasetCloneRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_clone_data_request import LLMObsDatasetCloneDataRequest + return { + "data": (LLMObsDatasetCloneDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDatasetCloneDataRequest, **kwargs): + """ + Request to clone an LLM Observability dataset. + + :param data: Data object for cloning an LLM Observability dataset. + :type data: LLMObsDatasetCloneDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_dataset_data_attributes_request.py new file mode 100644 index 0000000000..f408b13498 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_data_attributes_request.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDatasetDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "name": (str,), + } + attribute_map = { + "description": "description", + "metadata": "metadata", + "name": "name", + } + + def __init__(self_, name: str, description: Union[str, UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + Attributes for creating an LLM Observability dataset. + + :param description: Description of the dataset. + :type description: str, optional + + :param metadata: Arbitrary metadata associated with the dataset. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param name: Name of the dataset. + :type name: str + """ + if description is not unset: + kwargs["description"] = description + if metadata is not unset: + kwargs["metadata"] = metadata + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/llm_obs_dataset_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_dataset_data_attributes_response.py new file mode 100644 index 0000000000..b59279f598 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_data_attributes_response.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDatasetDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "current_version": (int,), + "description": (str, none_type), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "name": (str,), + "updated_at": (datetime,), + } + attribute_map = { + "created_at": "created_at", + "current_version": "current_version", + "description": "description", + "metadata": "metadata", + "name": "name", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: datetime, current_version: int, description: Union[str, none_type], metadata: Union[Dict[str, Any], none_type], name: str, updated_at: datetime, **kwargs): + """ + Attributes of an LLM Observability dataset. + + :param created_at: Timestamp when the dataset was created. + :type created_at: datetime + + :param current_version: Current version number of the dataset. + :type current_version: int + + :param description: Description of the dataset. + :type description: str, none_type + + :param metadata: Arbitrary metadata associated with the dataset. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type + + :param name: Name of the dataset. + :type name: str + + :param updated_at: Timestamp when the dataset was last updated. + :type updated_at: datetime + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.current_version = current_version + self_.description = description + self_.metadata = metadata + self_.name = name + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/llm_obs_dataset_data_request.py b/datadog_api_client/v2/model/llm_obs_dataset_data_request.py new file mode 100644 index 0000000000..a01eb8c0c7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_data_attributes_request import LLMObsDatasetDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + +class LLMObsDatasetDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_data_attributes_request import LLMObsDatasetDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + return { + "attributes": (LLMObsDatasetDataAttributesRequest,), + "type": (LLMObsDatasetType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetDataAttributesRequest, type: LLMObsDatasetType, **kwargs): + """ + Data object for creating an LLM Observability dataset. + + :param attributes: Attributes for creating an LLM Observability dataset. + :type attributes: LLMObsDatasetDataAttributesRequest + + :param type: Resource type of an LLM Observability dataset. + :type type: LLMObsDatasetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_data_response.py b/datadog_api_client/v2/model/llm_obs_dataset_data_response.py new file mode 100644 index 0000000000..8c79c672bf --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_data_attributes_response import LLMObsDatasetDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + +class LLMObsDatasetDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_data_attributes_response import LLMObsDatasetDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + return { + "attributes": (LLMObsDatasetDataAttributesResponse,), + "id": (str,), + "type": (LLMObsDatasetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetDataAttributesResponse, id: str, type: LLMObsDatasetType, **kwargs): + """ + Data object for an LLM Observability dataset. + + :param attributes: Attributes of an LLM Observability dataset. + :type attributes: LLMObsDatasetDataAttributesResponse + + :param id: Unique identifier of the dataset. + :type id: str + + :param type: Resource type of an LLM Observability dataset. + :type type: LLMObsDatasetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_draft_state_data.py b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_data.py new file mode 100644 index 0000000000..982df7588b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_draft_state_data_attributes import LLMObsDatasetDraftStateDataAttributes + from datadog_api_client.v2.model.llm_obs_dataset_draft_state_type import LLMObsDatasetDraftStateType + +class LLMObsDatasetDraftStateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_draft_state_data_attributes import LLMObsDatasetDraftStateDataAttributes + from datadog_api_client.v2.model.llm_obs_dataset_draft_state_type import LLMObsDatasetDraftStateType + return { + "attributes": (LLMObsDatasetDraftStateDataAttributes,), + "id": (str,), + "type": (LLMObsDatasetDraftStateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetDraftStateDataAttributes, id: str, type: LLMObsDatasetDraftStateType, **kwargs): + """ + Data object for an LLM Observability dataset draft state. + + :param attributes: Attributes of an LLM Observability dataset draft state. + :type attributes: LLMObsDatasetDraftStateDataAttributes + + :param id: Unique identifier of the dataset draft state. Matches the dataset ID. + :type id: str + + :param type: Resource type of an LLM Observability dataset draft state. + :type type: LLMObsDatasetDraftStateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_draft_state_data_attributes.py b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_data_attributes.py new file mode 100644 index 0000000000..6dc5bc74ca --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_draft_state_user import LLMObsDatasetDraftStateUser + +class LLMObsDatasetDraftStateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_draft_state_user import LLMObsDatasetDraftStateUser + return { + "drafting_since": (datetime,), + "user": (LLMObsDatasetDraftStateUser,), + } + attribute_map = { + "drafting_since": "drafting_since", + "user": "user", + } + + def __init__(self_, drafting_since: datetime, user: LLMObsDatasetDraftStateUser, **kwargs): + """ + Attributes of an LLM Observability dataset draft state. + + :param drafting_since: Timestamp when the dataset draft session started. + :type drafting_since: datetime + + :param user: User information associated with a dataset draft state. + :type user: LLMObsDatasetDraftStateUser + """ + super().__init__(kwargs) + + + self_.drafting_since = drafting_since + self_.user = user diff --git a/datadog_api_client/v2/model/llm_obs_dataset_draft_state_response.py b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_response.py new file mode 100644 index 0000000000..ca70eea6d6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_draft_state_data import LLMObsDatasetDraftStateData + +class LLMObsDatasetDraftStateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_draft_state_data import LLMObsDatasetDraftStateData + return { + "data": (LLMObsDatasetDraftStateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDatasetDraftStateData, **kwargs): + """ + Response containing the draft state of an LLM Observability dataset. + + :param data: Data object for an LLM Observability dataset draft state. + :type data: LLMObsDatasetDraftStateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_draft_state_type.py b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_type.py new file mode 100644 index 0000000000..744cb4d8de --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsDatasetDraftStateType(ModelSimple): + """ + Resource type of an LLM Observability dataset draft state. + + :param value: If omitted defaults to "draft_state_data". Must be one of ["draft_state_data"]. + :type value: str + """ + + allowed_values = { + "draft_state_data", + } + DRAFT_STATE_DATA: ClassVar["LLMObsDatasetDraftStateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsDatasetDraftStateType.DRAFT_STATE_DATA = LLMObsDatasetDraftStateType("draft_state_data") diff --git a/datadog_api_client/v2/model/llm_obs_dataset_draft_state_user.py b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_user.py new file mode 100644 index 0000000000..eb53dec3f7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_draft_state_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDatasetDraftStateUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "icon": (str,), + "id": (str,), + "name": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "icon": "icon", + "id": "id", + "name": "name", + } + + def __init__(self_, id: str, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, icon: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + User information associated with a dataset draft state. + + :param email: Email address of the user. + :type email: str, optional + + :param handle: Handle of the user. + :type handle: str, optional + + :param icon: Icon for the user. + :type icon: str, optional + + :param id: Unique identifier of the user holding the draft lock. + :type id: str + + :param name: Display name of the user. + :type name: str, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if icon is not unset: + kwargs["icon"] = icon + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/llm_obs_dataset_export_format.py b/datadog_api_client/v2/model/llm_obs_dataset_export_format.py new file mode 100644 index 0000000000..f8d6c78ba0 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_export_format.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsDatasetExportFormat(ModelSimple): + """ + Supported export format for an LLM Observability dataset. + + :param value: If omitted defaults to "csv". Must be one of ["csv"]. + :type value: str + """ + + allowed_values = { + "csv", + } + CSV: ClassVar["LLMObsDatasetExportFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsDatasetExportFormat.CSV = LLMObsDatasetExportFormat("csv") diff --git a/datadog_api_client/v2/model/llm_obs_dataset_record_data_response.py b/datadog_api_client/v2/model/llm_obs_dataset_record_data_response.py new file mode 100644 index 0000000000..f3a81f27df --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_record_data_response.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.any_value import AnyValue + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.any_value import AnyValue + return { + "created_at": (datetime,), + "dataset_id": (str,), + "expected_output": (AnyValue,), + "id": (str,), + "input": (AnyValue,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "updated_at": (datetime,), + } + attribute_map = { + "created_at": "created_at", + "dataset_id": "dataset_id", + "expected_output": "expected_output", + "id": "id", + "input": "input", + "metadata": "metadata", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: datetime, dataset_id: str, expected_output: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type], id: str, input: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type], metadata: Union[Dict[str, Any], none_type], updated_at: datetime, **kwargs): + """ + A single LLM Observability dataset record. + + :param created_at: Timestamp when the record was created. + :type created_at: datetime + + :param dataset_id: Identifier of the dataset this record belongs to. + :type dataset_id: str + + :param expected_output: Represents any valid JSON value. + :type expected_output: AnyValue, none_type + + :param id: Unique identifier of the record. + :type id: str + + :param input: Represents any valid JSON value. + :type input: AnyValue, none_type + + :param metadata: Arbitrary metadata associated with the record. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type + + :param updated_at: Timestamp when the record was last updated. + :type updated_at: datetime + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.dataset_id = dataset_id + self_.expected_output = expected_output + self_.id = id + self_.input = input + self_.metadata = metadata + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/llm_obs_dataset_record_item.py b/datadog_api_client/v2/model/llm_obs_dataset_record_item.py new file mode 100644 index 0000000000..494539d43f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_record_item.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.any_value import AnyValue + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.any_value import AnyValue + return { + "expected_output": (AnyValue,), + "input": (AnyValue,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "expected_output": "expected_output", + "input": "input", + "metadata": "metadata", + } + + def __init__(self_, input: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type], expected_output: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type, UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + A single record to append to an LLM Observability dataset. + + :param expected_output: Represents any valid JSON value. + :type expected_output: AnyValue, none_type, optional + + :param input: Represents any valid JSON value. + :type input: AnyValue, none_type + + :param metadata: Arbitrary metadata associated with the record. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + """ + if expected_output is not unset: + kwargs["expected_output"] = expected_output + if metadata is not unset: + kwargs["metadata"] = metadata + super().__init__(kwargs) + + + self_.input = input diff --git a/datadog_api_client/v2/model/llm_obs_dataset_record_tag_operations.py b/datadog_api_client/v2/model/llm_obs_dataset_record_tag_operations.py new file mode 100644 index 0000000000..43ae1eda89 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_record_tag_operations.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDatasetRecordTagOperations(ModelNormal): + @cached_property + def openapi_types(_): + return { + "add": ([str],), + "remove": ([str],), + "set": ([str],), + } + attribute_map = { + "add": "add", + "remove": "remove", + "set": "set", + } + + def __init__(self_, add: Union[List[str], UnsetType]=unset, remove: Union[List[str], UnsetType]=unset, set: Union[List[str], UnsetType]=unset, **kwargs): + """ + Explicit tag operations for updating records. Operations are applied in order, Remove then Add then Set. ``set`` is the final override; if specified, the result of ``remove`` and ``add`` is discarded. + + :param add: List of tag strings. + :type add: [str], optional + + :param remove: List of tag strings. + :type remove: [str], optional + + :param set: List of tag strings. + :type set: [str], optional + """ + if add is not unset: + kwargs["add"] = add + if remove is not unset: + kwargs["remove"] = remove + if set is not unset: + kwargs["set"] = set + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_dataset_record_update_item.py b/datadog_api_client/v2/model/llm_obs_dataset_record_update_item.py new file mode 100644 index 0000000000..149160e66a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_record_update_item.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.any_value import AnyValue + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordUpdateItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.any_value import AnyValue + return { + "expected_output": (AnyValue,), + "id": (str,), + "input": (AnyValue,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "expected_output": "expected_output", + "id": "id", + "input": "input", + "metadata": "metadata", + } + + def __init__(self_, id: str, expected_output: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type, UnsetType]=unset, input: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type, UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + A record update payload for an LLM Observability dataset. + + :param expected_output: Represents any valid JSON value. + :type expected_output: AnyValue, none_type, optional + + :param id: Unique identifier of the record to update. + :type id: str + + :param input: Represents any valid JSON value. + :type input: AnyValue, none_type, optional + + :param metadata: Updated metadata associated with the record. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + """ + if expected_output is not unset: + kwargs["expected_output"] = expected_output + if input is not unset: + kwargs["input"] = input + if metadata is not unset: + kwargs["metadata"] = metadata + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_dataset_records_data_attributes_request.py new file mode 100644 index 0000000000..f6c5277f3d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_data_attributes_request.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_record_item import LLMObsDatasetRecordItem + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordsDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_record_item import LLMObsDatasetRecordItem + return { + "deduplicate": (bool,), + "records": ([LLMObsDatasetRecordItem],), + } + attribute_map = { + "deduplicate": "deduplicate", + "records": "records", + } + + def __init__(self_, records: List[LLMObsDatasetRecordItem], deduplicate: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for appending records to an LLM Observability dataset. + + :param deduplicate: Whether to deduplicate records before appending. Defaults to ``true``. + :type deduplicate: bool, optional + + :param records: List of records to append to the dataset. + :type records: [LLMObsDatasetRecordItem] + """ + if deduplicate is not unset: + kwargs["deduplicate"] = deduplicate + super().__init__(kwargs) + + + self_.records = records diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_data_request.py b/datadog_api_client/v2/model/llm_obs_dataset_records_data_request.py new file mode 100644 index 0000000000..28d69c9f98 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_data_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_records_data_attributes_request import LLMObsDatasetRecordsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_record_type import LLMObsRecordType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_records_data_attributes_request import LLMObsDatasetRecordsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_record_type import LLMObsRecordType + return { + "attributes": (LLMObsDatasetRecordsDataAttributesRequest,), + "type": (LLMObsRecordType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetRecordsDataAttributesRequest, type: LLMObsRecordType, **kwargs): + """ + Data object for appending records to an LLM Observability dataset. + + :param attributes: Attributes for appending records to an LLM Observability dataset. + :type attributes: LLMObsDatasetRecordsDataAttributesRequest + + :param type: Resource type of LLM Observability dataset records. + :type type: LLMObsRecordType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_list_response.py b/datadog_api_client/v2/model/llm_obs_dataset_records_list_response.py new file mode 100644 index 0000000000..a20fecf810 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_list_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_record_data_response import LLMObsDatasetRecordDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_record_data_response import LLMObsDatasetRecordDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + return { + "data": ([LLMObsDatasetRecordDataResponse],), + "meta": (LLMObsCursorMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[LLMObsDatasetRecordDataResponse], meta: Union[LLMObsCursorMeta, UnsetType]=unset, **kwargs): + """ + Response containing a paginated list of LLM Observability dataset records. + + :param data: List of dataset records. + :type data: [LLMObsDatasetRecordDataResponse] + + :param meta: Pagination cursor metadata. + :type meta: LLMObsCursorMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_mutation_data.py b/datadog_api_client/v2/model/llm_obs_dataset_records_mutation_data.py new file mode 100644 index 0000000000..3e3b02606f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_mutation_data.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_record_data_response import LLMObsDatasetRecordDataResponse + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordsMutationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_record_data_response import LLMObsDatasetRecordDataResponse + return { + "records": ([LLMObsDatasetRecordDataResponse],), + } + attribute_map = { + "records": "records", + } + + def __init__(self_, records: List[LLMObsDatasetRecordDataResponse], **kwargs): + """ + Response containing records after a create or update operation. + + :param records: List of affected dataset records. + :type records: [LLMObsDatasetRecordDataResponse] + """ + super().__init__(kwargs) + + + self_.records = records diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_mutation_response.py b/datadog_api_client/v2/model/llm_obs_dataset_records_mutation_response.py new file mode 100644 index 0000000000..5059249d15 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_mutation_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_records_mutation_data import LLMObsDatasetRecordsMutationData + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordsMutationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_records_mutation_data import LLMObsDatasetRecordsMutationData + return { + "data": ([LLMObsDatasetRecordsMutationData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[LLMObsDatasetRecordsMutationData], **kwargs): + """ + Response containing records after a create or update operation. + + :param data: List of affected dataset records. + :type data: [LLMObsDatasetRecordsMutationData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_request.py b/datadog_api_client/v2/model/llm_obs_dataset_records_request.py new file mode 100644 index 0000000000..75130db4f2 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_records_data_request import LLMObsDatasetRecordsDataRequest + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_records_data_request import LLMObsDatasetRecordsDataRequest + return { + "data": (LLMObsDatasetRecordsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDatasetRecordsDataRequest, **kwargs): + """ + Request to append records to an LLM Observability dataset. + + :param data: Data object for appending records to an LLM Observability dataset. + :type data: LLMObsDatasetRecordsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_update_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_dataset_records_update_data_attributes_request.py new file mode 100644 index 0000000000..b6196db642 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_update_data_attributes_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_record_update_item import LLMObsDatasetRecordUpdateItem + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordsUpdateDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_record_update_item import LLMObsDatasetRecordUpdateItem + return { + "records": ([LLMObsDatasetRecordUpdateItem],), + } + attribute_map = { + "records": "records", + } + + def __init__(self_, records: List[LLMObsDatasetRecordUpdateItem], **kwargs): + """ + Attributes for updating records in an LLM Observability dataset. + + :param records: List of records to update. + :type records: [LLMObsDatasetRecordUpdateItem] + """ + super().__init__(kwargs) + + + self_.records = records diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_update_data_request.py b/datadog_api_client/v2/model/llm_obs_dataset_records_update_data_request.py new file mode 100644 index 0000000000..133fa53e47 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_update_data_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_records_update_data_attributes_request import LLMObsDatasetRecordsUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_record_type import LLMObsRecordType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordsUpdateDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_records_update_data_attributes_request import LLMObsDatasetRecordsUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_record_type import LLMObsRecordType + return { + "attributes": (LLMObsDatasetRecordsUpdateDataAttributesRequest,), + "type": (LLMObsRecordType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetRecordsUpdateDataAttributesRequest, type: LLMObsRecordType, **kwargs): + """ + Data object for updating records in an LLM Observability dataset. + + :param attributes: Attributes for updating records in an LLM Observability dataset. + :type attributes: LLMObsDatasetRecordsUpdateDataAttributesRequest + + :param type: Resource type of LLM Observability dataset records. + :type type: LLMObsRecordType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_update_request.py b/datadog_api_client/v2/model/llm_obs_dataset_records_update_request.py new file mode 100644 index 0000000000..b38e0d7b6d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_update_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_records_update_data_request import LLMObsDatasetRecordsUpdateDataRequest + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsDatasetRecordsUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_records_update_data_request import LLMObsDatasetRecordsUpdateDataRequest + return { + "data": (LLMObsDatasetRecordsUpdateDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDatasetRecordsUpdateDataRequest, **kwargs): + """ + Request to update records in an LLM Observability dataset. + + :param data: Data object for updating records in an LLM Observability dataset. + :type data: LLMObsDatasetRecordsUpdateDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_records_upload_file.py b/datadog_api_client/v2/model/llm_obs_dataset_records_upload_file.py new file mode 100644 index 0000000000..56c0573bf0 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_records_upload_file.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDatasetRecordsUploadFile(ModelNormal): + @cached_property + def openapi_types(_): + return { + "file": (file_type,), + } + attribute_map = { + "file": "file", + } + + def __init__(self_, file: Union[file_type, UnsetType]=unset, **kwargs): + """ + Multipart payload for uploading dataset records from a file. + + :param file: The records file to upload. Currently only CSV is supported. The file must include an ``input`` column. Optional columns include ``id`` , ``expected_output`` , ``metadata`` , and ``tags``. + :type file: file_type, optional + """ + if file is not unset: + kwargs["file"] = file + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_dataset_request.py b/datadog_api_client/v2/model/llm_obs_dataset_request.py new file mode 100644 index 0000000000..c7a475f5e7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_data_request import LLMObsDatasetDataRequest + +class LLMObsDatasetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_data_request import LLMObsDatasetDataRequest + return { + "data": (LLMObsDatasetDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDatasetDataRequest, **kwargs): + """ + Request to create an LLM Observability dataset. + + :param data: Data object for creating an LLM Observability dataset. + :type data: LLMObsDatasetDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_response.py b/datadog_api_client/v2/model/llm_obs_dataset_response.py new file mode 100644 index 0000000000..d857fee6b2 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_data_response import LLMObsDatasetDataResponse + +class LLMObsDatasetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_data_response import LLMObsDatasetDataResponse + return { + "data": (LLMObsDatasetDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDatasetDataResponse, **kwargs): + """ + Response containing a single LLM Observability dataset. + + :param data: Data object for an LLM Observability dataset. + :type data: LLMObsDatasetDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_restore_version_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_dataset_restore_version_data_attributes_request.py new file mode 100644 index 0000000000..d56d746b2b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_restore_version_data_attributes_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDatasetRestoreVersionDataAttributesRequest(ModelNormal): + validations = { + "dataset_version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "dataset_version": (int,), + } + attribute_map = { + "dataset_version": "dataset_version", + } + + def __init__(self_, dataset_version: int, **kwargs): + """ + Attributes for restoring an LLM Observability dataset to a previous version. + + :param dataset_version: Version number of the dataset to restore. Must be between 0 and the current version of the dataset, inclusive. + :type dataset_version: int + """ + super().__init__(kwargs) + + + self_.dataset_version = dataset_version diff --git a/datadog_api_client/v2/model/llm_obs_dataset_restore_version_data_request.py b/datadog_api_client/v2/model/llm_obs_dataset_restore_version_data_request.py new file mode 100644 index 0000000000..31983c1d6d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_restore_version_data_request.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_restore_version_data_attributes_request import LLMObsDatasetRestoreVersionDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + +class LLMObsDatasetRestoreVersionDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_restore_version_data_attributes_request import LLMObsDatasetRestoreVersionDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + return { + "attributes": (LLMObsDatasetRestoreVersionDataAttributesRequest,), + "id": (str,), + "type": (LLMObsDatasetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetRestoreVersionDataAttributesRequest, id: str, type: LLMObsDatasetType, **kwargs): + """ + Data object for restoring an LLM Observability dataset to a previous version. + + :param attributes: Attributes for restoring an LLM Observability dataset to a previous version. + :type attributes: LLMObsDatasetRestoreVersionDataAttributesRequest + + :param id: Unique identifier of the dataset to restore. + :type id: str + + :param type: Resource type of an LLM Observability dataset. + :type type: LLMObsDatasetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_restore_version_request.py b/datadog_api_client/v2/model/llm_obs_dataset_restore_version_request.py new file mode 100644 index 0000000000..56504a3f9c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_restore_version_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_restore_version_data_request import LLMObsDatasetRestoreVersionDataRequest + +class LLMObsDatasetRestoreVersionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_restore_version_data_request import LLMObsDatasetRestoreVersionDataRequest + return { + "data": (LLMObsDatasetRestoreVersionDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDatasetRestoreVersionDataRequest, **kwargs): + """ + Request to restore an LLM Observability dataset to a previous version. + + :param data: Data object for restoring an LLM Observability dataset to a previous version. + :type data: LLMObsDatasetRestoreVersionDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_type.py b/datadog_api_client/v2/model/llm_obs_dataset_type.py new file mode 100644 index 0000000000..5103ff7935 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsDatasetType(ModelSimple): + """ + Resource type of an LLM Observability dataset. + + :param value: If omitted defaults to "datasets". Must be one of ["datasets"]. + :type value: str + """ + + allowed_values = { + "datasets", + } + DATASETS: ClassVar["LLMObsDatasetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsDatasetType.DATASETS = LLMObsDatasetType("datasets") diff --git a/datadog_api_client/v2/model/llm_obs_dataset_update_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_dataset_update_data_attributes_request.py new file mode 100644 index 0000000000..95328800e1 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_update_data_attributes_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDatasetUpdateDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "name": (str,), + } + attribute_map = { + "description": "description", + "metadata": "metadata", + "name": "name", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating an LLM Observability dataset. + + :param description: Updated description of the dataset. + :type description: str, optional + + :param metadata: Updated metadata associated with the dataset. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param name: Updated name of the dataset. + :type name: str, optional + """ + if description is not unset: + kwargs["description"] = description + if metadata is not unset: + kwargs["metadata"] = metadata + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_dataset_update_data_request.py b/datadog_api_client/v2/model/llm_obs_dataset_update_data_request.py new file mode 100644 index 0000000000..5f23bcebbe --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_update_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_update_data_attributes_request import LLMObsDatasetUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + +class LLMObsDatasetUpdateDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_update_data_attributes_request import LLMObsDatasetUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + return { + "attributes": (LLMObsDatasetUpdateDataAttributesRequest,), + "type": (LLMObsDatasetType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetUpdateDataAttributesRequest, type: LLMObsDatasetType, **kwargs): + """ + Data object for updating an LLM Observability dataset. + + :param attributes: Attributes for updating an LLM Observability dataset. + :type attributes: LLMObsDatasetUpdateDataAttributesRequest + + :param type: Resource type of an LLM Observability dataset. + :type type: LLMObsDatasetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_update_request.py b/datadog_api_client/v2/model/llm_obs_dataset_update_request.py new file mode 100644 index 0000000000..748d495800 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_update_data_request import LLMObsDatasetUpdateDataRequest + +class LLMObsDatasetUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_update_data_request import LLMObsDatasetUpdateDataRequest + return { + "data": (LLMObsDatasetUpdateDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDatasetUpdateDataRequest, **kwargs): + """ + Request to partially update an LLM Observability dataset. + + :param data: Data object for updating an LLM Observability dataset. + :type data: LLMObsDatasetUpdateDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_dataset_version_data.py b/datadog_api_client/v2/model/llm_obs_dataset_version_data.py new file mode 100644 index 0000000000..943654d31b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_version_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_version_data_attributes import LLMObsDatasetVersionDataAttributes + from datadog_api_client.v2.model.llm_obs_dataset_version_type import LLMObsDatasetVersionType + +class LLMObsDatasetVersionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_version_data_attributes import LLMObsDatasetVersionDataAttributes + from datadog_api_client.v2.model.llm_obs_dataset_version_type import LLMObsDatasetVersionType + return { + "attributes": (LLMObsDatasetVersionDataAttributes,), + "id": (str,), + "type": (LLMObsDatasetVersionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDatasetVersionDataAttributes, id: str, type: LLMObsDatasetVersionType, **kwargs): + """ + Data object for an LLM Observability dataset version. + + :param attributes: Attributes of an LLM Observability dataset version. + :type attributes: LLMObsDatasetVersionDataAttributes + + :param id: Unique identifier of the dataset version. + :type id: str + + :param type: Resource type of an LLM Observability dataset version. + :type type: LLMObsDatasetVersionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_dataset_version_data_attributes.py b/datadog_api_client/v2/model/llm_obs_dataset_version_data_attributes.py new file mode 100644 index 0000000000..a768ee2ea8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_version_data_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDatasetVersionDataAttributes(ModelNormal): + validations = { + "version_number": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "dataset_id": (str,), + "last_used": (datetime, none_type), + "version_number": (int,), + } + attribute_map = { + "dataset_id": "dataset_id", + "last_used": "last_used", + "version_number": "version_number", + } + + def __init__(self_, dataset_id: str, last_used: Union[datetime, none_type], version_number: int, **kwargs): + """ + Attributes of an LLM Observability dataset version. + + :param dataset_id: Unique identifier of the dataset this version belongs to. + :type dataset_id: str + + :param last_used: Timestamp when this dataset version was last referenced. Null if the version has never been used. + :type last_used: datetime, none_type + + :param version_number: Sequential version number for this dataset version. + :type version_number: int + """ + super().__init__(kwargs) + + + self_.dataset_id = dataset_id + self_.last_used = last_used + self_.version_number = version_number diff --git a/datadog_api_client/v2/model/llm_obs_dataset_version_type.py b/datadog_api_client/v2/model/llm_obs_dataset_version_type.py new file mode 100644 index 0000000000..21d6c05230 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_version_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsDatasetVersionType(ModelSimple): + """ + Resource type of an LLM Observability dataset version. + + :param value: If omitted defaults to "dataset_version". Must be one of ["dataset_version"]. + :type value: str + """ + + allowed_values = { + "dataset_version", + } + DATASET_VERSION: ClassVar["LLMObsDatasetVersionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsDatasetVersionType.DATASET_VERSION = LLMObsDatasetVersionType("dataset_version") diff --git a/datadog_api_client/v2/model/llm_obs_dataset_versions_response.py b/datadog_api_client/v2/model/llm_obs_dataset_versions_response.py new file mode 100644 index 0000000000..26202eb70f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_dataset_versions_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_version_data import LLMObsDatasetVersionData + +class LLMObsDatasetVersionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_version_data import LLMObsDatasetVersionData + return { + "data": ([LLMObsDatasetVersionData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[LLMObsDatasetVersionData], **kwargs): + """ + Response containing the active versions of an LLM Observability dataset. + + :param data: List of dataset versions. + :type data: [LLMObsDatasetVersionData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_datasets_response.py b/datadog_api_client/v2/model/llm_obs_datasets_response.py new file mode 100644 index 0000000000..a2c6ef596a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_datasets_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_data_response import LLMObsDatasetDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + +class LLMObsDatasetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_data_response import LLMObsDatasetDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + return { + "data": ([LLMObsDatasetDataResponse],), + "meta": (LLMObsCursorMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[LLMObsDatasetDataResponse], meta: Union[LLMObsCursorMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of LLM Observability datasets. + + :param data: List of datasets. + :type data: [LLMObsDatasetDataResponse] + + :param meta: Pagination cursor metadata. + :type meta: LLMObsCursorMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotation_error.py b/datadog_api_client/v2/model/llm_obs_delete_annotation_error.py new file mode 100644 index 0000000000..ea079092b9 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotation_error.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDeleteAnnotationError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "annotation_id": (str,), + "error": (str,), + } + attribute_map = { + "annotation_id": "annotation_id", + "error": "error", + } + + def __init__(self_, annotation_id: str, error: str, **kwargs): + """ + A partial error for a single annotation that could not be deleted. + + :param annotation_id: ID of the annotation that could not be deleted. + :type annotation_id: str + + :param error: Error message. + :type error: str + """ + super().__init__(kwargs) + + + self_.annotation_id = annotation_id + self_.error = error diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotation_queue_interactions_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_delete_annotation_queue_interactions_data_attributes_request.py new file mode 100644 index 0000000000..48c31c4555 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotation_queue_interactions_data_attributes_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDeleteAnnotationQueueInteractionsDataAttributesRequest(ModelNormal): + validations = { + "interaction_ids": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "interaction_ids": ([str],), + } + attribute_map = { + "interaction_ids": "interaction_ids", + } + + def __init__(self_, interaction_ids: List[str], **kwargs): + """ + Attributes for deleting interactions from an annotation queue. + + :param interaction_ids: List of interaction IDs to delete. Must contain at least one item. + :type interaction_ids: [str] + """ + super().__init__(kwargs) + + + self_.interaction_ids = interaction_ids diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotation_queue_interactions_data_request.py b/datadog_api_client/v2/model/llm_obs_delete_annotation_queue_interactions_data_request.py new file mode 100644 index 0000000000..9057393f52 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotation_queue_interactions_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_annotation_queue_interactions_data_attributes_request import LLMObsDeleteAnnotationQueueInteractionsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_type import LLMObsAnnotationQueueInteractionsType + +class LLMObsDeleteAnnotationQueueInteractionsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_annotation_queue_interactions_data_attributes_request import LLMObsDeleteAnnotationQueueInteractionsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_type import LLMObsAnnotationQueueInteractionsType + return { + "attributes": (LLMObsDeleteAnnotationQueueInteractionsDataAttributesRequest,), + "type": (LLMObsAnnotationQueueInteractionsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDeleteAnnotationQueueInteractionsDataAttributesRequest, type: LLMObsAnnotationQueueInteractionsType, **kwargs): + """ + Data object for deleting interactions from an annotation queue. + + :param attributes: Attributes for deleting interactions from an annotation queue. + :type attributes: LLMObsDeleteAnnotationQueueInteractionsDataAttributesRequest + + :param type: Resource type for annotation queue interactions. + :type type: LLMObsAnnotationQueueInteractionsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotation_queue_interactions_request.py b/datadog_api_client/v2/model/llm_obs_delete_annotation_queue_interactions_request.py new file mode 100644 index 0000000000..1f53d122ce --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotation_queue_interactions_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_annotation_queue_interactions_data_request import LLMObsDeleteAnnotationQueueInteractionsDataRequest + +class LLMObsDeleteAnnotationQueueInteractionsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_annotation_queue_interactions_data_request import LLMObsDeleteAnnotationQueueInteractionsDataRequest + return { + "data": (LLMObsDeleteAnnotationQueueInteractionsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDeleteAnnotationQueueInteractionsDataRequest, **kwargs): + """ + Request to delete interactions from an LLM Observability annotation queue. + + :param data: Data object for deleting interactions from an annotation queue. + :type data: LLMObsDeleteAnnotationQueueInteractionsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotations_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_delete_annotations_data_attributes_request.py new file mode 100644 index 0000000000..48c19ad176 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotations_data_attributes_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDeleteAnnotationsDataAttributesRequest(ModelNormal): + validations = { + "annotation_ids": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "annotation_ids": ([str],), + } + attribute_map = { + "annotation_ids": "annotation_ids", + } + + def __init__(self_, annotation_ids: List[str], **kwargs): + """ + Attributes for deleting annotations. + + :param annotation_ids: IDs of the annotations to delete. Must contain at least one item. + :type annotation_ids: [str] + """ + super().__init__(kwargs) + + + self_.annotation_ids = annotation_ids diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotations_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_delete_annotations_data_attributes_response.py new file mode 100644 index 0000000000..cf220fd48f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotations_data_attributes_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_annotation_error import LLMObsDeleteAnnotationError + +class LLMObsDeleteAnnotationsDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_annotation_error import LLMObsDeleteAnnotationError + return { + "annotation_ids": ([str],), + "errors": ([LLMObsDeleteAnnotationError],), + } + attribute_map = { + "annotation_ids": "annotation_ids", + "errors": "errors", + } + + def __init__(self_, annotation_ids: List[str], errors: List[LLMObsDeleteAnnotationError], **kwargs): + """ + Attributes of the annotation deletion response. + + :param annotation_ids: IDs of the successfully deleted annotations. + :type annotation_ids: [str] + + :param errors: Errors for annotations that could not be deleted. + :type errors: [LLMObsDeleteAnnotationError] + """ + super().__init__(kwargs) + + + self_.annotation_ids = annotation_ids + self_.errors = errors diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotations_data_request.py b/datadog_api_client/v2/model/llm_obs_delete_annotations_data_request.py new file mode 100644 index 0000000000..4a0d5d5d8d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotations_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_annotations_data_attributes_request import LLMObsDeleteAnnotationsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotations_type import LLMObsAnnotationsType + +class LLMObsDeleteAnnotationsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_annotations_data_attributes_request import LLMObsDeleteAnnotationsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_annotations_type import LLMObsAnnotationsType + return { + "attributes": (LLMObsDeleteAnnotationsDataAttributesRequest,), + "type": (LLMObsAnnotationsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDeleteAnnotationsDataAttributesRequest, type: LLMObsAnnotationsType, **kwargs): + """ + Data object for deleting annotations. + + :param attributes: Attributes for deleting annotations. + :type attributes: LLMObsDeleteAnnotationsDataAttributesRequest + + :param type: Resource type for LLM Observability annotations. + :type type: LLMObsAnnotationsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotations_data_response.py b/datadog_api_client/v2/model/llm_obs_delete_annotations_data_response.py new file mode 100644 index 0000000000..c36fb03d42 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotations_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_annotations_data_attributes_response import LLMObsDeleteAnnotationsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotations_type import LLMObsAnnotationsType + +class LLMObsDeleteAnnotationsDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_annotations_data_attributes_response import LLMObsDeleteAnnotationsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_annotations_type import LLMObsAnnotationsType + return { + "attributes": (LLMObsDeleteAnnotationsDataAttributesResponse,), + "id": (str,), + "type": (LLMObsAnnotationsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDeleteAnnotationsDataAttributesResponse, id: str, type: LLMObsAnnotationsType, **kwargs): + """ + Data object for the annotation deletion response. + + :param attributes: Attributes of the annotation deletion response. + :type attributes: LLMObsDeleteAnnotationsDataAttributesResponse + + :param id: The annotation queue ID. + :type id: str + + :param type: Resource type for LLM Observability annotations. + :type type: LLMObsAnnotationsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotations_request.py b/datadog_api_client/v2/model/llm_obs_delete_annotations_request.py new file mode 100644 index 0000000000..d5ac6e8241 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotations_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_annotations_data_request import LLMObsDeleteAnnotationsDataRequest + +class LLMObsDeleteAnnotationsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_annotations_data_request import LLMObsDeleteAnnotationsDataRequest + return { + "data": (LLMObsDeleteAnnotationsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDeleteAnnotationsDataRequest, **kwargs): + """ + Request to delete annotations from an annotation queue. + + :param data: Data object for deleting annotations. + :type data: LLMObsDeleteAnnotationsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_delete_annotations_response.py b/datadog_api_client/v2/model/llm_obs_delete_annotations_response.py new file mode 100644 index 0000000000..53369ed229 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_annotations_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_annotations_data_response import LLMObsDeleteAnnotationsDataResponse + +class LLMObsDeleteAnnotationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_annotations_data_response import LLMObsDeleteAnnotationsDataResponse + return { + "data": (LLMObsDeleteAnnotationsDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDeleteAnnotationsDataResponse, **kwargs): + """ + Response for a batch annotation deletion. Partial errors are listed in the + response if any annotations could not be deleted. + + :param data: Data object for the annotation deletion response. + :type data: LLMObsDeleteAnnotationsDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_delete_dataset_records_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_delete_dataset_records_data_attributes_request.py new file mode 100644 index 0000000000..6c2d2de5f3 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_dataset_records_data_attributes_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDeleteDatasetRecordsDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "record_ids": ([str],), + } + attribute_map = { + "record_ids": "record_ids", + } + + def __init__(self_, record_ids: List[str], **kwargs): + """ + Attributes for deleting records from an LLM Observability dataset. + + :param record_ids: List of record IDs to delete. + :type record_ids: [str] + """ + super().__init__(kwargs) + + + self_.record_ids = record_ids diff --git a/datadog_api_client/v2/model/llm_obs_delete_dataset_records_data_request.py b/datadog_api_client/v2/model/llm_obs_delete_dataset_records_data_request.py new file mode 100644 index 0000000000..b8b8c1e719 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_dataset_records_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_dataset_records_data_attributes_request import LLMObsDeleteDatasetRecordsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_record_type import LLMObsRecordType + +class LLMObsDeleteDatasetRecordsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_dataset_records_data_attributes_request import LLMObsDeleteDatasetRecordsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_record_type import LLMObsRecordType + return { + "attributes": (LLMObsDeleteDatasetRecordsDataAttributesRequest,), + "type": (LLMObsRecordType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDeleteDatasetRecordsDataAttributesRequest, type: LLMObsRecordType, **kwargs): + """ + Data object for deleting records from an LLM Observability dataset. + + :param attributes: Attributes for deleting records from an LLM Observability dataset. + :type attributes: LLMObsDeleteDatasetRecordsDataAttributesRequest + + :param type: Resource type of LLM Observability dataset records. + :type type: LLMObsRecordType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_delete_dataset_records_request.py b/datadog_api_client/v2/model/llm_obs_delete_dataset_records_request.py new file mode 100644 index 0000000000..ac49d8ac44 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_dataset_records_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_dataset_records_data_request import LLMObsDeleteDatasetRecordsDataRequest + +class LLMObsDeleteDatasetRecordsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_dataset_records_data_request import LLMObsDeleteDatasetRecordsDataRequest + return { + "data": (LLMObsDeleteDatasetRecordsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDeleteDatasetRecordsDataRequest, **kwargs): + """ + Request to delete records from an LLM Observability dataset. + + :param data: Data object for deleting records from an LLM Observability dataset. + :type data: LLMObsDeleteDatasetRecordsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_delete_datasets_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_delete_datasets_data_attributes_request.py new file mode 100644 index 0000000000..1c7d33e52d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_datasets_data_attributes_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDeleteDatasetsDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dataset_ids": ([str],), + } + attribute_map = { + "dataset_ids": "dataset_ids", + } + + def __init__(self_, dataset_ids: List[str], **kwargs): + """ + Attributes for deleting LLM Observability datasets. + + :param dataset_ids: List of dataset IDs to delete. + :type dataset_ids: [str] + """ + super().__init__(kwargs) + + + self_.dataset_ids = dataset_ids diff --git a/datadog_api_client/v2/model/llm_obs_delete_datasets_data_request.py b/datadog_api_client/v2/model/llm_obs_delete_datasets_data_request.py new file mode 100644 index 0000000000..07358ac541 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_datasets_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_datasets_data_attributes_request import LLMObsDeleteDatasetsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + +class LLMObsDeleteDatasetsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_datasets_data_attributes_request import LLMObsDeleteDatasetsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType + return { + "attributes": (LLMObsDeleteDatasetsDataAttributesRequest,), + "type": (LLMObsDatasetType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDeleteDatasetsDataAttributesRequest, type: LLMObsDatasetType, **kwargs): + """ + Data object for deleting LLM Observability datasets. + + :param attributes: Attributes for deleting LLM Observability datasets. + :type attributes: LLMObsDeleteDatasetsDataAttributesRequest + + :param type: Resource type of an LLM Observability dataset. + :type type: LLMObsDatasetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_delete_datasets_request.py b/datadog_api_client/v2/model/llm_obs_delete_datasets_request.py new file mode 100644 index 0000000000..7fe19619cd --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_datasets_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_datasets_data_request import LLMObsDeleteDatasetsDataRequest + +class LLMObsDeleteDatasetsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_datasets_data_request import LLMObsDeleteDatasetsDataRequest + return { + "data": (LLMObsDeleteDatasetsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDeleteDatasetsDataRequest, **kwargs): + """ + Request to delete one or more LLM Observability datasets. + + :param data: Data object for deleting LLM Observability datasets. + :type data: LLMObsDeleteDatasetsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_delete_experiments_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_delete_experiments_data_attributes_request.py new file mode 100644 index 0000000000..faedb4ead7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_experiments_data_attributes_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDeleteExperimentsDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "experiment_ids": ([str],), + } + attribute_map = { + "experiment_ids": "experiment_ids", + } + + def __init__(self_, experiment_ids: List[str], **kwargs): + """ + Attributes for deleting LLM Observability experiments. + + :param experiment_ids: List of experiment IDs to delete. + :type experiment_ids: [str] + """ + super().__init__(kwargs) + + + self_.experiment_ids = experiment_ids diff --git a/datadog_api_client/v2/model/llm_obs_delete_experiments_data_request.py b/datadog_api_client/v2/model/llm_obs_delete_experiments_data_request.py new file mode 100644 index 0000000000..8f40e480d8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_experiments_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_experiments_data_attributes_request import LLMObsDeleteExperimentsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experiment_type import LLMObsExperimentType + +class LLMObsDeleteExperimentsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_experiments_data_attributes_request import LLMObsDeleteExperimentsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experiment_type import LLMObsExperimentType + return { + "attributes": (LLMObsDeleteExperimentsDataAttributesRequest,), + "type": (LLMObsExperimentType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDeleteExperimentsDataAttributesRequest, type: LLMObsExperimentType, **kwargs): + """ + Data object for deleting LLM Observability experiments. + + :param attributes: Attributes for deleting LLM Observability experiments. + :type attributes: LLMObsDeleteExperimentsDataAttributesRequest + + :param type: Resource type of an LLM Observability experiment. + :type type: LLMObsExperimentType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_delete_experiments_request.py b/datadog_api_client/v2/model/llm_obs_delete_experiments_request.py new file mode 100644 index 0000000000..0f461564fe --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_experiments_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_experiments_data_request import LLMObsDeleteExperimentsDataRequest + +class LLMObsDeleteExperimentsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_experiments_data_request import LLMObsDeleteExperimentsDataRequest + return { + "data": (LLMObsDeleteExperimentsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDeleteExperimentsDataRequest, **kwargs): + """ + Request to delete one or more LLM Observability experiments. + + :param data: Data object for deleting LLM Observability experiments. + :type data: LLMObsDeleteExperimentsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_delete_projects_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_delete_projects_data_attributes_request.py new file mode 100644 index 0000000000..d0ff36665e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_projects_data_attributes_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDeleteProjectsDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "project_ids": ([str],), + } + attribute_map = { + "project_ids": "project_ids", + } + + def __init__(self_, project_ids: List[str], **kwargs): + """ + Attributes for deleting LLM Observability projects. + + :param project_ids: List of project IDs to delete. + :type project_ids: [str] + """ + super().__init__(kwargs) + + + self_.project_ids = project_ids diff --git a/datadog_api_client/v2/model/llm_obs_delete_projects_data_request.py b/datadog_api_client/v2/model/llm_obs_delete_projects_data_request.py new file mode 100644 index 0000000000..203f64cb43 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_projects_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_projects_data_attributes_request import LLMObsDeleteProjectsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_project_type import LLMObsProjectType + +class LLMObsDeleteProjectsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_projects_data_attributes_request import LLMObsDeleteProjectsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_project_type import LLMObsProjectType + return { + "attributes": (LLMObsDeleteProjectsDataAttributesRequest,), + "type": (LLMObsProjectType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDeleteProjectsDataAttributesRequest, type: LLMObsProjectType, **kwargs): + """ + Data object for deleting LLM Observability projects. + + :param attributes: Attributes for deleting LLM Observability projects. + :type attributes: LLMObsDeleteProjectsDataAttributesRequest + + :param type: Resource type of an LLM Observability project. + :type type: LLMObsProjectType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_delete_projects_request.py b/datadog_api_client/v2/model/llm_obs_delete_projects_request.py new file mode 100644 index 0000000000..05eeb00366 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_delete_projects_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_delete_projects_data_request import LLMObsDeleteProjectsDataRequest + +class LLMObsDeleteProjectsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_delete_projects_data_request import LLMObsDeleteProjectsDataRequest + return { + "data": (LLMObsDeleteProjectsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDeleteProjectsDataRequest, **kwargs): + """ + Request to delete one or more LLM Observability projects. + + :param data: Data object for deleting LLM Observability projects. + :type data: LLMObsDeleteProjectsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_deleted_prompt_data.py b/datadog_api_client/v2/model/llm_obs_deleted_prompt_data.py new file mode 100644 index 0000000000..38a4749a52 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_deleted_prompt_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_deleted_prompt_data_attributes import LLMObsDeletedPromptDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + +class LLMObsDeletedPromptData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_deleted_prompt_data_attributes import LLMObsDeletedPromptDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + return { + "attributes": (LLMObsDeletedPromptDataAttributes,), + "id": (str,), + "type": (LLMObsPromptType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsDeletedPromptDataAttributes, id: str, type: LLMObsPromptType, **kwargs): + """ + Data object confirming that an LLM Observability prompt was deleted. + + :param attributes: Attributes confirming that an LLM Observability prompt was deleted. + :type attributes: LLMObsDeletedPromptDataAttributes + + :param id: Unique identifier of the deleted prompt. + :type id: str + + :param type: Resource type of an LLM Observability prompt. + :type type: LLMObsPromptType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_deleted_prompt_data_attributes.py b/datadog_api_client/v2/model/llm_obs_deleted_prompt_data_attributes.py new file mode 100644 index 0000000000..c10996f15f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_deleted_prompt_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsDeletedPromptDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_at": (datetime,), + "prompt_id": (str,), + } + attribute_map = { + "deleted_at": "deleted_at", + "prompt_id": "prompt_id", + } + + def __init__(self_, deleted_at: datetime, prompt_id: str, **kwargs): + """ + Attributes confirming that an LLM Observability prompt was deleted. + + :param deleted_at: Timestamp when the prompt was deleted. + :type deleted_at: datetime + + :param prompt_id: Customer-provided identifier of the deleted prompt. + :type prompt_id: str + """ + super().__init__(kwargs) + + + self_.deleted_at = deleted_at + self_.prompt_id = prompt_id diff --git a/datadog_api_client/v2/model/llm_obs_deleted_prompt_response.py b/datadog_api_client/v2/model/llm_obs_deleted_prompt_response.py new file mode 100644 index 0000000000..0c483f665d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_deleted_prompt_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_deleted_prompt_data import LLMObsDeletedPromptData + +class LLMObsDeletedPromptResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_deleted_prompt_data import LLMObsDeletedPromptData + return { + "data": (LLMObsDeletedPromptData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsDeletedPromptData, **kwargs): + """ + Response confirming that an LLM Observability prompt was deleted. + + :param data: Data object confirming that an LLM Observability prompt was deleted. + :type data: LLMObsDeletedPromptData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_display_block_annotated_interaction_item.py b/datadog_api_client/v2/model/llm_obs_display_block_annotated_interaction_item.py new file mode 100644 index 0000000000..18a6726549 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_display_block_annotated_interaction_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_item import LLMObsAnnotationItem + from datadog_api_client.v2.model.llm_obs_content_block import LLMObsContentBlock + from datadog_api_client.v2.model.llm_obs_display_block_interaction_type import LLMObsDisplayBlockInteractionType + +class LLMObsDisplayBlockAnnotatedInteractionItem(ModelNormal): + validations = { + "display_block": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_item import LLMObsAnnotationItem + from datadog_api_client.v2.model.llm_obs_content_block import LLMObsContentBlock + from datadog_api_client.v2.model.llm_obs_display_block_interaction_type import LLMObsDisplayBlockInteractionType + return { + "annotations": ([LLMObsAnnotationItem],), + "content_id": (str,), + "display_block": ([LLMObsContentBlock],), + "id": (str,), + "type": (LLMObsDisplayBlockInteractionType,), + } + attribute_map = { + "annotations": "annotations", + "content_id": "content_id", + "display_block": "display_block", + "id": "id", + "type": "type", + } + + def __init__(self_, annotations: List[LLMObsAnnotationItem], content_id: str, display_block: List[LLMObsContentBlock], id: str, type: LLMObsDisplayBlockInteractionType, **kwargs): + """ + A display_block interaction with its associated annotations. + + :param annotations: List of annotations for this interaction. + :type annotations: [LLMObsAnnotationItem] + + :param content_id: Server-generated deterministic identifier derived from the block list. + :type content_id: str + + :param display_block: List of content blocks that make up a ``display_block`` interaction. + Must contain at least one block. + :type display_block: [LLMObsContentBlock] + + :param id: Unique identifier of the interaction. + :type id: str + + :param type: Type discriminator for a ``display_block`` interaction. + :type type: LLMObsDisplayBlockInteractionType + """ + super().__init__(kwargs) + + + self_.annotations = annotations + self_.content_id = content_id + self_.display_block = display_block + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_display_block_interaction_item.py b/datadog_api_client/v2/model/llm_obs_display_block_interaction_item.py new file mode 100644 index 0000000000..926de93136 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_display_block_interaction_item.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_content_block import LLMObsContentBlock + from datadog_api_client.v2.model.llm_obs_display_block_interaction_type import LLMObsDisplayBlockInteractionType + +class LLMObsDisplayBlockInteractionItem(ModelNormal): + validations = { + "display_block": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_content_block import LLMObsContentBlock + from datadog_api_client.v2.model.llm_obs_display_block_interaction_type import LLMObsDisplayBlockInteractionType + return { + "display_block": ([LLMObsContentBlock],), + "type": (LLMObsDisplayBlockInteractionType,), + } + attribute_map = { + "display_block": "display_block", + "type": "type", + } + + def __init__(self_, display_block: List[LLMObsContentBlock], type: LLMObsDisplayBlockInteractionType, **kwargs): + """ + An interaction whose rendered content is supplied directly as a list + of display blocks. The server generates ``content_id`` deterministically + from the block list. + + :param display_block: List of content blocks that make up a ``display_block`` interaction. + Must contain at least one block. + :type display_block: [LLMObsContentBlock] + + :param type: Type discriminator for a ``display_block`` interaction. + :type type: LLMObsDisplayBlockInteractionType + """ + super().__init__(kwargs) + + + self_.display_block = display_block + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_display_block_interaction_response_item.py b/datadog_api_client/v2/model/llm_obs_display_block_interaction_response_item.py new file mode 100644 index 0000000000..07c09ff7c2 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_display_block_interaction_response_item.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_content_block import LLMObsContentBlock + from datadog_api_client.v2.model.llm_obs_display_block_interaction_type import LLMObsDisplayBlockInteractionType + +class LLMObsDisplayBlockInteractionResponseItem(ModelNormal): + validations = { + "display_block": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_content_block import LLMObsContentBlock + from datadog_api_client.v2.model.llm_obs_display_block_interaction_type import LLMObsDisplayBlockInteractionType + return { + "already_existed": (bool,), + "content_id": (str,), + "display_block": ([LLMObsContentBlock],), + "id": (str,), + "type": (LLMObsDisplayBlockInteractionType,), + } + attribute_map = { + "already_existed": "already_existed", + "content_id": "content_id", + "display_block": "display_block", + "id": "id", + "type": "type", + } + + def __init__(self_, already_existed: bool, content_id: str, display_block: List[LLMObsContentBlock], id: str, type: LLMObsDisplayBlockInteractionType, **kwargs): + """ + A display_block interaction result. + + :param already_existed: Whether this interaction already existed in the queue. + :type already_existed: bool + + :param content_id: Server-generated deterministic identifier derived from the block list. + :type content_id: str + + :param display_block: List of content blocks that make up a ``display_block`` interaction. + Must contain at least one block. + :type display_block: [LLMObsContentBlock] + + :param id: Unique identifier of the interaction. + :type id: str + + :param type: Type discriminator for a ``display_block`` interaction. + :type type: LLMObsDisplayBlockInteractionType + """ + super().__init__(kwargs) + + + self_.already_existed = already_existed + self_.content_id = content_id + self_.display_block = display_block + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_display_block_interaction_type.py b/datadog_api_client/v2/model/llm_obs_display_block_interaction_type.py new file mode 100644 index 0000000000..a5c21b0eab --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_display_block_interaction_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsDisplayBlockInteractionType(ModelSimple): + """ + Type discriminator for a `display_block` interaction. + + :param value: If omitted defaults to "display_block". Must be one of ["display_block"]. + :type value: str + """ + + allowed_values = { + "display_block", + } + DISPLAY_BLOCK: ClassVar["LLMObsDisplayBlockInteractionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsDisplayBlockInteractionType.DISPLAY_BLOCK = LLMObsDisplayBlockInteractionType("display_block") diff --git a/datadog_api_client/v2/model/llm_obs_event_type.py b/datadog_api_client/v2/model/llm_obs_event_type.py new file mode 100644 index 0000000000..9c9899a19e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_event_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsEventType(ModelSimple): + """ + Resource type for LLM Observability experiment events. + + :param value: If omitted defaults to "events". Must be one of ["events"]. + :type value: str + """ + + allowed_values = { + "events", + } + EVENTS: ClassVar["LLMObsEventType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsEventType.EVENTS = LLMObsEventType("events") diff --git a/datadog_api_client/v2/model/llm_obs_experiment_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_experiment_data_attributes_request.py new file mode 100644 index 0000000000..9080df642b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_data_attributes_request.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentDataAttributesRequest(ModelNormal): + validations = { + "run_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "config": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "dataset_id": (str,), + "dataset_version": (int,), + "description": (str,), + "ensure_unique": (bool,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "name": (str,), + "parent_experiment_id": (str,), + "project_id": (str,), + "run_count": (int,), + } + attribute_map = { + "config": "config", + "dataset_id": "dataset_id", + "dataset_version": "dataset_version", + "description": "description", + "ensure_unique": "ensure_unique", + "metadata": "metadata", + "name": "name", + "parent_experiment_id": "parent_experiment_id", + "project_id": "project_id", + "run_count": "run_count", + } + + def __init__(self_, name: str, project_id: str, config: Union[Dict[str, Any], UnsetType]=unset, dataset_id: Union[str, UnsetType]=unset, dataset_version: Union[int, UnsetType]=unset, description: Union[str, UnsetType]=unset, ensure_unique: Union[bool, UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, parent_experiment_id: Union[str, UnsetType]=unset, run_count: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for creating an LLM Observability experiment. + + :param config: Configuration parameters for the experiment. + :type config: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param dataset_id: Identifier of the dataset used in this experiment. + :type dataset_id: str, optional + + :param dataset_version: Version of the dataset to use. Defaults to the current version if not specified. + :type dataset_version: int, optional + + :param description: Description of the experiment. + :type description: str, optional + + :param ensure_unique: Whether to ensure the experiment name is unique. Defaults to ``true``. + :type ensure_unique: bool, optional + + :param metadata: Arbitrary metadata associated with the experiment. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param name: Name of the experiment. + :type name: str + + :param parent_experiment_id: Identifier of the parent (baseline) experiment this experiment is run against. + :type parent_experiment_id: str, optional + + :param project_id: Identifier of the project this experiment belongs to. + :type project_id: str + + :param run_count: Number of runs configured for this experiment. + :type run_count: int, optional + """ + if config is not unset: + kwargs["config"] = config + if dataset_id is not unset: + kwargs["dataset_id"] = dataset_id + if dataset_version is not unset: + kwargs["dataset_version"] = dataset_version + if description is not unset: + kwargs["description"] = description + if ensure_unique is not unset: + kwargs["ensure_unique"] = ensure_unique + if metadata is not unset: + kwargs["metadata"] = metadata + if parent_experiment_id is not unset: + kwargs["parent_experiment_id"] = parent_experiment_id + if run_count is not unset: + kwargs["run_count"] = run_count + super().__init__(kwargs) + + + self_.name = name + self_.project_id = project_id diff --git a/datadog_api_client/v2/model/llm_obs_experiment_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_experiment_data_attributes_response.py new file mode 100644 index 0000000000..c65d4f92be --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_data_attributes_response.py @@ -0,0 +1,168 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_user import LLMObsExperimentUser + from datadog_api_client.v2.model.llm_obs_experiment_status import LLMObsExperimentStatus + +class LLMObsExperimentDataAttributesResponse(ModelNormal): + validations = { + "run_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_user import LLMObsExperimentUser + from datadog_api_client.v2.model.llm_obs_experiment_status import LLMObsExperimentStatus + return { + "aggregate_data": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "author": (LLMObsExperimentUser,), + "config": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "created_at": (datetime,), + "dataset_id": (str,), + "dataset_name": (str, none_type), + "dataset_version": (int,), + "deleted_at": (datetime, none_type), + "description": (str, none_type), + "error": (str, none_type), + "experiment": (str,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "name": (str,), + "parent_experiment_id": (str, none_type), + "project_id": (str,), + "run_count": (int,), + "status": (LLMObsExperimentStatus,), + "updated_at": (datetime,), + } + attribute_map = { + "aggregate_data": "aggregate_data", + "author": "author", + "config": "config", + "created_at": "created_at", + "dataset_id": "dataset_id", + "dataset_name": "dataset_name", + "dataset_version": "dataset_version", + "deleted_at": "deleted_at", + "description": "description", + "error": "error", + "experiment": "experiment", + "metadata": "metadata", + "name": "name", + "parent_experiment_id": "parent_experiment_id", + "project_id": "project_id", + "run_count": "run_count", + "status": "status", + "updated_at": "updated_at", + } + + def __init__(self_, config: Union[Dict[str, Any], none_type], created_at: datetime, dataset_id: str, description: Union[str, none_type], metadata: Union[Dict[str, Any], none_type], name: str, project_id: str, updated_at: datetime, aggregate_data: Union[Dict[str, Any], none_type, UnsetType]=unset, author: Union[LLMObsExperimentUser, UnsetType]=unset, dataset_name: Union[str, none_type, UnsetType]=unset, dataset_version: Union[int, UnsetType]=unset, deleted_at: Union[datetime, none_type, UnsetType]=unset, error: Union[str, none_type, UnsetType]=unset, experiment: Union[str, UnsetType]=unset, parent_experiment_id: Union[str, none_type, UnsetType]=unset, run_count: Union[int, UnsetType]=unset, status: Union[LLMObsExperimentStatus, UnsetType]=unset, **kwargs): + """ + Attributes of an LLM Observability experiment. + + :param aggregate_data: Pre-computed aggregate metrics for this experiment run, including eval score distributions, token costs, and error rates. + :type aggregate_data: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type, optional + + :param author: User data for the author of an experiment. Only present when ``include[user_data]`` is ``true``. + :type author: LLMObsExperimentUser, optional + + :param config: Configuration parameters for the experiment. + :type config: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type + + :param created_at: Timestamp when the experiment was created. + :type created_at: datetime + + :param dataset_id: Identifier of the dataset used in this experiment. + :type dataset_id: str + + :param dataset_name: Name of the dataset used in this experiment. + Only present when ``include[dataset_names]`` is ``true``. + :type dataset_name: str, none_type, optional + + :param dataset_version: Version of the dataset used in this experiment. + :type dataset_version: int, optional + + :param deleted_at: Timestamp when the experiment was soft-deleted, if applicable. + :type deleted_at: datetime, none_type, optional + + :param description: Description of the experiment. + :type description: str, none_type + + :param error: Error message describing why the experiment failed, if applicable. + :type error: str, none_type, optional + + :param experiment: Logical name of the experiment, shared across all runs of the same pipeline. + :type experiment: str, optional + + :param metadata: Arbitrary metadata associated with the experiment. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type + + :param name: Name of the experiment. + :type name: str + + :param parent_experiment_id: Identifier of the parent (baseline) experiment this experiment was run against, if any. + :type parent_experiment_id: str, none_type, optional + + :param project_id: Identifier of the project this experiment belongs to. + :type project_id: str + + :param run_count: Expected number of runs for this experiment. + :type run_count: int, optional + + :param status: Execution status of an LLM Observability experiment. + :type status: LLMObsExperimentStatus, optional + + :param updated_at: Timestamp when the experiment was last updated. + :type updated_at: datetime + """ + if aggregate_data is not unset: + kwargs["aggregate_data"] = aggregate_data + if author is not unset: + kwargs["author"] = author + if dataset_name is not unset: + kwargs["dataset_name"] = dataset_name + if dataset_version is not unset: + kwargs["dataset_version"] = dataset_version + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if error is not unset: + kwargs["error"] = error + if experiment is not unset: + kwargs["experiment"] = experiment + if parent_experiment_id is not unset: + kwargs["parent_experiment_id"] = parent_experiment_id + if run_count is not unset: + kwargs["run_count"] = run_count + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + + self_.config = config + self_.created_at = created_at + self_.dataset_id = dataset_id + self_.description = description + self_.metadata = metadata + self_.name = name + self_.project_id = project_id + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/llm_obs_experiment_data_request.py b/datadog_api_client/v2/model/llm_obs_experiment_data_request.py new file mode 100644 index 0000000000..d5a684eb99 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_data_attributes_request import LLMObsExperimentDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experiment_type import LLMObsExperimentType + +class LLMObsExperimentDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_data_attributes_request import LLMObsExperimentDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experiment_type import LLMObsExperimentType + return { + "attributes": (LLMObsExperimentDataAttributesRequest,), + "type": (LLMObsExperimentType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentDataAttributesRequest, type: LLMObsExperimentType, **kwargs): + """ + Data object for creating an LLM Observability experiment. + + :param attributes: Attributes for creating an LLM Observability experiment. + :type attributes: LLMObsExperimentDataAttributesRequest + + :param type: Resource type of an LLM Observability experiment. + :type type: LLMObsExperimentType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experiment_data_response.py b/datadog_api_client/v2/model/llm_obs_experiment_data_response.py new file mode 100644 index 0000000000..31c527be3e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_data_attributes_response import LLMObsExperimentDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_experiment_type import LLMObsExperimentType + +class LLMObsExperimentDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_data_attributes_response import LLMObsExperimentDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_experiment_type import LLMObsExperimentType + return { + "attributes": (LLMObsExperimentDataAttributesResponse,), + "id": (str,), + "type": (LLMObsExperimentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentDataAttributesResponse, id: str, type: LLMObsExperimentType, **kwargs): + """ + Data object for an LLM Observability experiment. + + :param attributes: Attributes of an LLM Observability experiment. + :type attributes: LLMObsExperimentDataAttributesResponse + + :param id: Unique identifier of the experiment. + :type id: str + + :param type: Resource type of an LLM Observability experiment. + :type type: LLMObsExperimentType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experiment_eval_metric_event.py b/datadog_api_client/v2/model/llm_obs_experiment_eval_metric_event.py new file mode 100644 index 0000000000..55b5d6df9d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_eval_metric_event.py @@ -0,0 +1,156 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_metric_assessment import LLMObsMetricAssessment + from datadog_api_client.v2.model.llm_obs_metric_score_type import LLMObsMetricScoreType + +class LLMObsExperimentEvalMetricEvent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_metric_assessment import LLMObsMetricAssessment + from datadog_api_client.v2.model.llm_obs_metric_score_type import LLMObsMetricScoreType + return { + "assessment": (LLMObsMetricAssessment,), + "boolean_value": (bool, none_type), + "categorical_value": (str, none_type), + "eval_source_type": (str,), + "id": (str,), + "json_value": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "label": (str,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "metric_source": (str,), + "metric_type": (LLMObsMetricScoreType,), + "reasoning": (str, none_type), + "score_value": (float, none_type), + "span_id": (str,), + "tags": ([str],), + "timestamp_ms": (int,), + "trace_id": (str,), + } + attribute_map = { + "assessment": "assessment", + "boolean_value": "boolean_value", + "categorical_value": "categorical_value", + "eval_source_type": "eval_source_type", + "id": "id", + "json_value": "json_value", + "label": "label", + "metadata": "metadata", + "metric_source": "metric_source", + "metric_type": "metric_type", + "reasoning": "reasoning", + "score_value": "score_value", + "span_id": "span_id", + "tags": "tags", + "timestamp_ms": "timestamp_ms", + "trace_id": "trace_id", + } + + def __init__(self_, assessment: Union[LLMObsMetricAssessment, UnsetType]=unset, boolean_value: Union[bool, none_type, UnsetType]=unset, categorical_value: Union[str, none_type, UnsetType]=unset, eval_source_type: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, json_value: Union[Dict[str, Any], none_type, UnsetType]=unset, label: Union[str, UnsetType]=unset, metadata: Union[Dict[str, Any], none_type, UnsetType]=unset, metric_source: Union[str, UnsetType]=unset, metric_type: Union[LLMObsMetricScoreType, UnsetType]=unset, reasoning: Union[str, none_type, UnsetType]=unset, score_value: Union[float, none_type, UnsetType]=unset, span_id: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp_ms: Union[int, UnsetType]=unset, trace_id: Union[str, UnsetType]=unset, **kwargs): + """ + An evaluation metric event associated with an experiment span. + + :param assessment: Assessment result for an LLM Observability experiment metric. + :type assessment: LLMObsMetricAssessment, optional + + :param boolean_value: Boolean value. Present when ``metric_type`` is ``boolean``. + :type boolean_value: bool, none_type, optional + + :param categorical_value: Categorical value. Present when ``metric_type`` is ``categorical``. + :type categorical_value: str, none_type, optional + + :param eval_source_type: Source type of the evaluation. + :type eval_source_type: str, optional + + :param id: Unique identifier of the evaluation metric event. + :type id: str, optional + + :param json_value: JSON value. Present when ``metric_type`` is ``json``. + :type json_value: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type, optional + + :param label: Label or name for the metric. + :type label: str, optional + + :param metadata: Arbitrary metadata associated with the metric. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type, optional + + :param metric_source: Source of the metric. Either ``custom`` (user-submitted) or ``summary`` (experiment-level aggregate). + :type metric_source: str, optional + + :param metric_type: Type of metric recorded for an LLM Observability experiment. + :type metric_type: LLMObsMetricScoreType, optional + + :param reasoning: Human-readable reasoning for the metric value. + :type reasoning: str, none_type, optional + + :param score_value: Numeric score. Present when ``metric_type`` is ``score``. + :type score_value: float, none_type, optional + + :param span_id: Span ID this metric is associated with. + :type span_id: str, optional + + :param tags: Tags associated with the metric. + :type tags: [str], optional + + :param timestamp_ms: Timestamp when the metric was recorded, in milliseconds since Unix epoch. + :type timestamp_ms: int, optional + + :param trace_id: Trace ID linking this metric to a span. + :type trace_id: str, optional + """ + if assessment is not unset: + kwargs["assessment"] = assessment + if boolean_value is not unset: + kwargs["boolean_value"] = boolean_value + if categorical_value is not unset: + kwargs["categorical_value"] = categorical_value + if eval_source_type is not unset: + kwargs["eval_source_type"] = eval_source_type + if id is not unset: + kwargs["id"] = id + if json_value is not unset: + kwargs["json_value"] = json_value + if label is not unset: + kwargs["label"] = label + if metadata is not unset: + kwargs["metadata"] = metadata + if metric_source is not unset: + kwargs["metric_source"] = metric_source + if metric_type is not unset: + kwargs["metric_type"] = metric_type + if reasoning is not unset: + kwargs["reasoning"] = reasoning + if score_value is not unset: + kwargs["score_value"] = score_value + if span_id is not unset: + kwargs["span_id"] = span_id + if tags is not unset: + kwargs["tags"] = tags + if timestamp_ms is not unset: + kwargs["timestamp_ms"] = timestamp_ms + if trace_id is not unset: + kwargs["trace_id"] = trace_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experiment_events_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_experiment_events_data_attributes_request.py new file mode 100644 index 0000000000..21c7169adb --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_events_data_attributes_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_metric import LLMObsExperimentMetric + from datadog_api_client.v2.model.llm_obs_experiment_span import LLMObsExperimentSpan + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentEventsDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_metric import LLMObsExperimentMetric + from datadog_api_client.v2.model.llm_obs_experiment_span import LLMObsExperimentSpan + return { + "metrics": ([LLMObsExperimentMetric],), + "spans": ([LLMObsExperimentSpan],), + } + attribute_map = { + "metrics": "metrics", + "spans": "spans", + } + + def __init__(self_, metrics: Union[List[LLMObsExperimentMetric], UnsetType]=unset, spans: Union[List[LLMObsExperimentSpan], UnsetType]=unset, **kwargs): + """ + Attributes for pushing experiment events including spans and metrics. + + :param metrics: List of metrics to push for the experiment. + :type metrics: [LLMObsExperimentMetric], optional + + :param spans: List of spans to push for the experiment. + :type spans: [LLMObsExperimentSpan], optional + """ + if metrics is not unset: + kwargs["metrics"] = metrics + if spans is not unset: + kwargs["spans"] = spans + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experiment_events_data_request.py b/datadog_api_client/v2/model/llm_obs_experiment_events_data_request.py new file mode 100644 index 0000000000..7d89f13180 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_events_data_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_events_data_attributes_request import LLMObsExperimentEventsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_event_type import LLMObsEventType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentEventsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_events_data_attributes_request import LLMObsExperimentEventsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_event_type import LLMObsEventType + return { + "attributes": (LLMObsExperimentEventsDataAttributesRequest,), + "type": (LLMObsEventType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentEventsDataAttributesRequest, type: LLMObsEventType, **kwargs): + """ + Data object for pushing experiment events. + + :param attributes: Attributes for pushing experiment events including spans and metrics. + :type attributes: LLMObsExperimentEventsDataAttributesRequest + + :param type: Resource type for LLM Observability experiment events. + :type type: LLMObsEventType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experiment_events_request.py b/datadog_api_client/v2/model/llm_obs_experiment_events_request.py new file mode 100644 index 0000000000..13c3dc9807 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_events_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_events_data_request import LLMObsExperimentEventsDataRequest + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentEventsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_events_data_request import LLMObsExperimentEventsDataRequest + return { + "data": (LLMObsExperimentEventsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsExperimentEventsDataRequest, **kwargs): + """ + Request to push spans and metrics for an LLM Observability experiment. + + :param data: Data object for pushing experiment events. + :type data: LLMObsExperimentEventsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experiment_events_type.py b/datadog_api_client/v2/model/llm_obs_experiment_events_type.py new file mode 100644 index 0000000000..d6e400454c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_events_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsExperimentEventsType(ModelSimple): + """ + Resource type for an experiment events collection. + + :param value: If omitted defaults to "experiment_events". Must be one of ["experiment_events"]. + :type value: str + """ + + allowed_values = { + "experiment_events", + } + EXPERIMENT_EVENTS: ClassVar["LLMObsExperimentEventsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsExperimentEventsType.EXPERIMENT_EVENTS = LLMObsExperimentEventsType("experiment_events") diff --git a/datadog_api_client/v2/model/llm_obs_experiment_events_v2_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_experiment_events_v2_data_attributes_response.py new file mode 100644 index 0000000000..fdb1c61e75 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_events_v2_data_attributes_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_span_with_evals import LLMObsExperimentSpanWithEvals + from datadog_api_client.v2.model.llm_obs_experiment_eval_metric_event import LLMObsExperimentEvalMetricEvent + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentEventsV2DataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_span_with_evals import LLMObsExperimentSpanWithEvals + from datadog_api_client.v2.model.llm_obs_experiment_eval_metric_event import LLMObsExperimentEvalMetricEvent + return { + "spans": ([LLMObsExperimentSpanWithEvals],), + "summary_metrics": ([LLMObsExperimentEvalMetricEvent],), + } + attribute_map = { + "spans": "spans", + "summary_metrics": "summary_metrics", + } + + def __init__(self_, spans: List[LLMObsExperimentSpanWithEvals], summary_metrics: List[LLMObsExperimentEvalMetricEvent], **kwargs): + """ + Attributes of an experiment events response. + + :param spans: Experiment spans, each enriched with their associated evaluation metrics. + :type spans: [LLMObsExperimentSpanWithEvals] + + :param summary_metrics: Experiment-level summary evaluation metrics (not tied to individual spans). + :type summary_metrics: [LLMObsExperimentEvalMetricEvent] + """ + super().__init__(kwargs) + + + self_.spans = spans + self_.summary_metrics = summary_metrics diff --git a/datadog_api_client/v2/model/llm_obs_experiment_events_v2_data_response.py b/datadog_api_client/v2/model/llm_obs_experiment_events_v2_data_response.py new file mode 100644 index 0000000000..2f1a24d140 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_events_v2_data_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_events_v2_data_attributes_response import LLMObsExperimentEventsV2DataAttributesResponse + from datadog_api_client.v2.model.llm_obs_experiment_events_type import LLMObsExperimentEventsType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentEventsV2DataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_events_v2_data_attributes_response import LLMObsExperimentEventsV2DataAttributesResponse + from datadog_api_client.v2.model.llm_obs_experiment_events_type import LLMObsExperimentEventsType + return { + "attributes": (LLMObsExperimentEventsV2DataAttributesResponse,), + "id": (str,), + "type": (LLMObsExperimentEventsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentEventsV2DataAttributesResponse, id: str, type: LLMObsExperimentEventsType, **kwargs): + """ + JSON:API data object for an experiment events response. + + :param attributes: Attributes of an experiment events response. + :type attributes: LLMObsExperimentEventsV2DataAttributesResponse + + :param id: Identifier for this events resource. + :type id: str + + :param type: Resource type for an experiment events collection. + :type type: LLMObsExperimentEventsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experiment_events_v2_response.py b/datadog_api_client/v2/model/llm_obs_experiment_events_v2_response.py new file mode 100644 index 0000000000..ee565317f5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_events_v2_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_events_v2_data_response import LLMObsExperimentEventsV2DataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentEventsV2Response(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_events_v2_data_response import LLMObsExperimentEventsV2DataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + return { + "data": (LLMObsExperimentEventsV2DataResponse,), + "meta": (LLMObsCursorMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: LLMObsExperimentEventsV2DataResponse, meta: Union[LLMObsCursorMeta, UnsetType]=unset, **kwargs): + """ + Response for listing experiment events (v2/v3). Returns spans and summary metrics in a single resource. + + :param data: JSON:API data object for an experiment events response. + :type data: LLMObsExperimentEventsV2DataResponse + + :param meta: Pagination cursor metadata. + :type meta: LLMObsCursorMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experiment_metric.py b/datadog_api_client/v2/model/llm_obs_experiment_metric.py new file mode 100644 index 0000000000..13d279e610 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_metric.py @@ -0,0 +1,133 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_metric_assessment import LLMObsMetricAssessment + from datadog_api_client.v2.model.llm_obs_experiment_metric_error import LLMObsExperimentMetricError + from datadog_api_client.v2.model.llm_obs_metric_score_type import LLMObsMetricScoreType + +class LLMObsExperimentMetric(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_metric_assessment import LLMObsMetricAssessment + from datadog_api_client.v2.model.llm_obs_experiment_metric_error import LLMObsExperimentMetricError + from datadog_api_client.v2.model.llm_obs_metric_score_type import LLMObsMetricScoreType + return { + "assessment": (LLMObsMetricAssessment,), + "boolean_value": (bool,), + "categorical_value": (str,), + "error": (LLMObsExperimentMetricError,), + "json_value": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "label": (str,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "metric_type": (LLMObsMetricScoreType,), + "reasoning": (str,), + "score_value": (float,), + "span_id": (str,), + "tags": ([str],), + "timestamp_ms": (int,), + } + attribute_map = { + "assessment": "assessment", + "boolean_value": "boolean_value", + "categorical_value": "categorical_value", + "error": "error", + "json_value": "json_value", + "label": "label", + "metadata": "metadata", + "metric_type": "metric_type", + "reasoning": "reasoning", + "score_value": "score_value", + "span_id": "span_id", + "tags": "tags", + "timestamp_ms": "timestamp_ms", + } + + def __init__(self_, label: str, metric_type: LLMObsMetricScoreType, span_id: str, timestamp_ms: int, assessment: Union[LLMObsMetricAssessment, UnsetType]=unset, boolean_value: Union[bool, UnsetType]=unset, categorical_value: Union[str, UnsetType]=unset, error: Union[LLMObsExperimentMetricError, UnsetType]=unset, json_value: Union[Dict[str, Any], UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, reasoning: Union[str, UnsetType]=unset, score_value: Union[float, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + A metric associated with an LLM Observability experiment span. + + :param assessment: Assessment result for an LLM Observability experiment metric. + :type assessment: LLMObsMetricAssessment, optional + + :param boolean_value: Boolean value. Used when ``metric_type`` is ``boolean``. + :type boolean_value: bool, optional + + :param categorical_value: Categorical value. Used when ``metric_type`` is ``categorical``. + :type categorical_value: str, optional + + :param error: Error details for an experiment metric evaluation. + :type error: LLMObsExperimentMetricError, optional + + :param json_value: JSON value. Used when ``metric_type`` is ``json``. + :type json_value: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param label: Label or name for the metric. + :type label: str + + :param metadata: Arbitrary metadata associated with the metric. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param metric_type: Type of metric recorded for an LLM Observability experiment. + :type metric_type: LLMObsMetricScoreType + + :param reasoning: Human-readable reasoning for the metric value. + :type reasoning: str, optional + + :param score_value: Numeric score value. Used when ``metric_type`` is ``score``. + :type score_value: float, optional + + :param span_id: The ID of the span this metric measures. + :type span_id: str + + :param tags: List of tags associated with the metric. + :type tags: [str], optional + + :param timestamp_ms: Timestamp when the metric was recorded, in milliseconds since Unix epoch. + :type timestamp_ms: int + """ + if assessment is not unset: + kwargs["assessment"] = assessment + if boolean_value is not unset: + kwargs["boolean_value"] = boolean_value + if categorical_value is not unset: + kwargs["categorical_value"] = categorical_value + if error is not unset: + kwargs["error"] = error + if json_value is not unset: + kwargs["json_value"] = json_value + if metadata is not unset: + kwargs["metadata"] = metadata + if reasoning is not unset: + kwargs["reasoning"] = reasoning + if score_value is not unset: + kwargs["score_value"] = score_value + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.label = label + self_.metric_type = metric_type + self_.span_id = span_id + self_.timestamp_ms = timestamp_ms diff --git a/datadog_api_client/v2/model/llm_obs_experiment_metric_error.py b/datadog_api_client/v2/model/llm_obs_experiment_metric_error.py new file mode 100644 index 0000000000..07a5855706 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_metric_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentMetricError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": (str,), + } + attribute_map = { + "message": "message", + } + + def __init__(self_, message: Union[str, UnsetType]=unset, **kwargs): + """ + Error details for an experiment metric evaluation. + + :param message: Error message associated with the metric evaluation. + :type message: str, optional + """ + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experiment_request.py b/datadog_api_client/v2/model/llm_obs_experiment_request.py new file mode 100644 index 0000000000..545dd982d2 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_data_request import LLMObsExperimentDataRequest + +class LLMObsExperimentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_data_request import LLMObsExperimentDataRequest + return { + "data": (LLMObsExperimentDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsExperimentDataRequest, **kwargs): + """ + Request to create an LLM Observability experiment. + + :param data: Data object for creating an LLM Observability experiment. + :type data: LLMObsExperimentDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experiment_response.py b/datadog_api_client/v2/model/llm_obs_experiment_response.py new file mode 100644 index 0000000000..dcbb3d889f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_data_response import LLMObsExperimentDataResponse + +class LLMObsExperimentResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_data_response import LLMObsExperimentDataResponse + return { + "data": (LLMObsExperimentDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsExperimentDataResponse, **kwargs): + """ + Response containing a single LLM Observability experiment. + + :param data: Data object for an LLM Observability experiment. + :type data: LLMObsExperimentDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experiment_run_data_response.py b/datadog_api_client/v2/model/llm_obs_experiment_run_data_response.py new file mode 100644 index 0000000000..297e0fb3e1 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_run_data_response.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentRunDataResponse(ModelNormal): + validations = { + "run_number": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "aggregate_data": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type), + "created_at": (datetime,), + "experiment_id": (str,), + "id": (str,), + "run_number": (int,), + } + attribute_map = { + "aggregate_data": "aggregate_data", + "created_at": "created_at", + "experiment_id": "experiment_id", + "id": "id", + "run_number": "run_number", + } + + def __init__(self_, aggregate_data: Union[Dict[str, Any], none_type, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, experiment_id: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, run_number: Union[int, UnsetType]=unset, **kwargs): + """ + Data object for an LLM Observability experiment run. + + :param aggregate_data: Aggregated metric data for this run. + :type aggregate_data: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, none_type, optional + + :param created_at: Timestamp when the run was created. + :type created_at: datetime, optional + + :param experiment_id: Identifier of the experiment this run belongs to. + :type experiment_id: str, optional + + :param id: Unique identifier of the experiment run. + :type id: str, optional + + :param run_number: Sequential number of this run within the experiment. + :type run_number: int, optional + """ + if aggregate_data is not unset: + kwargs["aggregate_data"] = aggregate_data + if created_at is not unset: + kwargs["created_at"] = created_at + if experiment_id is not unset: + kwargs["experiment_id"] = experiment_id + if id is not unset: + kwargs["id"] = id + if run_number is not unset: + kwargs["run_number"] = run_number + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experiment_span.py b/datadog_api_client/v2/model/llm_obs_experiment_span.py new file mode 100644 index 0000000000..d49f1896a6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_span.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_span_meta import LLMObsExperimentSpanMeta + from datadog_api_client.v2.model.llm_obs_experiment_span_status import LLMObsExperimentSpanStatus + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentSpan(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_span_meta import LLMObsExperimentSpanMeta + from datadog_api_client.v2.model.llm_obs_experiment_span_status import LLMObsExperimentSpanStatus + return { + "dataset_id": (str,), + "duration": (int,), + "meta": (LLMObsExperimentSpanMeta,), + "name": (str,), + "project_id": (str,), + "span_id": (str,), + "start_ns": (int,), + "status": (LLMObsExperimentSpanStatus,), + "tags": ([str],), + "trace_id": (str,), + } + attribute_map = { + "dataset_id": "dataset_id", + "duration": "duration", + "meta": "meta", + "name": "name", + "project_id": "project_id", + "span_id": "span_id", + "start_ns": "start_ns", + "status": "status", + "tags": "tags", + "trace_id": "trace_id", + } + + def __init__(self_, dataset_id: str, duration: int, name: str, project_id: str, span_id: str, start_ns: int, status: LLMObsExperimentSpanStatus, trace_id: str, meta: Union[LLMObsExperimentSpanMeta, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + A span associated with an LLM Observability experiment. + + :param dataset_id: Dataset ID associated with this span. + :type dataset_id: str + + :param duration: Duration of the span in nanoseconds. + :type duration: int + + :param meta: Metadata associated with an experiment span. + :type meta: LLMObsExperimentSpanMeta, optional + + :param name: Name of the span. + :type name: str + + :param project_id: Project ID associated with this span. + :type project_id: str + + :param span_id: Unique identifier of the span. + :type span_id: str + + :param start_ns: Start time of the span in nanoseconds since Unix epoch. + :type start_ns: int + + :param status: Status of the span. + :type status: LLMObsExperimentSpanStatus + + :param tags: List of tags associated with the span. + :type tags: [str], optional + + :param trace_id: Trace ID for the span. + :type trace_id: str + """ + if meta is not unset: + kwargs["meta"] = meta + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.dataset_id = dataset_id + self_.duration = duration + self_.name = name + self_.project_id = project_id + self_.span_id = span_id + self_.start_ns = start_ns + self_.status = status + self_.trace_id = trace_id diff --git a/datadog_api_client/v2/model/llm_obs_experiment_span_data_response.py b/datadog_api_client/v2/model/llm_obs_experiment_span_data_response.py new file mode 100644 index 0000000000..b00b52b229 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_span_data_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_span_with_evals import LLMObsExperimentSpanWithEvals + from datadog_api_client.v2.model.llm_obs_experiment_span_type import LLMObsExperimentSpanType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentSpanDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_span_with_evals import LLMObsExperimentSpanWithEvals + from datadog_api_client.v2.model.llm_obs_experiment_span_type import LLMObsExperimentSpanType + return { + "attributes": (LLMObsExperimentSpanWithEvals,), + "id": (str,), + "type": (LLMObsExperimentSpanType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentSpanWithEvals, id: str, type: LLMObsExperimentSpanType, **kwargs): + """ + JSON:API data item wrapping a single experiment span with evaluations. + + :param attributes: An experiment span enriched with its associated evaluation metrics. + :type attributes: LLMObsExperimentSpanWithEvals + + :param id: Unique identifier of the span. + :type id: str + + :param type: Resource type for a span item in an experiment spans response. + :type type: LLMObsExperimentSpanType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experiment_span_error.py b/datadog_api_client/v2/model/llm_obs_experiment_span_error.py new file mode 100644 index 0000000000..dfe014ce06 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_span_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentSpanError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": (str,), + "stack": (str,), + "type": (str,), + } + attribute_map = { + "message": "message", + "stack": "stack", + "type": "type", + } + + def __init__(self_, message: Union[str, UnsetType]=unset, stack: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Error details for an experiment span. + + :param message: Error message. + :type message: str, optional + + :param stack: Stack trace of the error. + :type stack: str, optional + + :param type: The error type or exception class name. + :type type: str, optional + """ + if message is not unset: + kwargs["message"] = message + if stack is not unset: + kwargs["stack"] = stack + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experiment_span_meta.py b/datadog_api_client/v2/model/llm_obs_experiment_span_meta.py new file mode 100644 index 0000000000..9ec04e359d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_span_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_span_error import LLMObsExperimentSpanError + from datadog_api_client.v2.model.any_value import AnyValue + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentSpanMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_span_error import LLMObsExperimentSpanError + from datadog_api_client.v2.model.any_value import AnyValue + return { + "error": (LLMObsExperimentSpanError,), + "expected_output": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "input": (AnyValue,), + "output": (AnyValue,), + } + attribute_map = { + "error": "error", + "expected_output": "expected_output", + "input": "input", + "output": "output", + } + + def __init__(self_, error: Union[LLMObsExperimentSpanError, UnsetType]=unset, expected_output: Union[Dict[str, Any], UnsetType]=unset, input: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type, UnsetType]=unset, output: Union[Union[AnyValue, str, float, AnyValueObject, List[Union[AnyValueItem, str, float, AnyValueObject, bool]], bool], none_type, UnsetType]=unset, **kwargs): + """ + Metadata associated with an experiment span. + + :param error: Error details for an experiment span. + :type error: LLMObsExperimentSpanError, optional + + :param expected_output: Expected output for the span, used for evaluation. + :type expected_output: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param input: Represents any valid JSON value. + :type input: AnyValue, none_type, optional + + :param output: Represents any valid JSON value. + :type output: AnyValue, none_type, optional + """ + if error is not unset: + kwargs["error"] = error + if expected_output is not unset: + kwargs["expected_output"] = expected_output + if input is not unset: + kwargs["input"] = input + if output is not unset: + kwargs["output"] = output + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experiment_span_status.py b/datadog_api_client/v2/model/llm_obs_experiment_span_status.py new file mode 100644 index 0000000000..1673d17477 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_span_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsExperimentSpanStatus(ModelSimple): + """ + Status of the span. + + :param value: Must be one of ["ok", "error"]. + :type value: str + """ + + allowed_values = { + "ok", + "error", + } + OK: ClassVar["LLMObsExperimentSpanStatus"] + ERROR: ClassVar["LLMObsExperimentSpanStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsExperimentSpanStatus.OK = LLMObsExperimentSpanStatus("ok") +LLMObsExperimentSpanStatus.ERROR = LLMObsExperimentSpanStatus("error") diff --git a/datadog_api_client/v2/model/llm_obs_experiment_span_type.py b/datadog_api_client/v2/model/llm_obs_experiment_span_type.py new file mode 100644 index 0000000000..b64b6a0511 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_span_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsExperimentSpanType(ModelSimple): + """ + Resource type for a span item in an experiment spans response. + + :param value: If omitted defaults to "experiments". Must be one of ["experiments"]. + :type value: str + """ + + allowed_values = { + "experiments", + } + EXPERIMENTS_SPAN: ClassVar["LLMObsExperimentSpanType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsExperimentSpanType.EXPERIMENTS_SPAN = LLMObsExperimentSpanType("experiments") diff --git a/datadog_api_client/v2/model/llm_obs_experiment_span_with_evals.py b/datadog_api_client/v2/model/llm_obs_experiment_span_with_evals.py new file mode 100644 index 0000000000..0b524f8de4 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_span_with_evals.py @@ -0,0 +1,139 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_eval_metric_event import LLMObsExperimentEvalMetricEvent + from datadog_api_client.v2.model.llm_obs_experiment_span_meta import LLMObsExperimentSpanMeta + from datadog_api_client.v2.model.llm_obs_experiment_span_status import LLMObsExperimentSpanStatus + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentSpanWithEvals(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_eval_metric_event import LLMObsExperimentEvalMetricEvent + from datadog_api_client.v2.model.llm_obs_experiment_span_meta import LLMObsExperimentSpanMeta + from datadog_api_client.v2.model.llm_obs_experiment_span_status import LLMObsExperimentSpanStatus + return { + "dataset_record_id": (str, none_type), + "duration": (float,), + "eval_metrics": ([LLMObsExperimentEvalMetricEvent],), + "id": (str,), + "meta": (LLMObsExperimentSpanMeta,), + "metrics": ({str: (float,)},), + "name": (str,), + "parent_id": (str,), + "span_id": (str,), + "start_ns": (int,), + "status": (LLMObsExperimentSpanStatus,), + "tags": ([str],), + "trace_id": (str,), + } + attribute_map = { + "dataset_record_id": "dataset_record_id", + "duration": "duration", + "eval_metrics": "eval_metrics", + "id": "id", + "meta": "meta", + "metrics": "metrics", + "name": "name", + "parent_id": "parent_id", + "span_id": "span_id", + "start_ns": "start_ns", + "status": "status", + "tags": "tags", + "trace_id": "trace_id", + } + + def __init__(self_, dataset_record_id: Union[str, none_type, UnsetType]=unset, duration: Union[float, UnsetType]=unset, eval_metrics: Union[List[LLMObsExperimentEvalMetricEvent], UnsetType]=unset, id: Union[str, UnsetType]=unset, meta: Union[LLMObsExperimentSpanMeta, UnsetType]=unset, metrics: Union[Dict[str, float], UnsetType]=unset, name: Union[str, UnsetType]=unset, parent_id: Union[str, UnsetType]=unset, span_id: Union[str, UnsetType]=unset, start_ns: Union[int, UnsetType]=unset, status: Union[LLMObsExperimentSpanStatus, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, trace_id: Union[str, UnsetType]=unset, **kwargs): + """ + An experiment span enriched with its associated evaluation metrics. + + :param dataset_record_id: ID of the dataset record this span evaluated. + :type dataset_record_id: str, none_type, optional + + :param duration: Duration of the span in nanoseconds. + :type duration: float, optional + + :param eval_metrics: Evaluation metrics associated with this span. + :type eval_metrics: [LLMObsExperimentEvalMetricEvent], optional + + :param id: Unique identifier of the span. + :type id: str, optional + + :param meta: Metadata associated with an experiment span. + :type meta: LLMObsExperimentSpanMeta, optional + + :param metrics: Numeric metrics attached to the span. + :type metrics: {str: (float,)}, optional + + :param name: Name of the span. + :type name: str, optional + + :param parent_id: Parent span ID, if any. + :type parent_id: str, optional + + :param span_id: Span ID. + :type span_id: str, optional + + :param start_ns: Start time in nanoseconds since Unix epoch. + :type start_ns: int, optional + + :param status: Status of the span. + :type status: LLMObsExperimentSpanStatus, optional + + :param tags: Tags associated with the span. + :type tags: [str], optional + + :param trace_id: Trace ID. + :type trace_id: str, optional + """ + if dataset_record_id is not unset: + kwargs["dataset_record_id"] = dataset_record_id + if duration is not unset: + kwargs["duration"] = duration + if eval_metrics is not unset: + kwargs["eval_metrics"] = eval_metrics + if id is not unset: + kwargs["id"] = id + if meta is not unset: + kwargs["meta"] = meta + if metrics is not unset: + kwargs["metrics"] = metrics + if name is not unset: + kwargs["name"] = name + if parent_id is not unset: + kwargs["parent_id"] = parent_id + if span_id is not unset: + kwargs["span_id"] = span_id + if start_ns is not unset: + kwargs["start_ns"] = start_ns + if status is not unset: + kwargs["status"] = status + if tags is not unset: + kwargs["tags"] = tags + if trace_id is not unset: + kwargs["trace_id"] = trace_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experiment_spans_response.py b/datadog_api_client/v2/model/llm_obs_experiment_spans_response.py new file mode 100644 index 0000000000..ef7cd0a90c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_spans_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_span_data_response import LLMObsExperimentSpanDataResponse + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentSpansResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_span_data_response import LLMObsExperimentSpanDataResponse + return { + "data": ([LLMObsExperimentSpanDataResponse],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[LLMObsExperimentSpanDataResponse], **kwargs): + """ + Response for listing experiment spans (v1). Returns only spans with their evaluation metrics. No summary metrics or pagination are included. Deprecated in favor of ``ListLLMObsExperimentEventsV3``. + + :param data: List of experiment spans with their evaluation metrics. + :type data: [LLMObsExperimentSpanDataResponse] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experiment_status.py b/datadog_api_client/v2/model/llm_obs_experiment_status.py new file mode 100644 index 0000000000..51c638fe81 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsExperimentStatus(ModelSimple): + """ + Execution status of an LLM Observability experiment. + + :param value: Must be one of ["running", "completed", "failed", "interrupted"]. + :type value: str + """ + + allowed_values = { + "running", + "completed", + "failed", + "interrupted", + } + RUNNING: ClassVar["LLMObsExperimentStatus"] + COMPLETED: ClassVar["LLMObsExperimentStatus"] + FAILED: ClassVar["LLMObsExperimentStatus"] + INTERRUPTED: ClassVar["LLMObsExperimentStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsExperimentStatus.RUNNING = LLMObsExperimentStatus("running") +LLMObsExperimentStatus.COMPLETED = LLMObsExperimentStatus("completed") +LLMObsExperimentStatus.FAILED = LLMObsExperimentStatus("failed") +LLMObsExperimentStatus.INTERRUPTED = LLMObsExperimentStatus("interrupted") diff --git a/datadog_api_client/v2/model/llm_obs_experiment_type.py b/datadog_api_client/v2/model/llm_obs_experiment_type.py new file mode 100644 index 0000000000..07cf6b3bcc --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsExperimentType(ModelSimple): + """ + Resource type of an LLM Observability experiment. + + :param value: If omitted defaults to "experiments". Must be one of ["experiments"]. + :type value: str + """ + + allowed_values = { + "experiments", + } + EXPERIMENTS: ClassVar["LLMObsExperimentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsExperimentType.EXPERIMENTS = LLMObsExperimentType("experiments") diff --git a/datadog_api_client/v2/model/llm_obs_experiment_update_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_experiment_update_data_attributes_request.py new file mode 100644 index 0000000000..b0a90e6d42 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_update_data_attributes_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_status import LLMObsExperimentStatus + +class LLMObsExperimentUpdateDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_status import LLMObsExperimentStatus + return { + "dataset_id": (str,), + "description": (str,), + "error": (str,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "name": (str,), + "status": (LLMObsExperimentStatus,), + } + attribute_map = { + "dataset_id": "dataset_id", + "description": "description", + "error": "error", + "metadata": "metadata", + "name": "name", + "status": "status", + } + + def __init__(self_, dataset_id: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, error: Union[str, UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, name: Union[str, UnsetType]=unset, status: Union[LLMObsExperimentStatus, UnsetType]=unset, **kwargs): + """ + Attributes for updating an LLM Observability experiment. + + :param dataset_id: Updated identifier of the dataset used in this experiment. + :type dataset_id: str, optional + + :param description: Updated description of the experiment. + :type description: str, optional + + :param error: Error message describing why the experiment failed, if applicable. + :type error: str, optional + + :param metadata: Updated arbitrary metadata associated with the experiment. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param name: Updated name of the experiment. + :type name: str, optional + + :param status: Execution status of an LLM Observability experiment. + :type status: LLMObsExperimentStatus, optional + """ + if dataset_id is not unset: + kwargs["dataset_id"] = dataset_id + if description is not unset: + kwargs["description"] = description + if error is not unset: + kwargs["error"] = error + if metadata is not unset: + kwargs["metadata"] = metadata + if name is not unset: + kwargs["name"] = name + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experiment_update_data_request.py b/datadog_api_client/v2/model/llm_obs_experiment_update_data_request.py new file mode 100644 index 0000000000..885bc91734 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_update_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_update_data_attributes_request import LLMObsExperimentUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experiment_type import LLMObsExperimentType + +class LLMObsExperimentUpdateDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_update_data_attributes_request import LLMObsExperimentUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experiment_type import LLMObsExperimentType + return { + "attributes": (LLMObsExperimentUpdateDataAttributesRequest,), + "type": (LLMObsExperimentType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentUpdateDataAttributesRequest, type: LLMObsExperimentType, **kwargs): + """ + Data object for updating an LLM Observability experiment. + + :param attributes: Attributes for updating an LLM Observability experiment. + :type attributes: LLMObsExperimentUpdateDataAttributesRequest + + :param type: Resource type of an LLM Observability experiment. + :type type: LLMObsExperimentType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experiment_update_request.py b/datadog_api_client/v2/model/llm_obs_experiment_update_request.py new file mode 100644 index 0000000000..fa50ea046a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_update_data_request import LLMObsExperimentUpdateDataRequest + +class LLMObsExperimentUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_update_data_request import LLMObsExperimentUpdateDataRequest + return { + "data": (LLMObsExperimentUpdateDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsExperimentUpdateDataRequest, **kwargs): + """ + Request to partially update an LLM Observability experiment. + + :param data: Data object for updating an LLM Observability experiment. + :type data: LLMObsExperimentUpdateDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experiment_user.py b/datadog_api_client/v2/model/llm_obs_experiment_user.py new file mode 100644 index 0000000000..fd4bcd7d99 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiment_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "icon": (str,), + "id": (str,), + "name": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "icon": "icon", + "id": "id", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, icon: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + User data for the author of an experiment. Only present when ``include[user_data]`` is ``true``. + + :param email: Email address of the user. + :type email: str, optional + + :param handle: Username or handle associated with the user's Datadog account. + :type handle: str, optional + + :param icon: URL of the user's icon. + :type icon: str, optional + + :param id: Unique identifier of the user. + :type id: str, optional + + :param name: Display name of the user. + :type name: str, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if icon is not unset: + kwargs["icon"] = icon + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_aggregate.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_aggregate.py new file mode 100644 index 0000000000..76be873840 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_aggregate.py @@ -0,0 +1,105 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_compute import LLMObsExperimentationAnalyticsCompute + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_group_by import LLMObsExperimentationAnalyticsGroupBy + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_search import LLMObsExperimentationAnalyticsSearch + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_time_range import LLMObsExperimentationAnalyticsTimeRange + +class LLMObsExperimentationAnalyticsAggregate(ModelNormal): + validations = { + "compute": { + "min_items": 1, + }, + "indexes": { + "min_items": 1, + }, + "limit": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_compute import LLMObsExperimentationAnalyticsCompute + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_group_by import LLMObsExperimentationAnalyticsGroupBy + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_search import LLMObsExperimentationAnalyticsSearch + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_time_range import LLMObsExperimentationAnalyticsTimeRange + return { + "compute": ([LLMObsExperimentationAnalyticsCompute],), + "dataset_version": (int, none_type), + "group_by": ([LLMObsExperimentationAnalyticsGroupBy],), + "indexes": ([str],), + "limit": (int, none_type), + "search": (LLMObsExperimentationAnalyticsSearch,), + "time": (LLMObsExperimentationAnalyticsTimeRange,), + } + attribute_map = { + "compute": "compute", + "dataset_version": "dataset_version", + "group_by": "group_by", + "indexes": "indexes", + "limit": "limit", + "search": "search", + "time": "time", + } + + def __init__(self_, compute: List[LLMObsExperimentationAnalyticsCompute], indexes: List[str], search: LLMObsExperimentationAnalyticsSearch, dataset_version: Union[int, none_type, UnsetType]=unset, group_by: Union[List[LLMObsExperimentationAnalyticsGroupBy], UnsetType]=unset, limit: Union[int, none_type, UnsetType]=unset, time: Union[LLMObsExperimentationAnalyticsTimeRange, UnsetType]=unset, **kwargs): + """ + Analytics aggregation parameters. + + :param compute: List of metric computations to perform. + :type compute: [LLMObsExperimentationAnalyticsCompute] + + :param dataset_version: Filter to a specific dataset version. + :type dataset_version: int, none_type, optional + + :param group_by: Fields to group results by. + :type group_by: [LLMObsExperimentationAnalyticsGroupBy], optional + + :param indexes: Data indexes to query. At least one is required. + :type indexes: [str] + + :param limit: Maximum number of results to return. + :type limit: int, none_type, optional + + :param search: Search query for filtering analytics data. + :type search: LLMObsExperimentationAnalyticsSearch + + :param time: Unix-millisecond time range for filtering analytics data. + :type time: LLMObsExperimentationAnalyticsTimeRange, optional + """ + if dataset_version is not unset: + kwargs["dataset_version"] = dataset_version + if group_by is not unset: + kwargs["group_by"] = group_by + if limit is not unset: + kwargs["limit"] = limit + if time is not unset: + kwargs["time"] = time + super().__init__(kwargs) + + + self_.compute = compute + self_.indexes = indexes + self_.search = search diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_compute.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_compute.py new file mode 100644 index 0000000000..f3ff5fbcef --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_compute.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationAnalyticsCompute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "metric": (str,), + "name": (str,), + } + attribute_map = { + "metric": "metric", + "name": "name", + } + + def __init__(self_, metric: str, name: Union[str, UnsetType]=unset, **kwargs): + """ + A single metric computation definition. + + :param metric: Name of the metric to compute. + :type metric: str + + :param name: Optional alias for this computation in the response. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.metric = metric diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_attributes_request.py new file mode 100644 index 0000000000..73a1bf71b4 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_attributes_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_aggregate import LLMObsExperimentationAnalyticsAggregate + +class LLMObsExperimentationAnalyticsDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_aggregate import LLMObsExperimentationAnalyticsAggregate + return { + "aggregate": (LLMObsExperimentationAnalyticsAggregate,), + } + attribute_map = { + "aggregate": "aggregate", + } + + def __init__(self_, aggregate: LLMObsExperimentationAnalyticsAggregate, **kwargs): + """ + Attributes for an analytics request. + + :param aggregate: Analytics aggregation parameters. + :type aggregate: LLMObsExperimentationAnalyticsAggregate + """ + super().__init__(kwargs) + + + self_.aggregate = aggregate diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_attributes_response.py new file mode 100644 index 0000000000..f1930adeb7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_attributes_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_result import LLMObsExperimentationAnalyticsResult + +class LLMObsExperimentationAnalyticsDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_result import LLMObsExperimentationAnalyticsResult + return { + "hit_count": (int,), + "result": (LLMObsExperimentationAnalyticsResult,), + } + attribute_map = { + "hit_count": "hit_count", + "result": "result", + } + + def __init__(self_, hit_count: int, result: LLMObsExperimentationAnalyticsResult, **kwargs): + """ + Attributes of an analytics response. + + :param hit_count: Total number of events matched by the query before grouping. + :type hit_count: int + + :param result: Analytics query result containing all buckets. + :type result: LLMObsExperimentationAnalyticsResult + """ + super().__init__(kwargs) + + + self_.hit_count = hit_count + self_.result = result diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_request.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_request.py new file mode 100644 index 0000000000..f5c6649f4b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_attributes_request import LLMObsExperimentationAnalyticsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + +class LLMObsExperimentationAnalyticsDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_attributes_request import LLMObsExperimentationAnalyticsDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + return { + "attributes": (LLMObsExperimentationAnalyticsDataAttributesRequest,), + "type": (LLMObsExperimentationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentationAnalyticsDataAttributesRequest, type: LLMObsExperimentationType, **kwargs): + """ + Data object for an analytics request. + + :param attributes: Attributes for an analytics request. + :type attributes: LLMObsExperimentationAnalyticsDataAttributesRequest + + :param type: Resource type for experimentation search and analytics operations. + :type type: LLMObsExperimentationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_response.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_response.py new file mode 100644 index 0000000000..f1dedd5cf9 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_attributes_response import LLMObsExperimentationAnalyticsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + +class LLMObsExperimentationAnalyticsDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_attributes_response import LLMObsExperimentationAnalyticsDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + return { + "attributes": (LLMObsExperimentationAnalyticsDataAttributesResponse,), + "id": (str,), + "type": (LLMObsExperimentationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentationAnalyticsDataAttributesResponse, id: str, type: LLMObsExperimentationType, **kwargs): + """ + JSON:API data object for an analytics response. + + :param attributes: Attributes of an analytics response. + :type attributes: LLMObsExperimentationAnalyticsDataAttributesResponse + + :param id: Server-generated identifier for this analytics result. + :type id: str + + :param type: Resource type for experimentation search and analytics operations. + :type type: LLMObsExperimentationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_group_by.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_group_by.py new file mode 100644 index 0000000000..a42664e81d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_group_by.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationAnalyticsGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "field": (str,), + } + attribute_map = { + "field": "field", + } + + def __init__(self_, field: str, **kwargs): + """ + A field to group analytics results by. + + :param field: Field name to group by. + :type field: str + """ + super().__init__(kwargs) + + + self_.field = field diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_request.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_request.py new file mode 100644 index 0000000000..e204e88b03 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_request import LLMObsExperimentationAnalyticsDataRequest + +class LLMObsExperimentationAnalyticsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_request import LLMObsExperimentationAnalyticsDataRequest + return { + "data": (LLMObsExperimentationAnalyticsDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsExperimentationAnalyticsDataRequest, **kwargs): + """ + Request to run an analytics aggregation over LLM Observability experimentation data. + + :param data: Data object for an analytics request. + :type data: LLMObsExperimentationAnalyticsDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_response.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_response.py new file mode 100644 index 0000000000..dc6c3d47fb --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_response import LLMObsExperimentationAnalyticsDataResponse + +class LLMObsExperimentationAnalyticsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_response import LLMObsExperimentationAnalyticsDataResponse + return { + "data": (LLMObsExperimentationAnalyticsDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsExperimentationAnalyticsDataResponse, **kwargs): + """ + Response to an analytics query. + + :param data: JSON:API data object for an analytics response. + :type data: LLMObsExperimentationAnalyticsDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_result.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_result.py new file mode 100644 index 0000000000..31060ab487 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_result.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_value import LLMObsExperimentationAnalyticsValue + +class LLMObsExperimentationAnalyticsResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_analytics_value import LLMObsExperimentationAnalyticsValue + return { + "values": ([LLMObsExperimentationAnalyticsValue],), + } + attribute_map = { + "values": "values", + } + + def __init__(self_, values: List[LLMObsExperimentationAnalyticsValue], **kwargs): + """ + Analytics query result containing all buckets. + + :param values: List of result buckets. + :type values: [LLMObsExperimentationAnalyticsValue] + """ + super().__init__(kwargs) + + + self_.values = values diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_search.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_search.py new file mode 100644 index 0000000000..6dbfc426e7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_search.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationAnalyticsSearch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: str, **kwargs): + """ + Search query for filtering analytics data. + + :param query: Filter expression. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_time_range.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_time_range.py new file mode 100644 index 0000000000..dddd337451 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_time_range.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationAnalyticsTimeRange(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (int,), + "to": (int,), + } + attribute_map = { + "_from": "from", + "to": "to", + } + + def __init__(self_, _from: int, to: int, **kwargs): + """ + Unix-millisecond time range for filtering analytics data. + + :param _from: Start of the time range in milliseconds since Unix epoch. + :type _from: int + + :param to: End of the time range in milliseconds since Unix epoch. + :type to: int + """ + super().__init__(kwargs) + + + self_._from = _from + self_.to = to diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_analytics_value.py b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_value.py new file mode 100644 index 0000000000..88d403ea47 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_analytics_value.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationAnalyticsValue(ModelNormal): + @cached_property + def openapi_types(_): + return { + "by": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "metrics": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "by": "by", + "metrics": "metrics", + } + + def __init__(self_, metrics: Dict[str, Any], by: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + A single analytics result bucket. + + :param by: The group-by field values for this bucket. + :type by: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param metrics: Computed metric values for this bucket. + :type metrics: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + """ + if by is not unset: + kwargs["by"] = by + super().__init__(kwargs) + + + self_.metrics = metrics diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_content_preview.py b/datadog_api_client/v2/model/llm_obs_experimentation_content_preview.py new file mode 100644 index 0000000000..419c18adda --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_content_preview.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationContentPreview(ModelNormal): + @cached_property + def openapi_types(_): + return { + "limit": (int,), + } + attribute_map = { + "limit": "limit", + } + + def __init__(self_, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Options to control content preview truncation. + + :param limit: Maximum number of characters to include in content previews. + :type limit: int, optional + """ + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_cursor_page.py b/datadog_api_client/v2/model/llm_obs_experimentation_cursor_page.py new file mode 100644 index 0000000000..e0bc1a32ed --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_cursor_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationCursorPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Cursor-based pagination parameters. + + :param cursor: Opaque cursor returned from a previous response to fetch the next page. + :type cursor: str, optional + + :param limit: Maximum number of results per page. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_filter.py b/datadog_api_client/v2/model/llm_obs_experimentation_filter.py new file mode 100644 index 0000000000..7643b5ae00 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_deleted": (bool,), + "is_deleted": (bool,), + "query": (str,), + "scope": ([str],), + "version": (int, none_type), + } + attribute_map = { + "include_deleted": "include_deleted", + "is_deleted": "is_deleted", + "query": "query", + "scope": "scope", + "version": "version", + } + + def __init__(self_, scope: List[str], include_deleted: Union[bool, UnsetType]=unset, is_deleted: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, version: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Filter criteria for an experimentation search request. + + :param include_deleted: When ``true`` , include soft-deleted entities alongside active ones. + :type include_deleted: bool, optional + + :param is_deleted: When ``true`` , return only soft-deleted entities. + :type is_deleted: bool, optional + + :param query: Free-text search query. + :type query: str, optional + + :param scope: Entity types to search. Valid values are ``projects`` , ``datasets`` , ``dataset_records`` , ``experiments`` , and ``experiment_runs``. + :type scope: [str] + + :param version: Filter dataset records by a specific dataset version. + :type version: int, none_type, optional + """ + if include_deleted is not unset: + kwargs["include_deleted"] = include_deleted + if is_deleted is not unset: + kwargs["is_deleted"] = is_deleted + if query is not unset: + kwargs["query"] = query + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.scope = scope diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_include.py b/datadog_api_client/v2/model/llm_obs_experimentation_include.py new file mode 100644 index 0000000000..2225df4008 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_include.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationInclude(ModelNormal): + @cached_property + def openapi_types(_): + return { + "user_data": (bool,), + } + attribute_map = { + "user_data": "user_data", + } + + def __init__(self_, user_data: Union[bool, UnsetType]=unset, **kwargs): + """ + Additional data to include in the response. + + :param user_data: When ``true`` , enrich results with author user data (name and email). + :type user_data: bool, optional + """ + if user_data is not unset: + kwargs["user_data"] = user_data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_number_page.py b/datadog_api_client/v2/model/llm_obs_experimentation_number_page.py new file mode 100644 index 0000000000..f8134ca478 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_number_page.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationNumberPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 2147483647, + }, + "number": { + "inclusive_maximum": 2147483647, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "limit": (int,), + "number": (int,), + } + attribute_map = { + "limit": "limit", + "number": "number", + } + + def __init__(self_, limit: Union[int, UnsetType]=unset, number: Union[int, UnsetType]=unset, **kwargs): + """ + Offset-based pagination parameters for simple search. + + :param limit: Maximum number of results per page. + :type limit: int, optional + + :param number: Page number to retrieve (1-indexed). + :type number: int, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if number is not unset: + kwargs["number"] = number + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_search_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_experimentation_search_data_attributes_request.py new file mode 100644 index 0000000000..430276c524 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_search_data_attributes_request.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_content_preview import LLMObsExperimentationContentPreview + from datadog_api_client.v2.model.llm_obs_experimentation_filter import LLMObsExperimentationFilter + from datadog_api_client.v2.model.llm_obs_experimentation_include import LLMObsExperimentationInclude + from datadog_api_client.v2.model.llm_obs_experimentation_cursor_page import LLMObsExperimentationCursorPage + +class LLMObsExperimentationSearchDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_content_preview import LLMObsExperimentationContentPreview + from datadog_api_client.v2.model.llm_obs_experimentation_filter import LLMObsExperimentationFilter + from datadog_api_client.v2.model.llm_obs_experimentation_include import LLMObsExperimentationInclude + from datadog_api_client.v2.model.llm_obs_experimentation_cursor_page import LLMObsExperimentationCursorPage + return { + "content_preview": (LLMObsExperimentationContentPreview,), + "filter": (LLMObsExperimentationFilter,), + "include": (LLMObsExperimentationInclude,), + "page": (LLMObsExperimentationCursorPage,), + } + attribute_map = { + "content_preview": "content_preview", + "filter": "filter", + "include": "include", + "page": "page", + } + + def __init__(self_, filter: LLMObsExperimentationFilter, content_preview: Union[LLMObsExperimentationContentPreview, UnsetType]=unset, include: Union[LLMObsExperimentationInclude, UnsetType]=unset, page: Union[LLMObsExperimentationCursorPage, UnsetType]=unset, **kwargs): + """ + Attributes for an experimentation search request. + + :param content_preview: Options to control content preview truncation. + :type content_preview: LLMObsExperimentationContentPreview, optional + + :param filter: Filter criteria for an experimentation search request. + :type filter: LLMObsExperimentationFilter + + :param include: Additional data to include in the response. + :type include: LLMObsExperimentationInclude, optional + + :param page: Cursor-based pagination parameters. + :type page: LLMObsExperimentationCursorPage, optional + """ + if content_preview is not unset: + kwargs["content_preview"] = content_preview + if include is not unset: + kwargs["include"] = include + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + + self_.filter = filter diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_search_data_request.py b/datadog_api_client/v2/model/llm_obs_experimentation_search_data_request.py new file mode 100644 index 0000000000..815a93e067 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_search_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_search_data_attributes_request import LLMObsExperimentationSearchDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + +class LLMObsExperimentationSearchDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_search_data_attributes_request import LLMObsExperimentationSearchDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + return { + "attributes": (LLMObsExperimentationSearchDataAttributesRequest,), + "type": (LLMObsExperimentationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentationSearchDataAttributesRequest, type: LLMObsExperimentationType, **kwargs): + """ + Data object for an experimentation search request. + + :param attributes: Attributes for an experimentation search request. + :type attributes: LLMObsExperimentationSearchDataAttributesRequest + + :param type: Resource type for experimentation search and analytics operations. + :type type: LLMObsExperimentationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_search_data_response.py b/datadog_api_client/v2/model/llm_obs_experimentation_search_data_response.py new file mode 100644 index 0000000000..406d2e15f8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_search_data_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_search_results import LLMObsExperimentationSearchResults + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentationSearchDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_search_results import LLMObsExperimentationSearchResults + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + return { + "attributes": (LLMObsExperimentationSearchResults,), + "id": (str,), + "type": (LLMObsExperimentationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentationSearchResults, id: str, type: LLMObsExperimentationType, **kwargs): + """ + JSON:API data object for an experimentation search response. + + :param attributes: The matching experimentation entities grouped by type. + :type attributes: LLMObsExperimentationSearchResults + + :param id: Server-generated identifier for this search result. + :type id: str + + :param type: Resource type for experimentation search and analytics operations. + :type type: LLMObsExperimentationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_search_request.py b/datadog_api_client/v2/model/llm_obs_experimentation_search_request.py new file mode 100644 index 0000000000..d16c90ab1a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_search_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_search_data_request import LLMObsExperimentationSearchDataRequest + +class LLMObsExperimentationSearchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_search_data_request import LLMObsExperimentationSearchDataRequest + return { + "data": (LLMObsExperimentationSearchDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsExperimentationSearchDataRequest, **kwargs): + """ + Request to search across LLM Observability experimentation entities using cursor-based pagination. + + :param data: Data object for an experimentation search request. + :type data: LLMObsExperimentationSearchDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_search_response.py b/datadog_api_client/v2/model/llm_obs_experimentation_search_response.py new file mode 100644 index 0000000000..2cb60dbac6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_search_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_search_data_response import LLMObsExperimentationSearchDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentationSearchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_search_data_response import LLMObsExperimentationSearchDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + return { + "data": (LLMObsExperimentationSearchDataResponse,), + "meta": (LLMObsCursorMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: LLMObsExperimentationSearchDataResponse, meta: Union[LLMObsCursorMeta, UnsetType]=unset, **kwargs): + """ + Response to a cursor-based experimentation search. Returns ``200 OK`` when all results fit in one page; ``206 Partial Content`` when a next-page cursor is available. + + :param data: JSON:API data object for an experimentation search response. + :type data: LLMObsExperimentationSearchDataResponse + + :param meta: Pagination cursor metadata. + :type meta: LLMObsCursorMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_search_results.py b/datadog_api_client/v2/model/llm_obs_experimentation_search_results.py new file mode 100644 index 0000000000..92943a4ba9 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_search_results.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_dataset_record_data_response import LLMObsDatasetRecordDataResponse + from datadog_api_client.v2.model.llm_obs_dataset_data_response import LLMObsDatasetDataResponse + from datadog_api_client.v2.model.llm_obs_experiment_run_data_response import LLMObsExperimentRunDataResponse + from datadog_api_client.v2.model.llm_obs_experiment_data_attributes_response import LLMObsExperimentDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_project_data_response import LLMObsProjectDataResponse + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentationSearchResults(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_dataset_record_data_response import LLMObsDatasetRecordDataResponse + from datadog_api_client.v2.model.llm_obs_dataset_data_response import LLMObsDatasetDataResponse + from datadog_api_client.v2.model.llm_obs_experiment_run_data_response import LLMObsExperimentRunDataResponse + from datadog_api_client.v2.model.llm_obs_experiment_data_attributes_response import LLMObsExperimentDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_project_data_response import LLMObsProjectDataResponse + return { + "dataset_records": ([LLMObsDatasetRecordDataResponse], none_type), + "datasets": ([LLMObsDatasetDataResponse], none_type), + "experiment_runs": ([LLMObsExperimentRunDataResponse], none_type), + "experiments": ([LLMObsExperimentDataAttributesResponse], none_type), + "projects": ([LLMObsProjectDataResponse], none_type), + } + attribute_map = { + "dataset_records": "dataset_records", + "datasets": "datasets", + "experiment_runs": "experiment_runs", + "experiments": "experiments", + "projects": "projects", + } + + def __init__(self_, dataset_records: Union[List[LLMObsDatasetRecordDataResponse], none_type, UnsetType]=unset, datasets: Union[List[LLMObsDatasetDataResponse], none_type, UnsetType]=unset, experiment_runs: Union[List[LLMObsExperimentRunDataResponse], none_type, UnsetType]=unset, experiments: Union[List[LLMObsExperimentDataAttributesResponse], none_type, UnsetType]=unset, projects: Union[List[LLMObsProjectDataResponse], none_type, UnsetType]=unset, **kwargs): + """ + The matching experimentation entities grouped by type. + + :param dataset_records: Matching dataset records. Present when ``dataset_records`` is included in ``filter.scope``. + :type dataset_records: [LLMObsDatasetRecordDataResponse], none_type, optional + + :param datasets: Matching datasets. Present when ``datasets`` is included in ``filter.scope``. + :type datasets: [LLMObsDatasetDataResponse], none_type, optional + + :param experiment_runs: Matching experiment runs. Present when ``experiment_runs`` is included in ``filter.scope``. + :type experiment_runs: [LLMObsExperimentRunDataResponse], none_type, optional + + :param experiments: Matching experiments. Present when ``experiments`` is included in ``filter.scope``. + :type experiments: [LLMObsExperimentDataAttributesResponse], none_type, optional + + :param projects: Matching projects. Present when ``projects`` is included in ``filter.scope``. + :type projects: [LLMObsProjectDataResponse], none_type, optional + """ + if dataset_records is not unset: + kwargs["dataset_records"] = dataset_records + if datasets is not unset: + kwargs["datasets"] = datasets + if experiment_runs is not unset: + kwargs["experiment_runs"] = experiment_runs + if experiments is not unset: + kwargs["experiments"] = experiments + if projects is not unset: + kwargs["projects"] = projects + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_data_attributes_request.py new file mode 100644 index 0000000000..b5aa68f562 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_data_attributes_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_content_preview import LLMObsExperimentationContentPreview + from datadog_api_client.v2.model.llm_obs_experimentation_filter import LLMObsExperimentationFilter + from datadog_api_client.v2.model.llm_obs_experimentation_include import LLMObsExperimentationInclude + from datadog_api_client.v2.model.llm_obs_experimentation_number_page import LLMObsExperimentationNumberPage + from datadog_api_client.v2.model.llm_obs_experimentation_sort_field import LLMObsExperimentationSortField + +class LLMObsExperimentationSimpleSearchDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_content_preview import LLMObsExperimentationContentPreview + from datadog_api_client.v2.model.llm_obs_experimentation_filter import LLMObsExperimentationFilter + from datadog_api_client.v2.model.llm_obs_experimentation_include import LLMObsExperimentationInclude + from datadog_api_client.v2.model.llm_obs_experimentation_number_page import LLMObsExperimentationNumberPage + from datadog_api_client.v2.model.llm_obs_experimentation_sort_field import LLMObsExperimentationSortField + return { + "content_preview": (LLMObsExperimentationContentPreview,), + "filter": (LLMObsExperimentationFilter,), + "include": (LLMObsExperimentationInclude,), + "page": (LLMObsExperimentationNumberPage,), + "sort": ([LLMObsExperimentationSortField],), + } + attribute_map = { + "content_preview": "content_preview", + "filter": "filter", + "include": "include", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: LLMObsExperimentationFilter, content_preview: Union[LLMObsExperimentationContentPreview, UnsetType]=unset, include: Union[LLMObsExperimentationInclude, UnsetType]=unset, page: Union[LLMObsExperimentationNumberPage, UnsetType]=unset, sort: Union[List[LLMObsExperimentationSortField], UnsetType]=unset, **kwargs): + """ + Attributes for an experimentation simple search request. + + :param content_preview: Options to control content preview truncation. + :type content_preview: LLMObsExperimentationContentPreview, optional + + :param filter: Filter criteria for an experimentation search request. + :type filter: LLMObsExperimentationFilter + + :param include: Additional data to include in the response. + :type include: LLMObsExperimentationInclude, optional + + :param page: Offset-based pagination parameters for simple search. + :type page: LLMObsExperimentationNumberPage, optional + + :param sort: Sort order for results. + :type sort: [LLMObsExperimentationSortField], optional + """ + if content_preview is not unset: + kwargs["content_preview"] = content_preview + if include is not unset: + kwargs["include"] = include + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + + self_.filter = filter diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_data_request.py b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_data_request.py new file mode 100644 index 0000000000..36f15f53e4 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_data_attributes_request import LLMObsExperimentationSimpleSearchDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + +class LLMObsExperimentationSimpleSearchDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_data_attributes_request import LLMObsExperimentationSimpleSearchDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + return { + "attributes": (LLMObsExperimentationSimpleSearchDataAttributesRequest,), + "type": (LLMObsExperimentationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentationSimpleSearchDataAttributesRequest, type: LLMObsExperimentationType, **kwargs): + """ + Data object for an experimentation simple search request. + + :param attributes: Attributes for an experimentation simple search request. + :type attributes: LLMObsExperimentationSimpleSearchDataAttributesRequest + + :param type: Resource type for experimentation search and analytics operations. + :type type: LLMObsExperimentationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_data_response.py b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_data_response.py new file mode 100644 index 0000000000..34036d1c5b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_data_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_search_results import LLMObsExperimentationSearchResults + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentationSimpleSearchDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_search_results import LLMObsExperimentationSearchResults + from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType + return { + "attributes": (LLMObsExperimentationSearchResults,), + "id": (str,), + "type": (LLMObsExperimentationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsExperimentationSearchResults, id: str, type: LLMObsExperimentationType, **kwargs): + """ + JSON:API data object for a simple search response. + + :param attributes: The matching experimentation entities grouped by type. + :type attributes: LLMObsExperimentationSearchResults + + :param id: Server-generated identifier for this search result. + :type id: str + + :param type: Resource type for experimentation search and analytics operations. + :type type: LLMObsExperimentationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_meta.py b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_meta.py new file mode 100644 index 0000000000..c46127da69 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_meta_page import LLMObsExperimentationSimpleSearchMetaPage + +class LLMObsExperimentationSimpleSearchMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_meta_page import LLMObsExperimentationSimpleSearchMetaPage + return { + "page": (LLMObsExperimentationSimpleSearchMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[LLMObsExperimentationSimpleSearchMetaPage, UnsetType]=unset, **kwargs): + """ + Pagination metadata for a simple search response. + + :param page: Page metadata. + :type page: LLMObsExperimentationSimpleSearchMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_meta_page.py b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_meta_page.py new file mode 100644 index 0000000000..ba4801bbc5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsExperimentationSimpleSearchMetaPage(ModelNormal): + validations = { + "current": { + "inclusive_maximum": 2147483647, + }, + "limit": { + "inclusive_maximum": 2147483647, + }, + "total_count": { + "inclusive_maximum": 2147483647, + }, + "total_pages": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "current": (int,), + "limit": (int,), + "total_count": (int,), + "total_pages": (int,), + } + attribute_map = { + "current": "current", + "limit": "limit", + "total_count": "total_count", + "total_pages": "total_pages", + } + + def __init__(self_, current: Union[int, UnsetType]=unset, limit: Union[int, UnsetType]=unset, total_count: Union[int, UnsetType]=unset, total_pages: Union[int, UnsetType]=unset, **kwargs): + """ + Page metadata. + + :param current: Current page number. + :type current: int, optional + + :param limit: Page size used for this response. + :type limit: int, optional + + :param total_count: Total number of matching results (capped at the maximum search limit). + :type total_count: int, optional + + :param total_pages: Total number of pages available. + :type total_pages: int, optional + """ + if current is not unset: + kwargs["current"] = current + if limit is not unset: + kwargs["limit"] = limit + if total_count is not unset: + kwargs["total_count"] = total_count + if total_pages is not unset: + kwargs["total_pages"] = total_pages + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_request.py b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_request.py new file mode 100644 index 0000000000..a09129f4a3 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_data_request import LLMObsExperimentationSimpleSearchDataRequest + +class LLMObsExperimentationSimpleSearchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_data_request import LLMObsExperimentationSimpleSearchDataRequest + return { + "data": (LLMObsExperimentationSimpleSearchDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsExperimentationSimpleSearchDataRequest, **kwargs): + """ + Request to search across LLM Observability experimentation entities using offset-based pagination. + + :param data: Data object for an experimentation simple search request. + :type data: LLMObsExperimentationSimpleSearchDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_response.py b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_response.py new file mode 100644 index 0000000000..3231781e79 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_simple_search_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_data_response import LLMObsExperimentationSimpleSearchDataResponse + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_meta import LLMObsExperimentationSimpleSearchMeta + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class LLMObsExperimentationSimpleSearchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_data_response import LLMObsExperimentationSimpleSearchDataResponse + from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_meta import LLMObsExperimentationSimpleSearchMeta + return { + "data": (LLMObsExperimentationSimpleSearchDataResponse,), + "meta": (LLMObsExperimentationSimpleSearchMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: LLMObsExperimentationSimpleSearchDataResponse, meta: Union[LLMObsExperimentationSimpleSearchMeta, UnsetType]=unset, **kwargs): + """ + Response to an offset-based experimentation simple search. + + :param data: JSON:API data object for a simple search response. + :type data: LLMObsExperimentationSimpleSearchDataResponse + + :param meta: Pagination metadata for a simple search response. + :type meta: LLMObsExperimentationSimpleSearchMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_sort_field.py b/datadog_api_client/v2/model/llm_obs_experimentation_sort_field.py new file mode 100644 index 0000000000..0b14960b87 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_sort_field.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experimentation_sort_field_direction import LLMObsExperimentationSortFieldDirection + +class LLMObsExperimentationSortField(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experimentation_sort_field_direction import LLMObsExperimentationSortFieldDirection + return { + "direction": (LLMObsExperimentationSortFieldDirection,), + "field": (str,), + } + attribute_map = { + "direction": "direction", + "field": "field", + } + + def __init__(self_, field: str, direction: Union[LLMObsExperimentationSortFieldDirection, UnsetType]=unset, **kwargs): + """ + A field and direction to sort results by. + + :param direction: Sort direction. + :type direction: LLMObsExperimentationSortFieldDirection, optional + + :param field: The field name to sort on. + :type field: str + """ + if direction is not unset: + kwargs["direction"] = direction + super().__init__(kwargs) + + + self_.field = field diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_sort_field_direction.py b/datadog_api_client/v2/model/llm_obs_experimentation_sort_field_direction.py new file mode 100644 index 0000000000..d929df79f5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_sort_field_direction.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsExperimentationSortFieldDirection(ModelSimple): + """ + Sort direction. + + :param value: Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + ASC: ClassVar["LLMObsExperimentationSortFieldDirection"] + DESC: ClassVar["LLMObsExperimentationSortFieldDirection"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsExperimentationSortFieldDirection.ASC = LLMObsExperimentationSortFieldDirection("asc") +LLMObsExperimentationSortFieldDirection.DESC = LLMObsExperimentationSortFieldDirection("desc") diff --git a/datadog_api_client/v2/model/llm_obs_experimentation_type.py b/datadog_api_client/v2/model/llm_obs_experimentation_type.py new file mode 100644 index 0000000000..d233a6e96d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experimentation_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsExperimentationType(ModelSimple): + """ + Resource type for experimentation search and analytics operations. + + :param value: If omitted defaults to "experimentation". Must be one of ["experimentation"]. + :type value: str + """ + + allowed_values = { + "experimentation", + } + EXPERIMENTATION: ClassVar["LLMObsExperimentationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsExperimentationType.EXPERIMENTATION = LLMObsExperimentationType("experimentation") diff --git a/datadog_api_client/v2/model/llm_obs_experiments_response.py b/datadog_api_client/v2/model/llm_obs_experiments_response.py new file mode 100644 index 0000000000..c3f5d47205 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_experiments_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_experiment_data_response import LLMObsExperimentDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + +class LLMObsExperimentsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_experiment_data_response import LLMObsExperimentDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + return { + "data": ([LLMObsExperimentDataResponse],), + "meta": (LLMObsCursorMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[LLMObsExperimentDataResponse], meta: Union[LLMObsCursorMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of LLM Observability experiments. + + :param data: List of experiments. + :type data: [LLMObsExperimentDataResponse] + + :param meta: Pagination cursor metadata. + :type meta: LLMObsCursorMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_inference_code.py b/datadog_api_client/v2/model/llm_obs_inference_code.py new file mode 100644 index 0000000000..b076646a17 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_code.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsInferenceCode(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "code": "code", + "id": "id", + "type": "type", + } + + def __init__(self_, code: str, id: str, type: str, **kwargs): + """ + A generated code snippet for running an inference request programmatically. + + :param code: The generated code content. + :type code: str + + :param id: Unique identifier for the code snippet. + :type id: str + + :param type: The programming language or SDK type of the code snippet. + :type type: str + """ + super().__init__(kwargs) + + + self_.code = code + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_inference_content.py b/datadog_api_client/v2/model/llm_obs_inference_content.py new file mode 100644 index 0000000000..2e086bb405 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_content.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_inference_content_value import LLMObsInferenceContentValue + +class LLMObsInferenceContent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_inference_content_value import LLMObsInferenceContentValue + return { + "type": (str,), + "value": (LLMObsInferenceContentValue,), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: str, value: LLMObsInferenceContentValue, **kwargs): + """ + A structured content block within a message. + + :param type: The content block type. + :type type: str + + :param value: The typed value of a message content block. + :type value: LLMObsInferenceContentValue + """ + super().__init__(kwargs) + + + self_.type = type + self_.value = value diff --git a/datadog_api_client/v2/model/llm_obs_inference_content_value.py b/datadog_api_client/v2/model/llm_obs_inference_content_value.py new file mode 100644 index 0000000000..4412a3dda6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_content_value.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_inference_tool_call import LLMObsInferenceToolCall + from datadog_api_client.v2.model.llm_obs_inference_tool_result import LLMObsInferenceToolResult + +class LLMObsInferenceContentValue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_inference_tool_call import LLMObsInferenceToolCall + from datadog_api_client.v2.model.llm_obs_inference_tool_result import LLMObsInferenceToolResult + return { + "text": (str,), + "tool_call": (LLMObsInferenceToolCall,), + "tool_call_result": (LLMObsInferenceToolResult,), + } + attribute_map = { + "text": "text", + "tool_call": "tool_call", + "tool_call_result": "tool_call_result", + } + + def __init__(self_, text: Union[str, UnsetType]=unset, tool_call: Union[LLMObsInferenceToolCall, UnsetType]=unset, tool_call_result: Union[LLMObsInferenceToolResult, UnsetType]=unset, **kwargs): + """ + The typed value of a message content block. + + :param text: Plain text content. + :type text: str, optional + + :param tool_call: A tool call made during LLM inference. + :type tool_call: LLMObsInferenceToolCall, optional + + :param tool_call_result: The result returned by a tool call during LLM inference. + :type tool_call_result: LLMObsInferenceToolResult, optional + """ + if text is not unset: + kwargs["text"] = text + if tool_call is not unset: + kwargs["tool_call"] = tool_call + if tool_call_result is not unset: + kwargs["tool_call_result"] = tool_call_result + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_inference_error_response.py b/datadog_api_client/v2/model/llm_obs_inference_error_response.py new file mode 100644 index 0000000000..24f9ba012b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_error_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsInferenceErrorResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": (str,), + "type": (str,), + } + attribute_map = { + "message": "message", + "type": "type", + } + + def __init__(self_, message: str, type: str, **kwargs): + """ + Error details returned when an inference provider returns an error. + + :param message: A human-readable description of the error. + :type message: str + + :param type: The provider-specific error type. + :type type: str + """ + super().__init__(kwargs) + + + self_.message = message + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_inference_function.py b/datadog_api_client/v2/model/llm_obs_inference_function.py new file mode 100644 index 0000000000..dc11aa24a9 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_function.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsInferenceFunction(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + "parameters": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "description": "description", + "name": "name", + "parameters": "parameters", + } + + def __init__(self_, name: str, parameters: Dict[str, Any], description: Union[str, UnsetType]=unset, **kwargs): + """ + A function definition for a tool available to the model. + + :param description: A description of what the function does. + :type description: str, optional + + :param name: The name of the function. + :type name: str + + :param parameters: JSON schema describing the function parameters. + :type parameters: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.name = name + self_.parameters = parameters diff --git a/datadog_api_client/v2/model/llm_obs_inference_message.py b/datadog_api_client/v2/model/llm_obs_inference_message.py new file mode 100644 index 0000000000..16233db5a3 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_message.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_inference_content import LLMObsInferenceContent + from datadog_api_client.v2.model.llm_obs_inference_tool_call import LLMObsInferenceToolCall + from datadog_api_client.v2.model.llm_obs_inference_tool_result import LLMObsInferenceToolResult + +class LLMObsInferenceMessage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_inference_content import LLMObsInferenceContent + from datadog_api_client.v2.model.llm_obs_inference_tool_call import LLMObsInferenceToolCall + from datadog_api_client.v2.model.llm_obs_inference_tool_result import LLMObsInferenceToolResult + return { + "content": (str,), + "contents": ([LLMObsInferenceContent],), + "id": (str,), + "role": (str,), + "tool_calls": ([LLMObsInferenceToolCall],), + "tool_results": ([LLMObsInferenceToolResult],), + } + attribute_map = { + "content": "content", + "contents": "contents", + "id": "id", + "role": "role", + "tool_calls": "tool_calls", + "tool_results": "tool_results", + } + + def __init__(self_, content: Union[str, UnsetType]=unset, contents: Union[List[LLMObsInferenceContent], UnsetType]=unset, id: Union[str, UnsetType]=unset, role: Union[str, UnsetType]=unset, tool_calls: Union[List[LLMObsInferenceToolCall], UnsetType]=unset, tool_results: Union[List[LLMObsInferenceToolResult], UnsetType]=unset, **kwargs): + """ + A single message in an LLM inference conversation. + + :param content: Plain text content of the message. + :type content: str, optional + + :param contents: List of structured content blocks in a message. + :type contents: [LLMObsInferenceContent], optional + + :param id: Unique identifier for the message. + :type id: str, optional + + :param role: The role of the message author. + :type role: str, optional + + :param tool_calls: List of tool calls in a message. + :type tool_calls: [LLMObsInferenceToolCall], optional + + :param tool_results: List of tool results in a message. + :type tool_results: [LLMObsInferenceToolResult], optional + """ + if content is not unset: + kwargs["content"] = content + if contents is not unset: + kwargs["contents"] = contents + if id is not unset: + kwargs["id"] = id + if role is not unset: + kwargs["role"] = role + if tool_calls is not unset: + kwargs["tool_calls"] = tool_calls + if tool_results is not unset: + kwargs["tool_results"] = tool_results + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_inference_run_result.py b/datadog_api_client/v2/model/llm_obs_inference_run_result.py new file mode 100644 index 0000000000..443a334c3e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_run_result.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_inference_code import LLMObsInferenceCode + from datadog_api_client.v2.model.llm_obs_internal_reasoning import LLMObsInternalReasoning + from datadog_api_client.v2.model.llm_obs_inference_tool import LLMObsInferenceTool + +class LLMObsInferenceRunResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_inference_code import LLMObsInferenceCode + from datadog_api_client.v2.model.llm_obs_internal_reasoning import LLMObsInternalReasoning + from datadog_api_client.v2.model.llm_obs_inference_tool import LLMObsInferenceTool + return { + "assessment": (str, none_type), + "content": (str,), + "finish_reason": (str,), + "inference_codes": ([LLMObsInferenceCode],), + "input_tokens": (int,), + "internal_reasoning": (LLMObsInternalReasoning,), + "latency": (int,), + "output_tokens": (int,), + "tools": ([LLMObsInferenceTool],), + "total_tokens": (int,), + } + attribute_map = { + "assessment": "assessment", + "content": "content", + "finish_reason": "finish_reason", + "inference_codes": "inference_codes", + "input_tokens": "input_tokens", + "internal_reasoning": "internal_reasoning", + "latency": "latency", + "output_tokens": "output_tokens", + "tools": "tools", + "total_tokens": "total_tokens", + } + + def __init__(self_, assessment: Union[str, none_type], content: str, finish_reason: str, inference_codes: List[LLMObsInferenceCode], input_tokens: int, latency: int, output_tokens: int, tools: List[LLMObsInferenceTool], total_tokens: int, internal_reasoning: Union[LLMObsInternalReasoning, UnsetType]=unset, **kwargs): + """ + The output of a completed LLM inference call. + + :param assessment: An optional assessment of the inference output quality. + :type assessment: str, none_type + + :param content: The text content of the model response. + :type content: str + + :param finish_reason: The reason the model stopped generating tokens. + :type finish_reason: str + + :param inference_codes: List of generated code snippets for the inference configuration. + :type inference_codes: [LLMObsInferenceCode] + + :param input_tokens: Number of input tokens consumed. + :type input_tokens: int + + :param internal_reasoning: The model's internal reasoning or thinking output, if available. + :type internal_reasoning: LLMObsInternalReasoning, optional + + :param latency: Request latency in milliseconds. + :type latency: int + + :param output_tokens: Number of output tokens generated. + :type output_tokens: int + + :param tools: List of tools available to the model. + :type tools: [LLMObsInferenceTool] + + :param total_tokens: Total tokens used (input plus output). + :type total_tokens: int + """ + if internal_reasoning is not unset: + kwargs["internal_reasoning"] = internal_reasoning + super().__init__(kwargs) + + + self_.assessment = assessment + self_.content = content + self_.finish_reason = finish_reason + self_.inference_codes = inference_codes + self_.input_tokens = input_tokens + self_.latency = latency + self_.output_tokens = output_tokens + self_.tools = tools + self_.total_tokens = total_tokens diff --git a/datadog_api_client/v2/model/llm_obs_inference_tool.py b/datadog_api_client/v2/model/llm_obs_inference_tool.py new file mode 100644 index 0000000000..d56fa8e29c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_tool.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_inference_function import LLMObsInferenceFunction + +class LLMObsInferenceTool(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_inference_function import LLMObsInferenceFunction + return { + "function": (LLMObsInferenceFunction,), + "type": (str,), + } + attribute_map = { + "function": "function", + "type": "type", + } + + def __init__(self_, function: LLMObsInferenceFunction, type: str, **kwargs): + """ + A tool definition available to the model during inference. + + :param function: A function definition for a tool available to the model. + :type function: LLMObsInferenceFunction + + :param type: The type of tool. + :type type: str + """ + super().__init__(kwargs) + + + self_.function = function + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_inference_tool_call.py b/datadog_api_client/v2/model/llm_obs_inference_tool_call.py new file mode 100644 index 0000000000..051f8c771b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_tool_call.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsInferenceToolCall(ModelNormal): + @cached_property + def openapi_types(_): + return { + "arguments": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "name": (str,), + "tool_id": (str,), + "type": (str,), + } + attribute_map = { + "arguments": "arguments", + "name": "name", + "tool_id": "tool_id", + "type": "type", + } + + def __init__(self_, arguments: Union[Dict[str, Any], UnsetType]=unset, name: Union[str, UnsetType]=unset, tool_id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A tool call made during LLM inference. + + :param arguments: The arguments passed to the tool. + :type arguments: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param name: The name of the tool being called. + :type name: str, optional + + :param tool_id: Unique identifier for the tool call. + :type tool_id: str, optional + + :param type: The type of tool call. + :type type: str, optional + """ + if arguments is not unset: + kwargs["arguments"] = arguments + if name is not unset: + kwargs["name"] = name + if tool_id is not unset: + kwargs["tool_id"] = tool_id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_inference_tool_result.py b/datadog_api_client/v2/model/llm_obs_inference_tool_result.py new file mode 100644 index 0000000000..fab30b7386 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_inference_tool_result.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsInferenceToolResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "result": (str,), + "tool_id": (str,), + "type": (str,), + } + attribute_map = { + "name": "name", + "result": "result", + "tool_id": "tool_id", + "type": "type", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, result: Union[str, UnsetType]=unset, tool_id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The result returned by a tool call during LLM inference. + + :param name: The name of the tool that produced this result. + :type name: str, optional + + :param result: The result content returned by the tool. + :type result: str, optional + + :param tool_id: Identifier matching the corresponding tool call. + :type tool_id: str, optional + + :param type: The type of tool result. + :type type: str, optional + """ + if name is not unset: + kwargs["name"] = name + if result is not unset: + kwargs["result"] = result + if tool_id is not unset: + kwargs["tool_id"] = tool_id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_integration_account.py b/datadog_api_client/v2/model/llm_obs_integration_account.py new file mode 100644 index 0000000000..5f69da7fea --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_integration_account.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_azure_open_ai_metadata import LLMObsAzureOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_vertex_ai_metadata import LLMObsVertexAIMetadata + +class LLMObsIntegrationAccount(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_azure_open_ai_metadata import LLMObsAzureOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_vertex_ai_metadata import LLMObsVertexAIMetadata + return { + "account_id": (str,), + "account_name": (str,), + "account_region": (str,), + "azure_openai_metadata": (LLMObsAzureOpenAIMetadata,), + "id": (str,), + "integration": (str,), + "vertex_ai_metadata": (LLMObsVertexAIMetadata,), + } + attribute_map = { + "account_id": "account_id", + "account_name": "account_name", + "account_region": "account_region", + "azure_openai_metadata": "azure_openai_metadata", + "id": "id", + "integration": "integration", + "vertex_ai_metadata": "vertex_ai_metadata", + } + + def __init__(self_, account_id: str, account_name: str, id: str, integration: str, account_region: Union[str, UnsetType]=unset, azure_openai_metadata: Union[LLMObsAzureOpenAIMetadata, UnsetType]=unset, vertex_ai_metadata: Union[LLMObsVertexAIMetadata, UnsetType]=unset, **kwargs): + """ + A configured account for an LLM provider integration. + + :param account_id: Provider-specific account identifier. + :type account_id: str + + :param account_name: Human-readable name for the integration account. + :type account_name: str + + :param account_region: Provider region associated with the account, if applicable. + :type account_region: str, optional + + :param azure_openai_metadata: Azure OpenAI-specific metadata for an integration account or inference request. + :type azure_openai_metadata: LLMObsAzureOpenAIMetadata, optional + + :param id: Unique identifier for the integration account. + :type id: str + + :param integration: The name of the LLM provider integration. + :type integration: str + + :param vertex_ai_metadata: Vertex AI-specific metadata for an integration account or inference request. + :type vertex_ai_metadata: LLMObsVertexAIMetadata, optional + """ + if account_region is not unset: + kwargs["account_region"] = account_region + if azure_openai_metadata is not unset: + kwargs["azure_openai_metadata"] = azure_openai_metadata + if vertex_ai_metadata is not unset: + kwargs["vertex_ai_metadata"] = vertex_ai_metadata + super().__init__(kwargs) + + + self_.account_id = account_id + self_.account_name = account_name + self_.id = id + self_.integration = integration diff --git a/datadog_api_client/v2/model/llm_obs_integration_inference_request.py b/datadog_api_client/v2/model/llm_obs_integration_inference_request.py new file mode 100644 index 0000000000..f7a030bd71 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_integration_inference_request.py @@ -0,0 +1,164 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_anthropic_metadata import LLMObsAnthropicMetadata + from datadog_api_client.v2.model.llm_obs_azure_open_ai_metadata import LLMObsAzureOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_bedrock_metadata import LLMObsBedrockMetadata + from datadog_api_client.v2.model.llm_obs_inference_message import LLMObsInferenceMessage + from datadog_api_client.v2.model.llm_obs_open_ai_metadata import LLMObsOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_inference_tool import LLMObsInferenceTool + from datadog_api_client.v2.model.llm_obs_vertex_ai_metadata import LLMObsVertexAIMetadata + +class LLMObsIntegrationInferenceRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_anthropic_metadata import LLMObsAnthropicMetadata + from datadog_api_client.v2.model.llm_obs_azure_open_ai_metadata import LLMObsAzureOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_bedrock_metadata import LLMObsBedrockMetadata + from datadog_api_client.v2.model.llm_obs_inference_message import LLMObsInferenceMessage + from datadog_api_client.v2.model.llm_obs_open_ai_metadata import LLMObsOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_inference_tool import LLMObsInferenceTool + from datadog_api_client.v2.model.llm_obs_vertex_ai_metadata import LLMObsVertexAIMetadata + return { + "anthropic_metadata": (LLMObsAnthropicMetadata,), + "azure_openai_metadata": (LLMObsAzureOpenAIMetadata,), + "bedrock_metadata": (LLMObsBedrockMetadata,), + "frequency_penalty": (float, none_type), + "json_schema": (str, none_type), + "max_completion_tokens": (int, none_type), + "max_tokens": (int, none_type), + "messages": ([LLMObsInferenceMessage],), + "model_id": (str,), + "openai_metadata": (LLMObsOpenAIMetadata,), + "presence_penalty": (float, none_type), + "temperature": (float, none_type), + "tools": ([LLMObsInferenceTool],), + "top_k": (int, none_type), + "top_p": (float, none_type), + "vertex_ai_metadata": (LLMObsVertexAIMetadata,), + } + attribute_map = { + "anthropic_metadata": "anthropic_metadata", + "azure_openai_metadata": "azure_openai_metadata", + "bedrock_metadata": "bedrock_metadata", + "frequency_penalty": "frequency_penalty", + "json_schema": "json_schema", + "max_completion_tokens": "max_completion_tokens", + "max_tokens": "max_tokens", + "messages": "messages", + "model_id": "model_id", + "openai_metadata": "openai_metadata", + "presence_penalty": "presence_penalty", + "temperature": "temperature", + "tools": "tools", + "top_k": "top_k", + "top_p": "top_p", + "vertex_ai_metadata": "vertex_ai_metadata", + } + + def __init__(self_, messages: List[LLMObsInferenceMessage], model_id: str, anthropic_metadata: Union[LLMObsAnthropicMetadata, UnsetType]=unset, azure_openai_metadata: Union[LLMObsAzureOpenAIMetadata, UnsetType]=unset, bedrock_metadata: Union[LLMObsBedrockMetadata, UnsetType]=unset, frequency_penalty: Union[float, none_type, UnsetType]=unset, json_schema: Union[str, none_type, UnsetType]=unset, max_completion_tokens: Union[int, none_type, UnsetType]=unset, max_tokens: Union[int, none_type, UnsetType]=unset, openai_metadata: Union[LLMObsOpenAIMetadata, UnsetType]=unset, presence_penalty: Union[float, none_type, UnsetType]=unset, temperature: Union[float, none_type, UnsetType]=unset, tools: Union[List[LLMObsInferenceTool], UnsetType]=unset, top_k: Union[int, none_type, UnsetType]=unset, top_p: Union[float, none_type, UnsetType]=unset, vertex_ai_metadata: Union[LLMObsVertexAIMetadata, UnsetType]=unset, **kwargs): + """ + Parameters for an LLM inference request. + + :param anthropic_metadata: Anthropic-specific metadata for an inference request. + :type anthropic_metadata: LLMObsAnthropicMetadata, optional + + :param azure_openai_metadata: Azure OpenAI-specific metadata for an integration account or inference request. + :type azure_openai_metadata: LLMObsAzureOpenAIMetadata, optional + + :param bedrock_metadata: Amazon Bedrock-specific metadata for an inference request. + :type bedrock_metadata: LLMObsBedrockMetadata, optional + + :param frequency_penalty: Penalty for token frequency to reduce repetition. + :type frequency_penalty: float, none_type, optional + + :param json_schema: JSON schema for structured output, if supported by the model. + :type json_schema: str, none_type, optional + + :param max_completion_tokens: Maximum number of completion tokens to generate (alternative to max_tokens for some providers). + :type max_completion_tokens: int, none_type, optional + + :param max_tokens: Maximum number of tokens to generate. + :type max_tokens: int, none_type, optional + + :param messages: List of messages in an inference conversation. + :type messages: [LLMObsInferenceMessage] + + :param model_id: The model identifier to use for inference. + :type model_id: str + + :param openai_metadata: OpenAI-specific metadata for an inference request. + :type openai_metadata: LLMObsOpenAIMetadata, optional + + :param presence_penalty: Penalty for token presence to encourage topic diversity. + :type presence_penalty: float, none_type, optional + + :param temperature: Sampling temperature between 0 and 2. Higher values produce more random output. + :type temperature: float, none_type, optional + + :param tools: List of tools available to the model. + :type tools: [LLMObsInferenceTool], optional + + :param top_k: Top-K sampling parameter. + :type top_k: int, none_type, optional + + :param top_p: Nucleus sampling probability mass. + :type top_p: float, none_type, optional + + :param vertex_ai_metadata: Vertex AI-specific metadata for an integration account or inference request. + :type vertex_ai_metadata: LLMObsVertexAIMetadata, optional + """ + if anthropic_metadata is not unset: + kwargs["anthropic_metadata"] = anthropic_metadata + if azure_openai_metadata is not unset: + kwargs["azure_openai_metadata"] = azure_openai_metadata + if bedrock_metadata is not unset: + kwargs["bedrock_metadata"] = bedrock_metadata + if frequency_penalty is not unset: + kwargs["frequency_penalty"] = frequency_penalty + if json_schema is not unset: + kwargs["json_schema"] = json_schema + if max_completion_tokens is not unset: + kwargs["max_completion_tokens"] = max_completion_tokens + if max_tokens is not unset: + kwargs["max_tokens"] = max_tokens + if openai_metadata is not unset: + kwargs["openai_metadata"] = openai_metadata + if presence_penalty is not unset: + kwargs["presence_penalty"] = presence_penalty + if temperature is not unset: + kwargs["temperature"] = temperature + if tools is not unset: + kwargs["tools"] = tools + if top_k is not unset: + kwargs["top_k"] = top_k + if top_p is not unset: + kwargs["top_p"] = top_p + if vertex_ai_metadata is not unset: + kwargs["vertex_ai_metadata"] = vertex_ai_metadata + super().__init__(kwargs) + + + self_.messages = messages + self_.model_id = model_id diff --git a/datadog_api_client/v2/model/llm_obs_integration_inference_response.py b/datadog_api_client/v2/model/llm_obs_integration_inference_response.py new file mode 100644 index 0000000000..3fc86b0d13 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_integration_inference_response.py @@ -0,0 +1,181 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_anthropic_metadata import LLMObsAnthropicMetadata + from datadog_api_client.v2.model.llm_obs_azure_open_ai_metadata import LLMObsAzureOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_bedrock_metadata import LLMObsBedrockMetadata + from datadog_api_client.v2.model.llm_obs_inference_error_response import LLMObsInferenceErrorResponse + from datadog_api_client.v2.model.llm_obs_inference_message import LLMObsInferenceMessage + from datadog_api_client.v2.model.llm_obs_open_ai_metadata import LLMObsOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_inference_run_result import LLMObsInferenceRunResult + from datadog_api_client.v2.model.llm_obs_inference_tool import LLMObsInferenceTool + from datadog_api_client.v2.model.llm_obs_vertex_ai_metadata import LLMObsVertexAIMetadata + +class LLMObsIntegrationInferenceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_anthropic_metadata import LLMObsAnthropicMetadata + from datadog_api_client.v2.model.llm_obs_azure_open_ai_metadata import LLMObsAzureOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_bedrock_metadata import LLMObsBedrockMetadata + from datadog_api_client.v2.model.llm_obs_inference_error_response import LLMObsInferenceErrorResponse + from datadog_api_client.v2.model.llm_obs_inference_message import LLMObsInferenceMessage + from datadog_api_client.v2.model.llm_obs_open_ai_metadata import LLMObsOpenAIMetadata + from datadog_api_client.v2.model.llm_obs_inference_run_result import LLMObsInferenceRunResult + from datadog_api_client.v2.model.llm_obs_inference_tool import LLMObsInferenceTool + from datadog_api_client.v2.model.llm_obs_vertex_ai_metadata import LLMObsVertexAIMetadata + return { + "anthropic_metadata": (LLMObsAnthropicMetadata,), + "azure_openai_metadata": (LLMObsAzureOpenAIMetadata,), + "bedrock_metadata": (LLMObsBedrockMetadata,), + "error_response": (LLMObsInferenceErrorResponse,), + "frequency_penalty": (float, none_type), + "json_schema": (str, none_type), + "max_completion_tokens": (int, none_type), + "max_tokens": (int, none_type), + "messages": ([LLMObsInferenceMessage],), + "model_id": (str,), + "openai_metadata": (LLMObsOpenAIMetadata,), + "presence_penalty": (float, none_type), + "response": (LLMObsInferenceRunResult,), + "temperature": (float, none_type), + "tools": ([LLMObsInferenceTool],), + "top_k": (int, none_type), + "top_p": (float, none_type), + "vertex_ai_metadata": (LLMObsVertexAIMetadata,), + } + attribute_map = { + "anthropic_metadata": "anthropic_metadata", + "azure_openai_metadata": "azure_openai_metadata", + "bedrock_metadata": "bedrock_metadata", + "error_response": "error_response", + "frequency_penalty": "frequency_penalty", + "json_schema": "json_schema", + "max_completion_tokens": "max_completion_tokens", + "max_tokens": "max_tokens", + "messages": "messages", + "model_id": "model_id", + "openai_metadata": "openai_metadata", + "presence_penalty": "presence_penalty", + "response": "response", + "temperature": "temperature", + "tools": "tools", + "top_k": "top_k", + "top_p": "top_p", + "vertex_ai_metadata": "vertex_ai_metadata", + } + + def __init__(self_, messages: List[LLMObsInferenceMessage], model_id: str, response: LLMObsInferenceRunResult, anthropic_metadata: Union[LLMObsAnthropicMetadata, UnsetType]=unset, azure_openai_metadata: Union[LLMObsAzureOpenAIMetadata, UnsetType]=unset, bedrock_metadata: Union[LLMObsBedrockMetadata, UnsetType]=unset, error_response: Union[LLMObsInferenceErrorResponse, UnsetType]=unset, frequency_penalty: Union[float, none_type, UnsetType]=unset, json_schema: Union[str, none_type, UnsetType]=unset, max_completion_tokens: Union[int, none_type, UnsetType]=unset, max_tokens: Union[int, none_type, UnsetType]=unset, openai_metadata: Union[LLMObsOpenAIMetadata, UnsetType]=unset, presence_penalty: Union[float, none_type, UnsetType]=unset, temperature: Union[float, none_type, UnsetType]=unset, tools: Union[List[LLMObsInferenceTool], UnsetType]=unset, top_k: Union[int, none_type, UnsetType]=unset, top_p: Union[float, none_type, UnsetType]=unset, vertex_ai_metadata: Union[LLMObsVertexAIMetadata, UnsetType]=unset, **kwargs): + """ + The result of an LLM inference request, including input parameters and the model response. + + :param anthropic_metadata: Anthropic-specific metadata for an inference request. + :type anthropic_metadata: LLMObsAnthropicMetadata, optional + + :param azure_openai_metadata: Azure OpenAI-specific metadata for an integration account or inference request. + :type azure_openai_metadata: LLMObsAzureOpenAIMetadata, optional + + :param bedrock_metadata: Amazon Bedrock-specific metadata for an inference request. + :type bedrock_metadata: LLMObsBedrockMetadata, optional + + :param error_response: Error details returned when an inference provider returns an error. + :type error_response: LLMObsInferenceErrorResponse, optional + + :param frequency_penalty: Frequency penalty that was applied. + :type frequency_penalty: float, none_type, optional + + :param json_schema: JSON schema that was applied for structured output. + :type json_schema: str, none_type, optional + + :param max_completion_tokens: Maximum number of completion tokens that were configured. + :type max_completion_tokens: int, none_type, optional + + :param max_tokens: Maximum number of tokens that were configured. + :type max_tokens: int, none_type, optional + + :param messages: List of messages in an inference conversation. + :type messages: [LLMObsInferenceMessage] + + :param model_id: The model identifier used for inference. + :type model_id: str + + :param openai_metadata: OpenAI-specific metadata for an inference request. + :type openai_metadata: LLMObsOpenAIMetadata, optional + + :param presence_penalty: Presence penalty that was applied. + :type presence_penalty: float, none_type, optional + + :param response: The output of a completed LLM inference call. + :type response: LLMObsInferenceRunResult + + :param temperature: Sampling temperature that was used. + :type temperature: float, none_type, optional + + :param tools: List of tools available to the model. + :type tools: [LLMObsInferenceTool], optional + + :param top_k: Top-K sampling parameter that was used. + :type top_k: int, none_type, optional + + :param top_p: Nucleus sampling parameter that was used. + :type top_p: float, none_type, optional + + :param vertex_ai_metadata: Vertex AI-specific metadata for an integration account or inference request. + :type vertex_ai_metadata: LLMObsVertexAIMetadata, optional + """ + if anthropic_metadata is not unset: + kwargs["anthropic_metadata"] = anthropic_metadata + if azure_openai_metadata is not unset: + kwargs["azure_openai_metadata"] = azure_openai_metadata + if bedrock_metadata is not unset: + kwargs["bedrock_metadata"] = bedrock_metadata + if error_response is not unset: + kwargs["error_response"] = error_response + if frequency_penalty is not unset: + kwargs["frequency_penalty"] = frequency_penalty + if json_schema is not unset: + kwargs["json_schema"] = json_schema + if max_completion_tokens is not unset: + kwargs["max_completion_tokens"] = max_completion_tokens + if max_tokens is not unset: + kwargs["max_tokens"] = max_tokens + if openai_metadata is not unset: + kwargs["openai_metadata"] = openai_metadata + if presence_penalty is not unset: + kwargs["presence_penalty"] = presence_penalty + if temperature is not unset: + kwargs["temperature"] = temperature + if tools is not unset: + kwargs["tools"] = tools + if top_k is not unset: + kwargs["top_k"] = top_k + if top_p is not unset: + kwargs["top_p"] = top_p + if vertex_ai_metadata is not unset: + kwargs["vertex_ai_metadata"] = vertex_ai_metadata + super().__init__(kwargs) + + + self_.messages = messages + self_.model_id = model_id + self_.response = response diff --git a/datadog_api_client/v2/model/llm_obs_integration_model.py b/datadog_api_client/v2/model/llm_obs_integration_model.py new file mode 100644 index 0000000000..396b1f67a5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_integration_model.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_integration_model_region_prefix_overrides import LLMObsIntegrationModelRegionPrefixOverrides + +class LLMObsIntegrationModel(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_integration_model_region_prefix_overrides import LLMObsIntegrationModelRegionPrefixOverrides + return { + "has_access": (bool,), + "id": (str,), + "integration": (str,), + "integration_display_name": (str,), + "json_schema": (bool,), + "model_display_name": (str,), + "model_id": (str,), + "provider": (str,), + "provider_display_name": (str,), + "region_prefix_overrides": (LLMObsIntegrationModelRegionPrefixOverrides,), + } + attribute_map = { + "has_access": "has_access", + "id": "id", + "integration": "integration", + "integration_display_name": "integration_display_name", + "json_schema": "json_schema", + "model_display_name": "model_display_name", + "model_id": "model_id", + "provider": "provider", + "provider_display_name": "provider_display_name", + "region_prefix_overrides": "region_prefix_overrides", + } + + def __init__(self_, has_access: bool, id: str, integration: str, integration_display_name: str, json_schema: bool, model_display_name: str, model_id: str, provider: str, provider_display_name: str, region_prefix_overrides: Union[LLMObsIntegrationModelRegionPrefixOverrides, UnsetType]=unset, **kwargs): + """ + A model available for a given LLM provider integration and account. + + :param has_access: Whether the account has access to this model. + :type has_access: bool + + :param id: Unique identifier for the model entry. + :type id: str + + :param integration: The name of the LLM provider integration. + :type integration: str + + :param integration_display_name: Human-readable name of the LLM provider integration. + :type integration_display_name: str + + :param json_schema: Whether the model supports structured output via JSON schema. + :type json_schema: bool + + :param model_display_name: Human-readable model name. + :type model_display_name: str + + :param model_id: Provider-specific model identifier used in inference calls. + :type model_id: str + + :param provider: The underlying model provider. + :type provider: str + + :param provider_display_name: Human-readable name of the underlying model provider. + :type provider_display_name: str + + :param region_prefix_overrides: Map of region-specific model ID prefix overrides. + :type region_prefix_overrides: LLMObsIntegrationModelRegionPrefixOverrides, optional + """ + if region_prefix_overrides is not unset: + kwargs["region_prefix_overrides"] = region_prefix_overrides + super().__init__(kwargs) + + + self_.has_access = has_access + self_.id = id + self_.integration = integration + self_.integration_display_name = integration_display_name + self_.json_schema = json_schema + self_.model_display_name = model_display_name + self_.model_id = model_id + self_.provider = provider + self_.provider_display_name = provider_display_name diff --git a/datadog_api_client/v2/model/llm_obs_integration_model_region_prefix_overrides.py b/datadog_api_client/v2/model/llm_obs_integration_model_region_prefix_overrides.py new file mode 100644 index 0000000000..98f606cebe --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_integration_model_region_prefix_overrides.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsIntegrationModelRegionPrefixOverrides(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + + def __init__(self_, **kwargs): + """ + Map of region-specific model ID prefix overrides. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_integration_name.py b/datadog_api_client/v2/model/llm_obs_integration_name.py new file mode 100644 index 0000000000..79d8541be6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_integration_name.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsIntegrationName(ModelSimple): + """ + The name of a supported LLM provider integration. + + :param value: Must be one of ["openai", "amazon_bedrock", "anthropic", "azure_openai", "vertex_ai", "llmproxy"]. + :type value: str + """ + + allowed_values = { + "openai", + "amazon_bedrock", + "anthropic", + "azure_openai", + "vertex_ai", + "llmproxy", + } + OPENAI: ClassVar["LLMObsIntegrationName"] + AMAZON_BEDROCK: ClassVar["LLMObsIntegrationName"] + ANTHROPIC: ClassVar["LLMObsIntegrationName"] + AZURE_OPENAI: ClassVar["LLMObsIntegrationName"] + VERTEX_AI: ClassVar["LLMObsIntegrationName"] + LLMPROXY: ClassVar["LLMObsIntegrationName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsIntegrationName.OPENAI = LLMObsIntegrationName("openai") +LLMObsIntegrationName.AMAZON_BEDROCK = LLMObsIntegrationName("amazon_bedrock") +LLMObsIntegrationName.ANTHROPIC = LLMObsIntegrationName("anthropic") +LLMObsIntegrationName.AZURE_OPENAI = LLMObsIntegrationName("azure_openai") +LLMObsIntegrationName.VERTEX_AI = LLMObsIntegrationName("vertex_ai") +LLMObsIntegrationName.LLMPROXY = LLMObsIntegrationName("llmproxy") diff --git a/datadog_api_client/v2/model/llm_obs_internal_reasoning.py b/datadog_api_client/v2/model/llm_obs_internal_reasoning.py new file mode 100644 index 0000000000..3ac7f7dcd6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_internal_reasoning.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsInternalReasoning(ModelNormal): + @cached_property + def openapi_types(_): + return { + "reasoning_tokens": (int, none_type), + "text": (str,), + } + attribute_map = { + "reasoning_tokens": "reasoning_tokens", + "text": "text", + } + + def __init__(self_, text: str, reasoning_tokens: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + The model's internal reasoning or thinking output, if available. + + :param reasoning_tokens: Number of tokens used for internal reasoning. + :type reasoning_tokens: int, none_type, optional + + :param text: The reasoning text produced by the model. + :type text: str + """ + if reasoning_tokens is not unset: + kwargs["reasoning_tokens"] = reasoning_tokens + super().__init__(kwargs) + + + self_.text = text diff --git a/datadog_api_client/v2/model/llm_obs_label_schema.py b/datadog_api_client/v2/model/llm_obs_label_schema.py new file mode 100644 index 0000000000..663a4978bc --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_label_schema.py @@ -0,0 +1,124 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_label_schema_type import LLMObsLabelSchemaType + +class LLMObsLabelSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_label_schema_type import LLMObsLabelSchemaType + return { + "description": (str,), + "has_assessment": (bool,), + "has_reasoning": (bool,), + "id": (str,), + "is_assessment": (bool,), + "is_integer": (bool,), + "is_required": (bool,), + "max": (float,), + "min": (float,), + "name": (str,), + "type": (LLMObsLabelSchemaType,), + "values": ([str],), + } + attribute_map = { + "description": "description", + "has_assessment": "has_assessment", + "has_reasoning": "has_reasoning", + "id": "id", + "is_assessment": "is_assessment", + "is_integer": "is_integer", + "is_required": "is_required", + "max": "max", + "min": "min", + "name": "name", + "type": "type", + "values": "values", + } + + def __init__(self_, name: str, type: LLMObsLabelSchemaType, description: Union[str, UnsetType]=unset, has_assessment: Union[bool, UnsetType]=unset, has_reasoning: Union[bool, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_assessment: Union[bool, UnsetType]=unset, is_integer: Union[bool, UnsetType]=unset, is_required: Union[bool, UnsetType]=unset, max: Union[float, UnsetType]=unset, min: Union[float, UnsetType]=unset, values: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema definition for a single label in an annotation queue. + + :param description: Description of the label. + :type description: str, optional + + :param has_assessment: Whether this label includes an assessment field. + :type has_assessment: bool, optional + + :param has_reasoning: Whether this label includes a reasoning field. + :type has_reasoning: bool, optional + + :param id: Unique identifier of the label schema. Assigned by the server if not provided. + :type id: str, optional + + :param is_assessment: Whether the boolean label represents an assessment. Requires ``has_assessment`` to be true. + :type is_assessment: bool, optional + + :param is_integer: Whether score values must be integers. Applicable to score-type labels. + :type is_integer: bool, optional + + :param is_required: Whether this label is required for an annotation. + :type is_required: bool, optional + + :param max: Maximum value for score-type labels. + :type max: float, optional + + :param min: Minimum value for score-type labels. + :type min: float, optional + + :param name: Name of the label. Must match the pattern ``^[a-zA-Z0-9_-]+$`` and be unique within the queue. + :type name: str + + :param type: Type of a label in an annotation queue label schema. + :type type: LLMObsLabelSchemaType + + :param values: Allowed values for categorical-type labels. Must contain at least one non-empty, unique value. + :type values: [str], optional + """ + if description is not unset: + kwargs["description"] = description + if has_assessment is not unset: + kwargs["has_assessment"] = has_assessment + if has_reasoning is not unset: + kwargs["has_reasoning"] = has_reasoning + if id is not unset: + kwargs["id"] = id + if is_assessment is not unset: + kwargs["is_assessment"] = is_assessment + if is_integer is not unset: + kwargs["is_integer"] = is_integer + if is_required is not unset: + kwargs["is_required"] = is_required + if max is not unset: + kwargs["max"] = max + if min is not unset: + kwargs["min"] = min + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_label_schema_type.py b/datadog_api_client/v2/model/llm_obs_label_schema_type.py new file mode 100644 index 0000000000..885f81450a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_label_schema_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsLabelSchemaType(ModelSimple): + """ + Type of a label in an annotation queue label schema. + + :param value: Must be one of ["score", "categorical", "boolean", "text"]. + :type value: str + """ + + allowed_values = { + "score", + "categorical", + "boolean", + "text", + } + SCORE: ClassVar["LLMObsLabelSchemaType"] + CATEGORICAL: ClassVar["LLMObsLabelSchemaType"] + BOOLEAN: ClassVar["LLMObsLabelSchemaType"] + TEXT: ClassVar["LLMObsLabelSchemaType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsLabelSchemaType.SCORE = LLMObsLabelSchemaType("score") +LLMObsLabelSchemaType.CATEGORICAL = LLMObsLabelSchemaType("categorical") +LLMObsLabelSchemaType.BOOLEAN = LLMObsLabelSchemaType("boolean") +LLMObsLabelSchemaType.TEXT = LLMObsLabelSchemaType("text") diff --git a/datadog_api_client/v2/model/llm_obs_metric_assessment.py b/datadog_api_client/v2/model/llm_obs_metric_assessment.py new file mode 100644 index 0000000000..58815c9b8a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_metric_assessment.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsMetricAssessment(ModelSimple): + """ + Assessment result for an LLM Observability experiment metric. + + :param value: Must be one of ["pass", "fail"]. + :type value: str + """ + + allowed_values = { + "pass", + "fail", + } + PASS: ClassVar["LLMObsMetricAssessment"] + FAIL: ClassVar["LLMObsMetricAssessment"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsMetricAssessment.PASS = LLMObsMetricAssessment("pass") +LLMObsMetricAssessment.FAIL = LLMObsMetricAssessment("fail") diff --git a/datadog_api_client/v2/model/llm_obs_metric_score_type.py b/datadog_api_client/v2/model/llm_obs_metric_score_type.py new file mode 100644 index 0000000000..db34999714 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_metric_score_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsMetricScoreType(ModelSimple): + """ + Type of metric recorded for an LLM Observability experiment. + + :param value: Must be one of ["score", "categorical", "boolean", "json"]. + :type value: str + """ + + allowed_values = { + "score", + "categorical", + "boolean", + "json", + } + SCORE: ClassVar["LLMObsMetricScoreType"] + CATEGORICAL: ClassVar["LLMObsMetricScoreType"] + BOOLEAN: ClassVar["LLMObsMetricScoreType"] + JSON: ClassVar["LLMObsMetricScoreType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsMetricScoreType.SCORE = LLMObsMetricScoreType("score") +LLMObsMetricScoreType.CATEGORICAL = LLMObsMetricScoreType("categorical") +LLMObsMetricScoreType.BOOLEAN = LLMObsMetricScoreType("boolean") +LLMObsMetricScoreType.JSON = LLMObsMetricScoreType("json") diff --git a/datadog_api_client/v2/model/llm_obs_open_ai_metadata.py b/datadog_api_client/v2/model/llm_obs_open_ai_metadata.py new file mode 100644 index 0000000000..c29d2a3dbd --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_open_ai_metadata.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_open_ai_reasoning_effort import LLMObsOpenAIReasoningEffort + from datadog_api_client.v2.model.llm_obs_open_ai_reasoning_summary import LLMObsOpenAIReasoningSummary + +class LLMObsOpenAIMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_open_ai_reasoning_effort import LLMObsOpenAIReasoningEffort + from datadog_api_client.v2.model.llm_obs_open_ai_reasoning_summary import LLMObsOpenAIReasoningSummary + return { + "reasoning_effort": (LLMObsOpenAIReasoningEffort,), + "reasoning_summary": (LLMObsOpenAIReasoningSummary,), + } + attribute_map = { + "reasoning_effort": "reasoning_effort", + "reasoning_summary": "reasoning_summary", + } + + def __init__(self_, reasoning_effort: Union[LLMObsOpenAIReasoningEffort, none_type, UnsetType]=unset, reasoning_summary: Union[LLMObsOpenAIReasoningSummary, none_type, UnsetType]=unset, **kwargs): + """ + OpenAI-specific metadata for an inference request. + + :param reasoning_effort: The reasoning effort level for OpenAI models that support it. + :type reasoning_effort: LLMObsOpenAIReasoningEffort, none_type, optional + + :param reasoning_summary: The verbosity of the reasoning summary. + :type reasoning_summary: LLMObsOpenAIReasoningSummary, none_type, optional + """ + if reasoning_effort is not unset: + kwargs["reasoning_effort"] = reasoning_effort + if reasoning_summary is not unset: + kwargs["reasoning_summary"] = reasoning_summary + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_open_ai_reasoning_effort.py b/datadog_api_client/v2/model/llm_obs_open_ai_reasoning_effort.py new file mode 100644 index 0000000000..192ae1c57c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_open_ai_reasoning_effort.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsOpenAIReasoningEffort(ModelSimple): + """ + The reasoning effort level for OpenAI models that support it. + + :param value: Must be one of ["none", "low", "medium", "high", "xhigh"]. + :type value: str + """ + + allowed_values = { + "none", + "low", + "medium", + "high", + "xhigh", + } + NONE: ClassVar["LLMObsOpenAIReasoningEffort"] + LOW: ClassVar["LLMObsOpenAIReasoningEffort"] + MEDIUM: ClassVar["LLMObsOpenAIReasoningEffort"] + HIGH: ClassVar["LLMObsOpenAIReasoningEffort"] + XHIGH: ClassVar["LLMObsOpenAIReasoningEffort"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsOpenAIReasoningEffort.NONE = LLMObsOpenAIReasoningEffort("none") +LLMObsOpenAIReasoningEffort.LOW = LLMObsOpenAIReasoningEffort("low") +LLMObsOpenAIReasoningEffort.MEDIUM = LLMObsOpenAIReasoningEffort("medium") +LLMObsOpenAIReasoningEffort.HIGH = LLMObsOpenAIReasoningEffort("high") +LLMObsOpenAIReasoningEffort.XHIGH = LLMObsOpenAIReasoningEffort("xhigh") diff --git a/datadog_api_client/v2/model/llm_obs_open_ai_reasoning_summary.py b/datadog_api_client/v2/model/llm_obs_open_ai_reasoning_summary.py new file mode 100644 index 0000000000..1ae831e02c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_open_ai_reasoning_summary.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsOpenAIReasoningSummary(ModelSimple): + """ + The verbosity of the reasoning summary. + + :param value: Must be one of ["auto", "concise", "detailed"]. + :type value: str + """ + + allowed_values = { + "auto", + "concise", + "detailed", + } + AUTO: ClassVar["LLMObsOpenAIReasoningSummary"] + CONCISE: ClassVar["LLMObsOpenAIReasoningSummary"] + DETAILED: ClassVar["LLMObsOpenAIReasoningSummary"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsOpenAIReasoningSummary.AUTO = LLMObsOpenAIReasoningSummary("auto") +LLMObsOpenAIReasoningSummary.CONCISE = LLMObsOpenAIReasoningSummary("concise") +LLMObsOpenAIReasoningSummary.DETAILED = LLMObsOpenAIReasoningSummary("detailed") diff --git a/datadog_api_client/v2/model/llm_obs_patterns_activity_progress.py b/datadog_api_client/v2/model/llm_obs_patterns_activity_progress.py new file mode 100644 index 0000000000..dcdab22fbc --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_activity_progress.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsActivityProgress(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "started_at": (datetime, none_type), + "status": (str,), + } + attribute_map = { + "name": "name", + "started_at": "started_at", + "status": "status", + } + + def __init__(self_, name: str, status: str, started_at: Union[datetime, none_type, UnsetType]=unset, **kwargs): + """ + Progress information for a single step of a patterns run. + + :param name: Name of the step. + :type name: str + + :param started_at: Timestamp when the step started. Null if the step has not started. + :type started_at: datetime, none_type, optional + + :param status: Status of the step. + :type status: str + """ + if started_at is not unset: + kwargs["started_at"] = started_at + super().__init__(kwargs) + + + self_.name = name + self_.status = status diff --git a/datadog_api_client/v2/model/llm_obs_patterns_clustered_point.py b/datadog_api_client/v2/model/llm_obs_patterns_clustered_point.py new file mode 100644 index 0000000000..41580800dc --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_clustered_point.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsClusteredPoint(ModelNormal): + @cached_property + def openapi_types(_): + return { + "event_id": (str,), + "id": (str,), + "input": (str,), + "is_included": (bool,), + "is_suggested": (bool,), + "session_id": (str,), + "span_id": (str,), + "topic_id": (str,), + } + attribute_map = { + "event_id": "event_id", + "id": "id", + "input": "input", + "is_included": "is_included", + "is_suggested": "is_suggested", + "session_id": "session_id", + "span_id": "span_id", + "topic_id": "topic_id", + } + + def __init__(self_, event_id: str, id: str, input: str, is_included: bool, is_suggested: bool, session_id: str, span_id: str, topic_id: str, **kwargs): + """ + A single data point grouped into a topic. + + :param event_id: Identifier of the source event. + :type event_id: str + + :param id: Unique identifier of the clustered point. + :type id: str + + :param input: Input text of the source span. + :type input: str + + :param is_included: Whether the point is included in the patterns dataset. + :type is_included: bool + + :param is_suggested: Whether the point is suggested for inclusion in the patterns dataset. + :type is_suggested: bool + + :param session_id: Identifier of the source session. + :type session_id: str + + :param span_id: Identifier of the source span. + :type span_id: str + + :param topic_id: Identifier of the topic the point belongs to. + :type topic_id: str + """ + super().__init__(kwargs) + + + self_.event_id = event_id + self_.id = id + self_.input = input + self_.is_included = is_included + self_.is_suggested = is_suggested + self_.session_id = session_id + self_.span_id = span_id + self_.topic_id = topic_id diff --git a/datadog_api_client/v2/model/llm_obs_patterns_clustered_point_ref.py b/datadog_api_client/v2/model/llm_obs_patterns_clustered_point_ref.py new file mode 100644 index 0000000000..9f8ee3092f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_clustered_point_ref.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsClusteredPointRef(ModelNormal): + @cached_property + def openapi_types(_): + return { + "duration": (float,), + "estimated_total_cost": (float,), + "evaluation": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "input_tokens": (float,), + "output_tokens": (float,), + "span_id": (str,), + "status": (str,), + "total_tokens": (float,), + } + attribute_map = { + "duration": "duration", + "estimated_total_cost": "estimated_total_cost", + "evaluation": "evaluation", + "input_tokens": "input_tokens", + "output_tokens": "output_tokens", + "span_id": "span_id", + "status": "status", + "total_tokens": "total_tokens", + } + + def __init__(self_, span_id: str, duration: Union[float, UnsetType]=unset, estimated_total_cost: Union[float, UnsetType]=unset, evaluation: Union[Dict[str, Any], UnsetType]=unset, input_tokens: Union[float, UnsetType]=unset, output_tokens: Union[float, UnsetType]=unset, status: Union[str, UnsetType]=unset, total_tokens: Union[float, UnsetType]=unset, **kwargs): + """ + A clustered point attached inline to a topic. The metric fields are populated + only when the request includes ``include_metrics=true``. + + :param duration: Duration of the source span in nanoseconds. Included only when metrics are requested. + :type duration: float, optional + + :param estimated_total_cost: Estimated total cost of the source span. Included only when metrics are requested. + :type estimated_total_cost: float, optional + + :param evaluation: Evaluation results for the source span keyed by evaluation name. Included + only when metrics are requested. + :type evaluation: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param input_tokens: Number of input tokens of the source span. Included only when metrics are requested. + :type input_tokens: float, optional + + :param output_tokens: Number of output tokens of the source span. Included only when metrics are requested. + :type output_tokens: float, optional + + :param span_id: Identifier of the source span. + :type span_id: str + + :param status: Status of the source span. Included only when metrics are requested. + :type status: str, optional + + :param total_tokens: Total number of tokens of the source span. Included only when metrics are requested. + :type total_tokens: float, optional + """ + if duration is not unset: + kwargs["duration"] = duration + if estimated_total_cost is not unset: + kwargs["estimated_total_cost"] = estimated_total_cost + if evaluation is not unset: + kwargs["evaluation"] = evaluation + if input_tokens is not unset: + kwargs["input_tokens"] = input_tokens + if output_tokens is not unset: + kwargs["output_tokens"] = output_tokens + if status is not unset: + kwargs["status"] = status + if total_tokens is not unset: + kwargs["total_tokens"] = total_tokens + super().__init__(kwargs) + + + self_.span_id = span_id diff --git a/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_response.py b/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_response.py new file mode 100644 index 0000000000..63a59dd982 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_response_data import LLMObsPatternsClusteredPointsResponseData + +class LLMObsPatternsClusteredPointsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_response_data import LLMObsPatternsClusteredPointsResponseData + return { + "data": (LLMObsPatternsClusteredPointsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsClusteredPointsResponseData, **kwargs): + """ + Response containing the clustered points of an LLM Observability topic. + + :param data: Data object of an LLM Observability patterns clustered points response. + :type data: LLMObsPatternsClusteredPointsResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_response_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_response_attributes.py new file mode 100644 index 0000000000..73c9edac24 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_clustered_point import LLMObsPatternsClusteredPoint + +class LLMObsPatternsClusteredPointsResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_clustered_point import LLMObsPatternsClusteredPoint + return { + "next_page_token": (str, none_type), + "points": ([LLMObsPatternsClusteredPoint],), + "topic_id": (str,), + } + attribute_map = { + "next_page_token": "next_page_token", + "points": "points", + "topic_id": "topic_id", + } + + def __init__(self_, next_page_token: Union[str, none_type], points: List[LLMObsPatternsClusteredPoint], topic_id: str, **kwargs): + """ + Attributes of an LLM Observability patterns clustered points response. + + :param next_page_token: Pagination token for the next page of points. Null if there are no more pages. + :type next_page_token: str, none_type + + :param points: List of clustered points. + :type points: [LLMObsPatternsClusteredPoint] + + :param topic_id: Identifier of the topic the points belong to. + :type topic_id: str + """ + super().__init__(kwargs) + + + self_.next_page_token = next_page_token + self_.points = points + self_.topic_id = topic_id diff --git a/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_response_data.py b/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_response_data.py new file mode 100644 index 0000000000..6d53b8202b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_response_attributes import LLMObsPatternsClusteredPointsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_type import LLMObsPatternsClusteredPointsType + +class LLMObsPatternsClusteredPointsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_response_attributes import LLMObsPatternsClusteredPointsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_type import LLMObsPatternsClusteredPointsType + return { + "attributes": (LLMObsPatternsClusteredPointsResponseAttributes,), + "id": (str,), + "type": (LLMObsPatternsClusteredPointsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsClusteredPointsResponseAttributes, id: str, type: LLMObsPatternsClusteredPointsType, **kwargs): + """ + Data object of an LLM Observability patterns clustered points response. + + :param attributes: Attributes of an LLM Observability patterns clustered points response. + :type attributes: LLMObsPatternsClusteredPointsResponseAttributes + + :param id: Identifier of the topic the points belong to. + :type id: str + + :param type: Resource type of an LLM Observability patterns clustered points response. + :type type: LLMObsPatternsClusteredPointsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_type.py b/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_type.py new file mode 100644 index 0000000000..36165ee139 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_clustered_points_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPatternsClusteredPointsType(ModelSimple): + """ + Resource type of an LLM Observability patterns clustered points response. + + :param value: If omitted defaults to "clustered_points_response". Must be one of ["clustered_points_response"]. + :type value: str + """ + + allowed_values = { + "clustered_points_response", + } + CLUSTERED_POINTS_RESPONSE: ClassVar["LLMObsPatternsClusteredPointsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPatternsClusteredPointsType.CLUSTERED_POINTS_RESPONSE = LLMObsPatternsClusteredPointsType("clustered_points_response") diff --git a/datadog_api_client/v2/model/llm_obs_patterns_config_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_config_attributes.py new file mode 100644 index 0000000000..f3a4b454f6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_config_attributes.py @@ -0,0 +1,123 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsConfigAttributes(ModelNormal): + validations = { + "hierarchy_depth": { + "inclusive_maximum": 2147483647, + }, + "num_records": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "account_id": (str, none_type), + "created_at": (datetime,), + "evp_query": (str,), + "hierarchy_depth": (int,), + "integration_provider": (str, none_type), + "model_name": (str, none_type), + "name": (str,), + "num_records": (int,), + "sampling_ratio": (float,), + "scope": (str,), + "template": (str, none_type), + "updated_at": (datetime,), + } + attribute_map = { + "account_id": "account_id", + "created_at": "created_at", + "evp_query": "evp_query", + "hierarchy_depth": "hierarchy_depth", + "integration_provider": "integration_provider", + "model_name": "model_name", + "name": "name", + "num_records": "num_records", + "sampling_ratio": "sampling_ratio", + "scope": "scope", + "template": "template", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: datetime, evp_query: str, hierarchy_depth: int, name: str, num_records: int, sampling_ratio: float, scope: str, updated_at: datetime, account_id: Union[str, none_type, UnsetType]=unset, integration_provider: Union[str, none_type, UnsetType]=unset, model_name: Union[str, none_type, UnsetType]=unset, template: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of an LLM Observability patterns configuration. + + :param account_id: Integration account ID for a bring-your-own-model configuration. + :type account_id: str, none_type, optional + + :param created_at: Timestamp when the configuration was created. + :type created_at: datetime + + :param evp_query: Query that selects the spans the patterns run analyzes. + :type evp_query: str + + :param hierarchy_depth: Depth of the topic hierarchy to generate. + :type hierarchy_depth: int + + :param integration_provider: Integration provider for a bring-your-own-model configuration. + :type integration_provider: str, none_type, optional + + :param model_name: Model name for a bring-your-own-model configuration. + :type model_name: str, none_type, optional + + :param name: Name of the configuration. + :type name: str + + :param num_records: Maximum number of records to process for the run. + :type num_records: int + + :param sampling_ratio: Fraction of matching spans to sample for the run. + :type sampling_ratio: float + + :param scope: Scope of the configuration. + :type scope: str + + :param template: Template used to guide topic generation. + :type template: str, none_type, optional + + :param updated_at: Timestamp when the configuration was last updated. + :type updated_at: datetime + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if integration_provider is not unset: + kwargs["integration_provider"] = integration_provider + if model_name is not unset: + kwargs["model_name"] = model_name + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + + self_.created_at = created_at + self_.evp_query = evp_query + self_.hierarchy_depth = hierarchy_depth + self_.name = name + self_.num_records = num_records + self_.sampling_ratio = sampling_ratio + self_.scope = scope + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/llm_obs_patterns_config_item.py b/datadog_api_client/v2/model/llm_obs_patterns_config_item.py new file mode 100644 index 0000000000..65b8945ffd --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_config_item.py @@ -0,0 +1,129 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsConfigItem(ModelNormal): + validations = { + "hierarchy_depth": { + "inclusive_maximum": 2147483647, + }, + "num_records": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "account_id": (str, none_type), + "created_at": (datetime,), + "evp_query": (str,), + "hierarchy_depth": (int,), + "id": (str,), + "integration_provider": (str, none_type), + "model_name": (str, none_type), + "name": (str,), + "num_records": (int,), + "sampling_ratio": (float,), + "scope": (str,), + "template": (str, none_type), + "updated_at": (datetime,), + } + attribute_map = { + "account_id": "account_id", + "created_at": "created_at", + "evp_query": "evp_query", + "hierarchy_depth": "hierarchy_depth", + "id": "id", + "integration_provider": "integration_provider", + "model_name": "model_name", + "name": "name", + "num_records": "num_records", + "sampling_ratio": "sampling_ratio", + "scope": "scope", + "template": "template", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: datetime, evp_query: str, hierarchy_depth: int, id: str, name: str, num_records: int, sampling_ratio: float, scope: str, updated_at: datetime, account_id: Union[str, none_type, UnsetType]=unset, integration_provider: Union[str, none_type, UnsetType]=unset, model_name: Union[str, none_type, UnsetType]=unset, template: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + A single LLM Observability patterns configuration in a list response. + + :param account_id: Integration account ID for a bring-your-own-model configuration. + :type account_id: str, none_type, optional + + :param created_at: Timestamp when the configuration was created. + :type created_at: datetime + + :param evp_query: Query that selects the spans the patterns run analyzes. + :type evp_query: str + + :param hierarchy_depth: Depth of the topic hierarchy to generate. + :type hierarchy_depth: int + + :param id: Unique identifier of the configuration. + :type id: str + + :param integration_provider: Integration provider for a bring-your-own-model configuration. + :type integration_provider: str, none_type, optional + + :param model_name: Model name for a bring-your-own-model configuration. + :type model_name: str, none_type, optional + + :param name: Name of the configuration. + :type name: str + + :param num_records: Maximum number of records to process for the run. + :type num_records: int + + :param sampling_ratio: Fraction of matching spans to sample for the run. + :type sampling_ratio: float + + :param scope: Scope of the configuration. + :type scope: str + + :param template: Template used to guide topic generation. + :type template: str, none_type, optional + + :param updated_at: Timestamp when the configuration was last updated. + :type updated_at: datetime + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if integration_provider is not unset: + kwargs["integration_provider"] = integration_provider + if model_name is not unset: + kwargs["model_name"] = model_name + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + + self_.created_at = created_at + self_.evp_query = evp_query + self_.hierarchy_depth = hierarchy_depth + self_.id = id + self_.name = name + self_.num_records = num_records + self_.sampling_ratio = sampling_ratio + self_.scope = scope + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/llm_obs_patterns_config_response.py b/datadog_api_client/v2/model/llm_obs_patterns_config_response.py new file mode 100644 index 0000000000..2864d4091b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_config_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_config_response_data import LLMObsPatternsConfigResponseData + +class LLMObsPatternsConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_config_response_data import LLMObsPatternsConfigResponseData + return { + "data": (LLMObsPatternsConfigResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsConfigResponseData, **kwargs): + """ + Response containing a single LLM Observability patterns configuration. + + :param data: Data object of an LLM Observability patterns configuration. + :type data: LLMObsPatternsConfigResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_config_response_data.py b/datadog_api_client/v2/model/llm_obs_patterns_config_response_data.py new file mode 100644 index 0000000000..a6c123beb7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_config_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_config_attributes import LLMObsPatternsConfigAttributes + from datadog_api_client.v2.model.llm_obs_patterns_config_type import LLMObsPatternsConfigType + +class LLMObsPatternsConfigResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_config_attributes import LLMObsPatternsConfigAttributes + from datadog_api_client.v2.model.llm_obs_patterns_config_type import LLMObsPatternsConfigType + return { + "attributes": (LLMObsPatternsConfigAttributes,), + "id": (str,), + "type": (LLMObsPatternsConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsConfigAttributes, id: str, type: LLMObsPatternsConfigType, **kwargs): + """ + Data object of an LLM Observability patterns configuration. + + :param attributes: Attributes of an LLM Observability patterns configuration. + :type attributes: LLMObsPatternsConfigAttributes + + :param id: Unique identifier of the configuration. + :type id: str + + :param type: Resource type of an LLM Observability patterns configuration. + :type type: LLMObsPatternsConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_config_snapshot.py b/datadog_api_client/v2/model/llm_obs_patterns_config_snapshot.py new file mode 100644 index 0000000000..e79ff6c53d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_config_snapshot.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsConfigSnapshot(ModelNormal): + validations = { + "hierarchy_depth": { + "inclusive_maximum": 2147483647, + }, + "num_records": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "evp_query": (str,), + "hierarchy_depth": (int,), + "integration_provider": (str,), + "model_name": (str,), + "num_records": (int,), + "sampling_ratio": (float,), + } + attribute_map = { + "account_id": "account_id", + "evp_query": "evp_query", + "hierarchy_depth": "hierarchy_depth", + "integration_provider": "integration_provider", + "model_name": "model_name", + "num_records": "num_records", + "sampling_ratio": "sampling_ratio", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, evp_query: Union[str, UnsetType]=unset, hierarchy_depth: Union[int, UnsetType]=unset, integration_provider: Union[str, UnsetType]=unset, model_name: Union[str, UnsetType]=unset, num_records: Union[int, UnsetType]=unset, sampling_ratio: Union[float, UnsetType]=unset, **kwargs): + """ + Snapshot of the configuration used for a patterns run. + + :param account_id: Integration account ID used for a bring-your-own-model run. + :type account_id: str, optional + + :param evp_query: Query that selected the spans for the run. + :type evp_query: str, optional + + :param hierarchy_depth: Depth of the topic hierarchy generated. + :type hierarchy_depth: int, optional + + :param integration_provider: Integration provider used for a bring-your-own-model run. + :type integration_provider: str, optional + + :param model_name: Model name used for a bring-your-own-model run. + :type model_name: str, optional + + :param num_records: Maximum number of records processed for the run. + :type num_records: int, optional + + :param sampling_ratio: Fraction of matching spans sampled for the run. + :type sampling_ratio: float, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if evp_query is not unset: + kwargs["evp_query"] = evp_query + if hierarchy_depth is not unset: + kwargs["hierarchy_depth"] = hierarchy_depth + if integration_provider is not unset: + kwargs["integration_provider"] = integration_provider + if model_name is not unset: + kwargs["model_name"] = model_name + if num_records is not unset: + kwargs["num_records"] = num_records + if sampling_ratio is not unset: + kwargs["sampling_ratio"] = sampling_ratio + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_patterns_config_type.py b/datadog_api_client/v2/model/llm_obs_patterns_config_type.py new file mode 100644 index 0000000000..5b26ddfb64 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPatternsConfigType(ModelSimple): + """ + Resource type of an LLM Observability patterns configuration. + + :param value: If omitted defaults to "topic_discovery_configs". Must be one of ["topic_discovery_configs"]. + :type value: str + """ + + allowed_values = { + "topic_discovery_configs", + } + TOPIC_DISCOVERY_CONFIGS: ClassVar["LLMObsPatternsConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPatternsConfigType.TOPIC_DISCOVERY_CONFIGS = LLMObsPatternsConfigType("topic_discovery_configs") diff --git a/datadog_api_client/v2/model/llm_obs_patterns_config_upsert_request.py b/datadog_api_client/v2/model/llm_obs_patterns_config_upsert_request.py new file mode 100644 index 0000000000..f36f4831c7 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_config_upsert_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_config_upsert_request_data import LLMObsPatternsConfigUpsertRequestData + +class LLMObsPatternsConfigUpsertRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_config_upsert_request_data import LLMObsPatternsConfigUpsertRequestData + return { + "data": (LLMObsPatternsConfigUpsertRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsConfigUpsertRequestData, **kwargs): + """ + Request to create or update an LLM Observability patterns configuration. + + :param data: Data object for creating or updating an LLM Observability patterns configuration. + :type data: LLMObsPatternsConfigUpsertRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_config_upsert_request_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_config_upsert_request_attributes.py new file mode 100644 index 0000000000..7322001975 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_config_upsert_request_attributes.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsConfigUpsertRequestAttributes(ModelNormal): + validations = { + "hierarchy_depth": { + "inclusive_maximum": 2147483647, + }, + "num_records": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "config_id": (str,), + "evp_query": (str,), + "hierarchy_depth": (int,), + "integration_provider": (str,), + "model_name": (str,), + "name": (str,), + "num_records": (int,), + "sampling_ratio": (float,), + "scope": (str,), + "template": (str,), + } + attribute_map = { + "account_id": "account_id", + "config_id": "config_id", + "evp_query": "evp_query", + "hierarchy_depth": "hierarchy_depth", + "integration_provider": "integration_provider", + "model_name": "model_name", + "name": "name", + "num_records": "num_records", + "sampling_ratio": "sampling_ratio", + "scope": "scope", + "template": "template", + } + + def __init__(self_, evp_query: str, hierarchy_depth: int, name: str, num_records: int, sampling_ratio: float, account_id: Union[str, UnsetType]=unset, config_id: Union[str, UnsetType]=unset, integration_provider: Union[str, UnsetType]=unset, model_name: Union[str, UnsetType]=unset, scope: Union[str, UnsetType]=unset, template: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating an LLM Observability patterns configuration. + + :param account_id: Integration account ID for a bring-your-own-model configuration. + :type account_id: str, optional + + :param config_id: The ID of an existing configuration to update. If omitted, a new configuration is created. + :type config_id: str, optional + + :param evp_query: Query that selects the spans the patterns run analyzes. + :type evp_query: str + + :param hierarchy_depth: Depth of the topic hierarchy to generate. + :type hierarchy_depth: int + + :param integration_provider: Integration provider for a bring-your-own-model configuration. + :type integration_provider: str, optional + + :param model_name: Model name for a bring-your-own-model configuration. + :type model_name: str, optional + + :param name: Name of the configuration. + :type name: str + + :param num_records: Maximum number of records to process for the run. + :type num_records: int + + :param sampling_ratio: Fraction of matching spans to sample for the run. + :type sampling_ratio: float + + :param scope: Scope of the configuration. + :type scope: str, optional + + :param template: Template used to guide topic generation. + :type template: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if config_id is not unset: + kwargs["config_id"] = config_id + if integration_provider is not unset: + kwargs["integration_provider"] = integration_provider + if model_name is not unset: + kwargs["model_name"] = model_name + if scope is not unset: + kwargs["scope"] = scope + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + + self_.evp_query = evp_query + self_.hierarchy_depth = hierarchy_depth + self_.name = name + self_.num_records = num_records + self_.sampling_ratio = sampling_ratio diff --git a/datadog_api_client/v2/model/llm_obs_patterns_config_upsert_request_data.py b/datadog_api_client/v2/model/llm_obs_patterns_config_upsert_request_data.py new file mode 100644 index 0000000000..f38cfa74e1 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_config_upsert_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_config_upsert_request_attributes import LLMObsPatternsConfigUpsertRequestAttributes + from datadog_api_client.v2.model.llm_obs_patterns_config_type import LLMObsPatternsConfigType + +class LLMObsPatternsConfigUpsertRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_config_upsert_request_attributes import LLMObsPatternsConfigUpsertRequestAttributes + from datadog_api_client.v2.model.llm_obs_patterns_config_type import LLMObsPatternsConfigType + return { + "attributes": (LLMObsPatternsConfigUpsertRequestAttributes,), + "type": (LLMObsPatternsConfigType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsConfigUpsertRequestAttributes, type: LLMObsPatternsConfigType, **kwargs): + """ + Data object for creating or updating an LLM Observability patterns configuration. + + :param attributes: Attributes for creating or updating an LLM Observability patterns configuration. + :type attributes: LLMObsPatternsConfigUpsertRequestAttributes + + :param type: Resource type of an LLM Observability patterns configuration. + :type type: LLMObsPatternsConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_configs_list_type.py b/datadog_api_client/v2/model/llm_obs_patterns_configs_list_type.py new file mode 100644 index 0000000000..282914b57a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_configs_list_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPatternsConfigsListType(ModelSimple): + """ + Resource type of a list of LLM Observability patterns configurations. + + :param value: If omitted defaults to "list_topic_discovery_configs_response". Must be one of ["list_topic_discovery_configs_response"]. + :type value: str + """ + + allowed_values = { + "list_topic_discovery_configs_response", + } + LIST_TOPIC_DISCOVERY_CONFIGS_RESPONSE: ClassVar["LLMObsPatternsConfigsListType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPatternsConfigsListType.LIST_TOPIC_DISCOVERY_CONFIGS_RESPONSE = LLMObsPatternsConfigsListType("list_topic_discovery_configs_response") diff --git a/datadog_api_client/v2/model/llm_obs_patterns_configs_response.py b/datadog_api_client/v2/model/llm_obs_patterns_configs_response.py new file mode 100644 index 0000000000..4d4c275e14 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_configs_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_configs_response_data import LLMObsPatternsConfigsResponseData + +class LLMObsPatternsConfigsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_configs_response_data import LLMObsPatternsConfigsResponseData + return { + "data": (LLMObsPatternsConfigsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsConfigsResponseData, **kwargs): + """ + Response containing a list of LLM Observability patterns configurations. + + :param data: Data object of a list of LLM Observability patterns configurations. + :type data: LLMObsPatternsConfigsResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_configs_response_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_configs_response_attributes.py new file mode 100644 index 0000000000..4a4fee8afa --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_configs_response_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_config_item import LLMObsPatternsConfigItem + +class LLMObsPatternsConfigsResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_config_item import LLMObsPatternsConfigItem + return { + "configs": ([LLMObsPatternsConfigItem],), + } + attribute_map = { + "configs": "configs", + } + + def __init__(self_, configs: List[LLMObsPatternsConfigItem], **kwargs): + """ + Attributes of a list of LLM Observability patterns configurations. + + :param configs: List of patterns configurations. + :type configs: [LLMObsPatternsConfigItem] + """ + super().__init__(kwargs) + + + self_.configs = configs diff --git a/datadog_api_client/v2/model/llm_obs_patterns_configs_response_data.py b/datadog_api_client/v2/model/llm_obs_patterns_configs_response_data.py new file mode 100644 index 0000000000..a35af3c250 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_configs_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_configs_response_attributes import LLMObsPatternsConfigsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_configs_list_type import LLMObsPatternsConfigsListType + +class LLMObsPatternsConfigsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_configs_response_attributes import LLMObsPatternsConfigsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_configs_list_type import LLMObsPatternsConfigsListType + return { + "attributes": (LLMObsPatternsConfigsResponseAttributes,), + "id": (str,), + "type": (LLMObsPatternsConfigsListType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsConfigsResponseAttributes, id: str, type: LLMObsPatternsConfigsListType, **kwargs): + """ + Data object of a list of LLM Observability patterns configurations. + + :param attributes: Attributes of a list of LLM Observability patterns configurations. + :type attributes: LLMObsPatternsConfigsResponseAttributes + + :param id: Identifier of the list response. + :type id: str + + :param type: Resource type of a list of LLM Observability patterns configurations. + :type type: LLMObsPatternsConfigsListType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_request_type.py b/datadog_api_client/v2/model/llm_obs_patterns_request_type.py new file mode 100644 index 0000000000..090ddead2b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPatternsRequestType(ModelSimple): + """ + Resource type for triggering an LLM Observability patterns run. + + :param value: If omitted defaults to "topic_discovery". Must be one of ["topic_discovery"]. + :type value: str + """ + + allowed_values = { + "topic_discovery", + } + TOPIC_DISCOVERY: ClassVar["LLMObsPatternsRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPatternsRequestType.TOPIC_DISCOVERY = LLMObsPatternsRequestType("topic_discovery") diff --git a/datadog_api_client/v2/model/llm_obs_patterns_run_status_response.py b/datadog_api_client/v2/model/llm_obs_patterns_run_status_response.py new file mode 100644 index 0000000000..a456f38f3a --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_run_status_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_run_status_response_data import LLMObsPatternsRunStatusResponseData + +class LLMObsPatternsRunStatusResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_run_status_response_data import LLMObsPatternsRunStatusResponseData + return { + "data": (LLMObsPatternsRunStatusResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsRunStatusResponseData, **kwargs): + """ + Response containing the status of an LLM Observability patterns run. + + :param data: Data object of an LLM Observability patterns run status response. + :type data: LLMObsPatternsRunStatusResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_run_status_response_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_run_status_response_attributes.py new file mode 100644 index 0000000000..004b0fb790 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_run_status_response_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_activity_progress import LLMObsPatternsActivityProgress + +class LLMObsPatternsRunStatusResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_activity_progress import LLMObsPatternsActivityProgress + return { + "created_at": (datetime,), + "progress": ([LLMObsPatternsActivityProgress],), + "status": (str,), + "step": (str,), + } + attribute_map = { + "created_at": "created_at", + "progress": "progress", + "status": "status", + "step": "step", + } + + def __init__(self_, created_at: datetime, progress: List[LLMObsPatternsActivityProgress], status: str, step: str, **kwargs): + """ + Attributes of an LLM Observability patterns run status. + + :param created_at: Timestamp when the run was created. + :type created_at: datetime + + :param progress: List of step-by-step progress entries for a patterns run. + :type progress: [LLMObsPatternsActivityProgress] + + :param status: Overall status of the run. + :type status: str + + :param step: The current step of the run. + :type step: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.progress = progress + self_.status = status + self_.step = step diff --git a/datadog_api_client/v2/model/llm_obs_patterns_run_status_response_data.py b/datadog_api_client/v2/model/llm_obs_patterns_run_status_response_data.py new file mode 100644 index 0000000000..a1b57bcaaf --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_run_status_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_run_status_response_attributes import LLMObsPatternsRunStatusResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_run_status_type import LLMObsPatternsRunStatusType + +class LLMObsPatternsRunStatusResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_run_status_response_attributes import LLMObsPatternsRunStatusResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_run_status_type import LLMObsPatternsRunStatusType + return { + "attributes": (LLMObsPatternsRunStatusResponseAttributes,), + "id": (str,), + "type": (LLMObsPatternsRunStatusType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsRunStatusResponseAttributes, id: str, type: LLMObsPatternsRunStatusType, **kwargs): + """ + Data object of an LLM Observability patterns run status response. + + :param attributes: Attributes of an LLM Observability patterns run status. + :type attributes: LLMObsPatternsRunStatusResponseAttributes + + :param id: The ID of the patterns run. + :type id: str + + :param type: Resource type of an LLM Observability patterns run status. + :type type: LLMObsPatternsRunStatusType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_run_status_type.py b/datadog_api_client/v2/model/llm_obs_patterns_run_status_type.py new file mode 100644 index 0000000000..caf7e17689 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_run_status_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPatternsRunStatusType(ModelSimple): + """ + Resource type of an LLM Observability patterns run status. + + :param value: If omitted defaults to "topic_discovery_run_status". Must be one of ["topic_discovery_run_status"]. + :type value: str + """ + + allowed_values = { + "topic_discovery_run_status", + } + TOPIC_DISCOVERY_RUN_STATUS: ClassVar["LLMObsPatternsRunStatusType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPatternsRunStatusType.TOPIC_DISCOVERY_RUN_STATUS = LLMObsPatternsRunStatusType("topic_discovery_run_status") diff --git a/datadog_api_client/v2/model/llm_obs_patterns_run_summary.py b/datadog_api_client/v2/model/llm_obs_patterns_run_summary.py new file mode 100644 index 0000000000..732d2ca3e3 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_run_summary.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_config_snapshot import LLMObsPatternsConfigSnapshot + +class LLMObsPatternsRunSummary(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_config_snapshot import LLMObsPatternsConfigSnapshot + return { + "completed_at": (datetime, none_type), + "config_snapshot": (LLMObsPatternsConfigSnapshot,), + "created_at": (datetime,), + "id": (str,), + "status": (str,), + } + attribute_map = { + "completed_at": "completed_at", + "config_snapshot": "config_snapshot", + "created_at": "created_at", + "id": "id", + "status": "status", + } + + def __init__(self_, created_at: datetime, id: str, status: str, completed_at: Union[datetime, none_type, UnsetType]=unset, config_snapshot: Union[LLMObsPatternsConfigSnapshot, UnsetType]=unset, **kwargs): + """ + Summary of an LLM Observability patterns run. + + :param completed_at: Timestamp when the run completed. Null if the run has not completed. + :type completed_at: datetime, none_type, optional + + :param config_snapshot: Snapshot of the configuration used for a patterns run. + :type config_snapshot: LLMObsPatternsConfigSnapshot, optional + + :param created_at: Timestamp when the run was created. + :type created_at: datetime + + :param id: Unique identifier of the run. + :type id: str + + :param status: Status of the run. + :type status: str + """ + if completed_at is not unset: + kwargs["completed_at"] = completed_at + if config_snapshot is not unset: + kwargs["config_snapshot"] = config_snapshot + super().__init__(kwargs) + + + self_.created_at = created_at + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/llm_obs_patterns_runs_list_type.py b/datadog_api_client/v2/model/llm_obs_patterns_runs_list_type.py new file mode 100644 index 0000000000..7ef833ba49 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_runs_list_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPatternsRunsListType(ModelSimple): + """ + Resource type of a list of LLM Observability patterns runs. + + :param value: If omitted defaults to "list_topic_discovery_runs_response". Must be one of ["list_topic_discovery_runs_response"]. + :type value: str + """ + + allowed_values = { + "list_topic_discovery_runs_response", + } + LIST_TOPIC_DISCOVERY_RUNS_RESPONSE: ClassVar["LLMObsPatternsRunsListType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPatternsRunsListType.LIST_TOPIC_DISCOVERY_RUNS_RESPONSE = LLMObsPatternsRunsListType("list_topic_discovery_runs_response") diff --git a/datadog_api_client/v2/model/llm_obs_patterns_runs_response.py b/datadog_api_client/v2/model/llm_obs_patterns_runs_response.py new file mode 100644 index 0000000000..6888fca350 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_runs_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_runs_response_data import LLMObsPatternsRunsResponseData + +class LLMObsPatternsRunsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_runs_response_data import LLMObsPatternsRunsResponseData + return { + "data": (LLMObsPatternsRunsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsRunsResponseData, **kwargs): + """ + Response containing the completed runs of an LLM Observability patterns configuration. + + :param data: Data object of an LLM Observability patterns runs response. + :type data: LLMObsPatternsRunsResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_runs_response_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_runs_response_attributes.py new file mode 100644 index 0000000000..0dd85af199 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_runs_response_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_run_summary import LLMObsPatternsRunSummary + +class LLMObsPatternsRunsResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_run_summary import LLMObsPatternsRunSummary + return { + "runs": ([LLMObsPatternsRunSummary],), + } + attribute_map = { + "runs": "runs", + } + + def __init__(self_, runs: List[LLMObsPatternsRunSummary], **kwargs): + """ + Attributes of an LLM Observability patterns runs response. + + :param runs: List of patterns runs. + :type runs: [LLMObsPatternsRunSummary] + """ + super().__init__(kwargs) + + + self_.runs = runs diff --git a/datadog_api_client/v2/model/llm_obs_patterns_runs_response_data.py b/datadog_api_client/v2/model/llm_obs_patterns_runs_response_data.py new file mode 100644 index 0000000000..57cd5021b4 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_runs_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_runs_response_attributes import LLMObsPatternsRunsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_runs_list_type import LLMObsPatternsRunsListType + +class LLMObsPatternsRunsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_runs_response_attributes import LLMObsPatternsRunsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_runs_list_type import LLMObsPatternsRunsListType + return { + "attributes": (LLMObsPatternsRunsResponseAttributes,), + "id": (str,), + "type": (LLMObsPatternsRunsListType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsRunsResponseAttributes, id: str, type: LLMObsPatternsRunsListType, **kwargs): + """ + Data object of an LLM Observability patterns runs response. + + :param attributes: Attributes of an LLM Observability patterns runs response. + :type attributes: LLMObsPatternsRunsResponseAttributes + + :param id: Identifier of the configuration the runs belong to. + :type id: str + + :param type: Resource type of a list of LLM Observability patterns runs. + :type type: LLMObsPatternsRunsListType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topic.py b/datadog_api_client/v2/model/llm_obs_patterns_topic.py new file mode 100644 index 0000000000..df3d248778 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topic.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsTopic(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "description": (str,), + "first_seen_at": (datetime,), + "hierarchy_level": (int,), + "id": (str,), + "is_validated": (bool,), + "name": (str,), + "parent_topic_id": (str,), + "point_count": (int,), + "run_id": (str,), + } + attribute_map = { + "created_at": "created_at", + "description": "description", + "first_seen_at": "first_seen_at", + "hierarchy_level": "hierarchy_level", + "id": "id", + "is_validated": "is_validated", + "name": "name", + "parent_topic_id": "parent_topic_id", + "point_count": "point_count", + "run_id": "run_id", + } + + def __init__(self_, created_at: datetime, description: str, first_seen_at: datetime, hierarchy_level: int, id: str, is_validated: bool, name: str, parent_topic_id: str, point_count: int, run_id: str, **kwargs): + """ + A topic discovered by an LLM Observability patterns run. + + :param created_at: Timestamp when the topic was created. + :type created_at: datetime + + :param description: Description of the topic. + :type description: str + + :param first_seen_at: Timestamp when the topic was first seen. + :type first_seen_at: datetime + + :param hierarchy_level: Level of the topic in the hierarchy. Level 0 is a leaf topic. + :type hierarchy_level: int + + :param id: Unique identifier of the topic. + :type id: str + + :param is_validated: Whether the topic has been validated. + :type is_validated: bool + + :param name: Name of the topic. + :type name: str + + :param parent_topic_id: Identifier of the parent topic. Empty for top-level topics. + :type parent_topic_id: str + + :param point_count: Number of data points assigned to the topic. + :type point_count: int + + :param run_id: Identifier of the run that produced the topic. + :type run_id: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.description = description + self_.first_seen_at = first_seen_at + self_.hierarchy_level = hierarchy_level + self_.id = id + self_.is_validated = is_validated + self_.name = name + self_.parent_topic_id = parent_topic_id + self_.point_count = point_count + self_.run_id = run_id diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topic_with_clustered_points.py b/datadog_api_client/v2/model/llm_obs_patterns_topic_with_clustered_points.py new file mode 100644 index 0000000000..6eff9ea70b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topic_with_clustered_points.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_clustered_point_ref import LLMObsPatternsClusteredPointRef + +class LLMObsPatternsTopicWithClusteredPoints(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_clustered_point_ref import LLMObsPatternsClusteredPointRef + return { + "cluster_points": ([LLMObsPatternsClusteredPointRef],), + "created_at": (datetime,), + "description": (str,), + "first_seen_at": (datetime,), + "hierarchy_level": (int,), + "id": (str,), + "is_validated": (bool,), + "name": (str,), + "parent_topic_id": (str,), + "point_count": (int,), + "run_id": (str,), + } + attribute_map = { + "cluster_points": "cluster_points", + "created_at": "created_at", + "description": "description", + "first_seen_at": "first_seen_at", + "hierarchy_level": "hierarchy_level", + "id": "id", + "is_validated": "is_validated", + "name": "name", + "parent_topic_id": "parent_topic_id", + "point_count": "point_count", + "run_id": "run_id", + } + + def __init__(self_, created_at: datetime, description: str, first_seen_at: datetime, hierarchy_level: int, id: str, is_validated: bool, name: str, parent_topic_id: str, point_count: int, run_id: str, cluster_points: Union[List[LLMObsPatternsClusteredPointRef], UnsetType]=unset, **kwargs): + """ + A topic discovered by an LLM Observability patterns run, including the + clustered points attached to leaf topics. + + :param cluster_points: List of clustered points attached to a topic. + :type cluster_points: [LLMObsPatternsClusteredPointRef], optional + + :param created_at: Timestamp when the topic was created. + :type created_at: datetime + + :param description: Description of the topic. + :type description: str + + :param first_seen_at: Timestamp when the topic was first seen. + :type first_seen_at: datetime + + :param hierarchy_level: Level of the topic in the hierarchy. Level 0 is a leaf topic. + :type hierarchy_level: int + + :param id: Unique identifier of the topic. + :type id: str + + :param is_validated: Whether the topic has been validated. + :type is_validated: bool + + :param name: Name of the topic. + :type name: str + + :param parent_topic_id: Identifier of the parent topic. Empty for top-level topics. + :type parent_topic_id: str + + :param point_count: Number of data points assigned to the topic. + :type point_count: int + + :param run_id: Identifier of the run that produced the topic. + :type run_id: str + """ + if cluster_points is not unset: + kwargs["cluster_points"] = cluster_points + super().__init__(kwargs) + + + self_.created_at = created_at + self_.description = description + self_.first_seen_at = first_seen_at + self_.hierarchy_level = hierarchy_level + self_.id = id + self_.is_validated = is_validated + self_.name = name + self_.parent_topic_id = parent_topic_id + self_.point_count = point_count + self_.run_id = run_id diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topics_response.py b/datadog_api_client/v2/model/llm_obs_patterns_topics_response.py new file mode 100644 index 0000000000..f618f8f827 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topics_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_topics_response_data import LLMObsPatternsTopicsResponseData + +class LLMObsPatternsTopicsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_topics_response_data import LLMObsPatternsTopicsResponseData + return { + "data": (LLMObsPatternsTopicsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsTopicsResponseData, **kwargs): + """ + Response containing the topics discovered by an LLM Observability patterns run. + + :param data: Data object of an LLM Observability patterns topics response. + :type data: LLMObsPatternsTopicsResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topics_response_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_topics_response_attributes.py new file mode 100644 index 0000000000..0d5498de00 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topics_response_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_config_snapshot import LLMObsPatternsConfigSnapshot + from datadog_api_client.v2.model.llm_obs_patterns_topic import LLMObsPatternsTopic + +class LLMObsPatternsTopicsResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_config_snapshot import LLMObsPatternsConfigSnapshot + from datadog_api_client.v2.model.llm_obs_patterns_topic import LLMObsPatternsTopic + return { + "completed_at": (datetime, none_type), + "config_id": (str,), + "config_snapshot": (LLMObsPatternsConfigSnapshot,), + "created_at": (datetime,), + "previous_run_id": (str,), + "run_id": (str,), + "topics": ([LLMObsPatternsTopic],), + } + attribute_map = { + "completed_at": "completed_at", + "config_id": "config_id", + "config_snapshot": "config_snapshot", + "created_at": "created_at", + "previous_run_id": "previous_run_id", + "run_id": "run_id", + "topics": "topics", + } + + def __init__(self_, config_id: str, created_at: datetime, previous_run_id: str, run_id: str, topics: List[LLMObsPatternsTopic], completed_at: Union[datetime, none_type, UnsetType]=unset, config_snapshot: Union[LLMObsPatternsConfigSnapshot, UnsetType]=unset, **kwargs): + """ + Attributes of an LLM Observability patterns topics response. + + :param completed_at: Timestamp when the run completed. Null if the run has not completed. + :type completed_at: datetime, none_type, optional + + :param config_id: Identifier of the configuration that produced the run. + :type config_id: str + + :param config_snapshot: Snapshot of the configuration used for a patterns run. + :type config_snapshot: LLMObsPatternsConfigSnapshot, optional + + :param created_at: Timestamp when the run was created. + :type created_at: datetime + + :param previous_run_id: Identifier of the run that completed immediately before this one. Empty if none. + :type previous_run_id: str + + :param run_id: Identifier of the run that produced the topics. + :type run_id: str + + :param topics: List of discovered topics. + :type topics: [LLMObsPatternsTopic] + """ + if completed_at is not unset: + kwargs["completed_at"] = completed_at + if config_snapshot is not unset: + kwargs["config_snapshot"] = config_snapshot + super().__init__(kwargs) + + + self_.config_id = config_id + self_.created_at = created_at + self_.previous_run_id = previous_run_id + self_.run_id = run_id + self_.topics = topics diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topics_response_data.py b/datadog_api_client/v2/model/llm_obs_patterns_topics_response_data.py new file mode 100644 index 0000000000..29dda6f25e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topics_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_topics_response_attributes import LLMObsPatternsTopicsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_topics_type import LLMObsPatternsTopicsType + +class LLMObsPatternsTopicsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_topics_response_attributes import LLMObsPatternsTopicsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_topics_type import LLMObsPatternsTopicsType + return { + "attributes": (LLMObsPatternsTopicsResponseAttributes,), + "id": (str,), + "type": (LLMObsPatternsTopicsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsTopicsResponseAttributes, id: str, type: LLMObsPatternsTopicsType, **kwargs): + """ + Data object of an LLM Observability patterns topics response. + + :param attributes: Attributes of an LLM Observability patterns topics response. + :type attributes: LLMObsPatternsTopicsResponseAttributes + + :param id: Identifier of the run the topics belong to. + :type id: str + + :param type: Resource type of an LLM Observability patterns topics response. + :type type: LLMObsPatternsTopicsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topics_type.py b/datadog_api_client/v2/model/llm_obs_patterns_topics_type.py new file mode 100644 index 0000000000..769bcd70c9 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topics_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPatternsTopicsType(ModelSimple): + """ + Resource type of an LLM Observability patterns topics response. + + :param value: If omitted defaults to "get_topics_response". Must be one of ["get_topics_response"]. + :type value: str + """ + + allowed_values = { + "get_topics_response", + } + GET_TOPICS_RESPONSE: ClassVar["LLMObsPatternsTopicsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPatternsTopicsType.GET_TOPICS_RESPONSE = LLMObsPatternsTopicsType("get_topics_response") diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_response.py b/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_response.py new file mode 100644 index 0000000000..4bf6bf4a1d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_response_data import LLMObsPatternsTopicsWithClusteredPointsResponseData + +class LLMObsPatternsTopicsWithClusteredPointsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_response_data import LLMObsPatternsTopicsWithClusteredPointsResponseData + return { + "data": (LLMObsPatternsTopicsWithClusteredPointsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsTopicsWithClusteredPointsResponseData, **kwargs): + """ + Response containing the topics, and the clustered points of their leaf topics, + discovered by an LLM Observability patterns run. + + :param data: Data object of an LLM Observability patterns topics-with-clustered-points response. + :type data: LLMObsPatternsTopicsWithClusteredPointsResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_response_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_response_attributes.py new file mode 100644 index 0000000000..055196b0b1 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_response_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_config_snapshot import LLMObsPatternsConfigSnapshot + from datadog_api_client.v2.model.llm_obs_patterns_topic_with_clustered_points import LLMObsPatternsTopicWithClusteredPoints + +class LLMObsPatternsTopicsWithClusteredPointsResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_config_snapshot import LLMObsPatternsConfigSnapshot + from datadog_api_client.v2.model.llm_obs_patterns_topic_with_clustered_points import LLMObsPatternsTopicWithClusteredPoints + return { + "completed_at": (datetime, none_type), + "config_id": (str,), + "config_snapshot": (LLMObsPatternsConfigSnapshot,), + "created_at": (datetime,), + "previous_run_id": (str,), + "run_id": (str,), + "topics": ([LLMObsPatternsTopicWithClusteredPoints],), + } + attribute_map = { + "completed_at": "completed_at", + "config_id": "config_id", + "config_snapshot": "config_snapshot", + "created_at": "created_at", + "previous_run_id": "previous_run_id", + "run_id": "run_id", + "topics": "topics", + } + + def __init__(self_, config_id: str, created_at: datetime, previous_run_id: str, run_id: str, topics: List[LLMObsPatternsTopicWithClusteredPoints], completed_at: Union[datetime, none_type, UnsetType]=unset, config_snapshot: Union[LLMObsPatternsConfigSnapshot, UnsetType]=unset, **kwargs): + """ + Attributes of an LLM Observability patterns topics-with-clustered-points response. + + :param completed_at: Timestamp when the run completed. Null if the run has not completed. + :type completed_at: datetime, none_type, optional + + :param config_id: Identifier of the configuration that produced the run. + :type config_id: str + + :param config_snapshot: Snapshot of the configuration used for a patterns run. + :type config_snapshot: LLMObsPatternsConfigSnapshot, optional + + :param created_at: Timestamp when the run was created. + :type created_at: datetime + + :param previous_run_id: Identifier of the run that completed immediately before this one. Empty if none. + :type previous_run_id: str + + :param run_id: Identifier of the run that produced the topics. + :type run_id: str + + :param topics: List of discovered topics with their clustered points. + :type topics: [LLMObsPatternsTopicWithClusteredPoints] + """ + if completed_at is not unset: + kwargs["completed_at"] = completed_at + if config_snapshot is not unset: + kwargs["config_snapshot"] = config_snapshot + super().__init__(kwargs) + + + self_.config_id = config_id + self_.created_at = created_at + self_.previous_run_id = previous_run_id + self_.run_id = run_id + self_.topics = topics diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_response_data.py b/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_response_data.py new file mode 100644 index 0000000000..ac09fa471d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_response_attributes import LLMObsPatternsTopicsWithClusteredPointsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_type import LLMObsPatternsTopicsWithClusteredPointsType + +class LLMObsPatternsTopicsWithClusteredPointsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_response_attributes import LLMObsPatternsTopicsWithClusteredPointsResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_type import LLMObsPatternsTopicsWithClusteredPointsType + return { + "attributes": (LLMObsPatternsTopicsWithClusteredPointsResponseAttributes,), + "id": (str,), + "type": (LLMObsPatternsTopicsWithClusteredPointsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsTopicsWithClusteredPointsResponseAttributes, id: str, type: LLMObsPatternsTopicsWithClusteredPointsType, **kwargs): + """ + Data object of an LLM Observability patterns topics-with-clustered-points response. + + :param attributes: Attributes of an LLM Observability patterns topics-with-clustered-points response. + :type attributes: LLMObsPatternsTopicsWithClusteredPointsResponseAttributes + + :param id: Identifier of the run the topics belong to. + :type id: str + + :param type: Resource type of an LLM Observability patterns topics-with-clustered-points response. + :type type: LLMObsPatternsTopicsWithClusteredPointsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_type.py b/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_type.py new file mode 100644 index 0000000000..4903abf800 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_topics_with_clustered_points_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPatternsTopicsWithClusteredPointsType(ModelSimple): + """ + Resource type of an LLM Observability patterns topics-with-clustered-points response. + + :param value: If omitted defaults to "get_topics_with_cluster_points_response". Must be one of ["get_topics_with_cluster_points_response"]. + :type value: str + """ + + allowed_values = { + "get_topics_with_cluster_points_response", + } + GET_TOPICS_WITH_CLUSTER_POINTS_RESPONSE: ClassVar["LLMObsPatternsTopicsWithClusteredPointsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPatternsTopicsWithClusteredPointsType.GET_TOPICS_WITH_CLUSTER_POINTS_RESPONSE = LLMObsPatternsTopicsWithClusteredPointsType("get_topics_with_cluster_points_response") diff --git a/datadog_api_client/v2/model/llm_obs_patterns_trigger_request.py b/datadog_api_client/v2/model/llm_obs_patterns_trigger_request.py new file mode 100644 index 0000000000..2891205d97 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_trigger_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_trigger_request_data import LLMObsPatternsTriggerRequestData + +class LLMObsPatternsTriggerRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_trigger_request_data import LLMObsPatternsTriggerRequestData + return { + "data": (LLMObsPatternsTriggerRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsTriggerRequestData, **kwargs): + """ + Request to trigger an LLM Observability patterns run. + + :param data: Data object for triggering an LLM Observability patterns run. + :type data: LLMObsPatternsTriggerRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_trigger_request_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_trigger_request_attributes.py new file mode 100644 index 0000000000..a6bbe2ba7f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_trigger_request_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsTriggerRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "config_id": (str,), + } + attribute_map = { + "config_id": "config_id", + } + + def __init__(self_, config_id: str, **kwargs): + """ + Attributes for triggering an LLM Observability patterns run. + + :param config_id: The ID of the patterns configuration to run. + :type config_id: str + """ + super().__init__(kwargs) + + + self_.config_id = config_id diff --git a/datadog_api_client/v2/model/llm_obs_patterns_trigger_request_data.py b/datadog_api_client/v2/model/llm_obs_patterns_trigger_request_data.py new file mode 100644 index 0000000000..4956b752e1 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_trigger_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_trigger_request_attributes import LLMObsPatternsTriggerRequestAttributes + from datadog_api_client.v2.model.llm_obs_patterns_request_type import LLMObsPatternsRequestType + +class LLMObsPatternsTriggerRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_trigger_request_attributes import LLMObsPatternsTriggerRequestAttributes + from datadog_api_client.v2.model.llm_obs_patterns_request_type import LLMObsPatternsRequestType + return { + "attributes": (LLMObsPatternsTriggerRequestAttributes,), + "type": (LLMObsPatternsRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsTriggerRequestAttributes, type: LLMObsPatternsRequestType, **kwargs): + """ + Data object for triggering an LLM Observability patterns run. + + :param attributes: Attributes for triggering an LLM Observability patterns run. + :type attributes: LLMObsPatternsTriggerRequestAttributes + + :param type: Resource type for triggering an LLM Observability patterns run. + :type type: LLMObsPatternsRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_trigger_response.py b/datadog_api_client/v2/model/llm_obs_patterns_trigger_response.py new file mode 100644 index 0000000000..86197f9cb9 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_trigger_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_trigger_response_data import LLMObsPatternsTriggerResponseData + +class LLMObsPatternsTriggerResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_trigger_response_data import LLMObsPatternsTriggerResponseData + return { + "data": (LLMObsPatternsTriggerResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPatternsTriggerResponseData, **kwargs): + """ + Response after triggering an LLM Observability patterns run. + + :param data: Data object of an LLM Observability patterns trigger response. + :type data: LLMObsPatternsTriggerResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_patterns_trigger_response_attributes.py b/datadog_api_client/v2/model/llm_obs_patterns_trigger_response_attributes.py new file mode 100644 index 0000000000..3e1010d3a0 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_trigger_response_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPatternsTriggerResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "config_id": (str,), + "run_id": (str,), + "status": (str,), + } + attribute_map = { + "config_id": "config_id", + "run_id": "run_id", + "status": "status", + } + + def __init__(self_, config_id: str, run_id: str, status: str, **kwargs): + """ + Attributes of an LLM Observability patterns trigger response. + + :param config_id: The ID of the patterns configuration that was run. + :type config_id: str + + :param run_id: The ID of the patterns run that was started. + :type run_id: str + + :param status: Status of the patterns run. + :type status: str + """ + super().__init__(kwargs) + + + self_.config_id = config_id + self_.run_id = run_id + self_.status = status diff --git a/datadog_api_client/v2/model/llm_obs_patterns_trigger_response_data.py b/datadog_api_client/v2/model/llm_obs_patterns_trigger_response_data.py new file mode 100644 index 0000000000..248cdf3aa3 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_trigger_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_patterns_trigger_response_attributes import LLMObsPatternsTriggerResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_trigger_response_type import LLMObsPatternsTriggerResponseType + +class LLMObsPatternsTriggerResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_patterns_trigger_response_attributes import LLMObsPatternsTriggerResponseAttributes + from datadog_api_client.v2.model.llm_obs_patterns_trigger_response_type import LLMObsPatternsTriggerResponseType + return { + "attributes": (LLMObsPatternsTriggerResponseAttributes,), + "id": (str,), + "type": (LLMObsPatternsTriggerResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPatternsTriggerResponseAttributes, id: str, type: LLMObsPatternsTriggerResponseType, **kwargs): + """ + Data object of an LLM Observability patterns trigger response. + + :param attributes: Attributes of an LLM Observability patterns trigger response. + :type attributes: LLMObsPatternsTriggerResponseAttributes + + :param id: The ID of the patterns configuration that was run. + :type id: str + + :param type: Resource type of an LLM Observability patterns trigger response. + :type type: LLMObsPatternsTriggerResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_patterns_trigger_response_type.py b/datadog_api_client/v2/model/llm_obs_patterns_trigger_response_type.py new file mode 100644 index 0000000000..5fe3ed7ca6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_patterns_trigger_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPatternsTriggerResponseType(ModelSimple): + """ + Resource type of an LLM Observability patterns trigger response. + + :param value: If omitted defaults to "topic_discovery_run". Must be one of ["topic_discovery_run"]. + :type value: str + """ + + allowed_values = { + "topic_discovery_run", + } + TOPIC_DISCOVERY_RUN: ClassVar["LLMObsPatternsTriggerResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPatternsTriggerResponseType.TOPIC_DISCOVERY_RUN = LLMObsPatternsTriggerResponseType("topic_discovery_run") diff --git a/datadog_api_client/v2/model/llm_obs_project_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_project_data_attributes_request.py new file mode 100644 index 0000000000..98da924adf --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_data_attributes_request.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsProjectDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + } + + def __init__(self_, name: str, description: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating an LLM Observability project. + + :param description: Description of the project. + :type description: str, optional + + :param name: Name of the project. + :type name: str + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/llm_obs_project_data_attributes_response.py b/datadog_api_client/v2/model/llm_obs_project_data_attributes_response.py new file mode 100644 index 0000000000..7c966abd0c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_data_attributes_response.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsProjectDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "description": (str, none_type), + "name": (str,), + "updated_at": (datetime,), + } + attribute_map = { + "created_at": "created_at", + "description": "description", + "name": "name", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: datetime, description: Union[str, none_type], name: str, updated_at: datetime, **kwargs): + """ + Attributes of an LLM Observability project. + + :param created_at: Timestamp when the project was created. + :type created_at: datetime + + :param description: Description of the project. + :type description: str, none_type + + :param name: Name of the project. + :type name: str + + :param updated_at: Timestamp when the project was last updated. + :type updated_at: datetime + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.description = description + self_.name = name + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/llm_obs_project_data_request.py b/datadog_api_client/v2/model/llm_obs_project_data_request.py new file mode 100644 index 0000000000..388f274fe5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_project_data_attributes_request import LLMObsProjectDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_project_type import LLMObsProjectType + +class LLMObsProjectDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_project_data_attributes_request import LLMObsProjectDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_project_type import LLMObsProjectType + return { + "attributes": (LLMObsProjectDataAttributesRequest,), + "type": (LLMObsProjectType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsProjectDataAttributesRequest, type: LLMObsProjectType, **kwargs): + """ + Data object for creating an LLM Observability project. + + :param attributes: Attributes for creating an LLM Observability project. + :type attributes: LLMObsProjectDataAttributesRequest + + :param type: Resource type of an LLM Observability project. + :type type: LLMObsProjectType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_project_data_response.py b/datadog_api_client/v2/model/llm_obs_project_data_response.py new file mode 100644 index 0000000000..76b491524c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_project_data_attributes_response import LLMObsProjectDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_project_type import LLMObsProjectType + +class LLMObsProjectDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_project_data_attributes_response import LLMObsProjectDataAttributesResponse + from datadog_api_client.v2.model.llm_obs_project_type import LLMObsProjectType + return { + "attributes": (LLMObsProjectDataAttributesResponse,), + "id": (str,), + "type": (LLMObsProjectType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsProjectDataAttributesResponse, id: str, type: LLMObsProjectType, **kwargs): + """ + Data object for an LLM Observability project. + + :param attributes: Attributes of an LLM Observability project. + :type attributes: LLMObsProjectDataAttributesResponse + + :param id: Unique identifier of the project. + :type id: str + + :param type: Resource type of an LLM Observability project. + :type type: LLMObsProjectType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_project_request.py b/datadog_api_client/v2/model/llm_obs_project_request.py new file mode 100644 index 0000000000..2a77571869 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_project_data_request import LLMObsProjectDataRequest + +class LLMObsProjectRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_project_data_request import LLMObsProjectDataRequest + return { + "data": (LLMObsProjectDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsProjectDataRequest, **kwargs): + """ + Request to create an LLM Observability project. + + :param data: Data object for creating an LLM Observability project. + :type data: LLMObsProjectDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_project_response.py b/datadog_api_client/v2/model/llm_obs_project_response.py new file mode 100644 index 0000000000..319d50fe72 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_project_data_response import LLMObsProjectDataResponse + +class LLMObsProjectResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_project_data_response import LLMObsProjectDataResponse + return { + "data": (LLMObsProjectDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsProjectDataResponse, **kwargs): + """ + Response containing a single LLM Observability project. + + :param data: Data object for an LLM Observability project. + :type data: LLMObsProjectDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_project_type.py b/datadog_api_client/v2/model/llm_obs_project_type.py new file mode 100644 index 0000000000..504571e9b2 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsProjectType(ModelSimple): + """ + Resource type of an LLM Observability project. + + :param value: If omitted defaults to "projects". Must be one of ["projects"]. + :type value: str + """ + + allowed_values = { + "projects", + } + PROJECTS: ClassVar["LLMObsProjectType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsProjectType.PROJECTS = LLMObsProjectType("projects") diff --git a/datadog_api_client/v2/model/llm_obs_project_update_data_attributes_request.py b/datadog_api_client/v2/model/llm_obs_project_update_data_attributes_request.py new file mode 100644 index 0000000000..e83ad32d8e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_update_data_attributes_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsProjectUpdateDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating an LLM Observability project. + + :param description: Updated description of the project. + :type description: str, optional + + :param name: Updated name of the project. + :type name: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_project_update_data_request.py b/datadog_api_client/v2/model/llm_obs_project_update_data_request.py new file mode 100644 index 0000000000..84c199bd99 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_update_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_project_update_data_attributes_request import LLMObsProjectUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_project_type import LLMObsProjectType + +class LLMObsProjectUpdateDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_project_update_data_attributes_request import LLMObsProjectUpdateDataAttributesRequest + from datadog_api_client.v2.model.llm_obs_project_type import LLMObsProjectType + return { + "attributes": (LLMObsProjectUpdateDataAttributesRequest,), + "type": (LLMObsProjectType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsProjectUpdateDataAttributesRequest, type: LLMObsProjectType, **kwargs): + """ + Data object for updating an LLM Observability project. + + :param attributes: Attributes for updating an LLM Observability project. + :type attributes: LLMObsProjectUpdateDataAttributesRequest + + :param type: Resource type of an LLM Observability project. + :type type: LLMObsProjectType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_project_update_request.py b/datadog_api_client/v2/model/llm_obs_project_update_request.py new file mode 100644 index 0000000000..462b6ac678 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_project_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_project_update_data_request import LLMObsProjectUpdateDataRequest + +class LLMObsProjectUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_project_update_data_request import LLMObsProjectUpdateDataRequest + return { + "data": (LLMObsProjectUpdateDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsProjectUpdateDataRequest, **kwargs): + """ + Request to partially update an LLM Observability project. + + :param data: Data object for updating an LLM Observability project. + :type data: LLMObsProjectUpdateDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_projects_response.py b/datadog_api_client/v2/model/llm_obs_projects_response.py new file mode 100644 index 0000000000..c33278a2c8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_projects_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_project_data_response import LLMObsProjectDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + +class LLMObsProjectsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_project_data_response import LLMObsProjectDataResponse + from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta + return { + "data": ([LLMObsProjectDataResponse],), + "meta": (LLMObsCursorMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[LLMObsProjectDataResponse], meta: Union[LLMObsCursorMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of LLM Observability projects. + + :param data: List of projects. + :type data: [LLMObsProjectDataResponse] + + :param meta: Pagination cursor metadata. + :type meta: LLMObsCursorMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_prompt_chat_message.py b/datadog_api_client/v2/model/llm_obs_prompt_chat_message.py new file mode 100644 index 0000000000..e71fff6f79 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_chat_message.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPromptChatMessage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "content": (str,), + "role": (str,), + } + attribute_map = { + "content": "content", + "role": "role", + } + + def __init__(self_, content: str, role: str, **kwargs): + """ + A single chat message in a prompt template. + + :param content: Content of the message. + :type content: str + + :param role: Role of the message (for example ``system`` , ``user`` , or ``assistant`` ). + :type role: str + """ + super().__init__(kwargs) + + + self_.content = content + self_.role = role diff --git a/datadog_api_client/v2/model/llm_obs_prompt_data.py b/datadog_api_client/v2/model/llm_obs_prompt_data.py new file mode 100644 index 0000000000..b96440f129 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_data_attributes import LLMObsPromptDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + +class LLMObsPromptData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_data_attributes import LLMObsPromptDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + return { + "attributes": (LLMObsPromptDataAttributes,), + "id": (str,), + "type": (LLMObsPromptType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPromptDataAttributes, id: str, type: LLMObsPromptType, **kwargs): + """ + Data object for an LLM Observability prompt. + + :param attributes: Attributes of an LLM Observability prompt registry entry. + :type attributes: LLMObsPromptDataAttributes + + :param id: Unique identifier of the prompt. + :type id: str + + :param type: Resource type of an LLM Observability prompt. + :type type: LLMObsPromptType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_prompt_data_attributes.py b/datadog_api_client/v2/model/llm_obs_prompt_data_attributes.py new file mode 100644 index 0000000000..72730e05fa --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_data_attributes.py @@ -0,0 +1,151 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_dataset import LLMObsPromptDataset + from datadog_api_client.v2.model.llm_obs_prompt_response_source import LLMObsPromptResponseSource + +class LLMObsPromptDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_dataset import LLMObsPromptDataset + from datadog_api_client.v2.model.llm_obs_prompt_response_source import LLMObsPromptResponseSource + return { + "author": (str,), + "created_at": (datetime,), + "created_from": (str,), + "datasets": ([LLMObsPromptDataset],), + "description": (str,), + "extracted_from": (str,), + "in_registry": (bool,), + "last_seen_at": (datetime,), + "last_version_created_at": (datetime,), + "ml_app": (str,), + "ml_apps": ([str],), + "num_versions": (int,), + "prompt_id": (str,), + "source": (LLMObsPromptResponseSource,), + "tags": ([str],), + "title": (str,), + } + attribute_map = { + "author": "author", + "created_at": "created_at", + "created_from": "created_from", + "datasets": "datasets", + "description": "description", + "extracted_from": "extracted_from", + "in_registry": "in_registry", + "last_seen_at": "last_seen_at", + "last_version_created_at": "last_version_created_at", + "ml_app": "ml_app", + "ml_apps": "ml_apps", + "num_versions": "num_versions", + "prompt_id": "prompt_id", + "source": "source", + "tags": "tags", + "title": "title", + } + + def __init__(self_, created_from: str, in_registry: bool, num_versions: int, prompt_id: str, source: LLMObsPromptResponseSource, author: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, datasets: Union[List[LLMObsPromptDataset], UnsetType]=unset, description: Union[str, UnsetType]=unset, extracted_from: Union[str, UnsetType]=unset, last_seen_at: Union[datetime, UnsetType]=unset, last_version_created_at: Union[datetime, UnsetType]=unset, ml_app: Union[str, UnsetType]=unset, ml_apps: Union[List[str], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an LLM Observability prompt registry entry. + + :param author: UUID of the user who authored the prompt. + :type author: str, optional + + :param created_at: Timestamp when the prompt was created. + :type created_at: datetime, optional + + :param created_from: Source that created the prompt, such as ``ui-registry`` , ``sdk-registry`` , or ``sdk-instrumentation``. + :type created_from: str + + :param datasets: Datasets observed in runs associated with this prompt. + :type datasets: [LLMObsPromptDataset], optional + + :param description: Description of the prompt. + :type description: str, optional + + :param extracted_from: Source prompt from which this prompt was extracted, when applicable. + :type extracted_from: str, optional + + :param in_registry: Whether the prompt is a registry entry (as opposed to a code-discovered prompt). + :type in_registry: bool + + :param last_seen_at: Timestamp of the most recent observed run of this prompt. + :type last_seen_at: datetime, optional + + :param last_version_created_at: Timestamp when the most recent version of the prompt was created. + :type last_version_created_at: datetime, optional + + :param ml_app: The ML application this prompt is associated with. + :type ml_app: str, optional + + :param ml_apps: ML applications observed running this prompt. + :type ml_apps: [str], optional + + :param num_versions: Number of versions of the prompt. + :type num_versions: int + + :param prompt_id: Customer-provided identifier of the prompt. + :type prompt_id: str + + :param source: Whether the prompt was created from the registry or discovered from observed LLM calls. + :type source: LLMObsPromptResponseSource + + :param tags: Tags observed on runs of this prompt. + :type tags: [str], optional + + :param title: Title of the prompt. + :type title: str, optional + """ + if author is not unset: + kwargs["author"] = author + if created_at is not unset: + kwargs["created_at"] = created_at + if datasets is not unset: + kwargs["datasets"] = datasets + if description is not unset: + kwargs["description"] = description + if extracted_from is not unset: + kwargs["extracted_from"] = extracted_from + if last_seen_at is not unset: + kwargs["last_seen_at"] = last_seen_at + if last_version_created_at is not unset: + kwargs["last_version_created_at"] = last_version_created_at + if ml_app is not unset: + kwargs["ml_app"] = ml_app + if ml_apps is not unset: + kwargs["ml_apps"] = ml_apps + if tags is not unset: + kwargs["tags"] = tags + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + + self_.created_from = created_from + self_.in_registry = in_registry + self_.num_versions = num_versions + self_.prompt_id = prompt_id + self_.source = source diff --git a/datadog_api_client/v2/model/llm_obs_prompt_dataset.py b/datadog_api_client/v2/model/llm_obs_prompt_dataset.py new file mode 100644 index 0000000000..5af4b9125e --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_dataset.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPromptDataset(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "name": (str,), + } + attribute_map = { + "id": "id", + "name": "name", + } + + def __init__(self_, id: str, name: Union[str, UnsetType]=unset, **kwargs): + """ + A dataset observed in runs associated with a prompt or prompt version. + + :param id: Unique identifier of the dataset. + :type id: str + + :param name: Name of the dataset. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/llm_obs_prompt_response.py b/datadog_api_client/v2/model/llm_obs_prompt_response.py new file mode 100644 index 0000000000..227fb9d984 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_data import LLMObsPromptData + +class LLMObsPromptResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_data import LLMObsPromptData + return { + "data": (LLMObsPromptData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPromptData, **kwargs): + """ + Response containing a single LLM Observability prompt. + + :param data: Data object for an LLM Observability prompt. + :type data: LLMObsPromptData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_prompt_response_source.py b/datadog_api_client/v2/model/llm_obs_prompt_response_source.py new file mode 100644 index 0000000000..0b060f46f0 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_response_source.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPromptResponseSource(ModelSimple): + """ + Whether the prompt was created from the registry or discovered from observed LLM calls. + + :param value: Must be one of ["registry", "code"]. + :type value: str + """ + + allowed_values = { + "registry", + "code", + } + REGISTRY: ClassVar["LLMObsPromptResponseSource"] + CODE: ClassVar["LLMObsPromptResponseSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPromptResponseSource.REGISTRY = LLMObsPromptResponseSource("registry") +LLMObsPromptResponseSource.CODE = LLMObsPromptResponseSource("code") diff --git a/datadog_api_client/v2/model/llm_obs_prompt_sdk_data.py b/datadog_api_client/v2/model/llm_obs_prompt_sdk_data.py new file mode 100644 index 0000000000..7386d01ce8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_sdk_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_sdk_data_attributes import LLMObsPromptSDKDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + +class LLMObsPromptSDKData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_sdk_data_attributes import LLMObsPromptSDKDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + return { + "attributes": (LLMObsPromptSDKDataAttributes,), + "id": (str,), + "type": (LLMObsPromptType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPromptSDKDataAttributes, id: str, type: LLMObsPromptType, **kwargs): + """ + Data object for a flattened LLM Observability prompt version returned for SDK consumption. + + :param attributes: Attributes of a flattened prompt version returned for SDK consumption. Exactly one of ``template`` and ``chat_template`` is returned. + :type attributes: LLMObsPromptSDKDataAttributes + + :param id: Unique identifier of the prompt. + :type id: str + + :param type: Resource type of an LLM Observability prompt. + :type type: LLMObsPromptType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_prompt_sdk_data_attributes.py b/datadog_api_client/v2/model/llm_obs_prompt_sdk_data_attributes.py new file mode 100644 index 0000000000..d19ed47418 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_sdk_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsPromptSDKDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + return { + "chat_template": ([LLMObsPromptChatMessage],), + "labels": ([str],), + "prompt_id": (str,), + "prompt_version_uuid": (str,), + "template": (str,), + "version": (str,), + } + attribute_map = { + "chat_template": "chat_template", + "labels": "labels", + "prompt_id": "prompt_id", + "prompt_version_uuid": "prompt_version_uuid", + "template": "template", + "version": "version", + } + + def __init__(self_, chat_template: Union[List[LLMObsPromptChatMessage], UnsetType]=unset, labels: Union[List[str], UnsetType]=unset, prompt_id: Union[str, UnsetType]=unset, prompt_version_uuid: Union[str, UnsetType]=unset, template: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a flattened prompt version returned for SDK consumption. Exactly one of ``template`` and ``chat_template`` is returned. + + :param chat_template: Chat template for this prompt version, as a list of role and content messages. Omitted for text templates. + :type chat_template: [LLMObsPromptChatMessage], optional + + :param labels: Labels attached to the selected version. **Deprecated**. + :type labels: [str], optional + + :param prompt_id: Customer-provided identifier of the prompt. + :type prompt_id: str, optional + + :param prompt_version_uuid: Unique identifier of this prompt version. + :type prompt_version_uuid: str, optional + + :param template: Text template for this prompt version. Omitted for chat templates. + :type template: str, optional + + :param version: Version identifier for this prompt version. This is the sequential version number unless a user-supplied version identifier was set, in which case that identifier is used instead. + :type version: str, optional + """ + if chat_template is not unset: + kwargs["chat_template"] = chat_template + if labels is not unset: + kwargs["labels"] = labels + if prompt_id is not unset: + kwargs["prompt_id"] = prompt_id + if prompt_version_uuid is not unset: + kwargs["prompt_version_uuid"] = prompt_version_uuid + if template is not unset: + kwargs["template"] = template + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_prompt_sdk_response.py b/datadog_api_client/v2/model/llm_obs_prompt_sdk_response.py new file mode 100644 index 0000000000..f7ed84420b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_sdk_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_sdk_data import LLMObsPromptSDKData + +class LLMObsPromptSDKResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_sdk_data import LLMObsPromptSDKData + return { + "data": (LLMObsPromptSDKData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPromptSDKData, **kwargs): + """ + Response containing a flattened LLM Observability prompt version for SDK consumption. + + :param data: Data object for a flattened LLM Observability prompt version returned for SDK consumption. + :type data: LLMObsPromptSDKData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_prompt_template.py b/datadog_api_client/v2/model/llm_obs_prompt_template.py new file mode 100644 index 0000000000..ef1cc137f5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_template.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsPromptTemplate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A text template or a list of chat messages. + """ + 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.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + return { + "oneOf": [ + str, + [LLMObsPromptChatMessage], + ], + } diff --git a/datadog_api_client/v2/model/llm_obs_prompt_type.py b/datadog_api_client/v2/model/llm_obs_prompt_type.py new file mode 100644 index 0000000000..402d159dc6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPromptType(ModelSimple): + """ + Resource type of an LLM Observability prompt. + + :param value: If omitted defaults to "prompt-templates". Must be one of ["prompt-templates"]. + :type value: str + """ + + allowed_values = { + "prompt-templates", + } + PROMPT_TEMPLATES: ClassVar["LLMObsPromptType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPromptType.PROMPT_TEMPLATES = LLMObsPromptType("prompt-templates") diff --git a/datadog_api_client/v2/model/llm_obs_prompt_version_data.py b/datadog_api_client/v2/model/llm_obs_prompt_version_data.py new file mode 100644 index 0000000000..c3764a77e5 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_version_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_version_data_attributes import LLMObsPromptVersionDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_version_type import LLMObsPromptVersionType + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsPromptVersionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_version_data_attributes import LLMObsPromptVersionDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_version_type import LLMObsPromptVersionType + return { + "attributes": (LLMObsPromptVersionDataAttributes,), + "id": (str,), + "type": (LLMObsPromptVersionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPromptVersionDataAttributes, id: str, type: LLMObsPromptVersionType, **kwargs): + """ + Data object for a specific version of an LLM Observability prompt. + + :param attributes: Attributes of a specific version of an LLM Observability prompt. + :type attributes: LLMObsPromptVersionDataAttributes + + :param id: Unique identifier of the prompt version. + :type id: str + + :param type: Resource type of an LLM Observability prompt version. + :type type: LLMObsPromptVersionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_prompt_version_data_attributes.py b/datadog_api_client/v2/model/llm_obs_prompt_version_data_attributes.py new file mode 100644 index 0000000000..1c20d6a947 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_version_data_attributes.py @@ -0,0 +1,151 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_dataset import LLMObsPromptDataset + from datadog_api_client.v2.model.llm_obs_prompt_template import LLMObsPromptTemplate + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsPromptVersionDataAttributes(ModelNormal): + validations = { + "version": { + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_dataset import LLMObsPromptDataset + from datadog_api_client.v2.model.llm_obs_prompt_template import LLMObsPromptTemplate + return { + "author": (str,), + "created_at": (datetime,), + "datasets": ([LLMObsPromptDataset],), + "description": (str,), + "labels": ([str],), + "last_seen_at": (datetime,), + "ml_app": (str,), + "ml_apps": ([str],), + "prompt_id": (str,), + "prompt_uuid": (str,), + "tags": ([str],), + "template": (LLMObsPromptTemplate,), + "user_version": (str,), + "version": (int,), + "version_created_at": (datetime,), + } + attribute_map = { + "author": "author", + "created_at": "created_at", + "datasets": "datasets", + "description": "description", + "labels": "labels", + "last_seen_at": "last_seen_at", + "ml_app": "ml_app", + "ml_apps": "ml_apps", + "prompt_id": "prompt_id", + "prompt_uuid": "prompt_uuid", + "tags": "tags", + "template": "template", + "user_version": "user_version", + "version": "version", + "version_created_at": "version_created_at", + } + + def __init__(self_, prompt_id: str, prompt_uuid: str, template: Union[LLMObsPromptTemplate, str, List[LLMObsPromptChatMessage]], version: int, author: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, datasets: Union[List[LLMObsPromptDataset], UnsetType]=unset, description: Union[str, UnsetType]=unset, labels: Union[List[str], UnsetType]=unset, last_seen_at: Union[datetime, UnsetType]=unset, ml_app: Union[str, UnsetType]=unset, ml_apps: Union[List[str], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, user_version: Union[str, UnsetType]=unset, version_created_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a specific version of an LLM Observability prompt. + + :param author: UUID of the user who authored this version. + :type author: str, optional + + :param created_at: Timestamp stored on this prompt version. + :type created_at: datetime, optional + + :param datasets: Datasets observed in runs associated with this prompt version. + :type datasets: [LLMObsPromptDataset], optional + + :param description: Description of this version. + :type description: str, optional + + :param labels: Labels attached to this version (for example ``development`` , ``staging`` , ``production`` ). **Deprecated**. + :type labels: [str], optional + + :param last_seen_at: Timestamp of the most recent observed run of this prompt version. + :type last_seen_at: datetime, optional + + :param ml_app: The ML application this prompt is associated with. + :type ml_app: str, optional + + :param ml_apps: ML applications observed running this prompt version. + :type ml_apps: [str], optional + + :param prompt_id: Customer-provided identifier of the parent prompt. + :type prompt_id: str + + :param prompt_uuid: Unique identifier of the parent prompt. + :type prompt_uuid: str + + :param tags: Tags observed on runs of this prompt version. + :type tags: [str], optional + + :param template: A text template or a list of chat messages. + :type template: LLMObsPromptTemplate + + :param user_version: User-supplied identifier for this version. + :type user_version: str, optional + + :param version: Sequential version number. + :type version: int + + :param version_created_at: Timestamp when this version was created. + :type version_created_at: datetime, optional + """ + if author is not unset: + kwargs["author"] = author + if created_at is not unset: + kwargs["created_at"] = created_at + if datasets is not unset: + kwargs["datasets"] = datasets + if description is not unset: + kwargs["description"] = description + if labels is not unset: + kwargs["labels"] = labels + if last_seen_at is not unset: + kwargs["last_seen_at"] = last_seen_at + if ml_app is not unset: + kwargs["ml_app"] = ml_app + if ml_apps is not unset: + kwargs["ml_apps"] = ml_apps + if tags is not unset: + kwargs["tags"] = tags + if user_version is not unset: + kwargs["user_version"] = user_version + if version_created_at is not unset: + kwargs["version_created_at"] = version_created_at + super().__init__(kwargs) + + + self_.prompt_id = prompt_id + self_.prompt_uuid = prompt_uuid + self_.template = template + self_.version = version diff --git a/datadog_api_client/v2/model/llm_obs_prompt_version_label.py b/datadog_api_client/v2/model/llm_obs_prompt_version_label.py new file mode 100644 index 0000000000..6a2042857b --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_version_label.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPromptVersionLabel(ModelSimple): + """ + A label attached to an LLM Observability prompt version. + + :param value: Must be one of ["production", "development"]. + :type value: str + """ + + allowed_values = { + "production", + "development", + } + PRODUCTION: ClassVar["LLMObsPromptVersionLabel"] + DEVELOPMENT: ClassVar["LLMObsPromptVersionLabel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPromptVersionLabel.PRODUCTION = LLMObsPromptVersionLabel("production") +LLMObsPromptVersionLabel.DEVELOPMENT = LLMObsPromptVersionLabel("development") diff --git a/datadog_api_client/v2/model/llm_obs_prompt_version_list_data.py b/datadog_api_client/v2/model/llm_obs_prompt_version_list_data.py new file mode 100644 index 0000000000..b294c62a75 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_version_list_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_version_list_data_attributes import LLMObsPromptVersionListDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_version_type import LLMObsPromptVersionType + +class LLMObsPromptVersionListData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_version_list_data_attributes import LLMObsPromptVersionListDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_version_type import LLMObsPromptVersionType + return { + "attributes": (LLMObsPromptVersionListDataAttributes,), + "id": (str,), + "type": (LLMObsPromptVersionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsPromptVersionListDataAttributes, id: str, type: LLMObsPromptVersionType, **kwargs): + """ + Data object for a prompt version returned in a list. + + :param attributes: Attributes of a prompt version returned in a list, excluding its template. + :type attributes: LLMObsPromptVersionListDataAttributes + + :param id: Unique identifier of the prompt version. + :type id: str + + :param type: Resource type of an LLM Observability prompt version. + :type type: LLMObsPromptVersionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_prompt_version_list_data_attributes.py b/datadog_api_client/v2/model/llm_obs_prompt_version_list_data_attributes.py new file mode 100644 index 0000000000..ea655b9864 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_version_list_data_attributes.py @@ -0,0 +1,142 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_dataset import LLMObsPromptDataset + +class LLMObsPromptVersionListDataAttributes(ModelNormal): + validations = { + "version": { + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_dataset import LLMObsPromptDataset + return { + "author": (str,), + "created_at": (datetime,), + "datasets": ([LLMObsPromptDataset],), + "description": (str,), + "labels": ([str],), + "last_seen_at": (datetime,), + "ml_app": (str,), + "ml_apps": ([str],), + "prompt_id": (str,), + "prompt_uuid": (str,), + "tags": ([str],), + "user_version": (str,), + "version": (int,), + "version_created_at": (datetime,), + } + attribute_map = { + "author": "author", + "created_at": "created_at", + "datasets": "datasets", + "description": "description", + "labels": "labels", + "last_seen_at": "last_seen_at", + "ml_app": "ml_app", + "ml_apps": "ml_apps", + "prompt_id": "prompt_id", + "prompt_uuid": "prompt_uuid", + "tags": "tags", + "user_version": "user_version", + "version": "version", + "version_created_at": "version_created_at", + } + + def __init__(self_, prompt_id: str, prompt_uuid: str, version: int, author: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, datasets: Union[List[LLMObsPromptDataset], UnsetType]=unset, description: Union[str, UnsetType]=unset, labels: Union[List[str], UnsetType]=unset, last_seen_at: Union[datetime, UnsetType]=unset, ml_app: Union[str, UnsetType]=unset, ml_apps: Union[List[str], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, user_version: Union[str, UnsetType]=unset, version_created_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a prompt version returned in a list, excluding its template. + + :param author: UUID of the user who authored this version. + :type author: str, optional + + :param created_at: Timestamp stored on this prompt version. + :type created_at: datetime, optional + + :param datasets: Datasets observed in runs associated with this prompt version. + :type datasets: [LLMObsPromptDataset], optional + + :param description: Description of this version. + :type description: str, optional + + :param labels: Labels attached to this version (for example ``development`` , ``staging`` , ``production`` ). **Deprecated**. + :type labels: [str], optional + + :param last_seen_at: Timestamp of the most recent observed run of this prompt version. + :type last_seen_at: datetime, optional + + :param ml_app: The ML application this prompt is associated with. + :type ml_app: str, optional + + :param ml_apps: ML applications observed running this prompt version. + :type ml_apps: [str], optional + + :param prompt_id: Customer-provided identifier of the parent prompt. + :type prompt_id: str + + :param prompt_uuid: Unique identifier of the parent prompt. + :type prompt_uuid: str + + :param tags: Tags observed on runs of this prompt version. + :type tags: [str], optional + + :param user_version: User-supplied identifier for this version. + :type user_version: str, optional + + :param version: Sequential version number. + :type version: int + + :param version_created_at: Timestamp when this version was created. + :type version_created_at: datetime, optional + """ + if author is not unset: + kwargs["author"] = author + if created_at is not unset: + kwargs["created_at"] = created_at + if datasets is not unset: + kwargs["datasets"] = datasets + if description is not unset: + kwargs["description"] = description + if labels is not unset: + kwargs["labels"] = labels + if last_seen_at is not unset: + kwargs["last_seen_at"] = last_seen_at + if ml_app is not unset: + kwargs["ml_app"] = ml_app + if ml_apps is not unset: + kwargs["ml_apps"] = ml_apps + if tags is not unset: + kwargs["tags"] = tags + if user_version is not unset: + kwargs["user_version"] = user_version + if version_created_at is not unset: + kwargs["version_created_at"] = version_created_at + super().__init__(kwargs) + + + self_.prompt_id = prompt_id + self_.prompt_uuid = prompt_uuid + self_.version = version diff --git a/datadog_api_client/v2/model/llm_obs_prompt_version_response.py b/datadog_api_client/v2/model/llm_obs_prompt_version_response.py new file mode 100644 index 0000000000..a2eec4bbcf --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_version_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_version_data import LLMObsPromptVersionData + from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage + +class LLMObsPromptVersionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_version_data import LLMObsPromptVersionData + return { + "data": (LLMObsPromptVersionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsPromptVersionData, **kwargs): + """ + Response containing a specific version of an LLM Observability prompt. + + :param data: Data object for a specific version of an LLM Observability prompt. + :type data: LLMObsPromptVersionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_prompt_version_type.py b/datadog_api_client/v2/model/llm_obs_prompt_version_type.py new file mode 100644 index 0000000000..f15a7596bd --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_version_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsPromptVersionType(ModelSimple): + """ + Resource type of an LLM Observability prompt version. + + :param value: If omitted defaults to "prompt-template-versions". Must be one of ["prompt-template-versions"]. + :type value: str + """ + + allowed_values = { + "prompt-template-versions", + } + PROMPT_TEMPLATE_VERSIONS: ClassVar["LLMObsPromptVersionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsPromptVersionType.PROMPT_TEMPLATE_VERSIONS = LLMObsPromptVersionType("prompt-template-versions") diff --git a/datadog_api_client/v2/model/llm_obs_prompt_versions_response.py b/datadog_api_client/v2/model/llm_obs_prompt_versions_response.py new file mode 100644 index 0000000000..370993fdae --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompt_versions_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_version_list_data import LLMObsPromptVersionListData + +class LLMObsPromptVersionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_version_list_data import LLMObsPromptVersionListData + return { + "data": ([LLMObsPromptVersionListData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[LLMObsPromptVersionListData], **kwargs): + """ + Response containing the versions of an LLM Observability prompt. + + :param data: Prompt versions ordered from newest to oldest. + :type data: [LLMObsPromptVersionListData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_prompts_response.py b/datadog_api_client/v2/model/llm_obs_prompts_response.py new file mode 100644 index 0000000000..c398dfa8af --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_prompts_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_data import LLMObsPromptData + +class LLMObsPromptsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_data import LLMObsPromptData + return { + "data": ([LLMObsPromptData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[LLMObsPromptData], **kwargs): + """ + Response containing a list of LLM Observability prompts. + + :param data: List of LLM Observability prompts. + :type data: [LLMObsPromptData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_record_type.py b/datadog_api_client/v2/model/llm_obs_record_type.py new file mode 100644 index 0000000000..e6ff7a8d72 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_record_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsRecordType(ModelSimple): + """ + Resource type of LLM Observability dataset records. + + :param value: If omitted defaults to "records". Must be one of ["records"]. + :type value: str + """ + + allowed_values = { + "records", + } + RECORDS: ClassVar["LLMObsRecordType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsRecordType.RECORDS = LLMObsRecordType("records") diff --git a/datadog_api_client/v2/model/llm_obs_search_spans_request.py b/datadog_api_client/v2/model/llm_obs_search_spans_request.py new file mode 100644 index 0000000000..565e923f2f --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_search_spans_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_search_spans_request_data import LLMObsSearchSpansRequestData + +class LLMObsSearchSpansRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_search_spans_request_data import LLMObsSearchSpansRequestData + return { + "data": (LLMObsSearchSpansRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsSearchSpansRequestData, **kwargs): + """ + Request body for searching LLM Observability spans. + + :param data: Data object for an LLM Observability spans search request. + :type data: LLMObsSearchSpansRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_search_spans_request_attributes.py b/datadog_api_client/v2/model/llm_obs_search_spans_request_attributes.py new file mode 100644 index 0000000000..ab1e6e6156 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_search_spans_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_span_filter import LLMObsSpanFilter + from datadog_api_client.v2.model.llm_obs_span_search_options import LLMObsSpanSearchOptions + from datadog_api_client.v2.model.llm_obs_span_page_query import LLMObsSpanPageQuery + +class LLMObsSearchSpansRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_span_filter import LLMObsSpanFilter + from datadog_api_client.v2.model.llm_obs_span_search_options import LLMObsSpanSearchOptions + from datadog_api_client.v2.model.llm_obs_span_page_query import LLMObsSpanPageQuery + return { + "filter": (LLMObsSpanFilter,), + "options": (LLMObsSpanSearchOptions,), + "page": (LLMObsSpanPageQuery,), + "sort": (str,), + } + attribute_map = { + "filter": "filter", + "options": "options", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[LLMObsSpanFilter, UnsetType]=unset, options: Union[LLMObsSpanSearchOptions, UnsetType]=unset, page: Union[LLMObsSpanPageQuery, UnsetType]=unset, sort: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an LLM Observability spans search request. + + :param filter: Filter criteria for an LLM Observability span search. + :type filter: LLMObsSpanFilter, optional + + :param options: Additional options for a span search request. + :type options: LLMObsSpanSearchOptions, optional + + :param page: Pagination settings for a span search request. + :type page: LLMObsSpanPageQuery, optional + + :param sort: Sort order for the results. Use ``-`` prefix for descending order. + :type sort: str, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_search_spans_request_data.py b/datadog_api_client/v2/model/llm_obs_search_spans_request_data.py new file mode 100644 index 0000000000..7a43327232 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_search_spans_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_search_spans_request_attributes import LLMObsSearchSpansRequestAttributes + from datadog_api_client.v2.model.llm_obs_search_spans_request_type import LLMObsSearchSpansRequestType + +class LLMObsSearchSpansRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_search_spans_request_attributes import LLMObsSearchSpansRequestAttributes + from datadog_api_client.v2.model.llm_obs_search_spans_request_type import LLMObsSearchSpansRequestType + return { + "attributes": (LLMObsSearchSpansRequestAttributes,), + "type": (LLMObsSearchSpansRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsSearchSpansRequestAttributes, type: LLMObsSearchSpansRequestType, **kwargs): + """ + Data object for an LLM Observability spans search request. + + :param attributes: Attributes of an LLM Observability spans search request. + :type attributes: LLMObsSearchSpansRequestAttributes + + :param type: Resource type for an LLM Observability spans search request. + :type type: LLMObsSearchSpansRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_search_spans_request_type.py b/datadog_api_client/v2/model/llm_obs_search_spans_request_type.py new file mode 100644 index 0000000000..2321fc9427 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_search_spans_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsSearchSpansRequestType(ModelSimple): + """ + Resource type for an LLM Observability spans search request. + + :param value: If omitted defaults to "spans". Must be one of ["spans"]. + :type value: str + """ + + allowed_values = { + "spans", + } + SPANS: ClassVar["LLMObsSearchSpansRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsSearchSpansRequestType.SPANS = LLMObsSearchSpansRequestType("spans") diff --git a/datadog_api_client/v2/model/llm_obs_span_attributes.py b/datadog_api_client/v2/model/llm_obs_span_attributes.py new file mode 100644 index 0000000000..2e33e0d6d2 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_attributes.py @@ -0,0 +1,171 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_span_evaluation_metric import LLMObsSpanEvaluationMetric + from datadog_api_client.v2.model.llm_obs_span_io import LLMObsSpanIO + from datadog_api_client.v2.model.llm_obs_span_tool_definition import LLMObsSpanToolDefinition + +class LLMObsSpanAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_span_evaluation_metric import LLMObsSpanEvaluationMetric + from datadog_api_client.v2.model.llm_obs_span_io import LLMObsSpanIO + from datadog_api_client.v2.model.llm_obs_span_tool_definition import LLMObsSpanToolDefinition + return { + "duration": (float,), + "evaluation": ({str: (LLMObsSpanEvaluationMetric,)},), + "input": (LLMObsSpanIO,), + "intent": (str,), + "metadata": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "metrics": ({str: (float,)},), + "ml_app": (str,), + "model_name": (str,), + "model_provider": (str,), + "name": (str,), + "output": (LLMObsSpanIO,), + "parent_id": (str,), + "span_id": (str,), + "span_kind": (str,), + "start_ns": (int,), + "status": (str,), + "tags": ([str],), + "tool_definitions": ([LLMObsSpanToolDefinition],), + "trace_id": (str,), + } + attribute_map = { + "duration": "duration", + "evaluation": "evaluation", + "input": "input", + "intent": "intent", + "metadata": "metadata", + "metrics": "metrics", + "ml_app": "ml_app", + "model_name": "model_name", + "model_provider": "model_provider", + "name": "name", + "output": "output", + "parent_id": "parent_id", + "span_id": "span_id", + "span_kind": "span_kind", + "start_ns": "start_ns", + "status": "status", + "tags": "tags", + "tool_definitions": "tool_definitions", + "trace_id": "trace_id", + } + + def __init__(self_, duration: float, ml_app: str, name: str, span_id: str, span_kind: str, start_ns: int, status: str, trace_id: str, evaluation: Union[Dict[str, LLMObsSpanEvaluationMetric], UnsetType]=unset, input: Union[LLMObsSpanIO, UnsetType]=unset, intent: Union[str, UnsetType]=unset, metadata: Union[Dict[str, Any], UnsetType]=unset, metrics: Union[Dict[str, float], UnsetType]=unset, model_name: Union[str, UnsetType]=unset, model_provider: Union[str, UnsetType]=unset, output: Union[LLMObsSpanIO, UnsetType]=unset, parent_id: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, tool_definitions: Union[List[LLMObsSpanToolDefinition], UnsetType]=unset, **kwargs): + """ + Attributes of an LLM Observability span. + + :param duration: Duration of the span in nanoseconds. + :type duration: float + + :param evaluation: Evaluation metrics keyed by evaluator name. + :type evaluation: {str: (LLMObsSpanEvaluationMetric,)}, optional + + :param input: Input or output content of an LLM Observability span. + :type input: LLMObsSpanIO, optional + + :param intent: Detected intent of the span. + :type intent: str, optional + + :param metadata: Arbitrary metadata associated with the span. + :type metadata: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param metrics: Numeric metrics associated with the span (e.g., token counts). + :type metrics: {str: (float,)}, optional + + :param ml_app: Name of the ML application this span belongs to. + :type ml_app: str + + :param model_name: Name of the model used in this span. + :type model_name: str, optional + + :param model_provider: Provider of the model used in this span. + :type model_provider: str, optional + + :param name: Name of the span. + :type name: str + + :param output: Input or output content of an LLM Observability span. + :type output: LLMObsSpanIO, optional + + :param parent_id: Identifier of the parent span, if any. + :type parent_id: str, optional + + :param span_id: Unique identifier of the span. + :type span_id: str + + :param span_kind: Kind of span (e.g., llm, agent, tool, task, workflow). + :type span_kind: str + + :param start_ns: Start time of the span in nanoseconds since Unix epoch. + :type start_ns: int + + :param status: Status of the span (e.g., ok, error). + :type status: str + + :param tags: Tags associated with the span. + :type tags: [str], optional + + :param tool_definitions: Tool definitions available to the span. + :type tool_definitions: [LLMObsSpanToolDefinition], optional + + :param trace_id: Trace identifier this span belongs to. + :type trace_id: str + """ + if evaluation is not unset: + kwargs["evaluation"] = evaluation + if input is not unset: + kwargs["input"] = input + if intent is not unset: + kwargs["intent"] = intent + if metadata is not unset: + kwargs["metadata"] = metadata + if metrics is not unset: + kwargs["metrics"] = metrics + if model_name is not unset: + kwargs["model_name"] = model_name + if model_provider is not unset: + kwargs["model_provider"] = model_provider + if output is not unset: + kwargs["output"] = output + if parent_id is not unset: + kwargs["parent_id"] = parent_id + if tags is not unset: + kwargs["tags"] = tags + if tool_definitions is not unset: + kwargs["tool_definitions"] = tool_definitions + super().__init__(kwargs) + + + self_.duration = duration + self_.ml_app = ml_app + self_.name = name + self_.span_id = span_id + self_.span_kind = span_kind + self_.start_ns = start_ns + self_.status = status + self_.trace_id = trace_id diff --git a/datadog_api_client/v2/model/llm_obs_span_data.py b/datadog_api_client/v2/model/llm_obs_span_data.py new file mode 100644 index 0000000000..cf2a7de756 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_span_attributes import LLMObsSpanAttributes + from datadog_api_client.v2.model.llm_obs_span_type import LLMObsSpanType + +class LLMObsSpanData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_span_attributes import LLMObsSpanAttributes + from datadog_api_client.v2.model.llm_obs_span_type import LLMObsSpanType + return { + "attributes": (LLMObsSpanAttributes,), + "id": (str,), + "type": (LLMObsSpanType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LLMObsSpanAttributes, id: str, type: LLMObsSpanType, **kwargs): + """ + A single LLM Observability span. + + :param attributes: Attributes of an LLM Observability span. + :type attributes: LLMObsSpanAttributes + + :param id: Unique identifier of the span. + :type id: str + + :param type: Resource type for an LLM Observability span. + :type type: LLMObsSpanType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_span_evaluation_metric.py b/datadog_api_client/v2/model/llm_obs_span_evaluation_metric.py new file mode 100644 index 0000000000..04ba9df4db --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_evaluation_metric.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsSpanEvaluationMetric(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assessment": (str,), + "eval_metric_type": (str,), + "reasoning": (str,), + "status": (str,), + "tags": ([str],), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "assessment": "assessment", + "eval_metric_type": "eval_metric_type", + "reasoning": "reasoning", + "status": "status", + "tags": "tags", + "value": "value", + } + + def __init__(self_, assessment: Union[str, UnsetType]=unset, eval_metric_type: Union[str, UnsetType]=unset, reasoning: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, value: Union[Any, UnsetType]=unset, **kwargs): + """ + An evaluation metric associated with an LLM Observability span. + + :param assessment: Assessment result (e.g., pass or fail). + :type assessment: str, optional + + :param eval_metric_type: Type of the evaluation metric (e.g., score, categorical, boolean). + :type eval_metric_type: str, optional + + :param reasoning: Human-readable reasoning for the evaluation result. + :type reasoning: str, optional + + :param status: Status of the evaluation execution. + :type status: str, optional + + :param tags: Tags associated with the evaluation metric. + :type tags: [str], optional + + :param value: Value of the evaluation result. + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + """ + if assessment is not unset: + kwargs["assessment"] = assessment + if eval_metric_type is not unset: + kwargs["eval_metric_type"] = eval_metric_type + if reasoning is not unset: + kwargs["reasoning"] = reasoning + if status is not unset: + kwargs["status"] = status + if tags is not unset: + kwargs["tags"] = tags + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_span_filter.py b/datadog_api_client/v2/model/llm_obs_span_filter.py new file mode 100644 index 0000000000..924434aad8 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_filter.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsSpanFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (str,), + "ml_app": (str,), + "query": (str,), + "span_id": (str,), + "span_kind": (str,), + "span_name": (str,), + "tags": ({str: (str,)},), + "to": (str,), + "trace_id": (str,), + } + attribute_map = { + "_from": "from", + "ml_app": "ml_app", + "query": "query", + "span_id": "span_id", + "span_kind": "span_kind", + "span_name": "span_name", + "tags": "tags", + "to": "to", + "trace_id": "trace_id", + } + + def __init__(self_, _from: Union[str, UnsetType]=unset, ml_app: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, span_id: Union[str, UnsetType]=unset, span_kind: Union[str, UnsetType]=unset, span_name: Union[str, UnsetType]=unset, tags: Union[Dict[str, str], UnsetType]=unset, to: Union[str, UnsetType]=unset, trace_id: Union[str, UnsetType]=unset, **kwargs): + """ + Filter criteria for an LLM Observability span search. + + :param _from: Start of the time range. Accepts ISO 8601 or relative format (e.g., ``now-15m`` ). Defaults to ``now-15m``. + :type _from: str, optional + + :param ml_app: Filter by ML application name. + :type ml_app: str, optional + + :param query: Search query using LLM Observability query syntax. Supports attribute filters using the field:value syntax (e.g. session_id, trace_id, ml_app, meta.span.kind). When provided, structured field filters ( ``span_id`` , ``trace_id`` , etc.) are ignored. + :type query: str, optional + + :param span_id: Filter by exact span ID. + :type span_id: str, optional + + :param span_kind: Filter by span kind (e.g., llm, agent, tool, task, workflow). + :type span_kind: str, optional + + :param span_name: Filter by span name. + :type span_name: str, optional + + :param tags: Filter by tag key-value pairs. + :type tags: {str: (str,)}, optional + + :param to: End of the time range. Accepts ISO 8601 or relative format (e.g., ``now`` ). Defaults to ``now``. + :type to: str, optional + + :param trace_id: Filter by exact trace ID. + :type trace_id: str, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if ml_app is not unset: + kwargs["ml_app"] = ml_app + if query is not unset: + kwargs["query"] = query + if span_id is not unset: + kwargs["span_id"] = span_id + if span_kind is not unset: + kwargs["span_kind"] = span_kind + if span_name is not unset: + kwargs["span_name"] = span_name + if tags is not unset: + kwargs["tags"] = tags + if to is not unset: + kwargs["to"] = to + if trace_id is not unset: + kwargs["trace_id"] = trace_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_span_io.py b/datadog_api_client/v2/model/llm_obs_span_io.py new file mode 100644 index 0000000000..04df6b5dff --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_io.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_span_message import LLMObsSpanMessage + +class LLMObsSpanIO(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_span_message import LLMObsSpanMessage + return { + "messages": ([LLMObsSpanMessage],), + "value": (str,), + } + attribute_map = { + "messages": "messages", + "value": "value", + } + + def __init__(self_, messages: Union[List[LLMObsSpanMessage], UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + Input or output content of an LLM Observability span. + + :param messages: List of messages in the input or output. + :type messages: [LLMObsSpanMessage], optional + + :param value: Plain-text value of the input or output. + :type value: str, optional + """ + if messages is not unset: + kwargs["messages"] = messages + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_span_message.py b/datadog_api_client/v2/model/llm_obs_span_message.py new file mode 100644 index 0000000000..34543821f4 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_message.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_span_tool_call import LLMObsSpanToolCall + from datadog_api_client.v2.model.llm_obs_span_tool_result import LLMObsSpanToolResult + +class LLMObsSpanMessage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_span_tool_call import LLMObsSpanToolCall + from datadog_api_client.v2.model.llm_obs_span_tool_result import LLMObsSpanToolResult + return { + "content": (str,), + "id": (str,), + "role": (str,), + "tool_calls": ([LLMObsSpanToolCall],), + "tool_results": ([LLMObsSpanToolResult],), + } + attribute_map = { + "content": "content", + "id": "id", + "role": "role", + "tool_calls": "tool_calls", + "tool_results": "tool_results", + } + + def __init__(self_, content: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, role: Union[str, UnsetType]=unset, tool_calls: Union[List[LLMObsSpanToolCall], UnsetType]=unset, tool_results: Union[List[LLMObsSpanToolResult], UnsetType]=unset, **kwargs): + """ + A single message in a span input or output. + + :param content: Text content of the message. + :type content: str, optional + + :param id: Unique identifier of the message. + :type id: str, optional + + :param role: Role of the message sender (e.g., user, assistant, system). + :type role: str, optional + + :param tool_calls: Tool calls made in this message. + :type tool_calls: [LLMObsSpanToolCall], optional + + :param tool_results: Tool results returned in this message. + :type tool_results: [LLMObsSpanToolResult], optional + """ + if content is not unset: + kwargs["content"] = content + if id is not unset: + kwargs["id"] = id + if role is not unset: + kwargs["role"] = role + if tool_calls is not unset: + kwargs["tool_calls"] = tool_calls + if tool_results is not unset: + kwargs["tool_results"] = tool_results + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_span_page_query.py b/datadog_api_client/v2/model/llm_obs_span_page_query.py new file mode 100644 index 0000000000..9d1de21146 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_page_query.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsSpanPageQuery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination settings for a span search request. + + :param cursor: Cursor from the previous response to retrieve the next page. + :type cursor: str, optional + + :param limit: Maximum number of spans to return. Defaults to ``10``. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_span_search_options.py b/datadog_api_client/v2/model/llm_obs_span_search_options.py new file mode 100644 index 0000000000..52347641a6 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_search_options.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsSpanSearchOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_attachments": (bool,), + "time_offset": (int,), + } + attribute_map = { + "include_attachments": "include_attachments", + "time_offset": "time_offset", + } + + def __init__(self_, include_attachments: Union[bool, UnsetType]=unset, time_offset: Union[int, UnsetType]=unset, **kwargs): + """ + Additional options for a span search request. + + :param include_attachments: Whether to include attachment data in the response. Defaults to ``true``. + :type include_attachments: bool, optional + + :param time_offset: Offset in seconds applied to both ``from`` and ``to`` timestamps. + :type time_offset: int, optional + """ + if include_attachments is not unset: + kwargs["include_attachments"] = include_attachments + if time_offset is not unset: + kwargs["time_offset"] = time_offset + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_span_tool_call.py b/datadog_api_client/v2/model/llm_obs_span_tool_call.py new file mode 100644 index 0000000000..8437bcebac --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_tool_call.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsSpanToolCall(ModelNormal): + @cached_property + def openapi_types(_): + return { + "arguments": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "name": (str,), + "tool_id": (str,), + "type": (str,), + } + attribute_map = { + "arguments": "arguments", + "name": "name", + "tool_id": "tool_id", + "type": "type", + } + + def __init__(self_, arguments: Union[Dict[str, Any], UnsetType]=unset, name: Union[str, UnsetType]=unset, tool_id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A tool call made during a span. + + :param arguments: Arguments passed to the tool. + :type arguments: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param name: Name of the tool called. + :type name: str, optional + + :param tool_id: Identifier of the tool call. + :type tool_id: str, optional + + :param type: Type of the tool call. + :type type: str, optional + """ + if arguments is not unset: + kwargs["arguments"] = arguments + if name is not unset: + kwargs["name"] = name + if tool_id is not unset: + kwargs["tool_id"] = tool_id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_span_tool_definition.py b/datadog_api_client/v2/model/llm_obs_span_tool_definition.py new file mode 100644 index 0000000000..fed10110e0 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_tool_definition.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsSpanToolDefinition(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + "schema": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "version": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + "schema": "schema", + "version": "version", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, schema: Union[Dict[str, Any], UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + A tool definition available to an LLM span. + + :param description: Description of what the tool does. + :type description: str, optional + + :param name: Name of the tool. + :type name: str, optional + + :param schema: JSON schema describing the tool's input parameters. + :type schema: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param version: Version of the tool definition. + :type version: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if schema is not unset: + kwargs["schema"] = schema + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_span_tool_result.py b/datadog_api_client/v2/model/llm_obs_span_tool_result.py new file mode 100644 index 0000000000..53304dc372 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_tool_result.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsSpanToolResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "result": (str,), + "tool_id": (str,), + "type": (str,), + } + attribute_map = { + "name": "name", + "result": "result", + "tool_id": "tool_id", + "type": "type", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, result: Union[str, UnsetType]=unset, tool_id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A result returned from a tool call during a span. + + :param name: Name of the tool that produced this result. + :type name: str, optional + + :param result: Result value returned by the tool. + :type result: str, optional + + :param tool_id: Identifier of the corresponding tool call. + :type tool_id: str, optional + + :param type: Type of the tool result. + :type type: str, optional + """ + if name is not unset: + kwargs["name"] = name + if result is not unset: + kwargs["result"] = result + if tool_id is not unset: + kwargs["tool_id"] = tool_id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_span_type.py b/datadog_api_client/v2/model/llm_obs_span_type.py new file mode 100644 index 0000000000..412480fd36 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_span_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsSpanType(ModelSimple): + """ + Resource type for an LLM Observability span. + + :param value: If omitted defaults to "span". Must be one of ["span"]. + :type value: str + """ + + allowed_values = { + "span", + } + SPAN: ClassVar["LLMObsSpanType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsSpanType.SPAN = LLMObsSpanType("span") diff --git a/datadog_api_client/v2/model/llm_obs_spans_response.py b/datadog_api_client/v2/model/llm_obs_spans_response.py new file mode 100644 index 0000000000..0b00e26a7d --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_spans_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_span_data import LLMObsSpanData + from datadog_api_client.v2.model.llm_obs_spans_response_links import LLMObsSpansResponseLinks + from datadog_api_client.v2.model.llm_obs_spans_response_meta import LLMObsSpansResponseMeta + +class LLMObsSpansResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_span_data import LLMObsSpanData + from datadog_api_client.v2.model.llm_obs_spans_response_links import LLMObsSpansResponseLinks + from datadog_api_client.v2.model.llm_obs_spans_response_meta import LLMObsSpansResponseMeta + return { + "data": ([LLMObsSpanData],), + "links": (LLMObsSpansResponseLinks,), + "meta": (LLMObsSpansResponseMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[LLMObsSpanData], meta: LLMObsSpansResponseMeta, links: Union[LLMObsSpansResponseLinks, UnsetType]=unset, **kwargs): + """ + Response containing a list of LLM Observability spans. + + :param data: List of spans matching the query. + :type data: [LLMObsSpanData] + + :param links: Pagination links accompanying the spans response. + :type links: LLMObsSpansResponseLinks, optional + + :param meta: Metadata accompanying the spans response. + :type meta: LLMObsSpansResponseMeta + """ + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/llm_obs_spans_response_links.py b/datadog_api_client/v2/model/llm_obs_spans_response_links.py new file mode 100644 index 0000000000..2eacc225de --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_spans_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsSpansResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links accompanying the spans response. + + :param next: URL to retrieve the next page of results. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_spans_response_meta.py b/datadog_api_client/v2/model/llm_obs_spans_response_meta.py new file mode 100644 index 0000000000..a98c671547 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_spans_response_meta.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_spans_response_page import LLMObsSpansResponsePage + +class LLMObsSpansResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_spans_response_page import LLMObsSpansResponsePage + return { + "elapsed": (int,), + "page": (LLMObsSpansResponsePage,), + "request_id": (str,), + "status": (str,), + } + attribute_map = { + "elapsed": "elapsed", + "page": "page", + "request_id": "request_id", + "status": "status", + } + + def __init__(self_, elapsed: int, page: LLMObsSpansResponsePage, request_id: str, status: str, **kwargs): + """ + Metadata accompanying the spans response. + + :param elapsed: Time elapsed for the query in milliseconds. + :type elapsed: int + + :param page: Pagination cursor for the spans response. + :type page: LLMObsSpansResponsePage + + :param request_id: Unique identifier for the request. + :type request_id: str + + :param status: Status of the query execution. + :type status: str + """ + super().__init__(kwargs) + + + self_.elapsed = elapsed + self_.page = page + self_.request_id = request_id + self_.status = status diff --git a/datadog_api_client/v2/model/llm_obs_spans_response_page.py b/datadog_api_client/v2/model/llm_obs_spans_response_page.py new file mode 100644 index 0000000000..8b817be263 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_spans_response_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsSpansResponsePage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str,), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination cursor for the spans response. + + :param after: Cursor to retrieve the next page of results. Absent when there are no more results. + :type after: str, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_trace_annotated_interaction_item.py b/datadog_api_client/v2/model/llm_obs_trace_annotated_interaction_item.py new file mode 100644 index 0000000000..a7895a11eb --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_trace_annotated_interaction_item.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_item import LLMObsAnnotationItem + from datadog_api_client.v2.model.llm_obs_trace_interaction_type import LLMObsTraceInteractionType + +class LLMObsTraceAnnotatedInteractionItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_item import LLMObsAnnotationItem + from datadog_api_client.v2.model.llm_obs_trace_interaction_type import LLMObsTraceInteractionType + return { + "annotations": ([LLMObsAnnotationItem],), + "content_id": (str,), + "created_at": (datetime,), + "id": (str,), + "modified_at": (datetime,), + "type": (LLMObsTraceInteractionType,), + } + attribute_map = { + "annotations": "annotations", + "content_id": "content_id", + "created_at": "created_at", + "id": "id", + "modified_at": "modified_at", + "type": "type", + } + + def __init__(self_, annotations: List[LLMObsAnnotationItem], content_id: str, created_at: datetime, id: str, modified_at: datetime, type: LLMObsTraceInteractionType, **kwargs): + """ + A trace, experiment trace, or session interaction with its associated annotations. + + :param annotations: List of annotations for this interaction. + :type annotations: [LLMObsAnnotationItem] + + :param content_id: Upstream entity identifier supplied by the caller. + :type content_id: str + + :param created_at: Timestamp when the interaction was added to the queue. + :type created_at: datetime + + :param id: Unique identifier of the interaction. + :type id: str + + :param modified_at: Timestamp when the interaction was last updated. + :type modified_at: datetime + + :param type: Type of an upstream-entity interaction. + :type type: LLMObsTraceInteractionType + """ + super().__init__(kwargs) + + + self_.annotations = annotations + self_.content_id = content_id + self_.created_at = created_at + self_.id = id + self_.modified_at = modified_at + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_trace_interaction_item.py b/datadog_api_client/v2/model/llm_obs_trace_interaction_item.py new file mode 100644 index 0000000000..28ec24b687 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_trace_interaction_item.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_trace_interaction_type import LLMObsTraceInteractionType + +class LLMObsTraceInteractionItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_trace_interaction_type import LLMObsTraceInteractionType + return { + "content_id": (str,), + "type": (LLMObsTraceInteractionType,), + } + attribute_map = { + "content_id": "content_id", + "type": "type", + } + + def __init__(self_, content_id: str, type: LLMObsTraceInteractionType, **kwargs): + """ + An interaction that references an upstream trace, experiment trace, or session. + + :param content_id: Upstream entity identifier (trace, experiment trace, or session ID). + :type content_id: str + + :param type: Type of an upstream-entity interaction. + :type type: LLMObsTraceInteractionType + """ + super().__init__(kwargs) + + + self_.content_id = content_id + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_trace_interaction_response_item.py b/datadog_api_client/v2/model/llm_obs_trace_interaction_response_item.py new file mode 100644 index 0000000000..801be03c53 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_trace_interaction_response_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_trace_interaction_type import LLMObsTraceInteractionType + +class LLMObsTraceInteractionResponseItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_trace_interaction_type import LLMObsTraceInteractionType + return { + "already_existed": (bool,), + "content_id": (str,), + "created_at": (datetime,), + "id": (str,), + "modified_at": (datetime,), + "type": (LLMObsTraceInteractionType,), + } + attribute_map = { + "already_existed": "already_existed", + "content_id": "content_id", + "created_at": "created_at", + "id": "id", + "modified_at": "modified_at", + "type": "type", + } + + def __init__(self_, already_existed: bool, content_id: str, created_at: datetime, id: str, modified_at: datetime, type: LLMObsTraceInteractionType, **kwargs): + """ + A trace, experiment trace, or session interaction result. + + :param already_existed: Whether this interaction already existed in the queue. + :type already_existed: bool + + :param content_id: Upstream entity identifier supplied by the caller. + :type content_id: str + + :param created_at: Timestamp when the interaction was added to the queue. + :type created_at: datetime + + :param id: Unique identifier of the interaction. + :type id: str + + :param modified_at: Timestamp when the interaction was last updated. + :type modified_at: datetime + + :param type: Type of an upstream-entity interaction. + :type type: LLMObsTraceInteractionType + """ + super().__init__(kwargs) + + + self_.already_existed = already_existed + self_.content_id = content_id + self_.created_at = created_at + self_.id = id + self_.modified_at = modified_at + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_trace_interaction_type.py b/datadog_api_client/v2/model/llm_obs_trace_interaction_type.py new file mode 100644 index 0000000000..19337b8d43 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_trace_interaction_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LLMObsTraceInteractionType(ModelSimple): + """ + Type of an upstream-entity interaction. + + :param value: Must be one of ["trace", "experiment_trace", "session"]. + :type value: str + """ + + allowed_values = { + "trace", + "experiment_trace", + "session", + } + TRACE: ClassVar["LLMObsTraceInteractionType"] + EXPERIMENT_TRACE: ClassVar["LLMObsTraceInteractionType"] + SESSION: ClassVar["LLMObsTraceInteractionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LLMObsTraceInteractionType.TRACE = LLMObsTraceInteractionType("trace") +LLMObsTraceInteractionType.EXPERIMENT_TRACE = LLMObsTraceInteractionType("experiment_trace") +LLMObsTraceInteractionType.SESSION = LLMObsTraceInteractionType("session") diff --git a/datadog_api_client/v2/model/llm_obs_update_prompt_data.py b/datadog_api_client/v2/model/llm_obs_update_prompt_data.py new file mode 100644 index 0000000000..4d82712fcf --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_update_prompt_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_update_prompt_data_attributes import LLMObsUpdatePromptDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + +class LLMObsUpdatePromptData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_update_prompt_data_attributes import LLMObsUpdatePromptDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType + return { + "attributes": (LLMObsUpdatePromptDataAttributes,), + "type": (LLMObsPromptType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsUpdatePromptDataAttributes, type: LLMObsPromptType, **kwargs): + """ + Data object for updating an LLM Observability prompt. + + :param attributes: Attributes for updating an LLM Observability prompt. At least one of ``title`` or ``description`` must be provided; both attributes are optional individually. + :type attributes: LLMObsUpdatePromptDataAttributes + + :param type: Resource type of an LLM Observability prompt. + :type type: LLMObsPromptType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_update_prompt_data_attributes.py b/datadog_api_client/v2/model/llm_obs_update_prompt_data_attributes.py new file mode 100644 index 0000000000..3300508bdb --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_update_prompt_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsUpdatePromptDataAttributes(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "description": (str,), + "title": (str,), + } + attribute_map = { + "description": "description", + "title": "title", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating an LLM Observability prompt. At least one of ``title`` or ``description`` must be provided; both attributes are optional individually. + + :param description: Optional new description for the prompt. + :type description: str, optional + + :param title: Optional new title for the prompt. + :type title: str, optional + """ + if description is not unset: + kwargs["description"] = description + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_update_prompt_request.py b/datadog_api_client/v2/model/llm_obs_update_prompt_request.py new file mode 100644 index 0000000000..c89955ac39 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_update_prompt_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_update_prompt_data import LLMObsUpdatePromptData + +class LLMObsUpdatePromptRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_update_prompt_data import LLMObsUpdatePromptData + return { + "data": (LLMObsUpdatePromptData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsUpdatePromptData, **kwargs): + """ + Request to update an LLM Observability prompt's metadata. + + :param data: Data object for updating an LLM Observability prompt. + :type data: LLMObsUpdatePromptData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_update_prompt_version_data.py b/datadog_api_client/v2/model/llm_obs_update_prompt_version_data.py new file mode 100644 index 0000000000..9d8d7fec9c --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_update_prompt_version_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_update_prompt_version_data_attributes import LLMObsUpdatePromptVersionDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_version_type import LLMObsPromptVersionType + +class LLMObsUpdatePromptVersionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_update_prompt_version_data_attributes import LLMObsUpdatePromptVersionDataAttributes + from datadog_api_client.v2.model.llm_obs_prompt_version_type import LLMObsPromptVersionType + return { + "attributes": (LLMObsUpdatePromptVersionDataAttributes,), + "type": (LLMObsPromptVersionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LLMObsUpdatePromptVersionDataAttributes, type: LLMObsPromptVersionType, **kwargs): + """ + Data object for updating an LLM Observability prompt version. + + :param attributes: Attributes for updating an LLM Observability prompt version. At least one of ``description`` , ``labels`` , or ``env_ids`` must be provided; all three attributes are optional individually. + :type attributes: LLMObsUpdatePromptVersionDataAttributes + + :param type: Resource type of an LLM Observability prompt version. + :type type: LLMObsPromptVersionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/llm_obs_update_prompt_version_data_attributes.py b/datadog_api_client/v2/model/llm_obs_update_prompt_version_data_attributes.py new file mode 100644 index 0000000000..f111ec2edd --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_update_prompt_version_data_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_prompt_version_label import LLMObsPromptVersionLabel + +class LLMObsUpdatePromptVersionDataAttributes(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_prompt_version_label import LLMObsPromptVersionLabel + return { + "description": (str,), + "env_ids": ([str],), + "labels": ([LLMObsPromptVersionLabel],), + } + attribute_map = { + "description": "description", + "env_ids": "env_ids", + "labels": "labels", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, env_ids: Union[List[str], UnsetType]=unset, labels: Union[List[LLMObsPromptVersionLabel], UnsetType]=unset, **kwargs): + """ + Attributes for updating an LLM Observability prompt version. At least one of ``description`` , ``labels`` , or ``env_ids`` must be provided; all three attributes are optional individually. + + :param description: Optional new description for this version. + :type description: str, optional + + :param env_ids: Optional feature-flag environment UUIDs the service attempts to enable and configure to use this version as their default. + :type env_ids: [str], optional + + :param labels: Optional new labels for this version. Do not use this attribute for new integrations. **Deprecated**. + :type labels: [LLMObsPromptVersionLabel], optional + """ + if description is not unset: + kwargs["description"] = description + if env_ids is not unset: + kwargs["env_ids"] = env_ids + if labels is not unset: + kwargs["labels"] = labels + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/llm_obs_update_prompt_version_request.py b/datadog_api_client/v2/model/llm_obs_update_prompt_version_request.py new file mode 100644 index 0000000000..ee65088de4 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_update_prompt_version_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_update_prompt_version_data import LLMObsUpdatePromptVersionData + +class LLMObsUpdatePromptVersionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_update_prompt_version_data import LLMObsUpdatePromptVersionData + return { + "data": (LLMObsUpdatePromptVersionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LLMObsUpdatePromptVersionData, **kwargs): + """ + Request to update an LLM Observability prompt version's metadata or feature-flag environments. + + :param data: Data object for updating an LLM Observability prompt version. + :type data: LLMObsUpdatePromptVersionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/llm_obs_upsert_annotation_item.py b/datadog_api_client/v2/model/llm_obs_upsert_annotation_item.py new file mode 100644 index 0000000000..fe8b233325 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_upsert_annotation_item.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.llm_obs_annotation_label_value import LLMObsAnnotationLabelValue + +class LLMObsUpsertAnnotationItem(ModelNormal): + validations = { + "label_values": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.llm_obs_annotation_label_value import LLMObsAnnotationLabelValue + return { + "interaction_id": (str,), + "label_values": ([LLMObsAnnotationLabelValue],), + } + attribute_map = { + "interaction_id": "interaction_id", + "label_values": "label_values", + } + + def __init__(self_, interaction_id: str, label_values: List[LLMObsAnnotationLabelValue], **kwargs): + """ + A single annotation to create or update. The annotation is matched by + ``interaction_id`` and the requesting user's identity. + + :param interaction_id: ID of the interaction to annotate. + :type interaction_id: str + + :param label_values: Label values for this annotation. Each entry references a label schema by ID + and provides the corresponding value validated against the schema type constraints. + :type label_values: [LLMObsAnnotationLabelValue] + """ + super().__init__(kwargs) + + + self_.interaction_id = interaction_id + self_.label_values = label_values diff --git a/datadog_api_client/v2/model/llm_obs_vertex_ai_metadata.py b/datadog_api_client/v2/model/llm_obs_vertex_ai_metadata.py new file mode 100644 index 0000000000..9c0ce1fb01 --- /dev/null +++ b/datadog_api_client/v2/model/llm_obs_vertex_ai_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LLMObsVertexAIMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "location": (str,), + "project": (str,), + "project_ids": ([str],), + } + attribute_map = { + "location": "location", + "project": "project", + "project_ids": "project_ids", + } + + def __init__(self_, location: Union[str, UnsetType]=unset, project: Union[str, UnsetType]=unset, project_ids: Union[List[str], UnsetType]=unset, **kwargs): + """ + Vertex AI-specific metadata for an integration account or inference request. + + :param location: The Vertex AI region. + :type location: str, optional + + :param project: The Google Cloud project ID. + :type project: str, optional + + :param project_ids: List of Google Cloud project IDs available to the service account. + :type project_ids: [str], optional + """ + if location is not unset: + kwargs["location"] = location + if project is not unset: + kwargs["project"] = project + if project_ids is not unset: + kwargs["project_ids"] = project_ids + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/log.py b/datadog_api_client/v2/model/log.py new file mode 100644 index 0000000000..678156064e --- /dev/null +++ b/datadog_api_client/v2/model/log.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.log_attributes import LogAttributes + from datadog_api_client.v2.model.log_type import LogType + +class Log(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.log_attributes import LogAttributes + from datadog_api_client.v2.model.log_type import LogType + return { + "attributes": (LogAttributes,), + "id": (str,), + "type": (LogType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[LogAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[LogType, UnsetType]=unset, **kwargs): + """ + Object description of a log after being processed and stored by Datadog. + + :param attributes: JSON object containing all log attributes and their associated values. + :type attributes: LogAttributes, optional + + :param id: Unique ID of the Log. + :type id: str, optional + + :param type: Type of the event. + :type type: LogType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/log_attributes.py b/datadog_api_client/v2/model/log_attributes.py new file mode 100644 index 0000000000..47ab568c21 --- /dev/null +++ b/datadog_api_client/v2/model/log_attributes.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "host": (str,), + "message": (str,), + "service": (str,), + "status": (str,), + "tags": ([str],), + "timestamp": (datetime,), + } + attribute_map = { + "attributes": "attributes", + "host": "host", + "message": "message", + "service": "service", + "status": "status", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, host: Union[str, UnsetType]=unset, message: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[datetime, UnsetType]=unset, **kwargs): + """ + JSON object containing all log attributes and their associated values. + + :param attributes: JSON object of attributes from your log. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param host: Name of the machine from where the logs are being sent. + :type host: str, optional + + :param message: The message `reserved attribute `_ + of your log. By default, Datadog ingests the value of the message attribute as the body of the log entry. + That value is then highlighted and displayed in the Logstream, where it is indexed for full text search. + :type message: str, optional + + :param service: The name of the application or service generating the log events. + It is used to switch from Logs to APM, so make sure you define the same + value when you use both products. + :type service: str, optional + + :param status: Status of the message associated with your log. + :type status: str, optional + + :param tags: Array of tags associated with your log. + :type tags: [str], optional + + :param timestamp: Timestamp of your log. + :type timestamp: datetime, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if host is not unset: + kwargs["host"] = host + if message is not unset: + kwargs["message"] = message + if service is not unset: + kwargs["service"] = service + if status is not unset: + kwargs["status"] = status + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/log_type.py b/datadog_api_client/v2/model/log_type.py new file mode 100644 index 0000000000..90b38ac8e0 --- /dev/null +++ b/datadog_api_client/v2/model/log_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogType(ModelSimple): + """ + Type of the event. + + :param value: If omitted defaults to "log". Must be one of ["log"]. + :type value: str + """ + + allowed_values = { + "log", + } + LOG: ClassVar["LogType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogType.LOG = LogType("log") diff --git a/datadog_api_client/v2/model/logs_aggregate_bucket.py b/datadog_api_client/v2/model/logs_aggregate_bucket.py new file mode 100644 index 0000000000..46a657e3bd --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_bucket.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_aggregate_bucket_value import LogsAggregateBucketValue + from datadog_api_client.v2.model.logs_aggregate_bucket_value_timeseries import LogsAggregateBucketValueTimeseries + +class LogsAggregateBucket(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_aggregate_bucket_value import LogsAggregateBucketValue + return { + "by": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "computes": ({str: (LogsAggregateBucketValue,)},), + } + attribute_map = { + "by": "by", + "computes": "computes", + } + + def __init__(self_, by: Union[Dict[str, Any], UnsetType]=unset, computes: Union[Dict[str, Union[LogsAggregateBucketValue, str, float, LogsAggregateBucketValueTimeseries]], UnsetType]=unset, **kwargs): + """ + A bucket values + + :param by: The key, value pairs for each group by + :type by: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param computes: A map of the metric name -> value for regular compute or list of values for a timeseries + :type computes: {str: (LogsAggregateBucketValue,)}, optional + """ + if by is not unset: + kwargs["by"] = by + if computes is not unset: + kwargs["computes"] = computes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_aggregate_bucket_value.py b/datadog_api_client/v2/model/logs_aggregate_bucket_value.py new file mode 100644 index 0000000000..83212d19a3 --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_bucket_value.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsAggregateBucketValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A bucket value, can be either a timeseries or a single value + """ + 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.logs_aggregate_bucket_value_timeseries import LogsAggregateBucketValueTimeseries + return { + "oneOf": [ + str, + float, + LogsAggregateBucketValueTimeseries, + ], + } diff --git a/datadog_api_client/v2/model/logs_aggregate_bucket_value_timeseries.py b/datadog_api_client/v2/model/logs_aggregate_bucket_value_timeseries.py new file mode 100644 index 0000000000..b496d29672 --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_bucket_value_timeseries.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsAggregateBucketValueTimeseries(ModelSimple): + """ + A timeseries array + + + :type value: [LogsAggregateBucketValueTimeseriesPoint] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_aggregate_bucket_value_timeseries_point import LogsAggregateBucketValueTimeseriesPoint + return { + "value": ([LogsAggregateBucketValueTimeseriesPoint],), + } diff --git a/datadog_api_client/v2/model/logs_aggregate_bucket_value_timeseries_point.py b/datadog_api_client/v2/model/logs_aggregate_bucket_value_timeseries_point.py new file mode 100644 index 0000000000..09a638e871 --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_bucket_value_timeseries_point.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsAggregateBucketValueTimeseriesPoint(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time": (str,), + "value": (float,), + } + attribute_map = { + "time": "time", + "value": "value", + } + + def __init__(self_, time: Union[str, UnsetType]=unset, value: Union[float, UnsetType]=unset, **kwargs): + """ + A timeseries point + + :param time: The time value for this point + :type time: str, optional + + :param value: The value for this point + :type value: float, optional + """ + if time is not unset: + kwargs["time"] = time + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_aggregate_request.py b/datadog_api_client/v2/model/logs_aggregate_request.py new file mode 100644 index 0000000000..c559b8e58e --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_request.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_compute import LogsCompute + from datadog_api_client.v2.model.logs_query_filter import LogsQueryFilter + from datadog_api_client.v2.model.logs_group_by import LogsGroupBy + from datadog_api_client.v2.model.logs_query_options import LogsQueryOptions + from datadog_api_client.v2.model.logs_aggregate_request_page import LogsAggregateRequestPage + +class LogsAggregateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_compute import LogsCompute + from datadog_api_client.v2.model.logs_query_filter import LogsQueryFilter + from datadog_api_client.v2.model.logs_group_by import LogsGroupBy + from datadog_api_client.v2.model.logs_query_options import LogsQueryOptions + from datadog_api_client.v2.model.logs_aggregate_request_page import LogsAggregateRequestPage + return { + "compute": ([LogsCompute],), + "filter": (LogsQueryFilter,), + "group_by": ([LogsGroupBy],), + "options": (LogsQueryOptions,), + "page": (LogsAggregateRequestPage,), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + "options": "options", + "page": "page", + } + + def __init__(self_, compute: Union[List[LogsCompute], UnsetType]=unset, filter: Union[LogsQueryFilter, UnsetType]=unset, group_by: Union[List[LogsGroupBy], UnsetType]=unset, options: Union[LogsQueryOptions, UnsetType]=unset, page: Union[LogsAggregateRequestPage, UnsetType]=unset, **kwargs): + """ + The object sent with the request to retrieve a list of logs from your organization. + + :param compute: The list of metrics or timeseries to compute for the retrieved buckets. + :type compute: [LogsCompute], optional + + :param filter: The search and filter query settings + :type filter: LogsQueryFilter, optional + + :param group_by: The rules for the group by + :type group_by: [LogsGroupBy], optional + + :param options: Global query options that are used during the query. + Note: These fields are currently deprecated and do not affect the query results. **Deprecated**. + :type options: LogsQueryOptions, optional + + :param page: Paging settings + :type page: LogsAggregateRequestPage, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_aggregate_request_page.py b/datadog_api_client/v2/model/logs_aggregate_request_page.py new file mode 100644 index 0000000000..c92aeada00 --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_request_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsAggregateRequestPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + } + attribute_map = { + "cursor": "cursor", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, **kwargs): + """ + Paging settings + + :param cursor: The returned paging point to use to get the next results. Note: at most 1000 results can be paged. + :type cursor: str, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_aggregate_response.py b/datadog_api_client/v2/model/logs_aggregate_response.py new file mode 100644 index 0000000000..57fbe5e498 --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_aggregate_response_data import LogsAggregateResponseData + from datadog_api_client.v2.model.logs_response_metadata import LogsResponseMetadata + from datadog_api_client.v2.model.logs_aggregate_bucket_value_timeseries import LogsAggregateBucketValueTimeseries + +class LogsAggregateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_aggregate_response_data import LogsAggregateResponseData + from datadog_api_client.v2.model.logs_response_metadata import LogsResponseMetadata + return { + "data": (LogsAggregateResponseData,), + "meta": (LogsResponseMetadata,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[LogsAggregateResponseData, UnsetType]=unset, meta: Union[LogsResponseMetadata, UnsetType]=unset, **kwargs): + """ + The response object for the logs aggregate API endpoint + + :param data: The query results + :type data: LogsAggregateResponseData, optional + + :param meta: The metadata associated with a request + :type meta: LogsResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_aggregate_response_data.py b/datadog_api_client/v2/model/logs_aggregate_response_data.py new file mode 100644 index 0000000000..f36f0a0738 --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_response_data.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_aggregate_bucket import LogsAggregateBucket + from datadog_api_client.v2.model.logs_aggregate_bucket_value_timeseries import LogsAggregateBucketValueTimeseries + +class LogsAggregateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_aggregate_bucket import LogsAggregateBucket + return { + "buckets": ([LogsAggregateBucket],), + } + attribute_map = { + "buckets": "buckets", + } + + def __init__(self_, buckets: Union[List[LogsAggregateBucket], UnsetType]=unset, **kwargs): + """ + The query results + + :param buckets: The list of matching buckets, one item per bucket + :type buckets: [LogsAggregateBucket], optional + """ + if buckets is not unset: + kwargs["buckets"] = buckets + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_aggregate_response_status.py b/datadog_api_client/v2/model/logs_aggregate_response_status.py new file mode 100644 index 0000000000..3198853bbb --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_response_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsAggregateResponseStatus(ModelSimple): + """ + The status of the response + + :param value: Must be one of ["done", "timeout"]. + :type value: str + """ + + allowed_values = { + "done", + "timeout", + } + DONE: ClassVar["LogsAggregateResponseStatus"] + TIMEOUT: ClassVar["LogsAggregateResponseStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsAggregateResponseStatus.DONE = LogsAggregateResponseStatus("done") +LogsAggregateResponseStatus.TIMEOUT = LogsAggregateResponseStatus("timeout") diff --git a/datadog_api_client/v2/model/logs_aggregate_sort.py b/datadog_api_client/v2/model/logs_aggregate_sort.py new file mode 100644 index 0000000000..fd03ca9dfa --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_aggregation_function import LogsAggregationFunction + from datadog_api_client.v2.model.logs_sort_order import LogsSortOrder + from datadog_api_client.v2.model.logs_aggregate_sort_type import LogsAggregateSortType + +class LogsAggregateSort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_aggregation_function import LogsAggregationFunction + from datadog_api_client.v2.model.logs_sort_order import LogsSortOrder + from datadog_api_client.v2.model.logs_aggregate_sort_type import LogsAggregateSortType + return { + "aggregation": (LogsAggregationFunction,), + "metric": (str,), + "order": (LogsSortOrder,), + "type": (LogsAggregateSortType,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + "order": "order", + "type": "type", + } + + def __init__(self_, aggregation: Union[LogsAggregationFunction, UnsetType]=unset, metric: Union[str, UnsetType]=unset, order: Union[LogsSortOrder, UnsetType]=unset, type: Union[LogsAggregateSortType, UnsetType]=unset, **kwargs): + """ + A sort rule + + :param aggregation: An aggregation function + :type aggregation: LogsAggregationFunction, optional + + :param metric: The metric to sort by (only used for ``type=measure`` ) + :type metric: str, optional + + :param order: The order to use, ascending or descending + :type order: LogsSortOrder, optional + + :param type: The type of sorting algorithm + :type type: LogsAggregateSortType, optional + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if metric is not unset: + kwargs["metric"] = metric + if order is not unset: + kwargs["order"] = order + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_aggregate_sort_type.py b/datadog_api_client/v2/model/logs_aggregate_sort_type.py new file mode 100644 index 0000000000..3458015a79 --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregate_sort_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsAggregateSortType(ModelSimple): + """ + The type of sorting algorithm + + :param value: If omitted defaults to "alphabetical". Must be one of ["alphabetical", "measure"]. + :type value: str + """ + + allowed_values = { + "alphabetical", + "measure", + } + ALPHABETICAL: ClassVar["LogsAggregateSortType"] + MEASURE: ClassVar["LogsAggregateSortType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsAggregateSortType.ALPHABETICAL = LogsAggregateSortType("alphabetical") +LogsAggregateSortType.MEASURE = LogsAggregateSortType("measure") diff --git a/datadog_api_client/v2/model/logs_aggregation_function.py b/datadog_api_client/v2/model/logs_aggregation_function.py new file mode 100644 index 0000000000..c64611b465 --- /dev/null +++ b/datadog_api_client/v2/model/logs_aggregation_function.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsAggregationFunction(ModelSimple): + """ + An aggregation function + + :param value: Must be one of ["count", "cardinality", "pc75", "pc90", "pc95", "pc98", "pc99", "sum", "min", "max", "avg", "median"]. + :type value: str + """ + + allowed_values = { + "count", + "cardinality", + "pc75", + "pc90", + "pc95", + "pc98", + "pc99", + "sum", + "min", + "max", + "avg", + "median", + } + COUNT: ClassVar["LogsAggregationFunction"] + CARDINALITY: ClassVar["LogsAggregationFunction"] + PERCENTILE_75: ClassVar["LogsAggregationFunction"] + PERCENTILE_90: ClassVar["LogsAggregationFunction"] + PERCENTILE_95: ClassVar["LogsAggregationFunction"] + PERCENTILE_98: ClassVar["LogsAggregationFunction"] + PERCENTILE_99: ClassVar["LogsAggregationFunction"] + SUM: ClassVar["LogsAggregationFunction"] + MIN: ClassVar["LogsAggregationFunction"] + MAX: ClassVar["LogsAggregationFunction"] + AVG: ClassVar["LogsAggregationFunction"] + MEDIAN: ClassVar["LogsAggregationFunction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsAggregationFunction.COUNT = LogsAggregationFunction("count") +LogsAggregationFunction.CARDINALITY = LogsAggregationFunction("cardinality") +LogsAggregationFunction.PERCENTILE_75 = LogsAggregationFunction("pc75") +LogsAggregationFunction.PERCENTILE_90 = LogsAggregationFunction("pc90") +LogsAggregationFunction.PERCENTILE_95 = LogsAggregationFunction("pc95") +LogsAggregationFunction.PERCENTILE_98 = LogsAggregationFunction("pc98") +LogsAggregationFunction.PERCENTILE_99 = LogsAggregationFunction("pc99") +LogsAggregationFunction.SUM = LogsAggregationFunction("sum") +LogsAggregationFunction.MIN = LogsAggregationFunction("min") +LogsAggregationFunction.MAX = LogsAggregationFunction("max") +LogsAggregationFunction.AVG = LogsAggregationFunction("avg") +LogsAggregationFunction.MEDIAN = LogsAggregationFunction("median") diff --git a/datadog_api_client/v2/model/logs_archive.py b/datadog_api_client/v2/model/logs_archive.py new file mode 100644 index 0000000000..dbd26a5afd --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_definition import LogsArchiveDefinition + from datadog_api_client.v2.model.logs_archive_destination_azure import LogsArchiveDestinationAzure + from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS + from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 + +class LogsArchive(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_definition import LogsArchiveDefinition + return { + "data": (LogsArchiveDefinition,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[LogsArchiveDefinition, UnsetType]=unset, **kwargs): + """ + The logs archive. + + :param data: The definition of an archive. + :type data: LogsArchiveDefinition, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_archive_attributes.py b/datadog_api_client/v2/model/logs_archive_attributes.py new file mode 100644 index 0000000000..88184b75fd --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_attributes.py @@ -0,0 +1,117 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_attributes_compression_method import LogsArchiveAttributesCompressionMethod + from datadog_api_client.v2.model.logs_archive_destination import LogsArchiveDestination + from datadog_api_client.v2.model.logs_archive_state import LogsArchiveState + from datadog_api_client.v2.model.logs_archive_destination_azure import LogsArchiveDestinationAzure + from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS + from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 + +class LogsArchiveAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_attributes_compression_method import LogsArchiveAttributesCompressionMethod + from datadog_api_client.v2.model.logs_archive_destination import LogsArchiveDestination + from datadog_api_client.v2.model.logs_archive_state import LogsArchiveState + return { + "compression_method": (LogsArchiveAttributesCompressionMethod,), + "destination": (LogsArchiveDestination,), + "include_tags": (bool,), + "lookup_attributes": ([str],), + "name": (str,), + "partitioning_attributes": ([str],), + "query": (str,), + "rehydration_max_scan_size_in_gb": (int, none_type), + "rehydration_tags": ([str],), + "state": (LogsArchiveState,), + } + attribute_map = { + "compression_method": "compression_method", + "destination": "destination", + "include_tags": "include_tags", + "lookup_attributes": "lookup_attributes", + "name": "name", + "partitioning_attributes": "partitioning_attributes", + "query": "query", + "rehydration_max_scan_size_in_gb": "rehydration_max_scan_size_in_gb", + "rehydration_tags": "rehydration_tags", + "state": "state", + } + + def __init__(self_, destination: Union[Union[LogsArchiveDestination, LogsArchiveDestinationAzure, LogsArchiveDestinationGCS, LogsArchiveDestinationS3], none_type], name: str, query: str, compression_method: Union[LogsArchiveAttributesCompressionMethod, UnsetType]=unset, include_tags: Union[bool, UnsetType]=unset, lookup_attributes: Union[List[str], UnsetType]=unset, partitioning_attributes: Union[List[str], UnsetType]=unset, rehydration_max_scan_size_in_gb: Union[int, none_type, UnsetType]=unset, rehydration_tags: Union[List[str], UnsetType]=unset, state: Union[LogsArchiveState, UnsetType]=unset, **kwargs): + """ + The attributes associated with the archive. + + :param compression_method: The type of compression for the archive. + :type compression_method: LogsArchiveAttributesCompressionMethod, optional + + :param destination: An archive's destination. + :type destination: LogsArchiveDestination, none_type + + :param include_tags: To store the tags in the archive, set the value "true". + If it is set to "false", the tags will be deleted when the logs are sent to the archive. + :type include_tags: bool, optional + + :param lookup_attributes: An array of attributes to use as lookup keys for the archive. + :type lookup_attributes: [str], optional + + :param name: The archive name. + :type name: str + + :param partitioning_attributes: An array of attributes to use as partition keys for the archive. The attribute used most frequently for querying should be first. + :type partitioning_attributes: [str], optional + + :param query: The archive query/filter. Logs matching this query are included in the archive. + :type query: str + + :param rehydration_max_scan_size_in_gb: Maximum scan size for rehydration from this archive. + :type rehydration_max_scan_size_in_gb: int, none_type, optional + + :param rehydration_tags: An array of tags to add to rehydrated logs from an archive. + :type rehydration_tags: [str], optional + + :param state: The state of the archive. + :type state: LogsArchiveState, optional + """ + if compression_method is not unset: + kwargs["compression_method"] = compression_method + if include_tags is not unset: + kwargs["include_tags"] = include_tags + if lookup_attributes is not unset: + kwargs["lookup_attributes"] = lookup_attributes + if partitioning_attributes is not unset: + kwargs["partitioning_attributes"] = partitioning_attributes + if rehydration_max_scan_size_in_gb is not unset: + kwargs["rehydration_max_scan_size_in_gb"] = rehydration_max_scan_size_in_gb + if rehydration_tags is not unset: + kwargs["rehydration_tags"] = rehydration_tags + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + + self_.destination = destination + self_.name = name + self_.query = query diff --git a/datadog_api_client/v2/model/logs_archive_attributes_compression_method.py b/datadog_api_client/v2/model/logs_archive_attributes_compression_method.py new file mode 100644 index 0000000000..20eaeb538f --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_attributes_compression_method.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArchiveAttributesCompressionMethod(ModelSimple): + """ + The type of compression for the archive. + + :param value: If omitted defaults to "GZIP". Must be one of ["GZIP", "ZSTD"]. + :type value: str + """ + + allowed_values = { + "GZIP", + "ZSTD", + } + GZIP: ClassVar["LogsArchiveAttributesCompressionMethod"] + ZSTD: ClassVar["LogsArchiveAttributesCompressionMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArchiveAttributesCompressionMethod.GZIP = LogsArchiveAttributesCompressionMethod("GZIP") +LogsArchiveAttributesCompressionMethod.ZSTD = LogsArchiveAttributesCompressionMethod("ZSTD") diff --git a/datadog_api_client/v2/model/logs_archive_create_request.py b/datadog_api_client/v2/model/logs_archive_create_request.py new file mode 100644 index 0000000000..1d21f4f664 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_create_request.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_create_request_definition import LogsArchiveCreateRequestDefinition + from datadog_api_client.v2.model.logs_archive_destination_azure import LogsArchiveDestinationAzure + from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS + from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 + +class LogsArchiveCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_create_request_definition import LogsArchiveCreateRequestDefinition + return { + "data": (LogsArchiveCreateRequestDefinition,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[LogsArchiveCreateRequestDefinition, UnsetType]=unset, **kwargs): + """ + The logs archive. + + :param data: The definition of an archive. + :type data: LogsArchiveCreateRequestDefinition, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_archive_create_request_attributes.py b/datadog_api_client/v2/model/logs_archive_create_request_attributes.py new file mode 100644 index 0000000000..036253e50b --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_create_request_attributes.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_attributes_compression_method import LogsArchiveAttributesCompressionMethod + from datadog_api_client.v2.model.logs_archive_create_request_destination import LogsArchiveCreateRequestDestination + from datadog_api_client.v2.model.logs_archive_destination_azure import LogsArchiveDestinationAzure + from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS + from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 + +class LogsArchiveCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_attributes_compression_method import LogsArchiveAttributesCompressionMethod + from datadog_api_client.v2.model.logs_archive_create_request_destination import LogsArchiveCreateRequestDestination + return { + "compression_method": (LogsArchiveAttributesCompressionMethod,), + "destination": (LogsArchiveCreateRequestDestination,), + "include_tags": (bool,), + "lookup_attributes": ([str],), + "name": (str,), + "partitioning_attributes": ([str],), + "query": (str,), + "rehydration_max_scan_size_in_gb": (int, none_type), + "rehydration_tags": ([str],), + } + attribute_map = { + "compression_method": "compression_method", + "destination": "destination", + "include_tags": "include_tags", + "lookup_attributes": "lookup_attributes", + "name": "name", + "partitioning_attributes": "partitioning_attributes", + "query": "query", + "rehydration_max_scan_size_in_gb": "rehydration_max_scan_size_in_gb", + "rehydration_tags": "rehydration_tags", + } + + def __init__(self_, destination: Union[LogsArchiveCreateRequestDestination, LogsArchiveDestinationAzure, LogsArchiveDestinationGCS, LogsArchiveDestinationS3], name: str, query: str, compression_method: Union[LogsArchiveAttributesCompressionMethod, UnsetType]=unset, include_tags: Union[bool, UnsetType]=unset, lookup_attributes: Union[List[str], UnsetType]=unset, partitioning_attributes: Union[List[str], UnsetType]=unset, rehydration_max_scan_size_in_gb: Union[int, none_type, UnsetType]=unset, rehydration_tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The attributes associated with the archive. + + :param compression_method: The type of compression for the archive. + :type compression_method: LogsArchiveAttributesCompressionMethod, optional + + :param destination: An archive's destination. + :type destination: LogsArchiveCreateRequestDestination + + :param include_tags: To store the tags in the archive, set the value "true". + If it is set to "false", the tags will be deleted when the logs are sent to the archive. + :type include_tags: bool, optional + + :param lookup_attributes: An array of attributes to use as lookup keys for the archive. + :type lookup_attributes: [str], optional + + :param name: The archive name. + :type name: str + + :param partitioning_attributes: An array of attributes to use as partition keys for the archive. The attribute used most frequently for querying should be first. + :type partitioning_attributes: [str], optional + + :param query: The archive query/filter. Logs matching this query are included in the archive. + :type query: str + + :param rehydration_max_scan_size_in_gb: Maximum scan size for rehydration from this archive. + :type rehydration_max_scan_size_in_gb: int, none_type, optional + + :param rehydration_tags: An array of tags to add to rehydrated logs from an archive. + :type rehydration_tags: [str], optional + """ + if compression_method is not unset: + kwargs["compression_method"] = compression_method + if include_tags is not unset: + kwargs["include_tags"] = include_tags + if lookup_attributes is not unset: + kwargs["lookup_attributes"] = lookup_attributes + if partitioning_attributes is not unset: + kwargs["partitioning_attributes"] = partitioning_attributes + if rehydration_max_scan_size_in_gb is not unset: + kwargs["rehydration_max_scan_size_in_gb"] = rehydration_max_scan_size_in_gb + if rehydration_tags is not unset: + kwargs["rehydration_tags"] = rehydration_tags + super().__init__(kwargs) + + + self_.destination = destination + self_.name = name + self_.query = query diff --git a/datadog_api_client/v2/model/logs_archive_create_request_definition.py b/datadog_api_client/v2/model/logs_archive_create_request_definition.py new file mode 100644 index 0000000000..cd72e5f9e0 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_create_request_definition.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_create_request_attributes import LogsArchiveCreateRequestAttributes + from datadog_api_client.v2.model.logs_archive_destination_azure import LogsArchiveDestinationAzure + from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS + from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 + +class LogsArchiveCreateRequestDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_create_request_attributes import LogsArchiveCreateRequestAttributes + return { + "attributes": (LogsArchiveCreateRequestAttributes,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[LogsArchiveCreateRequestAttributes, UnsetType]=unset, **kwargs): + """ + The definition of an archive. + + :param attributes: The attributes associated with the archive. + :type attributes: LogsArchiveCreateRequestAttributes, optional + + :param type: The type of the resource. The value should always be archives. + :type type: str + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + type = kwargs.get("type", "archives") + + + self_.type = type diff --git a/datadog_api_client/v2/model/logs_archive_create_request_destination.py b/datadog_api_client/v2/model/logs_archive_create_request_destination.py new file mode 100644 index 0000000000..f18d847af8 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_create_request_destination.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArchiveCreateRequestDestination(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An archive's destination. + + :param container: The container where the archive will be stored. + :type container: str + + :param integration: The Azure archive's integration destination. + :type integration: LogsArchiveIntegrationAzure + + :param path: The archive path. + :type path: str, optional + + :param region: The region where the archive will be stored. + :type region: str, optional + + :param storage_account: The associated storage account. + :type storage_account: str + + :param type: Type of the Azure archive destination. + :type type: LogsArchiveDestinationAzureType + + :param bucket: The bucket where the archive will be stored. + :type bucket: str + + :param encryption: The S3 encryption settings. + :type encryption: LogsArchiveEncryptionS3, optional + + :param storage_class: The storage class where the archive will be stored. + :type storage_class: LogsArchiveStorageClassS3Type, 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.logs_archive_destination_azure import LogsArchiveDestinationAzure + from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS + from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 + return { + "oneOf": [ + LogsArchiveDestinationAzure, + LogsArchiveDestinationGCS, + LogsArchiveDestinationS3, + ], + } diff --git a/datadog_api_client/v2/model/logs_archive_definition.py b/datadog_api_client/v2/model/logs_archive_definition.py new file mode 100644 index 0000000000..c01cdf35f6 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_definition.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_attributes import LogsArchiveAttributes + from datadog_api_client.v2.model.logs_archive_destination_azure import LogsArchiveDestinationAzure + from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS + from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 + +class LogsArchiveDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_attributes import LogsArchiveAttributes + return { + "attributes": (LogsArchiveAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + "type", + } + + def __init__(self_, attributes: Union[LogsArchiveAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of an archive. + + :param attributes: The attributes associated with the archive. + :type attributes: LogsArchiveAttributes, optional + + :param id: The archive ID. + :type id: str, optional + + :param type: The type of the resource. The value should always be archives. + :type type: str + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + type = kwargs.get("type", "archives") + + + self_.type = type diff --git a/datadog_api_client/v2/model/logs_archive_destination.py b/datadog_api_client/v2/model/logs_archive_destination.py new file mode 100644 index 0000000000..2f2a758dbf --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_destination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArchiveDestination(ModelComposed): + + + _nullable = True + + def __init__(self, **kwargs): + """ + An archive's destination. + + :param container: The container where the archive will be stored. + :type container: str + + :param integration: The Azure archive's integration destination. + :type integration: LogsArchiveIntegrationAzure + + :param path: The archive path. + :type path: str, optional + + :param region: The region where the archive will be stored. + :type region: str, optional + + :param storage_account: The associated storage account. + :type storage_account: str + + :param type: Type of the Azure archive destination. + :type type: LogsArchiveDestinationAzureType + + :param bucket: The bucket where the archive will be stored. + :type bucket: str + + :param encryption: The S3 encryption settings. + :type encryption: LogsArchiveEncryptionS3, optional + + :param storage_class: The storage class where the archive will be stored. + :type storage_class: LogsArchiveStorageClassS3Type, 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.logs_archive_destination_azure import LogsArchiveDestinationAzure + from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS + from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 + return { + "oneOf": [ + LogsArchiveDestinationAzure, + LogsArchiveDestinationGCS, + LogsArchiveDestinationS3, + ], + } diff --git a/datadog_api_client/v2/model/logs_archive_destination_azure.py b/datadog_api_client/v2/model/logs_archive_destination_azure.py new file mode 100644 index 0000000000..fe52c92c9e --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_destination_azure.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_integration_azure import LogsArchiveIntegrationAzure + from datadog_api_client.v2.model.logs_archive_destination_azure_type import LogsArchiveDestinationAzureType + +class LogsArchiveDestinationAzure(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_integration_azure import LogsArchiveIntegrationAzure + from datadog_api_client.v2.model.logs_archive_destination_azure_type import LogsArchiveDestinationAzureType + return { + "container": (str,), + "integration": (LogsArchiveIntegrationAzure,), + "path": (str,), + "region": (str,), + "storage_account": (str,), + "type": (LogsArchiveDestinationAzureType,), + } + attribute_map = { + "container": "container", + "integration": "integration", + "path": "path", + "region": "region", + "storage_account": "storage_account", + "type": "type", + } + + def __init__(self_, container: str, integration: LogsArchiveIntegrationAzure, storage_account: str, type: LogsArchiveDestinationAzureType, path: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, **kwargs): + """ + The Azure archive destination. + + :param container: The container where the archive will be stored. + :type container: str + + :param integration: The Azure archive's integration destination. + :type integration: LogsArchiveIntegrationAzure + + :param path: The archive path. + :type path: str, optional + + :param region: The region where the archive will be stored. + :type region: str, optional + + :param storage_account: The associated storage account. + :type storage_account: str + + :param type: Type of the Azure archive destination. + :type type: LogsArchiveDestinationAzureType + """ + if path is not unset: + kwargs["path"] = path + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + + self_.container = container + self_.integration = integration + self_.storage_account = storage_account + self_.type = type diff --git a/datadog_api_client/v2/model/logs_archive_destination_azure_type.py b/datadog_api_client/v2/model/logs_archive_destination_azure_type.py new file mode 100644 index 0000000000..a22fe83228 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_destination_azure_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArchiveDestinationAzureType(ModelSimple): + """ + Type of the Azure archive destination. + + :param value: If omitted defaults to "azure". Must be one of ["azure"]. + :type value: str + """ + + allowed_values = { + "azure", + } + AZURE: ClassVar["LogsArchiveDestinationAzureType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArchiveDestinationAzureType.AZURE = LogsArchiveDestinationAzureType("azure") diff --git a/datadog_api_client/v2/model/logs_archive_destination_gcs.py b/datadog_api_client/v2/model/logs_archive_destination_gcs.py new file mode 100644 index 0000000000..0da34a5142 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_destination_gcs.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_integration_gcs import LogsArchiveIntegrationGCS + from datadog_api_client.v2.model.logs_archive_destination_gcs_type import LogsArchiveDestinationGCSType + +class LogsArchiveDestinationGCS(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_integration_gcs import LogsArchiveIntegrationGCS + from datadog_api_client.v2.model.logs_archive_destination_gcs_type import LogsArchiveDestinationGCSType + return { + "bucket": (str,), + "integration": (LogsArchiveIntegrationGCS,), + "path": (str,), + "type": (LogsArchiveDestinationGCSType,), + } + attribute_map = { + "bucket": "bucket", + "integration": "integration", + "path": "path", + "type": "type", + } + + def __init__(self_, bucket: str, integration: LogsArchiveIntegrationGCS, type: LogsArchiveDestinationGCSType, path: Union[str, UnsetType]=unset, **kwargs): + """ + The GCS archive destination. + + :param bucket: The bucket where the archive will be stored. + :type bucket: str + + :param integration: The GCS archive's integration destination. + :type integration: LogsArchiveIntegrationGCS + + :param path: The archive path. + :type path: str, optional + + :param type: Type of the GCS archive destination. + :type type: LogsArchiveDestinationGCSType + """ + if path is not unset: + kwargs["path"] = path + super().__init__(kwargs) + + + self_.bucket = bucket + self_.integration = integration + self_.type = type diff --git a/datadog_api_client/v2/model/logs_archive_destination_gcs_type.py b/datadog_api_client/v2/model/logs_archive_destination_gcs_type.py new file mode 100644 index 0000000000..a86a5cf808 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_destination_gcs_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArchiveDestinationGCSType(ModelSimple): + """ + Type of the GCS archive destination. + + :param value: If omitted defaults to "gcs". Must be one of ["gcs"]. + :type value: str + """ + + allowed_values = { + "gcs", + } + GCS: ClassVar["LogsArchiveDestinationGCSType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArchiveDestinationGCSType.GCS = LogsArchiveDestinationGCSType("gcs") diff --git a/datadog_api_client/v2/model/logs_archive_destination_s3.py b/datadog_api_client/v2/model/logs_archive_destination_s3.py new file mode 100644 index 0000000000..5c993f8a4e --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_destination_s3.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_encryption_s3 import LogsArchiveEncryptionS3 + from datadog_api_client.v2.model.logs_archive_integration_s3 import LogsArchiveIntegrationS3 + from datadog_api_client.v2.model.logs_archive_storage_class_s3_type import LogsArchiveStorageClassS3Type + from datadog_api_client.v2.model.logs_archive_destination_s3_type import LogsArchiveDestinationS3Type + from datadog_api_client.v2.model.logs_archive_integration_s3_access_key import LogsArchiveIntegrationS3AccessKey + from datadog_api_client.v2.model.logs_archive_integration_s3_role import LogsArchiveIntegrationS3Role + +class LogsArchiveDestinationS3(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_encryption_s3 import LogsArchiveEncryptionS3 + from datadog_api_client.v2.model.logs_archive_integration_s3 import LogsArchiveIntegrationS3 + from datadog_api_client.v2.model.logs_archive_storage_class_s3_type import LogsArchiveStorageClassS3Type + from datadog_api_client.v2.model.logs_archive_destination_s3_type import LogsArchiveDestinationS3Type + return { + "bucket": (str,), + "encryption": (LogsArchiveEncryptionS3,), + "integration": (LogsArchiveIntegrationS3,), + "path": (str,), + "storage_class": (LogsArchiveStorageClassS3Type,), + "type": (LogsArchiveDestinationS3Type,), + } + attribute_map = { + "bucket": "bucket", + "encryption": "encryption", + "integration": "integration", + "path": "path", + "storage_class": "storage_class", + "type": "type", + } + + def __init__(self_, bucket: str, integration: Union[LogsArchiveIntegrationS3, LogsArchiveIntegrationS3AccessKey, LogsArchiveIntegrationS3Role], type: LogsArchiveDestinationS3Type, encryption: Union[LogsArchiveEncryptionS3, UnsetType]=unset, path: Union[str, UnsetType]=unset, storage_class: Union[LogsArchiveStorageClassS3Type, UnsetType]=unset, **kwargs): + """ + The S3 archive destination. + + :param bucket: The bucket where the archive will be stored. + :type bucket: str + + :param encryption: The S3 encryption settings. + :type encryption: LogsArchiveEncryptionS3, optional + + :param integration: The S3 Archive's integration destination. You must provide one of the following: ``access_key_id`` alone, or both ``account_id`` and ``role_name`` together. + :type integration: LogsArchiveIntegrationS3 + + :param path: The archive path. + :type path: str, optional + + :param storage_class: The storage class where the archive will be stored. + :type storage_class: LogsArchiveStorageClassS3Type, optional + + :param type: Type of the S3 archive destination. + :type type: LogsArchiveDestinationS3Type + """ + if encryption is not unset: + kwargs["encryption"] = encryption + if path is not unset: + kwargs["path"] = path + if storage_class is not unset: + kwargs["storage_class"] = storage_class + super().__init__(kwargs) + + + self_.bucket = bucket + self_.integration = integration + self_.type = type diff --git a/datadog_api_client/v2/model/logs_archive_destination_s3_type.py b/datadog_api_client/v2/model/logs_archive_destination_s3_type.py new file mode 100644 index 0000000000..432624936b --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_destination_s3_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArchiveDestinationS3Type(ModelSimple): + """ + Type of the S3 archive destination. + + :param value: If omitted defaults to "s3". Must be one of ["s3"]. + :type value: str + """ + + allowed_values = { + "s3", + } + S3: ClassVar["LogsArchiveDestinationS3Type"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArchiveDestinationS3Type.S3 = LogsArchiveDestinationS3Type("s3") diff --git a/datadog_api_client/v2/model/logs_archive_encryption_s3.py b/datadog_api_client/v2/model/logs_archive_encryption_s3.py new file mode 100644 index 0000000000..e7d97ed3f5 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_encryption_s3.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_encryption_s3_type import LogsArchiveEncryptionS3Type + +class LogsArchiveEncryptionS3(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_encryption_s3_type import LogsArchiveEncryptionS3Type + return { + "key": (str,), + "type": (LogsArchiveEncryptionS3Type,), + } + attribute_map = { + "key": "key", + "type": "type", + } + + def __init__(self_, type: LogsArchiveEncryptionS3Type, key: Union[str, UnsetType]=unset, **kwargs): + """ + The S3 encryption settings. + + :param key: An Amazon Resource Name (ARN) used to identify an AWS KMS key. + :type key: str, optional + + :param type: Type of S3 encryption for a destination. + :type type: LogsArchiveEncryptionS3Type + """ + if key is not unset: + kwargs["key"] = key + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/logs_archive_encryption_s3_type.py b/datadog_api_client/v2/model/logs_archive_encryption_s3_type.py new file mode 100644 index 0000000000..510de50d7a --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_encryption_s3_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArchiveEncryptionS3Type(ModelSimple): + """ + Type of S3 encryption for a destination. + + :param value: Must be one of ["NO_OVERRIDE", "SSE_S3", "SSE_KMS"]. + :type value: str + """ + + allowed_values = { + "NO_OVERRIDE", + "SSE_S3", + "SSE_KMS", + } + NO_OVERRIDE: ClassVar["LogsArchiveEncryptionS3Type"] + SSE_S3: ClassVar["LogsArchiveEncryptionS3Type"] + SSE_KMS: ClassVar["LogsArchiveEncryptionS3Type"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArchiveEncryptionS3Type.NO_OVERRIDE = LogsArchiveEncryptionS3Type("NO_OVERRIDE") +LogsArchiveEncryptionS3Type.SSE_S3 = LogsArchiveEncryptionS3Type("SSE_S3") +LogsArchiveEncryptionS3Type.SSE_KMS = LogsArchiveEncryptionS3Type("SSE_KMS") diff --git a/datadog_api_client/v2/model/logs_archive_integration_azure.py b/datadog_api_client/v2/model/logs_archive_integration_azure.py new file mode 100644 index 0000000000..a6bfec24d0 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_integration_azure.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArchiveIntegrationAzure(ModelNormal): + @cached_property + def openapi_types(_): + return { + "client_id": (str,), + "tenant_id": (str,), + } + attribute_map = { + "client_id": "client_id", + "tenant_id": "tenant_id", + } + + def __init__(self_, client_id: str, tenant_id: str, **kwargs): + """ + The Azure archive's integration destination. + + :param client_id: A client ID. + :type client_id: str + + :param tenant_id: A tenant ID. + :type tenant_id: str + """ + super().__init__(kwargs) + + + self_.client_id = client_id + self_.tenant_id = tenant_id diff --git a/datadog_api_client/v2/model/logs_archive_integration_gcs.py b/datadog_api_client/v2/model/logs_archive_integration_gcs.py new file mode 100644 index 0000000000..f1711f8415 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_integration_gcs.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArchiveIntegrationGCS(ModelNormal): + @cached_property + def openapi_types(_): + return { + "client_email": (str,), + "project_id": (str,), + } + attribute_map = { + "client_email": "client_email", + "project_id": "project_id", + } + + def __init__(self_, client_email: str, project_id: Union[str, UnsetType]=unset, **kwargs): + """ + The GCS archive's integration destination. + + :param client_email: A client email. + :type client_email: str + + :param project_id: A project ID. + :type project_id: str, optional + """ + if project_id is not unset: + kwargs["project_id"] = project_id + super().__init__(kwargs) + + + self_.client_email = client_email diff --git a/datadog_api_client/v2/model/logs_archive_integration_s3.py b/datadog_api_client/v2/model/logs_archive_integration_s3.py new file mode 100644 index 0000000000..8e832374b5 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_integration_s3.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArchiveIntegrationS3(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The S3 Archive's integration destination. You must provide one of the following: ``access_key_id`` alone, or both ``account_id`` and ``role_name`` together. + + :param access_key_id: The access key ID for the integration. + :type access_key_id: str + + :param account_id: The account ID for the integration. + :type account_id: str + + :param role_name: The name of the role to assume for the integration. + :type role_name: str + """ + 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.logs_archive_integration_s3_access_key import LogsArchiveIntegrationS3AccessKey + from datadog_api_client.v2.model.logs_archive_integration_s3_role import LogsArchiveIntegrationS3Role + return { + "oneOf": [ + LogsArchiveIntegrationS3AccessKey, + LogsArchiveIntegrationS3Role, + ], + } diff --git a/datadog_api_client/v2/model/logs_archive_integration_s3_access_key.py b/datadog_api_client/v2/model/logs_archive_integration_s3_access_key.py new file mode 100644 index 0000000000..bc87ec8e3d --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_integration_s3_access_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArchiveIntegrationS3AccessKey(ModelNormal): + @cached_property + def openapi_types(_): + return { + "access_key_id": (str,), + } + attribute_map = { + "access_key_id": "access_key_id", + } + + def __init__(self_, access_key_id: str, **kwargs): + """ + The S3 Archive's integration destination using an access key. + + :param access_key_id: The access key ID for the integration. + :type access_key_id: str + """ + super().__init__(kwargs) + + + self_.access_key_id = access_key_id diff --git a/datadog_api_client/v2/model/logs_archive_integration_s3_role.py b/datadog_api_client/v2/model/logs_archive_integration_s3_role.py new file mode 100644 index 0000000000..48d47e4d07 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_integration_s3_role.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArchiveIntegrationS3Role(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "role_name": (str,), + } + attribute_map = { + "account_id": "account_id", + "role_name": "role_name", + } + + def __init__(self_, account_id: str, role_name: str, **kwargs): + """ + The S3 Archive's integration destination using an IAM role. + + :param account_id: The account ID for the integration. + :type account_id: str + + :param role_name: The name of the role to assume for the integration. + :type role_name: str + """ + super().__init__(kwargs) + + + self_.account_id = account_id + self_.role_name = role_name diff --git a/datadog_api_client/v2/model/logs_archive_order.py b/datadog_api_client/v2/model/logs_archive_order.py new file mode 100644 index 0000000000..6d2d656871 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_order.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_order_definition import LogsArchiveOrderDefinition + +class LogsArchiveOrder(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_order_definition import LogsArchiveOrderDefinition + return { + "data": (LogsArchiveOrderDefinition,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[LogsArchiveOrderDefinition, UnsetType]=unset, **kwargs): + """ + A ordered list of archive IDs. + + :param data: The definition of an archive order. + :type data: LogsArchiveOrderDefinition, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_archive_order_attributes.py b/datadog_api_client/v2/model/logs_archive_order_attributes.py new file mode 100644 index 0000000000..c4e44b3cae --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_order_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsArchiveOrderAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "archive_ids": ([str],), + } + attribute_map = { + "archive_ids": "archive_ids", + } + + def __init__(self_, archive_ids: List[str], **kwargs): + """ + The attributes associated with the archive order. + + :param archive_ids: An ordered array of ```` strings, the order of archive IDs in the array + define the overall archives order for Datadog. + :type archive_ids: [str] + """ + super().__init__(kwargs) + + + self_.archive_ids = archive_ids diff --git a/datadog_api_client/v2/model/logs_archive_order_definition.py b/datadog_api_client/v2/model/logs_archive_order_definition.py new file mode 100644 index 0000000000..d5985dc17e --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_order_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_order_attributes import LogsArchiveOrderAttributes + from datadog_api_client.v2.model.logs_archive_order_definition_type import LogsArchiveOrderDefinitionType + +class LogsArchiveOrderDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_order_attributes import LogsArchiveOrderAttributes + from datadog_api_client.v2.model.logs_archive_order_definition_type import LogsArchiveOrderDefinitionType + return { + "attributes": (LogsArchiveOrderAttributes,), + "type": (LogsArchiveOrderDefinitionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LogsArchiveOrderAttributes, type: LogsArchiveOrderDefinitionType, **kwargs): + """ + The definition of an archive order. + + :param attributes: The attributes associated with the archive order. + :type attributes: LogsArchiveOrderAttributes + + :param type: Type of the archive order definition. + :type type: LogsArchiveOrderDefinitionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/logs_archive_order_definition_type.py b/datadog_api_client/v2/model/logs_archive_order_definition_type.py new file mode 100644 index 0000000000..0376f9c5c9 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_order_definition_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArchiveOrderDefinitionType(ModelSimple): + """ + Type of the archive order definition. + + :param value: If omitted defaults to "archive_order". Must be one of ["archive_order"]. + :type value: str + """ + + allowed_values = { + "archive_order", + } + ARCHIVE_ORDER: ClassVar["LogsArchiveOrderDefinitionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArchiveOrderDefinitionType.ARCHIVE_ORDER = LogsArchiveOrderDefinitionType("archive_order") diff --git a/datadog_api_client/v2/model/logs_archive_state.py b/datadog_api_client/v2/model/logs_archive_state.py new file mode 100644 index 0000000000..18bc0e43e2 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArchiveState(ModelSimple): + """ + The state of the archive. + + :param value: Must be one of ["UNKNOWN", "WORKING", "FAILING", "WORKING_AUTH_LEGACY"]. + :type value: str + """ + + allowed_values = { + "UNKNOWN", + "WORKING", + "FAILING", + "WORKING_AUTH_LEGACY", + } + UNKNOWN: ClassVar["LogsArchiveState"] + WORKING: ClassVar["LogsArchiveState"] + FAILING: ClassVar["LogsArchiveState"] + WORKING_AUTH_LEGACY: ClassVar["LogsArchiveState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArchiveState.UNKNOWN = LogsArchiveState("UNKNOWN") +LogsArchiveState.WORKING = LogsArchiveState("WORKING") +LogsArchiveState.FAILING = LogsArchiveState("FAILING") +LogsArchiveState.WORKING_AUTH_LEGACY = LogsArchiveState("WORKING_AUTH_LEGACY") diff --git a/datadog_api_client/v2/model/logs_archive_storage_class_s3_type.py b/datadog_api_client/v2/model/logs_archive_storage_class_s3_type.py new file mode 100644 index 0000000000..1f6616f098 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archive_storage_class_s3_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsArchiveStorageClassS3Type(ModelSimple): + """ + The storage class where the archive will be stored. + + :param value: If omitted defaults to "STANDARD". Must be one of ["STANDARD", "STANDARD_IA", "ONEZONE_IA", "INTELLIGENT_TIERING", "GLACIER_IR"]. + :type value: str + """ + + allowed_values = { + "STANDARD", + "STANDARD_IA", + "ONEZONE_IA", + "INTELLIGENT_TIERING", + "GLACIER_IR", + } + STANDARD: ClassVar["LogsArchiveStorageClassS3Type"] + STANDARD_IA: ClassVar["LogsArchiveStorageClassS3Type"] + ONEZONE_IA: ClassVar["LogsArchiveStorageClassS3Type"] + INTELLIGENT_TIERING: ClassVar["LogsArchiveStorageClassS3Type"] + GLACIER_IR: ClassVar["LogsArchiveStorageClassS3Type"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsArchiveStorageClassS3Type.STANDARD = LogsArchiveStorageClassS3Type("STANDARD") +LogsArchiveStorageClassS3Type.STANDARD_IA = LogsArchiveStorageClassS3Type("STANDARD_IA") +LogsArchiveStorageClassS3Type.ONEZONE_IA = LogsArchiveStorageClassS3Type("ONEZONE_IA") +LogsArchiveStorageClassS3Type.INTELLIGENT_TIERING = LogsArchiveStorageClassS3Type("INTELLIGENT_TIERING") +LogsArchiveStorageClassS3Type.GLACIER_IR = LogsArchiveStorageClassS3Type("GLACIER_IR") diff --git a/datadog_api_client/v2/model/logs_archives.py b/datadog_api_client/v2/model/logs_archives.py new file mode 100644 index 0000000000..5114785a31 --- /dev/null +++ b/datadog_api_client/v2/model/logs_archives.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_archive_definition import LogsArchiveDefinition + from datadog_api_client.v2.model.logs_archive_destination_azure import LogsArchiveDestinationAzure + from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS + from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 + +class LogsArchives(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_archive_definition import LogsArchiveDefinition + return { + "data": ([LogsArchiveDefinition],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[LogsArchiveDefinition], UnsetType]=unset, **kwargs): + """ + The available archives. + + :param data: A list of archives. + :type data: [LogsArchiveDefinition], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_compute.py b/datadog_api_client/v2/model/logs_compute.py new file mode 100644 index 0000000000..4d5c08454c --- /dev/null +++ b/datadog_api_client/v2/model/logs_compute.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_aggregation_function import LogsAggregationFunction + from datadog_api_client.v2.model.logs_compute_type import LogsComputeType + +class LogsCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_aggregation_function import LogsAggregationFunction + from datadog_api_client.v2.model.logs_compute_type import LogsComputeType + return { + "aggregation": (LogsAggregationFunction,), + "interval": (str,), + "metric": (str,), + "type": (LogsComputeType,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + "type": "type", + } + + def __init__(self_, aggregation: LogsAggregationFunction, interval: Union[str, UnsetType]=unset, metric: Union[str, UnsetType]=unset, type: Union[LogsComputeType, UnsetType]=unset, **kwargs): + """ + A compute rule to compute metrics or timeseries + + :param aggregation: An aggregation function + :type aggregation: LogsAggregationFunction + + :param interval: The time buckets' size (only used for type=timeseries) + Defaults to a resolution of 150 points + :type interval: str, optional + + :param metric: The metric to use + :type metric: str, optional + + :param type: The type of compute + :type type: LogsComputeType, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v2/model/logs_compute_type.py b/datadog_api_client/v2/model/logs_compute_type.py new file mode 100644 index 0000000000..53c81a03a3 --- /dev/null +++ b/datadog_api_client/v2/model/logs_compute_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsComputeType(ModelSimple): + """ + The type of compute + + :param value: If omitted defaults to "total". Must be one of ["timeseries", "total"]. + :type value: str + """ + + allowed_values = { + "timeseries", + "total", + } + TIMESERIES: ClassVar["LogsComputeType"] + TOTAL: ClassVar["LogsComputeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsComputeType.TIMESERIES = LogsComputeType("timeseries") +LogsComputeType.TOTAL = LogsComputeType("total") diff --git a/datadog_api_client/v2/model/logs_group_by.py b/datadog_api_client/v2/model/logs_group_by.py new file mode 100644 index 0000000000..980b61f621 --- /dev/null +++ b/datadog_api_client/v2/model/logs_group_by.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_group_by_histogram import LogsGroupByHistogram + from datadog_api_client.v2.model.logs_group_by_missing import LogsGroupByMissing + from datadog_api_client.v2.model.logs_aggregate_sort import LogsAggregateSort + from datadog_api_client.v2.model.logs_group_by_total import LogsGroupByTotal + +class LogsGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_group_by_histogram import LogsGroupByHistogram + from datadog_api_client.v2.model.logs_group_by_missing import LogsGroupByMissing + from datadog_api_client.v2.model.logs_aggregate_sort import LogsAggregateSort + from datadog_api_client.v2.model.logs_group_by_total import LogsGroupByTotal + return { + "facet": (str,), + "histogram": (LogsGroupByHistogram,), + "limit": (int,), + "missing": (LogsGroupByMissing,), + "sort": (LogsAggregateSort,), + "total": (LogsGroupByTotal,), + } + attribute_map = { + "facet": "facet", + "histogram": "histogram", + "limit": "limit", + "missing": "missing", + "sort": "sort", + "total": "total", + } + + def __init__(self_, facet: str, histogram: Union[LogsGroupByHistogram, UnsetType]=unset, limit: Union[int, UnsetType]=unset, missing: Union[LogsGroupByMissing, str, float, UnsetType]=unset, sort: Union[LogsAggregateSort, UnsetType]=unset, total: Union[LogsGroupByTotal, bool, str, float, UnsetType]=unset, **kwargs): + """ + A group by rule + + :param facet: The name of the facet to use (required) + :type facet: str + + :param histogram: Used to perform a histogram computation (only for measure facets). + Note: at most 100 buckets are allowed, the number of buckets is (max - min)/interval. + :type histogram: LogsGroupByHistogram, optional + + :param limit: The maximum buckets to return for this group by. Note: at most 10000 buckets are allowed. + If grouping by multiple facets, the product of limits must not exceed 10000. + :type limit: int, optional + + :param missing: The value to use for logs that don't have the facet used to group by + :type missing: LogsGroupByMissing, optional + + :param sort: A sort rule + :type sort: LogsAggregateSort, optional + + :param total: A resulting object to put the given computes in over all the matching records. + :type total: LogsGroupByTotal, optional + """ + if histogram is not unset: + kwargs["histogram"] = histogram + if limit is not unset: + kwargs["limit"] = limit + if missing is not unset: + kwargs["missing"] = missing + if sort is not unset: + kwargs["sort"] = sort + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v2/model/logs_group_by_histogram.py b/datadog_api_client/v2/model/logs_group_by_histogram.py new file mode 100644 index 0000000000..6ff580cedb --- /dev/null +++ b/datadog_api_client/v2/model/logs_group_by_histogram.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsGroupByHistogram(ModelNormal): + @cached_property + def openapi_types(_): + return { + "interval": (float,), + "max": (float,), + "min": (float,), + } + attribute_map = { + "interval": "interval", + "max": "max", + "min": "min", + } + + def __init__(self_, interval: float, max: float, min: float, **kwargs): + """ + Used to perform a histogram computation (only for measure facets). + Note: at most 100 buckets are allowed, the number of buckets is (max - min)/interval. + + :param interval: The bin size of the histogram buckets + :type interval: float + + :param max: The maximum value for the measure used in the histogram + (values greater than this one are filtered out) + :type max: float + + :param min: The minimum value for the measure used in the histogram + (values smaller than this one are filtered out) + :type min: float + """ + super().__init__(kwargs) + + + self_.interval = interval + self_.max = max + self_.min = min diff --git a/datadog_api_client/v2/model/logs_group_by_missing.py b/datadog_api_client/v2/model/logs_group_by_missing.py new file mode 100644 index 0000000000..c4cbf83b98 --- /dev/null +++ b/datadog_api_client/v2/model/logs_group_by_missing.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsGroupByMissing(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The value to use for logs that don't have the facet used to group by + """ + 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 + return { + "oneOf": [ + str, + float, + ], + } diff --git a/datadog_api_client/v2/model/logs_group_by_total.py b/datadog_api_client/v2/model/logs_group_by_total.py new file mode 100644 index 0000000000..95a0f8a0fe --- /dev/null +++ b/datadog_api_client/v2/model/logs_group_by_total.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsGroupByTotal(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A resulting object to put the given computes in over all the matching records. + """ + 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 + return { + "oneOf": [ + bool, + str, + float, + ], + } diff --git a/datadog_api_client/v2/model/logs_list_request.py b/datadog_api_client/v2/model/logs_list_request.py new file mode 100644 index 0000000000..05ddf21ece --- /dev/null +++ b/datadog_api_client/v2/model/logs_list_request.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_query_filter import LogsQueryFilter + from datadog_api_client.v2.model.logs_query_options import LogsQueryOptions + from datadog_api_client.v2.model.logs_list_request_page import LogsListRequestPage + from datadog_api_client.v2.model.logs_sort import LogsSort + +class LogsListRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_query_filter import LogsQueryFilter + from datadog_api_client.v2.model.logs_query_options import LogsQueryOptions + from datadog_api_client.v2.model.logs_list_request_page import LogsListRequestPage + from datadog_api_client.v2.model.logs_sort import LogsSort + return { + "filter": (LogsQueryFilter,), + "options": (LogsQueryOptions,), + "page": (LogsListRequestPage,), + "sort": (LogsSort,), + } + attribute_map = { + "filter": "filter", + "options": "options", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[LogsQueryFilter, UnsetType]=unset, options: Union[LogsQueryOptions, UnsetType]=unset, page: Union[LogsListRequestPage, UnsetType]=unset, sort: Union[LogsSort, UnsetType]=unset, **kwargs): + """ + The request for a logs list. + + :param filter: The search and filter query settings + :type filter: LogsQueryFilter, optional + + :param options: Global query options that are used during the query. + Note: These fields are currently deprecated and do not affect the query results. **Deprecated**. + :type options: LogsQueryOptions, optional + + :param page: Paging attributes for listing logs. + :type page: LogsListRequestPage, optional + + :param sort: Sort parameters when querying logs. + :type sort: LogsSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_list_request_page.py b/datadog_api_client/v2/model/logs_list_request_page.py new file mode 100644 index 0000000000..9a391a9f3a --- /dev/null +++ b/datadog_api_client/v2/model/logs_list_request_page.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsListRequestPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Paging attributes for listing logs. + + :param cursor: List following results with a cursor provided in the previous query. + :type cursor: str, optional + + :param limit: Maximum number of logs in the response. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_list_response.py b/datadog_api_client/v2/model/logs_list_response.py new file mode 100644 index 0000000000..832f3edc6a --- /dev/null +++ b/datadog_api_client/v2/model/logs_list_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.log import Log + from datadog_api_client.v2.model.logs_list_response_links import LogsListResponseLinks + from datadog_api_client.v2.model.logs_response_metadata import LogsResponseMetadata + +class LogsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.log import Log + from datadog_api_client.v2.model.logs_list_response_links import LogsListResponseLinks + from datadog_api_client.v2.model.logs_response_metadata import LogsResponseMetadata + return { + "data": ([Log],), + "links": (LogsListResponseLinks,), + "meta": (LogsResponseMetadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[Log], UnsetType]=unset, links: Union[LogsListResponseLinks, UnsetType]=unset, meta: Union[LogsResponseMetadata, UnsetType]=unset, **kwargs): + """ + Response object with all logs matching the request and pagination information. + + :param data: Array of logs matching the request. + :type data: [Log], optional + + :param links: Links attributes. + :type links: LogsListResponseLinks, optional + + :param meta: The metadata associated with a request + :type meta: LogsResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_list_response_links.py b/datadog_api_client/v2/model/logs_list_response_links.py new file mode 100644 index 0000000000..a56e67e6a0 --- /dev/null +++ b/datadog_api_client/v2/model/logs_list_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsListResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param next: Link for the next set of results. Note that the request can also be made using the + POST endpoint. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_compute.py b/datadog_api_client/v2/model/logs_metric_compute.py new file mode 100644 index 0000000000..a924423922 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_compute.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_compute_aggregation_type import LogsMetricComputeAggregationType + +class LogsMetricCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_compute_aggregation_type import LogsMetricComputeAggregationType + return { + "aggregation_type": (LogsMetricComputeAggregationType,), + "include_percentiles": (bool,), + "path": (str,), + } + attribute_map = { + "aggregation_type": "aggregation_type", + "include_percentiles": "include_percentiles", + "path": "path", + } + + def __init__(self_, aggregation_type: LogsMetricComputeAggregationType, include_percentiles: Union[bool, UnsetType]=unset, path: Union[str, UnsetType]=unset, **kwargs): + """ + The compute rule to compute the log-based metric. + + :param aggregation_type: The type of aggregation to use. + :type aggregation_type: LogsMetricComputeAggregationType + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when the ``aggregation_type`` is ``distribution``. + :type include_percentiles: bool, optional + + :param path: The path to the value the log-based metric will aggregate on (only used if the aggregation type is a "distribution"). + :type path: str, optional + """ + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + if path is not unset: + kwargs["path"] = path + super().__init__(kwargs) + + + self_.aggregation_type = aggregation_type diff --git a/datadog_api_client/v2/model/logs_metric_compute_aggregation_type.py b/datadog_api_client/v2/model/logs_metric_compute_aggregation_type.py new file mode 100644 index 0000000000..0a6e7f0d6e --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_compute_aggregation_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsMetricComputeAggregationType(ModelSimple): + """ + The type of aggregation to use. + + :param value: Must be one of ["count", "distribution"]. + :type value: str + """ + + allowed_values = { + "count", + "distribution", + } + COUNT: ClassVar["LogsMetricComputeAggregationType"] + DISTRIBUTION: ClassVar["LogsMetricComputeAggregationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsMetricComputeAggregationType.COUNT = LogsMetricComputeAggregationType("count") +LogsMetricComputeAggregationType.DISTRIBUTION = LogsMetricComputeAggregationType("distribution") diff --git a/datadog_api_client/v2/model/logs_metric_create_attributes.py b/datadog_api_client/v2/model/logs_metric_create_attributes.py new file mode 100644 index 0000000000..fd09ca7157 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_create_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_compute import LogsMetricCompute + from datadog_api_client.v2.model.logs_metric_filter import LogsMetricFilter + from datadog_api_client.v2.model.logs_metric_group_by import LogsMetricGroupBy + +class LogsMetricCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_compute import LogsMetricCompute + from datadog_api_client.v2.model.logs_metric_filter import LogsMetricFilter + from datadog_api_client.v2.model.logs_metric_group_by import LogsMetricGroupBy + return { + "compute": (LogsMetricCompute,), + "filter": (LogsMetricFilter,), + "group_by": ([LogsMetricGroupBy],), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + } + + def __init__(self_, compute: LogsMetricCompute, filter: Union[LogsMetricFilter, UnsetType]=unset, group_by: Union[List[LogsMetricGroupBy], UnsetType]=unset, **kwargs): + """ + The object describing the Datadog log-based metric to create. + + :param compute: The compute rule to compute the log-based metric. + :type compute: LogsMetricCompute + + :param filter: The log-based metric filter. Logs matching this filter will be aggregated in this metric. + :type filter: LogsMetricFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [LogsMetricGroupBy], optional + """ + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + + self_.compute = compute diff --git a/datadog_api_client/v2/model/logs_metric_create_data.py b/datadog_api_client/v2/model/logs_metric_create_data.py new file mode 100644 index 0000000000..4784480c78 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_create_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_create_attributes import LogsMetricCreateAttributes + from datadog_api_client.v2.model.logs_metric_type import LogsMetricType + +class LogsMetricCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_create_attributes import LogsMetricCreateAttributes + from datadog_api_client.v2.model.logs_metric_type import LogsMetricType + return { + "attributes": (LogsMetricCreateAttributes,), + "id": (str,), + "type": (LogsMetricType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: LogsMetricCreateAttributes, id: str, type: LogsMetricType, **kwargs): + """ + The new log-based metric properties. + + :param attributes: The object describing the Datadog log-based metric to create. + :type attributes: LogsMetricCreateAttributes + + :param id: The name of the log-based metric. + :type id: str + + :param type: The type of the resource. The value should always be logs_metrics. + :type type: LogsMetricType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/logs_metric_create_request.py b/datadog_api_client/v2/model/logs_metric_create_request.py new file mode 100644 index 0000000000..24519886c0 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_create_data import LogsMetricCreateData + +class LogsMetricCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_create_data import LogsMetricCreateData + return { + "data": (LogsMetricCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LogsMetricCreateData, **kwargs): + """ + The new log-based metric body. + + :param data: The new log-based metric properties. + :type data: LogsMetricCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/logs_metric_filter.py b/datadog_api_client/v2/model/logs_metric_filter.py new file mode 100644 index 0000000000..0a05dab978 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsMetricFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + The log-based metric filter. Logs matching this filter will be aggregated in this metric. + + :param query: The search query - following the log search syntax. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_group_by.py b/datadog_api_client/v2/model/logs_metric_group_by.py new file mode 100644 index 0000000000..a67d69f13a --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_group_by.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsMetricGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "path": (str,), + "tag_name": (str,), + } + attribute_map = { + "path": "path", + "tag_name": "tag_name", + } + + def __init__(self_, path: str, tag_name: Union[str, UnsetType]=unset, **kwargs): + """ + A group by rule. + + :param path: The path to the value the log-based metric will be aggregated over. + :type path: str + + :param tag_name: Eventual name of the tag that gets created. By default, the path attribute is used as the tag name. + :type tag_name: str, optional + """ + if tag_name is not unset: + kwargs["tag_name"] = tag_name + super().__init__(kwargs) + + + self_.path = path diff --git a/datadog_api_client/v2/model/logs_metric_response.py b/datadog_api_client/v2/model/logs_metric_response.py new file mode 100644 index 0000000000..c1269b4017 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_response_data import LogsMetricResponseData + +class LogsMetricResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_response_data import LogsMetricResponseData + return { + "data": (LogsMetricResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[LogsMetricResponseData, UnsetType]=unset, **kwargs): + """ + The log-based metric object. + + :param data: The log-based metric properties. + :type data: LogsMetricResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_response_attributes.py b/datadog_api_client/v2/model/logs_metric_response_attributes.py new file mode 100644 index 0000000000..60f1b78f1d --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_response_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_response_compute import LogsMetricResponseCompute + from datadog_api_client.v2.model.logs_metric_response_filter import LogsMetricResponseFilter + from datadog_api_client.v2.model.logs_metric_response_group_by import LogsMetricResponseGroupBy + +class LogsMetricResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_response_compute import LogsMetricResponseCompute + from datadog_api_client.v2.model.logs_metric_response_filter import LogsMetricResponseFilter + from datadog_api_client.v2.model.logs_metric_response_group_by import LogsMetricResponseGroupBy + return { + "compute": (LogsMetricResponseCompute,), + "filter": (LogsMetricResponseFilter,), + "group_by": ([LogsMetricResponseGroupBy],), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + } + + def __init__(self_, compute: Union[LogsMetricResponseCompute, UnsetType]=unset, filter: Union[LogsMetricResponseFilter, UnsetType]=unset, group_by: Union[List[LogsMetricResponseGroupBy], UnsetType]=unset, **kwargs): + """ + The object describing a Datadog log-based metric. + + :param compute: The compute rule to compute the log-based metric. + :type compute: LogsMetricResponseCompute, optional + + :param filter: The log-based metric filter. Logs matching this filter will be aggregated in this metric. + :type filter: LogsMetricResponseFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [LogsMetricResponseGroupBy], optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_response_compute.py b/datadog_api_client/v2/model/logs_metric_response_compute.py new file mode 100644 index 0000000000..a2162cf3d6 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_response_compute.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_response_compute_aggregation_type import LogsMetricResponseComputeAggregationType + +class LogsMetricResponseCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_response_compute_aggregation_type import LogsMetricResponseComputeAggregationType + return { + "aggregation_type": (LogsMetricResponseComputeAggregationType,), + "include_percentiles": (bool,), + "path": (str,), + } + attribute_map = { + "aggregation_type": "aggregation_type", + "include_percentiles": "include_percentiles", + "path": "path", + } + + def __init__(self_, aggregation_type: Union[LogsMetricResponseComputeAggregationType, UnsetType]=unset, include_percentiles: Union[bool, UnsetType]=unset, path: Union[str, UnsetType]=unset, **kwargs): + """ + The compute rule to compute the log-based metric. + + :param aggregation_type: The type of aggregation to use. + :type aggregation_type: LogsMetricResponseComputeAggregationType, optional + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when the ``aggregation_type`` is ``distribution``. + :type include_percentiles: bool, optional + + :param path: The path to the value the log-based metric will aggregate on (only used if the aggregation type is a "distribution"). + :type path: str, optional + """ + if aggregation_type is not unset: + kwargs["aggregation_type"] = aggregation_type + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + if path is not unset: + kwargs["path"] = path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_response_compute_aggregation_type.py b/datadog_api_client/v2/model/logs_metric_response_compute_aggregation_type.py new file mode 100644 index 0000000000..bdab5f0684 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_response_compute_aggregation_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsMetricResponseComputeAggregationType(ModelSimple): + """ + The type of aggregation to use. + + :param value: Must be one of ["count", "distribution"]. + :type value: str + """ + + allowed_values = { + "count", + "distribution", + } + COUNT: ClassVar["LogsMetricResponseComputeAggregationType"] + DISTRIBUTION: ClassVar["LogsMetricResponseComputeAggregationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsMetricResponseComputeAggregationType.COUNT = LogsMetricResponseComputeAggregationType("count") +LogsMetricResponseComputeAggregationType.DISTRIBUTION = LogsMetricResponseComputeAggregationType("distribution") diff --git a/datadog_api_client/v2/model/logs_metric_response_data.py b/datadog_api_client/v2/model/logs_metric_response_data.py new file mode 100644 index 0000000000..a560d958c3 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_response_attributes import LogsMetricResponseAttributes + from datadog_api_client.v2.model.logs_metric_type import LogsMetricType + +class LogsMetricResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_response_attributes import LogsMetricResponseAttributes + from datadog_api_client.v2.model.logs_metric_type import LogsMetricType + return { + "attributes": (LogsMetricResponseAttributes,), + "id": (str,), + "type": (LogsMetricType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[LogsMetricResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[LogsMetricType, UnsetType]=unset, **kwargs): + """ + The log-based metric properties. + + :param attributes: The object describing a Datadog log-based metric. + :type attributes: LogsMetricResponseAttributes, optional + + :param id: The name of the log-based metric. + :type id: str, optional + + :param type: The type of the resource. The value should always be logs_metrics. + :type type: LogsMetricType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_response_filter.py b/datadog_api_client/v2/model/logs_metric_response_filter.py new file mode 100644 index 0000000000..c8d13c405d --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_response_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsMetricResponseFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + The log-based metric filter. Logs matching this filter will be aggregated in this metric. + + :param query: The search query - following the log search syntax. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_response_group_by.py b/datadog_api_client/v2/model/logs_metric_response_group_by.py new file mode 100644 index 0000000000..3b3ecca343 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_response_group_by.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsMetricResponseGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "path": (str,), + "tag_name": (str,), + } + attribute_map = { + "path": "path", + "tag_name": "tag_name", + } + + def __init__(self_, path: Union[str, UnsetType]=unset, tag_name: Union[str, UnsetType]=unset, **kwargs): + """ + A group by rule. + + :param path: The path to the value the log-based metric will be aggregated over. + :type path: str, optional + + :param tag_name: Eventual name of the tag that gets created. By default, the path attribute is used as the tag name. + :type tag_name: str, optional + """ + if path is not unset: + kwargs["path"] = path + if tag_name is not unset: + kwargs["tag_name"] = tag_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_type.py b/datadog_api_client/v2/model/logs_metric_type.py new file mode 100644 index 0000000000..ba68065c07 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsMetricType(ModelSimple): + """ + The type of the resource. The value should always be logs_metrics. + + :param value: If omitted defaults to "logs_metrics". Must be one of ["logs_metrics"]. + :type value: str + """ + + allowed_values = { + "logs_metrics", + } + LOGS_METRICS: ClassVar["LogsMetricType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsMetricType.LOGS_METRICS = LogsMetricType("logs_metrics") diff --git a/datadog_api_client/v2/model/logs_metric_update_attributes.py b/datadog_api_client/v2/model/logs_metric_update_attributes.py new file mode 100644 index 0000000000..94161e12cb --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_update_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_update_compute import LogsMetricUpdateCompute + from datadog_api_client.v2.model.logs_metric_filter import LogsMetricFilter + from datadog_api_client.v2.model.logs_metric_group_by import LogsMetricGroupBy + +class LogsMetricUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_update_compute import LogsMetricUpdateCompute + from datadog_api_client.v2.model.logs_metric_filter import LogsMetricFilter + from datadog_api_client.v2.model.logs_metric_group_by import LogsMetricGroupBy + return { + "compute": (LogsMetricUpdateCompute,), + "filter": (LogsMetricFilter,), + "group_by": ([LogsMetricGroupBy],), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + } + + def __init__(self_, compute: Union[LogsMetricUpdateCompute, UnsetType]=unset, filter: Union[LogsMetricFilter, UnsetType]=unset, group_by: Union[List[LogsMetricGroupBy], UnsetType]=unset, **kwargs): + """ + The log-based metric properties that will be updated. + + :param compute: The compute rule to compute the log-based metric. + :type compute: LogsMetricUpdateCompute, optional + + :param filter: The log-based metric filter. Logs matching this filter will be aggregated in this metric. + :type filter: LogsMetricFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [LogsMetricGroupBy], optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_update_compute.py b/datadog_api_client/v2/model/logs_metric_update_compute.py new file mode 100644 index 0000000000..7172f30aeb --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_update_compute.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsMetricUpdateCompute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_percentiles": (bool,), + } + attribute_map = { + "include_percentiles": "include_percentiles", + } + + def __init__(self_, include_percentiles: Union[bool, UnsetType]=unset, **kwargs): + """ + The compute rule to compute the log-based metric. + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when the ``aggregation_type`` is ``distribution``. + :type include_percentiles: bool, optional + """ + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_metric_update_data.py b/datadog_api_client/v2/model/logs_metric_update_data.py new file mode 100644 index 0000000000..fc5a289e99 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_update_attributes import LogsMetricUpdateAttributes + from datadog_api_client.v2.model.logs_metric_type import LogsMetricType + +class LogsMetricUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_update_attributes import LogsMetricUpdateAttributes + from datadog_api_client.v2.model.logs_metric_type import LogsMetricType + return { + "attributes": (LogsMetricUpdateAttributes,), + "type": (LogsMetricType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: LogsMetricUpdateAttributes, type: LogsMetricType, **kwargs): + """ + The new log-based metric properties. + + :param attributes: The log-based metric properties that will be updated. + :type attributes: LogsMetricUpdateAttributes + + :param type: The type of the resource. The value should always be logs_metrics. + :type type: LogsMetricType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/logs_metric_update_request.py b/datadog_api_client/v2/model/logs_metric_update_request.py new file mode 100644 index 0000000000..7de64c2110 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metric_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_update_data import LogsMetricUpdateData + +class LogsMetricUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_update_data import LogsMetricUpdateData + return { + "data": (LogsMetricUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: LogsMetricUpdateData, **kwargs): + """ + The new log-based metric body. + + :param data: The new log-based metric properties. + :type data: LogsMetricUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/logs_metrics_response.py b/datadog_api_client/v2/model/logs_metrics_response.py new file mode 100644 index 0000000000..3450a7bff8 --- /dev/null +++ b/datadog_api_client/v2/model/logs_metrics_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_metric_response_data import LogsMetricResponseData + +class LogsMetricsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_metric_response_data import LogsMetricResponseData + return { + "data": ([LogsMetricResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[LogsMetricResponseData], UnsetType]=unset, **kwargs): + """ + All the available log-based metric objects. + + :param data: A list of log-based metric objects. + :type data: [LogsMetricResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_query_filter.py b/datadog_api_client/v2/model/logs_query_filter.py new file mode 100644 index 0000000000..488ba776a4 --- /dev/null +++ b/datadog_api_client/v2/model/logs_query_filter.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_storage_tier import LogsStorageTier + +class LogsQueryFilter(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_storage_tier import LogsStorageTier + return { + "_from": (str,), + "indexes": ([str],), + "query": (str,), + "storage_tier": (LogsStorageTier,), + "to": (str,), + } + attribute_map = { + "_from": "from", + "indexes": "indexes", + "query": "query", + "storage_tier": "storage_tier", + "to": "to", + } + + def __init__(self_, _from: Union[str, UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, query: Union[str, UnsetType]=unset, storage_tier: Union[LogsStorageTier, UnsetType]=unset, to: Union[str, UnsetType]=unset, **kwargs): + """ + The search and filter query settings + + :param _from: The minimum time for the requested logs, supports date math and regular timestamps (milliseconds). + :type _from: str, optional + + :param indexes: For customers with multiple indexes, the indexes to search. Defaults to ['*'] which means all indexes. + :type indexes: [str], optional + + :param query: The search query - following the log search syntax. + :type query: str, optional + + :param storage_tier: Specifies storage type as indexes, online-archives or flex + :type storage_tier: LogsStorageTier, optional + + :param to: The maximum time for the requested logs, supports date math and regular timestamps (milliseconds). + :type to: str, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if indexes is not unset: + kwargs["indexes"] = indexes + if query is not unset: + kwargs["query"] = query + if storage_tier is not unset: + kwargs["storage_tier"] = storage_tier + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_query_options.py b/datadog_api_client/v2/model/logs_query_options.py new file mode 100644 index 0000000000..f9611d5cb7 --- /dev/null +++ b/datadog_api_client/v2/model/logs_query_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsQueryOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time_offset": (int,), + "timezone": (str,), + } + attribute_map = { + "time_offset": "timeOffset", + "timezone": "timezone", + } + + def __init__(self_, time_offset: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Global query options that are used during the query. + Note: These fields are currently deprecated and do not affect the query results. + + :param time_offset: The time offset (in seconds) to apply to the query. + :type time_offset: int, optional + + :param timezone: The timezone can be specified as GMT, UTC, an offset from UTC (like UTC+1), or as a Timezone Database identifier (like America/New_York). + :type timezone: str, optional + """ + if time_offset is not unset: + kwargs["time_offset"] = time_offset + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_response_metadata.py b/datadog_api_client/v2/model/logs_response_metadata.py new file mode 100644 index 0000000000..97337d7ace --- /dev/null +++ b/datadog_api_client/v2/model/logs_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.logs_response_metadata_page import LogsResponseMetadataPage + from datadog_api_client.v2.model.logs_aggregate_response_status import LogsAggregateResponseStatus + from datadog_api_client.v2.model.logs_warning import LogsWarning + +class LogsResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.logs_response_metadata_page import LogsResponseMetadataPage + from datadog_api_client.v2.model.logs_aggregate_response_status import LogsAggregateResponseStatus + from datadog_api_client.v2.model.logs_warning import LogsWarning + return { + "elapsed": (int,), + "page": (LogsResponseMetadataPage,), + "request_id": (str,), + "status": (LogsAggregateResponseStatus,), + "warnings": ([LogsWarning],), + } + attribute_map = { + "elapsed": "elapsed", + "page": "page", + "request_id": "request_id", + "status": "status", + "warnings": "warnings", + } + + def __init__(self_, elapsed: Union[int, UnsetType]=unset, page: Union[LogsResponseMetadataPage, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, status: Union[LogsAggregateResponseStatus, UnsetType]=unset, warnings: Union[List[LogsWarning], UnsetType]=unset, **kwargs): + """ + The metadata associated with a request + + :param elapsed: The time elapsed in milliseconds + :type elapsed: int, optional + + :param page: Paging attributes. + :type page: LogsResponseMetadataPage, optional + + :param request_id: The identifier of the request + :type request_id: str, optional + + :param status: The status of the response + :type status: LogsAggregateResponseStatus, optional + + :param warnings: A list of warnings (non fatal errors) encountered, partial results might be returned if + warnings are present in the response. + :type warnings: [LogsWarning], optional + """ + if elapsed is not unset: + kwargs["elapsed"] = elapsed + if page is not unset: + kwargs["page"] = page + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_response_metadata_page.py b/datadog_api_client/v2/model/logs_response_metadata_page.py new file mode 100644 index 0000000000..4cfd325dbe --- /dev/null +++ b/datadog_api_client/v2/model/logs_response_metadata_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsResponseMetadataPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str,), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param after: The cursor to use to get the next results, if any. To make the next request, use the same + parameters with the addition of the ``page[cursor]``. + :type after: str, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/logs_restriction_queries_type.py b/datadog_api_client/v2/model/logs_restriction_queries_type.py new file mode 100644 index 0000000000..3c1914a591 --- /dev/null +++ b/datadog_api_client/v2/model/logs_restriction_queries_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsRestrictionQueriesType(ModelSimple): + """ + Restriction query resource type. + + :param value: If omitted defaults to "logs_restriction_queries". Must be one of ["logs_restriction_queries"]. + :type value: str + """ + + allowed_values = { + "logs_restriction_queries", + } + LOGS_RESTRICTION_QUERIES: ClassVar["LogsRestrictionQueriesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsRestrictionQueriesType.LOGS_RESTRICTION_QUERIES = LogsRestrictionQueriesType("logs_restriction_queries") diff --git a/datadog_api_client/v2/model/logs_sort.py b/datadog_api_client/v2/model/logs_sort.py new file mode 100644 index 0000000000..db54af5544 --- /dev/null +++ b/datadog_api_client/v2/model/logs_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsSort(ModelSimple): + """ + Sort parameters when querying logs. + + :param value: Must be one of ["timestamp", "-timestamp"]. + :type value: str + """ + + allowed_values = { + "timestamp", + "-timestamp", + } + TIMESTAMP_ASCENDING: ClassVar["LogsSort"] + TIMESTAMP_DESCENDING: ClassVar["LogsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsSort.TIMESTAMP_ASCENDING = LogsSort("timestamp") +LogsSort.TIMESTAMP_DESCENDING = LogsSort("-timestamp") diff --git a/datadog_api_client/v2/model/logs_sort_order.py b/datadog_api_client/v2/model/logs_sort_order.py new file mode 100644 index 0000000000..2c6bb2e5f1 --- /dev/null +++ b/datadog_api_client/v2/model/logs_sort_order.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsSortOrder(ModelSimple): + """ + The order to use, ascending or descending + + :param value: Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + ASCENDING: ClassVar["LogsSortOrder"] + DESCENDING: ClassVar["LogsSortOrder"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsSortOrder.ASCENDING = LogsSortOrder("asc") +LogsSortOrder.DESCENDING = LogsSortOrder("desc") diff --git a/datadog_api_client/v2/model/logs_storage_tier.py b/datadog_api_client/v2/model/logs_storage_tier.py new file mode 100644 index 0000000000..a1c92179a4 --- /dev/null +++ b/datadog_api_client/v2/model/logs_storage_tier.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class LogsStorageTier(ModelSimple): + """ + Specifies storage type as indexes, online-archives or flex + + :param value: If omitted defaults to "indexes". Must be one of ["indexes", "online-archives", "flex"]. + :type value: str + """ + + allowed_values = { + "indexes", + "online-archives", + "flex", + } + INDEXES: ClassVar["LogsStorageTier"] + ONLINE_ARCHIVES: ClassVar["LogsStorageTier"] + FLEX: ClassVar["LogsStorageTier"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +LogsStorageTier.INDEXES = LogsStorageTier("indexes") +LogsStorageTier.ONLINE_ARCHIVES = LogsStorageTier("online-archives") +LogsStorageTier.FLEX = LogsStorageTier("flex") diff --git a/datadog_api_client/v2/model/logs_warning.py b/datadog_api_client/v2/model/logs_warning.py new file mode 100644 index 0000000000..41b377696f --- /dev/null +++ b/datadog_api_client/v2/model/logs_warning.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LogsWarning(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "detail": (str,), + "title": (str,), + } + attribute_map = { + "code": "code", + "detail": "detail", + "title": "title", + } + + def __init__(self_, code: Union[str, UnsetType]=unset, detail: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + A warning message indicating something that went wrong with the query + + :param code: A unique code for this type of warning + :type code: str, optional + + :param detail: A detailed explanation of this specific warning + :type detail: str, optional + + :param title: A short human-readable summary of the warning + :type title: str, optional + """ + if code is not unset: + kwargs["code"] = code + if detail is not unset: + kwargs["detail"] = detail + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/long_task_metric_stats.py b/datadog_api_client/v2/model/long_task_metric_stats.py new file mode 100644 index 0000000000..d2dda2cea0 --- /dev/null +++ b/datadog_api_client/v2/model/long_task_metric_stats.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class LongTaskMetricStats(ModelNormal): + @cached_property + def openapi_types(_): + return { + "average": (float,), + "max": (float,), + "min": (float,), + } + attribute_map = { + "average": "average", + "max": "max", + "min": "min", + } + + def __init__(self_, average: float, max: float, min: float, **kwargs): + """ + Statistical distribution (average, min, max) of a long task metric across sampled views. + + :param average: Average value across sampled views. + :type average: float + + :param max: Maximum value across sampled views. + :type max: float + + :param min: Minimum value across sampled views. + :type min: float + """ + super().__init__(kwargs) + + + self_.average = average + self_.max = max + self_.min = min diff --git a/datadog_api_client/v2/model/long_task_stats_per_view.py b/datadog_api_client/v2/model/long_task_stats_per_view.py new file mode 100644 index 0000000000..e98584e6d0 --- /dev/null +++ b/datadog_api_client/v2/model/long_task_stats_per_view.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.long_task_metric_stats import LongTaskMetricStats + +class LongTaskStatsPerView(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.long_task_metric_stats import LongTaskMetricStats + return { + "fcp_blocking_time_ms": (LongTaskMetricStats,), + "fcp_count": (LongTaskMetricStats,), + "inp_overlap_blocking_time_ms": (LongTaskMetricStats,), + "inp_overlap_count": (LongTaskMetricStats,), + "lcp_blocking_time_ms": (LongTaskMetricStats,), + "lcp_count": (LongTaskMetricStats,), + "loading_time_blocking_time_ms": (LongTaskMetricStats,), + "loading_time_count": (LongTaskMetricStats,), + "total_blocking_time_ms": (LongTaskMetricStats,), + "total_count": (LongTaskMetricStats,), + } + attribute_map = { + "fcp_blocking_time_ms": "fcp_blocking_time_ms", + "fcp_count": "fcp_count", + "inp_overlap_blocking_time_ms": "inp_overlap_blocking_time_ms", + "inp_overlap_count": "inp_overlap_count", + "lcp_blocking_time_ms": "lcp_blocking_time_ms", + "lcp_count": "lcp_count", + "loading_time_blocking_time_ms": "loading_time_blocking_time_ms", + "loading_time_count": "loading_time_count", + "total_blocking_time_ms": "total_blocking_time_ms", + "total_count": "total_count", + } + + def __init__(self_, fcp_blocking_time_ms: Union[LongTaskMetricStats, UnsetType]=unset, fcp_count: Union[LongTaskMetricStats, UnsetType]=unset, inp_overlap_blocking_time_ms: Union[LongTaskMetricStats, UnsetType]=unset, inp_overlap_count: Union[LongTaskMetricStats, UnsetType]=unset, lcp_blocking_time_ms: Union[LongTaskMetricStats, UnsetType]=unset, lcp_count: Union[LongTaskMetricStats, UnsetType]=unset, loading_time_blocking_time_ms: Union[LongTaskMetricStats, UnsetType]=unset, loading_time_count: Union[LongTaskMetricStats, UnsetType]=unset, total_blocking_time_ms: Union[LongTaskMetricStats, UnsetType]=unset, total_count: Union[LongTaskMetricStats, UnsetType]=unset, **kwargs): + """ + Statistical distributions of long task metrics computed per view across sampled views. + + :param fcp_blocking_time_ms: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type fcp_blocking_time_ms: LongTaskMetricStats, optional + + :param fcp_count: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type fcp_count: LongTaskMetricStats, optional + + :param inp_overlap_blocking_time_ms: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type inp_overlap_blocking_time_ms: LongTaskMetricStats, optional + + :param inp_overlap_count: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type inp_overlap_count: LongTaskMetricStats, optional + + :param lcp_blocking_time_ms: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type lcp_blocking_time_ms: LongTaskMetricStats, optional + + :param lcp_count: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type lcp_count: LongTaskMetricStats, optional + + :param loading_time_blocking_time_ms: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type loading_time_blocking_time_ms: LongTaskMetricStats, optional + + :param loading_time_count: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type loading_time_count: LongTaskMetricStats, optional + + :param total_blocking_time_ms: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type total_blocking_time_ms: LongTaskMetricStats, optional + + :param total_count: Statistical distribution (average, min, max) of a long task metric across sampled views. + :type total_count: LongTaskMetricStats, optional + """ + if fcp_blocking_time_ms is not unset: + kwargs["fcp_blocking_time_ms"] = fcp_blocking_time_ms + if fcp_count is not unset: + kwargs["fcp_count"] = fcp_count + if inp_overlap_blocking_time_ms is not unset: + kwargs["inp_overlap_blocking_time_ms"] = inp_overlap_blocking_time_ms + if inp_overlap_count is not unset: + kwargs["inp_overlap_count"] = inp_overlap_count + if lcp_blocking_time_ms is not unset: + kwargs["lcp_blocking_time_ms"] = lcp_blocking_time_ms + if lcp_count is not unset: + kwargs["lcp_count"] = lcp_count + if loading_time_blocking_time_ms is not unset: + kwargs["loading_time_blocking_time_ms"] = loading_time_blocking_time_ms + if loading_time_count is not unset: + kwargs["loading_time_count"] = loading_time_count + if total_blocking_time_ms is not unset: + kwargs["total_blocking_time_ms"] = total_blocking_time_ms + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance.py b/datadog_api_client/v2/model/maintenance.py new file mode 100644 index 0000000000..7d7b5dbc60 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data import MaintenanceData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + +class Maintenance(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data import MaintenanceData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + return { + "data": (MaintenanceData,), + "included": ([DegradationIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[MaintenanceData, UnsetType]=unset, included: Union[List[Union[DegradationIncluded, StatusPagesUser, StatusPageAsIncluded]], UnsetType]=unset, **kwargs): + """ + Response object for a single maintenance. + + :param data: The data object for a maintenance. + :type data: MaintenanceData, optional + + :param included: The included related resources of a maintenance. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [DegradationIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_array.py b/datadog_api_client/v2/model/maintenance_array.py new file mode 100644 index 0000000000..05b1038a73 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_array.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data import MaintenanceData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.pagination_meta import PaginationMeta + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + +class MaintenanceArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data import MaintenanceData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.pagination_meta import PaginationMeta + return { + "data": ([MaintenanceData],), + "included": ([DegradationIncluded],), + "meta": (PaginationMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + read_only_vars = { + "meta", + } + + def __init__(self_, data: List[MaintenanceData], included: Union[List[Union[DegradationIncluded, StatusPagesUser, StatusPageAsIncluded]], UnsetType]=unset, meta: Union[PaginationMeta, UnsetType]=unset, **kwargs): + """ + Response object for a list of maintenances. + + :param data: A list of maintenance data objects. + :type data: [MaintenanceData] + + :param included: The included related resources of a maintenance. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [DegradationIncluded], optional + + :param meta: Response metadata. + :type meta: PaginationMeta, 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/datadog_api_client/v2/model/maintenance_data.py b/datadog_api_client/v2/model/maintenance_data.py new file mode 100644 index 0000000000..bb082aec49 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data_attributes import MaintenanceDataAttributes + from datadog_api_client.v2.model.maintenance_data_relationships import MaintenanceDataRelationships + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + +class MaintenanceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data_attributes import MaintenanceDataAttributes + from datadog_api_client.v2.model.maintenance_data_relationships import MaintenanceDataRelationships + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + return { + "attributes": (MaintenanceDataAttributes,), + "id": (UUID,), + "relationships": (MaintenanceDataRelationships,), + "type": (PatchMaintenanceRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: PatchMaintenanceRequestDataType, attributes: Union[MaintenanceDataAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, relationships: Union[MaintenanceDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for a maintenance. + + :param attributes: The attributes of a maintenance. + :type attributes: MaintenanceDataAttributes, optional + + :param id: The ID of the maintenance. + :type id: UUID, optional + + :param relationships: The relationships of a maintenance. + :type relationships: MaintenanceDataRelationships, optional + + :param type: Maintenances resource type. + :type type: PatchMaintenanceRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_data_attributes.py b/datadog_api_client/v2/model/maintenance_data_attributes.py new file mode 100644 index 0000000000..5df2f4974f --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_attributes.py @@ -0,0 +1,130 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data_attributes_components_affected_items import MaintenanceDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.maintenance_data_attributes_status import MaintenanceDataAttributesStatus + from datadog_api_client.v2.model.maintenance_data_attributes_updates_items import MaintenanceDataAttributesUpdatesItems + +class MaintenanceDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data_attributes_components_affected_items import MaintenanceDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.maintenance_data_attributes_status import MaintenanceDataAttributesStatus + from datadog_api_client.v2.model.maintenance_data_attributes_updates_items import MaintenanceDataAttributesUpdatesItems + return { + "completed_date": (datetime,), + "completed_description": (str,), + "components_affected": ([MaintenanceDataAttributesComponentsAffectedItems],), + "in_progress_description": (str,), + "is_backfilled": (bool,), + "modified_at": (datetime,), + "published_date": (datetime,), + "scheduled_description": (str,), + "start_date": (datetime,), + "status": (MaintenanceDataAttributesStatus,), + "title": (str,), + "updates": ([MaintenanceDataAttributesUpdatesItems],), + } + attribute_map = { + "completed_date": "completed_date", + "completed_description": "completed_description", + "components_affected": "components_affected", + "in_progress_description": "in_progress_description", + "is_backfilled": "is_backfilled", + "modified_at": "modified_at", + "published_date": "published_date", + "scheduled_description": "scheduled_description", + "start_date": "start_date", + "status": "status", + "title": "title", + "updates": "updates", + } + + def __init__(self_, completed_date: Union[datetime, UnsetType]=unset, completed_description: Union[str, UnsetType]=unset, components_affected: Union[List[MaintenanceDataAttributesComponentsAffectedItems], UnsetType]=unset, in_progress_description: Union[str, UnsetType]=unset, is_backfilled: Union[bool, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, published_date: Union[datetime, UnsetType]=unset, scheduled_description: Union[str, UnsetType]=unset, start_date: Union[datetime, UnsetType]=unset, status: Union[MaintenanceDataAttributesStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, updates: Union[List[MaintenanceDataAttributesUpdatesItems], UnsetType]=unset, **kwargs): + """ + The attributes of a maintenance. + + :param completed_date: Timestamp of when the maintenance was completed. + :type completed_date: datetime, optional + + :param completed_description: The description shown when the maintenance is completed. + :type completed_description: str, optional + + :param components_affected: Components affected by the maintenance. + :type components_affected: [MaintenanceDataAttributesComponentsAffectedItems], optional + + :param in_progress_description: The description shown while the maintenance is in progress. + :type in_progress_description: str, optional + + :param is_backfilled: Whether the maintenance was backfilled. + :type is_backfilled: bool, optional + + :param modified_at: Timestamp of when the maintenance was last modified. + :type modified_at: datetime, optional + + :param published_date: Timestamp of when the maintenance was published. + :type published_date: datetime, optional + + :param scheduled_description: The description shown when the maintenance is scheduled. + :type scheduled_description: str, optional + + :param start_date: Timestamp of when the maintenance is scheduled to start. + :type start_date: datetime, optional + + :param status: The status of the maintenance. + :type status: MaintenanceDataAttributesStatus, optional + + :param title: Title of the maintenance. + :type title: str, optional + + :param updates: Past updates made to the maintenance. + :type updates: [MaintenanceDataAttributesUpdatesItems], optional + """ + if completed_date is not unset: + kwargs["completed_date"] = completed_date + if completed_description is not unset: + kwargs["completed_description"] = completed_description + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if in_progress_description is not unset: + kwargs["in_progress_description"] = in_progress_description + if is_backfilled is not unset: + kwargs["is_backfilled"] = is_backfilled + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if published_date is not unset: + kwargs["published_date"] = published_date + if scheduled_description is not unset: + kwargs["scheduled_description"] = scheduled_description + if start_date is not unset: + kwargs["start_date"] = start_date + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if updates is not unset: + kwargs["updates"] = updates + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/maintenance_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..068bac9635 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items_status import PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + +class MaintenanceDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items_status import PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + return { + "id": (UUID,), + "name": (str,), + "status": (PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: UUID, status: PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a maintenance. + + :param id: The ID of the component. Must be a component of type ``component``. + :type id: UUID + + :param name: The name of the component. + :type name: str, optional + + :param status: The status of the component. + :type status: PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/maintenance_data_attributes_status.py b/datadog_api_client/v2/model/maintenance_data_attributes_status.py new file mode 100644 index 0000000000..f294611e4c --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_attributes_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MaintenanceDataAttributesStatus(ModelSimple): + """ + The status of the maintenance. + + :param value: Must be one of ["scheduled", "in_progress", "completed"]. + :type value: str + """ + + allowed_values = { + "scheduled", + "in_progress", + "completed", + } + SCHEDULED: ClassVar["MaintenanceDataAttributesStatus"] + IN_PROGRESS: ClassVar["MaintenanceDataAttributesStatus"] + COMPLETED: ClassVar["MaintenanceDataAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MaintenanceDataAttributesStatus.SCHEDULED = MaintenanceDataAttributesStatus("scheduled") +MaintenanceDataAttributesStatus.IN_PROGRESS = MaintenanceDataAttributesStatus("in_progress") +MaintenanceDataAttributesStatus.COMPLETED = MaintenanceDataAttributesStatus("completed") diff --git a/datadog_api_client/v2/model/maintenance_data_attributes_updates_items.py b/datadog_api_client/v2/model/maintenance_data_attributes_updates_items.py new file mode 100644 index 0000000000..d333a19bfc --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_attributes_updates_items.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data_attributes_updates_items_components_affected_items import MaintenanceDataAttributesUpdatesItemsComponentsAffectedItems + +class MaintenanceDataAttributesUpdatesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data_attributes_updates_items_components_affected_items import MaintenanceDataAttributesUpdatesItemsComponentsAffectedItems + return { + "components_affected": ([MaintenanceDataAttributesUpdatesItemsComponentsAffectedItems],), + "created_at": (datetime,), + "description": (str,), + "id": (UUID,), + "manual_transition": (bool,), + "modified_at": (datetime,), + "started_at": (datetime,), + "status": (str,), + } + attribute_map = { + "components_affected": "components_affected", + "created_at": "created_at", + "description": "description", + "id": "id", + "manual_transition": "manual_transition", + "modified_at": "modified_at", + "started_at": "started_at", + "status": "status", + } + read_only_vars = { + "created_at", + "id", + "manual_transition", + "modified_at", + } + + def __init__(self_, components_affected: Union[List[MaintenanceDataAttributesUpdatesItemsComponentsAffectedItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, description: Union[str, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, manual_transition: Union[bool, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, started_at: Union[datetime, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + An update made to a maintenance. + + :param components_affected: The components affected at the time of the update. + :type components_affected: [MaintenanceDataAttributesUpdatesItemsComponentsAffectedItems], optional + + :param created_at: Timestamp of when the update was created. + :type created_at: datetime, optional + + :param description: Description of the update. + :type description: str, optional + + :param id: Identifier of the update. + :type id: UUID, optional + + :param manual_transition: Whether the update was applied manually by a user (true) or automatically by the system (false). + :type manual_transition: bool, optional + + :param modified_at: Timestamp of when the update was last modified. + :type modified_at: datetime, optional + + :param started_at: Timestamp of when the update started. + :type started_at: datetime, optional + + :param status: The status of the update. + :type status: str, optional + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if id is not unset: + kwargs["id"] = id + if manual_transition is not unset: + kwargs["manual_transition"] = manual_transition + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if started_at is not unset: + kwargs["started_at"] = started_at + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_data_attributes_updates_items_components_affected_items.py b/datadog_api_client/v2/model/maintenance_data_attributes_updates_items_components_affected_items.py new file mode 100644 index 0000000000..d844a1cc8a --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_attributes_updates_items_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items_status import PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + +class MaintenanceDataAttributesUpdatesItemsComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items_status import PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + return { + "id": (UUID,), + "name": (str,), + "status": (PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: UUID, status: PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected at the time of a maintenance update. + + :param id: Identifier of the component affected at the time of the update. + :type id: UUID + + :param name: The name of the component affected at the time of the update. + :type name: str, optional + + :param status: The status of the component. + :type status: PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/maintenance_data_relationships.py b/datadog_api_client/v2/model/maintenance_data_relationships.py new file mode 100644 index 0000000000..255030940f --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_relationships.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data_relationships_created_by_user import MaintenanceDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.maintenance_data_relationships_last_modified_by_user import MaintenanceDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.maintenance_data_relationships_status_page import MaintenanceDataRelationshipsStatusPage + from datadog_api_client.v2.model.maintenance_data_relationships_template import MaintenanceDataRelationshipsTemplate + +class MaintenanceDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data_relationships_created_by_user import MaintenanceDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.maintenance_data_relationships_last_modified_by_user import MaintenanceDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.maintenance_data_relationships_status_page import MaintenanceDataRelationshipsStatusPage + from datadog_api_client.v2.model.maintenance_data_relationships_template import MaintenanceDataRelationshipsTemplate + return { + "created_by_user": (MaintenanceDataRelationshipsCreatedByUser,), + "last_modified_by_user": (MaintenanceDataRelationshipsLastModifiedByUser,), + "status_page": (MaintenanceDataRelationshipsStatusPage,), + "template": (MaintenanceDataRelationshipsTemplate,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + "status_page": "status_page", + "template": "template", + } + + def __init__(self_, created_by_user: Union[MaintenanceDataRelationshipsCreatedByUser, UnsetType]=unset, last_modified_by_user: Union[MaintenanceDataRelationshipsLastModifiedByUser, UnsetType]=unset, status_page: Union[MaintenanceDataRelationshipsStatusPage, UnsetType]=unset, template: Union[MaintenanceDataRelationshipsTemplate, UnsetType]=unset, **kwargs): + """ + The relationships of a maintenance. + + :param created_by_user: The Datadog user who created the maintenance. + :type created_by_user: MaintenanceDataRelationshipsCreatedByUser, optional + + :param last_modified_by_user: The Datadog user who last modified the maintenance. + :type last_modified_by_user: MaintenanceDataRelationshipsLastModifiedByUser, optional + + :param status_page: The status page the maintenance belongs to. + :type status_page: MaintenanceDataRelationshipsStatusPage, optional + + :param template: The template the maintenance was created from. + :type template: MaintenanceDataRelationshipsTemplate, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if status_page is not unset: + kwargs["status_page"] = status_page + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_data_relationships_created_by_user.py b/datadog_api_client/v2/model/maintenance_data_relationships_created_by_user.py new file mode 100644 index 0000000000..47c9fe3027 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_relationships_created_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data_relationships_created_by_user_data import MaintenanceDataRelationshipsCreatedByUserData + +class MaintenanceDataRelationshipsCreatedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data_relationships_created_by_user_data import MaintenanceDataRelationshipsCreatedByUserData + return { + "data": (MaintenanceDataRelationshipsCreatedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceDataRelationshipsCreatedByUserData, **kwargs): + """ + The Datadog user who created the maintenance. + + :param data: The data object identifying the Datadog user who created the maintenance. + :type data: MaintenanceDataRelationshipsCreatedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_data_relationships_created_by_user_data.py b/datadog_api_client/v2/model/maintenance_data_relationships_created_by_user_data.py new file mode 100644 index 0000000000..97df1b6130 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_relationships_created_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class MaintenanceDataRelationshipsCreatedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (UUID,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who created the maintenance. + + :param id: The ID of the Datadog user who created the maintenance. + :type id: UUID + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_data_relationships_last_modified_by_user.py b/datadog_api_client/v2/model/maintenance_data_relationships_last_modified_by_user.py new file mode 100644 index 0000000000..0deafa8908 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_relationships_last_modified_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data_relationships_last_modified_by_user_data import MaintenanceDataRelationshipsLastModifiedByUserData + +class MaintenanceDataRelationshipsLastModifiedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data_relationships_last_modified_by_user_data import MaintenanceDataRelationshipsLastModifiedByUserData + return { + "data": (MaintenanceDataRelationshipsLastModifiedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceDataRelationshipsLastModifiedByUserData, **kwargs): + """ + The Datadog user who last modified the maintenance. + + :param data: The data object identifying the Datadog user who last modified the maintenance. + :type data: MaintenanceDataRelationshipsLastModifiedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_data_relationships_last_modified_by_user_data.py b/datadog_api_client/v2/model/maintenance_data_relationships_last_modified_by_user_data.py new file mode 100644 index 0000000000..c9717fe2ab --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_relationships_last_modified_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class MaintenanceDataRelationshipsLastModifiedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (UUID,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who last modified the maintenance. + + :param id: The ID of the Datadog user who last modified the maintenance. + :type id: UUID + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_data_relationships_status_page.py b/datadog_api_client/v2/model/maintenance_data_relationships_status_page.py new file mode 100644 index 0000000000..4450dcb4ef --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_relationships_status_page.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data_relationships_status_page_data import MaintenanceDataRelationshipsStatusPageData + +class MaintenanceDataRelationshipsStatusPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data_relationships_status_page_data import MaintenanceDataRelationshipsStatusPageData + return { + "data": (MaintenanceDataRelationshipsStatusPageData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceDataRelationshipsStatusPageData, **kwargs): + """ + The status page the maintenance belongs to. + + :param data: The data object identifying the status page associated with a maintenance. + :type data: MaintenanceDataRelationshipsStatusPageData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_data_relationships_status_page_data.py b/datadog_api_client/v2/model/maintenance_data_relationships_status_page_data.py new file mode 100644 index 0000000000..84b05ffb89 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_relationships_status_page_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class MaintenanceDataRelationshipsStatusPageData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "id": (UUID,), + "type": (StatusPageDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPageDataType, **kwargs): + """ + The data object identifying the status page associated with a maintenance. + + :param id: The ID of the status page. + :type id: UUID + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_data_relationships_template.py b/datadog_api_client/v2/model/maintenance_data_relationships_template.py new file mode 100644 index 0000000000..558a1601b1 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_relationships_template.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_data_relationships_template_data import MaintenanceDataRelationshipsTemplateData + +class MaintenanceDataRelationshipsTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_data_relationships_template_data import MaintenanceDataRelationshipsTemplateData + return { + "data": (MaintenanceDataRelationshipsTemplateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceDataRelationshipsTemplateData, **kwargs): + """ + The template the maintenance was created from. + + :param data: The data object identifying the template the maintenance was created from. + :type data: MaintenanceDataRelationshipsTemplateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_data_relationships_template_data.py b/datadog_api_client/v2/model/maintenance_data_relationships_template_data.py new file mode 100644 index 0000000000..1a2308e7bd --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_data_relationships_template_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + +class MaintenanceDataRelationshipsTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + return { + "id": (str,), + "type": (PatchMaintenanceTemplateRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchMaintenanceTemplateRequestDataType, **kwargs): + """ + The data object identifying the template the maintenance was created from. + + :param id: The ID of the maintenance template. + :type id: str + + :param type: Maintenance templates resource type. + :type type: PatchMaintenanceTemplateRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_template.py b/datadog_api_client/v2/model/maintenance_template.py new file mode 100644 index 0000000000..1eb9070ebf --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_template_data import MaintenanceTemplateData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + +class MaintenanceTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_template_data import MaintenanceTemplateData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + return { + "data": (MaintenanceTemplateData,), + "included": ([DegradationIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[MaintenanceTemplateData, UnsetType]=unset, included: Union[List[Union[DegradationIncluded, StatusPagesUser, StatusPageAsIncluded]], UnsetType]=unset, **kwargs): + """ + Response object for a single maintenance template. + + :param data: The data object for a maintenance template. + :type data: MaintenanceTemplateData, optional + + :param included: The included related resources of a maintenance template. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [DegradationIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_template_array.py b/datadog_api_client/v2/model/maintenance_template_array.py new file mode 100644 index 0000000000..1d464e2f51 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_array.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_template_data import MaintenanceTemplateData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + +class MaintenanceTemplateArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_template_data import MaintenanceTemplateData + from datadog_api_client.v2.model.degradation_included import DegradationIncluded + return { + "data": ([MaintenanceTemplateData],), + "included": ([DegradationIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[MaintenanceTemplateData], included: Union[List[Union[DegradationIncluded, StatusPagesUser, StatusPageAsIncluded]], UnsetType]=unset, **kwargs): + """ + Response object for a list of maintenance templates. + + :param data: A list of maintenance template data objects. + :type data: [MaintenanceTemplateData] + + :param included: The included related resources of a maintenance template. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [DegradationIncluded], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_template_data.py b/datadog_api_client/v2/model/maintenance_template_data.py new file mode 100644 index 0000000000..0849cd500d --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_template_data_attributes import MaintenanceTemplateDataAttributes + from datadog_api_client.v2.model.maintenance_template_data_relationships import MaintenanceTemplateDataRelationships + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + +class MaintenanceTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_template_data_attributes import MaintenanceTemplateDataAttributes + from datadog_api_client.v2.model.maintenance_template_data_relationships import MaintenanceTemplateDataRelationships + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + return { + "attributes": (MaintenanceTemplateDataAttributes,), + "id": (str,), + "relationships": (MaintenanceTemplateDataRelationships,), + "type": (PatchMaintenanceTemplateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: PatchMaintenanceTemplateRequestDataType, attributes: Union[MaintenanceTemplateDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[MaintenanceTemplateDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for a maintenance template. + + :param attributes: The attributes of a maintenance template. + :type attributes: MaintenanceTemplateDataAttributes, optional + + :param id: The ID of the maintenance template. + :type id: str, optional + + :param relationships: The relationships of a maintenance template. + :type relationships: MaintenanceTemplateDataRelationships, optional + + :param type: Maintenance templates resource type. + :type type: PatchMaintenanceTemplateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_template_data_attributes.py b/datadog_api_client/v2/model/maintenance_template_data_attributes.py new file mode 100644 index 0000000000..d93795edfd --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_data_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MaintenanceTemplateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "completed_description": (str,), + "component_ids": ([str],), + "created_at": (datetime,), + "in_progress_description": (str,), + "maintenance_title": (str,), + "modified_at": (datetime,), + "name": (str,), + "scheduled_description": (str,), + } + attribute_map = { + "completed_description": "completed_description", + "component_ids": "component_ids", + "created_at": "created_at", + "in_progress_description": "in_progress_description", + "maintenance_title": "maintenance_title", + "modified_at": "modified_at", + "name": "name", + "scheduled_description": "scheduled_description", + } + + def __init__(self_, completed_description: Union[str, UnsetType]=unset, component_ids: Union[List[str], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, in_progress_description: Union[str, UnsetType]=unset, maintenance_title: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, scheduled_description: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a maintenance template. + + :param completed_description: The description shown when a maintenance created from this template is completed. + :type completed_description: str, optional + + :param component_ids: The IDs of the components affected by a maintenance created from this template. + :type component_ids: [str], optional + + :param created_at: Timestamp of when the maintenance template was created. + :type created_at: datetime, optional + + :param in_progress_description: The description shown while a maintenance created from this template is in progress. + :type in_progress_description: str, optional + + :param maintenance_title: The title used for a maintenance created from this template. + :type maintenance_title: str, optional + + :param modified_at: Timestamp of when the maintenance template was last modified. + :type modified_at: datetime, optional + + :param name: The name of the maintenance template. + :type name: str, optional + + :param scheduled_description: The description shown when a maintenance created from this template is scheduled. + :type scheduled_description: str, optional + """ + if completed_description is not unset: + kwargs["completed_description"] = completed_description + if component_ids is not unset: + kwargs["component_ids"] = component_ids + if created_at is not unset: + kwargs["created_at"] = created_at + if in_progress_description is not unset: + kwargs["in_progress_description"] = in_progress_description + if maintenance_title is not unset: + kwargs["maintenance_title"] = maintenance_title + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if scheduled_description is not unset: + kwargs["scheduled_description"] = scheduled_description + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_template_data_relationships.py b/datadog_api_client/v2/model/maintenance_template_data_relationships.py new file mode 100644 index 0000000000..351582459d --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_data_relationships.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_template_data_relationships_created_by_user import MaintenanceTemplateDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.maintenance_template_data_relationships_last_modified_by_user import MaintenanceTemplateDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.maintenance_template_data_relationships_status_page import MaintenanceTemplateDataRelationshipsStatusPage + +class MaintenanceTemplateDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_template_data_relationships_created_by_user import MaintenanceTemplateDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.maintenance_template_data_relationships_last_modified_by_user import MaintenanceTemplateDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.maintenance_template_data_relationships_status_page import MaintenanceTemplateDataRelationshipsStatusPage + return { + "created_by_user": (MaintenanceTemplateDataRelationshipsCreatedByUser,), + "last_modified_by_user": (MaintenanceTemplateDataRelationshipsLastModifiedByUser,), + "status_page": (MaintenanceTemplateDataRelationshipsStatusPage,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + "status_page": "status_page", + } + + def __init__(self_, created_by_user: Union[MaintenanceTemplateDataRelationshipsCreatedByUser, UnsetType]=unset, last_modified_by_user: Union[MaintenanceTemplateDataRelationshipsLastModifiedByUser, UnsetType]=unset, status_page: Union[MaintenanceTemplateDataRelationshipsStatusPage, UnsetType]=unset, **kwargs): + """ + The relationships of a maintenance template. + + :param created_by_user: The Datadog user who created the maintenance template. + :type created_by_user: MaintenanceTemplateDataRelationshipsCreatedByUser, optional + + :param last_modified_by_user: The Datadog user who last modified the maintenance template. + :type last_modified_by_user: MaintenanceTemplateDataRelationshipsLastModifiedByUser, optional + + :param status_page: The status page the maintenance template belongs to. + :type status_page: MaintenanceTemplateDataRelationshipsStatusPage, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if status_page is not unset: + kwargs["status_page"] = status_page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_template_data_relationships_created_by_user.py b/datadog_api_client/v2/model/maintenance_template_data_relationships_created_by_user.py new file mode 100644 index 0000000000..009ed2fad6 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_data_relationships_created_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_template_data_relationships_created_by_user_data import MaintenanceTemplateDataRelationshipsCreatedByUserData + +class MaintenanceTemplateDataRelationshipsCreatedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_template_data_relationships_created_by_user_data import MaintenanceTemplateDataRelationshipsCreatedByUserData + return { + "data": (MaintenanceTemplateDataRelationshipsCreatedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceTemplateDataRelationshipsCreatedByUserData, **kwargs): + """ + The Datadog user who created the maintenance template. + + :param data: The data object identifying the Datadog user who created the maintenance template. + :type data: MaintenanceTemplateDataRelationshipsCreatedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_template_data_relationships_created_by_user_data.py b/datadog_api_client/v2/model/maintenance_template_data_relationships_created_by_user_data.py new file mode 100644 index 0000000000..feb09011ee --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_data_relationships_created_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class MaintenanceTemplateDataRelationshipsCreatedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who created the maintenance template. + + :param id: The ID of the Datadog user who created the maintenance template. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_template_data_relationships_last_modified_by_user.py b/datadog_api_client/v2/model/maintenance_template_data_relationships_last_modified_by_user.py new file mode 100644 index 0000000000..bf1a6e8e9a --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_data_relationships_last_modified_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_template_data_relationships_last_modified_by_user_data import MaintenanceTemplateDataRelationshipsLastModifiedByUserData + +class MaintenanceTemplateDataRelationshipsLastModifiedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_template_data_relationships_last_modified_by_user_data import MaintenanceTemplateDataRelationshipsLastModifiedByUserData + return { + "data": (MaintenanceTemplateDataRelationshipsLastModifiedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceTemplateDataRelationshipsLastModifiedByUserData, **kwargs): + """ + The Datadog user who last modified the maintenance template. + + :param data: The data object identifying the Datadog user who last modified the maintenance template. + :type data: MaintenanceTemplateDataRelationshipsLastModifiedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_template_data_relationships_last_modified_by_user_data.py b/datadog_api_client/v2/model/maintenance_template_data_relationships_last_modified_by_user_data.py new file mode 100644 index 0000000000..93ba4e28ad --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_data_relationships_last_modified_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class MaintenanceTemplateDataRelationshipsLastModifiedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who last modified the maintenance template. + + :param id: The ID of the Datadog user who last modified the maintenance template. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_template_data_relationships_status_page.py b/datadog_api_client/v2/model/maintenance_template_data_relationships_status_page.py new file mode 100644 index 0000000000..8a9c098806 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_data_relationships_status_page.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_template_data_relationships_status_page_data import MaintenanceTemplateDataRelationshipsStatusPageData + +class MaintenanceTemplateDataRelationshipsStatusPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_template_data_relationships_status_page_data import MaintenanceTemplateDataRelationshipsStatusPageData + return { + "data": (MaintenanceTemplateDataRelationshipsStatusPageData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceTemplateDataRelationshipsStatusPageData, **kwargs): + """ + The status page the maintenance template belongs to. + + :param data: The data object identifying the status page associated with a maintenance template. + :type data: MaintenanceTemplateDataRelationshipsStatusPageData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_template_data_relationships_status_page_data.py b/datadog_api_client/v2/model/maintenance_template_data_relationships_status_page_data.py new file mode 100644 index 0000000000..b2e105b986 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_template_data_relationships_status_page_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class MaintenanceTemplateDataRelationshipsStatusPageData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "id": (str,), + "type": (StatusPageDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPageDataType, **kwargs): + """ + The data object identifying the status page associated with a maintenance template. + + :param id: The ID of the status page. + :type id: str + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_update.py b/datadog_api_client/v2/model/maintenance_update.py new file mode 100644 index 0000000000..126a0ee0c0 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_update.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_update_data import MaintenanceUpdateData + +class MaintenanceUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_update_data import MaintenanceUpdateData + return { + "data": (MaintenanceUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MaintenanceUpdateData, UnsetType]=unset, **kwargs): + """ + Response object for a maintenance update. + + :param data: The data object for a maintenance update. + :type data: MaintenanceUpdateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_update_data.py b/datadog_api_client/v2/model/maintenance_update_data.py new file mode 100644 index 0000000000..e5c8881f64 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_update_data.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_update_data_attributes import MaintenanceUpdateDataAttributes + from datadog_api_client.v2.model.maintenance_update_data_relationships import MaintenanceUpdateDataRelationships + from datadog_api_client.v2.model.patch_maintenance_update_request_data_type import PatchMaintenanceUpdateRequestDataType + +class MaintenanceUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_update_data_attributes import MaintenanceUpdateDataAttributes + from datadog_api_client.v2.model.maintenance_update_data_relationships import MaintenanceUpdateDataRelationships + from datadog_api_client.v2.model.patch_maintenance_update_request_data_type import PatchMaintenanceUpdateRequestDataType + return { + "attributes": (MaintenanceUpdateDataAttributes,), + "id": (UUID,), + "relationships": (MaintenanceUpdateDataRelationships,), + "type": (PatchMaintenanceUpdateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: UUID, type: PatchMaintenanceUpdateRequestDataType, attributes: Union[MaintenanceUpdateDataAttributes, UnsetType]=unset, relationships: Union[MaintenanceUpdateDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for a maintenance update. + + :param attributes: Attributes of a maintenance update resource. + :type attributes: MaintenanceUpdateDataAttributes, optional + + :param id: The ID of the maintenance update. + :type id: UUID + + :param relationships: Relationships of a maintenance update resource. + :type relationships: MaintenanceUpdateDataRelationships, optional + + :param type: Maintenance updates resource type. + :type type: PatchMaintenanceUpdateRequestDataType + """ + 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/datadog_api_client/v2/model/maintenance_update_data_attributes.py b/datadog_api_client/v2/model/maintenance_update_data_attributes.py new file mode 100644 index 0000000000..4b963a6dcf --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_update_data_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_maintenance_request_data_attributes_components_affected_items import CreateMaintenanceRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.maintenance_update_data_attributes_status import MaintenanceUpdateDataAttributesStatus + +class MaintenanceUpdateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_maintenance_request_data_attributes_components_affected_items import CreateMaintenanceRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.maintenance_update_data_attributes_status import MaintenanceUpdateDataAttributesStatus + return { + "components_affected": ([CreateMaintenanceRequestDataAttributesComponentsAffectedItems],), + "created_at": (datetime,), + "description": (str,), + "manual_transition": (bool,), + "modified_at": (datetime,), + "started_at": (datetime,), + "status": (MaintenanceUpdateDataAttributesStatus,), + } + attribute_map = { + "components_affected": "components_affected", + "created_at": "created_at", + "description": "description", + "manual_transition": "manual_transition", + "modified_at": "modified_at", + "started_at": "started_at", + "status": "status", + } + + def __init__(self_, components_affected: Union[List[CreateMaintenanceRequestDataAttributesComponentsAffectedItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, description: Union[str, UnsetType]=unset, manual_transition: Union[bool, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, started_at: Union[datetime, UnsetType]=unset, status: Union[MaintenanceUpdateDataAttributesStatus, UnsetType]=unset, **kwargs): + """ + Attributes of a maintenance update resource. + + :param components_affected: Components affected at the time of the update. + :type components_affected: [CreateMaintenanceRequestDataAttributesComponentsAffectedItems], optional + + :param created_at: The date and time the update was created. + :type created_at: datetime, optional + + :param description: The message body of the update. + :type description: str, optional + + :param manual_transition: Whether the update was applied manually by a user (true) or automatically by the system (false). + :type manual_transition: bool, optional + + :param modified_at: The date and time the update was last modified. + :type modified_at: datetime, optional + + :param started_at: The date and time the update started. + :type started_at: datetime, optional + + :param status: The status of the maintenance update. + :type status: MaintenanceUpdateDataAttributesStatus, optional + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if manual_transition is not unset: + kwargs["manual_transition"] = manual_transition + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if started_at is not unset: + kwargs["started_at"] = started_at + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_update_data_attributes_status.py b/datadog_api_client/v2/model/maintenance_update_data_attributes_status.py new file mode 100644 index 0000000000..92106dfceb --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_update_data_attributes_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MaintenanceUpdateDataAttributesStatus(ModelSimple): + """ + The status of the maintenance update. + + :param value: Must be one of ["scheduled", "in_progress", "completed", "canceled"]. + :type value: str + """ + + allowed_values = { + "scheduled", + "in_progress", + "completed", + "canceled", + } + SCHEDULED: ClassVar["MaintenanceUpdateDataAttributesStatus"] + IN_PROGRESS: ClassVar["MaintenanceUpdateDataAttributesStatus"] + COMPLETED: ClassVar["MaintenanceUpdateDataAttributesStatus"] + CANCELED: ClassVar["MaintenanceUpdateDataAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MaintenanceUpdateDataAttributesStatus.SCHEDULED = MaintenanceUpdateDataAttributesStatus("scheduled") +MaintenanceUpdateDataAttributesStatus.IN_PROGRESS = MaintenanceUpdateDataAttributesStatus("in_progress") +MaintenanceUpdateDataAttributesStatus.COMPLETED = MaintenanceUpdateDataAttributesStatus("completed") +MaintenanceUpdateDataAttributesStatus.CANCELED = MaintenanceUpdateDataAttributesStatus("canceled") diff --git a/datadog_api_client/v2/model/maintenance_update_data_relationships.py b/datadog_api_client/v2/model/maintenance_update_data_relationships.py new file mode 100644 index 0000000000..1c0cbc13f1 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_update_data_relationships.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_update_data_relationships_user import MaintenanceUpdateDataRelationshipsUser + from datadog_api_client.v2.model.maintenance_update_data_relationships_maintenance import MaintenanceUpdateDataRelationshipsMaintenance + +class MaintenanceUpdateDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_update_data_relationships_user import MaintenanceUpdateDataRelationshipsUser + from datadog_api_client.v2.model.maintenance_update_data_relationships_maintenance import MaintenanceUpdateDataRelationshipsMaintenance + return { + "created_by_user": (MaintenanceUpdateDataRelationshipsUser,), + "last_modified_by_user": (MaintenanceUpdateDataRelationshipsUser,), + "maintenance": (MaintenanceUpdateDataRelationshipsMaintenance,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + "maintenance": "maintenance", + } + + def __init__(self_, created_by_user: Union[MaintenanceUpdateDataRelationshipsUser, UnsetType]=unset, last_modified_by_user: Union[MaintenanceUpdateDataRelationshipsUser, UnsetType]=unset, maintenance: Union[MaintenanceUpdateDataRelationshipsMaintenance, UnsetType]=unset, **kwargs): + """ + Relationships of a maintenance update resource. + + :param created_by_user: A user relationship of a maintenance update. + :type created_by_user: MaintenanceUpdateDataRelationshipsUser, optional + + :param last_modified_by_user: A user relationship of a maintenance update. + :type last_modified_by_user: MaintenanceUpdateDataRelationshipsUser, optional + + :param maintenance: The parent maintenance of the update. + :type maintenance: MaintenanceUpdateDataRelationshipsMaintenance, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if maintenance is not unset: + kwargs["maintenance"] = maintenance + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_update_data_relationships_maintenance.py b/datadog_api_client/v2/model/maintenance_update_data_relationships_maintenance.py new file mode 100644 index 0000000000..78973bcce3 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_update_data_relationships_maintenance.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_update_data_relationships_maintenance_data import MaintenanceUpdateDataRelationshipsMaintenanceData + +class MaintenanceUpdateDataRelationshipsMaintenance(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_update_data_relationships_maintenance_data import MaintenanceUpdateDataRelationshipsMaintenanceData + return { + "data": (MaintenanceUpdateDataRelationshipsMaintenanceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceUpdateDataRelationshipsMaintenanceData, **kwargs): + """ + The parent maintenance of the update. + + :param data: The maintenance linked to a maintenance update. + :type data: MaintenanceUpdateDataRelationshipsMaintenanceData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_update_data_relationships_maintenance_data.py b/datadog_api_client/v2/model/maintenance_update_data_relationships_maintenance_data.py new file mode 100644 index 0000000000..3393863dcd --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_update_data_relationships_maintenance_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + +class MaintenanceUpdateDataRelationshipsMaintenanceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + return { + "id": (UUID,), + "type": (PatchMaintenanceRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: PatchMaintenanceRequestDataType, **kwargs): + """ + The maintenance linked to a maintenance update. + + :param id: The ID of the maintenance. + :type id: UUID + + :param type: Maintenances resource type. + :type type: PatchMaintenanceRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_update_data_relationships_user.py b/datadog_api_client/v2/model/maintenance_update_data_relationships_user.py new file mode 100644 index 0000000000..488adfe2db --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_update_data_relationships_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_update_data_relationships_user_data import MaintenanceUpdateDataRelationshipsUserData + +class MaintenanceUpdateDataRelationshipsUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_update_data_relationships_user_data import MaintenanceUpdateDataRelationshipsUserData + return { + "data": (MaintenanceUpdateDataRelationshipsUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceUpdateDataRelationshipsUserData, **kwargs): + """ + A user relationship of a maintenance update. + + :param data: The data object identifying a Datadog user linked to a maintenance update. + :type data: MaintenanceUpdateDataRelationshipsUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_update_data_relationships_user_data.py b/datadog_api_client/v2/model/maintenance_update_data_relationships_user_data.py new file mode 100644 index 0000000000..aea773a0b2 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_update_data_relationships_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class MaintenanceUpdateDataRelationshipsUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (UUID,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPagesUserType, **kwargs): + """ + The data object identifying a Datadog user linked to a maintenance update. + + :param id: The ID of the Datadog user. + :type id: UUID + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_window.py b/datadog_api_client/v2/model/maintenance_window.py new file mode 100644 index 0000000000..bc66a3d2dd --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_window_attributes import MaintenanceWindowAttributes + from datadog_api_client.v2.model.maintenance_window_resource_type import MaintenanceWindowResourceType + +class MaintenanceWindow(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_window_attributes import MaintenanceWindowAttributes + from datadog_api_client.v2.model.maintenance_window_resource_type import MaintenanceWindowResourceType + return { + "attributes": (MaintenanceWindowAttributes,), + "id": (str,), + "type": (MaintenanceWindowResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: MaintenanceWindowAttributes, id: str, type: MaintenanceWindowResourceType, **kwargs): + """ + A maintenance window that defines a scheduled time period during which case-related notifications and automation rules are suppressed. Each maintenance window applies to cases matching a specified query. + + :param attributes: Attributes of a maintenance window, including its schedule and the query that determines which cases are affected. + :type attributes: MaintenanceWindowAttributes + + :param id: The maintenance window's identifier. + :type id: str + + :param type: JSON:API resource type for maintenance windows. + :type type: MaintenanceWindowResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_window_attributes.py b/datadog_api_client/v2/model/maintenance_window_attributes.py new file mode 100644 index 0000000000..207cf4da24 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MaintenanceWindowAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_by": (str,), + "end_at": (datetime,), + "name": (str,), + "query": (str,), + "start_at": (datetime,), + "updated_by": (str,), + } + attribute_map = { + "created_by": "created_by", + "end_at": "end_at", + "name": "name", + "query": "query", + "start_at": "start_at", + "updated_by": "updated_by", + } + read_only_vars = { + "created_by", + "updated_by", + } + + def __init__(self_, end_at: datetime, name: str, query: str, start_at: datetime, created_by: Union[str, UnsetType]=unset, updated_by: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a maintenance window, including its schedule and the query that determines which cases are affected. + + :param created_by: The UUID of the user who created this maintenance window. Read-only. + :type created_by: str, optional + + :param end_at: The ISO 8601 timestamp when the maintenance window ends and normal notification behavior resumes. + :type end_at: datetime + + :param name: A human-readable name for the maintenance window (for example, ``Database migration - Dec 15`` ). + :type name: str + + :param query: A case search query that determines which cases are affected during the maintenance window. Uses the same syntax as the Case Management search bar. + :type query: str + + :param start_at: The ISO 8601 timestamp when the maintenance window begins and notifications start being suppressed. + :type start_at: datetime + + :param updated_by: The UUID of the user who last modified this maintenance window. Read-only. + :type updated_by: str, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if updated_by is not unset: + kwargs["updated_by"] = updated_by + super().__init__(kwargs) + + + self_.end_at = end_at + self_.name = name + self_.query = query + self_.start_at = start_at diff --git a/datadog_api_client/v2/model/maintenance_window_create.py b/datadog_api_client/v2/model/maintenance_window_create.py new file mode 100644 index 0000000000..e034a1b7ea --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_window_create_attributes import MaintenanceWindowCreateAttributes + from datadog_api_client.v2.model.maintenance_window_resource_type import MaintenanceWindowResourceType + +class MaintenanceWindowCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_window_create_attributes import MaintenanceWindowCreateAttributes + from datadog_api_client.v2.model.maintenance_window_resource_type import MaintenanceWindowResourceType + return { + "attributes": (MaintenanceWindowCreateAttributes,), + "type": (MaintenanceWindowResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MaintenanceWindowCreateAttributes, type: MaintenanceWindowResourceType, **kwargs): + """ + Data object for creating a maintenance window. + + :param attributes: Attributes required to create a maintenance window. + :type attributes: MaintenanceWindowCreateAttributes + + :param type: JSON:API resource type for maintenance windows. + :type type: MaintenanceWindowResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_window_create_attributes.py b/datadog_api_client/v2/model/maintenance_window_create_attributes.py new file mode 100644 index 0000000000..45c66a1112 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window_create_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MaintenanceWindowCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end_at": (datetime,), + "name": (str,), + "query": (str,), + "start_at": (datetime,), + } + attribute_map = { + "end_at": "end_at", + "name": "name", + "query": "query", + "start_at": "start_at", + } + + def __init__(self_, end_at: datetime, name: str, query: str, start_at: datetime, **kwargs): + """ + Attributes required to create a maintenance window. + + :param end_at: The end time of the maintenance window. + :type end_at: datetime + + :param name: The name of the maintenance window. + :type name: str + + :param query: The query to filter event management cases for this maintenance window. + :type query: str + + :param start_at: The start time of the maintenance window. + :type start_at: datetime + """ + super().__init__(kwargs) + + + self_.end_at = end_at + self_.name = name + self_.query = query + self_.start_at = start_at diff --git a/datadog_api_client/v2/model/maintenance_window_create_request.py b/datadog_api_client/v2/model/maintenance_window_create_request.py new file mode 100644 index 0000000000..403241c97a --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_window_create import MaintenanceWindowCreate + +class MaintenanceWindowCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_window_create import MaintenanceWindowCreate + return { + "data": (MaintenanceWindowCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceWindowCreate, **kwargs): + """ + Request payload for creating a maintenance window. + + :param data: Data object for creating a maintenance window. + :type data: MaintenanceWindowCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_window_resource_type.py b/datadog_api_client/v2/model/maintenance_window_resource_type.py new file mode 100644 index 0000000000..bfd9ca9f46 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MaintenanceWindowResourceType(ModelSimple): + """ + JSON:API resource type for maintenance windows. + + :param value: If omitted defaults to "maintenance_window". Must be one of ["maintenance_window"]. + :type value: str + """ + + allowed_values = { + "maintenance_window", + } + MAINTENANCE_WINDOW: ClassVar["MaintenanceWindowResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MaintenanceWindowResourceType.MAINTENANCE_WINDOW = MaintenanceWindowResourceType("maintenance_window") diff --git a/datadog_api_client/v2/model/maintenance_window_response.py b/datadog_api_client/v2/model/maintenance_window_response.py new file mode 100644 index 0000000000..b5691724ce --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_window import MaintenanceWindow + +class MaintenanceWindowResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_window import MaintenanceWindow + return { + "data": (MaintenanceWindow,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceWindow, **kwargs): + """ + Response containing a single maintenance window. + + :param data: A maintenance window that defines a scheduled time period during which case-related notifications and automation rules are suppressed. Each maintenance window applies to cases matching a specified query. + :type data: MaintenanceWindow + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_window_update.py b/datadog_api_client/v2/model/maintenance_window_update.py new file mode 100644 index 0000000000..b64cccd151 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window_update.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_window_update_attributes import MaintenanceWindowUpdateAttributes + from datadog_api_client.v2.model.maintenance_window_resource_type import MaintenanceWindowResourceType + +class MaintenanceWindowUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_window_update_attributes import MaintenanceWindowUpdateAttributes + from datadog_api_client.v2.model.maintenance_window_resource_type import MaintenanceWindowResourceType + return { + "attributes": (MaintenanceWindowUpdateAttributes,), + "type": (MaintenanceWindowResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: MaintenanceWindowResourceType, attributes: Union[MaintenanceWindowUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating a maintenance window. + + :param attributes: Attributes that can be updated on a maintenance window. All fields are optional; only provided fields are changed. + :type attributes: MaintenanceWindowUpdateAttributes, optional + + :param type: JSON:API resource type for maintenance windows. + :type type: MaintenanceWindowResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/maintenance_window_update_attributes.py b/datadog_api_client/v2/model/maintenance_window_update_attributes.py new file mode 100644 index 0000000000..112c74c0ca --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window_update_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MaintenanceWindowUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end_at": (datetime,), + "name": (str,), + "query": (str,), + "start_at": (datetime,), + } + attribute_map = { + "end_at": "end_at", + "name": "name", + "query": "query", + "start_at": "start_at", + } + + def __init__(self_, end_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, start_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes that can be updated on a maintenance window. All fields are optional; only provided fields are changed. + + :param end_at: The end time of the maintenance window. + :type end_at: datetime, optional + + :param name: The name of the maintenance window. + :type name: str, optional + + :param query: The query to filter event management cases for this maintenance window. + :type query: str, optional + + :param start_at: The start time of the maintenance window. + :type start_at: datetime, optional + """ + if end_at is not unset: + kwargs["end_at"] = end_at + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if start_at is not unset: + kwargs["start_at"] = start_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/maintenance_window_update_request.py b/datadog_api_client/v2/model/maintenance_window_update_request.py new file mode 100644 index 0000000000..587c3ae97a --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_window_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_window_update import MaintenanceWindowUpdate + +class MaintenanceWindowUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_window_update import MaintenanceWindowUpdate + return { + "data": (MaintenanceWindowUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaintenanceWindowUpdate, **kwargs): + """ + Request payload for updating a maintenance window. + + :param data: Data object for updating a maintenance window. + :type data: MaintenanceWindowUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/maintenance_windows_response.py b/datadog_api_client/v2/model/maintenance_windows_response.py new file mode 100644 index 0000000000..151ea4fde7 --- /dev/null +++ b/datadog_api_client/v2/model/maintenance_windows_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.maintenance_window import MaintenanceWindow + +class MaintenanceWindowsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.maintenance_window import MaintenanceWindow + return { + "data": ([MaintenanceWindow],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[MaintenanceWindow], **kwargs): + """ + Response containing a list of maintenance windows. + + :param data: List of maintenance windows. + :type data: [MaintenanceWindow] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/managed_orgs_data.py b/datadog_api_client/v2/model/managed_orgs_data.py new file mode 100644 index 0000000000..a1d6f20f65 --- /dev/null +++ b/datadog_api_client/v2/model/managed_orgs_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.managed_orgs_relationships import ManagedOrgsRelationships + from datadog_api_client.v2.model.managed_orgs_type import ManagedOrgsType + +class ManagedOrgsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.managed_orgs_relationships import ManagedOrgsRelationships + from datadog_api_client.v2.model.managed_orgs_type import ManagedOrgsType + return { + "id": (UUID,), + "relationships": (ManagedOrgsRelationships,), + "type": (ManagedOrgsType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: UUID, relationships: ManagedOrgsRelationships, type: ManagedOrgsType, **kwargs): + """ + The managed organizations resource. + + :param id: The UUID of the current organization. + :type id: UUID + + :param relationships: Relationships of the managed organizations resource. + :type relationships: ManagedOrgsRelationships + + :param type: The resource type for managed organizations. + :type type: ManagedOrgsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/managed_orgs_relationship_to_org.py b/datadog_api_client/v2/model/managed_orgs_relationship_to_org.py new file mode 100644 index 0000000000..893cf49647 --- /dev/null +++ b/datadog_api_client/v2/model/managed_orgs_relationship_to_org.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_relationship_data import OrgRelationshipData + +class ManagedOrgsRelationshipToOrg(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_relationship_data import OrgRelationshipData + return { + "data": (OrgRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgRelationshipData, **kwargs): + """ + Relationship to the current organization. + + :param data: Reference to an organization resource. + :type data: OrgRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/managed_orgs_relationship_to_orgs.py b/datadog_api_client/v2/model/managed_orgs_relationship_to_orgs.py new file mode 100644 index 0000000000..5becd48cf1 --- /dev/null +++ b/datadog_api_client/v2/model/managed_orgs_relationship_to_orgs.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_relationship_data import OrgRelationshipData + +class ManagedOrgsRelationshipToOrgs(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_relationship_data import OrgRelationshipData + return { + "data": ([OrgRelationshipData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[OrgRelationshipData], **kwargs): + """ + Relationship to the managed organizations. + + :param data: List of managed organization references. + :type data: [OrgRelationshipData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/managed_orgs_relationships.py b/datadog_api_client/v2/model/managed_orgs_relationships.py new file mode 100644 index 0000000000..2313e33033 --- /dev/null +++ b/datadog_api_client/v2/model/managed_orgs_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.managed_orgs_relationship_to_org import ManagedOrgsRelationshipToOrg + from datadog_api_client.v2.model.managed_orgs_relationship_to_orgs import ManagedOrgsRelationshipToOrgs + +class ManagedOrgsRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.managed_orgs_relationship_to_org import ManagedOrgsRelationshipToOrg + from datadog_api_client.v2.model.managed_orgs_relationship_to_orgs import ManagedOrgsRelationshipToOrgs + return { + "current_org": (ManagedOrgsRelationshipToOrg,), + "managed_orgs": (ManagedOrgsRelationshipToOrgs,), + } + attribute_map = { + "current_org": "current_org", + "managed_orgs": "managed_orgs", + } + + def __init__(self_, current_org: ManagedOrgsRelationshipToOrg, managed_orgs: ManagedOrgsRelationshipToOrgs, **kwargs): + """ + Relationships of the managed organizations resource. + + :param current_org: Relationship to the current organization. + :type current_org: ManagedOrgsRelationshipToOrg + + :param managed_orgs: Relationship to the managed organizations. + :type managed_orgs: ManagedOrgsRelationshipToOrgs + """ + super().__init__(kwargs) + + + self_.current_org = current_org + self_.managed_orgs = managed_orgs diff --git a/datadog_api_client/v2/model/managed_orgs_response.py b/datadog_api_client/v2/model/managed_orgs_response.py new file mode 100644 index 0000000000..b60c3d2c1b --- /dev/null +++ b/datadog_api_client/v2/model/managed_orgs_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.managed_orgs_data import ManagedOrgsData + from datadog_api_client.v2.model.org_data import OrgData + +class ManagedOrgsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.managed_orgs_data import ManagedOrgsData + from datadog_api_client.v2.model.org_data import OrgData + return { + "data": (ManagedOrgsData,), + "included": ([OrgData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: ManagedOrgsData, included: List[OrgData], **kwargs): + """ + Response containing the current organization and its managed organizations. + + :param data: The managed organizations resource. + :type data: ManagedOrgsData + + :param included: Included organization resources. + :type included: [OrgData] + """ + super().__init__(kwargs) + + + self_.data = data + self_.included = included diff --git a/datadog_api_client/v2/model/managed_orgs_type.py b/datadog_api_client/v2/model/managed_orgs_type.py new file mode 100644 index 0000000000..c9c171abf9 --- /dev/null +++ b/datadog_api_client/v2/model/managed_orgs_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ManagedOrgsType(ModelSimple): + """ + The resource type for managed organizations. + + :param value: If omitted defaults to "managed_orgs". Must be one of ["managed_orgs"]. + :type value: str + """ + + allowed_values = { + "managed_orgs", + } + MANAGED_ORGS: ClassVar["ManagedOrgsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ManagedOrgsType.MANAGED_ORGS = ManagedOrgsType("managed_orgs") diff --git a/datadog_api_client/v2/model/max_session_duration_type.py b/datadog_api_client/v2/model/max_session_duration_type.py new file mode 100644 index 0000000000..094be35253 --- /dev/null +++ b/datadog_api_client/v2/model/max_session_duration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MaxSessionDurationType(ModelSimple): + """ + Data type of a maximum session duration update. + + :param value: If omitted defaults to "max_session_duration". Must be one of ["max_session_duration"]. + :type value: str + """ + + allowed_values = { + "max_session_duration", + } + MAX_SESSION_DURATION: ClassVar["MaxSessionDurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MaxSessionDurationType.MAX_SESSION_DURATION = MaxSessionDurationType("max_session_duration") diff --git a/datadog_api_client/v2/model/max_session_duration_update_attributes.py b/datadog_api_client/v2/model/max_session_duration_update_attributes.py new file mode 100644 index 0000000000..a19a69b8cb --- /dev/null +++ b/datadog_api_client/v2/model/max_session_duration_update_attributes.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MaxSessionDurationUpdateAttributes(ModelNormal): + validations = { + "max_session_duration": { + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "max_session_duration": (int,), + } + attribute_map = { + "max_session_duration": "max_session_duration", + } + + def __init__(self_, max_session_duration: int, **kwargs): + """ + Attributes for the maximum session duration update request. + + :param max_session_duration: The maximum session duration, in seconds. + :type max_session_duration: int + """ + super().__init__(kwargs) + + + self_.max_session_duration = max_session_duration diff --git a/datadog_api_client/v2/model/max_session_duration_update_data.py b/datadog_api_client/v2/model/max_session_duration_update_data.py new file mode 100644 index 0000000000..f58d9a33f9 --- /dev/null +++ b/datadog_api_client/v2/model/max_session_duration_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.max_session_duration_update_attributes import MaxSessionDurationUpdateAttributes + from datadog_api_client.v2.model.max_session_duration_type import MaxSessionDurationType + +class MaxSessionDurationUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.max_session_duration_update_attributes import MaxSessionDurationUpdateAttributes + from datadog_api_client.v2.model.max_session_duration_type import MaxSessionDurationType + return { + "attributes": (MaxSessionDurationUpdateAttributes,), + "type": (MaxSessionDurationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MaxSessionDurationUpdateAttributes, type: MaxSessionDurationType, **kwargs): + """ + The data object for a maximum session duration update request. + + :param attributes: Attributes for the maximum session duration update request. + :type attributes: MaxSessionDurationUpdateAttributes + + :param type: Data type of a maximum session duration update. + :type type: MaxSessionDurationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/max_session_duration_update_request.py b/datadog_api_client/v2/model/max_session_duration_update_request.py new file mode 100644 index 0000000000..fccd0c7b1e --- /dev/null +++ b/datadog_api_client/v2/model/max_session_duration_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.max_session_duration_update_data import MaxSessionDurationUpdateData + +class MaxSessionDurationUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.max_session_duration_update_data import MaxSessionDurationUpdateData + return { + "data": (MaxSessionDurationUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MaxSessionDurationUpdateData, **kwargs): + """ + A request to update the maximum session duration for an organization. + + :param data: The data object for a maximum session duration update request. + :type data: MaxSessionDurationUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/mcp_scan_request.py b/datadog_api_client/v2/model/mcp_scan_request.py new file mode 100644 index 0000000000..2ae5b19550 --- /dev/null +++ b/datadog_api_client/v2/model/mcp_scan_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mcp_scan_request_data import McpScanRequestData + +class McpScanRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mcp_scan_request_data import McpScanRequestData + return { + "data": (McpScanRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: McpScanRequestData, **kwargs): + """ + The top-level request object for submitting an MCP SCA dependency scan. + + :param data: The data object in an MCP SCA scan request, containing the scan attributes and request type. + :type data: McpScanRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/mcp_scan_request_data.py b/datadog_api_client/v2/model/mcp_scan_request_data.py new file mode 100644 index 0000000000..435ecc7ea1 --- /dev/null +++ b/datadog_api_client/v2/model/mcp_scan_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mcp_scan_request_data_attributes import McpScanRequestDataAttributes + from datadog_api_client.v2.model.mcp_scan_request_data_type import McpScanRequestDataType + +class McpScanRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mcp_scan_request_data_attributes import McpScanRequestDataAttributes + from datadog_api_client.v2.model.mcp_scan_request_data_type import McpScanRequestDataType + return { + "attributes": (McpScanRequestDataAttributes,), + "id": (str,), + "type": (McpScanRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: McpScanRequestDataAttributes, type: McpScanRequestDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object in an MCP SCA scan request, containing the scan attributes and request type. + + :param attributes: The attributes of an MCP SCA scan request, describing the libraries to scan and their context. + :type attributes: McpScanRequestDataAttributes + + :param id: An optional identifier for this scan request. + :type id: str, optional + + :param type: The type identifier for MCP SCA scan requests. + :type type: McpScanRequestDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/mcp_scan_request_data_attributes.py b/datadog_api_client/v2/model/mcp_scan_request_data_attributes.py new file mode 100644 index 0000000000..b18b565af9 --- /dev/null +++ b/datadog_api_client/v2/model/mcp_scan_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mcp_scan_request_data_attributes_libraries_items import McpScanRequestDataAttributesLibrariesItems + +class McpScanRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mcp_scan_request_data_attributes_libraries_items import McpScanRequestDataAttributesLibrariesItems + return { + "commit_hash": (str,), + "libraries": ([McpScanRequestDataAttributesLibrariesItems],), + "resource_name": (str,), + } + attribute_map = { + "commit_hash": "commit_hash", + "libraries": "libraries", + "resource_name": "resource_name", + } + + def __init__(self_, commit_hash: str, libraries: List[McpScanRequestDataAttributesLibrariesItems], resource_name: str, **kwargs): + """ + The attributes of an MCP SCA scan request, describing the libraries to scan and their context. + + :param commit_hash: The commit hash of the source code being scanned. + :type commit_hash: str + + :param libraries: The list of libraries to scan for vulnerabilities. + :type libraries: [McpScanRequestDataAttributesLibrariesItems] + + :param resource_name: The name of the resource (typically the repository or project name) being scanned. + :type resource_name: str + """ + super().__init__(kwargs) + + + self_.commit_hash = commit_hash + self_.libraries = libraries + self_.resource_name = resource_name diff --git a/datadog_api_client/v2/model/mcp_scan_request_data_attributes_libraries_items.py b/datadog_api_client/v2/model/mcp_scan_request_data_attributes_libraries_items.py new file mode 100644 index 0000000000..93b67cc99f --- /dev/null +++ b/datadog_api_client/v2/model/mcp_scan_request_data_attributes_libraries_items.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class McpScanRequestDataAttributesLibrariesItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "exclusions": ([str],), + "is_dev": (bool,), + "is_direct": (bool,), + "package_manager": (str,), + "purl": (str,), + "target_frameworks": ([str],), + } + attribute_map = { + "exclusions": "exclusions", + "is_dev": "is_dev", + "is_direct": "is_direct", + "package_manager": "package_manager", + "purl": "purl", + "target_frameworks": "target_frameworks", + } + + def __init__(self_, is_dev: bool, is_direct: bool, package_manager: str, purl: str, exclusions: Union[List[str], UnsetType]=unset, target_frameworks: Union[List[str], UnsetType]=unset, **kwargs): + """ + A library declaration to include in the dependency scan. + + :param exclusions: The list of dependency PURLs to exclude when resolving transitive dependencies for this library. + :type exclusions: [str], optional + + :param is_dev: Whether this library is a development-only dependency. + :type is_dev: bool + + :param is_direct: Whether this library is a direct (rather than transitive) dependency. + :type is_direct: bool + + :param package_manager: The package manager that produced this library entry (for example, ``npm`` , ``pip`` , ``nuget`` ). + :type package_manager: str + + :param purl: The Package URL (PURL) uniquely identifying the library and its version. + :type purl: str + + :param target_frameworks: The list of target framework identifiers associated with the library. + :type target_frameworks: [str], optional + """ + if exclusions is not unset: + kwargs["exclusions"] = exclusions + if target_frameworks is not unset: + kwargs["target_frameworks"] = target_frameworks + super().__init__(kwargs) + + + self_.is_dev = is_dev + self_.is_direct = is_direct + self_.package_manager = package_manager + self_.purl = purl diff --git a/datadog_api_client/v2/model/mcp_scan_request_data_type.py b/datadog_api_client/v2/model/mcp_scan_request_data_type.py new file mode 100644 index 0000000000..d0caf28f42 --- /dev/null +++ b/datadog_api_client/v2/model/mcp_scan_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class McpScanRequestDataType(ModelSimple): + """ + The type identifier for MCP SCA scan requests. + + :param value: If omitted defaults to "mcpscanrequest". Must be one of ["mcpscanrequest"]. + :type value: str + """ + + allowed_values = { + "mcpscanrequest", + } + MCPSCANREQUEST: ClassVar["McpScanRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +McpScanRequestDataType.MCPSCANREQUEST = McpScanRequestDataType("mcpscanrequest") diff --git a/datadog_api_client/v2/model/mcp_scan_request_response.py b/datadog_api_client/v2/model/mcp_scan_request_response.py new file mode 100644 index 0000000000..72e5d459bd --- /dev/null +++ b/datadog_api_client/v2/model/mcp_scan_request_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mcp_scan_request_response_data import McpScanRequestResponseData + +class McpScanRequestResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mcp_scan_request_response_data import McpScanRequestResponseData + return { + "data": (McpScanRequestResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: McpScanRequestResponseData, **kwargs): + """ + The top-level response object returned when an MCP SCA dependency scan request has been accepted. + + :param data: The data object returned when a scan request has been accepted. + :type data: McpScanRequestResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/mcp_scan_request_response_data.py b/datadog_api_client/v2/model/mcp_scan_request_response_data.py new file mode 100644 index 0000000000..0b23e90976 --- /dev/null +++ b/datadog_api_client/v2/model/mcp_scan_request_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mcp_scan_request_response_data_attributes import McpScanRequestResponseDataAttributes + from datadog_api_client.v2.model.mcp_scan_request_response_data_type import McpScanRequestResponseDataType + +class McpScanRequestResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mcp_scan_request_response_data_attributes import McpScanRequestResponseDataAttributes + from datadog_api_client.v2.model.mcp_scan_request_response_data_type import McpScanRequestResponseDataType + return { + "attributes": (McpScanRequestResponseDataAttributes,), + "id": (str,), + "type": (McpScanRequestResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: McpScanRequestResponseDataAttributes, id: str, type: McpScanRequestResponseDataType, **kwargs): + """ + The data object returned when a scan request has been accepted. + + :param attributes: The attributes returned when a scan request has been accepted, containing the job identifier used to poll for results. + :type attributes: McpScanRequestResponseDataAttributes + + :param id: The job identifier assigned to the scan. + :type id: str + + :param type: The type identifier for MCP SCA scan request responses. + :type type: McpScanRequestResponseDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/mcp_scan_request_response_data_attributes.py b/datadog_api_client/v2/model/mcp_scan_request_response_data_attributes.py new file mode 100644 index 0000000000..cb28b9c5b9 --- /dev/null +++ b/datadog_api_client/v2/model/mcp_scan_request_response_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class McpScanRequestResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "job_id": (str,), + } + attribute_map = { + "job_id": "job_id", + } + + def __init__(self_, job_id: str, **kwargs): + """ + The attributes returned when a scan request has been accepted, containing the job identifier used to poll for results. + + :param job_id: The job identifier assigned to the scan, used to retrieve the scan result. + :type job_id: str + """ + super().__init__(kwargs) + + + self_.job_id = job_id diff --git a/datadog_api_client/v2/model/mcp_scan_request_response_data_type.py b/datadog_api_client/v2/model/mcp_scan_request_response_data_type.py new file mode 100644 index 0000000000..3f725b62ed --- /dev/null +++ b/datadog_api_client/v2/model/mcp_scan_request_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class McpScanRequestResponseDataType(ModelSimple): + """ + The type identifier for MCP SCA scan request responses. + + :param value: If omitted defaults to "mcpscanrequestresponse". Must be one of ["mcpscanrequestresponse"]. + :type value: str + """ + + allowed_values = { + "mcpscanrequestresponse", + } + MCPSCANREQUESTRESPONSE: ClassVar["McpScanRequestResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +McpScanRequestResponseDataType.MCPSCANREQUESTRESPONSE = McpScanRequestResponseDataType("mcpscanrequestresponse") diff --git a/datadog_api_client/v2/model/member_team.py b/datadog_api_client/v2/model/member_team.py new file mode 100644 index 0000000000..262cde0cbd --- /dev/null +++ b/datadog_api_client/v2/model/member_team.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.member_team_type import MemberTeamType + +class MemberTeam(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.member_team_type import MemberTeamType + return { + "id": (str,), + "type": (MemberTeamType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MemberTeamType, **kwargs): + """ + A member team + + :param id: The member team's identifier + :type id: str + + :param type: Member team type + :type type: MemberTeamType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/member_team_type.py b/datadog_api_client/v2/model/member_team_type.py new file mode 100644 index 0000000000..bfb8a76c98 --- /dev/null +++ b/datadog_api_client/v2/model/member_team_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MemberTeamType(ModelSimple): + """ + Member team type + + :param value: If omitted defaults to "member_teams". Must be one of ["member_teams"]. + :type value: str + """ + + allowed_values = { + "member_teams", + } + MEMBER_TEAMS: ClassVar["MemberTeamType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MemberTeamType.MEMBER_TEAMS = MemberTeamType("member_teams") diff --git a/datadog_api_client/v2/model/metadata.py b/datadog_api_client/v2/model/metadata.py new file mode 100644 index 0000000000..82dafdf931 --- /dev/null +++ b/datadog_api_client/v2/model/metadata.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Metadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "token": (str,), + "total": (int,), + } + attribute_map = { + "count": "count", + "token": "token", + "total": "total", + } + + def __init__(self_, count: int, token: str, total: int, **kwargs): + """ + The metadata related to this request. + + :param count: Number of entities included in the response. + :type count: int + + :param token: The token that identifies the request. + :type token: str + + :param total: Total number of entities across all pages. + :type total: int + """ + super().__init__(kwargs) + + + self_.count = count + self_.token = token + self_.total = total diff --git a/datadog_api_client/v2/model/metric.py b/datadog_api_client/v2/model/metric.py new file mode 100644 index 0000000000..95d46bcdcf --- /dev/null +++ b/datadog_api_client/v2/model/metric.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_relationships import MetricRelationships + from datadog_api_client.v2.model.metric_type import MetricType + +class Metric(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_relationships import MetricRelationships + from datadog_api_client.v2.model.metric_type import MetricType + return { + "id": (str,), + "relationships": (MetricRelationships,), + "type": (MetricType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, relationships: Union[MetricRelationships, UnsetType]=unset, type: Union[MetricType, UnsetType]=unset, **kwargs): + """ + Object for a single metric. + + :param id: The metric name for this resource. + :type id: str, optional + + :param relationships: Relationships for a metric. + :type relationships: MetricRelationships, optional + + :param type: The metric resource type. + :type type: MetricType, optional + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_active_configuration_type.py b/datadog_api_client/v2/model/metric_active_configuration_type.py new file mode 100644 index 0000000000..d32462069c --- /dev/null +++ b/datadog_api_client/v2/model/metric_active_configuration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricActiveConfigurationType(ModelSimple): + """ + The metric actively queried configuration resource type. + + :param value: If omitted defaults to "actively_queried_configurations". Must be one of ["actively_queried_configurations"]. + :type value: str + """ + + allowed_values = { + "actively_queried_configurations", + } + ACTIVELY_QUERIED_CONFIGURATIONS: ClassVar["MetricActiveConfigurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricActiveConfigurationType.ACTIVELY_QUERIED_CONFIGURATIONS = MetricActiveConfigurationType("actively_queried_configurations") diff --git a/datadog_api_client/v2/model/metric_all_tags.py b/datadog_api_client/v2/model/metric_all_tags.py new file mode 100644 index 0000000000..bb4feac131 --- /dev/null +++ b/datadog_api_client/v2/model/metric_all_tags.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_all_tags_attributes import MetricAllTagsAttributes + from datadog_api_client.v2.model.metric_type import MetricType + +class MetricAllTags(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_all_tags_attributes import MetricAllTagsAttributes + from datadog_api_client.v2.model.metric_type import MetricType + return { + "attributes": (MetricAllTagsAttributes,), + "id": (str,), + "type": (MetricType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MetricAllTagsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MetricType, UnsetType]=unset, **kwargs): + """ + Object for a single metric's indexed and ingested tags. + + :param attributes: Object containing the definition of a metric's indexed and ingested tags. + :type attributes: MetricAllTagsAttributes, optional + + :param id: The metric name for this resource. + :type id: str, optional + + :param type: The metric resource type. + :type type: MetricType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_all_tags_attributes.py b/datadog_api_client/v2/model/metric_all_tags_attributes.py new file mode 100644 index 0000000000..ff196f02be --- /dev/null +++ b/datadog_api_client/v2/model/metric_all_tags_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricAllTagsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ingested_tags": ([str],), + "tags": ([str],), + } + attribute_map = { + "ingested_tags": "ingested_tags", + "tags": "tags", + } + + def __init__(self_, ingested_tags: Union[List[str], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing the definition of a metric's indexed and ingested tags. + + :param ingested_tags: List of ingested tags that are not indexed. + :type ingested_tags: [str], optional + + :param tags: List of indexed tags. + :type tags: [str], optional + """ + if ingested_tags is not unset: + kwargs["ingested_tags"] = ingested_tags + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_all_tags_response.py b/datadog_api_client/v2/model/metric_all_tags_response.py new file mode 100644 index 0000000000..9679618098 --- /dev/null +++ b/datadog_api_client/v2/model/metric_all_tags_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_all_tags import MetricAllTags + +class MetricAllTagsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_all_tags import MetricAllTags + return { + "data": (MetricAllTags,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MetricAllTags, UnsetType]=unset, **kwargs): + """ + Response object that includes a single metric's indexed and ingested tags. + + :param data: Object for a single metric's indexed and ingested tags. + :type data: MetricAllTags, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_attributes.py b/datadog_api_client/v2/model/metric_asset_attributes.py new file mode 100644 index 0000000000..71f5c0b191 --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricAssetAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "tags": ([str],), + "title": (str,), + "url": (str,), + } + attribute_map = { + "tags": "tags", + "title": "title", + "url": "url", + } + + def __init__(self_, tags: Union[List[str], UnsetType]=unset, title: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Assets related to the object, including title, url, and tags. + + :param tags: List of tag keys used in the asset. + :type tags: [str], optional + + :param title: Title of the asset. + :type title: str, optional + + :param url: URL path of the asset. + :type url: str, optional + """ + if tags is not unset: + kwargs["tags"] = tags + if title is not unset: + kwargs["title"] = title + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_dashboard_relationship.py b/datadog_api_client/v2/model/metric_asset_dashboard_relationship.py new file mode 100644 index 0000000000..0b409e94c3 --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_dashboard_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_dashboard_type import MetricDashboardType + +class MetricAssetDashboardRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_dashboard_type import MetricDashboardType + return { + "id": (str,), + "type": (MetricDashboardType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[MetricDashboardType, UnsetType]=unset, **kwargs): + """ + An object of type ``dashboard`` that can be referenced in the ``included`` data. + + :param id: The related dashboard's ID. + :type id: str, optional + + :param type: Dashboard resource type. + :type type: MetricDashboardType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_dashboard_relationships.py b/datadog_api_client/v2/model/metric_asset_dashboard_relationships.py new file mode 100644 index 0000000000..2dd255d231 --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_dashboard_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_dashboard_relationship import MetricAssetDashboardRelationship + +class MetricAssetDashboardRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_dashboard_relationship import MetricAssetDashboardRelationship + return { + "data": ([MetricAssetDashboardRelationship],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[MetricAssetDashboardRelationship], UnsetType]=unset, **kwargs): + """ + An object containing the list of dashboards that can be referenced in the ``included`` data. + + :param data: A list of dashboards that can be referenced in the ``included`` data. + :type data: [MetricAssetDashboardRelationship], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_monitor_relationship.py b/datadog_api_client/v2/model/metric_asset_monitor_relationship.py new file mode 100644 index 0000000000..4586c10e97 --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_monitor_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_monitor_type import MetricMonitorType + +class MetricAssetMonitorRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_monitor_type import MetricMonitorType + return { + "id": (str,), + "type": (MetricMonitorType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[MetricMonitorType, UnsetType]=unset, **kwargs): + """ + An object of type ``monitor`` that can be referenced in the ``included`` data. + + :param id: The related monitor's ID. + :type id: str, optional + + :param type: Monitor resource type. + :type type: MetricMonitorType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_monitor_relationships.py b/datadog_api_client/v2/model/metric_asset_monitor_relationships.py new file mode 100644 index 0000000000..74f7551402 --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_monitor_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_monitor_relationship import MetricAssetMonitorRelationship + +class MetricAssetMonitorRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_monitor_relationship import MetricAssetMonitorRelationship + return { + "data": ([MetricAssetMonitorRelationship],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[MetricAssetMonitorRelationship], UnsetType]=unset, **kwargs): + """ + A object containing the list of monitors that can be referenced in the ``included`` data. + + :param data: A list of monitors that can be referenced in the ``included`` data. + :type data: [MetricAssetMonitorRelationship], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_notebook_relationship.py b/datadog_api_client/v2/model/metric_asset_notebook_relationship.py new file mode 100644 index 0000000000..a97691e793 --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_notebook_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_notebook_type import MetricNotebookType + +class MetricAssetNotebookRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_notebook_type import MetricNotebookType + return { + "id": (str,), + "type": (MetricNotebookType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[MetricNotebookType, UnsetType]=unset, **kwargs): + """ + An object of type ``notebook`` that can be referenced in the ``included`` data. + + :param id: The related notebook's ID. + :type id: str, optional + + :param type: Notebook resource type. + :type type: MetricNotebookType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_notebook_relationships.py b/datadog_api_client/v2/model/metric_asset_notebook_relationships.py new file mode 100644 index 0000000000..823c459ebb --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_notebook_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_notebook_relationship import MetricAssetNotebookRelationship + +class MetricAssetNotebookRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_notebook_relationship import MetricAssetNotebookRelationship + return { + "data": ([MetricAssetNotebookRelationship],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[MetricAssetNotebookRelationship], UnsetType]=unset, **kwargs): + """ + An object containing the list of notebooks that can be referenced in the ``included`` data. + + :param data: A list of notebooks that can be referenced in the ``included`` data. + :type data: [MetricAssetNotebookRelationship], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_response_data.py b/datadog_api_client/v2/model/metric_asset_response_data.py new file mode 100644 index 0000000000..5aafd4a9ca --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_response_relationships import MetricAssetResponseRelationships + from datadog_api_client.v2.model.metric_type import MetricType + +class MetricAssetResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_response_relationships import MetricAssetResponseRelationships + from datadog_api_client.v2.model.metric_type import MetricType + return { + "id": (str,), + "relationships": (MetricAssetResponseRelationships,), + "type": (MetricType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: MetricType, relationships: Union[MetricAssetResponseRelationships, UnsetType]=unset, **kwargs): + """ + Metric assets response data. + + :param id: The metric name for this resource. + :type id: str + + :param relationships: Relationships to assets related to the metric. + :type relationships: MetricAssetResponseRelationships, optional + + :param type: The metric resource type. + :type type: MetricType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_asset_response_included.py b/datadog_api_client/v2/model/metric_asset_response_included.py new file mode 100644 index 0000000000..d6efdefbb4 --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_response_included.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricAssetResponseIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + List of included assets with full set of attributes. + + :param attributes: Attributes related to the dashboard, including title, popularity, and url. + :type attributes: MetricDashboardAttributes, optional + + :param id: The related dashboard's ID. + :type id: str + + :param type: Dashboard resource type. + :type type: MetricDashboardType + """ + 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.metric_dashboard_asset import MetricDashboardAsset + from datadog_api_client.v2.model.metric_monitor_asset import MetricMonitorAsset + from datadog_api_client.v2.model.metric_notebook_asset import MetricNotebookAsset + from datadog_api_client.v2.model.metric_slo_asset import MetricSLOAsset + return { + "oneOf": [ + MetricDashboardAsset, + MetricMonitorAsset, + MetricNotebookAsset, + MetricSLOAsset, + ], + } diff --git a/datadog_api_client/v2/model/metric_asset_response_relationships.py b/datadog_api_client/v2/model/metric_asset_response_relationships.py new file mode 100644 index 0000000000..54ceb86443 --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_response_relationships.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_dashboard_relationships import MetricAssetDashboardRelationships + from datadog_api_client.v2.model.metric_asset_monitor_relationships import MetricAssetMonitorRelationships + from datadog_api_client.v2.model.metric_asset_notebook_relationships import MetricAssetNotebookRelationships + from datadog_api_client.v2.model.metric_asset_slo_relationships import MetricAssetSLORelationships + +class MetricAssetResponseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_dashboard_relationships import MetricAssetDashboardRelationships + from datadog_api_client.v2.model.metric_asset_monitor_relationships import MetricAssetMonitorRelationships + from datadog_api_client.v2.model.metric_asset_notebook_relationships import MetricAssetNotebookRelationships + from datadog_api_client.v2.model.metric_asset_slo_relationships import MetricAssetSLORelationships + return { + "dashboards": (MetricAssetDashboardRelationships,), + "monitors": (MetricAssetMonitorRelationships,), + "notebooks": (MetricAssetNotebookRelationships,), + "slos": (MetricAssetSLORelationships,), + } + attribute_map = { + "dashboards": "dashboards", + "monitors": "monitors", + "notebooks": "notebooks", + "slos": "slos", + } + + def __init__(self_, dashboards: Union[MetricAssetDashboardRelationships, UnsetType]=unset, monitors: Union[MetricAssetMonitorRelationships, UnsetType]=unset, notebooks: Union[MetricAssetNotebookRelationships, UnsetType]=unset, slos: Union[MetricAssetSLORelationships, UnsetType]=unset, **kwargs): + """ + Relationships to assets related to the metric. + + :param dashboards: An object containing the list of dashboards that can be referenced in the ``included`` data. + :type dashboards: MetricAssetDashboardRelationships, optional + + :param monitors: A object containing the list of monitors that can be referenced in the ``included`` data. + :type monitors: MetricAssetMonitorRelationships, optional + + :param notebooks: An object containing the list of notebooks that can be referenced in the ``included`` data. + :type notebooks: MetricAssetNotebookRelationships, optional + + :param slos: An object containing a list of SLOs that can be referenced in the ``included`` data. + :type slos: MetricAssetSLORelationships, optional + """ + if dashboards is not unset: + kwargs["dashboards"] = dashboards + if monitors is not unset: + kwargs["monitors"] = monitors + if notebooks is not unset: + kwargs["notebooks"] = notebooks + if slos is not unset: + kwargs["slos"] = slos + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_slo_relationship.py b/datadog_api_client/v2/model/metric_asset_slo_relationship.py new file mode 100644 index 0000000000..16fac4154f --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_slo_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_slo_type import MetricSLOType + +class MetricAssetSLORelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_slo_type import MetricSLOType + return { + "id": (str,), + "type": (MetricSLOType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[MetricSLOType, UnsetType]=unset, **kwargs): + """ + An object of type ``slos`` that can be referenced in the ``included`` data. + + :param id: The SLO ID. + :type id: str, optional + + :param type: SLO resource type. + :type type: MetricSLOType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_asset_slo_relationships.py b/datadog_api_client/v2/model/metric_asset_slo_relationships.py new file mode 100644 index 0000000000..83a7eca40c --- /dev/null +++ b/datadog_api_client/v2/model/metric_asset_slo_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_slo_relationship import MetricAssetSLORelationship + +class MetricAssetSLORelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_slo_relationship import MetricAssetSLORelationship + return { + "data": ([MetricAssetSLORelationship],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[MetricAssetSLORelationship], UnsetType]=unset, **kwargs): + """ + An object containing a list of SLOs that can be referenced in the ``included`` data. + + :param data: A list of SLOs that can be referenced in the ``included`` data. + :type data: [MetricAssetSLORelationship], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_assets_response.py b/datadog_api_client/v2/model/metric_assets_response.py new file mode 100644 index 0000000000..89538b38b3 --- /dev/null +++ b/datadog_api_client/v2/model/metric_assets_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_response_data import MetricAssetResponseData + from datadog_api_client.v2.model.metric_asset_response_included import MetricAssetResponseIncluded + from datadog_api_client.v2.model.metric_dashboard_asset import MetricDashboardAsset + from datadog_api_client.v2.model.metric_monitor_asset import MetricMonitorAsset + from datadog_api_client.v2.model.metric_notebook_asset import MetricNotebookAsset + from datadog_api_client.v2.model.metric_slo_asset import MetricSLOAsset + +class MetricAssetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_response_data import MetricAssetResponseData + from datadog_api_client.v2.model.metric_asset_response_included import MetricAssetResponseIncluded + return { + "data": (MetricAssetResponseData,), + "included": ([MetricAssetResponseIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[MetricAssetResponseData, UnsetType]=unset, included: Union[List[Union[MetricAssetResponseIncluded, MetricDashboardAsset, MetricMonitorAsset, MetricNotebookAsset, MetricSLOAsset]], UnsetType]=unset, **kwargs): + """ + Response object that includes related dashboards, monitors, notebooks, and SLOs. + + :param data: Metric assets response data. + :type data: MetricAssetResponseData, optional + + :param included: Array of objects related to the metric assets. + :type included: [MetricAssetResponseIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_bulk_configure_tags_type.py b/datadog_api_client/v2/model/metric_bulk_configure_tags_type.py new file mode 100644 index 0000000000..9c42cb9b2a --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_configure_tags_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricBulkConfigureTagsType(ModelSimple): + """ + The metric bulk configure tags resource. + + :param value: If omitted defaults to "metric_bulk_configure_tags". Must be one of ["metric_bulk_configure_tags"]. + :type value: str + """ + + allowed_values = { + "metric_bulk_configure_tags", + } + BULK_MANAGE_TAGS: ClassVar["MetricBulkConfigureTagsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricBulkConfigureTagsType.BULK_MANAGE_TAGS = MetricBulkConfigureTagsType("metric_bulk_configure_tags") diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_create.py b/datadog_api_client/v2/model/metric_bulk_tag_config_create.py new file mode 100644 index 0000000000..fb66d1db9b --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_create.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_bulk_tag_config_create_attributes import MetricBulkTagConfigCreateAttributes + from datadog_api_client.v2.model.metric_bulk_configure_tags_type import MetricBulkConfigureTagsType + +class MetricBulkTagConfigCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_bulk_tag_config_create_attributes import MetricBulkTagConfigCreateAttributes + from datadog_api_client.v2.model.metric_bulk_configure_tags_type import MetricBulkConfigureTagsType + return { + "attributes": (MetricBulkTagConfigCreateAttributes,), + "id": (str,), + "type": (MetricBulkConfigureTagsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MetricBulkConfigureTagsType, attributes: Union[MetricBulkTagConfigCreateAttributes, UnsetType]=unset, **kwargs): + """ + Request object to bulk configure tags for metrics matching the given prefix. + + :param attributes: Optional parameters for bulk creating metric tag configurations. + :type attributes: MetricBulkTagConfigCreateAttributes, optional + + :param id: A text prefix to match against metric names. + :type id: str + + :param type: The metric bulk configure tags resource. + :type type: MetricBulkConfigureTagsType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_create_attributes.py b/datadog_api_client/v2/model/metric_bulk_tag_config_create_attributes.py new file mode 100644 index 0000000000..9d10607170 --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_bulk_tag_config_email_list import MetricBulkTagConfigEmailList + from datadog_api_client.v2.model.metric_bulk_tag_config_tag_name_list import MetricBulkTagConfigTagNameList + +class MetricBulkTagConfigCreateAttributes(ModelNormal): + validations = { + "include_actively_queried_tags_window": { + "inclusive_maximum": 7776000, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_bulk_tag_config_email_list import MetricBulkTagConfigEmailList + from datadog_api_client.v2.model.metric_bulk_tag_config_tag_name_list import MetricBulkTagConfigTagNameList + return { + "emails": (MetricBulkTagConfigEmailList,), + "exclude_tags_mode": (bool,), + "include_actively_queried_tags_window": (float,), + "override_existing_configurations": (bool,), + "tags": (MetricBulkTagConfigTagNameList,), + } + attribute_map = { + "emails": "emails", + "exclude_tags_mode": "exclude_tags_mode", + "include_actively_queried_tags_window": "include_actively_queried_tags_window", + "override_existing_configurations": "override_existing_configurations", + "tags": "tags", + } + + def __init__(self_, emails: Union[MetricBulkTagConfigEmailList, UnsetType]=unset, exclude_tags_mode: Union[bool, UnsetType]=unset, include_actively_queried_tags_window: Union[float, UnsetType]=unset, override_existing_configurations: Union[bool, UnsetType]=unset, tags: Union[MetricBulkTagConfigTagNameList, UnsetType]=unset, **kwargs): + """ + Optional parameters for bulk creating metric tag configurations. + + :param emails: A list of account emails to notify when the configuration is applied. + :type emails: MetricBulkTagConfigEmailList, optional + + :param exclude_tags_mode: When set to true, the configuration will exclude the configured tags and include any other submitted tags. + When set to false, the configuration will include the configured tags and exclude any other submitted tags. + Defaults to false. + :type exclude_tags_mode: bool, optional + + :param include_actively_queried_tags_window: When provided, all tags that have been actively queried are + configured (and, therefore, remain queryable) for each metric that + matches the given prefix. Minimum value is 1 second, and maximum + value is 7,776,000 seconds (90 days). + :type include_actively_queried_tags_window: float, optional + + :param override_existing_configurations: When set to true, the configuration overrides any existing + configurations for the given metric with the new set of tags in this + configuration request. If false, old configurations are kept and + are merged with the set of tags in this configuration request. + Defaults to true. + :type override_existing_configurations: bool, optional + + :param tags: A list of tag names to apply to the configuration. + :type tags: MetricBulkTagConfigTagNameList, optional + """ + if emails is not unset: + kwargs["emails"] = emails + if exclude_tags_mode is not unset: + kwargs["exclude_tags_mode"] = exclude_tags_mode + if include_actively_queried_tags_window is not unset: + kwargs["include_actively_queried_tags_window"] = include_actively_queried_tags_window + if override_existing_configurations is not unset: + kwargs["override_existing_configurations"] = override_existing_configurations + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_create_request.py b/datadog_api_client/v2/model/metric_bulk_tag_config_create_request.py new file mode 100644 index 0000000000..c96dea4a75 --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_bulk_tag_config_create import MetricBulkTagConfigCreate + +class MetricBulkTagConfigCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_bulk_tag_config_create import MetricBulkTagConfigCreate + return { + "data": (MetricBulkTagConfigCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MetricBulkTagConfigCreate, **kwargs): + """ + Wrapper object for a single bulk tag configuration request. + + :param data: Request object to bulk configure tags for metrics matching the given prefix. + :type data: MetricBulkTagConfigCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_delete.py b/datadog_api_client/v2/model/metric_bulk_tag_config_delete.py new file mode 100644 index 0000000000..2d913eaf05 --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_delete.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_bulk_tag_config_delete_attributes import MetricBulkTagConfigDeleteAttributes + from datadog_api_client.v2.model.metric_bulk_configure_tags_type import MetricBulkConfigureTagsType + +class MetricBulkTagConfigDelete(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_bulk_tag_config_delete_attributes import MetricBulkTagConfigDeleteAttributes + from datadog_api_client.v2.model.metric_bulk_configure_tags_type import MetricBulkConfigureTagsType + return { + "attributes": (MetricBulkTagConfigDeleteAttributes,), + "id": (str,), + "type": (MetricBulkConfigureTagsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MetricBulkConfigureTagsType, attributes: Union[MetricBulkTagConfigDeleteAttributes, UnsetType]=unset, **kwargs): + """ + Request object to bulk delete all tag configurations for metrics matching the given prefix. + + :param attributes: Optional parameters for bulk deleting metric tag configurations. + :type attributes: MetricBulkTagConfigDeleteAttributes, optional + + :param id: A text prefix to match against metric names. + :type id: str + + :param type: The metric bulk configure tags resource. + :type type: MetricBulkConfigureTagsType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_delete_attributes.py b/datadog_api_client/v2/model/metric_bulk_tag_config_delete_attributes.py new file mode 100644 index 0000000000..fc1661a1d1 --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_delete_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_bulk_tag_config_email_list import MetricBulkTagConfigEmailList + +class MetricBulkTagConfigDeleteAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_bulk_tag_config_email_list import MetricBulkTagConfigEmailList + return { + "emails": (MetricBulkTagConfigEmailList,), + } + attribute_map = { + "emails": "emails", + } + + def __init__(self_, emails: Union[MetricBulkTagConfigEmailList, UnsetType]=unset, **kwargs): + """ + Optional parameters for bulk deleting metric tag configurations. + + :param emails: A list of account emails to notify when the configuration is applied. + :type emails: MetricBulkTagConfigEmailList, optional + """ + if emails is not unset: + kwargs["emails"] = emails + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_delete_request.py b/datadog_api_client/v2/model/metric_bulk_tag_config_delete_request.py new file mode 100644 index 0000000000..dea2cb15e5 --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_delete_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_bulk_tag_config_delete import MetricBulkTagConfigDelete + +class MetricBulkTagConfigDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_bulk_tag_config_delete import MetricBulkTagConfigDelete + return { + "data": (MetricBulkTagConfigDelete,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MetricBulkTagConfigDelete, **kwargs): + """ + Wrapper object for a single bulk tag deletion request. + + :param data: Request object to bulk delete all tag configurations for metrics matching the given prefix. + :type data: MetricBulkTagConfigDelete + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_email_list.py b/datadog_api_client/v2/model/metric_bulk_tag_config_email_list.py new file mode 100644 index 0000000000..8daf09d90b --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_email_list.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricBulkTagConfigEmailList(ModelSimple): + """ + A list of account emails to notify when the configuration is applied. + + + :type value: [str] + """ + + + + @cached_property + def openapi_types(_): + return { + "value": ([str],), + } diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_response.py b/datadog_api_client/v2/model/metric_bulk_tag_config_response.py new file mode 100644 index 0000000000..cf543ef8b6 --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_bulk_tag_config_status import MetricBulkTagConfigStatus + +class MetricBulkTagConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_bulk_tag_config_status import MetricBulkTagConfigStatus + return { + "data": (MetricBulkTagConfigStatus,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MetricBulkTagConfigStatus, UnsetType]=unset, **kwargs): + """ + Wrapper for a single bulk tag configuration status response. + + :param data: The status of a request to bulk configure metric tags. + It contains the fields from the original request for reference. + :type data: MetricBulkTagConfigStatus, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_status.py b/datadog_api_client/v2/model/metric_bulk_tag_config_status.py new file mode 100644 index 0000000000..53db569d7c --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_status.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_bulk_tag_config_status_attributes import MetricBulkTagConfigStatusAttributes + from datadog_api_client.v2.model.metric_bulk_configure_tags_type import MetricBulkConfigureTagsType + +class MetricBulkTagConfigStatus(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_bulk_tag_config_status_attributes import MetricBulkTagConfigStatusAttributes + from datadog_api_client.v2.model.metric_bulk_configure_tags_type import MetricBulkConfigureTagsType + return { + "attributes": (MetricBulkTagConfigStatusAttributes,), + "id": (str,), + "type": (MetricBulkConfigureTagsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MetricBulkConfigureTagsType, attributes: Union[MetricBulkTagConfigStatusAttributes, UnsetType]=unset, **kwargs): + """ + The status of a request to bulk configure metric tags. + It contains the fields from the original request for reference. + + :param attributes: Optional attributes for the status of a bulk tag configuration request. + :type attributes: MetricBulkTagConfigStatusAttributes, optional + + :param id: A text prefix to match against metric names. + :type id: str + + :param type: The metric bulk configure tags resource. + :type type: MetricBulkConfigureTagsType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_status_attributes.py b/datadog_api_client/v2/model/metric_bulk_tag_config_status_attributes.py new file mode 100644 index 0000000000..10189771e2 --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_status_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_bulk_tag_config_email_list import MetricBulkTagConfigEmailList + from datadog_api_client.v2.model.metric_bulk_tag_config_tag_name_list import MetricBulkTagConfigTagNameList + +class MetricBulkTagConfigStatusAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_bulk_tag_config_email_list import MetricBulkTagConfigEmailList + from datadog_api_client.v2.model.metric_bulk_tag_config_tag_name_list import MetricBulkTagConfigTagNameList + return { + "emails": (MetricBulkTagConfigEmailList,), + "exclude_tags_mode": (bool,), + "status": (str,), + "tags": (MetricBulkTagConfigTagNameList,), + } + attribute_map = { + "emails": "emails", + "exclude_tags_mode": "exclude_tags_mode", + "status": "status", + "tags": "tags", + } + + def __init__(self_, emails: Union[MetricBulkTagConfigEmailList, UnsetType]=unset, exclude_tags_mode: Union[bool, UnsetType]=unset, status: Union[str, UnsetType]=unset, tags: Union[MetricBulkTagConfigTagNameList, UnsetType]=unset, **kwargs): + """ + Optional attributes for the status of a bulk tag configuration request. + + :param emails: A list of account emails to notify when the configuration is applied. + :type emails: MetricBulkTagConfigEmailList, optional + + :param exclude_tags_mode: When set to true, the configuration will exclude the configured tags and include any other submitted tags. + When set to false, the configuration will include the configured tags and exclude any other submitted tags. + :type exclude_tags_mode: bool, optional + + :param status: The status of the request. + :type status: str, optional + + :param tags: A list of tag names to apply to the configuration. + :type tags: MetricBulkTagConfigTagNameList, optional + """ + if emails is not unset: + kwargs["emails"] = emails + if exclude_tags_mode is not unset: + kwargs["exclude_tags_mode"] = exclude_tags_mode + if status is not unset: + kwargs["status"] = status + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_bulk_tag_config_tag_name_list.py b/datadog_api_client/v2/model/metric_bulk_tag_config_tag_name_list.py new file mode 100644 index 0000000000..ecdc1d78e4 --- /dev/null +++ b/datadog_api_client/v2/model/metric_bulk_tag_config_tag_name_list.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricBulkTagConfigTagNameList(ModelSimple): + """ + A list of tag names to apply to the configuration. + + + :type value: [str] + """ + + + + @cached_property + def openapi_types(_): + return { + "value": ([str],), + } diff --git a/datadog_api_client/v2/model/metric_content_encoding.py b/datadog_api_client/v2/model/metric_content_encoding.py new file mode 100644 index 0000000000..a44fac04be --- /dev/null +++ b/datadog_api_client/v2/model/metric_content_encoding.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricContentEncoding(ModelSimple): + """ + HTTP header used to compress the media-type. + + :param value: If omitted defaults to "deflate". Must be one of ["deflate", "zstd1", "gzip"]. + :type value: str + """ + + allowed_values = { + "deflate", + "zstd1", + "gzip", + } + DEFLATE: ClassVar["MetricContentEncoding"] + ZSTD1: ClassVar["MetricContentEncoding"] + GZIP: ClassVar["MetricContentEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricContentEncoding.DEFLATE = MetricContentEncoding("deflate") +MetricContentEncoding.ZSTD1 = MetricContentEncoding("zstd1") +MetricContentEncoding.GZIP = MetricContentEncoding("gzip") diff --git a/datadog_api_client/v2/model/metric_custom_aggregation.py b/datadog_api_client/v2/model/metric_custom_aggregation.py new file mode 100644 index 0000000000..b2ccf0a1fd --- /dev/null +++ b/datadog_api_client/v2/model/metric_custom_aggregation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_custom_space_aggregation import MetricCustomSpaceAggregation + from datadog_api_client.v2.model.metric_custom_time_aggregation import MetricCustomTimeAggregation + +class MetricCustomAggregation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_custom_space_aggregation import MetricCustomSpaceAggregation + from datadog_api_client.v2.model.metric_custom_time_aggregation import MetricCustomTimeAggregation + return { + "space": (MetricCustomSpaceAggregation,), + "time": (MetricCustomTimeAggregation,), + } + attribute_map = { + "space": "space", + "time": "time", + } + + def __init__(self_, space: MetricCustomSpaceAggregation, time: MetricCustomTimeAggregation, **kwargs): + """ + A time and space aggregation combination for use in query. + + :param space: A space aggregation for use in query. + :type space: MetricCustomSpaceAggregation + + :param time: A time aggregation for use in query. + :type time: MetricCustomTimeAggregation + """ + super().__init__(kwargs) + + + self_.space = space + self_.time = time diff --git a/datadog_api_client/v2/model/metric_custom_aggregations.py b/datadog_api_client/v2/model/metric_custom_aggregations.py new file mode 100644 index 0000000000..85e8ae8afe --- /dev/null +++ b/datadog_api_client/v2/model/metric_custom_aggregations.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricCustomAggregations(ModelSimple): + """ + Deprecated. You no longer need to configure specific time and space aggregations for Metrics Without Limits. + + + :type value: [MetricCustomAggregation] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_custom_aggregation import MetricCustomAggregation + return { + "value": ([MetricCustomAggregation],), + } diff --git a/datadog_api_client/v2/model/metric_custom_space_aggregation.py b/datadog_api_client/v2/model/metric_custom_space_aggregation.py new file mode 100644 index 0000000000..3245858208 --- /dev/null +++ b/datadog_api_client/v2/model/metric_custom_space_aggregation.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricCustomSpaceAggregation(ModelSimple): + """ + A space aggregation for use in query. + + :param value: Must be one of ["avg", "max", "min", "sum"]. + :type value: str + """ + + allowed_values = { + "avg", + "max", + "min", + "sum", + } + AVG: ClassVar["MetricCustomSpaceAggregation"] + MAX: ClassVar["MetricCustomSpaceAggregation"] + MIN: ClassVar["MetricCustomSpaceAggregation"] + SUM: ClassVar["MetricCustomSpaceAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricCustomSpaceAggregation.AVG = MetricCustomSpaceAggregation("avg") +MetricCustomSpaceAggregation.MAX = MetricCustomSpaceAggregation("max") +MetricCustomSpaceAggregation.MIN = MetricCustomSpaceAggregation("min") +MetricCustomSpaceAggregation.SUM = MetricCustomSpaceAggregation("sum") diff --git a/datadog_api_client/v2/model/metric_custom_time_aggregation.py b/datadog_api_client/v2/model/metric_custom_time_aggregation.py new file mode 100644 index 0000000000..1ff91908e7 --- /dev/null +++ b/datadog_api_client/v2/model/metric_custom_time_aggregation.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricCustomTimeAggregation(ModelSimple): + """ + A time aggregation for use in query. + + :param value: Must be one of ["avg", "count", "max", "min", "sum"]. + :type value: str + """ + + allowed_values = { + "avg", + "count", + "max", + "min", + "sum", + } + AVG: ClassVar["MetricCustomTimeAggregation"] + COUNT: ClassVar["MetricCustomTimeAggregation"] + MAX: ClassVar["MetricCustomTimeAggregation"] + MIN: ClassVar["MetricCustomTimeAggregation"] + SUM: ClassVar["MetricCustomTimeAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricCustomTimeAggregation.AVG = MetricCustomTimeAggregation("avg") +MetricCustomTimeAggregation.COUNT = MetricCustomTimeAggregation("count") +MetricCustomTimeAggregation.MAX = MetricCustomTimeAggregation("max") +MetricCustomTimeAggregation.MIN = MetricCustomTimeAggregation("min") +MetricCustomTimeAggregation.SUM = MetricCustomTimeAggregation("sum") diff --git a/datadog_api_client/v2/model/metric_dashboard_asset.py b/datadog_api_client/v2/model/metric_dashboard_asset.py new file mode 100644 index 0000000000..a036ae7e40 --- /dev/null +++ b/datadog_api_client/v2/model/metric_dashboard_asset.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_dashboard_attributes import MetricDashboardAttributes + from datadog_api_client.v2.model.metric_dashboard_type import MetricDashboardType + +class MetricDashboardAsset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_dashboard_attributes import MetricDashboardAttributes + from datadog_api_client.v2.model.metric_dashboard_type import MetricDashboardType + return { + "attributes": (MetricDashboardAttributes,), + "id": (str,), + "type": (MetricDashboardType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MetricDashboardType, attributes: Union[MetricDashboardAttributes, UnsetType]=unset, **kwargs): + """ + A dashboard object with title and popularity. + + :param attributes: Attributes related to the dashboard, including title, popularity, and url. + :type attributes: MetricDashboardAttributes, optional + + :param id: The related dashboard's ID. + :type id: str + + :param type: Dashboard resource type. + :type type: MetricDashboardType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_dashboard_attributes.py b/datadog_api_client/v2/model/metric_dashboard_attributes.py new file mode 100644 index 0000000000..c35084b38b --- /dev/null +++ b/datadog_api_client/v2/model/metric_dashboard_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricDashboardAttributes(ModelNormal): + validations = { + "popularity": { + "inclusive_maximum": 5, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "popularity": (float,), + "tags": ([str],), + "title": (str,), + "url": (str,), + } + attribute_map = { + "popularity": "popularity", + "tags": "tags", + "title": "title", + "url": "url", + } + + def __init__(self_, popularity: Union[float, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, title: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes related to the dashboard, including title, popularity, and url. + + :param popularity: Value from 0 to 5 that ranks popularity of the dashboard. + :type popularity: float, optional + + :param tags: List of tag keys used in the asset. + :type tags: [str], optional + + :param title: Title of the asset. + :type title: str, optional + + :param url: URL path of the asset. + :type url: str, optional + """ + if popularity is not unset: + kwargs["popularity"] = popularity + if tags is not unset: + kwargs["tags"] = tags + if title is not unset: + kwargs["title"] = title + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_dashboard_type.py b/datadog_api_client/v2/model/metric_dashboard_type.py new file mode 100644 index 0000000000..a46968ea4a --- /dev/null +++ b/datadog_api_client/v2/model/metric_dashboard_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricDashboardType(ModelSimple): + """ + Dashboard resource type. + + :param value: If omitted defaults to "dashboards". Must be one of ["dashboards"]. + :type value: str + """ + + allowed_values = { + "dashboards", + } + DASHBOARDS: ClassVar["MetricDashboardType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricDashboardType.DASHBOARDS = MetricDashboardType("dashboards") diff --git a/datadog_api_client/v2/model/metric_distinct_volume.py b/datadog_api_client/v2/model/metric_distinct_volume.py new file mode 100644 index 0000000000..96e93a87e1 --- /dev/null +++ b/datadog_api_client/v2/model/metric_distinct_volume.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_distinct_volume_attributes import MetricDistinctVolumeAttributes + from datadog_api_client.v2.model.metric_distinct_volume_type import MetricDistinctVolumeType + +class MetricDistinctVolume(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_distinct_volume_attributes import MetricDistinctVolumeAttributes + from datadog_api_client.v2.model.metric_distinct_volume_type import MetricDistinctVolumeType + return { + "attributes": (MetricDistinctVolumeAttributes,), + "id": (str,), + "type": (MetricDistinctVolumeType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MetricDistinctVolumeAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MetricDistinctVolumeType, UnsetType]=unset, **kwargs): + """ + Object for a single metric's distinct volume. + + :param attributes: Object containing the definition of a metric's distinct volume. + :type attributes: MetricDistinctVolumeAttributes, optional + + :param id: The metric name for this resource. + :type id: str, optional + + :param type: The metric distinct volume type. + :type type: MetricDistinctVolumeType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_distinct_volume_attributes.py b/datadog_api_client/v2/model/metric_distinct_volume_attributes.py new file mode 100644 index 0000000000..3153ce5e73 --- /dev/null +++ b/datadog_api_client/v2/model/metric_distinct_volume_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricDistinctVolumeAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "distinct_volume": (int,), + } + attribute_map = { + "distinct_volume": "distinct_volume", + } + + def __init__(self_, distinct_volume: Union[int, UnsetType]=unset, **kwargs): + """ + Object containing the definition of a metric's distinct volume. + + :param distinct_volume: Distinct volume for the given metric. + :type distinct_volume: int, optional + """ + if distinct_volume is not unset: + kwargs["distinct_volume"] = distinct_volume + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_distinct_volume_type.py b/datadog_api_client/v2/model/metric_distinct_volume_type.py new file mode 100644 index 0000000000..ea96730e65 --- /dev/null +++ b/datadog_api_client/v2/model/metric_distinct_volume_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricDistinctVolumeType(ModelSimple): + """ + The metric distinct volume type. + + :param value: If omitted defaults to "distinct_metric_volumes". Must be one of ["distinct_metric_volumes"]. + :type value: str + """ + + allowed_values = { + "distinct_metric_volumes", + } + DISTINCT_METRIC_VOLUMES: ClassVar["MetricDistinctVolumeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricDistinctVolumeType.DISTINCT_METRIC_VOLUMES = MetricDistinctVolumeType("distinct_metric_volumes") diff --git a/datadog_api_client/v2/model/metric_estimate.py b/datadog_api_client/v2/model/metric_estimate.py new file mode 100644 index 0000000000..fe59260ec2 --- /dev/null +++ b/datadog_api_client/v2/model/metric_estimate.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_estimate_attributes import MetricEstimateAttributes + from datadog_api_client.v2.model.metric_estimate_resource_type import MetricEstimateResourceType + +class MetricEstimate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_estimate_attributes import MetricEstimateAttributes + from datadog_api_client.v2.model.metric_estimate_resource_type import MetricEstimateResourceType + return { + "attributes": (MetricEstimateAttributes,), + "id": (str,), + "type": (MetricEstimateResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MetricEstimateAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MetricEstimateResourceType, UnsetType]=unset, **kwargs): + """ + Object for a metric cardinality estimate. + + :param attributes: Object containing the definition of a metric estimate attribute. + :type attributes: MetricEstimateAttributes, optional + + :param id: The metric name for this resource. + :type id: str, optional + + :param type: The metric estimate resource type. + :type type: MetricEstimateResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_estimate_attributes.py b/datadog_api_client/v2/model/metric_estimate_attributes.py new file mode 100644 index 0000000000..71e5ebb490 --- /dev/null +++ b/datadog_api_client/v2/model/metric_estimate_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_estimate_type import MetricEstimateType + +class MetricEstimateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_estimate_type import MetricEstimateType + return { + "estimate_type": (MetricEstimateType,), + "estimated_at": (datetime,), + "estimated_output_series": (int,), + } + attribute_map = { + "estimate_type": "estimate_type", + "estimated_at": "estimated_at", + "estimated_output_series": "estimated_output_series", + } + + def __init__(self_, estimate_type: Union[MetricEstimateType, UnsetType]=unset, estimated_at: Union[datetime, UnsetType]=unset, estimated_output_series: Union[int, UnsetType]=unset, **kwargs): + """ + Object containing the definition of a metric estimate attribute. + + :param estimate_type: Estimate type based on the queried configuration. By default, ``count_or_gauge`` is returned. ``distribution`` is returned for distribution metrics without percentiles enabled. Lastly, ``percentile`` is returned if ``filter[pct]=true`` is queried with a distribution metric. + :type estimate_type: MetricEstimateType, optional + + :param estimated_at: Timestamp when the cardinality estimate was requested. + :type estimated_at: datetime, optional + + :param estimated_output_series: Estimated cardinality of the metric based on the queried configuration. + :type estimated_output_series: int, optional + """ + if estimate_type is not unset: + kwargs["estimate_type"] = estimate_type + if estimated_at is not unset: + kwargs["estimated_at"] = estimated_at + if estimated_output_series is not unset: + kwargs["estimated_output_series"] = estimated_output_series + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_estimate_resource_type.py b/datadog_api_client/v2/model/metric_estimate_resource_type.py new file mode 100644 index 0000000000..6eb06091a1 --- /dev/null +++ b/datadog_api_client/v2/model/metric_estimate_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricEstimateResourceType(ModelSimple): + """ + The metric estimate resource type. + + :param value: If omitted defaults to "metric_cardinality_estimate". Must be one of ["metric_cardinality_estimate"]. + :type value: str + """ + + allowed_values = { + "metric_cardinality_estimate", + } + METRIC_CARDINALITY_ESTIMATE: ClassVar["MetricEstimateResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricEstimateResourceType.METRIC_CARDINALITY_ESTIMATE = MetricEstimateResourceType("metric_cardinality_estimate") diff --git a/datadog_api_client/v2/model/metric_estimate_response.py b/datadog_api_client/v2/model/metric_estimate_response.py new file mode 100644 index 0000000000..095248c5b7 --- /dev/null +++ b/datadog_api_client/v2/model/metric_estimate_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_estimate import MetricEstimate + +class MetricEstimateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_estimate import MetricEstimate + return { + "data": (MetricEstimate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MetricEstimate, UnsetType]=unset, **kwargs): + """ + Response object that includes metric cardinality estimates. + + :param data: Object for a metric cardinality estimate. + :type data: MetricEstimate, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_estimate_type.py b/datadog_api_client/v2/model/metric_estimate_type.py new file mode 100644 index 0000000000..81fe53c28f --- /dev/null +++ b/datadog_api_client/v2/model/metric_estimate_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricEstimateType(ModelSimple): + """ + Estimate type based on the queried configuration. By default, `count_or_gauge` is returned. `distribution` is returned for distribution metrics without percentiles enabled. Lastly, `percentile` is returned if `filter[pct]=true` is queried with a distribution metric. + + :param value: If omitted defaults to "count_or_gauge". Must be one of ["count_or_gauge", "distribution", "percentile"]. + :type value: str + """ + + allowed_values = { + "count_or_gauge", + "distribution", + "percentile", + } + COUNT_OR_GAUGE: ClassVar["MetricEstimateType"] + DISTRIBUTION: ClassVar["MetricEstimateType"] + PERCENTILE: ClassVar["MetricEstimateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricEstimateType.COUNT_OR_GAUGE = MetricEstimateType("count_or_gauge") +MetricEstimateType.DISTRIBUTION = MetricEstimateType("distribution") +MetricEstimateType.PERCENTILE = MetricEstimateType("percentile") diff --git a/datadog_api_client/v2/model/metric_ingested_indexed_volume.py b/datadog_api_client/v2/model/metric_ingested_indexed_volume.py new file mode 100644 index 0000000000..136932e8d0 --- /dev/null +++ b/datadog_api_client/v2/model/metric_ingested_indexed_volume.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_ingested_indexed_volume_attributes import MetricIngestedIndexedVolumeAttributes + from datadog_api_client.v2.model.metric_ingested_indexed_volume_type import MetricIngestedIndexedVolumeType + +class MetricIngestedIndexedVolume(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_ingested_indexed_volume_attributes import MetricIngestedIndexedVolumeAttributes + from datadog_api_client.v2.model.metric_ingested_indexed_volume_type import MetricIngestedIndexedVolumeType + return { + "attributes": (MetricIngestedIndexedVolumeAttributes,), + "id": (str,), + "type": (MetricIngestedIndexedVolumeType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MetricIngestedIndexedVolumeAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MetricIngestedIndexedVolumeType, UnsetType]=unset, **kwargs): + """ + Object for a single metric's ingested and indexed volume. + + :param attributes: Object containing the definition of a metric's ingested and indexed volume. + :type attributes: MetricIngestedIndexedVolumeAttributes, optional + + :param id: The metric name for this resource. + :type id: str, optional + + :param type: The metric ingested and indexed volume type. + :type type: MetricIngestedIndexedVolumeType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_ingested_indexed_volume_attributes.py b/datadog_api_client/v2/model/metric_ingested_indexed_volume_attributes.py new file mode 100644 index 0000000000..9552146d08 --- /dev/null +++ b/datadog_api_client/v2/model/metric_ingested_indexed_volume_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricIngestedIndexedVolumeAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "indexed_volume": (int,), + "ingested_volume": (int,), + } + attribute_map = { + "indexed_volume": "indexed_volume", + "ingested_volume": "ingested_volume", + } + + def __init__(self_, indexed_volume: Union[int, UnsetType]=unset, ingested_volume: Union[int, UnsetType]=unset, **kwargs): + """ + Object containing the definition of a metric's ingested and indexed volume. + + :param indexed_volume: Estimated average hourly number of indexed time series for the given metric over the last hour. For organizations on Metric Name Pricing, this represents the estimated sum of indexed data points over the last hour. + :type indexed_volume: int, optional + + :param ingested_volume: Estimated average hourly number of ingested time series for the given metric over the last hour. This value is ``0`` for metrics not configured with Metrics Without Limits. For organizations on Metric Name Pricing, this represents the estimated sum of ingested data points over the last hour. + :type ingested_volume: int, optional + """ + if indexed_volume is not unset: + kwargs["indexed_volume"] = indexed_volume + if ingested_volume is not unset: + kwargs["ingested_volume"] = ingested_volume + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_ingested_indexed_volume_type.py b/datadog_api_client/v2/model/metric_ingested_indexed_volume_type.py new file mode 100644 index 0000000000..bec0878c35 --- /dev/null +++ b/datadog_api_client/v2/model/metric_ingested_indexed_volume_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricIngestedIndexedVolumeType(ModelSimple): + """ + The metric ingested and indexed volume type. + + :param value: If omitted defaults to "metric_volumes". Must be one of ["metric_volumes"]. + :type value: str + """ + + allowed_values = { + "metric_volumes", + } + METRIC_VOLUMES: ClassVar["MetricIngestedIndexedVolumeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricIngestedIndexedVolumeType.METRIC_VOLUMES = MetricIngestedIndexedVolumeType("metric_volumes") diff --git a/datadog_api_client/v2/model/metric_intake_type.py b/datadog_api_client/v2/model/metric_intake_type.py new file mode 100644 index 0000000000..bbfb10ab21 --- /dev/null +++ b/datadog_api_client/v2/model/metric_intake_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricIntakeType(ModelSimple): + """ + The type of metric. The available types are `0` (unspecified), `1` (count), `2` (rate), and `3` (gauge). + + :param value: Must be one of [0, 1, 2, 3]. + :type value: int + """ + + allowed_values = { + 0, + 1, + 2, + 3, + } + UNSPECIFIED: ClassVar["MetricIntakeType"] + COUNT: ClassVar["MetricIntakeType"] + RATE: ClassVar["MetricIntakeType"] + GAUGE: ClassVar["MetricIntakeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +MetricIntakeType.UNSPECIFIED = MetricIntakeType(0) +MetricIntakeType.COUNT = MetricIntakeType(1) +MetricIntakeType.RATE = MetricIntakeType(2) +MetricIntakeType.GAUGE = MetricIntakeType(3) diff --git a/datadog_api_client/v2/model/metric_meta_page.py b/datadog_api_client/v2/model/metric_meta_page.py new file mode 100644 index 0000000000..d464a530c9 --- /dev/null +++ b/datadog_api_client/v2/model/metric_meta_page.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_meta_page_type import MetricMetaPageType + +class MetricMetaPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 20000, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_meta_page_type import MetricMetaPageType + return { + "cursor": (str, none_type), + "limit": (int,), + "next_cursor": (str, none_type), + "type": (MetricMetaPageType,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + "next_cursor": "next_cursor", + "type": "type", + } + + def __init__(self_, cursor: Union[str, none_type, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_cursor: Union[str, none_type, UnsetType]=unset, type: Union[MetricMetaPageType, UnsetType]=unset, **kwargs): + """ + Paging attributes. Only present if pagination query parameters were provided. + + :param cursor: The cursor used to get the current results, if any. + :type cursor: str, none_type, optional + + :param limit: Number of results returned + :type limit: int, optional + + :param next_cursor: The cursor used to get the next results, if any. + :type next_cursor: str, none_type, optional + + :param type: Type of metric pagination. + :type type: MetricMetaPageType, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + if next_cursor is not unset: + kwargs["next_cursor"] = next_cursor + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_meta_page_type.py b/datadog_api_client/v2/model/metric_meta_page_type.py new file mode 100644 index 0000000000..716607bcaf --- /dev/null +++ b/datadog_api_client/v2/model/metric_meta_page_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricMetaPageType(ModelSimple): + """ + Type of metric pagination. + + :param value: If omitted defaults to "cursor_limit". Must be one of ["cursor_limit"]. + :type value: str + """ + + allowed_values = { + "cursor_limit", + } + CURSOR_LIMIT: ClassVar["MetricMetaPageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricMetaPageType.CURSOR_LIMIT = MetricMetaPageType("cursor_limit") diff --git a/datadog_api_client/v2/model/metric_metadata.py b/datadog_api_client/v2/model/metric_metadata.py new file mode 100644 index 0000000000..0a7f9ca320 --- /dev/null +++ b/datadog_api_client/v2/model/metric_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_origin import MetricOrigin + +class MetricMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_origin import MetricOrigin + return { + "origin": (MetricOrigin,), + } + attribute_map = { + "origin": "origin", + } + + def __init__(self_, origin: Union[MetricOrigin, UnsetType]=unset, **kwargs): + """ + Metadata for the metric. + + :param origin: Metric origin information. + :type origin: MetricOrigin, optional + """ + if origin is not unset: + kwargs["origin"] = origin + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_monitor_asset.py b/datadog_api_client/v2/model/metric_monitor_asset.py new file mode 100644 index 0000000000..efa13532d0 --- /dev/null +++ b/datadog_api_client/v2/model/metric_monitor_asset.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_attributes import MetricAssetAttributes + from datadog_api_client.v2.model.metric_monitor_type import MetricMonitorType + +class MetricMonitorAsset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_attributes import MetricAssetAttributes + from datadog_api_client.v2.model.metric_monitor_type import MetricMonitorType + return { + "attributes": (MetricAssetAttributes,), + "id": (str,), + "type": (MetricMonitorType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MetricMonitorType, attributes: Union[MetricAssetAttributes, UnsetType]=unset, **kwargs): + """ + A monitor object with title. + + :param attributes: Assets related to the object, including title, url, and tags. + :type attributes: MetricAssetAttributes, optional + + :param id: The related monitor's ID. + :type id: str + + :param type: Monitor resource type. + :type type: MetricMonitorType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_monitor_type.py b/datadog_api_client/v2/model/metric_monitor_type.py new file mode 100644 index 0000000000..0f34ff17db --- /dev/null +++ b/datadog_api_client/v2/model/metric_monitor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricMonitorType(ModelSimple): + """ + Monitor resource type. + + :param value: If omitted defaults to "monitors". Must be one of ["monitors"]. + :type value: str + """ + + allowed_values = { + "monitors", + } + MONITORS: ClassVar["MetricMonitorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricMonitorType.MONITORS = MetricMonitorType("monitors") diff --git a/datadog_api_client/v2/model/metric_notebook_asset.py b/datadog_api_client/v2/model/metric_notebook_asset.py new file mode 100644 index 0000000000..d4b93f2c83 --- /dev/null +++ b/datadog_api_client/v2/model/metric_notebook_asset.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_attributes import MetricAssetAttributes + from datadog_api_client.v2.model.metric_notebook_type import MetricNotebookType + +class MetricNotebookAsset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_attributes import MetricAssetAttributes + from datadog_api_client.v2.model.metric_notebook_type import MetricNotebookType + return { + "attributes": (MetricAssetAttributes,), + "id": (str,), + "type": (MetricNotebookType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MetricNotebookType, attributes: Union[MetricAssetAttributes, UnsetType]=unset, **kwargs): + """ + A notebook object with title. + + :param attributes: Assets related to the object, including title, url, and tags. + :type attributes: MetricAssetAttributes, optional + + :param id: The related notebook's ID. + :type id: str + + :param type: Notebook resource type. + :type type: MetricNotebookType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_notebook_type.py b/datadog_api_client/v2/model/metric_notebook_type.py new file mode 100644 index 0000000000..f26f566797 --- /dev/null +++ b/datadog_api_client/v2/model/metric_notebook_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricNotebookType(ModelSimple): + """ + Notebook resource type. + + :param value: If omitted defaults to "notebooks". Must be one of ["notebooks"]. + :type value: str + """ + + allowed_values = { + "notebooks", + } + NOTEBOOKS: ClassVar["MetricNotebookType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricNotebookType.NOTEBOOKS = MetricNotebookType("notebooks") diff --git a/datadog_api_client/v2/model/metric_origin.py b/datadog_api_client/v2/model/metric_origin.py new file mode 100644 index 0000000000..892d32c678 --- /dev/null +++ b/datadog_api_client/v2/model/metric_origin.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricOrigin(ModelNormal): + validations = { + "metric_type": { + "inclusive_maximum": 1000, + }, + "product": { + "inclusive_maximum": 1000, + }, + "service": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "metric_type": (int,), + "product": (int,), + "service": (int,), + } + attribute_map = { + "metric_type": "metric_type", + "product": "product", + "service": "service", + } + + def __init__(self_, metric_type: Union[int, UnsetType]=unset, product: Union[int, UnsetType]=unset, service: Union[int, UnsetType]=unset, **kwargs): + """ + Metric origin information. + + :param metric_type: The origin metric type code + :type metric_type: int, optional + + :param product: The origin product code + :type product: int, optional + + :param service: The origin service code + :type service: int, optional + """ + if metric_type is not unset: + kwargs["metric_type"] = metric_type + if product is not unset: + kwargs["product"] = product + if service is not unset: + kwargs["service"] = service + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_pagination_meta.py b/datadog_api_client/v2/model/metric_pagination_meta.py new file mode 100644 index 0000000000..ebdd726a9e --- /dev/null +++ b/datadog_api_client/v2/model/metric_pagination_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_meta_page import MetricMetaPage + +class MetricPaginationMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_meta_page import MetricMetaPage + return { + "pagination": (MetricMetaPage,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[MetricMetaPage, UnsetType]=unset, **kwargs): + """ + Response metadata object. + + :param pagination: Paging attributes. Only present if pagination query parameters were provided. + :type pagination: MetricMetaPage, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_payload.py b/datadog_api_client/v2/model/metric_payload.py new file mode 100644 index 0000000000..9afde7245d --- /dev/null +++ b/datadog_api_client/v2/model/metric_payload.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_series import MetricSeries + +class MetricPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_series import MetricSeries + return { + "series": ([MetricSeries],), + } + attribute_map = { + "series": "series", + } + + def __init__(self_, series: List[MetricSeries], **kwargs): + """ + The metrics' payload. + + :param series: A list of timeseries to submit to Datadog. + :type series: [MetricSeries] + """ + super().__init__(kwargs) + + + self_.series = series diff --git a/datadog_api_client/v2/model/metric_point.py b/datadog_api_client/v2/model/metric_point.py new file mode 100644 index 0000000000..0e5411d18b --- /dev/null +++ b/datadog_api_client/v2/model/metric_point.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricPoint(ModelNormal): + @cached_property + def openapi_types(_): + return { + "timestamp": (int,), + "value": (float,), + } + attribute_map = { + "timestamp": "timestamp", + "value": "value", + } + + def __init__(self_, timestamp: Union[int, UnsetType]=unset, value: Union[float, UnsetType]=unset, **kwargs): + """ + A point object is of the form ``{POSIX_timestamp, numeric_value}``. + + :param timestamp: The timestamp should be in seconds and current. + Current is defined as not more than 10 minutes in the future or more than 1 hour in the past. + :type timestamp: int, optional + + :param value: The numeric value format should be a 64bit float gauge-type value. + :type value: float, optional + """ + if timestamp is not unset: + kwargs["timestamp"] = timestamp + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_relationships.py b/datadog_api_client/v2/model/metric_relationships.py new file mode 100644 index 0000000000..15fa13d626 --- /dev/null +++ b/datadog_api_client/v2/model/metric_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_volumes_relationship import MetricVolumesRelationship + +class MetricRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_volumes_relationship import MetricVolumesRelationship + return { + "metric_volumes": (MetricVolumesRelationship,), + } + attribute_map = { + "metric_volumes": "metric_volumes", + } + + def __init__(self_, metric_volumes: Union[MetricVolumesRelationship, UnsetType]=unset, **kwargs): + """ + Relationships for a metric. + + :param metric_volumes: Relationship to a metric volume included in the response. + :type metric_volumes: MetricVolumesRelationship, optional + """ + if metric_volumes is not unset: + kwargs["metric_volumes"] = metric_volumes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_resource.py b/datadog_api_client/v2/model/metric_resource.py new file mode 100644 index 0000000000..d0da4dda27 --- /dev/null +++ b/datadog_api_client/v2/model/metric_resource.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricResource(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "type": (str,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Metric resource. + + :param name: The name of the resource. + :type name: str, optional + + :param type: The type of the resource. + :type type: str, optional + """ + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_series.py b/datadog_api_client/v2/model/metric_series.py new file mode 100644 index 0000000000..4e8a38d719 --- /dev/null +++ b/datadog_api_client/v2/model/metric_series.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_metadata import MetricMetadata + from datadog_api_client.v2.model.metric_point import MetricPoint + from datadog_api_client.v2.model.metric_resource import MetricResource + from datadog_api_client.v2.model.metric_intake_type import MetricIntakeType + +class MetricSeries(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_metadata import MetricMetadata + from datadog_api_client.v2.model.metric_point import MetricPoint + from datadog_api_client.v2.model.metric_resource import MetricResource + from datadog_api_client.v2.model.metric_intake_type import MetricIntakeType + return { + "interval": (int,), + "metadata": (MetricMetadata,), + "metric": (str,), + "points": ([MetricPoint],), + "resources": ([MetricResource],), + "source_type_name": (str,), + "tags": ([str],), + "type": (MetricIntakeType,), + "unit": (str,), + } + attribute_map = { + "interval": "interval", + "metadata": "metadata", + "metric": "metric", + "points": "points", + "resources": "resources", + "source_type_name": "source_type_name", + "tags": "tags", + "type": "type", + "unit": "unit", + } + + def __init__(self_, metric: str, points: List[MetricPoint], interval: Union[int, UnsetType]=unset, metadata: Union[MetricMetadata, UnsetType]=unset, resources: Union[List[MetricResource], UnsetType]=unset, source_type_name: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[MetricIntakeType, UnsetType]=unset, unit: Union[str, UnsetType]=unset, **kwargs): + """ + A metric to submit to Datadog. + See `Datadog metrics `_. + + :param interval: If the type of the metric is rate or count, define the corresponding interval in seconds. + :type interval: int, optional + + :param metadata: Metadata for the metric. + :type metadata: MetricMetadata, optional + + :param metric: The name of the timeseries. + :type metric: str + + :param points: Points relating to a metric. All points must be objects with timestamp and a scalar value (cannot be a string). Timestamps should be in POSIX time in seconds, and cannot be more than ten minutes in the future or more than one hour in the past. + :type points: [MetricPoint] + + :param resources: A list of resources to associate with this metric. + :type resources: [MetricResource], optional + + :param source_type_name: The source type name. + :type source_type_name: str, optional + + :param tags: A list of tags associated with the metric. + :type tags: [str], optional + + :param type: The type of metric. The available types are ``0`` (unspecified), ``1`` (count), ``2`` (rate), and ``3`` (gauge). + :type type: MetricIntakeType, optional + + :param unit: The unit of point value. + :type unit: str, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metadata is not unset: + kwargs["metadata"] = metadata + if resources is not unset: + kwargs["resources"] = resources + if source_type_name is not unset: + kwargs["source_type_name"] = source_type_name + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + + self_.metric = metric + self_.points = points diff --git a/datadog_api_client/v2/model/metric_slo_asset.py b/datadog_api_client/v2/model/metric_slo_asset.py new file mode 100644 index 0000000000..d502d013ba --- /dev/null +++ b/datadog_api_client/v2/model/metric_slo_asset.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_asset_attributes import MetricAssetAttributes + from datadog_api_client.v2.model.metric_slo_type import MetricSLOType + +class MetricSLOAsset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_asset_attributes import MetricAssetAttributes + from datadog_api_client.v2.model.metric_slo_type import MetricSLOType + return { + "attributes": (MetricAssetAttributes,), + "id": (str,), + "type": (MetricSLOType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MetricSLOType, attributes: Union[MetricAssetAttributes, UnsetType]=unset, **kwargs): + """ + A SLO object with title. + + :param attributes: Assets related to the object, including title, url, and tags. + :type attributes: MetricAssetAttributes, optional + + :param id: The SLO ID. + :type id: str + + :param type: SLO resource type. + :type type: MetricSLOType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_slo_type.py b/datadog_api_client/v2/model/metric_slo_type.py new file mode 100644 index 0000000000..920a1b7cec --- /dev/null +++ b/datadog_api_client/v2/model/metric_slo_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricSLOType(ModelSimple): + """ + SLO resource type. + + :param value: If omitted defaults to "slos". Must be one of ["slos"]. + :type value: str + """ + + allowed_values = { + "slos", + } + SLOS: ClassVar["MetricSLOType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricSLOType.SLOS = MetricSLOType("slos") diff --git a/datadog_api_client/v2/model/metric_suggested_aggregations.py b/datadog_api_client/v2/model/metric_suggested_aggregations.py new file mode 100644 index 0000000000..6ec0f374af --- /dev/null +++ b/datadog_api_client/v2/model/metric_suggested_aggregations.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricSuggestedAggregations(ModelSimple): + """ + List of aggregation combinations that have been actively queried. + + + :type value: [MetricCustomAggregation] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_custom_aggregation import MetricCustomAggregation + return { + "value": ([MetricCustomAggregation],), + } diff --git a/datadog_api_client/v2/model/metric_suggested_tags_and_aggregations.py b/datadog_api_client/v2/model/metric_suggested_tags_and_aggregations.py new file mode 100644 index 0000000000..89013bacda --- /dev/null +++ b/datadog_api_client/v2/model/metric_suggested_tags_and_aggregations.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_suggested_tags_attributes import MetricSuggestedTagsAttributes + from datadog_api_client.v2.model.metric_active_configuration_type import MetricActiveConfigurationType + +class MetricSuggestedTagsAndAggregations(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_suggested_tags_attributes import MetricSuggestedTagsAttributes + from datadog_api_client.v2.model.metric_active_configuration_type import MetricActiveConfigurationType + return { + "attributes": (MetricSuggestedTagsAttributes,), + "id": (str,), + "type": (MetricActiveConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MetricSuggestedTagsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MetricActiveConfigurationType, UnsetType]=unset, **kwargs): + """ + Object for a single metric's actively queried tags and aggregations. + + :param attributes: Object containing the definition of a metric's actively queried tags and aggregations. + :type attributes: MetricSuggestedTagsAttributes, optional + + :param id: The metric name for this resource. + :type id: str, optional + + :param type: The metric actively queried configuration resource type. + :type type: MetricActiveConfigurationType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_suggested_tags_and_aggregations_response.py b/datadog_api_client/v2/model/metric_suggested_tags_and_aggregations_response.py new file mode 100644 index 0000000000..2fbe58ad63 --- /dev/null +++ b/datadog_api_client/v2/model/metric_suggested_tags_and_aggregations_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_suggested_tags_and_aggregations import MetricSuggestedTagsAndAggregations + +class MetricSuggestedTagsAndAggregationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_suggested_tags_and_aggregations import MetricSuggestedTagsAndAggregations + return { + "data": (MetricSuggestedTagsAndAggregations,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MetricSuggestedTagsAndAggregations, UnsetType]=unset, **kwargs): + """ + Response object that includes a single metric's actively queried tags and aggregations. + + :param data: Object for a single metric's actively queried tags and aggregations. + :type data: MetricSuggestedTagsAndAggregations, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_suggested_tags_attributes.py b/datadog_api_client/v2/model/metric_suggested_tags_attributes.py new file mode 100644 index 0000000000..fd8786035d --- /dev/null +++ b/datadog_api_client/v2/model/metric_suggested_tags_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_suggested_aggregations import MetricSuggestedAggregations + +class MetricSuggestedTagsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_suggested_aggregations import MetricSuggestedAggregations + return { + "active_aggregations": (MetricSuggestedAggregations,), + "active_tags": ([str],), + } + attribute_map = { + "active_aggregations": "active_aggregations", + "active_tags": "active_tags", + } + + def __init__(self_, active_aggregations: Union[MetricSuggestedAggregations, UnsetType]=unset, active_tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing the definition of a metric's actively queried tags and aggregations. + + :param active_aggregations: List of aggregation combinations that have been actively queried. + :type active_aggregations: MetricSuggestedAggregations, optional + + :param active_tags: List of tag keys that have been actively queried. + :type active_tags: [str], optional + """ + if active_aggregations is not unset: + kwargs["active_aggregations"] = active_aggregations + if active_tags is not unset: + kwargs["active_tags"] = active_tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_tag_cardinalities_meta.py b/datadog_api_client/v2/model/metric_tag_cardinalities_meta.py new file mode 100644 index 0000000000..8abe68ba33 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_cardinalities_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricTagCardinalitiesMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "metric_name": (str,), + } + attribute_map = { + "metric_name": "metric_name", + } + + def __init__(self_, metric_name: Union[str, UnsetType]=unset, **kwargs): + """ + Response metadata object. + + :param metric_name: The name of metric for which the tag cardinalities are returned. + This matches the metric name provided in the request. + :type metric_name: str, optional + """ + if metric_name is not unset: + kwargs["metric_name"] = metric_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_tag_cardinalities_response.py b/datadog_api_client/v2/model/metric_tag_cardinalities_response.py new file mode 100644 index 0000000000..32851d7e6d --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_cardinalities_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_tag_cardinality import MetricTagCardinality + from datadog_api_client.v2.model.metric_tag_cardinalities_meta import MetricTagCardinalitiesMeta + +class MetricTagCardinalitiesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_tag_cardinality import MetricTagCardinality + from datadog_api_client.v2.model.metric_tag_cardinalities_meta import MetricTagCardinalitiesMeta + return { + "data": ([MetricTagCardinality],), + "meta": (MetricTagCardinalitiesMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[MetricTagCardinality], UnsetType]=unset, meta: Union[MetricTagCardinalitiesMeta, UnsetType]=unset, **kwargs): + """ + Response object that includes an array of objects representing the cardinality details of a metric's tags. + + :param data: A list of tag cardinalities associated with the given metric. + :type data: [MetricTagCardinality], optional + + :param meta: Response metadata object. + :type meta: MetricTagCardinalitiesMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_tag_cardinality.py b/datadog_api_client/v2/model/metric_tag_cardinality.py new file mode 100644 index 0000000000..d9eaefc4bf --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_cardinality.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_tag_cardinality_attributes import MetricTagCardinalityAttributes + +class MetricTagCardinality(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_tag_cardinality_attributes import MetricTagCardinalityAttributes + return { + "attributes": (MetricTagCardinalityAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MetricTagCardinalityAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing metadata and attributes related to a specific tag key associated with the metric. + + :param attributes: An object containing properties related to the tag key + :type attributes: MetricTagCardinalityAttributes, optional + + :param id: The name of the tag key. + :type id: str, optional + + :param type: This describes the endpoint action. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_tag_cardinality_attributes.py b/datadog_api_client/v2/model/metric_tag_cardinality_attributes.py new file mode 100644 index 0000000000..c3a57b3450 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_cardinality_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricTagCardinalityAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cardinality_delta": (int,), + } + attribute_map = { + "cardinality_delta": "cardinality_delta", + } + + def __init__(self_, cardinality_delta: Union[int, UnsetType]=unset, **kwargs): + """ + An object containing properties related to the tag key + + :param cardinality_delta: This describes the recent change in the tag keys cardinality + :type cardinality_delta: int, optional + """ + if cardinality_delta is not unset: + kwargs["cardinality_delta"] = cardinality_delta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_tag_configuration.py b/datadog_api_client/v2/model/metric_tag_configuration.py new file mode 100644 index 0000000000..f51e3168cd --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_tag_configuration_attributes import MetricTagConfigurationAttributes + from datadog_api_client.v2.model.metric_relationships import MetricRelationships + from datadog_api_client.v2.model.metric_tag_configuration_type import MetricTagConfigurationType + +class MetricTagConfiguration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_tag_configuration_attributes import MetricTagConfigurationAttributes + from datadog_api_client.v2.model.metric_relationships import MetricRelationships + from datadog_api_client.v2.model.metric_tag_configuration_type import MetricTagConfigurationType + return { + "attributes": (MetricTagConfigurationAttributes,), + "id": (str,), + "relationships": (MetricRelationships,), + "type": (MetricTagConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[MetricTagConfigurationAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[MetricRelationships, UnsetType]=unset, type: Union[MetricTagConfigurationType, UnsetType]=unset, **kwargs): + """ + Object for a single metric tag configuration. + + :param attributes: Object containing the definition of a metric tag configuration attributes. + :type attributes: MetricTagConfigurationAttributes, optional + + :param id: The metric name for this resource. + :type id: str, optional + + :param relationships: Relationships for a metric. + :type relationships: MetricRelationships, optional + + :param type: The metric tag configuration resource type. + :type type: MetricTagConfigurationType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_tag_configuration_attributes.py b/datadog_api_client/v2/model/metric_tag_configuration_attributes.py new file mode 100644 index 0000000000..44e8bbb8e2 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_custom_aggregations import MetricCustomAggregations + from datadog_api_client.v2.model.metric_tag_configuration_metric_types import MetricTagConfigurationMetricTypes + +class MetricTagConfigurationAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_custom_aggregations import MetricCustomAggregations + from datadog_api_client.v2.model.metric_tag_configuration_metric_types import MetricTagConfigurationMetricTypes + return { + "aggregations": (MetricCustomAggregations,), + "created_at": (datetime,), + "exclude_tags_mode": (bool,), + "include_percentiles": (bool,), + "metric_type": (MetricTagConfigurationMetricTypes,), + "modified_at": (datetime,), + "tags": ([str],), + } + attribute_map = { + "aggregations": "aggregations", + "created_at": "created_at", + "exclude_tags_mode": "exclude_tags_mode", + "include_percentiles": "include_percentiles", + "metric_type": "metric_type", + "modified_at": "modified_at", + "tags": "tags", + } + + def __init__(self_, aggregations: Union[MetricCustomAggregations, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, exclude_tags_mode: Union[bool, UnsetType]=unset, include_percentiles: Union[bool, UnsetType]=unset, metric_type: Union[MetricTagConfigurationMetricTypes, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing the definition of a metric tag configuration attributes. + + :param aggregations: Deprecated. You no longer need to configure specific time and space aggregations for Metrics Without Limits. + :type aggregations: MetricCustomAggregations, optional + + :param created_at: Timestamp when the tag configuration was created. + :type created_at: datetime, optional + + :param exclude_tags_mode: When set to true, the configuration will exclude the configured tags and include any other submitted tags. + When set to false, the configuration will include the configured tags and exclude any other submitted tags. + Defaults to false. Requires ``tags`` property. + :type exclude_tags_mode: bool, optional + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when the ``metric_type`` is ``distribution``. + :type include_percentiles: bool, optional + + :param metric_type: The metric's type. + :type metric_type: MetricTagConfigurationMetricTypes, optional + + :param modified_at: Timestamp when the tag configuration was last modified. + :type modified_at: datetime, optional + + :param tags: List of tag keys on which to group. + :type tags: [str], optional + """ + if aggregations is not unset: + kwargs["aggregations"] = aggregations + if created_at is not unset: + kwargs["created_at"] = created_at + if exclude_tags_mode is not unset: + kwargs["exclude_tags_mode"] = exclude_tags_mode + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + if metric_type is not unset: + kwargs["metric_type"] = metric_type + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_tag_configuration_create_attributes.py b/datadog_api_client/v2/model/metric_tag_configuration_create_attributes.py new file mode 100644 index 0000000000..11f306edd0 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_create_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_custom_aggregations import MetricCustomAggregations + from datadog_api_client.v2.model.metric_tag_configuration_metric_types import MetricTagConfigurationMetricTypes + +class MetricTagConfigurationCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_custom_aggregations import MetricCustomAggregations + from datadog_api_client.v2.model.metric_tag_configuration_metric_types import MetricTagConfigurationMetricTypes + return { + "aggregations": (MetricCustomAggregations,), + "exclude_tags_mode": (bool,), + "include_percentiles": (bool,), + "metric_type": (MetricTagConfigurationMetricTypes,), + "tags": ([str],), + } + attribute_map = { + "aggregations": "aggregations", + "exclude_tags_mode": "exclude_tags_mode", + "include_percentiles": "include_percentiles", + "metric_type": "metric_type", + "tags": "tags", + } + + def __init__(self_, metric_type: MetricTagConfigurationMetricTypes, aggregations: Union[MetricCustomAggregations, UnsetType]=unset, exclude_tags_mode: Union[bool, UnsetType]=unset, include_percentiles: Union[bool, UnsetType]=unset, **kwargs): + """ + Object containing the definition of a metric tag configuration to be created. + + :param aggregations: Deprecated. You no longer need to configure specific time and space aggregations for Metrics Without Limits. + :type aggregations: MetricCustomAggregations, optional + + :param exclude_tags_mode: When set to true, the configuration will exclude the configured tags and include any other submitted tags. + When set to false, the configuration will include the configured tags and exclude any other submitted tags. + Defaults to false. Requires ``tags`` property. + :type exclude_tags_mode: bool, optional + + :param include_percentiles: Toggle to include/exclude percentiles for a distribution metric. + Defaults to false. Can only be applied to metrics that have a ``metric_type`` of ``distribution``. + :type include_percentiles: bool, optional + + :param metric_type: The metric's type. + :type metric_type: MetricTagConfigurationMetricTypes + + :param tags: A list of tag keys that will be queryable for your metric. + :type tags: [str] + """ + if aggregations is not unset: + kwargs["aggregations"] = aggregations + if exclude_tags_mode is not unset: + kwargs["exclude_tags_mode"] = exclude_tags_mode + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + super().__init__(kwargs) + tags = kwargs.get("tags", []) + + + self_.metric_type = metric_type + self_.tags = tags diff --git a/datadog_api_client/v2/model/metric_tag_configuration_create_data.py b/datadog_api_client/v2/model/metric_tag_configuration_create_data.py new file mode 100644 index 0000000000..715168e616 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_create_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_tag_configuration_create_attributes import MetricTagConfigurationCreateAttributes + from datadog_api_client.v2.model.metric_tag_configuration_type import MetricTagConfigurationType + +class MetricTagConfigurationCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_tag_configuration_create_attributes import MetricTagConfigurationCreateAttributes + from datadog_api_client.v2.model.metric_tag_configuration_type import MetricTagConfigurationType + return { + "attributes": (MetricTagConfigurationCreateAttributes,), + "id": (str,), + "type": (MetricTagConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MetricTagConfigurationType, attributes: Union[MetricTagConfigurationCreateAttributes, UnsetType]=unset, **kwargs): + """ + Object for a single metric to be configure tags on. + + :param attributes: Object containing the definition of a metric tag configuration to be created. + :type attributes: MetricTagConfigurationCreateAttributes, optional + + :param id: The metric name for this resource. + :type id: str + + :param type: The metric tag configuration resource type. + :type type: MetricTagConfigurationType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_tag_configuration_create_request.py b/datadog_api_client/v2/model/metric_tag_configuration_create_request.py new file mode 100644 index 0000000000..fa86fb1d55 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_tag_configuration_create_data import MetricTagConfigurationCreateData + +class MetricTagConfigurationCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_tag_configuration_create_data import MetricTagConfigurationCreateData + return { + "data": (MetricTagConfigurationCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MetricTagConfigurationCreateData, **kwargs): + """ + Request object that includes the metric that you would like to configure tags for. + + :param data: Object for a single metric to be configure tags on. + :type data: MetricTagConfigurationCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/metric_tag_configuration_metric_type_category.py b/datadog_api_client/v2/model/metric_tag_configuration_metric_type_category.py new file mode 100644 index 0000000000..c4ed1bb626 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_metric_type_category.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricTagConfigurationMetricTypeCategory(ModelSimple): + """ + The metric's type category. + + :param value: If omitted defaults to "distribution". Must be one of ["non_distribution", "distribution"]. + :type value: str + """ + + allowed_values = { + "non_distribution", + "distribution", + } + NON_DISTRIBUTION: ClassVar["MetricTagConfigurationMetricTypeCategory"] + DISTRIBUTION: ClassVar["MetricTagConfigurationMetricTypeCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricTagConfigurationMetricTypeCategory.NON_DISTRIBUTION = MetricTagConfigurationMetricTypeCategory("non_distribution") +MetricTagConfigurationMetricTypeCategory.DISTRIBUTION = MetricTagConfigurationMetricTypeCategory("distribution") diff --git a/datadog_api_client/v2/model/metric_tag_configuration_metric_types.py b/datadog_api_client/v2/model/metric_tag_configuration_metric_types.py new file mode 100644 index 0000000000..d9aa632bb1 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_metric_types.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricTagConfigurationMetricTypes(ModelSimple): + """ + The metric's type. + + :param value: If omitted defaults to "gauge". Must be one of ["gauge", "count", "rate", "distribution"]. + :type value: str + """ + + allowed_values = { + "gauge", + "count", + "rate", + "distribution", + } + GAUGE: ClassVar["MetricTagConfigurationMetricTypes"] + COUNT: ClassVar["MetricTagConfigurationMetricTypes"] + RATE: ClassVar["MetricTagConfigurationMetricTypes"] + DISTRIBUTION: ClassVar["MetricTagConfigurationMetricTypes"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricTagConfigurationMetricTypes.GAUGE = MetricTagConfigurationMetricTypes("gauge") +MetricTagConfigurationMetricTypes.COUNT = MetricTagConfigurationMetricTypes("count") +MetricTagConfigurationMetricTypes.RATE = MetricTagConfigurationMetricTypes("rate") +MetricTagConfigurationMetricTypes.DISTRIBUTION = MetricTagConfigurationMetricTypes("distribution") diff --git a/datadog_api_client/v2/model/metric_tag_configuration_response.py b/datadog_api_client/v2/model/metric_tag_configuration_response.py new file mode 100644 index 0000000000..e9965de941 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_tag_configuration import MetricTagConfiguration + +class MetricTagConfigurationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_tag_configuration import MetricTagConfiguration + return { + "data": (MetricTagConfiguration,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MetricTagConfiguration, UnsetType]=unset, **kwargs): + """ + Response object which includes a single metric's tag configuration. + + :param data: Object for a single metric tag configuration. + :type data: MetricTagConfiguration, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_tag_configuration_type.py b/datadog_api_client/v2/model/metric_tag_configuration_type.py new file mode 100644 index 0000000000..83553795e4 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricTagConfigurationType(ModelSimple): + """ + The metric tag configuration resource type. + + :param value: If omitted defaults to "manage_tags". Must be one of ["manage_tags"]. + :type value: str + """ + + allowed_values = { + "manage_tags", + } + MANAGE_TAGS: ClassVar["MetricTagConfigurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricTagConfigurationType.MANAGE_TAGS = MetricTagConfigurationType("manage_tags") diff --git a/datadog_api_client/v2/model/metric_tag_configuration_update_attributes.py b/datadog_api_client/v2/model/metric_tag_configuration_update_attributes.py new file mode 100644 index 0000000000..ff2b2cf069 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_custom_aggregations import MetricCustomAggregations + +class MetricTagConfigurationUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_custom_aggregations import MetricCustomAggregations + return { + "aggregations": (MetricCustomAggregations,), + "exclude_tags_mode": (bool,), + "include_percentiles": (bool,), + "tags": ([str],), + } + attribute_map = { + "aggregations": "aggregations", + "exclude_tags_mode": "exclude_tags_mode", + "include_percentiles": "include_percentiles", + "tags": "tags", + } + + def __init__(self_, aggregations: Union[MetricCustomAggregations, UnsetType]=unset, exclude_tags_mode: Union[bool, UnsetType]=unset, include_percentiles: Union[bool, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing the definition of a metric tag configuration to be updated. + + :param aggregations: Deprecated. You no longer need to configure specific time and space aggregations for Metrics Without Limits. + :type aggregations: MetricCustomAggregations, optional + + :param exclude_tags_mode: When set to true, the configuration will exclude the configured tags and include any other submitted tags. + When set to false, the configuration will include the configured tags and exclude any other submitted tags. + Defaults to false. Requires ``tags`` property. + :type exclude_tags_mode: bool, optional + + :param include_percentiles: Toggle to include/exclude percentiles for a distribution metric. + Defaults to false. Can only be applied to metrics that have a ``metric_type`` of ``distribution``. + :type include_percentiles: bool, optional + + :param tags: A list of tag keys that will be queryable for your metric. + :type tags: [str], optional + """ + if aggregations is not unset: + kwargs["aggregations"] = aggregations + if exclude_tags_mode is not unset: + kwargs["exclude_tags_mode"] = exclude_tags_mode + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_tag_configuration_update_data.py b/datadog_api_client/v2/model/metric_tag_configuration_update_data.py new file mode 100644 index 0000000000..dbd8374391 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_tag_configuration_update_attributes import MetricTagConfigurationUpdateAttributes + from datadog_api_client.v2.model.metric_tag_configuration_type import MetricTagConfigurationType + +class MetricTagConfigurationUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_tag_configuration_update_attributes import MetricTagConfigurationUpdateAttributes + from datadog_api_client.v2.model.metric_tag_configuration_type import MetricTagConfigurationType + return { + "attributes": (MetricTagConfigurationUpdateAttributes,), + "id": (str,), + "type": (MetricTagConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MetricTagConfigurationType, attributes: Union[MetricTagConfigurationUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Object for a single tag configuration to be edited. + + :param attributes: Object containing the definition of a metric tag configuration to be updated. + :type attributes: MetricTagConfigurationUpdateAttributes, optional + + :param id: The metric name for this resource. + :type id: str + + :param type: The metric tag configuration resource type. + :type type: MetricTagConfigurationType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/metric_tag_configuration_update_request.py b/datadog_api_client/v2/model/metric_tag_configuration_update_request.py new file mode 100644 index 0000000000..be1e565770 --- /dev/null +++ b/datadog_api_client/v2/model/metric_tag_configuration_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_tag_configuration_update_data import MetricTagConfigurationUpdateData + +class MetricTagConfigurationUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_tag_configuration_update_data import MetricTagConfigurationUpdateData + return { + "data": (MetricTagConfigurationUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MetricTagConfigurationUpdateData, **kwargs): + """ + Request object that includes the metric that you would like to edit the tag configuration on. + + :param data: Object for a single tag configuration to be edited. + :type data: MetricTagConfigurationUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/metric_type.py b/datadog_api_client/v2/model/metric_type.py new file mode 100644 index 0000000000..6cecb7472d --- /dev/null +++ b/datadog_api_client/v2/model/metric_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricType(ModelSimple): + """ + The metric resource type. + + :param value: If omitted defaults to "metrics". Must be one of ["metrics"]. + :type value: str + """ + + allowed_values = { + "metrics", + } + METRICS: ClassVar["MetricType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricType.METRICS = MetricType("metrics") diff --git a/datadog_api_client/v2/model/metric_volumes.py b/datadog_api_client/v2/model/metric_volumes.py new file mode 100644 index 0000000000..0cfae32f19 --- /dev/null +++ b/datadog_api_client/v2/model/metric_volumes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricVolumes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Possible response objects for a metric's volume. + + :param attributes: Object containing the definition of a metric's distinct volume. + :type attributes: MetricDistinctVolumeAttributes, optional + + :param id: The metric name for this resource. + :type id: str, optional + + :param type: The metric distinct volume type. + :type type: MetricDistinctVolumeType, 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.metric_distinct_volume import MetricDistinctVolume + from datadog_api_client.v2.model.metric_ingested_indexed_volume import MetricIngestedIndexedVolume + return { + "oneOf": [ + MetricDistinctVolume, + MetricIngestedIndexedVolume, + ], + } diff --git a/datadog_api_client/v2/model/metric_volumes_relationship.py b/datadog_api_client/v2/model/metric_volumes_relationship.py new file mode 100644 index 0000000000..e219e2e9e1 --- /dev/null +++ b/datadog_api_client/v2/model/metric_volumes_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_volumes_relationship_data import MetricVolumesRelationshipData + +class MetricVolumesRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_volumes_relationship_data import MetricVolumesRelationshipData + return { + "data": (MetricVolumesRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MetricVolumesRelationshipData, UnsetType]=unset, **kwargs): + """ + Relationship to a metric volume included in the response. + + :param data: Relationship data for a metric volume. + :type data: MetricVolumesRelationshipData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_volumes_relationship_data.py b/datadog_api_client/v2/model/metric_volumes_relationship_data.py new file mode 100644 index 0000000000..ea9ca02d34 --- /dev/null +++ b/datadog_api_client/v2/model/metric_volumes_relationship_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_ingested_indexed_volume_type import MetricIngestedIndexedVolumeType + +class MetricVolumesRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_ingested_indexed_volume_type import MetricIngestedIndexedVolumeType + return { + "id": (str,), + "type": (MetricIngestedIndexedVolumeType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[MetricIngestedIndexedVolumeType, UnsetType]=unset, **kwargs): + """ + Relationship data for a metric volume. + + :param id: The metric name for this resource. + :type id: str, optional + + :param type: The metric ingested and indexed volume type. + :type type: MetricIngestedIndexedVolumeType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metric_volumes_response.py b/datadog_api_client/v2/model/metric_volumes_response.py new file mode 100644 index 0000000000..7e29d826db --- /dev/null +++ b/datadog_api_client/v2/model/metric_volumes_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metric_volumes import MetricVolumes + from datadog_api_client.v2.model.metric_distinct_volume import MetricDistinctVolume + from datadog_api_client.v2.model.metric_ingested_indexed_volume import MetricIngestedIndexedVolume + +class MetricVolumesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metric_volumes import MetricVolumes + return { + "data": (MetricVolumes,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MetricVolumes, MetricDistinctVolume, MetricIngestedIndexedVolume, UnsetType]=unset, **kwargs): + """ + Response object which includes a single metric's volume. + + :param data: Possible response objects for a metric's volume. + :type data: MetricVolumes, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metrics_aggregator.py b/datadog_api_client/v2/model/metrics_aggregator.py new file mode 100644 index 0000000000..9908c2e6b0 --- /dev/null +++ b/datadog_api_client/v2/model/metrics_aggregator.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricsAggregator(ModelSimple): + """ + The type of aggregation that can be performed on metrics-based queries. + + :param value: If omitted defaults to "avg". Must be one of ["avg", "min", "max", "sum", "last", "percentile", "mean", "l2norm", "area"]. + :type value: str + """ + + allowed_values = { + "avg", + "min", + "max", + "sum", + "last", + "percentile", + "mean", + "l2norm", + "area", + } + AVG: ClassVar["MetricsAggregator"] + MIN: ClassVar["MetricsAggregator"] + MAX: ClassVar["MetricsAggregator"] + SUM: ClassVar["MetricsAggregator"] + LAST: ClassVar["MetricsAggregator"] + PERCENTILE: ClassVar["MetricsAggregator"] + MEAN: ClassVar["MetricsAggregator"] + L2NORM: ClassVar["MetricsAggregator"] + AREA: ClassVar["MetricsAggregator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricsAggregator.AVG = MetricsAggregator("avg") +MetricsAggregator.MIN = MetricsAggregator("min") +MetricsAggregator.MAX = MetricsAggregator("max") +MetricsAggregator.SUM = MetricsAggregator("sum") +MetricsAggregator.LAST = MetricsAggregator("last") +MetricsAggregator.PERCENTILE = MetricsAggregator("percentile") +MetricsAggregator.MEAN = MetricsAggregator("mean") +MetricsAggregator.L2NORM = MetricsAggregator("l2norm") +MetricsAggregator.AREA = MetricsAggregator("area") diff --git a/datadog_api_client/v2/model/metrics_and_metric_tag_configurations.py b/datadog_api_client/v2/model/metrics_and_metric_tag_configurations.py new file mode 100644 index 0000000000..65f3a3cfeb --- /dev/null +++ b/datadog_api_client/v2/model/metrics_and_metric_tag_configurations.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricsAndMetricTagConfigurations(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Object for a metrics and metric tag configurations. + + :param id: The metric name for this resource. + :type id: str, optional + + :param relationships: Relationships for a metric. + :type relationships: MetricRelationships, optional + + :param type: The metric resource type. + :type type: MetricType, optional + + :param attributes: Object containing the definition of a metric tag configuration attributes. + :type attributes: MetricTagConfigurationAttributes, 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.metric import Metric + from datadog_api_client.v2.model.metric_tag_configuration import MetricTagConfiguration + return { + "oneOf": [ + Metric, + MetricTagConfiguration, + ], + } diff --git a/datadog_api_client/v2/model/metrics_and_metric_tag_configurations_response.py b/datadog_api_client/v2/model/metrics_and_metric_tag_configurations_response.py new file mode 100644 index 0000000000..5a12d44368 --- /dev/null +++ b/datadog_api_client/v2/model/metrics_and_metric_tag_configurations_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metrics_and_metric_tag_configurations import MetricsAndMetricTagConfigurations + from datadog_api_client.v2.model.metric_ingested_indexed_volume import MetricIngestedIndexedVolume + from datadog_api_client.v2.model.metrics_list_response_links import MetricsListResponseLinks + from datadog_api_client.v2.model.metric_pagination_meta import MetricPaginationMeta + from datadog_api_client.v2.model.metric import Metric + from datadog_api_client.v2.model.metric_tag_configuration import MetricTagConfiguration + +class MetricsAndMetricTagConfigurationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metrics_and_metric_tag_configurations import MetricsAndMetricTagConfigurations + from datadog_api_client.v2.model.metric_ingested_indexed_volume import MetricIngestedIndexedVolume + from datadog_api_client.v2.model.metrics_list_response_links import MetricsListResponseLinks + from datadog_api_client.v2.model.metric_pagination_meta import MetricPaginationMeta + return { + "data": ([MetricsAndMetricTagConfigurations],), + "included": ([MetricIngestedIndexedVolume],), + "links": (MetricsListResponseLinks,), + "meta": (MetricPaginationMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[Union[MetricsAndMetricTagConfigurations, Metric, MetricTagConfiguration]], UnsetType]=unset, included: Union[List[MetricIngestedIndexedVolume], UnsetType]=unset, links: Union[MetricsListResponseLinks, UnsetType]=unset, meta: Union[MetricPaginationMeta, UnsetType]=unset, **kwargs): + """ + Response object that includes metrics and metric tag configurations. + + :param data: Array of metrics and metric tag configurations. + :type data: [MetricsAndMetricTagConfigurations], optional + + :param included: Array of metric volume resources included when requested with ``include=metric_volumes``. + :type included: [MetricIngestedIndexedVolume], optional + + :param links: Pagination links. Only present if pagination query parameters were provided. + :type links: MetricsListResponseLinks, optional + + :param meta: Response metadata object. + :type meta: MetricPaginationMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metrics_data_source.py b/datadog_api_client/v2/model/metrics_data_source.py new file mode 100644 index 0000000000..d917fc1a41 --- /dev/null +++ b/datadog_api_client/v2/model/metrics_data_source.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MetricsDataSource(ModelSimple): + """ + A data source that is powered by the Metrics platform. + + :param value: If omitted defaults to "metrics". Must be one of ["metrics", "cloud_cost"]. + :type value: str + """ + + allowed_values = { + "metrics", + "cloud_cost", + } + METRICS: ClassVar["MetricsDataSource"] + CLOUD_COST: ClassVar["MetricsDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MetricsDataSource.METRICS = MetricsDataSource("metrics") +MetricsDataSource.CLOUD_COST = MetricsDataSource("cloud_cost") diff --git a/datadog_api_client/v2/model/metrics_list_response_links.py b/datadog_api_client/v2/model/metrics_list_response_links.py new file mode 100644 index 0000000000..eccf0ea740 --- /dev/null +++ b/datadog_api_client/v2/model/metrics_list_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MetricsListResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str, none_type), + "next": (str, none_type), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, none_type, UnsetType]=unset, next: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links. Only present if pagination query parameters were provided. + + :param first: Link to the first page. + :type first: str, optional + + :param last: Link to the last page. + :type last: str, none_type, optional + + :param next: Link to the next page. + :type next: str, none_type, optional + + :param prev: Link to previous page. + :type prev: str, none_type, optional + + :param self: Link to current page. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/metrics_scalar_query.py b/datadog_api_client/v2/model/metrics_scalar_query.py new file mode 100644 index 0000000000..9265e967a2 --- /dev/null +++ b/datadog_api_client/v2/model/metrics_scalar_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metrics_aggregator import MetricsAggregator + from datadog_api_client.v2.model.metrics_data_source import MetricsDataSource + +class MetricsScalarQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metrics_aggregator import MetricsAggregator + from datadog_api_client.v2.model.metrics_data_source import MetricsDataSource + return { + "aggregator": (MetricsAggregator,), + "cross_org_uuids": ([str],), + "data_source": (MetricsDataSource,), + "name": (str,), + "query": (str,), + } + attribute_map = { + "aggregator": "aggregator", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "name": "name", + "query": "query", + } + + def __init__(self_, aggregator: MetricsAggregator, data_source: MetricsDataSource, query: str, cross_org_uuids: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A query against Datadog custom metrics or Cloud Cost data sources. + + :param aggregator: The type of aggregation that can be performed on metrics-based queries. + :type aggregator: MetricsAggregator + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source that is powered by the Metrics platform. + :type data_source: MetricsDataSource + + :param name: The variable name for use in formulas. + :type name: str, optional + + :param query: A classic metrics query string. + :type query: str + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.aggregator = aggregator + self_.data_source = data_source + self_.query = query diff --git a/datadog_api_client/v2/model/metrics_timeseries_query.py b/datadog_api_client/v2/model/metrics_timeseries_query.py new file mode 100644 index 0000000000..b89ba5ef74 --- /dev/null +++ b/datadog_api_client/v2/model/metrics_timeseries_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metrics_data_source import MetricsDataSource + +class MetricsTimeseriesQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metrics_data_source import MetricsDataSource + return { + "cross_org_uuids": ([str],), + "data_source": (MetricsDataSource,), + "name": (str,), + "query": (str,), + } + attribute_map = { + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "name": "name", + "query": "query", + } + + def __init__(self_, data_source: MetricsDataSource, query: str, cross_org_uuids: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A query against Datadog custom metrics or Cloud Cost data sources. + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source that is powered by the Metrics platform. + :type data_source: MetricsDataSource + + :param name: The variable name for use in formulas. + :type name: str, optional + + :param query: A classic metrics query string. + :type query: str + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.data_source = data_source + self_.query = query diff --git a/datadog_api_client/v2/model/microsoft_sentinel_destination.py b/datadog_api_client/v2/model/microsoft_sentinel_destination.py new file mode 100644 index 0000000000..355162e748 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_sentinel_destination.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.microsoft_sentinel_destination_type import MicrosoftSentinelDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class MicrosoftSentinelDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.microsoft_sentinel_destination_type import MicrosoftSentinelDestinationType + return { + "buffer": (ObservabilityPipelineBufferOptions,), + "client_id": (str,), + "client_secret_key": (str,), + "dce_uri_key": (str,), + "dcr_immutable_id": (str,), + "id": (str,), + "inputs": ([str],), + "table": (str,), + "tenant_id": (str,), + "type": (MicrosoftSentinelDestinationType,), + } + attribute_map = { + "buffer": "buffer", + "client_id": "client_id", + "client_secret_key": "client_secret_key", + "dce_uri_key": "dce_uri_key", + "dcr_immutable_id": "dcr_immutable_id", + "id": "id", + "inputs": "inputs", + "table": "table", + "tenant_id": "tenant_id", + "type": "type", + } + + def __init__(self_, client_id: str, dcr_immutable_id: str, id: str, inputs: List[str], table: str, tenant_id: str, type: MicrosoftSentinelDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, client_secret_key: Union[str, UnsetType]=unset, dce_uri_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``microsoft_sentinel`` destination forwards logs to Microsoft Sentinel. + + **Supported pipeline types:** logs + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param client_id: Azure AD client ID used for authentication. + :type client_id: str + + :param client_secret_key: Name of the environment variable or secret that holds the Azure AD client secret. + :type client_secret_key: str, optional + + :param dce_uri_key: Name of the environment variable or secret that holds the Data Collection Endpoint (DCE) URI. + :type dce_uri_key: str, optional + + :param dcr_immutable_id: The immutable ID of the Data Collection Rule (DCR). + :type dcr_immutable_id: str + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param table: The name of the Log Analytics table where logs are sent. + :type table: str + + :param tenant_id: Azure AD tenant ID. + :type tenant_id: str + + :param type: The destination type. The value should always be ``microsoft_sentinel``. + :type type: MicrosoftSentinelDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if client_secret_key is not unset: + kwargs["client_secret_key"] = client_secret_key + if dce_uri_key is not unset: + kwargs["dce_uri_key"] = dce_uri_key + super().__init__(kwargs) + + + self_.client_id = client_id + self_.dcr_immutable_id = dcr_immutable_id + self_.id = id + self_.inputs = inputs + self_.table = table + self_.tenant_id = tenant_id + self_.type = type diff --git a/datadog_api_client/v2/model/microsoft_sentinel_destination_type.py b/datadog_api_client/v2/model/microsoft_sentinel_destination_type.py new file mode 100644 index 0000000000..4d072bd29c --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_sentinel_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MicrosoftSentinelDestinationType(ModelSimple): + """ + The destination type. The value should always be `microsoft_sentinel`. + + :param value: If omitted defaults to "microsoft_sentinel". Must be one of ["microsoft_sentinel"]. + :type value: str + """ + + allowed_values = { + "microsoft_sentinel", + } + MICROSOFT_SENTINEL: ClassVar["MicrosoftSentinelDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MicrosoftSentinelDestinationType.MICROSOFT_SENTINEL = MicrosoftSentinelDestinationType("microsoft_sentinel") diff --git a/datadog_api_client/v2/model/microsoft_teams_channel_info_response_attributes.py b/datadog_api_client/v2/model/microsoft_teams_channel_info_response_attributes.py new file mode 100644 index 0000000000..15ed944639 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_channel_info_response_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MicrosoftTeamsChannelInfoResponseAttributes(ModelNormal): + validations = { + "is_primary": { + "max_length": 255, + }, + "team_id": { + "max_length": 255, + }, + "tenant_id": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "is_primary": (bool,), + "team_id": (str,), + "tenant_id": (str,), + } + attribute_map = { + "is_primary": "is_primary", + "team_id": "team_id", + "tenant_id": "tenant_id", + } + + def __init__(self_, is_primary: Union[bool, UnsetType]=unset, team_id: Union[str, UnsetType]=unset, tenant_id: Union[str, UnsetType]=unset, **kwargs): + """ + Channel attributes. + + :param is_primary: Indicates if this is the primary channel. + :type is_primary: bool, optional + + :param team_id: Team id. + :type team_id: str, optional + + :param tenant_id: Tenant id. + :type tenant_id: str, optional + """ + if is_primary is not unset: + kwargs["is_primary"] = is_primary + if team_id is not unset: + kwargs["team_id"] = team_id + if tenant_id is not unset: + kwargs["tenant_id"] = tenant_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/microsoft_teams_channel_info_response_data.py b/datadog_api_client/v2/model/microsoft_teams_channel_info_response_data.py new file mode 100644 index 0000000000..7d2988effb --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_channel_info_response_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_channel_info_response_attributes import MicrosoftTeamsChannelInfoResponseAttributes + from datadog_api_client.v2.model.microsoft_teams_channel_info_type import MicrosoftTeamsChannelInfoType + +class MicrosoftTeamsChannelInfoResponseData(ModelNormal): + validations = { + "id": { + "max_length": 255, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_channel_info_response_attributes import MicrosoftTeamsChannelInfoResponseAttributes + from datadog_api_client.v2.model.microsoft_teams_channel_info_type import MicrosoftTeamsChannelInfoType + return { + "attributes": (MicrosoftTeamsChannelInfoResponseAttributes,), + "id": (str,), + "type": (MicrosoftTeamsChannelInfoType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MicrosoftTeamsChannelInfoResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MicrosoftTeamsChannelInfoType, UnsetType]=unset, **kwargs): + """ + Channel data from a response. + + :param attributes: Channel attributes. + :type attributes: MicrosoftTeamsChannelInfoResponseAttributes, optional + + :param id: The ID of the channel. + :type id: str, optional + + :param type: Channel info resource type. + :type type: MicrosoftTeamsChannelInfoType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/microsoft_teams_channel_info_type.py b/datadog_api_client/v2/model/microsoft_teams_channel_info_type.py new file mode 100644 index 0000000000..7448433161 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_channel_info_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MicrosoftTeamsChannelInfoType(ModelSimple): + """ + Channel info resource type. + + :param value: If omitted defaults to "ms-teams-channel-info". Must be one of ["ms-teams-channel-info"]. + :type value: str + """ + + allowed_values = { + "ms-teams-channel-info", + } + MS_TEAMS_CHANNEL_INFO: ClassVar["MicrosoftTeamsChannelInfoType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MicrosoftTeamsChannelInfoType.MS_TEAMS_CHANNEL_INFO = MicrosoftTeamsChannelInfoType("ms-teams-channel-info") diff --git a/datadog_api_client/v2/model/microsoft_teams_configuration_reference.py b/datadog_api_client/v2/model/microsoft_teams_configuration_reference.py new file mode 100644 index 0000000000..5fd68635db --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_configuration_reference.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_configuration_reference_data import MicrosoftTeamsConfigurationReferenceData + +class MicrosoftTeamsConfigurationReference(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_configuration_reference_data import MicrosoftTeamsConfigurationReferenceData + return { + "data": (MicrosoftTeamsConfigurationReferenceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MicrosoftTeamsConfigurationReferenceData, none_type], **kwargs): + """ + A reference to a Microsoft Teams Configuration resource. + + :param data: The Microsoft Teams configuration relationship data object. + :type data: MicrosoftTeamsConfigurationReferenceData, none_type + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/microsoft_teams_configuration_reference_data.py b/datadog_api_client/v2/model/microsoft_teams_configuration_reference_data.py new file mode 100644 index 0000000000..5b3d41cfeb --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_configuration_reference_data.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MicrosoftTeamsConfigurationReferenceData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: str, **kwargs): + """ + The Microsoft Teams configuration relationship data object. + + :param id: The unique identifier of the Microsoft Teams configuration. + :type id: str + + :param type: The type of the Microsoft Teams configuration. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/microsoft_teams_create_tenant_based_handle_request.py b/datadog_api_client/v2/model/microsoft_teams_create_tenant_based_handle_request.py new file mode 100644 index 0000000000..59a58a7698 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_create_tenant_based_handle_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_request_data import MicrosoftTeamsTenantBasedHandleRequestData + +class MicrosoftTeamsCreateTenantBasedHandleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_request_data import MicrosoftTeamsTenantBasedHandleRequestData + return { + "data": (MicrosoftTeamsTenantBasedHandleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MicrosoftTeamsTenantBasedHandleRequestData, **kwargs): + """ + Create tenant-based handle request. + + :param data: Tenant-based handle data from a response. + :type data: MicrosoftTeamsTenantBasedHandleRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/microsoft_teams_create_workflows_webhook_handle_request.py b/datadog_api_client/v2/model/microsoft_teams_create_workflows_webhook_handle_request.py new file mode 100644 index 0000000000..5cbe1f95e0 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_create_workflows_webhook_handle_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_request_data import MicrosoftTeamsWorkflowsWebhookHandleRequestData + +class MicrosoftTeamsCreateWorkflowsWebhookHandleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_request_data import MicrosoftTeamsWorkflowsWebhookHandleRequestData + return { + "data": (MicrosoftTeamsWorkflowsWebhookHandleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MicrosoftTeamsWorkflowsWebhookHandleRequestData, **kwargs): + """ + Create Workflows webhook handle request. + + :param data: Workflows Webhook handle data from a response. + :type data: MicrosoftTeamsWorkflowsWebhookHandleRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/microsoft_teams_get_channel_by_name_response.py b/datadog_api_client/v2/model/microsoft_teams_get_channel_by_name_response.py new file mode 100644 index 0000000000..3fd14267cf --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_get_channel_by_name_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_channel_info_response_data import MicrosoftTeamsChannelInfoResponseData + +class MicrosoftTeamsGetChannelByNameResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_channel_info_response_data import MicrosoftTeamsChannelInfoResponseData + return { + "data": (MicrosoftTeamsChannelInfoResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MicrosoftTeamsChannelInfoResponseData, UnsetType]=unset, **kwargs): + """ + Response with channel, team, and tenant ID information. + + :param data: Channel data from a response. + :type data: MicrosoftTeamsChannelInfoResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_attributes.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_attributes.py new file mode 100644 index 0000000000..e659931d94 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MicrosoftTeamsTenantBasedHandleAttributes(ModelNormal): + validations = { + "channel_id": { + "max_length": 255, + }, + "name": { + "max_length": 255, + }, + "team_id": { + "max_length": 255, + }, + "tenant_id": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "channel_id": (str,), + "name": (str,), + "team_id": (str,), + "tenant_id": (str,), + } + attribute_map = { + "channel_id": "channel_id", + "name": "name", + "team_id": "team_id", + "tenant_id": "tenant_id", + } + + def __init__(self_, channel_id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, team_id: Union[str, UnsetType]=unset, tenant_id: Union[str, UnsetType]=unset, **kwargs): + """ + Tenant-based handle attributes. + + :param channel_id: Channel id. + :type channel_id: str, optional + + :param name: Tenant-based handle name. + :type name: str, optional + + :param team_id: Team id. + :type team_id: str, optional + + :param tenant_id: Tenant id. + :type tenant_id: str, optional + """ + if channel_id is not unset: + kwargs["channel_id"] = channel_id + if name is not unset: + kwargs["name"] = name + if team_id is not unset: + kwargs["team_id"] = team_id + if tenant_id is not unset: + kwargs["tenant_id"] = tenant_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_info_response_attributes.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_info_response_attributes.py new file mode 100644 index 0000000000..fe73dddb4b --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_info_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MicrosoftTeamsTenantBasedHandleInfoResponseAttributes(ModelNormal): + validations = { + "channel_id": { + "max_length": 255, + }, + "channel_name": { + "max_length": 255, + }, + "name": { + "max_length": 255, + }, + "team_id": { + "max_length": 255, + }, + "team_name": { + "max_length": 255, + }, + "tenant_id": { + "max_length": 255, + }, + "tenant_name": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "channel_id": (str,), + "channel_name": (str,), + "name": (str,), + "team_id": (str,), + "team_name": (str,), + "tenant_id": (str,), + "tenant_name": (str,), + } + attribute_map = { + "channel_id": "channel_id", + "channel_name": "channel_name", + "name": "name", + "team_id": "team_id", + "team_name": "team_name", + "tenant_id": "tenant_id", + "tenant_name": "tenant_name", + } + + def __init__(self_, channel_id: Union[str, UnsetType]=unset, channel_name: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, team_id: Union[str, UnsetType]=unset, team_name: Union[str, UnsetType]=unset, tenant_id: Union[str, UnsetType]=unset, tenant_name: Union[str, UnsetType]=unset, **kwargs): + """ + Tenant-based handle attributes. + + :param channel_id: Channel id. + :type channel_id: str, optional + + :param channel_name: Channel name. + :type channel_name: str, optional + + :param name: Tenant-based handle name. + :type name: str, optional + + :param team_id: Team id. + :type team_id: str, optional + + :param team_name: Team name. + :type team_name: str, optional + + :param tenant_id: Tenant id. + :type tenant_id: str, optional + + :param tenant_name: Tenant name. + :type tenant_name: str, optional + """ + if channel_id is not unset: + kwargs["channel_id"] = channel_id + if channel_name is not unset: + kwargs["channel_name"] = channel_name + if name is not unset: + kwargs["name"] = name + if team_id is not unset: + kwargs["team_id"] = team_id + if team_name is not unset: + kwargs["team_name"] = team_name + if tenant_id is not unset: + kwargs["tenant_id"] = tenant_id + if tenant_name is not unset: + kwargs["tenant_name"] = tenant_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_info_response_data.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_info_response_data.py new file mode 100644 index 0000000000..a2580a8613 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_info_response_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_info_response_attributes import MicrosoftTeamsTenantBasedHandleInfoResponseAttributes + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_info_type import MicrosoftTeamsTenantBasedHandleInfoType + +class MicrosoftTeamsTenantBasedHandleInfoResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_info_response_attributes import MicrosoftTeamsTenantBasedHandleInfoResponseAttributes + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_info_type import MicrosoftTeamsTenantBasedHandleInfoType + return { + "attributes": (MicrosoftTeamsTenantBasedHandleInfoResponseAttributes,), + "id": (str,), + "type": (MicrosoftTeamsTenantBasedHandleInfoType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MicrosoftTeamsTenantBasedHandleInfoResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MicrosoftTeamsTenantBasedHandleInfoType, UnsetType]=unset, **kwargs): + """ + Tenant-based handle data from a response. + + :param attributes: Tenant-based handle attributes. + :type attributes: MicrosoftTeamsTenantBasedHandleInfoResponseAttributes, optional + + :param id: The ID of the tenant-based handle. + :type id: str, optional + + :param type: Tenant-based handle resource type. + :type type: MicrosoftTeamsTenantBasedHandleInfoType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_info_type.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_info_type.py new file mode 100644 index 0000000000..e93611ccf0 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_info_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MicrosoftTeamsTenantBasedHandleInfoType(ModelSimple): + """ + Tenant-based handle resource type. + + :param value: If omitted defaults to "ms-teams-tenant-based-handle-info". Must be one of ["ms-teams-tenant-based-handle-info"]. + :type value: str + """ + + allowed_values = { + "ms-teams-tenant-based-handle-info", + } + MS_TEAMS_TENANT_BASED_HANDLE_INFO: ClassVar["MicrosoftTeamsTenantBasedHandleInfoType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MicrosoftTeamsTenantBasedHandleInfoType.MS_TEAMS_TENANT_BASED_HANDLE_INFO = MicrosoftTeamsTenantBasedHandleInfoType("ms-teams-tenant-based-handle-info") diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_request_attributes.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_request_attributes.py new file mode 100644 index 0000000000..f104896fd3 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_request_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MicrosoftTeamsTenantBasedHandleRequestAttributes(ModelNormal): + validations = { + "channel_id": { + "max_length": 255, + }, + "name": { + "max_length": 255, + }, + "team_id": { + "max_length": 255, + }, + "tenant_id": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "channel_id": (str,), + "name": (str,), + "team_id": (str,), + "tenant_id": (str,), + } + attribute_map = { + "channel_id": "channel_id", + "name": "name", + "team_id": "team_id", + "tenant_id": "tenant_id", + } + + def __init__(self_, channel_id: str, name: str, team_id: str, tenant_id: str, **kwargs): + """ + Tenant-based handle attributes. + + :param channel_id: Channel id. + :type channel_id: str + + :param name: Tenant-based handle name. + :type name: str + + :param team_id: Team id. + :type team_id: str + + :param tenant_id: Tenant id. + :type tenant_id: str + """ + super().__init__(kwargs) + + + self_.channel_id = channel_id + self_.name = name + self_.team_id = team_id + self_.tenant_id = tenant_id diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_request_data.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_request_data.py new file mode 100644 index 0000000000..2a2b35a816 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_request_attributes import MicrosoftTeamsTenantBasedHandleRequestAttributes + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_type import MicrosoftTeamsTenantBasedHandleType + +class MicrosoftTeamsTenantBasedHandleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_request_attributes import MicrosoftTeamsTenantBasedHandleRequestAttributes + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_type import MicrosoftTeamsTenantBasedHandleType + return { + "attributes": (MicrosoftTeamsTenantBasedHandleRequestAttributes,), + "type": (MicrosoftTeamsTenantBasedHandleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MicrosoftTeamsTenantBasedHandleRequestAttributes, type: MicrosoftTeamsTenantBasedHandleType, **kwargs): + """ + Tenant-based handle data from a response. + + :param attributes: Tenant-based handle attributes. + :type attributes: MicrosoftTeamsTenantBasedHandleRequestAttributes + + :param type: Specifies the tenant-based handle resource type. + :type type: MicrosoftTeamsTenantBasedHandleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_response.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_response.py new file mode 100644 index 0000000000..6ff457f53b --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_response_data import MicrosoftTeamsTenantBasedHandleResponseData + +class MicrosoftTeamsTenantBasedHandleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_response_data import MicrosoftTeamsTenantBasedHandleResponseData + return { + "data": (MicrosoftTeamsTenantBasedHandleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MicrosoftTeamsTenantBasedHandleResponseData, **kwargs): + """ + Response of a tenant-based handle. + + :param data: Tenant-based handle data from a response. + :type data: MicrosoftTeamsTenantBasedHandleResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_response_data.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_response_data.py new file mode 100644 index 0000000000..1f195640d4 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_response_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_attributes import MicrosoftTeamsTenantBasedHandleAttributes + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_type import MicrosoftTeamsTenantBasedHandleType + +class MicrosoftTeamsTenantBasedHandleResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_attributes import MicrosoftTeamsTenantBasedHandleAttributes + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_type import MicrosoftTeamsTenantBasedHandleType + return { + "attributes": (MicrosoftTeamsTenantBasedHandleAttributes,), + "id": (str,), + "type": (MicrosoftTeamsTenantBasedHandleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MicrosoftTeamsTenantBasedHandleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MicrosoftTeamsTenantBasedHandleType, UnsetType]=unset, **kwargs): + """ + Tenant-based handle data from a response. + + :param attributes: Tenant-based handle attributes. + :type attributes: MicrosoftTeamsTenantBasedHandleAttributes, optional + + :param id: The ID of the tenant-based handle. + :type id: str, optional + + :param type: Specifies the tenant-based handle resource type. + :type type: MicrosoftTeamsTenantBasedHandleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_type.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_type.py new file mode 100644 index 0000000000..80e00849b8 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handle_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MicrosoftTeamsTenantBasedHandleType(ModelSimple): + """ + Specifies the tenant-based handle resource type. + + :param value: If omitted defaults to "tenant-based-handle". Must be one of ["tenant-based-handle"]. + :type value: str + """ + + allowed_values = { + "tenant-based-handle", + } + TENANT_BASED_HANDLE: ClassVar["MicrosoftTeamsTenantBasedHandleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MicrosoftTeamsTenantBasedHandleType.TENANT_BASED_HANDLE = MicrosoftTeamsTenantBasedHandleType("tenant-based-handle") diff --git a/datadog_api_client/v2/model/microsoft_teams_tenant_based_handles_response.py b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handles_response.py new file mode 100644 index 0000000000..ef74752bea --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_tenant_based_handles_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_info_response_data import MicrosoftTeamsTenantBasedHandleInfoResponseData + +class MicrosoftTeamsTenantBasedHandlesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_info_response_data import MicrosoftTeamsTenantBasedHandleInfoResponseData + return { + "data": ([MicrosoftTeamsTenantBasedHandleInfoResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[MicrosoftTeamsTenantBasedHandleInfoResponseData], **kwargs): + """ + Response with a list of tenant-based handles. + + :param data: An array of tenant-based handles. + :type data: [MicrosoftTeamsTenantBasedHandleInfoResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/microsoft_teams_update_tenant_based_handle_request.py b/datadog_api_client/v2/model/microsoft_teams_update_tenant_based_handle_request.py new file mode 100644 index 0000000000..a29b6f3110 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_update_tenant_based_handle_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_update_tenant_based_handle_request_data import MicrosoftTeamsUpdateTenantBasedHandleRequestData + +class MicrosoftTeamsUpdateTenantBasedHandleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_update_tenant_based_handle_request_data import MicrosoftTeamsUpdateTenantBasedHandleRequestData + return { + "data": (MicrosoftTeamsUpdateTenantBasedHandleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MicrosoftTeamsUpdateTenantBasedHandleRequestData, **kwargs): + """ + Update tenant-based handle request. + + :param data: Tenant-based handle data from a response. + :type data: MicrosoftTeamsUpdateTenantBasedHandleRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/microsoft_teams_update_tenant_based_handle_request_data.py b/datadog_api_client/v2/model/microsoft_teams_update_tenant_based_handle_request_data.py new file mode 100644 index 0000000000..c97223baca --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_update_tenant_based_handle_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_attributes import MicrosoftTeamsTenantBasedHandleAttributes + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_type import MicrosoftTeamsTenantBasedHandleType + +class MicrosoftTeamsUpdateTenantBasedHandleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_attributes import MicrosoftTeamsTenantBasedHandleAttributes + from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_type import MicrosoftTeamsTenantBasedHandleType + return { + "attributes": (MicrosoftTeamsTenantBasedHandleAttributes,), + "type": (MicrosoftTeamsTenantBasedHandleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MicrosoftTeamsTenantBasedHandleAttributes, type: MicrosoftTeamsTenantBasedHandleType, **kwargs): + """ + Tenant-based handle data from a response. + + :param attributes: Tenant-based handle attributes. + :type attributes: MicrosoftTeamsTenantBasedHandleAttributes + + :param type: Specifies the tenant-based handle resource type. + :type type: MicrosoftTeamsTenantBasedHandleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/microsoft_teams_update_workflows_webhook_handle_request.py b/datadog_api_client/v2/model/microsoft_teams_update_workflows_webhook_handle_request.py new file mode 100644 index 0000000000..d930142e49 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_update_workflows_webhook_handle_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_update_workflows_webhook_handle_request_data import MicrosoftTeamsUpdateWorkflowsWebhookHandleRequestData + +class MicrosoftTeamsUpdateWorkflowsWebhookHandleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_update_workflows_webhook_handle_request_data import MicrosoftTeamsUpdateWorkflowsWebhookHandleRequestData + return { + "data": (MicrosoftTeamsUpdateWorkflowsWebhookHandleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MicrosoftTeamsUpdateWorkflowsWebhookHandleRequestData, **kwargs): + """ + Update Workflows webhook handle request. + + :param data: Workflows Webhook handle data from a response. + :type data: MicrosoftTeamsUpdateWorkflowsWebhookHandleRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/microsoft_teams_update_workflows_webhook_handle_request_data.py b/datadog_api_client/v2/model/microsoft_teams_update_workflows_webhook_handle_request_data.py new file mode 100644 index 0000000000..e52a4ccf29 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_update_workflows_webhook_handle_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_attributes import MicrosoftTeamsWorkflowsWebhookHandleAttributes + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_type import MicrosoftTeamsWorkflowsWebhookHandleType + +class MicrosoftTeamsUpdateWorkflowsWebhookHandleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_attributes import MicrosoftTeamsWorkflowsWebhookHandleAttributes + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_type import MicrosoftTeamsWorkflowsWebhookHandleType + return { + "attributes": (MicrosoftTeamsWorkflowsWebhookHandleAttributes,), + "type": (MicrosoftTeamsWorkflowsWebhookHandleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MicrosoftTeamsWorkflowsWebhookHandleAttributes, type: MicrosoftTeamsWorkflowsWebhookHandleType, **kwargs): + """ + Workflows Webhook handle data from a response. + + :param attributes: Workflows Webhook handle attributes. + :type attributes: MicrosoftTeamsWorkflowsWebhookHandleAttributes + + :param type: Specifies the Workflows webhook handle resource type. + :type type: MicrosoftTeamsWorkflowsWebhookHandleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_attributes.py b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_attributes.py new file mode 100644 index 0000000000..ebecb7b9b0 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MicrosoftTeamsWorkflowsWebhookHandleAttributes(ModelNormal): + validations = { + "name": { + "max_length": 255, + }, + "url": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "url": (str,), + } + attribute_map = { + "name": "name", + "url": "url", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Workflows Webhook handle attributes. + + :param name: Workflows Webhook handle name. + :type name: str, optional + + :param url: Workflows Webhook URL. + :type url: str, optional + """ + if name is not unset: + kwargs["name"] = name + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_request_attributes.py b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_request_attributes.py new file mode 100644 index 0000000000..cf2a40bd46 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_request_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MicrosoftTeamsWorkflowsWebhookHandleRequestAttributes(ModelNormal): + validations = { + "name": { + "max_length": 255, + }, + "url": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "url": (str,), + } + attribute_map = { + "name": "name", + "url": "url", + } + + def __init__(self_, name: str, url: str, **kwargs): + """ + Workflows Webhook handle attributes. + + :param name: Workflows Webhook handle name. + :type name: str + + :param url: Workflows Webhook URL. + :type url: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.url = url diff --git a/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_request_data.py b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_request_data.py new file mode 100644 index 0000000000..7556e21109 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_request_attributes import MicrosoftTeamsWorkflowsWebhookHandleRequestAttributes + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_type import MicrosoftTeamsWorkflowsWebhookHandleType + +class MicrosoftTeamsWorkflowsWebhookHandleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_request_attributes import MicrosoftTeamsWorkflowsWebhookHandleRequestAttributes + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_type import MicrosoftTeamsWorkflowsWebhookHandleType + return { + "attributes": (MicrosoftTeamsWorkflowsWebhookHandleRequestAttributes,), + "type": (MicrosoftTeamsWorkflowsWebhookHandleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MicrosoftTeamsWorkflowsWebhookHandleRequestAttributes, type: MicrosoftTeamsWorkflowsWebhookHandleType, **kwargs): + """ + Workflows Webhook handle data from a response. + + :param attributes: Workflows Webhook handle attributes. + :type attributes: MicrosoftTeamsWorkflowsWebhookHandleRequestAttributes + + :param type: Specifies the Workflows webhook handle resource type. + :type type: MicrosoftTeamsWorkflowsWebhookHandleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_response.py b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_response.py new file mode 100644 index 0000000000..23ddc84be0 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_response_data import MicrosoftTeamsWorkflowsWebhookHandleResponseData + +class MicrosoftTeamsWorkflowsWebhookHandleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_response_data import MicrosoftTeamsWorkflowsWebhookHandleResponseData + return { + "data": (MicrosoftTeamsWorkflowsWebhookHandleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MicrosoftTeamsWorkflowsWebhookHandleResponseData, **kwargs): + """ + Response of a Workflows webhook handle. + + :param data: Workflows Webhook handle data from a response. + :type data: MicrosoftTeamsWorkflowsWebhookHandleResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_response_data.py b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_response_data.py new file mode 100644 index 0000000000..2be92bfc85 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_response_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_response_attributes import MicrosoftTeamsWorkflowsWebhookResponseAttributes + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_type import MicrosoftTeamsWorkflowsWebhookHandleType + +class MicrosoftTeamsWorkflowsWebhookHandleResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_response_attributes import MicrosoftTeamsWorkflowsWebhookResponseAttributes + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_type import MicrosoftTeamsWorkflowsWebhookHandleType + return { + "attributes": (MicrosoftTeamsWorkflowsWebhookResponseAttributes,), + "id": (str,), + "type": (MicrosoftTeamsWorkflowsWebhookHandleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MicrosoftTeamsWorkflowsWebhookResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MicrosoftTeamsWorkflowsWebhookHandleType, UnsetType]=unset, **kwargs): + """ + Workflows Webhook handle data from a response. + + :param attributes: Workflows Webhook handle attributes. + :type attributes: MicrosoftTeamsWorkflowsWebhookResponseAttributes, optional + + :param id: The ID of the Workflows webhook handle. + :type id: str, optional + + :param type: Specifies the Workflows webhook handle resource type. + :type type: MicrosoftTeamsWorkflowsWebhookHandleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_type.py b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_type.py new file mode 100644 index 0000000000..50a7bf8d3c --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handle_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MicrosoftTeamsWorkflowsWebhookHandleType(ModelSimple): + """ + Specifies the Workflows webhook handle resource type. + + :param value: If omitted defaults to "workflows-webhook-handle". Must be one of ["workflows-webhook-handle"]. + :type value: str + """ + + allowed_values = { + "workflows-webhook-handle", + } + WORKFLOWS_WEBHOOK_HANDLE: ClassVar["MicrosoftTeamsWorkflowsWebhookHandleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MicrosoftTeamsWorkflowsWebhookHandleType.WORKFLOWS_WEBHOOK_HANDLE = MicrosoftTeamsWorkflowsWebhookHandleType("workflows-webhook-handle") diff --git a/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handles_response.py b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handles_response.py new file mode 100644 index 0000000000..950faba6e6 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_handles_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_response_data import MicrosoftTeamsWorkflowsWebhookHandleResponseData + +class MicrosoftTeamsWorkflowsWebhookHandlesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_response_data import MicrosoftTeamsWorkflowsWebhookHandleResponseData + return { + "data": ([MicrosoftTeamsWorkflowsWebhookHandleResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[MicrosoftTeamsWorkflowsWebhookHandleResponseData], **kwargs): + """ + Response with a list of Workflows webhook handles. + + :param data: An array of Workflows webhook handles. + :type data: [MicrosoftTeamsWorkflowsWebhookHandleResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_response_attributes.py b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_response_attributes.py new file mode 100644 index 0000000000..b7d4782709 --- /dev/null +++ b/datadog_api_client/v2/model/microsoft_teams_workflows_webhook_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MicrosoftTeamsWorkflowsWebhookResponseAttributes(ModelNormal): + validations = { + "name": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Workflows Webhook handle attributes. + + :param name: Workflows Webhook handle name. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/model_lab_artifact_info.py b/datadog_api_client/v2/model/model_lab_artifact_info.py new file mode 100644 index 0000000000..80d8e682e2 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_artifact_info.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabArtifactInfo(ModelNormal): + @cached_property + def openapi_types(_): + return { + "artifact_path": (str,), + "created_at": (datetime,), + "file_size": (int, none_type), + "filename": (str,), + } + attribute_map = { + "artifact_path": "artifact_path", + "created_at": "created_at", + "file_size": "file_size", + "filename": "filename", + } + + def __init__(self_, artifact_path: str, created_at: datetime, filename: str, file_size: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Information about a project-level artifact file. + + :param artifact_path: The full artifact path relative to the project's artifact root. + :type artifact_path: str + + :param created_at: The date and time the artifact was created. + :type created_at: datetime + + :param file_size: The size of the file in bytes. + :type file_size: int, none_type, optional + + :param filename: The filename of the artifact. + :type filename: str + """ + if file_size is not unset: + kwargs["file_size"] = file_size + super().__init__(kwargs) + + + self_.artifact_path = artifact_path + self_.created_at = created_at + self_.filename = filename diff --git a/datadog_api_client/v2/model/model_lab_artifact_object_info.py b/datadog_api_client/v2/model/model_lab_artifact_object_info.py new file mode 100644 index 0000000000..43e7d9f81d --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_artifact_object_info.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabArtifactObjectInfo(ModelNormal): + @cached_property + def openapi_types(_): + return { + "file_size": (int, none_type), + "is_dir": (bool,), + "path": (str,), + } + attribute_map = { + "file_size": "file_size", + "is_dir": "is_dir", + "path": "path", + } + + def __init__(self_, is_dir: bool, path: str, file_size: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Information about an artifact file or directory within a run. + + :param file_size: The size of the file in bytes. + :type file_size: int, none_type, optional + + :param is_dir: Whether this artifact entry is a directory. + :type is_dir: bool + + :param path: The path of the artifact relative to the run's artifact root. + :type path: str + """ + if file_size is not unset: + kwargs["file_size"] = file_size + super().__init__(kwargs) + + + self_.is_dir = is_dir + self_.path = path diff --git a/datadog_api_client/v2/model/model_lab_facet_keys_attributes.py b/datadog_api_client/v2/model/model_lab_facet_keys_attributes.py new file mode 100644 index 0000000000..1f0590d79b --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_facet_keys_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabFacetKeysAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "metrics": ([str], none_type), + "parameters": ([str],), + "tags": ([str],), + } + attribute_map = { + "metrics": "metrics", + "parameters": "parameters", + "tags": "tags", + } + + def __init__(self_, metrics: Union[List[str], none_type], parameters: List[str], tags: List[str], **kwargs): + """ + Available facet key names for filtering resources. + + :param metrics: The list of available metric facet keys. + :type metrics: [str], none_type + + :param parameters: The list of available parameter facet keys. + :type parameters: [str] + + :param tags: The list of available tag facet keys. + :type tags: [str] + """ + super().__init__(kwargs) + + + self_.metrics = metrics + self_.parameters = parameters + self_.tags = tags diff --git a/datadog_api_client/v2/model/model_lab_facet_keys_data.py b/datadog_api_client/v2/model/model_lab_facet_keys_data.py new file mode 100644 index 0000000000..f9fa622cd8 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_facet_keys_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_facet_keys_attributes import ModelLabFacetKeysAttributes + from datadog_api_client.v2.model.model_lab_facet_keys_type import ModelLabFacetKeysType + +class ModelLabFacetKeysData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_facet_keys_attributes import ModelLabFacetKeysAttributes + from datadog_api_client.v2.model.model_lab_facet_keys_type import ModelLabFacetKeysType + return { + "attributes": (ModelLabFacetKeysAttributes,), + "id": (str,), + "type": (ModelLabFacetKeysType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ModelLabFacetKeysAttributes, id: str, type: ModelLabFacetKeysType, **kwargs): + """ + A facet keys JSON:API resource object. + + :param attributes: Available facet key names for filtering resources. + :type attributes: ModelLabFacetKeysAttributes + + :param id: The unique identifier of the facet keys resource. + :type id: str + + :param type: The JSON:API type for a facet keys resource. + :type type: ModelLabFacetKeysType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/model_lab_facet_keys_response.py b/datadog_api_client/v2/model/model_lab_facet_keys_response.py new file mode 100644 index 0000000000..57f65ad354 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_facet_keys_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_facet_keys_data import ModelLabFacetKeysData + +class ModelLabFacetKeysResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_facet_keys_data import ModelLabFacetKeysData + return { + "data": (ModelLabFacetKeysData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ModelLabFacetKeysData, **kwargs): + """ + Response containing available facet keys. + + :param data: A facet keys JSON:API resource object. + :type data: ModelLabFacetKeysData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/model_lab_facet_keys_type.py b/datadog_api_client/v2/model/model_lab_facet_keys_type.py new file mode 100644 index 0000000000..572d7798c2 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_facet_keys_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ModelLabFacetKeysType(ModelSimple): + """ + The JSON:API type for a facet keys resource. + + :param value: If omitted defaults to "facet_keys". Must be one of ["facet_keys"]. + :type value: str + """ + + allowed_values = { + "facet_keys", + } + FACET_KEYS: ClassVar["ModelLabFacetKeysType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ModelLabFacetKeysType.FACET_KEYS = ModelLabFacetKeysType("facet_keys") diff --git a/datadog_api_client/v2/model/model_lab_facet_type.py b/datadog_api_client/v2/model/model_lab_facet_type.py new file mode 100644 index 0000000000..dbf6a8ee2c --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_facet_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ModelLabFacetType(ModelSimple): + """ + The type of facet for filtering Model Lab runs. + + :param value: Must be one of ["parameter", "attribute", "tag", "metric"]. + :type value: str + """ + + allowed_values = { + "parameter", + "attribute", + "tag", + "metric", + } + PARAMETER: ClassVar["ModelLabFacetType"] + ATTRIBUTE: ClassVar["ModelLabFacetType"] + TAG: ClassVar["ModelLabFacetType"] + METRIC: ClassVar["ModelLabFacetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ModelLabFacetType.PARAMETER = ModelLabFacetType("parameter") +ModelLabFacetType.ATTRIBUTE = ModelLabFacetType("attribute") +ModelLabFacetType.TAG = ModelLabFacetType("tag") +ModelLabFacetType.METRIC = ModelLabFacetType("metric") diff --git a/datadog_api_client/v2/model/model_lab_facet_values_attributes.py b/datadog_api_client/v2/model/model_lab_facet_values_attributes.py new file mode 100644 index 0000000000..8826ca2439 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_facet_values_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_metric_stat_range import ModelLabMetricStatRange + from datadog_api_client.v2.model.model_lab_numeric_range import ModelLabNumericRange + +class ModelLabFacetValuesAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_metric_stat_range import ModelLabMetricStatRange + from datadog_api_client.v2.model.model_lab_numeric_range import ModelLabNumericRange + return { + "facet_name": (str,), + "facet_type": (str,), + "metric_stat_ranges": ([ModelLabMetricStatRange],), + "numeric_range": (ModelLabNumericRange,), + "values": ([str],), + } + attribute_map = { + "facet_name": "facet_name", + "facet_type": "facet_type", + "metric_stat_ranges": "metric_stat_ranges", + "numeric_range": "numeric_range", + "values": "values", + } + + def __init__(self_, facet_name: str, facet_type: str, values: List[str], metric_stat_ranges: Union[List[ModelLabMetricStatRange], UnsetType]=unset, numeric_range: Union[ModelLabNumericRange, UnsetType]=unset, **kwargs): + """ + Available values for a specific facet key. + + :param facet_name: The name of the facet. + :type facet_name: str + + :param facet_type: The type of the facet. + :type facet_type: str + + :param metric_stat_ranges: The ranges for each metric statistic. + :type metric_stat_ranges: [ModelLabMetricStatRange], optional + + :param numeric_range: The numeric range of values for a facet. + :type numeric_range: ModelLabNumericRange, optional + + :param values: The list of available string values for this facet. + :type values: [str] + """ + if metric_stat_ranges is not unset: + kwargs["metric_stat_ranges"] = metric_stat_ranges + if numeric_range is not unset: + kwargs["numeric_range"] = numeric_range + super().__init__(kwargs) + + + self_.facet_name = facet_name + self_.facet_type = facet_type + self_.values = values diff --git a/datadog_api_client/v2/model/model_lab_facet_values_data.py b/datadog_api_client/v2/model/model_lab_facet_values_data.py new file mode 100644 index 0000000000..63a275946f --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_facet_values_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_facet_values_attributes import ModelLabFacetValuesAttributes + from datadog_api_client.v2.model.model_lab_facet_values_type import ModelLabFacetValuesType + +class ModelLabFacetValuesData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_facet_values_attributes import ModelLabFacetValuesAttributes + from datadog_api_client.v2.model.model_lab_facet_values_type import ModelLabFacetValuesType + return { + "attributes": (ModelLabFacetValuesAttributes,), + "id": (str,), + "type": (ModelLabFacetValuesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ModelLabFacetValuesAttributes, id: str, type: ModelLabFacetValuesType, **kwargs): + """ + A facet values JSON:API resource object. + + :param attributes: Available values for a specific facet key. + :type attributes: ModelLabFacetValuesAttributes + + :param id: The unique identifier of the facet values resource. + :type id: str + + :param type: The JSON:API type for a facet values resource. + :type type: ModelLabFacetValuesType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/model_lab_facet_values_response.py b/datadog_api_client/v2/model/model_lab_facet_values_response.py new file mode 100644 index 0000000000..61f095205a --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_facet_values_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_facet_values_data import ModelLabFacetValuesData + +class ModelLabFacetValuesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_facet_values_data import ModelLabFacetValuesData + return { + "data": (ModelLabFacetValuesData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ModelLabFacetValuesData, **kwargs): + """ + Response containing available values for a facet key. + + :param data: A facet values JSON:API resource object. + :type data: ModelLabFacetValuesData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/model_lab_facet_values_type.py b/datadog_api_client/v2/model/model_lab_facet_values_type.py new file mode 100644 index 0000000000..d95ef8aa3d --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_facet_values_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ModelLabFacetValuesType(ModelSimple): + """ + The JSON:API type for a facet values resource. + + :param value: If omitted defaults to "facet_values". Must be one of ["facet_values"]. + :type value: str + """ + + allowed_values = { + "facet_values", + } + FACET_VALUES: ClassVar["ModelLabFacetValuesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ModelLabFacetValuesType.FACET_VALUES = ModelLabFacetValuesType("facet_values") diff --git a/datadog_api_client/v2/model/model_lab_metric_stat_range.py b/datadog_api_client/v2/model/model_lab_metric_stat_range.py new file mode 100644 index 0000000000..8c1c802701 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_metric_stat_range.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabMetricStatRange(ModelNormal): + @cached_property + def openapi_types(_): + return { + "max": (float,), + "min": (float,), + "stat": (str,), + } + attribute_map = { + "max": "max", + "min": "min", + "stat": "stat", + } + + def __init__(self_, max: float, min: float, stat: str, **kwargs): + """ + The range of values for a specific metric statistic. + + :param max: The maximum value of the statistic. + :type max: float + + :param min: The minimum value of the statistic. + :type min: float + + :param stat: The metric statistic name. + :type stat: str + """ + super().__init__(kwargs) + + + self_.max = max + self_.min = min + self_.stat = stat diff --git a/datadog_api_client/v2/model/model_lab_metric_summary.py b/datadog_api_client/v2/model/model_lab_metric_summary.py new file mode 100644 index 0000000000..cfa3e04985 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_metric_summary.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabMetricSummary(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "first_step": (int, none_type), + "key": (str,), + "last_step": (int, none_type), + "latest": (float, none_type), + "max": (float, none_type), + "mean": (float, none_type), + "min": (float, none_type), + "stddev": (float, none_type), + } + attribute_map = { + "count": "count", + "first_step": "first_step", + "key": "key", + "last_step": "last_step", + "latest": "latest", + "max": "max", + "mean": "mean", + "min": "min", + "stddev": "stddev", + } + + def __init__(self_, count: int, key: str, first_step: Union[int, none_type, UnsetType]=unset, last_step: Union[int, none_type, UnsetType]=unset, latest: Union[float, none_type, UnsetType]=unset, max: Union[float, none_type, UnsetType]=unset, mean: Union[float, none_type, UnsetType]=unset, min: Union[float, none_type, UnsetType]=unset, stddev: Union[float, none_type, UnsetType]=unset, **kwargs): + """ + Summary statistics for a metric recorded during a Model Lab run. + + :param count: The total number of recorded values. + :type count: int + + :param first_step: The first step at which the metric was recorded. + :type first_step: int, none_type, optional + + :param key: The metric name. + :type key: str + + :param last_step: The last step at which the metric was recorded. + :type last_step: int, none_type, optional + + :param latest: The most recently recorded value. + :type latest: float, none_type, optional + + :param max: The maximum recorded value. + :type max: float, none_type, optional + + :param mean: The mean of recorded values. + :type mean: float, none_type, optional + + :param min: The minimum recorded value. + :type min: float, none_type, optional + + :param stddev: The standard deviation of recorded values. + :type stddev: float, none_type, optional + """ + if first_step is not unset: + kwargs["first_step"] = first_step + if last_step is not unset: + kwargs["last_step"] = last_step + if latest is not unset: + kwargs["latest"] = latest + if max is not unset: + kwargs["max"] = max + if mean is not unset: + kwargs["mean"] = mean + if min is not unset: + kwargs["min"] = min + if stddev is not unset: + kwargs["stddev"] = stddev + super().__init__(kwargs) + + + self_.count = count + self_.key = key diff --git a/datadog_api_client/v2/model/model_lab_numeric_range.py b/datadog_api_client/v2/model/model_lab_numeric_range.py new file mode 100644 index 0000000000..b297def521 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_numeric_range.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabNumericRange(ModelNormal): + @cached_property + def openapi_types(_): + return { + "max": (float,), + "min": (float,), + } + attribute_map = { + "max": "max", + "min": "min", + } + + def __init__(self_, max: float, min: float, **kwargs): + """ + The numeric range of values for a facet. + + :param max: The maximum value. + :type max: float + + :param min: The minimum value. + :type min: float + """ + super().__init__(kwargs) + + + self_.max = max + self_.min = min diff --git a/datadog_api_client/v2/model/model_lab_page_meta.py b/datadog_api_client/v2/model/model_lab_page_meta.py new file mode 100644 index 0000000000..389f4279e2 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_page_meta.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_page_meta_page import ModelLabPageMetaPage + +class ModelLabPageMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_page_meta_page import ModelLabPageMetaPage + return { + "page": (ModelLabPageMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: ModelLabPageMetaPage, **kwargs): + """ + Pagination metadata for a list response. + + :param page: Pagination details for a list response. + :type page: ModelLabPageMetaPage + """ + super().__init__(kwargs) + + + self_.page = page diff --git a/datadog_api_client/v2/model/model_lab_page_meta_page.py b/datadog_api_client/v2/model/model_lab_page_meta_page.py new file mode 100644 index 0000000000..306f0bad82 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_page_meta_page.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabPageMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_number": (int,), + "last_number": (int,), + "next_number": (int, none_type), + "number": (int,), + "prev_number": (int, none_type), + "size": (int,), + "total": (int,), + "type": (str,), + } + attribute_map = { + "first_number": "first_number", + "last_number": "last_number", + "next_number": "next_number", + "number": "number", + "prev_number": "prev_number", + "size": "size", + "total": "total", + "type": "type", + } + + def __init__(self_, number: int, size: int, total: int, first_number: Union[int, UnsetType]=unset, last_number: Union[int, UnsetType]=unset, next_number: Union[int, none_type, UnsetType]=unset, prev_number: Union[int, none_type, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination details for a list response. + + :param first_number: The first page number. + :type first_number: int, optional + + :param last_number: The last page number. + :type last_number: int, optional + + :param next_number: The next page number. + :type next_number: int, none_type, optional + + :param number: The current page number. + :type number: int + + :param prev_number: The previous page number. + :type prev_number: int, none_type, optional + + :param size: The number of items per page. + :type size: int + + :param total: The total number of items. + :type total: int + + :param type: The pagination type. + :type type: str, optional + """ + if first_number is not unset: + kwargs["first_number"] = first_number + if last_number is not unset: + kwargs["last_number"] = last_number + if next_number is not unset: + kwargs["next_number"] = next_number + if prev_number is not unset: + kwargs["prev_number"] = prev_number + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.number = number + self_.size = size + self_.total = total diff --git a/datadog_api_client/v2/model/model_lab_pagination_links.py b/datadog_api_client/v2/model/model_lab_pagination_links.py new file mode 100644 index 0000000000..b8a0e041ee --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_pagination_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabPaginationLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str,), + "next": (str, none_type), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, UnsetType]=unset, next: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links for navigating list responses. + + :param first: Link to the first page. + :type first: str, optional + + :param last: Link to the last page. + :type last: str, optional + + :param next: Link to the next page. + :type next: str, none_type, optional + + :param prev: Link to the previous page. + :type prev: str, none_type, optional + + :param self: Link to the current page. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/model_lab_project_artifacts_attributes.py b/datadog_api_client/v2/model/model_lab_project_artifacts_attributes.py new file mode 100644 index 0000000000..f68e6d4b51 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_project_artifacts_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_artifact_info import ModelLabArtifactInfo + +class ModelLabProjectArtifactsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_artifact_info import ModelLabArtifactInfo + return { + "files": ([ModelLabArtifactInfo],), + } + attribute_map = { + "files": "files", + } + + def __init__(self_, files: List[ModelLabArtifactInfo], **kwargs): + """ + Artifact listing for a Model Lab project. + + :param files: The list of artifact files associated with the project. + :type files: [ModelLabArtifactInfo] + """ + super().__init__(kwargs) + + + self_.files = files diff --git a/datadog_api_client/v2/model/model_lab_project_artifacts_data.py b/datadog_api_client/v2/model/model_lab_project_artifacts_data.py new file mode 100644 index 0000000000..7ae4f64b8f --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_project_artifacts_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_project_artifacts_attributes import ModelLabProjectArtifactsAttributes + from datadog_api_client.v2.model.model_lab_project_artifacts_type import ModelLabProjectArtifactsType + +class ModelLabProjectArtifactsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_project_artifacts_attributes import ModelLabProjectArtifactsAttributes + from datadog_api_client.v2.model.model_lab_project_artifacts_type import ModelLabProjectArtifactsType + return { + "attributes": (ModelLabProjectArtifactsAttributes,), + "id": (str,), + "type": (ModelLabProjectArtifactsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ModelLabProjectArtifactsAttributes, id: str, type: ModelLabProjectArtifactsType, **kwargs): + """ + A project artifacts JSON:API resource object. + + :param attributes: Artifact listing for a Model Lab project. + :type attributes: ModelLabProjectArtifactsAttributes + + :param id: The unique identifier of the project artifacts resource. + :type id: str + + :param type: The JSON:API type for a project artifacts resource. + :type type: ModelLabProjectArtifactsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/model_lab_project_artifacts_response.py b/datadog_api_client/v2/model/model_lab_project_artifacts_response.py new file mode 100644 index 0000000000..fb1d3f6d75 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_project_artifacts_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_project_artifacts_data import ModelLabProjectArtifactsData + +class ModelLabProjectArtifactsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_project_artifacts_data import ModelLabProjectArtifactsData + return { + "data": (ModelLabProjectArtifactsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ModelLabProjectArtifactsData, **kwargs): + """ + Response containing the artifact listing for a Model Lab project. + + :param data: A project artifacts JSON:API resource object. + :type data: ModelLabProjectArtifactsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/model_lab_project_artifacts_type.py b/datadog_api_client/v2/model/model_lab_project_artifacts_type.py new file mode 100644 index 0000000000..39c292a067 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_project_artifacts_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ModelLabProjectArtifactsType(ModelSimple): + """ + The JSON:API type for a project artifacts resource. + + :param value: If omitted defaults to "project_files". Must be one of ["project_files"]. + :type value: str + """ + + allowed_values = { + "project_files", + } + PROJECT_FILES: ClassVar["ModelLabProjectArtifactsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ModelLabProjectArtifactsType.PROJECT_FILES = ModelLabProjectArtifactsType("project_files") diff --git a/datadog_api_client/v2/model/model_lab_project_attributes.py b/datadog_api_client/v2/model/model_lab_project_attributes.py new file mode 100644 index 0000000000..0094caedb9 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_project_attributes.py @@ -0,0 +1,105 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_tag import ModelLabTag + +class ModelLabProjectAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_tag import ModelLabTag + return { + "artifact_storage_location": (str,), + "created_at": (datetime,), + "deleted_at": (datetime, none_type), + "description": (str,), + "external_url": (str, none_type), + "is_starred": (bool,), + "name": (str,), + "owner_id": (str, none_type), + "tags": ([ModelLabTag],), + "updated_at": (datetime,), + } + attribute_map = { + "artifact_storage_location": "artifact_storage_location", + "created_at": "created_at", + "deleted_at": "deleted_at", + "description": "description", + "external_url": "external_url", + "is_starred": "is_starred", + "name": "name", + "owner_id": "owner_id", + "tags": "tags", + "updated_at": "updated_at", + } + + def __init__(self_, artifact_storage_location: str, created_at: datetime, description: str, is_starred: bool, name: str, tags: List[ModelLabTag], updated_at: datetime, deleted_at: Union[datetime, none_type, UnsetType]=unset, external_url: Union[str, none_type, UnsetType]=unset, owner_id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of a Model Lab project. + + :param artifact_storage_location: The storage location for project artifacts. + :type artifact_storage_location: str + + :param created_at: The date and time the project was created. + :type created_at: datetime + + :param deleted_at: The date and time the project was soft-deleted. + :type deleted_at: datetime, none_type, optional + + :param description: A description of the project. + :type description: str + + :param external_url: An optional external URL associated with the project. + :type external_url: str, none_type, optional + + :param is_starred: Whether the project is starred by the current user. + :type is_starred: bool + + :param name: The name of the project. + :type name: str + + :param owner_id: The UUID of the project owner. + :type owner_id: str, none_type, optional + + :param tags: The list of tags associated with the project. + :type tags: [ModelLabTag] + + :param updated_at: The date and time the project was last updated. + :type updated_at: datetime + """ + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if external_url is not unset: + kwargs["external_url"] = external_url + if owner_id is not unset: + kwargs["owner_id"] = owner_id + super().__init__(kwargs) + + + self_.artifact_storage_location = artifact_storage_location + self_.created_at = created_at + self_.description = description + self_.is_starred = is_starred + self_.name = name + self_.tags = tags + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/model_lab_project_data.py b/datadog_api_client/v2/model/model_lab_project_data.py new file mode 100644 index 0000000000..2c05a6cd9b --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_project_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_project_attributes import ModelLabProjectAttributes + from datadog_api_client.v2.model.model_lab_project_type import ModelLabProjectType + +class ModelLabProjectData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_project_attributes import ModelLabProjectAttributes + from datadog_api_client.v2.model.model_lab_project_type import ModelLabProjectType + return { + "attributes": (ModelLabProjectAttributes,), + "id": (str,), + "type": (ModelLabProjectType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ModelLabProjectAttributes, id: str, type: ModelLabProjectType, **kwargs): + """ + A Model Lab project JSON:API resource object. + + :param attributes: Attributes of a Model Lab project. + :type attributes: ModelLabProjectAttributes + + :param id: The unique identifier of the project. + :type id: str + + :param type: The JSON:API type for a Model Lab project resource. + :type type: ModelLabProjectType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/model_lab_project_facet_type.py b/datadog_api_client/v2/model/model_lab_project_facet_type.py new file mode 100644 index 0000000000..5726b86879 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_project_facet_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ModelLabProjectFacetType(ModelSimple): + """ + The type of facet for filtering Model Lab projects. + + :param value: If omitted defaults to "tag". Must be one of ["tag"]. + :type value: str + """ + + allowed_values = { + "tag", + } + TAG: ClassVar["ModelLabProjectFacetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ModelLabProjectFacetType.TAG = ModelLabProjectFacetType("tag") diff --git a/datadog_api_client/v2/model/model_lab_project_response.py b/datadog_api_client/v2/model/model_lab_project_response.py new file mode 100644 index 0000000000..36e47f9537 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_project_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_project_data import ModelLabProjectData + +class ModelLabProjectResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_project_data import ModelLabProjectData + return { + "data": (ModelLabProjectData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ModelLabProjectData, **kwargs): + """ + Response containing a single Model Lab project. + + :param data: A Model Lab project JSON:API resource object. + :type data: ModelLabProjectData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/model_lab_project_type.py b/datadog_api_client/v2/model/model_lab_project_type.py new file mode 100644 index 0000000000..acaa61ec07 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_project_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ModelLabProjectType(ModelSimple): + """ + The JSON:API type for a Model Lab project resource. + + :param value: If omitted defaults to "projects". Must be one of ["projects"]. + :type value: str + """ + + allowed_values = { + "projects", + } + PROJECTS: ClassVar["ModelLabProjectType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ModelLabProjectType.PROJECTS = ModelLabProjectType("projects") diff --git a/datadog_api_client/v2/model/model_lab_projects_response.py b/datadog_api_client/v2/model/model_lab_projects_response.py new file mode 100644 index 0000000000..07c8841f52 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_projects_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_project_data import ModelLabProjectData + from datadog_api_client.v2.model.model_lab_pagination_links import ModelLabPaginationLinks + from datadog_api_client.v2.model.model_lab_page_meta import ModelLabPageMeta + +class ModelLabProjectsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_project_data import ModelLabProjectData + from datadog_api_client.v2.model.model_lab_pagination_links import ModelLabPaginationLinks + from datadog_api_client.v2.model.model_lab_page_meta import ModelLabPageMeta + return { + "data": ([ModelLabProjectData],), + "links": (ModelLabPaginationLinks,), + "meta": (ModelLabPageMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[ModelLabProjectData], meta: ModelLabPageMeta, links: Union[ModelLabPaginationLinks, UnsetType]=unset, **kwargs): + """ + Response containing a list of Model Lab projects with pagination metadata. + + :param data: The list of projects. + :type data: [ModelLabProjectData] + + :param links: Pagination links for navigating list responses. + :type links: ModelLabPaginationLinks, optional + + :param meta: Pagination metadata for a list response. + :type meta: ModelLabPageMeta + """ + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/model_lab_run_artifacts_attributes.py b/datadog_api_client/v2/model/model_lab_run_artifacts_attributes.py new file mode 100644 index 0000000000..5164e4c081 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_artifacts_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_artifact_object_info import ModelLabArtifactObjectInfo + +class ModelLabRunArtifactsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_artifact_object_info import ModelLabArtifactObjectInfo + return { + "files": ([ModelLabArtifactObjectInfo],), + "path_in_project": (str,), + } + attribute_map = { + "files": "files", + "path_in_project": "path_in_project", + } + + def __init__(self_, files: List[ModelLabArtifactObjectInfo], path_in_project: str, **kwargs): + """ + Artifact listing for a Model Lab run. + + :param files: The list of artifact files and directories. + :type files: [ModelLabArtifactObjectInfo] + + :param path_in_project: The path of the run's artifacts relative to the project's artifact root. + :type path_in_project: str + """ + super().__init__(kwargs) + + + self_.files = files + self_.path_in_project = path_in_project diff --git a/datadog_api_client/v2/model/model_lab_run_artifacts_data.py b/datadog_api_client/v2/model/model_lab_run_artifacts_data.py new file mode 100644 index 0000000000..ca12f8172e --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_artifacts_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_run_artifacts_attributes import ModelLabRunArtifactsAttributes + from datadog_api_client.v2.model.model_lab_run_artifacts_type import ModelLabRunArtifactsType + +class ModelLabRunArtifactsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_run_artifacts_attributes import ModelLabRunArtifactsAttributes + from datadog_api_client.v2.model.model_lab_run_artifacts_type import ModelLabRunArtifactsType + return { + "attributes": (ModelLabRunArtifactsAttributes,), + "id": (str,), + "type": (ModelLabRunArtifactsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ModelLabRunArtifactsAttributes, id: str, type: ModelLabRunArtifactsType, **kwargs): + """ + A run artifacts JSON:API resource object. + + :param attributes: Artifact listing for a Model Lab run. + :type attributes: ModelLabRunArtifactsAttributes + + :param id: The unique identifier of the artifacts resource. + :type id: str + + :param type: The JSON:API type for a run artifacts resource. + :type type: ModelLabRunArtifactsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/model_lab_run_artifacts_response.py b/datadog_api_client/v2/model/model_lab_run_artifacts_response.py new file mode 100644 index 0000000000..3045a3e284 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_artifacts_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_run_artifacts_data import ModelLabRunArtifactsData + +class ModelLabRunArtifactsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_run_artifacts_data import ModelLabRunArtifactsData + return { + "data": (ModelLabRunArtifactsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ModelLabRunArtifactsData, **kwargs): + """ + Response containing the artifact listing for a Model Lab run. + + :param data: A run artifacts JSON:API resource object. + :type data: ModelLabRunArtifactsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/model_lab_run_artifacts_type.py b/datadog_api_client/v2/model/model_lab_run_artifacts_type.py new file mode 100644 index 0000000000..4f126d7d54 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_artifacts_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ModelLabRunArtifactsType(ModelSimple): + """ + The JSON:API type for a run artifacts resource. + + :param value: If omitted defaults to "artifacts". Must be one of ["artifacts"]. + :type value: str + """ + + allowed_values = { + "artifacts", + } + ARTIFACTS: ClassVar["ModelLabRunArtifactsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ModelLabRunArtifactsType.ARTIFACTS = ModelLabRunArtifactsType("artifacts") diff --git a/datadog_api_client/v2/model/model_lab_run_attributes.py b/datadog_api_client/v2/model/model_lab_run_attributes.py new file mode 100644 index 0000000000..72e9e64f5e --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_attributes.py @@ -0,0 +1,167 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_metric_summary import ModelLabMetricSummary + from datadog_api_client.v2.model.model_lab_run_param import ModelLabRunParam + from datadog_api_client.v2.model.model_lab_run_status import ModelLabRunStatus + from datadog_api_client.v2.model.model_lab_tag import ModelLabTag + +class ModelLabRunAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_metric_summary import ModelLabMetricSummary + from datadog_api_client.v2.model.model_lab_run_param import ModelLabRunParam + from datadog_api_client.v2.model.model_lab_run_status import ModelLabRunStatus + from datadog_api_client.v2.model.model_lab_tag import ModelLabTag + return { + "completed_at": (datetime, none_type), + "created_at": (datetime,), + "deleted_at": (datetime, none_type), + "descendant_match": (bool,), + "description": (str,), + "duration": (float, none_type), + "external_url": (str, none_type), + "has_children": (bool,), + "is_pinned": (bool,), + "metric_summaries": ([ModelLabMetricSummary],), + "mlflow_artifact_location": (str,), + "name": (str,), + "owner_id": (str, none_type), + "params": ([ModelLabRunParam], none_type), + "project_id": (int,), + "started_at": (datetime,), + "status": (ModelLabRunStatus,), + "tags": ([ModelLabTag],), + "updated_at": (datetime,), + } + attribute_map = { + "completed_at": "completed_at", + "created_at": "created_at", + "deleted_at": "deleted_at", + "descendant_match": "descendant_match", + "description": "description", + "duration": "duration", + "external_url": "external_url", + "has_children": "has_children", + "is_pinned": "is_pinned", + "metric_summaries": "metric_summaries", + "mlflow_artifact_location": "mlflow_artifact_location", + "name": "name", + "owner_id": "owner_id", + "params": "params", + "project_id": "project_id", + "started_at": "started_at", + "status": "status", + "tags": "tags", + "updated_at": "updated_at", + } + + def __init__(self_, created_at: datetime, descendant_match: bool, description: str, has_children: bool, is_pinned: bool, metric_summaries: List[ModelLabMetricSummary], mlflow_artifact_location: str, name: str, params: Union[List[ModelLabRunParam], none_type], project_id: int, started_at: datetime, status: ModelLabRunStatus, tags: List[ModelLabTag], updated_at: datetime, completed_at: Union[datetime, none_type, UnsetType]=unset, deleted_at: Union[datetime, none_type, UnsetType]=unset, duration: Union[float, none_type, UnsetType]=unset, external_url: Union[str, none_type, UnsetType]=unset, owner_id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of a Model Lab run. + + :param completed_at: The date and time the run completed. + :type completed_at: datetime, none_type, optional + + :param created_at: The date and time the run was created. + :type created_at: datetime + + :param deleted_at: The date and time the run was soft-deleted. + :type deleted_at: datetime, none_type, optional + + :param descendant_match: Whether a descendant run matched the applied filters. + :type descendant_match: bool + + :param description: A description of the run. + :type description: str + + :param duration: The duration of the run in seconds. + :type duration: float, none_type, optional + + :param external_url: An optional external URL associated with the run. + :type external_url: str, none_type, optional + + :param has_children: Whether the run has child runs. + :type has_children: bool + + :param is_pinned: Whether the run is pinned by the current user. + :type is_pinned: bool + + :param metric_summaries: Summary statistics for metrics recorded during the run. + :type metric_summaries: [ModelLabMetricSummary] + + :param mlflow_artifact_location: The MLflow artifact storage location for this run. + :type mlflow_artifact_location: str + + :param name: The name of the run. + :type name: str + + :param owner_id: The UUID of the run owner. + :type owner_id: str, none_type, optional + + :param params: The list of parameters used for the run. + :type params: [ModelLabRunParam], none_type + + :param project_id: The ID of the project this run belongs to. + :type project_id: int + + :param started_at: The date and time the run started. + :type started_at: datetime + + :param status: The status of a Model Lab run. + :type status: ModelLabRunStatus + + :param tags: The list of tags associated with the run. + :type tags: [ModelLabTag] + + :param updated_at: The date and time the run was last updated. + :type updated_at: datetime + """ + if completed_at is not unset: + kwargs["completed_at"] = completed_at + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if duration is not unset: + kwargs["duration"] = duration + if external_url is not unset: + kwargs["external_url"] = external_url + if owner_id is not unset: + kwargs["owner_id"] = owner_id + super().__init__(kwargs) + + + self_.created_at = created_at + self_.descendant_match = descendant_match + self_.description = description + self_.has_children = has_children + self_.is_pinned = is_pinned + self_.metric_summaries = metric_summaries + self_.mlflow_artifact_location = mlflow_artifact_location + self_.name = name + self_.params = params + self_.project_id = project_id + self_.started_at = started_at + self_.status = status + self_.tags = tags + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/model_lab_run_data.py b/datadog_api_client/v2/model/model_lab_run_data.py new file mode 100644 index 0000000000..f7386fed0d --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_run_attributes import ModelLabRunAttributes + from datadog_api_client.v2.model.model_lab_run_type import ModelLabRunType + +class ModelLabRunData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_run_attributes import ModelLabRunAttributes + from datadog_api_client.v2.model.model_lab_run_type import ModelLabRunType + return { + "attributes": (ModelLabRunAttributes,), + "id": (str,), + "type": (ModelLabRunType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ModelLabRunAttributes, id: str, type: ModelLabRunType, **kwargs): + """ + A Model Lab run JSON:API resource object. + + :param attributes: Attributes of a Model Lab run. + :type attributes: ModelLabRunAttributes + + :param id: The unique identifier of the run. + :type id: str + + :param type: The JSON:API type for a Model Lab run resource. + :type type: ModelLabRunType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/model_lab_run_param.py b/datadog_api_client/v2/model/model_lab_run_param.py new file mode 100644 index 0000000000..9b38aa7e88 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_param.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabRunParam(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: str, value: str, **kwargs): + """ + A key-value parameter for a Model Lab run. + + :param key: The parameter key. + :type key: str + + :param value: The parameter value. + :type value: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.value = value diff --git a/datadog_api_client/v2/model/model_lab_run_response.py b/datadog_api_client/v2/model/model_lab_run_response.py new file mode 100644 index 0000000000..d20ed191d5 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_run_data import ModelLabRunData + +class ModelLabRunResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_run_data import ModelLabRunData + return { + "data": (ModelLabRunData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ModelLabRunData, **kwargs): + """ + Response containing a single Model Lab run. + + :param data: A Model Lab run JSON:API resource object. + :type data: ModelLabRunData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/model_lab_run_status.py b/datadog_api_client/v2/model/model_lab_run_status.py new file mode 100644 index 0000000000..b133c0e5e3 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_status.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ModelLabRunStatus(ModelSimple): + """ + The status of a Model Lab run. + + :param value: Must be one of ["pending", "running", "completed", "failed", "killed", "unresponsive", "paused"]. + :type value: str + """ + + allowed_values = { + "pending", + "running", + "completed", + "failed", + "killed", + "unresponsive", + "paused", + } + PENDING: ClassVar["ModelLabRunStatus"] + RUNNING: ClassVar["ModelLabRunStatus"] + COMPLETED: ClassVar["ModelLabRunStatus"] + FAILED: ClassVar["ModelLabRunStatus"] + KILLED: ClassVar["ModelLabRunStatus"] + UNRESPONSIVE: ClassVar["ModelLabRunStatus"] + PAUSED: ClassVar["ModelLabRunStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ModelLabRunStatus.PENDING = ModelLabRunStatus("pending") +ModelLabRunStatus.RUNNING = ModelLabRunStatus("running") +ModelLabRunStatus.COMPLETED = ModelLabRunStatus("completed") +ModelLabRunStatus.FAILED = ModelLabRunStatus("failed") +ModelLabRunStatus.KILLED = ModelLabRunStatus("killed") +ModelLabRunStatus.UNRESPONSIVE = ModelLabRunStatus("unresponsive") +ModelLabRunStatus.PAUSED = ModelLabRunStatus("paused") diff --git a/datadog_api_client/v2/model/model_lab_run_type.py b/datadog_api_client/v2/model/model_lab_run_type.py new file mode 100644 index 0000000000..2f11350e92 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_run_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ModelLabRunType(ModelSimple): + """ + The JSON:API type for a Model Lab run resource. + + :param value: If omitted defaults to "runs". Must be one of ["runs"]. + :type value: str + """ + + allowed_values = { + "runs", + } + RUNS: ClassVar["ModelLabRunType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ModelLabRunType.RUNS = ModelLabRunType("runs") diff --git a/datadog_api_client/v2/model/model_lab_runs_response.py b/datadog_api_client/v2/model/model_lab_runs_response.py new file mode 100644 index 0000000000..e5f6e6d248 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_runs_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.model_lab_run_data import ModelLabRunData + from datadog_api_client.v2.model.model_lab_pagination_links import ModelLabPaginationLinks + from datadog_api_client.v2.model.model_lab_page_meta import ModelLabPageMeta + +class ModelLabRunsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.model_lab_run_data import ModelLabRunData + from datadog_api_client.v2.model.model_lab_pagination_links import ModelLabPaginationLinks + from datadog_api_client.v2.model.model_lab_page_meta import ModelLabPageMeta + return { + "data": ([ModelLabRunData],), + "links": (ModelLabPaginationLinks,), + "meta": (ModelLabPageMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[ModelLabRunData], meta: ModelLabPageMeta, links: Union[ModelLabPaginationLinks, UnsetType]=unset, **kwargs): + """ + Response containing a list of Model Lab runs with pagination metadata. + + :param data: The list of runs. + :type data: [ModelLabRunData] + + :param links: Pagination links for navigating list responses. + :type links: ModelLabPaginationLinks, optional + + :param meta: Pagination metadata for a list response. + :type meta: ModelLabPageMeta + """ + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/model_lab_tag.py b/datadog_api_client/v2/model/model_lab_tag.py new file mode 100644 index 0000000000..c1a37b1694 --- /dev/null +++ b/datadog_api_client/v2/model/model_lab_tag.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ModelLabTag(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: str, value: str, **kwargs): + """ + A key-value tag attached to a resource. + + :param key: The tag key. + :type key: str + + :param value: The tag value. + :type value: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.value = value diff --git a/datadog_api_client/v2/model/monitor_alert_trigger_attributes.py b/datadog_api_client/v2/model/monitor_alert_trigger_attributes.py new file mode 100644 index 0000000000..0774c25aa8 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_alert_trigger_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorAlertTriggerAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "event_id": (str,), + "event_ts": (int,), + "monitor_id": (int,), + } + attribute_map = { + "event_id": "event_id", + "event_ts": "event_ts", + "monitor_id": "monitor_id", + } + + def __init__(self_, event_id: str, event_ts: int, monitor_id: int, **kwargs): + """ + Attributes for a monitor alert trigger. + + :param event_id: The event ID associated with the monitor alert. + :type event_id: str + + :param event_ts: The timestamp of the event in Unix milliseconds. + :type event_ts: int + + :param monitor_id: The monitor ID that triggered the alert. + :type monitor_id: int + """ + super().__init__(kwargs) + + + self_.event_id = event_id + self_.event_ts = event_ts + self_.monitor_id = monitor_id diff --git a/datadog_api_client/v2/model/monitor_config_policy_attribute_create_request.py b/datadog_api_client/v2/model/monitor_config_policy_attribute_create_request.py new file mode 100644 index 0000000000..b1a24a5338 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_attribute_create_request.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_policy_create_request import MonitorConfigPolicyPolicyCreateRequest + from datadog_api_client.v2.model.monitor_config_policy_type import MonitorConfigPolicyType + from datadog_api_client.v2.model.monitor_config_policy_tag_policy_create_request import MonitorConfigPolicyTagPolicyCreateRequest + +class MonitorConfigPolicyAttributeCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_policy_create_request import MonitorConfigPolicyPolicyCreateRequest + from datadog_api_client.v2.model.monitor_config_policy_type import MonitorConfigPolicyType + return { + "policy": (MonitorConfigPolicyPolicyCreateRequest,), + "policy_type": (MonitorConfigPolicyType,), + } + attribute_map = { + "policy": "policy", + "policy_type": "policy_type", + } + + def __init__(self_, policy: Union[MonitorConfigPolicyPolicyCreateRequest, MonitorConfigPolicyTagPolicyCreateRequest], policy_type: MonitorConfigPolicyType, **kwargs): + """ + Policy and policy type for a monitor configuration policy. + + :param policy: Configuration for the policy. + :type policy: MonitorConfigPolicyPolicyCreateRequest + + :param policy_type: The monitor configuration policy type. + :type policy_type: MonitorConfigPolicyType + """ + super().__init__(kwargs) + + + self_.policy = policy + self_.policy_type = policy_type diff --git a/datadog_api_client/v2/model/monitor_config_policy_attribute_edit_request.py b/datadog_api_client/v2/model/monitor_config_policy_attribute_edit_request.py new file mode 100644 index 0000000000..c8b711fc30 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_attribute_edit_request.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_policy import MonitorConfigPolicyPolicy + from datadog_api_client.v2.model.monitor_config_policy_type import MonitorConfigPolicyType + from datadog_api_client.v2.model.monitor_config_policy_tag_policy import MonitorConfigPolicyTagPolicy + +class MonitorConfigPolicyAttributeEditRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_policy import MonitorConfigPolicyPolicy + from datadog_api_client.v2.model.monitor_config_policy_type import MonitorConfigPolicyType + return { + "policy": (MonitorConfigPolicyPolicy,), + "policy_type": (MonitorConfigPolicyType,), + } + attribute_map = { + "policy": "policy", + "policy_type": "policy_type", + } + + def __init__(self_, policy: Union[MonitorConfigPolicyPolicy, MonitorConfigPolicyTagPolicy], policy_type: MonitorConfigPolicyType, **kwargs): + """ + Policy and policy type for a monitor configuration policy. + + :param policy: Configuration for the policy. + :type policy: MonitorConfigPolicyPolicy + + :param policy_type: The monitor configuration policy type. + :type policy_type: MonitorConfigPolicyType + """ + super().__init__(kwargs) + + + self_.policy = policy + self_.policy_type = policy_type diff --git a/datadog_api_client/v2/model/monitor_config_policy_attribute_response.py b/datadog_api_client/v2/model/monitor_config_policy_attribute_response.py new file mode 100644 index 0000000000..ccd8b03cbf --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_attribute_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_policy import MonitorConfigPolicyPolicy + from datadog_api_client.v2.model.monitor_config_policy_type import MonitorConfigPolicyType + from datadog_api_client.v2.model.monitor_config_policy_tag_policy import MonitorConfigPolicyTagPolicy + +class MonitorConfigPolicyAttributeResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_policy import MonitorConfigPolicyPolicy + from datadog_api_client.v2.model.monitor_config_policy_type import MonitorConfigPolicyType + return { + "policy": (MonitorConfigPolicyPolicy,), + "policy_type": (MonitorConfigPolicyType,), + } + attribute_map = { + "policy": "policy", + "policy_type": "policy_type", + } + + def __init__(self_, policy: Union[MonitorConfigPolicyPolicy, MonitorConfigPolicyTagPolicy, UnsetType]=unset, policy_type: Union[MonitorConfigPolicyType, UnsetType]=unset, **kwargs): + """ + Policy and policy type for a monitor configuration policy. + + :param policy: Configuration for the policy. + :type policy: MonitorConfigPolicyPolicy, optional + + :param policy_type: The monitor configuration policy type. + :type policy_type: MonitorConfigPolicyType, optional + """ + if policy is not unset: + kwargs["policy"] = policy + if policy_type is not unset: + kwargs["policy_type"] = policy_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_config_policy_create_data.py b/datadog_api_client/v2/model/monitor_config_policy_create_data.py new file mode 100644 index 0000000000..c0351cbe8a --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_create_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_attribute_create_request import MonitorConfigPolicyAttributeCreateRequest + from datadog_api_client.v2.model.monitor_config_policy_resource_type import MonitorConfigPolicyResourceType + from datadog_api_client.v2.model.monitor_config_policy_tag_policy_create_request import MonitorConfigPolicyTagPolicyCreateRequest + +class MonitorConfigPolicyCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_attribute_create_request import MonitorConfigPolicyAttributeCreateRequest + from datadog_api_client.v2.model.monitor_config_policy_resource_type import MonitorConfigPolicyResourceType + return { + "attributes": (MonitorConfigPolicyAttributeCreateRequest,), + "type": (MonitorConfigPolicyResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MonitorConfigPolicyAttributeCreateRequest, type: MonitorConfigPolicyResourceType, **kwargs): + """ + A monitor configuration policy data. + + :param attributes: Policy and policy type for a monitor configuration policy. + :type attributes: MonitorConfigPolicyAttributeCreateRequest + + :param type: Monitor configuration policy resource type. + :type type: MonitorConfigPolicyResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/monitor_config_policy_create_request.py b/datadog_api_client/v2/model/monitor_config_policy_create_request.py new file mode 100644 index 0000000000..50284ffd22 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_create_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_create_data import MonitorConfigPolicyCreateData + from datadog_api_client.v2.model.monitor_config_policy_tag_policy_create_request import MonitorConfigPolicyTagPolicyCreateRequest + +class MonitorConfigPolicyCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_create_data import MonitorConfigPolicyCreateData + return { + "data": (MonitorConfigPolicyCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MonitorConfigPolicyCreateData, **kwargs): + """ + Request for creating a monitor configuration policy. + + :param data: A monitor configuration policy data. + :type data: MonitorConfigPolicyCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/monitor_config_policy_edit_data.py b/datadog_api_client/v2/model/monitor_config_policy_edit_data.py new file mode 100644 index 0000000000..0431d5df74 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_edit_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_attribute_edit_request import MonitorConfigPolicyAttributeEditRequest + from datadog_api_client.v2.model.monitor_config_policy_resource_type import MonitorConfigPolicyResourceType + from datadog_api_client.v2.model.monitor_config_policy_tag_policy import MonitorConfigPolicyTagPolicy + +class MonitorConfigPolicyEditData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_attribute_edit_request import MonitorConfigPolicyAttributeEditRequest + from datadog_api_client.v2.model.monitor_config_policy_resource_type import MonitorConfigPolicyResourceType + return { + "attributes": (MonitorConfigPolicyAttributeEditRequest,), + "id": (str,), + "type": (MonitorConfigPolicyResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: MonitorConfigPolicyAttributeEditRequest, id: str, type: MonitorConfigPolicyResourceType, **kwargs): + """ + A monitor configuration policy data. + + :param attributes: Policy and policy type for a monitor configuration policy. + :type attributes: MonitorConfigPolicyAttributeEditRequest + + :param id: ID of this monitor configuration policy. + :type id: str + + :param type: Monitor configuration policy resource type. + :type type: MonitorConfigPolicyResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/monitor_config_policy_edit_request.py b/datadog_api_client/v2/model/monitor_config_policy_edit_request.py new file mode 100644 index 0000000000..76cf535bf2 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_edit_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_edit_data import MonitorConfigPolicyEditData + from datadog_api_client.v2.model.monitor_config_policy_tag_policy import MonitorConfigPolicyTagPolicy + +class MonitorConfigPolicyEditRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_edit_data import MonitorConfigPolicyEditData + return { + "data": (MonitorConfigPolicyEditData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MonitorConfigPolicyEditData, **kwargs): + """ + Request for editing a monitor configuration policy. + + :param data: A monitor configuration policy data. + :type data: MonitorConfigPolicyEditData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/monitor_config_policy_list_response.py b/datadog_api_client/v2/model/monitor_config_policy_list_response.py new file mode 100644 index 0000000000..2c8dea5065 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_list_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_response_data import MonitorConfigPolicyResponseData + from datadog_api_client.v2.model.monitor_config_policy_tag_policy import MonitorConfigPolicyTagPolicy + +class MonitorConfigPolicyListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_response_data import MonitorConfigPolicyResponseData + return { + "data": ([MonitorConfigPolicyResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[MonitorConfigPolicyResponseData], UnsetType]=unset, **kwargs): + """ + Response for retrieving all monitor configuration policies. + + :param data: An array of monitor configuration policies. + :type data: [MonitorConfigPolicyResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_config_policy_policy.py b/datadog_api_client/v2/model/monitor_config_policy_policy.py new file mode 100644 index 0000000000..86e62729e3 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_policy.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorConfigPolicyPolicy(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Configuration for the policy. + + :param tag_key: The key of the tag. + :type tag_key: str, optional + + :param tag_key_required: If a tag key is required for monitor creation. + :type tag_key_required: bool, optional + + :param valid_tag_values: Valid values for the tag. + :type valid_tag_values: [str], 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.monitor_config_policy_tag_policy import MonitorConfigPolicyTagPolicy + return { + "oneOf": [ + MonitorConfigPolicyTagPolicy, + ], + } diff --git a/datadog_api_client/v2/model/monitor_config_policy_policy_create_request.py b/datadog_api_client/v2/model/monitor_config_policy_policy_create_request.py new file mode 100644 index 0000000000..49a29f0bb3 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_policy_create_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorConfigPolicyPolicyCreateRequest(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Configuration for the policy. + + :param tag_key: The key of the tag. + :type tag_key: str + + :param tag_key_required: If a tag key is required for monitor creation. + :type tag_key_required: bool + + :param valid_tag_values: Valid values for the tag. + :type valid_tag_values: [str] + """ + 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.monitor_config_policy_tag_policy_create_request import MonitorConfigPolicyTagPolicyCreateRequest + return { + "oneOf": [ + MonitorConfigPolicyTagPolicyCreateRequest, + ], + } diff --git a/datadog_api_client/v2/model/monitor_config_policy_resource_type.py b/datadog_api_client/v2/model/monitor_config_policy_resource_type.py new file mode 100644 index 0000000000..dad80e98f3 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorConfigPolicyResourceType(ModelSimple): + """ + Monitor configuration policy resource type. + + :param value: If omitted defaults to "monitor-config-policy". Must be one of ["monitor-config-policy"]. + :type value: str + """ + + allowed_values = { + "monitor-config-policy", + } + MONITOR_CONFIG_POLICY: ClassVar["MonitorConfigPolicyResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorConfigPolicyResourceType.MONITOR_CONFIG_POLICY = MonitorConfigPolicyResourceType("monitor-config-policy") diff --git a/datadog_api_client/v2/model/monitor_config_policy_response.py b/datadog_api_client/v2/model/monitor_config_policy_response.py new file mode 100644 index 0000000000..44147b73ae --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_response_data import MonitorConfigPolicyResponseData + from datadog_api_client.v2.model.monitor_config_policy_tag_policy import MonitorConfigPolicyTagPolicy + +class MonitorConfigPolicyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_response_data import MonitorConfigPolicyResponseData + return { + "data": (MonitorConfigPolicyResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MonitorConfigPolicyResponseData, UnsetType]=unset, **kwargs): + """ + Response for retrieving a monitor configuration policy. + + :param data: A monitor configuration policy data. + :type data: MonitorConfigPolicyResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_config_policy_response_data.py b/datadog_api_client/v2/model/monitor_config_policy_response_data.py new file mode 100644 index 0000000000..2c06ebaa66 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_response_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_config_policy_attribute_response import MonitorConfigPolicyAttributeResponse + from datadog_api_client.v2.model.monitor_config_policy_resource_type import MonitorConfigPolicyResourceType + from datadog_api_client.v2.model.monitor_config_policy_tag_policy import MonitorConfigPolicyTagPolicy + +class MonitorConfigPolicyResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_config_policy_attribute_response import MonitorConfigPolicyAttributeResponse + from datadog_api_client.v2.model.monitor_config_policy_resource_type import MonitorConfigPolicyResourceType + return { + "attributes": (MonitorConfigPolicyAttributeResponse,), + "id": (str,), + "type": (MonitorConfigPolicyResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MonitorConfigPolicyAttributeResponse, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MonitorConfigPolicyResourceType, UnsetType]=unset, **kwargs): + """ + A monitor configuration policy data. + + :param attributes: Policy and policy type for a monitor configuration policy. + :type attributes: MonitorConfigPolicyAttributeResponse, optional + + :param id: ID of this monitor configuration policy. + :type id: str, optional + + :param type: Monitor configuration policy resource type. + :type type: MonitorConfigPolicyResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_config_policy_tag_policy.py b/datadog_api_client/v2/model/monitor_config_policy_tag_policy.py new file mode 100644 index 0000000000..57bc0532f4 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_tag_policy.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorConfigPolicyTagPolicy(ModelNormal): + validations = { + "tag_key": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "tag_key": (str,), + "tag_key_required": (bool,), + "valid_tag_values": ([str],), + } + attribute_map = { + "tag_key": "tag_key", + "tag_key_required": "tag_key_required", + "valid_tag_values": "valid_tag_values", + } + + def __init__(self_, tag_key: Union[str, UnsetType]=unset, tag_key_required: Union[bool, UnsetType]=unset, valid_tag_values: Union[List[str], UnsetType]=unset, **kwargs): + """ + Tag attributes of a monitor configuration policy. + + :param tag_key: The key of the tag. + :type tag_key: str, optional + + :param tag_key_required: If a tag key is required for monitor creation. + :type tag_key_required: bool, optional + + :param valid_tag_values: Valid values for the tag. + :type valid_tag_values: [str], optional + """ + if tag_key is not unset: + kwargs["tag_key"] = tag_key + if tag_key_required is not unset: + kwargs["tag_key_required"] = tag_key_required + if valid_tag_values is not unset: + kwargs["valid_tag_values"] = valid_tag_values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_config_policy_tag_policy_create_request.py b/datadog_api_client/v2/model/monitor_config_policy_tag_policy_create_request.py new file mode 100644 index 0000000000..4f12258c1d --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_tag_policy_create_request.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorConfigPolicyTagPolicyCreateRequest(ModelNormal): + validations = { + "tag_key": { + "max_length": 255, + }, + } + @cached_property + def openapi_types(_): + return { + "tag_key": (str,), + "tag_key_required": (bool,), + "valid_tag_values": ([str],), + } + attribute_map = { + "tag_key": "tag_key", + "tag_key_required": "tag_key_required", + "valid_tag_values": "valid_tag_values", + } + + def __init__(self_, tag_key: str, tag_key_required: bool, valid_tag_values: List[str], **kwargs): + """ + Tag attributes of a monitor configuration policy. + + :param tag_key: The key of the tag. + :type tag_key: str + + :param tag_key_required: If a tag key is required for monitor creation. + :type tag_key_required: bool + + :param valid_tag_values: Valid values for the tag. + :type valid_tag_values: [str] + """ + super().__init__(kwargs) + + + self_.tag_key = tag_key + self_.tag_key_required = tag_key_required + self_.valid_tag_values = valid_tag_values diff --git a/datadog_api_client/v2/model/monitor_config_policy_type.py b/datadog_api_client/v2/model/monitor_config_policy_type.py new file mode 100644 index 0000000000..3529ba2af4 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_config_policy_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorConfigPolicyType(ModelSimple): + """ + The monitor configuration policy type. + + :param value: If omitted defaults to "tag". Must be one of ["tag"]. + :type value: str + """ + + allowed_values = { + "tag", + } + TAG: ClassVar["MonitorConfigPolicyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorConfigPolicyType.TAG = MonitorConfigPolicyType("tag") diff --git a/datadog_api_client/v2/model/monitor_downtime_match_resource_type.py b/datadog_api_client/v2/model/monitor_downtime_match_resource_type.py new file mode 100644 index 0000000000..04b043862d --- /dev/null +++ b/datadog_api_client/v2/model/monitor_downtime_match_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorDowntimeMatchResourceType(ModelSimple): + """ + Monitor Downtime Match resource type. + + :param value: If omitted defaults to "downtime_match". Must be one of ["downtime_match"]. + :type value: str + """ + + allowed_values = { + "downtime_match", + } + DOWNTIME_MATCH: ClassVar["MonitorDowntimeMatchResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorDowntimeMatchResourceType.DOWNTIME_MATCH = MonitorDowntimeMatchResourceType("downtime_match") diff --git a/datadog_api_client/v2/model/monitor_downtime_match_response.py b/datadog_api_client/v2/model/monitor_downtime_match_response.py new file mode 100644 index 0000000000..490cc74820 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_downtime_match_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_downtime_match_response_data import MonitorDowntimeMatchResponseData + from datadog_api_client.v2.model.downtime_meta import DowntimeMeta + +class MonitorDowntimeMatchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_downtime_match_response_data import MonitorDowntimeMatchResponseData + from datadog_api_client.v2.model.downtime_meta import DowntimeMeta + return { + "data": ([MonitorDowntimeMatchResponseData],), + "meta": (DowntimeMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[MonitorDowntimeMatchResponseData], UnsetType]=unset, meta: Union[DowntimeMeta, UnsetType]=unset, **kwargs): + """ + Response for retrieving all downtime matches for a monitor. + + :param data: An array of downtime matches. + :type data: [MonitorDowntimeMatchResponseData], optional + + :param meta: Pagination metadata returned by the API. + :type meta: DowntimeMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_downtime_match_response_attributes.py b/datadog_api_client/v2/model/monitor_downtime_match_response_attributes.py new file mode 100644 index 0000000000..8bea1bfe49 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_downtime_match_response_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorDowntimeMatchResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (datetime, none_type), + "groups": ([str],), + "scope": (str,), + "start": (datetime,), + } + attribute_map = { + "end": "end", + "groups": "groups", + "scope": "scope", + "start": "start", + } + + def __init__(self_, end: Union[datetime, none_type, UnsetType]=unset, groups: Union[List[str], UnsetType]=unset, scope: Union[str, UnsetType]=unset, start: Union[datetime, UnsetType]=unset, **kwargs): + """ + Downtime match details. + + :param end: The end of the downtime. + :type end: datetime, none_type, optional + + :param groups: An array of groups associated with the downtime. + :type groups: [str], optional + + :param scope: The scope to which the downtime applies. Must follow the `common search syntax `_. + :type scope: str, optional + + :param start: The start of the downtime. + :type start: datetime, optional + """ + if end is not unset: + kwargs["end"] = end + if groups is not unset: + kwargs["groups"] = groups + if scope is not unset: + kwargs["scope"] = scope + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_downtime_match_response_data.py b/datadog_api_client/v2/model/monitor_downtime_match_response_data.py new file mode 100644 index 0000000000..1b80680d26 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_downtime_match_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_downtime_match_response_attributes import MonitorDowntimeMatchResponseAttributes + from datadog_api_client.v2.model.monitor_downtime_match_resource_type import MonitorDowntimeMatchResourceType + +class MonitorDowntimeMatchResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_downtime_match_response_attributes import MonitorDowntimeMatchResponseAttributes + from datadog_api_client.v2.model.monitor_downtime_match_resource_type import MonitorDowntimeMatchResourceType + return { + "attributes": (MonitorDowntimeMatchResponseAttributes,), + "id": (str, none_type), + "type": (MonitorDowntimeMatchResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MonitorDowntimeMatchResponseAttributes, UnsetType]=unset, id: Union[str, none_type, UnsetType]=unset, type: Union[MonitorDowntimeMatchResourceType, UnsetType]=unset, **kwargs): + """ + A downtime match. + + :param attributes: Downtime match details. + :type attributes: MonitorDowntimeMatchResponseAttributes, optional + + :param id: The downtime ID. + :type id: str, none_type, optional + + :param type: Monitor Downtime Match resource type. + :type type: MonitorDowntimeMatchResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_notification_rule_attributes.py b/datadog_api_client/v2/model/monitor_notification_rule_attributes.py new file mode 100644 index 0000000000..08646692aa --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_attributes.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_conditional_recipients import MonitorNotificationRuleConditionalRecipients + from datadog_api_client.v2.model.monitor_notification_rule_filter import MonitorNotificationRuleFilter + from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + +class MonitorNotificationRuleAttributes(ModelNormal): + validations = { + "name": { + "max_length": 1000, + "min_length": 1, + }, + "recipients": { + "max_items": 20, + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_conditional_recipients import MonitorNotificationRuleConditionalRecipients + from datadog_api_client.v2.model.monitor_notification_rule_filter import MonitorNotificationRuleFilter + return { + "conditional_recipients": (MonitorNotificationRuleConditionalRecipients,), + "filter": (MonitorNotificationRuleFilter,), + "name": (str,), + "recipients": ([str],), + } + attribute_map = { + "conditional_recipients": "conditional_recipients", + "filter": "filter", + "name": "name", + "recipients": "recipients", + } + + def __init__(self_, name: str, conditional_recipients: Union[MonitorNotificationRuleConditionalRecipients, UnsetType]=unset, filter: Union[MonitorNotificationRuleFilter, MonitorNotificationRuleFilterTags, MonitorNotificationRuleFilterScope, UnsetType]=unset, recipients: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of the monitor notification rule. + + :param conditional_recipients: Use conditional recipients to define different recipients for different situations. Cannot be used with ``recipients``. + :type conditional_recipients: MonitorNotificationRuleConditionalRecipients, optional + + :param filter: Specifies the matching criteria for monitor notifications. + :type filter: MonitorNotificationRuleFilter, optional + + :param name: The name of the monitor notification rule. + :type name: str + + :param recipients: A list of recipients to notify. Uses the same format as the monitor ``message`` field. Must not start with an '@'. Cannot be used with ``conditional_recipients``. + :type recipients: [str], optional + """ + if conditional_recipients is not unset: + kwargs["conditional_recipients"] = conditional_recipients + if filter is not unset: + kwargs["filter"] = filter + if recipients is not unset: + kwargs["recipients"] = recipients + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/monitor_notification_rule_condition.py b/datadog_api_client/v2/model/monitor_notification_rule_condition.py new file mode 100644 index 0000000000..589963435d --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_condition.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorNotificationRuleCondition(ModelNormal): + validations = { + "recipients": { + "max_items": 20, + "min_items": 1, + }, + "scope": { + "max_length": 3000, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "recipients": ([str],), + "scope": (str,), + } + attribute_map = { + "recipients": "recipients", + "scope": "scope", + } + + def __init__(self_, recipients: List[str], scope: str, **kwargs): + """ + A conditional recipient rule composed of a ``scope`` (the matching condition) and + ``recipients`` (who to notify when it matches). + + :param recipients: A list of recipients to notify. Uses the same format as the monitor ``message`` field. Must not start with an '@'. Cannot be used with ``conditional_recipients``. + :type recipients: [str] + + :param scope: Defines the condition under which the recipients are notified. Supported formats: + + * Monitor status condition using ``transition_type:`` , for example ``transition_type:is_alert``. + * A single tag key:value pair, for example ``env:prod``. + :type scope: str + """ + super().__init__(kwargs) + + + self_.recipients = recipients + self_.scope = scope diff --git a/datadog_api_client/v2/model/monitor_notification_rule_conditional_recipients.py b/datadog_api_client/v2/model/monitor_notification_rule_conditional_recipients.py new file mode 100644 index 0000000000..5f52e0215a --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_conditional_recipients.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_condition import MonitorNotificationRuleCondition + +class MonitorNotificationRuleConditionalRecipients(ModelNormal): + validations = { + "conditions": { + "max_items": 10, + "min_items": 1, + }, + "fallback_recipients": { + "max_items": 20, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_condition import MonitorNotificationRuleCondition + return { + "conditions": ([MonitorNotificationRuleCondition],), + "fallback_recipients": ([str],), + } + attribute_map = { + "conditions": "conditions", + "fallback_recipients": "fallback_recipients", + } + + def __init__(self_, conditions: List[MonitorNotificationRuleCondition], fallback_recipients: Union[List[str], UnsetType]=unset, **kwargs): + """ + Use conditional recipients to define different recipients for different situations. Cannot be used with ``recipients``. + + :param conditions: Conditions of the notification rule. + :type conditions: [MonitorNotificationRuleCondition] + + :param fallback_recipients: A list of recipients to notify. Uses the same format as the monitor ``message`` field. Must not start with an '@'. Cannot be used with ``conditional_recipients``. + :type fallback_recipients: [str], optional + """ + if fallback_recipients is not unset: + kwargs["fallback_recipients"] = fallback_recipients + super().__init__(kwargs) + + + self_.conditions = conditions diff --git a/datadog_api_client/v2/model/monitor_notification_rule_create_request.py b/datadog_api_client/v2/model/monitor_notification_rule_create_request.py new file mode 100644 index 0000000000..027ed66a6f --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_create_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_create_request_data import MonitorNotificationRuleCreateRequestData + from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + +class MonitorNotificationRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_create_request_data import MonitorNotificationRuleCreateRequestData + return { + "data": (MonitorNotificationRuleCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MonitorNotificationRuleCreateRequestData, **kwargs): + """ + Request for creating a monitor notification rule. + + :param data: Object to create a monitor notification rule. + :type data: MonitorNotificationRuleCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/monitor_notification_rule_create_request_data.py b/datadog_api_client/v2/model/monitor_notification_rule_create_request_data.py new file mode 100644 index 0000000000..c581d07e33 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_create_request_data.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_attributes import MonitorNotificationRuleAttributes + from datadog_api_client.v2.model.monitor_notification_rule_resource_type import MonitorNotificationRuleResourceType + from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + +class MonitorNotificationRuleCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_attributes import MonitorNotificationRuleAttributes + from datadog_api_client.v2.model.monitor_notification_rule_resource_type import MonitorNotificationRuleResourceType + return { + "attributes": (MonitorNotificationRuleAttributes,), + "type": (MonitorNotificationRuleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MonitorNotificationRuleAttributes, type: Union[MonitorNotificationRuleResourceType, UnsetType]=unset, **kwargs): + """ + Object to create a monitor notification rule. + + :param attributes: Attributes of the monitor notification rule. + :type attributes: MonitorNotificationRuleAttributes + + :param type: Monitor notification rule resource type. + :type type: MonitorNotificationRuleResourceType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/monitor_notification_rule_data.py b/datadog_api_client/v2/model/monitor_notification_rule_data.py new file mode 100644 index 0000000000..a49b630133 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_data.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_response_attributes import MonitorNotificationRuleResponseAttributes + from datadog_api_client.v2.model.monitor_notification_rule_relationships import MonitorNotificationRuleRelationships + from datadog_api_client.v2.model.monitor_notification_rule_resource_type import MonitorNotificationRuleResourceType + from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + +class MonitorNotificationRuleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_response_attributes import MonitorNotificationRuleResponseAttributes + from datadog_api_client.v2.model.monitor_notification_rule_relationships import MonitorNotificationRuleRelationships + from datadog_api_client.v2.model.monitor_notification_rule_resource_type import MonitorNotificationRuleResourceType + return { + "attributes": (MonitorNotificationRuleResponseAttributes,), + "id": (str,), + "relationships": (MonitorNotificationRuleRelationships,), + "type": (MonitorNotificationRuleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[MonitorNotificationRuleResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[MonitorNotificationRuleRelationships, UnsetType]=unset, type: Union[MonitorNotificationRuleResourceType, UnsetType]=unset, **kwargs): + """ + Monitor notification rule data. + + :param attributes: Attributes of the monitor notification rule. + :type attributes: MonitorNotificationRuleResponseAttributes, optional + + :param id: The ID of the monitor notification rule. + :type id: str, optional + + :param relationships: All relationships associated with monitor notification rule. + :type relationships: MonitorNotificationRuleRelationships, optional + + :param type: Monitor notification rule resource type. + :type type: MonitorNotificationRuleResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_notification_rule_filter.py b/datadog_api_client/v2/model/monitor_notification_rule_filter.py new file mode 100644 index 0000000000..0b895b9912 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_filter.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorNotificationRuleFilter(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Specifies the matching criteria for monitor notifications. + + :param tags: A list of tag key:value pairs (e.g. `team:product`). All tags must match (AND semantics). + :type tags: [str] + + :param scope: A scope expression composed by key:value pairs (e.g. `service:foo`) with boolean operators (AND, OR, NOT) and parentheses for grouping. + :type scope: str + """ + 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.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + return { + "oneOf": [ + MonitorNotificationRuleFilterTags, + MonitorNotificationRuleFilterScope, + ], + } diff --git a/datadog_api_client/v2/model/monitor_notification_rule_filter_scope.py b/datadog_api_client/v2/model/monitor_notification_rule_filter_scope.py new file mode 100644 index 0000000000..4e7f9ec56c --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_filter_scope.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorNotificationRuleFilterScope(ModelNormal): + validations = { + "scope": { + "max_length": 3000, + "min_length": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "scope": (str,), + } + attribute_map = { + "scope": "scope", + } + + def __init__(self_, scope: str, **kwargs): + """ + Filters monitor notifications using a scope expression over key:value pairs with boolean logic (AND, OR, NOT). + + :param scope: A scope expression composed by key:value pairs (e.g. ``service:foo`` ) with boolean operators (AND, OR, NOT) and parentheses for grouping. + :type scope: str + """ + super().__init__(kwargs) + + + self_.scope = scope diff --git a/datadog_api_client/v2/model/monitor_notification_rule_filter_tags.py b/datadog_api_client/v2/model/monitor_notification_rule_filter_tags.py new file mode 100644 index 0000000000..ec49952ae4 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_filter_tags.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorNotificationRuleFilterTags(ModelNormal): + validations = { + "tags": { + "max_items": 20, + "min_items": 1, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "tags": ([str],), + } + attribute_map = { + "tags": "tags", + } + + def __init__(self_, tags: List[str], **kwargs): + """ + Filters monitor notifications by a list of tag key:value pairs. + + :param tags: A list of tag key:value pairs (e.g. ``team:product`` ). All tags must match (AND semantics). + :type tags: [str] + """ + super().__init__(kwargs) + + + self_.tags = tags diff --git a/datadog_api_client/v2/model/monitor_notification_rule_list_response.py b/datadog_api_client/v2/model/monitor_notification_rule_list_response.py new file mode 100644 index 0000000000..20f707e1bc --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_list_response.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_data import MonitorNotificationRuleData + from datadog_api_client.v2.model.monitor_notification_rule_response_included_item import MonitorNotificationRuleResponseIncludedItem + from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + from datadog_api_client.v2.model.user import User + +class MonitorNotificationRuleListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_data import MonitorNotificationRuleData + from datadog_api_client.v2.model.monitor_notification_rule_response_included_item import MonitorNotificationRuleResponseIncludedItem + return { + "data": ([MonitorNotificationRuleData],), + "included": ([MonitorNotificationRuleResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[List[MonitorNotificationRuleData], UnsetType]=unset, included: Union[List[Union[MonitorNotificationRuleResponseIncludedItem, User]], UnsetType]=unset, **kwargs): + """ + Response for retrieving all monitor notification rules. + + :param data: A list of monitor notification rules. + :type data: [MonitorNotificationRuleData], optional + + :param included: Array of objects related to the monitor notification rules. + :type included: [MonitorNotificationRuleResponseIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_notification_rule_relationships.py b/datadog_api_client/v2/model/monitor_notification_rule_relationships.py new file mode 100644 index 0000000000..5683a47b45 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_relationships_created_by import MonitorNotificationRuleRelationshipsCreatedBy + +class MonitorNotificationRuleRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_relationships_created_by import MonitorNotificationRuleRelationshipsCreatedBy + return { + "created_by": (MonitorNotificationRuleRelationshipsCreatedBy,), + } + attribute_map = { + "created_by": "created_by", + } + + def __init__(self_, created_by: Union[MonitorNotificationRuleRelationshipsCreatedBy, UnsetType]=unset, **kwargs): + """ + All relationships associated with monitor notification rule. + + :param created_by: The user who created the monitor notification rule. + :type created_by: MonitorNotificationRuleRelationshipsCreatedBy, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_notification_rule_relationships_created_by.py b/datadog_api_client/v2/model/monitor_notification_rule_relationships_created_by.py new file mode 100644 index 0000000000..13fe8904a8 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_relationships_created_by.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_relationships_created_by_data import MonitorNotificationRuleRelationshipsCreatedByData + +class MonitorNotificationRuleRelationshipsCreatedBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_relationships_created_by_data import MonitorNotificationRuleRelationshipsCreatedByData + return { + "data": (MonitorNotificationRuleRelationshipsCreatedByData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MonitorNotificationRuleRelationshipsCreatedByData, none_type, UnsetType]=unset, **kwargs): + """ + The user who created the monitor notification rule. + + :param data: Data for the user who created the monitor notification rule. + :type data: MonitorNotificationRuleRelationshipsCreatedByData, none_type, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_notification_rule_relationships_created_by_data.py b/datadog_api_client/v2/model/monitor_notification_rule_relationships_created_by_data.py new file mode 100644 index 0000000000..7e88f790a8 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_relationships_created_by_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.users_type import UsersType + +class MonitorNotificationRuleRelationshipsCreatedByData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.users_type import UsersType + return { + "id": (str,), + "type": (UsersType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[UsersType, UnsetType]=unset, **kwargs): + """ + Data for the user who created the monitor notification rule. + + :param id: User ID of the monitor notification rule creator. + :type id: str, optional + + :param type: Users resource type. + :type type: UsersType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_notification_rule_resource_type.py b/datadog_api_client/v2/model/monitor_notification_rule_resource_type.py new file mode 100644 index 0000000000..7c56a628ae --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorNotificationRuleResourceType(ModelSimple): + """ + Monitor notification rule resource type. + + :param value: If omitted defaults to "monitor-notification-rule". Must be one of ["monitor-notification-rule"]. + :type value: str + """ + + allowed_values = { + "monitor-notification-rule", + } + MONITOR_NOTIFICATION_RULE: ClassVar["MonitorNotificationRuleResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorNotificationRuleResourceType.MONITOR_NOTIFICATION_RULE = MonitorNotificationRuleResourceType("monitor-notification-rule") diff --git a/datadog_api_client/v2/model/monitor_notification_rule_response.py b/datadog_api_client/v2/model/monitor_notification_rule_response.py new file mode 100644 index 0000000000..0fe4a1d926 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_response.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_data import MonitorNotificationRuleData + from datadog_api_client.v2.model.monitor_notification_rule_response_included_item import MonitorNotificationRuleResponseIncludedItem + from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + from datadog_api_client.v2.model.user import User + +class MonitorNotificationRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_data import MonitorNotificationRuleData + from datadog_api_client.v2.model.monitor_notification_rule_response_included_item import MonitorNotificationRuleResponseIncludedItem + return { + "data": (MonitorNotificationRuleData,), + "included": ([MonitorNotificationRuleResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[MonitorNotificationRuleData, UnsetType]=unset, included: Union[List[Union[MonitorNotificationRuleResponseIncludedItem, User]], UnsetType]=unset, **kwargs): + """ + A monitor notification rule. + + :param data: Monitor notification rule data. + :type data: MonitorNotificationRuleData, optional + + :param included: Array of objects related to the monitor notification rule that the user requested. + :type included: [MonitorNotificationRuleResponseIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_notification_rule_response_attributes.py b/datadog_api_client/v2/model/monitor_notification_rule_response_attributes.py new file mode 100644 index 0000000000..05ebb76138 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_response_attributes.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_conditional_recipients import MonitorNotificationRuleConditionalRecipients + from datadog_api_client.v2.model.monitor_notification_rule_filter import MonitorNotificationRuleFilter + from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + +class MonitorNotificationRuleResponseAttributes(ModelNormal): + validations = { + "name": { + "max_length": 1000, + "min_length": 1, + }, + "recipients": { + "max_items": 20, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_conditional_recipients import MonitorNotificationRuleConditionalRecipients + from datadog_api_client.v2.model.monitor_notification_rule_filter import MonitorNotificationRuleFilter + return { + "conditional_recipients": (MonitorNotificationRuleConditionalRecipients,), + "created": (datetime,), + "filter": (MonitorNotificationRuleFilter,), + "modified": (datetime,), + "name": (str,), + "recipients": ([str],), + } + attribute_map = { + "conditional_recipients": "conditional_recipients", + "created": "created", + "filter": "filter", + "modified": "modified", + "name": "name", + "recipients": "recipients", + } + + def __init__(self_, conditional_recipients: Union[MonitorNotificationRuleConditionalRecipients, UnsetType]=unset, created: Union[datetime, UnsetType]=unset, filter: Union[MonitorNotificationRuleFilter, MonitorNotificationRuleFilterTags, MonitorNotificationRuleFilterScope, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, recipients: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of the monitor notification rule. + + :param conditional_recipients: Use conditional recipients to define different recipients for different situations. Cannot be used with ``recipients``. + :type conditional_recipients: MonitorNotificationRuleConditionalRecipients, optional + + :param created: Creation time of the monitor notification rule. + :type created: datetime, optional + + :param filter: Specifies the matching criteria for monitor notifications. + :type filter: MonitorNotificationRuleFilter, optional + + :param modified: Time the monitor notification rule was last modified. + :type modified: datetime, optional + + :param name: The name of the monitor notification rule. + :type name: str, optional + + :param recipients: A list of recipients to notify. Uses the same format as the monitor ``message`` field. Must not start with an '@'. Cannot be used with ``conditional_recipients``. + :type recipients: [str], optional + """ + if conditional_recipients is not unset: + kwargs["conditional_recipients"] = conditional_recipients + if created is not unset: + kwargs["created"] = created + if filter is not unset: + kwargs["filter"] = filter + if modified is not unset: + kwargs["modified"] = modified + if name is not unset: + kwargs["name"] = name + if recipients is not unset: + kwargs["recipients"] = recipients + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_notification_rule_response_included_item.py b/datadog_api_client/v2/model/monitor_notification_rule_response_included_item.py new file mode 100644 index 0000000000..5a84cc1538 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_response_included_item.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorNotificationRuleResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to a monitor 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 + return { + "oneOf": [ + User, + ], + } diff --git a/datadog_api_client/v2/model/monitor_notification_rule_update_request.py b/datadog_api_client/v2/model/monitor_notification_rule_update_request.py new file mode 100644 index 0000000000..a2cc454904 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_update_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_update_request_data import MonitorNotificationRuleUpdateRequestData + from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + +class MonitorNotificationRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_update_request_data import MonitorNotificationRuleUpdateRequestData + return { + "data": (MonitorNotificationRuleUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MonitorNotificationRuleUpdateRequestData, **kwargs): + """ + Request for updating a monitor notification rule. + + :param data: Object to update a monitor notification rule. + :type data: MonitorNotificationRuleUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/monitor_notification_rule_update_request_data.py b/datadog_api_client/v2/model/monitor_notification_rule_update_request_data.py new file mode 100644 index 0000000000..e3c9c70e06 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_notification_rule_update_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_notification_rule_attributes import MonitorNotificationRuleAttributes + from datadog_api_client.v2.model.monitor_notification_rule_resource_type import MonitorNotificationRuleResourceType + from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags + from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope + +class MonitorNotificationRuleUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_notification_rule_attributes import MonitorNotificationRuleAttributes + from datadog_api_client.v2.model.monitor_notification_rule_resource_type import MonitorNotificationRuleResourceType + return { + "attributes": (MonitorNotificationRuleAttributes,), + "id": (str,), + "type": (MonitorNotificationRuleResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: MonitorNotificationRuleAttributes, id: str, type: Union[MonitorNotificationRuleResourceType, UnsetType]=unset, **kwargs): + """ + Object to update a monitor notification rule. + + :param attributes: Attributes of the monitor notification rule. + :type attributes: MonitorNotificationRuleAttributes + + :param id: The ID of the monitor notification rule. + :type id: str + + :param type: Monitor notification rule resource type. + :type type: MonitorNotificationRuleResourceType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id diff --git a/datadog_api_client/v2/model/monitor_trigger.py b/datadog_api_client/v2/model/monitor_trigger.py new file mode 100644 index 0000000000..d3bdc993e7 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + +class MonitorTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + return { + "rate_limit": (TriggerRateLimit,), + } + attribute_map = { + "rate_limit": "rateLimit", + } + + def __init__(self_, rate_limit: Union[TriggerRateLimit, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from a Monitor. For automatic triggering a handle must be configured and the workflow must be published. + + :param rate_limit: Defines a rate limit for a trigger. + :type rate_limit: TriggerRateLimit, optional + """ + if rate_limit is not unset: + kwargs["rate_limit"] = rate_limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_trigger_wrapper.py b/datadog_api_client/v2/model/monitor_trigger_wrapper.py new file mode 100644 index 0000000000..ea88683b40 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_trigger import MonitorTrigger + +class MonitorTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_trigger import MonitorTrigger + return { + "monitor_trigger": (MonitorTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "monitor_trigger": "monitorTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, monitor_trigger: MonitorTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Monitor-based trigger. + + :param monitor_trigger: Trigger a workflow from a Monitor. For automatic triggering a handle must be configured and the workflow must be published. + :type monitor_trigger: MonitorTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.monitor_trigger = monitor_trigger diff --git a/datadog_api_client/v2/model/monitor_type.py b/datadog_api_client/v2/model/monitor_type.py new file mode 100644 index 0000000000..4b388af188 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_type.py @@ -0,0 +1,122 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorType(ModelNormal): + validations = { + "group_status": { + "inclusive_maximum": 2147483647, + }, + } + _nullable = True + @cached_property + def openapi_types(_): + return { + "created_at": (int,), + "group_status": (int,), + "groups": ([str],), + "id": (int,), + "message": (str,), + "modified": (int,), + "name": (str,), + "query": (str,), + "tags": ([str],), + "templated_name": (str,), + "type": (str,), + } + attribute_map = { + "created_at": "created_at", + "group_status": "group_status", + "groups": "groups", + "id": "id", + "message": "message", + "modified": "modified", + "name": "name", + "query": "query", + "tags": "tags", + "templated_name": "templated_name", + "type": "type", + } + + def __init__(self_, created_at: Union[int, UnsetType]=unset, group_status: Union[int, UnsetType]=unset, groups: Union[List[str], UnsetType]=unset, id: Union[int, UnsetType]=unset, message: Union[str, UnsetType]=unset, modified: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, templated_name: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes from the monitor that triggered the event. + + :param created_at: The POSIX timestamp of the monitor's creation in nanoseconds. + :type created_at: int, optional + + :param group_status: Monitor group status used when there is no ``result_groups``. + :type group_status: int, optional + + :param groups: Groups to which the monitor belongs. + :type groups: [str], optional + + :param id: The monitor ID. + :type id: int, optional + + :param message: The monitor message. + :type message: str, optional + + :param modified: The monitor's last-modified timestamp. + :type modified: int, optional + + :param name: The monitor name. + :type name: str, optional + + :param query: The query that triggers the alert. + :type query: str, optional + + :param tags: A list of tags attached to the monitor. + :type tags: [str], optional + + :param templated_name: The templated name of the monitor before resolving any template variables. + :type templated_name: str, optional + + :param type: The monitor type. + :type type: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if group_status is not unset: + kwargs["group_status"] = group_status + if groups is not unset: + kwargs["groups"] = groups + if id is not unset: + kwargs["id"] = id + if message is not unset: + kwargs["message"] = message + if modified is not unset: + kwargs["modified"] = modified + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if tags is not unset: + kwargs["tags"] = tags + if templated_name is not unset: + kwargs["templated_name"] = templated_name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_user_template.py b/datadog_api_client/v2/model/monitor_user_template.py new file mode 100644 index 0000000000..225ce7d1ea --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_template_variables_items import MonitorUserTemplateTemplateVariablesItems + from datadog_api_client.v2.model.simple_monitor_user_template import SimpleMonitorUserTemplate + +class MonitorUserTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_template_variables_items import MonitorUserTemplateTemplateVariablesItems + from datadog_api_client.v2.model.simple_monitor_user_template import SimpleMonitorUserTemplate + return { + "created": (datetime,), + "description": (str,), + "modified": (datetime,), + "monitor_definition": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tags": ([str],), + "template_variables": ([MonitorUserTemplateTemplateVariablesItems],), + "title": (str,), + "version": (int,), + "versions": ([SimpleMonitorUserTemplate],), + } + attribute_map = { + "created": "created", + "description": "description", + "modified": "modified", + "monitor_definition": "monitor_definition", + "tags": "tags", + "template_variables": "template_variables", + "title": "title", + "version": "version", + "versions": "versions", + } + read_only_vars = { + "created", + "modified", + "version", + } + + def __init__(self_, created: Union[datetime, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, monitor_definition: Union[Dict[str, Any], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, template_variables: Union[List[MonitorUserTemplateTemplateVariablesItems], UnsetType]=unset, title: Union[str, UnsetType]=unset, version: Union[int, none_type, UnsetType]=unset, versions: Union[List[SimpleMonitorUserTemplate], UnsetType]=unset, **kwargs): + """ + A monitor user template object. + + :param created: The created timestamp of the template. + :type created: datetime, optional + + :param description: A brief description of the monitor user template. + :type description: str, none_type, optional + + :param modified: The last modified timestamp. When the template version was created. + :type modified: datetime, optional + + :param monitor_definition: A valid monitor definition in the same format as the `V1 Monitor API `_. + :type monitor_definition: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tags: The definition of ``MonitorUserTemplateTags`` object. + :type tags: [str], optional + + :param template_variables: The definition of ``MonitorUserTemplateTemplateVariables`` object. + :type template_variables: [MonitorUserTemplateTemplateVariablesItems], optional + + :param title: The title of the monitor user template. + :type title: str, optional + + :param version: The version of the monitor user template. + :type version: int, none_type, optional + + :param versions: All versions of the monitor user template. + :type versions: [SimpleMonitorUserTemplate], optional + """ + if created is not unset: + kwargs["created"] = created + if description is not unset: + kwargs["description"] = description + if modified is not unset: + kwargs["modified"] = modified + if monitor_definition is not unset: + kwargs["monitor_definition"] = monitor_definition + if tags is not unset: + kwargs["tags"] = tags + if template_variables is not unset: + kwargs["template_variables"] = template_variables + if title is not unset: + kwargs["title"] = title + if version is not unset: + kwargs["version"] = version + if versions is not unset: + kwargs["versions"] = versions + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_user_template_create_data.py b/datadog_api_client/v2/model/monitor_user_template_create_data.py new file mode 100644 index 0000000000..b469dd8d96 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_request_attributes import MonitorUserTemplateRequestAttributes + from datadog_api_client.v2.model.monitor_user_template_resource_type import MonitorUserTemplateResourceType + +class MonitorUserTemplateCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_request_attributes import MonitorUserTemplateRequestAttributes + from datadog_api_client.v2.model.monitor_user_template_resource_type import MonitorUserTemplateResourceType + return { + "attributes": (MonitorUserTemplateRequestAttributes,), + "type": (MonitorUserTemplateResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MonitorUserTemplateRequestAttributes, type: MonitorUserTemplateResourceType, **kwargs): + """ + Monitor user template data. + + :param attributes: Attributes for a monitor user template. + :type attributes: MonitorUserTemplateRequestAttributes + + :param type: Monitor user template resource type. + :type type: MonitorUserTemplateResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/monitor_user_template_create_request.py b/datadog_api_client/v2/model/monitor_user_template_create_request.py new file mode 100644 index 0000000000..154ca8c4c4 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_create_data import MonitorUserTemplateCreateData + +class MonitorUserTemplateCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_create_data import MonitorUserTemplateCreateData + return { + "data": (MonitorUserTemplateCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MonitorUserTemplateCreateData, **kwargs): + """ + Request for creating a monitor user template. + + :param data: Monitor user template data. + :type data: MonitorUserTemplateCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/monitor_user_template_create_response.py b/datadog_api_client/v2/model/monitor_user_template_create_response.py new file mode 100644 index 0000000000..f2191fc099 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_response_data import MonitorUserTemplateResponseData + +class MonitorUserTemplateCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_response_data import MonitorUserTemplateResponseData + return { + "data": (MonitorUserTemplateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MonitorUserTemplateResponseData, UnsetType]=unset, **kwargs): + """ + Response for creating a monitor user template. + + :param data: Monitor user template list response data. + :type data: MonitorUserTemplateResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_user_template_list_response.py b/datadog_api_client/v2/model/monitor_user_template_list_response.py new file mode 100644 index 0000000000..9eca83fbda --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_response_data import MonitorUserTemplateResponseData + +class MonitorUserTemplateListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_response_data import MonitorUserTemplateResponseData + return { + "data": ([MonitorUserTemplateResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[MonitorUserTemplateResponseData], UnsetType]=unset, **kwargs): + """ + Response for retrieving all monitor user templates. + + :param data: An array of monitor user templates. + :type data: [MonitorUserTemplateResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_user_template_request_attributes.py b/datadog_api_client/v2/model/monitor_user_template_request_attributes.py new file mode 100644 index 0000000000..b34438a5e1 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_request_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_template_variables_items import MonitorUserTemplateTemplateVariablesItems + +class MonitorUserTemplateRequestAttributes(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_template_variables_items import MonitorUserTemplateTemplateVariablesItems + return { + "description": (str,), + "monitor_definition": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tags": ([str],), + "template_variables": ([MonitorUserTemplateTemplateVariablesItems],), + "title": (str,), + } + attribute_map = { + "description": "description", + "monitor_definition": "monitor_definition", + "tags": "tags", + "template_variables": "template_variables", + "title": "title", + } + + def __init__(self_, monitor_definition: Dict[str, Any], tags: List[str], title: str, description: Union[str, none_type, UnsetType]=unset, template_variables: Union[List[MonitorUserTemplateTemplateVariablesItems], UnsetType]=unset, **kwargs): + """ + Attributes for a monitor user template. + + :param description: A brief description of the monitor user template. + :type description: str, none_type, optional + + :param monitor_definition: A valid monitor definition in the same format as the `V1 Monitor API `_. + :type monitor_definition: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + + :param tags: The definition of ``MonitorUserTemplateTags`` object. + :type tags: [str] + + :param template_variables: The definition of ``MonitorUserTemplateTemplateVariables`` object. + :type template_variables: [MonitorUserTemplateTemplateVariablesItems], optional + + :param title: The title of the monitor user template. + :type title: str + """ + if description is not unset: + kwargs["description"] = description + if template_variables is not unset: + kwargs["template_variables"] = template_variables + super().__init__(kwargs) + + + self_.monitor_definition = monitor_definition + self_.tags = tags + self_.title = title diff --git a/datadog_api_client/v2/model/monitor_user_template_resource_type.py b/datadog_api_client/v2/model/monitor_user_template_resource_type.py new file mode 100644 index 0000000000..c2c3edd79f --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MonitorUserTemplateResourceType(ModelSimple): + """ + Monitor user template resource type. + + :param value: If omitted defaults to "monitor-user-template". Must be one of ["monitor-user-template"]. + :type value: str + """ + + allowed_values = { + "monitor-user-template", + } + MONITOR_USER_TEMPLATE: ClassVar["MonitorUserTemplateResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MonitorUserTemplateResourceType.MONITOR_USER_TEMPLATE = MonitorUserTemplateResourceType("monitor-user-template") diff --git a/datadog_api_client/v2/model/monitor_user_template_response.py b/datadog_api_client/v2/model/monitor_user_template_response.py new file mode 100644 index 0000000000..b944674422 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_response_data_with_versions import MonitorUserTemplateResponseDataWithVersions + +class MonitorUserTemplateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_response_data_with_versions import MonitorUserTemplateResponseDataWithVersions + return { + "data": (MonitorUserTemplateResponseDataWithVersions,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MonitorUserTemplateResponseDataWithVersions, UnsetType]=unset, **kwargs): + """ + Response for retrieving a monitor user template. + + :param data: Monitor user template data. + :type data: MonitorUserTemplateResponseDataWithVersions, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_user_template_response_attributes.py b/datadog_api_client/v2/model/monitor_user_template_response_attributes.py new file mode 100644 index 0000000000..23203f92fe --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_response_attributes.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_template_variables_items import MonitorUserTemplateTemplateVariablesItems + +class MonitorUserTemplateResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_template_variables_items import MonitorUserTemplateTemplateVariablesItems + return { + "created": (datetime,), + "description": (str,), + "modified": (datetime,), + "monitor_definition": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tags": ([str],), + "template_variables": ([MonitorUserTemplateTemplateVariablesItems],), + "title": (str,), + "version": (int,), + } + attribute_map = { + "created": "created", + "description": "description", + "modified": "modified", + "monitor_definition": "monitor_definition", + "tags": "tags", + "template_variables": "template_variables", + "title": "title", + "version": "version", + } + read_only_vars = { + "created", + "modified", + "version", + } + + def __init__(self_, created: Union[datetime, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, modified: Union[datetime, UnsetType]=unset, monitor_definition: Union[Dict[str, Any], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, template_variables: Union[List[MonitorUserTemplateTemplateVariablesItems], UnsetType]=unset, title: Union[str, UnsetType]=unset, version: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Attributes for a monitor user template. + + :param created: The created timestamp of the template. + :type created: datetime, optional + + :param description: A brief description of the monitor user template. + :type description: str, none_type, optional + + :param modified: The last modified timestamp. When the template version was created. + :type modified: datetime, optional + + :param monitor_definition: A valid monitor definition in the same format as the `V1 Monitor API `_. + :type monitor_definition: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tags: The definition of ``MonitorUserTemplateTags`` object. + :type tags: [str], optional + + :param template_variables: The definition of ``MonitorUserTemplateTemplateVariables`` object. + :type template_variables: [MonitorUserTemplateTemplateVariablesItems], optional + + :param title: The title of the monitor user template. + :type title: str, optional + + :param version: The version of the monitor user template. + :type version: int, none_type, optional + """ + if created is not unset: + kwargs["created"] = created + if description is not unset: + kwargs["description"] = description + if modified is not unset: + kwargs["modified"] = modified + if monitor_definition is not unset: + kwargs["monitor_definition"] = monitor_definition + if tags is not unset: + kwargs["tags"] = tags + if template_variables is not unset: + kwargs["template_variables"] = template_variables + if title is not unset: + kwargs["title"] = title + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_user_template_response_data.py b/datadog_api_client/v2/model/monitor_user_template_response_data.py new file mode 100644 index 0000000000..45414fd6ad --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_response_attributes import MonitorUserTemplateResponseAttributes + from datadog_api_client.v2.model.monitor_user_template_resource_type import MonitorUserTemplateResourceType + +class MonitorUserTemplateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_response_attributes import MonitorUserTemplateResponseAttributes + from datadog_api_client.v2.model.monitor_user_template_resource_type import MonitorUserTemplateResourceType + return { + "attributes": (MonitorUserTemplateResponseAttributes,), + "id": (str,), + "type": (MonitorUserTemplateResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MonitorUserTemplateResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MonitorUserTemplateResourceType, UnsetType]=unset, **kwargs): + """ + Monitor user template list response data. + + :param attributes: Attributes for a monitor user template. + :type attributes: MonitorUserTemplateResponseAttributes, optional + + :param id: The unique identifier. + :type id: str, optional + + :param type: Monitor user template resource type. + :type type: MonitorUserTemplateResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_user_template_response_data_with_versions.py b/datadog_api_client/v2/model/monitor_user_template_response_data_with_versions.py new file mode 100644 index 0000000000..822c67bf25 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_response_data_with_versions.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template import MonitorUserTemplate + from datadog_api_client.v2.model.monitor_user_template_resource_type import MonitorUserTemplateResourceType + +class MonitorUserTemplateResponseDataWithVersions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template import MonitorUserTemplate + from datadog_api_client.v2.model.monitor_user_template_resource_type import MonitorUserTemplateResourceType + return { + "attributes": (MonitorUserTemplate,), + "id": (str,), + "type": (MonitorUserTemplateResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MonitorUserTemplate, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[MonitorUserTemplateResourceType, UnsetType]=unset, **kwargs): + """ + Monitor user template data. + + :param attributes: A monitor user template object. + :type attributes: MonitorUserTemplate, optional + + :param id: The unique identifier. + :type id: str, optional + + :param type: Monitor user template resource type. + :type type: MonitorUserTemplateResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monitor_user_template_template_variables_items.py b/datadog_api_client/v2/model/monitor_user_template_template_variables_items.py new file mode 100644 index 0000000000..a07a292a6c --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_template_variables_items.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonitorUserTemplateTemplateVariablesItems(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "available_values": ([str],), + "defaults": ([str],), + "name": (str,), + "tag_key": (str,), + } + attribute_map = { + "available_values": "available_values", + "defaults": "defaults", + "name": "name", + "tag_key": "tag_key", + } + + def __init__(self_, name: str, available_values: Union[List[str], UnsetType]=unset, defaults: Union[List[str], UnsetType]=unset, tag_key: Union[str, UnsetType]=unset, **kwargs): + """ + List of objects representing template variables on the monitor which can have selectable values. + + :param available_values: Available values for the variable. + :type available_values: [str], optional + + :param defaults: Default values of the template variable. + :type defaults: [str], optional + + :param name: The name of the template variable. + :type name: str + + :param tag_key: The tag key associated with the variable. This works the same as dashboard template variables. + :type tag_key: str, optional + """ + if available_values is not unset: + kwargs["available_values"] = available_values + if defaults is not unset: + kwargs["defaults"] = defaults + if tag_key is not unset: + kwargs["tag_key"] = tag_key + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/monitor_user_template_update_data.py b/datadog_api_client/v2/model/monitor_user_template_update_data.py new file mode 100644 index 0000000000..e107989598 --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_request_attributes import MonitorUserTemplateRequestAttributes + from datadog_api_client.v2.model.monitor_user_template_resource_type import MonitorUserTemplateResourceType + +class MonitorUserTemplateUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_request_attributes import MonitorUserTemplateRequestAttributes + from datadog_api_client.v2.model.monitor_user_template_resource_type import MonitorUserTemplateResourceType + return { + "attributes": (MonitorUserTemplateRequestAttributes,), + "id": (str,), + "type": (MonitorUserTemplateResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: MonitorUserTemplateRequestAttributes, id: str, type: MonitorUserTemplateResourceType, **kwargs): + """ + Monitor user template data. + + :param attributes: Attributes for a monitor user template. + :type attributes: MonitorUserTemplateRequestAttributes + + :param id: The unique identifier. + :type id: str + + :param type: Monitor user template resource type. + :type type: MonitorUserTemplateResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/monitor_user_template_update_request.py b/datadog_api_client/v2/model/monitor_user_template_update_request.py new file mode 100644 index 0000000000..993a2741df --- /dev/null +++ b/datadog_api_client/v2/model/monitor_user_template_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_update_data import MonitorUserTemplateUpdateData + +class MonitorUserTemplateUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_update_data import MonitorUserTemplateUpdateData + return { + "data": (MonitorUserTemplateUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MonitorUserTemplateUpdateData, **kwargs): + """ + Request for creating a new monitor user template version. + + :param data: Monitor user template data. + :type data: MonitorUserTemplateUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/monthly_cost_attribution_attributes.py b/datadog_api_client/v2/model/monthly_cost_attribution_attributes.py new file mode 100644 index 0000000000..0b9c3e2aeb --- /dev/null +++ b/datadog_api_client/v2/model/monthly_cost_attribution_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_attribution_tag_names import CostAttributionTagNames + +class MonthlyCostAttributionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_attribution_tag_names import CostAttributionTagNames + return { + "month": (datetime,), + "org_name": (str,), + "public_id": (str,), + "tag_config_source": (str,), + "tags": (CostAttributionTagNames,), + "updated_at": (str,), + "values": (dict,), + } + attribute_map = { + "month": "month", + "org_name": "org_name", + "public_id": "public_id", + "tag_config_source": "tag_config_source", + "tags": "tags", + "updated_at": "updated_at", + "values": "values", + } + + def __init__(self_, month: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, tag_config_source: Union[str, UnsetType]=unset, tags: Union[CostAttributionTagNames, none_type, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, values: Union[dict, UnsetType]=unset, **kwargs): + """ + Cost Attribution by Tag for a given organization. + + :param month: Datetime in ISO-8601 format, UTC, precise to hour: ``[YYYY-MM-DDThh]``. + :type month: datetime, optional + + :param org_name: The name of the organization. + :type org_name: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param tag_config_source: The source of the cost attribution tag configuration and the selected tags in the format ``::://////``. + :type tag_config_source: str, optional + + :param tags: Tag keys and values. + A ``null`` value here means that the requested tag breakdown cannot be applied because it does not match the `tags + configured for usage attribution `_. + In this scenario the API returns the total cost, not broken down by tags. + :type tags: CostAttributionTagNames, none_type, optional + + :param updated_at: Shows the most recent hour in the current months for all organizations for which all costs were calculated. + :type updated_at: str, optional + + :param values: Fields in Cost Attribution by tag(s). Example: ``infra_host_on_demand_cost`` , ``infra_host_committed_cost`` , ``infra_host_total_cost`` , ``infra_host_percentage_in_org`` , ``infra_host_percentage_in_account``. + :type values: dict, optional + """ + if month is not unset: + kwargs["month"] = month + if org_name is not unset: + kwargs["org_name"] = org_name + if public_id is not unset: + kwargs["public_id"] = public_id + if tag_config_source is not unset: + kwargs["tag_config_source"] = tag_config_source + if tags is not unset: + kwargs["tags"] = tags + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monthly_cost_attribution_body.py b/datadog_api_client/v2/model/monthly_cost_attribution_body.py new file mode 100644 index 0000000000..42311c30e6 --- /dev/null +++ b/datadog_api_client/v2/model/monthly_cost_attribution_body.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monthly_cost_attribution_attributes import MonthlyCostAttributionAttributes + from datadog_api_client.v2.model.cost_attribution_type import CostAttributionType + +class MonthlyCostAttributionBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monthly_cost_attribution_attributes import MonthlyCostAttributionAttributes + from datadog_api_client.v2.model.cost_attribution_type import CostAttributionType + return { + "attributes": (MonthlyCostAttributionAttributes,), + "id": (str,), + "type": (CostAttributionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[MonthlyCostAttributionAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[CostAttributionType, UnsetType]=unset, **kwargs): + """ + Cost data. + + :param attributes: Cost Attribution by Tag for a given organization. + :type attributes: MonthlyCostAttributionAttributes, optional + + :param id: Unique ID of the response. + :type id: str, optional + + :param type: Type of cost attribution data. + :type type: CostAttributionType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monthly_cost_attribution_meta.py b/datadog_api_client/v2/model/monthly_cost_attribution_meta.py new file mode 100644 index 0000000000..be6a5d4047 --- /dev/null +++ b/datadog_api_client/v2/model/monthly_cost_attribution_meta.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cost_attribution_aggregates_body import CostAttributionAggregatesBody + from datadog_api_client.v2.model.monthly_cost_attribution_pagination import MonthlyCostAttributionPagination + +class MonthlyCostAttributionMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cost_attribution_aggregates_body import CostAttributionAggregatesBody + from datadog_api_client.v2.model.monthly_cost_attribution_pagination import MonthlyCostAttributionPagination + return { + "aggregates": ([CostAttributionAggregatesBody],), + "pagination": (MonthlyCostAttributionPagination,), + } + attribute_map = { + "aggregates": "aggregates", + "pagination": "pagination", + } + + def __init__(self_, aggregates: Union[List[CostAttributionAggregatesBody], UnsetType]=unset, pagination: Union[MonthlyCostAttributionPagination, UnsetType]=unset, **kwargs): + """ + The object containing document metadata. + + :param aggregates: An array of available aggregates. + :type aggregates: [CostAttributionAggregatesBody], optional + + :param pagination: The metadata for the current pagination. + :type pagination: MonthlyCostAttributionPagination, optional + """ + if aggregates is not unset: + kwargs["aggregates"] = aggregates + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monthly_cost_attribution_pagination.py b/datadog_api_client/v2/model/monthly_cost_attribution_pagination.py new file mode 100644 index 0000000000..fe1ec66c12 --- /dev/null +++ b/datadog_api_client/v2/model/monthly_cost_attribution_pagination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MonthlyCostAttributionPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_record_id": (str, none_type), + } + attribute_map = { + "next_record_id": "next_record_id", + } + + def __init__(self_, next_record_id: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The metadata for the current pagination. + + :param next_record_id: The cursor to use to get the next results, if any. To make the next request, use the same parameters with the addition of the ``next_record_id``. + :type next_record_id: str, none_type, optional + """ + if next_record_id is not unset: + kwargs["next_record_id"] = next_record_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/monthly_cost_attribution_response.py b/datadog_api_client/v2/model/monthly_cost_attribution_response.py new file mode 100644 index 0000000000..4d541a60c1 --- /dev/null +++ b/datadog_api_client/v2/model/monthly_cost_attribution_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monthly_cost_attribution_body import MonthlyCostAttributionBody + from datadog_api_client.v2.model.monthly_cost_attribution_meta import MonthlyCostAttributionMeta + +class MonthlyCostAttributionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monthly_cost_attribution_body import MonthlyCostAttributionBody + from datadog_api_client.v2.model.monthly_cost_attribution_meta import MonthlyCostAttributionMeta + return { + "data": ([MonthlyCostAttributionBody],), + "meta": (MonthlyCostAttributionMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[MonthlyCostAttributionBody], UnsetType]=unset, meta: Union[MonthlyCostAttributionMeta, UnsetType]=unset, **kwargs): + """ + Response containing the monthly cost attribution by tag(s). + + :param data: Response containing cost attribution. + :type data: [MonthlyCostAttributionBody], optional + + :param meta: The object containing document metadata. + :type meta: MonthlyCostAttributionMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ms_teams_integration_metadata.py b/datadog_api_client/v2/model/ms_teams_integration_metadata.py new file mode 100644 index 0000000000..bf62b0d23c --- /dev/null +++ b/datadog_api_client/v2/model/ms_teams_integration_metadata.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ms_teams_integration_metadata_teams_item import MSTeamsIntegrationMetadataTeamsItem + +class MSTeamsIntegrationMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ms_teams_integration_metadata_teams_item import MSTeamsIntegrationMetadataTeamsItem + return { + "teams": ([MSTeamsIntegrationMetadataTeamsItem],), + } + attribute_map = { + "teams": "teams", + } + + def __init__(self_, teams: List[MSTeamsIntegrationMetadataTeamsItem], **kwargs): + """ + Incident integration metadata for the Microsoft Teams integration. + + :param teams: Array of Microsoft Teams in this integration metadata. + :type teams: [MSTeamsIntegrationMetadataTeamsItem] + """ + super().__init__(kwargs) + + + self_.teams = teams diff --git a/datadog_api_client/v2/model/ms_teams_integration_metadata_teams_item.py b/datadog_api_client/v2/model/ms_teams_integration_metadata_teams_item.py new file mode 100644 index 0000000000..3766e7b896 --- /dev/null +++ b/datadog_api_client/v2/model/ms_teams_integration_metadata_teams_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class MSTeamsIntegrationMetadataTeamsItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ms_channel_id": (str,), + "ms_channel_name": (str,), + "ms_tenant_id": (str,), + "redirect_url": (str,), + } + attribute_map = { + "ms_channel_id": "ms_channel_id", + "ms_channel_name": "ms_channel_name", + "ms_tenant_id": "ms_tenant_id", + "redirect_url": "redirect_url", + } + + def __init__(self_, ms_channel_id: str, ms_channel_name: str, ms_tenant_id: str, redirect_url: str, **kwargs): + """ + Item in the Microsoft Teams integration metadata teams array. + + :param ms_channel_id: Microsoft Teams channel ID. + :type ms_channel_id: str + + :param ms_channel_name: Microsoft Teams channel name. + :type ms_channel_name: str + + :param ms_tenant_id: Microsoft Teams tenant ID. + :type ms_tenant_id: str + + :param redirect_url: URL redirecting to the Microsoft Teams channel. + :type redirect_url: str + """ + super().__init__(kwargs) + + + self_.ms_channel_id = ms_channel_id + self_.ms_channel_name = ms_channel_name + self_.ms_tenant_id = ms_tenant_id + self_.redirect_url = redirect_url diff --git a/datadog_api_client/v2/model/mute_data_type.py b/datadog_api_client/v2/model/mute_data_type.py new file mode 100644 index 0000000000..06bba0d7ca --- /dev/null +++ b/datadog_api_client/v2/model/mute_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MuteDataType(ModelSimple): + """ + Mute resource type. + + :param value: If omitted defaults to "mute". Must be one of ["mute"]. + :type value: str + """ + + allowed_values = { + "mute", + } + MUTE: ClassVar["MuteDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MuteDataType.MUTE = MuteDataType("mute") diff --git a/datadog_api_client/v2/model/mute_findings_mute_attributes.py b/datadog_api_client/v2/model/mute_findings_mute_attributes.py new file mode 100644 index 0000000000..e4c29c2984 --- /dev/null +++ b/datadog_api_client/v2/model/mute_findings_mute_attributes.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_findings_reason import MuteFindingsReason + +class MuteFindingsMuteAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_findings_reason import MuteFindingsReason + return { + "description": (str,), + "expire_at": (int,), + "is_muted": (bool,), + "reason": (MuteFindingsReason,), + } + attribute_map = { + "description": "description", + "expire_at": "expire_at", + "is_muted": "is_muted", + "reason": "reason", + } + + def __init__(self_, is_muted: bool, reason: MuteFindingsReason, description: Union[str, UnsetType]=unset, expire_at: Union[int, UnsetType]=unset, **kwargs): + """ + Mute properties to apply to the findings. + + :param description: Additional information about the reason why the findings are muted or unmuted. This field has a limit of 280 characters. + :type description: str, optional + + :param expire_at: The expiration date of the mute action (Unix ms). It must be set to a value greater than the current timestamp. If this field is not provided, the findings remain muted indefinitely. + :type expire_at: int, optional + + :param is_muted: Whether the findings should be muted or unmuted. + :type is_muted: bool + + :param reason: The reason why the findings are muted or unmuted. + :type reason: MuteFindingsReason + """ + if description is not unset: + kwargs["description"] = description + if expire_at is not unset: + kwargs["expire_at"] = expire_at + super().__init__(kwargs) + + + self_.is_muted = is_muted + self_.reason = reason diff --git a/datadog_api_client/v2/model/mute_findings_reason.py b/datadog_api_client/v2/model/mute_findings_reason.py new file mode 100644 index 0000000000..6f66b3f53b --- /dev/null +++ b/datadog_api_client/v2/model/mute_findings_reason.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MuteFindingsReason(ModelSimple): + """ + The reason why the findings are muted or unmuted. + + :param value: Must be one of ["PENDING_FIX", "FALSE_POSITIVE", "OTHER", "NO_FIX", "DUPLICATE", "RISK_ACCEPTED", "NO_PENDING_FIX", "HUMAN_ERROR", "NO_LONGER_ACCEPTED_RISK"]. + :type value: str + """ + + allowed_values = { + "PENDING_FIX", + "FALSE_POSITIVE", + "OTHER", + "NO_FIX", + "DUPLICATE", + "RISK_ACCEPTED", + "NO_PENDING_FIX", + "HUMAN_ERROR", + "NO_LONGER_ACCEPTED_RISK", + } + PENDING_FIX: ClassVar["MuteFindingsReason"] + FALSE_POSITIVE: ClassVar["MuteFindingsReason"] + OTHER: ClassVar["MuteFindingsReason"] + NO_FIX: ClassVar["MuteFindingsReason"] + DUPLICATE: ClassVar["MuteFindingsReason"] + RISK_ACCEPTED: ClassVar["MuteFindingsReason"] + NO_PENDING_FIX: ClassVar["MuteFindingsReason"] + HUMAN_ERROR: ClassVar["MuteFindingsReason"] + NO_LONGER_ACCEPTED_RISK: ClassVar["MuteFindingsReason"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MuteFindingsReason.PENDING_FIX = MuteFindingsReason("PENDING_FIX") +MuteFindingsReason.FALSE_POSITIVE = MuteFindingsReason("FALSE_POSITIVE") +MuteFindingsReason.OTHER = MuteFindingsReason("OTHER") +MuteFindingsReason.NO_FIX = MuteFindingsReason("NO_FIX") +MuteFindingsReason.DUPLICATE = MuteFindingsReason("DUPLICATE") +MuteFindingsReason.RISK_ACCEPTED = MuteFindingsReason("RISK_ACCEPTED") +MuteFindingsReason.NO_PENDING_FIX = MuteFindingsReason("NO_PENDING_FIX") +MuteFindingsReason.HUMAN_ERROR = MuteFindingsReason("HUMAN_ERROR") +MuteFindingsReason.NO_LONGER_ACCEPTED_RISK = MuteFindingsReason("NO_LONGER_ACCEPTED_RISK") diff --git a/datadog_api_client/v2/model/mute_findings_request.py b/datadog_api_client/v2/model/mute_findings_request.py new file mode 100644 index 0000000000..f87935394c --- /dev/null +++ b/datadog_api_client/v2/model/mute_findings_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_findings_request_data import MuteFindingsRequestData + +class MuteFindingsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_findings_request_data import MuteFindingsRequestData + return { + "data": (MuteFindingsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MuteFindingsRequestData, **kwargs): + """ + Request to mute or unmute security findings. + + :param data: Data of the mute request. + :type data: MuteFindingsRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/mute_findings_request_data.py b/datadog_api_client/v2/model/mute_findings_request_data.py new file mode 100644 index 0000000000..72319889f2 --- /dev/null +++ b/datadog_api_client/v2/model/mute_findings_request_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_findings_request_data_attributes import MuteFindingsRequestDataAttributes + from datadog_api_client.v2.model.mute_findings_request_data_relationships import MuteFindingsRequestDataRelationships + from datadog_api_client.v2.model.mute_data_type import MuteDataType + +class MuteFindingsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_findings_request_data_attributes import MuteFindingsRequestDataAttributes + from datadog_api_client.v2.model.mute_findings_request_data_relationships import MuteFindingsRequestDataRelationships + from datadog_api_client.v2.model.mute_data_type import MuteDataType + return { + "attributes": (MuteFindingsRequestDataAttributes,), + "id": (str,), + "relationships": (MuteFindingsRequestDataRelationships,), + "type": (MuteDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: MuteFindingsRequestDataAttributes, relationships: MuteFindingsRequestDataRelationships, type: MuteDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data of the mute request. + + :param attributes: Attributes of the mute request. + :type attributes: MuteFindingsRequestDataAttributes + + :param id: Unique identifier of the mute request. + :type id: str, optional + + :param relationships: Relationships of the mute request. + :type relationships: MuteFindingsRequestDataRelationships + + :param type: Mute resource type. + :type type: MuteDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/mute_findings_request_data_attributes.py b/datadog_api_client/v2/model/mute_findings_request_data_attributes.py new file mode 100644 index 0000000000..9738afe2e1 --- /dev/null +++ b/datadog_api_client/v2/model/mute_findings_request_data_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_findings_mute_attributes import MuteFindingsMuteAttributes + +class MuteFindingsRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_findings_mute_attributes import MuteFindingsMuteAttributes + return { + "mute": (MuteFindingsMuteAttributes,), + } + attribute_map = { + "mute": "mute", + } + + def __init__(self_, mute: MuteFindingsMuteAttributes, **kwargs): + """ + Attributes of the mute request. + + :param mute: Mute properties to apply to the findings. + :type mute: MuteFindingsMuteAttributes + """ + super().__init__(kwargs) + + + self_.mute = mute diff --git a/datadog_api_client/v2/model/mute_findings_request_data_relationships.py b/datadog_api_client/v2/model/mute_findings_request_data_relationships.py new file mode 100644 index 0000000000..59a5ff53bc --- /dev/null +++ b/datadog_api_client/v2/model/mute_findings_request_data_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.findings import Findings + +class MuteFindingsRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.findings import Findings + return { + "findings": (Findings,), + } + attribute_map = { + "findings": "findings", + } + + def __init__(self_, findings: Findings, **kwargs): + """ + Relationships of the mute request. + + :param findings: A list of security findings. + :type findings: Findings + """ + super().__init__(kwargs) + + + self_.findings = findings diff --git a/datadog_api_client/v2/model/mute_findings_response.py b/datadog_api_client/v2/model/mute_findings_response.py new file mode 100644 index 0000000000..55e4b44c47 --- /dev/null +++ b/datadog_api_client/v2/model/mute_findings_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_findings_response_data import MuteFindingsResponseData + +class MuteFindingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_findings_response_data import MuteFindingsResponseData + return { + "data": (MuteFindingsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[MuteFindingsResponseData, UnsetType]=unset, **kwargs): + """ + Response for the mute or unmute request. + + :param data: Data of the mute response. + :type data: MuteFindingsResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/mute_findings_response_data.py b/datadog_api_client/v2/model/mute_findings_response_data.py new file mode 100644 index 0000000000..d41d5fd547 --- /dev/null +++ b/datadog_api_client/v2/model/mute_findings_response_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_data_type import MuteDataType + +class MuteFindingsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_data_type import MuteDataType + return { + "id": (str,), + "type": (MuteDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: MuteDataType, **kwargs): + """ + Data of the mute response. + + :param id: Unique identifier of the mute request. + :type id: str + + :param type: Mute resource type. + :type type: MuteDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/mute_reason.py b/datadog_api_client/v2/model/mute_reason.py new file mode 100644 index 0000000000..25d328c72c --- /dev/null +++ b/datadog_api_client/v2/model/mute_reason.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MuteReason(ModelSimple): + """ + The reason for muting a security finding. + + :param value: Must be one of ["duplicate", "false_positive", "no_fix", "other", "pending_fix", "risk_accepted"]. + :type value: str + """ + + allowed_values = { + "duplicate", + "false_positive", + "no_fix", + "other", + "pending_fix", + "risk_accepted", + } + DUPLICATE: ClassVar["MuteReason"] + FALSE_POSITIVE: ClassVar["MuteReason"] + NO_FIX: ClassVar["MuteReason"] + OTHER: ClassVar["MuteReason"] + PENDING_FIX: ClassVar["MuteReason"] + RISK_ACCEPTED: ClassVar["MuteReason"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MuteReason.DUPLICATE = MuteReason("duplicate") +MuteReason.FALSE_POSITIVE = MuteReason("false_positive") +MuteReason.NO_FIX = MuteReason("no_fix") +MuteReason.OTHER = MuteReason("other") +MuteReason.PENDING_FIX = MuteReason("pending_fix") +MuteReason.RISK_ACCEPTED = MuteReason("risk_accepted") diff --git a/datadog_api_client/v2/model/mute_rule_action.py b/datadog_api_client/v2/model/mute_rule_action.py new file mode 100644 index 0000000000..e20139d5ba --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_action.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_reason import MuteReason + +class MuteRuleAction(ModelNormal): + validations = { + "reason_description": { + "max_length": 20000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_reason import MuteReason + return { + "expire_at": (int,), + "reason": (MuteReason,), + "reason_description": (str,), + } + attribute_map = { + "expire_at": "expire_at", + "reason": "reason", + "reason_description": "reason_description", + } + + def __init__(self_, reason: MuteReason, expire_at: Union[int, UnsetType]=unset, reason_description: Union[str, UnsetType]=unset, **kwargs): + """ + The action to take when the mute rule matches a finding. + + :param expire_at: The Unix timestamp in milliseconds at which the mute expires. If omitted, the mute does not expire. + :type expire_at: int, optional + + :param reason: The reason for muting a security finding. + :type reason: MuteReason + + :param reason_description: An optional description providing more context for the mute reason. + :type reason_description: str, optional + """ + if expire_at is not unset: + kwargs["expire_at"] = expire_at + if reason_description is not unset: + kwargs["reason_description"] = reason_description + super().__init__(kwargs) + + + self_.reason = reason diff --git a/datadog_api_client/v2/model/mute_rule_attributes_create.py b/datadog_api_client/v2/model/mute_rule_attributes_create.py new file mode 100644 index 0000000000..679342ec30 --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_attributes_create.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_action import MuteRuleAction + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + +class MuteRuleAttributesCreate(ModelNormal): + validations = { + "name": { + "max_length": 255, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_action import MuteRuleAction + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + return { + "action": (MuteRuleAction,), + "enabled": (bool,), + "name": (str,), + "rule": (AutomationRuleScope,), + } + attribute_map = { + "action": "action", + "enabled": "enabled", + "name": "name", + "rule": "rule", + } + + def __init__(self_, action: MuteRuleAction, name: str, rule: AutomationRuleScope, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a mute rule. + + :param action: The action to take when the mute rule matches a finding. + :type action: MuteRuleAction + + :param enabled: Whether the mute rule is enabled. + :type enabled: bool, optional + + :param name: The name of the mute rule. + :type name: str + + :param rule: Defines the scope of findings to which the automation rule applies. + :type rule: AutomationRuleScope + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + + self_.action = action + self_.name = name + self_.rule = rule diff --git a/datadog_api_client/v2/model/mute_rule_attributes_response.py b/datadog_api_client/v2/model/mute_rule_attributes_response.py new file mode 100644 index 0000000000..d47a876f5f --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_attributes_response.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_action import MuteRuleAction + from datadog_api_client.v2.model.automation_rule_created_by import AutomationRuleCreatedBy + from datadog_api_client.v2.model.automation_rule_modified_by import AutomationRuleModifiedBy + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + +class MuteRuleAttributesResponse(ModelNormal): + validations = { + "name": { + "max_length": 255, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_action import MuteRuleAction + from datadog_api_client.v2.model.automation_rule_created_by import AutomationRuleCreatedBy + from datadog_api_client.v2.model.automation_rule_modified_by import AutomationRuleModifiedBy + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + return { + "action": (MuteRuleAction,), + "created_at": (int,), + "created_by": (AutomationRuleCreatedBy,), + "enabled": (bool,), + "modified_at": (int,), + "modified_by": (AutomationRuleModifiedBy,), + "name": (str,), + "rule": (AutomationRuleScope,), + } + attribute_map = { + "action": "action", + "created_at": "created_at", + "created_by": "created_by", + "enabled": "enabled", + "modified_at": "modified_at", + "modified_by": "modified_by", + "name": "name", + "rule": "rule", + } + + def __init__(self_, action: MuteRuleAction, created_at: int, created_by: AutomationRuleCreatedBy, enabled: bool, modified_at: int, modified_by: AutomationRuleModifiedBy, name: str, rule: AutomationRuleScope, **kwargs): + """ + Attributes of a mute rule returned by the API. + + :param action: The action to take when the mute rule matches a finding. + :type action: MuteRuleAction + + :param created_at: The Unix timestamp in milliseconds when the rule was created. + :type created_at: int + + :param created_by: The user or Datadog system who created the rule. + :type created_by: AutomationRuleCreatedBy + + :param enabled: Whether the mute rule is enabled. + :type enabled: bool + + :param modified_at: The Unix timestamp in milliseconds when the rule was last modified. + :type modified_at: int + + :param modified_by: The user or Datadog system who last modified the rule. + :type modified_by: AutomationRuleModifiedBy + + :param name: The name of the mute rule. + :type name: str + + :param rule: Defines the scope of findings to which the automation rule applies. + :type rule: AutomationRuleScope + """ + super().__init__(kwargs) + + + self_.action = action + self_.created_at = created_at + self_.created_by = created_by + self_.enabled = enabled + self_.modified_at = modified_at + self_.modified_by = modified_by + self_.name = name + self_.rule = rule diff --git a/datadog_api_client/v2/model/mute_rule_create_request.py b/datadog_api_client/v2/model/mute_rule_create_request.py new file mode 100644 index 0000000000..131f16fe90 --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_data_create import MuteRuleDataCreate + +class MuteRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_data_create import MuteRuleDataCreate + return { + "data": (MuteRuleDataCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MuteRuleDataCreate, **kwargs): + """ + The body of a mute rule create request. + + :param data: The data object for a mute rule create or update request. + :type data: MuteRuleDataCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/mute_rule_data_create.py b/datadog_api_client/v2/model/mute_rule_data_create.py new file mode 100644 index 0000000000..7339994ae0 --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_data_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_attributes_create import MuteRuleAttributesCreate + from datadog_api_client.v2.model.mute_rule_type import MuteRuleType + +class MuteRuleDataCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_attributes_create import MuteRuleAttributesCreate + from datadog_api_client.v2.model.mute_rule_type import MuteRuleType + return { + "attributes": (MuteRuleAttributesCreate,), + "type": (MuteRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: MuteRuleAttributesCreate, type: MuteRuleType, **kwargs): + """ + The data object for a mute rule create or update request. + + :param attributes: Attributes for creating or updating a mute rule. + :type attributes: MuteRuleAttributesCreate + + :param type: The JSON:API type for mute rules. + :type type: MuteRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/mute_rule_data_response.py b/datadog_api_client/v2/model/mute_rule_data_response.py new file mode 100644 index 0000000000..90f0cd6cc0 --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_attributes_response import MuteRuleAttributesResponse + from datadog_api_client.v2.model.mute_rule_type import MuteRuleType + +class MuteRuleDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_attributes_response import MuteRuleAttributesResponse + from datadog_api_client.v2.model.mute_rule_type import MuteRuleType + return { + "attributes": (MuteRuleAttributesResponse,), + "id": (UUID,), + "type": (MuteRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: MuteRuleAttributesResponse, id: UUID, type: MuteRuleType, **kwargs): + """ + The data object for a mute rule returned by the API. + + :param attributes: Attributes of a mute rule returned by the API. + :type attributes: MuteRuleAttributesResponse + + :param id: The ID of the mute rule. + :type id: UUID + + :param type: The JSON:API type for mute rules. + :type type: MuteRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/mute_rule_reorder_item.py b/datadog_api_client/v2/model/mute_rule_reorder_item.py new file mode 100644 index 0000000000..d8551cbade --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_reorder_item.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_type import MuteRuleType + +class MuteRuleReorderItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_type import MuteRuleType + return { + "id": (UUID,), + "type": (MuteRuleType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: MuteRuleType, **kwargs): + """ + A reference to a mute rule used for reordering. + + :param id: The ID of the automation rule. + :type id: UUID + + :param type: The JSON:API type for mute rules. + :type type: MuteRuleType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/mute_rule_reorder_request.py b/datadog_api_client/v2/model/mute_rule_reorder_request.py new file mode 100644 index 0000000000..632fb7b5bc --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_reorder_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_reorder_item import MuteRuleReorderItem + +class MuteRuleReorderRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_reorder_item import MuteRuleReorderItem + return { + "data": ([MuteRuleReorderItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[MuteRuleReorderItem], **kwargs): + """ + The body of the mute rule reorder request. + + :param data: The ordered list of all mute rules; every rule must be included. + :type data: [MuteRuleReorderItem] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/mute_rule_response.py b/datadog_api_client/v2/model/mute_rule_response.py new file mode 100644 index 0000000000..6fd525f26a --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_data_response import MuteRuleDataResponse + +class MuteRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_data_response import MuteRuleDataResponse + return { + "data": (MuteRuleDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MuteRuleDataResponse, **kwargs): + """ + A single mute rule response. + + :param data: The data object for a mute rule returned by the API. + :type data: MuteRuleDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/mute_rule_type.py b/datadog_api_client/v2/model/mute_rule_type.py new file mode 100644 index 0000000000..1e415bf2af --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class MuteRuleType(ModelSimple): + """ + The JSON:API type for mute rules. + + :param value: If omitted defaults to "mute_rules". Must be one of ["mute_rules"]. + :type value: str + """ + + allowed_values = { + "mute_rules", + } + MUTE_RULES: ClassVar["MuteRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +MuteRuleType.MUTE_RULES = MuteRuleType("mute_rules") diff --git a/datadog_api_client/v2/model/mute_rule_update_request.py b/datadog_api_client/v2/model/mute_rule_update_request.py new file mode 100644 index 0000000000..0ec75290ac --- /dev/null +++ b/datadog_api_client/v2/model/mute_rule_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_data_create import MuteRuleDataCreate + +class MuteRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_data_create import MuteRuleDataCreate + return { + "data": (MuteRuleDataCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: MuteRuleDataCreate, **kwargs): + """ + The body of a mute rule update request. + + :param data: The data object for a mute rule create or update request. + :type data: MuteRuleDataCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/mute_rules_response.py b/datadog_api_client/v2/model/mute_rules_response.py new file mode 100644 index 0000000000..18937f26d1 --- /dev/null +++ b/datadog_api_client/v2/model/mute_rules_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.mute_rule_data_response import MuteRuleDataResponse + from datadog_api_client.v2.model.security_automation_rules_links import SecurityAutomationRulesLinks + from datadog_api_client.v2.model.security_automation_rules_meta import SecurityAutomationRulesMeta + +class MuteRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.mute_rule_data_response import MuteRuleDataResponse + from datadog_api_client.v2.model.security_automation_rules_links import SecurityAutomationRulesLinks + from datadog_api_client.v2.model.security_automation_rules_meta import SecurityAutomationRulesMeta + return { + "data": ([MuteRuleDataResponse],), + "links": (SecurityAutomationRulesLinks,), + "meta": (SecurityAutomationRulesMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[MuteRuleDataResponse], links: SecurityAutomationRulesLinks, meta: SecurityAutomationRulesMeta, **kwargs): + """ + A list of mute rules with pagination metadata. + + :param data: A list of mute rule data objects. + :type data: [MuteRuleDataResponse] + + :param links: Pagination links for the list of automation rules. + :type links: SecurityAutomationRulesLinks + + :param meta: Metadata for the list of automation rules. + :type meta: SecurityAutomationRulesMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.links = links + self_.meta = meta diff --git a/datadog_api_client/v2/model/ndk_sourcemap_attributes.py b/datadog_api_client/v2/model/ndk_sourcemap_attributes.py new file mode 100644 index 0000000000..392a820f82 --- /dev/null +++ b/datadog_api_client/v2/model/ndk_sourcemap_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NDKSourcemapAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "arch": (str,), + "build_id": (str,), + "created_at": (datetime,), + "file_name": (str,), + "mapkind": (str,), + "size": (int,), + } + attribute_map = { + "arch": "arch", + "build_id": "build_id", + "created_at": "created_at", + "file_name": "file_name", + "mapkind": "mapkind", + "size": "size", + } + + def __init__(self_, created_at: datetime, mapkind: str, size: int, arch: Union[str, UnsetType]=unset, build_id: Union[str, UnsetType]=unset, file_name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an Android NDK symbol file. + + :param arch: The target CPU architecture. + :type arch: str, optional + + :param build_id: The build identifier (UUID format). + :type build_id: str, optional + + :param created_at: The timestamp when the symbol file was created. + :type created_at: datetime + + :param file_name: The NDK library file name. + :type file_name: str, optional + + :param mapkind: The type of source map. + :type mapkind: str + + :param size: The size of the symbol file in bytes. + :type size: int + """ + if arch is not unset: + kwargs["arch"] = arch + if build_id is not unset: + kwargs["build_id"] = build_id + if file_name is not unset: + kwargs["file_name"] = file_name + super().__init__(kwargs) + + + self_.created_at = created_at + self_.mapkind = mapkind + self_.size = size diff --git a/datadog_api_client/v2/model/ndk_sourcemap_data.py b/datadog_api_client/v2/model/ndk_sourcemap_data.py new file mode 100644 index 0000000000..4c8cb26543 --- /dev/null +++ b/datadog_api_client/v2/model/ndk_sourcemap_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ndk_sourcemap_attributes import NDKSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + +class NDKSourcemapData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ndk_sourcemap_attributes import NDKSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + return { + "attributes": (NDKSourcemapAttributes,), + "id": (str,), + "type": (SourcemapDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: NDKSourcemapAttributes, id: str, type: SourcemapDataType, **kwargs): + """ + Android NDK symbol file data object. + + :param attributes: Attributes of an Android NDK symbol file. + :type attributes: NDKSourcemapAttributes + + :param id: The unique identifier of the source map. + :type id: str + + :param type: The resource type for source map objects. + :type type: SourcemapDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/network_health_insight.py b/datadog_api_client/v2/model/network_health_insight.py new file mode 100644 index 0000000000..e8c5764b5a --- /dev/null +++ b/datadog_api_client/v2/model/network_health_insight.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.network_health_insight_attributes import NetworkHealthInsightAttributes + from datadog_api_client.v2.model.network_health_insights_type import NetworkHealthInsightsType + +class NetworkHealthInsight(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.network_health_insight_attributes import NetworkHealthInsightAttributes + from datadog_api_client.v2.model.network_health_insights_type import NetworkHealthInsightsType + return { + "attributes": (NetworkHealthInsightAttributes,), + "id": (str,), + "type": (NetworkHealthInsightsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: NetworkHealthInsightAttributes, id: str, type: NetworkHealthInsightsType, **kwargs): + """ + A single network health insight describing a service-to-service connectivity issue. + + :param attributes: Detailed attributes of a network health insight. + :type attributes: NetworkHealthInsightAttributes + + :param id: Unique identifier for this network health insight. + :type id: str + + :param type: The resource type for network health insights. Always ``network-health-insights``. + :type type: NetworkHealthInsightsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/network_health_insight_attributes.py b/datadog_api_client/v2/model/network_health_insight_attributes.py new file mode 100644 index 0000000000..84e6c2d9c5 --- /dev/null +++ b/datadog_api_client/v2/model/network_health_insight_attributes.py @@ -0,0 +1,193 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.network_health_insight_failure_type import NetworkHealthInsightFailureType + from datadog_api_client.v2.model.network_health_insight_traffic_volume import NetworkHealthInsightTrafficVolume + from datadog_api_client.v2.model.network_health_insight_category import NetworkHealthInsightCategory + +class NetworkHealthInsightAttributes(ModelNormal): + validations = { + "failure_magnitude": { + "inclusive_minimum": 0, + }, + "failure_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + "total_requests": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.network_health_insight_failure_type import NetworkHealthInsightFailureType + from datadog_api_client.v2.model.network_health_insight_traffic_volume import NetworkHealthInsightTrafficVolume + from datadog_api_client.v2.model.network_health_insight_category import NetworkHealthInsightCategory + return { + "account_id": (str,), + "certificate_id": (str,), + "certificate_lifetime_percent": (float,), + "client_region": (str,), + "client_service": (str,), + "days_until_expiration": (int,), + "dns_query": (str,), + "dns_server": (str,), + "domain_name": (str,), + "failure_magnitude": (int,), + "failure_rate": (float,), + "failure_type": (NetworkHealthInsightFailureType,), + "loadbalancer_id": (str,), + "server_region": (str,), + "server_service": (str,), + "total_requests": (int,), + "traffic_volume": (NetworkHealthInsightTrafficVolume,), + "type": (NetworkHealthInsightCategory,), + } + attribute_map = { + "account_id": "account_id", + "certificate_id": "certificate_id", + "certificate_lifetime_percent": "certificate_lifetime_percent", + "client_region": "client_region", + "client_service": "client_service", + "days_until_expiration": "days_until_expiration", + "dns_query": "dns_query", + "dns_server": "dns_server", + "domain_name": "domain_name", + "failure_magnitude": "failure_magnitude", + "failure_rate": "failure_rate", + "failure_type": "failure_type", + "loadbalancer_id": "loadbalancer_id", + "server_region": "server_region", + "server_service": "server_service", + "total_requests": "total_requests", + "traffic_volume": "traffic_volume", + "type": "type", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, certificate_id: Union[str, UnsetType]=unset, certificate_lifetime_percent: Union[float, UnsetType]=unset, client_region: Union[str, UnsetType]=unset, client_service: Union[str, UnsetType]=unset, days_until_expiration: Union[int, UnsetType]=unset, dns_query: Union[str, UnsetType]=unset, dns_server: Union[str, UnsetType]=unset, domain_name: Union[str, UnsetType]=unset, failure_magnitude: Union[int, UnsetType]=unset, failure_rate: Union[float, UnsetType]=unset, failure_type: Union[NetworkHealthInsightFailureType, UnsetType]=unset, loadbalancer_id: Union[str, UnsetType]=unset, server_region: Union[str, UnsetType]=unset, server_service: Union[str, UnsetType]=unset, total_requests: Union[int, UnsetType]=unset, traffic_volume: Union[NetworkHealthInsightTrafficVolume, UnsetType]=unset, type: Union[NetworkHealthInsightCategory, UnsetType]=unset, **kwargs): + """ + Detailed attributes of a network health insight. + + :param account_id: AWS account identifier where the certificate is located. Only set for ``tls-cert`` insights. + :type account_id: str, optional + + :param certificate_id: ARN or identifier of the certificate. Only set for ``tls-cert`` insights. + :type certificate_id: str, optional + + :param certificate_lifetime_percent: Percentage of the certificate's validity period that has elapsed, ranging from 0 to 100. + Only set for ``tls-cert`` insights. + :type certificate_lifetime_percent: float, optional + + :param client_region: AWS region where the client is located. Only set for ``tls-cert`` insights. + :type client_region: str, optional + + :param client_service: Name of the service making the request (DNS query or TLS-secured connection). + Set to ``N/A`` when the client service cannot be determined. + :type client_service: str, optional + + :param days_until_expiration: Number of days remaining until the certificate expires. Negative values indicate the + certificate has already expired. Only set for ``tls-cert`` insights. + :type days_until_expiration: int, optional + + :param dns_query: Domain name that was being resolved when the DNS failure occurred. Only set for ``dns`` insights. + :type dns_query: str, optional + + :param dns_server: DNS server that received the failing query. Only set for ``dns`` insights. + :type dns_server: str, optional + + :param domain_name: Domain name covered by the certificate. Only set for ``tls-cert`` insights. + :type domain_name: str, optional + + :param failure_magnitude: Count of failed events observed during the query window. Only set for ``dns`` , ``tcp`` , + and ``security-group`` insights. + :type failure_magnitude: int, optional + + :param failure_rate: Percentage of requests that failed during the query window, ranging from 0 to 100. + Only set for ``dns`` , ``tcp`` , and ``security-group`` insights. + :type failure_rate: float, optional + + :param failure_type: Specific failure type within the insight category. For DNS insights: ``timeout`` , ``nxdomain`` , + ``servfail`` , or ``general_failure``. For TLS certificate insights: ``expired`` or ``expiring_soon``. + For security group insights: ``denied``. + :type failure_type: NetworkHealthInsightFailureType, optional + + :param loadbalancer_id: ARN of the load balancer using the certificate. Only set for ``tls-cert`` insights. + :type loadbalancer_id: str, optional + + :param server_region: AWS region where the server or load balancer is located. Only set for ``tls-cert`` insights. + :type server_region: str, optional + + :param server_service: Name of the target service the client was trying to reach. + :type server_service: str, optional + + :param total_requests: Total number of requests observed during the query window. Provides context for + ``failure_magnitude`` and ``failure_rate``. Only set for ``dns`` , ``tcp`` , and ``security-group`` insights. + :type total_requests: int, optional + + :param traffic_volume: Network traffic volume metrics between the client and server services during the query window. + :type traffic_volume: NetworkHealthInsightTrafficVolume, optional + + :param type: Category of network health insight. Indicates whether the insight relates to a DNS issue ( ``dns`` ), + a TCP issue ( ``tcp`` ), a TLS certificate issue ( ``tls-cert`` ), or a security group denial ( ``security-group`` ). + :type type: NetworkHealthInsightCategory, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if certificate_id is not unset: + kwargs["certificate_id"] = certificate_id + if certificate_lifetime_percent is not unset: + kwargs["certificate_lifetime_percent"] = certificate_lifetime_percent + if client_region is not unset: + kwargs["client_region"] = client_region + if client_service is not unset: + kwargs["client_service"] = client_service + if days_until_expiration is not unset: + kwargs["days_until_expiration"] = days_until_expiration + if dns_query is not unset: + kwargs["dns_query"] = dns_query + if dns_server is not unset: + kwargs["dns_server"] = dns_server + if domain_name is not unset: + kwargs["domain_name"] = domain_name + if failure_magnitude is not unset: + kwargs["failure_magnitude"] = failure_magnitude + if failure_rate is not unset: + kwargs["failure_rate"] = failure_rate + if failure_type is not unset: + kwargs["failure_type"] = failure_type + if loadbalancer_id is not unset: + kwargs["loadbalancer_id"] = loadbalancer_id + if server_region is not unset: + kwargs["server_region"] = server_region + if server_service is not unset: + kwargs["server_service"] = server_service + if total_requests is not unset: + kwargs["total_requests"] = total_requests + if traffic_volume is not unset: + kwargs["traffic_volume"] = traffic_volume + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/network_health_insight_category.py b/datadog_api_client/v2/model/network_health_insight_category.py new file mode 100644 index 0000000000..2ff08e2820 --- /dev/null +++ b/datadog_api_client/v2/model/network_health_insight_category.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NetworkHealthInsightCategory(ModelSimple): + """ + Category of network health insight. Indicates whether the insight relates to a DNS issue (`dns`), + a TCP issue (`tcp`), a TLS certificate issue (`tls-cert`), or a security group denial (`security-group`). + + :param value: Must be one of ["dns", "tcp", "tls-cert", "security-group"]. + :type value: str + """ + + allowed_values = { + "dns", + "tcp", + "tls-cert", + "security-group", + } + DNS: ClassVar["NetworkHealthInsightCategory"] + TCP: ClassVar["NetworkHealthInsightCategory"] + TLS_CERT: ClassVar["NetworkHealthInsightCategory"] + SECURITY_GROUP: ClassVar["NetworkHealthInsightCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NetworkHealthInsightCategory.DNS = NetworkHealthInsightCategory("dns") +NetworkHealthInsightCategory.TCP = NetworkHealthInsightCategory("tcp") +NetworkHealthInsightCategory.TLS_CERT = NetworkHealthInsightCategory("tls-cert") +NetworkHealthInsightCategory.SECURITY_GROUP = NetworkHealthInsightCategory("security-group") diff --git a/datadog_api_client/v2/model/network_health_insight_failure_type.py b/datadog_api_client/v2/model/network_health_insight_failure_type.py new file mode 100644 index 0000000000..95b455c645 --- /dev/null +++ b/datadog_api_client/v2/model/network_health_insight_failure_type.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NetworkHealthInsightFailureType(ModelSimple): + """ + Specific failure type within the insight category. For DNS insights: `timeout`, `nxdomain`, + `servfail`, or `general_failure`. For TLS certificate insights: `expired` or `expiring_soon`. + For security group insights: `denied`. + + :param value: Must be one of ["timeout", "nxdomain", "servfail", "general_failure", "expired", "expiring_soon", "denied"]. + :type value: str + """ + + allowed_values = { + "timeout", + "nxdomain", + "servfail", + "general_failure", + "expired", + "expiring_soon", + "denied", + } + TIMEOUT: ClassVar["NetworkHealthInsightFailureType"] + NXDOMAIN: ClassVar["NetworkHealthInsightFailureType"] + SERVFAIL: ClassVar["NetworkHealthInsightFailureType"] + GENERAL_FAILURE: ClassVar["NetworkHealthInsightFailureType"] + EXPIRED: ClassVar["NetworkHealthInsightFailureType"] + EXPIRING_SOON: ClassVar["NetworkHealthInsightFailureType"] + DENIED: ClassVar["NetworkHealthInsightFailureType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NetworkHealthInsightFailureType.TIMEOUT = NetworkHealthInsightFailureType("timeout") +NetworkHealthInsightFailureType.NXDOMAIN = NetworkHealthInsightFailureType("nxdomain") +NetworkHealthInsightFailureType.SERVFAIL = NetworkHealthInsightFailureType("servfail") +NetworkHealthInsightFailureType.GENERAL_FAILURE = NetworkHealthInsightFailureType("general_failure") +NetworkHealthInsightFailureType.EXPIRED = NetworkHealthInsightFailureType("expired") +NetworkHealthInsightFailureType.EXPIRING_SOON = NetworkHealthInsightFailureType("expiring_soon") +NetworkHealthInsightFailureType.DENIED = NetworkHealthInsightFailureType("denied") diff --git a/datadog_api_client/v2/model/network_health_insight_traffic_volume.py b/datadog_api_client/v2/model/network_health_insight_traffic_volume.py new file mode 100644 index 0000000000..9dcaeba1e3 --- /dev/null +++ b/datadog_api_client/v2/model/network_health_insight_traffic_volume.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NetworkHealthInsightTrafficVolume(ModelNormal): + @cached_property + def openapi_types(_): + return { + "bytes_read": (int,), + "bytes_written": (int,), + "total_traffic": (int,), + } + attribute_map = { + "bytes_read": "bytes_read", + "bytes_written": "bytes_written", + "total_traffic": "total_traffic", + } + + def __init__(self_, bytes_read: Union[int, UnsetType]=unset, bytes_written: Union[int, UnsetType]=unset, total_traffic: Union[int, UnsetType]=unset, **kwargs): + """ + Network traffic volume metrics between the client and server services during the query window. + + :param bytes_read: Total bytes read from the server to the client during the query window. + :type bytes_read: int, optional + + :param bytes_written: Total bytes written from the client to the server during the query window. + :type bytes_written: int, optional + + :param total_traffic: Sum of bytes written and bytes read across the query window. + :type total_traffic: int, optional + """ + if bytes_read is not unset: + kwargs["bytes_read"] = bytes_read + if bytes_written is not unset: + kwargs["bytes_written"] = bytes_written + if total_traffic is not unset: + kwargs["total_traffic"] = total_traffic + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/network_health_insights_response.py b/datadog_api_client/v2/model/network_health_insights_response.py new file mode 100644 index 0000000000..a4730cfc63 --- /dev/null +++ b/datadog_api_client/v2/model/network_health_insights_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.network_health_insight import NetworkHealthInsight + +class NetworkHealthInsightsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.network_health_insight import NetworkHealthInsight + return { + "data": ([NetworkHealthInsight],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[NetworkHealthInsight], **kwargs): + """ + Response containing a list of network health insights for the organization. + + :param data: Array of network health insights returned for the query window. + :type data: [NetworkHealthInsight] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/network_health_insights_type.py b/datadog_api_client/v2/model/network_health_insights_type.py new file mode 100644 index 0000000000..8b9f573f12 --- /dev/null +++ b/datadog_api_client/v2/model/network_health_insights_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NetworkHealthInsightsType(ModelSimple): + """ + The resource type for network health insights. Always `network-health-insights`. + + :param value: If omitted defaults to "network-health-insights". Must be one of ["network-health-insights"]. + :type value: str + """ + + allowed_values = { + "network-health-insights", + } + NETWORK_HEALTH_INSIGHTS: ClassVar["NetworkHealthInsightsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NetworkHealthInsightsType.NETWORK_HEALTH_INSIGHTS = NetworkHealthInsightsType("network-health-insights") diff --git a/datadog_api_client/v2/model/node_type.py b/datadog_api_client/v2/model/node_type.py new file mode 100644 index 0000000000..4c8636b8d3 --- /dev/null +++ b/datadog_api_client/v2/model/node_type.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NodeType(ModelNormal): + + def __init__(self_, **kwargs): + """ + A tree-sitter node type definition for a given language, describing the node's structure, subtypes, and fields. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/node_types_response.py b/datadog_api_client/v2/model/node_types_response.py new file mode 100644 index 0000000000..ff99f15100 --- /dev/null +++ b/datadog_api_client/v2/model/node_types_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.node_types_response_data import NodeTypesResponseData + +class NodeTypesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.node_types_response_data import NodeTypesResponseData + return { + "data": (NodeTypesResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: NodeTypesResponseData, **kwargs): + """ + The response payload containing tree-sitter node type definitions for a programming language. + + :param data: The primary data object in the node types response. + :type data: NodeTypesResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/node_types_response_data.py b/datadog_api_client/v2/model/node_types_response_data.py new file mode 100644 index 0000000000..fa3a055f40 --- /dev/null +++ b/datadog_api_client/v2/model/node_types_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.node_types_response_data_attributes import NodeTypesResponseDataAttributes + from datadog_api_client.v2.model.node_types_response_data_type import NodeTypesResponseDataType + +class NodeTypesResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.node_types_response_data_attributes import NodeTypesResponseDataAttributes + from datadog_api_client.v2.model.node_types_response_data_type import NodeTypesResponseDataType + return { + "attributes": (NodeTypesResponseDataAttributes,), + "id": (str,), + "type": (NodeTypesResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: NodeTypesResponseDataAttributes, id: str, type: NodeTypesResponseDataType, **kwargs): + """ + The primary data object in the node types response. + + :param attributes: The attributes of the node types response, containing the list of node type definitions for the requested language. + :type attributes: NodeTypesResponseDataAttributes + + :param id: The unique identifier of the node types response resource. + :type id: str + + :param type: Get node types response resource type. + :type type: NodeTypesResponseDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/node_types_response_data_attributes.py b/datadog_api_client/v2/model/node_types_response_data_attributes.py new file mode 100644 index 0000000000..f743b85fda --- /dev/null +++ b/datadog_api_client/v2/model/node_types_response_data_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.node_type import NodeType + +class NodeTypesResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.node_type import NodeType + return { + "node_types": ([NodeType],), + } + attribute_map = { + "node_types": "node_types", + } + + def __init__(self_, node_types: List[NodeType], **kwargs): + """ + The attributes of the node types response, containing the list of node type definitions for the requested language. + + :param node_types: The list of tree-sitter node type definitions for the language. + :type node_types: [NodeType] + """ + super().__init__(kwargs) + + + self_.node_types = node_types diff --git a/datadog_api_client/v2/model/node_types_response_data_type.py b/datadog_api_client/v2/model/node_types_response_data_type.py new file mode 100644 index 0000000000..8fb6f2fecb --- /dev/null +++ b/datadog_api_client/v2/model/node_types_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NodeTypesResponseDataType(ModelSimple): + """ + Get node types response resource type. + + :param value: If omitted defaults to "get_node_types_response". Must be one of ["get_node_types_response"]. + :type value: str + """ + + allowed_values = { + "get_node_types_response", + } + GET_NODE_TYPES_RESPONSE: ClassVar["NodeTypesResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NodeTypesResponseDataType.GET_NODE_TYPES_RESPONSE = NodeTypesResponseDataType("get_node_types_response") diff --git a/datadog_api_client/v2/model/notebook_create_data.py b/datadog_api_client/v2/model/notebook_create_data.py new file mode 100644 index 0000000000..aa7135fb04 --- /dev/null +++ b/datadog_api_client/v2/model/notebook_create_data.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notebook_resource_type import NotebookResourceType + +class NotebookCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notebook_resource_type import NotebookResourceType + return { + "type": (NotebookResourceType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: NotebookResourceType, **kwargs): + """ + Notebook creation data + + :param type: Notebook resource type + :type type: NotebookResourceType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/notebook_create_request.py b/datadog_api_client/v2/model/notebook_create_request.py new file mode 100644 index 0000000000..24839ce8d9 --- /dev/null +++ b/datadog_api_client/v2/model/notebook_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notebook_create_data import NotebookCreateData + +class NotebookCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notebook_create_data import NotebookCreateData + return { + "data": (NotebookCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: NotebookCreateData, **kwargs): + """ + Notebook creation request + + :param data: Notebook creation data + :type data: NotebookCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/notebook_resource_type.py b/datadog_api_client/v2/model/notebook_resource_type.py new file mode 100644 index 0000000000..868fbd7859 --- /dev/null +++ b/datadog_api_client/v2/model/notebook_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotebookResourceType(ModelSimple): + """ + Notebook resource type + + :param value: If omitted defaults to "notebook". Must be one of ["notebook"]. + :type value: str + """ + + allowed_values = { + "notebook", + } + NOTEBOOK: ClassVar["NotebookResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotebookResourceType.NOTEBOOK = NotebookResourceType("notebook") diff --git a/datadog_api_client/v2/model/notebook_trigger_wrapper.py b/datadog_api_client/v2/model/notebook_trigger_wrapper.py new file mode 100644 index 0000000000..e3097b7efc --- /dev/null +++ b/datadog_api_client/v2/model/notebook_trigger_wrapper.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotebookTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + return { + "notebook_trigger": (dict,), + "start_step_names": ([str],), + } + attribute_map = { + "notebook_trigger": "notebookTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, notebook_trigger: dict, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Notebook-based trigger. + + :param notebook_trigger: Trigger a workflow from a Notebook. + :type notebook_trigger: dict + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.notebook_trigger = notebook_trigger diff --git a/datadog_api_client/v2/model/notification_channel.py b/datadog_api_client/v2/model/notification_channel.py new file mode 100644 index 0000000000..68e0b3fa2a --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_data import NotificationChannelData + from datadog_api_client.v2.model.notification_channel_phone_config import NotificationChannelPhoneConfig + from datadog_api_client.v2.model.notification_channel_email_config import NotificationChannelEmailConfig + from datadog_api_client.v2.model.notification_channel_push_config import NotificationChannelPushConfig + +class NotificationChannel(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_data import NotificationChannelData + return { + "data": (NotificationChannelData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[NotificationChannelData, UnsetType]=unset, **kwargs): + """ + A top-level wrapper for a user notification channel + + :param data: Data for an on-call notification channel + :type data: NotificationChannelData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/notification_channel_attributes.py b/datadog_api_client/v2/model/notification_channel_attributes.py new file mode 100644 index 0000000000..da1bd2fbb2 --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_config import NotificationChannelConfig + from datadog_api_client.v2.model.notification_channel_phone_config import NotificationChannelPhoneConfig + from datadog_api_client.v2.model.notification_channel_email_config import NotificationChannelEmailConfig + from datadog_api_client.v2.model.notification_channel_push_config import NotificationChannelPushConfig + +class NotificationChannelAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_config import NotificationChannelConfig + return { + "active": (bool,), + "config": (NotificationChannelConfig,), + } + attribute_map = { + "active": "active", + "config": "config", + } + + def __init__(self_, active: Union[bool, UnsetType]=unset, config: Union[NotificationChannelConfig, NotificationChannelPhoneConfig, NotificationChannelEmailConfig, NotificationChannelPushConfig, UnsetType]=unset, **kwargs): + """ + Attributes for an on-call notification channel. + + :param active: Whether the notification channel is currently active. + :type active: bool, optional + + :param config: Defines the configuration for an On-Call notification channel + :type config: NotificationChannelConfig, optional + """ + if active is not unset: + kwargs["active"] = active + if config is not unset: + kwargs["config"] = config + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/notification_channel_config.py b/datadog_api_client/v2/model/notification_channel_config.py new file mode 100644 index 0000000000..9a25acffa8 --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_config.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotificationChannelConfig(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Defines the configuration for an On-Call notification channel + + :param formatted_number: The formatted international version of Number (e.g. +33 7 1 23 45 67). + :type formatted_number: str + + :param number: The E-164 formatted phone number (e.g. +3371234567) + :type number: str + + :param region: The ISO 3166-1 alpha-2 two-letter country code. + :type region: str + + :param sms_subscribed_at: If present, the date the user subscribed this number to SMS messages + :type sms_subscribed_at: datetime, none_type, optional + + :param type: Indicates that the notification channel is a phone + :type type: NotificationChannelPhoneConfigType + + :param verified: Indicates whether this phone has been verified by the user in Datadog On-Call + :type verified: bool + + :param address: The e-mail address to be notified + :type address: str + + :param formats: Preferred content formats for notifications. + :type formats: [NotificationChannelEmailFormatType] + + :param application_name: The name of the application used to receive push notifications + :type application_name: str + + :param device_name: The name of the mobile device being used + :type device_name: str + """ + 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.notification_channel_phone_config import NotificationChannelPhoneConfig + from datadog_api_client.v2.model.notification_channel_email_config import NotificationChannelEmailConfig + from datadog_api_client.v2.model.notification_channel_push_config import NotificationChannelPushConfig + return { + "oneOf": [ + NotificationChannelPhoneConfig, + NotificationChannelEmailConfig, + NotificationChannelPushConfig, + ], + } diff --git a/datadog_api_client/v2/model/notification_channel_data.py b/datadog_api_client/v2/model/notification_channel_data.py new file mode 100644 index 0000000000..ce8092cbf5 --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_attributes import NotificationChannelAttributes + from datadog_api_client.v2.model.notification_channel_type import NotificationChannelType + from datadog_api_client.v2.model.notification_channel_phone_config import NotificationChannelPhoneConfig + from datadog_api_client.v2.model.notification_channel_email_config import NotificationChannelEmailConfig + from datadog_api_client.v2.model.notification_channel_push_config import NotificationChannelPushConfig + +class NotificationChannelData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_attributes import NotificationChannelAttributes + from datadog_api_client.v2.model.notification_channel_type import NotificationChannelType + return { + "attributes": (NotificationChannelAttributes,), + "id": (str,), + "type": (NotificationChannelType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: NotificationChannelType, attributes: Union[NotificationChannelAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data for an on-call notification channel + + :param attributes: Attributes for an on-call notification channel. + :type attributes: NotificationChannelAttributes, optional + + :param id: Unique identifier for the channel + :type id: str, optional + + :param type: Indicates that the resource is of type 'notification_channels'. + :type type: NotificationChannelType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/notification_channel_email_config.py b/datadog_api_client/v2/model/notification_channel_email_config.py new file mode 100644 index 0000000000..1f5947151a --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_email_config.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_email_format_type import NotificationChannelEmailFormatType + from datadog_api_client.v2.model.notification_channel_email_config_type import NotificationChannelEmailConfigType + +class NotificationChannelEmailConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_email_format_type import NotificationChannelEmailFormatType + from datadog_api_client.v2.model.notification_channel_email_config_type import NotificationChannelEmailConfigType + return { + "address": (str,), + "formats": ([NotificationChannelEmailFormatType],), + "type": (NotificationChannelEmailConfigType,), + } + attribute_map = { + "address": "address", + "formats": "formats", + "type": "type", + } + + def __init__(self_, address: str, formats: List[NotificationChannelEmailFormatType], type: NotificationChannelEmailConfigType, **kwargs): + """ + Email notification channel configuration + + :param address: The e-mail address to be notified + :type address: str + + :param formats: Preferred content formats for notifications. + :type formats: [NotificationChannelEmailFormatType] + + :param type: Indicates that the notification channel is an e-mail address + :type type: NotificationChannelEmailConfigType + """ + super().__init__(kwargs) + + + self_.address = address + self_.formats = formats + self_.type = type diff --git a/datadog_api_client/v2/model/notification_channel_email_config_type.py b/datadog_api_client/v2/model/notification_channel_email_config_type.py new file mode 100644 index 0000000000..84354e0519 --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_email_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotificationChannelEmailConfigType(ModelSimple): + """ + Indicates that the notification channel is an e-mail address + + :param value: If omitted defaults to "email". Must be one of ["email"]. + :type value: str + """ + + allowed_values = { + "email", + } + EMAIL: ClassVar["NotificationChannelEmailConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotificationChannelEmailConfigType.EMAIL = NotificationChannelEmailConfigType("email") diff --git a/datadog_api_client/v2/model/notification_channel_email_format_type.py b/datadog_api_client/v2/model/notification_channel_email_format_type.py new file mode 100644 index 0000000000..a8bb85efa5 --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_email_format_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotificationChannelEmailFormatType(ModelSimple): + """ + Specifies the format of the e-mail that is sent for On-Call notifications + + :param value: If omitted defaults to "html". Must be one of ["html", "text"]. + :type value: str + """ + + allowed_values = { + "html", + "text", + } + HTML: ClassVar["NotificationChannelEmailFormatType"] + TEXT: ClassVar["NotificationChannelEmailFormatType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotificationChannelEmailFormatType.HTML = NotificationChannelEmailFormatType("html") +NotificationChannelEmailFormatType.TEXT = NotificationChannelEmailFormatType("text") diff --git a/datadog_api_client/v2/model/notification_channel_phone_config.py b/datadog_api_client/v2/model/notification_channel_phone_config.py new file mode 100644 index 0000000000..15d783da51 --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_phone_config.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_phone_config_type import NotificationChannelPhoneConfigType + +class NotificationChannelPhoneConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_phone_config_type import NotificationChannelPhoneConfigType + return { + "formatted_number": (str,), + "number": (str,), + "region": (str,), + "sms_subscribed_at": (datetime, none_type), + "type": (NotificationChannelPhoneConfigType,), + "verified": (bool,), + } + attribute_map = { + "formatted_number": "formatted_number", + "number": "number", + "region": "region", + "sms_subscribed_at": "sms_subscribed_at", + "type": "type", + "verified": "verified", + } + + def __init__(self_, formatted_number: str, number: str, region: str, type: NotificationChannelPhoneConfigType, verified: bool, sms_subscribed_at: Union[datetime, none_type, UnsetType]=unset, **kwargs): + """ + Phone notification channel configuration + + :param formatted_number: The formatted international version of Number (e.g. +33 7 1 23 45 67). + :type formatted_number: str + + :param number: The E-164 formatted phone number (e.g. +3371234567) + :type number: str + + :param region: The ISO 3166-1 alpha-2 two-letter country code. + :type region: str + + :param sms_subscribed_at: If present, the date the user subscribed this number to SMS messages + :type sms_subscribed_at: datetime, none_type, optional + + :param type: Indicates that the notification channel is a phone + :type type: NotificationChannelPhoneConfigType + + :param verified: Indicates whether this phone has been verified by the user in Datadog On-Call + :type verified: bool + """ + if sms_subscribed_at is not unset: + kwargs["sms_subscribed_at"] = sms_subscribed_at + super().__init__(kwargs) + + + self_.formatted_number = formatted_number + self_.number = number + self_.region = region + self_.type = type + self_.verified = verified diff --git a/datadog_api_client/v2/model/notification_channel_phone_config_type.py b/datadog_api_client/v2/model/notification_channel_phone_config_type.py new file mode 100644 index 0000000000..ed3445058d --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_phone_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotificationChannelPhoneConfigType(ModelSimple): + """ + Indicates that the notification channel is a phone + + :param value: If omitted defaults to "phone". Must be one of ["phone"]. + :type value: str + """ + + allowed_values = { + "phone", + } + PHONE: ClassVar["NotificationChannelPhoneConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotificationChannelPhoneConfigType.PHONE = NotificationChannelPhoneConfigType("phone") diff --git a/datadog_api_client/v2/model/notification_channel_push_config.py b/datadog_api_client/v2/model/notification_channel_push_config.py new file mode 100644 index 0000000000..23539920ac --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_push_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_push_config_type import NotificationChannelPushConfigType + +class NotificationChannelPushConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_push_config_type import NotificationChannelPushConfigType + return { + "application_name": (str,), + "device_name": (str,), + "type": (NotificationChannelPushConfigType,), + } + attribute_map = { + "application_name": "application_name", + "device_name": "device_name", + "type": "type", + } + + def __init__(self_, application_name: str, device_name: str, type: NotificationChannelPushConfigType, **kwargs): + """ + Push notification channel configuration + + :param application_name: The name of the application used to receive push notifications + :type application_name: str + + :param device_name: The name of the mobile device being used + :type device_name: str + + :param type: Indicates that the notification channel is a mobile device for push notifications + :type type: NotificationChannelPushConfigType + """ + super().__init__(kwargs) + + + self_.application_name = application_name + self_.device_name = device_name + self_.type = type diff --git a/datadog_api_client/v2/model/notification_channel_push_config_type.py b/datadog_api_client/v2/model/notification_channel_push_config_type.py new file mode 100644 index 0000000000..beba3712ba --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_push_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotificationChannelPushConfigType(ModelSimple): + """ + Indicates that the notification channel is a mobile device for push notifications + + :param value: If omitted defaults to "push". Must be one of ["push"]. + :type value: str + """ + + allowed_values = { + "push", + } + PUSH: ClassVar["NotificationChannelPushConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotificationChannelPushConfigType.PUSH = NotificationChannelPushConfigType("push") diff --git a/datadog_api_client/v2/model/notification_channel_type.py b/datadog_api_client/v2/model/notification_channel_type.py new file mode 100644 index 0000000000..6153325c19 --- /dev/null +++ b/datadog_api_client/v2/model/notification_channel_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotificationChannelType(ModelSimple): + """ + Indicates that the resource is of type 'notification_channels'. + + :param value: If omitted defaults to "notification_channels". Must be one of ["notification_channels"]. + :type value: str + """ + + allowed_values = { + "notification_channels", + } + NOTIFICATION_CHANNELS: ClassVar["NotificationChannelType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotificationChannelType.NOTIFICATION_CHANNELS = NotificationChannelType("notification_channels") diff --git a/datadog_api_client/v2/model/notification_rule.py b/datadog_api_client/v2/model/notification_rule.py new file mode 100644 index 0000000000..c4a0403de7 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule_attributes import NotificationRuleAttributes + from datadog_api_client.v2.model.notification_rules_type import NotificationRulesType + +class NotificationRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule_attributes import NotificationRuleAttributes + from datadog_api_client.v2.model.notification_rules_type import NotificationRulesType + return { + "attributes": (NotificationRuleAttributes,), + "id": (str,), + "type": (NotificationRulesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: NotificationRuleAttributes, id: str, type: NotificationRulesType, **kwargs): + """ + Notification rules allow full control over notifications generated by the various Datadog security products. + They allow users to define the conditions under which a notification should be generated (based on rule severities, + rule types, rule tags, and so on), and the targets to notify. + A notification rule is composed of a rule ID, a rule type, and the rule attributes. All fields are required. + + :param attributes: Attributes of the notification rule. + :type attributes: NotificationRuleAttributes + + :param id: The ID of a notification rule. + :type id: str + + :param type: The rule type associated to notification rules. + :type type: NotificationRulesType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/notification_rule_attributes.py b/datadog_api_client/v2/model/notification_rule_attributes.py new file mode 100644 index 0000000000..4fe029d25d --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_attributes.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_user import RuleUser + from datadog_api_client.v2.model.selectors import Selectors + +class NotificationRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_user import RuleUser + from datadog_api_client.v2.model.selectors import Selectors + return { + "created_at": (int,), + "created_by": (RuleUser,), + "enabled": (bool,), + "modified_at": (int,), + "modified_by": (RuleUser,), + "name": (str,), + "selectors": (Selectors,), + "targets": ([str],), + "time_aggregation": (int,), + "version": (int,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "enabled": "enabled", + "modified_at": "modified_at", + "modified_by": "modified_by", + "name": "name", + "selectors": "selectors", + "targets": "targets", + "time_aggregation": "time_aggregation", + "version": "version", + } + + def __init__(self_, created_at: int, created_by: RuleUser, enabled: bool, modified_at: int, modified_by: RuleUser, name: str, selectors: Selectors, targets: List[str], version: int, time_aggregation: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of the notification rule. + + :param created_at: Date as Unix timestamp in milliseconds. + :type created_at: int + + :param created_by: User creating or modifying a rule. + :type created_by: RuleUser + + :param enabled: Field used to enable or disable the rule. + :type enabled: bool + + :param modified_at: Date as Unix timestamp in milliseconds. + :type modified_at: int + + :param modified_by: User creating or modifying a rule. + :type modified_by: RuleUser + + :param name: Name of the notification rule. + :type name: str + + :param selectors: Selectors are used to filter security issues for which notifications should be generated. + Users can specify rule severities, rule types, a query to filter security issues on tags and attributes, and the trigger source. + Only the trigger_source field is required. + :type selectors: Selectors + + :param targets: List of recipients to notify when a notification rule is triggered. Many different target types are supported, + such as email addresses, Slack channels, and PagerDuty services. + The appropriate integrations need to be properly configured to send notifications to the specified targets. + :type targets: [str] + + :param time_aggregation: Time aggregation period (in seconds) is used to aggregate the results of the notification rule evaluation. + Results are aggregated over a selected time frame using a rolling window, which updates with each new evaluation. + Notifications are only sent for new issues discovered during the window. + Time aggregation is only available for vulnerability-based notification rules. When omitted or set to 0, no aggregation + is done. + :type time_aggregation: int, optional + + :param version: Version of the notification rule. It is updated when the rule is modified. + :type version: int + """ + if time_aggregation is not unset: + kwargs["time_aggregation"] = time_aggregation + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.enabled = enabled + self_.modified_at = modified_at + self_.modified_by = modified_by + self_.name = name + self_.selectors = selectors + self_.targets = targets + self_.version = version diff --git a/datadog_api_client/v2/model/notification_rule_preview_notification_status.py b/datadog_api_client/v2/model/notification_rule_preview_notification_status.py new file mode 100644 index 0000000000..1c29d052e5 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_preview_notification_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotificationRulePreviewNotificationStatus(ModelSimple): + """ + The notification status for the given rule type. `SUCCESS` means a matching event was found and the notification was sent successfully. `DEFAULT` means no matching event was found and a default placeholder notification was sent instead. `ERROR` means an error occurred while sending the notification. + + :param value: Must be one of ["SUCCESS", "DEFAULT", "ERROR"]. + :type value: str + """ + + allowed_values = { + "SUCCESS", + "DEFAULT", + "ERROR", + } + SUCCESS: ClassVar["NotificationRulePreviewNotificationStatus"] + DEFAULT: ClassVar["NotificationRulePreviewNotificationStatus"] + ERROR: ClassVar["NotificationRulePreviewNotificationStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotificationRulePreviewNotificationStatus.SUCCESS = NotificationRulePreviewNotificationStatus("SUCCESS") +NotificationRulePreviewNotificationStatus.DEFAULT = NotificationRulePreviewNotificationStatus("DEFAULT") +NotificationRulePreviewNotificationStatus.ERROR = NotificationRulePreviewNotificationStatus("ERROR") diff --git a/datadog_api_client/v2/model/notification_rule_preview_response.py b/datadog_api_client/v2/model/notification_rule_preview_response.py new file mode 100644 index 0000000000..c5e007fada --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_preview_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule_preview_response_data import NotificationRulePreviewResponseData + +class NotificationRulePreviewResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule_preview_response_data import NotificationRulePreviewResponseData + return { + "data": (NotificationRulePreviewResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: NotificationRulePreviewResponseData, **kwargs): + """ + Response from the notification preview request. + + :param data: The notification preview response data. + :type data: NotificationRulePreviewResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/notification_rule_preview_response_attributes.py b/datadog_api_client/v2/model/notification_rule_preview_response_attributes.py new file mode 100644 index 0000000000..de9b8ef3b9 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_preview_response_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule_preview_result import NotificationRulePreviewResult + +class NotificationRulePreviewResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule_preview_result import NotificationRulePreviewResult + return { + "preview_results": ([NotificationRulePreviewResult],), + } + attribute_map = { + "preview_results": "preview_results", + } + + def __init__(self_, preview_results: List[NotificationRulePreviewResult], **kwargs): + """ + Attributes of the notification preview response. + + :param preview_results: List of preview results for each rule type matched by the notification rule. + :type preview_results: [NotificationRulePreviewResult] + """ + super().__init__(kwargs) + + + self_.preview_results = preview_results diff --git a/datadog_api_client/v2/model/notification_rule_preview_response_data.py b/datadog_api_client/v2/model/notification_rule_preview_response_data.py new file mode 100644 index 0000000000..bd9eec94f8 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_preview_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule_preview_response_attributes import NotificationRulePreviewResponseAttributes + from datadog_api_client.v2.model.notification_rule_preview_response_type import NotificationRulePreviewResponseType + +class NotificationRulePreviewResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule_preview_response_attributes import NotificationRulePreviewResponseAttributes + from datadog_api_client.v2.model.notification_rule_preview_response_type import NotificationRulePreviewResponseType + return { + "attributes": (NotificationRulePreviewResponseAttributes,), + "id": (str,), + "type": (NotificationRulePreviewResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: NotificationRulePreviewResponseAttributes, type: NotificationRulePreviewResponseType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The notification preview response data. + + :param attributes: Attributes of the notification preview response. + :type attributes: NotificationRulePreviewResponseAttributes + + :param id: The ID of the notification preview response. + :type id: str, optional + + :param type: The type of the notification preview response. + :type type: NotificationRulePreviewResponseType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/notification_rule_preview_response_type.py b/datadog_api_client/v2/model/notification_rule_preview_response_type.py new file mode 100644 index 0000000000..2c851d9c49 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_preview_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotificationRulePreviewResponseType(ModelSimple): + """ + The type of the notification preview response. + + :param value: If omitted defaults to "notification_preview_response". Must be one of ["notification_preview_response"]. + :type value: str + """ + + allowed_values = { + "notification_preview_response", + } + NOTIFICATION_PREVIEW_RESPONSE: ClassVar["NotificationRulePreviewResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotificationRulePreviewResponseType.NOTIFICATION_PREVIEW_RESPONSE = NotificationRulePreviewResponseType("notification_preview_response") diff --git a/datadog_api_client/v2/model/notification_rule_preview_result.py b/datadog_api_client/v2/model/notification_rule_preview_result.py new file mode 100644 index 0000000000..8c2fc3a4a1 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_preview_result.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule_preview_notification_status import NotificationRulePreviewNotificationStatus + from datadog_api_client.v2.model.rule_types_items import RuleTypesItems + +class NotificationRulePreviewResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule_preview_notification_status import NotificationRulePreviewNotificationStatus + from datadog_api_client.v2.model.rule_types_items import RuleTypesItems + return { + "notification_status": (NotificationRulePreviewNotificationStatus,), + "rule_type": (RuleTypesItems,), + } + attribute_map = { + "notification_status": "notification_status", + "rule_type": "rule_type", + } + + def __init__(self_, notification_status: NotificationRulePreviewNotificationStatus, rule_type: RuleTypesItems, **kwargs): + """ + The preview result for a single rule type. + + :param notification_status: The notification status for the given rule type. ``SUCCESS`` means a matching event was found and the notification was sent successfully. ``DEFAULT`` means no matching event was found and a default placeholder notification was sent instead. ``ERROR`` means an error occurred while sending the notification. + :type notification_status: NotificationRulePreviewNotificationStatus + + :param rule_type: Security rule type which can be used in security rules. + Signal-based notification rules can filter signals based on rule types application_security, log_detection, + workload_security, signal_correlation, cloud_configuration and infrastructure_configuration. + Vulnerability-based notification rules can filter vulnerabilities based on rule types application_code_vulnerability, + application_library_vulnerability, attack_path, container_image_vulnerability, identity_risk, misconfiguration, + api_security, host_vulnerability, iac_misconfiguration, sast_vulnerability, secret_vulnerability and workload_activity. + :type rule_type: RuleTypesItems + """ + super().__init__(kwargs) + + + self_.notification_status = notification_status + self_.rule_type = rule_type diff --git a/datadog_api_client/v2/model/notification_rule_response.py b/datadog_api_client/v2/model/notification_rule_response.py new file mode 100644 index 0000000000..57838cb231 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_response.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule import NotificationRule + +class NotificationRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule import NotificationRule + return { + "data": (NotificationRule,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[NotificationRule, UnsetType]=unset, **kwargs): + """ + Response object which includes a notification rule. + + :param data: Notification rules allow full control over notifications generated by the various Datadog security products. + They allow users to define the conditions under which a notification should be generated (based on rule severities, + rule types, rule tags, and so on), and the targets to notify. + A notification rule is composed of a rule ID, a rule type, and the rule attributes. All fields are required. + :type data: NotificationRule, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/notification_rule_routing.py b/datadog_api_client/v2/model/notification_rule_routing.py new file mode 100644 index 0000000000..93afdcf270 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_routing.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule_routing_mode import NotificationRuleRoutingMode + +class NotificationRuleRouting(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule_routing_mode import NotificationRuleRoutingMode + return { + "mode": (NotificationRuleRoutingMode,), + } + attribute_map = { + "mode": "mode", + } + + def __init__(self_, mode: NotificationRuleRoutingMode, **kwargs): + """ + Routing configuration for the notification rule. + + :param mode: The routing mode for the notification rule. ``manual`` sends notifications to the configured targets. + :type mode: NotificationRuleRoutingMode + """ + super().__init__(kwargs) + + + self_.mode = mode diff --git a/datadog_api_client/v2/model/notification_rule_routing_mode.py b/datadog_api_client/v2/model/notification_rule_routing_mode.py new file mode 100644 index 0000000000..f7827638e5 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rule_routing_mode.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotificationRuleRoutingMode(ModelSimple): + """ + The routing mode for the notification rule. `manual` sends notifications to the configured targets. + + :param value: If omitted defaults to "manual". Must be one of ["manual"]. + :type value: str + """ + + allowed_values = { + "manual", + } + MANUAL: ClassVar["NotificationRuleRoutingMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotificationRuleRoutingMode.MANUAL = NotificationRuleRoutingMode("manual") diff --git a/datadog_api_client/v2/model/notification_rules_list_response.py b/datadog_api_client/v2/model/notification_rules_list_response.py new file mode 100644 index 0000000000..c282d33829 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rules_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule import NotificationRule + +class NotificationRulesListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule import NotificationRule + return { + "data": ([NotificationRule],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[NotificationRule], UnsetType]=unset, **kwargs): + """ + The list of notification rules. + + :param data: + :type data: [NotificationRule], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/notification_rules_type.py b/datadog_api_client/v2/model/notification_rules_type.py new file mode 100644 index 0000000000..3bc13e66d6 --- /dev/null +++ b/datadog_api_client/v2/model/notification_rules_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotificationRulesType(ModelSimple): + """ + The rule type associated to notification rules. + + :param value: If omitted defaults to "notification_rules". Must be one of ["notification_rules"]. + :type value: str + """ + + allowed_values = { + "notification_rules", + } + NOTIFICATION_RULES: ClassVar["NotificationRulesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotificationRulesType.NOTIFICATION_RULES = NotificationRulesType("notification_rules") diff --git a/datadog_api_client/v2/model/notion_api_key.py b/datadog_api_client/v2/model/notion_api_key.py new file mode 100644 index 0000000000..80a1fa67ae --- /dev/null +++ b/datadog_api_client/v2/model/notion_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notion_api_key_type import NotionAPIKeyType + +class NotionAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notion_api_key_type import NotionAPIKeyType + return { + "api_token": (str,), + "type": (NotionAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, api_token: str, type: NotionAPIKeyType, **kwargs): + """ + The definition of the ``NotionAPIKey`` object. + + :param api_token: The ``NotionAPIKey`` ``api_token``. + :type api_token: str + + :param type: The definition of the ``NotionAPIKey`` object. + :type type: NotionAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_token = api_token + self_.type = type diff --git a/datadog_api_client/v2/model/notion_api_key_type.py b/datadog_api_client/v2/model/notion_api_key_type.py new file mode 100644 index 0000000000..0f75ee1771 --- /dev/null +++ b/datadog_api_client/v2/model/notion_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotionAPIKeyType(ModelSimple): + """ + The definition of the `NotionAPIKey` object. + + :param value: If omitted defaults to "NotionAPIKey". Must be one of ["NotionAPIKey"]. + :type value: str + """ + + allowed_values = { + "NotionAPIKey", + } + NOTIONAPIKEY: ClassVar["NotionAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotionAPIKeyType.NOTIONAPIKEY = NotionAPIKeyType("NotionAPIKey") diff --git a/datadog_api_client/v2/model/notion_api_key_update.py b/datadog_api_client/v2/model/notion_api_key_update.py new file mode 100644 index 0000000000..f647b166f1 --- /dev/null +++ b/datadog_api_client/v2/model/notion_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notion_api_key_type import NotionAPIKeyType + +class NotionAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notion_api_key_type import NotionAPIKeyType + return { + "api_token": (str,), + "type": (NotionAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, type: NotionAPIKeyType, api_token: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``NotionAPIKey`` object. + + :param api_token: The ``NotionAPIKeyUpdate`` ``api_token``. + :type api_token: str, optional + + :param type: The definition of the ``NotionAPIKey`` object. + :type type: NotionAPIKeyType + """ + if api_token is not unset: + kwargs["api_token"] = api_token + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/notion_credentials.py b/datadog_api_client/v2/model/notion_credentials.py new file mode 100644 index 0000000000..a12fedacbc --- /dev/null +++ b/datadog_api_client/v2/model/notion_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotionCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``NotionCredentials`` object. + + :param api_token: The `NotionAPIKey` `api_token`. + :type api_token: str + + :param type: The definition of the `NotionAPIKey` object. + :type type: NotionAPIKeyType + """ + 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.notion_api_key import NotionAPIKey + return { + "oneOf": [ + NotionAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/notion_credentials_update.py b/datadog_api_client/v2/model/notion_credentials_update.py new file mode 100644 index 0000000000..d88af88a07 --- /dev/null +++ b/datadog_api_client/v2/model/notion_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class NotionCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``NotionCredentialsUpdate`` object. + + :param api_token: The `NotionAPIKeyUpdate` `api_token`. + :type api_token: str, optional + + :param type: The definition of the `NotionAPIKey` object. + :type type: NotionAPIKeyType + """ + 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.notion_api_key_update import NotionAPIKeyUpdate + return { + "oneOf": [ + NotionAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/notion_integration.py b/datadog_api_client/v2/model/notion_integration.py new file mode 100644 index 0000000000..b977485f70 --- /dev/null +++ b/datadog_api_client/v2/model/notion_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notion_credentials import NotionCredentials + from datadog_api_client.v2.model.notion_integration_type import NotionIntegrationType + from datadog_api_client.v2.model.notion_api_key import NotionAPIKey + +class NotionIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notion_credentials import NotionCredentials + from datadog_api_client.v2.model.notion_integration_type import NotionIntegrationType + return { + "credentials": (NotionCredentials,), + "type": (NotionIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[NotionCredentials, NotionAPIKey], type: NotionIntegrationType, **kwargs): + """ + The definition of the ``NotionIntegration`` object. + + :param credentials: The definition of the ``NotionCredentials`` object. + :type credentials: NotionCredentials + + :param type: The definition of the ``NotionIntegrationType`` object. + :type type: NotionIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/notion_integration_type.py b/datadog_api_client/v2/model/notion_integration_type.py new file mode 100644 index 0000000000..7fdeaa05c3 --- /dev/null +++ b/datadog_api_client/v2/model/notion_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class NotionIntegrationType(ModelSimple): + """ + The definition of the `NotionIntegrationType` object. + + :param value: If omitted defaults to "Notion". Must be one of ["Notion"]. + :type value: str + """ + + allowed_values = { + "Notion", + } + NOTION: ClassVar["NotionIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +NotionIntegrationType.NOTION = NotionIntegrationType("Notion") diff --git a/datadog_api_client/v2/model/notion_integration_update.py b/datadog_api_client/v2/model/notion_integration_update.py new file mode 100644 index 0000000000..ba014930c5 --- /dev/null +++ b/datadog_api_client/v2/model/notion_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notion_credentials_update import NotionCredentialsUpdate + from datadog_api_client.v2.model.notion_integration_type import NotionIntegrationType + from datadog_api_client.v2.model.notion_api_key_update import NotionAPIKeyUpdate + +class NotionIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notion_credentials_update import NotionCredentialsUpdate + from datadog_api_client.v2.model.notion_integration_type import NotionIntegrationType + return { + "credentials": (NotionCredentialsUpdate,), + "type": (NotionIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: NotionIntegrationType, credentials: Union[NotionCredentialsUpdate, NotionAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``NotionIntegrationUpdate`` object. + + :param credentials: The definition of the ``NotionCredentialsUpdate`` object. + :type credentials: NotionCredentialsUpdate, optional + + :param type: The definition of the ``NotionIntegrationType`` object. + :type type: NotionIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/nullable_relationship_to_user.py b/datadog_api_client/v2/model/nullable_relationship_to_user.py new file mode 100644 index 0000000000..a65235212f --- /dev/null +++ b/datadog_api_client/v2/model/nullable_relationship_to_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_relationship_to_user_data import NullableRelationshipToUserData + +class NullableRelationshipToUser(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_relationship_to_user_data import NullableRelationshipToUserData + return { + "data": (NullableRelationshipToUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[NullableRelationshipToUserData, none_type], **kwargs): + """ + Relationship to user. + + :param data: Relationship to user object. + :type data: NullableRelationshipToUserData, none_type + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/nullable_relationship_to_user_data.py b/datadog_api_client/v2/model/nullable_relationship_to_user_data.py new file mode 100644 index 0000000000..0bbf48c3a5 --- /dev/null +++ b/datadog_api_client/v2/model/nullable_relationship_to_user_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.users_type import UsersType + +class NullableRelationshipToUserData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.users_type import UsersType + return { + "id": (str,), + "type": (UsersType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UsersType, **kwargs): + """ + Relationship to user object. + + :param id: A unique identifier that represents the user. + :type id: str + + :param type: Users resource type. + :type type: UsersType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/nullable_user_relationship.py b/datadog_api_client/v2/model/nullable_user_relationship.py new file mode 100644 index 0000000000..2a3c9f3140 --- /dev/null +++ b/datadog_api_client/v2/model/nullable_user_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.nullable_user_relationship_data import NullableUserRelationshipData + +class NullableUserRelationship(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.nullable_user_relationship_data import NullableUserRelationshipData + return { + "data": (NullableUserRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[NullableUserRelationshipData, none_type], **kwargs): + """ + Relationship to user. + + :param data: Relationship to user object. + :type data: NullableUserRelationshipData, none_type + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/nullable_user_relationship_data.py b/datadog_api_client/v2/model/nullable_user_relationship_data.py new file mode 100644 index 0000000000..466e6534cd --- /dev/null +++ b/datadog_api_client/v2/model/nullable_user_relationship_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_resource_type import UserResourceType + +class NullableUserRelationshipData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_resource_type import UserResourceType + return { + "id": (str,), + "type": (UserResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserResourceType, **kwargs): + """ + Relationship to user object. + + :param id: A unique identifier that represents the user. + :type id: str + + :param type: User resource type. + :type type: UserResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/o_auth2_well_known_sites_attributes.py b/datadog_api_client/v2/model/o_auth2_well_known_sites_attributes.py new file mode 100644 index 0000000000..13e281f20f --- /dev/null +++ b/datadog_api_client/v2/model/o_auth2_well_known_sites_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OAuth2WellKnownSitesAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "sites": ([str],), + } + attribute_map = { + "sites": "sites", + } + + def __init__(self_, sites: List[str], **kwargs): + """ + Attributes containing the list of public OAuth2 sites. + + :param sites: Array of public OAuth2 site URLs for the environment. + :type sites: [str] + """ + super().__init__(kwargs) + + + self_.sites = sites diff --git a/datadog_api_client/v2/model/o_auth2_well_known_sites_data.py b/datadog_api_client/v2/model/o_auth2_well_known_sites_data.py new file mode 100644 index 0000000000..ed06e04845 --- /dev/null +++ b/datadog_api_client/v2/model/o_auth2_well_known_sites_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.o_auth2_well_known_sites_attributes import OAuth2WellKnownSitesAttributes + from datadog_api_client.v2.model.o_auth2_well_known_sites_env_type import OAuth2WellKnownSitesEnvType + +class OAuth2WellKnownSitesData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.o_auth2_well_known_sites_attributes import OAuth2WellKnownSitesAttributes + from datadog_api_client.v2.model.o_auth2_well_known_sites_env_type import OAuth2WellKnownSitesEnvType + return { + "attributes": (OAuth2WellKnownSitesAttributes,), + "id": (str,), + "type": (OAuth2WellKnownSitesEnvType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OAuth2WellKnownSitesAttributes, id: str, type: OAuth2WellKnownSitesEnvType, **kwargs): + """ + Data object containing OAuth2 well-known sites information. + + :param attributes: Attributes containing the list of public OAuth2 sites. + :type attributes: OAuth2WellKnownSitesAttributes + + :param id: Environment identifier. + :type id: str + + :param type: JSON:API resource type for OAuth2 well-known sites environment. + :type type: OAuth2WellKnownSitesEnvType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/o_auth2_well_known_sites_env_type.py b/datadog_api_client/v2/model/o_auth2_well_known_sites_env_type.py new file mode 100644 index 0000000000..41d6ba5bfa --- /dev/null +++ b/datadog_api_client/v2/model/o_auth2_well_known_sites_env_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OAuth2WellKnownSitesEnvType(ModelSimple): + """ + JSON:API resource type for OAuth2 well-known sites environment. + + :param value: If omitted defaults to "env". Must be one of ["env"]. + :type value: str + """ + + allowed_values = { + "env", + } + ENV: ClassVar["OAuth2WellKnownSitesEnvType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OAuth2WellKnownSitesEnvType.ENV = OAuth2WellKnownSitesEnvType("env") diff --git a/datadog_api_client/v2/model/o_auth2_well_known_sites_response.py b/datadog_api_client/v2/model/o_auth2_well_known_sites_response.py new file mode 100644 index 0000000000..5b3d9a9f20 --- /dev/null +++ b/datadog_api_client/v2/model/o_auth2_well_known_sites_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.o_auth2_well_known_sites_data import OAuth2WellKnownSitesData + +class OAuth2WellKnownSitesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.o_auth2_well_known_sites_data import OAuth2WellKnownSitesData + return { + "data": (OAuth2WellKnownSitesData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OAuth2WellKnownSitesData, **kwargs): + """ + Response payload containing the list of public OAuth2 sites for discovery. + + :param data: Data object containing OAuth2 well-known sites information. + :type data: OAuth2WellKnownSitesData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/o_auth_client_registration_error.py b/datadog_api_client/v2/model/o_auth_client_registration_error.py new file mode 100644 index 0000000000..8f06b122bf --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_client_registration_error.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OAuthClientRegistrationError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "error": (str,), + "error_description": (str,), + } + attribute_map = { + "error": "error", + "error_description": "error_description", + } + + def __init__(self_, error: str, error_description: str, **kwargs): + """ + Error payload returned by OAuth2 dynamic client registration as defined by RFC 7591. + + :param error: Single ASCII error code per RFC 7591, such as ``invalid_request`` or ``invalid_client_metadata``. + :type error: str + + :param error_description: Human-readable description of the error. + :type error_description: str + """ + super().__init__(kwargs) + + + self_.error = error + self_.error_description = error_description diff --git a/datadog_api_client/v2/model/o_auth_client_registration_grant_type.py b/datadog_api_client/v2/model/o_auth_client_registration_grant_type.py new file mode 100644 index 0000000000..ef2109d30b --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_client_registration_grant_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OAuthClientRegistrationGrantType(ModelSimple): + """ + OAuth 2.0 grant type that a registered client may use. + + :param value: Must be one of ["authorization_code", "refresh_token"]. + :type value: str + """ + + allowed_values = { + "authorization_code", + "refresh_token", + } + AUTHORIZATION_CODE: ClassVar["OAuthClientRegistrationGrantType"] + REFRESH_TOKEN: ClassVar["OAuthClientRegistrationGrantType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OAuthClientRegistrationGrantType.AUTHORIZATION_CODE = OAuthClientRegistrationGrantType("authorization_code") +OAuthClientRegistrationGrantType.REFRESH_TOKEN = OAuthClientRegistrationGrantType("refresh_token") diff --git a/datadog_api_client/v2/model/o_auth_client_registration_request.py b/datadog_api_client/v2/model/o_auth_client_registration_request.py new file mode 100644 index 0000000000..7784bc3723 --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_client_registration_request.py @@ -0,0 +1,146 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.o_auth_client_registration_grant_type import OAuthClientRegistrationGrantType + from datadog_api_client.v2.model.o_auth_client_registration_response_type import OAuthClientRegistrationResponseType + +class OAuthClientRegistrationRequest(ModelNormal): + validations = { + "client_name": { + "max_length": 1000, + }, + "client_uri": { + "max_length": 1000, + }, + "jwks_uri": { + "max_length": 1000, + }, + "logo_uri": { + "max_length": 1000, + }, + "policy_uri": { + "max_length": 1000, + }, + "scope": { + "max_length": 1000, + }, + "token_endpoint_auth_method": { + "max_length": 20, + }, + "tos_uri": { + "max_length": 1000, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.o_auth_client_registration_grant_type import OAuthClientRegistrationGrantType + from datadog_api_client.v2.model.o_auth_client_registration_response_type import OAuthClientRegistrationResponseType + return { + "client_name": (str,), + "client_uri": (str,), + "grant_types": ([OAuthClientRegistrationGrantType],), + "jwks_uri": (str,), + "logo_uri": (str,), + "policy_uri": (str,), + "redirect_uris": ([str],), + "response_types": ([OAuthClientRegistrationResponseType],), + "scope": (str,), + "token_endpoint_auth_method": (str,), + "tos_uri": (str,), + } + attribute_map = { + "client_name": "client_name", + "client_uri": "client_uri", + "grant_types": "grant_types", + "jwks_uri": "jwks_uri", + "logo_uri": "logo_uri", + "policy_uri": "policy_uri", + "redirect_uris": "redirect_uris", + "response_types": "response_types", + "scope": "scope", + "token_endpoint_auth_method": "token_endpoint_auth_method", + "tos_uri": "tos_uri", + } + + def __init__(self_, client_name: str, redirect_uris: List[str], client_uri: Union[str, UnsetType]=unset, grant_types: Union[List[OAuthClientRegistrationGrantType], UnsetType]=unset, jwks_uri: Union[str, UnsetType]=unset, logo_uri: Union[str, UnsetType]=unset, policy_uri: Union[str, UnsetType]=unset, response_types: Union[List[OAuthClientRegistrationResponseType], UnsetType]=unset, scope: Union[str, UnsetType]=unset, token_endpoint_auth_method: Union[str, UnsetType]=unset, tos_uri: Union[str, UnsetType]=unset, **kwargs): + """ + Request payload for OAuth2 dynamic client registration as defined by RFC 7591. + + :param client_name: Human-readable name of the client. Control characters are rejected. + :type client_name: str + + :param client_uri: URL of the home page of the client. + :type client_uri: str, optional + + :param grant_types: OAuth 2.0 grant types the client may use. + Defaults to ``authorization_code`` and ``refresh_token`` when omitted. + :type grant_types: [OAuthClientRegistrationGrantType], optional + + :param jwks_uri: URL referencing the client's JSON Web Key Set. + :type jwks_uri: str, optional + + :param logo_uri: URL referencing a logo for the client. + :type logo_uri: str, optional + + :param policy_uri: URL pointing to the client's privacy policy. + :type policy_uri: str, optional + + :param redirect_uris: Array of redirection URI strings used by the client in redirect-based flows. + :type redirect_uris: [str] + + :param response_types: OAuth 2.0 response types the client may use. Only ``code`` is supported. + :type response_types: [OAuthClientRegistrationResponseType], optional + + :param scope: Space-separated list of scope values the client may request. + :type scope: str, optional + + :param token_endpoint_auth_method: Requested authentication method for the token endpoint. Only ``none`` is supported. + :type token_endpoint_auth_method: str, optional + + :param tos_uri: URL pointing to the client's terms of service. + :type tos_uri: str, optional + """ + if client_uri is not unset: + kwargs["client_uri"] = client_uri + if grant_types is not unset: + kwargs["grant_types"] = grant_types + if jwks_uri is not unset: + kwargs["jwks_uri"] = jwks_uri + if logo_uri is not unset: + kwargs["logo_uri"] = logo_uri + if policy_uri is not unset: + kwargs["policy_uri"] = policy_uri + if response_types is not unset: + kwargs["response_types"] = response_types + if scope is not unset: + kwargs["scope"] = scope + if token_endpoint_auth_method is not unset: + kwargs["token_endpoint_auth_method"] = token_endpoint_auth_method + if tos_uri is not unset: + kwargs["tos_uri"] = tos_uri + super().__init__(kwargs) + + + self_.client_name = client_name + self_.redirect_uris = redirect_uris diff --git a/datadog_api_client/v2/model/o_auth_client_registration_response.py b/datadog_api_client/v2/model/o_auth_client_registration_response.py new file mode 100644 index 0000000000..2c7fad4a1f --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_client_registration_response.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.o_auth_client_registration_grant_type import OAuthClientRegistrationGrantType + from datadog_api_client.v2.model.o_auth_client_registration_response_type import OAuthClientRegistrationResponseType + +class OAuthClientRegistrationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.o_auth_client_registration_grant_type import OAuthClientRegistrationGrantType + from datadog_api_client.v2.model.o_auth_client_registration_response_type import OAuthClientRegistrationResponseType + return { + "client_id": (UUID,), + "client_name": (str,), + "grant_types": ([OAuthClientRegistrationGrantType],), + "redirect_uris": ([str],), + "response_types": ([OAuthClientRegistrationResponseType],), + "token_endpoint_auth_method": (str,), + } + attribute_map = { + "client_id": "client_id", + "client_name": "client_name", + "grant_types": "grant_types", + "redirect_uris": "redirect_uris", + "response_types": "response_types", + "token_endpoint_auth_method": "token_endpoint_auth_method", + } + + def __init__(self_, client_id: UUID, client_name: str, grant_types: List[OAuthClientRegistrationGrantType], redirect_uris: List[str], response_types: List[OAuthClientRegistrationResponseType], token_endpoint_auth_method: str, **kwargs): + """ + Response payload for a successful OAuth2 dynamic client registration as defined by RFC 7591. + + :param client_id: Unique identifier assigned to the registered client. + :type client_id: UUID + + :param client_name: Human-readable name of the client. + :type client_name: str + + :param grant_types: OAuth 2.0 grant types registered for the client. + :type grant_types: [OAuthClientRegistrationGrantType] + + :param redirect_uris: Redirection URIs registered for the client. + :type redirect_uris: [str] + + :param response_types: OAuth 2.0 response types registered for the client. + :type response_types: [OAuthClientRegistrationResponseType] + + :param token_endpoint_auth_method: Authentication method registered for the token endpoint. Always ``none``. + :type token_endpoint_auth_method: str + """ + super().__init__(kwargs) + + + self_.client_id = client_id + self_.client_name = client_name + self_.grant_types = grant_types + self_.redirect_uris = redirect_uris + self_.response_types = response_types + self_.token_endpoint_auth_method = token_endpoint_auth_method diff --git a/datadog_api_client/v2/model/o_auth_client_registration_response_type.py b/datadog_api_client/v2/model/o_auth_client_registration_response_type.py new file mode 100644 index 0000000000..549ae68ee3 --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_client_registration_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OAuthClientRegistrationResponseType(ModelSimple): + """ + OAuth 2.0 response type that a registered client may use. + + :param value: If omitted defaults to "code". Must be one of ["code"]. + :type value: str + """ + + allowed_values = { + "code", + } + CODE: ClassVar["OAuthClientRegistrationResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OAuthClientRegistrationResponseType.CODE = OAuthClientRegistrationResponseType("code") diff --git a/datadog_api_client/v2/model/o_auth_oidc_scope.py b/datadog_api_client/v2/model/o_auth_oidc_scope.py new file mode 100644 index 0000000000..6f865a83e3 --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_oidc_scope.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OAuthOidcScope(ModelSimple): + """ + OIDC scope a client may be restricted to. + + :param value: Must be one of ["openid", "profile", "email", "offline_access"]. + :type value: str + """ + + allowed_values = { + "openid", + "profile", + "email", + "offline_access", + } + OPENID: ClassVar["OAuthOidcScope"] + PROFILE: ClassVar["OAuthOidcScope"] + EMAIL: ClassVar["OAuthOidcScope"] + OFFLINE_ACCESS: ClassVar["OAuthOidcScope"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OAuthOidcScope.OPENID = OAuthOidcScope("openid") +OAuthOidcScope.PROFILE = OAuthOidcScope("profile") +OAuthOidcScope.EMAIL = OAuthOidcScope("email") +OAuthOidcScope.OFFLINE_ACCESS = OAuthOidcScope("offline_access") diff --git a/datadog_api_client/v2/model/o_auth_scopes_restriction.py b/datadog_api_client/v2/model/o_auth_scopes_restriction.py new file mode 100644 index 0000000000..b462991ee0 --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_scopes_restriction.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.o_auth_oidc_scope import OAuthOidcScope + +class OAuthScopesRestriction(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.o_auth_oidc_scope import OAuthOidcScope + return { + "oidc_scopes": ([OAuthOidcScope],), + "permission_scopes": ([str],), + } + attribute_map = { + "oidc_scopes": "oidc_scopes", + "permission_scopes": "permission_scopes", + } + + def __init__(self_, oidc_scopes: List[OAuthOidcScope], permission_scopes: List[str], **kwargs): + """ + Allowlist of OIDC and permission scopes enforced for the OAuth2 client. + + :param oidc_scopes: OIDC scopes the client is restricted to. + :type oidc_scopes: [OAuthOidcScope] + + :param permission_scopes: Datadog permission scopes the client is restricted to. + :type permission_scopes: [str] + """ + super().__init__(kwargs) + + + self_.oidc_scopes = oidc_scopes + self_.permission_scopes = permission_scopes diff --git a/datadog_api_client/v2/model/o_auth_scopes_restriction_response.py b/datadog_api_client/v2/model/o_auth_scopes_restriction_response.py new file mode 100644 index 0000000000..8ad05d0fda --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_scopes_restriction_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.o_auth_scopes_restriction_response_data import OAuthScopesRestrictionResponseData + +class OAuthScopesRestrictionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.o_auth_scopes_restriction_response_data import OAuthScopesRestrictionResponseData + return { + "data": (OAuthScopesRestrictionResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OAuthScopesRestrictionResponseData, **kwargs): + """ + Response payload describing the scopes restriction of an OAuth2 client. + + :param data: Data object of an OAuth2 client scopes restriction response. + :type data: OAuthScopesRestrictionResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/o_auth_scopes_restriction_response_attributes.py b/datadog_api_client/v2/model/o_auth_scopes_restriction_response_attributes.py new file mode 100644 index 0000000000..cd30139b89 --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_scopes_restriction_response_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.o_auth_scopes_restriction import OAuthScopesRestriction + +class OAuthScopesRestrictionResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.o_auth_scopes_restriction import OAuthScopesRestriction + return { + "required_permission_scopes": ([str], none_type), + "scopes_restriction": (OAuthScopesRestriction,), + } + attribute_map = { + "required_permission_scopes": "required_permission_scopes", + "scopes_restriction": "scopes_restriction", + } + + def __init__(self_, required_permission_scopes: Union[List[str], none_type], scopes_restriction: Union[OAuthScopesRestriction, none_type], **kwargs): + """ + Attributes of an OAuth2 client scopes restriction. + + :param required_permission_scopes: Permission scopes automatically required for this client (for example, mobile-app permission scopes). + Returns ``null`` when no scopes are required. + :type required_permission_scopes: [str], none_type + + :param scopes_restriction: Allowlist of OIDC and permission scopes enforced for the OAuth2 client. + :type scopes_restriction: OAuthScopesRestriction, none_type + """ + super().__init__(kwargs) + + + self_.required_permission_scopes = required_permission_scopes + self_.scopes_restriction = scopes_restriction diff --git a/datadog_api_client/v2/model/o_auth_scopes_restriction_response_data.py b/datadog_api_client/v2/model/o_auth_scopes_restriction_response_data.py new file mode 100644 index 0000000000..d752529ae5 --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_scopes_restriction_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.o_auth_scopes_restriction_response_attributes import OAuthScopesRestrictionResponseAttributes + from datadog_api_client.v2.model.o_auth_scopes_restriction_type import OAuthScopesRestrictionType + +class OAuthScopesRestrictionResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.o_auth_scopes_restriction_response_attributes import OAuthScopesRestrictionResponseAttributes + from datadog_api_client.v2.model.o_auth_scopes_restriction_type import OAuthScopesRestrictionType + return { + "attributes": (OAuthScopesRestrictionResponseAttributes,), + "id": (UUID,), + "type": (OAuthScopesRestrictionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OAuthScopesRestrictionResponseAttributes, id: UUID, type: OAuthScopesRestrictionType, **kwargs): + """ + Data object of an OAuth2 client scopes restriction response. + + :param attributes: Attributes of an OAuth2 client scopes restriction. + :type attributes: OAuthScopesRestrictionResponseAttributes + + :param id: UUID of the OAuth2 client this restriction applies to. + :type id: UUID + + :param type: JSON:API resource type for an OAuth2 client scopes restriction. + :type type: OAuthScopesRestrictionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/o_auth_scopes_restriction_type.py b/datadog_api_client/v2/model/o_auth_scopes_restriction_type.py new file mode 100644 index 0000000000..0c251e2f19 --- /dev/null +++ b/datadog_api_client/v2/model/o_auth_scopes_restriction_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OAuthScopesRestrictionType(ModelSimple): + """ + JSON:API resource type for an OAuth2 client scopes restriction. + + :param value: If omitted defaults to "scopes_restriction". Must be one of ["scopes_restriction"]. + :type value: str + """ + + allowed_values = { + "scopes_restriction", + } + SCOPES_RESTRICTION: ClassVar["OAuthScopesRestrictionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OAuthScopesRestrictionType.SCOPES_RESTRICTION = OAuthScopesRestrictionType("scopes_restriction") diff --git a/datadog_api_client/v2/model/observability_pipeline.py b/datadog_api_client/v2/model/observability_pipeline.py new file mode 100644 index 0000000000..48e98388fb --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline.py @@ -0,0 +1,120 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_data import ObservabilityPipelineData + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination import ObservabilityPipelineElasticsearchDestination + from datadog_api_client.v2.model.observability_pipeline_http_client_destination import ObservabilityPipelineHttpClientDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination import ObservabilityPipelineAmazonOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination import ObservabilityPipelineAmazonS3Destination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination import ObservabilityPipelineAmazonS3GenericDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination import ObservabilityPipelineAmazonSecurityLakeDestination + from datadog_api_client.v2.model.azure_storage_destination import AzureStorageDestination + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination import ObservabilityPipelineClickhouseDestination + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination import ObservabilityPipelineCloudPremDestination + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination import ObservabilityPipelineCrowdStrikeNextGenSiemDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination import ObservabilityPipelineDatadogLogsDestination + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination import ObservabilityPipelineGoogleChronicleDestination + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination import ObservabilityPipelineGoogleCloudStorageDestination + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination import ObservabilityPipelineGooglePubSubDestination + from datadog_api_client.v2.model.observability_pipeline_kafka_destination import ObservabilityPipelineKafkaDestination + from datadog_api_client.v2.model.microsoft_sentinel_destination import MicrosoftSentinelDestination + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination import ObservabilityPipelineNewRelicDestination + from datadog_api_client.v2.model.observability_pipeline_open_search_destination import ObservabilityPipelineOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination import ObservabilityPipelineRsyslogDestination + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination import ObservabilityPipelineSentinelOneDestination + from datadog_api_client.v2.model.observability_pipeline_socket_destination import ObservabilityPipelineSocketDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination import ObservabilityPipelineSplunkHecDestination + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination import ObservabilityPipelineSumoLogicDestination + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination import ObservabilityPipelineSyslogNgDestination + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination import ObservabilityPipelineDatabricksZerobusDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import ObservabilityPipelineDatadogMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination import ObservabilityPipelineSplunkHecMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor + from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor + from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor + from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor + from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor + from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source import ObservabilityPipelineDatadogAgentSource + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source import ObservabilityPipelineAmazonDataFirehoseSource + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source import ObservabilityPipelineAmazonS3Source + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source import ObservabilityPipelineFluentBitSource + from datadog_api_client.v2.model.observability_pipeline_fluentd_source import ObservabilityPipelineFluentdSource + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source import ObservabilityPipelineGooglePubSubSource + from datadog_api_client.v2.model.observability_pipeline_http_client_source import ObservabilityPipelineHttpClientSource + from datadog_api_client.v2.model.observability_pipeline_http_server_source import ObservabilityPipelineHttpServerSource + from datadog_api_client.v2.model.observability_pipeline_kafka_source import ObservabilityPipelineKafkaSource + from datadog_api_client.v2.model.observability_pipeline_logstash_source import ObservabilityPipelineLogstashSource + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source import ObservabilityPipelineRsyslogSource + from datadog_api_client.v2.model.observability_pipeline_socket_source import ObservabilityPipelineSocketSource + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source import ObservabilityPipelineSplunkHecSource + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source import ObservabilityPipelineSplunkTcpSource + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source import ObservabilityPipelineSumoLogicSource + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source import ObservabilityPipelineSyslogNgSource + from datadog_api_client.v2.model.observability_pipeline_websocket_source import ObservabilityPipelineWebsocketSource + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import ObservabilityPipelineOpentelemetrySource + +class ObservabilityPipeline(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_data import ObservabilityPipelineData + return { + "data": (ObservabilityPipelineData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ObservabilityPipelineData, **kwargs): + """ + Top-level schema representing a pipeline. + + :param data: Contains the pipeline’s ID, type, and configuration attributes. + :type data: ObservabilityPipelineData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/observability_pipeline_add_env_vars_processor.py b/datadog_api_client/v2/model/observability_pipeline_add_env_vars_processor.py new file mode 100644 index 0000000000..fa7e10505d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_add_env_vars_processor.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor_type import ObservabilityPipelineAddEnvVarsProcessorType + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor_variable import ObservabilityPipelineAddEnvVarsProcessorVariable + +class ObservabilityPipelineAddEnvVarsProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor_type import ObservabilityPipelineAddEnvVarsProcessorType + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor_variable import ObservabilityPipelineAddEnvVarsProcessorVariable + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "type": (ObservabilityPipelineAddEnvVarsProcessorType,), + "variables": ([ObservabilityPipelineAddEnvVarsProcessorVariable],), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "type": "type", + "variables": "variables", + } + + def __init__(self_, enabled: bool, id: str, include: str, type: ObservabilityPipelineAddEnvVarsProcessorType, variables: List[ObservabilityPipelineAddEnvVarsProcessorVariable], display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``add_env_vars`` processor adds environment variable values to log events. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used to reference this processor in the pipeline. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param type: The processor type. The value should always be ``add_env_vars``. + :type type: ObservabilityPipelineAddEnvVarsProcessorType + + :param variables: A list of environment variable mappings to apply to log fields. + :type variables: [ObservabilityPipelineAddEnvVarsProcessorVariable] + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.type = type + self_.variables = variables diff --git a/datadog_api_client/v2/model/observability_pipeline_add_env_vars_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_add_env_vars_processor_type.py new file mode 100644 index 0000000000..1590c61885 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_add_env_vars_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAddEnvVarsProcessorType(ModelSimple): + """ + The processor type. The value should always be `add_env_vars`. + + :param value: If omitted defaults to "add_env_vars". Must be one of ["add_env_vars"]. + :type value: str + """ + + allowed_values = { + "add_env_vars", + } + ADD_ENV_VARS: ClassVar["ObservabilityPipelineAddEnvVarsProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAddEnvVarsProcessorType.ADD_ENV_VARS = ObservabilityPipelineAddEnvVarsProcessorType("add_env_vars") diff --git a/datadog_api_client/v2/model/observability_pipeline_add_env_vars_processor_variable.py b/datadog_api_client/v2/model/observability_pipeline_add_env_vars_processor_variable.py new file mode 100644 index 0000000000..f6418d7a33 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_add_env_vars_processor_variable.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineAddEnvVarsProcessorVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "field": (str,), + "name": (str,), + } + attribute_map = { + "field": "field", + "name": "name", + } + + def __init__(self_, field: str, name: str, **kwargs): + """ + Defines a mapping between an environment variable and a log field. + + :param field: The target field in the log event. + :type field: str + + :param name: The name of the environment variable to read. + :type name: str + """ + super().__init__(kwargs) + + + self_.field = field + self_.name = name diff --git a/datadog_api_client/v2/model/observability_pipeline_add_fields_processor.py b/datadog_api_client/v2/model/observability_pipeline_add_fields_processor.py new file mode 100644 index 0000000000..1935cc84c6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_add_fields_processor.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_field_value import ObservabilityPipelineFieldValue + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor_type import ObservabilityPipelineAddFieldsProcessorType + +class ObservabilityPipelineAddFieldsProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_field_value import ObservabilityPipelineFieldValue + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor_type import ObservabilityPipelineAddFieldsProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "fields": ([ObservabilityPipelineFieldValue],), + "id": (str,), + "include": (str,), + "type": (ObservabilityPipelineAddFieldsProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "fields": "fields", + "id": "id", + "include": "include", + "type": "type", + } + + def __init__(self_, enabled: bool, fields: List[ObservabilityPipelineFieldValue], id: str, include: str, type: ObservabilityPipelineAddFieldsProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``add_fields`` processor adds static key-value fields to logs. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param fields: A list of static fields (key-value pairs) that is added to each log event processed by this component. + :type fields: [ObservabilityPipelineFieldValue] + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param type: The processor type. The value should always be ``add_fields``. + :type type: ObservabilityPipelineAddFieldsProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.fields = fields + self_.id = id + self_.include = include + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_add_fields_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_add_fields_processor_type.py new file mode 100644 index 0000000000..536f0d4b69 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_add_fields_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAddFieldsProcessorType(ModelSimple): + """ + The processor type. The value should always be `add_fields`. + + :param value: If omitted defaults to "add_fields". Must be one of ["add_fields"]. + :type value: str + """ + + allowed_values = { + "add_fields", + } + ADD_FIELDS: ClassVar["ObservabilityPipelineAddFieldsProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAddFieldsProcessorType.ADD_FIELDS = ObservabilityPipelineAddFieldsProcessorType("add_fields") diff --git a/datadog_api_client/v2/model/observability_pipeline_add_hostname_processor.py b/datadog_api_client/v2/model/observability_pipeline_add_hostname_processor.py new file mode 100644 index 0000000000..4cacceeac3 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_add_hostname_processor.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor_type import ObservabilityPipelineAddHostnameProcessorType + +class ObservabilityPipelineAddHostnameProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor_type import ObservabilityPipelineAddHostnameProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "type": (ObservabilityPipelineAddHostnameProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, type: ObservabilityPipelineAddHostnameProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``add_hostname`` processor adds the hostname to log events. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param type: The processor type. The value should always be ``add_hostname``. + :type type: ObservabilityPipelineAddHostnameProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_add_hostname_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_add_hostname_processor_type.py new file mode 100644 index 0000000000..5bc4aea441 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_add_hostname_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAddHostnameProcessorType(ModelSimple): + """ + The processor type. The value should always be `add_hostname`. + + :param value: If omitted defaults to "add_hostname". Must be one of ["add_hostname"]. + :type value: str + """ + + allowed_values = { + "add_hostname", + } + ADD_HOSTNAME: ClassVar["ObservabilityPipelineAddHostnameProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAddHostnameProcessorType.ADD_HOSTNAME = ObservabilityPipelineAddHostnameProcessorType("add_hostname") diff --git a/datadog_api_client/v2/model/observability_pipeline_add_metric_tags_processor.py b/datadog_api_client/v2/model/observability_pipeline_add_metric_tags_processor.py new file mode 100644 index 0000000000..e3c7bed7a6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_add_metric_tags_processor.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_field_value import ObservabilityPipelineFieldValue + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor_type import ObservabilityPipelineAddMetricTagsProcessorType + +class ObservabilityPipelineAddMetricTagsProcessor(ModelNormal): + validations = { + "tags": { + "max_items": 15, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_field_value import ObservabilityPipelineFieldValue + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor_type import ObservabilityPipelineAddMetricTagsProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "tags": ([ObservabilityPipelineFieldValue],), + "type": (ObservabilityPipelineAddMetricTagsProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "tags": "tags", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, tags: List[ObservabilityPipelineFieldValue], type: ObservabilityPipelineAddMetricTagsProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``add_metric_tags`` processor adds static tags to metrics. + + **Supported pipeline types:** metrics + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which metrics this processor targets. + :type include: str + + :param tags: A list of static tags (key-value pairs) added to each metric processed by this component. + :type tags: [ObservabilityPipelineFieldValue] + + :param type: The processor type. The value must be ``add_metric_tags``. + :type type: ObservabilityPipelineAddMetricTagsProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.tags = tags + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_add_metric_tags_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_add_metric_tags_processor_type.py new file mode 100644 index 0000000000..72390593fe --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_add_metric_tags_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAddMetricTagsProcessorType(ModelSimple): + """ + The processor type. The value must be `add_metric_tags`. + + :param value: If omitted defaults to "add_metric_tags". Must be one of ["add_metric_tags"]. + :type value: str + """ + + allowed_values = { + "add_metric_tags", + } + ADD_METRIC_TAGS: ClassVar["ObservabilityPipelineAddMetricTagsProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAddMetricTagsProcessorType.ADD_METRIC_TAGS = ObservabilityPipelineAddMetricTagsProcessorType("add_metric_tags") diff --git a/datadog_api_client/v2/model/observability_pipeline_aggregate_processor.py b/datadog_api_client/v2/model/observability_pipeline_aggregate_processor.py new file mode 100644 index 0000000000..d6857aad2c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_aggregate_processor.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor_mode import ObservabilityPipelineAggregateProcessorMode + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor_type import ObservabilityPipelineAggregateProcessorType + +class ObservabilityPipelineAggregateProcessor(ModelNormal): + validations = { + "interval_secs": { + "inclusive_maximum": 60, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor_mode import ObservabilityPipelineAggregateProcessorMode + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor_type import ObservabilityPipelineAggregateProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "interval_secs": (int,), + "mode": (ObservabilityPipelineAggregateProcessorMode,), + "type": (ObservabilityPipelineAggregateProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "interval_secs": "interval_secs", + "mode": "mode", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, interval_secs: int, mode: ObservabilityPipelineAggregateProcessorMode, type: ObservabilityPipelineAggregateProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``aggregate`` processor combines metrics that share the same name and tags into a single metric over a configurable interval. + + **Supported pipeline types:** metrics + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which metrics this processor targets. + :type include: str + + :param interval_secs: The interval, in seconds, over which metrics are aggregated. + :type interval_secs: int + + :param mode: The aggregation mode applied to metrics that share the same name and tags within the interval. + :type mode: ObservabilityPipelineAggregateProcessorMode + + :param type: The processor type. The value must be ``aggregate``. + :type type: ObservabilityPipelineAggregateProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.interval_secs = interval_secs + self_.mode = mode + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_aggregate_processor_mode.py b/datadog_api_client/v2/model/observability_pipeline_aggregate_processor_mode.py new file mode 100644 index 0000000000..4157b31054 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_aggregate_processor_mode.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAggregateProcessorMode(ModelSimple): + """ + The aggregation mode applied to metrics that share the same name and tags within the interval. + + :param value: Must be one of ["auto", "sum", "latest", "count", "max", "min", "mean"]. + :type value: str + """ + + allowed_values = { + "auto", + "sum", + "latest", + "count", + "max", + "min", + "mean", + } + AUTO: ClassVar["ObservabilityPipelineAggregateProcessorMode"] + SUM: ClassVar["ObservabilityPipelineAggregateProcessorMode"] + LATEST: ClassVar["ObservabilityPipelineAggregateProcessorMode"] + COUNT: ClassVar["ObservabilityPipelineAggregateProcessorMode"] + MAX: ClassVar["ObservabilityPipelineAggregateProcessorMode"] + MIN: ClassVar["ObservabilityPipelineAggregateProcessorMode"] + MEAN: ClassVar["ObservabilityPipelineAggregateProcessorMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAggregateProcessorMode.AUTO = ObservabilityPipelineAggregateProcessorMode("auto") +ObservabilityPipelineAggregateProcessorMode.SUM = ObservabilityPipelineAggregateProcessorMode("sum") +ObservabilityPipelineAggregateProcessorMode.LATEST = ObservabilityPipelineAggregateProcessorMode("latest") +ObservabilityPipelineAggregateProcessorMode.COUNT = ObservabilityPipelineAggregateProcessorMode("count") +ObservabilityPipelineAggregateProcessorMode.MAX = ObservabilityPipelineAggregateProcessorMode("max") +ObservabilityPipelineAggregateProcessorMode.MIN = ObservabilityPipelineAggregateProcessorMode("min") +ObservabilityPipelineAggregateProcessorMode.MEAN = ObservabilityPipelineAggregateProcessorMode("mean") diff --git a/datadog_api_client/v2/model/observability_pipeline_aggregate_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_aggregate_processor_type.py new file mode 100644 index 0000000000..3548557866 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_aggregate_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAggregateProcessorType(ModelSimple): + """ + The processor type. The value must be `aggregate`. + + :param value: If omitted defaults to "aggregate". Must be one of ["aggregate"]. + :type value: str + """ + + allowed_values = { + "aggregate", + } + AGGREGATE: ClassVar["ObservabilityPipelineAggregateProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAggregateProcessorType.AGGREGATE = ObservabilityPipelineAggregateProcessorType("aggregate") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_data_firehose_source.py b/datadog_api_client/v2/model/observability_pipeline_amazon_data_firehose_source.py new file mode 100644 index 0000000000..331d0df15f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_data_firehose_source.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source_type import ObservabilityPipelineAmazonDataFirehoseSourceType + +class ObservabilityPipelineAmazonDataFirehoseSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source_type import ObservabilityPipelineAmazonDataFirehoseSourceType + return { + "address_key": (str,), + "auth": (ObservabilityPipelineAwsAuth,), + "id": (str,), + "tls": (ObservabilityPipelineTls,), + "type": (ObservabilityPipelineAmazonDataFirehoseSourceType,), + } + attribute_map = { + "address_key": "address_key", + "auth": "auth", + "id": "id", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, type: ObservabilityPipelineAmazonDataFirehoseSourceType, address_key: Union[str, UnsetType]=unset, auth: Union[ObservabilityPipelineAwsAuth, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``amazon_data_firehose`` source ingests logs from AWS Data Firehose. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the Firehose delivery stream address. + :type address_key: str, optional + + :param auth: AWS authentication credentials used for accessing AWS services such as S3. + If omitted, the system’s default credentials are used (for example, the IAM role and environment variables). + :type auth: ObservabilityPipelineAwsAuth, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The source type. The value should always be ``amazon_data_firehose``. + :type type: ObservabilityPipelineAmazonDataFirehoseSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if auth is not unset: + kwargs["auth"] = auth + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_data_firehose_source_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_data_firehose_source_type.py new file mode 100644 index 0000000000..1b82faa8be --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_data_firehose_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonDataFirehoseSourceType(ModelSimple): + """ + The source type. The value should always be `amazon_data_firehose`. + + :param value: If omitted defaults to "amazon_data_firehose". Must be one of ["amazon_data_firehose"]. + :type value: str + """ + + allowed_values = { + "amazon_data_firehose", + } + AMAZON_DATA_FIREHOSE: ClassVar["ObservabilityPipelineAmazonDataFirehoseSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonDataFirehoseSourceType.AMAZON_DATA_FIREHOSE = ObservabilityPipelineAmazonDataFirehoseSourceType("amazon_data_firehose") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination.py b/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination.py new file mode 100644 index 0000000000..8c839c6152 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_auth import ObservabilityPipelineAmazonOpenSearchDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_type import ObservabilityPipelineAmazonOpenSearchDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineAmazonOpenSearchDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_auth import ObservabilityPipelineAmazonOpenSearchDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_type import ObservabilityPipelineAmazonOpenSearchDestinationType + return { + "auth": (ObservabilityPipelineAmazonOpenSearchDestinationAuth,), + "buffer": (ObservabilityPipelineBufferOptions,), + "bulk_index": (str,), + "id": (str,), + "inputs": ([str],), + "type": (ObservabilityPipelineAmazonOpenSearchDestinationType,), + } + attribute_map = { + "auth": "auth", + "buffer": "buffer", + "bulk_index": "bulk_index", + "id": "id", + "inputs": "inputs", + "type": "type", + } + + def __init__(self_, auth: ObservabilityPipelineAmazonOpenSearchDestinationAuth, id: str, inputs: List[str], type: ObservabilityPipelineAmazonOpenSearchDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, bulk_index: Union[str, UnsetType]=unset, **kwargs): + """ + The ``amazon_opensearch`` destination writes logs to Amazon OpenSearch. + + **Supported pipeline types:** logs + + :param auth: Authentication settings for the Amazon OpenSearch destination. + The ``strategy`` field determines whether basic or AWS-based authentication is used. + :type auth: ObservabilityPipelineAmazonOpenSearchDestinationAuth + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param bulk_index: The index to write logs to. + :type bulk_index: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param type: The destination type. The value should always be ``amazon_opensearch``. + :type type: ObservabilityPipelineAmazonOpenSearchDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if bulk_index is not unset: + kwargs["bulk_index"] = bulk_index + super().__init__(kwargs) + + + self_.auth = auth + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination_auth.py b/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination_auth.py new file mode 100644 index 0000000000..59f7542018 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination_auth.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_auth_strategy import ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy + +class ObservabilityPipelineAmazonOpenSearchDestinationAuth(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_auth_strategy import ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy + return { + "assume_role": (str,), + "aws_region": (str,), + "external_id": (str,), + "session_name": (str,), + "strategy": (ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy,), + } + attribute_map = { + "assume_role": "assume_role", + "aws_region": "aws_region", + "external_id": "external_id", + "session_name": "session_name", + "strategy": "strategy", + } + + def __init__(self_, strategy: ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy, assume_role: Union[str, UnsetType]=unset, aws_region: Union[str, UnsetType]=unset, external_id: Union[str, UnsetType]=unset, session_name: Union[str, UnsetType]=unset, **kwargs): + """ + Authentication settings for the Amazon OpenSearch destination. + The ``strategy`` field determines whether basic or AWS-based authentication is used. + + :param assume_role: The ARN of the role to assume (used with ``aws`` strategy). + :type assume_role: str, optional + + :param aws_region: AWS region + :type aws_region: str, optional + + :param external_id: External ID for the assumed role (used with ``aws`` strategy). + :type external_id: str, optional + + :param session_name: Session name for the assumed role (used with ``aws`` strategy). + :type session_name: str, optional + + :param strategy: The authentication strategy to use. + :type strategy: ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy + """ + if assume_role is not unset: + kwargs["assume_role"] = assume_role + if aws_region is not unset: + kwargs["aws_region"] = aws_region + if external_id is not unset: + kwargs["external_id"] = external_id + if session_name is not unset: + kwargs["session_name"] = session_name + super().__init__(kwargs) + + + self_.strategy = strategy diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination_auth_strategy.py b/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination_auth_strategy.py new file mode 100644 index 0000000000..4f77b41f63 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination_auth_strategy.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy(ModelSimple): + """ + The authentication strategy to use. + + :param value: Must be one of ["basic", "aws"]. + :type value: str + """ + + allowed_values = { + "basic", + "aws", + } + BASIC: ClassVar["ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy"] + AWS: ClassVar["ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy.BASIC = ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy("basic") +ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy.AWS = ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy("aws") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination_type.py new file mode 100644 index 0000000000..dd88ad5f61 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_open_search_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonOpenSearchDestinationType(ModelSimple): + """ + The destination type. The value should always be `amazon_opensearch`. + + :param value: If omitted defaults to "amazon_opensearch". Must be one of ["amazon_opensearch"]. + :type value: str + """ + + allowed_values = { + "amazon_opensearch", + } + AMAZON_OPENSEARCH: ClassVar["ObservabilityPipelineAmazonOpenSearchDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonOpenSearchDestinationType.AMAZON_OPENSEARCH = ObservabilityPipelineAmazonOpenSearchDestinationType("amazon_opensearch") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination.py new file mode 100644 index 0000000000..43559bd87b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination.py @@ -0,0 +1,137 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_server_side_encryption import ObservabilityPipelineAmazonS3DestinationServerSideEncryption + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_storage_class import ObservabilityPipelineAmazonS3DestinationStorageClass + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_type import ObservabilityPipelineAmazonS3DestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineAmazonS3Destination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_server_side_encryption import ObservabilityPipelineAmazonS3DestinationServerSideEncryption + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_storage_class import ObservabilityPipelineAmazonS3DestinationStorageClass + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_type import ObservabilityPipelineAmazonS3DestinationType + return { + "auth": (ObservabilityPipelineAwsAuth,), + "bucket": (str,), + "buffer": (ObservabilityPipelineBufferOptions,), + "id": (str,), + "inputs": ([str],), + "key_prefix": (str,), + "region": (str,), + "server_side_encryption": (ObservabilityPipelineAmazonS3DestinationServerSideEncryption,), + "ssekms_key_id": (str,), + "storage_class": (ObservabilityPipelineAmazonS3DestinationStorageClass,), + "tls": (ObservabilityPipelineTls,), + "type": (ObservabilityPipelineAmazonS3DestinationType,), + } + attribute_map = { + "auth": "auth", + "bucket": "bucket", + "buffer": "buffer", + "id": "id", + "inputs": "inputs", + "key_prefix": "key_prefix", + "region": "region", + "server_side_encryption": "server_side_encryption", + "ssekms_key_id": "ssekms_key_id", + "storage_class": "storage_class", + "tls": "tls", + "type": "type", + } + + def __init__(self_, bucket: str, id: str, inputs: List[str], region: str, storage_class: ObservabilityPipelineAmazonS3DestinationStorageClass, type: ObservabilityPipelineAmazonS3DestinationType, auth: Union[ObservabilityPipelineAwsAuth, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, key_prefix: Union[str, UnsetType]=unset, server_side_encryption: Union[ObservabilityPipelineAmazonS3DestinationServerSideEncryption, UnsetType]=unset, ssekms_key_id: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``amazon_s3`` destination sends your logs in Datadog-rehydratable format to an Amazon S3 bucket for archiving. + + **Supported pipeline types:** logs + + :param auth: AWS authentication credentials used for accessing AWS services such as S3. + If omitted, the system’s default credentials are used (for example, the IAM role and environment variables). + :type auth: ObservabilityPipelineAwsAuth, optional + + :param bucket: S3 bucket name. + :type bucket: str + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param id: Unique identifier for the destination component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param key_prefix: Optional prefix for object keys. + :type key_prefix: str, optional + + :param region: AWS region of the S3 bucket. + :type region: str + + :param server_side_encryption: Server-side encryption type for Amazon S3. + :type server_side_encryption: ObservabilityPipelineAmazonS3DestinationServerSideEncryption, optional + + :param ssekms_key_id: The AWS KMS key ID used for SSE-KMS encryption. + Only applies when ``server_side_encryption`` is set to ``aws:kms``. + :type ssekms_key_id: str, optional + + :param storage_class: S3 storage class. + :type storage_class: ObservabilityPipelineAmazonS3DestinationStorageClass + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The destination type. Always ``amazon_s3``. + :type type: ObservabilityPipelineAmazonS3DestinationType + """ + if auth is not unset: + kwargs["auth"] = auth + if buffer is not unset: + kwargs["buffer"] = buffer + if key_prefix is not unset: + kwargs["key_prefix"] = key_prefix + if server_side_encryption is not unset: + kwargs["server_side_encryption"] = server_side_encryption + if ssekms_key_id is not unset: + kwargs["ssekms_key_id"] = ssekms_key_id + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.bucket = bucket + self_.id = id + self_.inputs = inputs + self_.region = region + self_.storage_class = storage_class + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination_server_side_encryption.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination_server_side_encryption.py new file mode 100644 index 0000000000..02bd275160 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination_server_side_encryption.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3DestinationServerSideEncryption(ModelSimple): + """ + Server-side encryption type for Amazon S3. + + :param value: Must be one of ["aws:kms", "AES256"]. + :type value: str + """ + + allowed_values = { + "aws:kms", + "AES256", + } + AWS_KMS: ClassVar["ObservabilityPipelineAmazonS3DestinationServerSideEncryption"] + AES256: ClassVar["ObservabilityPipelineAmazonS3DestinationServerSideEncryption"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3DestinationServerSideEncryption.AWS_KMS = ObservabilityPipelineAmazonS3DestinationServerSideEncryption("aws:kms") +ObservabilityPipelineAmazonS3DestinationServerSideEncryption.AES256 = ObservabilityPipelineAmazonS3DestinationServerSideEncryption("AES256") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination_storage_class.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination_storage_class.py new file mode 100644 index 0000000000..d0e04ac232 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination_storage_class.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3DestinationStorageClass(ModelSimple): + """ + S3 storage class. + + :param value: Must be one of ["STANDARD", "REDUCED_REDUNDANCY", "INTELLIGENT_TIERING", "STANDARD_IA", "EXPRESS_ONEZONE", "ONEZONE_IA", "GLACIER", "GLACIER_IR", "DEEP_ARCHIVE"]. + :type value: str + """ + + allowed_values = { + "STANDARD", + "REDUCED_REDUNDANCY", + "INTELLIGENT_TIERING", + "STANDARD_IA", + "EXPRESS_ONEZONE", + "ONEZONE_IA", + "GLACIER", + "GLACIER_IR", + "DEEP_ARCHIVE", + } + STANDARD: ClassVar["ObservabilityPipelineAmazonS3DestinationStorageClass"] + REDUCED_REDUNDANCY: ClassVar["ObservabilityPipelineAmazonS3DestinationStorageClass"] + INTELLIGENT_TIERING: ClassVar["ObservabilityPipelineAmazonS3DestinationStorageClass"] + STANDARD_IA: ClassVar["ObservabilityPipelineAmazonS3DestinationStorageClass"] + EXPRESS_ONEZONE: ClassVar["ObservabilityPipelineAmazonS3DestinationStorageClass"] + ONEZONE_IA: ClassVar["ObservabilityPipelineAmazonS3DestinationStorageClass"] + GLACIER: ClassVar["ObservabilityPipelineAmazonS3DestinationStorageClass"] + GLACIER_IR: ClassVar["ObservabilityPipelineAmazonS3DestinationStorageClass"] + DEEP_ARCHIVE: ClassVar["ObservabilityPipelineAmazonS3DestinationStorageClass"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3DestinationStorageClass.STANDARD = ObservabilityPipelineAmazonS3DestinationStorageClass("STANDARD") +ObservabilityPipelineAmazonS3DestinationStorageClass.REDUCED_REDUNDANCY = ObservabilityPipelineAmazonS3DestinationStorageClass("REDUCED_REDUNDANCY") +ObservabilityPipelineAmazonS3DestinationStorageClass.INTELLIGENT_TIERING = ObservabilityPipelineAmazonS3DestinationStorageClass("INTELLIGENT_TIERING") +ObservabilityPipelineAmazonS3DestinationStorageClass.STANDARD_IA = ObservabilityPipelineAmazonS3DestinationStorageClass("STANDARD_IA") +ObservabilityPipelineAmazonS3DestinationStorageClass.EXPRESS_ONEZONE = ObservabilityPipelineAmazonS3DestinationStorageClass("EXPRESS_ONEZONE") +ObservabilityPipelineAmazonS3DestinationStorageClass.ONEZONE_IA = ObservabilityPipelineAmazonS3DestinationStorageClass("ONEZONE_IA") +ObservabilityPipelineAmazonS3DestinationStorageClass.GLACIER = ObservabilityPipelineAmazonS3DestinationStorageClass("GLACIER") +ObservabilityPipelineAmazonS3DestinationStorageClass.GLACIER_IR = ObservabilityPipelineAmazonS3DestinationStorageClass("GLACIER_IR") +ObservabilityPipelineAmazonS3DestinationStorageClass.DEEP_ARCHIVE = ObservabilityPipelineAmazonS3DestinationStorageClass("DEEP_ARCHIVE") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination_type.py new file mode 100644 index 0000000000..2ee65d7f1c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3DestinationType(ModelSimple): + """ + The destination type. Always `amazon_s3`. + + :param value: If omitted defaults to "amazon_s3". Must be one of ["amazon_s3"]. + :type value: str + """ + + allowed_values = { + "amazon_s3", + } + AMAZON_S3: ClassVar["ObservabilityPipelineAmazonS3DestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3DestinationType.AMAZON_S3 = ObservabilityPipelineAmazonS3DestinationType("amazon_s3") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_batch_settings.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_batch_settings.py new file mode 100644 index 0000000000..2511aedc51 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_batch_settings.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineAmazonS3GenericBatchSettings(ModelNormal): + @cached_property + def openapi_types(_): + return { + "batch_size": (int,), + "timeout_secs": (int,), + } + attribute_map = { + "batch_size": "batch_size", + "timeout_secs": "timeout_secs", + } + + def __init__(self_, batch_size: Union[int, UnsetType]=unset, timeout_secs: Union[int, UnsetType]=unset, **kwargs): + """ + Event batching settings + + :param batch_size: Maximum batch size in bytes. + :type batch_size: int, optional + + :param timeout_secs: Maximum number of seconds to wait before flushing the batch. + :type timeout_secs: int, optional + """ + if batch_size is not unset: + kwargs["batch_size"] = batch_size + if timeout_secs is not unset: + kwargs["timeout_secs"] = timeout_secs + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression.py new file mode 100644 index 0000000000..cd245c1ae6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineAmazonS3GenericCompression(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Compression algorithm applied to encoded logs. + + :param algorithm: The compression type. Always `zstd`. + :type algorithm: ObservabilityPipelineAmazonS3GenericCompressionZstdType + + :param level: Zstd compression level. + :type level: int + """ + 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.observability_pipeline_amazon_s3_generic_compression_zstd import ObservabilityPipelineAmazonS3GenericCompressionZstd + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_gzip import ObservabilityPipelineAmazonS3GenericCompressionGzip + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_snappy import ObservabilityPipelineAmazonS3GenericCompressionSnappy + return { + "oneOf": [ + ObservabilityPipelineAmazonS3GenericCompressionZstd, + ObservabilityPipelineAmazonS3GenericCompressionGzip, + ObservabilityPipelineAmazonS3GenericCompressionSnappy, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_gzip.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_gzip.py new file mode 100644 index 0000000000..33d11107f8 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_gzip.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_gzip_type import ObservabilityPipelineAmazonS3GenericCompressionGzipType + +class ObservabilityPipelineAmazonS3GenericCompressionGzip(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_gzip_type import ObservabilityPipelineAmazonS3GenericCompressionGzipType + return { + "algorithm": (ObservabilityPipelineAmazonS3GenericCompressionGzipType,), + "level": (int,), + } + attribute_map = { + "algorithm": "algorithm", + "level": "level", + } + + def __init__(self_, algorithm: ObservabilityPipelineAmazonS3GenericCompressionGzipType, level: int, **kwargs): + """ + Gzip compression. + + :param algorithm: The compression type. Always ``gzip``. + :type algorithm: ObservabilityPipelineAmazonS3GenericCompressionGzipType + + :param level: Gzip compression level. + :type level: int + """ + super().__init__(kwargs) + + + self_.algorithm = algorithm + self_.level = level diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_gzip_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_gzip_type.py new file mode 100644 index 0000000000..0c61d49703 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_gzip_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3GenericCompressionGzipType(ModelSimple): + """ + The compression type. Always `gzip`. + + :param value: If omitted defaults to "gzip". Must be one of ["gzip"]. + :type value: str + """ + + allowed_values = { + "gzip", + } + GZIP: ClassVar["ObservabilityPipelineAmazonS3GenericCompressionGzipType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3GenericCompressionGzipType.GZIP = ObservabilityPipelineAmazonS3GenericCompressionGzipType("gzip") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_snappy.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_snappy.py new file mode 100644 index 0000000000..00ad4385cf --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_snappy.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_snappy_type import ObservabilityPipelineAmazonS3GenericCompressionSnappyType + +class ObservabilityPipelineAmazonS3GenericCompressionSnappy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_snappy_type import ObservabilityPipelineAmazonS3GenericCompressionSnappyType + return { + "algorithm": (ObservabilityPipelineAmazonS3GenericCompressionSnappyType,), + } + attribute_map = { + "algorithm": "algorithm", + } + + def __init__(self_, algorithm: ObservabilityPipelineAmazonS3GenericCompressionSnappyType, **kwargs): + """ + Snappy compression. + + :param algorithm: The compression type. Always ``snappy``. + :type algorithm: ObservabilityPipelineAmazonS3GenericCompressionSnappyType + """ + super().__init__(kwargs) + + + self_.algorithm = algorithm diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_snappy_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_snappy_type.py new file mode 100644 index 0000000000..ee7baa797e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_snappy_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3GenericCompressionSnappyType(ModelSimple): + """ + The compression type. Always `snappy`. + + :param value: If omitted defaults to "snappy". Must be one of ["snappy"]. + :type value: str + """ + + allowed_values = { + "snappy", + } + SNAPPY: ClassVar["ObservabilityPipelineAmazonS3GenericCompressionSnappyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3GenericCompressionSnappyType.SNAPPY = ObservabilityPipelineAmazonS3GenericCompressionSnappyType("snappy") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_zstd.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_zstd.py new file mode 100644 index 0000000000..066c8d7d8d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_zstd.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_zstd_type import ObservabilityPipelineAmazonS3GenericCompressionZstdType + +class ObservabilityPipelineAmazonS3GenericCompressionZstd(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_zstd_type import ObservabilityPipelineAmazonS3GenericCompressionZstdType + return { + "algorithm": (ObservabilityPipelineAmazonS3GenericCompressionZstdType,), + "level": (int,), + } + attribute_map = { + "algorithm": "algorithm", + "level": "level", + } + + def __init__(self_, algorithm: ObservabilityPipelineAmazonS3GenericCompressionZstdType, level: int, **kwargs): + """ + Zstd compression. + + :param algorithm: The compression type. Always ``zstd``. + :type algorithm: ObservabilityPipelineAmazonS3GenericCompressionZstdType + + :param level: Zstd compression level. + :type level: int + """ + super().__init__(kwargs) + + + self_.algorithm = algorithm + self_.level = level diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_zstd_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_zstd_type.py new file mode 100644 index 0000000000..150ba1ccfb --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_compression_zstd_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3GenericCompressionZstdType(ModelSimple): + """ + The compression type. Always `zstd`. + + :param value: If omitted defaults to "zstd". Must be one of ["zstd"]. + :type value: str + """ + + allowed_values = { + "zstd", + } + ZSTD: ClassVar["ObservabilityPipelineAmazonS3GenericCompressionZstdType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3GenericCompressionZstdType.ZSTD = ObservabilityPipelineAmazonS3GenericCompressionZstdType("zstd") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_destination.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_destination.py new file mode 100644 index 0000000000..da1826547f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_destination.py @@ -0,0 +1,158 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_batch_settings import ObservabilityPipelineAmazonS3GenericBatchSettings + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression import ObservabilityPipelineAmazonS3GenericCompression + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding import ObservabilityPipelineAmazonS3GenericEncoding + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_server_side_encryption import ObservabilityPipelineAmazonS3DestinationServerSideEncryption + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_storage_class import ObservabilityPipelineAmazonS3DestinationStorageClass + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination_type import ObservabilityPipelineAmazonS3GenericDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_zstd import ObservabilityPipelineAmazonS3GenericCompressionZstd + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_gzip import ObservabilityPipelineAmazonS3GenericCompressionGzip + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_snappy import ObservabilityPipelineAmazonS3GenericCompressionSnappy + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_json import ObservabilityPipelineAmazonS3GenericEncodingJson + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_parquet import ObservabilityPipelineAmazonS3GenericEncodingParquet + +class ObservabilityPipelineAmazonS3GenericDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_batch_settings import ObservabilityPipelineAmazonS3GenericBatchSettings + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression import ObservabilityPipelineAmazonS3GenericCompression + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding import ObservabilityPipelineAmazonS3GenericEncoding + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_server_side_encryption import ObservabilityPipelineAmazonS3DestinationServerSideEncryption + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_storage_class import ObservabilityPipelineAmazonS3DestinationStorageClass + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination_type import ObservabilityPipelineAmazonS3GenericDestinationType + return { + "auth": (ObservabilityPipelineAwsAuth,), + "batch_settings": (ObservabilityPipelineAmazonS3GenericBatchSettings,), + "bucket": (str,), + "buffer": (ObservabilityPipelineBufferOptions,), + "compression": (ObservabilityPipelineAmazonS3GenericCompression,), + "encoding": (ObservabilityPipelineAmazonS3GenericEncoding,), + "id": (str,), + "inputs": ([str],), + "key_prefix": (str,), + "region": (str,), + "server_side_encryption": (ObservabilityPipelineAmazonS3DestinationServerSideEncryption,), + "ssekms_key_id": (str,), + "storage_class": (ObservabilityPipelineAmazonS3DestinationStorageClass,), + "type": (ObservabilityPipelineAmazonS3GenericDestinationType,), + } + attribute_map = { + "auth": "auth", + "batch_settings": "batch_settings", + "bucket": "bucket", + "buffer": "buffer", + "compression": "compression", + "encoding": "encoding", + "id": "id", + "inputs": "inputs", + "key_prefix": "key_prefix", + "region": "region", + "server_side_encryption": "server_side_encryption", + "ssekms_key_id": "ssekms_key_id", + "storage_class": "storage_class", + "type": "type", + } + + def __init__(self_, bucket: str, compression: Union[ObservabilityPipelineAmazonS3GenericCompression, ObservabilityPipelineAmazonS3GenericCompressionZstd, ObservabilityPipelineAmazonS3GenericCompressionGzip, ObservabilityPipelineAmazonS3GenericCompressionSnappy], encoding: Union[ObservabilityPipelineAmazonS3GenericEncoding, ObservabilityPipelineAmazonS3GenericEncodingJson, ObservabilityPipelineAmazonS3GenericEncodingParquet], id: str, inputs: List[str], region: str, storage_class: ObservabilityPipelineAmazonS3DestinationStorageClass, type: ObservabilityPipelineAmazonS3GenericDestinationType, auth: Union[ObservabilityPipelineAwsAuth, UnsetType]=unset, batch_settings: Union[ObservabilityPipelineAmazonS3GenericBatchSettings, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, key_prefix: Union[str, UnsetType]=unset, server_side_encryption: Union[ObservabilityPipelineAmazonS3DestinationServerSideEncryption, UnsetType]=unset, ssekms_key_id: Union[str, UnsetType]=unset, **kwargs): + """ + The ``amazon_s3_generic`` destination sends your logs to an Amazon S3 bucket. + + **Supported pipeline types:** logs + + :param auth: AWS authentication credentials used for accessing AWS services such as S3. + If omitted, the system’s default credentials are used (for example, the IAM role and environment variables). + :type auth: ObservabilityPipelineAwsAuth, optional + + :param batch_settings: Event batching settings + :type batch_settings: ObservabilityPipelineAmazonS3GenericBatchSettings, optional + + :param bucket: S3 bucket name. + :type bucket: str + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param compression: Compression algorithm applied to encoded logs. + :type compression: ObservabilityPipelineAmazonS3GenericCompression + + :param encoding: Encoding format for the destination. + :type encoding: ObservabilityPipelineAmazonS3GenericEncoding + + :param id: Unique identifier for the destination component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param key_prefix: Optional prefix for object keys. + :type key_prefix: str, optional + + :param region: AWS region of the S3 bucket. + :type region: str + + :param server_side_encryption: Server-side encryption type for Amazon S3. + :type server_side_encryption: ObservabilityPipelineAmazonS3DestinationServerSideEncryption, optional + + :param ssekms_key_id: The AWS KMS key ID used for SSE-KMS encryption. + Only applies when ``server_side_encryption`` is set to ``aws:kms``. + :type ssekms_key_id: str, optional + + :param storage_class: S3 storage class. + :type storage_class: ObservabilityPipelineAmazonS3DestinationStorageClass + + :param type: The destination type. Always ``amazon_s3_generic``. + :type type: ObservabilityPipelineAmazonS3GenericDestinationType + """ + if auth is not unset: + kwargs["auth"] = auth + if batch_settings is not unset: + kwargs["batch_settings"] = batch_settings + if buffer is not unset: + kwargs["buffer"] = buffer + if key_prefix is not unset: + kwargs["key_prefix"] = key_prefix + if server_side_encryption is not unset: + kwargs["server_side_encryption"] = server_side_encryption + if ssekms_key_id is not unset: + kwargs["ssekms_key_id"] = ssekms_key_id + super().__init__(kwargs) + + + self_.bucket = bucket + self_.compression = compression + self_.encoding = encoding + self_.id = id + self_.inputs = inputs + self_.region = region + self_.storage_class = storage_class + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_destination_type.py new file mode 100644 index 0000000000..2accacd4f6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3GenericDestinationType(ModelSimple): + """ + The destination type. Always `amazon_s3_generic`. + + :param value: If omitted defaults to "amazon_s3_generic". Must be one of ["amazon_s3_generic"]. + :type value: str + """ + + allowed_values = { + "amazon_s3_generic", + } + GENERIC_ARCHIVES_S3: ClassVar["ObservabilityPipelineAmazonS3GenericDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3GenericDestinationType.GENERIC_ARCHIVES_S3 = ObservabilityPipelineAmazonS3GenericDestinationType("amazon_s3_generic") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding.py new file mode 100644 index 0000000000..0f610c928d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineAmazonS3GenericEncoding(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Encoding format for the destination. + + :param type: The encoding type. Always `json`. + :type type: ObservabilityPipelineAmazonS3GenericEncodingJsonType + """ + 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.observability_pipeline_amazon_s3_generic_encoding_json import ObservabilityPipelineAmazonS3GenericEncodingJson + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_parquet import ObservabilityPipelineAmazonS3GenericEncodingParquet + return { + "oneOf": [ + ObservabilityPipelineAmazonS3GenericEncodingJson, + ObservabilityPipelineAmazonS3GenericEncodingParquet, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_json.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_json.py new file mode 100644 index 0000000000..2f77f56548 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_json.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_json_type import ObservabilityPipelineAmazonS3GenericEncodingJsonType + +class ObservabilityPipelineAmazonS3GenericEncodingJson(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_json_type import ObservabilityPipelineAmazonS3GenericEncodingJsonType + return { + "type": (ObservabilityPipelineAmazonS3GenericEncodingJsonType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: ObservabilityPipelineAmazonS3GenericEncodingJsonType, **kwargs): + """ + JSON encoding. + + :param type: The encoding type. Always ``json``. + :type type: ObservabilityPipelineAmazonS3GenericEncodingJsonType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_json_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_json_type.py new file mode 100644 index 0000000000..f6d9c796e2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_json_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3GenericEncodingJsonType(ModelSimple): + """ + The encoding type. Always `json`. + + :param value: If omitted defaults to "json". Must be one of ["json"]. + :type value: str + """ + + allowed_values = { + "json", + } + JSON: ClassVar["ObservabilityPipelineAmazonS3GenericEncodingJsonType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3GenericEncodingJsonType.JSON = ObservabilityPipelineAmazonS3GenericEncodingJsonType("json") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_parquet.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_parquet.py new file mode 100644 index 0000000000..d0550f32ce --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_parquet.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_parquet_type import ObservabilityPipelineAmazonS3GenericEncodingParquetType + +class ObservabilityPipelineAmazonS3GenericEncodingParquet(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_parquet_type import ObservabilityPipelineAmazonS3GenericEncodingParquetType + return { + "type": (ObservabilityPipelineAmazonS3GenericEncodingParquetType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: ObservabilityPipelineAmazonS3GenericEncodingParquetType, **kwargs): + """ + Parquet encoding. + + :param type: The encoding type. Always ``parquet``. + :type type: ObservabilityPipelineAmazonS3GenericEncodingParquetType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_parquet_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_parquet_type.py new file mode 100644 index 0000000000..f1e9eb0f93 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_generic_encoding_parquet_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3GenericEncodingParquetType(ModelSimple): + """ + The encoding type. Always `parquet`. + + :param value: If omitted defaults to "parquet". Must be one of ["parquet"]. + :type value: str + """ + + allowed_values = { + "parquet", + } + PARQUET: ClassVar["ObservabilityPipelineAmazonS3GenericEncodingParquetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3GenericEncodingParquetType.PARQUET = ObservabilityPipelineAmazonS3GenericEncodingParquetType("parquet") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_source.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_source.py new file mode 100644 index 0000000000..9c31753bd1 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_source.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source_compression import ObservabilityPipelineAmazonS3SourceCompression + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source_type import ObservabilityPipelineAmazonS3SourceType + +class ObservabilityPipelineAmazonS3Source(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source_compression import ObservabilityPipelineAmazonS3SourceCompression + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source_type import ObservabilityPipelineAmazonS3SourceType + return { + "auth": (ObservabilityPipelineAwsAuth,), + "compression": (ObservabilityPipelineAmazonS3SourceCompression,), + "id": (str,), + "region": (str,), + "tls": (ObservabilityPipelineTls,), + "type": (ObservabilityPipelineAmazonS3SourceType,), + "url_key": (str,), + } + attribute_map = { + "auth": "auth", + "compression": "compression", + "id": "id", + "region": "region", + "tls": "tls", + "type": "type", + "url_key": "url_key", + } + + def __init__(self_, id: str, region: str, type: ObservabilityPipelineAmazonS3SourceType, auth: Union[ObservabilityPipelineAwsAuth, UnsetType]=unset, compression: Union[ObservabilityPipelineAmazonS3SourceCompression, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, url_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``amazon_s3`` source ingests logs from an Amazon S3 bucket. + It supports AWS authentication, TLS encryption, and configurable compression. + + **Supported pipeline types:** logs + + :param auth: AWS authentication credentials used for accessing AWS services such as S3. + If omitted, the system’s default credentials are used (for example, the IAM role and environment variables). + :type auth: ObservabilityPipelineAwsAuth, optional + + :param compression: Compression format for objects retrieved from the S3 bucket. Use ``auto`` to detect compression from the object's Content-Encoding header or file extension. + :type compression: ObservabilityPipelineAmazonS3SourceCompression, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param region: AWS region where the S3 bucket resides. + :type region: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The source type. Always ``amazon_s3``. + :type type: ObservabilityPipelineAmazonS3SourceType + + :param url_key: Name of the environment variable or secret that holds the S3 bucket URL. + :type url_key: str, optional + """ + if auth is not unset: + kwargs["auth"] = auth + if compression is not unset: + kwargs["compression"] = compression + if tls is not unset: + kwargs["tls"] = tls + if url_key is not unset: + kwargs["url_key"] = url_key + super().__init__(kwargs) + + + self_.id = id + self_.region = region + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_source_compression.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_source_compression.py new file mode 100644 index 0000000000..3e98046a48 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_source_compression.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3SourceCompression(ModelSimple): + """ + Compression format for objects retrieved from the S3 bucket. Use `auto` to detect compression from the object's Content-Encoding header or file extension. + + :param value: Must be one of ["auto", "none", "gzip", "zstd"]. + :type value: str + """ + + allowed_values = { + "auto", + "none", + "gzip", + "zstd", + } + AUTO: ClassVar["ObservabilityPipelineAmazonS3SourceCompression"] + NONE: ClassVar["ObservabilityPipelineAmazonS3SourceCompression"] + GZIP: ClassVar["ObservabilityPipelineAmazonS3SourceCompression"] + ZSTD: ClassVar["ObservabilityPipelineAmazonS3SourceCompression"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3SourceCompression.AUTO = ObservabilityPipelineAmazonS3SourceCompression("auto") +ObservabilityPipelineAmazonS3SourceCompression.NONE = ObservabilityPipelineAmazonS3SourceCompression("none") +ObservabilityPipelineAmazonS3SourceCompression.GZIP = ObservabilityPipelineAmazonS3SourceCompression("gzip") +ObservabilityPipelineAmazonS3SourceCompression.ZSTD = ObservabilityPipelineAmazonS3SourceCompression("zstd") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_s3_source_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_source_type.py new file mode 100644 index 0000000000..0f1434eb27 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_s3_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonS3SourceType(ModelSimple): + """ + The source type. Always `amazon_s3`. + + :param value: If omitted defaults to "amazon_s3". Must be one of ["amazon_s3"]. + :type value: str + """ + + allowed_values = { + "amazon_s3", + } + AMAZON_S3: ClassVar["ObservabilityPipelineAmazonS3SourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonS3SourceType.AMAZON_S3 = ObservabilityPipelineAmazonS3SourceType("amazon_s3") diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_security_lake_destination.py b/datadog_api_client/v2/model/observability_pipeline_amazon_security_lake_destination.py new file mode 100644 index 0000000000..d2a018ec7f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_security_lake_destination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination_type import ObservabilityPipelineAmazonSecurityLakeDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineAmazonSecurityLakeDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination_type import ObservabilityPipelineAmazonSecurityLakeDestinationType + return { + "auth": (ObservabilityPipelineAwsAuth,), + "bucket": (str,), + "buffer": (ObservabilityPipelineBufferOptions,), + "custom_source_name": (str,), + "id": (str,), + "inputs": ([str],), + "region": (str,), + "tls": (ObservabilityPipelineTls,), + "type": (ObservabilityPipelineAmazonSecurityLakeDestinationType,), + } + attribute_map = { + "auth": "auth", + "bucket": "bucket", + "buffer": "buffer", + "custom_source_name": "custom_source_name", + "id": "id", + "inputs": "inputs", + "region": "region", + "tls": "tls", + "type": "type", + } + + def __init__(self_, bucket: str, custom_source_name: str, id: str, inputs: List[str], region: str, type: ObservabilityPipelineAmazonSecurityLakeDestinationType, auth: Union[ObservabilityPipelineAwsAuth, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``amazon_security_lake`` destination sends your logs to Amazon Security Lake. + + **Supported pipeline types:** logs + + :param auth: AWS authentication credentials used for accessing AWS services such as S3. + If omitted, the system’s default credentials are used (for example, the IAM role and environment variables). + :type auth: ObservabilityPipelineAwsAuth, optional + + :param bucket: Name of the Amazon S3 bucket in Security Lake (3-63 characters). + :type bucket: str + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param custom_source_name: Custom source name for the logs in Security Lake. + :type custom_source_name: str + + :param id: Unique identifier for the destination component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param region: AWS region of the S3 bucket. + :type region: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The destination type. Always ``amazon_security_lake``. + :type type: ObservabilityPipelineAmazonSecurityLakeDestinationType + """ + if auth is not unset: + kwargs["auth"] = auth + if buffer is not unset: + kwargs["buffer"] = buffer + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.bucket = bucket + self_.custom_source_name = custom_source_name + self_.id = id + self_.inputs = inputs + self_.region = region + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_amazon_security_lake_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_amazon_security_lake_destination_type.py new file mode 100644 index 0000000000..dc94426af4 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_amazon_security_lake_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineAmazonSecurityLakeDestinationType(ModelSimple): + """ + The destination type. Always `amazon_security_lake`. + + :param value: If omitted defaults to "amazon_security_lake". Must be one of ["amazon_security_lake"]. + :type value: str + """ + + allowed_values = { + "amazon_security_lake", + } + AMAZON_SECURITY_LAKE: ClassVar["ObservabilityPipelineAmazonSecurityLakeDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineAmazonSecurityLakeDestinationType.AMAZON_SECURITY_LAKE = ObservabilityPipelineAmazonSecurityLakeDestinationType("amazon_security_lake") diff --git a/datadog_api_client/v2/model/observability_pipeline_aws_auth.py b/datadog_api_client/v2/model/observability_pipeline_aws_auth.py new file mode 100644 index 0000000000..dda4b5c813 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_aws_auth.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineAwsAuth(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assume_role": (str,), + "external_id": (str,), + "session_name": (str,), + } + attribute_map = { + "assume_role": "assume_role", + "external_id": "external_id", + "session_name": "session_name", + } + + def __init__(self_, assume_role: Union[str, UnsetType]=unset, external_id: Union[str, UnsetType]=unset, session_name: Union[str, UnsetType]=unset, **kwargs): + """ + AWS authentication credentials used for accessing AWS services such as S3. + If omitted, the system’s default credentials are used (for example, the IAM role and environment variables). + + :param assume_role: The Amazon Resource Name (ARN) of the role to assume. + :type assume_role: str, optional + + :param external_id: A unique identifier for cross-account role assumption. + :type external_id: str, optional + + :param session_name: A session identifier used for logging and tracing the assumed role session. + :type session_name: str, optional + """ + if assume_role is not unset: + kwargs["assume_role"] = assume_role + if external_id is not unset: + kwargs["external_id"] = external_id + if session_name is not unset: + kwargs["session_name"] = session_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/observability_pipeline_buffer_options.py b/datadog_api_client/v2/model/observability_pipeline_buffer_options.py new file mode 100644 index 0000000000..37c235b4cf --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_buffer_options.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineBufferOptions(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Configuration for buffer settings on destination components. + + :param max_size: Maximum size of the disk buffer. + :type max_size: int + + :param type: The type of the buffer that will be configured, a disk buffer. + :type type: ObservabilityPipelineBufferOptionsDiskType, optional + + :param when_full: Behavior when the buffer is full (block and stop accepting new events, or drop new events) + :type when_full: ObservabilityPipelineBufferOptionsWhenFull, optional + + :param max_events: Maximum events for the memory buffer. + :type max_events: int + """ + 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.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + return { + "oneOf": [ + ObservabilityPipelineDiskBufferOptions, + ObservabilityPipelineMemoryBufferOptions, + ObservabilityPipelineMemoryBufferSizeOptions, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_buffer_options_disk_type.py b/datadog_api_client/v2/model/observability_pipeline_buffer_options_disk_type.py new file mode 100644 index 0000000000..b79ddb49de --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_buffer_options_disk_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineBufferOptionsDiskType(ModelSimple): + """ + The type of the buffer that will be configured, a disk buffer. + + :param value: If omitted defaults to "disk". Must be one of ["disk"]. + :type value: str + """ + + allowed_values = { + "disk", + } + DISK: ClassVar["ObservabilityPipelineBufferOptionsDiskType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineBufferOptionsDiskType.DISK = ObservabilityPipelineBufferOptionsDiskType("disk") diff --git a/datadog_api_client/v2/model/observability_pipeline_buffer_options_memory_type.py b/datadog_api_client/v2/model/observability_pipeline_buffer_options_memory_type.py new file mode 100644 index 0000000000..5709f98d87 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_buffer_options_memory_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineBufferOptionsMemoryType(ModelSimple): + """ + The type of the buffer that will be configured, a memory buffer. + + :param value: If omitted defaults to "memory". Must be one of ["memory"]. + :type value: str + """ + + allowed_values = { + "memory", + } + MEMORY: ClassVar["ObservabilityPipelineBufferOptionsMemoryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineBufferOptionsMemoryType.MEMORY = ObservabilityPipelineBufferOptionsMemoryType("memory") diff --git a/datadog_api_client/v2/model/observability_pipeline_buffer_options_when_full.py b/datadog_api_client/v2/model/observability_pipeline_buffer_options_when_full.py new file mode 100644 index 0000000000..533cca6668 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_buffer_options_when_full.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineBufferOptionsWhenFull(ModelSimple): + """ + Behavior when the buffer is full (block and stop accepting new events, or drop new events) + + :param value: If omitted defaults to "block". Must be one of ["block", "drop_newest"]. + :type value: str + """ + + allowed_values = { + "block", + "drop_newest", + } + BLOCK: ClassVar["ObservabilityPipelineBufferOptionsWhenFull"] + DROP_NEWEST: ClassVar["ObservabilityPipelineBufferOptionsWhenFull"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineBufferOptionsWhenFull.BLOCK = ObservabilityPipelineBufferOptionsWhenFull("block") +ObservabilityPipelineBufferOptionsWhenFull.DROP_NEWEST = ObservabilityPipelineBufferOptionsWhenFull("drop_newest") diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination.py new file mode 100644 index 0000000000..1f54cbc013 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination.py @@ -0,0 +1,174 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_auth import ObservabilityPipelineClickhouseDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_batch import ObservabilityPipelineClickhouseDestinationBatch + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_batch_encoding import ObservabilityPipelineClickhouseDestinationBatchEncoding + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_compression import ObservabilityPipelineClickhouseDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_format import ObservabilityPipelineClickhouseDestinationFormat + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_type import ObservabilityPipelineClickhouseDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_compression_object import ObservabilityPipelineClickhouseDestinationCompressionObject + +class ObservabilityPipelineClickhouseDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_auth import ObservabilityPipelineClickhouseDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_batch import ObservabilityPipelineClickhouseDestinationBatch + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_batch_encoding import ObservabilityPipelineClickhouseDestinationBatchEncoding + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_compression import ObservabilityPipelineClickhouseDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_format import ObservabilityPipelineClickhouseDestinationFormat + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_type import ObservabilityPipelineClickhouseDestinationType + return { + "auth": (ObservabilityPipelineClickhouseDestinationAuth,), + "batch": (ObservabilityPipelineClickhouseDestinationBatch,), + "batch_encoding": (ObservabilityPipelineClickhouseDestinationBatchEncoding,), + "buffer": (ObservabilityPipelineBufferOptions,), + "compression": (ObservabilityPipelineClickhouseDestinationCompression,), + "database": (str,), + "date_time_best_effort": (bool,), + "endpoint_url_key": (str,), + "format": (ObservabilityPipelineClickhouseDestinationFormat,), + "id": (str,), + "inputs": ([str],), + "skip_unknown_fields": (bool, none_type), + "table": (str,), + "tls": (ObservabilityPipelineTls,), + "type": (ObservabilityPipelineClickhouseDestinationType,), + } + attribute_map = { + "auth": "auth", + "batch": "batch", + "batch_encoding": "batch_encoding", + "buffer": "buffer", + "compression": "compression", + "database": "database", + "date_time_best_effort": "date_time_best_effort", + "endpoint_url_key": "endpoint_url_key", + "format": "format", + "id": "id", + "inputs": "inputs", + "skip_unknown_fields": "skip_unknown_fields", + "table": "table", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], table: str, type: ObservabilityPipelineClickhouseDestinationType, auth: Union[ObservabilityPipelineClickhouseDestinationAuth, UnsetType]=unset, batch: Union[ObservabilityPipelineClickhouseDestinationBatch, UnsetType]=unset, batch_encoding: Union[ObservabilityPipelineClickhouseDestinationBatchEncoding, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, compression: Union[ObservabilityPipelineClickhouseDestinationCompression, str, ObservabilityPipelineClickhouseDestinationCompressionObject, UnsetType]=unset, database: Union[str, UnsetType]=unset, date_time_best_effort: Union[bool, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, format: Union[ObservabilityPipelineClickhouseDestinationFormat, UnsetType]=unset, skip_unknown_fields: Union[bool, none_type, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``clickhouse`` destination sends log events to a ClickHouse database table over HTTP. + + **Supported pipeline types:** logs. + + :param auth: HTTP Basic Authentication credentials for the ClickHouse destination. + When ``strategy`` is ``basic`` , provide ``username_key`` and ``password_key`` that reference environment variables or secrets containing the credentials. + :type auth: ObservabilityPipelineClickhouseDestinationAuth, optional + + :param batch: Batching configuration for ClickHouse inserts. + :type batch: ObservabilityPipelineClickhouseDestinationBatch, optional + + :param batch_encoding: Batch encoding configuration for the ClickHouse destination. + Required when ``format`` is ``arrow_stream``. The ``codec`` field must be set to ``arrow_stream``. + :type batch_encoding: ObservabilityPipelineClickhouseDestinationBatchEncoding, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param compression: Compression setting for outbound HTTP requests to ClickHouse. + Can be specified as a shorthand string ( ``"gzip"`` or ``"none"`` ) or as an object + with an ``algorithm`` field and an optional ``level`` (gzip only, 1–9). + :type compression: ObservabilityPipelineClickhouseDestinationCompression, optional + + :param database: Optional ClickHouse database name. If omitted, the user's default database on the ClickHouse server is used. + :type database: str, optional + + :param date_time_best_effort: When ``true`` , enables flexible DateTime parsing on the ClickHouse server side. + :type date_time_best_effort: bool, optional + + :param endpoint_url_key: Name of the environment variable or secret that contains the ClickHouse HTTP endpoint URL. + Defaults to ``DESTINATION_CLICKHOUSE_ENDPOINT_URL`` (prefixed with ``DD_OP_`` at runtime). + :type endpoint_url_key: str, optional + + :param format: Insert format for events sent to ClickHouse. + + * ``json_each_row`` : Maps event fields to columns by name (ClickHouse ``JSONEachRow`` ). + * ``json_as_object`` : Inserts each event into a single ``Object('json')`` / ``JSON`` column (ClickHouse ``JSONAsObject`` ). + * ``json_as_string`` : Inserts each event into a single ``String`` -typed column as raw JSON (ClickHouse ``JSONAsString`` ). + * ``arrow_stream`` : Batches events using Apache Arrow IPC streaming format. Requires ``batch_encoding``. + :type format: ObservabilityPipelineClickhouseDestinationFormat, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param skip_unknown_fields: When ``true`` , fields not present in the target table schema are dropped instead of causing insert errors. + When unset, the ClickHouse server's own ``input_format_skip_unknown_fields`` setting applies. + :type skip_unknown_fields: bool, none_type, optional + + :param table: Target ClickHouse table name. Events are inserted into this table. + :type table: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The destination type. The value must be ``clickhouse``. + :type type: ObservabilityPipelineClickhouseDestinationType + """ + if auth is not unset: + kwargs["auth"] = auth + if batch is not unset: + kwargs["batch"] = batch + if batch_encoding is not unset: + kwargs["batch_encoding"] = batch_encoding + if buffer is not unset: + kwargs["buffer"] = buffer + if compression is not unset: + kwargs["compression"] = compression + if database is not unset: + kwargs["database"] = database + if date_time_best_effort is not unset: + kwargs["date_time_best_effort"] = date_time_best_effort + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if format is not unset: + kwargs["format"] = format + if skip_unknown_fields is not unset: + kwargs["skip_unknown_fields"] = skip_unknown_fields + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.table = table + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_auth.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_auth.py new file mode 100644 index 0000000000..53d72e8cf2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_auth.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_auth_strategy import ObservabilityPipelineClickhouseDestinationAuthStrategy + +class ObservabilityPipelineClickhouseDestinationAuth(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_auth_strategy import ObservabilityPipelineClickhouseDestinationAuthStrategy + return { + "password_key": (str,), + "strategy": (ObservabilityPipelineClickhouseDestinationAuthStrategy,), + "username_key": (str,), + } + attribute_map = { + "password_key": "password_key", + "strategy": "strategy", + "username_key": "username_key", + } + + def __init__(self_, strategy: ObservabilityPipelineClickhouseDestinationAuthStrategy, password_key: Union[str, UnsetType]=unset, username_key: Union[str, UnsetType]=unset, **kwargs): + """ + HTTP Basic Authentication credentials for the ClickHouse destination. + When ``strategy`` is ``basic`` , provide ``username_key`` and ``password_key`` that reference environment variables or secrets containing the credentials. + + :param password_key: Name of the environment variable or secret that contains the ClickHouse password. + :type password_key: str, optional + + :param strategy: The authentication strategy for ClickHouse HTTP requests. Only ``basic`` is supported. + :type strategy: ObservabilityPipelineClickhouseDestinationAuthStrategy + + :param username_key: Name of the environment variable or secret that contains the ClickHouse username. + :type username_key: str, optional + """ + if password_key is not unset: + kwargs["password_key"] = password_key + if username_key is not unset: + kwargs["username_key"] = username_key + super().__init__(kwargs) + + + self_.strategy = strategy diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_auth_strategy.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_auth_strategy.py new file mode 100644 index 0000000000..0cf1505dd9 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_auth_strategy.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineClickhouseDestinationAuthStrategy(ModelSimple): + """ + The authentication strategy for ClickHouse HTTP requests. Only `basic` is supported. + + :param value: If omitted defaults to "basic". Must be one of ["basic"]. + :type value: str + """ + + allowed_values = { + "basic", + } + BASIC: ClassVar["ObservabilityPipelineClickhouseDestinationAuthStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineClickhouseDestinationAuthStrategy.BASIC = ObservabilityPipelineClickhouseDestinationAuthStrategy("basic") diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_batch.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_batch.py new file mode 100644 index 0000000000..9282582553 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_batch.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineClickhouseDestinationBatch(ModelNormal): + validations = { + "max_events": { + "inclusive_minimum": 1, + }, + "timeout_secs": { + "inclusive_maximum": 65535, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "max_events": (int,), + "timeout_secs": (int,), + } + attribute_map = { + "max_events": "max_events", + "timeout_secs": "timeout_secs", + } + + def __init__(self_, max_events: Union[int, UnsetType]=unset, timeout_secs: Union[int, UnsetType]=unset, **kwargs): + """ + Batching configuration for ClickHouse inserts. + + :param max_events: Maximum number of events per batch before it is flushed. + :type max_events: int, optional + + :param timeout_secs: Maximum number of seconds to wait before flushing a partial batch. + :type timeout_secs: int, optional + """ + if max_events is not unset: + kwargs["max_events"] = max_events + if timeout_secs is not unset: + kwargs["timeout_secs"] = timeout_secs + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_batch_encoding.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_batch_encoding.py new file mode 100644 index 0000000000..e0e7b3fa45 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_batch_encoding.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_batch_encoding_codec import ObservabilityPipelineClickhouseDestinationBatchEncodingCodec + +class ObservabilityPipelineClickhouseDestinationBatchEncoding(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_batch_encoding_codec import ObservabilityPipelineClickhouseDestinationBatchEncodingCodec + return { + "allow_nullable_fields": (bool,), + "codec": (ObservabilityPipelineClickhouseDestinationBatchEncodingCodec,), + } + attribute_map = { + "allow_nullable_fields": "allow_nullable_fields", + "codec": "codec", + } + + def __init__(self_, codec: ObservabilityPipelineClickhouseDestinationBatchEncodingCodec, allow_nullable_fields: Union[bool, UnsetType]=unset, **kwargs): + """ + Batch encoding configuration for the ClickHouse destination. + Required when ``format`` is ``arrow_stream``. The ``codec`` field must be set to ``arrow_stream``. + + :param allow_nullable_fields: When ``true`` , null values are allowed for non-nullable fields in the ClickHouse schema. + When ``false`` (default), missing values for non-nullable columns cause encoding errors. + :type allow_nullable_fields: bool, optional + + :param codec: The codec used for batch encoding. Only ``arrow_stream`` is supported. + :type codec: ObservabilityPipelineClickhouseDestinationBatchEncodingCodec + """ + if allow_nullable_fields is not unset: + kwargs["allow_nullable_fields"] = allow_nullable_fields + super().__init__(kwargs) + + + self_.codec = codec diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_batch_encoding_codec.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_batch_encoding_codec.py new file mode 100644 index 0000000000..03fcd86a50 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_batch_encoding_codec.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineClickhouseDestinationBatchEncodingCodec(ModelSimple): + """ + The codec used for batch encoding. Only `arrow_stream` is supported. + + :param value: If omitted defaults to "arrow_stream". Must be one of ["arrow_stream"]. + :type value: str + """ + + allowed_values = { + "arrow_stream", + } + ARROW_STREAM: ClassVar["ObservabilityPipelineClickhouseDestinationBatchEncodingCodec"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineClickhouseDestinationBatchEncodingCodec.ARROW_STREAM = ObservabilityPipelineClickhouseDestinationBatchEncodingCodec("arrow_stream") diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_compression.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_compression.py new file mode 100644 index 0000000000..622d4580c4 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_compression.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineClickhouseDestinationCompression(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Compression setting for outbound HTTP requests to ClickHouse. + Can be specified as a shorthand string ( ``"gzip"`` or ``"none"`` ) or as an object + with an ``algorithm`` field and an optional ``level`` (gzip only, 1–9). + + :param algorithm: The compression algorithm applied to outbound HTTP requests. + :type algorithm: ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + + :param level: Compression level (1–9). Only applicable when `algorithm` is `gzip`. + :type level: int, 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.observability_pipeline_clickhouse_destination_compression_object import ObservabilityPipelineClickhouseDestinationCompressionObject + return { + "oneOf": [ + str, + ObservabilityPipelineClickhouseDestinationCompressionObject, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_compression_algorithm.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_compression_algorithm.py new file mode 100644 index 0000000000..280996b1bd --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_compression_algorithm.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineClickhouseDestinationCompressionAlgorithm(ModelSimple): + """ + The compression algorithm applied to outbound HTTP requests. + + :param value: Must be one of ["gzip", "none"]. + :type value: str + """ + + allowed_values = { + "gzip", + "none", + } + GZIP: ClassVar["ObservabilityPipelineClickhouseDestinationCompressionAlgorithm"] + NONE: ClassVar["ObservabilityPipelineClickhouseDestinationCompressionAlgorithm"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.GZIP = ObservabilityPipelineClickhouseDestinationCompressionAlgorithm("gzip") +ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.NONE = ObservabilityPipelineClickhouseDestinationCompressionAlgorithm("none") diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_compression_object.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_compression_object.py new file mode 100644 index 0000000000..26040e8b52 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_compression_object.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_compression_algorithm import ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + +class ObservabilityPipelineClickhouseDestinationCompressionObject(ModelNormal): + validations = { + "level": { + "inclusive_maximum": 9, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_compression_algorithm import ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + return { + "algorithm": (ObservabilityPipelineClickhouseDestinationCompressionAlgorithm,), + "level": (int,), + } + attribute_map = { + "algorithm": "algorithm", + "level": "level", + } + + def __init__(self_, algorithm: ObservabilityPipelineClickhouseDestinationCompressionAlgorithm, level: Union[int, UnsetType]=unset, **kwargs): + """ + Structured compression configuration for the ClickHouse destination. + Use ``algorithm`` to specify the compression type and ``level`` (optional, gzip only) to control compression strength. + + :param algorithm: The compression algorithm applied to outbound HTTP requests. + :type algorithm: ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + + :param level: Compression level (1–9). Only applicable when ``algorithm`` is ``gzip``. + :type level: int, optional + """ + if level is not unset: + kwargs["level"] = level + super().__init__(kwargs) + + + self_.algorithm = algorithm diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_format.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_format.py new file mode 100644 index 0000000000..5fc1743728 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_format.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineClickhouseDestinationFormat(ModelSimple): + """ + Insert format for events sent to ClickHouse. + - `json_each_row`: Maps event fields to columns by name (ClickHouse `JSONEachRow`). + - `json_as_object`: Inserts each event into a single `Object('json')` / `JSON` column (ClickHouse `JSONAsObject`). + - `json_as_string`: Inserts each event into a single `String`-typed column as raw JSON (ClickHouse `JSONAsString`). + - `arrow_stream`: Batches events using Apache Arrow IPC streaming format. Requires `batch_encoding`. + + :param value: Must be one of ["json_each_row", "json_as_object", "json_as_string", "arrow_stream"]. + :type value: str + """ + + allowed_values = { + "json_each_row", + "json_as_object", + "json_as_string", + "arrow_stream", + } + JSON_EACH_ROW: ClassVar["ObservabilityPipelineClickhouseDestinationFormat"] + JSON_AS_OBJECT: ClassVar["ObservabilityPipelineClickhouseDestinationFormat"] + JSON_AS_STRING: ClassVar["ObservabilityPipelineClickhouseDestinationFormat"] + ARROW_STREAM: ClassVar["ObservabilityPipelineClickhouseDestinationFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineClickhouseDestinationFormat.JSON_EACH_ROW = ObservabilityPipelineClickhouseDestinationFormat("json_each_row") +ObservabilityPipelineClickhouseDestinationFormat.JSON_AS_OBJECT = ObservabilityPipelineClickhouseDestinationFormat("json_as_object") +ObservabilityPipelineClickhouseDestinationFormat.JSON_AS_STRING = ObservabilityPipelineClickhouseDestinationFormat("json_as_string") +ObservabilityPipelineClickhouseDestinationFormat.ARROW_STREAM = ObservabilityPipelineClickhouseDestinationFormat("arrow_stream") diff --git a/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_type.py new file mode 100644 index 0000000000..a893c61837 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_clickhouse_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineClickhouseDestinationType(ModelSimple): + """ + The destination type. The value must be `clickhouse`. + + :param value: If omitted defaults to "clickhouse". Must be one of ["clickhouse"]. + :type value: str + """ + + allowed_values = { + "clickhouse", + } + CLICKHOUSE: ClassVar["ObservabilityPipelineClickhouseDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineClickhouseDestinationType.CLICKHOUSE = ObservabilityPipelineClickhouseDestinationType("clickhouse") diff --git a/datadog_api_client/v2/model/observability_pipeline_client_tls.py b/datadog_api_client/v2/model/observability_pipeline_client_tls.py new file mode 100644 index 0000000000..158438978e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_client_tls.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineClientTls(ModelNormal): + validations = { + "server_name": { + "max_length": 253, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "ca_file": (str,), + "crt_file": (str,), + "key_file": (str,), + "key_pass_key": (str,), + "server_name": (str,), + } + attribute_map = { + "ca_file": "ca_file", + "crt_file": "crt_file", + "key_file": "key_file", + "key_pass_key": "key_pass_key", + "server_name": "server_name", + } + + def __init__(self_, crt_file: str, ca_file: Union[str, UnsetType]=unset, key_file: Union[str, UnsetType]=unset, key_pass_key: Union[str, UnsetType]=unset, server_name: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration for enabling TLS encryption between the pipeline component and external services. + + :param ca_file: Path to the Certificate Authority (CA) file used to validate the server’s TLS certificate. + :type ca_file: str, optional + + :param crt_file: Path to the TLS client certificate file used to authenticate the pipeline component with upstream or downstream services. + :type crt_file: str + + :param key_file: Path to the private key file associated with the TLS client certificate. Used for mutual TLS authentication. + :type key_file: str, optional + + :param key_pass_key: Name of the environment variable or secret that holds the passphrase for the private key file. + :type key_pass_key: str, optional + + :param server_name: Server name to use for Server Name Indication (SNI) and to verify against the certificate presented by the remote host. Use this when the address you connect to doesn't match the certificate's Common Name or Subject Alternative Name. + :type server_name: str, optional + """ + if ca_file is not unset: + kwargs["ca_file"] = ca_file + if key_file is not unset: + kwargs["key_file"] = key_file + if key_pass_key is not unset: + kwargs["key_pass_key"] = key_pass_key + if server_name is not unset: + kwargs["server_name"] = server_name + super().__init__(kwargs) + + + self_.crt_file = crt_file diff --git a/datadog_api_client/v2/model/observability_pipeline_cloud_prem_destination.py b/datadog_api_client/v2/model/observability_pipeline_cloud_prem_destination.py new file mode 100644 index 0000000000..38e9a529d4 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_cloud_prem_destination.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination_type import ObservabilityPipelineCloudPremDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineCloudPremDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination_type import ObservabilityPipelineCloudPremDestinationType + return { + "buffer": (ObservabilityPipelineBufferOptions,), + "endpoint_url_key": (str,), + "id": (str,), + "inputs": ([str],), + "tls": (ObservabilityPipelineClientTls,), + "type": (ObservabilityPipelineCloudPremDestinationType,), + } + attribute_map = { + "buffer": "buffer", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "inputs": "inputs", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineCloudPremDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineClientTls, UnsetType]=unset, **kwargs): + """ + The ``cloud_prem`` destination sends logs to Datadog CloudPrem. + + **Supported pipeline types:** logs + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the CloudPrem endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineClientTls, optional + + :param type: The destination type. The value should always be ``cloud_prem``. + :type type: ObservabilityPipelineCloudPremDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_cloud_prem_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_cloud_prem_destination_type.py new file mode 100644 index 0000000000..5bd21057d1 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_cloud_prem_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineCloudPremDestinationType(ModelSimple): + """ + The destination type. The value should always be `cloud_prem`. + + :param value: If omitted defaults to "cloud_prem". Must be one of ["cloud_prem"]. + :type value: str + """ + + allowed_values = { + "cloud_prem", + } + CLOUD_PREM: ClassVar["ObservabilityPipelineCloudPremDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineCloudPremDestinationType.CLOUD_PREM = ObservabilityPipelineCloudPremDestinationType("cloud_prem") diff --git a/datadog_api_client/v2/model/observability_pipeline_config.py b/datadog_api_client/v2/model/observability_pipeline_config.py new file mode 100644 index 0000000000..229601e1ea --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_config.py @@ -0,0 +1,166 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_config_destination_item import ObservabilityPipelineConfigDestinationItem + from datadog_api_client.v2.model.observability_pipeline_config_pipeline_type import ObservabilityPipelineConfigPipelineType + from datadog_api_client.v2.model.observability_pipeline_config_processor_group import ObservabilityPipelineConfigProcessorGroup + from datadog_api_client.v2.model.observability_pipeline_config_source_item import ObservabilityPipelineConfigSourceItem + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination import ObservabilityPipelineElasticsearchDestination + from datadog_api_client.v2.model.observability_pipeline_http_client_destination import ObservabilityPipelineHttpClientDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination import ObservabilityPipelineAmazonOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination import ObservabilityPipelineAmazonS3Destination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination import ObservabilityPipelineAmazonS3GenericDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination import ObservabilityPipelineAmazonSecurityLakeDestination + from datadog_api_client.v2.model.azure_storage_destination import AzureStorageDestination + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination import ObservabilityPipelineClickhouseDestination + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination import ObservabilityPipelineCloudPremDestination + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination import ObservabilityPipelineCrowdStrikeNextGenSiemDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination import ObservabilityPipelineDatadogLogsDestination + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination import ObservabilityPipelineGoogleChronicleDestination + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination import ObservabilityPipelineGoogleCloudStorageDestination + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination import ObservabilityPipelineGooglePubSubDestination + from datadog_api_client.v2.model.observability_pipeline_kafka_destination import ObservabilityPipelineKafkaDestination + from datadog_api_client.v2.model.microsoft_sentinel_destination import MicrosoftSentinelDestination + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination import ObservabilityPipelineNewRelicDestination + from datadog_api_client.v2.model.observability_pipeline_open_search_destination import ObservabilityPipelineOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination import ObservabilityPipelineRsyslogDestination + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination import ObservabilityPipelineSentinelOneDestination + from datadog_api_client.v2.model.observability_pipeline_socket_destination import ObservabilityPipelineSocketDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination import ObservabilityPipelineSplunkHecDestination + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination import ObservabilityPipelineSumoLogicDestination + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination import ObservabilityPipelineSyslogNgDestination + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination import ObservabilityPipelineDatabricksZerobusDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import ObservabilityPipelineDatadogMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination import ObservabilityPipelineSplunkHecMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor + from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor + from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor + from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor + from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor + from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source import ObservabilityPipelineDatadogAgentSource + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source import ObservabilityPipelineAmazonDataFirehoseSource + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source import ObservabilityPipelineAmazonS3Source + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source import ObservabilityPipelineFluentBitSource + from datadog_api_client.v2.model.observability_pipeline_fluentd_source import ObservabilityPipelineFluentdSource + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source import ObservabilityPipelineGooglePubSubSource + from datadog_api_client.v2.model.observability_pipeline_http_client_source import ObservabilityPipelineHttpClientSource + from datadog_api_client.v2.model.observability_pipeline_http_server_source import ObservabilityPipelineHttpServerSource + from datadog_api_client.v2.model.observability_pipeline_kafka_source import ObservabilityPipelineKafkaSource + from datadog_api_client.v2.model.observability_pipeline_logstash_source import ObservabilityPipelineLogstashSource + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source import ObservabilityPipelineRsyslogSource + from datadog_api_client.v2.model.observability_pipeline_socket_source import ObservabilityPipelineSocketSource + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source import ObservabilityPipelineSplunkHecSource + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source import ObservabilityPipelineSplunkTcpSource + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source import ObservabilityPipelineSumoLogicSource + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source import ObservabilityPipelineSyslogNgSource + from datadog_api_client.v2.model.observability_pipeline_websocket_source import ObservabilityPipelineWebsocketSource + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import ObservabilityPipelineOpentelemetrySource + +class ObservabilityPipelineConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_config_destination_item import ObservabilityPipelineConfigDestinationItem + from datadog_api_client.v2.model.observability_pipeline_config_pipeline_type import ObservabilityPipelineConfigPipelineType + from datadog_api_client.v2.model.observability_pipeline_config_processor_group import ObservabilityPipelineConfigProcessorGroup + from datadog_api_client.v2.model.observability_pipeline_config_source_item import ObservabilityPipelineConfigSourceItem + return { + "destinations": ([ObservabilityPipelineConfigDestinationItem],), + "pipeline_type": (ObservabilityPipelineConfigPipelineType,), + "processor_groups": ([ObservabilityPipelineConfigProcessorGroup],), + "processors": ([ObservabilityPipelineConfigProcessorGroup],), + "sources": ([ObservabilityPipelineConfigSourceItem],), + "use_legacy_search_syntax": (bool,), + } + attribute_map = { + "destinations": "destinations", + "pipeline_type": "pipeline_type", + "processor_groups": "processor_groups", + "processors": "processors", + "sources": "sources", + "use_legacy_search_syntax": "use_legacy_search_syntax", + } + + def __init__(self_, destinations: List[Union[ObservabilityPipelineConfigDestinationItem, ObservabilityPipelineElasticsearchDestination, ObservabilityPipelineHttpClientDestination, ObservabilityPipelineAmazonOpenSearchDestination, ObservabilityPipelineAmazonS3Destination, ObservabilityPipelineAmazonS3GenericDestination, ObservabilityPipelineAmazonSecurityLakeDestination, AzureStorageDestination, ObservabilityPipelineClickhouseDestination, ObservabilityPipelineCloudPremDestination, ObservabilityPipelineCrowdStrikeNextGenSiemDestination, ObservabilityPipelineDatadogLogsDestination, ObservabilityPipelineGoogleChronicleDestination, ObservabilityPipelineGoogleCloudStorageDestination, ObservabilityPipelineGooglePubSubDestination, ObservabilityPipelineKafkaDestination, MicrosoftSentinelDestination, ObservabilityPipelineNewRelicDestination, ObservabilityPipelineOpenSearchDestination, ObservabilityPipelineRsyslogDestination, ObservabilityPipelineSentinelOneDestination, ObservabilityPipelineSocketDestination, ObservabilityPipelineSplunkHecDestination, ObservabilityPipelineSumoLogicDestination, ObservabilityPipelineSyslogNgDestination, ObservabilityPipelineDatabricksZerobusDestination, ObservabilityPipelineDatadogMetricsDestination, ObservabilityPipelineSplunkHecMetricsDestination]], sources: List[Union[ObservabilityPipelineConfigSourceItem, ObservabilityPipelineDatadogAgentSource, ObservabilityPipelineAmazonDataFirehoseSource, ObservabilityPipelineAmazonS3Source, ObservabilityPipelineFluentBitSource, ObservabilityPipelineFluentdSource, ObservabilityPipelineGooglePubSubSource, ObservabilityPipelineHttpClientSource, ObservabilityPipelineHttpServerSource, ObservabilityPipelineKafkaSource, ObservabilityPipelineLogstashSource, ObservabilityPipelineRsyslogSource, ObservabilityPipelineSocketSource, ObservabilityPipelineSplunkHecSource, ObservabilityPipelineSplunkTcpSource, ObservabilityPipelineSumoLogicSource, ObservabilityPipelineSyslogNgSource, ObservabilityPipelineWebsocketSource, ObservabilityPipelineOpentelemetrySource]], pipeline_type: Union[ObservabilityPipelineConfigPipelineType, UnsetType]=unset, processor_groups: Union[List[ObservabilityPipelineConfigProcessorGroup], UnsetType]=unset, processors: Union[List[ObservabilityPipelineConfigProcessorGroup], UnsetType]=unset, use_legacy_search_syntax: Union[bool, UnsetType]=unset, **kwargs): + """ + Specifies the pipeline's configuration, including its sources, processors, and destinations. + + :param destinations: A list of destination components where processed logs are sent. + :type destinations: [ObservabilityPipelineConfigDestinationItem] + + :param pipeline_type: The type of data being ingested. Defaults to ``logs`` if not specified. + :type pipeline_type: ObservabilityPipelineConfigPipelineType, optional + + :param processor_groups: A list of processor groups that transform or enrich log data. + :type processor_groups: [ObservabilityPipelineConfigProcessorGroup], optional + + :param processors: A list of processor groups that transform or enrich log data. + + **Deprecated:** This field is deprecated, you should now use the processor_groups field. **Deprecated**. + :type processors: [ObservabilityPipelineConfigProcessorGroup], optional + + :param sources: A list of configured data sources for the pipeline. + :type sources: [ObservabilityPipelineConfigSourceItem] + + :param use_legacy_search_syntax: Set to ``true`` to continue using the legacy search syntax while migrating filter queries. After migrating all queries to the new syntax, set to ``false``. + The legacy syntax is deprecated and will eventually be removed. + Requires Observability Pipelines Worker 2.11 or later. + Only applies to ``logs`` pipelines. This field is ignored for ``metrics`` pipelines. + See `Upgrade Your Filter Queries to the New Search Syntax `_ for more information. + :type use_legacy_search_syntax: bool, optional + """ + if pipeline_type is not unset: + kwargs["pipeline_type"] = pipeline_type + if processor_groups is not unset: + kwargs["processor_groups"] = processor_groups + if processors is not unset: + kwargs["processors"] = processors + if use_legacy_search_syntax is not unset: + kwargs["use_legacy_search_syntax"] = use_legacy_search_syntax + super().__init__(kwargs) + + + self_.destinations = destinations + self_.sources = sources diff --git a/datadog_api_client/v2/model/observability_pipeline_config_destination_item.py b/datadog_api_client/v2/model/observability_pipeline_config_destination_item.py new file mode 100644 index 0000000000..b2fcfaa985 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_config_destination_item.py @@ -0,0 +1,350 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineConfigDestinationItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A destination for the pipeline. + + :param api_version: The Elasticsearch API version to use. Set to `auto` to auto-detect. + :type api_version: ObservabilityPipelineElasticsearchDestinationApiVersion, optional + + :param auth: Authentication settings for the Elasticsearch destination. + When `strategy` is `basic`, use `username_key` and `password_key` to reference credentials stored in environment variables or secrets. + :type auth: ObservabilityPipelineElasticsearchDestinationAuth, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param bulk_index: The name of the index to write events to in Elasticsearch. + :type bulk_index: str, optional + + :param compression: Compression configuration for the Elasticsearch destination. + :type compression: ObservabilityPipelineElasticsearchDestinationCompression, optional + + :param data_stream: Configuration options for writing to Elasticsearch Data Streams instead of a fixed index. + :type data_stream: ObservabilityPipelineElasticsearchDestinationDataStream, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the Elasticsearch endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param id_key: The name of the field used as the document ID in Elasticsearch. + :type id_key: str, optional + + :param inputs: A list of component IDs whose output is used as the `input` for this component. + :type inputs: [str] + + :param pipeline: The name of an Elasticsearch ingest pipeline to apply to events before indexing. + :type pipeline: str, optional + + :param request_retry_partial: When `true`, retries failed partial bulk requests when some events in a batch fail while others succeed. + :type request_retry_partial: bool, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The destination type. The value should always be `elasticsearch`. + :type type: ObservabilityPipelineElasticsearchDestinationType + + :param auth_strategy: HTTP authentication strategy. + :type auth_strategy: ObservabilityPipelineHttpClientDestinationAuthStrategy, optional + + :param custom_key: Name of the environment variable or secret that holds a custom header value (used with custom auth strategies). + :type custom_key: str, optional + + :param encoding: Encoding format for log events. + :type encoding: ObservabilityPipelineHttpClientDestinationEncoding + + :param password_key: Name of the environment variable or secret that holds the password (used when `auth_strategy` is `basic`). + :type password_key: str, optional + + :param token_key: Name of the environment variable or secret that holds the bearer token (used when `auth_strategy` is `bearer`). + :type token_key: str, optional + + :param uri_key: Name of the environment variable or secret that holds the HTTP endpoint URI. + :type uri_key: str, optional + + :param username_key: Name of the environment variable or secret that holds the username (used when `auth_strategy` is `basic`). + :type username_key: str, optional + + :param bucket: S3 bucket name. + :type bucket: str + + :param key_prefix: Optional prefix for object keys. + :type key_prefix: str, optional + + :param region: AWS region of the S3 bucket. + :type region: str + + :param server_side_encryption: Server-side encryption type for Amazon S3. + :type server_side_encryption: ObservabilityPipelineAmazonS3DestinationServerSideEncryption, optional + + :param ssekms_key_id: The AWS KMS key ID used for SSE-KMS encryption. + Only applies when `server_side_encryption` is set to `aws:kms`. + :type ssekms_key_id: str, optional + + :param storage_class: S3 storage class. + :type storage_class: ObservabilityPipelineAmazonS3DestinationStorageClass + + :param batch_settings: Event batching settings + :type batch_settings: ObservabilityPipelineAmazonS3GenericBatchSettings, optional + + :param custom_source_name: Custom source name for the logs in Security Lake. + :type custom_source_name: str + + :param blob_prefix: Optional prefix for blobs written to the container. + :type blob_prefix: str, optional + + :param connection_string_key: Name of the environment variable or secret that holds the Azure Storage connection string. + :type connection_string_key: str, optional + + :param container_name: The name of the Azure Blob Storage container to store logs in. + :type container_name: str + + :param batch: Batching configuration for ClickHouse inserts. + :type batch: ObservabilityPipelineClickhouseDestinationBatch, optional + + :param batch_encoding: Batch encoding configuration for the ClickHouse destination. + Required when `format` is `arrow_stream`. The `codec` field must be set to `arrow_stream`. + :type batch_encoding: ObservabilityPipelineClickhouseDestinationBatchEncoding, optional + + :param database: Optional ClickHouse database name. If omitted, the user's default database on the ClickHouse server is used. + :type database: str, optional + + :param date_time_best_effort: When `true`, enables flexible DateTime parsing on the ClickHouse server side. + :type date_time_best_effort: bool, optional + + :param format: Insert format for events sent to ClickHouse. + - `json_each_row`: Maps event fields to columns by name (ClickHouse `JSONEachRow`). + - `json_as_object`: Inserts each event into a single `Object('json')` / `JSON` column (ClickHouse `JSONAsObject`). + - `json_as_string`: Inserts each event into a single `String`-typed column as raw JSON (ClickHouse `JSONAsString`). + - `arrow_stream`: Batches events using Apache Arrow IPC streaming format. Requires `batch_encoding`. + :type format: ObservabilityPipelineClickhouseDestinationFormat, optional + + :param skip_unknown_fields: When `true`, fields not present in the target table schema are dropped instead of causing insert errors. + When unset, the ClickHouse server's own `input_format_skip_unknown_fields` setting applies. + :type skip_unknown_fields: bool, none_type, optional + + :param table: Target ClickHouse table name. Events are inserted into this table. + :type table: str + + :param routes: A list of routing rules that forward matching logs to Datadog using dedicated API keys. + :type routes: [ObservabilityPipelineDatadogLogsDestinationRoute], optional + + :param customer_id: The Google Chronicle customer ID. + :type customer_id: str + + :param log_type: The log type metadata associated with the Chronicle destination. + :type log_type: str, optional + + :param acl: Access control list setting for objects written to the bucket. + :type acl: ObservabilityPipelineGoogleCloudStorageDestinationAcl, optional + + :param metadata: Custom metadata to attach to each object uploaded to the GCS bucket. + :type metadata: [ObservabilityPipelineMetadataEntry], optional + + :param project: The Google Cloud project ID that owns the Pub/Sub topic. + :type project: str + + :param topic: The Pub/Sub topic name to publish logs to. + :type topic: str + + :param bootstrap_servers_key: Name of the environment variable or secret that holds the Kafka bootstrap servers list. + :type bootstrap_servers_key: str, optional + + :param headers_key: The field name to use for Kafka message headers. + :type headers_key: str, optional + + :param key_field: The field name to use as the Kafka message key. + :type key_field: str, optional + + :param librdkafka_options: Optional list of advanced Kafka producer configuration options, defined as key-value pairs. + :type librdkafka_options: [ObservabilityPipelineKafkaLibrdkafkaOption], optional + + :param message_timeout_ms: Maximum time in milliseconds to wait for message delivery confirmation. + :type message_timeout_ms: int, optional + + :param rate_limit_duration_secs: Duration in seconds for the rate limit window. + :type rate_limit_duration_secs: int, optional + + :param rate_limit_num: Maximum number of messages allowed per rate limit duration. + :type rate_limit_num: int, optional + + :param sasl: Specifies the SASL mechanism for authenticating with a Kafka cluster. + :type sasl: ObservabilityPipelineKafkaSasl, optional + + :param socket_timeout_ms: Socket timeout in milliseconds for network requests. + :type socket_timeout_ms: int, optional + + :param client_id: Azure AD client ID used for authentication. + :type client_id: str + + :param client_secret_key: Name of the environment variable or secret that holds the Azure AD client secret. + :type client_secret_key: str, optional + + :param dce_uri_key: Name of the environment variable or secret that holds the Data Collection Endpoint (DCE) URI. + :type dce_uri_key: str, optional + + :param dcr_immutable_id: The immutable ID of the Data Collection Rule (DCR). + :type dcr_immutable_id: str + + :param tenant_id: Azure AD tenant ID. + :type tenant_id: str + + :param account_id_key: Name of the environment variable or secret that holds the New Relic account ID. + :type account_id_key: str, optional + + :param license_key_key: Name of the environment variable or secret that holds the New Relic license key. + :type license_key_key: str, optional + + :param keepalive: Optional socket keepalive duration in milliseconds. + :type keepalive: int, optional + + :param address_key: Name of the environment variable or secret that holds the socket address (host:port). + :type address_key: str, optional + + :param framing: Framing method configuration. + :type framing: ObservabilityPipelineSocketDestinationFraming + + :param mode: Protocol used to send logs. + :type mode: ObservabilityPipelineSocketDestinationMode + + :param auto_extract_timestamp: If `true`, Splunk tries to extract timestamps from incoming log events. + If `false`, Splunk assigns the time the event was received. + :type auto_extract_timestamp: bool, optional + + :param index: Optional name of the Splunk index where logs are written. + :type index: str, optional + + :param indexed_fields: List of log field names to send as indexed fields to Splunk HEC. Available only when `encoding` is `json`. + :type indexed_fields: [str], optional + + :param sourcetype: The Splunk sourcetype to assign to log events. + :type sourcetype: str, optional + + :param token_strategy: Controls how the Splunk HEC token is supplied. Use `custom` to provide a token with `token_key`, or `from_source` to forward the token received from an upstream Splunk HEC source. + :type token_strategy: ObservabilityPipelineSplunkHecDestinationTokenStrategy, optional + + :param header_custom_fields: A list of custom headers to include in the request to Sumo Logic. + :type header_custom_fields: [ObservabilityPipelineSumoLogicDestinationHeaderCustomFieldsItem], optional + + :param header_host_name: Optional override for the host name header. + :type header_host_name: str, optional + + :param header_source_category: Optional override for the source category header. + :type header_source_category: str, optional + + :param header_source_name: Optional override for the source name header. + :type header_source_name: str, optional + + :param ingestion_endpoint_key: Name of the environment variable or the secret identifier that references the Databricks Zerobus ingestion endpoint, which is used to stream data directly into your Databricks Lakehouse. + :type ingestion_endpoint_key: str, optional + + :param table_name: The fully qualified name of your target Databricks table. Make sure this table already exists in your Databricks workspace before deploying. + :type table_name: str + + :param unity_catalog_endpoint_key: Name of the environment variable or the secret identifier that references your Databricks workspace URL, which is used to communicate with the Unity Catalog API. + :type unity_catalog_endpoint_key: str, optional + + :param default_namespace: Optional default namespace for metrics sent to Splunk HEC. + :type default_namespace: str, optional + + :param source: The Splunk source field value for metric events. + :type source: str, 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.observability_pipeline_elasticsearch_destination import ObservabilityPipelineElasticsearchDestination + from datadog_api_client.v2.model.observability_pipeline_http_client_destination import ObservabilityPipelineHttpClientDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination import ObservabilityPipelineAmazonOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination import ObservabilityPipelineAmazonS3Destination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination import ObservabilityPipelineAmazonS3GenericDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination import ObservabilityPipelineAmazonSecurityLakeDestination + from datadog_api_client.v2.model.azure_storage_destination import AzureStorageDestination + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination import ObservabilityPipelineClickhouseDestination + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination import ObservabilityPipelineCloudPremDestination + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination import ObservabilityPipelineCrowdStrikeNextGenSiemDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination import ObservabilityPipelineDatadogLogsDestination + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination import ObservabilityPipelineGoogleChronicleDestination + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination import ObservabilityPipelineGoogleCloudStorageDestination + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination import ObservabilityPipelineGooglePubSubDestination + from datadog_api_client.v2.model.observability_pipeline_kafka_destination import ObservabilityPipelineKafkaDestination + from datadog_api_client.v2.model.microsoft_sentinel_destination import MicrosoftSentinelDestination + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination import ObservabilityPipelineNewRelicDestination + from datadog_api_client.v2.model.observability_pipeline_open_search_destination import ObservabilityPipelineOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination import ObservabilityPipelineRsyslogDestination + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination import ObservabilityPipelineSentinelOneDestination + from datadog_api_client.v2.model.observability_pipeline_socket_destination import ObservabilityPipelineSocketDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination import ObservabilityPipelineSplunkHecDestination + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination import ObservabilityPipelineSumoLogicDestination + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination import ObservabilityPipelineSyslogNgDestination + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination import ObservabilityPipelineDatabricksZerobusDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import ObservabilityPipelineDatadogMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination import ObservabilityPipelineSplunkHecMetricsDestination + return { + "oneOf": [ + ObservabilityPipelineElasticsearchDestination, + ObservabilityPipelineHttpClientDestination, + ObservabilityPipelineAmazonOpenSearchDestination, + ObservabilityPipelineAmazonS3Destination, + ObservabilityPipelineAmazonS3GenericDestination, + ObservabilityPipelineAmazonSecurityLakeDestination, + AzureStorageDestination, + ObservabilityPipelineClickhouseDestination, + ObservabilityPipelineCloudPremDestination, + ObservabilityPipelineCrowdStrikeNextGenSiemDestination, + ObservabilityPipelineDatadogLogsDestination, + ObservabilityPipelineGoogleChronicleDestination, + ObservabilityPipelineGoogleCloudStorageDestination, + ObservabilityPipelineGooglePubSubDestination, + ObservabilityPipelineKafkaDestination, + MicrosoftSentinelDestination, + ObservabilityPipelineNewRelicDestination, + ObservabilityPipelineOpenSearchDestination, + ObservabilityPipelineRsyslogDestination, + ObservabilityPipelineSentinelOneDestination, + ObservabilityPipelineSocketDestination, + ObservabilityPipelineSplunkHecDestination, + ObservabilityPipelineSumoLogicDestination, + ObservabilityPipelineSyslogNgDestination, + ObservabilityPipelineDatabricksZerobusDestination, + ObservabilityPipelineDatadogMetricsDestination, + ObservabilityPipelineSplunkHecMetricsDestination, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_config_pipeline_type.py b/datadog_api_client/v2/model/observability_pipeline_config_pipeline_type.py new file mode 100644 index 0000000000..bb8b3f66c6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_config_pipeline_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineConfigPipelineType(ModelSimple): + """ + The type of data being ingested. Defaults to `logs` if not specified. + + :param value: If omitted defaults to "logs". Must be one of ["logs", "metrics"]. + :type value: str + """ + + allowed_values = { + "logs", + "metrics", + } + LOGS: ClassVar["ObservabilityPipelineConfigPipelineType"] + METRICS: ClassVar["ObservabilityPipelineConfigPipelineType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineConfigPipelineType.LOGS = ObservabilityPipelineConfigPipelineType("logs") +ObservabilityPipelineConfigPipelineType.METRICS = ObservabilityPipelineConfigPipelineType("metrics") diff --git a/datadog_api_client/v2/model/observability_pipeline_config_processor_group.py b/datadog_api_client/v2/model/observability_pipeline_config_processor_group.py new file mode 100644 index 0000000000..32dc42cd45 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_config_processor_group.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_config_processor_item import ObservabilityPipelineConfigProcessorItem + from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor + from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor + from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor + from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor + from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor + from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor + +class ObservabilityPipelineConfigProcessorGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_config_processor_item import ObservabilityPipelineConfigProcessorItem + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "inputs": ([str],), + "processors": ([ObservabilityPipelineConfigProcessorItem],), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "inputs": "inputs", + "processors": "processors", + } + + def __init__(self_, enabled: bool, id: str, include: str, inputs: List[str], processors: List[Union[ObservabilityPipelineConfigProcessorItem, ObservabilityPipelineFilterProcessor, ObservabilityPipelineAddEnvVarsProcessor, ObservabilityPipelineAddFieldsProcessor, ObservabilityPipelineAddHostnameProcessor, ObservabilityPipelineCustomProcessor, ObservabilityPipelineDatadogTagsProcessor, ObservabilityPipelineDedupeProcessor, ObservabilityPipelineEnrichmentTableProcessor, ObservabilityPipelineGenerateMetricsProcessor, ObservabilityPipelineGenerateMetricsV2Processor, ObservabilityPipelineOcsfMapperProcessor, ObservabilityPipelineParseGrokProcessor, ObservabilityPipelineParseJSONProcessor, ObservabilityPipelineParseXMLProcessor, ObservabilityPipelineQuotaProcessor, ObservabilityPipelineReduceProcessor, ObservabilityPipelineRemoveFieldsProcessor, ObservabilityPipelineRenameFieldsProcessor, ObservabilityPipelineSampleProcessor, ObservabilityPipelineSensitiveDataScannerProcessor, ObservabilityPipelineSplitArrayProcessor, ObservabilityPipelineThrottleProcessor, ObservabilityPipelineAddMetricTagsProcessor, ObservabilityPipelineAggregateProcessor, ObservabilityPipelineMetricTagsProcessor, ObservabilityPipelineRenameMetricTagsProcessor, ObservabilityPipelineTagCardinalityLimitProcessor]], display_name: Union[str, UnsetType]=unset, **kwargs): + """ + A group of processors. + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Whether this processor group is enabled. + :type enabled: bool + + :param id: The unique identifier for the processor group. + :type id: str + + :param include: Conditional expression for when this processor group should execute. + :type include: str + + :param inputs: A list of IDs for components whose output is used as the input for this processor group. + :type inputs: [str] + + :param processors: Processors applied sequentially within this group. Events flow through each processor in order. + :type processors: [ObservabilityPipelineConfigProcessorItem] + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.inputs = inputs + self_.processors = processors diff --git a/datadog_api_client/v2/model/observability_pipeline_config_processor_item.py b/datadog_api_client/v2/model/observability_pipeline_config_processor_item.py new file mode 100644 index 0000000000..4e17b3df4f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_config_processor_item.py @@ -0,0 +1,254 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineConfigProcessorItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A processor for the pipeline. + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the `input` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs/metrics should pass through the filter. Logs/metrics that match this query continue to downstream components; others are dropped. + :type include: str + + :param type: The processor type. The value should always be `filter`. + :type type: ObservabilityPipelineFilterProcessorType + + :param variables: A list of environment variable mappings to apply to log fields. + :type variables: [ObservabilityPipelineAddEnvVarsProcessorVariable] + + :param fields: A list of static fields (key-value pairs) that is added to each log event processed by this component. + :type fields: [ObservabilityPipelineFieldValue] + + :param remaps: Array of VRL remap rules. + :type remaps: [ObservabilityPipelineCustomProcessorRemap] + + :param action: The action to take on tags with matching keys. + :type action: ObservabilityPipelineDatadogTagsProcessorAction + + :param keys: A list of tag keys. + :type keys: [str] + + :param mode: The processing mode. + :type mode: ObservabilityPipelineDatadogTagsProcessorMode + + :param cache: Configuration for the cache used to detect duplicates. + :type cache: ObservabilityPipelineDedupeProcessorCache, optional + + :param file: Defines a static enrichment table loaded from a CSV file. + :type file: ObservabilityPipelineEnrichmentTableFile, optional + + :param geoip: Uses a GeoIP database to enrich logs based on an IP field. + :type geoip: ObservabilityPipelineEnrichmentTableGeoIp, optional + + :param reference_table: Uses a Datadog reference table to enrich logs. + :type reference_table: ObservabilityPipelineEnrichmentTableReferenceTable, optional + + :param target: Path where enrichment results should be stored in the log. + :type target: str + + :param metrics: Configuration for generating individual metrics. + :type metrics: [ObservabilityPipelineGeneratedMetric], optional + + :param keep_unmatched: Whether to keep an event that does not match any of the mapping filters. + :type keep_unmatched: bool, optional + + :param mappings: A list of mapping rules to convert events to the OCSF format. + :type mappings: [ObservabilityPipelineOcsfMapperProcessorMapping] + + :param disable_library_rules: If set to `true`, disables the default Grok rules provided by Datadog. + :type disable_library_rules: bool, optional + + :param field: The log field to parse with the Grok rules. + :type field: str, optional + + :param rules: The list of Grok parsing rules selected by either source field or include query. + :type rules: [ObservabilityPipelineParseGrokProcessorRuleItem] + + :param always_use_text_key: Whether to always use a text key for element content. + :type always_use_text_key: bool, optional + + :param attr_prefix: The prefix to use for XML attributes in the parsed output. + :type attr_prefix: str, optional + + :param include_attr: Whether to include XML attributes in the parsed output. + :type include_attr: bool, optional + + :param parse_bool: Whether to parse boolean values from strings. + :type parse_bool: bool, optional + + :param parse_null: Whether to parse null values. + :type parse_null: bool, optional + + :param parse_number: Whether to parse numeric values from strings. + :type parse_number: bool, optional + + :param text_key: The key name to use for text content within XML elements. Must be at least 1 character if specified. + :type text_key: str, optional + + :param drop_events: If set to `true`, logs that match the quota filter and are sent after the quota is exceeded are dropped. Logs that do not match the filter continue through the pipeline. **Note**: You can set either `drop_events` or `overflow_action`, but not both. + :type drop_events: bool, optional + + :param ignore_when_missing_partitions: If `true`, the processor skips quota checks when partition fields are missing from the logs. + :type ignore_when_missing_partitions: bool, optional + + :param limit: The maximum amount of data or number of events allowed before the quota is enforced. Can be specified in bytes or events. + :type limit: ObservabilityPipelineQuotaProcessorLimit + + :param name: Name of the quota. + :type name: str + + :param overflow_action: The action to take when the quota or bucket limit is exceeded. Options: + - `drop`: Drop the event. + - `no_action`: Let the event pass through. + - `overflow_routing`: Route to an overflow destination. + :type overflow_action: ObservabilityPipelineQuotaProcessorOverflowAction, optional + + :param overrides: A list of alternate quota rules that apply to specific sets of events, identified by matching field values. Each override can define a custom limit. + :type overrides: [ObservabilityPipelineQuotaProcessorOverride], optional + + :param partition_fields: A list of fields used to segment log traffic for quota enforcement. Quotas are tracked independently by unique combinations of these field values. + :type partition_fields: [str], optional + + :param too_many_buckets_action: The action to take when the quota or bucket limit is exceeded. Options: + - `drop`: Drop the event. + - `no_action`: Let the event pass through. + - `overflow_routing`: Route to an overflow destination. + :type too_many_buckets_action: ObservabilityPipelineQuotaProcessorOverflowAction, optional + + :param group_by: A list of fields used to group log events for merging. + :type group_by: [str] + + :param merge_strategies: List of merge strategies defining how values from grouped events should be combined. + :type merge_strategies: [ObservabilityPipelineReduceProcessorMergeStrategy] + + :param percentage: The percentage of logs to sample. + :type percentage: float + + :param arrays: A list of array split configurations. + :type arrays: [ObservabilityPipelineSplitArrayProcessorArrayConfig] + + :param threshold: the number of events allowed in a given time window. Events sent after the threshold has been reached, are dropped. + :type threshold: int + + :param window: The time window in seconds over which the threshold applies. + :type window: float + + :param tags: A list of static tags (key-value pairs) added to each metric processed by this component. + :type tags: [ObservabilityPipelineFieldValue] + + :param interval_secs: The interval, in seconds, over which metrics are aggregated. + :type interval_secs: int + + :param limit_exceeded_action: The action to take when the cardinality limit is exceeded. + :type limit_exceeded_action: ObservabilityPipelineTagCardinalityLimitProcessorAction + + :param per_metric_limits: A list of per-metric cardinality overrides that take precedence over the default `value_limit`. + :type per_metric_limits: [ObservabilityPipelineTagCardinalityLimitProcessorPerMetricLimit], optional + + :param tracking_mode: Controls whether the processor uses exact or probabilistic tag tracking. + :type tracking_mode: ObservabilityPipelineTagCardinalityLimitProcessorTrackingMode + + :param value_limit: The default maximum number of distinct tag value combinations allowed per metric. + :type value_limit: int + """ + 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.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor + from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor + from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor + from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor + from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor + from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor + return { + "oneOf": [ + ObservabilityPipelineFilterProcessor, + ObservabilityPipelineAddEnvVarsProcessor, + ObservabilityPipelineAddFieldsProcessor, + ObservabilityPipelineAddHostnameProcessor, + ObservabilityPipelineCustomProcessor, + ObservabilityPipelineDatadogTagsProcessor, + ObservabilityPipelineDedupeProcessor, + ObservabilityPipelineEnrichmentTableProcessor, + ObservabilityPipelineGenerateMetricsProcessor, + ObservabilityPipelineGenerateMetricsV2Processor, + ObservabilityPipelineOcsfMapperProcessor, + ObservabilityPipelineParseGrokProcessor, + ObservabilityPipelineParseJSONProcessor, + ObservabilityPipelineParseXMLProcessor, + ObservabilityPipelineQuotaProcessor, + ObservabilityPipelineReduceProcessor, + ObservabilityPipelineRemoveFieldsProcessor, + ObservabilityPipelineRenameFieldsProcessor, + ObservabilityPipelineSampleProcessor, + ObservabilityPipelineSensitiveDataScannerProcessor, + ObservabilityPipelineSplitArrayProcessor, + ObservabilityPipelineThrottleProcessor, + ObservabilityPipelineAddMetricTagsProcessor, + ObservabilityPipelineAggregateProcessor, + ObservabilityPipelineMetricTagsProcessor, + ObservabilityPipelineRenameMetricTagsProcessor, + ObservabilityPipelineTagCardinalityLimitProcessor, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_config_source_item.py b/datadog_api_client/v2/model/observability_pipeline_config_source_item.py new file mode 100644 index 0000000000..f2bd333d21 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_config_source_item.py @@ -0,0 +1,180 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineConfigSourceItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A data source for the pipeline. + + :param address_key: Name of the environment variable or secret that holds the listen address for the Datadog Agent source. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the `input` to downstream components). + :type id: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The source type. The value should always be `datadog_agent`. + :type type: ObservabilityPipelineDatadogAgentSourceType + + :param auth: AWS authentication credentials used for accessing AWS services such as S3. + If omitted, the system’s default credentials are used (for example, the IAM role and environment variables). + :type auth: ObservabilityPipelineAwsAuth, optional + + :param compression: Compression format for objects retrieved from the S3 bucket. Use `auto` to detect compression from the object's Content-Encoding header or file extension. + :type compression: ObservabilityPipelineAmazonS3SourceCompression, optional + + :param region: AWS region where the S3 bucket resides. + :type region: str + + :param url_key: Name of the environment variable or secret that holds the S3 bucket URL. + :type url_key: str, optional + + :param decoding: The decoding format used to interpret incoming logs. + :type decoding: ObservabilityPipelineDecoding + + :param project: The Google Cloud project ID that owns the Pub/Sub subscription. + :type project: str + + :param subscription: The Pub/Sub subscription name from which messages are consumed. + :type subscription: str + + :param auth_strategy: Optional authentication strategy for HTTP requests. + :type auth_strategy: ObservabilityPipelineHttpClientSourceAuthStrategy, optional + + :param custom_key: Name of the environment variable or secret that holds a custom header value (used with custom auth strategies). + :type custom_key: str, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the HTTP endpoint URL to scrape. + :type endpoint_url_key: str, optional + + :param password_key: Name of the environment variable or secret that holds the password (used when `auth_strategy` is `basic`). + :type password_key: str, optional + + :param scrape_interval_secs: The interval (in seconds) between HTTP scrape requests. + :type scrape_interval_secs: int, optional + + :param scrape_timeout_secs: The timeout (in seconds) for each scrape request. + :type scrape_timeout_secs: int, optional + + :param token_key: Name of the environment variable or secret that holds the bearer token (used when `auth_strategy` is `bearer`). + :type token_key: str, optional + + :param username_key: Name of the environment variable or secret that holds the username (used when `auth_strategy` is `basic`). + :type username_key: str, optional + + :param valid_tokens: A list of tokens that are accepted for authenticating incoming HTTP requests. When set, + the source rejects any request whose token does not match an enabled entry in this list. + Cannot be combined with the `plain` auth strategy. + :type valid_tokens: [ObservabilityPipelineHttpServerSourceValidToken], optional + + :param bootstrap_servers_key: Name of the environment variable or secret that holds the Kafka bootstrap servers list. + :type bootstrap_servers_key: str, optional + + :param group_id: Consumer group ID used by the Kafka client. + :type group_id: str + + :param librdkafka_options: Optional list of advanced Kafka client configuration options, defined as key-value pairs. + :type librdkafka_options: [ObservabilityPipelineKafkaLibrdkafkaOption], optional + + :param sasl: Specifies the SASL mechanism for authenticating with a Kafka cluster. + :type sasl: ObservabilityPipelineKafkaSasl, optional + + :param topics: A list of Kafka topic names to subscribe to. The source ingests messages from each topic specified. + :type topics: [str] + + :param mode: Protocol used by the syslog source to receive messages. + :type mode: ObservabilityPipelineSyslogSourceMode + + :param framing: Framing method configuration for the socket source. + :type framing: ObservabilityPipelineSocketSourceFraming + + :param store_hec_token: When `true`, the Splunk HEC token from the incoming request is stored in the event metadata. + This allows downstream components to forward the token to other Splunk HEC destinations. + :type store_hec_token: bool, optional + + :param uri_key: Name of the environment variable or secret that holds the WebSocket server URI (`ws://` or `wss://`). + :type uri_key: str, optional + + :param grpc_address_key: Environment variable name containing the gRPC server address for receiving OTLP data. Must be a valid environment variable name (alphanumeric characters and underscores only). + :type grpc_address_key: str, optional + + :param http_address_key: Environment variable name containing the HTTP server address for receiving OTLP data. Must be a valid environment variable name (alphanumeric characters and underscores only). + :type http_address_key: str, 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.observability_pipeline_datadog_agent_source import ObservabilityPipelineDatadogAgentSource + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source import ObservabilityPipelineAmazonDataFirehoseSource + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source import ObservabilityPipelineAmazonS3Source + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source import ObservabilityPipelineFluentBitSource + from datadog_api_client.v2.model.observability_pipeline_fluentd_source import ObservabilityPipelineFluentdSource + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source import ObservabilityPipelineGooglePubSubSource + from datadog_api_client.v2.model.observability_pipeline_http_client_source import ObservabilityPipelineHttpClientSource + from datadog_api_client.v2.model.observability_pipeline_http_server_source import ObservabilityPipelineHttpServerSource + from datadog_api_client.v2.model.observability_pipeline_kafka_source import ObservabilityPipelineKafkaSource + from datadog_api_client.v2.model.observability_pipeline_logstash_source import ObservabilityPipelineLogstashSource + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source import ObservabilityPipelineRsyslogSource + from datadog_api_client.v2.model.observability_pipeline_socket_source import ObservabilityPipelineSocketSource + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source import ObservabilityPipelineSplunkHecSource + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source import ObservabilityPipelineSplunkTcpSource + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source import ObservabilityPipelineSumoLogicSource + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source import ObservabilityPipelineSyslogNgSource + from datadog_api_client.v2.model.observability_pipeline_websocket_source import ObservabilityPipelineWebsocketSource + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import ObservabilityPipelineOpentelemetrySource + return { + "oneOf": [ + ObservabilityPipelineDatadogAgentSource, + ObservabilityPipelineAmazonDataFirehoseSource, + ObservabilityPipelineAmazonS3Source, + ObservabilityPipelineFluentBitSource, + ObservabilityPipelineFluentdSource, + ObservabilityPipelineGooglePubSubSource, + ObservabilityPipelineHttpClientSource, + ObservabilityPipelineHttpServerSource, + ObservabilityPipelineKafkaSource, + ObservabilityPipelineLogstashSource, + ObservabilityPipelineRsyslogSource, + ObservabilityPipelineSocketSource, + ObservabilityPipelineSplunkHecSource, + ObservabilityPipelineSplunkTcpSource, + ObservabilityPipelineSumoLogicSource, + ObservabilityPipelineSyslogNgSource, + ObservabilityPipelineWebsocketSource, + ObservabilityPipelineOpentelemetrySource, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination.py b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination.py new file mode 100644 index 0000000000..b71c8ae3f0 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_compression import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_encoding import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_type import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineCrowdStrikeNextGenSiemDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_compression import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_encoding import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_type import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType + return { + "buffer": (ObservabilityPipelineBufferOptions,), + "compression": (ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompression,), + "encoding": (ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding,), + "endpoint_url_key": (str,), + "id": (str,), + "inputs": ([str],), + "tls": (ObservabilityPipelineTls,), + "token_key": (str,), + "type": (ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType,), + } + attribute_map = { + "buffer": "buffer", + "compression": "compression", + "encoding": "encoding", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "inputs": "inputs", + "tls": "tls", + "token_key": "token_key", + "type": "type", + } + + def __init__(self_, encoding: ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding, id: str, inputs: List[str], type: ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, compression: Union[ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompression, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, token_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``crowdstrike_next_gen_siem`` destination forwards logs to CrowdStrike Next Gen SIEM. + + **Supported pipeline types:** logs + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param compression: Compression configuration for log events. + :type compression: ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompression, optional + + :param encoding: Encoding format for log events. + :type encoding: ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding + + :param endpoint_url_key: Name of the environment variable or secret that holds the CrowdStrike endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param token_key: Name of the environment variable or secret that holds the CrowdStrike API token. + :type token_key: str, optional + + :param type: The destination type. The value should always be ``crowdstrike_next_gen_siem``. + :type type: ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if compression is not unset: + kwargs["compression"] = compression + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if tls is not unset: + kwargs["tls"] = tls + if token_key is not unset: + kwargs["token_key"] = token_key + super().__init__(kwargs) + + + self_.encoding = encoding + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_compression.py b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_compression.py new file mode 100644 index 0000000000..3d00f5d82a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_compression.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_compression_algorithm import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm + +class ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompression(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_compression_algorithm import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm + return { + "algorithm": (ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm,), + "level": (int,), + } + attribute_map = { + "algorithm": "algorithm", + "level": "level", + } + + def __init__(self_, algorithm: ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm, level: Union[int, UnsetType]=unset, **kwargs): + """ + Compression configuration for log events. + + :param algorithm: Compression algorithm for log events. + :type algorithm: ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm + + :param level: Compression level. + :type level: int, optional + """ + if level is not unset: + kwargs["level"] = level + super().__init__(kwargs) + + + self_.algorithm = algorithm diff --git a/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_compression_algorithm.py b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_compression_algorithm.py new file mode 100644 index 0000000000..7a0e4e3d34 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_compression_algorithm.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm(ModelSimple): + """ + Compression algorithm for log events. + + :param value: Must be one of ["gzip", "zlib"]. + :type value: str + """ + + allowed_values = { + "gzip", + "zlib", + } + GZIP: ClassVar["ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm"] + ZLIB: ClassVar["ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm.GZIP = ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm("gzip") +ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm.ZLIB = ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm("zlib") diff --git a/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_encoding.py b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_encoding.py new file mode 100644 index 0000000000..8a95a32465 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding(ModelSimple): + """ + Encoding format for log events. + + :param value: Must be one of ["json", "raw_message"]. + :type value: str + """ + + allowed_values = { + "json", + "raw_message", + } + JSON: ClassVar["ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding"] + RAW_MESSAGE: ClassVar["ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding.JSON = ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding("json") +ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding.RAW_MESSAGE = ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding("raw_message") diff --git a/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_type.py new file mode 100644 index 0000000000..2e52297421 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_crowd_strike_next_gen_siem_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType(ModelSimple): + """ + The destination type. The value should always be `crowdstrike_next_gen_siem`. + + :param value: If omitted defaults to "crowdstrike_next_gen_siem". Must be one of ["crowdstrike_next_gen_siem"]. + :type value: str + """ + + allowed_values = { + "crowdstrike_next_gen_siem", + } + CROWDSTRIKE_NEXT_GEN_SIEM: ClassVar["ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType.CROWDSTRIKE_NEXT_GEN_SIEM = ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType("crowdstrike_next_gen_siem") diff --git a/datadog_api_client/v2/model/observability_pipeline_custom_processor.py b/datadog_api_client/v2/model/observability_pipeline_custom_processor.py new file mode 100644 index 0000000000..ec42990cd3 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_custom_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_custom_processor_remap import ObservabilityPipelineCustomProcessorRemap + from datadog_api_client.v2.model.observability_pipeline_custom_processor_type import ObservabilityPipelineCustomProcessorType + +class ObservabilityPipelineCustomProcessor(ModelNormal): + validations = { + "remaps": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_custom_processor_remap import ObservabilityPipelineCustomProcessorRemap + from datadog_api_client.v2.model.observability_pipeline_custom_processor_type import ObservabilityPipelineCustomProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "remaps": ([ObservabilityPipelineCustomProcessorRemap],), + "type": (ObservabilityPipelineCustomProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "remaps": "remaps", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, remaps: List[ObservabilityPipelineCustomProcessorRemap], type: ObservabilityPipelineCustomProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``custom_processor`` processor transforms events using `Vector Remap Language (VRL) `_ scripts with advanced filtering capabilities. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this processor. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. This field should always be set to ``*`` for the custom_processor processor. + :type include: str + + :param remaps: Array of VRL remap rules. + :type remaps: [ObservabilityPipelineCustomProcessorRemap] + + :param type: The processor type. The value should always be ``custom_processor``. + :type type: ObservabilityPipelineCustomProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + include = kwargs.get("include", "*") + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.remaps = remaps + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_custom_processor_remap.py b/datadog_api_client/v2/model/observability_pipeline_custom_processor_remap.py new file mode 100644 index 0000000000..023187e02f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_custom_processor_remap.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineCustomProcessorRemap(ModelNormal): + @cached_property + def openapi_types(_): + return { + "drop_on_error": (bool,), + "enabled": (bool,), + "include": (str,), + "name": (str,), + "source": (str,), + } + attribute_map = { + "drop_on_error": "drop_on_error", + "enabled": "enabled", + "include": "include", + "name": "name", + "source": "source", + } + + def __init__(self_, drop_on_error: bool, include: str, name: str, source: str, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Defines a single VRL remap rule with its own filtering and transformation logic. + + :param drop_on_error: Whether to drop events that caused errors during processing. + :type drop_on_error: bool + + :param enabled: Whether this remap rule is enabled. + :type enabled: bool, optional + + :param include: A Datadog search query used to filter events for this specific remap rule. + :type include: str + + :param name: A descriptive name for this remap rule. + :type name: str + + :param source: The VRL script source code that defines the processing logic. + :type source: str + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + + self_.drop_on_error = drop_on_error + self_.include = include + self_.name = name + self_.source = source diff --git a/datadog_api_client/v2/model/observability_pipeline_custom_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_custom_processor_type.py new file mode 100644 index 0000000000..b03101b46c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_custom_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineCustomProcessorType(ModelSimple): + """ + The processor type. The value should always be `custom_processor`. + + :param value: If omitted defaults to "custom_processor". Must be one of ["custom_processor"]. + :type value: str + """ + + allowed_values = { + "custom_processor", + } + CUSTOM_PROCESSOR: ClassVar["ObservabilityPipelineCustomProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineCustomProcessorType.CUSTOM_PROCESSOR = ObservabilityPipelineCustomProcessorType("custom_processor") diff --git a/datadog_api_client/v2/model/observability_pipeline_data.py b/datadog_api_client/v2/model/observability_pipeline_data.py new file mode 100644 index 0000000000..930499b900 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_data.py @@ -0,0 +1,133 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_data_attributes import ObservabilityPipelineDataAttributes + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination import ObservabilityPipelineElasticsearchDestination + from datadog_api_client.v2.model.observability_pipeline_http_client_destination import ObservabilityPipelineHttpClientDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination import ObservabilityPipelineAmazonOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination import ObservabilityPipelineAmazonS3Destination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination import ObservabilityPipelineAmazonS3GenericDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination import ObservabilityPipelineAmazonSecurityLakeDestination + from datadog_api_client.v2.model.azure_storage_destination import AzureStorageDestination + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination import ObservabilityPipelineClickhouseDestination + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination import ObservabilityPipelineCloudPremDestination + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination import ObservabilityPipelineCrowdStrikeNextGenSiemDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination import ObservabilityPipelineDatadogLogsDestination + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination import ObservabilityPipelineGoogleChronicleDestination + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination import ObservabilityPipelineGoogleCloudStorageDestination + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination import ObservabilityPipelineGooglePubSubDestination + from datadog_api_client.v2.model.observability_pipeline_kafka_destination import ObservabilityPipelineKafkaDestination + from datadog_api_client.v2.model.microsoft_sentinel_destination import MicrosoftSentinelDestination + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination import ObservabilityPipelineNewRelicDestination + from datadog_api_client.v2.model.observability_pipeline_open_search_destination import ObservabilityPipelineOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination import ObservabilityPipelineRsyslogDestination + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination import ObservabilityPipelineSentinelOneDestination + from datadog_api_client.v2.model.observability_pipeline_socket_destination import ObservabilityPipelineSocketDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination import ObservabilityPipelineSplunkHecDestination + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination import ObservabilityPipelineSumoLogicDestination + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination import ObservabilityPipelineSyslogNgDestination + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination import ObservabilityPipelineDatabricksZerobusDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import ObservabilityPipelineDatadogMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination import ObservabilityPipelineSplunkHecMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor + from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor + from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor + from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor + from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor + from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source import ObservabilityPipelineDatadogAgentSource + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source import ObservabilityPipelineAmazonDataFirehoseSource + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source import ObservabilityPipelineAmazonS3Source + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source import ObservabilityPipelineFluentBitSource + from datadog_api_client.v2.model.observability_pipeline_fluentd_source import ObservabilityPipelineFluentdSource + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source import ObservabilityPipelineGooglePubSubSource + from datadog_api_client.v2.model.observability_pipeline_http_client_source import ObservabilityPipelineHttpClientSource + from datadog_api_client.v2.model.observability_pipeline_http_server_source import ObservabilityPipelineHttpServerSource + from datadog_api_client.v2.model.observability_pipeline_kafka_source import ObservabilityPipelineKafkaSource + from datadog_api_client.v2.model.observability_pipeline_logstash_source import ObservabilityPipelineLogstashSource + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source import ObservabilityPipelineRsyslogSource + from datadog_api_client.v2.model.observability_pipeline_socket_source import ObservabilityPipelineSocketSource + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source import ObservabilityPipelineSplunkHecSource + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source import ObservabilityPipelineSplunkTcpSource + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source import ObservabilityPipelineSumoLogicSource + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source import ObservabilityPipelineSyslogNgSource + from datadog_api_client.v2.model.observability_pipeline_websocket_source import ObservabilityPipelineWebsocketSource + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import ObservabilityPipelineOpentelemetrySource + +class ObservabilityPipelineData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_data_attributes import ObservabilityPipelineDataAttributes + return { + "attributes": (ObservabilityPipelineDataAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ObservabilityPipelineDataAttributes, id: str, **kwargs): + """ + Contains the pipeline’s ID, type, and configuration attributes. + + :param attributes: Defines the pipeline’s name and its components (sources, processors, and destinations). + :type attributes: ObservabilityPipelineDataAttributes + + :param id: Unique identifier for the pipeline. + :type id: str + + :param type: The resource type identifier. For pipeline resources, this should always be set to ``pipelines``. + :type type: str + """ + super().__init__(kwargs) + type = kwargs.get("type", "pipelines") + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_data_attributes.py b/datadog_api_client/v2/model/observability_pipeline_data_attributes.py new file mode 100644 index 0000000000..0d073d42d5 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_data_attributes.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_config import ObservabilityPipelineConfig + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination import ObservabilityPipelineElasticsearchDestination + from datadog_api_client.v2.model.observability_pipeline_http_client_destination import ObservabilityPipelineHttpClientDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination import ObservabilityPipelineAmazonOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination import ObservabilityPipelineAmazonS3Destination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination import ObservabilityPipelineAmazonS3GenericDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination import ObservabilityPipelineAmazonSecurityLakeDestination + from datadog_api_client.v2.model.azure_storage_destination import AzureStorageDestination + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination import ObservabilityPipelineClickhouseDestination + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination import ObservabilityPipelineCloudPremDestination + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination import ObservabilityPipelineCrowdStrikeNextGenSiemDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination import ObservabilityPipelineDatadogLogsDestination + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination import ObservabilityPipelineGoogleChronicleDestination + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination import ObservabilityPipelineGoogleCloudStorageDestination + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination import ObservabilityPipelineGooglePubSubDestination + from datadog_api_client.v2.model.observability_pipeline_kafka_destination import ObservabilityPipelineKafkaDestination + from datadog_api_client.v2.model.microsoft_sentinel_destination import MicrosoftSentinelDestination + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination import ObservabilityPipelineNewRelicDestination + from datadog_api_client.v2.model.observability_pipeline_open_search_destination import ObservabilityPipelineOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination import ObservabilityPipelineRsyslogDestination + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination import ObservabilityPipelineSentinelOneDestination + from datadog_api_client.v2.model.observability_pipeline_socket_destination import ObservabilityPipelineSocketDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination import ObservabilityPipelineSplunkHecDestination + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination import ObservabilityPipelineSumoLogicDestination + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination import ObservabilityPipelineSyslogNgDestination + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination import ObservabilityPipelineDatabricksZerobusDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import ObservabilityPipelineDatadogMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination import ObservabilityPipelineSplunkHecMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor + from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor + from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor + from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor + from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor + from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source import ObservabilityPipelineDatadogAgentSource + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source import ObservabilityPipelineAmazonDataFirehoseSource + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source import ObservabilityPipelineAmazonS3Source + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source import ObservabilityPipelineFluentBitSource + from datadog_api_client.v2.model.observability_pipeline_fluentd_source import ObservabilityPipelineFluentdSource + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source import ObservabilityPipelineGooglePubSubSource + from datadog_api_client.v2.model.observability_pipeline_http_client_source import ObservabilityPipelineHttpClientSource + from datadog_api_client.v2.model.observability_pipeline_http_server_source import ObservabilityPipelineHttpServerSource + from datadog_api_client.v2.model.observability_pipeline_kafka_source import ObservabilityPipelineKafkaSource + from datadog_api_client.v2.model.observability_pipeline_logstash_source import ObservabilityPipelineLogstashSource + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source import ObservabilityPipelineRsyslogSource + from datadog_api_client.v2.model.observability_pipeline_socket_source import ObservabilityPipelineSocketSource + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source import ObservabilityPipelineSplunkHecSource + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source import ObservabilityPipelineSplunkTcpSource + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source import ObservabilityPipelineSumoLogicSource + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source import ObservabilityPipelineSyslogNgSource + from datadog_api_client.v2.model.observability_pipeline_websocket_source import ObservabilityPipelineWebsocketSource + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import ObservabilityPipelineOpentelemetrySource + +class ObservabilityPipelineDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_config import ObservabilityPipelineConfig + return { + "config": (ObservabilityPipelineConfig,), + "name": (str,), + } + attribute_map = { + "config": "config", + "name": "name", + } + + def __init__(self_, config: ObservabilityPipelineConfig, name: str, **kwargs): + """ + Defines the pipeline’s name and its components (sources, processors, and destinations). + + :param config: Specifies the pipeline's configuration, including its sources, processors, and destinations. + :type config: ObservabilityPipelineConfig + + :param name: Name of the pipeline. + :type name: str + """ + super().__init__(kwargs) + + + self_.config = config + self_.name = name diff --git a/datadog_api_client/v2/model/observability_pipeline_databricks_zerobus_destination.py b/datadog_api_client/v2/model/observability_pipeline_databricks_zerobus_destination.py new file mode 100644 index 0000000000..a2641910d7 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_databricks_zerobus_destination.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination_auth import ObservabilityPipelineDatabricksZerobusDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination_type import ObservabilityPipelineDatabricksZerobusDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineDatabricksZerobusDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination_auth import ObservabilityPipelineDatabricksZerobusDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination_type import ObservabilityPipelineDatabricksZerobusDestinationType + return { + "auth": (ObservabilityPipelineDatabricksZerobusDestinationAuth,), + "buffer": (ObservabilityPipelineBufferOptions,), + "id": (str,), + "ingestion_endpoint_key": (str,), + "inputs": ([str],), + "table_name": (str,), + "type": (ObservabilityPipelineDatabricksZerobusDestinationType,), + "unity_catalog_endpoint_key": (str,), + } + attribute_map = { + "auth": "auth", + "buffer": "buffer", + "id": "id", + "ingestion_endpoint_key": "ingestion_endpoint_key", + "inputs": "inputs", + "table_name": "table_name", + "type": "type", + "unity_catalog_endpoint_key": "unity_catalog_endpoint_key", + } + + def __init__(self_, auth: ObservabilityPipelineDatabricksZerobusDestinationAuth, id: str, inputs: List[str], table_name: str, type: ObservabilityPipelineDatabricksZerobusDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, ingestion_endpoint_key: Union[str, UnsetType]=unset, unity_catalog_endpoint_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``databricks_zerobus`` destination sends logs to Databricks using the Zerobus ingestion API, streaming data directly into your Databricks Lakehouse. + + **Supported pipeline types:** Logs, rehydration + + :param auth: OAuth credentials for authenticating with the Databricks Zerobus ingestion API. + :type auth: ObservabilityPipelineDatabricksZerobusDestinationAuth + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param id: The unique identifier for this component. + :type id: str + + :param ingestion_endpoint_key: Name of the environment variable or the secret identifier that references the Databricks Zerobus ingestion endpoint, which is used to stream data directly into your Databricks Lakehouse. + :type ingestion_endpoint_key: str, optional + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param table_name: The fully qualified name of your target Databricks table. Make sure this table already exists in your Databricks workspace before deploying. + :type table_name: str + + :param type: The destination type. The value must be ``databricks_zerobus``. + :type type: ObservabilityPipelineDatabricksZerobusDestinationType + + :param unity_catalog_endpoint_key: Name of the environment variable or the secret identifier that references your Databricks workspace URL, which is used to communicate with the Unity Catalog API. + :type unity_catalog_endpoint_key: str, optional + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if ingestion_endpoint_key is not unset: + kwargs["ingestion_endpoint_key"] = ingestion_endpoint_key + if unity_catalog_endpoint_key is not unset: + kwargs["unity_catalog_endpoint_key"] = unity_catalog_endpoint_key + super().__init__(kwargs) + + + self_.auth = auth + self_.id = id + self_.inputs = inputs + self_.table_name = table_name + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_databricks_zerobus_destination_auth.py b/datadog_api_client/v2/model/observability_pipeline_databricks_zerobus_destination_auth.py new file mode 100644 index 0000000000..df4eaea20d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_databricks_zerobus_destination_auth.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineDatabricksZerobusDestinationAuth(ModelNormal): + @cached_property + def openapi_types(_): + return { + "client_id": (str,), + "client_secret_key": (str,), + } + attribute_map = { + "client_id": "client_id", + "client_secret_key": "client_secret_key", + } + + def __init__(self_, client_id: str, client_secret_key: Union[str, UnsetType]=unset, **kwargs): + """ + OAuth credentials for authenticating with the Databricks Zerobus ingestion API. + + :param client_id: Your service principal application ID (UUID). + :type client_id: str + + :param client_secret_key: Name of the environment variable or secret that holds the OAuth client secret used to authenticate with the Databricks ingestion endpoint. + :type client_secret_key: str, optional + """ + if client_secret_key is not unset: + kwargs["client_secret_key"] = client_secret_key + super().__init__(kwargs) + + + self_.client_id = client_id diff --git a/datadog_api_client/v2/model/observability_pipeline_databricks_zerobus_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_databricks_zerobus_destination_type.py new file mode 100644 index 0000000000..3beddc7350 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_databricks_zerobus_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDatabricksZerobusDestinationType(ModelSimple): + """ + The destination type. The value must be `databricks_zerobus`. + + :param value: If omitted defaults to "databricks_zerobus". Must be one of ["databricks_zerobus"]. + :type value: str + """ + + allowed_values = { + "databricks_zerobus", + } + DATABRICKS_ZEROBUS: ClassVar["ObservabilityPipelineDatabricksZerobusDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDatabricksZerobusDestinationType.DATABRICKS_ZEROBUS = ObservabilityPipelineDatabricksZerobusDestinationType("databricks_zerobus") diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_agent_source.py b/datadog_api_client/v2/model/observability_pipeline_datadog_agent_source.py new file mode 100644 index 0000000000..5ae7915ac7 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_agent_source.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source_type import ObservabilityPipelineDatadogAgentSourceType + +class ObservabilityPipelineDatadogAgentSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source_type import ObservabilityPipelineDatadogAgentSourceType + return { + "address_key": (str,), + "id": (str,), + "tls": (ObservabilityPipelineTls,), + "type": (ObservabilityPipelineDatadogAgentSourceType,), + } + attribute_map = { + "address_key": "address_key", + "id": "id", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, type: ObservabilityPipelineDatadogAgentSourceType, address_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``datadog_agent`` source collects logs/metrics from the Datadog Agent. + + **Supported pipeline types:** logs, metrics + + :param address_key: Name of the environment variable or secret that holds the listen address for the Datadog Agent source. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The source type. The value should always be ``datadog_agent``. + :type type: ObservabilityPipelineDatadogAgentSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_agent_source_type.py b/datadog_api_client/v2/model/observability_pipeline_datadog_agent_source_type.py new file mode 100644 index 0000000000..1e238c4efd --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_agent_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDatadogAgentSourceType(ModelSimple): + """ + The source type. The value should always be `datadog_agent`. + + :param value: If omitted defaults to "datadog_agent". Must be one of ["datadog_agent"]. + :type value: str + """ + + allowed_values = { + "datadog_agent", + } + DATADOG_AGENT: ClassVar["ObservabilityPipelineDatadogAgentSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDatadogAgentSourceType.DATADOG_AGENT = ObservabilityPipelineDatadogAgentSourceType("datadog_agent") diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_logs_destination.py b/datadog_api_client/v2/model/observability_pipeline_datadog_logs_destination.py new file mode 100644 index 0000000000..0e500e3203 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_logs_destination.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination_route import ObservabilityPipelineDatadogLogsDestinationRoute + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination_type import ObservabilityPipelineDatadogLogsDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineDatadogLogsDestination(ModelNormal): + validations = { + "routes": { + "max_items": 100, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination_route import ObservabilityPipelineDatadogLogsDestinationRoute + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination_type import ObservabilityPipelineDatadogLogsDestinationType + return { + "buffer": (ObservabilityPipelineBufferOptions,), + "id": (str,), + "inputs": ([str],), + "routes": ([ObservabilityPipelineDatadogLogsDestinationRoute],), + "type": (ObservabilityPipelineDatadogLogsDestinationType,), + } + attribute_map = { + "buffer": "buffer", + "id": "id", + "inputs": "inputs", + "routes": "routes", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineDatadogLogsDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, routes: Union[List[ObservabilityPipelineDatadogLogsDestinationRoute], UnsetType]=unset, **kwargs): + """ + The ``datadog_logs`` destination forwards logs to Datadog Log Management. + + **Supported pipeline types:** logs + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param routes: A list of routing rules that forward matching logs to Datadog using dedicated API keys. + :type routes: [ObservabilityPipelineDatadogLogsDestinationRoute], optional + + :param type: The destination type. The value should always be ``datadog_logs``. + :type type: ObservabilityPipelineDatadogLogsDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if routes is not unset: + kwargs["routes"] = routes + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_logs_destination_route.py b/datadog_api_client/v2/model/observability_pipeline_datadog_logs_destination_route.py new file mode 100644 index 0000000000..f6060567b2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_logs_destination_route.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineDatadogLogsDestinationRoute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_key_key": (str,), + "include": (str,), + "route_id": (str,), + "site": (str,), + } + attribute_map = { + "api_key_key": "api_key_key", + "include": "include", + "route_id": "route_id", + "site": "site", + } + + def __init__(self_, api_key_key: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, route_id: Union[str, UnsetType]=unset, site: Union[str, UnsetType]=unset, **kwargs): + """ + Defines how the ``datadog_logs`` destination routes matching logs to a Datadog site using a specific API key. + + :param api_key_key: Name of the environment variable or secret that stores the Datadog API key used by this route. + :type api_key_key: str, optional + + :param include: A Datadog search query that determines which logs are forwarded using this route. + :type include: str, optional + + :param route_id: Unique identifier for this route within the destination. + :type route_id: str, optional + + :param site: Datadog site where matching logs are sent (for example, ``us1`` ). + :type site: str, optional + """ + if api_key_key is not unset: + kwargs["api_key_key"] = api_key_key + if include is not unset: + kwargs["include"] = include + if route_id is not unset: + kwargs["route_id"] = route_id + if site is not unset: + kwargs["site"] = site + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_logs_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_datadog_logs_destination_type.py new file mode 100644 index 0000000000..8cdf5ac292 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_logs_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDatadogLogsDestinationType(ModelSimple): + """ + The destination type. The value should always be `datadog_logs`. + + :param value: If omitted defaults to "datadog_logs". Must be one of ["datadog_logs"]. + :type value: str + """ + + allowed_values = { + "datadog_logs", + } + DATADOG_LOGS: ClassVar["ObservabilityPipelineDatadogLogsDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDatadogLogsDestinationType.DATADOG_LOGS = ObservabilityPipelineDatadogLogsDestinationType("datadog_logs") diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_metrics_destination.py b/datadog_api_client/v2/model/observability_pipeline_datadog_metrics_destination.py new file mode 100644 index 0000000000..61d49c03eb --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_metrics_destination.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination_type import ObservabilityPipelineDatadogMetricsDestinationType + +class ObservabilityPipelineDatadogMetricsDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination_type import ObservabilityPipelineDatadogMetricsDestinationType + return { + "id": (str,), + "inputs": ([str],), + "type": (ObservabilityPipelineDatadogMetricsDestinationType,), + } + attribute_map = { + "id": "id", + "inputs": "inputs", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineDatadogMetricsDestinationType, **kwargs): + """ + The ``datadog_metrics`` destination forwards metrics to Datadog. + + **Supported pipeline types:** metrics + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the input for this component. + :type inputs: [str] + + :param type: The destination type. The value should always be ``datadog_metrics``. + :type type: ObservabilityPipelineDatadogMetricsDestinationType + """ + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_metrics_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_datadog_metrics_destination_type.py new file mode 100644 index 0000000000..2366e27ce2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_metrics_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDatadogMetricsDestinationType(ModelSimple): + """ + The destination type. The value should always be `datadog_metrics`. + + :param value: If omitted defaults to "datadog_metrics". Must be one of ["datadog_metrics"]. + :type value: str + """ + + allowed_values = { + "datadog_metrics", + } + DATADOG_METRICS: ClassVar["ObservabilityPipelineDatadogMetricsDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDatadogMetricsDestinationType.DATADOG_METRICS = ObservabilityPipelineDatadogMetricsDestinationType("datadog_metrics") diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor.py b/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor.py new file mode 100644 index 0000000000..cfdf5b6c6b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor_action import ObservabilityPipelineDatadogTagsProcessorAction + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor_mode import ObservabilityPipelineDatadogTagsProcessorMode + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor_type import ObservabilityPipelineDatadogTagsProcessorType + +class ObservabilityPipelineDatadogTagsProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor_action import ObservabilityPipelineDatadogTagsProcessorAction + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor_mode import ObservabilityPipelineDatadogTagsProcessorMode + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor_type import ObservabilityPipelineDatadogTagsProcessorType + return { + "action": (ObservabilityPipelineDatadogTagsProcessorAction,), + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "keys": ([str],), + "mode": (ObservabilityPipelineDatadogTagsProcessorMode,), + "type": (ObservabilityPipelineDatadogTagsProcessorType,), + } + attribute_map = { + "action": "action", + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "keys": "keys", + "mode": "mode", + "type": "type", + } + + def __init__(self_, action: ObservabilityPipelineDatadogTagsProcessorAction, enabled: bool, id: str, include: str, keys: List[str], mode: ObservabilityPipelineDatadogTagsProcessorMode, type: ObservabilityPipelineDatadogTagsProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``datadog_tags`` processor includes or excludes specific Datadog tags in your logs. + + **Supported pipeline types:** logs + + :param action: The action to take on tags with matching keys. + :type action: ObservabilityPipelineDatadogTagsProcessorAction + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param keys: A list of tag keys. + :type keys: [str] + + :param mode: The processing mode. + :type mode: ObservabilityPipelineDatadogTagsProcessorMode + + :param type: The processor type. The value should always be ``datadog_tags``. + :type type: ObservabilityPipelineDatadogTagsProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.action = action + self_.enabled = enabled + self_.id = id + self_.include = include + self_.keys = keys + self_.mode = mode + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor_action.py b/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor_action.py new file mode 100644 index 0000000000..bcaf610b6f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor_action.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDatadogTagsProcessorAction(ModelSimple): + """ + The action to take on tags with matching keys. + + :param value: Must be one of ["include", "exclude"]. + :type value: str + """ + + allowed_values = { + "include", + "exclude", + } + INCLUDE: ClassVar["ObservabilityPipelineDatadogTagsProcessorAction"] + EXCLUDE: ClassVar["ObservabilityPipelineDatadogTagsProcessorAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDatadogTagsProcessorAction.INCLUDE = ObservabilityPipelineDatadogTagsProcessorAction("include") +ObservabilityPipelineDatadogTagsProcessorAction.EXCLUDE = ObservabilityPipelineDatadogTagsProcessorAction("exclude") diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor_mode.py b/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor_mode.py new file mode 100644 index 0000000000..ffb52c0e26 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor_mode.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDatadogTagsProcessorMode(ModelSimple): + """ + The processing mode. + + :param value: If omitted defaults to "filter". Must be one of ["filter"]. + :type value: str + """ + + allowed_values = { + "filter", + } + FILTER: ClassVar["ObservabilityPipelineDatadogTagsProcessorMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDatadogTagsProcessorMode.FILTER = ObservabilityPipelineDatadogTagsProcessorMode("filter") diff --git a/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor_type.py new file mode 100644 index 0000000000..a6391bff84 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_datadog_tags_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDatadogTagsProcessorType(ModelSimple): + """ + The processor type. The value should always be `datadog_tags`. + + :param value: If omitted defaults to "datadog_tags". Must be one of ["datadog_tags"]. + :type value: str + """ + + allowed_values = { + "datadog_tags", + } + DATADOG_TAGS: ClassVar["ObservabilityPipelineDatadogTagsProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDatadogTagsProcessorType.DATADOG_TAGS = ObservabilityPipelineDatadogTagsProcessorType("datadog_tags") diff --git a/datadog_api_client/v2/model/observability_pipeline_decoding.py b/datadog_api_client/v2/model/observability_pipeline_decoding.py new file mode 100644 index 0000000000..095bd14250 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_decoding.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDecoding(ModelSimple): + """ + The decoding format used to interpret incoming logs. + + :param value: Must be one of ["bytes", "gelf", "json", "syslog"]. + :type value: str + """ + + allowed_values = { + "bytes", + "gelf", + "json", + "syslog", + } + DECODE_BYTES: ClassVar["ObservabilityPipelineDecoding"] + DECODE_GELF: ClassVar["ObservabilityPipelineDecoding"] + DECODE_JSON: ClassVar["ObservabilityPipelineDecoding"] + DECODE_SYSLOG: ClassVar["ObservabilityPipelineDecoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDecoding.DECODE_BYTES = ObservabilityPipelineDecoding("bytes") +ObservabilityPipelineDecoding.DECODE_GELF = ObservabilityPipelineDecoding("gelf") +ObservabilityPipelineDecoding.DECODE_JSON = ObservabilityPipelineDecoding("json") +ObservabilityPipelineDecoding.DECODE_SYSLOG = ObservabilityPipelineDecoding("syslog") diff --git a/datadog_api_client/v2/model/observability_pipeline_dedupe_processor.py b/datadog_api_client/v2/model/observability_pipeline_dedupe_processor.py new file mode 100644 index 0000000000..61c22efb0a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_dedupe_processor.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor_cache import ObservabilityPipelineDedupeProcessorCache + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor_mode import ObservabilityPipelineDedupeProcessorMode + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor_type import ObservabilityPipelineDedupeProcessorType + +class ObservabilityPipelineDedupeProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor_cache import ObservabilityPipelineDedupeProcessorCache + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor_mode import ObservabilityPipelineDedupeProcessorMode + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor_type import ObservabilityPipelineDedupeProcessorType + return { + "cache": (ObservabilityPipelineDedupeProcessorCache,), + "display_name": (str,), + "enabled": (bool,), + "fields": ([str],), + "id": (str,), + "include": (str,), + "mode": (ObservabilityPipelineDedupeProcessorMode,), + "type": (ObservabilityPipelineDedupeProcessorType,), + } + attribute_map = { + "cache": "cache", + "display_name": "display_name", + "enabled": "enabled", + "fields": "fields", + "id": "id", + "include": "include", + "mode": "mode", + "type": "type", + } + + def __init__(self_, enabled: bool, fields: List[str], id: str, include: str, mode: ObservabilityPipelineDedupeProcessorMode, type: ObservabilityPipelineDedupeProcessorType, cache: Union[ObservabilityPipelineDedupeProcessorCache, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``dedupe`` processor removes duplicate fields in log events. + + **Supported pipeline types:** logs + + :param cache: Configuration for the cache used to detect duplicates. + :type cache: ObservabilityPipelineDedupeProcessorCache, optional + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param fields: A list of log field paths to check for duplicates. + :type fields: [str] + + :param id: The unique identifier for this processor. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param mode: The deduplication mode to apply to the fields. + :type mode: ObservabilityPipelineDedupeProcessorMode + + :param type: The processor type. The value should always be ``dedupe``. + :type type: ObservabilityPipelineDedupeProcessorType + """ + if cache is not unset: + kwargs["cache"] = cache + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.fields = fields + self_.id = id + self_.include = include + self_.mode = mode + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_dedupe_processor_cache.py b/datadog_api_client/v2/model/observability_pipeline_dedupe_processor_cache.py new file mode 100644 index 0000000000..dfa68becef --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_dedupe_processor_cache.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineDedupeProcessorCache(ModelNormal): + validations = { + "num_events": { + "inclusive_maximum": 1000000000, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "num_events": (int,), + } + attribute_map = { + "num_events": "num_events", + } + + def __init__(self_, num_events: int, **kwargs): + """ + Configuration for the cache used to detect duplicates. + + :param num_events: The number of events to cache for duplicate detection. + :type num_events: int + """ + super().__init__(kwargs) + + + self_.num_events = num_events diff --git a/datadog_api_client/v2/model/observability_pipeline_dedupe_processor_mode.py b/datadog_api_client/v2/model/observability_pipeline_dedupe_processor_mode.py new file mode 100644 index 0000000000..49a2a0e114 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_dedupe_processor_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDedupeProcessorMode(ModelSimple): + """ + The deduplication mode to apply to the fields. + + :param value: Must be one of ["match", "ignore"]. + :type value: str + """ + + allowed_values = { + "match", + "ignore", + } + MATCH: ClassVar["ObservabilityPipelineDedupeProcessorMode"] + IGNORE: ClassVar["ObservabilityPipelineDedupeProcessorMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDedupeProcessorMode.MATCH = ObservabilityPipelineDedupeProcessorMode("match") +ObservabilityPipelineDedupeProcessorMode.IGNORE = ObservabilityPipelineDedupeProcessorMode("ignore") diff --git a/datadog_api_client/v2/model/observability_pipeline_dedupe_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_dedupe_processor_type.py new file mode 100644 index 0000000000..8ab8defb36 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_dedupe_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineDedupeProcessorType(ModelSimple): + """ + The processor type. The value should always be `dedupe`. + + :param value: If omitted defaults to "dedupe". Must be one of ["dedupe"]. + :type value: str + """ + + allowed_values = { + "dedupe", + } + DEDUPE: ClassVar["ObservabilityPipelineDedupeProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineDedupeProcessorType.DEDUPE = ObservabilityPipelineDedupeProcessorType("dedupe") diff --git a/datadog_api_client/v2/model/observability_pipeline_disk_buffer_options.py b/datadog_api_client/v2/model/observability_pipeline_disk_buffer_options.py new file mode 100644 index 0000000000..0c37f7a9fd --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_disk_buffer_options.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options_disk_type import ObservabilityPipelineBufferOptionsDiskType + from datadog_api_client.v2.model.observability_pipeline_buffer_options_when_full import ObservabilityPipelineBufferOptionsWhenFull + +class ObservabilityPipelineDiskBufferOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options_disk_type import ObservabilityPipelineBufferOptionsDiskType + from datadog_api_client.v2.model.observability_pipeline_buffer_options_when_full import ObservabilityPipelineBufferOptionsWhenFull + return { + "max_size": (int,), + "type": (ObservabilityPipelineBufferOptionsDiskType,), + "when_full": (ObservabilityPipelineBufferOptionsWhenFull,), + } + attribute_map = { + "max_size": "max_size", + "type": "type", + "when_full": "when_full", + } + + def __init__(self_, max_size: int, type: Union[ObservabilityPipelineBufferOptionsDiskType, UnsetType]=unset, when_full: Union[ObservabilityPipelineBufferOptionsWhenFull, UnsetType]=unset, **kwargs): + """ + Options for configuring a disk buffer. + + :param max_size: Maximum size of the disk buffer. + :type max_size: int + + :param type: The type of the buffer that will be configured, a disk buffer. + :type type: ObservabilityPipelineBufferOptionsDiskType, optional + + :param when_full: Behavior when the buffer is full (block and stop accepting new events, or drop new events) + :type when_full: ObservabilityPipelineBufferOptionsWhenFull, optional + """ + if type is not unset: + kwargs["type"] = type + if when_full is not unset: + kwargs["when_full"] = when_full + super().__init__(kwargs) + + + self_.max_size = max_size diff --git a/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination.py b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination.py new file mode 100644 index 0000000000..d090ac84d6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination.py @@ -0,0 +1,155 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_api_version import ObservabilityPipelineElasticsearchDestinationApiVersion + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_auth import ObservabilityPipelineElasticsearchDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_compression import ObservabilityPipelineElasticsearchDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_data_stream import ObservabilityPipelineElasticsearchDestinationDataStream + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_type import ObservabilityPipelineElasticsearchDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineElasticsearchDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_api_version import ObservabilityPipelineElasticsearchDestinationApiVersion + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_auth import ObservabilityPipelineElasticsearchDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_compression import ObservabilityPipelineElasticsearchDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_data_stream import ObservabilityPipelineElasticsearchDestinationDataStream + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_type import ObservabilityPipelineElasticsearchDestinationType + return { + "api_version": (ObservabilityPipelineElasticsearchDestinationApiVersion,), + "auth": (ObservabilityPipelineElasticsearchDestinationAuth,), + "buffer": (ObservabilityPipelineBufferOptions,), + "bulk_index": (str,), + "compression": (ObservabilityPipelineElasticsearchDestinationCompression,), + "data_stream": (ObservabilityPipelineElasticsearchDestinationDataStream,), + "endpoint_url_key": (str,), + "id": (str,), + "id_key": (str,), + "inputs": ([str],), + "pipeline": (str,), + "request_retry_partial": (bool,), + "tls": (ObservabilityPipelineTls,), + "type": (ObservabilityPipelineElasticsearchDestinationType,), + } + attribute_map = { + "api_version": "api_version", + "auth": "auth", + "buffer": "buffer", + "bulk_index": "bulk_index", + "compression": "compression", + "data_stream": "data_stream", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "id_key": "id_key", + "inputs": "inputs", + "pipeline": "pipeline", + "request_retry_partial": "request_retry_partial", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineElasticsearchDestinationType, api_version: Union[ObservabilityPipelineElasticsearchDestinationApiVersion, UnsetType]=unset, auth: Union[ObservabilityPipelineElasticsearchDestinationAuth, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, bulk_index: Union[str, UnsetType]=unset, compression: Union[ObservabilityPipelineElasticsearchDestinationCompression, UnsetType]=unset, data_stream: Union[ObservabilityPipelineElasticsearchDestinationDataStream, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, id_key: Union[str, UnsetType]=unset, pipeline: Union[str, UnsetType]=unset, request_retry_partial: Union[bool, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``elasticsearch`` destination writes logs or metrics to an Elasticsearch cluster. + + **Supported pipeline types:** logs, metrics + + :param api_version: The Elasticsearch API version to use. Set to ``auto`` to auto-detect. + :type api_version: ObservabilityPipelineElasticsearchDestinationApiVersion, optional + + :param auth: Authentication settings for the Elasticsearch destination. + When ``strategy`` is ``basic`` , use ``username_key`` and ``password_key`` to reference credentials stored in environment variables or secrets. + :type auth: ObservabilityPipelineElasticsearchDestinationAuth, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param bulk_index: The name of the index to write events to in Elasticsearch. + :type bulk_index: str, optional + + :param compression: Compression configuration for the Elasticsearch destination. + :type compression: ObservabilityPipelineElasticsearchDestinationCompression, optional + + :param data_stream: Configuration options for writing to Elasticsearch Data Streams instead of a fixed index. + :type data_stream: ObservabilityPipelineElasticsearchDestinationDataStream, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the Elasticsearch endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param id_key: The name of the field used as the document ID in Elasticsearch. + :type id_key: str, optional + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param pipeline: The name of an Elasticsearch ingest pipeline to apply to events before indexing. + :type pipeline: str, optional + + :param request_retry_partial: When ``true`` , retries failed partial bulk requests when some events in a batch fail while others succeed. + :type request_retry_partial: bool, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The destination type. The value should always be ``elasticsearch``. + :type type: ObservabilityPipelineElasticsearchDestinationType + """ + if api_version is not unset: + kwargs["api_version"] = api_version + if auth is not unset: + kwargs["auth"] = auth + if buffer is not unset: + kwargs["buffer"] = buffer + if bulk_index is not unset: + kwargs["bulk_index"] = bulk_index + if compression is not unset: + kwargs["compression"] = compression + if data_stream is not unset: + kwargs["data_stream"] = data_stream + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if id_key is not unset: + kwargs["id_key"] = id_key + if pipeline is not unset: + kwargs["pipeline"] = pipeline + if request_retry_partial is not unset: + kwargs["request_retry_partial"] = request_retry_partial + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_api_version.py b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_api_version.py new file mode 100644 index 0000000000..c64b1d0423 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_api_version.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineElasticsearchDestinationApiVersion(ModelSimple): + """ + The Elasticsearch API version to use. Set to `auto` to auto-detect. + + :param value: Must be one of ["auto", "v6", "v7", "v8"]. + :type value: str + """ + + allowed_values = { + "auto", + "v6", + "v7", + "v8", + } + AUTO: ClassVar["ObservabilityPipelineElasticsearchDestinationApiVersion"] + V6: ClassVar["ObservabilityPipelineElasticsearchDestinationApiVersion"] + V7: ClassVar["ObservabilityPipelineElasticsearchDestinationApiVersion"] + V8: ClassVar["ObservabilityPipelineElasticsearchDestinationApiVersion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineElasticsearchDestinationApiVersion.AUTO = ObservabilityPipelineElasticsearchDestinationApiVersion("auto") +ObservabilityPipelineElasticsearchDestinationApiVersion.V6 = ObservabilityPipelineElasticsearchDestinationApiVersion("v6") +ObservabilityPipelineElasticsearchDestinationApiVersion.V7 = ObservabilityPipelineElasticsearchDestinationApiVersion("v7") +ObservabilityPipelineElasticsearchDestinationApiVersion.V8 = ObservabilityPipelineElasticsearchDestinationApiVersion("v8") diff --git a/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_auth.py b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_auth.py new file mode 100644 index 0000000000..fb585987d4 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_auth.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_auth_strategy import ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy + +class ObservabilityPipelineElasticsearchDestinationAuth(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_auth_strategy import ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy + return { + "password_key": (str,), + "strategy": (ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy,), + "username_key": (str,), + } + attribute_map = { + "password_key": "password_key", + "strategy": "strategy", + "username_key": "username_key", + } + + def __init__(self_, strategy: ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy, password_key: Union[str, UnsetType]=unset, username_key: Union[str, UnsetType]=unset, **kwargs): + """ + Authentication settings for the Elasticsearch destination. + When ``strategy`` is ``basic`` , use ``username_key`` and ``password_key`` to reference credentials stored in environment variables or secrets. + + :param password_key: Name of the environment variable or secret that holds the Elasticsearch password (used when ``strategy`` is ``basic`` ). + :type password_key: str, optional + + :param strategy: The authentication strategy to use. + :type strategy: ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy + + :param username_key: Name of the environment variable or secret that holds the Elasticsearch username (used when ``strategy`` is ``basic`` ). + :type username_key: str, optional + """ + if password_key is not unset: + kwargs["password_key"] = password_key + if username_key is not unset: + kwargs["username_key"] = username_key + super().__init__(kwargs) + + + self_.strategy = strategy diff --git a/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_compression.py b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_compression.py new file mode 100644 index 0000000000..3631627fde --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_compression.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_compression_algorithm import ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm + +class ObservabilityPipelineElasticsearchDestinationCompression(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_compression_algorithm import ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm + return { + "algorithm": (ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm,), + "level": (int,), + } + attribute_map = { + "algorithm": "algorithm", + "level": "level", + } + + def __init__(self_, algorithm: ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm, level: Union[int, UnsetType]=unset, **kwargs): + """ + Compression configuration for the Elasticsearch destination. + + :param algorithm: The compression algorithm applied when sending data to Elasticsearch. + :type algorithm: ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm + + :param level: The compression level. Only applicable for ``gzip`` , ``zlib`` , and ``zstd`` algorithms. + :type level: int, optional + """ + if level is not unset: + kwargs["level"] = level + super().__init__(kwargs) + + + self_.algorithm = algorithm diff --git a/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_compression_algorithm.py b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_compression_algorithm.py new file mode 100644 index 0000000000..0eb9367b17 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_compression_algorithm.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm(ModelSimple): + """ + The compression algorithm applied when sending data to Elasticsearch. + + :param value: Must be one of ["none", "gzip", "zlib", "zstd", "snappy"]. + :type value: str + """ + + allowed_values = { + "none", + "gzip", + "zlib", + "zstd", + "snappy", + } + NONE: ClassVar["ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm"] + GZIP: ClassVar["ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm"] + ZLIB: ClassVar["ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm"] + ZSTD: ClassVar["ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm"] + SNAPPY: ClassVar["ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm.NONE = ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm("none") +ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm.GZIP = ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm("gzip") +ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm.ZLIB = ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm("zlib") +ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm.ZSTD = ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm("zstd") +ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm.SNAPPY = ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm("snappy") diff --git a/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_data_stream.py b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_data_stream.py new file mode 100644 index 0000000000..c54594a4e9 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_data_stream.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineElasticsearchDestinationDataStream(ModelNormal): + @cached_property + def openapi_types(_): + return { + "auto_routing": (bool,), + "dataset": (str,), + "dtype": (str,), + "namespace": (str,), + "sync_fields": (bool,), + } + attribute_map = { + "auto_routing": "auto_routing", + "dataset": "dataset", + "dtype": "dtype", + "namespace": "namespace", + "sync_fields": "sync_fields", + } + + def __init__(self_, auto_routing: Union[bool, UnsetType]=unset, dataset: Union[str, UnsetType]=unset, dtype: Union[str, UnsetType]=unset, namespace: Union[str, UnsetType]=unset, sync_fields: Union[bool, UnsetType]=unset, **kwargs): + """ + Configuration options for writing to Elasticsearch Data Streams instead of a fixed index. + + :param auto_routing: When ``true`` , automatically routes events to the appropriate data stream based on the event content. + :type auto_routing: bool, optional + + :param dataset: The data stream dataset. This groups events by their source or application. + :type dataset: str, optional + + :param dtype: The data stream type. This determines how events are categorized within the data stream. + :type dtype: str, optional + + :param namespace: The data stream namespace. This separates events into different environments or domains. + :type namespace: str, optional + + :param sync_fields: When ``true`` , synchronizes data stream fields with the Elasticsearch index mapping. + :type sync_fields: bool, optional + """ + if auto_routing is not unset: + kwargs["auto_routing"] = auto_routing + if dataset is not unset: + kwargs["dataset"] = dataset + if dtype is not unset: + kwargs["dtype"] = dtype + if namespace is not unset: + kwargs["namespace"] = namespace + if sync_fields is not unset: + kwargs["sync_fields"] = sync_fields + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_type.py new file mode 100644 index 0000000000..cebe491607 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_elasticsearch_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineElasticsearchDestinationType(ModelSimple): + """ + The destination type. The value should always be `elasticsearch`. + + :param value: If omitted defaults to "elasticsearch". Must be one of ["elasticsearch"]. + :type value: str + """ + + allowed_values = { + "elasticsearch", + } + ELASTICSEARCH: ClassVar["ObservabilityPipelineElasticsearchDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineElasticsearchDestinationType.ELASTICSEARCH = ObservabilityPipelineElasticsearchDestinationType("elasticsearch") diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_field_event_lookup.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_field_event_lookup.py new file mode 100644 index 0000000000..c5bd2ef93c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_field_event_lookup.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineEnrichmentTableFieldEventLookup(ModelNormal): + @cached_property + def openapi_types(_): + return { + "event": (str,), + } + attribute_map = { + "event": "event", + } + + def __init__(self_, event: str, **kwargs): + """ + Looks up a value from a field path in the log event. + + :param event: The path to the field in the log event to use as the lookup key. + :type event: str + """ + super().__init__(kwargs) + + + self_.event = event diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_field_secret_lookup.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_field_secret_lookup.py new file mode 100644 index 0000000000..eb6ca0d27e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_field_secret_lookup.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineEnrichmentTableFieldSecretLookup(ModelNormal): + @cached_property + def openapi_types(_): + return { + "secret": (str,), + } + attribute_map = { + "secret": "secret", + } + + def __init__(self_, secret: str, **kwargs): + """ + Looks up a value stored as a pipeline secret. + + :param secret: The name of the secret containing the lookup key value. + :type secret: str + """ + super().__init__(kwargs) + + + self_.secret = secret diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_field_vrl_lookup.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_field_vrl_lookup.py new file mode 100644 index 0000000000..6e51e79a99 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_field_vrl_lookup.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineEnrichmentTableFieldVrlLookup(ModelNormal): + @cached_property + def openapi_types(_): + return { + "vrl": (str,), + } + attribute_map = { + "vrl": "vrl", + } + + def __init__(self_, vrl: str, **kwargs): + """ + Evaluates a VRL expression to produce the lookup key. + + :param vrl: A VRL expression that returns the value to use as the lookup key. + :type vrl: str + """ + super().__init__(kwargs) + + + self_.vrl = vrl diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file.py new file mode 100644 index 0000000000..db9848a63c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_encoding import ObservabilityPipelineEnrichmentTableFileEncoding + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_key_items import ObservabilityPipelineEnrichmentTableFileKeyItems + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_schema_items import ObservabilityPipelineEnrichmentTableFileSchemaItems + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_event_lookup import ObservabilityPipelineEnrichmentTableFieldEventLookup + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_vrl_lookup import ObservabilityPipelineEnrichmentTableFieldVrlLookup + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_secret_lookup import ObservabilityPipelineEnrichmentTableFieldSecretLookup + +class ObservabilityPipelineEnrichmentTableFile(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_encoding import ObservabilityPipelineEnrichmentTableFileEncoding + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_key_items import ObservabilityPipelineEnrichmentTableFileKeyItems + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_schema_items import ObservabilityPipelineEnrichmentTableFileSchemaItems + return { + "encoding": (ObservabilityPipelineEnrichmentTableFileEncoding,), + "key": ([ObservabilityPipelineEnrichmentTableFileKeyItems],), + "path": (str,), + "schema": ([ObservabilityPipelineEnrichmentTableFileSchemaItems],), + } + attribute_map = { + "encoding": "encoding", + "key": "key", + "path": "path", + "schema": "schema", + } + + def __init__(self_, encoding: ObservabilityPipelineEnrichmentTableFileEncoding, key: List[ObservabilityPipelineEnrichmentTableFileKeyItems], path: str, schema: List[ObservabilityPipelineEnrichmentTableFileSchemaItems], **kwargs): + """ + Defines a static enrichment table loaded from a CSV file. + + :param encoding: File encoding format. + :type encoding: ObservabilityPipelineEnrichmentTableFileEncoding + + :param key: Key fields used to look up enrichment values. + :type key: [ObservabilityPipelineEnrichmentTableFileKeyItems] + + :param path: Path to the CSV file. + :type path: str + + :param schema: Schema defining column names and their types. + :type schema: [ObservabilityPipelineEnrichmentTableFileSchemaItems] + """ + super().__init__(kwargs) + + + self_.encoding = encoding + self_.key = key + self_.path = path + self_.schema = schema diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_encoding.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_encoding.py new file mode 100644 index 0000000000..699ce5983e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_encoding.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_encoding_type import ObservabilityPipelineEnrichmentTableFileEncodingType + +class ObservabilityPipelineEnrichmentTableFileEncoding(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_encoding_type import ObservabilityPipelineEnrichmentTableFileEncodingType + return { + "delimiter": (str,), + "includes_headers": (bool,), + "type": (ObservabilityPipelineEnrichmentTableFileEncodingType,), + } + attribute_map = { + "delimiter": "delimiter", + "includes_headers": "includes_headers", + "type": "type", + } + + def __init__(self_, delimiter: str, includes_headers: bool, type: ObservabilityPipelineEnrichmentTableFileEncodingType, **kwargs): + """ + File encoding format. + + :param delimiter: The ``encoding`` ``delimiter``. + :type delimiter: str + + :param includes_headers: The ``encoding`` ``includes_headers``. + :type includes_headers: bool + + :param type: Specifies the encoding format (e.g., CSV) used for enrichment tables. + :type type: ObservabilityPipelineEnrichmentTableFileEncodingType + """ + super().__init__(kwargs) + + + self_.delimiter = delimiter + self_.includes_headers = includes_headers + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_encoding_type.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_encoding_type.py new file mode 100644 index 0000000000..8205f5184c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_encoding_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineEnrichmentTableFileEncodingType(ModelSimple): + """ + Specifies the encoding format (e.g., CSV) used for enrichment tables. + + :param value: If omitted defaults to "csv". Must be one of ["csv"]. + :type value: str + """ + + allowed_values = { + "csv", + } + CSV: ClassVar["ObservabilityPipelineEnrichmentTableFileEncodingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineEnrichmentTableFileEncodingType.CSV = ObservabilityPipelineEnrichmentTableFileEncodingType("csv") diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_key_item_field.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_key_item_field.py new file mode 100644 index 0000000000..6a54b2df6c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_key_item_field.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineEnrichmentTableFileKeyItemField(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Specifies the source of the key value used for enrichment table lookups. + Can be a plain field path string or an object specifying ``event`` , ``vrl`` , or ``secret``. + + :param event: The path to the field in the log event to use as the lookup key. + :type event: str + + :param vrl: A VRL expression that returns the value to use as the lookup key. + :type vrl: str + + :param secret: The name of the secret containing the lookup key value. + :type secret: str + """ + 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.observability_pipeline_enrichment_table_field_event_lookup import ObservabilityPipelineEnrichmentTableFieldEventLookup + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_vrl_lookup import ObservabilityPipelineEnrichmentTableFieldVrlLookup + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_secret_lookup import ObservabilityPipelineEnrichmentTableFieldSecretLookup + return { + "oneOf": [ + str, + ObservabilityPipelineEnrichmentTableFieldEventLookup, + ObservabilityPipelineEnrichmentTableFieldVrlLookup, + ObservabilityPipelineEnrichmentTableFieldSecretLookup, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_key_items.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_key_items.py new file mode 100644 index 0000000000..b7bfa43e63 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_key_items.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_key_items_comparison import ObservabilityPipelineEnrichmentTableFileKeyItemsComparison + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_key_item_field import ObservabilityPipelineEnrichmentTableFileKeyItemField + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_event_lookup import ObservabilityPipelineEnrichmentTableFieldEventLookup + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_vrl_lookup import ObservabilityPipelineEnrichmentTableFieldVrlLookup + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_secret_lookup import ObservabilityPipelineEnrichmentTableFieldSecretLookup + +class ObservabilityPipelineEnrichmentTableFileKeyItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_key_items_comparison import ObservabilityPipelineEnrichmentTableFileKeyItemsComparison + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_key_item_field import ObservabilityPipelineEnrichmentTableFileKeyItemField + return { + "column": (str,), + "comparison": (ObservabilityPipelineEnrichmentTableFileKeyItemsComparison,), + "field": (ObservabilityPipelineEnrichmentTableFileKeyItemField,), + } + attribute_map = { + "column": "column", + "comparison": "comparison", + "field": "field", + } + + def __init__(self_, column: str, comparison: ObservabilityPipelineEnrichmentTableFileKeyItemsComparison, field: Union[ObservabilityPipelineEnrichmentTableFileKeyItemField, str, ObservabilityPipelineEnrichmentTableFieldEventLookup, ObservabilityPipelineEnrichmentTableFieldVrlLookup, ObservabilityPipelineEnrichmentTableFieldSecretLookup], **kwargs): + """ + Defines how to map log fields to enrichment table columns during lookups. + + :param column: The ``items`` ``column``. + :type column: str + + :param comparison: Defines how to compare key fields for enrichment table lookups. + :type comparison: ObservabilityPipelineEnrichmentTableFileKeyItemsComparison + + :param field: Specifies the source of the key value used for enrichment table lookups. + Can be a plain field path string or an object specifying ``event`` , ``vrl`` , or ``secret``. + :type field: ObservabilityPipelineEnrichmentTableFileKeyItemField + """ + super().__init__(kwargs) + + + self_.column = column + self_.comparison = comparison + self_.field = field diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_key_items_comparison.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_key_items_comparison.py new file mode 100644 index 0000000000..f2f38af126 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_key_items_comparison.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineEnrichmentTableFileKeyItemsComparison(ModelSimple): + """ + Defines how to compare key fields for enrichment table lookups. + + :param value: If omitted defaults to "equals". Must be one of ["equals"]. + :type value: str + """ + + allowed_values = { + "equals", + } + EQUALS: ClassVar["ObservabilityPipelineEnrichmentTableFileKeyItemsComparison"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineEnrichmentTableFileKeyItemsComparison.EQUALS = ObservabilityPipelineEnrichmentTableFileKeyItemsComparison("equals") diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_schema_items.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_schema_items.py new file mode 100644 index 0000000000..54952aa90d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_schema_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_schema_items_type import ObservabilityPipelineEnrichmentTableFileSchemaItemsType + +class ObservabilityPipelineEnrichmentTableFileSchemaItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_schema_items_type import ObservabilityPipelineEnrichmentTableFileSchemaItemsType + return { + "column": (str,), + "type": (ObservabilityPipelineEnrichmentTableFileSchemaItemsType,), + } + attribute_map = { + "column": "column", + "type": "type", + } + + def __init__(self_, column: str, type: ObservabilityPipelineEnrichmentTableFileSchemaItemsType, **kwargs): + """ + Describes a single column and its type in an enrichment table schema. + + :param column: The ``items`` ``column``. + :type column: str + + :param type: Declares allowed data types for enrichment table columns. + :type type: ObservabilityPipelineEnrichmentTableFileSchemaItemsType + """ + super().__init__(kwargs) + + + self_.column = column + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_schema_items_type.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_schema_items_type.py new file mode 100644 index 0000000000..0b884fcfee --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_file_schema_items_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineEnrichmentTableFileSchemaItemsType(ModelSimple): + """ + Declares allowed data types for enrichment table columns. + + :param value: Must be one of ["string", "boolean", "integer", "float", "date", "timestamp"]. + :type value: str + """ + + allowed_values = { + "string", + "boolean", + "integer", + "float", + "date", + "timestamp", + } + STRING: ClassVar["ObservabilityPipelineEnrichmentTableFileSchemaItemsType"] + BOOLEAN: ClassVar["ObservabilityPipelineEnrichmentTableFileSchemaItemsType"] + INTEGER: ClassVar["ObservabilityPipelineEnrichmentTableFileSchemaItemsType"] + FLOAT: ClassVar["ObservabilityPipelineEnrichmentTableFileSchemaItemsType"] + DATE: ClassVar["ObservabilityPipelineEnrichmentTableFileSchemaItemsType"] + TIMESTAMP: ClassVar["ObservabilityPipelineEnrichmentTableFileSchemaItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineEnrichmentTableFileSchemaItemsType.STRING = ObservabilityPipelineEnrichmentTableFileSchemaItemsType("string") +ObservabilityPipelineEnrichmentTableFileSchemaItemsType.BOOLEAN = ObservabilityPipelineEnrichmentTableFileSchemaItemsType("boolean") +ObservabilityPipelineEnrichmentTableFileSchemaItemsType.INTEGER = ObservabilityPipelineEnrichmentTableFileSchemaItemsType("integer") +ObservabilityPipelineEnrichmentTableFileSchemaItemsType.FLOAT = ObservabilityPipelineEnrichmentTableFileSchemaItemsType("float") +ObservabilityPipelineEnrichmentTableFileSchemaItemsType.DATE = ObservabilityPipelineEnrichmentTableFileSchemaItemsType("date") +ObservabilityPipelineEnrichmentTableFileSchemaItemsType.TIMESTAMP = ObservabilityPipelineEnrichmentTableFileSchemaItemsType("timestamp") diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_geo_ip.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_geo_ip.py new file mode 100644 index 0000000000..a29689862a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_geo_ip.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineEnrichmentTableGeoIp(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key_field": (str,), + "locale": (str,), + "path": (str,), + } + attribute_map = { + "key_field": "key_field", + "locale": "locale", + "path": "path", + } + + def __init__(self_, key_field: str, locale: str, path: str, **kwargs): + """ + Uses a GeoIP database to enrich logs based on an IP field. + + :param key_field: Path to the IP field in the log. + :type key_field: str + + :param locale: Locale used to resolve geographical names. + :type locale: str + + :param path: Path to the GeoIP database file. + :type path: str + """ + super().__init__(kwargs) + + + self_.key_field = key_field + self_.locale = locale + self_.path = path diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_processor.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_processor.py new file mode 100644 index 0000000000..8ba013e3ce --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file import ObservabilityPipelineEnrichmentTableFile + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_geo_ip import ObservabilityPipelineEnrichmentTableGeoIp + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_reference_table import ObservabilityPipelineEnrichmentTableReferenceTable + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor_type import ObservabilityPipelineEnrichmentTableProcessorType + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_event_lookup import ObservabilityPipelineEnrichmentTableFieldEventLookup + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_vrl_lookup import ObservabilityPipelineEnrichmentTableFieldVrlLookup + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_secret_lookup import ObservabilityPipelineEnrichmentTableFieldSecretLookup + +class ObservabilityPipelineEnrichmentTableProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file import ObservabilityPipelineEnrichmentTableFile + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_geo_ip import ObservabilityPipelineEnrichmentTableGeoIp + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_reference_table import ObservabilityPipelineEnrichmentTableReferenceTable + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor_type import ObservabilityPipelineEnrichmentTableProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "file": (ObservabilityPipelineEnrichmentTableFile,), + "geoip": (ObservabilityPipelineEnrichmentTableGeoIp,), + "id": (str,), + "include": (str,), + "reference_table": (ObservabilityPipelineEnrichmentTableReferenceTable,), + "target": (str,), + "type": (ObservabilityPipelineEnrichmentTableProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "file": "file", + "geoip": "geoip", + "id": "id", + "include": "include", + "reference_table": "reference_table", + "target": "target", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, target: str, type: ObservabilityPipelineEnrichmentTableProcessorType, display_name: Union[str, UnsetType]=unset, file: Union[ObservabilityPipelineEnrichmentTableFile, UnsetType]=unset, geoip: Union[ObservabilityPipelineEnrichmentTableGeoIp, UnsetType]=unset, reference_table: Union[ObservabilityPipelineEnrichmentTableReferenceTable, UnsetType]=unset, **kwargs): + """ + The ``enrichment_table`` processor enriches logs using a static CSV file, GeoIP database, or reference table. Exactly one of ``file`` , ``geoip`` , or ``reference_table`` must be configured. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param file: Defines a static enrichment table loaded from a CSV file. + :type file: ObservabilityPipelineEnrichmentTableFile, optional + + :param geoip: Uses a GeoIP database to enrich logs based on an IP field. + :type geoip: ObservabilityPipelineEnrichmentTableGeoIp, optional + + :param id: The unique identifier for this processor. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param reference_table: Uses a Datadog reference table to enrich logs. + :type reference_table: ObservabilityPipelineEnrichmentTableReferenceTable, optional + + :param target: Path where enrichment results should be stored in the log. + :type target: str + + :param type: The processor type. The value should always be ``enrichment_table``. + :type type: ObservabilityPipelineEnrichmentTableProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if file is not unset: + kwargs["file"] = file + if geoip is not unset: + kwargs["geoip"] = geoip + if reference_table is not unset: + kwargs["reference_table"] = reference_table + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.target = target + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_processor_type.py new file mode 100644 index 0000000000..4708cec3e6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineEnrichmentTableProcessorType(ModelSimple): + """ + The processor type. The value should always be `enrichment_table`. + + :param value: If omitted defaults to "enrichment_table". Must be one of ["enrichment_table"]. + :type value: str + """ + + allowed_values = { + "enrichment_table", + } + ENRICHMENT_TABLE: ClassVar["ObservabilityPipelineEnrichmentTableProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineEnrichmentTableProcessorType.ENRICHMENT_TABLE = ObservabilityPipelineEnrichmentTableProcessorType("enrichment_table") diff --git a/datadog_api_client/v2/model/observability_pipeline_enrichment_table_reference_table.py b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_reference_table.py new file mode 100644 index 0000000000..d9ebdce61a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_enrichment_table_reference_table.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineEnrichmentTableReferenceTable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "app_key_key": (str,), + "columns": ([str],), + "key_field": (str,), + "table_id": (str,), + } + attribute_map = { + "app_key_key": "app_key_key", + "columns": "columns", + "key_field": "key_field", + "table_id": "table_id", + } + + def __init__(self_, key_field: str, table_id: str, app_key_key: Union[str, UnsetType]=unset, columns: Union[List[str], UnsetType]=unset, **kwargs): + """ + Uses a Datadog reference table to enrich logs. + + :param app_key_key: Name of the environment variable or secret that holds the Datadog application key used to access the reference table. + :type app_key_key: str, optional + + :param columns: List of column names to include from the reference table. If not provided, all columns are included. + :type columns: [str], optional + + :param key_field: Path to the field in the log event to match against the reference table. + :type key_field: str + + :param table_id: The unique identifier of the reference table. + :type table_id: str + """ + if app_key_key is not unset: + kwargs["app_key_key"] = app_key_key + if columns is not unset: + kwargs["columns"] = columns + super().__init__(kwargs) + + + self_.key_field = key_field + self_.table_id = table_id diff --git a/datadog_api_client/v2/model/observability_pipeline_field_value.py b/datadog_api_client/v2/model/observability_pipeline_field_value.py new file mode 100644 index 0000000000..c37a33fc50 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_field_value.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineFieldValue(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, value: str, **kwargs): + """ + Represents a static key-value pair used in various processors. + + :param name: The field name. + :type name: str + + :param value: The field value. + :type value: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/observability_pipeline_filter_processor.py b/datadog_api_client/v2/model/observability_pipeline_filter_processor.py new file mode 100644 index 0000000000..3955f07dba --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_filter_processor.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_filter_processor_type import ObservabilityPipelineFilterProcessorType + +class ObservabilityPipelineFilterProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_filter_processor_type import ObservabilityPipelineFilterProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "type": (ObservabilityPipelineFilterProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, type: ObservabilityPipelineFilterProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``filter`` processor allows conditional processing of logs/metrics based on a Datadog search query. Logs/metrics that match the ``include`` query are passed through; others are discarded. + + **Supported pipeline types:** logs, metrics + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs/metrics should pass through the filter. Logs/metrics that match this query continue to downstream components; others are dropped. + :type include: str + + :param type: The processor type. The value should always be ``filter``. + :type type: ObservabilityPipelineFilterProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_filter_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_filter_processor_type.py new file mode 100644 index 0000000000..9b890c8f0a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_filter_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineFilterProcessorType(ModelSimple): + """ + The processor type. The value should always be `filter`. + + :param value: If omitted defaults to "filter". Must be one of ["filter"]. + :type value: str + """ + + allowed_values = { + "filter", + } + FILTER: ClassVar["ObservabilityPipelineFilterProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineFilterProcessorType.FILTER = ObservabilityPipelineFilterProcessorType("filter") diff --git a/datadog_api_client/v2/model/observability_pipeline_fluent_bit_source.py b/datadog_api_client/v2/model/observability_pipeline_fluent_bit_source.py new file mode 100644 index 0000000000..c9386a9698 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_fluent_bit_source.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source_type import ObservabilityPipelineFluentBitSourceType + +class ObservabilityPipelineFluentBitSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source_type import ObservabilityPipelineFluentBitSourceType + return { + "address_key": (str,), + "id": (str,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineFluentBitSourceType,), + } + attribute_map = { + "address_key": "address_key", + "id": "id", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, type: ObservabilityPipelineFluentBitSourceType, address_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, **kwargs): + """ + The ``fluent_bit`` source ingests logs from Fluent Bit. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the Fluent Bit receiver. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. The value should always be ``fluent_bit``. + :type type: ObservabilityPipelineFluentBitSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_fluent_bit_source_type.py b/datadog_api_client/v2/model/observability_pipeline_fluent_bit_source_type.py new file mode 100644 index 0000000000..c1a01b0a1a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_fluent_bit_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineFluentBitSourceType(ModelSimple): + """ + The source type. The value should always be `fluent_bit`. + + :param value: If omitted defaults to "fluent_bit". Must be one of ["fluent_bit"]. + :type value: str + """ + + allowed_values = { + "fluent_bit", + } + FLUENT_BIT: ClassVar["ObservabilityPipelineFluentBitSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineFluentBitSourceType.FLUENT_BIT = ObservabilityPipelineFluentBitSourceType("fluent_bit") diff --git a/datadog_api_client/v2/model/observability_pipeline_fluentd_source.py b/datadog_api_client/v2/model/observability_pipeline_fluentd_source.py new file mode 100644 index 0000000000..6ea4d00c53 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_fluentd_source.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_fluentd_source_type import ObservabilityPipelineFluentdSourceType + +class ObservabilityPipelineFluentdSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_fluentd_source_type import ObservabilityPipelineFluentdSourceType + return { + "address_key": (str,), + "id": (str,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineFluentdSourceType,), + } + attribute_map = { + "address_key": "address_key", + "id": "id", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, type: ObservabilityPipelineFluentdSourceType, address_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, **kwargs): + """ + The ``fluentd`` source ingests logs from a Fluentd-compatible service. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the Fluent receiver. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. The value should always be `fluentd. + :type type: ObservabilityPipelineFluentdSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_fluentd_source_type.py b/datadog_api_client/v2/model/observability_pipeline_fluentd_source_type.py new file mode 100644 index 0000000000..b746651016 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_fluentd_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineFluentdSourceType(ModelSimple): + """ + The source type. The value should always be `fluentd. + + :param value: If omitted defaults to "fluentd". Must be one of ["fluentd"]. + :type value: str + """ + + allowed_values = { + "fluentd", + } + FLUENTD: ClassVar["ObservabilityPipelineFluentdSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineFluentdSourceType.FLUENTD = ObservabilityPipelineFluentdSourceType("fluentd") diff --git a/datadog_api_client/v2/model/observability_pipeline_gcp_auth.py b/datadog_api_client/v2/model/observability_pipeline_gcp_auth.py new file mode 100644 index 0000000000..13e4e2e704 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_gcp_auth.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineGcpAuth(ModelNormal): + @cached_property + def openapi_types(_): + return { + "credentials_file": (str,), + } + attribute_map = { + "credentials_file": "credentials_file", + } + + def __init__(self_, credentials_file: str, **kwargs): + """ + Google Cloud credentials used to authenticate with Google Cloud Storage. + + :param credentials_file: Path to the Google Cloud service account key file. + :type credentials_file: str + """ + super().__init__(kwargs) + + + self_.credentials_file = credentials_file diff --git a/datadog_api_client/v2/model/observability_pipeline_generate_metrics_processor.py b/datadog_api_client/v2/model/observability_pipeline_generate_metrics_processor.py new file mode 100644 index 0000000000..a5373fa5fa --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generate_metrics_processor.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_generated_metric import ObservabilityPipelineGeneratedMetric + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor_type import ObservabilityPipelineGenerateMetricsProcessorType + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_one import ObservabilityPipelineGeneratedMetricIncrementByOne + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_field import ObservabilityPipelineGeneratedMetricIncrementByField + +class ObservabilityPipelineGenerateMetricsProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_generated_metric import ObservabilityPipelineGeneratedMetric + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor_type import ObservabilityPipelineGenerateMetricsProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "metrics": ([ObservabilityPipelineGeneratedMetric],), + "type": (ObservabilityPipelineGenerateMetricsProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "metrics": "metrics", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, type: ObservabilityPipelineGenerateMetricsProcessorType, display_name: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, metrics: Union[List[ObservabilityPipelineGeneratedMetric], UnsetType]=unset, **kwargs): + """ + The ``generate_datadog_metrics`` processor creates custom metrics from logs and sends them to Datadog. + Metrics can be counters, gauges, or distributions and optionally grouped by log fields. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used to reference this component in other parts of the pipeline. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str, optional + + :param metrics: Configuration for generating individual metrics. + :type metrics: [ObservabilityPipelineGeneratedMetric], optional + + :param type: The processor type. Always ``generate_datadog_metrics``. + :type type: ObservabilityPipelineGenerateMetricsProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if include is not unset: + kwargs["include"] = include + if metrics is not unset: + kwargs["metrics"] = metrics + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_generate_metrics_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_generate_metrics_processor_type.py new file mode 100644 index 0000000000..1fe8b3e063 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generate_metrics_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGenerateMetricsProcessorType(ModelSimple): + """ + The processor type. Always `generate_datadog_metrics`. + + :param value: If omitted defaults to "generate_datadog_metrics". Must be one of ["generate_datadog_metrics"]. + :type value: str + """ + + allowed_values = { + "generate_datadog_metrics", + } + GENERATE_DATADOG_METRICS: ClassVar["ObservabilityPipelineGenerateMetricsProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGenerateMetricsProcessorType.GENERATE_DATADOG_METRICS = ObservabilityPipelineGenerateMetricsProcessorType("generate_datadog_metrics") diff --git a/datadog_api_client/v2/model/observability_pipeline_generate_metrics_v2_processor.py b/datadog_api_client/v2/model/observability_pipeline_generate_metrics_v2_processor.py new file mode 100644 index 0000000000..2a4c5ab7fb --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generate_metrics_v2_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_generated_metric import ObservabilityPipelineGeneratedMetric + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor_type import ObservabilityPipelineGenerateMetricsV2ProcessorType + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_one import ObservabilityPipelineGeneratedMetricIncrementByOne + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_field import ObservabilityPipelineGeneratedMetricIncrementByField + +class ObservabilityPipelineGenerateMetricsV2Processor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_generated_metric import ObservabilityPipelineGeneratedMetric + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor_type import ObservabilityPipelineGenerateMetricsV2ProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "metrics": ([ObservabilityPipelineGeneratedMetric],), + "type": (ObservabilityPipelineGenerateMetricsV2ProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "metrics": "metrics", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, type: ObservabilityPipelineGenerateMetricsV2ProcessorType, display_name: Union[str, UnsetType]=unset, include: Union[str, UnsetType]=unset, metrics: Union[List[ObservabilityPipelineGeneratedMetric], UnsetType]=unset, **kwargs): + """ + The ``generate_metrics`` processor creates custom metrics from logs. + Metrics can be counters, gauges, or distributions and optionally grouped by log fields. + The generated metrics must be routed to a metrics destination using the input ``.metrics``. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used to reference this component in other parts of the pipeline. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str, optional + + :param metrics: Configuration for generating individual metrics. + :type metrics: [ObservabilityPipelineGeneratedMetric], optional + + :param type: The processor type. Always ``generate_metrics``. + :type type: ObservabilityPipelineGenerateMetricsV2ProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if include is not unset: + kwargs["include"] = include + if metrics is not unset: + kwargs["metrics"] = metrics + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_generate_metrics_v2_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_generate_metrics_v2_processor_type.py new file mode 100644 index 0000000000..ecb2173728 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generate_metrics_v2_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGenerateMetricsV2ProcessorType(ModelSimple): + """ + The processor type. Always `generate_metrics`. + + :param value: If omitted defaults to "generate_metrics". Must be one of ["generate_metrics"]. + :type value: str + """ + + allowed_values = { + "generate_metrics", + } + GENERATE_METRICS: ClassVar["ObservabilityPipelineGenerateMetricsV2ProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGenerateMetricsV2ProcessorType.GENERATE_METRICS = ObservabilityPipelineGenerateMetricsV2ProcessorType("generate_metrics") diff --git a/datadog_api_client/v2/model/observability_pipeline_generated_metric.py b/datadog_api_client/v2/model/observability_pipeline_generated_metric.py new file mode 100644 index 0000000000..e1884eaeb6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generated_metric.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_generated_metric_metric_type import ObservabilityPipelineGeneratedMetricMetricType + from datadog_api_client.v2.model.observability_pipeline_metric_value import ObservabilityPipelineMetricValue + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_one import ObservabilityPipelineGeneratedMetricIncrementByOne + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_field import ObservabilityPipelineGeneratedMetricIncrementByField + +class ObservabilityPipelineGeneratedMetric(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_generated_metric_metric_type import ObservabilityPipelineGeneratedMetricMetricType + from datadog_api_client.v2.model.observability_pipeline_metric_value import ObservabilityPipelineMetricValue + return { + "group_by": ([str],), + "include": (str,), + "metric_type": (ObservabilityPipelineGeneratedMetricMetricType,), + "name": (str,), + "value": (ObservabilityPipelineMetricValue,), + } + attribute_map = { + "group_by": "group_by", + "include": "include", + "metric_type": "metric_type", + "name": "name", + "value": "value", + } + + def __init__(self_, include: str, metric_type: ObservabilityPipelineGeneratedMetricMetricType, name: str, value: Union[ObservabilityPipelineMetricValue, ObservabilityPipelineGeneratedMetricIncrementByOne, ObservabilityPipelineGeneratedMetricIncrementByField], group_by: Union[List[str], UnsetType]=unset, **kwargs): + """ + Defines a log-based custom metric, including its name, type, filter, value computation strategy, + and optional grouping fields. + + :param group_by: Optional fields used to group the metric series. + :type group_by: [str], optional + + :param include: Datadog filter query to match logs for metric generation. + :type include: str + + :param metric_type: Type of metric to create. + :type metric_type: ObservabilityPipelineGeneratedMetricMetricType + + :param name: Name of the custom metric to be created. + :type name: str + + :param value: Specifies how the value of the generated metric is computed. + :type value: ObservabilityPipelineMetricValue + """ + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + + self_.include = include + self_.metric_type = metric_type + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_field.py b/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_field.py new file mode 100644 index 0000000000..c25173e1ec --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_field.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_field_strategy import ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy + +class ObservabilityPipelineGeneratedMetricIncrementByField(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_field_strategy import ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy + return { + "field": (str,), + "strategy": (ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy,), + } + attribute_map = { + "field": "field", + "strategy": "strategy", + } + + def __init__(self_, field: str, strategy: ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy, **kwargs): + """ + Strategy that increments a generated metric based on the value of a log field. + + :param field: Name of the log field containing the numeric value to increment the metric by. + :type field: str + + :param strategy: Uses a numeric field in the log event as the metric increment. + :type strategy: ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy + """ + super().__init__(kwargs) + + + self_.field = field + self_.strategy = strategy diff --git a/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_field_strategy.py b/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_field_strategy.py new file mode 100644 index 0000000000..dc1210d9c2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_field_strategy.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy(ModelSimple): + """ + Uses a numeric field in the log event as the metric increment. + + :param value: If omitted defaults to "increment_by_field". Must be one of ["increment_by_field"]. + :type value: str + """ + + allowed_values = { + "increment_by_field", + } + INCREMENT_BY_FIELD: ClassVar["ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy.INCREMENT_BY_FIELD = ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy("increment_by_field") diff --git a/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_one.py b/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_one.py new file mode 100644 index 0000000000..c2b3feffcd --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_one.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_one_strategy import ObservabilityPipelineGeneratedMetricIncrementByOneStrategy + +class ObservabilityPipelineGeneratedMetricIncrementByOne(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_one_strategy import ObservabilityPipelineGeneratedMetricIncrementByOneStrategy + return { + "strategy": (ObservabilityPipelineGeneratedMetricIncrementByOneStrategy,), + } + attribute_map = { + "strategy": "strategy", + } + + def __init__(self_, strategy: ObservabilityPipelineGeneratedMetricIncrementByOneStrategy, **kwargs): + """ + Strategy that increments a generated metric by one for each matching event. + + :param strategy: Increments the metric by 1 for each matching event. + :type strategy: ObservabilityPipelineGeneratedMetricIncrementByOneStrategy + """ + super().__init__(kwargs) + + + self_.strategy = strategy diff --git a/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_one_strategy.py b/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_one_strategy.py new file mode 100644 index 0000000000..506adacae8 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generated_metric_increment_by_one_strategy.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGeneratedMetricIncrementByOneStrategy(ModelSimple): + """ + Increments the metric by 1 for each matching event. + + :param value: If omitted defaults to "increment_by_one". Must be one of ["increment_by_one"]. + :type value: str + """ + + allowed_values = { + "increment_by_one", + } + INCREMENT_BY_ONE: ClassVar["ObservabilityPipelineGeneratedMetricIncrementByOneStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGeneratedMetricIncrementByOneStrategy.INCREMENT_BY_ONE = ObservabilityPipelineGeneratedMetricIncrementByOneStrategy("increment_by_one") diff --git a/datadog_api_client/v2/model/observability_pipeline_generated_metric_metric_type.py b/datadog_api_client/v2/model/observability_pipeline_generated_metric_metric_type.py new file mode 100644 index 0000000000..f84bb970b4 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_generated_metric_metric_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGeneratedMetricMetricType(ModelSimple): + """ + Type of metric to create. + + :param value: Must be one of ["count", "gauge", "distribution"]. + :type value: str + """ + + allowed_values = { + "count", + "gauge", + "distribution", + } + COUNT: ClassVar["ObservabilityPipelineGeneratedMetricMetricType"] + GAUGE: ClassVar["ObservabilityPipelineGeneratedMetricMetricType"] + DISTRIBUTION: ClassVar["ObservabilityPipelineGeneratedMetricMetricType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGeneratedMetricMetricType.COUNT = ObservabilityPipelineGeneratedMetricMetricType("count") +ObservabilityPipelineGeneratedMetricMetricType.GAUGE = ObservabilityPipelineGeneratedMetricMetricType("gauge") +ObservabilityPipelineGeneratedMetricMetricType.DISTRIBUTION = ObservabilityPipelineGeneratedMetricMetricType("distribution") diff --git a/datadog_api_client/v2/model/observability_pipeline_google_chronicle_destination.py b/datadog_api_client/v2/model/observability_pipeline_google_chronicle_destination.py new file mode 100644 index 0000000000..9ad53b515c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_chronicle_destination.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_gcp_auth import ObservabilityPipelineGcpAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination_encoding import ObservabilityPipelineGoogleChronicleDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination_type import ObservabilityPipelineGoogleChronicleDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineGoogleChronicleDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_gcp_auth import ObservabilityPipelineGcpAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination_encoding import ObservabilityPipelineGoogleChronicleDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination_type import ObservabilityPipelineGoogleChronicleDestinationType + return { + "auth": (ObservabilityPipelineGcpAuth,), + "buffer": (ObservabilityPipelineBufferOptions,), + "customer_id": (str,), + "encoding": (ObservabilityPipelineGoogleChronicleDestinationEncoding,), + "endpoint_url_key": (str,), + "id": (str,), + "inputs": ([str],), + "log_type": (str,), + "type": (ObservabilityPipelineGoogleChronicleDestinationType,), + } + attribute_map = { + "auth": "auth", + "buffer": "buffer", + "customer_id": "customer_id", + "encoding": "encoding", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "inputs": "inputs", + "log_type": "log_type", + "type": "type", + } + + def __init__(self_, customer_id: str, id: str, inputs: List[str], type: ObservabilityPipelineGoogleChronicleDestinationType, auth: Union[ObservabilityPipelineGcpAuth, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, encoding: Union[ObservabilityPipelineGoogleChronicleDestinationEncoding, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, log_type: Union[str, UnsetType]=unset, **kwargs): + """ + The ``google_chronicle`` destination sends logs to Google Chronicle. + + **Supported pipeline types:** logs + + :param auth: Google Cloud credentials used to authenticate with Google Cloud Storage. + :type auth: ObservabilityPipelineGcpAuth, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param customer_id: The Google Chronicle customer ID. + :type customer_id: str + + :param encoding: The encoding format for the logs sent to Chronicle. + :type encoding: ObservabilityPipelineGoogleChronicleDestinationEncoding, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the Google Chronicle endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param log_type: The log type metadata associated with the Chronicle destination. + :type log_type: str, optional + + :param type: The destination type. The value should always be ``google_chronicle``. + :type type: ObservabilityPipelineGoogleChronicleDestinationType + """ + if auth is not unset: + kwargs["auth"] = auth + if buffer is not unset: + kwargs["buffer"] = buffer + if encoding is not unset: + kwargs["encoding"] = encoding + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if log_type is not unset: + kwargs["log_type"] = log_type + super().__init__(kwargs) + + + self_.customer_id = customer_id + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_google_chronicle_destination_encoding.py b/datadog_api_client/v2/model/observability_pipeline_google_chronicle_destination_encoding.py new file mode 100644 index 0000000000..1b30d5d6c4 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_chronicle_destination_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGoogleChronicleDestinationEncoding(ModelSimple): + """ + The encoding format for the logs sent to Chronicle. + + :param value: Must be one of ["json", "raw_message"]. + :type value: str + """ + + allowed_values = { + "json", + "raw_message", + } + JSON: ClassVar["ObservabilityPipelineGoogleChronicleDestinationEncoding"] + RAW_MESSAGE: ClassVar["ObservabilityPipelineGoogleChronicleDestinationEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGoogleChronicleDestinationEncoding.JSON = ObservabilityPipelineGoogleChronicleDestinationEncoding("json") +ObservabilityPipelineGoogleChronicleDestinationEncoding.RAW_MESSAGE = ObservabilityPipelineGoogleChronicleDestinationEncoding("raw_message") diff --git a/datadog_api_client/v2/model/observability_pipeline_google_chronicle_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_google_chronicle_destination_type.py new file mode 100644 index 0000000000..01bd37b579 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_chronicle_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGoogleChronicleDestinationType(ModelSimple): + """ + The destination type. The value should always be `google_chronicle`. + + :param value: If omitted defaults to "google_chronicle". Must be one of ["google_chronicle"]. + :type value: str + """ + + allowed_values = { + "google_chronicle", + } + GOOGLE_CHRONICLE: ClassVar["ObservabilityPipelineGoogleChronicleDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGoogleChronicleDestinationType.GOOGLE_CHRONICLE = ObservabilityPipelineGoogleChronicleDestinationType("google_chronicle") diff --git a/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination.py b/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination.py new file mode 100644 index 0000000000..e617807e42 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination.py @@ -0,0 +1,123 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination_acl import ObservabilityPipelineGoogleCloudStorageDestinationAcl + from datadog_api_client.v2.model.observability_pipeline_gcp_auth import ObservabilityPipelineGcpAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_metadata_entry import ObservabilityPipelineMetadataEntry + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination_storage_class import ObservabilityPipelineGoogleCloudStorageDestinationStorageClass + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination_type import ObservabilityPipelineGoogleCloudStorageDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineGoogleCloudStorageDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination_acl import ObservabilityPipelineGoogleCloudStorageDestinationAcl + from datadog_api_client.v2.model.observability_pipeline_gcp_auth import ObservabilityPipelineGcpAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_metadata_entry import ObservabilityPipelineMetadataEntry + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination_storage_class import ObservabilityPipelineGoogleCloudStorageDestinationStorageClass + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination_type import ObservabilityPipelineGoogleCloudStorageDestinationType + return { + "acl": (ObservabilityPipelineGoogleCloudStorageDestinationAcl,), + "auth": (ObservabilityPipelineGcpAuth,), + "bucket": (str,), + "buffer": (ObservabilityPipelineBufferOptions,), + "id": (str,), + "inputs": ([str],), + "key_prefix": (str,), + "metadata": ([ObservabilityPipelineMetadataEntry],), + "storage_class": (ObservabilityPipelineGoogleCloudStorageDestinationStorageClass,), + "type": (ObservabilityPipelineGoogleCloudStorageDestinationType,), + } + attribute_map = { + "acl": "acl", + "auth": "auth", + "bucket": "bucket", + "buffer": "buffer", + "id": "id", + "inputs": "inputs", + "key_prefix": "key_prefix", + "metadata": "metadata", + "storage_class": "storage_class", + "type": "type", + } + + def __init__(self_, bucket: str, id: str, inputs: List[str], storage_class: ObservabilityPipelineGoogleCloudStorageDestinationStorageClass, type: ObservabilityPipelineGoogleCloudStorageDestinationType, acl: Union[ObservabilityPipelineGoogleCloudStorageDestinationAcl, UnsetType]=unset, auth: Union[ObservabilityPipelineGcpAuth, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, key_prefix: Union[str, UnsetType]=unset, metadata: Union[List[ObservabilityPipelineMetadataEntry], UnsetType]=unset, **kwargs): + """ + The ``google_cloud_storage`` destination stores logs in a Google Cloud Storage (GCS) bucket. + It requires a bucket name, Google Cloud authentication, and metadata fields. + + **Supported pipeline types:** logs + + :param acl: Access control list setting for objects written to the bucket. + :type acl: ObservabilityPipelineGoogleCloudStorageDestinationAcl, optional + + :param auth: Google Cloud credentials used to authenticate with Google Cloud Storage. + :type auth: ObservabilityPipelineGcpAuth, optional + + :param bucket: Name of the GCS bucket. + :type bucket: str + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param id: Unique identifier for the destination component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param key_prefix: Optional prefix for object keys within the GCS bucket. + :type key_prefix: str, optional + + :param metadata: Custom metadata to attach to each object uploaded to the GCS bucket. + :type metadata: [ObservabilityPipelineMetadataEntry], optional + + :param storage_class: Storage class used for objects stored in GCS. + :type storage_class: ObservabilityPipelineGoogleCloudStorageDestinationStorageClass + + :param type: The destination type. Always ``google_cloud_storage``. + :type type: ObservabilityPipelineGoogleCloudStorageDestinationType + """ + if acl is not unset: + kwargs["acl"] = acl + if auth is not unset: + kwargs["auth"] = auth + if buffer is not unset: + kwargs["buffer"] = buffer + if key_prefix is not unset: + kwargs["key_prefix"] = key_prefix + if metadata is not unset: + kwargs["metadata"] = metadata + super().__init__(kwargs) + + + self_.bucket = bucket + self_.id = id + self_.inputs = inputs + self_.storage_class = storage_class + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination_acl.py b/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination_acl.py new file mode 100644 index 0000000000..c48afd34d0 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination_acl.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGoogleCloudStorageDestinationAcl(ModelSimple): + """ + Access control list setting for objects written to the bucket. + + :param value: Must be one of ["private", "project-private", "public-read", "authenticated-read", "bucket-owner-read", "bucket-owner-full-control"]. + :type value: str + """ + + allowed_values = { + "private", + "project-private", + "public-read", + "authenticated-read", + "bucket-owner-read", + "bucket-owner-full-control", + } + PRIVATE: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationAcl"] + PROJECTNOT_PRIVATE: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationAcl"] + PUBLICNOT_READ: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationAcl"] + AUTHENTICATEDNOT_READ: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationAcl"] + BUCKETNOT_OWNERNOT_READ: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationAcl"] + BUCKETNOT_OWNERNOT_FULLNOT_CONTROL: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationAcl"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGoogleCloudStorageDestinationAcl.PRIVATE = ObservabilityPipelineGoogleCloudStorageDestinationAcl("private") +ObservabilityPipelineGoogleCloudStorageDestinationAcl.PROJECTNOT_PRIVATE = ObservabilityPipelineGoogleCloudStorageDestinationAcl("project-private") +ObservabilityPipelineGoogleCloudStorageDestinationAcl.PUBLICNOT_READ = ObservabilityPipelineGoogleCloudStorageDestinationAcl("public-read") +ObservabilityPipelineGoogleCloudStorageDestinationAcl.AUTHENTICATEDNOT_READ = ObservabilityPipelineGoogleCloudStorageDestinationAcl("authenticated-read") +ObservabilityPipelineGoogleCloudStorageDestinationAcl.BUCKETNOT_OWNERNOT_READ = ObservabilityPipelineGoogleCloudStorageDestinationAcl("bucket-owner-read") +ObservabilityPipelineGoogleCloudStorageDestinationAcl.BUCKETNOT_OWNERNOT_FULLNOT_CONTROL = ObservabilityPipelineGoogleCloudStorageDestinationAcl("bucket-owner-full-control") diff --git a/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination_storage_class.py b/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination_storage_class.py new file mode 100644 index 0000000000..a3248651f5 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination_storage_class.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGoogleCloudStorageDestinationStorageClass(ModelSimple): + """ + Storage class used for objects stored in GCS. + + :param value: Must be one of ["STANDARD", "NEARLINE", "COLDLINE", "ARCHIVE"]. + :type value: str + """ + + allowed_values = { + "STANDARD", + "NEARLINE", + "COLDLINE", + "ARCHIVE", + } + STANDARD: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationStorageClass"] + NEARLINE: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationStorageClass"] + COLDLINE: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationStorageClass"] + ARCHIVE: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationStorageClass"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGoogleCloudStorageDestinationStorageClass.STANDARD = ObservabilityPipelineGoogleCloudStorageDestinationStorageClass("STANDARD") +ObservabilityPipelineGoogleCloudStorageDestinationStorageClass.NEARLINE = ObservabilityPipelineGoogleCloudStorageDestinationStorageClass("NEARLINE") +ObservabilityPipelineGoogleCloudStorageDestinationStorageClass.COLDLINE = ObservabilityPipelineGoogleCloudStorageDestinationStorageClass("COLDLINE") +ObservabilityPipelineGoogleCloudStorageDestinationStorageClass.ARCHIVE = ObservabilityPipelineGoogleCloudStorageDestinationStorageClass("ARCHIVE") diff --git a/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination_type.py new file mode 100644 index 0000000000..90aba0b75e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_cloud_storage_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGoogleCloudStorageDestinationType(ModelSimple): + """ + The destination type. Always `google_cloud_storage`. + + :param value: If omitted defaults to "google_cloud_storage". Must be one of ["google_cloud_storage"]. + :type value: str + """ + + allowed_values = { + "google_cloud_storage", + } + GOOGLE_CLOUD_STORAGE: ClassVar["ObservabilityPipelineGoogleCloudStorageDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGoogleCloudStorageDestinationType.GOOGLE_CLOUD_STORAGE = ObservabilityPipelineGoogleCloudStorageDestinationType("google_cloud_storage") diff --git a/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_destination.py b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_destination.py new file mode 100644 index 0000000000..190876c47e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_destination.py @@ -0,0 +1,119 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_gcp_auth import ObservabilityPipelineGcpAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination_encoding import ObservabilityPipelineGooglePubSubDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination_type import ObservabilityPipelineGooglePubSubDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineGooglePubSubDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_gcp_auth import ObservabilityPipelineGcpAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination_encoding import ObservabilityPipelineGooglePubSubDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination_type import ObservabilityPipelineGooglePubSubDestinationType + return { + "auth": (ObservabilityPipelineGcpAuth,), + "buffer": (ObservabilityPipelineBufferOptions,), + "encoding": (ObservabilityPipelineGooglePubSubDestinationEncoding,), + "endpoint_url_key": (str,), + "id": (str,), + "inputs": ([str],), + "project": (str,), + "tls": (ObservabilityPipelineTls,), + "topic": (str,), + "type": (ObservabilityPipelineGooglePubSubDestinationType,), + } + attribute_map = { + "auth": "auth", + "buffer": "buffer", + "encoding": "encoding", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "inputs": "inputs", + "project": "project", + "tls": "tls", + "topic": "topic", + "type": "type", + } + + def __init__(self_, encoding: ObservabilityPipelineGooglePubSubDestinationEncoding, id: str, inputs: List[str], project: str, topic: str, type: ObservabilityPipelineGooglePubSubDestinationType, auth: Union[ObservabilityPipelineGcpAuth, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``google_pubsub`` destination publishes logs to a Google Cloud Pub/Sub topic. + + **Supported pipeline types:** logs + + :param auth: Google Cloud credentials used to authenticate with Google Cloud Storage. + :type auth: ObservabilityPipelineGcpAuth, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param encoding: Encoding format for log events. + :type encoding: ObservabilityPipelineGooglePubSubDestinationEncoding + + :param endpoint_url_key: Name of the environment variable or secret that holds the Google Cloud Pub/Sub endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param project: The Google Cloud project ID that owns the Pub/Sub topic. + :type project: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param topic: The Pub/Sub topic name to publish logs to. + :type topic: str + + :param type: The destination type. The value should always be ``google_pubsub``. + :type type: ObservabilityPipelineGooglePubSubDestinationType + """ + if auth is not unset: + kwargs["auth"] = auth + if buffer is not unset: + kwargs["buffer"] = buffer + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.encoding = encoding + self_.id = id + self_.inputs = inputs + self_.project = project + self_.topic = topic + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_destination_encoding.py b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_destination_encoding.py new file mode 100644 index 0000000000..a19cb87094 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_destination_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGooglePubSubDestinationEncoding(ModelSimple): + """ + Encoding format for log events. + + :param value: Must be one of ["json", "raw_message"]. + :type value: str + """ + + allowed_values = { + "json", + "raw_message", + } + JSON: ClassVar["ObservabilityPipelineGooglePubSubDestinationEncoding"] + RAW_MESSAGE: ClassVar["ObservabilityPipelineGooglePubSubDestinationEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGooglePubSubDestinationEncoding.JSON = ObservabilityPipelineGooglePubSubDestinationEncoding("json") +ObservabilityPipelineGooglePubSubDestinationEncoding.RAW_MESSAGE = ObservabilityPipelineGooglePubSubDestinationEncoding("raw_message") diff --git a/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_destination_type.py new file mode 100644 index 0000000000..c23ee3c17d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGooglePubSubDestinationType(ModelSimple): + """ + The destination type. The value should always be `google_pubsub`. + + :param value: If omitted defaults to "google_pubsub". Must be one of ["google_pubsub"]. + :type value: str + """ + + allowed_values = { + "google_pubsub", + } + GOOGLE_PUBSUB: ClassVar["ObservabilityPipelineGooglePubSubDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGooglePubSubDestinationType.GOOGLE_PUBSUB = ObservabilityPipelineGooglePubSubDestinationType("google_pubsub") diff --git a/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_source.py b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_source.py new file mode 100644 index 0000000000..fecbd34f9c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_source.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_gcp_auth import ObservabilityPipelineGcpAuth + from datadog_api_client.v2.model.observability_pipeline_decoding import ObservabilityPipelineDecoding + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source_type import ObservabilityPipelineGooglePubSubSourceType + +class ObservabilityPipelineGooglePubSubSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_gcp_auth import ObservabilityPipelineGcpAuth + from datadog_api_client.v2.model.observability_pipeline_decoding import ObservabilityPipelineDecoding + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source_type import ObservabilityPipelineGooglePubSubSourceType + return { + "auth": (ObservabilityPipelineGcpAuth,), + "decoding": (ObservabilityPipelineDecoding,), + "id": (str,), + "project": (str,), + "subscription": (str,), + "tls": (ObservabilityPipelineTls,), + "type": (ObservabilityPipelineGooglePubSubSourceType,), + } + attribute_map = { + "auth": "auth", + "decoding": "decoding", + "id": "id", + "project": "project", + "subscription": "subscription", + "tls": "tls", + "type": "type", + } + + def __init__(self_, decoding: ObservabilityPipelineDecoding, id: str, project: str, subscription: str, type: ObservabilityPipelineGooglePubSubSourceType, auth: Union[ObservabilityPipelineGcpAuth, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``google_pubsub`` source ingests logs from a Google Cloud Pub/Sub subscription. + + **Supported pipeline types:** logs + + :param auth: Google Cloud credentials used to authenticate with Google Cloud Storage. + :type auth: ObservabilityPipelineGcpAuth, optional + + :param decoding: The decoding format used to interpret incoming logs. + :type decoding: ObservabilityPipelineDecoding + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param project: The Google Cloud project ID that owns the Pub/Sub subscription. + :type project: str + + :param subscription: The Pub/Sub subscription name from which messages are consumed. + :type subscription: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The source type. The value should always be ``google_pubsub``. + :type type: ObservabilityPipelineGooglePubSubSourceType + """ + if auth is not unset: + kwargs["auth"] = auth + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.decoding = decoding + self_.id = id + self_.project = project + self_.subscription = subscription + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_source_type.py b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_source_type.py new file mode 100644 index 0000000000..2e269b94cb --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_google_pub_sub_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineGooglePubSubSourceType(ModelSimple): + """ + The source type. The value should always be `google_pubsub`. + + :param value: If omitted defaults to "google_pubsub". Must be one of ["google_pubsub"]. + :type value: str + """ + + allowed_values = { + "google_pubsub", + } + GOOGLE_PUBSUB: ClassVar["ObservabilityPipelineGooglePubSubSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineGooglePubSubSourceType.GOOGLE_PUBSUB = ObservabilityPipelineGooglePubSubSourceType("google_pubsub") diff --git a/datadog_api_client/v2/model/observability_pipeline_http_client_destination.py b/datadog_api_client/v2/model/observability_pipeline_http_client_destination.py new file mode 100644 index 0000000000..fc6a372a8b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_client_destination.py @@ -0,0 +1,144 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_auth_strategy import ObservabilityPipelineHttpClientDestinationAuthStrategy + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_compression import ObservabilityPipelineHttpClientDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_encoding import ObservabilityPipelineHttpClientDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_type import ObservabilityPipelineHttpClientDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineHttpClientDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_auth_strategy import ObservabilityPipelineHttpClientDestinationAuthStrategy + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_compression import ObservabilityPipelineHttpClientDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_encoding import ObservabilityPipelineHttpClientDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_type import ObservabilityPipelineHttpClientDestinationType + return { + "auth_strategy": (ObservabilityPipelineHttpClientDestinationAuthStrategy,), + "buffer": (ObservabilityPipelineBufferOptions,), + "compression": (ObservabilityPipelineHttpClientDestinationCompression,), + "custom_key": (str,), + "encoding": (ObservabilityPipelineHttpClientDestinationEncoding,), + "id": (str,), + "inputs": ([str],), + "password_key": (str,), + "tls": (ObservabilityPipelineClientTls,), + "token_key": (str,), + "type": (ObservabilityPipelineHttpClientDestinationType,), + "uri_key": (str,), + "username_key": (str,), + } + attribute_map = { + "auth_strategy": "auth_strategy", + "buffer": "buffer", + "compression": "compression", + "custom_key": "custom_key", + "encoding": "encoding", + "id": "id", + "inputs": "inputs", + "password_key": "password_key", + "tls": "tls", + "token_key": "token_key", + "type": "type", + "uri_key": "uri_key", + "username_key": "username_key", + } + + def __init__(self_, encoding: ObservabilityPipelineHttpClientDestinationEncoding, id: str, inputs: List[str], type: ObservabilityPipelineHttpClientDestinationType, auth_strategy: Union[ObservabilityPipelineHttpClientDestinationAuthStrategy, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, compression: Union[ObservabilityPipelineHttpClientDestinationCompression, UnsetType]=unset, custom_key: Union[str, UnsetType]=unset, password_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineClientTls, UnsetType]=unset, token_key: Union[str, UnsetType]=unset, uri_key: Union[str, UnsetType]=unset, username_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``http_client`` destination sends data to an HTTP endpoint. + + **Supported pipeline types:** logs, metrics + + :param auth_strategy: HTTP authentication strategy. + :type auth_strategy: ObservabilityPipelineHttpClientDestinationAuthStrategy, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param compression: Compression configuration for HTTP requests. + :type compression: ObservabilityPipelineHttpClientDestinationCompression, optional + + :param custom_key: Name of the environment variable or secret that holds a custom header value (used with custom auth strategies). + :type custom_key: str, optional + + :param encoding: Encoding format for log events. + :type encoding: ObservabilityPipelineHttpClientDestinationEncoding + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the input for this component. + :type inputs: [str] + + :param password_key: Name of the environment variable or secret that holds the password (used when ``auth_strategy`` is ``basic`` ). + :type password_key: str, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineClientTls, optional + + :param token_key: Name of the environment variable or secret that holds the bearer token (used when ``auth_strategy`` is ``bearer`` ). + :type token_key: str, optional + + :param type: The destination type. The value should always be ``http_client``. + :type type: ObservabilityPipelineHttpClientDestinationType + + :param uri_key: Name of the environment variable or secret that holds the HTTP endpoint URI. + :type uri_key: str, optional + + :param username_key: Name of the environment variable or secret that holds the username (used when ``auth_strategy`` is ``basic`` ). + :type username_key: str, optional + """ + if auth_strategy is not unset: + kwargs["auth_strategy"] = auth_strategy + if buffer is not unset: + kwargs["buffer"] = buffer + if compression is not unset: + kwargs["compression"] = compression + if custom_key is not unset: + kwargs["custom_key"] = custom_key + if password_key is not unset: + kwargs["password_key"] = password_key + if tls is not unset: + kwargs["tls"] = tls + if token_key is not unset: + kwargs["token_key"] = token_key + if uri_key is not unset: + kwargs["uri_key"] = uri_key + if username_key is not unset: + kwargs["username_key"] = username_key + super().__init__(kwargs) + + + self_.encoding = encoding + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_http_client_destination_auth_strategy.py b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_auth_strategy.py new file mode 100644 index 0000000000..59011c2bf0 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_auth_strategy.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineHttpClientDestinationAuthStrategy(ModelSimple): + """ + HTTP authentication strategy. + + :param value: Must be one of ["none", "basic", "bearer"]. + :type value: str + """ + + allowed_values = { + "none", + "basic", + "bearer", + } + NONE: ClassVar["ObservabilityPipelineHttpClientDestinationAuthStrategy"] + BASIC: ClassVar["ObservabilityPipelineHttpClientDestinationAuthStrategy"] + BEARER: ClassVar["ObservabilityPipelineHttpClientDestinationAuthStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineHttpClientDestinationAuthStrategy.NONE = ObservabilityPipelineHttpClientDestinationAuthStrategy("none") +ObservabilityPipelineHttpClientDestinationAuthStrategy.BASIC = ObservabilityPipelineHttpClientDestinationAuthStrategy("basic") +ObservabilityPipelineHttpClientDestinationAuthStrategy.BEARER = ObservabilityPipelineHttpClientDestinationAuthStrategy("bearer") diff --git a/datadog_api_client/v2/model/observability_pipeline_http_client_destination_compression.py b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_compression.py new file mode 100644 index 0000000000..ef2722bb71 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_compression.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_compression_algorithm import ObservabilityPipelineHttpClientDestinationCompressionAlgorithm + +class ObservabilityPipelineHttpClientDestinationCompression(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_http_client_destination_compression_algorithm import ObservabilityPipelineHttpClientDestinationCompressionAlgorithm + return { + "algorithm": (ObservabilityPipelineHttpClientDestinationCompressionAlgorithm,), + } + attribute_map = { + "algorithm": "algorithm", + } + + def __init__(self_, algorithm: ObservabilityPipelineHttpClientDestinationCompressionAlgorithm, **kwargs): + """ + Compression configuration for HTTP requests. + + :param algorithm: Compression algorithm. + :type algorithm: ObservabilityPipelineHttpClientDestinationCompressionAlgorithm + """ + super().__init__(kwargs) + + + self_.algorithm = algorithm diff --git a/datadog_api_client/v2/model/observability_pipeline_http_client_destination_compression_algorithm.py b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_compression_algorithm.py new file mode 100644 index 0000000000..16c4c3d8d0 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_compression_algorithm.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineHttpClientDestinationCompressionAlgorithm(ModelSimple): + """ + Compression algorithm. + + :param value: If omitted defaults to "gzip". Must be one of ["gzip"]. + :type value: str + """ + + allowed_values = { + "gzip", + } + GZIP: ClassVar["ObservabilityPipelineHttpClientDestinationCompressionAlgorithm"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineHttpClientDestinationCompressionAlgorithm.GZIP = ObservabilityPipelineHttpClientDestinationCompressionAlgorithm("gzip") diff --git a/datadog_api_client/v2/model/observability_pipeline_http_client_destination_encoding.py b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_encoding.py new file mode 100644 index 0000000000..ffe92e2cb6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_encoding.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineHttpClientDestinationEncoding(ModelSimple): + """ + Encoding format for log events. + + :param value: If omitted defaults to "json". Must be one of ["json"]. + :type value: str + """ + + allowed_values = { + "json", + } + JSON: ClassVar["ObservabilityPipelineHttpClientDestinationEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineHttpClientDestinationEncoding.JSON = ObservabilityPipelineHttpClientDestinationEncoding("json") diff --git a/datadog_api_client/v2/model/observability_pipeline_http_client_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_type.py new file mode 100644 index 0000000000..9b75556869 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_client_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineHttpClientDestinationType(ModelSimple): + """ + The destination type. The value should always be `http_client`. + + :param value: If omitted defaults to "http_client". Must be one of ["http_client"]. + :type value: str + """ + + allowed_values = { + "http_client", + } + HTTP_CLIENT: ClassVar["ObservabilityPipelineHttpClientDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineHttpClientDestinationType.HTTP_CLIENT = ObservabilityPipelineHttpClientDestinationType("http_client") diff --git a/datadog_api_client/v2/model/observability_pipeline_http_client_source.py b/datadog_api_client/v2/model/observability_pipeline_http_client_source.py new file mode 100644 index 0000000000..67c9c86d9d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_client_source.py @@ -0,0 +1,131 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_http_client_source_auth_strategy import ObservabilityPipelineHttpClientSourceAuthStrategy + from datadog_api_client.v2.model.observability_pipeline_decoding import ObservabilityPipelineDecoding + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_http_client_source_type import ObservabilityPipelineHttpClientSourceType + +class ObservabilityPipelineHttpClientSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_http_client_source_auth_strategy import ObservabilityPipelineHttpClientSourceAuthStrategy + from datadog_api_client.v2.model.observability_pipeline_decoding import ObservabilityPipelineDecoding + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_http_client_source_type import ObservabilityPipelineHttpClientSourceType + return { + "auth_strategy": (ObservabilityPipelineHttpClientSourceAuthStrategy,), + "custom_key": (str,), + "decoding": (ObservabilityPipelineDecoding,), + "endpoint_url_key": (str,), + "id": (str,), + "password_key": (str,), + "scrape_interval_secs": (int,), + "scrape_timeout_secs": (int,), + "tls": (ObservabilityPipelineClientTls,), + "token_key": (str,), + "type": (ObservabilityPipelineHttpClientSourceType,), + "username_key": (str,), + } + attribute_map = { + "auth_strategy": "auth_strategy", + "custom_key": "custom_key", + "decoding": "decoding", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "password_key": "password_key", + "scrape_interval_secs": "scrape_interval_secs", + "scrape_timeout_secs": "scrape_timeout_secs", + "tls": "tls", + "token_key": "token_key", + "type": "type", + "username_key": "username_key", + } + + def __init__(self_, decoding: ObservabilityPipelineDecoding, id: str, type: ObservabilityPipelineHttpClientSourceType, auth_strategy: Union[ObservabilityPipelineHttpClientSourceAuthStrategy, UnsetType]=unset, custom_key: Union[str, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, password_key: Union[str, UnsetType]=unset, scrape_interval_secs: Union[int, UnsetType]=unset, scrape_timeout_secs: Union[int, UnsetType]=unset, tls: Union[ObservabilityPipelineClientTls, UnsetType]=unset, token_key: Union[str, UnsetType]=unset, username_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``http_client`` source scrapes logs from HTTP endpoints at regular intervals. + + **Supported pipeline types:** logs + + :param auth_strategy: Optional authentication strategy for HTTP requests. + :type auth_strategy: ObservabilityPipelineHttpClientSourceAuthStrategy, optional + + :param custom_key: Name of the environment variable or secret that holds a custom header value (used with custom auth strategies). + :type custom_key: str, optional + + :param decoding: The decoding format used to interpret incoming logs. + :type decoding: ObservabilityPipelineDecoding + + :param endpoint_url_key: Name of the environment variable or secret that holds the HTTP endpoint URL to scrape. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param password_key: Name of the environment variable or secret that holds the password (used when ``auth_strategy`` is ``basic`` ). + :type password_key: str, optional + + :param scrape_interval_secs: The interval (in seconds) between HTTP scrape requests. + :type scrape_interval_secs: int, optional + + :param scrape_timeout_secs: The timeout (in seconds) for each scrape request. + :type scrape_timeout_secs: int, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineClientTls, optional + + :param token_key: Name of the environment variable or secret that holds the bearer token (used when ``auth_strategy`` is ``bearer`` ). + :type token_key: str, optional + + :param type: The source type. The value should always be ``http_client``. + :type type: ObservabilityPipelineHttpClientSourceType + + :param username_key: Name of the environment variable or secret that holds the username (used when ``auth_strategy`` is ``basic`` ). + :type username_key: str, optional + """ + if auth_strategy is not unset: + kwargs["auth_strategy"] = auth_strategy + if custom_key is not unset: + kwargs["custom_key"] = custom_key + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if password_key is not unset: + kwargs["password_key"] = password_key + if scrape_interval_secs is not unset: + kwargs["scrape_interval_secs"] = scrape_interval_secs + if scrape_timeout_secs is not unset: + kwargs["scrape_timeout_secs"] = scrape_timeout_secs + if tls is not unset: + kwargs["tls"] = tls + if token_key is not unset: + kwargs["token_key"] = token_key + if username_key is not unset: + kwargs["username_key"] = username_key + super().__init__(kwargs) + + + self_.decoding = decoding + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_http_client_source_auth_strategy.py b/datadog_api_client/v2/model/observability_pipeline_http_client_source_auth_strategy.py new file mode 100644 index 0000000000..ac0c7beb69 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_client_source_auth_strategy.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineHttpClientSourceAuthStrategy(ModelSimple): + """ + Optional authentication strategy for HTTP requests. + + :param value: Must be one of ["none", "basic", "bearer", "custom"]. + :type value: str + """ + + allowed_values = { + "none", + "basic", + "bearer", + "custom", + } + NONE: ClassVar["ObservabilityPipelineHttpClientSourceAuthStrategy"] + BASIC: ClassVar["ObservabilityPipelineHttpClientSourceAuthStrategy"] + BEARER: ClassVar["ObservabilityPipelineHttpClientSourceAuthStrategy"] + CUSTOM: ClassVar["ObservabilityPipelineHttpClientSourceAuthStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineHttpClientSourceAuthStrategy.NONE = ObservabilityPipelineHttpClientSourceAuthStrategy("none") +ObservabilityPipelineHttpClientSourceAuthStrategy.BASIC = ObservabilityPipelineHttpClientSourceAuthStrategy("basic") +ObservabilityPipelineHttpClientSourceAuthStrategy.BEARER = ObservabilityPipelineHttpClientSourceAuthStrategy("bearer") +ObservabilityPipelineHttpClientSourceAuthStrategy.CUSTOM = ObservabilityPipelineHttpClientSourceAuthStrategy("custom") diff --git a/datadog_api_client/v2/model/observability_pipeline_http_client_source_type.py b/datadog_api_client/v2/model/observability_pipeline_http_client_source_type.py new file mode 100644 index 0000000000..72dfe934b6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_client_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineHttpClientSourceType(ModelSimple): + """ + The source type. The value should always be `http_client`. + + :param value: If omitted defaults to "http_client". Must be one of ["http_client"]. + :type value: str + """ + + allowed_values = { + "http_client", + } + HTTP_CLIENT: ClassVar["ObservabilityPipelineHttpClientSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineHttpClientSourceType.HTTP_CLIENT = ObservabilityPipelineHttpClientSourceType("http_client") diff --git a/datadog_api_client/v2/model/observability_pipeline_http_server_source.py b/datadog_api_client/v2/model/observability_pipeline_http_server_source.py new file mode 100644 index 0000000000..338bd7b89e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_server_source.py @@ -0,0 +1,127 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_http_server_source_auth_strategy import ObservabilityPipelineHttpServerSourceAuthStrategy + from datadog_api_client.v2.model.observability_pipeline_decoding import ObservabilityPipelineDecoding + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_http_server_source_type import ObservabilityPipelineHttpServerSourceType + from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token import ObservabilityPipelineHttpServerSourceValidToken + from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token_path_to_token_header import ObservabilityPipelineHttpServerSourceValidTokenPathToTokenHeader + +class ObservabilityPipelineHttpServerSource(ModelNormal): + validations = { + "valid_tokens": { + "max_items": 1000, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_http_server_source_auth_strategy import ObservabilityPipelineHttpServerSourceAuthStrategy + from datadog_api_client.v2.model.observability_pipeline_decoding import ObservabilityPipelineDecoding + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_http_server_source_type import ObservabilityPipelineHttpServerSourceType + from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token import ObservabilityPipelineHttpServerSourceValidToken + return { + "address_key": (str,), + "auth_strategy": (ObservabilityPipelineHttpServerSourceAuthStrategy,), + "custom_key": (str,), + "decoding": (ObservabilityPipelineDecoding,), + "id": (str,), + "password_key": (str,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineHttpServerSourceType,), + "username_key": (str,), + "valid_tokens": ([ObservabilityPipelineHttpServerSourceValidToken],), + } + attribute_map = { + "address_key": "address_key", + "auth_strategy": "auth_strategy", + "custom_key": "custom_key", + "decoding": "decoding", + "id": "id", + "password_key": "password_key", + "tls": "tls", + "type": "type", + "username_key": "username_key", + "valid_tokens": "valid_tokens", + } + + def __init__(self_, auth_strategy: ObservabilityPipelineHttpServerSourceAuthStrategy, decoding: ObservabilityPipelineDecoding, id: str, type: ObservabilityPipelineHttpServerSourceType, address_key: Union[str, UnsetType]=unset, custom_key: Union[str, UnsetType]=unset, password_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, username_key: Union[str, UnsetType]=unset, valid_tokens: Union[List[ObservabilityPipelineHttpServerSourceValidToken], UnsetType]=unset, **kwargs): + """ + The ``http_server`` source collects logs over HTTP POST from external services. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the HTTP server. + :type address_key: str, optional + + :param auth_strategy: HTTP authentication method. + :type auth_strategy: ObservabilityPipelineHttpServerSourceAuthStrategy + + :param custom_key: Name of the environment variable or secret that holds a custom header value (used with custom auth strategies). + :type custom_key: str, optional + + :param decoding: The decoding format used to interpret incoming logs. + :type decoding: ObservabilityPipelineDecoding + + :param id: Unique ID for the HTTP server source. + :type id: str + + :param password_key: Name of the environment variable or secret that holds the password (used when ``auth_strategy`` is ``plain`` ). + :type password_key: str, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. The value should always be ``http_server``. + :type type: ObservabilityPipelineHttpServerSourceType + + :param username_key: Name of the environment variable or secret that holds the username (used when ``auth_strategy`` is ``plain`` ). + :type username_key: str, optional + + :param valid_tokens: A list of tokens that are accepted for authenticating incoming HTTP requests. When set, + the source rejects any request whose token does not match an enabled entry in this list. + Cannot be combined with the ``plain`` auth strategy. + :type valid_tokens: [ObservabilityPipelineHttpServerSourceValidToken], optional + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if custom_key is not unset: + kwargs["custom_key"] = custom_key + if password_key is not unset: + kwargs["password_key"] = password_key + if tls is not unset: + kwargs["tls"] = tls + if username_key is not unset: + kwargs["username_key"] = username_key + if valid_tokens is not unset: + kwargs["valid_tokens"] = valid_tokens + super().__init__(kwargs) + + + self_.auth_strategy = auth_strategy + self_.decoding = decoding + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_http_server_source_auth_strategy.py b/datadog_api_client/v2/model/observability_pipeline_http_server_source_auth_strategy.py new file mode 100644 index 0000000000..d036a67f56 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_server_source_auth_strategy.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineHttpServerSourceAuthStrategy(ModelSimple): + """ + HTTP authentication method. + + :param value: Must be one of ["none", "plain"]. + :type value: str + """ + + allowed_values = { + "none", + "plain", + } + NONE: ClassVar["ObservabilityPipelineHttpServerSourceAuthStrategy"] + PLAIN: ClassVar["ObservabilityPipelineHttpServerSourceAuthStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineHttpServerSourceAuthStrategy.NONE = ObservabilityPipelineHttpServerSourceAuthStrategy("none") +ObservabilityPipelineHttpServerSourceAuthStrategy.PLAIN = ObservabilityPipelineHttpServerSourceAuthStrategy("plain") diff --git a/datadog_api_client/v2/model/observability_pipeline_http_server_source_type.py b/datadog_api_client/v2/model/observability_pipeline_http_server_source_type.py new file mode 100644 index 0000000000..d6726bfb83 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_server_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineHttpServerSourceType(ModelSimple): + """ + The source type. The value should always be `http_server`. + + :param value: If omitted defaults to "http_server". Must be one of ["http_server"]. + :type value: str + """ + + allowed_values = { + "http_server", + } + HTTP_SERVER: ClassVar["ObservabilityPipelineHttpServerSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineHttpServerSourceType.HTTP_SERVER = ObservabilityPipelineHttpServerSourceType("http_server") diff --git a/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token.py b/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token.py new file mode 100644 index 0000000000..8ef81310bd --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_source_valid_token_field_to_add import ObservabilityPipelineSourceValidTokenFieldToAdd + from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token_path_to_token import ObservabilityPipelineHttpServerSourceValidTokenPathToToken + from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token_path_to_token_header import ObservabilityPipelineHttpServerSourceValidTokenPathToTokenHeader + +class ObservabilityPipelineHttpServerSourceValidToken(ModelNormal): + validations = { + "token_key": { + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_source_valid_token_field_to_add import ObservabilityPipelineSourceValidTokenFieldToAdd + from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token_path_to_token import ObservabilityPipelineHttpServerSourceValidTokenPathToToken + return { + "enabled": (bool,), + "field_to_add": (ObservabilityPipelineSourceValidTokenFieldToAdd,), + "path_to_token": (ObservabilityPipelineHttpServerSourceValidTokenPathToToken,), + "token_key": (str,), + } + attribute_map = { + "enabled": "enabled", + "field_to_add": "field_to_add", + "path_to_token": "path_to_token", + "token_key": "token_key", + } + + def __init__(self_, token_key: str, enabled: Union[bool, UnsetType]=unset, field_to_add: Union[ObservabilityPipelineSourceValidTokenFieldToAdd, UnsetType]=unset, path_to_token: Union[ObservabilityPipelineHttpServerSourceValidTokenPathToToken, str, ObservabilityPipelineHttpServerSourceValidTokenPathToTokenHeader, UnsetType]=unset, **kwargs): + """ + An accepted token used to authenticate incoming HTTP server requests. + + :param enabled: Indicates whether this token is currently accepted. Disabled tokens are rejected without + being removed from the configuration. + :type enabled: bool, optional + + :param field_to_add: An optional metadata field that is attached to every event authenticated by the + associated token. Both ``key`` and ``value`` must match ``^[A-Za-z0-9_]+$``. + :type field_to_add: ObservabilityPipelineSourceValidTokenFieldToAdd, optional + + :param path_to_token: Specifies where the worker extracts the token from in the incoming HTTP request. + This can be either a built-in location ( ``path`` or ``address`` ) or an HTTP header object. + :type path_to_token: ObservabilityPipelineHttpServerSourceValidTokenPathToToken, optional + + :param token_key: Name of the environment variable or secret that holds the expected token value. + :type token_key: str + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if field_to_add is not unset: + kwargs["field_to_add"] = field_to_add + if path_to_token is not unset: + kwargs["path_to_token"] = path_to_token + super().__init__(kwargs) + + + self_.token_key = token_key diff --git a/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token_path_to_token.py b/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token_path_to_token.py new file mode 100644 index 0000000000..907dbcb3fa --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token_path_to_token.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineHttpServerSourceValidTokenPathToToken(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Specifies where the worker extracts the token from in the incoming HTTP request. + This can be either a built-in location ( ``path`` or ``address`` ) or an HTTP header object. + + :param header: The name of the HTTP header that carries the token. + :type header: str + """ + 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.observability_pipeline_http_server_source_valid_token_path_to_token_header import ObservabilityPipelineHttpServerSourceValidTokenPathToTokenHeader + return { + "oneOf": [ + str, + ObservabilityPipelineHttpServerSourceValidTokenPathToTokenHeader, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token_path_to_token_header.py b/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token_path_to_token_header.py new file mode 100644 index 0000000000..b5e4123dd7 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token_path_to_token_header.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineHttpServerSourceValidTokenPathToTokenHeader(ModelNormal): + @cached_property + def openapi_types(_): + return { + "header": (str,), + } + attribute_map = { + "header": "header", + } + + def __init__(self_, header: str, **kwargs): + """ + Extract the token from a specific HTTP request header. + + :param header: The name of the HTTP header that carries the token. + :type header: str + """ + super().__init__(kwargs) + + + self_.header = header diff --git a/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token_path_to_token_location.py b/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token_path_to_token_location.py new file mode 100644 index 0000000000..f98dbdbf98 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_http_server_source_valid_token_path_to_token_location.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineHttpServerSourceValidTokenPathToTokenLocation(ModelSimple): + """ + Built-in token location on the incoming HTTP request. + + :param value: Must be one of ["path", "address"]. + :type value: str + """ + + allowed_values = { + "path", + "address", + } + PATH: ClassVar["ObservabilityPipelineHttpServerSourceValidTokenPathToTokenLocation"] + ADDRESS: ClassVar["ObservabilityPipelineHttpServerSourceValidTokenPathToTokenLocation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineHttpServerSourceValidTokenPathToTokenLocation.PATH = ObservabilityPipelineHttpServerSourceValidTokenPathToTokenLocation("path") +ObservabilityPipelineHttpServerSourceValidTokenPathToTokenLocation.ADDRESS = ObservabilityPipelineHttpServerSourceValidTokenPathToTokenLocation("address") diff --git a/datadog_api_client/v2/model/observability_pipeline_kafka_destination.py b/datadog_api_client/v2/model/observability_pipeline_kafka_destination.py new file mode 100644 index 0000000000..df019fedd3 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_kafka_destination.py @@ -0,0 +1,188 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_kafka_destination_compression import ObservabilityPipelineKafkaDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_kafka_destination_encoding import ObservabilityPipelineKafkaDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_kafka_librdkafka_option import ObservabilityPipelineKafkaLibrdkafkaOption + from datadog_api_client.v2.model.observability_pipeline_kafka_sasl import ObservabilityPipelineKafkaSasl + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_kafka_destination_type import ObservabilityPipelineKafkaDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineKafkaDestination(ModelNormal): + validations = { + "message_timeout_ms": { + "inclusive_minimum": 1, + }, + "rate_limit_duration_secs": { + "inclusive_minimum": 1, + }, + "rate_limit_num": { + "inclusive_minimum": 1, + }, + "socket_timeout_ms": { + "inclusive_maximum": 300000, + "inclusive_minimum": 10, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_kafka_destination_compression import ObservabilityPipelineKafkaDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_kafka_destination_encoding import ObservabilityPipelineKafkaDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_kafka_librdkafka_option import ObservabilityPipelineKafkaLibrdkafkaOption + from datadog_api_client.v2.model.observability_pipeline_kafka_sasl import ObservabilityPipelineKafkaSasl + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_kafka_destination_type import ObservabilityPipelineKafkaDestinationType + return { + "bootstrap_servers_key": (str,), + "buffer": (ObservabilityPipelineBufferOptions,), + "compression": (ObservabilityPipelineKafkaDestinationCompression,), + "encoding": (ObservabilityPipelineKafkaDestinationEncoding,), + "headers_key": (str,), + "id": (str,), + "inputs": ([str],), + "key_field": (str,), + "librdkafka_options": ([ObservabilityPipelineKafkaLibrdkafkaOption],), + "message_timeout_ms": (int,), + "rate_limit_duration_secs": (int,), + "rate_limit_num": (int,), + "sasl": (ObservabilityPipelineKafkaSasl,), + "socket_timeout_ms": (int,), + "tls": (ObservabilityPipelineTls,), + "topic": (str,), + "type": (ObservabilityPipelineKafkaDestinationType,), + } + attribute_map = { + "bootstrap_servers_key": "bootstrap_servers_key", + "buffer": "buffer", + "compression": "compression", + "encoding": "encoding", + "headers_key": "headers_key", + "id": "id", + "inputs": "inputs", + "key_field": "key_field", + "librdkafka_options": "librdkafka_options", + "message_timeout_ms": "message_timeout_ms", + "rate_limit_duration_secs": "rate_limit_duration_secs", + "rate_limit_num": "rate_limit_num", + "sasl": "sasl", + "socket_timeout_ms": "socket_timeout_ms", + "tls": "tls", + "topic": "topic", + "type": "type", + } + + def __init__(self_, encoding: ObservabilityPipelineKafkaDestinationEncoding, id: str, inputs: List[str], topic: str, type: ObservabilityPipelineKafkaDestinationType, bootstrap_servers_key: Union[str, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, compression: Union[ObservabilityPipelineKafkaDestinationCompression, UnsetType]=unset, headers_key: Union[str, UnsetType]=unset, key_field: Union[str, UnsetType]=unset, librdkafka_options: Union[List[ObservabilityPipelineKafkaLibrdkafkaOption], UnsetType]=unset, message_timeout_ms: Union[int, UnsetType]=unset, rate_limit_duration_secs: Union[int, UnsetType]=unset, rate_limit_num: Union[int, UnsetType]=unset, sasl: Union[ObservabilityPipelineKafkaSasl, UnsetType]=unset, socket_timeout_ms: Union[int, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``kafka`` destination sends logs to Apache Kafka topics. + + **Supported pipeline types:** logs + + :param bootstrap_servers_key: Name of the environment variable or secret that holds the Kafka bootstrap servers list. + :type bootstrap_servers_key: str, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param compression: Compression codec for Kafka messages. + :type compression: ObservabilityPipelineKafkaDestinationCompression, optional + + :param encoding: Encoding format for log events. + :type encoding: ObservabilityPipelineKafkaDestinationEncoding + + :param headers_key: The field name to use for Kafka message headers. + :type headers_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param key_field: The field name to use as the Kafka message key. + :type key_field: str, optional + + :param librdkafka_options: Optional list of advanced Kafka producer configuration options, defined as key-value pairs. + :type librdkafka_options: [ObservabilityPipelineKafkaLibrdkafkaOption], optional + + :param message_timeout_ms: Maximum time in milliseconds to wait for message delivery confirmation. + :type message_timeout_ms: int, optional + + :param rate_limit_duration_secs: Duration in seconds for the rate limit window. + :type rate_limit_duration_secs: int, optional + + :param rate_limit_num: Maximum number of messages allowed per rate limit duration. + :type rate_limit_num: int, optional + + :param sasl: Specifies the SASL mechanism for authenticating with a Kafka cluster. + :type sasl: ObservabilityPipelineKafkaSasl, optional + + :param socket_timeout_ms: Socket timeout in milliseconds for network requests. + :type socket_timeout_ms: int, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param topic: The Kafka topic name to publish logs to. + :type topic: str + + :param type: The destination type. The value should always be ``kafka``. + :type type: ObservabilityPipelineKafkaDestinationType + """ + if bootstrap_servers_key is not unset: + kwargs["bootstrap_servers_key"] = bootstrap_servers_key + if buffer is not unset: + kwargs["buffer"] = buffer + if compression is not unset: + kwargs["compression"] = compression + if headers_key is not unset: + kwargs["headers_key"] = headers_key + if key_field is not unset: + kwargs["key_field"] = key_field + if librdkafka_options is not unset: + kwargs["librdkafka_options"] = librdkafka_options + if message_timeout_ms is not unset: + kwargs["message_timeout_ms"] = message_timeout_ms + if rate_limit_duration_secs is not unset: + kwargs["rate_limit_duration_secs"] = rate_limit_duration_secs + if rate_limit_num is not unset: + kwargs["rate_limit_num"] = rate_limit_num + if sasl is not unset: + kwargs["sasl"] = sasl + if socket_timeout_ms is not unset: + kwargs["socket_timeout_ms"] = socket_timeout_ms + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.encoding = encoding + self_.id = id + self_.inputs = inputs + self_.topic = topic + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_kafka_destination_compression.py b/datadog_api_client/v2/model/observability_pipeline_kafka_destination_compression.py new file mode 100644 index 0000000000..6640f8886b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_kafka_destination_compression.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineKafkaDestinationCompression(ModelSimple): + """ + Compression codec for Kafka messages. + + :param value: Must be one of ["none", "gzip", "snappy", "lz4", "zstd"]. + :type value: str + """ + + allowed_values = { + "none", + "gzip", + "snappy", + "lz4", + "zstd", + } + NONE: ClassVar["ObservabilityPipelineKafkaDestinationCompression"] + GZIP: ClassVar["ObservabilityPipelineKafkaDestinationCompression"] + SNAPPY: ClassVar["ObservabilityPipelineKafkaDestinationCompression"] + LZ4: ClassVar["ObservabilityPipelineKafkaDestinationCompression"] + ZSTD: ClassVar["ObservabilityPipelineKafkaDestinationCompression"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineKafkaDestinationCompression.NONE = ObservabilityPipelineKafkaDestinationCompression("none") +ObservabilityPipelineKafkaDestinationCompression.GZIP = ObservabilityPipelineKafkaDestinationCompression("gzip") +ObservabilityPipelineKafkaDestinationCompression.SNAPPY = ObservabilityPipelineKafkaDestinationCompression("snappy") +ObservabilityPipelineKafkaDestinationCompression.LZ4 = ObservabilityPipelineKafkaDestinationCompression("lz4") +ObservabilityPipelineKafkaDestinationCompression.ZSTD = ObservabilityPipelineKafkaDestinationCompression("zstd") diff --git a/datadog_api_client/v2/model/observability_pipeline_kafka_destination_encoding.py b/datadog_api_client/v2/model/observability_pipeline_kafka_destination_encoding.py new file mode 100644 index 0000000000..b110544662 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_kafka_destination_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineKafkaDestinationEncoding(ModelSimple): + """ + Encoding format for log events. + + :param value: Must be one of ["json", "raw_message"]. + :type value: str + """ + + allowed_values = { + "json", + "raw_message", + } + JSON: ClassVar["ObservabilityPipelineKafkaDestinationEncoding"] + RAW_MESSAGE: ClassVar["ObservabilityPipelineKafkaDestinationEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineKafkaDestinationEncoding.JSON = ObservabilityPipelineKafkaDestinationEncoding("json") +ObservabilityPipelineKafkaDestinationEncoding.RAW_MESSAGE = ObservabilityPipelineKafkaDestinationEncoding("raw_message") diff --git a/datadog_api_client/v2/model/observability_pipeline_kafka_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_kafka_destination_type.py new file mode 100644 index 0000000000..7aa7610d15 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_kafka_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineKafkaDestinationType(ModelSimple): + """ + The destination type. The value should always be `kafka`. + + :param value: If omitted defaults to "kafka". Must be one of ["kafka"]. + :type value: str + """ + + allowed_values = { + "kafka", + } + KAFKA: ClassVar["ObservabilityPipelineKafkaDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineKafkaDestinationType.KAFKA = ObservabilityPipelineKafkaDestinationType("kafka") diff --git a/datadog_api_client/v2/model/observability_pipeline_kafka_librdkafka_option.py b/datadog_api_client/v2/model/observability_pipeline_kafka_librdkafka_option.py new file mode 100644 index 0000000000..967f1e8527 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_kafka_librdkafka_option.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineKafkaLibrdkafkaOption(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, value: str, **kwargs): + """ + Represents a key-value pair used to configure low-level ``librdkafka`` client options for Kafka source and destination, such as timeouts, buffer sizes, and security settings. + + :param name: The name of the ``librdkafka`` configuration option to set. + :type name: str + + :param value: The value assigned to the specified ``librdkafka`` configuration option. + :type value: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/observability_pipeline_kafka_sasl.py b/datadog_api_client/v2/model/observability_pipeline_kafka_sasl.py new file mode 100644 index 0000000000..a07cf718a3 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_kafka_sasl.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_kafka_sasl_mechanism import ObservabilityPipelineKafkaSaslMechanism + +class ObservabilityPipelineKafkaSasl(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_kafka_sasl_mechanism import ObservabilityPipelineKafkaSaslMechanism + return { + "mechanism": (ObservabilityPipelineKafkaSaslMechanism,), + "password_key": (str,), + "username_key": (str,), + } + attribute_map = { + "mechanism": "mechanism", + "password_key": "password_key", + "username_key": "username_key", + } + + def __init__(self_, mechanism: Union[ObservabilityPipelineKafkaSaslMechanism, UnsetType]=unset, password_key: Union[str, UnsetType]=unset, username_key: Union[str, UnsetType]=unset, **kwargs): + """ + Specifies the SASL mechanism for authenticating with a Kafka cluster. + + :param mechanism: SASL mechanism used for Kafka authentication. + :type mechanism: ObservabilityPipelineKafkaSaslMechanism, optional + + :param password_key: Name of the environment variable or secret that holds the SASL password. + :type password_key: str, optional + + :param username_key: Name of the environment variable or secret that holds the SASL username. + :type username_key: str, optional + """ + if mechanism is not unset: + kwargs["mechanism"] = mechanism + if password_key is not unset: + kwargs["password_key"] = password_key + if username_key is not unset: + kwargs["username_key"] = username_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/observability_pipeline_kafka_sasl_mechanism.py b/datadog_api_client/v2/model/observability_pipeline_kafka_sasl_mechanism.py new file mode 100644 index 0000000000..5c8d64000a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_kafka_sasl_mechanism.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineKafkaSaslMechanism(ModelSimple): + """ + SASL mechanism used for Kafka authentication. + + :param value: Must be one of ["PLAIN", "SCRAM-SHA-256", "SCRAM-SHA-512"]. + :type value: str + """ + + allowed_values = { + "PLAIN", + "SCRAM-SHA-256", + "SCRAM-SHA-512", + } + PLAIN: ClassVar["ObservabilityPipelineKafkaSaslMechanism"] + SCRAMNOT_SHANOT_256: ClassVar["ObservabilityPipelineKafkaSaslMechanism"] + SCRAMNOT_SHANOT_512: ClassVar["ObservabilityPipelineKafkaSaslMechanism"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineKafkaSaslMechanism.PLAIN = ObservabilityPipelineKafkaSaslMechanism("PLAIN") +ObservabilityPipelineKafkaSaslMechanism.SCRAMNOT_SHANOT_256 = ObservabilityPipelineKafkaSaslMechanism("SCRAM-SHA-256") +ObservabilityPipelineKafkaSaslMechanism.SCRAMNOT_SHANOT_512 = ObservabilityPipelineKafkaSaslMechanism("SCRAM-SHA-512") diff --git a/datadog_api_client/v2/model/observability_pipeline_kafka_source.py b/datadog_api_client/v2/model/observability_pipeline_kafka_source.py new file mode 100644 index 0000000000..31eb52048c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_kafka_source.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_kafka_librdkafka_option import ObservabilityPipelineKafkaLibrdkafkaOption + from datadog_api_client.v2.model.observability_pipeline_kafka_sasl import ObservabilityPipelineKafkaSasl + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_kafka_source_type import ObservabilityPipelineKafkaSourceType + +class ObservabilityPipelineKafkaSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_kafka_librdkafka_option import ObservabilityPipelineKafkaLibrdkafkaOption + from datadog_api_client.v2.model.observability_pipeline_kafka_sasl import ObservabilityPipelineKafkaSasl + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_kafka_source_type import ObservabilityPipelineKafkaSourceType + return { + "bootstrap_servers_key": (str,), + "group_id": (str,), + "id": (str,), + "librdkafka_options": ([ObservabilityPipelineKafkaLibrdkafkaOption],), + "sasl": (ObservabilityPipelineKafkaSasl,), + "tls": (ObservabilityPipelineTls,), + "topics": ([str],), + "type": (ObservabilityPipelineKafkaSourceType,), + } + attribute_map = { + "bootstrap_servers_key": "bootstrap_servers_key", + "group_id": "group_id", + "id": "id", + "librdkafka_options": "librdkafka_options", + "sasl": "sasl", + "tls": "tls", + "topics": "topics", + "type": "type", + } + + def __init__(self_, group_id: str, id: str, topics: List[str], type: ObservabilityPipelineKafkaSourceType, bootstrap_servers_key: Union[str, UnsetType]=unset, librdkafka_options: Union[List[ObservabilityPipelineKafkaLibrdkafkaOption], UnsetType]=unset, sasl: Union[ObservabilityPipelineKafkaSasl, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``kafka`` source ingests data from Apache Kafka topics. + + **Supported pipeline types:** logs + + :param bootstrap_servers_key: Name of the environment variable or secret that holds the Kafka bootstrap servers list. + :type bootstrap_servers_key: str, optional + + :param group_id: Consumer group ID used by the Kafka client. + :type group_id: str + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param librdkafka_options: Optional list of advanced Kafka client configuration options, defined as key-value pairs. + :type librdkafka_options: [ObservabilityPipelineKafkaLibrdkafkaOption], optional + + :param sasl: Specifies the SASL mechanism for authenticating with a Kafka cluster. + :type sasl: ObservabilityPipelineKafkaSasl, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param topics: A list of Kafka topic names to subscribe to. The source ingests messages from each topic specified. + :type topics: [str] + + :param type: The source type. The value should always be ``kafka``. + :type type: ObservabilityPipelineKafkaSourceType + """ + if bootstrap_servers_key is not unset: + kwargs["bootstrap_servers_key"] = bootstrap_servers_key + if librdkafka_options is not unset: + kwargs["librdkafka_options"] = librdkafka_options + if sasl is not unset: + kwargs["sasl"] = sasl + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.group_id = group_id + self_.id = id + self_.topics = topics + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_kafka_source_type.py b/datadog_api_client/v2/model/observability_pipeline_kafka_source_type.py new file mode 100644 index 0000000000..9d5680e3af --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_kafka_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineKafkaSourceType(ModelSimple): + """ + The source type. The value should always be `kafka`. + + :param value: If omitted defaults to "kafka". Must be one of ["kafka"]. + :type value: str + """ + + allowed_values = { + "kafka", + } + KAFKA: ClassVar["ObservabilityPipelineKafkaSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineKafkaSourceType.KAFKA = ObservabilityPipelineKafkaSourceType("kafka") diff --git a/datadog_api_client/v2/model/observability_pipeline_logstash_source.py b/datadog_api_client/v2/model/observability_pipeline_logstash_source.py new file mode 100644 index 0000000000..f6b4be4ab7 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_logstash_source.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_logstash_source_type import ObservabilityPipelineLogstashSourceType + +class ObservabilityPipelineLogstashSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_logstash_source_type import ObservabilityPipelineLogstashSourceType + return { + "address_key": (str,), + "id": (str,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineLogstashSourceType,), + } + attribute_map = { + "address_key": "address_key", + "id": "id", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, type: ObservabilityPipelineLogstashSourceType, address_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, **kwargs): + """ + The ``logstash`` source ingests logs from a Logstash forwarder. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the Logstash receiver. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. The value should always be ``logstash``. + :type type: ObservabilityPipelineLogstashSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_logstash_source_type.py b/datadog_api_client/v2/model/observability_pipeline_logstash_source_type.py new file mode 100644 index 0000000000..da0952f297 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_logstash_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineLogstashSourceType(ModelSimple): + """ + The source type. The value should always be `logstash`. + + :param value: If omitted defaults to "logstash". Must be one of ["logstash"]. + :type value: str + """ + + allowed_values = { + "logstash", + } + LOGSTASH: ClassVar["ObservabilityPipelineLogstashSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineLogstashSourceType.LOGSTASH = ObservabilityPipelineLogstashSourceType("logstash") diff --git a/datadog_api_client/v2/model/observability_pipeline_memory_buffer_options.py b/datadog_api_client/v2/model/observability_pipeline_memory_buffer_options.py new file mode 100644 index 0000000000..d0f56e688f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_memory_buffer_options.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options_memory_type import ObservabilityPipelineBufferOptionsMemoryType + from datadog_api_client.v2.model.observability_pipeline_buffer_options_when_full import ObservabilityPipelineBufferOptionsWhenFull + +class ObservabilityPipelineMemoryBufferOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options_memory_type import ObservabilityPipelineBufferOptionsMemoryType + from datadog_api_client.v2.model.observability_pipeline_buffer_options_when_full import ObservabilityPipelineBufferOptionsWhenFull + return { + "max_size": (int,), + "type": (ObservabilityPipelineBufferOptionsMemoryType,), + "when_full": (ObservabilityPipelineBufferOptionsWhenFull,), + } + attribute_map = { + "max_size": "max_size", + "type": "type", + "when_full": "when_full", + } + + def __init__(self_, max_size: int, type: Union[ObservabilityPipelineBufferOptionsMemoryType, UnsetType]=unset, when_full: Union[ObservabilityPipelineBufferOptionsWhenFull, UnsetType]=unset, **kwargs): + """ + Options for configuring a memory buffer by byte size. + + :param max_size: Maximum size of the memory buffer. + :type max_size: int + + :param type: The type of the buffer that will be configured, a memory buffer. + :type type: ObservabilityPipelineBufferOptionsMemoryType, optional + + :param when_full: Behavior when the buffer is full (block and stop accepting new events, or drop new events) + :type when_full: ObservabilityPipelineBufferOptionsWhenFull, optional + """ + if type is not unset: + kwargs["type"] = type + if when_full is not unset: + kwargs["when_full"] = when_full + super().__init__(kwargs) + + + self_.max_size = max_size diff --git a/datadog_api_client/v2/model/observability_pipeline_memory_buffer_size_options.py b/datadog_api_client/v2/model/observability_pipeline_memory_buffer_size_options.py new file mode 100644 index 0000000000..c7eb31d2db --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_memory_buffer_size_options.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options_memory_type import ObservabilityPipelineBufferOptionsMemoryType + from datadog_api_client.v2.model.observability_pipeline_buffer_options_when_full import ObservabilityPipelineBufferOptionsWhenFull + +class ObservabilityPipelineMemoryBufferSizeOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options_memory_type import ObservabilityPipelineBufferOptionsMemoryType + from datadog_api_client.v2.model.observability_pipeline_buffer_options_when_full import ObservabilityPipelineBufferOptionsWhenFull + return { + "max_events": (int,), + "type": (ObservabilityPipelineBufferOptionsMemoryType,), + "when_full": (ObservabilityPipelineBufferOptionsWhenFull,), + } + attribute_map = { + "max_events": "max_events", + "type": "type", + "when_full": "when_full", + } + + def __init__(self_, max_events: int, type: Union[ObservabilityPipelineBufferOptionsMemoryType, UnsetType]=unset, when_full: Union[ObservabilityPipelineBufferOptionsWhenFull, UnsetType]=unset, **kwargs): + """ + Options for configuring a memory buffer by queue length. + + :param max_events: Maximum events for the memory buffer. + :type max_events: int + + :param type: The type of the buffer that will be configured, a memory buffer. + :type type: ObservabilityPipelineBufferOptionsMemoryType, optional + + :param when_full: Behavior when the buffer is full (block and stop accepting new events, or drop new events) + :type when_full: ObservabilityPipelineBufferOptionsWhenFull, optional + """ + if type is not unset: + kwargs["type"] = type + if when_full is not unset: + kwargs["when_full"] = when_full + super().__init__(kwargs) + + + self_.max_events = max_events diff --git a/datadog_api_client/v2/model/observability_pipeline_metadata_entry.py b/datadog_api_client/v2/model/observability_pipeline_metadata_entry.py new file mode 100644 index 0000000000..c784ace120 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_metadata_entry.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineMetadataEntry(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, value: str, **kwargs): + """ + A custom metadata entry. + + :param name: The metadata key. + :type name: str + + :param value: The metadata value. + :type value: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor.py b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor.py new file mode 100644 index 0000000000..c1c47c534e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_rule import ObservabilityPipelineMetricTagsProcessorRule + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_type import ObservabilityPipelineMetricTagsProcessorType + +class ObservabilityPipelineMetricTagsProcessor(ModelNormal): + validations = { + "rules": { + "max_items": 100, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_rule import ObservabilityPipelineMetricTagsProcessorRule + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_type import ObservabilityPipelineMetricTagsProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "rules": ([ObservabilityPipelineMetricTagsProcessorRule],), + "type": (ObservabilityPipelineMetricTagsProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "rules": "rules", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, rules: List[ObservabilityPipelineMetricTagsProcessorRule], type: ObservabilityPipelineMetricTagsProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``metric_tags`` processor filters metrics based on their tags using Datadog tag key patterns. + + **Supported pipeline types:** metrics + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query that determines which metrics the processor targets. + :type include: str + + :param rules: A list of rules for filtering metric tags. + :type rules: [ObservabilityPipelineMetricTagsProcessorRule] + + :param type: The processor type. The value should always be ``metric_tags``. + :type type: ObservabilityPipelineMetricTagsProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.rules = rules + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_rule.py b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_rule.py new file mode 100644 index 0000000000..23ad65e807 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_rule.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_rule_action import ObservabilityPipelineMetricTagsProcessorRuleAction + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_rule_mode import ObservabilityPipelineMetricTagsProcessorRuleMode + +class ObservabilityPipelineMetricTagsProcessorRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_rule_action import ObservabilityPipelineMetricTagsProcessorRuleAction + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_rule_mode import ObservabilityPipelineMetricTagsProcessorRuleMode + return { + "action": (ObservabilityPipelineMetricTagsProcessorRuleAction,), + "include": (str,), + "keys": ([str],), + "mode": (ObservabilityPipelineMetricTagsProcessorRuleMode,), + } + attribute_map = { + "action": "action", + "include": "include", + "keys": "keys", + "mode": "mode", + } + + def __init__(self_, action: ObservabilityPipelineMetricTagsProcessorRuleAction, include: str, keys: List[str], mode: ObservabilityPipelineMetricTagsProcessorRuleMode, **kwargs): + """ + Defines a rule for filtering metric tags based on key patterns. + + :param action: The action to take on tags with matching keys. + :type action: ObservabilityPipelineMetricTagsProcessorRuleAction + + :param include: A Datadog search query used to determine which metrics this rule targets. + :type include: str + + :param keys: A list of tag keys to include or exclude. + :type keys: [str] + + :param mode: The processing mode for tag filtering. + :type mode: ObservabilityPipelineMetricTagsProcessorRuleMode + """ + super().__init__(kwargs) + + + self_.action = action + self_.include = include + self_.keys = keys + self_.mode = mode diff --git a/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_rule_action.py b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_rule_action.py new file mode 100644 index 0000000000..200145b4f5 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_rule_action.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineMetricTagsProcessorRuleAction(ModelSimple): + """ + The action to take on tags with matching keys. + + :param value: Must be one of ["include", "exclude"]. + :type value: str + """ + + allowed_values = { + "include", + "exclude", + } + INCLUDE: ClassVar["ObservabilityPipelineMetricTagsProcessorRuleAction"] + EXCLUDE: ClassVar["ObservabilityPipelineMetricTagsProcessorRuleAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineMetricTagsProcessorRuleAction.INCLUDE = ObservabilityPipelineMetricTagsProcessorRuleAction("include") +ObservabilityPipelineMetricTagsProcessorRuleAction.EXCLUDE = ObservabilityPipelineMetricTagsProcessorRuleAction("exclude") diff --git a/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_rule_mode.py b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_rule_mode.py new file mode 100644 index 0000000000..0f151edaab --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_rule_mode.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineMetricTagsProcessorRuleMode(ModelSimple): + """ + The processing mode for tag filtering. + + :param value: If omitted defaults to "filter". Must be one of ["filter"]. + :type value: str + """ + + allowed_values = { + "filter", + } + FILTER: ClassVar["ObservabilityPipelineMetricTagsProcessorRuleMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineMetricTagsProcessorRuleMode.FILTER = ObservabilityPipelineMetricTagsProcessorRuleMode("filter") diff --git a/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_type.py new file mode 100644 index 0000000000..d5996ca4a3 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_metric_tags_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineMetricTagsProcessorType(ModelSimple): + """ + The processor type. The value should always be `metric_tags`. + + :param value: If omitted defaults to "metric_tags". Must be one of ["metric_tags"]. + :type value: str + """ + + allowed_values = { + "metric_tags", + } + METRIC_TAGS: ClassVar["ObservabilityPipelineMetricTagsProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineMetricTagsProcessorType.METRIC_TAGS = ObservabilityPipelineMetricTagsProcessorType("metric_tags") diff --git a/datadog_api_client/v2/model/observability_pipeline_metric_value.py b/datadog_api_client/v2/model/observability_pipeline_metric_value.py new file mode 100644 index 0000000000..4712e5a5ba --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_metric_value.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineMetricValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Specifies how the value of the generated metric is computed. + + :param strategy: Increments the metric by 1 for each matching event. + :type strategy: ObservabilityPipelineGeneratedMetricIncrementByOneStrategy + + :param field: Name of the log field containing the numeric value to increment the metric by. + :type field: str + """ + 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.observability_pipeline_generated_metric_increment_by_one import ObservabilityPipelineGeneratedMetricIncrementByOne + from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_field import ObservabilityPipelineGeneratedMetricIncrementByField + return { + "oneOf": [ + ObservabilityPipelineGeneratedMetricIncrementByOne, + ObservabilityPipelineGeneratedMetricIncrementByField, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_mtls_server_tls.py b/datadog_api_client/v2/model/observability_pipeline_mtls_server_tls.py new file mode 100644 index 0000000000..8abfacaa84 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_mtls_server_tls.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineMtlsServerTls(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ca_file": (str,), + "crt_file": (str,), + "key_file": (str,), + "key_pass_key": (str,), + "verify_certificate": (bool,), + } + attribute_map = { + "ca_file": "ca_file", + "crt_file": "crt_file", + "key_file": "key_file", + "key_pass_key": "key_pass_key", + "verify_certificate": "verify_certificate", + } + + def __init__(self_, crt_file: str, ca_file: Union[str, UnsetType]=unset, key_file: Union[str, UnsetType]=unset, key_pass_key: Union[str, UnsetType]=unset, verify_certificate: Union[bool, UnsetType]=unset, **kwargs): + """ + Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + + :param ca_file: Path to the Certificate Authority (CA) file used to validate connecting clients' TLS certificates. + :type ca_file: str, optional + + :param crt_file: Path to the TLS server certificate file used to used to identify the pipeline component to connecting clients. + :type crt_file: str + + :param key_file: Path to the private key file associated with the TLS server certificate. + :type key_file: str, optional + + :param key_pass_key: Name of the environment variable or secret that holds the passphrase for the private key file. + :type key_pass_key: str, optional + + :param verify_certificate: When ``true`` , requires client connections to present a valid certificate, enabling mutual TLS authentication. + :type verify_certificate: bool, optional + """ + if ca_file is not unset: + kwargs["ca_file"] = ca_file + if key_file is not unset: + kwargs["key_file"] = key_file + if key_pass_key is not unset: + kwargs["key_pass_key"] = key_pass_key + if verify_certificate is not unset: + kwargs["verify_certificate"] = verify_certificate + super().__init__(kwargs) + + + self_.crt_file = crt_file diff --git a/datadog_api_client/v2/model/observability_pipeline_new_relic_destination.py b/datadog_api_client/v2/model/observability_pipeline_new_relic_destination.py new file mode 100644 index 0000000000..53bd96d510 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_new_relic_destination.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination_region import ObservabilityPipelineNewRelicDestinationRegion + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination_type import ObservabilityPipelineNewRelicDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineNewRelicDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination_region import ObservabilityPipelineNewRelicDestinationRegion + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination_type import ObservabilityPipelineNewRelicDestinationType + return { + "account_id_key": (str,), + "buffer": (ObservabilityPipelineBufferOptions,), + "id": (str,), + "inputs": ([str],), + "license_key_key": (str,), + "region": (ObservabilityPipelineNewRelicDestinationRegion,), + "type": (ObservabilityPipelineNewRelicDestinationType,), + } + attribute_map = { + "account_id_key": "account_id_key", + "buffer": "buffer", + "id": "id", + "inputs": "inputs", + "license_key_key": "license_key_key", + "region": "region", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], region: ObservabilityPipelineNewRelicDestinationRegion, type: ObservabilityPipelineNewRelicDestinationType, account_id_key: Union[str, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, license_key_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``new_relic`` destination sends logs to the New Relic platform. + + **Supported pipeline types:** logs + + :param account_id_key: Name of the environment variable or secret that holds the New Relic account ID. + :type account_id_key: str, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param license_key_key: Name of the environment variable or secret that holds the New Relic license key. + :type license_key_key: str, optional + + :param region: The New Relic region. + :type region: ObservabilityPipelineNewRelicDestinationRegion + + :param type: The destination type. The value should always be ``new_relic``. + :type type: ObservabilityPipelineNewRelicDestinationType + """ + if account_id_key is not unset: + kwargs["account_id_key"] = account_id_key + if buffer is not unset: + kwargs["buffer"] = buffer + if license_key_key is not unset: + kwargs["license_key_key"] = license_key_key + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.region = region + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_new_relic_destination_region.py b/datadog_api_client/v2/model/observability_pipeline_new_relic_destination_region.py new file mode 100644 index 0000000000..cbc402fe6c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_new_relic_destination_region.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineNewRelicDestinationRegion(ModelSimple): + """ + The New Relic region. + + :param value: Must be one of ["us", "eu"]. + :type value: str + """ + + allowed_values = { + "us", + "eu", + } + US: ClassVar["ObservabilityPipelineNewRelicDestinationRegion"] + EU: ClassVar["ObservabilityPipelineNewRelicDestinationRegion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineNewRelicDestinationRegion.US = ObservabilityPipelineNewRelicDestinationRegion("us") +ObservabilityPipelineNewRelicDestinationRegion.EU = ObservabilityPipelineNewRelicDestinationRegion("eu") diff --git a/datadog_api_client/v2/model/observability_pipeline_new_relic_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_new_relic_destination_type.py new file mode 100644 index 0000000000..b89eb8c3e1 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_new_relic_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineNewRelicDestinationType(ModelSimple): + """ + The destination type. The value should always be `new_relic`. + + :param value: If omitted defaults to "new_relic". Must be one of ["new_relic"]. + :type value: str + """ + + allowed_values = { + "new_relic", + } + NEW_RELIC: ClassVar["ObservabilityPipelineNewRelicDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineNewRelicDestinationType.NEW_RELIC = ObservabilityPipelineNewRelicDestinationType("new_relic") diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor.py new file mode 100644 index 0000000000..fa39bd51e6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor_mapping import ObservabilityPipelineOcsfMapperProcessorMapping + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor_type import ObservabilityPipelineOcsfMapperProcessorType + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom import ObservabilityPipelineOcsfMappingCustom + +class ObservabilityPipelineOcsfMapperProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor_mapping import ObservabilityPipelineOcsfMapperProcessorMapping + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor_type import ObservabilityPipelineOcsfMapperProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "keep_unmatched": (bool,), + "mappings": ([ObservabilityPipelineOcsfMapperProcessorMapping],), + "type": (ObservabilityPipelineOcsfMapperProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "keep_unmatched": "keep_unmatched", + "mappings": "mappings", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, mappings: List[ObservabilityPipelineOcsfMapperProcessorMapping], type: ObservabilityPipelineOcsfMapperProcessorType, display_name: Union[str, UnsetType]=unset, keep_unmatched: Union[bool, UnsetType]=unset, **kwargs): + """ + The ``ocsf_mapper`` processor transforms logs into the OCSF schema using a predefined mapping configuration. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used to reference this component in other parts of the pipeline. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param keep_unmatched: Whether to keep an event that does not match any of the mapping filters. + :type keep_unmatched: bool, optional + + :param mappings: A list of mapping rules to convert events to the OCSF format. + :type mappings: [ObservabilityPipelineOcsfMapperProcessorMapping] + + :param type: The processor type. The value should always be ``ocsf_mapper``. + :type type: ObservabilityPipelineOcsfMapperProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if keep_unmatched is not unset: + kwargs["keep_unmatched"] = keep_unmatched + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.mappings = mappings + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor_mapping.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor_mapping.py new file mode 100644 index 0000000000..c55ccead02 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor_mapping.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor_mapping_mapping import ObservabilityPipelineOcsfMapperProcessorMappingMapping + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom import ObservabilityPipelineOcsfMappingCustom + +class ObservabilityPipelineOcsfMapperProcessorMapping(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor_mapping_mapping import ObservabilityPipelineOcsfMapperProcessorMappingMapping + return { + "include": (str,), + "mapping": (ObservabilityPipelineOcsfMapperProcessorMappingMapping,), + } + attribute_map = { + "include": "include", + "mapping": "mapping", + } + + def __init__(self_, include: str, mapping: Union[ObservabilityPipelineOcsfMapperProcessorMappingMapping, str, ObservabilityPipelineOcsfMappingCustom], **kwargs): + """ + Defines how specific events are transformed to OCSF using a mapping configuration. + + :param include: A Datadog search query used to select the logs that this mapping should apply to. + :type include: str + + :param mapping: Defines a single mapping rule for transforming logs into the OCSF schema. + :type mapping: ObservabilityPipelineOcsfMapperProcessorMappingMapping + """ + super().__init__(kwargs) + + + self_.include = include + self_.mapping = mapping diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor_mapping_mapping.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor_mapping_mapping.py new file mode 100644 index 0000000000..0d201fd5cc --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor_mapping_mapping.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineOcsfMapperProcessorMappingMapping(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Defines a single mapping rule for transforming logs into the OCSF schema. + + :param mapping: A list of field mapping rules for transforming log fields to OCSF schema fields. + :type mapping: [ObservabilityPipelineOcsfMappingCustomFieldMapping] + + :param metadata: Metadata for the custom OCSF mapping. + :type metadata: ObservabilityPipelineOcsfMappingCustomMetadata + + :param version: The version of the custom mapping configuration. + :type version: int + """ + 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.observability_pipeline_ocsf_mapping_custom import ObservabilityPipelineOcsfMappingCustom + return { + "oneOf": [ + str, + ObservabilityPipelineOcsfMappingCustom, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor_type.py new file mode 100644 index 0000000000..0896e1ffbd --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapper_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineOcsfMapperProcessorType(ModelSimple): + """ + The processor type. The value should always be `ocsf_mapper`. + + :param value: If omitted defaults to "ocsf_mapper". Must be one of ["ocsf_mapper"]. + :type value: str + """ + + allowed_values = { + "ocsf_mapper", + } + OCSF_MAPPER: ClassVar["ObservabilityPipelineOcsfMapperProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineOcsfMapperProcessorType.OCSF_MAPPER = ObservabilityPipelineOcsfMapperProcessorType("ocsf_mapper") diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom.py new file mode 100644 index 0000000000..01a4c37afa --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_field_mapping import ObservabilityPipelineOcsfMappingCustomFieldMapping + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_metadata import ObservabilityPipelineOcsfMappingCustomMetadata + +class ObservabilityPipelineOcsfMappingCustom(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_field_mapping import ObservabilityPipelineOcsfMappingCustomFieldMapping + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_metadata import ObservabilityPipelineOcsfMappingCustomMetadata + return { + "mapping": ([ObservabilityPipelineOcsfMappingCustomFieldMapping],), + "metadata": (ObservabilityPipelineOcsfMappingCustomMetadata,), + "version": (int,), + } + attribute_map = { + "mapping": "mapping", + "metadata": "metadata", + "version": "version", + } + + def __init__(self_, mapping: List[ObservabilityPipelineOcsfMappingCustomFieldMapping], metadata: ObservabilityPipelineOcsfMappingCustomMetadata, version: int, **kwargs): + """ + Custom OCSF mapping configuration for transforming logs. + + :param mapping: A list of field mapping rules for transforming log fields to OCSF schema fields. + :type mapping: [ObservabilityPipelineOcsfMappingCustomFieldMapping] + + :param metadata: Metadata for the custom OCSF mapping. + :type metadata: ObservabilityPipelineOcsfMappingCustomMetadata + + :param version: The version of the custom mapping configuration. + :type version: int + """ + super().__init__(kwargs) + + + self_.mapping = mapping + self_.metadata = metadata + self_.version = version diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_field_mapping.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_field_mapping.py new file mode 100644 index 0000000000..5da40fc4bf --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_field_mapping.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_lookup import ObservabilityPipelineOcsfMappingCustomLookup + +class ObservabilityPipelineOcsfMappingCustomFieldMapping(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_lookup import ObservabilityPipelineOcsfMappingCustomLookup + return { + "default": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "dest": (str,), + "lookup": (ObservabilityPipelineOcsfMappingCustomLookup,), + "source": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "sources": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "default": "default", + "dest": "dest", + "lookup": "lookup", + "source": "source", + "sources": "sources", + "value": "value", + } + + def __init__(self_, dest: str, default: Union[Any, UnsetType]=unset, lookup: Union[ObservabilityPipelineOcsfMappingCustomLookup, UnsetType]=unset, source: Union[Any, UnsetType]=unset, sources: Union[Any, UnsetType]=unset, value: Union[Any, UnsetType]=unset, **kwargs): + """ + Defines a single field mapping rule for transforming a source field to an OCSF destination field. + + :param default: The default value to use if the source field is missing or empty. + :type default: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param dest: The destination OCSF field path. + :type dest: str + + :param lookup: Lookup table configuration for mapping source values to destination values. + :type lookup: ObservabilityPipelineOcsfMappingCustomLookup, optional + + :param source: The source field path from the log event. + :type source: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param sources: Multiple source field paths for combined mapping. + :type sources: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param value: A static value to use for the destination field. + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + """ + if default is not unset: + kwargs["default"] = default + if lookup is not unset: + kwargs["lookup"] = lookup + if source is not unset: + kwargs["source"] = source + if sources is not unset: + kwargs["sources"] = sources + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.dest = dest diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_lookup.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_lookup.py new file mode 100644 index 0000000000..da36d5cd3b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_lookup.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_lookup_table_entry import ObservabilityPipelineOcsfMappingCustomLookupTableEntry + +class ObservabilityPipelineOcsfMappingCustomLookup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_lookup_table_entry import ObservabilityPipelineOcsfMappingCustomLookupTableEntry + return { + "default": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "table": ([ObservabilityPipelineOcsfMappingCustomLookupTableEntry],), + } + attribute_map = { + "default": "default", + "table": "table", + } + + def __init__(self_, default: Union[Any, UnsetType]=unset, table: Union[List[ObservabilityPipelineOcsfMappingCustomLookupTableEntry], UnsetType]=unset, **kwargs): + """ + Lookup table configuration for mapping source values to destination values. + + :param default: The default value to use if no lookup match is found. + :type default: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param table: A list of lookup table entries for value transformation. + :type table: [ObservabilityPipelineOcsfMappingCustomLookupTableEntry], optional + """ + if default is not unset: + kwargs["default"] = default + if table is not unset: + kwargs["table"] = table + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_lookup_table_entry.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_lookup_table_entry.py new file mode 100644 index 0000000000..bd1481b810 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_lookup_table_entry.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineOcsfMappingCustomLookupTableEntry(ModelNormal): + @cached_property + def openapi_types(_): + return { + "contains": (str,), + "equals": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "equals_source": (str,), + "matches": (str,), + "not_matches": (str,), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "contains": "contains", + "equals": "equals", + "equals_source": "equals_source", + "matches": "matches", + "not_matches": "not_matches", + "value": "value", + } + + def __init__(self_, contains: Union[str, UnsetType]=unset, equals: Union[Any, UnsetType]=unset, equals_source: Union[str, UnsetType]=unset, matches: Union[str, UnsetType]=unset, not_matches: Union[str, UnsetType]=unset, value: Union[Any, UnsetType]=unset, **kwargs): + """ + A single entry in a lookup table for value transformation. + + :param contains: The substring to match in the source value. + :type contains: str, optional + + :param equals: The exact value to match in the source. + :type equals: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param equals_source: The source field to match against. + :type equals_source: str, optional + + :param matches: A regex pattern to match in the source value. + :type matches: str, optional + + :param not_matches: A regex pattern that must not match the source value. + :type not_matches: str, optional + + :param value: The value to use when a match is found. + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + """ + if contains is not unset: + kwargs["contains"] = contains + if equals is not unset: + kwargs["equals"] = equals + if equals_source is not unset: + kwargs["equals_source"] = equals_source + if matches is not unset: + kwargs["matches"] = matches + if not_matches is not unset: + kwargs["not_matches"] = not_matches + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_metadata.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_metadata.py new file mode 100644 index 0000000000..d19daf3512 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_custom_metadata.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineOcsfMappingCustomMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_class": (str,), + "profiles": ([str],), + "version": (str,), + } + attribute_map = { + "_class": "class", + "profiles": "profiles", + "version": "version", + } + + def __init__(self_, _class: str, version: str, profiles: Union[List[str], UnsetType]=unset, **kwargs): + """ + Metadata for the custom OCSF mapping. + + :param _class: The OCSF event class name. + :type _class: str + + :param profiles: A list of OCSF profiles to apply. + :type profiles: [str], optional + + :param version: The OCSF schema version. + :type version: str + """ + if profiles is not unset: + kwargs["profiles"] = profiles + super().__init__(kwargs) + + + self_._class = _class + self_.version = version diff --git a/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_library.py b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_library.py new file mode 100644 index 0000000000..5d01490176 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_ocsf_mapping_library.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineOcsfMappingLibrary(ModelSimple): + """ + Predefined library mappings for common log formats. + + :param value: Must be one of ["CloudTrail Account Change", "GCP Cloud Audit CreateBucket", "GCP Cloud Audit CreateSink", "GCP Cloud Audit SetIamPolicy", "GCP Cloud Audit UpdateSink", "Github Audit Log API Activity", "Google Workspace Admin Audit addPrivilege", "Microsoft 365 Defender Incident", "Microsoft 365 Defender UserLoggedIn", "Okta System Log Authentication", "Palo Alto Networks Firewall Traffic"]. + :type value: str + """ + + allowed_values = { + "CloudTrail Account Change", + "GCP Cloud Audit CreateBucket", + "GCP Cloud Audit CreateSink", + "GCP Cloud Audit SetIamPolicy", + "GCP Cloud Audit UpdateSink", + "Github Audit Log API Activity", + "Google Workspace Admin Audit addPrivilege", + "Microsoft 365 Defender Incident", + "Microsoft 365 Defender UserLoggedIn", + "Okta System Log Authentication", + "Palo Alto Networks Firewall Traffic", + } + CLOUDTRAIL_ACCOUNT_CHANGE: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + GCP_CLOUD_AUDIT_CREATEBUCKET: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + GCP_CLOUD_AUDIT_CREATESINK: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + GCP_CLOUD_AUDIT_SETIAMPOLICY: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + GCP_CLOUD_AUDIT_UPDATESINK: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + GITHUB_AUDIT_LOG_API_ACTIVITY: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + GOOGLE_WORKSPACE_ADMIN_AUDIT_ADDPRIVILEGE: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + MICROSOFT_365_DEFENDER_INCIDENT: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + MICROSOFT_365_DEFENDER_USERLOGGEDIN: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + OKTA_SYSTEM_LOG_AUTHENTICATION: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + PALO_ALTO_NETWORKS_FIREWALL_TRAFFIC: ClassVar["ObservabilityPipelineOcsfMappingLibrary"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineOcsfMappingLibrary.CLOUDTRAIL_ACCOUNT_CHANGE = ObservabilityPipelineOcsfMappingLibrary("CloudTrail Account Change") +ObservabilityPipelineOcsfMappingLibrary.GCP_CLOUD_AUDIT_CREATEBUCKET = ObservabilityPipelineOcsfMappingLibrary("GCP Cloud Audit CreateBucket") +ObservabilityPipelineOcsfMappingLibrary.GCP_CLOUD_AUDIT_CREATESINK = ObservabilityPipelineOcsfMappingLibrary("GCP Cloud Audit CreateSink") +ObservabilityPipelineOcsfMappingLibrary.GCP_CLOUD_AUDIT_SETIAMPOLICY = ObservabilityPipelineOcsfMappingLibrary("GCP Cloud Audit SetIamPolicy") +ObservabilityPipelineOcsfMappingLibrary.GCP_CLOUD_AUDIT_UPDATESINK = ObservabilityPipelineOcsfMappingLibrary("GCP Cloud Audit UpdateSink") +ObservabilityPipelineOcsfMappingLibrary.GITHUB_AUDIT_LOG_API_ACTIVITY = ObservabilityPipelineOcsfMappingLibrary("Github Audit Log API Activity") +ObservabilityPipelineOcsfMappingLibrary.GOOGLE_WORKSPACE_ADMIN_AUDIT_ADDPRIVILEGE = ObservabilityPipelineOcsfMappingLibrary("Google Workspace Admin Audit addPrivilege") +ObservabilityPipelineOcsfMappingLibrary.MICROSOFT_365_DEFENDER_INCIDENT = ObservabilityPipelineOcsfMappingLibrary("Microsoft 365 Defender Incident") +ObservabilityPipelineOcsfMappingLibrary.MICROSOFT_365_DEFENDER_USERLOGGEDIN = ObservabilityPipelineOcsfMappingLibrary("Microsoft 365 Defender UserLoggedIn") +ObservabilityPipelineOcsfMappingLibrary.OKTA_SYSTEM_LOG_AUTHENTICATION = ObservabilityPipelineOcsfMappingLibrary("Okta System Log Authentication") +ObservabilityPipelineOcsfMappingLibrary.PALO_ALTO_NETWORKS_FIREWALL_TRAFFIC = ObservabilityPipelineOcsfMappingLibrary("Palo Alto Networks Firewall Traffic") diff --git a/datadog_api_client/v2/model/observability_pipeline_open_search_destination.py b/datadog_api_client/v2/model/observability_pipeline_open_search_destination.py new file mode 100644 index 0000000000..bafe838259 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_open_search_destination.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_auth import ObservabilityPipelineElasticsearchDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_open_search_destination_data_stream import ObservabilityPipelineOpenSearchDestinationDataStream + from datadog_api_client.v2.model.observability_pipeline_open_search_destination_type import ObservabilityPipelineOpenSearchDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineOpenSearchDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_auth import ObservabilityPipelineElasticsearchDestinationAuth + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_open_search_destination_data_stream import ObservabilityPipelineOpenSearchDestinationDataStream + from datadog_api_client.v2.model.observability_pipeline_open_search_destination_type import ObservabilityPipelineOpenSearchDestinationType + return { + "auth": (ObservabilityPipelineElasticsearchDestinationAuth,), + "buffer": (ObservabilityPipelineBufferOptions,), + "bulk_index": (str,), + "data_stream": (ObservabilityPipelineOpenSearchDestinationDataStream,), + "endpoint_url_key": (str,), + "id": (str,), + "inputs": ([str],), + "type": (ObservabilityPipelineOpenSearchDestinationType,), + } + attribute_map = { + "auth": "auth", + "buffer": "buffer", + "bulk_index": "bulk_index", + "data_stream": "data_stream", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "inputs": "inputs", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineOpenSearchDestinationType, auth: Union[ObservabilityPipelineElasticsearchDestinationAuth, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, bulk_index: Union[str, UnsetType]=unset, data_stream: Union[ObservabilityPipelineOpenSearchDestinationDataStream, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``opensearch`` destination writes logs to an OpenSearch cluster. + + **Supported pipeline types:** logs + + :param auth: Authentication settings for the Elasticsearch destination. + When ``strategy`` is ``basic`` , use ``username_key`` and ``password_key`` to reference credentials stored in environment variables or secrets. + :type auth: ObservabilityPipelineElasticsearchDestinationAuth, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param bulk_index: The index to write logs to. + :type bulk_index: str, optional + + :param data_stream: Configuration options for writing to OpenSearch Data Streams instead of a fixed index. + :type data_stream: ObservabilityPipelineOpenSearchDestinationDataStream, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the OpenSearch endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param type: The destination type. The value should always be ``opensearch``. + :type type: ObservabilityPipelineOpenSearchDestinationType + """ + if auth is not unset: + kwargs["auth"] = auth + if buffer is not unset: + kwargs["buffer"] = buffer + if bulk_index is not unset: + kwargs["bulk_index"] = bulk_index + if data_stream is not unset: + kwargs["data_stream"] = data_stream + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_open_search_destination_data_stream.py b/datadog_api_client/v2/model/observability_pipeline_open_search_destination_data_stream.py new file mode 100644 index 0000000000..0f066876c7 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_open_search_destination_data_stream.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineOpenSearchDestinationDataStream(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dataset": (str,), + "dtype": (str,), + "namespace": (str,), + } + attribute_map = { + "dataset": "dataset", + "dtype": "dtype", + "namespace": "namespace", + } + + def __init__(self_, dataset: Union[str, UnsetType]=unset, dtype: Union[str, UnsetType]=unset, namespace: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration options for writing to OpenSearch Data Streams instead of a fixed index. + + :param dataset: The data stream dataset for your logs. This groups logs by their source or application. + :type dataset: str, optional + + :param dtype: The data stream type for your logs. This determines how logs are categorized within the data stream. + :type dtype: str, optional + + :param namespace: The data stream namespace for your logs. This separates logs into different environments or domains. + :type namespace: str, optional + """ + if dataset is not unset: + kwargs["dataset"] = dataset + if dtype is not unset: + kwargs["dtype"] = dtype + if namespace is not unset: + kwargs["namespace"] = namespace + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/observability_pipeline_open_search_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_open_search_destination_type.py new file mode 100644 index 0000000000..1226dab3d2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_open_search_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineOpenSearchDestinationType(ModelSimple): + """ + The destination type. The value should always be `opensearch`. + + :param value: If omitted defaults to "opensearch". Must be one of ["opensearch"]. + :type value: str + """ + + allowed_values = { + "opensearch", + } + OPENSEARCH: ClassVar["ObservabilityPipelineOpenSearchDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineOpenSearchDestinationType.OPENSEARCH = ObservabilityPipelineOpenSearchDestinationType("opensearch") diff --git a/datadog_api_client/v2/model/observability_pipeline_opentelemetry_source.py b/datadog_api_client/v2/model/observability_pipeline_opentelemetry_source.py new file mode 100644 index 0000000000..5fc23be343 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_opentelemetry_source.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source_type import ObservabilityPipelineOpentelemetrySourceType + +class ObservabilityPipelineOpentelemetrySource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source_type import ObservabilityPipelineOpentelemetrySourceType + return { + "grpc_address_key": (str,), + "http_address_key": (str,), + "id": (str,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineOpentelemetrySourceType,), + } + attribute_map = { + "grpc_address_key": "grpc_address_key", + "http_address_key": "http_address_key", + "id": "id", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, type: ObservabilityPipelineOpentelemetrySourceType, grpc_address_key: Union[str, UnsetType]=unset, http_address_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, **kwargs): + """ + The ``opentelemetry`` source receives telemetry data using the OpenTelemetry Protocol (OTLP) over gRPC and HTTP. + + **Supported pipeline types:** logs, metrics + + :param grpc_address_key: Environment variable name containing the gRPC server address for receiving OTLP data. Must be a valid environment variable name (alphanumeric characters and underscores only). + :type grpc_address_key: str, optional + + :param http_address_key: Environment variable name containing the HTTP server address for receiving OTLP data. Must be a valid environment variable name (alphanumeric characters and underscores only). + :type http_address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. The value should always be ``opentelemetry``. + :type type: ObservabilityPipelineOpentelemetrySourceType + """ + if grpc_address_key is not unset: + kwargs["grpc_address_key"] = grpc_address_key + if http_address_key is not unset: + kwargs["http_address_key"] = http_address_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_opentelemetry_source_type.py b/datadog_api_client/v2/model/observability_pipeline_opentelemetry_source_type.py new file mode 100644 index 0000000000..9c6938a794 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_opentelemetry_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineOpentelemetrySourceType(ModelSimple): + """ + The source type. The value should always be `opentelemetry`. + + :param value: If omitted defaults to "opentelemetry". Must be one of ["opentelemetry"]. + :type value: str + """ + + allowed_values = { + "opentelemetry", + } + OPENTELEMETRY: ClassVar["ObservabilityPipelineOpentelemetrySourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineOpentelemetrySourceType.OPENTELEMETRY = ObservabilityPipelineOpentelemetrySourceType("opentelemetry") diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor.py b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor.py new file mode 100644 index 0000000000..3379bcb7e9 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_item import ObservabilityPipelineParseGrokProcessorRuleItem + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_type import ObservabilityPipelineParseGrokProcessorType + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule import ObservabilityPipelineParseGrokProcessorRule + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_include_rule import ObservabilityPipelineParseGrokProcessorIncludeRule + +class ObservabilityPipelineParseGrokProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_item import ObservabilityPipelineParseGrokProcessorRuleItem + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_type import ObservabilityPipelineParseGrokProcessorType + return { + "disable_library_rules": (bool,), + "display_name": (str,), + "enabled": (bool,), + "field": (str,), + "id": (str,), + "include": (str,), + "rules": ([ObservabilityPipelineParseGrokProcessorRuleItem],), + "type": (ObservabilityPipelineParseGrokProcessorType,), + } + attribute_map = { + "disable_library_rules": "disable_library_rules", + "display_name": "display_name", + "enabled": "enabled", + "field": "field", + "id": "id", + "include": "include", + "rules": "rules", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, rules: List[Union[ObservabilityPipelineParseGrokProcessorRuleItem, ObservabilityPipelineParseGrokProcessorRule, ObservabilityPipelineParseGrokProcessorIncludeRule]], type: ObservabilityPipelineParseGrokProcessorType, disable_library_rules: Union[bool, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, field: Union[str, UnsetType]=unset, **kwargs): + """ + The ``parse_grok`` processor extracts structured fields from unstructured log messages using Grok patterns. + + **Supported pipeline types:** logs + + :param disable_library_rules: If set to ``true`` , disables the default Grok rules provided by Datadog. + :type disable_library_rules: bool, optional + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param field: The log field to parse with the Grok rules. + :type field: str, optional + + :param id: A unique identifier for this processor. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param rules: The list of Grok parsing rules selected by either source field or include query. + :type rules: [ObservabilityPipelineParseGrokProcessorRuleItem] + + :param type: The processor type. The value should always be ``parse_grok``. + :type type: ObservabilityPipelineParseGrokProcessorType + """ + if disable_library_rules is not unset: + kwargs["disable_library_rules"] = disable_library_rules + if display_name is not unset: + kwargs["display_name"] = display_name + if field is not unset: + kwargs["field"] = field + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.rules = rules + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_include_rule.py b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_include_rule.py new file mode 100644 index 0000000000..60cf12e6a1 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_include_rule.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_match_rule import ObservabilityPipelineParseGrokProcessorRuleMatchRule + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_support_rule import ObservabilityPipelineParseGrokProcessorRuleSupportRule + +class ObservabilityPipelineParseGrokProcessorIncludeRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_match_rule import ObservabilityPipelineParseGrokProcessorRuleMatchRule + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_support_rule import ObservabilityPipelineParseGrokProcessorRuleSupportRule + return { + "include": (str,), + "match_rules": ([ObservabilityPipelineParseGrokProcessorRuleMatchRule],), + "support_rules": ([ObservabilityPipelineParseGrokProcessorRuleSupportRule],), + } + attribute_map = { + "include": "include", + "match_rules": "match_rules", + "support_rules": "support_rules", + } + + def __init__(self_, include: str, match_rules: List[ObservabilityPipelineParseGrokProcessorRuleMatchRule], support_rules: Union[List[ObservabilityPipelineParseGrokProcessorRuleSupportRule], UnsetType]=unset, **kwargs): + """ + A Grok parsing rule selected using the ``include`` query. Each rule defines how to extract structured fields + from logs matching a Datadog search query. + + :param include: A Datadog search query used to determine which logs this Grok rule targets. + :type include: str + + :param match_rules: A list of Grok parsing rules that define how to extract fields from matching logs. + Each rule must contain a name and a valid Grok pattern. + :type match_rules: [ObservabilityPipelineParseGrokProcessorRuleMatchRule] + + :param support_rules: A list of Grok helper rules that can be referenced by the parsing rules. + :type support_rules: [ObservabilityPipelineParseGrokProcessorRuleSupportRule], optional + """ + if support_rules is not unset: + kwargs["support_rules"] = support_rules + super().__init__(kwargs) + + + self_.include = include + self_.match_rules = match_rules diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule.py b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule.py new file mode 100644 index 0000000000..22fde39438 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_match_rule import ObservabilityPipelineParseGrokProcessorRuleMatchRule + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_support_rule import ObservabilityPipelineParseGrokProcessorRuleSupportRule + +class ObservabilityPipelineParseGrokProcessorRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_match_rule import ObservabilityPipelineParseGrokProcessorRuleMatchRule + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_support_rule import ObservabilityPipelineParseGrokProcessorRuleSupportRule + return { + "match_rules": ([ObservabilityPipelineParseGrokProcessorRuleMatchRule],), + "source": (str,), + "support_rules": ([ObservabilityPipelineParseGrokProcessorRuleSupportRule],), + } + attribute_map = { + "match_rules": "match_rules", + "source": "source", + "support_rules": "support_rules", + } + + def __init__(self_, match_rules: List[ObservabilityPipelineParseGrokProcessorRuleMatchRule], source: str, support_rules: Union[List[ObservabilityPipelineParseGrokProcessorRuleSupportRule], UnsetType]=unset, **kwargs): + """ + A Grok parsing rule used in the ``parse_grok`` processor. Each rule defines how to extract structured fields + from a specific log field using Grok patterns. + + :param match_rules: A list of Grok parsing rules that define how to extract fields from the source field. + Each rule must contain a name and a valid Grok pattern. + :type match_rules: [ObservabilityPipelineParseGrokProcessorRuleMatchRule] + + :param source: The value of the source field in log events to be processed by the Grok rules. + :type source: str + + :param support_rules: A list of Grok helper rules that can be referenced by the parsing rules. + :type support_rules: [ObservabilityPipelineParseGrokProcessorRuleSupportRule], optional + """ + if support_rules is not unset: + kwargs["support_rules"] = support_rules + super().__init__(kwargs) + + + self_.match_rules = match_rules + self_.source = source diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule_item.py b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule_item.py new file mode 100644 index 0000000000..b29620103f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule_item.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineParseGrokProcessorRuleItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A single Grok parsing rule, selected by either source field or include query. + + :param match_rules: A list of Grok parsing rules that define how to extract fields from the source field. + Each rule must contain a name and a valid Grok pattern. + :type match_rules: [ObservabilityPipelineParseGrokProcessorRuleMatchRule] + + :param source: The value of the source field in log events to be processed by the Grok rules. + :type source: str + + :param support_rules: A list of Grok helper rules that can be referenced by the parsing rules. + :type support_rules: [ObservabilityPipelineParseGrokProcessorRuleSupportRule], optional + + :param include: A Datadog search query used to determine which logs this Grok rule targets. + :type include: str + """ + 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.observability_pipeline_parse_grok_processor_rule import ObservabilityPipelineParseGrokProcessorRule + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_include_rule import ObservabilityPipelineParseGrokProcessorIncludeRule + return { + "oneOf": [ + ObservabilityPipelineParseGrokProcessorRule, + ObservabilityPipelineParseGrokProcessorIncludeRule, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule_match_rule.py b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule_match_rule.py new file mode 100644 index 0000000000..47a9ae1e23 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule_match_rule.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineParseGrokProcessorRuleMatchRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "rule": (str,), + } + attribute_map = { + "name": "name", + "rule": "rule", + } + + def __init__(self_, name: str, rule: str, **kwargs): + """ + Defines a Grok parsing rule, which extracts structured fields from log content using named Grok patterns. + Each rule must have a unique name and a valid Datadog Grok pattern that will be applied to the source field. + + :param name: The name of the rule. + :type name: str + + :param rule: The definition of the Grok rule. + :type rule: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.rule = rule diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule_support_rule.py b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule_support_rule.py new file mode 100644 index 0000000000..c4e0a0daa5 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_rule_support_rule.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineParseGrokProcessorRuleSupportRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "rule": (str,), + } + attribute_map = { + "name": "name", + "rule": "rule", + } + + def __init__(self_, name: str, rule: str, **kwargs): + """ + The Grok helper rule referenced in the parsing rules. + + :param name: The name of the Grok helper rule. + :type name: str + + :param rule: The definition of the Grok helper rule. + :type rule: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.rule = rule diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_type.py new file mode 100644 index 0000000000..0bc4cf7622 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_grok_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineParseGrokProcessorType(ModelSimple): + """ + The processor type. The value should always be `parse_grok`. + + :param value: If omitted defaults to "parse_grok". Must be one of ["parse_grok"]. + :type value: str + """ + + allowed_values = { + "parse_grok", + } + PARSE_GROK: ClassVar["ObservabilityPipelineParseGrokProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineParseGrokProcessorType.PARSE_GROK = ObservabilityPipelineParseGrokProcessorType("parse_grok") diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_json_processor.py b/datadog_api_client/v2/model/observability_pipeline_parse_json_processor.py new file mode 100644 index 0000000000..8fa78e297b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_json_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor_type import ObservabilityPipelineParseJSONProcessorType + +class ObservabilityPipelineParseJSONProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor_type import ObservabilityPipelineParseJSONProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "field": (str,), + "id": (str,), + "include": (str,), + "type": (ObservabilityPipelineParseJSONProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "field": "field", + "id": "id", + "include": "include", + "type": "type", + } + + def __init__(self_, enabled: bool, field: str, id: str, include: str, type: ObservabilityPipelineParseJSONProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``parse_json`` processor extracts JSON from a specified field and flattens it into the event. This is useful when logs contain embedded JSON as a string. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param field: The name of the log field that contains a JSON string. + :type field: str + + :param id: A unique identifier for this component. Used to reference this component in other parts of the pipeline (e.g., as input to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param type: The processor type. The value should always be ``parse_json``. + :type type: ObservabilityPipelineParseJSONProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.field = field + self_.id = id + self_.include = include + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_json_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_parse_json_processor_type.py new file mode 100644 index 0000000000..1e60a6af4a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_json_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineParseJSONProcessorType(ModelSimple): + """ + The processor type. The value should always be `parse_json`. + + :param value: If omitted defaults to "parse_json". Must be one of ["parse_json"]. + :type value: str + """ + + allowed_values = { + "parse_json", + } + PARSE_JSON: ClassVar["ObservabilityPipelineParseJSONProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineParseJSONProcessorType.PARSE_JSON = ObservabilityPipelineParseJSONProcessorType("parse_json") diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_xml_processor.py b/datadog_api_client/v2/model/observability_pipeline_parse_xml_processor.py new file mode 100644 index 0000000000..4d7ae6b0bf --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_xml_processor.py @@ -0,0 +1,135 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor_type import ObservabilityPipelineParseXMLProcessorType + +class ObservabilityPipelineParseXMLProcessor(ModelNormal): + validations = { + "text_key": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor_type import ObservabilityPipelineParseXMLProcessorType + return { + "always_use_text_key": (bool,), + "attr_prefix": (str,), + "display_name": (str,), + "enabled": (bool,), + "field": (str,), + "id": (str,), + "include": (str,), + "include_attr": (bool,), + "parse_bool": (bool,), + "parse_null": (bool,), + "parse_number": (bool,), + "text_key": (str,), + "type": (ObservabilityPipelineParseXMLProcessorType,), + } + attribute_map = { + "always_use_text_key": "always_use_text_key", + "attr_prefix": "attr_prefix", + "display_name": "display_name", + "enabled": "enabled", + "field": "field", + "id": "id", + "include": "include", + "include_attr": "include_attr", + "parse_bool": "parse_bool", + "parse_null": "parse_null", + "parse_number": "parse_number", + "text_key": "text_key", + "type": "type", + } + + def __init__(self_, enabled: bool, field: str, id: str, include: str, type: ObservabilityPipelineParseXMLProcessorType, always_use_text_key: Union[bool, UnsetType]=unset, attr_prefix: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, include_attr: Union[bool, UnsetType]=unset, parse_bool: Union[bool, UnsetType]=unset, parse_null: Union[bool, UnsetType]=unset, parse_number: Union[bool, UnsetType]=unset, text_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``parse_xml`` processor parses XML from a specified field and extracts it into the event. + + **Supported pipeline types:** logs + + :param always_use_text_key: Whether to always use a text key for element content. + :type always_use_text_key: bool, optional + + :param attr_prefix: The prefix to use for XML attributes in the parsed output. + :type attr_prefix: str, optional + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param field: The name of the log field that contains an XML string. + :type field: str + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param include_attr: Whether to include XML attributes in the parsed output. + :type include_attr: bool, optional + + :param parse_bool: Whether to parse boolean values from strings. + :type parse_bool: bool, optional + + :param parse_null: Whether to parse null values. + :type parse_null: bool, optional + + :param parse_number: Whether to parse numeric values from strings. + :type parse_number: bool, optional + + :param text_key: The key name to use for text content within XML elements. Must be at least 1 character if specified. + :type text_key: str, optional + + :param type: The processor type. The value should always be ``parse_xml``. + :type type: ObservabilityPipelineParseXMLProcessorType + """ + if always_use_text_key is not unset: + kwargs["always_use_text_key"] = always_use_text_key + if attr_prefix is not unset: + kwargs["attr_prefix"] = attr_prefix + if display_name is not unset: + kwargs["display_name"] = display_name + if include_attr is not unset: + kwargs["include_attr"] = include_attr + if parse_bool is not unset: + kwargs["parse_bool"] = parse_bool + if parse_null is not unset: + kwargs["parse_null"] = parse_null + if parse_number is not unset: + kwargs["parse_number"] = parse_number + if text_key is not unset: + kwargs["text_key"] = text_key + super().__init__(kwargs) + + + self_.enabled = enabled + self_.field = field + self_.id = id + self_.include = include + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_parse_xml_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_parse_xml_processor_type.py new file mode 100644 index 0000000000..48f67bab85 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_parse_xml_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineParseXMLProcessorType(ModelSimple): + """ + The processor type. The value should always be `parse_xml`. + + :param value: If omitted defaults to "parse_xml". Must be one of ["parse_xml"]. + :type value: str + """ + + allowed_values = { + "parse_xml", + } + PARSE_XML: ClassVar["ObservabilityPipelineParseXMLProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineParseXMLProcessorType.PARSE_XML = ObservabilityPipelineParseXMLProcessorType("parse_xml") diff --git a/datadog_api_client/v2/model/observability_pipeline_quota_processor.py b/datadog_api_client/v2/model/observability_pipeline_quota_processor.py new file mode 100644 index 0000000000..bcf17446ca --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_quota_processor.py @@ -0,0 +1,143 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_quota_processor_limit import ObservabilityPipelineQuotaProcessorLimit + from datadog_api_client.v2.model.observability_pipeline_quota_processor_overflow_action import ObservabilityPipelineQuotaProcessorOverflowAction + from datadog_api_client.v2.model.observability_pipeline_quota_processor_override import ObservabilityPipelineQuotaProcessorOverride + from datadog_api_client.v2.model.observability_pipeline_quota_processor_type import ObservabilityPipelineQuotaProcessorType + +class ObservabilityPipelineQuotaProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_quota_processor_limit import ObservabilityPipelineQuotaProcessorLimit + from datadog_api_client.v2.model.observability_pipeline_quota_processor_overflow_action import ObservabilityPipelineQuotaProcessorOverflowAction + from datadog_api_client.v2.model.observability_pipeline_quota_processor_override import ObservabilityPipelineQuotaProcessorOverride + from datadog_api_client.v2.model.observability_pipeline_quota_processor_type import ObservabilityPipelineQuotaProcessorType + return { + "display_name": (str,), + "drop_events": (bool,), + "enabled": (bool,), + "id": (str,), + "ignore_when_missing_partitions": (bool,), + "include": (str,), + "limit": (ObservabilityPipelineQuotaProcessorLimit,), + "name": (str,), + "overflow_action": (ObservabilityPipelineQuotaProcessorOverflowAction,), + "overrides": ([ObservabilityPipelineQuotaProcessorOverride],), + "partition_fields": ([str],), + "too_many_buckets_action": (ObservabilityPipelineQuotaProcessorOverflowAction,), + "type": (ObservabilityPipelineQuotaProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "drop_events": "drop_events", + "enabled": "enabled", + "id": "id", + "ignore_when_missing_partitions": "ignore_when_missing_partitions", + "include": "include", + "limit": "limit", + "name": "name", + "overflow_action": "overflow_action", + "overrides": "overrides", + "partition_fields": "partition_fields", + "too_many_buckets_action": "too_many_buckets_action", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, limit: ObservabilityPipelineQuotaProcessorLimit, name: str, type: ObservabilityPipelineQuotaProcessorType, display_name: Union[str, UnsetType]=unset, drop_events: Union[bool, UnsetType]=unset, ignore_when_missing_partitions: Union[bool, UnsetType]=unset, overflow_action: Union[ObservabilityPipelineQuotaProcessorOverflowAction, UnsetType]=unset, overrides: Union[List[ObservabilityPipelineQuotaProcessorOverride], UnsetType]=unset, partition_fields: Union[List[str], UnsetType]=unset, too_many_buckets_action: Union[ObservabilityPipelineQuotaProcessorOverflowAction, UnsetType]=unset, **kwargs): + """ + The ``quota`` processor measures logging traffic for logs that match a specified filter. When the configured daily quota is met, the processor can drop or alert. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param drop_events: If set to ``true`` , logs that match the quota filter and are sent after the quota is exceeded are dropped. Logs that do not match the filter continue through the pipeline. **Note** : You can set either ``drop_events`` or ``overflow_action`` , but not both. + :type drop_events: bool, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param ignore_when_missing_partitions: If ``true`` , the processor skips quota checks when partition fields are missing from the logs. + :type ignore_when_missing_partitions: bool, optional + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param limit: The maximum amount of data or number of events allowed before the quota is enforced. Can be specified in bytes or events. + :type limit: ObservabilityPipelineQuotaProcessorLimit + + :param name: Name of the quota. + :type name: str + + :param overflow_action: The action to take when the quota or bucket limit is exceeded. Options: + + * ``drop`` : Drop the event. + * ``no_action`` : Let the event pass through. + * ``overflow_routing`` : Route to an overflow destination. + :type overflow_action: ObservabilityPipelineQuotaProcessorOverflowAction, optional + + :param overrides: A list of alternate quota rules that apply to specific sets of events, identified by matching field values. Each override can define a custom limit. + :type overrides: [ObservabilityPipelineQuotaProcessorOverride], optional + + :param partition_fields: A list of fields used to segment log traffic for quota enforcement. Quotas are tracked independently by unique combinations of these field values. + :type partition_fields: [str], optional + + :param too_many_buckets_action: The action to take when the quota or bucket limit is exceeded. Options: + + * ``drop`` : Drop the event. + * ``no_action`` : Let the event pass through. + * ``overflow_routing`` : Route to an overflow destination. + :type too_many_buckets_action: ObservabilityPipelineQuotaProcessorOverflowAction, optional + + :param type: The processor type. The value should always be ``quota``. + :type type: ObservabilityPipelineQuotaProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if drop_events is not unset: + kwargs["drop_events"] = drop_events + if ignore_when_missing_partitions is not unset: + kwargs["ignore_when_missing_partitions"] = ignore_when_missing_partitions + if overflow_action is not unset: + kwargs["overflow_action"] = overflow_action + if overrides is not unset: + kwargs["overrides"] = overrides + if partition_fields is not unset: + kwargs["partition_fields"] = partition_fields + if too_many_buckets_action is not unset: + kwargs["too_many_buckets_action"] = too_many_buckets_action + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.limit = limit + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_quota_processor_limit.py b/datadog_api_client/v2/model/observability_pipeline_quota_processor_limit.py new file mode 100644 index 0000000000..c19c20ba5c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_quota_processor_limit.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_quota_processor_limit_enforce_type import ObservabilityPipelineQuotaProcessorLimitEnforceType + +class ObservabilityPipelineQuotaProcessorLimit(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_quota_processor_limit_enforce_type import ObservabilityPipelineQuotaProcessorLimitEnforceType + return { + "enforce": (ObservabilityPipelineQuotaProcessorLimitEnforceType,), + "limit": (int,), + } + attribute_map = { + "enforce": "enforce", + "limit": "limit", + } + + def __init__(self_, enforce: ObservabilityPipelineQuotaProcessorLimitEnforceType, limit: int, **kwargs): + """ + The maximum amount of data or number of events allowed before the quota is enforced. Can be specified in bytes or events. + + :param enforce: Unit for quota enforcement in bytes for data size or events for count. + :type enforce: ObservabilityPipelineQuotaProcessorLimitEnforceType + + :param limit: The limit for quota enforcement. + :type limit: int + """ + super().__init__(kwargs) + + + self_.enforce = enforce + self_.limit = limit diff --git a/datadog_api_client/v2/model/observability_pipeline_quota_processor_limit_enforce_type.py b/datadog_api_client/v2/model/observability_pipeline_quota_processor_limit_enforce_type.py new file mode 100644 index 0000000000..bde00a07e6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_quota_processor_limit_enforce_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineQuotaProcessorLimitEnforceType(ModelSimple): + """ + Unit for quota enforcement in bytes for data size or events for count. + + :param value: Must be one of ["bytes", "events"]. + :type value: str + """ + + allowed_values = { + "bytes", + "events", + } + BYTES: ClassVar["ObservabilityPipelineQuotaProcessorLimitEnforceType"] + EVENTS: ClassVar["ObservabilityPipelineQuotaProcessorLimitEnforceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineQuotaProcessorLimitEnforceType.BYTES = ObservabilityPipelineQuotaProcessorLimitEnforceType("bytes") +ObservabilityPipelineQuotaProcessorLimitEnforceType.EVENTS = ObservabilityPipelineQuotaProcessorLimitEnforceType("events") diff --git a/datadog_api_client/v2/model/observability_pipeline_quota_processor_overflow_action.py b/datadog_api_client/v2/model/observability_pipeline_quota_processor_overflow_action.py new file mode 100644 index 0000000000..9c82bbd92b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_quota_processor_overflow_action.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineQuotaProcessorOverflowAction(ModelSimple): + """ + The action to take when the quota or bucket limit is exceeded. Options: + - `drop`: Drop the event. + - `no_action`: Let the event pass through. + - `overflow_routing`: Route to an overflow destination. + + :param value: Must be one of ["drop", "no_action", "overflow_routing"]. + :type value: str + """ + + allowed_values = { + "drop", + "no_action", + "overflow_routing", + } + DROP: ClassVar["ObservabilityPipelineQuotaProcessorOverflowAction"] + NO_ACTION: ClassVar["ObservabilityPipelineQuotaProcessorOverflowAction"] + OVERFLOW_ROUTING: ClassVar["ObservabilityPipelineQuotaProcessorOverflowAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineQuotaProcessorOverflowAction.DROP = ObservabilityPipelineQuotaProcessorOverflowAction("drop") +ObservabilityPipelineQuotaProcessorOverflowAction.NO_ACTION = ObservabilityPipelineQuotaProcessorOverflowAction("no_action") +ObservabilityPipelineQuotaProcessorOverflowAction.OVERFLOW_ROUTING = ObservabilityPipelineQuotaProcessorOverflowAction("overflow_routing") diff --git a/datadog_api_client/v2/model/observability_pipeline_quota_processor_override.py b/datadog_api_client/v2/model/observability_pipeline_quota_processor_override.py new file mode 100644 index 0000000000..5dba6b947e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_quota_processor_override.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_field_value import ObservabilityPipelineFieldValue + from datadog_api_client.v2.model.observability_pipeline_quota_processor_limit import ObservabilityPipelineQuotaProcessorLimit + +class ObservabilityPipelineQuotaProcessorOverride(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_field_value import ObservabilityPipelineFieldValue + from datadog_api_client.v2.model.observability_pipeline_quota_processor_limit import ObservabilityPipelineQuotaProcessorLimit + return { + "fields": ([ObservabilityPipelineFieldValue],), + "limit": (ObservabilityPipelineQuotaProcessorLimit,), + } + attribute_map = { + "fields": "fields", + "limit": "limit", + } + + def __init__(self_, fields: List[ObservabilityPipelineFieldValue], limit: ObservabilityPipelineQuotaProcessorLimit, **kwargs): + """ + Defines a custom quota limit that applies to specific log events based on matching field values. + + :param fields: A list of field matchers used to apply a specific override. If an event matches all listed key-value pairs, the corresponding override limit is enforced. + :type fields: [ObservabilityPipelineFieldValue] + + :param limit: The maximum amount of data or number of events allowed before the quota is enforced. Can be specified in bytes or events. + :type limit: ObservabilityPipelineQuotaProcessorLimit + """ + super().__init__(kwargs) + + + self_.fields = fields + self_.limit = limit diff --git a/datadog_api_client/v2/model/observability_pipeline_quota_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_quota_processor_type.py new file mode 100644 index 0000000000..a99ef32a99 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_quota_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineQuotaProcessorType(ModelSimple): + """ + The processor type. The value should always be `quota`. + + :param value: If omitted defaults to "quota". Must be one of ["quota"]. + :type value: str + """ + + allowed_values = { + "quota", + } + QUOTA: ClassVar["ObservabilityPipelineQuotaProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineQuotaProcessorType.QUOTA = ObservabilityPipelineQuotaProcessorType("quota") diff --git a/datadog_api_client/v2/model/observability_pipeline_reduce_processor.py b/datadog_api_client/v2/model/observability_pipeline_reduce_processor.py new file mode 100644 index 0000000000..8674da0313 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_reduce_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_reduce_processor_merge_strategy import ObservabilityPipelineReduceProcessorMergeStrategy + from datadog_api_client.v2.model.observability_pipeline_reduce_processor_type import ObservabilityPipelineReduceProcessorType + +class ObservabilityPipelineReduceProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_reduce_processor_merge_strategy import ObservabilityPipelineReduceProcessorMergeStrategy + from datadog_api_client.v2.model.observability_pipeline_reduce_processor_type import ObservabilityPipelineReduceProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "group_by": ([str],), + "id": (str,), + "include": (str,), + "merge_strategies": ([ObservabilityPipelineReduceProcessorMergeStrategy],), + "type": (ObservabilityPipelineReduceProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "group_by": "group_by", + "id": "id", + "include": "include", + "merge_strategies": "merge_strategies", + "type": "type", + } + + def __init__(self_, enabled: bool, group_by: List[str], id: str, include: str, merge_strategies: List[ObservabilityPipelineReduceProcessorMergeStrategy], type: ObservabilityPipelineReduceProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``reduce`` processor aggregates and merges logs based on matching keys and merge strategies. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param group_by: A list of fields used to group log events for merging. + :type group_by: [str] + + :param id: The unique identifier for this processor. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param merge_strategies: List of merge strategies defining how values from grouped events should be combined. + :type merge_strategies: [ObservabilityPipelineReduceProcessorMergeStrategy] + + :param type: The processor type. The value should always be ``reduce``. + :type type: ObservabilityPipelineReduceProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.group_by = group_by + self_.id = id + self_.include = include + self_.merge_strategies = merge_strategies + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_reduce_processor_merge_strategy.py b/datadog_api_client/v2/model/observability_pipeline_reduce_processor_merge_strategy.py new file mode 100644 index 0000000000..284d061da9 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_reduce_processor_merge_strategy.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_reduce_processor_merge_strategy_strategy import ObservabilityPipelineReduceProcessorMergeStrategyStrategy + +class ObservabilityPipelineReduceProcessorMergeStrategy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_reduce_processor_merge_strategy_strategy import ObservabilityPipelineReduceProcessorMergeStrategyStrategy + return { + "path": (str,), + "strategy": (ObservabilityPipelineReduceProcessorMergeStrategyStrategy,), + } + attribute_map = { + "path": "path", + "strategy": "strategy", + } + + def __init__(self_, path: str, strategy: ObservabilityPipelineReduceProcessorMergeStrategyStrategy, **kwargs): + """ + Defines how a specific field should be merged across grouped events. + + :param path: The field path in the log event. + :type path: str + + :param strategy: The merge strategy to apply. + :type strategy: ObservabilityPipelineReduceProcessorMergeStrategyStrategy + """ + super().__init__(kwargs) + + + self_.path = path + self_.strategy = strategy diff --git a/datadog_api_client/v2/model/observability_pipeline_reduce_processor_merge_strategy_strategy.py b/datadog_api_client/v2/model/observability_pipeline_reduce_processor_merge_strategy_strategy.py new file mode 100644 index 0000000000..eb4a1b5f9d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_reduce_processor_merge_strategy_strategy.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineReduceProcessorMergeStrategyStrategy(ModelSimple): + """ + The merge strategy to apply. + + :param value: Must be one of ["discard", "retain", "sum", "max", "min", "array", "concat", "concat_newline", "concat_raw", "shortest_array", "longest_array", "flat_unique"]. + :type value: str + """ + + allowed_values = { + "discard", + "retain", + "sum", + "max", + "min", + "array", + "concat", + "concat_newline", + "concat_raw", + "shortest_array", + "longest_array", + "flat_unique", + } + DISCARD: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + RETAIN: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + SUM: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + MAX: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + MIN: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + ARRAY: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + CONCAT: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + CONCAT_NEWLINE: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + CONCAT_RAW: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + SHORTEST_ARRAY: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + LONGEST_ARRAY: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + FLAT_UNIQUE: ClassVar["ObservabilityPipelineReduceProcessorMergeStrategyStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.DISCARD = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("discard") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.RETAIN = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("retain") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.SUM = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("sum") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.MAX = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("max") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.MIN = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("min") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.ARRAY = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("array") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.CONCAT = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("concat") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.CONCAT_NEWLINE = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("concat_newline") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.CONCAT_RAW = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("concat_raw") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.SHORTEST_ARRAY = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("shortest_array") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.LONGEST_ARRAY = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("longest_array") +ObservabilityPipelineReduceProcessorMergeStrategyStrategy.FLAT_UNIQUE = ObservabilityPipelineReduceProcessorMergeStrategyStrategy("flat_unique") diff --git a/datadog_api_client/v2/model/observability_pipeline_reduce_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_reduce_processor_type.py new file mode 100644 index 0000000000..caee79039d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_reduce_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineReduceProcessorType(ModelSimple): + """ + The processor type. The value should always be `reduce`. + + :param value: If omitted defaults to "reduce". Must be one of ["reduce"]. + :type value: str + """ + + allowed_values = { + "reduce", + } + REDUCE: ClassVar["ObservabilityPipelineReduceProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineReduceProcessorType.REDUCE = ObservabilityPipelineReduceProcessorType("reduce") diff --git a/datadog_api_client/v2/model/observability_pipeline_remove_fields_processor.py b/datadog_api_client/v2/model/observability_pipeline_remove_fields_processor.py new file mode 100644 index 0000000000..9b19fc75e8 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_remove_fields_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor_type import ObservabilityPipelineRemoveFieldsProcessorType + +class ObservabilityPipelineRemoveFieldsProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor_type import ObservabilityPipelineRemoveFieldsProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "fields": ([str],), + "id": (str,), + "include": (str,), + "type": (ObservabilityPipelineRemoveFieldsProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "fields": "fields", + "id": "id", + "include": "include", + "type": "type", + } + + def __init__(self_, enabled: bool, fields: List[str], id: str, include: str, type: ObservabilityPipelineRemoveFieldsProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``remove_fields`` processor deletes specified fields from logs. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param fields: A list of field names to be removed from each log event. + :type fields: [str] + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param type: The processor type. The value should always be ``remove_fields``. + :type type: ObservabilityPipelineRemoveFieldsProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.fields = fields + self_.id = id + self_.include = include + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_remove_fields_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_remove_fields_processor_type.py new file mode 100644 index 0000000000..60773823a5 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_remove_fields_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineRemoveFieldsProcessorType(ModelSimple): + """ + The processor type. The value should always be `remove_fields`. + + :param value: If omitted defaults to "remove_fields". Must be one of ["remove_fields"]. + :type value: str + """ + + allowed_values = { + "remove_fields", + } + REMOVE_FIELDS: ClassVar["ObservabilityPipelineRemoveFieldsProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineRemoveFieldsProcessorType.REMOVE_FIELDS = ObservabilityPipelineRemoveFieldsProcessorType("remove_fields") diff --git a/datadog_api_client/v2/model/observability_pipeline_rename_fields_processor.py b/datadog_api_client/v2/model/observability_pipeline_rename_fields_processor.py new file mode 100644 index 0000000000..c4b6626e20 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rename_fields_processor.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor_field import ObservabilityPipelineRenameFieldsProcessorField + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor_type import ObservabilityPipelineRenameFieldsProcessorType + +class ObservabilityPipelineRenameFieldsProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor_field import ObservabilityPipelineRenameFieldsProcessorField + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor_type import ObservabilityPipelineRenameFieldsProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "fields": ([ObservabilityPipelineRenameFieldsProcessorField],), + "id": (str,), + "include": (str,), + "type": (ObservabilityPipelineRenameFieldsProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "fields": "fields", + "id": "id", + "include": "include", + "type": "type", + } + + def __init__(self_, enabled: bool, fields: List[ObservabilityPipelineRenameFieldsProcessorField], id: str, include: str, type: ObservabilityPipelineRenameFieldsProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``rename_fields`` processor changes field names. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param fields: A list of rename rules specifying which fields to rename in the event, what to rename them to, and whether to preserve the original fields. + :type fields: [ObservabilityPipelineRenameFieldsProcessorField] + + :param id: A unique identifier for this component. Used to reference this component in other parts of the pipeline (e.g., as input to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param type: The processor type. The value should always be ``rename_fields``. + :type type: ObservabilityPipelineRenameFieldsProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.fields = fields + self_.id = id + self_.include = include + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_rename_fields_processor_field.py b/datadog_api_client/v2/model/observability_pipeline_rename_fields_processor_field.py new file mode 100644 index 0000000000..8e086beeab --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rename_fields_processor_field.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineRenameFieldsProcessorField(ModelNormal): + @cached_property + def openapi_types(_): + return { + "destination": (str,), + "preserve_source": (bool,), + "source": (str,), + } + attribute_map = { + "destination": "destination", + "preserve_source": "preserve_source", + "source": "source", + } + + def __init__(self_, destination: str, preserve_source: bool, source: str, **kwargs): + """ + Defines how to rename a field in log events. + + :param destination: The field name to assign the renamed value to. + :type destination: str + + :param preserve_source: Indicates whether the original field, that is received from the source, should be kept ( ``true`` ) or removed ( ``false`` ) after renaming. + :type preserve_source: bool + + :param source: The original field name in the log event that should be renamed. + :type source: str + """ + super().__init__(kwargs) + + + self_.destination = destination + self_.preserve_source = preserve_source + self_.source = source diff --git a/datadog_api_client/v2/model/observability_pipeline_rename_fields_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_rename_fields_processor_type.py new file mode 100644 index 0000000000..c75c7891ad --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rename_fields_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineRenameFieldsProcessorType(ModelSimple): + """ + The processor type. The value should always be `rename_fields`. + + :param value: If omitted defaults to "rename_fields". Must be one of ["rename_fields"]. + :type value: str + """ + + allowed_values = { + "rename_fields", + } + RENAME_FIELDS: ClassVar["ObservabilityPipelineRenameFieldsProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineRenameFieldsProcessorType.RENAME_FIELDS = ObservabilityPipelineRenameFieldsProcessorType("rename_fields") diff --git a/datadog_api_client/v2/model/observability_pipeline_rename_metric_tags_processor.py b/datadog_api_client/v2/model/observability_pipeline_rename_metric_tags_processor.py new file mode 100644 index 0000000000..450982b6e2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rename_metric_tags_processor.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor_tag import ObservabilityPipelineRenameMetricTagsProcessorTag + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor_type import ObservabilityPipelineRenameMetricTagsProcessorType + +class ObservabilityPipelineRenameMetricTagsProcessor(ModelNormal): + validations = { + "tags": { + "max_items": 15, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor_tag import ObservabilityPipelineRenameMetricTagsProcessorTag + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor_type import ObservabilityPipelineRenameMetricTagsProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "tags": ([ObservabilityPipelineRenameMetricTagsProcessorTag],), + "type": (ObservabilityPipelineRenameMetricTagsProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "tags": "tags", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, tags: List[ObservabilityPipelineRenameMetricTagsProcessorTag], type: ObservabilityPipelineRenameMetricTagsProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``rename_metric_tags`` processor changes the keys of tags on metrics. + + **Supported pipeline types:** metrics + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which metrics this processor targets. + :type include: str + + :param tags: A list of rename rules specifying which tag keys to rename on each metric. + :type tags: [ObservabilityPipelineRenameMetricTagsProcessorTag] + + :param type: The processor type. The value must be ``rename_metric_tags``. + :type type: ObservabilityPipelineRenameMetricTagsProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.tags = tags + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_rename_metric_tags_processor_tag.py b/datadog_api_client/v2/model/observability_pipeline_rename_metric_tags_processor_tag.py new file mode 100644 index 0000000000..cea6b95bec --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rename_metric_tags_processor_tag.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineRenameMetricTagsProcessorTag(ModelNormal): + @cached_property + def openapi_types(_): + return { + "rename_to": (str,), + "tag": (str,), + } + attribute_map = { + "rename_to": "rename_to", + "tag": "tag", + } + + def __init__(self_, rename_to: str, tag: str, **kwargs): + """ + Defines how to rename a tag on metric events. + + :param rename_to: The new tag key to assign in place of the original. + :type rename_to: str + + :param tag: The original tag key on the metric event. + :type tag: str + """ + super().__init__(kwargs) + + + self_.rename_to = rename_to + self_.tag = tag diff --git a/datadog_api_client/v2/model/observability_pipeline_rename_metric_tags_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_rename_metric_tags_processor_type.py new file mode 100644 index 0000000000..5c59445d97 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rename_metric_tags_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineRenameMetricTagsProcessorType(ModelSimple): + """ + The processor type. The value must be `rename_metric_tags`. + + :param value: If omitted defaults to "rename_metric_tags". Must be one of ["rename_metric_tags"]. + :type value: str + """ + + allowed_values = { + "rename_metric_tags", + } + RENAME_METRIC_TAGS: ClassVar["ObservabilityPipelineRenameMetricTagsProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineRenameMetricTagsProcessorType.RENAME_METRIC_TAGS = ObservabilityPipelineRenameMetricTagsProcessorType("rename_metric_tags") diff --git a/datadog_api_client/v2/model/observability_pipeline_rsyslog_destination.py b/datadog_api_client/v2/model/observability_pipeline_rsyslog_destination.py new file mode 100644 index 0000000000..bfebfc3730 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rsyslog_destination.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination_type import ObservabilityPipelineRsyslogDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineRsyslogDestination(ModelNormal): + validations = { + "keepalive": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination_type import ObservabilityPipelineRsyslogDestinationType + return { + "buffer": (ObservabilityPipelineBufferOptions,), + "endpoint_url_key": (str,), + "id": (str,), + "inputs": ([str],), + "keepalive": (int,), + "tls": (ObservabilityPipelineTls,), + "type": (ObservabilityPipelineRsyslogDestinationType,), + } + attribute_map = { + "buffer": "buffer", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "inputs": "inputs", + "keepalive": "keepalive", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineRsyslogDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, keepalive: Union[int, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, **kwargs): + """ + The ``rsyslog`` destination forwards logs to an external ``rsyslog`` server over TCP or UDP using the syslog protocol. + + **Supported pipeline types:** logs + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the syslog server endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param keepalive: Optional socket keepalive duration in milliseconds. + :type keepalive: int, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param type: The destination type. The value should always be ``rsyslog``. + :type type: ObservabilityPipelineRsyslogDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if keepalive is not unset: + kwargs["keepalive"] = keepalive + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_rsyslog_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_rsyslog_destination_type.py new file mode 100644 index 0000000000..82ad358c89 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rsyslog_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineRsyslogDestinationType(ModelSimple): + """ + The destination type. The value should always be `rsyslog`. + + :param value: If omitted defaults to "rsyslog". Must be one of ["rsyslog"]. + :type value: str + """ + + allowed_values = { + "rsyslog", + } + RSYSLOG: ClassVar["ObservabilityPipelineRsyslogDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineRsyslogDestinationType.RSYSLOG = ObservabilityPipelineRsyslogDestinationType("rsyslog") diff --git a/datadog_api_client/v2/model/observability_pipeline_rsyslog_source.py b/datadog_api_client/v2/model/observability_pipeline_rsyslog_source.py new file mode 100644 index 0000000000..dc30c180ca --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rsyslog_source.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_syslog_source_mode import ObservabilityPipelineSyslogSourceMode + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source_type import ObservabilityPipelineRsyslogSourceType + +class ObservabilityPipelineRsyslogSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_syslog_source_mode import ObservabilityPipelineSyslogSourceMode + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source_type import ObservabilityPipelineRsyslogSourceType + return { + "address_key": (str,), + "id": (str,), + "mode": (ObservabilityPipelineSyslogSourceMode,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineRsyslogSourceType,), + } + attribute_map = { + "address_key": "address_key", + "id": "id", + "mode": "mode", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, mode: ObservabilityPipelineSyslogSourceMode, type: ObservabilityPipelineRsyslogSourceType, address_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, **kwargs): + """ + The ``rsyslog`` source listens for logs over TCP or UDP from an ``rsyslog`` server using the syslog protocol. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the syslog receiver. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param mode: Protocol used by the syslog source to receive messages. + :type mode: ObservabilityPipelineSyslogSourceMode + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. The value should always be ``rsyslog``. + :type type: ObservabilityPipelineRsyslogSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.mode = mode + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_rsyslog_source_type.py b/datadog_api_client/v2/model/observability_pipeline_rsyslog_source_type.py new file mode 100644 index 0000000000..f5e25ea4ab --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_rsyslog_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineRsyslogSourceType(ModelSimple): + """ + The source type. The value should always be `rsyslog`. + + :param value: If omitted defaults to "rsyslog". Must be one of ["rsyslog"]. + :type value: str + """ + + allowed_values = { + "rsyslog", + } + RSYSLOG: ClassVar["ObservabilityPipelineRsyslogSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineRsyslogSourceType.RSYSLOG = ObservabilityPipelineRsyslogSourceType("rsyslog") diff --git a/datadog_api_client/v2/model/observability_pipeline_sample_processor.py b/datadog_api_client/v2/model/observability_pipeline_sample_processor.py new file mode 100644 index 0000000000..949ac71956 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sample_processor.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sample_processor_type import ObservabilityPipelineSampleProcessorType + +class ObservabilityPipelineSampleProcessor(ModelNormal): + validations = { + "group_by": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sample_processor_type import ObservabilityPipelineSampleProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "group_by": ([str],), + "id": (str,), + "include": (str,), + "percentage": (float,), + "type": (ObservabilityPipelineSampleProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "group_by": "group_by", + "id": "id", + "include": "include", + "percentage": "percentage", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, percentage: float, type: ObservabilityPipelineSampleProcessorType, display_name: Union[str, UnsetType]=unset, group_by: Union[List[str], UnsetType]=unset, **kwargs): + """ + The ``sample`` processor allows probabilistic sampling of logs at a fixed rate. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param group_by: Optional list of fields to group events by. Each group is sampled independently. + :type group_by: [str], optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param percentage: The percentage of logs to sample. + :type percentage: float + + :param type: The processor type. The value should always be ``sample``. + :type type: ObservabilityPipelineSampleProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.percentage = percentage + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_sample_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_sample_processor_type.py new file mode 100644 index 0000000000..c220f9c310 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sample_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSampleProcessorType(ModelSimple): + """ + The processor type. The value should always be `sample`. + + :param value: If omitted defaults to "sample". Must be one of ["sample"]. + :type value: str + """ + + allowed_values = { + "sample", + } + SAMPLE: ClassVar["ObservabilityPipelineSampleProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSampleProcessorType.SAMPLE = ObservabilityPipelineSampleProcessorType("sample") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor.py new file mode 100644 index 0000000000..df16a63a52 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_rule import ObservabilityPipelineSensitiveDataScannerProcessorRule + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_type import ObservabilityPipelineSensitiveDataScannerProcessorType + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_redact import ObservabilityPipelineSensitiveDataScannerProcessorActionRedact + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_hash import ObservabilityPipelineSensitiveDataScannerProcessorActionHash + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedact + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_custom_pattern import ObservabilityPipelineSensitiveDataScannerProcessorCustomPattern + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPattern + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_include import ObservabilityPipelineSensitiveDataScannerProcessorScopeInclude + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_exclude import ObservabilityPipelineSensitiveDataScannerProcessorScopeExclude + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_all import ObservabilityPipelineSensitiveDataScannerProcessorScopeAll + +class ObservabilityPipelineSensitiveDataScannerProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_rule import ObservabilityPipelineSensitiveDataScannerProcessorRule + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_type import ObservabilityPipelineSensitiveDataScannerProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "rules": ([ObservabilityPipelineSensitiveDataScannerProcessorRule],), + "type": (ObservabilityPipelineSensitiveDataScannerProcessorType,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "rules": "rules", + "type": "type", + } + + def __init__(self_, enabled: bool, id: str, include: str, rules: List[ObservabilityPipelineSensitiveDataScannerProcessorRule], type: ObservabilityPipelineSensitiveDataScannerProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``sensitive_data_scanner`` processor detects and optionally redacts sensitive data in log events. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param rules: A list of rules for identifying and acting on sensitive data patterns. + :type rules: [ObservabilityPipelineSensitiveDataScannerProcessorRule] + + :param type: The processor type. The value should always be ``sensitive_data_scanner``. + :type type: ObservabilityPipelineSensitiveDataScannerProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.rules = rules + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action.py new file mode 100644 index 0000000000..4eb4809885 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSensitiveDataScannerProcessorAction(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Defines what action to take when sensitive data is matched. + + :param action: Action type that completely replaces the matched sensitive data with a fixed replacement string to remove all visibility. + :type action: ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction + + :param options: Configuration for fully redacting sensitive data. + :type options: ObservabilityPipelineSensitiveDataScannerProcessorActionRedactOptions + """ + 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.observability_pipeline_sensitive_data_scanner_processor_action_redact import ObservabilityPipelineSensitiveDataScannerProcessorActionRedact + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_hash import ObservabilityPipelineSensitiveDataScannerProcessorActionHash + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedact + return { + "oneOf": [ + ObservabilityPipelineSensitiveDataScannerProcessorActionRedact, + ObservabilityPipelineSensitiveDataScannerProcessorActionHash, + ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedact, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_hash.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_hash.py new file mode 100644 index 0000000000..d366704a20 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_hash.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_hash_action import ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction + +class ObservabilityPipelineSensitiveDataScannerProcessorActionHash(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_hash_action import ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction + return { + "action": (ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction,), + "options": (dict,), + } + attribute_map = { + "action": "action", + "options": "options", + } + + def __init__(self_, action: ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction, options: Union[dict, UnsetType]=unset, **kwargs): + """ + Configuration for hashing matched sensitive values. + + :param action: Action type that replaces the matched sensitive data with a hashed representation, preserving structure while securing content. + :type action: ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction + + :param options: Optional settings for the hash action. When omitted or empty, matched sensitive data is + replaced with a deterministic hashed value that preserves structure for analytics while + protecting the original content. Reserved for future hash configuration (for example, algorithm or salt). + :type options: dict, optional + """ + if options is not unset: + kwargs["options"] = options + super().__init__(kwargs) + + + self_.action = action diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_hash_action.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_hash_action.py new file mode 100644 index 0000000000..9a359fda43 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_hash_action.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction(ModelSimple): + """ + Action type that replaces the matched sensitive data with a hashed representation, preserving structure while securing content. + + :param value: If omitted defaults to "hash". Must be one of ["hash"]. + :type value: str + """ + + allowed_values = { + "hash", + } + HASH: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction.HASH = ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction("hash") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact.py new file mode 100644 index 0000000000..f09c5c3a7f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_action import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptions + +class ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedact(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_action import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptions + return { + "action": (ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction,), + "options": (ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptions,), + } + attribute_map = { + "action": "action", + "options": "options", + } + + def __init__(self_, action: ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction, options: ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptions, **kwargs): + """ + Configuration for partially redacting matched sensitive data. + + :param action: Action type that redacts part of the sensitive data while preserving a configurable number of characters, typically used for masking purposes (e.g., show last 4 digits of a credit card). + :type action: ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction + + :param options: Controls how partial redaction is applied, including character count and direction. + :type options: ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptions + """ + super().__init__(kwargs) + + + self_.action = action + self_.options = options diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_action.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_action.py new file mode 100644 index 0000000000..a567ec664f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_action.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction(ModelSimple): + """ + Action type that redacts part of the sensitive data while preserving a configurable number of characters, typically used for masking purposes (e.g., show last 4 digits of a credit card). + + :param value: If omitted defaults to "partial_redact". Must be one of ["partial_redact"]. + :type value: str + """ + + allowed_values = { + "partial_redact", + } + PARTIAL_REDACT: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction.PARTIAL_REDACT = ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction("partial_redact") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options.py new file mode 100644 index 0000000000..e9d5285205 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options_direction import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection + +class ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options_direction import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection + return { + "characters": (int,), + "direction": (ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection,), + } + attribute_map = { + "characters": "characters", + "direction": "direction", + } + + def __init__(self_, characters: int, direction: ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection, **kwargs): + """ + Controls how partial redaction is applied, including character count and direction. + + :param characters: Number of characters to leave visible from the start or end of the matched value; the rest are redacted. + :type characters: int + + :param direction: Indicates whether to redact characters from the first or last part of the matched value. + :type direction: ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection + """ + super().__init__(kwargs) + + + self_.characters = characters + self_.direction = direction diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options_direction.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options_direction.py new file mode 100644 index 0000000000..0a13f6a535 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options_direction.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection(ModelSimple): + """ + Indicates whether to redact characters from the first or last part of the matched value. + + :param value: Must be one of ["first", "last"]. + :type value: str + """ + + allowed_values = { + "first", + "last", + } + FIRST: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection"] + LAST: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection.FIRST = ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection("first") +ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection.LAST = ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection("last") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_redact.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_redact.py new file mode 100644 index 0000000000..ca437bcf59 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_redact.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_redact_action import ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_redact_options import ObservabilityPipelineSensitiveDataScannerProcessorActionRedactOptions + +class ObservabilityPipelineSensitiveDataScannerProcessorActionRedact(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_redact_action import ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_redact_options import ObservabilityPipelineSensitiveDataScannerProcessorActionRedactOptions + return { + "action": (ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction,), + "options": (ObservabilityPipelineSensitiveDataScannerProcessorActionRedactOptions,), + } + attribute_map = { + "action": "action", + "options": "options", + } + + def __init__(self_, action: ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction, options: ObservabilityPipelineSensitiveDataScannerProcessorActionRedactOptions, **kwargs): + """ + Configuration for completely redacting matched sensitive data. + + :param action: Action type that completely replaces the matched sensitive data with a fixed replacement string to remove all visibility. + :type action: ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction + + :param options: Configuration for fully redacting sensitive data. + :type options: ObservabilityPipelineSensitiveDataScannerProcessorActionRedactOptions + """ + super().__init__(kwargs) + + + self_.action = action + self_.options = options diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_redact_action.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_redact_action.py new file mode 100644 index 0000000000..fe29063427 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_redact_action.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction(ModelSimple): + """ + Action type that completely replaces the matched sensitive data with a fixed replacement string to remove all visibility. + + :param value: If omitted defaults to "redact". Must be one of ["redact"]. + :type value: str + """ + + allowed_values = { + "redact", + } + REDACT: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction.REDACT = ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction("redact") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_redact_options.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_redact_options.py new file mode 100644 index 0000000000..25adfe6459 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_action_redact_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSensitiveDataScannerProcessorActionRedactOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "replace": (str,), + } + attribute_map = { + "replace": "replace", + } + + def __init__(self_, replace: str, **kwargs): + """ + Configuration for fully redacting sensitive data. + + :param replace: The string used to replace matched sensitive data (for example, "***" or "[REDACTED]"). + :type replace: str + """ + super().__init__(kwargs) + + + self_.replace = replace diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_custom_pattern.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_custom_pattern.py new file mode 100644 index 0000000000..99fa4b8370 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_custom_pattern.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_custom_pattern_options import ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_custom_pattern_type import ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType + +class ObservabilityPipelineSensitiveDataScannerProcessorCustomPattern(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_custom_pattern_options import ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_custom_pattern_type import ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType + return { + "options": (ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternOptions,), + "type": (ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType,), + } + attribute_map = { + "options": "options", + "type": "type", + } + + def __init__(self_, options: ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternOptions, type: ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType, **kwargs): + """ + Defines a custom regex-based pattern for identifying sensitive data in logs. + + :param options: Options for defining a custom regex pattern. + :type options: ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternOptions + + :param type: Indicates a custom regular expression is used for matching. + :type type: ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType + """ + super().__init__(kwargs) + + + self_.options = options + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_custom_pattern_options.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_custom_pattern_options.py new file mode 100644 index 0000000000..1184bddae9 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_custom_pattern_options.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "rule": (str,), + } + attribute_map = { + "description": "description", + "rule": "rule", + } + + def __init__(self_, rule: str, description: Union[str, UnsetType]=unset, **kwargs): + """ + Options for defining a custom regex pattern. + + :param description: Human-readable description providing context about a sensitive data scanner rule + :type description: str, optional + + :param rule: A regular expression used to detect sensitive values. Must be a valid regex. + :type rule: str + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.rule = rule diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_custom_pattern_type.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_custom_pattern_type.py new file mode 100644 index 0000000000..49b5967871 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_custom_pattern_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType(ModelSimple): + """ + Indicates a custom regular expression is used for matching. + + :param value: If omitted defaults to "custom". Must be one of ["custom"]. + :type value: str + """ + + allowed_values = { + "custom", + } + CUSTOM: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType.CUSTOM = ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType("custom") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_keyword_options.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_keyword_options.py new file mode 100644 index 0000000000..a5703ce863 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_keyword_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSensitiveDataScannerProcessorKeywordOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "keywords": ([str],), + "proximity": (int,), + } + attribute_map = { + "keywords": "keywords", + "proximity": "proximity", + } + + def __init__(self_, keywords: List[str], proximity: int, **kwargs): + """ + Configuration for keywords used to reinforce sensitive data pattern detection. + + :param keywords: A list of keywords to match near the sensitive pattern. + :type keywords: [str] + + :param proximity: Maximum number of tokens between a keyword and a sensitive value match. + :type proximity: int + """ + super().__init__(kwargs) + + + self_.keywords = keywords + self_.proximity = proximity diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_library_pattern.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_library_pattern.py new file mode 100644 index 0000000000..2e803b8b0f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_library_pattern.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern_options import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern_type import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType + +class ObservabilityPipelineSensitiveDataScannerProcessorLibraryPattern(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern_options import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern_type import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType + return { + "options": (ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternOptions,), + "type": (ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType,), + } + attribute_map = { + "options": "options", + "type": "type", + } + + def __init__(self_, options: ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternOptions, type: ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType, **kwargs): + """ + Specifies a pattern from Datadog’s sensitive data detection library to match known sensitive data types. + + :param options: Options for selecting a predefined library pattern and enabling keyword support. + :type options: ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternOptions + + :param type: Indicates that a predefined library pattern is used. + :type type: ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType + """ + super().__init__(kwargs) + + + self_.options = options + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_library_pattern_options.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_library_pattern_options.py new file mode 100644 index 0000000000..c7b2597adc --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_library_pattern_options.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "id": (str,), + "use_recommended_keywords": (bool,), + } + attribute_map = { + "description": "description", + "id": "id", + "use_recommended_keywords": "use_recommended_keywords", + } + + def __init__(self_, id: str, description: Union[str, UnsetType]=unset, use_recommended_keywords: Union[bool, UnsetType]=unset, **kwargs): + """ + Options for selecting a predefined library pattern and enabling keyword support. + + :param description: Human-readable description providing context about a sensitive data scanner rule + :type description: str, optional + + :param id: Identifier for a predefined pattern from the sensitive data scanner pattern library. + :type id: str + + :param use_recommended_keywords: Whether to augment the pattern with recommended keywords (optional). + :type use_recommended_keywords: bool, optional + """ + if description is not unset: + kwargs["description"] = description + if use_recommended_keywords is not unset: + kwargs["use_recommended_keywords"] = use_recommended_keywords + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_library_pattern_type.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_library_pattern_type.py new file mode 100644 index 0000000000..6ab56ea937 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_library_pattern_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType(ModelSimple): + """ + Indicates that a predefined library pattern is used. + + :param value: If omitted defaults to "library". Must be one of ["library"]. + :type value: str + """ + + allowed_values = { + "library", + } + LIBRARY: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType.LIBRARY = ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType("library") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_pattern.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_pattern.py new file mode 100644 index 0000000000..917c17cf76 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_pattern.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSensitiveDataScannerProcessorPattern(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Pattern detection configuration for identifying sensitive data using either a custom regex or a library reference. + + :param options: Options for defining a custom regex pattern. + :type options: ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternOptions + + :param type: Indicates a custom regular expression is used for matching. + :type type: ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType + """ + 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.observability_pipeline_sensitive_data_scanner_processor_custom_pattern import ObservabilityPipelineSensitiveDataScannerProcessorCustomPattern + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPattern + return { + "oneOf": [ + ObservabilityPipelineSensitiveDataScannerProcessorCustomPattern, + ObservabilityPipelineSensitiveDataScannerProcessorLibraryPattern, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_rule.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_rule.py new file mode 100644 index 0000000000..ba5e7f98a7 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_rule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_keyword_options import ObservabilityPipelineSensitiveDataScannerProcessorKeywordOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action import ObservabilityPipelineSensitiveDataScannerProcessorAction + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_pattern import ObservabilityPipelineSensitiveDataScannerProcessorPattern + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope import ObservabilityPipelineSensitiveDataScannerProcessorScope + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_redact import ObservabilityPipelineSensitiveDataScannerProcessorActionRedact + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_hash import ObservabilityPipelineSensitiveDataScannerProcessorActionHash + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedact + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_custom_pattern import ObservabilityPipelineSensitiveDataScannerProcessorCustomPattern + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPattern + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_include import ObservabilityPipelineSensitiveDataScannerProcessorScopeInclude + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_exclude import ObservabilityPipelineSensitiveDataScannerProcessorScopeExclude + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_all import ObservabilityPipelineSensitiveDataScannerProcessorScopeAll + +class ObservabilityPipelineSensitiveDataScannerProcessorRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_keyword_options import ObservabilityPipelineSensitiveDataScannerProcessorKeywordOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action import ObservabilityPipelineSensitiveDataScannerProcessorAction + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_pattern import ObservabilityPipelineSensitiveDataScannerProcessorPattern + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope import ObservabilityPipelineSensitiveDataScannerProcessorScope + return { + "keyword_options": (ObservabilityPipelineSensitiveDataScannerProcessorKeywordOptions,), + "name": (str,), + "on_match": (ObservabilityPipelineSensitiveDataScannerProcessorAction,), + "pattern": (ObservabilityPipelineSensitiveDataScannerProcessorPattern,), + "scope": (ObservabilityPipelineSensitiveDataScannerProcessorScope,), + "tags": ([str],), + } + attribute_map = { + "keyword_options": "keyword_options", + "name": "name", + "on_match": "on_match", + "pattern": "pattern", + "scope": "scope", + "tags": "tags", + } + + def __init__(self_, name: str, on_match: Union[ObservabilityPipelineSensitiveDataScannerProcessorAction, ObservabilityPipelineSensitiveDataScannerProcessorActionRedact, ObservabilityPipelineSensitiveDataScannerProcessorActionHash, ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedact], pattern: Union[ObservabilityPipelineSensitiveDataScannerProcessorPattern, ObservabilityPipelineSensitiveDataScannerProcessorCustomPattern, ObservabilityPipelineSensitiveDataScannerProcessorLibraryPattern], scope: Union[ObservabilityPipelineSensitiveDataScannerProcessorScope, ObservabilityPipelineSensitiveDataScannerProcessorScopeInclude, ObservabilityPipelineSensitiveDataScannerProcessorScopeExclude, ObservabilityPipelineSensitiveDataScannerProcessorScopeAll], keyword_options: Union[ObservabilityPipelineSensitiveDataScannerProcessorKeywordOptions, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Defines a rule for detecting sensitive data, including matching pattern, scope, and the action to take. + + :param keyword_options: Configuration for keywords used to reinforce sensitive data pattern detection. + :type keyword_options: ObservabilityPipelineSensitiveDataScannerProcessorKeywordOptions, optional + + :param name: A name identifying the rule. + :type name: str + + :param on_match: Defines what action to take when sensitive data is matched. + :type on_match: ObservabilityPipelineSensitiveDataScannerProcessorAction + + :param pattern: Pattern detection configuration for identifying sensitive data using either a custom regex or a library reference. + :type pattern: ObservabilityPipelineSensitiveDataScannerProcessorPattern + + :param scope: Determines which parts of the log the pattern-matching rule should be applied to. + :type scope: ObservabilityPipelineSensitiveDataScannerProcessorScope + + :param tags: Tags assigned to this rule for filtering and classification. + :type tags: [str], optional + """ + if keyword_options is not unset: + kwargs["keyword_options"] = keyword_options + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.name = name + self_.on_match = on_match + self_.pattern = pattern + self_.scope = scope diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope.py new file mode 100644 index 0000000000..9bda01ebf1 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSensitiveDataScannerProcessorScope(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Determines which parts of the log the pattern-matching rule should be applied to. + + :param options: Fields to which the scope rule applies. + :type options: ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions + + :param target: Applies the rule only to included fields. + :type target: ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget + """ + 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.observability_pipeline_sensitive_data_scanner_processor_scope_include import ObservabilityPipelineSensitiveDataScannerProcessorScopeInclude + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_exclude import ObservabilityPipelineSensitiveDataScannerProcessorScopeExclude + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_all import ObservabilityPipelineSensitiveDataScannerProcessorScopeAll + return { + "oneOf": [ + ObservabilityPipelineSensitiveDataScannerProcessorScopeInclude, + ObservabilityPipelineSensitiveDataScannerProcessorScopeExclude, + ObservabilityPipelineSensitiveDataScannerProcessorScopeAll, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_all.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_all.py new file mode 100644 index 0000000000..dad7c02e6d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_all.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_all_target import ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget + +class ObservabilityPipelineSensitiveDataScannerProcessorScopeAll(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_all_target import ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget + return { + "target": (ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget,), + } + attribute_map = { + "target": "target", + } + + def __init__(self_, target: ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget, **kwargs): + """ + Applies scanning across all available fields. + + :param target: Applies the rule to all fields. + :type target: ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget + """ + super().__init__(kwargs) + + + self_.target = target diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_all_target.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_all_target.py new file mode 100644 index 0000000000..679247f49e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_all_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget(ModelSimple): + """ + Applies the rule to all fields. + + :param value: If omitted defaults to "all". Must be one of ["all"]. + :type value: str + """ + + allowed_values = { + "all", + } + ALL: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget.ALL = ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget("all") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_exclude.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_exclude.py new file mode 100644 index 0000000000..56b5a232e3 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_exclude.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_options import ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_exclude_target import ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget + +class ObservabilityPipelineSensitiveDataScannerProcessorScopeExclude(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_options import ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_exclude_target import ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget + return { + "options": (ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions,), + "target": (ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget,), + } + attribute_map = { + "options": "options", + "target": "target", + } + + def __init__(self_, options: ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions, target: ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget, **kwargs): + """ + Excludes specific fields from sensitive data scanning. + + :param options: Fields to which the scope rule applies. + :type options: ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions + + :param target: Excludes specific fields from processing. + :type target: ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget + """ + super().__init__(kwargs) + + + self_.options = options + self_.target = target diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_exclude_target.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_exclude_target.py new file mode 100644 index 0000000000..63a90069bd --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_exclude_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget(ModelSimple): + """ + Excludes specific fields from processing. + + :param value: If omitted defaults to "exclude". Must be one of ["exclude"]. + :type value: str + """ + + allowed_values = { + "exclude", + } + EXCLUDE: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget.EXCLUDE = ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget("exclude") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_include.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_include.py new file mode 100644 index 0000000000..ea579d1bf3 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_include.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_options import ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_include_target import ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget + +class ObservabilityPipelineSensitiveDataScannerProcessorScopeInclude(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_options import ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_include_target import ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget + return { + "options": (ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions,), + "target": (ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget,), + } + attribute_map = { + "options": "options", + "target": "target", + } + + def __init__(self_, options: ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions, target: ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget, **kwargs): + """ + Includes only specific fields for sensitive data scanning. + + :param options: Fields to which the scope rule applies. + :type options: ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions + + :param target: Applies the rule only to included fields. + :type target: ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget + """ + super().__init__(kwargs) + + + self_.options = options + self_.target = target diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_include_target.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_include_target.py new file mode 100644 index 0000000000..fedde29f62 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_include_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget(ModelSimple): + """ + Applies the rule only to included fields. + + :param value: If omitted defaults to "include". Must be one of ["include"]. + :type value: str + """ + + allowed_values = { + "include", + } + INCLUDE: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget.INCLUDE = ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget("include") diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_options.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_options.py new file mode 100644 index 0000000000..9b3bbc2c48 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_scope_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "fields": ([str],), + } + attribute_map = { + "fields": "fields", + } + + def __init__(self_, fields: List[str], **kwargs): + """ + Fields to which the scope rule applies. + + :param fields: List of log attribute names (field paths) to which the scope applies. Only these fields are included in or excluded from pattern matching. + :type fields: [str] + """ + super().__init__(kwargs) + + + self_.fields = fields diff --git a/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_type.py new file mode 100644 index 0000000000..7178c0bd8e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sensitive_data_scanner_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSensitiveDataScannerProcessorType(ModelSimple): + """ + The processor type. The value should always be `sensitive_data_scanner`. + + :param value: If omitted defaults to "sensitive_data_scanner". Must be one of ["sensitive_data_scanner"]. + :type value: str + """ + + allowed_values = { + "sensitive_data_scanner", + } + SENSITIVE_DATA_SCANNER: ClassVar["ObservabilityPipelineSensitiveDataScannerProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSensitiveDataScannerProcessorType.SENSITIVE_DATA_SCANNER = ObservabilityPipelineSensitiveDataScannerProcessorType("sensitive_data_scanner") diff --git a/datadog_api_client/v2/model/observability_pipeline_sentinel_one_destination.py b/datadog_api_client/v2/model/observability_pipeline_sentinel_one_destination.py new file mode 100644 index 0000000000..09bae1e4f3 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sentinel_one_destination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination_region import ObservabilityPipelineSentinelOneDestinationRegion + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination_type import ObservabilityPipelineSentinelOneDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineSentinelOneDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination_region import ObservabilityPipelineSentinelOneDestinationRegion + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination_type import ObservabilityPipelineSentinelOneDestinationType + return { + "buffer": (ObservabilityPipelineBufferOptions,), + "id": (str,), + "inputs": ([str],), + "region": (ObservabilityPipelineSentinelOneDestinationRegion,), + "token_key": (str,), + "type": (ObservabilityPipelineSentinelOneDestinationType,), + } + attribute_map = { + "buffer": "buffer", + "id": "id", + "inputs": "inputs", + "region": "region", + "token_key": "token_key", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], region: ObservabilityPipelineSentinelOneDestinationRegion, type: ObservabilityPipelineSentinelOneDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, token_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``sentinel_one`` destination sends logs to SentinelOne. + + **Supported pipeline types:** logs + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param region: The SentinelOne region to send logs to. + :type region: ObservabilityPipelineSentinelOneDestinationRegion + + :param token_key: Name of the environment variable or secret that holds the SentinelOne API token. + :type token_key: str, optional + + :param type: The destination type. The value should always be ``sentinel_one``. + :type type: ObservabilityPipelineSentinelOneDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if token_key is not unset: + kwargs["token_key"] = token_key + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.region = region + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_sentinel_one_destination_region.py b/datadog_api_client/v2/model/observability_pipeline_sentinel_one_destination_region.py new file mode 100644 index 0000000000..fd8f47e202 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sentinel_one_destination_region.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSentinelOneDestinationRegion(ModelSimple): + """ + The SentinelOne region to send logs to. + + :param value: Must be one of ["us", "eu", "ca", "data_set_us"]. + :type value: str + """ + + allowed_values = { + "us", + "eu", + "ca", + "data_set_us", + } + US: ClassVar["ObservabilityPipelineSentinelOneDestinationRegion"] + EU: ClassVar["ObservabilityPipelineSentinelOneDestinationRegion"] + CA: ClassVar["ObservabilityPipelineSentinelOneDestinationRegion"] + DATA_SET_US: ClassVar["ObservabilityPipelineSentinelOneDestinationRegion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSentinelOneDestinationRegion.US = ObservabilityPipelineSentinelOneDestinationRegion("us") +ObservabilityPipelineSentinelOneDestinationRegion.EU = ObservabilityPipelineSentinelOneDestinationRegion("eu") +ObservabilityPipelineSentinelOneDestinationRegion.CA = ObservabilityPipelineSentinelOneDestinationRegion("ca") +ObservabilityPipelineSentinelOneDestinationRegion.DATA_SET_US = ObservabilityPipelineSentinelOneDestinationRegion("data_set_us") diff --git a/datadog_api_client/v2/model/observability_pipeline_sentinel_one_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_sentinel_one_destination_type.py new file mode 100644 index 0000000000..b7d3c7a1ea --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sentinel_one_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSentinelOneDestinationType(ModelSimple): + """ + The destination type. The value should always be `sentinel_one`. + + :param value: If omitted defaults to "sentinel_one". Must be one of ["sentinel_one"]. + :type value: str + """ + + allowed_values = { + "sentinel_one", + } + SENTINEL_ONE: ClassVar["ObservabilityPipelineSentinelOneDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSentinelOneDestinationType.SENTINEL_ONE = ObservabilityPipelineSentinelOneDestinationType("sentinel_one") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination.py new file mode 100644 index 0000000000..1e4a2abee3 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination.py @@ -0,0 +1,117 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_socket_destination_encoding import ObservabilityPipelineSocketDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing import ObservabilityPipelineSocketDestinationFraming + from datadog_api_client.v2.model.observability_pipeline_socket_destination_mode import ObservabilityPipelineSocketDestinationMode + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_socket_destination_type import ObservabilityPipelineSocketDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_newline_delimited import ObservabilityPipelineSocketDestinationFramingNewlineDelimited + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_bytes import ObservabilityPipelineSocketDestinationFramingBytes + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_character_delimited import ObservabilityPipelineSocketDestinationFramingCharacterDelimited + +class ObservabilityPipelineSocketDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_socket_destination_encoding import ObservabilityPipelineSocketDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing import ObservabilityPipelineSocketDestinationFraming + from datadog_api_client.v2.model.observability_pipeline_socket_destination_mode import ObservabilityPipelineSocketDestinationMode + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_socket_destination_type import ObservabilityPipelineSocketDestinationType + return { + "address_key": (str,), + "buffer": (ObservabilityPipelineBufferOptions,), + "encoding": (ObservabilityPipelineSocketDestinationEncoding,), + "framing": (ObservabilityPipelineSocketDestinationFraming,), + "id": (str,), + "inputs": ([str],), + "mode": (ObservabilityPipelineSocketDestinationMode,), + "tls": (ObservabilityPipelineClientTls,), + "type": (ObservabilityPipelineSocketDestinationType,), + } + attribute_map = { + "address_key": "address_key", + "buffer": "buffer", + "encoding": "encoding", + "framing": "framing", + "id": "id", + "inputs": "inputs", + "mode": "mode", + "tls": "tls", + "type": "type", + } + + def __init__(self_, encoding: ObservabilityPipelineSocketDestinationEncoding, framing: Union[ObservabilityPipelineSocketDestinationFraming, ObservabilityPipelineSocketDestinationFramingNewlineDelimited, ObservabilityPipelineSocketDestinationFramingBytes, ObservabilityPipelineSocketDestinationFramingCharacterDelimited], id: str, inputs: List[str], mode: ObservabilityPipelineSocketDestinationMode, type: ObservabilityPipelineSocketDestinationType, address_key: Union[str, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, tls: Union[ObservabilityPipelineClientTls, UnsetType]=unset, **kwargs): + """ + The ``socket`` destination sends logs over TCP or UDP to a remote server. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the socket address (host:port). + :type address_key: str, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param encoding: Encoding format for log events. + :type encoding: ObservabilityPipelineSocketDestinationEncoding + + :param framing: Framing method configuration. + :type framing: ObservabilityPipelineSocketDestinationFraming + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param mode: Protocol used to send logs. + :type mode: ObservabilityPipelineSocketDestinationMode + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineClientTls, optional + + :param type: The destination type. The value should always be ``socket``. + :type type: ObservabilityPipelineSocketDestinationType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if buffer is not unset: + kwargs["buffer"] = buffer + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.encoding = encoding + self_.framing = framing + self_.id = id + self_.inputs = inputs + self_.mode = mode + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_encoding.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_encoding.py new file mode 100644 index 0000000000..a45af0f50d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketDestinationEncoding(ModelSimple): + """ + Encoding format for log events. + + :param value: Must be one of ["json", "raw_message"]. + :type value: str + """ + + allowed_values = { + "json", + "raw_message", + } + JSON: ClassVar["ObservabilityPipelineSocketDestinationEncoding"] + RAW_MESSAGE: ClassVar["ObservabilityPipelineSocketDestinationEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketDestinationEncoding.JSON = ObservabilityPipelineSocketDestinationEncoding("json") +ObservabilityPipelineSocketDestinationEncoding.RAW_MESSAGE = ObservabilityPipelineSocketDestinationEncoding("raw_message") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing.py new file mode 100644 index 0000000000..d42b0f0851 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSocketDestinationFraming(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Framing method configuration. + + :param method: The definition of `ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod` object. + :type method: ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod + + :param delimiter: A single ASCII character used as a delimiter. + :type delimiter: str + """ + 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.observability_pipeline_socket_destination_framing_newline_delimited import ObservabilityPipelineSocketDestinationFramingNewlineDelimited + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_bytes import ObservabilityPipelineSocketDestinationFramingBytes + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_character_delimited import ObservabilityPipelineSocketDestinationFramingCharacterDelimited + return { + "oneOf": [ + ObservabilityPipelineSocketDestinationFramingNewlineDelimited, + ObservabilityPipelineSocketDestinationFramingBytes, + ObservabilityPipelineSocketDestinationFramingCharacterDelimited, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_bytes.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_bytes.py new file mode 100644 index 0000000000..c9a4e5e004 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_bytes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_bytes_method import ObservabilityPipelineSocketDestinationFramingBytesMethod + +class ObservabilityPipelineSocketDestinationFramingBytes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_bytes_method import ObservabilityPipelineSocketDestinationFramingBytesMethod + return { + "method": (ObservabilityPipelineSocketDestinationFramingBytesMethod,), + } + attribute_map = { + "method": "method", + } + + def __init__(self_, method: ObservabilityPipelineSocketDestinationFramingBytesMethod, **kwargs): + """ + Event data is not delimited at all. + + :param method: The definition of ``ObservabilityPipelineSocketDestinationFramingBytesMethod`` object. + :type method: ObservabilityPipelineSocketDestinationFramingBytesMethod + """ + super().__init__(kwargs) + + + self_.method = method diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_bytes_method.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_bytes_method.py new file mode 100644 index 0000000000..e260c3cc2b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_bytes_method.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketDestinationFramingBytesMethod(ModelSimple): + """ + The definition of `ObservabilityPipelineSocketDestinationFramingBytesMethod` object. + + :param value: If omitted defaults to "bytes". Must be one of ["bytes"]. + :type value: str + """ + + allowed_values = { + "bytes", + } + BYTES: ClassVar["ObservabilityPipelineSocketDestinationFramingBytesMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketDestinationFramingBytesMethod.BYTES = ObservabilityPipelineSocketDestinationFramingBytesMethod("bytes") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_character_delimited.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_character_delimited.py new file mode 100644 index 0000000000..64da6744cf --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_character_delimited.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_character_delimited_method import ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod + +class ObservabilityPipelineSocketDestinationFramingCharacterDelimited(ModelNormal): + validations = { + "delimiter": { + "max_length": 1, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_character_delimited_method import ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod + return { + "delimiter": (str,), + "method": (ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod,), + } + attribute_map = { + "delimiter": "delimiter", + "method": "method", + } + + def __init__(self_, delimiter: str, method: ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod, **kwargs): + """ + Each log event is separated using the specified delimiter character. + + :param delimiter: A single ASCII character used as a delimiter. + :type delimiter: str + + :param method: The definition of ``ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod`` object. + :type method: ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod + """ + super().__init__(kwargs) + + + self_.delimiter = delimiter + self_.method = method diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_character_delimited_method.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_character_delimited_method.py new file mode 100644 index 0000000000..d4688dda21 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_character_delimited_method.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod(ModelSimple): + """ + The definition of `ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod` object. + + :param value: If omitted defaults to "character_delimited". Must be one of ["character_delimited"]. + :type value: str + """ + + allowed_values = { + "character_delimited", + } + CHARACTER_DELIMITED: ClassVar["ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod.CHARACTER_DELIMITED = ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod("character_delimited") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_newline_delimited.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_newline_delimited.py new file mode 100644 index 0000000000..10e997b1ce --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_newline_delimited.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_newline_delimited_method import ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod + +class ObservabilityPipelineSocketDestinationFramingNewlineDelimited(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_newline_delimited_method import ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod + return { + "method": (ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod,), + } + attribute_map = { + "method": "method", + } + + def __init__(self_, method: ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod, **kwargs): + """ + Each log event is delimited by a newline character. + + :param method: The definition of ``ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod`` object. + :type method: ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod + """ + super().__init__(kwargs) + + + self_.method = method diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_newline_delimited_method.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_newline_delimited_method.py new file mode 100644 index 0000000000..7834bf3fe2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_framing_newline_delimited_method.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod(ModelSimple): + """ + The definition of `ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod` object. + + :param value: If omitted defaults to "newline_delimited". Must be one of ["newline_delimited"]. + :type value: str + """ + + allowed_values = { + "newline_delimited", + } + NEWLINE_DELIMITED: ClassVar["ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod.NEWLINE_DELIMITED = ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod("newline_delimited") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_mode.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_mode.py new file mode 100644 index 0000000000..48188cce2b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketDestinationMode(ModelSimple): + """ + Protocol used to send logs. + + :param value: Must be one of ["tcp", "udp"]. + :type value: str + """ + + allowed_values = { + "tcp", + "udp", + } + TCP: ClassVar["ObservabilityPipelineSocketDestinationMode"] + UDP: ClassVar["ObservabilityPipelineSocketDestinationMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketDestinationMode.TCP = ObservabilityPipelineSocketDestinationMode("tcp") +ObservabilityPipelineSocketDestinationMode.UDP = ObservabilityPipelineSocketDestinationMode("udp") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_socket_destination_type.py new file mode 100644 index 0000000000..d6ba6586da --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketDestinationType(ModelSimple): + """ + The destination type. The value should always be `socket`. + + :param value: If omitted defaults to "socket". Must be one of ["socket"]. + :type value: str + """ + + allowed_values = { + "socket", + } + SOCKET: ClassVar["ObservabilityPipelineSocketDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketDestinationType.SOCKET = ObservabilityPipelineSocketDestinationType("socket") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source.py b/datadog_api_client/v2/model/observability_pipeline_socket_source.py new file mode 100644 index 0000000000..28d826c59e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing import ObservabilityPipelineSocketSourceFraming + from datadog_api_client.v2.model.observability_pipeline_socket_source_mode import ObservabilityPipelineSocketSourceMode + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_socket_source_type import ObservabilityPipelineSocketSourceType + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_newline_delimited import ObservabilityPipelineSocketSourceFramingNewlineDelimited + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_bytes import ObservabilityPipelineSocketSourceFramingBytes + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_character_delimited import ObservabilityPipelineSocketSourceFramingCharacterDelimited + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_octet_counting import ObservabilityPipelineSocketSourceFramingOctetCounting + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_chunked_gelf import ObservabilityPipelineSocketSourceFramingChunkedGelf + +class ObservabilityPipelineSocketSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing import ObservabilityPipelineSocketSourceFraming + from datadog_api_client.v2.model.observability_pipeline_socket_source_mode import ObservabilityPipelineSocketSourceMode + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_socket_source_type import ObservabilityPipelineSocketSourceType + return { + "address_key": (str,), + "framing": (ObservabilityPipelineSocketSourceFraming,), + "id": (str,), + "mode": (ObservabilityPipelineSocketSourceMode,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineSocketSourceType,), + } + attribute_map = { + "address_key": "address_key", + "framing": "framing", + "id": "id", + "mode": "mode", + "tls": "tls", + "type": "type", + } + + def __init__(self_, framing: Union[ObservabilityPipelineSocketSourceFraming, ObservabilityPipelineSocketSourceFramingNewlineDelimited, ObservabilityPipelineSocketSourceFramingBytes, ObservabilityPipelineSocketSourceFramingCharacterDelimited, ObservabilityPipelineSocketSourceFramingOctetCounting, ObservabilityPipelineSocketSourceFramingChunkedGelf], id: str, mode: ObservabilityPipelineSocketSourceMode, type: ObservabilityPipelineSocketSourceType, address_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, **kwargs): + """ + The ``socket`` source ingests logs over TCP or UDP. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the socket. + :type address_key: str, optional + + :param framing: Framing method configuration for the socket source. + :type framing: ObservabilityPipelineSocketSourceFraming + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param mode: Protocol used to receive logs. + :type mode: ObservabilityPipelineSocketSourceMode + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. The value should always be ``socket``. + :type type: ObservabilityPipelineSocketSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.framing = framing + self_.id = id + self_.mode = mode + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing.py new file mode 100644 index 0000000000..df7ba14072 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSocketSourceFraming(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Framing method configuration for the socket source. + + :param method: Byte frames which are delimited by a newline character. + :type method: ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod + + :param delimiter: A single ASCII character used to delimit events. + :type delimiter: str + """ + 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.observability_pipeline_socket_source_framing_newline_delimited import ObservabilityPipelineSocketSourceFramingNewlineDelimited + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_bytes import ObservabilityPipelineSocketSourceFramingBytes + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_character_delimited import ObservabilityPipelineSocketSourceFramingCharacterDelimited + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_octet_counting import ObservabilityPipelineSocketSourceFramingOctetCounting + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_chunked_gelf import ObservabilityPipelineSocketSourceFramingChunkedGelf + return { + "oneOf": [ + ObservabilityPipelineSocketSourceFramingNewlineDelimited, + ObservabilityPipelineSocketSourceFramingBytes, + ObservabilityPipelineSocketSourceFramingCharacterDelimited, + ObservabilityPipelineSocketSourceFramingOctetCounting, + ObservabilityPipelineSocketSourceFramingChunkedGelf, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_bytes.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_bytes.py new file mode 100644 index 0000000000..aade553c7e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_bytes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_bytes_method import ObservabilityPipelineSocketSourceFramingBytesMethod + +class ObservabilityPipelineSocketSourceFramingBytes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_bytes_method import ObservabilityPipelineSocketSourceFramingBytesMethod + return { + "method": (ObservabilityPipelineSocketSourceFramingBytesMethod,), + } + attribute_map = { + "method": "method", + } + + def __init__(self_, method: ObservabilityPipelineSocketSourceFramingBytesMethod, **kwargs): + """ + Byte frames are passed through as-is according to the underlying I/O boundaries (for example, split between messages or stream segments). + + :param method: Byte frames are passed through as-is according to the underlying I/O boundaries (for example, split between messages or stream segments). + :type method: ObservabilityPipelineSocketSourceFramingBytesMethod + """ + super().__init__(kwargs) + + + self_.method = method diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_bytes_method.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_bytes_method.py new file mode 100644 index 0000000000..170bc7b965 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_bytes_method.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketSourceFramingBytesMethod(ModelSimple): + """ + Byte frames are passed through as-is according to the underlying I/O boundaries (for example, split between messages or stream segments). + + :param value: If omitted defaults to "bytes". Must be one of ["bytes"]. + :type value: str + """ + + allowed_values = { + "bytes", + } + BYTES: ClassVar["ObservabilityPipelineSocketSourceFramingBytesMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketSourceFramingBytesMethod.BYTES = ObservabilityPipelineSocketSourceFramingBytesMethod("bytes") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_character_delimited.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_character_delimited.py new file mode 100644 index 0000000000..bbce6ab870 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_character_delimited.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_character_delimited_method import ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod + +class ObservabilityPipelineSocketSourceFramingCharacterDelimited(ModelNormal): + validations = { + "delimiter": { + "max_length": 1, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_character_delimited_method import ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod + return { + "delimiter": (str,), + "method": (ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod,), + } + attribute_map = { + "delimiter": "delimiter", + "method": "method", + } + + def __init__(self_, delimiter: str, method: ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod, **kwargs): + """ + Byte frames which are delimited by a chosen character. + + :param delimiter: A single ASCII character used to delimit events. + :type delimiter: str + + :param method: Byte frames which are delimited by a chosen character. + :type method: ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod + """ + super().__init__(kwargs) + + + self_.delimiter = delimiter + self_.method = method diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_character_delimited_method.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_character_delimited_method.py new file mode 100644 index 0000000000..626778558c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_character_delimited_method.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod(ModelSimple): + """ + Byte frames which are delimited by a chosen character. + + :param value: If omitted defaults to "character_delimited". Must be one of ["character_delimited"]. + :type value: str + """ + + allowed_values = { + "character_delimited", + } + CHARACTER_DELIMITED: ClassVar["ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod.CHARACTER_DELIMITED = ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod("character_delimited") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_chunked_gelf.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_chunked_gelf.py new file mode 100644 index 0000000000..d232e1017a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_chunked_gelf.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_chunked_gelf_method import ObservabilityPipelineSocketSourceFramingChunkedGelfMethod + +class ObservabilityPipelineSocketSourceFramingChunkedGelf(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_chunked_gelf_method import ObservabilityPipelineSocketSourceFramingChunkedGelfMethod + return { + "method": (ObservabilityPipelineSocketSourceFramingChunkedGelfMethod,), + } + attribute_map = { + "method": "method", + } + + def __init__(self_, method: ObservabilityPipelineSocketSourceFramingChunkedGelfMethod, **kwargs): + """ + Byte frames which are chunked GELF messages. + + :param method: Byte frames which are chunked GELF messages. + :type method: ObservabilityPipelineSocketSourceFramingChunkedGelfMethod + """ + super().__init__(kwargs) + + + self_.method = method diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_chunked_gelf_method.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_chunked_gelf_method.py new file mode 100644 index 0000000000..8f5a518e88 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_chunked_gelf_method.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketSourceFramingChunkedGelfMethod(ModelSimple): + """ + Byte frames which are chunked GELF messages. + + :param value: If omitted defaults to "chunked_gelf". Must be one of ["chunked_gelf"]. + :type value: str + """ + + allowed_values = { + "chunked_gelf", + } + CHUNKED_GELF: ClassVar["ObservabilityPipelineSocketSourceFramingChunkedGelfMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketSourceFramingChunkedGelfMethod.CHUNKED_GELF = ObservabilityPipelineSocketSourceFramingChunkedGelfMethod("chunked_gelf") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_newline_delimited.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_newline_delimited.py new file mode 100644 index 0000000000..f6c3b1a26a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_newline_delimited.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_newline_delimited_method import ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod + +class ObservabilityPipelineSocketSourceFramingNewlineDelimited(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_newline_delimited_method import ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod + return { + "method": (ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod,), + } + attribute_map = { + "method": "method", + } + + def __init__(self_, method: ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod, **kwargs): + """ + Byte frames which are delimited by a newline character. + + :param method: Byte frames which are delimited by a newline character. + :type method: ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod + """ + super().__init__(kwargs) + + + self_.method = method diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_newline_delimited_method.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_newline_delimited_method.py new file mode 100644 index 0000000000..17ec901f4a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_newline_delimited_method.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod(ModelSimple): + """ + Byte frames which are delimited by a newline character. + + :param value: If omitted defaults to "newline_delimited". Must be one of ["newline_delimited"]. + :type value: str + """ + + allowed_values = { + "newline_delimited", + } + NEWLINE_DELIMITED: ClassVar["ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod.NEWLINE_DELIMITED = ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod("newline_delimited") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_octet_counting.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_octet_counting.py new file mode 100644 index 0000000000..008d35c7a1 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_octet_counting.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_octet_counting_method import ObservabilityPipelineSocketSourceFramingOctetCountingMethod + +class ObservabilityPipelineSocketSourceFramingOctetCounting(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_octet_counting_method import ObservabilityPipelineSocketSourceFramingOctetCountingMethod + return { + "method": (ObservabilityPipelineSocketSourceFramingOctetCountingMethod,), + } + attribute_map = { + "method": "method", + } + + def __init__(self_, method: ObservabilityPipelineSocketSourceFramingOctetCountingMethod, **kwargs): + """ + Byte frames according to the octet counting format as per RFC6587. + + :param method: Byte frames according to the octet counting format as per RFC6587. + :type method: ObservabilityPipelineSocketSourceFramingOctetCountingMethod + """ + super().__init__(kwargs) + + + self_.method = method diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_octet_counting_method.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_octet_counting_method.py new file mode 100644 index 0000000000..bdd5e4bc94 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_framing_octet_counting_method.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketSourceFramingOctetCountingMethod(ModelSimple): + """ + Byte frames according to the octet counting format as per RFC6587. + + :param value: If omitted defaults to "octet_counting". Must be one of ["octet_counting"]. + :type value: str + """ + + allowed_values = { + "octet_counting", + } + OCTET_COUNTING: ClassVar["ObservabilityPipelineSocketSourceFramingOctetCountingMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketSourceFramingOctetCountingMethod.OCTET_COUNTING = ObservabilityPipelineSocketSourceFramingOctetCountingMethod("octet_counting") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_mode.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_mode.py new file mode 100644 index 0000000000..07b2cfaa4c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketSourceMode(ModelSimple): + """ + Protocol used to receive logs. + + :param value: Must be one of ["tcp", "udp"]. + :type value: str + """ + + allowed_values = { + "tcp", + "udp", + } + TCP: ClassVar["ObservabilityPipelineSocketSourceMode"] + UDP: ClassVar["ObservabilityPipelineSocketSourceMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketSourceMode.TCP = ObservabilityPipelineSocketSourceMode("tcp") +ObservabilityPipelineSocketSourceMode.UDP = ObservabilityPipelineSocketSourceMode("udp") diff --git a/datadog_api_client/v2/model/observability_pipeline_socket_source_type.py b/datadog_api_client/v2/model/observability_pipeline_socket_source_type.py new file mode 100644 index 0000000000..5781484f1c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_socket_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSocketSourceType(ModelSimple): + """ + The source type. The value should always be `socket`. + + :param value: If omitted defaults to "socket". Must be one of ["socket"]. + :type value: str + """ + + allowed_values = { + "socket", + } + SOCKET: ClassVar["ObservabilityPipelineSocketSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSocketSourceType.SOCKET = ObservabilityPipelineSocketSourceType("socket") diff --git a/datadog_api_client/v2/model/observability_pipeline_source_valid_token_field_to_add.py b/datadog_api_client/v2/model/observability_pipeline_source_valid_token_field_to_add.py new file mode 100644 index 0000000000..ce3eed71ae --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_source_valid_token_field_to_add.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSourceValidTokenFieldToAdd(ModelNormal): + validations = { + "key": { + "max_length": 256, + }, + "value": { + "max_length": 1024, + }, + } + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: str, value: str, **kwargs): + """ + An optional metadata field that is attached to every event authenticated by the + associated token. Both ``key`` and ``value`` must match ``^[A-Za-z0-9_]+$``. + + :param key: The metadata field name to add to incoming events. + :type key: str + + :param value: The metadata field value to add to incoming events. + :type value: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.value = value diff --git a/datadog_api_client/v2/model/observability_pipeline_spec.py b/datadog_api_client/v2/model/observability_pipeline_spec.py new file mode 100644 index 0000000000..c1313beee2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_spec.py @@ -0,0 +1,120 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_spec_data import ObservabilityPipelineSpecData + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination import ObservabilityPipelineElasticsearchDestination + from datadog_api_client.v2.model.observability_pipeline_http_client_destination import ObservabilityPipelineHttpClientDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination import ObservabilityPipelineAmazonOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination import ObservabilityPipelineAmazonS3Destination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination import ObservabilityPipelineAmazonS3GenericDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination import ObservabilityPipelineAmazonSecurityLakeDestination + from datadog_api_client.v2.model.azure_storage_destination import AzureStorageDestination + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination import ObservabilityPipelineClickhouseDestination + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination import ObservabilityPipelineCloudPremDestination + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination import ObservabilityPipelineCrowdStrikeNextGenSiemDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination import ObservabilityPipelineDatadogLogsDestination + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination import ObservabilityPipelineGoogleChronicleDestination + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination import ObservabilityPipelineGoogleCloudStorageDestination + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination import ObservabilityPipelineGooglePubSubDestination + from datadog_api_client.v2.model.observability_pipeline_kafka_destination import ObservabilityPipelineKafkaDestination + from datadog_api_client.v2.model.microsoft_sentinel_destination import MicrosoftSentinelDestination + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination import ObservabilityPipelineNewRelicDestination + from datadog_api_client.v2.model.observability_pipeline_open_search_destination import ObservabilityPipelineOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination import ObservabilityPipelineRsyslogDestination + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination import ObservabilityPipelineSentinelOneDestination + from datadog_api_client.v2.model.observability_pipeline_socket_destination import ObservabilityPipelineSocketDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination import ObservabilityPipelineSplunkHecDestination + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination import ObservabilityPipelineSumoLogicDestination + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination import ObservabilityPipelineSyslogNgDestination + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination import ObservabilityPipelineDatabricksZerobusDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import ObservabilityPipelineDatadogMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination import ObservabilityPipelineSplunkHecMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor + from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor + from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor + from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor + from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor + from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source import ObservabilityPipelineDatadogAgentSource + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source import ObservabilityPipelineAmazonDataFirehoseSource + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source import ObservabilityPipelineAmazonS3Source + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source import ObservabilityPipelineFluentBitSource + from datadog_api_client.v2.model.observability_pipeline_fluentd_source import ObservabilityPipelineFluentdSource + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source import ObservabilityPipelineGooglePubSubSource + from datadog_api_client.v2.model.observability_pipeline_http_client_source import ObservabilityPipelineHttpClientSource + from datadog_api_client.v2.model.observability_pipeline_http_server_source import ObservabilityPipelineHttpServerSource + from datadog_api_client.v2.model.observability_pipeline_kafka_source import ObservabilityPipelineKafkaSource + from datadog_api_client.v2.model.observability_pipeline_logstash_source import ObservabilityPipelineLogstashSource + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source import ObservabilityPipelineRsyslogSource + from datadog_api_client.v2.model.observability_pipeline_socket_source import ObservabilityPipelineSocketSource + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source import ObservabilityPipelineSplunkHecSource + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source import ObservabilityPipelineSplunkTcpSource + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source import ObservabilityPipelineSumoLogicSource + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source import ObservabilityPipelineSyslogNgSource + from datadog_api_client.v2.model.observability_pipeline_websocket_source import ObservabilityPipelineWebsocketSource + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import ObservabilityPipelineOpentelemetrySource + +class ObservabilityPipelineSpec(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_spec_data import ObservabilityPipelineSpecData + return { + "data": (ObservabilityPipelineSpecData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ObservabilityPipelineSpecData, **kwargs): + """ + Input schema representing an observability pipeline configuration. Used in create and validate requests. + + :param data: Contains the the pipeline configuration. + :type data: ObservabilityPipelineSpecData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/observability_pipeline_spec_data.py b/datadog_api_client/v2/model/observability_pipeline_spec_data.py new file mode 100644 index 0000000000..cd1db17c1e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_spec_data.py @@ -0,0 +1,127 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_data_attributes import ObservabilityPipelineDataAttributes + from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination import ObservabilityPipelineElasticsearchDestination + from datadog_api_client.v2.model.observability_pipeline_http_client_destination import ObservabilityPipelineHttpClientDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination import ObservabilityPipelineAmazonOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination import ObservabilityPipelineAmazonS3Destination + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination import ObservabilityPipelineAmazonS3GenericDestination + from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination import ObservabilityPipelineAmazonSecurityLakeDestination + from datadog_api_client.v2.model.azure_storage_destination import AzureStorageDestination + from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination import ObservabilityPipelineClickhouseDestination + from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination import ObservabilityPipelineCloudPremDestination + from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination import ObservabilityPipelineCrowdStrikeNextGenSiemDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination import ObservabilityPipelineDatadogLogsDestination + from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination import ObservabilityPipelineGoogleChronicleDestination + from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination import ObservabilityPipelineGoogleCloudStorageDestination + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination import ObservabilityPipelineGooglePubSubDestination + from datadog_api_client.v2.model.observability_pipeline_kafka_destination import ObservabilityPipelineKafkaDestination + from datadog_api_client.v2.model.microsoft_sentinel_destination import MicrosoftSentinelDestination + from datadog_api_client.v2.model.observability_pipeline_new_relic_destination import ObservabilityPipelineNewRelicDestination + from datadog_api_client.v2.model.observability_pipeline_open_search_destination import ObservabilityPipelineOpenSearchDestination + from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination import ObservabilityPipelineRsyslogDestination + from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination import ObservabilityPipelineSentinelOneDestination + from datadog_api_client.v2.model.observability_pipeline_socket_destination import ObservabilityPipelineSocketDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination import ObservabilityPipelineSplunkHecDestination + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination import ObservabilityPipelineSumoLogicDestination + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination import ObservabilityPipelineSyslogNgDestination + from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination import ObservabilityPipelineDatabricksZerobusDestination + from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import ObservabilityPipelineDatadogMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination import ObservabilityPipelineSplunkHecMetricsDestination + from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor + from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor + from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor + from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor + from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor + from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor + from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor + from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor + from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor + from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor + from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor + from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor + from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor + from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor + from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor + from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor + from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source import ObservabilityPipelineDatadogAgentSource + from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source import ObservabilityPipelineAmazonDataFirehoseSource + from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source import ObservabilityPipelineAmazonS3Source + from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source import ObservabilityPipelineFluentBitSource + from datadog_api_client.v2.model.observability_pipeline_fluentd_source import ObservabilityPipelineFluentdSource + from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source import ObservabilityPipelineGooglePubSubSource + from datadog_api_client.v2.model.observability_pipeline_http_client_source import ObservabilityPipelineHttpClientSource + from datadog_api_client.v2.model.observability_pipeline_http_server_source import ObservabilityPipelineHttpServerSource + from datadog_api_client.v2.model.observability_pipeline_kafka_source import ObservabilityPipelineKafkaSource + from datadog_api_client.v2.model.observability_pipeline_logstash_source import ObservabilityPipelineLogstashSource + from datadog_api_client.v2.model.observability_pipeline_rsyslog_source import ObservabilityPipelineRsyslogSource + from datadog_api_client.v2.model.observability_pipeline_socket_source import ObservabilityPipelineSocketSource + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source import ObservabilityPipelineSplunkHecSource + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source import ObservabilityPipelineSplunkTcpSource + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source import ObservabilityPipelineSumoLogicSource + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source import ObservabilityPipelineSyslogNgSource + from datadog_api_client.v2.model.observability_pipeline_websocket_source import ObservabilityPipelineWebsocketSource + from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import ObservabilityPipelineOpentelemetrySource + +class ObservabilityPipelineSpecData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_data_attributes import ObservabilityPipelineDataAttributes + return { + "attributes": (ObservabilityPipelineDataAttributes,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ObservabilityPipelineDataAttributes, **kwargs): + """ + Contains the the pipeline configuration. + + :param attributes: Defines the pipeline’s name and its components (sources, processors, and destinations). + :type attributes: ObservabilityPipelineDataAttributes + + :param type: The resource type identifier. For pipeline resources, this should always be set to ``pipelines``. + :type type: str + """ + super().__init__(kwargs) + type = kwargs.get("type", "pipelines") + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_split_array_processor.py b/datadog_api_client/v2/model/observability_pipeline_split_array_processor.py new file mode 100644 index 0000000000..f707c7011a --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_split_array_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_split_array_processor_array_config import ObservabilityPipelineSplitArrayProcessorArrayConfig + from datadog_api_client.v2.model.observability_pipeline_split_array_processor_type import ObservabilityPipelineSplitArrayProcessorType + +class ObservabilityPipelineSplitArrayProcessor(ModelNormal): + validations = { + "arrays": { + "max_items": 15, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_split_array_processor_array_config import ObservabilityPipelineSplitArrayProcessorArrayConfig + from datadog_api_client.v2.model.observability_pipeline_split_array_processor_type import ObservabilityPipelineSplitArrayProcessorType + return { + "arrays": ([ObservabilityPipelineSplitArrayProcessorArrayConfig],), + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "type": (ObservabilityPipelineSplitArrayProcessorType,), + } + attribute_map = { + "arrays": "arrays", + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "type": "type", + } + + def __init__(self_, arrays: List[ObservabilityPipelineSplitArrayProcessorArrayConfig], enabled: bool, id: str, include: str, type: ObservabilityPipelineSplitArrayProcessorType, display_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``split_array`` processor splits array fields into separate events based on configured rules. + + **Supported pipeline types:** logs + + :param arrays: A list of array split configurations. + :type arrays: [ObservabilityPipelineSplitArrayProcessorArrayConfig] + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. For split_array, this should typically be ``*``. + :type include: str + + :param type: The processor type. The value should always be ``split_array``. + :type type: ObservabilityPipelineSplitArrayProcessorType + """ + if display_name is not unset: + kwargs["display_name"] = display_name + super().__init__(kwargs) + + + self_.arrays = arrays + self_.enabled = enabled + self_.id = id + self_.include = include + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_split_array_processor_array_config.py b/datadog_api_client/v2/model/observability_pipeline_split_array_processor_array_config.py new file mode 100644 index 0000000000..5cc3f95408 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_split_array_processor_array_config.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSplitArrayProcessorArrayConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "field": (str,), + "include": (str,), + } + attribute_map = { + "field": "field", + "include": "include", + } + + def __init__(self_, field: str, include: str, **kwargs): + """ + Configuration for a single array split operation. + + :param field: The path to the array field to split. + :type field: str + + :param include: A Datadog search query used to determine which logs this array split operation targets. + :type include: str + """ + super().__init__(kwargs) + + + self_.field = field + self_.include = include diff --git a/datadog_api_client/v2/model/observability_pipeline_split_array_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_split_array_processor_type.py new file mode 100644 index 0000000000..23f95445f4 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_split_array_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSplitArrayProcessorType(ModelSimple): + """ + The processor type. The value should always be `split_array`. + + :param value: If omitted defaults to "split_array". Must be one of ["split_array"]. + :type value: str + """ + + allowed_values = { + "split_array", + } + SPLIT_ARRAY: ClassVar["ObservabilityPipelineSplitArrayProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSplitArrayProcessorType.SPLIT_ARRAY = ObservabilityPipelineSplitArrayProcessorType("split_array") diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination.py new file mode 100644 index 0000000000..34bdfbd3b6 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination.py @@ -0,0 +1,135 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination_encoding import ObservabilityPipelineSplunkHecDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination_token_strategy import ObservabilityPipelineSplunkHecDestinationTokenStrategy + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination_type import ObservabilityPipelineSplunkHecDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineSplunkHecDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination_encoding import ObservabilityPipelineSplunkHecDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination_token_strategy import ObservabilityPipelineSplunkHecDestinationTokenStrategy + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination_type import ObservabilityPipelineSplunkHecDestinationType + return { + "auto_extract_timestamp": (bool,), + "buffer": (ObservabilityPipelineBufferOptions,), + "encoding": (ObservabilityPipelineSplunkHecDestinationEncoding,), + "endpoint_url_key": (str,), + "id": (str,), + "index": (str,), + "indexed_fields": ([str],), + "inputs": ([str],), + "sourcetype": (str,), + "token_key": (str,), + "token_strategy": (ObservabilityPipelineSplunkHecDestinationTokenStrategy,), + "type": (ObservabilityPipelineSplunkHecDestinationType,), + } + attribute_map = { + "auto_extract_timestamp": "auto_extract_timestamp", + "buffer": "buffer", + "encoding": "encoding", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "index": "index", + "indexed_fields": "indexed_fields", + "inputs": "inputs", + "sourcetype": "sourcetype", + "token_key": "token_key", + "token_strategy": "token_strategy", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineSplunkHecDestinationType, auto_extract_timestamp: Union[bool, UnsetType]=unset, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, encoding: Union[ObservabilityPipelineSplunkHecDestinationEncoding, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, index: Union[str, UnsetType]=unset, indexed_fields: Union[List[str], UnsetType]=unset, sourcetype: Union[str, UnsetType]=unset, token_key: Union[str, UnsetType]=unset, token_strategy: Union[ObservabilityPipelineSplunkHecDestinationTokenStrategy, UnsetType]=unset, **kwargs): + """ + The ``splunk_hec`` destination forwards logs to Splunk using the HTTP Event Collector (HEC). + + **Supported pipeline types:** logs + + :param auto_extract_timestamp: If ``true`` , Splunk tries to extract timestamps from incoming log events. + If ``false`` , Splunk assigns the time the event was received. + :type auto_extract_timestamp: bool, optional + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param encoding: Encoding format for log events. + :type encoding: ObservabilityPipelineSplunkHecDestinationEncoding, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the Splunk HEC endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param index: Optional name of the Splunk index where logs are written. + :type index: str, optional + + :param indexed_fields: List of log field names to send as indexed fields to Splunk HEC. Available only when ``encoding`` is ``json``. + :type indexed_fields: [str], optional + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param sourcetype: The Splunk sourcetype to assign to log events. + :type sourcetype: str, optional + + :param token_key: Name of the environment variable or secret that holds the Splunk HEC token. + :type token_key: str, optional + + :param token_strategy: Controls how the Splunk HEC token is supplied. Use ``custom`` to provide a token with ``token_key`` , or ``from_source`` to forward the token received from an upstream Splunk HEC source. + :type token_strategy: ObservabilityPipelineSplunkHecDestinationTokenStrategy, optional + + :param type: The destination type. Always ``splunk_hec``. + :type type: ObservabilityPipelineSplunkHecDestinationType + """ + if auto_extract_timestamp is not unset: + kwargs["auto_extract_timestamp"] = auto_extract_timestamp + if buffer is not unset: + kwargs["buffer"] = buffer + if encoding is not unset: + kwargs["encoding"] = encoding + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if index is not unset: + kwargs["index"] = index + if indexed_fields is not unset: + kwargs["indexed_fields"] = indexed_fields + if sourcetype is not unset: + kwargs["sourcetype"] = sourcetype + if token_key is not unset: + kwargs["token_key"] = token_key + if token_strategy is not unset: + kwargs["token_strategy"] = token_strategy + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination_encoding.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination_encoding.py new file mode 100644 index 0000000000..7f968549f4 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination_encoding.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSplunkHecDestinationEncoding(ModelSimple): + """ + Encoding format for log events. + + :param value: Must be one of ["json", "raw_message"]. + :type value: str + """ + + allowed_values = { + "json", + "raw_message", + } + JSON: ClassVar["ObservabilityPipelineSplunkHecDestinationEncoding"] + RAW_MESSAGE: ClassVar["ObservabilityPipelineSplunkHecDestinationEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSplunkHecDestinationEncoding.JSON = ObservabilityPipelineSplunkHecDestinationEncoding("json") +ObservabilityPipelineSplunkHecDestinationEncoding.RAW_MESSAGE = ObservabilityPipelineSplunkHecDestinationEncoding("raw_message") diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination_token_strategy.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination_token_strategy.py new file mode 100644 index 0000000000..00164689bb --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination_token_strategy.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSplunkHecDestinationTokenStrategy(ModelSimple): + """ + Controls how the Splunk HEC token is supplied. Use `custom` to provide a token with `token_key`, or `from_source` to forward the token received from an upstream Splunk HEC source. + + :param value: Must be one of ["custom", "from_source"]. + :type value: str + """ + + allowed_values = { + "custom", + "from_source", + } + CUSTOM: ClassVar["ObservabilityPipelineSplunkHecDestinationTokenStrategy"] + FROM_SOURCE: ClassVar["ObservabilityPipelineSplunkHecDestinationTokenStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSplunkHecDestinationTokenStrategy.CUSTOM = ObservabilityPipelineSplunkHecDestinationTokenStrategy("custom") +ObservabilityPipelineSplunkHecDestinationTokenStrategy.FROM_SOURCE = ObservabilityPipelineSplunkHecDestinationTokenStrategy("from_source") diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination_type.py new file mode 100644 index 0000000000..b57c64a36c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSplunkHecDestinationType(ModelSimple): + """ + The destination type. Always `splunk_hec`. + + :param value: If omitted defaults to "splunk_hec". Must be one of ["splunk_hec"]. + :type value: str + """ + + allowed_values = { + "splunk_hec", + } + SPLUNK_HEC: ClassVar["ObservabilityPipelineSplunkHecDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSplunkHecDestinationType.SPLUNK_HEC = ObservabilityPipelineSplunkHecDestinationType("splunk_hec") diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_metrics_destination.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_metrics_destination.py new file mode 100644 index 0000000000..c083040833 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_metrics_destination.py @@ -0,0 +1,134 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination_compression import ObservabilityPipelineSplunkHecMetricsDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination_type import ObservabilityPipelineSplunkHecMetricsDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineSplunkHecMetricsDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination_compression import ObservabilityPipelineSplunkHecMetricsDestinationCompression + from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination_type import ObservabilityPipelineSplunkHecMetricsDestinationType + return { + "buffer": (ObservabilityPipelineBufferOptions,), + "compression": (ObservabilityPipelineSplunkHecMetricsDestinationCompression,), + "default_namespace": (str,), + "endpoint_url_key": (str,), + "id": (str,), + "index": (str,), + "inputs": ([str],), + "source": (str,), + "sourcetype": (str,), + "tls": (ObservabilityPipelineTls,), + "token_key": (str,), + "type": (ObservabilityPipelineSplunkHecMetricsDestinationType,), + } + attribute_map = { + "buffer": "buffer", + "compression": "compression", + "default_namespace": "default_namespace", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "index": "index", + "inputs": "inputs", + "source": "source", + "sourcetype": "sourcetype", + "tls": "tls", + "token_key": "token_key", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineSplunkHecMetricsDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, compression: Union[ObservabilityPipelineSplunkHecMetricsDestinationCompression, UnsetType]=unset, default_namespace: Union[str, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, index: Union[str, UnsetType]=unset, source: Union[str, UnsetType]=unset, sourcetype: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineTls, UnsetType]=unset, token_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``splunk_hec_metrics`` destination forwards metrics to Splunk using the HTTP Event Collector (HEC). + + **Supported pipeline types:** metrics + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param compression: Compression algorithm applied when sending metrics to Splunk HEC. + :type compression: ObservabilityPipelineSplunkHecMetricsDestinationCompression, optional + + :param default_namespace: Optional default namespace for metrics sent to Splunk HEC. + :type default_namespace: str, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the Splunk HEC endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param index: Optional name of the Splunk index where metrics are written. + :type index: str, optional + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param source: The Splunk source field value for metric events. + :type source: str, optional + + :param sourcetype: The Splunk sourcetype to assign to metric events. + :type sourcetype: str, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineTls, optional + + :param token_key: Name of the environment variable or secret that holds the Splunk HEC token. + :type token_key: str, optional + + :param type: The destination type. Always ``splunk_hec_metrics``. + :type type: ObservabilityPipelineSplunkHecMetricsDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if compression is not unset: + kwargs["compression"] = compression + if default_namespace is not unset: + kwargs["default_namespace"] = default_namespace + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if index is not unset: + kwargs["index"] = index + if source is not unset: + kwargs["source"] = source + if sourcetype is not unset: + kwargs["sourcetype"] = sourcetype + if tls is not unset: + kwargs["tls"] = tls + if token_key is not unset: + kwargs["token_key"] = token_key + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_metrics_destination_compression.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_metrics_destination_compression.py new file mode 100644 index 0000000000..6a9d797e86 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_metrics_destination_compression.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSplunkHecMetricsDestinationCompression(ModelSimple): + """ + Compression algorithm applied when sending metrics to Splunk HEC. + + :param value: If omitted defaults to "none". Must be one of ["none", "gzip"]. + :type value: str + """ + + allowed_values = { + "none", + "gzip", + } + NONE: ClassVar["ObservabilityPipelineSplunkHecMetricsDestinationCompression"] + GZIP: ClassVar["ObservabilityPipelineSplunkHecMetricsDestinationCompression"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSplunkHecMetricsDestinationCompression.NONE = ObservabilityPipelineSplunkHecMetricsDestinationCompression("none") +ObservabilityPipelineSplunkHecMetricsDestinationCompression.GZIP = ObservabilityPipelineSplunkHecMetricsDestinationCompression("gzip") diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_metrics_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_metrics_destination_type.py new file mode 100644 index 0000000000..9fc5c56695 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_metrics_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSplunkHecMetricsDestinationType(ModelSimple): + """ + The destination type. Always `splunk_hec_metrics`. + + :param value: If omitted defaults to "splunk_hec_metrics". Must be one of ["splunk_hec_metrics"]. + :type value: str + """ + + allowed_values = { + "splunk_hec_metrics", + } + SPLUNK_HEC_METRICS: ClassVar["ObservabilityPipelineSplunkHecMetricsDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSplunkHecMetricsDestinationType.SPLUNK_HEC_METRICS = ObservabilityPipelineSplunkHecMetricsDestinationType("splunk_hec_metrics") diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_source.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_source.py new file mode 100644 index 0000000000..28fdf1055f --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_source.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source_type import ObservabilityPipelineSplunkHecSourceType + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source_valid_token import ObservabilityPipelineSplunkHecSourceValidToken + +class ObservabilityPipelineSplunkHecSource(ModelNormal): + validations = { + "valid_tokens": { + "max_items": 1000, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source_type import ObservabilityPipelineSplunkHecSourceType + from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source_valid_token import ObservabilityPipelineSplunkHecSourceValidToken + return { + "address_key": (str,), + "id": (str,), + "store_hec_token": (bool,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineSplunkHecSourceType,), + "valid_tokens": ([ObservabilityPipelineSplunkHecSourceValidToken],), + } + attribute_map = { + "address_key": "address_key", + "id": "id", + "store_hec_token": "store_hec_token", + "tls": "tls", + "type": "type", + "valid_tokens": "valid_tokens", + } + + def __init__(self_, id: str, type: ObservabilityPipelineSplunkHecSourceType, address_key: Union[str, UnsetType]=unset, store_hec_token: Union[bool, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, valid_tokens: Union[List[ObservabilityPipelineSplunkHecSourceValidToken], UnsetType]=unset, **kwargs): + """ + The ``splunk_hec`` source implements the Splunk HTTP Event Collector (HEC) API. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the HEC API. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param store_hec_token: When ``true`` , the Splunk HEC token from the incoming request is stored in the event metadata. + This allows downstream components to forward the token to other Splunk HEC destinations. + :type store_hec_token: bool, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. Always ``splunk_hec``. + :type type: ObservabilityPipelineSplunkHecSourceType + + :param valid_tokens: A list of tokens that are accepted for authenticating incoming HEC requests. When set, the source + rejects any request whose HEC token does not match an enabled entry in this list. + :type valid_tokens: [ObservabilityPipelineSplunkHecSourceValidToken], optional + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if store_hec_token is not unset: + kwargs["store_hec_token"] = store_hec_token + if tls is not unset: + kwargs["tls"] = tls + if valid_tokens is not unset: + kwargs["valid_tokens"] = valid_tokens + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_source_type.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_source_type.py new file mode 100644 index 0000000000..eb66babea8 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSplunkHecSourceType(ModelSimple): + """ + The source type. Always `splunk_hec`. + + :param value: If omitted defaults to "splunk_hec". Must be one of ["splunk_hec"]. + :type value: str + """ + + allowed_values = { + "splunk_hec", + } + SPLUNK_HEC: ClassVar["ObservabilityPipelineSplunkHecSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSplunkHecSourceType.SPLUNK_HEC = ObservabilityPipelineSplunkHecSourceType("splunk_hec") diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_hec_source_valid_token.py b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_source_valid_token.py new file mode 100644 index 0000000000..ddad4c21fd --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_hec_source_valid_token.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_source_valid_token_field_to_add import ObservabilityPipelineSourceValidTokenFieldToAdd + +class ObservabilityPipelineSplunkHecSourceValidToken(ModelNormal): + validations = { + "token_key": { + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_source_valid_token_field_to_add import ObservabilityPipelineSourceValidTokenFieldToAdd + return { + "enabled": (bool,), + "field_to_add": (ObservabilityPipelineSourceValidTokenFieldToAdd,), + "token_key": (str,), + } + attribute_map = { + "enabled": "enabled", + "field_to_add": "field_to_add", + "token_key": "token_key", + } + + def __init__(self_, token_key: str, enabled: Union[bool, UnsetType]=unset, field_to_add: Union[ObservabilityPipelineSourceValidTokenFieldToAdd, UnsetType]=unset, **kwargs): + """ + An accepted HEC token used to authenticate incoming Splunk HEC requests. + + :param enabled: Indicates whether this token is currently accepted. Disabled tokens are rejected without + being removed from the configuration. + :type enabled: bool, optional + + :param field_to_add: An optional metadata field that is attached to every event authenticated by the + associated token. Both ``key`` and ``value`` must match ``^[A-Za-z0-9_]+$``. + :type field_to_add: ObservabilityPipelineSourceValidTokenFieldToAdd, optional + + :param token_key: Name of the environment variable or secret that holds the expected HEC token value. + :type token_key: str + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if field_to_add is not unset: + kwargs["field_to_add"] = field_to_add + super().__init__(kwargs) + + + self_.token_key = token_key diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_tcp_source.py b/datadog_api_client/v2/model/observability_pipeline_splunk_tcp_source.py new file mode 100644 index 0000000000..348416651c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_tcp_source.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source_type import ObservabilityPipelineSplunkTcpSourceType + +class ObservabilityPipelineSplunkTcpSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source_type import ObservabilityPipelineSplunkTcpSourceType + return { + "address_key": (str,), + "id": (str,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineSplunkTcpSourceType,), + } + attribute_map = { + "address_key": "address_key", + "id": "id", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, type: ObservabilityPipelineSplunkTcpSourceType, address_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, **kwargs): + """ + The ``splunk_tcp`` source receives logs from a Splunk Universal Forwarder over TCP. + TLS is supported for secure transmission. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the Splunk TCP receiver. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. Always ``splunk_tcp``. + :type type: ObservabilityPipelineSplunkTcpSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_splunk_tcp_source_type.py b/datadog_api_client/v2/model/observability_pipeline_splunk_tcp_source_type.py new file mode 100644 index 0000000000..dd921ce190 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_splunk_tcp_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSplunkTcpSourceType(ModelSimple): + """ + The source type. Always `splunk_tcp`. + + :param value: If omitted defaults to "splunk_tcp". Must be one of ["splunk_tcp"]. + :type value: str + """ + + allowed_values = { + "splunk_tcp", + } + SPLUNK_TCP: ClassVar["ObservabilityPipelineSplunkTcpSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSplunkTcpSourceType.SPLUNK_TCP = ObservabilityPipelineSplunkTcpSourceType("splunk_tcp") diff --git a/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination.py b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination.py new file mode 100644 index 0000000000..3203efbaea --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination.py @@ -0,0 +1,120 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination_encoding import ObservabilityPipelineSumoLogicDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination_header_custom_fields_item import ObservabilityPipelineSumoLogicDestinationHeaderCustomFieldsItem + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination_type import ObservabilityPipelineSumoLogicDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineSumoLogicDestination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination_encoding import ObservabilityPipelineSumoLogicDestinationEncoding + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination_header_custom_fields_item import ObservabilityPipelineSumoLogicDestinationHeaderCustomFieldsItem + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination_type import ObservabilityPipelineSumoLogicDestinationType + return { + "buffer": (ObservabilityPipelineBufferOptions,), + "encoding": (ObservabilityPipelineSumoLogicDestinationEncoding,), + "endpoint_url_key": (str,), + "header_custom_fields": ([ObservabilityPipelineSumoLogicDestinationHeaderCustomFieldsItem],), + "header_host_name": (str,), + "header_source_category": (str,), + "header_source_name": (str,), + "id": (str,), + "inputs": ([str],), + "type": (ObservabilityPipelineSumoLogicDestinationType,), + } + attribute_map = { + "buffer": "buffer", + "encoding": "encoding", + "endpoint_url_key": "endpoint_url_key", + "header_custom_fields": "header_custom_fields", + "header_host_name": "header_host_name", + "header_source_category": "header_source_category", + "header_source_name": "header_source_name", + "id": "id", + "inputs": "inputs", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineSumoLogicDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, encoding: Union[ObservabilityPipelineSumoLogicDestinationEncoding, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, header_custom_fields: Union[List[ObservabilityPipelineSumoLogicDestinationHeaderCustomFieldsItem], UnsetType]=unset, header_host_name: Union[str, UnsetType]=unset, header_source_category: Union[str, UnsetType]=unset, header_source_name: Union[str, UnsetType]=unset, **kwargs): + """ + The ``sumo_logic`` destination forwards logs to Sumo Logic. + + **Supported pipeline types:** logs + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param encoding: The output encoding format. + :type encoding: ObservabilityPipelineSumoLogicDestinationEncoding, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the Sumo Logic HTTP endpoint URL. + :type endpoint_url_key: str, optional + + :param header_custom_fields: A list of custom headers to include in the request to Sumo Logic. + :type header_custom_fields: [ObservabilityPipelineSumoLogicDestinationHeaderCustomFieldsItem], optional + + :param header_host_name: Optional override for the host name header. + :type header_host_name: str, optional + + :param header_source_category: Optional override for the source category header. + :type header_source_category: str, optional + + :param header_source_name: Optional override for the source name header. + :type header_source_name: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param type: The destination type. The value should always be ``sumo_logic``. + :type type: ObservabilityPipelineSumoLogicDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if encoding is not unset: + kwargs["encoding"] = encoding + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if header_custom_fields is not unset: + kwargs["header_custom_fields"] = header_custom_fields + if header_host_name is not unset: + kwargs["header_host_name"] = header_host_name + if header_source_category is not unset: + kwargs["header_source_category"] = header_source_category + if header_source_name is not unset: + kwargs["header_source_name"] = header_source_name + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination_encoding.py b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination_encoding.py new file mode 100644 index 0000000000..46c8754fd7 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination_encoding.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSumoLogicDestinationEncoding(ModelSimple): + """ + The output encoding format. + + :param value: Must be one of ["json", "raw_message", "logfmt"]. + :type value: str + """ + + allowed_values = { + "json", + "raw_message", + "logfmt", + } + JSON: ClassVar["ObservabilityPipelineSumoLogicDestinationEncoding"] + RAW_MESSAGE: ClassVar["ObservabilityPipelineSumoLogicDestinationEncoding"] + LOGFMT: ClassVar["ObservabilityPipelineSumoLogicDestinationEncoding"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSumoLogicDestinationEncoding.JSON = ObservabilityPipelineSumoLogicDestinationEncoding("json") +ObservabilityPipelineSumoLogicDestinationEncoding.RAW_MESSAGE = ObservabilityPipelineSumoLogicDestinationEncoding("raw_message") +ObservabilityPipelineSumoLogicDestinationEncoding.LOGFMT = ObservabilityPipelineSumoLogicDestinationEncoding("logfmt") diff --git a/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination_header_custom_fields_item.py b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination_header_custom_fields_item.py new file mode 100644 index 0000000000..2d3e2d5591 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination_header_custom_fields_item.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineSumoLogicDestinationHeaderCustomFieldsItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, value: str, **kwargs): + """ + Single key-value pair used as a custom log header for Sumo Logic. + + :param name: The header field name. + :type name: str + + :param value: The header field value. + :type value: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination_type.py new file mode 100644 index 0000000000..c98630d9fc --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSumoLogicDestinationType(ModelSimple): + """ + The destination type. The value should always be `sumo_logic`. + + :param value: If omitted defaults to "sumo_logic". Must be one of ["sumo_logic"]. + :type value: str + """ + + allowed_values = { + "sumo_logic", + } + SUMO_LOGIC: ClassVar["ObservabilityPipelineSumoLogicDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSumoLogicDestinationType.SUMO_LOGIC = ObservabilityPipelineSumoLogicDestinationType("sumo_logic") diff --git a/datadog_api_client/v2/model/observability_pipeline_sumo_logic_source.py b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_source.py new file mode 100644 index 0000000000..3225bf9d2d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_source.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source_type import ObservabilityPipelineSumoLogicSourceType + +class ObservabilityPipelineSumoLogicSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source_type import ObservabilityPipelineSumoLogicSourceType + return { + "address_key": (str,), + "id": (str,), + "type": (ObservabilityPipelineSumoLogicSourceType,), + } + attribute_map = { + "address_key": "address_key", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ObservabilityPipelineSumoLogicSourceType, address_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``sumo_logic`` source receives logs from Sumo Logic collectors. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the Sumo Logic receiver. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param type: The source type. The value should always be ``sumo_logic``. + :type type: ObservabilityPipelineSumoLogicSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_sumo_logic_source_type.py b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_source_type.py new file mode 100644 index 0000000000..a8654ff677 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_sumo_logic_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSumoLogicSourceType(ModelSimple): + """ + The source type. The value should always be `sumo_logic`. + + :param value: If omitted defaults to "sumo_logic". Must be one of ["sumo_logic"]. + :type value: str + """ + + allowed_values = { + "sumo_logic", + } + SUMO_LOGIC: ClassVar["ObservabilityPipelineSumoLogicSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSumoLogicSourceType.SUMO_LOGIC = ObservabilityPipelineSumoLogicSourceType("sumo_logic") diff --git a/datadog_api_client/v2/model/observability_pipeline_syslog_ng_destination.py b/datadog_api_client/v2/model/observability_pipeline_syslog_ng_destination.py new file mode 100644 index 0000000000..0d4e94ff80 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_syslog_ng_destination.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination_type import ObservabilityPipelineSyslogNgDestinationType + from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions + from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions + +class ObservabilityPipelineSyslogNgDestination(ModelNormal): + validations = { + "keepalive": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions + from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination_type import ObservabilityPipelineSyslogNgDestinationType + return { + "buffer": (ObservabilityPipelineBufferOptions,), + "endpoint_url_key": (str,), + "id": (str,), + "inputs": ([str],), + "keepalive": (int,), + "tls": (ObservabilityPipelineClientTls,), + "type": (ObservabilityPipelineSyslogNgDestinationType,), + } + attribute_map = { + "buffer": "buffer", + "endpoint_url_key": "endpoint_url_key", + "id": "id", + "inputs": "inputs", + "keepalive": "keepalive", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, inputs: List[str], type: ObservabilityPipelineSyslogNgDestinationType, buffer: Union[ObservabilityPipelineBufferOptions, ObservabilityPipelineDiskBufferOptions, ObservabilityPipelineMemoryBufferOptions, ObservabilityPipelineMemoryBufferSizeOptions, UnsetType]=unset, endpoint_url_key: Union[str, UnsetType]=unset, keepalive: Union[int, UnsetType]=unset, tls: Union[ObservabilityPipelineClientTls, UnsetType]=unset, **kwargs): + """ + The ``syslog_ng`` destination forwards logs to an external ``syslog-ng`` server over TCP or UDP using the syslog protocol. + + **Supported pipeline types:** logs + + :param buffer: Configuration for buffer settings on destination components. + :type buffer: ObservabilityPipelineBufferOptions, optional + + :param endpoint_url_key: Name of the environment variable or secret that holds the syslog-ng server endpoint URL. + :type endpoint_url_key: str, optional + + :param id: The unique identifier for this component. + :type id: str + + :param inputs: A list of component IDs whose output is used as the ``input`` for this component. + :type inputs: [str] + + :param keepalive: Optional socket keepalive duration in milliseconds. + :type keepalive: int, optional + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external services. + :type tls: ObservabilityPipelineClientTls, optional + + :param type: The destination type. The value should always be ``syslog_ng``. + :type type: ObservabilityPipelineSyslogNgDestinationType + """ + if buffer is not unset: + kwargs["buffer"] = buffer + if endpoint_url_key is not unset: + kwargs["endpoint_url_key"] = endpoint_url_key + if keepalive is not unset: + kwargs["keepalive"] = keepalive + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.inputs = inputs + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_syslog_ng_destination_type.py b/datadog_api_client/v2/model/observability_pipeline_syslog_ng_destination_type.py new file mode 100644 index 0000000000..bb78fdef13 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_syslog_ng_destination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSyslogNgDestinationType(ModelSimple): + """ + The destination type. The value should always be `syslog_ng`. + + :param value: If omitted defaults to "syslog_ng". Must be one of ["syslog_ng"]. + :type value: str + """ + + allowed_values = { + "syslog_ng", + } + SYSLOG_NG: ClassVar["ObservabilityPipelineSyslogNgDestinationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSyslogNgDestinationType.SYSLOG_NG = ObservabilityPipelineSyslogNgDestinationType("syslog_ng") diff --git a/datadog_api_client/v2/model/observability_pipeline_syslog_ng_source.py b/datadog_api_client/v2/model/observability_pipeline_syslog_ng_source.py new file mode 100644 index 0000000000..2c302d9cfa --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_syslog_ng_source.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_syslog_source_mode import ObservabilityPipelineSyslogSourceMode + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source_type import ObservabilityPipelineSyslogNgSourceType + +class ObservabilityPipelineSyslogNgSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_syslog_source_mode import ObservabilityPipelineSyslogSourceMode + from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls + from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source_type import ObservabilityPipelineSyslogNgSourceType + return { + "address_key": (str,), + "id": (str,), + "mode": (ObservabilityPipelineSyslogSourceMode,), + "tls": (ObservabilityPipelineMtlsServerTls,), + "type": (ObservabilityPipelineSyslogNgSourceType,), + } + attribute_map = { + "address_key": "address_key", + "id": "id", + "mode": "mode", + "tls": "tls", + "type": "type", + } + + def __init__(self_, id: str, mode: ObservabilityPipelineSyslogSourceMode, type: ObservabilityPipelineSyslogNgSourceType, address_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineMtlsServerTls, UnsetType]=unset, **kwargs): + """ + The ``syslog_ng`` source listens for logs over TCP or UDP from a ``syslog-ng`` server using the syslog protocol. + + **Supported pipeline types:** logs + + :param address_key: Name of the environment variable or secret that holds the listen address for the syslog-ng receiver. + :type address_key: str, optional + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param mode: Protocol used by the syslog source to receive messages. + :type mode: ObservabilityPipelineSyslogSourceMode + + :param tls: Configuration for enabling TLS encryption between the pipeline component and external connecting clients. + :type tls: ObservabilityPipelineMtlsServerTls, optional + + :param type: The source type. The value should always be ``syslog_ng``. + :type type: ObservabilityPipelineSyslogNgSourceType + """ + if address_key is not unset: + kwargs["address_key"] = address_key + if tls is not unset: + kwargs["tls"] = tls + super().__init__(kwargs) + + + self_.id = id + self_.mode = mode + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_syslog_ng_source_type.py b/datadog_api_client/v2/model/observability_pipeline_syslog_ng_source_type.py new file mode 100644 index 0000000000..e0d86a5169 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_syslog_ng_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSyslogNgSourceType(ModelSimple): + """ + The source type. The value should always be `syslog_ng`. + + :param value: If omitted defaults to "syslog_ng". Must be one of ["syslog_ng"]. + :type value: str + """ + + allowed_values = { + "syslog_ng", + } + SYSLOG_NG: ClassVar["ObservabilityPipelineSyslogNgSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSyslogNgSourceType.SYSLOG_NG = ObservabilityPipelineSyslogNgSourceType("syslog_ng") diff --git a/datadog_api_client/v2/model/observability_pipeline_syslog_source_mode.py b/datadog_api_client/v2/model/observability_pipeline_syslog_source_mode.py new file mode 100644 index 0000000000..a94537c150 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_syslog_source_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineSyslogSourceMode(ModelSimple): + """ + Protocol used by the syslog source to receive messages. + + :param value: Must be one of ["tcp", "udp"]. + :type value: str + """ + + allowed_values = { + "tcp", + "udp", + } + TCP: ClassVar["ObservabilityPipelineSyslogSourceMode"] + UDP: ClassVar["ObservabilityPipelineSyslogSourceMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineSyslogSourceMode.TCP = ObservabilityPipelineSyslogSourceMode("tcp") +ObservabilityPipelineSyslogSourceMode.UDP = ObservabilityPipelineSyslogSourceMode("udp") diff --git a/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor.py b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor.py new file mode 100644 index 0000000000..26bd110623 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_action import ObservabilityPipelineTagCardinalityLimitProcessorAction + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_per_metric_limit import ObservabilityPipelineTagCardinalityLimitProcessorPerMetricLimit + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_tracking_mode import ObservabilityPipelineTagCardinalityLimitProcessorTrackingMode + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_type import ObservabilityPipelineTagCardinalityLimitProcessorType + +class ObservabilityPipelineTagCardinalityLimitProcessor(ModelNormal): + validations = { + "per_metric_limits": { + "max_items": 100, + }, + "value_limit": { + "inclusive_maximum": 1000000, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_action import ObservabilityPipelineTagCardinalityLimitProcessorAction + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_per_metric_limit import ObservabilityPipelineTagCardinalityLimitProcessorPerMetricLimit + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_tracking_mode import ObservabilityPipelineTagCardinalityLimitProcessorTrackingMode + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_type import ObservabilityPipelineTagCardinalityLimitProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "id": (str,), + "include": (str,), + "limit_exceeded_action": (ObservabilityPipelineTagCardinalityLimitProcessorAction,), + "per_metric_limits": ([ObservabilityPipelineTagCardinalityLimitProcessorPerMetricLimit],), + "tracking_mode": (ObservabilityPipelineTagCardinalityLimitProcessorTrackingMode,), + "type": (ObservabilityPipelineTagCardinalityLimitProcessorType,), + "value_limit": (int,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "id": "id", + "include": "include", + "limit_exceeded_action": "limit_exceeded_action", + "per_metric_limits": "per_metric_limits", + "tracking_mode": "tracking_mode", + "type": "type", + "value_limit": "value_limit", + } + + def __init__(self_, enabled: bool, id: str, include: str, limit_exceeded_action: ObservabilityPipelineTagCardinalityLimitProcessorAction, tracking_mode: ObservabilityPipelineTagCardinalityLimitProcessorTrackingMode, type: ObservabilityPipelineTagCardinalityLimitProcessorType, value_limit: int, display_name: Union[str, UnsetType]=unset, per_metric_limits: Union[List[ObservabilityPipelineTagCardinalityLimitProcessorPerMetricLimit], UnsetType]=unset, **kwargs): + """ + The ``tag_cardinality_limit`` processor caps the number of distinct tag value combinations on metrics, dropping tags or events once the limit is exceeded. + + **Supported pipeline types:** metrics + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param id: The unique identifier for this component. Used in other parts of the pipeline to reference this component (for example, as the ``input`` to downstream components). + :type id: str + + :param include: A Datadog search query used to determine which metrics this processor targets. + :type include: str + + :param limit_exceeded_action: The action to take when the cardinality limit is exceeded. + :type limit_exceeded_action: ObservabilityPipelineTagCardinalityLimitProcessorAction + + :param per_metric_limits: A list of per-metric cardinality overrides that take precedence over the default ``value_limit``. + :type per_metric_limits: [ObservabilityPipelineTagCardinalityLimitProcessorPerMetricLimit], optional + + :param tracking_mode: Controls whether the processor uses exact or probabilistic tag tracking. + :type tracking_mode: ObservabilityPipelineTagCardinalityLimitProcessorTrackingMode + + :param type: The processor type. The value must be ``tag_cardinality_limit``. + :type type: ObservabilityPipelineTagCardinalityLimitProcessorType + + :param value_limit: The default maximum number of distinct tag value combinations allowed per metric. + :type value_limit: int + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if per_metric_limits is not unset: + kwargs["per_metric_limits"] = per_metric_limits + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.limit_exceeded_action = limit_exceeded_action + self_.tracking_mode = tracking_mode + self_.type = type + self_.value_limit = value_limit diff --git a/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_action.py b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_action.py new file mode 100644 index 0000000000..a647e2f78c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_action.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineTagCardinalityLimitProcessorAction(ModelSimple): + """ + The action to take when the cardinality limit is exceeded. + + :param value: Must be one of ["drop_tag", "drop_event"]. + :type value: str + """ + + allowed_values = { + "drop_tag", + "drop_event", + } + DROP_TAG: ClassVar["ObservabilityPipelineTagCardinalityLimitProcessorAction"] + DROP_EVENT: ClassVar["ObservabilityPipelineTagCardinalityLimitProcessorAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineTagCardinalityLimitProcessorAction.DROP_TAG = ObservabilityPipelineTagCardinalityLimitProcessorAction("drop_tag") +ObservabilityPipelineTagCardinalityLimitProcessorAction.DROP_EVENT = ObservabilityPipelineTagCardinalityLimitProcessorAction("drop_event") diff --git a/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_override_type.py b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_override_type.py new file mode 100644 index 0000000000..c032ce59e4 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_override_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineTagCardinalityLimitProcessorOverrideType(ModelSimple): + """ + How the override is applied. `limit_override` enforces a custom limit; `excluded` omits the metric or tag from cardinality tracking. + + :param value: Must be one of ["limit_override", "excluded"]. + :type value: str + """ + + allowed_values = { + "limit_override", + "excluded", + } + LIMIT_OVERRIDE: ClassVar["ObservabilityPipelineTagCardinalityLimitProcessorOverrideType"] + EXCLUDED: ClassVar["ObservabilityPipelineTagCardinalityLimitProcessorOverrideType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineTagCardinalityLimitProcessorOverrideType.LIMIT_OVERRIDE = ObservabilityPipelineTagCardinalityLimitProcessorOverrideType("limit_override") +ObservabilityPipelineTagCardinalityLimitProcessorOverrideType.EXCLUDED = ObservabilityPipelineTagCardinalityLimitProcessorOverrideType("excluded") diff --git a/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_per_metric_limit.py b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_per_metric_limit.py new file mode 100644 index 0000000000..8cf871dc7d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_per_metric_limit.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_action import ObservabilityPipelineTagCardinalityLimitProcessorAction + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_override_type import ObservabilityPipelineTagCardinalityLimitProcessorOverrideType + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_per_tag_limit import ObservabilityPipelineTagCardinalityLimitProcessorPerTagLimit + +class ObservabilityPipelineTagCardinalityLimitProcessorPerMetricLimit(ModelNormal): + validations = { + "per_tag_limits": { + "max_items": 50, + }, + "value_limit": { + "inclusive_maximum": 1000000, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_action import ObservabilityPipelineTagCardinalityLimitProcessorAction + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_override_type import ObservabilityPipelineTagCardinalityLimitProcessorOverrideType + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_per_tag_limit import ObservabilityPipelineTagCardinalityLimitProcessorPerTagLimit + return { + "limit_exceeded_action": (ObservabilityPipelineTagCardinalityLimitProcessorAction,), + "metric_name": (str,), + "override_type": (ObservabilityPipelineTagCardinalityLimitProcessorOverrideType,), + "per_tag_limits": ([ObservabilityPipelineTagCardinalityLimitProcessorPerTagLimit],), + "value_limit": (int,), + } + attribute_map = { + "limit_exceeded_action": "limit_exceeded_action", + "metric_name": "metric_name", + "override_type": "override_type", + "per_tag_limits": "per_tag_limits", + "value_limit": "value_limit", + } + + def __init__(self_, metric_name: str, override_type: ObservabilityPipelineTagCardinalityLimitProcessorOverrideType, limit_exceeded_action: Union[ObservabilityPipelineTagCardinalityLimitProcessorAction, UnsetType]=unset, per_tag_limits: Union[List[ObservabilityPipelineTagCardinalityLimitProcessorPerTagLimit], UnsetType]=unset, value_limit: Union[int, UnsetType]=unset, **kwargs): + """ + A cardinality override applied to a specific metric. + + :param limit_exceeded_action: The action to take when the cardinality limit is exceeded. + :type limit_exceeded_action: ObservabilityPipelineTagCardinalityLimitProcessorAction, optional + + :param metric_name: The name of the metric this override applies to. + :type metric_name: str + + :param override_type: How the override is applied. ``limit_override`` enforces a custom limit; ``excluded`` omits the metric or tag from cardinality tracking. + :type override_type: ObservabilityPipelineTagCardinalityLimitProcessorOverrideType + + :param per_tag_limits: A list of per-tag cardinality overrides that apply within this metric. Must be omitted when ``override_type`` is ``excluded``. + :type per_tag_limits: [ObservabilityPipelineTagCardinalityLimitProcessorPerTagLimit], optional + + :param value_limit: The maximum number of distinct tag value combinations allowed for this metric. Required when ``override_type`` is ``limit_override``. Must be omitted when ``override_type`` is ``excluded``. + :type value_limit: int, optional + """ + if limit_exceeded_action is not unset: + kwargs["limit_exceeded_action"] = limit_exceeded_action + if per_tag_limits is not unset: + kwargs["per_tag_limits"] = per_tag_limits + if value_limit is not unset: + kwargs["value_limit"] = value_limit + super().__init__(kwargs) + + + self_.metric_name = metric_name + self_.override_type = override_type diff --git a/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_per_tag_limit.py b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_per_tag_limit.py new file mode 100644 index 0000000000..5def45752b --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_per_tag_limit.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_override_type import ObservabilityPipelineTagCardinalityLimitProcessorOverrideType + +class ObservabilityPipelineTagCardinalityLimitProcessorPerTagLimit(ModelNormal): + validations = { + "value_limit": { + "inclusive_maximum": 1000000, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_override_type import ObservabilityPipelineTagCardinalityLimitProcessorOverrideType + return { + "override_type": (ObservabilityPipelineTagCardinalityLimitProcessorOverrideType,), + "tag_key": (str,), + "value_limit": (int,), + } + attribute_map = { + "override_type": "override_type", + "tag_key": "tag_key", + "value_limit": "value_limit", + } + + def __init__(self_, override_type: ObservabilityPipelineTagCardinalityLimitProcessorOverrideType, tag_key: str, value_limit: Union[int, UnsetType]=unset, **kwargs): + """ + A cardinality override for a specific tag key within a per-metric limit. + + :param override_type: How the override is applied. ``limit_override`` enforces a custom limit; ``excluded`` omits the metric or tag from cardinality tracking. + :type override_type: ObservabilityPipelineTagCardinalityLimitProcessorOverrideType + + :param tag_key: The tag key this override applies to. + :type tag_key: str + + :param value_limit: The maximum number of distinct values allowed for this tag. Required when ``override_type`` is ``limit_override``. Must be omitted when ``override_type`` is ``excluded``. + :type value_limit: int, optional + """ + if value_limit is not unset: + kwargs["value_limit"] = value_limit + super().__init__(kwargs) + + + self_.override_type = override_type + self_.tag_key = tag_key diff --git a/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_tracking_mode.py b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_tracking_mode.py new file mode 100644 index 0000000000..89cc7d7f08 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_tracking_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_tracking_mode_mode import ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode + +class ObservabilityPipelineTagCardinalityLimitProcessorTrackingMode(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_tracking_mode_mode import ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode + return { + "mode": (ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode,), + } + attribute_map = { + "mode": "mode", + } + + def __init__(self_, mode: ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode, **kwargs): + """ + Controls whether the processor uses exact or probabilistic tag tracking. + + :param mode: The cardinality tracking algorithm to use. + :type mode: ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode + """ + super().__init__(kwargs) + + + self_.mode = mode diff --git a/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_tracking_mode_mode.py b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_tracking_mode_mode.py new file mode 100644 index 0000000000..2cfaba6777 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_tracking_mode_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode(ModelSimple): + """ + The cardinality tracking algorithm to use. + + :param value: Must be one of ["exact_fingerprint", "probabilistic"]. + :type value: str + """ + + allowed_values = { + "exact_fingerprint", + "probabilistic", + } + EXACT_FINGERPRINT: ClassVar["ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode"] + PROBABILISTIC: ClassVar["ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode.EXACT_FINGERPRINT = ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode("exact_fingerprint") +ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode.PROBABILISTIC = ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode("probabilistic") diff --git a/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_type.py new file mode 100644 index 0000000000..d5984522cd --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_tag_cardinality_limit_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineTagCardinalityLimitProcessorType(ModelSimple): + """ + The processor type. The value must be `tag_cardinality_limit`. + + :param value: If omitted defaults to "tag_cardinality_limit". Must be one of ["tag_cardinality_limit"]. + :type value: str + """ + + allowed_values = { + "tag_cardinality_limit", + } + TAG_CARDINALITY_LIMIT: ClassVar["ObservabilityPipelineTagCardinalityLimitProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineTagCardinalityLimitProcessorType.TAG_CARDINALITY_LIMIT = ObservabilityPipelineTagCardinalityLimitProcessorType("tag_cardinality_limit") diff --git a/datadog_api_client/v2/model/observability_pipeline_throttle_processor.py b/datadog_api_client/v2/model/observability_pipeline_throttle_processor.py new file mode 100644 index 0000000000..5b04c7f1ac --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_throttle_processor.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_throttle_processor_type import ObservabilityPipelineThrottleProcessorType + +class ObservabilityPipelineThrottleProcessor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_throttle_processor_type import ObservabilityPipelineThrottleProcessorType + return { + "display_name": (str,), + "enabled": (bool,), + "group_by": ([str],), + "id": (str,), + "include": (str,), + "threshold": (int,), + "type": (ObservabilityPipelineThrottleProcessorType,), + "window": (float,), + } + attribute_map = { + "display_name": "display_name", + "enabled": "enabled", + "group_by": "group_by", + "id": "id", + "include": "include", + "threshold": "threshold", + "type": "type", + "window": "window", + } + + def __init__(self_, enabled: bool, id: str, include: str, threshold: int, type: ObservabilityPipelineThrottleProcessorType, window: float, display_name: Union[str, UnsetType]=unset, group_by: Union[List[str], UnsetType]=unset, **kwargs): + """ + The ``throttle`` processor limits the number of events that pass through over a given time window. + + **Supported pipeline types:** logs + + :param display_name: The display name for a component. + :type display_name: str, optional + + :param enabled: Indicates whether the processor is enabled. + :type enabled: bool + + :param group_by: Optional list of fields used to group events before the threshold has been reached. + :type group_by: [str], optional + + :param id: The unique identifier for this processor. + :type id: str + + :param include: A Datadog search query used to determine which logs this processor targets. + :type include: str + + :param threshold: the number of events allowed in a given time window. Events sent after the threshold has been reached, are dropped. + :type threshold: int + + :param type: The processor type. The value should always be ``throttle``. + :type type: ObservabilityPipelineThrottleProcessorType + + :param window: The time window in seconds over which the threshold applies. + :type window: float + """ + if display_name is not unset: + kwargs["display_name"] = display_name + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + + self_.enabled = enabled + self_.id = id + self_.include = include + self_.threshold = threshold + self_.type = type + self_.window = window diff --git a/datadog_api_client/v2/model/observability_pipeline_throttle_processor_type.py b/datadog_api_client/v2/model/observability_pipeline_throttle_processor_type.py new file mode 100644 index 0000000000..025e232b93 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_throttle_processor_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineThrottleProcessorType(ModelSimple): + """ + The processor type. The value should always be `throttle`. + + :param value: If omitted defaults to "throttle". Must be one of ["throttle"]. + :type value: str + """ + + allowed_values = { + "throttle", + } + THROTTLE: ClassVar["ObservabilityPipelineThrottleProcessorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineThrottleProcessorType.THROTTLE = ObservabilityPipelineThrottleProcessorType("throttle") diff --git a/datadog_api_client/v2/model/observability_pipeline_tls.py b/datadog_api_client/v2/model/observability_pipeline_tls.py new file mode 100644 index 0000000000..044286fe68 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_tls.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineTls(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ca_file": (str,), + "crt_file": (str,), + "key_file": (str,), + "key_pass_key": (str,), + } + attribute_map = { + "ca_file": "ca_file", + "crt_file": "crt_file", + "key_file": "key_file", + "key_pass_key": "key_pass_key", + } + + def __init__(self_, crt_file: str, ca_file: Union[str, UnsetType]=unset, key_file: Union[str, UnsetType]=unset, key_pass_key: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration for enabling TLS encryption between the pipeline component and external services. + + :param ca_file: Path to the Certificate Authority (CA) file used to validate the server’s TLS certificate. + :type ca_file: str, optional + + :param crt_file: Path to the TLS client certificate file used to authenticate the pipeline component with upstream or downstream services. + :type crt_file: str + + :param key_file: Path to the private key file associated with the TLS client certificate. Used for mutual TLS authentication. + :type key_file: str, optional + + :param key_pass_key: Name of the environment variable or secret that holds the passphrase for the private key file. + :type key_pass_key: str, optional + """ + if ca_file is not unset: + kwargs["ca_file"] = ca_file + if key_file is not unset: + kwargs["key_file"] = key_file + if key_pass_key is not unset: + kwargs["key_pass_key"] = key_pass_key + super().__init__(kwargs) + + + self_.crt_file = crt_file diff --git a/datadog_api_client/v2/model/observability_pipeline_websocket_source.py b/datadog_api_client/v2/model/observability_pipeline_websocket_source.py new file mode 100644 index 0000000000..4a42764c09 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_websocket_source.py @@ -0,0 +1,118 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_websocket_source_auth_strategy import ObservabilityPipelineWebsocketSourceAuthStrategy + from datadog_api_client.v2.model.observability_pipeline_decoding import ObservabilityPipelineDecoding + from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls import ObservabilityPipelineWebsocketSourceTls + from datadog_api_client.v2.model.observability_pipeline_websocket_source_type import ObservabilityPipelineWebsocketSourceType + from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_enabled import ObservabilityPipelineWebsocketSourceTlsEnabled + from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_with_client_cert import ObservabilityPipelineWebsocketSourceTlsWithClientCert + +class ObservabilityPipelineWebsocketSource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_websocket_source_auth_strategy import ObservabilityPipelineWebsocketSourceAuthStrategy + from datadog_api_client.v2.model.observability_pipeline_decoding import ObservabilityPipelineDecoding + from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls import ObservabilityPipelineWebsocketSourceTls + from datadog_api_client.v2.model.observability_pipeline_websocket_source_type import ObservabilityPipelineWebsocketSourceType + return { + "auth_strategy": (ObservabilityPipelineWebsocketSourceAuthStrategy,), + "custom_key": (str,), + "decoding": (ObservabilityPipelineDecoding,), + "id": (str,), + "password_key": (str,), + "tls": (ObservabilityPipelineWebsocketSourceTls,), + "token_key": (str,), + "type": (ObservabilityPipelineWebsocketSourceType,), + "uri_key": (str,), + "username_key": (str,), + } + attribute_map = { + "auth_strategy": "auth_strategy", + "custom_key": "custom_key", + "decoding": "decoding", + "id": "id", + "password_key": "password_key", + "tls": "tls", + "token_key": "token_key", + "type": "type", + "uri_key": "uri_key", + "username_key": "username_key", + } + + def __init__(self_, auth_strategy: ObservabilityPipelineWebsocketSourceAuthStrategy, decoding: ObservabilityPipelineDecoding, id: str, type: ObservabilityPipelineWebsocketSourceType, custom_key: Union[str, UnsetType]=unset, password_key: Union[str, UnsetType]=unset, tls: Union[ObservabilityPipelineWebsocketSourceTls, ObservabilityPipelineWebsocketSourceTlsEnabled, ObservabilityPipelineWebsocketSourceTlsWithClientCert, UnsetType]=unset, token_key: Union[str, UnsetType]=unset, uri_key: Union[str, UnsetType]=unset, username_key: Union[str, UnsetType]=unset, **kwargs): + """ + The ``websocket`` source ingests logs from a WebSocket server using the ``ws://`` or ``wss://`` protocol. + + **Supported pipeline types:** logs. + + :param auth_strategy: Authentication strategy for the WebSocket source connection. + :type auth_strategy: ObservabilityPipelineWebsocketSourceAuthStrategy + + :param custom_key: Name of the environment variable or secret that holds the custom authorization header value. Used when ``auth_strategy`` is ``custom``. + :type custom_key: str, optional + + :param decoding: The decoding format used to interpret incoming logs. + :type decoding: ObservabilityPipelineDecoding + + :param id: The unique identifier for this component. + :type id: str + + :param password_key: Name of the environment variable or secret that holds the password. Used when ``auth_strategy`` is ``basic``. + :type password_key: str, optional + + :param tls: TLS configuration for the WebSocket source. Use ``enabled`` for standard ``wss://`` connections, or ``with_client_cert`` to present a client certificate for mutual TLS. + :type tls: ObservabilityPipelineWebsocketSourceTls, optional + + :param token_key: Name of the environment variable or secret that holds the bearer token. Used when ``auth_strategy`` is ``bearer``. + :type token_key: str, optional + + :param type: The source type. The value should always be ``websocket``. + :type type: ObservabilityPipelineWebsocketSourceType + + :param uri_key: Name of the environment variable or secret that holds the WebSocket server URI ( ``ws://`` or ``wss://`` ). + :type uri_key: str, optional + + :param username_key: Name of the environment variable or secret that holds the username. Used when ``auth_strategy`` is ``basic``. + :type username_key: str, optional + """ + if custom_key is not unset: + kwargs["custom_key"] = custom_key + if password_key is not unset: + kwargs["password_key"] = password_key + if tls is not unset: + kwargs["tls"] = tls + if token_key is not unset: + kwargs["token_key"] = token_key + if uri_key is not unset: + kwargs["uri_key"] = uri_key + if username_key is not unset: + kwargs["username_key"] = username_key + super().__init__(kwargs) + + + self_.auth_strategy = auth_strategy + self_.decoding = decoding + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/observability_pipeline_websocket_source_auth_strategy.py b/datadog_api_client/v2/model/observability_pipeline_websocket_source_auth_strategy.py new file mode 100644 index 0000000000..fa70c6a80d --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_websocket_source_auth_strategy.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineWebsocketSourceAuthStrategy(ModelSimple): + """ + Authentication strategy for the WebSocket source connection. + + :param value: Must be one of ["none", "basic", "bearer", "custom"]. + :type value: str + """ + + allowed_values = { + "none", + "basic", + "bearer", + "custom", + } + NONE: ClassVar["ObservabilityPipelineWebsocketSourceAuthStrategy"] + BASIC: ClassVar["ObservabilityPipelineWebsocketSourceAuthStrategy"] + BEARER: ClassVar["ObservabilityPipelineWebsocketSourceAuthStrategy"] + CUSTOM: ClassVar["ObservabilityPipelineWebsocketSourceAuthStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineWebsocketSourceAuthStrategy.NONE = ObservabilityPipelineWebsocketSourceAuthStrategy("none") +ObservabilityPipelineWebsocketSourceAuthStrategy.BASIC = ObservabilityPipelineWebsocketSourceAuthStrategy("basic") +ObservabilityPipelineWebsocketSourceAuthStrategy.BEARER = ObservabilityPipelineWebsocketSourceAuthStrategy("bearer") +ObservabilityPipelineWebsocketSourceAuthStrategy.CUSTOM = ObservabilityPipelineWebsocketSourceAuthStrategy("custom") diff --git a/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls.py b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls.py new file mode 100644 index 0000000000..7cb21cb29e --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ObservabilityPipelineWebsocketSourceTls(ModelComposed): + + + + def __init__(self, **kwargs): + """ + TLS configuration for the WebSocket source. Use ``enabled`` for standard ``wss://`` connections, or ``with_client_cert`` to present a client certificate for mutual TLS. + + :param mode: TLS mode. Must be `enabled`. + :type mode: ObservabilityPipelineWebsocketSourceTlsEnabledMode + + :param ca_file: Path to the Certificate Authority (CA) file used to validate the remote server's TLS certificate. + :type ca_file: str, optional + + :param crt_file: Path to the TLS client certificate file used to identify this source to the remote server. + :type crt_file: str + + :param key_file: Path to the private key file associated with the client certificate. + :type key_file: str, optional + + :param key_pass_key: Name of the environment variable or secret that holds the passphrase for the private key file. + :type key_pass_key: str, 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.observability_pipeline_websocket_source_tls_enabled import ObservabilityPipelineWebsocketSourceTlsEnabled + from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_with_client_cert import ObservabilityPipelineWebsocketSourceTlsWithClientCert + return { + "oneOf": [ + ObservabilityPipelineWebsocketSourceTlsEnabled, + ObservabilityPipelineWebsocketSourceTlsWithClientCert, + ], + } diff --git a/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_enabled.py b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_enabled.py new file mode 100644 index 0000000000..36e30b2342 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_enabled.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_enabled_mode import ObservabilityPipelineWebsocketSourceTlsEnabledMode + +class ObservabilityPipelineWebsocketSourceTlsEnabled(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_enabled_mode import ObservabilityPipelineWebsocketSourceTlsEnabledMode + return { + "mode": (ObservabilityPipelineWebsocketSourceTlsEnabledMode,), + } + attribute_map = { + "mode": "mode", + } + + def __init__(self_, mode: ObservabilityPipelineWebsocketSourceTlsEnabledMode, **kwargs): + """ + TLS configuration that enables encryption without a client certificate. Use this for standard ``wss://`` connections that do not require mutual TLS. + + :param mode: TLS mode. Must be ``enabled``. + :type mode: ObservabilityPipelineWebsocketSourceTlsEnabledMode + """ + super().__init__(kwargs) + + + self_.mode = mode diff --git a/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_enabled_mode.py b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_enabled_mode.py new file mode 100644 index 0000000000..47ead29333 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_enabled_mode.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineWebsocketSourceTlsEnabledMode(ModelSimple): + """ + TLS mode. Must be `enabled`. + + :param value: If omitted defaults to "enabled". Must be one of ["enabled"]. + :type value: str + """ + + allowed_values = { + "enabled", + } + ENABLED: ClassVar["ObservabilityPipelineWebsocketSourceTlsEnabledMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineWebsocketSourceTlsEnabledMode.ENABLED = ObservabilityPipelineWebsocketSourceTlsEnabledMode("enabled") diff --git a/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_with_client_cert.py b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_with_client_cert.py new file mode 100644 index 0000000000..65123c753c --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_with_client_cert.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_with_client_cert_mode import ObservabilityPipelineWebsocketSourceTlsWithClientCertMode + +class ObservabilityPipelineWebsocketSourceTlsWithClientCert(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_with_client_cert_mode import ObservabilityPipelineWebsocketSourceTlsWithClientCertMode + return { + "ca_file": (str,), + "crt_file": (str,), + "key_file": (str,), + "key_pass_key": (str,), + "mode": (ObservabilityPipelineWebsocketSourceTlsWithClientCertMode,), + } + attribute_map = { + "ca_file": "ca_file", + "crt_file": "crt_file", + "key_file": "key_file", + "key_pass_key": "key_pass_key", + "mode": "mode", + } + + def __init__(self_, crt_file: str, mode: ObservabilityPipelineWebsocketSourceTlsWithClientCertMode, ca_file: Union[str, UnsetType]=unset, key_file: Union[str, UnsetType]=unset, key_pass_key: Union[str, UnsetType]=unset, **kwargs): + """ + TLS configuration that enables encryption and presents a client certificate for mutual TLS authentication. + + :param ca_file: Path to the Certificate Authority (CA) file used to validate the remote server's TLS certificate. + :type ca_file: str, optional + + :param crt_file: Path to the TLS client certificate file used to identify this source to the remote server. + :type crt_file: str + + :param key_file: Path to the private key file associated with the client certificate. + :type key_file: str, optional + + :param key_pass_key: Name of the environment variable or secret that holds the passphrase for the private key file. + :type key_pass_key: str, optional + + :param mode: TLS mode. Must be ``with_client_cert``. + :type mode: ObservabilityPipelineWebsocketSourceTlsWithClientCertMode + """ + if ca_file is not unset: + kwargs["ca_file"] = ca_file + if key_file is not unset: + kwargs["key_file"] = key_file + if key_pass_key is not unset: + kwargs["key_pass_key"] = key_pass_key + super().__init__(kwargs) + + + self_.crt_file = crt_file + self_.mode = mode diff --git a/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_with_client_cert_mode.py b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_with_client_cert_mode.py new file mode 100644 index 0000000000..0f976546b2 --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_websocket_source_tls_with_client_cert_mode.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineWebsocketSourceTlsWithClientCertMode(ModelSimple): + """ + TLS mode. Must be `with_client_cert`. + + :param value: If omitted defaults to "with_client_cert". Must be one of ["with_client_cert"]. + :type value: str + """ + + allowed_values = { + "with_client_cert", + } + WITH_CLIENT_CERT: ClassVar["ObservabilityPipelineWebsocketSourceTlsWithClientCertMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineWebsocketSourceTlsWithClientCertMode.WITH_CLIENT_CERT = ObservabilityPipelineWebsocketSourceTlsWithClientCertMode("with_client_cert") diff --git a/datadog_api_client/v2/model/observability_pipeline_websocket_source_type.py b/datadog_api_client/v2/model/observability_pipeline_websocket_source_type.py new file mode 100644 index 0000000000..ee61e232da --- /dev/null +++ b/datadog_api_client/v2/model/observability_pipeline_websocket_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ObservabilityPipelineWebsocketSourceType(ModelSimple): + """ + The source type. The value should always be `websocket`. + + :param value: If omitted defaults to "websocket". Must be one of ["websocket"]. + :type value: str + """ + + allowed_values = { + "websocket", + } + WEBSOCKET: ClassVar["ObservabilityPipelineWebsocketSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ObservabilityPipelineWebsocketSourceType.WEBSOCKET = ObservabilityPipelineWebsocketSourceType("websocket") diff --git a/datadog_api_client/v2/model/oci_config.py b/datadog_api_client/v2/model/oci_config.py new file mode 100644 index 0000000000..3d394c81fa --- /dev/null +++ b/datadog_api_client/v2/model/oci_config.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.oci_config_attributes import OCIConfigAttributes + from datadog_api_client.v2.model.oci_config_type import OCIConfigType + +class OCIConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.oci_config_attributes import OCIConfigAttributes + from datadog_api_client.v2.model.oci_config_type import OCIConfigType + return { + "attributes": (OCIConfigAttributes,), + "id": (str,), + "type": (OCIConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OCIConfigAttributes, id: str, type: OCIConfigType, **kwargs): + """ + OCI config. + + :param attributes: Attributes for an OCI config. + :type attributes: OCIConfigAttributes + + :param id: The ID of the OCI config. + :type id: str + + :param type: Type of OCI config. + :type type: OCIConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/oci_config_attributes.py b/datadog_api_client/v2/model/oci_config_attributes.py new file mode 100644 index 0000000000..dcbbc0f196 --- /dev/null +++ b/datadog_api_client/v2/model/oci_config_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OCIConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "created_at": (str,), + "error_messages": ([str], none_type), + "status": (str,), + "status_updated_at": (str,), + "updated_at": (str,), + } + attribute_map = { + "account_id": "account_id", + "created_at": "created_at", + "error_messages": "error_messages", + "status": "status", + "status_updated_at": "status_updated_at", + "updated_at": "updated_at", + } + + def __init__(self_, account_id: str, created_at: str, status: str, status_updated_at: str, updated_at: str, error_messages: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Attributes for an OCI config. + + :param account_id: The OCID of the OCI tenancy. + :type account_id: str + + :param created_at: The timestamp when the OCI config was created. + :type created_at: str + + :param error_messages: The error messages for the OCI config. + :type error_messages: [str], none_type, optional + + :param status: The status of the OCI config. + :type status: str + + :param status_updated_at: The timestamp when the OCI config status was last updated. + :type status_updated_at: str + + :param updated_at: The timestamp when the OCI config was last updated. + :type updated_at: str + """ + if error_messages is not unset: + kwargs["error_messages"] = error_messages + super().__init__(kwargs) + + + self_.account_id = account_id + self_.created_at = created_at + self_.status = status + self_.status_updated_at = status_updated_at + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/oci_config_type.py b/datadog_api_client/v2/model/oci_config_type.py new file mode 100644 index 0000000000..18ada5500c --- /dev/null +++ b/datadog_api_client/v2/model/oci_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OCIConfigType(ModelSimple): + """ + Type of OCI config. + + :param value: If omitted defaults to "oci_config". Must be one of ["oci_config"]. + :type value: str + """ + + allowed_values = { + "oci_config", + } + OCI_CONFIG: ClassVar["OCIConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OCIConfigType.OCI_CONFIG = OCIConfigType("oci_config") diff --git a/datadog_api_client/v2/model/oci_configs_response.py b/datadog_api_client/v2/model/oci_configs_response.py new file mode 100644 index 0000000000..ee177a3d83 --- /dev/null +++ b/datadog_api_client/v2/model/oci_configs_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.oci_config import OCIConfig + +class OCIConfigsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.oci_config import OCIConfig + return { + "data": ([OCIConfig],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[OCIConfig], **kwargs): + """ + List of OCI configs. + + :param data: An OCI config. + :type data: [OCIConfig] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/okta_account.py b/datadog_api_client/v2/model/okta_account.py new file mode 100644 index 0000000000..5ea473526c --- /dev/null +++ b/datadog_api_client/v2/model/okta_account.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_account_attributes import OktaAccountAttributes + from datadog_api_client.v2.model.okta_account_type import OktaAccountType + +class OktaAccount(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_account_attributes import OktaAccountAttributes + from datadog_api_client.v2.model.okta_account_type import OktaAccountType + return { + "attributes": (OktaAccountAttributes,), + "id": (str,), + "type": (OktaAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OktaAccountAttributes, type: OktaAccountType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Schema for an Okta account. + + :param attributes: Attributes object for an Okta account. + :type attributes: OktaAccountAttributes + + :param id: The ID of the Okta account, a UUID hash of the account name. + :type id: str, optional + + :param type: Account type for an Okta account. + :type type: OktaAccountType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/okta_account_attributes.py b/datadog_api_client/v2/model/okta_account_attributes.py new file mode 100644 index 0000000000..728283fe54 --- /dev/null +++ b/datadog_api_client/v2/model/okta_account_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OktaAccountAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_key": (str,), + "auth_method": (str,), + "client_id": (str,), + "client_secret": (str,), + "domain": (str,), + "name": (str,), + } + attribute_map = { + "api_key": "api_key", + "auth_method": "auth_method", + "client_id": "client_id", + "client_secret": "client_secret", + "domain": "domain", + "name": "name", + } + + def __init__(self_, auth_method: str, domain: str, name: str, api_key: Union[str, UnsetType]=unset, client_id: Union[str, UnsetType]=unset, client_secret: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes object for an Okta account. + + :param api_key: The API key of the Okta account. + :type api_key: str, optional + + :param auth_method: The authorization method for an Okta account. + :type auth_method: str + + :param client_id: The Client ID of an Okta app integration. + :type client_id: str, optional + + :param client_secret: The client secret of an Okta app integration. + :type client_secret: str, optional + + :param domain: The domain of the Okta account. + :type domain: str + + :param name: The name of the Okta account. + :type name: str + """ + if api_key is not unset: + kwargs["api_key"] = api_key + if client_id is not unset: + kwargs["client_id"] = client_id + if client_secret is not unset: + kwargs["client_secret"] = client_secret + super().__init__(kwargs) + + + self_.auth_method = auth_method + self_.domain = domain + self_.name = name diff --git a/datadog_api_client/v2/model/okta_account_request.py b/datadog_api_client/v2/model/okta_account_request.py new file mode 100644 index 0000000000..80db704675 --- /dev/null +++ b/datadog_api_client/v2/model/okta_account_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_account import OktaAccount + +class OktaAccountRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_account import OktaAccount + return { + "data": (OktaAccount,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OktaAccount, **kwargs): + """ + Request object for an Okta account. + + :param data: Schema for an Okta account. + :type data: OktaAccount + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/okta_account_response.py b/datadog_api_client/v2/model/okta_account_response.py new file mode 100644 index 0000000000..967f90d2b4 --- /dev/null +++ b/datadog_api_client/v2/model/okta_account_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_account import OktaAccount + +class OktaAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_account import OktaAccount + return { + "data": (OktaAccount,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[OktaAccount, UnsetType]=unset, **kwargs): + """ + Response object for an Okta account. + + :param data: Schema for an Okta account. + :type data: OktaAccount, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/okta_account_response_data.py b/datadog_api_client/v2/model/okta_account_response_data.py new file mode 100644 index 0000000000..5c1db3b3af --- /dev/null +++ b/datadog_api_client/v2/model/okta_account_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_account_attributes import OktaAccountAttributes + from datadog_api_client.v2.model.okta_account_type import OktaAccountType + +class OktaAccountResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_account_attributes import OktaAccountAttributes + from datadog_api_client.v2.model.okta_account_type import OktaAccountType + return { + "attributes": (OktaAccountAttributes,), + "id": (str,), + "type": (OktaAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OktaAccountAttributes, id: str, type: OktaAccountType, **kwargs): + """ + Data object of an Okta account + + :param attributes: Attributes object for an Okta account. + :type attributes: OktaAccountAttributes + + :param id: The ID of the Okta account, a UUID hash of the account name. + :type id: str + + :param type: Account type for an Okta account. + :type type: OktaAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/okta_account_type.py b/datadog_api_client/v2/model/okta_account_type.py new file mode 100644 index 0000000000..98010c2a5f --- /dev/null +++ b/datadog_api_client/v2/model/okta_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OktaAccountType(ModelSimple): + """ + Account type for an Okta account. + + :param value: If omitted defaults to "okta-accounts". Must be one of ["okta-accounts"]. + :type value: str + """ + + allowed_values = { + "okta-accounts", + } + OKTA_ACCOUNTS: ClassVar["OktaAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OktaAccountType.OKTA_ACCOUNTS = OktaAccountType("okta-accounts") diff --git a/datadog_api_client/v2/model/okta_account_update_request.py b/datadog_api_client/v2/model/okta_account_update_request.py new file mode 100644 index 0000000000..f9ea5ae747 --- /dev/null +++ b/datadog_api_client/v2/model/okta_account_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_account_update_request_data import OktaAccountUpdateRequestData + +class OktaAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_account_update_request_data import OktaAccountUpdateRequestData + return { + "data": (OktaAccountUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OktaAccountUpdateRequestData, **kwargs): + """ + Payload schema when updating an Okta account. + + :param data: Data object for updating an Okta account. + :type data: OktaAccountUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/okta_account_update_request_attributes.py b/datadog_api_client/v2/model/okta_account_update_request_attributes.py new file mode 100644 index 0000000000..b6b6475c40 --- /dev/null +++ b/datadog_api_client/v2/model/okta_account_update_request_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OktaAccountUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_key": (str,), + "auth_method": (str,), + "client_id": (str,), + "client_secret": (str,), + "domain": (str,), + } + attribute_map = { + "api_key": "api_key", + "auth_method": "auth_method", + "client_id": "client_id", + "client_secret": "client_secret", + "domain": "domain", + } + + def __init__(self_, auth_method: str, domain: str, api_key: Union[str, UnsetType]=unset, client_id: Union[str, UnsetType]=unset, client_secret: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes object for updating an Okta account. + + :param api_key: The API key of the Okta account. + :type api_key: str, optional + + :param auth_method: The authorization method for an Okta account. + :type auth_method: str + + :param client_id: The Client ID of an Okta app integration. + :type client_id: str, optional + + :param client_secret: The client secret of an Okta app integration. + :type client_secret: str, optional + + :param domain: The domain associated with an Okta account. + :type domain: str + """ + if api_key is not unset: + kwargs["api_key"] = api_key + if client_id is not unset: + kwargs["client_id"] = client_id + if client_secret is not unset: + kwargs["client_secret"] = client_secret + super().__init__(kwargs) + + + self_.auth_method = auth_method + self_.domain = domain diff --git a/datadog_api_client/v2/model/okta_account_update_request_data.py b/datadog_api_client/v2/model/okta_account_update_request_data.py new file mode 100644 index 0000000000..7e108e5613 --- /dev/null +++ b/datadog_api_client/v2/model/okta_account_update_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_account_update_request_attributes import OktaAccountUpdateRequestAttributes + from datadog_api_client.v2.model.okta_account_type import OktaAccountType + +class OktaAccountUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_account_update_request_attributes import OktaAccountUpdateRequestAttributes + from datadog_api_client.v2.model.okta_account_type import OktaAccountType + return { + "attributes": (OktaAccountUpdateRequestAttributes,), + "type": (OktaAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[OktaAccountUpdateRequestAttributes, UnsetType]=unset, type: Union[OktaAccountType, UnsetType]=unset, **kwargs): + """ + Data object for updating an Okta account. + + :param attributes: Attributes object for updating an Okta account. + :type attributes: OktaAccountUpdateRequestAttributes, optional + + :param type: Account type for an Okta account. + :type type: OktaAccountType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/okta_accounts_response.py b/datadog_api_client/v2/model/okta_accounts_response.py new file mode 100644 index 0000000000..28e8644e19 --- /dev/null +++ b/datadog_api_client/v2/model/okta_accounts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_account_response_data import OktaAccountResponseData + +class OktaAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_account_response_data import OktaAccountResponseData + return { + "data": ([OktaAccountResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[OktaAccountResponseData], UnsetType]=unset, **kwargs): + """ + The expected response schema when getting Okta accounts. + + :param data: List of Okta accounts. + :type data: [OktaAccountResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/okta_api_token.py b/datadog_api_client/v2/model/okta_api_token.py new file mode 100644 index 0000000000..d24ceef788 --- /dev/null +++ b/datadog_api_client/v2/model/okta_api_token.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_api_token_type import OktaAPITokenType + +class OktaAPIToken(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_api_token_type import OktaAPITokenType + return { + "api_token": (str,), + "domain": (str,), + "type": (OktaAPITokenType,), + } + attribute_map = { + "api_token": "api_token", + "domain": "domain", + "type": "type", + } + + def __init__(self_, api_token: str, domain: str, type: OktaAPITokenType, **kwargs): + """ + The definition of the ``OktaAPIToken`` object. + + :param api_token: The ``OktaAPIToken`` ``api_token``. + :type api_token: str + + :param domain: The ``OktaAPIToken`` ``domain``. + :type domain: str + + :param type: The definition of the ``OktaAPIToken`` object. + :type type: OktaAPITokenType + """ + super().__init__(kwargs) + + + self_.api_token = api_token + self_.domain = domain + self_.type = type diff --git a/datadog_api_client/v2/model/okta_api_token_type.py b/datadog_api_client/v2/model/okta_api_token_type.py new file mode 100644 index 0000000000..7c3c040e60 --- /dev/null +++ b/datadog_api_client/v2/model/okta_api_token_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OktaAPITokenType(ModelSimple): + """ + The definition of the `OktaAPIToken` object. + + :param value: If omitted defaults to "OktaAPIToken". Must be one of ["OktaAPIToken"]. + :type value: str + """ + + allowed_values = { + "OktaAPIToken", + } + OKTAAPITOKEN: ClassVar["OktaAPITokenType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OktaAPITokenType.OKTAAPITOKEN = OktaAPITokenType("OktaAPIToken") diff --git a/datadog_api_client/v2/model/okta_api_token_update.py b/datadog_api_client/v2/model/okta_api_token_update.py new file mode 100644 index 0000000000..b990480c79 --- /dev/null +++ b/datadog_api_client/v2/model/okta_api_token_update.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_api_token_type import OktaAPITokenType + +class OktaAPITokenUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_api_token_type import OktaAPITokenType + return { + "api_token": (str,), + "domain": (str,), + "type": (OktaAPITokenType,), + } + attribute_map = { + "api_token": "api_token", + "domain": "domain", + "type": "type", + } + + def __init__(self_, type: OktaAPITokenType, api_token: Union[str, UnsetType]=unset, domain: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``OktaAPIToken`` object. + + :param api_token: The ``OktaAPITokenUpdate`` ``api_token``. + :type api_token: str, optional + + :param domain: The ``OktaAPITokenUpdate`` ``domain``. + :type domain: str, optional + + :param type: The definition of the ``OktaAPIToken`` object. + :type type: OktaAPITokenType + """ + if api_token is not unset: + kwargs["api_token"] = api_token + if domain is not unset: + kwargs["domain"] = domain + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/okta_credentials.py b/datadog_api_client/v2/model/okta_credentials.py new file mode 100644 index 0000000000..e5bd923876 --- /dev/null +++ b/datadog_api_client/v2/model/okta_credentials.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OktaCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``OktaCredentials`` object. + + :param api_token: The `OktaAPIToken` `api_token`. + :type api_token: str + + :param domain: The `OktaAPIToken` `domain`. + :type domain: str + + :param type: The definition of the `OktaAPIToken` object. + :type type: OktaAPITokenType + """ + 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.okta_api_token import OktaAPIToken + return { + "oneOf": [ + OktaAPIToken, + ], + } diff --git a/datadog_api_client/v2/model/okta_credentials_update.py b/datadog_api_client/v2/model/okta_credentials_update.py new file mode 100644 index 0000000000..572adb577d --- /dev/null +++ b/datadog_api_client/v2/model/okta_credentials_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OktaCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``OktaCredentialsUpdate`` object. + + :param api_token: The `OktaAPITokenUpdate` `api_token`. + :type api_token: str, optional + + :param domain: The `OktaAPITokenUpdate` `domain`. + :type domain: str, optional + + :param type: The definition of the `OktaAPIToken` object. + :type type: OktaAPITokenType + """ + 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.okta_api_token_update import OktaAPITokenUpdate + return { + "oneOf": [ + OktaAPITokenUpdate, + ], + } diff --git a/datadog_api_client/v2/model/okta_integration.py b/datadog_api_client/v2/model/okta_integration.py new file mode 100644 index 0000000000..0c9eb94c11 --- /dev/null +++ b/datadog_api_client/v2/model/okta_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_credentials import OktaCredentials + from datadog_api_client.v2.model.okta_integration_type import OktaIntegrationType + from datadog_api_client.v2.model.okta_api_token import OktaAPIToken + +class OktaIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_credentials import OktaCredentials + from datadog_api_client.v2.model.okta_integration_type import OktaIntegrationType + return { + "credentials": (OktaCredentials,), + "type": (OktaIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[OktaCredentials, OktaAPIToken], type: OktaIntegrationType, **kwargs): + """ + The definition of the ``OktaIntegration`` object. + + :param credentials: The definition of the ``OktaCredentials`` object. + :type credentials: OktaCredentials + + :param type: The definition of the ``OktaIntegrationType`` object. + :type type: OktaIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/okta_integration_type.py b/datadog_api_client/v2/model/okta_integration_type.py new file mode 100644 index 0000000000..32b0d8e756 --- /dev/null +++ b/datadog_api_client/v2/model/okta_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OktaIntegrationType(ModelSimple): + """ + The definition of the `OktaIntegrationType` object. + + :param value: If omitted defaults to "Okta". Must be one of ["Okta"]. + :type value: str + """ + + allowed_values = { + "Okta", + } + OKTA: ClassVar["OktaIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OktaIntegrationType.OKTA = OktaIntegrationType("Okta") diff --git a/datadog_api_client/v2/model/okta_integration_update.py b/datadog_api_client/v2/model/okta_integration_update.py new file mode 100644 index 0000000000..2818d7336b --- /dev/null +++ b/datadog_api_client/v2/model/okta_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.okta_credentials_update import OktaCredentialsUpdate + from datadog_api_client.v2.model.okta_integration_type import OktaIntegrationType + from datadog_api_client.v2.model.okta_api_token_update import OktaAPITokenUpdate + +class OktaIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.okta_credentials_update import OktaCredentialsUpdate + from datadog_api_client.v2.model.okta_integration_type import OktaIntegrationType + return { + "credentials": (OktaCredentialsUpdate,), + "type": (OktaIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: OktaIntegrationType, credentials: Union[OktaCredentialsUpdate, OktaAPITokenUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``OktaIntegrationUpdate`` object. + + :param credentials: The definition of the ``OktaCredentialsUpdate`` object. + :type credentials: OktaCredentialsUpdate, optional + + :param type: The definition of the ``OktaIntegrationType`` object. + :type type: OktaIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/on_call_notification_rule.py b/datadog_api_client/v2/model/on_call_notification_rule.py new file mode 100644 index 0000000000..b64f630fbc --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_notification_rule_data import OnCallNotificationRuleData + from datadog_api_client.v2.model.on_call_notification_rules_included import OnCallNotificationRulesIncluded + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + from datadog_api_client.v2.model.notification_channel_data import NotificationChannelData + +class OnCallNotificationRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_notification_rule_data import OnCallNotificationRuleData + from datadog_api_client.v2.model.on_call_notification_rules_included import OnCallNotificationRulesIncluded + return { + "data": (OnCallNotificationRuleData,), + "included": ([OnCallNotificationRulesIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: OnCallNotificationRuleData, included: Union[List[Union[OnCallNotificationRulesIncluded, NotificationChannelData]], UnsetType]=unset, **kwargs): + """ + A top-level wrapper for a notification rule + + :param data: Data for an on-call notification rule + :type data: OnCallNotificationRuleData + + :param included: + :type included: [OnCallNotificationRulesIncluded], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/on_call_notification_rule_attributes.py b/datadog_api_client/v2/model/on_call_notification_rule_attributes.py new file mode 100644 index 0000000000..9e121abee2 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_notification_rule_category import OnCallNotificationRuleCategory + from datadog_api_client.v2.model.on_call_notification_rule_channel_settings import OnCallNotificationRuleChannelSettings + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + +class OnCallNotificationRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_notification_rule_category import OnCallNotificationRuleCategory + from datadog_api_client.v2.model.on_call_notification_rule_channel_settings import OnCallNotificationRuleChannelSettings + return { + "category": (OnCallNotificationRuleCategory,), + "channel_settings": (OnCallNotificationRuleChannelSettings,), + "delay_minutes": (int,), + } + attribute_map = { + "category": "category", + "channel_settings": "channel_settings", + "delay_minutes": "delay_minutes", + } + + def __init__(self_, category: Union[OnCallNotificationRuleCategory, UnsetType]=unset, channel_settings: Union[OnCallNotificationRuleChannelSettings, OnCallPhoneNotificationRuleSettings, UnsetType]=unset, delay_minutes: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for an on-call notification rule. + + :param category: Specifies the category a notification rule will apply to + :type category: OnCallNotificationRuleCategory, optional + + :param channel_settings: Defines the configuration for a channel associated with a notification rule + :type channel_settings: OnCallNotificationRuleChannelSettings, optional + + :param delay_minutes: The number of minutes that will elapse before this rule is evaluated. 0 indicates immediate evaluation + :type delay_minutes: int, optional + """ + if category is not unset: + kwargs["category"] = category + if channel_settings is not unset: + kwargs["channel_settings"] = channel_settings + if delay_minutes is not unset: + kwargs["delay_minutes"] = delay_minutes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/on_call_notification_rule_category.py b/datadog_api_client/v2/model/on_call_notification_rule_category.py new file mode 100644 index 0000000000..c5df707503 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule_category.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OnCallNotificationRuleCategory(ModelSimple): + """ + Specifies the category a notification rule will apply to + + :param value: If omitted defaults to "high_urgency". Must be one of ["high_urgency", "low_urgency"]. + :type value: str + """ + + allowed_values = { + "high_urgency", + "low_urgency", + } + HIGH_URGENCY: ClassVar["OnCallNotificationRuleCategory"] + LOW_URGENCY: ClassVar["OnCallNotificationRuleCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OnCallNotificationRuleCategory.HIGH_URGENCY = OnCallNotificationRuleCategory("high_urgency") +OnCallNotificationRuleCategory.LOW_URGENCY = OnCallNotificationRuleCategory("low_urgency") diff --git a/datadog_api_client/v2/model/on_call_notification_rule_channel_relationship.py b/datadog_api_client/v2/model/on_call_notification_rule_channel_relationship.py new file mode 100644 index 0000000000..28ae731d76 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule_channel_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_notification_rule_channel_relationship_data import OnCallNotificationRuleChannelRelationshipData + +class OnCallNotificationRuleChannelRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_notification_rule_channel_relationship_data import OnCallNotificationRuleChannelRelationshipData + return { + "data": (OnCallNotificationRuleChannelRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OnCallNotificationRuleChannelRelationshipData, **kwargs): + """ + Relationship object for creating a notification rule + + :param data: Channel relationship data for creating a notification rule + :type data: OnCallNotificationRuleChannelRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/on_call_notification_rule_channel_relationship_data.py b/datadog_api_client/v2/model/on_call_notification_rule_channel_relationship_data.py new file mode 100644 index 0000000000..261eda1300 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule_channel_relationship_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_channel_type import NotificationChannelType + +class OnCallNotificationRuleChannelRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_channel_type import NotificationChannelType + return { + "id": (str,), + "type": (NotificationChannelType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[NotificationChannelType, UnsetType]=unset, **kwargs): + """ + Channel relationship data for creating a notification rule + + :param id: ID of the notification channel + :type id: str, optional + + :param type: Indicates that the resource is of type 'notification_channels'. + :type type: NotificationChannelType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/on_call_notification_rule_channel_settings.py b/datadog_api_client/v2/model/on_call_notification_rule_channel_settings.py new file mode 100644 index 0000000000..e0777f181d --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule_channel_settings.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OnCallNotificationRuleChannelSettings(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Defines the configuration for a channel associated with a notification rule + + :param method: Specifies the method in which a phone is used in a notification rule + :type method: OnCallPhoneNotificationRuleMethod + + :param type: Indicates that the notification channel is a phone + :type type: NotificationChannelPhoneConfigType + """ + 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.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + return { + "oneOf": [ + OnCallPhoneNotificationRuleSettings, + ], + } diff --git a/datadog_api_client/v2/model/on_call_notification_rule_data.py b/datadog_api_client/v2/model/on_call_notification_rule_data.py new file mode 100644 index 0000000000..0d505de4b7 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_notification_rule_attributes import OnCallNotificationRuleAttributes + from datadog_api_client.v2.model.on_call_notification_rule_relationships import OnCallNotificationRuleRelationships + from datadog_api_client.v2.model.on_call_notification_rule_type import OnCallNotificationRuleType + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + +class OnCallNotificationRuleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_notification_rule_attributes import OnCallNotificationRuleAttributes + from datadog_api_client.v2.model.on_call_notification_rule_relationships import OnCallNotificationRuleRelationships + from datadog_api_client.v2.model.on_call_notification_rule_type import OnCallNotificationRuleType + return { + "attributes": (OnCallNotificationRuleAttributes,), + "id": (str,), + "relationships": (OnCallNotificationRuleRelationships,), + "type": (OnCallNotificationRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: OnCallNotificationRuleType, attributes: Union[OnCallNotificationRuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[OnCallNotificationRuleRelationships, UnsetType]=unset, **kwargs): + """ + Data for an on-call notification rule + + :param attributes: Attributes for an on-call notification rule. + :type attributes: OnCallNotificationRuleAttributes, optional + + :param id: Unique identifier for the rule + :type id: str, optional + + :param relationships: Relationship object for creating a notification rule + :type relationships: OnCallNotificationRuleRelationships, optional + + :param type: Indicates that the resource is of type 'notification_rules'. + :type type: OnCallNotificationRuleType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/on_call_notification_rule_relationships.py b/datadog_api_client/v2/model/on_call_notification_rule_relationships.py new file mode 100644 index 0000000000..479b5c4a44 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_notification_rule_channel_relationship import OnCallNotificationRuleChannelRelationship + +class OnCallNotificationRuleRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_notification_rule_channel_relationship import OnCallNotificationRuleChannelRelationship + return { + "channel": (OnCallNotificationRuleChannelRelationship,), + } + attribute_map = { + "channel": "channel", + } + + def __init__(self_, channel: Union[OnCallNotificationRuleChannelRelationship, UnsetType]=unset, **kwargs): + """ + Relationship object for creating a notification rule + + :param channel: Relationship object for creating a notification rule + :type channel: OnCallNotificationRuleChannelRelationship, optional + """ + if channel is not unset: + kwargs["channel"] = channel + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/on_call_notification_rule_request_attributes.py b/datadog_api_client/v2/model/on_call_notification_rule_request_attributes.py new file mode 100644 index 0000000000..48059df074 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule_request_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_notification_rule_category import OnCallNotificationRuleCategory + from datadog_api_client.v2.model.on_call_notification_rule_channel_settings import OnCallNotificationRuleChannelSettings + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + +class OnCallNotificationRuleRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_notification_rule_category import OnCallNotificationRuleCategory + from datadog_api_client.v2.model.on_call_notification_rule_channel_settings import OnCallNotificationRuleChannelSettings + return { + "category": (OnCallNotificationRuleCategory,), + "channel_settings": (OnCallNotificationRuleChannelSettings,), + "delay_minutes": (int,), + } + attribute_map = { + "category": "category", + "channel_settings": "channel_settings", + "delay_minutes": "delay_minutes", + } + + def __init__(self_, category: Union[OnCallNotificationRuleCategory, UnsetType]=unset, channel_settings: Union[OnCallNotificationRuleChannelSettings, OnCallPhoneNotificationRuleSettings, UnsetType]=unset, delay_minutes: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for creating or modifying an on-call notification rule. + + :param category: Specifies the category a notification rule will apply to + :type category: OnCallNotificationRuleCategory, optional + + :param channel_settings: Defines the configuration for a channel associated with a notification rule + :type channel_settings: OnCallNotificationRuleChannelSettings, optional + + :param delay_minutes: The number of minutes that will elapse before this rule is evaluated. 0 indicates immediate evaluation + :type delay_minutes: int, optional + """ + if category is not unset: + kwargs["category"] = category + if channel_settings is not unset: + kwargs["channel_settings"] = channel_settings + if delay_minutes is not unset: + kwargs["delay_minutes"] = delay_minutes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/on_call_notification_rule_type.py b/datadog_api_client/v2/model/on_call_notification_rule_type.py new file mode 100644 index 0000000000..21283dc2b6 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OnCallNotificationRuleType(ModelSimple): + """ + Indicates that the resource is of type 'notification_rules'. + + :param value: If omitted defaults to "notification_rules". Must be one of ["notification_rules"]. + :type value: str + """ + + allowed_values = { + "notification_rules", + } + NOTIFICATION_RULES: ClassVar["OnCallNotificationRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OnCallNotificationRuleType.NOTIFICATION_RULES = OnCallNotificationRuleType("notification_rules") diff --git a/datadog_api_client/v2/model/on_call_notification_rules_included.py b/datadog_api_client/v2/model/on_call_notification_rules_included.py new file mode 100644 index 0000000000..db6e1d81cd --- /dev/null +++ b/datadog_api_client/v2/model/on_call_notification_rules_included.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OnCallNotificationRulesIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Represents additional included resources for a on-call notification rules + + :param attributes: Attributes for an on-call notification channel. + :type attributes: NotificationChannelAttributes, optional + + :param id: Unique identifier for the channel + :type id: str, optional + + :param type: Indicates that the resource is of type 'notification_channels'. + :type type: NotificationChannelType + """ + 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.notification_channel_data import NotificationChannelData + return { + "oneOf": [ + NotificationChannelData, + ], + } diff --git a/datadog_api_client/v2/model/on_call_page_target_type.py b/datadog_api_client/v2/model/on_call_page_target_type.py new file mode 100644 index 0000000000..805aad022d --- /dev/null +++ b/datadog_api_client/v2/model/on_call_page_target_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OnCallPageTargetType(ModelSimple): + """ + The kind of target, `team_id` | `team_handle` | `user_id`. + + :param value: Must be one of ["team_id", "team_handle", "user_id"]. + :type value: str + """ + + allowed_values = { + "team_id", + "team_handle", + "user_id", + } + TEAM_ID: ClassVar["OnCallPageTargetType"] + TEAM_HANDLE: ClassVar["OnCallPageTargetType"] + USER_ID: ClassVar["OnCallPageTargetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OnCallPageTargetType.TEAM_ID = OnCallPageTargetType("team_id") +OnCallPageTargetType.TEAM_HANDLE = OnCallPageTargetType("team_handle") +OnCallPageTargetType.USER_ID = OnCallPageTargetType("user_id") diff --git a/datadog_api_client/v2/model/on_call_phone_notification_rule_method.py b/datadog_api_client/v2/model/on_call_phone_notification_rule_method.py new file mode 100644 index 0000000000..4968e98d89 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_phone_notification_rule_method.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OnCallPhoneNotificationRuleMethod(ModelSimple): + """ + Specifies the method in which a phone is used in a notification rule + + :param value: Must be one of ["sms", "voice"]. + :type value: str + """ + + allowed_values = { + "sms", + "voice", + } + SMS: ClassVar["OnCallPhoneNotificationRuleMethod"] + VOICE: ClassVar["OnCallPhoneNotificationRuleMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OnCallPhoneNotificationRuleMethod.SMS = OnCallPhoneNotificationRuleMethod("sms") +OnCallPhoneNotificationRuleMethod.VOICE = OnCallPhoneNotificationRuleMethod("voice") diff --git a/datadog_api_client/v2/model/on_call_phone_notification_rule_settings.py b/datadog_api_client/v2/model/on_call_phone_notification_rule_settings.py new file mode 100644 index 0000000000..bc9177db65 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_phone_notification_rule_settings.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_phone_notification_rule_method import OnCallPhoneNotificationRuleMethod + from datadog_api_client.v2.model.notification_channel_phone_config_type import NotificationChannelPhoneConfigType + +class OnCallPhoneNotificationRuleSettings(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_phone_notification_rule_method import OnCallPhoneNotificationRuleMethod + from datadog_api_client.v2.model.notification_channel_phone_config_type import NotificationChannelPhoneConfigType + return { + "method": (OnCallPhoneNotificationRuleMethod,), + "type": (NotificationChannelPhoneConfigType,), + } + attribute_map = { + "method": "method", + "type": "type", + } + + def __init__(self_, method: OnCallPhoneNotificationRuleMethod, type: NotificationChannelPhoneConfigType, **kwargs): + """ + Configuration for using a phone notification channel in a notification rule + + :param method: Specifies the method in which a phone is used in a notification rule + :type method: OnCallPhoneNotificationRuleMethod + + :param type: Indicates that the notification channel is a phone + :type type: NotificationChannelPhoneConfigType + """ + super().__init__(kwargs) + + + self_.method = method + self_.type = type diff --git a/datadog_api_client/v2/model/on_call_trigger.py b/datadog_api_client/v2/model/on_call_trigger.py new file mode 100644 index 0000000000..faf50830c2 --- /dev/null +++ b/datadog_api_client/v2/model/on_call_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + +class OnCallTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + return { + "rate_limit": (TriggerRateLimit,), + } + attribute_map = { + "rate_limit": "rateLimit", + } + + def __init__(self_, rate_limit: Union[TriggerRateLimit, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from an On-Call Page or On-Call Handover. For automatic triggering a handle must be configured and the workflow must be published. + + :param rate_limit: Defines a rate limit for a trigger. + :type rate_limit: TriggerRateLimit, optional + """ + if rate_limit is not unset: + kwargs["rate_limit"] = rate_limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/on_call_trigger_wrapper.py b/datadog_api_client/v2/model/on_call_trigger_wrapper.py new file mode 100644 index 0000000000..c89d4618ec --- /dev/null +++ b/datadog_api_client/v2/model/on_call_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_trigger import OnCallTrigger + +class OnCallTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_trigger import OnCallTrigger + return { + "on_call_trigger": (OnCallTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "on_call_trigger": "onCallTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, on_call_trigger: OnCallTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for an On-Call-based trigger. + + :param on_call_trigger: Trigger a workflow from an On-Call Page or On-Call Handover. For automatic triggering a handle must be configured and the workflow must be published. + :type on_call_trigger: OnCallTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.on_call_trigger = on_call_trigger diff --git a/datadog_api_client/v2/model/on_demand_concurrency_cap.py b/datadog_api_client/v2/model/on_demand_concurrency_cap.py new file mode 100644 index 0000000000..779f0f562a --- /dev/null +++ b/datadog_api_client/v2/model/on_demand_concurrency_cap.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_demand_concurrency_cap_attributes import OnDemandConcurrencyCapAttributes + from datadog_api_client.v2.model.on_demand_concurrency_cap_type import OnDemandConcurrencyCapType + +class OnDemandConcurrencyCap(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_demand_concurrency_cap_attributes import OnDemandConcurrencyCapAttributes + from datadog_api_client.v2.model.on_demand_concurrency_cap_type import OnDemandConcurrencyCapType + return { + "attributes": (OnDemandConcurrencyCapAttributes,), + "type": (OnDemandConcurrencyCapType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[OnDemandConcurrencyCapAttributes, UnsetType]=unset, type: Union[OnDemandConcurrencyCapType, UnsetType]=unset, **kwargs): + """ + On-demand concurrency cap. + + :param attributes: On-demand concurrency cap attributes. + :type attributes: OnDemandConcurrencyCapAttributes, optional + + :param type: On-demand concurrency cap type. + :type type: OnDemandConcurrencyCapType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/on_demand_concurrency_cap_attributes.py b/datadog_api_client/v2/model/on_demand_concurrency_cap_attributes.py new file mode 100644 index 0000000000..b2f17c81af --- /dev/null +++ b/datadog_api_client/v2/model/on_demand_concurrency_cap_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OnDemandConcurrencyCapAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "on_demand_concurrency_cap": (float,), + } + attribute_map = { + "on_demand_concurrency_cap": "on_demand_concurrency_cap", + } + + def __init__(self_, on_demand_concurrency_cap: Union[float, UnsetType]=unset, **kwargs): + """ + On-demand concurrency cap attributes. + + :param on_demand_concurrency_cap: Value of the on-demand concurrency cap. + :type on_demand_concurrency_cap: float, optional + """ + if on_demand_concurrency_cap is not unset: + kwargs["on_demand_concurrency_cap"] = on_demand_concurrency_cap + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/on_demand_concurrency_cap_response.py b/datadog_api_client/v2/model/on_demand_concurrency_cap_response.py new file mode 100644 index 0000000000..2a873ba671 --- /dev/null +++ b/datadog_api_client/v2/model/on_demand_concurrency_cap_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_demand_concurrency_cap import OnDemandConcurrencyCap + +class OnDemandConcurrencyCapResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_demand_concurrency_cap import OnDemandConcurrencyCap + return { + "data": (OnDemandConcurrencyCap,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[OnDemandConcurrencyCap, UnsetType]=unset, **kwargs): + """ + On-demand concurrency cap response. + + :param data: On-demand concurrency cap. + :type data: OnDemandConcurrencyCap, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/on_demand_concurrency_cap_type.py b/datadog_api_client/v2/model/on_demand_concurrency_cap_type.py new file mode 100644 index 0000000000..ab763950be --- /dev/null +++ b/datadog_api_client/v2/model/on_demand_concurrency_cap_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OnDemandConcurrencyCapType(ModelSimple): + """ + On-demand concurrency cap type. + + :param value: If omitted defaults to "on_demand_concurrency_cap". Must be one of ["on_demand_concurrency_cap"]. + :type value: str + """ + + allowed_values = { + "on_demand_concurrency_cap", + } + ON_DEMAND_CONCURRENCY_CAP: ClassVar["OnDemandConcurrencyCapType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OnDemandConcurrencyCapType.ON_DEMAND_CONCURRENCY_CAP = OnDemandConcurrencyCapType("on_demand_concurrency_cap") diff --git a/datadog_api_client/v2/model/open_ai_credentials.py b/datadog_api_client/v2/model/open_ai_credentials.py new file mode 100644 index 0000000000..429120b7d4 --- /dev/null +++ b/datadog_api_client/v2/model/open_ai_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OpenAICredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``OpenAICredentials`` object. + + :param api_token: The `OpenAIAPIKey` `api_token`. + :type api_token: str + + :param type: The definition of the `OpenAIAPIKey` object. + :type type: OpenAIAPIKeyType + """ + 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.open_aiapi_key import OpenAIAPIKey + return { + "oneOf": [ + OpenAIAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/open_ai_credentials_update.py b/datadog_api_client/v2/model/open_ai_credentials_update.py new file mode 100644 index 0000000000..0774a87887 --- /dev/null +++ b/datadog_api_client/v2/model/open_ai_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OpenAICredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``OpenAICredentialsUpdate`` object. + + :param api_token: The `OpenAIAPIKeyUpdate` `api_token`. + :type api_token: str, optional + + :param type: The definition of the `OpenAIAPIKey` object. + :type type: OpenAIAPIKeyType + """ + 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.open_aiapi_key_update import OpenAIAPIKeyUpdate + return { + "oneOf": [ + OpenAIAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/open_ai_integration.py b/datadog_api_client/v2/model/open_ai_integration.py new file mode 100644 index 0000000000..05593c6058 --- /dev/null +++ b/datadog_api_client/v2/model/open_ai_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.open_ai_credentials import OpenAICredentials + from datadog_api_client.v2.model.open_ai_integration_type import OpenAIIntegrationType + from datadog_api_client.v2.model.open_aiapi_key import OpenAIAPIKey + +class OpenAIIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.open_ai_credentials import OpenAICredentials + from datadog_api_client.v2.model.open_ai_integration_type import OpenAIIntegrationType + return { + "credentials": (OpenAICredentials,), + "type": (OpenAIIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[OpenAICredentials, OpenAIAPIKey], type: OpenAIIntegrationType, **kwargs): + """ + The definition of the ``OpenAIIntegration`` object. + + :param credentials: The definition of the ``OpenAICredentials`` object. + :type credentials: OpenAICredentials + + :param type: The definition of the ``OpenAIIntegrationType`` object. + :type type: OpenAIIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/open_ai_integration_type.py b/datadog_api_client/v2/model/open_ai_integration_type.py new file mode 100644 index 0000000000..d348f4ba1b --- /dev/null +++ b/datadog_api_client/v2/model/open_ai_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OpenAIIntegrationType(ModelSimple): + """ + The definition of the `OpenAIIntegrationType` object. + + :param value: If omitted defaults to "OpenAI". Must be one of ["OpenAI"]. + :type value: str + """ + + allowed_values = { + "OpenAI", + } + OPENAI: ClassVar["OpenAIIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OpenAIIntegrationType.OPENAI = OpenAIIntegrationType("OpenAI") diff --git a/datadog_api_client/v2/model/open_ai_integration_update.py b/datadog_api_client/v2/model/open_ai_integration_update.py new file mode 100644 index 0000000000..7a7e7e3823 --- /dev/null +++ b/datadog_api_client/v2/model/open_ai_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.open_ai_credentials_update import OpenAICredentialsUpdate + from datadog_api_client.v2.model.open_ai_integration_type import OpenAIIntegrationType + from datadog_api_client.v2.model.open_aiapi_key_update import OpenAIAPIKeyUpdate + +class OpenAIIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.open_ai_credentials_update import OpenAICredentialsUpdate + from datadog_api_client.v2.model.open_ai_integration_type import OpenAIIntegrationType + return { + "credentials": (OpenAICredentialsUpdate,), + "type": (OpenAIIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: OpenAIIntegrationType, credentials: Union[OpenAICredentialsUpdate, OpenAIAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``OpenAIIntegrationUpdate`` object. + + :param credentials: The definition of the ``OpenAICredentialsUpdate`` object. + :type credentials: OpenAICredentialsUpdate, optional + + :param type: The definition of the ``OpenAIIntegrationType`` object. + :type type: OpenAIIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/open_aiapi_key.py b/datadog_api_client/v2/model/open_aiapi_key.py new file mode 100644 index 0000000000..4711ee8beb --- /dev/null +++ b/datadog_api_client/v2/model/open_aiapi_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.open_aiapi_key_type import OpenAIAPIKeyType + +class OpenAIAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.open_aiapi_key_type import OpenAIAPIKeyType + return { + "api_token": (str,), + "type": (OpenAIAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, api_token: str, type: OpenAIAPIKeyType, **kwargs): + """ + The definition of the ``OpenAIAPIKey`` object. + + :param api_token: The ``OpenAIAPIKey`` ``api_token``. + :type api_token: str + + :param type: The definition of the ``OpenAIAPIKey`` object. + :type type: OpenAIAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_token = api_token + self_.type = type diff --git a/datadog_api_client/v2/model/open_aiapi_key_type.py b/datadog_api_client/v2/model/open_aiapi_key_type.py new file mode 100644 index 0000000000..8819d14d3f --- /dev/null +++ b/datadog_api_client/v2/model/open_aiapi_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OpenAIAPIKeyType(ModelSimple): + """ + The definition of the `OpenAIAPIKey` object. + + :param value: If omitted defaults to "OpenAIAPIKey". Must be one of ["OpenAIAPIKey"]. + :type value: str + """ + + allowed_values = { + "OpenAIAPIKey", + } + OPENAIAPIKEY: ClassVar["OpenAIAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OpenAIAPIKeyType.OPENAIAPIKEY = OpenAIAPIKeyType("OpenAIAPIKey") diff --git a/datadog_api_client/v2/model/open_aiapi_key_update.py b/datadog_api_client/v2/model/open_aiapi_key_update.py new file mode 100644 index 0000000000..cac9b28348 --- /dev/null +++ b/datadog_api_client/v2/model/open_aiapi_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.open_aiapi_key_type import OpenAIAPIKeyType + +class OpenAIAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.open_aiapi_key_type import OpenAIAPIKeyType + return { + "api_token": (str,), + "type": (OpenAIAPIKeyType,), + } + attribute_map = { + "api_token": "api_token", + "type": "type", + } + + def __init__(self_, type: OpenAIAPIKeyType, api_token: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``OpenAIAPIKey`` object. + + :param api_token: The ``OpenAIAPIKeyUpdate`` ``api_token``. + :type api_token: str, optional + + :param type: The definition of the ``OpenAIAPIKey`` object. + :type type: OpenAIAPIKeyType + """ + if api_token is not unset: + kwargs["api_token"] = api_token + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/open_api_endpoint.py b/datadog_api_client/v2/model/open_api_endpoint.py new file mode 100644 index 0000000000..1a55909812 --- /dev/null +++ b/datadog_api_client/v2/model/open_api_endpoint.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OpenAPIEndpoint(ModelNormal): + @cached_property + def openapi_types(_): + return { + "method": (str,), + "path": (str,), + } + attribute_map = { + "method": "method", + "path": "path", + } + + def __init__(self_, method: Union[str, UnsetType]=unset, path: Union[str, UnsetType]=unset, **kwargs): + """ + Endpoint info extracted from an ``OpenAPI`` specification. + + :param method: The endpoint method. + :type method: str, optional + + :param path: The endpoint path. + :type path: str, optional + """ + if method is not unset: + kwargs["method"] = method + if path is not unset: + kwargs["path"] = path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/open_api_file.py b/datadog_api_client/v2/model/open_api_file.py new file mode 100644 index 0000000000..ae18b3a180 --- /dev/null +++ b/datadog_api_client/v2/model/open_api_file.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OpenAPIFile(ModelNormal): + @cached_property + def openapi_types(_): + return { + "openapi_spec_file": (file_type,), + } + attribute_map = { + "openapi_spec_file": "openapi_spec_file", + } + + def __init__(self_, openapi_spec_file: Union[file_type, UnsetType]=unset, **kwargs): + """ + Object for API data in an ``OpenAPI`` format as a file. + + :param openapi_spec_file: Binary ``OpenAPI`` spec file + :type openapi_spec_file: file_type, optional + """ + if openapi_spec_file is not unset: + kwargs["openapi_spec_file"] = openapi_spec_file + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/opsgenie_account_create_attributes.py b/datadog_api_client/v2/model/opsgenie_account_create_attributes.py new file mode 100644 index 0000000000..9166dd5efd --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_create_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + +class OpsgenieAccountCreateAttributes(ModelNormal): + validations = { + "api_key": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + return { + "api_key": (str,), + "region": (OpsgenieServiceRegionType,), + } + attribute_map = { + "api_key": "api_key", + "region": "region", + } + + def __init__(self_, api_key: str, region: OpsgenieServiceRegionType, **kwargs): + """ + The Opsgenie account attributes for a create request. + + :param api_key: The Opsgenie API key for your Opsgenie account. + :type api_key: str + + :param region: The region for the Opsgenie service. + :type region: OpsgenieServiceRegionType + """ + super().__init__(kwargs) + + + self_.api_key = api_key + self_.region = region diff --git a/datadog_api_client/v2/model/opsgenie_account_create_data.py b/datadog_api_client/v2/model/opsgenie_account_create_data.py new file mode 100644 index 0000000000..b929532fc0 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_account_create_attributes import OpsgenieAccountCreateAttributes + from datadog_api_client.v2.model.opsgenie_account_type import OpsgenieAccountType + +class OpsgenieAccountCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_account_create_attributes import OpsgenieAccountCreateAttributes + from datadog_api_client.v2.model.opsgenie_account_type import OpsgenieAccountType + return { + "attributes": (OpsgenieAccountCreateAttributes,), + "type": (OpsgenieAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: OpsgenieAccountCreateAttributes, type: OpsgenieAccountType, **kwargs): + """ + Opsgenie account data for a create request. + + :param attributes: The Opsgenie account attributes for a create request. + :type attributes: OpsgenieAccountCreateAttributes + + :param type: Opsgenie account resource type. + :type type: OpsgenieAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/opsgenie_account_create_request.py b/datadog_api_client/v2/model/opsgenie_account_create_request.py new file mode 100644 index 0000000000..2cb69fea84 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_account_create_data import OpsgenieAccountCreateData + +class OpsgenieAccountCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_account_create_data import OpsgenieAccountCreateData + return { + "data": (OpsgenieAccountCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OpsgenieAccountCreateData, **kwargs): + """ + Create request for an Opsgenie account. + + :param data: Opsgenie account data for a create request. + :type data: OpsgenieAccountCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/opsgenie_account_response.py b/datadog_api_client/v2/model/opsgenie_account_response.py new file mode 100644 index 0000000000..eb0f42fe96 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_account_response_data import OpsgenieAccountResponseData + +class OpsgenieAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_account_response_data import OpsgenieAccountResponseData + return { + "data": (OpsgenieAccountResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OpsgenieAccountResponseData, **kwargs): + """ + Response containing an Opsgenie account. + + :param data: Opsgenie account data from a response. + :type data: OpsgenieAccountResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/opsgenie_account_response_attributes.py b/datadog_api_client/v2/model/opsgenie_account_response_attributes.py new file mode 100644 index 0000000000..5ac8953510 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + +class OpsgenieAccountResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + return { + "region": (OpsgenieServiceRegionType,), + } + attribute_map = { + "region": "region", + } + + def __init__(self_, region: Union[OpsgenieServiceRegionType, UnsetType]=unset, **kwargs): + """ + The attributes from an Opsgenie account response. + + :param region: The region for the Opsgenie service. + :type region: OpsgenieServiceRegionType, optional + """ + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/opsgenie_account_response_data.py b/datadog_api_client/v2/model/opsgenie_account_response_data.py new file mode 100644 index 0000000000..30df5fb317 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_response_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_account_response_attributes import OpsgenieAccountResponseAttributes + from datadog_api_client.v2.model.opsgenie_account_type import OpsgenieAccountType + +class OpsgenieAccountResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_account_response_attributes import OpsgenieAccountResponseAttributes + from datadog_api_client.v2.model.opsgenie_account_type import OpsgenieAccountType + return { + "attributes": (OpsgenieAccountResponseAttributes,), + "id": (str,), + "type": (OpsgenieAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OpsgenieAccountResponseAttributes, id: str, type: OpsgenieAccountType, **kwargs): + """ + Opsgenie account data from a response. + + :param attributes: The attributes from an Opsgenie account response. + :type attributes: OpsgenieAccountResponseAttributes + + :param id: The ID of the Opsgenie account. + :type id: str + + :param type: Opsgenie account resource type. + :type type: OpsgenieAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/opsgenie_account_type.py b/datadog_api_client/v2/model/opsgenie_account_type.py new file mode 100644 index 0000000000..36f183769b --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OpsgenieAccountType(ModelSimple): + """ + Opsgenie account resource type. + + :param value: If omitted defaults to "opsgenie-account". Must be one of ["opsgenie-account"]. + :type value: str + """ + + allowed_values = { + "opsgenie-account", + } + OPSGENIE_ACCOUNT: ClassVar["OpsgenieAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OpsgenieAccountType.OPSGENIE_ACCOUNT = OpsgenieAccountType("opsgenie-account") diff --git a/datadog_api_client/v2/model/opsgenie_account_update_attributes.py b/datadog_api_client/v2/model/opsgenie_account_update_attributes.py new file mode 100644 index 0000000000..692e27a684 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_update_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + +class OpsgenieAccountUpdateAttributes(ModelNormal): + validations = { + "api_key": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + return { + "api_key": (str,), + "region": (OpsgenieServiceRegionType,), + } + attribute_map = { + "api_key": "api_key", + "region": "region", + } + + def __init__(self_, api_key: Union[str, UnsetType]=unset, region: Union[OpsgenieServiceRegionType, UnsetType]=unset, **kwargs): + """ + The Opsgenie account attributes for an update request. + + :param api_key: The Opsgenie API key for your Opsgenie account. + :type api_key: str, optional + + :param region: The region for the Opsgenie service. + :type region: OpsgenieServiceRegionType, optional + """ + if api_key is not unset: + kwargs["api_key"] = api_key + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/opsgenie_account_update_data.py b/datadog_api_client/v2/model/opsgenie_account_update_data.py new file mode 100644 index 0000000000..1412a7119d --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_update_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_account_update_attributes import OpsgenieAccountUpdateAttributes + from datadog_api_client.v2.model.opsgenie_account_type import OpsgenieAccountType + +class OpsgenieAccountUpdateData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_account_update_attributes import OpsgenieAccountUpdateAttributes + from datadog_api_client.v2.model.opsgenie_account_type import OpsgenieAccountType + return { + "attributes": (OpsgenieAccountUpdateAttributes,), + "id": (str,), + "type": (OpsgenieAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OpsgenieAccountUpdateAttributes, id: str, type: OpsgenieAccountType, **kwargs): + """ + Opsgenie account data for an update request. + + :param attributes: The Opsgenie account attributes for an update request. + :type attributes: OpsgenieAccountUpdateAttributes + + :param id: The ID of the Opsgenie account. + :type id: str + + :param type: Opsgenie account resource type. + :type type: OpsgenieAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/opsgenie_account_update_request.py b/datadog_api_client/v2/model/opsgenie_account_update_request.py new file mode 100644 index 0000000000..56ffa9ff30 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_account_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_account_update_data import OpsgenieAccountUpdateData + +class OpsgenieAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_account_update_data import OpsgenieAccountUpdateData + return { + "data": (OpsgenieAccountUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OpsgenieAccountUpdateData, **kwargs): + """ + Update request for an Opsgenie account. + + :param data: Opsgenie account data for an update request. + :type data: OpsgenieAccountUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/opsgenie_accounts_response.py b/datadog_api_client/v2/model/opsgenie_accounts_response.py new file mode 100644 index 0000000000..655303bc56 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_accounts_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_account_response_data import OpsgenieAccountResponseData + +class OpsgenieAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_account_response_data import OpsgenieAccountResponseData + return { + "data": ([OpsgenieAccountResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[OpsgenieAccountResponseData], **kwargs): + """ + Response with a list of Opsgenie accounts. + + :param data: An array of Opsgenie accounts. + :type data: [OpsgenieAccountResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/opsgenie_service_create_attributes.py b/datadog_api_client/v2/model/opsgenie_service_create_attributes.py new file mode 100644 index 0000000000..ac3aa0905b --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_create_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + +class OpsgenieServiceCreateAttributes(ModelNormal): + validations = { + "name": { + "max_length": 100, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + return { + "custom_url": (str,), + "name": (str,), + "opsgenie_api_key": (str,), + "region": (OpsgenieServiceRegionType,), + } + attribute_map = { + "custom_url": "custom_url", + "name": "name", + "opsgenie_api_key": "opsgenie_api_key", + "region": "region", + } + + def __init__(self_, name: str, opsgenie_api_key: str, region: OpsgenieServiceRegionType, custom_url: Union[str, UnsetType]=unset, **kwargs): + """ + The Opsgenie service attributes for a create request. + + :param custom_url: The custom URL for a custom region. + :type custom_url: str, optional + + :param name: The name for the Opsgenie service. + :type name: str + + :param opsgenie_api_key: The Opsgenie API key for your Opsgenie service. + :type opsgenie_api_key: str + + :param region: The region for the Opsgenie service. + :type region: OpsgenieServiceRegionType + """ + if custom_url is not unset: + kwargs["custom_url"] = custom_url + super().__init__(kwargs) + + + self_.name = name + self_.opsgenie_api_key = opsgenie_api_key + self_.region = region diff --git a/datadog_api_client/v2/model/opsgenie_service_create_data.py b/datadog_api_client/v2/model/opsgenie_service_create_data.py new file mode 100644 index 0000000000..feb77d58d9 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_create_attributes import OpsgenieServiceCreateAttributes + from datadog_api_client.v2.model.opsgenie_service_type import OpsgenieServiceType + +class OpsgenieServiceCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_create_attributes import OpsgenieServiceCreateAttributes + from datadog_api_client.v2.model.opsgenie_service_type import OpsgenieServiceType + return { + "attributes": (OpsgenieServiceCreateAttributes,), + "type": (OpsgenieServiceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: OpsgenieServiceCreateAttributes, type: OpsgenieServiceType, **kwargs): + """ + Opsgenie service data for a create request. + + :param attributes: The Opsgenie service attributes for a create request. + :type attributes: OpsgenieServiceCreateAttributes + + :param type: Opsgenie service resource type. + :type type: OpsgenieServiceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/opsgenie_service_create_request.py b/datadog_api_client/v2/model/opsgenie_service_create_request.py new file mode 100644 index 0000000000..0414aa7d6a --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_create_data import OpsgenieServiceCreateData + +class OpsgenieServiceCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_create_data import OpsgenieServiceCreateData + return { + "data": (OpsgenieServiceCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OpsgenieServiceCreateData, **kwargs): + """ + Create request for an Opsgenie service. + + :param data: Opsgenie service data for a create request. + :type data: OpsgenieServiceCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/opsgenie_service_region_type.py b/datadog_api_client/v2/model/opsgenie_service_region_type.py new file mode 100644 index 0000000000..b63cd67705 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_region_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OpsgenieServiceRegionType(ModelSimple): + """ + The region for the Opsgenie service. + + :param value: Must be one of ["us", "eu", "custom"]. + :type value: str + """ + + allowed_values = { + "us", + "eu", + "custom", + } + US: ClassVar["OpsgenieServiceRegionType"] + EU: ClassVar["OpsgenieServiceRegionType"] + CUSTOM: ClassVar["OpsgenieServiceRegionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OpsgenieServiceRegionType.US = OpsgenieServiceRegionType("us") +OpsgenieServiceRegionType.EU = OpsgenieServiceRegionType("eu") +OpsgenieServiceRegionType.CUSTOM = OpsgenieServiceRegionType("custom") diff --git a/datadog_api_client/v2/model/opsgenie_service_response.py b/datadog_api_client/v2/model/opsgenie_service_response.py new file mode 100644 index 0000000000..e243b3ebbd --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_response_data import OpsgenieServiceResponseData + +class OpsgenieServiceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_response_data import OpsgenieServiceResponseData + return { + "data": (OpsgenieServiceResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OpsgenieServiceResponseData, **kwargs): + """ + Response of an Opsgenie service. + + :param data: Opsgenie service data from a response. + :type data: OpsgenieServiceResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/opsgenie_service_response_attributes.py b/datadog_api_client/v2/model/opsgenie_service_response_attributes.py new file mode 100644 index 0000000000..0f869cf548 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_response_attributes.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + +class OpsgenieServiceResponseAttributes(ModelNormal): + validations = { + "name": { + "max_length": 100, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + return { + "custom_url": (str, none_type), + "name": (str,), + "region": (OpsgenieServiceRegionType,), + } + attribute_map = { + "custom_url": "custom_url", + "name": "name", + "region": "region", + } + + def __init__(self_, custom_url: Union[str, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, region: Union[OpsgenieServiceRegionType, UnsetType]=unset, **kwargs): + """ + The attributes from an Opsgenie service response. + + :param custom_url: The custom URL for a custom region. + :type custom_url: str, none_type, optional + + :param name: The name for the Opsgenie service. + :type name: str, optional + + :param region: The region for the Opsgenie service. + :type region: OpsgenieServiceRegionType, optional + """ + if custom_url is not unset: + kwargs["custom_url"] = custom_url + if name is not unset: + kwargs["name"] = name + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/opsgenie_service_response_data.py b/datadog_api_client/v2/model/opsgenie_service_response_data.py new file mode 100644 index 0000000000..7d5ebd95be --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_response_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_response_attributes import OpsgenieServiceResponseAttributes + from datadog_api_client.v2.model.opsgenie_service_type import OpsgenieServiceType + +class OpsgenieServiceResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_response_attributes import OpsgenieServiceResponseAttributes + from datadog_api_client.v2.model.opsgenie_service_type import OpsgenieServiceType + return { + "attributes": (OpsgenieServiceResponseAttributes,), + "id": (str,), + "type": (OpsgenieServiceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OpsgenieServiceResponseAttributes, id: str, type: OpsgenieServiceType, **kwargs): + """ + Opsgenie service data from a response. + + :param attributes: The attributes from an Opsgenie service response. + :type attributes: OpsgenieServiceResponseAttributes + + :param id: The ID of the Opsgenie service. + :type id: str + + :param type: Opsgenie service resource type. + :type type: OpsgenieServiceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/opsgenie_service_type.py b/datadog_api_client/v2/model/opsgenie_service_type.py new file mode 100644 index 0000000000..085cd126f3 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OpsgenieServiceType(ModelSimple): + """ + Opsgenie service resource type. + + :param value: If omitted defaults to "opsgenie-service". Must be one of ["opsgenie-service"]. + :type value: str + """ + + allowed_values = { + "opsgenie-service", + } + OPSGENIE_SERVICE: ClassVar["OpsgenieServiceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OpsgenieServiceType.OPSGENIE_SERVICE = OpsgenieServiceType("opsgenie-service") diff --git a/datadog_api_client/v2/model/opsgenie_service_update_attributes.py b/datadog_api_client/v2/model/opsgenie_service_update_attributes.py new file mode 100644 index 0000000000..51b81d043c --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_update_attributes.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + +class OpsgenieServiceUpdateAttributes(ModelNormal): + validations = { + "name": { + "max_length": 100, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType + return { + "custom_url": (str, none_type), + "name": (str,), + "opsgenie_api_key": (str,), + "region": (OpsgenieServiceRegionType,), + } + attribute_map = { + "custom_url": "custom_url", + "name": "name", + "opsgenie_api_key": "opsgenie_api_key", + "region": "region", + } + + def __init__(self_, custom_url: Union[str, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, opsgenie_api_key: Union[str, UnsetType]=unset, region: Union[OpsgenieServiceRegionType, UnsetType]=unset, **kwargs): + """ + The Opsgenie service attributes for an update request. + + :param custom_url: The custom URL for a custom region. + :type custom_url: str, none_type, optional + + :param name: The name for the Opsgenie service. + :type name: str, optional + + :param opsgenie_api_key: The Opsgenie API key for your Opsgenie service. + :type opsgenie_api_key: str, optional + + :param region: The region for the Opsgenie service. + :type region: OpsgenieServiceRegionType, optional + """ + if custom_url is not unset: + kwargs["custom_url"] = custom_url + if name is not unset: + kwargs["name"] = name + if opsgenie_api_key is not unset: + kwargs["opsgenie_api_key"] = opsgenie_api_key + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/opsgenie_service_update_data.py b/datadog_api_client/v2/model/opsgenie_service_update_data.py new file mode 100644 index 0000000000..9323f5caa3 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_update_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_update_attributes import OpsgenieServiceUpdateAttributes + from datadog_api_client.v2.model.opsgenie_service_type import OpsgenieServiceType + +class OpsgenieServiceUpdateData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_update_attributes import OpsgenieServiceUpdateAttributes + from datadog_api_client.v2.model.opsgenie_service_type import OpsgenieServiceType + return { + "attributes": (OpsgenieServiceUpdateAttributes,), + "id": (str,), + "type": (OpsgenieServiceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OpsgenieServiceUpdateAttributes, id: str, type: OpsgenieServiceType, **kwargs): + """ + Opsgenie service for an update request. + + :param attributes: The Opsgenie service attributes for an update request. + :type attributes: OpsgenieServiceUpdateAttributes + + :param id: The ID of the Opsgenie service. + :type id: str + + :param type: Opsgenie service resource type. + :type type: OpsgenieServiceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/opsgenie_service_update_request.py b/datadog_api_client/v2/model/opsgenie_service_update_request.py new file mode 100644 index 0000000000..e3d40a54b3 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_service_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_update_data import OpsgenieServiceUpdateData + +class OpsgenieServiceUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_update_data import OpsgenieServiceUpdateData + return { + "data": (OpsgenieServiceUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OpsgenieServiceUpdateData, **kwargs): + """ + Update request for an Opsgenie service. + + :param data: Opsgenie service for an update request. + :type data: OpsgenieServiceUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/opsgenie_services_response.py b/datadog_api_client/v2/model/opsgenie_services_response.py new file mode 100644 index 0000000000..268c04ef18 --- /dev/null +++ b/datadog_api_client/v2/model/opsgenie_services_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.opsgenie_service_response_data import OpsgenieServiceResponseData + +class OpsgenieServicesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.opsgenie_service_response_data import OpsgenieServiceResponseData + return { + "data": ([OpsgenieServiceResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[OpsgenieServiceResponseData], **kwargs): + """ + Response with a list of Opsgenie services. + + :param data: An array of Opsgenie services. + :type data: [OpsgenieServiceResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/order_direction.py b/datadog_api_client/v2/model/order_direction.py new file mode 100644 index 0000000000..4967ef1550 --- /dev/null +++ b/datadog_api_client/v2/model/order_direction.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrderDirection(ModelSimple): + """ + The sort direction for results. + + :param value: Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + ASC: ClassVar["OrderDirection"] + DESC: ClassVar["OrderDirection"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrderDirection.ASC = OrderDirection("asc") +OrderDirection.DESC = OrderDirection("desc") diff --git a/datadog_api_client/v2/model/org_attributes.py b/datadog_api_client/v2/model/org_attributes.py new file mode 100644 index 0000000000..d2a005dae6 --- /dev/null +++ b/datadog_api_client/v2/model/org_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "description": (str,), + "disabled": (bool,), + "modified_at": (datetime,), + "name": (str,), + "public_id": (str,), + "sharing": (str,), + "url": (str,), + } + attribute_map = { + "created_at": "created_at", + "description": "description", + "disabled": "disabled", + "modified_at": "modified_at", + "name": "name", + "public_id": "public_id", + "sharing": "sharing", + "url": "url", + } + + def __init__(self_, created_at: datetime, description: str, disabled: bool, modified_at: datetime, name: str, public_id: str, sharing: str, url: str, **kwargs): + """ + Attributes of an organization. + + :param created_at: The creation timestamp of the organization. + :type created_at: datetime + + :param description: A description of the organization. + :type description: str + + :param disabled: Whether the organization is disabled. + :type disabled: bool + + :param modified_at: The last modification timestamp of the organization. + :type modified_at: datetime + + :param name: The name of the organization. + :type name: str + + :param public_id: The public identifier of the organization. + :type public_id: str + + :param sharing: The sharing setting of the organization. + :type sharing: str + + :param url: The URL of the organization. + :type url: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.description = description + self_.disabled = disabled + self_.modified_at = modified_at + self_.name = name + self_.public_id = public_id + self_.sharing = sharing + self_.url = url diff --git a/datadog_api_client/v2/model/org_authorized_client_attributes.py b/datadog_api_client/v2/model/org_authorized_client_attributes.py new file mode 100644 index 0000000000..cdfa0bcf74 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgAuthorizedClientAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "disabled": (bool,), + "last_exercised": (datetime, none_type), + "user_count": (int,), + } + attribute_map = { + "disabled": "disabled", + "last_exercised": "last_exercised", + "user_count": "user_count", + } + + def __init__(self_, disabled: bool, last_exercised: Union[datetime, none_type], user_count: int, **kwargs): + """ + Attributes of an org authorized client. + + :param disabled: Whether the organization has disabled this client. + :type disabled: bool + + :param last_exercised: The date and time this client was last exercised. + :type last_exercised: datetime, none_type + + :param user_count: The number of users in the organization who have authorized this client. + :type user_count: int + """ + super().__init__(kwargs) + + + self_.disabled = disabled + self_.last_exercised = last_exercised + self_.user_count = user_count diff --git a/datadog_api_client/v2/model/org_authorized_client_data.py b/datadog_api_client/v2/model/org_authorized_client_data.py new file mode 100644 index 0000000000..abee582f9c --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_data.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_attributes import OrgAuthorizedClientAttributes + from datadog_api_client.v2.model.org_authorized_client_relationships import OrgAuthorizedClientRelationships + from datadog_api_client.v2.model.org_authorized_client_type import OrgAuthorizedClientType + +class OrgAuthorizedClientData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_attributes import OrgAuthorizedClientAttributes + from datadog_api_client.v2.model.org_authorized_client_relationships import OrgAuthorizedClientRelationships + from datadog_api_client.v2.model.org_authorized_client_type import OrgAuthorizedClientType + return { + "attributes": (OrgAuthorizedClientAttributes,), + "id": (str,), + "relationships": (OrgAuthorizedClientRelationships,), + "type": (OrgAuthorizedClientType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgAuthorizedClientAttributes, id: str, relationships: OrgAuthorizedClientRelationships, type: OrgAuthorizedClientType, **kwargs): + """ + Data object representing an org authorized client. + + :param attributes: Attributes of an org authorized client. + :type attributes: OrgAuthorizedClientAttributes + + :param id: The unique identifier of the org authorized client. + :type id: str + + :param relationships: Relationships for an org authorized client. + :type relationships: OrgAuthorizedClientRelationships + + :param type: The resource type for org authorized clients. + :type type: OrgAuthorizedClientType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/org_authorized_client_relationship_o_auth2_client.py b/datadog_api_client/v2/model/org_authorized_client_relationship_o_auth2_client.py new file mode 100644 index 0000000000..777d924753 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_relationship_o_auth2_client.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_relationship_o_auth2_client_data import OrgAuthorizedClientRelationshipOAuth2ClientData + +class OrgAuthorizedClientRelationshipOAuth2Client(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_relationship_o_auth2_client_data import OrgAuthorizedClientRelationshipOAuth2ClientData + return { + "data": (OrgAuthorizedClientRelationshipOAuth2ClientData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgAuthorizedClientRelationshipOAuth2ClientData, **kwargs): + """ + Relationship to the OAuth2 client for this org authorized client. + + :param data: Data identifying the OAuth2 client associated with this org authorized client. + :type data: OrgAuthorizedClientRelationshipOAuth2ClientData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_authorized_client_relationship_o_auth2_client_data.py b/datadog_api_client/v2/model/org_authorized_client_relationship_o_auth2_client_data.py new file mode 100644 index 0000000000..c7a1441bd4 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_relationship_o_auth2_client_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_relationship_o_auth2_client_data_type import OrgAuthorizedClientRelationshipOAuth2ClientDataType + +class OrgAuthorizedClientRelationshipOAuth2ClientData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_relationship_o_auth2_client_data_type import OrgAuthorizedClientRelationshipOAuth2ClientDataType + return { + "id": (str,), + "type": (OrgAuthorizedClientRelationshipOAuth2ClientDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: OrgAuthorizedClientRelationshipOAuth2ClientDataType, **kwargs): + """ + Data identifying the OAuth2 client associated with this org authorized client. + + :param id: The ID of the OAuth2 client. + :type id: str + + :param type: OAuth2 client resource type. + :type type: OrgAuthorizedClientRelationshipOAuth2ClientDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_authorized_client_relationship_o_auth2_client_data_type.py b/datadog_api_client/v2/model/org_authorized_client_relationship_o_auth2_client_data_type.py new file mode 100644 index 0000000000..83db6efc45 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_relationship_o_auth2_client_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgAuthorizedClientRelationshipOAuth2ClientDataType(ModelSimple): + """ + OAuth2 client resource type. + + :param value: If omitted defaults to "oauth2_clients". Must be one of ["oauth2_clients"]. + :type value: str + """ + + allowed_values = { + "oauth2_clients", + } + OAUTH2_CLIENTS: ClassVar["OrgAuthorizedClientRelationshipOAuth2ClientDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgAuthorizedClientRelationshipOAuth2ClientDataType.OAUTH2_CLIENTS = OrgAuthorizedClientRelationshipOAuth2ClientDataType("oauth2_clients") diff --git a/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients.py b/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients.py new file mode 100644 index 0000000000..4bdc76b737 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients_data import OrgAuthorizedClientRelationshipUserAuthorizedClientsData + from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients_links import OrgAuthorizedClientRelationshipUserAuthorizedClientsLinks + +class OrgAuthorizedClientRelationshipUserAuthorizedClients(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients_data import OrgAuthorizedClientRelationshipUserAuthorizedClientsData + from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients_links import OrgAuthorizedClientRelationshipUserAuthorizedClientsLinks + return { + "data": ([OrgAuthorizedClientRelationshipUserAuthorizedClientsData],), + "links": (OrgAuthorizedClientRelationshipUserAuthorizedClientsLinks,), + } + attribute_map = { + "data": "data", + "links": "links", + } + + def __init__(self_, data: List[OrgAuthorizedClientRelationshipUserAuthorizedClientsData], links: OrgAuthorizedClientRelationshipUserAuthorizedClientsLinks, **kwargs): + """ + Relationship to the user authorized clients for this org authorized client. + + :param data: List of user authorized client relationship data objects. + :type data: [OrgAuthorizedClientRelationshipUserAuthorizedClientsData] + + :param links: Links for the user authorized clients relationship. + :type links: OrgAuthorizedClientRelationshipUserAuthorizedClientsLinks + """ + super().__init__(kwargs) + + + self_.data = data + self_.links = links diff --git a/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients_data.py b/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients_data.py new file mode 100644 index 0000000000..a658c81724 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients_data_type import OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType + +class OrgAuthorizedClientRelationshipUserAuthorizedClientsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients_data_type import OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType + return { + "id": (str,), + "type": (OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType, **kwargs): + """ + Data identifying a user authorized client. + + :param id: The ID of the user authorized client. + :type id: str + + :param type: User authorized client resource type. + :type type: OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients_data_type.py b/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients_data_type.py new file mode 100644 index 0000000000..e5623b726a --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType(ModelSimple): + """ + User authorized client resource type. + + :param value: If omitted defaults to "user_authorized_clients". Must be one of ["user_authorized_clients"]. + :type value: str + """ + + allowed_values = { + "user_authorized_clients", + } + USER_AUTHORIZED_CLIENTS: ClassVar["OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType.USER_AUTHORIZED_CLIENTS = OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType("user_authorized_clients") diff --git a/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients_links.py b/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients_links.py new file mode 100644 index 0000000000..ecd88d1fa2 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_relationship_user_authorized_clients_links.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgAuthorizedClientRelationshipUserAuthorizedClientsLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "related": (str,), + } + attribute_map = { + "related": "related", + } + + def __init__(self_, related: str, **kwargs): + """ + Links for the user authorized clients relationship. + + :param related: Link to the user authorized clients for this org authorized client. + :type related: str + """ + super().__init__(kwargs) + + + self_.related = related diff --git a/datadog_api_client/v2/model/org_authorized_client_relationships.py b/datadog_api_client/v2/model/org_authorized_client_relationships.py new file mode 100644 index 0000000000..85fbced4e8 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_relationship_o_auth2_client import OrgAuthorizedClientRelationshipOAuth2Client + from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients import OrgAuthorizedClientRelationshipUserAuthorizedClients + +class OrgAuthorizedClientRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_relationship_o_auth2_client import OrgAuthorizedClientRelationshipOAuth2Client + from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients import OrgAuthorizedClientRelationshipUserAuthorizedClients + return { + "oauth2_client": (OrgAuthorizedClientRelationshipOAuth2Client,), + "user_authorized_clients": (OrgAuthorizedClientRelationshipUserAuthorizedClients,), + } + attribute_map = { + "oauth2_client": "oauth2_client", + "user_authorized_clients": "user_authorized_clients", + } + + def __init__(self_, oauth2_client: OrgAuthorizedClientRelationshipOAuth2Client, user_authorized_clients: OrgAuthorizedClientRelationshipUserAuthorizedClients, **kwargs): + """ + Relationships for an org authorized client. + + :param oauth2_client: Relationship to the OAuth2 client for this org authorized client. + :type oauth2_client: OrgAuthorizedClientRelationshipOAuth2Client + + :param user_authorized_clients: Relationship to the user authorized clients for this org authorized client. + :type user_authorized_clients: OrgAuthorizedClientRelationshipUserAuthorizedClients + """ + super().__init__(kwargs) + + + self_.oauth2_client = oauth2_client + self_.user_authorized_clients = user_authorized_clients diff --git a/datadog_api_client/v2/model/org_authorized_client_response.py b/datadog_api_client/v2/model/org_authorized_client_response.py new file mode 100644 index 0000000000..63cec55e6d --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_data import OrgAuthorizedClientData + +class OrgAuthorizedClientResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_data import OrgAuthorizedClientData + return { + "data": (OrgAuthorizedClientData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgAuthorizedClientData, **kwargs): + """ + Response containing a single org authorized client. + + :param data: Data object representing an org authorized client. + :type data: OrgAuthorizedClientData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_authorized_client_type.py b/datadog_api_client/v2/model/org_authorized_client_type.py new file mode 100644 index 0000000000..9cdb021367 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgAuthorizedClientType(ModelSimple): + """ + The resource type for org authorized clients. + + :param value: If omitted defaults to "org_authorized_clients". Must be one of ["org_authorized_clients"]. + :type value: str + """ + + allowed_values = { + "org_authorized_clients", + } + ORG_AUTHORIZED_CLIENTS: ClassVar["OrgAuthorizedClientType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgAuthorizedClientType.ORG_AUTHORIZED_CLIENTS = OrgAuthorizedClientType("org_authorized_clients") diff --git a/datadog_api_client/v2/model/org_authorized_client_update_attributes.py b/datadog_api_client/v2/model/org_authorized_client_update_attributes.py new file mode 100644 index 0000000000..eee32b4ff4 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgAuthorizedClientUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "disabled": (bool,), + } + attribute_map = { + "disabled": "disabled", + } + + def __init__(self_, disabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for updating an org authorized client. + + :param disabled: Whether to disable or enable this client for the organization. + :type disabled: bool, optional + """ + if disabled is not unset: + kwargs["disabled"] = disabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_authorized_client_update_data.py b/datadog_api_client/v2/model/org_authorized_client_update_data.py new file mode 100644 index 0000000000..1e7af23472 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_update_attributes import OrgAuthorizedClientUpdateAttributes + from datadog_api_client.v2.model.org_authorized_client_type import OrgAuthorizedClientType + +class OrgAuthorizedClientUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_update_attributes import OrgAuthorizedClientUpdateAttributes + from datadog_api_client.v2.model.org_authorized_client_type import OrgAuthorizedClientType + return { + "attributes": (OrgAuthorizedClientUpdateAttributes,), + "id": (str,), + "type": (OrgAuthorizedClientType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: OrgAuthorizedClientType, attributes: Union[OrgAuthorizedClientUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating an org authorized client. + + :param attributes: Attributes for updating an org authorized client. + :type attributes: OrgAuthorizedClientUpdateAttributes, optional + + :param id: The unique identifier of the org authorized client to update. + :type id: str + + :param type: The resource type for org authorized clients. + :type type: OrgAuthorizedClientType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_authorized_client_update_request.py b/datadog_api_client/v2/model/org_authorized_client_update_request.py new file mode 100644 index 0000000000..7ece927716 --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_update_data import OrgAuthorizedClientUpdateData + +class OrgAuthorizedClientUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_update_data import OrgAuthorizedClientUpdateData + return { + "data": (OrgAuthorizedClientUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgAuthorizedClientUpdateData, **kwargs): + """ + Request body for updating an org authorized client. + + :param data: Data object for updating an org authorized client. + :type data: OrgAuthorizedClientUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_authorized_client_user_authorizations_sort.py b/datadog_api_client/v2/model/org_authorized_client_user_authorizations_sort.py new file mode 100644 index 0000000000..be228b82fc --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_client_user_authorizations_sort.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgAuthorizedClientUserAuthorizationsSort(ModelSimple): + """ + Field to sort user authorizations by. + + :param value: Must be one of ["user.name", "user.email", "oauth2_client.name"]. + :type value: str + """ + + allowed_values = { + "user.name", + "user.email", + "oauth2_client.name", + } + USER_NAME: ClassVar["OrgAuthorizedClientUserAuthorizationsSort"] + USER_EMAIL: ClassVar["OrgAuthorizedClientUserAuthorizationsSort"] + OAUTH2_CLIENT_NAME: ClassVar["OrgAuthorizedClientUserAuthorizationsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgAuthorizedClientUserAuthorizationsSort.USER_NAME = OrgAuthorizedClientUserAuthorizationsSort("user.name") +OrgAuthorizedClientUserAuthorizationsSort.USER_EMAIL = OrgAuthorizedClientUserAuthorizationsSort("user.email") +OrgAuthorizedClientUserAuthorizationsSort.OAUTH2_CLIENT_NAME = OrgAuthorizedClientUserAuthorizationsSort("oauth2_client.name") diff --git a/datadog_api_client/v2/model/org_authorized_clients_response.py b/datadog_api_client/v2/model/org_authorized_clients_response.py new file mode 100644 index 0000000000..05c2fe099e --- /dev/null +++ b/datadog_api_client/v2/model/org_authorized_clients_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_authorized_client_data import OrgAuthorizedClientData + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + +class OrgAuthorizedClientsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_authorized_client_data import OrgAuthorizedClientData + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + return { + "data": ([OrgAuthorizedClientData],), + "meta": (ResponseMetaAttributes,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[OrgAuthorizedClientData], meta: ResponseMetaAttributes, **kwargs): + """ + Response containing a list of org authorized clients. + + :param data: List of org authorized client data objects. + :type data: [OrgAuthorizedClientData] + + :param meta: Object describing meta attributes of response. + :type meta: ResponseMetaAttributes + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/org_config_get_response.py b/datadog_api_client/v2/model/org_config_get_response.py new file mode 100644 index 0000000000..0ba23a1c0b --- /dev/null +++ b/datadog_api_client/v2/model/org_config_get_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_config_read import OrgConfigRead + +class OrgConfigGetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_config_read import OrgConfigRead + return { + "data": (OrgConfigRead,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgConfigRead, **kwargs): + """ + A response with a single Org Config. + + :param data: A single Org Config. + :type data: OrgConfigRead + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_config_list_response.py b/datadog_api_client/v2/model/org_config_list_response.py new file mode 100644 index 0000000000..8e15ad2938 --- /dev/null +++ b/datadog_api_client/v2/model/org_config_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_config_read import OrgConfigRead + +class OrgConfigListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_config_read import OrgConfigRead + return { + "data": ([OrgConfigRead],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[OrgConfigRead], **kwargs): + """ + A response with multiple Org Configs. + + :param data: An array of Org Configs. + :type data: [OrgConfigRead] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_config_read.py b/datadog_api_client/v2/model/org_config_read.py new file mode 100644 index 0000000000..e88db9cec1 --- /dev/null +++ b/datadog_api_client/v2/model/org_config_read.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_config_read_attributes import OrgConfigReadAttributes + from datadog_api_client.v2.model.org_config_type import OrgConfigType + +class OrgConfigRead(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_config_read_attributes import OrgConfigReadAttributes + from datadog_api_client.v2.model.org_config_type import OrgConfigType + return { + "attributes": (OrgConfigReadAttributes,), + "id": (str,), + "type": (OrgConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OrgConfigReadAttributes, id: str, type: OrgConfigType, **kwargs): + """ + A single Org Config. + + :param attributes: Readable attributes of an Org Config. + :type attributes: OrgConfigReadAttributes + + :param id: A unique identifier for an Org Config. + :type id: str + + :param type: Data type of an Org Config. + :type type: OrgConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_config_read_attributes.py b/datadog_api_client/v2/model/org_config_read_attributes.py new file mode 100644 index 0000000000..15bbc1c98b --- /dev/null +++ b/datadog_api_client/v2/model/org_config_read_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgConfigReadAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "modified_at": (datetime, none_type), + "name": (str,), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "value_type": (str,), + } + attribute_map = { + "description": "description", + "modified_at": "modified_at", + "name": "name", + "value": "value", + "value_type": "value_type", + } + + def __init__(self_, description: str, name: str, value: Any, value_type: str, modified_at: Union[datetime, none_type, UnsetType]=unset, **kwargs): + """ + Readable attributes of an Org Config. + + :param description: The description of an Org Config. + :type description: str + + :param modified_at: The timestamp of the last Org Config update (if any). + :type modified_at: datetime, none_type, optional + + :param name: The machine-friendly name of an Org Config. + :type name: str + + :param value: The value of an Org Config. + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type + + :param value_type: The type of an Org Config value. + :type value_type: str + """ + if modified_at is not unset: + kwargs["modified_at"] = modified_at + super().__init__(kwargs) + + + self_.description = description + self_.name = name + self_.value = value + self_.value_type = value_type diff --git a/datadog_api_client/v2/model/org_config_type.py b/datadog_api_client/v2/model/org_config_type.py new file mode 100644 index 0000000000..24d6b39e1c --- /dev/null +++ b/datadog_api_client/v2/model/org_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgConfigType(ModelSimple): + """ + Data type of an Org Config. + + :param value: If omitted defaults to "org_configs". Must be one of ["org_configs"]. + :type value: str + """ + + allowed_values = { + "org_configs", + } + ORG_CONFIGS: ClassVar["OrgConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgConfigType.ORG_CONFIGS = OrgConfigType("org_configs") diff --git a/datadog_api_client/v2/model/org_config_write.py b/datadog_api_client/v2/model/org_config_write.py new file mode 100644 index 0000000000..d7e342d0d9 --- /dev/null +++ b/datadog_api_client/v2/model/org_config_write.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_config_write_attributes import OrgConfigWriteAttributes + from datadog_api_client.v2.model.org_config_type import OrgConfigType + +class OrgConfigWrite(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_config_write_attributes import OrgConfigWriteAttributes + from datadog_api_client.v2.model.org_config_type import OrgConfigType + return { + "attributes": (OrgConfigWriteAttributes,), + "type": (OrgConfigType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: OrgConfigWriteAttributes, type: OrgConfigType, **kwargs): + """ + An Org Config write operation. + + :param attributes: Writable attributes of an Org Config. + :type attributes: OrgConfigWriteAttributes + + :param type: Data type of an Org Config. + :type type: OrgConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/org_config_write_attributes.py b/datadog_api_client/v2/model/org_config_write_attributes.py new file mode 100644 index 0000000000..74534e7bd6 --- /dev/null +++ b/datadog_api_client/v2/model/org_config_write_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgConfigWriteAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "value": "value", + } + + def __init__(self_, value: Any, **kwargs): + """ + Writable attributes of an Org Config. + + :param value: The value of an Org Config. + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type + """ + super().__init__(kwargs) + + + self_.value = value diff --git a/datadog_api_client/v2/model/org_config_write_request.py b/datadog_api_client/v2/model/org_config_write_request.py new file mode 100644 index 0000000000..1721df1b58 --- /dev/null +++ b/datadog_api_client/v2/model/org_config_write_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_config_write import OrgConfigWrite + +class OrgConfigWriteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_config_write import OrgConfigWrite + return { + "data": (OrgConfigWrite,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgConfigWrite, **kwargs): + """ + A request to update an Org Config. + + :param data: An Org Config write operation. + :type data: OrgConfigWrite + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_connection.py b/datadog_api_client/v2/model/org_connection.py new file mode 100644 index 0000000000..9b6f587419 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_attributes import OrgConnectionAttributes + from datadog_api_client.v2.model.org_connection_relationships import OrgConnectionRelationships + from datadog_api_client.v2.model.org_connection_type import OrgConnectionType + +class OrgConnection(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_attributes import OrgConnectionAttributes + from datadog_api_client.v2.model.org_connection_relationships import OrgConnectionRelationships + from datadog_api_client.v2.model.org_connection_type import OrgConnectionType + return { + "attributes": (OrgConnectionAttributes,), + "id": (UUID,), + "relationships": (OrgConnectionRelationships,), + "type": (OrgConnectionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgConnectionAttributes, id: UUID, relationships: OrgConnectionRelationships, type: OrgConnectionType, **kwargs): + """ + An org connection. + + :param attributes: Org connection attributes. + :type attributes: OrgConnectionAttributes + + :param id: The unique identifier of the org connection. + :type id: UUID + + :param relationships: Related organizations and user. + :type relationships: OrgConnectionRelationships + + :param type: Org connection type. + :type type: OrgConnectionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/org_connection_attributes.py b/datadog_api_client/v2/model/org_connection_attributes.py new file mode 100644 index 0000000000..712e8feab9 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_type_enum import OrgConnectionTypeEnum + +class OrgConnectionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_type_enum import OrgConnectionTypeEnum + return { + "connection_types": ([OrgConnectionTypeEnum],), + "created_at": (datetime,), + } + attribute_map = { + "connection_types": "connection_types", + "created_at": "created_at", + } + + def __init__(self_, connection_types: List[OrgConnectionTypeEnum], created_at: datetime, **kwargs): + """ + Org connection attributes. + + :param connection_types: List of connection types. + :type connection_types: [OrgConnectionTypeEnum] + + :param created_at: Timestamp when the connection was created. + :type created_at: datetime + """ + super().__init__(kwargs) + + + self_.connection_types = connection_types + self_.created_at = created_at diff --git a/datadog_api_client/v2/model/org_connection_create.py b/datadog_api_client/v2/model/org_connection_create.py new file mode 100644 index 0000000000..6fa85076ec --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_create.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_create_attributes import OrgConnectionCreateAttributes + from datadog_api_client.v2.model.org_connection_create_relationships import OrgConnectionCreateRelationships + from datadog_api_client.v2.model.org_connection_type import OrgConnectionType + +class OrgConnectionCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_create_attributes import OrgConnectionCreateAttributes + from datadog_api_client.v2.model.org_connection_create_relationships import OrgConnectionCreateRelationships + from datadog_api_client.v2.model.org_connection_type import OrgConnectionType + return { + "attributes": (OrgConnectionCreateAttributes,), + "relationships": (OrgConnectionCreateRelationships,), + "type": (OrgConnectionType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgConnectionCreateAttributes, relationships: OrgConnectionCreateRelationships, type: OrgConnectionType, **kwargs): + """ + Org connection creation data. + + :param attributes: Attributes for creating an org connection. + :type attributes: OrgConnectionCreateAttributes + + :param relationships: Relationships for org connection creation. + :type relationships: OrgConnectionCreateRelationships + + :param type: Org connection type. + :type type: OrgConnectionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/org_connection_create_attributes.py b/datadog_api_client/v2/model/org_connection_create_attributes.py new file mode 100644 index 0000000000..22e86c4f7a --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_create_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_type_enum import OrgConnectionTypeEnum + +class OrgConnectionCreateAttributes(ModelNormal): + validations = { + "connection_types": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_type_enum import OrgConnectionTypeEnum + return { + "connection_types": ([OrgConnectionTypeEnum],), + } + attribute_map = { + "connection_types": "connection_types", + } + + def __init__(self_, connection_types: List[OrgConnectionTypeEnum], **kwargs): + """ + Attributes for creating an org connection. + + :param connection_types: List of connection types to establish. + :type connection_types: [OrgConnectionTypeEnum] + """ + super().__init__(kwargs) + + + self_.connection_types = connection_types diff --git a/datadog_api_client/v2/model/org_connection_create_relationships.py b/datadog_api_client/v2/model/org_connection_create_relationships.py new file mode 100644 index 0000000000..4a6e4de1f5 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_create_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_org_relationship import OrgConnectionOrgRelationship + +class OrgConnectionCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_org_relationship import OrgConnectionOrgRelationship + return { + "sink_org": (OrgConnectionOrgRelationship,), + } + attribute_map = { + "sink_org": "sink_org", + } + + def __init__(self_, sink_org: OrgConnectionOrgRelationship, **kwargs): + """ + Relationships for org connection creation. + + :param sink_org: Org relationship. + :type sink_org: OrgConnectionOrgRelationship + """ + super().__init__(kwargs) + + + self_.sink_org = sink_org diff --git a/datadog_api_client/v2/model/org_connection_create_request.py b/datadog_api_client/v2/model/org_connection_create_request.py new file mode 100644 index 0000000000..6f6be0ac47 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_create import OrgConnectionCreate + +class OrgConnectionCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_create import OrgConnectionCreate + return { + "data": (OrgConnectionCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgConnectionCreate, **kwargs): + """ + Request to create an org connection. + + :param data: Org connection creation data. + :type data: OrgConnectionCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_connection_list_response.py b/datadog_api_client/v2/model/org_connection_list_response.py new file mode 100644 index 0000000000..330e600d85 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_list_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection import OrgConnection + from datadog_api_client.v2.model.org_connection_list_response_meta import OrgConnectionListResponseMeta + +class OrgConnectionListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection import OrgConnection + from datadog_api_client.v2.model.org_connection_list_response_meta import OrgConnectionListResponseMeta + return { + "data": ([OrgConnection],), + "meta": (OrgConnectionListResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[OrgConnection], meta: Union[OrgConnectionListResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of org connections. + + :param data: List of org connections. + :type data: [OrgConnection] + + :param meta: Pagination metadata. + :type meta: OrgConnectionListResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_connection_list_response_meta.py b/datadog_api_client/v2/model/org_connection_list_response_meta.py new file mode 100644 index 0000000000..2079180357 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_list_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_list_response_meta_page import OrgConnectionListResponseMetaPage + +class OrgConnectionListResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_list_response_meta_page import OrgConnectionListResponseMetaPage + return { + "page": (OrgConnectionListResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[OrgConnectionListResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Pagination metadata. + + :param page: Page information. + :type page: OrgConnectionListResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_connection_list_response_meta_page.py b/datadog_api_client/v2/model/org_connection_list_response_meta_page.py new file mode 100644 index 0000000000..5db9f86a9e --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_list_response_meta_page.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgConnectionListResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Page information. + + :param total_count: Total number of org connections. + :type total_count: int, optional + + :param total_filtered_count: Total number of org connections matching the filter. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_connection_org_relationship.py b/datadog_api_client/v2/model/org_connection_org_relationship.py new file mode 100644 index 0000000000..37c038268e --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_org_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_org_relationship_data import OrgConnectionOrgRelationshipData + +class OrgConnectionOrgRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_org_relationship_data import OrgConnectionOrgRelationshipData + return { + "data": (OrgConnectionOrgRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[OrgConnectionOrgRelationshipData, UnsetType]=unset, **kwargs): + """ + Org relationship. + + :param data: The definition of ``OrgConnectionOrgRelationshipData`` object. + :type data: OrgConnectionOrgRelationshipData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_connection_org_relationship_data.py b/datadog_api_client/v2/model/org_connection_org_relationship_data.py new file mode 100644 index 0000000000..d8a6d87964 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_org_relationship_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_org_relationship_data_type import OrgConnectionOrgRelationshipDataType + +class OrgConnectionOrgRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_org_relationship_data_type import OrgConnectionOrgRelationshipDataType + return { + "id": (str,), + "name": (str,), + "type": (OrgConnectionOrgRelationshipDataType,), + } + attribute_map = { + "id": "id", + "name": "name", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, type: Union[OrgConnectionOrgRelationshipDataType, UnsetType]=unset, **kwargs): + """ + The definition of ``OrgConnectionOrgRelationshipData`` object. + + :param id: Org UUID. + :type id: str, optional + + :param name: Org name. + :type name: str, optional + + :param type: The type of the organization relationship. + :type type: OrgConnectionOrgRelationshipDataType, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_connection_org_relationship_data_type.py b/datadog_api_client/v2/model/org_connection_org_relationship_data_type.py new file mode 100644 index 0000000000..18c37ba9dc --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_org_relationship_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgConnectionOrgRelationshipDataType(ModelSimple): + """ + The type of the organization relationship. + + :param value: If omitted defaults to "orgs". Must be one of ["orgs"]. + :type value: str + """ + + allowed_values = { + "orgs", + } + ORGS: ClassVar["OrgConnectionOrgRelationshipDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgConnectionOrgRelationshipDataType.ORGS = OrgConnectionOrgRelationshipDataType("orgs") diff --git a/datadog_api_client/v2/model/org_connection_relationships.py b/datadog_api_client/v2/model/org_connection_relationships.py new file mode 100644 index 0000000000..17917f8c98 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_relationships.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_user_relationship import OrgConnectionUserRelationship + from datadog_api_client.v2.model.org_connection_org_relationship import OrgConnectionOrgRelationship + +class OrgConnectionRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_user_relationship import OrgConnectionUserRelationship + from datadog_api_client.v2.model.org_connection_org_relationship import OrgConnectionOrgRelationship + return { + "created_by": (OrgConnectionUserRelationship,), + "sink_org": (OrgConnectionOrgRelationship,), + "source_org": (OrgConnectionOrgRelationship,), + } + attribute_map = { + "created_by": "created_by", + "sink_org": "sink_org", + "source_org": "source_org", + } + + def __init__(self_, created_by: Union[OrgConnectionUserRelationship, UnsetType]=unset, sink_org: Union[OrgConnectionOrgRelationship, UnsetType]=unset, source_org: Union[OrgConnectionOrgRelationship, UnsetType]=unset, **kwargs): + """ + Related organizations and user. + + :param created_by: User relationship. + :type created_by: OrgConnectionUserRelationship, optional + + :param sink_org: Org relationship. + :type sink_org: OrgConnectionOrgRelationship, optional + + :param source_org: Org relationship. + :type source_org: OrgConnectionOrgRelationship, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if sink_org is not unset: + kwargs["sink_org"] = sink_org + if source_org is not unset: + kwargs["source_org"] = source_org + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_connection_response.py b/datadog_api_client/v2/model/org_connection_response.py new file mode 100644 index 0000000000..b05d04fe08 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection import OrgConnection + +class OrgConnectionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection import OrgConnection + return { + "data": (OrgConnection,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgConnection, **kwargs): + """ + Response containing a single org connection. + + :param data: An org connection. + :type data: OrgConnection + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_connection_type.py b/datadog_api_client/v2/model/org_connection_type.py new file mode 100644 index 0000000000..0a67af11ac --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgConnectionType(ModelSimple): + """ + Org connection type. + + :param value: If omitted defaults to "org_connection". Must be one of ["org_connection"]. + :type value: str + """ + + allowed_values = { + "org_connection", + } + ORG_CONNECTION: ClassVar["OrgConnectionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgConnectionType.ORG_CONNECTION = OrgConnectionType("org_connection") diff --git a/datadog_api_client/v2/model/org_connection_type_enum.py b/datadog_api_client/v2/model/org_connection_type_enum.py new file mode 100644 index 0000000000..c754fdbffe --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_type_enum.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgConnectionTypeEnum(ModelSimple): + """ + Available connection types between organizations. + + :param value: Must be one of ["logs", "metrics", "audit"]. + :type value: str + """ + + allowed_values = { + "logs", + "metrics", + "audit", + } + LOGS: ClassVar["OrgConnectionTypeEnum"] + METRICS: ClassVar["OrgConnectionTypeEnum"] + AUDIT: ClassVar["OrgConnectionTypeEnum"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgConnectionTypeEnum.LOGS = OrgConnectionTypeEnum("logs") +OrgConnectionTypeEnum.METRICS = OrgConnectionTypeEnum("metrics") +OrgConnectionTypeEnum.AUDIT = OrgConnectionTypeEnum("audit") diff --git a/datadog_api_client/v2/model/org_connection_update.py b/datadog_api_client/v2/model/org_connection_update.py new file mode 100644 index 0000000000..18cb37f372 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_update.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_update_attributes import OrgConnectionUpdateAttributes + from datadog_api_client.v2.model.org_connection_type import OrgConnectionType + +class OrgConnectionUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_update_attributes import OrgConnectionUpdateAttributes + from datadog_api_client.v2.model.org_connection_type import OrgConnectionType + return { + "attributes": (OrgConnectionUpdateAttributes,), + "id": (UUID,), + "type": (OrgConnectionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OrgConnectionUpdateAttributes, id: UUID, type: OrgConnectionType, **kwargs): + """ + Org connection update data. + + :param attributes: Attributes for updating an org connection. + :type attributes: OrgConnectionUpdateAttributes + + :param id: The unique identifier of the org connection. + :type id: UUID + + :param type: Org connection type. + :type type: OrgConnectionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_connection_update_attributes.py b/datadog_api_client/v2/model/org_connection_update_attributes.py new file mode 100644 index 0000000000..7d2ebbf4e2 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_update_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_type_enum import OrgConnectionTypeEnum + +class OrgConnectionUpdateAttributes(ModelNormal): + validations = { + "connection_types": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_type_enum import OrgConnectionTypeEnum + return { + "connection_types": ([OrgConnectionTypeEnum],), + } + attribute_map = { + "connection_types": "connection_types", + } + + def __init__(self_, connection_types: List[OrgConnectionTypeEnum], **kwargs): + """ + Attributes for updating an org connection. + + :param connection_types: Updated list of connection types. + :type connection_types: [OrgConnectionTypeEnum] + """ + super().__init__(kwargs) + + + self_.connection_types = connection_types diff --git a/datadog_api_client/v2/model/org_connection_update_request.py b/datadog_api_client/v2/model/org_connection_update_request.py new file mode 100644 index 0000000000..f485183684 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_update import OrgConnectionUpdate + +class OrgConnectionUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_update import OrgConnectionUpdate + return { + "data": (OrgConnectionUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgConnectionUpdate, **kwargs): + """ + Request to update an org connection. + + :param data: Org connection update data. + :type data: OrgConnectionUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_connection_user_relationship.py b/datadog_api_client/v2/model/org_connection_user_relationship.py new file mode 100644 index 0000000000..3a41a5ef90 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_user_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_user_relationship_data import OrgConnectionUserRelationshipData + +class OrgConnectionUserRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_user_relationship_data import OrgConnectionUserRelationshipData + return { + "data": (OrgConnectionUserRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[OrgConnectionUserRelationshipData, UnsetType]=unset, **kwargs): + """ + User relationship. + + :param data: The data for a user relationship. + :type data: OrgConnectionUserRelationshipData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_connection_user_relationship_data.py b/datadog_api_client/v2/model/org_connection_user_relationship_data.py new file mode 100644 index 0000000000..d67fccbae3 --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_user_relationship_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_connection_user_relationship_data_type import OrgConnectionUserRelationshipDataType + +class OrgConnectionUserRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_connection_user_relationship_data_type import OrgConnectionUserRelationshipDataType + return { + "id": (str,), + "name": (str,), + "type": (OrgConnectionUserRelationshipDataType,), + } + attribute_map = { + "id": "id", + "name": "name", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, type: Union[OrgConnectionUserRelationshipDataType, UnsetType]=unset, **kwargs): + """ + The data for a user relationship. + + :param id: User UUID. + :type id: str, optional + + :param name: User name. + :type name: str, optional + + :param type: The type of the user relationship. + :type type: OrgConnectionUserRelationshipDataType, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_connection_user_relationship_data_type.py b/datadog_api_client/v2/model/org_connection_user_relationship_data_type.py new file mode 100644 index 0000000000..62283704dc --- /dev/null +++ b/datadog_api_client/v2/model/org_connection_user_relationship_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgConnectionUserRelationshipDataType(ModelSimple): + """ + The type of the user relationship. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["OrgConnectionUserRelationshipDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgConnectionUserRelationshipDataType.USERS = OrgConnectionUserRelationshipDataType("users") diff --git a/datadog_api_client/v2/model/org_data.py b/datadog_api_client/v2/model/org_data.py new file mode 100644 index 0000000000..e73edf2825 --- /dev/null +++ b/datadog_api_client/v2/model/org_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_attributes import OrgAttributes + from datadog_api_client.v2.model.org_resource_type import OrgResourceType + +class OrgData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_attributes import OrgAttributes + from datadog_api_client.v2.model.org_resource_type import OrgResourceType + return { + "attributes": (OrgAttributes,), + "id": (UUID,), + "type": (OrgResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OrgAttributes, id: UUID, type: OrgResourceType, **kwargs): + """ + An organization resource. + + :param attributes: Attributes of an organization. + :type attributes: OrgAttributes + + :param id: The UUID of the organization. + :type id: UUID + + :param type: The resource type for organizations. + :type type: OrgResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_attributes.py b/datadog_api_client/v2/model/org_group_attributes.py new file mode 100644 index 0000000000..9c36f514b6 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "modified_at": (datetime,), + "name": (str,), + "owner_org_site": (str,), + "owner_org_uuid": (UUID,), + } + attribute_map = { + "created_at": "created_at", + "modified_at": "modified_at", + "name": "name", + "owner_org_site": "owner_org_site", + "owner_org_uuid": "owner_org_uuid", + } + + def __init__(self_, created_at: datetime, modified_at: datetime, name: str, owner_org_site: str, owner_org_uuid: UUID, **kwargs): + """ + Attributes of an org group. + + :param created_at: Timestamp when the org group was created. + :type created_at: datetime + + :param modified_at: Timestamp when the org group was last modified. + :type modified_at: datetime + + :param name: The name of the org group. + :type name: str + + :param owner_org_site: The site of the organization that owns this org group. + :type owner_org_site: str + + :param owner_org_uuid: The UUID of the organization that owns this org group. + :type owner_org_uuid: UUID + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.modified_at = modified_at + self_.name = name + self_.owner_org_site = owner_org_site + self_.owner_org_uuid = owner_org_uuid diff --git a/datadog_api_client/v2/model/org_group_create_attributes.py b/datadog_api_client/v2/model/org_group_create_attributes.py new file mode 100644 index 0000000000..64d059e8fa --- /dev/null +++ b/datadog_api_client/v2/model/org_group_create_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: str, **kwargs): + """ + Attributes for creating an org group. + + :param name: The name of the org group. + :type name: str + """ + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/org_group_create_data.py b/datadog_api_client/v2/model/org_group_create_data.py new file mode 100644 index 0000000000..c326f48ca3 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_create_attributes import OrgGroupCreateAttributes + from datadog_api_client.v2.model.org_group_type import OrgGroupType + +class OrgGroupCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_create_attributes import OrgGroupCreateAttributes + from datadog_api_client.v2.model.org_group_type import OrgGroupType + return { + "attributes": (OrgGroupCreateAttributes,), + "type": (OrgGroupType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupCreateAttributes, type: OrgGroupType, **kwargs): + """ + Data for creating an org group. + + :param attributes: Attributes for creating an org group. + :type attributes: OrgGroupCreateAttributes + + :param type: Org groups resource type. + :type type: OrgGroupType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_create_request.py b/datadog_api_client/v2/model/org_group_create_request.py new file mode 100644 index 0000000000..3dbc0671f9 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_create_data import OrgGroupCreateData + +class OrgGroupCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_create_data import OrgGroupCreateData + return { + "data": (OrgGroupCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupCreateData, **kwargs): + """ + Request to create an org group. + + :param data: Data for creating an org group. + :type data: OrgGroupCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_data.py b/datadog_api_client/v2/model/org_group_data.py new file mode 100644 index 0000000000..c4d47b656b --- /dev/null +++ b/datadog_api_client/v2/model/org_group_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_attributes import OrgGroupAttributes + from datadog_api_client.v2.model.org_group_type import OrgGroupType + +class OrgGroupData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_attributes import OrgGroupAttributes + from datadog_api_client.v2.model.org_group_type import OrgGroupType + return { + "attributes": (OrgGroupAttributes,), + "id": (UUID,), + "type": (OrgGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupAttributes, id: UUID, type: OrgGroupType, **kwargs): + """ + An org group resource. + + :param attributes: Attributes of an org group. + :type attributes: OrgGroupAttributes + + :param id: The ID of the org group. + :type id: UUID + + :param type: Org groups resource type. + :type type: OrgGroupType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_list_response.py b/datadog_api_client/v2/model/org_group_list_response.py new file mode 100644 index 0000000000..f1dcc759e8 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_list_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_data import OrgGroupData + from datadog_api_client.v2.model.org_group_pagination_links import OrgGroupPaginationLinks + from datadog_api_client.v2.model.org_group_pagination_meta import OrgGroupPaginationMeta + +class OrgGroupListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_data import OrgGroupData + from datadog_api_client.v2.model.org_group_pagination_links import OrgGroupPaginationLinks + from datadog_api_client.v2.model.org_group_pagination_meta import OrgGroupPaginationMeta + return { + "data": ([OrgGroupData],), + "links": (OrgGroupPaginationLinks,), + "meta": (OrgGroupPaginationMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[OrgGroupData], links: Union[OrgGroupPaginationLinks, UnsetType]=unset, meta: Union[OrgGroupPaginationMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of org groups. + + :param data: An array of org groups. + :type data: [OrgGroupData] + + :param links: Pagination links for navigating between pages of an org group list response. + :type links: OrgGroupPaginationLinks, optional + + :param meta: Pagination metadata for org group list responses. + :type meta: OrgGroupPaginationMeta, optional + """ + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_membership_attributes.py b/datadog_api_client/v2/model/org_group_membership_attributes.py new file mode 100644 index 0000000000..79dd99cf15 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupMembershipAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "modified_at": (datetime,), + "org_name": (str,), + "org_site": (str,), + "org_uuid": (UUID,), + } + attribute_map = { + "created_at": "created_at", + "modified_at": "modified_at", + "org_name": "org_name", + "org_site": "org_site", + "org_uuid": "org_uuid", + } + + def __init__(self_, created_at: datetime, modified_at: datetime, org_name: str, org_site: str, org_uuid: UUID, **kwargs): + """ + Attributes of an org group membership. + + :param created_at: Timestamp when the membership was created. + :type created_at: datetime + + :param modified_at: Timestamp when the membership was last modified. + :type modified_at: datetime + + :param org_name: The name of the member organization. + :type org_name: str + + :param org_site: The site of the member organization. + :type org_site: str + + :param org_uuid: The UUID of the member organization. + :type org_uuid: UUID + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.modified_at = modified_at + self_.org_name = org_name + self_.org_site = org_site + self_.org_uuid = org_uuid diff --git a/datadog_api_client/v2/model/org_group_membership_bulk_update_attributes.py b/datadog_api_client/v2/model/org_group_membership_bulk_update_attributes.py new file mode 100644 index 0000000000..adab6e57e1 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_bulk_update_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.global_org_identifier import GlobalOrgIdentifier + +class OrgGroupMembershipBulkUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.global_org_identifier import GlobalOrgIdentifier + return { + "orgs": ([GlobalOrgIdentifier],), + } + attribute_map = { + "orgs": "orgs", + } + + def __init__(self_, orgs: List[GlobalOrgIdentifier], **kwargs): + """ + Attributes for bulk updating org group memberships. + + :param orgs: List of organizations to move. Maximum 100 per request. + :type orgs: [GlobalOrgIdentifier] + """ + super().__init__(kwargs) + + + self_.orgs = orgs diff --git a/datadog_api_client/v2/model/org_group_membership_bulk_update_data.py b/datadog_api_client/v2/model/org_group_membership_bulk_update_data.py new file mode 100644 index 0000000000..40c7ae7642 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_bulk_update_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_membership_bulk_update_attributes import OrgGroupMembershipBulkUpdateAttributes + from datadog_api_client.v2.model.org_group_membership_bulk_update_relationships import OrgGroupMembershipBulkUpdateRelationships + from datadog_api_client.v2.model.org_group_membership_bulk_update_type import OrgGroupMembershipBulkUpdateType + +class OrgGroupMembershipBulkUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_membership_bulk_update_attributes import OrgGroupMembershipBulkUpdateAttributes + from datadog_api_client.v2.model.org_group_membership_bulk_update_relationships import OrgGroupMembershipBulkUpdateRelationships + from datadog_api_client.v2.model.org_group_membership_bulk_update_type import OrgGroupMembershipBulkUpdateType + return { + "attributes": (OrgGroupMembershipBulkUpdateAttributes,), + "relationships": (OrgGroupMembershipBulkUpdateRelationships,), + "type": (OrgGroupMembershipBulkUpdateType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupMembershipBulkUpdateAttributes, relationships: OrgGroupMembershipBulkUpdateRelationships, type: OrgGroupMembershipBulkUpdateType, **kwargs): + """ + Data for bulk updating org group memberships. + + :param attributes: Attributes for bulk updating org group memberships. + :type attributes: OrgGroupMembershipBulkUpdateAttributes + + :param relationships: Relationships for bulk updating memberships. + :type relationships: OrgGroupMembershipBulkUpdateRelationships + + :param type: Org group membership bulk update resource type. + :type type: OrgGroupMembershipBulkUpdateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_membership_bulk_update_relationships.py b/datadog_api_client/v2/model/org_group_membership_bulk_update_relationships.py new file mode 100644 index 0000000000..bd440f33b6 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_bulk_update_relationships.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + +class OrgGroupMembershipBulkUpdateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + return { + "source_org_group": (OrgGroupRelationshipToOne,), + "target_org_group": (OrgGroupRelationshipToOne,), + } + attribute_map = { + "source_org_group": "source_org_group", + "target_org_group": "target_org_group", + } + + def __init__(self_, source_org_group: OrgGroupRelationshipToOne, target_org_group: OrgGroupRelationshipToOne, **kwargs): + """ + Relationships for bulk updating memberships. + + :param source_org_group: Relationship to a single org group. + :type source_org_group: OrgGroupRelationshipToOne + + :param target_org_group: Relationship to a single org group. + :type target_org_group: OrgGroupRelationshipToOne + """ + super().__init__(kwargs) + + + self_.source_org_group = source_org_group + self_.target_org_group = target_org_group diff --git a/datadog_api_client/v2/model/org_group_membership_bulk_update_request.py b/datadog_api_client/v2/model/org_group_membership_bulk_update_request.py new file mode 100644 index 0000000000..293915bf27 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_bulk_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_membership_bulk_update_data import OrgGroupMembershipBulkUpdateData + +class OrgGroupMembershipBulkUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_membership_bulk_update_data import OrgGroupMembershipBulkUpdateData + return { + "data": (OrgGroupMembershipBulkUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupMembershipBulkUpdateData, **kwargs): + """ + Request to bulk update org group memberships. + + :param data: Data for bulk updating org group memberships. + :type data: OrgGroupMembershipBulkUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_membership_bulk_update_type.py b/datadog_api_client/v2/model/org_group_membership_bulk_update_type.py new file mode 100644 index 0000000000..7ba552d37e --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_bulk_update_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupMembershipBulkUpdateType(ModelSimple): + """ + Org group membership bulk update resource type. + + :param value: If omitted defaults to "org_group_membership_bulk_updates". Must be one of ["org_group_membership_bulk_updates"]. + :type value: str + """ + + allowed_values = { + "org_group_membership_bulk_updates", + } + ORG_GROUP_MEMBERSHIP_BULK_UPDATES: ClassVar["OrgGroupMembershipBulkUpdateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupMembershipBulkUpdateType.ORG_GROUP_MEMBERSHIP_BULK_UPDATES = OrgGroupMembershipBulkUpdateType("org_group_membership_bulk_updates") diff --git a/datadog_api_client/v2/model/org_group_membership_data.py b/datadog_api_client/v2/model/org_group_membership_data.py new file mode 100644 index 0000000000..fb21e6c0c6 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_membership_attributes import OrgGroupMembershipAttributes + from datadog_api_client.v2.model.org_group_membership_relationships import OrgGroupMembershipRelationships + from datadog_api_client.v2.model.org_group_membership_type import OrgGroupMembershipType + +class OrgGroupMembershipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_membership_attributes import OrgGroupMembershipAttributes + from datadog_api_client.v2.model.org_group_membership_relationships import OrgGroupMembershipRelationships + from datadog_api_client.v2.model.org_group_membership_type import OrgGroupMembershipType + return { + "attributes": (OrgGroupMembershipAttributes,), + "id": (UUID,), + "relationships": (OrgGroupMembershipRelationships,), + "type": (OrgGroupMembershipType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupMembershipAttributes, id: UUID, type: OrgGroupMembershipType, relationships: Union[OrgGroupMembershipRelationships, UnsetType]=unset, **kwargs): + """ + An org group membership resource. + + :param attributes: Attributes of an org group membership. + :type attributes: OrgGroupMembershipAttributes + + :param id: The ID of the org group membership. + :type id: UUID + + :param relationships: Relationships of an org group membership. + :type relationships: OrgGroupMembershipRelationships, optional + + :param type: Org group memberships resource type. + :type type: OrgGroupMembershipType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_membership_list_response.py b/datadog_api_client/v2/model/org_group_membership_list_response.py new file mode 100644 index 0000000000..e4f99ba295 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_list_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_membership_data import OrgGroupMembershipData + from datadog_api_client.v2.model.org_group_pagination_links import OrgGroupPaginationLinks + from datadog_api_client.v2.model.org_group_pagination_meta import OrgGroupPaginationMeta + +class OrgGroupMembershipListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_membership_data import OrgGroupMembershipData + from datadog_api_client.v2.model.org_group_pagination_links import OrgGroupPaginationLinks + from datadog_api_client.v2.model.org_group_pagination_meta import OrgGroupPaginationMeta + return { + "data": ([OrgGroupMembershipData],), + "links": (OrgGroupPaginationLinks,), + "meta": (OrgGroupPaginationMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[OrgGroupMembershipData], links: Union[OrgGroupPaginationLinks, UnsetType]=unset, meta: Union[OrgGroupPaginationMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of org group memberships. + + :param data: An array of org group memberships. + :type data: [OrgGroupMembershipData] + + :param links: Pagination links for navigating between pages of an org group list response. + :type links: OrgGroupPaginationLinks, optional + + :param meta: Pagination metadata for org group list responses. + :type meta: OrgGroupPaginationMeta, optional + """ + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_membership_relationships.py b/datadog_api_client/v2/model/org_group_membership_relationships.py new file mode 100644 index 0000000000..cb8316f9c4 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + +class OrgGroupMembershipRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + return { + "org_group": (OrgGroupRelationshipToOne,), + } + attribute_map = { + "org_group": "org_group", + } + + def __init__(self_, org_group: Union[OrgGroupRelationshipToOne, UnsetType]=unset, **kwargs): + """ + Relationships of an org group membership. + + :param org_group: Relationship to a single org group. + :type org_group: OrgGroupRelationshipToOne, optional + """ + if org_group is not unset: + kwargs["org_group"] = org_group + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_group_membership_response.py b/datadog_api_client/v2/model/org_group_membership_response.py new file mode 100644 index 0000000000..2ded90b05c --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_membership_data import OrgGroupMembershipData + +class OrgGroupMembershipResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_membership_data import OrgGroupMembershipData + return { + "data": (OrgGroupMembershipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupMembershipData, **kwargs): + """ + Response containing a single org group membership. + + :param data: An org group membership resource. + :type data: OrgGroupMembershipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_membership_sort_option.py b/datadog_api_client/v2/model/org_group_membership_sort_option.py new file mode 100644 index 0000000000..63ab5779b0 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_sort_option.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupMembershipSortOption(ModelSimple): + """ + Field to sort memberships by. + + :param value: If omitted defaults to "uuid". Must be one of ["name", "-name", "uuid", "-uuid"]. + :type value: str + """ + + allowed_values = { + "name", + "-name", + "uuid", + "-uuid", + } + NAME: ClassVar["OrgGroupMembershipSortOption"] + MINUS_NAME: ClassVar["OrgGroupMembershipSortOption"] + UUID: ClassVar["OrgGroupMembershipSortOption"] + MINUS_UUID: ClassVar["OrgGroupMembershipSortOption"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupMembershipSortOption.NAME = OrgGroupMembershipSortOption("name") +OrgGroupMembershipSortOption.MINUS_NAME = OrgGroupMembershipSortOption("-name") +OrgGroupMembershipSortOption.UUID = OrgGroupMembershipSortOption("uuid") +OrgGroupMembershipSortOption.MINUS_UUID = OrgGroupMembershipSortOption("-uuid") diff --git a/datadog_api_client/v2/model/org_group_membership_type.py b/datadog_api_client/v2/model/org_group_membership_type.py new file mode 100644 index 0000000000..f633185b6b --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupMembershipType(ModelSimple): + """ + Org group memberships resource type. + + :param value: If omitted defaults to "org_group_memberships". Must be one of ["org_group_memberships"]. + :type value: str + """ + + allowed_values = { + "org_group_memberships", + } + ORG_GROUP_MEMBERSHIPS: ClassVar["OrgGroupMembershipType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupMembershipType.ORG_GROUP_MEMBERSHIPS = OrgGroupMembershipType("org_group_memberships") diff --git a/datadog_api_client/v2/model/org_group_membership_update_data.py b/datadog_api_client/v2/model/org_group_membership_update_data.py new file mode 100644 index 0000000000..9b724a2401 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_membership_update_relationships import OrgGroupMembershipUpdateRelationships + from datadog_api_client.v2.model.org_group_membership_type import OrgGroupMembershipType + +class OrgGroupMembershipUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_membership_update_relationships import OrgGroupMembershipUpdateRelationships + from datadog_api_client.v2.model.org_group_membership_type import OrgGroupMembershipType + return { + "id": (UUID,), + "relationships": (OrgGroupMembershipUpdateRelationships,), + "type": (OrgGroupMembershipType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: UUID, relationships: OrgGroupMembershipUpdateRelationships, type: OrgGroupMembershipType, **kwargs): + """ + Data for updating an org group membership. + + :param id: The ID of the membership. + :type id: UUID + + :param relationships: Relationships for updating a membership. + :type relationships: OrgGroupMembershipUpdateRelationships + + :param type: Org group memberships resource type. + :type type: OrgGroupMembershipType + """ + super().__init__(kwargs) + + + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_membership_update_relationships.py b/datadog_api_client/v2/model/org_group_membership_update_relationships.py new file mode 100644 index 0000000000..ee759f030b --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_update_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + +class OrgGroupMembershipUpdateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + return { + "org_group": (OrgGroupRelationshipToOne,), + } + attribute_map = { + "org_group": "org_group", + } + + def __init__(self_, org_group: OrgGroupRelationshipToOne, **kwargs): + """ + Relationships for updating a membership. + + :param org_group: Relationship to a single org group. + :type org_group: OrgGroupRelationshipToOne + """ + super().__init__(kwargs) + + + self_.org_group = org_group diff --git a/datadog_api_client/v2/model/org_group_membership_update_request.py b/datadog_api_client/v2/model/org_group_membership_update_request.py new file mode 100644 index 0000000000..6a0df60a7e --- /dev/null +++ b/datadog_api_client/v2/model/org_group_membership_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_membership_update_data import OrgGroupMembershipUpdateData + +class OrgGroupMembershipUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_membership_update_data import OrgGroupMembershipUpdateData + return { + "data": (OrgGroupMembershipUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupMembershipUpdateData, **kwargs): + """ + Request to update an org group membership. + + :param data: Data for updating an org group membership. + :type data: OrgGroupMembershipUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_pagination_links.py b/datadog_api_client/v2/model/org_group_pagination_links.py new file mode 100644 index 0000000000..e10ad1d2d6 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_pagination_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupPaginationLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str,), + "next": (str, none_type), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, UnsetType]=unset, next: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links for navigating between pages of an org group list response. + + :param first: Link to the first page. + :type first: str, optional + + :param last: Link to the last page. + :type last: str, optional + + :param next: Link to the next page. + :type next: str, none_type, optional + + :param prev: Link to the previous page. + :type prev: str, none_type, optional + + :param self: Link to the current page. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_group_pagination_meta.py b/datadog_api_client/v2/model/org_group_pagination_meta.py new file mode 100644 index 0000000000..ffb2f62829 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_pagination_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_pagination_meta_page import OrgGroupPaginationMetaPage + +class OrgGroupPaginationMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_pagination_meta_page import OrgGroupPaginationMetaPage + return { + "page": (OrgGroupPaginationMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[OrgGroupPaginationMetaPage, UnsetType]=unset, **kwargs): + """ + Pagination metadata for org group list responses. + + :param page: Page-based pagination details for org group list responses. + :type page: OrgGroupPaginationMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_group_pagination_meta_page.py b/datadog_api_client/v2/model/org_group_pagination_meta_page.py new file mode 100644 index 0000000000..e3506bb171 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_pagination_meta_page.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupPaginationMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_number": (int,), + "last_number": (int, none_type), + "next_number": (int, none_type), + "number": (int,), + "prev_number": (int, none_type), + "size": (int,), + "total": (int,), + "type": (str,), + } + attribute_map = { + "first_number": "first_number", + "last_number": "last_number", + "next_number": "next_number", + "number": "number", + "prev_number": "prev_number", + "size": "size", + "total": "total", + "type": "type", + } + + def __init__(self_, first_number: Union[int, UnsetType]=unset, last_number: Union[int, none_type, UnsetType]=unset, next_number: Union[int, none_type, UnsetType]=unset, number: Union[int, UnsetType]=unset, prev_number: Union[int, none_type, UnsetType]=unset, size: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Page-based pagination details for org group list responses. + + :param first_number: First page number. + :type first_number: int, optional + + :param last_number: Last page number. + :type last_number: int, none_type, optional + + :param next_number: Next page number. + :type next_number: int, none_type, optional + + :param number: Page number. + :type number: int, optional + + :param prev_number: Previous page number. + :type prev_number: int, none_type, optional + + :param size: Page size. + :type size: int, optional + + :param total: Total number of results. + :type total: int, optional + + :param type: Pagination type. + :type type: str, optional + """ + if first_number is not unset: + kwargs["first_number"] = first_number + if last_number is not unset: + kwargs["last_number"] = last_number + if next_number is not unset: + kwargs["next_number"] = next_number + if number is not unset: + kwargs["number"] = number + if prev_number is not unset: + kwargs["prev_number"] = prev_number + if size is not unset: + kwargs["size"] = size + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_group_policy_attributes.py b/datadog_api_client/v2/model/org_group_policy_attributes.py new file mode 100644 index 0000000000..1a4ef700b7 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_attributes.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_enforcement_tier import OrgGroupPolicyEnforcementTier + from datadog_api_client.v2.model.org_group_policy_policy_type import OrgGroupPolicyPolicyType + +class OrgGroupPolicyAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_enforcement_tier import OrgGroupPolicyEnforcementTier + from datadog_api_client.v2.model.org_group_policy_policy_type import OrgGroupPolicyPolicyType + return { + "content": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "enforcement_tier": (OrgGroupPolicyEnforcementTier,), + "modified_at": (datetime,), + "policy_name": (str,), + "policy_type": (OrgGroupPolicyPolicyType,), + } + attribute_map = { + "content": "content", + "enforcement_tier": "enforcement_tier", + "modified_at": "modified_at", + "policy_name": "policy_name", + "policy_type": "policy_type", + } + + def __init__(self_, enforcement_tier: OrgGroupPolicyEnforcementTier, modified_at: datetime, policy_name: str, policy_type: OrgGroupPolicyPolicyType, content: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + Attributes of an org group policy. + + :param content: The policy content as key-value pairs. + :type content: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param enforcement_tier: The enforcement tier of the policy. ``OVERRIDE_ALLOWED`` means the policy is set but member orgs may mutate it. ``GROUP_MANAGED`` means the policy is strictly controlled and mutations are blocked for affected orgs. ``DELEGATE`` means each member org controls its own value. + :type enforcement_tier: OrgGroupPolicyEnforcementTier + + :param modified_at: Timestamp when the policy was last modified. + :type modified_at: datetime + + :param policy_name: The name of the policy. + :type policy_name: str + + :param policy_type: The type of the policy. Only ``org_config`` is supported, indicating a policy backed by an organization configuration setting. + :type policy_type: OrgGroupPolicyPolicyType + """ + if content is not unset: + kwargs["content"] = content + super().__init__(kwargs) + + + self_.enforcement_tier = enforcement_tier + self_.modified_at = modified_at + self_.policy_name = policy_name + self_.policy_type = policy_type diff --git a/datadog_api_client/v2/model/org_group_policy_config_attributes.py b/datadog_api_client/v2/model/org_group_policy_config_attributes.py new file mode 100644 index 0000000000..dc9945fe55 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_config_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupPolicyConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "allowed_values": ([str],), + "default_value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "description": (str,), + "name": (str,), + "value_type": (str,), + } + attribute_map = { + "allowed_values": "allowed_values", + "default_value": "default_value", + "description": "description", + "name": "name", + "value_type": "value_type", + } + + def __init__(self_, allowed_values: List[str], default_value: Any, description: str, name: str, value_type: str, **kwargs): + """ + Attributes of an org group policy config. + + :param allowed_values: The allowed values for this config. + :type allowed_values: [str] + + :param default_value: The default value for this config. + :type default_value: bool, date, datetime, dict, float, int, list, str, UUID, none_type + + :param description: The description of the policy config. + :type description: str + + :param name: The name of the policy config. + :type name: str + + :param value_type: The type of the value for this config. + :type value_type: str + """ + super().__init__(kwargs) + + + self_.allowed_values = allowed_values + self_.default_value = default_value + self_.description = description + self_.name = name + self_.value_type = value_type diff --git a/datadog_api_client/v2/model/org_group_policy_config_data.py b/datadog_api_client/v2/model/org_group_policy_config_data.py new file mode 100644 index 0000000000..22b89777d4 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_config_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_config_attributes import OrgGroupPolicyConfigAttributes + from datadog_api_client.v2.model.org_group_policy_config_type import OrgGroupPolicyConfigType + +class OrgGroupPolicyConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_config_attributes import OrgGroupPolicyConfigAttributes + from datadog_api_client.v2.model.org_group_policy_config_type import OrgGroupPolicyConfigType + return { + "attributes": (OrgGroupPolicyConfigAttributes,), + "id": (str,), + "type": (OrgGroupPolicyConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupPolicyConfigAttributes, id: str, type: OrgGroupPolicyConfigType, **kwargs): + """ + An org group policy config resource. + + :param attributes: Attributes of an org group policy config. + :type attributes: OrgGroupPolicyConfigAttributes + + :param id: The identifier of the policy config (uses the config name). + :type id: str + + :param type: Org group policy configs resource type. + :type type: OrgGroupPolicyConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_policy_config_list_response.py b/datadog_api_client/v2/model/org_group_policy_config_list_response.py new file mode 100644 index 0000000000..a08cc15e84 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_config_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_config_data import OrgGroupPolicyConfigData + +class OrgGroupPolicyConfigListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_config_data import OrgGroupPolicyConfigData + return { + "data": ([OrgGroupPolicyConfigData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[OrgGroupPolicyConfigData], **kwargs): + """ + Response containing a list of org group policy configs. + + :param data: An array of org group policy configs. + :type data: [OrgGroupPolicyConfigData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_config_type.py b/datadog_api_client/v2/model/org_group_policy_config_type.py new file mode 100644 index 0000000000..878ba5d1a2 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupPolicyConfigType(ModelSimple): + """ + Org group policy configs resource type. + + :param value: If omitted defaults to "org_group_policy_configs". Must be one of ["org_group_policy_configs"]. + :type value: str + """ + + allowed_values = { + "org_group_policy_configs", + } + ORG_GROUP_POLICY_CONFIGS: ClassVar["OrgGroupPolicyConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupPolicyConfigType.ORG_GROUP_POLICY_CONFIGS = OrgGroupPolicyConfigType("org_group_policy_configs") diff --git a/datadog_api_client/v2/model/org_group_policy_create_attributes.py b/datadog_api_client/v2/model/org_group_policy_create_attributes.py new file mode 100644 index 0000000000..ef93b286ad --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_create_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_enforcement_tier import OrgGroupPolicyEnforcementTier + from datadog_api_client.v2.model.org_group_policy_policy_type import OrgGroupPolicyPolicyType + +class OrgGroupPolicyCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_enforcement_tier import OrgGroupPolicyEnforcementTier + from datadog_api_client.v2.model.org_group_policy_policy_type import OrgGroupPolicyPolicyType + return { + "content": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "enforcement_tier": (OrgGroupPolicyEnforcementTier,), + "policy_name": (str,), + "policy_type": (OrgGroupPolicyPolicyType,), + } + attribute_map = { + "content": "content", + "enforcement_tier": "enforcement_tier", + "policy_name": "policy_name", + "policy_type": "policy_type", + } + + def __init__(self_, content: Dict[str, Any], policy_name: str, enforcement_tier: Union[OrgGroupPolicyEnforcementTier, UnsetType]=unset, policy_type: Union[OrgGroupPolicyPolicyType, UnsetType]=unset, **kwargs): + """ + Attributes for creating an org group policy. If ``policy_type`` or ``enforcement_tier`` are not provided, they default to ``org_config`` and ``DEFAULT`` respectively. + + :param content: The policy content as key-value pairs. + :type content: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + + :param enforcement_tier: The enforcement tier of the policy. ``OVERRIDE_ALLOWED`` means the policy is set but member orgs may mutate it. ``GROUP_MANAGED`` means the policy is strictly controlled and mutations are blocked for affected orgs. ``DELEGATE`` means each member org controls its own value. + :type enforcement_tier: OrgGroupPolicyEnforcementTier, optional + + :param policy_name: The name of the policy. + :type policy_name: str + + :param policy_type: The type of the policy. Only ``org_config`` is supported, indicating a policy backed by an organization configuration setting. + :type policy_type: OrgGroupPolicyPolicyType, optional + """ + if enforcement_tier is not unset: + kwargs["enforcement_tier"] = enforcement_tier + if policy_type is not unset: + kwargs["policy_type"] = policy_type + super().__init__(kwargs) + + + self_.content = content + self_.policy_name = policy_name diff --git a/datadog_api_client/v2/model/org_group_policy_create_data.py b/datadog_api_client/v2/model/org_group_policy_create_data.py new file mode 100644 index 0000000000..4309c46273 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_create_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_create_attributes import OrgGroupPolicyCreateAttributes + from datadog_api_client.v2.model.org_group_policy_create_relationships import OrgGroupPolicyCreateRelationships + from datadog_api_client.v2.model.org_group_policy_type import OrgGroupPolicyType + +class OrgGroupPolicyCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_create_attributes import OrgGroupPolicyCreateAttributes + from datadog_api_client.v2.model.org_group_policy_create_relationships import OrgGroupPolicyCreateRelationships + from datadog_api_client.v2.model.org_group_policy_type import OrgGroupPolicyType + return { + "attributes": (OrgGroupPolicyCreateAttributes,), + "relationships": (OrgGroupPolicyCreateRelationships,), + "type": (OrgGroupPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupPolicyCreateAttributes, relationships: OrgGroupPolicyCreateRelationships, type: OrgGroupPolicyType, **kwargs): + """ + Data for creating an org group policy. + + :param attributes: Attributes for creating an org group policy. If ``policy_type`` or ``enforcement_tier`` are not provided, they default to ``org_config`` and ``DEFAULT`` respectively. + :type attributes: OrgGroupPolicyCreateAttributes + + :param relationships: Relationships for creating a policy. + :type relationships: OrgGroupPolicyCreateRelationships + + :param type: Org group policies resource type. + :type type: OrgGroupPolicyType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_policy_create_relationships.py b/datadog_api_client/v2/model/org_group_policy_create_relationships.py new file mode 100644 index 0000000000..36a4a73158 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_create_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + +class OrgGroupPolicyCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + return { + "org_group": (OrgGroupRelationshipToOne,), + } + attribute_map = { + "org_group": "org_group", + } + + def __init__(self_, org_group: OrgGroupRelationshipToOne, **kwargs): + """ + Relationships for creating a policy. + + :param org_group: Relationship to a single org group. + :type org_group: OrgGroupRelationshipToOne + """ + super().__init__(kwargs) + + + self_.org_group = org_group diff --git a/datadog_api_client/v2/model/org_group_policy_create_request.py b/datadog_api_client/v2/model/org_group_policy_create_request.py new file mode 100644 index 0000000000..7de61cd470 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_create_data import OrgGroupPolicyCreateData + +class OrgGroupPolicyCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_create_data import OrgGroupPolicyCreateData + return { + "data": (OrgGroupPolicyCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupPolicyCreateData, **kwargs): + """ + Request to create an org group policy. + + :param data: Data for creating an org group policy. + :type data: OrgGroupPolicyCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_data.py b/datadog_api_client/v2/model/org_group_policy_data.py new file mode 100644 index 0000000000..5da6e25813 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_attributes import OrgGroupPolicyAttributes + from datadog_api_client.v2.model.org_group_policy_relationships import OrgGroupPolicyRelationships + from datadog_api_client.v2.model.org_group_policy_type import OrgGroupPolicyType + +class OrgGroupPolicyData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_attributes import OrgGroupPolicyAttributes + from datadog_api_client.v2.model.org_group_policy_relationships import OrgGroupPolicyRelationships + from datadog_api_client.v2.model.org_group_policy_type import OrgGroupPolicyType + return { + "attributes": (OrgGroupPolicyAttributes,), + "id": (UUID,), + "relationships": (OrgGroupPolicyRelationships,), + "type": (OrgGroupPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupPolicyAttributes, id: UUID, type: OrgGroupPolicyType, relationships: Union[OrgGroupPolicyRelationships, UnsetType]=unset, **kwargs): + """ + An org group policy resource. + + :param attributes: Attributes of an org group policy. + :type attributes: OrgGroupPolicyAttributes + + :param id: The ID of the org group policy. + :type id: UUID + + :param relationships: Relationships of an org group policy. + :type relationships: OrgGroupPolicyRelationships, optional + + :param type: Org group policies resource type. + :type type: OrgGroupPolicyType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_policy_enforcement_tier.py b/datadog_api_client/v2/model/org_group_policy_enforcement_tier.py new file mode 100644 index 0000000000..f96a9a0c96 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_enforcement_tier.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupPolicyEnforcementTier(ModelSimple): + """ + The enforcement tier of the policy. `OVERRIDE_ALLOWED` means the policy is set but member orgs may mutate it. `GROUP_MANAGED` means the policy is strictly controlled and mutations are blocked for affected orgs. `DELEGATE` means each member org controls its own value. + + :param value: If omitted defaults to "OVERRIDE_ALLOWED". Must be one of ["OVERRIDE_ALLOWED", "GROUP_MANAGED", "DELEGATE"]. + :type value: str + """ + + allowed_values = { + "OVERRIDE_ALLOWED", + "GROUP_MANAGED", + "DELEGATE", + } + OVERRIDE_ALLOWED: ClassVar["OrgGroupPolicyEnforcementTier"] + GROUP_MANAGED: ClassVar["OrgGroupPolicyEnforcementTier"] + DELEGATE: ClassVar["OrgGroupPolicyEnforcementTier"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupPolicyEnforcementTier.OVERRIDE_ALLOWED = OrgGroupPolicyEnforcementTier("OVERRIDE_ALLOWED") +OrgGroupPolicyEnforcementTier.GROUP_MANAGED = OrgGroupPolicyEnforcementTier("GROUP_MANAGED") +OrgGroupPolicyEnforcementTier.DELEGATE = OrgGroupPolicyEnforcementTier("DELEGATE") diff --git a/datadog_api_client/v2/model/org_group_policy_list_response.py b/datadog_api_client/v2/model/org_group_policy_list_response.py new file mode 100644 index 0000000000..7481a4f98a --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_list_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_data import OrgGroupPolicyData + from datadog_api_client.v2.model.org_group_pagination_links import OrgGroupPaginationLinks + from datadog_api_client.v2.model.org_group_pagination_meta import OrgGroupPaginationMeta + +class OrgGroupPolicyListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_data import OrgGroupPolicyData + from datadog_api_client.v2.model.org_group_pagination_links import OrgGroupPaginationLinks + from datadog_api_client.v2.model.org_group_pagination_meta import OrgGroupPaginationMeta + return { + "data": ([OrgGroupPolicyData],), + "links": (OrgGroupPaginationLinks,), + "meta": (OrgGroupPaginationMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[OrgGroupPolicyData], links: Union[OrgGroupPaginationLinks, UnsetType]=unset, meta: Union[OrgGroupPaginationMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of org group policies. + + :param data: An array of org group policies. + :type data: [OrgGroupPolicyData] + + :param links: Pagination links for navigating between pages of an org group list response. + :type links: OrgGroupPaginationLinks, optional + + :param meta: Pagination metadata for org group list responses. + :type meta: OrgGroupPaginationMeta, optional + """ + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_override_attributes.py b/datadog_api_client/v2/model/org_group_policy_override_attributes.py new file mode 100644 index 0000000000..eb26407dbd --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupPolicyOverrideAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "content": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "created_at": (datetime,), + "modified_at": (datetime,), + "org_site": (str,), + "org_uuid": (UUID,), + } + attribute_map = { + "content": "content", + "created_at": "created_at", + "modified_at": "modified_at", + "org_site": "org_site", + "org_uuid": "org_uuid", + } + + def __init__(self_, created_at: datetime, modified_at: datetime, org_site: str, org_uuid: UUID, content: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + Attributes of an org group policy override. + + :param content: The override content as key-value pairs. + :type content: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param created_at: Timestamp when the override was created. + :type created_at: datetime + + :param modified_at: Timestamp when the override was last modified. + :type modified_at: datetime + + :param org_site: The site of the organization that has the override. + :type org_site: str + + :param org_uuid: The UUID of the organization that has the override. + :type org_uuid: UUID + """ + if content is not unset: + kwargs["content"] = content + super().__init__(kwargs) + + + self_.created_at = created_at + self_.modified_at = modified_at + self_.org_site = org_site + self_.org_uuid = org_uuid diff --git a/datadog_api_client/v2/model/org_group_policy_override_create_attributes.py b/datadog_api_client/v2/model/org_group_policy_override_create_attributes.py new file mode 100644 index 0000000000..9564f3ed4c --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_create_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupPolicyOverrideCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "org_site": (str,), + "org_uuid": (UUID,), + } + attribute_map = { + "org_site": "org_site", + "org_uuid": "org_uuid", + } + + def __init__(self_, org_site: str, org_uuid: UUID, **kwargs): + """ + Attributes for creating a policy override. + + :param org_site: The site of the organization. + :type org_site: str + + :param org_uuid: The UUID of the organization to grant the override. + :type org_uuid: UUID + """ + super().__init__(kwargs) + + + self_.org_site = org_site + self_.org_uuid = org_uuid diff --git a/datadog_api_client/v2/model/org_group_policy_override_create_data.py b/datadog_api_client/v2/model/org_group_policy_override_create_data.py new file mode 100644 index 0000000000..d7997cfc81 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_create_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_override_create_attributes import OrgGroupPolicyOverrideCreateAttributes + from datadog_api_client.v2.model.org_group_policy_override_create_relationships import OrgGroupPolicyOverrideCreateRelationships + from datadog_api_client.v2.model.org_group_policy_override_type import OrgGroupPolicyOverrideType + +class OrgGroupPolicyOverrideCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_override_create_attributes import OrgGroupPolicyOverrideCreateAttributes + from datadog_api_client.v2.model.org_group_policy_override_create_relationships import OrgGroupPolicyOverrideCreateRelationships + from datadog_api_client.v2.model.org_group_policy_override_type import OrgGroupPolicyOverrideType + return { + "attributes": (OrgGroupPolicyOverrideCreateAttributes,), + "relationships": (OrgGroupPolicyOverrideCreateRelationships,), + "type": (OrgGroupPolicyOverrideType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupPolicyOverrideCreateAttributes, relationships: OrgGroupPolicyOverrideCreateRelationships, type: OrgGroupPolicyOverrideType, **kwargs): + """ + Data for creating an org group policy override. + + :param attributes: Attributes for creating a policy override. + :type attributes: OrgGroupPolicyOverrideCreateAttributes + + :param relationships: Relationships for creating a policy override. + :type relationships: OrgGroupPolicyOverrideCreateRelationships + + :param type: Org group policy overrides resource type. + :type type: OrgGroupPolicyOverrideType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_policy_override_create_relationships.py b/datadog_api_client/v2/model/org_group_policy_override_create_relationships.py new file mode 100644 index 0000000000..02af50ba2a --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_create_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + from datadog_api_client.v2.model.org_group_policy_relationship_to_one import OrgGroupPolicyRelationshipToOne + +class OrgGroupPolicyOverrideCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + from datadog_api_client.v2.model.org_group_policy_relationship_to_one import OrgGroupPolicyRelationshipToOne + return { + "org_group": (OrgGroupRelationshipToOne,), + "org_group_policy": (OrgGroupPolicyRelationshipToOne,), + } + attribute_map = { + "org_group": "org_group", + "org_group_policy": "org_group_policy", + } + + def __init__(self_, org_group: OrgGroupRelationshipToOne, org_group_policy: OrgGroupPolicyRelationshipToOne, **kwargs): + """ + Relationships for creating a policy override. + + :param org_group: Relationship to a single org group. + :type org_group: OrgGroupRelationshipToOne + + :param org_group_policy: Relationship to a single org group policy. + :type org_group_policy: OrgGroupPolicyRelationshipToOne + """ + super().__init__(kwargs) + + + self_.org_group = org_group + self_.org_group_policy = org_group_policy diff --git a/datadog_api_client/v2/model/org_group_policy_override_create_request.py b/datadog_api_client/v2/model/org_group_policy_override_create_request.py new file mode 100644 index 0000000000..a6c7072179 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_override_create_data import OrgGroupPolicyOverrideCreateData + +class OrgGroupPolicyOverrideCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_override_create_data import OrgGroupPolicyOverrideCreateData + return { + "data": (OrgGroupPolicyOverrideCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupPolicyOverrideCreateData, **kwargs): + """ + Request to create an org group policy override. + + :param data: Data for creating an org group policy override. + :type data: OrgGroupPolicyOverrideCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_override_data.py b/datadog_api_client/v2/model/org_group_policy_override_data.py new file mode 100644 index 0000000000..8c0e149b0d --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_override_attributes import OrgGroupPolicyOverrideAttributes + from datadog_api_client.v2.model.org_group_policy_override_relationships import OrgGroupPolicyOverrideRelationships + from datadog_api_client.v2.model.org_group_policy_override_type import OrgGroupPolicyOverrideType + +class OrgGroupPolicyOverrideData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_override_attributes import OrgGroupPolicyOverrideAttributes + from datadog_api_client.v2.model.org_group_policy_override_relationships import OrgGroupPolicyOverrideRelationships + from datadog_api_client.v2.model.org_group_policy_override_type import OrgGroupPolicyOverrideType + return { + "attributes": (OrgGroupPolicyOverrideAttributes,), + "id": (UUID,), + "relationships": (OrgGroupPolicyOverrideRelationships,), + "type": (OrgGroupPolicyOverrideType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupPolicyOverrideAttributes, id: UUID, type: OrgGroupPolicyOverrideType, relationships: Union[OrgGroupPolicyOverrideRelationships, UnsetType]=unset, **kwargs): + """ + An org group policy override resource. + + :param attributes: Attributes of an org group policy override. + :type attributes: OrgGroupPolicyOverrideAttributes + + :param id: The ID of the policy override. + :type id: UUID + + :param relationships: Relationships of an org group policy override. + :type relationships: OrgGroupPolicyOverrideRelationships, optional + + :param type: Org group policy overrides resource type. + :type type: OrgGroupPolicyOverrideType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_policy_override_list_response.py b/datadog_api_client/v2/model/org_group_policy_override_list_response.py new file mode 100644 index 0000000000..b746cd998c --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_list_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_override_data import OrgGroupPolicyOverrideData + from datadog_api_client.v2.model.org_group_pagination_links import OrgGroupPaginationLinks + from datadog_api_client.v2.model.org_group_pagination_meta import OrgGroupPaginationMeta + +class OrgGroupPolicyOverrideListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_override_data import OrgGroupPolicyOverrideData + from datadog_api_client.v2.model.org_group_pagination_links import OrgGroupPaginationLinks + from datadog_api_client.v2.model.org_group_pagination_meta import OrgGroupPaginationMeta + return { + "data": ([OrgGroupPolicyOverrideData],), + "links": (OrgGroupPaginationLinks,), + "meta": (OrgGroupPaginationMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[OrgGroupPolicyOverrideData], links: Union[OrgGroupPaginationLinks, UnsetType]=unset, meta: Union[OrgGroupPaginationMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of org group policy overrides. + + :param data: An array of org group policy overrides. + :type data: [OrgGroupPolicyOverrideData] + + :param links: Pagination links for navigating between pages of an org group list response. + :type links: OrgGroupPaginationLinks, optional + + :param meta: Pagination metadata for org group list responses. + :type meta: OrgGroupPaginationMeta, optional + """ + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_override_relationships.py b/datadog_api_client/v2/model/org_group_policy_override_relationships.py new file mode 100644 index 0000000000..f53bff3ed3 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + from datadog_api_client.v2.model.org_group_policy_relationship_to_one import OrgGroupPolicyRelationshipToOne + +class OrgGroupPolicyOverrideRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + from datadog_api_client.v2.model.org_group_policy_relationship_to_one import OrgGroupPolicyRelationshipToOne + return { + "org_group": (OrgGroupRelationshipToOne,), + "org_group_policy": (OrgGroupPolicyRelationshipToOne,), + } + attribute_map = { + "org_group": "org_group", + "org_group_policy": "org_group_policy", + } + + def __init__(self_, org_group: Union[OrgGroupRelationshipToOne, UnsetType]=unset, org_group_policy: Union[OrgGroupPolicyRelationshipToOne, UnsetType]=unset, **kwargs): + """ + Relationships of an org group policy override. + + :param org_group: Relationship to a single org group. + :type org_group: OrgGroupRelationshipToOne, optional + + :param org_group_policy: Relationship to a single org group policy. + :type org_group_policy: OrgGroupPolicyRelationshipToOne, optional + """ + if org_group is not unset: + kwargs["org_group"] = org_group + if org_group_policy is not unset: + kwargs["org_group_policy"] = org_group_policy + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_group_policy_override_response.py b/datadog_api_client/v2/model/org_group_policy_override_response.py new file mode 100644 index 0000000000..40ab6edc45 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_override_data import OrgGroupPolicyOverrideData + +class OrgGroupPolicyOverrideResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_override_data import OrgGroupPolicyOverrideData + return { + "data": (OrgGroupPolicyOverrideData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupPolicyOverrideData, **kwargs): + """ + Response containing a single org group policy override. + + :param data: An org group policy override resource. + :type data: OrgGroupPolicyOverrideData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_override_sort_option.py b/datadog_api_client/v2/model/org_group_policy_override_sort_option.py new file mode 100644 index 0000000000..ba9db9ef39 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_sort_option.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupPolicyOverrideSortOption(ModelSimple): + """ + Field to sort overrides by. + + :param value: If omitted defaults to "id". Must be one of ["id", "-id", "org_uuid", "-org_uuid"]. + :type value: str + """ + + allowed_values = { + "id", + "-id", + "org_uuid", + "-org_uuid", + } + ID: ClassVar["OrgGroupPolicyOverrideSortOption"] + MINUS_ID: ClassVar["OrgGroupPolicyOverrideSortOption"] + ORG_UUID: ClassVar["OrgGroupPolicyOverrideSortOption"] + MINUS_ORG_UUID: ClassVar["OrgGroupPolicyOverrideSortOption"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupPolicyOverrideSortOption.ID = OrgGroupPolicyOverrideSortOption("id") +OrgGroupPolicyOverrideSortOption.MINUS_ID = OrgGroupPolicyOverrideSortOption("-id") +OrgGroupPolicyOverrideSortOption.ORG_UUID = OrgGroupPolicyOverrideSortOption("org_uuid") +OrgGroupPolicyOverrideSortOption.MINUS_ORG_UUID = OrgGroupPolicyOverrideSortOption("-org_uuid") diff --git a/datadog_api_client/v2/model/org_group_policy_override_type.py b/datadog_api_client/v2/model/org_group_policy_override_type.py new file mode 100644 index 0000000000..d1d382c235 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupPolicyOverrideType(ModelSimple): + """ + Org group policy overrides resource type. + + :param value: If omitted defaults to "org_group_policy_overrides". Must be one of ["org_group_policy_overrides"]. + :type value: str + """ + + allowed_values = { + "org_group_policy_overrides", + } + ORG_GROUP_POLICY_OVERRIDES: ClassVar["OrgGroupPolicyOverrideType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupPolicyOverrideType.ORG_GROUP_POLICY_OVERRIDES = OrgGroupPolicyOverrideType("org_group_policy_overrides") diff --git a/datadog_api_client/v2/model/org_group_policy_override_update_attributes.py b/datadog_api_client/v2/model/org_group_policy_override_update_attributes.py new file mode 100644 index 0000000000..c59b35a1c0 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_update_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupPolicyOverrideUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "org_site": (str,), + "org_uuid": (UUID,), + } + attribute_map = { + "org_site": "org_site", + "org_uuid": "org_uuid", + } + + def __init__(self_, org_site: str, org_uuid: UUID, **kwargs): + """ + Attributes for updating a policy override. The ``org_uuid`` and ``org_site`` fields must match the existing override and cannot be changed. + + :param org_site: The site of the organization. + :type org_site: str + + :param org_uuid: The UUID of the organization. + :type org_uuid: UUID + """ + super().__init__(kwargs) + + + self_.org_site = org_site + self_.org_uuid = org_uuid diff --git a/datadog_api_client/v2/model/org_group_policy_override_update_data.py b/datadog_api_client/v2/model/org_group_policy_override_update_data.py new file mode 100644 index 0000000000..57e29d55f8 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_override_update_attributes import OrgGroupPolicyOverrideUpdateAttributes + from datadog_api_client.v2.model.org_group_policy_override_type import OrgGroupPolicyOverrideType + +class OrgGroupPolicyOverrideUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_override_update_attributes import OrgGroupPolicyOverrideUpdateAttributes + from datadog_api_client.v2.model.org_group_policy_override_type import OrgGroupPolicyOverrideType + return { + "attributes": (OrgGroupPolicyOverrideUpdateAttributes,), + "id": (UUID,), + "type": (OrgGroupPolicyOverrideType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupPolicyOverrideUpdateAttributes, id: UUID, type: OrgGroupPolicyOverrideType, **kwargs): + """ + Data for updating a policy override. + + :param attributes: Attributes for updating a policy override. The ``org_uuid`` and ``org_site`` fields must match the existing override and cannot be changed. + :type attributes: OrgGroupPolicyOverrideUpdateAttributes + + :param id: The ID of the policy override. + :type id: UUID + + :param type: Org group policy overrides resource type. + :type type: OrgGroupPolicyOverrideType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_policy_override_update_request.py b/datadog_api_client/v2/model/org_group_policy_override_update_request.py new file mode 100644 index 0000000000..c5777e8280 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_override_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_override_update_data import OrgGroupPolicyOverrideUpdateData + +class OrgGroupPolicyOverrideUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_override_update_data import OrgGroupPolicyOverrideUpdateData + return { + "data": (OrgGroupPolicyOverrideUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupPolicyOverrideUpdateData, **kwargs): + """ + Request to update an org group policy override. + + :param data: Data for updating a policy override. + :type data: OrgGroupPolicyOverrideUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_policy_type.py b/datadog_api_client/v2/model/org_group_policy_policy_type.py new file mode 100644 index 0000000000..0dd1e63aa7 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_policy_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupPolicyPolicyType(ModelSimple): + """ + The type of the policy. Only `org_config` is supported, indicating a policy backed by an organization configuration setting. + + :param value: If omitted defaults to "org_config". Must be one of ["org_config"]. + :type value: str + """ + + allowed_values = { + "org_config", + } + ORG_CONFIG: ClassVar["OrgGroupPolicyPolicyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupPolicyPolicyType.ORG_CONFIG = OrgGroupPolicyPolicyType("org_config") diff --git a/datadog_api_client/v2/model/org_group_policy_relationship_to_one.py b/datadog_api_client/v2/model/org_group_policy_relationship_to_one.py new file mode 100644 index 0000000000..5303b5f333 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_relationship_to_one.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_relationship_to_one_data import OrgGroupPolicyRelationshipToOneData + +class OrgGroupPolicyRelationshipToOne(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_relationship_to_one_data import OrgGroupPolicyRelationshipToOneData + return { + "data": (OrgGroupPolicyRelationshipToOneData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupPolicyRelationshipToOneData, **kwargs): + """ + Relationship to a single org group policy. + + :param data: A reference to an org group policy. + :type data: OrgGroupPolicyRelationshipToOneData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_relationship_to_one_data.py b/datadog_api_client/v2/model/org_group_policy_relationship_to_one_data.py new file mode 100644 index 0000000000..d87679b269 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_relationship_to_one_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_type import OrgGroupPolicyType + +class OrgGroupPolicyRelationshipToOneData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_type import OrgGroupPolicyType + return { + "id": (UUID,), + "type": (OrgGroupPolicyType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: OrgGroupPolicyType, **kwargs): + """ + A reference to an org group policy. + + :param id: The ID of the policy. + :type id: UUID + + :param type: Org group policies resource type. + :type type: OrgGroupPolicyType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_policy_relationships.py b/datadog_api_client/v2/model/org_group_policy_relationships.py new file mode 100644 index 0000000000..3a2ab960d4 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + +class OrgGroupPolicyRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + return { + "org_group": (OrgGroupRelationshipToOne,), + } + attribute_map = { + "org_group": "org_group", + } + + def __init__(self_, org_group: Union[OrgGroupRelationshipToOne, UnsetType]=unset, **kwargs): + """ + Relationships of an org group policy. + + :param org_group: Relationship to a single org group. + :type org_group: OrgGroupRelationshipToOne, optional + """ + if org_group is not unset: + kwargs["org_group"] = org_group + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_group_policy_response.py b/datadog_api_client/v2/model/org_group_policy_response.py new file mode 100644 index 0000000000..6f9ed751e1 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_data import OrgGroupPolicyData + +class OrgGroupPolicyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_data import OrgGroupPolicyData + return { + "data": (OrgGroupPolicyData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupPolicyData, **kwargs): + """ + Response containing a single org group policy. + + :param data: An org group policy resource. + :type data: OrgGroupPolicyData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_sort_option.py b/datadog_api_client/v2/model/org_group_policy_sort_option.py new file mode 100644 index 0000000000..e1266da899 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_sort_option.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupPolicySortOption(ModelSimple): + """ + Field to sort policies by. + + :param value: If omitted defaults to "id". Must be one of ["id", "-id", "name", "-name"]. + :type value: str + """ + + allowed_values = { + "id", + "-id", + "name", + "-name", + } + ID: ClassVar["OrgGroupPolicySortOption"] + MINUS_ID: ClassVar["OrgGroupPolicySortOption"] + NAME: ClassVar["OrgGroupPolicySortOption"] + MINUS_NAME: ClassVar["OrgGroupPolicySortOption"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupPolicySortOption.ID = OrgGroupPolicySortOption("id") +OrgGroupPolicySortOption.MINUS_ID = OrgGroupPolicySortOption("-id") +OrgGroupPolicySortOption.NAME = OrgGroupPolicySortOption("name") +OrgGroupPolicySortOption.MINUS_NAME = OrgGroupPolicySortOption("-name") diff --git a/datadog_api_client/v2/model/org_group_policy_suggestion_attributes.py b/datadog_api_client/v2/model/org_group_policy_suggestion_attributes.py new file mode 100644 index 0000000000..2da6805185 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_suggestion_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_suggestion_status import OrgGroupPolicySuggestionStatus + +class OrgGroupPolicySuggestionAttributes(ModelNormal): + validations = { + "consensus_ratio": { + "inclusive_maximum": 1, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_suggestion_status import OrgGroupPolicySuggestionStatus + return { + "consensus_ratio": (float,), + "policy_name": (str,), + "recommended_value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "status": (OrgGroupPolicySuggestionStatus,), + } + attribute_map = { + "consensus_ratio": "consensus_ratio", + "policy_name": "policy_name", + "recommended_value": "recommended_value", + "status": "status", + } + + def __init__(self_, consensus_ratio: float, policy_name: str, recommended_value: Any, status: OrgGroupPolicySuggestionStatus, **kwargs): + """ + Attributes of an org group policy suggestion. + + :param consensus_ratio: The ratio of member orgs whose configuration agrees on the recommended value. + :type consensus_ratio: float + + :param policy_name: The name of the suggested policy. + :type policy_name: str + + :param recommended_value: The recommended value for the policy, based on member org consensus. + :type recommended_value: bool, date, datetime, dict, float, int, list, str, UUID, none_type + + :param status: The status of the policy suggestion. + :type status: OrgGroupPolicySuggestionStatus + """ + super().__init__(kwargs) + + + self_.consensus_ratio = consensus_ratio + self_.policy_name = policy_name + self_.recommended_value = recommended_value + self_.status = status diff --git a/datadog_api_client/v2/model/org_group_policy_suggestion_data.py b/datadog_api_client/v2/model/org_group_policy_suggestion_data.py new file mode 100644 index 0000000000..c5e2ff285a --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_suggestion_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_suggestion_attributes import OrgGroupPolicySuggestionAttributes + from datadog_api_client.v2.model.org_group_policy_suggestion_relationships import OrgGroupPolicySuggestionRelationships + from datadog_api_client.v2.model.org_group_policy_suggestion_type import OrgGroupPolicySuggestionType + +class OrgGroupPolicySuggestionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_suggestion_attributes import OrgGroupPolicySuggestionAttributes + from datadog_api_client.v2.model.org_group_policy_suggestion_relationships import OrgGroupPolicySuggestionRelationships + from datadog_api_client.v2.model.org_group_policy_suggestion_type import OrgGroupPolicySuggestionType + return { + "attributes": (OrgGroupPolicySuggestionAttributes,), + "id": (str,), + "relationships": (OrgGroupPolicySuggestionRelationships,), + "type": (OrgGroupPolicySuggestionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupPolicySuggestionAttributes, id: str, type: OrgGroupPolicySuggestionType, relationships: Union[OrgGroupPolicySuggestionRelationships, UnsetType]=unset, **kwargs): + """ + An org group policy suggestion resource. + + :param attributes: Attributes of an org group policy suggestion. + :type attributes: OrgGroupPolicySuggestionAttributes + + :param id: The ID of the org group policy suggestion. + :type id: str + + :param relationships: Relationships of an org group policy suggestion. + :type relationships: OrgGroupPolicySuggestionRelationships, optional + + :param type: Org group policy suggestions resource type. + :type type: OrgGroupPolicySuggestionType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_policy_suggestion_list_response.py b/datadog_api_client/v2/model/org_group_policy_suggestion_list_response.py new file mode 100644 index 0000000000..9e6ad69c1e --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_suggestion_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_suggestion_data import OrgGroupPolicySuggestionData + +class OrgGroupPolicySuggestionListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_suggestion_data import OrgGroupPolicySuggestionData + return { + "data": ([OrgGroupPolicySuggestionData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[OrgGroupPolicySuggestionData], **kwargs): + """ + Response containing a list of org group policy suggestions. + + :param data: An array of org group policy suggestions. + :type data: [OrgGroupPolicySuggestionData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_policy_suggestion_relationships.py b/datadog_api_client/v2/model/org_group_policy_suggestion_relationships.py new file mode 100644 index 0000000000..1c0dbe415f --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_suggestion_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + +class OrgGroupPolicySuggestionRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne + return { + "org_group": (OrgGroupRelationshipToOne,), + } + attribute_map = { + "org_group": "org_group", + } + + def __init__(self_, org_group: Union[OrgGroupRelationshipToOne, UnsetType]=unset, **kwargs): + """ + Relationships of an org group policy suggestion. + + :param org_group: Relationship to a single org group. + :type org_group: OrgGroupRelationshipToOne, optional + """ + if org_group is not unset: + kwargs["org_group"] = org_group + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_group_policy_suggestion_status.py b/datadog_api_client/v2/model/org_group_policy_suggestion_status.py new file mode 100644 index 0000000000..93239ac8ac --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_suggestion_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupPolicySuggestionStatus(ModelSimple): + """ + The status of the policy suggestion. + + :param value: Must be one of ["pending", "accepted", "dismissed"]. + :type value: str + """ + + allowed_values = { + "pending", + "accepted", + "dismissed", + } + PENDING: ClassVar["OrgGroupPolicySuggestionStatus"] + ACCEPTED: ClassVar["OrgGroupPolicySuggestionStatus"] + DISMISSED: ClassVar["OrgGroupPolicySuggestionStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupPolicySuggestionStatus.PENDING = OrgGroupPolicySuggestionStatus("pending") +OrgGroupPolicySuggestionStatus.ACCEPTED = OrgGroupPolicySuggestionStatus("accepted") +OrgGroupPolicySuggestionStatus.DISMISSED = OrgGroupPolicySuggestionStatus("dismissed") diff --git a/datadog_api_client/v2/model/org_group_policy_suggestion_type.py b/datadog_api_client/v2/model/org_group_policy_suggestion_type.py new file mode 100644 index 0000000000..7732ed9a27 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_suggestion_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupPolicySuggestionType(ModelSimple): + """ + Org group policy suggestions resource type. + + :param value: If omitted defaults to "org_group_policy_suggestions". Must be one of ["org_group_policy_suggestions"]. + :type value: str + """ + + allowed_values = { + "org_group_policy_suggestions", + } + ORG_GROUP_POLICY_SUGGESTIONS: ClassVar["OrgGroupPolicySuggestionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupPolicySuggestionType.ORG_GROUP_POLICY_SUGGESTIONS = OrgGroupPolicySuggestionType("org_group_policy_suggestions") diff --git a/datadog_api_client/v2/model/org_group_policy_type.py b/datadog_api_client/v2/model/org_group_policy_type.py new file mode 100644 index 0000000000..3ab3d8c5c2 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupPolicyType(ModelSimple): + """ + Org group policies resource type. + + :param value: If omitted defaults to "org_group_policies". Must be one of ["org_group_policies"]. + :type value: str + """ + + allowed_values = { + "org_group_policies", + } + ORG_GROUP_POLICIES: ClassVar["OrgGroupPolicyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupPolicyType.ORG_GROUP_POLICIES = OrgGroupPolicyType("org_group_policies") diff --git a/datadog_api_client/v2/model/org_group_policy_update_attributes.py b/datadog_api_client/v2/model/org_group_policy_update_attributes.py new file mode 100644 index 0000000000..1da05b214d --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_enforcement_tier import OrgGroupPolicyEnforcementTier + +class OrgGroupPolicyUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_enforcement_tier import OrgGroupPolicyEnforcementTier + return { + "content": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "enforcement_tier": (OrgGroupPolicyEnforcementTier,), + } + attribute_map = { + "content": "content", + "enforcement_tier": "enforcement_tier", + } + + def __init__(self_, content: Union[Dict[str, Any], UnsetType]=unset, enforcement_tier: Union[OrgGroupPolicyEnforcementTier, UnsetType]=unset, **kwargs): + """ + Attributes for updating an org group policy. + + :param content: The policy content as key-value pairs. + :type content: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param enforcement_tier: The enforcement tier of the policy. ``OVERRIDE_ALLOWED`` means the policy is set but member orgs may mutate it. ``GROUP_MANAGED`` means the policy is strictly controlled and mutations are blocked for affected orgs. ``DELEGATE`` means each member org controls its own value. + :type enforcement_tier: OrgGroupPolicyEnforcementTier, optional + """ + if content is not unset: + kwargs["content"] = content + if enforcement_tier is not unset: + kwargs["enforcement_tier"] = enforcement_tier + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/org_group_policy_update_data.py b/datadog_api_client/v2/model/org_group_policy_update_data.py new file mode 100644 index 0000000000..28f1d634eb --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_update_attributes import OrgGroupPolicyUpdateAttributes + from datadog_api_client.v2.model.org_group_policy_type import OrgGroupPolicyType + +class OrgGroupPolicyUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_update_attributes import OrgGroupPolicyUpdateAttributes + from datadog_api_client.v2.model.org_group_policy_type import OrgGroupPolicyType + return { + "attributes": (OrgGroupPolicyUpdateAttributes,), + "id": (UUID,), + "type": (OrgGroupPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupPolicyUpdateAttributes, id: UUID, type: OrgGroupPolicyType, **kwargs): + """ + Data for updating an org group policy. + + :param attributes: Attributes for updating an org group policy. + :type attributes: OrgGroupPolicyUpdateAttributes + + :param id: The ID of the policy. + :type id: UUID + + :param type: Org group policies resource type. + :type type: OrgGroupPolicyType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_policy_update_request.py b/datadog_api_client/v2/model/org_group_policy_update_request.py new file mode 100644 index 0000000000..6d2c1850ee --- /dev/null +++ b/datadog_api_client/v2/model/org_group_policy_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_policy_update_data import OrgGroupPolicyUpdateData + +class OrgGroupPolicyUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_policy_update_data import OrgGroupPolicyUpdateData + return { + "data": (OrgGroupPolicyUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupPolicyUpdateData, **kwargs): + """ + Request to update an org group policy. + + :param data: Data for updating an org group policy. + :type data: OrgGroupPolicyUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_relationship_to_one.py b/datadog_api_client/v2/model/org_group_relationship_to_one.py new file mode 100644 index 0000000000..ee84dc319f --- /dev/null +++ b/datadog_api_client/v2/model/org_group_relationship_to_one.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_relationship_to_one_data import OrgGroupRelationshipToOneData + +class OrgGroupRelationshipToOne(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_relationship_to_one_data import OrgGroupRelationshipToOneData + return { + "data": (OrgGroupRelationshipToOneData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupRelationshipToOneData, **kwargs): + """ + Relationship to a single org group. + + :param data: A reference to an org group. + :type data: OrgGroupRelationshipToOneData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_relationship_to_one_data.py b/datadog_api_client/v2/model/org_group_relationship_to_one_data.py new file mode 100644 index 0000000000..6727ca2b8d --- /dev/null +++ b/datadog_api_client/v2/model/org_group_relationship_to_one_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_type import OrgGroupType + +class OrgGroupRelationshipToOneData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_type import OrgGroupType + return { + "id": (UUID,), + "type": (OrgGroupType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: OrgGroupType, **kwargs): + """ + A reference to an org group. + + :param id: The ID of the org group. + :type id: UUID + + :param type: Org groups resource type. + :type type: OrgGroupType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_response.py b/datadog_api_client/v2/model/org_group_response.py new file mode 100644 index 0000000000..3dbd2b8878 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_data import OrgGroupData + +class OrgGroupResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_data import OrgGroupData + return { + "data": (OrgGroupData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupData, **kwargs): + """ + Response containing a single org group. + + :param data: An org group resource. + :type data: OrgGroupData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_group_sort_option.py b/datadog_api_client/v2/model/org_group_sort_option.py new file mode 100644 index 0000000000..1ca5dc0bf0 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_sort_option.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupSortOption(ModelSimple): + """ + Field to sort org groups by. + + :param value: If omitted defaults to "uuid". Must be one of ["name", "-name", "uuid", "-uuid"]. + :type value: str + """ + + allowed_values = { + "name", + "-name", + "uuid", + "-uuid", + } + NAME: ClassVar["OrgGroupSortOption"] + MINUS_NAME: ClassVar["OrgGroupSortOption"] + UUID: ClassVar["OrgGroupSortOption"] + MINUS_UUID: ClassVar["OrgGroupSortOption"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupSortOption.NAME = OrgGroupSortOption("name") +OrgGroupSortOption.MINUS_NAME = OrgGroupSortOption("-name") +OrgGroupSortOption.UUID = OrgGroupSortOption("uuid") +OrgGroupSortOption.MINUS_UUID = OrgGroupSortOption("-uuid") diff --git a/datadog_api_client/v2/model/org_group_type.py b/datadog_api_client/v2/model/org_group_type.py new file mode 100644 index 0000000000..8f1dc529d7 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgGroupType(ModelSimple): + """ + Org groups resource type. + + :param value: If omitted defaults to "org_groups". Must be one of ["org_groups"]. + :type value: str + """ + + allowed_values = { + "org_groups", + } + ORG_GROUPS: ClassVar["OrgGroupType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgGroupType.ORG_GROUPS = OrgGroupType("org_groups") diff --git a/datadog_api_client/v2/model/org_group_update_attributes.py b/datadog_api_client/v2/model/org_group_update_attributes.py new file mode 100644 index 0000000000..2bfa25e58b --- /dev/null +++ b/datadog_api_client/v2/model/org_group_update_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgGroupUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: str, **kwargs): + """ + Attributes for updating an org group. + + :param name: The name of the org group. + :type name: str + """ + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/org_group_update_data.py b/datadog_api_client/v2/model/org_group_update_data.py new file mode 100644 index 0000000000..038fe786a8 --- /dev/null +++ b/datadog_api_client/v2/model/org_group_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_update_attributes import OrgGroupUpdateAttributes + from datadog_api_client.v2.model.org_group_type import OrgGroupType + +class OrgGroupUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_update_attributes import OrgGroupUpdateAttributes + from datadog_api_client.v2.model.org_group_type import OrgGroupType + return { + "attributes": (OrgGroupUpdateAttributes,), + "id": (UUID,), + "type": (OrgGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OrgGroupUpdateAttributes, id: UUID, type: OrgGroupType, **kwargs): + """ + Data for updating an org group. + + :param attributes: Attributes for updating an org group. + :type attributes: OrgGroupUpdateAttributes + + :param id: The ID of the org group. + :type id: UUID + + :param type: Org groups resource type. + :type type: OrgGroupType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_group_update_request.py b/datadog_api_client/v2/model/org_group_update_request.py new file mode 100644 index 0000000000..a587b3105e --- /dev/null +++ b/datadog_api_client/v2/model/org_group_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_group_update_data import OrgGroupUpdateData + +class OrgGroupUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_group_update_data import OrgGroupUpdateData + return { + "data": (OrgGroupUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgGroupUpdateData, **kwargs): + """ + Request to update an org group. + + :param data: Data for updating an org group. + :type data: OrgGroupUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/org_relationship_data.py b/datadog_api_client/v2/model/org_relationship_data.py new file mode 100644 index 0000000000..8bb292551f --- /dev/null +++ b/datadog_api_client/v2/model/org_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_resource_type import OrgResourceType + +class OrgRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_resource_type import OrgResourceType + return { + "id": (UUID,), + "type": (OrgResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: OrgResourceType, **kwargs): + """ + Reference to an organization resource. + + :param id: The UUID of the organization. + :type id: UUID + + :param type: The resource type for organizations. + :type type: OrgResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/org_resource_type.py b/datadog_api_client/v2/model/org_resource_type.py new file mode 100644 index 0000000000..f1db59c694 --- /dev/null +++ b/datadog_api_client/v2/model/org_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgResourceType(ModelSimple): + """ + The resource type for organizations. + + :param value: If omitted defaults to "orgs". Must be one of ["orgs"]. + :type value: str + """ + + allowed_values = { + "orgs", + } + ORGS: ClassVar["OrgResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgResourceType.ORGS = OrgResourceType("orgs") diff --git a/datadog_api_client/v2/model/org_saml_preferences_attributes.py b/datadog_api_client/v2/model/org_saml_preferences_attributes.py new file mode 100644 index 0000000000..95cd9dcafb --- /dev/null +++ b/datadog_api_client/v2/model/org_saml_preferences_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrgSAMLPreferencesAttributes(ModelNormal): + validations = { + "default_role_uuids": { + "max_items": 1, + "min_items": 1, + }, + "jit_domains": { + "max_items": 50, + }, + } + @cached_property + def openapi_types(_): + return { + "default_role_uuids": ([UUID],), + "jit_domains": ([str],), + } + attribute_map = { + "default_role_uuids": "default_role_uuids", + "jit_domains": "jit_domains", + } + + def __init__(self_, default_role_uuids: List[UUID], jit_domains: List[str], **kwargs): + """ + Attributes for updating an organization's SAML preferences. + + :param default_role_uuids: The UUID of the default role assigned to just-in-time provisioned users. + Exactly one role UUID must be provided. + :type default_role_uuids: [UUID] + + :param jit_domains: Email domains for which users are automatically provisioned on first SAML login + (just-in-time provisioning). + :type jit_domains: [str] + """ + super().__init__(kwargs) + + + self_.default_role_uuids = default_role_uuids + self_.jit_domains = jit_domains diff --git a/datadog_api_client/v2/model/org_saml_preferences_data.py b/datadog_api_client/v2/model/org_saml_preferences_data.py new file mode 100644 index 0000000000..744d3870b3 --- /dev/null +++ b/datadog_api_client/v2/model/org_saml_preferences_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_saml_preferences_attributes import OrgSAMLPreferencesAttributes + from datadog_api_client.v2.model.org_saml_preferences_type import OrgSAMLPreferencesType + +class OrgSAMLPreferencesData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_saml_preferences_attributes import OrgSAMLPreferencesAttributes + from datadog_api_client.v2.model.org_saml_preferences_type import OrgSAMLPreferencesType + return { + "attributes": (OrgSAMLPreferencesAttributes,), + "id": (str,), + "type": (OrgSAMLPreferencesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OrgSAMLPreferencesAttributes, type: OrgSAMLPreferencesType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data for updating an organization's SAML preferences. + + :param attributes: Attributes for updating an organization's SAML preferences. + :type attributes: OrgSAMLPreferencesAttributes + + :param id: The identifier of the SAML preferences resource. + :type id: str, optional + + :param type: SAML preferences resource type. + :type type: OrgSAMLPreferencesType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/org_saml_preferences_type.py b/datadog_api_client/v2/model/org_saml_preferences_type.py new file mode 100644 index 0000000000..a2259498bc --- /dev/null +++ b/datadog_api_client/v2/model/org_saml_preferences_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrgSAMLPreferencesType(ModelSimple): + """ + SAML preferences resource type. + + :param value: If omitted defaults to "saml_preferences". Must be one of ["saml_preferences"]. + :type value: str + """ + + allowed_values = { + "saml_preferences", + } + SAML_PREFERENCES: ClassVar["OrgSAMLPreferencesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrgSAMLPreferencesType.SAML_PREFERENCES = OrgSAMLPreferencesType("saml_preferences") diff --git a/datadog_api_client/v2/model/org_saml_preferences_update_request.py b/datadog_api_client/v2/model/org_saml_preferences_update_request.py new file mode 100644 index 0000000000..825279c0ae --- /dev/null +++ b/datadog_api_client/v2/model/org_saml_preferences_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.org_saml_preferences_data import OrgSAMLPreferencesData + +class OrgSAMLPreferencesUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.org_saml_preferences_data import OrgSAMLPreferencesData + return { + "data": (OrgSAMLPreferencesData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OrgSAMLPreferencesData, **kwargs): + """ + Request to update an organization's SAML preferences. + + :param data: Data for updating an organization's SAML preferences. + :type data: OrgSAMLPreferencesData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/organization.py b/datadog_api_client/v2/model/organization.py new file mode 100644 index 0000000000..6efe04acdd --- /dev/null +++ b/datadog_api_client/v2/model/organization.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.organization_attributes import OrganizationAttributes + from datadog_api_client.v2.model.organizations_type import OrganizationsType + +class Organization(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.organization_attributes import OrganizationAttributes + from datadog_api_client.v2.model.organizations_type import OrganizationsType + return { + "attributes": (OrganizationAttributes,), + "id": (str,), + "type": (OrganizationsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: OrganizationsType, attributes: Union[OrganizationAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Organization object. + + :param attributes: Attributes of the organization. + :type attributes: OrganizationAttributes, optional + + :param id: ID of the organization. + :type id: str, optional + + :param type: Organizations resource type. + :type type: OrganizationsType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/organization_attributes.py b/datadog_api_client/v2/model/organization_attributes.py new file mode 100644 index 0000000000..74215cac3c --- /dev/null +++ b/datadog_api_client/v2/model/organization_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OrganizationAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "description": (str,), + "disabled": (bool,), + "modified_at": (datetime,), + "name": (str,), + "public_id": (str,), + "sharing": (str,), + "url": (str,), + } + attribute_map = { + "created_at": "created_at", + "description": "description", + "disabled": "disabled", + "modified_at": "modified_at", + "name": "name", + "public_id": "public_id", + "sharing": "sharing", + "url": "url", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, description: Union[str, UnsetType]=unset, disabled: Union[bool, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, sharing: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the organization. + + :param created_at: Creation time of the organization. + :type created_at: datetime, optional + + :param description: Description of the organization. + :type description: str, optional + + :param disabled: Whether or not the organization is disabled. + :type disabled: bool, optional + + :param modified_at: Time of last organization modification. + :type modified_at: datetime, optional + + :param name: Name of the organization. + :type name: str, optional + + :param public_id: Public ID of the organization. + :type public_id: str, optional + + :param sharing: Sharing type of the organization. + :type sharing: str, optional + + :param url: URL of the site that this organization exists at. + :type url: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if disabled is not unset: + kwargs["disabled"] = disabled + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if public_id is not unset: + kwargs["public_id"] = public_id + if sharing is not unset: + kwargs["sharing"] = sharing + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/organizations_type.py b/datadog_api_client/v2/model/organizations_type.py new file mode 100644 index 0000000000..288c00d5b9 --- /dev/null +++ b/datadog_api_client/v2/model/organizations_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OrganizationsType(ModelSimple): + """ + Organizations resource type. + + :param value: If omitted defaults to "orgs". Must be one of ["orgs"]. + :type value: str + """ + + allowed_values = { + "orgs", + } + ORGS: ClassVar["OrganizationsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OrganizationsType.ORGS = OrganizationsType("orgs") diff --git a/datadog_api_client/v2/model/outbound_edge.py b/datadog_api_client/v2/model/outbound_edge.py new file mode 100644 index 0000000000..42bffb827d --- /dev/null +++ b/datadog_api_client/v2/model/outbound_edge.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OutboundEdge(ModelNormal): + validations = { + "branch_name": { + "min_length": 1, + }, + "next_step_name": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "branch_name": (str,), + "next_step_name": (str,), + } + attribute_map = { + "branch_name": "branchName", + "next_step_name": "nextStepName", + } + + def __init__(self_, branch_name: str, next_step_name: str, **kwargs): + """ + The definition of ``OutboundEdge`` object. + + :param branch_name: The ``OutboundEdge`` ``branchName``. + :type branch_name: str + + :param next_step_name: The ``OutboundEdge`` ``nextStepName``. + :type next_step_name: str + """ + super().__init__(kwargs) + + + self_.branch_name = branch_name + self_.next_step_name = next_step_name diff --git a/datadog_api_client/v2/model/outcome_type.py b/datadog_api_client/v2/model/outcome_type.py new file mode 100644 index 0000000000..db3112a6a1 --- /dev/null +++ b/datadog_api_client/v2/model/outcome_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OutcomeType(ModelSimple): + """ + The JSON:API type for an outcome. + + :param value: If omitted defaults to "outcome". Must be one of ["outcome"]. + :type value: str + """ + + allowed_values = { + "outcome", + } + OUTCOME: ClassVar["OutcomeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OutcomeType.OUTCOME = OutcomeType("outcome") diff --git a/datadog_api_client/v2/model/outcomes_batch_attributes.py b/datadog_api_client/v2/model/outcomes_batch_attributes.py new file mode 100644 index 0000000000..a1a930be3c --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_batch_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.outcomes_batch_request_item import OutcomesBatchRequestItem + +class OutcomesBatchAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.outcomes_batch_request_item import OutcomesBatchRequestItem + return { + "results": ([OutcomesBatchRequestItem],), + } + attribute_map = { + "results": "results", + } + + def __init__(self_, results: Union[List[OutcomesBatchRequestItem], UnsetType]=unset, **kwargs): + """ + The JSON:API attributes for a batched set of scorecard outcomes. + + :param results: Set of scorecard outcomes to update. + :type results: [OutcomesBatchRequestItem], optional + """ + if results is not unset: + kwargs["results"] = results + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/outcomes_batch_request.py b/datadog_api_client/v2/model/outcomes_batch_request.py new file mode 100644 index 0000000000..5da2152be0 --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_batch_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.outcomes_batch_request_data import OutcomesBatchRequestData + +class OutcomesBatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.outcomes_batch_request_data import OutcomesBatchRequestData + return { + "data": (OutcomesBatchRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[OutcomesBatchRequestData, UnsetType]=unset, **kwargs): + """ + Scorecard outcomes batch request. + + :param data: Scorecard outcomes batch request data. + :type data: OutcomesBatchRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/outcomes_batch_request_data.py b/datadog_api_client/v2/model/outcomes_batch_request_data.py new file mode 100644 index 0000000000..4c58d7f758 --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_batch_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.outcomes_batch_attributes import OutcomesBatchAttributes + from datadog_api_client.v2.model.outcomes_batch_type import OutcomesBatchType + +class OutcomesBatchRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.outcomes_batch_attributes import OutcomesBatchAttributes + from datadog_api_client.v2.model.outcomes_batch_type import OutcomesBatchType + return { + "attributes": (OutcomesBatchAttributes,), + "type": (OutcomesBatchType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[OutcomesBatchAttributes, UnsetType]=unset, type: Union[OutcomesBatchType, UnsetType]=unset, **kwargs): + """ + Scorecard outcomes batch request data. + + :param attributes: The JSON:API attributes for a batched set of scorecard outcomes. + :type attributes: OutcomesBatchAttributes, optional + + :param type: The JSON:API type for scorecard outcomes. + :type type: OutcomesBatchType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/outcomes_batch_request_item.py b/datadog_api_client/v2/model/outcomes_batch_request_item.py new file mode 100644 index 0000000000..a5e66c814e --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_batch_request_item.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.state import State + +class OutcomesBatchRequestItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.state import State + return { + "remarks": (str,), + "rule_id": (str,), + "service_name": (str,), + "state": (State,), + } + attribute_map = { + "remarks": "remarks", + "rule_id": "rule_id", + "service_name": "service_name", + "state": "state", + } + + def __init__(self_, rule_id: str, service_name: str, state: State, remarks: Union[str, UnsetType]=unset, **kwargs): + """ + Scorecard outcome for a specific rule, for a given service within a batched update. + + :param remarks: Any remarks regarding the scorecard rule's evaluation, and supports HTML hyperlinks. + :type remarks: str, optional + + :param rule_id: The unique ID for a scorecard rule. + :type rule_id: str + + :param service_name: The unique name for a service in the catalog. + :type service_name: str + + :param state: The state of the rule evaluation. + :type state: State + """ + if remarks is not unset: + kwargs["remarks"] = remarks + super().__init__(kwargs) + + + self_.rule_id = rule_id + self_.service_name = service_name + self_.state = state diff --git a/datadog_api_client/v2/model/outcomes_batch_response.py b/datadog_api_client/v2/model/outcomes_batch_response.py new file mode 100644 index 0000000000..d7f0ee5d51 --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_batch_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.outcomes_response_data_item import OutcomesResponseDataItem + from datadog_api_client.v2.model.outcomes_batch_response_meta import OutcomesBatchResponseMeta + +class OutcomesBatchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.outcomes_response_data_item import OutcomesResponseDataItem + from datadog_api_client.v2.model.outcomes_batch_response_meta import OutcomesBatchResponseMeta + return { + "data": ([OutcomesResponseDataItem],), + "meta": (OutcomesBatchResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[OutcomesResponseDataItem], meta: OutcomesBatchResponseMeta, **kwargs): + """ + Scorecard outcomes batch response. + + :param data: List of rule outcomes which were affected during the bulk operation. + :type data: [OutcomesResponseDataItem] + + :param meta: Metadata pertaining to the bulk operation. + :type meta: OutcomesBatchResponseMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/outcomes_batch_response_attributes.py b/datadog_api_client/v2/model/outcomes_batch_response_attributes.py new file mode 100644 index 0000000000..7eae4a9186 --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_batch_response_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.state import State + +class OutcomesBatchResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.state import State + return { + "created_at": (datetime,), + "modified_at": (datetime,), + "remarks": (str,), + "service_name": (str,), + "state": (State,), + } + attribute_map = { + "created_at": "created_at", + "modified_at": "modified_at", + "remarks": "remarks", + "service_name": "service_name", + "state": "state", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, remarks: Union[str, UnsetType]=unset, service_name: Union[str, UnsetType]=unset, state: Union[State, UnsetType]=unset, **kwargs): + """ + The JSON:API attributes for an outcome. + + :param created_at: Creation time of the rule outcome. + :type created_at: datetime, optional + + :param modified_at: Time of last rule outcome modification. + :type modified_at: datetime, optional + + :param remarks: Any remarks regarding the scorecard rule's evaluation, and supports HTML hyperlinks. + :type remarks: str, optional + + :param service_name: The unique name for a service in the catalog. + :type service_name: str, optional + + :param state: The state of the rule evaluation. + :type state: State, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if remarks is not unset: + kwargs["remarks"] = remarks + if service_name is not unset: + kwargs["service_name"] = service_name + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/outcomes_batch_response_meta.py b/datadog_api_client/v2/model/outcomes_batch_response_meta.py new file mode 100644 index 0000000000..e7b99340a3 --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_batch_response_meta.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OutcomesBatchResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_received": (int,), + "total_updated": (int,), + } + attribute_map = { + "total_received": "total_received", + "total_updated": "total_updated", + } + + def __init__(self_, total_received: Union[int, UnsetType]=unset, total_updated: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata pertaining to the bulk operation. + + :param total_received: Total number of scorecard results received during the bulk operation. + :type total_received: int, optional + + :param total_updated: Total number of scorecard results modified during the bulk operation. + :type total_updated: int, optional + """ + if total_received is not unset: + kwargs["total_received"] = total_received + if total_updated is not unset: + kwargs["total_updated"] = total_updated + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/outcomes_batch_type.py b/datadog_api_client/v2/model/outcomes_batch_type.py new file mode 100644 index 0000000000..e49ec5161e --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_batch_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OutcomesBatchType(ModelSimple): + """ + The JSON:API type for scorecard outcomes. + + :param value: If omitted defaults to "batched-outcome". Must be one of ["batched-outcome"]. + :type value: str + """ + + allowed_values = { + "batched-outcome", + } + BATCHED_OUTCOME: ClassVar["OutcomesBatchType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OutcomesBatchType.BATCHED_OUTCOME = OutcomesBatchType("batched-outcome") diff --git a/datadog_api_client/v2/model/outcomes_response.py b/datadog_api_client/v2/model/outcomes_response.py new file mode 100644 index 0000000000..0d1dbff2a0 --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.outcomes_response_data_item import OutcomesResponseDataItem + from datadog_api_client.v2.model.outcomes_response_included_item import OutcomesResponseIncludedItem + from datadog_api_client.v2.model.outcomes_response_links import OutcomesResponseLinks + +class OutcomesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.outcomes_response_data_item import OutcomesResponseDataItem + from datadog_api_client.v2.model.outcomes_response_included_item import OutcomesResponseIncludedItem + from datadog_api_client.v2.model.outcomes_response_links import OutcomesResponseLinks + return { + "data": ([OutcomesResponseDataItem],), + "included": ([OutcomesResponseIncludedItem],), + "links": (OutcomesResponseLinks,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + } + + def __init__(self_, data: Union[List[OutcomesResponseDataItem], UnsetType]=unset, included: Union[List[OutcomesResponseIncludedItem], UnsetType]=unset, links: Union[OutcomesResponseLinks, UnsetType]=unset, **kwargs): + """ + Scorecard outcomes - the result of a rule for a service. + + :param data: List of rule outcomes. + :type data: [OutcomesResponseDataItem], optional + + :param included: Array of rule details. + :type included: [OutcomesResponseIncludedItem], optional + + :param links: Links attributes. + :type links: OutcomesResponseLinks, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/outcomes_response_data_item.py b/datadog_api_client/v2/model/outcomes_response_data_item.py new file mode 100644 index 0000000000..ce384415ab --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_response_data_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.outcomes_batch_response_attributes import OutcomesBatchResponseAttributes + from datadog_api_client.v2.model.rule_outcome_relationships import RuleOutcomeRelationships + from datadog_api_client.v2.model.outcome_type import OutcomeType + +class OutcomesResponseDataItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.outcomes_batch_response_attributes import OutcomesBatchResponseAttributes + from datadog_api_client.v2.model.rule_outcome_relationships import RuleOutcomeRelationships + from datadog_api_client.v2.model.outcome_type import OutcomeType + return { + "attributes": (OutcomesBatchResponseAttributes,), + "id": (str,), + "relationships": (RuleOutcomeRelationships,), + "type": (OutcomeType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[OutcomesBatchResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[RuleOutcomeRelationships, UnsetType]=unset, type: Union[OutcomeType, UnsetType]=unset, **kwargs): + """ + A single rule outcome. + + :param attributes: The JSON:API attributes for an outcome. + :type attributes: OutcomesBatchResponseAttributes, optional + + :param id: The unique ID for a rule outcome. + :type id: str, optional + + :param relationships: The JSON:API relationship to a scorecard rule. + :type relationships: RuleOutcomeRelationships, optional + + :param type: The JSON:API type for an outcome. + :type type: OutcomeType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/outcomes_response_included_item.py b/datadog_api_client/v2/model/outcomes_response_included_item.py new file mode 100644 index 0000000000..d858623812 --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_response_included_item.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.outcomes_response_included_rule_attributes import OutcomesResponseIncludedRuleAttributes + from datadog_api_client.v2.model.rule_type import RuleType + +class OutcomesResponseIncludedItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.outcomes_response_included_rule_attributes import OutcomesResponseIncludedRuleAttributes + from datadog_api_client.v2.model.rule_type import RuleType + return { + "attributes": (OutcomesResponseIncludedRuleAttributes,), + "id": (str,), + "type": (RuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[OutcomesResponseIncludedRuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[RuleType, UnsetType]=unset, **kwargs): + """ + Attributes of the included rule. + + :param attributes: Details of a rule. + :type attributes: OutcomesResponseIncludedRuleAttributes, optional + + :param id: The unique ID for a scorecard rule. + :type id: str, optional + + :param type: The JSON:API type for scorecard rules. + :type type: RuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/outcomes_response_included_rule_attributes.py b/datadog_api_client/v2/model/outcomes_response_included_rule_attributes.py new file mode 100644 index 0000000000..dc9634065d --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_response_included_rule_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OutcomesResponseIncludedRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "scorecard_name": (str,), + } + attribute_map = { + "name": "name", + "scorecard_name": "scorecard_name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, scorecard_name: Union[str, UnsetType]=unset, **kwargs): + """ + Details of a rule. + + :param name: Name of the rule. + :type name: str, optional + + :param scorecard_name: The scorecard name to which this rule must belong. + :type scorecard_name: str, optional + """ + if name is not unset: + kwargs["name"] = name + if scorecard_name is not unset: + kwargs["scorecard_name"] = scorecard_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/outcomes_response_links.py b/datadog_api_client/v2/model/outcomes_response_links.py new file mode 100644 index 0000000000..752baa058d --- /dev/null +++ b/datadog_api_client/v2/model/outcomes_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OutcomesResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param next: Link for the next set of results. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/output_schema.py b/datadog_api_client/v2/model/output_schema.py new file mode 100644 index 0000000000..690b4a1d46 --- /dev/null +++ b/datadog_api_client/v2/model/output_schema.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.output_schema_parameters import OutputSchemaParameters + +class OutputSchema(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.output_schema_parameters import OutputSchemaParameters + return { + "parameters": ([OutputSchemaParameters],), + } + attribute_map = { + "parameters": "parameters", + } + + def __init__(self_, parameters: Union[List[OutputSchemaParameters], UnsetType]=unset, **kwargs): + """ + A list of output parameters for the workflow. + + :param parameters: The ``OutputSchema`` ``parameters``. + :type parameters: [OutputSchemaParameters], optional + """ + if parameters is not unset: + kwargs["parameters"] = parameters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/output_schema_parameters.py b/datadog_api_client/v2/model/output_schema_parameters.py new file mode 100644 index 0000000000..b75f220acf --- /dev/null +++ b/datadog_api_client/v2/model/output_schema_parameters.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.output_schema_parameters_type import OutputSchemaParametersType + +class OutputSchemaParameters(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.output_schema_parameters_type import OutputSchemaParametersType + return { + "default_value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "description": (str,), + "label": (str,), + "name": (str,), + "type": (OutputSchemaParametersType,), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "default_value": "defaultValue", + "description": "description", + "label": "label", + "name": "name", + "type": "type", + "value": "value", + } + + def __init__(self_, name: str, type: OutputSchemaParametersType, default_value: Union[Any, UnsetType]=unset, description: Union[str, UnsetType]=unset, label: Union[str, UnsetType]=unset, value: Union[Any, UnsetType]=unset, **kwargs): + """ + The definition of ``OutputSchemaParameters`` object. + + :param default_value: The ``OutputSchemaParameters`` ``defaultValue``. + :type default_value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param description: The ``OutputSchemaParameters`` ``description``. + :type description: str, optional + + :param label: The ``OutputSchemaParameters`` ``label``. + :type label: str, optional + + :param name: The ``OutputSchemaParameters`` ``name``. + :type name: str + + :param type: The definition of ``OutputSchemaParametersType`` object. + :type type: OutputSchemaParametersType + + :param value: The ``OutputSchemaParameters`` ``value``. + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + """ + if default_value is not unset: + kwargs["default_value"] = default_value + if description is not unset: + kwargs["description"] = description + if label is not unset: + kwargs["label"] = label + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/output_schema_parameters_type.py b/datadog_api_client/v2/model/output_schema_parameters_type.py new file mode 100644 index 0000000000..bc167150b2 --- /dev/null +++ b/datadog_api_client/v2/model/output_schema_parameters_type.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OutputSchemaParametersType(ModelSimple): + """ + The definition of `OutputSchemaParametersType` object. + + :param value: Must be one of ["STRING", "NUMBER", "BOOLEAN", "OBJECT", "ARRAY_STRING", "ARRAY_NUMBER", "ARRAY_BOOLEAN", "ARRAY_OBJECT"]. + :type value: str + """ + + allowed_values = { + "STRING", + "NUMBER", + "BOOLEAN", + "OBJECT", + "ARRAY_STRING", + "ARRAY_NUMBER", + "ARRAY_BOOLEAN", + "ARRAY_OBJECT", + } + STRING: ClassVar["OutputSchemaParametersType"] + NUMBER: ClassVar["OutputSchemaParametersType"] + BOOLEAN: ClassVar["OutputSchemaParametersType"] + OBJECT: ClassVar["OutputSchemaParametersType"] + ARRAY_STRING: ClassVar["OutputSchemaParametersType"] + ARRAY_NUMBER: ClassVar["OutputSchemaParametersType"] + ARRAY_BOOLEAN: ClassVar["OutputSchemaParametersType"] + ARRAY_OBJECT: ClassVar["OutputSchemaParametersType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OutputSchemaParametersType.STRING = OutputSchemaParametersType("STRING") +OutputSchemaParametersType.NUMBER = OutputSchemaParametersType("NUMBER") +OutputSchemaParametersType.BOOLEAN = OutputSchemaParametersType("BOOLEAN") +OutputSchemaParametersType.OBJECT = OutputSchemaParametersType("OBJECT") +OutputSchemaParametersType.ARRAY_STRING = OutputSchemaParametersType("ARRAY_STRING") +OutputSchemaParametersType.ARRAY_NUMBER = OutputSchemaParametersType("ARRAY_NUMBER") +OutputSchemaParametersType.ARRAY_BOOLEAN = OutputSchemaParametersType("ARRAY_BOOLEAN") +OutputSchemaParametersType.ARRAY_OBJECT = OutputSchemaParametersType("ARRAY_OBJECT") diff --git a/datadog_api_client/v2/model/overwrite_allocations_request.py b/datadog_api_client/v2/model/overwrite_allocations_request.py new file mode 100644 index 0000000000..eaa339dcf2 --- /dev/null +++ b/datadog_api_client/v2/model/overwrite_allocations_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.allocation_data_request import AllocationDataRequest + +class OverwriteAllocationsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.allocation_data_request import AllocationDataRequest + return { + "data": ([AllocationDataRequest],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[AllocationDataRequest], **kwargs): + """ + Request to overwrite targeting rules (allocations) for a feature flag in an environment. + + :param data: Targeting rules (allocations) to replace existing ones with. + :type data: [AllocationDataRequest] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_confidence_level.py b/datadog_api_client/v2/model/ownership_confidence_level.py new file mode 100644 index 0000000000..7291abfc9c --- /dev/null +++ b/datadog_api_client/v2/model/ownership_confidence_level.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipConfidenceLevel(ModelSimple): + """ + The ownership confidence level. + + :param value: Must be one of ["high", "medium", "low"]. + :type value: str + """ + + allowed_values = { + "high", + "medium", + "low", + } + HIGH: ClassVar["OwnershipConfidenceLevel"] + MEDIUM: ClassVar["OwnershipConfidenceLevel"] + LOW: ClassVar["OwnershipConfidenceLevel"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipConfidenceLevel.HIGH = OwnershipConfidenceLevel("high") +OwnershipConfidenceLevel.MEDIUM = OwnershipConfidenceLevel("medium") +OwnershipConfidenceLevel.LOW = OwnershipConfidenceLevel("low") diff --git a/datadog_api_client/v2/model/ownership_evidence_attributes.py b/datadog_api_client/v2/model/ownership_evidence_attributes.py new file mode 100644 index 0000000000..5499b5f02d --- /dev/null +++ b/datadog_api_client/v2/model/ownership_evidence_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_evidence_version import OwnershipEvidenceVersion + +class OwnershipEvidenceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_evidence_version import OwnershipEvidenceVersion + return { + "evidence_versions": ([OwnershipEvidenceVersion],), + } + attribute_map = { + "evidence_versions": "evidence_versions", + } + + def __init__(self_, evidence_versions: Union[List[OwnershipEvidenceVersion], none_type], **kwargs): + """ + The attributes of an ownership evidence response. + + :param evidence_versions: The list of evidence versions associated with an inference. + :type evidence_versions: [OwnershipEvidenceVersion], none_type + """ + super().__init__(kwargs) + + + self_.evidence_versions = evidence_versions diff --git a/datadog_api_client/v2/model/ownership_evidence_data.py b/datadog_api_client/v2/model/ownership_evidence_data.py new file mode 100644 index 0000000000..e8832e663e --- /dev/null +++ b/datadog_api_client/v2/model/ownership_evidence_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_evidence_attributes import OwnershipEvidenceAttributes + from datadog_api_client.v2.model.ownership_evidence_type import OwnershipEvidenceType + +class OwnershipEvidenceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_evidence_attributes import OwnershipEvidenceAttributes + from datadog_api_client.v2.model.ownership_evidence_type import OwnershipEvidenceType + return { + "attributes": (OwnershipEvidenceAttributes,), + "id": (str,), + "type": (OwnershipEvidenceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OwnershipEvidenceAttributes, id: str, type: OwnershipEvidenceType, **kwargs): + """ + The data wrapper for an ownership evidence response. + + :param attributes: The attributes of an ownership evidence response. + :type attributes: OwnershipEvidenceAttributes + + :param id: The identifier of the resource the evidence applies to. + :type id: str + + :param type: The type of the ownership evidence resource. The value should always be ``ownership_evidence``. + :type type: OwnershipEvidenceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ownership_evidence_response.py b/datadog_api_client/v2/model/ownership_evidence_response.py new file mode 100644 index 0000000000..439c8d1e04 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_evidence_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_evidence_data import OwnershipEvidenceData + +class OwnershipEvidenceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_evidence_data import OwnershipEvidenceData + return { + "data": (OwnershipEvidenceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OwnershipEvidenceData, **kwargs): + """ + The response returned when retrieving the evidence backing an ownership inference for an owner type. + + :param data: The data wrapper for an ownership evidence response. + :type data: OwnershipEvidenceData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_evidence_type.py b/datadog_api_client/v2/model/ownership_evidence_type.py new file mode 100644 index 0000000000..4656a5037c --- /dev/null +++ b/datadog_api_client/v2/model/ownership_evidence_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipEvidenceType(ModelSimple): + """ + The type of the ownership evidence resource. The value should always be `ownership_evidence`. + + :param value: If omitted defaults to "ownership_evidence". Must be one of ["ownership_evidence"]. + :type value: str + """ + + allowed_values = { + "ownership_evidence", + } + OWNERSHIP_EVIDENCE: ClassVar["OwnershipEvidenceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipEvidenceType.OWNERSHIP_EVIDENCE = OwnershipEvidenceType("ownership_evidence") diff --git a/datadog_api_client/v2/model/ownership_evidence_version.py b/datadog_api_client/v2/model/ownership_evidence_version.py new file mode 100644 index 0000000000..789f6b0781 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_evidence_version.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OwnershipEvidenceVersion(ModelNormal): + + def __init__(self_, **kwargs): + """ + A single evidence version entry describing how an inference was produced. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ownership_feedback_action.py b/datadog_api_client/v2/model/ownership_feedback_action.py new file mode 100644 index 0000000000..6ffd4c2160 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_feedback_action.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipFeedbackAction(ModelSimple): + """ + The feedback action to apply to an inference. + + :param value: Must be one of ["confirm", "reject", "correct", "persist"]. + :type value: str + """ + + allowed_values = { + "confirm", + "reject", + "correct", + "persist", + } + CONFIRM: ClassVar["OwnershipFeedbackAction"] + REJECT: ClassVar["OwnershipFeedbackAction"] + CORRECT: ClassVar["OwnershipFeedbackAction"] + PERSIST: ClassVar["OwnershipFeedbackAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipFeedbackAction.CONFIRM = OwnershipFeedbackAction("confirm") +OwnershipFeedbackAction.REJECT = OwnershipFeedbackAction("reject") +OwnershipFeedbackAction.CORRECT = OwnershipFeedbackAction("correct") +OwnershipFeedbackAction.PERSIST = OwnershipFeedbackAction("persist") diff --git a/datadog_api_client/v2/model/ownership_feedback_request.py b/datadog_api_client/v2/model/ownership_feedback_request.py new file mode 100644 index 0000000000..3badf890b5 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_feedback_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_feedback_request_data import OwnershipFeedbackRequestData + +class OwnershipFeedbackRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_feedback_request_data import OwnershipFeedbackRequestData + return { + "data": (OwnershipFeedbackRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OwnershipFeedbackRequestData, **kwargs): + """ + The request body for submitting ownership feedback. + + :param data: The data wrapper for an ownership feedback request. + :type data: OwnershipFeedbackRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_feedback_request_attributes.py b/datadog_api_client/v2/model/ownership_feedback_request_attributes.py new file mode 100644 index 0000000000..2d860875c9 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_feedback_request_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_feedback_action import OwnershipFeedbackAction + +class OwnershipFeedbackRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_feedback_action import OwnershipFeedbackAction + return { + "action": (OwnershipFeedbackAction,), + "actor_handle": (str,), + "actor_type": (str,), + "corrected_owner_handle": (str, none_type), + "corrected_owner_type": (str, none_type), + "inference_checksum": (str,), + "reason": (str, none_type), + } + attribute_map = { + "action": "action", + "actor_handle": "actor_handle", + "actor_type": "actor_type", + "corrected_owner_handle": "corrected_owner_handle", + "corrected_owner_type": "corrected_owner_type", + "inference_checksum": "inference_checksum", + "reason": "reason", + } + + def __init__(self_, action: OwnershipFeedbackAction, actor_handle: str, actor_type: str, inference_checksum: str, corrected_owner_handle: Union[str, none_type, UnsetType]=unset, corrected_owner_type: Union[str, none_type, UnsetType]=unset, reason: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The attributes of an ownership feedback request. + + :param action: The feedback action to apply to an inference. + :type action: OwnershipFeedbackAction + + :param actor_handle: The handle of the actor submitting the feedback. + :type actor_handle: str + + :param actor_type: The type of actor submitting the feedback, for example ``user`` or ``service``. + :type actor_type: str + + :param corrected_owner_handle: The corrected owner handle. Required when ``action`` is ``correct``. + :type corrected_owner_handle: str, none_type, optional + + :param corrected_owner_type: The corrected owner type. Required when ``action`` is ``correct``. + :type corrected_owner_type: str, none_type, optional + + :param inference_checksum: The checksum of the inference being acted upon. Must match the current inference checksum or the request returns a conflict. + :type inference_checksum: str + + :param reason: An optional free-form reason explaining the feedback. + :type reason: str, none_type, optional + """ + if corrected_owner_handle is not unset: + kwargs["corrected_owner_handle"] = corrected_owner_handle + if corrected_owner_type is not unset: + kwargs["corrected_owner_type"] = corrected_owner_type + if reason is not unset: + kwargs["reason"] = reason + super().__init__(kwargs) + + + self_.action = action + self_.actor_handle = actor_handle + self_.actor_type = actor_type + self_.inference_checksum = inference_checksum diff --git a/datadog_api_client/v2/model/ownership_feedback_request_data.py b/datadog_api_client/v2/model/ownership_feedback_request_data.py new file mode 100644 index 0000000000..c45918eeb2 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_feedback_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_feedback_request_attributes import OwnershipFeedbackRequestAttributes + from datadog_api_client.v2.model.ownership_feedback_type import OwnershipFeedbackType + +class OwnershipFeedbackRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_feedback_request_attributes import OwnershipFeedbackRequestAttributes + from datadog_api_client.v2.model.ownership_feedback_type import OwnershipFeedbackType + return { + "attributes": (OwnershipFeedbackRequestAttributes,), + "type": (OwnershipFeedbackType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: OwnershipFeedbackRequestAttributes, type: OwnershipFeedbackType, **kwargs): + """ + The data wrapper for an ownership feedback request. + + :param attributes: The attributes of an ownership feedback request. + :type attributes: OwnershipFeedbackRequestAttributes + + :param type: The type of the ownership feedback request resource. The value should always be ``ownership_feedback``. + :type type: OwnershipFeedbackType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/ownership_feedback_response.py b/datadog_api_client/v2/model/ownership_feedback_response.py new file mode 100644 index 0000000000..74c98f6d41 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_feedback_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_feedback_result_data import OwnershipFeedbackResultData + +class OwnershipFeedbackResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_feedback_result_data import OwnershipFeedbackResultData + return { + "data": (OwnershipFeedbackResultData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OwnershipFeedbackResultData, **kwargs): + """ + The response returned after applying ownership feedback to an inference. + + :param data: The data wrapper for an ownership feedback result response. + :type data: OwnershipFeedbackResultData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_feedback_result_attributes.py b/datadog_api_client/v2/model/ownership_feedback_result_attributes.py new file mode 100644 index 0000000000..f3eec531ff --- /dev/null +++ b/datadog_api_client/v2/model/ownership_feedback_result_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_feedback_action import OwnershipFeedbackAction + from datadog_api_client.v2.model.ownership_inference_status import OwnershipInferenceStatus + from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType + +class OwnershipFeedbackResultAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_feedback_action import OwnershipFeedbackAction + from datadog_api_client.v2.model.ownership_inference_status import OwnershipInferenceStatus + from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType + return { + "action": (OwnershipFeedbackAction,), + "checksum": (str,), + "new_status": (OwnershipInferenceStatus,), + "owner_type": (OwnershipOwnerType,), + "previous_status": (OwnershipInferenceStatus,), + "primary_contact_ref": (str, none_type), + "updated_at": (datetime,), + } + attribute_map = { + "action": "action", + "checksum": "checksum", + "new_status": "new_status", + "owner_type": "owner_type", + "previous_status": "previous_status", + "primary_contact_ref": "primary_contact_ref", + "updated_at": "updated_at", + } + + def __init__(self_, action: OwnershipFeedbackAction, checksum: str, new_status: OwnershipInferenceStatus, owner_type: OwnershipOwnerType, previous_status: OwnershipInferenceStatus, updated_at: datetime, primary_contact_ref: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The attributes of an ownership feedback result. + + :param action: The feedback action to apply to an inference. + :type action: OwnershipFeedbackAction + + :param checksum: The checksum of the inference after the feedback was applied. + :type checksum: str + + :param new_status: The lifecycle status of an ownership inference. + :type new_status: OwnershipInferenceStatus + + :param owner_type: The owner type for an ownership inference. + :type owner_type: OwnershipOwnerType + + :param previous_status: The lifecycle status of an ownership inference. + :type previous_status: OwnershipInferenceStatus + + :param primary_contact_ref: The primary contact reference for the inferred owner after the feedback was applied, formatted as ``ref:handle/``. + :type primary_contact_ref: str, none_type, optional + + :param updated_at: The time when the inference was updated by the feedback. + :type updated_at: datetime + """ + if primary_contact_ref is not unset: + kwargs["primary_contact_ref"] = primary_contact_ref + super().__init__(kwargs) + + + self_.action = action + self_.checksum = checksum + self_.new_status = new_status + self_.owner_type = owner_type + self_.previous_status = previous_status + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/ownership_feedback_result_data.py b/datadog_api_client/v2/model/ownership_feedback_result_data.py new file mode 100644 index 0000000000..316f015a1a --- /dev/null +++ b/datadog_api_client/v2/model/ownership_feedback_result_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_feedback_result_attributes import OwnershipFeedbackResultAttributes + from datadog_api_client.v2.model.ownership_feedback_result_type import OwnershipFeedbackResultType + +class OwnershipFeedbackResultData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_feedback_result_attributes import OwnershipFeedbackResultAttributes + from datadog_api_client.v2.model.ownership_feedback_result_type import OwnershipFeedbackResultType + return { + "attributes": (OwnershipFeedbackResultAttributes,), + "id": (str,), + "type": (OwnershipFeedbackResultType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OwnershipFeedbackResultAttributes, id: str, type: OwnershipFeedbackResultType, **kwargs): + """ + The data wrapper for an ownership feedback result response. + + :param attributes: The attributes of an ownership feedback result. + :type attributes: OwnershipFeedbackResultAttributes + + :param id: The identifier of the resource that the feedback was applied to. + :type id: str + + :param type: The type of the ownership feedback result resource. The value should always be ``ownership_feedback_result``. + :type type: OwnershipFeedbackResultType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ownership_feedback_result_type.py b/datadog_api_client/v2/model/ownership_feedback_result_type.py new file mode 100644 index 0000000000..f4f980e5da --- /dev/null +++ b/datadog_api_client/v2/model/ownership_feedback_result_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipFeedbackResultType(ModelSimple): + """ + The type of the ownership feedback result resource. The value should always be `ownership_feedback_result`. + + :param value: If omitted defaults to "ownership_feedback_result". Must be one of ["ownership_feedback_result"]. + :type value: str + """ + + allowed_values = { + "ownership_feedback_result", + } + OWNERSHIP_FEEDBACK_RESULT: ClassVar["OwnershipFeedbackResultType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipFeedbackResultType.OWNERSHIP_FEEDBACK_RESULT = OwnershipFeedbackResultType("ownership_feedback_result") diff --git a/datadog_api_client/v2/model/ownership_feedback_type.py b/datadog_api_client/v2/model/ownership_feedback_type.py new file mode 100644 index 0000000000..e448763ec1 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_feedback_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipFeedbackType(ModelSimple): + """ + The type of the ownership feedback request resource. The value should always be `ownership_feedback`. + + :param value: If omitted defaults to "ownership_feedback". Must be one of ["ownership_feedback"]. + :type value: str + """ + + allowed_values = { + "ownership_feedback", + } + OWNERSHIP_FEEDBACK: ClassVar["OwnershipFeedbackType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipFeedbackType.OWNERSHIP_FEEDBACK = OwnershipFeedbackType("ownership_feedback") diff --git a/datadog_api_client/v2/model/ownership_history_attributes.py b/datadog_api_client/v2/model/ownership_history_attributes.py new file mode 100644 index 0000000000..481db51f73 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_history_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_history_item import OwnershipHistoryItem + from datadog_api_client.v2.model.ownership_history_pagination import OwnershipHistoryPagination + +class OwnershipHistoryAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_history_item import OwnershipHistoryItem + from datadog_api_client.v2.model.ownership_history_pagination import OwnershipHistoryPagination + return { + "items": ([OwnershipHistoryItem],), + "pagination": (OwnershipHistoryPagination,), + } + attribute_map = { + "items": "items", + "pagination": "pagination", + } + + def __init__(self_, items: List[OwnershipHistoryItem], pagination: OwnershipHistoryPagination, **kwargs): + """ + The attributes of an ownership history response. + + :param items: The list of history entries returned for this page. + :type items: [OwnershipHistoryItem] + + :param pagination: Cursor-based pagination metadata for the history response. + :type pagination: OwnershipHistoryPagination + """ + super().__init__(kwargs) + + + self_.items = items + self_.pagination = pagination diff --git a/datadog_api_client/v2/model/ownership_history_data.py b/datadog_api_client/v2/model/ownership_history_data.py new file mode 100644 index 0000000000..49dc86fa19 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_history_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_history_attributes import OwnershipHistoryAttributes + from datadog_api_client.v2.model.ownership_history_type import OwnershipHistoryType + +class OwnershipHistoryData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_history_attributes import OwnershipHistoryAttributes + from datadog_api_client.v2.model.ownership_history_type import OwnershipHistoryType + return { + "attributes": (OwnershipHistoryAttributes,), + "id": (str,), + "type": (OwnershipHistoryType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OwnershipHistoryAttributes, id: str, type: OwnershipHistoryType, **kwargs): + """ + The data wrapper for an ownership history response. + + :param attributes: The attributes of an ownership history response. + :type attributes: OwnershipHistoryAttributes + + :param id: The resource identifier for which history is returned. + :type id: str + + :param type: The type of the ownership history resource. The value should always be ``ownership_history``. + :type type: OwnershipHistoryType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ownership_history_item.py b/datadog_api_client/v2/model/ownership_history_item.py new file mode 100644 index 0000000000..50579028fa --- /dev/null +++ b/datadog_api_client/v2/model/ownership_history_item.py @@ -0,0 +1,136 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_evidence_version import OwnershipEvidenceVersion + from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType + from datadog_api_client.v2.model.ownership_inference_source import OwnershipInferenceSource + from datadog_api_client.v2.model.ownership_inference_status import OwnershipInferenceStatus + +class OwnershipHistoryItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_evidence_version import OwnershipEvidenceVersion + from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType + from datadog_api_client.v2.model.ownership_inference_source import OwnershipInferenceSource + from datadog_api_client.v2.model.ownership_inference_status import OwnershipInferenceStatus + return { + "checksum": (str,), + "confidence": (str,), + "created_at": (datetime,), + "evidence_versions": ([OwnershipEvidenceVersion],), + "explanation": (str,), + "failed_at": (datetime, none_type), + "failure_reason": (str, none_type), + "id": (int,), + "owner_type": (OwnershipOwnerType,), + "primary_contact_ref": (str, none_type), + "resource_id": (str,), + "retry_schedule": (datetime, none_type), + "sources": ([OwnershipInferenceSource],), + "status": (OwnershipInferenceStatus,), + } + attribute_map = { + "checksum": "checksum", + "confidence": "confidence", + "created_at": "created_at", + "evidence_versions": "evidence_versions", + "explanation": "explanation", + "failed_at": "failed_at", + "failure_reason": "failure_reason", + "id": "id", + "owner_type": "owner_type", + "primary_contact_ref": "primary_contact_ref", + "resource_id": "resource_id", + "retry_schedule": "retry_schedule", + "sources": "sources", + "status": "status", + } + + def __init__(self_, checksum: str, confidence: str, created_at: datetime, evidence_versions: Union[List[OwnershipEvidenceVersion], none_type], explanation: str, id: int, owner_type: OwnershipOwnerType, resource_id: str, sources: List[OwnershipInferenceSource], status: OwnershipInferenceStatus, failed_at: Union[datetime, none_type, UnsetType]=unset, failure_reason: Union[str, none_type, UnsetType]=unset, primary_contact_ref: Union[str, none_type, UnsetType]=unset, retry_schedule: Union[datetime, none_type, UnsetType]=unset, **kwargs): + """ + A single ownership inference history entry. + + :param checksum: A checksum identifying the state of the inference at this point in time. + :type checksum: str + + :param confidence: The confidence score of the inference, expressed as a numeric string with up to four decimal places. + :type confidence: str + + :param created_at: The time this history entry was created. + :type created_at: datetime + + :param evidence_versions: The list of evidence versions associated with an inference. + :type evidence_versions: [OwnershipEvidenceVersion], none_type + + :param explanation: A human-readable explanation of how the inference was produced. + :type explanation: str + + :param failed_at: The time when this inference failed, if applicable. + :type failed_at: datetime, none_type, optional + + :param failure_reason: The reason why this inference failed, if applicable. + :type failure_reason: str, none_type, optional + + :param id: The unique identifier of the history entry. + :type id: int + + :param owner_type: The owner type for an ownership inference. + :type owner_type: OwnershipOwnerType + + :param primary_contact_ref: The primary contact reference for the inferred owner, formatted as ``ref:handle/``. + :type primary_contact_ref: str, none_type, optional + + :param resource_id: The identifier of the resource that the inference applies to. + :type resource_id: str + + :param retry_schedule: The scheduled retry time for a failed inference, if applicable. + :type retry_schedule: datetime, none_type, optional + + :param sources: The list of sources backing an ownership inference. Empty when the inference status is not whitelisted to expose sources. + :type sources: [OwnershipInferenceSource] + + :param status: The lifecycle status of an ownership inference. + :type status: OwnershipInferenceStatus + """ + if failed_at is not unset: + kwargs["failed_at"] = failed_at + if failure_reason is not unset: + kwargs["failure_reason"] = failure_reason + if primary_contact_ref is not unset: + kwargs["primary_contact_ref"] = primary_contact_ref + if retry_schedule is not unset: + kwargs["retry_schedule"] = retry_schedule + super().__init__(kwargs) + + + self_.checksum = checksum + self_.confidence = confidence + self_.created_at = created_at + self_.evidence_versions = evidence_versions + self_.explanation = explanation + self_.id = id + self_.owner_type = owner_type + self_.resource_id = resource_id + self_.sources = sources + self_.status = status diff --git a/datadog_api_client/v2/model/ownership_history_pagination.py b/datadog_api_client/v2/model/ownership_history_pagination.py new file mode 100644 index 0000000000..193dcbcc93 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_history_pagination.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OwnershipHistoryPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "has_more": (bool,), + "next_cursor": (str, none_type), + } + attribute_map = { + "has_more": "has_more", + "next_cursor": "next_cursor", + } + + def __init__(self_, has_more: bool, next_cursor: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Cursor-based pagination metadata for the history response. + + :param has_more: Whether more history entries are available beyond this page. + :type has_more: bool + + :param next_cursor: An opaque, base64-encoded cursor token. Pass it as the ``cursor`` query parameter to retrieve the next page. Absent or ``null`` when there are no further pages. + :type next_cursor: str, none_type, optional + """ + if next_cursor is not unset: + kwargs["next_cursor"] = next_cursor + super().__init__(kwargs) + + + self_.has_more = has_more diff --git a/datadog_api_client/v2/model/ownership_history_response.py b/datadog_api_client/v2/model/ownership_history_response.py new file mode 100644 index 0000000000..8d09e3ad19 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_history_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_history_data import OwnershipHistoryData + +class OwnershipHistoryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_history_data import OwnershipHistoryData + return { + "data": (OwnershipHistoryData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OwnershipHistoryData, **kwargs): + """ + The response returned when listing the inference history for a resource. + + :param data: The data wrapper for an ownership history response. + :type data: OwnershipHistoryData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_history_type.py b/datadog_api_client/v2/model/ownership_history_type.py new file mode 100644 index 0000000000..9b4d235eef --- /dev/null +++ b/datadog_api_client/v2/model/ownership_history_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipHistoryType(ModelSimple): + """ + The type of the ownership history resource. The value should always be `ownership_history`. + + :param value: If omitted defaults to "ownership_history". Must be one of ["ownership_history"]. + :type value: str + """ + + allowed_values = { + "ownership_history", + } + OWNERSHIP_HISTORY: ClassVar["OwnershipHistoryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipHistoryType.OWNERSHIP_HISTORY = OwnershipHistoryType("ownership_history") diff --git a/datadog_api_client/v2/model/ownership_inference_attributes.py b/datadog_api_client/v2/model/ownership_inference_attributes.py new file mode 100644 index 0000000000..561fe78003 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_attributes.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_evidence_version import OwnershipEvidenceVersion + from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType + from datadog_api_client.v2.model.ownership_inference_source import OwnershipInferenceSource + from datadog_api_client.v2.model.ownership_inference_status import OwnershipInferenceStatus + +class OwnershipInferenceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_evidence_version import OwnershipEvidenceVersion + from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType + from datadog_api_client.v2.model.ownership_inference_source import OwnershipInferenceSource + from datadog_api_client.v2.model.ownership_inference_status import OwnershipInferenceStatus + return { + "checksum": (str,), + "confidence": (str,), + "created_at": (datetime,), + "evidence_versions": ([OwnershipEvidenceVersion],), + "explanation": (str,), + "owner_type": (OwnershipOwnerType,), + "primary_contact_ref": (str, none_type), + "sources": ([OwnershipInferenceSource],), + "status": (OwnershipInferenceStatus,), + "updated_at": (datetime,), + } + attribute_map = { + "checksum": "checksum", + "confidence": "confidence", + "created_at": "created_at", + "evidence_versions": "evidence_versions", + "explanation": "explanation", + "owner_type": "owner_type", + "primary_contact_ref": "primary_contact_ref", + "sources": "sources", + "status": "status", + "updated_at": "updated_at", + } + + def __init__(self_, checksum: str, confidence: str, created_at: datetime, evidence_versions: Union[List[OwnershipEvidenceVersion], none_type], explanation: str, owner_type: OwnershipOwnerType, sources: List[OwnershipInferenceSource], status: OwnershipInferenceStatus, updated_at: datetime, primary_contact_ref: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The attributes of a single ownership inference. + + :param checksum: A checksum that uniquely identifies the current state of the inference. Required when submitting feedback. + :type checksum: str + + :param confidence: The confidence score of the inference, expressed as a numeric string with up to four decimal places. + :type confidence: str + + :param created_at: The time when the inference was created. + :type created_at: datetime + + :param evidence_versions: The list of evidence versions associated with an inference. + :type evidence_versions: [OwnershipEvidenceVersion], none_type + + :param explanation: A human-readable explanation of how the inference was produced. + :type explanation: str + + :param owner_type: The owner type for an ownership inference. + :type owner_type: OwnershipOwnerType + + :param primary_contact_ref: The primary contact reference for the inferred owner, formatted as ``ref:handle/``. + :type primary_contact_ref: str, none_type, optional + + :param sources: The list of sources backing an ownership inference. Empty when the inference status is not whitelisted to expose sources. + :type sources: [OwnershipInferenceSource] + + :param status: The lifecycle status of an ownership inference. + :type status: OwnershipInferenceStatus + + :param updated_at: The time when the inference was last updated. + :type updated_at: datetime + """ + if primary_contact_ref is not unset: + kwargs["primary_contact_ref"] = primary_contact_ref + super().__init__(kwargs) + + + self_.checksum = checksum + self_.confidence = confidence + self_.created_at = created_at + self_.evidence_versions = evidence_versions + self_.explanation = explanation + self_.owner_type = owner_type + self_.sources = sources + self_.status = status + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/ownership_inference_data.py b/datadog_api_client/v2/model/ownership_inference_data.py new file mode 100644 index 0000000000..ca68edcde8 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_inference_attributes import OwnershipInferenceAttributes + from datadog_api_client.v2.model.ownership_inference_type import OwnershipInferenceType + +class OwnershipInferenceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_inference_attributes import OwnershipInferenceAttributes + from datadog_api_client.v2.model.ownership_inference_type import OwnershipInferenceType + return { + "attributes": (OwnershipInferenceAttributes,), + "id": (str,), + "type": (OwnershipInferenceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OwnershipInferenceAttributes, id: str, type: OwnershipInferenceType, **kwargs): + """ + The data wrapper for a single ownership inference response. + + :param attributes: The attributes of a single ownership inference. + :type attributes: OwnershipInferenceAttributes + + :param id: The identifier of the inference, formatted as ``resource_id:owner_type``. + :type id: str + + :param type: The type of the ownership inference resource. The value should always be ``ownership_inference``. + :type type: OwnershipInferenceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ownership_inference_item.py b/datadog_api_client/v2/model/ownership_inference_item.py new file mode 100644 index 0000000000..44e2148085 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_item.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_evidence_version import OwnershipEvidenceVersion + from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType + from datadog_api_client.v2.model.ownership_inference_source import OwnershipInferenceSource + from datadog_api_client.v2.model.ownership_inference_status import OwnershipInferenceStatus + +class OwnershipInferenceItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_evidence_version import OwnershipEvidenceVersion + from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType + from datadog_api_client.v2.model.ownership_inference_source import OwnershipInferenceSource + from datadog_api_client.v2.model.ownership_inference_status import OwnershipInferenceStatus + return { + "checksum": (str,), + "confidence": (str,), + "created_at": (datetime,), + "evidence_versions": ([OwnershipEvidenceVersion],), + "explanation": (str,), + "id": (str,), + "owner_type": (OwnershipOwnerType,), + "primary_contact_ref": (str, none_type), + "sources": ([OwnershipInferenceSource],), + "status": (OwnershipInferenceStatus,), + "updated_at": (datetime,), + } + attribute_map = { + "checksum": "checksum", + "confidence": "confidence", + "created_at": "created_at", + "evidence_versions": "evidence_versions", + "explanation": "explanation", + "id": "id", + "owner_type": "owner_type", + "primary_contact_ref": "primary_contact_ref", + "sources": "sources", + "status": "status", + "updated_at": "updated_at", + } + + def __init__(self_, checksum: str, confidence: str, created_at: datetime, evidence_versions: Union[List[OwnershipEvidenceVersion], none_type], explanation: str, id: str, owner_type: OwnershipOwnerType, sources: List[OwnershipInferenceSource], status: OwnershipInferenceStatus, updated_at: datetime, primary_contact_ref: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + A single ownership inference, scoped to a specific owner type. + + :param checksum: A checksum that uniquely identifies the current state of the inference. Required when submitting feedback. + :type checksum: str + + :param confidence: The confidence score of the inference, expressed as a numeric string with up to four decimal places. + :type confidence: str + + :param created_at: The time when the inference was created. + :type created_at: datetime + + :param evidence_versions: The list of evidence versions associated with an inference. + :type evidence_versions: [OwnershipEvidenceVersion], none_type + + :param explanation: A human-readable explanation of how the inference was produced. + :type explanation: str + + :param id: The identifier of the inference, formatted as ``resource_id:owner_type``. + :type id: str + + :param owner_type: The owner type for an ownership inference. + :type owner_type: OwnershipOwnerType + + :param primary_contact_ref: The primary contact reference for the inferred owner, formatted as ``ref:handle/``. + :type primary_contact_ref: str, none_type, optional + + :param sources: The list of sources backing an ownership inference. Empty when the inference status is not whitelisted to expose sources. + :type sources: [OwnershipInferenceSource] + + :param status: The lifecycle status of an ownership inference. + :type status: OwnershipInferenceStatus + + :param updated_at: The time when the inference was last updated. + :type updated_at: datetime + """ + if primary_contact_ref is not unset: + kwargs["primary_contact_ref"] = primary_contact_ref + super().__init__(kwargs) + + + self_.checksum = checksum + self_.confidence = confidence + self_.created_at = created_at + self_.evidence_versions = evidence_versions + self_.explanation = explanation + self_.id = id + self_.owner_type = owner_type + self_.sources = sources + self_.status = status + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/ownership_inference_list_attributes.py b/datadog_api_client/v2/model/ownership_inference_list_attributes.py new file mode 100644 index 0000000000..a7a3bbcf21 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_list_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_inference_item import OwnershipInferenceItem + +class OwnershipInferenceListAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_inference_item import OwnershipInferenceItem + return { + "items": ([OwnershipInferenceItem],), + } + attribute_map = { + "items": "items", + } + + def __init__(self_, items: List[OwnershipInferenceItem], **kwargs): + """ + The attributes of the ownership inferences collection response. + + :param items: The list of inferences for a resource, with one inference per owner type. + :type items: [OwnershipInferenceItem] + """ + super().__init__(kwargs) + + + self_.items = items diff --git a/datadog_api_client/v2/model/ownership_inference_list_data.py b/datadog_api_client/v2/model/ownership_inference_list_data.py new file mode 100644 index 0000000000..2a08699952 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_list_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_inference_list_attributes import OwnershipInferenceListAttributes + from datadog_api_client.v2.model.ownership_inferences_type import OwnershipInferencesType + +class OwnershipInferenceListData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_inference_list_attributes import OwnershipInferenceListAttributes + from datadog_api_client.v2.model.ownership_inferences_type import OwnershipInferencesType + return { + "attributes": (OwnershipInferenceListAttributes,), + "id": (str,), + "type": (OwnershipInferencesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OwnershipInferenceListAttributes, id: str, type: OwnershipInferencesType, **kwargs): + """ + The data wrapper for the ownership inferences collection response. + + :param attributes: The attributes of the ownership inferences collection response. + :type attributes: OwnershipInferenceListAttributes + + :param id: The resource identifier associated with the returned inferences. + :type id: str + + :param type: The type of the ownership inferences collection resource. The value should always be ``ownership_inferences``. + :type type: OwnershipInferencesType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ownership_inference_list_response.py b/datadog_api_client/v2/model/ownership_inference_list_response.py new file mode 100644 index 0000000000..583bfb901f --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_list_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_inference_list_data import OwnershipInferenceListData + +class OwnershipInferenceListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_inference_list_data import OwnershipInferenceListData + return { + "data": (OwnershipInferenceListData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OwnershipInferenceListData, **kwargs): + """ + The response returned when listing all current ownership inferences for a resource. + + :param data: The data wrapper for the ownership inferences collection response. + :type data: OwnershipInferenceListData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_inference_response.py b/datadog_api_client/v2/model/ownership_inference_response.py new file mode 100644 index 0000000000..cf720e7b50 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_inference_data import OwnershipInferenceData + +class OwnershipInferenceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_inference_data import OwnershipInferenceData + return { + "data": (OwnershipInferenceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OwnershipInferenceData, **kwargs): + """ + The response returned when retrieving a single ownership inference for an owner type. + + :param data: The data wrapper for a single ownership inference response. + :type data: OwnershipInferenceData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_inference_source.py b/datadog_api_client/v2/model/ownership_inference_source.py new file mode 100644 index 0000000000..1171c96842 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_source.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OwnershipInferenceSource(ModelNormal): + + def __init__(self_, **kwargs): + """ + A source describing how an inference was derived. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ownership_inference_status.py b/datadog_api_client/v2/model/ownership_inference_status.py new file mode 100644 index 0000000000..47770a1695 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_status.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipInferenceStatus(ModelSimple): + """ + The lifecycle status of an ownership inference. + + :param value: Must be one of ["suggested", "persisted", "overridden", "failed", "unknown"]. + :type value: str + """ + + allowed_values = { + "suggested", + "persisted", + "overridden", + "failed", + "unknown", + } + SUGGESTED: ClassVar["OwnershipInferenceStatus"] + PERSISTED: ClassVar["OwnershipInferenceStatus"] + OVERRIDDEN: ClassVar["OwnershipInferenceStatus"] + FAILED: ClassVar["OwnershipInferenceStatus"] + UNKNOWN: ClassVar["OwnershipInferenceStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipInferenceStatus.SUGGESTED = OwnershipInferenceStatus("suggested") +OwnershipInferenceStatus.PERSISTED = OwnershipInferenceStatus("persisted") +OwnershipInferenceStatus.OVERRIDDEN = OwnershipInferenceStatus("overridden") +OwnershipInferenceStatus.FAILED = OwnershipInferenceStatus("failed") +OwnershipInferenceStatus.UNKNOWN = OwnershipInferenceStatus("unknown") diff --git a/datadog_api_client/v2/model/ownership_inference_type.py b/datadog_api_client/v2/model/ownership_inference_type.py new file mode 100644 index 0000000000..dd0aa88ae0 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inference_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipInferenceType(ModelSimple): + """ + The type of the ownership inference resource. The value should always be `ownership_inference`. + + :param value: If omitted defaults to "ownership_inference". Must be one of ["ownership_inference"]. + :type value: str + """ + + allowed_values = { + "ownership_inference", + } + OWNERSHIP_INFERENCE: ClassVar["OwnershipInferenceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipInferenceType.OWNERSHIP_INFERENCE = OwnershipInferenceType("ownership_inference") diff --git a/datadog_api_client/v2/model/ownership_inferences_type.py b/datadog_api_client/v2/model/ownership_inferences_type.py new file mode 100644 index 0000000000..b3b4647000 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_inferences_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipInferencesType(ModelSimple): + """ + The type of the ownership inferences collection resource. The value should always be `ownership_inferences`. + + :param value: If omitted defaults to "ownership_inferences". Must be one of ["ownership_inferences"]. + :type value: str + """ + + allowed_values = { + "ownership_inferences", + } + OWNERSHIP_INFERENCES: ClassVar["OwnershipInferencesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipInferencesType.OWNERSHIP_INFERENCES = OwnershipInferencesType("ownership_inferences") diff --git a/datadog_api_client/v2/model/ownership_owner_type.py b/datadog_api_client/v2/model/ownership_owner_type.py new file mode 100644 index 0000000000..b2100d55b8 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_owner_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipOwnerType(ModelSimple): + """ + The owner type for an ownership inference. + + :param value: Must be one of ["user", "team", "service", "unknown"]. + :type value: str + """ + + allowed_values = { + "user", + "team", + "service", + "unknown", + } + USER: ClassVar["OwnershipOwnerType"] + TEAM: ClassVar["OwnershipOwnerType"] + SERVICE: ClassVar["OwnershipOwnerType"] + UNKNOWN: ClassVar["OwnershipOwnerType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipOwnerType.USER = OwnershipOwnerType("user") +OwnershipOwnerType.TEAM = OwnershipOwnerType("team") +OwnershipOwnerType.SERVICE = OwnershipOwnerType("service") +OwnershipOwnerType.UNKNOWN = OwnershipOwnerType("unknown") diff --git a/datadog_api_client/v2/model/ownership_settings_attributes.py b/datadog_api_client/v2/model/ownership_settings_attributes.py new file mode 100644 index 0000000000..a20e747c8a --- /dev/null +++ b/datadog_api_client/v2/model/ownership_settings_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_confidence_level import OwnershipConfidenceLevel + +class OwnershipSettingsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_confidence_level import OwnershipConfidenceLevel + return { + "auto_tag": (bool,), + "confidence_level": (OwnershipConfidenceLevel,), + "version": (int,), + } + attribute_map = { + "auto_tag": "auto_tag", + "confidence_level": "confidence_level", + "version": "version", + } + + def __init__(self_, auto_tag: bool, confidence_level: OwnershipConfidenceLevel, version: int, **kwargs): + """ + The attributes of the ownership settings response. + + :param auto_tag: Whether automatic ownership tagging is enabled. + :type auto_tag: bool + + :param confidence_level: The ownership confidence level. + :type confidence_level: OwnershipConfidenceLevel + + :param version: The current version of the ownership settings. + :type version: int + """ + super().__init__(kwargs) + + + self_.auto_tag = auto_tag + self_.confidence_level = confidence_level + self_.version = version diff --git a/datadog_api_client/v2/model/ownership_settings_data.py b/datadog_api_client/v2/model/ownership_settings_data.py new file mode 100644 index 0000000000..96b959bf58 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_settings_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_settings_attributes import OwnershipSettingsAttributes + from datadog_api_client.v2.model.ownership_settings_type import OwnershipSettingsType + +class OwnershipSettingsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_settings_attributes import OwnershipSettingsAttributes + from datadog_api_client.v2.model.ownership_settings_type import OwnershipSettingsType + return { + "attributes": (OwnershipSettingsAttributes,), + "id": (str,), + "type": (OwnershipSettingsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OwnershipSettingsAttributes, id: str, type: OwnershipSettingsType, **kwargs): + """ + The data wrapper for an ownership settings response. + + :param attributes: The attributes of the ownership settings response. + :type attributes: OwnershipSettingsAttributes + + :param id: The identifier of the ownership settings resource. + :type id: str + + :param type: The type of the ownership settings resource. The value should always be ``ownership_settings``. + :type type: OwnershipSettingsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ownership_settings_request.py b/datadog_api_client/v2/model/ownership_settings_request.py new file mode 100644 index 0000000000..2421af4aa6 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_settings_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_settings_request_data import OwnershipSettingsRequestData + +class OwnershipSettingsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_settings_request_data import OwnershipSettingsRequestData + return { + "data": (OwnershipSettingsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OwnershipSettingsRequestData, **kwargs): + """ + The request body for updating ownership settings. + + :param data: The data wrapper for an ownership settings request. + :type data: OwnershipSettingsRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_settings_request_attributes.py b/datadog_api_client/v2/model/ownership_settings_request_attributes.py new file mode 100644 index 0000000000..76b9606fbe --- /dev/null +++ b/datadog_api_client/v2/model/ownership_settings_request_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_confidence_level import OwnershipConfidenceLevel + +class OwnershipSettingsRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_confidence_level import OwnershipConfidenceLevel + return { + "auto_tag": (bool,), + "confidence_level": (OwnershipConfidenceLevel,), + } + attribute_map = { + "auto_tag": "auto_tag", + "confidence_level": "confidence_level", + } + + def __init__(self_, auto_tag: bool, confidence_level: OwnershipConfidenceLevel, **kwargs): + """ + The attributes of an ownership settings request. + + :param auto_tag: Whether automatic ownership tagging is enabled. + :type auto_tag: bool + + :param confidence_level: The ownership confidence level. + :type confidence_level: OwnershipConfidenceLevel + """ + super().__init__(kwargs) + + + self_.auto_tag = auto_tag + self_.confidence_level = confidence_level diff --git a/datadog_api_client/v2/model/ownership_settings_request_data.py b/datadog_api_client/v2/model/ownership_settings_request_data.py new file mode 100644 index 0000000000..c4b3546c12 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_settings_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_settings_request_attributes import OwnershipSettingsRequestAttributes + from datadog_api_client.v2.model.ownership_settings_type import OwnershipSettingsType + +class OwnershipSettingsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_settings_request_attributes import OwnershipSettingsRequestAttributes + from datadog_api_client.v2.model.ownership_settings_type import OwnershipSettingsType + return { + "attributes": (OwnershipSettingsRequestAttributes,), + "type": (OwnershipSettingsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: OwnershipSettingsRequestAttributes, type: OwnershipSettingsType, **kwargs): + """ + The data wrapper for an ownership settings request. + + :param attributes: The attributes of an ownership settings request. + :type attributes: OwnershipSettingsRequestAttributes + + :param type: The type of the ownership settings resource. The value should always be ``ownership_settings``. + :type type: OwnershipSettingsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/ownership_settings_response.py b/datadog_api_client/v2/model/ownership_settings_response.py new file mode 100644 index 0000000000..c0a60bc9a7 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_settings_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_settings_data import OwnershipSettingsData + +class OwnershipSettingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_settings_data import OwnershipSettingsData + return { + "data": (OwnershipSettingsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OwnershipSettingsData, **kwargs): + """ + The response returned when retrieving or updating ownership settings. + + :param data: The data wrapper for an ownership settings response. + :type data: OwnershipSettingsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_settings_type.py b/datadog_api_client/v2/model/ownership_settings_type.py new file mode 100644 index 0000000000..26eb586381 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_settings_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipSettingsType(ModelSimple): + """ + The type of the ownership settings resource. The value should always be `ownership_settings`. + + :param value: If omitted defaults to "ownership_settings". Must be one of ["ownership_settings"]. + :type value: str + """ + + allowed_values = { + "ownership_settings", + } + OWNERSHIP_SETTINGS: ClassVar["OwnershipSettingsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipSettingsType.OWNERSHIP_SETTINGS = OwnershipSettingsType("ownership_settings") diff --git a/datadog_api_client/v2/model/ownership_untagged_findings_attributes.py b/datadog_api_client/v2/model/ownership_untagged_findings_attributes.py new file mode 100644 index 0000000000..6c5759d1de --- /dev/null +++ b/datadog_api_client/v2/model/ownership_untagged_findings_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class OwnershipUntaggedFindingsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "high_confidence": (int,), + "low_confidence": (int,), + "medium_confidence": (int,), + "total": (int,), + } + attribute_map = { + "high_confidence": "high_confidence", + "low_confidence": "low_confidence", + "medium_confidence": "medium_confidence", + "total": "total", + } + + def __init__(self_, high_confidence: int, low_confidence: int, medium_confidence: int, total: int, **kwargs): + """ + The counts of findings without a team tag by ownership confidence. + + :param high_confidence: The number of high confidence findings without a team tag. + :type high_confidence: int + + :param low_confidence: The number of low confidence findings without a team tag. + :type low_confidence: int + + :param medium_confidence: The number of medium confidence findings without a team tag. + :type medium_confidence: int + + :param total: The total number of findings without a team tag. + :type total: int + """ + super().__init__(kwargs) + + + self_.high_confidence = high_confidence + self_.low_confidence = low_confidence + self_.medium_confidence = medium_confidence + self_.total = total diff --git a/datadog_api_client/v2/model/ownership_untagged_findings_data.py b/datadog_api_client/v2/model/ownership_untagged_findings_data.py new file mode 100644 index 0000000000..d3be92d324 --- /dev/null +++ b/datadog_api_client/v2/model/ownership_untagged_findings_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_untagged_findings_attributes import OwnershipUntaggedFindingsAttributes + from datadog_api_client.v2.model.ownership_untagged_findings_type import OwnershipUntaggedFindingsType + +class OwnershipUntaggedFindingsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_untagged_findings_attributes import OwnershipUntaggedFindingsAttributes + from datadog_api_client.v2.model.ownership_untagged_findings_type import OwnershipUntaggedFindingsType + return { + "attributes": (OwnershipUntaggedFindingsAttributes,), + "id": (str,), + "type": (OwnershipUntaggedFindingsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: OwnershipUntaggedFindingsAttributes, id: str, type: OwnershipUntaggedFindingsType, **kwargs): + """ + The data wrapper for an ownership untagged findings response. + + :param attributes: The counts of findings without a team tag by ownership confidence. + :type attributes: OwnershipUntaggedFindingsAttributes + + :param id: The identifier of the ownership untagged findings resource. + :type id: str + + :param type: The type of the ownership untagged findings resource. The value should always be ``ownership_untagged_findings``. + :type type: OwnershipUntaggedFindingsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ownership_untagged_findings_response.py b/datadog_api_client/v2/model/ownership_untagged_findings_response.py new file mode 100644 index 0000000000..55bf3d07fc --- /dev/null +++ b/datadog_api_client/v2/model/ownership_untagged_findings_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ownership_untagged_findings_data import OwnershipUntaggedFindingsData + +class OwnershipUntaggedFindingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ownership_untagged_findings_data import OwnershipUntaggedFindingsData + return { + "data": (OwnershipUntaggedFindingsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: OwnershipUntaggedFindingsData, **kwargs): + """ + The response returned when counting findings without a team tag by ownership confidence. + + :param data: The data wrapper for an ownership untagged findings response. + :type data: OwnershipUntaggedFindingsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ownership_untagged_findings_type.py b/datadog_api_client/v2/model/ownership_untagged_findings_type.py new file mode 100644 index 0000000000..ca83766bcf --- /dev/null +++ b/datadog_api_client/v2/model/ownership_untagged_findings_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class OwnershipUntaggedFindingsType(ModelSimple): + """ + The type of the ownership untagged findings resource. The value should always be `ownership_untagged_findings`. + + :param value: If omitted defaults to "ownership_untagged_findings". Must be one of ["ownership_untagged_findings"]. + :type value: str + """ + + allowed_values = { + "ownership_untagged_findings", + } + OWNERSHIP_UNTAGGED_FINDINGS: ClassVar["OwnershipUntaggedFindingsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +OwnershipUntaggedFindingsType.OWNERSHIP_UNTAGGED_FINDINGS = OwnershipUntaggedFindingsType("ownership_untagged_findings") diff --git a/datadog_api_client/v2/model/page_annotations_attributes.py b/datadog_api_client/v2/model/page_annotations_attributes.py new file mode 100644 index 0000000000..6a9f4a88ac --- /dev/null +++ b/datadog_api_client/v2/model/page_annotations_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotations_in_page_map import AnnotationsInPageMap + from datadog_api_client.v2.model.widget_annotations_map import WidgetAnnotationsMap + +class PageAnnotationsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotations_in_page_map import AnnotationsInPageMap + from datadog_api_client.v2.model.widget_annotations_map import WidgetAnnotationsMap + return { + "annotations": (AnnotationsInPageMap,), + "global_annotations": ([UUID],), + "widget_mapping": (WidgetAnnotationsMap,), + } + attribute_map = { + "annotations": "annotations", + "global_annotations": "global_annotations", + "widget_mapping": "widget_mapping", + } + + def __init__(self_, annotations: AnnotationsInPageMap, global_annotations: List[UUID], widget_mapping: WidgetAnnotationsMap, **kwargs): + """ + Attributes of the annotations on a page. + + :param annotations: Map of annotation UUID to annotation object, keyed by annotation ID. + :type annotations: AnnotationsInPageMap + + :param global_annotations: List of annotation IDs that apply to the entire page rather than a specific widget. + :type global_annotations: [UUID] + + :param widget_mapping: Map from widget ID to the list of annotation IDs displayed on that widget. + :type widget_mapping: WidgetAnnotationsMap + """ + super().__init__(kwargs) + + + self_.annotations = annotations + self_.global_annotations = global_annotations + self_.widget_mapping = widget_mapping diff --git a/datadog_api_client/v2/model/page_annotations_data.py b/datadog_api_client/v2/model/page_annotations_data.py new file mode 100644 index 0000000000..85af8c5552 --- /dev/null +++ b/datadog_api_client/v2/model/page_annotations_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.page_annotations_attributes import PageAnnotationsAttributes + from datadog_api_client.v2.model.page_annotations_type import PageAnnotationsType + +class PageAnnotationsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.page_annotations_attributes import PageAnnotationsAttributes + from datadog_api_client.v2.model.page_annotations_type import PageAnnotationsType + return { + "attributes": (PageAnnotationsAttributes,), + "id": (str,), + "type": (PageAnnotationsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: PageAnnotationsAttributes, id: str, type: PageAnnotationsType, **kwargs): + """ + Annotations grouped by widget for a single page. + + :param attributes: Attributes of the annotations on a page. + :type attributes: PageAnnotationsAttributes + + :param id: ID of the page, prefixed with the page type and joined by a colon + (for example, ``dashboard:abc-def-xyz`` or ``notebook:1234567890`` ). + :type id: str + + :param type: Page annotations resource type. + :type type: PageAnnotationsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/page_annotations_response.py b/datadog_api_client/v2/model/page_annotations_response.py new file mode 100644 index 0000000000..3916c38024 --- /dev/null +++ b/datadog_api_client/v2/model/page_annotations_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.page_annotations_data import PageAnnotationsData + +class PageAnnotationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.page_annotations_data import PageAnnotationsData + return { + "data": (PageAnnotationsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PageAnnotationsData, **kwargs): + """ + Response containing all annotations on a page, grouped by widget. + + :param data: Annotations grouped by widget for a single page. + :type data: PageAnnotationsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/page_annotations_type.py b/datadog_api_client/v2/model/page_annotations_type.py new file mode 100644 index 0000000000..f2a8c21979 --- /dev/null +++ b/datadog_api_client/v2/model/page_annotations_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PageAnnotationsType(ModelSimple): + """ + Page annotations resource type. + + :param value: If omitted defaults to "page_annotations". Must be one of ["page_annotations"]. + :type value: str + """ + + allowed_values = { + "page_annotations", + } + PAGE_ANNOTATIONS: ClassVar["PageAnnotationsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PageAnnotationsType.PAGE_ANNOTATIONS = PageAnnotationsType("page_annotations") diff --git a/datadog_api_client/v2/model/page_urgency.py b/datadog_api_client/v2/model/page_urgency.py new file mode 100644 index 0000000000..ca57ae45fb --- /dev/null +++ b/datadog_api_client/v2/model/page_urgency.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PageUrgency(ModelSimple): + """ + On-Call Page urgency level. + + :param value: If omitted defaults to "high". Must be one of ["low", "high"]. + :type value: str + """ + + allowed_values = { + "low", + "high", + } + LOW: ClassVar["PageUrgency"] + HIGH: ClassVar["PageUrgency"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PageUrgency.LOW = PageUrgency("low") +PageUrgency.HIGH = PageUrgency("high") diff --git a/datadog_api_client/v2/model/paginated_response_meta.py b/datadog_api_client/v2/model/paginated_response_meta.py new file mode 100644 index 0000000000..19431f087c --- /dev/null +++ b/datadog_api_client/v2/model/paginated_response_meta.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PaginatedResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "limit": (int,), + "offset": (int,), + "total": (int,), + } + attribute_map = { + "count": "count", + "limit": "limit", + "offset": "offset", + "total": "total", + } + + def __init__(self_, count: int, limit: int, offset: int, total: int, **kwargs): + """ + Metadata for scores response. + + :param count: Number of entities in this response. + :type count: int + + :param limit: Pagination limit. + :type limit: int + + :param offset: Pagination offset. + :type offset: int + + :param total: Total number of entities available. + :type total: int + """ + super().__init__(kwargs) + + + self_.count = count + self_.limit = limit + self_.offset = offset + self_.total = total diff --git a/datadog_api_client/v2/model/pagination.py b/datadog_api_client/v2/model/pagination.py new file mode 100644 index 0000000000..748b085872 --- /dev/null +++ b/datadog_api_client/v2/model/pagination.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Pagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + "total_filtered_count": (int,), + } + attribute_map = { + "total_count": "total_count", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination object. + + :param total_count: Total count. + :type total_count: int, optional + + :param total_filtered_count: Total count of elements matched by the filter. + :type total_filtered_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/pagination_meta.py b/datadog_api_client/v2/model/pagination_meta.py new file mode 100644 index 0000000000..2d021dc8fa --- /dev/null +++ b/datadog_api_client/v2/model/pagination_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.pagination_meta_page import PaginationMetaPage + +class PaginationMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.pagination_meta_page import PaginationMetaPage + return { + "page": (PaginationMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[PaginationMetaPage, UnsetType]=unset, **kwargs): + """ + Response metadata. + + :param page: Offset-based pagination schema. + :type page: PaginationMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/pagination_meta_page.py b/datadog_api_client/v2/model/pagination_meta_page.py new file mode 100644 index 0000000000..f0815de7d9 --- /dev/null +++ b/datadog_api_client/v2/model/pagination_meta_page.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.pagination_meta_page_type import PaginationMetaPageType + +class PaginationMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.pagination_meta_page_type import PaginationMetaPageType + return { + "first_offset": (int,), + "last_offset": (int, none_type), + "limit": (int,), + "next_offset": (int, none_type), + "offset": (int,), + "prev_offset": (int, none_type), + "total": (int, none_type), + "type": (PaginationMetaPageType,), + } + attribute_map = { + "first_offset": "first_offset", + "last_offset": "last_offset", + "limit": "limit", + "next_offset": "next_offset", + "offset": "offset", + "prev_offset": "prev_offset", + "total": "total", + "type": "type", + } + + def __init__(self_, first_offset: Union[int, UnsetType]=unset, last_offset: Union[int, none_type, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_offset: Union[int, none_type, UnsetType]=unset, offset: Union[int, UnsetType]=unset, prev_offset: Union[int, none_type, UnsetType]=unset, total: Union[int, none_type, UnsetType]=unset, type: Union[PaginationMetaPageType, UnsetType]=unset, **kwargs): + """ + Offset-based pagination schema. + + :param first_offset: Integer representing the offset to fetch the first page of results. + :type first_offset: int, optional + + :param last_offset: Integer representing the offset to fetch the last page of results. + :type last_offset: int, none_type, optional + + :param limit: Integer representing the number of elements to be returned in the results. + :type limit: int, optional + + :param next_offset: Integer representing the index of the first element in the next page of results. Equal to page size added to the current offset. + :type next_offset: int, none_type, optional + + :param offset: Integer representing the index of the first element in the results. + :type offset: int, optional + + :param prev_offset: Integer representing the index of the first element in the previous page of results. + :type prev_offset: int, none_type, optional + + :param total: Integer representing the total number of elements available. + :type total: int, none_type, optional + + :param type: The pagination type used for offset-based pagination. + :type type: PaginationMetaPageType, optional + """ + if first_offset is not unset: + kwargs["first_offset"] = first_offset + if last_offset is not unset: + kwargs["last_offset"] = last_offset + if limit is not unset: + kwargs["limit"] = limit + if next_offset is not unset: + kwargs["next_offset"] = next_offset + if offset is not unset: + kwargs["offset"] = offset + if prev_offset is not unset: + kwargs["prev_offset"] = prev_offset + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/pagination_meta_page_type.py b/datadog_api_client/v2/model/pagination_meta_page_type.py new file mode 100644 index 0000000000..c768112a2d --- /dev/null +++ b/datadog_api_client/v2/model/pagination_meta_page_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PaginationMetaPageType(ModelSimple): + """ + The pagination type used for offset-based pagination. + + :param value: If omitted defaults to "offset_limit". Must be one of ["offset_limit"]. + :type value: str + """ + + allowed_values = { + "offset_limit", + } + OFFSET_LIMIT: ClassVar["PaginationMetaPageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PaginationMetaPageType.OFFSET_LIMIT = PaginationMetaPageType("offset_limit") diff --git a/datadog_api_client/v2/model/parameter.py b/datadog_api_client/v2/model/parameter.py new file mode 100644 index 0000000000..a47d625488 --- /dev/null +++ b/datadog_api_client/v2/model/parameter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Parameter(ModelNormal): + validations = { + "name": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, value: Any, **kwargs): + """ + The definition of ``Parameter`` object. + + :param name: The ``Parameter`` ``name``. + :type name: str + + :param value: The ``Parameter`` ``value``. + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type + """ + super().__init__(kwargs) + + + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/partial_api_key.py b/datadog_api_client/v2/model/partial_api_key.py new file mode 100644 index 0000000000..86e281ed0a --- /dev/null +++ b/datadog_api_client/v2/model/partial_api_key.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.partial_api_key_attributes import PartialAPIKeyAttributes + from datadog_api_client.v2.model.api_key_relationships import APIKeyRelationships + from datadog_api_client.v2.model.api_keys_type import APIKeysType + +class PartialAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.partial_api_key_attributes import PartialAPIKeyAttributes + from datadog_api_client.v2.model.api_key_relationships import APIKeyRelationships + from datadog_api_client.v2.model.api_keys_type import APIKeysType + return { + "attributes": (PartialAPIKeyAttributes,), + "id": (str,), + "relationships": (APIKeyRelationships,), + "type": (APIKeysType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[PartialAPIKeyAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[APIKeyRelationships, UnsetType]=unset, type: Union[APIKeysType, UnsetType]=unset, **kwargs): + """ + Partial Datadog API key. + + :param attributes: Attributes of a partial API key. + :type attributes: PartialAPIKeyAttributes, optional + + :param id: ID of the API key. + :type id: str, optional + + :param relationships: Resources related to the API key. + :type relationships: APIKeyRelationships, optional + + :param type: API Keys resource type. + :type type: APIKeysType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/partial_api_key_attributes.py b/datadog_api_client/v2/model/partial_api_key_attributes.py new file mode 100644 index 0000000000..9b05fac5bb --- /dev/null +++ b/datadog_api_client/v2/model/partial_api_key_attributes.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PartialAPIKeyAttributes(ModelNormal): + validations = { + "last4": { + "max_length": 4, + "min_length": 4, + }, + } + @cached_property + def openapi_types(_): + return { + "category": (str,), + "created_at": (str,), + "date_last_used": (datetime, none_type), + "last4": (str,), + "modified_at": (str,), + "name": (str,), + "remote_config_read_enabled": (bool,), + } + attribute_map = { + "category": "category", + "created_at": "created_at", + "date_last_used": "date_last_used", + "last4": "last4", + "modified_at": "modified_at", + "name": "name", + "remote_config_read_enabled": "remote_config_read_enabled", + } + read_only_vars = { + "created_at", + "date_last_used", + "last4", + "modified_at", + } + + def __init__(self_, category: Union[str, UnsetType]=unset, created_at: Union[str, UnsetType]=unset, date_last_used: Union[datetime, none_type, UnsetType]=unset, last4: Union[str, UnsetType]=unset, modified_at: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, remote_config_read_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes of a partial API key. + + :param category: The category of the API key. + :type category: str, optional + + :param created_at: Creation date of the API key. + :type created_at: str, optional + + :param date_last_used: Date the API Key was last used. + :type date_last_used: datetime, none_type, optional + + :param last4: The last four characters of the API key. + :type last4: str, optional + + :param modified_at: Date the API key was last modified. + :type modified_at: str, optional + + :param name: Name of the API key. + :type name: str, optional + + :param remote_config_read_enabled: The remote config read enabled status. + :type remote_config_read_enabled: bool, optional + """ + if category is not unset: + kwargs["category"] = category + if created_at is not unset: + kwargs["created_at"] = created_at + if date_last_used is not unset: + kwargs["date_last_used"] = date_last_used + if last4 is not unset: + kwargs["last4"] = last4 + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if remote_config_read_enabled is not unset: + kwargs["remote_config_read_enabled"] = remote_config_read_enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/partial_application_key.py b/datadog_api_client/v2/model/partial_application_key.py new file mode 100644 index 0000000000..f2fe4d043a --- /dev/null +++ b/datadog_api_client/v2/model/partial_application_key.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.partial_application_key_attributes import PartialApplicationKeyAttributes + from datadog_api_client.v2.model.application_key_relationships import ApplicationKeyRelationships + from datadog_api_client.v2.model.application_keys_type import ApplicationKeysType + +class PartialApplicationKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.partial_application_key_attributes import PartialApplicationKeyAttributes + from datadog_api_client.v2.model.application_key_relationships import ApplicationKeyRelationships + from datadog_api_client.v2.model.application_keys_type import ApplicationKeysType + return { + "attributes": (PartialApplicationKeyAttributes,), + "id": (str,), + "relationships": (ApplicationKeyRelationships,), + "type": (ApplicationKeysType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[PartialApplicationKeyAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ApplicationKeyRelationships, UnsetType]=unset, type: Union[ApplicationKeysType, UnsetType]=unset, **kwargs): + """ + Partial Datadog application key. + + :param attributes: Attributes of a partial application key. + :type attributes: PartialApplicationKeyAttributes, optional + + :param id: ID of the application key. + :type id: str, optional + + :param relationships: Resources related to the application key. + :type relationships: ApplicationKeyRelationships, optional + + :param type: Application Keys resource type. + :type type: ApplicationKeysType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/partial_application_key_attributes.py b/datadog_api_client/v2/model/partial_application_key_attributes.py new file mode 100644 index 0000000000..e7ce91440c --- /dev/null +++ b/datadog_api_client/v2/model/partial_application_key_attributes.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PartialApplicationKeyAttributes(ModelNormal): + validations = { + "last4": { + "max_length": 4, + "min_length": 4, + }, + } + @cached_property + def openapi_types(_): + return { + "created_at": (str,), + "last4": (str,), + "last_used_at": (str, none_type), + "name": (str,), + "scopes": ([str], none_type), + } + attribute_map = { + "created_at": "created_at", + "last4": "last4", + "last_used_at": "last_used_at", + "name": "name", + "scopes": "scopes", + } + read_only_vars = { + "created_at", + "last4", + "last_used_at", + } + + def __init__(self_, created_at: Union[str, UnsetType]=unset, last4: Union[str, UnsetType]=unset, last_used_at: Union[str, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, scopes: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Attributes of a partial application key. + + :param created_at: Creation date of the application key. + :type created_at: str, optional + + :param last4: The last four characters of the application key. + :type last4: str, optional + + :param last_used_at: Last usage timestamp of the application key. + :type last_used_at: str, none_type, optional + + :param name: Name of the application key. + :type name: str, optional + + :param scopes: Array of scopes to grant the application key. + :type scopes: [str], none_type, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if last4 is not unset: + kwargs["last4"] = last4 + if last_used_at is not unset: + kwargs["last_used_at"] = last_used_at + if name is not unset: + kwargs["name"] = name + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/partial_application_key_response.py b/datadog_api_client/v2/model/partial_application_key_response.py new file mode 100644 index 0000000000..4a3bdb6198 --- /dev/null +++ b/datadog_api_client/v2/model/partial_application_key_response.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.partial_application_key import PartialApplicationKey + from datadog_api_client.v2.model.application_key_response_included_item import ApplicationKeyResponseIncludedItem + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.role import Role + from datadog_api_client.v2.model.leaked_key import LeakedKey + +class PartialApplicationKeyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.partial_application_key import PartialApplicationKey + from datadog_api_client.v2.model.application_key_response_included_item import ApplicationKeyResponseIncludedItem + return { + "data": (PartialApplicationKey,), + "included": ([ApplicationKeyResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[PartialApplicationKey, UnsetType]=unset, included: Union[List[Union[ApplicationKeyResponseIncludedItem, User, Role, LeakedKey]], UnsetType]=unset, **kwargs): + """ + Response for retrieving a partial application key. + + :param data: Partial Datadog application key. + :type data: PartialApplicationKey, optional + + :param included: Array of objects related to the application key. + :type included: [ApplicationKeyResponseIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_attachment_request.py b/datadog_api_client/v2/model/patch_attachment_request.py new file mode 100644 index 0000000000..d6d8b934fa --- /dev/null +++ b/datadog_api_client/v2/model/patch_attachment_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_attachment_request_data import PatchAttachmentRequestData + +class PatchAttachmentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_attachment_request_data import PatchAttachmentRequestData + return { + "data": (PatchAttachmentRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchAttachmentRequestData, UnsetType]=unset, **kwargs): + """ + Request to update an attachment. + + :param data: Attachment data for an update request. + :type data: PatchAttachmentRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_attachment_request_data.py b/datadog_api_client/v2/model/patch_attachment_request_data.py new file mode 100644 index 0000000000..f16e695666 --- /dev/null +++ b/datadog_api_client/v2/model/patch_attachment_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_attachment_request_data_attributes import PatchAttachmentRequestDataAttributes + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + +class PatchAttachmentRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_attachment_request_data_attributes import PatchAttachmentRequestDataAttributes + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + return { + "attributes": (PatchAttachmentRequestDataAttributes,), + "id": (str,), + "type": (IncidentAttachmentType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: IncidentAttachmentType, attributes: Union[PatchAttachmentRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Attachment data for an update request. + + :param attributes: The attributes for updating an attachment. + :type attributes: PatchAttachmentRequestDataAttributes, optional + + :param id: The unique identifier of the attachment. + :type id: str, optional + + :param type: The incident attachment resource type. + :type type: IncidentAttachmentType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/patch_attachment_request_data_attributes.py b/datadog_api_client/v2/model/patch_attachment_request_data_attributes.py new file mode 100644 index 0000000000..82df2d6cfa --- /dev/null +++ b/datadog_api_client/v2/model/patch_attachment_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_attachment_request_data_attributes_attachment import PatchAttachmentRequestDataAttributesAttachment + +class PatchAttachmentRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_attachment_request_data_attributes_attachment import PatchAttachmentRequestDataAttributesAttachment + return { + "attachment": (PatchAttachmentRequestDataAttributesAttachment,), + } + attribute_map = { + "attachment": "attachment", + } + + def __init__(self_, attachment: Union[PatchAttachmentRequestDataAttributesAttachment, UnsetType]=unset, **kwargs): + """ + The attributes for updating an attachment. + + :param attachment: The updated attachment object. + :type attachment: PatchAttachmentRequestDataAttributesAttachment, optional + """ + if attachment is not unset: + kwargs["attachment"] = attachment + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_attachment_request_data_attributes_attachment.py b/datadog_api_client/v2/model/patch_attachment_request_data_attributes_attachment.py new file mode 100644 index 0000000000..b906597ece --- /dev/null +++ b/datadog_api_client/v2/model/patch_attachment_request_data_attributes_attachment.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PatchAttachmentRequestDataAttributesAttachment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "document_url": (str,), + "title": (str,), + } + attribute_map = { + "document_url": "documentUrl", + "title": "title", + } + + def __init__(self_, document_url: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + The updated attachment object. + + :param document_url: The updated URL for the attachment. + :type document_url: str, optional + + :param title: The updated title for the attachment. + :type title: str, optional + """ + if document_url is not unset: + kwargs["document_url"] = document_url + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_component_request.py b/datadog_api_client/v2/model/patch_component_request.py new file mode 100644 index 0000000000..0a1abacdf4 --- /dev/null +++ b/datadog_api_client/v2/model/patch_component_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_component_request_data import PatchComponentRequestData + +class PatchComponentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_component_request_data import PatchComponentRequestData + return { + "data": (PatchComponentRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchComponentRequestData, UnsetType]=unset, **kwargs): + """ + Request object for updating a component. + + :param data: The data object for updating a component. + :type data: PatchComponentRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_component_request_data.py b/datadog_api_client/v2/model/patch_component_request_data.py new file mode 100644 index 0000000000..66f65fec96 --- /dev/null +++ b/datadog_api_client/v2/model/patch_component_request_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_component_request_data_attributes import PatchComponentRequestDataAttributes + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + +class PatchComponentRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_component_request_data_attributes import PatchComponentRequestDataAttributes + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + return { + "attributes": (PatchComponentRequestDataAttributes,), + "id": (UUID,), + "type": (StatusPagesComponentGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: PatchComponentRequestDataAttributes, id: UUID, type: StatusPagesComponentGroupType, **kwargs): + """ + The data object for updating a component. + + :param attributes: The supported attributes for updating a component. + :type attributes: PatchComponentRequestDataAttributes + + :param id: The ID of the component. + :type id: UUID + + :param type: Components resource type. + :type type: StatusPagesComponentGroupType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_component_request_data_attributes.py b/datadog_api_client/v2/model/patch_component_request_data_attributes.py new file mode 100644 index 0000000000..06f32e2475 --- /dev/null +++ b/datadog_api_client/v2/model/patch_component_request_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PatchComponentRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "position": (int,), + } + attribute_map = { + "name": "name", + "position": "position", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, **kwargs): + """ + The supported attributes for updating a component. + + :param name: The name of the component. + :type name: str, optional + + :param position: The position of the component. If the component belongs to a group, the position is relative to the other components in the group. + :type position: int, optional + """ + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_degradation_request.py b/datadog_api_client/v2/model/patch_degradation_request.py new file mode 100644 index 0000000000..59c1a4b776 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_request_data import PatchDegradationRequestData + from datadog_api_client.v2.model.degradation_request_meta import DegradationRequestMeta + +class PatchDegradationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_request_data import PatchDegradationRequestData + from datadog_api_client.v2.model.degradation_request_meta import DegradationRequestMeta + return { + "data": (PatchDegradationRequestData,), + "meta": (DegradationRequestMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[PatchDegradationRequestData, UnsetType]=unset, meta: Union[DegradationRequestMeta, UnsetType]=unset, **kwargs): + """ + Request object for updating a degradation. + + :param data: The data object for updating a degradation. + :type data: PatchDegradationRequestData, optional + + :param meta: The supported metadata for a degradation request. + :type meta: DegradationRequestMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_degradation_request_data.py b/datadog_api_client/v2/model/patch_degradation_request_data.py new file mode 100644 index 0000000000..b30ef5befb --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_request_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_request_data_attributes import PatchDegradationRequestDataAttributes + from datadog_api_client.v2.model.patch_degradation_request_data_relationships import PatchDegradationRequestDataRelationships + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + +class PatchDegradationRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_request_data_attributes import PatchDegradationRequestDataAttributes + from datadog_api_client.v2.model.patch_degradation_request_data_relationships import PatchDegradationRequestDataRelationships + from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType + return { + "attributes": (PatchDegradationRequestDataAttributes,), + "id": (UUID,), + "relationships": (PatchDegradationRequestDataRelationships,), + "type": (PatchDegradationRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: PatchDegradationRequestDataAttributes, id: UUID, type: PatchDegradationRequestDataType, relationships: Union[PatchDegradationRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for updating a degradation. + + :param attributes: The supported attributes for updating a degradation. + :type attributes: PatchDegradationRequestDataAttributes + + :param id: The ID of the degradation. + :type id: UUID + + :param relationships: The supported relationships for updating a degradation. + :type relationships: PatchDegradationRequestDataRelationships, optional + + :param type: Degradations resource type. + :type type: PatchDegradationRequestDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_degradation_request_data_attributes.py b/datadog_api_client/v2/model/patch_degradation_request_data_attributes.py new file mode 100644 index 0000000000..f640ebbf19 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_request_data_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_request_data_attributes_components_affected_items import PatchDegradationRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.patch_degradation_request_data_attributes_status import PatchDegradationRequestDataAttributesStatus + +class PatchDegradationRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_request_data_attributes_components_affected_items import PatchDegradationRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.patch_degradation_request_data_attributes_status import PatchDegradationRequestDataAttributesStatus + return { + "components_affected": ([PatchDegradationRequestDataAttributesComponentsAffectedItems],), + "description": (str,), + "status": (PatchDegradationRequestDataAttributesStatus,), + "title": (str,), + } + attribute_map = { + "components_affected": "components_affected", + "description": "description", + "status": "status", + "title": "title", + } + + def __init__(self_, components_affected: Union[List[PatchDegradationRequestDataAttributesComponentsAffectedItems], UnsetType]=unset, description: Union[str, UnsetType]=unset, status: Union[PatchDegradationRequestDataAttributesStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + The supported attributes for updating a degradation. + + :param components_affected: The components affected by the degradation. + :type components_affected: [PatchDegradationRequestDataAttributesComponentsAffectedItems], optional + + :param description: The description of the degradation. + :type description: str, optional + + :param status: The status of the degradation. + :type status: PatchDegradationRequestDataAttributesStatus, optional + + :param title: The title of the degradation. + :type title: str, optional + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if description is not unset: + kwargs["description"] = description + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_degradation_request_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/patch_degradation_request_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..3c76148fe5 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_request_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + +class PatchDegradationRequestDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + return { + "id": (UUID,), + "name": (str,), + "status": (StatusPagesComponentDataAttributesStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: UUID, status: StatusPagesComponentDataAttributesStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a degradation. + + :param id: The ID of the component. Must be a component of type ``component``. + :type id: UUID + + :param name: The name of the component. + :type name: str, optional + + :param status: The status of the component. + :type status: StatusPagesComponentDataAttributesStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/patch_degradation_request_data_attributes_status.py b/datadog_api_client/v2/model/patch_degradation_request_data_attributes_status.py new file mode 100644 index 0000000000..a41f77ad51 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_request_data_attributes_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchDegradationRequestDataAttributesStatus(ModelSimple): + """ + The status of the degradation. + + :param value: Must be one of ["investigating", "identified", "monitoring", "resolved"]. + :type value: str + """ + + allowed_values = { + "investigating", + "identified", + "monitoring", + "resolved", + } + INVESTIGATING: ClassVar["PatchDegradationRequestDataAttributesStatus"] + IDENTIFIED: ClassVar["PatchDegradationRequestDataAttributesStatus"] + MONITORING: ClassVar["PatchDegradationRequestDataAttributesStatus"] + RESOLVED: ClassVar["PatchDegradationRequestDataAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchDegradationRequestDataAttributesStatus.INVESTIGATING = PatchDegradationRequestDataAttributesStatus("investigating") +PatchDegradationRequestDataAttributesStatus.IDENTIFIED = PatchDegradationRequestDataAttributesStatus("identified") +PatchDegradationRequestDataAttributesStatus.MONITORING = PatchDegradationRequestDataAttributesStatus("monitoring") +PatchDegradationRequestDataAttributesStatus.RESOLVED = PatchDegradationRequestDataAttributesStatus("resolved") diff --git a/datadog_api_client/v2/model/patch_degradation_request_data_relationships.py b/datadog_api_client/v2/model/patch_degradation_request_data_relationships.py new file mode 100644 index 0000000000..eb2e370652 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_request_data_relationships_template import PatchDegradationRequestDataRelationshipsTemplate + +class PatchDegradationRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_request_data_relationships_template import PatchDegradationRequestDataRelationshipsTemplate + return { + "template": (PatchDegradationRequestDataRelationshipsTemplate,), + } + attribute_map = { + "template": "template", + } + + def __init__(self_, template: Union[PatchDegradationRequestDataRelationshipsTemplate, UnsetType]=unset, **kwargs): + """ + The supported relationships for updating a degradation. + + :param template: The template used to create the degradation. + :type template: PatchDegradationRequestDataRelationshipsTemplate, optional + """ + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_degradation_request_data_relationships_template.py b/datadog_api_client/v2/model/patch_degradation_request_data_relationships_template.py new file mode 100644 index 0000000000..9f0d19d641 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_request_data_relationships_template.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_request_data_relationships_template_data import PatchDegradationRequestDataRelationshipsTemplateData + +class PatchDegradationRequestDataRelationshipsTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_request_data_relationships_template_data import PatchDegradationRequestDataRelationshipsTemplateData + return { + "data": (PatchDegradationRequestDataRelationshipsTemplateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PatchDegradationRequestDataRelationshipsTemplateData, **kwargs): + """ + The template used to create the degradation. + + :param data: The data object identifying the template used to create the degradation. + :type data: PatchDegradationRequestDataRelationshipsTemplateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/patch_degradation_request_data_relationships_template_data.py b/datadog_api_client/v2/model/patch_degradation_request_data_relationships_template_data.py new file mode 100644 index 0000000000..22b30b5511 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_request_data_relationships_template_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + +class PatchDegradationRequestDataRelationshipsTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + return { + "id": (str,), + "type": (PatchDegradationTemplateRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchDegradationTemplateRequestDataType, **kwargs): + """ + The data object identifying the template used to create the degradation. + + :param id: The ID of the degradation template. + :type id: str + + :param type: Degradation templates resource type. + :type type: PatchDegradationTemplateRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_degradation_request_data_type.py b/datadog_api_client/v2/model/patch_degradation_request_data_type.py new file mode 100644 index 0000000000..7e18872fe1 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchDegradationRequestDataType(ModelSimple): + """ + Degradations resource type. + + :param value: If omitted defaults to "degradations". Must be one of ["degradations"]. + :type value: str + """ + + allowed_values = { + "degradations", + } + DEGRADATIONS: ClassVar["PatchDegradationRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchDegradationRequestDataType.DEGRADATIONS = PatchDegradationRequestDataType("degradations") diff --git a/datadog_api_client/v2/model/patch_degradation_template_request.py b/datadog_api_client/v2/model/patch_degradation_template_request.py new file mode 100644 index 0000000000..620d5966b3 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_template_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data import PatchDegradationTemplateRequestData + +class PatchDegradationTemplateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data import PatchDegradationTemplateRequestData + return { + "data": (PatchDegradationTemplateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchDegradationTemplateRequestData, UnsetType]=unset, **kwargs): + """ + Request object for updating a degradation template. + + :param data: The data object for updating a degradation template. + :type data: PatchDegradationTemplateRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_degradation_template_request_data.py b/datadog_api_client/v2/model/patch_degradation_template_request_data.py new file mode 100644 index 0000000000..1e535fde17 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_template_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes import PatchDegradationTemplateRequestDataAttributes + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + +class PatchDegradationTemplateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes import PatchDegradationTemplateRequestDataAttributes + from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType + return { + "attributes": (PatchDegradationTemplateRequestDataAttributes,), + "id": (str,), + "type": (PatchDegradationTemplateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchDegradationTemplateRequestDataType, attributes: Union[PatchDegradationTemplateRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object for updating a degradation template. + + :param attributes: The supported attributes for updating a degradation template. + :type attributes: PatchDegradationTemplateRequestDataAttributes, optional + + :param id: The ID of the degradation template. + :type id: str + + :param type: Degradation templates resource type. + :type type: PatchDegradationTemplateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes.py b/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes.py new file mode 100644 index 0000000000..bf6d66d176 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_updates_items import PatchDegradationTemplateRequestDataAttributesUpdatesItems + +class PatchDegradationTemplateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_updates_items import PatchDegradationTemplateRequestDataAttributesUpdatesItems + return { + "components_affected": ([PatchDegradationTemplateRequestDataAttributesComponentsAffectedItems],), + "degradation_title": (str,), + "name": (str,), + "updates": ([PatchDegradationTemplateRequestDataAttributesUpdatesItems],), + } + attribute_map = { + "components_affected": "components_affected", + "degradation_title": "degradation_title", + "name": "name", + "updates": "updates", + } + + def __init__(self_, components_affected: Union[List[PatchDegradationTemplateRequestDataAttributesComponentsAffectedItems], UnsetType]=unset, degradation_title: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, updates: Union[List[PatchDegradationTemplateRequestDataAttributesUpdatesItems], UnsetType]=unset, **kwargs): + """ + The supported attributes for updating a degradation template. + + :param components_affected: The components affected by a degradation created from this template. + :type components_affected: [PatchDegradationTemplateRequestDataAttributesComponentsAffectedItems], optional + + :param degradation_title: The title used for a degradation created from this template. + :type degradation_title: str, optional + + :param name: The name of the degradation template. + :type name: str, optional + + :param updates: The pre-filled updates for a degradation created from this template. + :type updates: [PatchDegradationTemplateRequestDataAttributesUpdatesItems], optional + """ + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if degradation_title is not unset: + kwargs["degradation_title"] = degradation_title + if name is not unset: + kwargs["name"] = name + if updates is not unset: + kwargs["updates"] = updates + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..0cc6d3f82e --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items_status import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus + +class PatchDegradationTemplateRequestDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items_status import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus + return { + "id": (str,), + "name": (str,), + "status": (PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: str, status: PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a degradation created from this template. + + :param id: The ID of the component. Must be a component of type ``component``. + :type id: str + + :param name: The name of the component. + :type name: str, optional + + :param status: The status of the component. + :type status: PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes_components_affected_items_status.py b/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes_components_affected_items_status.py new file mode 100644 index 0000000000..f44f9b98fe --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes_components_affected_items_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus(ModelSimple): + """ + The status of the component. + + :param value: Must be one of ["operational", "degraded", "partial_outage", "major_outage"]. + :type value: str + """ + + allowed_values = { + "operational", + "degraded", + "partial_outage", + "major_outage", + } + OPERATIONAL: ClassVar["PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus"] + DEGRADED: ClassVar["PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus"] + PARTIAL_OUTAGE: ClassVar["PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus"] + MAJOR_OUTAGE: ClassVar["PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus.OPERATIONAL = PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus("operational") +PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus.DEGRADED = PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus("degraded") +PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus.PARTIAL_OUTAGE = PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus("partial_outage") +PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus.MAJOR_OUTAGE = PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus("major_outage") diff --git a/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes_updates_items.py b/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes_updates_items.py new file mode 100644 index 0000000000..4c34723d70 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_template_request_data_attributes_updates_items.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + +class PatchDegradationTemplateRequestDataAttributesUpdatesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus + return { + "message": (str,), + "status": (CreateDegradationRequestDataAttributesStatus,), + } + attribute_map = { + "message": "message", + "status": "status", + } + + def __init__(self_, status: CreateDegradationRequestDataAttributesStatus, message: Union[str, UnsetType]=unset, **kwargs): + """ + A pre-filled update for a degradation created from this template. + + :param message: The message of the update. + :type message: str, optional + + :param status: The status of the degradation. + :type status: CreateDegradationRequestDataAttributesStatus + """ + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/patch_degradation_template_request_data_type.py b/datadog_api_client/v2/model/patch_degradation_template_request_data_type.py new file mode 100644 index 0000000000..fb6cc63c80 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_template_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchDegradationTemplateRequestDataType(ModelSimple): + """ + Degradation templates resource type. + + :param value: If omitted defaults to "degradation_templates". Must be one of ["degradation_templates"]. + :type value: str + """ + + allowed_values = { + "degradation_templates", + } + DEGRADATION_TEMPLATES: ClassVar["PatchDegradationTemplateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchDegradationTemplateRequestDataType.DEGRADATION_TEMPLATES = PatchDegradationTemplateRequestDataType("degradation_templates") diff --git a/datadog_api_client/v2/model/patch_degradation_update_request.py b/datadog_api_client/v2/model/patch_degradation_update_request.py new file mode 100644 index 0000000000..76ad6ee137 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_update_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_update_request_data import PatchDegradationUpdateRequestData + +class PatchDegradationUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_update_request_data import PatchDegradationUpdateRequestData + return { + "data": (PatchDegradationUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchDegradationUpdateRequestData, UnsetType]=unset, **kwargs): + """ + Request object for editing a degradation update. + + :param data: The data object for editing a degradation update. + :type data: PatchDegradationUpdateRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_degradation_update_request_data.py b/datadog_api_client/v2/model/patch_degradation_update_request_data.py new file mode 100644 index 0000000000..55f7b2fda7 --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_update_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_update_request_data_attributes import PatchDegradationUpdateRequestDataAttributes + from datadog_api_client.v2.model.patch_degradation_update_request_data_type import PatchDegradationUpdateRequestDataType + +class PatchDegradationUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_update_request_data_attributes import PatchDegradationUpdateRequestDataAttributes + from datadog_api_client.v2.model.patch_degradation_update_request_data_type import PatchDegradationUpdateRequestDataType + return { + "attributes": (PatchDegradationUpdateRequestDataAttributes,), + "id": (str,), + "type": (PatchDegradationUpdateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: PatchDegradationUpdateRequestDataType, attributes: Union[PatchDegradationUpdateRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object for editing a degradation update. + + :param attributes: Attributes for editing a degradation update. + :type attributes: PatchDegradationUpdateRequestDataAttributes, optional + + :param id: The ID of the degradation update to edit. + :type id: str, optional + + :param type: Degradation updates resource type. + :type type: PatchDegradationUpdateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/patch_degradation_update_request_data_attributes.py b/datadog_api_client/v2/model/patch_degradation_update_request_data_attributes.py new file mode 100644 index 0000000000..5e87a228ba --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_update_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_degradation_update_request_data_attributes_status import PatchDegradationUpdateRequestDataAttributesStatus + +class PatchDegradationUpdateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_degradation_update_request_data_attributes_status import PatchDegradationUpdateRequestDataAttributesStatus + return { + "description": (str,), + "status": (PatchDegradationUpdateRequestDataAttributesStatus,), + } + attribute_map = { + "description": "description", + "status": "status", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, status: Union[PatchDegradationUpdateRequestDataAttributesStatus, UnsetType]=unset, **kwargs): + """ + Attributes for editing a degradation update. + + :param description: The message body of the update. + :type description: str, optional + + :param status: The status of the degradation update. + :type status: PatchDegradationUpdateRequestDataAttributesStatus, optional + """ + if description is not unset: + kwargs["description"] = description + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_degradation_update_request_data_attributes_status.py b/datadog_api_client/v2/model/patch_degradation_update_request_data_attributes_status.py new file mode 100644 index 0000000000..0948762e9d --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_update_request_data_attributes_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchDegradationUpdateRequestDataAttributesStatus(ModelSimple): + """ + The status of the degradation update. + + :param value: Must be one of ["investigating", "identified", "monitoring"]. + :type value: str + """ + + allowed_values = { + "investigating", + "identified", + "monitoring", + } + INVESTIGATING: ClassVar["PatchDegradationUpdateRequestDataAttributesStatus"] + IDENTIFIED: ClassVar["PatchDegradationUpdateRequestDataAttributesStatus"] + MONITORING: ClassVar["PatchDegradationUpdateRequestDataAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchDegradationUpdateRequestDataAttributesStatus.INVESTIGATING = PatchDegradationUpdateRequestDataAttributesStatus("investigating") +PatchDegradationUpdateRequestDataAttributesStatus.IDENTIFIED = PatchDegradationUpdateRequestDataAttributesStatus("identified") +PatchDegradationUpdateRequestDataAttributesStatus.MONITORING = PatchDegradationUpdateRequestDataAttributesStatus("monitoring") diff --git a/datadog_api_client/v2/model/patch_degradation_update_request_data_type.py b/datadog_api_client/v2/model/patch_degradation_update_request_data_type.py new file mode 100644 index 0000000000..c72993767a --- /dev/null +++ b/datadog_api_client/v2/model/patch_degradation_update_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchDegradationUpdateRequestDataType(ModelSimple): + """ + Degradation updates resource type. + + :param value: If omitted defaults to "degradation_updates". Must be one of ["degradation_updates"]. + :type value: str + """ + + allowed_values = { + "degradation_updates", + } + DEGRADATION_UPDATES: ClassVar["PatchDegradationUpdateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchDegradationUpdateRequestDataType.DEGRADATION_UPDATES = PatchDegradationUpdateRequestDataType("degradation_updates") diff --git a/datadog_api_client/v2/model/patch_incident_notification_template_request.py b/datadog_api_client/v2/model/patch_incident_notification_template_request.py new file mode 100644 index 0000000000..8ad494f0c7 --- /dev/null +++ b/datadog_api_client/v2/model/patch_incident_notification_template_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_notification_template_update_data import IncidentNotificationTemplateUpdateData + +class PatchIncidentNotificationTemplateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_notification_template_update_data import IncidentNotificationTemplateUpdateData + return { + "data": (IncidentNotificationTemplateUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentNotificationTemplateUpdateData, **kwargs): + """ + Update request for a notification template. + + :param data: Notification template data for an update request. + :type data: IncidentNotificationTemplateUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/patch_maintenance_request.py b/datadog_api_client/v2/model/patch_maintenance_request.py new file mode 100644 index 0000000000..570e75f1a0 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data import PatchMaintenanceRequestData + +class PatchMaintenanceRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data import PatchMaintenanceRequestData + return { + "data": (PatchMaintenanceRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchMaintenanceRequestData, UnsetType]=unset, **kwargs): + """ + Request object for updating a maintenance. + + :param data: The data object for updating a maintenance. + :type data: PatchMaintenanceRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_maintenance_request_data.py b/datadog_api_client/v2/model/patch_maintenance_request_data.py new file mode 100644 index 0000000000..28e8da4687 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_request_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes import PatchMaintenanceRequestDataAttributes + from datadog_api_client.v2.model.patch_maintenance_request_data_relationships import PatchMaintenanceRequestDataRelationships + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + +class PatchMaintenanceRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes import PatchMaintenanceRequestDataAttributes + from datadog_api_client.v2.model.patch_maintenance_request_data_relationships import PatchMaintenanceRequestDataRelationships + from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType + return { + "attributes": (PatchMaintenanceRequestDataAttributes,), + "id": (UUID,), + "relationships": (PatchMaintenanceRequestDataRelationships,), + "type": (PatchMaintenanceRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: PatchMaintenanceRequestDataAttributes, id: UUID, type: PatchMaintenanceRequestDataType, relationships: Union[PatchMaintenanceRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for updating a maintenance. + + :param attributes: The supported attributes for updating a maintenance. + :type attributes: PatchMaintenanceRequestDataAttributes + + :param id: The ID of the maintenance. + :type id: UUID + + :param relationships: The supported relationships for updating a maintenance. + :type relationships: PatchMaintenanceRequestDataRelationships, optional + + :param type: Maintenances resource type. + :type type: PatchMaintenanceRequestDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_maintenance_request_data_attributes.py b/datadog_api_client/v2/model/patch_maintenance_request_data_attributes.py new file mode 100644 index 0000000000..7f35af1dc0 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_request_data_attributes.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items import PatchMaintenanceRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.maintenance_data_attributes_status import MaintenanceDataAttributesStatus + +class PatchMaintenanceRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items import PatchMaintenanceRequestDataAttributesComponentsAffectedItems + from datadog_api_client.v2.model.maintenance_data_attributes_status import MaintenanceDataAttributesStatus + return { + "canceled_description": (str,), + "completed_date": (datetime,), + "completed_description": (str,), + "components_affected": ([PatchMaintenanceRequestDataAttributesComponentsAffectedItems],), + "in_progress_description": (str,), + "scheduled_description": (str,), + "start_date": (datetime,), + "status": (MaintenanceDataAttributesStatus,), + "title": (str,), + } + attribute_map = { + "canceled_description": "canceled_description", + "completed_date": "completed_date", + "completed_description": "completed_description", + "components_affected": "components_affected", + "in_progress_description": "in_progress_description", + "scheduled_description": "scheduled_description", + "start_date": "start_date", + "status": "status", + "title": "title", + } + + def __init__(self_, canceled_description: Union[str, UnsetType]=unset, completed_date: Union[datetime, UnsetType]=unset, completed_description: Union[str, UnsetType]=unset, components_affected: Union[List[PatchMaintenanceRequestDataAttributesComponentsAffectedItems], UnsetType]=unset, in_progress_description: Union[str, UnsetType]=unset, scheduled_description: Union[str, UnsetType]=unset, start_date: Union[datetime, UnsetType]=unset, status: Union[MaintenanceDataAttributesStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + The supported attributes for updating a maintenance. + + :param canceled_description: The description shown when the maintenance is canceled. + :type canceled_description: str, optional + + :param completed_date: Timestamp of when the maintenance was completed. + :type completed_date: datetime, optional + + :param completed_description: The description shown when the maintenance is completed. + :type completed_description: str, optional + + :param components_affected: The components affected by the maintenance. + :type components_affected: [PatchMaintenanceRequestDataAttributesComponentsAffectedItems], optional + + :param in_progress_description: The description shown while the maintenance is in progress. + :type in_progress_description: str, optional + + :param scheduled_description: The description shown when the maintenance is scheduled. + :type scheduled_description: str, optional + + :param start_date: Timestamp of when the maintenance is scheduled to start. + :type start_date: datetime, optional + + :param status: The status of the maintenance. + :type status: MaintenanceDataAttributesStatus, optional + + :param title: The title of the maintenance. + :type title: str, optional + """ + if canceled_description is not unset: + kwargs["canceled_description"] = canceled_description + if completed_date is not unset: + kwargs["completed_date"] = completed_date + if completed_description is not unset: + kwargs["completed_description"] = completed_description + if components_affected is not unset: + kwargs["components_affected"] = components_affected + if in_progress_description is not unset: + kwargs["in_progress_description"] = in_progress_description + if scheduled_description is not unset: + kwargs["scheduled_description"] = scheduled_description + if start_date is not unset: + kwargs["start_date"] = start_date + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_maintenance_request_data_attributes_components_affected_items.py b/datadog_api_client/v2/model/patch_maintenance_request_data_attributes_components_affected_items.py new file mode 100644 index 0000000000..87b19de6cb --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_request_data_attributes_components_affected_items.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items_status import PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + +class PatchMaintenanceRequestDataAttributesComponentsAffectedItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items_status import PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + return { + "id": (UUID,), + "name": (str,), + "status": (PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus,), + } + attribute_map = { + "id": "id", + "name": "name", + "status": "status", + } + read_only_vars = { + "name", + } + + def __init__(self_, id: UUID, status: PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus, name: Union[str, UnsetType]=unset, **kwargs): + """ + A component affected by a maintenance. + + :param id: The ID of the component. Must be a component of type ``component``. + :type id: UUID + + :param name: The name of the component. + :type name: str, optional + + :param status: The status of the component. + :type status: PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.id = id + self_.status = status diff --git a/datadog_api_client/v2/model/patch_maintenance_request_data_attributes_components_affected_items_status.py b/datadog_api_client/v2/model/patch_maintenance_request_data_attributes_components_affected_items_status.py new file mode 100644 index 0000000000..67baeca2e9 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_request_data_attributes_components_affected_items_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus(ModelSimple): + """ + The status of the component. + + :param value: Must be one of ["operational", "maintenance"]. + :type value: str + """ + + allowed_values = { + "operational", + "maintenance", + } + OPERATIONAL: ClassVar["PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus"] + MAINTENANCE: ClassVar["PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus.OPERATIONAL = PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus("operational") +PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus.MAINTENANCE = PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus("maintenance") diff --git a/datadog_api_client/v2/model/patch_maintenance_request_data_relationships.py b/datadog_api_client/v2/model/patch_maintenance_request_data_relationships.py new file mode 100644 index 0000000000..511520c81d --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data_relationships_template import PatchMaintenanceRequestDataRelationshipsTemplate + +class PatchMaintenanceRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data_relationships_template import PatchMaintenanceRequestDataRelationshipsTemplate + return { + "template": (PatchMaintenanceRequestDataRelationshipsTemplate,), + } + attribute_map = { + "template": "template", + } + + def __init__(self_, template: Union[PatchMaintenanceRequestDataRelationshipsTemplate, UnsetType]=unset, **kwargs): + """ + The supported relationships for updating a maintenance. + + :param template: The template used to create the maintenance. + :type template: PatchMaintenanceRequestDataRelationshipsTemplate, optional + """ + if template is not unset: + kwargs["template"] = template + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_maintenance_request_data_relationships_template.py b/datadog_api_client/v2/model/patch_maintenance_request_data_relationships_template.py new file mode 100644 index 0000000000..4e65d2828d --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_request_data_relationships_template.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_request_data_relationships_template_data import PatchMaintenanceRequestDataRelationshipsTemplateData + +class PatchMaintenanceRequestDataRelationshipsTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_request_data_relationships_template_data import PatchMaintenanceRequestDataRelationshipsTemplateData + return { + "data": (PatchMaintenanceRequestDataRelationshipsTemplateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PatchMaintenanceRequestDataRelationshipsTemplateData, **kwargs): + """ + The template used to create the maintenance. + + :param data: The data object identifying the template used to create the maintenance. + :type data: PatchMaintenanceRequestDataRelationshipsTemplateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/patch_maintenance_request_data_relationships_template_data.py b/datadog_api_client/v2/model/patch_maintenance_request_data_relationships_template_data.py new file mode 100644 index 0000000000..dfa4b424c3 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_request_data_relationships_template_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + +class PatchMaintenanceRequestDataRelationshipsTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + return { + "id": (str,), + "type": (PatchMaintenanceTemplateRequestDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchMaintenanceTemplateRequestDataType, **kwargs): + """ + The data object identifying the template used to create the maintenance. + + :param id: The ID of the maintenance template. + :type id: str + + :param type: Maintenance templates resource type. + :type type: PatchMaintenanceTemplateRequestDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_maintenance_request_data_type.py b/datadog_api_client/v2/model/patch_maintenance_request_data_type.py new file mode 100644 index 0000000000..063aacbccd --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchMaintenanceRequestDataType(ModelSimple): + """ + Maintenances resource type. + + :param value: If omitted defaults to "maintenances". Must be one of ["maintenances"]. + :type value: str + """ + + allowed_values = { + "maintenances", + } + MAINTENANCES: ClassVar["PatchMaintenanceRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchMaintenanceRequestDataType.MAINTENANCES = PatchMaintenanceRequestDataType("maintenances") diff --git a/datadog_api_client/v2/model/patch_maintenance_template_request.py b/datadog_api_client/v2/model/patch_maintenance_template_request.py new file mode 100644 index 0000000000..4331f18c94 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_template_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_template_request_data import PatchMaintenanceTemplateRequestData + +class PatchMaintenanceTemplateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_template_request_data import PatchMaintenanceTemplateRequestData + return { + "data": (PatchMaintenanceTemplateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchMaintenanceTemplateRequestData, UnsetType]=unset, **kwargs): + """ + Request object for updating a maintenance template. + + :param data: The data object for updating a maintenance template. + :type data: PatchMaintenanceTemplateRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_maintenance_template_request_data.py b/datadog_api_client/v2/model/patch_maintenance_template_request_data.py new file mode 100644 index 0000000000..d296f30284 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_template_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_template_request_data_attributes import PatchMaintenanceTemplateRequestDataAttributes + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + +class PatchMaintenanceTemplateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_template_request_data_attributes import PatchMaintenanceTemplateRequestDataAttributes + from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType + return { + "attributes": (PatchMaintenanceTemplateRequestDataAttributes,), + "id": (str,), + "type": (PatchMaintenanceTemplateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchMaintenanceTemplateRequestDataType, attributes: Union[PatchMaintenanceTemplateRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object for updating a maintenance template. + + :param attributes: The supported attributes for updating a maintenance template. + :type attributes: PatchMaintenanceTemplateRequestDataAttributes, optional + + :param id: The ID of the maintenance template. + :type id: str + + :param type: Maintenance templates resource type. + :type type: PatchMaintenanceTemplateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_maintenance_template_request_data_attributes.py b/datadog_api_client/v2/model/patch_maintenance_template_request_data_attributes.py new file mode 100644 index 0000000000..6427c105c2 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_template_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PatchMaintenanceTemplateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "completed_description": (str,), + "component_ids": ([str],), + "in_progress_description": (str,), + "maintenance_title": (str,), + "name": (str,), + "scheduled_description": (str,), + } + attribute_map = { + "completed_description": "completed_description", + "component_ids": "component_ids", + "in_progress_description": "in_progress_description", + "maintenance_title": "maintenance_title", + "name": "name", + "scheduled_description": "scheduled_description", + } + + def __init__(self_, completed_description: Union[str, UnsetType]=unset, component_ids: Union[List[str], UnsetType]=unset, in_progress_description: Union[str, UnsetType]=unset, maintenance_title: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, scheduled_description: Union[str, UnsetType]=unset, **kwargs): + """ + The supported attributes for updating a maintenance template. + + :param completed_description: The description shown when a maintenance created from this template is completed. + :type completed_description: str, optional + + :param component_ids: The IDs of the components affected by a maintenance created from this template. + :type component_ids: [str], optional + + :param in_progress_description: The description shown while a maintenance created from this template is in progress. + :type in_progress_description: str, optional + + :param maintenance_title: The title used for a maintenance created from this template. + :type maintenance_title: str, optional + + :param name: The name of the maintenance template. + :type name: str, optional + + :param scheduled_description: The description shown when a maintenance created from this template is scheduled. + :type scheduled_description: str, optional + """ + if completed_description is not unset: + kwargs["completed_description"] = completed_description + if component_ids is not unset: + kwargs["component_ids"] = component_ids + if in_progress_description is not unset: + kwargs["in_progress_description"] = in_progress_description + if maintenance_title is not unset: + kwargs["maintenance_title"] = maintenance_title + if name is not unset: + kwargs["name"] = name + if scheduled_description is not unset: + kwargs["scheduled_description"] = scheduled_description + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_maintenance_template_request_data_type.py b/datadog_api_client/v2/model/patch_maintenance_template_request_data_type.py new file mode 100644 index 0000000000..1f4a527c32 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_template_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchMaintenanceTemplateRequestDataType(ModelSimple): + """ + Maintenance templates resource type. + + :param value: If omitted defaults to "maintenance_templates". Must be one of ["maintenance_templates"]. + :type value: str + """ + + allowed_values = { + "maintenance_templates", + } + MAINTENANCE_TEMPLATES: ClassVar["PatchMaintenanceTemplateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchMaintenanceTemplateRequestDataType.MAINTENANCE_TEMPLATES = PatchMaintenanceTemplateRequestDataType("maintenance_templates") diff --git a/datadog_api_client/v2/model/patch_maintenance_update_request.py b/datadog_api_client/v2/model/patch_maintenance_update_request.py new file mode 100644 index 0000000000..dbde719bc4 --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_update_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_update_request_data import PatchMaintenanceUpdateRequestData + +class PatchMaintenanceUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_update_request_data import PatchMaintenanceUpdateRequestData + return { + "data": (PatchMaintenanceUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchMaintenanceUpdateRequestData, UnsetType]=unset, **kwargs): + """ + Request object for editing a maintenance update. + + :param data: The data object for editing a maintenance update. + :type data: PatchMaintenanceUpdateRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_maintenance_update_request_data.py b/datadog_api_client/v2/model/patch_maintenance_update_request_data.py new file mode 100644 index 0000000000..e8d169fe6d --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_update_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_maintenance_update_request_data_attributes import PatchMaintenanceUpdateRequestDataAttributes + from datadog_api_client.v2.model.patch_maintenance_update_request_data_type import PatchMaintenanceUpdateRequestDataType + +class PatchMaintenanceUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_maintenance_update_request_data_attributes import PatchMaintenanceUpdateRequestDataAttributes + from datadog_api_client.v2.model.patch_maintenance_update_request_data_type import PatchMaintenanceUpdateRequestDataType + return { + "attributes": (PatchMaintenanceUpdateRequestDataAttributes,), + "id": (str,), + "type": (PatchMaintenanceUpdateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: PatchMaintenanceUpdateRequestDataType, attributes: Union[PatchMaintenanceUpdateRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object for editing a maintenance update. + + :param attributes: Attributes for editing a maintenance update. + :type attributes: PatchMaintenanceUpdateRequestDataAttributes, optional + + :param id: The ID of the maintenance update to edit. Must match the ``update_id`` path parameter. + :type id: str + + :param type: Maintenance updates resource type. + :type type: PatchMaintenanceUpdateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_maintenance_update_request_data_attributes.py b/datadog_api_client/v2/model/patch_maintenance_update_request_data_attributes.py new file mode 100644 index 0000000000..ac41e5e54a --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_update_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PatchMaintenanceUpdateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + } + attribute_map = { + "description": "description", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for editing a maintenance update. + + :param description: The message body of the update. + :type description: str, optional + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_maintenance_update_request_data_type.py b/datadog_api_client/v2/model/patch_maintenance_update_request_data_type.py new file mode 100644 index 0000000000..2703db08dc --- /dev/null +++ b/datadog_api_client/v2/model/patch_maintenance_update_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchMaintenanceUpdateRequestDataType(ModelSimple): + """ + Maintenance updates resource type. + + :param value: If omitted defaults to "maintenance_updates". Must be one of ["maintenance_updates"]. + :type value: str + """ + + allowed_values = { + "maintenance_updates", + } + MAINTENANCE_UPDATES: ClassVar["PatchMaintenanceUpdateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchMaintenanceUpdateRequestDataType.MAINTENANCE_UPDATES = PatchMaintenanceUpdateRequestDataType("maintenance_updates") diff --git a/datadog_api_client/v2/model/patch_notification_rule_parameters.py b/datadog_api_client/v2/model/patch_notification_rule_parameters.py new file mode 100644 index 0000000000..576f990f1f --- /dev/null +++ b/datadog_api_client/v2/model/patch_notification_rule_parameters.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_notification_rule_parameters_data import PatchNotificationRuleParametersData + +class PatchNotificationRuleParameters(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_notification_rule_parameters_data import PatchNotificationRuleParametersData + return { + "data": (PatchNotificationRuleParametersData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchNotificationRuleParametersData, UnsetType]=unset, **kwargs): + """ + Body of the notification rule patch request. + + :param data: Data of the notification rule patch request: the rule ID, the rule type, and the rule attributes. All fields are required. + :type data: PatchNotificationRuleParametersData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_notification_rule_parameters_data.py b/datadog_api_client/v2/model/patch_notification_rule_parameters_data.py new file mode 100644 index 0000000000..ca83149f4e --- /dev/null +++ b/datadog_api_client/v2/model/patch_notification_rule_parameters_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_notification_rule_parameters_data_attributes import PatchNotificationRuleParametersDataAttributes + from datadog_api_client.v2.model.notification_rules_type import NotificationRulesType + +class PatchNotificationRuleParametersData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_notification_rule_parameters_data_attributes import PatchNotificationRuleParametersDataAttributes + from datadog_api_client.v2.model.notification_rules_type import NotificationRulesType + return { + "attributes": (PatchNotificationRuleParametersDataAttributes,), + "id": (str,), + "type": (NotificationRulesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: PatchNotificationRuleParametersDataAttributes, id: str, type: NotificationRulesType, **kwargs): + """ + Data of the notification rule patch request: the rule ID, the rule type, and the rule attributes. All fields are required. + + :param attributes: Attributes of the notification rule patch request. It is required to update the version of the rule when patching it. + :type attributes: PatchNotificationRuleParametersDataAttributes + + :param id: The ID of a notification rule. + :type id: str + + :param type: The rule type associated to notification rules. + :type type: NotificationRulesType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_notification_rule_parameters_data_attributes.py b/datadog_api_client/v2/model/patch_notification_rule_parameters_data_attributes.py new file mode 100644 index 0000000000..6a5d29fa9a --- /dev/null +++ b/datadog_api_client/v2/model/patch_notification_rule_parameters_data_attributes.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.notification_rule_routing import NotificationRuleRouting + from datadog_api_client.v2.model.selectors import Selectors + +class PatchNotificationRuleParametersDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.notification_rule_routing import NotificationRuleRouting + from datadog_api_client.v2.model.selectors import Selectors + return { + "enabled": (bool,), + "name": (str,), + "routing": (NotificationRuleRouting,), + "selectors": (Selectors,), + "targets": ([str],), + "time_aggregation": (int,), + "version": (int,), + } + attribute_map = { + "enabled": "enabled", + "name": "name", + "routing": "routing", + "selectors": "selectors", + "targets": "targets", + "time_aggregation": "time_aggregation", + "version": "version", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, routing: Union[NotificationRuleRouting, UnsetType]=unset, selectors: Union[Selectors, UnsetType]=unset, targets: Union[List[str], UnsetType]=unset, time_aggregation: Union[int, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of the notification rule patch request. It is required to update the version of the rule when patching it. + + :param enabled: Field used to enable or disable the rule. + :type enabled: bool, optional + + :param name: Name of the notification rule. + :type name: str, optional + + :param routing: Routing configuration for the notification rule. + :type routing: NotificationRuleRouting, optional + + :param selectors: Selectors are used to filter security issues for which notifications should be generated. + Users can specify rule severities, rule types, a query to filter security issues on tags and attributes, and the trigger source. + Only the trigger_source field is required. + :type selectors: Selectors, optional + + :param targets: List of recipients to notify when a notification rule is triggered. Many different target types are supported, + such as email addresses, Slack channels, and PagerDuty services. + The appropriate integrations need to be properly configured to send notifications to the specified targets. + :type targets: [str], optional + + :param time_aggregation: Time aggregation period (in seconds) is used to aggregate the results of the notification rule evaluation. + Results are aggregated over a selected time frame using a rolling window, which updates with each new evaluation. + Notifications are only sent for new issues discovered during the window. + Time aggregation is only available for vulnerability-based notification rules. When omitted or set to 0, no aggregation + is done. + :type time_aggregation: int, optional + + :param version: Version of the notification rule. It is updated when the rule is modified. + :type version: int, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if name is not unset: + kwargs["name"] = name + if routing is not unset: + kwargs["routing"] = routing + if selectors is not unset: + kwargs["selectors"] = selectors + if targets is not unset: + kwargs["targets"] = targets + if time_aggregation is not unset: + kwargs["time_aggregation"] = time_aggregation + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_status_page_request.py b/datadog_api_client/v2/model/patch_status_page_request.py new file mode 100644 index 0000000000..cdbd341fd4 --- /dev/null +++ b/datadog_api_client/v2/model/patch_status_page_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_status_page_request_data import PatchStatusPageRequestData + +class PatchStatusPageRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_status_page_request_data import PatchStatusPageRequestData + return { + "data": (PatchStatusPageRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchStatusPageRequestData, UnsetType]=unset, **kwargs): + """ + Request object for updating a status page. + + :param data: The data object for updating a status page. + :type data: PatchStatusPageRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_status_page_request_data.py b/datadog_api_client/v2/model/patch_status_page_request_data.py new file mode 100644 index 0000000000..ceaf0d2b7a --- /dev/null +++ b/datadog_api_client/v2/model/patch_status_page_request_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_status_page_request_data_attributes import PatchStatusPageRequestDataAttributes + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class PatchStatusPageRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_status_page_request_data_attributes import PatchStatusPageRequestDataAttributes + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "attributes": (PatchStatusPageRequestDataAttributes,), + "id": (UUID,), + "type": (StatusPageDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: PatchStatusPageRequestDataAttributes, id: UUID, type: StatusPageDataType, **kwargs): + """ + The data object for updating a status page. + + :param attributes: The supported attributes for updating a status page. + :type attributes: PatchStatusPageRequestDataAttributes + + :param id: The ID of the status page. + :type id: UUID + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/patch_status_page_request_data_attributes.py b/datadog_api_client/v2/model/patch_status_page_request_data_attributes.py new file mode 100644 index 0000000000..03cefcf81e --- /dev/null +++ b/datadog_api_client/v2/model/patch_status_page_request_data_attributes.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_status_page_request_data_attributes_type import CreateStatusPageRequestDataAttributesType + from datadog_api_client.v2.model.create_status_page_request_data_attributes_visualization_type import CreateStatusPageRequestDataAttributesVisualizationType + +class PatchStatusPageRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_status_page_request_data_attributes_type import CreateStatusPageRequestDataAttributesType + from datadog_api_client.v2.model.create_status_page_request_data_attributes_visualization_type import CreateStatusPageRequestDataAttributesVisualizationType + return { + "company_logo": (str,), + "domain_prefix": (str,), + "email_header_image": (str,), + "favicon": (str,), + "name": (str,), + "slack_app_icon": (str,), + "slack_subscriptions_enabled": (bool,), + "subscriptions_enabled": (bool,), + "type": (CreateStatusPageRequestDataAttributesType,), + "visualization_type": (CreateStatusPageRequestDataAttributesVisualizationType,), + } + attribute_map = { + "company_logo": "company_logo", + "domain_prefix": "domain_prefix", + "email_header_image": "email_header_image", + "favicon": "favicon", + "name": "name", + "slack_app_icon": "slack_app_icon", + "slack_subscriptions_enabled": "slack_subscriptions_enabled", + "subscriptions_enabled": "subscriptions_enabled", + "type": "type", + "visualization_type": "visualization_type", + } + + def __init__(self_, company_logo: Union[str, UnsetType]=unset, domain_prefix: Union[str, UnsetType]=unset, email_header_image: Union[str, UnsetType]=unset, favicon: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, slack_app_icon: Union[str, UnsetType]=unset, slack_subscriptions_enabled: Union[bool, UnsetType]=unset, subscriptions_enabled: Union[bool, UnsetType]=unset, type: Union[CreateStatusPageRequestDataAttributesType, UnsetType]=unset, visualization_type: Union[CreateStatusPageRequestDataAttributesVisualizationType, UnsetType]=unset, **kwargs): + """ + The supported attributes for updating a status page. + + :param company_logo: The base64-encoded image data displayed on the status page. + :type company_logo: str, optional + + :param domain_prefix: The subdomain of the status page's url taking the form ``https://{domain_prefix}.statuspage.datadoghq.com``. Globally unique across Datadog Status Pages. + :type domain_prefix: str, optional + + :param email_header_image: The base64-encoded image data displayed in email notifications sent to status page subscribers. + :type email_header_image: str, optional + + :param favicon: The base64-encoded image data displayed in the browser tab. + :type favicon: str, optional + + :param name: The name of the status page. + :type name: str, optional + + :param slack_app_icon: The Slack app icon URL for the status page. + :type slack_app_icon: str, optional + + :param slack_subscriptions_enabled: Whether Slack subscriptions are enabled for the status page. + :type slack_subscriptions_enabled: bool, optional + + :param subscriptions_enabled: Whether users can subscribe to the status page. + :type subscriptions_enabled: bool, optional + + :param type: The type of the status page controlling how the status page is accessed. + :type type: CreateStatusPageRequestDataAttributesType, optional + + :param visualization_type: The visualization type of the status page. + :type visualization_type: CreateStatusPageRequestDataAttributesVisualizationType, optional + """ + if company_logo is not unset: + kwargs["company_logo"] = company_logo + if domain_prefix is not unset: + kwargs["domain_prefix"] = domain_prefix + if email_header_image is not unset: + kwargs["email_header_image"] = email_header_image + if favicon is not unset: + kwargs["favicon"] = favicon + if name is not unset: + kwargs["name"] = name + if slack_app_icon is not unset: + kwargs["slack_app_icon"] = slack_app_icon + if slack_subscriptions_enabled is not unset: + kwargs["slack_subscriptions_enabled"] = slack_subscriptions_enabled + if subscriptions_enabled is not unset: + kwargs["subscriptions_enabled"] = subscriptions_enabled + if type is not unset: + kwargs["type"] = type + if visualization_type is not unset: + kwargs["visualization_type"] = visualization_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_table_request.py b/datadog_api_client/v2/model/patch_table_request.py new file mode 100644 index 0000000000..19c0229e43 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_table_request_data import PatchTableRequestData + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_cloud_storage import PatchTableRequestDataAttributesFileMetadataCloudStorage + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_local_file import PatchTableRequestDataAttributesFileMetadataLocalFile + +class PatchTableRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_table_request_data import PatchTableRequestData + return { + "data": (PatchTableRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PatchTableRequestData, UnsetType]=unset, **kwargs): + """ + Request body for updating an existing reference table. + + :param data: The data object containing the partial table definition updates. + :type data: PatchTableRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_table_request_data.py b/datadog_api_client/v2/model/patch_table_request_data.py new file mode 100644 index 0000000000..4242a96efb --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_table_request_data_attributes import PatchTableRequestDataAttributes + from datadog_api_client.v2.model.patch_table_request_data_type import PatchTableRequestDataType + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_cloud_storage import PatchTableRequestDataAttributesFileMetadataCloudStorage + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_local_file import PatchTableRequestDataAttributesFileMetadataLocalFile + +class PatchTableRequestData(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_table_request_data_attributes import PatchTableRequestDataAttributes + from datadog_api_client.v2.model.patch_table_request_data_type import PatchTableRequestDataType + return { + "attributes": (PatchTableRequestDataAttributes,), + "type": (PatchTableRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: PatchTableRequestDataType, attributes: Union[PatchTableRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object containing the partial table definition updates. + + :param attributes: Attributes that define the updates to the reference table's configuration and properties. + :type attributes: PatchTableRequestDataAttributes, optional + + :param type: Reference table resource type. + :type type: PatchTableRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes.py b/datadog_api_client/v2/model/patch_table_request_data_attributes.py new file mode 100644 index 0000000000..c48dfbf7d7 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata import PatchTableRequestDataAttributesFileMetadata + from datadog_api_client.v2.model.patch_table_request_data_attributes_schema import PatchTableRequestDataAttributesSchema + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_cloud_storage import PatchTableRequestDataAttributesFileMetadataCloudStorage + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_local_file import PatchTableRequestDataAttributesFileMetadataLocalFile + +class PatchTableRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata import PatchTableRequestDataAttributesFileMetadata + from datadog_api_client.v2.model.patch_table_request_data_attributes_schema import PatchTableRequestDataAttributesSchema + return { + "description": (str,), + "file_metadata": (PatchTableRequestDataAttributesFileMetadata,), + "schema": (PatchTableRequestDataAttributesSchema,), + "tags": ([str],), + } + attribute_map = { + "description": "description", + "file_metadata": "file_metadata", + "schema": "schema", + "tags": "tags", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, file_metadata: Union[PatchTableRequestDataAttributesFileMetadata, PatchTableRequestDataAttributesFileMetadataCloudStorage, PatchTableRequestDataAttributesFileMetadataLocalFile, UnsetType]=unset, schema: Union[PatchTableRequestDataAttributesSchema, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes that define the updates to the reference table's configuration and properties. + + :param description: Optional text describing the purpose or contents of this reference table. + :type description: str, optional + + :param file_metadata: Metadata specifying where and how to access the reference table's data file. + :type file_metadata: PatchTableRequestDataAttributesFileMetadata, optional + + :param schema: Schema defining the updates to the structure and columns of the reference table. Schema fields cannot be deleted or renamed. + :type schema: PatchTableRequestDataAttributesSchema, optional + + :param tags: Tags for organizing and filtering reference tables. + :type tags: [str], optional + """ + if description is not unset: + kwargs["description"] = description + if file_metadata is not unset: + kwargs["file_metadata"] = file_metadata + if schema is not unset: + kwargs["schema"] = schema + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata.py b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata.py new file mode 100644 index 0000000000..2eae304009 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PatchTableRequestDataAttributesFileMetadata(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Metadata specifying where and how to access the reference table's data file. + + :param access_details: Cloud storage access configuration for the reference table data file. + :type access_details: PatchTableRequestDataAttributesFileMetadataOneOfAccessDetails, optional + + :param sync_enabled: Whether this table is synced automatically. + :type sync_enabled: bool, optional + + :param upload_id: The upload ID. + :type upload_id: str + """ + 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.patch_table_request_data_attributes_file_metadata_cloud_storage import PatchTableRequestDataAttributesFileMetadataCloudStorage + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_local_file import PatchTableRequestDataAttributesFileMetadataLocalFile + return { + "oneOf": [ + PatchTableRequestDataAttributesFileMetadataCloudStorage, + PatchTableRequestDataAttributesFileMetadataLocalFile, + ], + } diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_cloud_storage.py b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_cloud_storage.py new file mode 100644 index 0000000000..f33d38bf49 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_cloud_storage.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetails + +class PatchTableRequestDataAttributesFileMetadataCloudStorage(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetails + return { + "access_details": (PatchTableRequestDataAttributesFileMetadataOneOfAccessDetails,), + "sync_enabled": (bool,), + } + attribute_map = { + "access_details": "access_details", + "sync_enabled": "sync_enabled", + } + + def __init__(self_, access_details: Union[PatchTableRequestDataAttributesFileMetadataOneOfAccessDetails, UnsetType]=unset, sync_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Cloud storage file metadata for patch requests. Allows partial updates of access_details and sync_enabled. + + :param access_details: Cloud storage access configuration for the reference table data file. + :type access_details: PatchTableRequestDataAttributesFileMetadataOneOfAccessDetails, optional + + :param sync_enabled: Whether this table is synced automatically. + :type sync_enabled: bool, optional + """ + if access_details is not unset: + kwargs["access_details"] = access_details + if sync_enabled is not unset: + kwargs["sync_enabled"] = sync_enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_local_file.py b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_local_file.py new file mode 100644 index 0000000000..16099faf98 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_local_file.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PatchTableRequestDataAttributesFileMetadataLocalFile(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "upload_id": (str,), + } + attribute_map = { + "upload_id": "upload_id", + } + + def __init__(self_, upload_id: str, **kwargs): + """ + Local file metadata for patch requests using upload ID. + + :param upload_id: The upload ID. + :type upload_id: str + """ + super().__init__(kwargs) + + + self_.upload_id = upload_id diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details.py b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details.py new file mode 100644 index 0000000000..90f079b11c --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail + +class PatchTableRequestDataAttributesFileMetadataOneOfAccessDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail + from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail + return { + "aws_detail": (PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail,), + "azure_detail": (PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail,), + "gcp_detail": (PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail,), + } + attribute_map = { + "aws_detail": "aws_detail", + "azure_detail": "azure_detail", + "gcp_detail": "gcp_detail", + } + + def __init__(self_, aws_detail: Union[PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail, UnsetType]=unset, azure_detail: Union[PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail, UnsetType]=unset, gcp_detail: Union[PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail, UnsetType]=unset, **kwargs): + """ + Cloud storage access configuration for the reference table data file. + + :param aws_detail: Amazon Web Services S3 storage access configuration. + :type aws_detail: PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail, optional + + :param azure_detail: Azure Blob Storage access configuration. + :type azure_detail: PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail, optional + + :param gcp_detail: Google Cloud Platform storage access configuration. + :type gcp_detail: PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail, optional + """ + if aws_detail is not unset: + kwargs["aws_detail"] = aws_detail + if azure_detail is not unset: + kwargs["azure_detail"] = azure_detail + if gcp_detail is not unset: + kwargs["gcp_detail"] = gcp_detail + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail.py b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail.py new file mode 100644 index 0000000000..7ffd084e3d --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aws_account_id": (str,), + "aws_bucket_name": (str,), + "file_path": (str,), + } + attribute_map = { + "aws_account_id": "aws_account_id", + "aws_bucket_name": "aws_bucket_name", + "file_path": "file_path", + } + + def __init__(self_, aws_account_id: Union[str, UnsetType]=unset, aws_bucket_name: Union[str, UnsetType]=unset, file_path: Union[str, UnsetType]=unset, **kwargs): + """ + Amazon Web Services S3 storage access configuration. + + :param aws_account_id: AWS account ID where the S3 bucket is located. + :type aws_account_id: str, optional + + :param aws_bucket_name: S3 bucket containing the CSV file. + :type aws_bucket_name: str, optional + + :param file_path: The relative file path from the S3 bucket root to the CSV file. + :type file_path: str, optional + """ + if aws_account_id is not unset: + kwargs["aws_account_id"] = aws_account_id + if aws_bucket_name is not unset: + kwargs["aws_bucket_name"] = aws_bucket_name + if file_path is not unset: + kwargs["file_path"] = file_path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail.py b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail.py new file mode 100644 index 0000000000..092cc1d2e7 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "azure_client_id": (str,), + "azure_container_name": (str,), + "azure_storage_account_name": (str,), + "azure_tenant_id": (str,), + "file_path": (str,), + } + attribute_map = { + "azure_client_id": "azure_client_id", + "azure_container_name": "azure_container_name", + "azure_storage_account_name": "azure_storage_account_name", + "azure_tenant_id": "azure_tenant_id", + "file_path": "file_path", + } + + def __init__(self_, azure_client_id: Union[str, UnsetType]=unset, azure_container_name: Union[str, UnsetType]=unset, azure_storage_account_name: Union[str, UnsetType]=unset, azure_tenant_id: Union[str, UnsetType]=unset, file_path: Union[str, UnsetType]=unset, **kwargs): + """ + Azure Blob Storage access configuration. + + :param azure_client_id: Azure service principal (application) client ID with permissions to read from the container. + :type azure_client_id: str, optional + + :param azure_container_name: Azure Blob Storage container containing the CSV file. + :type azure_container_name: str, optional + + :param azure_storage_account_name: Azure storage account where the container is located. + :type azure_storage_account_name: str, optional + + :param azure_tenant_id: Azure Active Directory tenant ID. + :type azure_tenant_id: str, optional + + :param file_path: The relative file path from the Azure container root to the CSV file. + :type file_path: str, optional + """ + if azure_client_id is not unset: + kwargs["azure_client_id"] = azure_client_id + if azure_container_name is not unset: + kwargs["azure_container_name"] = azure_container_name + if azure_storage_account_name is not unset: + kwargs["azure_storage_account_name"] = azure_storage_account_name + if azure_tenant_id is not unset: + kwargs["azure_tenant_id"] = azure_tenant_id + if file_path is not unset: + kwargs["file_path"] = file_path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail.py b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail.py new file mode 100644 index 0000000000..7a8e7cc769 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "file_path": (str,), + "gcp_bucket_name": (str,), + "gcp_project_id": (str,), + "gcp_service_account_email": (str,), + } + attribute_map = { + "file_path": "file_path", + "gcp_bucket_name": "gcp_bucket_name", + "gcp_project_id": "gcp_project_id", + "gcp_service_account_email": "gcp_service_account_email", + } + + def __init__(self_, file_path: Union[str, UnsetType]=unset, gcp_bucket_name: Union[str, UnsetType]=unset, gcp_project_id: Union[str, UnsetType]=unset, gcp_service_account_email: Union[str, UnsetType]=unset, **kwargs): + """ + Google Cloud Platform storage access configuration. + + :param file_path: The relative file path from the GCS bucket root to the CSV file. + :type file_path: str, optional + + :param gcp_bucket_name: GCP bucket containing the CSV file. + :type gcp_bucket_name: str, optional + + :param gcp_project_id: GCP project ID where the bucket is located. + :type gcp_project_id: str, optional + + :param gcp_service_account_email: Service account email with read permissions for the GCS bucket. + :type gcp_service_account_email: str, optional + """ + if file_path is not unset: + kwargs["file_path"] = file_path + if gcp_bucket_name is not unset: + kwargs["gcp_bucket_name"] = gcp_bucket_name + if gcp_project_id is not unset: + kwargs["gcp_project_id"] = gcp_project_id + if gcp_service_account_email is not unset: + kwargs["gcp_service_account_email"] = gcp_service_account_email + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes_schema.py b/datadog_api_client/v2/model/patch_table_request_data_attributes_schema.py new file mode 100644 index 0000000000..60b9354ee2 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes_schema.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.patch_table_request_data_attributes_schema_fields_items import PatchTableRequestDataAttributesSchemaFieldsItems + +class PatchTableRequestDataAttributesSchema(ModelNormal): + validations = { + "fields": { + "max_items": 200, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.patch_table_request_data_attributes_schema_fields_items import PatchTableRequestDataAttributesSchemaFieldsItems + return { + "fields": ([PatchTableRequestDataAttributesSchemaFieldsItems],), + "primary_keys": ([str],), + } + attribute_map = { + "fields": "fields", + "primary_keys": "primary_keys", + } + + def __init__(self_, fields: List[PatchTableRequestDataAttributesSchemaFieldsItems], primary_keys: List[str], **kwargs): + """ + Schema defining the updates to the structure and columns of the reference table. Schema fields cannot be deleted or renamed. + + :param fields: The schema fields. Maximum of 200 columns. + :type fields: [PatchTableRequestDataAttributesSchemaFieldsItems] + + :param primary_keys: List of field names that serve as primary keys for the table. Only one primary key is supported, and it is used as an ID to retrieve rows. Primary keys cannot be changed after table creation. + :type primary_keys: [str] + """ + super().__init__(kwargs) + + + self_.fields = fields + self_.primary_keys = primary_keys diff --git a/datadog_api_client/v2/model/patch_table_request_data_attributes_schema_fields_items.py b/datadog_api_client/v2/model/patch_table_request_data_attributes_schema_fields_items.py new file mode 100644 index 0000000000..1282632e26 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_attributes_schema_fields_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.reference_table_schema_field_type import ReferenceTableSchemaFieldType + +class PatchTableRequestDataAttributesSchemaFieldsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.reference_table_schema_field_type import ReferenceTableSchemaFieldType + return { + "name": (str,), + "type": (ReferenceTableSchemaFieldType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: ReferenceTableSchemaFieldType, **kwargs): + """ + A single field (column) in the reference table schema to be updated. Schema fields cannot be deleted or renamed. + + :param name: The field name. + :type name: str + + :param type: The field type for reference table schema fields. + :type type: ReferenceTableSchemaFieldType + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/patch_table_request_data_type.py b/datadog_api_client/v2/model/patch_table_request_data_type.py new file mode 100644 index 0000000000..e773e77c62 --- /dev/null +++ b/datadog_api_client/v2/model/patch_table_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PatchTableRequestDataType(ModelSimple): + """ + Reference table resource type. + + :param value: If omitted defaults to "reference_table". Must be one of ["reference_table"]. + :type value: str + """ + + allowed_values = { + "reference_table", + } + REFERENCE_TABLE: ClassVar["PatchTableRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PatchTableRequestDataType.REFERENCE_TABLE = PatchTableRequestDataType("reference_table") diff --git a/datadog_api_client/v2/model/permission.py b/datadog_api_client/v2/model/permission.py new file mode 100644 index 0000000000..27c267b03a --- /dev/null +++ b/datadog_api_client/v2/model/permission.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.permission_attributes import PermissionAttributes + from datadog_api_client.v2.model.permissions_type import PermissionsType + +class Permission(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.permission_attributes import PermissionAttributes + from datadog_api_client.v2.model.permissions_type import PermissionsType + return { + "attributes": (PermissionAttributes,), + "id": (str,), + "type": (PermissionsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: PermissionsType, attributes: Union[PermissionAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Permission object. + + :param attributes: Attributes of a permission. + :type attributes: PermissionAttributes, optional + + :param id: ID of the permission. + :type id: str, optional + + :param type: Permissions resource type. + :type type: PermissionsType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/permission_attributes.py b/datadog_api_client/v2/model/permission_attributes.py new file mode 100644 index 0000000000..7fc7110aae --- /dev/null +++ b/datadog_api_client/v2/model/permission_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PermissionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created": (datetime,), + "description": (str,), + "display_name": (str,), + "display_type": (str,), + "group_name": (str,), + "name": (str,), + "name_aliases": ([str],), + "restricted": (bool,), + } + attribute_map = { + "created": "created", + "description": "description", + "display_name": "display_name", + "display_type": "display_type", + "group_name": "group_name", + "name": "name", + "name_aliases": "name_aliases", + "restricted": "restricted", + } + + def __init__(self_, created: Union[datetime, UnsetType]=unset, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, display_type: Union[str, UnsetType]=unset, group_name: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, name_aliases: Union[List[str], UnsetType]=unset, restricted: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes of a permission. + + :param created: Creation time of the permission. + :type created: datetime, optional + + :param description: Description of the permission. + :type description: str, optional + + :param display_name: Displayed name for the permission. + :type display_name: str, optional + + :param display_type: Display type. + :type display_type: str, optional + + :param group_name: Name of the permission group. + :type group_name: str, optional + + :param name: Name of the permission. + :type name: str, optional + + :param name_aliases: List of alias names for the permission. + :type name_aliases: [str], optional + + :param restricted: Whether or not the permission is restricted. + :type restricted: bool, optional + """ + if created is not unset: + kwargs["created"] = created + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if display_type is not unset: + kwargs["display_type"] = display_type + if group_name is not unset: + kwargs["group_name"] = group_name + if name is not unset: + kwargs["name"] = name + if name_aliases is not unset: + kwargs["name_aliases"] = name_aliases + if restricted is not unset: + kwargs["restricted"] = restricted + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/permissions_response.py b/datadog_api_client/v2/model/permissions_response.py new file mode 100644 index 0000000000..ac90b631c1 --- /dev/null +++ b/datadog_api_client/v2/model/permissions_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.permission import Permission + +class PermissionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.permission import Permission + return { + "data": ([Permission],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[Permission], UnsetType]=unset, **kwargs): + """ + Payload with API-returned permissions. + + :param data: Array of permissions. + :type data: [Permission], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/permissions_type.py b/datadog_api_client/v2/model/permissions_type.py new file mode 100644 index 0000000000..d4cdc4b582 --- /dev/null +++ b/datadog_api_client/v2/model/permissions_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PermissionsType(ModelSimple): + """ + Permissions resource type. + + :param value: If omitted defaults to "permissions". Must be one of ["permissions"]. + :type value: str + """ + + allowed_values = { + "permissions", + } + PERMISSIONS: ClassVar["PermissionsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PermissionsType.PERMISSIONS = PermissionsType("permissions") diff --git a/datadog_api_client/v2/model/personal_access_token.py b/datadog_api_client/v2/model/personal_access_token.py new file mode 100644 index 0000000000..a8b3a01fd6 --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.personal_access_token_attributes import PersonalAccessTokenAttributes + from datadog_api_client.v2.model.personal_access_token_relationships import PersonalAccessTokenRelationships + from datadog_api_client.v2.model.personal_access_tokens_type import PersonalAccessTokensType + +class PersonalAccessToken(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.personal_access_token_attributes import PersonalAccessTokenAttributes + from datadog_api_client.v2.model.personal_access_token_relationships import PersonalAccessTokenRelationships + from datadog_api_client.v2.model.personal_access_tokens_type import PersonalAccessTokensType + return { + "attributes": (PersonalAccessTokenAttributes,), + "id": (str,), + "relationships": (PersonalAccessTokenRelationships,), + "type": (PersonalAccessTokensType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[PersonalAccessTokenAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[PersonalAccessTokenRelationships, UnsetType]=unset, type: Union[PersonalAccessTokensType, UnsetType]=unset, **kwargs): + """ + Datadog access token. + + :param attributes: Attributes of an access token. + :type attributes: PersonalAccessTokenAttributes, optional + + :param id: ID of the access token. + :type id: str, optional + + :param relationships: Resources related to the access token. + :type relationships: PersonalAccessTokenRelationships, optional + + :param type: Personal access tokens resource type. + :type type: PersonalAccessTokensType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/personal_access_token_attributes.py b/datadog_api_client/v2/model/personal_access_token_attributes.py new file mode 100644 index 0000000000..f3b7c85772 --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PersonalAccessTokenAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "expires_at": (datetime, none_type), + "last_used_at": (datetime, none_type), + "modified_at": (datetime, none_type), + "name": (str,), + "public_portion": (str,), + "scopes": ([str],), + } + attribute_map = { + "created_at": "created_at", + "expires_at": "expires_at", + "last_used_at": "last_used_at", + "modified_at": "modified_at", + "name": "name", + "public_portion": "public_portion", + "scopes": "scopes", + } + read_only_vars = { + "created_at", + "expires_at", + "last_used_at", + "modified_at", + "public_portion", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, expires_at: Union[datetime, none_type, UnsetType]=unset, last_used_at: Union[datetime, none_type, UnsetType]=unset, modified_at: Union[datetime, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, public_portion: Union[str, UnsetType]=unset, scopes: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of an access token. + + :param created_at: Creation date of the access token. + :type created_at: datetime, optional + + :param expires_at: Expiration date of the access token. + :type expires_at: datetime, none_type, optional + + :param last_used_at: Date the access token was last used. + :type last_used_at: datetime, none_type, optional + + :param modified_at: Date of last modification of the access token. + :type modified_at: datetime, none_type, optional + + :param name: Name of the access token. + :type name: str, optional + + :param public_portion: The public portion of the access token. + :type public_portion: str, optional + + :param scopes: Array of scopes granted to the access token. + :type scopes: [str], optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if expires_at is not unset: + kwargs["expires_at"] = expires_at + if last_used_at is not unset: + kwargs["last_used_at"] = last_used_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if public_portion is not unset: + kwargs["public_portion"] = public_portion + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/personal_access_token_create_attributes.py b/datadog_api_client/v2/model/personal_access_token_create_attributes.py new file mode 100644 index 0000000000..bd3bd5abbc --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_create_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PersonalAccessTokenCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "expires_at": (datetime,), + "name": (str,), + "scopes": ([str],), + } + attribute_map = { + "expires_at": "expires_at", + "name": "name", + "scopes": "scopes", + } + + def __init__(self_, expires_at: datetime, name: str, scopes: List[str], **kwargs): + """ + Attributes used to create an access token. + + :param expires_at: Expiration date of the access token. Must be at least 24 hours in the future. + :type expires_at: datetime + + :param name: Name of the access token. + :type name: str + + :param scopes: Array of scopes to grant the access token. + :type scopes: [str] + """ + super().__init__(kwargs) + + + self_.expires_at = expires_at + self_.name = name + self_.scopes = scopes diff --git a/datadog_api_client/v2/model/personal_access_token_create_data.py b/datadog_api_client/v2/model/personal_access_token_create_data.py new file mode 100644 index 0000000000..1d690e4e3e --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.personal_access_token_create_attributes import PersonalAccessTokenCreateAttributes + from datadog_api_client.v2.model.personal_access_tokens_type import PersonalAccessTokensType + +class PersonalAccessTokenCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.personal_access_token_create_attributes import PersonalAccessTokenCreateAttributes + from datadog_api_client.v2.model.personal_access_tokens_type import PersonalAccessTokensType + return { + "attributes": (PersonalAccessTokenCreateAttributes,), + "type": (PersonalAccessTokensType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: PersonalAccessTokenCreateAttributes, type: PersonalAccessTokensType, **kwargs): + """ + Object used to create an access token. + + :param attributes: Attributes used to create an access token. + :type attributes: PersonalAccessTokenCreateAttributes + + :param type: Personal access tokens resource type. + :type type: PersonalAccessTokensType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/personal_access_token_create_request.py b/datadog_api_client/v2/model/personal_access_token_create_request.py new file mode 100644 index 0000000000..05df097cf2 --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.personal_access_token_create_data import PersonalAccessTokenCreateData + +class PersonalAccessTokenCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.personal_access_token_create_data import PersonalAccessTokenCreateData + return { + "data": (PersonalAccessTokenCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PersonalAccessTokenCreateData, **kwargs): + """ + Request used to create an access token. + + :param data: Object used to create an access token. + :type data: PersonalAccessTokenCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/personal_access_token_create_response.py b/datadog_api_client/v2/model/personal_access_token_create_response.py new file mode 100644 index 0000000000..63093841cc --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_personal_access_token import FullPersonalAccessToken + +class PersonalAccessTokenCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_personal_access_token import FullPersonalAccessToken + return { + "data": (FullPersonalAccessToken,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[FullPersonalAccessToken, UnsetType]=unset, **kwargs): + """ + Response for creating an access token. Includes the token key. + + :param data: Datadog access token, including the token key. + :type data: FullPersonalAccessToken, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/personal_access_token_relationships.py b/datadog_api_client/v2/model/personal_access_token_relationships.py new file mode 100644 index 0000000000..ac25795947 --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + +class PersonalAccessTokenRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + return { + "owned_by": (RelationshipToUser,), + } + attribute_map = { + "owned_by": "owned_by", + } + + def __init__(self_, owned_by: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + Resources related to the access token. + + :param owned_by: Relationship to user. + :type owned_by: RelationshipToUser, optional + """ + if owned_by is not unset: + kwargs["owned_by"] = owned_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/personal_access_token_response.py b/datadog_api_client/v2/model/personal_access_token_response.py new file mode 100644 index 0000000000..748909d427 --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.personal_access_token import PersonalAccessToken + +class PersonalAccessTokenResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.personal_access_token import PersonalAccessToken + return { + "data": (PersonalAccessToken,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PersonalAccessToken, UnsetType]=unset, **kwargs): + """ + Response for retrieving an access token. + + :param data: Datadog access token. + :type data: PersonalAccessToken, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/personal_access_token_response_meta.py b/datadog_api_client/v2/model/personal_access_token_response_meta.py new file mode 100644 index 0000000000..f0832f99c1 --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.personal_access_token_response_meta_page import PersonalAccessTokenResponseMetaPage + +class PersonalAccessTokenResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.personal_access_token_response_meta_page import PersonalAccessTokenResponseMetaPage + return { + "page": (PersonalAccessTokenResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[PersonalAccessTokenResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Additional information related to the access token response. + + :param page: Pagination information. + :type page: PersonalAccessTokenResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/personal_access_token_response_meta_page.py b/datadog_api_client/v2/model/personal_access_token_response_meta_page.py new file mode 100644 index 0000000000..c05d00025d --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_response_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PersonalAccessTokenResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_filtered_count": (int,), + } + attribute_map = { + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination information. + + :param total_filtered_count: Total filtered access token count. + :type total_filtered_count: int, optional + """ + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/personal_access_token_update_attributes.py b/datadog_api_client/v2/model/personal_access_token_update_attributes.py new file mode 100644 index 0000000000..3397974df9 --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_update_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PersonalAccessTokenUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "scopes": ([str],), + } + attribute_map = { + "name": "name", + "scopes": "scopes", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, scopes: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes used to update an access token. + + :param name: Name of the access token. + :type name: str, optional + + :param scopes: Array of scopes to grant the access token. + :type scopes: [str], optional + """ + if name is not unset: + kwargs["name"] = name + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/personal_access_token_update_data.py b/datadog_api_client/v2/model/personal_access_token_update_data.py new file mode 100644 index 0000000000..c57a7fbdc3 --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.personal_access_token_update_attributes import PersonalAccessTokenUpdateAttributes + from datadog_api_client.v2.model.personal_access_tokens_type import PersonalAccessTokensType + +class PersonalAccessTokenUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.personal_access_token_update_attributes import PersonalAccessTokenUpdateAttributes + from datadog_api_client.v2.model.personal_access_tokens_type import PersonalAccessTokensType + return { + "attributes": (PersonalAccessTokenUpdateAttributes,), + "id": (str,), + "type": (PersonalAccessTokensType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: PersonalAccessTokenUpdateAttributes, id: str, type: PersonalAccessTokensType, **kwargs): + """ + Object used to update an access token. + + :param attributes: Attributes used to update an access token. + :type attributes: PersonalAccessTokenUpdateAttributes + + :param id: ID of the access token. + :type id: str + + :param type: Personal access tokens resource type. + :type type: PersonalAccessTokensType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/personal_access_token_update_request.py b/datadog_api_client/v2/model/personal_access_token_update_request.py new file mode 100644 index 0000000000..0b9789c17f --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_token_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.personal_access_token_update_data import PersonalAccessTokenUpdateData + +class PersonalAccessTokenUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.personal_access_token_update_data import PersonalAccessTokenUpdateData + return { + "data": (PersonalAccessTokenUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PersonalAccessTokenUpdateData, **kwargs): + """ + Request used to update an access token. + + :param data: Object used to update an access token. + :type data: PersonalAccessTokenUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/personal_access_tokens_sort.py b/datadog_api_client/v2/model/personal_access_tokens_sort.py new file mode 100644 index 0000000000..df4f07afb5 --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_tokens_sort.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PersonalAccessTokensSort(ModelSimple): + """ + Sorting options + + :param value: If omitted defaults to "name". Must be one of ["name", "-name", "created_at", "-created_at", "expires_at", "-expires_at", "last_used_at", "-last_used_at"]. + :type value: str + """ + + allowed_values = { + "name", + "-name", + "created_at", + "-created_at", + "expires_at", + "-expires_at", + "last_used_at", + "-last_used_at", + } + NAME_ASCENDING: ClassVar["PersonalAccessTokensSort"] + NAME_DESCENDING: ClassVar["PersonalAccessTokensSort"] + CREATED_AT_ASCENDING: ClassVar["PersonalAccessTokensSort"] + CREATED_AT_DESCENDING: ClassVar["PersonalAccessTokensSort"] + EXPIRES_AT_ASCENDING: ClassVar["PersonalAccessTokensSort"] + EXPIRES_AT_DESCENDING: ClassVar["PersonalAccessTokensSort"] + LAST_USED_AT_ASCENDING: ClassVar["PersonalAccessTokensSort"] + LAST_USED_AT_DESCENDING: ClassVar["PersonalAccessTokensSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PersonalAccessTokensSort.NAME_ASCENDING = PersonalAccessTokensSort("name") +PersonalAccessTokensSort.NAME_DESCENDING = PersonalAccessTokensSort("-name") +PersonalAccessTokensSort.CREATED_AT_ASCENDING = PersonalAccessTokensSort("created_at") +PersonalAccessTokensSort.CREATED_AT_DESCENDING = PersonalAccessTokensSort("-created_at") +PersonalAccessTokensSort.EXPIRES_AT_ASCENDING = PersonalAccessTokensSort("expires_at") +PersonalAccessTokensSort.EXPIRES_AT_DESCENDING = PersonalAccessTokensSort("-expires_at") +PersonalAccessTokensSort.LAST_USED_AT_ASCENDING = PersonalAccessTokensSort("last_used_at") +PersonalAccessTokensSort.LAST_USED_AT_DESCENDING = PersonalAccessTokensSort("-last_used_at") diff --git a/datadog_api_client/v2/model/personal_access_tokens_type.py b/datadog_api_client/v2/model/personal_access_tokens_type.py new file mode 100644 index 0000000000..cabf08e65b --- /dev/null +++ b/datadog_api_client/v2/model/personal_access_tokens_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PersonalAccessTokensType(ModelSimple): + """ + Personal access tokens resource type. + + :param value: If omitted defaults to "personal_access_tokens". Must be one of ["personal_access_tokens"]. + :type value: str + """ + + allowed_values = { + "personal_access_tokens", + } + PERSONAL_ACCESS_TOKENS: ClassVar["PersonalAccessTokensType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PersonalAccessTokensType.PERSONAL_ACCESS_TOKENS = PersonalAccessTokensType("personal_access_tokens") diff --git a/datadog_api_client/v2/model/playlist.py b/datadog_api_client/v2/model/playlist.py new file mode 100644 index 0000000000..e84badb363 --- /dev/null +++ b/datadog_api_client/v2/model/playlist.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.playlist_data import PlaylistData + +class Playlist(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.playlist_data import PlaylistData + return { + "data": (PlaylistData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PlaylistData, **kwargs): + """ + A single RUM replay playlist resource returned by create, update, or get operations. + + :param data: Data object representing a RUM replay playlist, including its identifier, type, and attributes. + :type data: PlaylistData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/playlist_array.py b/datadog_api_client/v2/model/playlist_array.py new file mode 100644 index 0000000000..34d0b4d50a --- /dev/null +++ b/datadog_api_client/v2/model/playlist_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.playlist_data import PlaylistData + +class PlaylistArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.playlist_data import PlaylistData + return { + "data": ([PlaylistData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[PlaylistData], **kwargs): + """ + A list of RUM replay playlists returned by a list operation. + + :param data: Array of playlist data objects. + :type data: [PlaylistData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/playlist_data.py b/datadog_api_client/v2/model/playlist_data.py new file mode 100644 index 0000000000..aa61840fa1 --- /dev/null +++ b/datadog_api_client/v2/model/playlist_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.playlist_data_attributes import PlaylistDataAttributes + from datadog_api_client.v2.model.playlist_data_type import PlaylistDataType + +class PlaylistData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.playlist_data_attributes import PlaylistDataAttributes + from datadog_api_client.v2.model.playlist_data_type import PlaylistDataType + return { + "attributes": (PlaylistDataAttributes,), + "id": (str,), + "type": (PlaylistDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: PlaylistDataType, attributes: Union[PlaylistDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data object representing a RUM replay playlist, including its identifier, type, and attributes. + + :param attributes: Attributes of a RUM replay playlist, including its name, description, session count, and audit timestamps. + :type attributes: PlaylistDataAttributes, optional + + :param id: Unique identifier of the playlist. + :type id: str, optional + + :param type: Rum replay playlist resource type. + :type type: PlaylistDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/playlist_data_attributes.py b/datadog_api_client/v2/model/playlist_data_attributes.py new file mode 100644 index 0000000000..c60798bedc --- /dev/null +++ b/datadog_api_client/v2/model/playlist_data_attributes.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.playlist_data_attributes_created_by import PlaylistDataAttributesCreatedBy + +class PlaylistDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.playlist_data_attributes_created_by import PlaylistDataAttributesCreatedBy + return { + "created_at": (datetime,), + "created_by": (PlaylistDataAttributesCreatedBy,), + "description": (str,), + "name": (str,), + "session_count": (int,), + "updated_at": (datetime,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "description": "description", + "name": "name", + "session_count": "session_count", + "updated_at": "updated_at", + } + + def __init__(self_, name: str, created_at: Union[datetime, UnsetType]=unset, created_by: Union[PlaylistDataAttributesCreatedBy, UnsetType]=unset, description: Union[str, UnsetType]=unset, session_count: Union[int, UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a RUM replay playlist, including its name, description, session count, and audit timestamps. + + :param created_at: Timestamp when the playlist was created. + :type created_at: datetime, optional + + :param created_by: Information about the user who created the playlist. + :type created_by: PlaylistDataAttributesCreatedBy, optional + + :param description: Optional human-readable description of the playlist's purpose or contents. + :type description: str, optional + + :param name: Human-readable name of the playlist. + :type name: str + + :param session_count: Number of replay sessions in the playlist. + :type session_count: int, optional + + :param updated_at: Timestamp when the playlist was last updated. + :type updated_at: datetime, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if description is not unset: + kwargs["description"] = description + if session_count is not unset: + kwargs["session_count"] = session_count + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/playlist_data_attributes_created_by.py b/datadog_api_client/v2/model/playlist_data_attributes_created_by.py new file mode 100644 index 0000000000..13539949ac --- /dev/null +++ b/datadog_api_client/v2/model/playlist_data_attributes_created_by.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PlaylistDataAttributesCreatedBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "icon": (str,), + "id": (str,), + "name": (str,), + "uuid": (str,), + } + attribute_map = { + "handle": "handle", + "icon": "icon", + "id": "id", + "name": "name", + "uuid": "uuid", + } + + def __init__(self_, handle: str, id: str, uuid: str, icon: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Information about the user who created the playlist. + + :param handle: Email handle of the user who created the playlist. + :type handle: str + + :param icon: URL or identifier of the user's avatar icon. + :type icon: str, optional + + :param id: Unique identifier of the user who created the playlist. + :type id: str + + :param name: Display name of the user who created the playlist. + :type name: str, optional + + :param uuid: UUID of the user who created the playlist. + :type uuid: str + """ + if icon is not unset: + kwargs["icon"] = icon + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.handle = handle + self_.id = id + self_.uuid = uuid diff --git a/datadog_api_client/v2/model/playlist_data_type.py b/datadog_api_client/v2/model/playlist_data_type.py new file mode 100644 index 0000000000..a8d770f8aa --- /dev/null +++ b/datadog_api_client/v2/model/playlist_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PlaylistDataType(ModelSimple): + """ + Rum replay playlist resource type. + + :param value: If omitted defaults to "rum_replay_playlist". Must be one of ["rum_replay_playlist"]. + :type value: str + """ + + allowed_values = { + "rum_replay_playlist", + } + RUM_REPLAY_PLAYLIST: ClassVar["PlaylistDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PlaylistDataType.RUM_REPLAY_PLAYLIST = PlaylistDataType("rum_replay_playlist") diff --git a/datadog_api_client/v2/model/playlists_session.py b/datadog_api_client/v2/model/playlists_session.py new file mode 100644 index 0000000000..c729489033 --- /dev/null +++ b/datadog_api_client/v2/model/playlists_session.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.playlists_session_data import PlaylistsSessionData + +class PlaylistsSession(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.playlists_session_data import PlaylistsSessionData + return { + "data": (PlaylistsSessionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PlaylistsSessionData, **kwargs): + """ + A single RUM replay session resource as it appears within a playlist context. + + :param data: Data object representing a session within a playlist, including its identifier, type, and attributes. + :type data: PlaylistsSessionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/playlists_session_array.py b/datadog_api_client/v2/model/playlists_session_array.py new file mode 100644 index 0000000000..1f0c4e8000 --- /dev/null +++ b/datadog_api_client/v2/model/playlists_session_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.playlists_session_data import PlaylistsSessionData + +class PlaylistsSessionArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.playlists_session_data import PlaylistsSessionData + return { + "data": ([PlaylistsSessionData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[PlaylistsSessionData], **kwargs): + """ + A list of RUM replay sessions belonging to a playlist. + + :param data: Array of playlist session data objects. + :type data: [PlaylistsSessionData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/playlists_session_data.py b/datadog_api_client/v2/model/playlists_session_data.py new file mode 100644 index 0000000000..ad35f8bf11 --- /dev/null +++ b/datadog_api_client/v2/model/playlists_session_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.playlists_session_data_attributes import PlaylistsSessionDataAttributes + from datadog_api_client.v2.model.viewership_history_session_data_type import ViewershipHistorySessionDataType + +class PlaylistsSessionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.playlists_session_data_attributes import PlaylistsSessionDataAttributes + from datadog_api_client.v2.model.viewership_history_session_data_type import ViewershipHistorySessionDataType + return { + "attributes": (PlaylistsSessionDataAttributes,), + "id": (str,), + "type": (ViewershipHistorySessionDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ViewershipHistorySessionDataType, attributes: Union[PlaylistsSessionDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data object representing a session within a playlist, including its identifier, type, and attributes. + + :param attributes: Attributes of a session within a playlist, including the session event data and its replay track. + :type attributes: PlaylistsSessionDataAttributes, optional + + :param id: Unique identifier of the RUM replay session. + :type id: str, optional + + :param type: Rum replay session resource type. + :type type: ViewershipHistorySessionDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/playlists_session_data_attributes.py b/datadog_api_client/v2/model/playlists_session_data_attributes.py new file mode 100644 index 0000000000..8824fa1012 --- /dev/null +++ b/datadog_api_client/v2/model/playlists_session_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PlaylistsSessionDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "session_event": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "track": (str,), + } + attribute_map = { + "session_event": "session_event", + "track": "track", + } + + def __init__(self_, session_event: Union[Dict[str, Any], UnsetType]=unset, track: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a session within a playlist, including the session event data and its replay track. + + :param session_event: Raw event data associated with the replay session. + :type session_event: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param track: Replay track identifier indicating which recording track the session belongs to. + :type track: str, optional + """ + if session_event is not unset: + kwargs["session_event"] = session_event + if track is not unset: + kwargs["track"] = track + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/postmortem_attachment_request.py b/datadog_api_client/v2/model/postmortem_attachment_request.py new file mode 100644 index 0000000000..7b162e2229 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_attachment_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_attachment_request_data import PostmortemAttachmentRequestData + +class PostmortemAttachmentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_attachment_request_data import PostmortemAttachmentRequestData + return { + "data": (PostmortemAttachmentRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PostmortemAttachmentRequestData, **kwargs): + """ + Request body for creating a postmortem attachment. + + :param data: Postmortem attachment data + :type data: PostmortemAttachmentRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/postmortem_attachment_request_attributes.py b/datadog_api_client/v2/model/postmortem_attachment_request_attributes.py new file mode 100644 index 0000000000..c1081a1087 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_attachment_request_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_cell import PostmortemCell + +class PostmortemAttachmentRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_cell import PostmortemCell + return { + "cells": ([PostmortemCell],), + "content": (str,), + "postmortem_template_id": (str,), + "title": (str,), + } + attribute_map = { + "cells": "cells", + "content": "content", + "postmortem_template_id": "postmortem_template_id", + "title": "title", + } + + def __init__(self_, cells: Union[List[PostmortemCell], UnsetType]=unset, content: Union[str, UnsetType]=unset, postmortem_template_id: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Postmortem attachment attributes + + :param cells: The cells of the postmortem + :type cells: [PostmortemCell], optional + + :param content: The content of the postmortem + :type content: str, optional + + :param postmortem_template_id: The ID of the postmortem template + :type postmortem_template_id: str, optional + + :param title: The title of the postmortem + :type title: str, optional + """ + if cells is not unset: + kwargs["cells"] = cells + if content is not unset: + kwargs["content"] = content + if postmortem_template_id is not unset: + kwargs["postmortem_template_id"] = postmortem_template_id + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/postmortem_attachment_request_data.py b/datadog_api_client/v2/model/postmortem_attachment_request_data.py new file mode 100644 index 0000000000..b420c7827e --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_attachment_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_attachment_request_attributes import PostmortemAttachmentRequestAttributes + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + +class PostmortemAttachmentRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_attachment_request_attributes import PostmortemAttachmentRequestAttributes + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + return { + "attributes": (PostmortemAttachmentRequestAttributes,), + "type": (IncidentAttachmentType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: PostmortemAttachmentRequestAttributes, type: IncidentAttachmentType, **kwargs): + """ + Postmortem attachment data + + :param attributes: Postmortem attachment attributes + :type attributes: PostmortemAttachmentRequestAttributes + + :param type: The incident attachment resource type. + :type type: IncidentAttachmentType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/postmortem_cell.py b/datadog_api_client/v2/model/postmortem_cell.py new file mode 100644 index 0000000000..ae8cba3887 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_cell.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_cell_attributes import PostmortemCellAttributes + from datadog_api_client.v2.model.postmortem_cell_type import PostmortemCellType + +class PostmortemCell(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_cell_attributes import PostmortemCellAttributes + from datadog_api_client.v2.model.postmortem_cell_type import PostmortemCellType + return { + "attributes": (PostmortemCellAttributes,), + "id": (str,), + "type": (PostmortemCellType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[PostmortemCellAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[PostmortemCellType, UnsetType]=unset, **kwargs): + """ + A cell in the postmortem + + :param attributes: Attributes of a postmortem cell + :type attributes: PostmortemCellAttributes, optional + + :param id: The unique identifier of the cell + :type id: str, optional + + :param type: The postmortem cell resource type. + :type type: PostmortemCellType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/postmortem_cell_attributes.py b/datadog_api_client/v2/model/postmortem_cell_attributes.py new file mode 100644 index 0000000000..56ada382fe --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_cell_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_cell_definition import PostmortemCellDefinition + +class PostmortemCellAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_cell_definition import PostmortemCellDefinition + return { + "definition": (PostmortemCellDefinition,), + } + attribute_map = { + "definition": "definition", + } + + def __init__(self_, definition: Union[PostmortemCellDefinition, UnsetType]=unset, **kwargs): + """ + Attributes of a postmortem cell + + :param definition: Definition of a postmortem cell + :type definition: PostmortemCellDefinition, optional + """ + if definition is not unset: + kwargs["definition"] = definition + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/postmortem_cell_definition.py b/datadog_api_client/v2/model/postmortem_cell_definition.py new file mode 100644 index 0000000000..57998734dc --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_cell_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PostmortemCellDefinition(ModelNormal): + @cached_property + def openapi_types(_): + return { + "content": (str,), + } + attribute_map = { + "content": "content", + } + + def __init__(self_, content: Union[str, UnsetType]=unset, **kwargs): + """ + Definition of a postmortem cell + + :param content: The content of the cell in markdown format + :type content: str, optional + """ + if content is not unset: + kwargs["content"] = content + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/postmortem_cell_type.py b/datadog_api_client/v2/model/postmortem_cell_type.py new file mode 100644 index 0000000000..1a64f055ec --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_cell_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PostmortemCellType(ModelSimple): + """ + The postmortem cell resource type. + + :param value: If omitted defaults to "markdown". Must be one of ["markdown"]. + :type value: str + """ + + allowed_values = { + "markdown", + } + MARKDOWN: ClassVar["PostmortemCellType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PostmortemCellType.MARKDOWN = PostmortemCellType("markdown") diff --git a/datadog_api_client/v2/model/postmortem_template_attributes_request.py b/datadog_api_client/v2/model/postmortem_template_attributes_request.py new file mode 100644 index 0000000000..5f51683577 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_attributes_request.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluence_postmortem_settings import ConfluencePostmortemSettings + from datadog_api_client.v2.model.google_docs_postmortem_settings import GoogleDocsPostmortemSettings + from datadog_api_client.v2.model.postmortem_template_location import PostmortemTemplateLocation + +class PostmortemTemplateAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluence_postmortem_settings import ConfluencePostmortemSettings + from datadog_api_client.v2.model.google_docs_postmortem_settings import GoogleDocsPostmortemSettings + from datadog_api_client.v2.model.postmortem_template_location import PostmortemTemplateLocation + return { + "confluence_postmortem_settings": (ConfluencePostmortemSettings,), + "content": (str,), + "google_docs_postmortem_settings": (GoogleDocsPostmortemSettings,), + "is_default": (datetime, none_type), + "location": (PostmortemTemplateLocation,), + "name": (str,), + } + attribute_map = { + "confluence_postmortem_settings": "confluence_postmortem_settings", + "content": "content", + "google_docs_postmortem_settings": "google_docs_postmortem_settings", + "is_default": "is_default", + "location": "location", + "name": "name", + } + + def __init__(self_, name: str, confluence_postmortem_settings: Union[ConfluencePostmortemSettings, UnsetType]=unset, content: Union[str, UnsetType]=unset, google_docs_postmortem_settings: Union[GoogleDocsPostmortemSettings, UnsetType]=unset, is_default: Union[datetime, none_type, UnsetType]=unset, location: Union[PostmortemTemplateLocation, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a postmortem template. + + :param confluence_postmortem_settings: Settings for a postmortem template stored in Confluence. Required when ``location`` is ``confluence``. + :type confluence_postmortem_settings: ConfluencePostmortemSettings, optional + + :param content: The templated content of the postmortem, supporting Markdown and incident template variables. + :type content: str, optional + + :param google_docs_postmortem_settings: Settings for a postmortem template stored in Google Docs. Required when ``location`` is ``google_docs``. + :type google_docs_postmortem_settings: GoogleDocsPostmortemSettings, optional + + :param is_default: When set, marks this template as a default. The effective default for an incident type is the template with the most recent ``is_default`` timestamp. Set to ``null`` to unset. + :type is_default: datetime, none_type, optional + + :param location: The location where the postmortem is created and stored. + :type location: PostmortemTemplateLocation, optional + + :param name: The name of the template. + :type name: str + """ + if confluence_postmortem_settings is not unset: + kwargs["confluence_postmortem_settings"] = confluence_postmortem_settings + if content is not unset: + kwargs["content"] = content + if google_docs_postmortem_settings is not unset: + kwargs["google_docs_postmortem_settings"] = google_docs_postmortem_settings + if is_default is not unset: + kwargs["is_default"] = is_default + if location is not unset: + kwargs["location"] = location + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/postmortem_template_attributes_response.py b/datadog_api_client/v2/model/postmortem_template_attributes_response.py new file mode 100644 index 0000000000..d95935df4e --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_attributes_response.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.confluence_postmortem_settings import ConfluencePostmortemSettings + from datadog_api_client.v2.model.google_docs_postmortem_settings import GoogleDocsPostmortemSettings + from datadog_api_client.v2.model.postmortem_template_location import PostmortemTemplateLocation + +class PostmortemTemplateAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.confluence_postmortem_settings import ConfluencePostmortemSettings + from datadog_api_client.v2.model.google_docs_postmortem_settings import GoogleDocsPostmortemSettings + from datadog_api_client.v2.model.postmortem_template_location import PostmortemTemplateLocation + return { + "confluence_postmortem_settings": (ConfluencePostmortemSettings,), + "content": (str,), + "created_at": (datetime,), + "google_docs_postmortem_settings": (GoogleDocsPostmortemSettings,), + "is_default": (datetime, none_type), + "location": (PostmortemTemplateLocation,), + "modified_at": (datetime,), + "name": (str,), + } + attribute_map = { + "confluence_postmortem_settings": "confluence_postmortem_settings", + "content": "content", + "created_at": "createdAt", + "google_docs_postmortem_settings": "google_docs_postmortem_settings", + "is_default": "is_default", + "location": "location", + "modified_at": "modifiedAt", + "name": "name", + } + + def __init__(self_, content: str, created_at: datetime, is_default: Union[datetime, none_type], location: PostmortemTemplateLocation, modified_at: datetime, name: str, confluence_postmortem_settings: Union[ConfluencePostmortemSettings, UnsetType]=unset, google_docs_postmortem_settings: Union[GoogleDocsPostmortemSettings, UnsetType]=unset, **kwargs): + """ + Attributes of a postmortem template returned in a response. + + :param confluence_postmortem_settings: Settings for a postmortem template stored in Confluence. Required when ``location`` is ``confluence``. + :type confluence_postmortem_settings: ConfluencePostmortemSettings, optional + + :param content: The templated content of the postmortem, supporting Markdown and incident template variables. + :type content: str + + :param created_at: When the template was created. + :type created_at: datetime + + :param google_docs_postmortem_settings: Settings for a postmortem template stored in Google Docs. Required when ``location`` is ``google_docs``. + :type google_docs_postmortem_settings: GoogleDocsPostmortemSettings, optional + + :param is_default: When set, marks this template as a default. The effective default for an incident type is the template with the most recent ``is_default`` timestamp. + :type is_default: datetime, none_type + + :param location: The location where the postmortem is created and stored. + :type location: PostmortemTemplateLocation + + :param modified_at: When the template was last modified. + :type modified_at: datetime + + :param name: The name of the template. + :type name: str + """ + if confluence_postmortem_settings is not unset: + kwargs["confluence_postmortem_settings"] = confluence_postmortem_settings + if google_docs_postmortem_settings is not unset: + kwargs["google_docs_postmortem_settings"] = google_docs_postmortem_settings + super().__init__(kwargs) + + + self_.content = content + self_.created_at = created_at + self_.is_default = is_default + self_.location = location + self_.modified_at = modified_at + self_.name = name diff --git a/datadog_api_client/v2/model/postmortem_template_create_relationships.py b/datadog_api_client/v2/model/postmortem_template_create_relationships.py new file mode 100644 index 0000000000..d17b64be1d --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_create_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_template_incident_type_relationship import PostmortemTemplateIncidentTypeRelationship + +class PostmortemTemplateCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_template_incident_type_relationship import PostmortemTemplateIncidentTypeRelationship + return { + "incident_type": (PostmortemTemplateIncidentTypeRelationship,), + } + attribute_map = { + "incident_type": "incident_type", + } + + def __init__(self_, incident_type: Union[PostmortemTemplateIncidentTypeRelationship, UnsetType]=unset, **kwargs): + """ + Relationships for a postmortem template. ``incident_type`` is required when creating a template and is immutable afterwards. + + :param incident_type: Relationship to the incident type this template belongs to. + :type incident_type: PostmortemTemplateIncidentTypeRelationship, optional + """ + if incident_type is not unset: + kwargs["incident_type"] = incident_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/postmortem_template_data_request.py b/datadog_api_client/v2/model/postmortem_template_data_request.py new file mode 100644 index 0000000000..d953484b48 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_data_request.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_template_attributes_request import PostmortemTemplateAttributesRequest + from datadog_api_client.v2.model.postmortem_template_create_relationships import PostmortemTemplateCreateRelationships + from datadog_api_client.v2.model.postmortem_template_type import PostmortemTemplateType + +class PostmortemTemplateDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_template_attributes_request import PostmortemTemplateAttributesRequest + from datadog_api_client.v2.model.postmortem_template_create_relationships import PostmortemTemplateCreateRelationships + from datadog_api_client.v2.model.postmortem_template_type import PostmortemTemplateType + return { + "attributes": (PostmortemTemplateAttributesRequest,), + "id": (str,), + "relationships": (PostmortemTemplateCreateRelationships,), + "type": (PostmortemTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: PostmortemTemplateAttributesRequest, type: PostmortemTemplateType, id: Union[str, UnsetType]=unset, relationships: Union[PostmortemTemplateCreateRelationships, UnsetType]=unset, **kwargs): + """ + Data object for creating or updating a postmortem template. + + :param attributes: Attributes for creating or updating a postmortem template. + :type attributes: PostmortemTemplateAttributesRequest + + :param id: The ID of the template. Required when updating. + :type id: str, optional + + :param relationships: Relationships for a postmortem template. ``incident_type`` is required when creating a template and is immutable afterwards. + :type relationships: PostmortemTemplateCreateRelationships, optional + + :param type: Postmortem template resource type. + :type type: PostmortemTemplateType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/postmortem_template_data_response.py b/datadog_api_client/v2/model/postmortem_template_data_response.py new file mode 100644 index 0000000000..f0e1ad46d6 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_data_response.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_template_attributes_response import PostmortemTemplateAttributesResponse + from datadog_api_client.v2.model.postmortem_template_response_relationships import PostmortemTemplateResponseRelationships + from datadog_api_client.v2.model.postmortem_template_type import PostmortemTemplateType + +class PostmortemTemplateDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_template_attributes_response import PostmortemTemplateAttributesResponse + from datadog_api_client.v2.model.postmortem_template_response_relationships import PostmortemTemplateResponseRelationships + from datadog_api_client.v2.model.postmortem_template_type import PostmortemTemplateType + return { + "attributes": (PostmortemTemplateAttributesResponse,), + "id": (str,), + "relationships": (PostmortemTemplateResponseRelationships,), + "type": (PostmortemTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: PostmortemTemplateAttributesResponse, id: str, type: PostmortemTemplateType, relationships: Union[PostmortemTemplateResponseRelationships, UnsetType]=unset, **kwargs): + """ + Data object for a postmortem template returned in a response. + + :param attributes: Attributes of a postmortem template returned in a response. + :type attributes: PostmortemTemplateAttributesResponse + + :param id: The ID of the template. + :type id: str + + :param relationships: Relationships of a postmortem template returned in a response. + :type relationships: PostmortemTemplateResponseRelationships, optional + + :param type: Postmortem template resource type. + :type type: PostmortemTemplateType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/postmortem_template_incident_type_relationship.py b/datadog_api_client/v2/model/postmortem_template_incident_type_relationship.py new file mode 100644 index 0000000000..4254ffb1a7 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_incident_type_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_template_incident_type_relationship_data import PostmortemTemplateIncidentTypeRelationshipData + +class PostmortemTemplateIncidentTypeRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_template_incident_type_relationship_data import PostmortemTemplateIncidentTypeRelationshipData + return { + "data": (PostmortemTemplateIncidentTypeRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PostmortemTemplateIncidentTypeRelationshipData, **kwargs): + """ + Relationship to the incident type this template belongs to. + + :param data: Incident type relationship data. + :type data: PostmortemTemplateIncidentTypeRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/postmortem_template_incident_type_relationship_data.py b/datadog_api_client/v2/model/postmortem_template_incident_type_relationship_data.py new file mode 100644 index 0000000000..a85c483c8a --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_incident_type_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PostmortemTemplateIncidentTypeRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (UUID,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: str, **kwargs): + """ + Incident type relationship data. + + :param id: The incident type identifier. + :type id: UUID + + :param type: The incident type resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/postmortem_template_location.py b/datadog_api_client/v2/model/postmortem_template_location.py new file mode 100644 index 0000000000..f299fcafc4 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_location.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PostmortemTemplateLocation(ModelSimple): + """ + The location where the postmortem is created and stored. + + :param value: If omitted defaults to "datadog_notebooks". Must be one of ["datadog_notebooks", "confluence", "google_docs"]. + :type value: str + """ + + allowed_values = { + "datadog_notebooks", + "confluence", + "google_docs", + } + DATADOG_NOTEBOOKS: ClassVar["PostmortemTemplateLocation"] + CONFLUENCE: ClassVar["PostmortemTemplateLocation"] + GOOGLE_DOCS: ClassVar["PostmortemTemplateLocation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PostmortemTemplateLocation.DATADOG_NOTEBOOKS = PostmortemTemplateLocation("datadog_notebooks") +PostmortemTemplateLocation.CONFLUENCE = PostmortemTemplateLocation("confluence") +PostmortemTemplateLocation.GOOGLE_DOCS = PostmortemTemplateLocation("google_docs") diff --git a/datadog_api_client/v2/model/postmortem_template_request.py b/datadog_api_client/v2/model/postmortem_template_request.py new file mode 100644 index 0000000000..0aa2075bbf --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_template_data_request import PostmortemTemplateDataRequest + +class PostmortemTemplateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_template_data_request import PostmortemTemplateDataRequest + return { + "data": (PostmortemTemplateDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PostmortemTemplateDataRequest, **kwargs): + """ + Request body for creating or updating a postmortem template. + + :param data: Data object for creating or updating a postmortem template. + :type data: PostmortemTemplateDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/postmortem_template_response.py b/datadog_api_client/v2/model/postmortem_template_response.py new file mode 100644 index 0000000000..a825454523 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_template_data_response import PostmortemTemplateDataResponse + +class PostmortemTemplateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_template_data_response import PostmortemTemplateDataResponse + return { + "data": (PostmortemTemplateDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PostmortemTemplateDataResponse, **kwargs): + """ + Response containing a single postmortem template. + + :param data: Data object for a postmortem template returned in a response. + :type data: PostmortemTemplateDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/postmortem_template_response_relationships.py b/datadog_api_client/v2/model/postmortem_template_response_relationships.py new file mode 100644 index 0000000000..28fe0c17b4 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_response_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_template_incident_type_relationship import PostmortemTemplateIncidentTypeRelationship + from datadog_api_client.v2.model.postmortem_template_user_relationship import PostmortemTemplateUserRelationship + +class PostmortemTemplateResponseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_template_incident_type_relationship import PostmortemTemplateIncidentTypeRelationship + from datadog_api_client.v2.model.postmortem_template_user_relationship import PostmortemTemplateUserRelationship + return { + "incident_type": (PostmortemTemplateIncidentTypeRelationship,), + "last_modified_by_user": (PostmortemTemplateUserRelationship,), + } + attribute_map = { + "incident_type": "incident_type", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, incident_type: Union[PostmortemTemplateIncidentTypeRelationship, UnsetType]=unset, last_modified_by_user: Union[PostmortemTemplateUserRelationship, UnsetType]=unset, **kwargs): + """ + Relationships of a postmortem template returned in a response. + + :param incident_type: Relationship to the incident type this template belongs to. + :type incident_type: PostmortemTemplateIncidentTypeRelationship, optional + + :param last_modified_by_user: Relationship to a user. + :type last_modified_by_user: PostmortemTemplateUserRelationship, optional + """ + 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 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/postmortem_template_type.py b/datadog_api_client/v2/model/postmortem_template_type.py new file mode 100644 index 0000000000..471bd18338 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PostmortemTemplateType(ModelSimple): + """ + Postmortem template resource type. + + :param value: Must be one of ["postmortem_templates", "postmortem_template"]. + :type value: str + """ + + allowed_values = { + "postmortem_templates", + "postmortem_template", + } + POSTMORTEM_TEMPLATES: ClassVar["PostmortemTemplateType"] + POSTMORTEM_TEMPLATE: ClassVar["PostmortemTemplateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PostmortemTemplateType.POSTMORTEM_TEMPLATES = PostmortemTemplateType("postmortem_templates") +PostmortemTemplateType.POSTMORTEM_TEMPLATE = PostmortemTemplateType("postmortem_template") diff --git a/datadog_api_client/v2/model/postmortem_template_user_relationship.py b/datadog_api_client/v2/model/postmortem_template_user_relationship.py new file mode 100644 index 0000000000..3f0614d183 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_user_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_template_user_relationship_data import PostmortemTemplateUserRelationshipData + +class PostmortemTemplateUserRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_template_user_relationship_data import PostmortemTemplateUserRelationshipData + return { + "data": (PostmortemTemplateUserRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PostmortemTemplateUserRelationshipData, **kwargs): + """ + Relationship to a user. + + :param data: User relationship data. + :type data: PostmortemTemplateUserRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/postmortem_template_user_relationship_data.py b/datadog_api_client/v2/model/postmortem_template_user_relationship_data.py new file mode 100644 index 0000000000..d380343dc5 --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_template_user_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PostmortemTemplateUserRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (UUID,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: str, **kwargs): + """ + User relationship data. + + :param id: The user identifier. + :type id: UUID + + :param type: The user resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/postmortem_templates_response.py b/datadog_api_client/v2/model/postmortem_templates_response.py new file mode 100644 index 0000000000..4094f681be --- /dev/null +++ b/datadog_api_client/v2/model/postmortem_templates_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.postmortem_template_data_response import PostmortemTemplateDataResponse + +class PostmortemTemplatesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.postmortem_template_data_response import PostmortemTemplateDataResponse + return { + "data": ([PostmortemTemplateDataResponse],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[PostmortemTemplateDataResponse], **kwargs): + """ + Response containing a list of postmortem templates. + + :param data: An array of postmortem template data objects. + :type data: [PostmortemTemplateDataResponse] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/powerpack.py b/datadog_api_client/v2/model/powerpack.py new file mode 100644 index 0000000000..60a8bf25e7 --- /dev/null +++ b/datadog_api_client/v2/model/powerpack.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.powerpack_data import PowerpackData + +class Powerpack(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.powerpack_data import PowerpackData + return { + "data": (PowerpackData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[PowerpackData, UnsetType]=unset, **kwargs): + """ + Powerpacks are templated groups of dashboard widgets you can save from an existing dashboard and turn into reusable packs in the widget tray. + + :param data: Powerpack data object. + :type data: PowerpackData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/powerpack_attributes.py b/datadog_api_client/v2/model/powerpack_attributes.py new file mode 100644 index 0000000000..3d3b5d5443 --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.powerpack_group_widget import PowerpackGroupWidget + from datadog_api_client.v2.model.powerpack_template_variable import PowerpackTemplateVariable + +class PowerpackAttributes(ModelNormal): + validations = { + "tags": { + "max_items": 8, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.powerpack_group_widget import PowerpackGroupWidget + from datadog_api_client.v2.model.powerpack_template_variable import PowerpackTemplateVariable + return { + "description": (str,), + "group_widget": (PowerpackGroupWidget,), + "name": (str,), + "tags": ([str],), + "template_variables": ([PowerpackTemplateVariable],), + } + attribute_map = { + "description": "description", + "group_widget": "group_widget", + "name": "name", + "tags": "tags", + "template_variables": "template_variables", + } + + def __init__(self_, group_widget: PowerpackGroupWidget, name: str, description: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, template_variables: Union[List[PowerpackTemplateVariable], UnsetType]=unset, **kwargs): + """ + Powerpack attribute object. + + :param description: Description of this powerpack. + :type description: str, optional + + :param group_widget: Powerpack group widget definition object. + :type group_widget: PowerpackGroupWidget + + :param name: Name of the powerpack. + :type name: str + + :param tags: List of tags to identify this powerpack. + :type tags: [str], optional + + :param template_variables: List of template variables for this powerpack. + :type template_variables: [PowerpackTemplateVariable], optional + """ + if description is not unset: + kwargs["description"] = description + if tags is not unset: + kwargs["tags"] = tags + if template_variables is not unset: + kwargs["template_variables"] = template_variables + super().__init__(kwargs) + + + self_.group_widget = group_widget + self_.name = name diff --git a/datadog_api_client/v2/model/powerpack_data.py b/datadog_api_client/v2/model/powerpack_data.py new file mode 100644 index 0000000000..d0a167487b --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_data.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.powerpack_attributes import PowerpackAttributes + from datadog_api_client.v2.model.powerpack_relationships import PowerpackRelationships + +class PowerpackData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.powerpack_attributes import PowerpackAttributes + from datadog_api_client.v2.model.powerpack_relationships import PowerpackRelationships + return { + "attributes": (PowerpackAttributes,), + "id": (str,), + "relationships": (PowerpackRelationships,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[PowerpackAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[PowerpackRelationships, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Powerpack data object. + + :param attributes: Powerpack attribute object. + :type attributes: PowerpackAttributes, optional + + :param id: ID of the powerpack. + :type id: str, optional + + :param relationships: Powerpack relationship object. + :type relationships: PowerpackRelationships, optional + + :param type: Type of widget, must be powerpack. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/powerpack_group_widget.py b/datadog_api_client/v2/model/powerpack_group_widget.py new file mode 100644 index 0000000000..e4fe165389 --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_group_widget.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.powerpack_group_widget_definition import PowerpackGroupWidgetDefinition + from datadog_api_client.v2.model.powerpack_group_widget_layout import PowerpackGroupWidgetLayout + from datadog_api_client.v2.model.widget_live_span import WidgetLiveSpan + +class PowerpackGroupWidget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.powerpack_group_widget_definition import PowerpackGroupWidgetDefinition + from datadog_api_client.v2.model.powerpack_group_widget_layout import PowerpackGroupWidgetLayout + from datadog_api_client.v2.model.widget_live_span import WidgetLiveSpan + return { + "definition": (PowerpackGroupWidgetDefinition,), + "layout": (PowerpackGroupWidgetLayout,), + "live_span": (WidgetLiveSpan,), + } + attribute_map = { + "definition": "definition", + "layout": "layout", + "live_span": "live_span", + } + + def __init__(self_, definition: PowerpackGroupWidgetDefinition, layout: Union[PowerpackGroupWidgetLayout, UnsetType]=unset, live_span: Union[WidgetLiveSpan, UnsetType]=unset, **kwargs): + """ + Powerpack group widget definition object. + + :param definition: Powerpack group widget object. + :type definition: PowerpackGroupWidgetDefinition + + :param layout: Powerpack group widget layout. + :type layout: PowerpackGroupWidgetLayout, optional + + :param live_span: The available timeframes depend on the widget you are using. + :type live_span: WidgetLiveSpan, optional + """ + if layout is not unset: + kwargs["layout"] = layout + if live_span is not unset: + kwargs["live_span"] = live_span + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v2/model/powerpack_group_widget_definition.py b/datadog_api_client/v2/model/powerpack_group_widget_definition.py new file mode 100644 index 0000000000..1b612daf47 --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_group_widget_definition.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.powerpack_inner_widgets import PowerpackInnerWidgets + +class PowerpackGroupWidgetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.powerpack_inner_widgets import PowerpackInnerWidgets + return { + "layout_type": (str,), + "show_title": (bool,), + "title": (str,), + "type": (str,), + "widgets": ([PowerpackInnerWidgets],), + } + attribute_map = { + "layout_type": "layout_type", + "show_title": "show_title", + "title": "title", + "type": "type", + "widgets": "widgets", + } + + def __init__(self_, layout_type: str, type: str, widgets: List[PowerpackInnerWidgets], show_title: Union[bool, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Powerpack group widget object. + + :param layout_type: Layout type of widgets. + :type layout_type: str + + :param show_title: Boolean indicating whether powerpack group title should be visible or not. + :type show_title: bool, optional + + :param title: Name for the group widget. + :type title: str, optional + + :param type: Type of widget, must be group. + :type type: str + + :param widgets: Widgets inside the powerpack. + :type widgets: [PowerpackInnerWidgets] + """ + if show_title is not unset: + kwargs["show_title"] = show_title + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + + self_.layout_type = layout_type + self_.type = type + self_.widgets = widgets diff --git a/datadog_api_client/v2/model/powerpack_group_widget_layout.py b/datadog_api_client/v2/model/powerpack_group_widget_layout.py new file mode 100644 index 0000000000..4cb713c693 --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_group_widget_layout.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PowerpackGroupWidgetLayout(ModelNormal): + validations = { + "height": { + "inclusive_minimum": 0, + }, + "width": { + "inclusive_minimum": 0, + }, + "x": { + "inclusive_minimum": 0, + }, + "y": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "height": (int,), + "width": (int,), + "x": (int,), + "y": (int,), + } + attribute_map = { + "height": "height", + "width": "width", + "x": "x", + "y": "y", + } + + def __init__(self_, height: int, width: int, x: int, y: int, **kwargs): + """ + Powerpack group widget layout. + + :param height: The height of the widget. Should be a non-negative integer. + :type height: int + + :param width: The width of the widget. Should be a non-negative integer. + :type width: int + + :param x: The position of the widget on the x (horizontal) axis. Should be a non-negative integer. + :type x: int + + :param y: The position of the widget on the y (vertical) axis. Should be a non-negative integer. + :type y: int + """ + super().__init__(kwargs) + + + self_.height = height + self_.width = width + self_.x = x + self_.y = y diff --git a/datadog_api_client/v2/model/powerpack_inner_widget_layout.py b/datadog_api_client/v2/model/powerpack_inner_widget_layout.py new file mode 100644 index 0000000000..fd7418d1f1 --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_inner_widget_layout.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PowerpackInnerWidgetLayout(ModelNormal): + validations = { + "height": { + "inclusive_minimum": 0, + }, + "width": { + "inclusive_minimum": 0, + }, + "x": { + "inclusive_minimum": 0, + }, + "y": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "height": (int,), + "width": (int,), + "x": (int,), + "y": (int,), + } + attribute_map = { + "height": "height", + "width": "width", + "x": "x", + "y": "y", + } + + def __init__(self_, height: int, width: int, x: int, y: int, **kwargs): + """ + Powerpack inner widget layout. + + :param height: The height of the widget. Should be a non-negative integer. + :type height: int + + :param width: The width of the widget. Should be a non-negative integer. + :type width: int + + :param x: The position of the widget on the x (horizontal) axis. Should be a non-negative integer. + :type x: int + + :param y: The position of the widget on the y (vertical) axis. Should be a non-negative integer. + :type y: int + """ + super().__init__(kwargs) + + + self_.height = height + self_.width = width + self_.x = x + self_.y = y diff --git a/datadog_api_client/v2/model/powerpack_inner_widgets.py b/datadog_api_client/v2/model/powerpack_inner_widgets.py new file mode 100644 index 0000000000..53f49b46c1 --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_inner_widgets.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.powerpack_inner_widget_layout import PowerpackInnerWidgetLayout + +class PowerpackInnerWidgets(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.powerpack_inner_widget_layout import PowerpackInnerWidgetLayout + return { + "definition": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "layout": (PowerpackInnerWidgetLayout,), + } + attribute_map = { + "definition": "definition", + "layout": "layout", + } + + def __init__(self_, definition: Dict[str, Any], layout: Union[PowerpackInnerWidgetLayout, UnsetType]=unset, **kwargs): + """ + Powerpack group widget definition of individual widgets. + + :param definition: Information about widget. + :type definition: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + + :param layout: Powerpack inner widget layout. + :type layout: PowerpackInnerWidgetLayout, optional + """ + if layout is not unset: + kwargs["layout"] = layout + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v2/model/powerpack_relationships.py b/datadog_api_client/v2/model/powerpack_relationships.py new file mode 100644 index 0000000000..803c067b00 --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + +class PowerpackRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + return { + "author": (RelationshipToUser,), + } + attribute_map = { + "author": "author", + } + + def __init__(self_, author: Union[RelationshipToUser, UnsetType]=unset, **kwargs): + """ + Powerpack relationship object. + + :param author: Relationship to user. + :type author: RelationshipToUser, optional + """ + if author is not unset: + kwargs["author"] = author + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/powerpack_response.py b/datadog_api_client/v2/model/powerpack_response.py new file mode 100644 index 0000000000..26a5f1d5fb --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.powerpack_data import PowerpackData + from datadog_api_client.v2.model.user import User + +class PowerpackResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.powerpack_data import PowerpackData + from datadog_api_client.v2.model.user import User + return { + "data": (PowerpackData,), + "included": ([User],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[PowerpackData, UnsetType]=unset, included: Union[List[User], UnsetType]=unset, **kwargs): + """ + Response object which includes a single powerpack configuration. + + :param data: Powerpack data object. + :type data: PowerpackData, optional + + :param included: Array of objects related to the users. + :type included: [User], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/powerpack_response_links.py b/datadog_api_client/v2/model/powerpack_response_links.py new file mode 100644 index 0000000000..006111e05b --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PowerpackResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str, none_type), + "next": (str,), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, none_type, UnsetType]=unset, next: Union[str, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param first: Link to last page. + :type first: str, optional + + :param last: Link to first page. + :type last: str, none_type, optional + + :param next: Link for the next set of results. + :type next: str, optional + + :param prev: Link for the previous set of results. + :type prev: str, none_type, optional + + :param self: Link to current page. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/powerpack_template_variable.py b/datadog_api_client/v2/model/powerpack_template_variable.py new file mode 100644 index 0000000000..1359e93b95 --- /dev/null +++ b/datadog_api_client/v2/model/powerpack_template_variable.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PowerpackTemplateVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "available_values": ([str], none_type), + "defaults": ([str],), + "name": (str,), + "prefix": (str, none_type), + } + attribute_map = { + "available_values": "available_values", + "defaults": "defaults", + "name": "name", + "prefix": "prefix", + } + + def __init__(self_, name: str, available_values: Union[List[str], none_type, UnsetType]=unset, defaults: Union[List[str], UnsetType]=unset, prefix: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Powerpack template variables. + + :param available_values: The list of values that the template variable drop-down is limited to. + :type available_values: [str], none_type, optional + + :param defaults: One or many template variable default values within the saved view, which are unioned together using ``OR`` if more than one is specified. + :type defaults: [str], optional + + :param name: The name of the variable. + :type name: str + + :param prefix: The tag prefix associated with the variable. Only tags with this prefix appear in the variable drop-down. + :type prefix: str, none_type, optional + """ + if available_values is not unset: + kwargs["available_values"] = available_values + if defaults is not unset: + kwargs["defaults"] = defaults + if prefix is not unset: + kwargs["prefix"] = prefix + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/powerpacks_response_meta.py b/datadog_api_client/v2/model/powerpacks_response_meta.py new file mode 100644 index 0000000000..115b8646ec --- /dev/null +++ b/datadog_api_client/v2/model/powerpacks_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.powerpacks_response_meta_pagination import PowerpacksResponseMetaPagination + +class PowerpacksResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.powerpacks_response_meta_pagination import PowerpacksResponseMetaPagination + return { + "pagination": (PowerpacksResponseMetaPagination,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[PowerpacksResponseMetaPagination, UnsetType]=unset, **kwargs): + """ + Powerpack response metadata. + + :param pagination: Powerpack response pagination metadata. + :type pagination: PowerpacksResponseMetaPagination, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/powerpacks_response_meta_pagination.py b/datadog_api_client/v2/model/powerpacks_response_meta_pagination.py new file mode 100644 index 0000000000..13bdec20ea --- /dev/null +++ b/datadog_api_client/v2/model/powerpacks_response_meta_pagination.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PowerpacksResponseMetaPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_offset": (int,), + "last_offset": (int, none_type), + "limit": (int,), + "next_offset": (int,), + "offset": (int,), + "prev_offset": (int,), + "total": (int,), + "type": (str,), + } + attribute_map = { + "first_offset": "first_offset", + "last_offset": "last_offset", + "limit": "limit", + "next_offset": "next_offset", + "offset": "offset", + "prev_offset": "prev_offset", + "total": "total", + "type": "type", + } + + def __init__(self_, first_offset: Union[int, UnsetType]=unset, last_offset: Union[int, none_type, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_offset: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, prev_offset: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Powerpack response pagination metadata. + + :param first_offset: The first offset. + :type first_offset: int, optional + + :param last_offset: The last offset. + :type last_offset: int, none_type, optional + + :param limit: Pagination limit. + :type limit: int, optional + + :param next_offset: The next offset. + :type next_offset: int, optional + + :param offset: The offset. + :type offset: int, optional + + :param prev_offset: The previous offset. + :type prev_offset: int, optional + + :param total: Total results. + :type total: int, optional + + :param type: Offset type. + :type type: str, optional + """ + if first_offset is not unset: + kwargs["first_offset"] = first_offset + if last_offset is not unset: + kwargs["last_offset"] = last_offset + if limit is not unset: + kwargs["limit"] = limit + if next_offset is not unset: + kwargs["next_offset"] = next_offset + if offset is not unset: + kwargs["offset"] = offset + if prev_offset is not unset: + kwargs["prev_offset"] = prev_offset + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/preview_entity_response_data.py b/datadog_api_client/v2/model/preview_entity_response_data.py new file mode 100644 index 0000000000..ae1e5fc95e --- /dev/null +++ b/datadog_api_client/v2/model/preview_entity_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_response_data_attributes import EntityResponseDataAttributes + from datadog_api_client.v2.model.entity_response_data_relationships import EntityResponseDataRelationships + from datadog_api_client.v2.model.entity_response_data_type import EntityResponseDataType + +class PreviewEntityResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_response_data_attributes import EntityResponseDataAttributes + from datadog_api_client.v2.model.entity_response_data_relationships import EntityResponseDataRelationships + from datadog_api_client.v2.model.entity_response_data_type import EntityResponseDataType + return { + "attributes": (EntityResponseDataAttributes,), + "id": (str,), + "relationships": (EntityResponseDataRelationships,), + "type": (EntityResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: EntityResponseDataType, attributes: Union[EntityResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[EntityResponseDataRelationships, UnsetType]=unset, **kwargs): + """ + Entity data returned in a preview response, including attributes, relationships, and type. + + :param attributes: Entity response attributes containing core entity metadata fields. + :type attributes: EntityResponseDataAttributes, optional + + :param id: Entity unique identifier. + :type id: str, optional + + :param relationships: Entity relationships including incidents, oncalls, schemas, and related entities. + :type relationships: EntityResponseDataRelationships, optional + + :param type: Entity resource type. + :type type: EntityResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/print_report_request.py b/datadog_api_client/v2/model/print_report_request.py new file mode 100644 index 0000000000..df549cefa5 --- /dev/null +++ b/datadog_api_client/v2/model/print_report_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.print_report_request_data import PrintReportRequestData + +class PrintReportRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.print_report_request_data import PrintReportRequestData + return { + "data": (PrintReportRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PrintReportRequestData, **kwargs): + """ + Request body for initiating a print-only report. + + :param data: The JSON:API data object for a print report request. + :type data: PrintReportRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/print_report_request_attributes.py b/datadog_api_client/v2/model/print_report_request_attributes.py new file mode 100644 index 0000000000..dce2678a8c --- /dev/null +++ b/datadog_api_client/v2/model/print_report_request_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + +class PrintReportRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + return { + "from_ts": (int,), + "resource_id": (str,), + "resource_type": (ReportScheduleResourceType,), + "template_variables": ([ReportScheduleTemplateVariable],), + "timeframe": (str,), + "timezone": (str,), + "to_ts": (int,), + } + attribute_map = { + "from_ts": "from_ts", + "resource_id": "resource_id", + "resource_type": "resource_type", + "template_variables": "template_variables", + "timeframe": "timeframe", + "timezone": "timezone", + "to_ts": "to_ts", + } + + def __init__(self_, resource_id: str, resource_type: ReportScheduleResourceType, template_variables: List[ReportScheduleTemplateVariable], timezone: str, from_ts: Union[int, UnsetType]=unset, timeframe: Union[str, UnsetType]=unset, to_ts: Union[int, UnsetType]=unset, **kwargs): + """ + The configuration for a print-only report. Specify exactly one of ``timeframe`` (for a + relative time window) or both ``from_ts`` and ``to_ts`` (for an absolute time range). + + :param from_ts: The start of an absolute time range, as a Unix timestamp in milliseconds. + Required when ``timeframe`` is omitted. + :type from_ts: int, optional + + :param resource_id: The identifier of the dashboard or integration dashboard to render. + :type resource_id: str + + :param resource_type: The type of dashboard resource the report schedule targets. + :type resource_type: ReportScheduleResourceType + + :param template_variables: The dashboard template variables applied when rendering the report. + :type template_variables: [ReportScheduleTemplateVariable] + + :param timeframe: A relative time window (for example ``1w`` or ``calendar_month`` ). Mutually + exclusive with ``from_ts`` and ``to_ts``. + :type timeframe: str, optional + + :param timezone: The IANA time zone identifier used to evaluate the time window. + :type timezone: str + + :param to_ts: The end of an absolute time range, as a Unix timestamp in milliseconds. + Required when ``timeframe`` is omitted. + :type to_ts: int, optional + """ + if from_ts is not unset: + kwargs["from_ts"] = from_ts + if timeframe is not unset: + kwargs["timeframe"] = timeframe + if to_ts is not unset: + kwargs["to_ts"] = to_ts + super().__init__(kwargs) + + + self_.resource_id = resource_id + self_.resource_type = resource_type + self_.template_variables = template_variables + self_.timezone = timezone diff --git a/datadog_api_client/v2/model/print_report_request_data.py b/datadog_api_client/v2/model/print_report_request_data.py new file mode 100644 index 0000000000..660027cd31 --- /dev/null +++ b/datadog_api_client/v2/model/print_report_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.print_report_request_attributes import PrintReportRequestAttributes + from datadog_api_client.v2.model.print_report_type import PrintReportType + +class PrintReportRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.print_report_request_attributes import PrintReportRequestAttributes + from datadog_api_client.v2.model.print_report_type import PrintReportType + return { + "attributes": (PrintReportRequestAttributes,), + "type": (PrintReportType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: PrintReportRequestAttributes, type: PrintReportType, **kwargs): + """ + The JSON:API data object for a print report request. + + :param attributes: The configuration for a print-only report. Specify exactly one of ``timeframe`` (for a + relative time window) or both ``from_ts`` and ``to_ts`` (for an absolute time range). + :type attributes: PrintReportRequestAttributes + + :param type: JSON:API resource type for a print-only report. + :type type: PrintReportType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/print_report_response.py b/datadog_api_client/v2/model/print_report_response.py new file mode 100644 index 0000000000..7cb5d75ea6 --- /dev/null +++ b/datadog_api_client/v2/model/print_report_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.print_report_response_data import PrintReportResponseData + +class PrintReportResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.print_report_response_data import PrintReportResponseData + return { + "data": (PrintReportResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PrintReportResponseData, **kwargs): + """ + Response containing the initiated print-only report. + + :param data: The JSON:API data object for a print-only report. + :type data: PrintReportResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/print_report_response_attributes.py b/datadog_api_client/v2/model/print_report_response_attributes.py new file mode 100644 index 0000000000..e242f05a56 --- /dev/null +++ b/datadog_api_client/v2/model/print_report_response_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + +class PrintReportResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + return { + "download_url": (str,), + "from_ts": (int,), + "resource_id": (str,), + "resource_type": (ReportScheduleResourceType,), + "template_variables": ([ReportScheduleTemplateVariable],), + "timeframe": (str,), + "timezone": (str,), + "to_ts": (int,), + } + attribute_map = { + "download_url": "download_url", + "from_ts": "from_ts", + "resource_id": "resource_id", + "resource_type": "resource_type", + "template_variables": "template_variables", + "timeframe": "timeframe", + "timezone": "timezone", + "to_ts": "to_ts", + } + + def __init__(self_, download_url: str, from_ts: int, resource_id: str, resource_type: ReportScheduleResourceType, template_variables: List[ReportScheduleTemplateVariable], timezone: str, to_ts: int, timeframe: Union[str, UnsetType]=unset, **kwargs): + """ + The configuration and download URL for the initiated print-only report. + + :param download_url: The URL from which the rendered PDF report can be downloaded. + :type download_url: str + + :param from_ts: The start of the rendered time range, as a Unix timestamp in milliseconds. + :type from_ts: int + + :param resource_id: The identifier of the dashboard or integration dashboard. + :type resource_id: str + + :param resource_type: The type of dashboard resource the report schedule targets. + :type resource_type: ReportScheduleResourceType + + :param template_variables: The dashboard template variables applied when rendering the report. + :type template_variables: [ReportScheduleTemplateVariable] + + :param timeframe: The relative time window used, if one was specified in the request. + :type timeframe: str, optional + + :param timezone: The IANA time zone identifier used when rendering the report. + :type timezone: str + + :param to_ts: The end of the rendered time range, as a Unix timestamp in milliseconds. + :type to_ts: int + """ + if timeframe is not unset: + kwargs["timeframe"] = timeframe + super().__init__(kwargs) + + + self_.download_url = download_url + self_.from_ts = from_ts + self_.resource_id = resource_id + self_.resource_type = resource_type + self_.template_variables = template_variables + self_.timezone = timezone + self_.to_ts = to_ts diff --git a/datadog_api_client/v2/model/print_report_response_data.py b/datadog_api_client/v2/model/print_report_response_data.py new file mode 100644 index 0000000000..1fd78ff551 --- /dev/null +++ b/datadog_api_client/v2/model/print_report_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.print_report_response_attributes import PrintReportResponseAttributes + from datadog_api_client.v2.model.print_report_type import PrintReportType + +class PrintReportResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.print_report_response_attributes import PrintReportResponseAttributes + from datadog_api_client.v2.model.print_report_type import PrintReportType + return { + "attributes": (PrintReportResponseAttributes,), + "id": (UUID,), + "type": (PrintReportType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: PrintReportResponseAttributes, id: UUID, type: PrintReportType, **kwargs): + """ + The JSON:API data object for a print-only report. + + :param attributes: The configuration and download URL for the initiated print-only report. + :type attributes: PrintReportResponseAttributes + + :param id: The unique identifier of the report. + :type id: UUID + + :param type: JSON:API resource type for a print-only report. + :type type: PrintReportType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/print_report_type.py b/datadog_api_client/v2/model/print_report_type.py new file mode 100644 index 0000000000..3489e7dfee --- /dev/null +++ b/datadog_api_client/v2/model/print_report_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PrintReportType(ModelSimple): + """ + JSON:API resource type for a print-only report. + + :param value: If omitted defaults to "report". Must be one of ["report"]. + :type value: str + """ + + allowed_values = { + "report", + } + REPORT: ClassVar["PrintReportType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PrintReportType.REPORT = PrintReportType("report") diff --git a/datadog_api_client/v2/model/process_data_source.py b/datadog_api_client/v2/model/process_data_source.py new file mode 100644 index 0000000000..f0644b1b77 --- /dev/null +++ b/datadog_api_client/v2/model/process_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProcessDataSource(ModelSimple): + """ + A data source for process-level infrastructure metrics. + + :param value: If omitted defaults to "process". Must be one of ["process"]. + :type value: str + """ + + allowed_values = { + "process", + } + PROCESS: ClassVar["ProcessDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProcessDataSource.PROCESS = ProcessDataSource("process") diff --git a/datadog_api_client/v2/model/process_scalar_query.py b/datadog_api_client/v2/model/process_scalar_query.py new file mode 100644 index 0000000000..55813e537c --- /dev/null +++ b/datadog_api_client/v2/model/process_scalar_query.py @@ -0,0 +1,118 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.metrics_aggregator import MetricsAggregator + from datadog_api_client.v2.model.process_data_source import ProcessDataSource + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + +class ProcessScalarQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.metrics_aggregator import MetricsAggregator + from datadog_api_client.v2.model.process_data_source import ProcessDataSource + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + return { + "aggregator": (MetricsAggregator,), + "cross_org_uuids": ([str],), + "data_source": (ProcessDataSource,), + "is_normalized_cpu": (bool,), + "limit": (int,), + "metric": (str,), + "name": (str,), + "sort": (QuerySortOrder,), + "tag_filters": ([str],), + "text_filter": (str,), + } + attribute_map = { + "aggregator": "aggregator", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "is_normalized_cpu": "is_normalized_cpu", + "limit": "limit", + "metric": "metric", + "name": "name", + "sort": "sort", + "tag_filters": "tag_filters", + "text_filter": "text_filter", + } + + def __init__(self_, data_source: ProcessDataSource, metric: str, name: str, aggregator: Union[MetricsAggregator, UnsetType]=unset, cross_org_uuids: Union[List[str], UnsetType]=unset, is_normalized_cpu: Union[bool, UnsetType]=unset, limit: Union[int, UnsetType]=unset, sort: Union[QuerySortOrder, UnsetType]=unset, tag_filters: Union[List[str], UnsetType]=unset, text_filter: Union[str, UnsetType]=unset, **kwargs): + """ + A query for host-level process metrics such as CPU and memory usage. + + :param aggregator: The type of aggregation that can be performed on metrics-based queries. + :type aggregator: MetricsAggregator, optional + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source for process-level infrastructure metrics. + :type data_source: ProcessDataSource + + :param is_normalized_cpu: Whether CPU metrics should be normalized by core count. + :type is_normalized_cpu: bool, optional + + :param limit: Maximum number of results to return. + :type limit: int, optional + + :param metric: The process metric to query. + :type metric: str + + :param name: The variable name for use in formulas. + :type name: str + + :param sort: Direction of sort. + :type sort: QuerySortOrder, optional + + :param tag_filters: Tag filters to narrow down processes. + :type tag_filters: [str], optional + + :param text_filter: A full-text search filter to match process names or commands. + :type text_filter: str, optional + """ + if aggregator is not unset: + kwargs["aggregator"] = aggregator + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if is_normalized_cpu is not unset: + kwargs["is_normalized_cpu"] = is_normalized_cpu + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + if tag_filters is not unset: + kwargs["tag_filters"] = tag_filters + if text_filter is not unset: + kwargs["text_filter"] = text_filter + super().__init__(kwargs) + + + self_.data_source = data_source + self_.metric = metric + self_.name = name diff --git a/datadog_api_client/v2/model/process_summaries_meta.py b/datadog_api_client/v2/model/process_summaries_meta.py new file mode 100644 index 0000000000..bd513f041a --- /dev/null +++ b/datadog_api_client/v2/model/process_summaries_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.process_summaries_meta_page import ProcessSummariesMetaPage + +class ProcessSummariesMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.process_summaries_meta_page import ProcessSummariesMetaPage + return { + "page": (ProcessSummariesMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[ProcessSummariesMetaPage, UnsetType]=unset, **kwargs): + """ + Response metadata object. + + :param page: Paging attributes. + :type page: ProcessSummariesMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/process_summaries_meta_page.py b/datadog_api_client/v2/model/process_summaries_meta_page.py new file mode 100644 index 0000000000..0b5a2b0fee --- /dev/null +++ b/datadog_api_client/v2/model/process_summaries_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProcessSummariesMetaPage(ModelNormal): + validations = { + "size": { + "inclusive_maximum": 10000, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "after": (str,), + "size": (int,), + } + attribute_map = { + "after": "after", + "size": "size", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, size: Union[int, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param after: The cursor used to get the next results, if any. To make the next request, use the same + parameters with the addition of the ``page[cursor]``. + :type after: str, optional + + :param size: Number of results returned. + :type size: int, optional + """ + if after is not unset: + kwargs["after"] = after + if size is not unset: + kwargs["size"] = size + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/process_summaries_response.py b/datadog_api_client/v2/model/process_summaries_response.py new file mode 100644 index 0000000000..bdfa6f5741 --- /dev/null +++ b/datadog_api_client/v2/model/process_summaries_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.process_summary import ProcessSummary + from datadog_api_client.v2.model.process_summaries_meta import ProcessSummariesMeta + +class ProcessSummariesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.process_summary import ProcessSummary + from datadog_api_client.v2.model.process_summaries_meta import ProcessSummariesMeta + return { + "data": ([ProcessSummary],), + "meta": (ProcessSummariesMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[ProcessSummary], UnsetType]=unset, meta: Union[ProcessSummariesMeta, UnsetType]=unset, **kwargs): + """ + List of process summaries. + + :param data: Array of process summary objects. + :type data: [ProcessSummary], optional + + :param meta: Response metadata object. + :type meta: ProcessSummariesMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/process_summary.py b/datadog_api_client/v2/model/process_summary.py new file mode 100644 index 0000000000..36707e4fde --- /dev/null +++ b/datadog_api_client/v2/model/process_summary.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.process_summary_attributes import ProcessSummaryAttributes + from datadog_api_client.v2.model.process_summary_type import ProcessSummaryType + +class ProcessSummary(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.process_summary_attributes import ProcessSummaryAttributes + from datadog_api_client.v2.model.process_summary_type import ProcessSummaryType + return { + "attributes": (ProcessSummaryAttributes,), + "id": (str,), + "type": (ProcessSummaryType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ProcessSummaryAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ProcessSummaryType, UnsetType]=unset, **kwargs): + """ + Process summary object. + + :param attributes: Attributes for a process summary. + :type attributes: ProcessSummaryAttributes, optional + + :param id: Process ID. + :type id: str, optional + + :param type: Type of process summary. + :type type: ProcessSummaryType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/process_summary_attributes.py b/datadog_api_client/v2/model/process_summary_attributes.py new file mode 100644 index 0000000000..4909f79afe --- /dev/null +++ b/datadog_api_client/v2/model/process_summary_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProcessSummaryAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cmdline": (str,), + "host": (str,), + "pid": (int,), + "ppid": (int,), + "start": (str,), + "tags": ([str],), + "timestamp": (str,), + "user": (str,), + } + attribute_map = { + "cmdline": "cmdline", + "host": "host", + "pid": "pid", + "ppid": "ppid", + "start": "start", + "tags": "tags", + "timestamp": "timestamp", + "user": "user", + } + + def __init__(self_, cmdline: Union[str, UnsetType]=unset, host: Union[str, UnsetType]=unset, pid: Union[int, UnsetType]=unset, ppid: Union[int, UnsetType]=unset, start: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[str, UnsetType]=unset, user: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for a process summary. + + :param cmdline: Process command line. + :type cmdline: str, optional + + :param host: Host running the process. + :type host: str, optional + + :param pid: Process ID. + :type pid: int, optional + + :param ppid: Parent process ID. + :type ppid: int, optional + + :param start: Time the process was started. + :type start: str, optional + + :param tags: List of tags associated with the process. + :type tags: [str], optional + + :param timestamp: Time the process was seen. + :type timestamp: str, optional + + :param user: Process owner. + :type user: str, optional + """ + if cmdline is not unset: + kwargs["cmdline"] = cmdline + if host is not unset: + kwargs["host"] = host + if pid is not unset: + kwargs["pid"] = pid + if ppid is not unset: + kwargs["ppid"] = ppid + if start is not unset: + kwargs["start"] = start + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + if user is not unset: + kwargs["user"] = user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/process_summary_type.py b/datadog_api_client/v2/model/process_summary_type.py new file mode 100644 index 0000000000..6c6481cf60 --- /dev/null +++ b/datadog_api_client/v2/model/process_summary_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProcessSummaryType(ModelSimple): + """ + Type of process summary. + + :param value: If omitted defaults to "process". Must be one of ["process"]. + :type value: str + """ + + allowed_values = { + "process", + } + PROCESS: ClassVar["ProcessSummaryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProcessSummaryType.PROCESS = ProcessSummaryType("process") diff --git a/datadog_api_client/v2/model/process_timeseries_query.py b/datadog_api_client/v2/model/process_timeseries_query.py new file mode 100644 index 0000000000..4d6d9071ac --- /dev/null +++ b/datadog_api_client/v2/model/process_timeseries_query.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.process_data_source import ProcessDataSource + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + +class ProcessTimeseriesQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.process_data_source import ProcessDataSource + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + return { + "cross_org_uuids": ([str],), + "data_source": (ProcessDataSource,), + "is_normalized_cpu": (bool,), + "limit": (int,), + "metric": (str,), + "name": (str,), + "sort": (QuerySortOrder,), + "tag_filters": ([str],), + "text_filter": (str,), + } + attribute_map = { + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "is_normalized_cpu": "is_normalized_cpu", + "limit": "limit", + "metric": "metric", + "name": "name", + "sort": "sort", + "tag_filters": "tag_filters", + "text_filter": "text_filter", + } + + def __init__(self_, data_source: ProcessDataSource, metric: str, name: str, cross_org_uuids: Union[List[str], UnsetType]=unset, is_normalized_cpu: Union[bool, UnsetType]=unset, limit: Union[int, UnsetType]=unset, sort: Union[QuerySortOrder, UnsetType]=unset, tag_filters: Union[List[str], UnsetType]=unset, text_filter: Union[str, UnsetType]=unset, **kwargs): + """ + A query for host-level process metrics such as CPU and memory usage. + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source for process-level infrastructure metrics. + :type data_source: ProcessDataSource + + :param is_normalized_cpu: Whether CPU metrics should be normalized by core count. + :type is_normalized_cpu: bool, optional + + :param limit: Maximum number of results to return. + :type limit: int, optional + + :param metric: The process metric to query. + :type metric: str + + :param name: The variable name for use in formulas. + :type name: str + + :param sort: Direction of sort. + :type sort: QuerySortOrder, optional + + :param tag_filters: Tag filters to narrow down processes. + :type tag_filters: [str], optional + + :param text_filter: A full-text search filter to match process names or commands. + :type text_filter: str, optional + """ + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if is_normalized_cpu is not unset: + kwargs["is_normalized_cpu"] = is_normalized_cpu + if limit is not unset: + kwargs["limit"] = limit + if sort is not unset: + kwargs["sort"] = sort + if tag_filters is not unset: + kwargs["tag_filters"] = tag_filters + if text_filter is not unset: + kwargs["text_filter"] = text_filter + super().__init__(kwargs) + + + self_.data_source = data_source + self_.metric = metric + self_.name = name diff --git a/datadog_api_client/v2/model/product_analytics_analytics_query.py b/datadog_api_client/v2/model/product_analytics_analytics_query.py new file mode 100644 index 0000000000..211dcf4c21 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_analytics_query.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + from datadog_api_client.v2.model.product_analytics_compute import ProductAnalyticsCompute + from datadog_api_client.v2.model.product_analytics_group_by import ProductAnalyticsGroupBy + from datadog_api_client.v2.model.product_analytics_base_query import ProductAnalyticsBaseQuery + from datadog_api_client.v2.model.product_analytics_event_query import ProductAnalyticsEventQuery + from datadog_api_client.v2.model.product_analytics_occurrence_query import ProductAnalyticsOccurrenceQuery + +class ProductAnalyticsAnalyticsQuery(ModelNormal): + validations = { + "indexes": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters + from datadog_api_client.v2.model.product_analytics_compute import ProductAnalyticsCompute + from datadog_api_client.v2.model.product_analytics_group_by import ProductAnalyticsGroupBy + from datadog_api_client.v2.model.product_analytics_base_query import ProductAnalyticsBaseQuery + return { + "audience_filters": (ProductAnalyticsAudienceFilters,), + "compute": (ProductAnalyticsCompute,), + "group_by": ([ProductAnalyticsGroupBy],), + "indexes": ([str],), + "query": (ProductAnalyticsBaseQuery,), + } + attribute_map = { + "audience_filters": "audience_filters", + "compute": "compute", + "group_by": "group_by", + "indexes": "indexes", + "query": "query", + } + + def __init__(self_, compute: ProductAnalyticsCompute, query: Union[ProductAnalyticsBaseQuery, ProductAnalyticsEventQuery, ProductAnalyticsOccurrenceQuery], audience_filters: Union[ProductAnalyticsAudienceFilters, UnsetType]=unset, group_by: Union[List[ProductAnalyticsGroupBy], UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, **kwargs): + """ + The analytics query definition containing a base query, compute rule, and optional grouping. + + :param audience_filters: Audience filter definitions for targeting specific user segments. + :type audience_filters: ProductAnalyticsAudienceFilters, optional + + :param compute: A compute rule for aggregating data. + :type compute: ProductAnalyticsCompute + + :param group_by: Group-by rules for segmenting results. + :type group_by: [ProductAnalyticsGroupBy], optional + + :param indexes: Restrict the query to specific indexes. Max 1 entry. + :type indexes: [str], optional + + :param query: A query definition discriminated by the ``data_source`` field. + Use ``product_analytics`` for standard event queries, or + ``product_analytics_occurrence`` for occurrence-filtered queries. + :type query: ProductAnalyticsBaseQuery + """ + if audience_filters is not unset: + kwargs["audience_filters"] = audience_filters + if group_by is not unset: + kwargs["group_by"] = group_by + if indexes is not unset: + kwargs["indexes"] = indexes + super().__init__(kwargs) + + + self_.compute = compute + self_.query = query diff --git a/datadog_api_client/v2/model/product_analytics_analytics_request.py b/datadog_api_client/v2/model/product_analytics_analytics_request.py new file mode 100644 index 0000000000..fffd5db701 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_analytics_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_analytics_request_data import ProductAnalyticsAnalyticsRequestData + from datadog_api_client.v2.model.product_analytics_event_query import ProductAnalyticsEventQuery + from datadog_api_client.v2.model.product_analytics_occurrence_query import ProductAnalyticsOccurrenceQuery + +class ProductAnalyticsAnalyticsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_analytics_request_data import ProductAnalyticsAnalyticsRequestData + return { + "data": (ProductAnalyticsAnalyticsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ProductAnalyticsAnalyticsRequestData, **kwargs): + """ + Request for computing analytics results (scalar or timeseries). + + :param data: Data object for an analytics request. + :type data: ProductAnalyticsAnalyticsRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/product_analytics_analytics_request_attributes.py b/datadog_api_client/v2/model/product_analytics_analytics_request_attributes.py new file mode 100644 index 0000000000..f7838a3a85 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_analytics_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_execution_type import ProductAnalyticsExecutionType + from datadog_api_client.v2.model.product_analytics_analytics_query import ProductAnalyticsAnalyticsQuery + from datadog_api_client.v2.model.product_analytics_event_query import ProductAnalyticsEventQuery + from datadog_api_client.v2.model.product_analytics_occurrence_query import ProductAnalyticsOccurrenceQuery + +class ProductAnalyticsAnalyticsRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_execution_type import ProductAnalyticsExecutionType + from datadog_api_client.v2.model.product_analytics_analytics_query import ProductAnalyticsAnalyticsQuery + return { + "enforced_execution_type": (ProductAnalyticsExecutionType,), + "_from": (int,), + "query": (ProductAnalyticsAnalyticsQuery,), + "request_id": (str,), + "to": (int,), + } + attribute_map = { + "enforced_execution_type": "enforced_execution_type", + "_from": "from", + "query": "query", + "request_id": "request_id", + "to": "to", + } + + def __init__(self_, _from: int, query: ProductAnalyticsAnalyticsQuery, to: int, enforced_execution_type: Union[ProductAnalyticsExecutionType, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for an analytics request. + + :param enforced_execution_type: Override the query execution strategy. + :type enforced_execution_type: ProductAnalyticsExecutionType, optional + + :param _from: Start time in epoch milliseconds. Must be less than ``to``. + :type _from: int + + :param query: The analytics query definition containing a base query, compute rule, and optional grouping. + :type query: ProductAnalyticsAnalyticsQuery + + :param request_id: Optional request ID for multi-step query continuation. + :type request_id: str, optional + + :param to: End time in epoch milliseconds. + :type to: int + """ + if enforced_execution_type is not unset: + kwargs["enforced_execution_type"] = enforced_execution_type + if request_id is not unset: + kwargs["request_id"] = request_id + super().__init__(kwargs) + + + self_._from = _from + self_.query = query + self_.to = to diff --git a/datadog_api_client/v2/model/product_analytics_analytics_request_data.py b/datadog_api_client/v2/model/product_analytics_analytics_request_data.py new file mode 100644 index 0000000000..0995eb3084 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_analytics_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_analytics_request_attributes import ProductAnalyticsAnalyticsRequestAttributes + from datadog_api_client.v2.model.product_analytics_analytics_request_type import ProductAnalyticsAnalyticsRequestType + from datadog_api_client.v2.model.product_analytics_event_query import ProductAnalyticsEventQuery + from datadog_api_client.v2.model.product_analytics_occurrence_query import ProductAnalyticsOccurrenceQuery + +class ProductAnalyticsAnalyticsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_analytics_request_attributes import ProductAnalyticsAnalyticsRequestAttributes + from datadog_api_client.v2.model.product_analytics_analytics_request_type import ProductAnalyticsAnalyticsRequestType + return { + "attributes": (ProductAnalyticsAnalyticsRequestAttributes,), + "type": (ProductAnalyticsAnalyticsRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ProductAnalyticsAnalyticsRequestAttributes, type: ProductAnalyticsAnalyticsRequestType, **kwargs): + """ + Data object for an analytics request. + + :param attributes: Attributes for an analytics request. + :type attributes: ProductAnalyticsAnalyticsRequestAttributes + + :param type: The resource type for analytics requests. + :type type: ProductAnalyticsAnalyticsRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/product_analytics_analytics_request_type.py b/datadog_api_client/v2/model/product_analytics_analytics_request_type.py new file mode 100644 index 0000000000..41c85b2226 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_analytics_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsAnalyticsRequestType(ModelSimple): + """ + The resource type for analytics requests. + + :param value: If omitted defaults to "formula_analytics_extended_request". Must be one of ["formula_analytics_extended_request"]. + :type value: str + """ + + allowed_values = { + "formula_analytics_extended_request", + } + FORMULA_ANALYTICS_EXTENDED_REQUEST: ClassVar["ProductAnalyticsAnalyticsRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsAnalyticsRequestType.FORMULA_ANALYTICS_EXTENDED_REQUEST = ProductAnalyticsAnalyticsRequestType("formula_analytics_extended_request") diff --git a/datadog_api_client/v2/model/product_analytics_audience_account_subquery.py b/datadog_api_client/v2/model/product_analytics_audience_account_subquery.py new file mode 100644 index 0000000000..e21e64ae3f --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_audience_account_subquery.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsAudienceAccountSubquery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "query": "query", + } + + def __init__(self_, name: str, query: Union[str, UnsetType]=unset, **kwargs): + """ + An account-based audience query. + + :param name: Name of this query, referenced in the formula. + :type name: str + + :param query: Search query for filtering accounts. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/product_analytics_audience_filters.py b/datadog_api_client/v2/model/product_analytics_audience_filters.py new file mode 100644 index 0000000000..557996cddf --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_audience_filters.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_audience_account_subquery import ProductAnalyticsAudienceAccountSubquery + from datadog_api_client.v2.model.product_analytics_audience_segment_subquery import ProductAnalyticsAudienceSegmentSubquery + from datadog_api_client.v2.model.product_analytics_audience_user_subquery import ProductAnalyticsAudienceUserSubquery + +class ProductAnalyticsAudienceFilters(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_audience_account_subquery import ProductAnalyticsAudienceAccountSubquery + from datadog_api_client.v2.model.product_analytics_audience_segment_subquery import ProductAnalyticsAudienceSegmentSubquery + from datadog_api_client.v2.model.product_analytics_audience_user_subquery import ProductAnalyticsAudienceUserSubquery + return { + "accounts": ([ProductAnalyticsAudienceAccountSubquery],), + "formula": (str,), + "segments": ([ProductAnalyticsAudienceSegmentSubquery],), + "users": ([ProductAnalyticsAudienceUserSubquery],), + } + attribute_map = { + "accounts": "accounts", + "formula": "formula", + "segments": "segments", + "users": "users", + } + + def __init__(self_, accounts: Union[List[ProductAnalyticsAudienceAccountSubquery], UnsetType]=unset, formula: Union[str, UnsetType]=unset, segments: Union[List[ProductAnalyticsAudienceSegmentSubquery], UnsetType]=unset, users: Union[List[ProductAnalyticsAudienceUserSubquery], UnsetType]=unset, **kwargs): + """ + Audience filter definitions for targeting specific user segments. + + :param accounts: Account audience queries. + :type accounts: [ProductAnalyticsAudienceAccountSubquery], optional + + :param formula: Boolean formula combining audience queries by name. + :type formula: str, optional + + :param segments: Segment audience queries. + :type segments: [ProductAnalyticsAudienceSegmentSubquery], optional + + :param users: User audience queries. + :type users: [ProductAnalyticsAudienceUserSubquery], optional + """ + if accounts is not unset: + kwargs["accounts"] = accounts + if formula is not unset: + kwargs["formula"] = formula + if segments is not unset: + kwargs["segments"] = segments + if users is not unset: + kwargs["users"] = users + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_audience_segment_subquery.py b/datadog_api_client/v2/model/product_analytics_audience_segment_subquery.py new file mode 100644 index 0000000000..09529407a1 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_audience_segment_subquery.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsAudienceSegmentSubquery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "segment_id": (UUID,), + } + attribute_map = { + "name": "name", + "segment_id": "segment_id", + } + + def __init__(self_, name: str, segment_id: UUID, **kwargs): + """ + A segment-based audience query. + + :param name: Name of this query, referenced in the formula. + :type name: str + + :param segment_id: UUID of the segment to filter by. + :type segment_id: UUID + """ + super().__init__(kwargs) + + + self_.name = name + self_.segment_id = segment_id diff --git a/datadog_api_client/v2/model/product_analytics_audience_user_subquery.py b/datadog_api_client/v2/model/product_analytics_audience_user_subquery.py new file mode 100644 index 0000000000..d3735d01d0 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_audience_user_subquery.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsAudienceUserSubquery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "query": "query", + } + + def __init__(self_, name: str, query: Union[str, UnsetType]=unset, **kwargs): + """ + A user-based audience query. + + :param name: Name of this query, referenced in the formula. + :type name: str + + :param query: Search query for filtering users. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/product_analytics_base_query.py b/datadog_api_client/v2/model/product_analytics_base_query.py new file mode 100644 index 0000000000..33faba0870 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_base_query.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsBaseQuery(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A query definition discriminated by the ``data_source`` field. + Use ``product_analytics`` for standard event queries, or + ``product_analytics_occurrence`` for occurrence-filtered queries. + + :param data_source: The data source identifier. + :type data_source: ProductAnalyticsEventQueryDataSource + + :param search: Search parameters for an event query. + :type search: ProductAnalyticsEventSearch + """ + 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.product_analytics_event_query import ProductAnalyticsEventQuery + from datadog_api_client.v2.model.product_analytics_occurrence_query import ProductAnalyticsOccurrenceQuery + return { + "oneOf": [ + ProductAnalyticsEventQuery, + ProductAnalyticsOccurrenceQuery, + ], + } diff --git a/datadog_api_client/v2/model/product_analytics_compute.py b/datadog_api_client/v2/model/product_analytics_compute.py new file mode 100644 index 0000000000..581a4e0faa --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_compute.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsCompute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aggregation": (str,), + "interval": (int,), + "metric": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + } + + def __init__(self_, aggregation: str, interval: Union[int, UnsetType]=unset, metric: Union[str, UnsetType]=unset, **kwargs): + """ + A compute rule for aggregating data. + + :param aggregation: The aggregation function (count, cardinality, avg, sum, min, max, etc.). + :type aggregation: str + + :param interval: Time bucket size in milliseconds. Required for timeseries queries. + :type interval: int, optional + + :param metric: The metric to aggregate on. Required for non-count aggregations. + :type metric: str, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v2/model/product_analytics_event_query.py b/datadog_api_client/v2/model/product_analytics_event_query.py new file mode 100644 index 0000000000..b1bea6d540 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_event_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_event_query_data_source import ProductAnalyticsEventQueryDataSource + from datadog_api_client.v2.model.product_analytics_event_search import ProductAnalyticsEventSearch + +class ProductAnalyticsEventQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_event_query_data_source import ProductAnalyticsEventQueryDataSource + from datadog_api_client.v2.model.product_analytics_event_search import ProductAnalyticsEventSearch + return { + "data_source": (ProductAnalyticsEventQueryDataSource,), + "search": (ProductAnalyticsEventSearch,), + } + attribute_map = { + "data_source": "data_source", + "search": "search", + } + + def __init__(self_, data_source: ProductAnalyticsEventQueryDataSource, search: ProductAnalyticsEventSearch, **kwargs): + """ + A standard Product Analytics event query. + + :param data_source: The data source identifier. + :type data_source: ProductAnalyticsEventQueryDataSource + + :param search: Search parameters for an event query. + :type search: ProductAnalyticsEventSearch + """ + super().__init__(kwargs) + + + self_.data_source = data_source + self_.search = search diff --git a/datadog_api_client/v2/model/product_analytics_event_query_data_source.py b/datadog_api_client/v2/model/product_analytics_event_query_data_source.py new file mode 100644 index 0000000000..3ced3e9e7a --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_event_query_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsEventQueryDataSource(ModelSimple): + """ + The data source identifier. + + :param value: If omitted defaults to "product_analytics". Must be one of ["product_analytics"]. + :type value: str + """ + + allowed_values = { + "product_analytics", + } + PRODUCT_ANALYTICS: ClassVar["ProductAnalyticsEventQueryDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsEventQueryDataSource.PRODUCT_ANALYTICS = ProductAnalyticsEventQueryDataSource("product_analytics") diff --git a/datadog_api_client/v2/model/product_analytics_event_search.py b/datadog_api_client/v2/model/product_analytics_event_search.py new file mode 100644 index 0000000000..d47d842cb7 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_event_search.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsEventSearch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + Search parameters for an event query. + + :param query: The search query using Datadog search syntax. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_execution_type.py b/datadog_api_client/v2/model/product_analytics_execution_type.py new file mode 100644 index 0000000000..8d34b68bd5 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_execution_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsExecutionType(ModelSimple): + """ + Override the query execution strategy. + + :param value: Must be one of ["simple", "background", "trino-multistep", "materialized-view"]. + :type value: str + """ + + allowed_values = { + "simple", + "background", + "trino-multistep", + "materialized-view", + } + SIMPLE: ClassVar["ProductAnalyticsExecutionType"] + BACKGROUND: ClassVar["ProductAnalyticsExecutionType"] + TRINO_MULTISTEP: ClassVar["ProductAnalyticsExecutionType"] + MATERIALIZED_VIEW: ClassVar["ProductAnalyticsExecutionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsExecutionType.SIMPLE = ProductAnalyticsExecutionType("simple") +ProductAnalyticsExecutionType.BACKGROUND = ProductAnalyticsExecutionType("background") +ProductAnalyticsExecutionType.TRINO_MULTISTEP = ProductAnalyticsExecutionType("trino-multistep") +ProductAnalyticsExecutionType.MATERIALIZED_VIEW = ProductAnalyticsExecutionType("materialized-view") diff --git a/datadog_api_client/v2/model/product_analytics_group_by.py b/datadog_api_client/v2/model/product_analytics_group_by.py new file mode 100644 index 0000000000..502dc67260 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_group_by.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_group_by_sort import ProductAnalyticsGroupBySort + +class ProductAnalyticsGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_group_by_sort import ProductAnalyticsGroupBySort + return { + "facet": (str,), + "limit": (int,), + "should_exclude_missing": (bool,), + "sort": (ProductAnalyticsGroupBySort,), + "source": (str,), + } + attribute_map = { + "facet": "facet", + "limit": "limit", + "should_exclude_missing": "should_exclude_missing", + "sort": "sort", + "source": "source", + } + + def __init__(self_, facet: str, limit: Union[int, UnsetType]=unset, should_exclude_missing: Union[bool, UnsetType]=unset, sort: Union[ProductAnalyticsGroupBySort, UnsetType]=unset, source: Union[str, UnsetType]=unset, **kwargs): + """ + A group-by rule for segmenting results by facet values. + + :param facet: The facet to group by. + :type facet: str + + :param limit: Maximum number of groups to return. + :type limit: int, optional + + :param should_exclude_missing: Exclude results with missing facet values. + :type should_exclude_missing: bool, optional + + :param sort: Sort configuration for group-by results. + :type sort: ProductAnalyticsGroupBySort, optional + + :param source: The source for audience-filter-based group-by. + :type source: str, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if should_exclude_missing is not unset: + kwargs["should_exclude_missing"] = should_exclude_missing + if sort is not unset: + kwargs["sort"] = sort + if source is not unset: + kwargs["source"] = source + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v2/model/product_analytics_group_by_sort.py b/datadog_api_client/v2/model/product_analytics_group_by_sort.py new file mode 100644 index 0000000000..eef7490b3c --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_group_by_sort.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + +class ProductAnalyticsGroupBySort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_sort_order import QuerySortOrder + return { + "aggregation": (str,), + "metric": (str,), + "order": (QuerySortOrder,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + "order": "order", + } + + def __init__(self_, aggregation: Union[str, UnsetType]=unset, metric: Union[str, UnsetType]=unset, order: Union[QuerySortOrder, UnsetType]=unset, **kwargs): + """ + Sort configuration for group-by results. + + :param aggregation: The aggregation function to sort by. + :type aggregation: str, optional + + :param metric: The metric to sort by. + :type metric: str, optional + + :param order: Direction of sort. + :type order: QuerySortOrder, optional + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if metric is not unset: + kwargs["metric"] = metric + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_interval.py b/datadog_api_client/v2/model/product_analytics_interval.py new file mode 100644 index 0000000000..8e6d97f973 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_interval.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsInterval(ModelNormal): + @cached_property + def openapi_types(_): + return { + "milliseconds": (int,), + "start_time": (int,), + "times": ([int],), + "type": (str,), + } + attribute_map = { + "milliseconds": "milliseconds", + "start_time": "start_time", + "times": "times", + "type": "type", + } + + def __init__(self_, milliseconds: Union[int, UnsetType]=unset, start_time: Union[int, UnsetType]=unset, times: Union[List[int], UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + An interval definition in a timeseries response. + + :param milliseconds: The duration of each time bucket in milliseconds. + :type milliseconds: int, optional + + :param start_time: The start of this interval as an epoch timestamp in milliseconds. + :type start_time: int, optional + + :param times: Epoch timestamps (in milliseconds) for each bucket in this interval. + :type times: [int], optional + + :param type: The interval type (e.g., fixed or auto-computed bucket size). + :type type: str, optional + """ + if milliseconds is not unset: + kwargs["milliseconds"] = milliseconds + if start_time is not unset: + kwargs["start_time"] = start_time + if times is not unset: + kwargs["times"] = times + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_occurrence_filter.py b/datadog_api_client/v2/model/product_analytics_occurrence_filter.py new file mode 100644 index 0000000000..d83207b856 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_occurrence_filter.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsOccurrenceFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "meta": ({str: (str,)},), + "operator": (str,), + "value": (str,), + } + attribute_map = { + "meta": "meta", + "operator": "operator", + "value": "value", + } + + def __init__(self_, operator: str, value: str, meta: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + Filter for occurrence-based queries. + + :param meta: Additional metadata. + :type meta: {str: (str,)}, optional + + :param operator: Comparison operator (=, >=, <=, >, <). + :type operator: str + + :param value: The occurrence count threshold as a string. + :type value: str + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.operator = operator + self_.value = value diff --git a/datadog_api_client/v2/model/product_analytics_occurrence_query.py b/datadog_api_client/v2/model/product_analytics_occurrence_query.py new file mode 100644 index 0000000000..6a3490e145 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_occurrence_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_occurrence_query_data_source import ProductAnalyticsOccurrenceQueryDataSource + from datadog_api_client.v2.model.product_analytics_occurrence_search import ProductAnalyticsOccurrenceSearch + +class ProductAnalyticsOccurrenceQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_occurrence_query_data_source import ProductAnalyticsOccurrenceQueryDataSource + from datadog_api_client.v2.model.product_analytics_occurrence_search import ProductAnalyticsOccurrenceSearch + return { + "data_source": (ProductAnalyticsOccurrenceQueryDataSource,), + "search": (ProductAnalyticsOccurrenceSearch,), + } + attribute_map = { + "data_source": "data_source", + "search": "search", + } + + def __init__(self_, data_source: ProductAnalyticsOccurrenceQueryDataSource, search: ProductAnalyticsOccurrenceSearch, **kwargs): + """ + A Product Analytics occurrence-filtered query. + + :param data_source: The data source identifier for occurrence queries. + :type data_source: ProductAnalyticsOccurrenceQueryDataSource + + :param search: Search parameters for an occurrence query. + :type search: ProductAnalyticsOccurrenceSearch + """ + super().__init__(kwargs) + + + self_.data_source = data_source + self_.search = search diff --git a/datadog_api_client/v2/model/product_analytics_occurrence_query_data_source.py b/datadog_api_client/v2/model/product_analytics_occurrence_query_data_source.py new file mode 100644 index 0000000000..7078ae8851 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_occurrence_query_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsOccurrenceQueryDataSource(ModelSimple): + """ + The data source identifier for occurrence queries. + + :param value: If omitted defaults to "product_analytics_occurrence". Must be one of ["product_analytics_occurrence"]. + :type value: str + """ + + allowed_values = { + "product_analytics_occurrence", + } + PRODUCT_ANALYTICS_OCCURRENCE: ClassVar["ProductAnalyticsOccurrenceQueryDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsOccurrenceQueryDataSource.PRODUCT_ANALYTICS_OCCURRENCE = ProductAnalyticsOccurrenceQueryDataSource("product_analytics_occurrence") diff --git a/datadog_api_client/v2/model/product_analytics_occurrence_search.py b/datadog_api_client/v2/model/product_analytics_occurrence_search.py new file mode 100644 index 0000000000..aa8c826f74 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_occurrence_search.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_occurrence_filter import ProductAnalyticsOccurrenceFilter + +class ProductAnalyticsOccurrenceSearch(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_occurrence_filter import ProductAnalyticsOccurrenceFilter + return { + "occurrences": (ProductAnalyticsOccurrenceFilter,), + "query": (str,), + } + attribute_map = { + "occurrences": "occurrences", + "query": "query", + } + + def __init__(self_, occurrences: Union[ProductAnalyticsOccurrenceFilter, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Search parameters for an occurrence query. + + :param occurrences: Filter for occurrence-based queries. + :type occurrences: ProductAnalyticsOccurrenceFilter, optional + + :param query: The search query using Datadog search syntax. + :type query: str, optional + """ + if occurrences is not unset: + kwargs["occurrences"] = occurrences + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_response_meta.py b/datadog_api_client/v2/model/product_analytics_response_meta.py new file mode 100644 index 0000000000..a458426ad8 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_response_meta_status import ProductAnalyticsResponseMetaStatus + +class ProductAnalyticsResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_response_meta_status import ProductAnalyticsResponseMetaStatus + return { + "request_id": (str,), + "status": (ProductAnalyticsResponseMetaStatus,), + } + attribute_map = { + "request_id": "request_id", + "status": "status", + } + + def __init__(self_, request_id: Union[str, UnsetType]=unset, status: Union[ProductAnalyticsResponseMetaStatus, UnsetType]=unset, **kwargs): + """ + Metadata for a Product Analytics query response. + + :param request_id: Unique identifier for the request, used for multi-step query continuation. + :type request_id: str, optional + + :param status: The execution status of a Product Analytics query. + :type status: ProductAnalyticsResponseMetaStatus, optional + """ + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_response_meta_status.py b/datadog_api_client/v2/model/product_analytics_response_meta_status.py new file mode 100644 index 0000000000..6f148f5a88 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_response_meta_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsResponseMetaStatus(ModelSimple): + """ + The execution status of a Product Analytics query. + + :param value: Must be one of ["done", "running", "timeout"]. + :type value: str + """ + + allowed_values = { + "done", + "running", + "timeout", + } + DONE: ClassVar["ProductAnalyticsResponseMetaStatus"] + RUNNING: ClassVar["ProductAnalyticsResponseMetaStatus"] + TIMEOUT: ClassVar["ProductAnalyticsResponseMetaStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsResponseMetaStatus.DONE = ProductAnalyticsResponseMetaStatus("done") +ProductAnalyticsResponseMetaStatus.RUNNING = ProductAnalyticsResponseMetaStatus("running") +ProductAnalyticsResponseMetaStatus.TIMEOUT = ProductAnalyticsResponseMetaStatus("timeout") diff --git a/datadog_api_client/v2/model/product_analytics_scalar_column.py b/datadog_api_client/v2/model/product_analytics_scalar_column.py new file mode 100644 index 0000000000..bfcfef6fb7 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_scalar_column.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_scalar_column_meta import ProductAnalyticsScalarColumnMeta + from datadog_api_client.v2.model.product_analytics_scalar_column_type import ProductAnalyticsScalarColumnType + +class ProductAnalyticsScalarColumn(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_scalar_column_meta import ProductAnalyticsScalarColumnMeta + from datadog_api_client.v2.model.product_analytics_scalar_column_type import ProductAnalyticsScalarColumnType + return { + "meta": (ProductAnalyticsScalarColumnMeta,), + "name": (str,), + "type": (ProductAnalyticsScalarColumnType,), + "values": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + } + attribute_map = { + "meta": "meta", + "name": "name", + "type": "type", + "values": "values", + } + + def __init__(self_, meta: Union[ProductAnalyticsScalarColumnMeta, UnsetType]=unset, name: Union[str, UnsetType]=unset, type: Union[ProductAnalyticsScalarColumnType, UnsetType]=unset, values: Union[List[Any], UnsetType]=unset, **kwargs): + """ + A column in a scalar response. + + :param meta: Metadata associated with a scalar response column, including optional unit information. + :type meta: ProductAnalyticsScalarColumnMeta, optional + + :param name: Column name (facet name for group-by, or "query"). + :type name: str, optional + + :param type: Column type. + :type type: ProductAnalyticsScalarColumnType, optional + + :param values: Column values. + :type values: [bool, date, datetime, dict, float, int, list, str, UUID, none_type], optional + """ + if meta is not unset: + kwargs["meta"] = meta + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_scalar_column_meta.py b/datadog_api_client/v2/model/product_analytics_scalar_column_meta.py new file mode 100644 index 0000000000..1182ef3ba5 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_scalar_column_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_unit import ProductAnalyticsUnit + +class ProductAnalyticsScalarColumnMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_unit import ProductAnalyticsUnit + return { + "unit": ([ProductAnalyticsUnit], none_type), + } + attribute_map = { + "unit": "unit", + } + + def __init__(self_, unit: Union[List[ProductAnalyticsUnit], none_type, UnsetType]=unset, **kwargs): + """ + Metadata associated with a scalar response column, including optional unit information. + + :param unit: Unit definitions for the column values, if applicable. + :type unit: [ProductAnalyticsUnit], none_type, optional + """ + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_scalar_column_type.py b/datadog_api_client/v2/model/product_analytics_scalar_column_type.py new file mode 100644 index 0000000000..9d1f822a9a --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_scalar_column_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsScalarColumnType(ModelSimple): + """ + Column type. + + :param value: Must be one of ["number", "group"]. + :type value: str + """ + + allowed_values = { + "number", + "group", + } + NUMBER: ClassVar["ProductAnalyticsScalarColumnType"] + GROUP: ClassVar["ProductAnalyticsScalarColumnType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsScalarColumnType.NUMBER = ProductAnalyticsScalarColumnType("number") +ProductAnalyticsScalarColumnType.GROUP = ProductAnalyticsScalarColumnType("group") diff --git a/datadog_api_client/v2/model/product_analytics_scalar_response.py b/datadog_api_client/v2/model/product_analytics_scalar_response.py new file mode 100644 index 0000000000..4887b4161b --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_scalar_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_scalar_response_data import ProductAnalyticsScalarResponseData + from datadog_api_client.v2.model.product_analytics_response_meta import ProductAnalyticsResponseMeta + +class ProductAnalyticsScalarResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_scalar_response_data import ProductAnalyticsScalarResponseData + from datadog_api_client.v2.model.product_analytics_response_meta import ProductAnalyticsResponseMeta + return { + "data": (ProductAnalyticsScalarResponseData,), + "meta": (ProductAnalyticsResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[ProductAnalyticsScalarResponseData, UnsetType]=unset, meta: Union[ProductAnalyticsResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for a scalar analytics query. + + :param data: Data object for a scalar response. + :type data: ProductAnalyticsScalarResponseData, optional + + :param meta: Metadata for a Product Analytics query response. + :type meta: ProductAnalyticsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_scalar_response_attributes.py b/datadog_api_client/v2/model/product_analytics_scalar_response_attributes.py new file mode 100644 index 0000000000..bb4002b94b --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_scalar_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_scalar_column import ProductAnalyticsScalarColumn + +class ProductAnalyticsScalarResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_scalar_column import ProductAnalyticsScalarColumn + return { + "columns": ([ProductAnalyticsScalarColumn],), + } + attribute_map = { + "columns": "columns", + } + + def __init__(self_, columns: Union[List[ProductAnalyticsScalarColumn], UnsetType]=unset, **kwargs): + """ + Attributes of a scalar analytics response, containing the result columns. + + :param columns: The list of result columns, each containing values and metadata. + :type columns: [ProductAnalyticsScalarColumn], optional + """ + if columns is not unset: + kwargs["columns"] = columns + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_scalar_response_data.py b/datadog_api_client/v2/model/product_analytics_scalar_response_data.py new file mode 100644 index 0000000000..da362adfd4 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_scalar_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_scalar_response_attributes import ProductAnalyticsScalarResponseAttributes + from datadog_api_client.v2.model.product_analytics_scalar_response_type import ProductAnalyticsScalarResponseType + +class ProductAnalyticsScalarResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_scalar_response_attributes import ProductAnalyticsScalarResponseAttributes + from datadog_api_client.v2.model.product_analytics_scalar_response_type import ProductAnalyticsScalarResponseType + return { + "attributes": (ProductAnalyticsScalarResponseAttributes,), + "id": (str,), + "type": (ProductAnalyticsScalarResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ProductAnalyticsScalarResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ProductAnalyticsScalarResponseType, UnsetType]=unset, **kwargs): + """ + Data object for a scalar response. + + :param attributes: Attributes of a scalar analytics response, containing the result columns. + :type attributes: ProductAnalyticsScalarResponseAttributes, optional + + :param id: Unique identifier for this response data object. + :type id: str, optional + + :param type: The resource type identifier for a scalar analytics response. + :type type: ProductAnalyticsScalarResponseType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_scalar_response_type.py b/datadog_api_client/v2/model/product_analytics_scalar_response_type.py new file mode 100644 index 0000000000..a177ea9c77 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_scalar_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsScalarResponseType(ModelSimple): + """ + The resource type identifier for a scalar analytics response. + + :param value: If omitted defaults to "scalar_response". Must be one of ["scalar_response"]. + :type value: str + """ + + allowed_values = { + "scalar_response", + } + SCALAR_RESPONSE: ClassVar["ProductAnalyticsScalarResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsScalarResponseType.SCALAR_RESPONSE = ProductAnalyticsScalarResponseType("scalar_response") diff --git a/datadog_api_client/v2/model/product_analytics_serie.py b/datadog_api_client/v2/model/product_analytics_serie.py new file mode 100644 index 0000000000..13c9b341d3 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_serie.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_unit import ProductAnalyticsUnit + +class ProductAnalyticsSerie(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_unit import ProductAnalyticsUnit + return { + "group_tags": ([str],), + "query_index": (int,), + "unit": ([ProductAnalyticsUnit],), + } + attribute_map = { + "group_tags": "group_tags", + "query_index": "query_index", + "unit": "unit", + } + + def __init__(self_, group_tags: Union[List[str], UnsetType]=unset, query_index: Union[int, UnsetType]=unset, unit: Union[List[ProductAnalyticsUnit], UnsetType]=unset, **kwargs): + """ + A series in a timeseries response. + + :param group_tags: The group-by tag values that identify this series. + :type group_tags: [str], optional + + :param query_index: The index of the query that produced this series. + :type query_index: int, optional + + :param unit: Unit definitions for the series values. + :type unit: [ProductAnalyticsUnit], optional + """ + if group_tags is not unset: + kwargs["group_tags"] = group_tags + if query_index is not unset: + kwargs["query_index"] = query_index + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_server_side_event_error.py b/datadog_api_client/v2/model/product_analytics_server_side_event_error.py new file mode 100644 index 0000000000..eb266dd675 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_server_side_event_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsServerSideEventError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "detail": (str,), + "status": (str,), + "title": (str,), + } + attribute_map = { + "detail": "detail", + "status": "status", + "title": "title", + } + + def __init__(self_, detail: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Error details. + + :param detail: Error message. + :type detail: str, optional + + :param status: Error code. + :type status: str, optional + + :param title: Error title. + :type title: str, optional + """ + if detail is not unset: + kwargs["detail"] = detail + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_server_side_event_errors.py b/datadog_api_client/v2/model/product_analytics_server_side_event_errors.py new file mode 100644 index 0000000000..0795f82594 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_server_side_event_errors.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_server_side_event_error import ProductAnalyticsServerSideEventError + +class ProductAnalyticsServerSideEventErrors(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_server_side_event_error import ProductAnalyticsServerSideEventError + return { + "errors": ([ProductAnalyticsServerSideEventError],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: Union[List[ProductAnalyticsServerSideEventError], UnsetType]=unset, **kwargs): + """ + Error response. + + :param errors: Structured errors. + :type errors: [ProductAnalyticsServerSideEventError], optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_server_side_event_item.py b/datadog_api_client/v2/model/product_analytics_server_side_event_item.py new file mode 100644 index 0000000000..8f4fcf1966 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_server_side_event_item.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_server_side_event_item_account import ProductAnalyticsServerSideEventItemAccount + from datadog_api_client.v2.model.product_analytics_server_side_event_item_application import ProductAnalyticsServerSideEventItemApplication + from datadog_api_client.v2.model.product_analytics_server_side_event_item_event import ProductAnalyticsServerSideEventItemEvent + from datadog_api_client.v2.model.product_analytics_server_side_event_item_session import ProductAnalyticsServerSideEventItemSession + from datadog_api_client.v2.model.product_analytics_server_side_event_item_type import ProductAnalyticsServerSideEventItemType + from datadog_api_client.v2.model.product_analytics_server_side_event_item_usr import ProductAnalyticsServerSideEventItemUsr + +class ProductAnalyticsServerSideEventItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_server_side_event_item_account import ProductAnalyticsServerSideEventItemAccount + from datadog_api_client.v2.model.product_analytics_server_side_event_item_application import ProductAnalyticsServerSideEventItemApplication + from datadog_api_client.v2.model.product_analytics_server_side_event_item_event import ProductAnalyticsServerSideEventItemEvent + from datadog_api_client.v2.model.product_analytics_server_side_event_item_session import ProductAnalyticsServerSideEventItemSession + from datadog_api_client.v2.model.product_analytics_server_side_event_item_type import ProductAnalyticsServerSideEventItemType + from datadog_api_client.v2.model.product_analytics_server_side_event_item_usr import ProductAnalyticsServerSideEventItemUsr + return { + "account": (ProductAnalyticsServerSideEventItemAccount,), + "application": (ProductAnalyticsServerSideEventItemApplication,), + "event": (ProductAnalyticsServerSideEventItemEvent,), + "session": (ProductAnalyticsServerSideEventItemSession,), + "type": (ProductAnalyticsServerSideEventItemType,), + "usr": (ProductAnalyticsServerSideEventItemUsr,), + } + attribute_map = { + "account": "account", + "application": "application", + "event": "event", + "session": "session", + "type": "type", + "usr": "usr", + } + + def __init__(self_, application: ProductAnalyticsServerSideEventItemApplication, event: ProductAnalyticsServerSideEventItemEvent, type: ProductAnalyticsServerSideEventItemType, account: Union[ProductAnalyticsServerSideEventItemAccount, UnsetType]=unset, session: Union[ProductAnalyticsServerSideEventItemSession, UnsetType]=unset, usr: Union[ProductAnalyticsServerSideEventItemUsr, UnsetType]=unset, **kwargs): + """ + A Product Analytics server-side event. + + :param account: The account linked to your event. + :type account: ProductAnalyticsServerSideEventItemAccount, optional + + :param application: The application in which you want to send your events. + :type application: ProductAnalyticsServerSideEventItemApplication + + :param event: Fields used for the event. + :type event: ProductAnalyticsServerSideEventItemEvent + + :param session: The session linked to your event. + :type session: ProductAnalyticsServerSideEventItemSession, optional + + :param type: The type of Product Analytics event. Must be ``server`` for server-side events. + :type type: ProductAnalyticsServerSideEventItemType + + :param usr: The user linked to your event. + :type usr: ProductAnalyticsServerSideEventItemUsr, optional + """ + if account is not unset: + kwargs["account"] = account + if session is not unset: + kwargs["session"] = session + if usr is not unset: + kwargs["usr"] = usr + super().__init__(kwargs) + + + self_.application = application + self_.event = event + self_.type = type diff --git a/datadog_api_client/v2/model/product_analytics_server_side_event_item_account.py b/datadog_api_client/v2/model/product_analytics_server_side_event_item_account.py new file mode 100644 index 0000000000..c5925a0d7a --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_server_side_event_item_account.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsServerSideEventItemAccount(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: str, **kwargs): + """ + The account linked to your event. + + :param id: The account ID used in Datadog. + :type id: str + """ + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/product_analytics_server_side_event_item_application.py b/datadog_api_client/v2/model/product_analytics_server_side_event_item_application.py new file mode 100644 index 0000000000..c7e0a1b0d6 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_server_side_event_item_application.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsServerSideEventItemApplication(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: str, **kwargs): + """ + The application in which you want to send your events. + + :param id: The application ID of your application. It can be found in your + `application management page `_. + :type id: str + """ + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/product_analytics_server_side_event_item_event.py b/datadog_api_client/v2/model/product_analytics_server_side_event_item_event.py new file mode 100644 index 0000000000..1498923f65 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_server_side_event_item_event.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsServerSideEventItemEvent(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: str, **kwargs): + """ + Fields used for the event. + + :param name: The name of your event, which is used for search in the same way as view or action names. + :type name: str + """ + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/product_analytics_server_side_event_item_session.py b/datadog_api_client/v2/model/product_analytics_server_side_event_item_session.py new file mode 100644 index 0000000000..8e82a6206b --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_server_side_event_item_session.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsServerSideEventItemSession(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: str, **kwargs): + """ + The session linked to your event. + + :param id: The session ID captured by the SDK. + :type id: str + """ + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/product_analytics_server_side_event_item_type.py b/datadog_api_client/v2/model/product_analytics_server_side_event_item_type.py new file mode 100644 index 0000000000..c599a49404 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_server_side_event_item_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsServerSideEventItemType(ModelSimple): + """ + The type of Product Analytics event. Must be `server` for server-side events. + + :param value: If omitted defaults to "server". Must be one of ["server"]. + :type value: str + """ + + allowed_values = { + "server", + } + SERVER: ClassVar["ProductAnalyticsServerSideEventItemType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsServerSideEventItemType.SERVER = ProductAnalyticsServerSideEventItemType("server") diff --git a/datadog_api_client/v2/model/product_analytics_server_side_event_item_usr.py b/datadog_api_client/v2/model/product_analytics_server_side_event_item_usr.py new file mode 100644 index 0000000000..8c6db56fab --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_server_side_event_item_usr.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsServerSideEventItemUsr(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: str, **kwargs): + """ + The user linked to your event. + + :param id: The user ID used in Datadog. + :type id: str + """ + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/product_analytics_timeseries_response.py b/datadog_api_client/v2/model/product_analytics_timeseries_response.py new file mode 100644 index 0000000000..32ca9a357a --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_timeseries_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_timeseries_response_data import ProductAnalyticsTimeseriesResponseData + from datadog_api_client.v2.model.product_analytics_response_meta import ProductAnalyticsResponseMeta + +class ProductAnalyticsTimeseriesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_timeseries_response_data import ProductAnalyticsTimeseriesResponseData + from datadog_api_client.v2.model.product_analytics_response_meta import ProductAnalyticsResponseMeta + return { + "data": (ProductAnalyticsTimeseriesResponseData,), + "meta": (ProductAnalyticsResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[ProductAnalyticsTimeseriesResponseData, UnsetType]=unset, meta: Union[ProductAnalyticsResponseMeta, UnsetType]=unset, **kwargs): + """ + Response for a timeseries analytics query. + + :param data: Data object for a timeseries analytics response. + :type data: ProductAnalyticsTimeseriesResponseData, optional + + :param meta: Metadata for a Product Analytics query response. + :type meta: ProductAnalyticsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_timeseries_response_attributes.py b/datadog_api_client/v2/model/product_analytics_timeseries_response_attributes.py new file mode 100644 index 0000000000..03619ca47b --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_timeseries_response_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_interval import ProductAnalyticsInterval + from datadog_api_client.v2.model.product_analytics_serie import ProductAnalyticsSerie + +class ProductAnalyticsTimeseriesResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_interval import ProductAnalyticsInterval + from datadog_api_client.v2.model.product_analytics_serie import ProductAnalyticsSerie + return { + "intervals": ([ProductAnalyticsInterval],), + "series": ([ProductAnalyticsSerie],), + "times": ([int],), + "values": ([[float, none_type]],), + } + attribute_map = { + "intervals": "intervals", + "series": "series", + "times": "times", + "values": "values", + } + + def __init__(self_, intervals: Union[List[ProductAnalyticsInterval], UnsetType]=unset, series: Union[List[ProductAnalyticsSerie], UnsetType]=unset, times: Union[List[int], UnsetType]=unset, values: Union[List[List[float]], UnsetType]=unset, **kwargs): + """ + Attributes of a timeseries analytics response, containing series data, timestamps, and interval definitions. + + :param intervals: Interval definitions describing the time buckets used in the response. + :type intervals: [ProductAnalyticsInterval], optional + + :param series: The list of series, each corresponding to a query or group-by combination. + :type series: [ProductAnalyticsSerie], optional + + :param times: Timestamps for each data point (epoch milliseconds). + :type times: [int], optional + + :param values: Values for each series at each time point. + :type values: [[float, none_type]], optional + """ + if intervals is not unset: + kwargs["intervals"] = intervals + if series is not unset: + kwargs["series"] = series + if times is not unset: + kwargs["times"] = times + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_timeseries_response_data.py b/datadog_api_client/v2/model/product_analytics_timeseries_response_data.py new file mode 100644 index 0000000000..2bcd6bf2d0 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_timeseries_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.product_analytics_timeseries_response_attributes import ProductAnalyticsTimeseriesResponseAttributes + from datadog_api_client.v2.model.product_analytics_timeseries_response_type import ProductAnalyticsTimeseriesResponseType + +class ProductAnalyticsTimeseriesResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.product_analytics_timeseries_response_attributes import ProductAnalyticsTimeseriesResponseAttributes + from datadog_api_client.v2.model.product_analytics_timeseries_response_type import ProductAnalyticsTimeseriesResponseType + return { + "attributes": (ProductAnalyticsTimeseriesResponseAttributes,), + "id": (str,), + "type": (ProductAnalyticsTimeseriesResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ProductAnalyticsTimeseriesResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ProductAnalyticsTimeseriesResponseType, UnsetType]=unset, **kwargs): + """ + Data object for a timeseries analytics response. + + :param attributes: Attributes of a timeseries analytics response, containing series data, timestamps, and interval definitions. + :type attributes: ProductAnalyticsTimeseriesResponseAttributes, optional + + :param id: Unique identifier for this response data object. + :type id: str, optional + + :param type: The resource type identifier for a timeseries analytics response. + :type type: ProductAnalyticsTimeseriesResponseType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/product_analytics_timeseries_response_type.py b/datadog_api_client/v2/model/product_analytics_timeseries_response_type.py new file mode 100644 index 0000000000..b464b15f9a --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_timeseries_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProductAnalyticsTimeseriesResponseType(ModelSimple): + """ + The resource type identifier for a timeseries analytics response. + + :param value: If omitted defaults to "timeseries_response". Must be one of ["timeseries_response"]. + :type value: str + """ + + allowed_values = { + "timeseries_response", + } + TIMESERIES_RESPONSE: ClassVar["ProductAnalyticsTimeseriesResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProductAnalyticsTimeseriesResponseType.TIMESERIES_RESPONSE = ProductAnalyticsTimeseriesResponseType("timeseries_response") diff --git a/datadog_api_client/v2/model/product_analytics_unit.py b/datadog_api_client/v2/model/product_analytics_unit.py new file mode 100644 index 0000000000..9cf4fe71e9 --- /dev/null +++ b/datadog_api_client/v2/model/product_analytics_unit.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProductAnalyticsUnit(ModelNormal): + @cached_property + def openapi_types(_): + return { + "family": (str,), + "id": (int,), + "name": (str,), + "plural": (str,), + "scale_factor": (float,), + "short_name": (str,), + } + attribute_map = { + "family": "family", + "id": "id", + "name": "name", + "plural": "plural", + "scale_factor": "scale_factor", + "short_name": "short_name", + } + + def __init__(self_, family: Union[str, UnsetType]=unset, id: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, plural: Union[str, UnsetType]=unset, scale_factor: Union[float, UnsetType]=unset, short_name: Union[str, UnsetType]=unset, **kwargs): + """ + A unit definition for metric values. + + :param family: The unit family (e.g., time, bytes). + :type family: str, optional + + :param id: Numeric identifier for the unit. + :type id: int, optional + + :param name: The full name of the unit (e.g., nanosecond). + :type name: str, optional + + :param plural: Plural form of the unit name (e.g., nanoseconds). + :type plural: str, optional + + :param scale_factor: Conversion factor relative to the base unit of the family. + :type scale_factor: float, optional + + :param short_name: Abbreviated unit name (e.g., ns). + :type short_name: str, optional + """ + if family is not unset: + kwargs["family"] = family + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if plural is not unset: + kwargs["plural"] = plural + if scale_factor is not unset: + kwargs["scale_factor"] = scale_factor + if short_name is not unset: + kwargs["short_name"] = short_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project.py b/datadog_api_client/v2/model/project.py new file mode 100644 index 0000000000..9bc392cea8 --- /dev/null +++ b/datadog_api_client/v2/model/project.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_attributes import ProjectAttributes + from datadog_api_client.v2.model.project_relationships import ProjectRelationships + from datadog_api_client.v2.model.project_resource_type import ProjectResourceType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class Project(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_attributes import ProjectAttributes + from datadog_api_client.v2.model.project_relationships import ProjectRelationships + from datadog_api_client.v2.model.project_resource_type import ProjectResourceType + return { + "attributes": (ProjectAttributes,), + "id": (str,), + "relationships": (ProjectRelationships,), + "type": (ProjectResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ProjectAttributes, id: str, type: ProjectResourceType, relationships: Union[ProjectRelationships, UnsetType]=unset, **kwargs): + """ + A Project. + + :param attributes: Project attributes. + :type attributes: ProjectAttributes + + :param id: The Project's identifier. + :type id: str + + :param relationships: Project relationships. + :type relationships: ProjectRelationships, optional + + :param type: Project resource type. + :type type: ProjectResourceType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/project_attributes.py b/datadog_api_client/v2/model/project_attributes.py new file mode 100644 index 0000000000..65ab8e9949 --- /dev/null +++ b/datadog_api_client/v2/model/project_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_columns_config import ProjectColumnsConfig + from datadog_api_client.v2.model.project_settings import ProjectSettings + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class ProjectAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_columns_config import ProjectColumnsConfig + from datadog_api_client.v2.model.project_settings import ProjectSettings + return { + "columns_config": (ProjectColumnsConfig,), + "enabled_custom_case_types": ([str],), + "key": (str,), + "name": (str,), + "restricted": (bool,), + "settings": (ProjectSettings,), + } + attribute_map = { + "columns_config": "columns_config", + "enabled_custom_case_types": "enabled_custom_case_types", + "key": "key", + "name": "name", + "restricted": "restricted", + "settings": "settings", + } + + def __init__(self_, columns_config: Union[ProjectColumnsConfig, UnsetType]=unset, enabled_custom_case_types: Union[List[str], UnsetType]=unset, key: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, restricted: Union[bool, UnsetType]=unset, settings: Union[ProjectSettings, UnsetType]=unset, **kwargs): + """ + Project attributes. + + :param columns_config: Project columns configuration. + :type columns_config: ProjectColumnsConfig, optional + + :param enabled_custom_case_types: List of enabled custom case type IDs. + :type enabled_custom_case_types: [str], optional + + :param key: The project's key. + :type key: str, optional + + :param name: Project's name. + :type name: str, optional + + :param restricted: Whether the project is restricted. + :type restricted: bool, optional + + :param settings: Project settings. + :type settings: ProjectSettings, optional + """ + if columns_config is not unset: + kwargs["columns_config"] = columns_config + if enabled_custom_case_types is not unset: + kwargs["enabled_custom_case_types"] = enabled_custom_case_types + if key is not unset: + kwargs["key"] = key + if name is not unset: + kwargs["name"] = name + if restricted is not unset: + kwargs["restricted"] = restricted + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project_columns_config.py b/datadog_api_client/v2/model/project_columns_config.py new file mode 100644 index 0000000000..6b92293ea4 --- /dev/null +++ b/datadog_api_client/v2/model/project_columns_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_columns_config_columns_items import ProjectColumnsConfigColumnsItems + +class ProjectColumnsConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_columns_config_columns_items import ProjectColumnsConfigColumnsItems + return { + "columns": ([ProjectColumnsConfigColumnsItems],), + } + attribute_map = { + "columns": "columns", + } + + def __init__(self_, columns: Union[List[ProjectColumnsConfigColumnsItems], UnsetType]=unset, **kwargs): + """ + Project columns configuration. + + :param columns: List of column configurations for the project board view. + :type columns: [ProjectColumnsConfigColumnsItems], optional + """ + if columns is not unset: + kwargs["columns"] = columns + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project_columns_config_columns_items.py b/datadog_api_client/v2/model/project_columns_config_columns_items.py new file mode 100644 index 0000000000..43a2901a5c --- /dev/null +++ b/datadog_api_client/v2/model/project_columns_config_columns_items.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_columns_config_columns_items_sort import ProjectColumnsConfigColumnsItemsSort + +class ProjectColumnsConfigColumnsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_columns_config_columns_items_sort import ProjectColumnsConfigColumnsItemsSort + return { + "sort": (ProjectColumnsConfigColumnsItemsSort,), + "sort_field": (str,), + "type": (str,), + } + attribute_map = { + "sort": "sort", + "sort_field": "sort_field", + "type": "type", + } + + def __init__(self_, sort: Union[ProjectColumnsConfigColumnsItemsSort, UnsetType]=unset, sort_field: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Configuration for a single column in a project board view. + + :param sort: Sort configuration for a project board column. + :type sort: ProjectColumnsConfigColumnsItemsSort, optional + + :param sort_field: The field used to sort items in this column. + :type sort_field: str, optional + + :param type: The type of column. + :type type: str, optional + """ + if sort is not unset: + kwargs["sort"] = sort + if sort_field is not unset: + kwargs["sort_field"] = sort_field + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project_columns_config_columns_items_sort.py b/datadog_api_client/v2/model/project_columns_config_columns_items_sort.py new file mode 100644 index 0000000000..16d3711ba2 --- /dev/null +++ b/datadog_api_client/v2/model/project_columns_config_columns_items_sort.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProjectColumnsConfigColumnsItemsSort(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ascending": (bool,), + "priority": (int,), + } + attribute_map = { + "ascending": "ascending", + "priority": "priority", + } + + def __init__(self_, ascending: Union[bool, UnsetType]=unset, priority: Union[int, UnsetType]=unset, **kwargs): + """ + Sort configuration for a project board column. + + :param ascending: Whether to sort in ascending order. + :type ascending: bool, optional + + :param priority: The sort priority order for this column. + :type priority: int, optional + """ + if ascending is not unset: + kwargs["ascending"] = ascending + if priority is not unset: + kwargs["priority"] = priority + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project_create.py b/datadog_api_client/v2/model/project_create.py new file mode 100644 index 0000000000..4f84575c38 --- /dev/null +++ b/datadog_api_client/v2/model/project_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_create_attributes import ProjectCreateAttributes + from datadog_api_client.v2.model.project_resource_type import ProjectResourceType + +class ProjectCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_create_attributes import ProjectCreateAttributes + from datadog_api_client.v2.model.project_resource_type import ProjectResourceType + return { + "attributes": (ProjectCreateAttributes,), + "type": (ProjectResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ProjectCreateAttributes, type: ProjectResourceType, **kwargs): + """ + Project create. + + :param attributes: Project creation attributes. + :type attributes: ProjectCreateAttributes + + :param type: Project resource type. + :type type: ProjectResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/project_create_attributes.py b/datadog_api_client/v2/model/project_create_attributes.py new file mode 100644 index 0000000000..3c76c22781 --- /dev/null +++ b/datadog_api_client/v2/model/project_create_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProjectCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled_custom_case_types": ([str],), + "key": (str,), + "name": (str,), + "team_uuid": (str,), + } + attribute_map = { + "enabled_custom_case_types": "enabled_custom_case_types", + "key": "key", + "name": "name", + "team_uuid": "team_uuid", + } + + def __init__(self_, key: str, name: str, enabled_custom_case_types: Union[List[str], UnsetType]=unset, team_uuid: Union[str, UnsetType]=unset, **kwargs): + """ + Project creation attributes. + + :param enabled_custom_case_types: List of enabled custom case type IDs. + :type enabled_custom_case_types: [str], optional + + :param key: Project's key. Cannot be "CASE". + :type key: str + + :param name: Project name. + :type name: str + + :param team_uuid: Team UUID to associate with the project. + :type team_uuid: str, optional + """ + if enabled_custom_case_types is not unset: + kwargs["enabled_custom_case_types"] = enabled_custom_case_types + if team_uuid is not unset: + kwargs["team_uuid"] = team_uuid + super().__init__(kwargs) + + + self_.key = key + self_.name = name diff --git a/datadog_api_client/v2/model/project_create_request.py b/datadog_api_client/v2/model/project_create_request.py new file mode 100644 index 0000000000..5518598d38 --- /dev/null +++ b/datadog_api_client/v2/model/project_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_create import ProjectCreate + +class ProjectCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_create import ProjectCreate + return { + "data": (ProjectCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ProjectCreate, **kwargs): + """ + Project create request. + + :param data: Project create. + :type data: ProjectCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/project_favorite.py b/datadog_api_client/v2/model/project_favorite.py new file mode 100644 index 0000000000..2ba845ffd3 --- /dev/null +++ b/datadog_api_client/v2/model/project_favorite.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_favorite_resource_type import ProjectFavoriteResourceType + +class ProjectFavorite(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_favorite_resource_type import ProjectFavoriteResourceType + return { + "id": (str,), + "type": (ProjectFavoriteResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ProjectFavoriteResourceType, **kwargs): + """ + Represents a case project that the current user has bookmarked for quick access. Favorited projects appear prominently in the Case Management UI. + + :param id: The UUID of the favorited project. + :type id: str + + :param type: JSON:API resource type for project favorites. + :type type: ProjectFavoriteResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/project_favorite_resource_type.py b/datadog_api_client/v2/model/project_favorite_resource_type.py new file mode 100644 index 0000000000..5ca7cff8a6 --- /dev/null +++ b/datadog_api_client/v2/model/project_favorite_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProjectFavoriteResourceType(ModelSimple): + """ + JSON:API resource type for project favorites. + + :param value: If omitted defaults to "project_favorite". Must be one of ["project_favorite"]. + :type value: str + """ + + allowed_values = { + "project_favorite", + } + PROJECT_FAVORITE: ClassVar["ProjectFavoriteResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProjectFavoriteResourceType.PROJECT_FAVORITE = ProjectFavoriteResourceType("project_favorite") diff --git a/datadog_api_client/v2/model/project_favorites_response.py b/datadog_api_client/v2/model/project_favorites_response.py new file mode 100644 index 0000000000..96e3f9eb2c --- /dev/null +++ b/datadog_api_client/v2/model/project_favorites_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_favorite import ProjectFavorite + +class ProjectFavoritesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_favorite import ProjectFavorite + return { + "data": ([ProjectFavorite],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ProjectFavorite], **kwargs): + """ + Response containing the list of projects the current user has favorited. + + :param data: List of project favorites. + :type data: [ProjectFavorite] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/project_notification_settings.py b/datadog_api_client/v2/model/project_notification_settings.py new file mode 100644 index 0000000000..30aec0c9b8 --- /dev/null +++ b/datadog_api_client/v2/model/project_notification_settings.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ProjectNotificationSettings(ModelNormal): + @cached_property + def openapi_types(_): + return { + "destinations": ([int],), + "enabled": (bool,), + "notify_on_case_assignment": (bool,), + "notify_on_case_closed": (bool,), + "notify_on_case_comment": (bool,), + "notify_on_case_comment_mention": (bool,), + "notify_on_case_priority_change": (bool,), + "notify_on_case_status_change": (bool,), + "notify_on_case_unassignment": (bool,), + } + attribute_map = { + "destinations": "destinations", + "enabled": "enabled", + "notify_on_case_assignment": "notify_on_case_assignment", + "notify_on_case_closed": "notify_on_case_closed", + "notify_on_case_comment": "notify_on_case_comment", + "notify_on_case_comment_mention": "notify_on_case_comment_mention", + "notify_on_case_priority_change": "notify_on_case_priority_change", + "notify_on_case_status_change": "notify_on_case_status_change", + "notify_on_case_unassignment": "notify_on_case_unassignment", + } + + def __init__(self_, destinations: Union[List[int], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, notify_on_case_assignment: Union[bool, UnsetType]=unset, notify_on_case_closed: Union[bool, UnsetType]=unset, notify_on_case_comment: Union[bool, UnsetType]=unset, notify_on_case_comment_mention: Union[bool, UnsetType]=unset, notify_on_case_priority_change: Union[bool, UnsetType]=unset, notify_on_case_status_change: Union[bool, UnsetType]=unset, notify_on_case_unassignment: Union[bool, UnsetType]=unset, **kwargs): + """ + Project notification settings. + + :param destinations: Notification destinations (1=email, 2=slack, 3=in-app). + :type destinations: [int], optional + + :param enabled: Whether notifications are enabled. + :type enabled: bool, optional + + :param notify_on_case_assignment: Whether to send a notification when a case is assigned. + :type notify_on_case_assignment: bool, optional + + :param notify_on_case_closed: Whether to send a notification when a case is closed. + :type notify_on_case_closed: bool, optional + + :param notify_on_case_comment: Whether to send a notification when a comment is added to a case. + :type notify_on_case_comment: bool, optional + + :param notify_on_case_comment_mention: Whether to send a notification when a user is mentioned in a case comment. + :type notify_on_case_comment_mention: bool, optional + + :param notify_on_case_priority_change: Whether to send a notification when a case's priority changes. + :type notify_on_case_priority_change: bool, optional + + :param notify_on_case_status_change: Whether to send a notification when a case's status changes. + :type notify_on_case_status_change: bool, optional + + :param notify_on_case_unassignment: Whether to send a notification when a case is unassigned. + :type notify_on_case_unassignment: bool, optional + """ + if destinations is not unset: + kwargs["destinations"] = destinations + if enabled is not unset: + kwargs["enabled"] = enabled + if notify_on_case_assignment is not unset: + kwargs["notify_on_case_assignment"] = notify_on_case_assignment + if notify_on_case_closed is not unset: + kwargs["notify_on_case_closed"] = notify_on_case_closed + if notify_on_case_comment is not unset: + kwargs["notify_on_case_comment"] = notify_on_case_comment + if notify_on_case_comment_mention is not unset: + kwargs["notify_on_case_comment_mention"] = notify_on_case_comment_mention + if notify_on_case_priority_change is not unset: + kwargs["notify_on_case_priority_change"] = notify_on_case_priority_change + if notify_on_case_status_change is not unset: + kwargs["notify_on_case_status_change"] = notify_on_case_status_change + if notify_on_case_unassignment is not unset: + kwargs["notify_on_case_unassignment"] = notify_on_case_unassignment + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project_relationship.py b/datadog_api_client/v2/model/project_relationship.py new file mode 100644 index 0000000000..3cbac287bf --- /dev/null +++ b/datadog_api_client/v2/model/project_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_relationship_data import ProjectRelationshipData + +class ProjectRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_relationship_data import ProjectRelationshipData + return { + "data": (ProjectRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ProjectRelationshipData, **kwargs): + """ + Relationship to project. + + :param data: Relationship to project object. + :type data: ProjectRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/project_relationship_data.py b/datadog_api_client/v2/model/project_relationship_data.py new file mode 100644 index 0000000000..07c5958340 --- /dev/null +++ b/datadog_api_client/v2/model/project_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_resource_type import ProjectResourceType + +class ProjectRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_resource_type import ProjectResourceType + return { + "id": (str,), + "type": (ProjectResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ProjectResourceType, **kwargs): + """ + Relationship to project object. + + :param id: A unique identifier that represents the project. + :type id: str + + :param type: Project resource type. + :type type: ProjectResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/project_relationships.py b/datadog_api_client/v2/model/project_relationships.py new file mode 100644 index 0000000000..d956d40592 --- /dev/null +++ b/datadog_api_client/v2/model/project_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_team_links import RelationshipToTeamLinks + from datadog_api_client.v2.model.users_relationship import UsersRelationship + +class ProjectRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_team_links import RelationshipToTeamLinks + from datadog_api_client.v2.model.users_relationship import UsersRelationship + return { + "member_team": (RelationshipToTeamLinks,), + "member_user": (UsersRelationship,), + } + attribute_map = { + "member_team": "member_team", + "member_user": "member_user", + } + + def __init__(self_, member_team: Union[RelationshipToTeamLinks, UnsetType]=unset, member_user: Union[UsersRelationship, UnsetType]=unset, **kwargs): + """ + Project relationships. + + :param member_team: Relationship between a team and a team link + :type member_team: RelationshipToTeamLinks, optional + + :param member_user: Relationship to users. + :type member_user: UsersRelationship, optional + """ + if member_team is not unset: + kwargs["member_team"] = member_team + if member_user is not unset: + kwargs["member_user"] = member_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project_resource_type.py b/datadog_api_client/v2/model/project_resource_type.py new file mode 100644 index 0000000000..7d930a3a4f --- /dev/null +++ b/datadog_api_client/v2/model/project_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProjectResourceType(ModelSimple): + """ + Project resource type. + + :param value: If omitted defaults to "project". Must be one of ["project"]. + :type value: str + """ + + allowed_values = { + "project", + } + PROJECT: ClassVar["ProjectResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProjectResourceType.PROJECT = ProjectResourceType("project") diff --git a/datadog_api_client/v2/model/project_response.py b/datadog_api_client/v2/model/project_response.py new file mode 100644 index 0000000000..12e77aaf9b --- /dev/null +++ b/datadog_api_client/v2/model/project_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project import Project + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class ProjectResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project import Project + return { + "data": (Project,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[Project, UnsetType]=unset, **kwargs): + """ + Project response. + + :param data: A Project. + :type data: Project, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project_settings.py b/datadog_api_client/v2/model/project_settings.py new file mode 100644 index 0000000000..fbca0e2a2a --- /dev/null +++ b/datadog_api_client/v2/model/project_settings.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.auto_close_inactive_cases import AutoCloseInactiveCases + from datadog_api_client.v2.model.auto_transition_assigned_cases import AutoTransitionAssignedCases + from datadog_api_client.v2.model.integration_incident import IntegrationIncident + from datadog_api_client.v2.model.integration_jira import IntegrationJira + from datadog_api_client.v2.model.integration_monitor import IntegrationMonitor + from datadog_api_client.v2.model.integration_on_call import IntegrationOnCall + from datadog_api_client.v2.model.integration_service_now import IntegrationServiceNow + from datadog_api_client.v2.model.project_notification_settings import ProjectNotificationSettings + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class ProjectSettings(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.auto_close_inactive_cases import AutoCloseInactiveCases + from datadog_api_client.v2.model.auto_transition_assigned_cases import AutoTransitionAssignedCases + from datadog_api_client.v2.model.integration_incident import IntegrationIncident + from datadog_api_client.v2.model.integration_jira import IntegrationJira + from datadog_api_client.v2.model.integration_monitor import IntegrationMonitor + from datadog_api_client.v2.model.integration_on_call import IntegrationOnCall + from datadog_api_client.v2.model.integration_service_now import IntegrationServiceNow + from datadog_api_client.v2.model.project_notification_settings import ProjectNotificationSettings + return { + "auto_close_inactive_cases": (AutoCloseInactiveCases,), + "auto_transition_assigned_cases": (AutoTransitionAssignedCases,), + "integration_incident": (IntegrationIncident,), + "integration_jira": (IntegrationJira,), + "integration_monitor": (IntegrationMonitor,), + "integration_on_call": (IntegrationOnCall,), + "integration_service_now": (IntegrationServiceNow,), + "notification": (ProjectNotificationSettings,), + } + attribute_map = { + "auto_close_inactive_cases": "auto_close_inactive_cases", + "auto_transition_assigned_cases": "auto_transition_assigned_cases", + "integration_incident": "integration_incident", + "integration_jira": "integration_jira", + "integration_monitor": "integration_monitor", + "integration_on_call": "integration_on_call", + "integration_service_now": "integration_service_now", + "notification": "notification", + } + + def __init__(self_, auto_close_inactive_cases: Union[AutoCloseInactiveCases, UnsetType]=unset, auto_transition_assigned_cases: Union[AutoTransitionAssignedCases, UnsetType]=unset, integration_incident: Union[IntegrationIncident, UnsetType]=unset, integration_jira: Union[IntegrationJira, UnsetType]=unset, integration_monitor: Union[IntegrationMonitor, UnsetType]=unset, integration_on_call: Union[IntegrationOnCall, UnsetType]=unset, integration_service_now: Union[IntegrationServiceNow, UnsetType]=unset, notification: Union[ProjectNotificationSettings, UnsetType]=unset, **kwargs): + """ + Project settings. + + :param auto_close_inactive_cases: Auto-close inactive cases settings. + :type auto_close_inactive_cases: AutoCloseInactiveCases, optional + + :param auto_transition_assigned_cases: Auto-transition assigned cases settings. + :type auto_transition_assigned_cases: AutoTransitionAssignedCases, optional + + :param integration_incident: Incident integration settings. + :type integration_incident: IntegrationIncident, optional + + :param integration_jira: Jira integration settings. + :type integration_jira: IntegrationJira, optional + + :param integration_monitor: Monitor integration settings. + :type integration_monitor: IntegrationMonitor, optional + + :param integration_on_call: On-Call integration settings. + :type integration_on_call: IntegrationOnCall, optional + + :param integration_service_now: ServiceNow integration settings. + :type integration_service_now: IntegrationServiceNow, optional + + :param notification: Project notification settings. + :type notification: ProjectNotificationSettings, optional + """ + if auto_close_inactive_cases is not unset: + kwargs["auto_close_inactive_cases"] = auto_close_inactive_cases + if auto_transition_assigned_cases is not unset: + kwargs["auto_transition_assigned_cases"] = auto_transition_assigned_cases + if integration_incident is not unset: + kwargs["integration_incident"] = integration_incident + if integration_jira is not unset: + kwargs["integration_jira"] = integration_jira + if integration_monitor is not unset: + kwargs["integration_monitor"] = integration_monitor + if integration_on_call is not unset: + kwargs["integration_on_call"] = integration_on_call + if integration_service_now is not unset: + kwargs["integration_service_now"] = integration_service_now + if notification is not unset: + kwargs["notification"] = notification + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project_update.py b/datadog_api_client/v2/model/project_update.py new file mode 100644 index 0000000000..6626de61be --- /dev/null +++ b/datadog_api_client/v2/model/project_update.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_update_attributes import ProjectUpdateAttributes + from datadog_api_client.v2.model.project_resource_type import ProjectResourceType + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class ProjectUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_update_attributes import ProjectUpdateAttributes + from datadog_api_client.v2.model.project_resource_type import ProjectResourceType + return { + "attributes": (ProjectUpdateAttributes,), + "type": (ProjectResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: ProjectResourceType, attributes: Union[ProjectUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Project update. + + :param attributes: Project update attributes. + :type attributes: ProjectUpdateAttributes, optional + + :param type: Project resource type. + :type type: ProjectResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/project_update_attributes.py b/datadog_api_client/v2/model/project_update_attributes.py new file mode 100644 index 0000000000..8a59b7fa49 --- /dev/null +++ b/datadog_api_client/v2/model/project_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_columns_config import ProjectColumnsConfig + from datadog_api_client.v2.model.project_settings import ProjectSettings + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class ProjectUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_columns_config import ProjectColumnsConfig + from datadog_api_client.v2.model.project_settings import ProjectSettings + return { + "columns_config": (ProjectColumnsConfig,), + "enabled_custom_case_types": ([str],), + "name": (str,), + "settings": (ProjectSettings,), + "team_uuid": (str,), + } + attribute_map = { + "columns_config": "columns_config", + "enabled_custom_case_types": "enabled_custom_case_types", + "name": "name", + "settings": "settings", + "team_uuid": "team_uuid", + } + + def __init__(self_, columns_config: Union[ProjectColumnsConfig, UnsetType]=unset, enabled_custom_case_types: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, settings: Union[ProjectSettings, UnsetType]=unset, team_uuid: Union[str, UnsetType]=unset, **kwargs): + """ + Project update attributes. + + :param columns_config: Project columns configuration. + :type columns_config: ProjectColumnsConfig, optional + + :param enabled_custom_case_types: List of enabled custom case type IDs. + :type enabled_custom_case_types: [str], optional + + :param name: Project name. + :type name: str, optional + + :param settings: Project settings. + :type settings: ProjectSettings, optional + + :param team_uuid: Team UUID to associate with the project. + :type team_uuid: str, optional + """ + if columns_config is not unset: + kwargs["columns_config"] = columns_config + if enabled_custom_case_types is not unset: + kwargs["enabled_custom_case_types"] = enabled_custom_case_types + if name is not unset: + kwargs["name"] = name + if settings is not unset: + kwargs["settings"] = settings + if team_uuid is not unset: + kwargs["team_uuid"] = team_uuid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/project_update_request.py b/datadog_api_client/v2/model/project_update_request.py new file mode 100644 index 0000000000..7e3b355b16 --- /dev/null +++ b/datadog_api_client/v2/model/project_update_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project_update import ProjectUpdate + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class ProjectUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project_update import ProjectUpdate + return { + "data": (ProjectUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ProjectUpdate, **kwargs): + """ + Project update request. + + :param data: Project update. + :type data: ProjectUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/projected_cost.py b/datadog_api_client/v2/model/projected_cost.py new file mode 100644 index 0000000000..4fed105050 --- /dev/null +++ b/datadog_api_client/v2/model/projected_cost.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.projected_cost_attributes import ProjectedCostAttributes + from datadog_api_client.v2.model.projected_cost_type import ProjectedCostType + +class ProjectedCost(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.projected_cost_attributes import ProjectedCostAttributes + from datadog_api_client.v2.model.projected_cost_type import ProjectedCostType + return { + "attributes": (ProjectedCostAttributes,), + "id": (str,), + "type": (ProjectedCostType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ProjectedCostAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[ProjectedCostType, UnsetType]=unset, **kwargs): + """ + Projected Cost data. + + :param attributes: Projected Cost attributes data. + :type attributes: ProjectedCostAttributes, optional + + :param id: Unique ID of the response. + :type id: str, optional + + :param type: Type of cost data. + :type type: ProjectedCostType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/projected_cost_attributes.py b/datadog_api_client/v2/model/projected_cost_attributes.py new file mode 100644 index 0000000000..9d1bdade7c --- /dev/null +++ b/datadog_api_client/v2/model/projected_cost_attributes.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.chargeback_breakdown import ChargebackBreakdown + +class ProjectedCostAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.chargeback_breakdown import ChargebackBreakdown + return { + "account_name": (str,), + "account_public_id": (str,), + "charges": ([ChargebackBreakdown],), + "date": (datetime,), + "org_name": (str,), + "projected_total_cost": (float,), + "public_id": (str,), + "region": (str,), + } + attribute_map = { + "account_name": "account_name", + "account_public_id": "account_public_id", + "charges": "charges", + "date": "date", + "org_name": "org_name", + "projected_total_cost": "projected_total_cost", + "public_id": "public_id", + "region": "region", + } + + def __init__(self_, account_name: Union[str, UnsetType]=unset, account_public_id: Union[str, UnsetType]=unset, charges: Union[List[ChargebackBreakdown], UnsetType]=unset, date: Union[datetime, UnsetType]=unset, org_name: Union[str, UnsetType]=unset, projected_total_cost: Union[float, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, **kwargs): + """ + Projected Cost attributes data. + + :param account_name: The account name. + :type account_name: str, optional + + :param account_public_id: The account public ID. + :type account_public_id: str, optional + + :param charges: List of charges data reported for the requested month. + :type charges: [ChargebackBreakdown], optional + + :param date: The month requested. + :type date: datetime, optional + + :param org_name: The organization name. + :type org_name: str, optional + + :param projected_total_cost: The total projected cost of products for the month. + :type projected_total_cost: float, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param region: The region of the Datadog instance that the organization belongs to. + :type region: str, optional + """ + if account_name is not unset: + kwargs["account_name"] = account_name + if account_public_id is not unset: + kwargs["account_public_id"] = account_public_id + if charges is not unset: + kwargs["charges"] = charges + if date is not unset: + kwargs["date"] = date + if org_name is not unset: + kwargs["org_name"] = org_name + if projected_total_cost is not unset: + kwargs["projected_total_cost"] = projected_total_cost + if public_id is not unset: + kwargs["public_id"] = public_id + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/projected_cost_response.py b/datadog_api_client/v2/model/projected_cost_response.py new file mode 100644 index 0000000000..0f275d0bbd --- /dev/null +++ b/datadog_api_client/v2/model/projected_cost_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.projected_cost import ProjectedCost + +class ProjectedCostResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.projected_cost import ProjectedCost + return { + "data": ([ProjectedCost],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ProjectedCost], UnsetType]=unset, **kwargs): + """ + Projected Cost response. + + :param data: Response containing Projected Cost. + :type data: [ProjectedCost], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/projected_cost_type.py b/datadog_api_client/v2/model/projected_cost_type.py new file mode 100644 index 0000000000..88ab8f257c --- /dev/null +++ b/datadog_api_client/v2/model/projected_cost_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ProjectedCostType(ModelSimple): + """ + Type of cost data. + + :param value: If omitted defaults to "projected_cost". Must be one of ["projected_cost"]. + :type value: str + """ + + allowed_values = { + "projected_cost", + } + PROJECt_COST: ClassVar["ProjectedCostType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ProjectedCostType.PROJECt_COST = ProjectedCostType("projected_cost") diff --git a/datadog_api_client/v2/model/projects_response.py b/datadog_api_client/v2/model/projects_response.py new file mode 100644 index 0000000000..0d7b233170 --- /dev/null +++ b/datadog_api_client/v2/model/projects_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.project import Project + from datadog_api_client.v2.model.any_value_object import AnyValueObject + from datadog_api_client.v2.model.any_value_item import AnyValueItem + +class ProjectsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.project import Project + return { + "data": ([Project],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[Project], UnsetType]=unset, **kwargs): + """ + Response with projects. + + :param data: Projects response data. + :type data: [Project], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/pruned_trace_attributes.py b/datadog_api_client/v2/model/pruned_trace_attributes.py new file mode 100644 index 0000000000..74d96bf89a --- /dev/null +++ b/datadog_api_client/v2/model/pruned_trace_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.summarized_trace import SummarizedTrace + +class PrunedTraceAttributes(ModelNormal): + validations = { + "size_bytes": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.summarized_trace import SummarizedTrace + return { + "is_truncated": (bool,), + "size_bytes": (int,), + "summarized_trace": (SummarizedTrace,), + } + attribute_map = { + "is_truncated": "is_truncated", + "size_bytes": "size_bytes", + "summarized_trace": "summarized_trace", + } + + def __init__(self_, is_truncated: bool, size_bytes: int, summarized_trace: SummarizedTrace, **kwargs): + """ + The attributes of a pruned trace returned by the Get pruned trace by ID endpoint. + + :param is_truncated: Indicates whether the underlying trace was truncated because its size + exceeded the maximum that can be retrieved from storage. + :type is_truncated: bool + + :param size_bytes: The size, in bytes, of the original (non-pruned) trace before summarization. + :type size_bytes: int + + :param summarized_trace: A summarized, hierarchical view of a trace. + :type summarized_trace: SummarizedTrace + """ + super().__init__(kwargs) + + + self_.is_truncated = is_truncated + self_.size_bytes = size_bytes + self_.summarized_trace = summarized_trace diff --git a/datadog_api_client/v2/model/pruned_trace_data.py b/datadog_api_client/v2/model/pruned_trace_data.py new file mode 100644 index 0000000000..62e3e87386 --- /dev/null +++ b/datadog_api_client/v2/model/pruned_trace_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.pruned_trace_attributes import PrunedTraceAttributes + from datadog_api_client.v2.model.pruned_trace_type import PrunedTraceType + +class PrunedTraceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.pruned_trace_attributes import PrunedTraceAttributes + from datadog_api_client.v2.model.pruned_trace_type import PrunedTraceType + return { + "attributes": (PrunedTraceAttributes,), + "id": (str,), + "type": (PrunedTraceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: PrunedTraceAttributes, id: str, type: PrunedTraceType, **kwargs): + """ + A pruned trace resource document. + + :param attributes: The attributes of a pruned trace returned by the Get pruned trace by ID endpoint. + :type attributes: PrunedTraceAttributes + + :param id: The full 128-bit trace ID, encoded as a 32-character hexadecimal string. + :type id: str + + :param type: The type of the pruned trace resource. The value is always ``pruned_trace``. + :type type: PrunedTraceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/pruned_trace_response.py b/datadog_api_client/v2/model/pruned_trace_response.py new file mode 100644 index 0000000000..d7b000c126 --- /dev/null +++ b/datadog_api_client/v2/model/pruned_trace_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.pruned_trace_data import PrunedTraceData + +class PrunedTraceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.pruned_trace_data import PrunedTraceData + return { + "data": (PrunedTraceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PrunedTraceData, **kwargs): + """ + Response containing a single pruned trace. + + :param data: A pruned trace resource document. + :type data: PrunedTraceData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/pruned_trace_type.py b/datadog_api_client/v2/model/pruned_trace_type.py new file mode 100644 index 0000000000..589d3a9134 --- /dev/null +++ b/datadog_api_client/v2/model/pruned_trace_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PrunedTraceType(ModelSimple): + """ + The type of the pruned trace resource. The value is always `pruned_trace`. + + :param value: If omitted defaults to "pruned_trace". Must be one of ["pruned_trace"]. + :type value: str + """ + + allowed_values = { + "pruned_trace", + } + PRUNED_TRACE: ClassVar["PrunedTraceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PrunedTraceType.PRUNED_TRACE = PrunedTraceType("pruned_trace") diff --git a/datadog_api_client/v2/model/publish_app_response.py b/datadog_api_client/v2/model/publish_app_response.py new file mode 100644 index 0000000000..817562fc0f --- /dev/null +++ b/datadog_api_client/v2/model/publish_app_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment import Deployment + +class PublishAppResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment import Deployment + return { + "data": (Deployment,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[Deployment, UnsetType]=unset, **kwargs): + """ + The response object after an app is successfully published. + + :param data: The version of the app that was published. + :type data: Deployment, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/publish_form_data.py b/datadog_api_client/v2/model/publish_form_data.py new file mode 100644 index 0000000000..228f5fd346 --- /dev/null +++ b/datadog_api_client/v2/model/publish_form_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.publish_form_data_attributes import PublishFormDataAttributes + from datadog_api_client.v2.model.form_publication_type import FormPublicationType + +class PublishFormData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.publish_form_data_attributes import PublishFormDataAttributes + from datadog_api_client.v2.model.form_publication_type import FormPublicationType + return { + "attributes": (PublishFormDataAttributes,), + "type": (FormPublicationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: PublishFormDataAttributes, type: FormPublicationType, **kwargs): + """ + The data for publishing a form version. + + :param attributes: The attributes for publishing a form version. + :type attributes: PublishFormDataAttributes + + :param type: The resource type for a form publication. + :type type: FormPublicationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/publish_form_data_attributes.py b/datadog_api_client/v2/model/publish_form_data_attributes.py new file mode 100644 index 0000000000..36659cf072 --- /dev/null +++ b/datadog_api_client/v2/model/publish_form_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class PublishFormDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "version": (int,), + } + attribute_map = { + "version": "version", + } + + def __init__(self_, version: int, **kwargs): + """ + The attributes for publishing a form version. + + :param version: The version number to publish. + :type version: int + """ + super().__init__(kwargs) + + + self_.version = version diff --git a/datadog_api_client/v2/model/publish_form_request.py b/datadog_api_client/v2/model/publish_form_request.py new file mode 100644 index 0000000000..4c1bcd89a3 --- /dev/null +++ b/datadog_api_client/v2/model/publish_form_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.publish_form_data import PublishFormData + +class PublishFormRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.publish_form_data import PublishFormData + return { + "data": (PublishFormData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: PublishFormData, **kwargs): + """ + A request to publish a form version. + + :param data: The data for publishing a form version. + :type data: PublishFormData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/publish_request_type.py b/datadog_api_client/v2/model/publish_request_type.py new file mode 100644 index 0000000000..4f650121ec --- /dev/null +++ b/datadog_api_client/v2/model/publish_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class PublishRequestType(ModelSimple): + """ + The publish-request resource type. + + :param value: If omitted defaults to "publishRequest". Must be one of ["publishRequest"]. + :type value: str + """ + + allowed_values = { + "publishRequest", + } + PUBLISHREQUEST: ClassVar["PublishRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +PublishRequestType.PUBLISHREQUEST = PublishRequestType("publishRequest") diff --git a/datadog_api_client/v2/model/put_apps_datastore_item_response_array.py b/datadog_api_client/v2/model/put_apps_datastore_item_response_array.py new file mode 100644 index 0000000000..6d8986cee2 --- /dev/null +++ b/datadog_api_client/v2/model/put_apps_datastore_item_response_array.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.put_apps_datastore_item_response_data import PutAppsDatastoreItemResponseData + +class PutAppsDatastoreItemResponseArray(ModelNormal): + validations = { + "data": { + "max_items": 100, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.put_apps_datastore_item_response_data import PutAppsDatastoreItemResponseData + return { + "data": ([PutAppsDatastoreItemResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[PutAppsDatastoreItemResponseData], **kwargs): + """ + Response after successfully inserting multiple items into a datastore, containing the identifiers of the created items. + + :param data: An array of data objects containing the identifiers of the successfully inserted items. + :type data: [PutAppsDatastoreItemResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/put_apps_datastore_item_response_data.py b/datadog_api_client/v2/model/put_apps_datastore_item_response_data.py new file mode 100644 index 0000000000..9b70c717a6 --- /dev/null +++ b/datadog_api_client/v2/model/put_apps_datastore_item_response_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + +class PutAppsDatastoreItemResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType + return { + "id": (str,), + "type": (DatastoreItemsDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, type: DatastoreItemsDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data containing the identifier of a single item that was successfully inserted into the datastore. + + :param id: The unique identifier assigned to the inserted item. + :type id: str, optional + + :param type: The resource type for datastore items. + :type type: DatastoreItemsDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/put_incident_notification_rule_request.py b/datadog_api_client/v2/model/put_incident_notification_rule_request.py new file mode 100644 index 0000000000..9b77ba9b99 --- /dev/null +++ b/datadog_api_client/v2/model/put_incident_notification_rule_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/query.py b/datadog_api_client/v2/model/query.py new file mode 100644 index 0000000000..ee3918b2cc --- /dev/null +++ b/datadog_api_client/v2/model/query.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Query(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A data query used by an app. This can take the form of an external action, a data transformation, or a state variable. + + :param events: Events to listen for downstream of the action query. + :type events: [AppBuilderEvent], optional + + :param id: The ID of the action query. + :type id: UUID + + :param name: A unique identifier for this action query. This name is also used to access the query's result throughout the app. + :type name: str + + :param properties: The properties of the action query. + :type properties: ActionQueryProperties + + :param type: The action query type. + :type type: ActionQueryType + """ + 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.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + return { + "oneOf": [ + ActionQuery, + DataTransform, + StateVariable, + ], + } diff --git a/datadog_api_client/v2/model/query_account_request.py b/datadog_api_client/v2/model/query_account_request.py new file mode 100644 index 0000000000..1c5bb10a54 --- /dev/null +++ b/datadog_api_client/v2/model/query_account_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_account_request_data import QueryAccountRequestData + +class QueryAccountRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_account_request_data import QueryAccountRequestData + return { + "data": (QueryAccountRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[QueryAccountRequestData, UnsetType]=unset, **kwargs): + """ + Request body for querying accounts with optional filtering, column selection, and sorting. + + :param data: The data object containing the resource type and attributes for querying accounts. + :type data: QueryAccountRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_account_request_data.py b/datadog_api_client/v2/model/query_account_request_data.py new file mode 100644 index 0000000000..98ae409169 --- /dev/null +++ b/datadog_api_client/v2/model/query_account_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_account_request_data_attributes import QueryAccountRequestDataAttributes + from datadog_api_client.v2.model.query_account_request_data_type import QueryAccountRequestDataType + +class QueryAccountRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_account_request_data_attributes import QueryAccountRequestDataAttributes + from datadog_api_client.v2.model.query_account_request_data_type import QueryAccountRequestDataType + return { + "attributes": (QueryAccountRequestDataAttributes,), + "id": (str,), + "type": (QueryAccountRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: QueryAccountRequestDataType, attributes: Union[QueryAccountRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the resource type and attributes for querying accounts. + + :param attributes: Attributes for filtering and shaping the account query results. + :type attributes: QueryAccountRequestDataAttributes, optional + + :param id: Unique identifier for the query account request resource. + :type id: str, optional + + :param type: Query account request resource type. + :type type: QueryAccountRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/query_account_request_data_attributes.py b/datadog_api_client/v2/model/query_account_request_data_attributes.py new file mode 100644 index 0000000000..35e5a97f06 --- /dev/null +++ b/datadog_api_client/v2/model/query_account_request_data_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_account_request_data_attributes_sort import QueryAccountRequestDataAttributesSort + +class QueryAccountRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_account_request_data_attributes_sort import QueryAccountRequestDataAttributesSort + return { + "limit": (int,), + "query": (str,), + "select_columns": ([str],), + "sort": (QueryAccountRequestDataAttributesSort,), + "wildcard_search_term": (str,), + } + attribute_map = { + "limit": "limit", + "query": "query", + "select_columns": "select_columns", + "sort": "sort", + "wildcard_search_term": "wildcard_search_term", + } + + def __init__(self_, limit: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, select_columns: Union[List[str], UnsetType]=unset, sort: Union[QueryAccountRequestDataAttributesSort, UnsetType]=unset, wildcard_search_term: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for filtering and shaping the account query results. + + :param limit: Maximum number of account records to return in the response. + :type limit: int, optional + + :param query: Filter expression using account attribute conditions to narrow results. + :type query: str, optional + + :param select_columns: List of account attribute column names to include in the response. + :type select_columns: [str], optional + + :param sort: Sorting configuration specifying the field and direction for ordering query results. + :type sort: QueryAccountRequestDataAttributesSort, optional + + :param wildcard_search_term: Free-text term used for wildcard search across account attribute values. + :type wildcard_search_term: str, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if query is not unset: + kwargs["query"] = query + if select_columns is not unset: + kwargs["select_columns"] = select_columns + if sort is not unset: + kwargs["sort"] = sort + if wildcard_search_term is not unset: + kwargs["wildcard_search_term"] = wildcard_search_term + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_account_request_data_attributes_sort.py b/datadog_api_client/v2/model/query_account_request_data_attributes_sort.py new file mode 100644 index 0000000000..1b834a61d0 --- /dev/null +++ b/datadog_api_client/v2/model/query_account_request_data_attributes_sort.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class QueryAccountRequestDataAttributesSort(ModelNormal): + @cached_property + def openapi_types(_): + return { + "field": (str,), + "order": (str,), + } + attribute_map = { + "field": "field", + "order": "order", + } + + def __init__(self_, field: Union[str, UnsetType]=unset, order: Union[str, UnsetType]=unset, **kwargs): + """ + Sorting configuration specifying the field and direction for ordering query results. + + :param field: The attribute field name to sort results by. + :type field: str, optional + + :param order: The sort direction, either ascending or descending. + :type order: str, optional + """ + if field is not unset: + kwargs["field"] = field + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_account_request_data_type.py b/datadog_api_client/v2/model/query_account_request_data_type.py new file mode 100644 index 0000000000..3b704c1e27 --- /dev/null +++ b/datadog_api_client/v2/model/query_account_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class QueryAccountRequestDataType(ModelSimple): + """ + Query account request resource type. + + :param value: If omitted defaults to "query_account_request". Must be one of ["query_account_request"]. + :type value: str + """ + + allowed_values = { + "query_account_request", + } + QUERY_ACCOUNT_REQUEST: ClassVar["QueryAccountRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +QueryAccountRequestDataType.QUERY_ACCOUNT_REQUEST = QueryAccountRequestDataType("query_account_request") diff --git a/datadog_api_client/v2/model/query_event_filtered_users_request.py b/datadog_api_client/v2/model/query_event_filtered_users_request.py new file mode 100644 index 0000000000..09ed2ad6a9 --- /dev/null +++ b/datadog_api_client/v2/model/query_event_filtered_users_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_event_filtered_users_request_data import QueryEventFilteredUsersRequestData + +class QueryEventFilteredUsersRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_event_filtered_users_request_data import QueryEventFilteredUsersRequestData + return { + "data": (QueryEventFilteredUsersRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[QueryEventFilteredUsersRequestData, UnsetType]=unset, **kwargs): + """ + Request body for querying users filtered by user properties combined with event platform activity. + + :param data: The data object containing the resource type and attributes for querying event-filtered users. + :type data: QueryEventFilteredUsersRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_event_filtered_users_request_data.py b/datadog_api_client/v2/model/query_event_filtered_users_request_data.py new file mode 100644 index 0000000000..e5b07fce3e --- /dev/null +++ b/datadog_api_client/v2/model/query_event_filtered_users_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_event_filtered_users_request_data_attributes import QueryEventFilteredUsersRequestDataAttributes + from datadog_api_client.v2.model.query_event_filtered_users_request_data_type import QueryEventFilteredUsersRequestDataType + +class QueryEventFilteredUsersRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_event_filtered_users_request_data_attributes import QueryEventFilteredUsersRequestDataAttributes + from datadog_api_client.v2.model.query_event_filtered_users_request_data_type import QueryEventFilteredUsersRequestDataType + return { + "attributes": (QueryEventFilteredUsersRequestDataAttributes,), + "id": (str,), + "type": (QueryEventFilteredUsersRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: QueryEventFilteredUsersRequestDataType, attributes: Union[QueryEventFilteredUsersRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the resource type and attributes for querying event-filtered users. + + :param attributes: Attributes for filtering users by both user properties and event platform activity. + :type attributes: QueryEventFilteredUsersRequestDataAttributes, optional + + :param id: Unique identifier for the query event filtered users request resource. + :type id: str, optional + + :param type: Query event filtered users request resource type. + :type type: QueryEventFilteredUsersRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/query_event_filtered_users_request_data_attributes.py b/datadog_api_client/v2/model/query_event_filtered_users_request_data_attributes.py new file mode 100644 index 0000000000..ce81864871 --- /dev/null +++ b/datadog_api_client/v2/model/query_event_filtered_users_request_data_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_event_filtered_users_request_data_attributes_event_query import QueryEventFilteredUsersRequestDataAttributesEventQuery + +class QueryEventFilteredUsersRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_event_filtered_users_request_data_attributes_event_query import QueryEventFilteredUsersRequestDataAttributesEventQuery + return { + "event_query": (QueryEventFilteredUsersRequestDataAttributesEventQuery,), + "include_row_count": (bool,), + "limit": (int,), + "query": (str,), + "select_columns": ([str],), + } + attribute_map = { + "event_query": "event_query", + "include_row_count": "include_row_count", + "limit": "limit", + "query": "query", + "select_columns": "select_columns", + } + + def __init__(self_, event_query: Union[QueryEventFilteredUsersRequestDataAttributesEventQuery, UnsetType]=unset, include_row_count: Union[bool, UnsetType]=unset, limit: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, select_columns: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for filtering users by both user properties and event platform activity. + + :param event_query: Event platform query used to filter users based on their event activity within a specified time window. + :type event_query: QueryEventFilteredUsersRequestDataAttributesEventQuery, optional + + :param include_row_count: Whether to include the total count of matching users in the response. + :type include_row_count: bool, optional + + :param limit: Maximum number of user records to return in the response. + :type limit: int, optional + + :param query: Filter expression using user attribute conditions to narrow results. + :type query: str, optional + + :param select_columns: List of user attribute column names to include in the response. + :type select_columns: [str], optional + """ + if event_query is not unset: + kwargs["event_query"] = event_query + if include_row_count is not unset: + kwargs["include_row_count"] = include_row_count + if limit is not unset: + kwargs["limit"] = limit + if query is not unset: + kwargs["query"] = query + if select_columns is not unset: + kwargs["select_columns"] = select_columns + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_event_filtered_users_request_data_attributes_event_query.py b/datadog_api_client/v2/model/query_event_filtered_users_request_data_attributes_event_query.py new file mode 100644 index 0000000000..2e72203c10 --- /dev/null +++ b/datadog_api_client/v2/model/query_event_filtered_users_request_data_attributes_event_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_event_filtered_users_request_data_attributes_event_query_time_frame import QueryEventFilteredUsersRequestDataAttributesEventQueryTimeFrame + +class QueryEventFilteredUsersRequestDataAttributesEventQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_event_filtered_users_request_data_attributes_event_query_time_frame import QueryEventFilteredUsersRequestDataAttributesEventQueryTimeFrame + return { + "query": (str,), + "time_frame": (QueryEventFilteredUsersRequestDataAttributesEventQueryTimeFrame,), + } + attribute_map = { + "query": "query", + "time_frame": "time_frame", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, time_frame: Union[QueryEventFilteredUsersRequestDataAttributesEventQueryTimeFrame, UnsetType]=unset, **kwargs): + """ + Event platform query used to filter users based on their event activity within a specified time window. + + :param query: The event platform query expression for filtering users by their event activity. + :type query: str, optional + + :param time_frame: The time window defining the start and end of the event query period as Unix timestamps. + :type time_frame: QueryEventFilteredUsersRequestDataAttributesEventQueryTimeFrame, optional + """ + if query is not unset: + kwargs["query"] = query + if time_frame is not unset: + kwargs["time_frame"] = time_frame + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_event_filtered_users_request_data_attributes_event_query_time_frame.py b/datadog_api_client/v2/model/query_event_filtered_users_request_data_attributes_event_query_time_frame.py new file mode 100644 index 0000000000..d294df0286 --- /dev/null +++ b/datadog_api_client/v2/model/query_event_filtered_users_request_data_attributes_event_query_time_frame.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class QueryEventFilteredUsersRequestDataAttributesEventQueryTimeFrame(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (int,), + "start": (int,), + } + attribute_map = { + "end": "end", + "start": "start", + } + + def __init__(self_, end: Union[int, UnsetType]=unset, start: Union[int, UnsetType]=unset, **kwargs): + """ + The time window defining the start and end of the event query period as Unix timestamps. + + :param end: End of the time frame as a Unix timestamp in seconds. + :type end: int, optional + + :param start: Start of the time frame as a Unix timestamp in seconds. + :type start: int, optional + """ + if end is not unset: + kwargs["end"] = end + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_event_filtered_users_request_data_type.py b/datadog_api_client/v2/model/query_event_filtered_users_request_data_type.py new file mode 100644 index 0000000000..8b95bfc88a --- /dev/null +++ b/datadog_api_client/v2/model/query_event_filtered_users_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class QueryEventFilteredUsersRequestDataType(ModelSimple): + """ + Query event filtered users request resource type. + + :param value: If omitted defaults to "query_event_filtered_users_request". Must be one of ["query_event_filtered_users_request"]. + :type value: str + """ + + allowed_values = { + "query_event_filtered_users_request", + } + QUERY_EVENT_FILTERED_USERS_REQUEST: ClassVar["QueryEventFilteredUsersRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +QueryEventFilteredUsersRequestDataType.QUERY_EVENT_FILTERED_USERS_REQUEST = QueryEventFilteredUsersRequestDataType("query_event_filtered_users_request") diff --git a/datadog_api_client/v2/model/query_formula.py b/datadog_api_client/v2/model/query_formula.py new file mode 100644 index 0000000000..662f286989 --- /dev/null +++ b/datadog_api_client/v2/model/query_formula.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.formula_limit import FormulaLimit + +class QueryFormula(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.formula_limit import FormulaLimit + return { + "formula": (str,), + "limit": (FormulaLimit,), + } + attribute_map = { + "formula": "formula", + "limit": "limit", + } + + def __init__(self_, formula: str, limit: Union[FormulaLimit, UnsetType]=unset, **kwargs): + """ + A formula for calculation based on one or more queries. + + :param formula: Formula string, referencing one or more queries with their name property. + :type formula: str + + :param limit: Message for specifying limits to the number of values returned by a query. + This limit is only for scalar queries and has no effect on timeseries queries. + :type limit: FormulaLimit, optional + """ + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + + self_.formula = formula diff --git a/datadog_api_client/v2/model/query_response.py b/datadog_api_client/v2/model/query_response.py new file mode 100644 index 0000000000..551dfdfaeb --- /dev/null +++ b/datadog_api_client/v2/model/query_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_response_data import QueryResponseData + +class QueryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_response_data import QueryResponseData + return { + "data": (QueryResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[QueryResponseData, UnsetType]=unset, **kwargs): + """ + Response containing the query results with matched records and total count. + + :param data: The data object containing the resource type and attributes of the query response. + :type data: QueryResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_response_data.py b/datadog_api_client/v2/model/query_response_data.py new file mode 100644 index 0000000000..4289a4bac7 --- /dev/null +++ b/datadog_api_client/v2/model/query_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_response_data_attributes import QueryResponseDataAttributes + from datadog_api_client.v2.model.query_response_data_type import QueryResponseDataType + +class QueryResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_response_data_attributes import QueryResponseDataAttributes + from datadog_api_client.v2.model.query_response_data_type import QueryResponseDataType + return { + "attributes": (QueryResponseDataAttributes,), + "id": (str,), + "type": (QueryResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: QueryResponseDataType, attributes: Union[QueryResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the resource type and attributes of the query response. + + :param attributes: Attributes of the query response, containing the matched records and total count. + :type attributes: QueryResponseDataAttributes, optional + + :param id: Unique identifier for the query response resource. + :type id: str, optional + + :param type: Query response resource type. + :type type: QueryResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/query_response_data_attributes.py b/datadog_api_client/v2/model/query_response_data_attributes.py new file mode 100644 index 0000000000..c8fefd0e51 --- /dev/null +++ b/datadog_api_client/v2/model/query_response_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class QueryResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hits": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + "total": (int,), + } + attribute_map = { + "hits": "hits", + "total": "total", + } + + def __init__(self_, hits: Union[List[Any], UnsetType]=unset, total: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of the query response, containing the matched records and total count. + + :param hits: The list of matching records returned by the query, each as a map of attribute names to values. + :type hits: [bool, date, datetime, dict, float, int, list, str, UUID, none_type], optional + + :param total: Total number of records matching the query, regardless of the limit applied. + :type total: int, optional + """ + if hits is not unset: + kwargs["hits"] = hits + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_response_data_type.py b/datadog_api_client/v2/model/query_response_data_type.py new file mode 100644 index 0000000000..cbd7dc9f30 --- /dev/null +++ b/datadog_api_client/v2/model/query_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class QueryResponseDataType(ModelSimple): + """ + Query response resource type. + + :param value: If omitted defaults to "query_response". Must be one of ["query_response"]. + :type value: str + """ + + allowed_values = { + "query_response", + } + QUERY_RESPONSE: ClassVar["QueryResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +QueryResponseDataType.QUERY_RESPONSE = QueryResponseDataType("query_response") diff --git a/datadog_api_client/v2/model/query_sort_order.py b/datadog_api_client/v2/model/query_sort_order.py new file mode 100644 index 0000000000..977a1fd408 --- /dev/null +++ b/datadog_api_client/v2/model/query_sort_order.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class QuerySortOrder(ModelSimple): + """ + Direction of sort. + + :param value: If omitted defaults to "desc". Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + ASC: ClassVar["QuerySortOrder"] + DESC: ClassVar["QuerySortOrder"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +QuerySortOrder.ASC = QuerySortOrder("asc") +QuerySortOrder.DESC = QuerySortOrder("desc") diff --git a/datadog_api_client/v2/model/query_users_request.py b/datadog_api_client/v2/model/query_users_request.py new file mode 100644 index 0000000000..38d90dcc1f --- /dev/null +++ b/datadog_api_client/v2/model/query_users_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_users_request_data import QueryUsersRequestData + +class QueryUsersRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_users_request_data import QueryUsersRequestData + return { + "data": (QueryUsersRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[QueryUsersRequestData, UnsetType]=unset, **kwargs): + """ + Request body for querying users with optional filtering, column selection, and sorting. + + :param data: The data object containing the resource type and attributes for querying users. + :type data: QueryUsersRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_users_request_data.py b/datadog_api_client/v2/model/query_users_request_data.py new file mode 100644 index 0000000000..c1900cc9d1 --- /dev/null +++ b/datadog_api_client/v2/model/query_users_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_users_request_data_attributes import QueryUsersRequestDataAttributes + from datadog_api_client.v2.model.query_users_request_data_type import QueryUsersRequestDataType + +class QueryUsersRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_users_request_data_attributes import QueryUsersRequestDataAttributes + from datadog_api_client.v2.model.query_users_request_data_type import QueryUsersRequestDataType + return { + "attributes": (QueryUsersRequestDataAttributes,), + "id": (str,), + "type": (QueryUsersRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: QueryUsersRequestDataType, attributes: Union[QueryUsersRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the resource type and attributes for querying users. + + :param attributes: Attributes for filtering and shaping the user query results. + :type attributes: QueryUsersRequestDataAttributes, optional + + :param id: Unique identifier for the query users request resource. + :type id: str, optional + + :param type: Query users request resource type. + :type type: QueryUsersRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/query_users_request_data_attributes.py b/datadog_api_client/v2/model/query_users_request_data_attributes.py new file mode 100644 index 0000000000..7f4d183431 --- /dev/null +++ b/datadog_api_client/v2/model/query_users_request_data_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_users_request_data_attributes_sort import QueryUsersRequestDataAttributesSort + +class QueryUsersRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_users_request_data_attributes_sort import QueryUsersRequestDataAttributesSort + return { + "limit": (int,), + "query": (str,), + "select_columns": ([str],), + "sort": (QueryUsersRequestDataAttributesSort,), + "wildcard_search_term": (str,), + } + attribute_map = { + "limit": "limit", + "query": "query", + "select_columns": "select_columns", + "sort": "sort", + "wildcard_search_term": "wildcard_search_term", + } + + def __init__(self_, limit: Union[int, UnsetType]=unset, query: Union[str, UnsetType]=unset, select_columns: Union[List[str], UnsetType]=unset, sort: Union[QueryUsersRequestDataAttributesSort, UnsetType]=unset, wildcard_search_term: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for filtering and shaping the user query results. + + :param limit: Maximum number of user records to return in the response. + :type limit: int, optional + + :param query: Filter expression using user attribute conditions to narrow results. + :type query: str, optional + + :param select_columns: List of user attribute column names to include in the response. + :type select_columns: [str], optional + + :param sort: Sorting configuration specifying the field and direction for ordering user query results. + :type sort: QueryUsersRequestDataAttributesSort, optional + + :param wildcard_search_term: Free-text term used for wildcard search across user attribute values. + :type wildcard_search_term: str, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if query is not unset: + kwargs["query"] = query + if select_columns is not unset: + kwargs["select_columns"] = select_columns + if sort is not unset: + kwargs["sort"] = sort + if wildcard_search_term is not unset: + kwargs["wildcard_search_term"] = wildcard_search_term + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_users_request_data_attributes_sort.py b/datadog_api_client/v2/model/query_users_request_data_attributes_sort.py new file mode 100644 index 0000000000..f6a7c63081 --- /dev/null +++ b/datadog_api_client/v2/model/query_users_request_data_attributes_sort.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class QueryUsersRequestDataAttributesSort(ModelNormal): + @cached_property + def openapi_types(_): + return { + "field": (str,), + "order": (str,), + } + attribute_map = { + "field": "field", + "order": "order", + } + + def __init__(self_, field: Union[str, UnsetType]=unset, order: Union[str, UnsetType]=unset, **kwargs): + """ + Sorting configuration specifying the field and direction for ordering user query results. + + :param field: The user attribute field name to sort results by. + :type field: str, optional + + :param order: The sort direction, either ascending or descending. + :type order: str, optional + """ + if field is not unset: + kwargs["field"] = field + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/query_users_request_data_type.py b/datadog_api_client/v2/model/query_users_request_data_type.py new file mode 100644 index 0000000000..3fe18ab6f4 --- /dev/null +++ b/datadog_api_client/v2/model/query_users_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class QueryUsersRequestDataType(ModelSimple): + """ + Query users request resource type. + + :param value: If omitted defaults to "query_users_request". Must be one of ["query_users_request"]. + :type value: str + """ + + allowed_values = { + "query_users_request", + } + QUERY_USERS_REQUEST: ClassVar["QueryUsersRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +QueryUsersRequestDataType.QUERY_USERS_REQUEST = QueryUsersRequestDataType("query_users_request") diff --git a/datadog_api_client/v2/model/raw_error_budget_remaining.py b/datadog_api_client/v2/model/raw_error_budget_remaining.py new file mode 100644 index 0000000000..a30a3eb480 --- /dev/null +++ b/datadog_api_client/v2/model/raw_error_budget_remaining.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RawErrorBudgetRemaining(ModelNormal): + @cached_property + def openapi_types(_): + return { + "unit": (str,), + "value": (float,), + } + attribute_map = { + "unit": "unit", + "value": "value", + } + + def __init__(self_, unit: str, value: float, **kwargs): + """ + The raw error budget remaining for the SLO. + + :param unit: The unit of the error budget (for example, ``seconds`` , ``requests`` ). + :type unit: str + + :param value: The numeric value of the remaining error budget. + :type value: float + """ + super().__init__(kwargs) + + + self_.unit = unit + self_.value = value diff --git a/datadog_api_client/v2/model/react_native_sourcemap_attributes.py b/datadog_api_client/v2/model/react_native_sourcemap_attributes.py new file mode 100644 index 0000000000..e79c944682 --- /dev/null +++ b/datadog_api_client/v2/model/react_native_sourcemap_attributes.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ReactNativeSourcemapAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "build_number": (str,), + "bundle_name": (str,), + "bundle_version": (str,), + "created_at": (datetime,), + "debug_id": (str,), + "mapkind": (str,), + "platform": (str,), + "service": (str,), + "size": (int,), + "version": (str,), + } + attribute_map = { + "build_number": "build_number", + "bundle_name": "bundle_name", + "bundle_version": "bundle_version", + "created_at": "created_at", + "debug_id": "debug_id", + "mapkind": "mapkind", + "platform": "platform", + "service": "service", + "size": "size", + "version": "version", + } + + def __init__(self_, created_at: datetime, mapkind: str, size: int, build_number: Union[str, UnsetType]=unset, bundle_name: Union[str, UnsetType]=unset, bundle_version: Union[str, UnsetType]=unset, debug_id: Union[str, UnsetType]=unset, platform: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a React Native source map. + + :param build_number: The build number. + :type build_number: str, optional + + :param bundle_name: The bundle name. + :type bundle_name: str, optional + + :param bundle_version: The bundle version. + :type bundle_version: str, optional + + :param created_at: The timestamp when the source map was created. + :type created_at: datetime + + :param debug_id: The debug identifier (UUID format). + :type debug_id: str, optional + + :param mapkind: The type of source map. + :type mapkind: str + + :param platform: The platform the source map was built for (e.g., ``ios`` , ``android`` ). + :type platform: str, optional + + :param service: The service name associated with the source map. + :type service: str, optional + + :param size: The size of the source map file in bytes. + :type size: int + + :param version: The version of the service associated with the source map. + :type version: str, optional + """ + if build_number is not unset: + kwargs["build_number"] = build_number + if bundle_name is not unset: + kwargs["bundle_name"] = bundle_name + if bundle_version is not unset: + kwargs["bundle_version"] = bundle_version + if debug_id is not unset: + kwargs["debug_id"] = debug_id + if platform is not unset: + kwargs["platform"] = platform + if service is not unset: + kwargs["service"] = service + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.created_at = created_at + self_.mapkind = mapkind + self_.size = size diff --git a/datadog_api_client/v2/model/react_native_sourcemap_data.py b/datadog_api_client/v2/model/react_native_sourcemap_data.py new file mode 100644 index 0000000000..c08b1a006d --- /dev/null +++ b/datadog_api_client/v2/model/react_native_sourcemap_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.react_native_sourcemap_attributes import ReactNativeSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + +class ReactNativeSourcemapData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.react_native_sourcemap_attributes import ReactNativeSourcemapAttributes + from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType + return { + "attributes": (ReactNativeSourcemapAttributes,), + "id": (str,), + "type": (SourcemapDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ReactNativeSourcemapAttributes, id: str, type: SourcemapDataType, **kwargs): + """ + React Native source map data object. + + :param attributes: Attributes of a React Native source map. + :type attributes: ReactNativeSourcemapAttributes + + :param id: The unique identifier of the source map. + :type id: str + + :param type: The resource type for source map objects. + :type type: SourcemapDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/readiness_gate.py b/datadog_api_client/v2/model/readiness_gate.py new file mode 100644 index 0000000000..2922ed01b3 --- /dev/null +++ b/datadog_api_client/v2/model/readiness_gate.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.readiness_gate_threshold_type import ReadinessGateThresholdType + +class ReadinessGate(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.readiness_gate_threshold_type import ReadinessGateThresholdType + return { + "threshold_type": (ReadinessGateThresholdType,), + } + attribute_map = { + "threshold_type": "thresholdType", + } + + def __init__(self_, threshold_type: ReadinessGateThresholdType, **kwargs): + """ + Used to merge multiple branches into a single branch. + + :param threshold_type: The definition of ``ReadinessGateThresholdType`` object. + :type threshold_type: ReadinessGateThresholdType + """ + super().__init__(kwargs) + + + self_.threshold_type = threshold_type diff --git a/datadog_api_client/v2/model/readiness_gate_threshold_type.py b/datadog_api_client/v2/model/readiness_gate_threshold_type.py new file mode 100644 index 0000000000..1cb520d2c2 --- /dev/null +++ b/datadog_api_client/v2/model/readiness_gate_threshold_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReadinessGateThresholdType(ModelSimple): + """ + The definition of `ReadinessGateThresholdType` object. + + :param value: Must be one of ["ANY", "ALL"]. + :type value: str + """ + + allowed_values = { + "ANY", + "ALL", + } + ANY: ClassVar["ReadinessGateThresholdType"] + ALL: ClassVar["ReadinessGateThresholdType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReadinessGateThresholdType.ANY = ReadinessGateThresholdType("ANY") +ReadinessGateThresholdType.ALL = ReadinessGateThresholdType("ALL") diff --git a/datadog_api_client/v2/model/recommendation_attributes.py b/datadog_api_client/v2/model/recommendation_attributes.py new file mode 100644 index 0000000000..28bd63219a --- /dev/null +++ b/datadog_api_client/v2/model/recommendation_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.component_recommendation import ComponentRecommendation + +class RecommendationAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.component_recommendation import ComponentRecommendation + return { + "confidence_level": (float,), + "driver": (ComponentRecommendation,), + "executor": (ComponentRecommendation,), + } + attribute_map = { + "confidence_level": "confidence_level", + "driver": "driver", + "executor": "executor", + } + + def __init__(self_, driver: ComponentRecommendation, executor: ComponentRecommendation, confidence_level: Union[float, UnsetType]=unset, **kwargs): + """ + Attributes of the SPA Recommendation resource. Contains recommendations for both driver and executor components. + + :param confidence_level: The confidence level of the recommendation, expressed as a value between 0.0 (low confidence) and 1.0 (high confidence). + :type confidence_level: float, optional + + :param driver: Resource recommendation for a single Spark component (driver or executor). Contains estimation data used to patch Spark job specs. + :type driver: ComponentRecommendation + + :param executor: Resource recommendation for a single Spark component (driver or executor). Contains estimation data used to patch Spark job specs. + :type executor: ComponentRecommendation + """ + if confidence_level is not unset: + kwargs["confidence_level"] = confidence_level + super().__init__(kwargs) + + + self_.driver = driver + self_.executor = executor diff --git a/datadog_api_client/v2/model/recommendation_data.py b/datadog_api_client/v2/model/recommendation_data.py new file mode 100644 index 0000000000..3a147312f5 --- /dev/null +++ b/datadog_api_client/v2/model/recommendation_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.recommendation_attributes import RecommendationAttributes + from datadog_api_client.v2.model.recommendation_type import RecommendationType + +class RecommendationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.recommendation_attributes import RecommendationAttributes + from datadog_api_client.v2.model.recommendation_type import RecommendationType + return { + "attributes": (RecommendationAttributes,), + "id": (str,), + "type": (RecommendationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RecommendationAttributes, type: RecommendationType, id: Union[str, UnsetType]=unset, **kwargs): + """ + JSON:API resource object for SPA Recommendation. Includes type, optional ID, and resource attributes with structured recommendations. + + :param attributes: Attributes of the SPA Recommendation resource. Contains recommendations for both driver and executor components. + :type attributes: RecommendationAttributes + + :param id: Resource identifier for the recommendation. Optional in responses. + :type id: str, optional + + :param type: JSON:API resource type for Spark Pod Autosizing recommendations. Identifies the Recommendation resource returned by SPA. + :type type: RecommendationType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/recommendation_document.py b/datadog_api_client/v2/model/recommendation_document.py new file mode 100644 index 0000000000..3e388fb241 --- /dev/null +++ b/datadog_api_client/v2/model/recommendation_document.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.recommendation_data import RecommendationData + +class RecommendationDocument(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.recommendation_data import RecommendationData + return { + "data": (RecommendationData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RecommendationData, **kwargs): + """ + JSON:API document containing a single Recommendation resource. Returned by SPA when the Spark Gateway requests recommendations. + + :param data: JSON:API resource object for SPA Recommendation. Includes type, optional ID, and resource attributes with structured recommendations. + :type data: RecommendationData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/recommendation_type.py b/datadog_api_client/v2/model/recommendation_type.py new file mode 100644 index 0000000000..05d622343d --- /dev/null +++ b/datadog_api_client/v2/model/recommendation_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RecommendationType(ModelSimple): + """ + JSON:API resource type for Spark Pod Autosizing recommendations. Identifies the Recommendation resource returned by SPA. + + :param value: If omitted defaults to "recommendation". Must be one of ["recommendation"]. + :type value: str + """ + + allowed_values = { + "recommendation", + } + RECOMMENDATION: ClassVar["RecommendationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RecommendationType.RECOMMENDATION = RecommendationType("recommendation") diff --git a/datadog_api_client/v2/model/recommendations_filter_request.py b/datadog_api_client/v2/model/recommendations_filter_request.py new file mode 100644 index 0000000000..9bf8a35e8a --- /dev/null +++ b/datadog_api_client/v2/model/recommendations_filter_request.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.recommendations_filter_request_sort_items import RecommendationsFilterRequestSortItems + +class RecommendationsFilterRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.recommendations_filter_request_sort_items import RecommendationsFilterRequestSortItems + return { + "filter": (str,), + "sort": ([RecommendationsFilterRequestSortItems],), + "view": (str,), + } + attribute_map = { + "filter": "filter", + "sort": "sort", + "view": "view", + } + + def __init__(self_, filter: Union[str, UnsetType]=unset, sort: Union[List[RecommendationsFilterRequestSortItems], UnsetType]=unset, view: Union[str, UnsetType]=unset, **kwargs): + """ + Request body for filtering cost recommendations. + + :param filter: Filter expression applied to the recommendations. + :type filter: str, optional + + :param sort: Ordered list of sort clauses applied to the result set. + :type sort: [RecommendationsFilterRequestSortItems], optional + + :param view: Active view name (for example, ``active`` , ``dismissed`` , ``open`` , ``in-progress`` , or ``completed`` ). + :type view: str, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if sort is not unset: + kwargs["sort"] = sort + if view is not unset: + kwargs["view"] = view + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/recommendations_filter_request_sort_items.py b/datadog_api_client/v2/model/recommendations_filter_request_sort_items.py new file mode 100644 index 0000000000..9c2018c337 --- /dev/null +++ b/datadog_api_client/v2/model/recommendations_filter_request_sort_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RecommendationsFilterRequestSortItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "expression": (str,), + "order": (str,), + } + attribute_map = { + "expression": "expression", + "order": "order", + } + + def __init__(self_, expression: Union[str, UnsetType]=unset, order: Union[str, UnsetType]=unset, **kwargs): + """ + A single sort clause applied to the cost recommendations result set. + + :param expression: Field to sort by (for example, ``potential_daily_savings.amount`` ). + :type expression: str, optional + + :param order: Sort direction, either ``ASC`` or ``DESC``. + :type order: str, optional + """ + if expression is not unset: + kwargs["expression"] = expression + if order is not unset: + kwargs["order"] = order + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/recommendations_page_meta.py b/datadog_api_client/v2/model/recommendations_page_meta.py new file mode 100644 index 0000000000..6c8c4be83b --- /dev/null +++ b/datadog_api_client/v2/model/recommendations_page_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.recommendations_page_meta_page import RecommendationsPageMetaPage + +class RecommendationsPageMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.recommendations_page_meta_page import RecommendationsPageMetaPage + return { + "page": (RecommendationsPageMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[RecommendationsPageMetaPage, UnsetType]=unset, **kwargs): + """ + Top-level JSON:API meta object for paginated cost recommendation responses. + + :param page: Pagination metadata for a page of cost recommendations. + :type page: RecommendationsPageMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/recommendations_page_meta_page.py b/datadog_api_client/v2/model/recommendations_page_meta_page.py new file mode 100644 index 0000000000..df5c00f5ce --- /dev/null +++ b/datadog_api_client/v2/model/recommendations_page_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RecommendationsPageMetaPage(ModelNormal): + validations = { + "page_size": { + "inclusive_maximum": 10000, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "filter": (str,), + "next_page_token": (str,), + "page_size": (int,), + "page_token": (str,), + } + attribute_map = { + "filter": "filter", + "next_page_token": "next_page_token", + "page_size": "page_size", + "page_token": "page_token", + } + + def __init__(self_, filter: Union[str, UnsetType]=unset, next_page_token: Union[str, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, page_token: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination metadata for a page of cost recommendations. + + :param filter: The filter expression that was applied to produce this page. + :type filter: str, optional + + :param next_page_token: Opaque token used to fetch the next page; absent on the last page. + :type next_page_token: str, optional + + :param page_size: Number of items returned in this page (1–10000). + :type page_size: int, optional + + :param page_token: Pagination token echoed back from the request. + :type page_token: str, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if next_page_token is not unset: + kwargs["next_page_token"] = next_page_token + if page_size is not unset: + kwargs["page_size"] = page_size + if page_token is not unset: + kwargs["page_token"] = page_token + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/reference_table_create_source_type.py b/datadog_api_client/v2/model/reference_table_create_source_type.py new file mode 100644 index 0000000000..02366542c2 --- /dev/null +++ b/datadog_api_client/v2/model/reference_table_create_source_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReferenceTableCreateSourceType(ModelSimple): + """ + The source type for creating reference table data. Only these source types can be created through this API. + + :param value: Must be one of ["LOCAL_FILE", "S3", "GCS", "AZURE"]. + :type value: str + """ + + allowed_values = { + "LOCAL_FILE", + "S3", + "GCS", + "AZURE", + } + LOCAL_FILE: ClassVar["ReferenceTableCreateSourceType"] + S3: ClassVar["ReferenceTableCreateSourceType"] + GCS: ClassVar["ReferenceTableCreateSourceType"] + AZURE: ClassVar["ReferenceTableCreateSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReferenceTableCreateSourceType.LOCAL_FILE = ReferenceTableCreateSourceType("LOCAL_FILE") +ReferenceTableCreateSourceType.S3 = ReferenceTableCreateSourceType("S3") +ReferenceTableCreateSourceType.GCS = ReferenceTableCreateSourceType("GCS") +ReferenceTableCreateSourceType.AZURE = ReferenceTableCreateSourceType("AZURE") diff --git a/datadog_api_client/v2/model/reference_table_schema_field_type.py b/datadog_api_client/v2/model/reference_table_schema_field_type.py new file mode 100644 index 0000000000..057b7bfd71 --- /dev/null +++ b/datadog_api_client/v2/model/reference_table_schema_field_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReferenceTableSchemaFieldType(ModelSimple): + """ + The field type for reference table schema fields. + + :param value: Must be one of ["STRING", "INT32"]. + :type value: str + """ + + allowed_values = { + "STRING", + "INT32", + } + STRING: ClassVar["ReferenceTableSchemaFieldType"] + INT32: ClassVar["ReferenceTableSchemaFieldType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReferenceTableSchemaFieldType.STRING = ReferenceTableSchemaFieldType("STRING") +ReferenceTableSchemaFieldType.INT32 = ReferenceTableSchemaFieldType("INT32") diff --git a/datadog_api_client/v2/model/reference_table_sort_type.py b/datadog_api_client/v2/model/reference_table_sort_type.py new file mode 100644 index 0000000000..286c008e7a --- /dev/null +++ b/datadog_api_client/v2/model/reference_table_sort_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReferenceTableSortType(ModelSimple): + """ + Sort field and direction for reference tables. Use field name for ascending, prefix with "-" for descending. + + :param value: If omitted defaults to "-updated_at". Must be one of ["updated_at", "table_name", "status", "-updated_at", "-table_name", "-status"]. + :type value: str + """ + + allowed_values = { + "updated_at", + "table_name", + "status", + "-updated_at", + "-table_name", + "-status", + } + UPDATED_AT: ClassVar["ReferenceTableSortType"] + TABLE_NAME: ClassVar["ReferenceTableSortType"] + STATUS: ClassVar["ReferenceTableSortType"] + MINUS_UPDATED_AT: ClassVar["ReferenceTableSortType"] + MINUS_TABLE_NAME: ClassVar["ReferenceTableSortType"] + MINUS_STATUS: ClassVar["ReferenceTableSortType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReferenceTableSortType.UPDATED_AT = ReferenceTableSortType("updated_at") +ReferenceTableSortType.TABLE_NAME = ReferenceTableSortType("table_name") +ReferenceTableSortType.STATUS = ReferenceTableSortType("status") +ReferenceTableSortType.MINUS_UPDATED_AT = ReferenceTableSortType("-updated_at") +ReferenceTableSortType.MINUS_TABLE_NAME = ReferenceTableSortType("-table_name") +ReferenceTableSortType.MINUS_STATUS = ReferenceTableSortType("-status") diff --git a/datadog_api_client/v2/model/reference_table_source_type.py b/datadog_api_client/v2/model/reference_table_source_type.py new file mode 100644 index 0000000000..1700635b38 --- /dev/null +++ b/datadog_api_client/v2/model/reference_table_source_type.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReferenceTableSourceType(ModelSimple): + """ + The source type for reference table data. Includes all possible source types that can appear in responses. + + :param value: Must be one of ["LOCAL_FILE", "S3", "GCS", "AZURE", "SERVICENOW", "SALESFORCE", "DATABRICKS", "SNOWFLAKE"]. + :type value: str + """ + + allowed_values = { + "LOCAL_FILE", + "S3", + "GCS", + "AZURE", + "SERVICENOW", + "SALESFORCE", + "DATABRICKS", + "SNOWFLAKE", + } + LOCAL_FILE: ClassVar["ReferenceTableSourceType"] + S3: ClassVar["ReferenceTableSourceType"] + GCS: ClassVar["ReferenceTableSourceType"] + AZURE: ClassVar["ReferenceTableSourceType"] + SERVICENOW: ClassVar["ReferenceTableSourceType"] + SALESFORCE: ClassVar["ReferenceTableSourceType"] + DATABRICKS: ClassVar["ReferenceTableSourceType"] + SNOWFLAKE: ClassVar["ReferenceTableSourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReferenceTableSourceType.LOCAL_FILE = ReferenceTableSourceType("LOCAL_FILE") +ReferenceTableSourceType.S3 = ReferenceTableSourceType("S3") +ReferenceTableSourceType.GCS = ReferenceTableSourceType("GCS") +ReferenceTableSourceType.AZURE = ReferenceTableSourceType("AZURE") +ReferenceTableSourceType.SERVICENOW = ReferenceTableSourceType("SERVICENOW") +ReferenceTableSourceType.SALESFORCE = ReferenceTableSourceType("SALESFORCE") +ReferenceTableSourceType.DATABRICKS = ReferenceTableSourceType("DATABRICKS") +ReferenceTableSourceType.SNOWFLAKE = ReferenceTableSourceType("SNOWFLAKE") diff --git a/datadog_api_client/v2/model/register_app_key_response.py b/datadog_api_client/v2/model/register_app_key_response.py new file mode 100644 index 0000000000..8cd7c8d7c5 --- /dev/null +++ b/datadog_api_client/v2/model/register_app_key_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_key_registration_data import AppKeyRegistrationData + +class RegisterAppKeyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_key_registration_data import AppKeyRegistrationData + return { + "data": (AppKeyRegistrationData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[AppKeyRegistrationData, UnsetType]=unset, **kwargs): + """ + The response object after creating an app key registration. + + :param data: Data related to the app key registration. + :type data: AppKeyRegistrationData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relation_attributes.py b/datadog_api_client/v2/model/relation_attributes.py new file mode 100644 index 0000000000..1fce64af14 --- /dev/null +++ b/datadog_api_client/v2/model/relation_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relation_entity import RelationEntity + from datadog_api_client.v2.model.relation_type import RelationType + +class RelationAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relation_entity import RelationEntity + from datadog_api_client.v2.model.relation_type import RelationType + return { + "_from": (RelationEntity,), + "to": (RelationEntity,), + "type": (RelationType,), + } + attribute_map = { + "_from": "from", + "to": "to", + "type": "type", + } + + def __init__(self_, _from: Union[RelationEntity, UnsetType]=unset, to: Union[RelationEntity, UnsetType]=unset, type: Union[RelationType, UnsetType]=unset, **kwargs): + """ + Relation attributes. + + :param _from: Relation entity reference. + :type _from: RelationEntity, optional + + :param to: Relation entity reference. + :type to: RelationEntity, optional + + :param type: Supported relation types. + :type type: RelationType, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if to is not unset: + kwargs["to"] = to + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relation_entity.py b/datadog_api_client/v2/model/relation_entity.py new file mode 100644 index 0000000000..c9d0a27db0 --- /dev/null +++ b/datadog_api_client/v2/model/relation_entity.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RelationEntity(ModelNormal): + @cached_property + def openapi_types(_): + return { + "kind": (str,), + "name": (str,), + "namespace": (str,), + } + attribute_map = { + "kind": "kind", + "name": "name", + "namespace": "namespace", + } + + def __init__(self_, kind: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, namespace: Union[str, UnsetType]=unset, **kwargs): + """ + Relation entity reference. + + :param kind: Entity kind. + :type kind: str, optional + + :param name: Entity name. + :type name: str, optional + + :param namespace: Entity namespace. + :type namespace: str, optional + """ + if kind is not unset: + kwargs["kind"] = kind + if name is not unset: + kwargs["name"] = name + if namespace is not unset: + kwargs["namespace"] = namespace + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relation_include_type.py b/datadog_api_client/v2/model/relation_include_type.py new file mode 100644 index 0000000000..a7289dfd3a --- /dev/null +++ b/datadog_api_client/v2/model/relation_include_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RelationIncludeType(ModelSimple): + """ + Supported include types for relations. + + :param value: Must be one of ["entity", "schema"]. + :type value: str + """ + + allowed_values = { + "entity", + "schema", + } + ENTITY: ClassVar["RelationIncludeType"] + SCHEMA: ClassVar["RelationIncludeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RelationIncludeType.ENTITY = RelationIncludeType("entity") +RelationIncludeType.SCHEMA = RelationIncludeType("schema") diff --git a/datadog_api_client/v2/model/relation_meta.py b/datadog_api_client/v2/model/relation_meta.py new file mode 100644 index 0000000000..2d5a48a199 --- /dev/null +++ b/datadog_api_client/v2/model/relation_meta.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RelationMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "defined_by": (str,), + "modified_at": (datetime,), + "source": (str,), + } + attribute_map = { + "created_at": "createdAt", + "defined_by": "definedBy", + "modified_at": "modifiedAt", + "source": "source", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, defined_by: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, source: Union[str, UnsetType]=unset, **kwargs): + """ + Relation metadata. + + :param created_at: Relation creation time. + :type created_at: datetime, optional + + :param defined_by: Relation defined by. + :type defined_by: str, optional + + :param modified_at: Relation modification time. + :type modified_at: datetime, optional + + :param source: Relation source. + :type source: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if defined_by is not unset: + kwargs["defined_by"] = defined_by + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if source is not unset: + kwargs["source"] = source + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relation_relationships.py b/datadog_api_client/v2/model/relation_relationships.py new file mode 100644 index 0000000000..73b45c12c5 --- /dev/null +++ b/datadog_api_client/v2/model/relation_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relation_to_entity import RelationToEntity + +class RelationRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relation_to_entity import RelationToEntity + return { + "from_entity": (RelationToEntity,), + "to_entity": (RelationToEntity,), + } + attribute_map = { + "from_entity": "fromEntity", + "to_entity": "toEntity", + } + + def __init__(self_, from_entity: Union[RelationToEntity, UnsetType]=unset, to_entity: Union[RelationToEntity, UnsetType]=unset, **kwargs): + """ + Relation relationships. + + :param from_entity: Relation to entity. + :type from_entity: RelationToEntity, optional + + :param to_entity: Relation to entity. + :type to_entity: RelationToEntity, optional + """ + if from_entity is not unset: + kwargs["from_entity"] = from_entity + if to_entity is not unset: + kwargs["to_entity"] = to_entity + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relation_response.py b/datadog_api_client/v2/model/relation_response.py new file mode 100644 index 0000000000..f9cb851e7e --- /dev/null +++ b/datadog_api_client/v2/model/relation_response.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relation_attributes import RelationAttributes + from datadog_api_client.v2.model.relation_meta import RelationMeta + from datadog_api_client.v2.model.relation_relationships import RelationRelationships + from datadog_api_client.v2.model.relation_response_type import RelationResponseType + +class RelationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relation_attributes import RelationAttributes + from datadog_api_client.v2.model.relation_meta import RelationMeta + from datadog_api_client.v2.model.relation_relationships import RelationRelationships + from datadog_api_client.v2.model.relation_response_type import RelationResponseType + return { + "attributes": (RelationAttributes,), + "id": (str,), + "meta": (RelationMeta,), + "relationships": (RelationRelationships,), + "subtype": (str,), + "type": (RelationResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "relationships": "relationships", + "subtype": "subtype", + "type": "type", + } + + def __init__(self_, attributes: Union[RelationAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, meta: Union[RelationMeta, UnsetType]=unset, relationships: Union[RelationRelationships, UnsetType]=unset, subtype: Union[str, UnsetType]=unset, type: Union[RelationResponseType, UnsetType]=unset, **kwargs): + """ + Relation response data. + + :param attributes: Relation attributes. + :type attributes: RelationAttributes, optional + + :param id: Relation ID. + :type id: str, optional + + :param meta: Relation metadata. + :type meta: RelationMeta, optional + + :param relationships: Relation relationships. + :type relationships: RelationRelationships, optional + + :param subtype: Relation subtype. + :type subtype: str, optional + + :param type: Relation type. + :type type: RelationResponseType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if meta is not unset: + kwargs["meta"] = meta + if relationships is not unset: + kwargs["relationships"] = relationships + if subtype is not unset: + kwargs["subtype"] = subtype + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relation_response_meta.py b/datadog_api_client/v2/model/relation_response_meta.py new file mode 100644 index 0000000000..2f71cd747b --- /dev/null +++ b/datadog_api_client/v2/model/relation_response_meta.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RelationResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "include_count": (int,), + } + attribute_map = { + "count": "count", + "include_count": "includeCount", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, include_count: Union[int, UnsetType]=unset, **kwargs): + """ + Relation response metadata. + + :param count: Total relations count. + :type count: int, optional + + :param include_count: Total included data count. + :type include_count: int, optional + """ + if count is not unset: + kwargs["count"] = count + if include_count is not unset: + kwargs["include_count"] = include_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relation_response_type.py b/datadog_api_client/v2/model/relation_response_type.py new file mode 100644 index 0000000000..5a4ecf433b --- /dev/null +++ b/datadog_api_client/v2/model/relation_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RelationResponseType(ModelSimple): + """ + Relation type. + + :param value: If omitted defaults to "relation". Must be one of ["relation"]. + :type value: str + """ + + allowed_values = { + "relation", + } + RELATION: ClassVar["RelationResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RelationResponseType.RELATION = RelationResponseType("relation") diff --git a/datadog_api_client/v2/model/relation_to_entity.py b/datadog_api_client/v2/model/relation_to_entity.py new file mode 100644 index 0000000000..2fc29cb775 --- /dev/null +++ b/datadog_api_client/v2/model/relation_to_entity.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_item import RelationshipItem + from datadog_api_client.v2.model.entity_meta import EntityMeta + +class RelationToEntity(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_item import RelationshipItem + from datadog_api_client.v2.model.entity_meta import EntityMeta + return { + "data": (RelationshipItem,), + "meta": (EntityMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[RelationshipItem, UnsetType]=unset, meta: Union[EntityMeta, UnsetType]=unset, **kwargs): + """ + Relation to entity. + + :param data: Relationship entry. + :type data: RelationshipItem, optional + + :param meta: Entity metadata. + :type meta: EntityMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relation_type.py b/datadog_api_client/v2/model/relation_type.py new file mode 100644 index 0000000000..9ca6eb0e1e --- /dev/null +++ b/datadog_api_client/v2/model/relation_type.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RelationType(ModelSimple): + """ + Supported relation types. + + :param value: Must be one of ["RelationTypeOwns", "RelationTypeOwnedBy", "RelationTypeDependsOn", "RelationTypeDependencyOf", "RelationTypePartsOf", "RelationTypeHasPart", "RelationTypeOtherOwns", "RelationTypeOtherOwnedBy", "RelationTypeImplementedBy", "RelationTypeImplements"]. + :type value: str + """ + + allowed_values = { + "RelationTypeOwns", + "RelationTypeOwnedBy", + "RelationTypeDependsOn", + "RelationTypeDependencyOf", + "RelationTypePartsOf", + "RelationTypeHasPart", + "RelationTypeOtherOwns", + "RelationTypeOtherOwnedBy", + "RelationTypeImplementedBy", + "RelationTypeImplements", + } + RELATIONTYPEOWNS: ClassVar["RelationType"] + RELATIONTYPEOWNEDBY: ClassVar["RelationType"] + RELATIONTYPEDEPENDSON: ClassVar["RelationType"] + RELATIONTYPEDEPENDENCYOF: ClassVar["RelationType"] + RELATIONTYPEPARTSOF: ClassVar["RelationType"] + RELATIONTYPEHASPART: ClassVar["RelationType"] + RELATIONTYPEOTHEROWNS: ClassVar["RelationType"] + RELATIONTYPEOTHEROWNEDBY: ClassVar["RelationType"] + RELATIONTYPEIMPLEMENTEDBY: ClassVar["RelationType"] + RELATIONTYPEIMPLEMENTS: ClassVar["RelationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RelationType.RELATIONTYPEOWNS = RelationType("RelationTypeOwns") +RelationType.RELATIONTYPEOWNEDBY = RelationType("RelationTypeOwnedBy") +RelationType.RELATIONTYPEDEPENDSON = RelationType("RelationTypeDependsOn") +RelationType.RELATIONTYPEDEPENDENCYOF = RelationType("RelationTypeDependencyOf") +RelationType.RELATIONTYPEPARTSOF = RelationType("RelationTypePartsOf") +RelationType.RELATIONTYPEHASPART = RelationType("RelationTypeHasPart") +RelationType.RELATIONTYPEOTHEROWNS = RelationType("RelationTypeOtherOwns") +RelationType.RELATIONTYPEOTHEROWNEDBY = RelationType("RelationTypeOtherOwnedBy") +RelationType.RELATIONTYPEIMPLEMENTEDBY = RelationType("RelationTypeImplementedBy") +RelationType.RELATIONTYPEIMPLEMENTS = RelationType("RelationTypeImplements") diff --git a/datadog_api_client/v2/model/relationship_item.py b/datadog_api_client/v2/model/relationship_item.py new file mode 100644 index 0000000000..179544edbf --- /dev/null +++ b/datadog_api_client/v2/model/relationship_item.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RelationshipItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Relationship entry. + + :param id: Associated data ID. + :type id: str, optional + + :param type: Relationship type. + :type type: str, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_access_token_owner.py b/datadog_api_client/v2/model/relationship_to_access_token_owner.py new file mode 100644 index 0000000000..06b8a1d213 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_access_token_owner.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_access_token_owner_data import RelationshipToAccessTokenOwnerData + +class RelationshipToAccessTokenOwner(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_access_token_owner_data import RelationshipToAccessTokenOwnerData + return { + "data": (RelationshipToAccessTokenOwnerData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToAccessTokenOwnerData, **kwargs): + """ + Relationship to the access token's owner. + + :param data: Relationship to the access token's owner. + :type data: RelationshipToAccessTokenOwnerData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_access_token_owner_data.py b/datadog_api_client/v2/model/relationship_to_access_token_owner_data.py new file mode 100644 index 0000000000..868493be04 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_access_token_owner_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.access_token_owner_type import AccessTokenOwnerType + +class RelationshipToAccessTokenOwnerData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.access_token_owner_type import AccessTokenOwnerType + return { + "id": (str,), + "type": (AccessTokenOwnerType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: AccessTokenOwnerType, **kwargs): + """ + Relationship to the access token's owner. + + :param id: A unique identifier that represents the owner. + :type id: str + + :param type: Owner resource type. Either a user or a service account. + :type type: AccessTokenOwnerType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_incident.py b/datadog_api_client/v2/model/relationship_to_incident.py new file mode 100644 index 0000000000..0e2e016657 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_data import RelationshipToIncidentData + +class RelationshipToIncident(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_data import RelationshipToIncidentData + return { + "data": (RelationshipToIncidentData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToIncidentData, **kwargs): + """ + Relationship to incident. + + :param data: Relationship to incident object. + :type data: RelationshipToIncidentData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_incident_attachment.py b/datadog_api_client/v2/model/relationship_to_incident_attachment.py new file mode 100644 index 0000000000..f6f1b7442a --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_attachment.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_attachment_data import RelationshipToIncidentAttachmentData + +class RelationshipToIncidentAttachment(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_attachment_data import RelationshipToIncidentAttachmentData + return { + "data": ([RelationshipToIncidentAttachmentData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RelationshipToIncidentAttachmentData], **kwargs): + """ + A relationship reference for attachments. + + :param data: An array of incident attachments. + :type data: [RelationshipToIncidentAttachmentData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_incident_attachment_data.py b/datadog_api_client/v2/model/relationship_to_incident_attachment_data.py new file mode 100644 index 0000000000..56a60c03f3 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_attachment_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + +class RelationshipToIncidentAttachmentData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType + return { + "id": (str,), + "type": (IncidentAttachmentType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentAttachmentType, **kwargs): + """ + The attachment relationship data. + + :param id: A unique identifier that represents the attachment. + :type id: str + + :param type: The incident attachment resource type. + :type type: IncidentAttachmentType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_incident_data.py b/datadog_api_client/v2/model/relationship_to_incident_data.py new file mode 100644 index 0000000000..5a395b7fc6 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type import IncidentType + +class RelationshipToIncidentData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type import IncidentType + return { + "id": (str,), + "type": (IncidentType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentType, **kwargs): + """ + Relationship to incident object. + + :param id: A unique identifier that represents the incident. + :type id: str + + :param type: Incident resource type. + :type type: IncidentType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_incident_impact_data.py b/datadog_api_client/v2/model/relationship_to_incident_impact_data.py new file mode 100644 index 0000000000..a6b1ebc0f5 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_impact_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_impacts_type import IncidentImpactsType + +class RelationshipToIncidentImpactData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_impacts_type import IncidentImpactsType + return { + "id": (str,), + "type": (IncidentImpactsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentImpactsType, **kwargs): + """ + Relationship to impact object. + + :param id: A unique identifier that represents the impact. + :type id: str + + :param type: The incident impacts type. + :type type: IncidentImpactsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_incident_impacts.py b/datadog_api_client/v2/model/relationship_to_incident_impacts.py new file mode 100644 index 0000000000..974d6e9814 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_impacts.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_impact_data import RelationshipToIncidentImpactData + +class RelationshipToIncidentImpacts(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_impact_data import RelationshipToIncidentImpactData + return { + "data": ([RelationshipToIncidentImpactData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RelationshipToIncidentImpactData], **kwargs): + """ + Relationship to impacts. + + :param data: An array of incident impacts. + :type data: [RelationshipToIncidentImpactData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_incident_integration_metadata_data.py b/datadog_api_client/v2/model/relationship_to_incident_integration_metadata_data.py new file mode 100644 index 0000000000..e9b25a05d0 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_integration_metadata_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_integration_metadata_type import IncidentIntegrationMetadataType + +class RelationshipToIncidentIntegrationMetadataData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_integration_metadata_type import IncidentIntegrationMetadataType + return { + "id": (str,), + "type": (IncidentIntegrationMetadataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentIntegrationMetadataType, **kwargs): + """ + A relationship reference for an integration metadata object. + + :param id: A unique identifier that represents the integration metadata. + :type id: str + + :param type: Integration metadata resource type. + :type type: IncidentIntegrationMetadataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_incident_integration_metadatas.py b/datadog_api_client/v2/model/relationship_to_incident_integration_metadatas.py new file mode 100644 index 0000000000..07957dbcd8 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_integration_metadatas.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_integration_metadata_data import RelationshipToIncidentIntegrationMetadataData + +class RelationshipToIncidentIntegrationMetadatas(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_integration_metadata_data import RelationshipToIncidentIntegrationMetadataData + return { + "data": ([RelationshipToIncidentIntegrationMetadataData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RelationshipToIncidentIntegrationMetadataData], **kwargs): + """ + A relationship reference for multiple integration metadata objects. + + :param data: Integration metadata relationship array + :type data: [RelationshipToIncidentIntegrationMetadataData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_incident_notification_template.py b/datadog_api_client/v2/model/relationship_to_incident_notification_template.py new file mode 100644 index 0000000000..f975dcef6b --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_notification_template.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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/datadog_api_client/v2/model/relationship_to_incident_notification_template_data.py b/datadog_api_client/v2/model/relationship_to_incident_notification_template_data.py new file mode 100644 index 0000000000..a5e71e99a2 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_notification_template_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + 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/datadog_api_client/v2/model/relationship_to_incident_postmortem.py b/datadog_api_client/v2/model/relationship_to_incident_postmortem.py new file mode 100644 index 0000000000..dc88b95050 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_postmortem.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_postmortem_data import RelationshipToIncidentPostmortemData + +class RelationshipToIncidentPostmortem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_postmortem_data import RelationshipToIncidentPostmortemData + return { + "data": (RelationshipToIncidentPostmortemData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToIncidentPostmortemData, **kwargs): + """ + A relationship reference for postmortems. + + :param data: The postmortem relationship data. + :type data: RelationshipToIncidentPostmortemData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_incident_postmortem_data.py b/datadog_api_client/v2/model/relationship_to_incident_postmortem_data.py new file mode 100644 index 0000000000..c75c5c29f5 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_postmortem_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_postmortem_type import IncidentPostmortemType + +class RelationshipToIncidentPostmortemData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_postmortem_type import IncidentPostmortemType + return { + "id": (str,), + "type": (IncidentPostmortemType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentPostmortemType, **kwargs): + """ + The postmortem relationship data. + + :param id: A unique identifier that represents the postmortem. + :type id: str + + :param type: Incident postmortem resource type. + :type type: IncidentPostmortemType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_incident_request.py b/datadog_api_client/v2/model/relationship_to_incident_request.py new file mode 100644 index 0000000000..c931b006d5 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_relationship_data import IncidentRelationshipData + +class RelationshipToIncidentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_relationship_data import IncidentRelationshipData + return { + "data": (IncidentRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: IncidentRelationshipData, **kwargs): + """ + Relationship to incident request + + :param data: Incident relationship data + :type data: IncidentRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_incident_responder_data.py b/datadog_api_client/v2/model/relationship_to_incident_responder_data.py new file mode 100644 index 0000000000..c14a332d62 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_responder_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_responders_type import IncidentRespondersType + +class RelationshipToIncidentResponderData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_responders_type import IncidentRespondersType + return { + "id": (str,), + "type": (IncidentRespondersType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentRespondersType, **kwargs): + """ + Relationship to impact object. + + :param id: A unique identifier that represents the responder. + :type id: str + + :param type: The incident responders type. + :type type: IncidentRespondersType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_incident_responders.py b/datadog_api_client/v2/model/relationship_to_incident_responders.py new file mode 100644 index 0000000000..289bfc3e1b --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_responders.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_responder_data import RelationshipToIncidentResponderData + +class RelationshipToIncidentResponders(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_responder_data import RelationshipToIncidentResponderData + return { + "data": ([RelationshipToIncidentResponderData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RelationshipToIncidentResponderData], **kwargs): + """ + Relationship to incident responders. + + :param data: An array of incident responders. + :type data: [RelationshipToIncidentResponderData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_incident_type.py b/datadog_api_client/v2/model/relationship_to_incident_type.py new file mode 100644 index 0000000000..c6d780848b --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_type_data import RelationshipToIncidentTypeData + +class RelationshipToIncidentType(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_type_data import RelationshipToIncidentTypeData + return { + "data": (RelationshipToIncidentTypeData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToIncidentTypeData, **kwargs): + """ + Relationship to an incident type. + + :param data: Relationship to incident type object. + :type data: RelationshipToIncidentTypeData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_incident_type_data.py b/datadog_api_client/v2/model/relationship_to_incident_type_data.py new file mode 100644 index 0000000000..4ab084bc8d --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_type_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_type_type import IncidentTypeType + +class RelationshipToIncidentTypeData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_type_type import IncidentTypeType + return { + "id": (str,), + "type": (IncidentTypeType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentTypeType, **kwargs): + """ + Relationship to incident type object. + + :param id: The incident type's ID. + :type id: str + + :param type: Incident type resource type. + :type type: IncidentTypeType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_incident_user_defined_field_data.py b/datadog_api_client/v2/model/relationship_to_incident_user_defined_field_data.py new file mode 100644 index 0000000000..7de4fee92a --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_user_defined_field_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.incident_user_defined_field_type import IncidentUserDefinedFieldType + +class RelationshipToIncidentUserDefinedFieldData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.incident_user_defined_field_type import IncidentUserDefinedFieldType + return { + "id": (str,), + "type": (IncidentUserDefinedFieldType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: IncidentUserDefinedFieldType, **kwargs): + """ + Relationship to impact object. + + :param id: A unique identifier that represents the responder. + :type id: str + + :param type: The incident user defined fields type. + :type type: IncidentUserDefinedFieldType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_incident_user_defined_fields.py b/datadog_api_client/v2/model/relationship_to_incident_user_defined_fields.py new file mode 100644 index 0000000000..6111e6b0fb --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_incident_user_defined_fields.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_incident_user_defined_field_data import RelationshipToIncidentUserDefinedFieldData + +class RelationshipToIncidentUserDefinedFields(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_incident_user_defined_field_data import RelationshipToIncidentUserDefinedFieldData + return { + "data": ([RelationshipToIncidentUserDefinedFieldData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RelationshipToIncidentUserDefinedFieldData], **kwargs): + """ + Relationship to incident user defined fields. + + :param data: An array of user defined fields. + :type data: [RelationshipToIncidentUserDefinedFieldData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_organization.py b/datadog_api_client/v2/model/relationship_to_organization.py new file mode 100644 index 0000000000..0dc75dc03b --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_organization.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_organization_data import RelationshipToOrganizationData + +class RelationshipToOrganization(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_organization_data import RelationshipToOrganizationData + return { + "data": (RelationshipToOrganizationData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToOrganizationData, **kwargs): + """ + Relationship to an organization. + + :param data: Relationship to organization object. + :type data: RelationshipToOrganizationData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_organization_data.py b/datadog_api_client/v2/model/relationship_to_organization_data.py new file mode 100644 index 0000000000..ab1a480414 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_organization_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.organizations_type import OrganizationsType + +class RelationshipToOrganizationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.organizations_type import OrganizationsType + return { + "id": (str,), + "type": (OrganizationsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: OrganizationsType, **kwargs): + """ + Relationship to organization object. + + :param id: ID of the organization. + :type id: str + + :param type: Organizations resource type. + :type type: OrganizationsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_organizations.py b/datadog_api_client/v2/model/relationship_to_organizations.py new file mode 100644 index 0000000000..5a9ab605bf --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_organizations.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_organization_data import RelationshipToOrganizationData + +class RelationshipToOrganizations(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_organization_data import RelationshipToOrganizationData + return { + "data": ([RelationshipToOrganizationData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RelationshipToOrganizationData], **kwargs): + """ + Relationship to organizations. + + :param data: Relationships to organization objects. + :type data: [RelationshipToOrganizationData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_outcome.py b/datadog_api_client/v2/model/relationship_to_outcome.py new file mode 100644 index 0000000000..1e429fbade --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_outcome.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_outcome_data import RelationshipToOutcomeData + +class RelationshipToOutcome(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_outcome_data import RelationshipToOutcomeData + return { + "data": (RelationshipToOutcomeData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RelationshipToOutcomeData, UnsetType]=unset, **kwargs): + """ + The JSON:API relationship to a scorecard outcome. + + :param data: The JSON:API relationship to an outcome, which returns the related rule id. + :type data: RelationshipToOutcomeData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_outcome_data.py b/datadog_api_client/v2/model/relationship_to_outcome_data.py new file mode 100644 index 0000000000..646eb876be --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_outcome_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_type import RuleType + +class RelationshipToOutcomeData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_type import RuleType + return { + "id": (str,), + "type": (RuleType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[RuleType, UnsetType]=unset, **kwargs): + """ + The JSON:API relationship to an outcome, which returns the related rule id. + + :param id: The unique ID for a scorecard rule. + :type id: str, optional + + :param type: The JSON:API type for scorecard rules. + :type type: RuleType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_permission.py b/datadog_api_client/v2/model/relationship_to_permission.py new file mode 100644 index 0000000000..f97851752d --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_permission.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_permission_data import RelationshipToPermissionData + +class RelationshipToPermission(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_permission_data import RelationshipToPermissionData + return { + "data": (RelationshipToPermissionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RelationshipToPermissionData, UnsetType]=unset, **kwargs): + """ + Relationship to a permissions object. + + :param data: Relationship to permission object. + :type data: RelationshipToPermissionData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_permission_data.py b/datadog_api_client/v2/model/relationship_to_permission_data.py new file mode 100644 index 0000000000..fc5d32eaa6 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_permission_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.permissions_type import PermissionsType + +class RelationshipToPermissionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.permissions_type import PermissionsType + return { + "id": (str,), + "type": (PermissionsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[PermissionsType, UnsetType]=unset, **kwargs): + """ + Relationship to permission object. + + :param id: ID of the permission. + :type id: str, optional + + :param type: Permissions resource type. + :type type: PermissionsType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_permissions.py b/datadog_api_client/v2/model/relationship_to_permissions.py new file mode 100644 index 0000000000..3d96bcfad7 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_permissions.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_permission_data import RelationshipToPermissionData + +class RelationshipToPermissions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_permission_data import RelationshipToPermissionData + return { + "data": ([RelationshipToPermissionData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RelationshipToPermissionData], UnsetType]=unset, **kwargs): + """ + Relationship to multiple permissions objects. + + :param data: Relationships to permission objects. + :type data: [RelationshipToPermissionData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_role.py b/datadog_api_client/v2/model/relationship_to_role.py new file mode 100644 index 0000000000..078d3dc855 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_role.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_role_data import RelationshipToRoleData + +class RelationshipToRole(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_role_data import RelationshipToRoleData + return { + "data": (RelationshipToRoleData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RelationshipToRoleData, UnsetType]=unset, **kwargs): + """ + Relationship to role. + + :param data: Relationship to role object. + :type data: RelationshipToRoleData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_role_data.py b/datadog_api_client/v2/model/relationship_to_role_data.py new file mode 100644 index 0000000000..e827af5342 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_role_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.roles_type import RolesType + +class RelationshipToRoleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.roles_type import RolesType + return { + "id": (str,), + "type": (RolesType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[RolesType, UnsetType]=unset, **kwargs): + """ + Relationship to role object. + + :param id: The unique identifier of the role. + :type id: str, optional + + :param type: Roles type. + :type type: RolesType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_roles.py b/datadog_api_client/v2/model/relationship_to_roles.py new file mode 100644 index 0000000000..7c622a80ab --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_roles.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_role_data import RelationshipToRoleData + +class RelationshipToRoles(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_role_data import RelationshipToRoleData + return { + "data": ([RelationshipToRoleData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RelationshipToRoleData], UnsetType]=unset, **kwargs): + """ + Relationship to roles. + + :param data: An array containing type and the unique identifier of a role. + :type data: [RelationshipToRoleData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_rule.py b/datadog_api_client/v2/model/relationship_to_rule.py new file mode 100644 index 0000000000..010f3617e1 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_rule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_rule_data import RelationshipToRuleData + +class RelationshipToRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_rule_data import RelationshipToRuleData + return { + "scorecard": (RelationshipToRuleData,), + } + attribute_map = { + "scorecard": "scorecard", + } + + def __init__(self_, scorecard: Union[RelationshipToRuleData, UnsetType]=unset, **kwargs): + """ + Scorecard create rule response relationship. + + :param scorecard: Relationship data for a rule. + :type scorecard: RelationshipToRuleData, optional + """ + if scorecard is not unset: + kwargs["scorecard"] = scorecard + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_rule_data.py b/datadog_api_client/v2/model/relationship_to_rule_data.py new file mode 100644 index 0000000000..1474afd82b --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_rule_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_rule_data_object import RelationshipToRuleDataObject + +class RelationshipToRuleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_rule_data_object import RelationshipToRuleDataObject + return { + "data": (RelationshipToRuleDataObject,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RelationshipToRuleDataObject, UnsetType]=unset, **kwargs): + """ + Relationship data for a rule. + + :param data: Rule relationship data. + :type data: RelationshipToRuleDataObject, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_rule_data_object.py b/datadog_api_client/v2/model/relationship_to_rule_data_object.py new file mode 100644 index 0000000000..ebbb4beed5 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_rule_data_object.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scorecard_type import ScorecardType + +class RelationshipToRuleDataObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scorecard_type import ScorecardType + return { + "id": (str,), + "type": (ScorecardType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[ScorecardType, UnsetType]=unset, **kwargs): + """ + Rule relationship data. + + :param id: The unique ID for a scorecard. + :type id: str, optional + + :param type: The JSON:API type for scorecard. + :type type: ScorecardType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_saml_assertion_attribute.py b/datadog_api_client/v2/model/relationship_to_saml_assertion_attribute.py new file mode 100644 index 0000000000..8d05ceefa6 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_saml_assertion_attribute.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_saml_assertion_attribute_data import RelationshipToSAMLAssertionAttributeData + +class RelationshipToSAMLAssertionAttribute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_saml_assertion_attribute_data import RelationshipToSAMLAssertionAttributeData + return { + "data": (RelationshipToSAMLAssertionAttributeData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToSAMLAssertionAttributeData, **kwargs): + """ + AuthN Mapping relationship to SAML Assertion Attribute. + + :param data: Data of AuthN Mapping relationship to SAML Assertion Attribute. + :type data: RelationshipToSAMLAssertionAttributeData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_saml_assertion_attribute_data.py b/datadog_api_client/v2/model/relationship_to_saml_assertion_attribute_data.py new file mode 100644 index 0000000000..d1ef4d132d --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_saml_assertion_attribute_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.saml_assertion_attributes_type import SAMLAssertionAttributesType + +class RelationshipToSAMLAssertionAttributeData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.saml_assertion_attributes_type import SAMLAssertionAttributesType + return { + "id": (str,), + "type": (SAMLAssertionAttributesType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: SAMLAssertionAttributesType, **kwargs): + """ + Data of AuthN Mapping relationship to SAML Assertion Attribute. + + :param id: The ID of the SAML assertion attribute. + :type id: str + + :param type: SAML assertion attributes resource type. + :type type: SAMLAssertionAttributesType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_service_account.py b/datadog_api_client/v2/model/relationship_to_service_account.py new file mode 100644 index 0000000000..b7c83543c6 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_service_account.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_service_account_data import RelationshipToServiceAccountData + +class RelationshipToServiceAccount(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_service_account_data import RelationshipToServiceAccountData + return { + "data": (RelationshipToServiceAccountData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToServiceAccountData, **kwargs): + """ + Relationship to service account. + + :param data: Relationship to service account object. + :type data: RelationshipToServiceAccountData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_service_account_data.py b/datadog_api_client/v2/model/relationship_to_service_account_data.py new file mode 100644 index 0000000000..72551c4927 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_service_account_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_account_type import ServiceAccountType + +class RelationshipToServiceAccountData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_account_type import ServiceAccountType + return { + "id": (str,), + "type": (ServiceAccountType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ServiceAccountType, **kwargs): + """ + Relationship to service account object. + + :param id: A unique identifier that represents the service account. + :type id: str + + :param type: Service account resource type. + :type type: ServiceAccountType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_team.py b/datadog_api_client/v2/model/relationship_to_team.py new file mode 100644 index 0000000000..a12de6e269 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_team.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_team_data import RelationshipToTeamData + +class RelationshipToTeam(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_team_data import RelationshipToTeamData + return { + "data": (RelationshipToTeamData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RelationshipToTeamData, UnsetType]=unset, **kwargs): + """ + Relationship to team. + + :param data: Relationship to Team object. + :type data: RelationshipToTeamData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_team_data.py b/datadog_api_client/v2/model/relationship_to_team_data.py new file mode 100644 index 0000000000..3ed75376b3 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_team_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_type import TeamType + +class RelationshipToTeamData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_type import TeamType + return { + "id": (str,), + "type": (TeamType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[TeamType, UnsetType]=unset, **kwargs): + """ + Relationship to Team object. + + :param id: The unique identifier of the team. + :type id: str, optional + + :param type: Team type + :type type: TeamType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_team_link_data.py b/datadog_api_client/v2/model/relationship_to_team_link_data.py new file mode 100644 index 0000000000..9ed22c39b6 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_team_link_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_link_type import TeamLinkType + +class RelationshipToTeamLinkData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_link_type import TeamLinkType + return { + "id": (str,), + "type": (TeamLinkType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamLinkType, **kwargs): + """ + Relationship between a link and a team + + :param id: The team link's identifier + :type id: str + + :param type: Team link type + :type type: TeamLinkType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_team_links.py b/datadog_api_client/v2/model/relationship_to_team_links.py new file mode 100644 index 0000000000..ece0227e0b --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_team_links.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_team_link_data import RelationshipToTeamLinkData + from datadog_api_client.v2.model.team_relationships_links import TeamRelationshipsLinks + +class RelationshipToTeamLinks(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_team_link_data import RelationshipToTeamLinkData + from datadog_api_client.v2.model.team_relationships_links import TeamRelationshipsLinks + return { + "data": ([RelationshipToTeamLinkData],), + "links": (TeamRelationshipsLinks,), + } + attribute_map = { + "data": "data", + "links": "links", + } + + def __init__(self_, data: Union[List[RelationshipToTeamLinkData], UnsetType]=unset, links: Union[TeamRelationshipsLinks, UnsetType]=unset, **kwargs): + """ + Relationship between a team and a team link + + :param data: Related team links + :type data: [RelationshipToTeamLinkData], optional + + :param links: Links attributes. + :type links: TeamRelationshipsLinks, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_user.py b/datadog_api_client/v2/model/relationship_to_user.py new file mode 100644 index 0000000000..e815da43d4 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user_data import RelationshipToUserData + +class RelationshipToUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user_data import RelationshipToUserData + return { + "data": (RelationshipToUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToUserData, **kwargs): + """ + Relationship to user. + + :param data: Relationship to user object. + :type data: RelationshipToUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_user_data.py b/datadog_api_client/v2/model/relationship_to_user_data.py new file mode 100644 index 0000000000..e767963d2a --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.users_type import UsersType + +class RelationshipToUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.users_type import UsersType + return { + "id": (str,), + "type": (UsersType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UsersType, **kwargs): + """ + Relationship to user object. + + :param id: A unique identifier that represents the user. + :type id: str + + :param type: Users resource type. + :type type: UsersType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_user_team_permission.py b/datadog_api_client/v2/model/relationship_to_user_team_permission.py new file mode 100644 index 0000000000..2506940fae --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_user_team_permission.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user_team_permission_data import RelationshipToUserTeamPermissionData + from datadog_api_client.v2.model.team_relationships_links import TeamRelationshipsLinks + +class RelationshipToUserTeamPermission(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user_team_permission_data import RelationshipToUserTeamPermissionData + from datadog_api_client.v2.model.team_relationships_links import TeamRelationshipsLinks + return { + "data": (RelationshipToUserTeamPermissionData,), + "links": (TeamRelationshipsLinks,), + } + attribute_map = { + "data": "data", + "links": "links", + } + + def __init__(self_, data: Union[RelationshipToUserTeamPermissionData, none_type, UnsetType]=unset, links: Union[TeamRelationshipsLinks, UnsetType]=unset, **kwargs): + """ + Relationship between a user team permission and a team + + :param data: Related user team permission data + :type data: RelationshipToUserTeamPermissionData, none_type, optional + + :param links: Links attributes. + :type links: TeamRelationshipsLinks, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/relationship_to_user_team_permission_data.py b/datadog_api_client/v2/model/relationship_to_user_team_permission_data.py new file mode 100644 index 0000000000..7351761c41 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_user_team_permission_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_permission_type import UserTeamPermissionType + +class RelationshipToUserTeamPermissionData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_permission_type import UserTeamPermissionType + return { + "id": (str,), + "type": (UserTeamPermissionType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserTeamPermissionType, **kwargs): + """ + Related user team permission data + + :param id: The ID of the user team permission + :type id: str + + :param type: User team permission type + :type type: UserTeamPermissionType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_user_team_team.py b/datadog_api_client/v2/model/relationship_to_user_team_team.py new file mode 100644 index 0000000000..c4bc50a4d1 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_user_team_team.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user_team_team_data import RelationshipToUserTeamTeamData + +class RelationshipToUserTeamTeam(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user_team_team_data import RelationshipToUserTeamTeamData + return { + "data": (RelationshipToUserTeamTeamData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToUserTeamTeamData, **kwargs): + """ + Relationship between team membership and team + + :param data: The team associated with the membership + :type data: RelationshipToUserTeamTeamData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_user_team_team_data.py b/datadog_api_client/v2/model/relationship_to_user_team_team_data.py new file mode 100644 index 0000000000..3ac1ff4f67 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_user_team_team_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_team_type import UserTeamTeamType + +class RelationshipToUserTeamTeamData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_team_type import UserTeamTeamType + return { + "id": (str,), + "type": (UserTeamTeamType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserTeamTeamType, **kwargs): + """ + The team associated with the membership + + :param id: The ID of the team associated with the membership + :type id: str + + :param type: User team team type + :type type: UserTeamTeamType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_user_team_user.py b/datadog_api_client/v2/model/relationship_to_user_team_user.py new file mode 100644 index 0000000000..7d95ca7b2d --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_user_team_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user_team_user_data import RelationshipToUserTeamUserData + +class RelationshipToUserTeamUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user_team_user_data import RelationshipToUserTeamUserData + return { + "data": (RelationshipToUserTeamUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RelationshipToUserTeamUserData, **kwargs): + """ + Relationship between team membership and user + + :param data: A user's relationship with a team + :type data: RelationshipToUserTeamUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/relationship_to_user_team_user_data.py b/datadog_api_client/v2/model/relationship_to_user_team_user_data.py new file mode 100644 index 0000000000..83fe1fc011 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_user_team_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_user_type import UserTeamUserType + +class RelationshipToUserTeamUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_user_type import UserTeamUserType + return { + "id": (str,), + "type": (UserTeamUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserTeamUserType, **kwargs): + """ + A user's relationship with a team + + :param id: The ID of the user associated with the team + :type id: str + + :param type: User team user type + :type type: UserTeamUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/relationship_to_users.py b/datadog_api_client/v2/model/relationship_to_users.py new file mode 100644 index 0000000000..5a2b9f1ac6 --- /dev/null +++ b/datadog_api_client/v2/model/relationship_to_users.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user_data import RelationshipToUserData + +class RelationshipToUsers(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user_data import RelationshipToUserData + return { + "data": ([RelationshipToUserData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RelationshipToUserData], **kwargs): + """ + Relationship to users. + + :param data: Relationships to user objects. + :type data: [RelationshipToUserData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/remediation.py b/datadog_api_client/v2/model/remediation.py new file mode 100644 index 0000000000..2c177b8c07 --- /dev/null +++ b/datadog_api_client/v2/model/remediation.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.advisory import Advisory + +class Remediation(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.advisory import Advisory + return { + "auto_solvable": (bool,), + "avoided_advisories": ([Advisory],), + "fixed_advisories": ([Advisory],), + "library_name": (str,), + "library_version": (str,), + "new_advisories": ([Advisory],), + "remaining_advisories": ([Advisory],), + "type": (str,), + } + attribute_map = { + "auto_solvable": "auto_solvable", + "avoided_advisories": "avoided_advisories", + "fixed_advisories": "fixed_advisories", + "library_name": "library_name", + "library_version": "library_version", + "new_advisories": "new_advisories", + "remaining_advisories": "remaining_advisories", + "type": "type", + } + + def __init__(self_, auto_solvable: bool, avoided_advisories: List[Advisory], fixed_advisories: List[Advisory], library_name: str, library_version: str, new_advisories: List[Advisory], remaining_advisories: List[Advisory], type: str, **kwargs): + """ + Vulnerability remediation. + + :param auto_solvable: Whether the vulnerability can be resolved when recompiling the package or not. + :type auto_solvable: bool + + :param avoided_advisories: Avoided advisories. + :type avoided_advisories: [Advisory] + + :param fixed_advisories: Remediation fixed advisories. + :type fixed_advisories: [Advisory] + + :param library_name: Library name remediating the vulnerability. + :type library_name: str + + :param library_version: Library version remediating the vulnerability. + :type library_version: str + + :param new_advisories: New advisories. + :type new_advisories: [Advisory] + + :param remaining_advisories: Remaining advisories. + :type remaining_advisories: [Advisory] + + :param type: Remediation type. + :type type: str + """ + super().__init__(kwargs) + + + self_.auto_solvable = auto_solvable + self_.avoided_advisories = avoided_advisories + self_.fixed_advisories = fixed_advisories + self_.library_name = library_name + self_.library_version = library_version + self_.new_advisories = new_advisories + self_.remaining_advisories = remaining_advisories + self_.type = type diff --git a/datadog_api_client/v2/model/reorder_retention_filters_request.py b/datadog_api_client/v2/model/reorder_retention_filters_request.py new file mode 100644 index 0000000000..49de781250 --- /dev/null +++ b/datadog_api_client/v2/model/reorder_retention_filters_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter_without_attributes import RetentionFilterWithoutAttributes + +class ReorderRetentionFiltersRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter_without_attributes import RetentionFilterWithoutAttributes + return { + "data": ([RetentionFilterWithoutAttributes],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RetentionFilterWithoutAttributes], **kwargs): + """ + A list of retention filters to reorder. + + :param data: A list of retention filters objects. + :type data: [RetentionFilterWithoutAttributes] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/reorder_rule_resource_array.py b/datadog_api_client/v2/model/reorder_rule_resource_array.py new file mode 100644 index 0000000000..92c6d511b0 --- /dev/null +++ b/datadog_api_client/v2/model/reorder_rule_resource_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.reorder_rule_resource_data import ReorderRuleResourceData + +class ReorderRuleResourceArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.reorder_rule_resource_data import ReorderRuleResourceData + return { + "data": ([ReorderRuleResourceData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ReorderRuleResourceData], **kwargs): + """ + The definition of ``ReorderRuleResourceArray`` object. + + :param data: The ``ReorderRuleResourceArray`` ``data``. + :type data: [ReorderRuleResourceData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/reorder_rule_resource_data.py b/datadog_api_client/v2/model/reorder_rule_resource_data.py new file mode 100644 index 0000000000..b8128c6fce --- /dev/null +++ b/datadog_api_client/v2/model/reorder_rule_resource_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.reorder_rule_resource_data_type import ReorderRuleResourceDataType + +class ReorderRuleResourceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.reorder_rule_resource_data_type import ReorderRuleResourceDataType + return { + "id": (str,), + "type": (ReorderRuleResourceDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, type: ReorderRuleResourceDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``ReorderRuleResourceData`` object. + + :param id: The ``ReorderRuleResourceData`` ``id``. + :type id: str, optional + + :param type: Arbitrary rule resource type. + :type type: ReorderRuleResourceDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/reorder_rule_resource_data_type.py b/datadog_api_client/v2/model/reorder_rule_resource_data_type.py new file mode 100644 index 0000000000..c539552d28 --- /dev/null +++ b/datadog_api_client/v2/model/reorder_rule_resource_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReorderRuleResourceDataType(ModelSimple): + """ + Arbitrary rule resource type. + + :param value: If omitted defaults to "arbitrary_rule". Must be one of ["arbitrary_rule"]. + :type value: str + """ + + allowed_values = { + "arbitrary_rule", + } + ARBITRARY_RULE: ClassVar["ReorderRuleResourceDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReorderRuleResourceDataType.ARBITRARY_RULE = ReorderRuleResourceDataType("arbitrary_rule") diff --git a/datadog_api_client/v2/model/reorder_ruleset_resource_array.py b/datadog_api_client/v2/model/reorder_ruleset_resource_array.py new file mode 100644 index 0000000000..2a3a69b3d0 --- /dev/null +++ b/datadog_api_client/v2/model/reorder_ruleset_resource_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.reorder_ruleset_resource_data import ReorderRulesetResourceData + +class ReorderRulesetResourceArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.reorder_ruleset_resource_data import ReorderRulesetResourceData + return { + "data": ([ReorderRulesetResourceData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ReorderRulesetResourceData], **kwargs): + """ + The definition of ``ReorderRulesetResourceArray`` object. + + :param data: The ``ReorderRulesetResourceArray`` ``data``. + :type data: [ReorderRulesetResourceData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/reorder_ruleset_resource_data.py b/datadog_api_client/v2/model/reorder_ruleset_resource_data.py new file mode 100644 index 0000000000..3e6b3f47a8 --- /dev/null +++ b/datadog_api_client/v2/model/reorder_ruleset_resource_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.reorder_ruleset_resource_data_type import ReorderRulesetResourceDataType + +class ReorderRulesetResourceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.reorder_ruleset_resource_data_type import ReorderRulesetResourceDataType + return { + "id": (str,), + "type": (ReorderRulesetResourceDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, type: ReorderRulesetResourceDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``ReorderRulesetResourceData`` object. + + :param id: The ``ReorderRulesetResourceData`` ``id``. + :type id: str, optional + + :param type: Ruleset resource type. + :type type: ReorderRulesetResourceDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/reorder_ruleset_resource_data_type.py b/datadog_api_client/v2/model/reorder_ruleset_resource_data_type.py new file mode 100644 index 0000000000..53d6afcaec --- /dev/null +++ b/datadog_api_client/v2/model/reorder_ruleset_resource_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReorderRulesetResourceDataType(ModelSimple): + """ + Ruleset resource type. + + :param value: If omitted defaults to "ruleset". Must be one of ["ruleset"]. + :type value: str + """ + + allowed_values = { + "ruleset", + } + RULESET: ClassVar["ReorderRulesetResourceDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReorderRulesetResourceDataType.RULESET = ReorderRulesetResourceDataType("ruleset") diff --git a/datadog_api_client/v2/model/report_schedule_author.py b/datadog_api_client/v2/model/report_schedule_author.py new file mode 100644 index 0000000000..cc1b84512b --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_author.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_author_attributes import ReportScheduleAuthorAttributes + from datadog_api_client.v2.model.report_schedule_author_type import ReportScheduleAuthorType + +class ReportScheduleAuthor(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_author_attributes import ReportScheduleAuthorAttributes + from datadog_api_client.v2.model.report_schedule_author_type import ReportScheduleAuthorType + return { + "attributes": (ReportScheduleAuthorAttributes,), + "id": (str,), + "type": (ReportScheduleAuthorType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ReportScheduleAuthorAttributes, id: str, type: ReportScheduleAuthorType, **kwargs): + """ + A user included as a related JSON:API resource. + + :param attributes: Attributes of the report author. + :type attributes: ReportScheduleAuthorAttributes + + :param id: The user UUID. + :type id: str + + :param type: JSON:API resource type for the included report author. + :type type: ReportScheduleAuthorType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/report_schedule_author_attributes.py b/datadog_api_client/v2/model/report_schedule_author_attributes.py new file mode 100644 index 0000000000..cdf0223bbd --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_author_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ReportScheduleAuthorAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str, none_type), + "name": (str, none_type), + } + attribute_map = { + "email": "email", + "name": "name", + } + + def __init__(self_, email: Union[str, none_type], name: Union[str, none_type], **kwargs): + """ + Attributes of the report author. + + :param email: The email address of the report author, or ``null`` if unavailable. + :type email: str, none_type + + :param name: The display name of the report author, or ``null`` if unavailable. + :type name: str, none_type + """ + super().__init__(kwargs) + + + self_.email = email + self_.name = name diff --git a/datadog_api_client/v2/model/report_schedule_author_relationship.py b/datadog_api_client/v2/model/report_schedule_author_relationship.py new file mode 100644 index 0000000000..41fa3d3566 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_author_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_author_relationship_data import ReportScheduleAuthorRelationshipData + +class ReportScheduleAuthorRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_author_relationship_data import ReportScheduleAuthorRelationshipData + return { + "data": (ReportScheduleAuthorRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ReportScheduleAuthorRelationshipData, **kwargs): + """ + Relationship to the author of the report schedule. + + :param data: Relationship data for the author of the report schedule. + :type data: ReportScheduleAuthorRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/report_schedule_author_relationship_data.py b/datadog_api_client/v2/model/report_schedule_author_relationship_data.py new file mode 100644 index 0000000000..f79ffffe8d --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_author_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_author_type import ReportScheduleAuthorType + +class ReportScheduleAuthorRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_author_type import ReportScheduleAuthorType + return { + "id": (str,), + "type": (ReportScheduleAuthorType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ReportScheduleAuthorType, **kwargs): + """ + Relationship data for the author of the report schedule. + + :param id: The user UUID of the report schedule author. + :type id: str + + :param type: JSON:API resource type for the included report author. + :type type: ReportScheduleAuthorType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/report_schedule_author_type.py b/datadog_api_client/v2/model/report_schedule_author_type.py new file mode 100644 index 0000000000..5ed04720e6 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_author_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReportScheduleAuthorType(ModelSimple): + """ + JSON:API resource type for the included report author. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["ReportScheduleAuthorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReportScheduleAuthorType.USERS = ReportScheduleAuthorType("users") diff --git a/datadog_api_client/v2/model/report_schedule_create_request.py b/datadog_api_client/v2/model/report_schedule_create_request.py new file mode 100644 index 0000000000..9834f14a64 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_create_request_data import ReportScheduleCreateRequestData + +class ReportScheduleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_create_request_data import ReportScheduleCreateRequestData + return { + "data": (ReportScheduleCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ReportScheduleCreateRequestData, **kwargs): + """ + Request body for creating a report schedule. + + :param data: The JSON:API data object for a report schedule creation request. + :type data: ReportScheduleCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/report_schedule_create_request_attributes.py b/datadog_api_client/v2/model/report_schedule_create_request_attributes.py new file mode 100644 index 0000000000..89dd03afc8 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_create_request_attributes.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_delivery_format import ReportScheduleDeliveryFormat + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + +class ReportScheduleCreateRequestAttributes(ModelNormal): + validations = { + "description": { + "max_length": 4096, + }, + "title": { + "max_length": 78, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_delivery_format import ReportScheduleDeliveryFormat + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + return { + "delivery_format": (ReportScheduleDeliveryFormat,), + "description": (str,), + "recipients": ([str],), + "resource_id": (str,), + "resource_type": (ReportScheduleResourceType,), + "rrule": (str,), + "tab_id": (UUID,), + "template_variables": ([ReportScheduleTemplateVariable],), + "timeframe": (str,), + "timezone": (str,), + "title": (str,), + } + attribute_map = { + "delivery_format": "delivery_format", + "description": "description", + "recipients": "recipients", + "resource_id": "resource_id", + "resource_type": "resource_type", + "rrule": "rrule", + "tab_id": "tab_id", + "template_variables": "template_variables", + "timeframe": "timeframe", + "timezone": "timezone", + "title": "title", + } + + def __init__(self_, description: str, recipients: List[str], resource_id: str, resource_type: ReportScheduleResourceType, rrule: str, template_variables: List[ReportScheduleTemplateVariable], timeframe: str, timezone: str, title: str, delivery_format: Union[ReportScheduleDeliveryFormat, UnsetType]=unset, tab_id: Union[UUID, UnsetType]=unset, **kwargs): + """ + The configuration of the report schedule to create. + + :param delivery_format: How a PDF-export report is delivered. ``pdf`` attaches a PDF file, ``png`` embeds + an inline PNG image, and ``pdf_and_png`` delivers both. + :type delivery_format: ReportScheduleDeliveryFormat, optional + + :param description: A description of the report, up to 4096 characters. + :type description: str + + :param recipients: The recipients of the report. Each entry is an email address, a Slack channel + reference in the form ``slack:{team_id}.{channel_id}.{channel_name}`` , or a Microsoft + Teams channel reference in the form ``teams:{tenant_id}|{team_id}|{channel_id}``. + :type recipients: [str] + + :param resource_id: The identifier of the dashboard or integration dashboard to render in the report. + :type resource_id: str + + :param resource_type: The type of dashboard resource the report schedule targets. + :type resource_type: ReportScheduleResourceType + + :param rrule: The recurrence rule for the schedule, expressed as an iCalendar ``RRULE`` string. + :type rrule: str + + :param tab_id: The identifier of the dashboard tab to render, when the dashboard has tabs. + :type tab_id: UUID, optional + + :param template_variables: The dashboard template variables applied when rendering the report. + :type template_variables: [ReportScheduleTemplateVariable] + + :param timeframe: The relative timeframe of data to include in the report. + :type timeframe: str + + :param timezone: The IANA time zone identifier the recurrence rule is evaluated in. + :type timezone: str + + :param title: The title of the report, between 1 and 78 characters. + :type title: str + """ + if delivery_format is not unset: + kwargs["delivery_format"] = delivery_format + if tab_id is not unset: + kwargs["tab_id"] = tab_id + super().__init__(kwargs) + + + self_.description = description + self_.recipients = recipients + self_.resource_id = resource_id + self_.resource_type = resource_type + self_.rrule = rrule + self_.template_variables = template_variables + self_.timeframe = timeframe + self_.timezone = timezone + self_.title = title diff --git a/datadog_api_client/v2/model/report_schedule_create_request_data.py b/datadog_api_client/v2/model/report_schedule_create_request_data.py new file mode 100644 index 0000000000..63b187a935 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_create_request_attributes import ReportScheduleCreateRequestAttributes + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + +class ReportScheduleCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_create_request_attributes import ReportScheduleCreateRequestAttributes + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + return { + "attributes": (ReportScheduleCreateRequestAttributes,), + "type": (ReportScheduleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ReportScheduleCreateRequestAttributes, type: ReportScheduleType, **kwargs): + """ + The JSON:API data object for a report schedule creation request. + + :param attributes: The configuration of the report schedule to create. + :type attributes: ReportScheduleCreateRequestAttributes + + :param type: JSON:API resource type for report schedules. + :type type: ReportScheduleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/report_schedule_delivery_format.py b/datadog_api_client/v2/model/report_schedule_delivery_format.py new file mode 100644 index 0000000000..564f9a30b5 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_delivery_format.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReportScheduleDeliveryFormat(ModelSimple): + """ + How a PDF-export report is delivered. `pdf` attaches a PDF file, `png` embeds + an inline PNG image, and `pdf_and_png` delivers both. + + :param value: Must be one of ["pdf", "png", "pdf_and_png"]. + :type value: str + """ + + allowed_values = { + "pdf", + "png", + "pdf_and_png", + } + PDF: ClassVar["ReportScheduleDeliveryFormat"] + PNG: ClassVar["ReportScheduleDeliveryFormat"] + PDF_AND_PNG: ClassVar["ReportScheduleDeliveryFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReportScheduleDeliveryFormat.PDF = ReportScheduleDeliveryFormat("pdf") +ReportScheduleDeliveryFormat.PNG = ReportScheduleDeliveryFormat("png") +ReportScheduleDeliveryFormat.PDF_AND_PNG = ReportScheduleDeliveryFormat("pdf_and_png") diff --git a/datadog_api_client/v2/model/report_schedule_included_resource.py b/datadog_api_client/v2/model/report_schedule_included_resource.py new file mode 100644 index 0000000000..0eeae1e5c1 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_included_resource.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ReportScheduleIncludedResource(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A related resource included with a report schedule. + + :param attributes: Attributes of the report author. + :type attributes: ReportScheduleAuthorAttributes + + :param id: The user UUID. + :type id: str + + :param type: JSON:API resource type for the included report author. + :type type: ReportScheduleAuthorType + """ + 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.report_schedule_author import ReportScheduleAuthor + from datadog_api_client.v2.model.report_schedule_resource import ReportScheduleResource + return { + "oneOf": [ + ReportScheduleAuthor, + ReportScheduleResource, + ], + } diff --git a/datadog_api_client/v2/model/report_schedule_included_resource_type.py b/datadog_api_client/v2/model/report_schedule_included_resource_type.py new file mode 100644 index 0000000000..40ede2d69d --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_included_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReportScheduleIncludedResourceType(ModelSimple): + """ + JSON:API resource type for an included report resource. + + :param value: If omitted defaults to "resource". Must be one of ["resource"]. + :type value: str + """ + + allowed_values = { + "resource", + } + RESOURCE: ClassVar["ReportScheduleIncludedResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReportScheduleIncludedResourceType.RESOURCE = ReportScheduleIncludedResourceType("resource") diff --git a/datadog_api_client/v2/model/report_schedule_index_template_variable.py b/datadog_api_client/v2/model/report_schedule_index_template_variable.py new file mode 100644 index 0000000000..fe6647de2c --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_index_template_variable.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ReportScheduleIndexTemplateVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "available_values": ([str], none_type), + "defaults": ([str], none_type), + "name": (str, none_type), + "prefix": (str, none_type), + } + attribute_map = { + "available_values": "available_values", + "defaults": "defaults", + "name": "name", + "prefix": "prefix", + } + + def __init__(self_, available_values: Union[List[str], none_type, UnsetType]=unset, defaults: Union[List[str], none_type, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, prefix: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Template variable metadata from a dashboard index. + + :param available_values: Available values for the template variable. + :type available_values: [str], none_type, optional + + :param defaults: Default values for the template variable. + :type defaults: [str], none_type, optional + + :param name: The template variable name. + :type name: str, none_type, optional + + :param prefix: The tag prefix for the template variable, when available. + :type prefix: str, none_type, optional + """ + if available_values is not unset: + kwargs["available_values"] = available_values + if defaults is not unset: + kwargs["defaults"] = defaults + if name is not unset: + kwargs["name"] = name + if prefix is not unset: + kwargs["prefix"] = prefix + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/report_schedule_list_resource_relationship.py b/datadog_api_client/v2/model/report_schedule_list_resource_relationship.py new file mode 100644 index 0000000000..6f156f0d72 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_resource_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_list_resource_relationship_data import ReportScheduleListResourceRelationshipData + +class ReportScheduleListResourceRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_list_resource_relationship_data import ReportScheduleListResourceRelationshipData + return { + "data": (ReportScheduleListResourceRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ReportScheduleListResourceRelationshipData, **kwargs): + """ + Relationship to the report target resource. + + :param data: Relationship data for the report target resource. + :type data: ReportScheduleListResourceRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/report_schedule_list_resource_relationship_data.py b/datadog_api_client/v2/model/report_schedule_list_resource_relationship_data.py new file mode 100644 index 0000000000..d6a45360bb --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_resource_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_included_resource_type import ReportScheduleIncludedResourceType + +class ReportScheduleListResourceRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_included_resource_type import ReportScheduleIncludedResourceType + return { + "id": (str,), + "type": (ReportScheduleIncludedResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ReportScheduleIncludedResourceType, **kwargs): + """ + Relationship data for the report target resource. + + :param id: The resource identifier. + :type id: str + + :param type: JSON:API resource type for an included report resource. + :type type: ReportScheduleIncludedResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/report_schedule_list_response.py b/datadog_api_client/v2/model/report_schedule_list_response.py new file mode 100644 index 0000000000..64cf1acf44 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_response.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_list_response_data import ReportScheduleListResponseData + from datadog_api_client.v2.model.report_schedule_included_resource import ReportScheduleIncludedResource + from datadog_api_client.v2.model.report_schedule_list_response_links import ReportScheduleListResponseLinks + from datadog_api_client.v2.model.report_schedule_list_response_meta import ReportScheduleListResponseMeta + from datadog_api_client.v2.model.report_schedule_author import ReportScheduleAuthor + from datadog_api_client.v2.model.report_schedule_resource import ReportScheduleResource + +class ReportScheduleListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_list_response_data import ReportScheduleListResponseData + from datadog_api_client.v2.model.report_schedule_included_resource import ReportScheduleIncludedResource + from datadog_api_client.v2.model.report_schedule_list_response_links import ReportScheduleListResponseLinks + from datadog_api_client.v2.model.report_schedule_list_response_meta import ReportScheduleListResponseMeta + return { + "data": ([ReportScheduleListResponseData],), + "included": ([ReportScheduleIncludedResource],), + "links": (ReportScheduleListResponseLinks,), + "meta": (ReportScheduleListResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[ReportScheduleListResponseData], included: Union[List[Union[ReportScheduleIncludedResource, ReportScheduleAuthor, ReportScheduleResource]], UnsetType]=unset, links: Union[ReportScheduleListResponseLinks, UnsetType]=unset, meta: Union[ReportScheduleListResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of report schedules. + + :param data: The list of report schedules. + :type data: [ReportScheduleListResponseData] + + :param included: Related resources included with the report schedules, such as authors and rendered resources. + :type included: [ReportScheduleIncludedResource], optional + + :param links: Pagination links for navigating a report schedule list response. + :type links: ReportScheduleListResponseLinks, optional + + :param meta: Metadata for a paginated report schedule list response. + :type meta: ReportScheduleListResponseMeta, optional + """ + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/report_schedule_list_response_attributes.py b/datadog_api_client/v2/model/report_schedule_list_response_attributes.py new file mode 100644 index 0000000000..8c1d9853ed --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_response_attributes.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_response_attributes_delivery_format import ReportScheduleResponseAttributesDeliveryFormat + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_status import ReportScheduleStatus + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + +class ReportScheduleListResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_response_attributes_delivery_format import ReportScheduleResponseAttributesDeliveryFormat + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_status import ReportScheduleStatus + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + return { + "delivery_format": (ReportScheduleResponseAttributesDeliveryFormat,), + "description": (str,), + "next_recurrence": (int, none_type), + "recipients": ([str],), + "resource_id": (str,), + "resource_type": (ReportScheduleResourceType,), + "rrule": (str,), + "status": (ReportScheduleStatus,), + "template_variables": ([ReportScheduleTemplateVariable],), + "timeframe": (str, none_type), + "timezone": (str,), + "title": (str,), + } + attribute_map = { + "delivery_format": "delivery_format", + "description": "description", + "next_recurrence": "next_recurrence", + "recipients": "recipients", + "resource_id": "resource_id", + "resource_type": "resource_type", + "rrule": "rrule", + "status": "status", + "template_variables": "template_variables", + "timeframe": "timeframe", + "timezone": "timezone", + "title": "title", + } + + def __init__(self_, description: str, next_recurrence: Union[int, none_type], recipients: List[str], resource_id: str, resource_type: ReportScheduleResourceType, rrule: str, status: ReportScheduleStatus, template_variables: List[ReportScheduleTemplateVariable], timeframe: Union[str, none_type], timezone: str, title: str, delivery_format: Union[ReportScheduleResponseAttributesDeliveryFormat, none_type, UnsetType]=unset, **kwargs): + """ + The configuration and derived state of a report schedule in a list response. + + :param delivery_format: The delivery format for dashboard report schedules, or ``null`` if not set. + :type delivery_format: ReportScheduleResponseAttributesDeliveryFormat, none_type, optional + + :param description: The description of the report. + :type description: str + + :param next_recurrence: The Unix timestamp, in milliseconds, of the next scheduled delivery, or ``null`` if none is scheduled. + :type next_recurrence: int, none_type + + :param recipients: The recipients of the report (email addresses, Slack channel references, or Microsoft Teams channel references). + :type recipients: [str] + + :param resource_id: The identifier of the resource rendered in the report. + :type resource_id: str + + :param resource_type: The type of dashboard resource the report schedule targets. + :type resource_type: ReportScheduleResourceType + + :param rrule: The recurrence rule for the schedule, expressed as an iCalendar ``RRULE`` string. + :type rrule: str + + :param status: Whether the schedule is currently delivering reports ( ``active`` ) or paused ( ``inactive`` ). + :type status: ReportScheduleStatus + + :param template_variables: The dashboard template variables applied when rendering the report. + :type template_variables: [ReportScheduleTemplateVariable] + + :param timeframe: The relative timeframe of data included in the report, or ``null`` if not set. + :type timeframe: str, none_type + + :param timezone: The IANA time zone identifier the recurrence rule is evaluated in. + :type timezone: str + + :param title: The title of the report. + :type title: str + """ + if delivery_format is not unset: + kwargs["delivery_format"] = delivery_format + super().__init__(kwargs) + + + self_.description = description + self_.next_recurrence = next_recurrence + self_.recipients = recipients + self_.resource_id = resource_id + self_.resource_type = resource_type + self_.rrule = rrule + self_.status = status + self_.template_variables = template_variables + self_.timeframe = timeframe + self_.timezone = timezone + self_.title = title diff --git a/datadog_api_client/v2/model/report_schedule_list_response_data.py b/datadog_api_client/v2/model/report_schedule_list_response_data.py new file mode 100644 index 0000000000..8f541d11c1 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_response_data.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_list_response_attributes import ReportScheduleListResponseAttributes + from datadog_api_client.v2.model.report_schedule_list_response_relationships import ReportScheduleListResponseRelationships + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + +class ReportScheduleListResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_list_response_attributes import ReportScheduleListResponseAttributes + from datadog_api_client.v2.model.report_schedule_list_response_relationships import ReportScheduleListResponseRelationships + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + return { + "attributes": (ReportScheduleListResponseAttributes,), + "id": (str,), + "relationships": (ReportScheduleListResponseRelationships,), + "type": (ReportScheduleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ReportScheduleListResponseAttributes, id: str, relationships: ReportScheduleListResponseRelationships, type: ReportScheduleType, **kwargs): + """ + The JSON:API data object representing a report schedule in a list response. + + :param attributes: The configuration and derived state of a report schedule in a list response. + :type attributes: ReportScheduleListResponseAttributes + + :param id: The unique identifier of the report schedule. + :type id: str + + :param relationships: Relationships for a report schedule in a list response. + :type relationships: ReportScheduleListResponseRelationships + + :param type: JSON:API resource type for report schedules. + :type type: ReportScheduleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/report_schedule_list_response_links.py b/datadog_api_client/v2/model/report_schedule_list_response_links.py new file mode 100644 index 0000000000..16d11fc3a2 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ReportScheduleListResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str, none_type), + "last": (str, none_type), + "next": (str, none_type), + "prev": (str, none_type), + "self": (str, none_type), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, none_type, UnsetType]=unset, last: Union[str, none_type, UnsetType]=unset, next: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Pagination links for navigating a report schedule list response. + + :param first: Link to the first page. + :type first: str, none_type, optional + + :param last: Link to the last page, or ``null`` if it is unavailable. + :type last: str, none_type, optional + + :param next: Link to the next page, or ``null`` if it is unavailable. + :type next: str, none_type, optional + + :param prev: Link to the previous page, or ``null`` if it is unavailable. + :type prev: str, none_type, optional + + :param self: Link to the current page. + :type self: str, none_type, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/report_schedule_list_response_meta.py b/datadog_api_client/v2/model/report_schedule_list_response_meta.py new file mode 100644 index 0000000000..2fe46b048f --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_list_response_pagination import ReportScheduleListResponsePagination + +class ReportScheduleListResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_list_response_pagination import ReportScheduleListResponsePagination + return { + "pagination": (ReportScheduleListResponsePagination,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[ReportScheduleListResponsePagination, UnsetType]=unset, **kwargs): + """ + Metadata for a paginated report schedule list response. + + :param pagination: Offset and limit pagination metadata for a report schedule list response. + :type pagination: ReportScheduleListResponsePagination, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/report_schedule_list_response_pagination.py b/datadog_api_client/v2/model/report_schedule_list_response_pagination.py new file mode 100644 index 0000000000..592dca11b9 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_response_pagination.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_list_response_pagination_type import ReportScheduleListResponsePaginationType + +class ReportScheduleListResponsePagination(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_list_response_pagination_type import ReportScheduleListResponsePaginationType + return { + "first_offset": (int,), + "last_offset": (int, none_type), + "limit": (int,), + "next_offset": (int,), + "offset": (int,), + "prev_offset": (int,), + "total": (int,), + "type": (ReportScheduleListResponsePaginationType,), + } + attribute_map = { + "first_offset": "first_offset", + "last_offset": "last_offset", + "limit": "limit", + "next_offset": "next_offset", + "offset": "offset", + "prev_offset": "prev_offset", + "total": "total", + "type": "type", + } + + def __init__(self_, first_offset: Union[int, UnsetType]=unset, last_offset: Union[int, none_type, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_offset: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, prev_offset: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[ReportScheduleListResponsePaginationType, UnsetType]=unset, **kwargs): + """ + Offset and limit pagination metadata for a report schedule list response. + + :param first_offset: The first offset. + :type first_offset: int, optional + + :param last_offset: The last offset when the total count is known, or ``null`` if it is unavailable. + :type last_offset: int, none_type, optional + + :param limit: The maximum number of schedules returned. + :type limit: int, optional + + :param next_offset: The next offset. + :type next_offset: int, optional + + :param offset: The current offset. + :type offset: int, optional + + :param prev_offset: The previous offset. + :type prev_offset: int, optional + + :param total: The total number of matching schedules. + :type total: int, optional + + :param type: The pagination type. + :type type: ReportScheduleListResponsePaginationType, optional + """ + if first_offset is not unset: + kwargs["first_offset"] = first_offset + if last_offset is not unset: + kwargs["last_offset"] = last_offset + if limit is not unset: + kwargs["limit"] = limit + if next_offset is not unset: + kwargs["next_offset"] = next_offset + if offset is not unset: + kwargs["offset"] = offset + if prev_offset is not unset: + kwargs["prev_offset"] = prev_offset + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/report_schedule_list_response_pagination_type.py b/datadog_api_client/v2/model/report_schedule_list_response_pagination_type.py new file mode 100644 index 0000000000..3df5fe341d --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_response_pagination_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReportScheduleListResponsePaginationType(ModelSimple): + """ + The pagination type. + + :param value: If omitted defaults to "offset_limit". Must be one of ["offset_limit"]. + :type value: str + """ + + allowed_values = { + "offset_limit", + } + OFFSET_LIMIT: ClassVar["ReportScheduleListResponsePaginationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReportScheduleListResponsePaginationType.OFFSET_LIMIT = ReportScheduleListResponsePaginationType("offset_limit") diff --git a/datadog_api_client/v2/model/report_schedule_list_response_relationships.py b/datadog_api_client/v2/model/report_schedule_list_response_relationships.py new file mode 100644 index 0000000000..9078447f67 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_list_response_relationships.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_author_relationship import ReportScheduleAuthorRelationship + from datadog_api_client.v2.model.report_schedule_list_resource_relationship import ReportScheduleListResourceRelationship + +class ReportScheduleListResponseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_author_relationship import ReportScheduleAuthorRelationship + from datadog_api_client.v2.model.report_schedule_list_resource_relationship import ReportScheduleListResourceRelationship + return { + "author": (ReportScheduleAuthorRelationship,), + "resource": (ReportScheduleListResourceRelationship,), + } + attribute_map = { + "author": "author", + "resource": "resource", + } + + def __init__(self_, author: ReportScheduleAuthorRelationship, resource: Union[ReportScheduleListResourceRelationship, UnsetType]=unset, **kwargs): + """ + Relationships for a report schedule in a list response. + + :param author: Relationship to the author of the report schedule. + :type author: ReportScheduleAuthorRelationship + + :param resource: Relationship to the report target resource. + :type resource: ReportScheduleListResourceRelationship, optional + """ + if resource is not unset: + kwargs["resource"] = resource + super().__init__(kwargs) + + + self_.author = author diff --git a/datadog_api_client/v2/model/report_schedule_patch_request.py b/datadog_api_client/v2/model/report_schedule_patch_request.py new file mode 100644 index 0000000000..fc46b9288f --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_patch_request_data import ReportSchedulePatchRequestData + +class ReportSchedulePatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_patch_request_data import ReportSchedulePatchRequestData + return { + "data": (ReportSchedulePatchRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ReportSchedulePatchRequestData, **kwargs): + """ + Request body for updating a report schedule. + + :param data: The JSON:API data object for a report schedule update request. + :type data: ReportSchedulePatchRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/report_schedule_patch_request_attributes.py b/datadog_api_client/v2/model/report_schedule_patch_request_attributes.py new file mode 100644 index 0000000000..248d8399ff --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_patch_request_attributes.py @@ -0,0 +1,113 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_delivery_format import ReportScheduleDeliveryFormat + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + +class ReportSchedulePatchRequestAttributes(ModelNormal): + validations = { + "description": { + "max_length": 4096, + }, + "title": { + "max_length": 78, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_delivery_format import ReportScheduleDeliveryFormat + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + return { + "delivery_format": (ReportScheduleDeliveryFormat,), + "description": (str,), + "recipients": ([str],), + "rrule": (str,), + "tab_id": (UUID,), + "template_variables": ([ReportScheduleTemplateVariable],), + "timeframe": (str,), + "timezone": (str,), + "title": (str,), + } + attribute_map = { + "delivery_format": "delivery_format", + "description": "description", + "recipients": "recipients", + "rrule": "rrule", + "tab_id": "tab_id", + "template_variables": "template_variables", + "timeframe": "timeframe", + "timezone": "timezone", + "title": "title", + } + + def __init__(self_, description: str, recipients: List[str], rrule: str, template_variables: List[ReportScheduleTemplateVariable], timeframe: str, timezone: str, title: str, delivery_format: Union[ReportScheduleDeliveryFormat, UnsetType]=unset, tab_id: Union[UUID, UnsetType]=unset, **kwargs): + """ + The updated configuration of the report schedule. These values replace the existing + ones; the targeted resource ( ``resource_id`` and ``resource_type`` ) cannot be changed. + + :param delivery_format: How a PDF-export report is delivered. ``pdf`` attaches a PDF file, ``png`` embeds + an inline PNG image, and ``pdf_and_png`` delivers both. + :type delivery_format: ReportScheduleDeliveryFormat, optional + + :param description: A description of the report, up to 4096 characters. + :type description: str + + :param recipients: The recipients of the report. Each entry is an email address, a Slack channel + reference in the form ``slack:{team_id}.{channel_id}.{channel_name}`` , or a Microsoft + Teams channel reference in the form ``teams:{tenant_id}|{team_id}|{channel_id}``. + :type recipients: [str] + + :param rrule: The recurrence rule for the schedule, expressed as an iCalendar ``RRULE`` string. + :type rrule: str + + :param tab_id: The identifier of the dashboard tab to render, when the dashboard has tabs. + :type tab_id: UUID, optional + + :param template_variables: The dashboard template variables applied when rendering the report. + :type template_variables: [ReportScheduleTemplateVariable] + + :param timeframe: The relative timeframe of data to include in the report. + :type timeframe: str + + :param timezone: The IANA time zone identifier the recurrence rule is evaluated in. + :type timezone: str + + :param title: The title of the report, between 1 and 78 characters. + :type title: str + """ + if delivery_format is not unset: + kwargs["delivery_format"] = delivery_format + if tab_id is not unset: + kwargs["tab_id"] = tab_id + super().__init__(kwargs) + + + self_.description = description + self_.recipients = recipients + self_.rrule = rrule + self_.template_variables = template_variables + self_.timeframe = timeframe + self_.timezone = timezone + self_.title = title diff --git a/datadog_api_client/v2/model/report_schedule_patch_request_data.py b/datadog_api_client/v2/model/report_schedule_patch_request_data.py new file mode 100644 index 0000000000..2140ff70d0 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_patch_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_patch_request_attributes import ReportSchedulePatchRequestAttributes + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + +class ReportSchedulePatchRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_patch_request_attributes import ReportSchedulePatchRequestAttributes + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + return { + "attributes": (ReportSchedulePatchRequestAttributes,), + "type": (ReportScheduleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ReportSchedulePatchRequestAttributes, type: ReportScheduleType, **kwargs): + """ + The JSON:API data object for a report schedule update request. + + :param attributes: The updated configuration of the report schedule. These values replace the existing + ones; the targeted resource ( ``resource_id`` and ``resource_type`` ) cannot be changed. + :type attributes: ReportSchedulePatchRequestAttributes + + :param type: JSON:API resource type for report schedules. + :type type: ReportScheduleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/report_schedule_resource.py b/datadog_api_client/v2/model/report_schedule_resource.py new file mode 100644 index 0000000000..ab9b47fdce --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_resource.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_resource_attributes import ReportScheduleResourceAttributes + from datadog_api_client.v2.model.report_schedule_included_resource_type import ReportScheduleIncludedResourceType + +class ReportScheduleResource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_resource_attributes import ReportScheduleResourceAttributes + from datadog_api_client.v2.model.report_schedule_included_resource_type import ReportScheduleIncludedResourceType + return { + "attributes": (ReportScheduleResourceAttributes,), + "id": (str,), + "type": (ReportScheduleIncludedResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ReportScheduleResourceAttributes, id: str, type: ReportScheduleIncludedResourceType, **kwargs): + """ + A report target resource included as a related JSON:API resource. + + :param attributes: Attributes of an included report target resource. + :type attributes: ReportScheduleResourceAttributes + + :param id: The resource identifier. + :type id: str + + :param type: JSON:API resource type for an included report resource. + :type type: ReportScheduleIncludedResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/report_schedule_resource_attributes.py b/datadog_api_client/v2/model/report_schedule_resource_attributes.py new file mode 100644 index 0000000000..b482662ed8 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_resource_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_index_template_variable import ReportScheduleIndexTemplateVariable + +class ReportScheduleResourceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_index_template_variable import ReportScheduleIndexTemplateVariable + return { + "resource_type": (ReportScheduleResourceType,), + "template_variables": ([ReportScheduleIndexTemplateVariable], none_type), + "title": (str, none_type), + } + attribute_map = { + "resource_type": "resource_type", + "template_variables": "template_variables", + "title": "title", + } + + def __init__(self_, resource_type: ReportScheduleResourceType, template_variables: Union[List[ReportScheduleIndexTemplateVariable], none_type, UnsetType]=unset, title: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of an included report target resource. + + :param resource_type: The type of dashboard resource the report schedule targets. + :type resource_type: ReportScheduleResourceType + + :param template_variables: Template variable metadata from the dashboard resource, when available. + :type template_variables: [ReportScheduleIndexTemplateVariable], none_type, optional + + :param title: The title of the dashboard or integration dashboard resource, when available. + :type title: str, none_type, optional + """ + if template_variables is not unset: + kwargs["template_variables"] = template_variables + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + + self_.resource_type = resource_type diff --git a/datadog_api_client/v2/model/report_schedule_resource_type.py b/datadog_api_client/v2/model/report_schedule_resource_type.py new file mode 100644 index 0000000000..dd29dbb7a5 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_resource_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReportScheduleResourceType(ModelSimple): + """ + The type of dashboard resource the report schedule targets. + + :param value: Must be one of ["dashboard", "integration_dashboard"]. + :type value: str + """ + + allowed_values = { + "dashboard", + "integration_dashboard", + } + DASHBOARD: ClassVar["ReportScheduleResourceType"] + INTEGRATION_DASHBOARD: ClassVar["ReportScheduleResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReportScheduleResourceType.DASHBOARD = ReportScheduleResourceType("dashboard") +ReportScheduleResourceType.INTEGRATION_DASHBOARD = ReportScheduleResourceType("integration_dashboard") diff --git a/datadog_api_client/v2/model/report_schedule_response.py b/datadog_api_client/v2/model/report_schedule_response.py new file mode 100644 index 0000000000..d1294557aa --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_response_data import ReportScheduleResponseData + from datadog_api_client.v2.model.report_schedule_included_resource import ReportScheduleIncludedResource + from datadog_api_client.v2.model.report_schedule_author import ReportScheduleAuthor + from datadog_api_client.v2.model.report_schedule_resource import ReportScheduleResource + +class ReportScheduleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_response_data import ReportScheduleResponseData + from datadog_api_client.v2.model.report_schedule_included_resource import ReportScheduleIncludedResource + return { + "data": (ReportScheduleResponseData,), + "included": ([ReportScheduleIncludedResource],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: ReportScheduleResponseData, included: Union[List[Union[ReportScheduleIncludedResource, ReportScheduleAuthor, ReportScheduleResource]], UnsetType]=unset, **kwargs): + """ + Response containing a single report schedule. + + :param data: The JSON:API data object representing a report schedule. + :type data: ReportScheduleResponseData + + :param included: Related resources included with the report schedule, such as the author. + :type included: [ReportScheduleIncludedResource], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/report_schedule_response_attributes.py b/datadog_api_client/v2/model/report_schedule_response_attributes.py new file mode 100644 index 0000000000..d47a467b07 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_response_attributes.py @@ -0,0 +1,127 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_response_attributes_delivery_format import ReportScheduleResponseAttributesDeliveryFormat + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_status import ReportScheduleStatus + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + +class ReportScheduleResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_response_attributes_delivery_format import ReportScheduleResponseAttributesDeliveryFormat + from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType + from datadog_api_client.v2.model.report_schedule_status import ReportScheduleStatus + from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable + return { + "delivery_format": (ReportScheduleResponseAttributesDeliveryFormat,), + "description": (str,), + "next_recurrence": (int, none_type), + "recipients": ([str],), + "resource_id": (str,), + "resource_type": (ReportScheduleResourceType,), + "rrule": (str,), + "status": (ReportScheduleStatus,), + "tab_id": (str, none_type), + "template_variables": ([ReportScheduleTemplateVariable],), + "timeframe": (str, none_type), + "timezone": (str,), + "title": (str,), + } + attribute_map = { + "delivery_format": "delivery_format", + "description": "description", + "next_recurrence": "next_recurrence", + "recipients": "recipients", + "resource_id": "resource_id", + "resource_type": "resource_type", + "rrule": "rrule", + "status": "status", + "tab_id": "tab_id", + "template_variables": "template_variables", + "timeframe": "timeframe", + "timezone": "timezone", + "title": "title", + } + + def __init__(self_, description: str, next_recurrence: Union[int, none_type], recipients: List[str], resource_id: str, resource_type: ReportScheduleResourceType, rrule: str, status: ReportScheduleStatus, tab_id: Union[str, none_type], template_variables: List[ReportScheduleTemplateVariable], timeframe: Union[str, none_type], timezone: str, title: str, delivery_format: Union[ReportScheduleResponseAttributesDeliveryFormat, none_type, UnsetType]=unset, **kwargs): + """ + The configuration and derived state of a report schedule. + + :param delivery_format: The delivery format for dashboard report schedules, or ``null`` if not set. + :type delivery_format: ReportScheduleResponseAttributesDeliveryFormat, none_type, optional + + :param description: The description of the report. + :type description: str + + :param next_recurrence: The Unix timestamp, in milliseconds, of the next scheduled delivery, or ``null`` if none is scheduled. + :type next_recurrence: int, none_type + + :param recipients: The recipients of the report (email addresses, Slack channel references, or Microsoft Teams channel references). + :type recipients: [str] + + :param resource_id: The identifier of the resource rendered in the report. + :type resource_id: str + + :param resource_type: The type of dashboard resource the report schedule targets. + :type resource_type: ReportScheduleResourceType + + :param rrule: The recurrence rule for the schedule, expressed as an iCalendar ``RRULE`` string. + :type rrule: str + + :param status: Whether the schedule is currently delivering reports ( ``active`` ) or paused ( ``inactive`` ). + :type status: ReportScheduleStatus + + :param tab_id: The identifier of the dashboard tab rendered in the report, or ``null`` if not set. + :type tab_id: str, none_type + + :param template_variables: The dashboard template variables applied when rendering the report. + :type template_variables: [ReportScheduleTemplateVariable] + + :param timeframe: The relative timeframe of data included in the report, or ``null`` if not set. + :type timeframe: str, none_type + + :param timezone: The IANA time zone identifier the recurrence rule is evaluated in. + :type timezone: str + + :param title: The title of the report. + :type title: str + """ + if delivery_format is not unset: + kwargs["delivery_format"] = delivery_format + super().__init__(kwargs) + + + self_.description = description + self_.next_recurrence = next_recurrence + self_.recipients = recipients + self_.resource_id = resource_id + self_.resource_type = resource_type + self_.rrule = rrule + self_.status = status + self_.tab_id = tab_id + self_.template_variables = template_variables + self_.timeframe = timeframe + self_.timezone = timezone + self_.title = title diff --git a/datadog_api_client/v2/model/report_schedule_response_attributes_delivery_format.py b/datadog_api_client/v2/model/report_schedule_response_attributes_delivery_format.py new file mode 100644 index 0000000000..793f88b86c --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_response_attributes_delivery_format.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReportScheduleResponseAttributesDeliveryFormat(ModelSimple): + """ + The delivery format for dashboard report schedules, or `null` if not set. + + :param value: Must be one of ["pdf", "png", "pdf_and_png"]. + :type value: str + """ + + allowed_values = { + "pdf", + "png", + "pdf_and_png", + } + PDF: ClassVar["ReportScheduleResponseAttributesDeliveryFormat"] + PNG: ClassVar["ReportScheduleResponseAttributesDeliveryFormat"] + PDF_AND_PNG: ClassVar["ReportScheduleResponseAttributesDeliveryFormat"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReportScheduleResponseAttributesDeliveryFormat.PDF = ReportScheduleResponseAttributesDeliveryFormat("pdf") +ReportScheduleResponseAttributesDeliveryFormat.PNG = ReportScheduleResponseAttributesDeliveryFormat("png") +ReportScheduleResponseAttributesDeliveryFormat.PDF_AND_PNG = ReportScheduleResponseAttributesDeliveryFormat("pdf_and_png") diff --git a/datadog_api_client/v2/model/report_schedule_response_data.py b/datadog_api_client/v2/model/report_schedule_response_data.py new file mode 100644 index 0000000000..6b2424d05f --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_response_data.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_response_attributes import ReportScheduleResponseAttributes + from datadog_api_client.v2.model.report_schedule_response_relationships import ReportScheduleResponseRelationships + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + +class ReportScheduleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_response_attributes import ReportScheduleResponseAttributes + from datadog_api_client.v2.model.report_schedule_response_relationships import ReportScheduleResponseRelationships + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + return { + "attributes": (ReportScheduleResponseAttributes,), + "id": (str,), + "relationships": (ReportScheduleResponseRelationships,), + "type": (ReportScheduleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ReportScheduleResponseAttributes, id: str, relationships: ReportScheduleResponseRelationships, type: ReportScheduleType, **kwargs): + """ + The JSON:API data object representing a report schedule. + + :param attributes: The configuration and derived state of a report schedule. + :type attributes: ReportScheduleResponseAttributes + + :param id: The unique identifier of the report schedule. + :type id: str + + :param relationships: Relationships for the report schedule. + :type relationships: ReportScheduleResponseRelationships + + :param type: JSON:API resource type for report schedules. + :type type: ReportScheduleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/report_schedule_response_relationships.py b/datadog_api_client/v2/model/report_schedule_response_relationships.py new file mode 100644 index 0000000000..b2912e3ca4 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_response_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_author_relationship import ReportScheduleAuthorRelationship + +class ReportScheduleResponseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_author_relationship import ReportScheduleAuthorRelationship + return { + "author": (ReportScheduleAuthorRelationship,), + } + attribute_map = { + "author": "author", + } + + def __init__(self_, author: ReportScheduleAuthorRelationship, **kwargs): + """ + Relationships for the report schedule. + + :param author: Relationship to the author of the report schedule. + :type author: ReportScheduleAuthorRelationship + """ + super().__init__(kwargs) + + + self_.author = author diff --git a/datadog_api_client/v2/model/report_schedule_status.py b/datadog_api_client/v2/model/report_schedule_status.py new file mode 100644 index 0000000000..01c28436fc --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReportScheduleStatus(ModelSimple): + """ + Whether the schedule is currently delivering reports (`active`) or paused (`inactive`). + + :param value: Must be one of ["active", "inactive"]. + :type value: str + """ + + allowed_values = { + "active", + "inactive", + } + ACTIVE: ClassVar["ReportScheduleStatus"] + INACTIVE: ClassVar["ReportScheduleStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReportScheduleStatus.ACTIVE = ReportScheduleStatus("active") +ReportScheduleStatus.INACTIVE = ReportScheduleStatus("inactive") diff --git a/datadog_api_client/v2/model/report_schedule_template_variable.py b/datadog_api_client/v2/model/report_schedule_template_variable.py new file mode 100644 index 0000000000..7bb5d9e1c4 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_template_variable.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ReportScheduleTemplateVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "values": ([str],), + } + attribute_map = { + "name": "name", + "values": "values", + } + + def __init__(self_, name: str, values: List[str], **kwargs): + """ + A dashboard template variable applied when rendering the report. + + :param name: The name of the template variable. + :type name: str + + :param values: The selected values for the template variable. + :type values: [str] + """ + super().__init__(kwargs) + + + self_.name = name + self_.values = values diff --git a/datadog_api_client/v2/model/report_schedule_toggle_request.py b/datadog_api_client/v2/model/report_schedule_toggle_request.py new file mode 100644 index 0000000000..2a253e9496 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_toggle_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_toggle_request_data import ReportScheduleToggleRequestData + +class ReportScheduleToggleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_toggle_request_data import ReportScheduleToggleRequestData + return { + "data": (ReportScheduleToggleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ReportScheduleToggleRequestData, **kwargs): + """ + Request body for toggling a report schedule. + + :param data: The JSON:API data object for a report schedule toggle request. + :type data: ReportScheduleToggleRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/report_schedule_toggle_request_attributes.py b/datadog_api_client/v2/model/report_schedule_toggle_request_attributes.py new file mode 100644 index 0000000000..adefef0564 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_toggle_request_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_status import ReportScheduleStatus + +class ReportScheduleToggleRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_status import ReportScheduleStatus + return { + "status": (ReportScheduleStatus,), + } + attribute_map = { + "status": "status", + } + + def __init__(self_, status: ReportScheduleStatus, **kwargs): + """ + The status to set on the report schedule. + + :param status: Whether the schedule is currently delivering reports ( ``active`` ) or paused ( ``inactive`` ). + :type status: ReportScheduleStatus + """ + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/report_schedule_toggle_request_data.py b/datadog_api_client/v2/model/report_schedule_toggle_request_data.py new file mode 100644 index 0000000000..72ac931f50 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_toggle_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.report_schedule_toggle_request_attributes import ReportScheduleToggleRequestAttributes + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + +class ReportScheduleToggleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.report_schedule_toggle_request_attributes import ReportScheduleToggleRequestAttributes + from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType + return { + "attributes": (ReportScheduleToggleRequestAttributes,), + "type": (ReportScheduleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ReportScheduleToggleRequestAttributes, type: ReportScheduleType, **kwargs): + """ + The JSON:API data object for a report schedule toggle request. + + :param attributes: The status to set on the report schedule. + :type attributes: ReportScheduleToggleRequestAttributes + + :param type: JSON:API resource type for report schedules. + :type type: ReportScheduleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/report_schedule_type.py b/datadog_api_client/v2/model/report_schedule_type.py new file mode 100644 index 0000000000..5e5cc1d251 --- /dev/null +++ b/datadog_api_client/v2/model/report_schedule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ReportScheduleType(ModelSimple): + """ + JSON:API resource type for report schedules. + + :param value: If omitted defaults to "schedule". Must be one of ["schedule"]. + :type value: str + """ + + allowed_values = { + "schedule", + } + SCHEDULE: ClassVar["ReportScheduleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ReportScheduleType.SCHEDULE = ReportScheduleType("schedule") diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_request.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_request.py new file mode 100644 index 0000000000..62cc23bef4 --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resolve_vulnerable_symbols_request_data import ResolveVulnerableSymbolsRequestData + +class ResolveVulnerableSymbolsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resolve_vulnerable_symbols_request_data import ResolveVulnerableSymbolsRequestData + return { + "data": (ResolveVulnerableSymbolsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ResolveVulnerableSymbolsRequestData, UnsetType]=unset, **kwargs): + """ + The top-level request object for resolving vulnerable symbols in a set of packages. + + :param data: The data object in a request to resolve vulnerable symbols, containing the package PURLs and request type. + :type data: ResolveVulnerableSymbolsRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_request_data.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_request_data.py new file mode 100644 index 0000000000..56d18f2fb1 --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resolve_vulnerable_symbols_request_data_attributes import ResolveVulnerableSymbolsRequestDataAttributes + from datadog_api_client.v2.model.resolve_vulnerable_symbols_request_data_type import ResolveVulnerableSymbolsRequestDataType + +class ResolveVulnerableSymbolsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resolve_vulnerable_symbols_request_data_attributes import ResolveVulnerableSymbolsRequestDataAttributes + from datadog_api_client.v2.model.resolve_vulnerable_symbols_request_data_type import ResolveVulnerableSymbolsRequestDataType + return { + "attributes": (ResolveVulnerableSymbolsRequestDataAttributes,), + "id": (str,), + "type": (ResolveVulnerableSymbolsRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ResolveVulnerableSymbolsRequestDataType, attributes: Union[ResolveVulnerableSymbolsRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object in a request to resolve vulnerable symbols, containing the package PURLs and request type. + + :param attributes: The attributes of a request to resolve vulnerable symbols, containing the list of package PURLs to check. + :type attributes: ResolveVulnerableSymbolsRequestDataAttributes, optional + + :param id: An optional identifier for this request data object. + :type id: str, optional + + :param type: The type identifier for requests to resolve vulnerable symbols. + :type type: ResolveVulnerableSymbolsRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_request_data_attributes.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_request_data_attributes.py new file mode 100644 index 0000000000..b9f822c57b --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ResolveVulnerableSymbolsRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "purls": ([str],), + } + attribute_map = { + "purls": "purls", + } + + def __init__(self_, purls: Union[List[str], UnsetType]=unset, **kwargs): + """ + The attributes of a request to resolve vulnerable symbols, containing the list of package PURLs to check. + + :param purls: The list of Package URLs (PURLs) for which to resolve vulnerable symbols. + :type purls: [str], optional + """ + if purls is not unset: + kwargs["purls"] = purls + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_request_data_type.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_request_data_type.py new file mode 100644 index 0000000000..b910870151 --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ResolveVulnerableSymbolsRequestDataType(ModelSimple): + """ + The type identifier for requests to resolve vulnerable symbols. + + :param value: If omitted defaults to "resolve-vulnerable-symbols-request". Must be one of ["resolve-vulnerable-symbols-request"]. + :type value: str + """ + + allowed_values = { + "resolve-vulnerable-symbols-request", + } + RESOLVE_VULNERABLE_SYMBOLS_REQUEST: ClassVar["ResolveVulnerableSymbolsRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ResolveVulnerableSymbolsRequestDataType.RESOLVE_VULNERABLE_SYMBOLS_REQUEST = ResolveVulnerableSymbolsRequestDataType("resolve-vulnerable-symbols-request") diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_response.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response.py new file mode 100644 index 0000000000..fc1b4db011 --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_data import ResolveVulnerableSymbolsResponseData + +class ResolveVulnerableSymbolsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_data import ResolveVulnerableSymbolsResponseData + return { + "data": (ResolveVulnerableSymbolsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ResolveVulnerableSymbolsResponseData, UnsetType]=unset, **kwargs): + """ + The top-level response object returned when resolving vulnerable symbols for a set of packages. + + :param data: The data object in a response for resolving vulnerable symbols, containing the result attributes and response type. + :type data: ResolveVulnerableSymbolsResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_data.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_data.py new file mode 100644 index 0000000000..0ba7d6ae9c --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_data_attributes import ResolveVulnerableSymbolsResponseDataAttributes + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_data_type import ResolveVulnerableSymbolsResponseDataType + +class ResolveVulnerableSymbolsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_data_attributes import ResolveVulnerableSymbolsResponseDataAttributes + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_data_type import ResolveVulnerableSymbolsResponseDataType + return { + "attributes": (ResolveVulnerableSymbolsResponseDataAttributes,), + "id": (str,), + "type": (ResolveVulnerableSymbolsResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ResolveVulnerableSymbolsResponseDataType, attributes: Union[ResolveVulnerableSymbolsResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object in a response for resolving vulnerable symbols, containing the result attributes and response type. + + :param attributes: The attributes of a response containing resolved vulnerable symbols, organized by package. + :type attributes: ResolveVulnerableSymbolsResponseDataAttributes, optional + + :param id: The unique identifier for this response data object. + :type id: str, optional + + :param type: The type identifier for responses containing resolved vulnerable symbols. + :type type: ResolveVulnerableSymbolsResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_data_attributes.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_data_attributes.py new file mode 100644 index 0000000000..e10b2eb196 --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_results import ResolveVulnerableSymbolsResponseResults + +class ResolveVulnerableSymbolsResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_results import ResolveVulnerableSymbolsResponseResults + return { + "results": ([ResolveVulnerableSymbolsResponseResults],), + } + attribute_map = { + "results": "results", + } + + def __init__(self_, results: Union[List[ResolveVulnerableSymbolsResponseResults], UnsetType]=unset, **kwargs): + """ + The attributes of a response containing resolved vulnerable symbols, organized by package. + + :param results: The list of resolved vulnerable symbol results, one entry per queried package. + :type results: [ResolveVulnerableSymbolsResponseResults], optional + """ + if results is not unset: + kwargs["results"] = results + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_data_type.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_data_type.py new file mode 100644 index 0000000000..e3ceb3e88e --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ResolveVulnerableSymbolsResponseDataType(ModelSimple): + """ + The type identifier for responses containing resolved vulnerable symbols. + + :param value: If omitted defaults to "resolve-vulnerable-symbols-response". Must be one of ["resolve-vulnerable-symbols-response"]. + :type value: str + """ + + allowed_values = { + "resolve-vulnerable-symbols-response", + } + RESOLVE_VULNERABLE_SYMBOLS_RESPONSE: ClassVar["ResolveVulnerableSymbolsResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ResolveVulnerableSymbolsResponseDataType.RESOLVE_VULNERABLE_SYMBOLS_RESPONSE = ResolveVulnerableSymbolsResponseDataType("resolve-vulnerable-symbols-response") diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_results.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_results.py new file mode 100644 index 0000000000..e13f05374b --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_results.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_results_vulnerable_symbols import ResolveVulnerableSymbolsResponseResultsVulnerableSymbols + +class ResolveVulnerableSymbolsResponseResults(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_results_vulnerable_symbols import ResolveVulnerableSymbolsResponseResultsVulnerableSymbols + return { + "purl": (str,), + "vulnerable_symbols": ([ResolveVulnerableSymbolsResponseResultsVulnerableSymbols],), + } + attribute_map = { + "purl": "purl", + "vulnerable_symbols": "vulnerable_symbols", + } + + def __init__(self_, purl: Union[str, UnsetType]=unset, vulnerable_symbols: Union[List[ResolveVulnerableSymbolsResponseResultsVulnerableSymbols], UnsetType]=unset, **kwargs): + """ + The result of resolving vulnerable symbols for a specific package, identified by its PURL. + + :param purl: The Package URL (PURL) uniquely identifying the package for which vulnerable symbols are resolved. + :type purl: str, optional + + :param vulnerable_symbols: The list of vulnerable symbol groups found in this package, organized by advisory. + :type vulnerable_symbols: [ResolveVulnerableSymbolsResponseResultsVulnerableSymbols], optional + """ + if purl is not unset: + kwargs["purl"] = purl + if vulnerable_symbols is not unset: + kwargs["vulnerable_symbols"] = vulnerable_symbols + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_results_vulnerable_symbols.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_results_vulnerable_symbols.py new file mode 100644 index 0000000000..407d8611ed --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_results_vulnerable_symbols.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_results_vulnerable_symbols_symbols import ResolveVulnerableSymbolsResponseResultsVulnerableSymbolsSymbols + +class ResolveVulnerableSymbolsResponseResultsVulnerableSymbols(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_results_vulnerable_symbols_symbols import ResolveVulnerableSymbolsResponseResultsVulnerableSymbolsSymbols + return { + "advisory_id": (str,), + "symbols": ([ResolveVulnerableSymbolsResponseResultsVulnerableSymbolsSymbols],), + } + attribute_map = { + "advisory_id": "advisory_id", + "symbols": "symbols", + } + + def __init__(self_, advisory_id: Union[str, UnsetType]=unset, symbols: Union[List[ResolveVulnerableSymbolsResponseResultsVulnerableSymbolsSymbols], UnsetType]=unset, **kwargs): + """ + A collection of vulnerable symbols associated with a specific security advisory. + + :param advisory_id: The identifier of the security advisory that describes the vulnerability. + :type advisory_id: str, optional + + :param symbols: The list of symbols that are vulnerable according to this advisory. + :type symbols: [ResolveVulnerableSymbolsResponseResultsVulnerableSymbolsSymbols], optional + """ + if advisory_id is not unset: + kwargs["advisory_id"] = advisory_id + if symbols is not unset: + kwargs["symbols"] = symbols + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_results_vulnerable_symbols_symbols.py b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_results_vulnerable_symbols_symbols.py new file mode 100644 index 0000000000..7e4c0dbd27 --- /dev/null +++ b/datadog_api_client/v2/model/resolve_vulnerable_symbols_response_results_vulnerable_symbols_symbols.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ResolveVulnerableSymbolsResponseResultsVulnerableSymbolsSymbols(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "type": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "type": "type", + "value": "value", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + A symbol identified as vulnerable within a dependency, including its name, type, and value. + + :param name: The name of the vulnerable symbol. + :type name: str, optional + + :param type: The type classification of the vulnerable symbol (e.g., function, class, variable). + :type type: str, optional + + :param value: The value or identifier associated with the vulnerable symbol. + :type value: str, optional + """ + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/resource_filter_attributes.py b/datadog_api_client/v2/model/resource_filter_attributes.py new file mode 100644 index 0000000000..ac7e6beeb7 --- /dev/null +++ b/datadog_api_client/v2/model/resource_filter_attributes.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ResourceFilterAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cloud_provider": ({str: ({str: ([str],)},)},), + "uuid": (str,), + } + attribute_map = { + "cloud_provider": "cloud_provider", + "uuid": "uuid", + } + + def __init__(self_, cloud_provider: Dict[str, Dict[str, List[str]]], uuid: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a resource filter. + + :param cloud_provider: A map of cloud provider names (e.g., "aws", "gcp", "azure") to a map of account/resource IDs and their associated tag filters. + :type cloud_provider: {str: ({str: ([str],)},)} + + :param uuid: The UUID of the resource filter. + :type uuid: str, optional + """ + if uuid is not unset: + kwargs["uuid"] = uuid + super().__init__(kwargs) + + + self_.cloud_provider = cloud_provider diff --git a/datadog_api_client/v2/model/resource_filter_request_type.py b/datadog_api_client/v2/model/resource_filter_request_type.py new file mode 100644 index 0000000000..1c942628f5 --- /dev/null +++ b/datadog_api_client/v2/model/resource_filter_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ResourceFilterRequestType(ModelSimple): + """ + Constant string to identify the request type. + + :param value: If omitted defaults to "csm_resource_filter". Must be one of ["csm_resource_filter"]. + :type value: str + """ + + allowed_values = { + "csm_resource_filter", + } + CSM_RESOURCE_FILTER: ClassVar["ResourceFilterRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ResourceFilterRequestType.CSM_RESOURCE_FILTER = ResourceFilterRequestType("csm_resource_filter") diff --git a/datadog_api_client/v2/model/response_meta_attributes.py b/datadog_api_client/v2/model/response_meta_attributes.py new file mode 100644 index 0000000000..c81b46603e --- /dev/null +++ b/datadog_api_client/v2/model/response_meta_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.pagination import Pagination + +class ResponseMetaAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.pagination import Pagination + return { + "page": (Pagination,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[Pagination, UnsetType]=unset, **kwargs): + """ + Object describing meta attributes of response. + + :param page: Pagination object. + :type page: Pagination, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_policy.py b/datadog_api_client/v2/model/restriction_policy.py new file mode 100644 index 0000000000..cdf0ed003b --- /dev/null +++ b/datadog_api_client/v2/model/restriction_policy.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_policy_attributes import RestrictionPolicyAttributes + from datadog_api_client.v2.model.restriction_policy_type import RestrictionPolicyType + +class RestrictionPolicy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_policy_attributes import RestrictionPolicyAttributes + from datadog_api_client.v2.model.restriction_policy_type import RestrictionPolicyType + return { + "attributes": (RestrictionPolicyAttributes,), + "id": (str,), + "type": (RestrictionPolicyType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RestrictionPolicyAttributes, id: str, type: RestrictionPolicyType, **kwargs): + """ + Restriction policy object. + + :param attributes: Restriction policy attributes. + :type attributes: RestrictionPolicyAttributes + + :param id: The identifier, always equivalent to the value specified in the ``resource_id`` path parameter. + :type id: str + + :param type: Restriction policy type. + :type type: RestrictionPolicyType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/restriction_policy_attributes.py b/datadog_api_client/v2/model/restriction_policy_attributes.py new file mode 100644 index 0000000000..ab64412de8 --- /dev/null +++ b/datadog_api_client/v2/model/restriction_policy_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_policy_binding import RestrictionPolicyBinding + +class RestrictionPolicyAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_policy_binding import RestrictionPolicyBinding + return { + "bindings": ([RestrictionPolicyBinding],), + } + attribute_map = { + "bindings": "bindings", + } + + def __init__(self_, bindings: List[RestrictionPolicyBinding], **kwargs): + """ + Restriction policy attributes. + + :param bindings: An array of bindings. + :type bindings: [RestrictionPolicyBinding] + """ + super().__init__(kwargs) + + + self_.bindings = bindings diff --git a/datadog_api_client/v2/model/restriction_policy_binding.py b/datadog_api_client/v2/model/restriction_policy_binding.py new file mode 100644 index 0000000000..4e53d1056b --- /dev/null +++ b/datadog_api_client/v2/model/restriction_policy_binding.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RestrictionPolicyBinding(ModelNormal): + @cached_property + def openapi_types(_): + return { + "principals": ([str],), + "relation": (str,), + } + attribute_map = { + "principals": "principals", + "relation": "relation", + } + + def __init__(self_, principals: List[str], relation: str, **kwargs): + """ + Specifies which principals are associated with a relation. + + :param principals: An array of principals. A principal is a subject or group of subjects. + Each principal is formatted as ``type:id``. Supported types: ``role`` , ``team`` , ``user`` , and ``org``. + The org ID can be obtained through the api/v2/current_user API. + The user principal type accepts service account IDs. + :type principals: [str] + + :param relation: The role/level of access. + :type relation: str + """ + super().__init__(kwargs) + + + self_.principals = principals + self_.relation = relation diff --git a/datadog_api_client/v2/model/restriction_policy_response.py b/datadog_api_client/v2/model/restriction_policy_response.py new file mode 100644 index 0000000000..0aba75c96b --- /dev/null +++ b/datadog_api_client/v2/model/restriction_policy_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_policy import RestrictionPolicy + +class RestrictionPolicyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_policy import RestrictionPolicy + return { + "data": (RestrictionPolicy,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RestrictionPolicy, **kwargs): + """ + Response containing information about a single restriction policy. + + :param data: Restriction policy object. + :type data: RestrictionPolicy + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/restriction_policy_type.py b/datadog_api_client/v2/model/restriction_policy_type.py new file mode 100644 index 0000000000..4159ba861f --- /dev/null +++ b/datadog_api_client/v2/model/restriction_policy_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RestrictionPolicyType(ModelSimple): + """ + Restriction policy type. + + :param value: If omitted defaults to "restriction_policy". Must be one of ["restriction_policy"]. + :type value: str + """ + + allowed_values = { + "restriction_policy", + } + RESTRICTION_POLICY: ClassVar["RestrictionPolicyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RestrictionPolicyType.RESTRICTION_POLICY = RestrictionPolicyType("restriction_policy") diff --git a/datadog_api_client/v2/model/restriction_policy_update_request.py b/datadog_api_client/v2/model/restriction_policy_update_request.py new file mode 100644 index 0000000000..492a6be5e5 --- /dev/null +++ b/datadog_api_client/v2/model/restriction_policy_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_policy import RestrictionPolicy + +class RestrictionPolicyUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_policy import RestrictionPolicy + return { + "data": (RestrictionPolicy,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RestrictionPolicy, **kwargs): + """ + Update request for a restriction policy. + + :param data: Restriction policy object. + :type data: RestrictionPolicy + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/restriction_query_attributes.py b/datadog_api_client/v2/model/restriction_query_attributes.py new file mode 100644 index 0000000000..3302d0669d --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RestrictionQueryAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "last_modifier_email": (str,), + "last_modifier_name": (str,), + "modified_at": (datetime,), + "restriction_query": (str,), + "role_count": (int,), + "user_count": (int,), + } + attribute_map = { + "created_at": "created_at", + "last_modifier_email": "last_modifier_email", + "last_modifier_name": "last_modifier_name", + "modified_at": "modified_at", + "restriction_query": "restriction_query", + "role_count": "role_count", + "user_count": "user_count", + } + read_only_vars = { + "created_at", + "last_modifier_email", + "last_modifier_name", + "modified_at", + "role_count", + "user_count", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, last_modifier_email: Union[str, UnsetType]=unset, last_modifier_name: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, restriction_query: Union[str, UnsetType]=unset, role_count: Union[int, UnsetType]=unset, user_count: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of the restriction query. + + :param created_at: Creation time of the restriction query. + :type created_at: datetime, optional + + :param last_modifier_email: Email of the user who last modified this restriction query. + :type last_modifier_email: str, optional + + :param last_modifier_name: Name of the user who last modified this restriction query. + :type last_modifier_name: str, optional + + :param modified_at: Time of last restriction query modification. + :type modified_at: datetime, optional + + :param restriction_query: The query that defines the restriction. Only the content matching the query can be returned. + :type restriction_query: str, optional + + :param role_count: Number of roles associated with this restriction query. + :type role_count: int, optional + + :param user_count: Number of users associated with this restriction query. + :type user_count: int, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if last_modifier_email is not unset: + kwargs["last_modifier_email"] = last_modifier_email + if last_modifier_name is not unset: + kwargs["last_modifier_name"] = last_modifier_name + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if restriction_query is not unset: + kwargs["restriction_query"] = restriction_query + if role_count is not unset: + kwargs["role_count"] = role_count + if user_count is not unset: + kwargs["user_count"] = user_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_create_attributes.py b/datadog_api_client/v2/model/restriction_query_create_attributes.py new file mode 100644 index 0000000000..cb2a0891a0 --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_create_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RestrictionQueryCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "restriction_query": (str,), + } + attribute_map = { + "restriction_query": "restriction_query", + } + + def __init__(self_, restriction_query: str, **kwargs): + """ + Attributes of the created restriction query. + + :param restriction_query: The restriction query. + :type restriction_query: str + """ + super().__init__(kwargs) + + + self_.restriction_query = restriction_query diff --git a/datadog_api_client/v2/model/restriction_query_create_data.py b/datadog_api_client/v2/model/restriction_query_create_data.py new file mode 100644 index 0000000000..3d57c0daac --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_create_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_create_attributes import RestrictionQueryCreateAttributes + from datadog_api_client.v2.model.logs_restriction_queries_type import LogsRestrictionQueriesType + +class RestrictionQueryCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_create_attributes import RestrictionQueryCreateAttributes + from datadog_api_client.v2.model.logs_restriction_queries_type import LogsRestrictionQueriesType + return { + "attributes": (RestrictionQueryCreateAttributes,), + "type": (LogsRestrictionQueriesType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[RestrictionQueryCreateAttributes, UnsetType]=unset, type: Union[LogsRestrictionQueriesType, UnsetType]=unset, **kwargs): + """ + Data related to the creation of a restriction query. + + :param attributes: Attributes of the created restriction query. + :type attributes: RestrictionQueryCreateAttributes, optional + + :param type: Restriction query resource type. + :type type: LogsRestrictionQueriesType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_create_payload.py b/datadog_api_client/v2/model/restriction_query_create_payload.py new file mode 100644 index 0000000000..98bc7820dd --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_create_payload.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_create_data import RestrictionQueryCreateData + +class RestrictionQueryCreatePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_create_data import RestrictionQueryCreateData + return { + "data": (RestrictionQueryCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RestrictionQueryCreateData, UnsetType]=unset, **kwargs): + """ + Create a restriction query. + + :param data: Data related to the creation of a restriction query. + :type data: RestrictionQueryCreateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_list_response.py b/datadog_api_client/v2/model/restriction_query_list_response.py new file mode 100644 index 0000000000..ca6edec17d --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_without_relationships import RestrictionQueryWithoutRelationships + +class RestrictionQueryListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_without_relationships import RestrictionQueryWithoutRelationships + return { + "data": ([RestrictionQueryWithoutRelationships],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RestrictionQueryWithoutRelationships], UnsetType]=unset, **kwargs): + """ + Response containing information about multiple restriction queries. + + :param data: Array of returned restriction queries. + :type data: [RestrictionQueryWithoutRelationships], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_response_included_item.py b/datadog_api_client/v2/model/restriction_query_response_included_item.py new file mode 100644 index 0000000000..0f8d264763 --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_response_included_item.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RestrictionQueryResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to a restriction query. + + :param attributes: Attributes of the role for a restriction query. + :type attributes: RestrictionQueryRoleAttribute + + :param id: ID of the role. + :type id: str + + :param type: Roles type. + :type type: RolesType + """ + 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.restriction_query_role import RestrictionQueryRole + return { + "oneOf": [ + RestrictionQueryRole, + ], + } diff --git a/datadog_api_client/v2/model/restriction_query_role.py b/datadog_api_client/v2/model/restriction_query_role.py new file mode 100644 index 0000000000..1836cd2bfe --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_role.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_role_attribute import RestrictionQueryRoleAttribute + from datadog_api_client.v2.model.roles_type import RolesType + +class RestrictionQueryRole(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_role_attribute import RestrictionQueryRoleAttribute + from datadog_api_client.v2.model.roles_type import RolesType + return { + "attributes": (RestrictionQueryRoleAttribute,), + "id": (str,), + "type": (RolesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RestrictionQueryRoleAttribute, id: str, type: RolesType, **kwargs): + """ + Partial role object. + + :param attributes: Attributes of the role for a restriction query. + :type attributes: RestrictionQueryRoleAttribute + + :param id: ID of the role. + :type id: str + + :param type: Roles type. + :type type: RolesType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/restriction_query_role_attribute.py b/datadog_api_client/v2/model/restriction_query_role_attribute.py new file mode 100644 index 0000000000..816082cb2a --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_role_attribute.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RestrictionQueryRoleAttribute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the role for a restriction query. + + :param name: The role name. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_roles_response.py b/datadog_api_client/v2/model/restriction_query_roles_response.py new file mode 100644 index 0000000000..019c781a29 --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_roles_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_role import RestrictionQueryRole + +class RestrictionQueryRolesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_role import RestrictionQueryRole + return { + "data": ([RestrictionQueryRole],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RestrictionQueryRole], UnsetType]=unset, **kwargs): + """ + Response containing information about roles attached to a restriction query. + + :param data: Array of roles. + :type data: [RestrictionQueryRole], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_update_attributes.py b/datadog_api_client/v2/model/restriction_query_update_attributes.py new file mode 100644 index 0000000000..c3db44e257 --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_update_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RestrictionQueryUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "restriction_query": (str,), + } + attribute_map = { + "restriction_query": "restriction_query", + } + + def __init__(self_, restriction_query: str, **kwargs): + """ + Attributes of the edited restriction query. + + :param restriction_query: The restriction query. + :type restriction_query: str + """ + super().__init__(kwargs) + + + self_.restriction_query = restriction_query diff --git a/datadog_api_client/v2/model/restriction_query_update_data.py b/datadog_api_client/v2/model/restriction_query_update_data.py new file mode 100644 index 0000000000..3c0f1721ca --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_update_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_update_attributes import RestrictionQueryUpdateAttributes + from datadog_api_client.v2.model.logs_restriction_queries_type import LogsRestrictionQueriesType + +class RestrictionQueryUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_update_attributes import RestrictionQueryUpdateAttributes + from datadog_api_client.v2.model.logs_restriction_queries_type import LogsRestrictionQueriesType + return { + "attributes": (RestrictionQueryUpdateAttributes,), + "type": (LogsRestrictionQueriesType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[RestrictionQueryUpdateAttributes, UnsetType]=unset, type: Union[LogsRestrictionQueriesType, UnsetType]=unset, **kwargs): + """ + Data related to the update of a restriction query. + + :param attributes: Attributes of the edited restriction query. + :type attributes: RestrictionQueryUpdateAttributes, optional + + :param type: Restriction query resource type. + :type type: LogsRestrictionQueriesType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_update_payload.py b/datadog_api_client/v2/model/restriction_query_update_payload.py new file mode 100644 index 0000000000..62f19a1135 --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_update_payload.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_update_data import RestrictionQueryUpdateData + +class RestrictionQueryUpdatePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_update_data import RestrictionQueryUpdateData + return { + "data": (RestrictionQueryUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RestrictionQueryUpdateData, UnsetType]=unset, **kwargs): + """ + Update a restriction query. + + :param data: Data related to the update of a restriction query. + :type data: RestrictionQueryUpdateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_with_relationships.py b/datadog_api_client/v2/model/restriction_query_with_relationships.py new file mode 100644 index 0000000000..0ccd054dab --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_with_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_attributes import RestrictionQueryAttributes + from datadog_api_client.v2.model.user_relationships import UserRelationships + from datadog_api_client.v2.model.logs_restriction_queries_type import LogsRestrictionQueriesType + +class RestrictionQueryWithRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_attributes import RestrictionQueryAttributes + from datadog_api_client.v2.model.user_relationships import UserRelationships + from datadog_api_client.v2.model.logs_restriction_queries_type import LogsRestrictionQueriesType + return { + "attributes": (RestrictionQueryAttributes,), + "id": (str,), + "relationships": (UserRelationships,), + "type": (LogsRestrictionQueriesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[RestrictionQueryAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[UserRelationships, UnsetType]=unset, type: Union[LogsRestrictionQueriesType, UnsetType]=unset, **kwargs): + """ + Restriction query object returned by the API. + + :param attributes: Attributes of the restriction query. + :type attributes: RestrictionQueryAttributes, optional + + :param id: ID of the restriction query. + :type id: str, optional + + :param relationships: Relationships of the user object. + :type relationships: UserRelationships, optional + + :param type: Restriction query resource type. + :type type: LogsRestrictionQueriesType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_with_relationships_response.py b/datadog_api_client/v2/model/restriction_query_with_relationships_response.py new file mode 100644 index 0000000000..92bac7d672 --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_with_relationships_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_with_relationships import RestrictionQueryWithRelationships + from datadog_api_client.v2.model.restriction_query_response_included_item import RestrictionQueryResponseIncludedItem + from datadog_api_client.v2.model.restriction_query_role import RestrictionQueryRole + +class RestrictionQueryWithRelationshipsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_with_relationships import RestrictionQueryWithRelationships + from datadog_api_client.v2.model.restriction_query_response_included_item import RestrictionQueryResponseIncludedItem + return { + "data": (RestrictionQueryWithRelationships,), + "included": ([RestrictionQueryResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[RestrictionQueryWithRelationships, UnsetType]=unset, included: Union[List[Union[RestrictionQueryResponseIncludedItem, RestrictionQueryRole]], UnsetType]=unset, **kwargs): + """ + Response containing information about a single restriction query. + + :param data: Restriction query object returned by the API. + :type data: RestrictionQueryWithRelationships, optional + + :param included: Array of objects related to the restriction query. + :type included: [RestrictionQueryResponseIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_without_relationships.py b/datadog_api_client/v2/model/restriction_query_without_relationships.py new file mode 100644 index 0000000000..035f2fd3d1 --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_without_relationships.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_attributes import RestrictionQueryAttributes + +class RestrictionQueryWithoutRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_attributes import RestrictionQueryAttributes + return { + "attributes": (RestrictionQueryAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "type", + } + + def __init__(self_, attributes: Union[RestrictionQueryAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Restriction query object returned by the API. + + :param attributes: Attributes of the restriction query. + :type attributes: RestrictionQueryAttributes, optional + + :param id: ID of the restriction query. + :type id: str, optional + + :param type: Restriction queries type. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/restriction_query_without_relationships_response.py b/datadog_api_client/v2/model/restriction_query_without_relationships_response.py new file mode 100644 index 0000000000..6fa5709b9d --- /dev/null +++ b/datadog_api_client/v2/model/restriction_query_without_relationships_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.restriction_query_without_relationships import RestrictionQueryWithoutRelationships + +class RestrictionQueryWithoutRelationshipsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.restriction_query_without_relationships import RestrictionQueryWithoutRelationships + return { + "data": (RestrictionQueryWithoutRelationships,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RestrictionQueryWithoutRelationships, UnsetType]=unset, **kwargs): + """ + Response containing information about a single restriction query. + + :param data: Restriction query object returned by the API. + :type data: RestrictionQueryWithoutRelationships, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/retention_filter.py b/datadog_api_client/v2/model/retention_filter.py new file mode 100644 index 0000000000..52230ea6ad --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter_attributes import RetentionFilterAttributes + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + +class RetentionFilter(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter_attributes import RetentionFilterAttributes + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + return { + "attributes": (RetentionFilterAttributes,), + "id": (str,), + "type": (ApmRetentionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RetentionFilterAttributes, id: str, type: ApmRetentionFilterType, **kwargs): + """ + The definition of the retention filter. + + :param attributes: The attributes of the retention filter. + :type attributes: RetentionFilterAttributes + + :param id: The ID of the retention filter. + :type id: str + + :param type: The type of the resource. + :type type: ApmRetentionFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/retention_filter_all.py b/datadog_api_client/v2/model/retention_filter_all.py new file mode 100644 index 0000000000..bf089e5c0c --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_all.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter_all_attributes import RetentionFilterAllAttributes + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + +class RetentionFilterAll(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter_all_attributes import RetentionFilterAllAttributes + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + return { + "attributes": (RetentionFilterAllAttributes,), + "id": (str,), + "type": (ApmRetentionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RetentionFilterAllAttributes, id: str, type: ApmRetentionFilterType, **kwargs): + """ + The definition of the retention filter. + + :param attributes: The attributes of the retention filter. + :type attributes: RetentionFilterAllAttributes + + :param id: The ID of the retention filter. + :type id: str + + :param type: The type of the resource. + :type type: ApmRetentionFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/retention_filter_all_attributes.py b/datadog_api_client/v2/model/retention_filter_all_attributes.py new file mode 100644 index 0000000000..d67455d817 --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_all_attributes.py @@ -0,0 +1,130 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_filter import SpansFilter + from datadog_api_client.v2.model.retention_filter_all_type import RetentionFilterAllType + +class RetentionFilterAllAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_filter import SpansFilter + from datadog_api_client.v2.model.retention_filter_all_type import RetentionFilterAllType + return { + "created_at": (int,), + "created_by": (str,), + "editable": (bool,), + "enabled": (bool,), + "execution_order": (int,), + "filter": (SpansFilter,), + "filter_type": (RetentionFilterAllType,), + "modified_at": (int,), + "modified_by": (str,), + "name": (str,), + "rate": (float,), + "trace_rate": (float,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "editable": "editable", + "enabled": "enabled", + "execution_order": "execution_order", + "filter": "filter", + "filter_type": "filter_type", + "modified_at": "modified_at", + "modified_by": "modified_by", + "name": "name", + "rate": "rate", + "trace_rate": "trace_rate", + } + + def __init__(self_, created_at: Union[int, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, editable: Union[bool, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, execution_order: Union[int, UnsetType]=unset, filter: Union[SpansFilter, UnsetType]=unset, filter_type: Union[RetentionFilterAllType, UnsetType]=unset, modified_at: Union[int, UnsetType]=unset, modified_by: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, rate: Union[float, UnsetType]=unset, trace_rate: Union[float, UnsetType]=unset, **kwargs): + """ + The attributes of the retention filter. + + :param created_at: The creation timestamp of the retention filter. + :type created_at: int, optional + + :param created_by: The creator of the retention filter. + :type created_by: str, optional + + :param editable: Shows whether the filter can be edited. + :type editable: bool, optional + + :param enabled: The status of the retention filter (Enabled/Disabled). + :type enabled: bool, optional + + :param execution_order: The execution order of the retention filter. + :type execution_order: int, optional + + :param filter: The spans filter used to index spans. + :type filter: SpansFilter, optional + + :param filter_type: The type of retention filter. + :type filter_type: RetentionFilterAllType, optional + + :param modified_at: The modification timestamp of the retention filter. + :type modified_at: int, optional + + :param modified_by: The modifier of the retention filter. + :type modified_by: str, optional + + :param name: The name of the retention filter. + :type name: str, optional + + :param rate: Sample rate to apply to spans going through this retention filter. + A value of 1.0 keeps all spans matching the query. + :type rate: float, optional + + :param trace_rate: Sample rate to apply to traces containing spans going through this retention filter. + A value of 1.0 keeps all traces with spans matching the query. + :type trace_rate: float, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if editable is not unset: + kwargs["editable"] = editable + if enabled is not unset: + kwargs["enabled"] = enabled + if execution_order is not unset: + kwargs["execution_order"] = execution_order + if filter is not unset: + kwargs["filter"] = filter + if filter_type is not unset: + kwargs["filter_type"] = filter_type + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if modified_by is not unset: + kwargs["modified_by"] = modified_by + if name is not unset: + kwargs["name"] = name + if rate is not unset: + kwargs["rate"] = rate + if trace_rate is not unset: + kwargs["trace_rate"] = trace_rate + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/retention_filter_all_type.py b/datadog_api_client/v2/model/retention_filter_all_type.py new file mode 100644 index 0000000000..312c961c6b --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_all_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionFilterAllType(ModelSimple): + """ + The type of retention filter. + + :param value: If omitted defaults to "spans-sampling-processor". Must be one of ["spans-sampling-processor", "spans-errors-sampling-processor", "spans-appsec-sampling-processor"]. + :type value: str + """ + + allowed_values = { + "spans-sampling-processor", + "spans-errors-sampling-processor", + "spans-appsec-sampling-processor", + } + SPANS_SAMPLING_PROCESSOR: ClassVar["RetentionFilterAllType"] + SPANS_ERRORS_SAMPLING_PROCESSOR: ClassVar["RetentionFilterAllType"] + SPANS_APPSEC_SAMPLING_PROCESSOR: ClassVar["RetentionFilterAllType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionFilterAllType.SPANS_SAMPLING_PROCESSOR = RetentionFilterAllType("spans-sampling-processor") +RetentionFilterAllType.SPANS_ERRORS_SAMPLING_PROCESSOR = RetentionFilterAllType("spans-errors-sampling-processor") +RetentionFilterAllType.SPANS_APPSEC_SAMPLING_PROCESSOR = RetentionFilterAllType("spans-appsec-sampling-processor") diff --git a/datadog_api_client/v2/model/retention_filter_attributes.py b/datadog_api_client/v2/model/retention_filter_attributes.py new file mode 100644 index 0000000000..cc8b448a79 --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_attributes.py @@ -0,0 +1,130 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_filter import SpansFilter + from datadog_api_client.v2.model.retention_filter_type import RetentionFilterType + +class RetentionFilterAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_filter import SpansFilter + from datadog_api_client.v2.model.retention_filter_type import RetentionFilterType + return { + "created_at": (int,), + "created_by": (str,), + "editable": (bool,), + "enabled": (bool,), + "execution_order": (int,), + "filter": (SpansFilter,), + "filter_type": (RetentionFilterType,), + "modified_at": (int,), + "modified_by": (str,), + "name": (str,), + "rate": (float,), + "trace_rate": (float,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "editable": "editable", + "enabled": "enabled", + "execution_order": "execution_order", + "filter": "filter", + "filter_type": "filter_type", + "modified_at": "modified_at", + "modified_by": "modified_by", + "name": "name", + "rate": "rate", + "trace_rate": "trace_rate", + } + + def __init__(self_, created_at: Union[int, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, editable: Union[bool, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, execution_order: Union[int, UnsetType]=unset, filter: Union[SpansFilter, UnsetType]=unset, filter_type: Union[RetentionFilterType, UnsetType]=unset, modified_at: Union[int, UnsetType]=unset, modified_by: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, rate: Union[float, UnsetType]=unset, trace_rate: Union[float, UnsetType]=unset, **kwargs): + """ + The attributes of the retention filter. + + :param created_at: The creation timestamp of the retention filter. + :type created_at: int, optional + + :param created_by: The creator of the retention filter. + :type created_by: str, optional + + :param editable: Shows whether the filter can be edited. + :type editable: bool, optional + + :param enabled: The status of the retention filter (Enabled/Disabled). + :type enabled: bool, optional + + :param execution_order: The execution order of the retention filter. + :type execution_order: int, optional + + :param filter: The spans filter used to index spans. + :type filter: SpansFilter, optional + + :param filter_type: The type of retention filter. The value should always be spans-sampling-processor. + :type filter_type: RetentionFilterType, optional + + :param modified_at: The modification timestamp of the retention filter. + :type modified_at: int, optional + + :param modified_by: The modifier of the retention filter. + :type modified_by: str, optional + + :param name: The name of the retention filter. + :type name: str, optional + + :param rate: Sample rate to apply to spans going through this retention filter. + A value of 1.0 keeps all spans matching the query. + :type rate: float, optional + + :param trace_rate: Sample rate to apply to traces containing spans going through this retention filter. + A value of 1.0 keeps all traces with spans matching the query. + :type trace_rate: float, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if editable is not unset: + kwargs["editable"] = editable + if enabled is not unset: + kwargs["enabled"] = enabled + if execution_order is not unset: + kwargs["execution_order"] = execution_order + if filter is not unset: + kwargs["filter"] = filter + if filter_type is not unset: + kwargs["filter_type"] = filter_type + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if modified_by is not unset: + kwargs["modified_by"] = modified_by + if name is not unset: + kwargs["name"] = name + if rate is not unset: + kwargs["rate"] = rate + if trace_rate is not unset: + kwargs["trace_rate"] = trace_rate + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/retention_filter_create_attributes.py b/datadog_api_client/v2/model/retention_filter_create_attributes.py new file mode 100644 index 0000000000..2ca14e02a3 --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_create_attributes.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_filter_create import SpansFilterCreate + from datadog_api_client.v2.model.retention_filter_type import RetentionFilterType + +class RetentionFilterCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_filter_create import SpansFilterCreate + from datadog_api_client.v2.model.retention_filter_type import RetentionFilterType + return { + "enabled": (bool,), + "filter": (SpansFilterCreate,), + "filter_type": (RetentionFilterType,), + "name": (str,), + "rate": (float,), + "trace_rate": (float,), + } + attribute_map = { + "enabled": "enabled", + "filter": "filter", + "filter_type": "filter_type", + "name": "name", + "rate": "rate", + "trace_rate": "trace_rate", + } + + def __init__(self_, enabled: bool, filter: SpansFilterCreate, filter_type: RetentionFilterType, name: str, rate: float, trace_rate: Union[float, UnsetType]=unset, **kwargs): + """ + The object describing the configuration of the retention filter to create/update. + + :param enabled: Enable/Disable the retention filter. + :type enabled: bool + + :param filter: The spans filter. Spans matching this filter will be indexed and stored. + :type filter: SpansFilterCreate + + :param filter_type: The type of retention filter. The value should always be spans-sampling-processor. + :type filter_type: RetentionFilterType + + :param name: The name of the retention filter. + :type name: str + + :param rate: Sample rate to apply to spans going through this retention filter. + A value of 1.0 keeps all spans matching the query. + :type rate: float + + :param trace_rate: Sample rate to apply to traces containing spans going through this retention filter. + A value of 1.0 keeps all traces with spans matching the query. + :type trace_rate: float, optional + """ + if trace_rate is not unset: + kwargs["trace_rate"] = trace_rate + super().__init__(kwargs) + + + self_.enabled = enabled + self_.filter = filter + self_.filter_type = filter_type + self_.name = name + self_.rate = rate diff --git a/datadog_api_client/v2/model/retention_filter_create_data.py b/datadog_api_client/v2/model/retention_filter_create_data.py new file mode 100644 index 0000000000..7e5baca4ec --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter_create_attributes import RetentionFilterCreateAttributes + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + +class RetentionFilterCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter_create_attributes import RetentionFilterCreateAttributes + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + return { + "attributes": (RetentionFilterCreateAttributes,), + "type": (ApmRetentionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: RetentionFilterCreateAttributes, type: ApmRetentionFilterType, **kwargs): + """ + The body of the retention filter to be created. + + :param attributes: The object describing the configuration of the retention filter to create/update. + :type attributes: RetentionFilterCreateAttributes + + :param type: The type of the resource. + :type type: ApmRetentionFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/retention_filter_create_request.py b/datadog_api_client/v2/model/retention_filter_create_request.py new file mode 100644 index 0000000000..e036053ec2 --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter_create_data import RetentionFilterCreateData + +class RetentionFilterCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter_create_data import RetentionFilterCreateData + return { + "data": (RetentionFilterCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RetentionFilterCreateData, **kwargs): + """ + The body of the retention filter to be created. + + :param data: The body of the retention filter to be created. + :type data: RetentionFilterCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/retention_filter_create_response.py b/datadog_api_client/v2/model/retention_filter_create_response.py new file mode 100644 index 0000000000..c758a56075 --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter import RetentionFilter + +class RetentionFilterCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter import RetentionFilter + return { + "data": (RetentionFilter,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RetentionFilter, UnsetType]=unset, **kwargs): + """ + The retention filters definition. + + :param data: The definition of the retention filter. + :type data: RetentionFilter, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/retention_filter_response.py b/datadog_api_client/v2/model/retention_filter_response.py new file mode 100644 index 0000000000..95806dd806 --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter_all import RetentionFilterAll + +class RetentionFilterResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter_all import RetentionFilterAll + return { + "data": (RetentionFilterAll,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RetentionFilterAll, UnsetType]=unset, **kwargs): + """ + The retention filters definition. + + :param data: The definition of the retention filter. + :type data: RetentionFilterAll, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/retention_filter_type.py b/datadog_api_client/v2/model/retention_filter_type.py new file mode 100644 index 0000000000..ba136ef2ef --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetentionFilterType(ModelSimple): + """ + The type of retention filter. The value should always be spans-sampling-processor. + + :param value: If omitted defaults to "spans-sampling-processor". Must be one of ["spans-sampling-processor"]. + :type value: str + """ + + allowed_values = { + "spans-sampling-processor", + } + SPANS_SAMPLING_PROCESSOR: ClassVar["RetentionFilterType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetentionFilterType.SPANS_SAMPLING_PROCESSOR = RetentionFilterType("spans-sampling-processor") diff --git a/datadog_api_client/v2/model/retention_filter_update_attributes.py b/datadog_api_client/v2/model/retention_filter_update_attributes.py new file mode 100644 index 0000000000..c4a604707f --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_update_attributes.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_filter_create import SpansFilterCreate + from datadog_api_client.v2.model.retention_filter_all_type import RetentionFilterAllType + +class RetentionFilterUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_filter_create import SpansFilterCreate + from datadog_api_client.v2.model.retention_filter_all_type import RetentionFilterAllType + return { + "enabled": (bool,), + "filter": (SpansFilterCreate,), + "filter_type": (RetentionFilterAllType,), + "name": (str,), + "rate": (float,), + "trace_rate": (float,), + } + attribute_map = { + "enabled": "enabled", + "filter": "filter", + "filter_type": "filter_type", + "name": "name", + "rate": "rate", + "trace_rate": "trace_rate", + } + + def __init__(self_, enabled: bool, filter: SpansFilterCreate, filter_type: RetentionFilterAllType, name: str, rate: float, trace_rate: Union[float, UnsetType]=unset, **kwargs): + """ + The object describing the configuration of the retention filter to create/update. + + :param enabled: Enable/Disable the retention filter. + :type enabled: bool + + :param filter: The spans filter. Spans matching this filter will be indexed and stored. + :type filter: SpansFilterCreate + + :param filter_type: The type of retention filter. + :type filter_type: RetentionFilterAllType + + :param name: The name of the retention filter. + :type name: str + + :param rate: Sample rate to apply to spans going through this retention filter. + A value of 1.0 keeps all spans matching the query. + :type rate: float + + :param trace_rate: Sample rate to apply to traces containing spans going through this retention filter. + A value of 1.0 keeps all traces with spans matching the query. + :type trace_rate: float, optional + """ + if trace_rate is not unset: + kwargs["trace_rate"] = trace_rate + super().__init__(kwargs) + + + self_.enabled = enabled + self_.filter = filter + self_.filter_type = filter_type + self_.name = name + self_.rate = rate diff --git a/datadog_api_client/v2/model/retention_filter_update_data.py b/datadog_api_client/v2/model/retention_filter_update_data.py new file mode 100644 index 0000000000..f2bf3e78a8 --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter_update_attributes import RetentionFilterUpdateAttributes + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + +class RetentionFilterUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter_update_attributes import RetentionFilterUpdateAttributes + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + return { + "attributes": (RetentionFilterUpdateAttributes,), + "id": (str,), + "type": (ApmRetentionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RetentionFilterUpdateAttributes, id: str, type: ApmRetentionFilterType, **kwargs): + """ + The body of the retention filter to be updated. + + :param attributes: The object describing the configuration of the retention filter to create/update. + :type attributes: RetentionFilterUpdateAttributes + + :param id: The ID of the retention filter. + :type id: str + + :param type: The type of the resource. + :type type: ApmRetentionFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/retention_filter_update_request.py b/datadog_api_client/v2/model/retention_filter_update_request.py new file mode 100644 index 0000000000..6e3cbb266c --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter_update_data import RetentionFilterUpdateData + +class RetentionFilterUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter_update_data import RetentionFilterUpdateData + return { + "data": (RetentionFilterUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RetentionFilterUpdateData, **kwargs): + """ + The body of the retention filter to be updated. + + :param data: The body of the retention filter to be updated. + :type data: RetentionFilterUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/retention_filter_without_attributes.py b/datadog_api_client/v2/model/retention_filter_without_attributes.py new file mode 100644 index 0000000000..ebed9fc924 --- /dev/null +++ b/datadog_api_client/v2/model/retention_filter_without_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + +class RetentionFilterWithoutAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType + return { + "id": (str,), + "type": (ApmRetentionFilterType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ApmRetentionFilterType, **kwargs): + """ + The retention filter object . + + :param id: The ID of the retention filter. + :type id: str + + :param type: The type of the resource. + :type type: ApmRetentionFilterType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/retention_filters_response.py b/datadog_api_client/v2/model/retention_filters_response.py new file mode 100644 index 0000000000..8f979960b2 --- /dev/null +++ b/datadog_api_client/v2/model/retention_filters_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retention_filter_all import RetentionFilterAll + +class RetentionFiltersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retention_filter_all import RetentionFilterAll + return { + "data": ([RetentionFilterAll],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RetentionFilterAll], **kwargs): + """ + An ordered list of retention filters. + + :param data: A list of retention filters objects. + :type data: [RetentionFilterAll] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/retry_strategy.py b/datadog_api_client/v2/model/retry_strategy.py new file mode 100644 index 0000000000..b182b992fa --- /dev/null +++ b/datadog_api_client/v2/model/retry_strategy.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.retry_strategy_kind import RetryStrategyKind + from datadog_api_client.v2.model.retry_strategy_linear import RetryStrategyLinear + +class RetryStrategy(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.retry_strategy_kind import RetryStrategyKind + from datadog_api_client.v2.model.retry_strategy_linear import RetryStrategyLinear + return { + "kind": (RetryStrategyKind,), + "linear": (RetryStrategyLinear,), + } + attribute_map = { + "kind": "kind", + "linear": "linear", + } + + def __init__(self_, kind: RetryStrategyKind, linear: RetryStrategyLinear, **kwargs): + """ + The definition of ``RetryStrategy`` object. + + :param kind: The definition of ``RetryStrategyKind`` object. + :type kind: RetryStrategyKind + + :param linear: The definition of ``RetryStrategyLinear`` object. + :type linear: RetryStrategyLinear + """ + super().__init__(kwargs) + + + self_.kind = kind + self_.linear = linear diff --git a/datadog_api_client/v2/model/retry_strategy_kind.py b/datadog_api_client/v2/model/retry_strategy_kind.py new file mode 100644 index 0000000000..553a98c5e8 --- /dev/null +++ b/datadog_api_client/v2/model/retry_strategy_kind.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RetryStrategyKind(ModelSimple): + """ + The definition of `RetryStrategyKind` object. + + :param value: If omitted defaults to "RETRY_STRATEGY_LINEAR". Must be one of ["RETRY_STRATEGY_LINEAR"]. + :type value: str + """ + + allowed_values = { + "RETRY_STRATEGY_LINEAR", + } + RETRY_STRATEGY_LINEAR: ClassVar["RetryStrategyKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RetryStrategyKind.RETRY_STRATEGY_LINEAR = RetryStrategyKind("RETRY_STRATEGY_LINEAR") diff --git a/datadog_api_client/v2/model/retry_strategy_linear.py b/datadog_api_client/v2/model/retry_strategy_linear.py new file mode 100644 index 0000000000..4774ed4e03 --- /dev/null +++ b/datadog_api_client/v2/model/retry_strategy_linear.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RetryStrategyLinear(ModelNormal): + validations = { + "interval": { + }, + "max_retries": { + "inclusive_maximum": 2147483647, + "inclusive_minimum": 0, + }, + } + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "interval": (str,), + "max_retries": (int,), + } + attribute_map = { + "interval": "interval", + "max_retries": "maxRetries", + } + + def __init__(self_, interval: str, max_retries: int, **kwargs): + """ + The definition of ``RetryStrategyLinear`` object. + + :param interval: The ``RetryStrategyLinear`` ``interval``. The expected format is the number of seconds ending with an s. For example, 1 day is 86400s + :type interval: str + + :param max_retries: The ``RetryStrategyLinear`` ``maxRetries``. + :type max_retries: int + """ + super().__init__(kwargs) + + + self_.interval = interval + self_.max_retries = max_retries diff --git a/datadog_api_client/v2/model/revert_custom_rule_revision_data_type.py b/datadog_api_client/v2/model/revert_custom_rule_revision_data_type.py new file mode 100644 index 0000000000..7536fafbd0 --- /dev/null +++ b/datadog_api_client/v2/model/revert_custom_rule_revision_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RevertCustomRuleRevisionDataType(ModelSimple): + """ + Request type + + :param value: If omitted defaults to "revert_custom_rule_revision_request". Must be one of ["revert_custom_rule_revision_request"]. + :type value: str + """ + + allowed_values = { + "revert_custom_rule_revision_request", + } + REVERT_CUSTOM_RULE_REVISION_REQUEST: ClassVar["RevertCustomRuleRevisionDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RevertCustomRuleRevisionDataType.REVERT_CUSTOM_RULE_REVISION_REQUEST = RevertCustomRuleRevisionDataType("revert_custom_rule_revision_request") diff --git a/datadog_api_client/v2/model/revert_custom_rule_revision_request.py b/datadog_api_client/v2/model/revert_custom_rule_revision_request.py new file mode 100644 index 0000000000..e4f23c8327 --- /dev/null +++ b/datadog_api_client/v2/model/revert_custom_rule_revision_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.revert_custom_rule_revision_request_data import RevertCustomRuleRevisionRequestData + +class RevertCustomRuleRevisionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.revert_custom_rule_revision_request_data import RevertCustomRuleRevisionRequestData + return { + "data": (RevertCustomRuleRevisionRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RevertCustomRuleRevisionRequestData, UnsetType]=unset, **kwargs): + """ + Request body for reverting a custom rule to a previous revision. + + :param data: Data object for a request to revert a custom rule to a previous revision. + :type data: RevertCustomRuleRevisionRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/revert_custom_rule_revision_request_data.py b/datadog_api_client/v2/model/revert_custom_rule_revision_request_data.py new file mode 100644 index 0000000000..2b6d6fe6c5 --- /dev/null +++ b/datadog_api_client/v2/model/revert_custom_rule_revision_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.revert_custom_rule_revision_request_data_attributes import RevertCustomRuleRevisionRequestDataAttributes + from datadog_api_client.v2.model.revert_custom_rule_revision_data_type import RevertCustomRuleRevisionDataType + +class RevertCustomRuleRevisionRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.revert_custom_rule_revision_request_data_attributes import RevertCustomRuleRevisionRequestDataAttributes + from datadog_api_client.v2.model.revert_custom_rule_revision_data_type import RevertCustomRuleRevisionDataType + return { + "attributes": (RevertCustomRuleRevisionRequestDataAttributes,), + "id": (str,), + "type": (RevertCustomRuleRevisionDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[RevertCustomRuleRevisionRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[RevertCustomRuleRevisionDataType, UnsetType]=unset, **kwargs): + """ + Data object for a request to revert a custom rule to a previous revision. + + :param attributes: Attributes specifying the current and target revision IDs for a revert operation. + :type attributes: RevertCustomRuleRevisionRequestDataAttributes, optional + + :param id: Request identifier + :type id: str, optional + + :param type: Request type + :type type: RevertCustomRuleRevisionDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/revert_custom_rule_revision_request_data_attributes.py b/datadog_api_client/v2/model/revert_custom_rule_revision_request_data_attributes.py new file mode 100644 index 0000000000..73e864c6f3 --- /dev/null +++ b/datadog_api_client/v2/model/revert_custom_rule_revision_request_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RevertCustomRuleRevisionRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "current_revision": (str,), + "revert_to_revision": (str,), + } + attribute_map = { + "current_revision": "currentRevision", + "revert_to_revision": "revertToRevision", + } + + def __init__(self_, current_revision: Union[str, UnsetType]=unset, revert_to_revision: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes specifying the current and target revision IDs for a revert operation. + + :param current_revision: Current revision ID + :type current_revision: str, optional + + :param revert_to_revision: Target revision ID to revert to + :type revert_to_revision: str, optional + """ + if current_revision is not unset: + kwargs["current_revision"] = current_revision + if revert_to_revision is not unset: + kwargs["revert_to_revision"] = revert_to_revision + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/role.py b/datadog_api_client/v2/model/role.py new file mode 100644 index 0000000000..662c2d8d70 --- /dev/null +++ b/datadog_api_client/v2/model/role.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_attributes import RoleAttributes + from datadog_api_client.v2.model.role_response_relationships import RoleResponseRelationships + from datadog_api_client.v2.model.roles_type import RolesType + +class Role(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_attributes import RoleAttributes + from datadog_api_client.v2.model.role_response_relationships import RoleResponseRelationships + from datadog_api_client.v2.model.roles_type import RolesType + return { + "attributes": (RoleAttributes,), + "id": (str,), + "relationships": (RoleResponseRelationships,), + "type": (RolesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: RolesType, attributes: Union[RoleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[RoleResponseRelationships, UnsetType]=unset, **kwargs): + """ + Role object returned by the API. + + :param attributes: Attributes of the role. + :type attributes: RoleAttributes, optional + + :param id: The unique identifier of the role. + :type id: str, optional + + :param relationships: Relationships of the role object returned by the API. + :type relationships: RoleResponseRelationships, optional + + :param type: Roles type. + :type type: RolesType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/role_attributes.py b/datadog_api_client/v2/model/role_attributes.py new file mode 100644 index 0000000000..d956bb3e76 --- /dev/null +++ b/datadog_api_client/v2/model/role_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RoleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "modified_at": (datetime,), + "name": (str,), + "receives_permissions_from": ([str],), + "user_count": (int,), + } + attribute_map = { + "created_at": "created_at", + "modified_at": "modified_at", + "name": "name", + "receives_permissions_from": "receives_permissions_from", + "user_count": "user_count", + } + read_only_vars = { + "created_at", + "modified_at", + "user_count", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, receives_permissions_from: Union[List[str], UnsetType]=unset, user_count: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of the role. + + :param created_at: Creation time of the role. + :type created_at: datetime, optional + + :param modified_at: Time of last role modification. + :type modified_at: datetime, optional + + :param name: The name of the role. The name is neither unique nor a stable identifier of the role. + :type name: str, optional + + :param receives_permissions_from: The managed role from which this role automatically inherits new permissions. + Specify one of the following: "Datadog Admin Role", "Datadog Standard Role", or "Datadog Read Only Role". + If empty or not specified, the role does not automatically inherit permissions from any managed role. + :type receives_permissions_from: [str], optional + + :param user_count: Number of users with that role. + :type user_count: int, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if receives_permissions_from is not unset: + kwargs["receives_permissions_from"] = receives_permissions_from + if user_count is not unset: + kwargs["user_count"] = user_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/role_clone.py b/datadog_api_client/v2/model/role_clone.py new file mode 100644 index 0000000000..e8de6d061e --- /dev/null +++ b/datadog_api_client/v2/model/role_clone.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_clone_attributes import RoleCloneAttributes + from datadog_api_client.v2.model.roles_type import RolesType + +class RoleClone(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_clone_attributes import RoleCloneAttributes + from datadog_api_client.v2.model.roles_type import RolesType + return { + "attributes": (RoleCloneAttributes,), + "type": (RolesType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: RoleCloneAttributes, type: RolesType, **kwargs): + """ + Data for the clone role request. + + :param attributes: Attributes required to create a new role by cloning an existing one. + :type attributes: RoleCloneAttributes + + :param type: Roles type. + :type type: RolesType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/role_clone_attributes.py b/datadog_api_client/v2/model/role_clone_attributes.py new file mode 100644 index 0000000000..e5f7e7414f --- /dev/null +++ b/datadog_api_client/v2/model/role_clone_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RoleCloneAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "receives_permissions_from": ([str],), + } + attribute_map = { + "name": "name", + "receives_permissions_from": "receives_permissions_from", + } + + def __init__(self_, name: str, receives_permissions_from: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes required to create a new role by cloning an existing one. + + :param name: Name of the new role that is cloned. + :type name: str + + :param receives_permissions_from: The managed role from which this role automatically inherits new permissions. + Specify one of the following: "Datadog Admin Role", "Datadog Standard Role", or "Datadog Read Only Role". + If empty or not specified, the role does not automatically inherit permissions from any managed role. + :type receives_permissions_from: [str], optional + """ + if receives_permissions_from is not unset: + kwargs["receives_permissions_from"] = receives_permissions_from + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/role_clone_request.py b/datadog_api_client/v2/model/role_clone_request.py new file mode 100644 index 0000000000..f1be6389f2 --- /dev/null +++ b/datadog_api_client/v2/model/role_clone_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_clone import RoleClone + +class RoleCloneRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_clone import RoleClone + return { + "data": (RoleClone,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RoleClone, **kwargs): + """ + Request to create a role by cloning an existing role. + + :param data: Data for the clone role request. + :type data: RoleClone + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/role_create_attributes.py b/datadog_api_client/v2/model/role_create_attributes.py new file mode 100644 index 0000000000..eba70eeae3 --- /dev/null +++ b/datadog_api_client/v2/model/role_create_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RoleCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "modified_at": (datetime,), + "name": (str,), + "receives_permissions_from": ([str],), + } + attribute_map = { + "created_at": "created_at", + "modified_at": "modified_at", + "name": "name", + "receives_permissions_from": "receives_permissions_from", + } + read_only_vars = { + "created_at", + "modified_at", + } + + def __init__(self_, name: str, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, receives_permissions_from: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of the created role. + + :param created_at: Creation time of the role. + :type created_at: datetime, optional + + :param modified_at: Time of last role modification. + :type modified_at: datetime, optional + + :param name: Name of the role. + :type name: str + + :param receives_permissions_from: The managed role from which this role automatically inherits new permissions. + Specify one of the following: "Datadog Admin Role", "Datadog Standard Role", or "Datadog Read Only Role". + If empty or not specified, the role does not automatically inherit permissions from any managed role. + :type receives_permissions_from: [str], optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if receives_permissions_from is not unset: + kwargs["receives_permissions_from"] = receives_permissions_from + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/role_create_data.py b/datadog_api_client/v2/model/role_create_data.py new file mode 100644 index 0000000000..ab2e632098 --- /dev/null +++ b/datadog_api_client/v2/model/role_create_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_create_attributes import RoleCreateAttributes + from datadog_api_client.v2.model.role_relationships import RoleRelationships + from datadog_api_client.v2.model.roles_type import RolesType + +class RoleCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_create_attributes import RoleCreateAttributes + from datadog_api_client.v2.model.role_relationships import RoleRelationships + from datadog_api_client.v2.model.roles_type import RolesType + return { + "attributes": (RoleCreateAttributes,), + "relationships": (RoleRelationships,), + "type": (RolesType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: RoleCreateAttributes, relationships: Union[RoleRelationships, UnsetType]=unset, type: Union[RolesType, UnsetType]=unset, **kwargs): + """ + Data related to the creation of a role. + + :param attributes: Attributes of the created role. + :type attributes: RoleCreateAttributes + + :param relationships: Relationships of the role object. + :type relationships: RoleRelationships, optional + + :param type: Roles type. + :type type: RolesType, optional + """ + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/role_create_request.py b/datadog_api_client/v2/model/role_create_request.py new file mode 100644 index 0000000000..689fe2c569 --- /dev/null +++ b/datadog_api_client/v2/model/role_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_create_data import RoleCreateData + +class RoleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_create_data import RoleCreateData + return { + "data": (RoleCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RoleCreateData, **kwargs): + """ + Create a role. + + :param data: Data related to the creation of a role. + :type data: RoleCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/role_create_response.py b/datadog_api_client/v2/model/role_create_response.py new file mode 100644 index 0000000000..99baef2156 --- /dev/null +++ b/datadog_api_client/v2/model/role_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_create_response_data import RoleCreateResponseData + +class RoleCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_create_response_data import RoleCreateResponseData + return { + "data": (RoleCreateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RoleCreateResponseData, UnsetType]=unset, **kwargs): + """ + Response containing information about a created role. + + :param data: Role object returned by the API. + :type data: RoleCreateResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/role_create_response_data.py b/datadog_api_client/v2/model/role_create_response_data.py new file mode 100644 index 0000000000..159e370c78 --- /dev/null +++ b/datadog_api_client/v2/model/role_create_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_create_attributes import RoleCreateAttributes + from datadog_api_client.v2.model.role_response_relationships import RoleResponseRelationships + from datadog_api_client.v2.model.roles_type import RolesType + +class RoleCreateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_create_attributes import RoleCreateAttributes + from datadog_api_client.v2.model.role_response_relationships import RoleResponseRelationships + from datadog_api_client.v2.model.roles_type import RolesType + return { + "attributes": (RoleCreateAttributes,), + "id": (str,), + "relationships": (RoleResponseRelationships,), + "type": (RolesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: RolesType, attributes: Union[RoleCreateAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[RoleResponseRelationships, UnsetType]=unset, **kwargs): + """ + Role object returned by the API. + + :param attributes: Attributes of the created role. + :type attributes: RoleCreateAttributes, optional + + :param id: The unique identifier of the role. + :type id: str, optional + + :param relationships: Relationships of the role object returned by the API. + :type relationships: RoleResponseRelationships, optional + + :param type: Roles type. + :type type: RolesType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/role_relationships.py b/datadog_api_client/v2/model/role_relationships.py new file mode 100644 index 0000000000..7b0104ec4b --- /dev/null +++ b/datadog_api_client/v2/model/role_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_permissions import RelationshipToPermissions + +class RoleRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_permissions import RelationshipToPermissions + return { + "permissions": (RelationshipToPermissions,), + } + attribute_map = { + "permissions": "permissions", + } + + def __init__(self_, permissions: Union[RelationshipToPermissions, UnsetType]=unset, **kwargs): + """ + Relationships of the role object. + + :param permissions: Relationship to multiple permissions objects. + :type permissions: RelationshipToPermissions, optional + """ + if permissions is not unset: + kwargs["permissions"] = permissions + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/role_response.py b/datadog_api_client/v2/model/role_response.py new file mode 100644 index 0000000000..e142734684 --- /dev/null +++ b/datadog_api_client/v2/model/role_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role import Role + +class RoleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role import Role + return { + "data": (Role,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[Role, UnsetType]=unset, **kwargs): + """ + Response containing information about a single role. + + :param data: Role object returned by the API. + :type data: Role, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/role_response_relationships.py b/datadog_api_client/v2/model/role_response_relationships.py new file mode 100644 index 0000000000..84c75fd237 --- /dev/null +++ b/datadog_api_client/v2/model/role_response_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_permissions import RelationshipToPermissions + +class RoleResponseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_permissions import RelationshipToPermissions + return { + "permissions": (RelationshipToPermissions,), + } + attribute_map = { + "permissions": "permissions", + } + + def __init__(self_, permissions: Union[RelationshipToPermissions, UnsetType]=unset, **kwargs): + """ + Relationships of the role object returned by the API. + + :param permissions: Relationship to multiple permissions objects. + :type permissions: RelationshipToPermissions, optional + """ + if permissions is not unset: + kwargs["permissions"] = permissions + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/role_template_array.py b/datadog_api_client/v2/model/role_template_array.py new file mode 100644 index 0000000000..ff38b238a5 --- /dev/null +++ b/datadog_api_client/v2/model/role_template_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_template_data import RoleTemplateData + +class RoleTemplateArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_template_data import RoleTemplateData + return { + "data": ([RoleTemplateData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RoleTemplateData], **kwargs): + """ + The definition of ``RoleTemplateArray`` object. + + :param data: The ``RoleTemplateArray`` ``data``. + :type data: [RoleTemplateData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/role_template_data.py b/datadog_api_client/v2/model/role_template_data.py new file mode 100644 index 0000000000..550f9b6686 --- /dev/null +++ b/datadog_api_client/v2/model/role_template_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_template_data_attributes import RoleTemplateDataAttributes + from datadog_api_client.v2.model.role_template_data_type import RoleTemplateDataType + +class RoleTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_template_data_attributes import RoleTemplateDataAttributes + from datadog_api_client.v2.model.role_template_data_type import RoleTemplateDataType + return { + "attributes": (RoleTemplateDataAttributes,), + "id": (str,), + "type": (RoleTemplateDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: RoleTemplateDataType, attributes: Union[RoleTemplateDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``RoleTemplateData`` object. + + :param attributes: The definition of ``RoleTemplateDataAttributes`` object. + :type attributes: RoleTemplateDataAttributes, optional + + :param id: The ``RoleTemplateData`` ``id``. + :type id: str, optional + + :param type: Roles resource type. + :type type: RoleTemplateDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/role_template_data_attributes.py b/datadog_api_client/v2/model/role_template_data_attributes.py new file mode 100644 index 0000000000..0a357fa780 --- /dev/null +++ b/datadog_api_client/v2/model/role_template_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RoleTemplateDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``RoleTemplateDataAttributes`` object. + + :param description: The ``attributes`` ``description``. + :type description: str, optional + + :param name: The ``attributes`` ``name``. + :type name: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/role_template_data_type.py b/datadog_api_client/v2/model/role_template_data_type.py new file mode 100644 index 0000000000..26e339bcdb --- /dev/null +++ b/datadog_api_client/v2/model/role_template_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RoleTemplateDataType(ModelSimple): + """ + Roles resource type. + + :param value: If omitted defaults to "roles". Must be one of ["roles"]. + :type value: str + """ + + allowed_values = { + "roles", + } + ROLES: ClassVar["RoleTemplateDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RoleTemplateDataType.ROLES = RoleTemplateDataType("roles") diff --git a/datadog_api_client/v2/model/role_update_attributes.py b/datadog_api_client/v2/model/role_update_attributes.py new file mode 100644 index 0000000000..55cef8d9ba --- /dev/null +++ b/datadog_api_client/v2/model/role_update_attributes.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RoleUpdateAttributes(ModelNormal): + validations = { + "user_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "modified_at": (datetime,), + "name": (str,), + "receives_permissions_from": ([str],), + "user_count": (int,), + } + attribute_map = { + "created_at": "created_at", + "modified_at": "modified_at", + "name": "name", + "receives_permissions_from": "receives_permissions_from", + "user_count": "user_count", + } + read_only_vars = { + "created_at", + "modified_at", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, receives_permissions_from: Union[List[str], UnsetType]=unset, user_count: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of the role. + + :param created_at: Creation time of the role. + :type created_at: datetime, optional + + :param modified_at: Time of last role modification. + :type modified_at: datetime, optional + + :param name: Name of the role. + :type name: str, optional + + :param receives_permissions_from: The managed role from which this role automatically inherits new permissions. + Specify one of the following: "Datadog Admin Role", "Datadog Standard Role", or "Datadog Read Only Role". + If empty or not specified, the role does not automatically inherit permissions from any managed role. + :type receives_permissions_from: [str], optional + + :param user_count: The user count. + :type user_count: int, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if receives_permissions_from is not unset: + kwargs["receives_permissions_from"] = receives_permissions_from + if user_count is not unset: + kwargs["user_count"] = user_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/role_update_data.py b/datadog_api_client/v2/model/role_update_data.py new file mode 100644 index 0000000000..01d42871ce --- /dev/null +++ b/datadog_api_client/v2/model/role_update_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_update_attributes import RoleUpdateAttributes + from datadog_api_client.v2.model.role_relationships import RoleRelationships + from datadog_api_client.v2.model.roles_type import RolesType + +class RoleUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_update_attributes import RoleUpdateAttributes + from datadog_api_client.v2.model.role_relationships import RoleRelationships + from datadog_api_client.v2.model.roles_type import RolesType + return { + "attributes": (RoleUpdateAttributes,), + "id": (str,), + "relationships": (RoleRelationships,), + "type": (RolesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: RoleUpdateAttributes, id: str, type: RolesType, relationships: Union[RoleRelationships, UnsetType]=unset, **kwargs): + """ + Data related to the update of a role. + + :param attributes: Attributes of the role. + :type attributes: RoleUpdateAttributes + + :param id: The unique identifier of the role. + :type id: str + + :param relationships: Relationships of the role object. + :type relationships: RoleRelationships, optional + + :param type: Roles type. + :type type: RolesType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/role_update_request.py b/datadog_api_client/v2/model/role_update_request.py new file mode 100644 index 0000000000..4c0230e8d5 --- /dev/null +++ b/datadog_api_client/v2/model/role_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_update_data import RoleUpdateData + +class RoleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_update_data import RoleUpdateData + return { + "data": (RoleUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RoleUpdateData, **kwargs): + """ + Update a role. + + :param data: Data related to the update of a role. + :type data: RoleUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/role_update_response.py b/datadog_api_client/v2/model/role_update_response.py new file mode 100644 index 0000000000..9c08376d26 --- /dev/null +++ b/datadog_api_client/v2/model/role_update_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_update_response_data import RoleUpdateResponseData + +class RoleUpdateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_update_response_data import RoleUpdateResponseData + return { + "data": (RoleUpdateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RoleUpdateResponseData, UnsetType]=unset, **kwargs): + """ + Response containing information about an updated role. + + :param data: Role object returned by the API. + :type data: RoleUpdateResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/role_update_response_data.py b/datadog_api_client/v2/model/role_update_response_data.py new file mode 100644 index 0000000000..7b6d412c38 --- /dev/null +++ b/datadog_api_client/v2/model/role_update_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role_update_attributes import RoleUpdateAttributes + from datadog_api_client.v2.model.role_response_relationships import RoleResponseRelationships + from datadog_api_client.v2.model.roles_type import RolesType + +class RoleUpdateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role_update_attributes import RoleUpdateAttributes + from datadog_api_client.v2.model.role_response_relationships import RoleResponseRelationships + from datadog_api_client.v2.model.roles_type import RolesType + return { + "attributes": (RoleUpdateAttributes,), + "id": (str,), + "relationships": (RoleResponseRelationships,), + "type": (RolesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: RolesType, attributes: Union[RoleUpdateAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[RoleResponseRelationships, UnsetType]=unset, **kwargs): + """ + Role object returned by the API. + + :param attributes: Attributes of the role. + :type attributes: RoleUpdateAttributes, optional + + :param id: The unique identifier of the role. + :type id: str, optional + + :param relationships: Relationships of the role object returned by the API. + :type relationships: RoleResponseRelationships, optional + + :param type: Roles type. + :type type: RolesType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/roles_response.py b/datadog_api_client/v2/model/roles_response.py new file mode 100644 index 0000000000..b01516665f --- /dev/null +++ b/datadog_api_client/v2/model/roles_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.role import Role + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + +class RolesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.role import Role + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + return { + "data": ([Role],), + "meta": (ResponseMetaAttributes,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[Role], UnsetType]=unset, meta: Union[ResponseMetaAttributes, UnsetType]=unset, **kwargs): + """ + Response containing information about multiple roles. + + :param data: Array of returned roles. + :type data: [Role], optional + + :param meta: Object describing meta attributes of response. + :type meta: ResponseMetaAttributes, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/roles_sort.py b/datadog_api_client/v2/model/roles_sort.py new file mode 100644 index 0000000000..9fcd776cdf --- /dev/null +++ b/datadog_api_client/v2/model/roles_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RolesSort(ModelSimple): + """ + Sorting options for roles. + + :param value: If omitted defaults to "name". Must be one of ["name", "-name", "modified_at", "-modified_at", "user_count", "-user_count"]. + :type value: str + """ + + allowed_values = { + "name", + "-name", + "modified_at", + "-modified_at", + "user_count", + "-user_count", + } + NAME_ASCENDING: ClassVar["RolesSort"] + NAME_DESCENDING: ClassVar["RolesSort"] + MODIFIED_AT_ASCENDING: ClassVar["RolesSort"] + MODIFIED_AT_DESCENDING: ClassVar["RolesSort"] + USER_COUNT_ASCENDING: ClassVar["RolesSort"] + USER_COUNT_DESCENDING: ClassVar["RolesSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RolesSort.NAME_ASCENDING = RolesSort("name") +RolesSort.NAME_DESCENDING = RolesSort("-name") +RolesSort.MODIFIED_AT_ASCENDING = RolesSort("modified_at") +RolesSort.MODIFIED_AT_DESCENDING = RolesSort("-modified_at") +RolesSort.USER_COUNT_ASCENDING = RolesSort("user_count") +RolesSort.USER_COUNT_DESCENDING = RolesSort("-user_count") diff --git a/datadog_api_client/v2/model/roles_type.py b/datadog_api_client/v2/model/roles_type.py new file mode 100644 index 0000000000..0ba513ec93 --- /dev/null +++ b/datadog_api_client/v2/model/roles_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RolesType(ModelSimple): + """ + Roles type. + + :param value: If omitted defaults to "roles". Must be one of ["roles"]. + :type value: str + """ + + allowed_values = { + "roles", + } + ROLES: ClassVar["RolesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RolesType.ROLES = RolesType("roles") diff --git a/datadog_api_client/v2/model/rollout_options.py b/datadog_api_client/v2/model/rollout_options.py new file mode 100644 index 0000000000..9d4557752c --- /dev/null +++ b/datadog_api_client/v2/model/rollout_options.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rollout_strategy import RolloutStrategy + +class RolloutOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rollout_strategy import RolloutStrategy + return { + "autostart": (bool,), + "selection_interval_ms": (int,), + "strategy": (RolloutStrategy,), + } + attribute_map = { + "autostart": "autostart", + "selection_interval_ms": "selection_interval_ms", + "strategy": "strategy", + } + + def __init__(self_, autostart: bool, selection_interval_ms: int, strategy: RolloutStrategy, **kwargs): + """ + Applied progression options for a progressive rollout. + + :param autostart: Whether the schedule starts automatically. + :type autostart: bool + + :param selection_interval_ms: Interval in milliseconds for uniform interval strategies. + :type selection_interval_ms: int + + :param strategy: The progression strategy used by a progressive rollout. + :type strategy: RolloutStrategy + """ + super().__init__(kwargs) + + + self_.autostart = autostart + self_.selection_interval_ms = selection_interval_ms + self_.strategy = strategy diff --git a/datadog_api_client/v2/model/rollout_options_request.py b/datadog_api_client/v2/model/rollout_options_request.py new file mode 100644 index 0000000000..1cac9ca48e --- /dev/null +++ b/datadog_api_client/v2/model/rollout_options_request.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rollout_strategy import RolloutStrategy + +class RolloutOptionsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rollout_strategy import RolloutStrategy + return { + "autostart": (bool, none_type), + "selection_interval_ms": (int,), + "strategy": (RolloutStrategy,), + } + attribute_map = { + "autostart": "autostart", + "selection_interval_ms": "selection_interval_ms", + "strategy": "strategy", + } + + def __init__(self_, strategy: RolloutStrategy, autostart: Union[bool, none_type, UnsetType]=unset, selection_interval_ms: Union[int, UnsetType]=unset, **kwargs): + """ + Rollout options request payload. + + :param autostart: Whether the schedule should begin automatically. + :type autostart: bool, none_type, optional + + :param selection_interval_ms: Interval in milliseconds for uniform interval strategies. + :type selection_interval_ms: int, optional + + :param strategy: The progression strategy used by a progressive rollout. + :type strategy: RolloutStrategy + """ + if autostart is not unset: + kwargs["autostart"] = autostart + if selection_interval_ms is not unset: + kwargs["selection_interval_ms"] = selection_interval_ms + super().__init__(kwargs) + + + self_.strategy = strategy diff --git a/datadog_api_client/v2/model/rollout_strategy.py b/datadog_api_client/v2/model/rollout_strategy.py new file mode 100644 index 0000000000..4c59b23614 --- /dev/null +++ b/datadog_api_client/v2/model/rollout_strategy.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RolloutStrategy(ModelSimple): + """ + The progression strategy used by a progressive rollout. + + :param value: Must be one of ["UNIFORM_INTERVALS", "NO_ROLLOUT"]. + :type value: str + """ + + allowed_values = { + "UNIFORM_INTERVALS", + "NO_ROLLOUT", + } + UNIFORM_INTERVALS: ClassVar["RolloutStrategy"] + NO_ROLLOUT: ClassVar["RolloutStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RolloutStrategy.UNIFORM_INTERVALS = RolloutStrategy("UNIFORM_INTERVALS") +RolloutStrategy.NO_ROLLOUT = RolloutStrategy("NO_ROLLOUT") diff --git a/datadog_api_client/v2/model/routing_rule.py b/datadog_api_client/v2/model/routing_rule.py new file mode 100644 index 0000000000..f4c2fe25a1 --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.routing_rule_attributes import RoutingRuleAttributes + from datadog_api_client.v2.model.routing_rule_relationships import RoutingRuleRelationships + from datadog_api_client.v2.model.routing_rule_type import RoutingRuleType + 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 RoutingRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.routing_rule_attributes import RoutingRuleAttributes + from datadog_api_client.v2.model.routing_rule_relationships import RoutingRuleRelationships + from datadog_api_client.v2.model.routing_rule_type import RoutingRuleType + return { + "attributes": (RoutingRuleAttributes,), + "id": (str,), + "relationships": (RoutingRuleRelationships,), + "type": (RoutingRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: RoutingRuleType, attributes: Union[RoutingRuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[RoutingRuleRelationships, UnsetType]=unset, **kwargs): + """ + Represents a routing rule, including its attributes, relationships, and unique identifier. + + :param attributes: Defines the configurable attributes of a routing rule, such as actions, query, time restriction, and urgency. + :type attributes: RoutingRuleAttributes, optional + + :param id: Specifies the unique identifier of this routing rule. + :type id: str, optional + + :param relationships: Specifies relationships for a routing rule, linking to associated policy resources. + :type relationships: RoutingRuleRelationships, optional + + :param type: Team routing rules resource type. + :type type: RoutingRuleType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/routing_rule_action.py b/datadog_api_client/v2/model/routing_rule_action.py new file mode 100644 index 0000000000..dde42a1945 --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_action.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RoutingRuleAction(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Defines an action that is executed when a routing rule matches certain criteria. + + :param channel: The channel ID. + :type channel: str + + :param type: Indicates that the action is a send Slack message action. + :type type: SendSlackMessageActionType + + :param workspace: The workspace ID. + :type workspace: str + + :param team: The team ID. + :type team: str + + :param tenant: The tenant ID. + :type tenant: str + + :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. This is mutually exclusive with the top-level `time_restriction` field on the routing rule. + :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) + + @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.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/datadog_api_client/v2/model/routing_rule_attributes.py b/datadog_api_client/v2/model/routing_rule_attributes.py new file mode 100644 index 0000000000..f98f1ac165 --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.routing_rule_action import RoutingRuleAction + from datadog_api_client.v2.model.time_restrictions import TimeRestrictions + from datadog_api_client.v2.model.urgency import Urgency + 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): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.routing_rule_action import RoutingRuleAction + from datadog_api_client.v2.model.time_restrictions import TimeRestrictions + from datadog_api_client.v2.model.urgency import Urgency + return { + "actions": ([RoutingRuleAction],), + "query": (str,), + "time_restriction": (TimeRestrictions,), + "urgency": (Urgency,), + } + attribute_map = { + "actions": "actions", + "query": "query", + "time_restriction": "time_restriction", + "urgency": "urgency", + } + + def __init__(self_, actions: Union[List[Union[RoutingRuleAction, SendSlackMessageAction, SendTeamsMessageAction, TriggerWorkflowAutomationAction, RoutingRuleEscalationPolicyAction]], UnsetType]=unset, query: Union[str, UnsetType]=unset, time_restriction: Union[TimeRestrictions, UnsetType]=unset, urgency: Union[Urgency, UnsetType]=unset, **kwargs): + """ + Defines the configurable attributes of a routing rule, such as actions, query, time restriction, and urgency. + + :param actions: Specifies the list of actions to perform when the routing rule matches. + :type actions: [RoutingRuleAction], optional + + :param query: Defines the query or condition that triggers this routing rule. + :type query: str, optional + + :param time_restriction: Time restrictions during which the routing rule is active. Outside of these hours, the rule does not match and routing continues to subsequent rules. This is mutually exclusive with the action-level ``support_hours`` field. + :type time_restriction: TimeRestrictions, optional + + :param urgency: Specifies the level of urgency for a routing rule (low, high, or dynamic). + :type urgency: Urgency, optional + """ + if actions is not unset: + kwargs["actions"] = actions + if query is not unset: + kwargs["query"] = query + if time_restriction is not unset: + kwargs["time_restriction"] = time_restriction + if urgency is not unset: + kwargs["urgency"] = urgency + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/routing_rule_escalation_policy_action.py b/datadog_api_client/v2/model/routing_rule_escalation_policy_action.py new file mode 100644 index 0000000000..e3c2df56c7 --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_escalation_policy_action.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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. This is mutually exclusive with the top-level ``time_restriction`` field on the routing rule. + :type support_hours: RoutingRuleEscalationPolicyActionSupportHours, optional + + :param type: Indicates that the action pages an escalation policy. This action can be set once per routing rule item, and is mutually exclusive with the 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/datadog_api_client/v2/model/routing_rule_escalation_policy_action_support_hours.py b/datadog_api_client/v2/model/routing_rule_escalation_policy_action_support_hours.py new file mode 100644 index 0000000000..be59a2c542 --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_escalation_policy_action_support_hours.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +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. This is mutually exclusive with the top-level ``time_restriction`` field on the routing rule. + + :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/datadog_api_client/v2/model/routing_rule_escalation_policy_action_type.py b/datadog_api_client/v2/model/routing_rule_escalation_policy_action_type.py new file mode 100644 index 0000000000..47feb1bbcf --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_escalation_policy_action_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RoutingRuleEscalationPolicyActionType(ModelSimple): + """ + Indicates that the action pages an escalation policy. This action can be set once per routing rule item, and is mutually exclusive with the 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/datadog_api_client/v2/model/routing_rule_relationships.py b/datadog_api_client/v2/model/routing_rule_relationships.py new file mode 100644 index 0000000000..5efc8b15b7 --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.routing_rule_relationships_policy import RoutingRuleRelationshipsPolicy + +class RoutingRuleRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.routing_rule_relationships_policy import RoutingRuleRelationshipsPolicy + return { + "policy": (RoutingRuleRelationshipsPolicy,), + } + attribute_map = { + "policy": "policy", + } + + def __init__(self_, policy: Union[RoutingRuleRelationshipsPolicy, UnsetType]=unset, **kwargs): + """ + Specifies relationships for a routing rule, linking to associated policy resources. + + :param policy: Defines the relationship that links a routing rule to a policy. + :type policy: RoutingRuleRelationshipsPolicy, optional + """ + if policy is not unset: + kwargs["policy"] = policy + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/routing_rule_relationships_policy.py b/datadog_api_client/v2/model/routing_rule_relationships_policy.py new file mode 100644 index 0000000000..1eecccfc99 --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_relationships_policy.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.routing_rule_relationships_policy_data import RoutingRuleRelationshipsPolicyData + +class RoutingRuleRelationshipsPolicy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.routing_rule_relationships_policy_data import RoutingRuleRelationshipsPolicyData + return { + "data": (RoutingRuleRelationshipsPolicyData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RoutingRuleRelationshipsPolicyData, UnsetType]=unset, **kwargs): + """ + Defines the relationship that links a routing rule to a policy. + + :param data: Represents the policy data reference, containing the policy's ID and resource type. + :type data: RoutingRuleRelationshipsPolicyData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/routing_rule_relationships_policy_data.py b/datadog_api_client/v2/model/routing_rule_relationships_policy_data.py new file mode 100644 index 0000000000..634050bd6e --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_relationships_policy_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.routing_rule_relationships_policy_data_type import RoutingRuleRelationshipsPolicyDataType + +class RoutingRuleRelationshipsPolicyData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.routing_rule_relationships_policy_data_type import RoutingRuleRelationshipsPolicyDataType + return { + "id": (str,), + "type": (RoutingRuleRelationshipsPolicyDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: RoutingRuleRelationshipsPolicyDataType, **kwargs): + """ + Represents the policy data reference, containing the policy's ID and resource type. + + :param id: Specifies the unique identifier of the policy. + :type id: str + + :param type: Indicates that the resource is of type 'policies'. + :type type: RoutingRuleRelationshipsPolicyDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/routing_rule_relationships_policy_data_type.py b/datadog_api_client/v2/model/routing_rule_relationships_policy_data_type.py new file mode 100644 index 0000000000..1bc37ef864 --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_relationships_policy_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RoutingRuleRelationshipsPolicyDataType(ModelSimple): + """ + Indicates that the resource is of type 'policies'. + + :param value: If omitted defaults to "policies". Must be one of ["policies"]. + :type value: str + """ + + allowed_values = { + "policies", + } + POLICIES: ClassVar["RoutingRuleRelationshipsPolicyDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RoutingRuleRelationshipsPolicyDataType.POLICIES = RoutingRuleRelationshipsPolicyDataType("policies") diff --git a/datadog_api_client/v2/model/routing_rule_type.py b/datadog_api_client/v2/model/routing_rule_type.py new file mode 100644 index 0000000000..2ca5a5276c --- /dev/null +++ b/datadog_api_client/v2/model/routing_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RoutingRuleType(ModelSimple): + """ + Team routing rules resource type. + + :param value: If omitted defaults to "team_routing_rules". Must be one of ["team_routing_rules"]. + :type value: str + """ + + allowed_values = { + "team_routing_rules", + } + TEAM_ROUTING_RULES: ClassVar["RoutingRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RoutingRuleType.TEAM_ROUTING_RULES = RoutingRuleType("team_routing_rules") diff --git a/datadog_api_client/v2/model/rule_attributes.py b/datadog_api_client/v2/model/rule_attributes.py new file mode 100644 index 0000000000..97ad183672 --- /dev/null +++ b/datadog_api_client/v2/model/rule_attributes.py @@ -0,0 +1,122 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RuleAttributes(ModelNormal): + validations = { + "level": { + "inclusive_maximum": 3, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "category": (str,), + "created_at": (datetime,), + "custom": (bool,), + "description": (str,), + "enabled": (bool,), + "level": (int,), + "modified_at": (datetime,), + "name": (str,), + "owner": (str,), + "scope_query": (str,), + "scorecard_name": (str,), + } + attribute_map = { + "category": "category", + "created_at": "created_at", + "custom": "custom", + "description": "description", + "enabled": "enabled", + "level": "level", + "modified_at": "modified_at", + "name": "name", + "owner": "owner", + "scope_query": "scope_query", + "scorecard_name": "scorecard_name", + } + + def __init__(self_, category: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, custom: Union[bool, UnsetType]=unset, description: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, level: Union[int, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, owner: Union[str, UnsetType]=unset, scope_query: Union[str, UnsetType]=unset, scorecard_name: Union[str, UnsetType]=unset, **kwargs): + """ + Details of a rule. + + :param category: The scorecard name to which this rule must belong. **Deprecated**. + :type category: str, optional + + :param created_at: Creation time of the rule outcome. + :type created_at: datetime, optional + + :param custom: Defines if the rule is a custom rule. + :type custom: bool, optional + + :param description: Explanation of the rule. + :type description: str, optional + + :param enabled: If enabled, the rule is calculated as part of the score. + :type enabled: bool, optional + + :param level: The maturity level of the rule (1, 2, or 3). + :type level: int, optional + + :param modified_at: Time of the last rule outcome modification. + :type modified_at: datetime, optional + + :param name: Name of the rule. + :type name: str, optional + + :param owner: Owner of the rule. + :type owner: str, optional + + :param scope_query: A query to filter which entities this rule applies to. + :type scope_query: str, optional + + :param scorecard_name: The scorecard name to which this rule must belong. + :type scorecard_name: str, optional + """ + if category is not unset: + kwargs["category"] = category + if created_at is not unset: + kwargs["created_at"] = created_at + if custom is not unset: + kwargs["custom"] = custom + if description is not unset: + kwargs["description"] = description + if enabled is not unset: + kwargs["enabled"] = enabled + if level is not unset: + kwargs["level"] = level + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if owner is not unset: + kwargs["owner"] = owner + if scope_query is not unset: + kwargs["scope_query"] = scope_query + if scorecard_name is not unset: + kwargs["scorecard_name"] = scorecard_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rule_attributes_request.py b/datadog_api_client/v2/model/rule_attributes_request.py new file mode 100644 index 0000000000..4fd1932bf5 --- /dev/null +++ b/datadog_api_client/v2/model/rule_attributes_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RuleAttributesRequest(ModelNormal): + validations = { + "level": { + "inclusive_maximum": 3, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "description": (str,), + "enabled": (bool,), + "level": (int,), + "name": (str,), + "owner": (str,), + "scope_query": (str,), + "scorecard_name": (str,), + } + attribute_map = { + "description": "description", + "enabled": "enabled", + "level": "level", + "name": "name", + "owner": "owner", + "scope_query": "scope_query", + "scorecard_name": "scorecard_name", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, level: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, owner: Union[str, UnsetType]=unset, scope_query: Union[str, UnsetType]=unset, scorecard_name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a rule. Server-managed fields (created_at, modified_at, custom) are excluded. + + :param description: Explanation of the rule. + :type description: str, optional + + :param enabled: If enabled, the rule is calculated as part of the score. + :type enabled: bool, optional + + :param level: The maturity level of the rule (1, 2, or 3). + :type level: int, optional + + :param name: Name of the rule. + :type name: str, optional + + :param owner: Owner of the rule. + :type owner: str, optional + + :param scope_query: A query to filter which entities this rule applies to. + :type scope_query: str, optional + + :param scorecard_name: The scorecard name to which this rule must belong. + :type scorecard_name: str, optional + """ + if description is not unset: + kwargs["description"] = description + if enabled is not unset: + kwargs["enabled"] = enabled + if level is not unset: + kwargs["level"] = level + if name is not unset: + kwargs["name"] = name + if owner is not unset: + kwargs["owner"] = owner + if scope_query is not unset: + kwargs["scope_query"] = scope_query + if scorecard_name is not unset: + kwargs["scorecard_name"] = scorecard_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rule_based_view_attributes.py b/datadog_api_client/v2/model/rule_based_view_attributes.py new file mode 100644 index 0000000000..a82d766e71 --- /dev/null +++ b/datadog_api_client/v2/model/rule_based_view_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_based_view_rule import RuleBasedViewRule + +class RuleBasedViewAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_based_view_rule import RuleBasedViewRule + return { + "count": (int,), + "rules": ([RuleBasedViewRule],), + } + attribute_map = { + "count": "count", + "rules": "rules", + } + + def __init__(self_, count: int, rules: List[RuleBasedViewRule], **kwargs): + """ + Attributes of the rule-based view. + + :param count: Total number of rules in the view. + :type count: int + + :param rules: List of rules in the rule-based view. + :type rules: [RuleBasedViewRule] + """ + super().__init__(kwargs) + + + self_.count = count + self_.rules = rules diff --git a/datadog_api_client/v2/model/rule_based_view_compliance_framework.py b/datadog_api_client/v2/model/rule_based_view_compliance_framework.py new file mode 100644 index 0000000000..21a8fa175f --- /dev/null +++ b/datadog_api_client/v2/model/rule_based_view_compliance_framework.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RuleBasedViewComplianceFramework(ModelNormal): + @cached_property + def openapi_types(_): + return { + "control": (str,), + "framework": (str,), + "is_default": (bool,), + "message": (str,), + "requirement": (str,), + "version": (str,), + } + attribute_map = { + "control": "control", + "framework": "framework", + "is_default": "is_default", + "message": "message", + "requirement": "requirement", + "version": "version", + } + + def __init__(self_, control: Union[str, UnsetType]=unset, framework: Union[str, UnsetType]=unset, is_default: Union[bool, UnsetType]=unset, message: Union[str, UnsetType]=unset, requirement: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Compliance framework mapping for a rule. + + :param control: Identifier of the control inside the requirement. + :type control: str, optional + + :param framework: Handle of the compliance framework. + :type framework: str, optional + + :param is_default: Whether the framework is a Datadog default framework. ``true`` indicates a Datadog framework and ``false`` indicates a custom framework. + :type is_default: bool, optional + + :param message: Optional message describing the framework mapping for the rule. + :type message: str, optional + + :param requirement: Name of the requirement that contains the control. + :type requirement: str, optional + + :param version: Version of the compliance framework. + :type version: str, optional + """ + if control is not unset: + kwargs["control"] = control + if framework is not unset: + kwargs["framework"] = framework + if is_default is not unset: + kwargs["is_default"] = is_default + if message is not unset: + kwargs["message"] = message + if requirement is not unset: + kwargs["requirement"] = requirement + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rule_based_view_data.py b/datadog_api_client/v2/model/rule_based_view_data.py new file mode 100644 index 0000000000..55a15a283b --- /dev/null +++ b/datadog_api_client/v2/model/rule_based_view_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_based_view_attributes import RuleBasedViewAttributes + from datadog_api_client.v2.model.rule_based_view_type import RuleBasedViewType + +class RuleBasedViewData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_based_view_attributes import RuleBasedViewAttributes + from datadog_api_client.v2.model.rule_based_view_type import RuleBasedViewType + return { + "attributes": (RuleBasedViewAttributes,), + "id": (str,), + "type": (RuleBasedViewType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RuleBasedViewAttributes, id: str, type: RuleBasedViewType, **kwargs): + """ + Data envelope for the rule-based view response. + + :param attributes: Attributes of the rule-based view. + :type attributes: RuleBasedViewAttributes + + :param id: Unique identifier of the rule-based view document. + :type id: str + + :param type: The type of the resource. The value should always be ``rule_based_view``. + :type type: RuleBasedViewType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rule_based_view_response.py b/datadog_api_client/v2/model/rule_based_view_response.py new file mode 100644 index 0000000000..a53fd1747d --- /dev/null +++ b/datadog_api_client/v2/model/rule_based_view_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_based_view_data import RuleBasedViewData + +class RuleBasedViewResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_based_view_data import RuleBasedViewData + return { + "data": (RuleBasedViewData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RuleBasedViewData, **kwargs): + """ + Response containing an aggregated view of compliance rules with their finding statistics. + + :param data: Data envelope for the rule-based view response. + :type data: RuleBasedViewData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rule_based_view_rule.py b/datadog_api_client/v2/model/rule_based_view_rule.py new file mode 100644 index 0000000000..309a4a898b --- /dev/null +++ b/datadog_api_client/v2/model/rule_based_view_rule.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_based_view_compliance_framework import RuleBasedViewComplianceFramework + from datadog_api_client.v2.model.rule_based_view_rule_stats import RuleBasedViewRuleStats + from datadog_api_client.v2.model.rule_based_view_rule_category import RuleBasedViewRuleCategory + +class RuleBasedViewRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_based_view_compliance_framework import RuleBasedViewComplianceFramework + from datadog_api_client.v2.model.rule_based_view_rule_stats import RuleBasedViewRuleStats + from datadog_api_client.v2.model.rule_based_view_rule_category import RuleBasedViewRuleCategory + return { + "compliance_frameworks": ([RuleBasedViewComplianceFramework],), + "enabled": (bool,), + "id": (str,), + "name": (str,), + "resource_attributes": ([str],), + "resource_category": (str,), + "resource_type": (str,), + "stats": (RuleBasedViewRuleStats,), + "status": (str,), + "tags": ([str],), + "type": (RuleBasedViewRuleCategory,), + } + attribute_map = { + "compliance_frameworks": "compliance_frameworks", + "enabled": "enabled", + "id": "id", + "name": "name", + "resource_attributes": "resourceAttributes", + "resource_category": "resourceCategory", + "resource_type": "resourceType", + "stats": "stats", + "status": "status", + "tags": "tags", + "type": "type", + } + + def __init__(self_, compliance_frameworks: List[RuleBasedViewComplianceFramework], enabled: bool, id: str, name: str, resource_attributes: List[str], resource_category: str, resource_type: str, stats: RuleBasedViewRuleStats, status: str, tags: List[str], type: RuleBasedViewRuleCategory, **kwargs): + """ + A compliance rule along with its evaluation statistics and framework mappings. + + :param compliance_frameworks: List of compliance framework mappings associated with the rule. + :type compliance_frameworks: [RuleBasedViewComplianceFramework] + + :param enabled: Whether the rule is enabled. + :type enabled: bool + + :param id: Unique identifier of the rule. + :type id: str + + :param name: Human-readable name of the rule. + :type name: str + + :param resource_attributes: List of resource attribute names exposed by the rule. + :type resource_attributes: [str] + + :param resource_category: Resource category targeted by the rule. + :type resource_category: str + + :param resource_type: Resource type targeted by the rule. + :type resource_type: str + + :param stats: Counts of findings for the rule, grouped by their evaluation status. + :type stats: RuleBasedViewRuleStats + + :param status: Severity associated with the rule (for example, ``info`` , ``low`` , ``medium`` , ``high`` , or ``critical`` ). + :type status: str + + :param tags: List of tags attached to the rule. + :type tags: [str] + + :param type: The category of the security rule. + :type type: RuleBasedViewRuleCategory + """ + super().__init__(kwargs) + + + self_.compliance_frameworks = compliance_frameworks + self_.enabled = enabled + self_.id = id + self_.name = name + self_.resource_attributes = resource_attributes + self_.resource_category = resource_category + self_.resource_type = resource_type + self_.stats = stats + self_.status = status + self_.tags = tags + self_.type = type diff --git a/datadog_api_client/v2/model/rule_based_view_rule_category.py b/datadog_api_client/v2/model/rule_based_view_rule_category.py new file mode 100644 index 0000000000..20ace8bf7e --- /dev/null +++ b/datadog_api_client/v2/model/rule_based_view_rule_category.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RuleBasedViewRuleCategory(ModelSimple): + """ + The category of the security rule. + + :param value: Must be one of ["cloud_configuration", "infrastructure_configuration", "api_security"]. + :type value: str + """ + + allowed_values = { + "cloud_configuration", + "infrastructure_configuration", + "api_security", + } + CLOUD_CONFIGURATION: ClassVar["RuleBasedViewRuleCategory"] + INFRASTRUCTURE_CONFIGURATION: ClassVar["RuleBasedViewRuleCategory"] + API_SECURITY: ClassVar["RuleBasedViewRuleCategory"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RuleBasedViewRuleCategory.CLOUD_CONFIGURATION = RuleBasedViewRuleCategory("cloud_configuration") +RuleBasedViewRuleCategory.INFRASTRUCTURE_CONFIGURATION = RuleBasedViewRuleCategory("infrastructure_configuration") +RuleBasedViewRuleCategory.API_SECURITY = RuleBasedViewRuleCategory("api_security") diff --git a/datadog_api_client/v2/model/rule_based_view_rule_stats.py b/datadog_api_client/v2/model/rule_based_view_rule_stats.py new file mode 100644 index 0000000000..a710e6619b --- /dev/null +++ b/datadog_api_client/v2/model/rule_based_view_rule_stats.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RuleBasedViewRuleStats(ModelNormal): + @cached_property + def openapi_types(_): + return { + "fail": (int,), + "muted": (int,), + "_pass": (int,), + } + attribute_map = { + "fail": "fail", + "muted": "muted", + "_pass": "pass", + } + + def __init__(self_, fail: int, muted: int, _pass: int, **kwargs): + """ + Counts of findings for the rule, grouped by their evaluation status. + + :param fail: Number of findings that failed evaluation. + :type fail: int + + :param muted: Number of findings that have been muted. + :type muted: int + + :param _pass: Number of findings that passed evaluation. + :type _pass: int + """ + super().__init__(kwargs) + + + self_.fail = fail + self_.muted = muted + self_._pass = _pass diff --git a/datadog_api_client/v2/model/rule_based_view_type.py b/datadog_api_client/v2/model/rule_based_view_type.py new file mode 100644 index 0000000000..515a95f4f7 --- /dev/null +++ b/datadog_api_client/v2/model/rule_based_view_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RuleBasedViewType(ModelSimple): + """ + The type of the resource. The value should always be `rule_based_view`. + + :param value: If omitted defaults to "rule_based_view". Must be one of ["rule_based_view"]. + :type value: str + """ + + allowed_values = { + "rule_based_view", + } + RULE_BASED_VIEW: ClassVar["RuleBasedViewType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RuleBasedViewType.RULE_BASED_VIEW = RuleBasedViewType("rule_based_view") diff --git a/datadog_api_client/v2/model/rule_outcome_relationships.py b/datadog_api_client/v2/model/rule_outcome_relationships.py new file mode 100644 index 0000000000..261168966e --- /dev/null +++ b/datadog_api_client/v2/model/rule_outcome_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_outcome import RelationshipToOutcome + +class RuleOutcomeRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_outcome import RelationshipToOutcome + return { + "rule": (RelationshipToOutcome,), + } + attribute_map = { + "rule": "rule", + } + + def __init__(self_, rule: Union[RelationshipToOutcome, UnsetType]=unset, **kwargs): + """ + The JSON:API relationship to a scorecard rule. + + :param rule: The JSON:API relationship to a scorecard outcome. + :type rule: RelationshipToOutcome, optional + """ + if rule is not unset: + kwargs["rule"] = rule + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rule_severity.py b/datadog_api_client/v2/model/rule_severity.py new file mode 100644 index 0000000000..b13bb65b0c --- /dev/null +++ b/datadog_api_client/v2/model/rule_severity.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RuleSeverity(ModelSimple): + """ + Severity of a security rule. + + :param value: Must be one of ["critical", "high", "medium", "low", "unknown", "info"]. + :type value: str + """ + + allowed_values = { + "critical", + "high", + "medium", + "low", + "unknown", + "info", + } + CRITICAL: ClassVar["RuleSeverity"] + HIGH: ClassVar["RuleSeverity"] + MEDIUM: ClassVar["RuleSeverity"] + LOW: ClassVar["RuleSeverity"] + UNKNOWN: ClassVar["RuleSeverity"] + INFO: ClassVar["RuleSeverity"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RuleSeverity.CRITICAL = RuleSeverity("critical") +RuleSeverity.HIGH = RuleSeverity("high") +RuleSeverity.MEDIUM = RuleSeverity("medium") +RuleSeverity.LOW = RuleSeverity("low") +RuleSeverity.UNKNOWN = RuleSeverity("unknown") +RuleSeverity.INFO = RuleSeverity("info") diff --git a/datadog_api_client/v2/model/rule_type.py b/datadog_api_client/v2/model/rule_type.py new file mode 100644 index 0000000000..df49514573 --- /dev/null +++ b/datadog_api_client/v2/model/rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RuleType(ModelSimple): + """ + The JSON:API type for scorecard rules. + + :param value: If omitted defaults to "rule". Must be one of ["rule"]. + :type value: str + """ + + allowed_values = { + "rule", + } + RULE: ClassVar["RuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RuleType.RULE = RuleType("rule") diff --git a/datadog_api_client/v2/model/rule_types_items.py b/datadog_api_client/v2/model/rule_types_items.py new file mode 100644 index 0000000000..6e68d34cfe --- /dev/null +++ b/datadog_api_client/v2/model/rule_types_items.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RuleTypesItems(ModelSimple): + """ + Security rule type which can be used in security rules. + Signal-based notification rules can filter signals based on rule types application_security, log_detection, + workload_security, signal_correlation, cloud_configuration and infrastructure_configuration. + Vulnerability-based notification rules can filter vulnerabilities based on rule types application_code_vulnerability, + application_library_vulnerability, attack_path, container_image_vulnerability, identity_risk, misconfiguration, + api_security, host_vulnerability, iac_misconfiguration, sast_vulnerability, secret_vulnerability and workload_activity. + + :param value: Must be one of ["application_security", "log_detection", "workload_security", "signal_correlation", "cloud_configuration", "infrastructure_configuration", "application_code_vulnerability", "application_library_vulnerability", "attack_path", "container_image_vulnerability", "identity_risk", "misconfiguration", "api_security", "host_vulnerability", "iac_misconfiguration", "sast_vulnerability", "secret_vulnerability", "workload_activity"]. + :type value: str + """ + + allowed_values = { + "application_security", + "log_detection", + "workload_security", + "signal_correlation", + "cloud_configuration", + "infrastructure_configuration", + "application_code_vulnerability", + "application_library_vulnerability", + "attack_path", + "container_image_vulnerability", + "identity_risk", + "misconfiguration", + "api_security", + "host_vulnerability", + "iac_misconfiguration", + "sast_vulnerability", + "secret_vulnerability", + "workload_activity", + } + APPLICATION_SECURITY: ClassVar["RuleTypesItems"] + LOG_DETECTION: ClassVar["RuleTypesItems"] + WORKLOAD_SECURITY: ClassVar["RuleTypesItems"] + SIGNAL_CORRELATION: ClassVar["RuleTypesItems"] + CLOUD_CONFIGURATION: ClassVar["RuleTypesItems"] + INFRASTRUCTURE_CONFIGURATION: ClassVar["RuleTypesItems"] + APPLICATION_CODE_VULNERABILITY: ClassVar["RuleTypesItems"] + APPLICATION_LIBRARY_VULNERABILITY: ClassVar["RuleTypesItems"] + ATTACK_PATH: ClassVar["RuleTypesItems"] + CONTAINER_IMAGE_VULNERABILITY: ClassVar["RuleTypesItems"] + IDENTITY_RISK: ClassVar["RuleTypesItems"] + MISCONFIGURATION: ClassVar["RuleTypesItems"] + API_SECURITY: ClassVar["RuleTypesItems"] + HOST_VULNERABILITY: ClassVar["RuleTypesItems"] + IAC_MISCONFIGURATION: ClassVar["RuleTypesItems"] + SAST_VULNERABILITY: ClassVar["RuleTypesItems"] + SECRET_VULNERABILITY: ClassVar["RuleTypesItems"] + WORKLOAD_ACTIVITY: ClassVar["RuleTypesItems"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RuleTypesItems.APPLICATION_SECURITY = RuleTypesItems("application_security") +RuleTypesItems.LOG_DETECTION = RuleTypesItems("log_detection") +RuleTypesItems.WORKLOAD_SECURITY = RuleTypesItems("workload_security") +RuleTypesItems.SIGNAL_CORRELATION = RuleTypesItems("signal_correlation") +RuleTypesItems.CLOUD_CONFIGURATION = RuleTypesItems("cloud_configuration") +RuleTypesItems.INFRASTRUCTURE_CONFIGURATION = RuleTypesItems("infrastructure_configuration") +RuleTypesItems.APPLICATION_CODE_VULNERABILITY = RuleTypesItems("application_code_vulnerability") +RuleTypesItems.APPLICATION_LIBRARY_VULNERABILITY = RuleTypesItems("application_library_vulnerability") +RuleTypesItems.ATTACK_PATH = RuleTypesItems("attack_path") +RuleTypesItems.CONTAINER_IMAGE_VULNERABILITY = RuleTypesItems("container_image_vulnerability") +RuleTypesItems.IDENTITY_RISK = RuleTypesItems("identity_risk") +RuleTypesItems.MISCONFIGURATION = RuleTypesItems("misconfiguration") +RuleTypesItems.API_SECURITY = RuleTypesItems("api_security") +RuleTypesItems.HOST_VULNERABILITY = RuleTypesItems("host_vulnerability") +RuleTypesItems.IAC_MISCONFIGURATION = RuleTypesItems("iac_misconfiguration") +RuleTypesItems.SAST_VULNERABILITY = RuleTypesItems("sast_vulnerability") +RuleTypesItems.SECRET_VULNERABILITY = RuleTypesItems("secret_vulnerability") +RuleTypesItems.WORKLOAD_ACTIVITY = RuleTypesItems("workload_activity") diff --git a/datadog_api_client/v2/model/rule_user.py b/datadog_api_client/v2/model/rule_user.py new file mode 100644 index 0000000000..22dce42c47 --- /dev/null +++ b/datadog_api_client/v2/model/rule_user.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RuleUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str,), + } + attribute_map = { + "handle": "handle", + "name": "name", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + User creating or modifying a rule. + + :param handle: The user handle. + :type handle: str, optional + + :param name: The user name. + :type name: str, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rule_version_history.py b/datadog_api_client/v2/model/rule_version_history.py new file mode 100644 index 0000000000..f966a0f187 --- /dev/null +++ b/datadog_api_client/v2/model/rule_version_history.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_versions import RuleVersions + from datadog_api_client.v2.model.security_monitoring_standard_rule_response import SecurityMonitoringStandardRuleResponse + from datadog_api_client.v2.model.security_monitoring_signal_rule_response import SecurityMonitoringSignalRuleResponse + +class RuleVersionHistory(ModelNormal): + validations = { + "count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_versions import RuleVersions + return { + "count": (int,), + "data": ({str: (RuleVersions,)},), + } + attribute_map = { + "count": "count", + "data": "data", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, data: Union[Dict[str, RuleVersions], UnsetType]=unset, **kwargs): + """ + Response object containing the version history of a rule. + + :param count: The number of rule versions. + :type count: int, optional + + :param data: The ``RuleVersionHistory`` ``data``. + :type data: {str: (RuleVersions,)}, optional + """ + if count is not unset: + kwargs["count"] = count + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rule_versions.py b/datadog_api_client/v2/model/rule_versions.py new file mode 100644 index 0000000000..b733d0e4f3 --- /dev/null +++ b/datadog_api_client/v2/model/rule_versions.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.version_history_update import VersionHistoryUpdate + from datadog_api_client.v2.model.security_monitoring_rule_response import SecurityMonitoringRuleResponse + from datadog_api_client.v2.model.security_monitoring_standard_rule_response import SecurityMonitoringStandardRuleResponse + from datadog_api_client.v2.model.security_monitoring_signal_rule_response import SecurityMonitoringSignalRuleResponse + +class RuleVersions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.version_history_update import VersionHistoryUpdate + from datadog_api_client.v2.model.security_monitoring_rule_response import SecurityMonitoringRuleResponse + return { + "changes": ([VersionHistoryUpdate],), + "rule": (SecurityMonitoringRuleResponse,), + } + attribute_map = { + "changes": "changes", + "rule": "rule", + } + + def __init__(self_, changes: Union[List[VersionHistoryUpdate], UnsetType]=unset, rule: Union[SecurityMonitoringRuleResponse, SecurityMonitoringStandardRuleResponse, SecurityMonitoringSignalRuleResponse, UnsetType]=unset, **kwargs): + """ + A rule version with a list of updates. + + :param changes: A list of changes. + :type changes: [VersionHistoryUpdate], optional + + :param rule: Create a new rule. + :type rule: SecurityMonitoringRuleResponse, optional + """ + if changes is not unset: + kwargs["changes"] = changes + if rule is not unset: + kwargs["rule"] = rule + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rules_validate_query_request.py b/datadog_api_client/v2/model/rules_validate_query_request.py new file mode 100644 index 0000000000..044a0d687f --- /dev/null +++ b/datadog_api_client/v2/model/rules_validate_query_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rules_validate_query_request_data import RulesValidateQueryRequestData + +class RulesValidateQueryRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rules_validate_query_request_data import RulesValidateQueryRequestData + return { + "data": (RulesValidateQueryRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RulesValidateQueryRequestData, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesValidateQueryRequest`` object. + + :param data: The definition of ``RulesValidateQueryRequestData`` object. + :type data: RulesValidateQueryRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rules_validate_query_request_data.py b/datadog_api_client/v2/model/rules_validate_query_request_data.py new file mode 100644 index 0000000000..ed9fda4bda --- /dev/null +++ b/datadog_api_client/v2/model/rules_validate_query_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rules_validate_query_request_data_attributes import RulesValidateQueryRequestDataAttributes + from datadog_api_client.v2.model.rules_validate_query_request_data_type import RulesValidateQueryRequestDataType + +class RulesValidateQueryRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rules_validate_query_request_data_attributes import RulesValidateQueryRequestDataAttributes + from datadog_api_client.v2.model.rules_validate_query_request_data_type import RulesValidateQueryRequestDataType + return { + "attributes": (RulesValidateQueryRequestDataAttributes,), + "id": (str,), + "type": (RulesValidateQueryRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: RulesValidateQueryRequestDataType, attributes: Union[RulesValidateQueryRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesValidateQueryRequestData`` object. + + :param attributes: The definition of ``RulesValidateQueryRequestDataAttributes`` object. + :type attributes: RulesValidateQueryRequestDataAttributes, optional + + :param id: The ``RulesValidateQueryRequestData`` ``id``. + :type id: str, optional + + :param type: Validate query resource type. + :type type: RulesValidateQueryRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/rules_validate_query_request_data_attributes.py b/datadog_api_client/v2/model/rules_validate_query_request_data_attributes.py new file mode 100644 index 0000000000..ab75a043c8 --- /dev/null +++ b/datadog_api_client/v2/model/rules_validate_query_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RulesValidateQueryRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "Query", + } + + def __init__(self_, query: str, **kwargs): + """ + The definition of ``RulesValidateQueryRequestDataAttributes`` object. + + :param query: The ``attributes`` ``Query``. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v2/model/rules_validate_query_request_data_type.py b/datadog_api_client/v2/model/rules_validate_query_request_data_type.py new file mode 100644 index 0000000000..5a0a26e20a --- /dev/null +++ b/datadog_api_client/v2/model/rules_validate_query_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RulesValidateQueryRequestDataType(ModelSimple): + """ + Validate query resource type. + + :param value: If omitted defaults to "validate_query". Must be one of ["validate_query"]. + :type value: str + """ + + allowed_values = { + "validate_query", + } + VALIDATE_QUERY: ClassVar["RulesValidateQueryRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RulesValidateQueryRequestDataType.VALIDATE_QUERY = RulesValidateQueryRequestDataType("validate_query") diff --git a/datadog_api_client/v2/model/rules_validate_query_response.py b/datadog_api_client/v2/model/rules_validate_query_response.py new file mode 100644 index 0000000000..406af90dd4 --- /dev/null +++ b/datadog_api_client/v2/model/rules_validate_query_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rules_validate_query_response_data import RulesValidateQueryResponseData + +class RulesValidateQueryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rules_validate_query_response_data import RulesValidateQueryResponseData + return { + "data": (RulesValidateQueryResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RulesValidateQueryResponseData, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesValidateQueryResponse`` object. + + :param data: The definition of ``RulesValidateQueryResponseData`` object. + :type data: RulesValidateQueryResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rules_validate_query_response_data.py b/datadog_api_client/v2/model/rules_validate_query_response_data.py new file mode 100644 index 0000000000..43e76e4856 --- /dev/null +++ b/datadog_api_client/v2/model/rules_validate_query_response_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rules_validate_query_response_data_attributes import RulesValidateQueryResponseDataAttributes + from datadog_api_client.v2.model.rules_validate_query_response_data_type import RulesValidateQueryResponseDataType + +class RulesValidateQueryResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rules_validate_query_response_data_attributes import RulesValidateQueryResponseDataAttributes + from datadog_api_client.v2.model.rules_validate_query_response_data_type import RulesValidateQueryResponseDataType + return { + "attributes": (RulesValidateQueryResponseDataAttributes,), + "id": (str,), + "type": (RulesValidateQueryResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: RulesValidateQueryResponseDataType, attributes: Union[RulesValidateQueryResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesValidateQueryResponseData`` object. + + :param attributes: The definition of ``RulesValidateQueryResponseDataAttributes`` object. + :type attributes: RulesValidateQueryResponseDataAttributes, optional + + :param id: The ``RulesValidateQueryResponseData`` ``id``. + :type id: str, optional + + :param type: Validate response resource type. + :type type: RulesValidateQueryResponseDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/rules_validate_query_response_data_attributes.py b/datadog_api_client/v2/model/rules_validate_query_response_data_attributes.py new file mode 100644 index 0000000000..06827136d0 --- /dev/null +++ b/datadog_api_client/v2/model/rules_validate_query_response_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RulesValidateQueryResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "canonical": (str,), + } + attribute_map = { + "canonical": "Canonical", + } + + def __init__(self_, canonical: str, **kwargs): + """ + The definition of ``RulesValidateQueryResponseDataAttributes`` object. + + :param canonical: The ``attributes`` ``Canonical``. + :type canonical: str + """ + super().__init__(kwargs) + + + self_.canonical = canonical diff --git a/datadog_api_client/v2/model/rules_validate_query_response_data_type.py b/datadog_api_client/v2/model/rules_validate_query_response_data_type.py new file mode 100644 index 0000000000..c0aab2d766 --- /dev/null +++ b/datadog_api_client/v2/model/rules_validate_query_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RulesValidateQueryResponseDataType(ModelSimple): + """ + Validate response resource type. + + :param value: If omitted defaults to "validate_response". Must be one of ["validate_response"]. + :type value: str + """ + + allowed_values = { + "validate_response", + } + VALIDATE_RESPONSE: ClassVar["RulesValidateQueryResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RulesValidateQueryResponseDataType.VALIDATE_RESPONSE = RulesValidateQueryResponseDataType("validate_response") diff --git a/datadog_api_client/v2/model/ruleset_item_metadata.py b/datadog_api_client/v2/model/ruleset_item_metadata.py new file mode 100644 index 0000000000..9beeea0bd1 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_item_metadata.py @@ -0,0 +1,37 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RulesetItemMetadata(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + _nullable = True + + def __init__(self_, **kwargs): + """ + The ``items`` ``metadata``. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ruleset_resp.py b/datadog_api_client/v2/model/ruleset_resp.py new file mode 100644 index 0000000000..b5eb7ea521 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ruleset_resp_data import RulesetRespData + +class RulesetResp(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ruleset_resp_data import RulesetRespData + return { + "data": (RulesetRespData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RulesetRespData, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesetResp`` object. + + :param data: The definition of ``RulesetRespData`` object. + :type data: RulesetRespData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ruleset_resp_array.py b/datadog_api_client/v2/model/ruleset_resp_array.py new file mode 100644 index 0000000000..be560ba183 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ruleset_resp_data import RulesetRespData + +class RulesetRespArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ruleset_resp_data import RulesetRespData + return { + "data": ([RulesetRespData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RulesetRespData], **kwargs): + """ + The definition of ``RulesetRespArray`` object. + + :param data: The ``RulesetRespArray`` ``data``. + :type data: [RulesetRespData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ruleset_resp_data.py b/datadog_api_client/v2/model/ruleset_resp_data.py new file mode 100644 index 0000000000..e6287061cf --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ruleset_resp_data_attributes import RulesetRespDataAttributes + from datadog_api_client.v2.model.ruleset_resp_data_type import RulesetRespDataType + +class RulesetRespData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ruleset_resp_data_attributes import RulesetRespDataAttributes + from datadog_api_client.v2.model.ruleset_resp_data_type import RulesetRespDataType + return { + "attributes": (RulesetRespDataAttributes,), + "id": (str,), + "type": (RulesetRespDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: RulesetRespDataType, attributes: Union[RulesetRespDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesetRespData`` object. + + :param attributes: The definition of ``RulesetRespDataAttributes`` object. + :type attributes: RulesetRespDataAttributes, optional + + :param id: The ``RulesetRespData`` ``id``. + :type id: str, optional + + :param type: Ruleset resource type. + :type type: RulesetRespDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/ruleset_resp_data_attributes.py b/datadog_api_client/v2/model/ruleset_resp_data_attributes.py new file mode 100644 index 0000000000..89628857f0 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data_attributes.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ruleset_resp_data_attributes_created import RulesetRespDataAttributesCreated + from datadog_api_client.v2.model.ruleset_resp_data_attributes_modified import RulesetRespDataAttributesModified + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items import RulesetRespDataAttributesRulesItems + +class RulesetRespDataAttributes(ModelNormal): + validations = { + "position": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ruleset_resp_data_attributes_created import RulesetRespDataAttributesCreated + from datadog_api_client.v2.model.ruleset_resp_data_attributes_modified import RulesetRespDataAttributesModified + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items import RulesetRespDataAttributesRulesItems + return { + "created": (RulesetRespDataAttributesCreated,), + "enabled": (bool,), + "last_modified_user_uuid": (str,), + "modified": (RulesetRespDataAttributesModified,), + "name": (str,), + "position": (int,), + "processing_status": (str,), + "rules": ([RulesetRespDataAttributesRulesItems],), + "version": (int,), + } + attribute_map = { + "created": "created", + "enabled": "enabled", + "last_modified_user_uuid": "last_modified_user_uuid", + "modified": "modified", + "name": "name", + "position": "position", + "processing_status": "processing_status", + "rules": "rules", + "version": "version", + } + + def __init__(self_, created: RulesetRespDataAttributesCreated, enabled: bool, last_modified_user_uuid: str, modified: RulesetRespDataAttributesModified, name: str, position: int, rules: List[RulesetRespDataAttributesRulesItems], version: int, processing_status: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesetRespDataAttributes`` object. + + :param created: The definition of ``RulesetRespDataAttributesCreated`` object. + :type created: RulesetRespDataAttributesCreated + + :param enabled: The ``attributes`` ``enabled``. + :type enabled: bool + + :param last_modified_user_uuid: The ``attributes`` ``last_modified_user_uuid``. + :type last_modified_user_uuid: str + + :param modified: The definition of ``RulesetRespDataAttributesModified`` object. + :type modified: RulesetRespDataAttributesModified + + :param name: The ``attributes`` ``name``. + :type name: str + + :param position: The ``attributes`` ``position``. + :type position: int + + :param processing_status: The ``attributes`` ``processing_status``. + :type processing_status: str, optional + + :param rules: The ``attributes`` ``rules``. + :type rules: [RulesetRespDataAttributesRulesItems] + + :param version: The ``attributes`` ``version``. + :type version: int + """ + if processing_status is not unset: + kwargs["processing_status"] = processing_status + super().__init__(kwargs) + + + self_.created = created + self_.enabled = enabled + self_.last_modified_user_uuid = last_modified_user_uuid + self_.modified = modified + self_.name = name + self_.position = position + self_.rules = rules + self_.version = version diff --git a/datadog_api_client/v2/model/ruleset_resp_data_attributes_created.py b/datadog_api_client/v2/model/ruleset_resp_data_attributes_created.py new file mode 100644 index 0000000000..faa14129d6 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data_attributes_created.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RulesetRespDataAttributesCreated(ModelNormal): + validations = { + "nanos": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "nanos": (int,), + "seconds": (int,), + } + attribute_map = { + "nanos": "nanos", + "seconds": "seconds", + } + + def __init__(self_, nanos: Union[int, UnsetType]=unset, seconds: Union[int, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesetRespDataAttributesCreated`` object. + + :param nanos: The ``created`` ``nanos``. + :type nanos: int, optional + + :param seconds: The ``created`` ``seconds``. + :type seconds: int, optional + """ + if nanos is not unset: + kwargs["nanos"] = nanos + if seconds is not unset: + kwargs["seconds"] = seconds + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ruleset_resp_data_attributes_modified.py b/datadog_api_client/v2/model/ruleset_resp_data_attributes_modified.py new file mode 100644 index 0000000000..b88270ce9b --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data_attributes_modified.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RulesetRespDataAttributesModified(ModelNormal): + validations = { + "nanos": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "nanos": (int,), + "seconds": (int,), + } + attribute_map = { + "nanos": "nanos", + "seconds": "seconds", + } + + def __init__(self_, nanos: Union[int, UnsetType]=unset, seconds: Union[int, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesetRespDataAttributesModified`` object. + + :param nanos: The ``modified`` ``nanos``. + :type nanos: int, optional + + :param seconds: The ``modified`` ``seconds``. + :type seconds: int, optional + """ + if nanos is not unset: + kwargs["nanos"] = nanos + if seconds is not unset: + kwargs["seconds"] = seconds + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items.py b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items.py new file mode 100644 index 0000000000..8d8fc87eab --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping + from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query import RulesetRespDataAttributesRulesItemsQuery + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_reference_table import RulesetRespDataAttributesRulesItemsReferenceTable + +class RulesetRespDataAttributesRulesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping + from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query import RulesetRespDataAttributesRulesItemsQuery + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_reference_table import RulesetRespDataAttributesRulesItemsReferenceTable + return { + "enabled": (bool,), + "mapping": (DataAttributesRulesItemsMapping,), + "metadata": (RulesetItemMetadata,), + "name": (str,), + "query": (RulesetRespDataAttributesRulesItemsQuery,), + "reference_table": (RulesetRespDataAttributesRulesItemsReferenceTable,), + } + attribute_map = { + "enabled": "enabled", + "mapping": "mapping", + "metadata": "metadata", + "name": "name", + "query": "query", + "reference_table": "reference_table", + } + + def __init__(self_, enabled: bool, name: str, mapping: Union[DataAttributesRulesItemsMapping, none_type, UnsetType]=unset, metadata: Union[RulesetItemMetadata, none_type, UnsetType]=unset, query: Union[RulesetRespDataAttributesRulesItemsQuery, none_type, UnsetType]=unset, reference_table: Union[RulesetRespDataAttributesRulesItemsReferenceTable, none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesetRespDataAttributesRulesItems`` object. + + :param enabled: The ``items`` ``enabled``. + :type enabled: bool + + :param mapping: The definition of ``DataAttributesRulesItemsMapping`` object. + :type mapping: DataAttributesRulesItemsMapping, none_type, optional + + :param metadata: The ``items`` ``metadata``. + :type metadata: RulesetItemMetadata, none_type, optional + + :param name: The ``items`` ``name``. + :type name: str + + :param query: The definition of ``RulesetRespDataAttributesRulesItemsQuery`` object. + :type query: RulesetRespDataAttributesRulesItemsQuery, none_type, optional + + :param reference_table: The definition of ``RulesetRespDataAttributesRulesItemsReferenceTable`` object. + :type reference_table: RulesetRespDataAttributesRulesItemsReferenceTable, none_type, optional + """ + if mapping is not unset: + kwargs["mapping"] = mapping + if metadata is not unset: + kwargs["metadata"] = metadata + if query is not unset: + kwargs["query"] = query + if reference_table is not unset: + kwargs["reference_table"] = reference_table + super().__init__(kwargs) + + + self_.enabled = enabled + self_.name = name diff --git a/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query.py b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query.py new file mode 100644 index 0000000000..d990f07e66 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query_addition import RulesetRespDataAttributesRulesItemsQueryAddition + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + +class RulesetRespDataAttributesRulesItemsQuery(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query_addition import RulesetRespDataAttributesRulesItemsQueryAddition + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + return { + "addition": (RulesetRespDataAttributesRulesItemsQueryAddition,), + "case_insensitivity": (bool,), + "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), + "query": (str,), + } + attribute_map = { + "addition": "addition", + "case_insensitivity": "case_insensitivity", + "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", + "query": "query", + } + + def __init__(self_, addition: Union[RulesetRespDataAttributesRulesItemsQueryAddition, none_type], query: str, case_insensitivity: Union[bool, UnsetType]=unset, if_not_exists: Union[bool, UnsetType]=unset, if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesetRespDataAttributesRulesItemsQuery`` object. + + :param addition: The definition of ``RulesetRespDataAttributesRulesItemsQueryAddition`` object. + :type addition: RulesetRespDataAttributesRulesItemsQueryAddition, none_type + + :param case_insensitivity: The ``query`` ``case_insensitivity``. + :type case_insensitivity: bool, optional + + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``query`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + + :param query: The ``query`` ``query``. + :type query: str + """ + if case_insensitivity is not unset: + kwargs["case_insensitivity"] = case_insensitivity + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists + super().__init__(kwargs) + + + self_.addition = addition + self_.query = query diff --git a/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query_addition.py b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query_addition.py new file mode 100644 index 0000000000..d6140df0c8 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query_addition.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RulesetRespDataAttributesRulesItemsQueryAddition(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: str, value: str, **kwargs): + """ + The definition of ``RulesetRespDataAttributesRulesItemsQueryAddition`` object. + + :param key: The ``addition`` ``key``. + :type key: str + + :param value: The ``addition`` ``value``. + :type value: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.value = value diff --git a/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table.py b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table.py new file mode 100644 index 0000000000..4f835d2b40 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_reference_table_field_pairs_items import RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + +class RulesetRespDataAttributesRulesItemsReferenceTable(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_reference_table_field_pairs_items import RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + return { + "case_insensitivity": (bool,), + "field_pairs": ([RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems],), + "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), + "source_keys": ([str],), + "table_name": (str,), + } + attribute_map = { + "case_insensitivity": "case_insensitivity", + "field_pairs": "field_pairs", + "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", + "source_keys": "source_keys", + "table_name": "table_name", + } + + def __init__(self_, field_pairs: List[RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems], source_keys: List[str], table_name: str, case_insensitivity: Union[bool, UnsetType]=unset, if_not_exists: Union[bool, UnsetType]=unset, if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType]=unset, **kwargs): + """ + The definition of ``RulesetRespDataAttributesRulesItemsReferenceTable`` object. + + :param case_insensitivity: The ``reference_table`` ``case_insensitivity``. + :type case_insensitivity: bool, optional + + :param field_pairs: The ``reference_table`` ``field_pairs``. + :type field_pairs: [RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems] + + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``reference_table`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + + :param source_keys: The ``reference_table`` ``source_keys``. + :type source_keys: [str] + + :param table_name: The ``reference_table`` ``table_name``. + :type table_name: str + """ + if case_insensitivity is not unset: + kwargs["case_insensitivity"] = case_insensitivity + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists + super().__init__(kwargs) + + + self_.field_pairs = field_pairs + self_.source_keys = source_keys + self_.table_name = table_name diff --git a/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table_field_pairs_items.py b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table_field_pairs_items.py new file mode 100644 index 0000000000..57c9a4612f --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table_field_pairs_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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "input_column": (str,), + "output_key": (str,), + } + attribute_map = { + "input_column": "input_column", + "output_key": "output_key", + } + + def __init__(self_, input_column: str, output_key: str, **kwargs): + """ + The definition of ``RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems`` object. + + :param input_column: The ``items`` ``input_column``. + :type input_column: str + + :param output_key: The ``items`` ``output_key``. + :type output_key: str + """ + super().__init__(kwargs) + + + self_.input_column = input_column + self_.output_key = output_key diff --git a/datadog_api_client/v2/model/ruleset_resp_data_type.py b/datadog_api_client/v2/model/ruleset_resp_data_type.py new file mode 100644 index 0000000000..96e1df4c9c --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_resp_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RulesetRespDataType(ModelSimple): + """ + Ruleset resource type. + + :param value: If omitted defaults to "ruleset". Must be one of ["ruleset"]. + :type value: str + """ + + allowed_values = { + "ruleset", + } + RULESET: ClassVar["RulesetRespDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RulesetRespDataType.RULESET = RulesetRespDataType("ruleset") diff --git a/datadog_api_client/v2/model/ruleset_status_resp_array.py b/datadog_api_client/v2/model/ruleset_status_resp_array.py new file mode 100644 index 0000000000..85b85be2d5 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_status_resp_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ruleset_status_resp_data import RulesetStatusRespData + +class RulesetStatusRespArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ruleset_status_resp_data import RulesetStatusRespData + return { + "data": ([RulesetStatusRespData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[RulesetStatusRespData], **kwargs): + """ + Processing statuses for all tag pipeline rulesets in the specified organization. + + :param data: Processing status for a tag pipeline ruleset. + :type data: [RulesetStatusRespData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ruleset_status_resp_data.py b/datadog_api_client/v2/model/ruleset_status_resp_data.py new file mode 100644 index 0000000000..ef808d9617 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_status_resp_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ruleset_status_resp_data_attributes import RulesetStatusRespDataAttributes + from datadog_api_client.v2.model.ruleset_status_resp_data_type import RulesetStatusRespDataType + +class RulesetStatusRespData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ruleset_status_resp_data_attributes import RulesetStatusRespDataAttributes + from datadog_api_client.v2.model.ruleset_status_resp_data_type import RulesetStatusRespDataType + return { + "attributes": (RulesetStatusRespDataAttributes,), + "id": (str,), + "type": (RulesetStatusRespDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RulesetStatusRespDataAttributes, id: str, type: RulesetStatusRespDataType, **kwargs): + """ + Processing status for a tag pipeline ruleset. + + :param attributes: Processing status for a tag pipeline ruleset. + :type attributes: RulesetStatusRespDataAttributes + + :param id: The unique identifier of the ruleset. + :type id: str + + :param type: Ruleset status resource type. + :type type: RulesetStatusRespDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ruleset_status_resp_data_attributes.py b/datadog_api_client/v2/model/ruleset_status_resp_data_attributes.py new file mode 100644 index 0000000000..6f38b3f472 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_status_resp_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RulesetStatusRespDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "processing_status": (str,), + } + attribute_map = { + "processing_status": "processing_status", + } + + def __init__(self_, processing_status: str, **kwargs): + """ + Processing status for a tag pipeline ruleset. + + :param processing_status: The processing status of the ruleset. + :type processing_status: str + """ + super().__init__(kwargs) + + + self_.processing_status = processing_status diff --git a/datadog_api_client/v2/model/ruleset_status_resp_data_type.py b/datadog_api_client/v2/model/ruleset_status_resp_data_type.py new file mode 100644 index 0000000000..a3bb8ed349 --- /dev/null +++ b/datadog_api_client/v2/model/ruleset_status_resp_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RulesetStatusRespDataType(ModelSimple): + """ + Ruleset status resource type. + + :param value: If omitted defaults to "ruleset_status". Must be one of ["ruleset_status"]. + :type value: str + """ + + allowed_values = { + "ruleset_status", + } + RULESET_STATUS: ClassVar["RulesetStatusRespDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RulesetStatusRespDataType.RULESET_STATUS = RulesetStatusRespDataType("ruleset_status") diff --git a/datadog_api_client/v2/model/rum_aggregate_bucket_value.py b/datadog_api_client/v2/model/rum_aggregate_bucket_value.py new file mode 100644 index 0000000000..14cf790a9e --- /dev/null +++ b/datadog_api_client/v2/model/rum_aggregate_bucket_value.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMAggregateBucketValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A bucket value, can be either a timeseries or a single value. + """ + 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.rum_aggregate_bucket_value_timeseries import RUMAggregateBucketValueTimeseries + return { + "oneOf": [ + str, + float, + RUMAggregateBucketValueTimeseries, + ], + } diff --git a/datadog_api_client/v2/model/rum_aggregate_bucket_value_timeseries.py b/datadog_api_client/v2/model/rum_aggregate_bucket_value_timeseries.py new file mode 100644 index 0000000000..3d299403fb --- /dev/null +++ b/datadog_api_client/v2/model/rum_aggregate_bucket_value_timeseries.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMAggregateBucketValueTimeseries(ModelSimple): + """ + A timeseries array. + + + :type value: [RUMAggregateBucketValueTimeseriesPoint] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_aggregate_bucket_value_timeseries_point import RUMAggregateBucketValueTimeseriesPoint + return { + "value": ([RUMAggregateBucketValueTimeseriesPoint],), + } diff --git a/datadog_api_client/v2/model/rum_aggregate_bucket_value_timeseries_point.py b/datadog_api_client/v2/model/rum_aggregate_bucket_value_timeseries_point.py new file mode 100644 index 0000000000..973619f513 --- /dev/null +++ b/datadog_api_client/v2/model/rum_aggregate_bucket_value_timeseries_point.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMAggregateBucketValueTimeseriesPoint(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time": (datetime,), + "value": (float,), + } + attribute_map = { + "time": "time", + "value": "value", + } + + def __init__(self_, time: Union[datetime, UnsetType]=unset, value: Union[float, UnsetType]=unset, **kwargs): + """ + A timeseries point. + + :param time: The time value for this point. + :type time: datetime, optional + + :param value: The value for this point. + :type value: float, optional + """ + if time is not unset: + kwargs["time"] = time + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_aggregate_request.py b/datadog_api_client/v2/model/rum_aggregate_request.py new file mode 100644 index 0000000000..44bb0410e5 --- /dev/null +++ b/datadog_api_client/v2/model/rum_aggregate_request.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_compute import RUMCompute + from datadog_api_client.v2.model.rum_query_filter import RUMQueryFilter + from datadog_api_client.v2.model.rum_group_by import RUMGroupBy + from datadog_api_client.v2.model.rum_query_options import RUMQueryOptions + from datadog_api_client.v2.model.rum_query_page_options import RUMQueryPageOptions + +class RUMAggregateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_compute import RUMCompute + from datadog_api_client.v2.model.rum_query_filter import RUMQueryFilter + from datadog_api_client.v2.model.rum_group_by import RUMGroupBy + from datadog_api_client.v2.model.rum_query_options import RUMQueryOptions + from datadog_api_client.v2.model.rum_query_page_options import RUMQueryPageOptions + return { + "compute": ([RUMCompute],), + "filter": (RUMQueryFilter,), + "group_by": ([RUMGroupBy],), + "options": (RUMQueryOptions,), + "page": (RUMQueryPageOptions,), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + "options": "options", + "page": "page", + } + + def __init__(self_, compute: Union[List[RUMCompute], UnsetType]=unset, filter: Union[RUMQueryFilter, UnsetType]=unset, group_by: Union[List[RUMGroupBy], UnsetType]=unset, options: Union[RUMQueryOptions, UnsetType]=unset, page: Union[RUMQueryPageOptions, UnsetType]=unset, **kwargs): + """ + The object sent with the request to retrieve aggregation buckets of RUM events from your organization. + + :param compute: The list of metrics or timeseries to compute for the retrieved buckets. + :type compute: [RUMCompute], optional + + :param filter: The search and filter query settings. + :type filter: RUMQueryFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [RUMGroupBy], optional + + :param options: Global query options that are used during the query. + Note: Only supply timezone or time offset, not both. Otherwise, the query fails. + :type options: RUMQueryOptions, optional + + :param page: Paging attributes for listing events. + :type page: RUMQueryPageOptions, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_aggregate_sort.py b/datadog_api_client/v2/model/rum_aggregate_sort.py new file mode 100644 index 0000000000..150bedc50b --- /dev/null +++ b/datadog_api_client/v2/model/rum_aggregate_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_aggregation_function import RUMAggregationFunction + from datadog_api_client.v2.model.rum_sort_order import RUMSortOrder + from datadog_api_client.v2.model.rum_aggregate_sort_type import RUMAggregateSortType + +class RUMAggregateSort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_aggregation_function import RUMAggregationFunction + from datadog_api_client.v2.model.rum_sort_order import RUMSortOrder + from datadog_api_client.v2.model.rum_aggregate_sort_type import RUMAggregateSortType + return { + "aggregation": (RUMAggregationFunction,), + "metric": (str,), + "order": (RUMSortOrder,), + "type": (RUMAggregateSortType,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + "order": "order", + "type": "type", + } + + def __init__(self_, aggregation: Union[RUMAggregationFunction, UnsetType]=unset, metric: Union[str, UnsetType]=unset, order: Union[RUMSortOrder, UnsetType]=unset, type: Union[RUMAggregateSortType, UnsetType]=unset, **kwargs): + """ + A sort rule. + + :param aggregation: An aggregation function. + :type aggregation: RUMAggregationFunction, optional + + :param metric: The metric to sort by (only used for ``type=measure`` ). + :type metric: str, optional + + :param order: The order to use, ascending or descending. + :type order: RUMSortOrder, optional + + :param type: The type of sorting algorithm. + :type type: RUMAggregateSortType, optional + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if metric is not unset: + kwargs["metric"] = metric + if order is not unset: + kwargs["order"] = order + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_aggregate_sort_type.py b/datadog_api_client/v2/model/rum_aggregate_sort_type.py new file mode 100644 index 0000000000..82aa2ad2b1 --- /dev/null +++ b/datadog_api_client/v2/model/rum_aggregate_sort_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMAggregateSortType(ModelSimple): + """ + The type of sorting algorithm. + + :param value: If omitted defaults to "alphabetical". Must be one of ["alphabetical", "measure"]. + :type value: str + """ + + allowed_values = { + "alphabetical", + "measure", + } + ALPHABETICAL: ClassVar["RUMAggregateSortType"] + MEASURE: ClassVar["RUMAggregateSortType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMAggregateSortType.ALPHABETICAL = RUMAggregateSortType("alphabetical") +RUMAggregateSortType.MEASURE = RUMAggregateSortType("measure") diff --git a/datadog_api_client/v2/model/rum_aggregation_buckets_response.py b/datadog_api_client/v2/model/rum_aggregation_buckets_response.py new file mode 100644 index 0000000000..2c6ebf4641 --- /dev/null +++ b/datadog_api_client/v2/model/rum_aggregation_buckets_response.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_bucket_response import RUMBucketResponse + from datadog_api_client.v2.model.rum_aggregate_bucket_value_timeseries import RUMAggregateBucketValueTimeseries + +class RUMAggregationBucketsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_bucket_response import RUMBucketResponse + return { + "buckets": ([RUMBucketResponse],), + } + attribute_map = { + "buckets": "buckets", + } + + def __init__(self_, buckets: Union[List[RUMBucketResponse], UnsetType]=unset, **kwargs): + """ + The query results. + + :param buckets: The list of matching buckets, one item per bucket. + :type buckets: [RUMBucketResponse], optional + """ + if buckets is not unset: + kwargs["buckets"] = buckets + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_aggregation_function.py b/datadog_api_client/v2/model/rum_aggregation_function.py new file mode 100644 index 0000000000..97169021bc --- /dev/null +++ b/datadog_api_client/v2/model/rum_aggregation_function.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMAggregationFunction(ModelSimple): + """ + An aggregation function. + + :param value: Must be one of ["count", "cardinality", "pc75", "pc90", "pc95", "pc98", "pc99", "sum", "min", "max", "avg", "median"]. + :type value: str + """ + + allowed_values = { + "count", + "cardinality", + "pc75", + "pc90", + "pc95", + "pc98", + "pc99", + "sum", + "min", + "max", + "avg", + "median", + } + COUNT: ClassVar["RUMAggregationFunction"] + CARDINALITY: ClassVar["RUMAggregationFunction"] + PERCENTILE_75: ClassVar["RUMAggregationFunction"] + PERCENTILE_90: ClassVar["RUMAggregationFunction"] + PERCENTILE_95: ClassVar["RUMAggregationFunction"] + PERCENTILE_98: ClassVar["RUMAggregationFunction"] + PERCENTILE_99: ClassVar["RUMAggregationFunction"] + SUM: ClassVar["RUMAggregationFunction"] + MIN: ClassVar["RUMAggregationFunction"] + MAX: ClassVar["RUMAggregationFunction"] + AVG: ClassVar["RUMAggregationFunction"] + MEDIAN: ClassVar["RUMAggregationFunction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMAggregationFunction.COUNT = RUMAggregationFunction("count") +RUMAggregationFunction.CARDINALITY = RUMAggregationFunction("cardinality") +RUMAggregationFunction.PERCENTILE_75 = RUMAggregationFunction("pc75") +RUMAggregationFunction.PERCENTILE_90 = RUMAggregationFunction("pc90") +RUMAggregationFunction.PERCENTILE_95 = RUMAggregationFunction("pc95") +RUMAggregationFunction.PERCENTILE_98 = RUMAggregationFunction("pc98") +RUMAggregationFunction.PERCENTILE_99 = RUMAggregationFunction("pc99") +RUMAggregationFunction.SUM = RUMAggregationFunction("sum") +RUMAggregationFunction.MIN = RUMAggregationFunction("min") +RUMAggregationFunction.MAX = RUMAggregationFunction("max") +RUMAggregationFunction.AVG = RUMAggregationFunction("avg") +RUMAggregationFunction.MEDIAN = RUMAggregationFunction("median") diff --git a/datadog_api_client/v2/model/rum_analytics_aggregate_response.py b/datadog_api_client/v2/model/rum_analytics_aggregate_response.py new file mode 100644 index 0000000000..9d99b30293 --- /dev/null +++ b/datadog_api_client/v2/model/rum_analytics_aggregate_response.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_aggregation_buckets_response import RUMAggregationBucketsResponse + from datadog_api_client.v2.model.rum_response_links import RUMResponseLinks + from datadog_api_client.v2.model.rum_response_metadata import RUMResponseMetadata + from datadog_api_client.v2.model.rum_aggregate_bucket_value_timeseries import RUMAggregateBucketValueTimeseries + +class RUMAnalyticsAggregateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_aggregation_buckets_response import RUMAggregationBucketsResponse + from datadog_api_client.v2.model.rum_response_links import RUMResponseLinks + from datadog_api_client.v2.model.rum_response_metadata import RUMResponseMetadata + return { + "data": (RUMAggregationBucketsResponse,), + "links": (RUMResponseLinks,), + "meta": (RUMResponseMetadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[RUMAggregationBucketsResponse, UnsetType]=unset, links: Union[RUMResponseLinks, UnsetType]=unset, meta: Union[RUMResponseMetadata, UnsetType]=unset, **kwargs): + """ + The response object for the RUM events aggregate API endpoint. + + :param data: The query results. + :type data: RUMAggregationBucketsResponse, optional + + :param links: Links attributes. + :type links: RUMResponseLinks, optional + + :param meta: The metadata associated with a request. + :type meta: RUMResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_application.py b/datadog_api_client/v2/model/rum_application.py new file mode 100644 index 0000000000..1c700ecd91 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_application_attributes import RUMApplicationAttributes + from datadog_api_client.v2.model.rum_application_type import RUMApplicationType + +class RUMApplication(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_application_attributes import RUMApplicationAttributes + from datadog_api_client.v2.model.rum_application_type import RUMApplicationType + return { + "attributes": (RUMApplicationAttributes,), + "id": (str,), + "type": (RUMApplicationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RUMApplicationAttributes, id: str, type: RUMApplicationType, **kwargs): + """ + RUM application. + + :param attributes: RUM application attributes. + :type attributes: RUMApplicationAttributes + + :param id: RUM application ID. + :type id: str + + :param type: RUM application response type. + :type type: RUMApplicationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_application_attributes.py b/datadog_api_client/v2/model/rum_application_attributes.py new file mode 100644 index 0000000000..18d03c4fb8 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_attributes.py @@ -0,0 +1,139 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_product_scales import RUMProductScales + +class RUMApplicationAttributes(ModelNormal): + validations = { + "api_key_id": { + "inclusive_maximum": 2147483647, + }, + "org_id": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_product_scales import RUMProductScales + return { + "api_key_id": (int,), + "application_id": (str,), + "client_token": (str,), + "created_at": (int,), + "created_by_handle": (str,), + "hash": (str,), + "is_active": (bool,), + "name": (str,), + "org_id": (int,), + "product_scales": (RUMProductScales,), + "remote_config_id": (str,), + "type": (str,), + "updated_at": (int,), + "updated_by_handle": (str,), + } + attribute_map = { + "api_key_id": "api_key_id", + "application_id": "application_id", + "client_token": "client_token", + "created_at": "created_at", + "created_by_handle": "created_by_handle", + "hash": "hash", + "is_active": "is_active", + "name": "name", + "org_id": "org_id", + "product_scales": "product_scales", + "remote_config_id": "remote_config_id", + "type": "type", + "updated_at": "updated_at", + "updated_by_handle": "updated_by_handle", + } + + def __init__(self_, application_id: str, client_token: str, created_at: int, created_by_handle: str, name: str, org_id: int, type: str, updated_at: int, updated_by_handle: str, api_key_id: Union[int, UnsetType]=unset, hash: Union[str, UnsetType]=unset, is_active: Union[bool, UnsetType]=unset, product_scales: Union[RUMProductScales, UnsetType]=unset, remote_config_id: Union[str, UnsetType]=unset, **kwargs): + """ + RUM application attributes. + + :param api_key_id: ID of the API key associated with the application. + :type api_key_id: int, optional + + :param application_id: ID of the RUM application. + :type application_id: str + + :param client_token: Client token of the RUM application. + :type client_token: str + + :param created_at: Timestamp in ms of the creation date. + :type created_at: int + + :param created_by_handle: Handle of the creator user. + :type created_by_handle: str + + :param hash: Hash of the RUM application. Optional. + :type hash: str, optional + + :param is_active: Indicates if the RUM application is active. + :type is_active: bool, optional + + :param name: Name of the RUM application. + :type name: str + + :param org_id: Org ID of the RUM application. + :type org_id: int + + :param product_scales: Product Scales configuration for the RUM application. + :type product_scales: RUMProductScales, optional + + :param remote_config_id: ID of the RUM SDK remote configuration for the application, if one exists. + :type remote_config_id: str, optional + + :param type: Type of the RUM application. Supported values are ``browser`` , ``ios`` , ``android`` , ``react-native`` , ``flutter`` , ``roku`` , ``electron`` , ``unity`` , ``kotlin-multiplatform``. + :type type: str + + :param updated_at: Timestamp in ms of the last update date. + :type updated_at: int + + :param updated_by_handle: Handle of the updater user. + :type updated_by_handle: str + """ + if api_key_id is not unset: + kwargs["api_key_id"] = api_key_id + if hash is not unset: + kwargs["hash"] = hash + if is_active is not unset: + kwargs["is_active"] = is_active + if product_scales is not unset: + kwargs["product_scales"] = product_scales + if remote_config_id is not unset: + kwargs["remote_config_id"] = remote_config_id + super().__init__(kwargs) + + + self_.application_id = application_id + self_.client_token = client_token + self_.created_at = created_at + self_.created_by_handle = created_by_handle + self_.name = name + self_.org_id = org_id + self_.type = type + self_.updated_at = updated_at + self_.updated_by_handle = updated_by_handle diff --git a/datadog_api_client/v2/model/rum_application_create.py b/datadog_api_client/v2/model/rum_application_create.py new file mode 100644 index 0000000000..81c43360c7 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_application_create_attributes import RUMApplicationCreateAttributes + from datadog_api_client.v2.model.rum_application_create_type import RUMApplicationCreateType + +class RUMApplicationCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_application_create_attributes import RUMApplicationCreateAttributes + from datadog_api_client.v2.model.rum_application_create_type import RUMApplicationCreateType + return { + "attributes": (RUMApplicationCreateAttributes,), + "type": (RUMApplicationCreateType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: RUMApplicationCreateAttributes, type: RUMApplicationCreateType, **kwargs): + """ + RUM application creation. + + :param attributes: RUM application creation attributes. + :type attributes: RUMApplicationCreateAttributes + + :param type: RUM application creation type. + :type type: RUMApplicationCreateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/rum_application_create_attributes.py b/datadog_api_client/v2/model/rum_application_create_attributes.py new file mode 100644 index 0000000000..b81508e337 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_create_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_product_analytics_retention_state import RUMProductAnalyticsRetentionState + from datadog_api_client.v2.model.rum_event_processing_state import RUMEventProcessingState + +class RUMApplicationCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_product_analytics_retention_state import RUMProductAnalyticsRetentionState + from datadog_api_client.v2.model.rum_event_processing_state import RUMEventProcessingState + return { + "name": (str,), + "product_analytics_retention_state": (RUMProductAnalyticsRetentionState,), + "rum_event_processing_state": (RUMEventProcessingState,), + "type": (str,), + } + attribute_map = { + "name": "name", + "product_analytics_retention_state": "product_analytics_retention_state", + "rum_event_processing_state": "rum_event_processing_state", + "type": "type", + } + + def __init__(self_, name: str, product_analytics_retention_state: Union[RUMProductAnalyticsRetentionState, UnsetType]=unset, rum_event_processing_state: Union[RUMEventProcessingState, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + RUM application creation attributes. + + :param name: Name of the RUM application. + :type name: str + + :param product_analytics_retention_state: Controls the retention policy for Product Analytics data derived from RUM events. + :type product_analytics_retention_state: RUMProductAnalyticsRetentionState, optional + + :param rum_event_processing_state: Configures which RUM events are processed and stored for the application. + :type rum_event_processing_state: RUMEventProcessingState, optional + + :param type: Type of the RUM application. Supported values are ``browser`` , ``ios`` , ``android`` , ``react-native`` , ``flutter`` , ``roku`` , ``electron`` , ``unity`` , ``kotlin-multiplatform``. + :type type: str, optional + """ + if product_analytics_retention_state is not unset: + kwargs["product_analytics_retention_state"] = product_analytics_retention_state + if rum_event_processing_state is not unset: + kwargs["rum_event_processing_state"] = rum_event_processing_state + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/rum_application_create_request.py b/datadog_api_client/v2/model/rum_application_create_request.py new file mode 100644 index 0000000000..b877b3b0a4 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_application_create import RUMApplicationCreate + +class RUMApplicationCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_application_create import RUMApplicationCreate + return { + "data": (RUMApplicationCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RUMApplicationCreate, **kwargs): + """ + RUM application creation request attributes. + + :param data: RUM application creation. + :type data: RUMApplicationCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_application_create_type.py b/datadog_api_client/v2/model/rum_application_create_type.py new file mode 100644 index 0000000000..d70ab498d9 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_create_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMApplicationCreateType(ModelSimple): + """ + RUM application creation type. + + :param value: If omitted defaults to "rum_application_create". Must be one of ["rum_application_create"]. + :type value: str + """ + + allowed_values = { + "rum_application_create", + } + RUM_APPLICATION_CREATE: ClassVar["RUMApplicationCreateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMApplicationCreateType.RUM_APPLICATION_CREATE = RUMApplicationCreateType("rum_application_create") diff --git a/datadog_api_client/v2/model/rum_application_list.py b/datadog_api_client/v2/model/rum_application_list.py new file mode 100644 index 0000000000..c7e959f1a3 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_list.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_application_list_attributes import RUMApplicationListAttributes + from datadog_api_client.v2.model.rum_application_list_type import RUMApplicationListType + +class RUMApplicationList(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_application_list_attributes import RUMApplicationListAttributes + from datadog_api_client.v2.model.rum_application_list_type import RUMApplicationListType + return { + "attributes": (RUMApplicationListAttributes,), + "id": (str,), + "type": (RUMApplicationListType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RUMApplicationListAttributes, type: RUMApplicationListType, id: Union[str, UnsetType]=unset, **kwargs): + """ + RUM application list. + + :param attributes: RUM application list attributes. + :type attributes: RUMApplicationListAttributes + + :param id: RUM application ID. + :type id: str, optional + + :param type: RUM application list type. + :type type: RUMApplicationListType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/rum_application_list_attributes.py b/datadog_api_client/v2/model/rum_application_list_attributes.py new file mode 100644 index 0000000000..29d9f7092c --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_list_attributes.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_product_scales import RUMProductScales + +class RUMApplicationListAttributes(ModelNormal): + validations = { + "org_id": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_product_scales import RUMProductScales + return { + "application_id": (str,), + "created_at": (int,), + "created_by_handle": (str,), + "hash": (str,), + "is_active": (bool,), + "name": (str,), + "org_id": (int,), + "product_scales": (RUMProductScales,), + "type": (str,), + "updated_at": (int,), + "updated_by_handle": (str,), + } + attribute_map = { + "application_id": "application_id", + "created_at": "created_at", + "created_by_handle": "created_by_handle", + "hash": "hash", + "is_active": "is_active", + "name": "name", + "org_id": "org_id", + "product_scales": "product_scales", + "type": "type", + "updated_at": "updated_at", + "updated_by_handle": "updated_by_handle", + } + + def __init__(self_, application_id: str, created_at: int, created_by_handle: str, name: str, org_id: int, type: str, updated_at: int, updated_by_handle: str, hash: Union[str, UnsetType]=unset, is_active: Union[bool, UnsetType]=unset, product_scales: Union[RUMProductScales, UnsetType]=unset, **kwargs): + """ + RUM application list attributes. + + :param application_id: ID of the RUM application. + :type application_id: str + + :param created_at: Timestamp in ms of the creation date. + :type created_at: int + + :param created_by_handle: Handle of the creator user. + :type created_by_handle: str + + :param hash: Hash of the RUM application. Optional. + :type hash: str, optional + + :param is_active: Indicates if the RUM application is active. + :type is_active: bool, optional + + :param name: Name of the RUM application. + :type name: str + + :param org_id: Org ID of the RUM application. + :type org_id: int + + :param product_scales: Product Scales configuration for the RUM application. + :type product_scales: RUMProductScales, optional + + :param type: Type of the RUM application. Supported values are ``browser`` , ``ios`` , ``android`` , ``react-native`` , ``flutter`` , ``roku`` , ``electron`` , ``unity`` , ``kotlin-multiplatform``. + :type type: str + + :param updated_at: Timestamp in ms of the last update date. + :type updated_at: int + + :param updated_by_handle: Handle of the updater user. + :type updated_by_handle: str + """ + if hash is not unset: + kwargs["hash"] = hash + if is_active is not unset: + kwargs["is_active"] = is_active + if product_scales is not unset: + kwargs["product_scales"] = product_scales + super().__init__(kwargs) + + + self_.application_id = application_id + self_.created_at = created_at + self_.created_by_handle = created_by_handle + self_.name = name + self_.org_id = org_id + self_.type = type + self_.updated_at = updated_at + self_.updated_by_handle = updated_by_handle diff --git a/datadog_api_client/v2/model/rum_application_list_type.py b/datadog_api_client/v2/model/rum_application_list_type.py new file mode 100644 index 0000000000..516969c8b4 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_list_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMApplicationListType(ModelSimple): + """ + RUM application list type. + + :param value: If omitted defaults to "rum_application". Must be one of ["rum_application"]. + :type value: str + """ + + allowed_values = { + "rum_application", + } + RUM_APPLICATION: ClassVar["RUMApplicationListType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMApplicationListType.RUM_APPLICATION = RUMApplicationListType("rum_application") diff --git a/datadog_api_client/v2/model/rum_application_response.py b/datadog_api_client/v2/model/rum_application_response.py new file mode 100644 index 0000000000..43acd1d9e3 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_application import RUMApplication + +class RUMApplicationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_application import RUMApplication + return { + "data": (RUMApplication,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RUMApplication, UnsetType]=unset, **kwargs): + """ + RUM application response. + + :param data: RUM application. + :type data: RUMApplication, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_application_type.py b/datadog_api_client/v2/model/rum_application_type.py new file mode 100644 index 0000000000..f66703a074 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMApplicationType(ModelSimple): + """ + RUM application response type. + + :param value: If omitted defaults to "rum_application". Must be one of ["rum_application"]. + :type value: str + """ + + allowed_values = { + "rum_application", + } + RUM_APPLICATION: ClassVar["RUMApplicationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMApplicationType.RUM_APPLICATION = RUMApplicationType("rum_application") diff --git a/datadog_api_client/v2/model/rum_application_update.py b/datadog_api_client/v2/model/rum_application_update.py new file mode 100644 index 0000000000..ecd6d91e58 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_update.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_application_update_attributes import RUMApplicationUpdateAttributes + from datadog_api_client.v2.model.rum_application_update_type import RUMApplicationUpdateType + +class RUMApplicationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_application_update_attributes import RUMApplicationUpdateAttributes + from datadog_api_client.v2.model.rum_application_update_type import RUMApplicationUpdateType + return { + "attributes": (RUMApplicationUpdateAttributes,), + "id": (str,), + "type": (RUMApplicationUpdateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: RUMApplicationUpdateType, attributes: Union[RUMApplicationUpdateAttributes, UnsetType]=unset, **kwargs): + """ + RUM application update. + + :param attributes: RUM application update attributes. + :type attributes: RUMApplicationUpdateAttributes, optional + + :param id: RUM application ID. + :type id: str + + :param type: RUM application update type. + :type type: RUMApplicationUpdateType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_application_update_attributes.py b/datadog_api_client/v2/model/rum_application_update_attributes.py new file mode 100644 index 0000000000..dcddc4bd6f --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_update_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_product_analytics_retention_state import RUMProductAnalyticsRetentionState + from datadog_api_client.v2.model.rum_event_processing_state import RUMEventProcessingState + +class RUMApplicationUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_product_analytics_retention_state import RUMProductAnalyticsRetentionState + from datadog_api_client.v2.model.rum_event_processing_state import RUMEventProcessingState + return { + "name": (str,), + "product_analytics_retention_state": (RUMProductAnalyticsRetentionState,), + "rum_event_processing_state": (RUMEventProcessingState,), + "type": (str,), + } + attribute_map = { + "name": "name", + "product_analytics_retention_state": "product_analytics_retention_state", + "rum_event_processing_state": "rum_event_processing_state", + "type": "type", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, product_analytics_retention_state: Union[RUMProductAnalyticsRetentionState, UnsetType]=unset, rum_event_processing_state: Union[RUMEventProcessingState, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + RUM application update attributes. + + :param name: Name of the RUM application. + :type name: str, optional + + :param product_analytics_retention_state: Controls the retention policy for Product Analytics data derived from RUM events. + :type product_analytics_retention_state: RUMProductAnalyticsRetentionState, optional + + :param rum_event_processing_state: Configures which RUM events are processed and stored for the application. + :type rum_event_processing_state: RUMEventProcessingState, optional + + :param type: Type of the RUM application. Supported values are ``browser`` , ``ios`` , ``android`` , ``react-native`` , ``flutter`` , ``roku`` , ``electron`` , ``unity`` , ``kotlin-multiplatform``. + :type type: str, optional + """ + if name is not unset: + kwargs["name"] = name + if product_analytics_retention_state is not unset: + kwargs["product_analytics_retention_state"] = product_analytics_retention_state + if rum_event_processing_state is not unset: + kwargs["rum_event_processing_state"] = rum_event_processing_state + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_application_update_request.py b/datadog_api_client/v2/model/rum_application_update_request.py new file mode 100644 index 0000000000..cc17186079 --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_application_update import RUMApplicationUpdate + +class RUMApplicationUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_application_update import RUMApplicationUpdate + return { + "data": (RUMApplicationUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RUMApplicationUpdate, **kwargs): + """ + RUM application update request. + + :param data: RUM application update. + :type data: RUMApplicationUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_application_update_type.py b/datadog_api_client/v2/model/rum_application_update_type.py new file mode 100644 index 0000000000..d4861f7f3a --- /dev/null +++ b/datadog_api_client/v2/model/rum_application_update_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMApplicationUpdateType(ModelSimple): + """ + RUM application update type. + + :param value: If omitted defaults to "rum_application_update". Must be one of ["rum_application_update"]. + :type value: str + """ + + allowed_values = { + "rum_application_update", + } + RUM_APPLICATION_UPDATE: ClassVar["RUMApplicationUpdateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMApplicationUpdateType.RUM_APPLICATION_UPDATE = RUMApplicationUpdateType("rum_application_update") diff --git a/datadog_api_client/v2/model/rum_applications_response.py b/datadog_api_client/v2/model/rum_applications_response.py new file mode 100644 index 0000000000..9c12141729 --- /dev/null +++ b/datadog_api_client/v2/model/rum_applications_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_application_list import RUMApplicationList + +class RUMApplicationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_application_list import RUMApplicationList + return { + "data": ([RUMApplicationList],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RUMApplicationList], UnsetType]=unset, **kwargs): + """ + RUM applications response. + + :param data: RUM applications array response. + :type data: [RUMApplicationList], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_bucket_response.py b/datadog_api_client/v2/model/rum_bucket_response.py new file mode 100644 index 0000000000..dc0dfb0646 --- /dev/null +++ b/datadog_api_client/v2/model/rum_bucket_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_aggregate_bucket_value import RUMAggregateBucketValue + from datadog_api_client.v2.model.rum_aggregate_bucket_value_timeseries import RUMAggregateBucketValueTimeseries + +class RUMBucketResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_aggregate_bucket_value import RUMAggregateBucketValue + return { + "by": ({str: (str,)},), + "computes": ({str: (RUMAggregateBucketValue,)},), + } + attribute_map = { + "by": "by", + "computes": "computes", + } + + def __init__(self_, by: Union[Dict[str, str], UnsetType]=unset, computes: Union[Dict[str, Union[RUMAggregateBucketValue, str, float, RUMAggregateBucketValueTimeseries]], UnsetType]=unset, **kwargs): + """ + Bucket values. + + :param by: The key-value pairs for each group-by. + :type by: {str: (str,)}, optional + + :param computes: A map of the metric name to value for regular compute, or a list of values for a timeseries. + :type computes: {str: (RUMAggregateBucketValue,)}, optional + """ + if by is not unset: + kwargs["by"] = by + if computes is not unset: + kwargs["computes"] = computes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_compute.py b/datadog_api_client/v2/model/rum_compute.py new file mode 100644 index 0000000000..21271ae8b3 --- /dev/null +++ b/datadog_api_client/v2/model/rum_compute.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_aggregation_function import RUMAggregationFunction + from datadog_api_client.v2.model.rum_compute_type import RUMComputeType + +class RUMCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_aggregation_function import RUMAggregationFunction + from datadog_api_client.v2.model.rum_compute_type import RUMComputeType + return { + "aggregation": (RUMAggregationFunction,), + "interval": (str,), + "metric": (str,), + "type": (RUMComputeType,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + "type": "type", + } + + def __init__(self_, aggregation: RUMAggregationFunction, interval: Union[str, UnsetType]=unset, metric: Union[str, UnsetType]=unset, type: Union[RUMComputeType, UnsetType]=unset, **kwargs): + """ + A compute rule to compute metrics or timeseries. + + :param aggregation: An aggregation function. + :type aggregation: RUMAggregationFunction + + :param interval: The time buckets' size (only used for type=timeseries) + Defaults to a resolution of 150 points. + :type interval: str, optional + + :param metric: The metric to use. + :type metric: str, optional + + :param type: The type of compute. + :type type: RUMComputeType, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v2/model/rum_compute_type.py b/datadog_api_client/v2/model/rum_compute_type.py new file mode 100644 index 0000000000..d45c493e13 --- /dev/null +++ b/datadog_api_client/v2/model/rum_compute_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMComputeType(ModelSimple): + """ + The type of compute. + + :param value: If omitted defaults to "total". Must be one of ["timeseries", "total"]. + :type value: str + """ + + allowed_values = { + "timeseries", + "total", + } + TIMESERIES: ClassVar["RUMComputeType"] + TOTAL: ClassVar["RUMComputeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMComputeType.TIMESERIES = RUMComputeType("timeseries") +RUMComputeType.TOTAL = RUMComputeType("total") diff --git a/datadog_api_client/v2/model/rum_config_attributes.py b/datadog_api_client/v2/model/rum_config_attributes.py new file mode 100644 index 0000000000..52bf1b8a78 --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_attributes.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "disabled": (bool,), + "enforced_application_tags": (bool,), + "enforced_application_tags_updated_at": (datetime,), + "enforced_application_tags_updated_by": (str,), + "ootb_metrics_version": (int,), + "ootb_metrics_version_installed_at": (datetime,), + "retention_filters_enabled": (bool,), + "retention_filters_enabled_updated_at": (datetime,), + "retention_filters_enabled_updated_by": (str,), + } + attribute_map = { + "disabled": "disabled", + "enforced_application_tags": "enforced_application_tags", + "enforced_application_tags_updated_at": "enforced_application_tags_updated_at", + "enforced_application_tags_updated_by": "enforced_application_tags_updated_by", + "ootb_metrics_version": "ootb_metrics_version", + "ootb_metrics_version_installed_at": "ootb_metrics_version_installed_at", + "retention_filters_enabled": "retention_filters_enabled", + "retention_filters_enabled_updated_at": "retention_filters_enabled_updated_at", + "retention_filters_enabled_updated_by": "retention_filters_enabled_updated_by", + } + + def __init__(self_, enforced_application_tags: bool, retention_filters_enabled: bool, disabled: Union[bool, UnsetType]=unset, enforced_application_tags_updated_at: Union[datetime, UnsetType]=unset, enforced_application_tags_updated_by: Union[str, UnsetType]=unset, ootb_metrics_version: Union[int, UnsetType]=unset, ootb_metrics_version_installed_at: Union[datetime, UnsetType]=unset, retention_filters_enabled_updated_at: Union[datetime, UnsetType]=unset, retention_filters_enabled_updated_by: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the RUM configuration. + + :param disabled: Whether the RUM configuration is disabled for the organization. + :type disabled: bool, optional + + :param enforced_application_tags: Whether application tags are enforced for the RUM applications in the organization. + :type enforced_application_tags: bool + + :param enforced_application_tags_updated_at: Timestamp of when the enforced application tags setting was last updated. + :type enforced_application_tags_updated_at: datetime, optional + + :param enforced_application_tags_updated_by: Handle of the user who last updated the enforced application tags setting. + :type enforced_application_tags_updated_by: str, optional + + :param ootb_metrics_version: Version of the out-of-the-box metrics installed for the organization. + :type ootb_metrics_version: int, optional + + :param ootb_metrics_version_installed_at: Timestamp of when the out-of-the-box metrics version was installed. + :type ootb_metrics_version_installed_at: datetime, optional + + :param retention_filters_enabled: Whether retention filters are enabled for the organization. + :type retention_filters_enabled: bool + + :param retention_filters_enabled_updated_at: Timestamp of when the retention filters setting was last updated. + :type retention_filters_enabled_updated_at: datetime, optional + + :param retention_filters_enabled_updated_by: Handle of the user or job who last updated the retention filters setting. + :type retention_filters_enabled_updated_by: str, optional + """ + if disabled is not unset: + kwargs["disabled"] = disabled + if enforced_application_tags_updated_at is not unset: + kwargs["enforced_application_tags_updated_at"] = enforced_application_tags_updated_at + if enforced_application_tags_updated_by is not unset: + kwargs["enforced_application_tags_updated_by"] = enforced_application_tags_updated_by + if ootb_metrics_version is not unset: + kwargs["ootb_metrics_version"] = ootb_metrics_version + if ootb_metrics_version_installed_at is not unset: + kwargs["ootb_metrics_version_installed_at"] = ootb_metrics_version_installed_at + if retention_filters_enabled_updated_at is not unset: + kwargs["retention_filters_enabled_updated_at"] = retention_filters_enabled_updated_at + if retention_filters_enabled_updated_by is not unset: + kwargs["retention_filters_enabled_updated_by"] = retention_filters_enabled_updated_by + super().__init__(kwargs) + + + self_.enforced_application_tags = enforced_application_tags + self_.retention_filters_enabled = retention_filters_enabled diff --git a/datadog_api_client/v2/model/rum_config_create_attributes.py b/datadog_api_client/v2/model/rum_config_create_attributes.py new file mode 100644 index 0000000000..737a7b6d3b --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_create_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumConfigCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enforced_application_tags": (bool,), + } + attribute_map = { + "enforced_application_tags": "enforced_application_tags", + } + + def __init__(self_, enforced_application_tags: bool, **kwargs): + """ + Attributes of the RUM configuration to create. + + :param enforced_application_tags: Whether application tags are enforced for the RUM applications in the organization. + :type enforced_application_tags: bool + """ + super().__init__(kwargs) + + + self_.enforced_application_tags = enforced_application_tags diff --git a/datadog_api_client/v2/model/rum_config_create_data.py b/datadog_api_client/v2/model/rum_config_create_data.py new file mode 100644 index 0000000000..957229325e --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_config_create_attributes import RumConfigCreateAttributes + from datadog_api_client.v2.model.rum_config_type import RumConfigType + +class RumConfigCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_config_create_attributes import RumConfigCreateAttributes + from datadog_api_client.v2.model.rum_config_type import RumConfigType + return { + "attributes": (RumConfigCreateAttributes,), + "type": (RumConfigType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: RumConfigCreateAttributes, type: RumConfigType, **kwargs): + """ + Object describing the RUM configuration to create. + + :param attributes: Attributes of the RUM configuration to create. + :type attributes: RumConfigCreateAttributes + + :param type: The type of the resource. The value should always be ``rum_config``. + :type type: RumConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/rum_config_create_request.py b/datadog_api_client/v2/model/rum_config_create_request.py new file mode 100644 index 0000000000..46e81dca3a --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_config_create_data import RumConfigCreateData + +class RumConfigCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_config_create_data import RumConfigCreateData + return { + "data": (RumConfigCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumConfigCreateData, **kwargs): + """ + Request body for creating the RUM configuration. + + :param data: Object describing the RUM configuration to create. + :type data: RumConfigCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_config_data.py b/datadog_api_client/v2/model/rum_config_data.py new file mode 100644 index 0000000000..33e9f878bb --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_config_attributes import RumConfigAttributes + from datadog_api_client.v2.model.rum_config_type import RumConfigType + +class RumConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_config_attributes import RumConfigAttributes + from datadog_api_client.v2.model.rum_config_type import RumConfigType + return { + "attributes": (RumConfigAttributes,), + "id": (str,), + "type": (RumConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RumConfigAttributes, id: str, type: RumConfigType, **kwargs): + """ + The RUM configuration data. + + :param attributes: Attributes of the RUM configuration. + :type attributes: RumConfigAttributes + + :param id: The organization ID associated with the RUM configuration. + :type id: str + + :param type: The type of the resource. The value should always be ``rum_config``. + :type type: RumConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_config_response.py b/datadog_api_client/v2/model/rum_config_response.py new file mode 100644 index 0000000000..b1f540771a --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_config_data import RumConfigData + +class RumConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_config_data import RumConfigData + return { + "data": (RumConfigData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumConfigData, **kwargs): + """ + The RUM configuration object. + + :param data: The RUM configuration data. + :type data: RumConfigData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_config_type.py b/datadog_api_client/v2/model/rum_config_type.py new file mode 100644 index 0000000000..3ba45a3047 --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumConfigType(ModelSimple): + """ + The type of the resource. The value should always be `rum_config`. + + :param value: If omitted defaults to "rum_config". Must be one of ["rum_config"]. + :type value: str + """ + + allowed_values = { + "rum_config", + } + RUM_CONFIG: ClassVar["RumConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumConfigType.RUM_CONFIG = RumConfigType("rum_config") diff --git a/datadog_api_client/v2/model/rum_config_update_attributes.py b/datadog_api_client/v2/model/rum_config_update_attributes.py new file mode 100644 index 0000000000..3bebd72fa7 --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_update_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumConfigUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enforced_application_tags": (bool,), + } + attribute_map = { + "enforced_application_tags": "enforced_application_tags", + } + + def __init__(self_, enforced_application_tags: bool, **kwargs): + """ + Attributes of the RUM configuration to update. + + :param enforced_application_tags: Whether application tags are enforced for the RUM applications in the organization. + :type enforced_application_tags: bool + """ + super().__init__(kwargs) + + + self_.enforced_application_tags = enforced_application_tags diff --git a/datadog_api_client/v2/model/rum_config_update_data.py b/datadog_api_client/v2/model/rum_config_update_data.py new file mode 100644 index 0000000000..8e3a8d1c54 --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_config_update_attributes import RumConfigUpdateAttributes + from datadog_api_client.v2.model.rum_config_type import RumConfigType + +class RumConfigUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_config_update_attributes import RumConfigUpdateAttributes + from datadog_api_client.v2.model.rum_config_type import RumConfigType + return { + "attributes": (RumConfigUpdateAttributes,), + "type": (RumConfigType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: RumConfigUpdateAttributes, type: RumConfigType, **kwargs): + """ + Object describing the RUM configuration to update. + + :param attributes: Attributes of the RUM configuration to update. + :type attributes: RumConfigUpdateAttributes + + :param type: The type of the resource. The value should always be ``rum_config``. + :type type: RumConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/rum_config_update_request.py b/datadog_api_client/v2/model/rum_config_update_request.py new file mode 100644 index 0000000000..6c21a67cbe --- /dev/null +++ b/datadog_api_client/v2/model/rum_config_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_config_update_data import RumConfigUpdateData + +class RumConfigUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_config_update_data import RumConfigUpdateData + return { + "data": (RumConfigUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumConfigUpdateData, **kwargs): + """ + Request body for updating the RUM configuration. + + :param data: Object describing the RUM configuration to update. + :type data: RumConfigUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_cross_product_sampling.py b/datadog_api_client/v2/model/rum_cross_product_sampling.py new file mode 100644 index 0000000000..01cc0cab0d --- /dev/null +++ b/datadog_api_client/v2/model/rum_cross_product_sampling.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumCrossProductSampling(ModelNormal): + validations = { + "trace_sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "trace_enabled": (bool,), + "trace_sample_rate": (float,), + } + attribute_map = { + "trace_enabled": "trace_enabled", + "trace_sample_rate": "trace_sample_rate", + } + + def __init__(self_, trace_enabled: Union[bool, UnsetType]=unset, trace_sample_rate: Union[float, UnsetType]=unset, **kwargs): + """ + The configuration for cross-product retention filters. + + :param trace_enabled: Whether the cross-product retention filter for APM traces is enabled. + :type trace_enabled: bool, optional + + :param trace_sample_rate: The sample rate for the APM cross-product retention filter, between 0 and 100. + :type trace_sample_rate: float, optional + """ + if trace_enabled is not unset: + kwargs["trace_enabled"] = trace_enabled + if trace_sample_rate is not unset: + kwargs["trace_sample_rate"] = trace_sample_rate + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_cross_product_sampling_create.py b/datadog_api_client/v2/model/rum_cross_product_sampling_create.py new file mode 100644 index 0000000000..63a2dd3f68 --- /dev/null +++ b/datadog_api_client/v2/model/rum_cross_product_sampling_create.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumCrossProductSamplingCreate(ModelNormal): + validations = { + "trace_sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "trace_enabled": (bool,), + "trace_sample_rate": (float,), + } + attribute_map = { + "trace_enabled": "trace_enabled", + "trace_sample_rate": "trace_sample_rate", + } + + def __init__(self_, trace_sample_rate: float, trace_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + The configuration for cross-product retention filters. + + :param trace_enabled: Whether the cross-product retention filter for APM traces is enabled. + :type trace_enabled: bool, optional + + :param trace_sample_rate: The sample rate for the APM cross-product retention filter, between 0 and 100. + :type trace_sample_rate: float + """ + if trace_enabled is not unset: + kwargs["trace_enabled"] = trace_enabled + super().__init__(kwargs) + + + self_.trace_sample_rate = trace_sample_rate diff --git a/datadog_api_client/v2/model/rum_cross_product_sampling_update.py b/datadog_api_client/v2/model/rum_cross_product_sampling_update.py new file mode 100644 index 0000000000..282e95cdd2 --- /dev/null +++ b/datadog_api_client/v2/model/rum_cross_product_sampling_update.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumCrossProductSamplingUpdate(ModelNormal): + validations = { + "trace_sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "trace_enabled": (bool,), + "trace_sample_rate": (float,), + } + attribute_map = { + "trace_enabled": "trace_enabled", + "trace_sample_rate": "trace_sample_rate", + } + + def __init__(self_, trace_enabled: Union[bool, UnsetType]=unset, trace_sample_rate: Union[float, UnsetType]=unset, **kwargs): + """ + The configuration for cross-product retention filters. All fields are optional for partial updates. + + :param trace_enabled: Whether the cross-product retention filter for APM traces is enabled. + :type trace_enabled: bool, optional + + :param trace_sample_rate: The sample rate for the APM cross-product retention filter, between 0 and 100. + :type trace_sample_rate: float, optional + """ + if trace_enabled is not unset: + kwargs["trace_enabled"] = trace_enabled + if trace_sample_rate is not unset: + kwargs["trace_sample_rate"] = trace_sample_rate + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_event.py b/datadog_api_client/v2/model/rum_event.py new file mode 100644 index 0000000000..db2670f075 --- /dev/null +++ b/datadog_api_client/v2/model/rum_event.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_event_attributes import RUMEventAttributes + from datadog_api_client.v2.model.rum_event_type import RUMEventType + +class RUMEvent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_event_attributes import RUMEventAttributes + from datadog_api_client.v2.model.rum_event_type import RUMEventType + return { + "attributes": (RUMEventAttributes,), + "id": (str,), + "type": (RUMEventType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[RUMEventAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[RUMEventType, UnsetType]=unset, **kwargs): + """ + Object description of a RUM event after being processed and stored by Datadog. + + :param attributes: JSON object containing all event attributes and their associated values. + :type attributes: RUMEventAttributes, optional + + :param id: Unique ID of the event. + :type id: str, optional + + :param type: Type of the event. + :type type: RUMEventType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_event_attributes.py b/datadog_api_client/v2/model/rum_event_attributes.py new file mode 100644 index 0000000000..43fd6aed0d --- /dev/null +++ b/datadog_api_client/v2/model/rum_event_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMEventAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "service": (str,), + "tags": ([str],), + "timestamp": (datetime,), + } + attribute_map = { + "attributes": "attributes", + "service": "service", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, service: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[datetime, UnsetType]=unset, **kwargs): + """ + JSON object containing all event attributes and their associated values. + + :param attributes: JSON object of attributes from RUM events. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param service: The name of the application or service generating RUM events. + It is used to switch from RUM to APM, so make sure you define the same + value when you use both products. + :type service: str, optional + + :param tags: Array of tags associated with your event. + :type tags: [str], optional + + :param timestamp: Timestamp of your event. + :type timestamp: datetime, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if service is not unset: + kwargs["service"] = service + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_event_processing_scale.py b/datadog_api_client/v2/model/rum_event_processing_scale.py new file mode 100644 index 0000000000..f9bd7e269e --- /dev/null +++ b/datadog_api_client/v2/model/rum_event_processing_scale.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_event_processing_state import RUMEventProcessingState + +class RUMEventProcessingScale(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_event_processing_state import RUMEventProcessingState + return { + "last_modified_at": (int,), + "state": (RUMEventProcessingState,), + } + attribute_map = { + "last_modified_at": "last_modified_at", + "state": "state", + } + + def __init__(self_, last_modified_at: Union[int, UnsetType]=unset, state: Union[RUMEventProcessingState, UnsetType]=unset, **kwargs): + """ + RUM event processing scale configuration. + + :param last_modified_at: Timestamp in milliseconds when this scale was last modified. + :type last_modified_at: int, optional + + :param state: Configures which RUM events are processed and stored for the application. + :type state: RUMEventProcessingState, optional + """ + if last_modified_at is not unset: + kwargs["last_modified_at"] = last_modified_at + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_event_processing_state.py b/datadog_api_client/v2/model/rum_event_processing_state.py new file mode 100644 index 0000000000..c48699be8c --- /dev/null +++ b/datadog_api_client/v2/model/rum_event_processing_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMEventProcessingState(ModelSimple): + """ + Configures which RUM events are processed and stored for the application. + + :param value: Must be one of ["ALL", "ERROR_FOCUSED_MODE", "NONE"]. + :type value: str + """ + + allowed_values = { + "ALL", + "ERROR_FOCUSED_MODE", + "NONE", + } + ALL: ClassVar["RUMEventProcessingState"] + ERROR_FOCUSED_MODE: ClassVar["RUMEventProcessingState"] + NONE: ClassVar["RUMEventProcessingState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMEventProcessingState.ALL = RUMEventProcessingState("ALL") +RUMEventProcessingState.ERROR_FOCUSED_MODE = RUMEventProcessingState("ERROR_FOCUSED_MODE") +RUMEventProcessingState.NONE = RUMEventProcessingState("NONE") diff --git a/datadog_api_client/v2/model/rum_event_type.py b/datadog_api_client/v2/model/rum_event_type.py new file mode 100644 index 0000000000..e28b45c41a --- /dev/null +++ b/datadog_api_client/v2/model/rum_event_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMEventType(ModelSimple): + """ + Type of the event. + + :param value: If omitted defaults to "rum". Must be one of ["rum"]. + :type value: str + """ + + allowed_values = { + "rum", + } + RUM: ClassVar["RUMEventType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMEventType.RUM = RUMEventType("rum") diff --git a/datadog_api_client/v2/model/rum_events_response.py b/datadog_api_client/v2/model/rum_events_response.py new file mode 100644 index 0000000000..95af1c6269 --- /dev/null +++ b/datadog_api_client/v2/model/rum_events_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_event import RUMEvent + from datadog_api_client.v2.model.rum_response_links import RUMResponseLinks + from datadog_api_client.v2.model.rum_response_metadata import RUMResponseMetadata + +class RUMEventsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_event import RUMEvent + from datadog_api_client.v2.model.rum_response_links import RUMResponseLinks + from datadog_api_client.v2.model.rum_response_metadata import RUMResponseMetadata + return { + "data": ([RUMEvent],), + "links": (RUMResponseLinks,), + "meta": (RUMResponseMetadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[RUMEvent], UnsetType]=unset, links: Union[RUMResponseLinks, UnsetType]=unset, meta: Union[RUMResponseMetadata, UnsetType]=unset, **kwargs): + """ + Response object with all events matching the request and pagination information. + + :param data: Array of events matching the request. + :type data: [RUMEvent], optional + + :param links: Links attributes. + :type links: RUMResponseLinks, optional + + :param meta: The metadata associated with a request. + :type meta: RUMResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_group_by.py b/datadog_api_client/v2/model/rum_group_by.py new file mode 100644 index 0000000000..500a75337c --- /dev/null +++ b/datadog_api_client/v2/model/rum_group_by.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_group_by_histogram import RUMGroupByHistogram + from datadog_api_client.v2.model.rum_group_by_missing import RUMGroupByMissing + from datadog_api_client.v2.model.rum_aggregate_sort import RUMAggregateSort + from datadog_api_client.v2.model.rum_group_by_total import RUMGroupByTotal + +class RUMGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_group_by_histogram import RUMGroupByHistogram + from datadog_api_client.v2.model.rum_group_by_missing import RUMGroupByMissing + from datadog_api_client.v2.model.rum_aggregate_sort import RUMAggregateSort + from datadog_api_client.v2.model.rum_group_by_total import RUMGroupByTotal + return { + "facet": (str,), + "histogram": (RUMGroupByHistogram,), + "limit": (int,), + "missing": (RUMGroupByMissing,), + "sort": (RUMAggregateSort,), + "total": (RUMGroupByTotal,), + } + attribute_map = { + "facet": "facet", + "histogram": "histogram", + "limit": "limit", + "missing": "missing", + "sort": "sort", + "total": "total", + } + + def __init__(self_, facet: str, histogram: Union[RUMGroupByHistogram, UnsetType]=unset, limit: Union[int, UnsetType]=unset, missing: Union[RUMGroupByMissing, str, float, UnsetType]=unset, sort: Union[RUMAggregateSort, UnsetType]=unset, total: Union[RUMGroupByTotal, bool, str, float, UnsetType]=unset, **kwargs): + """ + A group-by rule. + + :param facet: The name of the facet to use (required). + :type facet: str + + :param histogram: Used to perform a histogram computation (only for measure facets). + Note: At most 100 buckets are allowed, the number of buckets is (max - min)/interval. + :type histogram: RUMGroupByHistogram, optional + + :param limit: The maximum buckets to return for this group-by. + :type limit: int, optional + + :param missing: The value to use for logs that don't have the facet used to group by. + :type missing: RUMGroupByMissing, optional + + :param sort: A sort rule. + :type sort: RUMAggregateSort, optional + + :param total: A resulting object to put the given computes in over all the matching records. + :type total: RUMGroupByTotal, optional + """ + if histogram is not unset: + kwargs["histogram"] = histogram + if limit is not unset: + kwargs["limit"] = limit + if missing is not unset: + kwargs["missing"] = missing + if sort is not unset: + kwargs["sort"] = sort + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v2/model/rum_group_by_histogram.py b/datadog_api_client/v2/model/rum_group_by_histogram.py new file mode 100644 index 0000000000..76bc0e77e5 --- /dev/null +++ b/datadog_api_client/v2/model/rum_group_by_histogram.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMGroupByHistogram(ModelNormal): + @cached_property + def openapi_types(_): + return { + "interval": (float,), + "max": (float,), + "min": (float,), + } + attribute_map = { + "interval": "interval", + "max": "max", + "min": "min", + } + + def __init__(self_, interval: float, max: float, min: float, **kwargs): + """ + Used to perform a histogram computation (only for measure facets). + Note: At most 100 buckets are allowed, the number of buckets is (max - min)/interval. + + :param interval: The bin size of the histogram buckets. + :type interval: float + + :param max: The maximum value for the measure used in the histogram + (values greater than this one are filtered out). + :type max: float + + :param min: The minimum value for the measure used in the histogram + (values smaller than this one are filtered out). + :type min: float + """ + super().__init__(kwargs) + + + self_.interval = interval + self_.max = max + self_.min = min diff --git a/datadog_api_client/v2/model/rum_group_by_missing.py b/datadog_api_client/v2/model/rum_group_by_missing.py new file mode 100644 index 0000000000..444cf16b2d --- /dev/null +++ b/datadog_api_client/v2/model/rum_group_by_missing.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMGroupByMissing(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The value to use for logs that don't have the facet used to group by. + """ + 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 + return { + "oneOf": [ + str, + float, + ], + } diff --git a/datadog_api_client/v2/model/rum_group_by_total.py b/datadog_api_client/v2/model/rum_group_by_total.py new file mode 100644 index 0000000000..db89212c39 --- /dev/null +++ b/datadog_api_client/v2/model/rum_group_by_total.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMGroupByTotal(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A resulting object to put the given computes in over all the matching records. + """ + 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 + return { + "oneOf": [ + bool, + str, + float, + ], + } diff --git a/datadog_api_client/v2/model/rum_metric_compute.py b/datadog_api_client/v2/model/rum_metric_compute.py new file mode 100644 index 0000000000..19c3281169 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_compute.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_compute_aggregation_type import RumMetricComputeAggregationType + +class RumMetricCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_compute_aggregation_type import RumMetricComputeAggregationType + return { + "aggregation_type": (RumMetricComputeAggregationType,), + "include_percentiles": (bool,), + "path": (str,), + } + attribute_map = { + "aggregation_type": "aggregation_type", + "include_percentiles": "include_percentiles", + "path": "path", + } + + def __init__(self_, aggregation_type: RumMetricComputeAggregationType, include_percentiles: Union[bool, UnsetType]=unset, path: Union[str, UnsetType]=unset, **kwargs): + """ + The compute rule to compute the RUM-based metric. + + :param aggregation_type: The type of aggregation to use. + :type aggregation_type: RumMetricComputeAggregationType + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when ``aggregation_type`` is ``distribution``. + :type include_percentiles: bool, optional + + :param path: The path to the value the RUM-based metric will aggregate on. + Only present when ``aggregation_type`` is ``distribution``. + :type path: str, optional + """ + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + if path is not unset: + kwargs["path"] = path + super().__init__(kwargs) + + + self_.aggregation_type = aggregation_type diff --git a/datadog_api_client/v2/model/rum_metric_compute_aggregation_type.py b/datadog_api_client/v2/model/rum_metric_compute_aggregation_type.py new file mode 100644 index 0000000000..e4070d3779 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_compute_aggregation_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumMetricComputeAggregationType(ModelSimple): + """ + The type of aggregation to use. + + :param value: Must be one of ["count", "distribution"]. + :type value: str + """ + + allowed_values = { + "count", + "distribution", + } + COUNT: ClassVar["RumMetricComputeAggregationType"] + DISTRIBUTION: ClassVar["RumMetricComputeAggregationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumMetricComputeAggregationType.COUNT = RumMetricComputeAggregationType("count") +RumMetricComputeAggregationType.DISTRIBUTION = RumMetricComputeAggregationType("distribution") diff --git a/datadog_api_client/v2/model/rum_metric_create_attributes.py b/datadog_api_client/v2/model/rum_metric_create_attributes.py new file mode 100644 index 0000000000..da0cf222a7 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_create_attributes.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_compute import RumMetricCompute + from datadog_api_client.v2.model.rum_metric_event_type import RumMetricEventType + from datadog_api_client.v2.model.rum_metric_filter import RumMetricFilter + from datadog_api_client.v2.model.rum_metric_group_by import RumMetricGroupBy + from datadog_api_client.v2.model.rum_metric_uniqueness import RumMetricUniqueness + +class RumMetricCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_compute import RumMetricCompute + from datadog_api_client.v2.model.rum_metric_event_type import RumMetricEventType + from datadog_api_client.v2.model.rum_metric_filter import RumMetricFilter + from datadog_api_client.v2.model.rum_metric_group_by import RumMetricGroupBy + from datadog_api_client.v2.model.rum_metric_uniqueness import RumMetricUniqueness + return { + "compute": (RumMetricCompute,), + "event_type": (RumMetricEventType,), + "filter": (RumMetricFilter,), + "group_by": ([RumMetricGroupBy],), + "uniqueness": (RumMetricUniqueness,), + } + attribute_map = { + "compute": "compute", + "event_type": "event_type", + "filter": "filter", + "group_by": "group_by", + "uniqueness": "uniqueness", + } + + def __init__(self_, compute: RumMetricCompute, event_type: RumMetricEventType, filter: Union[RumMetricFilter, UnsetType]=unset, group_by: Union[List[RumMetricGroupBy], UnsetType]=unset, uniqueness: Union[RumMetricUniqueness, UnsetType]=unset, **kwargs): + """ + The object describing the Datadog RUM-based metric to create. + + :param compute: The compute rule to compute the RUM-based metric. + :type compute: RumMetricCompute + + :param event_type: The type of RUM events to filter on. + :type event_type: RumMetricEventType + + :param filter: The RUM-based metric filter. Events matching this filter will be aggregated in this metric. + :type filter: RumMetricFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [RumMetricGroupBy], optional + + :param uniqueness: The rule to count updatable events. Is only set if ``event_type`` is ``sessions`` or ``views``. + :type uniqueness: RumMetricUniqueness, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if uniqueness is not unset: + kwargs["uniqueness"] = uniqueness + super().__init__(kwargs) + + + self_.compute = compute + self_.event_type = event_type diff --git a/datadog_api_client/v2/model/rum_metric_create_data.py b/datadog_api_client/v2/model/rum_metric_create_data.py new file mode 100644 index 0000000000..a3ae0cc45e --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_create_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_create_attributes import RumMetricCreateAttributes + from datadog_api_client.v2.model.rum_metric_type import RumMetricType + +class RumMetricCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_create_attributes import RumMetricCreateAttributes + from datadog_api_client.v2.model.rum_metric_type import RumMetricType + return { + "attributes": (RumMetricCreateAttributes,), + "id": (str,), + "type": (RumMetricType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RumMetricCreateAttributes, id: str, type: RumMetricType, **kwargs): + """ + The new RUM-based metric properties. + + :param attributes: The object describing the Datadog RUM-based metric to create. + :type attributes: RumMetricCreateAttributes + + :param id: The name of the RUM-based metric. + :type id: str + + :param type: The type of the resource. The value should always be rum_metrics. + :type type: RumMetricType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_metric_create_request.py b/datadog_api_client/v2/model/rum_metric_create_request.py new file mode 100644 index 0000000000..55f43f3e6d --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_create_data import RumMetricCreateData + +class RumMetricCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_create_data import RumMetricCreateData + return { + "data": (RumMetricCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumMetricCreateData, **kwargs): + """ + The new RUM-based metric body. + + :param data: The new RUM-based metric properties. + :type data: RumMetricCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_metric_event_type.py b/datadog_api_client/v2/model/rum_metric_event_type.py new file mode 100644 index 0000000000..443d00da36 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_event_type.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumMetricEventType(ModelSimple): + """ + The type of RUM events to filter on. + + :param value: Must be one of ["session", "view", "action", "error", "resource", "long_task", "vital"]. + :type value: str + """ + + allowed_values = { + "session", + "view", + "action", + "error", + "resource", + "long_task", + "vital", + } + SESSION: ClassVar["RumMetricEventType"] + VIEW: ClassVar["RumMetricEventType"] + ACTION: ClassVar["RumMetricEventType"] + ERROR: ClassVar["RumMetricEventType"] + RESOURCE: ClassVar["RumMetricEventType"] + LONG_TASK: ClassVar["RumMetricEventType"] + VITAL: ClassVar["RumMetricEventType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumMetricEventType.SESSION = RumMetricEventType("session") +RumMetricEventType.VIEW = RumMetricEventType("view") +RumMetricEventType.ACTION = RumMetricEventType("action") +RumMetricEventType.ERROR = RumMetricEventType("error") +RumMetricEventType.RESOURCE = RumMetricEventType("resource") +RumMetricEventType.LONG_TASK = RumMetricEventType("long_task") +RumMetricEventType.VITAL = RumMetricEventType("vital") diff --git a/datadog_api_client/v2/model/rum_metric_filter.py b/datadog_api_client/v2/model/rum_metric_filter.py new file mode 100644 index 0000000000..0f63f4e9b6 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumMetricFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, **kwargs): + """ + The RUM-based metric filter. Events matching this filter will be aggregated in this metric. + + :param query: The search query - following the RUM search syntax. + :type query: str + """ + super().__init__(kwargs) + query = kwargs.get("query", "*") + + + self_.query = query diff --git a/datadog_api_client/v2/model/rum_metric_group_by.py b/datadog_api_client/v2/model/rum_metric_group_by.py new file mode 100644 index 0000000000..9d81e148be --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_group_by.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumMetricGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "path": (str,), + "tag_name": (str,), + } + attribute_map = { + "path": "path", + "tag_name": "tag_name", + } + + def __init__(self_, path: str, tag_name: Union[str, UnsetType]=unset, **kwargs): + """ + A group by rule. + + :param path: The path to the value the RUM-based metric will be aggregated over. + :type path: str + + :param tag_name: Eventual name of the tag that gets created. By default, ``path`` is used as the tag name. + :type tag_name: str, optional + """ + if tag_name is not unset: + kwargs["tag_name"] = tag_name + super().__init__(kwargs) + + + self_.path = path diff --git a/datadog_api_client/v2/model/rum_metric_response.py b/datadog_api_client/v2/model/rum_metric_response.py new file mode 100644 index 0000000000..26a7b1c693 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_response_data import RumMetricResponseData + +class RumMetricResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_response_data import RumMetricResponseData + return { + "data": (RumMetricResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RumMetricResponseData, UnsetType]=unset, **kwargs): + """ + The RUM-based metric object. + + :param data: The RUM-based metric properties. + :type data: RumMetricResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_metric_response_attributes.py b/datadog_api_client/v2/model/rum_metric_response_attributes.py new file mode 100644 index 0000000000..444edbb770 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_response_attributes.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_response_compute import RumMetricResponseCompute + from datadog_api_client.v2.model.rum_metric_event_type import RumMetricEventType + from datadog_api_client.v2.model.rum_metric_response_filter import RumMetricResponseFilter + from datadog_api_client.v2.model.rum_metric_response_group_by import RumMetricResponseGroupBy + from datadog_api_client.v2.model.rum_metric_response_uniqueness import RumMetricResponseUniqueness + +class RumMetricResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_response_compute import RumMetricResponseCompute + from datadog_api_client.v2.model.rum_metric_event_type import RumMetricEventType + from datadog_api_client.v2.model.rum_metric_response_filter import RumMetricResponseFilter + from datadog_api_client.v2.model.rum_metric_response_group_by import RumMetricResponseGroupBy + from datadog_api_client.v2.model.rum_metric_response_uniqueness import RumMetricResponseUniqueness + return { + "compute": (RumMetricResponseCompute,), + "event_type": (RumMetricEventType,), + "filter": (RumMetricResponseFilter,), + "group_by": ([RumMetricResponseGroupBy],), + "uniqueness": (RumMetricResponseUniqueness,), + } + attribute_map = { + "compute": "compute", + "event_type": "event_type", + "filter": "filter", + "group_by": "group_by", + "uniqueness": "uniqueness", + } + + def __init__(self_, compute: Union[RumMetricResponseCompute, UnsetType]=unset, event_type: Union[RumMetricEventType, UnsetType]=unset, filter: Union[RumMetricResponseFilter, UnsetType]=unset, group_by: Union[List[RumMetricResponseGroupBy], UnsetType]=unset, uniqueness: Union[RumMetricResponseUniqueness, UnsetType]=unset, **kwargs): + """ + The object describing a Datadog RUM-based metric. + + :param compute: The compute rule to compute the RUM-based metric. + :type compute: RumMetricResponseCompute, optional + + :param event_type: The type of RUM events to filter on. + :type event_type: RumMetricEventType, optional + + :param filter: The RUM-based metric filter. RUM events matching this filter will be aggregated in this metric. + :type filter: RumMetricResponseFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [RumMetricResponseGroupBy], optional + + :param uniqueness: The rule to count updatable events. Is only set if ``event_type`` is ``session`` or ``view``. + :type uniqueness: RumMetricResponseUniqueness, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if event_type is not unset: + kwargs["event_type"] = event_type + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if uniqueness is not unset: + kwargs["uniqueness"] = uniqueness + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_metric_response_compute.py b/datadog_api_client/v2/model/rum_metric_response_compute.py new file mode 100644 index 0000000000..655b386edd --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_response_compute.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_compute_aggregation_type import RumMetricComputeAggregationType + +class RumMetricResponseCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_compute_aggregation_type import RumMetricComputeAggregationType + return { + "aggregation_type": (RumMetricComputeAggregationType,), + "include_percentiles": (bool,), + "path": (str,), + } + attribute_map = { + "aggregation_type": "aggregation_type", + "include_percentiles": "include_percentiles", + "path": "path", + } + + def __init__(self_, aggregation_type: Union[RumMetricComputeAggregationType, UnsetType]=unset, include_percentiles: Union[bool, UnsetType]=unset, path: Union[str, UnsetType]=unset, **kwargs): + """ + The compute rule to compute the RUM-based metric. + + :param aggregation_type: The type of aggregation to use. + :type aggregation_type: RumMetricComputeAggregationType, optional + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when ``aggregation_type`` is ``distribution``. + :type include_percentiles: bool, optional + + :param path: The path to the value the RUM-based metric will aggregate on. + Only present when ``aggregation_type`` is ``distribution``. + :type path: str, optional + """ + if aggregation_type is not unset: + kwargs["aggregation_type"] = aggregation_type + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + if path is not unset: + kwargs["path"] = path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_metric_response_data.py b/datadog_api_client/v2/model/rum_metric_response_data.py new file mode 100644 index 0000000000..8f926db252 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_response_attributes import RumMetricResponseAttributes + from datadog_api_client.v2.model.rum_metric_type import RumMetricType + +class RumMetricResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_response_attributes import RumMetricResponseAttributes + from datadog_api_client.v2.model.rum_metric_type import RumMetricType + return { + "attributes": (RumMetricResponseAttributes,), + "id": (str,), + "type": (RumMetricType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[RumMetricResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[RumMetricType, UnsetType]=unset, **kwargs): + """ + The RUM-based metric properties. + + :param attributes: The object describing a Datadog RUM-based metric. + :type attributes: RumMetricResponseAttributes, optional + + :param id: The name of the RUM-based metric. + :type id: str, optional + + :param type: The type of the resource. The value should always be rum_metrics. + :type type: RumMetricType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_metric_response_filter.py b/datadog_api_client/v2/model/rum_metric_response_filter.py new file mode 100644 index 0000000000..fc827983e4 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_response_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumMetricResponseFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + The RUM-based metric filter. RUM events matching this filter will be aggregated in this metric. + + :param query: The search query - following the RUM search syntax. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_metric_response_group_by.py b/datadog_api_client/v2/model/rum_metric_response_group_by.py new file mode 100644 index 0000000000..a0990c4ddf --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_response_group_by.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumMetricResponseGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "path": (str,), + "tag_name": (str,), + } + attribute_map = { + "path": "path", + "tag_name": "tag_name", + } + + def __init__(self_, path: Union[str, UnsetType]=unset, tag_name: Union[str, UnsetType]=unset, **kwargs): + """ + A group by rule. + + :param path: The path to the value the RUM-based metric will be aggregated over. + :type path: str, optional + + :param tag_name: Eventual name of the tag that gets created. By default, ``path`` is used as the tag name. + :type tag_name: str, optional + """ + if path is not unset: + kwargs["path"] = path + if tag_name is not unset: + kwargs["tag_name"] = tag_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_metric_response_uniqueness.py b/datadog_api_client/v2/model/rum_metric_response_uniqueness.py new file mode 100644 index 0000000000..4be405a3ef --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_response_uniqueness.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_uniqueness_when import RumMetricUniquenessWhen + +class RumMetricResponseUniqueness(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_uniqueness_when import RumMetricUniquenessWhen + return { + "when": (RumMetricUniquenessWhen,), + } + attribute_map = { + "when": "when", + } + + def __init__(self_, when: Union[RumMetricUniquenessWhen, UnsetType]=unset, **kwargs): + """ + The rule to count updatable events. Is only set if ``event_type`` is ``session`` or ``view``. + + :param when: When to count updatable events. ``match`` when the event is first seen, or ``end`` when the event is complete. + :type when: RumMetricUniquenessWhen, optional + """ + if when is not unset: + kwargs["when"] = when + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_metric_type.py b/datadog_api_client/v2/model/rum_metric_type.py new file mode 100644 index 0000000000..0386a395e9 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumMetricType(ModelSimple): + """ + The type of the resource. The value should always be rum_metrics. + + :param value: If omitted defaults to "rum_metrics". Must be one of ["rum_metrics"]. + :type value: str + """ + + allowed_values = { + "rum_metrics", + } + RUM_METRICS: ClassVar["RumMetricType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumMetricType.RUM_METRICS = RumMetricType("rum_metrics") diff --git a/datadog_api_client/v2/model/rum_metric_uniqueness.py b/datadog_api_client/v2/model/rum_metric_uniqueness.py new file mode 100644 index 0000000000..9085f95268 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_uniqueness.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_uniqueness_when import RumMetricUniquenessWhen + +class RumMetricUniqueness(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_uniqueness_when import RumMetricUniquenessWhen + return { + "when": (RumMetricUniquenessWhen,), + } + attribute_map = { + "when": "when", + } + + def __init__(self_, when: RumMetricUniquenessWhen, **kwargs): + """ + The rule to count updatable events. Is only set if ``event_type`` is ``sessions`` or ``views``. + + :param when: When to count updatable events. ``match`` when the event is first seen, or ``end`` when the event is complete. + :type when: RumMetricUniquenessWhen + """ + super().__init__(kwargs) + + + self_.when = when diff --git a/datadog_api_client/v2/model/rum_metric_uniqueness_when.py b/datadog_api_client/v2/model/rum_metric_uniqueness_when.py new file mode 100644 index 0000000000..0e261377d2 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_uniqueness_when.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumMetricUniquenessWhen(ModelSimple): + """ + When to count updatable events. `match` when the event is first seen, or `end` when the event is complete. + + :param value: Must be one of ["match", "end"]. + :type value: str + """ + + allowed_values = { + "match", + "end", + } + WHEN_MATCH: ClassVar["RumMetricUniquenessWhen"] + WHEN_END: ClassVar["RumMetricUniquenessWhen"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumMetricUniquenessWhen.WHEN_MATCH = RumMetricUniquenessWhen("match") +RumMetricUniquenessWhen.WHEN_END = RumMetricUniquenessWhen("end") diff --git a/datadog_api_client/v2/model/rum_metric_update_attributes.py b/datadog_api_client/v2/model/rum_metric_update_attributes.py new file mode 100644 index 0000000000..7c476482fe --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_update_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_update_compute import RumMetricUpdateCompute + from datadog_api_client.v2.model.rum_metric_filter import RumMetricFilter + from datadog_api_client.v2.model.rum_metric_group_by import RumMetricGroupBy + +class RumMetricUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_update_compute import RumMetricUpdateCompute + from datadog_api_client.v2.model.rum_metric_filter import RumMetricFilter + from datadog_api_client.v2.model.rum_metric_group_by import RumMetricGroupBy + return { + "compute": (RumMetricUpdateCompute,), + "filter": (RumMetricFilter,), + "group_by": ([RumMetricGroupBy],), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + } + + def __init__(self_, compute: Union[RumMetricUpdateCompute, UnsetType]=unset, filter: Union[RumMetricFilter, UnsetType]=unset, group_by: Union[List[RumMetricGroupBy], UnsetType]=unset, **kwargs): + """ + The RUM-based metric properties that will be updated. + + :param compute: The compute rule to compute the RUM-based metric. + :type compute: RumMetricUpdateCompute, optional + + :param filter: The RUM-based metric filter. Events matching this filter will be aggregated in this metric. + :type filter: RumMetricFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [RumMetricGroupBy], optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_metric_update_compute.py b/datadog_api_client/v2/model/rum_metric_update_compute.py new file mode 100644 index 0000000000..5c27291daa --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_update_compute.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumMetricUpdateCompute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_percentiles": (bool,), + } + attribute_map = { + "include_percentiles": "include_percentiles", + } + + def __init__(self_, include_percentiles: Union[bool, UnsetType]=unset, **kwargs): + """ + The compute rule to compute the RUM-based metric. + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when ``aggregation_type`` is ``distribution``. + :type include_percentiles: bool, optional + """ + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_metric_update_data.py b/datadog_api_client/v2/model/rum_metric_update_data.py new file mode 100644 index 0000000000..6a4207947c --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_update_attributes import RumMetricUpdateAttributes + from datadog_api_client.v2.model.rum_metric_type import RumMetricType + +class RumMetricUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_update_attributes import RumMetricUpdateAttributes + from datadog_api_client.v2.model.rum_metric_type import RumMetricType + return { + "attributes": (RumMetricUpdateAttributes,), + "id": (str,), + "type": (RumMetricType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RumMetricUpdateAttributes, type: RumMetricType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The new RUM-based metric properties. + + :param attributes: The RUM-based metric properties that will be updated. + :type attributes: RumMetricUpdateAttributes + + :param id: The name of the RUM-based metric. + :type id: str, optional + + :param type: The type of the resource. The value should always be rum_metrics. + :type type: RumMetricType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/rum_metric_update_request.py b/datadog_api_client/v2/model/rum_metric_update_request.py new file mode 100644 index 0000000000..8fd7474663 --- /dev/null +++ b/datadog_api_client/v2/model/rum_metric_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_update_data import RumMetricUpdateData + +class RumMetricUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_update_data import RumMetricUpdateData + return { + "data": (RumMetricUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumMetricUpdateData, **kwargs): + """ + The new RUM-based metric body. + + :param data: The new RUM-based metric properties. + :type data: RumMetricUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_metrics_response.py b/datadog_api_client/v2/model/rum_metrics_response.py new file mode 100644 index 0000000000..5e71b43f9d --- /dev/null +++ b/datadog_api_client/v2/model/rum_metrics_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_metric_response_data import RumMetricResponseData + +class RumMetricsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_metric_response_data import RumMetricResponseData + return { + "data": ([RumMetricResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RumMetricResponseData], UnsetType]=unset, **kwargs): + """ + All the available RUM-based metric objects. + + :param data: A list of RUM-based metric objects. + :type data: [RumMetricResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_operation_create_request.py b/datadog_api_client/v2/model/rum_operation_create_request.py new file mode 100644 index 0000000000..43ae57b118 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_create_request_data import RUMOperationCreateRequestData + +class RUMOperationCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_create_request_data import RUMOperationCreateRequestData + return { + "data": (RUMOperationCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RUMOperationCreateRequestData, **kwargs): + """ + The request body for creating a RUM operation. + + :param data: The data object for creating a RUM operation. + :type data: RUMOperationCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_operation_create_request_data.py b/datadog_api_client/v2/model/rum_operation_create_request_data.py new file mode 100644 index 0000000000..24b3f2f577 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_request_attributes import RUMOperationRequestAttributes + from datadog_api_client.v2.model.rum_operation_type import RUMOperationType + +class RUMOperationCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_request_attributes import RUMOperationRequestAttributes + from datadog_api_client.v2.model.rum_operation_type import RUMOperationType + return { + "attributes": (RUMOperationRequestAttributes,), + "type": (RUMOperationType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: RUMOperationRequestAttributes, type: RUMOperationType, **kwargs): + """ + The data object for creating a RUM operation. + + :param attributes: Attributes for creating or updating a RUM operation. + :type attributes: RUMOperationRequestAttributes + + :param type: The JSON:API type for RUM operation resources. + :type type: RUMOperationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/rum_operation_journey_composite_rule.py b/datadog_api_client/v2/model/rum_operation_journey_composite_rule.py new file mode 100644 index 0000000000..922157e42b --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_journey_composite_rule.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_journey_composite_rule_kind import RUMOperationJourneyCompositeRuleKind + from datadog_api_client.v2.model.rum_operation_journey_predicate import RUMOperationJourneyPredicate + +class RUMOperationJourneyCompositeRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_journey_composite_rule_kind import RUMOperationJourneyCompositeRuleKind + from datadog_api_client.v2.model.rum_operation_journey_predicate import RUMOperationJourneyPredicate + return { + "composite_rule_id": (str,), + "config_version": (str,), + "kind": (RUMOperationJourneyCompositeRuleKind,), + "max_window_ms": (int,), + "predicates": ([RUMOperationJourneyPredicate],), + } + attribute_map = { + "composite_rule_id": "composite_rule_id", + "config_version": "config_version", + "kind": "kind", + "max_window_ms": "max_window_ms", + "predicates": "predicates", + } + read_only_vars = { + "composite_rule_id", + "config_version", + } + + def __init__(self_, kind: RUMOperationJourneyCompositeRuleKind, predicates: List[RUMOperationJourneyPredicate], composite_rule_id: Union[str, UnsetType]=unset, config_version: Union[str, UnsetType]=unset, max_window_ms: Union[int, UnsetType]=unset, **kwargs): + """ + A composite rule combining several predicates. Used as an alternative to ``nodes`` on a journey + step when several conditions must be matched together, in any order or in a specific order. + + :param composite_rule_id: The unique identifier of the composite rule. Generated by the server if omitted. + :type composite_rule_id: str, optional + + :param config_version: A hash of the composite rule's configuration, computed by the server. + :type config_version: str, optional + + :param kind: The rule used to combine the composite rule's predicates. ``all_of`` requires every predicate + to match, in any order. ``in_order`` requires every predicate to match in the given order. + :type kind: RUMOperationJourneyCompositeRuleKind + + :param max_window_ms: The maximum time window, in milliseconds, in which all predicates must match. + :type max_window_ms: int, optional + + :param predicates: The list of predicates that must be matched by RUM events. + :type predicates: [RUMOperationJourneyPredicate] + """ + if composite_rule_id is not unset: + kwargs["composite_rule_id"] = composite_rule_id + if config_version is not unset: + kwargs["config_version"] = config_version + if max_window_ms is not unset: + kwargs["max_window_ms"] = max_window_ms + super().__init__(kwargs) + + + self_.kind = kind + self_.predicates = predicates diff --git a/datadog_api_client/v2/model/rum_operation_journey_composite_rule_kind.py b/datadog_api_client/v2/model/rum_operation_journey_composite_rule_kind.py new file mode 100644 index 0000000000..d192e6b44a --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_journey_composite_rule_kind.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMOperationJourneyCompositeRuleKind(ModelSimple): + """ + The rule used to combine the composite rule's predicates. `all_of` requires every predicate + to match, in any order. `in_order` requires every predicate to match in the given order. + + :param value: Must be one of ["all_of", "in_order"]. + :type value: str + """ + + allowed_values = { + "all_of", + "in_order", + } + ALL_OF: ClassVar["RUMOperationJourneyCompositeRuleKind"] + IN_ORDER: ClassVar["RUMOperationJourneyCompositeRuleKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMOperationJourneyCompositeRuleKind.ALL_OF = RUMOperationJourneyCompositeRuleKind("all_of") +RUMOperationJourneyCompositeRuleKind.IN_ORDER = RUMOperationJourneyCompositeRuleKind("in_order") diff --git a/datadog_api_client/v2/model/rum_operation_journey_node.py b/datadog_api_client/v2/model/rum_operation_journey_node.py new file mode 100644 index 0000000000..8603577861 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_journey_node.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMOperationJourneyNode(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "query": (str,), + } + attribute_map = { + "id": "id", + "query": "query", + } + read_only_vars = { + "id", + } + + def __init__(self_, query: str, id: Union[str, UnsetType]=unset, **kwargs): + """ + A single node within a RUM operation journey step, matching RUM events with a query. + + :param id: The unique identifier of the node. Generated by the server if omitted. + :type id: str, optional + + :param query: The RUM search query used to match events for this node. + :type query: str + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v2/model/rum_operation_journey_predicate.py b/datadog_api_client/v2/model/rum_operation_journey_predicate.py new file mode 100644 index 0000000000..e0977007c1 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_journey_predicate.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMOperationJourneyPredicate(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: str, **kwargs): + """ + A single predicate within a composite rule, matching RUM events with a query. + + :param query: The RUM search query used to match events for this predicate. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v2/model/rum_operation_journey_rum.py b/datadog_api_client/v2/model/rum_operation_journey_rum.py new file mode 100644 index 0000000000..ab25a7aab4 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_journey_rum.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_journey_step import RUMOperationJourneyStep + +class RUMOperationJourneyRum(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_journey_step import RUMOperationJourneyStep + return { + "rum_steps": ([RUMOperationJourneyStep],), + } + attribute_map = { + "rum_steps": "rum_steps", + } + + def __init__(self_, rum_steps: List[RUMOperationJourneyStep], **kwargs): + """ + The definition of a RUM operation's journey, used to detect it from RUM events. + + :param rum_steps: The ordered list of steps composing the RUM journey. + :type rum_steps: [RUMOperationJourneyStep] + """ + super().__init__(kwargs) + + + self_.rum_steps = rum_steps diff --git a/datadog_api_client/v2/model/rum_operation_journey_step.py b/datadog_api_client/v2/model/rum_operation_journey_step.py new file mode 100644 index 0000000000..83f4b90aa5 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_journey_step.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_journey_composite_rule import RUMOperationJourneyCompositeRule + from datadog_api_client.v2.model.rum_operation_journey_node import RUMOperationJourneyNode + from datadog_api_client.v2.model.rum_operation_journey_step_type import RUMOperationJourneyStepType + +class RUMOperationJourneyStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_journey_composite_rule import RUMOperationJourneyCompositeRule + from datadog_api_client.v2.model.rum_operation_journey_node import RUMOperationJourneyNode + from datadog_api_client.v2.model.rum_operation_journey_step_type import RUMOperationJourneyStepType + return { + "composite": (RUMOperationJourneyCompositeRule,), + "nodes": ([RUMOperationJourneyNode],), + "type": (RUMOperationJourneyStepType,), + } + attribute_map = { + "composite": "composite", + "nodes": "nodes", + "type": "type", + } + + def __init__(self_, type: RUMOperationJourneyStepType, composite: Union[RUMOperationJourneyCompositeRule, UnsetType]=unset, nodes: Union[List[RUMOperationJourneyNode], UnsetType]=unset, **kwargs): + """ + A single step of a RUM operation's journey. Matches RUM events either through a list of ``nodes`` + or through a ``composite`` rule; the two are mutually exclusive. + + :param composite: A composite rule combining several predicates. Used as an alternative to ``nodes`` on a journey + step when several conditions must be matched together, in any order or in a specific order. + :type composite: RUMOperationJourneyCompositeRule, optional + + :param nodes: The list of nodes that can match this step. Mutually exclusive with ``composite``. + :type nodes: [RUMOperationJourneyNode], optional + + :param type: The type of a step within a RUM operation's journey. + :type type: RUMOperationJourneyStepType + """ + if composite is not unset: + kwargs["composite"] = composite + if nodes is not unset: + kwargs["nodes"] = nodes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/rum_operation_journey_step_type.py b/datadog_api_client/v2/model/rum_operation_journey_step_type.py new file mode 100644 index 0000000000..38433a7fec --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_journey_step_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMOperationJourneyStepType(ModelSimple): + """ + The type of a step within a RUM operation's journey. + + :param value: Must be one of ["start", "update", "stop", "error", "abandoned"]. + :type value: str + """ + + allowed_values = { + "start", + "update", + "stop", + "error", + "abandoned", + } + START: ClassVar["RUMOperationJourneyStepType"] + UPDATE: ClassVar["RUMOperationJourneyStepType"] + STOP: ClassVar["RUMOperationJourneyStepType"] + ERROR: ClassVar["RUMOperationJourneyStepType"] + ABANDONED: ClassVar["RUMOperationJourneyStepType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMOperationJourneyStepType.START = RUMOperationJourneyStepType("start") +RUMOperationJourneyStepType.UPDATE = RUMOperationJourneyStepType("update") +RUMOperationJourneyStepType.STOP = RUMOperationJourneyStepType("stop") +RUMOperationJourneyStepType.ERROR = RUMOperationJourneyStepType("error") +RUMOperationJourneyStepType.ABANDONED = RUMOperationJourneyStepType("abandoned") diff --git a/datadog_api_client/v2/model/rum_operation_request_attributes.py b/datadog_api_client/v2/model/rum_operation_request_attributes.py new file mode 100644 index 0000000000..86cf22c1e4 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_request_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_journey_rum import RUMOperationJourneyRum + +class RUMOperationRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_journey_rum import RUMOperationJourneyRum + return { + "application_id": (UUID,), + "category": (str, none_type), + "description": (str, none_type), + "display_name": (str,), + "feature_ids": ([str],), + "journey_rum": (RUMOperationJourneyRum,), + "name": (str,), + "tags": ([str],), + } + attribute_map = { + "application_id": "application_id", + "category": "category", + "description": "description", + "display_name": "display_name", + "feature_ids": "feature_ids", + "journey_rum": "journey_rum", + "name": "name", + "tags": "tags", + } + + def __init__(self_, journey_rum: RUMOperationJourneyRum, name: str, tags: List[str], application_id: Union[UUID, UnsetType]=unset, category: Union[str, none_type, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, feature_ids: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a RUM operation. + + :param application_id: The RUM application ID the operation belongs to. + :type application_id: UUID, optional + + :param category: The category of the RUM operation. + :type category: str, none_type, optional + + :param description: A description of the RUM operation. + :type description: str, none_type, optional + + :param display_name: A human-readable display name for the RUM operation. + :type display_name: str, optional + + :param feature_ids: The list of feature IDs associated with the RUM operation. + :type feature_ids: [str], optional + + :param journey_rum: The definition of a RUM operation's journey, used to detect it from RUM events. + :type journey_rum: RUMOperationJourneyRum + + :param name: The unique name of the RUM operation. Must not contain spaces. + :type name: str + + :param tags: A list of tags associated with the RUM operation. + :type tags: [str] + """ + if application_id is not unset: + kwargs["application_id"] = application_id + if category is not unset: + kwargs["category"] = category + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if feature_ids is not unset: + kwargs["feature_ids"] = feature_ids + super().__init__(kwargs) + + + self_.journey_rum = journey_rum + self_.name = name + self_.tags = tags diff --git a/datadog_api_client/v2/model/rum_operation_response.py b/datadog_api_client/v2/model/rum_operation_response.py new file mode 100644 index 0000000000..e14cf86567 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_response_data import RUMOperationResponseData + +class RUMOperationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_response_data import RUMOperationResponseData + return { + "data": (RUMOperationResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RUMOperationResponseData, **kwargs): + """ + The response for a single RUM operation. + + :param data: The data object in a RUM operation response. + :type data: RUMOperationResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_operation_response_attributes.py b/datadog_api_client/v2/model/rum_operation_response_attributes.py new file mode 100644 index 0000000000..fcd1d1687f --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_response_attributes.py @@ -0,0 +1,137 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_user import RUMOperationUser + from datadog_api_client.v2.model.rum_operation_journey_rum import RUMOperationJourneyRum + +class RUMOperationResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_user import RUMOperationUser + from datadog_api_client.v2.model.rum_operation_journey_rum import RUMOperationJourneyRum + return { + "application_id": (UUID, none_type), + "category": (str, none_type), + "created_at": (datetime,), + "created_by": (RUMOperationUser,), + "description": (str, none_type), + "display_name": (str,), + "feature_ids": ([str],), + "journey_rum": (RUMOperationJourneyRum,), + "name": (str,), + "org_id": (int,), + "tags": ([str],), + "updated_at": (datetime, none_type), + "updated_by": (RUMOperationUser,), + } + attribute_map = { + "application_id": "application_id", + "category": "category", + "created_at": "created_at", + "created_by": "created_by", + "description": "description", + "display_name": "display_name", + "feature_ids": "feature_ids", + "journey_rum": "journey_rum", + "name": "name", + "org_id": "org_id", + "tags": "tags", + "updated_at": "updated_at", + "updated_by": "updated_by", + } + read_only_vars = { + "created_at", + "org_id", + "updated_at", + } + + def __init__(self_, journey_rum: RUMOperationJourneyRum, name: str, tags: List[str], application_id: Union[UUID, none_type, UnsetType]=unset, category: Union[str, none_type, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, created_by: Union[RUMOperationUser, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, feature_ids: Union[List[str], UnsetType]=unset, org_id: Union[int, UnsetType]=unset, updated_at: Union[datetime, none_type, UnsetType]=unset, updated_by: Union[RUMOperationUser, UnsetType]=unset, **kwargs): + """ + Attributes of a RUM operation response. + + :param application_id: The RUM application ID the operation belongs to. + :type application_id: UUID, none_type, optional + + :param category: The category of the RUM operation. + :type category: str, none_type, optional + + :param created_at: The timestamp when the RUM operation was created. + :type created_at: datetime, optional + + :param created_by: A Datadog user referenced by a RUM operation. + :type created_by: RUMOperationUser, optional + + :param description: A description of the RUM operation. + :type description: str, none_type, optional + + :param display_name: A human-readable display name for the RUM operation. + :type display_name: str, optional + + :param feature_ids: The list of feature IDs associated with the RUM operation. + :type feature_ids: [str], optional + + :param journey_rum: The definition of a RUM operation's journey, used to detect it from RUM events. + :type journey_rum: RUMOperationJourneyRum + + :param name: The unique name of the RUM operation. Must not contain spaces. + :type name: str + + :param org_id: The ID of the organization the RUM operation belongs to. + :type org_id: int, optional + + :param tags: A list of tags associated with the RUM operation. + :type tags: [str] + + :param updated_at: The timestamp when the RUM operation was last updated. + :type updated_at: datetime, none_type, optional + + :param updated_by: A Datadog user referenced by a RUM operation. + :type updated_by: RUMOperationUser, optional + """ + if application_id is not unset: + kwargs["application_id"] = application_id + if category is not unset: + kwargs["category"] = category + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if feature_ids is not unset: + kwargs["feature_ids"] = feature_ids + if org_id is not unset: + kwargs["org_id"] = org_id + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if updated_by is not unset: + kwargs["updated_by"] = updated_by + super().__init__(kwargs) + + + self_.journey_rum = journey_rum + self_.name = name + self_.tags = tags diff --git a/datadog_api_client/v2/model/rum_operation_response_data.py b/datadog_api_client/v2/model/rum_operation_response_data.py new file mode 100644 index 0000000000..ba53457562 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_response_attributes import RUMOperationResponseAttributes + from datadog_api_client.v2.model.rum_operation_type import RUMOperationType + +class RUMOperationResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_response_attributes import RUMOperationResponseAttributes + from datadog_api_client.v2.model.rum_operation_type import RUMOperationType + return { + "attributes": (RUMOperationResponseAttributes,), + "id": (str,), + "type": (RUMOperationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: RUMOperationResponseAttributes, id: str, type: RUMOperationType, **kwargs): + """ + The data object in a RUM operation response. + + :param attributes: Attributes of a RUM operation response. + :type attributes: RUMOperationResponseAttributes + + :param id: The unique identifier of the RUM operation. + :type id: str + + :param type: The JSON:API type for RUM operation resources. + :type type: RUMOperationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_create_request.py b/datadog_api_client/v2/model/rum_operation_strong_link_create_request.py new file mode 100644 index 0000000000..406662df82 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_create_request_data import RUMOperationStrongLinkCreateRequestData + +class RUMOperationStrongLinkCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_create_request_data import RUMOperationStrongLinkCreateRequestData + return { + "data": (RUMOperationStrongLinkCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RUMOperationStrongLinkCreateRequestData, **kwargs): + """ + The request body for creating a RUM operation strong link. + + :param data: The data object for creating a RUM operation strong link. + :type data: RUMOperationStrongLinkCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_create_request_attributes.py b/datadog_api_client/v2/model/rum_operation_strong_link_create_request_attributes.py new file mode 100644 index 0000000000..4c3127465f --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_create_request_attributes.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_status import RUMOperationStrongLinkStatus + +class RUMOperationStrongLinkCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_status import RUMOperationStrongLinkStatus + return { + "application_id": (UUID,), + "description": (str, none_type), + "feature_id": (str,), + "operation_id": (str,), + "operation_name": (str,), + "status": (RUMOperationStrongLinkStatus,), + "tags": ([str],), + } + attribute_map = { + "application_id": "application_id", + "description": "description", + "feature_id": "feature_id", + "operation_id": "operation_id", + "operation_name": "operation_name", + "status": "status", + "tags": "tags", + } + + def __init__(self_, feature_id: str, application_id: Union[UUID, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, operation_id: Union[str, UnsetType]=unset, operation_name: Union[str, UnsetType]=unset, status: Union[RUMOperationStrongLinkStatus, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for creating a RUM operation strong link. + + :param application_id: The RUM application ID used when creating a stub operation from ``operation_name``. + :type application_id: UUID, optional + + :param description: A description of the strong link. + :type description: str, none_type, optional + + :param feature_id: The unique identifier of the feature to link. + :type feature_id: str + + :param operation_id: The unique identifier of the RUM operation to link. Either ``operation_id`` or + ``operation_name`` is required. + :type operation_id: str, optional + + :param operation_name: The name of the RUM operation to link. Either ``operation_id`` or ``operation_name`` is + required. If no operation with this name exists, a stub operation is created. + :type operation_name: str, optional + + :param status: The status of a RUM operation strong link. + :type status: RUMOperationStrongLinkStatus, optional + + :param tags: A list of tags associated with the strong link. + :type tags: [str], optional + """ + if application_id is not unset: + kwargs["application_id"] = application_id + if description is not unset: + kwargs["description"] = description + if operation_id is not unset: + kwargs["operation_id"] = operation_id + if operation_name is not unset: + kwargs["operation_name"] = operation_name + if status is not unset: + kwargs["status"] = status + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.feature_id = feature_id diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_create_request_data.py b/datadog_api_client/v2/model/rum_operation_strong_link_create_request_data.py new file mode 100644 index 0000000000..ee29473ced --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_create_request_attributes import RUMOperationStrongLinkCreateRequestAttributes + from datadog_api_client.v2.model.rum_operation_strong_link_type import RUMOperationStrongLinkType + +class RUMOperationStrongLinkCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_create_request_attributes import RUMOperationStrongLinkCreateRequestAttributes + from datadog_api_client.v2.model.rum_operation_strong_link_type import RUMOperationStrongLinkType + return { + "attributes": (RUMOperationStrongLinkCreateRequestAttributes,), + "type": (RUMOperationStrongLinkType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: RUMOperationStrongLinkCreateRequestAttributes, type: RUMOperationStrongLinkType, **kwargs): + """ + The data object for creating a RUM operation strong link. + + :param attributes: Attributes for creating a RUM operation strong link. + :type attributes: RUMOperationStrongLinkCreateRequestAttributes + + :param type: The JSON:API type for RUM operation strong link resources. + :type type: RUMOperationStrongLinkType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_response.py b/datadog_api_client/v2/model/rum_operation_strong_link_response.py new file mode 100644 index 0000000000..7ae348fe51 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_response_data import RUMOperationStrongLinkResponseData + +class RUMOperationStrongLinkResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_response_data import RUMOperationStrongLinkResponseData + return { + "data": (RUMOperationStrongLinkResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RUMOperationStrongLinkResponseData, **kwargs): + """ + The response for a single RUM operation strong link. + + :param data: The data object in a RUM operation strong link response. + :type data: RUMOperationStrongLinkResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_response_attributes.py b/datadog_api_client/v2/model/rum_operation_strong_link_response_attributes.py new file mode 100644 index 0000000000..2945b895df --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_status import RUMOperationStrongLinkStatus + +class RUMOperationStrongLinkResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_status import RUMOperationStrongLinkStatus + return { + "created_at": (datetime,), + "description": (str, none_type), + "feature_id": (str,), + "operation_id": (str,), + "status": (RUMOperationStrongLinkStatus,), + "tags": ([str],), + "updated_at": (datetime, none_type), + } + attribute_map = { + "created_at": "created_at", + "description": "description", + "feature_id": "feature_id", + "operation_id": "operation_id", + "status": "status", + "tags": "tags", + "updated_at": "updated_at", + } + read_only_vars = { + "created_at", + "feature_id", + "operation_id", + "updated_at", + } + + def __init__(self_, feature_id: str, operation_id: str, status: RUMOperationStrongLinkStatus, created_at: Union[datetime, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, updated_at: Union[datetime, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of a RUM operation strong link response. + + :param created_at: The timestamp when the strong link was created. + :type created_at: datetime, optional + + :param description: A description of the strong link. + :type description: str, none_type, optional + + :param feature_id: The unique identifier of the linked feature. + :type feature_id: str + + :param operation_id: The unique identifier of the linked RUM operation. + :type operation_id: str + + :param status: The status of a RUM operation strong link. + :type status: RUMOperationStrongLinkStatus + + :param tags: A list of tags associated with the strong link. + :type tags: [str], optional + + :param updated_at: The timestamp when the strong link was last updated. + :type updated_at: datetime, none_type, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if tags is not unset: + kwargs["tags"] = tags + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.feature_id = feature_id + self_.operation_id = operation_id + self_.status = status diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_response_data.py b/datadog_api_client/v2/model/rum_operation_strong_link_response_data.py new file mode 100644 index 0000000000..26a8bd1e89 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_response_attributes import RUMOperationStrongLinkResponseAttributes + from datadog_api_client.v2.model.rum_operation_strong_link_type import RUMOperationStrongLinkType + +class RUMOperationStrongLinkResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_response_attributes import RUMOperationStrongLinkResponseAttributes + from datadog_api_client.v2.model.rum_operation_strong_link_type import RUMOperationStrongLinkType + return { + "attributes": (RUMOperationStrongLinkResponseAttributes,), + "id": (str,), + "type": (RUMOperationStrongLinkType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: RUMOperationStrongLinkResponseAttributes, id: str, type: RUMOperationStrongLinkType, **kwargs): + """ + The data object in a RUM operation strong link response. + + :param attributes: Attributes of a RUM operation strong link response. + :type attributes: RUMOperationStrongLinkResponseAttributes + + :param id: The unique identifier of the strong link, formatted as ``:``. + :type id: str + + :param type: The JSON:API type for RUM operation strong link resources. + :type type: RUMOperationStrongLinkType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_status.py b/datadog_api_client/v2/model/rum_operation_strong_link_status.py new file mode 100644 index 0000000000..ed4c0123e0 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMOperationStrongLinkStatus(ModelSimple): + """ + The status of a RUM operation strong link. + + :param value: Must be one of ["DRAFT", "CONFIRMED", "REJECTED"]. + :type value: str + """ + + allowed_values = { + "DRAFT", + "CONFIRMED", + "REJECTED", + } + DRAFT: ClassVar["RUMOperationStrongLinkStatus"] + CONFIRMED: ClassVar["RUMOperationStrongLinkStatus"] + REJECTED: ClassVar["RUMOperationStrongLinkStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMOperationStrongLinkStatus.DRAFT = RUMOperationStrongLinkStatus("DRAFT") +RUMOperationStrongLinkStatus.CONFIRMED = RUMOperationStrongLinkStatus("CONFIRMED") +RUMOperationStrongLinkStatus.REJECTED = RUMOperationStrongLinkStatus("REJECTED") diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_type.py b/datadog_api_client/v2/model/rum_operation_strong_link_type.py new file mode 100644 index 0000000000..67d16eb69e --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMOperationStrongLinkType(ModelSimple): + """ + The JSON:API type for RUM operation strong link resources. + + :param value: If omitted defaults to "strong_links". Must be one of ["strong_links"]. + :type value: str + """ + + allowed_values = { + "strong_links", + } + STRONG_LINKS: ClassVar["RUMOperationStrongLinkType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMOperationStrongLinkType.STRONG_LINKS = RUMOperationStrongLinkType("strong_links") diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_update_request.py b/datadog_api_client/v2/model/rum_operation_strong_link_update_request.py new file mode 100644 index 0000000000..354e351fb8 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_update_request_data import RUMOperationStrongLinkUpdateRequestData + +class RUMOperationStrongLinkUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_update_request_data import RUMOperationStrongLinkUpdateRequestData + return { + "data": (RUMOperationStrongLinkUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RUMOperationStrongLinkUpdateRequestData, **kwargs): + """ + The request body for updating a RUM operation strong link. + + :param data: The data object for updating a RUM operation strong link. + :type data: RUMOperationStrongLinkUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_update_request_attributes.py b/datadog_api_client/v2/model/rum_operation_strong_link_update_request_attributes.py new file mode 100644 index 0000000000..c7bde06b07 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_update_request_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_update_status import RUMOperationStrongLinkUpdateStatus + +class RUMOperationStrongLinkUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_update_status import RUMOperationStrongLinkUpdateStatus + return { + "status": (RUMOperationStrongLinkUpdateStatus,), + } + attribute_map = { + "status": "status", + } + + def __init__(self_, status: RUMOperationStrongLinkUpdateStatus, **kwargs): + """ + Attributes for updating a RUM operation strong link. + + :param status: The status of a RUM operation strong link. Can only be set to ``CONFIRMED`` or ``REJECTED``. + :type status: RUMOperationStrongLinkUpdateStatus + """ + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_update_request_data.py b/datadog_api_client/v2/model/rum_operation_strong_link_update_request_data.py new file mode 100644 index 0000000000..d35dfc9a9b --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_update_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_update_request_attributes import RUMOperationStrongLinkUpdateRequestAttributes + from datadog_api_client.v2.model.rum_operation_strong_link_type import RUMOperationStrongLinkType + +class RUMOperationStrongLinkUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_update_request_attributes import RUMOperationStrongLinkUpdateRequestAttributes + from datadog_api_client.v2.model.rum_operation_strong_link_type import RUMOperationStrongLinkType + return { + "attributes": (RUMOperationStrongLinkUpdateRequestAttributes,), + "type": (RUMOperationStrongLinkType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: RUMOperationStrongLinkUpdateRequestAttributes, type: RUMOperationStrongLinkType, **kwargs): + """ + The data object for updating a RUM operation strong link. + + :param attributes: Attributes for updating a RUM operation strong link. + :type attributes: RUMOperationStrongLinkUpdateRequestAttributes + + :param type: The JSON:API type for RUM operation strong link resources. + :type type: RUMOperationStrongLinkType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/rum_operation_strong_link_update_status.py b/datadog_api_client/v2/model/rum_operation_strong_link_update_status.py new file mode 100644 index 0000000000..4c7f9d7274 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_link_update_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMOperationStrongLinkUpdateStatus(ModelSimple): + """ + The status of a RUM operation strong link. Can only be set to `CONFIRMED` or `REJECTED`. + + :param value: Must be one of ["CONFIRMED", "REJECTED"]. + :type value: str + """ + + allowed_values = { + "CONFIRMED", + "REJECTED", + } + CONFIRMED: ClassVar["RUMOperationStrongLinkUpdateStatus"] + REJECTED: ClassVar["RUMOperationStrongLinkUpdateStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMOperationStrongLinkUpdateStatus.CONFIRMED = RUMOperationStrongLinkUpdateStatus("CONFIRMED") +RUMOperationStrongLinkUpdateStatus.REJECTED = RUMOperationStrongLinkUpdateStatus("REJECTED") diff --git a/datadog_api_client/v2/model/rum_operation_strong_links_list_response.py b/datadog_api_client/v2/model/rum_operation_strong_links_list_response.py new file mode 100644 index 0000000000..8843870466 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_links_list_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_strong_link_response_data import RUMOperationStrongLinkResponseData + from datadog_api_client.v2.model.rum_operation_strong_links_list_response_meta import RUMOperationStrongLinksListResponseMeta + +class RUMOperationStrongLinksListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_strong_link_response_data import RUMOperationStrongLinkResponseData + from datadog_api_client.v2.model.rum_operation_strong_links_list_response_meta import RUMOperationStrongLinksListResponseMeta + return { + "data": ([RUMOperationStrongLinkResponseData],), + "meta": (RUMOperationStrongLinksListResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[RUMOperationStrongLinkResponseData], meta: Union[RUMOperationStrongLinksListResponseMeta, UnsetType]=unset, **kwargs): + """ + The response for a list of RUM operation strong links. + + :param data: + :type data: [RUMOperationStrongLinkResponseData] + + :param meta: Metadata for a list of RUM operation strong links. + :type meta: RUMOperationStrongLinksListResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_operation_strong_links_list_response_meta.py b/datadog_api_client/v2/model/rum_operation_strong_links_list_response_meta.py new file mode 100644 index 0000000000..99f9cca36f --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_strong_links_list_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMOperationStrongLinksListResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "limit": (int,), + "offset": (int,), + "total": (int,), + } + attribute_map = { + "limit": "limit", + "offset": "offset", + "total": "total", + } + + def __init__(self_, limit: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata for a list of RUM operation strong links. + + :param limit: The pagination limit. + :type limit: int, optional + + :param offset: The current offset. + :type offset: int, optional + + :param total: The total number of strong links matching the request. + :type total: int, optional + """ + if limit is not unset: + kwargs["limit"] = limit + if offset is not unset: + kwargs["offset"] = offset + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_operation_type.py b/datadog_api_client/v2/model/rum_operation_type.py new file mode 100644 index 0000000000..ef092c651f --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMOperationType(ModelSimple): + """ + The JSON:API type for RUM operation resources. + + :param value: If omitted defaults to "operations". Must be one of ["operations"]. + :type value: str + """ + + allowed_values = { + "operations", + } + OPERATIONS: ClassVar["RUMOperationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMOperationType.OPERATIONS = RUMOperationType("operations") diff --git a/datadog_api_client/v2/model/rum_operation_update_request.py b/datadog_api_client/v2/model/rum_operation_update_request.py new file mode 100644 index 0000000000..a3c5bf41f5 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_update_request_data import RUMOperationUpdateRequestData + +class RUMOperationUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_update_request_data import RUMOperationUpdateRequestData + return { + "data": (RUMOperationUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RUMOperationUpdateRequestData, **kwargs): + """ + The request body for updating a RUM operation. + + :param data: The data object for updating a RUM operation. + :type data: RUMOperationUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_operation_update_request_data.py b/datadog_api_client/v2/model/rum_operation_update_request_data.py new file mode 100644 index 0000000000..faa3131dd6 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_update_request_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_request_attributes import RUMOperationRequestAttributes + from datadog_api_client.v2.model.rum_operation_type import RUMOperationType + +class RUMOperationUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_request_attributes import RUMOperationRequestAttributes + from datadog_api_client.v2.model.rum_operation_type import RUMOperationType + return { + "attributes": (RUMOperationRequestAttributes,), + "id": (str,), + "type": (RUMOperationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RUMOperationRequestAttributes, id: str, type: RUMOperationType, **kwargs): + """ + The data object for updating a RUM operation. + + :param attributes: Attributes for creating or updating a RUM operation. + :type attributes: RUMOperationRequestAttributes + + :param id: The unique identifier of the RUM operation. Must match the ID in the URL path. + :type id: str + + :param type: The JSON:API type for RUM operation resources. + :type type: RUMOperationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_operation_user.py b/datadog_api_client/v2/model/rum_operation_user.py new file mode 100644 index 0000000000..2188c0812d --- /dev/null +++ b/datadog_api_client/v2/model/rum_operation_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMOperationUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "name": (str,), + "uuid": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "name": "name", + "uuid": "uuid", + } + read_only_vars = { + "email", + "handle", + "name", + "uuid", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, uuid: Union[str, UnsetType]=unset, **kwargs): + """ + A Datadog user referenced by a RUM operation. + + :param email: The email of the user. + :type email: str, optional + + :param handle: The handle of the user. + :type handle: str, optional + + :param name: The name of the user. + :type name: str, optional + + :param uuid: The UUID of the user. + :type uuid: str, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + if uuid is not unset: + kwargs["uuid"] = uuid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_operations_list_response.py b/datadog_api_client/v2/model/rum_operations_list_response.py new file mode 100644 index 0000000000..daa2ab37fc --- /dev/null +++ b/datadog_api_client/v2/model/rum_operations_list_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operation_response_data import RUMOperationResponseData + from datadog_api_client.v2.model.rum_operations_list_response_meta import RUMOperationsListResponseMeta + +class RUMOperationsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operation_response_data import RUMOperationResponseData + from datadog_api_client.v2.model.rum_operations_list_response_meta import RUMOperationsListResponseMeta + return { + "data": ([RUMOperationResponseData],), + "meta": (RUMOperationsListResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[RUMOperationResponseData], meta: Union[RUMOperationsListResponseMeta, UnsetType]=unset, **kwargs): + """ + The response for a list of RUM operations. + + :param data: + :type data: [RUMOperationResponseData] + + :param meta: Metadata for a list of RUM operations. + :type meta: RUMOperationsListResponseMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_operations_list_response_meta.py b/datadog_api_client/v2/model/rum_operations_list_response_meta.py new file mode 100644 index 0000000000..2c3e6e2176 --- /dev/null +++ b/datadog_api_client/v2/model/rum_operations_list_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_operations_list_response_meta_page import RUMOperationsListResponseMetaPage + +class RUMOperationsListResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_operations_list_response_meta_page import RUMOperationsListResponseMetaPage + return { + "page": (RUMOperationsListResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[RUMOperationsListResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Metadata for a list of RUM operations. + + :param page: Pagination metadata for a list of RUM operations. + :type page: RUMOperationsListResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_operations_list_response_meta_page.py b/datadog_api_client/v2/model/rum_operations_list_response_meta_page.py new file mode 100644 index 0000000000..edb484a02a --- /dev/null +++ b/datadog_api_client/v2/model/rum_operations_list_response_meta_page.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMOperationsListResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_offset": (int,), + "last_offset": (int,), + "limit": (int,), + "next_offset": (int, none_type), + "offset": (int,), + "prev_offset": (int, none_type), + "total": (int,), + "type": (str,), + } + attribute_map = { + "first_offset": "first_offset", + "last_offset": "last_offset", + "limit": "limit", + "next_offset": "next_offset", + "offset": "offset", + "prev_offset": "prev_offset", + "total": "total", + "type": "type", + } + + def __init__(self_, first_offset: Union[int, UnsetType]=unset, last_offset: Union[int, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_offset: Union[int, none_type, UnsetType]=unset, offset: Union[int, UnsetType]=unset, prev_offset: Union[int, none_type, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination metadata for a list of RUM operations. + + :param first_offset: The offset of the first page. + :type first_offset: int, optional + + :param last_offset: The offset of the last page. + :type last_offset: int, optional + + :param limit: The pagination limit. + :type limit: int, optional + + :param next_offset: The offset of the next page, if any. + :type next_offset: int, none_type, optional + + :param offset: The current offset. + :type offset: int, optional + + :param prev_offset: The offset of the previous page, if any. + :type prev_offset: int, none_type, optional + + :param total: The total number of RUM operations matching the search. + :type total: int, optional + + :param type: The type of pagination used. + :type type: str, optional + """ + if first_offset is not unset: + kwargs["first_offset"] = first_offset + if last_offset is not unset: + kwargs["last_offset"] = last_offset + if limit is not unset: + kwargs["limit"] = limit + if next_offset is not unset: + kwargs["next_offset"] = next_offset + if offset is not unset: + kwargs["offset"] = offset + if prev_offset is not unset: + kwargs["prev_offset"] = prev_offset + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filter_attributes.py b/datadog_api_client/v2/model/rum_permanent_retention_filter_attributes.py new file mode 100644 index 0000000000..e3a91eea72 --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filter_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_cross_product_sampling import RumCrossProductSampling + from datadog_api_client.v2.model.rum_permanent_retention_filter_editability import RumPermanentRetentionFilterEditability + +class RumPermanentRetentionFilterAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_cross_product_sampling import RumCrossProductSampling + from datadog_api_client.v2.model.rum_permanent_retention_filter_editability import RumPermanentRetentionFilterEditability + return { + "cross_product_sampling": (RumCrossProductSampling,), + "description": (str,), + "editability": (RumPermanentRetentionFilterEditability,), + "name": (str,), + } + attribute_map = { + "cross_product_sampling": "cross_product_sampling", + "description": "description", + "editability": "editability", + "name": "name", + } + + def __init__(self_, cross_product_sampling: Union[RumCrossProductSampling, UnsetType]=unset, description: Union[str, UnsetType]=unset, editability: Union[RumPermanentRetentionFilterEditability, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of a permanent RUM retention filter. + + :param cross_product_sampling: The configuration for cross-product retention filters. + :type cross_product_sampling: RumCrossProductSampling, optional + + :param description: A description of what the filter retains. + :type description: str, optional + + :param editability: Indicates which cross-product fields of a permanent RUM retention filter can be updated. + :type editability: RumPermanentRetentionFilterEditability, optional + + :param name: The display name of the permanent retention filter. + :type name: str, optional + """ + if cross_product_sampling is not unset: + kwargs["cross_product_sampling"] = cross_product_sampling + if description is not unset: + kwargs["description"] = description + if editability is not unset: + kwargs["editability"] = editability + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filter_data.py b/datadog_api_client/v2/model/rum_permanent_retention_filter_data.py new file mode 100644 index 0000000000..200e05ea75 --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filter_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_permanent_retention_filter_attributes import RumPermanentRetentionFilterAttributes + from datadog_api_client.v2.model.rum_permanent_retention_filter_id import RumPermanentRetentionFilterID + from datadog_api_client.v2.model.rum_permanent_retention_filter_type import RumPermanentRetentionFilterType + +class RumPermanentRetentionFilterData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_permanent_retention_filter_attributes import RumPermanentRetentionFilterAttributes + from datadog_api_client.v2.model.rum_permanent_retention_filter_id import RumPermanentRetentionFilterID + from datadog_api_client.v2.model.rum_permanent_retention_filter_type import RumPermanentRetentionFilterType + return { + "attributes": (RumPermanentRetentionFilterAttributes,), + "id": (RumPermanentRetentionFilterID,), + "type": (RumPermanentRetentionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[RumPermanentRetentionFilterAttributes, UnsetType]=unset, id: Union[RumPermanentRetentionFilterID, UnsetType]=unset, type: Union[RumPermanentRetentionFilterType, UnsetType]=unset, **kwargs): + """ + A permanent RUM retention filter. + + :param attributes: The attributes of a permanent RUM retention filter. + :type attributes: RumPermanentRetentionFilterAttributes, optional + + :param id: The identifier of a permanent RUM retention filter. + :type id: RumPermanentRetentionFilterID, optional + + :param type: The type of the resource. The value should always be ``permanent_retention_filters``. + :type type: RumPermanentRetentionFilterType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filter_editability.py b/datadog_api_client/v2/model/rum_permanent_retention_filter_editability.py new file mode 100644 index 0000000000..5b02cc3344 --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filter_editability.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumPermanentRetentionFilterEditability(ModelNormal): + @cached_property + def openapi_types(_): + return { + "trace_editable": (bool,), + } + attribute_map = { + "trace_editable": "trace_editable", + } + + def __init__(self_, trace_editable: Union[bool, UnsetType]=unset, **kwargs): + """ + Indicates which cross-product fields of a permanent RUM retention filter can be updated. + + :param trace_editable: Whether the APM trace cross-product configuration of the filter can be updated. + :type trace_editable: bool, optional + """ + if trace_editable is not unset: + kwargs["trace_editable"] = trace_editable + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filter_id.py b/datadog_api_client/v2/model/rum_permanent_retention_filter_id.py new file mode 100644 index 0000000000..50615d7e88 --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filter_id.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumPermanentRetentionFilterID(ModelSimple): + """ + The identifier of a permanent RUM retention filter. + + :param value: Must be one of ["rum_apm_flat_sampling", "synthetics_sessions", "forced_replay_sessions"]. + :type value: str + """ + + allowed_values = { + "rum_apm_flat_sampling", + "synthetics_sessions", + "forced_replay_sessions", + } + RUM_APM_FLAT_SAMPLING: ClassVar["RumPermanentRetentionFilterID"] + SYNTHETICS_SESSIONS: ClassVar["RumPermanentRetentionFilterID"] + FORCED_REPLAY_SESSIONS: ClassVar["RumPermanentRetentionFilterID"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumPermanentRetentionFilterID.RUM_APM_FLAT_SAMPLING = RumPermanentRetentionFilterID("rum_apm_flat_sampling") +RumPermanentRetentionFilterID.SYNTHETICS_SESSIONS = RumPermanentRetentionFilterID("synthetics_sessions") +RumPermanentRetentionFilterID.FORCED_REPLAY_SESSIONS = RumPermanentRetentionFilterID("forced_replay_sessions") diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filter_response.py b/datadog_api_client/v2/model/rum_permanent_retention_filter_response.py new file mode 100644 index 0000000000..bd853667ce --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filter_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_permanent_retention_filter_data import RumPermanentRetentionFilterData + +class RumPermanentRetentionFilterResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_permanent_retention_filter_data import RumPermanentRetentionFilterData + return { + "data": (RumPermanentRetentionFilterData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RumPermanentRetentionFilterData, UnsetType]=unset, **kwargs): + """ + A permanent RUM retention filter object. + + :param data: A permanent RUM retention filter. + :type data: RumPermanentRetentionFilterData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filter_type.py b/datadog_api_client/v2/model/rum_permanent_retention_filter_type.py new file mode 100644 index 0000000000..fba557d558 --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filter_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumPermanentRetentionFilterType(ModelSimple): + """ + The type of the resource. The value should always be `permanent_retention_filters`. + + :param value: If omitted defaults to "permanent_retention_filters". Must be one of ["permanent_retention_filters"]. + :type value: str + """ + + allowed_values = { + "permanent_retention_filters", + } + PERMANENT_RETENTION_FILTERS: ClassVar["RumPermanentRetentionFilterType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumPermanentRetentionFilterType.PERMANENT_RETENTION_FILTERS = RumPermanentRetentionFilterType("permanent_retention_filters") diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filter_update_attributes.py b/datadog_api_client/v2/model/rum_permanent_retention_filter_update_attributes.py new file mode 100644 index 0000000000..9e650f1520 --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filter_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_cross_product_sampling_update import RumCrossProductSamplingUpdate + +class RumPermanentRetentionFilterUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_cross_product_sampling_update import RumCrossProductSamplingUpdate + return { + "cross_product_sampling": (RumCrossProductSamplingUpdate,), + } + attribute_map = { + "cross_product_sampling": "cross_product_sampling", + } + + def __init__(self_, cross_product_sampling: Union[RumCrossProductSamplingUpdate, UnsetType]=unset, **kwargs): + """ + The configuration to update on a permanent RUM retention filter. + + :param cross_product_sampling: The configuration for cross-product retention filters. All fields are optional for partial updates. + :type cross_product_sampling: RumCrossProductSamplingUpdate, optional + """ + if cross_product_sampling is not unset: + kwargs["cross_product_sampling"] = cross_product_sampling + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filter_update_data.py b/datadog_api_client/v2/model/rum_permanent_retention_filter_update_data.py new file mode 100644 index 0000000000..43189b8b13 --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filter_update_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_permanent_retention_filter_update_attributes import RumPermanentRetentionFilterUpdateAttributes + from datadog_api_client.v2.model.rum_permanent_retention_filter_id import RumPermanentRetentionFilterID + from datadog_api_client.v2.model.rum_permanent_retention_filter_type import RumPermanentRetentionFilterType + +class RumPermanentRetentionFilterUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_permanent_retention_filter_update_attributes import RumPermanentRetentionFilterUpdateAttributes + from datadog_api_client.v2.model.rum_permanent_retention_filter_id import RumPermanentRetentionFilterID + from datadog_api_client.v2.model.rum_permanent_retention_filter_type import RumPermanentRetentionFilterType + return { + "attributes": (RumPermanentRetentionFilterUpdateAttributes,), + "id": (RumPermanentRetentionFilterID,), + "type": (RumPermanentRetentionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RumPermanentRetentionFilterUpdateAttributes, id: RumPermanentRetentionFilterID, type: RumPermanentRetentionFilterType, **kwargs): + """ + The new permanent RUM retention filter configuration to update. + + :param attributes: The configuration to update on a permanent RUM retention filter. + :type attributes: RumPermanentRetentionFilterUpdateAttributes + + :param id: The identifier of a permanent RUM retention filter. + :type id: RumPermanentRetentionFilterID + + :param type: The type of the resource. The value should always be ``permanent_retention_filters``. + :type type: RumPermanentRetentionFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filter_update_request.py b/datadog_api_client/v2/model/rum_permanent_retention_filter_update_request.py new file mode 100644 index 0000000000..739793c1d9 --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filter_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_permanent_retention_filter_update_data import RumPermanentRetentionFilterUpdateData + +class RumPermanentRetentionFilterUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_permanent_retention_filter_update_data import RumPermanentRetentionFilterUpdateData + return { + "data": (RumPermanentRetentionFilterUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumPermanentRetentionFilterUpdateData, **kwargs): + """ + The permanent RUM retention filter body to update. + + :param data: The new permanent RUM retention filter configuration to update. + :type data: RumPermanentRetentionFilterUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_permanent_retention_filters_response.py b/datadog_api_client/v2/model/rum_permanent_retention_filters_response.py new file mode 100644 index 0000000000..f0ab128506 --- /dev/null +++ b/datadog_api_client/v2/model/rum_permanent_retention_filters_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_permanent_retention_filter_data import RumPermanentRetentionFilterData + +class RumPermanentRetentionFiltersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_permanent_retention_filter_data import RumPermanentRetentionFilterData + return { + "data": ([RumPermanentRetentionFilterData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RumPermanentRetentionFilterData], UnsetType]=unset, **kwargs): + """ + All permanent RUM retention filters for a RUM application. + + :param data: A list of permanent RUM retention filters. + :type data: [RumPermanentRetentionFilterData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_product_analytics_retention_scale.py b/datadog_api_client/v2/model/rum_product_analytics_retention_scale.py new file mode 100644 index 0000000000..d17e399e97 --- /dev/null +++ b/datadog_api_client/v2/model/rum_product_analytics_retention_scale.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_product_analytics_retention_state import RUMProductAnalyticsRetentionState + +class RUMProductAnalyticsRetentionScale(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_product_analytics_retention_state import RUMProductAnalyticsRetentionState + return { + "last_modified_at": (int,), + "state": (RUMProductAnalyticsRetentionState,), + } + attribute_map = { + "last_modified_at": "last_modified_at", + "state": "state", + } + + def __init__(self_, last_modified_at: Union[int, UnsetType]=unset, state: Union[RUMProductAnalyticsRetentionState, UnsetType]=unset, **kwargs): + """ + Product Analytics retention scale configuration. + + :param last_modified_at: Timestamp in milliseconds when this scale was last modified. + :type last_modified_at: int, optional + + :param state: Controls the retention policy for Product Analytics data derived from RUM events. + :type state: RUMProductAnalyticsRetentionState, optional + """ + if last_modified_at is not unset: + kwargs["last_modified_at"] = last_modified_at + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_product_analytics_retention_state.py b/datadog_api_client/v2/model/rum_product_analytics_retention_state.py new file mode 100644 index 0000000000..64594ccb51 --- /dev/null +++ b/datadog_api_client/v2/model/rum_product_analytics_retention_state.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMProductAnalyticsRetentionState(ModelSimple): + """ + Controls the retention policy for Product Analytics data derived from RUM events. + + :param value: Must be one of ["MAX", "NONE"]. + :type value: str + """ + + allowed_values = { + "MAX", + "NONE", + } + MAX: ClassVar["RUMProductAnalyticsRetentionState"] + NONE: ClassVar["RUMProductAnalyticsRetentionState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMProductAnalyticsRetentionState.MAX = RUMProductAnalyticsRetentionState("MAX") +RUMProductAnalyticsRetentionState.NONE = RUMProductAnalyticsRetentionState("NONE") diff --git a/datadog_api_client/v2/model/rum_product_scales.py b/datadog_api_client/v2/model/rum_product_scales.py new file mode 100644 index 0000000000..f1e1e166c3 --- /dev/null +++ b/datadog_api_client/v2/model/rum_product_scales.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_product_analytics_retention_scale import RUMProductAnalyticsRetentionScale + from datadog_api_client.v2.model.rum_event_processing_scale import RUMEventProcessingScale + +class RUMProductScales(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_product_analytics_retention_scale import RUMProductAnalyticsRetentionScale + from datadog_api_client.v2.model.rum_event_processing_scale import RUMEventProcessingScale + return { + "product_analytics_retention_scale": (RUMProductAnalyticsRetentionScale,), + "rum_event_processing_scale": (RUMEventProcessingScale,), + } + attribute_map = { + "product_analytics_retention_scale": "product_analytics_retention_scale", + "rum_event_processing_scale": "rum_event_processing_scale", + } + + def __init__(self_, product_analytics_retention_scale: Union[RUMProductAnalyticsRetentionScale, UnsetType]=unset, rum_event_processing_scale: Union[RUMEventProcessingScale, UnsetType]=unset, **kwargs): + """ + Product Scales configuration for the RUM application. + + :param product_analytics_retention_scale: Product Analytics retention scale configuration. + :type product_analytics_retention_scale: RUMProductAnalyticsRetentionScale, optional + + :param rum_event_processing_scale: RUM event processing scale configuration. + :type rum_event_processing_scale: RUMEventProcessingScale, optional + """ + if product_analytics_retention_scale is not unset: + kwargs["product_analytics_retention_scale"] = product_analytics_retention_scale + if rum_event_processing_scale is not unset: + kwargs["rum_event_processing_scale"] = rum_event_processing_scale + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_query_filter.py b/datadog_api_client/v2/model/rum_query_filter.py new file mode 100644 index 0000000000..ef9bc0f6eb --- /dev/null +++ b/datadog_api_client/v2/model/rum_query_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMQueryFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (str,), + "query": (str,), + "to": (str,), + } + attribute_map = { + "_from": "from", + "query": "query", + "to": "to", + } + + def __init__(self_, _from: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, to: Union[str, UnsetType]=unset, **kwargs): + """ + The search and filter query settings. + + :param _from: The minimum time for the requested events; supports date (in `ISO 8601 `_ format with full date, hours, minutes, and the ``Z`` UTC indicator - seconds and fractional seconds are optional), math, and regular timestamps (in milliseconds). + :type _from: str, optional + + :param query: The search query following the RUM search syntax. + :type query: str, optional + + :param to: The maximum time for the requested events; supports date (in `ISO 8601 `_ format with full date, hours, minutes, and the ``Z`` UTC indicator - seconds and fractional seconds are optional), math, and regular timestamps (in milliseconds). + :type to: str, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if query is not unset: + kwargs["query"] = query + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_query_options.py b/datadog_api_client/v2/model/rum_query_options.py new file mode 100644 index 0000000000..bacb347db3 --- /dev/null +++ b/datadog_api_client/v2/model/rum_query_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMQueryOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time_offset": (int,), + "timezone": (str,), + } + attribute_map = { + "time_offset": "time_offset", + "timezone": "timezone", + } + + def __init__(self_, time_offset: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Global query options that are used during the query. + Note: Only supply timezone or time offset, not both. Otherwise, the query fails. + + :param time_offset: The time offset (in seconds) to apply to the query. + :type time_offset: int, optional + + :param timezone: The timezone can be specified as GMT, UTC, an offset from UTC (like UTC+1), or as a Timezone Database identifier (like America/New_York). + :type timezone: str, optional + """ + if time_offset is not unset: + kwargs["time_offset"] = time_offset + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_query_page_options.py b/datadog_api_client/v2/model/rum_query_page_options.py new file mode 100644 index 0000000000..623b690258 --- /dev/null +++ b/datadog_api_client/v2/model/rum_query_page_options.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMQueryPageOptions(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Paging attributes for listing events. + + :param cursor: List following results with a cursor provided in the previous query. + :type cursor: str, optional + + :param limit: Maximum number of events in the response. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_response_links.py b/datadog_api_client/v2/model/rum_response_links.py new file mode 100644 index 0000000000..25e6116229 --- /dev/null +++ b/datadog_api_client/v2/model/rum_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param next: Link for the next set of results. Note that the request can also be made using the + POST endpoint. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_response_metadata.py b/datadog_api_client/v2/model/rum_response_metadata.py new file mode 100644 index 0000000000..764df672d3 --- /dev/null +++ b/datadog_api_client/v2/model/rum_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_response_page import RUMResponsePage + from datadog_api_client.v2.model.rum_response_status import RUMResponseStatus + from datadog_api_client.v2.model.rum_warning import RUMWarning + +class RUMResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_response_page import RUMResponsePage + from datadog_api_client.v2.model.rum_response_status import RUMResponseStatus + from datadog_api_client.v2.model.rum_warning import RUMWarning + return { + "elapsed": (int,), + "page": (RUMResponsePage,), + "request_id": (str,), + "status": (RUMResponseStatus,), + "warnings": ([RUMWarning],), + } + attribute_map = { + "elapsed": "elapsed", + "page": "page", + "request_id": "request_id", + "status": "status", + "warnings": "warnings", + } + + def __init__(self_, elapsed: Union[int, UnsetType]=unset, page: Union[RUMResponsePage, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, status: Union[RUMResponseStatus, UnsetType]=unset, warnings: Union[List[RUMWarning], UnsetType]=unset, **kwargs): + """ + The metadata associated with a request. + + :param elapsed: The time elapsed in milliseconds. + :type elapsed: int, optional + + :param page: Paging attributes. + :type page: RUMResponsePage, optional + + :param request_id: The identifier of the request. + :type request_id: str, optional + + :param status: The status of the response. + :type status: RUMResponseStatus, optional + + :param warnings: A list of warnings (non-fatal errors) encountered. Partial results may return if + warnings are present in the response. + :type warnings: [RUMWarning], optional + """ + if elapsed is not unset: + kwargs["elapsed"] = elapsed + if page is not unset: + kwargs["page"] = page + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_response_page.py b/datadog_api_client/v2/model/rum_response_page.py new file mode 100644 index 0000000000..f0702b0016 --- /dev/null +++ b/datadog_api_client/v2/model/rum_response_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMResponsePage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str,), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param after: The cursor to use to get the next results, if any. To make the next request, use the same parameters with the addition of ``page[cursor]``. + :type after: str, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_response_status.py b/datadog_api_client/v2/model/rum_response_status.py new file mode 100644 index 0000000000..0e9bd6fd75 --- /dev/null +++ b/datadog_api_client/v2/model/rum_response_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMResponseStatus(ModelSimple): + """ + The status of the response. + + :param value: Must be one of ["done", "timeout"]. + :type value: str + """ + + allowed_values = { + "done", + "timeout", + } + DONE: ClassVar["RUMResponseStatus"] + TIMEOUT: ClassVar["RUMResponseStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMResponseStatus.DONE = RUMResponseStatus("done") +RUMResponseStatus.TIMEOUT = RUMResponseStatus("timeout") diff --git a/datadog_api_client/v2/model/rum_retention_filter_attributes.py b/datadog_api_client/v2/model/rum_retention_filter_attributes.py new file mode 100644 index 0000000000..5fa8bd476d --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_attributes.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_cross_product_sampling import RumCrossProductSampling + from datadog_api_client.v2.model.rum_retention_filter_event_type import RumRetentionFilterEventType + +class RumRetentionFilterAttributes(ModelNormal): + validations = { + "sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0.1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_cross_product_sampling import RumCrossProductSampling + from datadog_api_client.v2.model.rum_retention_filter_event_type import RumRetentionFilterEventType + return { + "cross_product_sampling": (RumCrossProductSampling,), + "enabled": (bool,), + "event_type": (RumRetentionFilterEventType,), + "name": (str,), + "query": (str,), + "sample_rate": (float,), + } + attribute_map = { + "cross_product_sampling": "cross_product_sampling", + "enabled": "enabled", + "event_type": "event_type", + "name": "name", + "query": "query", + "sample_rate": "sample_rate", + } + + def __init__(self_, cross_product_sampling: Union[RumCrossProductSampling, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, event_type: Union[RumRetentionFilterEventType, UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, sample_rate: Union[float, UnsetType]=unset, **kwargs): + """ + The object describing attributes of a RUM retention filter. + + :param cross_product_sampling: The configuration for cross-product retention filters. + :type cross_product_sampling: RumCrossProductSampling, optional + + :param enabled: Whether the retention filter is enabled. + :type enabled: bool, optional + + :param event_type: The type of RUM events to filter on. + :type event_type: RumRetentionFilterEventType, optional + + :param name: The name of a RUM retention filter. + :type name: str, optional + + :param query: The query string for a RUM retention filter. + :type query: str, optional + + :param sample_rate: The sample rate for a RUM retention filter, between 0.1 and 100. + :type sample_rate: float, optional + """ + if cross_product_sampling is not unset: + kwargs["cross_product_sampling"] = cross_product_sampling + if enabled is not unset: + kwargs["enabled"] = enabled + if event_type is not unset: + kwargs["event_type"] = event_type + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if sample_rate is not unset: + kwargs["sample_rate"] = sample_rate + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_retention_filter_create_attributes.py b/datadog_api_client/v2/model/rum_retention_filter_create_attributes.py new file mode 100644 index 0000000000..6be970e91a --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_create_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_cross_product_sampling_create import RumCrossProductSamplingCreate + from datadog_api_client.v2.model.rum_retention_filter_event_type import RumRetentionFilterEventType + +class RumRetentionFilterCreateAttributes(ModelNormal): + validations = { + "sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0.1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_cross_product_sampling_create import RumCrossProductSamplingCreate + from datadog_api_client.v2.model.rum_retention_filter_event_type import RumRetentionFilterEventType + return { + "cross_product_sampling": (RumCrossProductSamplingCreate,), + "enabled": (bool,), + "event_type": (RumRetentionFilterEventType,), + "name": (str,), + "query": (str,), + "sample_rate": (float,), + } + attribute_map = { + "cross_product_sampling": "cross_product_sampling", + "enabled": "enabled", + "event_type": "event_type", + "name": "name", + "query": "query", + "sample_rate": "sample_rate", + } + + def __init__(self_, event_type: RumRetentionFilterEventType, name: str, sample_rate: float, cross_product_sampling: Union[RumCrossProductSamplingCreate, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + The object describing attributes of a RUM retention filter to create. + + :param cross_product_sampling: The configuration for cross-product retention filters. + :type cross_product_sampling: RumCrossProductSamplingCreate, optional + + :param enabled: Whether the retention filter is enabled. + :type enabled: bool, optional + + :param event_type: The type of RUM events to filter on. + :type event_type: RumRetentionFilterEventType + + :param name: The name of a RUM retention filter. + :type name: str + + :param query: The query string for a RUM retention filter. + :type query: str, optional + + :param sample_rate: The sample rate for a RUM retention filter, between 0.1 and 100. + :type sample_rate: float + """ + if cross_product_sampling is not unset: + kwargs["cross_product_sampling"] = cross_product_sampling + if enabled is not unset: + kwargs["enabled"] = enabled + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + + self_.event_type = event_type + self_.name = name + self_.sample_rate = sample_rate diff --git a/datadog_api_client/v2/model/rum_retention_filter_create_data.py b/datadog_api_client/v2/model/rum_retention_filter_create_data.py new file mode 100644 index 0000000000..7a59486b32 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filter_create_attributes import RumRetentionFilterCreateAttributes + from datadog_api_client.v2.model.rum_retention_filter_type import RumRetentionFilterType + +class RumRetentionFilterCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filter_create_attributes import RumRetentionFilterCreateAttributes + from datadog_api_client.v2.model.rum_retention_filter_type import RumRetentionFilterType + return { + "attributes": (RumRetentionFilterCreateAttributes,), + "type": (RumRetentionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: RumRetentionFilterCreateAttributes, type: RumRetentionFilterType, **kwargs): + """ + The new RUM retention filter properties to create. + + :param attributes: The object describing attributes of a RUM retention filter to create. + :type attributes: RumRetentionFilterCreateAttributes + + :param type: The type of the resource. The value should always be retention_filters. + :type type: RumRetentionFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/rum_retention_filter_create_request.py b/datadog_api_client/v2/model/rum_retention_filter_create_request.py new file mode 100644 index 0000000000..9c8419e945 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filter_create_data import RumRetentionFilterCreateData + +class RumRetentionFilterCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filter_create_data import RumRetentionFilterCreateData + return { + "data": (RumRetentionFilterCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumRetentionFilterCreateData, **kwargs): + """ + The RUM retention filter body to create. + + :param data: The new RUM retention filter properties to create. + :type data: RumRetentionFilterCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_retention_filter_data.py b/datadog_api_client/v2/model/rum_retention_filter_data.py new file mode 100644 index 0000000000..47025d79e6 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filter_attributes import RumRetentionFilterAttributes + from datadog_api_client.v2.model.rum_retention_filter_type import RumRetentionFilterType + +class RumRetentionFilterData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filter_attributes import RumRetentionFilterAttributes + from datadog_api_client.v2.model.rum_retention_filter_type import RumRetentionFilterType + return { + "attributes": (RumRetentionFilterAttributes,), + "id": (str,), + "type": (RumRetentionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[RumRetentionFilterAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[RumRetentionFilterType, UnsetType]=unset, **kwargs): + """ + The RUM retention filter. + + :param attributes: The object describing attributes of a RUM retention filter. + :type attributes: RumRetentionFilterAttributes, optional + + :param id: ID of retention filter in UUID. + :type id: str, optional + + :param type: The type of the resource. The value should always be retention_filters. + :type type: RumRetentionFilterType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_retention_filter_event_type.py b/datadog_api_client/v2/model/rum_retention_filter_event_type.py new file mode 100644 index 0000000000..38d9223cb3 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_event_type.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumRetentionFilterEventType(ModelSimple): + """ + The type of RUM events to filter on. + + :param value: Must be one of ["session", "view", "action", "error", "resource", "long_task", "vital"]. + :type value: str + """ + + allowed_values = { + "session", + "view", + "action", + "error", + "resource", + "long_task", + "vital", + } + SESSION: ClassVar["RumRetentionFilterEventType"] + VIEW: ClassVar["RumRetentionFilterEventType"] + ACTION: ClassVar["RumRetentionFilterEventType"] + ERROR: ClassVar["RumRetentionFilterEventType"] + RESOURCE: ClassVar["RumRetentionFilterEventType"] + LONG_TASK: ClassVar["RumRetentionFilterEventType"] + VITAL: ClassVar["RumRetentionFilterEventType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumRetentionFilterEventType.SESSION = RumRetentionFilterEventType("session") +RumRetentionFilterEventType.VIEW = RumRetentionFilterEventType("view") +RumRetentionFilterEventType.ACTION = RumRetentionFilterEventType("action") +RumRetentionFilterEventType.ERROR = RumRetentionFilterEventType("error") +RumRetentionFilterEventType.RESOURCE = RumRetentionFilterEventType("resource") +RumRetentionFilterEventType.LONG_TASK = RumRetentionFilterEventType("long_task") +RumRetentionFilterEventType.VITAL = RumRetentionFilterEventType("vital") diff --git a/datadog_api_client/v2/model/rum_retention_filter_response.py b/datadog_api_client/v2/model/rum_retention_filter_response.py new file mode 100644 index 0000000000..a91c2a8eb6 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filter_data import RumRetentionFilterData + +class RumRetentionFilterResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filter_data import RumRetentionFilterData + return { + "data": (RumRetentionFilterData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RumRetentionFilterData, UnsetType]=unset, **kwargs): + """ + The RUM retention filter object. + + :param data: The RUM retention filter. + :type data: RumRetentionFilterData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_retention_filter_type.py b/datadog_api_client/v2/model/rum_retention_filter_type.py new file mode 100644 index 0000000000..dd05f6ed56 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumRetentionFilterType(ModelSimple): + """ + The type of the resource. The value should always be retention_filters. + + :param value: If omitted defaults to "retention_filters". Must be one of ["retention_filters"]. + :type value: str + """ + + allowed_values = { + "retention_filters", + } + RETENTION_FILTERS: ClassVar["RumRetentionFilterType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumRetentionFilterType.RETENTION_FILTERS = RumRetentionFilterType("retention_filters") diff --git a/datadog_api_client/v2/model/rum_retention_filter_update_attributes.py b/datadog_api_client/v2/model/rum_retention_filter_update_attributes.py new file mode 100644 index 0000000000..7e16cb2e97 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_update_attributes.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_cross_product_sampling_update import RumCrossProductSamplingUpdate + from datadog_api_client.v2.model.rum_retention_filter_event_type import RumRetentionFilterEventType + +class RumRetentionFilterUpdateAttributes(ModelNormal): + validations = { + "sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0.1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_cross_product_sampling_update import RumCrossProductSamplingUpdate + from datadog_api_client.v2.model.rum_retention_filter_event_type import RumRetentionFilterEventType + return { + "cross_product_sampling": (RumCrossProductSamplingUpdate,), + "enabled": (bool,), + "event_type": (RumRetentionFilterEventType,), + "name": (str,), + "query": (str,), + "sample_rate": (float,), + } + attribute_map = { + "cross_product_sampling": "cross_product_sampling", + "enabled": "enabled", + "event_type": "event_type", + "name": "name", + "query": "query", + "sample_rate": "sample_rate", + } + + def __init__(self_, cross_product_sampling: Union[RumCrossProductSamplingUpdate, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, event_type: Union[RumRetentionFilterEventType, UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, sample_rate: Union[float, UnsetType]=unset, **kwargs): + """ + The object describing attributes of a RUM retention filter to update. + + :param cross_product_sampling: The configuration for cross-product retention filters. All fields are optional for partial updates. + :type cross_product_sampling: RumCrossProductSamplingUpdate, optional + + :param enabled: Whether the retention filter is enabled. + :type enabled: bool, optional + + :param event_type: The type of RUM events to filter on. + :type event_type: RumRetentionFilterEventType, optional + + :param name: The name of a RUM retention filter. + :type name: str, optional + + :param query: The query string for a RUM retention filter. + :type query: str, optional + + :param sample_rate: The sample rate for a RUM retention filter, between 0.1 and 100. + :type sample_rate: float, optional + """ + if cross_product_sampling is not unset: + kwargs["cross_product_sampling"] = cross_product_sampling + if enabled is not unset: + kwargs["enabled"] = enabled + if event_type is not unset: + kwargs["event_type"] = event_type + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if sample_rate is not unset: + kwargs["sample_rate"] = sample_rate + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_retention_filter_update_data.py b/datadog_api_client/v2/model/rum_retention_filter_update_data.py new file mode 100644 index 0000000000..6751124235 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filter_update_attributes import RumRetentionFilterUpdateAttributes + from datadog_api_client.v2.model.rum_retention_filter_type import RumRetentionFilterType + +class RumRetentionFilterUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filter_update_attributes import RumRetentionFilterUpdateAttributes + from datadog_api_client.v2.model.rum_retention_filter_type import RumRetentionFilterType + return { + "attributes": (RumRetentionFilterUpdateAttributes,), + "id": (str,), + "type": (RumRetentionFilterType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RumRetentionFilterUpdateAttributes, id: str, type: RumRetentionFilterType, **kwargs): + """ + The new RUM retention filter properties to update. + + :param attributes: The object describing attributes of a RUM retention filter to update. + :type attributes: RumRetentionFilterUpdateAttributes + + :param id: ID of retention filter in UUID. + :type id: str + + :param type: The type of the resource. The value should always be retention_filters. + :type type: RumRetentionFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_retention_filter_update_request.py b/datadog_api_client/v2/model/rum_retention_filter_update_request.py new file mode 100644 index 0000000000..6de77ab704 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filter_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filter_update_data import RumRetentionFilterUpdateData + +class RumRetentionFilterUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filter_update_data import RumRetentionFilterUpdateData + return { + "data": (RumRetentionFilterUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumRetentionFilterUpdateData, **kwargs): + """ + The RUM retention filter body to update. + + :param data: The new RUM retention filter properties to update. + :type data: RumRetentionFilterUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_retention_filters_order_data.py b/datadog_api_client/v2/model/rum_retention_filters_order_data.py new file mode 100644 index 0000000000..bce07608be --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filters_order_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filter_type import RumRetentionFilterType + +class RumRetentionFiltersOrderData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filter_type import RumRetentionFilterType + return { + "id": (str,), + "type": (RumRetentionFilterType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: RumRetentionFilterType, **kwargs): + """ + The RUM retention filter data for ordering. + + :param id: ID of retention filter in UUID. + :type id: str + + :param type: The type of the resource. The value should always be retention_filters. + :type type: RumRetentionFilterType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_retention_filters_order_request.py b/datadog_api_client/v2/model/rum_retention_filters_order_request.py new file mode 100644 index 0000000000..6b8efdb885 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filters_order_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filters_order_data import RumRetentionFiltersOrderData + +class RumRetentionFiltersOrderRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filters_order_data import RumRetentionFiltersOrderData + return { + "data": ([RumRetentionFiltersOrderData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RumRetentionFiltersOrderData], UnsetType]=unset, **kwargs): + """ + The list of RUM retention filter IDs along with their corresponding type to reorder. + All retention filter IDs should be included in the list created for a RUM application. + + :param data: A list of RUM retention filter IDs along with type. + :type data: [RumRetentionFiltersOrderData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_retention_filters_order_response.py b/datadog_api_client/v2/model/rum_retention_filters_order_response.py new file mode 100644 index 0000000000..3d793be871 --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filters_order_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filters_order_data import RumRetentionFiltersOrderData + +class RumRetentionFiltersOrderResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filters_order_data import RumRetentionFiltersOrderData + return { + "data": ([RumRetentionFiltersOrderData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RumRetentionFiltersOrderData], UnsetType]=unset, **kwargs): + """ + The list of RUM retention filter IDs along with type. + + :param data: A list of RUM retention filter IDs along with type. + :type data: [RumRetentionFiltersOrderData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_retention_filters_response.py b/datadog_api_client/v2/model/rum_retention_filters_response.py new file mode 100644 index 0000000000..e7accfd56d --- /dev/null +++ b/datadog_api_client/v2/model/rum_retention_filters_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_retention_filter_data import RumRetentionFilterData + +class RumRetentionFiltersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_retention_filter_data import RumRetentionFilterData + return { + "data": ([RumRetentionFilterData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[RumRetentionFilterData], UnsetType]=unset, **kwargs): + """ + All RUM retention filters for a RUM application. + + :param data: A list of RUM retention filters. + :type data: [RumRetentionFilterData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_sdk_config_attributes.py b/datadog_api_client/v2/model/rum_sdk_config_attributes.py new file mode 100644 index 0000000000..36668ca290 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_rum_attributes import RumSdkConfigRumAttributes + +class RumSdkConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_rum_attributes import RumSdkConfigRumAttributes + return { + "rum": (RumSdkConfigRumAttributes,), + } + attribute_map = { + "rum": "rum", + } + + def __init__(self_, rum: RumSdkConfigRumAttributes, **kwargs): + """ + Attributes of the RUM SDK configuration. + + :param rum: The RUM SDK settings for a configuration. + :type rum: RumSdkConfigRumAttributes + """ + super().__init__(kwargs) + + + self_.rum = rum diff --git a/datadog_api_client/v2/model/rum_sdk_config_data.py b/datadog_api_client/v2/model/rum_sdk_config_data.py new file mode 100644 index 0000000000..92d7303e7b --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_attributes import RumSdkConfigAttributes + from datadog_api_client.v2.model.rum_sdk_config_meta import RumSdkConfigMeta + from datadog_api_client.v2.model.rum_sdk_config_type import RumSdkConfigType + +class RumSdkConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_attributes import RumSdkConfigAttributes + from datadog_api_client.v2.model.rum_sdk_config_meta import RumSdkConfigMeta + from datadog_api_client.v2.model.rum_sdk_config_type import RumSdkConfigType + return { + "attributes": (RumSdkConfigAttributes,), + "id": (str,), + "meta": (RumSdkConfigMeta,), + "type": (RumSdkConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "type": "type", + } + + def __init__(self_, attributes: RumSdkConfigAttributes, id: str, type: RumSdkConfigType, meta: Union[RumSdkConfigMeta, UnsetType]=unset, **kwargs): + """ + The RUM SDK configuration data object. + + :param attributes: Attributes of the RUM SDK configuration. + :type attributes: RumSdkConfigAttributes + + :param id: The unique identifier of the RUM SDK configuration. + :type id: str + + :param meta: Metadata associated with a RUM SDK configuration. + :type meta: RumSdkConfigMeta, optional + + :param type: The type of the resource. The value should always be ``rum_sdk_config``. + :type type: RumSdkConfigType + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_sdk_config_dynamic_option.py b/datadog_api_client/v2/model/rum_sdk_config_dynamic_option.py new file mode 100644 index 0000000000..5d6256bda4 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_dynamic_option.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_serialized_regex import RumSdkConfigSerializedRegex + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_serialized_type import RumSdkConfigDynamicOptionSerializedType + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_strategy import RumSdkConfigDynamicOptionStrategy + +class RumSdkConfigDynamicOption(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_serialized_regex import RumSdkConfigSerializedRegex + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_serialized_type import RumSdkConfigDynamicOptionSerializedType + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_strategy import RumSdkConfigDynamicOptionStrategy + return { + "attribute": (str,), + "extractor": (RumSdkConfigSerializedRegex,), + "key": (str,), + "name": (str,), + "path": (str,), + "rc_serialized_type": (RumSdkConfigDynamicOptionSerializedType,), + "selector": (str,), + "strategy": (RumSdkConfigDynamicOptionStrategy,), + } + attribute_map = { + "attribute": "attribute", + "extractor": "extractor", + "key": "key", + "name": "name", + "path": "path", + "rc_serialized_type": "rc_serialized_type", + "selector": "selector", + "strategy": "strategy", + } + + def __init__(self_, rc_serialized_type: RumSdkConfigDynamicOptionSerializedType, strategy: RumSdkConfigDynamicOptionStrategy, attribute: Union[str, UnsetType]=unset, extractor: Union[RumSdkConfigSerializedRegex, UnsetType]=unset, key: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, path: Union[str, UnsetType]=unset, selector: Union[str, UnsetType]=unset, **kwargs): + """ + A dynamic configuration option that extracts a value at runtime using a specified strategy. + + :param attribute: The element attribute to read. Used when ``strategy`` is ``dom``. + :type attribute: str, optional + + :param extractor: A serialized regex used as an extractor in dynamic options. + :type extractor: RumSdkConfigSerializedRegex, optional + + :param key: The ``localStorage`` key to read. Required when ``strategy`` is ``localStorage``. + :type key: str, optional + + :param name: The cookie name to read. Required when ``strategy`` is ``cookie``. + :type name: str, optional + + :param path: The JavaScript path used to extract the value. Required when ``strategy`` is ``js``. + :type path: str, optional + + :param rc_serialized_type: The type identifier for a dynamic option. Always ``dynamic``. + :type rc_serialized_type: RumSdkConfigDynamicOptionSerializedType + + :param selector: The CSS selector to read from the page. Required when ``strategy`` is ``dom``. + :type selector: str, optional + + :param strategy: The strategy used to extract the dynamic value. + :type strategy: RumSdkConfigDynamicOptionStrategy + """ + if attribute is not unset: + kwargs["attribute"] = attribute + if extractor is not unset: + kwargs["extractor"] = extractor + if key is not unset: + kwargs["key"] = key + if name is not unset: + kwargs["name"] = name + if path is not unset: + kwargs["path"] = path + if selector is not unset: + kwargs["selector"] = selector + super().__init__(kwargs) + + + self_.rc_serialized_type = rc_serialized_type + self_.strategy = strategy diff --git a/datadog_api_client/v2/model/rum_sdk_config_dynamic_option_pair.py b/datadog_api_client/v2/model/rum_sdk_config_dynamic_option_pair.py new file mode 100644 index 0000000000..6a9ecbef03 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_dynamic_option_pair.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option import RumSdkConfigDynamicOption + +class RumSdkConfigDynamicOptionPair(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option import RumSdkConfigDynamicOption + return { + "key": (str,), + "value": (RumSdkConfigDynamicOption,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: str, value: RumSdkConfigDynamicOption, **kwargs): + """ + A key-value pair where the value is a dynamic configuration option. + + :param key: The key name for this dynamic configuration pair. + :type key: str + + :param value: A dynamic configuration option that extracts a value at runtime using a specified strategy. + :type value: RumSdkConfigDynamicOption + """ + super().__init__(kwargs) + + + self_.key = key + self_.value = value diff --git a/datadog_api_client/v2/model/rum_sdk_config_dynamic_option_serialized_type.py b/datadog_api_client/v2/model/rum_sdk_config_dynamic_option_serialized_type.py new file mode 100644 index 0000000000..2a4948775c --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_dynamic_option_serialized_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumSdkConfigDynamicOptionSerializedType(ModelSimple): + """ + The type identifier for a dynamic option. Always `dynamic`. + + :param value: If omitted defaults to "dynamic". Must be one of ["dynamic"]. + :type value: str + """ + + allowed_values = { + "dynamic", + } + DYNAMIC: ClassVar["RumSdkConfigDynamicOptionSerializedType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumSdkConfigDynamicOptionSerializedType.DYNAMIC = RumSdkConfigDynamicOptionSerializedType("dynamic") diff --git a/datadog_api_client/v2/model/rum_sdk_config_dynamic_option_strategy.py b/datadog_api_client/v2/model/rum_sdk_config_dynamic_option_strategy.py new file mode 100644 index 0000000000..d2678d4c34 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_dynamic_option_strategy.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumSdkConfigDynamicOptionStrategy(ModelSimple): + """ + The strategy used to extract the dynamic value. + + :param value: Must be one of ["js", "cookie", "dom", "localStorage"]. + :type value: str + """ + + allowed_values = { + "js", + "cookie", + "dom", + "localStorage", + } + JS: ClassVar["RumSdkConfigDynamicOptionStrategy"] + COOKIE: ClassVar["RumSdkConfigDynamicOptionStrategy"] + DOM: ClassVar["RumSdkConfigDynamicOptionStrategy"] + LOCAL_STORAGE: ClassVar["RumSdkConfigDynamicOptionStrategy"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumSdkConfigDynamicOptionStrategy.JS = RumSdkConfigDynamicOptionStrategy("js") +RumSdkConfigDynamicOptionStrategy.COOKIE = RumSdkConfigDynamicOptionStrategy("cookie") +RumSdkConfigDynamicOptionStrategy.DOM = RumSdkConfigDynamicOptionStrategy("dom") +RumSdkConfigDynamicOptionStrategy.LOCAL_STORAGE = RumSdkConfigDynamicOptionStrategy("localStorage") diff --git a/datadog_api_client/v2/model/rum_sdk_config_match_option.py b/datadog_api_client/v2/model/rum_sdk_config_match_option.py new file mode 100644 index 0000000000..1fdc6b553b --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_match_option.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_match_option_serialized_type import RumSdkConfigMatchOptionSerializedType + +class RumSdkConfigMatchOption(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_match_option_serialized_type import RumSdkConfigMatchOptionSerializedType + return { + "rc_serialized_type": (RumSdkConfigMatchOptionSerializedType,), + "value": (str,), + } + attribute_map = { + "rc_serialized_type": "rc_serialized_type", + "value": "value", + } + + def __init__(self_, rc_serialized_type: RumSdkConfigMatchOptionSerializedType, value: str, **kwargs): + """ + A match option used for URL or origin pattern matching. + + :param rc_serialized_type: The type of match pattern, either a literal string or a regex. + :type rc_serialized_type: RumSdkConfigMatchOptionSerializedType + + :param value: The value to match against. + :type value: str + """ + super().__init__(kwargs) + + + self_.rc_serialized_type = rc_serialized_type + self_.value = value diff --git a/datadog_api_client/v2/model/rum_sdk_config_match_option_serialized_type.py b/datadog_api_client/v2/model/rum_sdk_config_match_option_serialized_type.py new file mode 100644 index 0000000000..89977289d1 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_match_option_serialized_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumSdkConfigMatchOptionSerializedType(ModelSimple): + """ + The type of match pattern, either a literal string or a regex. + + :param value: Must be one of ["string", "regex"]. + :type value: str + """ + + allowed_values = { + "string", + "regex", + } + STRING: ClassVar["RumSdkConfigMatchOptionSerializedType"] + REGEX: ClassVar["RumSdkConfigMatchOptionSerializedType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumSdkConfigMatchOptionSerializedType.STRING = RumSdkConfigMatchOptionSerializedType("string") +RumSdkConfigMatchOptionSerializedType.REGEX = RumSdkConfigMatchOptionSerializedType("regex") diff --git a/datadog_api_client/v2/model/rum_sdk_config_meta.py b/datadog_api_client/v2/model/rum_sdk_config_meta.py new file mode 100644 index 0000000000..f4af304dd2 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_meta.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RumSdkConfigMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "updated_at": (datetime,), + "updated_by": (str,), + } + attribute_map = { + "updated_at": "updated_at", + "updated_by": "updated_by", + } + + def __init__(self_, updated_at: datetime, updated_by: str, **kwargs): + """ + Metadata associated with a RUM SDK configuration. + + :param updated_at: The timestamp of the last update to this configuration. + :type updated_at: datetime + + :param updated_by: The handle of the user who last updated this configuration. + :type updated_by: str + """ + super().__init__(kwargs) + + + self_.updated_at = updated_at + self_.updated_by = updated_by diff --git a/datadog_api_client/v2/model/rum_sdk_config_response.py b/datadog_api_client/v2/model/rum_sdk_config_response.py new file mode 100644 index 0000000000..800d0f2e92 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_data import RumSdkConfigData + +class RumSdkConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_data import RumSdkConfigData + return { + "data": (RumSdkConfigData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumSdkConfigData, **kwargs): + """ + Response containing a RUM SDK configuration. + + :param data: The RUM SDK configuration data object. + :type data: RumSdkConfigData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_sdk_config_rum_attributes.py b/datadog_api_client/v2/model/rum_sdk_config_rum_attributes.py new file mode 100644 index 0000000000..f0caebebcc --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_rum_attributes.py @@ -0,0 +1,155 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_tracing_url_config import RumSdkConfigTracingUrlConfig + from datadog_api_client.v2.model.rum_sdk_config_match_option import RumSdkConfigMatchOption + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_pair import RumSdkConfigDynamicOptionPair + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option import RumSdkConfigDynamicOption + +class RumSdkConfigRumAttributes(ModelNormal): + validations = { + "session_replay_sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + "session_sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + "trace_sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_tracing_url_config import RumSdkConfigTracingUrlConfig + from datadog_api_client.v2.model.rum_sdk_config_match_option import RumSdkConfigMatchOption + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_pair import RumSdkConfigDynamicOptionPair + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option import RumSdkConfigDynamicOption + return { + "allowed_tracing_urls": ([RumSdkConfigTracingUrlConfig],), + "allowed_tracking_origins": ([RumSdkConfigMatchOption],), + "application_id": (str,), + "context": ([RumSdkConfigDynamicOptionPair],), + "default_privacy_level": (str,), + "enable_privacy_for_action_name": (bool,), + "env": (str,), + "service": (str,), + "session_replay_sample_rate": (int,), + "session_sample_rate": (int,), + "trace_sample_rate": (int,), + "track_session_across_subdomains": (bool,), + "user": ([RumSdkConfigDynamicOptionPair],), + "version": (RumSdkConfigDynamicOption,), + } + attribute_map = { + "allowed_tracing_urls": "allowed_tracing_urls", + "allowed_tracking_origins": "allowed_tracking_origins", + "application_id": "application_id", + "context": "context", + "default_privacy_level": "default_privacy_level", + "enable_privacy_for_action_name": "enable_privacy_for_action_name", + "env": "env", + "service": "service", + "session_replay_sample_rate": "session_replay_sample_rate", + "session_sample_rate": "session_sample_rate", + "trace_sample_rate": "trace_sample_rate", + "track_session_across_subdomains": "track_session_across_subdomains", + "user": "user", + "version": "version", + } + + def __init__(self_, application_id: str, default_privacy_level: str, enable_privacy_for_action_name: bool, session_replay_sample_rate: int, session_sample_rate: int, allowed_tracing_urls: Union[List[RumSdkConfigTracingUrlConfig], UnsetType]=unset, allowed_tracking_origins: Union[List[RumSdkConfigMatchOption], UnsetType]=unset, context: Union[List[RumSdkConfigDynamicOptionPair], UnsetType]=unset, env: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, trace_sample_rate: Union[int, UnsetType]=unset, track_session_across_subdomains: Union[bool, UnsetType]=unset, user: Union[List[RumSdkConfigDynamicOptionPair], UnsetType]=unset, version: Union[RumSdkConfigDynamicOption, UnsetType]=unset, **kwargs): + """ + The RUM SDK settings for a configuration. + + :param allowed_tracing_urls: A list of URL configurations for distributed tracing. + :type allowed_tracing_urls: [RumSdkConfigTracingUrlConfig], optional + + :param allowed_tracking_origins: A list of origin patterns allowed for cross-origin session tracking. + :type allowed_tracking_origins: [RumSdkConfigMatchOption], optional + + :param application_id: The ID of the RUM application this configuration belongs to. + :type application_id: str + + :param context: A list of dynamic option key-value pairs. + :type context: [RumSdkConfigDynamicOptionPair], optional + + :param default_privacy_level: The default privacy masking level applied to all RUM data. + :type default_privacy_level: str + + :param enable_privacy_for_action_name: Whether to mask user-interaction action names for privacy. + :type enable_privacy_for_action_name: bool + + :param env: The environment tag for the RUM application. + :type env: str, optional + + :param service: The service name tag for the RUM application. + :type service: str, optional + + :param session_replay_sample_rate: The percentage of collected sessions for which a replay is captured (0–100). + :type session_replay_sample_rate: int + + :param session_sample_rate: The percentage of user sessions to collect (0–100). + :type session_sample_rate: int + + :param trace_sample_rate: The percentage of requests to forward as APM traces (0–100). + :type trace_sample_rate: int, optional + + :param track_session_across_subdomains: Whether to share a session across subdomains of the same site. + :type track_session_across_subdomains: bool, optional + + :param user: A list of dynamic option key-value pairs. + :type user: [RumSdkConfigDynamicOptionPair], optional + + :param version: A dynamic configuration option that extracts a value at runtime using a specified strategy. + :type version: RumSdkConfigDynamicOption, optional + """ + if allowed_tracing_urls is not unset: + kwargs["allowed_tracing_urls"] = allowed_tracing_urls + if allowed_tracking_origins is not unset: + kwargs["allowed_tracking_origins"] = allowed_tracking_origins + if context is not unset: + kwargs["context"] = context + if env is not unset: + kwargs["env"] = env + if service is not unset: + kwargs["service"] = service + if trace_sample_rate is not unset: + kwargs["trace_sample_rate"] = trace_sample_rate + if track_session_across_subdomains is not unset: + kwargs["track_session_across_subdomains"] = track_session_across_subdomains + if user is not unset: + kwargs["user"] = user + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.application_id = application_id + self_.default_privacy_level = default_privacy_level + self_.enable_privacy_for_action_name = enable_privacy_for_action_name + self_.session_replay_sample_rate = session_replay_sample_rate + self_.session_sample_rate = session_sample_rate diff --git a/datadog_api_client/v2/model/rum_sdk_config_rum_update_attributes.py b/datadog_api_client/v2/model/rum_sdk_config_rum_update_attributes.py new file mode 100644 index 0000000000..bc6f68b133 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_rum_update_attributes.py @@ -0,0 +1,149 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_tracing_url_config import RumSdkConfigTracingUrlConfig + from datadog_api_client.v2.model.rum_sdk_config_match_option import RumSdkConfigMatchOption + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_pair import RumSdkConfigDynamicOptionPair + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option import RumSdkConfigDynamicOption + +class RumSdkConfigRumUpdateAttributes(ModelNormal): + validations = { + "session_replay_sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + "session_sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + "trace_sample_rate": { + "inclusive_maximum": 100, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_tracing_url_config import RumSdkConfigTracingUrlConfig + from datadog_api_client.v2.model.rum_sdk_config_match_option import RumSdkConfigMatchOption + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_pair import RumSdkConfigDynamicOptionPair + from datadog_api_client.v2.model.rum_sdk_config_dynamic_option import RumSdkConfigDynamicOption + return { + "allowed_tracing_urls": ([RumSdkConfigTracingUrlConfig],), + "allowed_tracking_origins": ([RumSdkConfigMatchOption],), + "context": ([RumSdkConfigDynamicOptionPair],), + "default_privacy_level": (str,), + "enable_privacy_for_action_name": (bool,), + "env": (str,), + "service": (str,), + "session_replay_sample_rate": (int,), + "session_sample_rate": (int,), + "trace_sample_rate": (int,), + "track_session_across_subdomains": (bool,), + "user": ([RumSdkConfigDynamicOptionPair],), + "version": (RumSdkConfigDynamicOption,), + } + attribute_map = { + "allowed_tracing_urls": "allowed_tracing_urls", + "allowed_tracking_origins": "allowed_tracking_origins", + "context": "context", + "default_privacy_level": "default_privacy_level", + "enable_privacy_for_action_name": "enable_privacy_for_action_name", + "env": "env", + "service": "service", + "session_replay_sample_rate": "session_replay_sample_rate", + "session_sample_rate": "session_sample_rate", + "trace_sample_rate": "trace_sample_rate", + "track_session_across_subdomains": "track_session_across_subdomains", + "user": "user", + "version": "version", + } + + def __init__(self_, default_privacy_level: str, enable_privacy_for_action_name: bool, session_replay_sample_rate: int, session_sample_rate: int, allowed_tracing_urls: Union[List[RumSdkConfigTracingUrlConfig], UnsetType]=unset, allowed_tracking_origins: Union[List[RumSdkConfigMatchOption], UnsetType]=unset, context: Union[List[RumSdkConfigDynamicOptionPair], UnsetType]=unset, env: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, trace_sample_rate: Union[int, UnsetType]=unset, track_session_across_subdomains: Union[bool, UnsetType]=unset, user: Union[List[RumSdkConfigDynamicOptionPair], UnsetType]=unset, version: Union[RumSdkConfigDynamicOption, UnsetType]=unset, **kwargs): + """ + The RUM SDK settings to apply when updating a configuration. + + :param allowed_tracing_urls: A list of URL configurations for distributed tracing. + :type allowed_tracing_urls: [RumSdkConfigTracingUrlConfig], optional + + :param allowed_tracking_origins: A list of origin patterns allowed for cross-origin session tracking. + :type allowed_tracking_origins: [RumSdkConfigMatchOption], optional + + :param context: A list of dynamic option key-value pairs. + :type context: [RumSdkConfigDynamicOptionPair], optional + + :param default_privacy_level: The default privacy masking level applied to all RUM data. + :type default_privacy_level: str + + :param enable_privacy_for_action_name: Whether to mask user-interaction action names for privacy. + :type enable_privacy_for_action_name: bool + + :param env: The environment tag for the RUM application. + :type env: str, optional + + :param service: The service name tag for the RUM application. + :type service: str, optional + + :param session_replay_sample_rate: The percentage of collected sessions for which a replay is captured (0–100). + :type session_replay_sample_rate: int + + :param session_sample_rate: The percentage of user sessions to collect (0–100). + :type session_sample_rate: int + + :param trace_sample_rate: The percentage of requests to forward as APM traces (0–100). + :type trace_sample_rate: int, optional + + :param track_session_across_subdomains: Whether to share a session across subdomains of the same site. + :type track_session_across_subdomains: bool, optional + + :param user: A list of dynamic option key-value pairs. + :type user: [RumSdkConfigDynamicOptionPair], optional + + :param version: A dynamic configuration option that extracts a value at runtime using a specified strategy. + :type version: RumSdkConfigDynamicOption, optional + """ + if allowed_tracing_urls is not unset: + kwargs["allowed_tracing_urls"] = allowed_tracing_urls + if allowed_tracking_origins is not unset: + kwargs["allowed_tracking_origins"] = allowed_tracking_origins + if context is not unset: + kwargs["context"] = context + if env is not unset: + kwargs["env"] = env + if service is not unset: + kwargs["service"] = service + if trace_sample_rate is not unset: + kwargs["trace_sample_rate"] = trace_sample_rate + if track_session_across_subdomains is not unset: + kwargs["track_session_across_subdomains"] = track_session_across_subdomains + if user is not unset: + kwargs["user"] = user + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.default_privacy_level = default_privacy_level + self_.enable_privacy_for_action_name = enable_privacy_for_action_name + self_.session_replay_sample_rate = session_replay_sample_rate + self_.session_sample_rate = session_sample_rate diff --git a/datadog_api_client/v2/model/rum_sdk_config_serialized_regex.py b/datadog_api_client/v2/model/rum_sdk_config_serialized_regex.py new file mode 100644 index 0000000000..f229b42743 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_serialized_regex.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_serialized_regex_type import RumSdkConfigSerializedRegexType + +class RumSdkConfigSerializedRegex(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_serialized_regex_type import RumSdkConfigSerializedRegexType + return { + "rc_serialized_type": (RumSdkConfigSerializedRegexType,), + "value": (str,), + } + attribute_map = { + "rc_serialized_type": "rc_serialized_type", + "value": "value", + } + + def __init__(self_, rc_serialized_type: RumSdkConfigSerializedRegexType, value: str, **kwargs): + """ + A serialized regex used as an extractor in dynamic options. + + :param rc_serialized_type: The type identifier for a serialized regex. Always ``regex``. + :type rc_serialized_type: RumSdkConfigSerializedRegexType + + :param value: The regex pattern used for extraction. + :type value: str + """ + super().__init__(kwargs) + + + self_.rc_serialized_type = rc_serialized_type + self_.value = value diff --git a/datadog_api_client/v2/model/rum_sdk_config_serialized_regex_type.py b/datadog_api_client/v2/model/rum_sdk_config_serialized_regex_type.py new file mode 100644 index 0000000000..839ffd626a --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_serialized_regex_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumSdkConfigSerializedRegexType(ModelSimple): + """ + The type identifier for a serialized regex. Always `regex`. + + :param value: If omitted defaults to "regex". Must be one of ["regex"]. + :type value: str + """ + + allowed_values = { + "regex", + } + REGEX: ClassVar["RumSdkConfigSerializedRegexType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumSdkConfigSerializedRegexType.REGEX = RumSdkConfigSerializedRegexType("regex") diff --git a/datadog_api_client/v2/model/rum_sdk_config_tracing_url_config.py b/datadog_api_client/v2/model/rum_sdk_config_tracing_url_config.py new file mode 100644 index 0000000000..da39f5a3b3 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_tracing_url_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_match_option import RumSdkConfigMatchOption + from datadog_api_client.v2.model.rum_sdk_config_tracing_url_propagator_type import RumSdkConfigTracingUrlPropagatorType + +class RumSdkConfigTracingUrlConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_match_option import RumSdkConfigMatchOption + from datadog_api_client.v2.model.rum_sdk_config_tracing_url_propagator_type import RumSdkConfigTracingUrlPropagatorType + return { + "match": (RumSdkConfigMatchOption,), + "propagator_types": ([RumSdkConfigTracingUrlPropagatorType],), + } + attribute_map = { + "match": "match", + "propagator_types": "propagator_types", + } + + def __init__(self_, match: RumSdkConfigMatchOption, propagator_types: List[RumSdkConfigTracingUrlPropagatorType], **kwargs): + """ + Configuration for a URL that should have distributed tracing enabled. + + :param match: A match option used for URL or origin pattern matching. + :type match: RumSdkConfigMatchOption + + :param propagator_types: The list of trace propagator types to use for this URL. + :type propagator_types: [RumSdkConfigTracingUrlPropagatorType] + """ + super().__init__(kwargs) + + + self_.match = match + self_.propagator_types = propagator_types diff --git a/datadog_api_client/v2/model/rum_sdk_config_tracing_url_propagator_type.py b/datadog_api_client/v2/model/rum_sdk_config_tracing_url_propagator_type.py new file mode 100644 index 0000000000..35ee2bf587 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_tracing_url_propagator_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumSdkConfigTracingUrlPropagatorType(ModelSimple): + """ + A trace propagator type. + + :param value: Must be one of ["datadog", "b3", "b3multi", "tracecontext"]. + :type value: str + """ + + allowed_values = { + "datadog", + "b3", + "b3multi", + "tracecontext", + } + DATADOG: ClassVar["RumSdkConfigTracingUrlPropagatorType"] + B3: ClassVar["RumSdkConfigTracingUrlPropagatorType"] + B3MULTI: ClassVar["RumSdkConfigTracingUrlPropagatorType"] + TRACECONTEXT: ClassVar["RumSdkConfigTracingUrlPropagatorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumSdkConfigTracingUrlPropagatorType.DATADOG = RumSdkConfigTracingUrlPropagatorType("datadog") +RumSdkConfigTracingUrlPropagatorType.B3 = RumSdkConfigTracingUrlPropagatorType("b3") +RumSdkConfigTracingUrlPropagatorType.B3MULTI = RumSdkConfigTracingUrlPropagatorType("b3multi") +RumSdkConfigTracingUrlPropagatorType.TRACECONTEXT = RumSdkConfigTracingUrlPropagatorType("tracecontext") diff --git a/datadog_api_client/v2/model/rum_sdk_config_type.py b/datadog_api_client/v2/model/rum_sdk_config_type.py new file mode 100644 index 0000000000..647a01f1d6 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RumSdkConfigType(ModelSimple): + """ + The type of the resource. The value should always be `rum_sdk_config`. + + :param value: If omitted defaults to "rum_sdk_config". Must be one of ["rum_sdk_config"]. + :type value: str + """ + + allowed_values = { + "rum_sdk_config", + } + RUM_SDK_CONFIG: ClassVar["RumSdkConfigType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RumSdkConfigType.RUM_SDK_CONFIG = RumSdkConfigType("rum_sdk_config") diff --git a/datadog_api_client/v2/model/rum_sdk_config_update_attributes.py b/datadog_api_client/v2/model/rum_sdk_config_update_attributes.py new file mode 100644 index 0000000000..7fd0960a9b --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_update_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_rum_update_attributes import RumSdkConfigRumUpdateAttributes + +class RumSdkConfigUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_rum_update_attributes import RumSdkConfigRumUpdateAttributes + return { + "rum": (RumSdkConfigRumUpdateAttributes,), + } + attribute_map = { + "rum": "rum", + } + + def __init__(self_, rum: RumSdkConfigRumUpdateAttributes, **kwargs): + """ + Attributes of the RUM SDK configuration to update. + + :param rum: The RUM SDK settings to apply when updating a configuration. + :type rum: RumSdkConfigRumUpdateAttributes + """ + super().__init__(kwargs) + + + self_.rum = rum diff --git a/datadog_api_client/v2/model/rum_sdk_config_update_data.py b/datadog_api_client/v2/model/rum_sdk_config_update_data.py new file mode 100644 index 0000000000..3c40cc61ea --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_update_attributes import RumSdkConfigUpdateAttributes + from datadog_api_client.v2.model.rum_sdk_config_type import RumSdkConfigType + +class RumSdkConfigUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_update_attributes import RumSdkConfigUpdateAttributes + from datadog_api_client.v2.model.rum_sdk_config_type import RumSdkConfigType + return { + "attributes": (RumSdkConfigUpdateAttributes,), + "id": (str,), + "type": (RumSdkConfigType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: RumSdkConfigUpdateAttributes, id: str, type: RumSdkConfigType, **kwargs): + """ + The data object for updating a RUM SDK configuration. + + :param attributes: Attributes of the RUM SDK configuration to update. + :type attributes: RumSdkConfigUpdateAttributes + + :param id: The ID of the RUM SDK configuration to update. + :type id: str + + :param type: The type of the resource. The value should always be ``rum_sdk_config``. + :type type: RumSdkConfigType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/rum_sdk_config_update_request.py b/datadog_api_client/v2/model/rum_sdk_config_update_request.py new file mode 100644 index 0000000000..d9d2551333 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sdk_config_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_sdk_config_update_data import RumSdkConfigUpdateData + +class RumSdkConfigUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_sdk_config_update_data import RumSdkConfigUpdateData + return { + "data": (RumSdkConfigUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RumSdkConfigUpdateData, **kwargs): + """ + Request body for updating a RUM SDK configuration. + + :param data: The data object for updating a RUM SDK configuration. + :type data: RumSdkConfigUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/rum_search_events_request.py b/datadog_api_client/v2/model/rum_search_events_request.py new file mode 100644 index 0000000000..bae433c7a0 --- /dev/null +++ b/datadog_api_client/v2/model/rum_search_events_request.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rum_query_filter import RUMQueryFilter + from datadog_api_client.v2.model.rum_query_options import RUMQueryOptions + from datadog_api_client.v2.model.rum_query_page_options import RUMQueryPageOptions + from datadog_api_client.v2.model.rum_sort import RUMSort + +class RUMSearchEventsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rum_query_filter import RUMQueryFilter + from datadog_api_client.v2.model.rum_query_options import RUMQueryOptions + from datadog_api_client.v2.model.rum_query_page_options import RUMQueryPageOptions + from datadog_api_client.v2.model.rum_sort import RUMSort + return { + "filter": (RUMQueryFilter,), + "options": (RUMQueryOptions,), + "page": (RUMQueryPageOptions,), + "sort": (RUMSort,), + } + attribute_map = { + "filter": "filter", + "options": "options", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[RUMQueryFilter, UnsetType]=unset, options: Union[RUMQueryOptions, UnsetType]=unset, page: Union[RUMQueryPageOptions, UnsetType]=unset, sort: Union[RUMSort, UnsetType]=unset, **kwargs): + """ + The request for a RUM events list. + + :param filter: The search and filter query settings. + :type filter: RUMQueryFilter, optional + + :param options: Global query options that are used during the query. + Note: Only supply timezone or time offset, not both. Otherwise, the query fails. + :type options: RUMQueryOptions, optional + + :param page: Paging attributes for listing events. + :type page: RUMQueryPageOptions, optional + + :param sort: Sort parameters when querying events. + :type sort: RUMSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/rum_sort.py b/datadog_api_client/v2/model/rum_sort.py new file mode 100644 index 0000000000..963dbc85f0 --- /dev/null +++ b/datadog_api_client/v2/model/rum_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMSort(ModelSimple): + """ + Sort parameters when querying events. + + :param value: Must be one of ["timestamp", "-timestamp"]. + :type value: str + """ + + allowed_values = { + "timestamp", + "-timestamp", + } + TIMESTAMP_ASCENDING: ClassVar["RUMSort"] + TIMESTAMP_DESCENDING: ClassVar["RUMSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMSort.TIMESTAMP_ASCENDING = RUMSort("timestamp") +RUMSort.TIMESTAMP_DESCENDING = RUMSort("-timestamp") diff --git a/datadog_api_client/v2/model/rum_sort_order.py b/datadog_api_client/v2/model/rum_sort_order.py new file mode 100644 index 0000000000..db4f631f4a --- /dev/null +++ b/datadog_api_client/v2/model/rum_sort_order.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RUMSortOrder(ModelSimple): + """ + The order to use, ascending or descending. + + :param value: Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + ASCENDING: ClassVar["RUMSortOrder"] + DESCENDING: ClassVar["RUMSortOrder"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RUMSortOrder.ASCENDING = RUMSortOrder("asc") +RUMSortOrder.DESCENDING = RUMSortOrder("desc") diff --git a/datadog_api_client/v2/model/rum_warning.py b/datadog_api_client/v2/model/rum_warning.py new file mode 100644 index 0000000000..b1af7e0e25 --- /dev/null +++ b/datadog_api_client/v2/model/rum_warning.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class RUMWarning(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "detail": (str,), + "title": (str,), + } + attribute_map = { + "code": "code", + "detail": "detail", + "title": "title", + } + + def __init__(self_, code: Union[str, UnsetType]=unset, detail: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + A warning message indicating something that went wrong with the query. + + :param code: A unique code for this type of warning. + :type code: str, optional + + :param detail: A detailed explanation of this specific warning. + :type detail: str, optional + + :param title: A short human-readable summary of the warning. + :type title: str, optional + """ + if code is not unset: + kwargs["code"] = code + if detail is not unset: + kwargs["detail"] = detail + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/run_data_observability_monitor_response.py b/datadog_api_client/v2/model/run_data_observability_monitor_response.py new file mode 100644 index 0000000000..e6c9762bee --- /dev/null +++ b/datadog_api_client/v2/model/run_data_observability_monitor_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.run_data_observability_monitor_response_data import RunDataObservabilityMonitorResponseData + +class RunDataObservabilityMonitorResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.run_data_observability_monitor_response_data import RunDataObservabilityMonitorResponseData + return { + "data": (RunDataObservabilityMonitorResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: RunDataObservabilityMonitorResponseData, **kwargs): + """ + The response returned when a data observability monitor run is triggered. + + :param data: The data object returned when a data observability monitor run is triggered. + :type data: RunDataObservabilityMonitorResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/run_data_observability_monitor_response_data.py b/datadog_api_client/v2/model/run_data_observability_monitor_response_data.py new file mode 100644 index 0000000000..f35a8ca1c5 --- /dev/null +++ b/datadog_api_client/v2/model/run_data_observability_monitor_response_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_observability_monitor_run_type import DataObservabilityMonitorRunType + +class RunDataObservabilityMonitorResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_observability_monitor_run_type import DataObservabilityMonitorRunType + return { + "id": (str,), + "type": (DataObservabilityMonitorRunType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: DataObservabilityMonitorRunType, **kwargs): + """ + The data object returned when a data observability monitor run is triggered. + + :param id: The unique identifier of the monitor run. + :type id: str + + :param type: The JSON:API resource type for a data observability monitor run. + :type type: DataObservabilityMonitorRunType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/run_historical_job_request.py b/datadog_api_client/v2/model/run_historical_job_request.py new file mode 100644 index 0000000000..806e7443d2 --- /dev/null +++ b/datadog_api_client/v2/model/run_historical_job_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.run_historical_job_request_data import RunHistoricalJobRequestData + +class RunHistoricalJobRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.run_historical_job_request_data import RunHistoricalJobRequestData + return { + "data": (RunHistoricalJobRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[RunHistoricalJobRequestData, UnsetType]=unset, **kwargs): + """ + Run a historical job request. + + :param data: Data for running a historical job request. + :type data: RunHistoricalJobRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/run_historical_job_request_attributes.py b/datadog_api_client/v2/model/run_historical_job_request_attributes.py new file mode 100644 index 0000000000..50cedd9d1a --- /dev/null +++ b/datadog_api_client/v2/model/run_historical_job_request_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.job_definition_from_rule import JobDefinitionFromRule + from datadog_api_client.v2.model.job_definition import JobDefinition + +class RunHistoricalJobRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.job_definition_from_rule import JobDefinitionFromRule + from datadog_api_client.v2.model.job_definition import JobDefinition + return { + "from_rule": (JobDefinitionFromRule,), + "job_definition": (JobDefinition,), + "signal_output": (bool,), + } + attribute_map = { + "from_rule": "fromRule", + "job_definition": "jobDefinition", + "signal_output": "signalOutput", + } + + def __init__(self_, from_rule: Union[JobDefinitionFromRule, UnsetType]=unset, job_definition: Union[JobDefinition, UnsetType]=unset, signal_output: Union[bool, UnsetType]=unset, **kwargs): + """ + Run a historical job request. + + :param from_rule: Definition of a historical job based on a security monitoring rule. + :type from_rule: JobDefinitionFromRule, optional + + :param job_definition: Definition of a historical job. + :type job_definition: JobDefinition, optional + + :param signal_output: Whether the job outputs signals when results are converted. + :type signal_output: bool, optional + """ + if from_rule is not unset: + kwargs["from_rule"] = from_rule + if job_definition is not unset: + kwargs["job_definition"] = job_definition + if signal_output is not unset: + kwargs["signal_output"] = signal_output + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/run_historical_job_request_data.py b/datadog_api_client/v2/model/run_historical_job_request_data.py new file mode 100644 index 0000000000..ef0e1f8ed5 --- /dev/null +++ b/datadog_api_client/v2/model/run_historical_job_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.run_historical_job_request_attributes import RunHistoricalJobRequestAttributes + from datadog_api_client.v2.model.run_historical_job_request_data_type import RunHistoricalJobRequestDataType + +class RunHistoricalJobRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.run_historical_job_request_attributes import RunHistoricalJobRequestAttributes + from datadog_api_client.v2.model.run_historical_job_request_data_type import RunHistoricalJobRequestDataType + return { + "attributes": (RunHistoricalJobRequestAttributes,), + "type": (RunHistoricalJobRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[RunHistoricalJobRequestAttributes, UnsetType]=unset, type: Union[RunHistoricalJobRequestDataType, UnsetType]=unset, **kwargs): + """ + Data for running a historical job request. + + :param attributes: Run a historical job request. + :type attributes: RunHistoricalJobRequestAttributes, optional + + :param type: Type of data. + :type type: RunHistoricalJobRequestDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/run_historical_job_request_data_type.py b/datadog_api_client/v2/model/run_historical_job_request_data_type.py new file mode 100644 index 0000000000..90c046a5c0 --- /dev/null +++ b/datadog_api_client/v2/model/run_historical_job_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class RunHistoricalJobRequestDataType(ModelSimple): + """ + Type of data. + + :param value: If omitted defaults to "historicalDetectionsJobCreate". Must be one of ["historicalDetectionsJobCreate"]. + :type value: str + """ + + allowed_values = { + "historicalDetectionsJobCreate", + } + HISTORICALDETECTIONSJOBCREATE: ClassVar["RunHistoricalJobRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +RunHistoricalJobRequestDataType.HISTORICALDETECTIONSJOBCREATE = RunHistoricalJobRequestDataType("historicalDetectionsJobCreate") diff --git a/datadog_api_client/v2/model/salesforce_incidents_organization_response_attributes.py b/datadog_api_client/v2/model/salesforce_incidents_organization_response_attributes.py new file mode 100644 index 0000000000..9a3ab53481 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_organization_response_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SalesforceIncidentsOrganizationResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "instance_url": (str,), + "name": (str,), + "sfdc_org_id": (str,), + "sfdc_org_type": (str,), + } + attribute_map = { + "instance_url": "instance_url", + "name": "name", + "sfdc_org_id": "sfdc_org_id", + "sfdc_org_type": "sfdc_org_type", + } + + def __init__(self_, instance_url: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, sfdc_org_id: Union[str, UnsetType]=unset, sfdc_org_type: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a Salesforce organization connected to the Datadog Salesforce integration. + + :param instance_url: The Salesforce instance URL used to call this organization's APIs. + :type instance_url: str, optional + + :param name: Human-readable name of the Salesforce organization. + :type name: str, optional + + :param sfdc_org_id: The Salesforce organization identifier (15- or 18-character Salesforce org ID). + :type sfdc_org_id: str, optional + + :param sfdc_org_type: The Salesforce organization type (for example, ``Production`` or ``Sandbox`` ). + :type sfdc_org_type: str, optional + """ + if instance_url is not unset: + kwargs["instance_url"] = instance_url + if name is not unset: + kwargs["name"] = name + if sfdc_org_id is not unset: + kwargs["sfdc_org_id"] = sfdc_org_id + if sfdc_org_type is not unset: + kwargs["sfdc_org_type"] = sfdc_org_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/salesforce_incidents_organization_response_data.py b/datadog_api_client/v2/model/salesforce_incidents_organization_response_data.py new file mode 100644 index 0000000000..90afe3fb68 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_organization_response_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_organization_response_attributes import SalesforceIncidentsOrganizationResponseAttributes + from datadog_api_client.v2.model.salesforce_incidents_organization_type import SalesforceIncidentsOrganizationType + +class SalesforceIncidentsOrganizationResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_organization_response_attributes import SalesforceIncidentsOrganizationResponseAttributes + from datadog_api_client.v2.model.salesforce_incidents_organization_type import SalesforceIncidentsOrganizationType + return { + "attributes": (SalesforceIncidentsOrganizationResponseAttributes,), + "id": (str,), + "type": (SalesforceIncidentsOrganizationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SalesforceIncidentsOrganizationResponseAttributes, id: str, type: SalesforceIncidentsOrganizationType, **kwargs): + """ + Salesforce organization data from a response. + + :param attributes: Attributes of a Salesforce organization connected to the Datadog Salesforce integration. + :type attributes: SalesforceIncidentsOrganizationResponseAttributes + + :param id: The Datadog-assigned ID of the connected Salesforce organization. + :type id: str + + :param type: Salesforce organization resource type. + :type type: SalesforceIncidentsOrganizationType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/salesforce_incidents_organization_type.py b/datadog_api_client/v2/model/salesforce_incidents_organization_type.py new file mode 100644 index 0000000000..7aab23e0fc --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_organization_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SalesforceIncidentsOrganizationType(ModelSimple): + """ + Salesforce organization resource type. + + :param value: If omitted defaults to "salesforce-incidents-org". Must be one of ["salesforce-incidents-org"]. + :type value: str + """ + + allowed_values = { + "salesforce-incidents-org", + } + SALESFORCE_INCIDENTS_ORG: ClassVar["SalesforceIncidentsOrganizationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SalesforceIncidentsOrganizationType.SALESFORCE_INCIDENTS_ORG = SalesforceIncidentsOrganizationType("salesforce-incidents-org") diff --git a/datadog_api_client/v2/model/salesforce_incidents_organizations_response.py b/datadog_api_client/v2/model/salesforce_incidents_organizations_response.py new file mode 100644 index 0000000000..3301e32730 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_organizations_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_organization_response_data import SalesforceIncidentsOrganizationResponseData + +class SalesforceIncidentsOrganizationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_organization_response_data import SalesforceIncidentsOrganizationResponseData + return { + "data": ([SalesforceIncidentsOrganizationResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SalesforceIncidentsOrganizationResponseData], **kwargs): + """ + Response containing a list of Salesforce organizations connected to the + Datadog Salesforce integration. + + :param data: An array of Salesforce organizations. + :type data: [SalesforceIncidentsOrganizationResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_create_attributes.py b/datadog_api_client/v2/model/salesforce_incidents_template_create_attributes.py new file mode 100644 index 0000000000..1739fbdbc5 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_create_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_priority import SalesforceIncidentsTemplatePriority + +class SalesforceIncidentsTemplateCreateAttributes(ModelNormal): + validations = { + "description": { + "max_length": 2048, + "min_length": 1, + }, + "name": { + "max_length": 100, + "min_length": 1, + }, + "owner_id": { + "max_length": 255, + "min_length": 1, + }, + "subject": { + "max_length": 255, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_priority import SalesforceIncidentsTemplatePriority + return { + "description": (str,), + "name": (str,), + "owner_id": (str,), + "priority": (SalesforceIncidentsTemplatePriority,), + "salesforce_org_id": (UUID,), + "subject": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + "owner_id": "owner_id", + "priority": "priority", + "salesforce_org_id": "salesforce_org_id", + "subject": "subject", + } + + def __init__(self_, description: str, name: str, owner_id: str, priority: SalesforceIncidentsTemplatePriority, salesforce_org_id: UUID, subject: str, **kwargs): + """ + Salesforce incident template attributes for a create request. + + :param description: Long-form description body for Salesforce incidents created from this template. + :type description: str + + :param name: Human-readable name for this incident template. Must be unique within your organization. + :type name: str + + :param owner_id: The Salesforce user ID that owns incidents created from this template. + :type owner_id: str + + :param priority: Priority of the Salesforce incident created from this template. + :type priority: SalesforceIncidentsTemplatePriority + + :param salesforce_org_id: The Datadog-assigned ID of the Salesforce organization this template belongs to. + :type salesforce_org_id: UUID + + :param subject: Subject line for Salesforce incidents created from this template. + :type subject: str + """ + super().__init__(kwargs) + + + self_.description = description + self_.name = name + self_.owner_id = owner_id + self_.priority = priority + self_.salesforce_org_id = salesforce_org_id + self_.subject = subject diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_create_data.py b/datadog_api_client/v2/model/salesforce_incidents_template_create_data.py new file mode 100644 index 0000000000..f996141939 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_create_attributes import SalesforceIncidentsTemplateCreateAttributes + from datadog_api_client.v2.model.salesforce_incidents_template_type import SalesforceIncidentsTemplateType + +class SalesforceIncidentsTemplateCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_create_attributes import SalesforceIncidentsTemplateCreateAttributes + from datadog_api_client.v2.model.salesforce_incidents_template_type import SalesforceIncidentsTemplateType + return { + "attributes": (SalesforceIncidentsTemplateCreateAttributes,), + "type": (SalesforceIncidentsTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SalesforceIncidentsTemplateCreateAttributes, type: SalesforceIncidentsTemplateType, **kwargs): + """ + Salesforce incident template data for a create request. + + :param attributes: Salesforce incident template attributes for a create request. + :type attributes: SalesforceIncidentsTemplateCreateAttributes + + :param type: Salesforce incident template resource type. + :type type: SalesforceIncidentsTemplateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_create_request.py b/datadog_api_client/v2/model/salesforce_incidents_template_create_request.py new file mode 100644 index 0000000000..dfdcdcf5de --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_create_data import SalesforceIncidentsTemplateCreateData + +class SalesforceIncidentsTemplateCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_create_data import SalesforceIncidentsTemplateCreateData + return { + "data": (SalesforceIncidentsTemplateCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SalesforceIncidentsTemplateCreateData, **kwargs): + """ + Create request for a Salesforce incident template. + + :param data: Salesforce incident template data for a create request. + :type data: SalesforceIncidentsTemplateCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_priority.py b/datadog_api_client/v2/model/salesforce_incidents_template_priority.py new file mode 100644 index 0000000000..b22f8b7453 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_priority.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SalesforceIncidentsTemplatePriority(ModelSimple): + """ + Priority of the Salesforce incident created from this template. + + :param value: Must be one of ["Critical", "High", "Moderate", "Low"]. + :type value: str + """ + + allowed_values = { + "Critical", + "High", + "Moderate", + "Low", + } + CRITICAL: ClassVar["SalesforceIncidentsTemplatePriority"] + HIGH: ClassVar["SalesforceIncidentsTemplatePriority"] + MODERATE: ClassVar["SalesforceIncidentsTemplatePriority"] + LOW: ClassVar["SalesforceIncidentsTemplatePriority"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SalesforceIncidentsTemplatePriority.CRITICAL = SalesforceIncidentsTemplatePriority("Critical") +SalesforceIncidentsTemplatePriority.HIGH = SalesforceIncidentsTemplatePriority("High") +SalesforceIncidentsTemplatePriority.MODERATE = SalesforceIncidentsTemplatePriority("Moderate") +SalesforceIncidentsTemplatePriority.LOW = SalesforceIncidentsTemplatePriority("Low") diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_response.py b/datadog_api_client/v2/model/salesforce_incidents_template_response.py new file mode 100644 index 0000000000..d77e8b32c1 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_response_data import SalesforceIncidentsTemplateResponseData + +class SalesforceIncidentsTemplateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_response_data import SalesforceIncidentsTemplateResponseData + return { + "data": (SalesforceIncidentsTemplateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SalesforceIncidentsTemplateResponseData, **kwargs): + """ + Response containing a Salesforce incident template. + + :param data: Salesforce incident template data from a response. + :type data: SalesforceIncidentsTemplateResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_response_attributes.py b/datadog_api_client/v2/model/salesforce_incidents_template_response_attributes.py new file mode 100644 index 0000000000..142803e2bd --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_priority import SalesforceIncidentsTemplatePriority + +class SalesforceIncidentsTemplateResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_priority import SalesforceIncidentsTemplatePriority + return { + "description": (str,), + "name": (str,), + "owner_id": (str,), + "priority": (SalesforceIncidentsTemplatePriority,), + "salesforce_org_id": (UUID,), + "subject": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + "owner_id": "owner_id", + "priority": "priority", + "salesforce_org_id": "salesforce_org_id", + "subject": "subject", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, owner_id: Union[str, UnsetType]=unset, priority: Union[SalesforceIncidentsTemplatePriority, UnsetType]=unset, salesforce_org_id: Union[UUID, UnsetType]=unset, subject: Union[str, UnsetType]=unset, **kwargs): + """ + Salesforce incident template attributes returned by the API. + + :param description: Long-form description body for Salesforce incidents created from this template. + :type description: str, optional + + :param name: Human-readable name for this incident template. + :type name: str, optional + + :param owner_id: The Salesforce user ID that owns incidents created from this template. + :type owner_id: str, optional + + :param priority: Priority of the Salesforce incident created from this template. + :type priority: SalesforceIncidentsTemplatePriority, optional + + :param salesforce_org_id: The Datadog-assigned ID of the Salesforce organization this template belongs to. + :type salesforce_org_id: UUID, optional + + :param subject: Subject line for Salesforce incidents created from this template. + :type subject: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if owner_id is not unset: + kwargs["owner_id"] = owner_id + if priority is not unset: + kwargs["priority"] = priority + if salesforce_org_id is not unset: + kwargs["salesforce_org_id"] = salesforce_org_id + if subject is not unset: + kwargs["subject"] = subject + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_response_data.py b/datadog_api_client/v2/model/salesforce_incidents_template_response_data.py new file mode 100644 index 0000000000..a1af1c5fc2 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_response_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_response_attributes import SalesforceIncidentsTemplateResponseAttributes + from datadog_api_client.v2.model.salesforce_incidents_template_type import SalesforceIncidentsTemplateType + +class SalesforceIncidentsTemplateResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_response_attributes import SalesforceIncidentsTemplateResponseAttributes + from datadog_api_client.v2.model.salesforce_incidents_template_type import SalesforceIncidentsTemplateType + return { + "attributes": (SalesforceIncidentsTemplateResponseAttributes,), + "id": (str,), + "type": (SalesforceIncidentsTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SalesforceIncidentsTemplateResponseAttributes, id: str, type: SalesforceIncidentsTemplateType, **kwargs): + """ + Salesforce incident template data from a response. + + :param attributes: Salesforce incident template attributes returned by the API. + :type attributes: SalesforceIncidentsTemplateResponseAttributes + + :param id: The ID of the Salesforce incident template. + :type id: str + + :param type: Salesforce incident template resource type. + :type type: SalesforceIncidentsTemplateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_type.py b/datadog_api_client/v2/model/salesforce_incidents_template_type.py new file mode 100644 index 0000000000..61d4780405 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SalesforceIncidentsTemplateType(ModelSimple): + """ + Salesforce incident template resource type. + + :param value: If omitted defaults to "salesforce-incidents-incident-template". Must be one of ["salesforce-incidents-incident-template"]. + :type value: str + """ + + allowed_values = { + "salesforce-incidents-incident-template", + } + SALESFORCE_INCIDENTS_INCIDENT_TEMPLATE: ClassVar["SalesforceIncidentsTemplateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SalesforceIncidentsTemplateType.SALESFORCE_INCIDENTS_INCIDENT_TEMPLATE = SalesforceIncidentsTemplateType("salesforce-incidents-incident-template") diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_update_attributes.py b/datadog_api_client/v2/model/salesforce_incidents_template_update_attributes.py new file mode 100644 index 0000000000..4c38ce9d2c --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_update_attributes.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_priority import SalesforceIncidentsTemplatePriority + +class SalesforceIncidentsTemplateUpdateAttributes(ModelNormal): + validations = { + "description": { + "max_length": 2048, + "min_length": 1, + }, + "name": { + "max_length": 100, + "min_length": 1, + }, + "owner_id": { + "max_length": 255, + "min_length": 1, + }, + "subject": { + "max_length": 255, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_priority import SalesforceIncidentsTemplatePriority + return { + "description": (str,), + "name": (str,), + "owner_id": (str,), + "priority": (SalesforceIncidentsTemplatePriority,), + "salesforce_org_id": (UUID,), + "subject": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + "owner_id": "owner_id", + "priority": "priority", + "salesforce_org_id": "salesforce_org_id", + "subject": "subject", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, owner_id: Union[str, UnsetType]=unset, priority: Union[SalesforceIncidentsTemplatePriority, UnsetType]=unset, salesforce_org_id: Union[UUID, UnsetType]=unset, subject: Union[str, UnsetType]=unset, **kwargs): + """ + Salesforce incident template attributes for an update request. + + :param description: Long-form description body for Salesforce incidents created from this template. + :type description: str, optional + + :param name: Human-readable name for this incident template. + :type name: str, optional + + :param owner_id: The Salesforce user ID that owns incidents created from this template. + :type owner_id: str, optional + + :param priority: Priority of the Salesforce incident created from this template. + :type priority: SalesforceIncidentsTemplatePriority, optional + + :param salesforce_org_id: The Datadog-assigned ID of the Salesforce organization this template belongs to. + :type salesforce_org_id: UUID, optional + + :param subject: Subject line for Salesforce incidents created from this template. + :type subject: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if owner_id is not unset: + kwargs["owner_id"] = owner_id + if priority is not unset: + kwargs["priority"] = priority + if salesforce_org_id is not unset: + kwargs["salesforce_org_id"] = salesforce_org_id + if subject is not unset: + kwargs["subject"] = subject + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_update_data.py b/datadog_api_client/v2/model/salesforce_incidents_template_update_data.py new file mode 100644 index 0000000000..53bfd1f2b8 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_update_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_update_attributes import SalesforceIncidentsTemplateUpdateAttributes + from datadog_api_client.v2.model.salesforce_incidents_template_type import SalesforceIncidentsTemplateType + +class SalesforceIncidentsTemplateUpdateData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_update_attributes import SalesforceIncidentsTemplateUpdateAttributes + from datadog_api_client.v2.model.salesforce_incidents_template_type import SalesforceIncidentsTemplateType + return { + "attributes": (SalesforceIncidentsTemplateUpdateAttributes,), + "id": (str,), + "type": (SalesforceIncidentsTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SalesforceIncidentsTemplateUpdateAttributes, id: str, type: SalesforceIncidentsTemplateType, **kwargs): + """ + Salesforce incident template data for an update request. + + :param attributes: Salesforce incident template attributes for an update request. + :type attributes: SalesforceIncidentsTemplateUpdateAttributes + + :param id: The ID of the Salesforce incident template being updated. Must match the path parameter. + :type id: str + + :param type: Salesforce incident template resource type. + :type type: SalesforceIncidentsTemplateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/salesforce_incidents_template_update_request.py b/datadog_api_client/v2/model/salesforce_incidents_template_update_request.py new file mode 100644 index 0000000000..2669e6a25f --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_template_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_update_data import SalesforceIncidentsTemplateUpdateData + +class SalesforceIncidentsTemplateUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_update_data import SalesforceIncidentsTemplateUpdateData + return { + "data": (SalesforceIncidentsTemplateUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SalesforceIncidentsTemplateUpdateData, **kwargs): + """ + Update request for a Salesforce incident template. + + :param data: Salesforce incident template data for an update request. + :type data: SalesforceIncidentsTemplateUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/salesforce_incidents_templates_response.py b/datadog_api_client/v2/model/salesforce_incidents_templates_response.py new file mode 100644 index 0000000000..aa50668452 --- /dev/null +++ b/datadog_api_client/v2/model/salesforce_incidents_templates_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.salesforce_incidents_template_response_data import SalesforceIncidentsTemplateResponseData + +class SalesforceIncidentsTemplatesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.salesforce_incidents_template_response_data import SalesforceIncidentsTemplateResponseData + return { + "data": ([SalesforceIncidentsTemplateResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SalesforceIncidentsTemplateResponseData], **kwargs): + """ + Response containing a list of Salesforce incident templates. + + :param data: An array of Salesforce incident templates. + :type data: [SalesforceIncidentsTemplateResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/saml_assertion_attribute.py b/datadog_api_client/v2/model/saml_assertion_attribute.py new file mode 100644 index 0000000000..e6f87be991 --- /dev/null +++ b/datadog_api_client/v2/model/saml_assertion_attribute.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.saml_assertion_attribute_attributes import SAMLAssertionAttributeAttributes + from datadog_api_client.v2.model.saml_assertion_attributes_type import SAMLAssertionAttributesType + +class SAMLAssertionAttribute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.saml_assertion_attribute_attributes import SAMLAssertionAttributeAttributes + from datadog_api_client.v2.model.saml_assertion_attributes_type import SAMLAssertionAttributesType + return { + "attributes": (SAMLAssertionAttributeAttributes,), + "id": (str,), + "type": (SAMLAssertionAttributesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: SAMLAssertionAttributesType, attributes: Union[SAMLAssertionAttributeAttributes, UnsetType]=unset, **kwargs): + """ + SAML assertion attribute. + + :param attributes: Key/Value pair of attributes used in SAML assertion attributes. + :type attributes: SAMLAssertionAttributeAttributes, optional + + :param id: The ID of the SAML assertion attribute. + :type id: str + + :param type: SAML assertion attributes resource type. + :type type: SAMLAssertionAttributesType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/saml_assertion_attribute_attributes.py b/datadog_api_client/v2/model/saml_assertion_attribute_attributes.py new file mode 100644 index 0000000000..a49fbba466 --- /dev/null +++ b/datadog_api_client/v2/model/saml_assertion_attribute_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SAMLAssertionAttributeAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attribute_key": (str,), + "attribute_value": (str,), + } + attribute_map = { + "attribute_key": "attribute_key", + "attribute_value": "attribute_value", + } + + def __init__(self_, attribute_key: Union[str, UnsetType]=unset, attribute_value: Union[str, UnsetType]=unset, **kwargs): + """ + Key/Value pair of attributes used in SAML assertion attributes. + + :param attribute_key: Key portion of a key/value pair of the attribute sent from the Identity Provider. + :type attribute_key: str, optional + + :param attribute_value: Value portion of a key/value pair of the attribute sent from the Identity Provider. + :type attribute_value: str, optional + """ + if attribute_key is not unset: + kwargs["attribute_key"] = attribute_key + if attribute_value is not unset: + kwargs["attribute_value"] = attribute_value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/saml_assertion_attributes_type.py b/datadog_api_client/v2/model/saml_assertion_attributes_type.py new file mode 100644 index 0000000000..2ce99d3b5e --- /dev/null +++ b/datadog_api_client/v2/model/saml_assertion_attributes_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SAMLAssertionAttributesType(ModelSimple): + """ + SAML assertion attributes resource type. + + :param value: If omitted defaults to "saml_assertion_attributes". Must be one of ["saml_assertion_attributes"]. + :type value: str + """ + + allowed_values = { + "saml_assertion_attributes", + } + SAML_ASSERTION_ATTRIBUTES: ClassVar["SAMLAssertionAttributesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SAMLAssertionAttributesType.SAML_ASSERTION_ATTRIBUTES = SAMLAssertionAttributesType("saml_assertion_attributes") diff --git a/datadog_api_client/v2/model/saml_configuration.py b/datadog_api_client/v2/model/saml_configuration.py new file mode 100644 index 0000000000..3607a9e7b2 --- /dev/null +++ b/datadog_api_client/v2/model/saml_configuration.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.saml_configuration_attributes import SAMLConfigurationAttributes + from datadog_api_client.v2.model.saml_configuration_relationships import SAMLConfigurationRelationships + from datadog_api_client.v2.model.saml_configurations_type import SAMLConfigurationsType + +class SAMLConfiguration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.saml_configuration_attributes import SAMLConfigurationAttributes + from datadog_api_client.v2.model.saml_configuration_relationships import SAMLConfigurationRelationships + from datadog_api_client.v2.model.saml_configurations_type import SAMLConfigurationsType + return { + "attributes": (SAMLConfigurationAttributes,), + "id": (str,), + "relationships": (SAMLConfigurationRelationships,), + "type": (SAMLConfigurationsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: SAMLConfigurationsType, attributes: Union[SAMLConfigurationAttributes, UnsetType]=unset, relationships: Union[SAMLConfigurationRelationships, UnsetType]=unset, **kwargs): + """ + A SAML configuration object. + + :param attributes: Attributes of a SAML configuration. + :type attributes: SAMLConfigurationAttributes, optional + + :param id: The UUID of the SAML configuration. + :type id: str + + :param relationships: Relationships of a SAML configuration. + :type relationships: SAMLConfigurationRelationships, optional + + :param type: SAML configurations resource type. + :type type: SAMLConfigurationsType + """ + 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/datadog_api_client/v2/model/saml_configuration_attributes.py b/datadog_api_client/v2/model/saml_configuration_attributes.py new file mode 100644 index 0000000000..ae05bf4601 --- /dev/null +++ b/datadog_api_client/v2/model/saml_configuration_attributes.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SAMLConfigurationAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assertion_consumer_service": ([str],), + "created_at": (datetime,), + "entity_id": (str,), + "expires_at": (datetime, none_type), + "idp_initiated": (bool,), + "jit_domains": ([str],), + "modified_at": (datetime,), + "sso_url": (str, none_type), + } + attribute_map = { + "assertion_consumer_service": "assertion_consumer_service", + "created_at": "created_at", + "entity_id": "entity_id", + "expires_at": "expires_at", + "idp_initiated": "idp_initiated", + "jit_domains": "jit_domains", + "modified_at": "modified_at", + "sso_url": "sso_url", + } + read_only_vars = { + "created_at", + "modified_at", + } + + def __init__(self_, assertion_consumer_service: Union[List[str], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, entity_id: Union[str, UnsetType]=unset, expires_at: Union[datetime, none_type, UnsetType]=unset, idp_initiated: Union[bool, UnsetType]=unset, jit_domains: Union[List[str], UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, sso_url: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of a SAML configuration. + + :param assertion_consumer_service: The assertion consumer service (ACS) URLs that the identity provider posts SAML responses to. + :type assertion_consumer_service: [str], optional + + :param created_at: Creation time of the SAML configuration. + :type created_at: datetime, optional + + :param entity_id: The service provider entity ID Datadog presents to the identity provider. + :type entity_id: str, optional + + :param expires_at: Expiration time of the uploaded identity provider metadata. + :type expires_at: datetime, none_type, optional + + :param idp_initiated: Whether identity-provider-initiated login is enabled for the organization. + :type idp_initiated: bool, optional + + :param jit_domains: Email domains for which users are automatically provisioned on first SAML login + (just-in-time provisioning). + :type jit_domains: [str], optional + + :param modified_at: Time of the last SAML configuration modification. + :type modified_at: datetime, optional + + :param sso_url: The single sign-on URL users can visit to start a SAML login. + Returns ``null`` when the organization is identity-provider-initiated and has no subdomain. + :type sso_url: str, none_type, optional + """ + if assertion_consumer_service is not unset: + kwargs["assertion_consumer_service"] = assertion_consumer_service + if created_at is not unset: + kwargs["created_at"] = created_at + if entity_id is not unset: + kwargs["entity_id"] = entity_id + if expires_at is not unset: + kwargs["expires_at"] = expires_at + if idp_initiated is not unset: + kwargs["idp_initiated"] = idp_initiated + if jit_domains is not unset: + kwargs["jit_domains"] = jit_domains + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if sso_url is not unset: + kwargs["sso_url"] = sso_url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/saml_configuration_relationships.py b/datadog_api_client/v2/model/saml_configuration_relationships.py new file mode 100644 index 0000000000..05c5355331 --- /dev/null +++ b/datadog_api_client/v2/model/saml_configuration_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_roles import RelationshipToRoles + +class SAMLConfigurationRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_roles import RelationshipToRoles + return { + "default_roles": (RelationshipToRoles,), + } + attribute_map = { + "default_roles": "default_roles", + } + + def __init__(self_, default_roles: Union[RelationshipToRoles, UnsetType]=unset, **kwargs): + """ + Relationships of a SAML configuration. + + :param default_roles: Relationship to roles. + :type default_roles: RelationshipToRoles, optional + """ + if default_roles is not unset: + kwargs["default_roles"] = default_roles + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/saml_configuration_response.py b/datadog_api_client/v2/model/saml_configuration_response.py new file mode 100644 index 0000000000..ef6c5118bc --- /dev/null +++ b/datadog_api_client/v2/model/saml_configuration_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.saml_configuration import SAMLConfiguration + from datadog_api_client.v2.model.role import Role + +class SAMLConfigurationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.saml_configuration import SAMLConfiguration + from datadog_api_client.v2.model.role import Role + return { + "data": (SAMLConfiguration,), + "included": ([Role],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: SAMLConfiguration, included: Union[List[Role], UnsetType]=unset, **kwargs): + """ + Response containing a single SAML configuration. + + :param data: A SAML configuration object. + :type data: SAMLConfiguration + + :param included: Resources related to the SAML configuration, such as the default roles. + :type included: [Role], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/saml_configuration_update_attributes.py b/datadog_api_client/v2/model/saml_configuration_update_attributes.py new file mode 100644 index 0000000000..2a22648422 --- /dev/null +++ b/datadog_api_client/v2/model/saml_configuration_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SAMLConfigurationUpdateAttributes(ModelNormal): + validations = { + "jit_domains": { + "max_items": 50, + "min_items": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "idp_initiated": (bool,), + "jit_domains": ([str],), + } + attribute_map = { + "idp_initiated": "idp_initiated", + "jit_domains": "jit_domains", + } + + def __init__(self_, idp_initiated: Union[bool, UnsetType]=unset, jit_domains: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for updating a SAML configuration. + + :param idp_initiated: Whether identity-provider-initiated login is enabled for the organization. + :type idp_initiated: bool, optional + + :param jit_domains: Email domains for which users are automatically provisioned on first SAML login + (just-in-time provisioning). A default role is required to enable just-in-time provisioning. + :type jit_domains: [str], optional + """ + if idp_initiated is not unset: + kwargs["idp_initiated"] = idp_initiated + if jit_domains is not unset: + kwargs["jit_domains"] = jit_domains + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/saml_configuration_update_data.py b/datadog_api_client/v2/model/saml_configuration_update_data.py new file mode 100644 index 0000000000..98b033dc22 --- /dev/null +++ b/datadog_api_client/v2/model/saml_configuration_update_data.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.saml_configuration_update_attributes import SAMLConfigurationUpdateAttributes + from datadog_api_client.v2.model.saml_configuration_relationships import SAMLConfigurationRelationships + from datadog_api_client.v2.model.saml_configurations_type import SAMLConfigurationsType + +class SAMLConfigurationUpdateData(ModelNormal): + validations = { + "id": { + "max_length": 39, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.saml_configuration_update_attributes import SAMLConfigurationUpdateAttributes + from datadog_api_client.v2.model.saml_configuration_relationships import SAMLConfigurationRelationships + from datadog_api_client.v2.model.saml_configurations_type import SAMLConfigurationsType + return { + "attributes": (SAMLConfigurationUpdateAttributes,), + "id": (str,), + "relationships": (SAMLConfigurationRelationships,), + "type": (SAMLConfigurationsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: SAMLConfigurationsType, attributes: Union[SAMLConfigurationUpdateAttributes, UnsetType]=unset, relationships: Union[SAMLConfigurationRelationships, UnsetType]=unset, **kwargs): + """ + Data for updating a SAML configuration. + + :param attributes: Attributes for updating a SAML configuration. + :type attributes: SAMLConfigurationUpdateAttributes, optional + + :param id: The UUID of the SAML configuration to update. Must match the UUID in the URL path. + :type id: str + + :param relationships: Relationships of a SAML configuration. + :type relationships: SAMLConfigurationRelationships, optional + + :param type: SAML configurations resource type. + :type type: SAMLConfigurationsType + """ + 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/datadog_api_client/v2/model/saml_configuration_update_request.py b/datadog_api_client/v2/model/saml_configuration_update_request.py new file mode 100644 index 0000000000..258f0de013 --- /dev/null +++ b/datadog_api_client/v2/model/saml_configuration_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.saml_configuration_update_data import SAMLConfigurationUpdateData + +class SAMLConfigurationUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.saml_configuration_update_data import SAMLConfigurationUpdateData + return { + "data": (SAMLConfigurationUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SAMLConfigurationUpdateData, **kwargs): + """ + Request to update a SAML configuration. + + :param data: Data for updating a SAML configuration. + :type data: SAMLConfigurationUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/saml_configurations_response.py b/datadog_api_client/v2/model/saml_configurations_response.py new file mode 100644 index 0000000000..9d99610cde --- /dev/null +++ b/datadog_api_client/v2/model/saml_configurations_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.saml_configuration import SAMLConfiguration + from datadog_api_client.v2.model.role import Role + +class SAMLConfigurationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.saml_configuration import SAMLConfiguration + from datadog_api_client.v2.model.role import Role + return { + "data": ([SAMLConfiguration],), + "included": ([Role],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[List[SAMLConfiguration], UnsetType]=unset, included: Union[List[Role], UnsetType]=unset, **kwargs): + """ + Response containing a list of SAML configurations. + + :param data: Array of SAML configurations. An organization has at most one SAML configuration. + :type data: [SAMLConfiguration], optional + + :param included: Resources related to the SAML configurations, such as the default roles. + :type included: [Role], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/saml_configurations_type.py b/datadog_api_client/v2/model/saml_configurations_type.py new file mode 100644 index 0000000000..28becfc53b --- /dev/null +++ b/datadog_api_client/v2/model/saml_configurations_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SAMLConfigurationsType(ModelSimple): + """ + SAML configurations resource type. + + :param value: If omitted defaults to "saml_configurations". Must be one of ["saml_configurations"]. + :type value: str + """ + + allowed_values = { + "saml_configurations", + } + SAML_CONFIGURATIONS: ClassVar["SAMLConfigurationsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SAMLConfigurationsType.SAML_CONFIGURATIONS = SAMLConfigurationsType("saml_configurations") diff --git a/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_attributes.py b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_attributes.py new file mode 100644 index 0000000000..9778598471 --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_duration import SampleLogGenerationDuration + +class SampleLogGenerationBulkSubscriptionAttributes(ModelNormal): + validations = { + "content_pack_ids": { + "max_items": 5, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_duration import SampleLogGenerationDuration + return { + "content_pack_ids": ([str],), + "duration": (SampleLogGenerationDuration,), + } + attribute_map = { + "content_pack_ids": "content_pack_ids", + "duration": "duration", + } + + def __init__(self_, content_pack_ids: List[str], duration: Union[SampleLogGenerationDuration, UnsetType]=unset, **kwargs): + """ + The attributes for creating sample log generation subscriptions for multiple content packs. + + :param content_pack_ids: The identifiers of the Cloud SIEM content packs to subscribe to. At most five content packs can be requested in a single call. + :type content_pack_ids: [str] + + :param duration: How long the subscription should remain active before expiring. + :type duration: SampleLogGenerationDuration, optional + """ + if duration is not unset: + kwargs["duration"] = duration + super().__init__(kwargs) + + + self_.content_pack_ids = content_pack_ids diff --git a/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_data.py b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_data.py new file mode 100644 index 0000000000..4878f4ef54 --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_attributes import SampleLogGenerationBulkSubscriptionAttributes + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_request_type import SampleLogGenerationBulkSubscriptionRequestType + +class SampleLogGenerationBulkSubscriptionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_attributes import SampleLogGenerationBulkSubscriptionAttributes + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_request_type import SampleLogGenerationBulkSubscriptionRequestType + return { + "attributes": (SampleLogGenerationBulkSubscriptionAttributes,), + "type": (SampleLogGenerationBulkSubscriptionRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SampleLogGenerationBulkSubscriptionAttributes, type: SampleLogGenerationBulkSubscriptionRequestType, **kwargs): + """ + The bulk subscription request body. + + :param attributes: The attributes for creating sample log generation subscriptions for multiple content packs. + :type attributes: SampleLogGenerationBulkSubscriptionAttributes + + :param type: The type of the resource. The value should always be ``bulk_subscription_requests``. + :type type: SampleLogGenerationBulkSubscriptionRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_item_meta.py b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_item_meta.py new file mode 100644 index 0000000000..cc2fa06f1f --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_item_meta.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SampleLogGenerationBulkSubscriptionItemMeta(ModelNormal): + validations = { + "status": { + "inclusive_maximum": 599, + }, + } + @cached_property + def openapi_types(_): + return { + "error": (str,), + "status": (int,), + } + attribute_map = { + "error": "error", + "status": "status", + } + + def __init__(self_, status: int, error: Union[str, UnsetType]=unset, **kwargs): + """ + Per-item status returned for a bulk subscription request. + + :param error: A description of the error encountered for this content pack, if the subscription could not be created. + :type error: str, optional + + :param status: The HTTP status code that resulted from creating the subscription for this content pack. + :type status: int + """ + if error is not unset: + kwargs["error"] = error + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_request.py b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_request.py new file mode 100644 index 0000000000..682e5821ae --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_data import SampleLogGenerationBulkSubscriptionData + +class SampleLogGenerationBulkSubscriptionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_data import SampleLogGenerationBulkSubscriptionData + return { + "data": (SampleLogGenerationBulkSubscriptionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SampleLogGenerationBulkSubscriptionData, **kwargs): + """ + Request body to create sample log generation subscriptions for multiple content packs at once. + + :param data: The bulk subscription request body. + :type data: SampleLogGenerationBulkSubscriptionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_request_type.py b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_request_type.py new file mode 100644 index 0000000000..28d0f91c44 --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SampleLogGenerationBulkSubscriptionRequestType(ModelSimple): + """ + The type of the resource. The value should always be `bulk_subscription_requests`. + + :param value: If omitted defaults to "bulk_subscription_requests". Must be one of ["bulk_subscription_requests"]. + :type value: str + """ + + allowed_values = { + "bulk_subscription_requests", + } + BULK_SUBSCRIPTION_REQUESTS: ClassVar["SampleLogGenerationBulkSubscriptionRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SampleLogGenerationBulkSubscriptionRequestType.BULK_SUBSCRIPTION_REQUESTS = SampleLogGenerationBulkSubscriptionRequestType("bulk_subscription_requests") diff --git a/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_response.py b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_response.py new file mode 100644 index 0000000000..61f304e2c3 --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_result_item import SampleLogGenerationBulkSubscriptionResultItem + +class SampleLogGenerationBulkSubscriptionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_result_item import SampleLogGenerationBulkSubscriptionResultItem + return { + "data": ([SampleLogGenerationBulkSubscriptionResultItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SampleLogGenerationBulkSubscriptionResultItem], **kwargs): + """ + Response containing the per-content-pack results of a bulk subscription request. + + :param data: The list of bulk subscription results, one per requested content pack. + :type data: [SampleLogGenerationBulkSubscriptionResultItem] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_result_item.py b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_result_item.py new file mode 100644 index 0000000000..5afc2c7664 --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_bulk_subscription_result_item.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_subscription_attributes import SampleLogGenerationSubscriptionAttributes + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_item_meta import SampleLogGenerationBulkSubscriptionItemMeta + from datadog_api_client.v2.model.sample_log_generation_subscription_resource_type import SampleLogGenerationSubscriptionResourceType + +class SampleLogGenerationBulkSubscriptionResultItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_subscription_attributes import SampleLogGenerationSubscriptionAttributes + from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_item_meta import SampleLogGenerationBulkSubscriptionItemMeta + from datadog_api_client.v2.model.sample_log_generation_subscription_resource_type import SampleLogGenerationSubscriptionResourceType + return { + "attributes": (SampleLogGenerationSubscriptionAttributes,), + "id": (str,), + "meta": (SampleLogGenerationBulkSubscriptionItemMeta,), + "type": (SampleLogGenerationSubscriptionResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "meta": "meta", + "type": "type", + } + + def __init__(self_, attributes: SampleLogGenerationSubscriptionAttributes, id: str, meta: SampleLogGenerationBulkSubscriptionItemMeta, type: SampleLogGenerationSubscriptionResourceType, **kwargs): + """ + A single result entry returned by the bulk subscription endpoint. + + :param attributes: The attributes describing a sample log generation subscription. + :type attributes: SampleLogGenerationSubscriptionAttributes + + :param id: The unique identifier of the subscription, when one was created. + :type id: str + + :param meta: Per-item status returned for a bulk subscription request. + :type meta: SampleLogGenerationBulkSubscriptionItemMeta + + :param type: The type of the resource. The value should always be ``subscriptions``. + :type type: SampleLogGenerationSubscriptionResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.meta = meta + self_.type = type diff --git a/datadog_api_client/v2/model/sample_log_generation_duration.py b/datadog_api_client/v2/model/sample_log_generation_duration.py new file mode 100644 index 0000000000..7b5a3d5221 --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_duration.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SampleLogGenerationDuration(ModelSimple): + """ + How long the subscription should remain active before expiring. + + :param value: If omitted defaults to "3d". Must be one of ["1h", "1d", "3d", "7d"]. + :type value: str + """ + + allowed_values = { + "1h", + "1d", + "3d", + "7d", + } + ONE_HOUR: ClassVar["SampleLogGenerationDuration"] + ONE_DAY: ClassVar["SampleLogGenerationDuration"] + THREE_DAYS: ClassVar["SampleLogGenerationDuration"] + SEVEN_DAYS: ClassVar["SampleLogGenerationDuration"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SampleLogGenerationDuration.ONE_HOUR = SampleLogGenerationDuration("1h") +SampleLogGenerationDuration.ONE_DAY = SampleLogGenerationDuration("1d") +SampleLogGenerationDuration.THREE_DAYS = SampleLogGenerationDuration("3d") +SampleLogGenerationDuration.SEVEN_DAYS = SampleLogGenerationDuration("7d") diff --git a/datadog_api_client/v2/model/sample_log_generation_subscription_attributes.py b/datadog_api_client/v2/model/sample_log_generation_subscription_attributes.py new file mode 100644 index 0000000000..6efc354eca --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscription_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_subscription_status import SampleLogGenerationSubscriptionStatus + +class SampleLogGenerationSubscriptionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_subscription_status import SampleLogGenerationSubscriptionStatus + return { + "content_pack_id": (str,), + "created_at": (datetime,), + "expires_at": (datetime,), + "is_active": (bool,), + "status": (SampleLogGenerationSubscriptionStatus,), + } + attribute_map = { + "content_pack_id": "content_pack_id", + "created_at": "created_at", + "expires_at": "expires_at", + "is_active": "is_active", + "status": "status", + } + + def __init__(self_, content_pack_id: str, created_at: datetime, expires_at: datetime, is_active: bool, status: SampleLogGenerationSubscriptionStatus, **kwargs): + """ + The attributes describing a sample log generation subscription. + + :param content_pack_id: The identifier of the Cloud SIEM content pack the subscription targets. + :type content_pack_id: str + + :param created_at: The time at which the subscription was created. + :type created_at: datetime + + :param expires_at: The time at which the subscription expires and stops generating logs. + :type expires_at: datetime + + :param is_active: Whether the subscription is currently active and generating logs. + :type is_active: bool + + :param status: The status of the subscription. + :type status: SampleLogGenerationSubscriptionStatus + """ + super().__init__(kwargs) + + + self_.content_pack_id = content_pack_id + self_.created_at = created_at + self_.expires_at = expires_at + self_.is_active = is_active + self_.status = status diff --git a/datadog_api_client/v2/model/sample_log_generation_subscription_create_attributes.py b/datadog_api_client/v2/model/sample_log_generation_subscription_create_attributes.py new file mode 100644 index 0000000000..e3a1f8952e --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscription_create_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_duration import SampleLogGenerationDuration + +class SampleLogGenerationSubscriptionCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_duration import SampleLogGenerationDuration + return { + "content_pack_id": (str,), + "duration": (SampleLogGenerationDuration,), + } + attribute_map = { + "content_pack_id": "content_pack_id", + "duration": "duration", + } + + def __init__(self_, content_pack_id: str, duration: Union[SampleLogGenerationDuration, UnsetType]=unset, **kwargs): + """ + The attributes for creating a sample log generation subscription. + + :param content_pack_id: The identifier of the Cloud SIEM content pack to subscribe to. + :type content_pack_id: str + + :param duration: How long the subscription should remain active before expiring. + :type duration: SampleLogGenerationDuration, optional + """ + if duration is not unset: + kwargs["duration"] = duration + super().__init__(kwargs) + + + self_.content_pack_id = content_pack_id diff --git a/datadog_api_client/v2/model/sample_log_generation_subscription_create_data.py b/datadog_api_client/v2/model/sample_log_generation_subscription_create_data.py new file mode 100644 index 0000000000..b64f43242e --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscription_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_subscription_create_attributes import SampleLogGenerationSubscriptionCreateAttributes + from datadog_api_client.v2.model.sample_log_generation_subscription_request_type import SampleLogGenerationSubscriptionRequestType + +class SampleLogGenerationSubscriptionCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_subscription_create_attributes import SampleLogGenerationSubscriptionCreateAttributes + from datadog_api_client.v2.model.sample_log_generation_subscription_request_type import SampleLogGenerationSubscriptionRequestType + return { + "attributes": (SampleLogGenerationSubscriptionCreateAttributes,), + "type": (SampleLogGenerationSubscriptionRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SampleLogGenerationSubscriptionCreateAttributes, type: SampleLogGenerationSubscriptionRequestType, **kwargs): + """ + The subscription request body. + + :param attributes: The attributes for creating a sample log generation subscription. + :type attributes: SampleLogGenerationSubscriptionCreateAttributes + + :param type: The type of the resource. The value should always be ``subscription_requests``. + :type type: SampleLogGenerationSubscriptionRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/sample_log_generation_subscription_create_request.py b/datadog_api_client/v2/model/sample_log_generation_subscription_create_request.py new file mode 100644 index 0000000000..1fd97d836a --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscription_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_subscription_create_data import SampleLogGenerationSubscriptionCreateData + +class SampleLogGenerationSubscriptionCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_subscription_create_data import SampleLogGenerationSubscriptionCreateData + return { + "data": (SampleLogGenerationSubscriptionCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SampleLogGenerationSubscriptionCreateData, **kwargs): + """ + Request body to create a sample log generation subscription for a single content pack. + + :param data: The subscription request body. + :type data: SampleLogGenerationSubscriptionCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/sample_log_generation_subscription_data.py b/datadog_api_client/v2/model/sample_log_generation_subscription_data.py new file mode 100644 index 0000000000..0c599cadbf --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscription_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_subscription_attributes import SampleLogGenerationSubscriptionAttributes + from datadog_api_client.v2.model.sample_log_generation_subscription_resource_type import SampleLogGenerationSubscriptionResourceType + +class SampleLogGenerationSubscriptionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_subscription_attributes import SampleLogGenerationSubscriptionAttributes + from datadog_api_client.v2.model.sample_log_generation_subscription_resource_type import SampleLogGenerationSubscriptionResourceType + return { + "attributes": (SampleLogGenerationSubscriptionAttributes,), + "id": (str,), + "type": (SampleLogGenerationSubscriptionResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SampleLogGenerationSubscriptionAttributes, id: str, type: SampleLogGenerationSubscriptionResourceType, **kwargs): + """ + A sample log generation subscription. + + :param attributes: The attributes describing a sample log generation subscription. + :type attributes: SampleLogGenerationSubscriptionAttributes + + :param id: The unique identifier of the subscription. + :type id: str + + :param type: The type of the resource. The value should always be ``subscriptions``. + :type type: SampleLogGenerationSubscriptionResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/sample_log_generation_subscription_request_type.py b/datadog_api_client/v2/model/sample_log_generation_subscription_request_type.py new file mode 100644 index 0000000000..c341c2dba9 --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscription_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SampleLogGenerationSubscriptionRequestType(ModelSimple): + """ + The type of the resource. The value should always be `subscription_requests`. + + :param value: If omitted defaults to "subscription_requests". Must be one of ["subscription_requests"]. + :type value: str + """ + + allowed_values = { + "subscription_requests", + } + SUBSCRIPTION_REQUESTS: ClassVar["SampleLogGenerationSubscriptionRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SampleLogGenerationSubscriptionRequestType.SUBSCRIPTION_REQUESTS = SampleLogGenerationSubscriptionRequestType("subscription_requests") diff --git a/datadog_api_client/v2/model/sample_log_generation_subscription_resource_type.py b/datadog_api_client/v2/model/sample_log_generation_subscription_resource_type.py new file mode 100644 index 0000000000..530ee0086c --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscription_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SampleLogGenerationSubscriptionResourceType(ModelSimple): + """ + The type of the resource. The value should always be `subscriptions`. + + :param value: If omitted defaults to "subscriptions". Must be one of ["subscriptions"]. + :type value: str + """ + + allowed_values = { + "subscriptions", + } + SUBSCRIPTIONS: ClassVar["SampleLogGenerationSubscriptionResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SampleLogGenerationSubscriptionResourceType.SUBSCRIPTIONS = SampleLogGenerationSubscriptionResourceType("subscriptions") diff --git a/datadog_api_client/v2/model/sample_log_generation_subscription_response.py b/datadog_api_client/v2/model/sample_log_generation_subscription_response.py new file mode 100644 index 0000000000..7fbafc94ba --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscription_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_subscription_data import SampleLogGenerationSubscriptionData + +class SampleLogGenerationSubscriptionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_subscription_data import SampleLogGenerationSubscriptionData + return { + "data": (SampleLogGenerationSubscriptionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SampleLogGenerationSubscriptionData, **kwargs): + """ + Response containing a single sample log generation subscription. + + :param data: A sample log generation subscription. + :type data: SampleLogGenerationSubscriptionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/sample_log_generation_subscription_status.py b/datadog_api_client/v2/model/sample_log_generation_subscription_status.py new file mode 100644 index 0000000000..1f8e60d13e --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscription_status.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SampleLogGenerationSubscriptionStatus(ModelSimple): + """ + The status of the subscription. + + :param value: Must be one of ["subscribed", "renewed", "unsubscribed", "no_active_subscription", "not_available", "active", "expired"]. + :type value: str + """ + + allowed_values = { + "subscribed", + "renewed", + "unsubscribed", + "no_active_subscription", + "not_available", + "active", + "expired", + } + SUBSCRIBED: ClassVar["SampleLogGenerationSubscriptionStatus"] + RENEWED: ClassVar["SampleLogGenerationSubscriptionStatus"] + UNSUBSCRIBED: ClassVar["SampleLogGenerationSubscriptionStatus"] + NO_ACTIVE_SUBSCRIPTION: ClassVar["SampleLogGenerationSubscriptionStatus"] + NOT_AVAILABLE: ClassVar["SampleLogGenerationSubscriptionStatus"] + ACTIVE: ClassVar["SampleLogGenerationSubscriptionStatus"] + EXPIRED: ClassVar["SampleLogGenerationSubscriptionStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SampleLogGenerationSubscriptionStatus.SUBSCRIBED = SampleLogGenerationSubscriptionStatus("subscribed") +SampleLogGenerationSubscriptionStatus.RENEWED = SampleLogGenerationSubscriptionStatus("renewed") +SampleLogGenerationSubscriptionStatus.UNSUBSCRIBED = SampleLogGenerationSubscriptionStatus("unsubscribed") +SampleLogGenerationSubscriptionStatus.NO_ACTIVE_SUBSCRIPTION = SampleLogGenerationSubscriptionStatus("no_active_subscription") +SampleLogGenerationSubscriptionStatus.NOT_AVAILABLE = SampleLogGenerationSubscriptionStatus("not_available") +SampleLogGenerationSubscriptionStatus.ACTIVE = SampleLogGenerationSubscriptionStatus("active") +SampleLogGenerationSubscriptionStatus.EXPIRED = SampleLogGenerationSubscriptionStatus("expired") diff --git a/datadog_api_client/v2/model/sample_log_generation_subscriptions_response.py b/datadog_api_client/v2/model/sample_log_generation_subscriptions_response.py new file mode 100644 index 0000000000..8840e487fb --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscriptions_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sample_log_generation_subscription_data import SampleLogGenerationSubscriptionData + from datadog_api_client.v2.model.sample_log_generation_subscriptions_response_meta import SampleLogGenerationSubscriptionsResponseMeta + +class SampleLogGenerationSubscriptionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sample_log_generation_subscription_data import SampleLogGenerationSubscriptionData + from datadog_api_client.v2.model.sample_log_generation_subscriptions_response_meta import SampleLogGenerationSubscriptionsResponseMeta + return { + "data": ([SampleLogGenerationSubscriptionData],), + "meta": (SampleLogGenerationSubscriptionsResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[SampleLogGenerationSubscriptionData], meta: SampleLogGenerationSubscriptionsResponseMeta, **kwargs): + """ + Response containing a list of sample log generation subscriptions. + + :param data: The list of sample log generation subscriptions. + :type data: [SampleLogGenerationSubscriptionData] + + :param meta: Metadata returned alongside a list of sample log generation subscriptions. + :type meta: SampleLogGenerationSubscriptionsResponseMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/sample_log_generation_subscriptions_response_meta.py b/datadog_api_client/v2/model/sample_log_generation_subscriptions_response_meta.py new file mode 100644 index 0000000000..1421b5f0a1 --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscriptions_response_meta.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SampleLogGenerationSubscriptionsResponseMeta(ModelNormal): + validations = { + "total_subscriptions": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "total_subscriptions": (int,), + } + attribute_map = { + "total_subscriptions": "total_subscriptions", + } + + def __init__(self_, total_subscriptions: int, **kwargs): + """ + Metadata returned alongside a list of sample log generation subscriptions. + + :param total_subscriptions: The total number of subscriptions matching the request, irrespective of pagination. + :type total_subscriptions: int + """ + super().__init__(kwargs) + + + self_.total_subscriptions = total_subscriptions diff --git a/datadog_api_client/v2/model/sample_log_generation_subscriptions_status_filter.py b/datadog_api_client/v2/model/sample_log_generation_subscriptions_status_filter.py new file mode 100644 index 0000000000..d6c3a28c2c --- /dev/null +++ b/datadog_api_client/v2/model/sample_log_generation_subscriptions_status_filter.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SampleLogGenerationSubscriptionsStatusFilter(ModelSimple): + """ + Filter that controls whether to return only active subscriptions or every subscription on record. + + :param value: If omitted defaults to "active". Must be one of ["active", "all"]. + :type value: str + """ + + allowed_values = { + "active", + "all", + } + ACTIVE: ClassVar["SampleLogGenerationSubscriptionsStatusFilter"] + ALL: ClassVar["SampleLogGenerationSubscriptionsStatusFilter"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SampleLogGenerationSubscriptionsStatusFilter.ACTIVE = SampleLogGenerationSubscriptionsStatusFilter("active") +SampleLogGenerationSubscriptionsStatusFilter.ALL = SampleLogGenerationSubscriptionsStatusFilter("all") diff --git a/datadog_api_client/v2/model/sast_ruleset_data.py b/datadog_api_client/v2/model/sast_ruleset_data.py new file mode 100644 index 0000000000..a55feec67d --- /dev/null +++ b/datadog_api_client/v2/model/sast_ruleset_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sast_ruleset_data_attributes import SastRulesetDataAttributes + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_data_type import GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType + +class SastRulesetData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sast_ruleset_data_attributes import SastRulesetDataAttributes + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_data_type import GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType + return { + "attributes": (SastRulesetDataAttributes,), + "id": (str,), + "type": (GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SastRulesetDataAttributes, id: str, type: GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType, **kwargs): + """ + The primary data object representing a SAST ruleset. + + :param attributes: The attributes of a SAST ruleset, including its name, description, and rules. + :type attributes: SastRulesetDataAttributes + + :param id: The unique identifier of the ruleset resource. + :type id: str + + :param type: Rulesets resource type. + :type type: GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/sast_ruleset_data_attributes.py b/datadog_api_client/v2/model/sast_ruleset_data_attributes.py new file mode 100644 index 0000000000..4e69088d2c --- /dev/null +++ b/datadog_api_client/v2/model/sast_ruleset_data_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems + +class SastRulesetDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems + return { + "description": (str,), + "name": (str,), + "rules": ([GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems],), + "short_description": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + "rules": "rules", + "short_description": "short_description", + } + + def __init__(self_, description: str, name: str, rules: List[GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems], short_description: str, **kwargs): + """ + The attributes of a SAST ruleset, including its name, description, and rules. + + :param description: A detailed description of the ruleset's purpose and the types of issues it targets. + :type description: str + + :param name: The unique name of the ruleset. + :type name: str + + :param rules: The list of static analysis rules included in this ruleset. + :type rules: [GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems] + + :param short_description: A brief summary of the ruleset, suitable for display in listings. + :type short_description: str + """ + super().__init__(kwargs) + + + self_.description = description + self_.name = name + self_.rules = rules + self_.short_description = short_description diff --git a/datadog_api_client/v2/model/sast_ruleset_response.py b/datadog_api_client/v2/model/sast_ruleset_response.py new file mode 100644 index 0000000000..b4030d26cd --- /dev/null +++ b/datadog_api_client/v2/model/sast_ruleset_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sast_ruleset_data import SastRulesetData + +class SastRulesetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sast_ruleset_data import SastRulesetData + return { + "data": (SastRulesetData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SastRulesetData, **kwargs): + """ + The response payload containing a single SAST ruleset and its rules. + + :param data: The primary data object representing a SAST ruleset. + :type data: SastRulesetData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/sast_rulesets_response.py b/datadog_api_client/v2/model/sast_rulesets_response.py new file mode 100644 index 0000000000..a7800f411a --- /dev/null +++ b/datadog_api_client/v2/model/sast_rulesets_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sast_ruleset_data import SastRulesetData + +class SastRulesetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sast_ruleset_data import SastRulesetData + return { + "data": ([SastRulesetData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SastRulesetData], **kwargs): + """ + The response payload containing a list of SAST rulesets and their rules. + + :param data: The list of SAST rulesets returned in the response. + :type data: [SastRulesetData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/sbom.py b/datadog_api_client/v2/model/sbom.py new file mode 100644 index 0000000000..703faf07b3 --- /dev/null +++ b/datadog_api_client/v2/model/sbom.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sbom_attributes import SBOMAttributes + from datadog_api_client.v2.model.sbom_type import SBOMType + +class SBOM(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sbom_attributes import SBOMAttributes + from datadog_api_client.v2.model.sbom_type import SBOMType + return { + "attributes": (SBOMAttributes,), + "id": (str,), + "type": (SBOMType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SBOMAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SBOMType, UnsetType]=unset, **kwargs): + """ + A single SBOM + + :param attributes: The JSON:API attributes of the SBOM. + :type attributes: SBOMAttributes, optional + + :param id: The unique ID for this SBOM (it is equivalent to the ``asset_name`` or ``asset_name@repo_digest`` (Image) + :type id: str, optional + + :param type: The JSON:API type. + :type type: SBOMType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sbom_attributes.py b/datadog_api_client/v2/model/sbom_attributes.py new file mode 100644 index 0000000000..2bfc789b7a --- /dev/null +++ b/datadog_api_client/v2/model/sbom_attributes.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sbom_component import SBOMComponent + from datadog_api_client.v2.model.sbom_component_dependency import SBOMComponentDependency + from datadog_api_client.v2.model.sbom_metadata import SBOMMetadata + from datadog_api_client.v2.model.spec_version import SpecVersion + +class SBOMAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sbom_component import SBOMComponent + from datadog_api_client.v2.model.sbom_component_dependency import SBOMComponentDependency + from datadog_api_client.v2.model.sbom_metadata import SBOMMetadata + from datadog_api_client.v2.model.spec_version import SpecVersion + return { + "bom_format": (str,), + "components": ([SBOMComponent],), + "dependencies": ([SBOMComponentDependency],), + "metadata": (SBOMMetadata,), + "serial_number": (str,), + "spec_version": (SpecVersion,), + "version": (int,), + } + attribute_map = { + "bom_format": "bomFormat", + "components": "components", + "dependencies": "dependencies", + "metadata": "metadata", + "serial_number": "serialNumber", + "spec_version": "specVersion", + "version": "version", + } + + def __init__(self_, bom_format: str, components: List[SBOMComponent], dependencies: List[SBOMComponentDependency], metadata: SBOMMetadata, serial_number: str, spec_version: SpecVersion, version: int, **kwargs): + """ + The JSON:API attributes of the SBOM. + + :param bom_format: Specifies the format of the BOM. This helps to identify the file as CycloneDX since BOM do not have a filename convention nor does JSON schema support namespaces. This value MUST be ``CycloneDX``. + :type bom_format: str + + :param components: A list of software and hardware components. + :type components: [SBOMComponent] + + :param dependencies: List of dependencies between components of the SBOM. + :type dependencies: [SBOMComponentDependency] + + :param metadata: Provides additional information about a BOM. + :type metadata: SBOMMetadata + + :param serial_number: Every BOM generated has a unique serial number, even if the contents of the BOM have not changed overt time. The serial number follows `RFC-4122 `_ + :type serial_number: str + + :param spec_version: The version of the CycloneDX specification a BOM conforms to. + :type spec_version: SpecVersion + + :param version: It increments when a BOM is modified. The default value is 1. + :type version: int + """ + super().__init__(kwargs) + + + self_.bom_format = bom_format + self_.components = components + self_.dependencies = dependencies + self_.metadata = metadata + self_.serial_number = serial_number + self_.spec_version = spec_version + self_.version = version diff --git a/datadog_api_client/v2/model/sbom_component.py b/datadog_api_client/v2/model/sbom_component.py new file mode 100644 index 0000000000..40d3881ed1 --- /dev/null +++ b/datadog_api_client/v2/model/sbom_component.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sbom_component_license import SBOMComponentLicense + from datadog_api_client.v2.model.sbom_component_property import SBOMComponentProperty + from datadog_api_client.v2.model.sbom_component_supplier import SBOMComponentSupplier + from datadog_api_client.v2.model.sbom_component_type import SBOMComponentType + +class SBOMComponent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sbom_component_license import SBOMComponentLicense + from datadog_api_client.v2.model.sbom_component_property import SBOMComponentProperty + from datadog_api_client.v2.model.sbom_component_supplier import SBOMComponentSupplier + from datadog_api_client.v2.model.sbom_component_type import SBOMComponentType + return { + "bom_ref": (str,), + "licenses": ([SBOMComponentLicense],), + "name": (str,), + "properties": ([SBOMComponentProperty],), + "purl": (str,), + "supplier": (SBOMComponentSupplier,), + "type": (SBOMComponentType,), + "version": (str,), + } + attribute_map = { + "bom_ref": "bom-ref", + "licenses": "licenses", + "name": "name", + "properties": "properties", + "purl": "purl", + "supplier": "supplier", + "type": "type", + "version": "version", + } + + def __init__(self_, name: str, supplier: SBOMComponentSupplier, type: SBOMComponentType, version: str, bom_ref: Union[str, UnsetType]=unset, licenses: Union[List[SBOMComponentLicense], UnsetType]=unset, properties: Union[List[SBOMComponentProperty], UnsetType]=unset, purl: Union[str, UnsetType]=unset, **kwargs): + """ + Software or hardware component. + + :param bom_ref: An optional identifier that can be used to reference the component elsewhere in the BOM. + :type bom_ref: str, optional + + :param licenses: The software licenses of the SBOM component. + :type licenses: [SBOMComponentLicense], optional + + :param name: The name of the component. This will often be a shortened, single name of the component. + :type name: str + + :param properties: The custom properties of the component of the SBOM. + :type properties: [SBOMComponentProperty], optional + + :param purl: Specifies the package-url (purl). The purl, if specified, MUST be valid and conform to the `specification `_. + :type purl: str, optional + + :param supplier: The supplier of the component. + :type supplier: SBOMComponentSupplier + + :param type: The SBOM component type + :type type: SBOMComponentType + + :param version: The component version. + :type version: str + """ + if bom_ref is not unset: + kwargs["bom_ref"] = bom_ref + if licenses is not unset: + kwargs["licenses"] = licenses + if properties is not unset: + kwargs["properties"] = properties + if purl is not unset: + kwargs["purl"] = purl + super().__init__(kwargs) + + + self_.name = name + self_.supplier = supplier + self_.type = type + self_.version = version diff --git a/datadog_api_client/v2/model/sbom_component_dependency.py b/datadog_api_client/v2/model/sbom_component_dependency.py new file mode 100644 index 0000000000..1902463bfa --- /dev/null +++ b/datadog_api_client/v2/model/sbom_component_dependency.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SBOMComponentDependency(ModelNormal): + @cached_property + def openapi_types(_): + return { + "depends_on": ([str],), + "ref": (str,), + } + attribute_map = { + "depends_on": "dependsOn", + "ref": "ref", + } + + def __init__(self_, depends_on: Union[List[str], UnsetType]=unset, ref: Union[str, UnsetType]=unset, **kwargs): + """ + The dependencies of a component of the SBOM. + + :param depends_on: The components that are dependencies of the ref component. + :type depends_on: [str], optional + + :param ref: The identifier for the related component. + :type ref: str, optional + """ + if depends_on is not unset: + kwargs["depends_on"] = depends_on + if ref is not unset: + kwargs["ref"] = ref + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sbom_component_license.py b/datadog_api_client/v2/model/sbom_component_license.py new file mode 100644 index 0000000000..ab6b31fecb --- /dev/null +++ b/datadog_api_client/v2/model/sbom_component_license.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sbom_component_license_license import SBOMComponentLicenseLicense + +class SBOMComponentLicense(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sbom_component_license_license import SBOMComponentLicenseLicense + return { + "license": (SBOMComponentLicenseLicense,), + } + attribute_map = { + "license": "license", + } + + def __init__(self_, license: SBOMComponentLicenseLicense, **kwargs): + """ + The software license of the component of the SBOM. + + :param license: The software license of the component of the SBOM. + :type license: SBOMComponentLicenseLicense + """ + super().__init__(kwargs) + + + self_.license = license diff --git a/datadog_api_client/v2/model/sbom_component_license_license.py b/datadog_api_client/v2/model/sbom_component_license_license.py new file mode 100644 index 0000000000..322d5b9774 --- /dev/null +++ b/datadog_api_client/v2/model/sbom_component_license_license.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SBOMComponentLicenseLicense(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: str, **kwargs): + """ + The software license of the component of the SBOM. + + :param name: The name of the software license of the component of the SBOM. + :type name: str + """ + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/sbom_component_license_type.py b/datadog_api_client/v2/model/sbom_component_license_type.py new file mode 100644 index 0000000000..3604f15e55 --- /dev/null +++ b/datadog_api_client/v2/model/sbom_component_license_type.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SBOMComponentLicenseType(ModelSimple): + """ + The SBOM component license type. + + :param value: Must be one of ["network_strong_copyleft", "non_standard_copyleft", "other_non_free", "other_non_standard", "permissive", "public_domain", "strong_copyleft", "weak_copyleft"]. + :type value: str + """ + + allowed_values = { + "network_strong_copyleft", + "non_standard_copyleft", + "other_non_free", + "other_non_standard", + "permissive", + "public_domain", + "strong_copyleft", + "weak_copyleft", + } + NETWORK_STRONG_COPYLEFT: ClassVar["SBOMComponentLicenseType"] + NON_STANDARD_COPYLEFT: ClassVar["SBOMComponentLicenseType"] + OTHER_NON_FREE: ClassVar["SBOMComponentLicenseType"] + OTHER_NON_STANDARD: ClassVar["SBOMComponentLicenseType"] + PERMISSIVE: ClassVar["SBOMComponentLicenseType"] + PUBLIC_DOMAIN: ClassVar["SBOMComponentLicenseType"] + STRONG_COPYLEFT: ClassVar["SBOMComponentLicenseType"] + WEAK_COPYLEFT: ClassVar["SBOMComponentLicenseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SBOMComponentLicenseType.NETWORK_STRONG_COPYLEFT = SBOMComponentLicenseType("network_strong_copyleft") +SBOMComponentLicenseType.NON_STANDARD_COPYLEFT = SBOMComponentLicenseType("non_standard_copyleft") +SBOMComponentLicenseType.OTHER_NON_FREE = SBOMComponentLicenseType("other_non_free") +SBOMComponentLicenseType.OTHER_NON_STANDARD = SBOMComponentLicenseType("other_non_standard") +SBOMComponentLicenseType.PERMISSIVE = SBOMComponentLicenseType("permissive") +SBOMComponentLicenseType.PUBLIC_DOMAIN = SBOMComponentLicenseType("public_domain") +SBOMComponentLicenseType.STRONG_COPYLEFT = SBOMComponentLicenseType("strong_copyleft") +SBOMComponentLicenseType.WEAK_COPYLEFT = SBOMComponentLicenseType("weak_copyleft") diff --git a/datadog_api_client/v2/model/sbom_component_property.py b/datadog_api_client/v2/model/sbom_component_property.py new file mode 100644 index 0000000000..af02654314 --- /dev/null +++ b/datadog_api_client/v2/model/sbom_component_property.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SBOMComponentProperty(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, value: str, **kwargs): + """ + The custom property of the component of the SBOM. + + :param name: The name of the custom property of the component of the SBOM. + :type name: str + + :param value: The value of the custom property of the component of the SBOM. + :type value: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/sbom_component_supplier.py b/datadog_api_client/v2/model/sbom_component_supplier.py new file mode 100644 index 0000000000..fee20117c1 --- /dev/null +++ b/datadog_api_client/v2/model/sbom_component_supplier.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SBOMComponentSupplier(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: str, **kwargs): + """ + The supplier of the component. + + :param name: Identifier of the supplier of the component. + :type name: str + """ + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/sbom_component_type.py b/datadog_api_client/v2/model/sbom_component_type.py new file mode 100644 index 0000000000..44aa64c65c --- /dev/null +++ b/datadog_api_client/v2/model/sbom_component_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SBOMComponentType(ModelSimple): + """ + The SBOM component type + + :param value: Must be one of ["application", "container", "data", "device", "device-driver", "file", "firmware", "framework", "library", "machine-learning-model", "operating-system", "platform"]. + :type value: str + """ + + allowed_values = { + "application", + "container", + "data", + "device", + "device-driver", + "file", + "firmware", + "framework", + "library", + "machine-learning-model", + "operating-system", + "platform", + } + APPLICATION: ClassVar["SBOMComponentType"] + CONTAINER: ClassVar["SBOMComponentType"] + DATA: ClassVar["SBOMComponentType"] + DEVICE: ClassVar["SBOMComponentType"] + DEVICE_DRIVER: ClassVar["SBOMComponentType"] + FILE: ClassVar["SBOMComponentType"] + FIRMWARE: ClassVar["SBOMComponentType"] + FRAMEWORK: ClassVar["SBOMComponentType"] + LIBRARY: ClassVar["SBOMComponentType"] + MACHINE_LEARNING_MODEL: ClassVar["SBOMComponentType"] + OPERATING_SYSTEM: ClassVar["SBOMComponentType"] + PLATFORM: ClassVar["SBOMComponentType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SBOMComponentType.APPLICATION = SBOMComponentType("application") +SBOMComponentType.CONTAINER = SBOMComponentType("container") +SBOMComponentType.DATA = SBOMComponentType("data") +SBOMComponentType.DEVICE = SBOMComponentType("device") +SBOMComponentType.DEVICE_DRIVER = SBOMComponentType("device-driver") +SBOMComponentType.FILE = SBOMComponentType("file") +SBOMComponentType.FIRMWARE = SBOMComponentType("firmware") +SBOMComponentType.FRAMEWORK = SBOMComponentType("framework") +SBOMComponentType.LIBRARY = SBOMComponentType("library") +SBOMComponentType.MACHINE_LEARNING_MODEL = SBOMComponentType("machine-learning-model") +SBOMComponentType.OPERATING_SYSTEM = SBOMComponentType("operating-system") +SBOMComponentType.PLATFORM = SBOMComponentType("platform") diff --git a/datadog_api_client/v2/model/sbom_format.py b/datadog_api_client/v2/model/sbom_format.py new file mode 100644 index 0000000000..9ab74764b1 --- /dev/null +++ b/datadog_api_client/v2/model/sbom_format.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SBOMFormat(ModelSimple): + """ + The SBOM standard + + :param value: Must be one of ["CycloneDX", "SPDX"]. + :type value: str + """ + + allowed_values = { + "CycloneDX", + "SPDX", + } + CYCLONEDX: ClassVar["SBOMFormat"] + SPDX: ClassVar["SBOMFormat"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SBOMFormat.CYCLONEDX = SBOMFormat("CycloneDX") +SBOMFormat.SPDX = SBOMFormat("SPDX") diff --git a/datadog_api_client/v2/model/sbom_metadata.py b/datadog_api_client/v2/model/sbom_metadata.py new file mode 100644 index 0000000000..a9649f17b1 --- /dev/null +++ b/datadog_api_client/v2/model/sbom_metadata.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sbom_metadata_author import SBOMMetadataAuthor + from datadog_api_client.v2.model.sbom_metadata_component import SBOMMetadataComponent + +class SBOMMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sbom_metadata_author import SBOMMetadataAuthor + from datadog_api_client.v2.model.sbom_metadata_component import SBOMMetadataComponent + return { + "authors": ([SBOMMetadataAuthor],), + "component": (SBOMMetadataComponent,), + "timestamp": (str,), + } + attribute_map = { + "authors": "authors", + "component": "component", + "timestamp": "timestamp", + } + + def __init__(self_, authors: Union[List[SBOMMetadataAuthor], UnsetType]=unset, component: Union[SBOMMetadataComponent, UnsetType]=unset, timestamp: Union[str, UnsetType]=unset, **kwargs): + """ + Provides additional information about a BOM. + + :param authors: List of authors of the SBOM. + :type authors: [SBOMMetadataAuthor], optional + + :param component: The component that the BOM describes. + :type component: SBOMMetadataComponent, optional + + :param timestamp: The timestamp of the SBOM creation. + :type timestamp: str, optional + """ + if authors is not unset: + kwargs["authors"] = authors + if component is not unset: + kwargs["component"] = component + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sbom_metadata_author.py b/datadog_api_client/v2/model/sbom_metadata_author.py new file mode 100644 index 0000000000..5c0b7d18bf --- /dev/null +++ b/datadog_api_client/v2/model/sbom_metadata_author.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SBOMMetadataAuthor(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Author of the SBOM. + + :param name: The identifier of the Author of the SBOM. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sbom_metadata_component.py b/datadog_api_client/v2/model/sbom_metadata_component.py new file mode 100644 index 0000000000..f294b755b1 --- /dev/null +++ b/datadog_api_client/v2/model/sbom_metadata_component.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SBOMMetadataComponent(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "type": (str,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The component that the BOM describes. + + :param name: The name of the component. This will often be a shortened, single name of the component. + :type name: str, optional + + :param type: Specifies the type of the component. + :type type: str, optional + """ + if name is not unset: + kwargs["name"] = name + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sbom_type.py b/datadog_api_client/v2/model/sbom_type.py new file mode 100644 index 0000000000..bd02152971 --- /dev/null +++ b/datadog_api_client/v2/model/sbom_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SBOMType(ModelSimple): + """ + The JSON:API type. + + :param value: If omitted defaults to "sboms". Must be one of ["sboms"]. + :type value: str + """ + + allowed_values = { + "sboms", + } + SBOMS: ClassVar["SBOMType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SBOMType.SBOMS = SBOMType("sboms") diff --git a/datadog_api_client/v2/model/sca_request.py b/datadog_api_client/v2/model/sca_request.py new file mode 100644 index 0000000000..d122dea6c9 --- /dev/null +++ b/datadog_api_client/v2/model/sca_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sca_request_data import ScaRequestData + +class ScaRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sca_request_data import ScaRequestData + return { + "data": (ScaRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ScaRequestData, UnsetType]=unset, **kwargs): + """ + The top-level request object for submitting a Software Composition Analysis (SCA) scan result. + + :param data: The data object in an SCA request, containing the dependency graph attributes and request type. + :type data: ScaRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data.py b/datadog_api_client/v2/model/sca_request_data.py new file mode 100644 index 0000000000..49fbd52b45 --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sca_request_data_attributes import ScaRequestDataAttributes + from datadog_api_client.v2.model.sca_request_data_type import ScaRequestDataType + +class ScaRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sca_request_data_attributes import ScaRequestDataAttributes + from datadog_api_client.v2.model.sca_request_data_type import ScaRequestDataType + return { + "attributes": (ScaRequestDataAttributes,), + "id": (str,), + "type": (ScaRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ScaRequestDataType, attributes: Union[ScaRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object in an SCA request, containing the dependency graph attributes and request type. + + :param attributes: The attributes of an SCA request, containing dependency graph data, vulnerability information, and repository context. + :type attributes: ScaRequestDataAttributes, optional + + :param id: An optional identifier for this SCA request data object. + :type id: str, optional + + :param type: The type identifier for SCA dependency analysis requests. + :type type: ScaRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/sca_request_data_attributes.py b/datadog_api_client/v2/model/sca_request_data_attributes.py new file mode 100644 index 0000000000..2b2776bf79 --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sca_request_data_attributes_commit import ScaRequestDataAttributesCommit + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items import ScaRequestDataAttributesDependenciesItems + from datadog_api_client.v2.model.sca_request_data_attributes_files_items import ScaRequestDataAttributesFilesItems + from datadog_api_client.v2.model.sca_request_data_attributes_relations_items import ScaRequestDataAttributesRelationsItems + from datadog_api_client.v2.model.sca_request_data_attributes_repository import ScaRequestDataAttributesRepository + from datadog_api_client.v2.model.sca_request_data_attributes_vulnerabilities_items import ScaRequestDataAttributesVulnerabilitiesItems + +class ScaRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sca_request_data_attributes_commit import ScaRequestDataAttributesCommit + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items import ScaRequestDataAttributesDependenciesItems + from datadog_api_client.v2.model.sca_request_data_attributes_files_items import ScaRequestDataAttributesFilesItems + from datadog_api_client.v2.model.sca_request_data_attributes_relations_items import ScaRequestDataAttributesRelationsItems + from datadog_api_client.v2.model.sca_request_data_attributes_repository import ScaRequestDataAttributesRepository + from datadog_api_client.v2.model.sca_request_data_attributes_vulnerabilities_items import ScaRequestDataAttributesVulnerabilitiesItems + return { + "commit": (ScaRequestDataAttributesCommit,), + "dependencies": ([ScaRequestDataAttributesDependenciesItems],), + "env": (str,), + "files": ([ScaRequestDataAttributesFilesItems],), + "relations": ([ScaRequestDataAttributesRelationsItems],), + "repository": (ScaRequestDataAttributesRepository,), + "service": (str,), + "tags": ({str: (str,)},), + "vulnerabilities": ([ScaRequestDataAttributesVulnerabilitiesItems],), + } + attribute_map = { + "commit": "commit", + "dependencies": "dependencies", + "env": "env", + "files": "files", + "relations": "relations", + "repository": "repository", + "service": "service", + "tags": "tags", + "vulnerabilities": "vulnerabilities", + } + + def __init__(self_, commit: Union[ScaRequestDataAttributesCommit, UnsetType]=unset, dependencies: Union[List[ScaRequestDataAttributesDependenciesItems], UnsetType]=unset, env: Union[str, UnsetType]=unset, files: Union[List[ScaRequestDataAttributesFilesItems], UnsetType]=unset, relations: Union[List[ScaRequestDataAttributesRelationsItems], UnsetType]=unset, repository: Union[ScaRequestDataAttributesRepository, UnsetType]=unset, service: Union[str, UnsetType]=unset, tags: Union[Dict[str, str], UnsetType]=unset, vulnerabilities: Union[List[ScaRequestDataAttributesVulnerabilitiesItems], UnsetType]=unset, **kwargs): + """ + The attributes of an SCA request, containing dependency graph data, vulnerability information, and repository context. + + :param commit: Metadata about the commit associated with the SCA scan, including author, committer, and branch information. + :type commit: ScaRequestDataAttributesCommit, optional + + :param dependencies: The list of dependencies discovered in the repository. + :type dependencies: [ScaRequestDataAttributesDependenciesItems], optional + + :param env: The environment context in which the SCA scan was performed (e.g., production, staging). + :type env: str, optional + + :param files: The list of dependency manifest files found in the repository. + :type files: [ScaRequestDataAttributesFilesItems], optional + + :param relations: The dependency relations describing the inter-component dependency graph. + :type relations: [ScaRequestDataAttributesRelationsItems], optional + + :param repository: Information about the source code repository being analyzed. + :type repository: ScaRequestDataAttributesRepository, optional + + :param service: The name of the service or application being analyzed. + :type service: str, optional + + :param tags: A map of key-value tags providing additional metadata for the SCA scan. + :type tags: {str: (str,)}, optional + + :param vulnerabilities: The list of vulnerabilities identified in the dependency graph. + :type vulnerabilities: [ScaRequestDataAttributesVulnerabilitiesItems], optional + """ + if commit is not unset: + kwargs["commit"] = commit + if dependencies is not unset: + kwargs["dependencies"] = dependencies + if env is not unset: + kwargs["env"] = env + if files is not unset: + kwargs["files"] = files + if relations is not unset: + kwargs["relations"] = relations + if repository is not unset: + kwargs["repository"] = repository + if service is not unset: + kwargs["service"] = service + if tags is not unset: + kwargs["tags"] = tags + if vulnerabilities is not unset: + kwargs["vulnerabilities"] = vulnerabilities + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_commit.py b/datadog_api_client/v2/model/sca_request_data_attributes_commit.py new file mode 100644 index 0000000000..d1b105941e --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_commit.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScaRequestDataAttributesCommit(ModelNormal): + @cached_property + def openapi_types(_): + return { + "author_date": (str,), + "author_email": (str,), + "author_name": (str,), + "branch": (str,), + "committer_email": (str,), + "committer_name": (str,), + "sha": (str,), + } + attribute_map = { + "author_date": "author_date", + "author_email": "author_email", + "author_name": "author_name", + "branch": "branch", + "committer_email": "committer_email", + "committer_name": "committer_name", + "sha": "sha", + } + + def __init__(self_, author_date: Union[str, UnsetType]=unset, author_email: Union[str, UnsetType]=unset, author_name: Union[str, UnsetType]=unset, branch: Union[str, UnsetType]=unset, committer_email: Union[str, UnsetType]=unset, committer_name: Union[str, UnsetType]=unset, sha: Union[str, UnsetType]=unset, **kwargs): + """ + Metadata about the commit associated with the SCA scan, including author, committer, and branch information. + + :param author_date: The date when the commit was authored. + :type author_date: str, optional + + :param author_email: The email address of the commit author. + :type author_email: str, optional + + :param author_name: The full name of the commit author. + :type author_name: str, optional + + :param branch: The branch name on which the commit was made. + :type branch: str, optional + + :param committer_email: The email address of the person who committed the change. + :type committer_email: str, optional + + :param committer_name: The full name of the person who committed the change. + :type committer_name: str, optional + + :param sha: The SHA hash uniquely identifying the commit. + :type sha: str, optional + """ + if author_date is not unset: + kwargs["author_date"] = author_date + if author_email is not unset: + kwargs["author_email"] = author_email + if author_name is not unset: + kwargs["author_name"] = author_name + if branch is not unset: + kwargs["branch"] = branch + if committer_email is not unset: + kwargs["committer_email"] = committer_email + if committer_name is not unset: + kwargs["committer_name"] = committer_name + if sha is not unset: + kwargs["sha"] = sha + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items.py b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items.py new file mode 100644 index 0000000000..ef39a4000c --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_locations_items import ScaRequestDataAttributesDependenciesItemsLocationsItems + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_reachable_symbol_properties_items import ScaRequestDataAttributesDependenciesItemsReachableSymbolPropertiesItems + +class ScaRequestDataAttributesDependenciesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_locations_items import ScaRequestDataAttributesDependenciesItemsLocationsItems + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_reachable_symbol_properties_items import ScaRequestDataAttributesDependenciesItemsReachableSymbolPropertiesItems + return { + "exclusions": ([str],), + "group": (str,), + "is_dev": (bool,), + "is_direct": (bool,), + "language": (str,), + "locations": ([ScaRequestDataAttributesDependenciesItemsLocationsItems],), + "name": (str,), + "package_manager": (str,), + "purl": (str,), + "reachable_symbol_properties": ([ScaRequestDataAttributesDependenciesItemsReachableSymbolPropertiesItems],), + "version": (str,), + } + attribute_map = { + "exclusions": "exclusions", + "group": "group", + "is_dev": "is_dev", + "is_direct": "is_direct", + "language": "language", + "locations": "locations", + "name": "name", + "package_manager": "package_manager", + "purl": "purl", + "reachable_symbol_properties": "reachable_symbol_properties", + "version": "version", + } + + def __init__(self_, exclusions: Union[List[str], UnsetType]=unset, group: Union[str, UnsetType]=unset, is_dev: Union[bool, UnsetType]=unset, is_direct: Union[bool, UnsetType]=unset, language: Union[str, UnsetType]=unset, locations: Union[List[ScaRequestDataAttributesDependenciesItemsLocationsItems], UnsetType]=unset, name: Union[str, UnsetType]=unset, package_manager: Union[str, UnsetType]=unset, purl: Union[str, UnsetType]=unset, reachable_symbol_properties: Union[List[ScaRequestDataAttributesDependenciesItemsReachableSymbolPropertiesItems], UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + A dependency found in the repository, including its identity, location, and reachability metadata. + + :param exclusions: A list of patterns or identifiers that should be excluded from analysis for this dependency. + :type exclusions: [str], optional + + :param group: The group or organization namespace of the dependency (e.g., Maven group ID). + :type group: str, optional + + :param is_dev: Indicates whether this is a development-only dependency not used in production. + :type is_dev: bool, optional + + :param is_direct: Indicates whether this is a direct dependency (as opposed to a transitive one). + :type is_direct: bool, optional + + :param language: The programming language ecosystem of this dependency (e.g., java, python, javascript). + :type language: str, optional + + :param locations: The list of source file locations where this dependency is declared. + :type locations: [ScaRequestDataAttributesDependenciesItemsLocationsItems], optional + + :param name: The name of the dependency package. + :type name: str, optional + + :param package_manager: The package manager responsible for this dependency (e.g., maven, pip, npm). + :type package_manager: str, optional + + :param purl: The Package URL (PURL) uniquely identifying this dependency. + :type purl: str, optional + + :param reachable_symbol_properties: Properties describing symbols from this dependency that are reachable in the application code. + :type reachable_symbol_properties: [ScaRequestDataAttributesDependenciesItemsReachableSymbolPropertiesItems], optional + + :param version: The version of the dependency. + :type version: str, optional + """ + if exclusions is not unset: + kwargs["exclusions"] = exclusions + if group is not unset: + kwargs["group"] = group + if is_dev is not unset: + kwargs["is_dev"] = is_dev + if is_direct is not unset: + kwargs["is_direct"] = is_direct + if language is not unset: + kwargs["language"] = language + if locations is not unset: + kwargs["locations"] = locations + if name is not unset: + kwargs["name"] = name + if package_manager is not unset: + kwargs["package_manager"] = package_manager + if purl is not unset: + kwargs["purl"] = purl + if reachable_symbol_properties is not unset: + kwargs["reachable_symbol_properties"] = reachable_symbol_properties + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_locations_items.py b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_locations_items.py new file mode 100644 index 0000000000..690864ad05 --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_locations_items.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_locations_items_file_position import ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition + +class ScaRequestDataAttributesDependenciesItemsLocationsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_locations_items_file_position import ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition + return { + "block": (ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition,), + "name": (ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition,), + "namespace": (ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition,), + "version": (ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition,), + } + attribute_map = { + "block": "block", + "name": "name", + "namespace": "namespace", + "version": "version", + } + + def __init__(self_, block: Union[ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition, UnsetType]=unset, name: Union[ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition, UnsetType]=unset, namespace: Union[ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition, UnsetType]=unset, version: Union[ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition, UnsetType]=unset, **kwargs): + """ + The source code location where a dependency is declared, including block, name, namespace, and version positions within the file. + + :param block: A range within a file defined by a start and end position, along with the file name. + :type block: ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition, optional + + :param name: A range within a file defined by a start and end position, along with the file name. + :type name: ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition, optional + + :param namespace: A range within a file defined by a start and end position, along with the file name. + :type namespace: ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition, optional + + :param version: A range within a file defined by a start and end position, along with the file name. + :type version: ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition, optional + """ + if block is not unset: + kwargs["block"] = block + if name is not unset: + kwargs["name"] = name + if namespace is not unset: + kwargs["namespace"] = namespace + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_locations_items_file_position.py b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_locations_items_file_position.py new file mode 100644 index 0000000000..fbe9c9a37d --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_locations_items_file_position.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_locations_items_position import ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition + +class ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_locations_items_position import ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition + return { + "end": (ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition,), + "file_name": (str,), + "start": (ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition,), + } + attribute_map = { + "end": "end", + "file_name": "file_name", + "start": "start", + } + + def __init__(self_, end: Union[ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition, UnsetType]=unset, file_name: Union[str, UnsetType]=unset, start: Union[ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition, UnsetType]=unset, **kwargs): + """ + A range within a file defined by a start and end position, along with the file name. + + :param end: A specific position (line and column) within a source file. + :type end: ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition, optional + + :param file_name: The name or path of the file containing this location. + :type file_name: str, optional + + :param start: A specific position (line and column) within a source file. + :type start: ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition, optional + """ + if end is not unset: + kwargs["end"] = end + if file_name is not unset: + kwargs["file_name"] = file_name + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_locations_items_position.py b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_locations_items_position.py new file mode 100644 index 0000000000..69ca6ddf1a --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_locations_items_position.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition(ModelNormal): + validations = { + "col": { + "inclusive_maximum": 2147483647, + }, + "line": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "col": (int,), + "line": (int,), + } + attribute_map = { + "col": "col", + "line": "line", + } + + def __init__(self_, col: Union[int, UnsetType]=unset, line: Union[int, UnsetType]=unset, **kwargs): + """ + A specific position (line and column) within a source file. + + :param col: The column number of the position within the line. + :type col: int, optional + + :param line: The line number of the position within the file. + :type line: int, optional + """ + if col is not unset: + kwargs["col"] = col + if line is not unset: + kwargs["line"] = line + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_reachable_symbol_properties_items.py b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_reachable_symbol_properties_items.py new file mode 100644 index 0000000000..0da149ae64 --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_dependencies_items_reachable_symbol_properties_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScaRequestDataAttributesDependenciesItemsReachableSymbolPropertiesItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + A key-value property describing a reachable symbol within a dependency. + + :param name: The name of the reachable symbol property. + :type name: str, optional + + :param value: The value of the reachable symbol property. + :type value: str, optional + """ + if name is not unset: + kwargs["name"] = name + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_files_items.py b/datadog_api_client/v2/model/sca_request_data_attributes_files_items.py new file mode 100644 index 0000000000..a2d00bde45 --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_files_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScaRequestDataAttributesFilesItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "purl": (str,), + } + attribute_map = { + "name": "name", + "purl": "purl", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, purl: Union[str, UnsetType]=unset, **kwargs): + """ + A file entry in the repository associated with a dependency manifest. + + :param name: The name or path of the file within the repository. + :type name: str, optional + + :param purl: The Package URL (PURL) associated with the dependency declared in this file. + :type purl: str, optional + """ + if name is not unset: + kwargs["name"] = name + if purl is not unset: + kwargs["purl"] = purl + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_relations_items.py b/datadog_api_client/v2/model/sca_request_data_attributes_relations_items.py new file mode 100644 index 0000000000..c9b393eb30 --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_relations_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScaRequestDataAttributesRelationsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "depends_on": ([str],), + "ref": (str,), + } + attribute_map = { + "depends_on": "depends_on", + "ref": "ref", + } + + def __init__(self_, depends_on: Union[List[str], UnsetType]=unset, ref: Union[str, UnsetType]=unset, **kwargs): + """ + A dependency relation describing which other components a given component depends on. + + :param depends_on: The list of BOM references that this component directly depends on. + :type depends_on: [str], optional + + :param ref: The BOM reference of the component that has dependencies. + :type ref: str, optional + """ + if depends_on is not unset: + kwargs["depends_on"] = depends_on + if ref is not unset: + kwargs["ref"] = ref + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_repository.py b/datadog_api_client/v2/model/sca_request_data_attributes_repository.py new file mode 100644 index 0000000000..641b1fcdff --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_repository.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScaRequestDataAttributesRepository(ModelNormal): + @cached_property + def openapi_types(_): + return { + "url": (str,), + } + attribute_map = { + "url": "url", + } + + def __init__(self_, url: Union[str, UnsetType]=unset, **kwargs): + """ + Information about the source code repository being analyzed. + + :param url: The URL of the repository. + :type url: str, optional + """ + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_vulnerabilities_items.py b/datadog_api_client/v2/model/sca_request_data_attributes_vulnerabilities_items.py new file mode 100644 index 0000000000..6f924155a4 --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_vulnerabilities_items.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sca_request_data_attributes_vulnerabilities_items_affects_items import ScaRequestDataAttributesVulnerabilitiesItemsAffectsItems + +class ScaRequestDataAttributesVulnerabilitiesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sca_request_data_attributes_vulnerabilities_items_affects_items import ScaRequestDataAttributesVulnerabilitiesItemsAffectsItems + return { + "affects": ([ScaRequestDataAttributesVulnerabilitiesItemsAffectsItems],), + "bom_ref": (str,), + "id": (str,), + } + attribute_map = { + "affects": "affects", + "bom_ref": "bom_ref", + "id": "id", + } + + def __init__(self_, affects: Union[List[ScaRequestDataAttributesVulnerabilitiesItemsAffectsItems], UnsetType]=unset, bom_ref: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + A vulnerability entry from the Software Bill of Materials (SBOM), describing a known security issue and the components it affects. + + :param affects: The list of components affected by this vulnerability. + :type affects: [ScaRequestDataAttributesVulnerabilitiesItemsAffectsItems], optional + + :param bom_ref: The unique BOM reference identifier for this vulnerability entry. + :type bom_ref: str, optional + + :param id: The vulnerability identifier (e.g., CVE ID or similar). + :type id: str, optional + """ + if affects is not unset: + kwargs["affects"] = affects + if bom_ref is not unset: + kwargs["bom_ref"] = bom_ref + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_attributes_vulnerabilities_items_affects_items.py b/datadog_api_client/v2/model/sca_request_data_attributes_vulnerabilities_items_affects_items.py new file mode 100644 index 0000000000..0864b1d7de --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_attributes_vulnerabilities_items_affects_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScaRequestDataAttributesVulnerabilitiesItemsAffectsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ref": (str,), + } + attribute_map = { + "ref": "ref", + } + + def __init__(self_, ref: Union[str, UnsetType]=unset, **kwargs): + """ + A reference to a component affected by a vulnerability. + + :param ref: The BOM reference identifying the affected component. + :type ref: str, optional + """ + if ref is not unset: + kwargs["ref"] = ref + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sca_request_data_type.py b/datadog_api_client/v2/model/sca_request_data_type.py new file mode 100644 index 0000000000..fd8b30b6e6 --- /dev/null +++ b/datadog_api_client/v2/model/sca_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScaRequestDataType(ModelSimple): + """ + The type identifier for SCA dependency analysis requests. + + :param value: If omitted defaults to "scarequests". Must be one of ["scarequests"]. + :type value: str + """ + + allowed_values = { + "scarequests", + } + SCAREQUESTS: ClassVar["ScaRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScaRequestDataType.SCAREQUESTS = ScaRequestDataType("scarequests") diff --git a/datadog_api_client/v2/model/scalar_column.py b/datadog_api_client/v2/model/scalar_column.py new file mode 100644 index 0000000000..f01ff4e7e4 --- /dev/null +++ b/datadog_api_client/v2/model/scalar_column.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScalarColumn(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A single column in a scalar query response. + + :param name: The name of the tag key or group. + :type name: str, optional + + :param type: The type of column present for groups. + :type type: ScalarColumnTypeGroup, optional + + :param values: The array of tag values for each group found for the results of the formulas or queries. + :type values: [[str]], optional + + :param meta: Metadata for the resulting numerical values. + :type meta: ScalarMeta, 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.group_scalar_column import GroupScalarColumn + from datadog_api_client.v2.model.data_scalar_column import DataScalarColumn + return { + "oneOf": [ + GroupScalarColumn, + DataScalarColumn, + ], + } diff --git a/datadog_api_client/v2/model/scalar_column_type_group.py b/datadog_api_client/v2/model/scalar_column_type_group.py new file mode 100644 index 0000000000..3e66308544 --- /dev/null +++ b/datadog_api_client/v2/model/scalar_column_type_group.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScalarColumnTypeGroup(ModelSimple): + """ + The type of column present for groups. + + :param value: If omitted defaults to "group". Must be one of ["group"]. + :type value: str + """ + + allowed_values = { + "group", + } + GROUP: ClassVar["ScalarColumnTypeGroup"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScalarColumnTypeGroup.GROUP = ScalarColumnTypeGroup("group") diff --git a/datadog_api_client/v2/model/scalar_column_type_number.py b/datadog_api_client/v2/model/scalar_column_type_number.py new file mode 100644 index 0000000000..4b8987cdc3 --- /dev/null +++ b/datadog_api_client/v2/model/scalar_column_type_number.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScalarColumnTypeNumber(ModelSimple): + """ + The type of column present for numbers. + + :param value: If omitted defaults to "number". Must be one of ["number"]. + :type value: str + """ + + allowed_values = { + "number", + } + NUMBER: ClassVar["ScalarColumnTypeNumber"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScalarColumnTypeNumber.NUMBER = ScalarColumnTypeNumber("number") diff --git a/datadog_api_client/v2/model/scalar_formula_query_request.py b/datadog_api_client/v2/model/scalar_formula_query_request.py new file mode 100644 index 0000000000..cb422b6f9a --- /dev/null +++ b/datadog_api_client/v2/model/scalar_formula_query_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scalar_formula_request import ScalarFormulaRequest + from datadog_api_client.v2.model.metrics_scalar_query import MetricsScalarQuery + from datadog_api_client.v2.model.events_scalar_query import EventsScalarQuery + from datadog_api_client.v2.model.apm_resource_stats_query import ApmResourceStatsQuery + from datadog_api_client.v2.model.apm_metrics_query import ApmMetricsQuery + from datadog_api_client.v2.model.apm_dependency_stats_query import ApmDependencyStatsQuery + from datadog_api_client.v2.model.slo_query import SloQuery + from datadog_api_client.v2.model.process_scalar_query import ProcessScalarQuery + from datadog_api_client.v2.model.container_scalar_query import ContainerScalarQuery + +class ScalarFormulaQueryRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scalar_formula_request import ScalarFormulaRequest + return { + "data": (ScalarFormulaRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ScalarFormulaRequest, **kwargs): + """ + A wrapper request around one scalar query to be executed. + + :param data: A single scalar query to be executed. + :type data: ScalarFormulaRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/scalar_formula_query_response.py b/datadog_api_client/v2/model/scalar_formula_query_response.py new file mode 100644 index 0000000000..b923a0ad19 --- /dev/null +++ b/datadog_api_client/v2/model/scalar_formula_query_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scalar_response import ScalarResponse + from datadog_api_client.v2.model.group_scalar_column import GroupScalarColumn + from datadog_api_client.v2.model.data_scalar_column import DataScalarColumn + +class ScalarFormulaQueryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scalar_response import ScalarResponse + return { + "data": (ScalarResponse,), + "errors": (str,), + } + attribute_map = { + "data": "data", + "errors": "errors", + } + + def __init__(self_, data: Union[ScalarResponse, UnsetType]=unset, errors: Union[str, UnsetType]=unset, **kwargs): + """ + A message containing one or more responses to scalar queries. + + :param data: A message containing the response to a scalar query. + :type data: ScalarResponse, optional + + :param errors: An error generated when processing a request. + :type errors: str, optional + """ + if data is not unset: + kwargs["data"] = data + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/scalar_formula_request.py b/datadog_api_client/v2/model/scalar_formula_request.py new file mode 100644 index 0000000000..d906abf53e --- /dev/null +++ b/datadog_api_client/v2/model/scalar_formula_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scalar_formula_request_attributes import ScalarFormulaRequestAttributes + from datadog_api_client.v2.model.scalar_formula_request_type import ScalarFormulaRequestType + from datadog_api_client.v2.model.metrics_scalar_query import MetricsScalarQuery + from datadog_api_client.v2.model.events_scalar_query import EventsScalarQuery + from datadog_api_client.v2.model.apm_resource_stats_query import ApmResourceStatsQuery + from datadog_api_client.v2.model.apm_metrics_query import ApmMetricsQuery + from datadog_api_client.v2.model.apm_dependency_stats_query import ApmDependencyStatsQuery + from datadog_api_client.v2.model.slo_query import SloQuery + from datadog_api_client.v2.model.process_scalar_query import ProcessScalarQuery + from datadog_api_client.v2.model.container_scalar_query import ContainerScalarQuery + +class ScalarFormulaRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scalar_formula_request_attributes import ScalarFormulaRequestAttributes + from datadog_api_client.v2.model.scalar_formula_request_type import ScalarFormulaRequestType + return { + "attributes": (ScalarFormulaRequestAttributes,), + "type": (ScalarFormulaRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ScalarFormulaRequestAttributes, type: ScalarFormulaRequestType, **kwargs): + """ + A single scalar query to be executed. + + :param attributes: The object describing a scalar formula request. + :type attributes: ScalarFormulaRequestAttributes + + :param type: The type of the resource. The value should always be scalar_request. + :type type: ScalarFormulaRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/scalar_formula_request_attributes.py b/datadog_api_client/v2/model/scalar_formula_request_attributes.py new file mode 100644 index 0000000000..b83578c91d --- /dev/null +++ b/datadog_api_client/v2/model/scalar_formula_request_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_formula import QueryFormula + from datadog_api_client.v2.model.scalar_formula_request_queries import ScalarFormulaRequestQueries + from datadog_api_client.v2.model.metrics_scalar_query import MetricsScalarQuery + from datadog_api_client.v2.model.events_scalar_query import EventsScalarQuery + from datadog_api_client.v2.model.apm_resource_stats_query import ApmResourceStatsQuery + from datadog_api_client.v2.model.apm_metrics_query import ApmMetricsQuery + from datadog_api_client.v2.model.apm_dependency_stats_query import ApmDependencyStatsQuery + from datadog_api_client.v2.model.slo_query import SloQuery + from datadog_api_client.v2.model.process_scalar_query import ProcessScalarQuery + from datadog_api_client.v2.model.container_scalar_query import ContainerScalarQuery + +class ScalarFormulaRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_formula import QueryFormula + from datadog_api_client.v2.model.scalar_formula_request_queries import ScalarFormulaRequestQueries + return { + "formulas": ([QueryFormula],), + "_from": (int,), + "queries": (ScalarFormulaRequestQueries,), + "to": (int,), + } + attribute_map = { + "formulas": "formulas", + "_from": "from", + "queries": "queries", + "to": "to", + } + + def __init__(self_, _from: int, queries: ScalarFormulaRequestQueries, to: int, formulas: Union[List[QueryFormula], UnsetType]=unset, **kwargs): + """ + The object describing a scalar formula request. + + :param formulas: List of formulas to be calculated and returned as responses. + :type formulas: [QueryFormula], optional + + :param _from: Start date (inclusive) of the query in milliseconds since the Unix epoch. + :type _from: int + + :param queries: List of queries to be run and used as inputs to the formulas. + :type queries: ScalarFormulaRequestQueries + + :param to: End date (exclusive) of the query in milliseconds since the Unix epoch. + :type to: int + """ + if formulas is not unset: + kwargs["formulas"] = formulas + super().__init__(kwargs) + + + self_._from = _from + self_.queries = queries + self_.to = to diff --git a/datadog_api_client/v2/model/scalar_formula_request_queries.py b/datadog_api_client/v2/model/scalar_formula_request_queries.py new file mode 100644 index 0000000000..1045ca1b7c --- /dev/null +++ b/datadog_api_client/v2/model/scalar_formula_request_queries.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScalarFormulaRequestQueries(ModelSimple): + """ + List of queries to be run and used as inputs to the formulas. + + + :type value: [ScalarQuery] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scalar_query import ScalarQuery + return { + "value": ([ScalarQuery],), + } diff --git a/datadog_api_client/v2/model/scalar_formula_request_type.py b/datadog_api_client/v2/model/scalar_formula_request_type.py new file mode 100644 index 0000000000..2ff158e363 --- /dev/null +++ b/datadog_api_client/v2/model/scalar_formula_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScalarFormulaRequestType(ModelSimple): + """ + The type of the resource. The value should always be scalar_request. + + :param value: If omitted defaults to "scalar_request". Must be one of ["scalar_request"]. + :type value: str + """ + + allowed_values = { + "scalar_request", + } + SCALAR_REQUEST: ClassVar["ScalarFormulaRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScalarFormulaRequestType.SCALAR_REQUEST = ScalarFormulaRequestType("scalar_request") diff --git a/datadog_api_client/v2/model/scalar_formula_response_atrributes.py b/datadog_api_client/v2/model/scalar_formula_response_atrributes.py new file mode 100644 index 0000000000..9fcbda835e --- /dev/null +++ b/datadog_api_client/v2/model/scalar_formula_response_atrributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scalar_column import ScalarColumn + from datadog_api_client.v2.model.group_scalar_column import GroupScalarColumn + from datadog_api_client.v2.model.data_scalar_column import DataScalarColumn + +class ScalarFormulaResponseAtrributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scalar_column import ScalarColumn + return { + "columns": ([ScalarColumn],), + } + attribute_map = { + "columns": "columns", + } + + def __init__(self_, columns: Union[List[Union[ScalarColumn, GroupScalarColumn, DataScalarColumn]], UnsetType]=unset, **kwargs): + """ + The object describing a scalar response. + + :param columns: List of response columns, each corresponding to an individual formula or query in the request and with values in parallel arrays matching the series list. + :type columns: [ScalarColumn], optional + """ + if columns is not unset: + kwargs["columns"] = columns + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/scalar_formula_response_type.py b/datadog_api_client/v2/model/scalar_formula_response_type.py new file mode 100644 index 0000000000..63629f7248 --- /dev/null +++ b/datadog_api_client/v2/model/scalar_formula_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScalarFormulaResponseType(ModelSimple): + """ + The type of the resource. The value should always be scalar_response. + + :param value: If omitted defaults to "scalar_response". Must be one of ["scalar_response"]. + :type value: str + """ + + allowed_values = { + "scalar_response", + } + SCALAR_RESPONSE: ClassVar["ScalarFormulaResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScalarFormulaResponseType.SCALAR_RESPONSE = ScalarFormulaResponseType("scalar_response") diff --git a/datadog_api_client/v2/model/scalar_meta.py b/datadog_api_client/v2/model/scalar_meta.py new file mode 100644 index 0000000000..fb78500175 --- /dev/null +++ b/datadog_api_client/v2/model/scalar_meta.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.unit import Unit + +class ScalarMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.unit import Unit + return { + "unit": ([Unit, none_type], none_type), + } + attribute_map = { + "unit": "unit", + } + + def __init__(self_, unit: Union[List[Unit], none_type, UnsetType]=unset, **kwargs): + """ + Metadata for the resulting numerical values. + + :param unit: Detailed information about the unit. + First element describes the "primary unit" (for example, ``bytes`` in ``bytes per second`` ). + The second element describes the "per unit" (for example, ``second`` in ``bytes per second`` ). + If the second element is not present, the API returns null. + :type unit: [Unit, none_type], none_type, optional + """ + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/scalar_query.py b/datadog_api_client/v2/model/scalar_query.py new file mode 100644 index 0000000000..04c36d798f --- /dev/null +++ b/datadog_api_client/v2/model/scalar_query.py @@ -0,0 +1,162 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScalarQuery(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An individual scalar query to one of the basic Datadog data sources. + + :param aggregator: The type of aggregation that can be performed on metrics-based queries. + :type aggregator: MetricsAggregator + + :param cross_org_uuids: Organization UUIDs to query when using [cross-organization visibility](/account_management/org_settings/cross_org_visibility/). Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source that is powered by the Metrics platform. + :type data_source: MetricsDataSource + + :param name: The variable name for use in formulas. + :type name: str, optional + + :param query: A classic metrics query string. + :type query: str + + :param compute: The instructions for what to compute for this query. + :type compute: EventsCompute + + :param group_by: The list of facets on which to split results. + :type group_by: EventsQueryGroupBys, optional + + :param indexes: The indexes in which to search. + :type indexes: [str], optional + + :param search: Configuration of the search/filter for an events query. + :type search: EventsSearch, optional + + :param env: The environment to query. + :type env: str + + :param operation_name: The APM operation name. + :type operation_name: str, optional + + :param primary_tag_name: Name of the second primary tag used within APM. Required when `primary_tag_value` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog + :type primary_tag_name: str, optional + + :param primary_tag_value: Value of the second primary tag by which to filter APM data. `primary_tag_name` must also be specified. + :type primary_tag_value: str, optional + + :param resource_name: The resource name to filter by. + :type resource_name: str, optional + + :param service: The service name to filter by. + :type service: str + + :param stat: The APM resource statistic to query. + :type stat: ApmResourceStatName + + :param operation_mode: Optional operation mode to aggregate across operation names. + :type operation_mode: str, optional + + :param peer_tags: Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, peer.s3.bucket, etc.). + :type peer_tags: [str], optional + + :param query_filter: Additional filters for the query using metrics query syntax (for example, env, primary_tag). + :type query_filter: str, optional + + :param resource_hash: The resource hash for exact matching. + :type resource_hash: str, optional + + :param span_kind: Describes the relationship between the span, its parents, and its children in a trace. + :type span_kind: ApmMetricsSpanKind, optional + + :param is_upstream: Determines whether stats for upstream or downstream dependencies should be queried. + :type is_upstream: bool, optional + + :param additional_query_filters: Additional filters applied to the SLO query. + :type additional_query_filters: str, optional + + :param group_mode: How SLO results are grouped in the response. + :type group_mode: SlosGroupMode, optional + + :param measure: The SLO measurement to retrieve. + :type measure: SlosMeasure + + :param slo_id: The unique identifier of the SLO to query. + :type slo_id: str + + :param slo_query_type: The type of SLO definition being queried. + :type slo_query_type: SlosQueryType, optional + + :param is_normalized_cpu: Whether CPU metrics should be normalized by core count. + :type is_normalized_cpu: bool, optional + + :param limit: Maximum number of results to return. + :type limit: int, optional + + :param metric: The process metric to query. + :type metric: str + + :param sort: Direction of sort. + :type sort: QuerySortOrder, optional + + :param tag_filters: Tag filters to narrow down processes. + :type tag_filters: [str], optional + + :param text_filter: A full-text search filter to match process names or commands. + :type text_filter: str, 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.metrics_scalar_query import MetricsScalarQuery + from datadog_api_client.v2.model.events_scalar_query import EventsScalarQuery + from datadog_api_client.v2.model.apm_resource_stats_query import ApmResourceStatsQuery + from datadog_api_client.v2.model.apm_metrics_query import ApmMetricsQuery + from datadog_api_client.v2.model.apm_dependency_stats_query import ApmDependencyStatsQuery + from datadog_api_client.v2.model.slo_query import SloQuery + from datadog_api_client.v2.model.process_scalar_query import ProcessScalarQuery + from datadog_api_client.v2.model.container_scalar_query import ContainerScalarQuery + return { + "oneOf": [ + MetricsScalarQuery, + EventsScalarQuery, + ApmResourceStatsQuery, + ApmMetricsQuery, + ApmDependencyStatsQuery, + SloQuery, + ProcessScalarQuery, + ContainerScalarQuery, + ], + } diff --git a/datadog_api_client/v2/model/scalar_response.py b/datadog_api_client/v2/model/scalar_response.py new file mode 100644 index 0000000000..ca19859cd7 --- /dev/null +++ b/datadog_api_client/v2/model/scalar_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scalar_formula_response_atrributes import ScalarFormulaResponseAtrributes + from datadog_api_client.v2.model.scalar_formula_response_type import ScalarFormulaResponseType + from datadog_api_client.v2.model.group_scalar_column import GroupScalarColumn + from datadog_api_client.v2.model.data_scalar_column import DataScalarColumn + +class ScalarResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scalar_formula_response_atrributes import ScalarFormulaResponseAtrributes + from datadog_api_client.v2.model.scalar_formula_response_type import ScalarFormulaResponseType + return { + "attributes": (ScalarFormulaResponseAtrributes,), + "type": (ScalarFormulaResponseType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[ScalarFormulaResponseAtrributes, UnsetType]=unset, type: Union[ScalarFormulaResponseType, UnsetType]=unset, **kwargs): + """ + A message containing the response to a scalar query. + + :param attributes: The object describing a scalar response. + :type attributes: ScalarFormulaResponseAtrributes, optional + + :param type: The type of the resource. The value should always be scalar_response. + :type type: ScalarFormulaResponseType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/scan_result_response.py b/datadog_api_client/v2/model/scan_result_response.py new file mode 100644 index 0000000000..585d9cb780 --- /dev/null +++ b/datadog_api_client/v2/model/scan_result_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScanResultResponse(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The raw scan result document produced by the SCA processor. + The contents reflect the vulnerabilities and metadata produced for the libraries + submitted in the original scan request. + """ + 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.any_value_object import AnyValueObject + return { + "oneOf": [ + AnyValueObject, + ], + } diff --git a/datadog_api_client/v2/model/scanned_asset_metadata.py b/datadog_api_client/v2/model/scanned_asset_metadata.py new file mode 100644 index 0000000000..c9d14c64ac --- /dev/null +++ b/datadog_api_client/v2/model/scanned_asset_metadata.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scanned_asset_metadata_attributes import ScannedAssetMetadataAttributes + +class ScannedAssetMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scanned_asset_metadata_attributes import ScannedAssetMetadataAttributes + return { + "attributes": (ScannedAssetMetadataAttributes,), + "id": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + } + + def __init__(self_, attributes: ScannedAssetMetadataAttributes, id: str, **kwargs): + """ + The metadata of a scanned asset. + + :param attributes: The attributes of a scanned asset metadata. + :type attributes: ScannedAssetMetadataAttributes + + :param id: The ID of the scanned asset metadata. + :type id: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id diff --git a/datadog_api_client/v2/model/scanned_asset_metadata_asset.py b/datadog_api_client/v2/model/scanned_asset_metadata_asset.py new file mode 100644 index 0000000000..cf5f8c0cc7 --- /dev/null +++ b/datadog_api_client/v2/model/scanned_asset_metadata_asset.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_asset_type import CloudAssetType + +class ScannedAssetMetadataAsset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_asset_type import CloudAssetType + return { + "name": (str,), + "type": (CloudAssetType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: CloudAssetType, **kwargs): + """ + The asset of a scanned asset metadata. + + :param name: The name of the asset. + :type name: str + + :param type: The cloud asset type + :type type: CloudAssetType + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/scanned_asset_metadata_attributes.py b/datadog_api_client/v2/model/scanned_asset_metadata_attributes.py new file mode 100644 index 0000000000..ffb3fda2e3 --- /dev/null +++ b/datadog_api_client/v2/model/scanned_asset_metadata_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scanned_asset_metadata_asset import ScannedAssetMetadataAsset + from datadog_api_client.v2.model.scanned_asset_metadata_last_success import ScannedAssetMetadataLastSuccess + +class ScannedAssetMetadataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scanned_asset_metadata_asset import ScannedAssetMetadataAsset + from datadog_api_client.v2.model.scanned_asset_metadata_last_success import ScannedAssetMetadataLastSuccess + return { + "asset": (ScannedAssetMetadataAsset,), + "first_success_timestamp": (str,), + "last_success": (ScannedAssetMetadataLastSuccess,), + } + attribute_map = { + "asset": "asset", + "first_success_timestamp": "first_success_timestamp", + "last_success": "last_success", + } + + def __init__(self_, asset: ScannedAssetMetadataAsset, first_success_timestamp: str, last_success: ScannedAssetMetadataLastSuccess, **kwargs): + """ + The attributes of a scanned asset metadata. + + :param asset: The asset of a scanned asset metadata. + :type asset: ScannedAssetMetadataAsset + + :param first_success_timestamp: The timestamp when the scan of the asset was performed for the first time. + :type first_success_timestamp: str + + :param last_success: Metadata for the last successful scan of an asset. + :type last_success: ScannedAssetMetadataLastSuccess + """ + super().__init__(kwargs) + + + self_.asset = asset + self_.first_success_timestamp = first_success_timestamp + self_.last_success = last_success diff --git a/datadog_api_client/v2/model/scanned_asset_metadata_last_success.py b/datadog_api_client/v2/model/scanned_asset_metadata_last_success.py new file mode 100644 index 0000000000..060a341fd7 --- /dev/null +++ b/datadog_api_client/v2/model/scanned_asset_metadata_last_success.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScannedAssetMetadataLastSuccess(ModelNormal): + @cached_property + def openapi_types(_): + return { + "env": (str,), + "origin": ([str],), + "timestamp": (str,), + } + attribute_map = { + "env": "env", + "origin": "origin", + "timestamp": "timestamp", + } + + def __init__(self_, timestamp: str, env: Union[str, UnsetType]=unset, origin: Union[List[str], UnsetType]=unset, **kwargs): + """ + Metadata for the last successful scan of an asset. + + :param env: The environment of the last success scan of the asset. + :type env: str, optional + + :param origin: The list of origins of the last success scan of the asset. + :type origin: [str], optional + + :param timestamp: The timestamp of the last success scan of the asset. + :type timestamp: str + """ + if env is not unset: + kwargs["env"] = env + if origin is not unset: + kwargs["origin"] = origin + super().__init__(kwargs) + + + self_.timestamp = timestamp diff --git a/datadog_api_client/v2/model/scanned_assets_metadata.py b/datadog_api_client/v2/model/scanned_assets_metadata.py new file mode 100644 index 0000000000..1fc69762ad --- /dev/null +++ b/datadog_api_client/v2/model/scanned_assets_metadata.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scanned_asset_metadata import ScannedAssetMetadata + from datadog_api_client.v2.model.links import Links + from datadog_api_client.v2.model.metadata import Metadata + +class ScannedAssetsMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scanned_asset_metadata import ScannedAssetMetadata + from datadog_api_client.v2.model.links import Links + from datadog_api_client.v2.model.metadata import Metadata + return { + "data": ([ScannedAssetMetadata],), + "links": (Links,), + "meta": (Metadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[ScannedAssetMetadata], links: Union[Links, UnsetType]=unset, meta: Union[Metadata, UnsetType]=unset, **kwargs): + """ + The expected response schema when listing scanned assets metadata. + + :param data: List of scanned assets metadata. + :type data: [ScannedAssetMetadata] + + :param links: The JSON:API links related to pagination. + :type links: Links, optional + + :param meta: The metadata related to this request. + :type meta: Metadata, optional + """ + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/schedule.py b/datadog_api_client/v2/model/schedule.py new file mode 100644 index 0000000000..4c33ab7e56 --- /dev/null +++ b/datadog_api_client/v2/model/schedule.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_data import ScheduleData + from datadog_api_client.v2.model.schedule_data_included_item import ScheduleDataIncludedItem + from datadog_api_client.v2.model.team_reference import TeamReference + from datadog_api_client.v2.model.layer import Layer + from datadog_api_client.v2.model.schedule_member import ScheduleMember + from datadog_api_client.v2.model.schedule_user import ScheduleUser + +class Schedule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_data import ScheduleData + from datadog_api_client.v2.model.schedule_data_included_item import ScheduleDataIncludedItem + return { + "data": (ScheduleData,), + "included": ([ScheduleDataIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[ScheduleData, UnsetType]=unset, included: Union[List[Union[ScheduleDataIncludedItem, TeamReference, Layer, ScheduleMember, ScheduleUser]], UnsetType]=unset, **kwargs): + """ + Top-level container for a schedule object, including both the ``data`` payload and any related ``included`` resources (such as teams, layers, or members). + + :param data: Represents the primary data object for a schedule, linking attributes and relationships. + :type data: ScheduleData, optional + + :param included: Any additional resources related to this schedule, such as teams and layers. + :type included: [ScheduleDataIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_create_request.py b/datadog_api_client/v2/model/schedule_create_request.py new file mode 100644 index 0000000000..fba6a163b6 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_create_request_data import ScheduleCreateRequestData + +class ScheduleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_create_request_data import ScheduleCreateRequestData + return { + "data": (ScheduleCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ScheduleCreateRequestData, **kwargs): + """ + The top-level request body for schedule creation, wrapping a ``data`` object. + + :param data: The core data wrapper for creating a schedule, encompassing attributes, relationships, and the resource type. + :type data: ScheduleCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/schedule_create_request_data.py b/datadog_api_client/v2/model/schedule_create_request_data.py new file mode 100644 index 0000000000..3994c473a0 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_create_request_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_create_request_data_attributes import ScheduleCreateRequestDataAttributes + from datadog_api_client.v2.model.schedule_create_request_data_relationships import ScheduleCreateRequestDataRelationships + from datadog_api_client.v2.model.schedule_create_request_data_type import ScheduleCreateRequestDataType + +class ScheduleCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_create_request_data_attributes import ScheduleCreateRequestDataAttributes + from datadog_api_client.v2.model.schedule_create_request_data_relationships import ScheduleCreateRequestDataRelationships + from datadog_api_client.v2.model.schedule_create_request_data_type import ScheduleCreateRequestDataType + return { + "attributes": (ScheduleCreateRequestDataAttributes,), + "relationships": (ScheduleCreateRequestDataRelationships,), + "type": (ScheduleCreateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ScheduleCreateRequestDataAttributes, type: ScheduleCreateRequestDataType, relationships: Union[ScheduleCreateRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + The core data wrapper for creating a schedule, encompassing attributes, relationships, and the resource type. + + :param attributes: Describes the main attributes for creating a new schedule, including name, layers, and time zone. + :type attributes: ScheduleCreateRequestDataAttributes + + :param relationships: Gathers relationship objects for the schedule creation request, including the teams to associate. + :type relationships: ScheduleCreateRequestDataRelationships, optional + + :param type: Schedules resource type. + :type type: ScheduleCreateRequestDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_create_request_data_attributes.py b/datadog_api_client/v2/model/schedule_create_request_data_attributes.py new file mode 100644 index 0000000000..61ef74b2a4 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_create_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_create_request_data_attributes_layers_items import ScheduleCreateRequestDataAttributesLayersItems + +class ScheduleCreateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_create_request_data_attributes_layers_items import ScheduleCreateRequestDataAttributesLayersItems + return { + "layers": ([ScheduleCreateRequestDataAttributesLayersItems],), + "name": (str,), + "time_zone": (str,), + } + attribute_map = { + "layers": "layers", + "name": "name", + "time_zone": "time_zone", + } + + def __init__(self_, layers: List[ScheduleCreateRequestDataAttributesLayersItems], name: str, time_zone: str, **kwargs): + """ + Describes the main attributes for creating a new schedule, including name, layers, and time zone. + + :param layers: The layers of On-Call coverage that define rotation intervals and restrictions. + :type layers: [ScheduleCreateRequestDataAttributesLayersItems] + + :param name: A human-readable name for the new schedule. + :type name: str + + :param time_zone: The time zone in which the schedule is defined. + :type time_zone: str + """ + super().__init__(kwargs) + + + self_.layers = layers + self_.name = name + self_.time_zone = time_zone diff --git a/datadog_api_client/v2/model/schedule_create_request_data_attributes_layers_items.py b/datadog_api_client/v2/model/schedule_create_request_data_attributes_layers_items.py new file mode 100644 index 0000000000..19c6f35f34 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_create_request_data_attributes_layers_items.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.layer_attributes_interval import LayerAttributesInterval + from datadog_api_client.v2.model.schedule_request_data_attributes_layers_items_members_items import ScheduleRequestDataAttributesLayersItemsMembersItems + from datadog_api_client.v2.model.time_restriction import TimeRestriction + +class ScheduleCreateRequestDataAttributesLayersItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.layer_attributes_interval import LayerAttributesInterval + from datadog_api_client.v2.model.schedule_request_data_attributes_layers_items_members_items import ScheduleRequestDataAttributesLayersItemsMembersItems + from datadog_api_client.v2.model.time_restriction import TimeRestriction + return { + "effective_date": (datetime,), + "end_date": (datetime,), + "interval": (LayerAttributesInterval,), + "members": ([ScheduleRequestDataAttributesLayersItemsMembersItems],), + "name": (str,), + "restrictions": ([TimeRestriction],), + "rotation_start": (datetime,), + "time_zone": (str,), + } + attribute_map = { + "effective_date": "effective_date", + "end_date": "end_date", + "interval": "interval", + "members": "members", + "name": "name", + "restrictions": "restrictions", + "rotation_start": "rotation_start", + "time_zone": "time_zone", + } + + def __init__(self_, effective_date: datetime, interval: LayerAttributesInterval, members: List[ScheduleRequestDataAttributesLayersItemsMembersItems], name: str, rotation_start: datetime, end_date: Union[datetime, UnsetType]=unset, restrictions: Union[List[TimeRestriction], UnsetType]=unset, time_zone: Union[str, UnsetType]=unset, **kwargs): + """ + Describes a schedule layer, including rotation intervals, members, restrictions, and timeline settings. + + :param effective_date: The date/time when this layer becomes active (in ISO 8601). + :type effective_date: datetime + + :param end_date: The date/time after which this layer no longer applies (in ISO 8601). + :type end_date: datetime, optional + + :param interval: Defines how often the rotation repeats, using a combination of days and optional seconds. Should be at least 1 hour. + :type interval: LayerAttributesInterval + + :param members: A list of members who participate in this layer's rotation. + :type members: [ScheduleRequestDataAttributesLayersItemsMembersItems] + + :param name: The name of this layer. + :type name: str + + :param restrictions: Zero or more time-based restrictions (for example, only weekdays, during business hours). + :type restrictions: [TimeRestriction], optional + + :param rotation_start: The date/time when the rotation for this layer starts (in ISO 8601). + :type rotation_start: datetime + + :param time_zone: The time zone for this layer. + :type time_zone: str, optional + """ + if end_date is not unset: + kwargs["end_date"] = end_date + if restrictions is not unset: + kwargs["restrictions"] = restrictions + if time_zone is not unset: + kwargs["time_zone"] = time_zone + super().__init__(kwargs) + + + self_.effective_date = effective_date + self_.interval = interval + self_.members = members + self_.name = name + self_.rotation_start = rotation_start diff --git a/datadog_api_client/v2/model/schedule_create_request_data_relationships.py b/datadog_api_client/v2/model/schedule_create_request_data_relationships.py new file mode 100644 index 0000000000..abb8458fb0 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_create_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + +class ScheduleCreateRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + return { + "teams": (DataRelationshipsTeams,), + } + attribute_map = { + "teams": "teams", + } + + def __init__(self_, teams: Union[DataRelationshipsTeams, UnsetType]=unset, **kwargs): + """ + Gathers relationship objects for the schedule creation request, including the teams to associate. + + :param teams: Associates teams with this schedule in a data structure. + :type teams: DataRelationshipsTeams, optional + """ + if teams is not unset: + kwargs["teams"] = teams + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_create_request_data_type.py b/datadog_api_client/v2/model/schedule_create_request_data_type.py new file mode 100644 index 0000000000..1a72aebc29 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_create_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleCreateRequestDataType(ModelSimple): + """ + Schedules resource type. + + :param value: If omitted defaults to "schedules". Must be one of ["schedules"]. + :type value: str + """ + + allowed_values = { + "schedules", + } + SCHEDULES: ClassVar["ScheduleCreateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleCreateRequestDataType.SCHEDULES = ScheduleCreateRequestDataType("schedules") diff --git a/datadog_api_client/v2/model/schedule_data.py b/datadog_api_client/v2/model/schedule_data.py new file mode 100644 index 0000000000..bee3b48f62 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_data_attributes import ScheduleDataAttributes + from datadog_api_client.v2.model.schedule_data_relationships import ScheduleDataRelationships + from datadog_api_client.v2.model.schedule_data_type import ScheduleDataType + +class ScheduleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_data_attributes import ScheduleDataAttributes + from datadog_api_client.v2.model.schedule_data_relationships import ScheduleDataRelationships + from datadog_api_client.v2.model.schedule_data_type import ScheduleDataType + return { + "attributes": (ScheduleDataAttributes,), + "id": (str,), + "relationships": (ScheduleDataRelationships,), + "type": (ScheduleDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: ScheduleDataType, attributes: Union[ScheduleDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ScheduleDataRelationships, UnsetType]=unset, **kwargs): + """ + Represents the primary data object for a schedule, linking attributes and relationships. + + :param attributes: Provides core properties of a schedule object such as its name and time zone. + :type attributes: ScheduleDataAttributes, optional + + :param id: The schedule's unique identifier. + :type id: str, optional + + :param relationships: Groups the relationships for a schedule object, referencing layers and teams. + :type relationships: ScheduleDataRelationships, optional + + :param type: Schedules resource type. + :type type: ScheduleDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_data_attributes.py b/datadog_api_client/v2/model/schedule_data_attributes.py new file mode 100644 index 0000000000..aa4f4a612b --- /dev/null +++ b/datadog_api_client/v2/model/schedule_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScheduleDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "tags": ([str],), + "time_zone": (str,), + } + attribute_map = { + "name": "name", + "tags": "tags", + "time_zone": "time_zone", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, time_zone: Union[str, UnsetType]=unset, **kwargs): + """ + Provides core properties of a schedule object such as its name and time zone. + + :param name: A short name for the schedule. + :type name: str, optional + + :param tags: A list of tags associated with the schedule. + :type tags: [str], optional + + :param time_zone: The time zone in which this schedule operates. + :type time_zone: str, optional + """ + if name is not unset: + kwargs["name"] = name + if tags is not unset: + kwargs["tags"] = tags + if time_zone is not unset: + kwargs["time_zone"] = time_zone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_data_included_item.py b/datadog_api_client/v2/model/schedule_data_included_item.py new file mode 100644 index 0000000000..1d19aa6bc9 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_data_included_item.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScheduleDataIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Any additional resources related to this schedule, such as teams and layers. + + :param attributes: Encapsulates the basic attributes of a Team reference, such as name, handle, and an optional avatar or description. + :type attributes: TeamReferenceAttributes, optional + + :param id: The team's unique identifier. + :type id: str, optional + + :param type: Teams resource type. + :type type: TeamReferenceType + + :param relationships: Holds references to objects related to the Layer entity, such as its members. + :type relationships: LayerRelationships, 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.team_reference import TeamReference + from datadog_api_client.v2.model.layer import Layer + from datadog_api_client.v2.model.schedule_member import ScheduleMember + from datadog_api_client.v2.model.schedule_user import ScheduleUser + return { + "oneOf": [ + TeamReference, + Layer, + ScheduleMember, + ScheduleUser, + ], + } diff --git a/datadog_api_client/v2/model/schedule_data_relationships.py b/datadog_api_client/v2/model/schedule_data_relationships.py new file mode 100644 index 0000000000..e440d0aa32 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_data_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_data_relationships_layers import ScheduleDataRelationshipsLayers + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + +class ScheduleDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_data_relationships_layers import ScheduleDataRelationshipsLayers + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + return { + "layers": (ScheduleDataRelationshipsLayers,), + "teams": (DataRelationshipsTeams,), + } + attribute_map = { + "layers": "layers", + "teams": "teams", + } + + def __init__(self_, layers: Union[ScheduleDataRelationshipsLayers, UnsetType]=unset, teams: Union[DataRelationshipsTeams, UnsetType]=unset, **kwargs): + """ + Groups the relationships for a schedule object, referencing layers and teams. + + :param layers: Associates layers with this schedule in a data structure. + :type layers: ScheduleDataRelationshipsLayers, optional + + :param teams: Associates teams with this schedule in a data structure. + :type teams: DataRelationshipsTeams, optional + """ + if layers is not unset: + kwargs["layers"] = layers + if teams is not unset: + kwargs["teams"] = teams + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_data_relationships_layers.py b/datadog_api_client/v2/model/schedule_data_relationships_layers.py new file mode 100644 index 0000000000..a5a01466cd --- /dev/null +++ b/datadog_api_client/v2/model/schedule_data_relationships_layers.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_data_relationships_layers_data_items import ScheduleDataRelationshipsLayersDataItems + +class ScheduleDataRelationshipsLayers(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_data_relationships_layers_data_items import ScheduleDataRelationshipsLayersDataItems + return { + "data": ([ScheduleDataRelationshipsLayersDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ScheduleDataRelationshipsLayersDataItems], UnsetType]=unset, **kwargs): + """ + Associates layers with this schedule in a data structure. + + :param data: An array of layer references for this schedule. + :type data: [ScheduleDataRelationshipsLayersDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_data_relationships_layers_data_items.py b/datadog_api_client/v2/model/schedule_data_relationships_layers_data_items.py new file mode 100644 index 0000000000..f30bca04db --- /dev/null +++ b/datadog_api_client/v2/model/schedule_data_relationships_layers_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_data_relationships_layers_data_items_type import ScheduleDataRelationshipsLayersDataItemsType + +class ScheduleDataRelationshipsLayersDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_data_relationships_layers_data_items_type import ScheduleDataRelationshipsLayersDataItemsType + return { + "id": (str,), + "type": (ScheduleDataRelationshipsLayersDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ScheduleDataRelationshipsLayersDataItemsType, **kwargs): + """ + Relates a layer to this schedule, identified by ``id`` and ``type`` (must be ``layers`` ). + + :param id: The unique identifier of the layer in this relationship. + :type id: str + + :param type: Layers resource type. + :type type: ScheduleDataRelationshipsLayersDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_data_relationships_layers_data_items_type.py b/datadog_api_client/v2/model/schedule_data_relationships_layers_data_items_type.py new file mode 100644 index 0000000000..563018ca86 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_data_relationships_layers_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleDataRelationshipsLayersDataItemsType(ModelSimple): + """ + Layers resource type. + + :param value: If omitted defaults to "layers". Must be one of ["layers"]. + :type value: str + """ + + allowed_values = { + "layers", + } + LAYERS: ClassVar["ScheduleDataRelationshipsLayersDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleDataRelationshipsLayersDataItemsType.LAYERS = ScheduleDataRelationshipsLayersDataItemsType("layers") diff --git a/datadog_api_client/v2/model/schedule_data_type.py b/datadog_api_client/v2/model/schedule_data_type.py new file mode 100644 index 0000000000..a44a1c09d7 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleDataType(ModelSimple): + """ + Schedules resource type. + + :param value: If omitted defaults to "schedules". Must be one of ["schedules"]. + :type value: str + """ + + allowed_values = { + "schedules", + } + SCHEDULES: ClassVar["ScheduleDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleDataType.SCHEDULES = ScheduleDataType("schedules") diff --git a/datadog_api_client/v2/model/schedule_member.py b/datadog_api_client/v2/model/schedule_member.py new file mode 100644 index 0000000000..5a85e27665 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_member.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_member_relationships import ScheduleMemberRelationships + from datadog_api_client.v2.model.schedule_member_type import ScheduleMemberType + +class ScheduleMember(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_member_relationships import ScheduleMemberRelationships + from datadog_api_client.v2.model.schedule_member_type import ScheduleMemberType + return { + "id": (str,), + "relationships": (ScheduleMemberRelationships,), + "type": (ScheduleMemberType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: ScheduleMemberType, id: Union[str, UnsetType]=unset, relationships: Union[ScheduleMemberRelationships, UnsetType]=unset, **kwargs): + """ + Represents a single member entry in a schedule, referencing a specific user. + + :param id: The unique identifier for this schedule member. + :type id: str, optional + + :param relationships: Defines relationships for a schedule member, primarily referencing a single user. + :type relationships: ScheduleMemberRelationships, optional + + :param type: Schedule Members resource type. + :type type: ScheduleMemberType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_member_relationships.py b/datadog_api_client/v2/model/schedule_member_relationships.py new file mode 100644 index 0000000000..a1e0b5894b --- /dev/null +++ b/datadog_api_client/v2/model/schedule_member_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_member_relationships_user import ScheduleMemberRelationshipsUser + +class ScheduleMemberRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_member_relationships_user import ScheduleMemberRelationshipsUser + return { + "user": (ScheduleMemberRelationshipsUser,), + } + attribute_map = { + "user": "user", + } + + def __init__(self_, user: Union[ScheduleMemberRelationshipsUser, UnsetType]=unset, **kwargs): + """ + Defines relationships for a schedule member, primarily referencing a single user. + + :param user: Wraps the user data reference for a schedule member. + :type user: ScheduleMemberRelationshipsUser, optional + """ + if user is not unset: + kwargs["user"] = user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_member_relationships_user.py b/datadog_api_client/v2/model/schedule_member_relationships_user.py new file mode 100644 index 0000000000..738612dd0b --- /dev/null +++ b/datadog_api_client/v2/model/schedule_member_relationships_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_member_relationships_user_data import ScheduleMemberRelationshipsUserData + +class ScheduleMemberRelationshipsUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_member_relationships_user_data import ScheduleMemberRelationshipsUserData + return { + "data": (ScheduleMemberRelationshipsUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ScheduleMemberRelationshipsUserData, **kwargs): + """ + Wraps the user data reference for a schedule member. + + :param data: Points to the user data associated with this schedule member, including an ID and type. + :type data: ScheduleMemberRelationshipsUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/schedule_member_relationships_user_data.py b/datadog_api_client/v2/model/schedule_member_relationships_user_data.py new file mode 100644 index 0000000000..ef366e22f6 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_member_relationships_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_member_relationships_user_data_type import ScheduleMemberRelationshipsUserDataType + +class ScheduleMemberRelationshipsUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_member_relationships_user_data_type import ScheduleMemberRelationshipsUserDataType + return { + "id": (str,), + "type": (ScheduleMemberRelationshipsUserDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ScheduleMemberRelationshipsUserDataType, **kwargs): + """ + Points to the user data associated with this schedule member, including an ID and type. + + :param id: The user's unique identifier. + :type id: str + + :param type: Users resource type. + :type type: ScheduleMemberRelationshipsUserDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_member_relationships_user_data_type.py b/datadog_api_client/v2/model/schedule_member_relationships_user_data_type.py new file mode 100644 index 0000000000..5680018802 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_member_relationships_user_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleMemberRelationshipsUserDataType(ModelSimple): + """ + Users resource type. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["ScheduleMemberRelationshipsUserDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleMemberRelationshipsUserDataType.USERS = ScheduleMemberRelationshipsUserDataType("users") diff --git a/datadog_api_client/v2/model/schedule_member_type.py b/datadog_api_client/v2/model/schedule_member_type.py new file mode 100644 index 0000000000..bce9507def --- /dev/null +++ b/datadog_api_client/v2/model/schedule_member_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleMemberType(ModelSimple): + """ + Schedule Members resource type. + + :param value: If omitted defaults to "members". Must be one of ["members"]. + :type value: str + """ + + allowed_values = { + "members", + } + MEMBERS: ClassVar["ScheduleMemberType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleMemberType.MEMBERS = ScheduleMemberType("members") diff --git a/datadog_api_client/v2/model/schedule_on_call_responder_data.py b/datadog_api_client/v2/model/schedule_on_call_responder_data.py new file mode 100644 index 0000000000..e7c4157d12 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responder_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responder_data_attributes import ScheduleOnCallResponderDataAttributes + from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships import ScheduleOnCallResponderDataRelationships + from datadog_api_client.v2.model.schedule_on_call_responder_data_type import ScheduleOnCallResponderDataType + +class ScheduleOnCallResponderData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responder_data_attributes import ScheduleOnCallResponderDataAttributes + from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships import ScheduleOnCallResponderDataRelationships + from datadog_api_client.v2.model.schedule_on_call_responder_data_type import ScheduleOnCallResponderDataType + return { + "attributes": (ScheduleOnCallResponderDataAttributes,), + "id": (str,), + "relationships": (ScheduleOnCallResponderDataRelationships,), + "type": (ScheduleOnCallResponderDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: ScheduleOnCallResponderDataType, attributes: Union[ScheduleOnCallResponderDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ScheduleOnCallResponderDataRelationships, UnsetType]=unset, **kwargs): + """ + Represents one position's (previous, current, or next) group of on-call responder shifts. Positions with no matching shift are omitted entirely from the response. + + :param attributes: Attributes for one position's (previous, current, or next) group of on-call responder shifts. + :type attributes: ScheduleOnCallResponderDataAttributes, optional + + :param id: Unique identifier of this responder group. + :type id: str, optional + + :param relationships: Relationships for a single position's (previous, current, or next) responder group. + :type relationships: ScheduleOnCallResponderDataRelationships, optional + + :param type: Represents the resource type for a single position's (previous, current, or next) group of on-call responder shifts. + :type type: ScheduleOnCallResponderDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_on_call_responder_data_attributes.py b/datadog_api_client/v2/model/schedule_on_call_responder_data_attributes.py new file mode 100644 index 0000000000..2159b22cfe --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responder_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_target_position import ScheduleTargetPosition + +class ScheduleOnCallResponderDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_target_position import ScheduleTargetPosition + return { + "position": (ScheduleTargetPosition,), + } + attribute_map = { + "position": "position", + } + + def __init__(self_, position: Union[ScheduleTargetPosition, UnsetType]=unset, **kwargs): + """ + Attributes for one position's (previous, current, or next) group of on-call responder shifts. + + :param position: Specifies the position of a schedule target (example ``previous`` , ``current`` , or ``next`` ). + :type position: ScheduleTargetPosition, optional + """ + if position is not unset: + kwargs["position"] = position + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships.py b/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships.py new file mode 100644 index 0000000000..ec637cd565 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships_shifts import ScheduleOnCallResponderDataRelationshipsShifts + +class ScheduleOnCallResponderDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships_shifts import ScheduleOnCallResponderDataRelationshipsShifts + return { + "shifts": (ScheduleOnCallResponderDataRelationshipsShifts,), + } + attribute_map = { + "shifts": "shifts", + } + + def __init__(self_, shifts: Union[ScheduleOnCallResponderDataRelationshipsShifts, UnsetType]=unset, **kwargs): + """ + Relationships for a single position's (previous, current, or next) responder group. + + :param shifts: Defines the list of shifts satisfying this responder group's position. Multiple shifts occur when a schedule has multiple concurrent on-call responders at that position. + :type shifts: ScheduleOnCallResponderDataRelationshipsShifts, optional + """ + if shifts is not unset: + kwargs["shifts"] = shifts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships_shifts.py b/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships_shifts.py new file mode 100644 index 0000000000..0a0e08262f --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships_shifts.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships_shifts_data_items import ScheduleOnCallResponderDataRelationshipsShiftsDataItems + +class ScheduleOnCallResponderDataRelationshipsShifts(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships_shifts_data_items import ScheduleOnCallResponderDataRelationshipsShiftsDataItems + return { + "data": ([ScheduleOnCallResponderDataRelationshipsShiftsDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ScheduleOnCallResponderDataRelationshipsShiftsDataItems], UnsetType]=unset, **kwargs): + """ + Defines the list of shifts satisfying this responder group's position. Multiple shifts occur when a schedule has multiple concurrent on-call responders at that position. + + :param data: Array of references to the shifts included in the response. + :type data: [ScheduleOnCallResponderDataRelationshipsShiftsDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships_shifts_data_items.py b/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships_shifts_data_items.py new file mode 100644 index 0000000000..8de746daff --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships_shifts_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships_shifts_data_items_type import ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType + +class ScheduleOnCallResponderDataRelationshipsShiftsDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships_shifts_data_items_type import ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType + return { + "id": (str,), + "type": (ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType, **kwargs): + """ + Represents a reference to one of the shifts satisfying this responder group's position. + + :param id: Unique identifier of the shift. + :type id: str + + :param type: Indicates that the related resource is of type ``shifts``. + :type type: ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships_shifts_data_items_type.py b/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships_shifts_data_items_type.py new file mode 100644 index 0000000000..578066ee38 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responder_data_relationships_shifts_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType(ModelSimple): + """ + Indicates that the related resource is of type `shifts`. + + :param value: If omitted defaults to "shifts". Must be one of ["shifts"]. + :type value: str + """ + + allowed_values = { + "shifts", + } + SHIFTS: ClassVar["ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType.SHIFTS = ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType("shifts") diff --git a/datadog_api_client/v2/model/schedule_on_call_responder_data_type.py b/datadog_api_client/v2/model/schedule_on_call_responder_data_type.py new file mode 100644 index 0000000000..e1022ed494 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responder_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleOnCallResponderDataType(ModelSimple): + """ + Represents the resource type for a single position's (previous, current, or next) group of on-call responder shifts. + + :param value: If omitted defaults to "schedule_oncall_responder". Must be one of ["schedule_oncall_responder"]. + :type value: str + """ + + allowed_values = { + "schedule_oncall_responder", + } + SCHEDULE_ONCALL_RESPONDER: ClassVar["ScheduleOnCallResponderDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleOnCallResponderDataType.SCHEDULE_ONCALL_RESPONDER = ScheduleOnCallResponderDataType("schedule_oncall_responder") diff --git a/datadog_api_client/v2/model/schedule_on_call_responders.py b/datadog_api_client/v2/model/schedule_on_call_responders.py new file mode 100644 index 0000000000..f8f3fb1a0c --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responders_data import ScheduleOnCallRespondersData + from datadog_api_client.v2.model.schedule_on_call_responders_included import ScheduleOnCallRespondersIncluded + from datadog_api_client.v2.model.schedule_on_call_responder_data import ScheduleOnCallResponderData + from datadog_api_client.v2.model.shift_data import ShiftData + from datadog_api_client.v2.model.schedule_data import ScheduleData + from datadog_api_client.v2.model.user import User + +class ScheduleOnCallResponders(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responders_data import ScheduleOnCallRespondersData + from datadog_api_client.v2.model.schedule_on_call_responders_included import ScheduleOnCallRespondersIncluded + return { + "data": (ScheduleOnCallRespondersData,), + "included": ([ScheduleOnCallRespondersIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[ScheduleOnCallRespondersData, UnsetType]=unset, included: Union[List[Union[ScheduleOnCallRespondersIncluded, ScheduleOnCallResponderData, ShiftData, ScheduleData, User]], UnsetType]=unset, **kwargs): + """ + Root object representing a schedule's on-call responders, grouped by position (previous, current, next), for a given point in time. + + :param data: The main data object representing a schedule's on-call responders lookup, including relationships and metadata. + :type data: ScheduleOnCallRespondersData, optional + + :param included: Related resources referenced in the responder groups' relationships, such as shifts, schedules, and users. + :type included: [ScheduleOnCallRespondersIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data.py b/datadog_api_client/v2/model/schedule_on_call_responders_data.py new file mode 100644 index 0000000000..498245896d --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responders_data_attributes import ScheduleOnCallRespondersDataAttributes + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships import ScheduleOnCallRespondersDataRelationships + from datadog_api_client.v2.model.schedule_on_call_responders_data_type import ScheduleOnCallRespondersDataType + +class ScheduleOnCallRespondersData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responders_data_attributes import ScheduleOnCallRespondersDataAttributes + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships import ScheduleOnCallRespondersDataRelationships + from datadog_api_client.v2.model.schedule_on_call_responders_data_type import ScheduleOnCallRespondersDataType + return { + "attributes": (ScheduleOnCallRespondersDataAttributes,), + "id": (str,), + "relationships": (ScheduleOnCallRespondersDataRelationships,), + "type": (ScheduleOnCallRespondersDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: ScheduleOnCallRespondersDataType, attributes: Union[ScheduleOnCallRespondersDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ScheduleOnCallRespondersDataRelationships, UnsetType]=unset, **kwargs): + """ + The main data object representing a schedule's on-call responders lookup, including relationships and metadata. + + :param attributes: Attributes for a schedule's on-call responders lookup. + :type attributes: ScheduleOnCallRespondersDataAttributes, optional + + :param id: Unique identifier of this on-call responders lookup. + :type id: str, optional + + :param relationships: Relationships for a schedule's on-call responders lookup, including the schedule and its responder groups. + :type relationships: ScheduleOnCallRespondersDataRelationships, optional + + :param type: Represents the resource type for a schedule's grouped on-call responders across the previous, current, and next positions. + :type type: ScheduleOnCallRespondersDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data_attributes.py b/datadog_api_client/v2/model/schedule_on_call_responders_data_attributes.py new file mode 100644 index 0000000000..ccf5a49fa3 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScheduleOnCallRespondersDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "scheduled_at": (datetime,), + } + attribute_map = { + "scheduled_at": "scheduled_at", + } + + def __init__(self_, scheduled_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes for a schedule's on-call responders lookup. + + :param scheduled_at: The timestamp the responders were resolved at. + :type scheduled_at: datetime, optional + """ + if scheduled_at is not unset: + kwargs["scheduled_at"] = scheduled_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships.py b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships.py new file mode 100644 index 0000000000..d3ba3912ae --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_responders import ScheduleOnCallRespondersDataRelationshipsResponders + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_schedule import ScheduleOnCallRespondersDataRelationshipsSchedule + +class ScheduleOnCallRespondersDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_responders import ScheduleOnCallRespondersDataRelationshipsResponders + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_schedule import ScheduleOnCallRespondersDataRelationshipsSchedule + return { + "responders": (ScheduleOnCallRespondersDataRelationshipsResponders,), + "schedule": (ScheduleOnCallRespondersDataRelationshipsSchedule,), + } + attribute_map = { + "responders": "responders", + "schedule": "schedule", + } + + def __init__(self_, responders: Union[ScheduleOnCallRespondersDataRelationshipsResponders, UnsetType]=unset, schedule: Union[ScheduleOnCallRespondersDataRelationshipsSchedule, UnsetType]=unset, **kwargs): + """ + Relationships for a schedule's on-call responders lookup, including the schedule and its responder groups. + + :param responders: Defines the list of per-position (previous, current, next) responder groups for the schedule. + :type responders: ScheduleOnCallRespondersDataRelationshipsResponders, optional + + :param schedule: Defines the relationship to the schedule this on-call responders lookup was performed for. + :type schedule: ScheduleOnCallRespondersDataRelationshipsSchedule, optional + """ + if responders is not unset: + kwargs["responders"] = responders + if schedule is not unset: + kwargs["schedule"] = schedule + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_responders.py b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_responders.py new file mode 100644 index 0000000000..0ce7be0c93 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_responders.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_responders_data_items import ScheduleOnCallRespondersDataRelationshipsRespondersDataItems + +class ScheduleOnCallRespondersDataRelationshipsResponders(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_responders_data_items import ScheduleOnCallRespondersDataRelationshipsRespondersDataItems + return { + "data": ([ScheduleOnCallRespondersDataRelationshipsRespondersDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ScheduleOnCallRespondersDataRelationshipsRespondersDataItems], UnsetType]=unset, **kwargs): + """ + Defines the list of per-position (previous, current, next) responder groups for the schedule. + + :param data: Array of references to the responder groups included in the response. + :type data: [ScheduleOnCallRespondersDataRelationshipsRespondersDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_responders_data_items.py b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_responders_data_items.py new file mode 100644 index 0000000000..549e8f3a60 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_responders_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_responders_data_items_type import ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType + +class ScheduleOnCallRespondersDataRelationshipsRespondersDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_responders_data_items_type import ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType + return { + "id": (str,), + "type": (ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType, **kwargs): + """ + Represents a reference to one position's (previous, current, or next) responder group. + + :param id: Unique identifier of the responder group. + :type id: str + + :param type: Identifies the resource type for a responder group linked to a schedule's on-call responders lookup. + :type type: ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_responders_data_items_type.py b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_responders_data_items_type.py new file mode 100644 index 0000000000..a9569fae12 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_responders_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType(ModelSimple): + """ + Identifies the resource type for a responder group linked to a schedule's on-call responders lookup. + + :param value: If omitted defaults to "schedule_oncall_responder". Must be one of ["schedule_oncall_responder"]. + :type value: str + """ + + allowed_values = { + "schedule_oncall_responder", + } + SCHEDULE_ONCALL_RESPONDER: ClassVar["ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType.SCHEDULE_ONCALL_RESPONDER = ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType("schedule_oncall_responder") diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_schedule.py b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_schedule.py new file mode 100644 index 0000000000..399e131531 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_schedule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_schedule_data import ScheduleOnCallRespondersDataRelationshipsScheduleData + +class ScheduleOnCallRespondersDataRelationshipsSchedule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_schedule_data import ScheduleOnCallRespondersDataRelationshipsScheduleData + return { + "data": (ScheduleOnCallRespondersDataRelationshipsScheduleData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ScheduleOnCallRespondersDataRelationshipsScheduleData, UnsetType]=unset, **kwargs): + """ + Defines the relationship to the schedule this on-call responders lookup was performed for. + + :param data: Represents a reference to the schedule this on-call responders lookup was performed for. + :type data: ScheduleOnCallRespondersDataRelationshipsScheduleData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_schedule_data.py b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_schedule_data.py new file mode 100644 index 0000000000..e6b11b8fa3 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_schedule_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_schedule_data_type import ScheduleOnCallRespondersDataRelationshipsScheduleDataType + +class ScheduleOnCallRespondersDataRelationshipsScheduleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_schedule_data_type import ScheduleOnCallRespondersDataRelationshipsScheduleDataType + return { + "id": (str,), + "type": (ScheduleOnCallRespondersDataRelationshipsScheduleDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ScheduleOnCallRespondersDataRelationshipsScheduleDataType, **kwargs): + """ + Represents a reference to the schedule this on-call responders lookup was performed for. + + :param id: Unique identifier of the schedule. + :type id: str + + :param type: Identifies the resource type for the schedule associated with this on-call responders lookup. + :type type: ScheduleOnCallRespondersDataRelationshipsScheduleDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_schedule_data_type.py b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_schedule_data_type.py new file mode 100644 index 0000000000..a3091a8617 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_data_relationships_schedule_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleOnCallRespondersDataRelationshipsScheduleDataType(ModelSimple): + """ + Identifies the resource type for the schedule associated with this on-call responders lookup. + + :param value: If omitted defaults to "schedules". Must be one of ["schedules"]. + :type value: str + """ + + allowed_values = { + "schedules", + } + SCHEDULES: ClassVar["ScheduleOnCallRespondersDataRelationshipsScheduleDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleOnCallRespondersDataRelationshipsScheduleDataType.SCHEDULES = ScheduleOnCallRespondersDataRelationshipsScheduleDataType("schedules") diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_data_type.py b/datadog_api_client/v2/model/schedule_on_call_responders_data_type.py new file mode 100644 index 0000000000..059271a754 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleOnCallRespondersDataType(ModelSimple): + """ + Represents the resource type for a schedule's grouped on-call responders across the previous, current, and next positions. + + :param value: If omitted defaults to "schedule_oncall_responders". Must be one of ["schedule_oncall_responders"]. + :type value: str + """ + + allowed_values = { + "schedule_oncall_responders", + } + SCHEDULE_ONCALL_RESPONDERS: ClassVar["ScheduleOnCallRespondersDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleOnCallRespondersDataType.SCHEDULE_ONCALL_RESPONDERS = ScheduleOnCallRespondersDataType("schedule_oncall_responders") diff --git a/datadog_api_client/v2/model/schedule_on_call_responders_included.py b/datadog_api_client/v2/model/schedule_on_call_responders_included.py new file mode 100644 index 0000000000..dba531afb0 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_on_call_responders_included.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScheduleOnCallRespondersIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Represents a union of related resources included in the response, such as responder groups, shifts, schedules, and users. + + :param attributes: Attributes for one position's (previous, current, or next) group of on-call responder shifts. + :type attributes: ScheduleOnCallResponderDataAttributes, optional + + :param id: Unique identifier of this responder group. + :type id: str, optional + + :param relationships: Relationships for a single position's (previous, current, or next) responder group. + :type relationships: ScheduleOnCallResponderDataRelationships, optional + + :param type: Represents the resource type for a single position's (previous, current, or next) group of on-call responder shifts. + :type type: ScheduleOnCallResponderDataType + """ + 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.schedule_on_call_responder_data import ScheduleOnCallResponderData + from datadog_api_client.v2.model.shift_data import ShiftData + from datadog_api_client.v2.model.schedule_data import ScheduleData + from datadog_api_client.v2.model.user import User + return { + "oneOf": [ + ScheduleOnCallResponderData, + ShiftData, + ScheduleData, + User, + ], + } diff --git a/datadog_api_client/v2/model/schedule_request_data_attributes_layers_items_members_items.py b/datadog_api_client/v2/model/schedule_request_data_attributes_layers_items_members_items.py new file mode 100644 index 0000000000..0bd19ae69c --- /dev/null +++ b/datadog_api_client/v2/model/schedule_request_data_attributes_layers_items_members_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_request_data_attributes_layers_items_members_items_user import ScheduleRequestDataAttributesLayersItemsMembersItemsUser + +class ScheduleRequestDataAttributesLayersItemsMembersItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_request_data_attributes_layers_items_members_items_user import ScheduleRequestDataAttributesLayersItemsMembersItemsUser + return { + "user": (ScheduleRequestDataAttributesLayersItemsMembersItemsUser,), + } + attribute_map = { + "user": "user", + } + + def __init__(self_, user: Union[ScheduleRequestDataAttributesLayersItemsMembersItemsUser, UnsetType]=unset, **kwargs): + """ + Defines a single member within a schedule layer, including the reference to the underlying user. + + :param user: Identifies the user participating in this layer as a single object with an ``id``. + :type user: ScheduleRequestDataAttributesLayersItemsMembersItemsUser, optional + """ + if user is not unset: + kwargs["user"] = user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_request_data_attributes_layers_items_members_items_user.py b/datadog_api_client/v2/model/schedule_request_data_attributes_layers_items_members_items_user.py new file mode 100644 index 0000000000..80cbd82d5e --- /dev/null +++ b/datadog_api_client/v2/model/schedule_request_data_attributes_layers_items_members_items_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScheduleRequestDataAttributesLayersItemsMembersItemsUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, **kwargs): + """ + Identifies the user participating in this layer as a single object with an ``id``. + + :param id: The user's ID. + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_target.py b/datadog_api_client/v2/model/schedule_target.py new file mode 100644 index 0000000000..17668549df --- /dev/null +++ b/datadog_api_client/v2/model/schedule_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_target_type import ScheduleTargetType + +class ScheduleTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_target_type import ScheduleTargetType + return { + "id": (str,), + "type": (ScheduleTargetType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ScheduleTargetType, **kwargs): + """ + Represents a schedule target for an escalation policy step, including its ID and resource type. This is a shortcut for a configured schedule target with position set to 'current'. + + :param id: Specifies the unique identifier of the schedule resource. + :type id: str + + :param type: Indicates that the resource is of type ``schedules``. + :type type: ScheduleTargetType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_target_position.py b/datadog_api_client/v2/model/schedule_target_position.py new file mode 100644 index 0000000000..08baf70e81 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_target_position.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleTargetPosition(ModelSimple): + """ + Specifies the position of a schedule target (example `previous`, `current`, or `next`). + + :param value: Must be one of ["previous", "current", "next"]. + :type value: str + """ + + allowed_values = { + "previous", + "current", + "next", + } + PREVIOUS: ClassVar["ScheduleTargetPosition"] + CURRENT: ClassVar["ScheduleTargetPosition"] + NEXT: ClassVar["ScheduleTargetPosition"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleTargetPosition.PREVIOUS = ScheduleTargetPosition("previous") +ScheduleTargetPosition.CURRENT = ScheduleTargetPosition("current") +ScheduleTargetPosition.NEXT = ScheduleTargetPosition("next") diff --git a/datadog_api_client/v2/model/schedule_target_type.py b/datadog_api_client/v2/model/schedule_target_type.py new file mode 100644 index 0000000000..b293305ef7 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_target_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleTargetType(ModelSimple): + """ + Indicates that the resource is of type `schedules`. + + :param value: If omitted defaults to "schedules". Must be one of ["schedules"]. + :type value: str + """ + + allowed_values = { + "schedules", + } + SCHEDULES: ClassVar["ScheduleTargetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleTargetType.SCHEDULES = ScheduleTargetType("schedules") diff --git a/datadog_api_client/v2/model/schedule_trigger.py b/datadog_api_client/v2/model/schedule_trigger.py new file mode 100644 index 0000000000..0bdb31bb11 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_trigger.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_trigger_overlap_behavior import ScheduleTriggerOverlapBehavior + +class ScheduleTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_trigger_overlap_behavior import ScheduleTriggerOverlapBehavior + return { + "overlap_behavior": (ScheduleTriggerOverlapBehavior,), + "rrule_expression": (str,), + } + attribute_map = { + "overlap_behavior": "overlapBehavior", + "rrule_expression": "rruleExpression", + } + + def __init__(self_, rrule_expression: str, overlap_behavior: Union[ScheduleTriggerOverlapBehavior, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from a Schedule. The workflow must be published. + + :param overlap_behavior: Controls whether a scheduled workflow run may start while another instance is still running. + :type overlap_behavior: ScheduleTriggerOverlapBehavior, optional + + :param rrule_expression: Recurrence rule expression for scheduling. + :type rrule_expression: str + """ + if overlap_behavior is not unset: + kwargs["overlap_behavior"] = overlap_behavior + super().__init__(kwargs) + + + self_.rrule_expression = rrule_expression diff --git a/datadog_api_client/v2/model/schedule_trigger_overlap_behavior.py b/datadog_api_client/v2/model/schedule_trigger_overlap_behavior.py new file mode 100644 index 0000000000..56a31fab1c --- /dev/null +++ b/datadog_api_client/v2/model/schedule_trigger_overlap_behavior.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleTriggerOverlapBehavior(ModelSimple): + """ + Controls whether a scheduled workflow run may start while another instance is still running. + + :param value: If omitted defaults to "EXCLUSIVE_RUN". Must be one of ["EXCLUSIVE_RUN", "OVERLAP_ALLOWED"]. + :type value: str + """ + + allowed_values = { + "EXCLUSIVE_RUN", + "OVERLAP_ALLOWED", + } + EXCLUSIVE_RUN: ClassVar["ScheduleTriggerOverlapBehavior"] + OVERLAP_ALLOWED: ClassVar["ScheduleTriggerOverlapBehavior"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleTriggerOverlapBehavior.EXCLUSIVE_RUN = ScheduleTriggerOverlapBehavior("EXCLUSIVE_RUN") +ScheduleTriggerOverlapBehavior.OVERLAP_ALLOWED = ScheduleTriggerOverlapBehavior("OVERLAP_ALLOWED") diff --git a/datadog_api_client/v2/model/schedule_trigger_wrapper.py b/datadog_api_client/v2/model/schedule_trigger_wrapper.py new file mode 100644 index 0000000000..1f6dd695e1 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_trigger import ScheduleTrigger + +class ScheduleTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_trigger import ScheduleTrigger + return { + "schedule_trigger": (ScheduleTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "schedule_trigger": "scheduleTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, schedule_trigger: ScheduleTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Schedule-based trigger. + + :param schedule_trigger: Trigger a workflow from a Schedule. The workflow must be published. + :type schedule_trigger: ScheduleTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.schedule_trigger = schedule_trigger diff --git a/datadog_api_client/v2/model/schedule_update_request.py b/datadog_api_client/v2/model/schedule_update_request.py new file mode 100644 index 0000000000..5b83e094ab --- /dev/null +++ b/datadog_api_client/v2/model/schedule_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_update_request_data import ScheduleUpdateRequestData + +class ScheduleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_update_request_data import ScheduleUpdateRequestData + return { + "data": (ScheduleUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ScheduleUpdateRequestData, **kwargs): + """ + A top-level wrapper for a schedule update request, referring to the ``data`` object with the new details. + + :param data: Contains all data needed to update an existing schedule, including its attributes (such as name and time zone) and any relationships to teams. + :type data: ScheduleUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/schedule_update_request_data.py b/datadog_api_client/v2/model/schedule_update_request_data.py new file mode 100644 index 0000000000..3e5bd283ac --- /dev/null +++ b/datadog_api_client/v2/model/schedule_update_request_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_update_request_data_attributes import ScheduleUpdateRequestDataAttributes + from datadog_api_client.v2.model.schedule_update_request_data_relationships import ScheduleUpdateRequestDataRelationships + from datadog_api_client.v2.model.schedule_update_request_data_type import ScheduleUpdateRequestDataType + +class ScheduleUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_update_request_data_attributes import ScheduleUpdateRequestDataAttributes + from datadog_api_client.v2.model.schedule_update_request_data_relationships import ScheduleUpdateRequestDataRelationships + from datadog_api_client.v2.model.schedule_update_request_data_type import ScheduleUpdateRequestDataType + return { + "attributes": (ScheduleUpdateRequestDataAttributes,), + "id": (str,), + "relationships": (ScheduleUpdateRequestDataRelationships,), + "type": (ScheduleUpdateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ScheduleUpdateRequestDataAttributes, id: str, type: ScheduleUpdateRequestDataType, relationships: Union[ScheduleUpdateRequestDataRelationships, UnsetType]=unset, **kwargs): + """ + Contains all data needed to update an existing schedule, including its attributes (such as name and time zone) and any relationships to teams. + + :param attributes: Defines the updatable attributes for a schedule, such as name, time zone, and layers. + :type attributes: ScheduleUpdateRequestDataAttributes + + :param id: The ID of the schedule to be updated. + :type id: str + + :param relationships: Houses relationships for the schedule update, typically referencing teams. + :type relationships: ScheduleUpdateRequestDataRelationships, optional + + :param type: Schedules resource type. + :type type: ScheduleUpdateRequestDataType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_update_request_data_attributes.py b/datadog_api_client/v2/model/schedule_update_request_data_attributes.py new file mode 100644 index 0000000000..bf27d62e91 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_update_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_update_request_data_attributes_layers_items import ScheduleUpdateRequestDataAttributesLayersItems + +class ScheduleUpdateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_update_request_data_attributes_layers_items import ScheduleUpdateRequestDataAttributesLayersItems + return { + "layers": ([ScheduleUpdateRequestDataAttributesLayersItems],), + "name": (str,), + "time_zone": (str,), + } + attribute_map = { + "layers": "layers", + "name": "name", + "time_zone": "time_zone", + } + + def __init__(self_, layers: List[ScheduleUpdateRequestDataAttributesLayersItems], name: str, time_zone: str, **kwargs): + """ + Defines the updatable attributes for a schedule, such as name, time zone, and layers. + + :param layers: The updated list of layers (rotations) for this schedule. + :type layers: [ScheduleUpdateRequestDataAttributesLayersItems] + + :param name: A short name for the schedule. + :type name: str + + :param time_zone: The time zone used when interpreting rotation times. + :type time_zone: str + """ + super().__init__(kwargs) + + + self_.layers = layers + self_.name = name + self_.time_zone = time_zone diff --git a/datadog_api_client/v2/model/schedule_update_request_data_attributes_layers_items.py b/datadog_api_client/v2/model/schedule_update_request_data_attributes_layers_items.py new file mode 100644 index 0000000000..52c4de92e0 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_update_request_data_attributes_layers_items.py @@ -0,0 +1,105 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.layer_attributes_interval import LayerAttributesInterval + from datadog_api_client.v2.model.schedule_request_data_attributes_layers_items_members_items import ScheduleRequestDataAttributesLayersItemsMembersItems + from datadog_api_client.v2.model.time_restriction import TimeRestriction + +class ScheduleUpdateRequestDataAttributesLayersItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.layer_attributes_interval import LayerAttributesInterval + from datadog_api_client.v2.model.schedule_request_data_attributes_layers_items_members_items import ScheduleRequestDataAttributesLayersItemsMembersItems + from datadog_api_client.v2.model.time_restriction import TimeRestriction + return { + "effective_date": (datetime,), + "end_date": (datetime,), + "id": (str,), + "interval": (LayerAttributesInterval,), + "members": ([ScheduleRequestDataAttributesLayersItemsMembersItems],), + "name": (str,), + "restrictions": ([TimeRestriction],), + "rotation_start": (datetime,), + "time_zone": (str,), + } + attribute_map = { + "effective_date": "effective_date", + "end_date": "end_date", + "id": "id", + "interval": "interval", + "members": "members", + "name": "name", + "restrictions": "restrictions", + "rotation_start": "rotation_start", + "time_zone": "time_zone", + } + + def __init__(self_, effective_date: datetime, interval: LayerAttributesInterval, members: List[ScheduleRequestDataAttributesLayersItemsMembersItems], name: str, rotation_start: datetime, end_date: Union[datetime, UnsetType]=unset, id: Union[str, UnsetType]=unset, restrictions: Union[List[TimeRestriction], UnsetType]=unset, time_zone: Union[str, UnsetType]=unset, **kwargs): + """ + Represents a layer within a schedule update, including rotation details, members, + and optional restrictions. + + :param effective_date: When this updated layer takes effect (ISO 8601 format). + :type effective_date: datetime + + :param end_date: When this updated layer should stop being active (ISO 8601 format). + :type end_date: datetime, optional + + :param id: A unique identifier for the layer being updated. + :type id: str, optional + + :param interval: Defines how often the rotation repeats, using a combination of days and optional seconds. Should be at least 1 hour. + :type interval: LayerAttributesInterval + + :param members: The members assigned to this layer. + :type members: [ScheduleRequestDataAttributesLayersItemsMembersItems] + + :param name: The name for this layer (for example, "Secondary Coverage"). + :type name: str + + :param restrictions: Any time restrictions that define when this layer is active. + :type restrictions: [TimeRestriction], optional + + :param rotation_start: The date/time at which the rotation begins (ISO 8601 format). + :type rotation_start: datetime + + :param time_zone: The time zone for this layer. + :type time_zone: str, optional + """ + if end_date is not unset: + kwargs["end_date"] = end_date + if id is not unset: + kwargs["id"] = id + if restrictions is not unset: + kwargs["restrictions"] = restrictions + if time_zone is not unset: + kwargs["time_zone"] = time_zone + super().__init__(kwargs) + + + self_.effective_date = effective_date + self_.interval = interval + self_.members = members + self_.name = name + self_.rotation_start = rotation_start diff --git a/datadog_api_client/v2/model/schedule_update_request_data_relationships.py b/datadog_api_client/v2/model/schedule_update_request_data_relationships.py new file mode 100644 index 0000000000..568f86a538 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_update_request_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + +class ScheduleUpdateRequestDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams + return { + "teams": (DataRelationshipsTeams,), + } + attribute_map = { + "teams": "teams", + } + + def __init__(self_, teams: Union[DataRelationshipsTeams, UnsetType]=unset, **kwargs): + """ + Houses relationships for the schedule update, typically referencing teams. + + :param teams: Associates teams with this schedule in a data structure. + :type teams: DataRelationshipsTeams, optional + """ + if teams is not unset: + kwargs["teams"] = teams + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_update_request_data_type.py b/datadog_api_client/v2/model/schedule_update_request_data_type.py new file mode 100644 index 0000000000..d4e68aff25 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_update_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleUpdateRequestDataType(ModelSimple): + """ + Schedules resource type. + + :param value: If omitted defaults to "schedules". Must be one of ["schedules"]. + :type value: str + """ + + allowed_values = { + "schedules", + } + SCHEDULES: ClassVar["ScheduleUpdateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleUpdateRequestDataType.SCHEDULES = ScheduleUpdateRequestDataType("schedules") diff --git a/datadog_api_client/v2/model/schedule_user.py b/datadog_api_client/v2/model/schedule_user.py new file mode 100644 index 0000000000..487e2d1c92 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_user.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.schedule_user_attributes import ScheduleUserAttributes + from datadog_api_client.v2.model.schedule_user_type import ScheduleUserType + +class ScheduleUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.schedule_user_attributes import ScheduleUserAttributes + from datadog_api_client.v2.model.schedule_user_type import ScheduleUserType + return { + "attributes": (ScheduleUserAttributes,), + "id": (str,), + "type": (ScheduleUserType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ScheduleUserType, attributes: Union[ScheduleUserAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Represents a user object in the context of a schedule, including their ``id`` , type, and basic attributes. + + :param attributes: Provides basic user information for a schedule, including a name and email address. + :type attributes: ScheduleUserAttributes, optional + + :param id: The unique user identifier. + :type id: str, optional + + :param type: Users resource type. + :type type: ScheduleUserType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/schedule_user_attributes.py b/datadog_api_client/v2/model/schedule_user_attributes.py new file mode 100644 index 0000000000..a1b30cf332 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_user_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_attributes_status import UserAttributesStatus + +class ScheduleUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_attributes_status import UserAttributesStatus + return { + "email": (str,), + "name": (str,), + "status": (UserAttributesStatus,), + } + attribute_map = { + "email": "email", + "name": "name", + "status": "status", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, status: Union[UserAttributesStatus, UnsetType]=unset, **kwargs): + """ + Provides basic user information for a schedule, including a name and email address. + + :param email: The user's email address. + :type email: str, optional + + :param name: The user's name. + :type name: str, optional + + :param status: The user's status. + :type status: UserAttributesStatus, optional + """ + if email is not unset: + kwargs["email"] = email + if name is not unset: + kwargs["name"] = name + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/schedule_user_type.py b/datadog_api_client/v2/model/schedule_user_type.py new file mode 100644 index 0000000000..a828878041 --- /dev/null +++ b/datadog_api_client/v2/model/schedule_user_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScheduleUserType(ModelSimple): + """ + Users resource type. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["ScheduleUserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScheduleUserType.USERS = ScheduleUserType("users") diff --git a/datadog_api_client/v2/model/scorecard_list_response_attributes.py b/datadog_api_client/v2/model/scorecard_list_response_attributes.py new file mode 100644 index 0000000000..c7e7251856 --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_list_response_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScorecardListResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "description": (str,), + "modified_at": (datetime,), + "name": (str,), + } + attribute_map = { + "created_at": "created_at", + "description": "description", + "modified_at": "modified_at", + "name": "name", + } + + def __init__(self_, created_at: datetime, modified_at: datetime, name: str, description: Union[str, UnsetType]=unset, **kwargs): + """ + Scorecard attributes. + + :param created_at: Creation time of the scorecard. + :type created_at: datetime + + :param description: The description of the scorecard. + :type description: str, optional + + :param modified_at: Time of last scorecard modification. + :type modified_at: datetime + + :param name: The name of the scorecard. + :type name: str + """ + if description is not unset: + kwargs["description"] = description + super().__init__(kwargs) + + + self_.created_at = created_at + self_.modified_at = modified_at + self_.name = name diff --git a/datadog_api_client/v2/model/scorecard_list_response_data.py b/datadog_api_client/v2/model/scorecard_list_response_data.py new file mode 100644 index 0000000000..e259ed9a33 --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_list_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scorecard_list_response_attributes import ScorecardListResponseAttributes + from datadog_api_client.v2.model.scorecard_list_type import ScorecardListType + +class ScorecardListResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scorecard_list_response_attributes import ScorecardListResponseAttributes + from datadog_api_client.v2.model.scorecard_list_type import ScorecardListType + return { + "attributes": (ScorecardListResponseAttributes,), + "id": (str,), + "type": (ScorecardListType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ScorecardListResponseAttributes, id: str, type: ScorecardListType, **kwargs): + """ + Scorecard data. + + :param attributes: Scorecard attributes. + :type attributes: ScorecardListResponseAttributes + + :param id: The unique ID of the scorecard. + :type id: str + + :param type: The JSON:API type for scorecard list. + :type type: ScorecardListType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/scorecard_list_type.py b/datadog_api_client/v2/model/scorecard_list_type.py new file mode 100644 index 0000000000..77c107d7fb --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_list_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScorecardListType(ModelSimple): + """ + The JSON:API type for scorecard list. + + :param value: If omitted defaults to "scorecard". Must be one of ["scorecard"]. + :type value: str + """ + + allowed_values = { + "scorecard", + } + SCORECARD: ClassVar["ScorecardListType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScorecardListType.SCORECARD = ScorecardListType("scorecard") diff --git a/datadog_api_client/v2/model/scorecard_score_attributes.py b/datadog_api_client/v2/model/scorecard_score_attributes.py new file mode 100644 index 0000000000..963b8ae1f8 --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_score_attributes.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scorecard_scores_aggregation import ScorecardScoresAggregation + +class ScorecardScoreAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scorecard_scores_aggregation import ScorecardScoresAggregation + return { + "aggregation": (ScorecardScoresAggregation,), + "denominator": (int,), + "level": (int,), + "numerator": (int,), + "score": (float,), + "total_entities": (int,), + "total_fail": (int,), + "total_no_data": (int,), + "total_pass": (int,), + "total_skip": (int,), + } + attribute_map = { + "aggregation": "aggregation", + "denominator": "denominator", + "level": "level", + "numerator": "numerator", + "score": "score", + "total_entities": "total_entities", + "total_fail": "total_fail", + "total_no_data": "total_no_data", + "total_pass": "total_pass", + "total_skip": "total_skip", + } + + def __init__(self_, aggregation: Union[ScorecardScoresAggregation, UnsetType]=unset, denominator: Union[int, UnsetType]=unset, level: Union[int, UnsetType]=unset, numerator: Union[int, UnsetType]=unset, score: Union[float, UnsetType]=unset, total_entities: Union[int, UnsetType]=unset, total_fail: Union[int, UnsetType]=unset, total_no_data: Union[int, UnsetType]=unset, total_pass: Union[int, UnsetType]=unset, total_skip: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of a scorecard score. + + :param aggregation: Dimension to group scores by. + :type aggregation: ScorecardScoresAggregation, optional + + :param denominator: The denominator used to compute the score ratio. + :type denominator: int, optional + + :param level: The maturity level of the associated rule. + :type level: int, optional + + :param numerator: The numerator used to compute the score ratio. + :type numerator: int, optional + + :param score: The computed score ratio (numerator/denominator), from 0 to 1. + :type score: float, optional + + :param total_entities: The total number of entities evaluated. + :type total_entities: int, optional + + :param total_fail: The number of rules that failed. + :type total_fail: int, optional + + :param total_no_data: The number of rules with no data. + :type total_no_data: int, optional + + :param total_pass: The number of rules that passed. + :type total_pass: int, optional + + :param total_skip: The number of rules that were skipped. + :type total_skip: int, optional + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if denominator is not unset: + kwargs["denominator"] = denominator + if level is not unset: + kwargs["level"] = level + if numerator is not unset: + kwargs["numerator"] = numerator + if score is not unset: + kwargs["score"] = score + if total_entities is not unset: + kwargs["total_entities"] = total_entities + if total_fail is not unset: + kwargs["total_fail"] = total_fail + if total_no_data is not unset: + kwargs["total_no_data"] = total_no_data + if total_pass is not unset: + kwargs["total_pass"] = total_pass + if total_skip is not unset: + kwargs["total_skip"] = total_skip + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/scorecard_score_data.py b/datadog_api_client/v2/model/scorecard_score_data.py new file mode 100644 index 0000000000..d173f635f3 --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_score_data.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scorecard_score_attributes import ScorecardScoreAttributes + from datadog_api_client.v2.model.scorecard_score_relationships import ScorecardScoreRelationships + from datadog_api_client.v2.model.scorecard_score_data_type import ScorecardScoreDataType + +class ScorecardScoreData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scorecard_score_attributes import ScorecardScoreAttributes + from datadog_api_client.v2.model.scorecard_score_relationships import ScorecardScoreRelationships + from datadog_api_client.v2.model.scorecard_score_data_type import ScorecardScoreDataType + return { + "attributes": (ScorecardScoreAttributes,), + "id": (str,), + "relationships": (ScorecardScoreRelationships,), + "type": (ScorecardScoreDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: ScorecardScoreDataType, attributes: Union[ScorecardScoreAttributes, UnsetType]=unset, relationships: Union[ScorecardScoreRelationships, UnsetType]=unset, **kwargs): + """ + A scorecard score object for a single entity, rule, scorecard, service, or team. + + :param attributes: Attributes of a scorecard score. + :type attributes: ScorecardScoreAttributes, optional + + :param id: The ID of the entity or resource being scored. + :type id: str + + :param relationships: Relationships for a scorecard score, depending on the aggregation type. + :type relationships: ScorecardScoreRelationships, optional + + :param type: The JSON:API resource type. + :type type: ScorecardScoreDataType + """ + 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/datadog_api_client/v2/model/scorecard_score_data_type.py b/datadog_api_client/v2/model/scorecard_score_data_type.py new file mode 100644 index 0000000000..6c3d71ae24 --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_score_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScorecardScoreDataType(ModelSimple): + """ + The JSON:API resource type. + + :param value: If omitted defaults to "score". Must be one of ["score"]. + :type value: str + """ + + allowed_values = { + "score", + } + SCORE: ClassVar["ScorecardScoreDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScorecardScoreDataType.SCORE = ScorecardScoreDataType("score") diff --git a/datadog_api_client/v2/model/scorecard_score_relationship_data.py b/datadog_api_client/v2/model/scorecard_score_relationship_data.py new file mode 100644 index 0000000000..a813babcf6 --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_score_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ScorecardScoreRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: str, **kwargs): + """ + A relationship data object for a score. + + :param id: The ID of the related resource. + :type id: str + + :param type: The type of the related resource. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/scorecard_score_relationship_item.py b/datadog_api_client/v2/model/scorecard_score_relationship_item.py new file mode 100644 index 0000000000..b0535a3a63 --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_score_relationship_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scorecard_score_relationship_data import ScorecardScoreRelationshipData + +class ScorecardScoreRelationshipItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scorecard_score_relationship_data import ScorecardScoreRelationshipData + return { + "data": (ScorecardScoreRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ScorecardScoreRelationshipData, UnsetType]=unset, **kwargs): + """ + A relationship item for a score. + + :param data: A relationship data object for a score. + :type data: ScorecardScoreRelationshipData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/scorecard_score_relationships.py b/datadog_api_client/v2/model/scorecard_score_relationships.py new file mode 100644 index 0000000000..3604ee8c36 --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_score_relationships.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.scorecard_score_relationship_item import ScorecardScoreRelationshipItem + +class ScorecardScoreRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.scorecard_score_relationship_item import ScorecardScoreRelationshipItem + return { + "entity": (ScorecardScoreRelationshipItem,), + "rule": (ScorecardScoreRelationshipItem,), + "scorecard": (ScorecardScoreRelationshipItem,), + "service": (ScorecardScoreRelationshipItem,), + "team": (ScorecardScoreRelationshipItem,), + } + attribute_map = { + "entity": "entity", + "rule": "rule", + "scorecard": "scorecard", + "service": "service", + "team": "team", + } + + def __init__(self_, entity: Union[ScorecardScoreRelationshipItem, UnsetType]=unset, rule: Union[ScorecardScoreRelationshipItem, UnsetType]=unset, scorecard: Union[ScorecardScoreRelationshipItem, UnsetType]=unset, service: Union[ScorecardScoreRelationshipItem, UnsetType]=unset, team: Union[ScorecardScoreRelationshipItem, UnsetType]=unset, **kwargs): + """ + Relationships for a scorecard score, depending on the aggregation type. + + :param entity: A relationship item for a score. + :type entity: ScorecardScoreRelationshipItem, optional + + :param rule: A relationship item for a score. + :type rule: ScorecardScoreRelationshipItem, optional + + :param scorecard: A relationship item for a score. + :type scorecard: ScorecardScoreRelationshipItem, optional + + :param service: A relationship item for a score. + :type service: ScorecardScoreRelationshipItem, optional + + :param team: A relationship item for a score. + :type team: ScorecardScoreRelationshipItem, optional + """ + if entity is not unset: + kwargs["entity"] = entity + if rule is not unset: + kwargs["rule"] = rule + if scorecard is not unset: + kwargs["scorecard"] = scorecard + if service is not unset: + kwargs["service"] = service + if team is not unset: + kwargs["team"] = team + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/scorecard_scores_aggregation.py b/datadog_api_client/v2/model/scorecard_scores_aggregation.py new file mode 100644 index 0000000000..ec78a7ffbd --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_scores_aggregation.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScorecardScoresAggregation(ModelSimple): + """ + Dimension to group scores by. + + :param value: Must be one of ["by-entity", "by-rule", "by-scorecard", "by-team", "by-kind"]. + :type value: str + """ + + allowed_values = { + "by-entity", + "by-rule", + "by-scorecard", + "by-team", + "by-kind", + } + BY_ENTITY: ClassVar["ScorecardScoresAggregation"] + BY_RULE: ClassVar["ScorecardScoresAggregation"] + BY_SCORECARD: ClassVar["ScorecardScoresAggregation"] + BY_TEAM: ClassVar["ScorecardScoresAggregation"] + BY_KIND: ClassVar["ScorecardScoresAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScorecardScoresAggregation.BY_ENTITY = ScorecardScoresAggregation("by-entity") +ScorecardScoresAggregation.BY_RULE = ScorecardScoresAggregation("by-rule") +ScorecardScoresAggregation.BY_SCORECARD = ScorecardScoresAggregation("by-scorecard") +ScorecardScoresAggregation.BY_TEAM = ScorecardScoresAggregation("by-team") +ScorecardScoresAggregation.BY_KIND = ScorecardScoresAggregation("by-kind") diff --git a/datadog_api_client/v2/model/scorecard_type.py b/datadog_api_client/v2/model/scorecard_type.py new file mode 100644 index 0000000000..71c811bc73 --- /dev/null +++ b/datadog_api_client/v2/model/scorecard_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ScorecardType(ModelSimple): + """ + The JSON:API type for scorecard. + + :param value: If omitted defaults to "scorecard". Must be one of ["scorecard"]. + :type value: str + """ + + allowed_values = { + "scorecard", + } + SCORECARD: ClassVar["ScorecardType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ScorecardType.SCORECARD = ScorecardType("scorecard") diff --git a/datadog_api_client/v2/model/search_issues_include_query_parameter_item.py b/datadog_api_client/v2/model/search_issues_include_query_parameter_item.py new file mode 100644 index 0000000000..248e907226 --- /dev/null +++ b/datadog_api_client/v2/model/search_issues_include_query_parameter_item.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SearchIssuesIncludeQueryParameterItem(ModelSimple): + """ + Relationship object that should be included in the search response. + + :param value: Must be one of ["issue", "issue.assignee", "issue.case", "issue.team_owners"]. + :type value: str + """ + + allowed_values = { + "issue", + "issue.assignee", + "issue.case", + "issue.team_owners", + } + ISSUE: ClassVar["SearchIssuesIncludeQueryParameterItem"] + ISSUE_ASSIGNEE: ClassVar["SearchIssuesIncludeQueryParameterItem"] + ISSUE_CASE: ClassVar["SearchIssuesIncludeQueryParameterItem"] + ISSUE_TEAM_OWNERS: ClassVar["SearchIssuesIncludeQueryParameterItem"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SearchIssuesIncludeQueryParameterItem.ISSUE = SearchIssuesIncludeQueryParameterItem("issue") +SearchIssuesIncludeQueryParameterItem.ISSUE_ASSIGNEE = SearchIssuesIncludeQueryParameterItem("issue.assignee") +SearchIssuesIncludeQueryParameterItem.ISSUE_CASE = SearchIssuesIncludeQueryParameterItem("issue.case") +SearchIssuesIncludeQueryParameterItem.ISSUE_TEAM_OWNERS = SearchIssuesIncludeQueryParameterItem("issue.team_owners") diff --git a/datadog_api_client/v2/model/seat_assignments_data_type.py b/datadog_api_client/v2/model/seat_assignments_data_type.py new file mode 100644 index 0000000000..ccd0ffa40e --- /dev/null +++ b/datadog_api_client/v2/model/seat_assignments_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SeatAssignmentsDataType(ModelSimple): + """ + Seat assignments resource type. + + :param value: If omitted defaults to "seat-assignments". Must be one of ["seat-assignments"]. + :type value: str + """ + + allowed_values = { + "seat-assignments", + } + SEAT_ASSIGNMENTS: ClassVar["SeatAssignmentsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SeatAssignmentsDataType.SEAT_ASSIGNMENTS = SeatAssignmentsDataType("seat-assignments") diff --git a/datadog_api_client/v2/model/seat_user_data.py b/datadog_api_client/v2/model/seat_user_data.py new file mode 100644 index 0000000000..a675e1b816 --- /dev/null +++ b/datadog_api_client/v2/model/seat_user_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.seat_user_data_attributes import SeatUserDataAttributes + from datadog_api_client.v2.model.seat_user_data_type import SeatUserDataType + +class SeatUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.seat_user_data_attributes import SeatUserDataAttributes + from datadog_api_client.v2.model.seat_user_data_type import SeatUserDataType + return { + "attributes": (SeatUserDataAttributes,), + "id": (str, none_type), + "type": (SeatUserDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SeatUserDataAttributes, UnsetType]=unset, id: Union[str, none_type, UnsetType]=unset, type: Union[SeatUserDataType, UnsetType]=unset, **kwargs): + """ + A seat user resource object containing its ID, type, and associated attributes. + + :param attributes: Attributes of a user assigned to a seat, including their email, name, and assignment timestamp. + :type attributes: SeatUserDataAttributes, optional + + :param id: The ID of the seat user. + :type id: str, none_type, optional + + :param type: Seat users resource type. + :type type: SeatUserDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/seat_user_data_array.py b/datadog_api_client/v2/model/seat_user_data_array.py new file mode 100644 index 0000000000..56db87e132 --- /dev/null +++ b/datadog_api_client/v2/model/seat_user_data_array.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.seat_user_data import SeatUserData + from datadog_api_client.v2.model.seat_user_meta import SeatUserMeta + +class SeatUserDataArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.seat_user_data import SeatUserData + from datadog_api_client.v2.model.seat_user_meta import SeatUserMeta + return { + "data": ([SeatUserData],), + "meta": (SeatUserMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[SeatUserData], UnsetType]=unset, meta: Union[SeatUserMeta, UnsetType]=unset, **kwargs): + """ + A paginated list of seat user resources with associated pagination metadata. + + :param data: The list of seat users. + :type data: [SeatUserData], optional + + :param meta: Pagination metadata for the seat users list response. + :type meta: SeatUserMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/seat_user_data_attributes.py b/datadog_api_client/v2/model/seat_user_data_attributes.py new file mode 100644 index 0000000000..071dac0e8c --- /dev/null +++ b/datadog_api_client/v2/model/seat_user_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SeatUserDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assigned_at": (datetime, none_type), + "email": (str, none_type), + "name": (str, none_type), + } + attribute_map = { + "assigned_at": "assigned_at", + "email": "email", + "name": "name", + } + + def __init__(self_, assigned_at: Union[datetime, none_type, UnsetType]=unset, email: Union[str, none_type, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of a user assigned to a seat, including their email, name, and assignment timestamp. + + :param assigned_at: The date and time the seat was assigned. + :type assigned_at: datetime, none_type, optional + + :param email: The email of the user. + :type email: str, none_type, optional + + :param name: The name of the user. + :type name: str, none_type, optional + """ + if assigned_at is not unset: + kwargs["assigned_at"] = assigned_at + if email is not unset: + kwargs["email"] = email + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/seat_user_data_type.py b/datadog_api_client/v2/model/seat_user_data_type.py new file mode 100644 index 0000000000..57e1e31b8a --- /dev/null +++ b/datadog_api_client/v2/model/seat_user_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SeatUserDataType(ModelSimple): + """ + Seat users resource type. + + :param value: If omitted defaults to "seat-users". Must be one of ["seat-users"]. + :type value: str + """ + + allowed_values = { + "seat-users", + } + SEAT_USERS: ClassVar["SeatUserDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SeatUserDataType.SEAT_USERS = SeatUserDataType("seat-users") diff --git a/datadog_api_client/v2/model/seat_user_meta.py b/datadog_api_client/v2/model/seat_user_meta.py new file mode 100644 index 0000000000..c9117d9599 --- /dev/null +++ b/datadog_api_client/v2/model/seat_user_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SeatUserMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + "next_cursor": (str,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + "next_cursor": "next_cursor", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_cursor: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination metadata for the seat users list response. + + :param cursor: The cursor for the seat users. + :type cursor: str, optional + + :param limit: The limit for the seat users. + :type limit: int, optional + + :param next_cursor: The next cursor for the seat users. + :type next_cursor: str, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + if next_cursor is not unset: + kwargs["next_cursor"] = next_cursor + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secret_rule_array.py b/datadog_api_client/v2/model/secret_rule_array.py new file mode 100644 index 0000000000..81db9f3913 --- /dev/null +++ b/datadog_api_client/v2/model/secret_rule_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secret_rule_data import SecretRuleData + +class SecretRuleArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secret_rule_data import SecretRuleData + return { + "data": ([SecretRuleData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SecretRuleData], **kwargs): + """ + A collection of secret detection rules returned by the list endpoint. + + :param data: The list of secret detection rules. + :type data: [SecretRuleData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/secret_rule_data.py b/datadog_api_client/v2/model/secret_rule_data.py new file mode 100644 index 0000000000..4b1b7e9098 --- /dev/null +++ b/datadog_api_client/v2/model/secret_rule_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secret_rule_data_attributes import SecretRuleDataAttributes + from datadog_api_client.v2.model.secret_rule_data_type import SecretRuleDataType + +class SecretRuleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secret_rule_data_attributes import SecretRuleDataAttributes + from datadog_api_client.v2.model.secret_rule_data_type import SecretRuleDataType + return { + "attributes": (SecretRuleDataAttributes,), + "id": (str,), + "type": (SecretRuleDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: SecretRuleDataType, attributes: Union[SecretRuleDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object representing a secret detection rule, including its attributes and resource type. + + :param attributes: The attributes of a secret detection rule, including its pattern, priority, and validation configuration. + :type attributes: SecretRuleDataAttributes, optional + + :param id: The unique identifier of the secret rule resource. + :type id: str, optional + + :param type: Secret rule resource type. + :type type: SecretRuleDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/secret_rule_data_attributes.py b/datadog_api_client/v2/model/secret_rule_data_attributes.py new file mode 100644 index 0000000000..65f6357308 --- /dev/null +++ b/datadog_api_client/v2/model/secret_rule_data_attributes.py @@ -0,0 +1,105 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secret_rule_data_attributes_match_validation import SecretRuleDataAttributesMatchValidation + +class SecretRuleDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secret_rule_data_attributes_match_validation import SecretRuleDataAttributesMatchValidation + return { + "default_included_keywords": ([str],), + "description": (str,), + "license": (str,), + "match_validation": (SecretRuleDataAttributesMatchValidation,), + "name": (str,), + "pattern": (str,), + "priority": (str,), + "sds_id": (str,), + "validators": ([str],), + } + attribute_map = { + "default_included_keywords": "default_included_keywords", + "description": "description", + "license": "license", + "match_validation": "match_validation", + "name": "name", + "pattern": "pattern", + "priority": "priority", + "sds_id": "sds_id", + "validators": "validators", + } + + def __init__(self_, default_included_keywords: Union[List[str], UnsetType]=unset, description: Union[str, UnsetType]=unset, license: Union[str, UnsetType]=unset, match_validation: Union[SecretRuleDataAttributesMatchValidation, UnsetType]=unset, name: Union[str, UnsetType]=unset, pattern: Union[str, UnsetType]=unset, priority: Union[str, UnsetType]=unset, sds_id: Union[str, UnsetType]=unset, validators: Union[List[str], UnsetType]=unset, **kwargs): + """ + The attributes of a secret detection rule, including its pattern, priority, and validation configuration. + + :param default_included_keywords: A list of keywords that are included by default when scanning for secrets matching this rule. + :type default_included_keywords: [str], optional + + :param description: A detailed explanation of what type of secret this rule detects. + :type description: str, optional + + :param license: The license under which this secret rule is distributed. + :type license: str, optional + + :param match_validation: Configuration for validating whether a detected secret is active by making an HTTP request and inspecting the response. + :type match_validation: SecretRuleDataAttributesMatchValidation, optional + + :param name: The unique name of the secret detection rule. + :type name: str, optional + + :param pattern: The regular expression pattern used to identify potential secrets in source code or configuration. + :type pattern: str, optional + + :param priority: The priority level of this rule, used to rank findings when multiple rules match. + :type priority: str, optional + + :param sds_id: The identifier of the corresponding Sensitive Data Scanner rule, if one exists. + :type sds_id: str, optional + + :param validators: A list of validator identifiers used to further confirm a detected secret is genuine. + :type validators: [str], optional + """ + if default_included_keywords is not unset: + kwargs["default_included_keywords"] = default_included_keywords + if description is not unset: + kwargs["description"] = description + if license is not unset: + kwargs["license"] = license + if match_validation is not unset: + kwargs["match_validation"] = match_validation + if name is not unset: + kwargs["name"] = name + if pattern is not unset: + kwargs["pattern"] = pattern + if priority is not unset: + kwargs["priority"] = priority + if sds_id is not unset: + kwargs["sds_id"] = sds_id + if validators is not unset: + kwargs["validators"] = validators + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secret_rule_data_attributes_match_validation.py b/datadog_api_client/v2/model/secret_rule_data_attributes_match_validation.py new file mode 100644 index 0000000000..81214009b5 --- /dev/null +++ b/datadog_api_client/v2/model/secret_rule_data_attributes_match_validation.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secret_rule_data_attributes_match_validation_invalid_http_status_code_items import SecretRuleDataAttributesMatchValidationInvalidHttpStatusCodeItems + from datadog_api_client.v2.model.secret_rule_data_attributes_match_validation_valid_http_status_code_items import SecretRuleDataAttributesMatchValidationValidHttpStatusCodeItems + +class SecretRuleDataAttributesMatchValidation(ModelNormal): + validations = { + "timeout_seconds": { + "inclusive_maximum": 1.8446744073709552e+19, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secret_rule_data_attributes_match_validation_invalid_http_status_code_items import SecretRuleDataAttributesMatchValidationInvalidHttpStatusCodeItems + from datadog_api_client.v2.model.secret_rule_data_attributes_match_validation_valid_http_status_code_items import SecretRuleDataAttributesMatchValidationValidHttpStatusCodeItems + return { + "endpoint": (str,), + "hosts": ([str],), + "http_method": (str,), + "invalid_http_status_code": ([SecretRuleDataAttributesMatchValidationInvalidHttpStatusCodeItems],), + "request_headers": ({str: (str,)},), + "timeout_seconds": (int,), + "type": (str,), + "valid_http_status_code": ([SecretRuleDataAttributesMatchValidationValidHttpStatusCodeItems],), + } + attribute_map = { + "endpoint": "endpoint", + "hosts": "hosts", + "http_method": "http_method", + "invalid_http_status_code": "invalid_http_status_code", + "request_headers": "request_headers", + "timeout_seconds": "timeout_seconds", + "type": "type", + "valid_http_status_code": "valid_http_status_code", + } + + def __init__(self_, endpoint: Union[str, UnsetType]=unset, hosts: Union[List[str], UnsetType]=unset, http_method: Union[str, UnsetType]=unset, invalid_http_status_code: Union[List[SecretRuleDataAttributesMatchValidationInvalidHttpStatusCodeItems], UnsetType]=unset, request_headers: Union[Dict[str, str], UnsetType]=unset, timeout_seconds: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, valid_http_status_code: Union[List[SecretRuleDataAttributesMatchValidationValidHttpStatusCodeItems], UnsetType]=unset, **kwargs): + """ + Configuration for validating whether a detected secret is active by making an HTTP request and inspecting the response. + + :param endpoint: The URL endpoint to call when validating a detected secret. + :type endpoint: str, optional + + :param hosts: The list of hostnames to include when performing secret match validation. + :type hosts: [str], optional + + :param http_method: The HTTP method (e.g., GET, POST) to use when making the validation request. + :type http_method: str, optional + + :param invalid_http_status_code: The HTTP status code ranges that indicate the detected secret is invalid or inactive. + :type invalid_http_status_code: [SecretRuleDataAttributesMatchValidationInvalidHttpStatusCodeItems], optional + + :param request_headers: A map of HTTP header names to values to include in the validation request. + :type request_headers: {str: (str,)}, optional + + :param timeout_seconds: The maximum number of seconds to wait for a response during validation before timing out. + :type timeout_seconds: int, optional + + :param type: The type of match validation to perform (e.g., http). + :type type: str, optional + + :param valid_http_status_code: The HTTP status code ranges that indicate the detected secret is valid and active. + :type valid_http_status_code: [SecretRuleDataAttributesMatchValidationValidHttpStatusCodeItems], optional + """ + if endpoint is not unset: + kwargs["endpoint"] = endpoint + if hosts is not unset: + kwargs["hosts"] = hosts + if http_method is not unset: + kwargs["http_method"] = http_method + if invalid_http_status_code is not unset: + kwargs["invalid_http_status_code"] = invalid_http_status_code + if request_headers is not unset: + kwargs["request_headers"] = request_headers + if timeout_seconds is not unset: + kwargs["timeout_seconds"] = timeout_seconds + if type is not unset: + kwargs["type"] = type + if valid_http_status_code is not unset: + kwargs["valid_http_status_code"] = valid_http_status_code + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secret_rule_data_attributes_match_validation_invalid_http_status_code_items.py b/datadog_api_client/v2/model/secret_rule_data_attributes_match_validation_invalid_http_status_code_items.py new file mode 100644 index 0000000000..f7cbcb2928 --- /dev/null +++ b/datadog_api_client/v2/model/secret_rule_data_attributes_match_validation_invalid_http_status_code_items.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecretRuleDataAttributesMatchValidationInvalidHttpStatusCodeItems(ModelNormal): + validations = { + "end": { + "inclusive_maximum": 1.8446744073709552e+19, + "inclusive_minimum": 0, + }, + "start": { + "inclusive_maximum": 1.8446744073709552e+19, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "end": (int,), + "start": (int,), + } + attribute_map = { + "end": "end", + "start": "start", + } + + def __init__(self_, end: Union[int, UnsetType]=unset, start: Union[int, UnsetType]=unset, **kwargs): + """ + An HTTP status code range that indicates an invalid (unsuccessful) secret match during validation. + + :param end: The inclusive upper bound of the HTTP status code range. + :type end: int, optional + + :param start: The inclusive lower bound of the HTTP status code range. + :type start: int, optional + """ + if end is not unset: + kwargs["end"] = end + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secret_rule_data_attributes_match_validation_valid_http_status_code_items.py b/datadog_api_client/v2/model/secret_rule_data_attributes_match_validation_valid_http_status_code_items.py new file mode 100644 index 0000000000..afadf36c3e --- /dev/null +++ b/datadog_api_client/v2/model/secret_rule_data_attributes_match_validation_valid_http_status_code_items.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecretRuleDataAttributesMatchValidationValidHttpStatusCodeItems(ModelNormal): + validations = { + "end": { + "inclusive_maximum": 1.8446744073709552e+19, + "inclusive_minimum": 0, + }, + "start": { + "inclusive_maximum": 1.8446744073709552e+19, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "end": (int,), + "start": (int,), + } + attribute_map = { + "end": "end", + "start": "start", + } + + def __init__(self_, end: Union[int, UnsetType]=unset, start: Union[int, UnsetType]=unset, **kwargs): + """ + An HTTP status code range that indicates a valid (successful) secret match during validation. + + :param end: The inclusive upper bound of the HTTP status code range. + :type end: int, optional + + :param start: The inclusive lower bound of the HTTP status code range. + :type start: int, optional + """ + if end is not unset: + kwargs["end"] = end + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secret_rule_data_type.py b/datadog_api_client/v2/model/secret_rule_data_type.py new file mode 100644 index 0000000000..46489d5717 --- /dev/null +++ b/datadog_api_client/v2/model/secret_rule_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecretRuleDataType(ModelSimple): + """ + Secret rule resource type. + + :param value: If omitted defaults to "secret_rule". Must be one of ["secret_rule"]. + :type value: str + """ + + allowed_values = { + "secret_rule", + } + SECRET_RULE: ClassVar["SecretRuleDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecretRuleDataType.SECRET_RULE = SecretRuleDataType("secret_rule") diff --git a/datadog_api_client/v2/model/secure_embed_create_request.py b/datadog_api_client/v2/model/secure_embed_create_request.py new file mode 100644 index 0000000000..2b4124c7a7 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_create_request_data import SecureEmbedCreateRequestData + +class SecureEmbedCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_create_request_data import SecureEmbedCreateRequestData + return { + "data": (SecureEmbedCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecureEmbedCreateRequestData, **kwargs): + """ + Request to create a secure embed shared dashboard. + + :param data: Data object for creating a secure embed. + :type data: SecureEmbedCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/secure_embed_create_request_attributes.py b/datadog_api_client/v2/model/secure_embed_create_request_attributes.py new file mode 100644 index 0000000000..511ef89aab --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_create_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + +class SecureEmbedCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + return { + "global_time": (SecureEmbedGlobalTime,), + "global_time_selectable": (bool,), + "selectable_template_vars": ([SecureEmbedSelectableTemplateVariable],), + "status": (SecureEmbedStatus,), + "title": (str,), + "viewing_preferences": (SecureEmbedViewingPreferences,), + } + attribute_map = { + "global_time": "global_time", + "global_time_selectable": "global_time_selectable", + "selectable_template_vars": "selectable_template_vars", + "status": "status", + "title": "title", + "viewing_preferences": "viewing_preferences", + } + + def __init__(self_, global_time: SecureEmbedGlobalTime, global_time_selectable: bool, selectable_template_vars: List[SecureEmbedSelectableTemplateVariable], status: SecureEmbedStatus, title: str, viewing_preferences: SecureEmbedViewingPreferences, **kwargs): + """ + Attributes for creating a secure embed shared dashboard. + + :param global_time: Default time range configuration for the secure embed. + :type global_time: SecureEmbedGlobalTime + + :param global_time_selectable: Whether viewers can change the time range. + :type global_time_selectable: bool + + :param selectable_template_vars: Template variables viewers can modify. + :type selectable_template_vars: [SecureEmbedSelectableTemplateVariable] + + :param status: The status of the secure embed share. Active means the shared dashboard is available. Paused means it is not. + :type status: SecureEmbedStatus + + :param title: Display title for the shared dashboard. + :type title: str + + :param viewing_preferences: Display settings for the secure embed shared dashboard. + :type viewing_preferences: SecureEmbedViewingPreferences + """ + super().__init__(kwargs) + + + self_.global_time = global_time + self_.global_time_selectable = global_time_selectable + self_.selectable_template_vars = selectable_template_vars + self_.status = status + self_.title = title + self_.viewing_preferences = viewing_preferences diff --git a/datadog_api_client/v2/model/secure_embed_create_request_data.py b/datadog_api_client/v2/model/secure_embed_create_request_data.py new file mode 100644 index 0000000000..275bbbfc65 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_create_request_attributes import SecureEmbedCreateRequestAttributes + from datadog_api_client.v2.model.secure_embed_request_type import SecureEmbedRequestType + +class SecureEmbedCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_create_request_attributes import SecureEmbedCreateRequestAttributes + from datadog_api_client.v2.model.secure_embed_request_type import SecureEmbedRequestType + return { + "attributes": (SecureEmbedCreateRequestAttributes,), + "type": (SecureEmbedRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecureEmbedCreateRequestAttributes, type: SecureEmbedRequestType, **kwargs): + """ + Data object for creating a secure embed. + + :param attributes: Attributes for creating a secure embed shared dashboard. + :type attributes: SecureEmbedCreateRequestAttributes + + :param type: Resource type for secure embed create requests. + :type type: SecureEmbedRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/secure_embed_create_response.py b/datadog_api_client/v2/model/secure_embed_create_response.py new file mode 100644 index 0000000000..35ef84837d --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_create_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_create_response_data import SecureEmbedCreateResponseData + +class SecureEmbedCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_create_response_data import SecureEmbedCreateResponseData + return { + "data": (SecureEmbedCreateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecureEmbedCreateResponseData, **kwargs): + """ + Response for creating a secure embed shared dashboard. + + :param data: Data object for a secure embed create response. + :type data: SecureEmbedCreateResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/secure_embed_create_response_attributes.py b/datadog_api_client/v2/model/secure_embed_create_response_attributes.py new file mode 100644 index 0000000000..28e126c927 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_create_response_attributes.py @@ -0,0 +1,149 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_share_type import SecureEmbedShareType + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + +class SecureEmbedCreateResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_share_type import SecureEmbedShareType + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + return { + "created_at": (str,), + "credential": (str,), + "dashboard_id": (str,), + "global_time": (SecureEmbedGlobalTime,), + "global_time_selectable": (bool,), + "id": (str,), + "selectable_template_vars": ([SecureEmbedSelectableTemplateVariable],), + "share_type": (SecureEmbedShareType,), + "status": (SecureEmbedStatus,), + "title": (str,), + "token": (str,), + "url": (str,), + "viewing_preferences": (SecureEmbedViewingPreferences,), + } + attribute_map = { + "created_at": "created_at", + "credential": "credential", + "dashboard_id": "dashboard_id", + "global_time": "global_time", + "global_time_selectable": "global_time_selectable", + "id": "id", + "selectable_template_vars": "selectable_template_vars", + "share_type": "share_type", + "status": "status", + "title": "title", + "token": "token", + "url": "url", + "viewing_preferences": "viewing_preferences", + } + read_only_vars = { + "created_at", + "credential", + "dashboard_id", + "id", + "token", + "url", + } + + def __init__(self_, created_at: Union[str, UnsetType]=unset, credential: Union[str, UnsetType]=unset, dashboard_id: Union[str, UnsetType]=unset, global_time: Union[SecureEmbedGlobalTime, UnsetType]=unset, global_time_selectable: Union[bool, UnsetType]=unset, id: Union[str, UnsetType]=unset, selectable_template_vars: Union[List[SecureEmbedSelectableTemplateVariable], UnsetType]=unset, share_type: Union[SecureEmbedShareType, UnsetType]=unset, status: Union[SecureEmbedStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, token: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, viewing_preferences: Union[SecureEmbedViewingPreferences, UnsetType]=unset, **kwargs): + """ + Attributes of a newly created secure embed shared dashboard. + + :param created_at: Creation timestamp. + :type created_at: str, optional + + :param credential: The secret credential used for HMAC signing. Returned only on creation. Store securely — it cannot be retrieved again. + :type credential: str, optional + + :param dashboard_id: The source dashboard ID. + :type dashboard_id: str, optional + + :param global_time: Default time range configuration for the secure embed. + :type global_time: SecureEmbedGlobalTime, optional + + :param global_time_selectable: Whether time range is viewer-selectable. + :type global_time_selectable: bool, optional + + :param id: Internal share ID. + :type id: str, optional + + :param selectable_template_vars: Template variables with their configuration. + :type selectable_template_vars: [SecureEmbedSelectableTemplateVariable], optional + + :param share_type: The type of share. Always ``secure_embed``. + :type share_type: SecureEmbedShareType, optional + + :param status: The status of the secure embed share. Active means the shared dashboard is available. Paused means it is not. + :type status: SecureEmbedStatus, optional + + :param title: Display title. + :type title: str, optional + + :param token: Public share token. + :type token: str, optional + + :param url: CDN URL for the shared dashboard. + :type url: str, optional + + :param viewing_preferences: Display settings for the secure embed shared dashboard. + :type viewing_preferences: SecureEmbedViewingPreferences, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if credential is not unset: + kwargs["credential"] = credential + if dashboard_id is not unset: + kwargs["dashboard_id"] = dashboard_id + if global_time is not unset: + kwargs["global_time"] = global_time + if global_time_selectable is not unset: + kwargs["global_time_selectable"] = global_time_selectable + if id is not unset: + kwargs["id"] = id + if selectable_template_vars is not unset: + kwargs["selectable_template_vars"] = selectable_template_vars + if share_type is not unset: + kwargs["share_type"] = share_type + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if token is not unset: + kwargs["token"] = token + if url is not unset: + kwargs["url"] = url + if viewing_preferences is not unset: + kwargs["viewing_preferences"] = viewing_preferences + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secure_embed_create_response_data.py b/datadog_api_client/v2/model/secure_embed_create_response_data.py new file mode 100644 index 0000000000..ff24930323 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_create_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_create_response_attributes import SecureEmbedCreateResponseAttributes + from datadog_api_client.v2.model.secure_embed_create_response_type import SecureEmbedCreateResponseType + +class SecureEmbedCreateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_create_response_attributes import SecureEmbedCreateResponseAttributes + from datadog_api_client.v2.model.secure_embed_create_response_type import SecureEmbedCreateResponseType + return { + "attributes": (SecureEmbedCreateResponseAttributes,), + "id": (str,), + "type": (SecureEmbedCreateResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecureEmbedCreateResponseAttributes, id: str, type: SecureEmbedCreateResponseType, **kwargs): + """ + Data object for a secure embed create response. + + :param attributes: Attributes of a newly created secure embed shared dashboard. + :type attributes: SecureEmbedCreateResponseAttributes + + :param id: Internal share ID. + :type id: str + + :param type: Resource type for secure embed create responses. + :type type: SecureEmbedCreateResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/secure_embed_create_response_type.py b/datadog_api_client/v2/model/secure_embed_create_response_type.py new file mode 100644 index 0000000000..a1966d0255 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_create_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecureEmbedCreateResponseType(ModelSimple): + """ + Resource type for secure embed create responses. + + :param value: If omitted defaults to "secure_embed_create_response". Must be one of ["secure_embed_create_response"]. + :type value: str + """ + + allowed_values = { + "secure_embed_create_response", + } + SECURE_EMBED_CREATE_RESPONSE: ClassVar["SecureEmbedCreateResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecureEmbedCreateResponseType.SECURE_EMBED_CREATE_RESPONSE = SecureEmbedCreateResponseType("secure_embed_create_response") diff --git a/datadog_api_client/v2/model/secure_embed_get_response.py b/datadog_api_client/v2/model/secure_embed_get_response.py new file mode 100644 index 0000000000..3076e5ed2d --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_get_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_get_response_data import SecureEmbedGetResponseData + +class SecureEmbedGetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_get_response_data import SecureEmbedGetResponseData + return { + "data": (SecureEmbedGetResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecureEmbedGetResponseData, **kwargs): + """ + Response for getting a secure embed shared dashboard. + + :param data: Data object for a secure embed get response. + :type data: SecureEmbedGetResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/secure_embed_get_response_attributes.py b/datadog_api_client/v2/model/secure_embed_get_response_attributes.py new file mode 100644 index 0000000000..09726ce13d --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_get_response_attributes.py @@ -0,0 +1,149 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_share_type import SecureEmbedShareType + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + +class SecureEmbedGetResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_share_type import SecureEmbedShareType + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + return { + "created_at": (str,), + "credential_suffix": (str,), + "dashboard_id": (str,), + "global_time": (SecureEmbedGlobalTime,), + "global_time_selectable": (bool,), + "id": (str,), + "selectable_template_vars": ([SecureEmbedSelectableTemplateVariable],), + "share_type": (SecureEmbedShareType,), + "status": (SecureEmbedStatus,), + "title": (str,), + "token": (str,), + "url": (str,), + "viewing_preferences": (SecureEmbedViewingPreferences,), + } + attribute_map = { + "created_at": "created_at", + "credential_suffix": "credential_suffix", + "dashboard_id": "dashboard_id", + "global_time": "global_time", + "global_time_selectable": "global_time_selectable", + "id": "id", + "selectable_template_vars": "selectable_template_vars", + "share_type": "share_type", + "status": "status", + "title": "title", + "token": "token", + "url": "url", + "viewing_preferences": "viewing_preferences", + } + read_only_vars = { + "created_at", + "credential_suffix", + "dashboard_id", + "id", + "token", + "url", + } + + def __init__(self_, created_at: Union[str, UnsetType]=unset, credential_suffix: Union[str, UnsetType]=unset, dashboard_id: Union[str, UnsetType]=unset, global_time: Union[SecureEmbedGlobalTime, UnsetType]=unset, global_time_selectable: Union[bool, UnsetType]=unset, id: Union[str, UnsetType]=unset, selectable_template_vars: Union[List[SecureEmbedSelectableTemplateVariable], UnsetType]=unset, share_type: Union[SecureEmbedShareType, UnsetType]=unset, status: Union[SecureEmbedStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, token: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, viewing_preferences: Union[SecureEmbedViewingPreferences, UnsetType]=unset, **kwargs): + """ + Attributes of an existing secure embed shared dashboard. + + :param created_at: Creation timestamp. + :type created_at: str, optional + + :param credential_suffix: Last 4 characters of the credential. Defaults to ``0000`` if unavailable. + :type credential_suffix: str, optional + + :param dashboard_id: The source dashboard ID. + :type dashboard_id: str, optional + + :param global_time: Default time range configuration for the secure embed. + :type global_time: SecureEmbedGlobalTime, optional + + :param global_time_selectable: Whether time range is viewer-selectable. + :type global_time_selectable: bool, optional + + :param id: Internal share ID. + :type id: str, optional + + :param selectable_template_vars: Template variables with their configuration. + :type selectable_template_vars: [SecureEmbedSelectableTemplateVariable], optional + + :param share_type: The type of share. Always ``secure_embed``. + :type share_type: SecureEmbedShareType, optional + + :param status: The status of the secure embed share. Active means the shared dashboard is available. Paused means it is not. + :type status: SecureEmbedStatus, optional + + :param title: Display title. + :type title: str, optional + + :param token: Public share token. + :type token: str, optional + + :param url: CDN URL for the shared dashboard. + :type url: str, optional + + :param viewing_preferences: Display settings for the secure embed shared dashboard. + :type viewing_preferences: SecureEmbedViewingPreferences, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if credential_suffix is not unset: + kwargs["credential_suffix"] = credential_suffix + if dashboard_id is not unset: + kwargs["dashboard_id"] = dashboard_id + if global_time is not unset: + kwargs["global_time"] = global_time + if global_time_selectable is not unset: + kwargs["global_time_selectable"] = global_time_selectable + if id is not unset: + kwargs["id"] = id + if selectable_template_vars is not unset: + kwargs["selectable_template_vars"] = selectable_template_vars + if share_type is not unset: + kwargs["share_type"] = share_type + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if token is not unset: + kwargs["token"] = token + if url is not unset: + kwargs["url"] = url + if viewing_preferences is not unset: + kwargs["viewing_preferences"] = viewing_preferences + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secure_embed_get_response_data.py b/datadog_api_client/v2/model/secure_embed_get_response_data.py new file mode 100644 index 0000000000..e8aaf2a852 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_get_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_get_response_attributes import SecureEmbedGetResponseAttributes + from datadog_api_client.v2.model.secure_embed_get_response_type import SecureEmbedGetResponseType + +class SecureEmbedGetResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_get_response_attributes import SecureEmbedGetResponseAttributes + from datadog_api_client.v2.model.secure_embed_get_response_type import SecureEmbedGetResponseType + return { + "attributes": (SecureEmbedGetResponseAttributes,), + "id": (str,), + "type": (SecureEmbedGetResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecureEmbedGetResponseAttributes, id: str, type: SecureEmbedGetResponseType, **kwargs): + """ + Data object for a secure embed get response. + + :param attributes: Attributes of an existing secure embed shared dashboard. + :type attributes: SecureEmbedGetResponseAttributes + + :param id: Internal share ID. + :type id: str + + :param type: Resource type for secure embed get responses. + :type type: SecureEmbedGetResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/secure_embed_get_response_type.py b/datadog_api_client/v2/model/secure_embed_get_response_type.py new file mode 100644 index 0000000000..ea72b88dd1 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_get_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecureEmbedGetResponseType(ModelSimple): + """ + Resource type for secure embed get responses. + + :param value: If omitted defaults to "secure_embed_get_response". Must be one of ["secure_embed_get_response"]. + :type value: str + """ + + allowed_values = { + "secure_embed_get_response", + } + SECURE_EMBED_GET_RESPONSE: ClassVar["SecureEmbedGetResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecureEmbedGetResponseType.SECURE_EMBED_GET_RESPONSE = SecureEmbedGetResponseType("secure_embed_get_response") diff --git a/datadog_api_client/v2/model/secure_embed_global_time.py b/datadog_api_client/v2/model/secure_embed_global_time.py new file mode 100644 index 0000000000..ad8856252c --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_global_time.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_global_time_live_span import SecureEmbedGlobalTimeLiveSpan + +class SecureEmbedGlobalTime(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_global_time_live_span import SecureEmbedGlobalTimeLiveSpan + return { + "live_span": (SecureEmbedGlobalTimeLiveSpan,), + } + attribute_map = { + "live_span": "live_span", + } + + def __init__(self_, live_span: Union[SecureEmbedGlobalTimeLiveSpan, UnsetType]=unset, **kwargs): + """ + Default time range configuration for the secure embed. + + :param live_span: Dashboard global time live_span selection. + :type live_span: SecureEmbedGlobalTimeLiveSpan, optional + """ + if live_span is not unset: + kwargs["live_span"] = live_span + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secure_embed_global_time_live_span.py b/datadog_api_client/v2/model/secure_embed_global_time_live_span.py new file mode 100644 index 0000000000..aa59c40e43 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_global_time_live_span.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecureEmbedGlobalTimeLiveSpan(ModelSimple): + """ + Dashboard global time live_span selection. + + :param value: Must be one of ["15m", "1h", "4h", "1d", "2d", "1w", "1mo", "3mo"]. + :type value: str + """ + + allowed_values = { + "15m", + "1h", + "4h", + "1d", + "2d", + "1w", + "1mo", + "3mo", + } + PAST_FIFTEEN_MINUTES: ClassVar["SecureEmbedGlobalTimeLiveSpan"] + PAST_ONE_HOUR: ClassVar["SecureEmbedGlobalTimeLiveSpan"] + PAST_FOUR_HOURS: ClassVar["SecureEmbedGlobalTimeLiveSpan"] + PAST_ONE_DAY: ClassVar["SecureEmbedGlobalTimeLiveSpan"] + PAST_TWO_DAYS: ClassVar["SecureEmbedGlobalTimeLiveSpan"] + PAST_ONE_WEEK: ClassVar["SecureEmbedGlobalTimeLiveSpan"] + PAST_ONE_MONTH: ClassVar["SecureEmbedGlobalTimeLiveSpan"] + PAST_THREE_MONTHS: ClassVar["SecureEmbedGlobalTimeLiveSpan"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecureEmbedGlobalTimeLiveSpan.PAST_FIFTEEN_MINUTES = SecureEmbedGlobalTimeLiveSpan("15m") +SecureEmbedGlobalTimeLiveSpan.PAST_ONE_HOUR = SecureEmbedGlobalTimeLiveSpan("1h") +SecureEmbedGlobalTimeLiveSpan.PAST_FOUR_HOURS = SecureEmbedGlobalTimeLiveSpan("4h") +SecureEmbedGlobalTimeLiveSpan.PAST_ONE_DAY = SecureEmbedGlobalTimeLiveSpan("1d") +SecureEmbedGlobalTimeLiveSpan.PAST_TWO_DAYS = SecureEmbedGlobalTimeLiveSpan("2d") +SecureEmbedGlobalTimeLiveSpan.PAST_ONE_WEEK = SecureEmbedGlobalTimeLiveSpan("1w") +SecureEmbedGlobalTimeLiveSpan.PAST_ONE_MONTH = SecureEmbedGlobalTimeLiveSpan("1mo") +SecureEmbedGlobalTimeLiveSpan.PAST_THREE_MONTHS = SecureEmbedGlobalTimeLiveSpan("3mo") diff --git a/datadog_api_client/v2/model/secure_embed_request_type.py b/datadog_api_client/v2/model/secure_embed_request_type.py new file mode 100644 index 0000000000..2a941985bc --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecureEmbedRequestType(ModelSimple): + """ + Resource type for secure embed create requests. + + :param value: If omitted defaults to "secure_embed_request". Must be one of ["secure_embed_request"]. + :type value: str + """ + + allowed_values = { + "secure_embed_request", + } + SECURE_EMBED_REQUEST: ClassVar["SecureEmbedRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecureEmbedRequestType.SECURE_EMBED_REQUEST = SecureEmbedRequestType("secure_embed_request") diff --git a/datadog_api_client/v2/model/secure_embed_selectable_template_variable.py b/datadog_api_client/v2/model/secure_embed_selectable_template_variable.py new file mode 100644 index 0000000000..0be0962a05 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_selectable_template_variable.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecureEmbedSelectableTemplateVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "default_values": ([str],), + "name": (str,), + "prefix": (str,), + "visible_tags": ([str],), + } + attribute_map = { + "default_values": "default_values", + "name": "name", + "prefix": "prefix", + "visible_tags": "visible_tags", + } + + def __init__(self_, default_values: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, prefix: Union[str, UnsetType]=unset, visible_tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + A template variable that viewers can modify on the secure embed shared dashboard. + + :param default_values: Default selected values for the variable. + :type default_values: [str], optional + + :param name: Name of the template variable. Usually matches the prefix unless you want a different display name. + :type name: str, optional + + :param prefix: Tag prefix for the variable (e.g., ``environment`` , ``service`` ). + :type prefix: str, optional + + :param visible_tags: Restrict which tag values are visible to the viewer. + :type visible_tags: [str], optional + """ + if default_values is not unset: + kwargs["default_values"] = default_values + if name is not unset: + kwargs["name"] = name + if prefix is not unset: + kwargs["prefix"] = prefix + if visible_tags is not unset: + kwargs["visible_tags"] = visible_tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secure_embed_share_type.py b/datadog_api_client/v2/model/secure_embed_share_type.py new file mode 100644 index 0000000000..0427764dc3 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_share_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecureEmbedShareType(ModelSimple): + """ + The type of share. Always `secure_embed`. + + :param value: If omitted defaults to "secure_embed". Must be one of ["secure_embed"]. + :type value: str + """ + + allowed_values = { + "secure_embed", + } + SECURE_EMBED: ClassVar["SecureEmbedShareType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecureEmbedShareType.SECURE_EMBED = SecureEmbedShareType("secure_embed") diff --git a/datadog_api_client/v2/model/secure_embed_status.py b/datadog_api_client/v2/model/secure_embed_status.py new file mode 100644 index 0000000000..bd8b594490 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecureEmbedStatus(ModelSimple): + """ + The status of the secure embed share. Active means the shared dashboard is available. Paused means it is not. + + :param value: Must be one of ["active", "paused"]. + :type value: str + """ + + allowed_values = { + "active", + "paused", + } + ACTIVE: ClassVar["SecureEmbedStatus"] + PAUSED: ClassVar["SecureEmbedStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecureEmbedStatus.ACTIVE = SecureEmbedStatus("active") +SecureEmbedStatus.PAUSED = SecureEmbedStatus("paused") diff --git a/datadog_api_client/v2/model/secure_embed_update_request.py b/datadog_api_client/v2/model/secure_embed_update_request.py new file mode 100644 index 0000000000..2440636ee8 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_update_request_data import SecureEmbedUpdateRequestData + +class SecureEmbedUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_update_request_data import SecureEmbedUpdateRequestData + return { + "data": (SecureEmbedUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecureEmbedUpdateRequestData, **kwargs): + """ + Request to update a secure embed shared dashboard. + + :param data: Data object for updating a secure embed. + :type data: SecureEmbedUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/secure_embed_update_request_attributes.py b/datadog_api_client/v2/model/secure_embed_update_request_attributes.py new file mode 100644 index 0000000000..35516d35aa --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_update_request_attributes.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + +class SecureEmbedUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + return { + "global_time": (SecureEmbedGlobalTime,), + "global_time_selectable": (bool,), + "selectable_template_vars": ([SecureEmbedSelectableTemplateVariable],), + "status": (SecureEmbedStatus,), + "title": (str,), + "viewing_preferences": (SecureEmbedViewingPreferences,), + } + attribute_map = { + "global_time": "global_time", + "global_time_selectable": "global_time_selectable", + "selectable_template_vars": "selectable_template_vars", + "status": "status", + "title": "title", + "viewing_preferences": "viewing_preferences", + } + + def __init__(self_, global_time: Union[SecureEmbedGlobalTime, UnsetType]=unset, global_time_selectable: Union[bool, UnsetType]=unset, selectable_template_vars: Union[List[SecureEmbedSelectableTemplateVariable], UnsetType]=unset, status: Union[SecureEmbedStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, viewing_preferences: Union[SecureEmbedViewingPreferences, UnsetType]=unset, **kwargs): + """ + Attributes for updating a secure embed shared dashboard. All fields are optional. + + :param global_time: Default time range configuration for the secure embed. + :type global_time: SecureEmbedGlobalTime, optional + + :param global_time_selectable: Updated time selectability. + :type global_time_selectable: bool, optional + + :param selectable_template_vars: Updated template variables. + :type selectable_template_vars: [SecureEmbedSelectableTemplateVariable], optional + + :param status: The status of the secure embed share. Active means the shared dashboard is available. Paused means it is not. + :type status: SecureEmbedStatus, optional + + :param title: Updated title. + :type title: str, optional + + :param viewing_preferences: Display settings for the secure embed shared dashboard. + :type viewing_preferences: SecureEmbedViewingPreferences, optional + """ + if global_time is not unset: + kwargs["global_time"] = global_time + if global_time_selectable is not unset: + kwargs["global_time_selectable"] = global_time_selectable + if selectable_template_vars is not unset: + kwargs["selectable_template_vars"] = selectable_template_vars + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if viewing_preferences is not unset: + kwargs["viewing_preferences"] = viewing_preferences + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secure_embed_update_request_data.py b/datadog_api_client/v2/model/secure_embed_update_request_data.py new file mode 100644 index 0000000000..bc87644642 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_update_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_update_request_attributes import SecureEmbedUpdateRequestAttributes + from datadog_api_client.v2.model.secure_embed_update_request_type import SecureEmbedUpdateRequestType + +class SecureEmbedUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_update_request_attributes import SecureEmbedUpdateRequestAttributes + from datadog_api_client.v2.model.secure_embed_update_request_type import SecureEmbedUpdateRequestType + return { + "attributes": (SecureEmbedUpdateRequestAttributes,), + "type": (SecureEmbedUpdateRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecureEmbedUpdateRequestAttributes, type: SecureEmbedUpdateRequestType, **kwargs): + """ + Data object for updating a secure embed. + + :param attributes: Attributes for updating a secure embed shared dashboard. All fields are optional. + :type attributes: SecureEmbedUpdateRequestAttributes + + :param type: Resource type for secure embed update requests. + :type type: SecureEmbedUpdateRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/secure_embed_update_request_type.py b/datadog_api_client/v2/model/secure_embed_update_request_type.py new file mode 100644 index 0000000000..07e4d660e8 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_update_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecureEmbedUpdateRequestType(ModelSimple): + """ + Resource type for secure embed update requests. + + :param value: If omitted defaults to "secure_embed_update_request". Must be one of ["secure_embed_update_request"]. + :type value: str + """ + + allowed_values = { + "secure_embed_update_request", + } + SECURE_EMBED_UPDATE_REQUEST: ClassVar["SecureEmbedUpdateRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecureEmbedUpdateRequestType.SECURE_EMBED_UPDATE_REQUEST = SecureEmbedUpdateRequestType("secure_embed_update_request") diff --git a/datadog_api_client/v2/model/secure_embed_update_response.py b/datadog_api_client/v2/model/secure_embed_update_response.py new file mode 100644 index 0000000000..1bd105295e --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_update_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_update_response_data import SecureEmbedUpdateResponseData + +class SecureEmbedUpdateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_update_response_data import SecureEmbedUpdateResponseData + return { + "data": (SecureEmbedUpdateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecureEmbedUpdateResponseData, **kwargs): + """ + Response for updating a secure embed shared dashboard. + + :param data: Data object for a secure embed update response. + :type data: SecureEmbedUpdateResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/secure_embed_update_response_attributes.py b/datadog_api_client/v2/model/secure_embed_update_response_attributes.py new file mode 100644 index 0000000000..d016c5091f --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_update_response_attributes.py @@ -0,0 +1,149 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_share_type import SecureEmbedShareType + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + +class SecureEmbedUpdateResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime + from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable + from datadog_api_client.v2.model.secure_embed_share_type import SecureEmbedShareType + from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus + from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences + return { + "created_at": (str,), + "credential_suffix": (str,), + "dashboard_id": (str,), + "global_time": (SecureEmbedGlobalTime,), + "global_time_selectable": (bool,), + "id": (str,), + "selectable_template_vars": ([SecureEmbedSelectableTemplateVariable],), + "share_type": (SecureEmbedShareType,), + "status": (SecureEmbedStatus,), + "title": (str,), + "token": (str,), + "url": (str,), + "viewing_preferences": (SecureEmbedViewingPreferences,), + } + attribute_map = { + "created_at": "created_at", + "credential_suffix": "credential_suffix", + "dashboard_id": "dashboard_id", + "global_time": "global_time", + "global_time_selectable": "global_time_selectable", + "id": "id", + "selectable_template_vars": "selectable_template_vars", + "share_type": "share_type", + "status": "status", + "title": "title", + "token": "token", + "url": "url", + "viewing_preferences": "viewing_preferences", + } + read_only_vars = { + "created_at", + "credential_suffix", + "dashboard_id", + "id", + "token", + "url", + } + + def __init__(self_, created_at: Union[str, UnsetType]=unset, credential_suffix: Union[str, UnsetType]=unset, dashboard_id: Union[str, UnsetType]=unset, global_time: Union[SecureEmbedGlobalTime, UnsetType]=unset, global_time_selectable: Union[bool, UnsetType]=unset, id: Union[str, UnsetType]=unset, selectable_template_vars: Union[List[SecureEmbedSelectableTemplateVariable], UnsetType]=unset, share_type: Union[SecureEmbedShareType, UnsetType]=unset, status: Union[SecureEmbedStatus, UnsetType]=unset, title: Union[str, UnsetType]=unset, token: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, viewing_preferences: Union[SecureEmbedViewingPreferences, UnsetType]=unset, **kwargs): + """ + Attributes of an updated secure embed shared dashboard. + + :param created_at: Creation timestamp. + :type created_at: str, optional + + :param credential_suffix: Last 4 characters of the credential. Defaults to ``0000`` if unavailable. + :type credential_suffix: str, optional + + :param dashboard_id: The source dashboard ID. + :type dashboard_id: str, optional + + :param global_time: Default time range configuration for the secure embed. + :type global_time: SecureEmbedGlobalTime, optional + + :param global_time_selectable: Whether time range is viewer-selectable. + :type global_time_selectable: bool, optional + + :param id: Internal share ID. + :type id: str, optional + + :param selectable_template_vars: Template variables with their configuration. + :type selectable_template_vars: [SecureEmbedSelectableTemplateVariable], optional + + :param share_type: The type of share. Always ``secure_embed``. + :type share_type: SecureEmbedShareType, optional + + :param status: The status of the secure embed share. Active means the shared dashboard is available. Paused means it is not. + :type status: SecureEmbedStatus, optional + + :param title: Display title. + :type title: str, optional + + :param token: Public share token. + :type token: str, optional + + :param url: CDN URL for the shared dashboard. + :type url: str, optional + + :param viewing_preferences: Display settings for the secure embed shared dashboard. + :type viewing_preferences: SecureEmbedViewingPreferences, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if credential_suffix is not unset: + kwargs["credential_suffix"] = credential_suffix + if dashboard_id is not unset: + kwargs["dashboard_id"] = dashboard_id + if global_time is not unset: + kwargs["global_time"] = global_time + if global_time_selectable is not unset: + kwargs["global_time_selectable"] = global_time_selectable + if id is not unset: + kwargs["id"] = id + if selectable_template_vars is not unset: + kwargs["selectable_template_vars"] = selectable_template_vars + if share_type is not unset: + kwargs["share_type"] = share_type + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if token is not unset: + kwargs["token"] = token + if url is not unset: + kwargs["url"] = url + if viewing_preferences is not unset: + kwargs["viewing_preferences"] = viewing_preferences + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secure_embed_update_response_data.py b/datadog_api_client/v2/model/secure_embed_update_response_data.py new file mode 100644 index 0000000000..1a62361ee1 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_update_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_update_response_attributes import SecureEmbedUpdateResponseAttributes + from datadog_api_client.v2.model.secure_embed_update_response_type import SecureEmbedUpdateResponseType + +class SecureEmbedUpdateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_update_response_attributes import SecureEmbedUpdateResponseAttributes + from datadog_api_client.v2.model.secure_embed_update_response_type import SecureEmbedUpdateResponseType + return { + "attributes": (SecureEmbedUpdateResponseAttributes,), + "id": (str,), + "type": (SecureEmbedUpdateResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecureEmbedUpdateResponseAttributes, id: str, type: SecureEmbedUpdateResponseType, **kwargs): + """ + Data object for a secure embed update response. + + :param attributes: Attributes of an updated secure embed shared dashboard. + :type attributes: SecureEmbedUpdateResponseAttributes + + :param id: Internal share ID. + :type id: str + + :param type: Resource type for secure embed update responses. + :type type: SecureEmbedUpdateResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/secure_embed_update_response_type.py b/datadog_api_client/v2/model/secure_embed_update_response_type.py new file mode 100644 index 0000000000..eb27a5dd7b --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_update_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecureEmbedUpdateResponseType(ModelSimple): + """ + Resource type for secure embed update responses. + + :param value: If omitted defaults to "secure_embed_update_response". Must be one of ["secure_embed_update_response"]. + :type value: str + """ + + allowed_values = { + "secure_embed_update_response", + } + SECURE_EMBED_UPDATE_RESPONSE: ClassVar["SecureEmbedUpdateResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecureEmbedUpdateResponseType.SECURE_EMBED_UPDATE_RESPONSE = SecureEmbedUpdateResponseType("secure_embed_update_response") diff --git a/datadog_api_client/v2/model/secure_embed_viewing_preferences.py b/datadog_api_client/v2/model/secure_embed_viewing_preferences.py new file mode 100644 index 0000000000..0ec6db079e --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_viewing_preferences.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.secure_embed_viewing_preferences_theme import SecureEmbedViewingPreferencesTheme + +class SecureEmbedViewingPreferences(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.secure_embed_viewing_preferences_theme import SecureEmbedViewingPreferencesTheme + return { + "high_density": (bool,), + "theme": (SecureEmbedViewingPreferencesTheme,), + } + attribute_map = { + "high_density": "high_density", + "theme": "theme", + } + + def __init__(self_, high_density: Union[bool, UnsetType]=unset, theme: Union[SecureEmbedViewingPreferencesTheme, UnsetType]=unset, **kwargs): + """ + Display settings for the secure embed shared dashboard. + + :param high_density: Whether widgets are displayed in high density mode. + :type high_density: bool, optional + + :param theme: The theme of the shared dashboard view. ``system`` follows the viewer's system default. + :type theme: SecureEmbedViewingPreferencesTheme, optional + """ + if high_density is not unset: + kwargs["high_density"] = high_density + if theme is not unset: + kwargs["theme"] = theme + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/secure_embed_viewing_preferences_theme.py b/datadog_api_client/v2/model/secure_embed_viewing_preferences_theme.py new file mode 100644 index 0000000000..dfdb8e8df0 --- /dev/null +++ b/datadog_api_client/v2/model/secure_embed_viewing_preferences_theme.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecureEmbedViewingPreferencesTheme(ModelSimple): + """ + The theme of the shared dashboard view. `system` follows the viewer's system default. + + :param value: Must be one of ["system", "light", "dark"]. + :type value: str + """ + + allowed_values = { + "system", + "light", + "dark", + } + SYSTEM: ClassVar["SecureEmbedViewingPreferencesTheme"] + LIGHT: ClassVar["SecureEmbedViewingPreferencesTheme"] + DARK: ClassVar["SecureEmbedViewingPreferencesTheme"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecureEmbedViewingPreferencesTheme.SYSTEM = SecureEmbedViewingPreferencesTheme("system") +SecureEmbedViewingPreferencesTheme.LIGHT = SecureEmbedViewingPreferencesTheme("light") +SecureEmbedViewingPreferencesTheme.DARK = SecureEmbedViewingPreferencesTheme("dark") diff --git a/datadog_api_client/v2/model/security_automation_rules_links.py b/datadog_api_client/v2/model/security_automation_rules_links.py new file mode 100644 index 0000000000..f899bef550 --- /dev/null +++ b/datadog_api_client/v2/model/security_automation_rules_links.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityAutomationRulesLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str,), + "next": (str,), + "prev": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + } + + def __init__(self_, first: str, last: str, next: Union[str, UnsetType]=unset, prev: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination links for the list of automation rules. + + :param first: Link to the first page of results. + :type first: str + + :param last: Link to the last page of results. + :type last: str + + :param next: Link to the next page of results. + :type next: str, optional + + :param prev: Link to the previous page of results. + :type prev: str, optional + """ + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + super().__init__(kwargs) + + + self_.first = first + self_.last = last diff --git a/datadog_api_client/v2/model/security_automation_rules_meta.py b/datadog_api_client/v2/model/security_automation_rules_meta.py new file mode 100644 index 0000000000..1d0dc1ebdb --- /dev/null +++ b/datadog_api_client/v2/model/security_automation_rules_meta.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_automation_rules_page_info import SecurityAutomationRulesPageInfo + +class SecurityAutomationRulesMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_automation_rules_page_info import SecurityAutomationRulesPageInfo + return { + "page": (SecurityAutomationRulesPageInfo,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: SecurityAutomationRulesPageInfo, **kwargs): + """ + Metadata for the list of automation rules. + + :param page: Pagination information for the list of automation rules. + :type page: SecurityAutomationRulesPageInfo + """ + super().__init__(kwargs) + + + self_.page = page diff --git a/datadog_api_client/v2/model/security_automation_rules_page_info.py b/datadog_api_client/v2/model/security_automation_rules_page_info.py new file mode 100644 index 0000000000..51b3634de2 --- /dev/null +++ b/datadog_api_client/v2/model/security_automation_rules_page_info.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityAutomationRulesPageInfo(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_filtered_count": (int,), + } + attribute_map = { + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_filtered_count: int, **kwargs): + """ + Pagination information for the list of automation rules. + + :param total_filtered_count: The total number of rules matching the current filter. + :type total_filtered_count: int + """ + super().__init__(kwargs) + + + self_.total_filtered_count = total_filtered_count diff --git a/datadog_api_client/v2/model/security_entity_config_risks.py b/datadog_api_client/v2/model/security_entity_config_risks.py new file mode 100644 index 0000000000..35e5021b8c --- /dev/null +++ b/datadog_api_client/v2/model/security_entity_config_risks.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityEntityConfigRisks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "has_identity_risk": (bool,), + "has_misconfiguration": (bool,), + "has_privileged_role": (bool,), + "is_privileged": (bool,), + "is_production": (bool,), + "is_publicly_accessible": (bool,), + } + attribute_map = { + "has_identity_risk": "hasIdentityRisk", + "has_misconfiguration": "hasMisconfiguration", + "has_privileged_role": "hasPrivilegedRole", + "is_privileged": "isPrivileged", + "is_production": "isProduction", + "is_publicly_accessible": "isPubliclyAccessible", + } + + def __init__(self_, has_identity_risk: bool, has_misconfiguration: bool, has_privileged_role: bool, is_privileged: bool, is_production: bool, is_publicly_accessible: bool, **kwargs): + """ + Configuration risks associated with the entity + + :param has_identity_risk: Whether the entity has identity risks + :type has_identity_risk: bool + + :param has_misconfiguration: Whether the entity has misconfigurations + :type has_misconfiguration: bool + + :param has_privileged_role: Whether the entity has privileged roles + :type has_privileged_role: bool + + :param is_privileged: Whether the entity has privileged access + :type is_privileged: bool + + :param is_production: Whether the entity is in a production environment + :type is_production: bool + + :param is_publicly_accessible: Whether the entity is publicly accessible + :type is_publicly_accessible: bool + """ + super().__init__(kwargs) + + + self_.has_identity_risk = has_identity_risk + self_.has_misconfiguration = has_misconfiguration + self_.has_privileged_role = has_privileged_role + self_.is_privileged = is_privileged + self_.is_production = is_production + self_.is_publicly_accessible = is_publicly_accessible diff --git a/datadog_api_client/v2/model/security_entity_metadata.py b/datadog_api_client/v2/model/security_entity_metadata.py new file mode 100644 index 0000000000..48f7263dbf --- /dev/null +++ b/datadog_api_client/v2/model/security_entity_metadata.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityEntityMetadata(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "environments": ([str],), + "mitre_tactics": ([str],), + "mitre_techniques": ([str],), + "project_id": (str,), + "services": ([str],), + "sources": ([str],), + "subscription_id": (str,), + } + attribute_map = { + "account_id": "accountID", + "environments": "environments", + "mitre_tactics": "mitreTactics", + "mitre_techniques": "mitreTechniques", + "project_id": "projectID", + "services": "services", + "sources": "sources", + "subscription_id": "subscriptionID", + } + + def __init__(self_, environments: List[str], mitre_tactics: List[str], mitre_techniques: List[str], services: List[str], sources: List[str], account_id: Union[str, UnsetType]=unset, project_id: Union[str, UnsetType]=unset, subscription_id: Union[str, UnsetType]=unset, **kwargs): + """ + Metadata about the entity from cloud providers + + :param account_id: Cloud account ID (AWS) + :type account_id: str, optional + + :param environments: Environment tags associated with the entity + :type environments: [str] + + :param mitre_tactics: MITRE ATT&CK tactics detected + :type mitre_tactics: [str] + + :param mitre_techniques: MITRE ATT&CK techniques detected + :type mitre_techniques: [str] + + :param project_id: Cloud project ID (GCP) + :type project_id: str, optional + + :param services: Services associated with the entity + :type services: [str] + + :param sources: Data sources that detected this entity + :type sources: [str] + + :param subscription_id: Cloud subscription ID (Azure) + :type subscription_id: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if project_id is not unset: + kwargs["project_id"] = project_id + if subscription_id is not unset: + kwargs["subscription_id"] = subscription_id + super().__init__(kwargs) + + + self_.environments = environments + self_.mitre_tactics = mitre_tactics + self_.mitre_techniques = mitre_techniques + self_.services = services + self_.sources = sources diff --git a/datadog_api_client/v2/model/security_entity_risk_score.py b/datadog_api_client/v2/model/security_entity_risk_score.py new file mode 100644 index 0000000000..069514d0ed --- /dev/null +++ b/datadog_api_client/v2/model/security_entity_risk_score.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_entity_risk_score_attributes import SecurityEntityRiskScoreAttributes + from datadog_api_client.v2.model.security_entity_risk_score_type import SecurityEntityRiskScoreType + +class SecurityEntityRiskScore(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_entity_risk_score_attributes import SecurityEntityRiskScoreAttributes + from datadog_api_client.v2.model.security_entity_risk_score_type import SecurityEntityRiskScoreType + return { + "attributes": (SecurityEntityRiskScoreAttributes,), + "id": (str,), + "type": (SecurityEntityRiskScoreType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityEntityRiskScoreAttributes, id: str, type: SecurityEntityRiskScoreType, **kwargs): + """ + An entity risk score containing security risk assessment information + + :param attributes: Attributes of an entity risk score. + :type attributes: SecurityEntityRiskScoreAttributes + + :param id: Unique identifier for the entity + :type id: str + + :param type: Resource type. + :type type: SecurityEntityRiskScoreType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_entity_risk_score_attributes.py b/datadog_api_client/v2/model/security_entity_risk_score_attributes.py new file mode 100644 index 0000000000..eb904feaea --- /dev/null +++ b/datadog_api_client/v2/model/security_entity_risk_score_attributes.py @@ -0,0 +1,146 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_entity_config_risks import SecurityEntityConfigRisks + from datadog_api_client.v2.model.security_entity_metadata import SecurityEntityMetadata + from datadog_api_client.v2.model.security_entity_risk_score_attributes_severity import SecurityEntityRiskScoreAttributesSeverity + +class SecurityEntityRiskScoreAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_entity_config_risks import SecurityEntityConfigRisks + from datadog_api_client.v2.model.security_entity_metadata import SecurityEntityMetadata + from datadog_api_client.v2.model.security_entity_risk_score_attributes_severity import SecurityEntityRiskScoreAttributesSeverity + return { + "account_ids": ([str],), + "config_risks": (SecurityEntityConfigRisks,), + "entity_metadata": (SecurityEntityMetadata,), + "entity_name": (str,), + "entity_providers": ([str],), + "entity_roles": ([str],), + "entity_sub_types": ([str],), + "entity_type": (str,), + "entity_types": ([str],), + "first_detected": (int,), + "last_activity_title": (str,), + "last_detected": (int,), + "risk_score": (int,), + "risk_score_evolution": (int,), + "severity": (SecurityEntityRiskScoreAttributesSeverity,), + "signals_detected": (int,), + } + attribute_map = { + "account_ids": "accountIds", + "config_risks": "configRisks", + "entity_metadata": "entityMetadata", + "entity_name": "entityName", + "entity_providers": "entityProviders", + "entity_roles": "entityRoles", + "entity_sub_types": "entitySubTypes", + "entity_type": "entityType", + "entity_types": "entityTypes", + "first_detected": "firstDetected", + "last_activity_title": "lastActivityTitle", + "last_detected": "lastDetected", + "risk_score": "riskScore", + "risk_score_evolution": "riskScoreEvolution", + "severity": "severity", + "signals_detected": "signalsDetected", + } + + def __init__(self_, account_ids: List[str], config_risks: SecurityEntityConfigRisks, entity_metadata: SecurityEntityMetadata, entity_providers: List[str], entity_sub_types: List[str], first_detected: int, last_activity_title: str, last_detected: int, risk_score: int, risk_score_evolution: int, severity: SecurityEntityRiskScoreAttributesSeverity, signals_detected: int, entity_name: Union[str, UnsetType]=unset, entity_roles: Union[List[str], UnsetType]=unset, entity_type: Union[str, UnsetType]=unset, entity_types: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of an entity risk score. + + :param account_ids: Cloud account IDs associated with the entity. + :type account_ids: [str] + + :param config_risks: Configuration risks associated with the entity + :type config_risks: SecurityEntityConfigRisks + + :param entity_metadata: Metadata about the entity from cloud providers + :type entity_metadata: SecurityEntityMetadata + + :param entity_name: Human-readable name of the entity. + :type entity_name: str, optional + + :param entity_providers: Cloud providers associated with the entity. + :type entity_providers: [str] + + :param entity_roles: Roles associated with the entity. + :type entity_roles: [str], optional + + :param entity_sub_types: Sub-types associated with the entity. + :type entity_sub_types: [str] + + :param entity_type: Type of the entity (for example, aws_iam_user, aws_ec2_instance). + :type entity_type: str, optional + + :param entity_types: All types associated with the entity. + :type entity_types: [str], optional + + :param first_detected: Timestamp when the entity was first detected (Unix milliseconds). + :type first_detected: int + + :param last_activity_title: Title of the most recent signal detected for this entity. + :type last_activity_title: str + + :param last_detected: Timestamp when the entity was last detected (Unix milliseconds). + :type last_detected: int + + :param risk_score: Current risk score for the entity. + :type risk_score: int + + :param risk_score_evolution: Change in risk score compared to previous period. + :type risk_score_evolution: int + + :param severity: Severity level based on risk score + :type severity: SecurityEntityRiskScoreAttributesSeverity + + :param signals_detected: Number of security signals detected for this entity. + :type signals_detected: int + """ + if entity_name is not unset: + kwargs["entity_name"] = entity_name + if entity_roles is not unset: + kwargs["entity_roles"] = entity_roles + if entity_type is not unset: + kwargs["entity_type"] = entity_type + if entity_types is not unset: + kwargs["entity_types"] = entity_types + super().__init__(kwargs) + + + self_.account_ids = account_ids + self_.config_risks = config_risks + self_.entity_metadata = entity_metadata + self_.entity_providers = entity_providers + self_.entity_sub_types = entity_sub_types + self_.first_detected = first_detected + self_.last_activity_title = last_activity_title + self_.last_detected = last_detected + self_.risk_score = risk_score + self_.risk_score_evolution = risk_score_evolution + self_.severity = severity + self_.signals_detected = signals_detected diff --git a/datadog_api_client/v2/model/security_entity_risk_score_attributes_severity.py b/datadog_api_client/v2/model/security_entity_risk_score_attributes_severity.py new file mode 100644 index 0000000000..390c601ca9 --- /dev/null +++ b/datadog_api_client/v2/model/security_entity_risk_score_attributes_severity.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityEntityRiskScoreAttributesSeverity(ModelSimple): + """ + Severity level based on risk score + + :param value: Must be one of ["critical", "high", "medium", "low", "info"]. + :type value: str + """ + + allowed_values = { + "critical", + "high", + "medium", + "low", + "info", + } + CRITICAL: ClassVar["SecurityEntityRiskScoreAttributesSeverity"] + HIGH: ClassVar["SecurityEntityRiskScoreAttributesSeverity"] + MEDIUM: ClassVar["SecurityEntityRiskScoreAttributesSeverity"] + LOW: ClassVar["SecurityEntityRiskScoreAttributesSeverity"] + INFO: ClassVar["SecurityEntityRiskScoreAttributesSeverity"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityEntityRiskScoreAttributesSeverity.CRITICAL = SecurityEntityRiskScoreAttributesSeverity("critical") +SecurityEntityRiskScoreAttributesSeverity.HIGH = SecurityEntityRiskScoreAttributesSeverity("high") +SecurityEntityRiskScoreAttributesSeverity.MEDIUM = SecurityEntityRiskScoreAttributesSeverity("medium") +SecurityEntityRiskScoreAttributesSeverity.LOW = SecurityEntityRiskScoreAttributesSeverity("low") +SecurityEntityRiskScoreAttributesSeverity.INFO = SecurityEntityRiskScoreAttributesSeverity("info") diff --git a/datadog_api_client/v2/model/security_entity_risk_score_response.py b/datadog_api_client/v2/model/security_entity_risk_score_response.py new file mode 100644 index 0000000000..792a91117c --- /dev/null +++ b/datadog_api_client/v2/model/security_entity_risk_score_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_entity_risk_score import SecurityEntityRiskScore + +class SecurityEntityRiskScoreResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_entity_risk_score import SecurityEntityRiskScore + return { + "data": (SecurityEntityRiskScore,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityEntityRiskScore, **kwargs): + """ + Response containing a single entity risk score + + :param data: An entity risk score containing security risk assessment information + :type data: SecurityEntityRiskScore + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_entity_risk_score_type.py b/datadog_api_client/v2/model/security_entity_risk_score_type.py new file mode 100644 index 0000000000..48d1e47eac --- /dev/null +++ b/datadog_api_client/v2/model/security_entity_risk_score_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityEntityRiskScoreType(ModelSimple): + """ + Resource type. + + :param value: If omitted defaults to "SecurityEntityRiskScore". Must be one of ["SecurityEntityRiskScore"]. + :type value: str + """ + + allowed_values = { + "SecurityEntityRiskScore", + } + SECURITY_ENTITY_RISK_SCORE: ClassVar["SecurityEntityRiskScoreType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityEntityRiskScoreType.SECURITY_ENTITY_RISK_SCORE = SecurityEntityRiskScoreType("SecurityEntityRiskScore") diff --git a/datadog_api_client/v2/model/security_entity_risk_scores_meta.py b/datadog_api_client/v2/model/security_entity_risk_scores_meta.py new file mode 100644 index 0000000000..8a1ec93a43 --- /dev/null +++ b/datadog_api_client/v2/model/security_entity_risk_scores_meta.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityEntityRiskScoresMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "page_number": (int,), + "page_size": (int,), + "query_id": (str,), + "total_row_count": (int,), + } + attribute_map = { + "page_number": "pageNumber", + "page_size": "pageSize", + "query_id": "queryId", + "total_row_count": "totalRowCount", + } + + def __init__(self_, page_number: int, page_size: int, query_id: str, total_row_count: int, **kwargs): + """ + Metadata for pagination + + :param page_number: Current page number (1-indexed) + :type page_number: int + + :param page_size: Number of items per page + :type page_size: int + + :param query_id: Query ID for pagination consistency + :type query_id: str + + :param total_row_count: Total number of entities matching the query + :type total_row_count: int + """ + super().__init__(kwargs) + + + self_.page_number = page_number + self_.page_size = page_size + self_.query_id = query_id + self_.total_row_count = total_row_count diff --git a/datadog_api_client/v2/model/security_entity_risk_scores_response.py b/datadog_api_client/v2/model/security_entity_risk_scores_response.py new file mode 100644 index 0000000000..05f1ba3da9 --- /dev/null +++ b/datadog_api_client/v2/model/security_entity_risk_scores_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_entity_risk_score import SecurityEntityRiskScore + from datadog_api_client.v2.model.security_entity_risk_scores_meta import SecurityEntityRiskScoresMeta + +class SecurityEntityRiskScoresResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_entity_risk_score import SecurityEntityRiskScore + from datadog_api_client.v2.model.security_entity_risk_scores_meta import SecurityEntityRiskScoresMeta + return { + "data": ([SecurityEntityRiskScore],), + "meta": (SecurityEntityRiskScoresMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[SecurityEntityRiskScore], meta: SecurityEntityRiskScoresMeta, **kwargs): + """ + Response containing a list of entity risk scores + + :param data: Array of entity risk score objects. + :type data: [SecurityEntityRiskScore] + + :param meta: Metadata for pagination + :type meta: SecurityEntityRiskScoresMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/security_filter.py b/datadog_api_client/v2/model/security_filter.py new file mode 100644 index 0000000000..7a2c65d2b4 --- /dev/null +++ b/datadog_api_client/v2/model/security_filter.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_attributes import SecurityFilterAttributes + from datadog_api_client.v2.model.security_filter_type import SecurityFilterType + +class SecurityFilter(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_attributes import SecurityFilterAttributes + from datadog_api_client.v2.model.security_filter_type import SecurityFilterType + return { + "attributes": (SecurityFilterAttributes,), + "id": (str,), + "type": (SecurityFilterType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityFilterAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SecurityFilterType, UnsetType]=unset, **kwargs): + """ + The security filter's properties. + + :param attributes: The object describing a security filter. + :type attributes: SecurityFilterAttributes, optional + + :param id: The ID of the security filter. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``security_filters``. + :type type: SecurityFilterType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_filter_attributes.py b/datadog_api_client/v2/model/security_filter_attributes.py new file mode 100644 index 0000000000..0d091cd065 --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_attributes.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_exclusion_filter_response import SecurityFilterExclusionFilterResponse + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + +class SecurityFilterAttributes(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_exclusion_filter_response import SecurityFilterExclusionFilterResponse + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + return { + "exclusion_filters": ([SecurityFilterExclusionFilterResponse],), + "filtered_data_type": (SecurityFilterFilteredDataType,), + "is_builtin": (bool,), + "is_enabled": (bool,), + "name": (str,), + "query": (str,), + "version": (int,), + } + attribute_map = { + "exclusion_filters": "exclusion_filters", + "filtered_data_type": "filtered_data_type", + "is_builtin": "is_builtin", + "is_enabled": "is_enabled", + "name": "name", + "query": "query", + "version": "version", + } + + def __init__(self_, exclusion_filters: Union[List[SecurityFilterExclusionFilterResponse], UnsetType]=unset, filtered_data_type: Union[SecurityFilterFilteredDataType, UnsetType]=unset, is_builtin: Union[bool, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + The object describing a security filter. + + :param exclusion_filters: The list of exclusion filters applied in this security filter. + :type exclusion_filters: [SecurityFilterExclusionFilterResponse], optional + + :param filtered_data_type: The filtered data type. + :type filtered_data_type: SecurityFilterFilteredDataType, optional + + :param is_builtin: Whether the security filter is the built-in filter. + :type is_builtin: bool, optional + + :param is_enabled: Whether the security filter is enabled. + :type is_enabled: bool, optional + + :param name: The security filter name. + :type name: str, optional + + :param query: The security filter query. Logs accepted by this query will be accepted by this filter. + :type query: str, optional + + :param version: The version of the security filter. + :type version: int, optional + """ + if exclusion_filters is not unset: + kwargs["exclusion_filters"] = exclusion_filters + if filtered_data_type is not unset: + kwargs["filtered_data_type"] = filtered_data_type + if is_builtin is not unset: + kwargs["is_builtin"] = is_builtin + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_filter_create_attributes.py b/datadog_api_client/v2/model/security_filter_create_attributes.py new file mode 100644 index 0000000000..bee2d7c60a --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_create_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_exclusion_filter import SecurityFilterExclusionFilter + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + +class SecurityFilterCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_exclusion_filter import SecurityFilterExclusionFilter + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + return { + "exclusion_filters": ([SecurityFilterExclusionFilter],), + "filtered_data_type": (SecurityFilterFilteredDataType,), + "is_enabled": (bool,), + "name": (str,), + "query": (str,), + } + attribute_map = { + "exclusion_filters": "exclusion_filters", + "filtered_data_type": "filtered_data_type", + "is_enabled": "is_enabled", + "name": "name", + "query": "query", + } + + def __init__(self_, exclusion_filters: List[SecurityFilterExclusionFilter], filtered_data_type: SecurityFilterFilteredDataType, is_enabled: bool, name: str, query: str, **kwargs): + """ + Object containing the attributes of the security filter to be created. + + :param exclusion_filters: Exclusion filters to exclude some logs from the security filter. + :type exclusion_filters: [SecurityFilterExclusionFilter] + + :param filtered_data_type: The filtered data type. + :type filtered_data_type: SecurityFilterFilteredDataType + + :param is_enabled: Whether the security filter is enabled. + :type is_enabled: bool + + :param name: The name of the security filter. + :type name: str + + :param query: The query of the security filter. + :type query: str + """ + super().__init__(kwargs) + + + self_.exclusion_filters = exclusion_filters + self_.filtered_data_type = filtered_data_type + self_.is_enabled = is_enabled + self_.name = name + self_.query = query diff --git a/datadog_api_client/v2/model/security_filter_create_data.py b/datadog_api_client/v2/model/security_filter_create_data.py new file mode 100644 index 0000000000..b6581a362a --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_create_attributes import SecurityFilterCreateAttributes + from datadog_api_client.v2.model.security_filter_type import SecurityFilterType + +class SecurityFilterCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_create_attributes import SecurityFilterCreateAttributes + from datadog_api_client.v2.model.security_filter_type import SecurityFilterType + return { + "attributes": (SecurityFilterCreateAttributes,), + "type": (SecurityFilterType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityFilterCreateAttributes, type: SecurityFilterType, **kwargs): + """ + Object for a single security filter. + + :param attributes: Object containing the attributes of the security filter to be created. + :type attributes: SecurityFilterCreateAttributes + + :param type: The type of the resource. The value should always be ``security_filters``. + :type type: SecurityFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_filter_create_request.py b/datadog_api_client/v2/model/security_filter_create_request.py new file mode 100644 index 0000000000..6e3a4b2045 --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_create_data import SecurityFilterCreateData + +class SecurityFilterCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_create_data import SecurityFilterCreateData + return { + "data": (SecurityFilterCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityFilterCreateData, **kwargs): + """ + Request object that includes the security filter that you would like to create. + + :param data: Object for a single security filter. + :type data: SecurityFilterCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_filter_exclusion_filter.py b/datadog_api_client/v2/model/security_filter_exclusion_filter.py new file mode 100644 index 0000000000..c7f900e0dc --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_exclusion_filter.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityFilterExclusionFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "query": "query", + } + + def __init__(self_, name: str, query: str, **kwargs): + """ + Exclusion filter for the security filter. + + :param name: Exclusion filter name. + :type name: str + + :param query: Exclusion filter query. Logs that match this query are excluded from the security filter. + :type query: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.query = query diff --git a/datadog_api_client/v2/model/security_filter_exclusion_filter_response.py b/datadog_api_client/v2/model/security_filter_exclusion_filter_response.py new file mode 100644 index 0000000000..7a61a0e9cc --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_exclusion_filter_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityFilterExclusionFilterResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "query": (str,), + } + attribute_map = { + "name": "name", + "query": "query", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + A single exclusion filter. + + :param name: The exclusion filter name. + :type name: str, optional + + :param query: The exclusion filter query. + :type query: str, optional + """ + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_filter_filtered_data_type.py b/datadog_api_client/v2/model/security_filter_filtered_data_type.py new file mode 100644 index 0000000000..340d0b4fa1 --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_filtered_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityFilterFilteredDataType(ModelSimple): + """ + The filtered data type. + + :param value: If omitted defaults to "logs". Must be one of ["logs"]. + :type value: str + """ + + allowed_values = { + "logs", + } + LOGS: ClassVar["SecurityFilterFilteredDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityFilterFilteredDataType.LOGS = SecurityFilterFilteredDataType("logs") diff --git a/datadog_api_client/v2/model/security_filter_meta.py b/datadog_api_client/v2/model/security_filter_meta.py new file mode 100644 index 0000000000..8f926a07ce --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityFilterMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "warning": (str,), + } + attribute_map = { + "warning": "warning", + } + + def __init__(self_, warning: Union[str, UnsetType]=unset, **kwargs): + """ + Optional metadata associated to the response. + + :param warning: A warning message. + :type warning: str, optional + """ + if warning is not unset: + kwargs["warning"] = warning + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_filter_response.py b/datadog_api_client/v2/model/security_filter_response.py new file mode 100644 index 0000000000..d1f76572a3 --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter import SecurityFilter + from datadog_api_client.v2.model.security_filter_meta import SecurityFilterMeta + +class SecurityFilterResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter import SecurityFilter + from datadog_api_client.v2.model.security_filter_meta import SecurityFilterMeta + return { + "data": (SecurityFilter,), + "meta": (SecurityFilterMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[SecurityFilter, UnsetType]=unset, meta: Union[SecurityFilterMeta, UnsetType]=unset, **kwargs): + """ + Response object which includes a single security filter. + + :param data: The security filter's properties. + :type data: SecurityFilter, optional + + :param meta: Optional metadata associated to the response. + :type meta: SecurityFilterMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_filter_type.py b/datadog_api_client/v2/model/security_filter_type.py new file mode 100644 index 0000000000..623a24b2f9 --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityFilterType(ModelSimple): + """ + The type of the resource. The value should always be `security_filters`. + + :param value: If omitted defaults to "security_filters". Must be one of ["security_filters"]. + :type value: str + """ + + allowed_values = { + "security_filters", + } + SECURITY_FILTERS: ClassVar["SecurityFilterType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityFilterType.SECURITY_FILTERS = SecurityFilterType("security_filters") diff --git a/datadog_api_client/v2/model/security_filter_update_attributes.py b/datadog_api_client/v2/model/security_filter_update_attributes.py new file mode 100644 index 0000000000..6549648c1a --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_update_attributes.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_exclusion_filter import SecurityFilterExclusionFilter + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + +class SecurityFilterUpdateAttributes(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_exclusion_filter import SecurityFilterExclusionFilter + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + return { + "exclusion_filters": ([SecurityFilterExclusionFilter],), + "filtered_data_type": (SecurityFilterFilteredDataType,), + "is_enabled": (bool,), + "name": (str,), + "query": (str,), + "version": (int,), + } + attribute_map = { + "exclusion_filters": "exclusion_filters", + "filtered_data_type": "filtered_data_type", + "is_enabled": "is_enabled", + "name": "name", + "query": "query", + "version": "version", + } + + def __init__(self_, exclusion_filters: Union[List[SecurityFilterExclusionFilter], UnsetType]=unset, filtered_data_type: Union[SecurityFilterFilteredDataType, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + The security filters properties to be updated. + + :param exclusion_filters: Exclusion filters to exclude some logs from the security filter. + :type exclusion_filters: [SecurityFilterExclusionFilter], optional + + :param filtered_data_type: The filtered data type. + :type filtered_data_type: SecurityFilterFilteredDataType, optional + + :param is_enabled: Whether the security filter is enabled. + :type is_enabled: bool, optional + + :param name: The name of the security filter. + :type name: str, optional + + :param query: The query of the security filter. + :type query: str, optional + + :param version: The version of the security filter to update. + :type version: int, optional + """ + if exclusion_filters is not unset: + kwargs["exclusion_filters"] = exclusion_filters + if filtered_data_type is not unset: + kwargs["filtered_data_type"] = filtered_data_type + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_filter_update_data.py b/datadog_api_client/v2/model/security_filter_update_data.py new file mode 100644 index 0000000000..aff0192d5c --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_update_attributes import SecurityFilterUpdateAttributes + from datadog_api_client.v2.model.security_filter_type import SecurityFilterType + +class SecurityFilterUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_update_attributes import SecurityFilterUpdateAttributes + from datadog_api_client.v2.model.security_filter_type import SecurityFilterType + return { + "attributes": (SecurityFilterUpdateAttributes,), + "type": (SecurityFilterType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityFilterUpdateAttributes, type: SecurityFilterType, **kwargs): + """ + The new security filter properties. + + :param attributes: The security filters properties to be updated. + :type attributes: SecurityFilterUpdateAttributes + + :param type: The type of the resource. The value should always be ``security_filters``. + :type type: SecurityFilterType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_filter_update_request.py b/datadog_api_client/v2/model/security_filter_update_request.py new file mode 100644 index 0000000000..7e8e1ac63c --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_update_data import SecurityFilterUpdateData + +class SecurityFilterUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_update_data import SecurityFilterUpdateData + return { + "data": (SecurityFilterUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityFilterUpdateData, **kwargs): + """ + The new security filter body. + + :param data: The new security filter properties. + :type data: SecurityFilterUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_filter_version.py b/datadog_api_client/v2/model/security_filter_version.py new file mode 100644 index 0000000000..62ddf63a2e --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_version.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_version_attributes import SecurityFilterVersionAttributes + from datadog_api_client.v2.model.security_filter_version_type import SecurityFilterVersionType + +class SecurityFilterVersion(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_version_attributes import SecurityFilterVersionAttributes + from datadog_api_client.v2.model.security_filter_version_type import SecurityFilterVersionType + return { + "attributes": (SecurityFilterVersionAttributes,), + "id": (str,), + "type": (SecurityFilterVersionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityFilterVersionAttributes, id: str, type: SecurityFilterVersionType, **kwargs): + """ + A snapshot of all security filters at a specific configuration version. + + :param attributes: The attributes describing a single security filter configuration version. + :type attributes: SecurityFilterVersionAttributes + + :param id: The identifier of the configuration version. + :type id: str + + :param type: The type of the resource. The value should always be ``security_filters_configuration``. + :type type: SecurityFilterVersionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_filter_version_attributes.py b/datadog_api_client/v2/model/security_filter_version_attributes.py new file mode 100644 index 0000000000..1d15aa21d4 --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_version_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_version_entry import SecurityFilterVersionEntry + +class SecurityFilterVersionAttributes(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_version_entry import SecurityFilterVersionEntry + return { + "date": (int,), + "filters": ([SecurityFilterVersionEntry],), + "version": (int,), + } + attribute_map = { + "date": "date", + "filters": "filters", + "version": "version", + } + + def __init__(self_, date: int, filters: List[SecurityFilterVersionEntry], version: int, **kwargs): + """ + The attributes describing a single security filter configuration version. + + :param date: The Unix timestamp in milliseconds at which this configuration version was applied. + :type date: int + + :param filters: The set of security filters at this configuration version. + :type filters: [SecurityFilterVersionEntry] + + :param version: The configuration version number. + :type version: int + """ + super().__init__(kwargs) + + + self_.date = date + self_.filters = filters + self_.version = version diff --git a/datadog_api_client/v2/model/security_filter_version_entry.py b/datadog_api_client/v2/model/security_filter_version_entry.py new file mode 100644 index 0000000000..d05f8b378d --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_version_entry.py @@ -0,0 +1,97 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_exclusion_filter_response import SecurityFilterExclusionFilterResponse + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + +class SecurityFilterVersionEntry(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_exclusion_filter_response import SecurityFilterExclusionFilterResponse + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + return { + "exclusion_filters": ([SecurityFilterExclusionFilterResponse],), + "filtered_data_type": (SecurityFilterFilteredDataType,), + "id": (str,), + "is_builtin": (bool,), + "is_enabled": (bool,), + "name": (str,), + "query": (str,), + "version": (int,), + } + attribute_map = { + "exclusion_filters": "exclusion_filters", + "filtered_data_type": "filtered_data_type", + "id": "id", + "is_builtin": "is_builtin", + "is_enabled": "is_enabled", + "name": "name", + "query": "query", + "version": "version", + } + + def __init__(self_, exclusion_filters: List[SecurityFilterExclusionFilterResponse], filtered_data_type: SecurityFilterFilteredDataType, id: str, is_builtin: bool, is_enabled: bool, name: str, query: str, version: int, **kwargs): + """ + A single security filter as it existed at a given configuration version. + + :param exclusion_filters: The list of exclusion filters applied in this security filter. + :type exclusion_filters: [SecurityFilterExclusionFilterResponse] + + :param filtered_data_type: The filtered data type. + :type filtered_data_type: SecurityFilterFilteredDataType + + :param id: The ID of the security filter. + :type id: str + + :param is_builtin: Whether the security filter is the built-in filter. + :type is_builtin: bool + + :param is_enabled: Whether the security filter is enabled. + :type is_enabled: bool + + :param name: The name of the security filter. + :type name: str + + :param query: The query of the security filter. + :type query: str + + :param version: The version of this security filter. + :type version: int + """ + super().__init__(kwargs) + + + self_.exclusion_filters = exclusion_filters + self_.filtered_data_type = filtered_data_type + self_.id = id + self_.is_builtin = is_builtin + self_.is_enabled = is_enabled + self_.name = name + self_.query = query + self_.version = version diff --git a/datadog_api_client/v2/model/security_filter_version_type.py b/datadog_api_client/v2/model/security_filter_version_type.py new file mode 100644 index 0000000000..ac3f5fd242 --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_version_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityFilterVersionType(ModelSimple): + """ + The type of the resource. The value should always be `security_filters_configuration`. + + :param value: If omitted defaults to "security_filters_configuration". Must be one of ["security_filters_configuration"]. + :type value: str + """ + + allowed_values = { + "security_filters_configuration", + } + SECURITY_FILTERS_CONFIGURATION: ClassVar["SecurityFilterVersionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityFilterVersionType.SECURITY_FILTERS_CONFIGURATION = SecurityFilterVersionType("security_filters_configuration") diff --git a/datadog_api_client/v2/model/security_filter_versions_response.py b/datadog_api_client/v2/model/security_filter_versions_response.py new file mode 100644 index 0000000000..2fec23b37a --- /dev/null +++ b/datadog_api_client/v2/model/security_filter_versions_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter_version import SecurityFilterVersion + +class SecurityFilterVersionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter_version import SecurityFilterVersion + return { + "data": ([SecurityFilterVersion],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SecurityFilterVersion], **kwargs): + """ + Response containing the version history of security filters. + + :param data: A list of historical security filter configurations, ordered from the most recent to the oldest. + :type data: [SecurityFilterVersion] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_filters_response.py b/datadog_api_client/v2/model/security_filters_response.py new file mode 100644 index 0000000000..b5c716fbe1 --- /dev/null +++ b/datadog_api_client/v2/model/security_filters_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_filter import SecurityFilter + from datadog_api_client.v2.model.security_filter_meta import SecurityFilterMeta + +class SecurityFiltersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_filter import SecurityFilter + from datadog_api_client.v2.model.security_filter_meta import SecurityFilterMeta + return { + "data": ([SecurityFilter],), + "meta": (SecurityFilterMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[SecurityFilter], UnsetType]=unset, meta: Union[SecurityFilterMeta, UnsetType]=unset, **kwargs): + """ + All the available security filters objects. + + :param data: A list of security filters objects. + :type data: [SecurityFilter], optional + + :param meta: Optional metadata associated to the response. + :type meta: SecurityFilterMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_finding_type.py b/datadog_api_client/v2/model/security_finding_type.py new file mode 100644 index 0000000000..3f29b4cfd8 --- /dev/null +++ b/datadog_api_client/v2/model/security_finding_type.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityFindingType(ModelSimple): + """ + The type of security finding that the automation rule applies to. + + :param value: Must be one of ["api_security", "attack_path", "host_and_container_vulnerability", "iac_misconfiguration", "identity_risk", "library_vulnerability", "misconfiguration", "runtime_code_vulnerability", "secret", "static_code_vulnerability", "workload_activity"]. + :type value: str + """ + + allowed_values = { + "api_security", + "attack_path", + "host_and_container_vulnerability", + "iac_misconfiguration", + "identity_risk", + "library_vulnerability", + "misconfiguration", + "runtime_code_vulnerability", + "secret", + "static_code_vulnerability", + "workload_activity", + } + API_SECURITY: ClassVar["SecurityFindingType"] + ATTACK_PATH: ClassVar["SecurityFindingType"] + HOST_AND_CONTAINER_VULNERABILITY: ClassVar["SecurityFindingType"] + IAC_MISCONFIGURATION: ClassVar["SecurityFindingType"] + IDENTITY_RISK: ClassVar["SecurityFindingType"] + LIBRARY_VULNERABILITY: ClassVar["SecurityFindingType"] + MISCONFIGURATION: ClassVar["SecurityFindingType"] + RUNTIME_CODE_VULNERABILITY: ClassVar["SecurityFindingType"] + SECRET: ClassVar["SecurityFindingType"] + STATIC_CODE_VULNERABILITY: ClassVar["SecurityFindingType"] + WORKLOAD_ACTIVITY: ClassVar["SecurityFindingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityFindingType.API_SECURITY = SecurityFindingType("api_security") +SecurityFindingType.ATTACK_PATH = SecurityFindingType("attack_path") +SecurityFindingType.HOST_AND_CONTAINER_VULNERABILITY = SecurityFindingType("host_and_container_vulnerability") +SecurityFindingType.IAC_MISCONFIGURATION = SecurityFindingType("iac_misconfiguration") +SecurityFindingType.IDENTITY_RISK = SecurityFindingType("identity_risk") +SecurityFindingType.LIBRARY_VULNERABILITY = SecurityFindingType("library_vulnerability") +SecurityFindingType.MISCONFIGURATION = SecurityFindingType("misconfiguration") +SecurityFindingType.RUNTIME_CODE_VULNERABILITY = SecurityFindingType("runtime_code_vulnerability") +SecurityFindingType.SECRET = SecurityFindingType("secret") +SecurityFindingType.STATIC_CODE_VULNERABILITY = SecurityFindingType("static_code_vulnerability") +SecurityFindingType.WORKLOAD_ACTIVITY = SecurityFindingType("workload_activity") diff --git a/datadog_api_client/v2/model/security_findings_attributes.py b/datadog_api_client/v2/model/security_findings_attributes.py new file mode 100644 index 0000000000..8745c003bd --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityFindingsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tags": ([str],), + "timestamp": (int,), + } + attribute_map = { + "attributes": "attributes", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[int, UnsetType]=unset, **kwargs): + """ + The JSON object containing all attributes of the security finding. + + :param attributes: The custom attributes of the security finding. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tags: List of tags associated with the security finding. + :type tags: [str], optional + + :param timestamp: The Unix timestamp at which the detection changed for the resource. Same value as @detection_changed_at. + :type timestamp: int, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_findings_data.py b/datadog_api_client/v2/model/security_findings_data.py new file mode 100644 index 0000000000..547c56175a --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_findings_attributes import SecurityFindingsAttributes + from datadog_api_client.v2.model.security_findings_data_type import SecurityFindingsDataType + +class SecurityFindingsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_findings_attributes import SecurityFindingsAttributes + from datadog_api_client.v2.model.security_findings_data_type import SecurityFindingsDataType + return { + "attributes": (SecurityFindingsAttributes,), + "id": (str,), + "type": (SecurityFindingsDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityFindingsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SecurityFindingsDataType, UnsetType]=unset, **kwargs): + """ + A single security finding. + + :param attributes: The JSON object containing all attributes of the security finding. + :type attributes: SecurityFindingsAttributes, optional + + :param id: The unique ID of the security finding. + :type id: str, optional + + :param type: The type of the security finding resource. + :type type: SecurityFindingsDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_findings_data_type.py b/datadog_api_client/v2/model/security_findings_data_type.py new file mode 100644 index 0000000000..961efafd05 --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityFindingsDataType(ModelSimple): + """ + The type of the security finding resource. + + :param value: If omitted defaults to "finding". Must be one of ["finding"]. + :type value: str + """ + + allowed_values = { + "finding", + } + FINDING: ClassVar["SecurityFindingsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityFindingsDataType.FINDING = SecurityFindingsDataType("finding") diff --git a/datadog_api_client/v2/model/security_findings_links.py b/datadog_api_client/v2/model/security_findings_links.py new file mode 100644 index 0000000000..c01b6cfa92 --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityFindingsLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links for pagination. + + :param next: Link for the next page of results. Note that paginated requests can also be made using the POST endpoint. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_findings_meta.py b/datadog_api_client/v2/model/security_findings_meta.py new file mode 100644 index 0000000000..05281d616b --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_meta.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_findings_page import SecurityFindingsPage + from datadog_api_client.v2.model.security_findings_status import SecurityFindingsStatus + +class SecurityFindingsMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_findings_page import SecurityFindingsPage + from datadog_api_client.v2.model.security_findings_status import SecurityFindingsStatus + return { + "elapsed": (int,), + "page": (SecurityFindingsPage,), + "request_id": (str,), + "status": (SecurityFindingsStatus,), + } + attribute_map = { + "elapsed": "elapsed", + "page": "page", + "request_id": "request_id", + "status": "status", + } + + def __init__(self_, elapsed: Union[int, UnsetType]=unset, page: Union[SecurityFindingsPage, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, status: Union[SecurityFindingsStatus, UnsetType]=unset, **kwargs): + """ + Metadata about the response. + + :param elapsed: The time elapsed in milliseconds. + :type elapsed: int, optional + + :param page: Pagination information. + :type page: SecurityFindingsPage, optional + + :param request_id: The identifier of the request. + :type request_id: str, optional + + :param status: The status of the response. + :type status: SecurityFindingsStatus, optional + """ + if elapsed is not unset: + kwargs["elapsed"] = elapsed + if page is not unset: + kwargs["page"] = page + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_findings_page.py b/datadog_api_client/v2/model/security_findings_page.py new file mode 100644 index 0000000000..2c562ea8c5 --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityFindingsPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str,), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, **kwargs): + """ + Pagination information. + + :param after: The cursor used to get the next page of results. + :type after: str, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_findings_search_request.py b/datadog_api_client/v2/model/security_findings_search_request.py new file mode 100644 index 0000000000..429eaceb84 --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_search_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_findings_search_request_data import SecurityFindingsSearchRequestData + +class SecurityFindingsSearchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_findings_search_request_data import SecurityFindingsSearchRequestData + return { + "data": (SecurityFindingsSearchRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SecurityFindingsSearchRequestData, UnsetType]=unset, **kwargs): + """ + The request body for searching security findings. + + :param data: Request data for searching security findings. + :type data: SecurityFindingsSearchRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_findings_search_request_data.py b/datadog_api_client/v2/model/security_findings_search_request_data.py new file mode 100644 index 0000000000..a32aa91a27 --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_search_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_findings_search_request_data_attributes import SecurityFindingsSearchRequestDataAttributes + +class SecurityFindingsSearchRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_findings_search_request_data_attributes import SecurityFindingsSearchRequestDataAttributes + return { + "attributes": (SecurityFindingsSearchRequestDataAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: Union[SecurityFindingsSearchRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + Request data for searching security findings. + + :param attributes: Request attributes for searching security findings. + :type attributes: SecurityFindingsSearchRequestDataAttributes, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_findings_search_request_data_attributes.py b/datadog_api_client/v2/model/security_findings_search_request_data_attributes.py new file mode 100644 index 0000000000..b981fe259b --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_search_request_data_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_findings_search_request_page import SecurityFindingsSearchRequestPage + from datadog_api_client.v2.model.security_findings_sort import SecurityFindingsSort + +class SecurityFindingsSearchRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_findings_search_request_page import SecurityFindingsSearchRequestPage + from datadog_api_client.v2.model.security_findings_sort import SecurityFindingsSort + return { + "filter": (str,), + "page": (SecurityFindingsSearchRequestPage,), + "sort": (SecurityFindingsSort,), + } + attribute_map = { + "filter": "filter", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[str, UnsetType]=unset, page: Union[SecurityFindingsSearchRequestPage, UnsetType]=unset, sort: Union[SecurityFindingsSort, UnsetType]=unset, **kwargs): + """ + Request attributes for searching security findings. + + :param filter: The search query following log search syntax. + :type filter: str, optional + + :param page: Pagination attributes for the search request. + :type page: SecurityFindingsSearchRequestPage, optional + + :param sort: The sort parameters when querying security findings. + :type sort: SecurityFindingsSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_findings_search_request_page.py b/datadog_api_client/v2/model/security_findings_search_request_page.py new file mode 100644 index 0000000000..b8b9e2b6c9 --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_search_request_page.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityFindingsSearchRequestPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 150, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination attributes for the search request. + + :param cursor: Get the next page of results with a cursor provided in the previous query. + :type cursor: str, optional + + :param limit: The maximum number of security findings in the response. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_findings_sort.py b/datadog_api_client/v2/model/security_findings_sort.py new file mode 100644 index 0000000000..674c851d32 --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityFindingsSort(ModelSimple): + """ + The sort parameters when querying security findings. + + :param value: If omitted defaults to "-@detection_changed_at". Must be one of ["@detection_changed_at", "-@detection_changed_at"]. + :type value: str + """ + + allowed_values = { + "@detection_changed_at", + "-@detection_changed_at", + } + DETECTION_CHANGED_AT_ASC: ClassVar["SecurityFindingsSort"] + DETECTION_CHANGED_AT_DESC: ClassVar["SecurityFindingsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityFindingsSort.DETECTION_CHANGED_AT_ASC = SecurityFindingsSort("@detection_changed_at") +SecurityFindingsSort.DETECTION_CHANGED_AT_DESC = SecurityFindingsSort("-@detection_changed_at") diff --git a/datadog_api_client/v2/model/security_findings_status.py b/datadog_api_client/v2/model/security_findings_status.py new file mode 100644 index 0000000000..7027704b14 --- /dev/null +++ b/datadog_api_client/v2/model/security_findings_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityFindingsStatus(ModelSimple): + """ + The status of the response. + + :param value: Must be one of ["done", "timeout"]. + :type value: str + """ + + allowed_values = { + "done", + "timeout", + } + DONE: ClassVar["SecurityFindingsStatus"] + TIMEOUT: ClassVar["SecurityFindingsStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityFindingsStatus.DONE = SecurityFindingsStatus("done") +SecurityFindingsStatus.TIMEOUT = SecurityFindingsStatus("timeout") diff --git a/datadog_api_client/v2/model/security_monitoring_azure_app_registration.py b/datadog_api_client/v2/model/security_monitoring_azure_app_registration.py new file mode 100644 index 0000000000..c9f70012d1 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_azure_app_registration.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringAzureAppRegistration(ModelNormal): + @cached_property + def openapi_types(_): + return { + "client_id": (str,), + "error_count": (int,), + "resource_collection_enabled": (bool,), + "subscription_count": (int,), + "tenant_id": (str,), + } + attribute_map = { + "client_id": "client_id", + "error_count": "error_count", + "resource_collection_enabled": "resource_collection_enabled", + "subscription_count": "subscription_count", + "tenant_id": "tenant_id", + } + + def __init__(self_, client_id: str, error_count: int, resource_collection_enabled: bool, subscription_count: int, tenant_id: str, **kwargs): + """ + An Azure App Registration discovered for the organization. + + :param client_id: The client ID of the App Registration. + :type client_id: str + + :param error_count: The number of errors encountered while crawling resources for this App Registration. + :type error_count: int + + :param resource_collection_enabled: Whether resource collection is enabled for this App Registration. + :type resource_collection_enabled: bool + + :param subscription_count: The number of Azure subscriptions associated with this App Registration. + :type subscription_count: int + + :param tenant_id: The Azure tenant ID of the App Registration. + :type tenant_id: str + """ + super().__init__(kwargs) + + + self_.client_id = client_id + self_.error_count = error_count + self_.resource_collection_enabled = resource_collection_enabled + self_.subscription_count = subscription_count + self_.tenant_id = tenant_id diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_activation.py b/datadog_api_client/v2/model/security_monitoring_content_pack_activation.py new file mode 100644 index 0000000000..e4ac086152 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_activation.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackActivation(ModelSimple): + """ + The activation status of a content pack. + + :param value: Must be one of ["never_activated", "activated", "deactivated"]. + :type value: str + """ + + allowed_values = { + "never_activated", + "activated", + "deactivated", + } + NEVER_ACTIVATED: ClassVar["SecurityMonitoringContentPackActivation"] + ACTIVATED: ClassVar["SecurityMonitoringContentPackActivation"] + DEACTIVATED: ClassVar["SecurityMonitoringContentPackActivation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackActivation.NEVER_ACTIVATED = SecurityMonitoringContentPackActivation("never_activated") +SecurityMonitoringContentPackActivation.ACTIVATED = SecurityMonitoringContentPackActivation("activated") +SecurityMonitoringContentPackActivation.DEACTIVATED = SecurityMonitoringContentPackActivation("deactivated") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_app_sec_details.py b/datadog_api_client/v2/model/security_monitoring_content_pack_app_sec_details.py new file mode 100644 index 0000000000..8e36654629 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_app_sec_details.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_app_sec_details_type import SecurityMonitoringContentPackAppSecDetailsType + +class SecurityMonitoringContentPackAppSecDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_app_sec_details_type import SecurityMonitoringContentPackAppSecDetailsType + return { + "type": (SecurityMonitoringContentPackAppSecDetailsType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: SecurityMonitoringContentPackAppSecDetailsType, **kwargs): + """ + Details for an Application Security content pack. + + :param type: Type for Application Security content pack details. + :type type: SecurityMonitoringContentPackAppSecDetailsType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_app_sec_details_type.py b/datadog_api_client/v2/model/security_monitoring_content_pack_app_sec_details_type.py new file mode 100644 index 0000000000..e350c4e178 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_app_sec_details_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackAppSecDetailsType(ModelSimple): + """ + Type for Application Security content pack details. + + :param value: If omitted defaults to "appsec". Must be one of ["appsec"]. + :type value: str + """ + + allowed_values = { + "appsec", + } + APPSEC: ClassVar["SecurityMonitoringContentPackAppSecDetailsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackAppSecDetailsType.APPSEC = SecurityMonitoringContentPackAppSecDetailsType("appsec") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_audit_details.py b/datadog_api_client/v2/model/security_monitoring_content_pack_audit_details.py new file mode 100644 index 0000000000..15e5ce2150 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_audit_details.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_audit_details_type import SecurityMonitoringContentPackAuditDetailsType + +class SecurityMonitoringContentPackAuditDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_audit_details_type import SecurityMonitoringContentPackAuditDetailsType + return { + "type": (SecurityMonitoringContentPackAuditDetailsType,), + } + attribute_map = { + "type": "type", + } + + def __init__(self_, type: SecurityMonitoringContentPackAuditDetailsType, **kwargs): + """ + Details for an audit trail content pack. + + :param type: Type for audit trail content pack details. + :type type: SecurityMonitoringContentPackAuditDetailsType + """ + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_audit_details_type.py b/datadog_api_client/v2/model/security_monitoring_content_pack_audit_details_type.py new file mode 100644 index 0000000000..0f36454248 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_audit_details_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackAuditDetailsType(ModelSimple): + """ + Type for audit trail content pack details. + + :param value: If omitted defaults to "audit". Must be one of ["audit"]. + :type value: str + """ + + allowed_values = { + "audit", + } + AUDIT: ClassVar["SecurityMonitoringContentPackAuditDetailsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackAuditDetailsType.AUDIT = SecurityMonitoringContentPackAuditDetailsType("audit") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_entity_details.py b/datadog_api_client/v2/model/security_monitoring_content_pack_entity_details.py new file mode 100644 index 0000000000..75747ff76c --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_entity_details.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_activation import SecurityMonitoringContentPackActivation + from datadog_api_client.v2.model.security_monitoring_content_pack_entity_details_type import SecurityMonitoringContentPackEntityDetailsType + +class SecurityMonitoringContentPackEntityDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_activation import SecurityMonitoringContentPackActivation + from datadog_api_client.v2.model.security_monitoring_content_pack_entity_details_type import SecurityMonitoringContentPackEntityDetailsType + return { + "cp_activation": (SecurityMonitoringContentPackActivation,), + "type": (SecurityMonitoringContentPackEntityDetailsType,), + } + attribute_map = { + "cp_activation": "cp_activation", + "type": "type", + } + + def __init__(self_, cp_activation: SecurityMonitoringContentPackActivation, type: SecurityMonitoringContentPackEntityDetailsType, **kwargs): + """ + Details for an entity or identity content pack. + + :param cp_activation: The activation status of a content pack. + :type cp_activation: SecurityMonitoringContentPackActivation + + :param type: Type for entity content pack details. + :type type: SecurityMonitoringContentPackEntityDetailsType + """ + super().__init__(kwargs) + + + self_.cp_activation = cp_activation + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_entity_details_type.py b/datadog_api_client/v2/model/security_monitoring_content_pack_entity_details_type.py new file mode 100644 index 0000000000..86314a0b2a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_entity_details_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackEntityDetailsType(ModelSimple): + """ + Type for entity content pack details. + + :param value: If omitted defaults to "entity". Must be one of ["entity"]. + :type value: str + """ + + allowed_values = { + "entity", + } + ENTITY: ClassVar["SecurityMonitoringContentPackEntityDetailsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackEntityDetailsType.ENTITY = SecurityMonitoringContentPackEntityDetailsType("entity") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_integration_status.py b/datadog_api_client/v2/model/security_monitoring_content_pack_integration_status.py new file mode 100644 index 0000000000..e074953415 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_integration_status.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackIntegrationStatus(ModelSimple): + """ + The installation status of the related integration. + + :param value: Must be one of ["installed", "available", "partially_installed", "detected", "error"]. + :type value: str + """ + + allowed_values = { + "installed", + "available", + "partially_installed", + "detected", + "error", + } + INSTALLED: ClassVar["SecurityMonitoringContentPackIntegrationStatus"] + AVAILABLE: ClassVar["SecurityMonitoringContentPackIntegrationStatus"] + PARTIALLY_INSTALLED: ClassVar["SecurityMonitoringContentPackIntegrationStatus"] + DETECTED: ClassVar["SecurityMonitoringContentPackIntegrationStatus"] + ERROR: ClassVar["SecurityMonitoringContentPackIntegrationStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackIntegrationStatus.INSTALLED = SecurityMonitoringContentPackIntegrationStatus("installed") +SecurityMonitoringContentPackIntegrationStatus.AVAILABLE = SecurityMonitoringContentPackIntegrationStatus("available") +SecurityMonitoringContentPackIntegrationStatus.PARTIALLY_INSTALLED = SecurityMonitoringContentPackIntegrationStatus("partially_installed") +SecurityMonitoringContentPackIntegrationStatus.DETECTED = SecurityMonitoringContentPackIntegrationStatus("detected") +SecurityMonitoringContentPackIntegrationStatus.ERROR = SecurityMonitoringContentPackIntegrationStatus("error") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_logs_details.py b/datadog_api_client/v2/model/security_monitoring_content_pack_logs_details.py new file mode 100644 index 0000000000..80ef264050 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_logs_details.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_activation import SecurityMonitoringContentPackActivation + from datadog_api_client.v2.model.security_monitoring_content_pack_timestamp_bucket import SecurityMonitoringContentPackTimestampBucket + from datadog_api_client.v2.model.security_monitoring_content_pack_integration_status import SecurityMonitoringContentPackIntegrationStatus + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + +class SecurityMonitoringContentPackLogsDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_activation import SecurityMonitoringContentPackActivation + from datadog_api_client.v2.model.security_monitoring_content_pack_timestamp_bucket import SecurityMonitoringContentPackTimestampBucket + from datadog_api_client.v2.model.security_monitoring_content_pack_integration_status import SecurityMonitoringContentPackIntegrationStatus + from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType + return { + "cp_activation": (SecurityMonitoringContentPackActivation,), + "data_last_seen": (SecurityMonitoringContentPackTimestampBucket,), + "filters_configured": (bool,), + "integration_installed_status": (SecurityMonitoringContentPackIntegrationStatus,), + "logs_seen_from_any_index": (bool,), + "siem_index_incorrect": (bool,), + "type": (SecurityFilterFilteredDataType,), + } + attribute_map = { + "cp_activation": "cp_activation", + "data_last_seen": "data_last_seen", + "filters_configured": "filters_configured", + "integration_installed_status": "integration_installed_status", + "logs_seen_from_any_index": "logs_seen_from_any_index", + "siem_index_incorrect": "siem_index_incorrect", + "type": "type", + } + + def __init__(self_, cp_activation: SecurityMonitoringContentPackActivation, data_last_seen: SecurityMonitoringContentPackTimestampBucket, filters_configured: bool, integration_installed_status: SecurityMonitoringContentPackIntegrationStatus, logs_seen_from_any_index: bool, siem_index_incorrect: bool, type: SecurityFilterFilteredDataType, **kwargs): + """ + Details for a logs-based content pack. + + :param cp_activation: The activation status of a content pack. + :type cp_activation: SecurityMonitoringContentPackActivation + + :param data_last_seen: Timestamp bucket indicating when logs were last collected. + :type data_last_seen: SecurityMonitoringContentPackTimestampBucket + + :param filters_configured: Whether filters (Security Filters or Index Query depending on the pricing model) are + present and correctly configured to route logs into Cloud SIEM. + :type filters_configured: bool + + :param integration_installed_status: The installation status of the related integration. + :type integration_installed_status: SecurityMonitoringContentPackIntegrationStatus + + :param logs_seen_from_any_index: Whether logs for this content pack have been seen in any Datadog index in the last 72 hours. + :type logs_seen_from_any_index: bool + + :param siem_index_incorrect: Whether the Cloud SIEM index configuration is incorrect (only applies to certain pricing models). + :type siem_index_incorrect: bool + + :param type: The filtered data type. + :type type: SecurityFilterFilteredDataType + """ + super().__init__(kwargs) + + + self_.cp_activation = cp_activation + self_.data_last_seen = data_last_seen + self_.filters_configured = filters_configured + self_.integration_installed_status = integration_installed_status + self_.logs_seen_from_any_index = logs_seen_from_any_index + self_.siem_index_incorrect = siem_index_incorrect + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_onboarding_details.py b/datadog_api_client/v2/model/security_monitoring_content_pack_onboarding_details.py new file mode 100644 index 0000000000..233110fc8b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_onboarding_details.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_integration_status import SecurityMonitoringContentPackIntegrationStatus + from datadog_api_client.v2.model.security_monitoring_content_pack_onboarding_details_type import SecurityMonitoringContentPackOnboardingDetailsType + +class SecurityMonitoringContentPackOnboardingDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_integration_status import SecurityMonitoringContentPackIntegrationStatus + from datadog_api_client.v2.model.security_monitoring_content_pack_onboarding_details_type import SecurityMonitoringContentPackOnboardingDetailsType + return { + "integration_installed_status": (SecurityMonitoringContentPackIntegrationStatus,), + "logs_seen_from_any_index": (bool,), + "type": (SecurityMonitoringContentPackOnboardingDetailsType,), + } + attribute_map = { + "integration_installed_status": "integration_installed_status", + "logs_seen_from_any_index": "logs_seen_from_any_index", + "type": "type", + } + + def __init__(self_, logs_seen_from_any_index: bool, type: SecurityMonitoringContentPackOnboardingDetailsType, integration_installed_status: Union[SecurityMonitoringContentPackIntegrationStatus, UnsetType]=unset, **kwargs): + """ + Content pack details returned when Cloud SIEM is inactive for the requesting organization. + + :param integration_installed_status: The installation status of the related integration. + :type integration_installed_status: SecurityMonitoringContentPackIntegrationStatus, optional + + :param logs_seen_from_any_index: Whether logs for this content pack have been seen in any Datadog index in the last 72 hours. + :type logs_seen_from_any_index: bool + + :param type: Type for onboarding content pack details. + :type type: SecurityMonitoringContentPackOnboardingDetailsType + """ + if integration_installed_status is not unset: + kwargs["integration_installed_status"] = integration_installed_status + super().__init__(kwargs) + + + self_.logs_seen_from_any_index = logs_seen_from_any_index + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_onboarding_details_type.py b/datadog_api_client/v2/model/security_monitoring_content_pack_onboarding_details_type.py new file mode 100644 index 0000000000..3c5a2b7a26 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_onboarding_details_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackOnboardingDetailsType(ModelSimple): + """ + Type for onboarding content pack details. + + :param value: If omitted defaults to "onboarding". Must be one of ["onboarding"]. + :type value: str + """ + + allowed_values = { + "onboarding", + } + ONBOARDING: ClassVar["SecurityMonitoringContentPackOnboardingDetailsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackOnboardingDetailsType.ONBOARDING = SecurityMonitoringContentPackOnboardingDetailsType("onboarding") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_state_attributes.py b/datadog_api_client/v2/model/security_monitoring_content_pack_state_attributes.py new file mode 100644 index 0000000000..0a6f167515 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_state_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_state_details import SecurityMonitoringContentPackStateDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_status import SecurityMonitoringContentPackStatus + from datadog_api_client.v2.model.security_monitoring_content_pack_logs_details import SecurityMonitoringContentPackLogsDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_threat_intel_details import SecurityMonitoringContentPackThreatIntelDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_entity_details import SecurityMonitoringContentPackEntityDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_audit_details import SecurityMonitoringContentPackAuditDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_app_sec_details import SecurityMonitoringContentPackAppSecDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_vulnerability_details import SecurityMonitoringContentPackVulnerabilityDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_onboarding_details import SecurityMonitoringContentPackOnboardingDetails + +class SecurityMonitoringContentPackStateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_state_details import SecurityMonitoringContentPackStateDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_status import SecurityMonitoringContentPackStatus + return { + "details": (SecurityMonitoringContentPackStateDetails,), + "status": (SecurityMonitoringContentPackStatus,), + } + attribute_map = { + "details": "details", + "status": "status", + } + + def __init__(self_, details: Union[SecurityMonitoringContentPackStateDetails, SecurityMonitoringContentPackLogsDetails, SecurityMonitoringContentPackThreatIntelDetails, SecurityMonitoringContentPackEntityDetails, SecurityMonitoringContentPackAuditDetails, SecurityMonitoringContentPackAppSecDetails, SecurityMonitoringContentPackVulnerabilityDetails, SecurityMonitoringContentPackOnboardingDetails], status: SecurityMonitoringContentPackStatus, **kwargs): + """ + Attributes of a content pack state. + + :param details: Type-specific details for a content pack state. The set of fields present depends + on the content pack's ``type``. When Cloud SIEM is inactive for the requesting organization, ``onboarding`` is returned instead of the content pack's usual type, such as ``logs`` or ``vulnerability``.` + :type details: SecurityMonitoringContentPackStateDetails + + :param status: The current operational status of a content pack. + :type status: SecurityMonitoringContentPackStatus + """ + super().__init__(kwargs) + + + self_.details = details + self_.status = status diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_state_data.py b/datadog_api_client/v2/model/security_monitoring_content_pack_state_data.py new file mode 100644 index 0000000000..6c0ee55224 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_state_data.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_state_attributes import SecurityMonitoringContentPackStateAttributes + from datadog_api_client.v2.model.security_monitoring_content_pack_state_type import SecurityMonitoringContentPackStateType + from datadog_api_client.v2.model.security_monitoring_content_pack_logs_details import SecurityMonitoringContentPackLogsDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_threat_intel_details import SecurityMonitoringContentPackThreatIntelDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_entity_details import SecurityMonitoringContentPackEntityDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_audit_details import SecurityMonitoringContentPackAuditDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_app_sec_details import SecurityMonitoringContentPackAppSecDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_vulnerability_details import SecurityMonitoringContentPackVulnerabilityDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_onboarding_details import SecurityMonitoringContentPackOnboardingDetails + +class SecurityMonitoringContentPackStateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_state_attributes import SecurityMonitoringContentPackStateAttributes + from datadog_api_client.v2.model.security_monitoring_content_pack_state_type import SecurityMonitoringContentPackStateType + return { + "attributes": (SecurityMonitoringContentPackStateAttributes,), + "id": (str,), + "type": (SecurityMonitoringContentPackStateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringContentPackStateAttributes, id: str, type: SecurityMonitoringContentPackStateType, **kwargs): + """ + Content pack state data. + + :param attributes: Attributes of a content pack state. + :type attributes: SecurityMonitoringContentPackStateAttributes + + :param id: The content pack identifier. + :type id: str + + :param type: Type for content pack state object + :type type: SecurityMonitoringContentPackStateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_state_details.py b/datadog_api_client/v2/model/security_monitoring_content_pack_state_details.py new file mode 100644 index 0000000000..f725e9ca67 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_state_details.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringContentPackStateDetails(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Type-specific details for a content pack state. The set of fields present depends + on the content pack's ``type``. When Cloud SIEM is inactive for the requesting organization, ``onboarding`` is returned instead of the content pack's usual type, such as ``logs`` or ``vulnerability``.` + + :param cp_activation: The activation status of a content pack. + :type cp_activation: SecurityMonitoringContentPackActivation + + :param data_last_seen: Timestamp bucket indicating when logs were last collected. + :type data_last_seen: SecurityMonitoringContentPackTimestampBucket + + :param filters_configured: Whether filters (Security Filters or Index Query depending on the pricing model) are + present and correctly configured to route logs into Cloud SIEM. + :type filters_configured: bool + + :param integration_installed_status: The installation status of the related integration. + :type integration_installed_status: SecurityMonitoringContentPackIntegrationStatus + + :param logs_seen_from_any_index: Whether logs for this content pack have been seen in any Datadog index in the last 72 hours. + :type logs_seen_from_any_index: bool + + :param siem_index_incorrect: Whether the Cloud SIEM index configuration is incorrect (only applies to certain pricing models). + :type siem_index_incorrect: bool + + :param type: The filtered data type. + :type type: SecurityFilterFilteredDataType + """ + 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.security_monitoring_content_pack_logs_details import SecurityMonitoringContentPackLogsDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_threat_intel_details import SecurityMonitoringContentPackThreatIntelDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_entity_details import SecurityMonitoringContentPackEntityDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_audit_details import SecurityMonitoringContentPackAuditDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_app_sec_details import SecurityMonitoringContentPackAppSecDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_vulnerability_details import SecurityMonitoringContentPackVulnerabilityDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_onboarding_details import SecurityMonitoringContentPackOnboardingDetails + return { + "oneOf": [ + SecurityMonitoringContentPackLogsDetails, + SecurityMonitoringContentPackThreatIntelDetails, + SecurityMonitoringContentPackEntityDetails, + SecurityMonitoringContentPackAuditDetails, + SecurityMonitoringContentPackAppSecDetails, + SecurityMonitoringContentPackVulnerabilityDetails, + SecurityMonitoringContentPackOnboardingDetails, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_state_meta.py b/datadog_api_client/v2/model/security_monitoring_content_pack_state_meta.py new file mode 100644 index 0000000000..dca1cefb03 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_state_meta.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_sku import SecurityMonitoringSKU + +class SecurityMonitoringContentPackStateMeta(ModelNormal): + validations = { + "retention_months": { + "inclusive_maximum": 60, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_sku import SecurityMonitoringSKU + return { + "cloud_siem_index_incorrect": (bool,), + "retention_months": (int,), + "sku": (SecurityMonitoringSKU,), + } + attribute_map = { + "cloud_siem_index_incorrect": "cloud_siem_index_incorrect", + "retention_months": "retention_months", + "sku": "sku", + } + + def __init__(self_, cloud_siem_index_incorrect: bool, sku: SecurityMonitoringSKU, retention_months: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata for content pack states. + + :param cloud_siem_index_incorrect: Whether the Cloud SIEM index configuration is incorrect for the organization. + :type cloud_siem_index_incorrect: bool + + :param retention_months: The number of months that standard logs are retained for organizations on the standalone_indexed` pricing model. This field is omitted for other pricing models. + :type retention_months: int, optional + + :param sku: The Cloud SIEM pricing model (SKU) for the organization. + :type sku: SecurityMonitoringSKU + """ + if retention_months is not unset: + kwargs["retention_months"] = retention_months + super().__init__(kwargs) + + + self_.cloud_siem_index_incorrect = cloud_siem_index_incorrect + self_.sku = sku diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_state_type.py b/datadog_api_client/v2/model/security_monitoring_content_pack_state_type.py new file mode 100644 index 0000000000..2b026ea6f2 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_state_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackStateType(ModelSimple): + """ + Type for content pack state object + + :param value: If omitted defaults to "content_pack_state". Must be one of ["content_pack_state"]. + :type value: str + """ + + allowed_values = { + "content_pack_state", + } + CONTENT_PACK_STATE: ClassVar["SecurityMonitoringContentPackStateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackStateType.CONTENT_PACK_STATE = SecurityMonitoringContentPackStateType("content_pack_state") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_states_response.py b/datadog_api_client/v2/model/security_monitoring_content_pack_states_response.py new file mode 100644 index 0000000000..5b5a70b093 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_states_response.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_state_data import SecurityMonitoringContentPackStateData + from datadog_api_client.v2.model.security_monitoring_content_pack_state_meta import SecurityMonitoringContentPackStateMeta + from datadog_api_client.v2.model.security_monitoring_content_pack_logs_details import SecurityMonitoringContentPackLogsDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_threat_intel_details import SecurityMonitoringContentPackThreatIntelDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_entity_details import SecurityMonitoringContentPackEntityDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_audit_details import SecurityMonitoringContentPackAuditDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_app_sec_details import SecurityMonitoringContentPackAppSecDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_vulnerability_details import SecurityMonitoringContentPackVulnerabilityDetails + from datadog_api_client.v2.model.security_monitoring_content_pack_onboarding_details import SecurityMonitoringContentPackOnboardingDetails + +class SecurityMonitoringContentPackStatesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_state_data import SecurityMonitoringContentPackStateData + from datadog_api_client.v2.model.security_monitoring_content_pack_state_meta import SecurityMonitoringContentPackStateMeta + return { + "data": ([SecurityMonitoringContentPackStateData],), + "meta": (SecurityMonitoringContentPackStateMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[SecurityMonitoringContentPackStateData], meta: SecurityMonitoringContentPackStateMeta, **kwargs): + """ + Response containing content pack states. + + :param data: Array of content pack states. + :type data: [SecurityMonitoringContentPackStateData] + + :param meta: Metadata for content pack states. + :type meta: SecurityMonitoringContentPackStateMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_status.py b/datadog_api_client/v2/model/security_monitoring_content_pack_status.py new file mode 100644 index 0000000000..763bf35236 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_status.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackStatus(ModelSimple): + """ + The current operational status of a content pack. + + :param value: Must be one of ["install", "activate", "initializing", "active", "warning", "broken", "not_configured"]. + :type value: str + """ + + allowed_values = { + "install", + "activate", + "initializing", + "active", + "warning", + "broken", + "not_configured", + } + INSTALL: ClassVar["SecurityMonitoringContentPackStatus"] + ACTIVATE: ClassVar["SecurityMonitoringContentPackStatus"] + INITIALIZING: ClassVar["SecurityMonitoringContentPackStatus"] + ACTIVE: ClassVar["SecurityMonitoringContentPackStatus"] + WARNING: ClassVar["SecurityMonitoringContentPackStatus"] + BROKEN: ClassVar["SecurityMonitoringContentPackStatus"] + NOT_CONFIGURED: ClassVar["SecurityMonitoringContentPackStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackStatus.INSTALL = SecurityMonitoringContentPackStatus("install") +SecurityMonitoringContentPackStatus.ACTIVATE = SecurityMonitoringContentPackStatus("activate") +SecurityMonitoringContentPackStatus.INITIALIZING = SecurityMonitoringContentPackStatus("initializing") +SecurityMonitoringContentPackStatus.ACTIVE = SecurityMonitoringContentPackStatus("active") +SecurityMonitoringContentPackStatus.WARNING = SecurityMonitoringContentPackStatus("warning") +SecurityMonitoringContentPackStatus.BROKEN = SecurityMonitoringContentPackStatus("broken") +SecurityMonitoringContentPackStatus.NOT_CONFIGURED = SecurityMonitoringContentPackStatus("not_configured") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_threat_intel_details.py b/datadog_api_client/v2/model/security_monitoring_content_pack_threat_intel_details.py new file mode 100644 index 0000000000..03aca04601 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_threat_intel_details.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_activation import SecurityMonitoringContentPackActivation + from datadog_api_client.v2.model.security_monitoring_content_pack_timestamp_bucket import SecurityMonitoringContentPackTimestampBucket + from datadog_api_client.v2.model.security_monitoring_content_pack_integration_status import SecurityMonitoringContentPackIntegrationStatus + from datadog_api_client.v2.model.security_monitoring_content_pack_threat_intel_details_type import SecurityMonitoringContentPackThreatIntelDetailsType + +class SecurityMonitoringContentPackThreatIntelDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_activation import SecurityMonitoringContentPackActivation + from datadog_api_client.v2.model.security_monitoring_content_pack_timestamp_bucket import SecurityMonitoringContentPackTimestampBucket + from datadog_api_client.v2.model.security_monitoring_content_pack_integration_status import SecurityMonitoringContentPackIntegrationStatus + from datadog_api_client.v2.model.security_monitoring_content_pack_threat_intel_details_type import SecurityMonitoringContentPackThreatIntelDetailsType + return { + "cp_activation": (SecurityMonitoringContentPackActivation,), + "data_last_seen": (SecurityMonitoringContentPackTimestampBucket,), + "integration_installed_status": (SecurityMonitoringContentPackIntegrationStatus,), + "type": (SecurityMonitoringContentPackThreatIntelDetailsType,), + } + attribute_map = { + "cp_activation": "cp_activation", + "data_last_seen": "data_last_seen", + "integration_installed_status": "integration_installed_status", + "type": "type", + } + + def __init__(self_, cp_activation: SecurityMonitoringContentPackActivation, data_last_seen: SecurityMonitoringContentPackTimestampBucket, integration_installed_status: SecurityMonitoringContentPackIntegrationStatus, type: SecurityMonitoringContentPackThreatIntelDetailsType, **kwargs): + """ + Details for a threat intelligence content pack. + + :param cp_activation: The activation status of a content pack. + :type cp_activation: SecurityMonitoringContentPackActivation + + :param data_last_seen: Timestamp bucket indicating when logs were last collected. + :type data_last_seen: SecurityMonitoringContentPackTimestampBucket + + :param integration_installed_status: The installation status of the related integration. + :type integration_installed_status: SecurityMonitoringContentPackIntegrationStatus + + :param type: Type for threat intelligence content pack details. + :type type: SecurityMonitoringContentPackThreatIntelDetailsType + """ + super().__init__(kwargs) + + + self_.cp_activation = cp_activation + self_.data_last_seen = data_last_seen + self_.integration_installed_status = integration_installed_status + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_threat_intel_details_type.py b/datadog_api_client/v2/model/security_monitoring_content_pack_threat_intel_details_type.py new file mode 100644 index 0000000000..9b11e2461d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_threat_intel_details_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackThreatIntelDetailsType(ModelSimple): + """ + Type for threat intelligence content pack details. + + :param value: If omitted defaults to "threat_intel". Must be one of ["threat_intel"]. + :type value: str + """ + + allowed_values = { + "threat_intel", + } + THREAT_INTEL: ClassVar["SecurityMonitoringContentPackThreatIntelDetailsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackThreatIntelDetailsType.THREAT_INTEL = SecurityMonitoringContentPackThreatIntelDetailsType("threat_intel") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_timestamp_bucket.py b/datadog_api_client/v2/model/security_monitoring_content_pack_timestamp_bucket.py new file mode 100644 index 0000000000..fef3a04643 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_timestamp_bucket.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackTimestampBucket(ModelSimple): + """ + Timestamp bucket indicating when logs were last collected. + + :param value: Must be one of ["not_seen", "within_24_hours", "within_24_to_72_hours", "over_72h_to_30d", "over_30d"]. + :type value: str + """ + + allowed_values = { + "not_seen", + "within_24_hours", + "within_24_to_72_hours", + "over_72h_to_30d", + "over_30d", + } + NOT_SEEN: ClassVar["SecurityMonitoringContentPackTimestampBucket"] + WITHIN_24_HOURS: ClassVar["SecurityMonitoringContentPackTimestampBucket"] + WITHIN_24_TO_72_HOURS: ClassVar["SecurityMonitoringContentPackTimestampBucket"] + OVER_72H_TO_30D: ClassVar["SecurityMonitoringContentPackTimestampBucket"] + OVER_30D: ClassVar["SecurityMonitoringContentPackTimestampBucket"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackTimestampBucket.NOT_SEEN = SecurityMonitoringContentPackTimestampBucket("not_seen") +SecurityMonitoringContentPackTimestampBucket.WITHIN_24_HOURS = SecurityMonitoringContentPackTimestampBucket("within_24_hours") +SecurityMonitoringContentPackTimestampBucket.WITHIN_24_TO_72_HOURS = SecurityMonitoringContentPackTimestampBucket("within_24_to_72_hours") +SecurityMonitoringContentPackTimestampBucket.OVER_72H_TO_30D = SecurityMonitoringContentPackTimestampBucket("over_72h_to_30d") +SecurityMonitoringContentPackTimestampBucket.OVER_30D = SecurityMonitoringContentPackTimestampBucket("over_30d") diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_vulnerability_details.py b/datadog_api_client/v2/model/security_monitoring_content_pack_vulnerability_details.py new file mode 100644 index 0000000000..423e7c3577 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_vulnerability_details.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_content_pack_activation import SecurityMonitoringContentPackActivation + from datadog_api_client.v2.model.security_monitoring_content_pack_timestamp_bucket import SecurityMonitoringContentPackTimestampBucket + from datadog_api_client.v2.model.security_monitoring_content_pack_integration_status import SecurityMonitoringContentPackIntegrationStatus + from datadog_api_client.v2.model.security_monitoring_content_pack_vulnerability_details_type import SecurityMonitoringContentPackVulnerabilityDetailsType + +class SecurityMonitoringContentPackVulnerabilityDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_content_pack_activation import SecurityMonitoringContentPackActivation + from datadog_api_client.v2.model.security_monitoring_content_pack_timestamp_bucket import SecurityMonitoringContentPackTimestampBucket + from datadog_api_client.v2.model.security_monitoring_content_pack_integration_status import SecurityMonitoringContentPackIntegrationStatus + from datadog_api_client.v2.model.security_monitoring_content_pack_vulnerability_details_type import SecurityMonitoringContentPackVulnerabilityDetailsType + return { + "cp_activation": (SecurityMonitoringContentPackActivation,), + "data_last_seen": (SecurityMonitoringContentPackTimestampBucket,), + "integration_installed_status": (SecurityMonitoringContentPackIntegrationStatus,), + "type": (SecurityMonitoringContentPackVulnerabilityDetailsType,), + } + attribute_map = { + "cp_activation": "cp_activation", + "data_last_seen": "data_last_seen", + "integration_installed_status": "integration_installed_status", + "type": "type", + } + + def __init__(self_, cp_activation: SecurityMonitoringContentPackActivation, data_last_seen: SecurityMonitoringContentPackTimestampBucket, integration_installed_status: SecurityMonitoringContentPackIntegrationStatus, type: SecurityMonitoringContentPackVulnerabilityDetailsType, **kwargs): + """ + Details for a vulnerability content pack. + + :param cp_activation: The activation status of a content pack. + :type cp_activation: SecurityMonitoringContentPackActivation + + :param data_last_seen: Timestamp bucket indicating when logs were last collected. + :type data_last_seen: SecurityMonitoringContentPackTimestampBucket + + :param integration_installed_status: The installation status of the related integration. + :type integration_installed_status: SecurityMonitoringContentPackIntegrationStatus + + :param type: Type for vulnerability content pack details. + :type type: SecurityMonitoringContentPackVulnerabilityDetailsType + """ + super().__init__(kwargs) + + + self_.cp_activation = cp_activation + self_.data_last_seen = data_last_seen + self_.integration_installed_status = integration_installed_status + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_content_pack_vulnerability_details_type.py b/datadog_api_client/v2/model/security_monitoring_content_pack_vulnerability_details_type.py new file mode 100644 index 0000000000..a22f3346de --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_content_pack_vulnerability_details_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringContentPackVulnerabilityDetailsType(ModelSimple): + """ + Type for vulnerability content pack details. + + :param value: If omitted defaults to "vulnerability". Must be one of ["vulnerability"]. + :type value: str + """ + + allowed_values = { + "vulnerability", + } + VULNERABILITY: ClassVar["SecurityMonitoringContentPackVulnerabilityDetailsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringContentPackVulnerabilityDetailsType.VULNERABILITY = SecurityMonitoringContentPackVulnerabilityDetailsType("vulnerability") diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset.py b/datadog_api_client/v2/model/security_monitoring_critical_asset.py new file mode 100644 index 0000000000..46d3e5a06b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_critical_asset_attributes import SecurityMonitoringCriticalAssetAttributes + from datadog_api_client.v2.model.security_monitoring_critical_asset_type import SecurityMonitoringCriticalAssetType + +class SecurityMonitoringCriticalAsset(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_critical_asset_attributes import SecurityMonitoringCriticalAssetAttributes + from datadog_api_client.v2.model.security_monitoring_critical_asset_type import SecurityMonitoringCriticalAssetType + return { + "attributes": (SecurityMonitoringCriticalAssetAttributes,), + "id": (str,), + "type": (SecurityMonitoringCriticalAssetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityMonitoringCriticalAssetAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SecurityMonitoringCriticalAssetType, UnsetType]=unset, **kwargs): + """ + The critical asset's properties. + + :param attributes: The attributes of the critical asset. + :type attributes: SecurityMonitoringCriticalAssetAttributes, optional + + :param id: The ID of the critical asset. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``critical_assets``. + :type type: SecurityMonitoringCriticalAssetType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_attributes.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_attributes.py new file mode 100644 index 0000000000..ceaf97c7c5 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_attributes.py @@ -0,0 +1,147 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_user import SecurityMonitoringUser + from datadog_api_client.v2.model.security_monitoring_critical_asset_severity import SecurityMonitoringCriticalAssetSeverity + +class SecurityMonitoringCriticalAssetAttributes(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_user import SecurityMonitoringUser + from datadog_api_client.v2.model.security_monitoring_critical_asset_severity import SecurityMonitoringCriticalAssetSeverity + return { + "creation_author_id": (int,), + "creation_date": (int,), + "creator": (SecurityMonitoringUser,), + "description": (str,), + "editable": (bool,), + "enabled": (bool,), + "query": (str,), + "rule_query": (str,), + "severity": (SecurityMonitoringCriticalAssetSeverity,), + "tags": ([str],), + "update_author_id": (int,), + "update_date": (int,), + "updater": (SecurityMonitoringUser,), + "version": (int,), + } + attribute_map = { + "creation_author_id": "creation_author_id", + "creation_date": "creation_date", + "creator": "creator", + "description": "description", + "editable": "editable", + "enabled": "enabled", + "query": "query", + "rule_query": "rule_query", + "severity": "severity", + "tags": "tags", + "update_author_id": "update_author_id", + "update_date": "update_date", + "updater": "updater", + "version": "version", + } + + def __init__(self_, creation_author_id: Union[int, UnsetType]=unset, creation_date: Union[int, UnsetType]=unset, creator: Union[SecurityMonitoringUser, UnsetType]=unset, description: Union[str, UnsetType]=unset, editable: Union[bool, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, rule_query: Union[str, UnsetType]=unset, severity: Union[SecurityMonitoringCriticalAssetSeverity, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, update_author_id: Union[int, UnsetType]=unset, update_date: Union[int, UnsetType]=unset, updater: Union[SecurityMonitoringUser, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + The attributes of the critical asset. + + :param creation_author_id: ID of user who created the critical asset. + :type creation_author_id: int, optional + + :param creation_date: A Unix millisecond timestamp given the creation date of the critical asset. + :type creation_date: int, optional + + :param creator: A user. + :type creator: SecurityMonitoringUser, optional + + :param description: A description of the critical asset. + :type description: str, optional + + :param editable: Whether the critical asset is editable. + :type editable: bool, optional + + :param enabled: Whether the critical asset is enabled. + :type enabled: bool, optional + + :param query: The query for the critical asset. It uses the same syntax as the queries to search signals in the Signals Explorer. + :type query: str, optional + + :param rule_query: The rule query of the critical asset, with the same syntax as the search bar for detection rules. This determines which rules this critical asset will apply to. + :type rule_query: str, optional + + :param severity: Severity associated with this critical asset. Either an explicit severity can be set, or the severity can be increased or decreased, or the severity can be left unchanged (no-op). + :type severity: SecurityMonitoringCriticalAssetSeverity, optional + + :param tags: List of tags associated with the critical asset. + :type tags: [str], optional + + :param update_author_id: ID of user who updated the critical asset. + :type update_author_id: int, optional + + :param update_date: A Unix millisecond timestamp given the update date of the critical asset. + :type update_date: int, optional + + :param updater: A user. + :type updater: SecurityMonitoringUser, optional + + :param version: The version of the critical asset; it starts at 1, and is incremented at each update. + :type version: int, optional + """ + if creation_author_id is not unset: + kwargs["creation_author_id"] = creation_author_id + if creation_date is not unset: + kwargs["creation_date"] = creation_date + if creator is not unset: + kwargs["creator"] = creator + if description is not unset: + kwargs["description"] = description + if editable is not unset: + kwargs["editable"] = editable + if enabled is not unset: + kwargs["enabled"] = enabled + if query is not unset: + kwargs["query"] = query + if rule_query is not unset: + kwargs["rule_query"] = rule_query + if severity is not unset: + kwargs["severity"] = severity + if tags is not unset: + kwargs["tags"] = tags + if update_author_id is not unset: + kwargs["update_author_id"] = update_author_id + if update_date is not unset: + kwargs["update_date"] = update_date + if updater is not unset: + kwargs["updater"] = updater + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_create_attributes.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_create_attributes.py new file mode 100644 index 0000000000..1ec0b98f27 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_create_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_critical_asset_severity import SecurityMonitoringCriticalAssetSeverity + +class SecurityMonitoringCriticalAssetCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_critical_asset_severity import SecurityMonitoringCriticalAssetSeverity + return { + "description": (str,), + "enabled": (bool,), + "query": (str,), + "rule_query": (str,), + "severity": (SecurityMonitoringCriticalAssetSeverity,), + "tags": ([str],), + } + attribute_map = { + "description": "description", + "enabled": "enabled", + "query": "query", + "rule_query": "rule_query", + "severity": "severity", + "tags": "tags", + } + + def __init__(self_, query: str, rule_query: str, severity: SecurityMonitoringCriticalAssetSeverity, description: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing the attributes of the critical asset to be created. + + :param description: A description of the critical asset. + :type description: str, optional + + :param enabled: Whether the critical asset is enabled. Defaults to ``true`` if not specified. + :type enabled: bool, optional + + :param query: The query for the critical asset. It uses the same syntax as the queries to search signals in the Signals Explorer. + :type query: str + + :param rule_query: The rule query of the critical asset, with the same syntax as the search bar for detection rules. This determines which rules this critical asset will apply to. + :type rule_query: str + + :param severity: Severity associated with this critical asset. Either an explicit severity can be set, or the severity can be increased or decreased, or the severity can be left unchanged (no-op). + :type severity: SecurityMonitoringCriticalAssetSeverity + + :param tags: List of tags associated with the critical asset. + :type tags: [str], optional + """ + if description is not unset: + kwargs["description"] = description + if enabled is not unset: + kwargs["enabled"] = enabled + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.query = query + self_.rule_query = rule_query + self_.severity = severity diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_create_data.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_create_data.py new file mode 100644 index 0000000000..a41ae012c2 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_critical_asset_create_attributes import SecurityMonitoringCriticalAssetCreateAttributes + from datadog_api_client.v2.model.security_monitoring_critical_asset_type import SecurityMonitoringCriticalAssetType + +class SecurityMonitoringCriticalAssetCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_critical_asset_create_attributes import SecurityMonitoringCriticalAssetCreateAttributes + from datadog_api_client.v2.model.security_monitoring_critical_asset_type import SecurityMonitoringCriticalAssetType + return { + "attributes": (SecurityMonitoringCriticalAssetCreateAttributes,), + "type": (SecurityMonitoringCriticalAssetType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringCriticalAssetCreateAttributes, type: SecurityMonitoringCriticalAssetType, **kwargs): + """ + Object for a single critical asset. + + :param attributes: Object containing the attributes of the critical asset to be created. + :type attributes: SecurityMonitoringCriticalAssetCreateAttributes + + :param type: The type of the resource. The value should always be ``critical_assets``. + :type type: SecurityMonitoringCriticalAssetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_create_request.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_create_request.py new file mode 100644 index 0000000000..cf8cc0284a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_critical_asset_create_data import SecurityMonitoringCriticalAssetCreateData + +class SecurityMonitoringCriticalAssetCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_critical_asset_create_data import SecurityMonitoringCriticalAssetCreateData + return { + "data": (SecurityMonitoringCriticalAssetCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringCriticalAssetCreateData, **kwargs): + """ + Request object that includes the critical asset that you would like to create. + + :param data: Object for a single critical asset. + :type data: SecurityMonitoringCriticalAssetCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_response.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_response.py new file mode 100644 index 0000000000..1a515417f9 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_critical_asset import SecurityMonitoringCriticalAsset + +class SecurityMonitoringCriticalAssetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_critical_asset import SecurityMonitoringCriticalAsset + return { + "data": (SecurityMonitoringCriticalAsset,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SecurityMonitoringCriticalAsset, UnsetType]=unset, **kwargs): + """ + Response object containing a single critical asset. + + :param data: The critical asset's properties. + :type data: SecurityMonitoringCriticalAsset, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_severity.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_severity.py new file mode 100644 index 0000000000..9dd3ea32b0 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_severity.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringCriticalAssetSeverity(ModelSimple): + """ + Severity associated with this critical asset. Either an explicit severity can be set, or the severity can be increased or decreased, or the severity can be left unchanged (no-op). + + :param value: Must be one of ["info", "low", "medium", "high", "critical", "increase", "decrease", "no-op"]. + :type value: str + """ + + allowed_values = { + "info", + "low", + "medium", + "high", + "critical", + "increase", + "decrease", + "no-op", + } + INFO: ClassVar["SecurityMonitoringCriticalAssetSeverity"] + LOW: ClassVar["SecurityMonitoringCriticalAssetSeverity"] + MEDIUM: ClassVar["SecurityMonitoringCriticalAssetSeverity"] + HIGH: ClassVar["SecurityMonitoringCriticalAssetSeverity"] + CRITICAL: ClassVar["SecurityMonitoringCriticalAssetSeverity"] + INCREASE: ClassVar["SecurityMonitoringCriticalAssetSeverity"] + DECREASE: ClassVar["SecurityMonitoringCriticalAssetSeverity"] + NO_OP: ClassVar["SecurityMonitoringCriticalAssetSeverity"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringCriticalAssetSeverity.INFO = SecurityMonitoringCriticalAssetSeverity("info") +SecurityMonitoringCriticalAssetSeverity.LOW = SecurityMonitoringCriticalAssetSeverity("low") +SecurityMonitoringCriticalAssetSeverity.MEDIUM = SecurityMonitoringCriticalAssetSeverity("medium") +SecurityMonitoringCriticalAssetSeverity.HIGH = SecurityMonitoringCriticalAssetSeverity("high") +SecurityMonitoringCriticalAssetSeverity.CRITICAL = SecurityMonitoringCriticalAssetSeverity("critical") +SecurityMonitoringCriticalAssetSeverity.INCREASE = SecurityMonitoringCriticalAssetSeverity("increase") +SecurityMonitoringCriticalAssetSeverity.DECREASE = SecurityMonitoringCriticalAssetSeverity("decrease") +SecurityMonitoringCriticalAssetSeverity.NO_OP = SecurityMonitoringCriticalAssetSeverity("no-op") diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_type.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_type.py new file mode 100644 index 0000000000..e87de24102 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringCriticalAssetType(ModelSimple): + """ + The type of the resource. The value should always be `critical_assets`. + + :param value: If omitted defaults to "critical_assets". Must be one of ["critical_assets"]. + :type value: str + """ + + allowed_values = { + "critical_assets", + } + CRITICAL_ASSETS: ClassVar["SecurityMonitoringCriticalAssetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringCriticalAssetType.CRITICAL_ASSETS = SecurityMonitoringCriticalAssetType("critical_assets") diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_update_attributes.py new file mode 100644 index 0000000000..7eecfd02ae --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_update_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_critical_asset_severity import SecurityMonitoringCriticalAssetSeverity + +class SecurityMonitoringCriticalAssetUpdateAttributes(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_critical_asset_severity import SecurityMonitoringCriticalAssetSeverity + return { + "description": (str,), + "enabled": (bool,), + "query": (str,), + "rule_query": (str,), + "severity": (SecurityMonitoringCriticalAssetSeverity,), + "tags": ([str],), + "version": (int,), + } + attribute_map = { + "description": "description", + "enabled": "enabled", + "query": "query", + "rule_query": "rule_query", + "severity": "severity", + "tags": "tags", + "version": "version", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, query: Union[str, UnsetType]=unset, rule_query: Union[str, UnsetType]=unset, severity: Union[SecurityMonitoringCriticalAssetSeverity, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + The critical asset properties to be updated. + + :param description: A description of the critical asset. + :type description: str, optional + + :param enabled: Whether the critical asset is enabled. + :type enabled: bool, optional + + :param query: The query for the critical asset. It uses the same syntax as the queries to search signals in the Signals Explorer. + :type query: str, optional + + :param rule_query: The rule query of the critical asset, with the same syntax as the search bar for detection rules. This determines which rules this critical asset will apply to. + :type rule_query: str, optional + + :param severity: Severity associated with this critical asset. Either an explicit severity can be set, or the severity can be increased or decreased, or the severity can be left unchanged (no-op). + :type severity: SecurityMonitoringCriticalAssetSeverity, optional + + :param tags: List of tags associated with the critical asset. + :type tags: [str], optional + + :param version: The version of the critical asset being updated. Used for optimistic locking to prevent concurrent modifications. + :type version: int, optional + """ + if description is not unset: + kwargs["description"] = description + if enabled is not unset: + kwargs["enabled"] = enabled + if query is not unset: + kwargs["query"] = query + if rule_query is not unset: + kwargs["rule_query"] = rule_query + if severity is not unset: + kwargs["severity"] = severity + if tags is not unset: + kwargs["tags"] = tags + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_update_data.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_update_data.py new file mode 100644 index 0000000000..ac5639709d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_critical_asset_update_attributes import SecurityMonitoringCriticalAssetUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_critical_asset_type import SecurityMonitoringCriticalAssetType + +class SecurityMonitoringCriticalAssetUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_critical_asset_update_attributes import SecurityMonitoringCriticalAssetUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_critical_asset_type import SecurityMonitoringCriticalAssetType + return { + "attributes": (SecurityMonitoringCriticalAssetUpdateAttributes,), + "type": (SecurityMonitoringCriticalAssetType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringCriticalAssetUpdateAttributes, type: SecurityMonitoringCriticalAssetType, **kwargs): + """ + The new critical asset properties; partial updates are supported. + + :param attributes: The critical asset properties to be updated. + :type attributes: SecurityMonitoringCriticalAssetUpdateAttributes + + :param type: The type of the resource. The value should always be ``critical_assets``. + :type type: SecurityMonitoringCriticalAssetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_critical_asset_update_request.py b/datadog_api_client/v2/model/security_monitoring_critical_asset_update_request.py new file mode 100644 index 0000000000..35009ddbee --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_asset_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_critical_asset_update_data import SecurityMonitoringCriticalAssetUpdateData + +class SecurityMonitoringCriticalAssetUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_critical_asset_update_data import SecurityMonitoringCriticalAssetUpdateData + return { + "data": (SecurityMonitoringCriticalAssetUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringCriticalAssetUpdateData, **kwargs): + """ + Request object containing the fields to update on the critical asset. + + :param data: The new critical asset properties; partial updates are supported. + :type data: SecurityMonitoringCriticalAssetUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_critical_assets_response.py b/datadog_api_client/v2/model/security_monitoring_critical_assets_response.py new file mode 100644 index 0000000000..7150a39f6d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_critical_assets_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_critical_asset import SecurityMonitoringCriticalAsset + +class SecurityMonitoringCriticalAssetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_critical_asset import SecurityMonitoringCriticalAsset + return { + "data": ([SecurityMonitoringCriticalAsset],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SecurityMonitoringCriticalAsset], UnsetType]=unset, **kwargs): + """ + Response object containing the available critical assets. + + :param data: A list of critical assets objects. + :type data: [SecurityMonitoringCriticalAsset], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_crowd_strike_integration_config_create_attributes.py b/datadog_api_client/v2/model/security_monitoring_crowd_strike_integration_config_create_attributes.py new file mode 100644 index 0000000000..da5194ebaa --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_crowd_strike_integration_config_create_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_crowd_strike import SecurityMonitoringIntegrationTypeCrowdStrike + from datadog_api_client.v2.model.security_monitoring_integration_config_crowd_strike_secrets import SecurityMonitoringIntegrationConfigCrowdStrikeSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringCrowdStrikeIntegrationConfigCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_crowd_strike import SecurityMonitoringIntegrationTypeCrowdStrike + from datadog_api_client.v2.model.security_monitoring_integration_config_crowd_strike_secrets import SecurityMonitoringIntegrationConfigCrowdStrikeSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeCrowdStrike,), + "name": (str,), + "secrets": (SecurityMonitoringIntegrationConfigCrowdStrikeSecrets,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeCrowdStrike, name: str, secrets: SecurityMonitoringIntegrationConfigCrowdStrikeSecrets, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + The attributes of a CrowdStrike entity context sync configuration to create. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for a CrowdStrike entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeCrowdStrike + + :param name: The display name for the entity context sync configuration. + :type name: str + + :param secrets: Credentials for a CrowdStrike entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigCrowdStrikeSecrets + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type + self_.name = name + self_.secrets = secrets diff --git a/datadog_api_client/v2/model/security_monitoring_crowd_strike_integration_config_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_crowd_strike_integration_config_update_attributes.py new file mode 100644 index 0000000000..616519bbce --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_crowd_strike_integration_config_update_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_crowd_strike import SecurityMonitoringIntegrationTypeCrowdStrike + from datadog_api_client.v2.model.security_monitoring_integration_config_crowd_strike_secrets import SecurityMonitoringIntegrationConfigCrowdStrikeSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringCrowdStrikeIntegrationConfigUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_crowd_strike import SecurityMonitoringIntegrationTypeCrowdStrike + from datadog_api_client.v2.model.security_monitoring_integration_config_crowd_strike_secrets import SecurityMonitoringIntegrationConfigCrowdStrikeSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "enabled": (bool,), + "integration_type": (SecurityMonitoringIntegrationTypeCrowdStrike,), + "name": (str,), + "secrets": (SecurityMonitoringIntegrationConfigCrowdStrikeSecrets,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "enabled": "enabled", + "integration_type": "integration_type", + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, integration_type: SecurityMonitoringIntegrationTypeCrowdStrike, domain: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, secrets: Union[SecurityMonitoringIntegrationConfigCrowdStrikeSecrets, UnsetType]=unset, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + Fields to update on a CrowdStrike entity context sync configuration. + + :param domain: The new domain associated with the external entity source. + :type domain: str, optional + + :param enabled: Whether the entity context sync should be enabled. + :type enabled: bool, optional + + :param integration_type: The source type for a CrowdStrike entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeCrowdStrike + + :param name: The new display name for the entity context sync configuration. + :type name: str, optional + + :param secrets: Credentials for a CrowdStrike entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigCrowdStrikeSecrets, optional + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if domain is not unset: + kwargs["domain"] = domain + if enabled is not unset: + kwargs["enabled"] = enabled + if name is not unset: + kwargs["name"] = name + if secrets is not unset: + kwargs["secrets"] = secrets + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.integration_type = integration_type diff --git a/datadog_api_client/v2/model/security_monitoring_crowd_strike_integration_credentials_validate_attributes.py b/datadog_api_client/v2/model/security_monitoring_crowd_strike_integration_credentials_validate_attributes.py new file mode 100644 index 0000000000..815d4949b2 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_crowd_strike_integration_credentials_validate_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_crowd_strike import SecurityMonitoringIntegrationTypeCrowdStrike + from datadog_api_client.v2.model.security_monitoring_integration_config_crowd_strike_secrets import SecurityMonitoringIntegrationConfigCrowdStrikeSecrets + +class SecurityMonitoringCrowdStrikeIntegrationCredentialsValidateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_crowd_strike import SecurityMonitoringIntegrationTypeCrowdStrike + from datadog_api_client.v2.model.security_monitoring_integration_config_crowd_strike_secrets import SecurityMonitoringIntegrationConfigCrowdStrikeSecrets + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeCrowdStrike,), + "secrets": (SecurityMonitoringIntegrationConfigCrowdStrikeSecrets,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + "secrets": "secrets", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeCrowdStrike, secrets: SecurityMonitoringIntegrationConfigCrowdStrikeSecrets, **kwargs): + """ + The CrowdStrike credentials to validate against the external entity source. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for a CrowdStrike entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeCrowdStrike + + :param secrets: Credentials for a CrowdStrike entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigCrowdStrikeSecrets + """ + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type + self_.secrets = secrets diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_attributes_request.py b/datadog_api_client/v2/model/security_monitoring_dataset_attributes_request.py new file mode 100644 index 0000000000..6ec0c39ef2 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_attributes_request.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_definition import SecurityMonitoringDatasetDefinition + +class SecurityMonitoringDatasetAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_definition import SecurityMonitoringDatasetDefinition + return { + "definition": (SecurityMonitoringDatasetDefinition,), + "description": (str,), + "version": (int,), + } + attribute_map = { + "definition": "definition", + "description": "description", + "version": "version", + } + + def __init__(self_, definition: SecurityMonitoringDatasetDefinition, description: Union[str, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + The attributes of a dataset create or update request. + + :param definition: The definition of the dataset. The shape depends on the value of ``data_source``. + Use ``reference_table`` or ``managed_resource`` for a referential dataset, or one of the + event platform sources (for example ``logs`` , ``audit`` , ``events`` , ``spans`` , ``rum`` ) for + an event platform dataset. + :type definition: SecurityMonitoringDatasetDefinition + + :param description: The description of the dataset. Maximum 255 characters. + :type description: str, optional + + :param version: The expected current version of the dataset for optimistic concurrency control on updates. + If the dataset's current version does not match, the request is rejected with a 409 Conflict. + :type version: int, optional + """ + if description is not unset: + kwargs["description"] = description + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.definition = definition diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_attributes_response.py b/datadog_api_client/v2/model/security_monitoring_dataset_attributes_response.py new file mode 100644 index 0000000000..65b87e9b03 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_attributes_response.py @@ -0,0 +1,123 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_definition import SecurityMonitoringDatasetDefinition + +class SecurityMonitoringDatasetAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_definition import SecurityMonitoringDatasetDefinition + return { + "created_at": (str,), + "created_by_handle": (str,), + "created_by_name": (str,), + "definition": (SecurityMonitoringDatasetDefinition,), + "description": (str,), + "id": (str,), + "is_default": (bool,), + "is_deprecated": (bool,), + "modified_at": (str,), + "name": (str,), + "updated_by_handle": (str, none_type), + "updated_by_name": (str, none_type), + "version": (int,), + } + attribute_map = { + "created_at": "createdAt", + "created_by_handle": "createdByHandle", + "created_by_name": "createdByName", + "definition": "definition", + "description": "description", + "id": "id", + "is_default": "isDefault", + "is_deprecated": "isDeprecated", + "modified_at": "modifiedAt", + "name": "name", + "updated_by_handle": "updatedByHandle", + "updated_by_name": "updatedByName", + "version": "version", + } + + def __init__(self_, created_at: str, created_by_handle: str, created_by_name: str, definition: SecurityMonitoringDatasetDefinition, description: str, id: str, is_default: bool, is_deprecated: bool, modified_at: str, name: str, updated_by_handle: Union[str, none_type], updated_by_name: Union[str, none_type], version: int, **kwargs): + """ + The attributes of a Cloud SIEM dataset. + + :param created_at: The creation timestamp of the dataset, in ISO 8601 format. + :type created_at: str + + :param created_by_handle: The Datadog handle of the user who created the dataset. + :type created_by_handle: str + + :param created_by_name: The display name of the user who created the dataset. + :type created_by_name: str + + :param definition: The definition of the dataset. The shape depends on the value of ``data_source``. + Use ``reference_table`` or ``managed_resource`` for a referential dataset, or one of the + event platform sources (for example ``logs`` , ``audit`` , ``events`` , ``spans`` , ``rum`` ) for + an event platform dataset. + :type definition: SecurityMonitoringDatasetDefinition + + :param description: The description of the dataset. + :type description: str + + :param id: The UUID of the dataset. + :type id: str + + :param is_default: Whether the dataset is an out-of-the-box dataset provided by Datadog. + :type is_default: bool + + :param is_deprecated: Whether the dataset is marked as deprecated. + :type is_deprecated: bool + + :param modified_at: The timestamp of the last modification of the dataset, in ISO 8601 format. + :type modified_at: str + + :param name: The unique name of the dataset. + :type name: str + + :param updated_by_handle: The Datadog handle of the user who last updated the dataset. + :type updated_by_handle: str, none_type + + :param updated_by_name: The display name of the user who last updated the dataset. + :type updated_by_name: str, none_type + + :param version: The current version of the dataset. + :type version: int + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by_handle = created_by_handle + self_.created_by_name = created_by_name + self_.definition = definition + self_.description = description + self_.id = id + self_.is_default = is_default + self_.is_deprecated = is_deprecated + self_.modified_at = modified_at + self_.name = name + self_.updated_by_handle = updated_by_handle + self_.updated_by_name = updated_by_name + self_.version = version diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_column.py b/datadog_api_client/v2/model/security_monitoring_dataset_column.py new file mode 100644 index 0000000000..d0eaa5754f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_column.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringDatasetColumn(ModelNormal): + @cached_property + def openapi_types(_): + return { + "column": (str,), + "type": (str,), + } + attribute_map = { + "column": "column", + "type": "type", + } + + def __init__(self_, column: str, type: str, **kwargs): + """ + A column exposed by an event platform dataset. + + :param column: The name of the column. + :type column: str + + :param type: The type of the column value. + :type type: str + """ + super().__init__(kwargs) + + + self_.column = column + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_create_data.py b/datadog_api_client/v2/model/security_monitoring_dataset_create_data.py new file mode 100644 index 0000000000..45a37a1f5c --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_attributes_request import SecurityMonitoringDatasetAttributesRequest + from datadog_api_client.v2.model.security_monitoring_dataset_create_type import SecurityMonitoringDatasetCreateType + +class SecurityMonitoringDatasetCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_attributes_request import SecurityMonitoringDatasetAttributesRequest + from datadog_api_client.v2.model.security_monitoring_dataset_create_type import SecurityMonitoringDatasetCreateType + return { + "attributes": (SecurityMonitoringDatasetAttributesRequest,), + "type": (SecurityMonitoringDatasetCreateType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringDatasetAttributesRequest, type: SecurityMonitoringDatasetCreateType, **kwargs): + """ + The data wrapper of a dataset create request. + + :param attributes: The attributes of a dataset create or update request. + :type attributes: SecurityMonitoringDatasetAttributesRequest + + :param type: The type of resource for a dataset create request. + :type type: SecurityMonitoringDatasetCreateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_create_request.py b/datadog_api_client/v2/model/security_monitoring_dataset_create_request.py new file mode 100644 index 0000000000..075b1826ab --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_create_data import SecurityMonitoringDatasetCreateData + +class SecurityMonitoringDatasetCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_create_data import SecurityMonitoringDatasetCreateData + return { + "data": (SecurityMonitoringDatasetCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringDatasetCreateData, **kwargs): + """ + Request body for creating a Cloud SIEM dataset. + + :param data: The data wrapper of a dataset create request. + :type data: SecurityMonitoringDatasetCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_create_response.py b/datadog_api_client/v2/model/security_monitoring_dataset_create_response.py new file mode 100644 index 0000000000..7b1fa869bb --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_create_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_create_response_data import SecurityMonitoringDatasetCreateResponseData + +class SecurityMonitoringDatasetCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_create_response_data import SecurityMonitoringDatasetCreateResponseData + return { + "data": (SecurityMonitoringDatasetCreateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringDatasetCreateResponseData, **kwargs): + """ + Response returned after creating a dataset. + + :param data: The data wrapper of a dataset create response. + :type data: SecurityMonitoringDatasetCreateResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_create_response_data.py b/datadog_api_client/v2/model/security_monitoring_dataset_create_response_data.py new file mode 100644 index 0000000000..5bc43ad63d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_create_response_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_type import SecurityMonitoringDatasetType + +class SecurityMonitoringDatasetCreateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_type import SecurityMonitoringDatasetType + return { + "id": (str,), + "type": (SecurityMonitoringDatasetType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: SecurityMonitoringDatasetType, **kwargs): + """ + The data wrapper of a dataset create response. + + :param id: The UUID of the newly created dataset. + :type id: str + + :param type: The type of resource for a dataset response. + :type type: SecurityMonitoringDatasetType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_create_type.py b/datadog_api_client/v2/model/security_monitoring_dataset_create_type.py new file mode 100644 index 0000000000..b5c36fef7f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_create_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringDatasetCreateType(ModelSimple): + """ + The type of resource for a dataset create request. + + :param value: If omitted defaults to "datasetCreate". Must be one of ["datasetCreate"]. + :type value: str + """ + + allowed_values = { + "datasetCreate", + } + DATASET_CREATE: ClassVar["SecurityMonitoringDatasetCreateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringDatasetCreateType.DATASET_CREATE = SecurityMonitoringDatasetCreateType("datasetCreate") diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_data.py b/datadog_api_client/v2/model/security_monitoring_dataset_data.py new file mode 100644 index 0000000000..5d91a4ac0c --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_attributes_response import SecurityMonitoringDatasetAttributesResponse + from datadog_api_client.v2.model.security_monitoring_dataset_type import SecurityMonitoringDatasetType + +class SecurityMonitoringDatasetData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_attributes_response import SecurityMonitoringDatasetAttributesResponse + from datadog_api_client.v2.model.security_monitoring_dataset_type import SecurityMonitoringDatasetType + return { + "attributes": (SecurityMonitoringDatasetAttributesResponse,), + "id": (str,), + "type": (SecurityMonitoringDatasetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringDatasetAttributesResponse, id: str, type: SecurityMonitoringDatasetType, **kwargs): + """ + The data wrapper of a dataset response. + + :param attributes: The attributes of a Cloud SIEM dataset. + :type attributes: SecurityMonitoringDatasetAttributesResponse + + :param id: The UUID of the dataset. + :type id: str + + :param type: The type of resource for a dataset response. + :type type: SecurityMonitoringDatasetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_definition.py b/datadog_api_client/v2/model/security_monitoring_dataset_definition.py new file mode 100644 index 0000000000..89098ff865 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_definition.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_column import SecurityMonitoringDatasetColumn + from datadog_api_client.v2.model.security_monitoring_dataset_search import SecurityMonitoringDatasetSearch + from datadog_api_client.v2.model.security_monitoring_dataset_time_window import SecurityMonitoringDatasetTimeWindow + +class SecurityMonitoringDatasetDefinition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_column import SecurityMonitoringDatasetColumn + from datadog_api_client.v2.model.security_monitoring_dataset_search import SecurityMonitoringDatasetSearch + from datadog_api_client.v2.model.security_monitoring_dataset_time_window import SecurityMonitoringDatasetTimeWindow + return { + "columns": ([SecurityMonitoringDatasetColumn],), + "data_source": (str,), + "indexes": ([str],), + "name": (str,), + "query_filter": (str,), + "search": (SecurityMonitoringDatasetSearch,), + "storage": (str,), + "table_name": (str,), + "time_window": (SecurityMonitoringDatasetTimeWindow,), + } + attribute_map = { + "columns": "columns", + "data_source": "data_source", + "indexes": "indexes", + "name": "name", + "query_filter": "query_filter", + "search": "search", + "storage": "storage", + "table_name": "table_name", + "time_window": "time_window", + } + + def __init__(self_, data_source: str, name: str, columns: Union[List[SecurityMonitoringDatasetColumn], UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, query_filter: Union[str, UnsetType]=unset, search: Union[SecurityMonitoringDatasetSearch, UnsetType]=unset, storage: Union[str, UnsetType]=unset, table_name: Union[str, UnsetType]=unset, time_window: Union[SecurityMonitoringDatasetTimeWindow, UnsetType]=unset, **kwargs): + """ + The definition of the dataset. The shape depends on the value of ``data_source``. + Use ``reference_table`` or ``managed_resource`` for a referential dataset, or one of the + event platform sources (for example ``logs`` , ``audit`` , ``events`` , ``spans`` , ``rum`` ) for + an event platform dataset. + + :param columns: For event platform datasets, the list of columns exposed by the dataset. + :type columns: [SecurityMonitoringDatasetColumn], optional + + :param data_source: The data source backing this dataset definition. + :type data_source: str + + :param indexes: For event platform datasets, the list of indexes to query. + :type indexes: [str], optional + + :param name: The unique name of the dataset. Must start with a lowercase letter and contain only lowercase letters, digits, and underscores (max 255 characters). + :type name: str + + :param query_filter: For referential datasets, an optional filter expression applied to the table. + :type query_filter: str, optional + + :param search: The search clause applied to an event platform dataset. + :type search: SecurityMonitoringDatasetSearch, optional + + :param storage: Storage tier the dataset reads from. Applies to event platform datasets. + :type storage: str, optional + + :param table_name: For referential datasets, the name of the underlying table. + :type table_name: str, optional + + :param time_window: An optional time window that overrides the default query time range. + :type time_window: SecurityMonitoringDatasetTimeWindow, optional + """ + if columns is not unset: + kwargs["columns"] = columns + if indexes is not unset: + kwargs["indexes"] = indexes + if query_filter is not unset: + kwargs["query_filter"] = query_filter + if search is not unset: + kwargs["search"] = search + if storage is not unset: + kwargs["storage"] = storage + if table_name is not unset: + kwargs["table_name"] = table_name + if time_window is not unset: + kwargs["time_window"] = time_window + super().__init__(kwargs) + + + self_.data_source = data_source + self_.name = name diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_request.py b/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_request.py new file mode 100644 index 0000000000..e149aac674 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_request_data import SecurityMonitoringDatasetDependenciesRequestData + +class SecurityMonitoringDatasetDependenciesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_request_data import SecurityMonitoringDatasetDependenciesRequestData + return { + "data": (SecurityMonitoringDatasetDependenciesRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringDatasetDependenciesRequestData, **kwargs): + """ + Request body for retrieving dependencies of a batch of datasets. + + :param data: The data wrapper of a dataset dependencies request. + :type data: SecurityMonitoringDatasetDependenciesRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_request_attributes.py b/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_request_attributes.py new file mode 100644 index 0000000000..ebba57adec --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_request_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringDatasetDependenciesRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dataset_ids": ([str],), + } + attribute_map = { + "dataset_ids": "datasetIds", + } + + def __init__(self_, dataset_ids: List[str], **kwargs): + """ + The attributes of a dataset dependencies request. + + :param dataset_ids: The list of dataset UUIDs to query dependencies for. Must contain between 1 and 100 items. + :type dataset_ids: [str] + """ + super().__init__(kwargs) + + + self_.dataset_ids = dataset_ids diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_request_data.py b/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_request_data.py new file mode 100644 index 0000000000..c62e790522 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_request_data.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_request_attributes import SecurityMonitoringDatasetDependenciesRequestAttributes + +class SecurityMonitoringDatasetDependenciesRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_request_attributes import SecurityMonitoringDatasetDependenciesRequestAttributes + return { + "attributes": (SecurityMonitoringDatasetDependenciesRequestAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: SecurityMonitoringDatasetDependenciesRequestAttributes, **kwargs): + """ + The data wrapper of a dataset dependencies request. + + :param attributes: The attributes of a dataset dependencies request. + :type attributes: SecurityMonitoringDatasetDependenciesRequestAttributes + """ + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_response.py b/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_response.py new file mode 100644 index 0000000000..a157c51b6e --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_dependencies_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_dependents_data import SecurityMonitoringDatasetDependentsData + +class SecurityMonitoringDatasetDependenciesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_dependents_data import SecurityMonitoringDatasetDependentsData + return { + "data": ([SecurityMonitoringDatasetDependentsData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SecurityMonitoringDatasetDependentsData], **kwargs): + """ + Response listing the dependents of each requested dataset. + + :param data: The list of dataset dependents entries. + :type data: [SecurityMonitoringDatasetDependentsData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_dependents_attributes.py b/datadog_api_client/v2/model/security_monitoring_dataset_dependents_attributes.py new file mode 100644 index 0000000000..09620ff2fb --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_dependents_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringDatasetDependentsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "dataset_id": (str,), + "ids": ([str],), + "resource_type": (str,), + } + attribute_map = { + "count": "count", + "dataset_id": "datasetId", + "ids": "ids", + "resource_type": "resource_type", + } + + def __init__(self_, count: int, dataset_id: str, ids: List[str], resource_type: str, **kwargs): + """ + The attributes of a dataset dependents entry. + + :param count: The number of resources that depend on the dataset. + :type count: int + + :param dataset_id: The UUID of the dataset whose dependencies are being reported. + :type dataset_id: str + + :param ids: The list of resource IDs that depend on the dataset. + :type ids: [str] + + :param resource_type: The type of resource that depends on the dataset. + :type resource_type: str + """ + super().__init__(kwargs) + + + self_.count = count + self_.dataset_id = dataset_id + self_.ids = ids + self_.resource_type = resource_type diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_dependents_data.py b/datadog_api_client/v2/model/security_monitoring_dataset_dependents_data.py new file mode 100644 index 0000000000..546340046a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_dependents_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_dependents_attributes import SecurityMonitoringDatasetDependentsAttributes + from datadog_api_client.v2.model.security_monitoring_dataset_dependents_type import SecurityMonitoringDatasetDependentsType + +class SecurityMonitoringDatasetDependentsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_dependents_attributes import SecurityMonitoringDatasetDependentsAttributes + from datadog_api_client.v2.model.security_monitoring_dataset_dependents_type import SecurityMonitoringDatasetDependentsType + return { + "attributes": (SecurityMonitoringDatasetDependentsAttributes,), + "id": (str,), + "type": (SecurityMonitoringDatasetDependentsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringDatasetDependentsAttributes, id: str, type: SecurityMonitoringDatasetDependentsType, **kwargs): + """ + A single entry describing the dependents of one dataset. + + :param attributes: The attributes of a dataset dependents entry. + :type attributes: SecurityMonitoringDatasetDependentsAttributes + + :param id: The UUID of the dataset. + :type id: str + + :param type: The type of resource for a dataset dependents entry. + :type type: SecurityMonitoringDatasetDependentsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_dependents_type.py b/datadog_api_client/v2/model/security_monitoring_dataset_dependents_type.py new file mode 100644 index 0000000000..8334040352 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_dependents_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringDatasetDependentsType(ModelSimple): + """ + The type of resource for a dataset dependents entry. + + :param value: If omitted defaults to "datasetDependents". Must be one of ["datasetDependents"]. + :type value: str + """ + + allowed_values = { + "datasetDependents", + } + DATASET_DEPENDENTS: ClassVar["SecurityMonitoringDatasetDependentsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringDatasetDependentsType.DATASET_DEPENDENTS = SecurityMonitoringDatasetDependentsType("datasetDependents") diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_response.py b/datadog_api_client/v2/model/security_monitoring_dataset_response.py new file mode 100644 index 0000000000..f0ead331eb --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_data import SecurityMonitoringDatasetData + +class SecurityMonitoringDatasetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_data import SecurityMonitoringDatasetData + return { + "data": (SecurityMonitoringDatasetData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringDatasetData, **kwargs): + """ + Response containing a single Cloud SIEM dataset. + + :param data: The data wrapper of a dataset response. + :type data: SecurityMonitoringDatasetData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_search.py b/datadog_api_client/v2/model/security_monitoring_dataset_search.py new file mode 100644 index 0000000000..ecfd2a70b8 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_search.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringDatasetSearch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: str, **kwargs): + """ + The search clause applied to an event platform dataset. + + :param query: The search query expression. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_time_window.py b/datadog_api_client/v2/model/security_monitoring_dataset_time_window.py new file mode 100644 index 0000000000..4e19100d88 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_time_window.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringDatasetTimeWindow(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (int,), + "to": (int,), + } + attribute_map = { + "_from": "from", + "to": "to", + } + + def __init__(self_, _from: Union[int, UnsetType]=unset, to: Union[int, UnsetType]=unset, **kwargs): + """ + An optional time window that overrides the default query time range. + + :param _from: Inclusive start of the time window, in milliseconds since the Unix epoch. + :type _from: int, optional + + :param to: Exclusive end of the time window, in milliseconds since the Unix epoch. + :type to: int, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_type.py b/datadog_api_client/v2/model/security_monitoring_dataset_type.py new file mode 100644 index 0000000000..6ece502b4d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringDatasetType(ModelSimple): + """ + The type of resource for a dataset response. + + :param value: If omitted defaults to "dataset". Must be one of ["dataset"]. + :type value: str + """ + + allowed_values = { + "dataset", + } + DATASET: ClassVar["SecurityMonitoringDatasetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringDatasetType.DATASET = SecurityMonitoringDatasetType("dataset") diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_update_data.py b/datadog_api_client/v2/model/security_monitoring_dataset_update_data.py new file mode 100644 index 0000000000..07700eeba9 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_attributes_request import SecurityMonitoringDatasetAttributesRequest + from datadog_api_client.v2.model.security_monitoring_dataset_update_type import SecurityMonitoringDatasetUpdateType + +class SecurityMonitoringDatasetUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_attributes_request import SecurityMonitoringDatasetAttributesRequest + from datadog_api_client.v2.model.security_monitoring_dataset_update_type import SecurityMonitoringDatasetUpdateType + return { + "attributes": (SecurityMonitoringDatasetAttributesRequest,), + "type": (SecurityMonitoringDatasetUpdateType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringDatasetAttributesRequest, type: SecurityMonitoringDatasetUpdateType, **kwargs): + """ + The data wrapper of a dataset update request. + + :param attributes: The attributes of a dataset create or update request. + :type attributes: SecurityMonitoringDatasetAttributesRequest + + :param type: The type of resource for a dataset update request. + :type type: SecurityMonitoringDatasetUpdateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_update_request.py b/datadog_api_client/v2/model/security_monitoring_dataset_update_request.py new file mode 100644 index 0000000000..2c84b02941 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_update_data import SecurityMonitoringDatasetUpdateData + +class SecurityMonitoringDatasetUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_update_data import SecurityMonitoringDatasetUpdateData + return { + "data": (SecurityMonitoringDatasetUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringDatasetUpdateData, **kwargs): + """ + Request body for updating a Cloud SIEM dataset. + + :param data: The data wrapper of a dataset update request. + :type data: SecurityMonitoringDatasetUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_update_type.py b/datadog_api_client/v2/model/security_monitoring_dataset_update_type.py new file mode 100644 index 0000000000..ab7e8f6631 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_update_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringDatasetUpdateType(ModelSimple): + """ + The type of resource for a dataset update request. + + :param value: If omitted defaults to "datasetUpdate". Must be one of ["datasetUpdate"]. + :type value: str + """ + + allowed_values = { + "datasetUpdate", + } + DATASET_UPDATE: ClassVar["SecurityMonitoringDatasetUpdateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringDatasetUpdateType.DATASET_UPDATE = SecurityMonitoringDatasetUpdateType("datasetUpdate") diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_version_entry.py b/datadog_api_client/v2/model/security_monitoring_dataset_version_entry.py new file mode 100644 index 0000000000..fe46e7cdba --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_version_entry.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_version_field_change import SecurityMonitoringDatasetVersionFieldChange + from datadog_api_client.v2.model.security_monitoring_dataset_attributes_response import SecurityMonitoringDatasetAttributesResponse + +class SecurityMonitoringDatasetVersionEntry(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_version_field_change import SecurityMonitoringDatasetVersionFieldChange + from datadog_api_client.v2.model.security_monitoring_dataset_attributes_response import SecurityMonitoringDatasetAttributesResponse + return { + "changes": ([SecurityMonitoringDatasetVersionFieldChange],), + "dataset": (SecurityMonitoringDatasetAttributesResponse,), + } + attribute_map = { + "changes": "changes", + "dataset": "dataset", + } + + def __init__(self_, changes: List[SecurityMonitoringDatasetVersionFieldChange], dataset: SecurityMonitoringDatasetAttributesResponse, **kwargs): + """ + A single entry in the version history of a dataset. + + :param changes: The list of field changes between this version of the dataset and the previous one. + :type changes: [SecurityMonitoringDatasetVersionFieldChange] + + :param dataset: The attributes of a Cloud SIEM dataset. + :type dataset: SecurityMonitoringDatasetAttributesResponse + """ + super().__init__(kwargs) + + + self_.changes = changes + self_.dataset = dataset diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_version_field_change.py b/datadog_api_client/v2/model/security_monitoring_dataset_version_field_change.py new file mode 100644 index 0000000000..736e95dcd8 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_version_field_change.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringDatasetVersionFieldChange(ModelNormal): + @cached_property + def openapi_types(_): + return { + "current": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "field": (str,), + "previous": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "current": "current", + "field": "field", + "previous": "previous", + } + + def __init__(self_, current: Any, field: str, previous: Any, **kwargs): + """ + A single field change between two versions of a dataset. + + :param current: The current value of the field, serialized as a JSON value. + :type current: bool, date, datetime, dict, float, int, list, str, UUID, none_type + + :param field: The name of the field that changed. + :type field: str + + :param previous: The previous value of the field, serialized as a JSON value. + :type previous: bool, date, datetime, dict, float, int, list, str, UUID, none_type + """ + super().__init__(kwargs) + + + self_.current = current + self_.field = field + self_.previous = previous diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_version_history_attributes.py b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_attributes.py new file mode 100644 index 0000000000..2b571f8f66 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_version_history_entries import SecurityMonitoringDatasetVersionHistoryEntries + +class SecurityMonitoringDatasetVersionHistoryAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_version_history_entries import SecurityMonitoringDatasetVersionHistoryEntries + return { + "count": (int,), + "data": (SecurityMonitoringDatasetVersionHistoryEntries,), + } + attribute_map = { + "count": "count", + "data": "data", + } + + def __init__(self_, count: int, data: SecurityMonitoringDatasetVersionHistoryEntries, **kwargs): + """ + The attributes of a dataset version history response. + + :param count: The total number of versions available for this dataset. + :type count: int + + :param data: A map from version number (as a string) to the dataset state at that version. + :type data: SecurityMonitoringDatasetVersionHistoryEntries + """ + super().__init__(kwargs) + + + self_.count = count + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_version_history_data.py b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_data.py new file mode 100644 index 0000000000..1c1e60fa19 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_version_history_attributes import SecurityMonitoringDatasetVersionHistoryAttributes + from datadog_api_client.v2.model.security_monitoring_dataset_version_history_type import SecurityMonitoringDatasetVersionHistoryType + +class SecurityMonitoringDatasetVersionHistoryData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_version_history_attributes import SecurityMonitoringDatasetVersionHistoryAttributes + from datadog_api_client.v2.model.security_monitoring_dataset_version_history_type import SecurityMonitoringDatasetVersionHistoryType + return { + "attributes": (SecurityMonitoringDatasetVersionHistoryAttributes,), + "id": (str,), + "type": (SecurityMonitoringDatasetVersionHistoryType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringDatasetVersionHistoryAttributes, id: str, type: SecurityMonitoringDatasetVersionHistoryType, **kwargs): + """ + The data wrapper of a dataset version history response. + + :param attributes: The attributes of a dataset version history response. + :type attributes: SecurityMonitoringDatasetVersionHistoryAttributes + + :param id: The UUID of the dataset. + :type id: str + + :param type: The type of resource for a dataset version history response. + :type type: SecurityMonitoringDatasetVersionHistoryType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_version_history_entries.py b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_entries.py new file mode 100644 index 0000000000..14a7b67a4b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_entries.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_version_entry import SecurityMonitoringDatasetVersionEntry + +class SecurityMonitoringDatasetVersionHistoryEntries(ModelNormal): + @cached_property + def additional_properties_type(_): + from datadog_api_client.v2.model.security_monitoring_dataset_version_entry import SecurityMonitoringDatasetVersionEntry + return (SecurityMonitoringDatasetVersionEntry,) + + def __init__(self_, **kwargs): + """ + A map from version number (as a string) to the dataset state at that version. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_version_history_response.py b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_response.py new file mode 100644 index 0000000000..4f0282af5e --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_version_history_data import SecurityMonitoringDatasetVersionHistoryData + +class SecurityMonitoringDatasetVersionHistoryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_version_history_data import SecurityMonitoringDatasetVersionHistoryData + return { + "data": (SecurityMonitoringDatasetVersionHistoryData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringDatasetVersionHistoryData, **kwargs): + """ + Response containing the version history of a Cloud SIEM dataset. + + :param data: The data wrapper of a dataset version history response. + :type data: SecurityMonitoringDatasetVersionHistoryData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_dataset_version_history_type.py b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_type.py new file mode 100644 index 0000000000..ec8b6154d4 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_dataset_version_history_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringDatasetVersionHistoryType(ModelSimple): + """ + The type of resource for a dataset version history response. + + :param value: If omitted defaults to "dataset_version_history". Must be one of ["dataset_version_history"]. + :type value: str + """ + + allowed_values = { + "dataset_version_history", + } + DATASET_VERSION_HISTORY: ClassVar["SecurityMonitoringDatasetVersionHistoryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringDatasetVersionHistoryType.DATASET_VERSION_HISTORY = SecurityMonitoringDatasetVersionHistoryType("dataset_version_history") diff --git a/datadog_api_client/v2/model/security_monitoring_datasets_list_meta.py b/datadog_api_client/v2/model/security_monitoring_datasets_list_meta.py new file mode 100644 index 0000000000..18187ac018 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_datasets_list_meta.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringDatasetsListMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "totalCount", + } + + def __init__(self_, total_count: int, **kwargs): + """ + Metadata returned with a list of datasets. + + :param total_count: The total number of datasets matching the request, across all pages. + :type total_count: int + """ + super().__init__(kwargs) + + + self_.total_count = total_count diff --git a/datadog_api_client/v2/model/security_monitoring_datasets_list_response.py b/datadog_api_client/v2/model/security_monitoring_datasets_list_response.py new file mode 100644 index 0000000000..25c7be27e6 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_datasets_list_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_dataset_data import SecurityMonitoringDatasetData + from datadog_api_client.v2.model.security_monitoring_datasets_list_meta import SecurityMonitoringDatasetsListMeta + +class SecurityMonitoringDatasetsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_dataset_data import SecurityMonitoringDatasetData + from datadog_api_client.v2.model.security_monitoring_datasets_list_meta import SecurityMonitoringDatasetsListMeta + return { + "data": ([SecurityMonitoringDatasetData],), + "meta": (SecurityMonitoringDatasetsListMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[SecurityMonitoringDatasetData], meta: SecurityMonitoringDatasetsListMeta, **kwargs): + """ + Response containing a paginated list of Cloud SIEM datasets. + + :param data: A list of dataset data items. + :type data: [SecurityMonitoringDatasetData] + + :param meta: Metadata returned with a list of datasets. + :type meta: SecurityMonitoringDatasetsListMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_attributes.py b/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_attributes.py new file mode 100644 index 0000000000..527307bc4f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_attributes.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_azure_app_registration import SecurityMonitoringAzureAppRegistration + +class SecurityMonitoringEntraIdAzureAppRegistrationsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_azure_app_registration import SecurityMonitoringAzureAppRegistration + return { + "azure_app_registrations": ([SecurityMonitoringAzureAppRegistration],), + "has_valid_prerequisite": (bool,), + "integration_id": (str,), + "is_enabled": (bool,), + "subscribed_at": (datetime,), + } + attribute_map = { + "azure_app_registrations": "azure_app_registrations", + "has_valid_prerequisite": "has_valid_prerequisite", + "integration_id": "integration_id", + "is_enabled": "is_enabled", + "subscribed_at": "subscribed_at", + } + + def __init__(self_, azure_app_registrations: List[SecurityMonitoringAzureAppRegistration], has_valid_prerequisite: bool, integration_id: Union[str, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, subscribed_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + The attributes of the Entra ID Azure App Registration prerequisites. + + :param azure_app_registrations: The Azure App Registrations discovered for the organization. + :type azure_app_registrations: [SecurityMonitoringAzureAppRegistration] + + :param has_valid_prerequisite: Whether at least one Azure App Registration has resource collection enabled. + :type has_valid_prerequisite: bool + + :param integration_id: The ID of the Entra ID integration configuration, if one exists. + :type integration_id: str, optional + + :param is_enabled: Whether the Entra ID integration configuration is enabled, if one exists. + :type is_enabled: bool, optional + + :param subscribed_at: The time at which the Entra ID integration configuration was created, if one exists. + :type subscribed_at: datetime, optional + """ + if integration_id is not unset: + kwargs["integration_id"] = integration_id + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if subscribed_at is not unset: + kwargs["subscribed_at"] = subscribed_at + super().__init__(kwargs) + + + self_.azure_app_registrations = azure_app_registrations + self_.has_valid_prerequisite = has_valid_prerequisite diff --git a/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_data.py b/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_data.py new file mode 100644 index 0000000000..7389892803 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_attributes import SecurityMonitoringEntraIdAzureAppRegistrationsAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_resource_type import SecurityMonitoringEntraIdAzureAppRegistrationsResourceType + +class SecurityMonitoringEntraIdAzureAppRegistrationsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_attributes import SecurityMonitoringEntraIdAzureAppRegistrationsAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_resource_type import SecurityMonitoringEntraIdAzureAppRegistrationsResourceType + return { + "attributes": (SecurityMonitoringEntraIdAzureAppRegistrationsAttributes,), + "id": (str,), + "type": (SecurityMonitoringEntraIdAzureAppRegistrationsResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringEntraIdAzureAppRegistrationsAttributes, id: str, type: SecurityMonitoringEntraIdAzureAppRegistrationsResourceType, **kwargs): + """ + The Azure App Registration prerequisites for the Entra ID integration. + + :param attributes: The attributes of the Entra ID Azure App Registration prerequisites. + :type attributes: SecurityMonitoringEntraIdAzureAppRegistrationsAttributes + + :param id: The ID of the organization the Azure App Registrations belong to. + :type id: str + + :param type: The type of the resource. The value should always be ``entra_id_azure_app_registrations``. + :type type: SecurityMonitoringEntraIdAzureAppRegistrationsResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_resource_type.py b/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_resource_type.py new file mode 100644 index 0000000000..fbe36014e7 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringEntraIdAzureAppRegistrationsResourceType(ModelSimple): + """ + The type of the resource. The value should always be `entra_id_azure_app_registrations`. + + :param value: If omitted defaults to "entra_id_azure_app_registrations". Must be one of ["entra_id_azure_app_registrations"]. + :type value: str + """ + + allowed_values = { + "entra_id_azure_app_registrations", + } + ENTRA_ID_AZURE_APP_REGISTRATIONS: ClassVar["SecurityMonitoringEntraIdAzureAppRegistrationsResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringEntraIdAzureAppRegistrationsResourceType.ENTRA_ID_AZURE_APP_REGISTRATIONS = SecurityMonitoringEntraIdAzureAppRegistrationsResourceType("entra_id_azure_app_registrations") diff --git a/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_response.py b/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_response.py new file mode 100644 index 0000000000..5933d6a9ef --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_entra_id_azure_app_registrations_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_data import SecurityMonitoringEntraIdAzureAppRegistrationsData + +class SecurityMonitoringEntraIdAzureAppRegistrationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_data import SecurityMonitoringEntraIdAzureAppRegistrationsData + return { + "data": (SecurityMonitoringEntraIdAzureAppRegistrationsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringEntraIdAzureAppRegistrationsData, **kwargs): + """ + Response containing the Azure App Registration prerequisites for the Entra ID integration. + + :param data: The Azure App Registration prerequisites for the Entra ID integration. + :type data: SecurityMonitoringEntraIdAzureAppRegistrationsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_entra_id_integration_config_create_attributes.py b/datadog_api_client/v2/model/security_monitoring_entra_id_integration_config_create_attributes.py new file mode 100644 index 0000000000..12bb4474a0 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_entra_id_integration_config_create_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_entra_id import SecurityMonitoringIntegrationTypeEntraId + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringEntraIdIntegrationConfigCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_entra_id import SecurityMonitoringIntegrationTypeEntraId + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeEntraId,), + "name": (str,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + "name": "name", + "settings": "settings", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeEntraId, name: str, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + The attributes of an Entra ID entity context sync configuration to create. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for an Entra ID entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeEntraId + + :param name: The display name for the entity context sync configuration. + :type name: str + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type + self_.name = name diff --git a/datadog_api_client/v2/model/security_monitoring_entra_id_integration_config_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_entra_id_integration_config_update_attributes.py new file mode 100644 index 0000000000..61893f62cc --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_entra_id_integration_config_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_entra_id import SecurityMonitoringIntegrationTypeEntraId + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringEntraIdIntegrationConfigUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_entra_id import SecurityMonitoringIntegrationTypeEntraId + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "enabled": (bool,), + "integration_type": (SecurityMonitoringIntegrationTypeEntraId,), + "name": (str,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "enabled": "enabled", + "integration_type": "integration_type", + "name": "name", + "settings": "settings", + } + + def __init__(self_, integration_type: SecurityMonitoringIntegrationTypeEntraId, domain: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + Fields to update on an Entra ID entity context sync configuration. + + :param domain: The new domain associated with the external entity source. + :type domain: str, optional + + :param enabled: Whether the entity context sync should be enabled. + :type enabled: bool, optional + + :param integration_type: The source type for an Entra ID entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeEntraId + + :param name: The new display name for the entity context sync configuration. + :type name: str, optional + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if domain is not unset: + kwargs["domain"] = domain + if enabled is not unset: + kwargs["enabled"] = enabled + if name is not unset: + kwargs["name"] = name + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.integration_type = integration_type diff --git a/datadog_api_client/v2/model/security_monitoring_entra_id_integration_credentials_validate_attributes.py b/datadog_api_client/v2/model/security_monitoring_entra_id_integration_credentials_validate_attributes.py new file mode 100644 index 0000000000..6ee24da245 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_entra_id_integration_credentials_validate_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_entra_id import SecurityMonitoringIntegrationTypeEntraId + +class SecurityMonitoringEntraIdIntegrationCredentialsValidateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_entra_id import SecurityMonitoringIntegrationTypeEntraId + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeEntraId,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeEntraId, **kwargs): + """ + The Entra ID credentials to validate against the external entity source. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for an Entra ID entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeEntraId + """ + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type diff --git a/datadog_api_client/v2/model/security_monitoring_filter.py b/datadog_api_client/v2/model/security_monitoring_filter.py new file mode 100644 index 0000000000..a8b35f6f61 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_filter_action import SecurityMonitoringFilterAction + +class SecurityMonitoringFilter(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_filter_action import SecurityMonitoringFilterAction + return { + "action": (SecurityMonitoringFilterAction,), + "query": (str,), + } + attribute_map = { + "action": "action", + "query": "query", + } + + def __init__(self_, action: Union[SecurityMonitoringFilterAction, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + The rule's suppression filter. + + :param action: The type of filtering action. + :type action: SecurityMonitoringFilterAction, optional + + :param query: Query for selecting logs to apply the filtering action. + :type query: str, optional + """ + if action is not unset: + kwargs["action"] = action + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_filter_action.py b/datadog_api_client/v2/model/security_monitoring_filter_action.py new file mode 100644 index 0000000000..bf2dd47e4b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_filter_action.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringFilterAction(ModelSimple): + """ + The type of filtering action. + + :param value: Must be one of ["require", "suppress"]. + :type value: str + """ + + allowed_values = { + "require", + "suppress", + } + REQUIRE: ClassVar["SecurityMonitoringFilterAction"] + SUPPRESS: ClassVar["SecurityMonitoringFilterAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringFilterAction.REQUIRE = SecurityMonitoringFilterAction("require") +SecurityMonitoringFilterAction.SUPPRESS = SecurityMonitoringFilterAction("suppress") diff --git a/datadog_api_client/v2/model/security_monitoring_google_workspace_integration_config_create_attributes.py b/datadog_api_client/v2/model/security_monitoring_google_workspace_integration_config_create_attributes.py new file mode 100644 index 0000000000..1ccbcfd6bb --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_google_workspace_integration_config_create_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_google_workspace import SecurityMonitoringIntegrationTypeGoogleWorkspace + from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_secrets import SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringGoogleWorkspaceIntegrationConfigCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_google_workspace import SecurityMonitoringIntegrationTypeGoogleWorkspace + from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_secrets import SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeGoogleWorkspace,), + "name": (str,), + "secrets": (SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeGoogleWorkspace, name: str, secrets: SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + The attributes of a Google Workspace entity context sync configuration to create. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for a Google Workspace entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeGoogleWorkspace + + :param name: The display name for the entity context sync configuration. + :type name: str + + :param secrets: Credentials for a Google Workspace entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type + self_.name = name + self_.secrets = secrets diff --git a/datadog_api_client/v2/model/security_monitoring_google_workspace_integration_config_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_google_workspace_integration_config_update_attributes.py new file mode 100644 index 0000000000..201558f2f1 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_google_workspace_integration_config_update_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_google_workspace import SecurityMonitoringIntegrationTypeGoogleWorkspace + from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_secrets import SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringGoogleWorkspaceIntegrationConfigUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_google_workspace import SecurityMonitoringIntegrationTypeGoogleWorkspace + from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_secrets import SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "enabled": (bool,), + "integration_type": (SecurityMonitoringIntegrationTypeGoogleWorkspace,), + "name": (str,), + "secrets": (SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "enabled": "enabled", + "integration_type": "integration_type", + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, integration_type: SecurityMonitoringIntegrationTypeGoogleWorkspace, domain: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, secrets: Union[SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets, UnsetType]=unset, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + Fields to update on a Google Workspace entity context sync configuration. + + :param domain: The new domain associated with the external entity source. + :type domain: str, optional + + :param enabled: Whether the entity context sync should be enabled. + :type enabled: bool, optional + + :param integration_type: The source type for a Google Workspace entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeGoogleWorkspace + + :param name: The new display name for the entity context sync configuration. + :type name: str, optional + + :param secrets: Credentials for a Google Workspace entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets, optional + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if domain is not unset: + kwargs["domain"] = domain + if enabled is not unset: + kwargs["enabled"] = enabled + if name is not unset: + kwargs["name"] = name + if secrets is not unset: + kwargs["secrets"] = secrets + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.integration_type = integration_type diff --git a/datadog_api_client/v2/model/security_monitoring_google_workspace_integration_credentials_validate_attributes.py b/datadog_api_client/v2/model/security_monitoring_google_workspace_integration_credentials_validate_attributes.py new file mode 100644 index 0000000000..08b40a41b7 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_google_workspace_integration_credentials_validate_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_google_workspace import SecurityMonitoringIntegrationTypeGoogleWorkspace + from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_secrets import SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + +class SecurityMonitoringGoogleWorkspaceIntegrationCredentialsValidateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_google_workspace import SecurityMonitoringIntegrationTypeGoogleWorkspace + from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_secrets import SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeGoogleWorkspace,), + "secrets": (SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + "secrets": "secrets", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeGoogleWorkspace, secrets: SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets, **kwargs): + """ + The Google Workspace credentials to validate against the external entity source. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for a Google Workspace entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeGoogleWorkspace + + :param secrets: Credentials for a Google Workspace entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + """ + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type + self_.secrets = secrets diff --git a/datadog_api_client/v2/model/security_monitoring_integration_activate_attributes.py b/datadog_api_client/v2/model/security_monitoring_integration_activate_attributes.py new file mode 100644 index 0000000000..ee8beefc7e --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_activate_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringIntegrationActivateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "name": (str,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "name": "name", + "settings": "settings", + } + + def __init__(self_, domain: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + Overrides applied when activating the integration. All fields are optional. + + :param domain: The domain associated with the external entity source. + :type domain: str, optional + + :param name: The display name for the entity context sync configuration. + :type name: str, optional + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if domain is not unset: + kwargs["domain"] = domain + if name is not unset: + kwargs["name"] = name + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_integration_activate_data.py b/datadog_api_client/v2/model/security_monitoring_integration_activate_data.py new file mode 100644 index 0000000000..7f49d3c295 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_activate_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_activate_attributes import SecurityMonitoringIntegrationActivateAttributes + from datadog_api_client.v2.model.security_monitoring_integration_activate_resource_type import SecurityMonitoringIntegrationActivateResourceType + +class SecurityMonitoringIntegrationActivateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_activate_attributes import SecurityMonitoringIntegrationActivateAttributes + from datadog_api_client.v2.model.security_monitoring_integration_activate_resource_type import SecurityMonitoringIntegrationActivateResourceType + return { + "attributes": (SecurityMonitoringIntegrationActivateAttributes,), + "type": (SecurityMonitoringIntegrationActivateResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityMonitoringIntegrationActivateAttributes, UnsetType]=unset, type: Union[SecurityMonitoringIntegrationActivateResourceType, UnsetType]=unset, **kwargs): + """ + The configuration overrides for the integration to activate. + + :param attributes: Overrides applied when activating the integration. All fields are optional. + :type attributes: SecurityMonitoringIntegrationActivateAttributes, optional + + :param type: The type of the resource. The value should always be ``activate_entra_id_request``. + :type type: SecurityMonitoringIntegrationActivateResourceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_integration_activate_request.py b/datadog_api_client/v2/model/security_monitoring_integration_activate_request.py new file mode 100644 index 0000000000..811946337a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_activate_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_activate_data import SecurityMonitoringIntegrationActivateData + +class SecurityMonitoringIntegrationActivateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_activate_data import SecurityMonitoringIntegrationActivateData + return { + "data": (SecurityMonitoringIntegrationActivateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SecurityMonitoringIntegrationActivateData, UnsetType]=unset, **kwargs): + """ + Request body to activate an entity context sync integration for a source type that does not require secrets. + + :param data: The configuration overrides for the integration to activate. + :type data: SecurityMonitoringIntegrationActivateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_integration_activate_resource_type.py b/datadog_api_client/v2/model/security_monitoring_integration_activate_resource_type.py new file mode 100644 index 0000000000..65f9584fbb --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_activate_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringIntegrationActivateResourceType(ModelSimple): + """ + The type of the resource. The value should always be `activate_entra_id_request`. + + :param value: If omitted defaults to "activate_entra_id_request". Must be one of ["activate_entra_id_request"]. + :type value: str + """ + + allowed_values = { + "activate_entra_id_request", + } + ACTIVATE_ENTRA_ID_REQUEST: ClassVar["SecurityMonitoringIntegrationActivateResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringIntegrationActivateResourceType.ACTIVATE_ENTRA_ID_REQUEST = SecurityMonitoringIntegrationActivateResourceType("activate_entra_id_request") diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_attributes.py b/datadog_api_client/v2/model/security_monitoring_integration_config_attributes.py new file mode 100644 index 0000000000..4cc8d54d01 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_attributes.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type import SecurityMonitoringIntegrationType + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + from datadog_api_client.v2.model.security_monitoring_integration_config_state import SecurityMonitoringIntegrationConfigState + +class SecurityMonitoringIntegrationConfigAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type import SecurityMonitoringIntegrationType + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + from datadog_api_client.v2.model.security_monitoring_integration_config_state import SecurityMonitoringIntegrationConfigState + return { + "created_at": (datetime,), + "domain": (str,), + "enabled": (bool,), + "integration_type": (SecurityMonitoringIntegrationType,), + "modified_at": (datetime,), + "name": (str,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + "state": (SecurityMonitoringIntegrationConfigState,), + } + attribute_map = { + "created_at": "created_at", + "domain": "domain", + "enabled": "enabled", + "integration_type": "integration_type", + "modified_at": "modified_at", + "name": "name", + "settings": "settings", + "state": "state", + } + + def __init__(self_, domain: str, enabled: bool, integration_type: SecurityMonitoringIntegrationType, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, state: Union[SecurityMonitoringIntegrationConfigState, UnsetType]=unset, **kwargs): + """ + The attributes of an entity context sync configuration as returned by the API. + + :param created_at: The time at which the entity context sync configuration was created. + :type created_at: datetime, optional + + :param domain: The domain associated with the external entity source (for example, the customer's identity provider domain). + :type domain: str + + :param enabled: Whether the sync is enabled and actively ingesting entities into Cloud SIEM. + :type enabled: bool + + :param integration_type: The type of external source that provides entities to Cloud SIEM. + :type integration_type: SecurityMonitoringIntegrationType + + :param modified_at: The time at which the entity context sync configuration was last modified. + :type modified_at: datetime, optional + + :param name: The display name of the entity context sync configuration. + :type name: str, optional + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + + :param state: The state of the credentials configured on the entity context sync. + :type state: SecurityMonitoringIntegrationConfigState, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if settings is not unset: + kwargs["settings"] = settings + if state is not unset: + kwargs["state"] = state + super().__init__(kwargs) + + + self_.domain = domain + self_.enabled = enabled + self_.integration_type = integration_type diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_create_attributes.py b/datadog_api_client/v2/model/security_monitoring_integration_config_create_attributes.py new file mode 100644 index 0000000000..c5ae664aa3 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_create_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringIntegrationConfigCreateAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The attributes of the entity context sync configuration to create. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for a Google Workspace entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeGoogleWorkspace + + :param name: The display name for the entity context sync configuration. + :type name: str + + :param secrets: Credentials for a Google Workspace entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, 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.security_monitoring_google_workspace_integration_config_create_attributes import SecurityMonitoringGoogleWorkspaceIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_okta_integration_config_create_attributes import SecurityMonitoringOktaIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_integration_config_create_attributes import SecurityMonitoringEntraIdIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_config_create_attributes import SecurityMonitoringCrowdStrikeIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_config_create_attributes import SecurityMonitoringSentinelOneIntegrationConfigCreateAttributes + return { + "oneOf": [ + SecurityMonitoringGoogleWorkspaceIntegrationConfigCreateAttributes, + SecurityMonitoringOktaIntegrationConfigCreateAttributes, + SecurityMonitoringEntraIdIntegrationConfigCreateAttributes, + SecurityMonitoringCrowdStrikeIntegrationConfigCreateAttributes, + SecurityMonitoringSentinelOneIntegrationConfigCreateAttributes, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_create_data.py b/datadog_api_client/v2/model/security_monitoring_integration_config_create_data.py new file mode 100644 index 0000000000..eff46c8f7a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_create_data.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_config_create_attributes import SecurityMonitoringIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_integration_config_resource_type import SecurityMonitoringIntegrationConfigResourceType + from datadog_api_client.v2.model.security_monitoring_google_workspace_integration_config_create_attributes import SecurityMonitoringGoogleWorkspaceIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_okta_integration_config_create_attributes import SecurityMonitoringOktaIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_integration_config_create_attributes import SecurityMonitoringEntraIdIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_config_create_attributes import SecurityMonitoringCrowdStrikeIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_config_create_attributes import SecurityMonitoringSentinelOneIntegrationConfigCreateAttributes + +class SecurityMonitoringIntegrationConfigCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_config_create_attributes import SecurityMonitoringIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_integration_config_resource_type import SecurityMonitoringIntegrationConfigResourceType + return { + "attributes": (SecurityMonitoringIntegrationConfigCreateAttributes,), + "type": (SecurityMonitoringIntegrationConfigResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityMonitoringIntegrationConfigCreateAttributes, SecurityMonitoringGoogleWorkspaceIntegrationConfigCreateAttributes, SecurityMonitoringOktaIntegrationConfigCreateAttributes, SecurityMonitoringEntraIdIntegrationConfigCreateAttributes, SecurityMonitoringCrowdStrikeIntegrationConfigCreateAttributes, SecurityMonitoringSentinelOneIntegrationConfigCreateAttributes], type: SecurityMonitoringIntegrationConfigResourceType, **kwargs): + """ + The entity context sync configuration to create. + + :param attributes: The attributes of the entity context sync configuration to create. + :type attributes: SecurityMonitoringIntegrationConfigCreateAttributes + + :param type: The type of the resource. The value should always be ``integration_config``. + :type type: SecurityMonitoringIntegrationConfigResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_create_request.py b/datadog_api_client/v2/model/security_monitoring_integration_config_create_request.py new file mode 100644 index 0000000000..12dbb660f5 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_create_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_config_create_data import SecurityMonitoringIntegrationConfigCreateData + from datadog_api_client.v2.model.security_monitoring_google_workspace_integration_config_create_attributes import SecurityMonitoringGoogleWorkspaceIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_okta_integration_config_create_attributes import SecurityMonitoringOktaIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_integration_config_create_attributes import SecurityMonitoringEntraIdIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_config_create_attributes import SecurityMonitoringCrowdStrikeIntegrationConfigCreateAttributes + from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_config_create_attributes import SecurityMonitoringSentinelOneIntegrationConfigCreateAttributes + +class SecurityMonitoringIntegrationConfigCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_config_create_data import SecurityMonitoringIntegrationConfigCreateData + return { + "data": (SecurityMonitoringIntegrationConfigCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringIntegrationConfigCreateData, **kwargs): + """ + Request body to create an entity context sync configuration. + + :param data: The entity context sync configuration to create. + :type data: SecurityMonitoringIntegrationConfigCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_crowd_strike_secrets.py b/datadog_api_client/v2/model/security_monitoring_integration_config_crowd_strike_secrets.py new file mode 100644 index 0000000000..6de0f1cdb3 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_crowd_strike_secrets.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringIntegrationConfigCrowdStrikeSecrets(ModelNormal): + @cached_property + def openapi_types(_): + return { + "client_id": (str,), + "client_secret": (str,), + } + attribute_map = { + "client_id": "client_id", + "client_secret": "client_secret", + } + + def __init__(self_, client_id: str, client_secret: str, **kwargs): + """ + Credentials for a CrowdStrike entity context sync. + + :param client_id: The CrowdStrike API client ID. + :type client_id: str + + :param client_secret: The CrowdStrike API client secret. + :type client_secret: str + """ + super().__init__(kwargs) + + + self_.client_id = client_id + self_.client_secret = client_secret diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_data.py b/datadog_api_client/v2/model/security_monitoring_integration_config_data.py new file mode 100644 index 0000000000..043c36945b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_config_attributes import SecurityMonitoringIntegrationConfigAttributes + from datadog_api_client.v2.model.security_monitoring_integration_config_resource_type import SecurityMonitoringIntegrationConfigResourceType + +class SecurityMonitoringIntegrationConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_config_attributes import SecurityMonitoringIntegrationConfigAttributes + from datadog_api_client.v2.model.security_monitoring_integration_config_resource_type import SecurityMonitoringIntegrationConfigResourceType + return { + "attributes": (SecurityMonitoringIntegrationConfigAttributes,), + "id": (str,), + "type": (SecurityMonitoringIntegrationConfigResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringIntegrationConfigAttributes, id: str, type: SecurityMonitoringIntegrationConfigResourceType, **kwargs): + """ + An entity context sync configuration. + + :param attributes: The attributes of an entity context sync configuration as returned by the API. + :type attributes: SecurityMonitoringIntegrationConfigAttributes + + :param id: The unique identifier of the integration configuration. + :type id: str + + :param type: The type of the resource. The value should always be ``integration_config``. + :type type: SecurityMonitoringIntegrationConfigResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_google_workspace_secrets.py b/datadog_api_client/v2/model/security_monitoring_integration_config_google_workspace_secrets.py new file mode 100644 index 0000000000..a1d48d25e4 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_google_workspace_secrets.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_service_account import SecurityMonitoringIntegrationConfigGoogleWorkspaceServiceAccount + +class SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_service_account import SecurityMonitoringIntegrationConfigGoogleWorkspaceServiceAccount + return { + "admin_email": (str,), + "service_account_json": (SecurityMonitoringIntegrationConfigGoogleWorkspaceServiceAccount,), + } + attribute_map = { + "admin_email": "admin_email", + "service_account_json": "service_account_json", + } + + def __init__(self_, service_account_json: SecurityMonitoringIntegrationConfigGoogleWorkspaceServiceAccount, admin_email: Union[str, UnsetType]=unset, **kwargs): + """ + Credentials for a Google Workspace entity context sync. + + :param admin_email: The admin email to impersonate for domain-wide delegation. + :type admin_email: str, optional + + :param service_account_json: The Google Cloud service account JSON used to authenticate against the Google Workspace Admin SDK. Additional keys beyond those documented are preserved. + :type service_account_json: SecurityMonitoringIntegrationConfigGoogleWorkspaceServiceAccount + """ + if admin_email is not unset: + kwargs["admin_email"] = admin_email + super().__init__(kwargs) + + + self_.service_account_json = service_account_json diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_google_workspace_service_account.py b/datadog_api_client/v2/model/security_monitoring_integration_config_google_workspace_service_account.py new file mode 100644 index 0000000000..61eba26e0d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_google_workspace_service_account.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringIntegrationConfigGoogleWorkspaceServiceAccount(ModelNormal): + @cached_property + def openapi_types(_): + return { + "client_email": (str,), + "private_key": (str,), + "project_id": (str,), + "type": (str,), + } + attribute_map = { + "client_email": "client_email", + "private_key": "private_key", + "project_id": "project_id", + "type": "type", + } + + def __init__(self_, client_email: str, private_key: str, project_id: str, type: str, **kwargs): + """ + The Google Cloud service account JSON used to authenticate against the Google Workspace Admin SDK. Additional keys beyond those documented are preserved. + + :param client_email: The service account client email. + :type client_email: str + + :param private_key: The service account private key. + :type private_key: str + + :param project_id: The Google Cloud project ID that owns the service account. + :type project_id: str + + :param type: The service account type. Must be ``service_account``. + :type type: str + """ + super().__init__(kwargs) + + + self_.client_email = client_email + self_.private_key = private_key + self_.project_id = project_id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_okta_secrets.py b/datadog_api_client/v2/model/security_monitoring_integration_config_okta_secrets.py new file mode 100644 index 0000000000..7d5f47b342 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_okta_secrets.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringIntegrationConfigOktaSecrets(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_token": (str,), + } + attribute_map = { + "api_token": "api_token", + } + + def __init__(self_, api_token: str, **kwargs): + """ + Credentials for an Okta entity context sync. + + :param api_token: The Okta API token used to authenticate against the Okta API. + :type api_token: str + """ + super().__init__(kwargs) + + + self_.api_token = api_token diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_resource_type.py b/datadog_api_client/v2/model/security_monitoring_integration_config_resource_type.py new file mode 100644 index 0000000000..0d93611e20 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringIntegrationConfigResourceType(ModelSimple): + """ + The type of the resource. The value should always be `integration_config`. + + :param value: If omitted defaults to "integration_config". Must be one of ["integration_config"]. + :type value: str + """ + + allowed_values = { + "integration_config", + } + INTEGRATION_CONFIG: ClassVar["SecurityMonitoringIntegrationConfigResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringIntegrationConfigResourceType.INTEGRATION_CONFIG = SecurityMonitoringIntegrationConfigResourceType("integration_config") diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_response.py b/datadog_api_client/v2/model/security_monitoring_integration_config_response.py new file mode 100644 index 0000000000..c5634066cb --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_config_data import SecurityMonitoringIntegrationConfigData + +class SecurityMonitoringIntegrationConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_config_data import SecurityMonitoringIntegrationConfigData + return { + "data": (SecurityMonitoringIntegrationConfigData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringIntegrationConfigData, **kwargs): + """ + Response containing a single entity context sync configuration. + + :param data: An entity context sync configuration. + :type data: SecurityMonitoringIntegrationConfigData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_sentinel_one_secrets.py b/datadog_api_client/v2/model/security_monitoring_integration_config_sentinel_one_secrets.py new file mode 100644 index 0000000000..52d30f2716 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_sentinel_one_secrets.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringIntegrationConfigSentinelOneSecrets(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_token": (str,), + } + attribute_map = { + "api_token": "api_token", + } + + def __init__(self_, api_token: str, **kwargs): + """ + Credentials for a SentinelOne entity context sync. + + :param api_token: The SentinelOne API token. + :type api_token: str + """ + super().__init__(kwargs) + + + self_.api_token = api_token diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_settings.py b/datadog_api_client/v2/model/security_monitoring_integration_config_settings.py new file mode 100644 index 0000000000..e82e91313f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_settings.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringIntegrationConfigSettings(ModelNormal): + + def __init__(self_, **kwargs): + """ + Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_state.py b/datadog_api_client/v2/model/security_monitoring_integration_config_state.py new file mode 100644 index 0000000000..a8d48eab24 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringIntegrationConfigState(ModelSimple): + """ + The state of the credentials configured on the entity context sync. + + :param value: Must be one of ["valid", "invalid", "initializing"]. + :type value: str + """ + + allowed_values = { + "valid", + "invalid", + "initializing", + } + VALID: ClassVar["SecurityMonitoringIntegrationConfigState"] + INVALID: ClassVar["SecurityMonitoringIntegrationConfigState"] + INITIALIZING: ClassVar["SecurityMonitoringIntegrationConfigState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringIntegrationConfigState.VALID = SecurityMonitoringIntegrationConfigState("valid") +SecurityMonitoringIntegrationConfigState.INVALID = SecurityMonitoringIntegrationConfigState("invalid") +SecurityMonitoringIntegrationConfigState.INITIALIZING = SecurityMonitoringIntegrationConfigState("initializing") diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_integration_config_update_attributes.py new file mode 100644 index 0000000000..bc288cd5e0 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_update_attributes.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringIntegrationConfigUpdateAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Fields to update on the entity context sync configuration. All fields other than the integration type are optional. + + :param domain: The new domain associated with the external entity source. + :type domain: str, optional + + :param enabled: Whether the entity context sync should be enabled. + :type enabled: bool, optional + + :param integration_type: The source type for a Google Workspace entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeGoogleWorkspace + + :param name: The new display name for the entity context sync configuration. + :type name: str, optional + + :param secrets: Credentials for a Google Workspace entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets, optional + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, 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.security_monitoring_google_workspace_integration_config_update_attributes import SecurityMonitoringGoogleWorkspaceIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_okta_integration_config_update_attributes import SecurityMonitoringOktaIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_integration_config_update_attributes import SecurityMonitoringEntraIdIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_config_update_attributes import SecurityMonitoringCrowdStrikeIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_config_update_attributes import SecurityMonitoringSentinelOneIntegrationConfigUpdateAttributes + return { + "oneOf": [ + SecurityMonitoringGoogleWorkspaceIntegrationConfigUpdateAttributes, + SecurityMonitoringOktaIntegrationConfigUpdateAttributes, + SecurityMonitoringEntraIdIntegrationConfigUpdateAttributes, + SecurityMonitoringCrowdStrikeIntegrationConfigUpdateAttributes, + SecurityMonitoringSentinelOneIntegrationConfigUpdateAttributes, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_update_data.py b/datadog_api_client/v2/model/security_monitoring_integration_config_update_data.py new file mode 100644 index 0000000000..9c35d21282 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_update_data.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_config_update_attributes import SecurityMonitoringIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_integration_config_resource_type import SecurityMonitoringIntegrationConfigResourceType + from datadog_api_client.v2.model.security_monitoring_google_workspace_integration_config_update_attributes import SecurityMonitoringGoogleWorkspaceIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_okta_integration_config_update_attributes import SecurityMonitoringOktaIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_integration_config_update_attributes import SecurityMonitoringEntraIdIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_config_update_attributes import SecurityMonitoringCrowdStrikeIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_config_update_attributes import SecurityMonitoringSentinelOneIntegrationConfigUpdateAttributes + +class SecurityMonitoringIntegrationConfigUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_config_update_attributes import SecurityMonitoringIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_integration_config_resource_type import SecurityMonitoringIntegrationConfigResourceType + return { + "attributes": (SecurityMonitoringIntegrationConfigUpdateAttributes,), + "type": (SecurityMonitoringIntegrationConfigResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityMonitoringIntegrationConfigUpdateAttributes, SecurityMonitoringGoogleWorkspaceIntegrationConfigUpdateAttributes, SecurityMonitoringOktaIntegrationConfigUpdateAttributes, SecurityMonitoringEntraIdIntegrationConfigUpdateAttributes, SecurityMonitoringCrowdStrikeIntegrationConfigUpdateAttributes, SecurityMonitoringSentinelOneIntegrationConfigUpdateAttributes], type: SecurityMonitoringIntegrationConfigResourceType, **kwargs): + """ + The entity context sync configuration fields to update. + + :param attributes: Fields to update on the entity context sync configuration. All fields other than the integration type are optional. + :type attributes: SecurityMonitoringIntegrationConfigUpdateAttributes + + :param type: The type of the resource. The value should always be ``integration_config``. + :type type: SecurityMonitoringIntegrationConfigResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_integration_config_update_request.py b/datadog_api_client/v2/model/security_monitoring_integration_config_update_request.py new file mode 100644 index 0000000000..48869334b9 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_config_update_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_config_update_data import SecurityMonitoringIntegrationConfigUpdateData + from datadog_api_client.v2.model.security_monitoring_google_workspace_integration_config_update_attributes import SecurityMonitoringGoogleWorkspaceIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_okta_integration_config_update_attributes import SecurityMonitoringOktaIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_integration_config_update_attributes import SecurityMonitoringEntraIdIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_config_update_attributes import SecurityMonitoringCrowdStrikeIntegrationConfigUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_config_update_attributes import SecurityMonitoringSentinelOneIntegrationConfigUpdateAttributes + +class SecurityMonitoringIntegrationConfigUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_config_update_data import SecurityMonitoringIntegrationConfigUpdateData + return { + "data": (SecurityMonitoringIntegrationConfigUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringIntegrationConfigUpdateData, **kwargs): + """ + Request body to update an entity context sync configuration. Supports partial updates. + + :param data: The entity context sync configuration fields to update. + :type data: SecurityMonitoringIntegrationConfigUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_integration_configs_response.py b/datadog_api_client/v2/model/security_monitoring_integration_configs_response.py new file mode 100644 index 0000000000..a530b89577 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_configs_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_config_data import SecurityMonitoringIntegrationConfigData + +class SecurityMonitoringIntegrationConfigsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_config_data import SecurityMonitoringIntegrationConfigData + return { + "data": ([SecurityMonitoringIntegrationConfigData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SecurityMonitoringIntegrationConfigData], **kwargs): + """ + Response containing a list of entity context sync configurations. + + :param data: The list of integration configurations. + :type data: [SecurityMonitoringIntegrationConfigData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_integration_credentials_validate_attributes.py b/datadog_api_client/v2/model/security_monitoring_integration_credentials_validate_attributes.py new file mode 100644 index 0000000000..48441f4ddd --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_credentials_validate_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringIntegrationCredentialsValidateAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The credentials to validate against the external entity source. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for a Google Workspace entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeGoogleWorkspace + + :param secrets: Credentials for a Google Workspace entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets + """ + 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.security_monitoring_google_workspace_integration_credentials_validate_attributes import SecurityMonitoringGoogleWorkspaceIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_okta_integration_credentials_validate_attributes import SecurityMonitoringOktaIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_integration_credentials_validate_attributes import SecurityMonitoringEntraIdIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_credentials_validate_attributes import SecurityMonitoringCrowdStrikeIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_credentials_validate_attributes import SecurityMonitoringSentinelOneIntegrationCredentialsValidateAttributes + return { + "oneOf": [ + SecurityMonitoringGoogleWorkspaceIntegrationCredentialsValidateAttributes, + SecurityMonitoringOktaIntegrationCredentialsValidateAttributes, + SecurityMonitoringEntraIdIntegrationCredentialsValidateAttributes, + SecurityMonitoringCrowdStrikeIntegrationCredentialsValidateAttributes, + SecurityMonitoringSentinelOneIntegrationCredentialsValidateAttributes, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_integration_credentials_validate_data.py b/datadog_api_client/v2/model/security_monitoring_integration_credentials_validate_data.py new file mode 100644 index 0000000000..42d45e06a7 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_credentials_validate_data.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_credentials_validate_attributes import SecurityMonitoringIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_integration_config_resource_type import SecurityMonitoringIntegrationConfigResourceType + from datadog_api_client.v2.model.security_monitoring_google_workspace_integration_credentials_validate_attributes import SecurityMonitoringGoogleWorkspaceIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_okta_integration_credentials_validate_attributes import SecurityMonitoringOktaIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_integration_credentials_validate_attributes import SecurityMonitoringEntraIdIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_credentials_validate_attributes import SecurityMonitoringCrowdStrikeIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_credentials_validate_attributes import SecurityMonitoringSentinelOneIntegrationCredentialsValidateAttributes + +class SecurityMonitoringIntegrationCredentialsValidateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_credentials_validate_attributes import SecurityMonitoringIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_integration_config_resource_type import SecurityMonitoringIntegrationConfigResourceType + return { + "attributes": (SecurityMonitoringIntegrationCredentialsValidateAttributes,), + "type": (SecurityMonitoringIntegrationConfigResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityMonitoringIntegrationCredentialsValidateAttributes, SecurityMonitoringGoogleWorkspaceIntegrationCredentialsValidateAttributes, SecurityMonitoringOktaIntegrationCredentialsValidateAttributes, SecurityMonitoringEntraIdIntegrationCredentialsValidateAttributes, SecurityMonitoringCrowdStrikeIntegrationCredentialsValidateAttributes, SecurityMonitoringSentinelOneIntegrationCredentialsValidateAttributes], type: SecurityMonitoringIntegrationConfigResourceType, **kwargs): + """ + The credentials to validate. + + :param attributes: The credentials to validate against the external entity source. + :type attributes: SecurityMonitoringIntegrationCredentialsValidateAttributes + + :param type: The type of the resource. The value should always be ``integration_config``. + :type type: SecurityMonitoringIntegrationConfigResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_integration_credentials_validate_request.py b/datadog_api_client/v2/model/security_monitoring_integration_credentials_validate_request.py new file mode 100644 index 0000000000..676899e5de --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_credentials_validate_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_credentials_validate_data import SecurityMonitoringIntegrationCredentialsValidateData + from datadog_api_client.v2.model.security_monitoring_google_workspace_integration_credentials_validate_attributes import SecurityMonitoringGoogleWorkspaceIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_okta_integration_credentials_validate_attributes import SecurityMonitoringOktaIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_entra_id_integration_credentials_validate_attributes import SecurityMonitoringEntraIdIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_credentials_validate_attributes import SecurityMonitoringCrowdStrikeIntegrationCredentialsValidateAttributes + from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_credentials_validate_attributes import SecurityMonitoringSentinelOneIntegrationCredentialsValidateAttributes + +class SecurityMonitoringIntegrationCredentialsValidateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_credentials_validate_data import SecurityMonitoringIntegrationCredentialsValidateData + return { + "data": (SecurityMonitoringIntegrationCredentialsValidateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringIntegrationCredentialsValidateData, **kwargs): + """ + Request body to validate credentials against an external entity source before creating a sync configuration. + + :param data: The credentials to validate. + :type data: SecurityMonitoringIntegrationCredentialsValidateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_integration_type.py b/datadog_api_client/v2/model/security_monitoring_integration_type.py new file mode 100644 index 0000000000..89660bde90 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringIntegrationType(ModelSimple): + """ + The type of external source that provides entities to Cloud SIEM. + + :param value: Must be one of ["GOOGLE_WORKSPACE", "OKTA", "ENTRA_ID", "CROWDSTRIKE", "SENTINELONE"]. + :type value: str + """ + + allowed_values = { + "GOOGLE_WORKSPACE", + "OKTA", + "ENTRA_ID", + "CROWDSTRIKE", + "SENTINELONE", + } + GOOGLE_WORKSPACE: ClassVar["SecurityMonitoringIntegrationType"] + OKTA: ClassVar["SecurityMonitoringIntegrationType"] + ENTRA_ID: ClassVar["SecurityMonitoringIntegrationType"] + CROWDSTRIKE: ClassVar["SecurityMonitoringIntegrationType"] + SENTINELONE: ClassVar["SecurityMonitoringIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringIntegrationType.GOOGLE_WORKSPACE = SecurityMonitoringIntegrationType("GOOGLE_WORKSPACE") +SecurityMonitoringIntegrationType.OKTA = SecurityMonitoringIntegrationType("OKTA") +SecurityMonitoringIntegrationType.ENTRA_ID = SecurityMonitoringIntegrationType("ENTRA_ID") +SecurityMonitoringIntegrationType.CROWDSTRIKE = SecurityMonitoringIntegrationType("CROWDSTRIKE") +SecurityMonitoringIntegrationType.SENTINELONE = SecurityMonitoringIntegrationType("SENTINELONE") diff --git a/datadog_api_client/v2/model/security_monitoring_integration_type_crowd_strike.py b/datadog_api_client/v2/model/security_monitoring_integration_type_crowd_strike.py new file mode 100644 index 0000000000..4f22cd574b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_type_crowd_strike.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringIntegrationTypeCrowdStrike(ModelSimple): + """ + The source type for a CrowdStrike entity context sync. + + :param value: If omitted defaults to "CROWDSTRIKE". Must be one of ["CROWDSTRIKE"]. + :type value: str + """ + + allowed_values = { + "CROWDSTRIKE", + } + CROWDSTRIKE: ClassVar["SecurityMonitoringIntegrationTypeCrowdStrike"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringIntegrationTypeCrowdStrike.CROWDSTRIKE = SecurityMonitoringIntegrationTypeCrowdStrike("CROWDSTRIKE") diff --git a/datadog_api_client/v2/model/security_monitoring_integration_type_entra_id.py b/datadog_api_client/v2/model/security_monitoring_integration_type_entra_id.py new file mode 100644 index 0000000000..4ead44b314 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_type_entra_id.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringIntegrationTypeEntraId(ModelSimple): + """ + The source type for an Entra ID entity context sync. + + :param value: If omitted defaults to "ENTRA_ID". Must be one of ["ENTRA_ID"]. + :type value: str + """ + + allowed_values = { + "ENTRA_ID", + } + ENTRA_ID: ClassVar["SecurityMonitoringIntegrationTypeEntraId"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringIntegrationTypeEntraId.ENTRA_ID = SecurityMonitoringIntegrationTypeEntraId("ENTRA_ID") diff --git a/datadog_api_client/v2/model/security_monitoring_integration_type_google_workspace.py b/datadog_api_client/v2/model/security_monitoring_integration_type_google_workspace.py new file mode 100644 index 0000000000..a68fc96ee5 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_type_google_workspace.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringIntegrationTypeGoogleWorkspace(ModelSimple): + """ + The source type for a Google Workspace entity context sync. + + :param value: If omitted defaults to "GOOGLE_WORKSPACE". Must be one of ["GOOGLE_WORKSPACE"]. + :type value: str + """ + + allowed_values = { + "GOOGLE_WORKSPACE", + } + GOOGLE_WORKSPACE: ClassVar["SecurityMonitoringIntegrationTypeGoogleWorkspace"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringIntegrationTypeGoogleWorkspace.GOOGLE_WORKSPACE = SecurityMonitoringIntegrationTypeGoogleWorkspace("GOOGLE_WORKSPACE") diff --git a/datadog_api_client/v2/model/security_monitoring_integration_type_okta.py b/datadog_api_client/v2/model/security_monitoring_integration_type_okta.py new file mode 100644 index 0000000000..2b6657e64d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_type_okta.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringIntegrationTypeOkta(ModelSimple): + """ + The source type for an Okta entity context sync. + + :param value: If omitted defaults to "OKTA". Must be one of ["OKTA"]. + :type value: str + """ + + allowed_values = { + "OKTA", + } + OKTA: ClassVar["SecurityMonitoringIntegrationTypeOkta"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringIntegrationTypeOkta.OKTA = SecurityMonitoringIntegrationTypeOkta("OKTA") diff --git a/datadog_api_client/v2/model/security_monitoring_integration_type_sentinel_one.py b/datadog_api_client/v2/model/security_monitoring_integration_type_sentinel_one.py new file mode 100644 index 0000000000..a4fe551667 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_integration_type_sentinel_one.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringIntegrationTypeSentinelOne(ModelSimple): + """ + The source type for a SentinelOne entity context sync. + + :param value: If omitted defaults to "SENTINELONE". Must be one of ["SENTINELONE"]. + :type value: str + """ + + allowed_values = { + "SENTINELONE", + } + SENTINELONE: ClassVar["SecurityMonitoringIntegrationTypeSentinelOne"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringIntegrationTypeSentinelOne.SENTINELONE = SecurityMonitoringIntegrationTypeSentinelOne("SENTINELONE") diff --git a/datadog_api_client/v2/model/security_monitoring_list_rules_response.py b/datadog_api_client/v2/model/security_monitoring_list_rules_response.py new file mode 100644 index 0000000000..5eededdeb8 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_list_rules_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_response import SecurityMonitoringRuleResponse + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + from datadog_api_client.v2.model.security_monitoring_standard_rule_response import SecurityMonitoringStandardRuleResponse + from datadog_api_client.v2.model.security_monitoring_signal_rule_response import SecurityMonitoringSignalRuleResponse + +class SecurityMonitoringListRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_response import SecurityMonitoringRuleResponse + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + return { + "data": ([SecurityMonitoringRuleResponse],), + "meta": (ResponseMetaAttributes,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[Union[SecurityMonitoringRuleResponse, SecurityMonitoringStandardRuleResponse, SecurityMonitoringSignalRuleResponse]], UnsetType]=unset, meta: Union[ResponseMetaAttributes, UnsetType]=unset, **kwargs): + """ + List of rules. + + :param data: Array containing the list of rules. + :type data: [SecurityMonitoringRuleResponse], optional + + :param meta: Object describing meta attributes of response. + :type meta: ResponseMetaAttributes, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_okta_integration_config_create_attributes.py b/datadog_api_client/v2/model/security_monitoring_okta_integration_config_create_attributes.py new file mode 100644 index 0000000000..d96ea21e54 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_okta_integration_config_create_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_okta import SecurityMonitoringIntegrationTypeOkta + from datadog_api_client.v2.model.security_monitoring_integration_config_okta_secrets import SecurityMonitoringIntegrationConfigOktaSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringOktaIntegrationConfigCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_okta import SecurityMonitoringIntegrationTypeOkta + from datadog_api_client.v2.model.security_monitoring_integration_config_okta_secrets import SecurityMonitoringIntegrationConfigOktaSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeOkta,), + "name": (str,), + "secrets": (SecurityMonitoringIntegrationConfigOktaSecrets,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeOkta, name: str, secrets: SecurityMonitoringIntegrationConfigOktaSecrets, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + The attributes of an Okta entity context sync configuration to create. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for an Okta entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeOkta + + :param name: The display name for the entity context sync configuration. + :type name: str + + :param secrets: Credentials for an Okta entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigOktaSecrets + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type + self_.name = name + self_.secrets = secrets diff --git a/datadog_api_client/v2/model/security_monitoring_okta_integration_config_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_okta_integration_config_update_attributes.py new file mode 100644 index 0000000000..a74e7d0c9f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_okta_integration_config_update_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_okta import SecurityMonitoringIntegrationTypeOkta + from datadog_api_client.v2.model.security_monitoring_integration_config_okta_secrets import SecurityMonitoringIntegrationConfigOktaSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringOktaIntegrationConfigUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_okta import SecurityMonitoringIntegrationTypeOkta + from datadog_api_client.v2.model.security_monitoring_integration_config_okta_secrets import SecurityMonitoringIntegrationConfigOktaSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "enabled": (bool,), + "integration_type": (SecurityMonitoringIntegrationTypeOkta,), + "name": (str,), + "secrets": (SecurityMonitoringIntegrationConfigOktaSecrets,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "enabled": "enabled", + "integration_type": "integration_type", + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, integration_type: SecurityMonitoringIntegrationTypeOkta, domain: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, secrets: Union[SecurityMonitoringIntegrationConfigOktaSecrets, UnsetType]=unset, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + Fields to update on an Okta entity context sync configuration. + + :param domain: The new domain associated with the external entity source. + :type domain: str, optional + + :param enabled: Whether the entity context sync should be enabled. + :type enabled: bool, optional + + :param integration_type: The source type for an Okta entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeOkta + + :param name: The new display name for the entity context sync configuration. + :type name: str, optional + + :param secrets: Credentials for an Okta entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigOktaSecrets, optional + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if domain is not unset: + kwargs["domain"] = domain + if enabled is not unset: + kwargs["enabled"] = enabled + if name is not unset: + kwargs["name"] = name + if secrets is not unset: + kwargs["secrets"] = secrets + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.integration_type = integration_type diff --git a/datadog_api_client/v2/model/security_monitoring_okta_integration_credentials_validate_attributes.py b/datadog_api_client/v2/model/security_monitoring_okta_integration_credentials_validate_attributes.py new file mode 100644 index 0000000000..ed55f53317 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_okta_integration_credentials_validate_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_okta import SecurityMonitoringIntegrationTypeOkta + from datadog_api_client.v2.model.security_monitoring_integration_config_okta_secrets import SecurityMonitoringIntegrationConfigOktaSecrets + +class SecurityMonitoringOktaIntegrationCredentialsValidateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_okta import SecurityMonitoringIntegrationTypeOkta + from datadog_api_client.v2.model.security_monitoring_integration_config_okta_secrets import SecurityMonitoringIntegrationConfigOktaSecrets + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeOkta,), + "secrets": (SecurityMonitoringIntegrationConfigOktaSecrets,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + "secrets": "secrets", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeOkta, secrets: SecurityMonitoringIntegrationConfigOktaSecrets, **kwargs): + """ + The Okta credentials to validate against the external entity source. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for an Okta entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeOkta + + :param secrets: Credentials for an Okta entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigOktaSecrets + """ + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type + self_.secrets = secrets diff --git a/datadog_api_client/v2/model/security_monitoring_paginated_suppressions_response.py b/datadog_api_client/v2/model/security_monitoring_paginated_suppressions_response.py new file mode 100644 index 0000000000..081fc6a473 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_paginated_suppressions_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_suppression import SecurityMonitoringSuppression + from datadog_api_client.v2.model.security_monitoring_suppressions_meta import SecurityMonitoringSuppressionsMeta + +class SecurityMonitoringPaginatedSuppressionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_suppression import SecurityMonitoringSuppression + from datadog_api_client.v2.model.security_monitoring_suppressions_meta import SecurityMonitoringSuppressionsMeta + return { + "data": ([SecurityMonitoringSuppression],), + "meta": (SecurityMonitoringSuppressionsMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[SecurityMonitoringSuppression], UnsetType]=unset, meta: Union[SecurityMonitoringSuppressionsMeta, UnsetType]=unset, **kwargs): + """ + Response object containing the available suppression rules with pagination metadata. + + :param data: A list of suppressions objects. + :type data: [SecurityMonitoringSuppression], optional + + :param meta: Metadata for the suppression list response. + :type meta: SecurityMonitoringSuppressionsMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_reference_table.py b/datadog_api_client/v2/model/security_monitoring_reference_table.py new file mode 100644 index 0000000000..efcc857e1a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_reference_table.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringReferenceTable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "check_presence": (bool,), + "column_name": (str,), + "log_field_path": (str,), + "rule_query_name": (str,), + "table_name": (str,), + } + attribute_map = { + "check_presence": "checkPresence", + "column_name": "columnName", + "log_field_path": "logFieldPath", + "rule_query_name": "ruleQueryName", + "table_name": "tableName", + } + + def __init__(self_, check_presence: Union[bool, UnsetType]=unset, column_name: Union[str, UnsetType]=unset, log_field_path: Union[str, UnsetType]=unset, rule_query_name: Union[str, UnsetType]=unset, table_name: Union[str, UnsetType]=unset, **kwargs): + """ + Reference tables used in the queries. + + :param check_presence: Whether to include or exclude the matched values. + :type check_presence: bool, optional + + :param column_name: The name of the column in the reference table. + :type column_name: str, optional + + :param log_field_path: The field in the log to match against the reference table. + :type log_field_path: str, optional + + :param rule_query_name: The name of the query to apply the reference table to. + :type rule_query_name: str, optional + + :param table_name: The name of the reference table. + :type table_name: str, optional + """ + if check_presence is not unset: + kwargs["check_presence"] = check_presence + if column_name is not unset: + kwargs["column_name"] = column_name + if log_field_path is not unset: + kwargs["log_field_path"] = log_field_path + if rule_query_name is not unset: + kwargs["rule_query_name"] = rule_query_name + if table_name is not unset: + kwargs["table_name"] = table_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options.py b/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options.py new file mode 100644 index 0000000000..af79956b7c --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options_bucket_duration import SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options_detection_tolerance import SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options_learning_duration import SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration + +class SecurityMonitoringRuleAnomalyDetectionOptions(ModelNormal): + validations = { + "learning_period_baseline": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options_bucket_duration import SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options_detection_tolerance import SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options_learning_duration import SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration + return { + "bucket_duration": (SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration,), + "detection_tolerance": (SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance,), + "instantaneous_baseline": (bool,), + "learning_duration": (SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration,), + "learning_period_baseline": (int,), + } + attribute_map = { + "bucket_duration": "bucketDuration", + "detection_tolerance": "detectionTolerance", + "instantaneous_baseline": "instantaneousBaseline", + "learning_duration": "learningDuration", + "learning_period_baseline": "learningPeriodBaseline", + } + + def __init__(self_, bucket_duration: Union[SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration, UnsetType]=unset, detection_tolerance: Union[SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance, UnsetType]=unset, instantaneous_baseline: Union[bool, UnsetType]=unset, learning_duration: Union[SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration, UnsetType]=unset, learning_period_baseline: Union[int, UnsetType]=unset, **kwargs): + """ + Options on anomaly detection method. + + :param bucket_duration: Duration in seconds of the time buckets used to aggregate events matched by the rule. + Must be greater than or equal to 300. + :type bucket_duration: SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration, optional + + :param detection_tolerance: An optional parameter that sets how permissive anomaly detection is. + Higher values require higher deviations before triggering a signal. + :type detection_tolerance: SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance, optional + + :param instantaneous_baseline: When set to true, Datadog uses previous values that fall within the defined learning window to construct the baseline, enabling the system to establish an accurate baseline more rapidly rather than relying solely on gradual learning over time. + :type instantaneous_baseline: bool, optional + + :param learning_duration: Learning duration in hours. Anomaly detection waits for at least this amount of historical data before it starts evaluating. + :type learning_duration: SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration, optional + + :param learning_period_baseline: An optional override baseline to apply while the rule is in the learning period. Must be greater than or equal to 0. + :type learning_period_baseline: int, optional + """ + if bucket_duration is not unset: + kwargs["bucket_duration"] = bucket_duration + if detection_tolerance is not unset: + kwargs["detection_tolerance"] = detection_tolerance + if instantaneous_baseline is not unset: + kwargs["instantaneous_baseline"] = instantaneous_baseline + if learning_duration is not unset: + kwargs["learning_duration"] = learning_duration + if learning_period_baseline is not unset: + kwargs["learning_period_baseline"] = learning_period_baseline + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options_bucket_duration.py b/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options_bucket_duration.py new file mode 100644 index 0000000000..eb031494f7 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options_bucket_duration.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration(ModelSimple): + """ + Duration in seconds of the time buckets used to aggregate events matched by the rule. + Must be greater than or equal to 300. + + :param value: Must be one of [300, 600, 900, 1800, 3600, 10800]. + :type value: int + """ + + allowed_values = { + 300, + 600, + 900, + 1800, + 3600, + 10800, + } + FIVE_MINUTES: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration"] + TEN_MINUTES: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration"] + FIFTEEN_MINUTES: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration"] + THIRTY_MINUTES: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration"] + ONE_HOUR: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration"] + THREE_HOURS: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration.FIVE_MINUTES = SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration(300) +SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration.TEN_MINUTES = SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration(600) +SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration.FIFTEEN_MINUTES = SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration(900) +SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration.THIRTY_MINUTES = SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration(1800) +SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration.ONE_HOUR = SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration(3600) +SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration.THREE_HOURS = SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration(10800) diff --git a/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options_detection_tolerance.py b/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options_detection_tolerance.py new file mode 100644 index 0000000000..f0830ff73d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options_detection_tolerance.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance(ModelSimple): + """ + An optional parameter that sets how permissive anomaly detection is. + Higher values require higher deviations before triggering a signal. + + :param value: Must be one of [1, 2, 3, 4, 5]. + :type value: int + """ + + allowed_values = { + 1, + 2, + 3, + 4, + 5, + } + ONE: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance"] + TWO: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance"] + THREE: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance"] + FOUR: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance"] + FIVE: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance.ONE = SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance(1) +SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance.TWO = SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance(2) +SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance.THREE = SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance(3) +SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance.FOUR = SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance(4) +SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance.FIVE = SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance(5) diff --git a/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options_learning_duration.py b/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options_learning_duration.py new file mode 100644 index 0000000000..beb69bb738 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_anomaly_detection_options_learning_duration.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration(ModelSimple): + """ + Learning duration in hours. Anomaly detection waits for at least this amount of historical data before it starts evaluating. + + :param value: Must be one of [1, 6, 12, 24, 48, 168, 336]. + :type value: int + """ + + allowed_values = { + 1, + 6, + 12, + 24, + 48, + 168, + 336, + } + ONE_HOUR: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration"] + SIX_HOURS: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration"] + TWELVE_HOURS: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration"] + ONE_DAY: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration"] + TWO_DAYS: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration"] + ONE_WEEK: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration"] + TWO_WEEKS: ClassVar["SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration.ONE_HOUR = SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration(1) +SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration.SIX_HOURS = SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration(6) +SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration.TWELVE_HOURS = SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration(12) +SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration.ONE_DAY = SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration(24) +SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration.TWO_DAYS = SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration(48) +SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration.ONE_WEEK = SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration(168) +SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration.TWO_WEEKS = SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration(336) diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_attributes.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_attributes.py new file mode 100644 index 0000000000..0676ea8357 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_attributes.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleBulkDeleteAttributes(ModelNormal): + validations = { + "rule_ids": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "rule_ids": ([str],), + } + attribute_map = { + "rule_ids": "ruleIds", + } + + def __init__(self_, rule_ids: List[str], **kwargs): + """ + Attributes for bulk deleting security monitoring rules. + + :param rule_ids: List of rule IDs to delete. + :type rule_ids: [str] + """ + super().__init__(kwargs) + + + self_.rule_ids = rule_ids diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_data.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_data.py new file mode 100644 index 0000000000..aa5333b77a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_attributes import SecurityMonitoringRuleBulkDeleteAttributes + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_request_data_type import SecurityMonitoringRuleBulkDeleteRequestDataType + +class SecurityMonitoringRuleBulkDeleteData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_attributes import SecurityMonitoringRuleBulkDeleteAttributes + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_request_data_type import SecurityMonitoringRuleBulkDeleteRequestDataType + return { + "attributes": (SecurityMonitoringRuleBulkDeleteAttributes,), + "id": (str,), + "type": (SecurityMonitoringRuleBulkDeleteRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringRuleBulkDeleteAttributes, type: SecurityMonitoringRuleBulkDeleteRequestDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data for bulk deleting security monitoring rules. + + :param attributes: Attributes for bulk deleting security monitoring rules. + :type attributes: SecurityMonitoringRuleBulkDeleteAttributes + + :param id: Request ID. This value is echoed back as the response's resource ID. + :type id: str, optional + + :param type: The resource type for a bulk delete request. + :type type: SecurityMonitoringRuleBulkDeleteRequestDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_payload.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_payload.py new file mode 100644 index 0000000000..0735f6e668 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_payload.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_data import SecurityMonitoringRuleBulkDeleteData + +class SecurityMonitoringRuleBulkDeletePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_data import SecurityMonitoringRuleBulkDeleteData + return { + "data": (SecurityMonitoringRuleBulkDeleteData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringRuleBulkDeleteData, **kwargs): + """ + Payload for bulk deleting security monitoring rules. + + :param data: Data for bulk deleting security monitoring rules. + :type data: SecurityMonitoringRuleBulkDeleteData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_request_data_type.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_request_data_type.py new file mode 100644 index 0000000000..060a471f1d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleBulkDeleteRequestDataType(ModelSimple): + """ + The resource type for a bulk delete request. + + :param value: If omitted defaults to "bulk_delete_rules". Must be one of ["bulk_delete_rules"]. + :type value: str + """ + + allowed_values = { + "bulk_delete_rules", + } + BULK_DELETE_RULES: ClassVar["SecurityMonitoringRuleBulkDeleteRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleBulkDeleteRequestDataType.BULK_DELETE_RULES = SecurityMonitoringRuleBulkDeleteRequestDataType("bulk_delete_rules") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response.py new file mode 100644 index 0000000000..7427fee118 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response_data import SecurityMonitoringRuleBulkDeleteResponseData + +class SecurityMonitoringRuleBulkDeleteResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response_data import SecurityMonitoringRuleBulkDeleteResponseData + return { + "data": (SecurityMonitoringRuleBulkDeleteResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SecurityMonitoringRuleBulkDeleteResponseData, UnsetType]=unset, **kwargs): + """ + Response for bulk deleting security monitoring rules. + + :param data: Data for the bulk delete response. + :type data: SecurityMonitoringRuleBulkDeleteResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response_attributes.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response_attributes.py new file mode 100644 index 0000000000..82a1000f07 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleBulkDeleteResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "deleted_rules": ([str],), + "failed_rules": ([str],), + } + attribute_map = { + "deleted_rules": "deletedRules", + "failed_rules": "failedRules", + } + + def __init__(self_, deleted_rules: Union[List[str], UnsetType]=unset, failed_rules: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for the bulk delete response. + + :param deleted_rules: List of successfully deleted rule IDs. + :type deleted_rules: [str], optional + + :param failed_rules: List of rule IDs that could not be deleted. + :type failed_rules: [str], optional + """ + if deleted_rules is not unset: + kwargs["deleted_rules"] = deleted_rules + if failed_rules is not unset: + kwargs["failed_rules"] = failed_rules + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response_data.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response_data.py new file mode 100644 index 0000000000..a94912fe1b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response_attributes import SecurityMonitoringRuleBulkDeleteResponseAttributes + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response_data_type import SecurityMonitoringRuleBulkDeleteResponseDataType + +class SecurityMonitoringRuleBulkDeleteResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response_attributes import SecurityMonitoringRuleBulkDeleteResponseAttributes + from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response_data_type import SecurityMonitoringRuleBulkDeleteResponseDataType + return { + "attributes": (SecurityMonitoringRuleBulkDeleteResponseAttributes,), + "id": (str,), + "type": (SecurityMonitoringRuleBulkDeleteResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityMonitoringRuleBulkDeleteResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SecurityMonitoringRuleBulkDeleteResponseDataType, UnsetType]=unset, **kwargs): + """ + Data for the bulk delete response. + + :param attributes: Attributes for the bulk delete response. + :type attributes: SecurityMonitoringRuleBulkDeleteResponseAttributes, optional + + :param id: The identifier of the bulk delete response. + :type id: str, optional + + :param type: The resource type for a bulk delete response. + :type type: SecurityMonitoringRuleBulkDeleteResponseDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response_data_type.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response_data_type.py new file mode 100644 index 0000000000..8479550e51 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_delete_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleBulkDeleteResponseDataType(ModelSimple): + """ + The resource type for a bulk delete response. + + :param value: If omitted defaults to "bulk_delete_response". Must be one of ["bulk_delete_response"]. + :type value: str + """ + + allowed_values = { + "bulk_delete_response", + } + BULK_DELETE_RESPONSE: ClassVar["SecurityMonitoringRuleBulkDeleteResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleBulkDeleteResponseDataType.BULK_DELETE_RESPONSE = SecurityMonitoringRuleBulkDeleteResponseDataType("bulk_delete_response") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_attributes.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_attributes.py new file mode 100644 index 0000000000..916456e28c --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleBulkExportAttributes(ModelNormal): + validations = { + "rule_ids": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "rule_ids": ([str],), + } + attribute_map = { + "rule_ids": "ruleIds", + } + + def __init__(self_, rule_ids: List[str], **kwargs): + """ + Attributes for bulk exporting security monitoring rules. + + :param rule_ids: List of rule IDs to export. Each rule will be included in the resulting ZIP file + as a separate JSON file. + :type rule_ids: [str] + """ + super().__init__(kwargs) + + + self_.rule_ids = rule_ids diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_data.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_data.py new file mode 100644 index 0000000000..b5b43d048f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_attributes import SecurityMonitoringRuleBulkExportAttributes + from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_data_type import SecurityMonitoringRuleBulkExportDataType + +class SecurityMonitoringRuleBulkExportData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_attributes import SecurityMonitoringRuleBulkExportAttributes + from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_data_type import SecurityMonitoringRuleBulkExportDataType + return { + "attributes": (SecurityMonitoringRuleBulkExportAttributes,), + "id": (str,), + "type": (SecurityMonitoringRuleBulkExportDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringRuleBulkExportAttributes, type: SecurityMonitoringRuleBulkExportDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data for bulk exporting security monitoring rules. + + :param attributes: Attributes for bulk exporting security monitoring rules. + :type attributes: SecurityMonitoringRuleBulkExportAttributes + + :param id: Request ID. + :type id: str, optional + + :param type: The type of the resource. + :type type: SecurityMonitoringRuleBulkExportDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_data_type.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_data_type.py new file mode 100644 index 0000000000..65a46a7b7a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleBulkExportDataType(ModelSimple): + """ + The type of the resource. + + :param value: If omitted defaults to "security_monitoring_rules_bulk_export". Must be one of ["security_monitoring_rules_bulk_export"]. + :type value: str + """ + + allowed_values = { + "security_monitoring_rules_bulk_export", + } + SECURITY_MONITORING_RULES_BULK_EXPORT: ClassVar["SecurityMonitoringRuleBulkExportDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleBulkExportDataType.SECURITY_MONITORING_RULES_BULK_EXPORT = SecurityMonitoringRuleBulkExportDataType("security_monitoring_rules_bulk_export") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_payload.py b/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_payload.py new file mode 100644 index 0000000000..e8acb94933 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_bulk_export_payload.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_data import SecurityMonitoringRuleBulkExportData + +class SecurityMonitoringRuleBulkExportPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_data import SecurityMonitoringRuleBulkExportData + return { + "data": (SecurityMonitoringRuleBulkExportData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringRuleBulkExportData, **kwargs): + """ + Payload for bulk exporting security monitoring rules. + + :param data: Data for bulk exporting security monitoring rules. + :type data: SecurityMonitoringRuleBulkExportData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_rule_case.py b/datadog_api_client/v2/model/security_monitoring_rule_case.py new file mode 100644 index 0000000000..52edfde2f3 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_case.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_case_action import SecurityMonitoringRuleCaseAction + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + +class SecurityMonitoringRuleCase(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_case_action import SecurityMonitoringRuleCaseAction + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + return { + "actions": ([SecurityMonitoringRuleCaseAction],), + "condition": (str,), + "custom_status": (SecurityMonitoringRuleSeverity,), + "name": (str,), + "notifications": ([str],), + "status": (SecurityMonitoringRuleSeverity,), + } + attribute_map = { + "actions": "actions", + "condition": "condition", + "custom_status": "customStatus", + "name": "name", + "notifications": "notifications", + "status": "status", + } + + def __init__(self_, actions: Union[List[SecurityMonitoringRuleCaseAction], UnsetType]=unset, condition: Union[str, UnsetType]=unset, custom_status: Union[SecurityMonitoringRuleSeverity, UnsetType]=unset, name: Union[str, UnsetType]=unset, notifications: Union[List[str], UnsetType]=unset, status: Union[SecurityMonitoringRuleSeverity, UnsetType]=unset, **kwargs): + """ + Case when signal is generated. + + :param actions: Action to perform for each rule case. + :type actions: [SecurityMonitoringRuleCaseAction], optional + + :param condition: A rule case contains logical operations ( ``>`` , ``>=`` , ``&&`` , ``||`` ) to determine if a signal should be generated + based on the event counts in the previously defined queries. + :type condition: str, optional + + :param custom_status: Severity of the Security Signal. + :type custom_status: SecurityMonitoringRuleSeverity, optional + + :param name: Name of the case. + :type name: str, optional + + :param notifications: Notification targets for each rule case. + :type notifications: [str], optional + + :param status: Severity of the Security Signal. + :type status: SecurityMonitoringRuleSeverity, optional + """ + if actions is not unset: + kwargs["actions"] = actions + if condition is not unset: + kwargs["condition"] = condition + if custom_status is not unset: + kwargs["custom_status"] = custom_status + if name is not unset: + kwargs["name"] = name + if notifications is not unset: + kwargs["notifications"] = notifications + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_case_action.py b/datadog_api_client/v2/model/security_monitoring_rule_case_action.py new file mode 100644 index 0000000000..da6bb2e5b0 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_case_action.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_case_action_options import SecurityMonitoringRuleCaseActionOptions + from datadog_api_client.v2.model.security_monitoring_rule_case_action_type import SecurityMonitoringRuleCaseActionType + +class SecurityMonitoringRuleCaseAction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_case_action_options import SecurityMonitoringRuleCaseActionOptions + from datadog_api_client.v2.model.security_monitoring_rule_case_action_type import SecurityMonitoringRuleCaseActionType + return { + "options": (SecurityMonitoringRuleCaseActionOptions,), + "type": (SecurityMonitoringRuleCaseActionType,), + } + attribute_map = { + "options": "options", + "type": "type", + } + + def __init__(self_, options: Union[SecurityMonitoringRuleCaseActionOptions, UnsetType]=unset, type: Union[SecurityMonitoringRuleCaseActionType, UnsetType]=unset, **kwargs): + """ + Action to perform when a signal is triggered. Only available for Application Security rule type. + + :param options: Options for the rule action + :type options: SecurityMonitoringRuleCaseActionOptions, optional + + :param type: The action type. + :type type: SecurityMonitoringRuleCaseActionType, optional + """ + if options is not unset: + kwargs["options"] = options + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_case_action_options.py b/datadog_api_client/v2/model/security_monitoring_rule_case_action_options.py new file mode 100644 index 0000000000..e6a1b1e996 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_case_action_options.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_case_action_options_flagged_ip_type import SecurityMonitoringRuleCaseActionOptionsFlaggedIPType + +class SecurityMonitoringRuleCaseActionOptions(ModelNormal): + validations = { + "duration": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_case_action_options_flagged_ip_type import SecurityMonitoringRuleCaseActionOptionsFlaggedIPType + return { + "duration": (int,), + "flagged_ip_type": (SecurityMonitoringRuleCaseActionOptionsFlaggedIPType,), + "user_behavior_name": (str,), + } + attribute_map = { + "duration": "duration", + "flagged_ip_type": "flaggedIPType", + "user_behavior_name": "userBehaviorName", + } + + def __init__(self_, duration: Union[int, UnsetType]=unset, flagged_ip_type: Union[SecurityMonitoringRuleCaseActionOptionsFlaggedIPType, UnsetType]=unset, user_behavior_name: Union[str, UnsetType]=unset, **kwargs): + """ + Options for the rule action + + :param duration: Duration of the action in seconds. 0 indicates no expiration. + :type duration: int, optional + + :param flagged_ip_type: Used with the case action of type 'flag_ip'. The value specified in this field is applied as a flag to the IP addresses. + :type flagged_ip_type: SecurityMonitoringRuleCaseActionOptionsFlaggedIPType, optional + + :param user_behavior_name: Used with the case action of type 'user_behavior'. The value specified in this field is applied as a risk tag to all users affected by the rule. + :type user_behavior_name: str, optional + """ + if duration is not unset: + kwargs["duration"] = duration + if flagged_ip_type is not unset: + kwargs["flagged_ip_type"] = flagged_ip_type + if user_behavior_name is not unset: + kwargs["user_behavior_name"] = user_behavior_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_case_action_options_flagged_ip_type.py b/datadog_api_client/v2/model/security_monitoring_rule_case_action_options_flagged_ip_type.py new file mode 100644 index 0000000000..972774f27b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_case_action_options_flagged_ip_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleCaseActionOptionsFlaggedIPType(ModelSimple): + """ + Used with the case action of type 'flag_ip'. The value specified in this field is applied as a flag to the IP addresses. + + :param value: Must be one of ["SUSPICIOUS", "FLAGGED"]. + :type value: str + """ + + allowed_values = { + "SUSPICIOUS", + "FLAGGED", + } + SUSPICIOUS: ClassVar["SecurityMonitoringRuleCaseActionOptionsFlaggedIPType"] + FLAGGED: ClassVar["SecurityMonitoringRuleCaseActionOptionsFlaggedIPType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleCaseActionOptionsFlaggedIPType.SUSPICIOUS = SecurityMonitoringRuleCaseActionOptionsFlaggedIPType("SUSPICIOUS") +SecurityMonitoringRuleCaseActionOptionsFlaggedIPType.FLAGGED = SecurityMonitoringRuleCaseActionOptionsFlaggedIPType("FLAGGED") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_case_action_type.py b/datadog_api_client/v2/model/security_monitoring_rule_case_action_type.py new file mode 100644 index 0000000000..b414b32f50 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_case_action_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleCaseActionType(ModelSimple): + """ + The action type. + + :param value: Must be one of ["block_ip", "block_user", "user_behavior", "flag_ip"]. + :type value: str + """ + + allowed_values = { + "block_ip", + "block_user", + "user_behavior", + "flag_ip", + } + BLOCK_IP: ClassVar["SecurityMonitoringRuleCaseActionType"] + BLOCK_USER: ClassVar["SecurityMonitoringRuleCaseActionType"] + USER_BEHAVIOR: ClassVar["SecurityMonitoringRuleCaseActionType"] + FLAG_IP: ClassVar["SecurityMonitoringRuleCaseActionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleCaseActionType.BLOCK_IP = SecurityMonitoringRuleCaseActionType("block_ip") +SecurityMonitoringRuleCaseActionType.BLOCK_USER = SecurityMonitoringRuleCaseActionType("block_user") +SecurityMonitoringRuleCaseActionType.USER_BEHAVIOR = SecurityMonitoringRuleCaseActionType("user_behavior") +SecurityMonitoringRuleCaseActionType.FLAG_IP = SecurityMonitoringRuleCaseActionType("flag_ip") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_case_create.py b/datadog_api_client/v2/model/security_monitoring_rule_case_create.py new file mode 100644 index 0000000000..9c3786f06b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_case_create.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_case_action import SecurityMonitoringRuleCaseAction + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + +class SecurityMonitoringRuleCaseCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_case_action import SecurityMonitoringRuleCaseAction + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + return { + "actions": ([SecurityMonitoringRuleCaseAction],), + "condition": (str,), + "name": (str,), + "notifications": ([str],), + "status": (SecurityMonitoringRuleSeverity,), + } + attribute_map = { + "actions": "actions", + "condition": "condition", + "name": "name", + "notifications": "notifications", + "status": "status", + } + + def __init__(self_, status: SecurityMonitoringRuleSeverity, actions: Union[List[SecurityMonitoringRuleCaseAction], UnsetType]=unset, condition: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, notifications: Union[List[str], UnsetType]=unset, **kwargs): + """ + Case when signal is generated. + + :param actions: Action to perform for each rule case. + :type actions: [SecurityMonitoringRuleCaseAction], optional + + :param condition: A case contains logical operations ( ``>`` , ``>=`` , ``&&`` , ``||`` ) to determine if a signal should be generated + based on the event counts in the previously defined queries. + :type condition: str, optional + + :param name: Name of the case. + :type name: str, optional + + :param notifications: Notification targets. + :type notifications: [str], optional + + :param status: Severity of the Security Signal. + :type status: SecurityMonitoringRuleSeverity + """ + if actions is not unset: + kwargs["actions"] = actions + if condition is not unset: + kwargs["condition"] = condition + if name is not unset: + kwargs["name"] = name + if notifications is not unset: + kwargs["notifications"] = notifications + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_attributes.py b/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_attributes.py new file mode 100644 index 0000000000..8f8d3843c9 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleConvertBulkAttributes(ModelNormal): + validations = { + "rule_ids": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "rule_ids": ([str],), + } + attribute_map = { + "rule_ids": "ruleIds", + } + + def __init__(self_, rule_ids: List[str], **kwargs): + """ + Attributes for bulk converting security monitoring rules to Terraform. + + :param rule_ids: List of rule IDs to convert. Each rule will be included in the resulting ZIP file + as a separate Terraform file. + :type rule_ids: [str] + """ + super().__init__(kwargs) + + + self_.rule_ids = rule_ids diff --git a/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data.py b/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data.py new file mode 100644 index 0000000000..748a324859 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_attributes import SecurityMonitoringRuleConvertBulkAttributes + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data_type import SecurityMonitoringRuleConvertBulkDataType + +class SecurityMonitoringRuleConvertBulkData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_attributes import SecurityMonitoringRuleConvertBulkAttributes + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data_type import SecurityMonitoringRuleConvertBulkDataType + return { + "attributes": (SecurityMonitoringRuleConvertBulkAttributes,), + "id": (str,), + "type": (SecurityMonitoringRuleConvertBulkDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringRuleConvertBulkAttributes, type: SecurityMonitoringRuleConvertBulkDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data for bulk converting security monitoring rules to Terraform. + + :param attributes: Attributes for bulk converting security monitoring rules to Terraform. + :type attributes: SecurityMonitoringRuleConvertBulkAttributes + + :param id: Request ID. + :type id: str, optional + + :param type: The type of the resource. + :type type: SecurityMonitoringRuleConvertBulkDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data_type.py b/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data_type.py new file mode 100644 index 0000000000..4ed570ba8b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleConvertBulkDataType(ModelSimple): + """ + The type of the resource. + + :param value: If omitted defaults to "security_monitoring_rules_convert_bulk". Must be one of ["security_monitoring_rules_convert_bulk"]. + :type value: str + """ + + allowed_values = { + "security_monitoring_rules_convert_bulk", + } + SECURITY_MONITORING_RULES_CONVERT_BULK: ClassVar["SecurityMonitoringRuleConvertBulkDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleConvertBulkDataType.SECURITY_MONITORING_RULES_CONVERT_BULK = SecurityMonitoringRuleConvertBulkDataType("security_monitoring_rules_convert_bulk") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_payload.py b/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_payload.py new file mode 100644 index 0000000000..302e449e0f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_convert_bulk_payload.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data import SecurityMonitoringRuleConvertBulkData + +class SecurityMonitoringRuleConvertBulkPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data import SecurityMonitoringRuleConvertBulkData + return { + "data": (SecurityMonitoringRuleConvertBulkData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringRuleConvertBulkData, **kwargs): + """ + Payload for bulk converting security monitoring rules to Terraform. + + :param data: Data for bulk converting security monitoring rules to Terraform. + :type data: SecurityMonitoringRuleConvertBulkData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_rule_convert_payload.py b/datadog_api_client/v2/model/security_monitoring_rule_convert_payload.py new file mode 100644 index 0000000000..1f56884f31 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_convert_payload.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleConvertPayload(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Convert a rule from JSON to Terraform. + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param custom_message: Custom/Overridden message for generated signals (used in case of Default rule update). + :type custom_message: str, optional + + :param custom_name: Custom/Overridden name of the rule (used in case of Default rule update). + :type custom_name: str, optional + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message for generated signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options. + :type options: SecurityMonitoringRuleOptions + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringStandardRuleQuery] + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCaseCreate], optional + + :param type: The rule type. + :type type: SecurityMonitoringRuleTypeCreate, 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.security_monitoring_standard_rule_payload import SecurityMonitoringStandardRulePayload + from datadog_api_client.v2.model.security_monitoring_signal_rule_payload import SecurityMonitoringSignalRulePayload + return { + "oneOf": [ + SecurityMonitoringStandardRulePayload, + SecurityMonitoringSignalRulePayload, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_rule_convert_response.py b/datadog_api_client/v2/model/security_monitoring_rule_convert_response.py new file mode 100644 index 0000000000..d53f019eee --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_convert_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleConvertResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "rule_id": (str,), + "terraform_content": (str,), + } + attribute_map = { + "rule_id": "ruleId", + "terraform_content": "terraformContent", + } + + def __init__(self_, rule_id: Union[str, UnsetType]=unset, terraform_content: Union[str, UnsetType]=unset, **kwargs): + """ + Result of the convert rule request containing Terraform content. + + :param rule_id: the ID of the rule. + :type rule_id: str, optional + + :param terraform_content: Terraform string as a result of converting the rule from JSON. + :type terraform_content: str, optional + """ + if rule_id is not unset: + kwargs["rule_id"] = rule_id + if terraform_content is not unset: + kwargs["terraform_content"] = terraform_content + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_create_payload.py b/datadog_api_client/v2/model/security_monitoring_rule_create_payload.py new file mode 100644 index 0000000000..9cee1b8ce4 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_create_payload.py @@ -0,0 +1,101 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleCreatePayload(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Create a new rule. + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message for generated signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options. + :type options: SecurityMonitoringRuleOptions + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringStandardRuleQuery] + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCaseCreate], optional + + :param type: The rule type. + :type type: SecurityMonitoringRuleTypeCreate, optional + + :param compliance_signal_options: How to generate compliance signals. Useful for cloud_configuration rules only. + :type compliance_signal_options: CloudConfigurationRuleComplianceSignalOptions + """ + 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.security_monitoring_standard_rule_create_payload import SecurityMonitoringStandardRuleCreatePayload + from datadog_api_client.v2.model.security_monitoring_signal_rule_create_payload import SecurityMonitoringSignalRuleCreatePayload + from datadog_api_client.v2.model.cloud_configuration_rule_create_payload import CloudConfigurationRuleCreatePayload + return { + "oneOf": [ + SecurityMonitoringStandardRuleCreatePayload, + SecurityMonitoringSignalRuleCreatePayload, + CloudConfigurationRuleCreatePayload, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_rule_detection_method.py b/datadog_api_client/v2/model/security_monitoring_rule_detection_method.py new file mode 100644 index 0000000000..2b6f1afb31 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_detection_method.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleDetectionMethod(ModelSimple): + """ + The detection method. + + :param value: Must be one of ["threshold", "new_value", "anomaly_detection", "impossible_travel", "hardcoded", "third_party", "anomaly_threshold", "sequence_detection"]. + :type value: str + """ + + allowed_values = { + "threshold", + "new_value", + "anomaly_detection", + "impossible_travel", + "hardcoded", + "third_party", + "anomaly_threshold", + "sequence_detection", + } + THRESHOLD: ClassVar["SecurityMonitoringRuleDetectionMethod"] + NEW_VALUE: ClassVar["SecurityMonitoringRuleDetectionMethod"] + ANOMALY_DETECTION: ClassVar["SecurityMonitoringRuleDetectionMethod"] + IMPOSSIBLE_TRAVEL: ClassVar["SecurityMonitoringRuleDetectionMethod"] + HARDCODED: ClassVar["SecurityMonitoringRuleDetectionMethod"] + THIRD_PARTY: ClassVar["SecurityMonitoringRuleDetectionMethod"] + ANOMALY_THRESHOLD: ClassVar["SecurityMonitoringRuleDetectionMethod"] + SEQUENCE_DETECTION: ClassVar["SecurityMonitoringRuleDetectionMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleDetectionMethod.THRESHOLD = SecurityMonitoringRuleDetectionMethod("threshold") +SecurityMonitoringRuleDetectionMethod.NEW_VALUE = SecurityMonitoringRuleDetectionMethod("new_value") +SecurityMonitoringRuleDetectionMethod.ANOMALY_DETECTION = SecurityMonitoringRuleDetectionMethod("anomaly_detection") +SecurityMonitoringRuleDetectionMethod.IMPOSSIBLE_TRAVEL = SecurityMonitoringRuleDetectionMethod("impossible_travel") +SecurityMonitoringRuleDetectionMethod.HARDCODED = SecurityMonitoringRuleDetectionMethod("hardcoded") +SecurityMonitoringRuleDetectionMethod.THIRD_PARTY = SecurityMonitoringRuleDetectionMethod("third_party") +SecurityMonitoringRuleDetectionMethod.ANOMALY_THRESHOLD = SecurityMonitoringRuleDetectionMethod("anomaly_threshold") +SecurityMonitoringRuleDetectionMethod.SEQUENCE_DETECTION = SecurityMonitoringRuleDetectionMethod("sequence_detection") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_evaluation_window.py b/datadog_api_client/v2/model/security_monitoring_rule_evaluation_window.py new file mode 100644 index 0000000000..c8c52fdfb6 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_evaluation_window.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleEvaluationWindow(ModelSimple): + """ + A time window is specified to match when at least one of the cases matches true. This is a sliding window + and evaluates in real time. For third party detection method, this field is not used. + + :param value: Must be one of [0, 60, 300, 600, 900, 1800, 3600, 7200, 10800, 21600, 43200, 86400]. + :type value: int + """ + + allowed_values = { + 0, + 60, + 300, + 600, + 900, + 1800, + 3600, + 7200, + 10800, + 21600, + 43200, + 86400, + } + ZERO_MINUTES: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + ONE_MINUTE: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + FIVE_MINUTES: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + TEN_MINUTES: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + FIFTEEN_MINUTES: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + THIRTY_MINUTES: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + ONE_HOUR: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + TWO_HOURS: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + THREE_HOURS: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + SIX_HOURS: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + TWELVE_HOURS: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + ONE_DAY: ClassVar["SecurityMonitoringRuleEvaluationWindow"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SecurityMonitoringRuleEvaluationWindow.ZERO_MINUTES = SecurityMonitoringRuleEvaluationWindow(0) +SecurityMonitoringRuleEvaluationWindow.ONE_MINUTE = SecurityMonitoringRuleEvaluationWindow(60) +SecurityMonitoringRuleEvaluationWindow.FIVE_MINUTES = SecurityMonitoringRuleEvaluationWindow(300) +SecurityMonitoringRuleEvaluationWindow.TEN_MINUTES = SecurityMonitoringRuleEvaluationWindow(600) +SecurityMonitoringRuleEvaluationWindow.FIFTEEN_MINUTES = SecurityMonitoringRuleEvaluationWindow(900) +SecurityMonitoringRuleEvaluationWindow.THIRTY_MINUTES = SecurityMonitoringRuleEvaluationWindow(1800) +SecurityMonitoringRuleEvaluationWindow.ONE_HOUR = SecurityMonitoringRuleEvaluationWindow(3600) +SecurityMonitoringRuleEvaluationWindow.TWO_HOURS = SecurityMonitoringRuleEvaluationWindow(7200) +SecurityMonitoringRuleEvaluationWindow.THREE_HOURS = SecurityMonitoringRuleEvaluationWindow(10800) +SecurityMonitoringRuleEvaluationWindow.SIX_HOURS = SecurityMonitoringRuleEvaluationWindow(21600) +SecurityMonitoringRuleEvaluationWindow.TWELVE_HOURS = SecurityMonitoringRuleEvaluationWindow(43200) +SecurityMonitoringRuleEvaluationWindow.ONE_DAY = SecurityMonitoringRuleEvaluationWindow(86400) diff --git a/datadog_api_client/v2/model/security_monitoring_rule_hardcoded_evaluator_type.py b/datadog_api_client/v2/model/security_monitoring_rule_hardcoded_evaluator_type.py new file mode 100644 index 0000000000..dab66ecc2d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_hardcoded_evaluator_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleHardcodedEvaluatorType(ModelSimple): + """ + Hardcoded evaluator type. + + :param value: If omitted defaults to "log4shell". Must be one of ["log4shell"]. + :type value: str + """ + + allowed_values = { + "log4shell", + } + LOG4SHELL: ClassVar["SecurityMonitoringRuleHardcodedEvaluatorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleHardcodedEvaluatorType.LOG4SHELL = SecurityMonitoringRuleHardcodedEvaluatorType("log4shell") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_impossible_travel_options.py b/datadog_api_client/v2/model/security_monitoring_rule_impossible_travel_options.py new file mode 100644 index 0000000000..d48195704b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_impossible_travel_options.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleImpossibleTravelOptions(ModelNormal): + validations = { + "baseline_user_locations_duration": { + "inclusive_maximum": 30, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "baseline_user_locations": (bool,), + "baseline_user_locations_duration": (int,), + } + attribute_map = { + "baseline_user_locations": "baselineUserLocations", + "baseline_user_locations_duration": "baselineUserLocationsDuration", + } + + def __init__(self_, baseline_user_locations: Union[bool, UnsetType]=unset, baseline_user_locations_duration: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Options on impossible travel detection method. + + :param baseline_user_locations: If true, signals are suppressed for the first 24 hours. In that time, Datadog learns the user's regular + access locations. This can be helpful to reduce noise and infer VPN usage or credentialed API access. + :type baseline_user_locations: bool, optional + + :param baseline_user_locations_duration: The duration in days during which Datadog learns the user's regular access locations. After this period, signals are generated for accesses from unknown locations. + :type baseline_user_locations_duration: int, none_type, optional + """ + if baseline_user_locations is not unset: + kwargs["baseline_user_locations"] = baseline_user_locations + if baseline_user_locations_duration is not unset: + kwargs["baseline_user_locations_duration"] = baseline_user_locations_duration + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_keep_alive.py b/datadog_api_client/v2/model/security_monitoring_rule_keep_alive.py new file mode 100644 index 0000000000..76239f766f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_keep_alive.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleKeepAlive(ModelSimple): + """ + Once a signal is generated, the signal will remain "open" if a case is matched at least once within + this keep alive window. For third party detection method, this field is not used. + + :param value: Must be one of [0, 60, 300, 600, 900, 1800, 3600, 7200, 10800, 21600, 43200, 86400]. + :type value: int + """ + + allowed_values = { + 0, + 60, + 300, + 600, + 900, + 1800, + 3600, + 7200, + 10800, + 21600, + 43200, + 86400, + } + ZERO_MINUTES: ClassVar["SecurityMonitoringRuleKeepAlive"] + ONE_MINUTE: ClassVar["SecurityMonitoringRuleKeepAlive"] + FIVE_MINUTES: ClassVar["SecurityMonitoringRuleKeepAlive"] + TEN_MINUTES: ClassVar["SecurityMonitoringRuleKeepAlive"] + FIFTEEN_MINUTES: ClassVar["SecurityMonitoringRuleKeepAlive"] + THIRTY_MINUTES: ClassVar["SecurityMonitoringRuleKeepAlive"] + ONE_HOUR: ClassVar["SecurityMonitoringRuleKeepAlive"] + TWO_HOURS: ClassVar["SecurityMonitoringRuleKeepAlive"] + THREE_HOURS: ClassVar["SecurityMonitoringRuleKeepAlive"] + SIX_HOURS: ClassVar["SecurityMonitoringRuleKeepAlive"] + TWELVE_HOURS: ClassVar["SecurityMonitoringRuleKeepAlive"] + ONE_DAY: ClassVar["SecurityMonitoringRuleKeepAlive"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SecurityMonitoringRuleKeepAlive.ZERO_MINUTES = SecurityMonitoringRuleKeepAlive(0) +SecurityMonitoringRuleKeepAlive.ONE_MINUTE = SecurityMonitoringRuleKeepAlive(60) +SecurityMonitoringRuleKeepAlive.FIVE_MINUTES = SecurityMonitoringRuleKeepAlive(300) +SecurityMonitoringRuleKeepAlive.TEN_MINUTES = SecurityMonitoringRuleKeepAlive(600) +SecurityMonitoringRuleKeepAlive.FIFTEEN_MINUTES = SecurityMonitoringRuleKeepAlive(900) +SecurityMonitoringRuleKeepAlive.THIRTY_MINUTES = SecurityMonitoringRuleKeepAlive(1800) +SecurityMonitoringRuleKeepAlive.ONE_HOUR = SecurityMonitoringRuleKeepAlive(3600) +SecurityMonitoringRuleKeepAlive.TWO_HOURS = SecurityMonitoringRuleKeepAlive(7200) +SecurityMonitoringRuleKeepAlive.THREE_HOURS = SecurityMonitoringRuleKeepAlive(10800) +SecurityMonitoringRuleKeepAlive.SIX_HOURS = SecurityMonitoringRuleKeepAlive(21600) +SecurityMonitoringRuleKeepAlive.TWELVE_HOURS = SecurityMonitoringRuleKeepAlive(43200) +SecurityMonitoringRuleKeepAlive.ONE_DAY = SecurityMonitoringRuleKeepAlive(86400) diff --git a/datadog_api_client/v2/model/security_monitoring_rule_max_signal_duration.py b/datadog_api_client/v2/model/security_monitoring_rule_max_signal_duration.py new file mode 100644 index 0000000000..66374af626 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_max_signal_duration.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleMaxSignalDuration(ModelSimple): + """ + A signal will "close" regardless of the query being matched once the time exceeds the maximum duration. + This time is calculated from the first seen timestamp. + + :param value: Must be one of [0, 60, 300, 600, 900, 1800, 3600, 7200, 10800, 21600, 43200, 86400]. + :type value: int + """ + + allowed_values = { + 0, + 60, + 300, + 600, + 900, + 1800, + 3600, + 7200, + 10800, + 21600, + 43200, + 86400, + } + ZERO_MINUTES: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + ONE_MINUTE: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + FIVE_MINUTES: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + TEN_MINUTES: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + FIFTEEN_MINUTES: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + THIRTY_MINUTES: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + ONE_HOUR: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + TWO_HOURS: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + THREE_HOURS: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + SIX_HOURS: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + TWELVE_HOURS: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + ONE_DAY: ClassVar["SecurityMonitoringRuleMaxSignalDuration"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SecurityMonitoringRuleMaxSignalDuration.ZERO_MINUTES = SecurityMonitoringRuleMaxSignalDuration(0) +SecurityMonitoringRuleMaxSignalDuration.ONE_MINUTE = SecurityMonitoringRuleMaxSignalDuration(60) +SecurityMonitoringRuleMaxSignalDuration.FIVE_MINUTES = SecurityMonitoringRuleMaxSignalDuration(300) +SecurityMonitoringRuleMaxSignalDuration.TEN_MINUTES = SecurityMonitoringRuleMaxSignalDuration(600) +SecurityMonitoringRuleMaxSignalDuration.FIFTEEN_MINUTES = SecurityMonitoringRuleMaxSignalDuration(900) +SecurityMonitoringRuleMaxSignalDuration.THIRTY_MINUTES = SecurityMonitoringRuleMaxSignalDuration(1800) +SecurityMonitoringRuleMaxSignalDuration.ONE_HOUR = SecurityMonitoringRuleMaxSignalDuration(3600) +SecurityMonitoringRuleMaxSignalDuration.TWO_HOURS = SecurityMonitoringRuleMaxSignalDuration(7200) +SecurityMonitoringRuleMaxSignalDuration.THREE_HOURS = SecurityMonitoringRuleMaxSignalDuration(10800) +SecurityMonitoringRuleMaxSignalDuration.SIX_HOURS = SecurityMonitoringRuleMaxSignalDuration(21600) +SecurityMonitoringRuleMaxSignalDuration.TWELVE_HOURS = SecurityMonitoringRuleMaxSignalDuration(43200) +SecurityMonitoringRuleMaxSignalDuration.ONE_DAY = SecurityMonitoringRuleMaxSignalDuration(86400) diff --git a/datadog_api_client/v2/model/security_monitoring_rule_new_value_options.py b/datadog_api_client/v2/model/security_monitoring_rule_new_value_options.py new file mode 100644 index 0000000000..7edf768492 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_new_value_options.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_learning_method import SecurityMonitoringRuleNewValueOptionsLearningMethod + from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_learning_threshold import SecurityMonitoringRuleNewValueOptionsLearningThreshold + +class SecurityMonitoringRuleNewValueOptions(ModelNormal): + validations = { + "forget_after": { + "inclusive_maximum": 30, + "inclusive_minimum": 1, + }, + "learning_duration": { + "inclusive_maximum": 30, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_learning_method import SecurityMonitoringRuleNewValueOptionsLearningMethod + from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_learning_threshold import SecurityMonitoringRuleNewValueOptionsLearningThreshold + return { + "forget_after": (int,), + "instantaneous_baseline": (bool,), + "learning_duration": (int,), + "learning_method": (SecurityMonitoringRuleNewValueOptionsLearningMethod,), + "learning_threshold": (SecurityMonitoringRuleNewValueOptionsLearningThreshold,), + } + attribute_map = { + "forget_after": "forgetAfter", + "instantaneous_baseline": "instantaneousBaseline", + "learning_duration": "learningDuration", + "learning_method": "learningMethod", + "learning_threshold": "learningThreshold", + } + + def __init__(self_, forget_after: Union[int, UnsetType]=unset, instantaneous_baseline: Union[bool, UnsetType]=unset, learning_duration: Union[int, UnsetType]=unset, learning_method: Union[SecurityMonitoringRuleNewValueOptionsLearningMethod, UnsetType]=unset, learning_threshold: Union[SecurityMonitoringRuleNewValueOptionsLearningThreshold, UnsetType]=unset, **kwargs): + """ + Options on new value detection method. + + :param forget_after: The duration in days after which a learned value is forgotten. + :type forget_after: int, optional + + :param instantaneous_baseline: When set to true, Datadog uses previous values that fall within the defined learning window to construct the baseline, enabling the system to establish an accurate baseline more rapidly rather than relying solely on gradual learning over time. + :type instantaneous_baseline: bool, optional + + :param learning_duration: The duration in days during which values are learned, and after which signals will be generated for values that + weren't learned. If set to 0, a signal will be generated for all new values after the first value is learned. + :type learning_duration: int, optional + + :param learning_method: The learning method used to determine when signals should be generated for values that weren't learned. + :type learning_method: SecurityMonitoringRuleNewValueOptionsLearningMethod, optional + + :param learning_threshold: A number of occurrences after which signals will be generated for values that weren't learned. + :type learning_threshold: SecurityMonitoringRuleNewValueOptionsLearningThreshold, optional + """ + if forget_after is not unset: + kwargs["forget_after"] = forget_after + if instantaneous_baseline is not unset: + kwargs["instantaneous_baseline"] = instantaneous_baseline + if learning_duration is not unset: + kwargs["learning_duration"] = learning_duration + if learning_method is not unset: + kwargs["learning_method"] = learning_method + if learning_threshold is not unset: + kwargs["learning_threshold"] = learning_threshold + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_new_value_options_learning_method.py b/datadog_api_client/v2/model/security_monitoring_rule_new_value_options_learning_method.py new file mode 100644 index 0000000000..79aba9f2eb --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_new_value_options_learning_method.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleNewValueOptionsLearningMethod(ModelSimple): + """ + The learning method used to determine when signals should be generated for values that weren't learned. + + :param value: If omitted defaults to "duration". Must be one of ["duration", "threshold"]. + :type value: str + """ + + allowed_values = { + "duration", + "threshold", + } + DURATION: ClassVar["SecurityMonitoringRuleNewValueOptionsLearningMethod"] + THRESHOLD: ClassVar["SecurityMonitoringRuleNewValueOptionsLearningMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleNewValueOptionsLearningMethod.DURATION = SecurityMonitoringRuleNewValueOptionsLearningMethod("duration") +SecurityMonitoringRuleNewValueOptionsLearningMethod.THRESHOLD = SecurityMonitoringRuleNewValueOptionsLearningMethod("threshold") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_new_value_options_learning_threshold.py b/datadog_api_client/v2/model/security_monitoring_rule_new_value_options_learning_threshold.py new file mode 100644 index 0000000000..502004dc5b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_new_value_options_learning_threshold.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleNewValueOptionsLearningThreshold(ModelSimple): + """ + A number of occurrences after which signals will be generated for values that weren't learned. + + :param value: If omitted defaults to 0. Must be one of [0, 1]. + :type value: int + """ + + allowed_values = { + 0, + 1, + } + ZERO_OCCURRENCES: ClassVar["SecurityMonitoringRuleNewValueOptionsLearningThreshold"] + ONE_OCCURRENCE: ClassVar["SecurityMonitoringRuleNewValueOptionsLearningThreshold"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SecurityMonitoringRuleNewValueOptionsLearningThreshold.ZERO_OCCURRENCES = SecurityMonitoringRuleNewValueOptionsLearningThreshold(0) +SecurityMonitoringRuleNewValueOptionsLearningThreshold.ONE_OCCURRENCE = SecurityMonitoringRuleNewValueOptionsLearningThreshold(1) diff --git a/datadog_api_client/v2/model/security_monitoring_rule_options.py b/datadog_api_client/v2/model/security_monitoring_rule_options.py new file mode 100644 index 0000000000..f2f0476540 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_options.py @@ -0,0 +1,152 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options import SecurityMonitoringRuleAnomalyDetectionOptions + from datadog_api_client.v2.model.cloud_configuration_compliance_rule_options import CloudConfigurationComplianceRuleOptions + from datadog_api_client.v2.model.security_monitoring_rule_detection_method import SecurityMonitoringRuleDetectionMethod + from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import SecurityMonitoringRuleEvaluationWindow + from datadog_api_client.v2.model.security_monitoring_rule_hardcoded_evaluator_type import SecurityMonitoringRuleHardcodedEvaluatorType + from datadog_api_client.v2.model.security_monitoring_rule_impossible_travel_options import SecurityMonitoringRuleImpossibleTravelOptions + from datadog_api_client.v2.model.security_monitoring_rule_keep_alive import SecurityMonitoringRuleKeepAlive + from datadog_api_client.v2.model.security_monitoring_rule_max_signal_duration import SecurityMonitoringRuleMaxSignalDuration + from datadog_api_client.v2.model.security_monitoring_rule_new_value_options import SecurityMonitoringRuleNewValueOptions + from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_options import SecurityMonitoringRuleSequenceDetectionOptions + from datadog_api_client.v2.model.security_monitoring_rule_third_party_options import SecurityMonitoringRuleThirdPartyOptions + +class SecurityMonitoringRuleOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options import SecurityMonitoringRuleAnomalyDetectionOptions + from datadog_api_client.v2.model.cloud_configuration_compliance_rule_options import CloudConfigurationComplianceRuleOptions + from datadog_api_client.v2.model.security_monitoring_rule_detection_method import SecurityMonitoringRuleDetectionMethod + from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import SecurityMonitoringRuleEvaluationWindow + from datadog_api_client.v2.model.security_monitoring_rule_hardcoded_evaluator_type import SecurityMonitoringRuleHardcodedEvaluatorType + from datadog_api_client.v2.model.security_monitoring_rule_impossible_travel_options import SecurityMonitoringRuleImpossibleTravelOptions + from datadog_api_client.v2.model.security_monitoring_rule_keep_alive import SecurityMonitoringRuleKeepAlive + from datadog_api_client.v2.model.security_monitoring_rule_max_signal_duration import SecurityMonitoringRuleMaxSignalDuration + from datadog_api_client.v2.model.security_monitoring_rule_new_value_options import SecurityMonitoringRuleNewValueOptions + from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_options import SecurityMonitoringRuleSequenceDetectionOptions + from datadog_api_client.v2.model.security_monitoring_rule_third_party_options import SecurityMonitoringRuleThirdPartyOptions + return { + "anomaly_detection_options": (SecurityMonitoringRuleAnomalyDetectionOptions,), + "compliance_rule_options": (CloudConfigurationComplianceRuleOptions,), + "decrease_criticality_based_on_env": (bool,), + "detection_method": (SecurityMonitoringRuleDetectionMethod,), + "evaluation_window": (SecurityMonitoringRuleEvaluationWindow,), + "hardcoded_evaluator_type": (SecurityMonitoringRuleHardcodedEvaluatorType,), + "impossible_travel_options": (SecurityMonitoringRuleImpossibleTravelOptions,), + "keep_alive": (SecurityMonitoringRuleKeepAlive,), + "max_signal_duration": (SecurityMonitoringRuleMaxSignalDuration,), + "new_value_options": (SecurityMonitoringRuleNewValueOptions,), + "sequence_detection_options": (SecurityMonitoringRuleSequenceDetectionOptions,), + "third_party_rule_options": (SecurityMonitoringRuleThirdPartyOptions,), + } + attribute_map = { + "anomaly_detection_options": "anomalyDetectionOptions", + "compliance_rule_options": "complianceRuleOptions", + "decrease_criticality_based_on_env": "decreaseCriticalityBasedOnEnv", + "detection_method": "detectionMethod", + "evaluation_window": "evaluationWindow", + "hardcoded_evaluator_type": "hardcodedEvaluatorType", + "impossible_travel_options": "impossibleTravelOptions", + "keep_alive": "keepAlive", + "max_signal_duration": "maxSignalDuration", + "new_value_options": "newValueOptions", + "sequence_detection_options": "sequenceDetectionOptions", + "third_party_rule_options": "thirdPartyRuleOptions", + } + + def __init__(self_, anomaly_detection_options: Union[SecurityMonitoringRuleAnomalyDetectionOptions, UnsetType]=unset, compliance_rule_options: Union[CloudConfigurationComplianceRuleOptions, UnsetType]=unset, decrease_criticality_based_on_env: Union[bool, UnsetType]=unset, detection_method: Union[SecurityMonitoringRuleDetectionMethod, UnsetType]=unset, evaluation_window: Union[SecurityMonitoringRuleEvaluationWindow, UnsetType]=unset, hardcoded_evaluator_type: Union[SecurityMonitoringRuleHardcodedEvaluatorType, UnsetType]=unset, impossible_travel_options: Union[SecurityMonitoringRuleImpossibleTravelOptions, UnsetType]=unset, keep_alive: Union[SecurityMonitoringRuleKeepAlive, UnsetType]=unset, max_signal_duration: Union[SecurityMonitoringRuleMaxSignalDuration, UnsetType]=unset, new_value_options: Union[SecurityMonitoringRuleNewValueOptions, UnsetType]=unset, sequence_detection_options: Union[SecurityMonitoringRuleSequenceDetectionOptions, UnsetType]=unset, third_party_rule_options: Union[SecurityMonitoringRuleThirdPartyOptions, UnsetType]=unset, **kwargs): + """ + Options. + + :param anomaly_detection_options: Options on anomaly detection method. + :type anomaly_detection_options: SecurityMonitoringRuleAnomalyDetectionOptions, optional + + :param compliance_rule_options: Options for cloud_configuration rules. + Fields ``resourceType`` and ``regoRule`` are mandatory when managing custom ``cloud_configuration`` rules. + :type compliance_rule_options: CloudConfigurationComplianceRuleOptions, optional + + :param decrease_criticality_based_on_env: If true, signals in non-production environments have a lower severity than what is defined by the rule case, which can reduce signal noise. + The severity is decreased by one level: ``CRITICAL`` in production becomes ``HIGH`` in non-production, ``HIGH`` becomes ``MEDIUM`` and so on. ``INFO`` remains ``INFO``. + The decrement is applied when the environment tag of the signal starts with ``staging`` , ``test`` or ``dev``. + :type decrease_criticality_based_on_env: bool, optional + + :param detection_method: The detection method. + :type detection_method: SecurityMonitoringRuleDetectionMethod, optional + + :param evaluation_window: A time window is specified to match when at least one of the cases matches true. This is a sliding window + and evaluates in real time. For third party detection method, this field is not used. + :type evaluation_window: SecurityMonitoringRuleEvaluationWindow, optional + + :param hardcoded_evaluator_type: Hardcoded evaluator type. + :type hardcoded_evaluator_type: SecurityMonitoringRuleHardcodedEvaluatorType, optional + + :param impossible_travel_options: Options on impossible travel detection method. + :type impossible_travel_options: SecurityMonitoringRuleImpossibleTravelOptions, optional + + :param keep_alive: Once a signal is generated, the signal will remain "open" if a case is matched at least once within + this keep alive window. For third party detection method, this field is not used. + :type keep_alive: SecurityMonitoringRuleKeepAlive, optional + + :param max_signal_duration: A signal will "close" regardless of the query being matched once the time exceeds the maximum duration. + This time is calculated from the first seen timestamp. + :type max_signal_duration: SecurityMonitoringRuleMaxSignalDuration, optional + + :param new_value_options: Options on new value detection method. + :type new_value_options: SecurityMonitoringRuleNewValueOptions, optional + + :param sequence_detection_options: Options on sequence detection method. + :type sequence_detection_options: SecurityMonitoringRuleSequenceDetectionOptions, optional + + :param third_party_rule_options: Options on third party detection method. + :type third_party_rule_options: SecurityMonitoringRuleThirdPartyOptions, optional + """ + if anomaly_detection_options is not unset: + kwargs["anomaly_detection_options"] = anomaly_detection_options + if compliance_rule_options is not unset: + kwargs["compliance_rule_options"] = compliance_rule_options + if decrease_criticality_based_on_env is not unset: + kwargs["decrease_criticality_based_on_env"] = decrease_criticality_based_on_env + if detection_method is not unset: + kwargs["detection_method"] = detection_method + if evaluation_window is not unset: + kwargs["evaluation_window"] = evaluation_window + if hardcoded_evaluator_type is not unset: + kwargs["hardcoded_evaluator_type"] = hardcoded_evaluator_type + if impossible_travel_options is not unset: + kwargs["impossible_travel_options"] = impossible_travel_options + if keep_alive is not unset: + kwargs["keep_alive"] = keep_alive + if max_signal_duration is not unset: + kwargs["max_signal_duration"] = max_signal_duration + if new_value_options is not unset: + kwargs["new_value_options"] = new_value_options + if sequence_detection_options is not unset: + kwargs["sequence_detection_options"] = sequence_detection_options + if third_party_rule_options is not unset: + kwargs["third_party_rule_options"] = third_party_rule_options + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_query.py b/datadog_api_client/v2/model/security_monitoring_rule_query.py new file mode 100644 index 0000000000..39a0224cfb --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_query.py @@ -0,0 +1,98 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleQuery(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Query for matching rule. + + :param aggregation: The aggregation type. + :type aggregation: SecurityMonitoringRuleQueryAggregation, optional + + :param custom_query_extension: Query extension to append to the logs query. + :type custom_query_extension: str, optional + + :param data_source: Source of events, either logs, audit trail, security signals, or Datadog events. `app_sec_spans` is deprecated in favor of `spans`. + :type data_source: SecurityMonitoringStandardDataSource, optional + + :param distinct_fields: Field for which the cardinality is measured. Sent as an array. + :type distinct_fields: [str], optional + + :param group_by_fields: Fields to group by. + :type group_by_fields: [str], optional + + :param has_optional_group_by_fields: When false, events without a group-by value are ignored by the rule. When true, events with missing group-by fields are processed with `N/A`, replacing the missing values. + :type has_optional_group_by_fields: bool, optional + + :param index: **This field is currently unstable and might be removed in a minor version upgrade.** + The index to run the query on, if the `dataSource` is `logs`. Only used for scheduled rules - in other words, when the `schedulingOptions` field is present in the rule payload. + :type index: str, optional + + :param indexes: List of indexes to query when the `dataSource` is `logs`. Only used for scheduled rules, such as when the `schedulingOptions` field is present in the rule payload. + :type indexes: [str], optional + + :param metric: (Deprecated) The target field to aggregate over when using the sum or max + aggregations. `metrics` field should be used instead. + :type metric: str, optional + + :param metrics: Group of target fields to aggregate over when using the sum, max, geo data, or new value aggregations. The sum, max, and geo data aggregations only accept one value in this list, whereas the new value aggregation accepts up to five values. + :type metrics: [str], optional + + :param name: Name of the query. + :type name: str, optional + + :param query: Query to run on logs. + :type query: str, optional + + :param correlated_by_fields: Fields to group by. + :type correlated_by_fields: [str], optional + + :param correlated_query_index: Index of the rule query used to retrieve the correlated field. + :type correlated_query_index: int, optional + + :param rule_id: Rule ID to match on signals. + :type rule_id: str + """ + 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.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_signal_rule_query import SecurityMonitoringSignalRuleQuery + return { + "oneOf": [ + SecurityMonitoringStandardRuleQuery, + SecurityMonitoringSignalRuleQuery, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_rule_query_aggregation.py b/datadog_api_client/v2/model/security_monitoring_rule_query_aggregation.py new file mode 100644 index 0000000000..632708694a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_query_aggregation.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleQueryAggregation(ModelSimple): + """ + The aggregation type. + + :param value: Must be one of ["count", "cardinality", "sum", "max", "new_value", "geo_data", "event_count", "none"]. + :type value: str + """ + + allowed_values = { + "count", + "cardinality", + "sum", + "max", + "new_value", + "geo_data", + "event_count", + "none", + } + COUNT: ClassVar["SecurityMonitoringRuleQueryAggregation"] + CARDINALITY: ClassVar["SecurityMonitoringRuleQueryAggregation"] + SUM: ClassVar["SecurityMonitoringRuleQueryAggregation"] + MAX: ClassVar["SecurityMonitoringRuleQueryAggregation"] + NEW_VALUE: ClassVar["SecurityMonitoringRuleQueryAggregation"] + GEO_DATA: ClassVar["SecurityMonitoringRuleQueryAggregation"] + EVENT_COUNT: ClassVar["SecurityMonitoringRuleQueryAggregation"] + NONE: ClassVar["SecurityMonitoringRuleQueryAggregation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleQueryAggregation.COUNT = SecurityMonitoringRuleQueryAggregation("count") +SecurityMonitoringRuleQueryAggregation.CARDINALITY = SecurityMonitoringRuleQueryAggregation("cardinality") +SecurityMonitoringRuleQueryAggregation.SUM = SecurityMonitoringRuleQueryAggregation("sum") +SecurityMonitoringRuleQueryAggregation.MAX = SecurityMonitoringRuleQueryAggregation("max") +SecurityMonitoringRuleQueryAggregation.NEW_VALUE = SecurityMonitoringRuleQueryAggregation("new_value") +SecurityMonitoringRuleQueryAggregation.GEO_DATA = SecurityMonitoringRuleQueryAggregation("geo_data") +SecurityMonitoringRuleQueryAggregation.EVENT_COUNT = SecurityMonitoringRuleQueryAggregation("event_count") +SecurityMonitoringRuleQueryAggregation.NONE = SecurityMonitoringRuleQueryAggregation("none") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_query_payload.py b/datadog_api_client/v2/model/security_monitoring_rule_query_payload.py new file mode 100644 index 0000000000..8efaf3ae1d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_query_payload.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_query_payload_data import SecurityMonitoringRuleQueryPayloadData + +class SecurityMonitoringRuleQueryPayload(ModelNormal): + validations = { + "index": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_query_payload_data import SecurityMonitoringRuleQueryPayloadData + return { + "expected_result": (bool,), + "index": (int,), + "payload": (SecurityMonitoringRuleQueryPayloadData,), + } + attribute_map = { + "expected_result": "expectedResult", + "index": "index", + "payload": "payload", + } + + def __init__(self_, expected_result: Union[bool, UnsetType]=unset, index: Union[int, UnsetType]=unset, payload: Union[SecurityMonitoringRuleQueryPayloadData, UnsetType]=unset, **kwargs): + """ + Payload to test a rule query with the expected result. + + :param expected_result: Expected result of the test. + :type expected_result: bool, optional + + :param index: Index of the query under test. + :type index: int, optional + + :param payload: Payload used to test the rule query. + :type payload: SecurityMonitoringRuleQueryPayloadData, optional + """ + if expected_result is not unset: + kwargs["expected_result"] = expected_result + if index is not unset: + kwargs["index"] = index + if payload is not unset: + kwargs["payload"] = payload + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_query_payload_data.py b/datadog_api_client/v2/model/security_monitoring_rule_query_payload_data.py new file mode 100644 index 0000000000..ae0ea576cf --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_query_payload_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleQueryPayloadData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ddsource": (str,), + "ddtags": (str,), + "hostname": (str,), + "message": (str,), + "service": (str,), + } + attribute_map = { + "ddsource": "ddsource", + "ddtags": "ddtags", + "hostname": "hostname", + "message": "message", + "service": "service", + } + + def __init__(self_, ddsource: Union[str, UnsetType]=unset, ddtags: Union[str, UnsetType]=unset, hostname: Union[str, UnsetType]=unset, message: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, **kwargs): + """ + Payload used to test the rule query. + + :param ddsource: Source of the payload. + :type ddsource: str, optional + + :param ddtags: Tags associated with your data. + :type ddtags: str, optional + + :param hostname: The name of the originating host of the log. + :type hostname: str, optional + + :param message: The message of the payload. + :type message: str, optional + + :param service: The name of the application or service generating the data. + :type service: str, optional + """ + if ddsource is not unset: + kwargs["ddsource"] = ddsource + if ddtags is not unset: + kwargs["ddtags"] = ddtags + if hostname is not unset: + kwargs["hostname"] = hostname + if message is not unset: + kwargs["message"] = message + if service is not unset: + kwargs["service"] = service + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_response.py b/datadog_api_client/v2/model/security_monitoring_rule_response.py new file mode 100644 index 0000000000..48510e96f7 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_response.py @@ -0,0 +1,135 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleResponse(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Create a new rule. + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCase], optional + + :param compliance_signal_options: How to generate compliance signals. Useful for cloud_configuration rules only. + :type compliance_signal_options: CloudConfigurationRuleComplianceSignalOptions, optional + + :param created_at: When the rule was created, timestamp in milliseconds. + :type created_at: int, optional + + :param creation_author_id: User ID of the user who created the rule. + :type creation_author_id: int, optional + + :param custom_message: Custom/Overridden message for generated signals (used in case of Default rule update). + :type custom_message: str, optional + + :param custom_name: Custom/Overridden name of the rule (used in case of Default rule update). + :type custom_name: str, optional + + :param default_tags: Default Tags for default rules (included in tags) + :type default_tags: [str], optional + + :param deprecation_date: When the rule will be deprecated, timestamp in milliseconds. + :type deprecation_date: int, optional + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param id: The ID of the rule. + :type id: str, optional + + :param is_default: Whether the rule is included by default. + :type is_default: bool, optional + + :param is_deleted: Whether the rule has been deleted. + :type is_deleted: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool, optional + + :param message: Message for generated signals. + :type message: str, optional + + :param name: The name of the rule. + :type name: str, optional + + :param options: Options. + :type options: SecurityMonitoringRuleOptions, optional + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringStandardRuleQuery], optional + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCase], optional + + :param type: The rule type. + :type type: SecurityMonitoringRuleTypeRead, optional + + :param update_author_id: User ID of the user who updated the rule. + :type update_author_id: int, optional + + :param updated_at: The date the rule was last updated, in milliseconds. + :type updated_at: int, optional + + :param version: The version of the rule. + :type version: int, 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.security_monitoring_standard_rule_response import SecurityMonitoringStandardRuleResponse + from datadog_api_client.v2.model.security_monitoring_signal_rule_response import SecurityMonitoringSignalRuleResponse + return { + "oneOf": [ + SecurityMonitoringStandardRuleResponse, + SecurityMonitoringSignalRuleResponse, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_rule_sequence_detection_options.py b/datadog_api_client/v2/model/security_monitoring_rule_sequence_detection_options.py new file mode 100644 index 0000000000..6a4ab51daf --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_sequence_detection_options.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_step_transition import SecurityMonitoringRuleSequenceDetectionStepTransition + from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_step import SecurityMonitoringRuleSequenceDetectionStep + +class SecurityMonitoringRuleSequenceDetectionOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_step_transition import SecurityMonitoringRuleSequenceDetectionStepTransition + from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_step import SecurityMonitoringRuleSequenceDetectionStep + return { + "step_transitions": ([SecurityMonitoringRuleSequenceDetectionStepTransition],), + "steps": ([SecurityMonitoringRuleSequenceDetectionStep],), + } + attribute_map = { + "step_transitions": "stepTransitions", + "steps": "steps", + } + + def __init__(self_, step_transitions: Union[List[SecurityMonitoringRuleSequenceDetectionStepTransition], UnsetType]=unset, steps: Union[List[SecurityMonitoringRuleSequenceDetectionStep], UnsetType]=unset, **kwargs): + """ + Options on sequence detection method. + + :param step_transitions: Transitions defining the allowed order of steps and their evaluation windows. + :type step_transitions: [SecurityMonitoringRuleSequenceDetectionStepTransition], optional + + :param steps: Steps that define the conditions to be matched in sequence. + :type steps: [SecurityMonitoringRuleSequenceDetectionStep], optional + """ + if step_transitions is not unset: + kwargs["step_transitions"] = step_transitions + if steps is not unset: + kwargs["steps"] = steps + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_sequence_detection_step.py b/datadog_api_client/v2/model/security_monitoring_rule_sequence_detection_step.py new file mode 100644 index 0000000000..fb6d4d3c92 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_sequence_detection_step.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import SecurityMonitoringRuleEvaluationWindow + +class SecurityMonitoringRuleSequenceDetectionStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import SecurityMonitoringRuleEvaluationWindow + return { + "condition": (str,), + "evaluation_window": (SecurityMonitoringRuleEvaluationWindow,), + "name": (str,), + } + attribute_map = { + "condition": "condition", + "evaluation_window": "evaluationWindow", + "name": "name", + } + + def __init__(self_, condition: Union[str, UnsetType]=unset, evaluation_window: Union[SecurityMonitoringRuleEvaluationWindow, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Step definition for sequence detection containing the step name, condition, and evaluation window. + + :param condition: Condition referencing rule queries (e.g., ``a > 0`` ). + :type condition: str, optional + + :param evaluation_window: A time window is specified to match when at least one of the cases matches true. This is a sliding window + and evaluates in real time. For third party detection method, this field is not used. + :type evaluation_window: SecurityMonitoringRuleEvaluationWindow, optional + + :param name: Unique name identifying the step. + :type name: str, optional + """ + if condition is not unset: + kwargs["condition"] = condition + if evaluation_window is not unset: + kwargs["evaluation_window"] = evaluation_window + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_sequence_detection_step_transition.py b/datadog_api_client/v2/model/security_monitoring_rule_sequence_detection_step_transition.py new file mode 100644 index 0000000000..58ff90a015 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_sequence_detection_step_transition.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import SecurityMonitoringRuleEvaluationWindow + +class SecurityMonitoringRuleSequenceDetectionStepTransition(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import SecurityMonitoringRuleEvaluationWindow + return { + "child": (str,), + "evaluation_window": (SecurityMonitoringRuleEvaluationWindow,), + "parent": (str,), + } + attribute_map = { + "child": "child", + "evaluation_window": "evaluationWindow", + "parent": "parent", + } + + def __init__(self_, child: Union[str, UnsetType]=unset, evaluation_window: Union[SecurityMonitoringRuleEvaluationWindow, UnsetType]=unset, parent: Union[str, UnsetType]=unset, **kwargs): + """ + Transition from a parent step to a child step within a sequence detection rule. + + :param child: Name of the child step. + :type child: str, optional + + :param evaluation_window: A time window is specified to match when at least one of the cases matches true. This is a sliding window + and evaluates in real time. For third party detection method, this field is not used. + :type evaluation_window: SecurityMonitoringRuleEvaluationWindow, optional + + :param parent: Name of the parent step. + :type parent: str, optional + """ + if child is not unset: + kwargs["child"] = child + if evaluation_window is not unset: + kwargs["evaluation_window"] = evaluation_window + if parent is not unset: + kwargs["parent"] = parent + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_severity.py b/datadog_api_client/v2/model/security_monitoring_rule_severity.py new file mode 100644 index 0000000000..1da3d378cc --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_severity.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleSeverity(ModelSimple): + """ + Severity of the Security Signal. + + :param value: Must be one of ["info", "low", "medium", "high", "critical"]. + :type value: str + """ + + allowed_values = { + "info", + "low", + "medium", + "high", + "critical", + } + INFO: ClassVar["SecurityMonitoringRuleSeverity"] + LOW: ClassVar["SecurityMonitoringRuleSeverity"] + MEDIUM: ClassVar["SecurityMonitoringRuleSeverity"] + HIGH: ClassVar["SecurityMonitoringRuleSeverity"] + CRITICAL: ClassVar["SecurityMonitoringRuleSeverity"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleSeverity.INFO = SecurityMonitoringRuleSeverity("info") +SecurityMonitoringRuleSeverity.LOW = SecurityMonitoringRuleSeverity("low") +SecurityMonitoringRuleSeverity.MEDIUM = SecurityMonitoringRuleSeverity("medium") +SecurityMonitoringRuleSeverity.HIGH = SecurityMonitoringRuleSeverity("high") +SecurityMonitoringRuleSeverity.CRITICAL = SecurityMonitoringRuleSeverity("critical") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_sort.py b/datadog_api_client/v2/model/security_monitoring_rule_sort.py new file mode 100644 index 0000000000..d7b45e0dc3 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleSort(ModelSimple): + """ + The sort parameters used for querying security monitoring rules. + + :param value: Must be one of ["name", "creation_date", "update_date", "enabled", "type", "highest_severity", "source", "-name", "-creation_date", "-update_date", "-enabled", "-type", "-highest_severity", "-source"]. + :type value: str + """ + + allowed_values = { + "name", + "creation_date", + "update_date", + "enabled", + "type", + "highest_severity", + "source", + "-name", + "-creation_date", + "-update_date", + "-enabled", + "-type", + "-highest_severity", + "-source", + } + NAME: ClassVar["SecurityMonitoringRuleSort"] + CREATION_DATE: ClassVar["SecurityMonitoringRuleSort"] + UPDATE_DATE: ClassVar["SecurityMonitoringRuleSort"] + ENABLED: ClassVar["SecurityMonitoringRuleSort"] + TYPE: ClassVar["SecurityMonitoringRuleSort"] + HIGHEST_SEVERITY: ClassVar["SecurityMonitoringRuleSort"] + SOURCE: ClassVar["SecurityMonitoringRuleSort"] + NAME_DESCENDING: ClassVar["SecurityMonitoringRuleSort"] + CREATION_DATE_DESCENDING: ClassVar["SecurityMonitoringRuleSort"] + UPDATE_DATE_DESCENDING: ClassVar["SecurityMonitoringRuleSort"] + ENABLED_DESCENDING: ClassVar["SecurityMonitoringRuleSort"] + TYPE_DESCENDING: ClassVar["SecurityMonitoringRuleSort"] + HIGHEST_SEVERITY_DESCENDING: ClassVar["SecurityMonitoringRuleSort"] + SOURCE_DESCENDING: ClassVar["SecurityMonitoringRuleSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleSort.NAME = SecurityMonitoringRuleSort("name") +SecurityMonitoringRuleSort.CREATION_DATE = SecurityMonitoringRuleSort("creation_date") +SecurityMonitoringRuleSort.UPDATE_DATE = SecurityMonitoringRuleSort("update_date") +SecurityMonitoringRuleSort.ENABLED = SecurityMonitoringRuleSort("enabled") +SecurityMonitoringRuleSort.TYPE = SecurityMonitoringRuleSort("type") +SecurityMonitoringRuleSort.HIGHEST_SEVERITY = SecurityMonitoringRuleSort("highest_severity") +SecurityMonitoringRuleSort.SOURCE = SecurityMonitoringRuleSort("source") +SecurityMonitoringRuleSort.NAME_DESCENDING = SecurityMonitoringRuleSort("-name") +SecurityMonitoringRuleSort.CREATION_DATE_DESCENDING = SecurityMonitoringRuleSort("-creation_date") +SecurityMonitoringRuleSort.UPDATE_DATE_DESCENDING = SecurityMonitoringRuleSort("-update_date") +SecurityMonitoringRuleSort.ENABLED_DESCENDING = SecurityMonitoringRuleSort("-enabled") +SecurityMonitoringRuleSort.TYPE_DESCENDING = SecurityMonitoringRuleSort("-type") +SecurityMonitoringRuleSort.HIGHEST_SEVERITY_DESCENDING = SecurityMonitoringRuleSort("-highest_severity") +SecurityMonitoringRuleSort.SOURCE_DESCENDING = SecurityMonitoringRuleSort("-source") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_test_payload.py b/datadog_api_client/v2/model/security_monitoring_rule_test_payload.py new file mode 100644 index 0000000000..4c18ad16fe --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_test_payload.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleTestPayload(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Test a rule. + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message for generated signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options. + :type options: SecurityMonitoringRuleOptions + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringStandardRuleQuery] + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCaseCreate], optional + + :param type: The rule type. + :type type: SecurityMonitoringRuleTypeTest, 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.security_monitoring_standard_rule_test_payload import SecurityMonitoringStandardRuleTestPayload + return { + "oneOf": [ + SecurityMonitoringStandardRuleTestPayload, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_rule_test_request.py b/datadog_api_client/v2/model/security_monitoring_rule_test_request.py new file mode 100644 index 0000000000..d7ae051638 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_test_request.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_test_payload import SecurityMonitoringRuleTestPayload + from datadog_api_client.v2.model.security_monitoring_rule_query_payload import SecurityMonitoringRuleQueryPayload + from datadog_api_client.v2.model.security_monitoring_standard_rule_test_payload import SecurityMonitoringStandardRuleTestPayload + +class SecurityMonitoringRuleTestRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_test_payload import SecurityMonitoringRuleTestPayload + from datadog_api_client.v2.model.security_monitoring_rule_query_payload import SecurityMonitoringRuleQueryPayload + return { + "rule": (SecurityMonitoringRuleTestPayload,), + "rule_query_payloads": ([SecurityMonitoringRuleQueryPayload],), + } + attribute_map = { + "rule": "rule", + "rule_query_payloads": "ruleQueryPayloads", + } + + def __init__(self_, rule: Union[SecurityMonitoringRuleTestPayload, SecurityMonitoringStandardRuleTestPayload, UnsetType]=unset, rule_query_payloads: Union[List[SecurityMonitoringRuleQueryPayload], UnsetType]=unset, **kwargs): + """ + Test the rule queries of a rule (rule property is ignored when applied to an existing rule) + + :param rule: Test a rule. + :type rule: SecurityMonitoringRuleTestPayload, optional + + :param rule_query_payloads: Data payloads used to test rules query with the expected result. + :type rule_query_payloads: [SecurityMonitoringRuleQueryPayload], optional + """ + if rule is not unset: + kwargs["rule"] = rule + if rule_query_payloads is not unset: + kwargs["rule_query_payloads"] = rule_query_payloads + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_test_response.py b/datadog_api_client/v2/model/security_monitoring_rule_test_response.py new file mode 100644 index 0000000000..cb6b691718 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_test_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleTestResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "results": ([bool],), + } + attribute_map = { + "results": "results", + } + + def __init__(self_, results: Union[List[bool], UnsetType]=unset, **kwargs): + """ + Result of the test of the rule queries. + + :param results: Assert results are returned in the same order as the rule query payloads. + For each payload, it returns True if the result matched the expected result, + False otherwise. + :type results: [bool], optional + """ + if results is not unset: + kwargs["results"] = results + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_third_party_options.py b/datadog_api_client/v2/model/security_monitoring_rule_third_party_options.py new file mode 100644 index 0000000000..8b8ecae21b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_third_party_options.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + from datadog_api_client.v2.model.security_monitoring_third_party_root_query import SecurityMonitoringThirdPartyRootQuery + +class SecurityMonitoringRuleThirdPartyOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + from datadog_api_client.v2.model.security_monitoring_third_party_root_query import SecurityMonitoringThirdPartyRootQuery + return { + "default_notifications": ([str],), + "default_status": (SecurityMonitoringRuleSeverity,), + "root_queries": ([SecurityMonitoringThirdPartyRootQuery],), + "signal_title_template": (str,), + } + attribute_map = { + "default_notifications": "defaultNotifications", + "default_status": "defaultStatus", + "root_queries": "rootQueries", + "signal_title_template": "signalTitleTemplate", + } + + def __init__(self_, default_notifications: Union[List[str], UnsetType]=unset, default_status: Union[SecurityMonitoringRuleSeverity, UnsetType]=unset, root_queries: Union[List[SecurityMonitoringThirdPartyRootQuery], UnsetType]=unset, signal_title_template: Union[str, UnsetType]=unset, **kwargs): + """ + Options on third party detection method. + + :param default_notifications: Notification targets for the logs that do not correspond to any of the cases. + :type default_notifications: [str], optional + + :param default_status: Severity of the Security Signal. + :type default_status: SecurityMonitoringRuleSeverity, optional + + :param root_queries: Queries to be combined with third party case queries. Each of them can have different group by fields, to aggregate differently based on the type of alert. + :type root_queries: [SecurityMonitoringThirdPartyRootQuery], optional + + :param signal_title_template: A template for the signal title; if omitted, the title is generated based on the case name. + :type signal_title_template: str, optional + """ + if default_notifications is not unset: + kwargs["default_notifications"] = default_notifications + if default_status is not unset: + kwargs["default_status"] = default_status + if root_queries is not unset: + kwargs["root_queries"] = root_queries + if signal_title_template is not unset: + kwargs["signal_title_template"] = signal_title_template + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_type_create.py b/datadog_api_client/v2/model/security_monitoring_rule_type_create.py new file mode 100644 index 0000000000..4448c9f0c8 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_type_create.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleTypeCreate(ModelSimple): + """ + The rule type. + + :param value: Must be one of ["api_security", "application_security", "log_detection", "workload_activity", "workload_security"]. + :type value: str + """ + + allowed_values = { + "api_security", + "application_security", + "log_detection", + "workload_activity", + "workload_security", + } + API_SECURITY: ClassVar["SecurityMonitoringRuleTypeCreate"] + APPLICATION_SECURITY: ClassVar["SecurityMonitoringRuleTypeCreate"] + LOG_DETECTION: ClassVar["SecurityMonitoringRuleTypeCreate"] + WORKLOAD_ACTIVITY: ClassVar["SecurityMonitoringRuleTypeCreate"] + WORKLOAD_SECURITY: ClassVar["SecurityMonitoringRuleTypeCreate"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleTypeCreate.API_SECURITY = SecurityMonitoringRuleTypeCreate("api_security") +SecurityMonitoringRuleTypeCreate.APPLICATION_SECURITY = SecurityMonitoringRuleTypeCreate("application_security") +SecurityMonitoringRuleTypeCreate.LOG_DETECTION = SecurityMonitoringRuleTypeCreate("log_detection") +SecurityMonitoringRuleTypeCreate.WORKLOAD_ACTIVITY = SecurityMonitoringRuleTypeCreate("workload_activity") +SecurityMonitoringRuleTypeCreate.WORKLOAD_SECURITY = SecurityMonitoringRuleTypeCreate("workload_security") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_type_read.py b/datadog_api_client/v2/model/security_monitoring_rule_type_read.py new file mode 100644 index 0000000000..c30419d8ee --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_type_read.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleTypeRead(ModelSimple): + """ + The rule type. + + :param value: Must be one of ["log_detection", "infrastructure_configuration", "workload_security", "cloud_configuration", "application_security", "api_security", "workload_activity"]. + :type value: str + """ + + allowed_values = { + "log_detection", + "infrastructure_configuration", + "workload_security", + "cloud_configuration", + "application_security", + "api_security", + "workload_activity", + } + LOG_DETECTION: ClassVar["SecurityMonitoringRuleTypeRead"] + INFRASTRUCTURE_CONFIGURATION: ClassVar["SecurityMonitoringRuleTypeRead"] + WORKLOAD_SECURITY: ClassVar["SecurityMonitoringRuleTypeRead"] + CLOUD_CONFIGURATION: ClassVar["SecurityMonitoringRuleTypeRead"] + APPLICATION_SECURITY: ClassVar["SecurityMonitoringRuleTypeRead"] + API_SECURITY: ClassVar["SecurityMonitoringRuleTypeRead"] + WORKLOAD_ACTIVITY: ClassVar["SecurityMonitoringRuleTypeRead"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleTypeRead.LOG_DETECTION = SecurityMonitoringRuleTypeRead("log_detection") +SecurityMonitoringRuleTypeRead.INFRASTRUCTURE_CONFIGURATION = SecurityMonitoringRuleTypeRead("infrastructure_configuration") +SecurityMonitoringRuleTypeRead.WORKLOAD_SECURITY = SecurityMonitoringRuleTypeRead("workload_security") +SecurityMonitoringRuleTypeRead.CLOUD_CONFIGURATION = SecurityMonitoringRuleTypeRead("cloud_configuration") +SecurityMonitoringRuleTypeRead.APPLICATION_SECURITY = SecurityMonitoringRuleTypeRead("application_security") +SecurityMonitoringRuleTypeRead.API_SECURITY = SecurityMonitoringRuleTypeRead("api_security") +SecurityMonitoringRuleTypeRead.WORKLOAD_ACTIVITY = SecurityMonitoringRuleTypeRead("workload_activity") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_type_test.py b/datadog_api_client/v2/model/security_monitoring_rule_type_test.py new file mode 100644 index 0000000000..095d202385 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_type_test.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringRuleTypeTest(ModelSimple): + """ + The rule type. + + :param value: If omitted defaults to "log_detection". Must be one of ["log_detection"]. + :type value: str + """ + + allowed_values = { + "log_detection", + } + LOG_DETECTION: ClassVar["SecurityMonitoringRuleTypeTest"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringRuleTypeTest.LOG_DETECTION = SecurityMonitoringRuleTypeTest("log_detection") diff --git a/datadog_api_client/v2/model/security_monitoring_rule_update_payload.py b/datadog_api_client/v2/model/security_monitoring_rule_update_payload.py new file mode 100644 index 0000000000..8cccaed0f9 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_update_payload.py @@ -0,0 +1,191 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case import SecurityMonitoringRuleCase + from datadog_api_client.v2.model.cloud_configuration_rule_compliance_signal_options import CloudConfigurationRuleComplianceSignalOptions + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_rule_query import SecurityMonitoringRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case import SecurityMonitoringThirdPartyRuleCase + from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_signal_rule_query import SecurityMonitoringSignalRuleQuery + +class SecurityMonitoringRuleUpdatePayload(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case import SecurityMonitoringRuleCase + from datadog_api_client.v2.model.cloud_configuration_rule_compliance_signal_options import CloudConfigurationRuleComplianceSignalOptions + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_rule_query import SecurityMonitoringRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case import SecurityMonitoringThirdPartyRuleCase + return { + "calculated_fields": ([CalculatedField],), + "cases": ([SecurityMonitoringRuleCase],), + "compliance_signal_options": (CloudConfigurationRuleComplianceSignalOptions,), + "custom_message": (str,), + "custom_name": (str,), + "filters": ([SecurityMonitoringFilter],), + "group_signals_by": ([str],), + "has_extended_title": (bool,), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (SecurityMonitoringRuleOptions,), + "queries": ([SecurityMonitoringRuleQuery],), + "reference_tables": ([SecurityMonitoringReferenceTable],), + "scheduling_options": (SecurityMonitoringSchedulingOptions,), + "tags": ([str],), + "third_party_cases": ([SecurityMonitoringThirdPartyRuleCase],), + "version": (int,), + } + attribute_map = { + "calculated_fields": "calculatedFields", + "cases": "cases", + "compliance_signal_options": "complianceSignalOptions", + "custom_message": "customMessage", + "custom_name": "customName", + "filters": "filters", + "group_signals_by": "groupSignalsBy", + "has_extended_title": "hasExtendedTitle", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "queries": "queries", + "reference_tables": "referenceTables", + "scheduling_options": "schedulingOptions", + "tags": "tags", + "third_party_cases": "thirdPartyCases", + "version": "version", + } + + def __init__(self_, calculated_fields: Union[List[CalculatedField], UnsetType]=unset, cases: Union[List[SecurityMonitoringRuleCase], UnsetType]=unset, compliance_signal_options: Union[CloudConfigurationRuleComplianceSignalOptions, UnsetType]=unset, custom_message: Union[str, UnsetType]=unset, custom_name: Union[str, UnsetType]=unset, filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, group_signals_by: Union[List[str], UnsetType]=unset, has_extended_title: Union[bool, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, message: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, options: Union[SecurityMonitoringRuleOptions, UnsetType]=unset, queries: Union[List[Union[SecurityMonitoringRuleQuery, SecurityMonitoringStandardRuleQuery, SecurityMonitoringSignalRuleQuery]], UnsetType]=unset, reference_tables: Union[List[SecurityMonitoringReferenceTable], UnsetType]=unset, scheduling_options: Union[SecurityMonitoringSchedulingOptions, none_type, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, third_party_cases: Union[List[SecurityMonitoringThirdPartyRuleCase], UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Update an existing rule. + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCase], optional + + :param compliance_signal_options: How to generate compliance signals. Useful for cloud_configuration rules only. + :type compliance_signal_options: CloudConfigurationRuleComplianceSignalOptions, optional + + :param custom_message: Custom/Overridden Message for generated signals (used in case of Default rule update). + :type custom_message: str, optional + + :param custom_name: Custom/Overridden name (used in case of Default rule update). + :type custom_name: str, optional + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool, optional + + :param message: Message for generated signals. + :type message: str, optional + + :param name: Name of the rule. + :type name: str, optional + + :param options: Options. + :type options: SecurityMonitoringRuleOptions, optional + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringRuleQuery], optional + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCase], optional + + :param version: The version of the rule being updated. + :type version: int, optional + """ + if calculated_fields is not unset: + kwargs["calculated_fields"] = calculated_fields + if cases is not unset: + kwargs["cases"] = cases + if compliance_signal_options is not unset: + kwargs["compliance_signal_options"] = compliance_signal_options + if custom_message is not unset: + kwargs["custom_message"] = custom_message + if custom_name is not unset: + kwargs["custom_name"] = custom_name + if filters is not unset: + kwargs["filters"] = filters + if group_signals_by is not unset: + kwargs["group_signals_by"] = group_signals_by + if has_extended_title is not unset: + kwargs["has_extended_title"] = has_extended_title + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if message is not unset: + kwargs["message"] = message + if name is not unset: + kwargs["name"] = name + if options is not unset: + kwargs["options"] = options + if queries is not unset: + kwargs["queries"] = queries + if reference_tables is not unset: + kwargs["reference_tables"] = reference_tables + if scheduling_options is not unset: + kwargs["scheduling_options"] = scheduling_options + if tags is not unset: + kwargs["tags"] = tags + if third_party_cases is not unset: + kwargs["third_party_cases"] = third_party_cases + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_rule_validate_payload.py b/datadog_api_client/v2/model/security_monitoring_rule_validate_payload.py new file mode 100644 index 0000000000..94c997a0ff --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_rule_validate_payload.py @@ -0,0 +1,107 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringRuleValidatePayload(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Validate a rule. + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param custom_message: Custom/Overridden message for generated signals (used in case of Default rule update). + :type custom_message: str, optional + + :param custom_name: Custom/Overridden name of the rule (used in case of Default rule update). + :type custom_name: str, optional + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message for generated signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options. + :type options: SecurityMonitoringRuleOptions + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringStandardRuleQuery] + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCaseCreate], optional + + :param type: The rule type. + :type type: SecurityMonitoringRuleTypeCreate, optional + + :param compliance_signal_options: How to generate compliance signals. Useful for cloud_configuration rules only. + :type compliance_signal_options: CloudConfigurationRuleComplianceSignalOptions + """ + 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.security_monitoring_standard_rule_payload import SecurityMonitoringStandardRulePayload + from datadog_api_client.v2.model.security_monitoring_signal_rule_payload import SecurityMonitoringSignalRulePayload + from datadog_api_client.v2.model.cloud_configuration_rule_payload import CloudConfigurationRulePayload + return { + "oneOf": [ + SecurityMonitoringStandardRulePayload, + SecurityMonitoringSignalRulePayload, + CloudConfigurationRulePayload, + ], + } diff --git a/datadog_api_client/v2/model/security_monitoring_scheduling_options.py b/datadog_api_client/v2/model/security_monitoring_scheduling_options.py new file mode 100644 index 0000000000..f0b23ca334 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_scheduling_options.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSchedulingOptions(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "rrule": (str,), + "start": (str,), + "timezone": (str,), + } + attribute_map = { + "rrule": "rrule", + "start": "start", + "timezone": "timezone", + } + + def __init__(self_, rrule: Union[str, UnsetType]=unset, start: Union[str, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + + :param rrule: Schedule for the rule queries, written in RRULE syntax. See `RFC `_ for syntax reference. + :type rrule: str, optional + + :param start: Start date for the schedule, in ISO 8601 format without timezone. + :type start: str, optional + + :param timezone: Time zone of the start date, in the `tz database `_ format. + :type timezone: str, optional + """ + if rrule is not unset: + kwargs["rrule"] = rrule + if start is not unset: + kwargs["start"] = start + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_sentinel_one_integration_config_create_attributes.py b/datadog_api_client/v2/model/security_monitoring_sentinel_one_integration_config_create_attributes.py new file mode 100644 index 0000000000..24ccb95dc8 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_sentinel_one_integration_config_create_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_sentinel_one import SecurityMonitoringIntegrationTypeSentinelOne + from datadog_api_client.v2.model.security_monitoring_integration_config_sentinel_one_secrets import SecurityMonitoringIntegrationConfigSentinelOneSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringSentinelOneIntegrationConfigCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_sentinel_one import SecurityMonitoringIntegrationTypeSentinelOne + from datadog_api_client.v2.model.security_monitoring_integration_config_sentinel_one_secrets import SecurityMonitoringIntegrationConfigSentinelOneSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeSentinelOne,), + "name": (str,), + "secrets": (SecurityMonitoringIntegrationConfigSentinelOneSecrets,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeSentinelOne, name: str, secrets: SecurityMonitoringIntegrationConfigSentinelOneSecrets, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + The attributes of a SentinelOne entity context sync configuration to create. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for a SentinelOne entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeSentinelOne + + :param name: The display name for the entity context sync configuration. + :type name: str + + :param secrets: Credentials for a SentinelOne entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigSentinelOneSecrets + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type + self_.name = name + self_.secrets = secrets diff --git a/datadog_api_client/v2/model/security_monitoring_sentinel_one_integration_config_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_sentinel_one_integration_config_update_attributes.py new file mode 100644 index 0000000000..5212728ba0 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_sentinel_one_integration_config_update_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_sentinel_one import SecurityMonitoringIntegrationTypeSentinelOne + from datadog_api_client.v2.model.security_monitoring_integration_config_sentinel_one_secrets import SecurityMonitoringIntegrationConfigSentinelOneSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + +class SecurityMonitoringSentinelOneIntegrationConfigUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_sentinel_one import SecurityMonitoringIntegrationTypeSentinelOne + from datadog_api_client.v2.model.security_monitoring_integration_config_sentinel_one_secrets import SecurityMonitoringIntegrationConfigSentinelOneSecrets + from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings + return { + "domain": (str,), + "enabled": (bool,), + "integration_type": (SecurityMonitoringIntegrationTypeSentinelOne,), + "name": (str,), + "secrets": (SecurityMonitoringIntegrationConfigSentinelOneSecrets,), + "settings": (SecurityMonitoringIntegrationConfigSettings,), + } + attribute_map = { + "domain": "domain", + "enabled": "enabled", + "integration_type": "integration_type", + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, integration_type: SecurityMonitoringIntegrationTypeSentinelOne, domain: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, secrets: Union[SecurityMonitoringIntegrationConfigSentinelOneSecrets, UnsetType]=unset, settings: Union[SecurityMonitoringIntegrationConfigSettings, UnsetType]=unset, **kwargs): + """ + Fields to update on a SentinelOne entity context sync configuration. + + :param domain: The new domain associated with the external entity source. + :type domain: str, optional + + :param enabled: Whether the entity context sync should be enabled. + :type enabled: bool, optional + + :param integration_type: The source type for a SentinelOne entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeSentinelOne + + :param name: The new display name for the entity context sync configuration. + :type name: str, optional + + :param secrets: Credentials for a SentinelOne entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigSentinelOneSecrets, optional + + :param settings: Free-form, non-sensitive settings for the entity context sync. The accepted keys depend on the source type. + :type settings: SecurityMonitoringIntegrationConfigSettings, optional + """ + if domain is not unset: + kwargs["domain"] = domain + if enabled is not unset: + kwargs["enabled"] = enabled + if name is not unset: + kwargs["name"] = name + if secrets is not unset: + kwargs["secrets"] = secrets + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.integration_type = integration_type diff --git a/datadog_api_client/v2/model/security_monitoring_sentinel_one_integration_credentials_validate_attributes.py b/datadog_api_client/v2/model/security_monitoring_sentinel_one_integration_credentials_validate_attributes.py new file mode 100644 index 0000000000..1d8246fc1e --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_sentinel_one_integration_credentials_validate_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_integration_type_sentinel_one import SecurityMonitoringIntegrationTypeSentinelOne + from datadog_api_client.v2.model.security_monitoring_integration_config_sentinel_one_secrets import SecurityMonitoringIntegrationConfigSentinelOneSecrets + +class SecurityMonitoringSentinelOneIntegrationCredentialsValidateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_integration_type_sentinel_one import SecurityMonitoringIntegrationTypeSentinelOne + from datadog_api_client.v2.model.security_monitoring_integration_config_sentinel_one_secrets import SecurityMonitoringIntegrationConfigSentinelOneSecrets + return { + "domain": (str,), + "integration_type": (SecurityMonitoringIntegrationTypeSentinelOne,), + "secrets": (SecurityMonitoringIntegrationConfigSentinelOneSecrets,), + } + attribute_map = { + "domain": "domain", + "integration_type": "integration_type", + "secrets": "secrets", + } + + def __init__(self_, domain: str, integration_type: SecurityMonitoringIntegrationTypeSentinelOne, secrets: SecurityMonitoringIntegrationConfigSentinelOneSecrets, **kwargs): + """ + The SentinelOne credentials to validate against the external entity source. + + :param domain: The domain associated with the external entity source. + :type domain: str + + :param integration_type: The source type for a SentinelOne entity context sync. + :type integration_type: SecurityMonitoringIntegrationTypeSentinelOne + + :param secrets: Credentials for a SentinelOne entity context sync. + :type secrets: SecurityMonitoringIntegrationConfigSentinelOneSecrets + """ + super().__init__(kwargs) + + + self_.domain = domain + self_.integration_type = integration_type + self_.secrets = secrets diff --git a/datadog_api_client/v2/model/security_monitoring_signal.py b/datadog_api_client/v2/model/security_monitoring_signal.py new file mode 100644 index 0000000000..95d84dd1dd --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_attributes import SecurityMonitoringSignalAttributes + from datadog_api_client.v2.model.security_monitoring_signal_type import SecurityMonitoringSignalType + +class SecurityMonitoringSignal(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_attributes import SecurityMonitoringSignalAttributes + from datadog_api_client.v2.model.security_monitoring_signal_type import SecurityMonitoringSignalType + return { + "attributes": (SecurityMonitoringSignalAttributes,), + "id": (str,), + "type": (SecurityMonitoringSignalType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityMonitoringSignalAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SecurityMonitoringSignalType, UnsetType]=unset, **kwargs): + """ + Object description of a security signal. + + :param attributes: The object containing all signal attributes and their + associated values. + :type attributes: SecurityMonitoringSignalAttributes, optional + + :param id: The unique ID of the security signal. + :type id: str, optional + + :param type: The type of event. + :type type: SecurityMonitoringSignalType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_archive_reason.py b/datadog_api_client/v2/model/security_monitoring_signal_archive_reason.py new file mode 100644 index 0000000000..c2bbb423f0 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_archive_reason.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSignalArchiveReason(ModelSimple): + """ + Reason a signal is archived. + + :param value: Must be one of ["none", "false_positive", "testing_or_maintenance", "remediated", "investigated_case_opened", "true_positive_benign", "true_positive_malicious", "other"]. + :type value: str + """ + + allowed_values = { + "none", + "false_positive", + "testing_or_maintenance", + "remediated", + "investigated_case_opened", + "true_positive_benign", + "true_positive_malicious", + "other", + } + NONE: ClassVar["SecurityMonitoringSignalArchiveReason"] + FALSE_POSITIVE: ClassVar["SecurityMonitoringSignalArchiveReason"] + TESTING_OR_MAINTENANCE: ClassVar["SecurityMonitoringSignalArchiveReason"] + REMEDIATED: ClassVar["SecurityMonitoringSignalArchiveReason"] + INVESTIGATED_CASE_OPENED: ClassVar["SecurityMonitoringSignalArchiveReason"] + TRUE_POSITIVE_BENIGN: ClassVar["SecurityMonitoringSignalArchiveReason"] + TRUE_POSITIVE_MALICIOUS: ClassVar["SecurityMonitoringSignalArchiveReason"] + OTHER: ClassVar["SecurityMonitoringSignalArchiveReason"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSignalArchiveReason.NONE = SecurityMonitoringSignalArchiveReason("none") +SecurityMonitoringSignalArchiveReason.FALSE_POSITIVE = SecurityMonitoringSignalArchiveReason("false_positive") +SecurityMonitoringSignalArchiveReason.TESTING_OR_MAINTENANCE = SecurityMonitoringSignalArchiveReason("testing_or_maintenance") +SecurityMonitoringSignalArchiveReason.REMEDIATED = SecurityMonitoringSignalArchiveReason("remediated") +SecurityMonitoringSignalArchiveReason.INVESTIGATED_CASE_OPENED = SecurityMonitoringSignalArchiveReason("investigated_case_opened") +SecurityMonitoringSignalArchiveReason.TRUE_POSITIVE_BENIGN = SecurityMonitoringSignalArchiveReason("true_positive_benign") +SecurityMonitoringSignalArchiveReason.TRUE_POSITIVE_MALICIOUS = SecurityMonitoringSignalArchiveReason("true_positive_malicious") +SecurityMonitoringSignalArchiveReason.OTHER = SecurityMonitoringSignalArchiveReason("other") diff --git a/datadog_api_client/v2/model/security_monitoring_signal_assignee_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_signal_assignee_update_attributes.py new file mode 100644 index 0000000000..409c478a60 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_assignee_update_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_triage_user import SecurityMonitoringTriageUser + +class SecurityMonitoringSignalAssigneeUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_triage_user import SecurityMonitoringTriageUser + return { + "assignee": (SecurityMonitoringTriageUser,), + "version": (int,), + } + attribute_map = { + "assignee": "assignee", + "version": "version", + } + + def __init__(self_, assignee: SecurityMonitoringTriageUser, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes describing the new assignee of a security signal. + + :param assignee: Object representing a given user entity. + :type assignee: SecurityMonitoringTriageUser + + :param version: Version of the updated signal. If server side version is higher, update will be rejected. + :type version: int, optional + """ + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.assignee = assignee diff --git a/datadog_api_client/v2/model/security_monitoring_signal_assignee_update_data.py b/datadog_api_client/v2/model/security_monitoring_signal_assignee_update_data.py new file mode 100644 index 0000000000..8dd6f899e0 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_assignee_update_data.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_assignee_update_attributes import SecurityMonitoringSignalAssigneeUpdateAttributes + +class SecurityMonitoringSignalAssigneeUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_assignee_update_attributes import SecurityMonitoringSignalAssigneeUpdateAttributes + return { + "attributes": (SecurityMonitoringSignalAssigneeUpdateAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: SecurityMonitoringSignalAssigneeUpdateAttributes, **kwargs): + """ + Data containing the patch for changing the assignee of a signal. + + :param attributes: Attributes describing the new assignee of a security signal. + :type attributes: SecurityMonitoringSignalAssigneeUpdateAttributes + """ + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/security_monitoring_signal_assignee_update_request.py b/datadog_api_client/v2/model/security_monitoring_signal_assignee_update_request.py new file mode 100644 index 0000000000..65f19863da --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_assignee_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_assignee_update_data import SecurityMonitoringSignalAssigneeUpdateData + +class SecurityMonitoringSignalAssigneeUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_assignee_update_data import SecurityMonitoringSignalAssigneeUpdateData + return { + "data": (SecurityMonitoringSignalAssigneeUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringSignalAssigneeUpdateData, **kwargs): + """ + Request body for changing the assignee of a given security monitoring signal. + + :param data: Data containing the patch for changing the assignee of a signal. + :type data: SecurityMonitoringSignalAssigneeUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_signal_attributes.py b/datadog_api_client/v2/model/security_monitoring_signal_attributes.py new file mode 100644 index 0000000000..01b70c2253 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_attributes.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSignalAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "custom": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "message": (str,), + "tags": ([str],), + "timestamp": (datetime,), + } + attribute_map = { + "custom": "custom", + "message": "message", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, custom: Union[Dict[str, Any], UnsetType]=unset, message: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[datetime, UnsetType]=unset, **kwargs): + """ + The object containing all signal attributes and their + associated values. + + :param custom: A JSON object of attributes in the security signal. + :type custom: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param message: The message in the security signal defined by the rule that generated the signal. + :type message: str, optional + + :param tags: An array of tags associated with the security signal. + :type tags: [str], optional + + :param timestamp: The timestamp of the security signal. + :type timestamp: datetime, optional + """ + if custom is not unset: + kwargs["custom"] = custom + if message is not unset: + kwargs["message"] = message + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_incident_ids.py b/datadog_api_client/v2/model/security_monitoring_signal_incident_ids.py new file mode 100644 index 0000000000..cc038ed25f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_incident_ids.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSignalIncidentIds(ModelSimple): + """ + Array of incidents that are associated with this signal. + + + :type value: [int] + """ + + + + @cached_property + def openapi_types(_): + return { + "value": ([int],), + } diff --git a/datadog_api_client/v2/model/security_monitoring_signal_incidents_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_signal_incidents_update_attributes.py new file mode 100644 index 0000000000..453058378f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_incidents_update_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_incident_ids import SecurityMonitoringSignalIncidentIds + +class SecurityMonitoringSignalIncidentsUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_incident_ids import SecurityMonitoringSignalIncidentIds + return { + "incident_ids": (SecurityMonitoringSignalIncidentIds,), + "version": (int,), + } + attribute_map = { + "incident_ids": "incident_ids", + "version": "version", + } + + def __init__(self_, incident_ids: SecurityMonitoringSignalIncidentIds, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes describing the new list of related signals for a security signal. + + :param incident_ids: Array of incidents that are associated with this signal. + :type incident_ids: SecurityMonitoringSignalIncidentIds + + :param version: Version of the updated signal. If server side version is higher, update will be rejected. + :type version: int, optional + """ + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.incident_ids = incident_ids diff --git a/datadog_api_client/v2/model/security_monitoring_signal_incidents_update_data.py b/datadog_api_client/v2/model/security_monitoring_signal_incidents_update_data.py new file mode 100644 index 0000000000..de57eb4a1a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_incidents_update_data.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_incidents_update_attributes import SecurityMonitoringSignalIncidentsUpdateAttributes + +class SecurityMonitoringSignalIncidentsUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_incidents_update_attributes import SecurityMonitoringSignalIncidentsUpdateAttributes + return { + "attributes": (SecurityMonitoringSignalIncidentsUpdateAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: SecurityMonitoringSignalIncidentsUpdateAttributes, **kwargs): + """ + Data containing the patch for changing the related incidents of a signal. + + :param attributes: Attributes describing the new list of related signals for a security signal. + :type attributes: SecurityMonitoringSignalIncidentsUpdateAttributes + """ + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/security_monitoring_signal_incidents_update_request.py b/datadog_api_client/v2/model/security_monitoring_signal_incidents_update_request.py new file mode 100644 index 0000000000..baa49f3a34 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_incidents_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_incidents_update_data import SecurityMonitoringSignalIncidentsUpdateData + +class SecurityMonitoringSignalIncidentsUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_incidents_update_data import SecurityMonitoringSignalIncidentsUpdateData + return { + "data": (SecurityMonitoringSignalIncidentsUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringSignalIncidentsUpdateData, **kwargs): + """ + Request body for changing the related incidents of a given security monitoring signal. + + :param data: Data containing the patch for changing the related incidents of a signal. + :type data: SecurityMonitoringSignalIncidentsUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_signal_investigation_query_template_variables.py b/datadog_api_client/v2/model/security_monitoring_signal_investigation_query_template_variables.py new file mode 100644 index 0000000000..dab48d03e6 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_investigation_query_template_variables.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSignalInvestigationQueryTemplateVariables(ModelNormal): + @cached_property + def additional_properties_type(_): + return ([str],) + + def __init__(self_, **kwargs): + """ + Template variables applied to the investigation log query, mapping attribute paths to values extracted from the signal. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_list_request.py b/datadog_api_client/v2/model/security_monitoring_signal_list_request.py new file mode 100644 index 0000000000..d7d3caa298 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_list_request.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_list_request_filter import SecurityMonitoringSignalListRequestFilter + from datadog_api_client.v2.model.security_monitoring_signal_list_request_page import SecurityMonitoringSignalListRequestPage + from datadog_api_client.v2.model.security_monitoring_signals_sort import SecurityMonitoringSignalsSort + +class SecurityMonitoringSignalListRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_list_request_filter import SecurityMonitoringSignalListRequestFilter + from datadog_api_client.v2.model.security_monitoring_signal_list_request_page import SecurityMonitoringSignalListRequestPage + from datadog_api_client.v2.model.security_monitoring_signals_sort import SecurityMonitoringSignalsSort + return { + "filter": (SecurityMonitoringSignalListRequestFilter,), + "page": (SecurityMonitoringSignalListRequestPage,), + "sort": (SecurityMonitoringSignalsSort,), + } + attribute_map = { + "filter": "filter", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[SecurityMonitoringSignalListRequestFilter, UnsetType]=unset, page: Union[SecurityMonitoringSignalListRequestPage, UnsetType]=unset, sort: Union[SecurityMonitoringSignalsSort, UnsetType]=unset, **kwargs): + """ + The request for a security signal list. + + :param filter: Search filters for listing security signals. + :type filter: SecurityMonitoringSignalListRequestFilter, optional + + :param page: The paging attributes for listing security signals. + :type page: SecurityMonitoringSignalListRequestPage, optional + + :param sort: The sort parameters used for querying security signals. + :type sort: SecurityMonitoringSignalsSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_list_request_filter.py b/datadog_api_client/v2/model/security_monitoring_signal_list_request_filter.py new file mode 100644 index 0000000000..dc7ad4737a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_list_request_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSignalListRequestFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (datetime,), + "query": (str,), + "to": (datetime,), + } + attribute_map = { + "_from": "from", + "query": "query", + "to": "to", + } + + def __init__(self_, _from: Union[datetime, UnsetType]=unset, query: Union[str, UnsetType]=unset, to: Union[datetime, UnsetType]=unset, **kwargs): + """ + Search filters for listing security signals. + + :param _from: The minimum timestamp for requested security signals. + :type _from: datetime, optional + + :param query: Search query for listing security signals. + :type query: str, optional + + :param to: The maximum timestamp for requested security signals. + :type to: datetime, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if query is not unset: + kwargs["query"] = query + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_list_request_page.py b/datadog_api_client/v2/model/security_monitoring_signal_list_request_page.py new file mode 100644 index 0000000000..159335322f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_list_request_page.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSignalListRequestPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + The paging attributes for listing security signals. + + :param cursor: A list of results using the cursor provided in the previous query. + :type cursor: str, optional + + :param limit: The maximum number of security signals in the response. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_metadata_type.py b/datadog_api_client/v2/model/security_monitoring_signal_metadata_type.py new file mode 100644 index 0000000000..59ce3d79ad --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_metadata_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSignalMetadataType(ModelSimple): + """ + The type of event. + + :param value: If omitted defaults to "signal_metadata". Must be one of ["signal_metadata"]. + :type value: str + """ + + allowed_values = { + "signal_metadata", + } + SIGNAL_METADATA: ClassVar["SecurityMonitoringSignalMetadataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSignalMetadataType.SIGNAL_METADATA = SecurityMonitoringSignalMetadataType("signal_metadata") diff --git a/datadog_api_client/v2/model/security_monitoring_signal_response.py b/datadog_api_client/v2/model/security_monitoring_signal_response.py new file mode 100644 index 0000000000..6ab3e5d982 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal import SecurityMonitoringSignal + +class SecurityMonitoringSignalResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal import SecurityMonitoringSignal + return { + "data": (SecurityMonitoringSignal,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SecurityMonitoringSignal, UnsetType]=unset, **kwargs): + """ + Security Signal response data object. + + :param data: Object description of a security signal. + :type data: SecurityMonitoringSignal, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_rule_create_payload.py b/datadog_api_client/v2/model/security_monitoring_signal_rule_create_payload.py new file mode 100644 index 0000000000..fe4f1cec7c --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_rule_create_payload.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_signal_rule_query import SecurityMonitoringSignalRuleQuery + from datadog_api_client.v2.model.security_monitoring_signal_rule_type import SecurityMonitoringSignalRuleType + +class SecurityMonitoringSignalRuleCreatePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_signal_rule_query import SecurityMonitoringSignalRuleQuery + from datadog_api_client.v2.model.security_monitoring_signal_rule_type import SecurityMonitoringSignalRuleType + return { + "cases": ([SecurityMonitoringRuleCaseCreate],), + "filters": ([SecurityMonitoringFilter],), + "has_extended_title": (bool,), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (SecurityMonitoringRuleOptions,), + "queries": ([SecurityMonitoringSignalRuleQuery],), + "tags": ([str],), + "type": (SecurityMonitoringSignalRuleType,), + } + attribute_map = { + "cases": "cases", + "filters": "filters", + "has_extended_title": "hasExtendedTitle", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "queries": "queries", + "tags": "tags", + "type": "type", + } + + def __init__(self_, cases: List[SecurityMonitoringRuleCaseCreate], is_enabled: bool, message: str, name: str, options: SecurityMonitoringRuleOptions, queries: List[SecurityMonitoringSignalRuleQuery], filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, has_extended_title: Union[bool, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[SecurityMonitoringSignalRuleType, UnsetType]=unset, **kwargs): + """ + Create a new signal correlation rule. + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message for generated signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options. + :type options: SecurityMonitoringRuleOptions + + :param queries: Queries for selecting signals which are part of the rule. + :type queries: [SecurityMonitoringSignalRuleQuery] + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param type: The rule type. + :type type: SecurityMonitoringSignalRuleType, optional + """ + if filters is not unset: + kwargs["filters"] = filters + if has_extended_title is not unset: + kwargs["has_extended_title"] = has_extended_title + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.cases = cases + self_.is_enabled = is_enabled + self_.message = message + self_.name = name + self_.options = options + self_.queries = queries diff --git a/datadog_api_client/v2/model/security_monitoring_signal_rule_payload.py b/datadog_api_client/v2/model/security_monitoring_signal_rule_payload.py new file mode 100644 index 0000000000..08bf38810b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_rule_payload.py @@ -0,0 +1,128 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_signal_rule_query import SecurityMonitoringSignalRuleQuery + from datadog_api_client.v2.model.security_monitoring_signal_rule_type import SecurityMonitoringSignalRuleType + +class SecurityMonitoringSignalRulePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_signal_rule_query import SecurityMonitoringSignalRuleQuery + from datadog_api_client.v2.model.security_monitoring_signal_rule_type import SecurityMonitoringSignalRuleType + return { + "cases": ([SecurityMonitoringRuleCaseCreate],), + "custom_message": (str,), + "custom_name": (str,), + "filters": ([SecurityMonitoringFilter],), + "has_extended_title": (bool,), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (SecurityMonitoringRuleOptions,), + "queries": ([SecurityMonitoringSignalRuleQuery],), + "tags": ([str],), + "type": (SecurityMonitoringSignalRuleType,), + } + attribute_map = { + "cases": "cases", + "custom_message": "customMessage", + "custom_name": "customName", + "filters": "filters", + "has_extended_title": "hasExtendedTitle", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "queries": "queries", + "tags": "tags", + "type": "type", + } + + def __init__(self_, cases: List[SecurityMonitoringRuleCaseCreate], is_enabled: bool, message: str, name: str, options: SecurityMonitoringRuleOptions, queries: List[SecurityMonitoringSignalRuleQuery], custom_message: Union[str, UnsetType]=unset, custom_name: Union[str, UnsetType]=unset, filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, has_extended_title: Union[bool, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[SecurityMonitoringSignalRuleType, UnsetType]=unset, **kwargs): + """ + The payload of a signal correlation rule. + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param custom_message: Custom/Overridden message for generated signals (used in case of Default rule update). + :type custom_message: str, optional + + :param custom_name: Custom/Overridden name of the rule (used in case of Default rule update). + :type custom_name: str, optional + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message for generated signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options. + :type options: SecurityMonitoringRuleOptions + + :param queries: Queries for selecting signals which are part of the rule. + :type queries: [SecurityMonitoringSignalRuleQuery] + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param type: The rule type. + :type type: SecurityMonitoringSignalRuleType, optional + """ + if custom_message is not unset: + kwargs["custom_message"] = custom_message + if custom_name is not unset: + kwargs["custom_name"] = custom_name + if filters is not unset: + kwargs["filters"] = filters + if has_extended_title is not unset: + kwargs["has_extended_title"] = has_extended_title + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.cases = cases + self_.is_enabled = is_enabled + self_.message = message + self_.name = name + self_.options = options + self_.queries = queries diff --git a/datadog_api_client/v2/model/security_monitoring_signal_rule_query.py b/datadog_api_client/v2/model/security_monitoring_signal_rule_query.py new file mode 100644 index 0000000000..9a90d71f36 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_rule_query.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import SecurityMonitoringRuleQueryAggregation + +class SecurityMonitoringSignalRuleQuery(ModelNormal): + validations = { + "correlated_query_index": { + "inclusive_maximum": 9, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import SecurityMonitoringRuleQueryAggregation + return { + "aggregation": (SecurityMonitoringRuleQueryAggregation,), + "correlated_by_fields": ([str],), + "correlated_query_index": (int,), + "metrics": ([str],), + "name": (str,), + "rule_id": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "correlated_by_fields": "correlatedByFields", + "correlated_query_index": "correlatedQueryIndex", + "metrics": "metrics", + "name": "name", + "rule_id": "ruleId", + } + + def __init__(self_, rule_id: str, aggregation: Union[SecurityMonitoringRuleQueryAggregation, UnsetType]=unset, correlated_by_fields: Union[List[str], UnsetType]=unset, correlated_query_index: Union[int, UnsetType]=unset, metrics: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Query for matching rule on signals. + + :param aggregation: The aggregation type. + :type aggregation: SecurityMonitoringRuleQueryAggregation, optional + + :param correlated_by_fields: Fields to group by. + :type correlated_by_fields: [str], optional + + :param correlated_query_index: Index of the rule query used to retrieve the correlated field. + :type correlated_query_index: int, optional + + :param metrics: Group of target fields to aggregate over. + :type metrics: [str], optional + + :param name: Name of the query. + :type name: str, optional + + :param rule_id: Rule ID to match on signals. + :type rule_id: str + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if correlated_by_fields is not unset: + kwargs["correlated_by_fields"] = correlated_by_fields + if correlated_query_index is not unset: + kwargs["correlated_query_index"] = correlated_query_index + if metrics is not unset: + kwargs["metrics"] = metrics + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.rule_id = rule_id diff --git a/datadog_api_client/v2/model/security_monitoring_signal_rule_response.py b/datadog_api_client/v2/model/security_monitoring_signal_rule_response.py new file mode 100644 index 0000000000..e7756e004b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_rule_response.py @@ -0,0 +1,190 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_case import SecurityMonitoringRuleCase + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_signal_rule_response_query import SecurityMonitoringSignalRuleResponseQuery + from datadog_api_client.v2.model.security_monitoring_signal_rule_type import SecurityMonitoringSignalRuleType + +class SecurityMonitoringSignalRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_case import SecurityMonitoringRuleCase + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_signal_rule_response_query import SecurityMonitoringSignalRuleResponseQuery + from datadog_api_client.v2.model.security_monitoring_signal_rule_type import SecurityMonitoringSignalRuleType + return { + "cases": ([SecurityMonitoringRuleCase],), + "created_at": (int,), + "creation_author_id": (int,), + "custom_message": (str,), + "custom_name": (str,), + "deprecation_date": (int,), + "filters": ([SecurityMonitoringFilter],), + "has_extended_title": (bool,), + "id": (str,), + "is_default": (bool,), + "is_deleted": (bool,), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (SecurityMonitoringRuleOptions,), + "queries": ([SecurityMonitoringSignalRuleResponseQuery],), + "tags": ([str],), + "type": (SecurityMonitoringSignalRuleType,), + "update_author_id": (int,), + "version": (int,), + } + attribute_map = { + "cases": "cases", + "created_at": "createdAt", + "creation_author_id": "creationAuthorId", + "custom_message": "customMessage", + "custom_name": "customName", + "deprecation_date": "deprecationDate", + "filters": "filters", + "has_extended_title": "hasExtendedTitle", + "id": "id", + "is_default": "isDefault", + "is_deleted": "isDeleted", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "queries": "queries", + "tags": "tags", + "type": "type", + "update_author_id": "updateAuthorId", + "version": "version", + } + + def __init__(self_, cases: Union[List[SecurityMonitoringRuleCase], UnsetType]=unset, created_at: Union[int, UnsetType]=unset, creation_author_id: Union[int, UnsetType]=unset, custom_message: Union[str, UnsetType]=unset, custom_name: Union[str, UnsetType]=unset, deprecation_date: Union[int, UnsetType]=unset, filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, has_extended_title: Union[bool, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_default: Union[bool, UnsetType]=unset, is_deleted: Union[bool, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, message: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, options: Union[SecurityMonitoringRuleOptions, UnsetType]=unset, queries: Union[List[SecurityMonitoringSignalRuleResponseQuery], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, type: Union[SecurityMonitoringSignalRuleType, UnsetType]=unset, update_author_id: Union[int, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Rule. + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCase], optional + + :param created_at: When the rule was created, timestamp in milliseconds. + :type created_at: int, optional + + :param creation_author_id: User ID of the user who created the rule. + :type creation_author_id: int, optional + + :param custom_message: Custom/Overridden message for generated signals (used in case of Default rule update). + :type custom_message: str, optional + + :param custom_name: Custom/Overridden name of the rule (used in case of Default rule update). + :type custom_name: str, optional + + :param deprecation_date: When the rule will be deprecated, timestamp in milliseconds. + :type deprecation_date: int, optional + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param id: The ID of the rule. + :type id: str, optional + + :param is_default: Whether the rule is included by default. + :type is_default: bool, optional + + :param is_deleted: Whether the rule has been deleted. + :type is_deleted: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool, optional + + :param message: Message for generated signals. + :type message: str, optional + + :param name: The name of the rule. + :type name: str, optional + + :param options: Options. + :type options: SecurityMonitoringRuleOptions, optional + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringSignalRuleResponseQuery], optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param type: The rule type. + :type type: SecurityMonitoringSignalRuleType, optional + + :param update_author_id: User ID of the user who updated the rule. + :type update_author_id: int, optional + + :param version: The version of the rule. + :type version: int, optional + """ + if cases is not unset: + kwargs["cases"] = cases + if created_at is not unset: + kwargs["created_at"] = created_at + if creation_author_id is not unset: + kwargs["creation_author_id"] = creation_author_id + if custom_message is not unset: + kwargs["custom_message"] = custom_message + if custom_name is not unset: + kwargs["custom_name"] = custom_name + if deprecation_date is not unset: + kwargs["deprecation_date"] = deprecation_date + if filters is not unset: + kwargs["filters"] = filters + if has_extended_title is not unset: + kwargs["has_extended_title"] = has_extended_title + if id is not unset: + kwargs["id"] = id + if is_default is not unset: + kwargs["is_default"] = is_default + if is_deleted is not unset: + kwargs["is_deleted"] = is_deleted + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if message is not unset: + kwargs["message"] = message + if name is not unset: + kwargs["name"] = name + if options is not unset: + kwargs["options"] = options + if queries is not unset: + kwargs["queries"] = queries + if tags is not unset: + kwargs["tags"] = tags + if type is not unset: + kwargs["type"] = type + if update_author_id is not unset: + kwargs["update_author_id"] = update_author_id + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_rule_response_query.py b/datadog_api_client/v2/model/security_monitoring_signal_rule_response_query.py new file mode 100644 index 0000000000..02cc5d9cd1 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_rule_response_query.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import SecurityMonitoringRuleQueryAggregation + +class SecurityMonitoringSignalRuleResponseQuery(ModelNormal): + validations = { + "correlated_query_index": { + "inclusive_maximum": 9, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import SecurityMonitoringRuleQueryAggregation + return { + "aggregation": (SecurityMonitoringRuleQueryAggregation,), + "correlated_by_fields": ([str],), + "correlated_query_index": (int,), + "default_rule_id": (str,), + "distinct_fields": ([str],), + "group_by_fields": ([str],), + "metrics": ([str],), + "name": (str,), + "rule_id": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "correlated_by_fields": "correlatedByFields", + "correlated_query_index": "correlatedQueryIndex", + "default_rule_id": "defaultRuleId", + "distinct_fields": "distinctFields", + "group_by_fields": "groupByFields", + "metrics": "metrics", + "name": "name", + "rule_id": "ruleId", + } + + def __init__(self_, aggregation: Union[SecurityMonitoringRuleQueryAggregation, UnsetType]=unset, correlated_by_fields: Union[List[str], UnsetType]=unset, correlated_query_index: Union[int, UnsetType]=unset, default_rule_id: Union[str, UnsetType]=unset, distinct_fields: Union[List[str], UnsetType]=unset, group_by_fields: Union[List[str], UnsetType]=unset, metrics: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, rule_id: Union[str, UnsetType]=unset, **kwargs): + """ + Query for matching rule on signals. + + :param aggregation: The aggregation type. + :type aggregation: SecurityMonitoringRuleQueryAggregation, optional + + :param correlated_by_fields: Fields to correlate by. + :type correlated_by_fields: [str], optional + + :param correlated_query_index: Index of the rule query used to retrieve the correlated field. + :type correlated_query_index: int, optional + + :param default_rule_id: Default Rule ID to match on signals. + :type default_rule_id: str, optional + + :param distinct_fields: Field for which the cardinality is measured. Sent as an array. + :type distinct_fields: [str], optional + + :param group_by_fields: Fields to group by. + :type group_by_fields: [str], optional + + :param metrics: Group of target fields to aggregate over. + :type metrics: [str], optional + + :param name: Name of the query. + :type name: str, optional + + :param rule_id: Rule ID to match on signals. + :type rule_id: str, optional + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if correlated_by_fields is not unset: + kwargs["correlated_by_fields"] = correlated_by_fields + if correlated_query_index is not unset: + kwargs["correlated_query_index"] = correlated_query_index + if default_rule_id is not unset: + kwargs["default_rule_id"] = default_rule_id + if distinct_fields is not unset: + kwargs["distinct_fields"] = distinct_fields + if group_by_fields is not unset: + kwargs["group_by_fields"] = group_by_fields + if metrics is not unset: + kwargs["metrics"] = metrics + if name is not unset: + kwargs["name"] = name + if rule_id is not unset: + kwargs["rule_id"] = rule_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_rule_type.py b/datadog_api_client/v2/model/security_monitoring_signal_rule_type.py new file mode 100644 index 0000000000..e539becac3 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSignalRuleType(ModelSimple): + """ + The rule type. + + :param value: If omitted defaults to "signal_correlation". Must be one of ["signal_correlation"]. + :type value: str + """ + + allowed_values = { + "signal_correlation", + } + SIGNAL_CORRELATION: ClassVar["SecurityMonitoringSignalRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSignalRuleType.SIGNAL_CORRELATION = SecurityMonitoringSignalRuleType("signal_correlation") diff --git a/datadog_api_client/v2/model/security_monitoring_signal_state.py b/datadog_api_client/v2/model/security_monitoring_signal_state.py new file mode 100644 index 0000000000..4813a200e3 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSignalState(ModelSimple): + """ + The new triage state of the signal. + + :param value: Must be one of ["open", "archived", "under_review"]. + :type value: str + """ + + allowed_values = { + "open", + "archived", + "under_review", + } + OPEN: ClassVar["SecurityMonitoringSignalState"] + ARCHIVED: ClassVar["SecurityMonitoringSignalState"] + UNDER_REVIEW: ClassVar["SecurityMonitoringSignalState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSignalState.OPEN = SecurityMonitoringSignalState("open") +SecurityMonitoringSignalState.ARCHIVED = SecurityMonitoringSignalState("archived") +SecurityMonitoringSignalState.UNDER_REVIEW = SecurityMonitoringSignalState("under_review") diff --git a/datadog_api_client/v2/model/security_monitoring_signal_state_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_signal_state_update_attributes.py new file mode 100644 index 0000000000..d61b2303ac --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_state_update_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_archive_reason import SecurityMonitoringSignalArchiveReason + from datadog_api_client.v2.model.security_monitoring_signal_state import SecurityMonitoringSignalState + +class SecurityMonitoringSignalStateUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_archive_reason import SecurityMonitoringSignalArchiveReason + from datadog_api_client.v2.model.security_monitoring_signal_state import SecurityMonitoringSignalState + return { + "archive_comment": (str,), + "archive_reason": (SecurityMonitoringSignalArchiveReason,), + "state": (SecurityMonitoringSignalState,), + "version": (int,), + } + attribute_map = { + "archive_comment": "archive_comment", + "archive_reason": "archive_reason", + "state": "state", + "version": "version", + } + + def __init__(self_, state: SecurityMonitoringSignalState, archive_comment: Union[str, UnsetType]=unset, archive_reason: Union[SecurityMonitoringSignalArchiveReason, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes describing the change of state of a security signal. + + :param archive_comment: Optional comment to display on archived signals. + :type archive_comment: str, optional + + :param archive_reason: Reason a signal is archived. + :type archive_reason: SecurityMonitoringSignalArchiveReason, optional + + :param state: The new triage state of the signal. + :type state: SecurityMonitoringSignalState + + :param version: Version of the updated signal. If server side version is higher, update will be rejected. + :type version: int, optional + """ + if archive_comment is not unset: + kwargs["archive_comment"] = archive_comment + if archive_reason is not unset: + kwargs["archive_reason"] = archive_reason + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.state = state diff --git a/datadog_api_client/v2/model/security_monitoring_signal_state_update_data.py b/datadog_api_client/v2/model/security_monitoring_signal_state_update_data.py new file mode 100644 index 0000000000..ce9046c92c --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_state_update_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_state_update_attributes import SecurityMonitoringSignalStateUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_metadata_type import SecurityMonitoringSignalMetadataType + +class SecurityMonitoringSignalStateUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_state_update_attributes import SecurityMonitoringSignalStateUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_metadata_type import SecurityMonitoringSignalMetadataType + return { + "attributes": (SecurityMonitoringSignalStateUpdateAttributes,), + "id": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "type": (SecurityMonitoringSignalMetadataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringSignalStateUpdateAttributes, id: Union[Any, UnsetType]=unset, type: Union[SecurityMonitoringSignalMetadataType, UnsetType]=unset, **kwargs): + """ + Data containing the patch for changing the state of a signal. + + :param attributes: Attributes describing the change of state of a security signal. + :type attributes: SecurityMonitoringSignalStateUpdateAttributes + + :param id: The unique ID of the security signal. + :type id: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param type: The type of event. + :type type: SecurityMonitoringSignalMetadataType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/security_monitoring_signal_state_update_request.py b/datadog_api_client/v2/model/security_monitoring_signal_state_update_request.py new file mode 100644 index 0000000000..529b170318 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_state_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_state_update_data import SecurityMonitoringSignalStateUpdateData + +class SecurityMonitoringSignalStateUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_state_update_data import SecurityMonitoringSignalStateUpdateData + return { + "data": (SecurityMonitoringSignalStateUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringSignalStateUpdateData, **kwargs): + """ + Request body for changing the state of a given security monitoring signal. + + :param data: Data containing the patch for changing the state of a signal. + :type data: SecurityMonitoringSignalStateUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_signal_suggested_action.py b/datadog_api_client/v2/model/security_monitoring_signal_suggested_action.py new file mode 100644 index 0000000000..da622104b2 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_suggested_action.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_suggested_action_attributes import SecurityMonitoringSignalSuggestedActionAttributes + from datadog_api_client.v2.model.security_monitoring_signal_suggested_action_type import SecurityMonitoringSignalSuggestedActionType + +class SecurityMonitoringSignalSuggestedAction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_suggested_action_attributes import SecurityMonitoringSignalSuggestedActionAttributes + from datadog_api_client.v2.model.security_monitoring_signal_suggested_action_type import SecurityMonitoringSignalSuggestedActionType + return { + "attributes": (SecurityMonitoringSignalSuggestedActionAttributes,), + "id": (str,), + "type": (SecurityMonitoringSignalSuggestedActionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringSignalSuggestedActionAttributes, id: str, type: SecurityMonitoringSignalSuggestedActionType, **kwargs): + """ + A suggested action for a security signal. + + :param attributes: Attributes of a suggested action for a security signal. The available fields depend on the action type. + :type attributes: SecurityMonitoringSignalSuggestedActionAttributes + + :param id: The unique ID of the suggested action. + :type id: str + + :param type: The type of the suggested action resource. + :type type: SecurityMonitoringSignalSuggestedActionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_signal_suggested_action_attributes.py b/datadog_api_client/v2/model/security_monitoring_signal_suggested_action_attributes.py new file mode 100644 index 0000000000..60fd46824e --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_suggested_action_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_investigation_query_template_variables import SecurityMonitoringSignalInvestigationQueryTemplateVariables + +class SecurityMonitoringSignalSuggestedActionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_investigation_query_template_variables import SecurityMonitoringSignalInvestigationQueryTemplateVariables + return { + "name": (str,), + "query_filter": (str,), + "template_variables": (SecurityMonitoringSignalInvestigationQueryTemplateVariables,), + "title": (str,), + "url": (str,), + } + attribute_map = { + "name": "name", + "query_filter": "query_filter", + "template_variables": "template_variables", + "title": "title", + "url": "url", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, query_filter: Union[str, UnsetType]=unset, template_variables: Union[SecurityMonitoringSignalInvestigationQueryTemplateVariables, UnsetType]=unset, title: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a suggested action for a security signal. The available fields depend on the action type. + + :param name: The name of the investigation log query. + :type name: str, optional + + :param query_filter: The log query filter for the investigation. + :type query_filter: str, optional + + :param template_variables: Template variables applied to the investigation log query, mapping attribute paths to values extracted from the signal. + :type template_variables: SecurityMonitoringSignalInvestigationQueryTemplateVariables, optional + + :param title: The title of the recommended blog post. + :type title: str, optional + + :param url: The URL of the suggested action. + :type url: str, optional + """ + if name is not unset: + kwargs["name"] = name + if query_filter is not unset: + kwargs["query_filter"] = query_filter + if template_variables is not unset: + kwargs["template_variables"] = template_variables + if title is not unset: + kwargs["title"] = title + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_suggested_action_type.py b/datadog_api_client/v2/model/security_monitoring_signal_suggested_action_type.py new file mode 100644 index 0000000000..811aa607d1 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_suggested_action_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSignalSuggestedActionType(ModelSimple): + """ + The type of the suggested action resource. + + :param value: Must be one of ["investigation_log_queries", "recommended_blog_posts"]. + :type value: str + """ + + allowed_values = { + "investigation_log_queries", + "recommended_blog_posts", + } + INVESTIGATION_LOG_QUERIES: ClassVar["SecurityMonitoringSignalSuggestedActionType"] + RECOMMENDED_BLOG_POSTS: ClassVar["SecurityMonitoringSignalSuggestedActionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSignalSuggestedActionType.INVESTIGATION_LOG_QUERIES = SecurityMonitoringSignalSuggestedActionType("investigation_log_queries") +SecurityMonitoringSignalSuggestedActionType.RECOMMENDED_BLOG_POSTS = SecurityMonitoringSignalSuggestedActionType("recommended_blog_posts") diff --git a/datadog_api_client/v2/model/security_monitoring_signal_suggested_actions_response.py b/datadog_api_client/v2/model/security_monitoring_signal_suggested_actions_response.py new file mode 100644 index 0000000000..2b5d43a3fc --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_suggested_actions_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_suggested_action import SecurityMonitoringSignalSuggestedAction + +class SecurityMonitoringSignalSuggestedActionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_suggested_action import SecurityMonitoringSignalSuggestedAction + return { + "data": ([SecurityMonitoringSignalSuggestedAction],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SecurityMonitoringSignalSuggestedAction], **kwargs): + """ + Response with suggested actions for a security signal. + + :param data: List of suggested actions for a security signal. + :type data: [SecurityMonitoringSignalSuggestedAction] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_signal_triage_attributes.py b/datadog_api_client/v2/model/security_monitoring_signal_triage_attributes.py new file mode 100644 index 0000000000..638acb0114 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_triage_attributes.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_triage_user import SecurityMonitoringTriageUser + from datadog_api_client.v2.model.security_monitoring_signal_archive_reason import SecurityMonitoringSignalArchiveReason + from datadog_api_client.v2.model.security_monitoring_signal_incident_ids import SecurityMonitoringSignalIncidentIds + from datadog_api_client.v2.model.security_monitoring_signal_state import SecurityMonitoringSignalState + +class SecurityMonitoringSignalTriageAttributes(ModelNormal): + validations = { + "archive_comment_timestamp": { + "inclusive_minimum": 0, + }, + "state_update_timestamp": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_triage_user import SecurityMonitoringTriageUser + from datadog_api_client.v2.model.security_monitoring_signal_archive_reason import SecurityMonitoringSignalArchiveReason + from datadog_api_client.v2.model.security_monitoring_signal_incident_ids import SecurityMonitoringSignalIncidentIds + from datadog_api_client.v2.model.security_monitoring_signal_state import SecurityMonitoringSignalState + return { + "archive_comment": (str,), + "archive_comment_timestamp": (int,), + "archive_comment_user": (SecurityMonitoringTriageUser,), + "archive_reason": (SecurityMonitoringSignalArchiveReason,), + "assignee": (SecurityMonitoringTriageUser,), + "incident_ids": (SecurityMonitoringSignalIncidentIds,), + "state": (SecurityMonitoringSignalState,), + "state_update_timestamp": (int,), + "state_update_user": (SecurityMonitoringTriageUser,), + } + attribute_map = { + "archive_comment": "archive_comment", + "archive_comment_timestamp": "archive_comment_timestamp", + "archive_comment_user": "archive_comment_user", + "archive_reason": "archive_reason", + "assignee": "assignee", + "incident_ids": "incident_ids", + "state": "state", + "state_update_timestamp": "state_update_timestamp", + "state_update_user": "state_update_user", + } + + def __init__(self_, assignee: SecurityMonitoringTriageUser, incident_ids: SecurityMonitoringSignalIncidentIds, state: SecurityMonitoringSignalState, archive_comment: Union[str, UnsetType]=unset, archive_comment_timestamp: Union[int, UnsetType]=unset, archive_comment_user: Union[SecurityMonitoringTriageUser, UnsetType]=unset, archive_reason: Union[SecurityMonitoringSignalArchiveReason, UnsetType]=unset, state_update_timestamp: Union[int, UnsetType]=unset, state_update_user: Union[SecurityMonitoringTriageUser, UnsetType]=unset, **kwargs): + """ + Attributes describing a triage state update operation over a security signal. + + :param archive_comment: Optional comment to display on archived signals. + :type archive_comment: str, optional + + :param archive_comment_timestamp: Timestamp of the last edit to the comment. + :type archive_comment_timestamp: int, optional + + :param archive_comment_user: Object representing a given user entity. + :type archive_comment_user: SecurityMonitoringTriageUser, optional + + :param archive_reason: Reason a signal is archived. + :type archive_reason: SecurityMonitoringSignalArchiveReason, optional + + :param assignee: Object representing a given user entity. + :type assignee: SecurityMonitoringTriageUser + + :param incident_ids: Array of incidents that are associated with this signal. + :type incident_ids: SecurityMonitoringSignalIncidentIds + + :param state: The new triage state of the signal. + :type state: SecurityMonitoringSignalState + + :param state_update_timestamp: Timestamp of the last update to the signal state. + :type state_update_timestamp: int, optional + + :param state_update_user: Object representing a given user entity. + :type state_update_user: SecurityMonitoringTriageUser, optional + """ + if archive_comment is not unset: + kwargs["archive_comment"] = archive_comment + if archive_comment_timestamp is not unset: + kwargs["archive_comment_timestamp"] = archive_comment_timestamp + if archive_comment_user is not unset: + kwargs["archive_comment_user"] = archive_comment_user + if archive_reason is not unset: + kwargs["archive_reason"] = archive_reason + if state_update_timestamp is not unset: + kwargs["state_update_timestamp"] = state_update_timestamp + if state_update_user is not unset: + kwargs["state_update_user"] = state_update_user + super().__init__(kwargs) + + + self_.assignee = assignee + self_.incident_ids = incident_ids + self_.state = state diff --git a/datadog_api_client/v2/model/security_monitoring_signal_triage_update_data.py b/datadog_api_client/v2/model/security_monitoring_signal_triage_update_data.py new file mode 100644 index 0000000000..12d1bdd736 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_triage_update_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_triage_attributes import SecurityMonitoringSignalTriageAttributes + from datadog_api_client.v2.model.security_monitoring_signal_metadata_type import SecurityMonitoringSignalMetadataType + +class SecurityMonitoringSignalTriageUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_triage_attributes import SecurityMonitoringSignalTriageAttributes + from datadog_api_client.v2.model.security_monitoring_signal_metadata_type import SecurityMonitoringSignalMetadataType + return { + "attributes": (SecurityMonitoringSignalTriageAttributes,), + "id": (str,), + "type": (SecurityMonitoringSignalMetadataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityMonitoringSignalTriageAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SecurityMonitoringSignalMetadataType, UnsetType]=unset, **kwargs): + """ + Data containing the updated triage attributes of the signal. + + :param attributes: Attributes describing a triage state update operation over a security signal. + :type attributes: SecurityMonitoringSignalTriageAttributes, optional + + :param id: The unique ID of the security signal. + :type id: str, optional + + :param type: The type of event. + :type type: SecurityMonitoringSignalMetadataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_triage_update_response.py b/datadog_api_client/v2/model/security_monitoring_signal_triage_update_response.py new file mode 100644 index 0000000000..ba6cb94745 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_triage_update_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_triage_update_data import SecurityMonitoringSignalTriageUpdateData + +class SecurityMonitoringSignalTriageUpdateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_triage_update_data import SecurityMonitoringSignalTriageUpdateData + return { + "data": (SecurityMonitoringSignalTriageUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringSignalTriageUpdateData, **kwargs): + """ + The response returned after all triage operations, containing the updated signal triage data. + + :param data: Data containing the updated triage attributes of the signal. + :type data: SecurityMonitoringSignalTriageUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_signal_type.py b/datadog_api_client/v2/model/security_monitoring_signal_type.py new file mode 100644 index 0000000000..48a9c90d17 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSignalType(ModelSimple): + """ + The type of event. + + :param value: If omitted defaults to "signal". Must be one of ["signal"]. + :type value: str + """ + + allowed_values = { + "signal", + } + SIGNAL: ClassVar["SecurityMonitoringSignalType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSignalType.SIGNAL = SecurityMonitoringSignalType("signal") diff --git a/datadog_api_client/v2/model/security_monitoring_signal_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_signal_update_attributes.py new file mode 100644 index 0000000000..6147c28861 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_archive_reason import SecurityMonitoringSignalArchiveReason + from datadog_api_client.v2.model.security_monitoring_triage_user import SecurityMonitoringTriageUser + from datadog_api_client.v2.model.security_monitoring_signal_state import SecurityMonitoringSignalState + +class SecurityMonitoringSignalUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_archive_reason import SecurityMonitoringSignalArchiveReason + from datadog_api_client.v2.model.security_monitoring_triage_user import SecurityMonitoringTriageUser + from datadog_api_client.v2.model.security_monitoring_signal_state import SecurityMonitoringSignalState + return { + "archive_comment": (str,), + "archive_reason": (SecurityMonitoringSignalArchiveReason,), + "assignee": (SecurityMonitoringTriageUser,), + "state": (SecurityMonitoringSignalState,), + "version": (int,), + } + attribute_map = { + "archive_comment": "archive_comment", + "archive_reason": "archive_reason", + "assignee": "assignee", + "state": "state", + "version": "version", + } + + def __init__(self_, archive_comment: Union[str, UnsetType]=unset, archive_reason: Union[SecurityMonitoringSignalArchiveReason, UnsetType]=unset, assignee: Union[SecurityMonitoringTriageUser, UnsetType]=unset, state: Union[SecurityMonitoringSignalState, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for updating the triage state or assignee of a security signal. + + :param archive_comment: Optional comment to display on archived signals. + :type archive_comment: str, optional + + :param archive_reason: Reason a signal is archived. + :type archive_reason: SecurityMonitoringSignalArchiveReason, optional + + :param assignee: Object representing a given user entity. + :type assignee: SecurityMonitoringTriageUser, optional + + :param state: The new triage state of the signal. + :type state: SecurityMonitoringSignalState, optional + + :param version: Version of the updated signal. If server side version is higher, update will be rejected. + :type version: int, optional + """ + if archive_comment is not unset: + kwargs["archive_comment"] = archive_comment + if archive_reason is not unset: + kwargs["archive_reason"] = archive_reason + if assignee is not unset: + kwargs["assignee"] = assignee + if state is not unset: + kwargs["state"] = state + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signal_update_data.py b/datadog_api_client/v2/model/security_monitoring_signal_update_data.py new file mode 100644 index 0000000000..82f3fdb028 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_update_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_update_attributes import SecurityMonitoringSignalUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_metadata_type import SecurityMonitoringSignalMetadataType + +class SecurityMonitoringSignalUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_update_attributes import SecurityMonitoringSignalUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_metadata_type import SecurityMonitoringSignalMetadataType + return { + "attributes": (SecurityMonitoringSignalUpdateAttributes,), + "type": (SecurityMonitoringSignalMetadataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringSignalUpdateAttributes, type: Union[SecurityMonitoringSignalMetadataType, UnsetType]=unset, **kwargs): + """ + Data containing the triage state or assignee update for a security signal. + + :param attributes: Attributes for updating the triage state or assignee of a security signal. + :type attributes: SecurityMonitoringSignalUpdateAttributes + + :param type: The type of event. + :type type: SecurityMonitoringSignalMetadataType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/security_monitoring_signal_update_request.py b/datadog_api_client/v2/model/security_monitoring_signal_update_request.py new file mode 100644 index 0000000000..b2fab4256d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signal_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_update_data import SecurityMonitoringSignalUpdateData + +class SecurityMonitoringSignalUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_update_data import SecurityMonitoringSignalUpdateData + return { + "data": (SecurityMonitoringSignalUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringSignalUpdateData, **kwargs): + """ + Request body for updating the triage state or assignee of a security signal. + + :param data: Data containing the triage state or assignee update for a security signal. + :type data: SecurityMonitoringSignalUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_assignee_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_assignee_update_attributes.py new file mode 100644 index 0000000000..970b9c9064 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_assignee_update_attributes.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSignalsBulkAssigneeUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignee": (str,), + "version": (int,), + } + attribute_map = { + "assignee": "assignee", + "version": "version", + } + + def __init__(self_, assignee: str, version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes describing the new assignees for a bulk signal update. + + :param assignee: UUID of the user to assign to the signal. Use an empty string to unassign. + :type assignee: str + + :param version: Version of the updated signal. If server side version is higher, update will be rejected. + :type version: int, optional + """ + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.assignee = assignee diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_assignee_update_data.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_assignee_update_data.py new file mode 100644 index 0000000000..cccbcb1e39 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_assignee_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signals_bulk_assignee_update_attributes import SecurityMonitoringSignalsBulkAssigneeUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_type import SecurityMonitoringSignalType + +class SecurityMonitoringSignalsBulkAssigneeUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signals_bulk_assignee_update_attributes import SecurityMonitoringSignalsBulkAssigneeUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_type import SecurityMonitoringSignalType + return { + "attributes": (SecurityMonitoringSignalsBulkAssigneeUpdateAttributes,), + "id": (str,), + "type": (SecurityMonitoringSignalType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringSignalsBulkAssigneeUpdateAttributes, id: str, type: Union[SecurityMonitoringSignalType, UnsetType]=unset, **kwargs): + """ + Data for updating the assignees for multiple security signals. + + :param attributes: Attributes describing the new assignees for a bulk signal update. + :type attributes: SecurityMonitoringSignalsBulkAssigneeUpdateAttributes + + :param id: The unique ID of the security signal. + :type id: str + + :param type: The type of event. + :type type: SecurityMonitoringSignalType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_assignee_update_request.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_assignee_update_request.py new file mode 100644 index 0000000000..ea60fa082a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_assignee_update_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signals_bulk_assignee_update_data import SecurityMonitoringSignalsBulkAssigneeUpdateData + +class SecurityMonitoringSignalsBulkAssigneeUpdateRequest(ModelNormal): + validations = { + "data": { + "max_items": 199, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signals_bulk_assignee_update_data import SecurityMonitoringSignalsBulkAssigneeUpdateData + return { + "data": ([SecurityMonitoringSignalsBulkAssigneeUpdateData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SecurityMonitoringSignalsBulkAssigneeUpdateData], **kwargs): + """ + Request body for updating the assignee of multiple security signals. + + :param data: An array of signal assignee updates. + :type data: [SecurityMonitoringSignalsBulkAssigneeUpdateData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_state_update_data.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_state_update_data.py new file mode 100644 index 0000000000..ccde4b5403 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_state_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_state_update_attributes import SecurityMonitoringSignalStateUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_type import SecurityMonitoringSignalType + +class SecurityMonitoringSignalsBulkStateUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_state_update_attributes import SecurityMonitoringSignalStateUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_type import SecurityMonitoringSignalType + return { + "attributes": (SecurityMonitoringSignalStateUpdateAttributes,), + "id": (str,), + "type": (SecurityMonitoringSignalType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringSignalStateUpdateAttributes, id: str, type: Union[SecurityMonitoringSignalType, UnsetType]=unset, **kwargs): + """ + Data for updating the state for multiple security signals. + + :param attributes: Attributes describing the change of state of a security signal. + :type attributes: SecurityMonitoringSignalStateUpdateAttributes + + :param id: The unique ID of the security signal. + :type id: str + + :param type: The type of event. + :type type: SecurityMonitoringSignalType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_state_update_request.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_state_update_request.py new file mode 100644 index 0000000000..79b620d85f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_state_update_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signals_bulk_state_update_data import SecurityMonitoringSignalsBulkStateUpdateData + +class SecurityMonitoringSignalsBulkStateUpdateRequest(ModelNormal): + validations = { + "data": { + "max_items": 199, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signals_bulk_state_update_data import SecurityMonitoringSignalsBulkStateUpdateData + return { + "data": ([SecurityMonitoringSignalsBulkStateUpdateData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SecurityMonitoringSignalsBulkStateUpdateData], **kwargs): + """ + Request body for updating the triage states of multiple security signals. + + :param data: An array of signal state updates. + :type data: [SecurityMonitoringSignalsBulkStateUpdateData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_event.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_event.py new file mode 100644 index 0000000000..25955672f6 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_event.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_event_attributes import SecurityMonitoringSignalsBulkTriageEventAttributes + +class SecurityMonitoringSignalsBulkTriageEvent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_event_attributes import SecurityMonitoringSignalsBulkTriageEventAttributes + return { + "event": (SecurityMonitoringSignalsBulkTriageEventAttributes,), + "id": (str,), + } + attribute_map = { + "event": "event", + "id": "id", + } + + def __init__(self_, event: SecurityMonitoringSignalsBulkTriageEventAttributes, id: str, **kwargs): + """ + A single signal event entry in a bulk triage update response. + + :param event: Triage attributes of a security signal returned in a bulk update response. + :type event: SecurityMonitoringSignalsBulkTriageEventAttributes + + :param id: The unique ID of the security signal. + :type id: str + """ + super().__init__(kwargs) + + + self_.event = event + self_.id = id diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_event_attributes.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_event_attributes.py new file mode 100644 index 0000000000..d8de580b23 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_event_attributes.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_triage_user import SecurityMonitoringTriageUser + from datadog_api_client.v2.model.security_monitoring_signal_archive_reason import SecurityMonitoringSignalArchiveReason + from datadog_api_client.v2.model.security_monitoring_signal_incident_ids import SecurityMonitoringSignalIncidentIds + from datadog_api_client.v2.model.security_monitoring_signal_state import SecurityMonitoringSignalState + +class SecurityMonitoringSignalsBulkTriageEventAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_triage_user import SecurityMonitoringTriageUser + from datadog_api_client.v2.model.security_monitoring_signal_archive_reason import SecurityMonitoringSignalArchiveReason + from datadog_api_client.v2.model.security_monitoring_signal_incident_ids import SecurityMonitoringSignalIncidentIds + from datadog_api_client.v2.model.security_monitoring_signal_state import SecurityMonitoringSignalState + return { + "archive_comment": (str,), + "archive_comment_timestamp": (int,), + "archive_comment_user": (SecurityMonitoringTriageUser,), + "archive_reason": (SecurityMonitoringSignalArchiveReason,), + "assignee": (SecurityMonitoringTriageUser,), + "id": (str,), + "incident_ids": (SecurityMonitoringSignalIncidentIds,), + "state": (SecurityMonitoringSignalState,), + "state_update_timestamp": (int,), + "state_update_user": (SecurityMonitoringTriageUser,), + } + attribute_map = { + "archive_comment": "archive_comment", + "archive_comment_timestamp": "archive_comment_timestamp", + "archive_comment_user": "archive_comment_user", + "archive_reason": "archive_reason", + "assignee": "assignee", + "id": "id", + "incident_ids": "incident_ids", + "state": "state", + "state_update_timestamp": "state_update_timestamp", + "state_update_user": "state_update_user", + } + + def __init__(self_, assignee: SecurityMonitoringTriageUser, id: str, incident_ids: SecurityMonitoringSignalIncidentIds, state: SecurityMonitoringSignalState, archive_comment: Union[str, UnsetType]=unset, archive_comment_timestamp: Union[int, UnsetType]=unset, archive_comment_user: Union[SecurityMonitoringTriageUser, UnsetType]=unset, archive_reason: Union[SecurityMonitoringSignalArchiveReason, UnsetType]=unset, state_update_timestamp: Union[int, UnsetType]=unset, state_update_user: Union[SecurityMonitoringTriageUser, UnsetType]=unset, **kwargs): + """ + Triage attributes of a security signal returned in a bulk update response. + + :param archive_comment: Optional comment to display on archived signals. + :type archive_comment: str, optional + + :param archive_comment_timestamp: Timestamp of the last edit to the archive comment. + :type archive_comment_timestamp: int, optional + + :param archive_comment_user: Object representing a given user entity. + :type archive_comment_user: SecurityMonitoringTriageUser, optional + + :param archive_reason: Reason a signal is archived. + :type archive_reason: SecurityMonitoringSignalArchiveReason, optional + + :param assignee: Object representing a given user entity. + :type assignee: SecurityMonitoringTriageUser + + :param id: The unique ID of the security signal. + :type id: str + + :param incident_ids: Array of incidents that are associated with this signal. + :type incident_ids: SecurityMonitoringSignalIncidentIds + + :param state: The new triage state of the signal. + :type state: SecurityMonitoringSignalState + + :param state_update_timestamp: Timestamp of the last state update. + :type state_update_timestamp: int, optional + + :param state_update_user: Object representing a given user entity. + :type state_update_user: SecurityMonitoringTriageUser, optional + """ + if archive_comment is not unset: + kwargs["archive_comment"] = archive_comment + if archive_comment_timestamp is not unset: + kwargs["archive_comment_timestamp"] = archive_comment_timestamp + if archive_comment_user is not unset: + kwargs["archive_comment_user"] = archive_comment_user + if archive_reason is not unset: + kwargs["archive_reason"] = archive_reason + if state_update_timestamp is not unset: + kwargs["state_update_timestamp"] = state_update_timestamp + if state_update_user is not unset: + kwargs["state_update_user"] = state_update_user + super().__init__(kwargs) + + + self_.assignee = assignee + self_.id = id + self_.incident_ids = incident_ids + self_.state = state diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_update_response.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_update_response.py new file mode 100644 index 0000000000..8af4effb0d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_update_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_update_result import SecurityMonitoringSignalsBulkTriageUpdateResult + +class SecurityMonitoringSignalsBulkTriageUpdateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_update_result import SecurityMonitoringSignalsBulkTriageUpdateResult + return { + "result": (SecurityMonitoringSignalsBulkTriageUpdateResult,), + "status": (str,), + "type": (str,), + } + attribute_map = { + "result": "result", + "status": "status", + "type": "type", + } + + def __init__(self_, result: SecurityMonitoringSignalsBulkTriageUpdateResult, status: str, type: str, **kwargs): + """ + Response for a bulk triage update of security signals. + + :param result: The result payload of a bulk signal triage update. + :type result: SecurityMonitoringSignalsBulkTriageUpdateResult + + :param status: The status of the bulk operation. + :type status: str + + :param type: The type of the response. + :type type: str + """ + super().__init__(kwargs) + + + self_.result = result + self_.status = status + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_update_result.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_update_result.py new file mode 100644 index 0000000000..f771f61c1b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_triage_update_result.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_event import SecurityMonitoringSignalsBulkTriageEvent + +class SecurityMonitoringSignalsBulkTriageUpdateResult(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_event import SecurityMonitoringSignalsBulkTriageEvent + return { + "count": (int,), + "events": ([SecurityMonitoringSignalsBulkTriageEvent],), + } + attribute_map = { + "count": "count", + "events": "events", + } + + def __init__(self_, count: int, events: List[SecurityMonitoringSignalsBulkTriageEvent], **kwargs): + """ + The result payload of a bulk signal triage update. + + :param count: The number of signals updated. + :type count: int + + :param events: The list of updated signals. + :type events: [SecurityMonitoringSignalsBulkTriageEvent] + """ + super().__init__(kwargs) + + + self_.count = count + self_.events = events diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_update_data.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_update_data.py new file mode 100644 index 0000000000..554b64bd45 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_update_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal_update_attributes import SecurityMonitoringSignalUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_type import SecurityMonitoringSignalType + +class SecurityMonitoringSignalsBulkUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal_update_attributes import SecurityMonitoringSignalUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_signal_type import SecurityMonitoringSignalType + return { + "attributes": (SecurityMonitoringSignalUpdateAttributes,), + "id": (str,), + "type": (SecurityMonitoringSignalType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringSignalUpdateAttributes, id: str, type: Union[SecurityMonitoringSignalType, UnsetType]=unset, **kwargs): + """ + Data for updating a single security signal in a bulk update operation. + + :param attributes: Attributes for updating the triage state or assignee of a security signal. + :type attributes: SecurityMonitoringSignalUpdateAttributes + + :param id: The unique ID of the security signal. + :type id: str + + :param type: The type of event. + :type type: SecurityMonitoringSignalType, optional + """ + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id diff --git a/datadog_api_client/v2/model/security_monitoring_signals_bulk_update_request.py b/datadog_api_client/v2/model/security_monitoring_signals_bulk_update_request.py new file mode 100644 index 0000000000..1d1b6dd262 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_bulk_update_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signals_bulk_update_data import SecurityMonitoringSignalsBulkUpdateData + +class SecurityMonitoringSignalsBulkUpdateRequest(ModelNormal): + validations = { + "data": { + "max_items": 199, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signals_bulk_update_data import SecurityMonitoringSignalsBulkUpdateData + return { + "data": ([SecurityMonitoringSignalsBulkUpdateData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SecurityMonitoringSignalsBulkUpdateData], **kwargs): + """ + Request body for updating multiple attributes of multiple security signals. + + :param data: An array of signal updates. + :type data: [SecurityMonitoringSignalsBulkUpdateData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_signals_list_response.py b/datadog_api_client/v2/model/security_monitoring_signals_list_response.py new file mode 100644 index 0000000000..a130f864a9 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_list_response.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signal import SecurityMonitoringSignal + from datadog_api_client.v2.model.security_monitoring_signals_list_response_links import SecurityMonitoringSignalsListResponseLinks + from datadog_api_client.v2.model.security_monitoring_signals_list_response_meta import SecurityMonitoringSignalsListResponseMeta + +class SecurityMonitoringSignalsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signal import SecurityMonitoringSignal + from datadog_api_client.v2.model.security_monitoring_signals_list_response_links import SecurityMonitoringSignalsListResponseLinks + from datadog_api_client.v2.model.security_monitoring_signals_list_response_meta import SecurityMonitoringSignalsListResponseMeta + return { + "data": ([SecurityMonitoringSignal],), + "links": (SecurityMonitoringSignalsListResponseLinks,), + "meta": (SecurityMonitoringSignalsListResponseMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[SecurityMonitoringSignal], UnsetType]=unset, links: Union[SecurityMonitoringSignalsListResponseLinks, UnsetType]=unset, meta: Union[SecurityMonitoringSignalsListResponseMeta, UnsetType]=unset, **kwargs): + """ + The response object with all security signals matching the request + and pagination information. + + :param data: An array of security signals matching the request. + :type data: [SecurityMonitoringSignal], optional + + :param links: Links attributes. + :type links: SecurityMonitoringSignalsListResponseLinks, optional + + :param meta: Meta attributes. + :type meta: SecurityMonitoringSignalsListResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signals_list_response_links.py b/datadog_api_client/v2/model/security_monitoring_signals_list_response_links.py new file mode 100644 index 0000000000..298b1059d2 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_list_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSignalsListResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param next: The link for the next set of results. **Note** : The request can also be made using the + POST endpoint. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signals_list_response_meta.py b/datadog_api_client/v2/model/security_monitoring_signals_list_response_meta.py new file mode 100644 index 0000000000..6bec8190b4 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_list_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_signals_list_response_meta_page import SecurityMonitoringSignalsListResponseMetaPage + +class SecurityMonitoringSignalsListResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_signals_list_response_meta_page import SecurityMonitoringSignalsListResponseMetaPage + return { + "page": (SecurityMonitoringSignalsListResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[SecurityMonitoringSignalsListResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Meta attributes. + + :param page: Paging attributes. + :type page: SecurityMonitoringSignalsListResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signals_list_response_meta_page.py b/datadog_api_client/v2/model/security_monitoring_signals_list_response_meta_page.py new file mode 100644 index 0000000000..a63d811c7a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_list_response_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSignalsListResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str,), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param after: The cursor used to get the next results, if any. To make the next request, use the same + parameters with the addition of the ``page[cursor]``. + :type after: str, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_signals_sort.py b/datadog_api_client/v2/model/security_monitoring_signals_sort.py new file mode 100644 index 0000000000..65350f4808 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_signals_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSignalsSort(ModelSimple): + """ + The sort parameters used for querying security signals. + + :param value: Must be one of ["timestamp", "-timestamp"]. + :type value: str + """ + + allowed_values = { + "timestamp", + "-timestamp", + } + TIMESTAMP_ASCENDING: ClassVar["SecurityMonitoringSignalsSort"] + TIMESTAMP_DESCENDING: ClassVar["SecurityMonitoringSignalsSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSignalsSort.TIMESTAMP_ASCENDING = SecurityMonitoringSignalsSort("timestamp") +SecurityMonitoringSignalsSort.TIMESTAMP_DESCENDING = SecurityMonitoringSignalsSort("-timestamp") diff --git a/datadog_api_client/v2/model/security_monitoring_sku.py b/datadog_api_client/v2/model/security_monitoring_sku.py new file mode 100644 index 0000000000..f6ee55d4ba --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_sku.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSKU(ModelSimple): + """ + The Cloud SIEM pricing model (SKU) for the organization. + + :param value: Must be one of ["per_gb_analyzed", "per_event_in_siem_index_2023", "add_on_2024", "standalone_indexed", "unknown"]. + :type value: str + """ + + allowed_values = { + "per_gb_analyzed", + "per_event_in_siem_index_2023", + "add_on_2024", + "standalone_indexed", + "unknown", + } + PER_GB_ANALYZED: ClassVar["SecurityMonitoringSKU"] + PER_EVENT_IN_SIEM_INDEX_2023: ClassVar["SecurityMonitoringSKU"] + ADD_ON_2024: ClassVar["SecurityMonitoringSKU"] + STANDALONE_INDEXED: ClassVar["SecurityMonitoringSKU"] + UNKNOWN: ClassVar["SecurityMonitoringSKU"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSKU.PER_GB_ANALYZED = SecurityMonitoringSKU("per_gb_analyzed") +SecurityMonitoringSKU.PER_EVENT_IN_SIEM_INDEX_2023 = SecurityMonitoringSKU("per_event_in_siem_index_2023") +SecurityMonitoringSKU.ADD_ON_2024 = SecurityMonitoringSKU("add_on_2024") +SecurityMonitoringSKU.STANDALONE_INDEXED = SecurityMonitoringSKU("standalone_indexed") +SecurityMonitoringSKU.UNKNOWN = SecurityMonitoringSKU("unknown") diff --git a/datadog_api_client/v2/model/security_monitoring_standard_data_source.py b/datadog_api_client/v2/model/security_monitoring_standard_data_source.py new file mode 100644 index 0000000000..7779b91ca7 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_standard_data_source.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringStandardDataSource(ModelSimple): + """ + Source of events, either logs, audit trail, security signals, or Datadog events. `app_sec_spans` is deprecated in favor of `spans`. + + :param value: If omitted defaults to "logs". Must be one of ["logs", "audit", "app_sec_spans", "spans", "security_runtime", "network", "events", "security_signals"]. + :type value: str + """ + + allowed_values = { + "logs", + "audit", + "app_sec_spans", + "spans", + "security_runtime", + "network", + "events", + "security_signals", + } + LOGS: ClassVar["SecurityMonitoringStandardDataSource"] + AUDIT: ClassVar["SecurityMonitoringStandardDataSource"] + APP_SEC_SPANS: ClassVar["SecurityMonitoringStandardDataSource"] + SPANS: ClassVar["SecurityMonitoringStandardDataSource"] + SECURITY_RUNTIME: ClassVar["SecurityMonitoringStandardDataSource"] + NETWORK: ClassVar["SecurityMonitoringStandardDataSource"] + EVENTS: ClassVar["SecurityMonitoringStandardDataSource"] + SECURITY_SIGNALS: ClassVar["SecurityMonitoringStandardDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringStandardDataSource.LOGS = SecurityMonitoringStandardDataSource("logs") +SecurityMonitoringStandardDataSource.AUDIT = SecurityMonitoringStandardDataSource("audit") +SecurityMonitoringStandardDataSource.APP_SEC_SPANS = SecurityMonitoringStandardDataSource("app_sec_spans") +SecurityMonitoringStandardDataSource.SPANS = SecurityMonitoringStandardDataSource("spans") +SecurityMonitoringStandardDataSource.SECURITY_RUNTIME = SecurityMonitoringStandardDataSource("security_runtime") +SecurityMonitoringStandardDataSource.NETWORK = SecurityMonitoringStandardDataSource("network") +SecurityMonitoringStandardDataSource.EVENTS = SecurityMonitoringStandardDataSource("events") +SecurityMonitoringStandardDataSource.SECURITY_SIGNALS = SecurityMonitoringStandardDataSource("security_signals") diff --git a/datadog_api_client/v2/model/security_monitoring_standard_rule_create_payload.py b/datadog_api_client/v2/model/security_monitoring_standard_rule_create_payload.py new file mode 100644 index 0000000000..29333530e7 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_standard_rule_create_payload.py @@ -0,0 +1,157 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case_create import SecurityMonitoringThirdPartyRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_rule_type_create import SecurityMonitoringRuleTypeCreate + +class SecurityMonitoringStandardRuleCreatePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case_create import SecurityMonitoringThirdPartyRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_rule_type_create import SecurityMonitoringRuleTypeCreate + return { + "calculated_fields": ([CalculatedField],), + "cases": ([SecurityMonitoringRuleCaseCreate],), + "filters": ([SecurityMonitoringFilter],), + "group_signals_by": ([str],), + "has_extended_title": (bool,), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (SecurityMonitoringRuleOptions,), + "queries": ([SecurityMonitoringStandardRuleQuery],), + "reference_tables": ([SecurityMonitoringReferenceTable],), + "scheduling_options": (SecurityMonitoringSchedulingOptions,), + "tags": ([str],), + "third_party_cases": ([SecurityMonitoringThirdPartyRuleCaseCreate],), + "type": (SecurityMonitoringRuleTypeCreate,), + } + attribute_map = { + "calculated_fields": "calculatedFields", + "cases": "cases", + "filters": "filters", + "group_signals_by": "groupSignalsBy", + "has_extended_title": "hasExtendedTitle", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "queries": "queries", + "reference_tables": "referenceTables", + "scheduling_options": "schedulingOptions", + "tags": "tags", + "third_party_cases": "thirdPartyCases", + "type": "type", + } + + def __init__(self_, cases: List[SecurityMonitoringRuleCaseCreate], is_enabled: bool, message: str, name: str, options: SecurityMonitoringRuleOptions, queries: List[SecurityMonitoringStandardRuleQuery], calculated_fields: Union[List[CalculatedField], UnsetType]=unset, filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, group_signals_by: Union[List[str], UnsetType]=unset, has_extended_title: Union[bool, UnsetType]=unset, reference_tables: Union[List[SecurityMonitoringReferenceTable], UnsetType]=unset, scheduling_options: Union[SecurityMonitoringSchedulingOptions, none_type, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, third_party_cases: Union[List[SecurityMonitoringThirdPartyRuleCaseCreate], UnsetType]=unset, type: Union[SecurityMonitoringRuleTypeCreate, UnsetType]=unset, **kwargs): + """ + Create a new rule. + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message for generated signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options. + :type options: SecurityMonitoringRuleOptions + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringStandardRuleQuery] + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCaseCreate], optional + + :param type: The rule type. + :type type: SecurityMonitoringRuleTypeCreate, optional + """ + if calculated_fields is not unset: + kwargs["calculated_fields"] = calculated_fields + if filters is not unset: + kwargs["filters"] = filters + if group_signals_by is not unset: + kwargs["group_signals_by"] = group_signals_by + if has_extended_title is not unset: + kwargs["has_extended_title"] = has_extended_title + if reference_tables is not unset: + kwargs["reference_tables"] = reference_tables + if scheduling_options is not unset: + kwargs["scheduling_options"] = scheduling_options + if tags is not unset: + kwargs["tags"] = tags + if third_party_cases is not unset: + kwargs["third_party_cases"] = third_party_cases + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.cases = cases + self_.is_enabled = is_enabled + self_.message = message + self_.name = name + self_.options = options + self_.queries = queries diff --git a/datadog_api_client/v2/model/security_monitoring_standard_rule_payload.py b/datadog_api_client/v2/model/security_monitoring_standard_rule_payload.py new file mode 100644 index 0000000000..7d966301de --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_standard_rule_payload.py @@ -0,0 +1,171 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case_create import SecurityMonitoringThirdPartyRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_rule_type_create import SecurityMonitoringRuleTypeCreate + +class SecurityMonitoringStandardRulePayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case_create import SecurityMonitoringThirdPartyRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_rule_type_create import SecurityMonitoringRuleTypeCreate + return { + "calculated_fields": ([CalculatedField],), + "cases": ([SecurityMonitoringRuleCaseCreate],), + "custom_message": (str,), + "custom_name": (str,), + "filters": ([SecurityMonitoringFilter],), + "group_signals_by": ([str],), + "has_extended_title": (bool,), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (SecurityMonitoringRuleOptions,), + "queries": ([SecurityMonitoringStandardRuleQuery],), + "reference_tables": ([SecurityMonitoringReferenceTable],), + "scheduling_options": (SecurityMonitoringSchedulingOptions,), + "tags": ([str],), + "third_party_cases": ([SecurityMonitoringThirdPartyRuleCaseCreate],), + "type": (SecurityMonitoringRuleTypeCreate,), + } + attribute_map = { + "calculated_fields": "calculatedFields", + "cases": "cases", + "custom_message": "customMessage", + "custom_name": "customName", + "filters": "filters", + "group_signals_by": "groupSignalsBy", + "has_extended_title": "hasExtendedTitle", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "queries": "queries", + "reference_tables": "referenceTables", + "scheduling_options": "schedulingOptions", + "tags": "tags", + "third_party_cases": "thirdPartyCases", + "type": "type", + } + + def __init__(self_, cases: List[SecurityMonitoringRuleCaseCreate], is_enabled: bool, message: str, name: str, options: SecurityMonitoringRuleOptions, queries: List[SecurityMonitoringStandardRuleQuery], calculated_fields: Union[List[CalculatedField], UnsetType]=unset, custom_message: Union[str, UnsetType]=unset, custom_name: Union[str, UnsetType]=unset, filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, group_signals_by: Union[List[str], UnsetType]=unset, has_extended_title: Union[bool, UnsetType]=unset, reference_tables: Union[List[SecurityMonitoringReferenceTable], UnsetType]=unset, scheduling_options: Union[SecurityMonitoringSchedulingOptions, none_type, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, third_party_cases: Union[List[SecurityMonitoringThirdPartyRuleCaseCreate], UnsetType]=unset, type: Union[SecurityMonitoringRuleTypeCreate, UnsetType]=unset, **kwargs): + """ + The payload of a rule. + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param custom_message: Custom/Overridden message for generated signals (used in case of Default rule update). + :type custom_message: str, optional + + :param custom_name: Custom/Overridden name of the rule (used in case of Default rule update). + :type custom_name: str, optional + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message for generated signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options. + :type options: SecurityMonitoringRuleOptions + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringStandardRuleQuery] + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCaseCreate], optional + + :param type: The rule type. + :type type: SecurityMonitoringRuleTypeCreate, optional + """ + if calculated_fields is not unset: + kwargs["calculated_fields"] = calculated_fields + if custom_message is not unset: + kwargs["custom_message"] = custom_message + if custom_name is not unset: + kwargs["custom_name"] = custom_name + if filters is not unset: + kwargs["filters"] = filters + if group_signals_by is not unset: + kwargs["group_signals_by"] = group_signals_by + if has_extended_title is not unset: + kwargs["has_extended_title"] = has_extended_title + if reference_tables is not unset: + kwargs["reference_tables"] = reference_tables + if scheduling_options is not unset: + kwargs["scheduling_options"] = scheduling_options + if tags is not unset: + kwargs["tags"] = tags + if third_party_cases is not unset: + kwargs["third_party_cases"] = third_party_cases + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.cases = cases + self_.is_enabled = is_enabled + self_.message = message + self_.name = name + self_.options = options + self_.queries = queries diff --git a/datadog_api_client/v2/model/security_monitoring_standard_rule_query.py b/datadog_api_client/v2/model/security_monitoring_standard_rule_query.py new file mode 100644 index 0000000000..ec3b289258 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_standard_rule_query.py @@ -0,0 +1,130 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import SecurityMonitoringRuleQueryAggregation + from datadog_api_client.v2.model.security_monitoring_standard_data_source import SecurityMonitoringStandardDataSource + +class SecurityMonitoringStandardRuleQuery(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import SecurityMonitoringRuleQueryAggregation + from datadog_api_client.v2.model.security_monitoring_standard_data_source import SecurityMonitoringStandardDataSource + return { + "aggregation": (SecurityMonitoringRuleQueryAggregation,), + "custom_query_extension": (str,), + "data_source": (SecurityMonitoringStandardDataSource,), + "distinct_fields": ([str],), + "group_by_fields": ([str],), + "has_optional_group_by_fields": (bool,), + "index": (str,), + "indexes": ([str],), + "metric": (str,), + "metrics": ([str],), + "name": (str,), + "query": (str,), + } + attribute_map = { + "aggregation": "aggregation", + "custom_query_extension": "customQueryExtension", + "data_source": "dataSource", + "distinct_fields": "distinctFields", + "group_by_fields": "groupByFields", + "has_optional_group_by_fields": "hasOptionalGroupByFields", + "index": "index", + "indexes": "indexes", + "metric": "metric", + "metrics": "metrics", + "name": "name", + "query": "query", + } + + def __init__(self_, aggregation: Union[SecurityMonitoringRuleQueryAggregation, UnsetType]=unset, custom_query_extension: Union[str, UnsetType]=unset, data_source: Union[SecurityMonitoringStandardDataSource, UnsetType]=unset, distinct_fields: Union[List[str], UnsetType]=unset, group_by_fields: Union[List[str], UnsetType]=unset, has_optional_group_by_fields: Union[bool, UnsetType]=unset, index: Union[str, UnsetType]=unset, indexes: Union[List[str], UnsetType]=unset, metric: Union[str, UnsetType]=unset, metrics: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Query for matching rule. + + :param aggregation: The aggregation type. + :type aggregation: SecurityMonitoringRuleQueryAggregation, optional + + :param custom_query_extension: Query extension to append to the logs query. + :type custom_query_extension: str, optional + + :param data_source: Source of events, either logs, audit trail, security signals, or Datadog events. ``app_sec_spans`` is deprecated in favor of ``spans``. + :type data_source: SecurityMonitoringStandardDataSource, optional + + :param distinct_fields: Field for which the cardinality is measured. Sent as an array. + :type distinct_fields: [str], optional + + :param group_by_fields: Fields to group by. + :type group_by_fields: [str], optional + + :param has_optional_group_by_fields: When false, events without a group-by value are ignored by the rule. When true, events with missing group-by fields are processed with ``N/A`` , replacing the missing values. + :type has_optional_group_by_fields: bool, optional + + :param index: **This field is currently unstable and might be removed in a minor version upgrade.** + The index to run the query on, if the ``dataSource`` is ``logs``. Only used for scheduled rules - in other words, when the ``schedulingOptions`` field is present in the rule payload. + :type index: str, optional + + :param indexes: List of indexes to query when the ``dataSource`` is ``logs``. Only used for scheduled rules, such as when the ``schedulingOptions`` field is present in the rule payload. + :type indexes: [str], optional + + :param metric: (Deprecated) The target field to aggregate over when using the sum or max + aggregations. ``metrics`` field should be used instead. **Deprecated**. + :type metric: str, optional + + :param metrics: Group of target fields to aggregate over when using the sum, max, geo data, or new value aggregations. The sum, max, and geo data aggregations only accept one value in this list, whereas the new value aggregation accepts up to five values. + :type metrics: [str], optional + + :param name: Name of the query. + :type name: str, optional + + :param query: Query to run on logs. + :type query: str, optional + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if custom_query_extension is not unset: + kwargs["custom_query_extension"] = custom_query_extension + if data_source is not unset: + kwargs["data_source"] = data_source + if distinct_fields is not unset: + kwargs["distinct_fields"] = distinct_fields + if group_by_fields is not unset: + kwargs["group_by_fields"] = group_by_fields + if has_optional_group_by_fields is not unset: + kwargs["has_optional_group_by_fields"] = has_optional_group_by_fields + if index is not unset: + kwargs["index"] = index + if indexes is not unset: + kwargs["indexes"] = indexes + if metric is not unset: + kwargs["metric"] = metric + if metrics is not unset: + kwargs["metrics"] = metrics + if name is not unset: + kwargs["name"] = name + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_standard_rule_response.py b/datadog_api_client/v2/model/security_monitoring_standard_rule_response.py new file mode 100644 index 0000000000..6514d6cbd4 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_standard_rule_response.py @@ -0,0 +1,256 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case import SecurityMonitoringRuleCase + from datadog_api_client.v2.model.cloud_configuration_rule_compliance_signal_options import CloudConfigurationRuleComplianceSignalOptions + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case import SecurityMonitoringThirdPartyRuleCase + from datadog_api_client.v2.model.security_monitoring_rule_type_read import SecurityMonitoringRuleTypeRead + +class SecurityMonitoringStandardRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case import SecurityMonitoringRuleCase + from datadog_api_client.v2.model.cloud_configuration_rule_compliance_signal_options import CloudConfigurationRuleComplianceSignalOptions + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case import SecurityMonitoringThirdPartyRuleCase + from datadog_api_client.v2.model.security_monitoring_rule_type_read import SecurityMonitoringRuleTypeRead + return { + "calculated_fields": ([CalculatedField],), + "cases": ([SecurityMonitoringRuleCase],), + "compliance_signal_options": (CloudConfigurationRuleComplianceSignalOptions,), + "created_at": (int,), + "creation_author_id": (int,), + "custom_message": (str,), + "custom_name": (str,), + "default_tags": ([str],), + "deprecation_date": (int,), + "filters": ([SecurityMonitoringFilter],), + "group_signals_by": ([str],), + "has_extended_title": (bool,), + "id": (str,), + "is_default": (bool,), + "is_deleted": (bool,), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (SecurityMonitoringRuleOptions,), + "queries": ([SecurityMonitoringStandardRuleQuery],), + "reference_tables": ([SecurityMonitoringReferenceTable],), + "scheduling_options": (SecurityMonitoringSchedulingOptions,), + "tags": ([str],), + "third_party_cases": ([SecurityMonitoringThirdPartyRuleCase],), + "type": (SecurityMonitoringRuleTypeRead,), + "update_author_id": (int,), + "updated_at": (int,), + "version": (int,), + } + attribute_map = { + "calculated_fields": "calculatedFields", + "cases": "cases", + "compliance_signal_options": "complianceSignalOptions", + "created_at": "createdAt", + "creation_author_id": "creationAuthorId", + "custom_message": "customMessage", + "custom_name": "customName", + "default_tags": "defaultTags", + "deprecation_date": "deprecationDate", + "filters": "filters", + "group_signals_by": "groupSignalsBy", + "has_extended_title": "hasExtendedTitle", + "id": "id", + "is_default": "isDefault", + "is_deleted": "isDeleted", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "queries": "queries", + "reference_tables": "referenceTables", + "scheduling_options": "schedulingOptions", + "tags": "tags", + "third_party_cases": "thirdPartyCases", + "type": "type", + "update_author_id": "updateAuthorId", + "updated_at": "updatedAt", + "version": "version", + } + + def __init__(self_, calculated_fields: Union[List[CalculatedField], UnsetType]=unset, cases: Union[List[SecurityMonitoringRuleCase], UnsetType]=unset, compliance_signal_options: Union[CloudConfigurationRuleComplianceSignalOptions, UnsetType]=unset, created_at: Union[int, UnsetType]=unset, creation_author_id: Union[int, UnsetType]=unset, custom_message: Union[str, UnsetType]=unset, custom_name: Union[str, UnsetType]=unset, default_tags: Union[List[str], UnsetType]=unset, deprecation_date: Union[int, UnsetType]=unset, filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, group_signals_by: Union[List[str], UnsetType]=unset, has_extended_title: Union[bool, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_default: Union[bool, UnsetType]=unset, is_deleted: Union[bool, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, message: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, options: Union[SecurityMonitoringRuleOptions, UnsetType]=unset, queries: Union[List[SecurityMonitoringStandardRuleQuery], UnsetType]=unset, reference_tables: Union[List[SecurityMonitoringReferenceTable], UnsetType]=unset, scheduling_options: Union[SecurityMonitoringSchedulingOptions, none_type, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, third_party_cases: Union[List[SecurityMonitoringThirdPartyRuleCase], UnsetType]=unset, type: Union[SecurityMonitoringRuleTypeRead, UnsetType]=unset, update_author_id: Union[int, UnsetType]=unset, updated_at: Union[int, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Rule. + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCase], optional + + :param compliance_signal_options: How to generate compliance signals. Useful for cloud_configuration rules only. + :type compliance_signal_options: CloudConfigurationRuleComplianceSignalOptions, optional + + :param created_at: When the rule was created, timestamp in milliseconds. + :type created_at: int, optional + + :param creation_author_id: User ID of the user who created the rule. + :type creation_author_id: int, optional + + :param custom_message: Custom/Overridden message for generated signals (used in case of Default rule update). + :type custom_message: str, optional + + :param custom_name: Custom/Overridden name of the rule (used in case of Default rule update). + :type custom_name: str, optional + + :param default_tags: Default Tags for default rules (included in tags) + :type default_tags: [str], optional + + :param deprecation_date: When the rule will be deprecated, timestamp in milliseconds. + :type deprecation_date: int, optional + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param id: The ID of the rule. + :type id: str, optional + + :param is_default: Whether the rule is included by default. + :type is_default: bool, optional + + :param is_deleted: Whether the rule has been deleted. + :type is_deleted: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool, optional + + :param message: Message for generated signals. + :type message: str, optional + + :param name: The name of the rule. + :type name: str, optional + + :param options: Options. + :type options: SecurityMonitoringRuleOptions, optional + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringStandardRuleQuery], optional + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCase], optional + + :param type: The rule type. + :type type: SecurityMonitoringRuleTypeRead, optional + + :param update_author_id: User ID of the user who updated the rule. + :type update_author_id: int, optional + + :param updated_at: The date the rule was last updated, in milliseconds. + :type updated_at: int, optional + + :param version: The version of the rule. + :type version: int, optional + """ + if calculated_fields is not unset: + kwargs["calculated_fields"] = calculated_fields + if cases is not unset: + kwargs["cases"] = cases + if compliance_signal_options is not unset: + kwargs["compliance_signal_options"] = compliance_signal_options + if created_at is not unset: + kwargs["created_at"] = created_at + if creation_author_id is not unset: + kwargs["creation_author_id"] = creation_author_id + if custom_message is not unset: + kwargs["custom_message"] = custom_message + if custom_name is not unset: + kwargs["custom_name"] = custom_name + if default_tags is not unset: + kwargs["default_tags"] = default_tags + if deprecation_date is not unset: + kwargs["deprecation_date"] = deprecation_date + if filters is not unset: + kwargs["filters"] = filters + if group_signals_by is not unset: + kwargs["group_signals_by"] = group_signals_by + if has_extended_title is not unset: + kwargs["has_extended_title"] = has_extended_title + if id is not unset: + kwargs["id"] = id + if is_default is not unset: + kwargs["is_default"] = is_default + if is_deleted is not unset: + kwargs["is_deleted"] = is_deleted + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if message is not unset: + kwargs["message"] = message + if name is not unset: + kwargs["name"] = name + if options is not unset: + kwargs["options"] = options + if queries is not unset: + kwargs["queries"] = queries + if reference_tables is not unset: + kwargs["reference_tables"] = reference_tables + if scheduling_options is not unset: + kwargs["scheduling_options"] = scheduling_options + if tags is not unset: + kwargs["tags"] = tags + if third_party_cases is not unset: + kwargs["third_party_cases"] = third_party_cases + if type is not unset: + kwargs["type"] = type + if update_author_id is not unset: + kwargs["update_author_id"] = update_author_id + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_standard_rule_test_payload.py b/datadog_api_client/v2/model/security_monitoring_standard_rule_test_payload.py new file mode 100644 index 0000000000..30c072f1a1 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_standard_rule_test_payload.py @@ -0,0 +1,157 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case_create import SecurityMonitoringThirdPartyRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_rule_type_test import SecurityMonitoringRuleTypeTest + +class SecurityMonitoringStandardRuleTestPayload(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.calculated_field import CalculatedField + from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter + from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions + from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery + from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable + from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions + from datadog_api_client.v2.model.security_monitoring_third_party_rule_case_create import SecurityMonitoringThirdPartyRuleCaseCreate + from datadog_api_client.v2.model.security_monitoring_rule_type_test import SecurityMonitoringRuleTypeTest + return { + "calculated_fields": ([CalculatedField],), + "cases": ([SecurityMonitoringRuleCaseCreate],), + "filters": ([SecurityMonitoringFilter],), + "group_signals_by": ([str],), + "has_extended_title": (bool,), + "is_enabled": (bool,), + "message": (str,), + "name": (str,), + "options": (SecurityMonitoringRuleOptions,), + "queries": ([SecurityMonitoringStandardRuleQuery],), + "reference_tables": ([SecurityMonitoringReferenceTable],), + "scheduling_options": (SecurityMonitoringSchedulingOptions,), + "tags": ([str],), + "third_party_cases": ([SecurityMonitoringThirdPartyRuleCaseCreate],), + "type": (SecurityMonitoringRuleTypeTest,), + } + attribute_map = { + "calculated_fields": "calculatedFields", + "cases": "cases", + "filters": "filters", + "group_signals_by": "groupSignalsBy", + "has_extended_title": "hasExtendedTitle", + "is_enabled": "isEnabled", + "message": "message", + "name": "name", + "options": "options", + "queries": "queries", + "reference_tables": "referenceTables", + "scheduling_options": "schedulingOptions", + "tags": "tags", + "third_party_cases": "thirdPartyCases", + "type": "type", + } + + def __init__(self_, cases: List[SecurityMonitoringRuleCaseCreate], is_enabled: bool, message: str, name: str, options: SecurityMonitoringRuleOptions, queries: List[SecurityMonitoringStandardRuleQuery], calculated_fields: Union[List[CalculatedField], UnsetType]=unset, filters: Union[List[SecurityMonitoringFilter], UnsetType]=unset, group_signals_by: Union[List[str], UnsetType]=unset, has_extended_title: Union[bool, UnsetType]=unset, reference_tables: Union[List[SecurityMonitoringReferenceTable], UnsetType]=unset, scheduling_options: Union[SecurityMonitoringSchedulingOptions, none_type, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, third_party_cases: Union[List[SecurityMonitoringThirdPartyRuleCaseCreate], UnsetType]=unset, type: Union[SecurityMonitoringRuleTypeTest, UnsetType]=unset, **kwargs): + """ + The payload of a rule to test + + :param calculated_fields: Calculated fields. Only allowed for scheduled rules - in other words, when schedulingOptions is also defined. + :type calculated_fields: [CalculatedField], optional + + :param cases: Cases for generating signals. + :type cases: [SecurityMonitoringRuleCaseCreate] + + :param filters: Additional queries to filter matched events before they are processed. This field is deprecated for log detection, signal correlation, and workload security rules. + :type filters: [SecurityMonitoringFilter], optional + + :param group_signals_by: Additional grouping to perform on top of the existing groups in the query section. Must be a subset of the existing groups. + :type group_signals_by: [str], optional + + :param has_extended_title: Whether the notifications include the triggering group-by values in their title. + :type has_extended_title: bool, optional + + :param is_enabled: Whether the rule is enabled. + :type is_enabled: bool + + :param message: Message for generated signals. + :type message: str + + :param name: The name of the rule. + :type name: str + + :param options: Options. + :type options: SecurityMonitoringRuleOptions + + :param queries: Queries for selecting logs which are part of the rule. + :type queries: [SecurityMonitoringStandardRuleQuery] + + :param reference_tables: Reference tables for the rule. + :type reference_tables: [SecurityMonitoringReferenceTable], optional + + :param scheduling_options: Options for scheduled rules. When this field is present, the rule runs based on the schedule. When absent, it runs real-time on ingested logs. + :type scheduling_options: SecurityMonitoringSchedulingOptions, none_type, optional + + :param tags: Tags for generated signals. + :type tags: [str], optional + + :param third_party_cases: Cases for generating signals from third-party rules. Only available for third-party rules. + :type third_party_cases: [SecurityMonitoringThirdPartyRuleCaseCreate], optional + + :param type: The rule type. + :type type: SecurityMonitoringRuleTypeTest, optional + """ + if calculated_fields is not unset: + kwargs["calculated_fields"] = calculated_fields + if filters is not unset: + kwargs["filters"] = filters + if group_signals_by is not unset: + kwargs["group_signals_by"] = group_signals_by + if has_extended_title is not unset: + kwargs["has_extended_title"] = has_extended_title + if reference_tables is not unset: + kwargs["reference_tables"] = reference_tables + if scheduling_options is not unset: + kwargs["scheduling_options"] = scheduling_options + if tags is not unset: + kwargs["tags"] = tags + if third_party_cases is not unset: + kwargs["third_party_cases"] = third_party_cases + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.cases = cases + self_.is_enabled = is_enabled + self_.message = message + self_.name = name + self_.options = options + self_.queries = queries diff --git a/datadog_api_client/v2/model/security_monitoring_suppression.py b/datadog_api_client/v2/model/security_monitoring_suppression.py new file mode 100644 index 0000000000..40696dee13 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_suppression_attributes import SecurityMonitoringSuppressionAttributes + from datadog_api_client.v2.model.security_monitoring_suppression_type import SecurityMonitoringSuppressionType + +class SecurityMonitoringSuppression(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_suppression_attributes import SecurityMonitoringSuppressionAttributes + from datadog_api_client.v2.model.security_monitoring_suppression_type import SecurityMonitoringSuppressionType + return { + "attributes": (SecurityMonitoringSuppressionAttributes,), + "id": (str,), + "type": (SecurityMonitoringSuppressionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SecurityMonitoringSuppressionAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SecurityMonitoringSuppressionType, UnsetType]=unset, **kwargs): + """ + The suppression rule's properties. + + :param attributes: The attributes of the suppression rule. + :type attributes: SecurityMonitoringSuppressionAttributes, optional + + :param id: The ID of the suppression rule. + :type id: str, optional + + :param type: The type of the resource. The value should always be ``suppressions``. + :type type: SecurityMonitoringSuppressionType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_attributes.py b/datadog_api_client/v2/model/security_monitoring_suppression_attributes.py new file mode 100644 index 0000000000..13a8d7ad4d --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_attributes.py @@ -0,0 +1,152 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_user import SecurityMonitoringUser + +class SecurityMonitoringSuppressionAttributes(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_user import SecurityMonitoringUser + return { + "creation_date": (int,), + "creator": (SecurityMonitoringUser,), + "data_exclusion_query": (str,), + "description": (str,), + "editable": (bool,), + "enabled": (bool,), + "expiration_date": (int,), + "name": (str,), + "rule_query": (str,), + "start_date": (int,), + "suppression_query": (str,), + "tags": ([str],), + "update_date": (int,), + "updater": (SecurityMonitoringUser,), + "version": (int,), + } + attribute_map = { + "creation_date": "creation_date", + "creator": "creator", + "data_exclusion_query": "data_exclusion_query", + "description": "description", + "editable": "editable", + "enabled": "enabled", + "expiration_date": "expiration_date", + "name": "name", + "rule_query": "rule_query", + "start_date": "start_date", + "suppression_query": "suppression_query", + "tags": "tags", + "update_date": "update_date", + "updater": "updater", + "version": "version", + } + + def __init__(self_, creation_date: Union[int, UnsetType]=unset, creator: Union[SecurityMonitoringUser, UnsetType]=unset, data_exclusion_query: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, editable: Union[bool, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, expiration_date: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, rule_query: Union[str, UnsetType]=unset, start_date: Union[int, UnsetType]=unset, suppression_query: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, update_date: Union[int, UnsetType]=unset, updater: Union[SecurityMonitoringUser, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + The attributes of the suppression rule. + + :param creation_date: A Unix millisecond timestamp given the creation date of the suppression rule. + :type creation_date: int, optional + + :param creator: A user. + :type creator: SecurityMonitoringUser, optional + + :param data_exclusion_query: An exclusion query on the input data of the security rules, which could be logs, Agent events, or other types of data based on the security rule. Events matching this query are ignored by any detection rules referenced in the suppression rule. + :type data_exclusion_query: str, optional + + :param description: A description for the suppression rule. + :type description: str, optional + + :param editable: Whether the suppression rule is editable. + :type editable: bool, optional + + :param enabled: Whether the suppression rule is enabled. + :type enabled: bool, optional + + :param expiration_date: A Unix millisecond timestamp giving an expiration date for the suppression rule. After this date, it won't suppress signals anymore. + :type expiration_date: int, optional + + :param name: The name of the suppression rule. + :type name: str, optional + + :param rule_query: The rule query of the suppression rule, with the same syntax as the search bar for detection rules. + :type rule_query: str, optional + + :param start_date: A Unix millisecond timestamp giving the start date for the suppression rule. After this date, it starts suppressing signals. + :type start_date: int, optional + + :param suppression_query: The suppression query of the suppression rule. If a signal matches this query, it is suppressed and not triggered. Same syntax as the queries to search signals in the signal explorer. + :type suppression_query: str, optional + + :param tags: List of tags associated with the suppression rule. + :type tags: [str], optional + + :param update_date: A Unix millisecond timestamp given the update date of the suppression rule. + :type update_date: int, optional + + :param updater: A user. + :type updater: SecurityMonitoringUser, optional + + :param version: The version of the suppression rule; it starts at 1, and is incremented at each update. + :type version: int, optional + """ + if creation_date is not unset: + kwargs["creation_date"] = creation_date + if creator is not unset: + kwargs["creator"] = creator + if data_exclusion_query is not unset: + kwargs["data_exclusion_query"] = data_exclusion_query + if description is not unset: + kwargs["description"] = description + if editable is not unset: + kwargs["editable"] = editable + if enabled is not unset: + kwargs["enabled"] = enabled + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if name is not unset: + kwargs["name"] = name + if rule_query is not unset: + kwargs["rule_query"] = rule_query + if start_date is not unset: + kwargs["start_date"] = start_date + if suppression_query is not unset: + kwargs["suppression_query"] = suppression_query + if tags is not unset: + kwargs["tags"] = tags + if update_date is not unset: + kwargs["update_date"] = update_date + if updater is not unset: + kwargs["updater"] = updater + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_create_attributes.py b/datadog_api_client/v2/model/security_monitoring_suppression_create_attributes.py new file mode 100644 index 0000000000..f0faf1107a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_create_attributes.py @@ -0,0 +1,99 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSuppressionCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "data_exclusion_query": (str,), + "description": (str,), + "enabled": (bool,), + "expiration_date": (int,), + "name": (str,), + "rule_query": (str,), + "start_date": (int,), + "suppression_query": (str,), + "tags": ([str],), + } + attribute_map = { + "data_exclusion_query": "data_exclusion_query", + "description": "description", + "enabled": "enabled", + "expiration_date": "expiration_date", + "name": "name", + "rule_query": "rule_query", + "start_date": "start_date", + "suppression_query": "suppression_query", + "tags": "tags", + } + + def __init__(self_, enabled: bool, name: str, rule_query: str, data_exclusion_query: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, expiration_date: Union[int, UnsetType]=unset, start_date: Union[int, UnsetType]=unset, suppression_query: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing the attributes of the suppression rule to be created. + + :param data_exclusion_query: An exclusion query on the input data of the security rules, which could be logs, Agent events, or other types of data based on the security rule. Events matching this query are ignored by any detection rules referenced in the suppression rule. + :type data_exclusion_query: str, optional + + :param description: A description for the suppression rule. + :type description: str, optional + + :param enabled: Whether the suppression rule is enabled. + :type enabled: bool + + :param expiration_date: A Unix millisecond timestamp giving an expiration date for the suppression rule. After this date, it won't suppress signals anymore. + :type expiration_date: int, optional + + :param name: The name of the suppression rule. + :type name: str + + :param rule_query: The rule query of the suppression rule, with the same syntax as the search bar for detection rules. + :type rule_query: str + + :param start_date: A Unix millisecond timestamp giving the start date for the suppression rule. After this date, it starts suppressing signals. + :type start_date: int, optional + + :param suppression_query: The suppression query of the suppression rule. If a signal matches this query, it is suppressed and is not triggered. It uses the same syntax as the queries to search signals in the Signals Explorer. + :type suppression_query: str, optional + + :param tags: List of tags associated with the suppression rule. + :type tags: [str], optional + """ + if data_exclusion_query is not unset: + kwargs["data_exclusion_query"] = data_exclusion_query + if description is not unset: + kwargs["description"] = description + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if start_date is not unset: + kwargs["start_date"] = start_date + if suppression_query is not unset: + kwargs["suppression_query"] = suppression_query + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.enabled = enabled + self_.name = name + self_.rule_query = rule_query diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_create_data.py b/datadog_api_client/v2/model/security_monitoring_suppression_create_data.py new file mode 100644 index 0000000000..7c1ecbf63a --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_suppression_create_attributes import SecurityMonitoringSuppressionCreateAttributes + from datadog_api_client.v2.model.security_monitoring_suppression_type import SecurityMonitoringSuppressionType + +class SecurityMonitoringSuppressionCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_suppression_create_attributes import SecurityMonitoringSuppressionCreateAttributes + from datadog_api_client.v2.model.security_monitoring_suppression_type import SecurityMonitoringSuppressionType + return { + "attributes": (SecurityMonitoringSuppressionCreateAttributes,), + "type": (SecurityMonitoringSuppressionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringSuppressionCreateAttributes, type: SecurityMonitoringSuppressionType, **kwargs): + """ + Object for a single suppression rule. + + :param attributes: Object containing the attributes of the suppression rule to be created. + :type attributes: SecurityMonitoringSuppressionCreateAttributes + + :param type: The type of the resource. The value should always be ``suppressions``. + :type type: SecurityMonitoringSuppressionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_create_request.py b/datadog_api_client/v2/model/security_monitoring_suppression_create_request.py new file mode 100644 index 0000000000..57132b89bb --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_suppression_create_data import SecurityMonitoringSuppressionCreateData + +class SecurityMonitoringSuppressionCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_suppression_create_data import SecurityMonitoringSuppressionCreateData + return { + "data": (SecurityMonitoringSuppressionCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringSuppressionCreateData, **kwargs): + """ + Request object that includes the suppression rule that you would like to create. + + :param data: Object for a single suppression rule. + :type data: SecurityMonitoringSuppressionCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_response.py b/datadog_api_client/v2/model/security_monitoring_suppression_response.py new file mode 100644 index 0000000000..b7f78a043b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_suppression import SecurityMonitoringSuppression + +class SecurityMonitoringSuppressionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_suppression import SecurityMonitoringSuppression + return { + "data": (SecurityMonitoringSuppression,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SecurityMonitoringSuppression, UnsetType]=unset, **kwargs): + """ + Response object containing a single suppression rule. + + :param data: The suppression rule's properties. + :type data: SecurityMonitoringSuppression, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_sort.py b/datadog_api_client/v2/model/security_monitoring_suppression_sort.py new file mode 100644 index 0000000000..6ce85c5388 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_sort.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSuppressionSort(ModelSimple): + """ + The sort parameters used for querying suppression rules. + + :param value: Must be one of ["name", "start_date", "expiration_date", "update_date", "enabled", "-name", "-start_date", "-expiration_date", "-update_date", "-creation_date", "-enabled"]. + :type value: str + """ + + allowed_values = { + "name", + "start_date", + "expiration_date", + "update_date", + "enabled", + "-name", + "-start_date", + "-expiration_date", + "-update_date", + "-creation_date", + "-enabled", + } + NAME: ClassVar["SecurityMonitoringSuppressionSort"] + START_DATE: ClassVar["SecurityMonitoringSuppressionSort"] + EXPIRATION_DATE: ClassVar["SecurityMonitoringSuppressionSort"] + UPDATE_DATE: ClassVar["SecurityMonitoringSuppressionSort"] + ENABLED: ClassVar["SecurityMonitoringSuppressionSort"] + NAME_DESCENDING: ClassVar["SecurityMonitoringSuppressionSort"] + START_DATE_DESCENDING: ClassVar["SecurityMonitoringSuppressionSort"] + EXPIRATION_DATE_DESCENDING: ClassVar["SecurityMonitoringSuppressionSort"] + UPDATE_DATE_DESCENDING: ClassVar["SecurityMonitoringSuppressionSort"] + CREATION_DATE_DESCENDING: ClassVar["SecurityMonitoringSuppressionSort"] + ENABLED_DESCENDING: ClassVar["SecurityMonitoringSuppressionSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSuppressionSort.NAME = SecurityMonitoringSuppressionSort("name") +SecurityMonitoringSuppressionSort.START_DATE = SecurityMonitoringSuppressionSort("start_date") +SecurityMonitoringSuppressionSort.EXPIRATION_DATE = SecurityMonitoringSuppressionSort("expiration_date") +SecurityMonitoringSuppressionSort.UPDATE_DATE = SecurityMonitoringSuppressionSort("update_date") +SecurityMonitoringSuppressionSort.ENABLED = SecurityMonitoringSuppressionSort("enabled") +SecurityMonitoringSuppressionSort.NAME_DESCENDING = SecurityMonitoringSuppressionSort("-name") +SecurityMonitoringSuppressionSort.START_DATE_DESCENDING = SecurityMonitoringSuppressionSort("-start_date") +SecurityMonitoringSuppressionSort.EXPIRATION_DATE_DESCENDING = SecurityMonitoringSuppressionSort("-expiration_date") +SecurityMonitoringSuppressionSort.UPDATE_DATE_DESCENDING = SecurityMonitoringSuppressionSort("-update_date") +SecurityMonitoringSuppressionSort.CREATION_DATE_DESCENDING = SecurityMonitoringSuppressionSort("-creation_date") +SecurityMonitoringSuppressionSort.ENABLED_DESCENDING = SecurityMonitoringSuppressionSort("-enabled") diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_type.py b/datadog_api_client/v2/model/security_monitoring_suppression_type.py new file mode 100644 index 0000000000..5d53039e3f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringSuppressionType(ModelSimple): + """ + The type of the resource. The value should always be `suppressions`. + + :param value: If omitted defaults to "suppressions". Must be one of ["suppressions"]. + :type value: str + """ + + allowed_values = { + "suppressions", + } + SUPPRESSIONS: ClassVar["SecurityMonitoringSuppressionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringSuppressionType.SUPPRESSIONS = SecurityMonitoringSuppressionType("suppressions") diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_update_attributes.py b/datadog_api_client/v2/model/security_monitoring_suppression_update_attributes.py new file mode 100644 index 0000000000..671227a806 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_update_attributes.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSuppressionUpdateAttributes(ModelNormal): + validations = { + "version": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "data_exclusion_query": (str,), + "description": (str,), + "enabled": (bool,), + "expiration_date": (int, none_type), + "name": (str,), + "rule_query": (str,), + "start_date": (int, none_type), + "suppression_query": (str,), + "tags": ([str],), + "version": (int,), + } + attribute_map = { + "data_exclusion_query": "data_exclusion_query", + "description": "description", + "enabled": "enabled", + "expiration_date": "expiration_date", + "name": "name", + "rule_query": "rule_query", + "start_date": "start_date", + "suppression_query": "suppression_query", + "tags": "tags", + "version": "version", + } + + def __init__(self_, data_exclusion_query: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, expiration_date: Union[int, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, rule_query: Union[str, UnsetType]=unset, start_date: Union[int, none_type, UnsetType]=unset, suppression_query: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + The suppression rule properties to be updated. + + :param data_exclusion_query: An exclusion query on the input data of the security rules, which could be logs, Agent events, or other types of data based on the security rule. Events matching this query are ignored by any detection rules referenced in the suppression rule. + :type data_exclusion_query: str, optional + + :param description: A description for the suppression rule. + :type description: str, optional + + :param enabled: Whether the suppression rule is enabled. + :type enabled: bool, optional + + :param expiration_date: A Unix millisecond timestamp giving an expiration date for the suppression rule. After this date, it won't suppress signals anymore. If unset, the expiration date of the suppression rule is left untouched. If set to ``null`` , the expiration date is removed. + :type expiration_date: int, none_type, optional + + :param name: The name of the suppression rule. + :type name: str, optional + + :param rule_query: The rule query of the suppression rule, with the same syntax as the search bar for detection rules. + :type rule_query: str, optional + + :param start_date: A Unix millisecond timestamp giving the start date for the suppression rule. After this date, it starts suppressing signals. If unset, the start date of the suppression rule is left untouched. If set to ``null`` , the start date is removed. + :type start_date: int, none_type, optional + + :param suppression_query: The suppression query of the suppression rule. If a signal matches this query, it is suppressed and not triggered. Same syntax as the queries to search signals in the signal explorer. + :type suppression_query: str, optional + + :param tags: List of tags associated with the suppression rule. + :type tags: [str], optional + + :param version: The current version of the suppression. This is optional, but it can help prevent concurrent modifications. + :type version: int, optional + """ + if data_exclusion_query is not unset: + kwargs["data_exclusion_query"] = data_exclusion_query + if description is not unset: + kwargs["description"] = description + if enabled is not unset: + kwargs["enabled"] = enabled + if expiration_date is not unset: + kwargs["expiration_date"] = expiration_date + if name is not unset: + kwargs["name"] = name + if rule_query is not unset: + kwargs["rule_query"] = rule_query + if start_date is not unset: + kwargs["start_date"] = start_date + if suppression_query is not unset: + kwargs["suppression_query"] = suppression_query + if tags is not unset: + kwargs["tags"] = tags + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_update_data.py b/datadog_api_client/v2/model/security_monitoring_suppression_update_data.py new file mode 100644 index 0000000000..cbf01cd6d3 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_suppression_update_attributes import SecurityMonitoringSuppressionUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_suppression_type import SecurityMonitoringSuppressionType + +class SecurityMonitoringSuppressionUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_suppression_update_attributes import SecurityMonitoringSuppressionUpdateAttributes + from datadog_api_client.v2.model.security_monitoring_suppression_type import SecurityMonitoringSuppressionType + return { + "attributes": (SecurityMonitoringSuppressionUpdateAttributes,), + "type": (SecurityMonitoringSuppressionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringSuppressionUpdateAttributes, type: SecurityMonitoringSuppressionType, **kwargs): + """ + The new suppression properties; partial updates are supported. + + :param attributes: The suppression rule properties to be updated. + :type attributes: SecurityMonitoringSuppressionUpdateAttributes + + :param type: The type of the resource. The value should always be ``suppressions``. + :type type: SecurityMonitoringSuppressionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_suppression_update_request.py b/datadog_api_client/v2/model/security_monitoring_suppression_update_request.py new file mode 100644 index 0000000000..9c9328ecc3 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppression_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_suppression_update_data import SecurityMonitoringSuppressionUpdateData + +class SecurityMonitoringSuppressionUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_suppression_update_data import SecurityMonitoringSuppressionUpdateData + return { + "data": (SecurityMonitoringSuppressionUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringSuppressionUpdateData, **kwargs): + """ + Request object containing the fields to update on the suppression rule. + + :param data: The new suppression properties; partial updates are supported. + :type data: SecurityMonitoringSuppressionUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_suppressions_meta.py b/datadog_api_client/v2/model/security_monitoring_suppressions_meta.py new file mode 100644 index 0000000000..e03decbda3 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppressions_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_suppressions_page_meta import SecurityMonitoringSuppressionsPageMeta + +class SecurityMonitoringSuppressionsMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_suppressions_page_meta import SecurityMonitoringSuppressionsPageMeta + return { + "page": (SecurityMonitoringSuppressionsPageMeta,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[SecurityMonitoringSuppressionsPageMeta, UnsetType]=unset, **kwargs): + """ + Metadata for the suppression list response. + + :param page: Pagination metadata. + :type page: SecurityMonitoringSuppressionsPageMeta, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_suppressions_page_meta.py b/datadog_api_client/v2/model/security_monitoring_suppressions_page_meta.py new file mode 100644 index 0000000000..ee85c6d689 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppressions_page_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringSuppressionsPageMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "page_number": (int,), + "page_size": (int,), + "total_count": (int,), + } + attribute_map = { + "page_number": "pageNumber", + "page_size": "pageSize", + "total_count": "totalCount", + } + + def __init__(self_, page_number: Union[int, UnsetType]=unset, page_size: Union[int, UnsetType]=unset, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata. + + :param page_number: Current page number. + :type page_number: int, optional + + :param page_size: Current page size. + :type page_size: int, optional + + :param total_count: Total count of suppressions. + :type total_count: int, optional + """ + if page_number is not unset: + kwargs["page_number"] = page_number + if page_size is not unset: + kwargs["page_size"] = page_size + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_suppressions_response.py b/datadog_api_client/v2/model/security_monitoring_suppressions_response.py new file mode 100644 index 0000000000..2fdfe4bcaf --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_suppressions_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_suppression import SecurityMonitoringSuppression + +class SecurityMonitoringSuppressionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_suppression import SecurityMonitoringSuppression + return { + "data": ([SecurityMonitoringSuppression],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SecurityMonitoringSuppression], UnsetType]=unset, **kwargs): + """ + Response object containing the available suppression rules. + + :param data: A list of suppressions objects. + :type data: [SecurityMonitoringSuppression], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_bulk_export_attributes.py b/datadog_api_client/v2/model/security_monitoring_terraform_bulk_export_attributes.py new file mode 100644 index 0000000000..e4826962bd --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_bulk_export_attributes.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringTerraformBulkExportAttributes(ModelNormal): + validations = { + "resource_ids": { + "max_items": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "resource_ids": ([str],), + } + attribute_map = { + "resource_ids": "resource_ids", + } + + def __init__(self_, resource_ids: List[str], **kwargs): + """ + Attributes for the bulk export request. + + :param resource_ids: The list of resource IDs to export. Maximum 1000 items. + :type resource_ids: [str] + """ + super().__init__(kwargs) + + + self_.resource_ids = resource_ids diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_bulk_export_data.py b/datadog_api_client/v2/model/security_monitoring_terraform_bulk_export_data.py new file mode 100644 index 0000000000..4a54e7e2f4 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_bulk_export_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_terraform_bulk_export_attributes import SecurityMonitoringTerraformBulkExportAttributes + +class SecurityMonitoringTerraformBulkExportData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_terraform_bulk_export_attributes import SecurityMonitoringTerraformBulkExportAttributes + return { + "attributes": (SecurityMonitoringTerraformBulkExportAttributes,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringTerraformBulkExportAttributes, type: str, **kwargs): + """ + The bulk export request data object. + + :param attributes: Attributes for the bulk export request. + :type attributes: SecurityMonitoringTerraformBulkExportAttributes + + :param type: The JSON:API type. Always ``bulk_export_resources``. + :type type: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_bulk_export_request.py b/datadog_api_client/v2/model/security_monitoring_terraform_bulk_export_request.py new file mode 100644 index 0000000000..91ec4be801 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_bulk_export_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_terraform_bulk_export_data import SecurityMonitoringTerraformBulkExportData + +class SecurityMonitoringTerraformBulkExportRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_terraform_bulk_export_data import SecurityMonitoringTerraformBulkExportData + return { + "data": (SecurityMonitoringTerraformBulkExportData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringTerraformBulkExportData, **kwargs): + """ + Request body for bulk exporting security monitoring resources to Terraform. + + :param data: The bulk export request data object. + :type data: SecurityMonitoringTerraformBulkExportData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_convert_attributes.py b/datadog_api_client/v2/model/security_monitoring_terraform_convert_attributes.py new file mode 100644 index 0000000000..1277aba19f --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_convert_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringTerraformConvertAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "resource_json": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "resource_json": "resource_json", + } + + def __init__(self_, resource_json: Dict[str, Any], **kwargs): + """ + Attributes for the convert request. + + :param resource_json: The resource attributes as a JSON object, matching the structure returned by the corresponding Datadog API (for example, the attributes of a suppression rule). + :type resource_json: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)} + """ + super().__init__(kwargs) + + + self_.resource_json = resource_json diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_convert_data.py b/datadog_api_client/v2/model/security_monitoring_terraform_convert_data.py new file mode 100644 index 0000000000..fcc9ee0278 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_convert_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_terraform_convert_attributes import SecurityMonitoringTerraformConvertAttributes + +class SecurityMonitoringTerraformConvertData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_terraform_convert_attributes import SecurityMonitoringTerraformConvertAttributes + return { + "attributes": (SecurityMonitoringTerraformConvertAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringTerraformConvertAttributes, id: str, type: str, **kwargs): + """ + The convert request data object. + + :param attributes: Attributes for the convert request. + :type attributes: SecurityMonitoringTerraformConvertAttributes + + :param id: The ID of the resource being converted. + :type id: str + + :param type: The JSON:API type. Always ``convert_resource``. + :type type: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_convert_request.py b/datadog_api_client/v2/model/security_monitoring_terraform_convert_request.py new file mode 100644 index 0000000000..9a5eb20042 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_convert_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_terraform_convert_data import SecurityMonitoringTerraformConvertData + +class SecurityMonitoringTerraformConvertRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_terraform_convert_data import SecurityMonitoringTerraformConvertData + return { + "data": (SecurityMonitoringTerraformConvertData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SecurityMonitoringTerraformConvertData, **kwargs): + """ + Request body for converting a security monitoring resource JSON to Terraform. + + :param data: The convert request data object. + :type data: SecurityMonitoringTerraformConvertData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_export_attributes.py b/datadog_api_client/v2/model/security_monitoring_terraform_export_attributes.py new file mode 100644 index 0000000000..ebbc65ed9b --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_export_attributes.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringTerraformExportAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "output": (str,), + "resource_id": (str,), + "type_name": (str,), + } + attribute_map = { + "output": "output", + "resource_id": "resource_id", + "type_name": "type_name", + } + + def __init__(self_, resource_id: str, type_name: str, output: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the Terraform export response. + + :param output: The Terraform configuration for the resource. + :type output: str, optional + + :param resource_id: The ID of the exported resource. + :type resource_id: str + + :param type_name: The Terraform resource type name. + :type type_name: str + """ + if output is not unset: + kwargs["output"] = output + super().__init__(kwargs) + + + self_.resource_id = resource_id + self_.type_name = type_name diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_export_data.py b/datadog_api_client/v2/model/security_monitoring_terraform_export_data.py new file mode 100644 index 0000000000..f80d5dde2e --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_export_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_terraform_export_attributes import SecurityMonitoringTerraformExportAttributes + +class SecurityMonitoringTerraformExportData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_terraform_export_attributes import SecurityMonitoringTerraformExportAttributes + return { + "attributes": (SecurityMonitoringTerraformExportAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SecurityMonitoringTerraformExportAttributes, id: str, type: str, **kwargs): + """ + The Terraform export data object. + + :param attributes: Attributes of the Terraform export response. + :type attributes: SecurityMonitoringTerraformExportAttributes + + :param id: The resource identifier composed of the Terraform type name and the resource ID separated by ``|``. + :type id: str + + :param type: The JSON:API type. Always ``format_resource``. + :type type: str + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_export_response.py b/datadog_api_client/v2/model/security_monitoring_terraform_export_response.py new file mode 100644 index 0000000000..b8f7785458 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_export_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_terraform_export_data import SecurityMonitoringTerraformExportData + +class SecurityMonitoringTerraformExportResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_terraform_export_data import SecurityMonitoringTerraformExportData + return { + "data": (SecurityMonitoringTerraformExportData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SecurityMonitoringTerraformExportData, UnsetType]=unset, **kwargs): + """ + Response containing the Terraform configuration for a security monitoring resource. + + :param data: The Terraform export data object. + :type data: SecurityMonitoringTerraformExportData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_terraform_resource_type.py b/datadog_api_client/v2/model/security_monitoring_terraform_resource_type.py new file mode 100644 index 0000000000..1a49599bb0 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_terraform_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SecurityMonitoringTerraformResourceType(ModelSimple): + """ + The type of security monitoring resource to export to Terraform. + + :param value: Must be one of ["suppressions", "critical_assets", "security_filters", "rules"]. + :type value: str + """ + + allowed_values = { + "suppressions", + "critical_assets", + "security_filters", + "rules", + } + SUPPRESSIONS: ClassVar["SecurityMonitoringTerraformResourceType"] + CRITICAL_ASSETS: ClassVar["SecurityMonitoringTerraformResourceType"] + SECURITY_FILTERS: ClassVar["SecurityMonitoringTerraformResourceType"] + RULES: ClassVar["SecurityMonitoringTerraformResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SecurityMonitoringTerraformResourceType.SUPPRESSIONS = SecurityMonitoringTerraformResourceType("suppressions") +SecurityMonitoringTerraformResourceType.CRITICAL_ASSETS = SecurityMonitoringTerraformResourceType("critical_assets") +SecurityMonitoringTerraformResourceType.SECURITY_FILTERS = SecurityMonitoringTerraformResourceType("security_filters") +SecurityMonitoringTerraformResourceType.RULES = SecurityMonitoringTerraformResourceType("rules") diff --git a/datadog_api_client/v2/model/security_monitoring_third_party_root_query.py b/datadog_api_client/v2/model/security_monitoring_third_party_root_query.py new file mode 100644 index 0000000000..b2a11df276 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_third_party_root_query.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringThirdPartyRootQuery(ModelNormal): + @cached_property + def openapi_types(_): + return { + "group_by_fields": ([str],), + "query": (str,), + } + attribute_map = { + "group_by_fields": "groupByFields", + "query": "query", + } + + def __init__(self_, group_by_fields: Union[List[str], UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + A query to be combined with the third party case query. + + :param group_by_fields: Fields to group by. + :type group_by_fields: [str], optional + + :param query: Query to run on logs. + :type query: str, optional + """ + if group_by_fields is not unset: + kwargs["group_by_fields"] = group_by_fields + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_third_party_rule_case.py b/datadog_api_client/v2/model/security_monitoring_third_party_rule_case.py new file mode 100644 index 0000000000..fa0de5e430 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_third_party_rule_case.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + +class SecurityMonitoringThirdPartyRuleCase(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + return { + "custom_status": (SecurityMonitoringRuleSeverity,), + "name": (str,), + "notifications": ([str],), + "query": (str,), + "status": (SecurityMonitoringRuleSeverity,), + } + attribute_map = { + "custom_status": "customStatus", + "name": "name", + "notifications": "notifications", + "query": "query", + "status": "status", + } + + def __init__(self_, custom_status: Union[SecurityMonitoringRuleSeverity, UnsetType]=unset, name: Union[str, UnsetType]=unset, notifications: Union[List[str], UnsetType]=unset, query: Union[str, UnsetType]=unset, status: Union[SecurityMonitoringRuleSeverity, UnsetType]=unset, **kwargs): + """ + Case when signal is generated by a third party rule. + + :param custom_status: Severity of the Security Signal. + :type custom_status: SecurityMonitoringRuleSeverity, optional + + :param name: Name of the case. + :type name: str, optional + + :param notifications: Notification targets for each rule case. + :type notifications: [str], optional + + :param query: A query to map a third party event to this case. + :type query: str, optional + + :param status: Severity of the Security Signal. + :type status: SecurityMonitoringRuleSeverity, optional + """ + if custom_status is not unset: + kwargs["custom_status"] = custom_status + if name is not unset: + kwargs["name"] = name + if notifications is not unset: + kwargs["notifications"] = notifications + if query is not unset: + kwargs["query"] = query + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_monitoring_third_party_rule_case_create.py b/datadog_api_client/v2/model/security_monitoring_third_party_rule_case_create.py new file mode 100644 index 0000000000..7929f7fb89 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_third_party_rule_case_create.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + +class SecurityMonitoringThirdPartyRuleCaseCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity + return { + "name": (str,), + "notifications": ([str],), + "query": (str,), + "status": (SecurityMonitoringRuleSeverity,), + } + attribute_map = { + "name": "name", + "notifications": "notifications", + "query": "query", + "status": "status", + } + + def __init__(self_, status: SecurityMonitoringRuleSeverity, name: Union[str, UnsetType]=unset, notifications: Union[List[str], UnsetType]=unset, query: Union[str, UnsetType]=unset, **kwargs): + """ + Case when a signal is generated by a third party rule. + + :param name: Name of the case. + :type name: str, optional + + :param notifications: Notification targets for each case. + :type notifications: [str], optional + + :param query: A query to map a third party event to this case. + :type query: str, optional + + :param status: Severity of the Security Signal. + :type status: SecurityMonitoringRuleSeverity + """ + if name is not unset: + kwargs["name"] = name + if notifications is not unset: + kwargs["notifications"] = notifications + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/security_monitoring_triage_user.py b/datadog_api_client/v2/model/security_monitoring_triage_user.py new file mode 100644 index 0000000000..32a3b91599 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_triage_user.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringTriageUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "icon": (str,), + "id": (int,), + "name": (str, none_type), + "uuid": (str,), + } + attribute_map = { + "handle": "handle", + "icon": "icon", + "id": "id", + "name": "name", + "uuid": "uuid", + } + read_only_vars = { + "icon", + } + + def __init__(self_, uuid: str, handle: Union[str, UnsetType]=unset, icon: Union[str, UnsetType]=unset, id: Union[int, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Object representing a given user entity. + + :param handle: The handle for this user account. + :type handle: str, optional + + :param icon: Gravatar icon associated to the user. + :type icon: str, optional + + :param id: Numerical ID assigned by Datadog to this user account. + :type id: int, optional + + :param name: The name for this user account. + :type name: str, none_type, optional + + :param uuid: UUID assigned by Datadog to this user account. + :type uuid: str + """ + if handle is not unset: + kwargs["handle"] = handle + if icon is not unset: + kwargs["icon"] = icon + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.uuid = uuid diff --git a/datadog_api_client/v2/model/security_monitoring_user.py b/datadog_api_client/v2/model/security_monitoring_user.py new file mode 100644 index 0000000000..f913ebfec8 --- /dev/null +++ b/datadog_api_client/v2/model/security_monitoring_user.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SecurityMonitoringUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str, none_type), + } + attribute_map = { + "handle": "handle", + "name": "name", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + A user. + + :param handle: The handle of the user. + :type handle: str, optional + + :param name: The name of the user. + :type name: str, none_type, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_trigger.py b/datadog_api_client/v2/model/security_trigger.py new file mode 100644 index 0000000000..aa7ef391d7 --- /dev/null +++ b/datadog_api_client/v2/model/security_trigger.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + +class SecurityTrigger(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit + return { + "rate_limit": (TriggerRateLimit,), + } + attribute_map = { + "rate_limit": "rateLimit", + } + + def __init__(self_, rate_limit: Union[TriggerRateLimit, UnsetType]=unset, **kwargs): + """ + Trigger a workflow from a Security Signal or Finding. For automatic triggering a handle must be configured and the workflow must be published. + + :param rate_limit: Defines a rate limit for a trigger. + :type rate_limit: TriggerRateLimit, optional + """ + if rate_limit is not unset: + kwargs["rate_limit"] = rate_limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/security_trigger_wrapper.py b/datadog_api_client/v2/model/security_trigger_wrapper.py new file mode 100644 index 0000000000..0e04e14432 --- /dev/null +++ b/datadog_api_client/v2/model/security_trigger_wrapper.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.security_trigger import SecurityTrigger + +class SecurityTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.security_trigger import SecurityTrigger + return { + "security_trigger": (SecurityTrigger,), + "start_step_names": ([str],), + } + attribute_map = { + "security_trigger": "securityTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, security_trigger: SecurityTrigger, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Security-based trigger. + + :param security_trigger: Trigger a workflow from a Security Signal or Finding. For automatic triggering a handle must be configured and the workflow must be published. + :type security_trigger: SecurityTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.security_trigger = security_trigger diff --git a/datadog_api_client/v2/model/selectors.py b/datadog_api_client/v2/model/selectors.py new file mode 100644 index 0000000000..9a5ec3de5f --- /dev/null +++ b/datadog_api_client/v2/model/selectors.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_types_items import RuleTypesItems + from datadog_api_client.v2.model.rule_severity import RuleSeverity + from datadog_api_client.v2.model.trigger_source import TriggerSource + +class Selectors(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_types_items import RuleTypesItems + from datadog_api_client.v2.model.rule_severity import RuleSeverity + from datadog_api_client.v2.model.trigger_source import TriggerSource + return { + "query": (str,), + "rule_types": ([RuleTypesItems],), + "severities": ([RuleSeverity],), + "trigger_source": (TriggerSource,), + } + attribute_map = { + "query": "query", + "rule_types": "rule_types", + "severities": "severities", + "trigger_source": "trigger_source", + } + + def __init__(self_, trigger_source: TriggerSource, query: Union[str, UnsetType]=unset, rule_types: Union[List[RuleTypesItems], UnsetType]=unset, severities: Union[List[RuleSeverity], UnsetType]=unset, **kwargs): + """ + Selectors are used to filter security issues for which notifications should be generated. + Users can specify rule severities, rule types, a query to filter security issues on tags and attributes, and the trigger source. + Only the trigger_source field is required. + + :param query: The query is composed of one or several key:value pairs, which can be used to filter security issues on tags and attributes. + :type query: str, optional + + :param rule_types: Security rule types used as filters in security rules. + :type rule_types: [RuleTypesItems], optional + + :param severities: The security rules severities to consider. + :type severities: [RuleSeverity], optional + + :param trigger_source: The type of security issues on which the rule applies. Notification rules based on security signals need to use the trigger source "security_signals", + while notification rules based on security vulnerabilities need to use the trigger source "security_findings". + :type trigger_source: TriggerSource + """ + if query is not unset: + kwargs["query"] = query + if rule_types is not unset: + kwargs["rule_types"] = rule_types + if severities is not unset: + kwargs["severities"] = severities + super().__init__(kwargs) + + + self_.trigger_source = trigger_source diff --git a/datadog_api_client/v2/model/self_service_trigger_wrapper.py b/datadog_api_client/v2/model/self_service_trigger_wrapper.py new file mode 100644 index 0000000000..fb4a00b045 --- /dev/null +++ b/datadog_api_client/v2/model/self_service_trigger_wrapper.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SelfServiceTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + return { + "self_service_trigger": (dict,), + "start_step_names": ([str],), + } + attribute_map = { + "self_service_trigger": "selfServiceTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, self_service_trigger: dict, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Self Service-based trigger. + + :param self_service_trigger: Trigger a workflow from Self Service. + :type self_service_trigger: dict + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.self_service_trigger = self_service_trigger diff --git a/datadog_api_client/v2/model/send_slack_message_action.py b/datadog_api_client/v2/model/send_slack_message_action.py new file mode 100644 index 0000000000..5420661bb3 --- /dev/null +++ b/datadog_api_client/v2/model/send_slack_message_action.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.send_slack_message_action_type import SendSlackMessageActionType + +class SendSlackMessageAction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.send_slack_message_action_type import SendSlackMessageActionType + return { + "channel": (str,), + "type": (SendSlackMessageActionType,), + "workspace": (str,), + } + attribute_map = { + "channel": "channel", + "type": "type", + "workspace": "workspace", + } + + def __init__(self_, channel: str, type: SendSlackMessageActionType, workspace: str, **kwargs): + """ + Sends a message to a Slack channel. + + :param channel: The channel ID. + :type channel: str + + :param type: Indicates that the action is a send Slack message action. + :type type: SendSlackMessageActionType + + :param workspace: The workspace ID. + :type workspace: str + """ + super().__init__(kwargs) + + + self_.channel = channel + self_.type = type + self_.workspace = workspace diff --git a/datadog_api_client/v2/model/send_slack_message_action_type.py b/datadog_api_client/v2/model/send_slack_message_action_type.py new file mode 100644 index 0000000000..2efe9d6e53 --- /dev/null +++ b/datadog_api_client/v2/model/send_slack_message_action_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SendSlackMessageActionType(ModelSimple): + """ + Indicates that the action is a send Slack message action. + + :param value: If omitted defaults to "send_slack_message". Must be one of ["send_slack_message"]. + :type value: str + """ + + allowed_values = { + "send_slack_message", + } + SEND_SLACK_MESSAGE: ClassVar["SendSlackMessageActionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SendSlackMessageActionType.SEND_SLACK_MESSAGE = SendSlackMessageActionType("send_slack_message") diff --git a/datadog_api_client/v2/model/send_teams_message_action.py b/datadog_api_client/v2/model/send_teams_message_action.py new file mode 100644 index 0000000000..c3dedf38ac --- /dev/null +++ b/datadog_api_client/v2/model/send_teams_message_action.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.send_teams_message_action_type import SendTeamsMessageActionType + +class SendTeamsMessageAction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.send_teams_message_action_type import SendTeamsMessageActionType + return { + "channel": (str,), + "team": (str,), + "tenant": (str,), + "type": (SendTeamsMessageActionType,), + } + attribute_map = { + "channel": "channel", + "team": "team", + "tenant": "tenant", + "type": "type", + } + + def __init__(self_, channel: str, team: str, tenant: str, type: SendTeamsMessageActionType, **kwargs): + """ + Sends a message to a Microsoft Teams channel. + + :param channel: The channel ID. + :type channel: str + + :param team: The team ID. + :type team: str + + :param tenant: The tenant ID. + :type tenant: str + + :param type: Indicates that the action is a send Microsoft Teams message action. + :type type: SendTeamsMessageActionType + """ + super().__init__(kwargs) + + + self_.channel = channel + self_.team = team + self_.tenant = tenant + self_.type = type diff --git a/datadog_api_client/v2/model/send_teams_message_action_type.py b/datadog_api_client/v2/model/send_teams_message_action_type.py new file mode 100644 index 0000000000..5a6107d66e --- /dev/null +++ b/datadog_api_client/v2/model/send_teams_message_action_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SendTeamsMessageActionType(ModelSimple): + """ + Indicates that the action is a send Microsoft Teams message action. + + :param value: If omitted defaults to "send_teams_message". Must be one of ["send_teams_message"]. + :type value: str + """ + + allowed_values = { + "send_teams_message", + } + SEND_TEAMS_MESSAGE: ClassVar["SendTeamsMessageActionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SendTeamsMessageActionType.SEND_TEAMS_MESSAGE = SendTeamsMessageActionType("send_teams_message") diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_config_request.py b/datadog_api_client/v2/model/sensitive_data_scanner_config_request.py new file mode 100644 index 0000000000..09db58da2c --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_config_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_reorder_config import SensitiveDataScannerReorderConfig + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerConfigRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_reorder_config import SensitiveDataScannerReorderConfig + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "data": (SensitiveDataScannerReorderConfig,), + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: SensitiveDataScannerReorderConfig, meta: SensitiveDataScannerMetaVersionOnly, **kwargs): + """ + Group reorder request. + + :param data: Data related to the reordering of scanning groups. + :type data: SensitiveDataScannerReorderConfig + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_configuration.py b/datadog_api_client/v2/model/sensitive_data_scanner_configuration.py new file mode 100644 index 0000000000..6d9be46c43 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_configuration.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_type import SensitiveDataScannerConfigurationType + +class SensitiveDataScannerConfiguration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_type import SensitiveDataScannerConfigurationType + return { + "id": (str,), + "type": (SensitiveDataScannerConfigurationType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[SensitiveDataScannerConfigurationType, UnsetType]=unset, **kwargs): + """ + A Sensitive Data Scanner configuration. + + :param id: ID of the configuration. + :type id: str, optional + + :param type: Sensitive Data Scanner configuration type. + :type type: SensitiveDataScannerConfigurationType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_configuration_data.py b/datadog_api_client/v2/model/sensitive_data_scanner_configuration_data.py new file mode 100644 index 0000000000..5af5250cd1 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_configuration_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_configuration import SensitiveDataScannerConfiguration + +class SensitiveDataScannerConfigurationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_configuration import SensitiveDataScannerConfiguration + return { + "data": (SensitiveDataScannerConfiguration,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SensitiveDataScannerConfiguration, UnsetType]=unset, **kwargs): + """ + A Sensitive Data Scanner configuration data. + + :param data: A Sensitive Data Scanner configuration. + :type data: SensitiveDataScannerConfiguration, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_configuration_relationships.py b/datadog_api_client/v2/model/sensitive_data_scanner_configuration_relationships.py new file mode 100644 index 0000000000..19a63044c5 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_configuration_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_list import SensitiveDataScannerGroupList + +class SensitiveDataScannerConfigurationRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_list import SensitiveDataScannerGroupList + return { + "groups": (SensitiveDataScannerGroupList,), + } + attribute_map = { + "groups": "groups", + } + + def __init__(self_, groups: Union[SensitiveDataScannerGroupList, UnsetType]=unset, **kwargs): + """ + Relationships of the configuration. + + :param groups: List of groups, ordered. + :type groups: SensitiveDataScannerGroupList, optional + """ + if groups is not unset: + kwargs["groups"] = groups + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_configuration_type.py b/datadog_api_client/v2/model/sensitive_data_scanner_configuration_type.py new file mode 100644 index 0000000000..c214245ae6 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_configuration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SensitiveDataScannerConfigurationType(ModelSimple): + """ + Sensitive Data Scanner configuration type. + + :param value: If omitted defaults to "sensitive_data_scanner_configuration". Must be one of ["sensitive_data_scanner_configuration"]. + :type value: str + """ + + allowed_values = { + "sensitive_data_scanner_configuration", + } + SENSITIVE_DATA_SCANNER_CONFIGURATIONS: ClassVar["SensitiveDataScannerConfigurationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SensitiveDataScannerConfigurationType.SENSITIVE_DATA_SCANNER_CONFIGURATIONS = SensitiveDataScannerConfigurationType("sensitive_data_scanner_configuration") diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_create_group_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_create_group_response.py new file mode 100644 index 0000000000..05cbd492f5 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_create_group_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_response import SensitiveDataScannerGroupResponse + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerCreateGroupResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_response import SensitiveDataScannerGroupResponse + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "data": (SensitiveDataScannerGroupResponse,), + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[SensitiveDataScannerGroupResponse, UnsetType]=unset, meta: Union[SensitiveDataScannerMetaVersionOnly, UnsetType]=unset, **kwargs): + """ + Create group response. + + :param data: Response data related to the creation of a group. + :type data: SensitiveDataScannerGroupResponse, optional + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_create_rule_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_create_rule_response.py new file mode 100644 index 0000000000..dd679e1e37 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_create_rule_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_rule_response import SensitiveDataScannerRuleResponse + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerCreateRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_rule_response import SensitiveDataScannerRuleResponse + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "data": (SensitiveDataScannerRuleResponse,), + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[SensitiveDataScannerRuleResponse, UnsetType]=unset, meta: Union[SensitiveDataScannerMetaVersionOnly, UnsetType]=unset, **kwargs): + """ + Create rule response. + + :param data: Response data related to the creation of a rule. + :type data: SensitiveDataScannerRuleResponse, optional + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_filter.py b/datadog_api_client/v2/model/sensitive_data_scanner_filter.py new file mode 100644 index 0000000000..054b99d810 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SensitiveDataScannerFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + Filter for the Scanning Group. + + :param query: Query to filter the events. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_get_config_included_array.py b/datadog_api_client/v2/model/sensitive_data_scanner_get_config_included_array.py new file mode 100644 index 0000000000..a0ae981cc1 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_get_config_included_array.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SensitiveDataScannerGetConfigIncludedArray(ModelSimple): + """ + Included objects from relationships. + + + :type value: [SensitiveDataScannerGetConfigIncludedItem] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_get_config_included_item import SensitiveDataScannerGetConfigIncludedItem + return { + "value": ([SensitiveDataScannerGetConfigIncludedItem],), + } diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_get_config_included_item.py b/datadog_api_client/v2/model/sensitive_data_scanner_get_config_included_item.py new file mode 100644 index 0000000000..400e9c0691 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_get_config_included_item.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SensitiveDataScannerGetConfigIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to the configuration. + + :param attributes: Attributes of the Sensitive Data Scanner rule. + :type attributes: SensitiveDataScannerRuleAttributes, optional + + :param id: ID of the rule. + :type id: str, optional + + :param relationships: Relationships of a scanning rule. + :type relationships: SensitiveDataScannerRuleRelationships, optional + + :param type: Sensitive Data Scanner rule type. + :type type: SensitiveDataScannerRuleType, 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.sensitive_data_scanner_rule_included_item import SensitiveDataScannerRuleIncludedItem + from datadog_api_client.v2.model.sensitive_data_scanner_group_included_item import SensitiveDataScannerGroupIncludedItem + return { + "oneOf": [ + SensitiveDataScannerRuleIncludedItem, + SensitiveDataScannerGroupIncludedItem, + ], + } diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_get_config_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_get_config_response.py new file mode 100644 index 0000000000..37c91230c5 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_get_config_response.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_get_config_response_data import SensitiveDataScannerGetConfigResponseData + from datadog_api_client.v2.model.sensitive_data_scanner_get_config_included_array import SensitiveDataScannerGetConfigIncludedArray + from datadog_api_client.v2.model.sensitive_data_scanner_meta import SensitiveDataScannerMeta + from datadog_api_client.v2.model.sensitive_data_scanner_rule_included_item import SensitiveDataScannerRuleIncludedItem + from datadog_api_client.v2.model.sensitive_data_scanner_group_included_item import SensitiveDataScannerGroupIncludedItem + +class SensitiveDataScannerGetConfigResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_get_config_response_data import SensitiveDataScannerGetConfigResponseData + from datadog_api_client.v2.model.sensitive_data_scanner_get_config_included_array import SensitiveDataScannerGetConfigIncludedArray + from datadog_api_client.v2.model.sensitive_data_scanner_meta import SensitiveDataScannerMeta + return { + "data": (SensitiveDataScannerGetConfigResponseData,), + "included": (SensitiveDataScannerGetConfigIncludedArray,), + "meta": (SensitiveDataScannerMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: Union[SensitiveDataScannerGetConfigResponseData, UnsetType]=unset, included: Union[SensitiveDataScannerGetConfigIncludedArray, UnsetType]=unset, meta: Union[SensitiveDataScannerMeta, UnsetType]=unset, **kwargs): + """ + Get all groups response. + + :param data: Response data related to the scanning groups. + :type data: SensitiveDataScannerGetConfigResponseData, optional + + :param included: Included objects from relationships. + :type included: SensitiveDataScannerGetConfigIncludedArray, optional + + :param meta: Meta response containing information about the API. + :type meta: SensitiveDataScannerMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_get_config_response_data.py b/datadog_api_client/v2/model/sensitive_data_scanner_get_config_response_data.py new file mode 100644 index 0000000000..f178e66fe0 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_get_config_response_data.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_relationships import SensitiveDataScannerConfigurationRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_type import SensitiveDataScannerConfigurationType + +class SensitiveDataScannerGetConfigResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_relationships import SensitiveDataScannerConfigurationRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_type import SensitiveDataScannerConfigurationType + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "id": (str,), + "relationships": (SensitiveDataScannerConfigurationRelationships,), + "type": (SensitiveDataScannerConfigurationType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[SensitiveDataScannerConfigurationRelationships, UnsetType]=unset, type: Union[SensitiveDataScannerConfigurationType, UnsetType]=unset, **kwargs): + """ + Response data related to the scanning groups. + + :param attributes: Attributes of the Sensitive Data configuration. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param id: ID of the configuration. + :type id: str, optional + + :param relationships: Relationships of the configuration. + :type relationships: SensitiveDataScannerConfigurationRelationships, optional + + :param type: Sensitive Data Scanner configuration type. + :type type: SensitiveDataScannerConfigurationType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group.py b/datadog_api_client/v2/model/sensitive_data_scanner_group.py new file mode 100644 index 0000000000..58b9ad5e8e --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + +class SensitiveDataScannerGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + return { + "id": (str,), + "type": (SensitiveDataScannerGroupType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[SensitiveDataScannerGroupType, UnsetType]=unset, **kwargs): + """ + A scanning group. + + :param id: ID of the group. + :type id: str, optional + + :param type: Sensitive Data Scanner group type. + :type type: SensitiveDataScannerGroupType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_attributes.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_attributes.py new file mode 100644 index 0000000000..f1263afd53 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_filter import SensitiveDataScannerFilter + from datadog_api_client.v2.model.sensitive_data_scanner_product import SensitiveDataScannerProduct + from datadog_api_client.v2.model.sensitive_data_scanner_samplings import SensitiveDataScannerSamplings + +class SensitiveDataScannerGroupAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_filter import SensitiveDataScannerFilter + from datadog_api_client.v2.model.sensitive_data_scanner_product import SensitiveDataScannerProduct + from datadog_api_client.v2.model.sensitive_data_scanner_samplings import SensitiveDataScannerSamplings + return { + "description": (str,), + "filter": (SensitiveDataScannerFilter,), + "is_enabled": (bool,), + "name": (str,), + "product_list": ([SensitiveDataScannerProduct],), + "samplings": ([SensitiveDataScannerSamplings],), + } + attribute_map = { + "description": "description", + "filter": "filter", + "is_enabled": "is_enabled", + "name": "name", + "product_list": "product_list", + "samplings": "samplings", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, filter: Union[SensitiveDataScannerFilter, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, product_list: Union[List[SensitiveDataScannerProduct], UnsetType]=unset, samplings: Union[List[SensitiveDataScannerSamplings], UnsetType]=unset, **kwargs): + """ + Attributes of the Sensitive Data Scanner group. + + :param description: Description of the group. + :type description: str, optional + + :param filter: Filter for the Scanning Group. + :type filter: SensitiveDataScannerFilter, optional + + :param is_enabled: Whether or not the group is enabled. + :type is_enabled: bool, optional + + :param name: Name of the group. + :type name: str, optional + + :param product_list: List of products the scanning group applies. + :type product_list: [SensitiveDataScannerProduct], optional + + :param samplings: List of sampling rates per product type. + :type samplings: [SensitiveDataScannerSamplings], optional + """ + if description is not unset: + kwargs["description"] = description + if filter is not unset: + kwargs["filter"] = filter + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if product_list is not unset: + kwargs["product_list"] = product_list + if samplings is not unset: + kwargs["samplings"] = samplings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_create.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_create.py new file mode 100644 index 0000000000..c86e66c042 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_create.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_attributes import SensitiveDataScannerGroupAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_group_relationships import SensitiveDataScannerGroupRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + +class SensitiveDataScannerGroupCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_attributes import SensitiveDataScannerGroupAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_group_relationships import SensitiveDataScannerGroupRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + return { + "attributes": (SensitiveDataScannerGroupAttributes,), + "relationships": (SensitiveDataScannerGroupRelationships,), + "type": (SensitiveDataScannerGroupType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: SensitiveDataScannerGroupAttributes, type: SensitiveDataScannerGroupType, relationships: Union[SensitiveDataScannerGroupRelationships, UnsetType]=unset, **kwargs): + """ + Data related to the creation of a group. + + :param attributes: Attributes of the Sensitive Data Scanner group. + :type attributes: SensitiveDataScannerGroupAttributes + + :param relationships: Relationships of the group. + :type relationships: SensitiveDataScannerGroupRelationships, optional + + :param type: Sensitive Data Scanner group type. + :type type: SensitiveDataScannerGroupType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_create_request.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_create_request.py new file mode 100644 index 0000000000..d8f2bbdddb --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_create_request.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_create import SensitiveDataScannerGroupCreate + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerGroupCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_create import SensitiveDataScannerGroupCreate + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "data": (SensitiveDataScannerGroupCreate,), + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[SensitiveDataScannerGroupCreate, UnsetType]=unset, meta: Union[SensitiveDataScannerMetaVersionOnly, UnsetType]=unset, **kwargs): + """ + Create group request. + + :param data: Data related to the creation of a group. + :type data: SensitiveDataScannerGroupCreate, optional + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_data.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_data.py new file mode 100644 index 0000000000..ea7808ac1e --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group import SensitiveDataScannerGroup + +class SensitiveDataScannerGroupData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group import SensitiveDataScannerGroup + return { + "data": (SensitiveDataScannerGroup,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SensitiveDataScannerGroup, UnsetType]=unset, **kwargs): + """ + A scanning group data. + + :param data: A scanning group. + :type data: SensitiveDataScannerGroup, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_delete_request.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_delete_request.py new file mode 100644 index 0000000000..184f1bfe53 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_delete_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerGroupDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "meta": "meta", + } + + def __init__(self_, meta: SensitiveDataScannerMetaVersionOnly, **kwargs): + """ + Delete group request. + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly + """ + super().__init__(kwargs) + + + self_.meta = meta diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_delete_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_delete_response.py new file mode 100644 index 0000000000..8f4a360a99 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_delete_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerGroupDeleteResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "meta": "meta", + } + + def __init__(self_, meta: Union[SensitiveDataScannerMetaVersionOnly, UnsetType]=unset, **kwargs): + """ + Delete group response. + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_included_item.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_included_item.py new file mode 100644 index 0000000000..76a25d885c --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_included_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_attributes import SensitiveDataScannerGroupAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_group_relationships import SensitiveDataScannerGroupRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + +class SensitiveDataScannerGroupIncludedItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_attributes import SensitiveDataScannerGroupAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_group_relationships import SensitiveDataScannerGroupRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + return { + "attributes": (SensitiveDataScannerGroupAttributes,), + "id": (str,), + "relationships": (SensitiveDataScannerGroupRelationships,), + "type": (SensitiveDataScannerGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[SensitiveDataScannerGroupAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[SensitiveDataScannerGroupRelationships, UnsetType]=unset, type: Union[SensitiveDataScannerGroupType, UnsetType]=unset, **kwargs): + """ + A Scanning Group included item. + + :param attributes: Attributes of the Sensitive Data Scanner group. + :type attributes: SensitiveDataScannerGroupAttributes, optional + + :param id: ID of the group. + :type id: str, optional + + :param relationships: Relationships of the group. + :type relationships: SensitiveDataScannerGroupRelationships, optional + + :param type: Sensitive Data Scanner group type. + :type type: SensitiveDataScannerGroupType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_item.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_item.py new file mode 100644 index 0000000000..c183c44e8b --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + +class SensitiveDataScannerGroupItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + return { + "id": (str,), + "type": (SensitiveDataScannerGroupType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[SensitiveDataScannerGroupType, UnsetType]=unset, **kwargs): + """ + Data related to a Sensitive Data Scanner Group. + + :param id: ID of the group. + :type id: str, optional + + :param type: Sensitive Data Scanner group type. + :type type: SensitiveDataScannerGroupType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_list.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_list.py new file mode 100644 index 0000000000..124c9b1050 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_list.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_item import SensitiveDataScannerGroupItem + +class SensitiveDataScannerGroupList(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_item import SensitiveDataScannerGroupItem + return { + "data": ([SensitiveDataScannerGroupItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SensitiveDataScannerGroupItem], UnsetType]=unset, **kwargs): + """ + List of groups, ordered. + + :param data: List of groups. The order is important. + :type data: [SensitiveDataScannerGroupItem], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_relationships.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_relationships.py new file mode 100644 index 0000000000..8d83eed966 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_data import SensitiveDataScannerConfigurationData + from datadog_api_client.v2.model.sensitive_data_scanner_rule_data import SensitiveDataScannerRuleData + +class SensitiveDataScannerGroupRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_data import SensitiveDataScannerConfigurationData + from datadog_api_client.v2.model.sensitive_data_scanner_rule_data import SensitiveDataScannerRuleData + return { + "configuration": (SensitiveDataScannerConfigurationData,), + "rules": (SensitiveDataScannerRuleData,), + } + attribute_map = { + "configuration": "configuration", + "rules": "rules", + } + + def __init__(self_, configuration: Union[SensitiveDataScannerConfigurationData, UnsetType]=unset, rules: Union[SensitiveDataScannerRuleData, UnsetType]=unset, **kwargs): + """ + Relationships of the group. + + :param configuration: A Sensitive Data Scanner configuration data. + :type configuration: SensitiveDataScannerConfigurationData, optional + + :param rules: Rules included in the group. + :type rules: SensitiveDataScannerRuleData, optional + """ + if configuration is not unset: + kwargs["configuration"] = configuration + if rules is not unset: + kwargs["rules"] = rules + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_response.py new file mode 100644 index 0000000000..8dcc324397 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_attributes import SensitiveDataScannerGroupAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_group_relationships import SensitiveDataScannerGroupRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + +class SensitiveDataScannerGroupResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_attributes import SensitiveDataScannerGroupAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_group_relationships import SensitiveDataScannerGroupRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + return { + "attributes": (SensitiveDataScannerGroupAttributes,), + "id": (str,), + "relationships": (SensitiveDataScannerGroupRelationships,), + "type": (SensitiveDataScannerGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[SensitiveDataScannerGroupAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[SensitiveDataScannerGroupRelationships, UnsetType]=unset, type: Union[SensitiveDataScannerGroupType, UnsetType]=unset, **kwargs): + """ + Response data related to the creation of a group. + + :param attributes: Attributes of the Sensitive Data Scanner group. + :type attributes: SensitiveDataScannerGroupAttributes, optional + + :param id: ID of the group. + :type id: str, optional + + :param relationships: Relationships of the group. + :type relationships: SensitiveDataScannerGroupRelationships, optional + + :param type: Sensitive Data Scanner group type. + :type type: SensitiveDataScannerGroupType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_type.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_type.py new file mode 100644 index 0000000000..b9b5bd2b59 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SensitiveDataScannerGroupType(ModelSimple): + """ + Sensitive Data Scanner group type. + + :param value: If omitted defaults to "sensitive_data_scanner_group". Must be one of ["sensitive_data_scanner_group"]. + :type value: str + """ + + allowed_values = { + "sensitive_data_scanner_group", + } + SENSITIVE_DATA_SCANNER_GROUP: ClassVar["SensitiveDataScannerGroupType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SensitiveDataScannerGroupType.SENSITIVE_DATA_SCANNER_GROUP = SensitiveDataScannerGroupType("sensitive_data_scanner_group") diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_update.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_update.py new file mode 100644 index 0000000000..751a89a0f7 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_update.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_attributes import SensitiveDataScannerGroupAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_group_relationships import SensitiveDataScannerGroupRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + +class SensitiveDataScannerGroupUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_attributes import SensitiveDataScannerGroupAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_group_relationships import SensitiveDataScannerGroupRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType + return { + "attributes": (SensitiveDataScannerGroupAttributes,), + "id": (str,), + "relationships": (SensitiveDataScannerGroupRelationships,), + "type": (SensitiveDataScannerGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[SensitiveDataScannerGroupAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[SensitiveDataScannerGroupRelationships, UnsetType]=unset, type: Union[SensitiveDataScannerGroupType, UnsetType]=unset, **kwargs): + """ + Data related to the update of a group. + + :param attributes: Attributes of the Sensitive Data Scanner group. + :type attributes: SensitiveDataScannerGroupAttributes, optional + + :param id: ID of the group. + :type id: str, optional + + :param relationships: Relationships of the group. + :type relationships: SensitiveDataScannerGroupRelationships, optional + + :param type: Sensitive Data Scanner group type. + :type type: SensitiveDataScannerGroupType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_update_request.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_update_request.py new file mode 100644 index 0000000000..5a0050c494 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_update_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_update import SensitiveDataScannerGroupUpdate + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerGroupUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_update import SensitiveDataScannerGroupUpdate + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "data": (SensitiveDataScannerGroupUpdate,), + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: SensitiveDataScannerGroupUpdate, meta: SensitiveDataScannerMetaVersionOnly, **kwargs): + """ + Update group request. + + :param data: Data related to the update of a group. + :type data: SensitiveDataScannerGroupUpdate + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_group_update_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_group_update_response.py new file mode 100644 index 0000000000..d272599e7f --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_group_update_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerGroupUpdateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "meta": "meta", + } + + def __init__(self_, meta: Union[SensitiveDataScannerMetaVersionOnly, UnsetType]=unset, **kwargs): + """ + Update group response. + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_included_keyword_configuration.py b/datadog_api_client/v2/model/sensitive_data_scanner_included_keyword_configuration.py new file mode 100644 index 0000000000..58cce1bdb8 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_included_keyword_configuration.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SensitiveDataScannerIncludedKeywordConfiguration(ModelNormal): + validations = { + "character_count": { + "inclusive_maximum": 50, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "character_count": (int,), + "keywords": ([str],), + "use_recommended_keywords": (bool,), + } + attribute_map = { + "character_count": "character_count", + "keywords": "keywords", + "use_recommended_keywords": "use_recommended_keywords", + } + + def __init__(self_, character_count: int, keywords: List[str], use_recommended_keywords: Union[bool, UnsetType]=unset, **kwargs): + """ + Object defining a set of keywords and a number of characters that help reduce noise. + You can provide a list of keywords you would like to check within a defined proximity of the matching pattern. + If any of the keywords are found within the proximity check, the match is kept. + If none are found, the match is discarded. + + :param character_count: The number of characters behind a match detected by Sensitive Data Scanner to look for the keywords defined. + ``character_count`` should be greater than the maximum length of a keyword defined for a rule. + :type character_count: int + + :param keywords: Keyword list that will be checked during scanning in order to validate a match. + The number of keywords in the list must be less than or equal to 30. + :type keywords: [str] + + :param use_recommended_keywords: Should the rule use the underlying standard pattern keyword configuration. If set to ``true`` , the rule must be tied + to a standard pattern. If set to ``false`` , the specified keywords and ``character_count`` are applied. + :type use_recommended_keywords: bool, optional + """ + if use_recommended_keywords is not unset: + kwargs["use_recommended_keywords"] = use_recommended_keywords + super().__init__(kwargs) + + + self_.character_count = character_count + self_.keywords = keywords diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_meta.py b/datadog_api_client/v2/model/sensitive_data_scanner_meta.py new file mode 100644 index 0000000000..449c38ddb1 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_meta.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SensitiveDataScannerMeta(ModelNormal): + validations = { + "version": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "count_limit": (int,), + "group_count_limit": (int,), + "has_highlight_enabled": (bool,), + "has_multi_pass_enabled": (bool,), + "is_pci_compliant": (bool,), + "version": (int,), + } + attribute_map = { + "count_limit": "count_limit", + "group_count_limit": "group_count_limit", + "has_highlight_enabled": "has_highlight_enabled", + "has_multi_pass_enabled": "has_multi_pass_enabled", + "is_pci_compliant": "is_pci_compliant", + "version": "version", + } + + def __init__(self_, count_limit: Union[int, UnsetType]=unset, group_count_limit: Union[int, UnsetType]=unset, has_highlight_enabled: Union[bool, UnsetType]=unset, has_multi_pass_enabled: Union[bool, UnsetType]=unset, is_pci_compliant: Union[bool, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Meta response containing information about the API. + + :param count_limit: Maximum number of scanning rules allowed for the org. + :type count_limit: int, optional + + :param group_count_limit: Maximum number of scanning groups allowed for the org. + :type group_count_limit: int, optional + + :param has_highlight_enabled: (Deprecated) Whether or not scanned events are highlighted in Logs or RUM for the org. **Deprecated**. + :type has_highlight_enabled: bool, optional + + :param has_multi_pass_enabled: (Deprecated) Whether or not scanned events have multi-pass enabled. **Deprecated**. + :type has_multi_pass_enabled: bool, optional + + :param is_pci_compliant: Whether or not the org is compliant to the payment card industry standard. + :type is_pci_compliant: bool, optional + + :param version: Version of the API. + :type version: int, optional + """ + if count_limit is not unset: + kwargs["count_limit"] = count_limit + if group_count_limit is not unset: + kwargs["group_count_limit"] = group_count_limit + if has_highlight_enabled is not unset: + kwargs["has_highlight_enabled"] = has_highlight_enabled + if has_multi_pass_enabled is not unset: + kwargs["has_multi_pass_enabled"] = has_multi_pass_enabled + if is_pci_compliant is not unset: + kwargs["is_pci_compliant"] = is_pci_compliant + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_meta_version_only.py b/datadog_api_client/v2/model/sensitive_data_scanner_meta_version_only.py new file mode 100644 index 0000000000..cdb69c3498 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_meta_version_only.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SensitiveDataScannerMetaVersionOnly(ModelNormal): + validations = { + "version": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "version": (int,), + } + attribute_map = { + "version": "version", + } + + def __init__(self_, version: Union[int, UnsetType]=unset, **kwargs): + """ + Meta payload containing information about the API. + + :param version: Version of the API (optional). + :type version: int, optional + """ + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_product.py b/datadog_api_client/v2/model/sensitive_data_scanner_product.py new file mode 100644 index 0000000000..2e6a6882c8 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_product.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SensitiveDataScannerProduct(ModelSimple): + """ + Datadog product onto which Sensitive Data Scanner can be activated. + + :param value: If omitted defaults to "logs". Must be one of ["logs", "rum", "events", "apm"]. + :type value: str + """ + + allowed_values = { + "logs", + "rum", + "events", + "apm", + } + LOGS: ClassVar["SensitiveDataScannerProduct"] + RUM: ClassVar["SensitiveDataScannerProduct"] + EVENTS: ClassVar["SensitiveDataScannerProduct"] + APM: ClassVar["SensitiveDataScannerProduct"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SensitiveDataScannerProduct.LOGS = SensitiveDataScannerProduct("logs") +SensitiveDataScannerProduct.RUM = SensitiveDataScannerProduct("rum") +SensitiveDataScannerProduct.EVENTS = SensitiveDataScannerProduct("events") +SensitiveDataScannerProduct.APM = SensitiveDataScannerProduct("apm") diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_reorder_config.py b/datadog_api_client/v2/model/sensitive_data_scanner_reorder_config.py new file mode 100644 index 0000000000..59ac44c602 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_reorder_config.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_relationships import SensitiveDataScannerConfigurationRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_type import SensitiveDataScannerConfigurationType + +class SensitiveDataScannerReorderConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_relationships import SensitiveDataScannerConfigurationRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_configuration_type import SensitiveDataScannerConfigurationType + return { + "id": (str,), + "relationships": (SensitiveDataScannerConfigurationRelationships,), + "type": (SensitiveDataScannerConfigurationType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, relationships: Union[SensitiveDataScannerConfigurationRelationships, UnsetType]=unset, type: Union[SensitiveDataScannerConfigurationType, UnsetType]=unset, **kwargs): + """ + Data related to the reordering of scanning groups. + + :param id: ID of the configuration. + :type id: str, optional + + :param relationships: Relationships of the configuration. + :type relationships: SensitiveDataScannerConfigurationRelationships, optional + + :param type: Sensitive Data Scanner configuration type. + :type type: SensitiveDataScannerConfigurationType, optional + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_reorder_groups_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_reorder_groups_response.py new file mode 100644 index 0000000000..e8eb531359 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_reorder_groups_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_meta import SensitiveDataScannerMeta + +class SensitiveDataScannerReorderGroupsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_meta import SensitiveDataScannerMeta + return { + "meta": (SensitiveDataScannerMeta,), + } + attribute_map = { + "meta": "meta", + } + + def __init__(self_, meta: Union[SensitiveDataScannerMeta, UnsetType]=unset, **kwargs): + """ + Group reorder response. + + :param meta: Meta response containing information about the API. + :type meta: SensitiveDataScannerMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule.py new file mode 100644 index 0000000000..91eeb34cc5 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + +class SensitiveDataScannerRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + return { + "id": (str,), + "type": (SensitiveDataScannerRuleType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[SensitiveDataScannerRuleType, UnsetType]=unset, **kwargs): + """ + Rule item included in the group. + + :param id: ID of the rule. + :type id: str, optional + + :param type: Sensitive Data Scanner rule type. + :type type: SensitiveDataScannerRuleType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_attributes.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_attributes.py new file mode 100644 index 0000000000..56cdfa5d0b --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_attributes.py @@ -0,0 +1,134 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_included_keyword_configuration import SensitiveDataScannerIncludedKeywordConfiguration + from datadog_api_client.v2.model.sensitive_data_scanner_suppressions import SensitiveDataScannerSuppressions + from datadog_api_client.v2.model.sensitive_data_scanner_text_replacement import SensitiveDataScannerTextReplacement + +class SensitiveDataScannerRuleAttributes(ModelNormal): + validations = { + "priority": { + "inclusive_maximum": 5, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_included_keyword_configuration import SensitiveDataScannerIncludedKeywordConfiguration + from datadog_api_client.v2.model.sensitive_data_scanner_suppressions import SensitiveDataScannerSuppressions + from datadog_api_client.v2.model.sensitive_data_scanner_text_replacement import SensitiveDataScannerTextReplacement + return { + "description": (str,), + "excluded_namespaces": ([str],), + "included_keyword_configuration": (SensitiveDataScannerIncludedKeywordConfiguration,), + "is_enabled": (bool,), + "name": (str,), + "namespaces": ([str],), + "pattern": (str,), + "priority": (int,), + "suppressions": (SensitiveDataScannerSuppressions,), + "tags": ([str],), + "text_replacement": (SensitiveDataScannerTextReplacement,), + } + attribute_map = { + "description": "description", + "excluded_namespaces": "excluded_namespaces", + "included_keyword_configuration": "included_keyword_configuration", + "is_enabled": "is_enabled", + "name": "name", + "namespaces": "namespaces", + "pattern": "pattern", + "priority": "priority", + "suppressions": "suppressions", + "tags": "tags", + "text_replacement": "text_replacement", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, excluded_namespaces: Union[List[str], UnsetType]=unset, included_keyword_configuration: Union[SensitiveDataScannerIncludedKeywordConfiguration, UnsetType]=unset, is_enabled: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, namespaces: Union[List[str], UnsetType]=unset, pattern: Union[str, UnsetType]=unset, priority: Union[int, UnsetType]=unset, suppressions: Union[SensitiveDataScannerSuppressions, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, text_replacement: Union[SensitiveDataScannerTextReplacement, UnsetType]=unset, **kwargs): + """ + Attributes of the Sensitive Data Scanner rule. + + :param description: Description of the rule. + :type description: str, optional + + :param excluded_namespaces: Attributes excluded from the scan. If namespaces is provided, it has to be a sub-path of the namespaces array. + :type excluded_namespaces: [str], optional + + :param included_keyword_configuration: Object defining a set of keywords and a number of characters that help reduce noise. + You can provide a list of keywords you would like to check within a defined proximity of the matching pattern. + If any of the keywords are found within the proximity check, the match is kept. + If none are found, the match is discarded. + :type included_keyword_configuration: SensitiveDataScannerIncludedKeywordConfiguration, optional + + :param is_enabled: Whether or not the rule is enabled. + :type is_enabled: bool, optional + + :param name: Name of the rule. + :type name: str, optional + + :param namespaces: Attributes included in the scan. If namespaces is empty or missing, all attributes except excluded_namespaces are scanned. + If both are missing the whole event is scanned. + :type namespaces: [str], optional + + :param pattern: Not included if there is a relationship to a standard pattern. + :type pattern: str, optional + + :param priority: Integer from 1 (high) to 5 (low) indicating rule issue severity. + :type priority: int, optional + + :param suppressions: Object describing the suppressions for a rule. There are three types of suppressions, ``starts_with`` , ``ends_with`` , and ``exact_match``. + Suppressed matches are not obfuscated, counted in metrics, or displayed in the Findings page. + :type suppressions: SensitiveDataScannerSuppressions, optional + + :param tags: List of tags. + :type tags: [str], optional + + :param text_replacement: Object describing how the scanned event will be replaced. + :type text_replacement: SensitiveDataScannerTextReplacement, optional + """ + if description is not unset: + kwargs["description"] = description + if excluded_namespaces is not unset: + kwargs["excluded_namespaces"] = excluded_namespaces + if included_keyword_configuration is not unset: + kwargs["included_keyword_configuration"] = included_keyword_configuration + if is_enabled is not unset: + kwargs["is_enabled"] = is_enabled + if name is not unset: + kwargs["name"] = name + if namespaces is not unset: + kwargs["namespaces"] = namespaces + if pattern is not unset: + kwargs["pattern"] = pattern + if priority is not unset: + kwargs["priority"] = priority + if suppressions is not unset: + kwargs["suppressions"] = suppressions + if tags is not unset: + kwargs["tags"] = tags + if text_replacement is not unset: + kwargs["text_replacement"] = text_replacement + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_create.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_create.py new file mode 100644 index 0000000000..dccf4c081b --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_create.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_rule_attributes import SensitiveDataScannerRuleAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_rule_relationships import SensitiveDataScannerRuleRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + +class SensitiveDataScannerRuleCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_rule_attributes import SensitiveDataScannerRuleAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_rule_relationships import SensitiveDataScannerRuleRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + return { + "attributes": (SensitiveDataScannerRuleAttributes,), + "relationships": (SensitiveDataScannerRuleRelationships,), + "type": (SensitiveDataScannerRuleType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: SensitiveDataScannerRuleAttributes, relationships: SensitiveDataScannerRuleRelationships, type: SensitiveDataScannerRuleType, **kwargs): + """ + Data related to the creation of a rule. + + :param attributes: Attributes of the Sensitive Data Scanner rule. + :type attributes: SensitiveDataScannerRuleAttributes + + :param relationships: Relationships of a scanning rule. + :type relationships: SensitiveDataScannerRuleRelationships + + :param type: Sensitive Data Scanner rule type. + :type type: SensitiveDataScannerRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_create_request.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_create_request.py new file mode 100644 index 0000000000..6d039fd0a5 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_create_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_rule_create import SensitiveDataScannerRuleCreate + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_rule_create import SensitiveDataScannerRuleCreate + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "data": (SensitiveDataScannerRuleCreate,), + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: SensitiveDataScannerRuleCreate, meta: SensitiveDataScannerMetaVersionOnly, **kwargs): + """ + Create rule request. + + :param data: Data related to the creation of a rule. + :type data: SensitiveDataScannerRuleCreate + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_data.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_data.py new file mode 100644 index 0000000000..7fc8d2eb55 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_rule import SensitiveDataScannerRule + +class SensitiveDataScannerRuleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_rule import SensitiveDataScannerRule + return { + "data": ([SensitiveDataScannerRule],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SensitiveDataScannerRule], UnsetType]=unset, **kwargs): + """ + Rules included in the group. + + :param data: Rules included in the group. The order is important. + :type data: [SensitiveDataScannerRule], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_delete_request.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_delete_request.py new file mode 100644 index 0000000000..c10b247cfa --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_delete_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerRuleDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "meta": "meta", + } + + def __init__(self_, meta: SensitiveDataScannerMetaVersionOnly, **kwargs): + """ + Delete rule request. + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly + """ + super().__init__(kwargs) + + + self_.meta = meta diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_delete_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_delete_response.py new file mode 100644 index 0000000000..52dacbaedf --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_delete_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerRuleDeleteResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "meta": "meta", + } + + def __init__(self_, meta: Union[SensitiveDataScannerMetaVersionOnly, UnsetType]=unset, **kwargs): + """ + Delete rule response. + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_included_item.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_included_item.py new file mode 100644 index 0000000000..a414ff1e1e --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_included_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_rule_attributes import SensitiveDataScannerRuleAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_rule_relationships import SensitiveDataScannerRuleRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + +class SensitiveDataScannerRuleIncludedItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_rule_attributes import SensitiveDataScannerRuleAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_rule_relationships import SensitiveDataScannerRuleRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + return { + "attributes": (SensitiveDataScannerRuleAttributes,), + "id": (str,), + "relationships": (SensitiveDataScannerRuleRelationships,), + "type": (SensitiveDataScannerRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[SensitiveDataScannerRuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[SensitiveDataScannerRuleRelationships, UnsetType]=unset, type: Union[SensitiveDataScannerRuleType, UnsetType]=unset, **kwargs): + """ + A Scanning Rule included item. + + :param attributes: Attributes of the Sensitive Data Scanner rule. + :type attributes: SensitiveDataScannerRuleAttributes, optional + + :param id: ID of the rule. + :type id: str, optional + + :param relationships: Relationships of a scanning rule. + :type relationships: SensitiveDataScannerRuleRelationships, optional + + :param type: Sensitive Data Scanner rule type. + :type type: SensitiveDataScannerRuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_relationships.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_relationships.py new file mode 100644 index 0000000000..64c789bec8 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_group_data import SensitiveDataScannerGroupData + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_data import SensitiveDataScannerStandardPatternData + +class SensitiveDataScannerRuleRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_group_data import SensitiveDataScannerGroupData + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_data import SensitiveDataScannerStandardPatternData + return { + "group": (SensitiveDataScannerGroupData,), + "standard_pattern": (SensitiveDataScannerStandardPatternData,), + } + attribute_map = { + "group": "group", + "standard_pattern": "standard_pattern", + } + + def __init__(self_, group: Union[SensitiveDataScannerGroupData, UnsetType]=unset, standard_pattern: Union[SensitiveDataScannerStandardPatternData, UnsetType]=unset, **kwargs): + """ + Relationships of a scanning rule. + + :param group: A scanning group data. + :type group: SensitiveDataScannerGroupData, optional + + :param standard_pattern: A standard pattern. + :type standard_pattern: SensitiveDataScannerStandardPatternData, optional + """ + if group is not unset: + kwargs["group"] = group + if standard_pattern is not unset: + kwargs["standard_pattern"] = standard_pattern + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_response.py new file mode 100644 index 0000000000..c3e2c57dd3 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_rule_attributes import SensitiveDataScannerRuleAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_rule_relationships import SensitiveDataScannerRuleRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + +class SensitiveDataScannerRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_rule_attributes import SensitiveDataScannerRuleAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_rule_relationships import SensitiveDataScannerRuleRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + return { + "attributes": (SensitiveDataScannerRuleAttributes,), + "id": (str,), + "relationships": (SensitiveDataScannerRuleRelationships,), + "type": (SensitiveDataScannerRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[SensitiveDataScannerRuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[SensitiveDataScannerRuleRelationships, UnsetType]=unset, type: Union[SensitiveDataScannerRuleType, UnsetType]=unset, **kwargs): + """ + Response data related to the creation of a rule. + + :param attributes: Attributes of the Sensitive Data Scanner rule. + :type attributes: SensitiveDataScannerRuleAttributes, optional + + :param id: ID of the rule. + :type id: str, optional + + :param relationships: Relationships of a scanning rule. + :type relationships: SensitiveDataScannerRuleRelationships, optional + + :param type: Sensitive Data Scanner rule type. + :type type: SensitiveDataScannerRuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_type.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_type.py new file mode 100644 index 0000000000..3d0135acaf --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SensitiveDataScannerRuleType(ModelSimple): + """ + Sensitive Data Scanner rule type. + + :param value: If omitted defaults to "sensitive_data_scanner_rule". Must be one of ["sensitive_data_scanner_rule"]. + :type value: str + """ + + allowed_values = { + "sensitive_data_scanner_rule", + } + SENSITIVE_DATA_SCANNER_RULE: ClassVar["SensitiveDataScannerRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SensitiveDataScannerRuleType.SENSITIVE_DATA_SCANNER_RULE = SensitiveDataScannerRuleType("sensitive_data_scanner_rule") diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_update.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_update.py new file mode 100644 index 0000000000..6c59fde35a --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_update.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_rule_attributes import SensitiveDataScannerRuleAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_rule_relationships import SensitiveDataScannerRuleRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + +class SensitiveDataScannerRuleUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_rule_attributes import SensitiveDataScannerRuleAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_rule_relationships import SensitiveDataScannerRuleRelationships + from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType + return { + "attributes": (SensitiveDataScannerRuleAttributes,), + "id": (str,), + "relationships": (SensitiveDataScannerRuleRelationships,), + "type": (SensitiveDataScannerRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[SensitiveDataScannerRuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[SensitiveDataScannerRuleRelationships, UnsetType]=unset, type: Union[SensitiveDataScannerRuleType, UnsetType]=unset, **kwargs): + """ + Data related to the update of a rule. + + :param attributes: Attributes of the Sensitive Data Scanner rule. + :type attributes: SensitiveDataScannerRuleAttributes, optional + + :param id: ID of the rule. + :type id: str, optional + + :param relationships: Relationships of a scanning rule. + :type relationships: SensitiveDataScannerRuleRelationships, optional + + :param type: Sensitive Data Scanner rule type. + :type type: SensitiveDataScannerRuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_update_request.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_update_request.py new file mode 100644 index 0000000000..447c0a201c --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_update_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_rule_update import SensitiveDataScannerRuleUpdate + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_rule_update import SensitiveDataScannerRuleUpdate + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "data": (SensitiveDataScannerRuleUpdate,), + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: SensitiveDataScannerRuleUpdate, meta: SensitiveDataScannerMetaVersionOnly, **kwargs): + """ + Update rule request. + + :param data: Data related to the update of a rule. + :type data: SensitiveDataScannerRuleUpdate + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_rule_update_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_rule_update_response.py new file mode 100644 index 0000000000..0ca99c9dd3 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_rule_update_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + +class SensitiveDataScannerRuleUpdateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly + return { + "meta": (SensitiveDataScannerMetaVersionOnly,), + } + attribute_map = { + "meta": "meta", + } + + def __init__(self_, meta: Union[SensitiveDataScannerMetaVersionOnly, UnsetType]=unset, **kwargs): + """ + Update rule response. + + :param meta: Meta payload containing information about the API. + :type meta: SensitiveDataScannerMetaVersionOnly, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_samplings.py b/datadog_api_client/v2/model/sensitive_data_scanner_samplings.py new file mode 100644 index 0000000000..7f4db9efdd --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_samplings.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_product import SensitiveDataScannerProduct + +class SensitiveDataScannerSamplings(ModelNormal): + validations = { + "rate": { + "inclusive_maximum": 100.0, + "inclusive_minimum": 0.0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_product import SensitiveDataScannerProduct + return { + "product": (SensitiveDataScannerProduct,), + "rate": (float,), + } + attribute_map = { + "product": "product", + "rate": "rate", + } + + def __init__(self_, product: Union[SensitiveDataScannerProduct, UnsetType]=unset, rate: Union[float, UnsetType]=unset, **kwargs): + """ + Sampling configurations for the Scanning Group. + + :param product: Datadog product onto which Sensitive Data Scanner can be activated. + :type product: SensitiveDataScannerProduct, optional + + :param rate: Rate at which data in product type will be scanned, as a percentage. + :type rate: float, optional + """ + if product is not unset: + kwargs["product"] = product + if rate is not unset: + kwargs["rate"] = rate + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern.py b/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern.py new file mode 100644 index 0000000000..4aeafaf756 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_type import SensitiveDataScannerStandardPatternType + +class SensitiveDataScannerStandardPattern(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_type import SensitiveDataScannerStandardPatternType + return { + "id": (str,), + "type": (SensitiveDataScannerStandardPatternType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[SensitiveDataScannerStandardPatternType, UnsetType]=unset, **kwargs): + """ + Data containing the standard pattern id. + + :param id: ID of the standard pattern. + :type id: str, optional + + :param type: Sensitive Data Scanner standard pattern type. + :type type: SensitiveDataScannerStandardPatternType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern_attributes.py b/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern_attributes.py new file mode 100644 index 0000000000..124bc07d9a --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SensitiveDataScannerStandardPatternAttributes(ModelNormal): + validations = { + "priority": { + "inclusive_maximum": 5, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "description": (str,), + "included_keywords": ([str],), + "name": (str,), + "pattern": (str,), + "priority": (int,), + "tags": ([str],), + } + attribute_map = { + "description": "description", + "included_keywords": "included_keywords", + "name": "name", + "pattern": "pattern", + "priority": "priority", + "tags": "tags", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, included_keywords: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, pattern: Union[str, UnsetType]=unset, priority: Union[int, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of the Sensitive Data Scanner standard pattern. + + :param description: Description of the standard pattern. + :type description: str, optional + + :param included_keywords: List of included keywords. + :type included_keywords: [str], optional + + :param name: Name of the standard pattern. + :type name: str, optional + + :param pattern: (Deprecated) Regex to match, optionally documented for older standard rules. Refer to the ``description`` field to understand what the rule does. **Deprecated**. + :type pattern: str, optional + + :param priority: Integer from 1 (high) to 5 (low) indicating standard pattern issue severity. + :type priority: int, optional + + :param tags: List of tags. + :type tags: [str], optional + """ + if description is not unset: + kwargs["description"] = description + if included_keywords is not unset: + kwargs["included_keywords"] = included_keywords + if name is not unset: + kwargs["name"] = name + if pattern is not unset: + kwargs["pattern"] = pattern + if priority is not unset: + kwargs["priority"] = priority + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern_data.py b/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern_data.py new file mode 100644 index 0000000000..31fc0e70fc --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern import SensitiveDataScannerStandardPattern + +class SensitiveDataScannerStandardPatternData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern import SensitiveDataScannerStandardPattern + return { + "data": (SensitiveDataScannerStandardPattern,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SensitiveDataScannerStandardPattern, UnsetType]=unset, **kwargs): + """ + A standard pattern. + + :param data: Data containing the standard pattern id. + :type data: SensitiveDataScannerStandardPattern, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern_type.py b/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern_type.py new file mode 100644 index 0000000000..ae93211b41 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_standard_pattern_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SensitiveDataScannerStandardPatternType(ModelSimple): + """ + Sensitive Data Scanner standard pattern type. + + :param value: If omitted defaults to "sensitive_data_scanner_standard_pattern". Must be one of ["sensitive_data_scanner_standard_pattern"]. + :type value: str + """ + + allowed_values = { + "sensitive_data_scanner_standard_pattern", + } + SENSITIVE_DATA_SCANNER_STANDARD_PATTERN: ClassVar["SensitiveDataScannerStandardPatternType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SensitiveDataScannerStandardPatternType.SENSITIVE_DATA_SCANNER_STANDARD_PATTERN = SensitiveDataScannerStandardPatternType("sensitive_data_scanner_standard_pattern") diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_standard_patterns_response.py b/datadog_api_client/v2/model/sensitive_data_scanner_standard_patterns_response.py new file mode 100644 index 0000000000..44689ad3fb --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_standard_patterns_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SensitiveDataScannerStandardPatternsResponse(ModelSimple): + """ + List Standard patterns response. + + + :type value: [SensitiveDataScannerStandardPatternsResponseItem] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_standard_patterns_response_item import SensitiveDataScannerStandardPatternsResponseItem + return { + "value": ([SensitiveDataScannerStandardPatternsResponseItem],), + } diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_standard_patterns_response_data.py b/datadog_api_client/v2/model/sensitive_data_scanner_standard_patterns_response_data.py new file mode 100644 index 0000000000..2e1c4a1737 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_standard_patterns_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_standard_patterns_response import SensitiveDataScannerStandardPatternsResponse + +class SensitiveDataScannerStandardPatternsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_standard_patterns_response import SensitiveDataScannerStandardPatternsResponse + return { + "data": (SensitiveDataScannerStandardPatternsResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SensitiveDataScannerStandardPatternsResponse, UnsetType]=unset, **kwargs): + """ + List Standard patterns response data. + + :param data: List Standard patterns response. + :type data: SensitiveDataScannerStandardPatternsResponse, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_standard_patterns_response_item.py b/datadog_api_client/v2/model/sensitive_data_scanner_standard_patterns_response_item.py new file mode 100644 index 0000000000..a9b8f094d9 --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_standard_patterns_response_item.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_attributes import SensitiveDataScannerStandardPatternAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_type import SensitiveDataScannerStandardPatternType + +class SensitiveDataScannerStandardPatternsResponseItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_attributes import SensitiveDataScannerStandardPatternAttributes + from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_type import SensitiveDataScannerStandardPatternType + return { + "attributes": (SensitiveDataScannerStandardPatternAttributes,), + "id": (str,), + "type": (SensitiveDataScannerStandardPatternType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SensitiveDataScannerStandardPatternAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SensitiveDataScannerStandardPatternType, UnsetType]=unset, **kwargs): + """ + Standard pattern item. + + :param attributes: Attributes of the Sensitive Data Scanner standard pattern. + :type attributes: SensitiveDataScannerStandardPatternAttributes, optional + + :param id: ID of the standard pattern. + :type id: str, optional + + :param type: Sensitive Data Scanner standard pattern type. + :type type: SensitiveDataScannerStandardPatternType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_suppressions.py b/datadog_api_client/v2/model/sensitive_data_scanner_suppressions.py new file mode 100644 index 0000000000..95952911bb --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_suppressions.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SensitiveDataScannerSuppressions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ends_with": ([str],), + "exact_match": ([str],), + "starts_with": ([str],), + } + attribute_map = { + "ends_with": "ends_with", + "exact_match": "exact_match", + "starts_with": "starts_with", + } + + def __init__(self_, ends_with: Union[List[str], UnsetType]=unset, exact_match: Union[List[str], UnsetType]=unset, starts_with: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object describing the suppressions for a rule. There are three types of suppressions, ``starts_with`` , ``ends_with`` , and ``exact_match``. + Suppressed matches are not obfuscated, counted in metrics, or displayed in the Findings page. + + :param ends_with: List of strings to use for suppression of matches ending with these strings. + :type ends_with: [str], optional + + :param exact_match: List of strings to use for suppression of matches exactly matching these strings. + :type exact_match: [str], optional + + :param starts_with: List of strings to use for suppression of matches starting with these strings. + :type starts_with: [str], optional + """ + if ends_with is not unset: + kwargs["ends_with"] = ends_with + if exact_match is not unset: + kwargs["exact_match"] = exact_match + if starts_with is not unset: + kwargs["starts_with"] = starts_with + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_text_replacement.py b/datadog_api_client/v2/model/sensitive_data_scanner_text_replacement.py new file mode 100644 index 0000000000..b37af191aa --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_text_replacement.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sensitive_data_scanner_text_replacement_type import SensitiveDataScannerTextReplacementType + +class SensitiveDataScannerTextReplacement(ModelNormal): + validations = { + "number_of_chars": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sensitive_data_scanner_text_replacement_type import SensitiveDataScannerTextReplacementType + return { + "number_of_chars": (int,), + "replacement_string": (str,), + "should_save_match": (bool,), + "type": (SensitiveDataScannerTextReplacementType,), + } + attribute_map = { + "number_of_chars": "number_of_chars", + "replacement_string": "replacement_string", + "should_save_match": "should_save_match", + "type": "type", + } + + def __init__(self_, number_of_chars: Union[int, UnsetType]=unset, replacement_string: Union[str, UnsetType]=unset, should_save_match: Union[bool, UnsetType]=unset, type: Union[SensitiveDataScannerTextReplacementType, UnsetType]=unset, **kwargs): + """ + Object describing how the scanned event will be replaced. + + :param number_of_chars: Required if type == 'partial_replacement_from_beginning' + or 'partial_replacement_from_end'. It must be > 0. + :type number_of_chars: int, optional + + :param replacement_string: Required if type == 'replacement_string'. + :type replacement_string: str, optional + + :param should_save_match: Only valid when type == ``replacement_string``. When enabled, matches can be unmasked in logs by users with ‘Data Scanner Unmask’ permission. As a security best practice, avoid masking for highly-sensitive, long-lived data. + :type should_save_match: bool, optional + + :param type: Type of the replacement text. None means no replacement. + hash means the data will be stubbed. replacement_string means that + one can chose a text to replace the data. partial_replacement_from_beginning + allows a user to partially replace the data from the beginning, and + partial_replacement_from_end on the other hand, allows to replace data from + the end. + :type type: SensitiveDataScannerTextReplacementType, optional + """ + if number_of_chars is not unset: + kwargs["number_of_chars"] = number_of_chars + if replacement_string is not unset: + kwargs["replacement_string"] = replacement_string + if should_save_match is not unset: + kwargs["should_save_match"] = should_save_match + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sensitive_data_scanner_text_replacement_type.py b/datadog_api_client/v2/model/sensitive_data_scanner_text_replacement_type.py new file mode 100644 index 0000000000..af4d62ecba --- /dev/null +++ b/datadog_api_client/v2/model/sensitive_data_scanner_text_replacement_type.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SensitiveDataScannerTextReplacementType(ModelSimple): + """ + Type of the replacement text. None means no replacement. + hash means the data will be stubbed. replacement_string means that + one can chose a text to replace the data. partial_replacement_from_beginning + allows a user to partially replace the data from the beginning, and + partial_replacement_from_end on the other hand, allows to replace data from + the end. + + :param value: If omitted defaults to "none". Must be one of ["none", "hash", "replacement_string", "partial_replacement_from_beginning", "partial_replacement_from_end"]. + :type value: str + """ + + allowed_values = { + "none", + "hash", + "replacement_string", + "partial_replacement_from_beginning", + "partial_replacement_from_end", + } + NONE: ClassVar["SensitiveDataScannerTextReplacementType"] + HASH: ClassVar["SensitiveDataScannerTextReplacementType"] + REPLACEMENT_STRING: ClassVar["SensitiveDataScannerTextReplacementType"] + PARTIAL_REPLACEMENT_FROM_BEGINNING: ClassVar["SensitiveDataScannerTextReplacementType"] + PARTIAL_REPLACEMENT_FROM_END: ClassVar["SensitiveDataScannerTextReplacementType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SensitiveDataScannerTextReplacementType.NONE = SensitiveDataScannerTextReplacementType("none") +SensitiveDataScannerTextReplacementType.HASH = SensitiveDataScannerTextReplacementType("hash") +SensitiveDataScannerTextReplacementType.REPLACEMENT_STRING = SensitiveDataScannerTextReplacementType("replacement_string") +SensitiveDataScannerTextReplacementType.PARTIAL_REPLACEMENT_FROM_BEGINNING = SensitiveDataScannerTextReplacementType("partial_replacement_from_beginning") +SensitiveDataScannerTextReplacementType.PARTIAL_REPLACEMENT_FROM_END = SensitiveDataScannerTextReplacementType("partial_replacement_from_end") diff --git a/datadog_api_client/v2/model/service_access_token.py b/datadog_api_client/v2/model/service_access_token.py new file mode 100644 index 0000000000..782e3e797f --- /dev/null +++ b/datadog_api_client/v2/model/service_access_token.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_access_token_attributes import ServiceAccessTokenAttributes + from datadog_api_client.v2.model.service_access_token_relationships import ServiceAccessTokenRelationships + from datadog_api_client.v2.model.service_access_tokens_type import ServiceAccessTokensType + +class ServiceAccessToken(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_access_token_attributes import ServiceAccessTokenAttributes + from datadog_api_client.v2.model.service_access_token_relationships import ServiceAccessTokenRelationships + from datadog_api_client.v2.model.service_access_tokens_type import ServiceAccessTokensType + return { + "attributes": (ServiceAccessTokenAttributes,), + "id": (str,), + "relationships": (ServiceAccessTokenRelationships,), + "type": (ServiceAccessTokensType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[ServiceAccessTokenAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ServiceAccessTokenRelationships, UnsetType]=unset, type: Union[ServiceAccessTokensType, UnsetType]=unset, **kwargs): + """ + Datadog access token. + + :param attributes: Attributes of an access token. + :type attributes: ServiceAccessTokenAttributes, optional + + :param id: ID of the access token. + :type id: str, optional + + :param relationships: Resources related to the access token. + :type relationships: ServiceAccessTokenRelationships, optional + + :param type: Service access tokens resource type. + :type type: ServiceAccessTokensType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_access_token_attributes.py b/datadog_api_client/v2/model/service_access_token_attributes.py new file mode 100644 index 0000000000..8326b2bce8 --- /dev/null +++ b/datadog_api_client/v2/model/service_access_token_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceAccessTokenAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "expires_at": (datetime, none_type), + "last_used_at": (datetime, none_type), + "modified_at": (datetime, none_type), + "name": (str,), + "public_portion": (str,), + "scopes": ([str],), + } + attribute_map = { + "created_at": "created_at", + "expires_at": "expires_at", + "last_used_at": "last_used_at", + "modified_at": "modified_at", + "name": "name", + "public_portion": "public_portion", + "scopes": "scopes", + } + read_only_vars = { + "created_at", + "expires_at", + "last_used_at", + "modified_at", + "public_portion", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, expires_at: Union[datetime, none_type, UnsetType]=unset, last_used_at: Union[datetime, none_type, UnsetType]=unset, modified_at: Union[datetime, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, public_portion: Union[str, UnsetType]=unset, scopes: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of an access token. + + :param created_at: Creation date of the access token. + :type created_at: datetime, optional + + :param expires_at: Expiration date of the access token. + :type expires_at: datetime, none_type, optional + + :param last_used_at: Date the access token was last used. + :type last_used_at: datetime, none_type, optional + + :param modified_at: Date of last modification of the access token. + :type modified_at: datetime, none_type, optional + + :param name: Name of the access token. + :type name: str, optional + + :param public_portion: The public portion of the access token. + :type public_portion: str, optional + + :param scopes: Array of scopes granted to the access token. + :type scopes: [str], optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if expires_at is not unset: + kwargs["expires_at"] = expires_at + if last_used_at is not unset: + kwargs["last_used_at"] = last_used_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if public_portion is not unset: + kwargs["public_portion"] = public_portion + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_access_token_create_response.py b/datadog_api_client/v2/model/service_access_token_create_response.py new file mode 100644 index 0000000000..dd99938b8d --- /dev/null +++ b/datadog_api_client/v2/model/service_access_token_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.full_service_access_token import FullServiceAccessToken + +class ServiceAccessTokenCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.full_service_access_token import FullServiceAccessToken + return { + "data": (FullServiceAccessToken,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[FullServiceAccessToken, UnsetType]=unset, **kwargs): + """ + Response for creating an access token. Includes the token key. + + :param data: Datadog access token, including the token key. + :type data: FullServiceAccessToken, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_access_token_relationships.py b/datadog_api_client/v2/model/service_access_token_relationships.py new file mode 100644 index 0000000000..fd838b7828 --- /dev/null +++ b/datadog_api_client/v2/model/service_access_token_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_service_account import RelationshipToServiceAccount + +class ServiceAccessTokenRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_service_account import RelationshipToServiceAccount + return { + "owned_by": (RelationshipToServiceAccount,), + } + attribute_map = { + "owned_by": "owned_by", + } + + def __init__(self_, owned_by: Union[RelationshipToServiceAccount, UnsetType]=unset, **kwargs): + """ + Resources related to the access token. + + :param owned_by: Relationship to service account. + :type owned_by: RelationshipToServiceAccount, optional + """ + if owned_by is not unset: + kwargs["owned_by"] = owned_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_access_token_response.py b/datadog_api_client/v2/model/service_access_token_response.py new file mode 100644 index 0000000000..859654576e --- /dev/null +++ b/datadog_api_client/v2/model/service_access_token_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_access_token import ServiceAccessToken + +class ServiceAccessTokenResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_access_token import ServiceAccessToken + return { + "data": (ServiceAccessToken,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ServiceAccessToken, UnsetType]=unset, **kwargs): + """ + Response for retrieving an access token. + + :param data: Datadog access token. + :type data: ServiceAccessToken, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_access_token_response_meta.py b/datadog_api_client/v2/model/service_access_token_response_meta.py new file mode 100644 index 0000000000..96e007ce9a --- /dev/null +++ b/datadog_api_client/v2/model/service_access_token_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_access_token_response_meta_page import ServiceAccessTokenResponseMetaPage + +class ServiceAccessTokenResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_access_token_response_meta_page import ServiceAccessTokenResponseMetaPage + return { + "page": (ServiceAccessTokenResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[ServiceAccessTokenResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Additional information related to the access token response. + + :param page: Pagination information. + :type page: ServiceAccessTokenResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_access_token_response_meta_page.py b/datadog_api_client/v2/model/service_access_token_response_meta_page.py new file mode 100644 index 0000000000..bb7051e733 --- /dev/null +++ b/datadog_api_client/v2/model/service_access_token_response_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceAccessTokenResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_filtered_count": (int,), + } + attribute_map = { + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, total_filtered_count: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination information. + + :param total_filtered_count: Total filtered access token count. + :type total_filtered_count: int, optional + """ + if total_filtered_count is not unset: + kwargs["total_filtered_count"] = total_filtered_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_access_tokens_type.py b/datadog_api_client/v2/model/service_access_tokens_type.py new file mode 100644 index 0000000000..862c2c8861 --- /dev/null +++ b/datadog_api_client/v2/model/service_access_tokens_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceAccessTokensType(ModelSimple): + """ + Service access tokens resource type. + + :param value: If omitted defaults to "service_access_tokens". Must be one of ["service_access_tokens"]. + :type value: str + """ + + allowed_values = { + "service_access_tokens", + } + SERVICE_ACCESS_TOKENS: ClassVar["ServiceAccessTokensType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceAccessTokensType.SERVICE_ACCESS_TOKENS = ServiceAccessTokensType("service_access_tokens") diff --git a/datadog_api_client/v2/model/service_account_access_token_create_attributes.py b/datadog_api_client/v2/model/service_account_access_token_create_attributes.py new file mode 100644 index 0000000000..439ac9a38c --- /dev/null +++ b/datadog_api_client/v2/model/service_account_access_token_create_attributes.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceAccountAccessTokenCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "expires_at": (datetime,), + "name": (str,), + "scopes": ([str],), + } + attribute_map = { + "expires_at": "expires_at", + "name": "name", + "scopes": "scopes", + } + + def __init__(self_, name: str, scopes: List[str], expires_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes used to create a service account access token. + + :param expires_at: Expiration date of the access token. Optional for service account tokens. + :type expires_at: datetime, optional + + :param name: Name of the access token. + :type name: str + + :param scopes: Array of scopes to grant the access token. + :type scopes: [str] + """ + if expires_at is not unset: + kwargs["expires_at"] = expires_at + super().__init__(kwargs) + + + self_.name = name + self_.scopes = scopes diff --git a/datadog_api_client/v2/model/service_account_access_token_create_data.py b/datadog_api_client/v2/model/service_account_access_token_create_data.py new file mode 100644 index 0000000000..10b1642320 --- /dev/null +++ b/datadog_api_client/v2/model/service_account_access_token_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_account_access_token_create_attributes import ServiceAccountAccessTokenCreateAttributes + from datadog_api_client.v2.model.service_access_tokens_type import ServiceAccessTokensType + +class ServiceAccountAccessTokenCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_account_access_token_create_attributes import ServiceAccountAccessTokenCreateAttributes + from datadog_api_client.v2.model.service_access_tokens_type import ServiceAccessTokensType + return { + "attributes": (ServiceAccountAccessTokenCreateAttributes,), + "type": (ServiceAccessTokensType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ServiceAccountAccessTokenCreateAttributes, type: ServiceAccessTokensType, **kwargs): + """ + Object used to create a service account access token. + + :param attributes: Attributes used to create a service account access token. + :type attributes: ServiceAccountAccessTokenCreateAttributes + + :param type: Service access tokens resource type. + :type type: ServiceAccessTokensType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/service_account_access_token_create_request.py b/datadog_api_client/v2/model/service_account_access_token_create_request.py new file mode 100644 index 0000000000..7eac8116b4 --- /dev/null +++ b/datadog_api_client/v2/model/service_account_access_token_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_account_access_token_create_data import ServiceAccountAccessTokenCreateData + +class ServiceAccountAccessTokenCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_account_access_token_create_data import ServiceAccountAccessTokenCreateData + return { + "data": (ServiceAccountAccessTokenCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ServiceAccountAccessTokenCreateData, **kwargs): + """ + Request used to create a service account access token. + + :param data: Object used to create a service account access token. + :type data: ServiceAccountAccessTokenCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_account_access_token_update_attributes.py b/datadog_api_client/v2/model/service_account_access_token_update_attributes.py new file mode 100644 index 0000000000..2b6cf5abfe --- /dev/null +++ b/datadog_api_client/v2/model/service_account_access_token_update_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceAccountAccessTokenUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "scopes": ([str],), + } + attribute_map = { + "name": "name", + "scopes": "scopes", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, scopes: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes used to update a service account access token. + + :param name: Name of the access token. + :type name: str, optional + + :param scopes: Array of scopes to grant the access token. + :type scopes: [str], optional + """ + if name is not unset: + kwargs["name"] = name + if scopes is not unset: + kwargs["scopes"] = scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_account_access_token_update_data.py b/datadog_api_client/v2/model/service_account_access_token_update_data.py new file mode 100644 index 0000000000..57d0bb6e4a --- /dev/null +++ b/datadog_api_client/v2/model/service_account_access_token_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_account_access_token_update_attributes import ServiceAccountAccessTokenUpdateAttributes + from datadog_api_client.v2.model.service_access_tokens_type import ServiceAccessTokensType + +class ServiceAccountAccessTokenUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_account_access_token_update_attributes import ServiceAccountAccessTokenUpdateAttributes + from datadog_api_client.v2.model.service_access_tokens_type import ServiceAccessTokensType + return { + "attributes": (ServiceAccountAccessTokenUpdateAttributes,), + "id": (str,), + "type": (ServiceAccessTokensType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ServiceAccountAccessTokenUpdateAttributes, id: str, type: ServiceAccessTokensType, **kwargs): + """ + Object used to update a service account access token. + + :param attributes: Attributes used to update a service account access token. + :type attributes: ServiceAccountAccessTokenUpdateAttributes + + :param id: ID of the access token. + :type id: str + + :param type: Service access tokens resource type. + :type type: ServiceAccessTokensType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/service_account_access_token_update_request.py b/datadog_api_client/v2/model/service_account_access_token_update_request.py new file mode 100644 index 0000000000..a21da3266c --- /dev/null +++ b/datadog_api_client/v2/model/service_account_access_token_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_account_access_token_update_data import ServiceAccountAccessTokenUpdateData + +class ServiceAccountAccessTokenUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_account_access_token_update_data import ServiceAccountAccessTokenUpdateData + return { + "data": (ServiceAccountAccessTokenUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ServiceAccountAccessTokenUpdateData, **kwargs): + """ + Request used to update a service account access token. + + :param data: Object used to update a service account access token. + :type data: ServiceAccountAccessTokenUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_account_create_attributes.py b/datadog_api_client/v2/model/service_account_create_attributes.py new file mode 100644 index 0000000000..4f79d9b7be --- /dev/null +++ b/datadog_api_client/v2/model/service_account_create_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceAccountCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "name": (str,), + "service_account": (bool,), + "title": (str,), + } + attribute_map = { + "email": "email", + "name": "name", + "service_account": "service_account", + "title": "title", + } + + def __init__(self_, email: str, service_account: bool, name: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the created user. + + :param email: The email of the user. + :type email: str + + :param name: The name of the user. + :type name: str, optional + + :param service_account: Whether the user is a service account. Must be true. + :type service_account: bool + + :param title: The title of the user. + :type title: str, optional + """ + if name is not unset: + kwargs["name"] = name + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + + self_.email = email + self_.service_account = service_account diff --git a/datadog_api_client/v2/model/service_account_create_data.py b/datadog_api_client/v2/model/service_account_create_data.py new file mode 100644 index 0000000000..6207fa6a6e --- /dev/null +++ b/datadog_api_client/v2/model/service_account_create_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_account_create_attributes import ServiceAccountCreateAttributes + from datadog_api_client.v2.model.user_relationships import UserRelationships + from datadog_api_client.v2.model.users_type import UsersType + +class ServiceAccountCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_account_create_attributes import ServiceAccountCreateAttributes + from datadog_api_client.v2.model.user_relationships import UserRelationships + from datadog_api_client.v2.model.users_type import UsersType + return { + "attributes": (ServiceAccountCreateAttributes,), + "relationships": (UserRelationships,), + "type": (UsersType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: ServiceAccountCreateAttributes, type: UsersType, relationships: Union[UserRelationships, UnsetType]=unset, **kwargs): + """ + Object to create a service account User. + + :param attributes: Attributes of the created user. + :type attributes: ServiceAccountCreateAttributes + + :param relationships: Relationships of the user object. + :type relationships: UserRelationships, optional + + :param type: Users resource type. + :type type: UsersType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/service_account_create_request.py b/datadog_api_client/v2/model/service_account_create_request.py new file mode 100644 index 0000000000..9dd1793c99 --- /dev/null +++ b/datadog_api_client/v2/model/service_account_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_account_create_data import ServiceAccountCreateData + +class ServiceAccountCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_account_create_data import ServiceAccountCreateData + return { + "data": (ServiceAccountCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ServiceAccountCreateData, **kwargs): + """ + Create a service account. + + :param data: Object to create a service account User. + :type data: ServiceAccountCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_account_type.py b/datadog_api_client/v2/model/service_account_type.py new file mode 100644 index 0000000000..e2818976fc --- /dev/null +++ b/datadog_api_client/v2/model/service_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceAccountType(ModelSimple): + """ + Service account resource type. + + :param value: If omitted defaults to "service_account". Must be one of ["service_account"]. + :type value: str + """ + + allowed_values = { + "service_account", + } + SERVICE_ACCOUNT: ClassVar["ServiceAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceAccountType.SERVICE_ACCOUNT = ServiceAccountType("service_account") diff --git a/datadog_api_client/v2/model/service_definition_create_response.py b/datadog_api_client/v2/model/service_definition_create_response.py new file mode 100644 index 0000000000..4ddfa338dd --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_create_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_data import ServiceDefinitionData + from datadog_api_client.v2.model.service_definition_v1 import ServiceDefinitionV1 + from datadog_api_client.v2.model.service_definition_v2 import ServiceDefinitionV2 + from datadog_api_client.v2.model.service_definition_v2_dot1 import ServiceDefinitionV2Dot1 + from datadog_api_client.v2.model.service_definition_v2_dot2 import ServiceDefinitionV2Dot2 + +class ServiceDefinitionCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_data import ServiceDefinitionData + return { + "data": ([ServiceDefinitionData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ServiceDefinitionData], UnsetType]=unset, **kwargs): + """ + Create service definitions response. + + :param data: Create service definitions response payload. + :type data: [ServiceDefinitionData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_data.py b/datadog_api_client/v2/model/service_definition_data.py new file mode 100644 index 0000000000..cf448f0c8f --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_data_attributes import ServiceDefinitionDataAttributes + from datadog_api_client.v2.model.service_definition_v1 import ServiceDefinitionV1 + from datadog_api_client.v2.model.service_definition_v2 import ServiceDefinitionV2 + from datadog_api_client.v2.model.service_definition_v2_dot1 import ServiceDefinitionV2Dot1 + from datadog_api_client.v2.model.service_definition_v2_dot2 import ServiceDefinitionV2Dot2 + +class ServiceDefinitionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_data_attributes import ServiceDefinitionDataAttributes + return { + "attributes": (ServiceDefinitionDataAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[ServiceDefinitionDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Service definition data. + + :param attributes: Service definition attributes. + :type attributes: ServiceDefinitionDataAttributes, optional + + :param id: Service definition id. + :type id: str, optional + + :param type: Service definition type. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_data_attributes.py b/datadog_api_client/v2/model/service_definition_data_attributes.py new file mode 100644 index 0000000000..4a4df1a8d2 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_data_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_meta import ServiceDefinitionMeta + from datadog_api_client.v2.model.service_definition_schema import ServiceDefinitionSchema + from datadog_api_client.v2.model.service_definition_v1 import ServiceDefinitionV1 + from datadog_api_client.v2.model.service_definition_v2 import ServiceDefinitionV2 + from datadog_api_client.v2.model.service_definition_v2_dot1 import ServiceDefinitionV2Dot1 + from datadog_api_client.v2.model.service_definition_v2_dot2 import ServiceDefinitionV2Dot2 + +class ServiceDefinitionDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_meta import ServiceDefinitionMeta + from datadog_api_client.v2.model.service_definition_schema import ServiceDefinitionSchema + return { + "meta": (ServiceDefinitionMeta,), + "schema": (ServiceDefinitionSchema,), + } + attribute_map = { + "meta": "meta", + "schema": "schema", + } + + def __init__(self_, meta: Union[ServiceDefinitionMeta, UnsetType]=unset, schema: Union[ServiceDefinitionSchema, ServiceDefinitionV1, ServiceDefinitionV2, ServiceDefinitionV2Dot1, ServiceDefinitionV2Dot2, UnsetType]=unset, **kwargs): + """ + Service definition attributes. + + :param meta: Metadata about a service definition. + :type meta: ServiceDefinitionMeta, optional + + :param schema: Service definition schema. + :type schema: ServiceDefinitionSchema, optional + """ + if meta is not unset: + kwargs["meta"] = meta + if schema is not unset: + kwargs["schema"] = schema + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_get_response.py b/datadog_api_client/v2/model/service_definition_get_response.py new file mode 100644 index 0000000000..4d8319ce5b --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_get_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_data import ServiceDefinitionData + from datadog_api_client.v2.model.service_definition_v1 import ServiceDefinitionV1 + from datadog_api_client.v2.model.service_definition_v2 import ServiceDefinitionV2 + from datadog_api_client.v2.model.service_definition_v2_dot1 import ServiceDefinitionV2Dot1 + from datadog_api_client.v2.model.service_definition_v2_dot2 import ServiceDefinitionV2Dot2 + +class ServiceDefinitionGetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_data import ServiceDefinitionData + return { + "data": (ServiceDefinitionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ServiceDefinitionData, UnsetType]=unset, **kwargs): + """ + Get service definition response. + + :param data: Service definition data. + :type data: ServiceDefinitionData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_meta.py b/datadog_api_client/v2/model/service_definition_meta.py new file mode 100644 index 0000000000..347961f8c8 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_meta.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_meta_warnings import ServiceDefinitionMetaWarnings + +class ServiceDefinitionMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_meta_warnings import ServiceDefinitionMetaWarnings + return { + "github_html_url": (str,), + "ingested_schema_version": (str,), + "ingestion_source": (str,), + "last_modified_time": (str,), + "origin": (str,), + "origin_detail": (str,), + "warnings": ([ServiceDefinitionMetaWarnings],), + } + attribute_map = { + "github_html_url": "github-html-url", + "ingested_schema_version": "ingested-schema-version", + "ingestion_source": "ingestion-source", + "last_modified_time": "last-modified-time", + "origin": "origin", + "origin_detail": "origin-detail", + "warnings": "warnings", + } + + def __init__(self_, github_html_url: Union[str, UnsetType]=unset, ingested_schema_version: Union[str, UnsetType]=unset, ingestion_source: Union[str, UnsetType]=unset, last_modified_time: Union[str, UnsetType]=unset, origin: Union[str, UnsetType]=unset, origin_detail: Union[str, UnsetType]=unset, warnings: Union[List[ServiceDefinitionMetaWarnings], UnsetType]=unset, **kwargs): + """ + Metadata about a service definition. + + :param github_html_url: GitHub HTML URL. + :type github_html_url: str, optional + + :param ingested_schema_version: Ingestion schema version. + :type ingested_schema_version: str, optional + + :param ingestion_source: Ingestion source of the service definition. + :type ingestion_source: str, optional + + :param last_modified_time: Last modified time of the service definition. + :type last_modified_time: str, optional + + :param origin: User defined origin of the service definition. + :type origin: str, optional + + :param origin_detail: User defined origin's detail of the service definition. + :type origin_detail: str, optional + + :param warnings: A list of schema validation warnings. + :type warnings: [ServiceDefinitionMetaWarnings], optional + """ + if github_html_url is not unset: + kwargs["github_html_url"] = github_html_url + if ingested_schema_version is not unset: + kwargs["ingested_schema_version"] = ingested_schema_version + if ingestion_source is not unset: + kwargs["ingestion_source"] = ingestion_source + if last_modified_time is not unset: + kwargs["last_modified_time"] = last_modified_time + if origin is not unset: + kwargs["origin"] = origin + if origin_detail is not unset: + kwargs["origin_detail"] = origin_detail + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_meta_warnings.py b/datadog_api_client/v2/model/service_definition_meta_warnings.py new file mode 100644 index 0000000000..dfdbab6c47 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_meta_warnings.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionMetaWarnings(ModelNormal): + @cached_property + def openapi_types(_): + return { + "instance_location": (str,), + "keyword_location": (str,), + "message": (str,), + } + attribute_map = { + "instance_location": "instance-location", + "keyword_location": "keyword-location", + "message": "message", + } + + def __init__(self_, instance_location: Union[str, UnsetType]=unset, keyword_location: Union[str, UnsetType]=unset, message: Union[str, UnsetType]=unset, **kwargs): + """ + Schema validation warnings. + + :param instance_location: The warning instance location. + :type instance_location: str, optional + + :param keyword_location: The warning keyword location. + :type keyword_location: str, optional + + :param message: The warning message. + :type message: str, optional + """ + if instance_location is not unset: + kwargs["instance_location"] = instance_location + if keyword_location is not unset: + kwargs["keyword_location"] = keyword_location + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_schema.py b/datadog_api_client/v2/model/service_definition_schema.py new file mode 100644 index 0000000000..ea1787ebab --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_schema.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionSchema(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Service definition schema. + + :param contact: Contact information about the service. + :type contact: ServiceDefinitionV1Contact, optional + + :param extensions: Extensions to V1 schema. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param external_resources: A list of external links related to the services. + :type external_resources: [ServiceDefinitionV1Resource], optional + + :param info: Basic information about a service. + :type info: ServiceDefinitionV1Info + + :param integrations: Third party integrations that Datadog supports. + :type integrations: ServiceDefinitionV1Integrations, optional + + :param org: Org related information about the service. + :type org: ServiceDefinitionV1Org, optional + + :param schema_version: Schema version being used. + :type schema_version: ServiceDefinitionV1Version + + :param tags: A set of custom tags. + :type tags: [str], optional + + :param contacts: A list of contacts related to the services. + :type contacts: [ServiceDefinitionV2Contact], optional + + :param dd_service: Unique identifier of the service. Must be unique across all services and is used to match with a service in Datadog. + :type dd_service: str + + :param dd_team: Experimental feature. A Team handle that matches a Team in the Datadog Teams product. + :type dd_team: str, optional + + :param docs: A list of documentation related to the services. + :type docs: [ServiceDefinitionV2Doc], optional + + :param links: A list of links related to the services. + :type links: [ServiceDefinitionV2Link], optional + + :param repos: A list of code repositories related to the services. + :type repos: [ServiceDefinitionV2Repo], optional + + :param team: Team that owns the service. + :type team: str, optional + + :param application: Identifier for a group of related services serving a product feature, which the service is a part of. + :type application: str, optional + + :param description: A short description of the service. + :type description: str, optional + + :param lifecycle: The current life cycle phase of the service. + :type lifecycle: str, optional + + :param tier: Importance of the service. + :type tier: str, optional + + :param ci_pipeline_fingerprints: A set of CI fingerprints. + :type ci_pipeline_fingerprints: [str], optional + + :param languages: The service's programming language. Datadog recognizes the following languages: `dotnet`, `go`, `java`, `js`, `php`, `python`, `ruby`, and `c++`. + :type languages: [str], optional + + :param type: The type of service. + :type type: str, 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.service_definition_v1 import ServiceDefinitionV1 + from datadog_api_client.v2.model.service_definition_v2 import ServiceDefinitionV2 + from datadog_api_client.v2.model.service_definition_v2_dot1 import ServiceDefinitionV2Dot1 + from datadog_api_client.v2.model.service_definition_v2_dot2 import ServiceDefinitionV2Dot2 + return { + "oneOf": [ + ServiceDefinitionV1, + ServiceDefinitionV2, + ServiceDefinitionV2Dot1, + ServiceDefinitionV2Dot2, + ], + } diff --git a/datadog_api_client/v2/model/service_definition_schema_versions.py b/datadog_api_client/v2/model/service_definition_schema_versions.py new file mode 100644 index 0000000000..6018feef84 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_schema_versions.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionSchemaVersions(ModelSimple): + """ + Schema versions + + :param value: Must be one of ["v1", "v2", "v2.1", "v2.2"]. + :type value: str + """ + + allowed_values = { + "v1", + "v2", + "v2.1", + "v2.2", + } + V1: ClassVar["ServiceDefinitionSchemaVersions"] + V2: ClassVar["ServiceDefinitionSchemaVersions"] + V2_1: ClassVar["ServiceDefinitionSchemaVersions"] + V2_2: ClassVar["ServiceDefinitionSchemaVersions"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionSchemaVersions.V1 = ServiceDefinitionSchemaVersions("v1") +ServiceDefinitionSchemaVersions.V2 = ServiceDefinitionSchemaVersions("v2") +ServiceDefinitionSchemaVersions.V2_1 = ServiceDefinitionSchemaVersions("v2.1") +ServiceDefinitionSchemaVersions.V2_2 = ServiceDefinitionSchemaVersions("v2.2") diff --git a/datadog_api_client/v2/model/service_definition_v1.py b/datadog_api_client/v2/model/service_definition_v1.py new file mode 100644 index 0000000000..dc2952c950 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v1.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v1_contact import ServiceDefinitionV1Contact + from datadog_api_client.v2.model.service_definition_v1_resource import ServiceDefinitionV1Resource + from datadog_api_client.v2.model.service_definition_v1_info import ServiceDefinitionV1Info + from datadog_api_client.v2.model.service_definition_v1_integrations import ServiceDefinitionV1Integrations + from datadog_api_client.v2.model.service_definition_v1_org import ServiceDefinitionV1Org + from datadog_api_client.v2.model.service_definition_v1_version import ServiceDefinitionV1Version + +class ServiceDefinitionV1(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v1_contact import ServiceDefinitionV1Contact + from datadog_api_client.v2.model.service_definition_v1_resource import ServiceDefinitionV1Resource + from datadog_api_client.v2.model.service_definition_v1_info import ServiceDefinitionV1Info + from datadog_api_client.v2.model.service_definition_v1_integrations import ServiceDefinitionV1Integrations + from datadog_api_client.v2.model.service_definition_v1_org import ServiceDefinitionV1Org + from datadog_api_client.v2.model.service_definition_v1_version import ServiceDefinitionV1Version + return { + "contact": (ServiceDefinitionV1Contact,), + "extensions": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "external_resources": ([ServiceDefinitionV1Resource],), + "info": (ServiceDefinitionV1Info,), + "integrations": (ServiceDefinitionV1Integrations,), + "org": (ServiceDefinitionV1Org,), + "schema_version": (ServiceDefinitionV1Version,), + "tags": ([str],), + } + attribute_map = { + "contact": "contact", + "extensions": "extensions", + "external_resources": "external-resources", + "info": "info", + "integrations": "integrations", + "org": "org", + "schema_version": "schema-version", + "tags": "tags", + } + + def __init__(self_, info: ServiceDefinitionV1Info, schema_version: ServiceDefinitionV1Version, contact: Union[ServiceDefinitionV1Contact, UnsetType]=unset, extensions: Union[Dict[str, Any], UnsetType]=unset, external_resources: Union[List[ServiceDefinitionV1Resource], UnsetType]=unset, integrations: Union[ServiceDefinitionV1Integrations, UnsetType]=unset, org: Union[ServiceDefinitionV1Org, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Deprecated - Service definition V1 for providing additional service metadata and integrations. + + :param contact: Contact information about the service. + :type contact: ServiceDefinitionV1Contact, optional + + :param extensions: Extensions to V1 schema. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param external_resources: A list of external links related to the services. + :type external_resources: [ServiceDefinitionV1Resource], optional + + :param info: Basic information about a service. + :type info: ServiceDefinitionV1Info + + :param integrations: Third party integrations that Datadog supports. + :type integrations: ServiceDefinitionV1Integrations, optional + + :param org: Org related information about the service. + :type org: ServiceDefinitionV1Org, optional + + :param schema_version: Schema version being used. + :type schema_version: ServiceDefinitionV1Version + + :param tags: A set of custom tags. + :type tags: [str], optional + """ + if contact is not unset: + kwargs["contact"] = contact + if extensions is not unset: + kwargs["extensions"] = extensions + if external_resources is not unset: + kwargs["external_resources"] = external_resources + if integrations is not unset: + kwargs["integrations"] = integrations + if org is not unset: + kwargs["org"] = org + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.info = info + self_.schema_version = schema_version diff --git a/datadog_api_client/v2/model/service_definition_v1_contact.py b/datadog_api_client/v2/model/service_definition_v1_contact.py new file mode 100644 index 0000000000..4bc3338fb3 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v1_contact.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV1Contact(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "slack": (str,), + } + attribute_map = { + "email": "email", + "slack": "slack", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, slack: Union[str, UnsetType]=unset, **kwargs): + """ + Contact information about the service. + + :param email: Service owner’s email. + :type email: str, optional + + :param slack: Service owner’s Slack channel. + :type slack: str, optional + """ + if email is not unset: + kwargs["email"] = email + if slack is not unset: + kwargs["slack"] = slack + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_v1_info.py b/datadog_api_client/v2/model/service_definition_v1_info.py new file mode 100644 index 0000000000..e55101b961 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v1_info.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV1Info(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dd_service": (str,), + "description": (str,), + "display_name": (str,), + "service_tier": (str,), + } + attribute_map = { + "dd_service": "dd-service", + "description": "description", + "display_name": "display-name", + "service_tier": "service-tier", + } + + def __init__(self_, dd_service: str, description: Union[str, UnsetType]=unset, display_name: Union[str, UnsetType]=unset, service_tier: Union[str, UnsetType]=unset, **kwargs): + """ + Basic information about a service. + + :param dd_service: Unique identifier of the service. Must be unique across all services and is used to match with a service in Datadog. + :type dd_service: str + + :param description: A short description of the service. + :type description: str, optional + + :param display_name: A friendly name of the service. + :type display_name: str, optional + + :param service_tier: Service tier. + :type service_tier: str, optional + """ + if description is not unset: + kwargs["description"] = description + if display_name is not unset: + kwargs["display_name"] = display_name + if service_tier is not unset: + kwargs["service_tier"] = service_tier + super().__init__(kwargs) + + + self_.dd_service = dd_service diff --git a/datadog_api_client/v2/model/service_definition_v1_integrations.py b/datadog_api_client/v2/model/service_definition_v1_integrations.py new file mode 100644 index 0000000000..fc88be60a4 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v1_integrations.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV1Integrations(ModelNormal): + @cached_property + def openapi_types(_): + return { + "pagerduty": (str,), + } + attribute_map = { + "pagerduty": "pagerduty", + } + + def __init__(self_, pagerduty: Union[str, UnsetType]=unset, **kwargs): + """ + Third party integrations that Datadog supports. + + :param pagerduty: PagerDuty service URL for the service. + :type pagerduty: str, optional + """ + if pagerduty is not unset: + kwargs["pagerduty"] = pagerduty + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_v1_org.py b/datadog_api_client/v2/model/service_definition_v1_org.py new file mode 100644 index 0000000000..5567a0ec4b --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v1_org.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV1Org(ModelNormal): + @cached_property + def openapi_types(_): + return { + "application": (str,), + "team": (str,), + } + attribute_map = { + "application": "application", + "team": "team", + } + + def __init__(self_, application: Union[str, UnsetType]=unset, team: Union[str, UnsetType]=unset, **kwargs): + """ + Org related information about the service. + + :param application: App feature this service supports. + :type application: str, optional + + :param team: Team that owns the service. + :type team: str, optional + """ + if application is not unset: + kwargs["application"] = application + if team is not unset: + kwargs["team"] = team + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_v1_resource.py b/datadog_api_client/v2/model/service_definition_v1_resource.py new file mode 100644 index 0000000000..ae8285dabd --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v1_resource.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v1_resource_type import ServiceDefinitionV1ResourceType + +class ServiceDefinitionV1Resource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v1_resource_type import ServiceDefinitionV1ResourceType + return { + "name": (str,), + "type": (ServiceDefinitionV1ResourceType,), + "url": (str,), + } + attribute_map = { + "name": "name", + "type": "type", + "url": "url", + } + + def __init__(self_, name: str, type: ServiceDefinitionV1ResourceType, url: str, **kwargs): + """ + Service's external links. + + :param name: Link name. + :type name: str + + :param type: Link type. + :type type: ServiceDefinitionV1ResourceType + + :param url: Link URL. + :type url: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type + self_.url = url diff --git a/datadog_api_client/v2/model/service_definition_v1_resource_type.py b/datadog_api_client/v2/model/service_definition_v1_resource_type.py new file mode 100644 index 0000000000..1140bc981c --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v1_resource_type.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV1ResourceType(ModelSimple): + """ + Link type. + + :param value: Must be one of ["doc", "wiki", "runbook", "url", "repo", "dashboard", "oncall", "code", "link"]. + :type value: str + """ + + allowed_values = { + "doc", + "wiki", + "runbook", + "url", + "repo", + "dashboard", + "oncall", + "code", + "link", + } + DOC: ClassVar["ServiceDefinitionV1ResourceType"] + WIKI: ClassVar["ServiceDefinitionV1ResourceType"] + RUNBOOK: ClassVar["ServiceDefinitionV1ResourceType"] + URL: ClassVar["ServiceDefinitionV1ResourceType"] + REPO: ClassVar["ServiceDefinitionV1ResourceType"] + DASHBOARD: ClassVar["ServiceDefinitionV1ResourceType"] + ONCALL: ClassVar["ServiceDefinitionV1ResourceType"] + CODE: ClassVar["ServiceDefinitionV1ResourceType"] + LINK: ClassVar["ServiceDefinitionV1ResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV1ResourceType.DOC = ServiceDefinitionV1ResourceType("doc") +ServiceDefinitionV1ResourceType.WIKI = ServiceDefinitionV1ResourceType("wiki") +ServiceDefinitionV1ResourceType.RUNBOOK = ServiceDefinitionV1ResourceType("runbook") +ServiceDefinitionV1ResourceType.URL = ServiceDefinitionV1ResourceType("url") +ServiceDefinitionV1ResourceType.REPO = ServiceDefinitionV1ResourceType("repo") +ServiceDefinitionV1ResourceType.DASHBOARD = ServiceDefinitionV1ResourceType("dashboard") +ServiceDefinitionV1ResourceType.ONCALL = ServiceDefinitionV1ResourceType("oncall") +ServiceDefinitionV1ResourceType.CODE = ServiceDefinitionV1ResourceType("code") +ServiceDefinitionV1ResourceType.LINK = ServiceDefinitionV1ResourceType("link") diff --git a/datadog_api_client/v2/model/service_definition_v1_version.py b/datadog_api_client/v2/model/service_definition_v1_version.py new file mode 100644 index 0000000000..4a58cac4bb --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v1_version.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV1Version(ModelSimple): + """ + Schema version being used. + + :param value: If omitted defaults to "v1". Must be one of ["v1"]. + :type value: str + """ + + allowed_values = { + "v1", + } + V1: ClassVar["ServiceDefinitionV1Version"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV1Version.V1 = ServiceDefinitionV1Version("v1") diff --git a/datadog_api_client/v2/model/service_definition_v2.py b/datadog_api_client/v2/model/service_definition_v2.py new file mode 100644 index 0000000000..77048dfca1 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2.py @@ -0,0 +1,130 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_contact import ServiceDefinitionV2Contact + from datadog_api_client.v2.model.service_definition_v2_doc import ServiceDefinitionV2Doc + from datadog_api_client.v2.model.service_definition_v2_integrations import ServiceDefinitionV2Integrations + from datadog_api_client.v2.model.service_definition_v2_link import ServiceDefinitionV2Link + from datadog_api_client.v2.model.service_definition_v2_repo import ServiceDefinitionV2Repo + from datadog_api_client.v2.model.service_definition_v2_version import ServiceDefinitionV2Version + from datadog_api_client.v2.model.service_definition_v2_email import ServiceDefinitionV2Email + from datadog_api_client.v2.model.service_definition_v2_slack import ServiceDefinitionV2Slack + from datadog_api_client.v2.model.service_definition_v2_ms_teams import ServiceDefinitionV2MSTeams + +class ServiceDefinitionV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_contact import ServiceDefinitionV2Contact + from datadog_api_client.v2.model.service_definition_v2_doc import ServiceDefinitionV2Doc + from datadog_api_client.v2.model.service_definition_v2_integrations import ServiceDefinitionV2Integrations + from datadog_api_client.v2.model.service_definition_v2_link import ServiceDefinitionV2Link + from datadog_api_client.v2.model.service_definition_v2_repo import ServiceDefinitionV2Repo + from datadog_api_client.v2.model.service_definition_v2_version import ServiceDefinitionV2Version + return { + "contacts": ([ServiceDefinitionV2Contact],), + "dd_service": (str,), + "dd_team": (str,), + "docs": ([ServiceDefinitionV2Doc],), + "extensions": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "integrations": (ServiceDefinitionV2Integrations,), + "links": ([ServiceDefinitionV2Link],), + "repos": ([ServiceDefinitionV2Repo],), + "schema_version": (ServiceDefinitionV2Version,), + "tags": ([str],), + "team": (str,), + } + attribute_map = { + "contacts": "contacts", + "dd_service": "dd-service", + "dd_team": "dd-team", + "docs": "docs", + "extensions": "extensions", + "integrations": "integrations", + "links": "links", + "repos": "repos", + "schema_version": "schema-version", + "tags": "tags", + "team": "team", + } + + def __init__(self_, dd_service: str, schema_version: ServiceDefinitionV2Version, contacts: Union[List[Union[ServiceDefinitionV2Contact, ServiceDefinitionV2Email, ServiceDefinitionV2Slack, ServiceDefinitionV2MSTeams]], UnsetType]=unset, dd_team: Union[str, UnsetType]=unset, docs: Union[List[ServiceDefinitionV2Doc], UnsetType]=unset, extensions: Union[Dict[str, Any], UnsetType]=unset, integrations: Union[ServiceDefinitionV2Integrations, UnsetType]=unset, links: Union[List[ServiceDefinitionV2Link], UnsetType]=unset, repos: Union[List[ServiceDefinitionV2Repo], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, team: Union[str, UnsetType]=unset, **kwargs): + """ + Service definition V2 for providing service metadata and integrations. + + :param contacts: A list of contacts related to the services. + :type contacts: [ServiceDefinitionV2Contact], optional + + :param dd_service: Unique identifier of the service. Must be unique across all services and is used to match with a service in Datadog. + :type dd_service: str + + :param dd_team: Experimental feature. A Team handle that matches a Team in the Datadog Teams product. + :type dd_team: str, optional + + :param docs: A list of documentation related to the services. + :type docs: [ServiceDefinitionV2Doc], optional + + :param extensions: Extensions to V2 schema. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: Third party integrations that Datadog supports. + :type integrations: ServiceDefinitionV2Integrations, optional + + :param links: A list of links related to the services. + :type links: [ServiceDefinitionV2Link], optional + + :param repos: A list of code repositories related to the services. + :type repos: [ServiceDefinitionV2Repo], optional + + :param schema_version: Schema version being used. + :type schema_version: ServiceDefinitionV2Version + + :param tags: A set of custom tags. + :type tags: [str], optional + + :param team: Team that owns the service. + :type team: str, optional + """ + if contacts is not unset: + kwargs["contacts"] = contacts + if dd_team is not unset: + kwargs["dd_team"] = dd_team + if docs is not unset: + kwargs["docs"] = docs + if extensions is not unset: + kwargs["extensions"] = extensions + if integrations is not unset: + kwargs["integrations"] = integrations + if links is not unset: + kwargs["links"] = links + if repos is not unset: + kwargs["repos"] = repos + if tags is not unset: + kwargs["tags"] = tags + if team is not unset: + kwargs["team"] = team + super().__init__(kwargs) + + + self_.dd_service = dd_service + self_.schema_version = schema_version diff --git a/datadog_api_client/v2/model/service_definition_v2_contact.py b/datadog_api_client/v2/model/service_definition_v2_contact.py new file mode 100644 index 0000000000..87259a7178 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_contact.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV2Contact(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Service owner's contacts information. + + :param contact: Contact value. + :type contact: str + + :param name: Contact email. + :type name: str, optional + + :param type: Contact type. + :type type: ServiceDefinitionV2EmailType + """ + 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.service_definition_v2_email import ServiceDefinitionV2Email + from datadog_api_client.v2.model.service_definition_v2_slack import ServiceDefinitionV2Slack + from datadog_api_client.v2.model.service_definition_v2_ms_teams import ServiceDefinitionV2MSTeams + return { + "oneOf": [ + ServiceDefinitionV2Email, + ServiceDefinitionV2Slack, + ServiceDefinitionV2MSTeams, + ], + } diff --git a/datadog_api_client/v2/model/service_definition_v2_doc.py b/datadog_api_client/v2/model/service_definition_v2_doc.py new file mode 100644 index 0000000000..981dab822f --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_doc.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV2Doc(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "provider": (str,), + "url": (str,), + } + attribute_map = { + "name": "name", + "provider": "provider", + "url": "url", + } + + def __init__(self_, name: str, url: str, provider: Union[str, UnsetType]=unset, **kwargs): + """ + Service documents. + + :param name: Document name. + :type name: str + + :param provider: Document provider. + :type provider: str, optional + + :param url: Document URL. + :type url: str + """ + if provider is not unset: + kwargs["provider"] = provider + super().__init__(kwargs) + + + self_.name = name + self_.url = url diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1.py b/datadog_api_client/v2/model/service_definition_v2_dot1.py new file mode 100644 index 0000000000..a357ba4c47 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1.py @@ -0,0 +1,133 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot1_contact import ServiceDefinitionV2Dot1Contact + from datadog_api_client.v2.model.service_definition_v2_dot1_integrations import ServiceDefinitionV2Dot1Integrations + from datadog_api_client.v2.model.service_definition_v2_dot1_link import ServiceDefinitionV2Dot1Link + from datadog_api_client.v2.model.service_definition_v2_dot1_version import ServiceDefinitionV2Dot1Version + from datadog_api_client.v2.model.service_definition_v2_dot1_email import ServiceDefinitionV2Dot1Email + from datadog_api_client.v2.model.service_definition_v2_dot1_slack import ServiceDefinitionV2Dot1Slack + from datadog_api_client.v2.model.service_definition_v2_dot1_ms_teams import ServiceDefinitionV2Dot1MSTeams + +class ServiceDefinitionV2Dot1(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot1_contact import ServiceDefinitionV2Dot1Contact + from datadog_api_client.v2.model.service_definition_v2_dot1_integrations import ServiceDefinitionV2Dot1Integrations + from datadog_api_client.v2.model.service_definition_v2_dot1_link import ServiceDefinitionV2Dot1Link + from datadog_api_client.v2.model.service_definition_v2_dot1_version import ServiceDefinitionV2Dot1Version + return { + "application": (str,), + "contacts": ([ServiceDefinitionV2Dot1Contact],), + "dd_service": (str,), + "description": (str,), + "extensions": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "integrations": (ServiceDefinitionV2Dot1Integrations,), + "lifecycle": (str,), + "links": ([ServiceDefinitionV2Dot1Link],), + "schema_version": (ServiceDefinitionV2Dot1Version,), + "tags": ([str],), + "team": (str,), + "tier": (str,), + } + attribute_map = { + "application": "application", + "contacts": "contacts", + "dd_service": "dd-service", + "description": "description", + "extensions": "extensions", + "integrations": "integrations", + "lifecycle": "lifecycle", + "links": "links", + "schema_version": "schema-version", + "tags": "tags", + "team": "team", + "tier": "tier", + } + + def __init__(self_, dd_service: str, schema_version: ServiceDefinitionV2Dot1Version, application: Union[str, UnsetType]=unset, contacts: Union[List[Union[ServiceDefinitionV2Dot1Contact, ServiceDefinitionV2Dot1Email, ServiceDefinitionV2Dot1Slack, ServiceDefinitionV2Dot1MSTeams]], UnsetType]=unset, description: Union[str, UnsetType]=unset, extensions: Union[Dict[str, Any], UnsetType]=unset, integrations: Union[ServiceDefinitionV2Dot1Integrations, UnsetType]=unset, lifecycle: Union[str, UnsetType]=unset, links: Union[List[ServiceDefinitionV2Dot1Link], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, team: Union[str, UnsetType]=unset, tier: Union[str, UnsetType]=unset, **kwargs): + """ + Service definition v2.1 for providing service metadata and integrations. + + :param application: Identifier for a group of related services serving a product feature, which the service is a part of. + :type application: str, optional + + :param contacts: A list of contacts related to the services. + :type contacts: [ServiceDefinitionV2Dot1Contact], optional + + :param dd_service: Unique identifier of the service. Must be unique across all services and is used to match with a service in Datadog. + :type dd_service: str + + :param description: A short description of the service. + :type description: str, optional + + :param extensions: Extensions to v2.1 schema. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: Third party integrations that Datadog supports. + :type integrations: ServiceDefinitionV2Dot1Integrations, optional + + :param lifecycle: The current life cycle phase of the service. + :type lifecycle: str, optional + + :param links: A list of links related to the services. + :type links: [ServiceDefinitionV2Dot1Link], optional + + :param schema_version: Schema version being used. + :type schema_version: ServiceDefinitionV2Dot1Version + + :param tags: A set of custom tags. + :type tags: [str], optional + + :param team: Team that owns the service. It is used to locate a team defined in Datadog Teams if it exists. + :type team: str, optional + + :param tier: Importance of the service. + :type tier: str, optional + """ + if application is not unset: + kwargs["application"] = application + if contacts is not unset: + kwargs["contacts"] = contacts + if description is not unset: + kwargs["description"] = description + if extensions is not unset: + kwargs["extensions"] = extensions + if integrations is not unset: + kwargs["integrations"] = integrations + if lifecycle is not unset: + kwargs["lifecycle"] = lifecycle + if links is not unset: + kwargs["links"] = links + if tags is not unset: + kwargs["tags"] = tags + if team is not unset: + kwargs["team"] = team + if tier is not unset: + kwargs["tier"] = tier + super().__init__(kwargs) + + + self_.dd_service = dd_service + self_.schema_version = schema_version diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_contact.py b/datadog_api_client/v2/model/service_definition_v2_dot1_contact.py new file mode 100644 index 0000000000..395314362d --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_contact.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV2Dot1Contact(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Service owner's contacts information. + + :param contact: Contact value. + :type contact: str + + :param name: Contact email. + :type name: str, optional + + :param type: Contact type. + :type type: ServiceDefinitionV2Dot1EmailType + """ + 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.service_definition_v2_dot1_email import ServiceDefinitionV2Dot1Email + from datadog_api_client.v2.model.service_definition_v2_dot1_slack import ServiceDefinitionV2Dot1Slack + from datadog_api_client.v2.model.service_definition_v2_dot1_ms_teams import ServiceDefinitionV2Dot1MSTeams + return { + "oneOf": [ + ServiceDefinitionV2Dot1Email, + ServiceDefinitionV2Dot1Slack, + ServiceDefinitionV2Dot1MSTeams, + ], + } diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_email.py b/datadog_api_client/v2/model/service_definition_v2_dot1_email.py new file mode 100644 index 0000000000..d41bede6c3 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_email.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot1_email_type import ServiceDefinitionV2Dot1EmailType + +class ServiceDefinitionV2Dot1Email(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot1_email_type import ServiceDefinitionV2Dot1EmailType + return { + "contact": (str,), + "name": (str,), + "type": (ServiceDefinitionV2Dot1EmailType,), + } + attribute_map = { + "contact": "contact", + "name": "name", + "type": "type", + } + + def __init__(self_, contact: str, type: ServiceDefinitionV2Dot1EmailType, name: Union[str, UnsetType]=unset, **kwargs): + """ + Service owner's email. + + :param contact: Contact value. + :type contact: str + + :param name: Contact email. + :type name: str, optional + + :param type: Contact type. + :type type: ServiceDefinitionV2Dot1EmailType + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.contact = contact + self_.type = type diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_email_type.py b/datadog_api_client/v2/model/service_definition_v2_dot1_email_type.py new file mode 100644 index 0000000000..6cc664be34 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_email_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2Dot1EmailType(ModelSimple): + """ + Contact type. + + :param value: If omitted defaults to "email". Must be one of ["email"]. + :type value: str + """ + + allowed_values = { + "email", + } + EMAIL: ClassVar["ServiceDefinitionV2Dot1EmailType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2Dot1EmailType.EMAIL = ServiceDefinitionV2Dot1EmailType("email") diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_integrations.py b/datadog_api_client/v2/model/service_definition_v2_dot1_integrations.py new file mode 100644 index 0000000000..c3b13321a5 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_integrations.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot1_opsgenie import ServiceDefinitionV2Dot1Opsgenie + from datadog_api_client.v2.model.service_definition_v2_dot1_pagerduty import ServiceDefinitionV2Dot1Pagerduty + +class ServiceDefinitionV2Dot1Integrations(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot1_opsgenie import ServiceDefinitionV2Dot1Opsgenie + from datadog_api_client.v2.model.service_definition_v2_dot1_pagerduty import ServiceDefinitionV2Dot1Pagerduty + return { + "opsgenie": (ServiceDefinitionV2Dot1Opsgenie,), + "pagerduty": (ServiceDefinitionV2Dot1Pagerduty,), + } + attribute_map = { + "opsgenie": "opsgenie", + "pagerduty": "pagerduty", + } + + def __init__(self_, opsgenie: Union[ServiceDefinitionV2Dot1Opsgenie, UnsetType]=unset, pagerduty: Union[ServiceDefinitionV2Dot1Pagerduty, UnsetType]=unset, **kwargs): + """ + Third party integrations that Datadog supports. + + :param opsgenie: Opsgenie integration for the service. + :type opsgenie: ServiceDefinitionV2Dot1Opsgenie, optional + + :param pagerduty: PagerDuty integration for the service. + :type pagerduty: ServiceDefinitionV2Dot1Pagerduty, optional + """ + if opsgenie is not unset: + kwargs["opsgenie"] = opsgenie + if pagerduty is not unset: + kwargs["pagerduty"] = pagerduty + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_link.py b/datadog_api_client/v2/model/service_definition_v2_dot1_link.py new file mode 100644 index 0000000000..b2a0cebe36 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_link.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot1_link_type import ServiceDefinitionV2Dot1LinkType + +class ServiceDefinitionV2Dot1Link(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot1_link_type import ServiceDefinitionV2Dot1LinkType + return { + "name": (str,), + "provider": (str,), + "type": (ServiceDefinitionV2Dot1LinkType,), + "url": (str,), + } + attribute_map = { + "name": "name", + "provider": "provider", + "type": "type", + "url": "url", + } + + def __init__(self_, name: str, type: ServiceDefinitionV2Dot1LinkType, url: str, provider: Union[str, UnsetType]=unset, **kwargs): + """ + Service's external links. + + :param name: Link name. + :type name: str + + :param provider: Link provider. + :type provider: str, optional + + :param type: Link type. + :type type: ServiceDefinitionV2Dot1LinkType + + :param url: Link URL. + :type url: str + """ + if provider is not unset: + kwargs["provider"] = provider + super().__init__(kwargs) + + + self_.name = name + self_.type = type + self_.url = url diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_link_type.py b/datadog_api_client/v2/model/service_definition_v2_dot1_link_type.py new file mode 100644 index 0000000000..48a7d12f6c --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_link_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2Dot1LinkType(ModelSimple): + """ + Link type. + + :param value: Must be one of ["doc", "repo", "runbook", "dashboard", "other"]. + :type value: str + """ + + allowed_values = { + "doc", + "repo", + "runbook", + "dashboard", + "other", + } + DOC: ClassVar["ServiceDefinitionV2Dot1LinkType"] + REPO: ClassVar["ServiceDefinitionV2Dot1LinkType"] + RUNBOOK: ClassVar["ServiceDefinitionV2Dot1LinkType"] + DASHBOARD: ClassVar["ServiceDefinitionV2Dot1LinkType"] + OTHER: ClassVar["ServiceDefinitionV2Dot1LinkType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2Dot1LinkType.DOC = ServiceDefinitionV2Dot1LinkType("doc") +ServiceDefinitionV2Dot1LinkType.REPO = ServiceDefinitionV2Dot1LinkType("repo") +ServiceDefinitionV2Dot1LinkType.RUNBOOK = ServiceDefinitionV2Dot1LinkType("runbook") +ServiceDefinitionV2Dot1LinkType.DASHBOARD = ServiceDefinitionV2Dot1LinkType("dashboard") +ServiceDefinitionV2Dot1LinkType.OTHER = ServiceDefinitionV2Dot1LinkType("other") diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_ms_teams.py b/datadog_api_client/v2/model/service_definition_v2_dot1_ms_teams.py new file mode 100644 index 0000000000..49b87bef1a --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_ms_teams.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot1_ms_teams_type import ServiceDefinitionV2Dot1MSTeamsType + +class ServiceDefinitionV2Dot1MSTeams(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot1_ms_teams_type import ServiceDefinitionV2Dot1MSTeamsType + return { + "contact": (str,), + "name": (str,), + "type": (ServiceDefinitionV2Dot1MSTeamsType,), + } + attribute_map = { + "contact": "contact", + "name": "name", + "type": "type", + } + + def __init__(self_, contact: str, type: ServiceDefinitionV2Dot1MSTeamsType, name: Union[str, UnsetType]=unset, **kwargs): + """ + Service owner's Microsoft Teams. + + :param contact: Contact value. + :type contact: str + + :param name: Contact Microsoft Teams. + :type name: str, optional + + :param type: Contact type. + :type type: ServiceDefinitionV2Dot1MSTeamsType + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.contact = contact + self_.type = type diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_ms_teams_type.py b/datadog_api_client/v2/model/service_definition_v2_dot1_ms_teams_type.py new file mode 100644 index 0000000000..564c8b27cc --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_ms_teams_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2Dot1MSTeamsType(ModelSimple): + """ + Contact type. + + :param value: If omitted defaults to "microsoft-teams". Must be one of ["microsoft-teams"]. + :type value: str + """ + + allowed_values = { + "microsoft-teams", + } + MICROSOFT_TEAMS: ClassVar["ServiceDefinitionV2Dot1MSTeamsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2Dot1MSTeamsType.MICROSOFT_TEAMS = ServiceDefinitionV2Dot1MSTeamsType("microsoft-teams") diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_opsgenie.py b/datadog_api_client/v2/model/service_definition_v2_dot1_opsgenie.py new file mode 100644 index 0000000000..154278153a --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_opsgenie.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot1_opsgenie_region import ServiceDefinitionV2Dot1OpsgenieRegion + +class ServiceDefinitionV2Dot1Opsgenie(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot1_opsgenie_region import ServiceDefinitionV2Dot1OpsgenieRegion + return { + "region": (ServiceDefinitionV2Dot1OpsgenieRegion,), + "service_url": (str,), + } + attribute_map = { + "region": "region", + "service_url": "service-url", + } + + def __init__(self_, service_url: str, region: Union[ServiceDefinitionV2Dot1OpsgenieRegion, UnsetType]=unset, **kwargs): + """ + Opsgenie integration for the service. + + :param region: Opsgenie instance region. + :type region: ServiceDefinitionV2Dot1OpsgenieRegion, optional + + :param service_url: Opsgenie service url. + :type service_url: str + """ + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + + self_.service_url = service_url diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_opsgenie_region.py b/datadog_api_client/v2/model/service_definition_v2_dot1_opsgenie_region.py new file mode 100644 index 0000000000..11d87b0730 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_opsgenie_region.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2Dot1OpsgenieRegion(ModelSimple): + """ + Opsgenie instance region. + + :param value: Must be one of ["US", "EU"]. + :type value: str + """ + + allowed_values = { + "US", + "EU", + } + US: ClassVar["ServiceDefinitionV2Dot1OpsgenieRegion"] + EU: ClassVar["ServiceDefinitionV2Dot1OpsgenieRegion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2Dot1OpsgenieRegion.US = ServiceDefinitionV2Dot1OpsgenieRegion("US") +ServiceDefinitionV2Dot1OpsgenieRegion.EU = ServiceDefinitionV2Dot1OpsgenieRegion("EU") diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_pagerduty.py b/datadog_api_client/v2/model/service_definition_v2_dot1_pagerduty.py new file mode 100644 index 0000000000..4ea0fa5bab --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_pagerduty.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV2Dot1Pagerduty(ModelNormal): + @cached_property + def openapi_types(_): + return { + "service_url": (str,), + } + attribute_map = { + "service_url": "service-url", + } + + def __init__(self_, service_url: Union[str, UnsetType]=unset, **kwargs): + """ + PagerDuty integration for the service. + + :param service_url: PagerDuty service url. + :type service_url: str, optional + """ + if service_url is not unset: + kwargs["service_url"] = service_url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_slack.py b/datadog_api_client/v2/model/service_definition_v2_dot1_slack.py new file mode 100644 index 0000000000..7256e0fcd7 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_slack.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot1_slack_type import ServiceDefinitionV2Dot1SlackType + +class ServiceDefinitionV2Dot1Slack(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot1_slack_type import ServiceDefinitionV2Dot1SlackType + return { + "contact": (str,), + "name": (str,), + "type": (ServiceDefinitionV2Dot1SlackType,), + } + attribute_map = { + "contact": "contact", + "name": "name", + "type": "type", + } + + def __init__(self_, contact: str, type: ServiceDefinitionV2Dot1SlackType, name: Union[str, UnsetType]=unset, **kwargs): + """ + Service owner's Slack channel. + + :param contact: Slack Channel. + :type contact: str + + :param name: Contact Slack. + :type name: str, optional + + :param type: Contact type. + :type type: ServiceDefinitionV2Dot1SlackType + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.contact = contact + self_.type = type diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_slack_type.py b/datadog_api_client/v2/model/service_definition_v2_dot1_slack_type.py new file mode 100644 index 0000000000..0636d44198 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_slack_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2Dot1SlackType(ModelSimple): + """ + Contact type. + + :param value: If omitted defaults to "slack". Must be one of ["slack"]. + :type value: str + """ + + allowed_values = { + "slack", + } + SLACK: ClassVar["ServiceDefinitionV2Dot1SlackType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2Dot1SlackType.SLACK = ServiceDefinitionV2Dot1SlackType("slack") diff --git a/datadog_api_client/v2/model/service_definition_v2_dot1_version.py b/datadog_api_client/v2/model/service_definition_v2_dot1_version.py new file mode 100644 index 0000000000..1fafd9ace8 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot1_version.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2Dot1Version(ModelSimple): + """ + Schema version being used. + + :param value: If omitted defaults to "v2.1". Must be one of ["v2.1"]. + :type value: str + """ + + allowed_values = { + "v2.1", + } + V2_1: ClassVar["ServiceDefinitionV2Dot1Version"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2Dot1Version.V2_1 = ServiceDefinitionV2Dot1Version("v2.1") diff --git a/datadog_api_client/v2/model/service_definition_v2_dot2.py b/datadog_api_client/v2/model/service_definition_v2_dot2.py new file mode 100644 index 0000000000..dad1c6e3e3 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot2.py @@ -0,0 +1,151 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot2_contact import ServiceDefinitionV2Dot2Contact + from datadog_api_client.v2.model.service_definition_v2_dot2_integrations import ServiceDefinitionV2Dot2Integrations + from datadog_api_client.v2.model.service_definition_v2_dot2_link import ServiceDefinitionV2Dot2Link + from datadog_api_client.v2.model.service_definition_v2_dot2_version import ServiceDefinitionV2Dot2Version + +class ServiceDefinitionV2Dot2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot2_contact import ServiceDefinitionV2Dot2Contact + from datadog_api_client.v2.model.service_definition_v2_dot2_integrations import ServiceDefinitionV2Dot2Integrations + from datadog_api_client.v2.model.service_definition_v2_dot2_link import ServiceDefinitionV2Dot2Link + from datadog_api_client.v2.model.service_definition_v2_dot2_version import ServiceDefinitionV2Dot2Version + return { + "application": (str,), + "ci_pipeline_fingerprints": ([str],), + "contacts": ([ServiceDefinitionV2Dot2Contact],), + "dd_service": (str,), + "description": (str,), + "extensions": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "integrations": (ServiceDefinitionV2Dot2Integrations,), + "languages": ([str],), + "lifecycle": (str,), + "links": ([ServiceDefinitionV2Dot2Link],), + "schema_version": (ServiceDefinitionV2Dot2Version,), + "tags": ([str],), + "team": (str,), + "tier": (str,), + "type": (str,), + } + attribute_map = { + "application": "application", + "ci_pipeline_fingerprints": "ci-pipeline-fingerprints", + "contacts": "contacts", + "dd_service": "dd-service", + "description": "description", + "extensions": "extensions", + "integrations": "integrations", + "languages": "languages", + "lifecycle": "lifecycle", + "links": "links", + "schema_version": "schema-version", + "tags": "tags", + "team": "team", + "tier": "tier", + "type": "type", + } + + def __init__(self_, dd_service: str, schema_version: ServiceDefinitionV2Dot2Version, application: Union[str, UnsetType]=unset, ci_pipeline_fingerprints: Union[List[str], UnsetType]=unset, contacts: Union[List[ServiceDefinitionV2Dot2Contact], UnsetType]=unset, description: Union[str, UnsetType]=unset, extensions: Union[Dict[str, Any], UnsetType]=unset, integrations: Union[ServiceDefinitionV2Dot2Integrations, UnsetType]=unset, languages: Union[List[str], UnsetType]=unset, lifecycle: Union[str, UnsetType]=unset, links: Union[List[ServiceDefinitionV2Dot2Link], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, team: Union[str, UnsetType]=unset, tier: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Service definition v2.2 for providing service metadata and integrations. + + :param application: Identifier for a group of related services serving a product feature, which the service is a part of. + :type application: str, optional + + :param ci_pipeline_fingerprints: A set of CI fingerprints. + :type ci_pipeline_fingerprints: [str], optional + + :param contacts: A list of contacts related to the services. + :type contacts: [ServiceDefinitionV2Dot2Contact], optional + + :param dd_service: Unique identifier of the service. Must be unique across all services and is used to match with a service in Datadog. + :type dd_service: str + + :param description: A short description of the service. + :type description: str, optional + + :param extensions: Extensions to v2.2 schema. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: Third party integrations that Datadog supports. + :type integrations: ServiceDefinitionV2Dot2Integrations, optional + + :param languages: The service's programming language. Datadog recognizes the following languages: ``dotnet`` , ``go`` , ``java`` , ``js`` , ``php`` , ``python`` , ``ruby`` , and ``c++``. + :type languages: [str], optional + + :param lifecycle: The current life cycle phase of the service. + :type lifecycle: str, optional + + :param links: A list of links related to the services. + :type links: [ServiceDefinitionV2Dot2Link], optional + + :param schema_version: Schema version being used. + :type schema_version: ServiceDefinitionV2Dot2Version + + :param tags: A set of custom tags. + :type tags: [str], optional + + :param team: Team that owns the service. It is used to locate a team defined in Datadog Teams if it exists. + :type team: str, optional + + :param tier: Importance of the service. + :type tier: str, optional + + :param type: The type of service. + :type type: str, optional + """ + if application is not unset: + kwargs["application"] = application + if ci_pipeline_fingerprints is not unset: + kwargs["ci_pipeline_fingerprints"] = ci_pipeline_fingerprints + if contacts is not unset: + kwargs["contacts"] = contacts + if description is not unset: + kwargs["description"] = description + if extensions is not unset: + kwargs["extensions"] = extensions + if integrations is not unset: + kwargs["integrations"] = integrations + if languages is not unset: + kwargs["languages"] = languages + if lifecycle is not unset: + kwargs["lifecycle"] = lifecycle + if links is not unset: + kwargs["links"] = links + if tags is not unset: + kwargs["tags"] = tags + if team is not unset: + kwargs["team"] = team + if tier is not unset: + kwargs["tier"] = tier + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.dd_service = dd_service + self_.schema_version = schema_version diff --git a/datadog_api_client/v2/model/service_definition_v2_dot2_contact.py b/datadog_api_client/v2/model/service_definition_v2_dot2_contact.py new file mode 100644 index 0000000000..317d098ab2 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot2_contact.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV2Dot2Contact(ModelNormal): + @cached_property + def openapi_types(_): + return { + "contact": (str,), + "name": (str,), + "type": (str,), + } + attribute_map = { + "contact": "contact", + "name": "name", + "type": "type", + } + + def __init__(self_, contact: str, type: str, name: Union[str, UnsetType]=unset, **kwargs): + """ + Service owner's contacts information. + + :param contact: Contact value. + :type contact: str + + :param name: Contact Name. + :type name: str, optional + + :param type: Contact type. Datadog recognizes the following types: ``email`` , ``slack`` , and ``microsoft-teams``. + :type type: str + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.contact = contact + self_.type = type diff --git a/datadog_api_client/v2/model/service_definition_v2_dot2_integrations.py b/datadog_api_client/v2/model/service_definition_v2_dot2_integrations.py new file mode 100644 index 0000000000..81a7dcdcbe --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot2_integrations.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot2_opsgenie import ServiceDefinitionV2Dot2Opsgenie + from datadog_api_client.v2.model.service_definition_v2_dot2_pagerduty import ServiceDefinitionV2Dot2Pagerduty + +class ServiceDefinitionV2Dot2Integrations(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot2_opsgenie import ServiceDefinitionV2Dot2Opsgenie + from datadog_api_client.v2.model.service_definition_v2_dot2_pagerduty import ServiceDefinitionV2Dot2Pagerduty + return { + "opsgenie": (ServiceDefinitionV2Dot2Opsgenie,), + "pagerduty": (ServiceDefinitionV2Dot2Pagerduty,), + } + attribute_map = { + "opsgenie": "opsgenie", + "pagerduty": "pagerduty", + } + + def __init__(self_, opsgenie: Union[ServiceDefinitionV2Dot2Opsgenie, UnsetType]=unset, pagerduty: Union[ServiceDefinitionV2Dot2Pagerduty, UnsetType]=unset, **kwargs): + """ + Third party integrations that Datadog supports. + + :param opsgenie: Opsgenie integration for the service. + :type opsgenie: ServiceDefinitionV2Dot2Opsgenie, optional + + :param pagerduty: PagerDuty integration for the service. + :type pagerduty: ServiceDefinitionV2Dot2Pagerduty, optional + """ + if opsgenie is not unset: + kwargs["opsgenie"] = opsgenie + if pagerduty is not unset: + kwargs["pagerduty"] = pagerduty + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_v2_dot2_link.py b/datadog_api_client/v2/model/service_definition_v2_dot2_link.py new file mode 100644 index 0000000000..8007732157 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot2_link.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV2Dot2Link(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "provider": (str,), + "type": (str,), + "url": (str,), + } + attribute_map = { + "name": "name", + "provider": "provider", + "type": "type", + "url": "url", + } + + def __init__(self_, name: str, type: str, url: str, provider: Union[str, UnsetType]=unset, **kwargs): + """ + Service's external links. + + :param name: Link name. + :type name: str + + :param provider: Link provider. + :type provider: str, optional + + :param type: Link type. Datadog recognizes the following types: ``runbook`` , ``doc`` , ``repo`` , ``dashboard`` , and ``other``. + :type type: str + + :param url: Link URL. + :type url: str + """ + if provider is not unset: + kwargs["provider"] = provider + super().__init__(kwargs) + + + self_.name = name + self_.type = type + self_.url = url diff --git a/datadog_api_client/v2/model/service_definition_v2_dot2_opsgenie.py b/datadog_api_client/v2/model/service_definition_v2_dot2_opsgenie.py new file mode 100644 index 0000000000..007549c8ba --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot2_opsgenie.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_dot2_opsgenie_region import ServiceDefinitionV2Dot2OpsgenieRegion + +class ServiceDefinitionV2Dot2Opsgenie(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_dot2_opsgenie_region import ServiceDefinitionV2Dot2OpsgenieRegion + return { + "region": (ServiceDefinitionV2Dot2OpsgenieRegion,), + "service_url": (str,), + } + attribute_map = { + "region": "region", + "service_url": "service-url", + } + + def __init__(self_, service_url: str, region: Union[ServiceDefinitionV2Dot2OpsgenieRegion, UnsetType]=unset, **kwargs): + """ + Opsgenie integration for the service. + + :param region: Opsgenie instance region. + :type region: ServiceDefinitionV2Dot2OpsgenieRegion, optional + + :param service_url: Opsgenie service url. + :type service_url: str + """ + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + + self_.service_url = service_url diff --git a/datadog_api_client/v2/model/service_definition_v2_dot2_opsgenie_region.py b/datadog_api_client/v2/model/service_definition_v2_dot2_opsgenie_region.py new file mode 100644 index 0000000000..b4a319fbc1 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot2_opsgenie_region.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2Dot2OpsgenieRegion(ModelSimple): + """ + Opsgenie instance region. + + :param value: Must be one of ["US", "EU"]. + :type value: str + """ + + allowed_values = { + "US", + "EU", + } + US: ClassVar["ServiceDefinitionV2Dot2OpsgenieRegion"] + EU: ClassVar["ServiceDefinitionV2Dot2OpsgenieRegion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2Dot2OpsgenieRegion.US = ServiceDefinitionV2Dot2OpsgenieRegion("US") +ServiceDefinitionV2Dot2OpsgenieRegion.EU = ServiceDefinitionV2Dot2OpsgenieRegion("EU") diff --git a/datadog_api_client/v2/model/service_definition_v2_dot2_pagerduty.py b/datadog_api_client/v2/model/service_definition_v2_dot2_pagerduty.py new file mode 100644 index 0000000000..d9f1ab79d1 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot2_pagerduty.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV2Dot2Pagerduty(ModelNormal): + @cached_property + def openapi_types(_): + return { + "service_url": (str,), + } + attribute_map = { + "service_url": "service-url", + } + + def __init__(self_, service_url: Union[str, UnsetType]=unset, **kwargs): + """ + PagerDuty integration for the service. + + :param service_url: PagerDuty service url. + :type service_url: str, optional + """ + if service_url is not unset: + kwargs["service_url"] = service_url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_v2_dot2_version.py b/datadog_api_client/v2/model/service_definition_v2_dot2_version.py new file mode 100644 index 0000000000..a02f899437 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_dot2_version.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2Dot2Version(ModelSimple): + """ + Schema version being used. + + :param value: If omitted defaults to "v2.2". Must be one of ["v2.2"]. + :type value: str + """ + + allowed_values = { + "v2.2", + } + V2_2: ClassVar["ServiceDefinitionV2Dot2Version"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2Dot2Version.V2_2 = ServiceDefinitionV2Dot2Version("v2.2") diff --git a/datadog_api_client/v2/model/service_definition_v2_email.py b/datadog_api_client/v2/model/service_definition_v2_email.py new file mode 100644 index 0000000000..f0a1b8ab77 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_email.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_email_type import ServiceDefinitionV2EmailType + +class ServiceDefinitionV2Email(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_email_type import ServiceDefinitionV2EmailType + return { + "contact": (str,), + "name": (str,), + "type": (ServiceDefinitionV2EmailType,), + } + attribute_map = { + "contact": "contact", + "name": "name", + "type": "type", + } + + def __init__(self_, contact: str, type: ServiceDefinitionV2EmailType, name: Union[str, UnsetType]=unset, **kwargs): + """ + Service owner's email. + + :param contact: Contact value. + :type contact: str + + :param name: Contact email. + :type name: str, optional + + :param type: Contact type. + :type type: ServiceDefinitionV2EmailType + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.contact = contact + self_.type = type diff --git a/datadog_api_client/v2/model/service_definition_v2_email_type.py b/datadog_api_client/v2/model/service_definition_v2_email_type.py new file mode 100644 index 0000000000..5588df0ea2 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_email_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2EmailType(ModelSimple): + """ + Contact type. + + :param value: If omitted defaults to "email". Must be one of ["email"]. + :type value: str + """ + + allowed_values = { + "email", + } + EMAIL: ClassVar["ServiceDefinitionV2EmailType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2EmailType.EMAIL = ServiceDefinitionV2EmailType("email") diff --git a/datadog_api_client/v2/model/service_definition_v2_integrations.py b/datadog_api_client/v2/model/service_definition_v2_integrations.py new file mode 100644 index 0000000000..1eb59b6718 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_integrations.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_opsgenie import ServiceDefinitionV2Opsgenie + +class ServiceDefinitionV2Integrations(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_opsgenie import ServiceDefinitionV2Opsgenie + return { + "opsgenie": (ServiceDefinitionV2Opsgenie,), + "pagerduty": (str,), + } + attribute_map = { + "opsgenie": "opsgenie", + "pagerduty": "pagerduty", + } + + def __init__(self_, opsgenie: Union[ServiceDefinitionV2Opsgenie, UnsetType]=unset, pagerduty: Union[str, UnsetType]=unset, **kwargs): + """ + Third party integrations that Datadog supports. + + :param opsgenie: Opsgenie integration for the service. + :type opsgenie: ServiceDefinitionV2Opsgenie, optional + + :param pagerduty: PagerDuty service URL for the service. + :type pagerduty: str, optional + """ + if opsgenie is not unset: + kwargs["opsgenie"] = opsgenie + if pagerduty is not unset: + kwargs["pagerduty"] = pagerduty + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_definition_v2_link.py b/datadog_api_client/v2/model/service_definition_v2_link.py new file mode 100644 index 0000000000..8904092178 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_link.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_link_type import ServiceDefinitionV2LinkType + +class ServiceDefinitionV2Link(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_link_type import ServiceDefinitionV2LinkType + return { + "name": (str,), + "type": (ServiceDefinitionV2LinkType,), + "url": (str,), + } + attribute_map = { + "name": "name", + "type": "type", + "url": "url", + } + + def __init__(self_, name: str, type: ServiceDefinitionV2LinkType, url: str, **kwargs): + """ + Service's external links. + + :param name: Link name. + :type name: str + + :param type: Link type. + :type type: ServiceDefinitionV2LinkType + + :param url: Link URL. + :type url: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type + self_.url = url diff --git a/datadog_api_client/v2/model/service_definition_v2_link_type.py b/datadog_api_client/v2/model/service_definition_v2_link_type.py new file mode 100644 index 0000000000..255456f6c8 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_link_type.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2LinkType(ModelSimple): + """ + Link type. + + :param value: Must be one of ["doc", "wiki", "runbook", "url", "repo", "dashboard", "oncall", "code", "link"]. + :type value: str + """ + + allowed_values = { + "doc", + "wiki", + "runbook", + "url", + "repo", + "dashboard", + "oncall", + "code", + "link", + } + DOC: ClassVar["ServiceDefinitionV2LinkType"] + WIKI: ClassVar["ServiceDefinitionV2LinkType"] + RUNBOOK: ClassVar["ServiceDefinitionV2LinkType"] + URL: ClassVar["ServiceDefinitionV2LinkType"] + REPO: ClassVar["ServiceDefinitionV2LinkType"] + DASHBOARD: ClassVar["ServiceDefinitionV2LinkType"] + ONCALL: ClassVar["ServiceDefinitionV2LinkType"] + CODE: ClassVar["ServiceDefinitionV2LinkType"] + LINK: ClassVar["ServiceDefinitionV2LinkType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2LinkType.DOC = ServiceDefinitionV2LinkType("doc") +ServiceDefinitionV2LinkType.WIKI = ServiceDefinitionV2LinkType("wiki") +ServiceDefinitionV2LinkType.RUNBOOK = ServiceDefinitionV2LinkType("runbook") +ServiceDefinitionV2LinkType.URL = ServiceDefinitionV2LinkType("url") +ServiceDefinitionV2LinkType.REPO = ServiceDefinitionV2LinkType("repo") +ServiceDefinitionV2LinkType.DASHBOARD = ServiceDefinitionV2LinkType("dashboard") +ServiceDefinitionV2LinkType.ONCALL = ServiceDefinitionV2LinkType("oncall") +ServiceDefinitionV2LinkType.CODE = ServiceDefinitionV2LinkType("code") +ServiceDefinitionV2LinkType.LINK = ServiceDefinitionV2LinkType("link") diff --git a/datadog_api_client/v2/model/service_definition_v2_ms_teams.py b/datadog_api_client/v2/model/service_definition_v2_ms_teams.py new file mode 100644 index 0000000000..0dcd0ff68e --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_ms_teams.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_ms_teams_type import ServiceDefinitionV2MSTeamsType + +class ServiceDefinitionV2MSTeams(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_ms_teams_type import ServiceDefinitionV2MSTeamsType + return { + "contact": (str,), + "name": (str,), + "type": (ServiceDefinitionV2MSTeamsType,), + } + attribute_map = { + "contact": "contact", + "name": "name", + "type": "type", + } + + def __init__(self_, contact: str, type: ServiceDefinitionV2MSTeamsType, name: Union[str, UnsetType]=unset, **kwargs): + """ + Service owner's Microsoft Teams. + + :param contact: Contact value. + :type contact: str + + :param name: Contact Microsoft Teams. + :type name: str, optional + + :param type: Contact type. + :type type: ServiceDefinitionV2MSTeamsType + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.contact = contact + self_.type = type diff --git a/datadog_api_client/v2/model/service_definition_v2_ms_teams_type.py b/datadog_api_client/v2/model/service_definition_v2_ms_teams_type.py new file mode 100644 index 0000000000..b4b14fb1c3 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_ms_teams_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2MSTeamsType(ModelSimple): + """ + Contact type. + + :param value: If omitted defaults to "microsoft-teams". Must be one of ["microsoft-teams"]. + :type value: str + """ + + allowed_values = { + "microsoft-teams", + } + MICROSOFT_TEAMS: ClassVar["ServiceDefinitionV2MSTeamsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2MSTeamsType.MICROSOFT_TEAMS = ServiceDefinitionV2MSTeamsType("microsoft-teams") diff --git a/datadog_api_client/v2/model/service_definition_v2_opsgenie.py b/datadog_api_client/v2/model/service_definition_v2_opsgenie.py new file mode 100644 index 0000000000..014d234307 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_opsgenie.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_opsgenie_region import ServiceDefinitionV2OpsgenieRegion + +class ServiceDefinitionV2Opsgenie(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_opsgenie_region import ServiceDefinitionV2OpsgenieRegion + return { + "region": (ServiceDefinitionV2OpsgenieRegion,), + "service_url": (str,), + } + attribute_map = { + "region": "region", + "service_url": "service-url", + } + + def __init__(self_, service_url: str, region: Union[ServiceDefinitionV2OpsgenieRegion, UnsetType]=unset, **kwargs): + """ + Opsgenie integration for the service. + + :param region: Opsgenie instance region. + :type region: ServiceDefinitionV2OpsgenieRegion, optional + + :param service_url: Opsgenie service url. + :type service_url: str + """ + if region is not unset: + kwargs["region"] = region + super().__init__(kwargs) + + + self_.service_url = service_url diff --git a/datadog_api_client/v2/model/service_definition_v2_opsgenie_region.py b/datadog_api_client/v2/model/service_definition_v2_opsgenie_region.py new file mode 100644 index 0000000000..b7d8d263a3 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_opsgenie_region.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2OpsgenieRegion(ModelSimple): + """ + Opsgenie instance region. + + :param value: Must be one of ["US", "EU"]. + :type value: str + """ + + allowed_values = { + "US", + "EU", + } + US: ClassVar["ServiceDefinitionV2OpsgenieRegion"] + EU: ClassVar["ServiceDefinitionV2OpsgenieRegion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2OpsgenieRegion.US = ServiceDefinitionV2OpsgenieRegion("US") +ServiceDefinitionV2OpsgenieRegion.EU = ServiceDefinitionV2OpsgenieRegion("EU") diff --git a/datadog_api_client/v2/model/service_definition_v2_repo.py b/datadog_api_client/v2/model/service_definition_v2_repo.py new file mode 100644 index 0000000000..e182bed6f8 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_repo.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionV2Repo(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "provider": (str,), + "url": (str,), + } + attribute_map = { + "name": "name", + "provider": "provider", + "url": "url", + } + + def __init__(self_, name: str, url: str, provider: Union[str, UnsetType]=unset, **kwargs): + """ + Service code repositories. + + :param name: Repository name. + :type name: str + + :param provider: Repository provider. + :type provider: str, optional + + :param url: Repository URL. + :type url: str + """ + if provider is not unset: + kwargs["provider"] = provider + super().__init__(kwargs) + + + self_.name = name + self_.url = url diff --git a/datadog_api_client/v2/model/service_definition_v2_slack.py b/datadog_api_client/v2/model/service_definition_v2_slack.py new file mode 100644 index 0000000000..bbc0a480f5 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_slack.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_v2_slack_type import ServiceDefinitionV2SlackType + +class ServiceDefinitionV2Slack(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_v2_slack_type import ServiceDefinitionV2SlackType + return { + "contact": (str,), + "name": (str,), + "type": (ServiceDefinitionV2SlackType,), + } + attribute_map = { + "contact": "contact", + "name": "name", + "type": "type", + } + + def __init__(self_, contact: str, type: ServiceDefinitionV2SlackType, name: Union[str, UnsetType]=unset, **kwargs): + """ + Service owner's Slack channel. + + :param contact: Slack Channel. + :type contact: str + + :param name: Contact Slack. + :type name: str, optional + + :param type: Contact type. + :type type: ServiceDefinitionV2SlackType + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.contact = contact + self_.type = type diff --git a/datadog_api_client/v2/model/service_definition_v2_slack_type.py b/datadog_api_client/v2/model/service_definition_v2_slack_type.py new file mode 100644 index 0000000000..25f7bae0bd --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_slack_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2SlackType(ModelSimple): + """ + Contact type. + + :param value: If omitted defaults to "slack". Must be one of ["slack"]. + :type value: str + """ + + allowed_values = { + "slack", + } + SLACK: ClassVar["ServiceDefinitionV2SlackType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2SlackType.SLACK = ServiceDefinitionV2SlackType("slack") diff --git a/datadog_api_client/v2/model/service_definition_v2_version.py b/datadog_api_client/v2/model/service_definition_v2_version.py new file mode 100644 index 0000000000..707186c308 --- /dev/null +++ b/datadog_api_client/v2/model/service_definition_v2_version.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceDefinitionV2Version(ModelSimple): + """ + Schema version being used. + + :param value: If omitted defaults to "v2". Must be one of ["v2"]. + :type value: str + """ + + allowed_values = { + "v2", + } + V2: ClassVar["ServiceDefinitionV2Version"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceDefinitionV2Version.V2 = ServiceDefinitionV2Version("v2") diff --git a/datadog_api_client/v2/model/service_definitions_create_request.py b/datadog_api_client/v2/model/service_definitions_create_request.py new file mode 100644 index 0000000000..df28ca6f1e --- /dev/null +++ b/datadog_api_client/v2/model/service_definitions_create_request.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceDefinitionsCreateRequest(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Create service definitions request. + + :param application: Identifier for a group of related services serving a product feature, which the service is a part of. + :type application: str, optional + + :param ci_pipeline_fingerprints: A set of CI fingerprints. + :type ci_pipeline_fingerprints: [str], optional + + :param contacts: A list of contacts related to the services. + :type contacts: [ServiceDefinitionV2Dot2Contact], optional + + :param dd_service: Unique identifier of the service. Must be unique across all services and is used to match with a service in Datadog. + :type dd_service: str + + :param description: A short description of the service. + :type description: str, optional + + :param extensions: Extensions to v2.2 schema. + :type extensions: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param integrations: Third party integrations that Datadog supports. + :type integrations: ServiceDefinitionV2Dot2Integrations, optional + + :param languages: The service's programming language. Datadog recognizes the following languages: `dotnet`, `go`, `java`, `js`, `php`, `python`, `ruby`, and `c++`. + :type languages: [str], optional + + :param lifecycle: The current life cycle phase of the service. + :type lifecycle: str, optional + + :param links: A list of links related to the services. + :type links: [ServiceDefinitionV2Dot2Link], optional + + :param schema_version: Schema version being used. + :type schema_version: ServiceDefinitionV2Dot2Version + + :param tags: A set of custom tags. + :type tags: [str], optional + + :param team: Team that owns the service. It is used to locate a team defined in Datadog Teams if it exists. + :type team: str, optional + + :param tier: Importance of the service. + :type tier: str, optional + + :param type: The type of service. + :type type: str, optional + + :param dd_team: Experimental feature. A Team handle that matches a Team in the Datadog Teams product. + :type dd_team: str, optional + + :param docs: A list of documentation related to the services. + :type docs: [ServiceDefinitionV2Doc], optional + + :param repos: A list of code repositories related to the services. + :type repos: [ServiceDefinitionV2Repo], 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.service_definition_v2_dot2 import ServiceDefinitionV2Dot2 + from datadog_api_client.v2.model.service_definition_v2_dot1 import ServiceDefinitionV2Dot1 + from datadog_api_client.v2.model.service_definition_v2 import ServiceDefinitionV2 + return { + "oneOf": [ + ServiceDefinitionV2Dot2, + ServiceDefinitionV2Dot1, + ServiceDefinitionV2, + str, + ], + } diff --git a/datadog_api_client/v2/model/service_definitions_list_response.py b/datadog_api_client/v2/model/service_definitions_list_response.py new file mode 100644 index 0000000000..cbbba0d1dd --- /dev/null +++ b/datadog_api_client/v2/model/service_definitions_list_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_definition_data import ServiceDefinitionData + from datadog_api_client.v2.model.service_definition_v1 import ServiceDefinitionV1 + from datadog_api_client.v2.model.service_definition_v2 import ServiceDefinitionV2 + from datadog_api_client.v2.model.service_definition_v2_dot1 import ServiceDefinitionV2Dot1 + from datadog_api_client.v2.model.service_definition_v2_dot2 import ServiceDefinitionV2Dot2 + +class ServiceDefinitionsListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_definition_data import ServiceDefinitionData + return { + "data": ([ServiceDefinitionData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[ServiceDefinitionData], UnsetType]=unset, **kwargs): + """ + Create service definitions response. + + :param data: Data representing service definitions. + :type data: [ServiceDefinitionData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_list.py b/datadog_api_client/v2/model/service_list.py new file mode 100644 index 0000000000..8e1ea74044 --- /dev/null +++ b/datadog_api_client/v2/model/service_list.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_list_data import ServiceListData + +class ServiceList(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_list_data import ServiceListData + return { + "data": (ServiceListData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ServiceListData, UnsetType]=unset, **kwargs): + """ + The response body for the service list endpoint. + + :param data: A single data item in the service list response. + :type data: ServiceListData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_list_data.py b/datadog_api_client/v2/model/service_list_data.py new file mode 100644 index 0000000000..3bc9efd515 --- /dev/null +++ b/datadog_api_client/v2/model/service_list_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_list_data_attributes import ServiceListDataAttributes + from datadog_api_client.v2.model.service_list_data_type import ServiceListDataType + +class ServiceListData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_list_data_attributes import ServiceListDataAttributes + from datadog_api_client.v2.model.service_list_data_type import ServiceListDataType + return { + "attributes": (ServiceListDataAttributes,), + "id": (str,), + "type": (ServiceListDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ServiceListDataType, attributes: Union[ServiceListDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + A single data item in the service list response. + + :param attributes: Attributes of a service list entry, containing metadata and a list of service names. + :type attributes: ServiceListDataAttributes, optional + + :param id: The unique identifier of the service. + :type id: str, optional + + :param type: Services list resource type. + :type type: ServiceListDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/service_list_data_attributes.py b/datadog_api_client/v2/model/service_list_data_attributes.py new file mode 100644 index 0000000000..9092db98a9 --- /dev/null +++ b/datadog_api_client/v2/model/service_list_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_list_data_attributes_metadata_items import ServiceListDataAttributesMetadataItems + +class ServiceListDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_list_data_attributes_metadata_items import ServiceListDataAttributesMetadataItems + return { + "metadata": ([ServiceListDataAttributesMetadataItems],), + "services": ([str],), + } + attribute_map = { + "metadata": "metadata", + "services": "services", + } + + def __init__(self_, metadata: Union[List[ServiceListDataAttributesMetadataItems], UnsetType]=unset, services: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of a service list entry, containing metadata and a list of service names. + + :param metadata: A list of metadata items associated with the service. + :type metadata: [ServiceListDataAttributesMetadataItems], optional + + :param services: A list of service names. + :type services: [str], optional + """ + if metadata is not unset: + kwargs["metadata"] = metadata + if services is not unset: + kwargs["services"] = services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_list_data_attributes_metadata_items.py b/datadog_api_client/v2/model/service_list_data_attributes_metadata_items.py new file mode 100644 index 0000000000..d699cd88a9 --- /dev/null +++ b/datadog_api_client/v2/model/service_list_data_attributes_metadata_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceListDataAttributesMetadataItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "is_traced": (bool,), + "is_usm": (bool,), + } + attribute_map = { + "is_traced": "isTraced", + "is_usm": "isUsm", + } + + def __init__(self_, is_traced: Union[bool, UnsetType]=unset, is_usm: Union[bool, UnsetType]=unset, **kwargs): + """ + An object containing metadata flags for a service, indicating whether it is traced by APM or monitored through Universal Service Monitoring. + + :param is_traced: Indicates whether the service is traced by APM. + :type is_traced: bool, optional + + :param is_usm: Indicates whether the service uses Universal Service Monitoring. + :type is_usm: bool, optional + """ + if is_traced is not unset: + kwargs["is_traced"] = is_traced + if is_usm is not unset: + kwargs["is_usm"] = is_usm + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_list_data_type.py b/datadog_api_client/v2/model/service_list_data_type.py new file mode 100644 index 0000000000..f9a3a937d2 --- /dev/null +++ b/datadog_api_client/v2/model/service_list_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceListDataType(ModelSimple): + """ + Services list resource type. + + :param value: If omitted defaults to "services_list". Must be one of ["services_list"]. + :type value: str + """ + + allowed_values = { + "services_list", + } + SERVICES_LIST: ClassVar["ServiceListDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceListDataType.SERVICES_LIST = ServiceListDataType("services_list") diff --git a/datadog_api_client/v2/model/service_now_assignment_group_attributes.py b/datadog_api_client/v2/model/service_now_assignment_group_attributes.py new file mode 100644 index 0000000000..0b7ac6725c --- /dev/null +++ b/datadog_api_client/v2/model/service_now_assignment_group_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowAssignmentGroupAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignment_group_name": (str,), + "assignment_group_sys_id": (str,), + "instance_id": (UUID,), + } + attribute_map = { + "assignment_group_name": "assignment_group_name", + "assignment_group_sys_id": "assignment_group_sys_id", + "instance_id": "instance_id", + } + + def __init__(self_, assignment_group_name: str, assignment_group_sys_id: str, instance_id: UUID, **kwargs): + """ + Attributes of a ServiceNow assignment group + + :param assignment_group_name: The name of the assignment group + :type assignment_group_name: str + + :param assignment_group_sys_id: The system ID of the assignment group in ServiceNow + :type assignment_group_sys_id: str + + :param instance_id: The ID of the ServiceNow instance + :type instance_id: UUID + """ + super().__init__(kwargs) + + + self_.assignment_group_name = assignment_group_name + self_.assignment_group_sys_id = assignment_group_sys_id + self_.instance_id = instance_id diff --git a/datadog_api_client/v2/model/service_now_assignment_group_data.py b/datadog_api_client/v2/model/service_now_assignment_group_data.py new file mode 100644 index 0000000000..3bc5c24095 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_assignment_group_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_assignment_group_attributes import ServiceNowAssignmentGroupAttributes + from datadog_api_client.v2.model.service_now_assignment_group_type import ServiceNowAssignmentGroupType + +class ServiceNowAssignmentGroupData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_assignment_group_attributes import ServiceNowAssignmentGroupAttributes + from datadog_api_client.v2.model.service_now_assignment_group_type import ServiceNowAssignmentGroupType + return { + "attributes": (ServiceNowAssignmentGroupAttributes,), + "id": (UUID,), + "type": (ServiceNowAssignmentGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ServiceNowAssignmentGroupAttributes, id: UUID, type: ServiceNowAssignmentGroupType, **kwargs): + """ + Data object for a ServiceNow assignment group + + :param attributes: Attributes of a ServiceNow assignment group + :type attributes: ServiceNowAssignmentGroupAttributes + + :param id: Unique identifier for the ServiceNow assignment group + :type id: UUID + + :param type: Type identifier for ServiceNow assignment group resources + :type type: ServiceNowAssignmentGroupType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_assignment_group_type.py b/datadog_api_client/v2/model/service_now_assignment_group_type.py new file mode 100644 index 0000000000..312f108181 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_assignment_group_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceNowAssignmentGroupType(ModelSimple): + """ + Type identifier for ServiceNow assignment group resources + + :param value: If omitted defaults to "assignment_groups". Must be one of ["assignment_groups"]. + :type value: str + """ + + allowed_values = { + "assignment_groups", + } + ASSIGNMENT_GROUPS: ClassVar["ServiceNowAssignmentGroupType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceNowAssignmentGroupType.ASSIGNMENT_GROUPS = ServiceNowAssignmentGroupType("assignment_groups") diff --git a/datadog_api_client/v2/model/service_now_assignment_groups_response.py b/datadog_api_client/v2/model/service_now_assignment_groups_response.py new file mode 100644 index 0000000000..68b9ef82b1 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_assignment_groups_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_assignment_group_data import ServiceNowAssignmentGroupData + +class ServiceNowAssignmentGroupsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_assignment_group_data import ServiceNowAssignmentGroupData + return { + "data": ([ServiceNowAssignmentGroupData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ServiceNowAssignmentGroupData], **kwargs): + """ + Response containing ServiceNow assignment groups + + :param data: Array of ServiceNow assignment group data objects + :type data: [ServiceNowAssignmentGroupData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_now_basic_auth.py b/datadog_api_client/v2/model/service_now_basic_auth.py new file mode 100644 index 0000000000..42b2a32c10 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_basic_auth.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_basic_auth_type import ServiceNowBasicAuthType + +class ServiceNowBasicAuth(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_basic_auth_type import ServiceNowBasicAuthType + return { + "instance": (str,), + "password": (str,), + "type": (ServiceNowBasicAuthType,), + "username": (str,), + } + attribute_map = { + "instance": "instance", + "password": "password", + "type": "type", + "username": "username", + } + + def __init__(self_, instance: str, password: str, type: ServiceNowBasicAuthType, username: str, **kwargs): + """ + The definition of the ``ServiceNowBasicAuth`` object. + + :param instance: The ``ServiceNowBasicAuth`` ``instance``. + :type instance: str + + :param password: The ``ServiceNowBasicAuth`` ``password``. + :type password: str + + :param type: The definition of the ``ServiceNowBasicAuth`` object. + :type type: ServiceNowBasicAuthType + + :param username: The ``ServiceNowBasicAuth`` ``username``. + :type username: str + """ + super().__init__(kwargs) + + + self_.instance = instance + self_.password = password + self_.type = type + self_.username = username diff --git a/datadog_api_client/v2/model/service_now_basic_auth_type.py b/datadog_api_client/v2/model/service_now_basic_auth_type.py new file mode 100644 index 0000000000..cbd6f67b74 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_basic_auth_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceNowBasicAuthType(ModelSimple): + """ + The definition of the `ServiceNowBasicAuth` object. + + :param value: If omitted defaults to "ServiceNowBasicAuth". Must be one of ["ServiceNowBasicAuth"]. + :type value: str + """ + + allowed_values = { + "ServiceNowBasicAuth", + } + SERVICENOWBASICAUTH: ClassVar["ServiceNowBasicAuthType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceNowBasicAuthType.SERVICENOWBASICAUTH = ServiceNowBasicAuthType("ServiceNowBasicAuth") diff --git a/datadog_api_client/v2/model/service_now_basic_auth_update.py b/datadog_api_client/v2/model/service_now_basic_auth_update.py new file mode 100644 index 0000000000..226cc09d58 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_basic_auth_update.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_basic_auth_type import ServiceNowBasicAuthType + +class ServiceNowBasicAuthUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_basic_auth_type import ServiceNowBasicAuthType + return { + "instance": (str,), + "password": (str,), + "type": (ServiceNowBasicAuthType,), + "username": (str,), + } + attribute_map = { + "instance": "instance", + "password": "password", + "type": "type", + "username": "username", + } + + def __init__(self_, type: ServiceNowBasicAuthType, instance: Union[str, UnsetType]=unset, password: Union[str, UnsetType]=unset, username: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``ServiceNowBasicAuth`` object. + + :param instance: The ``ServiceNowBasicAuthUpdate`` ``instance``. + :type instance: str, optional + + :param password: The ``ServiceNowBasicAuthUpdate`` ``password``. + :type password: str, optional + + :param type: The definition of the ``ServiceNowBasicAuth`` object. + :type type: ServiceNowBasicAuthType + + :param username: The ``ServiceNowBasicAuthUpdate`` ``username``. + :type username: str, optional + """ + if instance is not unset: + kwargs["instance"] = instance + if password is not unset: + kwargs["password"] = password + if username is not unset: + kwargs["username"] = username + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_business_service_attributes.py b/datadog_api_client/v2/model/service_now_business_service_attributes.py new file mode 100644 index 0000000000..9dc47047ed --- /dev/null +++ b/datadog_api_client/v2/model/service_now_business_service_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowBusinessServiceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "instance_id": (UUID,), + "service_name": (str,), + "service_sys_id": (str,), + } + attribute_map = { + "instance_id": "instance_id", + "service_name": "service_name", + "service_sys_id": "service_sys_id", + } + + def __init__(self_, instance_id: UUID, service_name: str, service_sys_id: str, **kwargs): + """ + Attributes of a ServiceNow business service + + :param instance_id: The ID of the ServiceNow instance + :type instance_id: UUID + + :param service_name: The name of the business service + :type service_name: str + + :param service_sys_id: The system ID of the business service in ServiceNow + :type service_sys_id: str + """ + super().__init__(kwargs) + + + self_.instance_id = instance_id + self_.service_name = service_name + self_.service_sys_id = service_sys_id diff --git a/datadog_api_client/v2/model/service_now_business_service_data.py b/datadog_api_client/v2/model/service_now_business_service_data.py new file mode 100644 index 0000000000..19df606e51 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_business_service_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_business_service_attributes import ServiceNowBusinessServiceAttributes + from datadog_api_client.v2.model.service_now_business_service_type import ServiceNowBusinessServiceType + +class ServiceNowBusinessServiceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_business_service_attributes import ServiceNowBusinessServiceAttributes + from datadog_api_client.v2.model.service_now_business_service_type import ServiceNowBusinessServiceType + return { + "attributes": (ServiceNowBusinessServiceAttributes,), + "id": (UUID,), + "type": (ServiceNowBusinessServiceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ServiceNowBusinessServiceAttributes, id: UUID, type: ServiceNowBusinessServiceType, **kwargs): + """ + Data object for a ServiceNow business service + + :param attributes: Attributes of a ServiceNow business service + :type attributes: ServiceNowBusinessServiceAttributes + + :param id: Unique identifier for the ServiceNow business service + :type id: UUID + + :param type: Type identifier for ServiceNow business service resources + :type type: ServiceNowBusinessServiceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_business_service_type.py b/datadog_api_client/v2/model/service_now_business_service_type.py new file mode 100644 index 0000000000..8d9436a7c2 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_business_service_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceNowBusinessServiceType(ModelSimple): + """ + Type identifier for ServiceNow business service resources + + :param value: If omitted defaults to "business_services". Must be one of ["business_services"]. + :type value: str + """ + + allowed_values = { + "business_services", + } + BUSINESS_SERVICES: ClassVar["ServiceNowBusinessServiceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceNowBusinessServiceType.BUSINESS_SERVICES = ServiceNowBusinessServiceType("business_services") diff --git a/datadog_api_client/v2/model/service_now_business_services_response.py b/datadog_api_client/v2/model/service_now_business_services_response.py new file mode 100644 index 0000000000..bdf58af745 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_business_services_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_business_service_data import ServiceNowBusinessServiceData + +class ServiceNowBusinessServicesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_business_service_data import ServiceNowBusinessServiceData + return { + "data": ([ServiceNowBusinessServiceData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ServiceNowBusinessServiceData], **kwargs): + """ + Response containing ServiceNow business services + + :param data: Array of ServiceNow business service data objects + :type data: [ServiceNowBusinessServiceData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_now_credentials.py b/datadog_api_client/v2/model/service_now_credentials.py new file mode 100644 index 0000000000..d04cbccf62 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_credentials.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``ServiceNowCredentials`` object. + + :param instance: The `ServiceNowBasicAuth` `instance`. + :type instance: str + + :param password: The `ServiceNowBasicAuth` `password`. + :type password: str + + :param type: The definition of the `ServiceNowBasicAuth` object. + :type type: ServiceNowBasicAuthType + + :param username: The `ServiceNowBasicAuth` `username`. + :type username: str + """ + 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.service_now_basic_auth import ServiceNowBasicAuth + return { + "oneOf": [ + ServiceNowBasicAuth, + ], + } diff --git a/datadog_api_client/v2/model/service_now_credentials_update.py b/datadog_api_client/v2/model/service_now_credentials_update.py new file mode 100644 index 0000000000..cbaac6dc01 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_credentials_update.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``ServiceNowCredentialsUpdate`` object. + + :param instance: The `ServiceNowBasicAuthUpdate` `instance`. + :type instance: str, optional + + :param password: The `ServiceNowBasicAuthUpdate` `password`. + :type password: str, optional + + :param type: The definition of the `ServiceNowBasicAuth` object. + :type type: ServiceNowBasicAuthType + + :param username: The `ServiceNowBasicAuthUpdate` `username`. + :type username: str, 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.service_now_basic_auth_update import ServiceNowBasicAuthUpdate + return { + "oneOf": [ + ServiceNowBasicAuthUpdate, + ], + } diff --git a/datadog_api_client/v2/model/service_now_instance_attributes.py b/datadog_api_client/v2/model/service_now_instance_attributes.py new file mode 100644 index 0000000000..4a7fa97821 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_instance_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowInstanceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "instance_name": (str,), + } + attribute_map = { + "instance_name": "instance_name", + } + + def __init__(self_, instance_name: str, **kwargs): + """ + Attributes of a ServiceNow instance + + :param instance_name: The name of the ServiceNow instance + :type instance_name: str + """ + super().__init__(kwargs) + + + self_.instance_name = instance_name diff --git a/datadog_api_client/v2/model/service_now_instance_data.py b/datadog_api_client/v2/model/service_now_instance_data.py new file mode 100644 index 0000000000..1be5ee50ec --- /dev/null +++ b/datadog_api_client/v2/model/service_now_instance_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_instance_attributes import ServiceNowInstanceAttributes + from datadog_api_client.v2.model.service_now_instance_type import ServiceNowInstanceType + +class ServiceNowInstanceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_instance_attributes import ServiceNowInstanceAttributes + from datadog_api_client.v2.model.service_now_instance_type import ServiceNowInstanceType + return { + "attributes": (ServiceNowInstanceAttributes,), + "id": (UUID,), + "type": (ServiceNowInstanceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ServiceNowInstanceAttributes, id: UUID, type: ServiceNowInstanceType, **kwargs): + """ + Data object for a ServiceNow instance + + :param attributes: Attributes of a ServiceNow instance + :type attributes: ServiceNowInstanceAttributes + + :param id: Unique identifier for the ServiceNow instance + :type id: UUID + + :param type: Type identifier for ServiceNow instance resources + :type type: ServiceNowInstanceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_instance_type.py b/datadog_api_client/v2/model/service_now_instance_type.py new file mode 100644 index 0000000000..6aa4f45efa --- /dev/null +++ b/datadog_api_client/v2/model/service_now_instance_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceNowInstanceType(ModelSimple): + """ + Type identifier for ServiceNow instance resources + + :param value: If omitted defaults to "instance". Must be one of ["instance"]. + :type value: str + """ + + allowed_values = { + "instance", + } + INSTANCE: ClassVar["ServiceNowInstanceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceNowInstanceType.INSTANCE = ServiceNowInstanceType("instance") diff --git a/datadog_api_client/v2/model/service_now_instances_response.py b/datadog_api_client/v2/model/service_now_instances_response.py new file mode 100644 index 0000000000..3685a28f86 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_instances_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_instance_data import ServiceNowInstanceData + +class ServiceNowInstancesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_instance_data import ServiceNowInstanceData + return { + "data": ([ServiceNowInstanceData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ServiceNowInstanceData], **kwargs): + """ + Response containing ServiceNow instances + + :param data: Array of ServiceNow instance data objects + :type data: [ServiceNowInstanceData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_now_integration.py b/datadog_api_client/v2/model/service_now_integration.py new file mode 100644 index 0000000000..a4db2f0d38 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_credentials import ServiceNowCredentials + from datadog_api_client.v2.model.service_now_integration_type import ServiceNowIntegrationType + from datadog_api_client.v2.model.service_now_basic_auth import ServiceNowBasicAuth + +class ServiceNowIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_credentials import ServiceNowCredentials + from datadog_api_client.v2.model.service_now_integration_type import ServiceNowIntegrationType + return { + "credentials": (ServiceNowCredentials,), + "type": (ServiceNowIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[ServiceNowCredentials, ServiceNowBasicAuth], type: ServiceNowIntegrationType, **kwargs): + """ + The definition of the ``ServiceNowIntegration`` object. + + :param credentials: The definition of the ``ServiceNowCredentials`` object. + :type credentials: ServiceNowCredentials + + :param type: The definition of the ``ServiceNowIntegrationType`` object. + :type type: ServiceNowIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_integration_type.py b/datadog_api_client/v2/model/service_now_integration_type.py new file mode 100644 index 0000000000..894c23fb05 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceNowIntegrationType(ModelSimple): + """ + The definition of the `ServiceNowIntegrationType` object. + + :param value: If omitted defaults to "ServiceNow". Must be one of ["ServiceNow"]. + :type value: str + """ + + allowed_values = { + "ServiceNow", + } + SERVICENOW: ClassVar["ServiceNowIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceNowIntegrationType.SERVICENOW = ServiceNowIntegrationType("ServiceNow") diff --git a/datadog_api_client/v2/model/service_now_integration_update.py b/datadog_api_client/v2/model/service_now_integration_update.py new file mode 100644 index 0000000000..cb626ecc76 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_credentials_update import ServiceNowCredentialsUpdate + from datadog_api_client.v2.model.service_now_integration_type import ServiceNowIntegrationType + from datadog_api_client.v2.model.service_now_basic_auth_update import ServiceNowBasicAuthUpdate + +class ServiceNowIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_credentials_update import ServiceNowCredentialsUpdate + from datadog_api_client.v2.model.service_now_integration_type import ServiceNowIntegrationType + return { + "credentials": (ServiceNowCredentialsUpdate,), + "type": (ServiceNowIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: ServiceNowIntegrationType, credentials: Union[ServiceNowCredentialsUpdate, ServiceNowBasicAuthUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``ServiceNowIntegrationUpdate`` object. + + :param credentials: The definition of the ``ServiceNowCredentialsUpdate`` object. + :type credentials: ServiceNowCredentialsUpdate, optional + + :param type: The definition of the ``ServiceNowIntegrationType`` object. + :type type: ServiceNowIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_template_attributes.py b/datadog_api_client/v2/model/service_now_template_attributes.py new file mode 100644 index 0000000000..8abb405981 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_attributes.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowTemplateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignment_group_id": (UUID,), + "business_service_id": (UUID,), + "fields_mapping": ({str: (str,)},), + "handle_name": (str,), + "instance_id": (UUID,), + "servicenow_tablename": (str,), + "user_id": (UUID,), + } + attribute_map = { + "assignment_group_id": "assignment_group_id", + "business_service_id": "business_service_id", + "fields_mapping": "fields_mapping", + "handle_name": "handle_name", + "instance_id": "instance_id", + "servicenow_tablename": "servicenow_tablename", + "user_id": "user_id", + } + + def __init__(self_, handle_name: str, instance_id: UUID, servicenow_tablename: str, assignment_group_id: Union[UUID, UnsetType]=unset, business_service_id: Union[UUID, UnsetType]=unset, fields_mapping: Union[Dict[str, str], UnsetType]=unset, user_id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Attributes of a ServiceNow template + + :param assignment_group_id: The ID of the assignment group + :type assignment_group_id: UUID, optional + + :param business_service_id: The ID of the business service + :type business_service_id: UUID, optional + + :param fields_mapping: Custom field mappings for the template + :type fields_mapping: {str: (str,)}, optional + + :param handle_name: The handle name of the template + :type handle_name: str + + :param instance_id: The ID of the ServiceNow instance + :type instance_id: UUID + + :param servicenow_tablename: The name of the destination ServiceNow table + :type servicenow_tablename: str + + :param user_id: The ID of the user + :type user_id: UUID, optional + """ + if assignment_group_id is not unset: + kwargs["assignment_group_id"] = assignment_group_id + if business_service_id is not unset: + kwargs["business_service_id"] = business_service_id + if fields_mapping is not unset: + kwargs["fields_mapping"] = fields_mapping + if user_id is not unset: + kwargs["user_id"] = user_id + super().__init__(kwargs) + + + self_.handle_name = handle_name + self_.instance_id = instance_id + self_.servicenow_tablename = servicenow_tablename diff --git a/datadog_api_client/v2/model/service_now_template_create_request.py b/datadog_api_client/v2/model/service_now_template_create_request.py new file mode 100644 index 0000000000..6e23ee084a --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_template_create_request_data import ServiceNowTemplateCreateRequestData + +class ServiceNowTemplateCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_template_create_request_data import ServiceNowTemplateCreateRequestData + return { + "data": (ServiceNowTemplateCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ServiceNowTemplateCreateRequestData, **kwargs): + """ + Request to create a ServiceNow template + + :param data: Data object for creating a ServiceNow template + :type data: ServiceNowTemplateCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_now_template_create_request_attributes.py b/datadog_api_client/v2/model/service_now_template_create_request_attributes.py new file mode 100644 index 0000000000..aa17989451 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_create_request_attributes.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowTemplateCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignment_group_id": (UUID,), + "business_service_id": (UUID,), + "fields_mapping": ({str: (str,)},), + "handle_name": (str,), + "instance_id": (UUID,), + "servicenow_tablename": (str,), + "user_id": (UUID,), + } + attribute_map = { + "assignment_group_id": "assignment_group_id", + "business_service_id": "business_service_id", + "fields_mapping": "fields_mapping", + "handle_name": "handle_name", + "instance_id": "instance_id", + "servicenow_tablename": "servicenow_tablename", + "user_id": "user_id", + } + + def __init__(self_, handle_name: str, instance_id: UUID, servicenow_tablename: str, assignment_group_id: Union[UUID, UnsetType]=unset, business_service_id: Union[UUID, UnsetType]=unset, fields_mapping: Union[Dict[str, str], UnsetType]=unset, user_id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Attributes for creating a ServiceNow template + + :param assignment_group_id: The ID of the assignment group + :type assignment_group_id: UUID, optional + + :param business_service_id: The ID of the business service + :type business_service_id: UUID, optional + + :param fields_mapping: Custom field mappings for the template + :type fields_mapping: {str: (str,)}, optional + + :param handle_name: The handle name of the template + :type handle_name: str + + :param instance_id: The ID of the ServiceNow instance + :type instance_id: UUID + + :param servicenow_tablename: The name of the destination ServiceNow table + :type servicenow_tablename: str + + :param user_id: The ID of the user + :type user_id: UUID, optional + """ + if assignment_group_id is not unset: + kwargs["assignment_group_id"] = assignment_group_id + if business_service_id is not unset: + kwargs["business_service_id"] = business_service_id + if fields_mapping is not unset: + kwargs["fields_mapping"] = fields_mapping + if user_id is not unset: + kwargs["user_id"] = user_id + super().__init__(kwargs) + + + self_.handle_name = handle_name + self_.instance_id = instance_id + self_.servicenow_tablename = servicenow_tablename diff --git a/datadog_api_client/v2/model/service_now_template_create_request_data.py b/datadog_api_client/v2/model/service_now_template_create_request_data.py new file mode 100644 index 0000000000..4641bced9d --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_template_create_request_attributes import ServiceNowTemplateCreateRequestAttributes + from datadog_api_client.v2.model.service_now_template_type import ServiceNowTemplateType + +class ServiceNowTemplateCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_template_create_request_attributes import ServiceNowTemplateCreateRequestAttributes + from datadog_api_client.v2.model.service_now_template_type import ServiceNowTemplateType + return { + "attributes": (ServiceNowTemplateCreateRequestAttributes,), + "type": (ServiceNowTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ServiceNowTemplateCreateRequestAttributes, type: ServiceNowTemplateType, **kwargs): + """ + Data object for creating a ServiceNow template + + :param attributes: Attributes for creating a ServiceNow template + :type attributes: ServiceNowTemplateCreateRequestAttributes + + :param type: Type identifier for ServiceNow template resources + :type type: ServiceNowTemplateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_template_data.py b/datadog_api_client/v2/model/service_now_template_data.py new file mode 100644 index 0000000000..f23168089d --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_template_attributes import ServiceNowTemplateAttributes + from datadog_api_client.v2.model.service_now_template_type import ServiceNowTemplateType + +class ServiceNowTemplateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_template_attributes import ServiceNowTemplateAttributes + from datadog_api_client.v2.model.service_now_template_type import ServiceNowTemplateType + return { + "attributes": (ServiceNowTemplateAttributes,), + "id": (UUID,), + "type": (ServiceNowTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ServiceNowTemplateAttributes, id: UUID, type: ServiceNowTemplateType, **kwargs): + """ + Data object for a ServiceNow template + + :param attributes: Attributes of a ServiceNow template + :type attributes: ServiceNowTemplateAttributes + + :param id: Unique identifier for the ServiceNow template + :type id: UUID + + :param type: Type identifier for ServiceNow template resources + :type type: ServiceNowTemplateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_template_response.py b/datadog_api_client/v2/model/service_now_template_response.py new file mode 100644 index 0000000000..e8aa4ba4cf --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_template_data import ServiceNowTemplateData + +class ServiceNowTemplateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_template_data import ServiceNowTemplateData + return { + "data": (ServiceNowTemplateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ServiceNowTemplateData, **kwargs): + """ + Response containing a single ServiceNow template + + :param data: Data object for a ServiceNow template + :type data: ServiceNowTemplateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_now_template_type.py b/datadog_api_client/v2/model/service_now_template_type.py new file mode 100644 index 0000000000..f90672ce74 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceNowTemplateType(ModelSimple): + """ + Type identifier for ServiceNow template resources + + :param value: If omitted defaults to "servicenow_templates". Must be one of ["servicenow_templates"]. + :type value: str + """ + + allowed_values = { + "servicenow_templates", + } + SERVICENOW_TEMPLATES: ClassVar["ServiceNowTemplateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceNowTemplateType.SERVICENOW_TEMPLATES = ServiceNowTemplateType("servicenow_templates") diff --git a/datadog_api_client/v2/model/service_now_template_update_request.py b/datadog_api_client/v2/model/service_now_template_update_request.py new file mode 100644 index 0000000000..0ca5477ced --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_template_update_request_data import ServiceNowTemplateUpdateRequestData + +class ServiceNowTemplateUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_template_update_request_data import ServiceNowTemplateUpdateRequestData + return { + "data": (ServiceNowTemplateUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ServiceNowTemplateUpdateRequestData, **kwargs): + """ + Request to update a ServiceNow template + + :param data: Data object for updating a ServiceNow template + :type data: ServiceNowTemplateUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_now_template_update_request_attributes.py b/datadog_api_client/v2/model/service_now_template_update_request_attributes.py new file mode 100644 index 0000000000..6ec892b984 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_update_request_attributes.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowTemplateUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignment_group_id": (UUID,), + "business_service_id": (UUID,), + "fields_mapping": ({str: (str,)},), + "handle_name": (str,), + "instance_id": (UUID,), + "servicenow_tablename": (str,), + "user_id": (UUID,), + } + attribute_map = { + "assignment_group_id": "assignment_group_id", + "business_service_id": "business_service_id", + "fields_mapping": "fields_mapping", + "handle_name": "handle_name", + "instance_id": "instance_id", + "servicenow_tablename": "servicenow_tablename", + "user_id": "user_id", + } + + def __init__(self_, handle_name: str, instance_id: UUID, servicenow_tablename: str, assignment_group_id: Union[UUID, UnsetType]=unset, business_service_id: Union[UUID, UnsetType]=unset, fields_mapping: Union[Dict[str, str], UnsetType]=unset, user_id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Attributes for updating a ServiceNow template + + :param assignment_group_id: The ID of the assignment group + :type assignment_group_id: UUID, optional + + :param business_service_id: The ID of the business service + :type business_service_id: UUID, optional + + :param fields_mapping: Custom field mappings for the template + :type fields_mapping: {str: (str,)}, optional + + :param handle_name: The handle name of the template + :type handle_name: str + + :param instance_id: The ID of the ServiceNow instance + :type instance_id: UUID + + :param servicenow_tablename: The name of the destination ServiceNow table + :type servicenow_tablename: str + + :param user_id: The ID of the user + :type user_id: UUID, optional + """ + if assignment_group_id is not unset: + kwargs["assignment_group_id"] = assignment_group_id + if business_service_id is not unset: + kwargs["business_service_id"] = business_service_id + if fields_mapping is not unset: + kwargs["fields_mapping"] = fields_mapping + if user_id is not unset: + kwargs["user_id"] = user_id + super().__init__(kwargs) + + + self_.handle_name = handle_name + self_.instance_id = instance_id + self_.servicenow_tablename = servicenow_tablename diff --git a/datadog_api_client/v2/model/service_now_template_update_request_data.py b/datadog_api_client/v2/model/service_now_template_update_request_data.py new file mode 100644 index 0000000000..06848af9a9 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_template_update_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_template_update_request_attributes import ServiceNowTemplateUpdateRequestAttributes + from datadog_api_client.v2.model.service_now_template_type import ServiceNowTemplateType + +class ServiceNowTemplateUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_template_update_request_attributes import ServiceNowTemplateUpdateRequestAttributes + from datadog_api_client.v2.model.service_now_template_type import ServiceNowTemplateType + return { + "attributes": (ServiceNowTemplateUpdateRequestAttributes,), + "type": (ServiceNowTemplateType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ServiceNowTemplateUpdateRequestAttributes, type: ServiceNowTemplateType, **kwargs): + """ + Data object for updating a ServiceNow template + + :param attributes: Attributes for updating a ServiceNow template + :type attributes: ServiceNowTemplateUpdateRequestAttributes + + :param type: Type identifier for ServiceNow template resources + :type type: ServiceNowTemplateType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_templates_response.py b/datadog_api_client/v2/model/service_now_templates_response.py new file mode 100644 index 0000000000..c872ed90aa --- /dev/null +++ b/datadog_api_client/v2/model/service_now_templates_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_template_data import ServiceNowTemplateData + +class ServiceNowTemplatesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_template_data import ServiceNowTemplateData + return { + "data": ([ServiceNowTemplateData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ServiceNowTemplateData], **kwargs): + """ + Response containing ServiceNow templates + + :param data: Array of ServiceNow template data objects + :type data: [ServiceNowTemplateData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_now_ticket.py b/datadog_api_client/v2/model/service_now_ticket.py new file mode 100644 index 0000000000..b95aec93f4 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_ticket.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_ticket_result import ServiceNowTicketResult + from datadog_api_client.v2.model.case3rd_party_ticket_status import Case3rdPartyTicketStatus + +class ServiceNowTicket(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_ticket_result import ServiceNowTicketResult + from datadog_api_client.v2.model.case3rd_party_ticket_status import Case3rdPartyTicketStatus + return { + "result": (ServiceNowTicketResult,), + "status": (Case3rdPartyTicketStatus,), + } + attribute_map = { + "result": "result", + "status": "status", + } + read_only_vars = { + "status", + } + + def __init__(self_, result: Union[ServiceNowTicketResult, UnsetType]=unset, status: Union[Case3rdPartyTicketStatus, UnsetType]=unset, **kwargs): + """ + ServiceNow ticket attached to case + + :param result: ServiceNow ticket information + :type result: ServiceNowTicketResult, optional + + :param status: Case status + :type status: Case3rdPartyTicketStatus, optional + """ + if result is not unset: + kwargs["result"] = result + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_now_ticket_create_attributes.py b/datadog_api_client/v2/model/service_now_ticket_create_attributes.py new file mode 100644 index 0000000000..57e8374e93 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_ticket_create_attributes.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowTicketCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "assignment_group": (str,), + "instance_name": (str,), + } + attribute_map = { + "assignment_group": "assignment_group", + "instance_name": "instance_name", + } + + def __init__(self_, instance_name: str, assignment_group: Union[str, UnsetType]=unset, **kwargs): + """ + ServiceNow ticket creation attributes + + :param assignment_group: ServiceNow assignment group + :type assignment_group: str, optional + + :param instance_name: ServiceNow instance name + :type instance_name: str + """ + if assignment_group is not unset: + kwargs["assignment_group"] = assignment_group + super().__init__(kwargs) + + + self_.instance_name = instance_name diff --git a/datadog_api_client/v2/model/service_now_ticket_create_data.py b/datadog_api_client/v2/model/service_now_ticket_create_data.py new file mode 100644 index 0000000000..ae5047b1ef --- /dev/null +++ b/datadog_api_client/v2/model/service_now_ticket_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_ticket_create_attributes import ServiceNowTicketCreateAttributes + from datadog_api_client.v2.model.service_now_ticket_resource_type import ServiceNowTicketResourceType + +class ServiceNowTicketCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_ticket_create_attributes import ServiceNowTicketCreateAttributes + from datadog_api_client.v2.model.service_now_ticket_resource_type import ServiceNowTicketResourceType + return { + "attributes": (ServiceNowTicketCreateAttributes,), + "type": (ServiceNowTicketResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ServiceNowTicketCreateAttributes, type: ServiceNowTicketResourceType, **kwargs): + """ + ServiceNow ticket creation data + + :param attributes: ServiceNow ticket creation attributes + :type attributes: ServiceNowTicketCreateAttributes + + :param type: ServiceNow ticket resource type + :type type: ServiceNowTicketResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_ticket_create_request.py b/datadog_api_client/v2/model/service_now_ticket_create_request.py new file mode 100644 index 0000000000..957431edca --- /dev/null +++ b/datadog_api_client/v2/model/service_now_ticket_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_ticket_create_data import ServiceNowTicketCreateData + +class ServiceNowTicketCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_ticket_create_data import ServiceNowTicketCreateData + return { + "data": (ServiceNowTicketCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ServiceNowTicketCreateData, **kwargs): + """ + ServiceNow ticket creation request + + :param data: ServiceNow ticket creation data + :type data: ServiceNowTicketCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_now_ticket_resource_type.py b/datadog_api_client/v2/model/service_now_ticket_resource_type.py new file mode 100644 index 0000000000..e5cfd2a396 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_ticket_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceNowTicketResourceType(ModelSimple): + """ + ServiceNow ticket resource type + + :param value: If omitted defaults to "tickets". Must be one of ["tickets"]. + :type value: str + """ + + allowed_values = { + "tickets", + } + TICKETS: ClassVar["ServiceNowTicketResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceNowTicketResourceType.TICKETS = ServiceNowTicketResourceType("tickets") diff --git a/datadog_api_client/v2/model/service_now_ticket_result.py b/datadog_api_client/v2/model/service_now_ticket_result.py new file mode 100644 index 0000000000..f78eb8a619 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_ticket_result.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowTicketResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "sys_target_link": (str,), + } + attribute_map = { + "sys_target_link": "sys_target_link", + } + + def __init__(self_, sys_target_link: Union[str, UnsetType]=unset, **kwargs): + """ + ServiceNow ticket information + + :param sys_target_link: Link to the Incident created on ServiceNow + :type sys_target_link: str, optional + """ + if sys_target_link is not unset: + kwargs["sys_target_link"] = sys_target_link + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/service_now_tickets_data_type.py b/datadog_api_client/v2/model/service_now_tickets_data_type.py new file mode 100644 index 0000000000..978f7742c8 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_tickets_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceNowTicketsDataType(ModelSimple): + """ + ServiceNow tickets resource type. + + :param value: If omitted defaults to "servicenow_tickets". Must be one of ["servicenow_tickets"]. + :type value: str + """ + + allowed_values = { + "servicenow_tickets", + } + SERVICENOW_TICKETS: ClassVar["ServiceNowTicketsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceNowTicketsDataType.SERVICENOW_TICKETS = ServiceNowTicketsDataType("servicenow_tickets") diff --git a/datadog_api_client/v2/model/service_now_user_attributes.py b/datadog_api_client/v2/model/service_now_user_attributes.py new file mode 100644 index 0000000000..f0391a1b37 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_user_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceNowUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "full_name": (str,), + "instance_id": (UUID,), + "user_name": (str,), + "user_sys_id": (str,), + } + attribute_map = { + "email": "email", + "full_name": "full_name", + "instance_id": "instance_id", + "user_name": "user_name", + "user_sys_id": "user_sys_id", + } + + def __init__(self_, email: str, instance_id: UUID, user_name: str, user_sys_id: str, full_name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a ServiceNow user + + :param email: The email address of the user + :type email: str + + :param full_name: The full name of the user + :type full_name: str, optional + + :param instance_id: The ID of the ServiceNow instance + :type instance_id: UUID + + :param user_name: The username of the ServiceNow user + :type user_name: str + + :param user_sys_id: The system ID of the user in ServiceNow + :type user_sys_id: str + """ + if full_name is not unset: + kwargs["full_name"] = full_name + super().__init__(kwargs) + + + self_.email = email + self_.instance_id = instance_id + self_.user_name = user_name + self_.user_sys_id = user_sys_id diff --git a/datadog_api_client/v2/model/service_now_user_data.py b/datadog_api_client/v2/model/service_now_user_data.py new file mode 100644 index 0000000000..e96e1f5dee --- /dev/null +++ b/datadog_api_client/v2/model/service_now_user_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_user_attributes import ServiceNowUserAttributes + from datadog_api_client.v2.model.service_now_user_type import ServiceNowUserType + +class ServiceNowUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_user_attributes import ServiceNowUserAttributes + from datadog_api_client.v2.model.service_now_user_type import ServiceNowUserType + return { + "attributes": (ServiceNowUserAttributes,), + "id": (UUID,), + "type": (ServiceNowUserType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ServiceNowUserAttributes, id: UUID, type: ServiceNowUserType, **kwargs): + """ + Data object for a ServiceNow user + + :param attributes: Attributes of a ServiceNow user + :type attributes: ServiceNowUserAttributes + + :param id: Unique identifier for the ServiceNow user + :type id: UUID + + :param type: Type identifier for ServiceNow user resources + :type type: ServiceNowUserType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/service_now_user_type.py b/datadog_api_client/v2/model/service_now_user_type.py new file mode 100644 index 0000000000..f1799d65e7 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_user_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceNowUserType(ModelSimple): + """ + Type identifier for ServiceNow user resources + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["ServiceNowUserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceNowUserType.USERS = ServiceNowUserType("users") diff --git a/datadog_api_client/v2/model/service_now_users_response.py b/datadog_api_client/v2/model/service_now_users_response.py new file mode 100644 index 0000000000..4c6a7233a7 --- /dev/null +++ b/datadog_api_client/v2/model/service_now_users_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_now_user_data import ServiceNowUserData + +class ServiceNowUsersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_now_user_data import ServiceNowUserData + return { + "data": ([ServiceNowUserData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ServiceNowUserData], **kwargs): + """ + Response containing ServiceNow users + + :param data: Array of ServiceNow user data objects + :type data: [ServiceNowUserData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_repository_info_data_type.py b/datadog_api_client/v2/model/service_repository_info_data_type.py new file mode 100644 index 0000000000..f2d4460c96 --- /dev/null +++ b/datadog_api_client/v2/model/service_repository_info_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceRepositoryInfoDataType(ModelSimple): + """ + The resource type for service repository info objects. + + :param value: If omitted defaults to "service_repository_info". Must be one of ["service_repository_info"]. + :type value: str + """ + + allowed_values = { + "service_repository_info", + } + SERVICE_REPOSITORY_INFO: ClassVar["ServiceRepositoryInfoDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceRepositoryInfoDataType.SERVICE_REPOSITORY_INFO = ServiceRepositoryInfoDataType("service_repository_info") diff --git a/datadog_api_client/v2/model/service_repository_info_request.py b/datadog_api_client/v2/model/service_repository_info_request.py new file mode 100644 index 0000000000..8208a62927 --- /dev/null +++ b/datadog_api_client/v2/model/service_repository_info_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_repository_info_request_data import ServiceRepositoryInfoRequestData + +class ServiceRepositoryInfoRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_repository_info_request_data import ServiceRepositoryInfoRequestData + return { + "data": (ServiceRepositoryInfoRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ServiceRepositoryInfoRequestData, **kwargs): + """ + Request body for retrieving service repository information. + + :param data: Data object for the service repository info request. + :type data: ServiceRepositoryInfoRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_repository_info_request_attributes.py b/datadog_api_client/v2/model/service_repository_info_request_attributes.py new file mode 100644 index 0000000000..dd359661f1 --- /dev/null +++ b/datadog_api_client/v2/model/service_repository_info_request_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ServiceRepositoryInfoRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "service": (str,), + "version": (str,), + } + attribute_map = { + "service": "service", + "version": "version", + } + + def __init__(self_, service: str, version: str, **kwargs): + """ + Attributes for the service repository info request. + + :param service: The name of the service. + :type service: str + + :param version: The version of the service. + :type version: str + """ + super().__init__(kwargs) + + + self_.service = service + self_.version = version diff --git a/datadog_api_client/v2/model/service_repository_info_request_data.py b/datadog_api_client/v2/model/service_repository_info_request_data.py new file mode 100644 index 0000000000..85c0ee2ac6 --- /dev/null +++ b/datadog_api_client/v2/model/service_repository_info_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_repository_info_request_attributes import ServiceRepositoryInfoRequestAttributes + from datadog_api_client.v2.model.service_repository_info_data_type import ServiceRepositoryInfoDataType + +class ServiceRepositoryInfoRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_repository_info_request_attributes import ServiceRepositoryInfoRequestAttributes + from datadog_api_client.v2.model.service_repository_info_data_type import ServiceRepositoryInfoDataType + return { + "attributes": (ServiceRepositoryInfoRequestAttributes,), + "type": (ServiceRepositoryInfoDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: ServiceRepositoryInfoRequestAttributes, type: ServiceRepositoryInfoDataType, **kwargs): + """ + Data object for the service repository info request. + + :param attributes: Attributes for the service repository info request. + :type attributes: ServiceRepositoryInfoRequestAttributes + + :param type: The resource type for service repository info objects. + :type type: ServiceRepositoryInfoDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/service_repository_info_response.py b/datadog_api_client/v2/model/service_repository_info_response.py new file mode 100644 index 0000000000..a11f4f4475 --- /dev/null +++ b/datadog_api_client/v2/model/service_repository_info_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_repository_info_response_data import ServiceRepositoryInfoResponseData + +class ServiceRepositoryInfoResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_repository_info_response_data import ServiceRepositoryInfoResponseData + return { + "data": (ServiceRepositoryInfoResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ServiceRepositoryInfoResponseData, **kwargs): + """ + Response containing service repository information. + + :param data: Data object for the service repository info response. + :type data: ServiceRepositoryInfoResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/service_repository_info_response_attributes.py b/datadog_api_client/v2/model/service_repository_info_response_attributes.py new file mode 100644 index 0000000000..1da622af36 --- /dev/null +++ b/datadog_api_client/v2/model/service_repository_info_response_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_repository_info_status import ServiceRepositoryInfoStatus + +class ServiceRepositoryInfoResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_repository_info_status import ServiceRepositoryInfoStatus + return { + "commit_sha": (str,), + "repository_url": (str,), + "status": (ServiceRepositoryInfoStatus,), + } + attribute_map = { + "commit_sha": "commit_sha", + "repository_url": "repository_url", + "status": "status", + } + + def __init__(self_, status: ServiceRepositoryInfoStatus, commit_sha: Union[str, UnsetType]=unset, repository_url: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the service repository information. + + :param commit_sha: The SHA of the commit associated with the service version. + :type commit_sha: str, optional + + :param repository_url: The URL of the source code repository. + :type repository_url: str, optional + + :param status: The status of the service repository info lookup. + :type status: ServiceRepositoryInfoStatus + """ + if commit_sha is not unset: + kwargs["commit_sha"] = commit_sha + if repository_url is not unset: + kwargs["repository_url"] = repository_url + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/service_repository_info_response_data.py b/datadog_api_client/v2/model/service_repository_info_response_data.py new file mode 100644 index 0000000000..be1e69ee75 --- /dev/null +++ b/datadog_api_client/v2/model/service_repository_info_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.service_repository_info_response_attributes import ServiceRepositoryInfoResponseAttributes + from datadog_api_client.v2.model.service_repository_info_data_type import ServiceRepositoryInfoDataType + +class ServiceRepositoryInfoResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.service_repository_info_response_attributes import ServiceRepositoryInfoResponseAttributes + from datadog_api_client.v2.model.service_repository_info_data_type import ServiceRepositoryInfoDataType + return { + "attributes": (ServiceRepositoryInfoResponseAttributes,), + "id": (str,), + "type": (ServiceRepositoryInfoDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ServiceRepositoryInfoResponseAttributes, id: str, type: ServiceRepositoryInfoDataType, **kwargs): + """ + Data object for the service repository info response. + + :param attributes: Attributes of the service repository information. + :type attributes: ServiceRepositoryInfoResponseAttributes + + :param id: The identifier composed of the service name and version. + :type id: str + + :param type: The resource type for service repository info objects. + :type type: ServiceRepositoryInfoDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/service_repository_info_status.py b/datadog_api_client/v2/model/service_repository_info_status.py new file mode 100644 index 0000000000..edfa4e40ea --- /dev/null +++ b/datadog_api_client/v2/model/service_repository_info_status.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ServiceRepositoryInfoStatus(ModelSimple): + """ + The status of the service repository info lookup. + + :param value: Must be one of ["success", "not_found", "no_repository", "internal_error", "unknown"]. + :type value: str + """ + + allowed_values = { + "success", + "not_found", + "no_repository", + "internal_error", + "unknown", + } + SUCCESS: ClassVar["ServiceRepositoryInfoStatus"] + NOT_FOUND: ClassVar["ServiceRepositoryInfoStatus"] + NO_REPOSITORY: ClassVar["ServiceRepositoryInfoStatus"] + INTERNAL_ERROR: ClassVar["ServiceRepositoryInfoStatus"] + UNKNOWN: ClassVar["ServiceRepositoryInfoStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ServiceRepositoryInfoStatus.SUCCESS = ServiceRepositoryInfoStatus("success") +ServiceRepositoryInfoStatus.NOT_FOUND = ServiceRepositoryInfoStatus("not_found") +ServiceRepositoryInfoStatus.NO_REPOSITORY = ServiceRepositoryInfoStatus("no_repository") +ServiceRepositoryInfoStatus.INTERNAL_ERROR = ServiceRepositoryInfoStatus("internal_error") +ServiceRepositoryInfoStatus.UNKNOWN = ServiceRepositoryInfoStatus("unknown") diff --git a/datadog_api_client/v2/model/session_id_array.py b/datadog_api_client/v2/model/session_id_array.py new file mode 100644 index 0000000000..8d4e4af65f --- /dev/null +++ b/datadog_api_client/v2/model/session_id_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.session_id_data import SessionIdData + +class SessionIdArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.session_id_data import SessionIdData + return { + "data": ([SessionIdData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SessionIdData], **kwargs): + """ + A collection of session identifiers used for bulk add or remove operations on a playlist. + + :param data: Array of session identifier data objects. + :type data: [SessionIdData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/session_id_data.py b/datadog_api_client/v2/model/session_id_data.py new file mode 100644 index 0000000000..01f3017d10 --- /dev/null +++ b/datadog_api_client/v2/model/session_id_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.viewership_history_session_data_type import ViewershipHistorySessionDataType + +class SessionIdData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.viewership_history_session_data_type import ViewershipHistorySessionDataType + return { + "id": (str,), + "type": (ViewershipHistorySessionDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, type: ViewershipHistorySessionDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + A session identifier data object used for bulk playlist operations. + + :param id: Unique identifier of the RUM replay session. + :type id: str, optional + + :param type: Rum replay session resource type. + :type type: ViewershipHistorySessionDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/shared_dashboard_global_time.py b/datadog_api_client/v2/model/shared_dashboard_global_time.py new file mode 100644 index 0000000000..6b79c09810 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_global_time.py @@ -0,0 +1,34 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardGlobalTime(ModelNormal): + _nullable = True + + def __init__(self_, **kwargs): + """ + Default time range configuration for the shared dashboard. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/shared_dashboard_included.py b/datadog_api_client/v2/model/shared_dashboard_included.py new file mode 100644 index 0000000000..d8bb43a7e4 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_included.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Resource included with a shared dashboard. + + :param attributes: Attributes of the included dashboard. + :type attributes: SharedDashboardIncludedDashboardAttributes + + :param id: ID of the dashboard. + :type id: str + + :param type: Included dashboard resource type. + :type type: SharedDashboardIncludedDashboardType + """ + 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.shared_dashboard_included_dashboard import SharedDashboardIncludedDashboard + from datadog_api_client.v2.model.shared_dashboard_included_user import SharedDashboardIncludedUser + return { + "oneOf": [ + SharedDashboardIncludedDashboard, + SharedDashboardIncludedUser, + ], + } diff --git a/datadog_api_client/v2/model/shared_dashboard_included_dashboard.py b/datadog_api_client/v2/model/shared_dashboard_included_dashboard.py new file mode 100644 index 0000000000..8c136b12ba --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_included_dashboard.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shared_dashboard_included_dashboard_attributes import SharedDashboardIncludedDashboardAttributes + from datadog_api_client.v2.model.shared_dashboard_included_dashboard_type import SharedDashboardIncludedDashboardType + +class SharedDashboardIncludedDashboard(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shared_dashboard_included_dashboard_attributes import SharedDashboardIncludedDashboardAttributes + from datadog_api_client.v2.model.shared_dashboard_included_dashboard_type import SharedDashboardIncludedDashboardType + return { + "attributes": (SharedDashboardIncludedDashboardAttributes,), + "id": (str,), + "type": (SharedDashboardIncludedDashboardType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SharedDashboardIncludedDashboardAttributes, id: str, type: SharedDashboardIncludedDashboardType, **kwargs): + """ + Included dashboard resource. + + :param attributes: Attributes of the included dashboard. + :type attributes: SharedDashboardIncludedDashboardAttributes + + :param id: ID of the dashboard. + :type id: str + + :param type: Included dashboard resource type. + :type type: SharedDashboardIncludedDashboardType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/shared_dashboard_included_dashboard_attributes.py b/datadog_api_client/v2/model/shared_dashboard_included_dashboard_attributes.py new file mode 100644 index 0000000000..36d96ac2ae --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_included_dashboard_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardIncludedDashboardAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "title": (str,), + } + attribute_map = { + "title": "title", + } + + def __init__(self_, title: str, **kwargs): + """ + Attributes of the included dashboard. + + :param title: Dashboard title. + :type title: str + """ + super().__init__(kwargs) + + + self_.title = title diff --git a/datadog_api_client/v2/model/shared_dashboard_included_dashboard_type.py b/datadog_api_client/v2/model/shared_dashboard_included_dashboard_type.py new file mode 100644 index 0000000000..86dad6055d --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_included_dashboard_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SharedDashboardIncludedDashboardType(ModelSimple): + """ + Included dashboard resource type. + + :param value: If omitted defaults to "dashboard". Must be one of ["dashboard"]. + :type value: str + """ + + allowed_values = { + "dashboard", + } + DASHBOARD: ClassVar["SharedDashboardIncludedDashboardType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SharedDashboardIncludedDashboardType.DASHBOARD = SharedDashboardIncludedDashboardType("dashboard") diff --git a/datadog_api_client/v2/model/shared_dashboard_included_user.py b/datadog_api_client/v2/model/shared_dashboard_included_user.py new file mode 100644 index 0000000000..8898030255 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_included_user.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shared_dashboard_included_user_attributes import SharedDashboardIncludedUserAttributes + from datadog_api_client.v2.model.user_resource_type import UserResourceType + +class SharedDashboardIncludedUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shared_dashboard_included_user_attributes import SharedDashboardIncludedUserAttributes + from datadog_api_client.v2.model.user_resource_type import UserResourceType + return { + "attributes": (SharedDashboardIncludedUserAttributes,), + "id": (str,), + "type": (UserResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SharedDashboardIncludedUserAttributes, id: str, type: UserResourceType, **kwargs): + """ + Included user resource. + + :param attributes: Attributes of the included user. + :type attributes: SharedDashboardIncludedUserAttributes + + :param id: ID of the user. + :type id: str + + :param type: User resource type. + :type type: UserResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/shared_dashboard_included_user_attributes.py b/datadog_api_client/v2/model/shared_dashboard_included_user_attributes.py new file mode 100644 index 0000000000..48892743f8 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_included_user_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardIncludedUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str,), + } + attribute_map = { + "handle": "handle", + "name": "name", + } + + def __init__(self_, handle: str, name: str, **kwargs): + """ + Attributes of the included user. + + :param handle: User handle. + :type handle: str + + :param name: User display name. + :type name: str + """ + super().__init__(kwargs) + + + self_.handle = handle + self_.name = name diff --git a/datadog_api_client/v2/model/shared_dashboard_invitee.py b/datadog_api_client/v2/model/shared_dashboard_invitee.py new file mode 100644 index 0000000000..4836b2b957 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_invitee.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardInvitee(ModelNormal): + @cached_property + def openapi_types(_): + return { + "access_expiration": (datetime, none_type), + "created_at": (datetime,), + "email": (str,), + } + attribute_map = { + "access_expiration": "access_expiration", + "created_at": "created_at", + "email": "email", + } + + def __init__(self_, access_expiration: Union[datetime, none_type], created_at: datetime, email: str, **kwargs): + """ + Invitee that can access an invite-only shared dashboard. + + :param access_expiration: Time when the invitee's access expires. + :type access_expiration: datetime, none_type + + :param created_at: Time when the invitee was added. + :type created_at: datetime + + :param email: Email address of the invitee. + :type email: str + """ + super().__init__(kwargs) + + + self_.access_expiration = access_expiration + self_.created_at = created_at + self_.email = email diff --git a/datadog_api_client/v2/model/shared_dashboard_relationship_dashboard.py b/datadog_api_client/v2/model/shared_dashboard_relationship_dashboard.py new file mode 100644 index 0000000000..f37d2bed11 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_relationship_dashboard.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shared_dashboard_relationship_dashboard_data import SharedDashboardRelationshipDashboardData + +class SharedDashboardRelationshipDashboard(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shared_dashboard_relationship_dashboard_data import SharedDashboardRelationshipDashboardData + return { + "data": (SharedDashboardRelationshipDashboardData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SharedDashboardRelationshipDashboardData, **kwargs): + """ + Dashboard associated with the shared dashboard. + + :param data: Dashboard relationship data. + :type data: SharedDashboardRelationshipDashboardData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/shared_dashboard_relationship_dashboard_data.py b/datadog_api_client/v2/model/shared_dashboard_relationship_dashboard_data.py new file mode 100644 index 0000000000..05d5b12501 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_relationship_dashboard_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shared_dashboard_included_dashboard_type import SharedDashboardIncludedDashboardType + +class SharedDashboardRelationshipDashboardData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shared_dashboard_included_dashboard_type import SharedDashboardIncludedDashboardType + return { + "id": (str,), + "type": (SharedDashboardIncludedDashboardType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: SharedDashboardIncludedDashboardType, **kwargs): + """ + Dashboard relationship data. + + :param id: ID of the dashboard. + :type id: str + + :param type: Included dashboard resource type. + :type type: SharedDashboardIncludedDashboardType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/shared_dashboard_relationship_sharer.py b/datadog_api_client/v2/model/shared_dashboard_relationship_sharer.py new file mode 100644 index 0000000000..6fbc6a5452 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_relationship_sharer.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_relationship_data import UserRelationshipData + +class SharedDashboardRelationshipSharer(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_relationship_data import UserRelationshipData + return { + "data": (UserRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UserRelationshipData, **kwargs): + """ + User who shared the dashboard. + + :param data: Relationship to user object. + :type data: UserRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/shared_dashboard_relationships.py b/datadog_api_client/v2/model/shared_dashboard_relationships.py new file mode 100644 index 0000000000..07d02fec9f --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shared_dashboard_relationship_dashboard import SharedDashboardRelationshipDashboard + from datadog_api_client.v2.model.shared_dashboard_relationship_sharer import SharedDashboardRelationshipSharer + +class SharedDashboardRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shared_dashboard_relationship_dashboard import SharedDashboardRelationshipDashboard + from datadog_api_client.v2.model.shared_dashboard_relationship_sharer import SharedDashboardRelationshipSharer + return { + "dashboard": (SharedDashboardRelationshipDashboard,), + "sharer": (SharedDashboardRelationshipSharer,), + } + attribute_map = { + "dashboard": "dashboard", + "sharer": "sharer", + } + + def __init__(self_, dashboard: SharedDashboardRelationshipDashboard, sharer: SharedDashboardRelationshipSharer, **kwargs): + """ + Relationships of a shared dashboard. + + :param dashboard: Dashboard associated with the shared dashboard. + :type dashboard: SharedDashboardRelationshipDashboard + + :param sharer: User who shared the dashboard. + :type sharer: SharedDashboardRelationshipSharer + """ + super().__init__(kwargs) + + + self_.dashboard = dashboard + self_.sharer = sharer diff --git a/datadog_api_client/v2/model/shared_dashboard_response.py b/datadog_api_client/v2/model/shared_dashboard_response.py new file mode 100644 index 0000000000..cc241dff67 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_response.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shared_dashboard_response_attributes import SharedDashboardResponseAttributes + from datadog_api_client.v2.model.shared_dashboard_relationships import SharedDashboardRelationships + from datadog_api_client.v2.model.shared_dashboard_type import SharedDashboardType + +class SharedDashboardResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shared_dashboard_response_attributes import SharedDashboardResponseAttributes + from datadog_api_client.v2.model.shared_dashboard_relationships import SharedDashboardRelationships + from datadog_api_client.v2.model.shared_dashboard_type import SharedDashboardType + return { + "attributes": (SharedDashboardResponseAttributes,), + "id": (str,), + "relationships": (SharedDashboardRelationships,), + "type": (SharedDashboardType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: SharedDashboardResponseAttributes, id: str, relationships: SharedDashboardRelationships, type: SharedDashboardType, **kwargs): + """ + A shared dashboard response resource. + + :param attributes: Attributes of a shared dashboard response. + :type attributes: SharedDashboardResponseAttributes + + :param id: ID of the shared dashboard. + :type id: str + + :param relationships: Relationships of a shared dashboard. + :type relationships: SharedDashboardRelationships + + :param type: Shared dashboard resource type. + :type type: SharedDashboardType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/shared_dashboard_response_attributes.py b/datadog_api_client/v2/model/shared_dashboard_response_attributes.py new file mode 100644 index 0000000000..f7a34c9e0c --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_response_attributes.py @@ -0,0 +1,142 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shared_dashboard_global_time import SharedDashboardGlobalTime + from datadog_api_client.v2.model.shared_dashboard_invitee import SharedDashboardInvitee + from datadog_api_client.v2.model.shared_dashboard_selectable_template_variable import SharedDashboardSelectableTemplateVariable + from datadog_api_client.v2.model.shared_dashboard_share_type import SharedDashboardShareType + from datadog_api_client.v2.model.shared_dashboard_status import SharedDashboardStatus + from datadog_api_client.v2.model.shared_dashboard_viewing_preferences import SharedDashboardViewingPreferences + +class SharedDashboardResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shared_dashboard_global_time import SharedDashboardGlobalTime + from datadog_api_client.v2.model.shared_dashboard_invitee import SharedDashboardInvitee + from datadog_api_client.v2.model.shared_dashboard_selectable_template_variable import SharedDashboardSelectableTemplateVariable + from datadog_api_client.v2.model.shared_dashboard_share_type import SharedDashboardShareType + from datadog_api_client.v2.model.shared_dashboard_status import SharedDashboardStatus + from datadog_api_client.v2.model.shared_dashboard_viewing_preferences import SharedDashboardViewingPreferences + return { + "created_at": (datetime,), + "embeddable_domains": ([str],), + "expiration": (datetime, none_type), + "global_time": (SharedDashboardGlobalTime,), + "global_time_selectable": (bool,), + "invitees": ([SharedDashboardInvitee],), + "last_accessed": (datetime, none_type), + "selectable_template_vars": ([SharedDashboardSelectableTemplateVariable],), + "share_type": (SharedDashboardShareType,), + "sharer_disabled": (bool,), + "status": (SharedDashboardStatus,), + "title": (str,), + "token": (str,), + "url": (str,), + "viewing_preferences": (SharedDashboardViewingPreferences,), + } + attribute_map = { + "created_at": "created_at", + "embeddable_domains": "embeddable_domains", + "expiration": "expiration", + "global_time": "global_time", + "global_time_selectable": "global_time_selectable", + "invitees": "invitees", + "last_accessed": "last_accessed", + "selectable_template_vars": "selectable_template_vars", + "share_type": "share_type", + "sharer_disabled": "sharer_disabled", + "status": "status", + "title": "title", + "token": "token", + "url": "url", + "viewing_preferences": "viewing_preferences", + } + + def __init__(self_, created_at: datetime, embeddable_domains: List[str], expiration: Union[datetime, none_type], global_time: Union[SharedDashboardGlobalTime, none_type], global_time_selectable: bool, invitees: List[SharedDashboardInvitee], last_accessed: Union[datetime, none_type], selectable_template_vars: List[SharedDashboardSelectableTemplateVariable], share_type: SharedDashboardShareType, sharer_disabled: bool, status: SharedDashboardStatus, title: str, token: str, url: str, viewing_preferences: SharedDashboardViewingPreferences, **kwargs): + """ + Attributes of a shared dashboard response. + + :param created_at: Time when the shared dashboard was created. + :type created_at: datetime + + :param embeddable_domains: Domains where embed-type shared dashboards can be embedded. + :type embeddable_domains: [str] + + :param expiration: Time when the shared dashboard expires. + :type expiration: datetime, none_type + + :param global_time: Default time range configuration for the shared dashboard. + :type global_time: SharedDashboardGlobalTime, none_type + + :param global_time_selectable: Whether viewers can select a different global time setting. + :type global_time_selectable: bool + + :param invitees: Invitees for invite-only shared dashboards. + :type invitees: [SharedDashboardInvitee] + + :param last_accessed: Time when the shared dashboard was last accessed. + :type last_accessed: datetime, none_type + + :param selectable_template_vars: Template variables that viewers can modify. + :type selectable_template_vars: [SharedDashboardSelectableTemplateVariable] + + :param share_type: Type of dashboard sharing. + :type share_type: SharedDashboardShareType + + :param sharer_disabled: Whether the user who shared the dashboard is disabled. + :type sharer_disabled: bool + + :param status: Status of the shared dashboard. + :type status: SharedDashboardStatus + + :param title: Display title for the shared dashboard. + :type title: str + + :param token: Token assigned to the shared dashboard. + :type token: str + + :param url: URL for the shared dashboard. + :type url: str + + :param viewing_preferences: Display settings for the shared dashboard. + :type viewing_preferences: SharedDashboardViewingPreferences + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.embeddable_domains = embeddable_domains + self_.expiration = expiration + self_.global_time = global_time + self_.global_time_selectable = global_time_selectable + self_.invitees = invitees + self_.last_accessed = last_accessed + self_.selectable_template_vars = selectable_template_vars + self_.share_type = share_type + self_.sharer_disabled = sharer_disabled + self_.status = status + self_.title = title + self_.token = token + self_.url = url + self_.viewing_preferences = viewing_preferences diff --git a/datadog_api_client/v2/model/shared_dashboard_selectable_template_variable.py b/datadog_api_client/v2/model/shared_dashboard_selectable_template_variable.py new file mode 100644 index 0000000000..69d025945d --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_selectable_template_variable.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SharedDashboardSelectableTemplateVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "allow_any_value": (bool,), + "default_values": ([str],), + "name": (str,), + "prefix": (str,), + "type": (str,), + "visible_tags": ([str],), + } + attribute_map = { + "allow_any_value": "allow_any_value", + "default_values": "default_values", + "name": "name", + "prefix": "prefix", + "type": "type", + "visible_tags": "visible_tags", + } + + def __init__(self_, allow_any_value: bool, default_values: List[str], name: str, prefix: str, type: str, visible_tags: List[str], **kwargs): + """ + A template variable that viewers can modify on the shared dashboard. + + :param allow_any_value: Whether viewers can see all tag values for the template variable and specify any value. + :type allow_any_value: bool + + :param default_values: Default selected values for the variable. + :type default_values: [str] + + :param name: Name of the template variable. + :type name: str + + :param prefix: Tag prefix for the variable. + :type prefix: str + + :param type: Type of the template variable. + :type type: str + + :param visible_tags: Restricts which tag values are visible to the viewer. + :type visible_tags: [str] + """ + super().__init__(kwargs) + + + self_.allow_any_value = allow_any_value + self_.default_values = default_values + self_.name = name + self_.prefix = prefix + self_.type = type + self_.visible_tags = visible_tags diff --git a/datadog_api_client/v2/model/shared_dashboard_share_type.py b/datadog_api_client/v2/model/shared_dashboard_share_type.py new file mode 100644 index 0000000000..0db40b376c --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_share_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SharedDashboardShareType(ModelSimple): + """ + Type of dashboard sharing. + + :param value: Must be one of ["open", "invite", "embed", "secure-embed"]. + :type value: str + """ + + allowed_values = { + "open", + "invite", + "embed", + "secure-embed", + } + OPEN: ClassVar["SharedDashboardShareType"] + INVITE: ClassVar["SharedDashboardShareType"] + EMBED: ClassVar["SharedDashboardShareType"] + SECURE_EMBED: ClassVar["SharedDashboardShareType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SharedDashboardShareType.OPEN = SharedDashboardShareType("open") +SharedDashboardShareType.INVITE = SharedDashboardShareType("invite") +SharedDashboardShareType.EMBED = SharedDashboardShareType("embed") +SharedDashboardShareType.SECURE_EMBED = SharedDashboardShareType("secure-embed") diff --git a/datadog_api_client/v2/model/shared_dashboard_status.py b/datadog_api_client/v2/model/shared_dashboard_status.py new file mode 100644 index 0000000000..9d1334f4a6 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SharedDashboardStatus(ModelSimple): + """ + Status of the shared dashboard. + + :param value: Must be one of ["active", "paused"]. + :type value: str + """ + + allowed_values = { + "active", + "paused", + } + ACTIVE: ClassVar["SharedDashboardStatus"] + PAUSED: ClassVar["SharedDashboardStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SharedDashboardStatus.ACTIVE = SharedDashboardStatus("active") +SharedDashboardStatus.PAUSED = SharedDashboardStatus("paused") diff --git a/datadog_api_client/v2/model/shared_dashboard_type.py b/datadog_api_client/v2/model/shared_dashboard_type.py new file mode 100644 index 0000000000..f0ab262462 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SharedDashboardType(ModelSimple): + """ + Shared dashboard resource type. + + :param value: If omitted defaults to "shared_dashboard". Must be one of ["shared_dashboard"]. + :type value: str + """ + + allowed_values = { + "shared_dashboard", + } + SHARED_DASHBOARD: ClassVar["SharedDashboardType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SharedDashboardType.SHARED_DASHBOARD = SharedDashboardType("shared_dashboard") diff --git a/datadog_api_client/v2/model/shared_dashboard_viewing_preferences.py b/datadog_api_client/v2/model/shared_dashboard_viewing_preferences.py new file mode 100644 index 0000000000..ba9ab22357 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_viewing_preferences.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shared_dashboard_viewing_preferences_theme import SharedDashboardViewingPreferencesTheme + +class SharedDashboardViewingPreferences(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shared_dashboard_viewing_preferences_theme import SharedDashboardViewingPreferencesTheme + return { + "high_density": (bool,), + "theme": (SharedDashboardViewingPreferencesTheme,), + } + attribute_map = { + "high_density": "high_density", + "theme": "theme", + } + + def __init__(self_, high_density: bool, theme: SharedDashboardViewingPreferencesTheme, **kwargs): + """ + Display settings for the shared dashboard. + + :param high_density: Whether widgets are displayed in high-density mode. + :type high_density: bool + + :param theme: The theme of the shared dashboard view. ``system`` follows the viewer's system default. + :type theme: SharedDashboardViewingPreferencesTheme + """ + super().__init__(kwargs) + + + self_.high_density = high_density + self_.theme = theme diff --git a/datadog_api_client/v2/model/shared_dashboard_viewing_preferences_theme.py b/datadog_api_client/v2/model/shared_dashboard_viewing_preferences_theme.py new file mode 100644 index 0000000000..2a040eedf4 --- /dev/null +++ b/datadog_api_client/v2/model/shared_dashboard_viewing_preferences_theme.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SharedDashboardViewingPreferencesTheme(ModelSimple): + """ + The theme of the shared dashboard view. `system` follows the viewer's system default. + + :param value: Must be one of ["system", "light", "dark"]. + :type value: str + """ + + allowed_values = { + "system", + "light", + "dark", + } + SYSTEM: ClassVar["SharedDashboardViewingPreferencesTheme"] + LIGHT: ClassVar["SharedDashboardViewingPreferencesTheme"] + DARK: ClassVar["SharedDashboardViewingPreferencesTheme"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SharedDashboardViewingPreferencesTheme.SYSTEM = SharedDashboardViewingPreferencesTheme("system") +SharedDashboardViewingPreferencesTheme.LIGHT = SharedDashboardViewingPreferencesTheme("light") +SharedDashboardViewingPreferencesTheme.DARK = SharedDashboardViewingPreferencesTheme("dark") diff --git a/datadog_api_client/v2/model/shift.py b/datadog_api_client/v2/model/shift.py new file mode 100644 index 0000000000..a447563615 --- /dev/null +++ b/datadog_api_client/v2/model/shift.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shift_data import ShiftData + from datadog_api_client.v2.model.shift_included import ShiftIncluded + from datadog_api_client.v2.model.schedule_user import ScheduleUser + +class Shift(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shift_data import ShiftData + from datadog_api_client.v2.model.shift_included import ShiftIncluded + return { + "data": (ShiftData,), + "included": ([ShiftIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[ShiftData, UnsetType]=unset, included: Union[List[Union[ShiftIncluded, ScheduleUser]], UnsetType]=unset, **kwargs): + """ + An on-call shift with its associated data and relationships. + + :param data: Data for an on-call shift. + :type data: ShiftData, optional + + :param included: The ``Shift`` ``included``. + :type included: [ShiftIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/shift_data.py b/datadog_api_client/v2/model/shift_data.py new file mode 100644 index 0000000000..5d4ee052ea --- /dev/null +++ b/datadog_api_client/v2/model/shift_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shift_data_attributes import ShiftDataAttributes + from datadog_api_client.v2.model.shift_data_relationships import ShiftDataRelationships + from datadog_api_client.v2.model.shift_data_type import ShiftDataType + +class ShiftData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shift_data_attributes import ShiftDataAttributes + from datadog_api_client.v2.model.shift_data_relationships import ShiftDataRelationships + from datadog_api_client.v2.model.shift_data_type import ShiftDataType + return { + "attributes": (ShiftDataAttributes,), + "id": (str,), + "relationships": (ShiftDataRelationships,), + "type": (ShiftDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: ShiftDataType, attributes: Union[ShiftDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[ShiftDataRelationships, UnsetType]=unset, **kwargs): + """ + Data for an on-call shift. + + :param attributes: Attributes for an on-call shift. + :type attributes: ShiftDataAttributes, optional + + :param id: The ``ShiftData`` ``id``. + :type id: str, optional + + :param relationships: Relationships for an on-call shift. + :type relationships: ShiftDataRelationships, optional + + :param type: Indicates that the resource is of type 'shifts'. + :type type: ShiftDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/shift_data_attributes.py b/datadog_api_client/v2/model/shift_data_attributes.py new file mode 100644 index 0000000000..0939391f8e --- /dev/null +++ b/datadog_api_client/v2/model/shift_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ShiftDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "end": (datetime,), + "start": (datetime,), + } + attribute_map = { + "end": "end", + "start": "start", + } + + def __init__(self_, end: Union[datetime, UnsetType]=unset, start: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes for an on-call shift. + + :param end: The end time of the shift. + :type end: datetime, optional + + :param start: The start time of the shift. + :type start: datetime, optional + """ + if end is not unset: + kwargs["end"] = end + if start is not unset: + kwargs["start"] = start + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/shift_data_relationships.py b/datadog_api_client/v2/model/shift_data_relationships.py new file mode 100644 index 0000000000..0084728c18 --- /dev/null +++ b/datadog_api_client/v2/model/shift_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shift_data_relationships_user import ShiftDataRelationshipsUser + +class ShiftDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shift_data_relationships_user import ShiftDataRelationshipsUser + return { + "user": (ShiftDataRelationshipsUser,), + } + attribute_map = { + "user": "user", + } + + def __init__(self_, user: Union[ShiftDataRelationshipsUser, UnsetType]=unset, **kwargs): + """ + Relationships for an on-call shift. + + :param user: Defines the relationship between a shift and the user who is working that shift. + :type user: ShiftDataRelationshipsUser, optional + """ + if user is not unset: + kwargs["user"] = user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/shift_data_relationships_user.py b/datadog_api_client/v2/model/shift_data_relationships_user.py new file mode 100644 index 0000000000..234b7f4115 --- /dev/null +++ b/datadog_api_client/v2/model/shift_data_relationships_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shift_data_relationships_user_data import ShiftDataRelationshipsUserData + +class ShiftDataRelationshipsUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shift_data_relationships_user_data import ShiftDataRelationshipsUserData + return { + "data": (ShiftDataRelationshipsUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ShiftDataRelationshipsUserData, **kwargs): + """ + Defines the relationship between a shift and the user who is working that shift. + + :param data: Represents a reference to the user assigned to this shift, containing the user's ID and resource type. + :type data: ShiftDataRelationshipsUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/shift_data_relationships_user_data.py b/datadog_api_client/v2/model/shift_data_relationships_user_data.py new file mode 100644 index 0000000000..855caafb4b --- /dev/null +++ b/datadog_api_client/v2/model/shift_data_relationships_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.shift_data_relationships_user_data_type import ShiftDataRelationshipsUserDataType + +class ShiftDataRelationshipsUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.shift_data_relationships_user_data_type import ShiftDataRelationshipsUserDataType + return { + "id": (str,), + "type": (ShiftDataRelationshipsUserDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: ShiftDataRelationshipsUserDataType, **kwargs): + """ + Represents a reference to the user assigned to this shift, containing the user's ID and resource type. + + :param id: Specifies the unique identifier of the user. + :type id: str + + :param type: Indicates that the related resource is of type 'users'. + :type type: ShiftDataRelationshipsUserDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/shift_data_relationships_user_data_type.py b/datadog_api_client/v2/model/shift_data_relationships_user_data_type.py new file mode 100644 index 0000000000..a63445d92d --- /dev/null +++ b/datadog_api_client/v2/model/shift_data_relationships_user_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ShiftDataRelationshipsUserDataType(ModelSimple): + """ + Indicates that the related resource is of type 'users'. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["ShiftDataRelationshipsUserDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ShiftDataRelationshipsUserDataType.USERS = ShiftDataRelationshipsUserDataType("users") diff --git a/datadog_api_client/v2/model/shift_data_type.py b/datadog_api_client/v2/model/shift_data_type.py new file mode 100644 index 0000000000..2233879582 --- /dev/null +++ b/datadog_api_client/v2/model/shift_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ShiftDataType(ModelSimple): + """ + Indicates that the resource is of type 'shifts'. + + :param value: If omitted defaults to "shifts". Must be one of ["shifts"]. + :type value: str + """ + + allowed_values = { + "shifts", + } + SHIFTS: ClassVar["ShiftDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ShiftDataType.SHIFTS = ShiftDataType("shifts") diff --git a/datadog_api_client/v2/model/shift_included.py b/datadog_api_client/v2/model/shift_included.py new file mode 100644 index 0000000000..75dcc93518 --- /dev/null +++ b/datadog_api_client/v2/model/shift_included.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ShiftIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Included data for shift operations. + + :param attributes: Provides basic user information for a schedule, including a name and email address. + :type attributes: ScheduleUserAttributes, optional + + :param id: The unique user identifier. + :type id: str, optional + + :param type: Users resource type. + :type type: ScheduleUserType + """ + 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.schedule_user import ScheduleUser + return { + "oneOf": [ + ScheduleUser, + ], + } diff --git a/datadog_api_client/v2/model/signal_entities_attributes.py b/datadog_api_client/v2/model/signal_entities_attributes.py new file mode 100644 index 0000000000..cc3c9b46e4 --- /dev/null +++ b/datadog_api_client/v2/model/signal_entities_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.signal_entity_identity import SignalEntityIdentity + +class SignalEntitiesAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.signal_entity_identity import SignalEntityIdentity + return { + "identities": ([SignalEntityIdentity],), + } + attribute_map = { + "identities": "identities", + } + + def __init__(self_, identities: List[SignalEntityIdentity], **kwargs): + """ + Attributes containing the entities related to the signal. + + :param identities: The identity entities related to the signal. Each item is a free-form object describing an identity (for example, a user or principal). + :type identities: [SignalEntityIdentity] + """ + super().__init__(kwargs) + + + self_.identities = identities diff --git a/datadog_api_client/v2/model/signal_entities_data.py b/datadog_api_client/v2/model/signal_entities_data.py new file mode 100644 index 0000000000..8f62595dd4 --- /dev/null +++ b/datadog_api_client/v2/model/signal_entities_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.signal_entities_attributes import SignalEntitiesAttributes + from datadog_api_client.v2.model.signal_entities_type import SignalEntitiesType + +class SignalEntitiesData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.signal_entities_attributes import SignalEntitiesAttributes + from datadog_api_client.v2.model.signal_entities_type import SignalEntitiesType + return { + "attributes": (SignalEntitiesAttributes,), + "id": (str,), + "type": (SignalEntitiesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SignalEntitiesAttributes, id: str, type: SignalEntitiesType, **kwargs): + """ + Entities related to a security signal. + + :param attributes: Attributes containing the entities related to the signal. + :type attributes: SignalEntitiesAttributes + + :param id: The signal ID the entities are associated with. + :type id: str + + :param type: The type of the resource. The value should always be ``entities``. + :type type: SignalEntitiesType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/signal_entities_response.py b/datadog_api_client/v2/model/signal_entities_response.py new file mode 100644 index 0000000000..d383fab915 --- /dev/null +++ b/datadog_api_client/v2/model/signal_entities_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.signal_entities_data import SignalEntitiesData + +class SignalEntitiesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.signal_entities_data import SignalEntitiesData + return { + "data": (SignalEntitiesData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SignalEntitiesData, **kwargs): + """ + Response containing entities related to a security signal. + + :param data: Entities related to a security signal. + :type data: SignalEntitiesData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/signal_entities_type.py b/datadog_api_client/v2/model/signal_entities_type.py new file mode 100644 index 0000000000..c6c2257c15 --- /dev/null +++ b/datadog_api_client/v2/model/signal_entities_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SignalEntitiesType(ModelSimple): + """ + The type of the resource. The value should always be `entities`. + + :param value: If omitted defaults to "entities". Must be one of ["entities"]. + :type value: str + """ + + allowed_values = { + "entities", + } + ENTITIES: ClassVar["SignalEntitiesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SignalEntitiesType.ENTITIES = SignalEntitiesType("entities") diff --git a/datadog_api_client/v2/model/signal_entity_identity.py b/datadog_api_client/v2/model/signal_entity_identity.py new file mode 100644 index 0000000000..11a776d4b9 --- /dev/null +++ b/datadog_api_client/v2/model/signal_entity_identity.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SignalEntityIdentity(ModelNormal): + + def __init__(self_, **kwargs): + """ + An identity entity related to a signal. The set of attributes is dynamic and depends on the source providing the identity. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/signals_problems_detections.py b/datadog_api_client/v2/model/signals_problems_detections.py new file mode 100644 index 0000000000..118bc82de8 --- /dev/null +++ b/datadog_api_client/v2/model/signals_problems_detections.py @@ -0,0 +1,103 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.aggregated_high_frozen_frame_rate import AggregatedHighFrozenFrameRate + from datadog_api_client.v2.model.aggregated_high_script_eval import AggregatedHighScriptEval + from datadog_api_client.v2.model.aggregated_low_cache_hit_rate import AggregatedLowCacheHitRate + from datadog_api_client.v2.model.aggregated_mobile_scroll_friction import AggregatedMobileScrollFriction + from datadog_api_client.v2.model.aggregated_slow_fcp_high_bytes import AggregatedSlowFCPHighBytes + from datadog_api_client.v2.model.aggregated_slow_interaction_long_task import AggregatedSlowInteractionLongTask + from datadog_api_client.v2.model.aggregated_uncompressed_resource import AggregatedUncompressedResource + +class SignalsProblemsDetections(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.aggregated_high_frozen_frame_rate import AggregatedHighFrozenFrameRate + from datadog_api_client.v2.model.aggregated_high_script_eval import AggregatedHighScriptEval + from datadog_api_client.v2.model.aggregated_low_cache_hit_rate import AggregatedLowCacheHitRate + from datadog_api_client.v2.model.aggregated_mobile_scroll_friction import AggregatedMobileScrollFriction + from datadog_api_client.v2.model.aggregated_slow_fcp_high_bytes import AggregatedSlowFCPHighBytes + from datadog_api_client.v2.model.aggregated_slow_interaction_long_task import AggregatedSlowInteractionLongTask + from datadog_api_client.v2.model.aggregated_uncompressed_resource import AggregatedUncompressedResource + return { + "high_frozen_frame_rates": ([AggregatedHighFrozenFrameRate],), + "high_script_evaluations": ([AggregatedHighScriptEval],), + "low_cache_hit_rates": ([AggregatedLowCacheHitRate],), + "mobile_scroll_frictions": ([AggregatedMobileScrollFriction],), + "slow_fcp_high_bytes": ([AggregatedSlowFCPHighBytes],), + "slow_interaction_long_tasks": ([AggregatedSlowInteractionLongTask],), + "uncompressed_resources": ([AggregatedUncompressedResource],), + } + attribute_map = { + "high_frozen_frame_rates": "high_frozen_frame_rates", + "high_script_evaluations": "high_script_evaluations", + "low_cache_hit_rates": "low_cache_hit_rates", + "mobile_scroll_frictions": "mobile_scroll_frictions", + "slow_fcp_high_bytes": "slow_fcp_high_bytes", + "slow_interaction_long_tasks": "slow_interaction_long_tasks", + "uncompressed_resources": "uncompressed_resources", + } + + def __init__(self_, high_frozen_frame_rates: Union[List[AggregatedHighFrozenFrameRate], UnsetType]=unset, high_script_evaluations: Union[List[AggregatedHighScriptEval], UnsetType]=unset, low_cache_hit_rates: Union[List[AggregatedLowCacheHitRate], UnsetType]=unset, mobile_scroll_frictions: Union[List[AggregatedMobileScrollFriction], UnsetType]=unset, slow_fcp_high_bytes: Union[List[AggregatedSlowFCPHighBytes], UnsetType]=unset, slow_interaction_long_tasks: Union[List[AggregatedSlowInteractionLongTask], UnsetType]=unset, uncompressed_resources: Union[List[AggregatedUncompressedResource], UnsetType]=unset, **kwargs): + """ + Grouped detection results by detection type. + + :param high_frozen_frame_rates: Detected high frozen frame rate issues. + :type high_frozen_frame_rates: [AggregatedHighFrozenFrameRate], optional + + :param high_script_evaluations: Detected high script evaluation issues. + :type high_script_evaluations: [AggregatedHighScriptEval], optional + + :param low_cache_hit_rates: Detected low cache hit rate issues. + :type low_cache_hit_rates: [AggregatedLowCacheHitRate], optional + + :param mobile_scroll_frictions: Detected mobile scroll friction issues. + :type mobile_scroll_frictions: [AggregatedMobileScrollFriction], optional + + :param slow_fcp_high_bytes: Detected slow first contentful paint with high byte count issues. + :type slow_fcp_high_bytes: [AggregatedSlowFCPHighBytes], optional + + :param slow_interaction_long_tasks: Detected slow interaction with long task issues. + :type slow_interaction_long_tasks: [AggregatedSlowInteractionLongTask], optional + + :param uncompressed_resources: Detected uncompressed resource issues. + :type uncompressed_resources: [AggregatedUncompressedResource], optional + """ + if high_frozen_frame_rates is not unset: + kwargs["high_frozen_frame_rates"] = high_frozen_frame_rates + if high_script_evaluations is not unset: + kwargs["high_script_evaluations"] = high_script_evaluations + if low_cache_hit_rates is not unset: + kwargs["low_cache_hit_rates"] = low_cache_hit_rates + if mobile_scroll_frictions is not unset: + kwargs["mobile_scroll_frictions"] = mobile_scroll_frictions + if slow_fcp_high_bytes is not unset: + kwargs["slow_fcp_high_bytes"] = slow_fcp_high_bytes + if slow_interaction_long_tasks is not unset: + kwargs["slow_interaction_long_tasks"] = slow_interaction_long_tasks + if uncompressed_resources is not unset: + kwargs["uncompressed_resources"] = uncompressed_resources + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/signals_problems_sample_metadata.py b/datadog_api_client/v2/model/signals_problems_sample_metadata.py new file mode 100644 index 0000000000..5726f7d156 --- /dev/null +++ b/datadog_api_client/v2/model/signals_problems_sample_metadata.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SignalsProblemsSampleMetadata(ModelNormal): + validations = { + "failed": { + "inclusive_maximum": 2147483647, + }, + "requested": { + "inclusive_maximum": 2147483647, + }, + "succeeded": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "failed": (int,), + "requested": (int,), + "sampled_view_ids": ([str],), + "succeeded": (int,), + "success_rate": (float,), + } + attribute_map = { + "failed": "failed", + "requested": "requested", + "sampled_view_ids": "sampled_view_ids", + "succeeded": "succeeded", + "success_rate": "success_rate", + } + + def __init__(self_, failed: int, requested: int, sampled_view_ids: List[str], succeeded: int, success_rate: float, **kwargs): + """ + Metadata about the sampling quality for a signals and problems query. + + :param failed: Number of view instances that failed to process. + :type failed: int + + :param requested: Number of view instances requested for sampling. + :type requested: int + + :param sampled_view_ids: List of RUM view IDs that were sampled. + :type sampled_view_ids: [str] + + :param succeeded: Number of view instances successfully processed. + :type succeeded: int + + :param success_rate: Ratio of successfully processed views to requested views. + :type success_rate: float + """ + super().__init__(kwargs) + + + self_.failed = failed + self_.requested = requested + self_.sampled_view_ids = sampled_view_ids + self_.succeeded = succeeded + self_.success_rate = success_rate diff --git a/datadog_api_client/v2/model/simple_monitor_user_template.py b/datadog_api_client/v2/model/simple_monitor_user_template.py new file mode 100644 index 0000000000..e6116d8aa7 --- /dev/null +++ b/datadog_api_client/v2/model/simple_monitor_user_template.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_user_template_template_variables_items import MonitorUserTemplateTemplateVariablesItems + +class SimpleMonitorUserTemplate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_user_template_template_variables_items import MonitorUserTemplateTemplateVariablesItems + return { + "created": (datetime,), + "description": (str,), + "id": (str,), + "monitor_definition": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tags": ([str],), + "template_variables": ([MonitorUserTemplateTemplateVariablesItems],), + "title": (str,), + "version": (int,), + } + attribute_map = { + "created": "created", + "description": "description", + "id": "id", + "monitor_definition": "monitor_definition", + "tags": "tags", + "template_variables": "template_variables", + "title": "title", + "version": "version", + } + read_only_vars = { + "created", + "version", + } + + def __init__(self_, created: Union[datetime, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, id: Union[str, UnsetType]=unset, monitor_definition: Union[Dict[str, Any], UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, template_variables: Union[List[MonitorUserTemplateTemplateVariablesItems], UnsetType]=unset, title: Union[str, UnsetType]=unset, version: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + A simplified version of a monitor user template. + + :param created: The created timestamp of the template. + :type created: datetime, optional + + :param description: A brief description of the monitor user template. + :type description: str, none_type, optional + + :param id: The unique identifier. The initial version will match the template ID. + :type id: str, optional + + :param monitor_definition: A valid monitor definition in the same format as the `V1 Monitor API `_. + :type monitor_definition: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tags: The definition of ``MonitorUserTemplateTags`` object. + :type tags: [str], optional + + :param template_variables: The definition of ``MonitorUserTemplateTemplateVariables`` object. + :type template_variables: [MonitorUserTemplateTemplateVariablesItems], optional + + :param title: The title of the monitor user template. + :type title: str, optional + + :param version: The version of the monitor user template. + :type version: int, none_type, optional + """ + if created is not unset: + kwargs["created"] = created + if description is not unset: + kwargs["description"] = description + if id is not unset: + kwargs["id"] = id + if monitor_definition is not unset: + kwargs["monitor_definition"] = monitor_definition + if tags is not unset: + kwargs["tags"] = tags + if template_variables is not unset: + kwargs["template_variables"] = template_variables + if title is not unset: + kwargs["title"] = title + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/single_aggregated_connection_response_array.py b/datadog_api_client/v2/model/single_aggregated_connection_response_array.py new file mode 100644 index 0000000000..7a2570a412 --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_connection_response_array.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.single_aggregated_connection_response_data import SingleAggregatedConnectionResponseData + +class SingleAggregatedConnectionResponseArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.single_aggregated_connection_response_data import SingleAggregatedConnectionResponseData + return { + "data": ([SingleAggregatedConnectionResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SingleAggregatedConnectionResponseData], UnsetType]=unset, **kwargs): + """ + List of aggregated connections. + + :param data: Array of aggregated connection objects. + :type data: [SingleAggregatedConnectionResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/single_aggregated_connection_response_data.py b/datadog_api_client/v2/model/single_aggregated_connection_response_data.py new file mode 100644 index 0000000000..d09753bb7a --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_connection_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.single_aggregated_connection_response_data_attributes import SingleAggregatedConnectionResponseDataAttributes + from datadog_api_client.v2.model.single_aggregated_connection_response_data_type import SingleAggregatedConnectionResponseDataType + +class SingleAggregatedConnectionResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.single_aggregated_connection_response_data_attributes import SingleAggregatedConnectionResponseDataAttributes + from datadog_api_client.v2.model.single_aggregated_connection_response_data_type import SingleAggregatedConnectionResponseDataType + return { + "attributes": (SingleAggregatedConnectionResponseDataAttributes,), + "id": (str,), + "type": (SingleAggregatedConnectionResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SingleAggregatedConnectionResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SingleAggregatedConnectionResponseDataType, UnsetType]=unset, **kwargs): + """ + Object describing an aggregated connection. + + :param attributes: Attributes for an aggregated connection. + :type attributes: SingleAggregatedConnectionResponseDataAttributes, optional + + :param id: A unique identifier for the aggregated connection based on the group by values. + :type id: str, optional + + :param type: Aggregated connection resource type. + :type type: SingleAggregatedConnectionResponseDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/single_aggregated_connection_response_data_attributes.py b/datadog_api_client/v2/model/single_aggregated_connection_response_data_attributes.py new file mode 100644 index 0000000000..d97d5f2469 --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_connection_response_data_attributes.py @@ -0,0 +1,165 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SingleAggregatedConnectionResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "bytes_sent_by_client": (int,), + "bytes_sent_by_server": (int,), + "group_bys": ({str: ([str],)},), + "packets_sent_by_client": (int,), + "packets_sent_by_server": (int,), + "rtt_micro_seconds": (int,), + "tcp_closed_connections": (int,), + "tcp_delivered_ce": (int,), + "tcp_established_connections": (int,), + "tcp_probe0_count": (int,), + "tcp_rcv_ooo_pack": (int,), + "tcp_recovery_count": (int,), + "tcp_refusals": (int,), + "tcp_reord_seen": (int,), + "tcp_resets": (int,), + "tcp_retransmits": (int,), + "tcp_rto_count": (int,), + "tcp_timeouts": (int,), + } + attribute_map = { + "bytes_sent_by_client": "bytes_sent_by_client", + "bytes_sent_by_server": "bytes_sent_by_server", + "group_bys": "group_bys", + "packets_sent_by_client": "packets_sent_by_client", + "packets_sent_by_server": "packets_sent_by_server", + "rtt_micro_seconds": "rtt_micro_seconds", + "tcp_closed_connections": "tcp_closed_connections", + "tcp_delivered_ce": "tcp_delivered_ce", + "tcp_established_connections": "tcp_established_connections", + "tcp_probe0_count": "tcp_probe0_count", + "tcp_rcv_ooo_pack": "tcp_rcv_ooo_pack", + "tcp_recovery_count": "tcp_recovery_count", + "tcp_refusals": "tcp_refusals", + "tcp_reord_seen": "tcp_reord_seen", + "tcp_resets": "tcp_resets", + "tcp_retransmits": "tcp_retransmits", + "tcp_rto_count": "tcp_rto_count", + "tcp_timeouts": "tcp_timeouts", + } + + def __init__(self_, bytes_sent_by_client: Union[int, UnsetType]=unset, bytes_sent_by_server: Union[int, UnsetType]=unset, group_bys: Union[Dict[str, List[str]], UnsetType]=unset, packets_sent_by_client: Union[int, UnsetType]=unset, packets_sent_by_server: Union[int, UnsetType]=unset, rtt_micro_seconds: Union[int, UnsetType]=unset, tcp_closed_connections: Union[int, UnsetType]=unset, tcp_delivered_ce: Union[int, UnsetType]=unset, tcp_established_connections: Union[int, UnsetType]=unset, tcp_probe0_count: Union[int, UnsetType]=unset, tcp_rcv_ooo_pack: Union[int, UnsetType]=unset, tcp_recovery_count: Union[int, UnsetType]=unset, tcp_refusals: Union[int, UnsetType]=unset, tcp_reord_seen: Union[int, UnsetType]=unset, tcp_resets: Union[int, UnsetType]=unset, tcp_retransmits: Union[int, UnsetType]=unset, tcp_rto_count: Union[int, UnsetType]=unset, tcp_timeouts: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for an aggregated connection. + + :param bytes_sent_by_client: The total number of bytes sent by the client over the given period. + :type bytes_sent_by_client: int, optional + + :param bytes_sent_by_server: The total number of bytes sent by the server over the given period. + :type bytes_sent_by_server: int, optional + + :param group_bys: The key, value pairs for each group by. + :type group_bys: {str: ([str],)}, optional + + :param packets_sent_by_client: The total number of packets sent by the client over the given period. + :type packets_sent_by_client: int, optional + + :param packets_sent_by_server: The total number of packets sent by the server over the given period. + :type packets_sent_by_server: int, optional + + :param rtt_micro_seconds: Measured as TCP smoothed round trip time in microseconds (the time between a TCP frame being sent and acknowledged). + :type rtt_micro_seconds: int, optional + + :param tcp_closed_connections: The number of TCP connections in a closed state. Measured in connections per second from the client. + :type tcp_closed_connections: int, optional + + :param tcp_delivered_ce: The number of TCP segments acknowledged with the ECN Congestion Experienced (CE) mark, indicating that an upstream router marked packets as experiencing congestion. + :type tcp_delivered_ce: int, optional + + :param tcp_established_connections: The number of TCP connections in an established state. Measured in connections per second from the client. + :type tcp_established_connections: int, optional + + :param tcp_probe0_count: The number of TCP zero-window probes sent. These probes are sent when the receiver advertises a zero receive window, indicating it cannot accept more data. + :type tcp_probe0_count: int, optional + + :param tcp_rcv_ooo_pack: The number of TCP packets received out of order. This indicates network-level packet reordering, which can degrade TCP performance by triggering spurious retransmissions and reducing throughput. + :type tcp_rcv_ooo_pack: int, optional + + :param tcp_recovery_count: The number of TCP fast recovery events. Fast recovery retransmits lost segments detected through duplicate ACKs or selective acknowledgment (SACK) without waiting for a retransmission timeout. + :type tcp_recovery_count: int, optional + + :param tcp_refusals: The number of TCP connections that were refused by the server. Typically this indicates an attempt to connect to an IP/port that is not receiving connections, or a firewall/security misconfiguration. + :type tcp_refusals: int, optional + + :param tcp_reord_seen: The number of times reordering of sent packets was detected. Reordering detection adjusts the duplicate ACK threshold, preventing spurious retransmissions caused by out-of-order delivery. + :type tcp_reord_seen: int, optional + + :param tcp_resets: The number of TCP connections that were reset by the server. + :type tcp_resets: int, optional + + :param tcp_retransmits: TCP Retransmits represent detected failures that are retransmitted to ensure delivery. Measured in count of retransmits from the client. + :type tcp_retransmits: int, optional + + :param tcp_rto_count: The number of TCP retransmission timeouts (RTOs). An RTO occurs when an ACK is not received within the estimated round-trip time, forcing the sender to retransmit and halve its congestion window. + :type tcp_rto_count: int, optional + + :param tcp_timeouts: The number of TCP connections that timed out from the perspective of the operating system. This can indicate general connectivity and latency issues. + :type tcp_timeouts: int, optional + """ + if bytes_sent_by_client is not unset: + kwargs["bytes_sent_by_client"] = bytes_sent_by_client + if bytes_sent_by_server is not unset: + kwargs["bytes_sent_by_server"] = bytes_sent_by_server + if group_bys is not unset: + kwargs["group_bys"] = group_bys + if packets_sent_by_client is not unset: + kwargs["packets_sent_by_client"] = packets_sent_by_client + if packets_sent_by_server is not unset: + kwargs["packets_sent_by_server"] = packets_sent_by_server + if rtt_micro_seconds is not unset: + kwargs["rtt_micro_seconds"] = rtt_micro_seconds + if tcp_closed_connections is not unset: + kwargs["tcp_closed_connections"] = tcp_closed_connections + if tcp_delivered_ce is not unset: + kwargs["tcp_delivered_ce"] = tcp_delivered_ce + if tcp_established_connections is not unset: + kwargs["tcp_established_connections"] = tcp_established_connections + if tcp_probe0_count is not unset: + kwargs["tcp_probe0_count"] = tcp_probe0_count + if tcp_rcv_ooo_pack is not unset: + kwargs["tcp_rcv_ooo_pack"] = tcp_rcv_ooo_pack + if tcp_recovery_count is not unset: + kwargs["tcp_recovery_count"] = tcp_recovery_count + if tcp_refusals is not unset: + kwargs["tcp_refusals"] = tcp_refusals + if tcp_reord_seen is not unset: + kwargs["tcp_reord_seen"] = tcp_reord_seen + if tcp_resets is not unset: + kwargs["tcp_resets"] = tcp_resets + if tcp_retransmits is not unset: + kwargs["tcp_retransmits"] = tcp_retransmits + if tcp_rto_count is not unset: + kwargs["tcp_rto_count"] = tcp_rto_count + if tcp_timeouts is not unset: + kwargs["tcp_timeouts"] = tcp_timeouts + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/single_aggregated_connection_response_data_type.py b/datadog_api_client/v2/model/single_aggregated_connection_response_data_type.py new file mode 100644 index 0000000000..3cd35ad365 --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_connection_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SingleAggregatedConnectionResponseDataType(ModelSimple): + """ + Aggregated connection resource type. + + :param value: If omitted defaults to "aggregated_connection". Must be one of ["aggregated_connection"]. + :type value: str + """ + + allowed_values = { + "aggregated_connection", + } + AGGREGATED_CONNECTION: ClassVar["SingleAggregatedConnectionResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SingleAggregatedConnectionResponseDataType.AGGREGATED_CONNECTION = SingleAggregatedConnectionResponseDataType("aggregated_connection") diff --git a/datadog_api_client/v2/model/single_aggregated_dns_response_array.py b/datadog_api_client/v2/model/single_aggregated_dns_response_array.py new file mode 100644 index 0000000000..f4ed67ac1a --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_dns_response_array.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.single_aggregated_dns_response_data import SingleAggregatedDnsResponseData + +class SingleAggregatedDnsResponseArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.single_aggregated_dns_response_data import SingleAggregatedDnsResponseData + return { + "data": ([SingleAggregatedDnsResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SingleAggregatedDnsResponseData], UnsetType]=unset, **kwargs): + """ + List of aggregated DNS flows. + + :param data: Array of aggregated DNS objects. + :type data: [SingleAggregatedDnsResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/single_aggregated_dns_response_data.py b/datadog_api_client/v2/model/single_aggregated_dns_response_data.py new file mode 100644 index 0000000000..73453af350 --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_dns_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.single_aggregated_dns_response_data_attributes import SingleAggregatedDnsResponseDataAttributes + from datadog_api_client.v2.model.single_aggregated_dns_response_data_type import SingleAggregatedDnsResponseDataType + +class SingleAggregatedDnsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.single_aggregated_dns_response_data_attributes import SingleAggregatedDnsResponseDataAttributes + from datadog_api_client.v2.model.single_aggregated_dns_response_data_type import SingleAggregatedDnsResponseDataType + return { + "attributes": (SingleAggregatedDnsResponseDataAttributes,), + "id": (str,), + "type": (SingleAggregatedDnsResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SingleAggregatedDnsResponseDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SingleAggregatedDnsResponseDataType, UnsetType]=unset, **kwargs): + """ + Object describing an aggregated DNS flow. + + :param attributes: Attributes for an aggregated DNS flow. + :type attributes: SingleAggregatedDnsResponseDataAttributes, optional + + :param id: A unique identifier for the aggregated DNS traffic based on the group by values. + :type id: str, optional + + :param type: Aggregated DNS resource type. + :type type: SingleAggregatedDnsResponseDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/single_aggregated_dns_response_data_attributes.py b/datadog_api_client/v2/model/single_aggregated_dns_response_data_attributes.py new file mode 100644 index 0000000000..9fb1264a98 --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_dns_response_data_attributes.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.single_aggregated_dns_response_data_attributes_group_by_items import SingleAggregatedDnsResponseDataAttributesGroupByItems + from datadog_api_client.v2.model.single_aggregated_dns_response_data_attributes_metrics_items import SingleAggregatedDnsResponseDataAttributesMetricsItems + +class SingleAggregatedDnsResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.single_aggregated_dns_response_data_attributes_group_by_items import SingleAggregatedDnsResponseDataAttributesGroupByItems + from datadog_api_client.v2.model.single_aggregated_dns_response_data_attributes_metrics_items import SingleAggregatedDnsResponseDataAttributesMetricsItems + return { + "group_bys": ([SingleAggregatedDnsResponseDataAttributesGroupByItems],), + "metrics": ([SingleAggregatedDnsResponseDataAttributesMetricsItems],), + } + attribute_map = { + "group_bys": "group_bys", + "metrics": "metrics", + } + + def __init__(self_, group_bys: Union[List[SingleAggregatedDnsResponseDataAttributesGroupByItems], UnsetType]=unset, metrics: Union[List[SingleAggregatedDnsResponseDataAttributesMetricsItems], UnsetType]=unset, **kwargs): + """ + Attributes for an aggregated DNS flow. + + :param group_bys: The key, value pairs for each group by. + :type group_bys: [SingleAggregatedDnsResponseDataAttributesGroupByItems], optional + + :param metrics: Metrics associated with an aggregated DNS flow. + :type metrics: [SingleAggregatedDnsResponseDataAttributesMetricsItems], optional + """ + if group_bys is not unset: + kwargs["group_bys"] = group_bys + if metrics is not unset: + kwargs["metrics"] = metrics + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/single_aggregated_dns_response_data_attributes_group_by_items.py b/datadog_api_client/v2/model/single_aggregated_dns_response_data_attributes_group_by_items.py new file mode 100644 index 0000000000..6a849abc89 --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_dns_response_data_attributes_group_by_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SingleAggregatedDnsResponseDataAttributesGroupByItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes associated with a group by + + :param key: The group by key. + :type key: str, optional + + :param value: The group by value. + :type value: str, optional + """ + if key is not unset: + kwargs["key"] = key + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/single_aggregated_dns_response_data_attributes_metrics_items.py b/datadog_api_client/v2/model/single_aggregated_dns_response_data_attributes_metrics_items.py new file mode 100644 index 0000000000..90cce4e34a --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_dns_response_data_attributes_metrics_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dns_metric_key import DnsMetricKey + +class SingleAggregatedDnsResponseDataAttributesMetricsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dns_metric_key import DnsMetricKey + return { + "key": (DnsMetricKey,), + "value": (int,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: Union[DnsMetricKey, UnsetType]=unset, value: Union[int, UnsetType]=unset, **kwargs): + """ + Metrics associated with an aggregated DNS flow. + + :param key: The metric key for DNS metrics. + :type key: DnsMetricKey, optional + + :param value: The metric value. + :type value: int, optional + """ + if key is not unset: + kwargs["key"] = key + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/single_aggregated_dns_response_data_type.py b/datadog_api_client/v2/model/single_aggregated_dns_response_data_type.py new file mode 100644 index 0000000000..6cd8bfcbf8 --- /dev/null +++ b/datadog_api_client/v2/model/single_aggregated_dns_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SingleAggregatedDnsResponseDataType(ModelSimple): + """ + Aggregated DNS resource type. + + :param value: If omitted defaults to "aggregated_dns". Must be one of ["aggregated_dns"]. + :type value: str + """ + + allowed_values = { + "aggregated_dns", + } + AGGREGATED_DNS: ClassVar["SingleAggregatedDnsResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SingleAggregatedDnsResponseDataType.AGGREGATED_DNS = SingleAggregatedDnsResponseDataType("aggregated_dns") diff --git a/datadog_api_client/v2/model/single_entity_context_response.py b/datadog_api_client/v2/model/single_entity_context_response.py new file mode 100644 index 0000000000..b975694cd4 --- /dev/null +++ b/datadog_api_client/v2/model/single_entity_context_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_context_entity import EntityContextEntity + +class SingleEntityContextResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_context_entity import EntityContextEntity + return { + "data": (EntityContextEntity,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: EntityContextEntity, **kwargs): + """ + Response from the single entity context endpoint, containing the matching entity. + + :param data: A single entity returned by the entity context endpoint. + :type data: EntityContextEntity + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/slack_integration_metadata.py b/datadog_api_client/v2/model/slack_integration_metadata.py new file mode 100644 index 0000000000..1b9fd99766 --- /dev/null +++ b/datadog_api_client/v2/model/slack_integration_metadata.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slack_integration_metadata_channel_item import SlackIntegrationMetadataChannelItem + +class SlackIntegrationMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slack_integration_metadata_channel_item import SlackIntegrationMetadataChannelItem + return { + "channels": ([SlackIntegrationMetadataChannelItem],), + } + attribute_map = { + "channels": "channels", + } + + def __init__(self_, channels: List[SlackIntegrationMetadataChannelItem], **kwargs): + """ + Incident integration metadata for the Slack integration. + + :param channels: Array of Slack channels in this integration metadata. + :type channels: [SlackIntegrationMetadataChannelItem] + """ + super().__init__(kwargs) + + + self_.channels = channels diff --git a/datadog_api_client/v2/model/slack_integration_metadata_channel_item.py b/datadog_api_client/v2/model/slack_integration_metadata_channel_item.py new file mode 100644 index 0000000000..5782a30468 --- /dev/null +++ b/datadog_api_client/v2/model/slack_integration_metadata_channel_item.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SlackIntegrationMetadataChannelItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "channel_id": (str,), + "channel_name": (str,), + "redirect_url": (str,), + "team_id": (str,), + } + attribute_map = { + "channel_id": "channel_id", + "channel_name": "channel_name", + "redirect_url": "redirect_url", + "team_id": "team_id", + } + + def __init__(self_, channel_id: str, channel_name: str, redirect_url: str, team_id: Union[str, UnsetType]=unset, **kwargs): + """ + Item in the Slack integration metadata channel array. + + :param channel_id: Slack channel ID. + :type channel_id: str + + :param channel_name: Name of the Slack channel. + :type channel_name: str + + :param redirect_url: URL redirecting to the Slack channel. + :type redirect_url: str + + :param team_id: Slack team ID. + :type team_id: str, optional + """ + if team_id is not unset: + kwargs["team_id"] = team_id + super().__init__(kwargs) + + + self_.channel_id = channel_id + self_.channel_name = channel_name + self_.redirect_url = redirect_url diff --git a/datadog_api_client/v2/model/slack_trigger_wrapper.py b/datadog_api_client/v2/model/slack_trigger_wrapper.py new file mode 100644 index 0000000000..422fd14e12 --- /dev/null +++ b/datadog_api_client/v2/model/slack_trigger_wrapper.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SlackTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + return { + "slack_trigger": (dict,), + "start_step_names": ([str],), + } + attribute_map = { + "slack_trigger": "slackTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, slack_trigger: dict, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Slack-based trigger. + + :param slack_trigger: Trigger a workflow from Slack. The workflow must be published. + :type slack_trigger: dict + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.slack_trigger = slack_trigger diff --git a/datadog_api_client/v2/model/slack_user_binding_data.py b/datadog_api_client/v2/model/slack_user_binding_data.py new file mode 100644 index 0000000000..500e8b2bed --- /dev/null +++ b/datadog_api_client/v2/model/slack_user_binding_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slack_user_binding_type import SlackUserBindingType + +class SlackUserBindingData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slack_user_binding_type import SlackUserBindingType + return { + "id": (str,), + "type": (SlackUserBindingType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[SlackUserBindingType, UnsetType]=unset, **kwargs): + """ + Slack team ID data from a response. + + :param id: The Slack team ID. + :type id: str, optional + + :param type: Slack user binding resource type. + :type type: SlackUserBindingType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/slack_user_binding_type.py b/datadog_api_client/v2/model/slack_user_binding_type.py new file mode 100644 index 0000000000..db5b76906e --- /dev/null +++ b/datadog_api_client/v2/model/slack_user_binding_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SlackUserBindingType(ModelSimple): + """ + Slack user binding resource type. + + :param value: If omitted defaults to "team_id". Must be one of ["team_id"]. + :type value: str + """ + + allowed_values = { + "team_id", + } + TEAM_ID: ClassVar["SlackUserBindingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SlackUserBindingType.TEAM_ID = SlackUserBindingType("team_id") diff --git a/datadog_api_client/v2/model/slack_user_bindings_response.py b/datadog_api_client/v2/model/slack_user_bindings_response.py new file mode 100644 index 0000000000..64b3d1a030 --- /dev/null +++ b/datadog_api_client/v2/model/slack_user_bindings_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slack_user_binding_data import SlackUserBindingData + +class SlackUserBindingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slack_user_binding_data import SlackUserBindingData + return { + "data": ([SlackUserBindingData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SlackUserBindingData], **kwargs): + """ + Response with a list of Slack user bindings. + + :param data: An array of Slack user bindings. + :type data: [SlackUserBindingData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/slo_data_source.py b/datadog_api_client/v2/model/slo_data_source.py new file mode 100644 index 0000000000..93c1ea327c --- /dev/null +++ b/datadog_api_client/v2/model/slo_data_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SloDataSource(ModelSimple): + """ + A data source for SLO queries. + + :param value: If omitted defaults to "slo". Must be one of ["slo"]. + :type value: str + """ + + allowed_values = { + "slo", + } + SLO: ClassVar["SloDataSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SloDataSource.SLO = SloDataSource("slo") diff --git a/datadog_api_client/v2/model/slo_query.py b/datadog_api_client/v2/model/slo_query.py new file mode 100644 index 0000000000..d91db8f28c --- /dev/null +++ b/datadog_api_client/v2/model/slo_query.py @@ -0,0 +1,106 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_data_source import SloDataSource + from datadog_api_client.v2.model.slos_group_mode import SlosGroupMode + from datadog_api_client.v2.model.slos_measure import SlosMeasure + from datadog_api_client.v2.model.slos_query_type import SlosQueryType + +class SloQuery(ModelNormal): + validations = { + "cross_org_uuids": { + "max_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_data_source import SloDataSource + from datadog_api_client.v2.model.slos_group_mode import SlosGroupMode + from datadog_api_client.v2.model.slos_measure import SlosMeasure + from datadog_api_client.v2.model.slos_query_type import SlosQueryType + return { + "additional_query_filters": (str,), + "cross_org_uuids": ([str],), + "data_source": (SloDataSource,), + "group_mode": (SlosGroupMode,), + "measure": (SlosMeasure,), + "name": (str,), + "slo_id": (str,), + "slo_query_type": (SlosQueryType,), + } + attribute_map = { + "additional_query_filters": "additional_query_filters", + "cross_org_uuids": "cross_org_uuids", + "data_source": "data_source", + "group_mode": "group_mode", + "measure": "measure", + "name": "name", + "slo_id": "slo_id", + "slo_query_type": "slo_query_type", + } + + def __init__(self_, data_source: SloDataSource, measure: SlosMeasure, slo_id: str, additional_query_filters: Union[str, UnsetType]=unset, cross_org_uuids: Union[List[str], UnsetType]=unset, group_mode: Union[SlosGroupMode, UnsetType]=unset, name: Union[str, UnsetType]=unset, slo_query_type: Union[SlosQueryType, UnsetType]=unset, **kwargs): + """ + A query for SLO status, error budget, and burn rate metrics. + + :param additional_query_filters: Additional filters applied to the SLO query. + :type additional_query_filters: str, optional + + :param cross_org_uuids: Organization UUIDs to query when using `cross-organization visibility `_. Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source for SLO queries. + :type data_source: SloDataSource + + :param group_mode: How SLO results are grouped in the response. + :type group_mode: SlosGroupMode, optional + + :param measure: The SLO measurement to retrieve. + :type measure: SlosMeasure + + :param name: The variable name for use in formulas. + :type name: str, optional + + :param slo_id: The unique identifier of the SLO to query. + :type slo_id: str + + :param slo_query_type: The type of SLO definition being queried. + :type slo_query_type: SlosQueryType, optional + """ + if additional_query_filters is not unset: + kwargs["additional_query_filters"] = additional_query_filters + if cross_org_uuids is not unset: + kwargs["cross_org_uuids"] = cross_org_uuids + if group_mode is not unset: + kwargs["group_mode"] = group_mode + if name is not unset: + kwargs["name"] = name + if slo_query_type is not unset: + kwargs["slo_query_type"] = slo_query_type + super().__init__(kwargs) + + + self_.data_source = data_source + self_.measure = measure + self_.slo_id = slo_id diff --git a/datadog_api_client/v2/model/slo_report_create_request.py b/datadog_api_client/v2/model/slo_report_create_request.py new file mode 100644 index 0000000000..7326c59a76 --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_report_create_request_data import SloReportCreateRequestData + +class SloReportCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_report_create_request_data import SloReportCreateRequestData + return { + "data": (SloReportCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SloReportCreateRequestData, **kwargs): + """ + The SLO report request body. + + :param data: The data portion of the SLO report request. + :type data: SloReportCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/slo_report_create_request_attributes.py b/datadog_api_client/v2/model/slo_report_create_request_attributes.py new file mode 100644 index 0000000000..90738f5730 --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_create_request_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_report_interval import SLOReportInterval + +class SloReportCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_report_interval import SLOReportInterval + return { + "from_ts": (int,), + "interval": (SLOReportInterval,), + "query": (str,), + "timezone": (str,), + "to_ts": (int,), + } + attribute_map = { + "from_ts": "from_ts", + "interval": "interval", + "query": "query", + "timezone": "timezone", + "to_ts": "to_ts", + } + + def __init__(self_, from_ts: int, query: str, to_ts: int, interval: Union[SLOReportInterval, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes portion of the SLO report request. + + :param from_ts: The ``from`` timestamp for the report in epoch seconds. + :type from_ts: int + + :param interval: The frequency at which report data is to be generated. + :type interval: SLOReportInterval, optional + + :param query: The query string used to filter SLO results. Some examples of queries include ``service:`` and ``slo-name``. + :type query: str + + :param timezone: The timezone used to determine the start and end of each interval. For example, weekly intervals start at 12am on Sunday in the specified timezone. + :type timezone: str, optional + + :param to_ts: The ``to`` timestamp for the report in epoch seconds. + :type to_ts: int + """ + if interval is not unset: + kwargs["interval"] = interval + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + + self_.from_ts = from_ts + self_.query = query + self_.to_ts = to_ts diff --git a/datadog_api_client/v2/model/slo_report_create_request_data.py b/datadog_api_client/v2/model/slo_report_create_request_data.py new file mode 100644 index 0000000000..f92d06972b --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_create_request_data.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_report_create_request_attributes import SloReportCreateRequestAttributes + +class SloReportCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_report_create_request_attributes import SloReportCreateRequestAttributes + return { + "attributes": (SloReportCreateRequestAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: SloReportCreateRequestAttributes, **kwargs): + """ + The data portion of the SLO report request. + + :param attributes: The attributes portion of the SLO report request. + :type attributes: SloReportCreateRequestAttributes + """ + super().__init__(kwargs) + + + self_.attributes = attributes diff --git a/datadog_api_client/v2/model/slo_report_interval.py b/datadog_api_client/v2/model/slo_report_interval.py new file mode 100644 index 0000000000..f01f6aca35 --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_interval.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOReportInterval(ModelSimple): + """ + The frequency at which report data is to be generated. + + :param value: Must be one of ["daily", "weekly", "monthly"]. + :type value: str + """ + + allowed_values = { + "daily", + "weekly", + "monthly", + } + DAILY: ClassVar["SLOReportInterval"] + WEEKLY: ClassVar["SLOReportInterval"] + MONTHLY: ClassVar["SLOReportInterval"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOReportInterval.DAILY = SLOReportInterval("daily") +SLOReportInterval.WEEKLY = SLOReportInterval("weekly") +SLOReportInterval.MONTHLY = SLOReportInterval("monthly") diff --git a/datadog_api_client/v2/model/slo_report_post_response.py b/datadog_api_client/v2/model/slo_report_post_response.py new file mode 100644 index 0000000000..8a1c251edd --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_post_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_report_post_response_data import SLOReportPostResponseData + +class SLOReportPostResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_report_post_response_data import SLOReportPostResponseData + return { + "data": (SLOReportPostResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SLOReportPostResponseData, UnsetType]=unset, **kwargs): + """ + The SLO report response. + + :param data: The data portion of the SLO report response. + :type data: SLOReportPostResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/slo_report_post_response_data.py b/datadog_api_client/v2/model/slo_report_post_response_data.py new file mode 100644 index 0000000000..4e6d8419d1 --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_post_response_data.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SLOReportPostResponseData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The data portion of the SLO report response. + + :param id: The ID of the report job. + :type id: str, optional + + :param type: The type of ID. + :type type: str, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/slo_report_status.py b/datadog_api_client/v2/model/slo_report_status.py new file mode 100644 index 0000000000..76ba5cc10d --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SLOReportStatus(ModelSimple): + """ + The status of the SLO report job. + + :param value: Must be one of ["in_progress", "completed", "completed_with_errors", "failed"]. + :type value: str + """ + + allowed_values = { + "in_progress", + "completed", + "completed_with_errors", + "failed", + } + IN_PROGRESS: ClassVar["SLOReportStatus"] + COMPLETED: ClassVar["SLOReportStatus"] + COMPLETED_WITH_ERRORS: ClassVar["SLOReportStatus"] + FAILED: ClassVar["SLOReportStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SLOReportStatus.IN_PROGRESS = SLOReportStatus("in_progress") +SLOReportStatus.COMPLETED = SLOReportStatus("completed") +SLOReportStatus.COMPLETED_WITH_ERRORS = SLOReportStatus("completed_with_errors") +SLOReportStatus.FAILED = SLOReportStatus("failed") diff --git a/datadog_api_client/v2/model/slo_report_status_get_response.py b/datadog_api_client/v2/model/slo_report_status_get_response.py new file mode 100644 index 0000000000..bf9f6df886 --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_status_get_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_report_status_get_response_data import SLOReportStatusGetResponseData + +class SLOReportStatusGetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_report_status_get_response_data import SLOReportStatusGetResponseData + return { + "data": (SLOReportStatusGetResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SLOReportStatusGetResponseData, UnsetType]=unset, **kwargs): + """ + The SLO report status response. + + :param data: The data portion of the SLO report status response. + :type data: SLOReportStatusGetResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/slo_report_status_get_response_attributes.py b/datadog_api_client/v2/model/slo_report_status_get_response_attributes.py new file mode 100644 index 0000000000..5433f4a8ab --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_status_get_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_report_status import SLOReportStatus + +class SLOReportStatusGetResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_report_status import SLOReportStatus + return { + "status": (SLOReportStatus,), + } + attribute_map = { + "status": "status", + } + + def __init__(self_, status: Union[SLOReportStatus, UnsetType]=unset, **kwargs): + """ + The attributes portion of the SLO report status response. + + :param status: The status of the SLO report job. + :type status: SLOReportStatus, optional + """ + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/slo_report_status_get_response_data.py b/datadog_api_client/v2/model/slo_report_status_get_response_data.py new file mode 100644 index 0000000000..080e620081 --- /dev/null +++ b/datadog_api_client/v2/model/slo_report_status_get_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_report_status_get_response_attributes import SLOReportStatusGetResponseAttributes + +class SLOReportStatusGetResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_report_status_get_response_attributes import SLOReportStatusGetResponseAttributes + return { + "attributes": (SLOReportStatusGetResponseAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SLOReportStatusGetResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + The data portion of the SLO report status response. + + :param attributes: The attributes portion of the SLO report status response. + :type attributes: SLOReportStatusGetResponseAttributes, optional + + :param id: The ID of the report job. + :type id: str, optional + + :param type: The type of ID. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/slo_status_data.py b/datadog_api_client/v2/model/slo_status_data.py new file mode 100644 index 0000000000..85c966666a --- /dev/null +++ b/datadog_api_client/v2/model/slo_status_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_status_data_attributes import SloStatusDataAttributes + from datadog_api_client.v2.model.slo_status_type import SloStatusType + +class SloStatusData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_status_data_attributes import SloStatusDataAttributes + from datadog_api_client.v2.model.slo_status_type import SloStatusType + return { + "attributes": (SloStatusDataAttributes,), + "id": (str,), + "type": (SloStatusType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SloStatusDataAttributes, id: str, type: SloStatusType, **kwargs): + """ + The data portion of the SLO status response. + + :param attributes: The attributes of the SLO status. + :type attributes: SloStatusDataAttributes + + :param id: The ID of the SLO. + :type id: str + + :param type: The type of the SLO status resource. + :type type: SloStatusType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/slo_status_data_attributes.py b/datadog_api_client/v2/model/slo_status_data_attributes.py new file mode 100644 index 0000000000..52e230b6a8 --- /dev/null +++ b/datadog_api_client/v2/model/slo_status_data_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.raw_error_budget_remaining import RawErrorBudgetRemaining + +class SloStatusDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.raw_error_budget_remaining import RawErrorBudgetRemaining + return { + "error_budget_remaining": (float,), + "raw_error_budget_remaining": (RawErrorBudgetRemaining,), + "sli": (float,), + "span_precision": (int,), + "state": (str,), + } + attribute_map = { + "error_budget_remaining": "error_budget_remaining", + "raw_error_budget_remaining": "raw_error_budget_remaining", + "sli": "sli", + "span_precision": "span_precision", + "state": "state", + } + + def __init__(self_, error_budget_remaining: float, raw_error_budget_remaining: RawErrorBudgetRemaining, sli: float, span_precision: int, state: str, **kwargs): + """ + The attributes of the SLO status. + + :param error_budget_remaining: The percentage of error budget remaining. + :type error_budget_remaining: float + + :param raw_error_budget_remaining: The raw error budget remaining for the SLO. + :type raw_error_budget_remaining: RawErrorBudgetRemaining + + :param sli: The current Service Level Indicator (SLI) value as a percentage. + :type sli: float + + :param span_precision: The precision of the time span in seconds. + :type span_precision: int + + :param state: The current state of the SLO (for example, ``breached`` , ``warning`` , ``ok`` ). + :type state: str + """ + super().__init__(kwargs) + + + self_.error_budget_remaining = error_budget_remaining + self_.raw_error_budget_remaining = raw_error_budget_remaining + self_.sli = sli + self_.span_precision = span_precision + self_.state = state diff --git a/datadog_api_client/v2/model/slo_status_response.py b/datadog_api_client/v2/model/slo_status_response.py new file mode 100644 index 0000000000..e6e81c98b1 --- /dev/null +++ b/datadog_api_client/v2/model/slo_status_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.slo_status_data import SloStatusData + +class SloStatusResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.slo_status_data import SloStatusData + return { + "data": (SloStatusData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SloStatusData, **kwargs): + """ + The SLO status response. + + :param data: The data portion of the SLO status response. + :type data: SloStatusData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/slo_status_type.py b/datadog_api_client/v2/model/slo_status_type.py new file mode 100644 index 0000000000..28e34c3567 --- /dev/null +++ b/datadog_api_client/v2/model/slo_status_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SloStatusType(ModelSimple): + """ + The type of the SLO status resource. + + :param value: If omitted defaults to "slo_status". Must be one of ["slo_status"]. + :type value: str + """ + + allowed_values = { + "slo_status", + } + SLO_STATUS: ClassVar["SloStatusType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SloStatusType.SLO_STATUS = SloStatusType("slo_status") diff --git a/datadog_api_client/v2/model/slos_group_mode.py b/datadog_api_client/v2/model/slos_group_mode.py new file mode 100644 index 0000000000..fbc563a886 --- /dev/null +++ b/datadog_api_client/v2/model/slos_group_mode.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SlosGroupMode(ModelSimple): + """ + How SLO results are grouped in the response. + + :param value: Must be one of ["overall", "components"]. + :type value: str + """ + + allowed_values = { + "overall", + "components", + } + OVERALL: ClassVar["SlosGroupMode"] + COMPONENTS: ClassVar["SlosGroupMode"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SlosGroupMode.OVERALL = SlosGroupMode("overall") +SlosGroupMode.COMPONENTS = SlosGroupMode("components") diff --git a/datadog_api_client/v2/model/slos_measure.py b/datadog_api_client/v2/model/slos_measure.py new file mode 100644 index 0000000000..8794e2c7c0 --- /dev/null +++ b/datadog_api_client/v2/model/slos_measure.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SlosMeasure(ModelSimple): + """ + The SLO measurement to retrieve. + + :param value: Must be one of ["good_events", "bad_events", "slo_status", "error_budget_remaining", "error_budget_remaining_history", "error_budget_burndown", "burn_rate", "slo_status_history", "good_minutes", "bad_minutes"]. + :type value: str + """ + + allowed_values = { + "good_events", + "bad_events", + "slo_status", + "error_budget_remaining", + "error_budget_remaining_history", + "error_budget_burndown", + "burn_rate", + "slo_status_history", + "good_minutes", + "bad_minutes", + } + GOOD_EVENTS: ClassVar["SlosMeasure"] + BAD_EVENTS: ClassVar["SlosMeasure"] + SLO_STATUS: ClassVar["SlosMeasure"] + ERROR_BUDGET_REMAINING: ClassVar["SlosMeasure"] + ERROR_BUDGET_REMAINING_HISTORY: ClassVar["SlosMeasure"] + ERROR_BUDGET_BURNDOWN: ClassVar["SlosMeasure"] + BURN_RATE: ClassVar["SlosMeasure"] + SLO_STATUS_HISTORY: ClassVar["SlosMeasure"] + GOOD_MINUTES: ClassVar["SlosMeasure"] + BAD_MINUTES: ClassVar["SlosMeasure"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SlosMeasure.GOOD_EVENTS = SlosMeasure("good_events") +SlosMeasure.BAD_EVENTS = SlosMeasure("bad_events") +SlosMeasure.SLO_STATUS = SlosMeasure("slo_status") +SlosMeasure.ERROR_BUDGET_REMAINING = SlosMeasure("error_budget_remaining") +SlosMeasure.ERROR_BUDGET_REMAINING_HISTORY = SlosMeasure("error_budget_remaining_history") +SlosMeasure.ERROR_BUDGET_BURNDOWN = SlosMeasure("error_budget_burndown") +SlosMeasure.BURN_RATE = SlosMeasure("burn_rate") +SlosMeasure.SLO_STATUS_HISTORY = SlosMeasure("slo_status_history") +SlosMeasure.GOOD_MINUTES = SlosMeasure("good_minutes") +SlosMeasure.BAD_MINUTES = SlosMeasure("bad_minutes") diff --git a/datadog_api_client/v2/model/slos_query_type.py b/datadog_api_client/v2/model/slos_query_type.py new file mode 100644 index 0000000000..4b3d9ef50d --- /dev/null +++ b/datadog_api_client/v2/model/slos_query_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SlosQueryType(ModelSimple): + """ + The type of SLO definition being queried. + + :param value: Must be one of ["metric", "time_slice", "monitor"]. + :type value: str + """ + + allowed_values = { + "metric", + "time_slice", + "monitor", + } + METRIC: ClassVar["SlosQueryType"] + TIME_SLICE: ClassVar["SlosQueryType"] + MONITOR: ClassVar["SlosQueryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SlosQueryType.METRIC = SlosQueryType("metric") +SlosQueryType.TIME_SLICE = SlosQueryType("time_slice") +SlosQueryType.MONITOR = SlosQueryType("monitor") diff --git a/datadog_api_client/v2/model/snapshot.py b/datadog_api_client/v2/model/snapshot.py new file mode 100644 index 0000000000..9983f115eb --- /dev/null +++ b/datadog_api_client/v2/model/snapshot.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.snapshot_data import SnapshotData + +class Snapshot(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.snapshot_data import SnapshotData + return { + "data": (SnapshotData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SnapshotData, UnsetType]=unset, **kwargs): + """ + A single heatmap snapshot resource returned by create or update operations. + + :param data: Data object representing a heatmap snapshot, including its identifier, type, and attributes. + :type data: SnapshotData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/snapshot_array.py b/datadog_api_client/v2/model/snapshot_array.py new file mode 100644 index 0000000000..2f0d058f85 --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.snapshot_data import SnapshotData + +class SnapshotArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.snapshot_data import SnapshotData + return { + "data": ([SnapshotData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SnapshotData], **kwargs): + """ + A list of heatmap snapshots returned by a list operation. + + :param data: Array of heatmap snapshot data objects. + :type data: [SnapshotData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/snapshot_create_request.py b/datadog_api_client/v2/model/snapshot_create_request.py new file mode 100644 index 0000000000..f4f4f07c7e --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.snapshot_create_request_data import SnapshotCreateRequestData + +class SnapshotCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.snapshot_create_request_data import SnapshotCreateRequestData + return { + "data": (SnapshotCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SnapshotCreateRequestData, **kwargs): + """ + Request body for creating a heatmap snapshot. + + :param data: Data object for a heatmap snapshot creation request, containing the resource type and attributes. + :type data: SnapshotCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/snapshot_create_request_data.py b/datadog_api_client/v2/model/snapshot_create_request_data.py new file mode 100644 index 0000000000..902fc6b9c3 --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_create_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.snapshot_create_request_data_attributes import SnapshotCreateRequestDataAttributes + from datadog_api_client.v2.model.snapshot_update_request_data_type import SnapshotUpdateRequestDataType + +class SnapshotCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.snapshot_create_request_data_attributes import SnapshotCreateRequestDataAttributes + from datadog_api_client.v2.model.snapshot_update_request_data_type import SnapshotUpdateRequestDataType + return { + "attributes": (SnapshotCreateRequestDataAttributes,), + "type": (SnapshotUpdateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: SnapshotUpdateRequestDataType, attributes: Union[SnapshotCreateRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + Data object for a heatmap snapshot creation request, containing the resource type and attributes. + + :param attributes: Attributes for creating a heatmap snapshot, including the view, session, event, and device context. + :type attributes: SnapshotCreateRequestDataAttributes, optional + + :param type: Snapshots resource type. + :type type: SnapshotUpdateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/snapshot_create_request_data_attributes.py b/datadog_api_client/v2/model/snapshot_create_request_data_attributes.py new file mode 100644 index 0000000000..55cada7ac2 --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_create_request_data_attributes.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SnapshotCreateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "application_id": (str,), + "device_type": (str,), + "event_id": (str,), + "is_device_type_selected_by_user": (bool,), + "session_id": (str,), + "snapshot_name": (str,), + "start": (int,), + "view_id": (str,), + "view_name": (str,), + } + attribute_map = { + "application_id": "application_id", + "device_type": "device_type", + "event_id": "event_id", + "is_device_type_selected_by_user": "is_device_type_selected_by_user", + "session_id": "session_id", + "snapshot_name": "snapshot_name", + "start": "start", + "view_id": "view_id", + "view_name": "view_name", + } + + def __init__(self_, application_id: str, device_type: str, event_id: str, is_device_type_selected_by_user: bool, snapshot_name: str, start: int, view_name: str, session_id: Union[str, UnsetType]=unset, view_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for creating a heatmap snapshot, including the view, session, event, and device context. + + :param application_id: Unique identifier of the RUM application. + :type application_id: str + + :param device_type: Device type used when capturing the snapshot (e.g., desktop, mobile, tablet). + :type device_type: str + + :param event_id: Unique identifier of the RUM event associated with the snapshot. + :type event_id: str + + :param is_device_type_selected_by_user: Indicates whether the device type was explicitly selected by the user rather than auto-detected. + :type is_device_type_selected_by_user: bool + + :param session_id: Unique identifier of the RUM session associated with the snapshot. + :type session_id: str, optional + + :param snapshot_name: Human-readable name for the snapshot. + :type snapshot_name: str + + :param start: Offset in milliseconds from the start of the session at which the snapshot was captured. + :type start: int + + :param view_id: Unique identifier of the RUM view associated with the snapshot. + :type view_id: str, optional + + :param view_name: URL path or name of the view where the snapshot was captured. + :type view_name: str + """ + if session_id is not unset: + kwargs["session_id"] = session_id + if view_id is not unset: + kwargs["view_id"] = view_id + super().__init__(kwargs) + + + self_.application_id = application_id + self_.device_type = device_type + self_.event_id = event_id + self_.is_device_type_selected_by_user = is_device_type_selected_by_user + self_.snapshot_name = snapshot_name + self_.start = start + self_.view_name = view_name diff --git a/datadog_api_client/v2/model/snapshot_data.py b/datadog_api_client/v2/model/snapshot_data.py new file mode 100644 index 0000000000..1fc1e0663f --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.snapshot_data_attributes import SnapshotDataAttributes + from datadog_api_client.v2.model.snapshot_update_request_data_type import SnapshotUpdateRequestDataType + +class SnapshotData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.snapshot_data_attributes import SnapshotDataAttributes + from datadog_api_client.v2.model.snapshot_update_request_data_type import SnapshotUpdateRequestDataType + return { + "attributes": (SnapshotDataAttributes,), + "id": (str,), + "type": (SnapshotUpdateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, type: SnapshotUpdateRequestDataType, attributes: Union[SnapshotDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data object representing a heatmap snapshot, including its identifier, type, and attributes. + + :param attributes: Attributes of a heatmap snapshot, including view context, device information, and audit metadata. + :type attributes: SnapshotDataAttributes, optional + + :param id: Unique identifier of the heatmap snapshot. + :type id: str, optional + + :param type: Snapshots resource type. + :type type: SnapshotUpdateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/snapshot_data_attributes.py b/datadog_api_client/v2/model/snapshot_data_attributes.py new file mode 100644 index 0000000000..a49eaeffaf --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_data_attributes.py @@ -0,0 +1,152 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SnapshotDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "application_id": (str,), + "created_at": (datetime,), + "created_by": (str,), + "created_by_handle": (str,), + "created_by_user_id": (int,), + "device_type": (str,), + "event_id": (str,), + "is_device_type_selected_by_user": (bool,), + "modified_at": (datetime,), + "org_id": (int,), + "session_id": (str,), + "snapshot_name": (str,), + "start": (int,), + "view_id": (str,), + "view_name": (str,), + } + attribute_map = { + "application_id": "application_id", + "created_at": "created_at", + "created_by": "created_by", + "created_by_handle": "created_by_handle", + "created_by_user_id": "created_by_user_id", + "device_type": "device_type", + "event_id": "event_id", + "is_device_type_selected_by_user": "is_device_type_selected_by_user", + "modified_at": "modified_at", + "org_id": "org_id", + "session_id": "session_id", + "snapshot_name": "snapshot_name", + "start": "start", + "view_id": "view_id", + "view_name": "view_name", + } + read_only_vars = { + "created_at", + "created_by", + "created_by_handle", + "created_by_user_id", + "modified_at", + "org_id", + } + + def __init__(self_, application_id: Union[str, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, created_by: Union[str, UnsetType]=unset, created_by_handle: Union[str, UnsetType]=unset, created_by_user_id: Union[int, UnsetType]=unset, device_type: Union[str, UnsetType]=unset, event_id: Union[str, UnsetType]=unset, is_device_type_selected_by_user: Union[bool, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, org_id: Union[int, UnsetType]=unset, session_id: Union[str, UnsetType]=unset, snapshot_name: Union[str, UnsetType]=unset, start: Union[int, UnsetType]=unset, view_id: Union[str, UnsetType]=unset, view_name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a heatmap snapshot, including view context, device information, and audit metadata. + + :param application_id: Unique identifier of the RUM application. + :type application_id: str, optional + + :param created_at: Timestamp when the snapshot was created. + :type created_at: datetime, optional + + :param created_by: Display name of the user who created the snapshot. + :type created_by: str, optional + + :param created_by_handle: Email handle of the user who created the snapshot. + :type created_by_handle: str, optional + + :param created_by_user_id: Numeric identifier of the user who created the snapshot. + :type created_by_user_id: int, optional + + :param device_type: Device type used when capturing the snapshot (e.g., desktop, mobile, tablet). + :type device_type: str, optional + + :param event_id: Unique identifier of the RUM event associated with the snapshot. + :type event_id: str, optional + + :param is_device_type_selected_by_user: Indicates whether the device type was explicitly selected by the user rather than auto-detected. + :type is_device_type_selected_by_user: bool, optional + + :param modified_at: Timestamp when the snapshot was last modified. + :type modified_at: datetime, optional + + :param org_id: Numeric identifier of the organization that owns the snapshot. + :type org_id: int, optional + + :param session_id: Unique identifier of the RUM session associated with the snapshot. + :type session_id: str, optional + + :param snapshot_name: Human-readable name for the snapshot. + :type snapshot_name: str, optional + + :param start: Offset in milliseconds from the start of the session at which the snapshot was captured. + :type start: int, optional + + :param view_id: Unique identifier of the RUM view associated with the snapshot. + :type view_id: str, optional + + :param view_name: URL path or name of the view where the snapshot was captured. + :type view_name: str, optional + """ + if application_id is not unset: + kwargs["application_id"] = application_id + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by is not unset: + kwargs["created_by"] = created_by + if created_by_handle is not unset: + kwargs["created_by_handle"] = created_by_handle + if created_by_user_id is not unset: + kwargs["created_by_user_id"] = created_by_user_id + if device_type is not unset: + kwargs["device_type"] = device_type + if event_id is not unset: + kwargs["event_id"] = event_id + if is_device_type_selected_by_user is not unset: + kwargs["is_device_type_selected_by_user"] = is_device_type_selected_by_user + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if org_id is not unset: + kwargs["org_id"] = org_id + if session_id is not unset: + kwargs["session_id"] = session_id + if snapshot_name is not unset: + kwargs["snapshot_name"] = snapshot_name + if start is not unset: + kwargs["start"] = start + if view_id is not unset: + kwargs["view_id"] = view_id + if view_name is not unset: + kwargs["view_name"] = view_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/snapshot_update_request.py b/datadog_api_client/v2/model/snapshot_update_request.py new file mode 100644 index 0000000000..6a2f0272e5 --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.snapshot_update_request_data import SnapshotUpdateRequestData + +class SnapshotUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.snapshot_update_request_data import SnapshotUpdateRequestData + return { + "data": (SnapshotUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SnapshotUpdateRequestData, **kwargs): + """ + Request body for updating a heatmap snapshot. + + :param data: Data object for a heatmap snapshot update request, containing the resource identifier, type, and attributes. + :type data: SnapshotUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/snapshot_update_request_data.py b/datadog_api_client/v2/model/snapshot_update_request_data.py new file mode 100644 index 0000000000..c7c7c7d9ea --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_update_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.snapshot_update_request_data_attributes import SnapshotUpdateRequestDataAttributes + from datadog_api_client.v2.model.snapshot_update_request_data_type import SnapshotUpdateRequestDataType + +class SnapshotUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.snapshot_update_request_data_attributes import SnapshotUpdateRequestDataAttributes + from datadog_api_client.v2.model.snapshot_update_request_data_type import SnapshotUpdateRequestDataType + return { + "attributes": (SnapshotUpdateRequestDataAttributes,), + "id": (str,), + "type": (SnapshotUpdateRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: SnapshotUpdateRequestDataType, attributes: Union[SnapshotUpdateRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data object for a heatmap snapshot update request, containing the resource identifier, type, and attributes. + + :param attributes: Attributes for updating a heatmap snapshot, including event, session, and view context. + :type attributes: SnapshotUpdateRequestDataAttributes, optional + + :param id: Unique identifier of the heatmap snapshot to update. + :type id: str, optional + + :param type: Snapshots resource type. + :type type: SnapshotUpdateRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/snapshot_update_request_data_attributes.py b/datadog_api_client/v2/model/snapshot_update_request_data_attributes.py new file mode 100644 index 0000000000..3f98d12304 --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_update_request_data_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SnapshotUpdateRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "event_id": (str,), + "is_device_type_selected_by_user": (bool,), + "session_id": (str,), + "start": (int,), + "view_id": (str,), + } + attribute_map = { + "event_id": "event_id", + "is_device_type_selected_by_user": "is_device_type_selected_by_user", + "session_id": "session_id", + "start": "start", + "view_id": "view_id", + } + + def __init__(self_, event_id: str, is_device_type_selected_by_user: bool, start: int, session_id: Union[str, UnsetType]=unset, view_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating a heatmap snapshot, including event, session, and view context. + + :param event_id: Unique identifier of the RUM event associated with the snapshot. + :type event_id: str + + :param is_device_type_selected_by_user: Indicates whether the device type was explicitly selected by the user rather than auto-detected. + :type is_device_type_selected_by_user: bool + + :param session_id: Unique identifier of the RUM session associated with the snapshot. + :type session_id: str, optional + + :param start: Offset in milliseconds from the start of the session at which the snapshot was captured. + :type start: int + + :param view_id: Unique identifier of the RUM view associated with the snapshot. + :type view_id: str, optional + """ + if session_id is not unset: + kwargs["session_id"] = session_id + if view_id is not unset: + kwargs["view_id"] = view_id + super().__init__(kwargs) + + + self_.event_id = event_id + self_.is_device_type_selected_by_user = is_device_type_selected_by_user + self_.start = start diff --git a/datadog_api_client/v2/model/snapshot_update_request_data_type.py b/datadog_api_client/v2/model/snapshot_update_request_data_type.py new file mode 100644 index 0000000000..8804de0f37 --- /dev/null +++ b/datadog_api_client/v2/model/snapshot_update_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SnapshotUpdateRequestDataType(ModelSimple): + """ + Snapshots resource type. + + :param value: If omitted defaults to "snapshots". Must be one of ["snapshots"]. + :type value: str + """ + + allowed_values = { + "snapshots", + } + SNAPSHOTS: ClassVar["SnapshotUpdateRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SnapshotUpdateRequestDataType.SNAPSHOTS = SnapshotUpdateRequestDataType("snapshots") diff --git a/datadog_api_client/v2/model/software_catalog_trigger_wrapper.py b/datadog_api_client/v2/model/software_catalog_trigger_wrapper.py new file mode 100644 index 0000000000..ec485fffb8 --- /dev/null +++ b/datadog_api_client/v2/model/software_catalog_trigger_wrapper.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SoftwareCatalogTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + return { + "software_catalog_trigger": (dict,), + "start_step_names": ([str],), + } + attribute_map = { + "software_catalog_trigger": "softwareCatalogTrigger", + "start_step_names": "startStepNames", + } + + def __init__(self_, software_catalog_trigger: dict, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Software Catalog-based trigger. + + :param software_catalog_trigger: Trigger a workflow from Software Catalog. + :type software_catalog_trigger: dict + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.software_catalog_trigger = software_catalog_trigger diff --git a/datadog_api_client/v2/model/sort_direction.py b/datadog_api_client/v2/model/sort_direction.py new file mode 100644 index 0000000000..9485d16b70 --- /dev/null +++ b/datadog_api_client/v2/model/sort_direction.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SortDirection(ModelSimple): + """ + The direction to sort by. + + :param value: If omitted defaults to "desc". Must be one of ["desc", "asc"]. + :type value: str + """ + + allowed_values = { + "desc", + "asc", + } + DESC: ClassVar["SortDirection"] + ASC: ClassVar["SortDirection"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SortDirection.DESC = SortDirection("desc") +SortDirection.ASC = SortDirection("asc") diff --git a/datadog_api_client/v2/model/sourcemap_data_type.py b/datadog_api_client/v2/model/sourcemap_data_type.py new file mode 100644 index 0000000000..95e8fd4040 --- /dev/null +++ b/datadog_api_client/v2/model/sourcemap_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SourcemapDataType(ModelSimple): + """ + The resource type for source map objects. + + :param value: If omitted defaults to "sourcemaps". Must be one of ["sourcemaps"]. + :type value: str + """ + + allowed_values = { + "sourcemaps", + } + SOURCEMAPS: ClassVar["SourcemapDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SourcemapDataType.SOURCEMAPS = SourcemapDataType("sourcemaps") diff --git a/datadog_api_client/v2/model/sourcemap_file_attributes.py b/datadog_api_client/v2/model/sourcemap_file_attributes.py new file mode 100644 index 0000000000..e5b534f8d8 --- /dev/null +++ b/datadog_api_client/v2/model/sourcemap_file_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SourcemapFileAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "file": (str,), + "mappings": (str,), + "minified_line_lengths": ([int],), + "names": ([bool, date, datetime, dict, float, int, list, str, UUID, none_type],), + "source_root": (str,), + "sources": ([str],), + "sources_content": ([str],), + "version": (int,), + } + attribute_map = { + "file": "file", + "mappings": "mappings", + "minified_line_lengths": "minifiedLineLengths", + "names": "names", + "source_root": "sourceRoot", + "sources": "sources", + "sources_content": "sourcesContent", + "version": "version", + } + + def __init__(self_, file: str, mappings: str, minified_line_lengths: List[int], names: List[Any], source_root: str, sources: List[str], sources_content: List[str], version: int, **kwargs): + """ + Attributes of a JavaScript source map file. + + :param file: The name of the minified JavaScript file. + :type file: str + + :param mappings: The Base64 VLQ encoded string that maps positions in the minified + file to positions in the original source files. + :type mappings: str + + :param minified_line_lengths: List of character counts for each line in the minified file. + :type minified_line_lengths: [int] + + :param names: List of symbol names referenced in the mappings. + :type names: [bool, date, datetime, dict, float, int, list, str, UUID, none_type] + + :param source_root: The root path prepended to source file paths. + :type source_root: str + + :param sources: List of original source file paths. + :type sources: [str] + + :param sources_content: List of original source file contents corresponding to the paths in ``sources``. + :type sources_content: [str] + + :param version: The version of the source map format (typically 3). + :type version: int + """ + super().__init__(kwargs) + + + self_.file = file + self_.mappings = mappings + self_.minified_line_lengths = minified_line_lengths + self_.names = names + self_.source_root = source_root + self_.sources = sources + self_.sources_content = sources_content + self_.version = version diff --git a/datadog_api_client/v2/model/sourcemap_file_data.py b/datadog_api_client/v2/model/sourcemap_file_data.py new file mode 100644 index 0000000000..8aded57786 --- /dev/null +++ b/datadog_api_client/v2/model/sourcemap_file_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sourcemap_file_attributes import SourcemapFileAttributes + from datadog_api_client.v2.model.sourcemap_file_data_type import SourcemapFileDataType + +class SourcemapFileData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sourcemap_file_attributes import SourcemapFileAttributes + from datadog_api_client.v2.model.sourcemap_file_data_type import SourcemapFileDataType + return { + "attributes": (SourcemapFileAttributes,), + "id": (str,), + "type": (SourcemapFileDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SourcemapFileAttributes, id: str, type: SourcemapFileDataType, **kwargs): + """ + JavaScript source map file data object. + + :param attributes: Attributes of a JavaScript source map file. + :type attributes: SourcemapFileAttributes + + :param id: The unique identifier of the source map file, typically the path to the file. + :type id: str + + :param type: The resource type for source map file objects. + :type type: SourcemapFileDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/sourcemap_file_data_type.py b/datadog_api_client/v2/model/sourcemap_file_data_type.py new file mode 100644 index 0000000000..549accc55e --- /dev/null +++ b/datadog_api_client/v2/model/sourcemap_file_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SourcemapFileDataType(ModelSimple): + """ + The resource type for source map file objects. + + :param value: If omitted defaults to "sourcemap_files". Must be one of ["sourcemap_files"]. + :type value: str + """ + + allowed_values = { + "sourcemap_files", + } + SOURCEMAP_FILES: ClassVar["SourcemapFileDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SourcemapFileDataType.SOURCEMAP_FILES = SourcemapFileDataType("sourcemap_files") diff --git a/datadog_api_client/v2/model/sourcemap_file_response.py b/datadog_api_client/v2/model/sourcemap_file_response.py new file mode 100644 index 0000000000..d2789f8836 --- /dev/null +++ b/datadog_api_client/v2/model/sourcemap_file_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sourcemap_file_data import SourcemapFileData + +class SourcemapFileResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sourcemap_file_data import SourcemapFileData + return { + "data": (SourcemapFileData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SourcemapFileData, **kwargs): + """ + Response containing a JavaScript source map file. + + :param data: JavaScript source map file data object. + :type data: SourcemapFileData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/sourcemap_item.py b/datadog_api_client/v2/model/sourcemap_item.py new file mode 100644 index 0000000000..6fd52cb316 --- /dev/null +++ b/datadog_api_client/v2/model/sourcemap_item.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SourcemapItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A source map data object representing one of the supported map kinds. + + :param attributes: Attributes of a JavaScript source map. + :type attributes: JSSourcemapAttributes + + :param id: The unique identifier of the source map. + :type id: str + + :param type: The resource type for source map objects. + :type type: SourcemapDataType + """ + 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.js_sourcemap_data import JSSourcemapData + from datadog_api_client.v2.model.react_native_sourcemap_data import ReactNativeSourcemapData + from datadog_api_client.v2.model.ios_sourcemap_data import IOSSourcemapData + from datadog_api_client.v2.model.jvm_sourcemap_data import JVMSourcemapData + from datadog_api_client.v2.model.flutter_sourcemap_data import FlutterSourcemapData + from datadog_api_client.v2.model.elf_sourcemap_data import ELFSourcemapData + from datadog_api_client.v2.model.ndk_sourcemap_data import NDKSourcemapData + from datadog_api_client.v2.model.il2_cpp_sourcemap_data import IL2CPPSourcemapData + return { + "oneOf": [ + JSSourcemapData, + ReactNativeSourcemapData, + IOSSourcemapData, + JVMSourcemapData, + FlutterSourcemapData, + ELFSourcemapData, + NDKSourcemapData, + IL2CPPSourcemapData, + ], + } diff --git a/datadog_api_client/v2/model/sourcemap_map_kind.py b/datadog_api_client/v2/model/sourcemap_map_kind.py new file mode 100644 index 0000000000..cd6316ba6f --- /dev/null +++ b/datadog_api_client/v2/model/sourcemap_map_kind.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SourcemapMapKind(ModelSimple): + """ + The type of source map. + + :param value: Must be one of ["js", "jvm", "ios", "react", "flutter", "elf", "ndk", "il2cpp"]. + :type value: str + """ + + allowed_values = { + "js", + "jvm", + "ios", + "react", + "flutter", + "elf", + "ndk", + "il2cpp", + } + JS: ClassVar["SourcemapMapKind"] + JVM: ClassVar["SourcemapMapKind"] + IOS: ClassVar["SourcemapMapKind"] + REACT: ClassVar["SourcemapMapKind"] + FLUTTER: ClassVar["SourcemapMapKind"] + ELF: ClassVar["SourcemapMapKind"] + NDK: ClassVar["SourcemapMapKind"] + IL2CPP: ClassVar["SourcemapMapKind"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SourcemapMapKind.JS = SourcemapMapKind("js") +SourcemapMapKind.JVM = SourcemapMapKind("jvm") +SourcemapMapKind.IOS = SourcemapMapKind("ios") +SourcemapMapKind.REACT = SourcemapMapKind("react") +SourcemapMapKind.FLUTTER = SourcemapMapKind("flutter") +SourcemapMapKind.ELF = SourcemapMapKind("elf") +SourcemapMapKind.NDK = SourcemapMapKind("ndk") +SourcemapMapKind.IL2CPP = SourcemapMapKind("il2cpp") diff --git a/datadog_api_client/v2/model/sourcemaps_list_meta.py b/datadog_api_client/v2/model/sourcemaps_list_meta.py new file mode 100644 index 0000000000..4e11d6e896 --- /dev/null +++ b/datadog_api_client/v2/model/sourcemaps_list_meta.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sourcemaps_list_meta_page import SourcemapsListMetaPage + +class SourcemapsListMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sourcemaps_list_meta_page import SourcemapsListMetaPage + return { + "page": (SourcemapsListMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: SourcemapsListMetaPage, **kwargs): + """ + Pagination metadata for the source maps list response. + + :param page: Page information for the source maps list response. + :type page: SourcemapsListMetaPage + """ + super().__init__(kwargs) + + + self_.page = page diff --git a/datadog_api_client/v2/model/sourcemaps_list_meta_page.py b/datadog_api_client/v2/model/sourcemaps_list_meta_page.py new file mode 100644 index 0000000000..c635ce2aa9 --- /dev/null +++ b/datadog_api_client/v2/model/sourcemaps_list_meta_page.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SourcemapsListMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "has_more_results": (bool,), + "total_filtered_count": (int,), + } + attribute_map = { + "has_more_results": "has_more_results", + "total_filtered_count": "total_filtered_count", + } + + def __init__(self_, has_more_results: bool, total_filtered_count: int, **kwargs): + """ + Page information for the source maps list response. + + :param has_more_results: Whether there are more results available beyond the current page. + :type has_more_results: bool + + :param total_filtered_count: Total number of source maps matching the filter criteria. + :type total_filtered_count: int + """ + super().__init__(kwargs) + + + self_.has_more_results = has_more_results + self_.total_filtered_count = total_filtered_count diff --git a/datadog_api_client/v2/model/sourcemaps_response.py b/datadog_api_client/v2/model/sourcemaps_response.py new file mode 100644 index 0000000000..8e5f4f8a52 --- /dev/null +++ b/datadog_api_client/v2/model/sourcemaps_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.sourcemap_item import SourcemapItem + from datadog_api_client.v2.model.js_sourcemap_data import JSSourcemapData + from datadog_api_client.v2.model.react_native_sourcemap_data import ReactNativeSourcemapData + from datadog_api_client.v2.model.ios_sourcemap_data import IOSSourcemapData + from datadog_api_client.v2.model.jvm_sourcemap_data import JVMSourcemapData + from datadog_api_client.v2.model.flutter_sourcemap_data import FlutterSourcemapData + from datadog_api_client.v2.model.elf_sourcemap_data import ELFSourcemapData + from datadog_api_client.v2.model.ndk_sourcemap_data import NDKSourcemapData + from datadog_api_client.v2.model.il2_cpp_sourcemap_data import IL2CPPSourcemapData + +class SourcemapsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.sourcemap_item import SourcemapItem + return { + "data": ([SourcemapItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[Union[SourcemapItem, JSSourcemapData, ReactNativeSourcemapData, IOSSourcemapData, JVMSourcemapData, FlutterSourcemapData, ELFSourcemapData, NDKSourcemapData, IL2CPPSourcemapData]], **kwargs): + """ + Response containing a list of affected source maps. + + :param data: List of source map data objects. + :type data: [SourcemapItem] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/span.py b/datadog_api_client/v2/model/span.py new file mode 100644 index 0000000000..2b918b099d --- /dev/null +++ b/datadog_api_client/v2/model/span.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_attributes import SpansAttributes + from datadog_api_client.v2.model.spans_type import SpansType + +class Span(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_attributes import SpansAttributes + from datadog_api_client.v2.model.spans_type import SpansType + return { + "attributes": (SpansAttributes,), + "id": (str,), + "type": (SpansType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SpansAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SpansType, UnsetType]=unset, **kwargs): + """ + Object description of a spans after being processed and stored by Datadog. + + :param attributes: JSON object containing all span attributes and their associated values. + :type attributes: SpansAttributes, optional + + :param id: Unique ID of the Span. + :type id: str, optional + + :param type: Type of the span. + :type type: SpansType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_bucket.py b/datadog_api_client/v2/model/spans_aggregate_bucket.py new file mode 100644 index 0000000000..67c26e4526 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_bucket.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_aggregate_bucket_attributes import SpansAggregateBucketAttributes + from datadog_api_client.v2.model.spans_aggregate_bucket_type import SpansAggregateBucketType + from datadog_api_client.v2.model.spans_aggregate_bucket_value_timeseries_point import SpansAggregateBucketValueTimeseriesPoint + +class SpansAggregateBucket(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_aggregate_bucket_attributes import SpansAggregateBucketAttributes + from datadog_api_client.v2.model.spans_aggregate_bucket_type import SpansAggregateBucketType + return { + "attributes": (SpansAggregateBucketAttributes,), + "id": (str,), + "type": (SpansAggregateBucketType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SpansAggregateBucketAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SpansAggregateBucketType, UnsetType]=unset, **kwargs): + """ + Spans aggregate. + + :param attributes: A bucket values. + :type attributes: SpansAggregateBucketAttributes, optional + + :param id: ID of the spans aggregate. + :type id: str, optional + + :param type: The spans aggregate bucket type. + :type type: SpansAggregateBucketType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_bucket_attributes.py b/datadog_api_client/v2/model/spans_aggregate_bucket_attributes.py new file mode 100644 index 0000000000..9c1d550209 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_bucket_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_aggregate_bucket_value import SpansAggregateBucketValue + from datadog_api_client.v2.model.spans_aggregate_bucket_value_timeseries_point import SpansAggregateBucketValueTimeseriesPoint + +class SpansAggregateBucketAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_aggregate_bucket_value import SpansAggregateBucketValue + return { + "by": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "compute": (dict,), + "computes": ({str: (SpansAggregateBucketValue,)},), + } + attribute_map = { + "by": "by", + "compute": "compute", + "computes": "computes", + } + + def __init__(self_, by: Union[Dict[str, Any], UnsetType]=unset, compute: Union[dict, UnsetType]=unset, computes: Union[Dict[str, Union[SpansAggregateBucketValue, str, float, List[SpansAggregateBucketValueTimeseriesPoint]]], UnsetType]=unset, **kwargs): + """ + A bucket values. + + :param by: The key, value pairs for each group by. + :type by: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param compute: The compute data. + :type compute: dict, optional + + :param computes: A map of the metric name -> value for regular compute or list of values for a timeseries. + :type computes: {str: (SpansAggregateBucketValue,)}, optional + """ + if by is not unset: + kwargs["by"] = by + if compute is not unset: + kwargs["compute"] = compute + if computes is not unset: + kwargs["computes"] = computes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_bucket_type.py b/datadog_api_client/v2/model/spans_aggregate_bucket_type.py new file mode 100644 index 0000000000..6a0270557f --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_bucket_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansAggregateBucketType(ModelSimple): + """ + The spans aggregate bucket type. + + :param value: If omitted defaults to "bucket". Must be one of ["bucket"]. + :type value: str + """ + + allowed_values = { + "bucket", + } + BUCKET: ClassVar["SpansAggregateBucketType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansAggregateBucketType.BUCKET = SpansAggregateBucketType("bucket") diff --git a/datadog_api_client/v2/model/spans_aggregate_bucket_value.py b/datadog_api_client/v2/model/spans_aggregate_bucket_value.py new file mode 100644 index 0000000000..650ce7450f --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_bucket_value.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansAggregateBucketValue(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A bucket value, can be either a timeseries or a single value. + """ + 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.spans_aggregate_bucket_value_timeseries_point import SpansAggregateBucketValueTimeseriesPoint + return { + "oneOf": [ + str, + float, + [SpansAggregateBucketValueTimeseriesPoint], + ], + } diff --git a/datadog_api_client/v2/model/spans_aggregate_bucket_value_timeseries_point.py b/datadog_api_client/v2/model/spans_aggregate_bucket_value_timeseries_point.py new file mode 100644 index 0000000000..cb8270afb4 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_bucket_value_timeseries_point.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansAggregateBucketValueTimeseriesPoint(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time": (str,), + "value": (float,), + } + attribute_map = { + "time": "time", + "value": "value", + } + + def __init__(self_, time: Union[str, UnsetType]=unset, value: Union[float, UnsetType]=unset, **kwargs): + """ + A timeseries point. + + :param time: The time value for this point. + :type time: str, optional + + :param value: The value for this point. + :type value: float, optional + """ + if time is not unset: + kwargs["time"] = time + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_data.py b/datadog_api_client/v2/model/spans_aggregate_data.py new file mode 100644 index 0000000000..376a1409e3 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_aggregate_request_attributes import SpansAggregateRequestAttributes + from datadog_api_client.v2.model.spans_aggregate_request_type import SpansAggregateRequestType + +class SpansAggregateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_aggregate_request_attributes import SpansAggregateRequestAttributes + from datadog_api_client.v2.model.spans_aggregate_request_type import SpansAggregateRequestType + return { + "attributes": (SpansAggregateRequestAttributes,), + "type": (SpansAggregateRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[SpansAggregateRequestAttributes, UnsetType]=unset, type: Union[SpansAggregateRequestType, UnsetType]=unset, **kwargs): + """ + The object containing the query content. + + :param attributes: The object containing all the query parameters. + :type attributes: SpansAggregateRequestAttributes, optional + + :param type: The type of resource. The value should always be aggregate_request. + :type type: SpansAggregateRequestType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_request.py b/datadog_api_client/v2/model/spans_aggregate_request.py new file mode 100644 index 0000000000..c87e964a7e --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_aggregate_data import SpansAggregateData + +class SpansAggregateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_aggregate_data import SpansAggregateData + return { + "data": (SpansAggregateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SpansAggregateData, UnsetType]=unset, **kwargs): + """ + The object sent with the request to retrieve a list of aggregated spans from your organization. + + :param data: The object containing the query content. + :type data: SpansAggregateData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_request_attributes.py b/datadog_api_client/v2/model/spans_aggregate_request_attributes.py new file mode 100644 index 0000000000..e4e283d2be --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_request_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_compute import SpansCompute + from datadog_api_client.v2.model.spans_query_filter import SpansQueryFilter + from datadog_api_client.v2.model.spans_group_by import SpansGroupBy + from datadog_api_client.v2.model.spans_query_options import SpansQueryOptions + +class SpansAggregateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_compute import SpansCompute + from datadog_api_client.v2.model.spans_query_filter import SpansQueryFilter + from datadog_api_client.v2.model.spans_group_by import SpansGroupBy + from datadog_api_client.v2.model.spans_query_options import SpansQueryOptions + return { + "compute": ([SpansCompute],), + "filter": (SpansQueryFilter,), + "group_by": ([SpansGroupBy],), + "options": (SpansQueryOptions,), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + "options": "options", + } + + def __init__(self_, compute: Union[List[SpansCompute], UnsetType]=unset, filter: Union[SpansQueryFilter, UnsetType]=unset, group_by: Union[List[SpansGroupBy], UnsetType]=unset, options: Union[SpansQueryOptions, UnsetType]=unset, **kwargs): + """ + The object containing all the query parameters. + + :param compute: The list of metrics or timeseries to compute for the retrieved buckets. + :type compute: [SpansCompute], optional + + :param filter: The search and filter query settings. + :type filter: SpansQueryFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [SpansGroupBy], optional + + :param options: Global query options that are used during the query. + Note: You should only supply timezone or time offset but not both otherwise the query will fail. + :type options: SpansQueryOptions, optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + if options is not unset: + kwargs["options"] = options + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_request_type.py b/datadog_api_client/v2/model/spans_aggregate_request_type.py new file mode 100644 index 0000000000..9cb1ccd872 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansAggregateRequestType(ModelSimple): + """ + The type of resource. The value should always be aggregate_request. + + :param value: If omitted defaults to "aggregate_request". Must be one of ["aggregate_request"]. + :type value: str + """ + + allowed_values = { + "aggregate_request", + } + AGGREGATE_REQUEST: ClassVar["SpansAggregateRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansAggregateRequestType.AGGREGATE_REQUEST = SpansAggregateRequestType("aggregate_request") diff --git a/datadog_api_client/v2/model/spans_aggregate_response.py b/datadog_api_client/v2/model/spans_aggregate_response.py new file mode 100644 index 0000000000..2f3b90f317 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_response.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_aggregate_bucket import SpansAggregateBucket + from datadog_api_client.v2.model.spans_aggregate_response_metadata import SpansAggregateResponseMetadata + from datadog_api_client.v2.model.spans_aggregate_bucket_value_timeseries_point import SpansAggregateBucketValueTimeseriesPoint + +class SpansAggregateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_aggregate_bucket import SpansAggregateBucket + from datadog_api_client.v2.model.spans_aggregate_response_metadata import SpansAggregateResponseMetadata + return { + "data": ([SpansAggregateBucket],), + "meta": (SpansAggregateResponseMetadata,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[SpansAggregateBucket], UnsetType]=unset, meta: Union[SpansAggregateResponseMetadata, UnsetType]=unset, **kwargs): + """ + The response object for the spans aggregate API endpoint. + + :param data: The list of matching buckets, one item per bucket. + :type data: [SpansAggregateBucket], optional + + :param meta: The metadata associated with a request. + :type meta: SpansAggregateResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_response_metadata.py b/datadog_api_client/v2/model/spans_aggregate_response_metadata.py new file mode 100644 index 0000000000..be8884aa50 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_aggregate_response_status import SpansAggregateResponseStatus + from datadog_api_client.v2.model.spans_warning import SpansWarning + +class SpansAggregateResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_aggregate_response_status import SpansAggregateResponseStatus + from datadog_api_client.v2.model.spans_warning import SpansWarning + return { + "elapsed": (int,), + "request_id": (str,), + "status": (SpansAggregateResponseStatus,), + "warnings": ([SpansWarning],), + } + attribute_map = { + "elapsed": "elapsed", + "request_id": "request_id", + "status": "status", + "warnings": "warnings", + } + + def __init__(self_, elapsed: Union[int, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, status: Union[SpansAggregateResponseStatus, UnsetType]=unset, warnings: Union[List[SpansWarning], UnsetType]=unset, **kwargs): + """ + The metadata associated with a request. + + :param elapsed: The time elapsed in milliseconds. + :type elapsed: int, optional + + :param request_id: The identifier of the request. + :type request_id: str, optional + + :param status: The status of the response. + :type status: SpansAggregateResponseStatus, optional + + :param warnings: A list of warnings (non fatal errors) encountered, partial results might be returned if + warnings are present in the response. + :type warnings: [SpansWarning], optional + """ + if elapsed is not unset: + kwargs["elapsed"] = elapsed + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_response_status.py b/datadog_api_client/v2/model/spans_aggregate_response_status.py new file mode 100644 index 0000000000..b3f0a26df2 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_response_status.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansAggregateResponseStatus(ModelSimple): + """ + The status of the response. + + :param value: Must be one of ["done", "timeout"]. + :type value: str + """ + + allowed_values = { + "done", + "timeout", + } + DONE: ClassVar["SpansAggregateResponseStatus"] + TIMEOUT: ClassVar["SpansAggregateResponseStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansAggregateResponseStatus.DONE = SpansAggregateResponseStatus("done") +SpansAggregateResponseStatus.TIMEOUT = SpansAggregateResponseStatus("timeout") diff --git a/datadog_api_client/v2/model/spans_aggregate_sort.py b/datadog_api_client/v2/model/spans_aggregate_sort.py new file mode 100644 index 0000000000..bac5b1f920 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_sort.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_aggregation_function import SpansAggregationFunction + from datadog_api_client.v2.model.spans_sort_order import SpansSortOrder + from datadog_api_client.v2.model.spans_aggregate_sort_type import SpansAggregateSortType + +class SpansAggregateSort(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_aggregation_function import SpansAggregationFunction + from datadog_api_client.v2.model.spans_sort_order import SpansSortOrder + from datadog_api_client.v2.model.spans_aggregate_sort_type import SpansAggregateSortType + return { + "aggregation": (SpansAggregationFunction,), + "metric": (str,), + "order": (SpansSortOrder,), + "type": (SpansAggregateSortType,), + } + attribute_map = { + "aggregation": "aggregation", + "metric": "metric", + "order": "order", + "type": "type", + } + + def __init__(self_, aggregation: Union[SpansAggregationFunction, UnsetType]=unset, metric: Union[str, UnsetType]=unset, order: Union[SpansSortOrder, UnsetType]=unset, type: Union[SpansAggregateSortType, UnsetType]=unset, **kwargs): + """ + A sort rule. + + :param aggregation: An aggregation function. + :type aggregation: SpansAggregationFunction, optional + + :param metric: The metric to sort by (only used for ``type=measure`` ). + :type metric: str, optional + + :param order: The order to use, ascending or descending. + :type order: SpansSortOrder, optional + + :param type: The type of sorting algorithm. + :type type: SpansAggregateSortType, optional + """ + if aggregation is not unset: + kwargs["aggregation"] = aggregation + if metric is not unset: + kwargs["metric"] = metric + if order is not unset: + kwargs["order"] = order + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_aggregate_sort_type.py b/datadog_api_client/v2/model/spans_aggregate_sort_type.py new file mode 100644 index 0000000000..448d164624 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregate_sort_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansAggregateSortType(ModelSimple): + """ + The type of sorting algorithm. + + :param value: If omitted defaults to "alphabetical". Must be one of ["alphabetical", "measure"]. + :type value: str + """ + + allowed_values = { + "alphabetical", + "measure", + } + ALPHABETICAL: ClassVar["SpansAggregateSortType"] + MEASURE: ClassVar["SpansAggregateSortType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansAggregateSortType.ALPHABETICAL = SpansAggregateSortType("alphabetical") +SpansAggregateSortType.MEASURE = SpansAggregateSortType("measure") diff --git a/datadog_api_client/v2/model/spans_aggregation_function.py b/datadog_api_client/v2/model/spans_aggregation_function.py new file mode 100644 index 0000000000..78ba188101 --- /dev/null +++ b/datadog_api_client/v2/model/spans_aggregation_function.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansAggregationFunction(ModelSimple): + """ + An aggregation function. + + :param value: Must be one of ["count", "cardinality", "pc75", "pc90", "pc95", "pc98", "pc99", "sum", "min", "max", "avg", "median"]. + :type value: str + """ + + allowed_values = { + "count", + "cardinality", + "pc75", + "pc90", + "pc95", + "pc98", + "pc99", + "sum", + "min", + "max", + "avg", + "median", + } + COUNT: ClassVar["SpansAggregationFunction"] + CARDINALITY: ClassVar["SpansAggregationFunction"] + PERCENTILE_75: ClassVar["SpansAggregationFunction"] + PERCENTILE_90: ClassVar["SpansAggregationFunction"] + PERCENTILE_95: ClassVar["SpansAggregationFunction"] + PERCENTILE_98: ClassVar["SpansAggregationFunction"] + PERCENTILE_99: ClassVar["SpansAggregationFunction"] + SUM: ClassVar["SpansAggregationFunction"] + MIN: ClassVar["SpansAggregationFunction"] + MAX: ClassVar["SpansAggregationFunction"] + AVG: ClassVar["SpansAggregationFunction"] + MEDIAN: ClassVar["SpansAggregationFunction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansAggregationFunction.COUNT = SpansAggregationFunction("count") +SpansAggregationFunction.CARDINALITY = SpansAggregationFunction("cardinality") +SpansAggregationFunction.PERCENTILE_75 = SpansAggregationFunction("pc75") +SpansAggregationFunction.PERCENTILE_90 = SpansAggregationFunction("pc90") +SpansAggregationFunction.PERCENTILE_95 = SpansAggregationFunction("pc95") +SpansAggregationFunction.PERCENTILE_98 = SpansAggregationFunction("pc98") +SpansAggregationFunction.PERCENTILE_99 = SpansAggregationFunction("pc99") +SpansAggregationFunction.SUM = SpansAggregationFunction("sum") +SpansAggregationFunction.MIN = SpansAggregationFunction("min") +SpansAggregationFunction.MAX = SpansAggregationFunction("max") +SpansAggregationFunction.AVG = SpansAggregationFunction("avg") +SpansAggregationFunction.MEDIAN = SpansAggregationFunction("median") diff --git a/datadog_api_client/v2/model/spans_attributes.py b/datadog_api_client/v2/model/spans_attributes.py new file mode 100644 index 0000000000..4dd9055059 --- /dev/null +++ b/datadog_api_client/v2/model/spans_attributes.py @@ -0,0 +1,160 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "custom": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "end_timestamp": (datetime,), + "env": (str,), + "host": (str,), + "ingestion_reason": (str,), + "parent_id": (str,), + "resource_hash": (str,), + "resource_name": (str,), + "retained_by": (str,), + "service": (str,), + "single_span": (bool,), + "span_id": (str,), + "start_timestamp": (datetime,), + "tags": ([str],), + "trace_id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "custom": "custom", + "end_timestamp": "end_timestamp", + "env": "env", + "host": "host", + "ingestion_reason": "ingestion_reason", + "parent_id": "parent_id", + "resource_hash": "resource_hash", + "resource_name": "resource_name", + "retained_by": "retained_by", + "service": "service", + "single_span": "single_span", + "span_id": "span_id", + "start_timestamp": "start_timestamp", + "tags": "tags", + "trace_id": "trace_id", + "type": "type", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, custom: Union[Dict[str, Any], UnsetType]=unset, end_timestamp: Union[datetime, UnsetType]=unset, env: Union[str, UnsetType]=unset, host: Union[str, UnsetType]=unset, ingestion_reason: Union[str, UnsetType]=unset, parent_id: Union[str, UnsetType]=unset, resource_hash: Union[str, UnsetType]=unset, resource_name: Union[str, UnsetType]=unset, retained_by: Union[str, UnsetType]=unset, service: Union[str, UnsetType]=unset, single_span: Union[bool, UnsetType]=unset, span_id: Union[str, UnsetType]=unset, start_timestamp: Union[datetime, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, trace_id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + JSON object containing all span attributes and their associated values. + + :param attributes: JSON object of attributes from your span. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param custom: JSON object of custom spans data. + :type custom: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param end_timestamp: End timestamp of your span. + :type end_timestamp: datetime, optional + + :param env: Name of the environment from where the spans are being sent. + :type env: str, optional + + :param host: Name of the machine from where the spans are being sent. + :type host: str, optional + + :param ingestion_reason: The reason why the span was ingested. + :type ingestion_reason: str, optional + + :param parent_id: Id of the span that's parent of this span. + :type parent_id: str, optional + + :param resource_hash: Unique identifier of the resource. + :type resource_hash: str, optional + + :param resource_name: The name of the resource. + :type resource_name: str, optional + + :param retained_by: The reason why the span was indexed. + :type retained_by: str, optional + + :param service: The name of the application or service generating the span events. + It is used to switch from APM to Logs, so make sure you define the same + value when you use both products. + :type service: str, optional + + :param single_span: Whether or not the span was collected as a stand-alone span. Always associated to "single_span" ingestion_reason if true. + :type single_span: bool, optional + + :param span_id: Id of the span. + :type span_id: str, optional + + :param start_timestamp: Start timestamp of your span. + :type start_timestamp: datetime, optional + + :param tags: Array of tags associated with your span. + :type tags: [str], optional + + :param trace_id: Id of the trace to which the span belongs. + :type trace_id: str, optional + + :param type: The type of the span. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if custom is not unset: + kwargs["custom"] = custom + if end_timestamp is not unset: + kwargs["end_timestamp"] = end_timestamp + if env is not unset: + kwargs["env"] = env + if host is not unset: + kwargs["host"] = host + if ingestion_reason is not unset: + kwargs["ingestion_reason"] = ingestion_reason + if parent_id is not unset: + kwargs["parent_id"] = parent_id + if resource_hash is not unset: + kwargs["resource_hash"] = resource_hash + if resource_name is not unset: + kwargs["resource_name"] = resource_name + if retained_by is not unset: + kwargs["retained_by"] = retained_by + if service is not unset: + kwargs["service"] = service + if single_span is not unset: + kwargs["single_span"] = single_span + if span_id is not unset: + kwargs["span_id"] = span_id + if start_timestamp is not unset: + kwargs["start_timestamp"] = start_timestamp + if tags is not unset: + kwargs["tags"] = tags + if trace_id is not unset: + kwargs["trace_id"] = trace_id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_compute.py b/datadog_api_client/v2/model/spans_compute.py new file mode 100644 index 0000000000..520b9d018a --- /dev/null +++ b/datadog_api_client/v2/model/spans_compute.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_aggregation_function import SpansAggregationFunction + from datadog_api_client.v2.model.spans_compute_type import SpansComputeType + +class SpansCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_aggregation_function import SpansAggregationFunction + from datadog_api_client.v2.model.spans_compute_type import SpansComputeType + return { + "aggregation": (SpansAggregationFunction,), + "interval": (str,), + "metric": (str,), + "type": (SpansComputeType,), + } + attribute_map = { + "aggregation": "aggregation", + "interval": "interval", + "metric": "metric", + "type": "type", + } + + def __init__(self_, aggregation: SpansAggregationFunction, interval: Union[str, UnsetType]=unset, metric: Union[str, UnsetType]=unset, type: Union[SpansComputeType, UnsetType]=unset, **kwargs): + """ + A compute rule to compute metrics or timeseries. + + :param aggregation: An aggregation function. + :type aggregation: SpansAggregationFunction + + :param interval: The time buckets' size (only used for type=timeseries) + Defaults to a resolution of 150 points. + :type interval: str, optional + + :param metric: The metric to use. + :type metric: str, optional + + :param type: The type of compute. + :type type: SpansComputeType, optional + """ + if interval is not unset: + kwargs["interval"] = interval + if metric is not unset: + kwargs["metric"] = metric + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + + self_.aggregation = aggregation diff --git a/datadog_api_client/v2/model/spans_compute_type.py b/datadog_api_client/v2/model/spans_compute_type.py new file mode 100644 index 0000000000..3f40fbad66 --- /dev/null +++ b/datadog_api_client/v2/model/spans_compute_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansComputeType(ModelSimple): + """ + The type of compute. + + :param value: If omitted defaults to "total". Must be one of ["timeseries", "total"]. + :type value: str + """ + + allowed_values = { + "timeseries", + "total", + } + TIMESERIES: ClassVar["SpansComputeType"] + TOTAL: ClassVar["SpansComputeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansComputeType.TIMESERIES = SpansComputeType("timeseries") +SpansComputeType.TOTAL = SpansComputeType("total") diff --git a/datadog_api_client/v2/model/spans_filter.py b/datadog_api_client/v2/model/spans_filter.py new file mode 100644 index 0000000000..2d0646e173 --- /dev/null +++ b/datadog_api_client/v2/model/spans_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + The spans filter used to index spans. + + :param query: The search query - following the `span search syntax `_. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_filter_create.py b/datadog_api_client/v2/model/spans_filter_create.py new file mode 100644 index 0000000000..f919d3e872 --- /dev/null +++ b/datadog_api_client/v2/model/spans_filter_create.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansFilterCreate(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: str, **kwargs): + """ + The spans filter. Spans matching this filter will be indexed and stored. + + :param query: The search query - following the `span search syntax `_. + :type query: str + """ + super().__init__(kwargs) + + + self_.query = query diff --git a/datadog_api_client/v2/model/spans_group_by.py b/datadog_api_client/v2/model/spans_group_by.py new file mode 100644 index 0000000000..e5e01708ec --- /dev/null +++ b/datadog_api_client/v2/model/spans_group_by.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_group_by_histogram import SpansGroupByHistogram + from datadog_api_client.v2.model.spans_group_by_missing import SpansGroupByMissing + from datadog_api_client.v2.model.spans_aggregate_sort import SpansAggregateSort + from datadog_api_client.v2.model.spans_group_by_total import SpansGroupByTotal + +class SpansGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_group_by_histogram import SpansGroupByHistogram + from datadog_api_client.v2.model.spans_group_by_missing import SpansGroupByMissing + from datadog_api_client.v2.model.spans_aggregate_sort import SpansAggregateSort + from datadog_api_client.v2.model.spans_group_by_total import SpansGroupByTotal + return { + "facet": (str,), + "histogram": (SpansGroupByHistogram,), + "limit": (int,), + "missing": (SpansGroupByMissing,), + "sort": (SpansAggregateSort,), + "total": (SpansGroupByTotal,), + } + attribute_map = { + "facet": "facet", + "histogram": "histogram", + "limit": "limit", + "missing": "missing", + "sort": "sort", + "total": "total", + } + + def __init__(self_, facet: str, histogram: Union[SpansGroupByHistogram, UnsetType]=unset, limit: Union[int, UnsetType]=unset, missing: Union[SpansGroupByMissing, str, float, UnsetType]=unset, sort: Union[SpansAggregateSort, UnsetType]=unset, total: Union[SpansGroupByTotal, bool, str, float, UnsetType]=unset, **kwargs): + """ + A group by rule. + + :param facet: The name of the facet to use (required). + :type facet: str + + :param histogram: Used to perform a histogram computation (only for measure facets). + Note: At most 100 buckets are allowed, the number of buckets is (max - min)/interval. + :type histogram: SpansGroupByHistogram, optional + + :param limit: The maximum buckets to return for this group by. + :type limit: int, optional + + :param missing: The value to use for spans that don't have the facet used to group by. + :type missing: SpansGroupByMissing, optional + + :param sort: A sort rule. + :type sort: SpansAggregateSort, optional + + :param total: A resulting object to put the given computes in over all the matching records. + :type total: SpansGroupByTotal, optional + """ + if histogram is not unset: + kwargs["histogram"] = histogram + if limit is not unset: + kwargs["limit"] = limit + if missing is not unset: + kwargs["missing"] = missing + if sort is not unset: + kwargs["sort"] = sort + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + + self_.facet = facet diff --git a/datadog_api_client/v2/model/spans_group_by_histogram.py b/datadog_api_client/v2/model/spans_group_by_histogram.py new file mode 100644 index 0000000000..5c4d146251 --- /dev/null +++ b/datadog_api_client/v2/model/spans_group_by_histogram.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansGroupByHistogram(ModelNormal): + @cached_property + def openapi_types(_): + return { + "interval": (float,), + "max": (float,), + "min": (float,), + } + attribute_map = { + "interval": "interval", + "max": "max", + "min": "min", + } + + def __init__(self_, interval: float, max: float, min: float, **kwargs): + """ + Used to perform a histogram computation (only for measure facets). + Note: At most 100 buckets are allowed, the number of buckets is (max - min)/interval. + + :param interval: The bin size of the histogram buckets. + :type interval: float + + :param max: The maximum value for the measure used in the histogram + (values greater than this one are filtered out). + :type max: float + + :param min: The minimum value for the measure used in the histogram + (values smaller than this one are filtered out). + :type min: float + """ + super().__init__(kwargs) + + + self_.interval = interval + self_.max = max + self_.min = min diff --git a/datadog_api_client/v2/model/spans_group_by_missing.py b/datadog_api_client/v2/model/spans_group_by_missing.py new file mode 100644 index 0000000000..7f44f8a4dc --- /dev/null +++ b/datadog_api_client/v2/model/spans_group_by_missing.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansGroupByMissing(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The value to use for spans that don't have the facet used to group by. + """ + 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 + return { + "oneOf": [ + str, + float, + ], + } diff --git a/datadog_api_client/v2/model/spans_group_by_total.py b/datadog_api_client/v2/model/spans_group_by_total.py new file mode 100644 index 0000000000..cdabeae2f8 --- /dev/null +++ b/datadog_api_client/v2/model/spans_group_by_total.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansGroupByTotal(ModelComposed): + + + + def __init__(self, **kwargs): + """ + A resulting object to put the given computes in over all the matching records. + """ + 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 + return { + "oneOf": [ + bool, + str, + float, + ], + } diff --git a/datadog_api_client/v2/model/spans_list_request.py b/datadog_api_client/v2/model/spans_list_request.py new file mode 100644 index 0000000000..b682654ff5 --- /dev/null +++ b/datadog_api_client/v2/model/spans_list_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_list_request_data import SpansListRequestData + +class SpansListRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_list_request_data import SpansListRequestData + return { + "data": (SpansListRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SpansListRequestData, UnsetType]=unset, **kwargs): + """ + The request for a spans list. + + :param data: The object containing the query content. + :type data: SpansListRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_list_request_attributes.py b/datadog_api_client/v2/model/spans_list_request_attributes.py new file mode 100644 index 0000000000..d039762229 --- /dev/null +++ b/datadog_api_client/v2/model/spans_list_request_attributes.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_query_filter import SpansQueryFilter + from datadog_api_client.v2.model.spans_query_options import SpansQueryOptions + from datadog_api_client.v2.model.spans_list_request_page import SpansListRequestPage + from datadog_api_client.v2.model.spans_sort import SpansSort + +class SpansListRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_query_filter import SpansQueryFilter + from datadog_api_client.v2.model.spans_query_options import SpansQueryOptions + from datadog_api_client.v2.model.spans_list_request_page import SpansListRequestPage + from datadog_api_client.v2.model.spans_sort import SpansSort + return { + "filter": (SpansQueryFilter,), + "options": (SpansQueryOptions,), + "page": (SpansListRequestPage,), + "sort": (SpansSort,), + } + attribute_map = { + "filter": "filter", + "options": "options", + "page": "page", + "sort": "sort", + } + + def __init__(self_, filter: Union[SpansQueryFilter, UnsetType]=unset, options: Union[SpansQueryOptions, UnsetType]=unset, page: Union[SpansListRequestPage, UnsetType]=unset, sort: Union[SpansSort, UnsetType]=unset, **kwargs): + """ + The object containing all the query parameters. + + :param filter: The search and filter query settings. + :type filter: SpansQueryFilter, optional + + :param options: Global query options that are used during the query. + Note: You should only supply timezone or time offset but not both otherwise the query will fail. + :type options: SpansQueryOptions, optional + + :param page: Paging attributes for listing spans. + :type page: SpansListRequestPage, optional + + :param sort: Sort parameters when querying spans. + :type sort: SpansSort, optional + """ + if filter is not unset: + kwargs["filter"] = filter + if options is not unset: + kwargs["options"] = options + if page is not unset: + kwargs["page"] = page + if sort is not unset: + kwargs["sort"] = sort + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_list_request_data.py b/datadog_api_client/v2/model/spans_list_request_data.py new file mode 100644 index 0000000000..222d3e71f9 --- /dev/null +++ b/datadog_api_client/v2/model/spans_list_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_list_request_attributes import SpansListRequestAttributes + from datadog_api_client.v2.model.spans_list_request_type import SpansListRequestType + +class SpansListRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_list_request_attributes import SpansListRequestAttributes + from datadog_api_client.v2.model.spans_list_request_type import SpansListRequestType + return { + "attributes": (SpansListRequestAttributes,), + "type": (SpansListRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[SpansListRequestAttributes, UnsetType]=unset, type: Union[SpansListRequestType, UnsetType]=unset, **kwargs): + """ + The object containing the query content. + + :param attributes: The object containing all the query parameters. + :type attributes: SpansListRequestAttributes, optional + + :param type: The type of resource. The value should always be search_request. + :type type: SpansListRequestType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_list_request_page.py b/datadog_api_client/v2/model/spans_list_request_page.py new file mode 100644 index 0000000000..1bc0226921 --- /dev/null +++ b/datadog_api_client/v2/model/spans_list_request_page.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansListRequestPage(ModelNormal): + validations = { + "limit": { + "inclusive_maximum": 1000, + }, + } + @cached_property + def openapi_types(_): + return { + "cursor": (str,), + "limit": (int,), + } + attribute_map = { + "cursor": "cursor", + "limit": "limit", + } + + def __init__(self_, cursor: Union[str, UnsetType]=unset, limit: Union[int, UnsetType]=unset, **kwargs): + """ + Paging attributes for listing spans. + + :param cursor: List following results with a cursor provided in the previous query. + :type cursor: str, optional + + :param limit: Maximum number of spans in the response. + :type limit: int, optional + """ + if cursor is not unset: + kwargs["cursor"] = cursor + if limit is not unset: + kwargs["limit"] = limit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_list_request_type.py b/datadog_api_client/v2/model/spans_list_request_type.py new file mode 100644 index 0000000000..564df7ebeb --- /dev/null +++ b/datadog_api_client/v2/model/spans_list_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansListRequestType(ModelSimple): + """ + The type of resource. The value should always be search_request. + + :param value: If omitted defaults to "search_request". Must be one of ["search_request"]. + :type value: str + """ + + allowed_values = { + "search_request", + } + SEARCH_REQUEST: ClassVar["SpansListRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansListRequestType.SEARCH_REQUEST = SpansListRequestType("search_request") diff --git a/datadog_api_client/v2/model/spans_list_response.py b/datadog_api_client/v2/model/spans_list_response.py new file mode 100644 index 0000000000..70873a6a32 --- /dev/null +++ b/datadog_api_client/v2/model/spans_list_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.span import Span + from datadog_api_client.v2.model.spans_list_response_links import SpansListResponseLinks + from datadog_api_client.v2.model.spans_list_response_metadata import SpansListResponseMetadata + +class SpansListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.span import Span + from datadog_api_client.v2.model.spans_list_response_links import SpansListResponseLinks + from datadog_api_client.v2.model.spans_list_response_metadata import SpansListResponseMetadata + return { + "data": ([Span],), + "links": (SpansListResponseLinks,), + "meta": (SpansListResponseMetadata,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[Span], UnsetType]=unset, links: Union[SpansListResponseLinks, UnsetType]=unset, meta: Union[SpansListResponseMetadata, UnsetType]=unset, **kwargs): + """ + Response object with all spans matching the request and pagination information. + + :param data: Array of spans matching the request. + :type data: [Span], optional + + :param links: Links attributes. + :type links: SpansListResponseLinks, optional + + :param meta: The metadata associated with a request. + :type meta: SpansListResponseMetadata, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_list_response_links.py b/datadog_api_client/v2/model/spans_list_response_links.py new file mode 100644 index 0000000000..5618f7e6f0 --- /dev/null +++ b/datadog_api_client/v2/model/spans_list_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansListResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next": (str,), + } + attribute_map = { + "next": "next", + } + + def __init__(self_, next: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param next: Link for the next set of results. Note that the request can also be made using the + POST endpoint. + :type next: str, optional + """ + if next is not unset: + kwargs["next"] = next + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_list_response_metadata.py b/datadog_api_client/v2/model/spans_list_response_metadata.py new file mode 100644 index 0000000000..5d4e0819de --- /dev/null +++ b/datadog_api_client/v2/model/spans_list_response_metadata.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_response_metadata_page import SpansResponseMetadataPage + from datadog_api_client.v2.model.spans_aggregate_response_status import SpansAggregateResponseStatus + from datadog_api_client.v2.model.spans_warning import SpansWarning + +class SpansListResponseMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_response_metadata_page import SpansResponseMetadataPage + from datadog_api_client.v2.model.spans_aggregate_response_status import SpansAggregateResponseStatus + from datadog_api_client.v2.model.spans_warning import SpansWarning + return { + "elapsed": (int,), + "page": (SpansResponseMetadataPage,), + "request_id": (str,), + "status": (SpansAggregateResponseStatus,), + "warnings": ([SpansWarning],), + } + attribute_map = { + "elapsed": "elapsed", + "page": "page", + "request_id": "request_id", + "status": "status", + "warnings": "warnings", + } + + def __init__(self_, elapsed: Union[int, UnsetType]=unset, page: Union[SpansResponseMetadataPage, UnsetType]=unset, request_id: Union[str, UnsetType]=unset, status: Union[SpansAggregateResponseStatus, UnsetType]=unset, warnings: Union[List[SpansWarning], UnsetType]=unset, **kwargs): + """ + The metadata associated with a request. + + :param elapsed: The time elapsed in milliseconds. + :type elapsed: int, optional + + :param page: Paging attributes. + :type page: SpansResponseMetadataPage, optional + + :param request_id: The identifier of the request. + :type request_id: str, optional + + :param status: The status of the response. + :type status: SpansAggregateResponseStatus, optional + + :param warnings: A list of warnings (non fatal errors) encountered, partial results might be returned if + warnings are present in the response. + :type warnings: [SpansWarning], optional + """ + if elapsed is not unset: + kwargs["elapsed"] = elapsed + if page is not unset: + kwargs["page"] = page + if request_id is not unset: + kwargs["request_id"] = request_id + if status is not unset: + kwargs["status"] = status + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_compute.py b/datadog_api_client/v2/model/spans_metric_compute.py new file mode 100644 index 0000000000..3a7f2555c4 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_compute.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_compute_aggregation_type import SpansMetricComputeAggregationType + +class SpansMetricCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_compute_aggregation_type import SpansMetricComputeAggregationType + return { + "aggregation_type": (SpansMetricComputeAggregationType,), + "include_percentiles": (bool,), + "path": (str,), + } + attribute_map = { + "aggregation_type": "aggregation_type", + "include_percentiles": "include_percentiles", + "path": "path", + } + + def __init__(self_, aggregation_type: SpansMetricComputeAggregationType, include_percentiles: Union[bool, UnsetType]=unset, path: Union[str, UnsetType]=unset, **kwargs): + """ + The compute rule to compute the span-based metric. + + :param aggregation_type: The type of aggregation to use. + :type aggregation_type: SpansMetricComputeAggregationType + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when the ``aggregation_type`` is ``distribution``. + :type include_percentiles: bool, optional + + :param path: The path to the value the span-based metric will aggregate on (only used if the aggregation type is a "distribution"). + :type path: str, optional + """ + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + if path is not unset: + kwargs["path"] = path + super().__init__(kwargs) + + + self_.aggregation_type = aggregation_type diff --git a/datadog_api_client/v2/model/spans_metric_compute_aggregation_type.py b/datadog_api_client/v2/model/spans_metric_compute_aggregation_type.py new file mode 100644 index 0000000000..4ab5742e44 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_compute_aggregation_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansMetricComputeAggregationType(ModelSimple): + """ + The type of aggregation to use. + + :param value: Must be one of ["count", "distribution"]. + :type value: str + """ + + allowed_values = { + "count", + "distribution", + } + COUNT: ClassVar["SpansMetricComputeAggregationType"] + DISTRIBUTION: ClassVar["SpansMetricComputeAggregationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansMetricComputeAggregationType.COUNT = SpansMetricComputeAggregationType("count") +SpansMetricComputeAggregationType.DISTRIBUTION = SpansMetricComputeAggregationType("distribution") diff --git a/datadog_api_client/v2/model/spans_metric_create_attributes.py b/datadog_api_client/v2/model/spans_metric_create_attributes.py new file mode 100644 index 0000000000..d48e6f73a7 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_create_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_compute import SpansMetricCompute + from datadog_api_client.v2.model.spans_metric_filter import SpansMetricFilter + from datadog_api_client.v2.model.spans_metric_group_by import SpansMetricGroupBy + +class SpansMetricCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_compute import SpansMetricCompute + from datadog_api_client.v2.model.spans_metric_filter import SpansMetricFilter + from datadog_api_client.v2.model.spans_metric_group_by import SpansMetricGroupBy + return { + "compute": (SpansMetricCompute,), + "filter": (SpansMetricFilter,), + "group_by": ([SpansMetricGroupBy],), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + } + + def __init__(self_, compute: SpansMetricCompute, filter: Union[SpansMetricFilter, UnsetType]=unset, group_by: Union[List[SpansMetricGroupBy], UnsetType]=unset, **kwargs): + """ + The object describing the Datadog span-based metric to create. + + :param compute: The compute rule to compute the span-based metric. + :type compute: SpansMetricCompute + + :param filter: The span-based metric filter. Spans matching this filter will be aggregated in this metric. + :type filter: SpansMetricFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [SpansMetricGroupBy], optional + """ + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + + self_.compute = compute diff --git a/datadog_api_client/v2/model/spans_metric_create_data.py b/datadog_api_client/v2/model/spans_metric_create_data.py new file mode 100644 index 0000000000..d28bcf7b37 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_create_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_create_attributes import SpansMetricCreateAttributes + from datadog_api_client.v2.model.spans_metric_type import SpansMetricType + +class SpansMetricCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_create_attributes import SpansMetricCreateAttributes + from datadog_api_client.v2.model.spans_metric_type import SpansMetricType + return { + "attributes": (SpansMetricCreateAttributes,), + "id": (str,), + "type": (SpansMetricType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SpansMetricCreateAttributes, id: str, type: SpansMetricType, **kwargs): + """ + The new span-based metric properties. + + :param attributes: The object describing the Datadog span-based metric to create. + :type attributes: SpansMetricCreateAttributes + + :param id: The name of the span-based metric. + :type id: str + + :param type: The type of resource. The value should always be spans_metrics. + :type type: SpansMetricType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/spans_metric_create_request.py b/datadog_api_client/v2/model/spans_metric_create_request.py new file mode 100644 index 0000000000..30c784b613 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_create_data import SpansMetricCreateData + +class SpansMetricCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_create_data import SpansMetricCreateData + return { + "data": (SpansMetricCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SpansMetricCreateData, **kwargs): + """ + The new span-based metric body. + + :param data: The new span-based metric properties. + :type data: SpansMetricCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/spans_metric_filter.py b/datadog_api_client/v2/model/spans_metric_filter.py new file mode 100644 index 0000000000..e57407b0b0 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansMetricFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + The span-based metric filter. Spans matching this filter will be aggregated in this metric. + + :param query: The search query - following the span search syntax. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_group_by.py b/datadog_api_client/v2/model/spans_metric_group_by.py new file mode 100644 index 0000000000..000196e035 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_group_by.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansMetricGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "path": (str,), + "tag_name": (str,), + } + attribute_map = { + "path": "path", + "tag_name": "tag_name", + } + + def __init__(self_, path: str, tag_name: Union[str, UnsetType]=unset, **kwargs): + """ + A group by rule. + + :param path: The path to the value the span-based metric will be aggregated over. + :type path: str + + :param tag_name: Eventual name of the tag that gets created. By default, the path attribute is used as the tag name. + :type tag_name: str, optional + """ + if tag_name is not unset: + kwargs["tag_name"] = tag_name + super().__init__(kwargs) + + + self_.path = path diff --git a/datadog_api_client/v2/model/spans_metric_response.py b/datadog_api_client/v2/model/spans_metric_response.py new file mode 100644 index 0000000000..ee75d831e0 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_response_data import SpansMetricResponseData + +class SpansMetricResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_response_data import SpansMetricResponseData + return { + "data": (SpansMetricResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SpansMetricResponseData, UnsetType]=unset, **kwargs): + """ + The span-based metric object. + + :param data: The span-based metric properties. + :type data: SpansMetricResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_response_attributes.py b/datadog_api_client/v2/model/spans_metric_response_attributes.py new file mode 100644 index 0000000000..3b5e67de87 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_response_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_response_compute import SpansMetricResponseCompute + from datadog_api_client.v2.model.spans_metric_response_filter import SpansMetricResponseFilter + from datadog_api_client.v2.model.spans_metric_response_group_by import SpansMetricResponseGroupBy + +class SpansMetricResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_response_compute import SpansMetricResponseCompute + from datadog_api_client.v2.model.spans_metric_response_filter import SpansMetricResponseFilter + from datadog_api_client.v2.model.spans_metric_response_group_by import SpansMetricResponseGroupBy + return { + "compute": (SpansMetricResponseCompute,), + "filter": (SpansMetricResponseFilter,), + "group_by": ([SpansMetricResponseGroupBy],), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + } + + def __init__(self_, compute: Union[SpansMetricResponseCompute, UnsetType]=unset, filter: Union[SpansMetricResponseFilter, UnsetType]=unset, group_by: Union[List[SpansMetricResponseGroupBy], UnsetType]=unset, **kwargs): + """ + The object describing a Datadog span-based metric. + + :param compute: The compute rule to compute the span-based metric. + :type compute: SpansMetricResponseCompute, optional + + :param filter: The span-based metric filter. Spans matching this filter will be aggregated in this metric. + :type filter: SpansMetricResponseFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [SpansMetricResponseGroupBy], optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_response_compute.py b/datadog_api_client/v2/model/spans_metric_response_compute.py new file mode 100644 index 0000000000..7f602852e1 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_response_compute.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_compute_aggregation_type import SpansMetricComputeAggregationType + +class SpansMetricResponseCompute(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_compute_aggregation_type import SpansMetricComputeAggregationType + return { + "aggregation_type": (SpansMetricComputeAggregationType,), + "include_percentiles": (bool,), + "path": (str,), + } + attribute_map = { + "aggregation_type": "aggregation_type", + "include_percentiles": "include_percentiles", + "path": "path", + } + + def __init__(self_, aggregation_type: Union[SpansMetricComputeAggregationType, UnsetType]=unset, include_percentiles: Union[bool, UnsetType]=unset, path: Union[str, UnsetType]=unset, **kwargs): + """ + The compute rule to compute the span-based metric. + + :param aggregation_type: The type of aggregation to use. + :type aggregation_type: SpansMetricComputeAggregationType, optional + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when the ``aggregation_type`` is ``distribution``. + :type include_percentiles: bool, optional + + :param path: The path to the value the span-based metric will aggregate on (only used if the aggregation type is a "distribution"). + :type path: str, optional + """ + if aggregation_type is not unset: + kwargs["aggregation_type"] = aggregation_type + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + if path is not unset: + kwargs["path"] = path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_response_data.py b/datadog_api_client/v2/model/spans_metric_response_data.py new file mode 100644 index 0000000000..18c5dffe35 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_response_attributes import SpansMetricResponseAttributes + from datadog_api_client.v2.model.spans_metric_type import SpansMetricType + +class SpansMetricResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_response_attributes import SpansMetricResponseAttributes + from datadog_api_client.v2.model.spans_metric_type import SpansMetricType + return { + "attributes": (SpansMetricResponseAttributes,), + "id": (str,), + "type": (SpansMetricType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SpansMetricResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SpansMetricType, UnsetType]=unset, **kwargs): + """ + The span-based metric properties. + + :param attributes: The object describing a Datadog span-based metric. + :type attributes: SpansMetricResponseAttributes, optional + + :param id: The name of the span-based metric. + :type id: str, optional + + :param type: The type of resource. The value should always be spans_metrics. + :type type: SpansMetricType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_response_filter.py b/datadog_api_client/v2/model/spans_metric_response_filter.py new file mode 100644 index 0000000000..4bba135e77 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_response_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansMetricResponseFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "query": (str,), + } + attribute_map = { + "query": "query", + } + + def __init__(self_, query: Union[str, UnsetType]=unset, **kwargs): + """ + The span-based metric filter. Spans matching this filter will be aggregated in this metric. + + :param query: The search query - following the span search syntax. + :type query: str, optional + """ + if query is not unset: + kwargs["query"] = query + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_response_group_by.py b/datadog_api_client/v2/model/spans_metric_response_group_by.py new file mode 100644 index 0000000000..4a6cbb27ca --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_response_group_by.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansMetricResponseGroupBy(ModelNormal): + @cached_property + def openapi_types(_): + return { + "path": (str,), + "tag_name": (str,), + } + attribute_map = { + "path": "path", + "tag_name": "tag_name", + } + + def __init__(self_, path: Union[str, UnsetType]=unset, tag_name: Union[str, UnsetType]=unset, **kwargs): + """ + A group by rule. + + :param path: The path to the value the span-based metric will be aggregated over. + :type path: str, optional + + :param tag_name: Eventual name of the tag that gets created. By default, the path attribute is used as the tag name. + :type tag_name: str, optional + """ + if path is not unset: + kwargs["path"] = path + if tag_name is not unset: + kwargs["tag_name"] = tag_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_type.py b/datadog_api_client/v2/model/spans_metric_type.py new file mode 100644 index 0000000000..25f67f0f0d --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansMetricType(ModelSimple): + """ + The type of resource. The value should always be spans_metrics. + + :param value: If omitted defaults to "spans_metrics". Must be one of ["spans_metrics"]. + :type value: str + """ + + allowed_values = { + "spans_metrics", + } + SPANS_METRICS: ClassVar["SpansMetricType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansMetricType.SPANS_METRICS = SpansMetricType("spans_metrics") diff --git a/datadog_api_client/v2/model/spans_metric_update_attributes.py b/datadog_api_client/v2/model/spans_metric_update_attributes.py new file mode 100644 index 0000000000..c9b58a0104 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_update_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_update_compute import SpansMetricUpdateCompute + from datadog_api_client.v2.model.spans_metric_filter import SpansMetricFilter + from datadog_api_client.v2.model.spans_metric_group_by import SpansMetricGroupBy + +class SpansMetricUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_update_compute import SpansMetricUpdateCompute + from datadog_api_client.v2.model.spans_metric_filter import SpansMetricFilter + from datadog_api_client.v2.model.spans_metric_group_by import SpansMetricGroupBy + return { + "compute": (SpansMetricUpdateCompute,), + "filter": (SpansMetricFilter,), + "group_by": ([SpansMetricGroupBy],), + } + attribute_map = { + "compute": "compute", + "filter": "filter", + "group_by": "group_by", + } + + def __init__(self_, compute: Union[SpansMetricUpdateCompute, UnsetType]=unset, filter: Union[SpansMetricFilter, UnsetType]=unset, group_by: Union[List[SpansMetricGroupBy], UnsetType]=unset, **kwargs): + """ + The span-based metric properties that will be updated. + + :param compute: The compute rule to compute the span-based metric. + :type compute: SpansMetricUpdateCompute, optional + + :param filter: The span-based metric filter. Spans matching this filter will be aggregated in this metric. + :type filter: SpansMetricFilter, optional + + :param group_by: The rules for the group by. + :type group_by: [SpansMetricGroupBy], optional + """ + if compute is not unset: + kwargs["compute"] = compute + if filter is not unset: + kwargs["filter"] = filter + if group_by is not unset: + kwargs["group_by"] = group_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_update_compute.py b/datadog_api_client/v2/model/spans_metric_update_compute.py new file mode 100644 index 0000000000..5c93031ad3 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_update_compute.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansMetricUpdateCompute(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_percentiles": (bool,), + } + attribute_map = { + "include_percentiles": "include_percentiles", + } + + def __init__(self_, include_percentiles: Union[bool, UnsetType]=unset, **kwargs): + """ + The compute rule to compute the span-based metric. + + :param include_percentiles: Toggle to include or exclude percentile aggregations for distribution metrics. + Only present when the ``aggregation_type`` is ``distribution``. + :type include_percentiles: bool, optional + """ + if include_percentiles is not unset: + kwargs["include_percentiles"] = include_percentiles + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_metric_update_data.py b/datadog_api_client/v2/model/spans_metric_update_data.py new file mode 100644 index 0000000000..77c2c9631f --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_update_attributes import SpansMetricUpdateAttributes + from datadog_api_client.v2.model.spans_metric_type import SpansMetricType + +class SpansMetricUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_update_attributes import SpansMetricUpdateAttributes + from datadog_api_client.v2.model.spans_metric_type import SpansMetricType + return { + "attributes": (SpansMetricUpdateAttributes,), + "type": (SpansMetricType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SpansMetricUpdateAttributes, type: SpansMetricType, **kwargs): + """ + The new span-based metric properties. + + :param attributes: The span-based metric properties that will be updated. + :type attributes: SpansMetricUpdateAttributes + + :param type: The type of resource. The value should always be spans_metrics. + :type type: SpansMetricType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/spans_metric_update_request.py b/datadog_api_client/v2/model/spans_metric_update_request.py new file mode 100644 index 0000000000..89174460a5 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metric_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_update_data import SpansMetricUpdateData + +class SpansMetricUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_update_data import SpansMetricUpdateData + return { + "data": (SpansMetricUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SpansMetricUpdateData, **kwargs): + """ + The new span-based metric body. + + :param data: The new span-based metric properties. + :type data: SpansMetricUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/spans_metrics_response.py b/datadog_api_client/v2/model/spans_metrics_response.py new file mode 100644 index 0000000000..b5aa4a9802 --- /dev/null +++ b/datadog_api_client/v2/model/spans_metrics_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spans_metric_response_data import SpansMetricResponseData + +class SpansMetricsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spans_metric_response_data import SpansMetricResponseData + return { + "data": ([SpansMetricResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SpansMetricResponseData], UnsetType]=unset, **kwargs): + """ + All the available span-based metric objects. + + :param data: A list of span-based metric objects. + :type data: [SpansMetricResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_query_filter.py b/datadog_api_client/v2/model/spans_query_filter.py new file mode 100644 index 0000000000..ce034927ac --- /dev/null +++ b/datadog_api_client/v2/model/spans_query_filter.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansQueryFilter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (str,), + "query": (str,), + "to": (str,), + } + attribute_map = { + "_from": "from", + "query": "query", + "to": "to", + } + + def __init__(self_, _from: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, to: Union[str, UnsetType]=unset, **kwargs): + """ + The search and filter query settings. + + :param _from: The minimum time for the requested spans, supports date-time ISO8601, date math, and regular timestamps (milliseconds). + :type _from: str, optional + + :param query: The search query - following the span search syntax. + :type query: str, optional + + :param to: The maximum time for the requested spans, supports date-time ISO8601, date math, and regular timestamps (milliseconds). + :type to: str, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if query is not unset: + kwargs["query"] = query + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_query_options.py b/datadog_api_client/v2/model/spans_query_options.py new file mode 100644 index 0000000000..04e30b2c15 --- /dev/null +++ b/datadog_api_client/v2/model/spans_query_options.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansQueryOptions(ModelNormal): + @cached_property + def openapi_types(_): + return { + "time_offset": (int,), + "timezone": (str,), + } + attribute_map = { + "time_offset": "timeOffset", + "timezone": "timezone", + } + + def __init__(self_, time_offset: Union[int, UnsetType]=unset, timezone: Union[str, UnsetType]=unset, **kwargs): + """ + Global query options that are used during the query. + Note: You should only supply timezone or time offset but not both otherwise the query will fail. + + :param time_offset: The time offset (in seconds) to apply to the query. + :type time_offset: int, optional + + :param timezone: The timezone can be specified as GMT, UTC, an offset from UTC (like UTC+1), or as a Timezone Database identifier (like America/New_York). + :type timezone: str, optional + """ + if time_offset is not unset: + kwargs["time_offset"] = time_offset + if timezone is not unset: + kwargs["timezone"] = timezone + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_response_metadata_page.py b/datadog_api_client/v2/model/spans_response_metadata_page.py new file mode 100644 index 0000000000..c8ef3775ee --- /dev/null +++ b/datadog_api_client/v2/model/spans_response_metadata_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansResponseMetadataPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after": (str,), + } + attribute_map = { + "after": "after", + } + + def __init__(self_, after: Union[str, UnsetType]=unset, **kwargs): + """ + Paging attributes. + + :param after: The cursor to use to get the next results, if any. To make the next request, use the same + parameters with the addition of the ``page[cursor]``. + :type after: str, optional + """ + if after is not unset: + kwargs["after"] = after + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spans_sort.py b/datadog_api_client/v2/model/spans_sort.py new file mode 100644 index 0000000000..5aa10c85b3 --- /dev/null +++ b/datadog_api_client/v2/model/spans_sort.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansSort(ModelSimple): + """ + Sort parameters when querying spans. + + :param value: Must be one of ["timestamp", "-timestamp"]. + :type value: str + """ + + allowed_values = { + "timestamp", + "-timestamp", + } + TIMESTAMP_ASCENDING: ClassVar["SpansSort"] + TIMESTAMP_DESCENDING: ClassVar["SpansSort"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansSort.TIMESTAMP_ASCENDING = SpansSort("timestamp") +SpansSort.TIMESTAMP_DESCENDING = SpansSort("-timestamp") diff --git a/datadog_api_client/v2/model/spans_sort_order.py b/datadog_api_client/v2/model/spans_sort_order.py new file mode 100644 index 0000000000..2f4eafbfcb --- /dev/null +++ b/datadog_api_client/v2/model/spans_sort_order.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansSortOrder(ModelSimple): + """ + The order to use, ascending or descending. + + :param value: Must be one of ["asc", "desc"]. + :type value: str + """ + + allowed_values = { + "asc", + "desc", + } + ASCENDING: ClassVar["SpansSortOrder"] + DESCENDING: ClassVar["SpansSortOrder"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansSortOrder.ASCENDING = SpansSortOrder("asc") +SpansSortOrder.DESCENDING = SpansSortOrder("desc") diff --git a/datadog_api_client/v2/model/spans_type.py b/datadog_api_client/v2/model/spans_type.py new file mode 100644 index 0000000000..2c5a36ba9f --- /dev/null +++ b/datadog_api_client/v2/model/spans_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpansType(ModelSimple): + """ + Type of the span. + + :param value: If omitted defaults to "spans". Must be one of ["spans"]. + :type value: str + """ + + allowed_values = { + "spans", + } + SPANS: ClassVar["SpansType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpansType.SPANS = SpansType("spans") diff --git a/datadog_api_client/v2/model/spans_warning.py b/datadog_api_client/v2/model/spans_warning.py new file mode 100644 index 0000000000..d1d80e24fe --- /dev/null +++ b/datadog_api_client/v2/model/spans_warning.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SpansWarning(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "detail": (str,), + "title": (str,), + } + attribute_map = { + "code": "code", + "detail": "detail", + "title": "title", + } + + def __init__(self_, code: Union[str, UnsetType]=unset, detail: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + A warning message indicating something that went wrong with the query. + + :param code: A unique code for this type of warning. + :type code: str, optional + + :param detail: A detailed explanation of this specific warning. + :type detail: str, optional + + :param title: A short human-readable summary of the warning. + :type title: str, optional + """ + if code is not unset: + kwargs["code"] = code + if detail is not unset: + kwargs["detail"] = detail + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spec.py b/datadog_api_client/v2/model/spec.py new file mode 100644 index 0000000000..df8456840a --- /dev/null +++ b/datadog_api_client/v2/model/spec.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.annotation import Annotation + from datadog_api_client.v2.model.connection_env import ConnectionEnv + from datadog_api_client.v2.model.input_schema import InputSchema + from datadog_api_client.v2.model.output_schema import OutputSchema + from datadog_api_client.v2.model.step import Step + from datadog_api_client.v2.model.trigger import Trigger + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class Spec(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.annotation import Annotation + from datadog_api_client.v2.model.connection_env import ConnectionEnv + from datadog_api_client.v2.model.input_schema import InputSchema + from datadog_api_client.v2.model.output_schema import OutputSchema + from datadog_api_client.v2.model.step import Step + from datadog_api_client.v2.model.trigger import Trigger + return { + "annotations": ([Annotation],), + "connection_envs": ([ConnectionEnv],), + "handle": (str,), + "input_schema": (InputSchema,), + "output_schema": (OutputSchema,), + "steps": ([Step],), + "triggers": ([Trigger],), + } + attribute_map = { + "annotations": "annotations", + "connection_envs": "connectionEnvs", + "handle": "handle", + "input_schema": "inputSchema", + "output_schema": "outputSchema", + "steps": "steps", + "triggers": "triggers", + } + + def __init__(self_, annotations: Union[List[Annotation], UnsetType]=unset, connection_envs: Union[List[ConnectionEnv], UnsetType]=unset, handle: Union[str, UnsetType]=unset, input_schema: Union[InputSchema, UnsetType]=unset, output_schema: Union[OutputSchema, UnsetType]=unset, steps: Union[List[Step], UnsetType]=unset, triggers: Union[List[Union[Trigger, AgentTriggerWrapper, APITriggerWrapper, AppTriggerWrapper, CaseTriggerWrapper, ChangeEventTriggerWrapper, DatabaseMonitoringTriggerWrapper, DatastoreTriggerWrapper, DashboardTriggerWrapper, FormTriggerWrapper, GithubWebhookTriggerWrapper, IncidentTriggerWrapper, MonitorTriggerWrapper, NotebookTriggerWrapper, OnCallTriggerWrapper, ScheduleTriggerWrapper, SecurityTriggerWrapper, SelfServiceTriggerWrapper, SlackTriggerWrapper, SoftwareCatalogTriggerWrapper, WorkflowTriggerWrapper]], UnsetType]=unset, **kwargs): + """ + A complete Workflow Automation definition, including its triggers, steps, and connections. + + :param annotations: A list of annotations used in the workflow. These are like sticky notes for your workflow! + :type annotations: [Annotation], optional + + :param connection_envs: A list of connections or connection groups used in the workflow. + :type connection_envs: [ConnectionEnv], optional + + :param handle: Unique identifier used to trigger workflows automatically in Datadog. + :type handle: str, optional + + :param input_schema: A list of input parameters for the workflow. These can be used as dynamic runtime values in your workflow. + :type input_schema: InputSchema, optional + + :param output_schema: A list of output parameters for the workflow. + :type output_schema: OutputSchema, optional + + :param steps: A ``Step`` is a sub-component of a workflow. Each ``Step`` performs an action. + :type steps: [Step], optional + + :param triggers: The list of triggers that activate this workflow. At least one trigger is required, and each trigger type may appear at most once. + :type triggers: [Trigger], optional + """ + if annotations is not unset: + kwargs["annotations"] = annotations + if connection_envs is not unset: + kwargs["connection_envs"] = connection_envs + if handle is not unset: + kwargs["handle"] = handle + if input_schema is not unset: + kwargs["input_schema"] = input_schema + if output_schema is not unset: + kwargs["output_schema"] = output_schema + if steps is not unset: + kwargs["steps"] = steps + if triggers is not unset: + kwargs["triggers"] = triggers + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/spec_version.py b/datadog_api_client/v2/model/spec_version.py new file mode 100644 index 0000000000..8091eb558c --- /dev/null +++ b/datadog_api_client/v2/model/spec_version.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SpecVersion(ModelSimple): + """ + The version of the CycloneDX specification a BOM conforms to. + + :param value: Must be one of ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5"]. + :type value: str + """ + + allowed_values = { + "1.0", + "1.1", + "1.2", + "1.3", + "1.4", + "1.5", + } + ONE_ZERO: ClassVar["SpecVersion"] + ONE_ONE: ClassVar["SpecVersion"] + ONE_TWO: ClassVar["SpecVersion"] + ONE_THREE: ClassVar["SpecVersion"] + ONE_FOUR: ClassVar["SpecVersion"] + ONE_FIVE: ClassVar["SpecVersion"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SpecVersion.ONE_ZERO = SpecVersion("1.0") +SpecVersion.ONE_ONE = SpecVersion("1.1") +SpecVersion.ONE_TWO = SpecVersion("1.2") +SpecVersion.ONE_THREE = SpecVersion("1.3") +SpecVersion.ONE_FOUR = SpecVersion("1.4") +SpecVersion.ONE_FIVE = SpecVersion("1.5") diff --git a/datadog_api_client/v2/model/split_api_key.py b/datadog_api_client/v2/model/split_api_key.py new file mode 100644 index 0000000000..c89369bad6 --- /dev/null +++ b/datadog_api_client/v2/model/split_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.split_api_key_type import SplitAPIKeyType + +class SplitAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.split_api_key_type import SplitAPIKeyType + return { + "api_key": (str,), + "type": (SplitAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, api_key: str, type: SplitAPIKeyType, **kwargs): + """ + The definition of the ``SplitAPIKey`` object. + + :param api_key: The ``SplitAPIKey`` ``api_key``. + :type api_key: str + + :param type: The definition of the ``SplitAPIKey`` object. + :type type: SplitAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_key = api_key + self_.type = type diff --git a/datadog_api_client/v2/model/split_api_key_type.py b/datadog_api_client/v2/model/split_api_key_type.py new file mode 100644 index 0000000000..e6a40c2763 --- /dev/null +++ b/datadog_api_client/v2/model/split_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SplitAPIKeyType(ModelSimple): + """ + The definition of the `SplitAPIKey` object. + + :param value: If omitted defaults to "SplitAPIKey". Must be one of ["SplitAPIKey"]. + :type value: str + """ + + allowed_values = { + "SplitAPIKey", + } + SPLITAPIKEY: ClassVar["SplitAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SplitAPIKeyType.SPLITAPIKEY = SplitAPIKeyType("SplitAPIKey") diff --git a/datadog_api_client/v2/model/split_api_key_update.py b/datadog_api_client/v2/model/split_api_key_update.py new file mode 100644 index 0000000000..91768402cf --- /dev/null +++ b/datadog_api_client/v2/model/split_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.split_api_key_type import SplitAPIKeyType + +class SplitAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.split_api_key_type import SplitAPIKeyType + return { + "api_key": (str,), + "type": (SplitAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, type: SplitAPIKeyType, api_key: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``SplitAPIKey`` object. + + :param api_key: The ``SplitAPIKeyUpdate`` ``api_key``. + :type api_key: str, optional + + :param type: The definition of the ``SplitAPIKey`` object. + :type type: SplitAPIKeyType + """ + if api_key is not unset: + kwargs["api_key"] = api_key + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/split_credentials.py b/datadog_api_client/v2/model/split_credentials.py new file mode 100644 index 0000000000..56990870c9 --- /dev/null +++ b/datadog_api_client/v2/model/split_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SplitCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``SplitCredentials`` object. + + :param api_key: The `SplitAPIKey` `api_key`. + :type api_key: str + + :param type: The definition of the `SplitAPIKey` object. + :type type: SplitAPIKeyType + """ + 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.split_api_key import SplitAPIKey + return { + "oneOf": [ + SplitAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/split_credentials_update.py b/datadog_api_client/v2/model/split_credentials_update.py new file mode 100644 index 0000000000..447f98dd10 --- /dev/null +++ b/datadog_api_client/v2/model/split_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SplitCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``SplitCredentialsUpdate`` object. + + :param api_key: The `SplitAPIKeyUpdate` `api_key`. + :type api_key: str, optional + + :param type: The definition of the `SplitAPIKey` object. + :type type: SplitAPIKeyType + """ + 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.split_api_key_update import SplitAPIKeyUpdate + return { + "oneOf": [ + SplitAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/split_integration.py b/datadog_api_client/v2/model/split_integration.py new file mode 100644 index 0000000000..21b3af7381 --- /dev/null +++ b/datadog_api_client/v2/model/split_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.split_credentials import SplitCredentials + from datadog_api_client.v2.model.split_integration_type import SplitIntegrationType + from datadog_api_client.v2.model.split_api_key import SplitAPIKey + +class SplitIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.split_credentials import SplitCredentials + from datadog_api_client.v2.model.split_integration_type import SplitIntegrationType + return { + "credentials": (SplitCredentials,), + "type": (SplitIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[SplitCredentials, SplitAPIKey], type: SplitIntegrationType, **kwargs): + """ + The definition of the ``SplitIntegration`` object. + + :param credentials: The definition of the ``SplitCredentials`` object. + :type credentials: SplitCredentials + + :param type: The definition of the ``SplitIntegrationType`` object. + :type type: SplitIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/split_integration_type.py b/datadog_api_client/v2/model/split_integration_type.py new file mode 100644 index 0000000000..1813f51be9 --- /dev/null +++ b/datadog_api_client/v2/model/split_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SplitIntegrationType(ModelSimple): + """ + The definition of the `SplitIntegrationType` object. + + :param value: If omitted defaults to "Split". Must be one of ["Split"]. + :type value: str + """ + + allowed_values = { + "Split", + } + SPLIT: ClassVar["SplitIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SplitIntegrationType.SPLIT = SplitIntegrationType("Split") diff --git a/datadog_api_client/v2/model/split_integration_update.py b/datadog_api_client/v2/model/split_integration_update.py new file mode 100644 index 0000000000..d8327ca3e8 --- /dev/null +++ b/datadog_api_client/v2/model/split_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.split_credentials_update import SplitCredentialsUpdate + from datadog_api_client.v2.model.split_integration_type import SplitIntegrationType + from datadog_api_client.v2.model.split_api_key_update import SplitAPIKeyUpdate + +class SplitIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.split_credentials_update import SplitCredentialsUpdate + from datadog_api_client.v2.model.split_integration_type import SplitIntegrationType + return { + "credentials": (SplitCredentialsUpdate,), + "type": (SplitIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: SplitIntegrationType, credentials: Union[SplitCredentialsUpdate, SplitAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``SplitIntegrationUpdate`` object. + + :param credentials: The definition of the ``SplitCredentialsUpdate`` object. + :type credentials: SplitCredentialsUpdate, optional + + :param type: The definition of the ``SplitIntegrationType`` object. + :type type: SplitIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/state.py b/datadog_api_client/v2/model/state.py new file mode 100644 index 0000000000..2ac50c1364 --- /dev/null +++ b/datadog_api_client/v2/model/state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class State(ModelSimple): + """ + The state of the rule evaluation. + + :param value: Must be one of ["pass", "fail", "skip"]. + :type value: str + """ + + allowed_values = { + "pass", + "fail", + "skip", + } + PASS: ClassVar["State"] + FAIL: ClassVar["State"] + SKIP: ClassVar["State"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +State.PASS = State("pass") +State.FAIL = State("fail") +State.SKIP = State("skip") diff --git a/datadog_api_client/v2/model/state_variable.py b/datadog_api_client/v2/model/state_variable.py new file mode 100644 index 0000000000..e1faca1970 --- /dev/null +++ b/datadog_api_client/v2/model/state_variable.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.state_variable_properties import StateVariableProperties + from datadog_api_client.v2.model.state_variable_type import StateVariableType + +class StateVariable(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.state_variable_properties import StateVariableProperties + from datadog_api_client.v2.model.state_variable_type import StateVariableType + return { + "id": (UUID,), + "name": (str,), + "properties": (StateVariableProperties,), + "type": (StateVariableType,), + } + attribute_map = { + "id": "id", + "name": "name", + "properties": "properties", + "type": "type", + } + + def __init__(self_, id: UUID, name: str, properties: StateVariableProperties, type: StateVariableType, **kwargs): + """ + A variable, which can be set and read by other components in the app. + + :param id: The ID of the state variable. + :type id: UUID + + :param name: A unique identifier for this state variable. This name is also used to access the variable's value throughout the app. + :type name: str + + :param properties: The properties of the state variable. + :type properties: StateVariableProperties + + :param type: The state variable type. + :type type: StateVariableType + """ + super().__init__(kwargs) + + + self_.id = id + self_.name = name + self_.properties = properties + self_.type = type diff --git a/datadog_api_client/v2/model/state_variable_properties.py b/datadog_api_client/v2/model/state_variable_properties.py new file mode 100644 index 0000000000..6a08dae19e --- /dev/null +++ b/datadog_api_client/v2/model/state_variable_properties.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StateVariableProperties(ModelNormal): + @cached_property + def openapi_types(_): + return { + "default_value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + } + attribute_map = { + "default_value": "defaultValue", + } + + def __init__(self_, default_value: Union[Any, UnsetType]=unset, **kwargs): + """ + The properties of the state variable. + + :param default_value: The default value of the state variable. + :type default_value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + """ + if default_value is not unset: + kwargs["default_value"] = default_value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/state_variable_type.py b/datadog_api_client/v2/model/state_variable_type.py new file mode 100644 index 0000000000..6c10b5d73e --- /dev/null +++ b/datadog_api_client/v2/model/state_variable_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StateVariableType(ModelSimple): + """ + The state variable type. + + :param value: If omitted defaults to "stateVariable". Must be one of ["stateVariable"]. + :type value: str + """ + + allowed_values = { + "stateVariable", + } + STATEVARIABLE: ClassVar["StateVariableType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StateVariableType.STATEVARIABLE = StateVariableType("stateVariable") diff --git a/datadog_api_client/v2/model/statsig_api_key.py b/datadog_api_client/v2/model/statsig_api_key.py new file mode 100644 index 0000000000..f9445ccbbe --- /dev/null +++ b/datadog_api_client/v2/model/statsig_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statsig_api_key_type import StatsigAPIKeyType + +class StatsigAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statsig_api_key_type import StatsigAPIKeyType + return { + "api_key": (str,), + "type": (StatsigAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, api_key: str, type: StatsigAPIKeyType, **kwargs): + """ + The definition of the ``StatsigAPIKey`` object. + + :param api_key: The ``StatsigAPIKey`` ``api_key``. + :type api_key: str + + :param type: The definition of the ``StatsigAPIKey`` object. + :type type: StatsigAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_key = api_key + self_.type = type diff --git a/datadog_api_client/v2/model/statsig_api_key_type.py b/datadog_api_client/v2/model/statsig_api_key_type.py new file mode 100644 index 0000000000..2a0a9f1a54 --- /dev/null +++ b/datadog_api_client/v2/model/statsig_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatsigAPIKeyType(ModelSimple): + """ + The definition of the `StatsigAPIKey` object. + + :param value: If omitted defaults to "StatsigAPIKey". Must be one of ["StatsigAPIKey"]. + :type value: str + """ + + allowed_values = { + "StatsigAPIKey", + } + STATSIGAPIKEY: ClassVar["StatsigAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatsigAPIKeyType.STATSIGAPIKEY = StatsigAPIKeyType("StatsigAPIKey") diff --git a/datadog_api_client/v2/model/statsig_api_key_update.py b/datadog_api_client/v2/model/statsig_api_key_update.py new file mode 100644 index 0000000000..deff1976a4 --- /dev/null +++ b/datadog_api_client/v2/model/statsig_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statsig_api_key_type import StatsigAPIKeyType + +class StatsigAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statsig_api_key_type import StatsigAPIKeyType + return { + "api_key": (str,), + "type": (StatsigAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, type: StatsigAPIKeyType, api_key: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``StatsigAPIKey`` object. + + :param api_key: The ``StatsigAPIKeyUpdate`` ``api_key``. + :type api_key: str, optional + + :param type: The definition of the ``StatsigAPIKey`` object. + :type type: StatsigAPIKeyType + """ + if api_key is not unset: + kwargs["api_key"] = api_key + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/statsig_credentials.py b/datadog_api_client/v2/model/statsig_credentials.py new file mode 100644 index 0000000000..3fa08a2c68 --- /dev/null +++ b/datadog_api_client/v2/model/statsig_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatsigCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``StatsigCredentials`` object. + + :param api_key: The `StatsigAPIKey` `api_key`. + :type api_key: str + + :param type: The definition of the `StatsigAPIKey` object. + :type type: StatsigAPIKeyType + """ + 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.statsig_api_key import StatsigAPIKey + return { + "oneOf": [ + StatsigAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/statsig_credentials_update.py b/datadog_api_client/v2/model/statsig_credentials_update.py new file mode 100644 index 0000000000..14bc61e271 --- /dev/null +++ b/datadog_api_client/v2/model/statsig_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatsigCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``StatsigCredentialsUpdate`` object. + + :param api_key: The `StatsigAPIKeyUpdate` `api_key`. + :type api_key: str, optional + + :param type: The definition of the `StatsigAPIKey` object. + :type type: StatsigAPIKeyType + """ + 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.statsig_api_key_update import StatsigAPIKeyUpdate + return { + "oneOf": [ + StatsigAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/statsig_integration.py b/datadog_api_client/v2/model/statsig_integration.py new file mode 100644 index 0000000000..46edd8b6f0 --- /dev/null +++ b/datadog_api_client/v2/model/statsig_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statsig_credentials import StatsigCredentials + from datadog_api_client.v2.model.statsig_integration_type import StatsigIntegrationType + from datadog_api_client.v2.model.statsig_api_key import StatsigAPIKey + +class StatsigIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statsig_credentials import StatsigCredentials + from datadog_api_client.v2.model.statsig_integration_type import StatsigIntegrationType + return { + "credentials": (StatsigCredentials,), + "type": (StatsigIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[StatsigCredentials, StatsigAPIKey], type: StatsigIntegrationType, **kwargs): + """ + The definition of the ``StatsigIntegration`` object. + + :param credentials: The definition of the ``StatsigCredentials`` object. + :type credentials: StatsigCredentials + + :param type: The definition of the ``StatsigIntegrationType`` object. + :type type: StatsigIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/statsig_integration_type.py b/datadog_api_client/v2/model/statsig_integration_type.py new file mode 100644 index 0000000000..bb9d6c079d --- /dev/null +++ b/datadog_api_client/v2/model/statsig_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatsigIntegrationType(ModelSimple): + """ + The definition of the `StatsigIntegrationType` object. + + :param value: If omitted defaults to "Statsig". Must be one of ["Statsig"]. + :type value: str + """ + + allowed_values = { + "Statsig", + } + STATSIG: ClassVar["StatsigIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatsigIntegrationType.STATSIG = StatsigIntegrationType("Statsig") diff --git a/datadog_api_client/v2/model/statsig_integration_update.py b/datadog_api_client/v2/model/statsig_integration_update.py new file mode 100644 index 0000000000..ebc7f597a9 --- /dev/null +++ b/datadog_api_client/v2/model/statsig_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statsig_credentials_update import StatsigCredentialsUpdate + from datadog_api_client.v2.model.statsig_integration_type import StatsigIntegrationType + from datadog_api_client.v2.model.statsig_api_key_update import StatsigAPIKeyUpdate + +class StatsigIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statsig_credentials_update import StatsigCredentialsUpdate + from datadog_api_client.v2.model.statsig_integration_type import StatsigIntegrationType + return { + "credentials": (StatsigCredentialsUpdate,), + "type": (StatsigIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: StatsigIntegrationType, credentials: Union[StatsigCredentialsUpdate, StatsigAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``StatsigIntegrationUpdate`` object. + + :param credentials: The definition of the ``StatsigCredentialsUpdate`` object. + :type credentials: StatsigCredentialsUpdate, optional + + :param type: The definition of the ``StatsigIntegrationType`` object. + :type type: StatsigIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/status_page.py b/datadog_api_client/v2/model/status_page.py new file mode 100644 index 0000000000..b0f1917698 --- /dev/null +++ b/datadog_api_client/v2/model/status_page.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data import StatusPageData + from datadog_api_client.v2.model.status_page_array_included import StatusPageArrayIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + +class StatusPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data import StatusPageData + from datadog_api_client.v2.model.status_page_array_included import StatusPageArrayIncluded + return { + "data": (StatusPageData,), + "included": ([StatusPageArrayIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[StatusPageData, UnsetType]=unset, included: Union[List[Union[StatusPageArrayIncluded, StatusPagesUser]], UnsetType]=unset, **kwargs): + """ + Response object for a single status page. + + :param data: The data object for a status page. + :type data: StatusPageData, optional + + :param included: The included related resources of a status page. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [StatusPageArrayIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_page_array.py b/datadog_api_client/v2/model/status_page_array.py new file mode 100644 index 0000000000..5015f9d352 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_array.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data import StatusPageData + from datadog_api_client.v2.model.status_page_array_included import StatusPageArrayIncluded + from datadog_api_client.v2.model.pagination_meta import PaginationMeta + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + +class StatusPageArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data import StatusPageData + from datadog_api_client.v2.model.status_page_array_included import StatusPageArrayIncluded + from datadog_api_client.v2.model.pagination_meta import PaginationMeta + return { + "data": ([StatusPageData],), + "included": ([StatusPageArrayIncluded],), + "meta": (PaginationMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + read_only_vars = { + "meta", + } + + def __init__(self_, data: List[StatusPageData], included: Union[List[Union[StatusPageArrayIncluded, StatusPagesUser]], UnsetType]=unset, meta: Union[PaginationMeta, UnsetType]=unset, **kwargs): + """ + Response object for a list of status pages. + + :param data: A list of status page data objects. + :type data: [StatusPageData] + + :param included: The included related resources of a status page. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [StatusPageArrayIncluded], optional + + :param meta: Response metadata. + :type meta: PaginationMeta, 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/datadog_api_client/v2/model/status_page_array_included.py b/datadog_api_client/v2/model/status_page_array_included.py new file mode 100644 index 0000000000..6881180183 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_array_included.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatusPageArrayIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An included resource related to a status page. + + :param attributes: Attributes of the Datadog user. + :type attributes: StatusPagesUserAttributes, optional + + :param id: The ID of the Datadog user. + :type id: UUID, optional + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + 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.status_pages_user import StatusPagesUser + return { + "oneOf": [ + StatusPagesUser, + ], + } diff --git a/datadog_api_client/v2/model/status_page_as_included.py b/datadog_api_client/v2/model/status_page_as_included.py new file mode 100644 index 0000000000..206d899145 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_as_included.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_as_included_attributes import StatusPageAsIncludedAttributes + from datadog_api_client.v2.model.status_page_as_included_relationships import StatusPageAsIncludedRelationships + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class StatusPageAsIncluded(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_as_included_attributes import StatusPageAsIncludedAttributes + from datadog_api_client.v2.model.status_page_as_included_relationships import StatusPageAsIncludedRelationships + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "attributes": (StatusPageAsIncludedAttributes,), + "id": (UUID,), + "relationships": (StatusPageAsIncludedRelationships,), + "type": (StatusPageDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: StatusPageDataType, attributes: Union[StatusPageAsIncludedAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, relationships: Union[StatusPageAsIncludedRelationships, UnsetType]=unset, **kwargs): + """ + The included status page resource. + + :param attributes: The attributes of a status page. + :type attributes: StatusPageAsIncludedAttributes, optional + + :param id: The ID of the status page. + :type id: UUID, optional + + :param relationships: The relationships of a status page. + :type relationships: StatusPageAsIncludedRelationships, optional + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/status_page_as_included_attributes.py b/datadog_api_client/v2/model/status_page_as_included_attributes.py new file mode 100644 index 0000000000..aee5d91097 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_as_included_attributes.py @@ -0,0 +1,165 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_as_included_attributes_components_items import StatusPageAsIncludedAttributesComponentsItems + from datadog_api_client.v2.model.create_status_page_request_data_attributes_type import CreateStatusPageRequestDataAttributesType + from datadog_api_client.v2.model.create_status_page_request_data_attributes_visualization_type import CreateStatusPageRequestDataAttributesVisualizationType + +class StatusPageAsIncludedAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_as_included_attributes_components_items import StatusPageAsIncludedAttributesComponentsItems + from datadog_api_client.v2.model.create_status_page_request_data_attributes_type import CreateStatusPageRequestDataAttributesType + from datadog_api_client.v2.model.create_status_page_request_data_attributes_visualization_type import CreateStatusPageRequestDataAttributesVisualizationType + return { + "company_logo": (str,), + "components": ([StatusPageAsIncludedAttributesComponentsItems],), + "created_at": (datetime,), + "custom_domain": (str,), + "custom_domain_enabled": (bool,), + "domain_prefix": (str,), + "email_header_image": (str,), + "enabled": (bool,), + "favicon": (str,), + "modified_at": (datetime,), + "name": (str,), + "page_url": (str,), + "slack_app_icon": (str,), + "slack_subscriptions_enabled": (bool,), + "subscriptions_enabled": (bool,), + "type": (CreateStatusPageRequestDataAttributesType,), + "visualization_type": (CreateStatusPageRequestDataAttributesVisualizationType,), + } + attribute_map = { + "company_logo": "company_logo", + "components": "components", + "created_at": "created_at", + "custom_domain": "custom_domain", + "custom_domain_enabled": "custom_domain_enabled", + "domain_prefix": "domain_prefix", + "email_header_image": "email_header_image", + "enabled": "enabled", + "favicon": "favicon", + "modified_at": "modified_at", + "name": "name", + "page_url": "page_url", + "slack_app_icon": "slack_app_icon", + "slack_subscriptions_enabled": "slack_subscriptions_enabled", + "subscriptions_enabled": "subscriptions_enabled", + "type": "type", + "visualization_type": "visualization_type", + } + + def __init__(self_, company_logo: Union[str, UnsetType]=unset, components: Union[List[StatusPageAsIncludedAttributesComponentsItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, custom_domain: Union[str, UnsetType]=unset, custom_domain_enabled: Union[bool, UnsetType]=unset, domain_prefix: Union[str, UnsetType]=unset, email_header_image: Union[str, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, favicon: Union[str, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, page_url: Union[str, UnsetType]=unset, slack_app_icon: Union[str, UnsetType]=unset, slack_subscriptions_enabled: Union[bool, UnsetType]=unset, subscriptions_enabled: Union[bool, UnsetType]=unset, type: Union[CreateStatusPageRequestDataAttributesType, UnsetType]=unset, visualization_type: Union[CreateStatusPageRequestDataAttributesVisualizationType, UnsetType]=unset, **kwargs): + """ + The attributes of a status page. + + :param company_logo: The base64-encoded image data displayed in the company logo. + :type company_logo: str, optional + + :param components: Components displayed on the status page. + :type components: [StatusPageAsIncludedAttributesComponentsItems], optional + + :param created_at: Timestamp of when the status page was created. + :type created_at: datetime, optional + + :param custom_domain: If configured, the url that the status page is accessible at. + :type custom_domain: str, optional + + :param custom_domain_enabled: Whether the custom domain is configured. + :type custom_domain_enabled: bool, optional + + :param domain_prefix: The subdomain of the status page's url taking the form ``https://{domain_prefix}.statuspage.datadoghq.com``. Globally unique across Datadog Status Pages. + :type domain_prefix: str, optional + + :param email_header_image: Base64-encoded image data included in email notifications sent to status page subscribers. + :type email_header_image: str, optional + + :param enabled: Whether the status page is enabled. + :type enabled: bool, optional + + :param favicon: Base64-encoded image data displayed in the browser tab. + :type favicon: str, optional + + :param modified_at: Timestamp of when the status page was last modified. + :type modified_at: datetime, optional + + :param name: The name of the status page. + :type name: str, optional + + :param page_url: The url that the status page is accessible at. + :type page_url: str, optional + + :param slack_app_icon: The Slack app icon URL for the status page. + :type slack_app_icon: str, optional + + :param slack_subscriptions_enabled: Whether Slack subscriptions are enabled for the status page. + :type slack_subscriptions_enabled: bool, optional + + :param subscriptions_enabled: Whether users can subscribe to the status page. + :type subscriptions_enabled: bool, optional + + :param type: The type of the status page controlling how the status page is accessed. + :type type: CreateStatusPageRequestDataAttributesType, optional + + :param visualization_type: The visualization type of the status page. + :type visualization_type: CreateStatusPageRequestDataAttributesVisualizationType, optional + """ + if company_logo is not unset: + kwargs["company_logo"] = company_logo + if components is not unset: + kwargs["components"] = components + if created_at is not unset: + kwargs["created_at"] = created_at + if custom_domain is not unset: + kwargs["custom_domain"] = custom_domain + if custom_domain_enabled is not unset: + kwargs["custom_domain_enabled"] = custom_domain_enabled + if domain_prefix is not unset: + kwargs["domain_prefix"] = domain_prefix + if email_header_image is not unset: + kwargs["email_header_image"] = email_header_image + if enabled is not unset: + kwargs["enabled"] = enabled + if favicon is not unset: + kwargs["favicon"] = favicon + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if page_url is not unset: + kwargs["page_url"] = page_url + if slack_app_icon is not unset: + kwargs["slack_app_icon"] = slack_app_icon + if slack_subscriptions_enabled is not unset: + kwargs["slack_subscriptions_enabled"] = slack_subscriptions_enabled + if subscriptions_enabled is not unset: + kwargs["subscriptions_enabled"] = subscriptions_enabled + if type is not unset: + kwargs["type"] = type + if visualization_type is not unset: + kwargs["visualization_type"] = visualization_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_page_as_included_attributes_components_items.py b/datadog_api_client/v2/model/status_page_as_included_attributes_components_items.py new file mode 100644 index 0000000000..3a566458d9 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_as_included_attributes_components_items.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_as_included_attributes_components_items_components_items import StatusPageAsIncludedAttributesComponentsItemsComponentsItems + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + +class StatusPageAsIncludedAttributesComponentsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_as_included_attributes_components_items_components_items import StatusPageAsIncludedAttributesComponentsItemsComponentsItems + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + return { + "components": ([StatusPageAsIncludedAttributesComponentsItemsComponentsItems],), + "id": (UUID,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentGroupAttributesComponentsItemsStatus,), + "type": (CreateComponentRequestDataAttributesType,), + } + attribute_map = { + "components": "components", + "id": "id", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + read_only_vars = { + "id", + "status", + } + + def __init__(self_, components: Union[List[StatusPageAsIncludedAttributesComponentsItemsComponentsItems], UnsetType]=unset, id: Union[UUID, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentGroupAttributesComponentsItemsStatus, UnsetType]=unset, type: Union[CreateComponentRequestDataAttributesType, UnsetType]=unset, **kwargs): + """ + A component displayed on an included status page. + + :param components: If the component is of type ``group`` , the components within the group. + :type components: [StatusPageAsIncludedAttributesComponentsItemsComponentsItems], optional + + :param id: The ID of the component. + :type id: UUID, optional + + :param name: The name of the component. + :type name: str, optional + + :param position: The zero-indexed position of the component. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentGroupAttributesComponentsItemsStatus, optional + + :param type: The type of the component. + :type type: CreateComponentRequestDataAttributesType, optional + """ + if components is not unset: + kwargs["components"] = components + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_page_as_included_attributes_components_items_components_items.py b/datadog_api_client/v2/model/status_page_as_included_attributes_components_items_components_items.py new file mode 100644 index 0000000000..37c65f397a --- /dev/null +++ b/datadog_api_client/v2/model/status_page_as_included_attributes_components_items_components_items.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + +class StatusPageAsIncludedAttributesComponentsItemsComponentsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + return { + "id": (UUID,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentGroupAttributesComponentsItemsStatus,), + "type": (StatusPagesComponentGroupAttributesComponentsItemsType,), + } + attribute_map = { + "id": "id", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + read_only_vars = { + "id", + "status", + } + + def __init__(self_, id: Union[UUID, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentGroupAttributesComponentsItemsStatus, UnsetType]=unset, type: Union[StatusPagesComponentGroupAttributesComponentsItemsType, UnsetType]=unset, **kwargs): + """ + A grouped component within a status page component group. + + :param id: The ID of the grouped component. + :type id: UUID, optional + + :param name: The name of the grouped component. + :type name: str, optional + + :param position: The zero-indexed position of the grouped component. Relative to the other components in the group. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentGroupAttributesComponentsItemsStatus, optional + + :param type: The type of the component. + :type type: StatusPagesComponentGroupAttributesComponentsItemsType, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_page_as_included_relationships.py b/datadog_api_client/v2/model/status_page_as_included_relationships.py new file mode 100644 index 0000000000..51c1f6a7be --- /dev/null +++ b/datadog_api_client/v2/model/status_page_as_included_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_as_included_relationships_created_by_user import StatusPageAsIncludedRelationshipsCreatedByUser + from datadog_api_client.v2.model.status_page_as_included_relationships_last_modified_by_user import StatusPageAsIncludedRelationshipsLastModifiedByUser + +class StatusPageAsIncludedRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_as_included_relationships_created_by_user import StatusPageAsIncludedRelationshipsCreatedByUser + from datadog_api_client.v2.model.status_page_as_included_relationships_last_modified_by_user import StatusPageAsIncludedRelationshipsLastModifiedByUser + return { + "created_by_user": (StatusPageAsIncludedRelationshipsCreatedByUser,), + "last_modified_by_user": (StatusPageAsIncludedRelationshipsLastModifiedByUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[StatusPageAsIncludedRelationshipsCreatedByUser, UnsetType]=unset, last_modified_by_user: Union[StatusPageAsIncludedRelationshipsLastModifiedByUser, UnsetType]=unset, **kwargs): + """ + The relationships of a status page. + + :param created_by_user: The Datadog user who created the status page. + :type created_by_user: StatusPageAsIncludedRelationshipsCreatedByUser, optional + + :param last_modified_by_user: The Datadog user who last modified the status page. + :type last_modified_by_user: StatusPageAsIncludedRelationshipsLastModifiedByUser, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_page_as_included_relationships_created_by_user.py b/datadog_api_client/v2/model/status_page_as_included_relationships_created_by_user.py new file mode 100644 index 0000000000..ec1f33ae69 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_as_included_relationships_created_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_as_included_relationships_created_by_user_data import StatusPageAsIncludedRelationshipsCreatedByUserData + +class StatusPageAsIncludedRelationshipsCreatedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_as_included_relationships_created_by_user_data import StatusPageAsIncludedRelationshipsCreatedByUserData + return { + "data": (StatusPageAsIncludedRelationshipsCreatedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPageAsIncludedRelationshipsCreatedByUserData, **kwargs): + """ + The Datadog user who created the status page. + + :param data: The data object identifying the Datadog user who created the status page. + :type data: StatusPageAsIncludedRelationshipsCreatedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_page_as_included_relationships_created_by_user_data.py b/datadog_api_client/v2/model/status_page_as_included_relationships_created_by_user_data.py new file mode 100644 index 0000000000..5571c7458b --- /dev/null +++ b/datadog_api_client/v2/model/status_page_as_included_relationships_created_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class StatusPageAsIncludedRelationshipsCreatedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who created the status page. + + :param id: The ID of the Datadog user who created the status page. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_page_as_included_relationships_last_modified_by_user.py b/datadog_api_client/v2/model/status_page_as_included_relationships_last_modified_by_user.py new file mode 100644 index 0000000000..daec2580bf --- /dev/null +++ b/datadog_api_client/v2/model/status_page_as_included_relationships_last_modified_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_as_included_relationships_last_modified_by_user_data import StatusPageAsIncludedRelationshipsLastModifiedByUserData + +class StatusPageAsIncludedRelationshipsLastModifiedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_as_included_relationships_last_modified_by_user_data import StatusPageAsIncludedRelationshipsLastModifiedByUserData + return { + "data": (StatusPageAsIncludedRelationshipsLastModifiedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPageAsIncludedRelationshipsLastModifiedByUserData, **kwargs): + """ + The Datadog user who last modified the status page. + + :param data: The data object identifying the Datadog user who last modified the status page. + :type data: StatusPageAsIncludedRelationshipsLastModifiedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_page_as_included_relationships_last_modified_by_user_data.py b/datadog_api_client/v2/model/status_page_as_included_relationships_last_modified_by_user_data.py new file mode 100644 index 0000000000..37a3811d60 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_as_included_relationships_last_modified_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class StatusPageAsIncludedRelationshipsLastModifiedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who last modified the status page. + + :param id: The ID of the Datadog user who last modified the status page. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_page_data.py b/datadog_api_client/v2/model/status_page_data.py new file mode 100644 index 0000000000..289a42b33d --- /dev/null +++ b/datadog_api_client/v2/model/status_page_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_attributes import StatusPageDataAttributes + from datadog_api_client.v2.model.status_page_data_relationships import StatusPageDataRelationships + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class StatusPageData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_attributes import StatusPageDataAttributes + from datadog_api_client.v2.model.status_page_data_relationships import StatusPageDataRelationships + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "attributes": (StatusPageDataAttributes,), + "id": (UUID,), + "relationships": (StatusPageDataRelationships,), + "type": (StatusPageDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: StatusPageDataType, attributes: Union[StatusPageDataAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, relationships: Union[StatusPageDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for a status page. + + :param attributes: The attributes of a status page. + :type attributes: StatusPageDataAttributes, optional + + :param id: The ID of the status page. + :type id: UUID, optional + + :param relationships: The relationships of a status page. + :type relationships: StatusPageDataRelationships, optional + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/status_page_data_attributes.py b/datadog_api_client/v2/model/status_page_data_attributes.py new file mode 100644 index 0000000000..1d52068b2d --- /dev/null +++ b/datadog_api_client/v2/model/status_page_data_attributes.py @@ -0,0 +1,165 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_attributes_components_items import StatusPageDataAttributesComponentsItems + from datadog_api_client.v2.model.create_status_page_request_data_attributes_type import CreateStatusPageRequestDataAttributesType + from datadog_api_client.v2.model.create_status_page_request_data_attributes_visualization_type import CreateStatusPageRequestDataAttributesVisualizationType + +class StatusPageDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_attributes_components_items import StatusPageDataAttributesComponentsItems + from datadog_api_client.v2.model.create_status_page_request_data_attributes_type import CreateStatusPageRequestDataAttributesType + from datadog_api_client.v2.model.create_status_page_request_data_attributes_visualization_type import CreateStatusPageRequestDataAttributesVisualizationType + return { + "company_logo": (str, none_type), + "components": ([StatusPageDataAttributesComponentsItems],), + "created_at": (datetime,), + "custom_domain": (str, none_type), + "custom_domain_enabled": (bool,), + "domain_prefix": (str,), + "email_header_image": (str, none_type), + "enabled": (bool,), + "favicon": (str, none_type), + "modified_at": (datetime,), + "name": (str,), + "page_url": (str,), + "slack_app_icon": (str,), + "slack_subscriptions_enabled": (bool,), + "subscriptions_enabled": (bool,), + "type": (CreateStatusPageRequestDataAttributesType,), + "visualization_type": (CreateStatusPageRequestDataAttributesVisualizationType,), + } + attribute_map = { + "company_logo": "company_logo", + "components": "components", + "created_at": "created_at", + "custom_domain": "custom_domain", + "custom_domain_enabled": "custom_domain_enabled", + "domain_prefix": "domain_prefix", + "email_header_image": "email_header_image", + "enabled": "enabled", + "favicon": "favicon", + "modified_at": "modified_at", + "name": "name", + "page_url": "page_url", + "slack_app_icon": "slack_app_icon", + "slack_subscriptions_enabled": "slack_subscriptions_enabled", + "subscriptions_enabled": "subscriptions_enabled", + "type": "type", + "visualization_type": "visualization_type", + } + + def __init__(self_, company_logo: Union[str, none_type, UnsetType]=unset, components: Union[List[StatusPageDataAttributesComponentsItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, custom_domain: Union[str, none_type, UnsetType]=unset, custom_domain_enabled: Union[bool, UnsetType]=unset, domain_prefix: Union[str, UnsetType]=unset, email_header_image: Union[str, none_type, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, favicon: Union[str, none_type, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, page_url: Union[str, UnsetType]=unset, slack_app_icon: Union[str, UnsetType]=unset, slack_subscriptions_enabled: Union[bool, UnsetType]=unset, subscriptions_enabled: Union[bool, UnsetType]=unset, type: Union[CreateStatusPageRequestDataAttributesType, UnsetType]=unset, visualization_type: Union[CreateStatusPageRequestDataAttributesVisualizationType, UnsetType]=unset, **kwargs): + """ + The attributes of a status page. + + :param company_logo: Base64-encoded image data displayed on the status page. + :type company_logo: str, none_type, optional + + :param components: Components displayed on the status page. + :type components: [StatusPageDataAttributesComponentsItems], optional + + :param created_at: Timestamp of when the status page was created. + :type created_at: datetime, optional + + :param custom_domain: If configured, the url that the status page is accessible at. + :type custom_domain: str, none_type, optional + + :param custom_domain_enabled: Whether the custom domain is configured. + :type custom_domain_enabled: bool, optional + + :param domain_prefix: The subdomain of the status page's url taking the form ``https://{domain_prefix}.statuspage.datadoghq.com``. Globally unique across Datadog Status Pages. + :type domain_prefix: str, optional + + :param email_header_image: Base64-encoded image data included in email notifications sent to status page subscribers. + :type email_header_image: str, none_type, optional + + :param enabled: Whether the status page is enabled. + :type enabled: bool, optional + + :param favicon: Base64-encoded image data displayed in the browser tab. + :type favicon: str, none_type, optional + + :param modified_at: Timestamp of when the status page was last modified. + :type modified_at: datetime, optional + + :param name: The name of the status page. + :type name: str, optional + + :param page_url: The url that the status page is accessible at. + :type page_url: str, optional + + :param slack_app_icon: The Slack app icon URL for the status page. + :type slack_app_icon: str, optional + + :param slack_subscriptions_enabled: Whether Slack subscriptions are enabled for the status page. + :type slack_subscriptions_enabled: bool, optional + + :param subscriptions_enabled: Whether users can subscribe to the status page. + :type subscriptions_enabled: bool, optional + + :param type: The type of the status page controlling how the status page is accessed. + :type type: CreateStatusPageRequestDataAttributesType, optional + + :param visualization_type: The visualization type of the status page. + :type visualization_type: CreateStatusPageRequestDataAttributesVisualizationType, optional + """ + if company_logo is not unset: + kwargs["company_logo"] = company_logo + if components is not unset: + kwargs["components"] = components + if created_at is not unset: + kwargs["created_at"] = created_at + if custom_domain is not unset: + kwargs["custom_domain"] = custom_domain + if custom_domain_enabled is not unset: + kwargs["custom_domain_enabled"] = custom_domain_enabled + if domain_prefix is not unset: + kwargs["domain_prefix"] = domain_prefix + if email_header_image is not unset: + kwargs["email_header_image"] = email_header_image + if enabled is not unset: + kwargs["enabled"] = enabled + if favicon is not unset: + kwargs["favicon"] = favicon + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if page_url is not unset: + kwargs["page_url"] = page_url + if slack_app_icon is not unset: + kwargs["slack_app_icon"] = slack_app_icon + if slack_subscriptions_enabled is not unset: + kwargs["slack_subscriptions_enabled"] = slack_subscriptions_enabled + if subscriptions_enabled is not unset: + kwargs["subscriptions_enabled"] = subscriptions_enabled + if type is not unset: + kwargs["type"] = type + if visualization_type is not unset: + kwargs["visualization_type"] = visualization_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_page_data_attributes_components_items.py b/datadog_api_client/v2/model/status_page_data_attributes_components_items.py new file mode 100644 index 0000000000..b43e70b0f9 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_data_attributes_components_items.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_attributes_components_items_components_items import StatusPageDataAttributesComponentsItemsComponentsItems + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + +class StatusPageDataAttributesComponentsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_attributes_components_items_components_items import StatusPageDataAttributesComponentsItemsComponentsItems + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + return { + "components": ([StatusPageDataAttributesComponentsItemsComponentsItems],), + "id": (UUID,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentGroupAttributesComponentsItemsStatus,), + "type": (CreateComponentRequestDataAttributesType,), + } + attribute_map = { + "components": "components", + "id": "id", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + read_only_vars = { + "status", + } + + def __init__(self_, components: Union[List[StatusPageDataAttributesComponentsItemsComponentsItems], UnsetType]=unset, id: Union[UUID, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentGroupAttributesComponentsItemsStatus, UnsetType]=unset, type: Union[CreateComponentRequestDataAttributesType, UnsetType]=unset, **kwargs): + """ + A component displayed on a status page. + + :param components: If the component is of type ``group`` , the components within the group. + :type components: [StatusPageDataAttributesComponentsItemsComponentsItems], optional + + :param id: The ID of the component. + :type id: UUID, optional + + :param name: The name of the component. + :type name: str, optional + + :param position: The zero-indexed position of the component. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentGroupAttributesComponentsItemsStatus, optional + + :param type: The type of the component. + :type type: CreateComponentRequestDataAttributesType, optional + """ + if components is not unset: + kwargs["components"] = components + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_page_data_attributes_components_items_components_items.py b/datadog_api_client/v2/model/status_page_data_attributes_components_items_components_items.py new file mode 100644 index 0000000000..a7ced35199 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_data_attributes_components_items_components_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + +class StatusPageDataAttributesComponentsItemsComponentsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + return { + "id": (UUID,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentGroupAttributesComponentsItemsStatus,), + "type": (StatusPagesComponentGroupAttributesComponentsItemsType,), + } + attribute_map = { + "id": "id", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + read_only_vars = { + "status", + } + + def __init__(self_, id: Union[UUID, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentGroupAttributesComponentsItemsStatus, UnsetType]=unset, type: Union[StatusPagesComponentGroupAttributesComponentsItemsType, UnsetType]=unset, **kwargs): + """ + A grouped component within a status page component group. + + :param id: The ID of the component. + :type id: UUID, optional + + :param name: The name of the component. + :type name: str, optional + + :param position: The zero-indexed position of the component. Relative to the other components in the group. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentGroupAttributesComponentsItemsStatus, optional + + :param type: The type of the component. + :type type: StatusPagesComponentGroupAttributesComponentsItemsType, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_page_data_relationships.py b/datadog_api_client/v2/model/status_page_data_relationships.py new file mode 100644 index 0000000000..905724f554 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_data_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_relationships_created_by_user import StatusPageDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.status_page_data_relationships_last_modified_by_user import StatusPageDataRelationshipsLastModifiedByUser + +class StatusPageDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_relationships_created_by_user import StatusPageDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.status_page_data_relationships_last_modified_by_user import StatusPageDataRelationshipsLastModifiedByUser + return { + "created_by_user": (StatusPageDataRelationshipsCreatedByUser,), + "last_modified_by_user": (StatusPageDataRelationshipsLastModifiedByUser,), + } + attribute_map = { + "created_by_user": "created_by_user", + "last_modified_by_user": "last_modified_by_user", + } + + def __init__(self_, created_by_user: Union[StatusPageDataRelationshipsCreatedByUser, UnsetType]=unset, last_modified_by_user: Union[StatusPageDataRelationshipsLastModifiedByUser, UnsetType]=unset, **kwargs): + """ + The relationships of a status page. + + :param created_by_user: The Datadog user who created the status page. + :type created_by_user: StatusPageDataRelationshipsCreatedByUser, optional + + :param last_modified_by_user: The Datadog user who last modified the status page. + :type last_modified_by_user: StatusPageDataRelationshipsLastModifiedByUser, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_page_data_relationships_created_by_user.py b/datadog_api_client/v2/model/status_page_data_relationships_created_by_user.py new file mode 100644 index 0000000000..4ae0b5a417 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_data_relationships_created_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_relationships_created_by_user_data import StatusPageDataRelationshipsCreatedByUserData + +class StatusPageDataRelationshipsCreatedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_relationships_created_by_user_data import StatusPageDataRelationshipsCreatedByUserData + return { + "data": (StatusPageDataRelationshipsCreatedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPageDataRelationshipsCreatedByUserData, **kwargs): + """ + The Datadog user who created the status page. + + :param data: The data object identifying the Datadog user who created the status page. + :type data: StatusPageDataRelationshipsCreatedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_page_data_relationships_created_by_user_data.py b/datadog_api_client/v2/model/status_page_data_relationships_created_by_user_data.py new file mode 100644 index 0000000000..fe82e2bfc9 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_data_relationships_created_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class StatusPageDataRelationshipsCreatedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who created the status page. + + :param id: The ID of the Datadog user who created the status page. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_page_data_relationships_last_modified_by_user.py b/datadog_api_client/v2/model/status_page_data_relationships_last_modified_by_user.py new file mode 100644 index 0000000000..7667e0389c --- /dev/null +++ b/datadog_api_client/v2/model/status_page_data_relationships_last_modified_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_relationships_last_modified_by_user_data import StatusPageDataRelationshipsLastModifiedByUserData + +class StatusPageDataRelationshipsLastModifiedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_relationships_last_modified_by_user_data import StatusPageDataRelationshipsLastModifiedByUserData + return { + "data": (StatusPageDataRelationshipsLastModifiedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPageDataRelationshipsLastModifiedByUserData, **kwargs): + """ + The Datadog user who last modified the status page. + + :param data: The data object identifying the Datadog user who last modified the status page. + :type data: StatusPageDataRelationshipsLastModifiedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_page_data_relationships_last_modified_by_user_data.py b/datadog_api_client/v2/model/status_page_data_relationships_last_modified_by_user_data.py new file mode 100644 index 0000000000..5fc2e958d8 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_data_relationships_last_modified_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class StatusPageDataRelationshipsLastModifiedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who last modified the status page. + + :param id: The ID of the Datadog user who last modified the status page. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_page_data_type.py b/datadog_api_client/v2/model/status_page_data_type.py new file mode 100644 index 0000000000..217a6dea00 --- /dev/null +++ b/datadog_api_client/v2/model/status_page_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatusPageDataType(ModelSimple): + """ + Status pages resource type. + + :param value: If omitted defaults to "status_pages". Must be one of ["status_pages"]. + :type value: str + """ + + allowed_values = { + "status_pages", + } + STATUS_PAGES: ClassVar["StatusPageDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatusPageDataType.STATUS_PAGES = StatusPageDataType("status_pages") diff --git a/datadog_api_client/v2/model/status_pages_component.py b/datadog_api_client/v2/model/status_pages_component.py new file mode 100644 index 0000000000..97faac3f9d --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data import StatusPagesComponentData + from datadog_api_client.v2.model.status_pages_component_array_included import StatusPagesComponentArrayIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + from datadog_api_client.v2.model.status_pages_component_group import StatusPagesComponentGroup + +class StatusPagesComponent(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data import StatusPagesComponentData + from datadog_api_client.v2.model.status_pages_component_array_included import StatusPagesComponentArrayIncluded + return { + "data": (StatusPagesComponentData,), + "included": ([StatusPagesComponentArrayIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[StatusPagesComponentData, UnsetType]=unset, included: Union[List[Union[StatusPagesComponentArrayIncluded, StatusPagesUser, StatusPageAsIncluded, StatusPagesComponentGroup]], UnsetType]=unset, **kwargs): + """ + Response object for a single component. + + :param data: The data object for a component. + :type data: StatusPagesComponentData, optional + + :param included: The included related resources of a component. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [StatusPagesComponentArrayIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_pages_component_array.py b/datadog_api_client/v2/model/status_pages_component_array.py new file mode 100644 index 0000000000..00b49f8cf4 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_array.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data import StatusPagesComponentData + from datadog_api_client.v2.model.status_pages_component_array_included import StatusPagesComponentArrayIncluded + from datadog_api_client.v2.model.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + from datadog_api_client.v2.model.status_pages_component_group import StatusPagesComponentGroup + +class StatusPagesComponentArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data import StatusPagesComponentData + from datadog_api_client.v2.model.status_pages_component_array_included import StatusPagesComponentArrayIncluded + return { + "data": ([StatusPagesComponentData],), + "included": ([StatusPagesComponentArrayIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[StatusPagesComponentData], included: Union[List[Union[StatusPagesComponentArrayIncluded, StatusPagesUser, StatusPageAsIncluded, StatusPagesComponentGroup]], UnsetType]=unset, **kwargs): + """ + Response object for a list of components. + + :param data: A list of component data objects. + :type data: [StatusPagesComponentData] + + :param included: The included related resources of a component. Client must explicitly request these resources by name in the ``include`` query parameter. + :type included: [StatusPagesComponentArrayIncluded], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_pages_component_array_included.py b/datadog_api_client/v2/model/status_pages_component_array_included.py new file mode 100644 index 0000000000..1a8bb65ca8 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_array_included.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatusPagesComponentArrayIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An included resource related to a component. + + :param attributes: Attributes of the Datadog user. + :type attributes: StatusPagesUserAttributes, optional + + :param id: The ID of the Datadog user. + :type id: UUID, optional + + :param type: Users resource type. + :type type: StatusPagesUserType + + :param relationships: The relationships of a status page. + :type relationships: StatusPageAsIncludedRelationships, 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.status_pages_user import StatusPagesUser + from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded + from datadog_api_client.v2.model.status_pages_component_group import StatusPagesComponentGroup + return { + "oneOf": [ + StatusPagesUser, + StatusPageAsIncluded, + StatusPagesComponentGroup, + ], + } diff --git a/datadog_api_client/v2/model/status_pages_component_data.py b/datadog_api_client/v2/model/status_pages_component_data.py new file mode 100644 index 0000000000..a4ad4a7db0 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_attributes import StatusPagesComponentDataAttributes + from datadog_api_client.v2.model.status_pages_component_data_relationships import StatusPagesComponentDataRelationships + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + +class StatusPagesComponentData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_attributes import StatusPagesComponentDataAttributes + from datadog_api_client.v2.model.status_pages_component_data_relationships import StatusPagesComponentDataRelationships + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + return { + "attributes": (StatusPagesComponentDataAttributes,), + "id": (UUID,), + "relationships": (StatusPagesComponentDataRelationships,), + "type": (StatusPagesComponentGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: StatusPagesComponentGroupType, attributes: Union[StatusPagesComponentDataAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, relationships: Union[StatusPagesComponentDataRelationships, UnsetType]=unset, **kwargs): + """ + The data object for a component. + + :param attributes: The attributes of a component. + :type attributes: StatusPagesComponentDataAttributes, optional + + :param id: The ID of the component. + :type id: UUID, optional + + :param relationships: The relationships of a component. + :type relationships: StatusPagesComponentDataRelationships, optional + + :param type: Components resource type. + :type type: StatusPagesComponentGroupType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_data_attributes.py b/datadog_api_client/v2/model/status_pages_component_data_attributes.py new file mode 100644 index 0000000000..4635c527b6 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_attributes_components_items import StatusPagesComponentDataAttributesComponentsItems + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + +class StatusPagesComponentDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_attributes_components_items import StatusPagesComponentDataAttributesComponentsItems + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + return { + "components": ([StatusPagesComponentDataAttributesComponentsItems],), + "created_at": (datetime,), + "modified_at": (datetime,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentDataAttributesStatus,), + "type": (CreateComponentRequestDataAttributesType,), + } + attribute_map = { + "components": "components", + "created_at": "created_at", + "modified_at": "modified_at", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + + def __init__(self_, type: CreateComponentRequestDataAttributesType, components: Union[List[StatusPagesComponentDataAttributesComponentsItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentDataAttributesStatus, UnsetType]=unset, **kwargs): + """ + The attributes of a component. + + :param components: If the component is of type ``group`` , the components within the group. + :type components: [StatusPagesComponentDataAttributesComponentsItems], optional + + :param created_at: Timestamp of when the component was created. + :type created_at: datetime, optional + + :param modified_at: Timestamp of when the component was last modified. + :type modified_at: datetime, optional + + :param name: The name of the component. + :type name: str, optional + + :param position: The zero-indexed position of the component. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentDataAttributesStatus, optional + + :param type: The type of the component. + :type type: CreateComponentRequestDataAttributesType + """ + if components is not unset: + kwargs["components"] = components + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_data_attributes_components_items.py b/datadog_api_client/v2/model/status_pages_component_data_attributes_components_items.py new file mode 100644 index 0000000000..ccf75fef15 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_attributes_components_items.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + +class StatusPagesComponentDataAttributesComponentsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + return { + "id": (UUID,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentGroupAttributesComponentsItemsStatus,), + "type": (StatusPagesComponentGroupAttributesComponentsItemsType,), + } + attribute_map = { + "id": "id", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + read_only_vars = { + "id", + "status", + } + + def __init__(self_, id: Union[UUID, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentGroupAttributesComponentsItemsStatus, UnsetType]=unset, type: Union[StatusPagesComponentGroupAttributesComponentsItemsType, UnsetType]=unset, **kwargs): + """ + A component within a component group. + + :param id: The ID of the component within the group. + :type id: UUID, optional + + :param name: The name of the component within the group. + :type name: str, optional + + :param position: The zero-indexed position of the component within the group. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentGroupAttributesComponentsItemsStatus, optional + + :param type: The type of the component. + :type type: StatusPagesComponentGroupAttributesComponentsItemsType, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_pages_component_data_attributes_status.py b/datadog_api_client/v2/model/status_pages_component_data_attributes_status.py new file mode 100644 index 0000000000..3b734df075 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_attributes_status.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatusPagesComponentDataAttributesStatus(ModelSimple): + """ + The status of the component. + + :param value: Must be one of ["operational", "degraded", "partial_outage", "major_outage", "maintenance"]. + :type value: str + """ + + allowed_values = { + "operational", + "degraded", + "partial_outage", + "major_outage", + "maintenance", + } + OPERATIONAL: ClassVar["StatusPagesComponentDataAttributesStatus"] + DEGRADED: ClassVar["StatusPagesComponentDataAttributesStatus"] + PARTIAL_OUTAGE: ClassVar["StatusPagesComponentDataAttributesStatus"] + MAJOR_OUTAGE: ClassVar["StatusPagesComponentDataAttributesStatus"] + MAINTENANCE: ClassVar["StatusPagesComponentDataAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatusPagesComponentDataAttributesStatus.OPERATIONAL = StatusPagesComponentDataAttributesStatus("operational") +StatusPagesComponentDataAttributesStatus.DEGRADED = StatusPagesComponentDataAttributesStatus("degraded") +StatusPagesComponentDataAttributesStatus.PARTIAL_OUTAGE = StatusPagesComponentDataAttributesStatus("partial_outage") +StatusPagesComponentDataAttributesStatus.MAJOR_OUTAGE = StatusPagesComponentDataAttributesStatus("major_outage") +StatusPagesComponentDataAttributesStatus.MAINTENANCE = StatusPagesComponentDataAttributesStatus("maintenance") diff --git a/datadog_api_client/v2/model/status_pages_component_data_relationships.py b/datadog_api_client/v2/model/status_pages_component_data_relationships.py new file mode 100644 index 0000000000..7906f2a4c5 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_relationships.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_relationships_created_by_user import StatusPagesComponentDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.status_pages_component_data_relationships_group import StatusPagesComponentDataRelationshipsGroup + from datadog_api_client.v2.model.status_pages_component_data_relationships_last_modified_by_user import StatusPagesComponentDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.status_pages_component_data_relationships_status_page import StatusPagesComponentDataRelationshipsStatusPage + +class StatusPagesComponentDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_relationships_created_by_user import StatusPagesComponentDataRelationshipsCreatedByUser + from datadog_api_client.v2.model.status_pages_component_data_relationships_group import StatusPagesComponentDataRelationshipsGroup + from datadog_api_client.v2.model.status_pages_component_data_relationships_last_modified_by_user import StatusPagesComponentDataRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.status_pages_component_data_relationships_status_page import StatusPagesComponentDataRelationshipsStatusPage + return { + "created_by_user": (StatusPagesComponentDataRelationshipsCreatedByUser,), + "group": (StatusPagesComponentDataRelationshipsGroup,), + "last_modified_by_user": (StatusPagesComponentDataRelationshipsLastModifiedByUser,), + "status_page": (StatusPagesComponentDataRelationshipsStatusPage,), + } + attribute_map = { + "created_by_user": "created_by_user", + "group": "group", + "last_modified_by_user": "last_modified_by_user", + "status_page": "status_page", + } + + def __init__(self_, created_by_user: Union[StatusPagesComponentDataRelationshipsCreatedByUser, UnsetType]=unset, group: Union[StatusPagesComponentDataRelationshipsGroup, UnsetType]=unset, last_modified_by_user: Union[StatusPagesComponentDataRelationshipsLastModifiedByUser, UnsetType]=unset, status_page: Union[StatusPagesComponentDataRelationshipsStatusPage, UnsetType]=unset, **kwargs): + """ + The relationships of a component. + + :param created_by_user: The Datadog user who created the component. + :type created_by_user: StatusPagesComponentDataRelationshipsCreatedByUser, optional + + :param group: The group the component belongs to. + :type group: StatusPagesComponentDataRelationshipsGroup, optional + + :param last_modified_by_user: The Datadog user who last modified the component. + :type last_modified_by_user: StatusPagesComponentDataRelationshipsLastModifiedByUser, optional + + :param status_page: The status page the component belongs to. + :type status_page: StatusPagesComponentDataRelationshipsStatusPage, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if group is not unset: + kwargs["group"] = group + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if status_page is not unset: + kwargs["status_page"] = status_page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_pages_component_data_relationships_created_by_user.py b/datadog_api_client/v2/model/status_pages_component_data_relationships_created_by_user.py new file mode 100644 index 0000000000..26b537afd6 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_relationships_created_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_relationships_created_by_user_data import StatusPagesComponentDataRelationshipsCreatedByUserData + +class StatusPagesComponentDataRelationshipsCreatedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_relationships_created_by_user_data import StatusPagesComponentDataRelationshipsCreatedByUserData + return { + "data": (StatusPagesComponentDataRelationshipsCreatedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPagesComponentDataRelationshipsCreatedByUserData, **kwargs): + """ + The Datadog user who created the component. + + :param data: The data object identifying the Datadog user who created the component. + :type data: StatusPagesComponentDataRelationshipsCreatedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_pages_component_data_relationships_created_by_user_data.py b/datadog_api_client/v2/model/status_pages_component_data_relationships_created_by_user_data.py new file mode 100644 index 0000000000..0d8f8627f4 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_relationships_created_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class StatusPagesComponentDataRelationshipsCreatedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who created the component. + + :param id: The ID of the Datadog user who created the component. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_data_relationships_group.py b/datadog_api_client/v2/model/status_pages_component_data_relationships_group.py new file mode 100644 index 0000000000..1c0f5ad365 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_relationships_group.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_relationships_group_data import StatusPagesComponentDataRelationshipsGroupData + +class StatusPagesComponentDataRelationshipsGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_relationships_group_data import StatusPagesComponentDataRelationshipsGroupData + return { + "data": (StatusPagesComponentDataRelationshipsGroupData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[StatusPagesComponentDataRelationshipsGroupData, none_type], **kwargs): + """ + The group the component belongs to. + + :param data: The data object identifying the group the component belongs to. + :type data: StatusPagesComponentDataRelationshipsGroupData, none_type + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_pages_component_data_relationships_group_data.py b/datadog_api_client/v2/model/status_pages_component_data_relationships_group_data.py new file mode 100644 index 0000000000..ed21839b68 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_relationships_group_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + +class StatusPagesComponentDataRelationshipsGroupData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + return { + "id": (UUID,), + "type": (StatusPagesComponentGroupType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPagesComponentGroupType, **kwargs): + """ + The data object identifying the group the component belongs to. + + :param id: The ID of the group the component belongs to. + :type id: UUID + + :param type: Components resource type. + :type type: StatusPagesComponentGroupType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_data_relationships_last_modified_by_user.py b/datadog_api_client/v2/model/status_pages_component_data_relationships_last_modified_by_user.py new file mode 100644 index 0000000000..77c35858a6 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_relationships_last_modified_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_relationships_last_modified_by_user_data import StatusPagesComponentDataRelationshipsLastModifiedByUserData + +class StatusPagesComponentDataRelationshipsLastModifiedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_relationships_last_modified_by_user_data import StatusPagesComponentDataRelationshipsLastModifiedByUserData + return { + "data": (StatusPagesComponentDataRelationshipsLastModifiedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPagesComponentDataRelationshipsLastModifiedByUserData, **kwargs): + """ + The Datadog user who last modified the component. + + :param data: The data object identifying the Datadog user who last modified the component. + :type data: StatusPagesComponentDataRelationshipsLastModifiedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_pages_component_data_relationships_last_modified_by_user_data.py b/datadog_api_client/v2/model/status_pages_component_data_relationships_last_modified_by_user_data.py new file mode 100644 index 0000000000..751614a002 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_relationships_last_modified_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class StatusPagesComponentDataRelationshipsLastModifiedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who last modified the component. + + :param id: The ID of the Datadog user who last modified the component. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_data_relationships_status_page.py b/datadog_api_client/v2/model/status_pages_component_data_relationships_status_page.py new file mode 100644 index 0000000000..8cd1346844 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_relationships_status_page.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_data_relationships_status_page_data import StatusPagesComponentDataRelationshipsStatusPageData + +class StatusPagesComponentDataRelationshipsStatusPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_data_relationships_status_page_data import StatusPagesComponentDataRelationshipsStatusPageData + return { + "data": (StatusPagesComponentDataRelationshipsStatusPageData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPagesComponentDataRelationshipsStatusPageData, **kwargs): + """ + The status page the component belongs to. + + :param data: The data object identifying the status page the component belongs to. + :type data: StatusPagesComponentDataRelationshipsStatusPageData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_pages_component_data_relationships_status_page_data.py b/datadog_api_client/v2/model/status_pages_component_data_relationships_status_page_data.py new file mode 100644 index 0000000000..5c99ba1a1c --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_data_relationships_status_page_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class StatusPagesComponentDataRelationshipsStatusPageData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "id": (UUID,), + "type": (StatusPageDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPageDataType, **kwargs): + """ + The data object identifying the status page the component belongs to. + + :param id: The ID of the status page the component belongs to. + :type id: UUID + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_group.py b/datadog_api_client/v2/model/status_pages_component_group.py new file mode 100644 index 0000000000..429c237aea --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_attributes import StatusPagesComponentGroupAttributes + from datadog_api_client.v2.model.status_pages_component_group_relationships import StatusPagesComponentGroupRelationships + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + +class StatusPagesComponentGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_attributes import StatusPagesComponentGroupAttributes + from datadog_api_client.v2.model.status_pages_component_group_relationships import StatusPagesComponentGroupRelationships + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + return { + "attributes": (StatusPagesComponentGroupAttributes,), + "id": (UUID,), + "relationships": (StatusPagesComponentGroupRelationships,), + "type": (StatusPagesComponentGroupType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: StatusPagesComponentGroupType, attributes: Union[StatusPagesComponentGroupAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, relationships: Union[StatusPagesComponentGroupRelationships, UnsetType]=unset, **kwargs): + """ + The included component group resource. + + :param attributes: The attributes of a component group. + :type attributes: StatusPagesComponentGroupAttributes, optional + + :param id: The ID of the component. + :type id: UUID, optional + + :param relationships: The relationships of a component group. + :type relationships: StatusPagesComponentGroupRelationships, optional + + :param type: Components resource type. + :type type: StatusPagesComponentGroupType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_group_attributes.py b/datadog_api_client/v2/model/status_pages_component_group_attributes.py new file mode 100644 index 0000000000..9cf89b2d5f --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items import StatusPagesComponentGroupAttributesComponentsItems + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + +class StatusPagesComponentGroupAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items import StatusPagesComponentGroupAttributesComponentsItems + from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus + from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType + return { + "components": ([StatusPagesComponentGroupAttributesComponentsItems],), + "created_at": (datetime,), + "modified_at": (datetime,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentDataAttributesStatus,), + "type": (CreateComponentRequestDataAttributesType,), + } + attribute_map = { + "components": "components", + "created_at": "created_at", + "modified_at": "modified_at", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + + def __init__(self_, type: CreateComponentRequestDataAttributesType, components: Union[List[StatusPagesComponentGroupAttributesComponentsItems], UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentDataAttributesStatus, UnsetType]=unset, **kwargs): + """ + The attributes of a component group. + + :param components: If the component is of type ``group`` , the components within the group. + :type components: [StatusPagesComponentGroupAttributesComponentsItems], optional + + :param created_at: Timestamp of when the component was created. + :type created_at: datetime, optional + + :param modified_at: Timestamp of when the component was last modified. + :type modified_at: datetime, optional + + :param name: The name of the component. + :type name: str, optional + + :param position: The zero-indexed position of the component. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentDataAttributesStatus, optional + + :param type: The type of the component. + :type type: CreateComponentRequestDataAttributesType + """ + if components is not unset: + kwargs["components"] = components + if created_at is not unset: + kwargs["created_at"] = created_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_group_attributes_components_items.py b/datadog_api_client/v2/model/status_pages_component_group_attributes_components_items.py new file mode 100644 index 0000000000..6d094e4bf6 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_attributes_components_items.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + +class StatusPagesComponentGroupAttributesComponentsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus + from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType + return { + "id": (UUID,), + "name": (str,), + "position": (int,), + "status": (StatusPagesComponentGroupAttributesComponentsItemsStatus,), + "type": (StatusPagesComponentGroupAttributesComponentsItemsType,), + } + attribute_map = { + "id": "id", + "name": "name", + "position": "position", + "status": "status", + "type": "type", + } + read_only_vars = { + "id", + "status", + } + + def __init__(self_, id: Union[UUID, UnsetType]=unset, name: Union[str, UnsetType]=unset, position: Union[int, UnsetType]=unset, status: Union[StatusPagesComponentGroupAttributesComponentsItemsStatus, UnsetType]=unset, type: Union[StatusPagesComponentGroupAttributesComponentsItemsType, UnsetType]=unset, **kwargs): + """ + A component within a component group. + + :param id: The ID of the grouped component. + :type id: UUID, optional + + :param name: The name of the grouped component. + :type name: str, optional + + :param position: The zero-indexed position of the grouped component. Relative to the other components in the group. + :type position: int, optional + + :param status: The status of the component. + :type status: StatusPagesComponentGroupAttributesComponentsItemsStatus, optional + + :param type: The type of the component. + :type type: StatusPagesComponentGroupAttributesComponentsItemsType, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if position is not unset: + kwargs["position"] = position + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_pages_component_group_attributes_components_items_status.py b/datadog_api_client/v2/model/status_pages_component_group_attributes_components_items_status.py new file mode 100644 index 0000000000..13d0cab287 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_attributes_components_items_status.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatusPagesComponentGroupAttributesComponentsItemsStatus(ModelSimple): + """ + The status of the component. + + :param value: Must be one of ["operational", "degraded", "partial_outage", "major_outage", "maintenance"]. + :type value: str + """ + + allowed_values = { + "operational", + "degraded", + "partial_outage", + "major_outage", + "maintenance", + } + OPERATIONAL: ClassVar["StatusPagesComponentGroupAttributesComponentsItemsStatus"] + DEGRADED: ClassVar["StatusPagesComponentGroupAttributesComponentsItemsStatus"] + PARTIAL_OUTAGE: ClassVar["StatusPagesComponentGroupAttributesComponentsItemsStatus"] + MAJOR_OUTAGE: ClassVar["StatusPagesComponentGroupAttributesComponentsItemsStatus"] + MAINTENANCE: ClassVar["StatusPagesComponentGroupAttributesComponentsItemsStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatusPagesComponentGroupAttributesComponentsItemsStatus.OPERATIONAL = StatusPagesComponentGroupAttributesComponentsItemsStatus("operational") +StatusPagesComponentGroupAttributesComponentsItemsStatus.DEGRADED = StatusPagesComponentGroupAttributesComponentsItemsStatus("degraded") +StatusPagesComponentGroupAttributesComponentsItemsStatus.PARTIAL_OUTAGE = StatusPagesComponentGroupAttributesComponentsItemsStatus("partial_outage") +StatusPagesComponentGroupAttributesComponentsItemsStatus.MAJOR_OUTAGE = StatusPagesComponentGroupAttributesComponentsItemsStatus("major_outage") +StatusPagesComponentGroupAttributesComponentsItemsStatus.MAINTENANCE = StatusPagesComponentGroupAttributesComponentsItemsStatus("maintenance") diff --git a/datadog_api_client/v2/model/status_pages_component_group_attributes_components_items_type.py b/datadog_api_client/v2/model/status_pages_component_group_attributes_components_items_type.py new file mode 100644 index 0000000000..8ca6252b11 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_attributes_components_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatusPagesComponentGroupAttributesComponentsItemsType(ModelSimple): + """ + The type of the component. + + :param value: If omitted defaults to "component". Must be one of ["component"]. + :type value: str + """ + + allowed_values = { + "component", + } + COMPONENT: ClassVar["StatusPagesComponentGroupAttributesComponentsItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatusPagesComponentGroupAttributesComponentsItemsType.COMPONENT = StatusPagesComponentGroupAttributesComponentsItemsType("component") diff --git a/datadog_api_client/v2/model/status_pages_component_group_relationships.py b/datadog_api_client/v2/model/status_pages_component_group_relationships.py new file mode 100644 index 0000000000..1864167b2d --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_relationships.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_relationships_created_by_user import StatusPagesComponentGroupRelationshipsCreatedByUser + from datadog_api_client.v2.model.status_pages_component_group_relationships_group import StatusPagesComponentGroupRelationshipsGroup + from datadog_api_client.v2.model.status_pages_component_group_relationships_last_modified_by_user import StatusPagesComponentGroupRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.status_pages_component_group_relationships_status_page import StatusPagesComponentGroupRelationshipsStatusPage + +class StatusPagesComponentGroupRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_relationships_created_by_user import StatusPagesComponentGroupRelationshipsCreatedByUser + from datadog_api_client.v2.model.status_pages_component_group_relationships_group import StatusPagesComponentGroupRelationshipsGroup + from datadog_api_client.v2.model.status_pages_component_group_relationships_last_modified_by_user import StatusPagesComponentGroupRelationshipsLastModifiedByUser + from datadog_api_client.v2.model.status_pages_component_group_relationships_status_page import StatusPagesComponentGroupRelationshipsStatusPage + return { + "created_by_user": (StatusPagesComponentGroupRelationshipsCreatedByUser,), + "group": (StatusPagesComponentGroupRelationshipsGroup,), + "last_modified_by_user": (StatusPagesComponentGroupRelationshipsLastModifiedByUser,), + "status_page": (StatusPagesComponentGroupRelationshipsStatusPage,), + } + attribute_map = { + "created_by_user": "created_by_user", + "group": "group", + "last_modified_by_user": "last_modified_by_user", + "status_page": "status_page", + } + + def __init__(self_, created_by_user: Union[StatusPagesComponentGroupRelationshipsCreatedByUser, UnsetType]=unset, group: Union[StatusPagesComponentGroupRelationshipsGroup, UnsetType]=unset, last_modified_by_user: Union[StatusPagesComponentGroupRelationshipsLastModifiedByUser, UnsetType]=unset, status_page: Union[StatusPagesComponentGroupRelationshipsStatusPage, UnsetType]=unset, **kwargs): + """ + The relationships of a component group. + + :param created_by_user: The Datadog user who created the component group. + :type created_by_user: StatusPagesComponentGroupRelationshipsCreatedByUser, optional + + :param group: The group the component group belongs to. + :type group: StatusPagesComponentGroupRelationshipsGroup, optional + + :param last_modified_by_user: The Datadog user who last modified the component group. + :type last_modified_by_user: StatusPagesComponentGroupRelationshipsLastModifiedByUser, optional + + :param status_page: The status page the component group belongs to. + :type status_page: StatusPagesComponentGroupRelationshipsStatusPage, optional + """ + if created_by_user is not unset: + kwargs["created_by_user"] = created_by_user + if group is not unset: + kwargs["group"] = group + if last_modified_by_user is not unset: + kwargs["last_modified_by_user"] = last_modified_by_user + if status_page is not unset: + kwargs["status_page"] = status_page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_pages_component_group_relationships_created_by_user.py b/datadog_api_client/v2/model/status_pages_component_group_relationships_created_by_user.py new file mode 100644 index 0000000000..6a280fee78 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_relationships_created_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_relationships_created_by_user_data import StatusPagesComponentGroupRelationshipsCreatedByUserData + +class StatusPagesComponentGroupRelationshipsCreatedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_relationships_created_by_user_data import StatusPagesComponentGroupRelationshipsCreatedByUserData + return { + "data": (StatusPagesComponentGroupRelationshipsCreatedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPagesComponentGroupRelationshipsCreatedByUserData, **kwargs): + """ + The Datadog user who created the component group. + + :param data: The data object identifying the Datadog user who created the component group. + :type data: StatusPagesComponentGroupRelationshipsCreatedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_pages_component_group_relationships_created_by_user_data.py b/datadog_api_client/v2/model/status_pages_component_group_relationships_created_by_user_data.py new file mode 100644 index 0000000000..f2c5d9720b --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_relationships_created_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class StatusPagesComponentGroupRelationshipsCreatedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who created the component group. + + :param id: The ID of the Datadog user who created the component group. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_group_relationships_group.py b/datadog_api_client/v2/model/status_pages_component_group_relationships_group.py new file mode 100644 index 0000000000..c134c1cc35 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_relationships_group.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_relationships_group_data import StatusPagesComponentGroupRelationshipsGroupData + +class StatusPagesComponentGroupRelationshipsGroup(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_relationships_group_data import StatusPagesComponentGroupRelationshipsGroupData + return { + "data": (StatusPagesComponentGroupRelationshipsGroupData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[StatusPagesComponentGroupRelationshipsGroupData, none_type], **kwargs): + """ + The group the component group belongs to. + + :param data: The data object identifying the parent group of a component group. + :type data: StatusPagesComponentGroupRelationshipsGroupData, none_type + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_pages_component_group_relationships_group_data.py b/datadog_api_client/v2/model/status_pages_component_group_relationships_group_data.py new file mode 100644 index 0000000000..f531a8e750 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_relationships_group_data.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + +class StatusPagesComponentGroupRelationshipsGroupData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType + return { + "id": (UUID,), + "type": (StatusPagesComponentGroupType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPagesComponentGroupType, **kwargs): + """ + The data object identifying the parent group of a component group. + + :param id: The ID of the parent group. + :type id: UUID + + :param type: Components resource type. + :type type: StatusPagesComponentGroupType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_group_relationships_last_modified_by_user.py b/datadog_api_client/v2/model/status_pages_component_group_relationships_last_modified_by_user.py new file mode 100644 index 0000000000..517d9871f3 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_relationships_last_modified_by_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_relationships_last_modified_by_user_data import StatusPagesComponentGroupRelationshipsLastModifiedByUserData + +class StatusPagesComponentGroupRelationshipsLastModifiedByUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_relationships_last_modified_by_user_data import StatusPagesComponentGroupRelationshipsLastModifiedByUserData + return { + "data": (StatusPagesComponentGroupRelationshipsLastModifiedByUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPagesComponentGroupRelationshipsLastModifiedByUserData, **kwargs): + """ + The Datadog user who last modified the component group. + + :param data: The data object identifying the Datadog user who last modified the component group. + :type data: StatusPagesComponentGroupRelationshipsLastModifiedByUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_pages_component_group_relationships_last_modified_by_user_data.py b/datadog_api_client/v2/model/status_pages_component_group_relationships_last_modified_by_user_data.py new file mode 100644 index 0000000000..1ca2c46d0a --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_relationships_last_modified_by_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class StatusPagesComponentGroupRelationshipsLastModifiedByUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "id": (str,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: StatusPagesUserType, **kwargs): + """ + The data object identifying the Datadog user who last modified the component group. + + :param id: The ID of the Datadog user who last modified the component group. + :type id: str + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_group_relationships_status_page.py b/datadog_api_client/v2/model/status_pages_component_group_relationships_status_page.py new file mode 100644 index 0000000000..ab074f21d8 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_relationships_status_page.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_component_group_relationships_status_page_data import StatusPagesComponentGroupRelationshipsStatusPageData + +class StatusPagesComponentGroupRelationshipsStatusPage(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_component_group_relationships_status_page_data import StatusPagesComponentGroupRelationshipsStatusPageData + return { + "data": (StatusPagesComponentGroupRelationshipsStatusPageData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatusPagesComponentGroupRelationshipsStatusPageData, **kwargs): + """ + The status page the component group belongs to. + + :param data: The data object identifying the status page the component group belongs to. + :type data: StatusPagesComponentGroupRelationshipsStatusPageData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/status_pages_component_group_relationships_status_page_data.py b/datadog_api_client/v2/model/status_pages_component_group_relationships_status_page_data.py new file mode 100644 index 0000000000..5e1737f4d3 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_relationships_status_page_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + +class StatusPagesComponentGroupRelationshipsStatusPageData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType + return { + "id": (UUID,), + "type": (StatusPageDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: StatusPageDataType, **kwargs): + """ + The data object identifying the status page the component group belongs to. + + :param id: The ID of the status page. + :type id: UUID + + :param type: Status pages resource type. + :type type: StatusPageDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_component_group_type.py b/datadog_api_client/v2/model/status_pages_component_group_type.py new file mode 100644 index 0000000000..bd54acd030 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_component_group_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatusPagesComponentGroupType(ModelSimple): + """ + Components resource type. + + :param value: If omitted defaults to "components". Must be one of ["components"]. + :type value: str + """ + + allowed_values = { + "components", + } + COMPONENTS: ClassVar["StatusPagesComponentGroupType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatusPagesComponentGroupType.COMPONENTS = StatusPagesComponentGroupType("components") diff --git a/datadog_api_client/v2/model/status_pages_user.py b/datadog_api_client/v2/model/status_pages_user.py new file mode 100644 index 0000000000..c64c161ea3 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_user.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.status_pages_user_attributes import StatusPagesUserAttributes + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + +class StatusPagesUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.status_pages_user_attributes import StatusPagesUserAttributes + from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType + return { + "attributes": (StatusPagesUserAttributes,), + "id": (UUID,), + "type": (StatusPagesUserType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: StatusPagesUserType, attributes: Union[StatusPagesUserAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + The included Datadog user resource. + + :param attributes: Attributes of the Datadog user. + :type attributes: StatusPagesUserAttributes, optional + + :param id: The ID of the Datadog user. + :type id: UUID, optional + + :param type: Users resource type. + :type type: StatusPagesUserType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/status_pages_user_attributes.py b/datadog_api_client/v2/model/status_pages_user_attributes.py new file mode 100644 index 0000000000..0fd5001fd1 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_user_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatusPagesUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "icon": (str,), + "name": (str,), + "uuid": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "icon": "icon", + "name": "name", + "uuid": "uuid", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, icon: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, uuid: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the Datadog user. + + :param email: The email of the Datadog user. + :type email: str, optional + + :param handle: The handle of the Datadog user. + :type handle: str, optional + + :param icon: The icon of the Datadog user. + :type icon: str, optional + + :param name: The name of the Datadog user. + :type name: str, optional + + :param uuid: The UUID of the Datadog user. + :type uuid: str, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if icon is not unset: + kwargs["icon"] = icon + if name is not unset: + kwargs["name"] = name + if uuid is not unset: + kwargs["uuid"] = uuid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/status_pages_user_type.py b/datadog_api_client/v2/model/status_pages_user_type.py new file mode 100644 index 0000000000..bc68a2e955 --- /dev/null +++ b/datadog_api_client/v2/model/status_pages_user_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatusPagesUserType(ModelSimple): + """ + Users resource type. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["StatusPagesUserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatusPagesUserType.USERS = StatusPagesUserType("users") diff --git a/datadog_api_client/v2/model/statuspage_account_create_attributes.py b/datadog_api_client/v2/model/statuspage_account_create_attributes.py new file mode 100644 index 0000000000..c70429a08d --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_create_attributes.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatuspageAccountCreateAttributes(ModelNormal): + validations = { + "api_key": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "api_key": (str,), + } + attribute_map = { + "api_key": "api_key", + } + + def __init__(self_, api_key: str, **kwargs): + """ + The Statuspage account attributes for a create request. + + :param api_key: The Statuspage API key for your Statuspage account. + :type api_key: str + """ + super().__init__(kwargs) + + + self_.api_key = api_key diff --git a/datadog_api_client/v2/model/statuspage_account_create_data.py b/datadog_api_client/v2/model/statuspage_account_create_data.py new file mode 100644 index 0000000000..190e48e120 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_account_create_attributes import StatuspageAccountCreateAttributes + from datadog_api_client.v2.model.statuspage_account_type import StatuspageAccountType + +class StatuspageAccountCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_account_create_attributes import StatuspageAccountCreateAttributes + from datadog_api_client.v2.model.statuspage_account_type import StatuspageAccountType + return { + "attributes": (StatuspageAccountCreateAttributes,), + "type": (StatuspageAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: StatuspageAccountCreateAttributes, type: StatuspageAccountType, **kwargs): + """ + Statuspage account data for a create request. + + :param attributes: The Statuspage account attributes for a create request. + :type attributes: StatuspageAccountCreateAttributes + + :param type: Statuspage account resource type. + :type type: StatuspageAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/statuspage_account_create_request.py b/datadog_api_client/v2/model/statuspage_account_create_request.py new file mode 100644 index 0000000000..77713390a7 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_account_create_data import StatuspageAccountCreateData + +class StatuspageAccountCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_account_create_data import StatuspageAccountCreateData + return { + "data": (StatuspageAccountCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatuspageAccountCreateData, **kwargs): + """ + Create request for a Statuspage account. + + :param data: Statuspage account data for a create request. + :type data: StatuspageAccountCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/statuspage_account_response.py b/datadog_api_client/v2/model/statuspage_account_response.py new file mode 100644 index 0000000000..596e3b2052 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_account_response_data import StatuspageAccountResponseData + +class StatuspageAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_account_response_data import StatuspageAccountResponseData + return { + "data": (StatuspageAccountResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatuspageAccountResponseData, **kwargs): + """ + Response containing a Statuspage account. + + :param data: Statuspage account data from a response. + :type data: StatuspageAccountResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/statuspage_account_response_attributes.py b/datadog_api_client/v2/model/statuspage_account_response_attributes.py new file mode 100644 index 0000000000..a40ec308ab --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatuspageAccountResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_key": (str,), + } + attribute_map = { + "api_key": "api_key", + } + + def __init__(self_, api_key: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes from a Statuspage account response. + + :param api_key: The Statuspage API key for your Statuspage account. The value is always returned masked. + :type api_key: str, optional + """ + if api_key is not unset: + kwargs["api_key"] = api_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/statuspage_account_response_data.py b/datadog_api_client/v2/model/statuspage_account_response_data.py new file mode 100644 index 0000000000..70a925bea4 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_account_response_attributes import StatuspageAccountResponseAttributes + from datadog_api_client.v2.model.statuspage_account_type import StatuspageAccountType + +class StatuspageAccountResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_account_response_attributes import StatuspageAccountResponseAttributes + from datadog_api_client.v2.model.statuspage_account_type import StatuspageAccountType + return { + "attributes": (StatuspageAccountResponseAttributes,), + "type": (StatuspageAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: StatuspageAccountResponseAttributes, type: StatuspageAccountType, **kwargs): + """ + Statuspage account data from a response. + + :param attributes: The attributes from a Statuspage account response. + :type attributes: StatuspageAccountResponseAttributes + + :param type: Statuspage account resource type. + :type type: StatuspageAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/statuspage_account_type.py b/datadog_api_client/v2/model/statuspage_account_type.py new file mode 100644 index 0000000000..2ca4767a54 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatuspageAccountType(ModelSimple): + """ + Statuspage account resource type. + + :param value: If omitted defaults to "statuspage-account". Must be one of ["statuspage-account"]. + :type value: str + """ + + allowed_values = { + "statuspage-account", + } + STATUSPAGE_ACCOUNT: ClassVar["StatuspageAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatuspageAccountType.STATUSPAGE_ACCOUNT = StatuspageAccountType("statuspage-account") diff --git a/datadog_api_client/v2/model/statuspage_account_update_attributes.py b/datadog_api_client/v2/model/statuspage_account_update_attributes.py new file mode 100644 index 0000000000..ab1f3bacdc --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_update_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatuspageAccountUpdateAttributes(ModelNormal): + validations = { + "api_key": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "api_key": (str,), + } + attribute_map = { + "api_key": "api_key", + } + + def __init__(self_, api_key: Union[str, UnsetType]=unset, **kwargs): + """ + The Statuspage account attributes for an update request. + + :param api_key: The Statuspage API key for your Statuspage account. + :type api_key: str, optional + """ + if api_key is not unset: + kwargs["api_key"] = api_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/statuspage_account_update_data.py b/datadog_api_client/v2/model/statuspage_account_update_data.py new file mode 100644 index 0000000000..b5b49800d9 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_account_update_attributes import StatuspageAccountUpdateAttributes + from datadog_api_client.v2.model.statuspage_account_type import StatuspageAccountType + +class StatuspageAccountUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_account_update_attributes import StatuspageAccountUpdateAttributes + from datadog_api_client.v2.model.statuspage_account_type import StatuspageAccountType + return { + "attributes": (StatuspageAccountUpdateAttributes,), + "type": (StatuspageAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: StatuspageAccountUpdateAttributes, type: StatuspageAccountType, **kwargs): + """ + Statuspage account data for an update request. + + :param attributes: The Statuspage account attributes for an update request. + :type attributes: StatuspageAccountUpdateAttributes + + :param type: Statuspage account resource type. + :type type: StatuspageAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/statuspage_account_update_request.py b/datadog_api_client/v2/model/statuspage_account_update_request.py new file mode 100644 index 0000000000..f1989c78cd --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_account_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_account_update_data import StatuspageAccountUpdateData + +class StatuspageAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_account_update_data import StatuspageAccountUpdateData + return { + "data": (StatuspageAccountUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatuspageAccountUpdateData, **kwargs): + """ + Update request for a Statuspage account. + + :param data: Statuspage account data for an update request. + :type data: StatuspageAccountUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/statuspage_url_setting_create_attributes.py b/datadog_api_client/v2/model/statuspage_url_setting_create_attributes.py new file mode 100644 index 0000000000..e1acab28c6 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_create_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatuspageUrlSettingCreateAttributes(ModelNormal): + validations = { + "custom_tags": { + "min_length": 1, + }, + "url": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "custom_tags": (str,), + "url": (str,), + } + attribute_map = { + "custom_tags": "custom_tags", + "url": "url", + } + + def __init__(self_, custom_tags: str, url: str, **kwargs): + """ + The Statuspage URL setting attributes for a create request. + + :param custom_tags: Comma-separated list of custom tags to apply to events generated from this Statuspage URL. + :type custom_tags: str + + :param url: The Statuspage URL to monitor. Must be a ``status.io`` or ``statuspage.com`` URL. + :type url: str + """ + super().__init__(kwargs) + + + self_.custom_tags = custom_tags + self_.url = url diff --git a/datadog_api_client/v2/model/statuspage_url_setting_create_data.py b/datadog_api_client/v2/model/statuspage_url_setting_create_data.py new file mode 100644 index 0000000000..63f9ed6f0d --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_url_setting_create_attributes import StatuspageUrlSettingCreateAttributes + from datadog_api_client.v2.model.statuspage_url_setting_type import StatuspageUrlSettingType + +class StatuspageUrlSettingCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_url_setting_create_attributes import StatuspageUrlSettingCreateAttributes + from datadog_api_client.v2.model.statuspage_url_setting_type import StatuspageUrlSettingType + return { + "attributes": (StatuspageUrlSettingCreateAttributes,), + "type": (StatuspageUrlSettingType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: StatuspageUrlSettingCreateAttributes, type: StatuspageUrlSettingType, **kwargs): + """ + Statuspage URL setting data for a create request. + + :param attributes: The Statuspage URL setting attributes for a create request. + :type attributes: StatuspageUrlSettingCreateAttributes + + :param type: Statuspage URL setting resource type. + :type type: StatuspageUrlSettingType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/statuspage_url_setting_create_request.py b/datadog_api_client/v2/model/statuspage_url_setting_create_request.py new file mode 100644 index 0000000000..95dc5aeb4e --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_url_setting_create_data import StatuspageUrlSettingCreateData + +class StatuspageUrlSettingCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_url_setting_create_data import StatuspageUrlSettingCreateData + return { + "data": (StatuspageUrlSettingCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatuspageUrlSettingCreateData, **kwargs): + """ + Create request for a Statuspage URL setting. + + :param data: Statuspage URL setting data for a create request. + :type data: StatuspageUrlSettingCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/statuspage_url_setting_response.py b/datadog_api_client/v2/model/statuspage_url_setting_response.py new file mode 100644 index 0000000000..b3a7594ebb --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_url_setting_response_data import StatuspageUrlSettingResponseData + +class StatuspageUrlSettingResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_url_setting_response_data import StatuspageUrlSettingResponseData + return { + "data": (StatuspageUrlSettingResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatuspageUrlSettingResponseData, **kwargs): + """ + Response containing a Statuspage URL setting. + + :param data: Statuspage URL setting data from a response. + :type data: StatuspageUrlSettingResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/statuspage_url_setting_response_attributes.py b/datadog_api_client/v2/model/statuspage_url_setting_response_attributes.py new file mode 100644 index 0000000000..fe6391b542 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_response_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatuspageUrlSettingResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "custom_tags": (str,), + "url": (str,), + } + attribute_map = { + "custom_tags": "custom_tags", + "url": "url", + } + + def __init__(self_, custom_tags: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes from a Statuspage URL setting response. + + :param custom_tags: Comma-separated list of custom tags applied to events generated from this Statuspage URL. + :type custom_tags: str, optional + + :param url: The Statuspage URL being monitored. + :type url: str, optional + """ + if custom_tags is not unset: + kwargs["custom_tags"] = custom_tags + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/statuspage_url_setting_response_data.py b/datadog_api_client/v2/model/statuspage_url_setting_response_data.py new file mode 100644 index 0000000000..3361eee751 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_response_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_url_setting_response_attributes import StatuspageUrlSettingResponseAttributes + from datadog_api_client.v2.model.statuspage_url_setting_type import StatuspageUrlSettingType + +class StatuspageUrlSettingResponseData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_url_setting_response_attributes import StatuspageUrlSettingResponseAttributes + from datadog_api_client.v2.model.statuspage_url_setting_type import StatuspageUrlSettingType + return { + "attributes": (StatuspageUrlSettingResponseAttributes,), + "id": (str,), + "type": (StatuspageUrlSettingType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: StatuspageUrlSettingResponseAttributes, id: str, type: StatuspageUrlSettingType, **kwargs): + """ + Statuspage URL setting data from a response. + + :param attributes: The attributes from a Statuspage URL setting response. + :type attributes: StatuspageUrlSettingResponseAttributes + + :param id: The ID of the Statuspage URL setting. + :type id: str + + :param type: Statuspage URL setting resource type. + :type type: StatuspageUrlSettingType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/statuspage_url_setting_type.py b/datadog_api_client/v2/model/statuspage_url_setting_type.py new file mode 100644 index 0000000000..d12d65e311 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StatuspageUrlSettingType(ModelSimple): + """ + Statuspage URL setting resource type. + + :param value: If omitted defaults to "statuspage-url-setting". Must be one of ["statuspage-url-setting"]. + :type value: str + """ + + allowed_values = { + "statuspage-url-setting", + } + STATUSPAGE_URL_SETTING: ClassVar["StatuspageUrlSettingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StatuspageUrlSettingType.STATUSPAGE_URL_SETTING = StatuspageUrlSettingType("statuspage-url-setting") diff --git a/datadog_api_client/v2/model/statuspage_url_setting_update_attributes.py b/datadog_api_client/v2/model/statuspage_url_setting_update_attributes.py new file mode 100644 index 0000000000..f5f3c914cd --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_update_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StatuspageUrlSettingUpdateAttributes(ModelNormal): + validations = { + "custom_tags": { + "min_length": 1, + }, + "url": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "custom_tags": (str,), + "url": (str,), + } + attribute_map = { + "custom_tags": "custom_tags", + "url": "url", + } + + def __init__(self_, custom_tags: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + The Statuspage URL setting attributes for an update request. + + :param custom_tags: Comma-separated list of custom tags to apply to events generated from this Statuspage URL. + :type custom_tags: str, optional + + :param url: The Statuspage URL to monitor. + :type url: str, optional + """ + if custom_tags is not unset: + kwargs["custom_tags"] = custom_tags + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/statuspage_url_setting_update_data.py b/datadog_api_client/v2/model/statuspage_url_setting_update_data.py new file mode 100644 index 0000000000..5ebeec7dd4 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_update_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_url_setting_update_attributes import StatuspageUrlSettingUpdateAttributes + from datadog_api_client.v2.model.statuspage_url_setting_type import StatuspageUrlSettingType + +class StatuspageUrlSettingUpdateData(ModelNormal): + validations = { + "id": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_url_setting_update_attributes import StatuspageUrlSettingUpdateAttributes + from datadog_api_client.v2.model.statuspage_url_setting_type import StatuspageUrlSettingType + return { + "attributes": (StatuspageUrlSettingUpdateAttributes,), + "id": (str,), + "type": (StatuspageUrlSettingType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: StatuspageUrlSettingUpdateAttributes, id: str, type: StatuspageUrlSettingType, **kwargs): + """ + Statuspage URL setting data for an update request. + + :param attributes: The Statuspage URL setting attributes for an update request. + :type attributes: StatuspageUrlSettingUpdateAttributes + + :param id: The ID of the Statuspage URL setting. + :type id: str + + :param type: Statuspage URL setting resource type. + :type type: StatuspageUrlSettingType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/statuspage_url_setting_update_request.py b/datadog_api_client/v2/model/statuspage_url_setting_update_request.py new file mode 100644 index 0000000000..58664cf6a1 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_setting_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_url_setting_update_data import StatuspageUrlSettingUpdateData + +class StatuspageUrlSettingUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_url_setting_update_data import StatuspageUrlSettingUpdateData + return { + "data": (StatuspageUrlSettingUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: StatuspageUrlSettingUpdateData, **kwargs): + """ + Update request for a Statuspage URL setting. + + :param data: Statuspage URL setting data for an update request. + :type data: StatuspageUrlSettingUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/statuspage_url_settings_response.py b/datadog_api_client/v2/model/statuspage_url_settings_response.py new file mode 100644 index 0000000000..26c314cce0 --- /dev/null +++ b/datadog_api_client/v2/model/statuspage_url_settings_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.statuspage_url_setting_response_data import StatuspageUrlSettingResponseData + +class StatuspageUrlSettingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.statuspage_url_setting_response_data import StatuspageUrlSettingResponseData + return { + "data": ([StatuspageUrlSettingResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[StatuspageUrlSettingResponseData], **kwargs): + """ + Response with a list of Statuspage URL settings. + + :param data: An array of Statuspage URL settings. + :type data: [StatuspageUrlSettingResponseData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/stegadography_get_widgets_request.py b/datadog_api_client/v2/model/stegadography_get_widgets_request.py new file mode 100644 index 0000000000..717db7c0e1 --- /dev/null +++ b/datadog_api_client/v2/model/stegadography_get_widgets_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StegadographyGetWidgetsRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "image": (file_type,), + } + attribute_map = { + "image": "image", + } + + def __init__(self_, image: file_type, **kwargs): + """ + Multipart form data containing the PNG image to scan for watermarks. + + :param image: PNG image file to scan for embedded watermarks. + :type image: file_type + """ + super().__init__(kwargs) + + + self_.image = image diff --git a/datadog_api_client/v2/model/stegadography_get_widgets_response.py b/datadog_api_client/v2/model/stegadography_get_widgets_response.py new file mode 100644 index 0000000000..9aeae1129b --- /dev/null +++ b/datadog_api_client/v2/model/stegadography_get_widgets_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.stegadography_widget import StegadographyWidget + +class StegadographyGetWidgetsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.stegadography_widget import StegadographyWidget + return { + "data": ([StegadographyWidget],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[StegadographyWidget], **kwargs): + """ + Response containing watermarked widgets recovered from an image. + + :param data: List of watermarked widget resources recovered from an image. + :type data: [StegadographyWidget] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/stegadography_widget.py b/datadog_api_client/v2/model/stegadography_widget.py new file mode 100644 index 0000000000..580816d0f6 --- /dev/null +++ b/datadog_api_client/v2/model/stegadography_widget.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.stegadography_widget_attributes import StegadographyWidgetAttributes + from datadog_api_client.v2.model.stegadography_widget_type import StegadographyWidgetType + +class StegadographyWidget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.stegadography_widget_attributes import StegadographyWidgetAttributes + from datadog_api_client.v2.model.stegadography_widget_type import StegadographyWidgetType + return { + "attributes": (StegadographyWidgetAttributes,), + "id": (str,), + "type": (StegadographyWidgetType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: StegadographyWidgetAttributes, id: str, type: StegadographyWidgetType, **kwargs): + """ + A single watermarked widget resource recovered from an image. + + :param attributes: Attributes of a watermarked widget recovered from an image. + :type attributes: StegadographyWidgetAttributes + + :param id: Composite identifier formed from the organization ID and watermark, separated by a colon. + :type id: str + + :param type: Stegadography widget resource type. + :type type: StegadographyWidgetType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/stegadography_widget_attributes.py b/datadog_api_client/v2/model/stegadography_widget_attributes.py new file mode 100644 index 0000000000..65ca7b57f3 --- /dev/null +++ b/datadog_api_client/v2/model/stegadography_widget_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StegadographyWidgetAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "locationx": (int,), + "locationy": (int,), + "raw_data": (str,), + "watermark": (str,), + } + attribute_map = { + "locationx": "locationx", + "locationy": "locationy", + "raw_data": "rawData", + "watermark": "watermark", + } + + def __init__(self_, locationx: int, locationy: int, raw_data: str, watermark: str, **kwargs): + """ + Attributes of a watermarked widget recovered from an image. + + :param locationx: Horizontal pixel coordinate where the watermark was found in the image. + :type locationx: int + + :param locationy: Vertical pixel coordinate where the watermark was found in the image. + :type locationy: int + + :param raw_data: JSON-encoded string representing the widget state. + :type raw_data: str + + :param watermark: Hex-encoded watermark string identifying the widget. + :type watermark: str + """ + super().__init__(kwargs) + + + self_.locationx = locationx + self_.locationy = locationy + self_.raw_data = raw_data + self_.watermark = watermark diff --git a/datadog_api_client/v2/model/stegadography_widget_type.py b/datadog_api_client/v2/model/stegadography_widget_type.py new file mode 100644 index 0000000000..01abe13587 --- /dev/null +++ b/datadog_api_client/v2/model/stegadography_widget_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class StegadographyWidgetType(ModelSimple): + """ + Stegadography widget resource type. + + :param value: If omitted defaults to "widget". Must be one of ["widget"]. + :type value: str + """ + + allowed_values = { + "widget", + } + WIDGET: ClassVar["StegadographyWidgetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +StegadographyWidgetType.WIDGET = StegadographyWidgetType("widget") diff --git a/datadog_api_client/v2/model/step.py b/datadog_api_client/v2/model/step.py new file mode 100644 index 0000000000..37f592c2d2 --- /dev/null +++ b/datadog_api_client/v2/model/step.py @@ -0,0 +1,122 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.completion_gate import CompletionGate + from datadog_api_client.v2.model.step_display import StepDisplay + from datadog_api_client.v2.model.error_handler import ErrorHandler + from datadog_api_client.v2.model.outbound_edge import OutboundEdge + from datadog_api_client.v2.model.parameter import Parameter + from datadog_api_client.v2.model.readiness_gate import ReadinessGate + +class Step(ModelNormal): + validations = { + "action_id": { + "min_length": 1, + }, + "name": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.completion_gate import CompletionGate + from datadog_api_client.v2.model.step_display import StepDisplay + from datadog_api_client.v2.model.error_handler import ErrorHandler + from datadog_api_client.v2.model.outbound_edge import OutboundEdge + from datadog_api_client.v2.model.parameter import Parameter + from datadog_api_client.v2.model.readiness_gate import ReadinessGate + return { + "action_id": (str,), + "completion_gate": (CompletionGate,), + "connection_label": (str,), + "display": (StepDisplay,), + "error_handlers": ([ErrorHandler],), + "name": (str,), + "outbound_edges": ([OutboundEdge],), + "parameters": ([Parameter],), + "readiness_gate": (ReadinessGate,), + } + attribute_map = { + "action_id": "actionId", + "completion_gate": "completionGate", + "connection_label": "connectionLabel", + "display": "display", + "error_handlers": "errorHandlers", + "name": "name", + "outbound_edges": "outboundEdges", + "parameters": "parameters", + "readiness_gate": "readinessGate", + } + + def __init__(self_, action_id: str, name: str, completion_gate: Union[CompletionGate, UnsetType]=unset, connection_label: Union[str, UnsetType]=unset, display: Union[StepDisplay, UnsetType]=unset, error_handlers: Union[List[ErrorHandler], UnsetType]=unset, outbound_edges: Union[List[OutboundEdge], UnsetType]=unset, parameters: Union[List[Parameter], UnsetType]=unset, readiness_gate: Union[ReadinessGate, UnsetType]=unset, **kwargs): + """ + A Step is a sub-component of a workflow. Each Step performs an action. + + :param action_id: The unique identifier of an action. + :type action_id: str + + :param completion_gate: Used to create conditions before running subsequent actions. + :type completion_gate: CompletionGate, optional + + :param connection_label: The unique identifier of a connection defined in the spec. + :type connection_label: str, optional + + :param display: The position of a step on the workflow canvas. Omit ``display`` from every step to use + automatic layout, or provide it for every step to preserve a manual layout. + :type display: StepDisplay, optional + + :param error_handlers: The ``Step`` ``errorHandlers``. + :type error_handlers: [ErrorHandler], optional + + :param name: Name of the step. + :type name: str + + :param outbound_edges: A list of subsequent actions to run. This list is empty for a terminal step. + :type outbound_edges: [OutboundEdge], optional + + :param parameters: A list of inputs for an action. + :type parameters: [Parameter], optional + + :param readiness_gate: Used to merge multiple branches into a single branch. + :type readiness_gate: ReadinessGate, optional + """ + if completion_gate is not unset: + kwargs["completion_gate"] = completion_gate + if connection_label is not unset: + kwargs["connection_label"] = connection_label + if display is not unset: + kwargs["display"] = display + if error_handlers is not unset: + kwargs["error_handlers"] = error_handlers + if outbound_edges is not unset: + kwargs["outbound_edges"] = outbound_edges + if parameters is not unset: + kwargs["parameters"] = parameters + if readiness_gate is not unset: + kwargs["readiness_gate"] = readiness_gate + super().__init__(kwargs) + + + self_.action_id = action_id + self_.name = name diff --git a/datadog_api_client/v2/model/step_display.py b/datadog_api_client/v2/model/step_display.py new file mode 100644 index 0000000000..d5e638adbc --- /dev/null +++ b/datadog_api_client/v2/model/step_display.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.step_display_bounds import StepDisplayBounds + +class StepDisplay(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.step_display_bounds import StepDisplayBounds + return { + "bounds": (StepDisplayBounds,), + } + attribute_map = { + "bounds": "bounds", + } + + def __init__(self_, bounds: Union[StepDisplayBounds, UnsetType]=unset, **kwargs): + """ + The position of a step on the workflow canvas. Omit ``display`` from every step to use + automatic layout, or provide it for every step to preserve a manual layout. + + :param bounds: The definition of ``StepDisplayBounds`` object. + :type bounds: StepDisplayBounds, optional + """ + if bounds is not unset: + kwargs["bounds"] = bounds + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/step_display_bounds.py b/datadog_api_client/v2/model/step_display_bounds.py new file mode 100644 index 0000000000..b4319f2865 --- /dev/null +++ b/datadog_api_client/v2/model/step_display_bounds.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class StepDisplayBounds(ModelNormal): + @cached_property + def openapi_types(_): + return { + "x": (float,), + "y": (float,), + } + attribute_map = { + "x": "x", + "y": "y", + } + + def __init__(self_, x: Union[float, UnsetType]=unset, y: Union[float, UnsetType]=unset, **kwargs): + """ + The definition of ``StepDisplayBounds`` object. + + :param x: The ``bounds`` ``x``. + :type x: float, optional + + :param y: The ``bounds`` ``y``. + :type y: float, optional + """ + if x is not unset: + kwargs["x"] = x + if y is not unset: + kwargs["y"] = y + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/suite_create_edit.py b/datadog_api_client/v2/model/suite_create_edit.py new file mode 100644 index 0000000000..5c1a8a517d --- /dev/null +++ b/datadog_api_client/v2/model/suite_create_edit.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_suite import SyntheticsSuite + from datadog_api_client.v2.model.synthetics_suite_types import SyntheticsSuiteTypes + +class SuiteCreateEdit(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_suite import SyntheticsSuite + from datadog_api_client.v2.model.synthetics_suite_types import SyntheticsSuiteTypes + return { + "attributes": (SyntheticsSuite,), + "type": (SyntheticsSuiteTypes,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SyntheticsSuite, type: SyntheticsSuiteTypes, **kwargs): + """ + Data object for creating or editing a Synthetic test suite. + + :param attributes: Object containing details about a Synthetic suite. + :type attributes: SyntheticsSuite + + :param type: Type for the Synthetics suites responses, ``suites``. + :type type: SyntheticsSuiteTypes + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/suite_create_edit_request.py b/datadog_api_client/v2/model/suite_create_edit_request.py new file mode 100644 index 0000000000..271f0b03f4 --- /dev/null +++ b/datadog_api_client/v2/model/suite_create_edit_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.suite_create_edit import SuiteCreateEdit + +class SuiteCreateEditRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.suite_create_edit import SuiteCreateEdit + return { + "data": (SuiteCreateEdit,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SuiteCreateEdit, **kwargs): + """ + Request body for creating or editing a Synthetic test suite. + + :param data: Data object for creating or editing a Synthetic test suite. + :type data: SuiteCreateEdit + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/suite_json_patch_request.py b/datadog_api_client/v2/model/suite_json_patch_request.py new file mode 100644 index 0000000000..073c1f862a --- /dev/null +++ b/datadog_api_client/v2/model/suite_json_patch_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.suite_json_patch_request_data import SuiteJsonPatchRequestData + +class SuiteJsonPatchRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.suite_json_patch_request_data import SuiteJsonPatchRequestData + return { + "data": (SuiteJsonPatchRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SuiteJsonPatchRequestData, **kwargs): + """ + JSON Patch request for a Synthetic test suite. + + :param data: Data object for a JSON Patch request on a Synthetic test suite. + :type data: SuiteJsonPatchRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/suite_json_patch_request_data.py b/datadog_api_client/v2/model/suite_json_patch_request_data.py new file mode 100644 index 0000000000..1d526eff0d --- /dev/null +++ b/datadog_api_client/v2/model/suite_json_patch_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.suite_json_patch_request_data_attributes import SuiteJsonPatchRequestDataAttributes + from datadog_api_client.v2.model.suite_json_patch_type import SuiteJsonPatchType + +class SuiteJsonPatchRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.suite_json_patch_request_data_attributes import SuiteJsonPatchRequestDataAttributes + from datadog_api_client.v2.model.suite_json_patch_type import SuiteJsonPatchType + return { + "attributes": (SuiteJsonPatchRequestDataAttributes,), + "type": (SuiteJsonPatchType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[SuiteJsonPatchRequestDataAttributes, UnsetType]=unset, type: Union[SuiteJsonPatchType, UnsetType]=unset, **kwargs): + """ + Data object for a JSON Patch request on a Synthetic test suite. + + :param attributes: Attributes for a JSON Patch request on a Synthetic test suite. + :type attributes: SuiteJsonPatchRequestDataAttributes, optional + + :param type: Type for a JSON Patch request on a Synthetic test suite, ``suites_json_patch``. + :type type: SuiteJsonPatchType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/suite_json_patch_request_data_attributes.py b/datadog_api_client/v2/model/suite_json_patch_request_data_attributes.py new file mode 100644 index 0000000000..e27eafcd00 --- /dev/null +++ b/datadog_api_client/v2/model/suite_json_patch_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.json_patch_operation import JsonPatchOperation + +class SuiteJsonPatchRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.json_patch_operation import JsonPatchOperation + return { + "json_patch": ([JsonPatchOperation],), + } + attribute_map = { + "json_patch": "json_patch", + } + + def __init__(self_, json_patch: Union[List[JsonPatchOperation], UnsetType]=unset, **kwargs): + """ + Attributes for a JSON Patch request on a Synthetic test suite. + + :param json_patch: JSON Patch operations following RFC 6902. + :type json_patch: [JsonPatchOperation], optional + """ + if json_patch is not unset: + kwargs["json_patch"] = json_patch + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/suite_json_patch_type.py b/datadog_api_client/v2/model/suite_json_patch_type.py new file mode 100644 index 0000000000..4771ccdb92 --- /dev/null +++ b/datadog_api_client/v2/model/suite_json_patch_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SuiteJsonPatchType(ModelSimple): + """ + Type for a JSON Patch request on a Synthetic test suite, `suites_json_patch`. + + :param value: If omitted defaults to "suites_json_patch". Must be one of ["suites_json_patch"]. + :type value: str + """ + + allowed_values = { + "suites_json_patch", + } + SUITES_JSON_PATCH: ClassVar["SuiteJsonPatchType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SuiteJsonPatchType.SUITES_JSON_PATCH = SuiteJsonPatchType("suites_json_patch") diff --git a/datadog_api_client/v2/model/suite_search_response_type.py b/datadog_api_client/v2/model/suite_search_response_type.py new file mode 100644 index 0000000000..99ad330c3d --- /dev/null +++ b/datadog_api_client/v2/model/suite_search_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SuiteSearchResponseType(ModelSimple): + """ + Type for the Synthetics suites search response, `suites_search`. + + :param value: If omitted defaults to "suites_search". Must be one of ["suites_search"]. + :type value: str + """ + + allowed_values = { + "suites_search", + } + SUITES_SEARCH: ClassVar["SuiteSearchResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SuiteSearchResponseType.SUITES_SEARCH = SuiteSearchResponseType("suites_search") diff --git a/datadog_api_client/v2/model/summarized_span.py b/datadog_api_client/v2/model/summarized_span.py new file mode 100644 index 0000000000..4591be510c --- /dev/null +++ b/datadog_api_client/v2/model/summarized_span.py @@ -0,0 +1,132 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.apm_span_error_flag import APMSpanErrorFlag + +class SummarizedSpan(ModelNormal): + validations = { + "hidden_child_spans_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.apm_span_error_flag import APMSpanErrorFlag + return { + "children": ([SummarizedSpan],), + "duration_seconds": (float,), + "end_time": (datetime,), + "error": (APMSpanErrorFlag,), + "hidden_child_spans_count": (int,), + "meta": ({str: (str,)},), + "metrics": ({str: (float,)},), + "name": (str,), + "parent_id": (int,), + "resource": (str,), + "service": (str,), + "span_id": (int,), + "span_kind": (str,), + "start_time": (datetime,), + } + attribute_map = { + "children": "children", + "duration_seconds": "durationSeconds", + "end_time": "endTime", + "error": "error", + "hidden_child_spans_count": "hidden_child_spans_count", + "meta": "meta", + "metrics": "metrics", + "name": "name", + "parent_id": "parentID", + "resource": "resource", + "service": "service", + "span_id": "spanID", + "span_kind": "span_kind", + "start_time": "startTime", + } + + def __init__(self_, children: List[SummarizedSpan], duration_seconds: float, end_time: datetime, error: APMSpanErrorFlag, hidden_child_spans_count: int, meta: Dict[str, str], metrics: Dict[str, float], name: str, parent_id: int, resource: str, service: str, span_id: int, span_kind: str, start_time: datetime, **kwargs): + """ + A node in the pruned trace tree. + + :param children: The child spans of this node in the pruned tree. + :type children: [SummarizedSpan] + + :param duration_seconds: The duration of the span, in seconds. + :type duration_seconds: float + + :param end_time: The end time of the span, in RFC3339 format. + :type end_time: datetime + + :param error: Error flag for a span. ``1`` when the span is in error, ``0`` otherwise. + :type error: APMSpanErrorFlag + + :param hidden_child_spans_count: The number of child spans that were pruned from this node when summarizing the trace. + :type hidden_child_spans_count: int + + :param meta: String-valued tags attached to the span. + :type meta: {str: (str,)} + + :param metrics: Numeric metrics attached to the span. + :type metrics: {str: (float,)} + + :param name: The operation name of the span. + :type name: str + + :param parent_id: The ID of the parent span, or ``0`` when the span is the trace root. + :type parent_id: int + + :param resource: The resource that the span describes. + :type resource: str + + :param service: The name of the service that emitted the span. + :type service: str + + :param span_id: The span ID, as an unsigned 64-bit integer. + :type span_id: int + + :param span_kind: The OpenTelemetry span kind, for example ``INTERNAL`` , ``SERVER`` , ``CLIENT`` , + ``PRODUCER`` , or ``CONSUMER``. + :type span_kind: str + + :param start_time: The start time of the span, in RFC3339 format. + :type start_time: datetime + """ + super().__init__(kwargs) + + + self_.children = children + self_.duration_seconds = duration_seconds + self_.end_time = end_time + self_.error = error + self_.hidden_child_spans_count = hidden_child_spans_count + self_.meta = meta + self_.metrics = metrics + self_.name = name + self_.parent_id = parent_id + self_.resource = resource + self_.service = service + self_.span_id = span_id + self_.span_kind = span_kind + self_.start_time = start_time diff --git a/datadog_api_client/v2/model/summarized_trace.py b/datadog_api_client/v2/model/summarized_trace.py new file mode 100644 index 0000000000..e18051f615 --- /dev/null +++ b/datadog_api_client/v2/model/summarized_trace.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.summarized_span import SummarizedSpan + +class SummarizedTrace(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.summarized_span import SummarizedSpan + return { + "root": (SummarizedSpan,), + "trace_id": (str,), + } + attribute_map = { + "root": "root", + "trace_id": "traceId", + } + + def __init__(self_, root: SummarizedSpan, trace_id: str, **kwargs): + """ + A summarized, hierarchical view of a trace. + + :param root: A node in the pruned trace tree. + :type root: SummarizedSpan + + :param trace_id: The full 128-bit trace ID, encoded as a 32-character hexadecimal string. + :type trace_id: str + """ + super().__init__(kwargs) + + + self_.root = root + self_.trace_id = trace_id diff --git a/datadog_api_client/v2/model/suppression_version_history.py b/datadog_api_client/v2/model/suppression_version_history.py new file mode 100644 index 0000000000..10c51e5a1c --- /dev/null +++ b/datadog_api_client/v2/model/suppression_version_history.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.suppression_versions import SuppressionVersions + +class SuppressionVersionHistory(ModelNormal): + validations = { + "count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.suppression_versions import SuppressionVersions + return { + "count": (int,), + "data": ({str: (SuppressionVersions,)},), + } + attribute_map = { + "count": "count", + "data": "data", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, data: Union[Dict[str, SuppressionVersions], UnsetType]=unset, **kwargs): + """ + Response object containing the version history of a suppression. + + :param count: The number of suppression versions. + :type count: int, optional + + :param data: The version history of a suppression. + :type data: {str: (SuppressionVersions,)}, optional + """ + if count is not unset: + kwargs["count"] = count + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/suppression_versions.py b/datadog_api_client/v2/model/suppression_versions.py new file mode 100644 index 0000000000..0bdfcb69f6 --- /dev/null +++ b/datadog_api_client/v2/model/suppression_versions.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.version_history_update import VersionHistoryUpdate + from datadog_api_client.v2.model.security_monitoring_suppression_attributes import SecurityMonitoringSuppressionAttributes + +class SuppressionVersions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.version_history_update import VersionHistoryUpdate + from datadog_api_client.v2.model.security_monitoring_suppression_attributes import SecurityMonitoringSuppressionAttributes + return { + "changes": ([VersionHistoryUpdate],), + "suppression": (SecurityMonitoringSuppressionAttributes,), + } + attribute_map = { + "changes": "changes", + "suppression": "suppression", + } + + def __init__(self_, changes: Union[List[VersionHistoryUpdate], UnsetType]=unset, suppression: Union[SecurityMonitoringSuppressionAttributes, UnsetType]=unset, **kwargs): + """ + A suppression version with a list of updates. + + :param changes: A list of changes. + :type changes: [VersionHistoryUpdate], optional + + :param suppression: The attributes of the suppression rule. + :type suppression: SecurityMonitoringSuppressionAttributes, optional + """ + if changes is not unset: + kwargs["changes"] = changes + if suppression is not unset: + kwargs["suppression"] = suppression + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sync_property.py b/datadog_api_client/v2/model/sync_property.py new file mode 100644 index 0000000000..ef593b5d7a --- /dev/null +++ b/datadog_api_client/v2/model/sync_property.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyncProperty(ModelNormal): + @cached_property + def openapi_types(_): + return { + "sync_type": (str,), + } + attribute_map = { + "sync_type": "sync_type", + } + + def __init__(self_, sync_type: Union[str, UnsetType]=unset, **kwargs): + """ + Sync property configuration. + + :param sync_type: The direction and type of synchronization for this property. + :type sync_type: str, optional + """ + if sync_type is not unset: + kwargs["sync_type"] = sync_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/sync_property_with_mapping.py b/datadog_api_client/v2/model/sync_property_with_mapping.py new file mode 100644 index 0000000000..a09d770006 --- /dev/null +++ b/datadog_api_client/v2/model/sync_property_with_mapping.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyncPropertyWithMapping(ModelNormal): + @cached_property + def openapi_types(_): + return { + "mapping": ({str: (str,)},), + "name_mapping": ({str: (str,)},), + "sync_type": (str,), + } + attribute_map = { + "mapping": "mapping", + "name_mapping": "name_mapping", + "sync_type": "sync_type", + } + + def __init__(self_, mapping: Union[Dict[str, str], UnsetType]=unset, name_mapping: Union[Dict[str, str], UnsetType]=unset, sync_type: Union[str, UnsetType]=unset, **kwargs): + """ + Sync property with mapping configuration. + + :param mapping: Map of source values to destination values for synchronization. + :type mapping: {str: (str,)}, optional + + :param name_mapping: Map of source names to display names used during synchronization. + :type name_mapping: {str: (str,)}, optional + + :param sync_type: The direction and type of synchronization for this property. + :type sync_type: str, optional + """ + if mapping is not unset: + kwargs["mapping"] = mapping + if name_mapping is not unset: + kwargs["name_mapping"] = name_mapping + if sync_type is not unset: + kwargs["sync_type"] = sync_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_api_multistep_parent_test_attributes.py b/datadog_api_client/v2/model/synthetics_api_multistep_parent_test_attributes.py new file mode 100644 index 0000000000..d40bbbe828 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_api_multistep_parent_test_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsApiMultistepParentTestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "child_name": (str,), + "child_public_id": (str,), + "monitor_id": (int,), + "name": (str,), + "overall_state": (int,), + "overall_state_modified": (str,), + "public_id": (str,), + } + attribute_map = { + "child_name": "child_name", + "child_public_id": "child_public_id", + "monitor_id": "monitor_id", + "name": "name", + "overall_state": "overall_state", + "overall_state_modified": "overall_state_modified", + "public_id": "public_id", + } + + def __init__(self_, child_name: Union[str, UnsetType]=unset, child_public_id: Union[str, UnsetType]=unset, monitor_id: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, overall_state: Union[int, UnsetType]=unset, overall_state_modified: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a parent API multistep test. + + :param child_name: The name of the child subtest. + :type child_name: str, optional + + :param child_public_id: The public ID of the child subtest. + :type child_public_id: str, optional + + :param monitor_id: The associated monitor ID. + :type monitor_id: int, optional + + :param name: Name of the parent test. + :type name: str, optional + + :param overall_state: The overall state of the parent test. + :type overall_state: int, optional + + :param overall_state_modified: Timestamp of when the overall state was last modified. + :type overall_state_modified: str, optional + + :param public_id: The public ID of the parent test. + :type public_id: str, optional + """ + if child_name is not unset: + kwargs["child_name"] = child_name + if child_public_id is not unset: + kwargs["child_public_id"] = child_public_id + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if name is not unset: + kwargs["name"] = name + if overall_state is not unset: + kwargs["overall_state"] = overall_state + if overall_state_modified is not unset: + kwargs["overall_state_modified"] = overall_state_modified + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_api_multistep_parent_test_data.py b/datadog_api_client/v2/model/synthetics_api_multistep_parent_test_data.py new file mode 100644 index 0000000000..eb05600537 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_api_multistep_parent_test_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_api_multistep_parent_test_attributes import SyntheticsApiMultistepParentTestAttributes + from datadog_api_client.v2.model.synthetics_api_multistep_parent_test_type import SyntheticsApiMultistepParentTestType + +class SyntheticsApiMultistepParentTestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_api_multistep_parent_test_attributes import SyntheticsApiMultistepParentTestAttributes + from datadog_api_client.v2.model.synthetics_api_multistep_parent_test_type import SyntheticsApiMultistepParentTestType + return { + "attributes": (SyntheticsApiMultistepParentTestAttributes,), + "id": (str,), + "type": (SyntheticsApiMultistepParentTestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsApiMultistepParentTestAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SyntheticsApiMultistepParentTestType, UnsetType]=unset, **kwargs): + """ + Data object for a parent API multistep test. + + :param attributes: Attributes of a parent API multistep test. + :type attributes: SyntheticsApiMultistepParentTestAttributes, optional + + :param id: The public ID of the parent test. + :type id: str, optional + + :param type: Type of the parent test resource. + :type type: SyntheticsApiMultistepParentTestType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_api_multistep_parent_test_type.py b/datadog_api_client/v2/model/synthetics_api_multistep_parent_test_type.py new file mode 100644 index 0000000000..5042ffc10a --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_api_multistep_parent_test_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsApiMultistepParentTestType(ModelSimple): + """ + Type of the parent test resource. + + :param value: If omitted defaults to "parent_test". Must be one of ["parent_test"]. + :type value: str + """ + + allowed_values = { + "parent_test", + } + PARENT_TEST: ClassVar["SyntheticsApiMultistepParentTestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsApiMultistepParentTestType.PARENT_TEST = SyntheticsApiMultistepParentTestType("parent_test") diff --git a/datadog_api_client/v2/model/synthetics_api_multistep_parent_tests_response.py b/datadog_api_client/v2/model/synthetics_api_multistep_parent_tests_response.py new file mode 100644 index 0000000000..c1c9f53d92 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_api_multistep_parent_tests_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_api_multistep_parent_test_data import SyntheticsApiMultistepParentTestData + +class SyntheticsApiMultistepParentTestsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_api_multistep_parent_test_data import SyntheticsApiMultistepParentTestData + return { + "data": ([SyntheticsApiMultistepParentTestData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SyntheticsApiMultistepParentTestData], UnsetType]=unset, **kwargs): + """ + Response containing the list of parent tests for an API multistep subtest. + + :param data: List of parent tests that include this subtest. + :type data: [SyntheticsApiMultistepParentTestData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_api_multistep_subtest_attributes.py b/datadog_api_client/v2/model/synthetics_api_multistep_subtest_attributes.py new file mode 100644 index 0000000000..d49c4b8523 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_api_multistep_subtest_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsApiMultistepSubtestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "public_id": (str,), + } + attribute_map = { + "name": "name", + "public_id": "public_id", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a Synthetic API multistep subtest. + + :param name: Name of the subtest. + :type name: str, optional + + :param public_id: The public ID of the subtest. + :type public_id: str, optional + """ + if name is not unset: + kwargs["name"] = name + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_api_multistep_subtest_data.py b/datadog_api_client/v2/model/synthetics_api_multistep_subtest_data.py new file mode 100644 index 0000000000..e092ba668e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_api_multistep_subtest_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_api_multistep_subtest_attributes import SyntheticsApiMultistepSubtestAttributes + from datadog_api_client.v2.model.synthetics_api_multistep_subtest_type import SyntheticsApiMultistepSubtestType + +class SyntheticsApiMultistepSubtestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_api_multistep_subtest_attributes import SyntheticsApiMultistepSubtestAttributes + from datadog_api_client.v2.model.synthetics_api_multistep_subtest_type import SyntheticsApiMultistepSubtestType + return { + "attributes": (SyntheticsApiMultistepSubtestAttributes,), + "id": (str,), + "type": (SyntheticsApiMultistepSubtestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsApiMultistepSubtestAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SyntheticsApiMultistepSubtestType, UnsetType]=unset, **kwargs): + """ + Data object for a Synthetic API multistep subtest. + + :param attributes: Attributes of a Synthetic API multistep subtest. + :type attributes: SyntheticsApiMultistepSubtestAttributes, optional + + :param id: The public ID of the subtest. + :type id: str, optional + + :param type: Type of the subtest resource. + :type type: SyntheticsApiMultistepSubtestType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_api_multistep_subtest_type.py b/datadog_api_client/v2/model/synthetics_api_multistep_subtest_type.py new file mode 100644 index 0000000000..42bc835e00 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_api_multistep_subtest_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsApiMultistepSubtestType(ModelSimple): + """ + Type of the subtest resource. + + :param value: If omitted defaults to "subtest". Must be one of ["subtest"]. + :type value: str + """ + + allowed_values = { + "subtest", + } + SUBTEST: ClassVar["SyntheticsApiMultistepSubtestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsApiMultistepSubtestType.SUBTEST = SyntheticsApiMultistepSubtestType("subtest") diff --git a/datadog_api_client/v2/model/synthetics_api_multistep_subtests_response.py b/datadog_api_client/v2/model/synthetics_api_multistep_subtests_response.py new file mode 100644 index 0000000000..eb1788f83a --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_api_multistep_subtests_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_api_multistep_subtest_data import SyntheticsApiMultistepSubtestData + +class SyntheticsApiMultistepSubtestsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_api_multistep_subtest_data import SyntheticsApiMultistepSubtestData + return { + "data": ([SyntheticsApiMultistepSubtestData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SyntheticsApiMultistepSubtestData], UnsetType]=unset, **kwargs): + """ + Response containing the list of available subtests for an API multistep test. + + :param data: List of API tests that can be added as subtests. + :type data: [SyntheticsApiMultistepSubtestData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_downtime_data.py b/datadog_api_client/v2/model/synthetics_downtime_data.py new file mode 100644 index 0000000000..a515947b93 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_data_attributes_response import SyntheticsDowntimeDataAttributesResponse + from datadog_api_client.v2.model.synthetics_downtime_resource_type import SyntheticsDowntimeResourceType + +class SyntheticsDowntimeData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_data_attributes_response import SyntheticsDowntimeDataAttributesResponse + from datadog_api_client.v2.model.synthetics_downtime_resource_type import SyntheticsDowntimeResourceType + return { + "attributes": (SyntheticsDowntimeDataAttributesResponse,), + "id": (str,), + "type": (SyntheticsDowntimeResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: SyntheticsDowntimeDataAttributesResponse, id: str, type: SyntheticsDowntimeResourceType, **kwargs): + """ + A Synthetics downtime object. + + :param attributes: Attributes of a Synthetics downtime response object. + :type attributes: SyntheticsDowntimeDataAttributesResponse + + :param id: The unique identifier of the downtime. + :type id: str + + :param type: The resource type for a Synthetics downtime. + :type type: SyntheticsDowntimeResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_downtime_data_attributes_request.py b/datadog_api_client/v2/model/synthetics_downtime_data_attributes_request.py new file mode 100644 index 0000000000..9eb25de8d0 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_data_attributes_request.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_time_slot_request import SyntheticsDowntimeTimeSlotRequest + +class SyntheticsDowntimeDataAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_time_slot_request import SyntheticsDowntimeTimeSlotRequest + return { + "description": (str,), + "is_enabled": (bool,), + "name": (str,), + "tags": ([str],), + "test_ids": ([str],), + "time_slots": ([SyntheticsDowntimeTimeSlotRequest],), + } + attribute_map = { + "description": "description", + "is_enabled": "isEnabled", + "name": "name", + "tags": "tags", + "test_ids": "testIds", + "time_slots": "timeSlots", + } + + def __init__(self_, is_enabled: bool, name: str, test_ids: List[str], time_slots: List[SyntheticsDowntimeTimeSlotRequest], description: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a Synthetics downtime. + + :param description: An optional description of the downtime. + :type description: str, optional + + :param is_enabled: Whether the downtime is enabled. + :type is_enabled: bool + + :param name: The name of the downtime. + :type name: str + + :param tags: List of tags associated with a Synthetics downtime. + :type tags: [str], optional + + :param test_ids: List of Synthetics test public IDs associated with a downtime. + :type test_ids: [str] + + :param time_slots: List of time slots for a Synthetics downtime create or update request. + :type time_slots: [SyntheticsDowntimeTimeSlotRequest] + """ + if description is not unset: + kwargs["description"] = description + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.is_enabled = is_enabled + self_.name = name + self_.test_ids = test_ids + self_.time_slots = time_slots diff --git a/datadog_api_client/v2/model/synthetics_downtime_data_attributes_response.py b/datadog_api_client/v2/model/synthetics_downtime_data_attributes_response.py new file mode 100644 index 0000000000..2c13b67be9 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_data_attributes_response.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_time_slot_response import SyntheticsDowntimeTimeSlotResponse + +class SyntheticsDowntimeDataAttributesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_time_slot_response import SyntheticsDowntimeTimeSlotResponse + return { + "created_at": (datetime,), + "created_by": (str,), + "created_by_name": (str,), + "description": (str,), + "is_enabled": (bool,), + "name": (str,), + "tags": ([str],), + "test_ids": ([str],), + "time_slots": ([SyntheticsDowntimeTimeSlotResponse],), + "updated_at": (datetime,), + "updated_by": (str,), + "updated_by_name": (str,), + } + attribute_map = { + "created_at": "createdAt", + "created_by": "createdBy", + "created_by_name": "createdByName", + "description": "description", + "is_enabled": "isEnabled", + "name": "name", + "tags": "tags", + "test_ids": "testIds", + "time_slots": "timeSlots", + "updated_at": "updatedAt", + "updated_by": "updatedBy", + "updated_by_name": "updatedByName", + } + + def __init__(self_, created_at: datetime, created_by: str, created_by_name: str, description: str, is_enabled: bool, name: str, tags: List[str], test_ids: List[str], time_slots: List[SyntheticsDowntimeTimeSlotResponse], updated_at: datetime, updated_by: str, updated_by_name: str, **kwargs): + """ + Attributes of a Synthetics downtime response object. + + :param created_at: The timestamp when the downtime was created. + :type created_at: datetime + + :param created_by: The UUID of the user who created the downtime. + :type created_by: str + + :param created_by_name: The display name of the user who created the downtime. + :type created_by_name: str + + :param description: The description of the downtime. + :type description: str + + :param is_enabled: Whether the downtime is enabled. + :type is_enabled: bool + + :param name: The name of the downtime. + :type name: str + + :param tags: List of tags associated with a Synthetics downtime. + :type tags: [str] + + :param test_ids: List of Synthetics test public IDs associated with a downtime. + :type test_ids: [str] + + :param time_slots: List of time slots in a Synthetics downtime response. + :type time_slots: [SyntheticsDowntimeTimeSlotResponse] + + :param updated_at: The timestamp when the downtime was last updated. + :type updated_at: datetime + + :param updated_by: The UUID of the user who last updated the downtime. + :type updated_by: str + + :param updated_by_name: The display name of the user who last updated the downtime. + :type updated_by_name: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.created_by_name = created_by_name + self_.description = description + self_.is_enabled = is_enabled + self_.name = name + self_.tags = tags + self_.test_ids = test_ids + self_.time_slots = time_slots + self_.updated_at = updated_at + self_.updated_by = updated_by + self_.updated_by_name = updated_by_name diff --git a/datadog_api_client/v2/model/synthetics_downtime_data_request.py b/datadog_api_client/v2/model/synthetics_downtime_data_request.py new file mode 100644 index 0000000000..21feb43774 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_data_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_data_attributes_request import SyntheticsDowntimeDataAttributesRequest + from datadog_api_client.v2.model.synthetics_downtime_resource_type import SyntheticsDowntimeResourceType + +class SyntheticsDowntimeDataRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_data_attributes_request import SyntheticsDowntimeDataAttributesRequest + from datadog_api_client.v2.model.synthetics_downtime_resource_type import SyntheticsDowntimeResourceType + return { + "attributes": (SyntheticsDowntimeDataAttributesRequest,), + "type": (SyntheticsDowntimeResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SyntheticsDowntimeDataAttributesRequest, type: SyntheticsDowntimeResourceType, **kwargs): + """ + The data object for a Synthetics downtime create or update request. + + :param attributes: Attributes for creating or updating a Synthetics downtime. + :type attributes: SyntheticsDowntimeDataAttributesRequest + + :param type: The resource type for a Synthetics downtime. + :type type: SyntheticsDowntimeResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_downtime_frequency.py b/datadog_api_client/v2/model/synthetics_downtime_frequency.py new file mode 100644 index 0000000000..6dadef71cf --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_frequency.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsDowntimeFrequency(ModelSimple): + """ + The recurrence frequency of a Synthetics downtime time slot. + + :param value: Must be one of ["DAILY", "WEEKLY", "MONTHLY", "YEARLY"]. + :type value: str + """ + + allowed_values = { + "DAILY", + "WEEKLY", + "MONTHLY", + "YEARLY", + } + DAILY: ClassVar["SyntheticsDowntimeFrequency"] + WEEKLY: ClassVar["SyntheticsDowntimeFrequency"] + MONTHLY: ClassVar["SyntheticsDowntimeFrequency"] + YEARLY: ClassVar["SyntheticsDowntimeFrequency"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsDowntimeFrequency.DAILY = SyntheticsDowntimeFrequency("DAILY") +SyntheticsDowntimeFrequency.WEEKLY = SyntheticsDowntimeFrequency("WEEKLY") +SyntheticsDowntimeFrequency.MONTHLY = SyntheticsDowntimeFrequency("MONTHLY") +SyntheticsDowntimeFrequency.YEARLY = SyntheticsDowntimeFrequency("YEARLY") diff --git a/datadog_api_client/v2/model/synthetics_downtime_request.py b/datadog_api_client/v2/model/synthetics_downtime_request.py new file mode 100644 index 0000000000..3d209b57fc --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_data_request import SyntheticsDowntimeDataRequest + +class SyntheticsDowntimeRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_data_request import SyntheticsDowntimeDataRequest + return { + "data": (SyntheticsDowntimeDataRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SyntheticsDowntimeDataRequest, **kwargs): + """ + Request body for creating or updating a Synthetics downtime. + + :param data: The data object for a Synthetics downtime create or update request. + :type data: SyntheticsDowntimeDataRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/synthetics_downtime_resource_type.py b/datadog_api_client/v2/model/synthetics_downtime_resource_type.py new file mode 100644 index 0000000000..8c6c4e7909 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsDowntimeResourceType(ModelSimple): + """ + The resource type for a Synthetics downtime. + + :param value: If omitted defaults to "downtime". Must be one of ["downtime"]. + :type value: str + """ + + allowed_values = { + "downtime", + } + DOWNTIME: ClassVar["SyntheticsDowntimeResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsDowntimeResourceType.DOWNTIME = SyntheticsDowntimeResourceType("downtime") diff --git a/datadog_api_client/v2/model/synthetics_downtime_response.py b/datadog_api_client/v2/model/synthetics_downtime_response.py new file mode 100644 index 0000000000..a519f087bb --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_data import SyntheticsDowntimeData + +class SyntheticsDowntimeResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_data import SyntheticsDowntimeData + return { + "data": (SyntheticsDowntimeData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SyntheticsDowntimeData, **kwargs): + """ + Response containing a single Synthetics downtime. + + :param data: A Synthetics downtime object. + :type data: SyntheticsDowntimeData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/synthetics_downtime_time_slot_date.py b/datadog_api_client/v2/model/synthetics_downtime_time_slot_date.py new file mode 100644 index 0000000000..4de4bc8118 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_time_slot_date.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsDowntimeTimeSlotDate(ModelNormal): + @cached_property + def openapi_types(_): + return { + "day": (int,), + "hour": (int,), + "minute": (int,), + "month": (int,), + "year": (int,), + } + attribute_map = { + "day": "day", + "hour": "hour", + "minute": "minute", + "month": "month", + "year": "year", + } + + def __init__(self_, day: int, hour: int, minute: int, month: int, year: int, **kwargs): + """ + A specific date and time used to define the start or end of a Synthetics downtime time slot. + + :param day: The day component of the date (1-31). + :type day: int + + :param hour: The hour component of the time (0-23). + :type hour: int + + :param minute: The minute component of the time (0-59). + :type minute: int + + :param month: The month component of the date (1-12). + :type month: int + + :param year: The year component of the date. + :type year: int + """ + super().__init__(kwargs) + + + self_.day = day + self_.hour = hour + self_.minute = minute + self_.month = month + self_.year = year diff --git a/datadog_api_client/v2/model/synthetics_downtime_time_slot_recurrence_request.py b/datadog_api_client/v2/model/synthetics_downtime_time_slot_recurrence_request.py new file mode 100644 index 0000000000..26311b744e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_time_slot_recurrence_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_time_slot_date import SyntheticsDowntimeTimeSlotDate + from datadog_api_client.v2.model.synthetics_downtime_frequency import SyntheticsDowntimeFrequency + from datadog_api_client.v2.model.synthetics_downtime_weekday_position import SyntheticsDowntimeWeekdayPosition + from datadog_api_client.v2.model.synthetics_downtime_weekday import SyntheticsDowntimeWeekday + +class SyntheticsDowntimeTimeSlotRecurrenceRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_time_slot_date import SyntheticsDowntimeTimeSlotDate + from datadog_api_client.v2.model.synthetics_downtime_frequency import SyntheticsDowntimeFrequency + from datadog_api_client.v2.model.synthetics_downtime_weekday_position import SyntheticsDowntimeWeekdayPosition + from datadog_api_client.v2.model.synthetics_downtime_weekday import SyntheticsDowntimeWeekday + return { + "end": (SyntheticsDowntimeTimeSlotDate,), + "frequency": (SyntheticsDowntimeFrequency,), + "interval": (int,), + "weekday_positions": ([SyntheticsDowntimeWeekdayPosition],), + "weekdays": ([SyntheticsDowntimeWeekday],), + } + attribute_map = { + "end": "end", + "frequency": "frequency", + "interval": "interval", + "weekday_positions": "weekdayPositions", + "weekdays": "weekdays", + } + + def __init__(self_, frequency: SyntheticsDowntimeFrequency, end: Union[SyntheticsDowntimeTimeSlotDate, UnsetType]=unset, interval: Union[int, UnsetType]=unset, weekday_positions: Union[List[SyntheticsDowntimeWeekdayPosition], UnsetType]=unset, weekdays: Union[List[SyntheticsDowntimeWeekday], UnsetType]=unset, **kwargs): + """ + Recurrence settings for a Synthetics downtime time slot. + + :param end: A specific date and time used to define the start or end of a Synthetics downtime time slot. + :type end: SyntheticsDowntimeTimeSlotDate, optional + + :param frequency: The recurrence frequency of a Synthetics downtime time slot. + :type frequency: SyntheticsDowntimeFrequency + + :param interval: The interval between recurrences, relative to the frequency. + :type interval: int, optional + + :param weekday_positions: Positions of the weekdays within a month for a monthly Synthetics downtime recurrence. Used in combination with ``weekdays`` to schedule occurrences such as "the first Monday of the month". + :type weekday_positions: [SyntheticsDowntimeWeekdayPosition], optional + + :param weekdays: Days of the week for a Synthetics downtime recurrence schedule. + :type weekdays: [SyntheticsDowntimeWeekday], optional + """ + if end is not unset: + kwargs["end"] = end + if interval is not unset: + kwargs["interval"] = interval + if weekday_positions is not unset: + kwargs["weekday_positions"] = weekday_positions + if weekdays is not unset: + kwargs["weekdays"] = weekdays + super().__init__(kwargs) + + + self_.frequency = frequency diff --git a/datadog_api_client/v2/model/synthetics_downtime_time_slot_recurrence_response.py b/datadog_api_client/v2/model/synthetics_downtime_time_slot_recurrence_response.py new file mode 100644 index 0000000000..cfaa4fc69a --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_time_slot_recurrence_response.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_frequency import SyntheticsDowntimeFrequency + from datadog_api_client.v2.model.synthetics_downtime_time_slot_date import SyntheticsDowntimeTimeSlotDate + from datadog_api_client.v2.model.synthetics_downtime_weekday_position import SyntheticsDowntimeWeekdayPosition + from datadog_api_client.v2.model.synthetics_downtime_weekday import SyntheticsDowntimeWeekday + +class SyntheticsDowntimeTimeSlotRecurrenceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_frequency import SyntheticsDowntimeFrequency + from datadog_api_client.v2.model.synthetics_downtime_time_slot_date import SyntheticsDowntimeTimeSlotDate + from datadog_api_client.v2.model.synthetics_downtime_weekday_position import SyntheticsDowntimeWeekdayPosition + from datadog_api_client.v2.model.synthetics_downtime_weekday import SyntheticsDowntimeWeekday + return { + "frequency": (SyntheticsDowntimeFrequency,), + "interval": (int,), + "until": (SyntheticsDowntimeTimeSlotDate,), + "weekday_positions": ([SyntheticsDowntimeWeekdayPosition],), + "weekdays": ([SyntheticsDowntimeWeekday],), + } + attribute_map = { + "frequency": "frequency", + "interval": "interval", + "until": "until", + "weekday_positions": "weekdayPositions", + "weekdays": "weekdays", + } + + def __init__(self_, frequency: SyntheticsDowntimeFrequency, interval: int, weekdays: List[SyntheticsDowntimeWeekday], until: Union[SyntheticsDowntimeTimeSlotDate, UnsetType]=unset, weekday_positions: Union[List[SyntheticsDowntimeWeekdayPosition], UnsetType]=unset, **kwargs): + """ + Recurrence settings returned in a Synthetics downtime time slot response. + + :param frequency: The recurrence frequency of a Synthetics downtime time slot. + :type frequency: SyntheticsDowntimeFrequency + + :param interval: The interval between recurrences, relative to the frequency. + :type interval: int + + :param until: A specific date and time used to define the start or end of a Synthetics downtime time slot. + :type until: SyntheticsDowntimeTimeSlotDate, optional + + :param weekday_positions: Positions of the weekdays within a month for a monthly Synthetics downtime recurrence. Used in combination with ``weekdays`` to schedule occurrences such as "the first Monday of the month". + :type weekday_positions: [SyntheticsDowntimeWeekdayPosition], optional + + :param weekdays: Days of the week for a Synthetics downtime recurrence schedule. + :type weekdays: [SyntheticsDowntimeWeekday] + """ + if until is not unset: + kwargs["until"] = until + if weekday_positions is not unset: + kwargs["weekday_positions"] = weekday_positions + super().__init__(kwargs) + + + self_.frequency = frequency + self_.interval = interval + self_.weekdays = weekdays diff --git a/datadog_api_client/v2/model/synthetics_downtime_time_slot_request.py b/datadog_api_client/v2/model/synthetics_downtime_time_slot_request.py new file mode 100644 index 0000000000..78f265faaf --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_time_slot_request.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_time_slot_recurrence_request import SyntheticsDowntimeTimeSlotRecurrenceRequest + from datadog_api_client.v2.model.synthetics_downtime_time_slot_date import SyntheticsDowntimeTimeSlotDate + +class SyntheticsDowntimeTimeSlotRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_time_slot_recurrence_request import SyntheticsDowntimeTimeSlotRecurrenceRequest + from datadog_api_client.v2.model.synthetics_downtime_time_slot_date import SyntheticsDowntimeTimeSlotDate + return { + "duration": (int,), + "name": (str,), + "recurrence": (SyntheticsDowntimeTimeSlotRecurrenceRequest,), + "start": (SyntheticsDowntimeTimeSlotDate,), + "timezone": (str,), + } + attribute_map = { + "duration": "duration", + "name": "name", + "recurrence": "recurrence", + "start": "start", + "timezone": "timezone", + } + + def __init__(self_, duration: int, start: SyntheticsDowntimeTimeSlotDate, timezone: str, name: Union[str, UnsetType]=unset, recurrence: Union[SyntheticsDowntimeTimeSlotRecurrenceRequest, UnsetType]=unset, **kwargs): + """ + A time slot for a Synthetics downtime create or update request. + + :param duration: The duration of the time slot in seconds, between 60 and 604800. + :type duration: int + + :param name: An optional label for the time slot. + :type name: str, optional + + :param recurrence: Recurrence settings for a Synthetics downtime time slot. + :type recurrence: SyntheticsDowntimeTimeSlotRecurrenceRequest, optional + + :param start: A specific date and time used to define the start or end of a Synthetics downtime time slot. + :type start: SyntheticsDowntimeTimeSlotDate + + :param timezone: The IANA timezone name for the time slot. + :type timezone: str + """ + if name is not unset: + kwargs["name"] = name + if recurrence is not unset: + kwargs["recurrence"] = recurrence + super().__init__(kwargs) + + + self_.duration = duration + self_.start = start + self_.timezone = timezone diff --git a/datadog_api_client/v2/model/synthetics_downtime_time_slot_response.py b/datadog_api_client/v2/model/synthetics_downtime_time_slot_response.py new file mode 100644 index 0000000000..a2340bc802 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_time_slot_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_time_slot_recurrence_response import SyntheticsDowntimeTimeSlotRecurrenceResponse + from datadog_api_client.v2.model.synthetics_downtime_time_slot_date import SyntheticsDowntimeTimeSlotDate + +class SyntheticsDowntimeTimeSlotResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_time_slot_recurrence_response import SyntheticsDowntimeTimeSlotRecurrenceResponse + from datadog_api_client.v2.model.synthetics_downtime_time_slot_date import SyntheticsDowntimeTimeSlotDate + return { + "duration": (int,), + "id": (str,), + "name": (str,), + "recurrence": (SyntheticsDowntimeTimeSlotRecurrenceResponse,), + "start": (SyntheticsDowntimeTimeSlotDate,), + "timezone": (str,), + } + attribute_map = { + "duration": "duration", + "id": "id", + "name": "name", + "recurrence": "recurrence", + "start": "start", + "timezone": "timezone", + } + + def __init__(self_, duration: int, id: str, start: SyntheticsDowntimeTimeSlotDate, timezone: str, name: Union[str, UnsetType]=unset, recurrence: Union[SyntheticsDowntimeTimeSlotRecurrenceResponse, UnsetType]=unset, **kwargs): + """ + A time slot returned in a Synthetics downtime response. + + :param duration: The duration of the time slot in seconds. + :type duration: int + + :param id: The unique identifier of the time slot. + :type id: str + + :param name: The label for the time slot. + :type name: str, optional + + :param recurrence: Recurrence settings returned in a Synthetics downtime time slot response. + :type recurrence: SyntheticsDowntimeTimeSlotRecurrenceResponse, optional + + :param start: A specific date and time used to define the start or end of a Synthetics downtime time slot. + :type start: SyntheticsDowntimeTimeSlotDate + + :param timezone: The IANA timezone name for the time slot. + :type timezone: str + """ + if name is not unset: + kwargs["name"] = name + if recurrence is not unset: + kwargs["recurrence"] = recurrence + super().__init__(kwargs) + + + self_.duration = duration + self_.id = id + self_.start = start + self_.timezone = timezone diff --git a/datadog_api_client/v2/model/synthetics_downtime_weekday.py b/datadog_api_client/v2/model/synthetics_downtime_weekday.py new file mode 100644 index 0000000000..c5b5772877 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_weekday.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsDowntimeWeekday(ModelSimple): + """ + A day of the week for a Synthetics downtime recurrence. + + :param value: Must be one of ["MO", "TU", "WE", "TH", "FR", "SA", "SU"]. + :type value: str + """ + + allowed_values = { + "MO", + "TU", + "WE", + "TH", + "FR", + "SA", + "SU", + } + MONDAY: ClassVar["SyntheticsDowntimeWeekday"] + TUESDAY: ClassVar["SyntheticsDowntimeWeekday"] + WEDNESDAY: ClassVar["SyntheticsDowntimeWeekday"] + THURSDAY: ClassVar["SyntheticsDowntimeWeekday"] + FRIDAY: ClassVar["SyntheticsDowntimeWeekday"] + SATURDAY: ClassVar["SyntheticsDowntimeWeekday"] + SUNDAY: ClassVar["SyntheticsDowntimeWeekday"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsDowntimeWeekday.MONDAY = SyntheticsDowntimeWeekday("MO") +SyntheticsDowntimeWeekday.TUESDAY = SyntheticsDowntimeWeekday("TU") +SyntheticsDowntimeWeekday.WEDNESDAY = SyntheticsDowntimeWeekday("WE") +SyntheticsDowntimeWeekday.THURSDAY = SyntheticsDowntimeWeekday("TH") +SyntheticsDowntimeWeekday.FRIDAY = SyntheticsDowntimeWeekday("FR") +SyntheticsDowntimeWeekday.SATURDAY = SyntheticsDowntimeWeekday("SA") +SyntheticsDowntimeWeekday.SUNDAY = SyntheticsDowntimeWeekday("SU") diff --git a/datadog_api_client/v2/model/synthetics_downtime_weekday_position.py b/datadog_api_client/v2/model/synthetics_downtime_weekday_position.py new file mode 100644 index 0000000000..ba14cdf715 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtime_weekday_position.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsDowntimeWeekdayPosition(ModelSimple): + """ + The position of a weekday within a month for a monthly Synthetics downtime recurrence. `1` through `4` select the first through fourth occurrence of the weekday in the month, and `-1` selects the last occurrence. + + :param value: Must be one of [1, 2, 3, 4, -1]. + :type value: int + """ + + allowed_values = { + 1, + 2, + 3, + 4, + -1, + } + FIRST: ClassVar["SyntheticsDowntimeWeekdayPosition"] + SECOND: ClassVar["SyntheticsDowntimeWeekdayPosition"] + THIRD: ClassVar["SyntheticsDowntimeWeekdayPosition"] + FOURTH: ClassVar["SyntheticsDowntimeWeekdayPosition"] + LAST: ClassVar["SyntheticsDowntimeWeekdayPosition"] + + + + @cached_property + def openapi_types(_): + return { + "value": (int,), + } +SyntheticsDowntimeWeekdayPosition.FIRST = SyntheticsDowntimeWeekdayPosition(1) +SyntheticsDowntimeWeekdayPosition.SECOND = SyntheticsDowntimeWeekdayPosition(2) +SyntheticsDowntimeWeekdayPosition.THIRD = SyntheticsDowntimeWeekdayPosition(3) +SyntheticsDowntimeWeekdayPosition.FOURTH = SyntheticsDowntimeWeekdayPosition(4) +SyntheticsDowntimeWeekdayPosition.LAST = SyntheticsDowntimeWeekdayPosition(-1) diff --git a/datadog_api_client/v2/model/synthetics_downtimes_response.py b/datadog_api_client/v2/model/synthetics_downtimes_response.py new file mode 100644 index 0000000000..ab77d46d7f --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_downtimes_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_downtime_data import SyntheticsDowntimeData + +class SyntheticsDowntimesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_downtime_data import SyntheticsDowntimeData + return { + "data": ([SyntheticsDowntimeData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[SyntheticsDowntimeData], **kwargs): + """ + Response containing a list of Synthetics downtimes. + + :param data: List of Synthetics downtime objects. + :type data: [SyntheticsDowntimeData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/synthetics_fast_test_result.py b/datadog_api_client/v2/model/synthetics_fast_test_result.py new file mode 100644 index 0000000000..95aed89e90 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_fast_test_result.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_fast_test_result_data import SyntheticsFastTestResultData + +class SyntheticsFastTestResult(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_fast_test_result_data import SyntheticsFastTestResultData + return { + "data": (SyntheticsFastTestResultData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SyntheticsFastTestResultData, UnsetType]=unset, **kwargs): + """ + Fast test result response. Returns ``null`` if the result is not yet available + (the test is still running or timed out before completing). + + :param data: Fast test result data object (JSON:API format). + :type data: SyntheticsFastTestResultData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_fast_test_result_attributes.py b/datadog_api_client/v2/model/synthetics_fast_test_result_attributes.py new file mode 100644 index 0000000000..6b3623c183 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_fast_test_result_attributes.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_device import SyntheticsTestResultDevice + from datadog_api_client.v2.model.synthetics_test_result_location import SyntheticsTestResultLocation + from datadog_api_client.v2.model.synthetics_fast_test_result_detail import SyntheticsFastTestResultDetail + from datadog_api_client.v2.model.synthetics_fast_test_sub_type import SyntheticsFastTestSubType + from datadog_api_client.v2.model.synthetics_fast_test_type import SyntheticsFastTestType + +class SyntheticsFastTestResultAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_device import SyntheticsTestResultDevice + from datadog_api_client.v2.model.synthetics_test_result_location import SyntheticsTestResultLocation + from datadog_api_client.v2.model.synthetics_fast_test_result_detail import SyntheticsFastTestResultDetail + from datadog_api_client.v2.model.synthetics_fast_test_sub_type import SyntheticsFastTestSubType + from datadog_api_client.v2.model.synthetics_fast_test_type import SyntheticsFastTestType + return { + "device": (SyntheticsTestResultDevice,), + "location": (SyntheticsTestResultLocation,), + "result": (SyntheticsFastTestResultDetail,), + "test_sub_type": (SyntheticsFastTestSubType,), + "test_type": (SyntheticsFastTestType,), + "test_version": (int,), + } + attribute_map = { + "device": "device", + "location": "location", + "result": "result", + "test_sub_type": "test_sub_type", + "test_type": "test_type", + "test_version": "test_version", + } + + def __init__(self_, device: Union[SyntheticsTestResultDevice, UnsetType]=unset, location: Union[SyntheticsTestResultLocation, UnsetType]=unset, result: Union[SyntheticsFastTestResultDetail, UnsetType]=unset, test_sub_type: Union[SyntheticsFastTestSubType, UnsetType]=unset, test_type: Union[SyntheticsFastTestType, UnsetType]=unset, test_version: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes of the fast test result. + + :param device: Device information for the test result (browser and mobile tests). + :type device: SyntheticsTestResultDevice, optional + + :param location: Location information for a Synthetic test result. + :type location: SyntheticsTestResultLocation, optional + + :param result: Detailed result data for the fast test run. The exact shape of nested fields + ( ``request`` , ``response`` , ``assertions`` , etc.) depends on the test subtype. + :type result: SyntheticsFastTestResultDetail, optional + + :param test_sub_type: Subtype of the Synthetic test that produced this result. + :type test_sub_type: SyntheticsFastTestSubType, optional + + :param test_type: Type of the Synthetic fast test that produced this result. + :type test_type: SyntheticsFastTestType, optional + + :param test_version: Version of the test at the time the fast test was triggered. + :type test_version: int, optional + """ + if device is not unset: + kwargs["device"] = device + if location is not unset: + kwargs["location"] = location + if result is not unset: + kwargs["result"] = result + if test_sub_type is not unset: + kwargs["test_sub_type"] = test_sub_type + if test_type is not unset: + kwargs["test_type"] = test_type + if test_version is not unset: + kwargs["test_version"] = test_version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_fast_test_result_data.py b/datadog_api_client/v2/model/synthetics_fast_test_result_data.py new file mode 100644 index 0000000000..b078bb48cd --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_fast_test_result_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_fast_test_result_attributes import SyntheticsFastTestResultAttributes + from datadog_api_client.v2.model.synthetics_fast_test_result_type import SyntheticsFastTestResultType + +class SyntheticsFastTestResultData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_fast_test_result_attributes import SyntheticsFastTestResultAttributes + from datadog_api_client.v2.model.synthetics_fast_test_result_type import SyntheticsFastTestResultType + return { + "attributes": (SyntheticsFastTestResultAttributes,), + "id": (str,), + "type": (SyntheticsFastTestResultType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsFastTestResultAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SyntheticsFastTestResultType, UnsetType]=unset, **kwargs): + """ + Fast test result data object (JSON:API format). + + :param attributes: Attributes of the fast test result. + :type attributes: SyntheticsFastTestResultAttributes, optional + + :param id: The UUID of the fast test, used as the result identifier. + :type id: str, optional + + :param type: JSON:API type for a fast test result. + :type type: SyntheticsFastTestResultType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_fast_test_result_detail.py b/datadog_api_client/v2/model/synthetics_fast_test_result_detail.py new file mode 100644 index 0000000000..3956b100ab --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_fast_test_result_detail.py @@ -0,0 +1,190 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_assertion_result import SyntheticsTestResultAssertionResult + from datadog_api_client.v2.model.synthetics_test_result_certificate import SyntheticsTestResultCertificate + from datadog_api_client.v2.model.synthetics_test_result_failure import SyntheticsTestResultFailure + from datadog_api_client.v2.model.synthetics_test_result_request_info import SyntheticsTestResultRequestInfo + from datadog_api_client.v2.model.synthetics_test_result_response_info import SyntheticsTestResultResponseInfo + from datadog_api_client.v2.model.synthetics_test_result_run_type import SyntheticsTestResultRunType + from datadog_api_client.v2.model.synthetics_test_result_step import SyntheticsTestResultStep + from datadog_api_client.v2.model.synthetics_test_result_traceroute_hop import SyntheticsTestResultTracerouteHop + +class SyntheticsFastTestResultDetail(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_assertion_result import SyntheticsTestResultAssertionResult + from datadog_api_client.v2.model.synthetics_test_result_certificate import SyntheticsTestResultCertificate + from datadog_api_client.v2.model.synthetics_test_result_failure import SyntheticsTestResultFailure + from datadog_api_client.v2.model.synthetics_test_result_request_info import SyntheticsTestResultRequestInfo + from datadog_api_client.v2.model.synthetics_test_result_response_info import SyntheticsTestResultResponseInfo + from datadog_api_client.v2.model.synthetics_test_result_run_type import SyntheticsTestResultRunType + from datadog_api_client.v2.model.synthetics_test_result_step import SyntheticsTestResultStep + from datadog_api_client.v2.model.synthetics_test_result_traceroute_hop import SyntheticsTestResultTracerouteHop + return { + "assertions": ([SyntheticsTestResultAssertionResult],), + "call_type": (str,), + "cert": (SyntheticsTestResultCertificate,), + "duration": (float,), + "failure": (SyntheticsTestResultFailure,), + "finished_at": (int,), + "id": (str,), + "is_fast_retry": (bool,), + "request": (SyntheticsTestResultRequestInfo,), + "resolved_ip": (str,), + "response": (SyntheticsTestResultResponseInfo,), + "run_type": (SyntheticsTestResultRunType,), + "started_at": (int,), + "status": (str,), + "steps": ([SyntheticsTestResultStep],), + "timings": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "traceroute": ([SyntheticsTestResultTracerouteHop],), + "triggered_at": (int,), + "tunnel": (bool,), + } + attribute_map = { + "assertions": "assertions", + "call_type": "call_type", + "cert": "cert", + "duration": "duration", + "failure": "failure", + "finished_at": "finished_at", + "id": "id", + "is_fast_retry": "is_fast_retry", + "request": "request", + "resolved_ip": "resolved_ip", + "response": "response", + "run_type": "run_type", + "started_at": "started_at", + "status": "status", + "steps": "steps", + "timings": "timings", + "traceroute": "traceroute", + "triggered_at": "triggered_at", + "tunnel": "tunnel", + } + + def __init__(self_, assertions: Union[List[SyntheticsTestResultAssertionResult], UnsetType]=unset, call_type: Union[str, UnsetType]=unset, cert: Union[SyntheticsTestResultCertificate, UnsetType]=unset, duration: Union[float, UnsetType]=unset, failure: Union[SyntheticsTestResultFailure, UnsetType]=unset, finished_at: Union[int, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_fast_retry: Union[bool, UnsetType]=unset, request: Union[SyntheticsTestResultRequestInfo, UnsetType]=unset, resolved_ip: Union[str, UnsetType]=unset, response: Union[SyntheticsTestResultResponseInfo, UnsetType]=unset, run_type: Union[SyntheticsTestResultRunType, UnsetType]=unset, started_at: Union[int, UnsetType]=unset, status: Union[str, UnsetType]=unset, steps: Union[List[SyntheticsTestResultStep], UnsetType]=unset, timings: Union[Dict[str, Any], UnsetType]=unset, traceroute: Union[List[SyntheticsTestResultTracerouteHop], UnsetType]=unset, triggered_at: Union[int, UnsetType]=unset, tunnel: Union[bool, UnsetType]=unset, **kwargs): + """ + Detailed result data for the fast test run. The exact shape of nested fields + ( ``request`` , ``response`` , ``assertions`` , etc.) depends on the test subtype. + + :param assertions: Results of each assertion evaluated during the test. + :type assertions: [SyntheticsTestResultAssertionResult], optional + + :param call_type: gRPC call type (for example, ``unary`` , ``healthCheck`` , or ``reflection`` ). + :type call_type: str, optional + + :param cert: SSL/TLS certificate information returned from an SSL test. + :type cert: SyntheticsTestResultCertificate, optional + + :param duration: Total duration of the test in milliseconds. + :type duration: float, optional + + :param failure: Details about the failure of a Synthetic test. + :type failure: SyntheticsTestResultFailure, optional + + :param finished_at: Unix timestamp (ms) of when the test finished. + :type finished_at: int, optional + + :param id: The result ID. Set to the fast test UUID because no persistent result ID exists for fast tests. + :type id: str, optional + + :param is_fast_retry: Whether this result is from an automatic fast retry. + :type is_fast_retry: bool, optional + + :param request: Details of the outgoing request made during the test execution. + :type request: SyntheticsTestResultRequestInfo, optional + + :param resolved_ip: IP address resolved for the target host. + :type resolved_ip: str, optional + + :param response: Details of the response received during the test execution. + :type response: SyntheticsTestResultResponseInfo, optional + + :param run_type: The type of run for a Synthetic test result. + :type run_type: SyntheticsTestResultRunType, optional + + :param started_at: Unix timestamp (ms) of when the test started. + :type started_at: int, optional + + :param status: Status of the test result ( ``passed`` or ``failed`` ). + :type status: str, optional + + :param steps: Step results for multistep API tests. + :type steps: [SyntheticsTestResultStep], optional + + :param timings: Timing breakdown of the test request phases (for example, DNS, TCP, TLS, first byte). + :type timings: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param traceroute: Traceroute hop results, present for ICMP and TCP tests. + :type traceroute: [SyntheticsTestResultTracerouteHop], optional + + :param triggered_at: Unix timestamp (ms) of when the test was triggered. + :type triggered_at: int, optional + + :param tunnel: Whether the test was run through a Synthetics tunnel. + :type tunnel: bool, optional + """ + if assertions is not unset: + kwargs["assertions"] = assertions + if call_type is not unset: + kwargs["call_type"] = call_type + if cert is not unset: + kwargs["cert"] = cert + if duration is not unset: + kwargs["duration"] = duration + if failure is not unset: + kwargs["failure"] = failure + if finished_at is not unset: + kwargs["finished_at"] = finished_at + if id is not unset: + kwargs["id"] = id + if is_fast_retry is not unset: + kwargs["is_fast_retry"] = is_fast_retry + if request is not unset: + kwargs["request"] = request + if resolved_ip is not unset: + kwargs["resolved_ip"] = resolved_ip + if response is not unset: + kwargs["response"] = response + if run_type is not unset: + kwargs["run_type"] = run_type + if started_at is not unset: + kwargs["started_at"] = started_at + if status is not unset: + kwargs["status"] = status + if steps is not unset: + kwargs["steps"] = steps + if timings is not unset: + kwargs["timings"] = timings + if traceroute is not unset: + kwargs["traceroute"] = traceroute + if triggered_at is not unset: + kwargs["triggered_at"] = triggered_at + if tunnel is not unset: + kwargs["tunnel"] = tunnel + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_fast_test_result_type.py b/datadog_api_client/v2/model/synthetics_fast_test_result_type.py new file mode 100644 index 0000000000..74e8b0fa18 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_fast_test_result_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsFastTestResultType(ModelSimple): + """ + JSON:API type for a fast test result. + + :param value: If omitted defaults to "result". Must be one of ["result"]. + :type value: str + """ + + allowed_values = { + "result", + } + RESULT: ClassVar["SyntheticsFastTestResultType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsFastTestResultType.RESULT = SyntheticsFastTestResultType("result") diff --git a/datadog_api_client/v2/model/synthetics_fast_test_sub_type.py b/datadog_api_client/v2/model/synthetics_fast_test_sub_type.py new file mode 100644 index 0000000000..e0da55bfea --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_fast_test_sub_type.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsFastTestSubType(ModelSimple): + """ + Subtype of the Synthetic test that produced this result. + + :param value: Must be one of ["dns", "grpc", "http", "icmp", "mcp", "multi", "ssl", "tcp", "udp", "websocket"]. + :type value: str + """ + + allowed_values = { + "dns", + "grpc", + "http", + "icmp", + "mcp", + "multi", + "ssl", + "tcp", + "udp", + "websocket", + } + DNS: ClassVar["SyntheticsFastTestSubType"] + GRPC: ClassVar["SyntheticsFastTestSubType"] + HTTP: ClassVar["SyntheticsFastTestSubType"] + ICMP: ClassVar["SyntheticsFastTestSubType"] + MCP: ClassVar["SyntheticsFastTestSubType"] + MULTI: ClassVar["SyntheticsFastTestSubType"] + SSL: ClassVar["SyntheticsFastTestSubType"] + TCP: ClassVar["SyntheticsFastTestSubType"] + UDP: ClassVar["SyntheticsFastTestSubType"] + WEBSOCKET: ClassVar["SyntheticsFastTestSubType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsFastTestSubType.DNS = SyntheticsFastTestSubType("dns") +SyntheticsFastTestSubType.GRPC = SyntheticsFastTestSubType("grpc") +SyntheticsFastTestSubType.HTTP = SyntheticsFastTestSubType("http") +SyntheticsFastTestSubType.ICMP = SyntheticsFastTestSubType("icmp") +SyntheticsFastTestSubType.MCP = SyntheticsFastTestSubType("mcp") +SyntheticsFastTestSubType.MULTI = SyntheticsFastTestSubType("multi") +SyntheticsFastTestSubType.SSL = SyntheticsFastTestSubType("ssl") +SyntheticsFastTestSubType.TCP = SyntheticsFastTestSubType("tcp") +SyntheticsFastTestSubType.UDP = SyntheticsFastTestSubType("udp") +SyntheticsFastTestSubType.WEBSOCKET = SyntheticsFastTestSubType("websocket") diff --git a/datadog_api_client/v2/model/synthetics_fast_test_type.py b/datadog_api_client/v2/model/synthetics_fast_test_type.py new file mode 100644 index 0000000000..826ec2d201 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_fast_test_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsFastTestType(ModelSimple): + """ + Type of the Synthetic fast test that produced this result. + + :param value: Must be one of ["fast-api", "fast-browser"]. + :type value: str + """ + + allowed_values = { + "fast-api", + "fast-browser", + } + FAST_API: ClassVar["SyntheticsFastTestType"] + FAST_BROWSER: ClassVar["SyntheticsFastTestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsFastTestType.FAST_API = SyntheticsFastTestType("fast-api") +SyntheticsFastTestType.FAST_BROWSER = SyntheticsFastTestType("fast-browser") diff --git a/datadog_api_client/v2/model/synthetics_global_variable.py b/datadog_api_client/v2/model/synthetics_global_variable.py new file mode 100644 index 0000000000..5cc7e3d54e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_global_variable.py @@ -0,0 +1,115 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_global_variable_attributes import SyntheticsGlobalVariableAttributes + from datadog_api_client.v2.model.synthetics_global_variable_parse_test_options import SyntheticsGlobalVariableParseTestOptions + from datadog_api_client.v2.model.synthetics_global_variable_value import SyntheticsGlobalVariableValue + +class SyntheticsGlobalVariable(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_global_variable_attributes import SyntheticsGlobalVariableAttributes + from datadog_api_client.v2.model.synthetics_global_variable_parse_test_options import SyntheticsGlobalVariableParseTestOptions + from datadog_api_client.v2.model.synthetics_global_variable_value import SyntheticsGlobalVariableValue + return { + "attributes": (SyntheticsGlobalVariableAttributes,), + "description": (str,), + "id": (str,), + "is_fido": (bool,), + "is_totp": (bool,), + "name": (str,), + "parse_test_options": (SyntheticsGlobalVariableParseTestOptions,), + "parse_test_public_id": (str,), + "tags": ([str],), + "value": (SyntheticsGlobalVariableValue,), + } + attribute_map = { + "attributes": "attributes", + "description": "description", + "id": "id", + "is_fido": "is_fido", + "is_totp": "is_totp", + "name": "name", + "parse_test_options": "parse_test_options", + "parse_test_public_id": "parse_test_public_id", + "tags": "tags", + "value": "value", + } + read_only_vars = { + "id", + } + + def __init__(self_, description: str, name: str, tags: List[str], value: SyntheticsGlobalVariableValue, attributes: Union[SyntheticsGlobalVariableAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, is_fido: Union[bool, UnsetType]=unset, is_totp: Union[bool, UnsetType]=unset, parse_test_options: Union[SyntheticsGlobalVariableParseTestOptions, UnsetType]=unset, parse_test_public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Synthetic global variable. + + :param attributes: Attributes of the global variable. + :type attributes: SyntheticsGlobalVariableAttributes, optional + + :param description: Description of the global variable. + :type description: str + + :param id: Unique identifier of the global variable. + :type id: str, optional + + :param is_fido: Determines if the global variable is a FIDO variable. + :type is_fido: bool, optional + + :param is_totp: Determines if the global variable is a TOTP/MFA variable. + :type is_totp: bool, optional + + :param name: Name of the global variable. Unique across Synthetic global variables. + :type name: str + + :param parse_test_options: Parser options to use for retrieving a Synthetic global variable from a Synthetic test. Used in conjunction with ``parse_test_public_id``. + :type parse_test_options: SyntheticsGlobalVariableParseTestOptions, optional + + :param parse_test_public_id: A Synthetic test ID to use as a test to generate the variable value. + :type parse_test_public_id: str, optional + + :param tags: Tags of the global variable. + :type tags: [str] + + :param value: Value of the global variable. + :type value: SyntheticsGlobalVariableValue + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if is_fido is not unset: + kwargs["is_fido"] = is_fido + if is_totp is not unset: + kwargs["is_totp"] = is_totp + if parse_test_options is not unset: + kwargs["parse_test_options"] = parse_test_options + if parse_test_public_id is not unset: + kwargs["parse_test_public_id"] = parse_test_public_id + super().__init__(kwargs) + + + self_.description = description + self_.name = name + self_.tags = tags + self_.value = value diff --git a/datadog_api_client/v2/model/synthetics_global_variable_attributes.py b/datadog_api_client/v2/model/synthetics_global_variable_attributes.py new file mode 100644 index 0000000000..9b7d873ba8 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_global_variable_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsGlobalVariableAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "restricted_roles": ([str],), + } + attribute_map = { + "restricted_roles": "restricted_roles", + } + + def __init__(self_, restricted_roles: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of the global variable. + + :param restricted_roles: A list of role identifiers that can be pulled from the Roles API, for restricting read and write access. This field is deprecated. Use the restriction policies API to manage permissions. **Deprecated**. + :type restricted_roles: [str], optional + """ + if restricted_roles is not unset: + kwargs["restricted_roles"] = restricted_roles + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_global_variable_options.py b/datadog_api_client/v2/model/synthetics_global_variable_options.py new file mode 100644 index 0000000000..965344e004 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_global_variable_options.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_global_variable_totp_parameters import SyntheticsGlobalVariableTOTPParameters + +class SyntheticsGlobalVariableOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_global_variable_totp_parameters import SyntheticsGlobalVariableTOTPParameters + return { + "totp_parameters": (SyntheticsGlobalVariableTOTPParameters,), + } + attribute_map = { + "totp_parameters": "totp_parameters", + } + + def __init__(self_, totp_parameters: Union[SyntheticsGlobalVariableTOTPParameters, UnsetType]=unset, **kwargs): + """ + Options for the Global Variable for MFA. + + :param totp_parameters: Parameters for the TOTP/MFA variable + :type totp_parameters: SyntheticsGlobalVariableTOTPParameters, optional + """ + if totp_parameters is not unset: + kwargs["totp_parameters"] = totp_parameters + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_global_variable_parse_test_options.py b/datadog_api_client/v2/model/synthetics_global_variable_parse_test_options.py new file mode 100644 index 0000000000..6fef0bce0f --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_global_variable_parse_test_options.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_variable_parser import SyntheticsVariableParser + from datadog_api_client.v2.model.synthetics_global_variable_parse_test_options_type import SyntheticsGlobalVariableParseTestOptionsType + +class SyntheticsGlobalVariableParseTestOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_variable_parser import SyntheticsVariableParser + from datadog_api_client.v2.model.synthetics_global_variable_parse_test_options_type import SyntheticsGlobalVariableParseTestOptionsType + return { + "field": (str,), + "local_variable_name": (str,), + "parser": (SyntheticsVariableParser,), + "type": (SyntheticsGlobalVariableParseTestOptionsType,), + } + attribute_map = { + "field": "field", + "local_variable_name": "localVariableName", + "parser": "parser", + "type": "type", + } + + def __init__(self_, type: SyntheticsGlobalVariableParseTestOptionsType, field: Union[str, UnsetType]=unset, local_variable_name: Union[str, UnsetType]=unset, parser: Union[SyntheticsVariableParser, UnsetType]=unset, **kwargs): + """ + Parser options to use for retrieving a Synthetic global variable from a Synthetic test. Used in conjunction with ``parse_test_public_id``. + + :param field: When type is ``http_header`` , name of the header to use to extract the value. + :type field: str, optional + + :param local_variable_name: When type is ``local_variable`` , name of the local variable to use to extract the value. + :type local_variable_name: str, optional + + :param parser: Details of the parser to use for the global variable. + :type parser: SyntheticsVariableParser, optional + + :param type: Type of value to extract from a test for a Synthetic global variable. + :type type: SyntheticsGlobalVariableParseTestOptionsType + """ + if field is not unset: + kwargs["field"] = field + if local_variable_name is not unset: + kwargs["local_variable_name"] = local_variable_name + if parser is not unset: + kwargs["parser"] = parser + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_global_variable_parse_test_options_type.py b/datadog_api_client/v2/model/synthetics_global_variable_parse_test_options_type.py new file mode 100644 index 0000000000..e8ff300561 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_global_variable_parse_test_options_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsGlobalVariableParseTestOptionsType(ModelSimple): + """ + Type of value to extract from a test for a Synthetic global variable. + + :param value: Must be one of ["http_body", "http_header", "http_status_code", "local_variable"]. + :type value: str + """ + + allowed_values = { + "http_body", + "http_header", + "http_status_code", + "local_variable", + } + HTTP_BODY: ClassVar["SyntheticsGlobalVariableParseTestOptionsType"] + HTTP_HEADER: ClassVar["SyntheticsGlobalVariableParseTestOptionsType"] + HTTP_STATUS_CODE: ClassVar["SyntheticsGlobalVariableParseTestOptionsType"] + LOCAL_VARIABLE: ClassVar["SyntheticsGlobalVariableParseTestOptionsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsGlobalVariableParseTestOptionsType.HTTP_BODY = SyntheticsGlobalVariableParseTestOptionsType("http_body") +SyntheticsGlobalVariableParseTestOptionsType.HTTP_HEADER = SyntheticsGlobalVariableParseTestOptionsType("http_header") +SyntheticsGlobalVariableParseTestOptionsType.HTTP_STATUS_CODE = SyntheticsGlobalVariableParseTestOptionsType("http_status_code") +SyntheticsGlobalVariableParseTestOptionsType.LOCAL_VARIABLE = SyntheticsGlobalVariableParseTestOptionsType("local_variable") diff --git a/datadog_api_client/v2/model/synthetics_global_variable_parser_type.py b/datadog_api_client/v2/model/synthetics_global_variable_parser_type.py new file mode 100644 index 0000000000..0422b5b640 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_global_variable_parser_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsGlobalVariableParserType(ModelSimple): + """ + Type of parser for a Synthetic global variable from a synthetics test. + + :param value: Must be one of ["raw", "json_path", "regex", "x_path"]. + :type value: str + """ + + allowed_values = { + "raw", + "json_path", + "regex", + "x_path", + } + RAW: ClassVar["SyntheticsGlobalVariableParserType"] + JSON_PATH: ClassVar["SyntheticsGlobalVariableParserType"] + REGEX: ClassVar["SyntheticsGlobalVariableParserType"] + X_PATH: ClassVar["SyntheticsGlobalVariableParserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsGlobalVariableParserType.RAW = SyntheticsGlobalVariableParserType("raw") +SyntheticsGlobalVariableParserType.JSON_PATH = SyntheticsGlobalVariableParserType("json_path") +SyntheticsGlobalVariableParserType.REGEX = SyntheticsGlobalVariableParserType("regex") +SyntheticsGlobalVariableParserType.X_PATH = SyntheticsGlobalVariableParserType("x_path") diff --git a/datadog_api_client/v2/model/synthetics_global_variable_totp_parameters.py b/datadog_api_client/v2/model/synthetics_global_variable_totp_parameters.py new file mode 100644 index 0000000000..61ad65b683 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_global_variable_totp_parameters.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsGlobalVariableTOTPParameters(ModelNormal): + validations = { + "digits": { + "inclusive_maximum": 10, + "inclusive_minimum": 4, + }, + "refresh_interval": { + "inclusive_maximum": 999, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "digits": (int,), + "refresh_interval": (int,), + } + attribute_map = { + "digits": "digits", + "refresh_interval": "refresh_interval", + } + + def __init__(self_, digits: Union[int, UnsetType]=unset, refresh_interval: Union[int, UnsetType]=unset, **kwargs): + """ + Parameters for the TOTP/MFA variable + + :param digits: Number of digits for the OTP code. + :type digits: int, optional + + :param refresh_interval: Interval for which to refresh the token (in seconds). + :type refresh_interval: int, optional + """ + if digits is not unset: + kwargs["digits"] = digits + if refresh_interval is not unset: + kwargs["refresh_interval"] = refresh_interval + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_global_variable_value.py b/datadog_api_client/v2/model/synthetics_global_variable_value.py new file mode 100644 index 0000000000..96afef961c --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_global_variable_value.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_global_variable_options import SyntheticsGlobalVariableOptions + +class SyntheticsGlobalVariableValue(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_global_variable_options import SyntheticsGlobalVariableOptions + return { + "options": (SyntheticsGlobalVariableOptions,), + "secure": (bool,), + "value": (str,), + } + attribute_map = { + "options": "options", + "secure": "secure", + "value": "value", + } + + def __init__(self_, options: Union[SyntheticsGlobalVariableOptions, UnsetType]=unset, secure: Union[bool, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + Value of the global variable. + + :param options: Options for the Global Variable for MFA. + :type options: SyntheticsGlobalVariableOptions, optional + + :param secure: Determines if the value of the variable is hidden. + :type secure: bool, optional + + :param value: Value of the global variable. When reading a global variable, + the value will not be present if the variable is hidden with the ``secure`` property. + :type value: str, optional + """ + if options is not unset: + kwargs["options"] = options + if secure is not unset: + kwargs["secure"] = secure + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_network_assertion.py b/datadog_api_client/v2/model/synthetics_network_assertion.py new file mode 100644 index 0000000000..ad61335793 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsNetworkAssertion(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Object describing an assertion for a Network Path test. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsNetworkAssertionOperator + + :param _property: The associated assertion property. + :type _property: SyntheticsNetworkAssertionProperty + + :param target: Target value in milliseconds. + :type target: float + + :param type: Type of the latency assertion. + :type type: SyntheticsNetworkAssertionLatencyType + """ + 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.synthetics_network_assertion_latency import SyntheticsNetworkAssertionLatency + from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop import SyntheticsNetworkAssertionMultiNetworkHop + from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage import SyntheticsNetworkAssertionPacketLossPercentage + from datadog_api_client.v2.model.synthetics_network_assertion_jitter import SyntheticsNetworkAssertionJitter + return { + "oneOf": [ + SyntheticsNetworkAssertionLatency, + SyntheticsNetworkAssertionMultiNetworkHop, + SyntheticsNetworkAssertionPacketLossPercentage, + SyntheticsNetworkAssertionJitter, + ], + } diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_jitter.py b/datadog_api_client/v2/model/synthetics_network_assertion_jitter.py new file mode 100644 index 0000000000..e6ab5c8a59 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_jitter.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_assertion_operator import SyntheticsNetworkAssertionOperator + from datadog_api_client.v2.model.synthetics_network_assertion_jitter_type import SyntheticsNetworkAssertionJitterType + +class SyntheticsNetworkAssertionJitter(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_assertion_operator import SyntheticsNetworkAssertionOperator + from datadog_api_client.v2.model.synthetics_network_assertion_jitter_type import SyntheticsNetworkAssertionJitterType + return { + "operator": (SyntheticsNetworkAssertionOperator,), + "target": (float,), + "type": (SyntheticsNetworkAssertionJitterType,), + } + attribute_map = { + "operator": "operator", + "target": "target", + "type": "type", + } + + def __init__(self_, operator: SyntheticsNetworkAssertionOperator, target: float, type: SyntheticsNetworkAssertionJitterType, **kwargs): + """ + Jitter assertion for a Network Path test. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsNetworkAssertionOperator + + :param target: Target value in milliseconds. + :type target: float + + :param type: Type of the jitter assertion. + :type type: SyntheticsNetworkAssertionJitterType + """ + super().__init__(kwargs) + + + self_.operator = operator + self_.target = target + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_jitter_type.py b/datadog_api_client/v2/model/synthetics_network_assertion_jitter_type.py new file mode 100644 index 0000000000..97152d9b30 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_jitter_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkAssertionJitterType(ModelSimple): + """ + Type of the jitter assertion. + + :param value: If omitted defaults to "jitter". Must be one of ["jitter"]. + :type value: str + """ + + allowed_values = { + "jitter", + } + JITTER: ClassVar["SyntheticsNetworkAssertionJitterType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkAssertionJitterType.JITTER = SyntheticsNetworkAssertionJitterType("jitter") diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_latency.py b/datadog_api_client/v2/model/synthetics_network_assertion_latency.py new file mode 100644 index 0000000000..6e4e141a6c --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_latency.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_assertion_operator import SyntheticsNetworkAssertionOperator + from datadog_api_client.v2.model.synthetics_network_assertion_property import SyntheticsNetworkAssertionProperty + from datadog_api_client.v2.model.synthetics_network_assertion_latency_type import SyntheticsNetworkAssertionLatencyType + +class SyntheticsNetworkAssertionLatency(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_assertion_operator import SyntheticsNetworkAssertionOperator + from datadog_api_client.v2.model.synthetics_network_assertion_property import SyntheticsNetworkAssertionProperty + from datadog_api_client.v2.model.synthetics_network_assertion_latency_type import SyntheticsNetworkAssertionLatencyType + return { + "operator": (SyntheticsNetworkAssertionOperator,), + "_property": (SyntheticsNetworkAssertionProperty,), + "target": (float,), + "type": (SyntheticsNetworkAssertionLatencyType,), + } + attribute_map = { + "operator": "operator", + "_property": "property", + "target": "target", + "type": "type", + } + + def __init__(self_, operator: SyntheticsNetworkAssertionOperator, _property: SyntheticsNetworkAssertionProperty, target: float, type: SyntheticsNetworkAssertionLatencyType, **kwargs): + """ + Network latency assertion for a Network Path test. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsNetworkAssertionOperator + + :param _property: The associated assertion property. + :type _property: SyntheticsNetworkAssertionProperty + + :param target: Target value in milliseconds. + :type target: float + + :param type: Type of the latency assertion. + :type type: SyntheticsNetworkAssertionLatencyType + """ + super().__init__(kwargs) + + + self_.operator = operator + self_._property = _property + self_.target = target + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_latency_type.py b/datadog_api_client/v2/model/synthetics_network_assertion_latency_type.py new file mode 100644 index 0000000000..097b772fa1 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_latency_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkAssertionLatencyType(ModelSimple): + """ + Type of the latency assertion. + + :param value: If omitted defaults to "latency". Must be one of ["latency"]. + :type value: str + """ + + allowed_values = { + "latency", + } + LATENCY: ClassVar["SyntheticsNetworkAssertionLatencyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkAssertionLatencyType.LATENCY = SyntheticsNetworkAssertionLatencyType("latency") diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_multi_network_hop.py b/datadog_api_client/v2/model/synthetics_network_assertion_multi_network_hop.py new file mode 100644 index 0000000000..b48abb1c5b --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_multi_network_hop.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_assertion_operator import SyntheticsNetworkAssertionOperator + from datadog_api_client.v2.model.synthetics_network_assertion_property import SyntheticsNetworkAssertionProperty + from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop_type import SyntheticsNetworkAssertionMultiNetworkHopType + +class SyntheticsNetworkAssertionMultiNetworkHop(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_assertion_operator import SyntheticsNetworkAssertionOperator + from datadog_api_client.v2.model.synthetics_network_assertion_property import SyntheticsNetworkAssertionProperty + from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop_type import SyntheticsNetworkAssertionMultiNetworkHopType + return { + "operator": (SyntheticsNetworkAssertionOperator,), + "_property": (SyntheticsNetworkAssertionProperty,), + "target": (float,), + "type": (SyntheticsNetworkAssertionMultiNetworkHopType,), + } + attribute_map = { + "operator": "operator", + "_property": "property", + "target": "target", + "type": "type", + } + + def __init__(self_, operator: SyntheticsNetworkAssertionOperator, _property: SyntheticsNetworkAssertionProperty, target: float, type: SyntheticsNetworkAssertionMultiNetworkHopType, **kwargs): + """ + Multi-network hop assertion for a Network Path test. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsNetworkAssertionOperator + + :param _property: The associated assertion property. + :type _property: SyntheticsNetworkAssertionProperty + + :param target: Target value in number of hops. + :type target: float + + :param type: Type of the multi-network hop assertion. + :type type: SyntheticsNetworkAssertionMultiNetworkHopType + """ + super().__init__(kwargs) + + + self_.operator = operator + self_._property = _property + self_.target = target + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_multi_network_hop_type.py b/datadog_api_client/v2/model/synthetics_network_assertion_multi_network_hop_type.py new file mode 100644 index 0000000000..85e0f99773 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_multi_network_hop_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkAssertionMultiNetworkHopType(ModelSimple): + """ + Type of the multi-network hop assertion. + + :param value: If omitted defaults to "multiNetworkHop". Must be one of ["multiNetworkHop"]. + :type value: str + """ + + allowed_values = { + "multiNetworkHop", + } + MULTI_NETWORK_HOP: ClassVar["SyntheticsNetworkAssertionMultiNetworkHopType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkAssertionMultiNetworkHopType.MULTI_NETWORK_HOP = SyntheticsNetworkAssertionMultiNetworkHopType("multiNetworkHop") diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_operator.py b/datadog_api_client/v2/model/synthetics_network_assertion_operator.py new file mode 100644 index 0000000000..3b706a35f3 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_operator.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkAssertionOperator(ModelSimple): + """ + Assertion operator to apply. + + :param value: Must be one of ["is", "isNot", "lessThan", "lessThanOrEqual", "moreThan", "moreThanOrEqual"]. + :type value: str + """ + + allowed_values = { + "is", + "isNot", + "lessThan", + "lessThanOrEqual", + "moreThan", + "moreThanOrEqual", + } + IS: ClassVar["SyntheticsNetworkAssertionOperator"] + IS_NOT: ClassVar["SyntheticsNetworkAssertionOperator"] + LESS_THAN: ClassVar["SyntheticsNetworkAssertionOperator"] + LESS_THAN_OR_EQUAL: ClassVar["SyntheticsNetworkAssertionOperator"] + MORE_THAN: ClassVar["SyntheticsNetworkAssertionOperator"] + MORE_THAN_OR_EQUAL: ClassVar["SyntheticsNetworkAssertionOperator"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkAssertionOperator.IS = SyntheticsNetworkAssertionOperator("is") +SyntheticsNetworkAssertionOperator.IS_NOT = SyntheticsNetworkAssertionOperator("isNot") +SyntheticsNetworkAssertionOperator.LESS_THAN = SyntheticsNetworkAssertionOperator("lessThan") +SyntheticsNetworkAssertionOperator.LESS_THAN_OR_EQUAL = SyntheticsNetworkAssertionOperator("lessThanOrEqual") +SyntheticsNetworkAssertionOperator.MORE_THAN = SyntheticsNetworkAssertionOperator("moreThan") +SyntheticsNetworkAssertionOperator.MORE_THAN_OR_EQUAL = SyntheticsNetworkAssertionOperator("moreThanOrEqual") diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_packet_loss_percentage.py b/datadog_api_client/v2/model/synthetics_network_assertion_packet_loss_percentage.py new file mode 100644 index 0000000000..342891e891 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_packet_loss_percentage.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_assertion_operator import SyntheticsNetworkAssertionOperator + from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage_type import SyntheticsNetworkAssertionPacketLossPercentageType + +class SyntheticsNetworkAssertionPacketLossPercentage(ModelNormal): + validations = { + "target": { + "inclusive_maximum": 1, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_assertion_operator import SyntheticsNetworkAssertionOperator + from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage_type import SyntheticsNetworkAssertionPacketLossPercentageType + return { + "operator": (SyntheticsNetworkAssertionOperator,), + "target": (float,), + "type": (SyntheticsNetworkAssertionPacketLossPercentageType,), + } + attribute_map = { + "operator": "operator", + "target": "target", + "type": "type", + } + + def __init__(self_, operator: SyntheticsNetworkAssertionOperator, target: float, type: SyntheticsNetworkAssertionPacketLossPercentageType, **kwargs): + """ + Packet loss percentage assertion for a Network Path test. + + :param operator: Assertion operator to apply. + :type operator: SyntheticsNetworkAssertionOperator + + :param target: Target value as a percentage (0 to 1). + :type target: float + + :param type: Type of the packet loss percentage assertion. + :type type: SyntheticsNetworkAssertionPacketLossPercentageType + """ + super().__init__(kwargs) + + + self_.operator = operator + self_.target = target + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_packet_loss_percentage_type.py b/datadog_api_client/v2/model/synthetics_network_assertion_packet_loss_percentage_type.py new file mode 100644 index 0000000000..3a09a0e4a1 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_packet_loss_percentage_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkAssertionPacketLossPercentageType(ModelSimple): + """ + Type of the packet loss percentage assertion. + + :param value: If omitted defaults to "packetLossPercentage". Must be one of ["packetLossPercentage"]. + :type value: str + """ + + allowed_values = { + "packetLossPercentage", + } + PACKET_LOSS_PERCENTAGE: ClassVar["SyntheticsNetworkAssertionPacketLossPercentageType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkAssertionPacketLossPercentageType.PACKET_LOSS_PERCENTAGE = SyntheticsNetworkAssertionPacketLossPercentageType("packetLossPercentage") diff --git a/datadog_api_client/v2/model/synthetics_network_assertion_property.py b/datadog_api_client/v2/model/synthetics_network_assertion_property.py new file mode 100644 index 0000000000..a5ddd57616 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_assertion_property.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkAssertionProperty(ModelSimple): + """ + The associated assertion property. + + :param value: Must be one of ["avg", "max", "min"]. + :type value: str + """ + + allowed_values = { + "avg", + "max", + "min", + } + AVG: ClassVar["SyntheticsNetworkAssertionProperty"] + MAX: ClassVar["SyntheticsNetworkAssertionProperty"] + MIN: ClassVar["SyntheticsNetworkAssertionProperty"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkAssertionProperty.AVG = SyntheticsNetworkAssertionProperty("avg") +SyntheticsNetworkAssertionProperty.MAX = SyntheticsNetworkAssertionProperty("max") +SyntheticsNetworkAssertionProperty.MIN = SyntheticsNetworkAssertionProperty("min") diff --git a/datadog_api_client/v2/model/synthetics_network_test.py b/datadog_api_client/v2/model/synthetics_network_test.py new file mode 100644 index 0000000000..7885f4449e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test.py @@ -0,0 +1,131 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_test_config import SyntheticsNetworkTestConfig + from datadog_api_client.v2.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v2.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v2.model.synthetics_network_test_sub_type import SyntheticsNetworkTestSubType + from datadog_api_client.v2.model.synthetics_network_test_type import SyntheticsNetworkTestType + from datadog_api_client.v2.model.synthetics_network_assertion_latency import SyntheticsNetworkAssertionLatency + from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop import SyntheticsNetworkAssertionMultiNetworkHop + from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage import SyntheticsNetworkAssertionPacketLossPercentage + from datadog_api_client.v2.model.synthetics_network_assertion_jitter import SyntheticsNetworkAssertionJitter + +class SyntheticsNetworkTest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_test_config import SyntheticsNetworkTestConfig + from datadog_api_client.v2.model.synthetics_test_options import SyntheticsTestOptions + from datadog_api_client.v2.model.synthetics_test_pause_status import SyntheticsTestPauseStatus + from datadog_api_client.v2.model.synthetics_network_test_sub_type import SyntheticsNetworkTestSubType + from datadog_api_client.v2.model.synthetics_network_test_type import SyntheticsNetworkTestType + return { + "config": (SyntheticsNetworkTestConfig,), + "locations": ([str],), + "message": (str,), + "monitor_id": (int,), + "name": (str,), + "options": (SyntheticsTestOptions,), + "public_id": (str,), + "status": (SyntheticsTestPauseStatus,), + "subtype": (SyntheticsNetworkTestSubType,), + "tags": ([str],), + "type": (SyntheticsNetworkTestType,), + } + attribute_map = { + "config": "config", + "locations": "locations", + "message": "message", + "monitor_id": "monitor_id", + "name": "name", + "options": "options", + "public_id": "public_id", + "status": "status", + "subtype": "subtype", + "tags": "tags", + "type": "type", + } + read_only_vars = { + "monitor_id", + "public_id", + } + + def __init__(self_, config: SyntheticsNetworkTestConfig, locations: List[str], message: str, name: str, options: SyntheticsTestOptions, type: SyntheticsNetworkTestType, monitor_id: Union[int, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, status: Union[SyntheticsTestPauseStatus, UnsetType]=unset, subtype: Union[SyntheticsNetworkTestSubType, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing details about a Network Path test. + + :param config: Configuration object for a Network Path test. + :type config: SyntheticsNetworkTestConfig + + :param locations: Array of locations used to run the test. Network Path tests can be run from managed locations to test public endpoints, + or from a `Datadog Agent `_ to test private environments. + :type locations: [str] + + :param message: Notification message associated with the test. + :type message: str + + :param monitor_id: The associated monitor ID. + :type monitor_id: int, optional + + :param name: Name of the test. + :type name: str + + :param options: Object describing the extra options for a Synthetic test. + :type options: SyntheticsTestOptions + + :param public_id: The public ID for the test. + :type public_id: str, optional + + :param status: Define whether you want to start ( ``live`` ) or pause ( ``paused`` ) a + Synthetic test. + :type status: SyntheticsTestPauseStatus, optional + + :param subtype: Subtype of the Synthetic Network Path test: ``tcp`` , ``udp`` , or ``icmp``. + :type subtype: SyntheticsNetworkTestSubType, optional + + :param tags: Array of tags attached to the test. + :type tags: [str], optional + + :param type: Type of the Synthetic test, ``network``. + :type type: SyntheticsNetworkTestType + """ + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if public_id is not unset: + kwargs["public_id"] = public_id + if status is not unset: + kwargs["status"] = status + if subtype is not unset: + kwargs["subtype"] = subtype + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.config = config + self_.locations = locations + self_.message = message + self_.name = name + self_.options = options + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_network_test_config.py b/datadog_api_client/v2/model/synthetics_network_test_config.py new file mode 100644 index 0000000000..ca98835c9f --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_config.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_assertion import SyntheticsNetworkAssertion + from datadog_api_client.v2.model.synthetics_network_test_request import SyntheticsNetworkTestRequest + from datadog_api_client.v2.model.synthetics_network_assertion_latency import SyntheticsNetworkAssertionLatency + from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop import SyntheticsNetworkAssertionMultiNetworkHop + from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage import SyntheticsNetworkAssertionPacketLossPercentage + from datadog_api_client.v2.model.synthetics_network_assertion_jitter import SyntheticsNetworkAssertionJitter + +class SyntheticsNetworkTestConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_assertion import SyntheticsNetworkAssertion + from datadog_api_client.v2.model.synthetics_network_test_request import SyntheticsNetworkTestRequest + return { + "assertions": ([SyntheticsNetworkAssertion],), + "request": (SyntheticsNetworkTestRequest,), + } + attribute_map = { + "assertions": "assertions", + "request": "request", + } + + def __init__(self_, assertions: Union[List[Union[SyntheticsNetworkAssertion, SyntheticsNetworkAssertionLatency, SyntheticsNetworkAssertionMultiNetworkHop, SyntheticsNetworkAssertionPacketLossPercentage, SyntheticsNetworkAssertionJitter]], UnsetType]=unset, request: Union[SyntheticsNetworkTestRequest, UnsetType]=unset, **kwargs): + """ + Configuration object for a Network Path test. + + :param assertions: Array of assertions used for the test. + :type assertions: [SyntheticsNetworkAssertion], optional + + :param request: Object describing the request for a Network Path test. + :type request: SyntheticsNetworkTestRequest, optional + """ + if assertions is not unset: + kwargs["assertions"] = assertions + if request is not unset: + kwargs["request"] = request + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_network_test_edit.py b/datadog_api_client/v2/model/synthetics_network_test_edit.py new file mode 100644 index 0000000000..7c9b792529 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_edit.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_test import SyntheticsNetworkTest + from datadog_api_client.v2.model.synthetics_network_test_type import SyntheticsNetworkTestType + from datadog_api_client.v2.model.synthetics_network_assertion_latency import SyntheticsNetworkAssertionLatency + from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop import SyntheticsNetworkAssertionMultiNetworkHop + from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage import SyntheticsNetworkAssertionPacketLossPercentage + from datadog_api_client.v2.model.synthetics_network_assertion_jitter import SyntheticsNetworkAssertionJitter + +class SyntheticsNetworkTestEdit(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_test import SyntheticsNetworkTest + from datadog_api_client.v2.model.synthetics_network_test_type import SyntheticsNetworkTestType + return { + "attributes": (SyntheticsNetworkTest,), + "type": (SyntheticsNetworkTestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: SyntheticsNetworkTest, type: SyntheticsNetworkTestType, **kwargs): + """ + Data object for creating or editing a Network Path test. + + :param attributes: Object containing details about a Network Path test. + :type attributes: SyntheticsNetworkTest + + :param type: Type of the Synthetic test, ``network``. + :type type: SyntheticsNetworkTestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_network_test_edit_request.py b/datadog_api_client/v2/model/synthetics_network_test_edit_request.py new file mode 100644 index 0000000000..1ff3b6bbc9 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_edit_request.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_test_edit import SyntheticsNetworkTestEdit + from datadog_api_client.v2.model.synthetics_network_assertion_latency import SyntheticsNetworkAssertionLatency + from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop import SyntheticsNetworkAssertionMultiNetworkHop + from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage import SyntheticsNetworkAssertionPacketLossPercentage + from datadog_api_client.v2.model.synthetics_network_assertion_jitter import SyntheticsNetworkAssertionJitter + +class SyntheticsNetworkTestEditRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_test_edit import SyntheticsNetworkTestEdit + return { + "data": (SyntheticsNetworkTestEdit,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: SyntheticsNetworkTestEdit, **kwargs): + """ + Network Path test request. + + :param data: Data object for creating or editing a Network Path test. + :type data: SyntheticsNetworkTestEdit + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/synthetics_network_test_request.py b/datadog_api_client/v2/model/synthetics_network_test_request.py new file mode 100644 index 0000000000..dae716b741 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_request.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_test_request_tcp_method import SyntheticsNetworkTestRequestTCPMethod + +class SyntheticsNetworkTestRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_test_request_tcp_method import SyntheticsNetworkTestRequestTCPMethod + return { + "destination_service": (str,), + "e2e_queries": (int,), + "host": (str,), + "max_ttl": (int,), + "port": (int,), + "source_service": (str,), + "tcp_method": (SyntheticsNetworkTestRequestTCPMethod,), + "timeout": (int,), + "traceroute_queries": (int,), + } + attribute_map = { + "destination_service": "destination_service", + "e2e_queries": "e2e_queries", + "host": "host", + "max_ttl": "max_ttl", + "port": "port", + "source_service": "source_service", + "tcp_method": "tcp_method", + "timeout": "timeout", + "traceroute_queries": "traceroute_queries", + } + + def __init__(self_, e2e_queries: int, host: str, max_ttl: int, traceroute_queries: int, destination_service: Union[str, UnsetType]=unset, port: Union[int, UnsetType]=unset, source_service: Union[str, UnsetType]=unset, tcp_method: Union[SyntheticsNetworkTestRequestTCPMethod, UnsetType]=unset, timeout: Union[int, UnsetType]=unset, **kwargs): + """ + Object describing the request for a Network Path test. + + :param destination_service: An optional label displayed for the destination host in the Network Path visualization. + :type destination_service: str, optional + + :param e2e_queries: The number of packets sent to probe the destination to measure packet loss, latency and jitter. + :type e2e_queries: int + + :param host: Host name to query. + :type host: str + + :param max_ttl: The maximum time-to-live (max number of hops) used in outgoing probe packets. + :type max_ttl: int + + :param port: For TCP or UDP tests, the port to use when performing the test. + If not set on a UDP test, a random port is assigned, which may affect the results. + :type port: int, optional + + :param source_service: An optional label displayed for the source host in the Network Path visualization. + :type source_service: str, optional + + :param tcp_method: For TCP tests, the TCP traceroute strategy. + :type tcp_method: SyntheticsNetworkTestRequestTCPMethod, optional + + :param timeout: Timeout in seconds. + :type timeout: int, optional + + :param traceroute_queries: The number of traceroute path tracings. + :type traceroute_queries: int + """ + if destination_service is not unset: + kwargs["destination_service"] = destination_service + if port is not unset: + kwargs["port"] = port + if source_service is not unset: + kwargs["source_service"] = source_service + if tcp_method is not unset: + kwargs["tcp_method"] = tcp_method + if timeout is not unset: + kwargs["timeout"] = timeout + super().__init__(kwargs) + + + self_.e2e_queries = e2e_queries + self_.host = host + self_.max_ttl = max_ttl + self_.traceroute_queries = traceroute_queries diff --git a/datadog_api_client/v2/model/synthetics_network_test_request_tcp_method.py b/datadog_api_client/v2/model/synthetics_network_test_request_tcp_method.py new file mode 100644 index 0000000000..c71dfeaafc --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_request_tcp_method.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkTestRequestTCPMethod(ModelSimple): + """ + For TCP tests, the TCP traceroute strategy. + + :param value: Must be one of ["prefer_sack", "syn", "sack"]. + :type value: str + """ + + allowed_values = { + "prefer_sack", + "syn", + "sack", + } + PREFER_SACK: ClassVar["SyntheticsNetworkTestRequestTCPMethod"] + SYN: ClassVar["SyntheticsNetworkTestRequestTCPMethod"] + SACK: ClassVar["SyntheticsNetworkTestRequestTCPMethod"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkTestRequestTCPMethod.PREFER_SACK = SyntheticsNetworkTestRequestTCPMethod("prefer_sack") +SyntheticsNetworkTestRequestTCPMethod.SYN = SyntheticsNetworkTestRequestTCPMethod("syn") +SyntheticsNetworkTestRequestTCPMethod.SACK = SyntheticsNetworkTestRequestTCPMethod("sack") diff --git a/datadog_api_client/v2/model/synthetics_network_test_response.py b/datadog_api_client/v2/model/synthetics_network_test_response.py new file mode 100644 index 0000000000..2b9c9c3ca2 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_response.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_test_response_data import SyntheticsNetworkTestResponseData + from datadog_api_client.v2.model.synthetics_network_assertion_latency import SyntheticsNetworkAssertionLatency + from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop import SyntheticsNetworkAssertionMultiNetworkHop + from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage import SyntheticsNetworkAssertionPacketLossPercentage + from datadog_api_client.v2.model.synthetics_network_assertion_jitter import SyntheticsNetworkAssertionJitter + +class SyntheticsNetworkTestResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_test_response_data import SyntheticsNetworkTestResponseData + return { + "data": (SyntheticsNetworkTestResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SyntheticsNetworkTestResponseData, UnsetType]=unset, **kwargs): + """ + Network Path test response. + + :param data: Network Path test response data. + :type data: SyntheticsNetworkTestResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_network_test_response_data.py b/datadog_api_client/v2/model/synthetics_network_test_response_data.py new file mode 100644 index 0000000000..4e5d86bb7e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_response_data.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_network_test import SyntheticsNetworkTest + from datadog_api_client.v2.model.synthetics_network_test_response_type import SyntheticsNetworkTestResponseType + from datadog_api_client.v2.model.synthetics_network_assertion_latency import SyntheticsNetworkAssertionLatency + from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop import SyntheticsNetworkAssertionMultiNetworkHop + from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage import SyntheticsNetworkAssertionPacketLossPercentage + from datadog_api_client.v2.model.synthetics_network_assertion_jitter import SyntheticsNetworkAssertionJitter + +class SyntheticsNetworkTestResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_network_test import SyntheticsNetworkTest + from datadog_api_client.v2.model.synthetics_network_test_response_type import SyntheticsNetworkTestResponseType + return { + "attributes": (SyntheticsNetworkTest,), + "id": (str,), + "type": (SyntheticsNetworkTestResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: Union[SyntheticsNetworkTest, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SyntheticsNetworkTestResponseType, UnsetType]=unset, **kwargs): + """ + Network Path test response data. + + :param attributes: Object containing details about a Network Path test. + :type attributes: SyntheticsNetworkTest, optional + + :param id: The public ID of the Network Path test. + :type id: str, optional + + :param type: Type of response, ``network_test``. + :type type: SyntheticsNetworkTestResponseType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_network_test_response_type.py b/datadog_api_client/v2/model/synthetics_network_test_response_type.py new file mode 100644 index 0000000000..0a6df5313b --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkTestResponseType(ModelSimple): + """ + Type of response, `network_test`. + + :param value: If omitted defaults to "network_test". Must be one of ["network_test"]. + :type value: str + """ + + allowed_values = { + "network_test", + } + NETWORK_TEST: ClassVar["SyntheticsNetworkTestResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkTestResponseType.NETWORK_TEST = SyntheticsNetworkTestResponseType("network_test") diff --git a/datadog_api_client/v2/model/synthetics_network_test_sub_type.py b/datadog_api_client/v2/model/synthetics_network_test_sub_type.py new file mode 100644 index 0000000000..11386024cb --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_sub_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkTestSubType(ModelSimple): + """ + Subtype of the Synthetic Network Path test: `tcp`, `udp`, or `icmp`. + + :param value: Must be one of ["tcp", "udp", "icmp"]. + :type value: str + """ + + allowed_values = { + "tcp", + "udp", + "icmp", + } + TCP: ClassVar["SyntheticsNetworkTestSubType"] + UDP: ClassVar["SyntheticsNetworkTestSubType"] + ICMP: ClassVar["SyntheticsNetworkTestSubType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkTestSubType.TCP = SyntheticsNetworkTestSubType("tcp") +SyntheticsNetworkTestSubType.UDP = SyntheticsNetworkTestSubType("udp") +SyntheticsNetworkTestSubType.ICMP = SyntheticsNetworkTestSubType("icmp") diff --git a/datadog_api_client/v2/model/synthetics_network_test_type.py b/datadog_api_client/v2/model/synthetics_network_test_type.py new file mode 100644 index 0000000000..f150737303 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_network_test_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsNetworkTestType(ModelSimple): + """ + Type of the Synthetic test, `network`. + + :param value: If omitted defaults to "network". Must be one of ["network"]. + :type value: str + """ + + allowed_values = { + "network", + } + NETWORK: ClassVar["SyntheticsNetworkTestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsNetworkTestType.NETWORK = SyntheticsNetworkTestType("network") diff --git a/datadog_api_client/v2/model/synthetics_poll_test_results_response.py b/datadog_api_client/v2/model/synthetics_poll_test_results_response.py new file mode 100644 index 0000000000..9c1bf50245 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_poll_test_results_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_data import SyntheticsTestResultData + from datadog_api_client.v2.model.synthetics_test_result_included_item import SyntheticsTestResultIncludedItem + +class SyntheticsPollTestResultsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_data import SyntheticsTestResultData + from datadog_api_client.v2.model.synthetics_test_result_included_item import SyntheticsTestResultIncludedItem + return { + "data": ([SyntheticsTestResultData],), + "included": ([SyntheticsTestResultIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[List[SyntheticsTestResultData], UnsetType]=unset, included: Union[List[SyntheticsTestResultIncludedItem], UnsetType]=unset, **kwargs): + """ + Response object for polling Synthetic test results. + + :param data: Array of Synthetic test results. + :type data: [SyntheticsTestResultData], optional + + :param included: Array of included related resources, such as the test definition. + :type included: [SyntheticsTestResultIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_suite.py b/datadog_api_client/v2/model/synthetics_suite.py new file mode 100644 index 0000000000..0e25962420 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_suite_options import SyntheticsSuiteOptions + from datadog_api_client.v2.model.synthetics_suite_test import SyntheticsSuiteTest + from datadog_api_client.v2.model.synthetics_suite_type import SyntheticsSuiteType + +class SyntheticsSuite(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_suite_options import SyntheticsSuiteOptions + from datadog_api_client.v2.model.synthetics_suite_test import SyntheticsSuiteTest + from datadog_api_client.v2.model.synthetics_suite_type import SyntheticsSuiteType + return { + "message": (str,), + "monitor_id": (int,), + "name": (str,), + "options": (SyntheticsSuiteOptions,), + "public_id": (str,), + "tags": ([str],), + "tests": ([SyntheticsSuiteTest],), + "type": (SyntheticsSuiteType,), + } + attribute_map = { + "message": "message", + "monitor_id": "monitor_id", + "name": "name", + "options": "options", + "public_id": "public_id", + "tags": "tags", + "tests": "tests", + "type": "type", + } + read_only_vars = { + "monitor_id", + "public_id", + } + + def __init__(self_, name: str, options: SyntheticsSuiteOptions, tests: List[SyntheticsSuiteTest], type: SyntheticsSuiteType, message: Union[str, UnsetType]=unset, monitor_id: Union[int, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Object containing details about a Synthetic suite. + + :param message: Notification message associated with the suite. + :type message: str, optional + + :param monitor_id: The associated monitor ID. + :type monitor_id: int, optional + + :param name: Name of the suite. + :type name: str + + :param options: Object describing the extra options for a Synthetic suite. + :type options: SyntheticsSuiteOptions + + :param public_id: The public ID for the test. + :type public_id: str, optional + + :param tags: Array of tags attached to the suite. + :type tags: [str], optional + + :param tests: Array of Synthetic tests included in the suite. + :type tests: [SyntheticsSuiteTest] + + :param type: Type of the Synthetic suite, ``suite``. + :type type: SyntheticsSuiteType + """ + if message is not unset: + kwargs["message"] = message + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if public_id is not unset: + kwargs["public_id"] = public_id + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.name = name + self_.options = options + self_.tests = tests + self_.type = type diff --git a/datadog_api_client/v2/model/synthetics_suite_options.py b/datadog_api_client/v2/model/synthetics_suite_options.py new file mode 100644 index 0000000000..d8b5c65d7c --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_options.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsSuiteOptions(ModelNormal): + validations = { + "alerting_threshold": { + "inclusive_maximum": 1, + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + return { + "alerting_threshold": (float,), + } + attribute_map = { + "alerting_threshold": "alerting_threshold", + } + + def __init__(self_, alerting_threshold: Union[float, UnsetType]=unset, **kwargs): + """ + Object describing the extra options for a Synthetic suite. + + :param alerting_threshold: Percentage of critical tests failure needed for a suite to fail. + :type alerting_threshold: float, optional + """ + if alerting_threshold is not unset: + kwargs["alerting_threshold"] = alerting_threshold + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_suite_response.py b/datadog_api_client/v2/model/synthetics_suite_response.py new file mode 100644 index 0000000000..b03b4bbcd5 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_suite_response_data import SyntheticsSuiteResponseData + +class SyntheticsSuiteResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_suite_response_data import SyntheticsSuiteResponseData + return { + "data": (SyntheticsSuiteResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SyntheticsSuiteResponseData, UnsetType]=unset, **kwargs): + """ + Synthetics suite response + + :param data: Synthetics suite response data + :type data: SyntheticsSuiteResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_suite_response_data.py b/datadog_api_client/v2/model/synthetics_suite_response_data.py new file mode 100644 index 0000000000..8b88e7fb76 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_response_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_suite import SyntheticsSuite + from datadog_api_client.v2.model.synthetics_suite_types import SyntheticsSuiteTypes + +class SyntheticsSuiteResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_suite import SyntheticsSuite + from datadog_api_client.v2.model.synthetics_suite_types import SyntheticsSuiteTypes + return { + "attributes": (SyntheticsSuite,), + "id": (str,), + "type": (SyntheticsSuiteTypes,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + read_only_vars = { + "id", + } + + def __init__(self_, attributes: Union[SyntheticsSuite, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SyntheticsSuiteTypes, UnsetType]=unset, **kwargs): + """ + Synthetics suite response data + + :param attributes: Object containing details about a Synthetic suite. + :type attributes: SyntheticsSuite, optional + + :param id: The public ID for the suite. + :type id: str, optional + + :param type: Type for the Synthetics suites responses, ``suites``. + :type type: SyntheticsSuiteTypes, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_suite_search_response.py b/datadog_api_client/v2/model/synthetics_suite_search_response.py new file mode 100644 index 0000000000..a88bd6055f --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_search_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_suite_search_response_data import SyntheticsSuiteSearchResponseData + +class SyntheticsSuiteSearchResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_suite_search_response_data import SyntheticsSuiteSearchResponseData + return { + "data": (SyntheticsSuiteSearchResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SyntheticsSuiteSearchResponseData, UnsetType]=unset, **kwargs): + """ + Synthetics suite search response + + :param data: Synthetics suite search response data + :type data: SyntheticsSuiteSearchResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_suite_search_response_data.py b/datadog_api_client/v2/model/synthetics_suite_search_response_data.py new file mode 100644 index 0000000000..b79d76b2c5 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_search_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_suite_search_response_data_attributes import SyntheticsSuiteSearchResponseDataAttributes + from datadog_api_client.v2.model.suite_search_response_type import SuiteSearchResponseType + +class SyntheticsSuiteSearchResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_suite_search_response_data_attributes import SyntheticsSuiteSearchResponseDataAttributes + from datadog_api_client.v2.model.suite_search_response_type import SuiteSearchResponseType + return { + "attributes": (SyntheticsSuiteSearchResponseDataAttributes,), + "id": (UUID,), + "type": (SuiteSearchResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsSuiteSearchResponseDataAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, type: Union[SuiteSearchResponseType, UnsetType]=unset, **kwargs): + """ + Synthetics suite search response data + + :param attributes: Synthetics suite search response data attributes + :type attributes: SyntheticsSuiteSearchResponseDataAttributes, optional + + :param id: The unique identifier of the suite search response data. + :type id: UUID, optional + + :param type: Type for the Synthetics suites search response, ``suites_search``. + :type type: SuiteSearchResponseType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_suite_search_response_data_attributes.py b/datadog_api_client/v2/model/synthetics_suite_search_response_data_attributes.py new file mode 100644 index 0000000000..32e9b3a6a1 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_search_response_data_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_suite import SyntheticsSuite + +class SyntheticsSuiteSearchResponseDataAttributes(ModelNormal): + validations = { + "total": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_suite import SyntheticsSuite + return { + "suites": ([SyntheticsSuite],), + "total": (int,), + } + attribute_map = { + "suites": "suites", + "total": "total", + } + + def __init__(self_, suites: Union[List[SyntheticsSuite], UnsetType]=unset, total: Union[int, UnsetType]=unset, **kwargs): + """ + Synthetics suite search response data attributes + + :param suites: List of Synthetic suites matching the search query. + :type suites: [SyntheticsSuite], optional + + :param total: Total number of Synthetic suites matching the search query. + :type total: int, optional + """ + if suites is not unset: + kwargs["suites"] = suites + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_suite_test.py b/datadog_api_client/v2/model/synthetics_suite_test.py new file mode 100644 index 0000000000..68d7eaffc7 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_test.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_suite_test_alerting_criticality import SyntheticsSuiteTestAlertingCriticality + +class SyntheticsSuiteTest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_suite_test_alerting_criticality import SyntheticsSuiteTestAlertingCriticality + return { + "alerting_criticality": (SyntheticsSuiteTestAlertingCriticality,), + "public_id": (str,), + } + attribute_map = { + "alerting_criticality": "alerting_criticality", + "public_id": "public_id", + } + + def __init__(self_, public_id: str, alerting_criticality: Union[SyntheticsSuiteTestAlertingCriticality, UnsetType]=unset, **kwargs): + """ + Object containing details about a Synthetic test included in a Synthetic suite. + + :param alerting_criticality: Alerting criticality for each the test. + :type alerting_criticality: SyntheticsSuiteTestAlertingCriticality, optional + + :param public_id: The public ID of the Synthetic test included in the suite. + :type public_id: str + """ + if alerting_criticality is not unset: + kwargs["alerting_criticality"] = alerting_criticality + super().__init__(kwargs) + + + self_.public_id = public_id diff --git a/datadog_api_client/v2/model/synthetics_suite_test_alerting_criticality.py b/datadog_api_client/v2/model/synthetics_suite_test_alerting_criticality.py new file mode 100644 index 0000000000..e1c10590f7 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_test_alerting_criticality.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsSuiteTestAlertingCriticality(ModelSimple): + """ + Alerting criticality for each the test. + + :param value: Must be one of ["ignore", "critical"]. + :type value: str + """ + + allowed_values = { + "ignore", + "critical", + } + IGNORE: ClassVar["SyntheticsSuiteTestAlertingCriticality"] + CRITICAL: ClassVar["SyntheticsSuiteTestAlertingCriticality"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsSuiteTestAlertingCriticality.IGNORE = SyntheticsSuiteTestAlertingCriticality("ignore") +SyntheticsSuiteTestAlertingCriticality.CRITICAL = SyntheticsSuiteTestAlertingCriticality("critical") diff --git a/datadog_api_client/v2/model/synthetics_suite_type.py b/datadog_api_client/v2/model/synthetics_suite_type.py new file mode 100644 index 0000000000..8b9ab0c1a6 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsSuiteType(ModelSimple): + """ + Type of the Synthetic suite, `suite`. + + :param value: If omitted defaults to "suite". Must be one of ["suite"]. + :type value: str + """ + + allowed_values = { + "suite", + } + SUITE: ClassVar["SyntheticsSuiteType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsSuiteType.SUITE = SyntheticsSuiteType("suite") diff --git a/datadog_api_client/v2/model/synthetics_suite_types.py b/datadog_api_client/v2/model/synthetics_suite_types.py new file mode 100644 index 0000000000..ae3783a14c --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_suite_types.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsSuiteTypes(ModelSimple): + """ + Type for the Synthetics suites responses, `suites`. + + :param value: If omitted defaults to "suites". Must be one of ["suites"]. + :type value: str + """ + + allowed_values = { + "suites", + } + SUITES: ClassVar["SyntheticsSuiteTypes"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsSuiteTypes.SUITES = SyntheticsSuiteTypes("suites") diff --git a/datadog_api_client/v2/model/synthetics_test_file_abort_multipart_upload_request.py b/datadog_api_client/v2/model/synthetics_test_file_abort_multipart_upload_request.py new file mode 100644 index 0000000000..08dee9e703 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_abort_multipart_upload_request.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestFileAbortMultipartUploadRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + "upload_id": (str,), + } + attribute_map = { + "key": "key", + "upload_id": "uploadId", + } + + def __init__(self_, key: str, upload_id: str, **kwargs): + """ + Request body for aborting a multipart file upload. + + :param key: The full storage path of the file whose upload should be aborted. + :type key: str + + :param upload_id: The upload ID of the multipart upload to abort. + :type upload_id: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.upload_id = upload_id diff --git a/datadog_api_client/v2/model/synthetics_test_file_complete_multipart_upload_part.py b/datadog_api_client/v2/model/synthetics_test_file_complete_multipart_upload_part.py new file mode 100644 index 0000000000..f8384cb9f1 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_complete_multipart_upload_part.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestFileCompleteMultipartUploadPart(ModelNormal): + @cached_property + def openapi_types(_): + return { + "e_tag": (str,), + "part_number": (int,), + } + attribute_map = { + "e_tag": "ETag", + "part_number": "PartNumber", + } + + def __init__(self_, e_tag: str, part_number: int, **kwargs): + """ + A completed part of a multipart upload. + + :param e_tag: The ETag returned by the storage provider after uploading the part. + :type e_tag: str + + :param part_number: The 1-indexed part number for the multipart upload. + :type part_number: int + """ + super().__init__(kwargs) + + + self_.e_tag = e_tag + self_.part_number = part_number diff --git a/datadog_api_client/v2/model/synthetics_test_file_complete_multipart_upload_request.py b/datadog_api_client/v2/model/synthetics_test_file_complete_multipart_upload_request.py new file mode 100644 index 0000000000..77cc09a3fe --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_complete_multipart_upload_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_file_complete_multipart_upload_part import SyntheticsTestFileCompleteMultipartUploadPart + +class SyntheticsTestFileCompleteMultipartUploadRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_file_complete_multipart_upload_part import SyntheticsTestFileCompleteMultipartUploadPart + return { + "key": (str,), + "parts": ([SyntheticsTestFileCompleteMultipartUploadPart],), + "upload_id": (str,), + } + attribute_map = { + "key": "key", + "parts": "parts", + "upload_id": "uploadId", + } + + def __init__(self_, key: str, parts: List[SyntheticsTestFileCompleteMultipartUploadPart], upload_id: str, **kwargs): + """ + Request body for completing a multipart file upload. + + :param key: The full storage path for the uploaded file. + :type key: str + + :param parts: Array of completed parts with their ETags. + :type parts: [SyntheticsTestFileCompleteMultipartUploadPart] + + :param upload_id: The upload ID returned when the multipart upload was initiated. + :type upload_id: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.parts = parts + self_.upload_id = upload_id diff --git a/datadog_api_client/v2/model/synthetics_test_file_download_request.py b/datadog_api_client/v2/model/synthetics_test_file_download_request.py new file mode 100644 index 0000000000..c2c3f01ab1 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_download_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestFileDownloadRequest(ModelNormal): + validations = { + "bucket_key": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "bucket_key": (str,), + } + attribute_map = { + "bucket_key": "bucketKey", + } + + def __init__(self_, bucket_key: str, **kwargs): + """ + Request body for getting a presigned download URL for a test file. + + :param bucket_key: The bucket key referencing the file to download. + :type bucket_key: str + """ + super().__init__(kwargs) + + + self_.bucket_key = bucket_key diff --git a/datadog_api_client/v2/model/synthetics_test_file_download_response.py b/datadog_api_client/v2/model/synthetics_test_file_download_response.py new file mode 100644 index 0000000000..53bafb2abf --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_download_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestFileDownloadResponse(ModelNormal): + @cached_property + def openapi_types(_): + return { + "url": (str,), + } + attribute_map = { + "url": "url", + } + + def __init__(self_, url: Union[str, UnsetType]=unset, **kwargs): + """ + Response containing a presigned URL for downloading a test file. + + :param url: A presigned URL to download the file. The URL expires after a short period. + :type url: str, optional + """ + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_params.py b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_params.py new file mode 100644 index 0000000000..b804cf8536 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_params.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestFileMultipartPresignedUrlsParams(ModelNormal): + @cached_property + def openapi_types(_): + return { + "key": (str,), + "upload_id": (str,), + "urls": ({str: (str,)},), + } + attribute_map = { + "key": "key", + "upload_id": "upload_id", + "urls": "urls", + } + + def __init__(self_, key: Union[str, UnsetType]=unset, upload_id: Union[str, UnsetType]=unset, urls: Union[Dict[str, str], UnsetType]=unset, **kwargs): + """ + Presigned URL parameters returned for a multipart upload. + + :param key: The full storage path for the file being uploaded. + :type key: str, optional + + :param upload_id: The upload ID assigned by the storage provider for this multipart upload. + :type upload_id: str, optional + + :param urls: A map of part numbers to presigned upload URLs. + :type urls: {str: (str,)}, optional + """ + if key is not unset: + kwargs["key"] = key + if upload_id is not unset: + kwargs["upload_id"] = upload_id + if urls is not unset: + kwargs["urls"] = urls + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_part.py b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_part.py new file mode 100644 index 0000000000..57b5f8b762 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_part.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestFileMultipartPresignedUrlsPart(ModelNormal): + validations = { + "md5": { + "max_length": 24, + "min_length": 22, + }, + } + @cached_property + def openapi_types(_): + return { + "md5": (str,), + "part_number": (int,), + } + attribute_map = { + "md5": "md5", + "part_number": "partNumber", + } + + def __init__(self_, md5: str, part_number: int, **kwargs): + """ + A part descriptor for initiating a multipart upload. + + :param md5: Base64-encoded MD5 digest of the part content. + :type md5: str + + :param part_number: The 1-indexed part number for the multipart upload. + :type part_number: int + """ + super().__init__(kwargs) + + + self_.md5 = md5 + self_.part_number = part_number diff --git a/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_request.py b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_request.py new file mode 100644 index 0000000000..fb7668731d --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_request_bucket_key_prefix import SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix + from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_part import SyntheticsTestFileMultipartPresignedUrlsPart + +class SyntheticsTestFileMultipartPresignedUrlsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_request_bucket_key_prefix import SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix + from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_part import SyntheticsTestFileMultipartPresignedUrlsPart + return { + "bucket_key_prefix": (SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix,), + "parts": ([SyntheticsTestFileMultipartPresignedUrlsPart],), + } + attribute_map = { + "bucket_key_prefix": "bucketKeyPrefix", + "parts": "parts", + } + + def __init__(self_, bucket_key_prefix: SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix, parts: List[SyntheticsTestFileMultipartPresignedUrlsPart], **kwargs): + """ + Request body for getting presigned URLs for a multipart file upload. + + :param bucket_key_prefix: The bucket key prefix indicating the type of file upload. + :type bucket_key_prefix: SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix + + :param parts: Array of part descriptors for the multipart upload. + :type parts: [SyntheticsTestFileMultipartPresignedUrlsPart] + """ + super().__init__(kwargs) + + + self_.bucket_key_prefix = bucket_key_prefix + self_.parts = parts diff --git a/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_request_bucket_key_prefix.py b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_request_bucket_key_prefix.py new file mode 100644 index 0000000000..eba07606eb --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_request_bucket_key_prefix.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix(ModelSimple): + """ + The bucket key prefix indicating the type of file upload. + + :param value: Must be one of ["api-upload-file", "browser-upload-file-step"]. + :type value: str + """ + + allowed_values = { + "api-upload-file", + "browser-upload-file-step", + } + API_UPLOAD_FILE: ClassVar["SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix"] + BROWSER_UPLOAD_FILE_STEP: ClassVar["SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix.API_UPLOAD_FILE = SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix("api-upload-file") +SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix.BROWSER_UPLOAD_FILE_STEP = SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix("browser-upload-file-step") diff --git a/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_response.py b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_response.py new file mode 100644 index 0000000000..c0d0701bc7 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_file_multipart_presigned_urls_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_params import SyntheticsTestFileMultipartPresignedUrlsParams + +class SyntheticsTestFileMultipartPresignedUrlsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_params import SyntheticsTestFileMultipartPresignedUrlsParams + return { + "bucket_key": (str,), + "multipart_presigned_urls_params": (SyntheticsTestFileMultipartPresignedUrlsParams,), + } + attribute_map = { + "bucket_key": "bucketKey", + "multipart_presigned_urls_params": "multipart_presigned_urls_params", + } + + def __init__(self_, bucket_key: Union[str, UnsetType]=unset, multipart_presigned_urls_params: Union[SyntheticsTestFileMultipartPresignedUrlsParams, UnsetType]=unset, **kwargs): + """ + Response containing presigned URLs for multipart file upload and the bucket key. + + :param bucket_key: The bucket key that references the uploaded file after completion. + :type bucket_key: str, optional + + :param multipart_presigned_urls_params: Presigned URL parameters returned for a multipart upload. + :type multipart_presigned_urls_params: SyntheticsTestFileMultipartPresignedUrlsParams, optional + """ + if bucket_key is not unset: + kwargs["bucket_key"] = bucket_key + if multipart_presigned_urls_params is not unset: + kwargs["multipart_presigned_urls_params"] = multipart_presigned_urls_params + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_latest_results_response.py b/datadog_api_client/v2/model/synthetics_test_latest_results_response.py new file mode 100644 index 0000000000..211baf7f24 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_latest_results_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_summary_data import SyntheticsTestResultSummaryData + from datadog_api_client.v2.model.synthetics_test_result_included_item import SyntheticsTestResultIncludedItem + +class SyntheticsTestLatestResultsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_summary_data import SyntheticsTestResultSummaryData + from datadog_api_client.v2.model.synthetics_test_result_included_item import SyntheticsTestResultIncludedItem + return { + "data": ([SyntheticsTestResultSummaryData],), + "included": ([SyntheticsTestResultIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[List[SyntheticsTestResultSummaryData], UnsetType]=unset, included: Union[List[SyntheticsTestResultIncludedItem], UnsetType]=unset, **kwargs): + """ + Response object for a Synthetic test's latest result summaries. + + :param data: Array of Synthetic test result summaries. + :type data: [SyntheticsTestResultSummaryData], optional + + :param included: Array of included related resources, such as the test definition. + :type included: [SyntheticsTestResultIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_options.py b/datadog_api_client/v2/model/synthetics_test_options.py new file mode 100644 index 0000000000..91c1f1cc0e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_options.py @@ -0,0 +1,121 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_options_monitor_options import SyntheticsTestOptionsMonitorOptions + from datadog_api_client.v2.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v2.model.synthetics_test_options_scheduling import SyntheticsTestOptionsScheduling + +class SyntheticsTestOptions(ModelNormal): + validations = { + "monitor_priority": { + "inclusive_maximum": 5, + "inclusive_minimum": 1, + }, + "tick_every": { + "inclusive_maximum": 604800, + "inclusive_minimum": 30, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_options_monitor_options import SyntheticsTestOptionsMonitorOptions + from datadog_api_client.v2.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry + from datadog_api_client.v2.model.synthetics_test_options_scheduling import SyntheticsTestOptionsScheduling + return { + "min_failure_duration": (int,), + "min_location_failed": (int,), + "monitor_name": (str,), + "monitor_options": (SyntheticsTestOptionsMonitorOptions,), + "monitor_priority": (int,), + "restricted_roles": ([str],), + "retry": (SyntheticsTestOptionsRetry,), + "scheduling": (SyntheticsTestOptionsScheduling,), + "tick_every": (int,), + } + attribute_map = { + "min_failure_duration": "min_failure_duration", + "min_location_failed": "min_location_failed", + "monitor_name": "monitor_name", + "monitor_options": "monitor_options", + "monitor_priority": "monitor_priority", + "restricted_roles": "restricted_roles", + "retry": "retry", + "scheduling": "scheduling", + "tick_every": "tick_every", + } + + def __init__(self_, min_failure_duration: Union[int, UnsetType]=unset, min_location_failed: Union[int, UnsetType]=unset, monitor_name: Union[str, UnsetType]=unset, monitor_options: Union[SyntheticsTestOptionsMonitorOptions, UnsetType]=unset, monitor_priority: Union[int, UnsetType]=unset, restricted_roles: Union[List[str], UnsetType]=unset, retry: Union[SyntheticsTestOptionsRetry, UnsetType]=unset, scheduling: Union[SyntheticsTestOptionsScheduling, UnsetType]=unset, tick_every: Union[int, UnsetType]=unset, **kwargs): + """ + Object describing the extra options for a Synthetic test. + + :param min_failure_duration: Minimum amount of time in failure required to trigger an alert. + :type min_failure_duration: int, optional + + :param min_location_failed: Minimum number of locations in failure required to trigger + an alert. + :type min_location_failed: int, optional + + :param monitor_name: The monitor name is used for the alert title as well as for all monitor dashboard widgets and SLOs. + :type monitor_name: str, optional + + :param monitor_options: Object containing the options for a Synthetic test as a monitor + (for example, renotification). + :type monitor_options: SyntheticsTestOptionsMonitorOptions, optional + + :param monitor_priority: Integer from 1 (high) to 5 (low) indicating alert severity. + :type monitor_priority: int, optional + + :param restricted_roles: A list of role identifiers that can be pulled from the Roles API, for restricting read and write access. This field is deprecated. Use the restriction policies API to manage permissions. **Deprecated**. + :type restricted_roles: [str], optional + + :param retry: Object describing the retry strategy to apply to a Synthetic test. + :type retry: SyntheticsTestOptionsRetry, optional + + :param scheduling: Object containing timeframes and timezone used for advanced scheduling. + :type scheduling: SyntheticsTestOptionsScheduling, optional + + :param tick_every: The frequency at which to run the Synthetic test (in seconds). + :type tick_every: int, optional + """ + if min_failure_duration is not unset: + kwargs["min_failure_duration"] = min_failure_duration + if min_location_failed is not unset: + kwargs["min_location_failed"] = min_location_failed + if monitor_name is not unset: + kwargs["monitor_name"] = monitor_name + if monitor_options is not unset: + kwargs["monitor_options"] = monitor_options + if monitor_priority is not unset: + kwargs["monitor_priority"] = monitor_priority + if restricted_roles is not unset: + kwargs["restricted_roles"] = restricted_roles + if retry is not unset: + kwargs["retry"] = retry + if scheduling is not unset: + kwargs["scheduling"] = scheduling + if tick_every is not unset: + kwargs["tick_every"] = tick_every + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_options_monitor_options.py b/datadog_api_client/v2/model/synthetics_test_options_monitor_options.py new file mode 100644 index 0000000000..dfe125e36e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_options_monitor_options.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_options_monitor_options_notification_preset_name import SyntheticsTestOptionsMonitorOptionsNotificationPresetName + +class SyntheticsTestOptionsMonitorOptions(ModelNormal): + validations = { + "renotify_interval": { + "inclusive_minimum": 0, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_options_monitor_options_notification_preset_name import SyntheticsTestOptionsMonitorOptionsNotificationPresetName + return { + "escalation_message": (str,), + "notification_preset_name": (SyntheticsTestOptionsMonitorOptionsNotificationPresetName,), + "renotify_interval": (int,), + "renotify_occurrences": (int,), + } + attribute_map = { + "escalation_message": "escalation_message", + "notification_preset_name": "notification_preset_name", + "renotify_interval": "renotify_interval", + "renotify_occurrences": "renotify_occurrences", + } + + def __init__(self_, escalation_message: Union[str, UnsetType]=unset, notification_preset_name: Union[SyntheticsTestOptionsMonitorOptionsNotificationPresetName, UnsetType]=unset, renotify_interval: Union[int, UnsetType]=unset, renotify_occurrences: Union[int, UnsetType]=unset, **kwargs): + """ + Object containing the options for a Synthetic test as a monitor + (for example, renotification). + + :param escalation_message: Message to include in the escalation notification. + :type escalation_message: str, optional + + :param notification_preset_name: The name of the preset for the notification for the monitor. + :type notification_preset_name: SyntheticsTestOptionsMonitorOptionsNotificationPresetName, optional + + :param renotify_interval: Time interval before renotifying if the test is still failing + (in minutes). + :type renotify_interval: int, optional + + :param renotify_occurrences: The number of times to renotify if the test is still failing. + :type renotify_occurrences: int, optional + """ + if escalation_message is not unset: + kwargs["escalation_message"] = escalation_message + if notification_preset_name is not unset: + kwargs["notification_preset_name"] = notification_preset_name + if renotify_interval is not unset: + kwargs["renotify_interval"] = renotify_interval + if renotify_occurrences is not unset: + kwargs["renotify_occurrences"] = renotify_occurrences + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_options_monitor_options_notification_preset_name.py b/datadog_api_client/v2/model/synthetics_test_options_monitor_options_notification_preset_name.py new file mode 100644 index 0000000000..ec5e94a062 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_options_monitor_options_notification_preset_name.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestOptionsMonitorOptionsNotificationPresetName(ModelSimple): + """ + The name of the preset for the notification for the monitor. + + :param value: Must be one of ["show_all", "hide_all", "hide_query", "hide_handles", "hide_query_and_handles", "show_only_snapshot", "hide_handles_and_footer"]. + :type value: str + """ + + allowed_values = { + "show_all", + "hide_all", + "hide_query", + "hide_handles", + "hide_query_and_handles", + "show_only_snapshot", + "hide_handles_and_footer", + } + SHOW_ALL: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_ALL: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_QUERY: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_HANDLES: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_QUERY_AND_HANDLES: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + SHOW_ONLY_SNAPSHOT: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + HIDE_HANDLES_AND_FOOTER: ClassVar["SyntheticsTestOptionsMonitorOptionsNotificationPresetName"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.SHOW_ALL = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("show_all") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_ALL = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_all") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_QUERY = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_query") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_HANDLES = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_handles") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_QUERY_AND_HANDLES = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_query_and_handles") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.SHOW_ONLY_SNAPSHOT = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("show_only_snapshot") +SyntheticsTestOptionsMonitorOptionsNotificationPresetName.HIDE_HANDLES_AND_FOOTER = SyntheticsTestOptionsMonitorOptionsNotificationPresetName("hide_handles_and_footer") diff --git a/datadog_api_client/v2/model/synthetics_test_options_retry.py b/datadog_api_client/v2/model/synthetics_test_options_retry.py new file mode 100644 index 0000000000..67197f9ef3 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_options_retry.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestOptionsRetry(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "interval": (float,), + } + attribute_map = { + "count": "count", + "interval": "interval", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, interval: Union[float, UnsetType]=unset, **kwargs): + """ + Object describing the retry strategy to apply to a Synthetic test. + + :param count: Number of times a test needs to be retried before marking a + location as failed. Defaults to 0. + :type count: int, optional + + :param interval: Time interval between retries (in milliseconds). Defaults to + 300ms. + :type interval: float, optional + """ + if count is not unset: + kwargs["count"] = count + if interval is not unset: + kwargs["interval"] = interval + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_options_scheduling.py b/datadog_api_client/v2/model/synthetics_test_options_scheduling.py new file mode 100644 index 0000000000..b01bd28d84 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_options_scheduling.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_options_scheduling_timeframe import SyntheticsTestOptionsSchedulingTimeframe + +class SyntheticsTestOptionsScheduling(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_options_scheduling_timeframe import SyntheticsTestOptionsSchedulingTimeframe + return { + "timeframes": ([SyntheticsTestOptionsSchedulingTimeframe],), + "timezone": (str,), + } + attribute_map = { + "timeframes": "timeframes", + "timezone": "timezone", + } + + def __init__(self_, timeframes: List[SyntheticsTestOptionsSchedulingTimeframe], timezone: str, **kwargs): + """ + Object containing timeframes and timezone used for advanced scheduling. + + :param timeframes: Array containing objects describing the scheduling pattern to apply to each day. + :type timeframes: [SyntheticsTestOptionsSchedulingTimeframe] + + :param timezone: Timezone in which the timeframe is based. + :type timezone: str + """ + super().__init__(kwargs) + + + self_.timeframes = timeframes + self_.timezone = timezone diff --git a/datadog_api_client/v2/model/synthetics_test_options_scheduling_timeframe.py b/datadog_api_client/v2/model/synthetics_test_options_scheduling_timeframe.py new file mode 100644 index 0000000000..75bc1951a6 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_options_scheduling_timeframe.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestOptionsSchedulingTimeframe(ModelNormal): + validations = { + "day": { + "inclusive_maximum": 7, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "day": (int,), + "_from": (str,), + "to": (str,), + } + attribute_map = { + "day": "day", + "_from": "from", + "to": "to", + } + + def __init__(self_, day: int, _from: str, to: str, **kwargs): + """ + Object describing a timeframe. + + :param day: Number representing the day of the week. + :type day: int + + :param _from: The hour of the day on which scheduling starts. + :type _from: str + + :param to: The hour of the day on which scheduling ends. + :type to: str + """ + super().__init__(kwargs) + + + self_.day = day + self_._from = _from + self_.to = to diff --git a/datadog_api_client/v2/model/synthetics_test_parent_suite_attributes.py b/datadog_api_client/v2/model/synthetics_test_parent_suite_attributes.py new file mode 100644 index 0000000000..1dfb617df1 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_parent_suite_attributes.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestParentSuiteAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "child_name": (str,), + "child_public_id": (str,), + "monitor_id": (int,), + "name": (str,), + "overall_state": (int,), + "overall_state_modified": (str,), + "public_id": (str,), + } + attribute_map = { + "child_name": "child_name", + "child_public_id": "child_public_id", + "monitor_id": "monitor_id", + "name": "name", + "overall_state": "overall_state", + "overall_state_modified": "overall_state_modified", + "public_id": "public_id", + } + + def __init__(self_, child_name: Union[str, UnsetType]=unset, child_public_id: Union[str, UnsetType]=unset, monitor_id: Union[int, UnsetType]=unset, name: Union[str, UnsetType]=unset, overall_state: Union[int, UnsetType]=unset, overall_state_modified: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing details about a parent suite of a Synthetic test. + + :param child_name: The name of the child test within the suite. + :type child_name: str, optional + + :param child_public_id: The public ID of the child test within the suite. + :type child_public_id: str, optional + + :param monitor_id: The associated monitor ID. + :type monitor_id: int, optional + + :param name: Name of the parent suite. + :type name: str, optional + + :param overall_state: The overall state of the parent suite. + :type overall_state: int, optional + + :param overall_state_modified: Timestamp of when the overall state was last modified. + :type overall_state_modified: str, optional + + :param public_id: The public ID of the parent suite. + :type public_id: str, optional + """ + if child_name is not unset: + kwargs["child_name"] = child_name + if child_public_id is not unset: + kwargs["child_public_id"] = child_public_id + if monitor_id is not unset: + kwargs["monitor_id"] = monitor_id + if name is not unset: + kwargs["name"] = name + if overall_state is not unset: + kwargs["overall_state"] = overall_state + if overall_state_modified is not unset: + kwargs["overall_state_modified"] = overall_state_modified + if public_id is not unset: + kwargs["public_id"] = public_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_parent_suite_data.py b/datadog_api_client/v2/model/synthetics_test_parent_suite_data.py new file mode 100644 index 0000000000..f6a62d8661 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_parent_suite_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_parent_suite_attributes import SyntheticsTestParentSuiteAttributes + from datadog_api_client.v2.model.synthetics_test_parent_suite_type import SyntheticsTestParentSuiteType + +class SyntheticsTestParentSuiteData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_parent_suite_attributes import SyntheticsTestParentSuiteAttributes + from datadog_api_client.v2.model.synthetics_test_parent_suite_type import SyntheticsTestParentSuiteType + return { + "attributes": (SyntheticsTestParentSuiteAttributes,), + "id": (str,), + "type": (SyntheticsTestParentSuiteType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsTestParentSuiteAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SyntheticsTestParentSuiteType, UnsetType]=unset, **kwargs): + """ + Data object for a parent suite. + + :param attributes: Object containing details about a parent suite of a Synthetic test. + :type attributes: SyntheticsTestParentSuiteAttributes, optional + + :param id: The public ID of the parent suite. + :type id: str, optional + + :param type: Type of the parent suite resource. + :type type: SyntheticsTestParentSuiteType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_parent_suite_type.py b/datadog_api_client/v2/model/synthetics_test_parent_suite_type.py new file mode 100644 index 0000000000..2492d772ed --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_parent_suite_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestParentSuiteType(ModelSimple): + """ + Type of the parent suite resource. + + :param value: If omitted defaults to "parent_suite". Must be one of ["parent_suite"]. + :type value: str + """ + + allowed_values = { + "parent_suite", + } + PARENT_SUITE: ClassVar["SyntheticsTestParentSuiteType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestParentSuiteType.PARENT_SUITE = SyntheticsTestParentSuiteType("parent_suite") diff --git a/datadog_api_client/v2/model/synthetics_test_parent_suites_response.py b/datadog_api_client/v2/model/synthetics_test_parent_suites_response.py new file mode 100644 index 0000000000..43289f1e33 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_parent_suites_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_parent_suite_data import SyntheticsTestParentSuiteData + +class SyntheticsTestParentSuitesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_parent_suite_data import SyntheticsTestParentSuiteData + return { + "data": ([SyntheticsTestParentSuiteData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[SyntheticsTestParentSuiteData], UnsetType]=unset, **kwargs): + """ + Response containing the list of parent suites for a Synthetic test. + + :param data: List of parent suites for the given test. + :type data: [SyntheticsTestParentSuiteData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_pause_status.py b/datadog_api_client/v2/model/synthetics_test_pause_status.py new file mode 100644 index 0000000000..b83d6f0be6 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_pause_status.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestPauseStatus(ModelSimple): + """ + Define whether you want to start (`live`) or pause (`paused`) a + Synthetic test. + + :param value: Must be one of ["live", "paused"]. + :type value: str + """ + + allowed_values = { + "live", + "paused", + } + LIVE: ClassVar["SyntheticsTestPauseStatus"] + PAUSED: ClassVar["SyntheticsTestPauseStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestPauseStatus.LIVE = SyntheticsTestPauseStatus("live") +SyntheticsTestPauseStatus.PAUSED = SyntheticsTestPauseStatus("paused") diff --git a/datadog_api_client/v2/model/synthetics_test_result_assertion_result.py b/datadog_api_client/v2/model/synthetics_test_result_assertion_result.py new file mode 100644 index 0000000000..cf911d7d19 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_assertion_result.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultAssertionResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "actual": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "error_message": (str,), + "expected": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "operator": (str,), + "_property": (str,), + "target": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "target_path": (str,), + "target_path_operator": (str,), + "type": (str,), + "valid": (bool,), + } + attribute_map = { + "actual": "actual", + "error_message": "error_message", + "expected": "expected", + "operator": "operator", + "_property": "property", + "target": "target", + "target_path": "target_path", + "target_path_operator": "target_path_operator", + "type": "type", + "valid": "valid", + } + + def __init__(self_, actual: Union[Any, UnsetType]=unset, error_message: Union[str, UnsetType]=unset, expected: Union[Any, UnsetType]=unset, operator: Union[str, UnsetType]=unset, _property: Union[str, UnsetType]=unset, target: Union[Any, UnsetType]=unset, target_path: Union[str, UnsetType]=unset, target_path_operator: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, valid: Union[bool, UnsetType]=unset, **kwargs): + """ + An individual assertion result from a Synthetic test. + + :param actual: Actual value observed during the test. Its type depends on the assertion type. + :type actual: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param error_message: Error message if the assertion failed. + :type error_message: str, optional + + :param expected: Expected value for the assertion. Its type depends on the assertion type. + :type expected: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param operator: Operator used for the assertion (for example, ``is`` , ``contains`` ). + :type operator: str, optional + + :param _property: Property targeted by the assertion, when applicable. + :type _property: str, optional + + :param target: Target value for the assertion. Its type depends on the assertion type. + :type target: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param target_path: JSON path or XPath evaluated for the assertion. + :type target_path: str, optional + + :param target_path_operator: Operator used for the target path assertion. + :type target_path_operator: str, optional + + :param type: Type of the assertion (for example, ``responseTime`` , ``statusCode`` , ``body`` ). + :type type: str, optional + + :param valid: Whether the assertion passed. + :type valid: bool, optional + """ + if actual is not unset: + kwargs["actual"] = actual + if error_message is not unset: + kwargs["error_message"] = error_message + if expected is not unset: + kwargs["expected"] = expected + if operator is not unset: + kwargs["operator"] = operator + if _property is not unset: + kwargs["_property"] = _property + if target is not unset: + kwargs["target"] = target + if target_path is not unset: + kwargs["target_path"] = target_path + if target_path_operator is not unset: + kwargs["target_path_operator"] = target_path_operator + if type is not unset: + kwargs["type"] = type + if valid is not unset: + kwargs["valid"] = valid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_attributes.py b/datadog_api_client/v2/model/synthetics_test_result_attributes.py new file mode 100644 index 0000000000..4c40954b24 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_attributes.py @@ -0,0 +1,112 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_batch import SyntheticsTestResultBatch + from datadog_api_client.v2.model.synthetics_test_result_ci import SyntheticsTestResultCI + from datadog_api_client.v2.model.synthetics_test_result_device import SyntheticsTestResultDevice + from datadog_api_client.v2.model.synthetics_test_result_git import SyntheticsTestResultGit + from datadog_api_client.v2.model.synthetics_test_result_location import SyntheticsTestResultLocation + from datadog_api_client.v2.model.synthetics_test_result_detail import SyntheticsTestResultDetail + from datadog_api_client.v2.model.synthetics_test_sub_type import SyntheticsTestSubType + from datadog_api_client.v2.model.synthetics_test_type import SyntheticsTestType + +class SyntheticsTestResultAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_batch import SyntheticsTestResultBatch + from datadog_api_client.v2.model.synthetics_test_result_ci import SyntheticsTestResultCI + from datadog_api_client.v2.model.synthetics_test_result_device import SyntheticsTestResultDevice + from datadog_api_client.v2.model.synthetics_test_result_git import SyntheticsTestResultGit + from datadog_api_client.v2.model.synthetics_test_result_location import SyntheticsTestResultLocation + from datadog_api_client.v2.model.synthetics_test_result_detail import SyntheticsTestResultDetail + from datadog_api_client.v2.model.synthetics_test_sub_type import SyntheticsTestSubType + from datadog_api_client.v2.model.synthetics_test_type import SyntheticsTestType + return { + "batch": (SyntheticsTestResultBatch,), + "ci": (SyntheticsTestResultCI,), + "device": (SyntheticsTestResultDevice,), + "git": (SyntheticsTestResultGit,), + "location": (SyntheticsTestResultLocation,), + "result": (SyntheticsTestResultDetail,), + "test_sub_type": (SyntheticsTestSubType,), + "test_type": (SyntheticsTestType,), + } + attribute_map = { + "batch": "batch", + "ci": "ci", + "device": "device", + "git": "git", + "location": "location", + "result": "result", + "test_sub_type": "test_sub_type", + "test_type": "test_type", + } + + def __init__(self_, batch: Union[SyntheticsTestResultBatch, UnsetType]=unset, ci: Union[SyntheticsTestResultCI, UnsetType]=unset, device: Union[SyntheticsTestResultDevice, UnsetType]=unset, git: Union[SyntheticsTestResultGit, UnsetType]=unset, location: Union[SyntheticsTestResultLocation, UnsetType]=unset, result: Union[SyntheticsTestResultDetail, UnsetType]=unset, test_sub_type: Union[SyntheticsTestSubType, UnsetType]=unset, test_type: Union[SyntheticsTestType, UnsetType]=unset, **kwargs): + """ + Attributes of a Synthetic test result. + + :param batch: Batch information for the test result. + :type batch: SyntheticsTestResultBatch, optional + + :param ci: CI information associated with the test result. + :type ci: SyntheticsTestResultCI, optional + + :param device: Device information for the test result (browser and mobile tests). + :type device: SyntheticsTestResultDevice, optional + + :param git: Git information associated with the test result. + :type git: SyntheticsTestResultGit, optional + + :param location: Location information for a Synthetic test result. + :type location: SyntheticsTestResultLocation, optional + + :param result: Full result details for a Synthetic test execution. + :type result: SyntheticsTestResultDetail, optional + + :param test_sub_type: Subtype of the Synthetic test that produced this result. + :type test_sub_type: SyntheticsTestSubType, optional + + :param test_type: Type of the Synthetic test that produced this result. + :type test_type: SyntheticsTestType, optional + """ + if batch is not unset: + kwargs["batch"] = batch + if ci is not unset: + kwargs["ci"] = ci + if device is not unset: + kwargs["device"] = device + if git is not unset: + kwargs["git"] = git + if location is not unset: + kwargs["location"] = location + if result is not unset: + kwargs["result"] = result + if test_sub_type is not unset: + kwargs["test_sub_type"] = test_sub_type + if test_type is not unset: + kwargs["test_type"] = test_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_batch.py b/datadog_api_client/v2/model/synthetics_test_result_batch.py new file mode 100644 index 0000000000..400b9c1c47 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_batch.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultBatch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, **kwargs): + """ + Batch information for the test result. + + :param id: Batch identifier. + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_bounds.py b/datadog_api_client/v2/model/synthetics_test_result_bounds.py new file mode 100644 index 0000000000..e335e63957 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_bounds.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultBounds(ModelNormal): + @cached_property + def openapi_types(_): + return { + "height": (int,), + "width": (int,), + "x": (int,), + "y": (int,), + } + attribute_map = { + "height": "height", + "width": "width", + "x": "x", + "y": "y", + } + + def __init__(self_, height: Union[int, UnsetType]=unset, width: Union[int, UnsetType]=unset, x: Union[int, UnsetType]=unset, y: Union[int, UnsetType]=unset, **kwargs): + """ + Bounding box of an element on the page. + + :param height: Height in pixels. + :type height: int, optional + + :param width: Width in pixels. + :type width: int, optional + + :param x: Horizontal position in pixels. + :type x: int, optional + + :param y: Vertical position in pixels. + :type y: int, optional + """ + if height is not unset: + kwargs["height"] = height + if width is not unset: + kwargs["width"] = width + if x is not unset: + kwargs["x"] = x + if y is not unset: + kwargs["y"] = y + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_browser_error.py b/datadog_api_client/v2/model/synthetics_test_result_browser_error.py new file mode 100644 index 0000000000..c835076405 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_browser_error.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultBrowserError(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "method": (str,), + "name": (str,), + "status": (int,), + "type": (str,), + "url": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "description": "description", + "method": "method", + "name": "name", + "status": "status", + "type": "type", + "url": "url", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, method: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, status: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, url: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + A browser error captured during a browser test step. + + :param description: Error description. + :type description: str, optional + + :param method: HTTP method associated with the error (for network errors). + :type method: str, optional + + :param name: Error name. + :type name: str, optional + + :param status: HTTP status code associated with the error (for network errors). + :type status: int, optional + + :param type: Type of the browser error. + :type type: str, optional + + :param url: URL associated with the error. + :type url: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + """ + if description is not unset: + kwargs["description"] = description + if method is not unset: + kwargs["method"] = method + if name is not unset: + kwargs["name"] = name + if status is not unset: + kwargs["status"] = status + if type is not unset: + kwargs["type"] = type + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_bucket_keys.py b/datadog_api_client/v2/model/synthetics_test_result_bucket_keys.py new file mode 100644 index 0000000000..024170725d --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_bucket_keys.py @@ -0,0 +1,116 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultBucketKeys(ModelNormal): + @cached_property + def openapi_types(_): + return { + "after_step_screenshot": (str,), + "after_turn_screenshot": (str,), + "artifacts": (str,), + "before_step_screenshot": (str,), + "before_turn_screenshot": (str,), + "crash_report": (str,), + "device_logs": (str,), + "email_messages": ([str],), + "screenshot": (str,), + "snapshot": (str,), + "source": (str,), + } + attribute_map = { + "after_step_screenshot": "after_step_screenshot", + "after_turn_screenshot": "after_turn_screenshot", + "artifacts": "artifacts", + "before_step_screenshot": "before_step_screenshot", + "before_turn_screenshot": "before_turn_screenshot", + "crash_report": "crash_report", + "device_logs": "device_logs", + "email_messages": "email_messages", + "screenshot": "screenshot", + "snapshot": "snapshot", + "source": "source", + } + + def __init__(self_, after_step_screenshot: Union[str, UnsetType]=unset, after_turn_screenshot: Union[str, UnsetType]=unset, artifacts: Union[str, UnsetType]=unset, before_step_screenshot: Union[str, UnsetType]=unset, before_turn_screenshot: Union[str, UnsetType]=unset, crash_report: Union[str, UnsetType]=unset, device_logs: Union[str, UnsetType]=unset, email_messages: Union[List[str], UnsetType]=unset, screenshot: Union[str, UnsetType]=unset, snapshot: Union[str, UnsetType]=unset, source: Union[str, UnsetType]=unset, **kwargs): + """ + Storage bucket keys for artifacts produced during a step or test. + + :param after_step_screenshot: Key for the screenshot captured after the step (goal-based tests). + :type after_step_screenshot: str, optional + + :param after_turn_screenshot: Key for the screenshot captured after the turn (goal-based tests). + :type after_turn_screenshot: str, optional + + :param artifacts: Key for miscellaneous artifacts. + :type artifacts: str, optional + + :param before_step_screenshot: Key for the screenshot captured before the step (goal-based tests). + :type before_step_screenshot: str, optional + + :param before_turn_screenshot: Key for the screenshot captured before the turn (goal-based tests). + :type before_turn_screenshot: str, optional + + :param crash_report: Key for a captured crash report. + :type crash_report: str, optional + + :param device_logs: Key for captured device logs. + :type device_logs: str, optional + + :param email_messages: Keys for email message payloads captured by the step. + :type email_messages: [str], optional + + :param screenshot: Key for the captured screenshot. + :type screenshot: str, optional + + :param snapshot: Key for the captured DOM snapshot. + :type snapshot: str, optional + + :param source: Key for the page source or element source. + :type source: str, optional + """ + if after_step_screenshot is not unset: + kwargs["after_step_screenshot"] = after_step_screenshot + if after_turn_screenshot is not unset: + kwargs["after_turn_screenshot"] = after_turn_screenshot + if artifacts is not unset: + kwargs["artifacts"] = artifacts + if before_step_screenshot is not unset: + kwargs["before_step_screenshot"] = before_step_screenshot + if before_turn_screenshot is not unset: + kwargs["before_turn_screenshot"] = before_turn_screenshot + if crash_report is not unset: + kwargs["crash_report"] = crash_report + if device_logs is not unset: + kwargs["device_logs"] = device_logs + if email_messages is not unset: + kwargs["email_messages"] = email_messages + if screenshot is not unset: + kwargs["screenshot"] = screenshot + if snapshot is not unset: + kwargs["snapshot"] = snapshot + if source is not unset: + kwargs["source"] = source + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_cdn_cache_status.py b/datadog_api_client/v2/model/synthetics_test_result_cdn_cache_status.py new file mode 100644 index 0000000000..ecbf2b7c45 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_cdn_cache_status.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultCdnCacheStatus(ModelNormal): + @cached_property + def openapi_types(_): + return { + "cached": (bool,), + "status": (str,), + } + attribute_map = { + "cached": "cached", + "status": "status", + } + + def __init__(self_, cached: Union[bool, UnsetType]=unset, status: Union[str, UnsetType]=unset, **kwargs): + """ + Cache status reported by the CDN for the response. + + :param cached: Whether the response was served from the CDN cache. + :type cached: bool, optional + + :param status: Raw cache status string reported by the CDN. + :type status: str, optional + """ + if cached is not unset: + kwargs["cached"] = cached + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_cdn_provider_info.py b/datadog_api_client/v2/model/synthetics_test_result_cdn_provider_info.py new file mode 100644 index 0000000000..2da0c97742 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_cdn_provider_info.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_cdn_cache_status import SyntheticsTestResultCdnCacheStatus + +class SyntheticsTestResultCdnProviderInfo(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_cdn_cache_status import SyntheticsTestResultCdnCacheStatus + return { + "cache": (SyntheticsTestResultCdnCacheStatus,), + "provider": (str,), + } + attribute_map = { + "cache": "cache", + "provider": "provider", + } + + def __init__(self_, cache: Union[SyntheticsTestResultCdnCacheStatus, UnsetType]=unset, provider: Union[str, UnsetType]=unset, **kwargs): + """ + CDN provider details inferred from response headers. + + :param cache: Cache status reported by the CDN for the response. + :type cache: SyntheticsTestResultCdnCacheStatus, optional + + :param provider: Name of the CDN provider. + :type provider: str, optional + """ + if cache is not unset: + kwargs["cache"] = cache + if provider is not unset: + kwargs["provider"] = provider + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_cdn_resource.py b/datadog_api_client/v2/model/synthetics_test_result_cdn_resource.py new file mode 100644 index 0000000000..6438cd913a --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_cdn_resource.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_cdn_provider_info import SyntheticsTestResultCdnProviderInfo + +class SyntheticsTestResultCdnResource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_cdn_provider_info import SyntheticsTestResultCdnProviderInfo + return { + "cdn": (SyntheticsTestResultCdnProviderInfo,), + "resolved_ip": (str,), + "timestamp": (int,), + "timings": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "cdn": "cdn", + "resolved_ip": "resolved_ip", + "timestamp": "timestamp", + "timings": "timings", + } + + def __init__(self_, cdn: Union[SyntheticsTestResultCdnProviderInfo, UnsetType]=unset, resolved_ip: Union[str, UnsetType]=unset, timestamp: Union[int, UnsetType]=unset, timings: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + A CDN resource encountered while executing a browser step. + + :param cdn: CDN provider details inferred from response headers. + :type cdn: SyntheticsTestResultCdnProviderInfo, optional + + :param resolved_ip: Resolved IP address for the CDN resource. + :type resolved_ip: str, optional + + :param timestamp: Unix timestamp (ms) of when the resource was fetched. + :type timestamp: int, optional + + :param timings: Timing breakdown for fetching the CDN resource. + :type timings: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + """ + if cdn is not unset: + kwargs["cdn"] = cdn + if resolved_ip is not unset: + kwargs["resolved_ip"] = resolved_ip + if timestamp is not unset: + kwargs["timestamp"] = timestamp + if timings is not unset: + kwargs["timings"] = timings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_certificate.py b/datadog_api_client/v2/model/synthetics_test_result_certificate.py new file mode 100644 index 0000000000..658380e31f --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_certificate.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_certificate_validity import SyntheticsTestResultCertificateValidity + +class SyntheticsTestResultCertificate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_certificate_validity import SyntheticsTestResultCertificateValidity + return { + "cipher": (str,), + "exponent": (int,), + "ext_key_usage": ([str],), + "fingerprint": (str,), + "fingerprint256": (str,), + "issuer": ({str: (str,)},), + "modulus": (str,), + "protocol": (str,), + "serial_number": (str,), + "subject": ({str: (str,)},), + "tls_version": (float,), + "valid": (SyntheticsTestResultCertificateValidity,), + } + attribute_map = { + "cipher": "cipher", + "exponent": "exponent", + "ext_key_usage": "ext_key_usage", + "fingerprint": "fingerprint", + "fingerprint256": "fingerprint256", + "issuer": "issuer", + "modulus": "modulus", + "protocol": "protocol", + "serial_number": "serial_number", + "subject": "subject", + "tls_version": "tls_version", + "valid": "valid", + } + + def __init__(self_, cipher: Union[str, UnsetType]=unset, exponent: Union[int, UnsetType]=unset, ext_key_usage: Union[List[str], UnsetType]=unset, fingerprint: Union[str, UnsetType]=unset, fingerprint256: Union[str, UnsetType]=unset, issuer: Union[Dict[str, str], UnsetType]=unset, modulus: Union[str, UnsetType]=unset, protocol: Union[str, UnsetType]=unset, serial_number: Union[str, UnsetType]=unset, subject: Union[Dict[str, str], UnsetType]=unset, tls_version: Union[float, UnsetType]=unset, valid: Union[SyntheticsTestResultCertificateValidity, UnsetType]=unset, **kwargs): + """ + SSL/TLS certificate information returned from an SSL test. + + :param cipher: Cipher used for the TLS connection. + :type cipher: str, optional + + :param exponent: RSA exponent of the certificate. + :type exponent: int, optional + + :param ext_key_usage: Extended key usage extensions for the certificate. + :type ext_key_usage: [str], optional + + :param fingerprint: SHA-1 fingerprint of the certificate. + :type fingerprint: str, optional + + :param fingerprint256: SHA-256 fingerprint of the certificate. + :type fingerprint256: str, optional + + :param issuer: Certificate issuer details. + :type issuer: {str: (str,)}, optional + + :param modulus: RSA modulus of the certificate. + :type modulus: str, optional + + :param protocol: TLS protocol used (for example, ``TLSv1.2`` ). + :type protocol: str, optional + + :param serial_number: Serial number of the certificate. + :type serial_number: str, optional + + :param subject: Certificate subject details. + :type subject: {str: (str,)}, optional + + :param tls_version: TLS protocol version. + :type tls_version: float, optional + + :param valid: Validity window of a certificate. + :type valid: SyntheticsTestResultCertificateValidity, optional + """ + if cipher is not unset: + kwargs["cipher"] = cipher + if exponent is not unset: + kwargs["exponent"] = exponent + if ext_key_usage is not unset: + kwargs["ext_key_usage"] = ext_key_usage + if fingerprint is not unset: + kwargs["fingerprint"] = fingerprint + if fingerprint256 is not unset: + kwargs["fingerprint256"] = fingerprint256 + if issuer is not unset: + kwargs["issuer"] = issuer + if modulus is not unset: + kwargs["modulus"] = modulus + if protocol is not unset: + kwargs["protocol"] = protocol + if serial_number is not unset: + kwargs["serial_number"] = serial_number + if subject is not unset: + kwargs["subject"] = subject + if tls_version is not unset: + kwargs["tls_version"] = tls_version + if valid is not unset: + kwargs["valid"] = valid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_certificate_validity.py b/datadog_api_client/v2/model/synthetics_test_result_certificate_validity.py new file mode 100644 index 0000000000..7bb2d27185 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_certificate_validity.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultCertificateValidity(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_from": (int,), + "to": (int,), + } + attribute_map = { + "_from": "from", + "to": "to", + } + + def __init__(self_, _from: Union[int, UnsetType]=unset, to: Union[int, UnsetType]=unset, **kwargs): + """ + Validity window of a certificate. + + :param _from: Unix timestamp (ms) of when the certificate became valid. + :type _from: int, optional + + :param to: Unix timestamp (ms) of when the certificate expires. + :type to: int, optional + """ + if _from is not unset: + kwargs["_from"] = _from + if to is not unset: + kwargs["to"] = to + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_ci.py b/datadog_api_client/v2/model/synthetics_test_result_ci.py new file mode 100644 index 0000000000..688b9dc401 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_ci.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_ci_pipeline import SyntheticsTestResultCIPipeline + from datadog_api_client.v2.model.synthetics_test_result_ci_provider import SyntheticsTestResultCIProvider + from datadog_api_client.v2.model.synthetics_test_result_ci_stage import SyntheticsTestResultCIStage + +class SyntheticsTestResultCI(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_ci_pipeline import SyntheticsTestResultCIPipeline + from datadog_api_client.v2.model.synthetics_test_result_ci_provider import SyntheticsTestResultCIProvider + from datadog_api_client.v2.model.synthetics_test_result_ci_stage import SyntheticsTestResultCIStage + return { + "pipeline": (SyntheticsTestResultCIPipeline,), + "provider": (SyntheticsTestResultCIProvider,), + "stage": (SyntheticsTestResultCIStage,), + "workspace_path": (str,), + } + attribute_map = { + "pipeline": "pipeline", + "provider": "provider", + "stage": "stage", + "workspace_path": "workspace_path", + } + + def __init__(self_, pipeline: Union[SyntheticsTestResultCIPipeline, UnsetType]=unset, provider: Union[SyntheticsTestResultCIProvider, UnsetType]=unset, stage: Union[SyntheticsTestResultCIStage, UnsetType]=unset, workspace_path: Union[str, UnsetType]=unset, **kwargs): + """ + CI information associated with the test result. + + :param pipeline: Details of the CI pipeline. + :type pipeline: SyntheticsTestResultCIPipeline, optional + + :param provider: Details of the CI provider. + :type provider: SyntheticsTestResultCIProvider, optional + + :param stage: Details of the CI stage. + :type stage: SyntheticsTestResultCIStage, optional + + :param workspace_path: Path of the workspace that ran the CI job. + :type workspace_path: str, optional + """ + if pipeline is not unset: + kwargs["pipeline"] = pipeline + if provider is not unset: + kwargs["provider"] = provider + if stage is not unset: + kwargs["stage"] = stage + if workspace_path is not unset: + kwargs["workspace_path"] = workspace_path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_ci_pipeline.py b/datadog_api_client/v2/model/synthetics_test_result_ci_pipeline.py new file mode 100644 index 0000000000..46a2c1ba86 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_ci_pipeline.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultCIPipeline(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "name": (str,), + "number": (int,), + "url": (str,), + } + attribute_map = { + "id": "id", + "name": "name", + "number": "number", + "url": "url", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, number: Union[int, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Details of the CI pipeline. + + :param id: Pipeline identifier. + :type id: str, optional + + :param name: Pipeline name. + :type name: str, optional + + :param number: Pipeline number. + :type number: int, optional + + :param url: Pipeline URL. + :type url: str, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if number is not unset: + kwargs["number"] = number + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_ci_provider.py b/datadog_api_client/v2/model/synthetics_test_result_ci_provider.py new file mode 100644 index 0000000000..ffdfbf76e3 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_ci_provider.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultCIProvider(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Details of the CI provider. + + :param name: Provider name. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_ci_stage.py b/datadog_api_client/v2/model/synthetics_test_result_ci_stage.py new file mode 100644 index 0000000000..ef2c28e338 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_ci_stage.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultCIStage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, **kwargs): + """ + Details of the CI stage. + + :param name: Stage name. + :type name: str, optional + """ + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_data.py b/datadog_api_client/v2/model/synthetics_test_result_data.py new file mode 100644 index 0000000000..00ed06d963 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_attributes import SyntheticsTestResultAttributes + from datadog_api_client.v2.model.synthetics_test_result_relationships import SyntheticsTestResultRelationships + from datadog_api_client.v2.model.synthetics_test_result_type import SyntheticsTestResultType + +class SyntheticsTestResultData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_attributes import SyntheticsTestResultAttributes + from datadog_api_client.v2.model.synthetics_test_result_relationships import SyntheticsTestResultRelationships + from datadog_api_client.v2.model.synthetics_test_result_type import SyntheticsTestResultType + return { + "attributes": (SyntheticsTestResultAttributes,), + "id": (str,), + "relationships": (SyntheticsTestResultRelationships,), + "type": (SyntheticsTestResultType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsTestResultAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[SyntheticsTestResultRelationships, UnsetType]=unset, type: Union[SyntheticsTestResultType, UnsetType]=unset, **kwargs): + """ + Wrapper object for a Synthetic test result. + + :param attributes: Attributes of a Synthetic test result. + :type attributes: SyntheticsTestResultAttributes, optional + + :param id: The result ID. + :type id: str, optional + + :param relationships: Relationships for a Synthetic test result. + :type relationships: SyntheticsTestResultRelationships, optional + + :param type: Type of the Synthetic test result resource, ``result``. + :type type: SyntheticsTestResultType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_detail.py b/datadog_api_client/v2/model/synthetics_test_result_detail.py new file mode 100644 index 0000000000..b794239162 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_detail.py @@ -0,0 +1,363 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_assertion_result import SyntheticsTestResultAssertionResult + from datadog_api_client.v2.model.synthetics_test_result_bucket_keys import SyntheticsTestResultBucketKeys + from datadog_api_client.v2.model.synthetics_test_result_certificate import SyntheticsTestResultCertificate + from datadog_api_client.v2.model.synthetics_test_result_dns_resolution import SyntheticsTestResultDnsResolution + from datadog_api_client.v2.model.synthetics_test_result_failure import SyntheticsTestResultFailure + from datadog_api_client.v2.model.synthetics_test_result_handshake import SyntheticsTestResultHandshake + from datadog_api_client.v2.model.synthetics_test_result_netpath import SyntheticsTestResultNetpath + from datadog_api_client.v2.model.synthetics_test_result_netstats import SyntheticsTestResultNetstats + from datadog_api_client.v2.model.synthetics_test_result_ocsp_response import SyntheticsTestResultOCSPResponse + from datadog_api_client.v2.model.synthetics_test_result_traceroute_hop import SyntheticsTestResultTracerouteHop + from datadog_api_client.v2.model.synthetics_test_result_request_info import SyntheticsTestResultRequestInfo + from datadog_api_client.v2.model.synthetics_test_result_response_info import SyntheticsTestResultResponseInfo + from datadog_api_client.v2.model.synthetics_test_result_run_type import SyntheticsTestResultRunType + from datadog_api_client.v2.model.synthetics_test_result_status import SyntheticsTestResultStatus + from datadog_api_client.v2.model.synthetics_test_result_step import SyntheticsTestResultStep + from datadog_api_client.v2.model.synthetics_test_result_trace import SyntheticsTestResultTrace + from datadog_api_client.v2.model.synthetics_test_result_turn import SyntheticsTestResultTurn + from datadog_api_client.v2.model.synthetics_test_result_variables import SyntheticsTestResultVariables + +class SyntheticsTestResultDetail(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_assertion_result import SyntheticsTestResultAssertionResult + from datadog_api_client.v2.model.synthetics_test_result_bucket_keys import SyntheticsTestResultBucketKeys + from datadog_api_client.v2.model.synthetics_test_result_certificate import SyntheticsTestResultCertificate + from datadog_api_client.v2.model.synthetics_test_result_dns_resolution import SyntheticsTestResultDnsResolution + from datadog_api_client.v2.model.synthetics_test_result_failure import SyntheticsTestResultFailure + from datadog_api_client.v2.model.synthetics_test_result_handshake import SyntheticsTestResultHandshake + from datadog_api_client.v2.model.synthetics_test_result_netpath import SyntheticsTestResultNetpath + from datadog_api_client.v2.model.synthetics_test_result_netstats import SyntheticsTestResultNetstats + from datadog_api_client.v2.model.synthetics_test_result_ocsp_response import SyntheticsTestResultOCSPResponse + from datadog_api_client.v2.model.synthetics_test_result_traceroute_hop import SyntheticsTestResultTracerouteHop + from datadog_api_client.v2.model.synthetics_test_result_request_info import SyntheticsTestResultRequestInfo + from datadog_api_client.v2.model.synthetics_test_result_response_info import SyntheticsTestResultResponseInfo + from datadog_api_client.v2.model.synthetics_test_result_run_type import SyntheticsTestResultRunType + from datadog_api_client.v2.model.synthetics_test_result_status import SyntheticsTestResultStatus + from datadog_api_client.v2.model.synthetics_test_result_step import SyntheticsTestResultStep + from datadog_api_client.v2.model.synthetics_test_result_trace import SyntheticsTestResultTrace + from datadog_api_client.v2.model.synthetics_test_result_turn import SyntheticsTestResultTurn + from datadog_api_client.v2.model.synthetics_test_result_variables import SyntheticsTestResultVariables + return { + "assertions": ([SyntheticsTestResultAssertionResult],), + "bucket_keys": (SyntheticsTestResultBucketKeys,), + "call_type": (str,), + "cert": (SyntheticsTestResultCertificate,), + "compressed_json_descriptor": (str,), + "compressed_steps": (str,), + "connection_outcome": (str,), + "dns_resolution": (SyntheticsTestResultDnsResolution,), + "duration": (float,), + "exited_on_step_success": (bool,), + "failure": (SyntheticsTestResultFailure,), + "finished_at": (int,), + "handshake": (SyntheticsTestResultHandshake,), + "id": (str,), + "initial_id": (str,), + "is_fast_retry": (bool,), + "is_last_retry": (bool,), + "netpath": (SyntheticsTestResultNetpath,), + "netstats": (SyntheticsTestResultNetstats,), + "ocsp": (SyntheticsTestResultOCSPResponse,), + "ping": (SyntheticsTestResultTracerouteHop,), + "received_email_count": (int,), + "received_message": (str,), + "request": (SyntheticsTestResultRequestInfo,), + "resolved_ip": (str,), + "response": (SyntheticsTestResultResponseInfo,), + "run_type": (SyntheticsTestResultRunType,), + "sent_message": (str,), + "start_url": (str,), + "started_at": (int,), + "status": (SyntheticsTestResultStatus,), + "steps": ([SyntheticsTestResultStep],), + "time_to_interactive": (int,), + "timings": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "trace": (SyntheticsTestResultTrace,), + "traceroute": ([SyntheticsTestResultTracerouteHop],), + "triggered_at": (int,), + "tunnel": (bool,), + "turns": ([SyntheticsTestResultTurn],), + "unhealthy": (bool,), + "variables": (SyntheticsTestResultVariables,), + } + attribute_map = { + "assertions": "assertions", + "bucket_keys": "bucket_keys", + "call_type": "call_type", + "cert": "cert", + "compressed_json_descriptor": "compressed_json_descriptor", + "compressed_steps": "compressed_steps", + "connection_outcome": "connection_outcome", + "dns_resolution": "dns_resolution", + "duration": "duration", + "exited_on_step_success": "exited_on_step_success", + "failure": "failure", + "finished_at": "finished_at", + "handshake": "handshake", + "id": "id", + "initial_id": "initial_id", + "is_fast_retry": "is_fast_retry", + "is_last_retry": "is_last_retry", + "netpath": "netpath", + "netstats": "netstats", + "ocsp": "ocsp", + "ping": "ping", + "received_email_count": "received_email_count", + "received_message": "received_message", + "request": "request", + "resolved_ip": "resolved_ip", + "response": "response", + "run_type": "run_type", + "sent_message": "sent_message", + "start_url": "start_url", + "started_at": "started_at", + "status": "status", + "steps": "steps", + "time_to_interactive": "time_to_interactive", + "timings": "timings", + "trace": "trace", + "traceroute": "traceroute", + "triggered_at": "triggered_at", + "tunnel": "tunnel", + "turns": "turns", + "unhealthy": "unhealthy", + "variables": "variables", + } + + def __init__(self_, assertions: Union[List[SyntheticsTestResultAssertionResult], UnsetType]=unset, bucket_keys: Union[SyntheticsTestResultBucketKeys, UnsetType]=unset, call_type: Union[str, UnsetType]=unset, cert: Union[SyntheticsTestResultCertificate, UnsetType]=unset, compressed_json_descriptor: Union[str, UnsetType]=unset, compressed_steps: Union[str, UnsetType]=unset, connection_outcome: Union[str, UnsetType]=unset, dns_resolution: Union[SyntheticsTestResultDnsResolution, UnsetType]=unset, duration: Union[float, UnsetType]=unset, exited_on_step_success: Union[bool, UnsetType]=unset, failure: Union[SyntheticsTestResultFailure, UnsetType]=unset, finished_at: Union[int, UnsetType]=unset, handshake: Union[SyntheticsTestResultHandshake, UnsetType]=unset, id: Union[str, UnsetType]=unset, initial_id: Union[str, UnsetType]=unset, is_fast_retry: Union[bool, UnsetType]=unset, is_last_retry: Union[bool, UnsetType]=unset, netpath: Union[SyntheticsTestResultNetpath, UnsetType]=unset, netstats: Union[SyntheticsTestResultNetstats, UnsetType]=unset, ocsp: Union[SyntheticsTestResultOCSPResponse, UnsetType]=unset, ping: Union[SyntheticsTestResultTracerouteHop, UnsetType]=unset, received_email_count: Union[int, UnsetType]=unset, received_message: Union[str, UnsetType]=unset, request: Union[SyntheticsTestResultRequestInfo, UnsetType]=unset, resolved_ip: Union[str, UnsetType]=unset, response: Union[SyntheticsTestResultResponseInfo, UnsetType]=unset, run_type: Union[SyntheticsTestResultRunType, UnsetType]=unset, sent_message: Union[str, UnsetType]=unset, start_url: Union[str, UnsetType]=unset, started_at: Union[int, UnsetType]=unset, status: Union[SyntheticsTestResultStatus, UnsetType]=unset, steps: Union[List[SyntheticsTestResultStep], UnsetType]=unset, time_to_interactive: Union[int, UnsetType]=unset, timings: Union[Dict[str, Any], UnsetType]=unset, trace: Union[SyntheticsTestResultTrace, UnsetType]=unset, traceroute: Union[List[SyntheticsTestResultTracerouteHop], UnsetType]=unset, triggered_at: Union[int, UnsetType]=unset, tunnel: Union[bool, UnsetType]=unset, turns: Union[List[SyntheticsTestResultTurn], UnsetType]=unset, unhealthy: Union[bool, UnsetType]=unset, variables: Union[SyntheticsTestResultVariables, UnsetType]=unset, **kwargs): + """ + Full result details for a Synthetic test execution. + + :param assertions: Assertion results produced by the test. + :type assertions: [SyntheticsTestResultAssertionResult], optional + + :param bucket_keys: Storage bucket keys for artifacts produced during a step or test. + :type bucket_keys: SyntheticsTestResultBucketKeys, optional + + :param call_type: gRPC call type (for example, ``unary`` , ``healthCheck`` , or ``reflection`` ). + :type call_type: str, optional + + :param cert: SSL/TLS certificate information returned from an SSL test. + :type cert: SyntheticsTestResultCertificate, optional + + :param compressed_json_descriptor: Compressed JSON descriptor for the test (internal format). + :type compressed_json_descriptor: str, optional + + :param compressed_steps: Compressed representation of the test steps (internal format). + :type compressed_steps: str, optional + + :param connection_outcome: Outcome of the connection attempt (for example, ``established`` , ``refused`` ). + :type connection_outcome: str, optional + + :param dns_resolution: DNS resolution details recorded during the test execution. + :type dns_resolution: SyntheticsTestResultDnsResolution, optional + + :param duration: Duration of the test execution (in milliseconds). + :type duration: float, optional + + :param exited_on_step_success: Whether the test exited early because a step marked with ``exitIfSucceed`` passed. + :type exited_on_step_success: bool, optional + + :param failure: Details about the failure of a Synthetic test. + :type failure: SyntheticsTestResultFailure, optional + + :param finished_at: Timestamp of when the test finished (in milliseconds). + :type finished_at: int, optional + + :param handshake: Handshake request and response for protocol-level tests. + :type handshake: SyntheticsTestResultHandshake, optional + + :param id: The unique identifier for this result. + :type id: str, optional + + :param initial_id: The initial result ID before any retries. + :type initial_id: str, optional + + :param is_fast_retry: Whether this result is from a fast retry. + :type is_fast_retry: bool, optional + + :param is_last_retry: Whether this result is from the last retry. + :type is_last_retry: bool, optional + + :param netpath: Network Path test result capturing the path between source and destination. + :type netpath: SyntheticsTestResultNetpath, optional + + :param netstats: Aggregated network statistics from the test execution. + :type netstats: SyntheticsTestResultNetstats, optional + + :param ocsp: OCSP response received while validating a certificate. + :type ocsp: SyntheticsTestResultOCSPResponse, optional + + :param ping: A network probe result, used for traceroute hops and ping summaries. + :type ping: SyntheticsTestResultTracerouteHop, optional + + :param received_email_count: Number of emails received during the test (email tests). + :type received_email_count: int, optional + + :param received_message: Message received from the target (for WebSocket/TCP/UDP tests). + :type received_message: str, optional + + :param request: Details of the outgoing request made during the test execution. + :type request: SyntheticsTestResultRequestInfo, optional + + :param resolved_ip: IP address resolved for the target host. + :type resolved_ip: str, optional + + :param response: Details of the response received during the test execution. + :type response: SyntheticsTestResultResponseInfo, optional + + :param run_type: The type of run for a Synthetic test result. + :type run_type: SyntheticsTestResultRunType, optional + + :param sent_message: Message sent to the target (for WebSocket/TCP/UDP tests). + :type sent_message: str, optional + + :param start_url: Start URL for the test (browser tests). + :type start_url: str, optional + + :param started_at: Timestamp of when the test started (in milliseconds). + :type started_at: int, optional + + :param status: Status of a Synthetic test result. + :type status: SyntheticsTestResultStatus, optional + + :param steps: Step results (for browser, mobile, and multistep API tests). + :type steps: [SyntheticsTestResultStep], optional + + :param time_to_interactive: Time to interactive in milliseconds (browser tests). + :type time_to_interactive: int, optional + + :param timings: Timing breakdown of the test request phases (for example, DNS, TCP, TLS, first byte). + :type timings: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param trace: Trace identifiers associated with a Synthetic test result. + :type trace: SyntheticsTestResultTrace, optional + + :param traceroute: Traceroute hop results (for network tests). + :type traceroute: [SyntheticsTestResultTracerouteHop], optional + + :param triggered_at: Timestamp of when the test was triggered (in milliseconds). + :type triggered_at: int, optional + + :param tunnel: Whether the test was executed through a tunnel. + :type tunnel: bool, optional + + :param turns: Turns executed by a goal-based browser test. + :type turns: [SyntheticsTestResultTurn], optional + + :param unhealthy: Whether the test runner was unhealthy at the time of execution. + :type unhealthy: bool, optional + + :param variables: Variables captured during a test step. + :type variables: SyntheticsTestResultVariables, optional + """ + if assertions is not unset: + kwargs["assertions"] = assertions + if bucket_keys is not unset: + kwargs["bucket_keys"] = bucket_keys + if call_type is not unset: + kwargs["call_type"] = call_type + if cert is not unset: + kwargs["cert"] = cert + if compressed_json_descriptor is not unset: + kwargs["compressed_json_descriptor"] = compressed_json_descriptor + if compressed_steps is not unset: + kwargs["compressed_steps"] = compressed_steps + if connection_outcome is not unset: + kwargs["connection_outcome"] = connection_outcome + if dns_resolution is not unset: + kwargs["dns_resolution"] = dns_resolution + if duration is not unset: + kwargs["duration"] = duration + if exited_on_step_success is not unset: + kwargs["exited_on_step_success"] = exited_on_step_success + if failure is not unset: + kwargs["failure"] = failure + if finished_at is not unset: + kwargs["finished_at"] = finished_at + if handshake is not unset: + kwargs["handshake"] = handshake + if id is not unset: + kwargs["id"] = id + if initial_id is not unset: + kwargs["initial_id"] = initial_id + if is_fast_retry is not unset: + kwargs["is_fast_retry"] = is_fast_retry + if is_last_retry is not unset: + kwargs["is_last_retry"] = is_last_retry + if netpath is not unset: + kwargs["netpath"] = netpath + if netstats is not unset: + kwargs["netstats"] = netstats + if ocsp is not unset: + kwargs["ocsp"] = ocsp + if ping is not unset: + kwargs["ping"] = ping + if received_email_count is not unset: + kwargs["received_email_count"] = received_email_count + if received_message is not unset: + kwargs["received_message"] = received_message + if request is not unset: + kwargs["request"] = request + if resolved_ip is not unset: + kwargs["resolved_ip"] = resolved_ip + if response is not unset: + kwargs["response"] = response + if run_type is not unset: + kwargs["run_type"] = run_type + if sent_message is not unset: + kwargs["sent_message"] = sent_message + if start_url is not unset: + kwargs["start_url"] = start_url + if started_at is not unset: + kwargs["started_at"] = started_at + if status is not unset: + kwargs["status"] = status + if steps is not unset: + kwargs["steps"] = steps + if time_to_interactive is not unset: + kwargs["time_to_interactive"] = time_to_interactive + if timings is not unset: + kwargs["timings"] = timings + if trace is not unset: + kwargs["trace"] = trace + if traceroute is not unset: + kwargs["traceroute"] = traceroute + if triggered_at is not unset: + kwargs["triggered_at"] = triggered_at + if tunnel is not unset: + kwargs["tunnel"] = tunnel + if turns is not unset: + kwargs["turns"] = turns + if unhealthy is not unset: + kwargs["unhealthy"] = unhealthy + if variables is not unset: + kwargs["variables"] = variables + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_device.py b/datadog_api_client/v2/model/synthetics_test_result_device.py new file mode 100644 index 0000000000..374ce750df --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_device.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_device_browser import SyntheticsTestResultDeviceBrowser + from datadog_api_client.v2.model.synthetics_test_result_device_platform import SyntheticsTestResultDevicePlatform + from datadog_api_client.v2.model.synthetics_test_result_device_resolution import SyntheticsTestResultDeviceResolution + +class SyntheticsTestResultDevice(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_device_browser import SyntheticsTestResultDeviceBrowser + from datadog_api_client.v2.model.synthetics_test_result_device_platform import SyntheticsTestResultDevicePlatform + from datadog_api_client.v2.model.synthetics_test_result_device_resolution import SyntheticsTestResultDeviceResolution + return { + "browser": (SyntheticsTestResultDeviceBrowser,), + "id": (str,), + "name": (str,), + "platform": (SyntheticsTestResultDevicePlatform,), + "resolution": (SyntheticsTestResultDeviceResolution,), + "type": (str,), + } + attribute_map = { + "browser": "browser", + "id": "id", + "name": "name", + "platform": "platform", + "resolution": "resolution", + "type": "type", + } + + def __init__(self_, browser: Union[SyntheticsTestResultDeviceBrowser, UnsetType]=unset, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, platform: Union[SyntheticsTestResultDevicePlatform, UnsetType]=unset, resolution: Union[SyntheticsTestResultDeviceResolution, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Device information for the test result (browser and mobile tests). + + :param browser: Browser information for the device used to run the test. + :type browser: SyntheticsTestResultDeviceBrowser, optional + + :param id: Device identifier. + :type id: str, optional + + :param name: Device name. + :type name: str, optional + + :param platform: Platform information for the device used to run the test. + :type platform: SyntheticsTestResultDevicePlatform, optional + + :param resolution: Screen resolution of the device used to run the test. + :type resolution: SyntheticsTestResultDeviceResolution, optional + + :param type: Device type. + :type type: str, optional + """ + if browser is not unset: + kwargs["browser"] = browser + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if platform is not unset: + kwargs["platform"] = platform + if resolution is not unset: + kwargs["resolution"] = resolution + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_device_browser.py b/datadog_api_client/v2/model/synthetics_test_result_device_browser.py new file mode 100644 index 0000000000..adf799eb0a --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_device_browser.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultDeviceBrowser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "type": (str,), + "user_agent": (str,), + "version": (str,), + } + attribute_map = { + "type": "type", + "user_agent": "user_agent", + "version": "version", + } + + def __init__(self_, type: Union[str, UnsetType]=unset, user_agent: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Browser information for the device used to run the test. + + :param type: Browser type (for example, ``chrome`` , ``firefox`` ). + :type type: str, optional + + :param user_agent: User agent string reported by the browser. + :type user_agent: str, optional + + :param version: Browser version. + :type version: str, optional + """ + if type is not unset: + kwargs["type"] = type + if user_agent is not unset: + kwargs["user_agent"] = user_agent + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_device_platform.py b/datadog_api_client/v2/model/synthetics_test_result_device_platform.py new file mode 100644 index 0000000000..1b270b273c --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_device_platform.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultDevicePlatform(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "version": (str,), + } + attribute_map = { + "name": "name", + "version": "version", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, **kwargs): + """ + Platform information for the device used to run the test. + + :param name: Platform name (for example, ``linux`` , ``macos`` ). + :type name: str, optional + + :param version: Platform version. + :type version: str, optional + """ + if name is not unset: + kwargs["name"] = name + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_device_resolution.py b/datadog_api_client/v2/model/synthetics_test_result_device_resolution.py new file mode 100644 index 0000000000..7234d79419 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_device_resolution.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultDeviceResolution(ModelNormal): + @cached_property + def openapi_types(_): + return { + "height": (int,), + "pixel_ratio": (float,), + "width": (int,), + } + attribute_map = { + "height": "height", + "pixel_ratio": "pixel_ratio", + "width": "width", + } + + def __init__(self_, height: Union[int, UnsetType]=unset, pixel_ratio: Union[float, UnsetType]=unset, width: Union[int, UnsetType]=unset, **kwargs): + """ + Screen resolution of the device used to run the test. + + :param height: Viewport height in pixels. + :type height: int, optional + + :param pixel_ratio: Device pixel ratio. + :type pixel_ratio: float, optional + + :param width: Viewport width in pixels. + :type width: int, optional + """ + if height is not unset: + kwargs["height"] = height + if pixel_ratio is not unset: + kwargs["pixel_ratio"] = pixel_ratio + if width is not unset: + kwargs["width"] = width + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_dns_record.py b/datadog_api_client/v2/model/synthetics_test_result_dns_record.py new file mode 100644 index 0000000000..25a3ae3418 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_dns_record.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultDnsRecord(ModelNormal): + @cached_property + def openapi_types(_): + return { + "type": (str,), + "values": ([str],), + } + attribute_map = { + "type": "type", + "values": "values", + } + + def __init__(self_, type: Union[str, UnsetType]=unset, values: Union[List[str], UnsetType]=unset, **kwargs): + """ + A DNS record returned in a DNS test response. + + :param type: DNS record type (for example, ``A`` , ``AAAA`` , ``CNAME`` ). + :type type: str, optional + + :param values: Values associated with the DNS record. + :type values: [str], optional + """ + if type is not unset: + kwargs["type"] = type + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_dns_resolution.py b/datadog_api_client/v2/model/synthetics_test_result_dns_resolution.py new file mode 100644 index 0000000000..81bdb3a777 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_dns_resolution.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_dns_resolution_attempt import SyntheticsTestResultDnsResolutionAttempt + +class SyntheticsTestResultDnsResolution(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_dns_resolution_attempt import SyntheticsTestResultDnsResolutionAttempt + return { + "attempts": ([SyntheticsTestResultDnsResolutionAttempt],), + "resolved_ip": (str,), + "resolved_port": (str,), + "server": (str,), + } + attribute_map = { + "attempts": "attempts", + "resolved_ip": "resolved_ip", + "resolved_port": "resolved_port", + "server": "server", + } + + def __init__(self_, attempts: Union[List[SyntheticsTestResultDnsResolutionAttempt], UnsetType]=unset, resolved_ip: Union[str, UnsetType]=unset, resolved_port: Union[str, UnsetType]=unset, server: Union[str, UnsetType]=unset, **kwargs): + """ + DNS resolution details recorded during the test execution. + + :param attempts: DNS resolution attempts made during the test. + :type attempts: [SyntheticsTestResultDnsResolutionAttempt], optional + + :param resolved_ip: Resolved IP address for the target host. + :type resolved_ip: str, optional + + :param resolved_port: Resolved port for the target service. + :type resolved_port: str, optional + + :param server: DNS server used for the resolution. + :type server: str, optional + """ + if attempts is not unset: + kwargs["attempts"] = attempts + if resolved_ip is not unset: + kwargs["resolved_ip"] = resolved_ip + if resolved_port is not unset: + kwargs["resolved_port"] = resolved_port + if server is not unset: + kwargs["server"] = server + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_dns_resolution_attempt.py b/datadog_api_client/v2/model/synthetics_test_result_dns_resolution_attempt.py new file mode 100644 index 0000000000..5e8e16314f --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_dns_resolution_attempt.py @@ -0,0 +1,36 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultDnsResolutionAttempt(ModelNormal): + @cached_property + def additional_properties_type(_): + return (str,) + + def __init__(self_, **kwargs): + """ + A single DNS resolution attempt. Keys are provider-specific attempt fields. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_duration.py b/datadog_api_client/v2/model/synthetics_test_result_duration.py new file mode 100644 index 0000000000..d0196fed63 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_duration.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultDuration(ModelNormal): + @cached_property + def openapi_types(_): + return { + "has_duration": (bool,), + "value": (int,), + } + attribute_map = { + "has_duration": "has_duration", + "value": "value", + } + + def __init__(self_, has_duration: Union[bool, UnsetType]=unset, value: Union[int, UnsetType]=unset, **kwargs): + """ + Total duration of a Synthetic test execution. + + :param has_duration: Whether a duration was recorded for this execution. + :type has_duration: bool, optional + + :param value: Duration value in milliseconds. + :type value: int, optional + """ + if has_duration is not unset: + kwargs["has_duration"] = has_duration + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_execution_info.py b/datadog_api_client/v2/model/synthetics_test_result_execution_info.py new file mode 100644 index 0000000000..29c4a19561 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_execution_info.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_duration import SyntheticsTestResultDuration + +class SyntheticsTestResultExecutionInfo(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_duration import SyntheticsTestResultDuration + return { + "duration": (SyntheticsTestResultDuration,), + "error_message": (str,), + "is_fast_retry": (bool,), + "timings": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tunnel": (bool,), + "unhealthy": (bool,), + } + attribute_map = { + "duration": "duration", + "error_message": "error_message", + "is_fast_retry": "is_fast_retry", + "timings": "timings", + "tunnel": "tunnel", + "unhealthy": "unhealthy", + } + + def __init__(self_, duration: Union[SyntheticsTestResultDuration, UnsetType]=unset, error_message: Union[str, UnsetType]=unset, is_fast_retry: Union[bool, UnsetType]=unset, timings: Union[Dict[str, Any], UnsetType]=unset, tunnel: Union[bool, UnsetType]=unset, unhealthy: Union[bool, UnsetType]=unset, **kwargs): + """ + Execution details for a Synthetic test result. + + :param duration: Total duration of a Synthetic test execution. + :type duration: SyntheticsTestResultDuration, optional + + :param error_message: Error message if the execution encountered an issue. + :type error_message: str, optional + + :param is_fast_retry: Whether this result is from a fast retry. + :type is_fast_retry: bool, optional + + :param timings: Timing breakdown of the test execution in milliseconds. + :type timings: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tunnel: Whether the test was executed through a tunnel. + :type tunnel: bool, optional + + :param unhealthy: Whether the location was unhealthy during execution. + :type unhealthy: bool, optional + """ + if duration is not unset: + kwargs["duration"] = duration + if error_message is not unset: + kwargs["error_message"] = error_message + if is_fast_retry is not unset: + kwargs["is_fast_retry"] = is_fast_retry + if timings is not unset: + kwargs["timings"] = timings + if tunnel is not unset: + kwargs["tunnel"] = tunnel + if unhealthy is not unset: + kwargs["unhealthy"] = unhealthy + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_failure.py b/datadog_api_client/v2/model/synthetics_test_result_failure.py new file mode 100644 index 0000000000..355d97e2b9 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_failure.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultFailure(ModelNormal): + @cached_property + def openapi_types(_): + return { + "code": (str,), + "internal_code": (str,), + "internal_message": (str,), + "message": (str,), + } + attribute_map = { + "code": "code", + "internal_code": "internal_code", + "internal_message": "internal_message", + "message": "message", + } + + def __init__(self_, code: Union[str, UnsetType]=unset, internal_code: Union[str, UnsetType]=unset, internal_message: Union[str, UnsetType]=unset, message: Union[str, UnsetType]=unset, **kwargs): + """ + Details about the failure of a Synthetic test. + + :param code: Error code for the failure. + :type code: str, optional + + :param internal_code: Internal error code used for debugging. + :type internal_code: str, optional + + :param internal_message: Internal error message used for debugging. + :type internal_message: str, optional + + :param message: Error message for the failure. + :type message: str, optional + """ + if code is not unset: + kwargs["code"] = code + if internal_code is not unset: + kwargs["internal_code"] = internal_code + if internal_message is not unset: + kwargs["internal_message"] = internal_message + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_file_ref.py b/datadog_api_client/v2/model/synthetics_test_result_file_ref.py new file mode 100644 index 0000000000..a70b202cbf --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_file_ref.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultFileRef(ModelNormal): + @cached_property + def openapi_types(_): + return { + "bucket_key": (str,), + "encoding": (str,), + "name": (str,), + "size": (int,), + "type": (str,), + } + attribute_map = { + "bucket_key": "bucket_key", + "encoding": "encoding", + "name": "name", + "size": "size", + "type": "type", + } + + def __init__(self_, bucket_key: Union[str, UnsetType]=unset, encoding: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, size: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Reference to a file attached to a Synthetic test request. + + :param bucket_key: Storage bucket key where the file is stored. + :type bucket_key: str, optional + + :param encoding: Encoding of the file contents. + :type encoding: str, optional + + :param name: File name. + :type name: str, optional + + :param size: File size in bytes. + :type size: int, optional + + :param type: File MIME type. + :type type: str, optional + """ + if bucket_key is not unset: + kwargs["bucket_key"] = bucket_key + if encoding is not unset: + kwargs["encoding"] = encoding + if name is not unset: + kwargs["name"] = name + if size is not unset: + kwargs["size"] = size + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_git.py b/datadog_api_client/v2/model/synthetics_test_result_git.py new file mode 100644 index 0000000000..f329c02647 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_git.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_git_commit import SyntheticsTestResultGitCommit + +class SyntheticsTestResultGit(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_git_commit import SyntheticsTestResultGitCommit + return { + "branch": (str,), + "commit": (SyntheticsTestResultGitCommit,), + "repository_url": (str,), + } + attribute_map = { + "branch": "branch", + "commit": "commit", + "repository_url": "repository_url", + } + + def __init__(self_, branch: Union[str, UnsetType]=unset, commit: Union[SyntheticsTestResultGitCommit, UnsetType]=unset, repository_url: Union[str, UnsetType]=unset, **kwargs): + """ + Git information associated with the test result. + + :param branch: Git branch name. + :type branch: str, optional + + :param commit: Details of the Git commit associated with the test result. + :type commit: SyntheticsTestResultGitCommit, optional + + :param repository_url: Git repository URL. + :type repository_url: str, optional + """ + if branch is not unset: + kwargs["branch"] = branch + if commit is not unset: + kwargs["commit"] = commit + if repository_url is not unset: + kwargs["repository_url"] = repository_url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_git_commit.py b/datadog_api_client/v2/model/synthetics_test_result_git_commit.py new file mode 100644 index 0000000000..e686d87e30 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_git_commit.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_git_user import SyntheticsTestResultGitUser + +class SyntheticsTestResultGitCommit(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_git_user import SyntheticsTestResultGitUser + return { + "author": (SyntheticsTestResultGitUser,), + "committer": (SyntheticsTestResultGitUser,), + "message": (str,), + "sha": (str,), + "url": (str,), + } + attribute_map = { + "author": "author", + "committer": "committer", + "message": "message", + "sha": "sha", + "url": "url", + } + + def __init__(self_, author: Union[SyntheticsTestResultGitUser, UnsetType]=unset, committer: Union[SyntheticsTestResultGitUser, UnsetType]=unset, message: Union[str, UnsetType]=unset, sha: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Details of the Git commit associated with the test result. + + :param author: A Git user (author or committer). + :type author: SyntheticsTestResultGitUser, optional + + :param committer: A Git user (author or committer). + :type committer: SyntheticsTestResultGitUser, optional + + :param message: Commit message. + :type message: str, optional + + :param sha: Commit SHA. + :type sha: str, optional + + :param url: URL of the commit. + :type url: str, optional + """ + if author is not unset: + kwargs["author"] = author + if committer is not unset: + kwargs["committer"] = committer + if message is not unset: + kwargs["message"] = message + if sha is not unset: + kwargs["sha"] = sha + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_git_user.py b/datadog_api_client/v2/model/synthetics_test_result_git_user.py new file mode 100644 index 0000000000..33e66f560c --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_git_user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultGitUser(ModelNormal): + @cached_property + def openapi_types(_): + return { + "date": (str,), + "email": (str,), + "name": (str,), + } + attribute_map = { + "date": "date", + "email": "email", + "name": "name", + } + + def __init__(self_, date: Union[str, UnsetType]=unset, email: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + A Git user (author or committer). + + :param date: Timestamp of the commit action for this user. + :type date: str, optional + + :param email: Email address of the Git user. + :type email: str, optional + + :param name: Name of the Git user. + :type name: str, optional + """ + if date is not unset: + kwargs["date"] = date + if email is not unset: + kwargs["email"] = email + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_handshake.py b/datadog_api_client/v2/model/synthetics_test_result_handshake.py new file mode 100644 index 0000000000..156e9b37d9 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_handshake.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_request_info import SyntheticsTestResultRequestInfo + from datadog_api_client.v2.model.synthetics_test_result_response_info import SyntheticsTestResultResponseInfo + +class SyntheticsTestResultHandshake(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_request_info import SyntheticsTestResultRequestInfo + from datadog_api_client.v2.model.synthetics_test_result_response_info import SyntheticsTestResultResponseInfo + return { + "request": (SyntheticsTestResultRequestInfo,), + "response": (SyntheticsTestResultResponseInfo,), + } + attribute_map = { + "request": "request", + "response": "response", + } + + def __init__(self_, request: Union[SyntheticsTestResultRequestInfo, UnsetType]=unset, response: Union[SyntheticsTestResultResponseInfo, UnsetType]=unset, **kwargs): + """ + Handshake request and response for protocol-level tests. + + :param request: Details of the outgoing request made during the test execution. + :type request: SyntheticsTestResultRequestInfo, optional + + :param response: Details of the response received during the test execution. + :type response: SyntheticsTestResultResponseInfo, optional + """ + if request is not unset: + kwargs["request"] = request + if response is not unset: + kwargs["response"] = response + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_health_check.py b/datadog_api_client/v2/model/synthetics_test_result_health_check.py new file mode 100644 index 0000000000..59542ff0aa --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_health_check.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultHealthCheck(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": ({str: (str,)},), + "status": (int,), + } + attribute_map = { + "message": "message", + "status": "status", + } + + def __init__(self_, message: Union[Dict[str, str], UnsetType]=unset, status: Union[int, UnsetType]=unset, **kwargs): + """ + Health check information returned from a gRPC health check call. + + :param message: Raw health check message payload. + :type message: {str: (str,)}, optional + + :param status: Health check status code. + :type status: int, optional + """ + if message is not unset: + kwargs["message"] = message + if status is not unset: + kwargs["status"] = status + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_included_item.py b/datadog_api_client/v2/model/synthetics_test_result_included_item.py new file mode 100644 index 0000000000..ccafbb82e0 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_included_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultIncludedItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "attributes": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[Dict[str, Any], UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + An included related resource. + + :param attributes: Attributes of the included resource. + :type attributes: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param id: ID of the included resource. + :type id: str, optional + + :param type: Type of the included resource. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_location.py b/datadog_api_client/v2/model/synthetics_test_result_location.py new file mode 100644 index 0000000000..ec740280ae --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_location.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultLocation(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "name": (str,), + "version": (str,), + "worker_id": (str,), + } + attribute_map = { + "id": "id", + "name": "name", + "version": "version", + "worker_id": "worker_id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, version: Union[str, UnsetType]=unset, worker_id: Union[str, UnsetType]=unset, **kwargs): + """ + Location information for a Synthetic test result. + + :param id: Identifier of the location. + :type id: str, optional + + :param name: Human-readable name of the location. + :type name: str, optional + + :param version: Version of the worker that ran the test. + :type version: str, optional + + :param worker_id: Identifier of the specific worker that ran the test. + :type worker_id: str, optional + """ + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if version is not unset: + kwargs["version"] = version + if worker_id is not unset: + kwargs["worker_id"] = worker_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_netpath.py b/datadog_api_client/v2/model/synthetics_test_result_netpath.py new file mode 100644 index 0000000000..f2ad10ae07 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_netpath.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_netpath_destination import SyntheticsTestResultNetpathDestination + from datadog_api_client.v2.model.synthetics_test_result_netpath_hop import SyntheticsTestResultNetpathHop + from datadog_api_client.v2.model.synthetics_test_result_netpath_endpoint import SyntheticsTestResultNetpathEndpoint + +class SyntheticsTestResultNetpath(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_netpath_destination import SyntheticsTestResultNetpathDestination + from datadog_api_client.v2.model.synthetics_test_result_netpath_hop import SyntheticsTestResultNetpathHop + from datadog_api_client.v2.model.synthetics_test_result_netpath_endpoint import SyntheticsTestResultNetpathEndpoint + return { + "destination": (SyntheticsTestResultNetpathDestination,), + "hops": ([SyntheticsTestResultNetpathHop],), + "origin": (str,), + "pathtrace_id": (str,), + "protocol": (str,), + "source": (SyntheticsTestResultNetpathEndpoint,), + "tags": ([str],), + "timestamp": (int,), + } + attribute_map = { + "destination": "destination", + "hops": "hops", + "origin": "origin", + "pathtrace_id": "pathtrace_id", + "protocol": "protocol", + "source": "source", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, destination: Union[SyntheticsTestResultNetpathDestination, UnsetType]=unset, hops: Union[List[SyntheticsTestResultNetpathHop], UnsetType]=unset, origin: Union[str, UnsetType]=unset, pathtrace_id: Union[str, UnsetType]=unset, protocol: Union[str, UnsetType]=unset, source: Union[SyntheticsTestResultNetpathEndpoint, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[int, UnsetType]=unset, **kwargs): + """ + Network Path test result capturing the path between source and destination. + + :param destination: Destination endpoint of a network path measurement. + :type destination: SyntheticsTestResultNetpathDestination, optional + + :param hops: Hops along the network path. + :type hops: [SyntheticsTestResultNetpathHop], optional + + :param origin: Origin of the network path (for example, probe source). + :type origin: str, optional + + :param pathtrace_id: Identifier of the path trace. + :type pathtrace_id: str, optional + + :param protocol: Protocol used for the path trace (for example, ``tcp`` , ``udp`` , ``icmp`` ). + :type protocol: str, optional + + :param source: Source endpoint of a network path measurement. + :type source: SyntheticsTestResultNetpathEndpoint, optional + + :param tags: Tags associated with the network path measurement. + :type tags: [str], optional + + :param timestamp: Unix timestamp (ms) of the network path measurement. + :type timestamp: int, optional + """ + if destination is not unset: + kwargs["destination"] = destination + if hops is not unset: + kwargs["hops"] = hops + if origin is not unset: + kwargs["origin"] = origin + if pathtrace_id is not unset: + kwargs["pathtrace_id"] = pathtrace_id + if protocol is not unset: + kwargs["protocol"] = protocol + if source is not unset: + kwargs["source"] = source + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_netpath_destination.py b/datadog_api_client/v2/model/synthetics_test_result_netpath_destination.py new file mode 100644 index 0000000000..5eedfc800b --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_netpath_destination.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultNetpathDestination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hostname": (str,), + "ip_address": (str,), + "port": (int,), + } + attribute_map = { + "hostname": "hostname", + "ip_address": "ip_address", + "port": "port", + } + + def __init__(self_, hostname: Union[str, UnsetType]=unset, ip_address: Union[str, UnsetType]=unset, port: Union[int, UnsetType]=unset, **kwargs): + """ + Destination endpoint of a network path measurement. + + :param hostname: Hostname of the destination. + :type hostname: str, optional + + :param ip_address: IP address of the destination. + :type ip_address: str, optional + + :param port: Port of the destination service. + :type port: int, optional + """ + if hostname is not unset: + kwargs["hostname"] = hostname + if ip_address is not unset: + kwargs["ip_address"] = ip_address + if port is not unset: + kwargs["port"] = port + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_netpath_endpoint.py b/datadog_api_client/v2/model/synthetics_test_result_netpath_endpoint.py new file mode 100644 index 0000000000..123dc0ce7a --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_netpath_endpoint.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultNetpathEndpoint(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hostname": (str,), + } + attribute_map = { + "hostname": "hostname", + } + + def __init__(self_, hostname: Union[str, UnsetType]=unset, **kwargs): + """ + Source endpoint of a network path measurement. + + :param hostname: Hostname of the endpoint. + :type hostname: str, optional + """ + if hostname is not unset: + kwargs["hostname"] = hostname + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_netpath_hop.py b/datadog_api_client/v2/model/synthetics_test_result_netpath_hop.py new file mode 100644 index 0000000000..993daf8302 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_netpath_hop.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultNetpathHop(ModelNormal): + @cached_property + def openapi_types(_): + return { + "hostname": (str,), + "ip_address": (str,), + "reachable": (bool,), + "rtt": (float,), + "ttl": (int,), + } + attribute_map = { + "hostname": "hostname", + "ip_address": "ip_address", + "reachable": "reachable", + "rtt": "rtt", + "ttl": "ttl", + } + + def __init__(self_, hostname: Union[str, UnsetType]=unset, ip_address: Union[str, UnsetType]=unset, reachable: Union[bool, UnsetType]=unset, rtt: Union[float, UnsetType]=unset, ttl: Union[int, UnsetType]=unset, **kwargs): + """ + A single hop along a network path. + + :param hostname: Resolved hostname of the hop. + :type hostname: str, optional + + :param ip_address: IP address of the hop. + :type ip_address: str, optional + + :param reachable: Whether this hop was reachable. + :type reachable: bool, optional + + :param rtt: Round-trip time to this hop in milliseconds. + :type rtt: float, optional + + :param ttl: Time-to-live value of the probe packet at this hop. + :type ttl: int, optional + """ + if hostname is not unset: + kwargs["hostname"] = hostname + if ip_address is not unset: + kwargs["ip_address"] = ip_address + if reachable is not unset: + kwargs["reachable"] = reachable + if rtt is not unset: + kwargs["rtt"] = rtt + if ttl is not unset: + kwargs["ttl"] = ttl + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_netstats.py b/datadog_api_client/v2/model/synthetics_test_result_netstats.py new file mode 100644 index 0000000000..943fd0fb0d --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_netstats.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_netstats_hops import SyntheticsTestResultNetstatsHops + from datadog_api_client.v2.model.synthetics_test_result_network_latency import SyntheticsTestResultNetworkLatency + +class SyntheticsTestResultNetstats(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_netstats_hops import SyntheticsTestResultNetstatsHops + from datadog_api_client.v2.model.synthetics_test_result_network_latency import SyntheticsTestResultNetworkLatency + return { + "hops": (SyntheticsTestResultNetstatsHops,), + "jitter": (float,), + "latency": (SyntheticsTestResultNetworkLatency,), + "packet_loss_percentage": (float,), + "packets_received": (int,), + "packets_sent": (int,), + } + attribute_map = { + "hops": "hops", + "jitter": "jitter", + "latency": "latency", + "packet_loss_percentage": "packet_loss_percentage", + "packets_received": "packets_received", + "packets_sent": "packets_sent", + } + + def __init__(self_, hops: Union[SyntheticsTestResultNetstatsHops, UnsetType]=unset, jitter: Union[float, UnsetType]=unset, latency: Union[SyntheticsTestResultNetworkLatency, UnsetType]=unset, packet_loss_percentage: Union[float, UnsetType]=unset, packets_received: Union[int, UnsetType]=unset, packets_sent: Union[int, UnsetType]=unset, **kwargs): + """ + Aggregated network statistics from the test execution. + + :param hops: Statistics about the number of hops for a network test. + :type hops: SyntheticsTestResultNetstatsHops, optional + + :param jitter: Network jitter in milliseconds. + :type jitter: float, optional + + :param latency: Latency statistics for a network probe. + :type latency: SyntheticsTestResultNetworkLatency, optional + + :param packet_loss_percentage: Percentage of probe packets lost. + :type packet_loss_percentage: float, optional + + :param packets_received: Number of probe packets received. + :type packets_received: int, optional + + :param packets_sent: Number of probe packets sent. + :type packets_sent: int, optional + """ + if hops is not unset: + kwargs["hops"] = hops + if jitter is not unset: + kwargs["jitter"] = jitter + if latency is not unset: + kwargs["latency"] = latency + if packet_loss_percentage is not unset: + kwargs["packet_loss_percentage"] = packet_loss_percentage + if packets_received is not unset: + kwargs["packets_received"] = packets_received + if packets_sent is not unset: + kwargs["packets_sent"] = packets_sent + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_netstats_hops.py b/datadog_api_client/v2/model/synthetics_test_result_netstats_hops.py new file mode 100644 index 0000000000..4241460c1b --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_netstats_hops.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultNetstatsHops(ModelNormal): + @cached_property + def openapi_types(_): + return { + "avg": (float,), + "max": (int,), + "min": (int,), + } + attribute_map = { + "avg": "avg", + "max": "max", + "min": "min", + } + + def __init__(self_, avg: Union[float, UnsetType]=unset, max: Union[int, UnsetType]=unset, min: Union[int, UnsetType]=unset, **kwargs): + """ + Statistics about the number of hops for a network test. + + :param avg: Average number of hops. + :type avg: float, optional + + :param max: Maximum number of hops. + :type max: int, optional + + :param min: Minimum number of hops. + :type min: int, optional + """ + if avg is not unset: + kwargs["avg"] = avg + if max is not unset: + kwargs["max"] = max + if min is not unset: + kwargs["min"] = min + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_network_latency.py b/datadog_api_client/v2/model/synthetics_test_result_network_latency.py new file mode 100644 index 0000000000..294ddf9ee9 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_network_latency.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultNetworkLatency(ModelNormal): + @cached_property + def openapi_types(_): + return { + "avg": (float,), + "max": (float,), + "min": (float,), + } + attribute_map = { + "avg": "avg", + "max": "max", + "min": "min", + } + + def __init__(self_, avg: Union[float, UnsetType]=unset, max: Union[float, UnsetType]=unset, min: Union[float, UnsetType]=unset, **kwargs): + """ + Latency statistics for a network probe. + + :param avg: Average latency in milliseconds. + :type avg: float, optional + + :param max: Maximum latency in milliseconds. + :type max: float, optional + + :param min: Minimum latency in milliseconds. + :type min: float, optional + """ + if avg is not unset: + kwargs["avg"] = avg + if max is not unset: + kwargs["max"] = max + if min is not unset: + kwargs["min"] = min + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_ocsp_certificate.py b/datadog_api_client/v2/model/synthetics_test_result_ocsp_certificate.py new file mode 100644 index 0000000000..ded667a169 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_ocsp_certificate.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultOCSPCertificate(ModelNormal): + @cached_property + def openapi_types(_): + return { + "revocation_reason": (str,), + "revocation_time": (int,), + "serial_number": (str,), + } + attribute_map = { + "revocation_reason": "revocation_reason", + "revocation_time": "revocation_time", + "serial_number": "serial_number", + } + + def __init__(self_, revocation_reason: Union[str, UnsetType]=unset, revocation_time: Union[int, UnsetType]=unset, serial_number: Union[str, UnsetType]=unset, **kwargs): + """ + Certificate details returned in an OCSP response. + + :param revocation_reason: Reason code for the revocation, when applicable. + :type revocation_reason: str, optional + + :param revocation_time: Unix timestamp (ms) of the revocation. + :type revocation_time: int, optional + + :param serial_number: Serial number of the certificate. + :type serial_number: str, optional + """ + if revocation_reason is not unset: + kwargs["revocation_reason"] = revocation_reason + if revocation_time is not unset: + kwargs["revocation_time"] = revocation_time + if serial_number is not unset: + kwargs["serial_number"] = serial_number + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_ocsp_response.py b/datadog_api_client/v2/model/synthetics_test_result_ocsp_response.py new file mode 100644 index 0000000000..e6a5ce9522 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_ocsp_response.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_ocsp_certificate import SyntheticsTestResultOCSPCertificate + from datadog_api_client.v2.model.synthetics_test_result_ocsp_updates import SyntheticsTestResultOCSPUpdates + +class SyntheticsTestResultOCSPResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_ocsp_certificate import SyntheticsTestResultOCSPCertificate + from datadog_api_client.v2.model.synthetics_test_result_ocsp_updates import SyntheticsTestResultOCSPUpdates + return { + "certificate": (SyntheticsTestResultOCSPCertificate,), + "status": (str,), + "updates": (SyntheticsTestResultOCSPUpdates,), + } + attribute_map = { + "certificate": "certificate", + "status": "status", + "updates": "updates", + } + + def __init__(self_, certificate: Union[SyntheticsTestResultOCSPCertificate, UnsetType]=unset, status: Union[str, UnsetType]=unset, updates: Union[SyntheticsTestResultOCSPUpdates, UnsetType]=unset, **kwargs): + """ + OCSP response received while validating a certificate. + + :param certificate: Certificate details returned in an OCSP response. + :type certificate: SyntheticsTestResultOCSPCertificate, optional + + :param status: OCSP response status (for example, ``good`` , ``revoked`` , ``unknown`` ). + :type status: str, optional + + :param updates: OCSP response update timestamps. + :type updates: SyntheticsTestResultOCSPUpdates, optional + """ + if certificate is not unset: + kwargs["certificate"] = certificate + if status is not unset: + kwargs["status"] = status + if updates is not unset: + kwargs["updates"] = updates + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_ocsp_updates.py b/datadog_api_client/v2/model/synthetics_test_result_ocsp_updates.py new file mode 100644 index 0000000000..f31154ac00 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_ocsp_updates.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultOCSPUpdates(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_update": (int,), + "produced_at": (int,), + "this_update": (int,), + } + attribute_map = { + "next_update": "next_update", + "produced_at": "produced_at", + "this_update": "this_update", + } + + def __init__(self_, next_update: Union[int, UnsetType]=unset, produced_at: Union[int, UnsetType]=unset, this_update: Union[int, UnsetType]=unset, **kwargs): + """ + OCSP response update timestamps. + + :param next_update: Unix timestamp (ms) of the next expected OCSP update. + :type next_update: int, optional + + :param produced_at: Unix timestamp (ms) of when the OCSP response was produced. + :type produced_at: int, optional + + :param this_update: Unix timestamp (ms) of this OCSP update. + :type this_update: int, optional + """ + if next_update is not unset: + kwargs["next_update"] = next_update + if produced_at is not unset: + kwargs["produced_at"] = produced_at + if this_update is not unset: + kwargs["this_update"] = this_update + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_parent_step.py b/datadog_api_client/v2/model/synthetics_test_result_parent_step.py new file mode 100644 index 0000000000..60dae18765 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_parent_step.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultParentStep(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, **kwargs): + """ + Reference to the parent step of a sub-step. + + :param id: Identifier of the parent step. + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_parent_test.py b/datadog_api_client/v2/model/synthetics_test_result_parent_test.py new file mode 100644 index 0000000000..9e1be7c741 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_parent_test.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultParentTest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, **kwargs): + """ + Reference to the parent test of a sub-step. + + :param id: Identifier of the parent test. + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_redirect.py b/datadog_api_client/v2/model/synthetics_test_result_redirect.py new file mode 100644 index 0000000000..fdc3d8b4c2 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_redirect.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultRedirect(ModelNormal): + @cached_property + def openapi_types(_): + return { + "location": (str,), + "status_code": (int,), + } + attribute_map = { + "location": "location", + "status_code": "status_code", + } + + def __init__(self_, location: Union[str, UnsetType]=unset, status_code: Union[int, UnsetType]=unset, **kwargs): + """ + A redirect hop encountered while performing the request. + + :param location: Target location of the redirect. + :type location: str, optional + + :param status_code: HTTP status code of the redirect response. + :type status_code: int, optional + """ + if location is not unset: + kwargs["location"] = location + if status_code is not unset: + kwargs["status_code"] = status_code + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_relationship_test.py b/datadog_api_client/v2/model/synthetics_test_result_relationship_test.py new file mode 100644 index 0000000000..52e754eed4 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_relationship_test.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_relationship_test_data import SyntheticsTestResultRelationshipTestData + +class SyntheticsTestResultRelationshipTest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_relationship_test_data import SyntheticsTestResultRelationshipTestData + return { + "data": (SyntheticsTestResultRelationshipTestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SyntheticsTestResultRelationshipTestData, UnsetType]=unset, **kwargs): + """ + Relationship to the Synthetic test. + + :param data: Data for the test relationship. + :type data: SyntheticsTestResultRelationshipTestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_relationship_test_data.py b/datadog_api_client/v2/model/synthetics_test_result_relationship_test_data.py new file mode 100644 index 0000000000..3cec724bdb --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_relationship_test_data.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultRelationshipTestData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Data for the test relationship. + + :param id: The public ID of the test. + :type id: str, optional + + :param type: Type of the related resource. + :type type: str, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_relationships.py b/datadog_api_client/v2/model/synthetics_test_result_relationships.py new file mode 100644 index 0000000000..f86d15d646 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_relationship_test import SyntheticsTestResultRelationshipTest + +class SyntheticsTestResultRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_relationship_test import SyntheticsTestResultRelationshipTest + return { + "test": (SyntheticsTestResultRelationshipTest,), + } + attribute_map = { + "test": "test", + } + + def __init__(self_, test: Union[SyntheticsTestResultRelationshipTest, UnsetType]=unset, **kwargs): + """ + Relationships for a Synthetic test result. + + :param test: Relationship to the Synthetic test. + :type test: SyntheticsTestResultRelationshipTest, optional + """ + if test is not unset: + kwargs["test"] = test + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_request_info.py b/datadog_api_client/v2/model/synthetics_test_result_request_info.py new file mode 100644 index 0000000000..5213855f30 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_request_info.py @@ -0,0 +1,189 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_file_ref import SyntheticsTestResultFileRef + +class SyntheticsTestResultRequestInfo(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_file_ref import SyntheticsTestResultFileRef + return { + "allow_insecure": (bool,), + "body": (str,), + "call_type": (str,), + "destination_service": (str,), + "dns_server": (str,), + "dns_server_port": (int,), + "e2e_queries": (int,), + "files": ([SyntheticsTestResultFileRef],), + "headers": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "host": (str,), + "max_ttl": (int,), + "message": (str,), + "method": (str,), + "no_saving_response_body": (bool,), + "port": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "service": (str,), + "source_service": (str,), + "timeout": (int,), + "tool_name": (str,), + "traceroute_queries": (int,), + "url": (str,), + } + attribute_map = { + "allow_insecure": "allow_insecure", + "body": "body", + "call_type": "call_type", + "destination_service": "destination_service", + "dns_server": "dns_server", + "dns_server_port": "dns_server_port", + "e2e_queries": "e2e_queries", + "files": "files", + "headers": "headers", + "host": "host", + "max_ttl": "max_ttl", + "message": "message", + "method": "method", + "no_saving_response_body": "no_saving_response_body", + "port": "port", + "service": "service", + "source_service": "source_service", + "timeout": "timeout", + "tool_name": "tool_name", + "traceroute_queries": "traceroute_queries", + "url": "url", + } + + def __init__(self_, allow_insecure: Union[bool, UnsetType]=unset, body: Union[str, UnsetType]=unset, call_type: Union[str, UnsetType]=unset, destination_service: Union[str, UnsetType]=unset, dns_server: Union[str, UnsetType]=unset, dns_server_port: Union[int, UnsetType]=unset, e2e_queries: Union[int, UnsetType]=unset, files: Union[List[SyntheticsTestResultFileRef], UnsetType]=unset, headers: Union[Dict[str, Any], UnsetType]=unset, host: Union[str, UnsetType]=unset, max_ttl: Union[int, UnsetType]=unset, message: Union[str, UnsetType]=unset, method: Union[str, UnsetType]=unset, no_saving_response_body: Union[bool, UnsetType]=unset, port: Union[Any, UnsetType]=unset, service: Union[str, UnsetType]=unset, source_service: Union[str, UnsetType]=unset, timeout: Union[int, UnsetType]=unset, tool_name: Union[str, UnsetType]=unset, traceroute_queries: Union[int, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Details of the outgoing request made during the test execution. + + :param allow_insecure: Whether insecure certificates are allowed for this request. + :type allow_insecure: bool, optional + + :param body: Body sent with the request. + :type body: str, optional + + :param call_type: gRPC call type (for example, ``unary`` , ``healthCheck`` , or ``reflection`` ). + :type call_type: str, optional + + :param destination_service: Destination service for a Network Path test. + :type destination_service: str, optional + + :param dns_server: DNS server used to resolve the target host. + :type dns_server: str, optional + + :param dns_server_port: Port of the DNS server used for resolution. + :type dns_server_port: int, optional + + :param e2e_queries: Number of end-to-end probe queries issued. + :type e2e_queries: int, optional + + :param files: Files attached to the request. + :type files: [SyntheticsTestResultFileRef], optional + + :param headers: Headers sent with the request. + :type headers: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param host: Host targeted by the request. + :type host: str, optional + + :param max_ttl: Maximum TTL for network probe packets. + :type max_ttl: int, optional + + :param message: Message sent with the request (for WebSocket/TCP/UDP tests). + :type message: str, optional + + :param method: HTTP method used for the request. + :type method: str, optional + + :param no_saving_response_body: Whether the response body was not saved. + :type no_saving_response_body: bool, optional + + :param port: Port targeted by the request. Can be a number or a string variable reference. + :type port: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param service: Service name targeted by the request (for gRPC tests). + :type service: str, optional + + :param source_service: Source service for a Network Path test. + :type source_service: str, optional + + :param timeout: Request timeout in milliseconds. + :type timeout: int, optional + + :param tool_name: Name of the MCP tool called (MCP tests only). + :type tool_name: str, optional + + :param traceroute_queries: Number of traceroute probe queries issued. + :type traceroute_queries: int, optional + + :param url: URL targeted by the request. + :type url: str, optional + """ + if allow_insecure is not unset: + kwargs["allow_insecure"] = allow_insecure + if body is not unset: + kwargs["body"] = body + if call_type is not unset: + kwargs["call_type"] = call_type + if destination_service is not unset: + kwargs["destination_service"] = destination_service + if dns_server is not unset: + kwargs["dns_server"] = dns_server + if dns_server_port is not unset: + kwargs["dns_server_port"] = dns_server_port + if e2e_queries is not unset: + kwargs["e2e_queries"] = e2e_queries + if files is not unset: + kwargs["files"] = files + if headers is not unset: + kwargs["headers"] = headers + if host is not unset: + kwargs["host"] = host + if max_ttl is not unset: + kwargs["max_ttl"] = max_ttl + if message is not unset: + kwargs["message"] = message + if method is not unset: + kwargs["method"] = method + if no_saving_response_body is not unset: + kwargs["no_saving_response_body"] = no_saving_response_body + if port is not unset: + kwargs["port"] = port + if service is not unset: + kwargs["service"] = service + if source_service is not unset: + kwargs["source_service"] = source_service + if timeout is not unset: + kwargs["timeout"] = timeout + if tool_name is not unset: + kwargs["tool_name"] = tool_name + if traceroute_queries is not unset: + kwargs["traceroute_queries"] = traceroute_queries + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_response.py b/datadog_api_client/v2/model/synthetics_test_result_response.py new file mode 100644 index 0000000000..a6e278fb6b --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_data import SyntheticsTestResultData + from datadog_api_client.v2.model.synthetics_test_result_included_item import SyntheticsTestResultIncludedItem + +class SyntheticsTestResultResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_data import SyntheticsTestResultData + from datadog_api_client.v2.model.synthetics_test_result_included_item import SyntheticsTestResultIncludedItem + return { + "data": (SyntheticsTestResultData,), + "included": ([SyntheticsTestResultIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[SyntheticsTestResultData, UnsetType]=unset, included: Union[List[SyntheticsTestResultIncludedItem], UnsetType]=unset, **kwargs): + """ + Response object for a Synthetic test result. + + :param data: Wrapper object for a Synthetic test result. + :type data: SyntheticsTestResultData, optional + + :param included: Array of included related resources, such as the test definition. + :type included: [SyntheticsTestResultIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_response_info.py b/datadog_api_client/v2/model/synthetics_test_result_response_info.py new file mode 100644 index 0000000000..4587ec4eb4 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_response_info.py @@ -0,0 +1,176 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_cdn_provider_info import SyntheticsTestResultCdnProviderInfo + from datadog_api_client.v2.model.synthetics_test_result_web_socket_close import SyntheticsTestResultWebSocketClose + from datadog_api_client.v2.model.synthetics_test_result_health_check import SyntheticsTestResultHealthCheck + from datadog_api_client.v2.model.synthetics_test_result_dns_record import SyntheticsTestResultDnsRecord + from datadog_api_client.v2.model.synthetics_test_result_redirect import SyntheticsTestResultRedirect + +class SyntheticsTestResultResponseInfo(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_cdn_provider_info import SyntheticsTestResultCdnProviderInfo + from datadog_api_client.v2.model.synthetics_test_result_web_socket_close import SyntheticsTestResultWebSocketClose + from datadog_api_client.v2.model.synthetics_test_result_health_check import SyntheticsTestResultHealthCheck + from datadog_api_client.v2.model.synthetics_test_result_dns_record import SyntheticsTestResultDnsRecord + from datadog_api_client.v2.model.synthetics_test_result_redirect import SyntheticsTestResultRedirect + return { + "body": (str,), + "body_compressed": (str,), + "body_hashes": (str,), + "body_size": (int,), + "cache_headers": ({str: (str,)},), + "cdn": (SyntheticsTestResultCdnProviderInfo,), + "close": (SyntheticsTestResultWebSocketClose,), + "compressed_message": (str,), + "headers": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "healthcheck": (SyntheticsTestResultHealthCheck,), + "http_version": (str,), + "is_body_truncated": (bool,), + "is_message_truncated": (bool,), + "message": (str,), + "metadata": ({str: (str,)},), + "records": ([SyntheticsTestResultDnsRecord],), + "redirects": ([SyntheticsTestResultRedirect],), + "status_code": (int,), + } + attribute_map = { + "body": "body", + "body_compressed": "body_compressed", + "body_hashes": "body_hashes", + "body_size": "body_size", + "cache_headers": "cache_headers", + "cdn": "cdn", + "close": "close", + "compressed_message": "compressed_message", + "headers": "headers", + "healthcheck": "healthcheck", + "http_version": "http_version", + "is_body_truncated": "is_body_truncated", + "is_message_truncated": "is_message_truncated", + "message": "message", + "metadata": "metadata", + "records": "records", + "redirects": "redirects", + "status_code": "status_code", + } + + def __init__(self_, body: Union[str, UnsetType]=unset, body_compressed: Union[str, UnsetType]=unset, body_hashes: Union[str, UnsetType]=unset, body_size: Union[int, UnsetType]=unset, cache_headers: Union[Dict[str, str], UnsetType]=unset, cdn: Union[SyntheticsTestResultCdnProviderInfo, UnsetType]=unset, close: Union[SyntheticsTestResultWebSocketClose, UnsetType]=unset, compressed_message: Union[str, UnsetType]=unset, headers: Union[Dict[str, Any], UnsetType]=unset, healthcheck: Union[SyntheticsTestResultHealthCheck, UnsetType]=unset, http_version: Union[str, UnsetType]=unset, is_body_truncated: Union[bool, UnsetType]=unset, is_message_truncated: Union[bool, UnsetType]=unset, message: Union[str, UnsetType]=unset, metadata: Union[Dict[str, str], UnsetType]=unset, records: Union[List[SyntheticsTestResultDnsRecord], UnsetType]=unset, redirects: Union[List[SyntheticsTestResultRedirect], UnsetType]=unset, status_code: Union[int, UnsetType]=unset, **kwargs): + """ + Details of the response received during the test execution. + + :param body: Body of the response. + :type body: str, optional + + :param body_compressed: Compressed representation of the response body. + :type body_compressed: str, optional + + :param body_hashes: Hashes computed over the response body. + :type body_hashes: str, optional + + :param body_size: Size of the response body in bytes. + :type body_size: int, optional + + :param cache_headers: Cache-related response headers. + :type cache_headers: {str: (str,)}, optional + + :param cdn: CDN provider details inferred from response headers. + :type cdn: SyntheticsTestResultCdnProviderInfo, optional + + :param close: WebSocket close frame information for WebSocket test responses. + :type close: SyntheticsTestResultWebSocketClose, optional + + :param compressed_message: Compressed representation of the response message. + :type compressed_message: str, optional + + :param headers: Response headers. + :type headers: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param healthcheck: Health check information returned from a gRPC health check call. + :type healthcheck: SyntheticsTestResultHealthCheck, optional + + :param http_version: HTTP version of the response. + :type http_version: str, optional + + :param is_body_truncated: Whether the response body was truncated. + :type is_body_truncated: bool, optional + + :param is_message_truncated: Whether the response message was truncated. + :type is_message_truncated: bool, optional + + :param message: Message received in the response (for WebSocket/TCP/UDP tests). + :type message: str, optional + + :param metadata: Additional metadata returned with the response. + :type metadata: {str: (str,)}, optional + + :param records: DNS records returned in the response (DNS tests only). + :type records: [SyntheticsTestResultDnsRecord], optional + + :param redirects: Redirect hops encountered while performing the request. + :type redirects: [SyntheticsTestResultRedirect], optional + + :param status_code: HTTP status code of the response. + :type status_code: int, optional + """ + if body is not unset: + kwargs["body"] = body + if body_compressed is not unset: + kwargs["body_compressed"] = body_compressed + if body_hashes is not unset: + kwargs["body_hashes"] = body_hashes + if body_size is not unset: + kwargs["body_size"] = body_size + if cache_headers is not unset: + kwargs["cache_headers"] = cache_headers + if cdn is not unset: + kwargs["cdn"] = cdn + if close is not unset: + kwargs["close"] = close + if compressed_message is not unset: + kwargs["compressed_message"] = compressed_message + if headers is not unset: + kwargs["headers"] = headers + if healthcheck is not unset: + kwargs["healthcheck"] = healthcheck + if http_version is not unset: + kwargs["http_version"] = http_version + if is_body_truncated is not unset: + kwargs["is_body_truncated"] = is_body_truncated + if is_message_truncated is not unset: + kwargs["is_message_truncated"] = is_message_truncated + if message is not unset: + kwargs["message"] = message + if metadata is not unset: + kwargs["metadata"] = metadata + if records is not unset: + kwargs["records"] = records + if redirects is not unset: + kwargs["redirects"] = redirects + if status_code is not unset: + kwargs["status_code"] = status_code + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_router.py b/datadog_api_client/v2/model/synthetics_test_result_router.py new file mode 100644 index 0000000000..fdba969906 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_router.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultRouter(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ip": (str,), + "resolved_host": (str,), + } + attribute_map = { + "ip": "ip", + "resolved_host": "resolved_host", + } + + def __init__(self_, ip: Union[str, UnsetType]=unset, resolved_host: Union[str, UnsetType]=unset, **kwargs): + """ + A router along the traceroute path. + + :param ip: IP address of the router. + :type ip: str, optional + + :param resolved_host: Resolved hostname of the router. + :type resolved_host: str, optional + """ + if ip is not unset: + kwargs["ip"] = ip + if resolved_host is not unset: + kwargs["resolved_host"] = resolved_host + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_rum_context.py b/datadog_api_client/v2/model/synthetics_test_result_rum_context.py new file mode 100644 index 0000000000..6407939f8e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_rum_context.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultRumContext(ModelNormal): + @cached_property + def openapi_types(_): + return { + "application_id": (str,), + "session_id": (str,), + "view_id": (str,), + } + attribute_map = { + "application_id": "application_id", + "session_id": "session_id", + "view_id": "view_id", + } + + def __init__(self_, application_id: Union[str, UnsetType]=unset, session_id: Union[str, UnsetType]=unset, view_id: Union[str, UnsetType]=unset, **kwargs): + """ + RUM application context associated with a step or sub-test. + + :param application_id: RUM application identifier. + :type application_id: str, optional + + :param session_id: RUM session identifier. + :type session_id: str, optional + + :param view_id: RUM view identifier. + :type view_id: str, optional + """ + if application_id is not unset: + kwargs["application_id"] = application_id + if session_id is not unset: + kwargs["session_id"] = session_id + if view_id is not unset: + kwargs["view_id"] = view_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_run_type.py b/datadog_api_client/v2/model/synthetics_test_result_run_type.py new file mode 100644 index 0000000000..3c33a48203 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_run_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestResultRunType(ModelSimple): + """ + The type of run for a Synthetic test result. + + :param value: Must be one of ["scheduled", "fast", "ci", "triggered"]. + :type value: str + """ + + allowed_values = { + "scheduled", + "fast", + "ci", + "triggered", + } + SCHEDULED: ClassVar["SyntheticsTestResultRunType"] + FAST: ClassVar["SyntheticsTestResultRunType"] + CI: ClassVar["SyntheticsTestResultRunType"] + TRIGGERED: ClassVar["SyntheticsTestResultRunType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestResultRunType.SCHEDULED = SyntheticsTestResultRunType("scheduled") +SyntheticsTestResultRunType.FAST = SyntheticsTestResultRunType("fast") +SyntheticsTestResultRunType.CI = SyntheticsTestResultRunType("ci") +SyntheticsTestResultRunType.TRIGGERED = SyntheticsTestResultRunType("triggered") diff --git a/datadog_api_client/v2/model/synthetics_test_result_status.py b/datadog_api_client/v2/model/synthetics_test_result_status.py new file mode 100644 index 0000000000..0aafa6c97f --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestResultStatus(ModelSimple): + """ + Status of a Synthetic test result. + + :param value: Must be one of ["passed", "failed", "no_data"]. + :type value: str + """ + + allowed_values = { + "passed", + "failed", + "no_data", + } + PASSED: ClassVar["SyntheticsTestResultStatus"] + FAILED: ClassVar["SyntheticsTestResultStatus"] + NO_DATA: ClassVar["SyntheticsTestResultStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestResultStatus.PASSED = SyntheticsTestResultStatus("passed") +SyntheticsTestResultStatus.FAILED = SyntheticsTestResultStatus("failed") +SyntheticsTestResultStatus.NO_DATA = SyntheticsTestResultStatus("no_data") diff --git a/datadog_api_client/v2/model/synthetics_test_result_step.py b/datadog_api_client/v2/model/synthetics_test_result_step.py new file mode 100644 index 0000000000..5583e463c4 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_step.py @@ -0,0 +1,377 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_step_assertion_result import SyntheticsTestResultStepAssertionResult + from datadog_api_client.v2.model.synthetics_test_result_assertion_result import SyntheticsTestResultAssertionResult + from datadog_api_client.v2.model.synthetics_test_result_bounds import SyntheticsTestResultBounds + from datadog_api_client.v2.model.synthetics_test_result_browser_error import SyntheticsTestResultBrowserError + from datadog_api_client.v2.model.synthetics_test_result_bucket_keys import SyntheticsTestResultBucketKeys + from datadog_api_client.v2.model.synthetics_test_result_cdn_resource import SyntheticsTestResultCdnResource + from datadog_api_client.v2.model.synthetics_test_result_step_element_updates import SyntheticsTestResultStepElementUpdates + from datadog_api_client.v2.model.synthetics_test_result_variable import SyntheticsTestResultVariable + from datadog_api_client.v2.model.synthetics_test_result_failure import SyntheticsTestResultFailure + from datadog_api_client.v2.model.synthetics_test_result_request_info import SyntheticsTestResultRequestInfo + from datadog_api_client.v2.model.synthetics_test_result_response_info import SyntheticsTestResultResponseInfo + from datadog_api_client.v2.model.synthetics_test_result_rum_context import SyntheticsTestResultRumContext + from datadog_api_client.v2.model.synthetics_test_result_sub_step import SyntheticsTestResultSubStep + from datadog_api_client.v2.model.synthetics_test_result_sub_test import SyntheticsTestResultSubTest + from datadog_api_client.v2.model.synthetics_test_result_tab import SyntheticsTestResultTab + from datadog_api_client.v2.model.synthetics_test_result_variables import SyntheticsTestResultVariables + from datadog_api_client.v2.model.synthetics_test_result_vitals_metrics import SyntheticsTestResultVitalsMetrics + from datadog_api_client.v2.model.synthetics_test_result_warning import SyntheticsTestResultWarning + +class SyntheticsTestResultStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_step_assertion_result import SyntheticsTestResultStepAssertionResult + from datadog_api_client.v2.model.synthetics_test_result_assertion_result import SyntheticsTestResultAssertionResult + from datadog_api_client.v2.model.synthetics_test_result_bounds import SyntheticsTestResultBounds + from datadog_api_client.v2.model.synthetics_test_result_browser_error import SyntheticsTestResultBrowserError + from datadog_api_client.v2.model.synthetics_test_result_bucket_keys import SyntheticsTestResultBucketKeys + from datadog_api_client.v2.model.synthetics_test_result_cdn_resource import SyntheticsTestResultCdnResource + from datadog_api_client.v2.model.synthetics_test_result_step_element_updates import SyntheticsTestResultStepElementUpdates + from datadog_api_client.v2.model.synthetics_test_result_variable import SyntheticsTestResultVariable + from datadog_api_client.v2.model.synthetics_test_result_failure import SyntheticsTestResultFailure + from datadog_api_client.v2.model.synthetics_test_result_request_info import SyntheticsTestResultRequestInfo + from datadog_api_client.v2.model.synthetics_test_result_response_info import SyntheticsTestResultResponseInfo + from datadog_api_client.v2.model.synthetics_test_result_rum_context import SyntheticsTestResultRumContext + from datadog_api_client.v2.model.synthetics_test_result_sub_step import SyntheticsTestResultSubStep + from datadog_api_client.v2.model.synthetics_test_result_sub_test import SyntheticsTestResultSubTest + from datadog_api_client.v2.model.synthetics_test_result_tab import SyntheticsTestResultTab + from datadog_api_client.v2.model.synthetics_test_result_variables import SyntheticsTestResultVariables + from datadog_api_client.v2.model.synthetics_test_result_vitals_metrics import SyntheticsTestResultVitalsMetrics + from datadog_api_client.v2.model.synthetics_test_result_warning import SyntheticsTestResultWarning + return { + "allow_failure": (bool,), + "api_test": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "assertion_result": (SyntheticsTestResultStepAssertionResult,), + "assertions": ([SyntheticsTestResultAssertionResult],), + "blocked_requests_urls": ([str],), + "bounds": (SyntheticsTestResultBounds,), + "browser_errors": ([SyntheticsTestResultBrowserError],), + "bucket_keys": (SyntheticsTestResultBucketKeys,), + "cdn_resources": ([SyntheticsTestResultCdnResource],), + "click_type": (str,), + "compressed_json_descriptor": (str,), + "config": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "description": (str,), + "duration": (float,), + "element_description": (str,), + "element_updates": (SyntheticsTestResultStepElementUpdates,), + "extracted_value": (SyntheticsTestResultVariable,), + "failure": (SyntheticsTestResultFailure,), + "http_results": ([SyntheticsTestResultAssertionResult],), + "id": (str,), + "is_critical": (bool,), + "javascript_custom_assertion_code": (bool,), + "locate_element_duration": (float,), + "name": (str,), + "request": (SyntheticsTestResultRequestInfo,), + "response": (SyntheticsTestResultResponseInfo,), + "retries": ([SyntheticsTestResultStep],), + "retry_count": (int,), + "rum_context": (SyntheticsTestResultRumContext,), + "started_at": (int,), + "status": (str,), + "sub_step": (SyntheticsTestResultSubStep,), + "sub_test": (SyntheticsTestResultSubTest,), + "subtype": (str,), + "tabs": ([SyntheticsTestResultTab],), + "timings": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "tunnel": (bool,), + "type": (str,), + "url": (str,), + "value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "variables": (SyntheticsTestResultVariables,), + "vitals_metrics": ([SyntheticsTestResultVitalsMetrics],), + "warnings": ([SyntheticsTestResultWarning],), + } + attribute_map = { + "allow_failure": "allow_failure", + "api_test": "api_test", + "assertion_result": "assertion_result", + "assertions": "assertions", + "blocked_requests_urls": "blocked_requests_urls", + "bounds": "bounds", + "browser_errors": "browser_errors", + "bucket_keys": "bucket_keys", + "cdn_resources": "cdn_resources", + "click_type": "click_type", + "compressed_json_descriptor": "compressed_json_descriptor", + "config": "config", + "description": "description", + "duration": "duration", + "element_description": "element_description", + "element_updates": "element_updates", + "extracted_value": "extracted_value", + "failure": "failure", + "http_results": "http_results", + "id": "id", + "is_critical": "is_critical", + "javascript_custom_assertion_code": "javascript_custom_assertion_code", + "locate_element_duration": "locate_element_duration", + "name": "name", + "request": "request", + "response": "response", + "retries": "retries", + "retry_count": "retry_count", + "rum_context": "rum_context", + "started_at": "started_at", + "status": "status", + "sub_step": "sub_step", + "sub_test": "sub_test", + "subtype": "subtype", + "tabs": "tabs", + "timings": "timings", + "tunnel": "tunnel", + "type": "type", + "url": "url", + "value": "value", + "variables": "variables", + "vitals_metrics": "vitals_metrics", + "warnings": "warnings", + } + + def __init__(self_, allow_failure: Union[bool, UnsetType]=unset, api_test: Union[Dict[str, Any], UnsetType]=unset, assertion_result: Union[SyntheticsTestResultStepAssertionResult, UnsetType]=unset, assertions: Union[List[SyntheticsTestResultAssertionResult], UnsetType]=unset, blocked_requests_urls: Union[List[str], UnsetType]=unset, bounds: Union[SyntheticsTestResultBounds, UnsetType]=unset, browser_errors: Union[List[SyntheticsTestResultBrowserError], UnsetType]=unset, bucket_keys: Union[SyntheticsTestResultBucketKeys, UnsetType]=unset, cdn_resources: Union[List[SyntheticsTestResultCdnResource], UnsetType]=unset, click_type: Union[str, UnsetType]=unset, compressed_json_descriptor: Union[str, UnsetType]=unset, config: Union[Dict[str, Any], UnsetType]=unset, description: Union[str, UnsetType]=unset, duration: Union[float, UnsetType]=unset, element_description: Union[str, UnsetType]=unset, element_updates: Union[SyntheticsTestResultStepElementUpdates, UnsetType]=unset, extracted_value: Union[SyntheticsTestResultVariable, UnsetType]=unset, failure: Union[SyntheticsTestResultFailure, UnsetType]=unset, http_results: Union[List[SyntheticsTestResultAssertionResult], UnsetType]=unset, id: Union[str, UnsetType]=unset, is_critical: Union[bool, UnsetType]=unset, javascript_custom_assertion_code: Union[bool, UnsetType]=unset, locate_element_duration: Union[float, UnsetType]=unset, name: Union[str, UnsetType]=unset, request: Union[SyntheticsTestResultRequestInfo, UnsetType]=unset, response: Union[SyntheticsTestResultResponseInfo, UnsetType]=unset, retries: Union[List[SyntheticsTestResultStep], UnsetType]=unset, retry_count: Union[int, UnsetType]=unset, rum_context: Union[SyntheticsTestResultRumContext, UnsetType]=unset, started_at: Union[int, UnsetType]=unset, status: Union[str, UnsetType]=unset, sub_step: Union[SyntheticsTestResultSubStep, UnsetType]=unset, sub_test: Union[SyntheticsTestResultSubTest, UnsetType]=unset, subtype: Union[str, UnsetType]=unset, tabs: Union[List[SyntheticsTestResultTab], UnsetType]=unset, timings: Union[Dict[str, Any], UnsetType]=unset, tunnel: Union[bool, UnsetType]=unset, type: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, value: Union[Any, UnsetType]=unset, variables: Union[SyntheticsTestResultVariables, UnsetType]=unset, vitals_metrics: Union[List[SyntheticsTestResultVitalsMetrics], UnsetType]=unset, warnings: Union[List[SyntheticsTestResultWarning], UnsetType]=unset, **kwargs): + """ + A step result from a browser, mobile, or multistep API test. + + :param allow_failure: Whether the test continues when this step fails. + :type allow_failure: bool, optional + + :param api_test: Inner API test definition for browser ``runApiTest`` steps. + :type api_test: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param assertion_result: Assertion result for a browser or mobile step. + :type assertion_result: SyntheticsTestResultStepAssertionResult, optional + + :param assertions: Assertion results produced by the step. + :type assertions: [SyntheticsTestResultAssertionResult], optional + + :param blocked_requests_urls: URLs of requests blocked during the step. + :type blocked_requests_urls: [str], optional + + :param bounds: Bounding box of an element on the page. + :type bounds: SyntheticsTestResultBounds, optional + + :param browser_errors: Browser errors captured during the step. + :type browser_errors: [SyntheticsTestResultBrowserError], optional + + :param bucket_keys: Storage bucket keys for artifacts produced during a step or test. + :type bucket_keys: SyntheticsTestResultBucketKeys, optional + + :param cdn_resources: CDN resources encountered during the step. + :type cdn_resources: [SyntheticsTestResultCdnResource], optional + + :param click_type: Click type performed in a browser step. + :type click_type: str, optional + + :param compressed_json_descriptor: Compressed JSON descriptor for the step (internal format). + :type compressed_json_descriptor: str, optional + + :param config: Request configuration executed by this step (API test steps). + :type config: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param description: Human-readable description of the step. + :type description: str, optional + + :param duration: Duration of the step in milliseconds. + :type duration: float, optional + + :param element_description: Description of the element interacted with by the step. + :type element_description: str, optional + + :param element_updates: Element locator updates produced during a step. + :type element_updates: SyntheticsTestResultStepElementUpdates, optional + + :param extracted_value: A variable used or extracted during a test. + :type extracted_value: SyntheticsTestResultVariable, optional + + :param failure: Details about the failure of a Synthetic test. + :type failure: SyntheticsTestResultFailure, optional + + :param http_results: HTTP results produced by an MCP step. + :type http_results: [SyntheticsTestResultAssertionResult], optional + + :param id: Identifier of the step. + :type id: str, optional + + :param is_critical: Whether this step is critical for the test outcome. + :type is_critical: bool, optional + + :param javascript_custom_assertion_code: Whether the step uses a custom JavaScript assertion. + :type javascript_custom_assertion_code: bool, optional + + :param locate_element_duration: Time taken to locate the element in milliseconds. + :type locate_element_duration: float, optional + + :param name: Name of the step. + :type name: str, optional + + :param request: Details of the outgoing request made during the test execution. + :type request: SyntheticsTestResultRequestInfo, optional + + :param response: Details of the response received during the test execution. + :type response: SyntheticsTestResultResponseInfo, optional + + :param retries: Retry results for the step. + :type retries: [SyntheticsTestResultStep], optional + + :param retry_count: Number of times this step was retried. + :type retry_count: int, optional + + :param rum_context: RUM application context associated with a step or sub-test. + :type rum_context: SyntheticsTestResultRumContext, optional + + :param started_at: Unix timestamp (ms) of when the step started. + :type started_at: int, optional + + :param status: Status of the step (for example, ``passed`` , ``failed`` ). + :type status: str, optional + + :param sub_step: Information about a sub-step in a nested test execution. + :type sub_step: SyntheticsTestResultSubStep, optional + + :param sub_test: Information about a sub-test played from a parent browser test. + :type sub_test: SyntheticsTestResultSubTest, optional + + :param subtype: Subtype of the step. + :type subtype: str, optional + + :param tabs: Browser tabs involved in the step. + :type tabs: [SyntheticsTestResultTab], optional + + :param timings: Timing breakdown of the step execution. + :type timings: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param tunnel: Whether the step was executed through a Synthetics tunnel. + :type tunnel: bool, optional + + :param type: Type of the step (for example, ``click`` , ``assertElementContent`` , ``runApiTest`` ). + :type type: str, optional + + :param url: URL associated with the step (for navigation steps). + :type url: str, optional + + :param value: Step value. Its type depends on the step type. + :type value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param variables: Variables captured during a test step. + :type variables: SyntheticsTestResultVariables, optional + + :param vitals_metrics: Web vitals metrics captured during the step. + :type vitals_metrics: [SyntheticsTestResultVitalsMetrics], optional + + :param warnings: Warnings emitted during the step. + :type warnings: [SyntheticsTestResultWarning], optional + """ + if allow_failure is not unset: + kwargs["allow_failure"] = allow_failure + if api_test is not unset: + kwargs["api_test"] = api_test + if assertion_result is not unset: + kwargs["assertion_result"] = assertion_result + if assertions is not unset: + kwargs["assertions"] = assertions + if blocked_requests_urls is not unset: + kwargs["blocked_requests_urls"] = blocked_requests_urls + if bounds is not unset: + kwargs["bounds"] = bounds + if browser_errors is not unset: + kwargs["browser_errors"] = browser_errors + if bucket_keys is not unset: + kwargs["bucket_keys"] = bucket_keys + if cdn_resources is not unset: + kwargs["cdn_resources"] = cdn_resources + if click_type is not unset: + kwargs["click_type"] = click_type + if compressed_json_descriptor is not unset: + kwargs["compressed_json_descriptor"] = compressed_json_descriptor + if config is not unset: + kwargs["config"] = config + if description is not unset: + kwargs["description"] = description + if duration is not unset: + kwargs["duration"] = duration + if element_description is not unset: + kwargs["element_description"] = element_description + if element_updates is not unset: + kwargs["element_updates"] = element_updates + if extracted_value is not unset: + kwargs["extracted_value"] = extracted_value + if failure is not unset: + kwargs["failure"] = failure + if http_results is not unset: + kwargs["http_results"] = http_results + if id is not unset: + kwargs["id"] = id + if is_critical is not unset: + kwargs["is_critical"] = is_critical + if javascript_custom_assertion_code is not unset: + kwargs["javascript_custom_assertion_code"] = javascript_custom_assertion_code + if locate_element_duration is not unset: + kwargs["locate_element_duration"] = locate_element_duration + if name is not unset: + kwargs["name"] = name + if request is not unset: + kwargs["request"] = request + if response is not unset: + kwargs["response"] = response + if retries is not unset: + kwargs["retries"] = retries + if retry_count is not unset: + kwargs["retry_count"] = retry_count + if rum_context is not unset: + kwargs["rum_context"] = rum_context + if started_at is not unset: + kwargs["started_at"] = started_at + if status is not unset: + kwargs["status"] = status + if sub_step is not unset: + kwargs["sub_step"] = sub_step + if sub_test is not unset: + kwargs["sub_test"] = sub_test + if subtype is not unset: + kwargs["subtype"] = subtype + if tabs is not unset: + kwargs["tabs"] = tabs + if timings is not unset: + kwargs["timings"] = timings + if tunnel is not unset: + kwargs["tunnel"] = tunnel + if type is not unset: + kwargs["type"] = type + if url is not unset: + kwargs["url"] = url + if value is not unset: + kwargs["value"] = value + if variables is not unset: + kwargs["variables"] = variables + if vitals_metrics is not unset: + kwargs["vitals_metrics"] = vitals_metrics + if warnings is not unset: + kwargs["warnings"] = warnings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_step_assertion_result.py b/datadog_api_client/v2/model/synthetics_test_result_step_assertion_result.py new file mode 100644 index 0000000000..258218f57c --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_step_assertion_result.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultStepAssertionResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "actual": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "check_type": (str,), + "expected": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "has_secure_variables": (bool,), + } + attribute_map = { + "actual": "actual", + "check_type": "check_type", + "expected": "expected", + "has_secure_variables": "has_secure_variables", + } + + def __init__(self_, actual: Union[Any, UnsetType]=unset, check_type: Union[str, UnsetType]=unset, expected: Union[Any, UnsetType]=unset, has_secure_variables: Union[bool, UnsetType]=unset, **kwargs): + """ + Assertion result for a browser or mobile step. + + :param actual: Actual value observed during the step assertion. Its type depends on the check type. + :type actual: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param check_type: Type of the step assertion check. + :type check_type: str, optional + + :param expected: Expected value for the step assertion. Its type depends on the check type. + :type expected: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param has_secure_variables: Whether the assertion involves secure variables. + :type has_secure_variables: bool, optional + """ + if actual is not unset: + kwargs["actual"] = actual + if check_type is not unset: + kwargs["check_type"] = check_type + if expected is not unset: + kwargs["expected"] = expected + if has_secure_variables is not unset: + kwargs["has_secure_variables"] = has_secure_variables + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_step_element_updates.py b/datadog_api_client/v2/model/synthetics_test_result_step_element_updates.py new file mode 100644 index 0000000000..f4f4367efa --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_step_element_updates.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultStepElementUpdates(ModelNormal): + @cached_property + def openapi_types(_): + return { + "multi_locator": ({str: (str,)},), + "target_outer_html": (str,), + "version": (int,), + } + attribute_map = { + "multi_locator": "multi_locator", + "target_outer_html": "target_outer_html", + "version": "version", + } + + def __init__(self_, multi_locator: Union[Dict[str, str], UnsetType]=unset, target_outer_html: Union[str, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Element locator updates produced during a step. + + :param multi_locator: Updated multi-locator definition. + :type multi_locator: {str: (str,)}, optional + + :param target_outer_html: Updated outer HTML of the targeted element. + :type target_outer_html: str, optional + + :param version: Version of the element locator definition. + :type version: int, optional + """ + if multi_locator is not unset: + kwargs["multi_locator"] = multi_locator + if target_outer_html is not unset: + kwargs["target_outer_html"] = target_outer_html + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_steps_info.py b/datadog_api_client/v2/model/synthetics_test_result_steps_info.py new file mode 100644 index 0000000000..2c05324db3 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_steps_info.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultStepsInfo(ModelNormal): + @cached_property + def openapi_types(_): + return { + "completed": (int,), + "errors": (int,), + "total": (int,), + } + attribute_map = { + "completed": "completed", + "errors": "errors", + "total": "total", + } + + def __init__(self_, completed: Union[int, UnsetType]=unset, errors: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, **kwargs): + """ + Step execution summary for a Synthetic test result. + + :param completed: Number of completed steps. + :type completed: int, optional + + :param errors: Number of steps with errors. + :type errors: int, optional + + :param total: Total number of steps. + :type total: int, optional + """ + if completed is not unset: + kwargs["completed"] = completed + if errors is not unset: + kwargs["errors"] = errors + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_sub_step.py b/datadog_api_client/v2/model/synthetics_test_result_sub_step.py new file mode 100644 index 0000000000..6b187d9bef --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_sub_step.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_parent_step import SyntheticsTestResultParentStep + from datadog_api_client.v2.model.synthetics_test_result_parent_test import SyntheticsTestResultParentTest + +class SyntheticsTestResultSubStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_parent_step import SyntheticsTestResultParentStep + from datadog_api_client.v2.model.synthetics_test_result_parent_test import SyntheticsTestResultParentTest + return { + "level": (int,), + "parent_step": (SyntheticsTestResultParentStep,), + "parent_test": (SyntheticsTestResultParentTest,), + } + attribute_map = { + "level": "level", + "parent_step": "parent_step", + "parent_test": "parent_test", + } + + def __init__(self_, level: Union[int, UnsetType]=unset, parent_step: Union[SyntheticsTestResultParentStep, UnsetType]=unset, parent_test: Union[SyntheticsTestResultParentTest, UnsetType]=unset, **kwargs): + """ + Information about a sub-step in a nested test execution. + + :param level: Depth of the sub-step in the execution tree. + :type level: int, optional + + :param parent_step: Reference to the parent step of a sub-step. + :type parent_step: SyntheticsTestResultParentStep, optional + + :param parent_test: Reference to the parent test of a sub-step. + :type parent_test: SyntheticsTestResultParentTest, optional + """ + if level is not unset: + kwargs["level"] = level + if parent_step is not unset: + kwargs["parent_step"] = parent_step + if parent_test is not unset: + kwargs["parent_test"] = parent_test + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_sub_test.py b/datadog_api_client/v2/model/synthetics_test_result_sub_test.py new file mode 100644 index 0000000000..c6ef8d583b --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_sub_test.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_rum_context import SyntheticsTestResultRumContext + +class SyntheticsTestResultSubTest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_rum_context import SyntheticsTestResultRumContext + return { + "id": (str,), + "playing_tab": (int,), + "rum_context": (SyntheticsTestResultRumContext,), + } + attribute_map = { + "id": "id", + "playing_tab": "playing_tab", + "rum_context": "rum_context", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, playing_tab: Union[int, UnsetType]=unset, rum_context: Union[SyntheticsTestResultRumContext, UnsetType]=unset, **kwargs): + """ + Information about a sub-test played from a parent browser test. + + :param id: Identifier of the sub-test. + :type id: str, optional + + :param playing_tab: Index of the browser tab playing the sub-test. + :type playing_tab: int, optional + + :param rum_context: RUM application context associated with a step or sub-test. + :type rum_context: SyntheticsTestResultRumContext, optional + """ + if id is not unset: + kwargs["id"] = id + if playing_tab is not unset: + kwargs["playing_tab"] = playing_tab + if rum_context is not unset: + kwargs["rum_context"] = rum_context + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_summary_attributes.py b/datadog_api_client/v2/model/synthetics_test_result_summary_attributes.py new file mode 100644 index 0000000000..4fa5c91b4d --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_summary_attributes.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_device import SyntheticsTestResultDevice + from datadog_api_client.v2.model.synthetics_test_result_execution_info import SyntheticsTestResultExecutionInfo + from datadog_api_client.v2.model.synthetics_test_result_location import SyntheticsTestResultLocation + from datadog_api_client.v2.model.synthetics_test_result_run_type import SyntheticsTestResultRunType + from datadog_api_client.v2.model.synthetics_test_result_status import SyntheticsTestResultStatus + from datadog_api_client.v2.model.synthetics_test_result_steps_info import SyntheticsTestResultStepsInfo + from datadog_api_client.v2.model.synthetics_test_sub_type import SyntheticsTestSubType + from datadog_api_client.v2.model.synthetics_test_type import SyntheticsTestType + +class SyntheticsTestResultSummaryAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_device import SyntheticsTestResultDevice + from datadog_api_client.v2.model.synthetics_test_result_execution_info import SyntheticsTestResultExecutionInfo + from datadog_api_client.v2.model.synthetics_test_result_location import SyntheticsTestResultLocation + from datadog_api_client.v2.model.synthetics_test_result_run_type import SyntheticsTestResultRunType + from datadog_api_client.v2.model.synthetics_test_result_status import SyntheticsTestResultStatus + from datadog_api_client.v2.model.synthetics_test_result_steps_info import SyntheticsTestResultStepsInfo + from datadog_api_client.v2.model.synthetics_test_sub_type import SyntheticsTestSubType + from datadog_api_client.v2.model.synthetics_test_type import SyntheticsTestType + return { + "device": (SyntheticsTestResultDevice,), + "execution_info": (SyntheticsTestResultExecutionInfo,), + "finished_at": (int,), + "location": (SyntheticsTestResultLocation,), + "run_type": (SyntheticsTestResultRunType,), + "started_at": (int,), + "status": (SyntheticsTestResultStatus,), + "steps_info": (SyntheticsTestResultStepsInfo,), + "test_sub_type": (SyntheticsTestSubType,), + "test_type": (SyntheticsTestType,), + } + attribute_map = { + "device": "device", + "execution_info": "execution_info", + "finished_at": "finished_at", + "location": "location", + "run_type": "run_type", + "started_at": "started_at", + "status": "status", + "steps_info": "steps_info", + "test_sub_type": "test_sub_type", + "test_type": "test_type", + } + + def __init__(self_, device: Union[SyntheticsTestResultDevice, UnsetType]=unset, execution_info: Union[SyntheticsTestResultExecutionInfo, UnsetType]=unset, finished_at: Union[int, UnsetType]=unset, location: Union[SyntheticsTestResultLocation, UnsetType]=unset, run_type: Union[SyntheticsTestResultRunType, UnsetType]=unset, started_at: Union[int, UnsetType]=unset, status: Union[SyntheticsTestResultStatus, UnsetType]=unset, steps_info: Union[SyntheticsTestResultStepsInfo, UnsetType]=unset, test_sub_type: Union[SyntheticsTestSubType, UnsetType]=unset, test_type: Union[SyntheticsTestType, UnsetType]=unset, **kwargs): + """ + Attributes of a Synthetic test result summary. + + :param device: Device information for the test result (browser and mobile tests). + :type device: SyntheticsTestResultDevice, optional + + :param execution_info: Execution details for a Synthetic test result. + :type execution_info: SyntheticsTestResultExecutionInfo, optional + + :param finished_at: Timestamp of when the test finished (in milliseconds). + :type finished_at: int, optional + + :param location: Location information for a Synthetic test result. + :type location: SyntheticsTestResultLocation, optional + + :param run_type: The type of run for a Synthetic test result. + :type run_type: SyntheticsTestResultRunType, optional + + :param started_at: Timestamp of when the test started (in milliseconds). + :type started_at: int, optional + + :param status: Status of a Synthetic test result. + :type status: SyntheticsTestResultStatus, optional + + :param steps_info: Step execution summary for a Synthetic test result. + :type steps_info: SyntheticsTestResultStepsInfo, optional + + :param test_sub_type: Subtype of the Synthetic test that produced this result. + :type test_sub_type: SyntheticsTestSubType, optional + + :param test_type: Type of the Synthetic test that produced this result. + :type test_type: SyntheticsTestType, optional + """ + if device is not unset: + kwargs["device"] = device + if execution_info is not unset: + kwargs["execution_info"] = execution_info + if finished_at is not unset: + kwargs["finished_at"] = finished_at + if location is not unset: + kwargs["location"] = location + if run_type is not unset: + kwargs["run_type"] = run_type + if started_at is not unset: + kwargs["started_at"] = started_at + if status is not unset: + kwargs["status"] = status + if steps_info is not unset: + kwargs["steps_info"] = steps_info + if test_sub_type is not unset: + kwargs["test_sub_type"] = test_sub_type + if test_type is not unset: + kwargs["test_type"] = test_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_summary_data.py b/datadog_api_client/v2/model/synthetics_test_result_summary_data.py new file mode 100644 index 0000000000..254c273696 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_summary_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_summary_attributes import SyntheticsTestResultSummaryAttributes + from datadog_api_client.v2.model.synthetics_test_result_relationships import SyntheticsTestResultRelationships + from datadog_api_client.v2.model.synthetics_test_result_summary_type import SyntheticsTestResultSummaryType + +class SyntheticsTestResultSummaryData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_summary_attributes import SyntheticsTestResultSummaryAttributes + from datadog_api_client.v2.model.synthetics_test_result_relationships import SyntheticsTestResultRelationships + from datadog_api_client.v2.model.synthetics_test_result_summary_type import SyntheticsTestResultSummaryType + return { + "attributes": (SyntheticsTestResultSummaryAttributes,), + "id": (str,), + "relationships": (SyntheticsTestResultRelationships,), + "type": (SyntheticsTestResultSummaryType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsTestResultSummaryAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[SyntheticsTestResultRelationships, UnsetType]=unset, type: Union[SyntheticsTestResultSummaryType, UnsetType]=unset, **kwargs): + """ + Wrapper object for a Synthetic test result summary. + + :param attributes: Attributes of a Synthetic test result summary. + :type attributes: SyntheticsTestResultSummaryAttributes, optional + + :param id: The result ID. + :type id: str, optional + + :param relationships: Relationships for a Synthetic test result. + :type relationships: SyntheticsTestResultRelationships, optional + + :param type: Type of the Synthetic test result summary resource, ``result_summary``. + :type type: SyntheticsTestResultSummaryType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_summary_type.py b/datadog_api_client/v2/model/synthetics_test_result_summary_type.py new file mode 100644 index 0000000000..f8fc660a9c --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_summary_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestResultSummaryType(ModelSimple): + """ + Type of the Synthetic test result summary resource, `result_summary`. + + :param value: If omitted defaults to "result_summary". Must be one of ["result_summary"]. + :type value: str + """ + + allowed_values = { + "result_summary", + } + RESULT_SUMMARY: ClassVar["SyntheticsTestResultSummaryType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestResultSummaryType.RESULT_SUMMARY = SyntheticsTestResultSummaryType("result_summary") diff --git a/datadog_api_client/v2/model/synthetics_test_result_tab.py b/datadog_api_client/v2/model/synthetics_test_result_tab.py new file mode 100644 index 0000000000..4ceb1845aa --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_tab.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultTab(ModelNormal): + @cached_property + def openapi_types(_): + return { + "focused": (bool,), + "title": (str,), + "url": (str,), + } + attribute_map = { + "focused": "focused", + "title": "title", + "url": "url", + } + + def __init__(self_, focused: Union[bool, UnsetType]=unset, title: Union[str, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Information about a browser tab involved in a step. + + :param focused: Whether the tab was focused during the step. + :type focused: bool, optional + + :param title: Title of the tab. + :type title: str, optional + + :param url: URL loaded in the tab. + :type url: str, optional + """ + if focused is not unset: + kwargs["focused"] = focused + if title is not unset: + kwargs["title"] = title + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_trace.py b/datadog_api_client/v2/model/synthetics_test_result_trace.py new file mode 100644 index 0000000000..69c7027bd8 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_trace.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultTrace(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "otel_id": (str,), + } + attribute_map = { + "id": "id", + "otel_id": "otel_id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, otel_id: Union[str, UnsetType]=unset, **kwargs): + """ + Trace identifiers associated with a Synthetic test result. + + :param id: Datadog APM trace identifier. + :type id: str, optional + + :param otel_id: OpenTelemetry trace identifier. + :type otel_id: str, optional + """ + if id is not unset: + kwargs["id"] = id + if otel_id is not unset: + kwargs["otel_id"] = otel_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_traceroute_hop.py b/datadog_api_client/v2/model/synthetics_test_result_traceroute_hop.py new file mode 100644 index 0000000000..2f2e69d0d2 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_traceroute_hop.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_network_latency import SyntheticsTestResultNetworkLatency + from datadog_api_client.v2.model.synthetics_test_result_router import SyntheticsTestResultRouter + +class SyntheticsTestResultTracerouteHop(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_network_latency import SyntheticsTestResultNetworkLatency + from datadog_api_client.v2.model.synthetics_test_result_router import SyntheticsTestResultRouter + return { + "host": (str,), + "latency": (SyntheticsTestResultNetworkLatency,), + "packet_loss_percentage": (float,), + "packet_size": (int,), + "packets_received": (int,), + "packets_sent": (int,), + "resolved_ip": (str,), + "routers": ([SyntheticsTestResultRouter],), + } + attribute_map = { + "host": "host", + "latency": "latency", + "packet_loss_percentage": "packet_loss_percentage", + "packet_size": "packet_size", + "packets_received": "packets_received", + "packets_sent": "packets_sent", + "resolved_ip": "resolved_ip", + "routers": "routers", + } + + def __init__(self_, host: Union[str, UnsetType]=unset, latency: Union[SyntheticsTestResultNetworkLatency, UnsetType]=unset, packet_loss_percentage: Union[float, UnsetType]=unset, packet_size: Union[int, UnsetType]=unset, packets_received: Union[int, UnsetType]=unset, packets_sent: Union[int, UnsetType]=unset, resolved_ip: Union[str, UnsetType]=unset, routers: Union[List[SyntheticsTestResultRouter], UnsetType]=unset, **kwargs): + """ + A network probe result, used for traceroute hops and ping summaries. + + :param host: Target hostname. + :type host: str, optional + + :param latency: Latency statistics for a network probe. + :type latency: SyntheticsTestResultNetworkLatency, optional + + :param packet_loss_percentage: Percentage of probe packets lost. + :type packet_loss_percentage: float, optional + + :param packet_size: Size of each probe packet in bytes. + :type packet_size: int, optional + + :param packets_received: Number of probe packets received. + :type packets_received: int, optional + + :param packets_sent: Number of probe packets sent. + :type packets_sent: int, optional + + :param resolved_ip: Resolved IP address for the target. + :type resolved_ip: str, optional + + :param routers: List of intermediate routers for the traceroute. + :type routers: [SyntheticsTestResultRouter], optional + """ + if host is not unset: + kwargs["host"] = host + if latency is not unset: + kwargs["latency"] = latency + if packet_loss_percentage is not unset: + kwargs["packet_loss_percentage"] = packet_loss_percentage + if packet_size is not unset: + kwargs["packet_size"] = packet_size + if packets_received is not unset: + kwargs["packets_received"] = packets_received + if packets_sent is not unset: + kwargs["packets_sent"] = packets_sent + if resolved_ip is not unset: + kwargs["resolved_ip"] = resolved_ip + if routers is not unset: + kwargs["routers"] = routers + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_turn.py b/datadog_api_client/v2/model/synthetics_test_result_turn.py new file mode 100644 index 0000000000..fe62e0b72d --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_turn.py @@ -0,0 +1,93 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_bucket_keys import SyntheticsTestResultBucketKeys + from datadog_api_client.v2.model.synthetics_test_result_turn_step import SyntheticsTestResultTurnStep + +class SyntheticsTestResultTurn(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_bucket_keys import SyntheticsTestResultBucketKeys + from datadog_api_client.v2.model.synthetics_test_result_turn_step import SyntheticsTestResultTurnStep + return { + "bucket_keys": (SyntheticsTestResultBucketKeys,), + "name": (str,), + "reasoning": (str,), + "status": (str,), + "steps": ([SyntheticsTestResultTurnStep],), + "turn_finished_at": (int,), + "turn_started_at": (int,), + } + attribute_map = { + "bucket_keys": "bucket_keys", + "name": "name", + "reasoning": "reasoning", + "status": "status", + "steps": "steps", + "turn_finished_at": "turn_finished_at", + "turn_started_at": "turn_started_at", + } + + def __init__(self_, bucket_keys: Union[SyntheticsTestResultBucketKeys, UnsetType]=unset, name: Union[str, UnsetType]=unset, reasoning: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, steps: Union[List[SyntheticsTestResultTurnStep], UnsetType]=unset, turn_finished_at: Union[int, UnsetType]=unset, turn_started_at: Union[int, UnsetType]=unset, **kwargs): + """ + A turn in a goal-based browser test, grouping steps and reasoning. + + :param bucket_keys: Storage bucket keys for artifacts produced during a step or test. + :type bucket_keys: SyntheticsTestResultBucketKeys, optional + + :param name: Name of the turn. + :type name: str, optional + + :param reasoning: Agent reasoning produced for this turn. + :type reasoning: str, optional + + :param status: Status of the turn (for example, ``passed`` , ``failed`` ). + :type status: str, optional + + :param steps: Steps executed during the turn. + :type steps: [SyntheticsTestResultTurnStep], optional + + :param turn_finished_at: Unix timestamp (ms) of when the turn finished. + :type turn_finished_at: int, optional + + :param turn_started_at: Unix timestamp (ms) of when the turn started. + :type turn_started_at: int, optional + """ + if bucket_keys is not unset: + kwargs["bucket_keys"] = bucket_keys + if name is not unset: + kwargs["name"] = name + if reasoning is not unset: + kwargs["reasoning"] = reasoning + if status is not unset: + kwargs["status"] = status + if steps is not unset: + kwargs["steps"] = steps + if turn_finished_at is not unset: + kwargs["turn_finished_at"] = turn_finished_at + if turn_started_at is not unset: + kwargs["turn_started_at"] = turn_started_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_turn_step.py b/datadog_api_client/v2/model/synthetics_test_result_turn_step.py new file mode 100644 index 0000000000..f312afd4b4 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_turn_step.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_bucket_keys import SyntheticsTestResultBucketKeys + +class SyntheticsTestResultTurnStep(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_bucket_keys import SyntheticsTestResultBucketKeys + return { + "bucket_keys": (SyntheticsTestResultBucketKeys,), + "config": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "bucket_keys": "bucket_keys", + "config": "config", + } + + def __init__(self_, bucket_keys: Union[SyntheticsTestResultBucketKeys, UnsetType]=unset, config: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + A step executed during a goal-based browser test turn. + + :param bucket_keys: Storage bucket keys for artifacts produced during a step or test. + :type bucket_keys: SyntheticsTestResultBucketKeys, optional + + :param config: Browser step configuration for this turn step. + :type config: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + """ + if bucket_keys is not unset: + kwargs["bucket_keys"] = bucket_keys + if config is not unset: + kwargs["config"] = config + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_type.py b/datadog_api_client/v2/model/synthetics_test_result_type.py new file mode 100644 index 0000000000..ff397b2247 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestResultType(ModelSimple): + """ + Type of the Synthetic test result resource, `result`. + + :param value: If omitted defaults to "result". Must be one of ["result"]. + :type value: str + """ + + allowed_values = { + "result", + } + RESULT: ClassVar["SyntheticsTestResultType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestResultType.RESULT = SyntheticsTestResultType("result") diff --git a/datadog_api_client/v2/model/synthetics_test_result_variable.py b/datadog_api_client/v2/model/synthetics_test_result_variable.py new file mode 100644 index 0000000000..ed3019b2a7 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_variable.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultVariable(ModelNormal): + @cached_property + def openapi_types(_): + return { + "err": (str,), + "error_message": (str,), + "example": (str,), + "id": (str,), + "name": (str,), + "pattern": (str,), + "secure": (bool,), + "type": (str,), + "val": (str,), + "value": (str,), + } + attribute_map = { + "err": "err", + "error_message": "error_message", + "example": "example", + "id": "id", + "name": "name", + "pattern": "pattern", + "secure": "secure", + "type": "type", + "val": "val", + "value": "value", + } + + def __init__(self_, err: Union[str, UnsetType]=unset, error_message: Union[str, UnsetType]=unset, example: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, pattern: Union[str, UnsetType]=unset, secure: Union[bool, UnsetType]=unset, type: Union[str, UnsetType]=unset, val: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + A variable used or extracted during a test. + + :param err: Error encountered when evaluating the variable. + :type err: str, optional + + :param error_message: Human-readable error message for variable evaluation. + :type error_message: str, optional + + :param example: Example value for the variable. + :type example: str, optional + + :param id: Variable identifier. + :type id: str, optional + + :param name: Variable name. + :type name: str, optional + + :param pattern: Pattern used to extract the variable. + :type pattern: str, optional + + :param secure: Whether the variable holds a secure value. + :type secure: bool, optional + + :param type: Variable type. + :type type: str, optional + + :param val: Evaluated value of the variable. + :type val: str, optional + + :param value: Current value of the variable. + :type value: str, optional + """ + if err is not unset: + kwargs["err"] = err + if error_message is not unset: + kwargs["error_message"] = error_message + if example is not unset: + kwargs["example"] = example + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + if pattern is not unset: + kwargs["pattern"] = pattern + if secure is not unset: + kwargs["secure"] = secure + if type is not unset: + kwargs["type"] = type + if val is not unset: + kwargs["val"] = val + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_variables.py b/datadog_api_client/v2/model/synthetics_test_result_variables.py new file mode 100644 index 0000000000..005cfff6c4 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_variables.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_variable import SyntheticsTestResultVariable + +class SyntheticsTestResultVariables(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_variable import SyntheticsTestResultVariable + return { + "config": ([SyntheticsTestResultVariable],), + "extracted": ([SyntheticsTestResultVariable],), + } + attribute_map = { + "config": "config", + "extracted": "extracted", + } + + def __init__(self_, config: Union[List[SyntheticsTestResultVariable], UnsetType]=unset, extracted: Union[List[SyntheticsTestResultVariable], UnsetType]=unset, **kwargs): + """ + Variables captured during a test step. + + :param config: Variables defined in the test configuration. + :type config: [SyntheticsTestResultVariable], optional + + :param extracted: Variables extracted during the test execution. + :type extracted: [SyntheticsTestResultVariable], optional + """ + if config is not unset: + kwargs["config"] = config + if extracted is not unset: + kwargs["extracted"] = extracted + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_vitals_metrics.py b/datadog_api_client/v2/model/synthetics_test_result_vitals_metrics.py new file mode 100644 index 0000000000..54c67a398e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_vitals_metrics.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultVitalsMetrics(ModelNormal): + @cached_property + def openapi_types(_): + return { + "_cls": (float,), + "fcp": (float,), + "inp": (float,), + "lcp": (float,), + "ttfb": (float,), + "url": (str,), + } + attribute_map = { + "_cls": "cls", + "fcp": "fcp", + "inp": "inp", + "lcp": "lcp", + "ttfb": "ttfb", + "url": "url", + } + + def __init__(self_, _cls: Union[float, UnsetType]=unset, fcp: Union[float, UnsetType]=unset, inp: Union[float, UnsetType]=unset, lcp: Union[float, UnsetType]=unset, ttfb: Union[float, UnsetType]=unset, url: Union[str, UnsetType]=unset, **kwargs): + """ + Web vitals metrics captured during a browser test step. + + :param _cls: Cumulative Layout Shift score. + :type _cls: float, optional + + :param fcp: First Contentful Paint in milliseconds. + :type fcp: float, optional + + :param inp: Interaction to Next Paint in milliseconds. + :type inp: float, optional + + :param lcp: Largest Contentful Paint in milliseconds. + :type lcp: float, optional + + :param ttfb: Time To First Byte in milliseconds. + :type ttfb: float, optional + + :param url: URL that produced the metrics. + :type url: str, optional + """ + if _cls is not unset: + kwargs["_cls"] = _cls + if fcp is not unset: + kwargs["fcp"] = fcp + if inp is not unset: + kwargs["inp"] = inp + if lcp is not unset: + kwargs["lcp"] = lcp + if ttfb is not unset: + kwargs["ttfb"] = ttfb + if url is not unset: + kwargs["url"] = url + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_warning.py b/datadog_api_client/v2/model/synthetics_test_result_warning.py new file mode 100644 index 0000000000..117210f4b3 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_warning.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_result_bounds import SyntheticsTestResultBounds + +class SyntheticsTestResultWarning(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_result_bounds import SyntheticsTestResultBounds + return { + "element_bounds": ([SyntheticsTestResultBounds],), + "message": (str,), + "type": (str,), + } + attribute_map = { + "element_bounds": "element_bounds", + "message": "message", + "type": "type", + } + + def __init__(self_, element_bounds: Union[List[SyntheticsTestResultBounds], UnsetType]=unset, message: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + A warning captured during a browser test step. + + :param element_bounds: Bounds of elements related to the warning. + :type element_bounds: [SyntheticsTestResultBounds], optional + + :param message: Warning message. + :type message: str, optional + + :param type: Type of the warning. + :type type: str, optional + """ + if element_bounds is not unset: + kwargs["element_bounds"] = element_bounds + if message is not unset: + kwargs["message"] = message + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_result_web_socket_close.py b/datadog_api_client/v2/model/synthetics_test_result_web_socket_close.py new file mode 100644 index 0000000000..5bf7419d1b --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_result_web_socket_close.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestResultWebSocketClose(ModelNormal): + @cached_property + def openapi_types(_): + return { + "reason": (str,), + "status_code": (int,), + } + attribute_map = { + "reason": "reason", + "status_code": "status_code", + } + + def __init__(self_, reason: Union[str, UnsetType]=unset, status_code: Union[int, UnsetType]=unset, **kwargs): + """ + WebSocket close frame information for WebSocket test responses. + + :param reason: Reason string received in the close frame. + :type reason: str, optional + + :param status_code: Status code received in the close frame. + :type status_code: int, optional + """ + if reason is not unset: + kwargs["reason"] = reason + if status_code is not unset: + kwargs["status_code"] = status_code + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_sub_type.py b/datadog_api_client/v2/model/synthetics_test_sub_type.py new file mode 100644 index 0000000000..b30f20fbcc --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_sub_type.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestSubType(ModelSimple): + """ + Subtype of the Synthetic test that produced this result. + + :param value: Must be one of ["dns", "grpc", "http", "icmp", "mcp", "multi", "ssl", "tcp", "udp", "websocket"]. + :type value: str + """ + + allowed_values = { + "dns", + "grpc", + "http", + "icmp", + "mcp", + "multi", + "ssl", + "tcp", + "udp", + "websocket", + } + DNS: ClassVar["SyntheticsTestSubType"] + GRPC: ClassVar["SyntheticsTestSubType"] + HTTP: ClassVar["SyntheticsTestSubType"] + ICMP: ClassVar["SyntheticsTestSubType"] + MCP: ClassVar["SyntheticsTestSubType"] + MULTI: ClassVar["SyntheticsTestSubType"] + SSL: ClassVar["SyntheticsTestSubType"] + TCP: ClassVar["SyntheticsTestSubType"] + UDP: ClassVar["SyntheticsTestSubType"] + WEBSOCKET: ClassVar["SyntheticsTestSubType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestSubType.DNS = SyntheticsTestSubType("dns") +SyntheticsTestSubType.GRPC = SyntheticsTestSubType("grpc") +SyntheticsTestSubType.HTTP = SyntheticsTestSubType("http") +SyntheticsTestSubType.ICMP = SyntheticsTestSubType("icmp") +SyntheticsTestSubType.MCP = SyntheticsTestSubType("mcp") +SyntheticsTestSubType.MULTI = SyntheticsTestSubType("multi") +SyntheticsTestSubType.SSL = SyntheticsTestSubType("ssl") +SyntheticsTestSubType.TCP = SyntheticsTestSubType("tcp") +SyntheticsTestSubType.UDP = SyntheticsTestSubType("udp") +SyntheticsTestSubType.WEBSOCKET = SyntheticsTestSubType("websocket") diff --git a/datadog_api_client/v2/model/synthetics_test_type.py b/datadog_api_client/v2/model/synthetics_test_type.py new file mode 100644 index 0000000000..1c15280039 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestType(ModelSimple): + """ + Type of the Synthetic test that produced this result. + + :param value: Must be one of ["api", "browser", "mobile", "network"]. + :type value: str + """ + + allowed_values = { + "api", + "browser", + "mobile", + "network", + } + API: ClassVar["SyntheticsTestType"] + BROWSER: ClassVar["SyntheticsTestType"] + MOBILE: ClassVar["SyntheticsTestType"] + NETWORK: ClassVar["SyntheticsTestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestType.API = SyntheticsTestType("api") +SyntheticsTestType.BROWSER = SyntheticsTestType("browser") +SyntheticsTestType.MOBILE = SyntheticsTestType("mobile") +SyntheticsTestType.NETWORK = SyntheticsTestType("network") diff --git a/datadog_api_client/v2/model/synthetics_test_version_action_metadata.py b/datadog_api_client/v2/model/synthetics_test_version_action_metadata.py new file mode 100644 index 0000000000..6b9627aeb5 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_action_metadata.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_version_diff_patches import SyntheticsTestVersionDiffPatches + +class SyntheticsTestVersionActionMetadata(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_version_diff_patches import SyntheticsTestVersionDiffPatches + return { + "after_value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "before_value": (bool, date, datetime, dict, float, int, list, str, UUID, none_type,), + "diff_patches": ([SyntheticsTestVersionDiffPatches], none_type), + "property_path": (str,), + } + attribute_map = { + "after_value": "after_value", + "before_value": "before_value", + "diff_patches": "diff_patches", + "property_path": "property_path", + } + + def __init__(self_, after_value: Union[Any, UnsetType]=unset, before_value: Union[Any, UnsetType]=unset, diff_patches: Union[List[SyntheticsTestVersionDiffPatches], none_type, UnsetType]=unset, property_path: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing metadata about a change action. + + :param after_value: The value of the property after the change. + :type after_value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param before_value: The value of the property before the change. + :type before_value: bool, date, datetime, dict, float, int, list, str, UUID, none_type, optional + + :param diff_patches: List of diff patches for text changes. + :type diff_patches: [SyntheticsTestVersionDiffPatches], none_type, optional + + :param property_path: The dot-separated path of the property that was changed. + :type property_path: str, optional + """ + if after_value is not unset: + kwargs["after_value"] = after_value + if before_value is not unset: + kwargs["before_value"] = before_value + if diff_patches is not unset: + kwargs["diff_patches"] = diff_patches + if property_path is not unset: + kwargs["property_path"] = property_path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_attributes.py b/datadog_api_client/v2/model/synthetics_test_version_attributes.py new file mode 100644 index 0000000000..e2553447f5 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_version_author import SyntheticsTestVersionAuthor + from datadog_api_client.v2.model.synthetics_test_version_change_metadata_item import SyntheticsTestVersionChangeMetadataItem + +class SyntheticsTestVersionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_version_author import SyntheticsTestVersionAuthor + from datadog_api_client.v2.model.synthetics_test_version_change_metadata_item import SyntheticsTestVersionChangeMetadataItem + return { + "author": (SyntheticsTestVersionAuthor,), + "change_metadata": ([SyntheticsTestVersionChangeMetadataItem],), + "payload": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "version_payload_created_at": (datetime,), + } + attribute_map = { + "author": "author", + "change_metadata": "change_metadata", + "payload": "payload", + "version_payload_created_at": "version_payload_created_at", + } + + def __init__(self_, author: Union[SyntheticsTestVersionAuthor, UnsetType]=unset, change_metadata: Union[List[SyntheticsTestVersionChangeMetadataItem], UnsetType]=unset, payload: Union[Dict[str, Any], UnsetType]=unset, version_payload_created_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a specific Synthetic test version. + + :param author: Object describing the author of a test version. + :type author: SyntheticsTestVersionAuthor, optional + + :param change_metadata: List of metadata describing individual changes in this version. + Only returned when the ``include_change_metadata`` query parameter is ``true``. + :type change_metadata: [SyntheticsTestVersionChangeMetadataItem], optional + + :param payload: The full test configuration at this version. + :type payload: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param version_payload_created_at: Timestamp of when this version was created. + :type version_payload_created_at: datetime, optional + """ + if author is not unset: + kwargs["author"] = author + if change_metadata is not unset: + kwargs["change_metadata"] = change_metadata + if payload is not unset: + kwargs["payload"] = payload + if version_payload_created_at is not unset: + kwargs["version_payload_created_at"] = version_payload_created_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_author.py b/datadog_api_client/v2/model/synthetics_test_version_author.py new file mode 100644 index 0000000000..3190e2f428 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_author.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestVersionAuthor(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "id": (str,), + "name": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "id": "id", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Object describing the author of a test version. + + :param email: Email address of the author. + :type email: str, optional + + :param handle: The author's Datadog handle (login username). + :type handle: str, optional + + :param id: UUID of the author. + :type id: str, optional + + :param name: Display name of the author. + :type name: str, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_change_attributes.py b/datadog_api_client/v2/model/synthetics_test_version_change_attributes.py new file mode 100644 index 0000000000..41f6e7afa0 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_change_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_version_change_metadata_item import SyntheticsTestVersionChangeMetadataItem + +class SyntheticsTestVersionChangeAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_version_change_metadata_item import SyntheticsTestVersionChangeMetadataItem + return { + "author_uuid": (str,), + "change_metadata": ([SyntheticsTestVersionChangeMetadataItem],), + "version_number": (int,), + "version_payload_created_at": (datetime,), + } + attribute_map = { + "author_uuid": "author_uuid", + "change_metadata": "change_metadata", + "version_number": "version_number", + "version_payload_created_at": "version_payload_created_at", + } + + def __init__(self_, author_uuid: Union[str, UnsetType]=unset, change_metadata: Union[List[SyntheticsTestVersionChangeMetadataItem], UnsetType]=unset, version_number: Union[int, UnsetType]=unset, version_payload_created_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a version change record. + + :param author_uuid: UUID of the user who created this version. + :type author_uuid: str, optional + + :param change_metadata: List of metadata describing individual changes in this version. + :type change_metadata: [SyntheticsTestVersionChangeMetadataItem], optional + + :param version_number: The sequential version number. + :type version_number: int, optional + + :param version_payload_created_at: Timestamp of when this version was created. + :type version_payload_created_at: datetime, optional + """ + if author_uuid is not unset: + kwargs["author_uuid"] = author_uuid + if change_metadata is not unset: + kwargs["change_metadata"] = change_metadata + if version_number is not unset: + kwargs["version_number"] = version_number + if version_payload_created_at is not unset: + kwargs["version_payload_created_at"] = version_payload_created_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_change_data.py b/datadog_api_client/v2/model/synthetics_test_version_change_data.py new file mode 100644 index 0000000000..6f691e5a4e --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_change_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_version_change_attributes import SyntheticsTestVersionChangeAttributes + from datadog_api_client.v2.model.synthetics_test_version_change_type import SyntheticsTestVersionChangeType + +class SyntheticsTestVersionChangeData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_version_change_attributes import SyntheticsTestVersionChangeAttributes + from datadog_api_client.v2.model.synthetics_test_version_change_type import SyntheticsTestVersionChangeType + return { + "attributes": (SyntheticsTestVersionChangeAttributes,), + "id": (str,), + "type": (SyntheticsTestVersionChangeType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsTestVersionChangeAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SyntheticsTestVersionChangeType, UnsetType]=unset, **kwargs): + """ + Data object for a version change record. + + :param attributes: Attributes of a version change record. + :type attributes: SyntheticsTestVersionChangeAttributes, optional + + :param id: UUID of the version change record. + :type id: str, optional + + :param type: Type of the version metadata resource. + :type type: SyntheticsTestVersionChangeType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_change_metadata_item.py b/datadog_api_client/v2/model/synthetics_test_version_change_metadata_item.py new file mode 100644 index 0000000000..a99b7afead --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_change_metadata_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_version_action_metadata import SyntheticsTestVersionActionMetadata + +class SyntheticsTestVersionChangeMetadataItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_version_action_metadata import SyntheticsTestVersionActionMetadata + return { + "action": (str,), + "action_metadata": (SyntheticsTestVersionActionMetadata,), + } + attribute_map = { + "action": "action", + "action_metadata": "action_metadata", + } + + def __init__(self_, action: Union[str, UnsetType]=unset, action_metadata: Union[SyntheticsTestVersionActionMetadata, UnsetType]=unset, **kwargs): + """ + Object describing a single change within a version. + + :param action: The action that was performed (for example, ``updated`` or ``created`` ). + :type action: str, optional + + :param action_metadata: Object containing metadata about a change action. + :type action_metadata: SyntheticsTestVersionActionMetadata, optional + """ + if action is not unset: + kwargs["action"] = action + if action_metadata is not unset: + kwargs["action_metadata"] = action_metadata + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_change_type.py b/datadog_api_client/v2/model/synthetics_test_version_change_type.py new file mode 100644 index 0000000000..df6ce684ce --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_change_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestVersionChangeType(ModelSimple): + """ + Type of the version metadata resource. + + :param value: If omitted defaults to "version_metadata". Must be one of ["version_metadata"]. + :type value: str + """ + + allowed_values = { + "version_metadata", + } + VERSION_METADATA: ClassVar["SyntheticsTestVersionChangeType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestVersionChangeType.VERSION_METADATA = SyntheticsTestVersionChangeType("version_metadata") diff --git a/datadog_api_client/v2/model/synthetics_test_version_data.py b/datadog_api_client/v2/model/synthetics_test_version_data.py new file mode 100644 index 0000000000..132e1d86d0 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_version_attributes import SyntheticsTestVersionAttributes + from datadog_api_client.v2.model.synthetics_test_version_type import SyntheticsTestVersionType + +class SyntheticsTestVersionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_version_attributes import SyntheticsTestVersionAttributes + from datadog_api_client.v2.model.synthetics_test_version_type import SyntheticsTestVersionType + return { + "attributes": (SyntheticsTestVersionAttributes,), + "id": (str,), + "type": (SyntheticsTestVersionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[SyntheticsTestVersionAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[SyntheticsTestVersionType, UnsetType]=unset, **kwargs): + """ + Data object for a specific Synthetic test version. + + :param attributes: Attributes of a specific Synthetic test version. + :type attributes: SyntheticsTestVersionAttributes, optional + + :param id: UUID of the version record. + :type id: str, optional + + :param type: Type of the version resource. + :type type: SyntheticsTestVersionType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_diff_patch_diff.py b/datadog_api_client/v2/model/synthetics_test_version_diff_patch_diff.py new file mode 100644 index 0000000000..b9d0b6c8a5 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_diff_patch_diff.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestVersionDiffPatchDiff(ModelNormal): + @cached_property + def openapi_types(_): + return { + "change_text": (str,), + "operation": (str,), + } + attribute_map = { + "change_text": "change_text", + "operation": "operation", + } + + def __init__(self_, change_text: Union[str, UnsetType]=unset, operation: Union[str, UnsetType]=unset, **kwargs): + """ + Object describing a single text diff operation. + + :param change_text: The text that was changed. + :type change_text: str, optional + + :param operation: The diff operation applied. + :type operation: str, optional + """ + if change_text is not unset: + kwargs["change_text"] = change_text + if operation is not unset: + kwargs["operation"] = operation + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_diff_patches.py b/datadog_api_client/v2/model/synthetics_test_version_diff_patches.py new file mode 100644 index 0000000000..5420acbf75 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_diff_patches.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_version_diff_patch_diff import SyntheticsTestVersionDiffPatchDiff + +class SyntheticsTestVersionDiffPatches(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_version_diff_patch_diff import SyntheticsTestVersionDiffPatchDiff + return { + "diffs": ([SyntheticsTestVersionDiffPatchDiff],), + "length1": (int,), + "length2": (int,), + "start1": (int,), + "start2": (int,), + } + attribute_map = { + "diffs": "diffs", + "length1": "length1", + "length2": "length2", + "start1": "start1", + "start2": "start2", + } + + def __init__(self_, diffs: Union[List[SyntheticsTestVersionDiffPatchDiff], UnsetType]=unset, length1: Union[int, UnsetType]=unset, length2: Union[int, UnsetType]=unset, start1: Union[int, UnsetType]=unset, start2: Union[int, UnsetType]=unset, **kwargs): + """ + Object describing a patch in the diff. + + :param diffs: List of individual diff operations. + :type diffs: [SyntheticsTestVersionDiffPatchDiff], optional + + :param length1: Length of the original text segment. + :type length1: int, optional + + :param length2: Length of the modified text segment. + :type length2: int, optional + + :param start1: Start position in the original text. + :type start1: int, optional + + :param start2: Start position in the modified text. + :type start2: int, optional + """ + if diffs is not unset: + kwargs["diffs"] = diffs + if length1 is not unset: + kwargs["length1"] = length1 + if length2 is not unset: + kwargs["length2"] = length2 + if start1 is not unset: + kwargs["start1"] = start1 + if start2 is not unset: + kwargs["start2"] = start2 + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_history_meta.py b/datadog_api_client/v2/model/synthetics_test_version_history_meta.py new file mode 100644 index 0000000000..fb484619e0 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_history_meta.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class SyntheticsTestVersionHistoryMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "next_last_version_number": (int, none_type), + "retention_period_in_days": (int,), + } + attribute_map = { + "next_last_version_number": "next_last_version_number", + "retention_period_in_days": "retention_period_in_days", + } + + def __init__(self_, next_last_version_number: Union[int, none_type, UnsetType]=unset, retention_period_in_days: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata for a version history response. + + :param next_last_version_number: The version number to use as the ``last_version_number`` query parameter + to fetch the next page. ``null`` indicates there are no more pages. + :type next_last_version_number: int, none_type, optional + + :param retention_period_in_days: The number of days that version history is retained. + :type retention_period_in_days: int, optional + """ + if next_last_version_number is not unset: + kwargs["next_last_version_number"] = next_last_version_number + if retention_period_in_days is not unset: + kwargs["retention_period_in_days"] = retention_period_in_days + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_history_response.py b/datadog_api_client/v2/model/synthetics_test_version_history_response.py new file mode 100644 index 0000000000..9403efd579 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_history_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_version_change_data import SyntheticsTestVersionChangeData + from datadog_api_client.v2.model.synthetics_test_version_history_meta import SyntheticsTestVersionHistoryMeta + +class SyntheticsTestVersionHistoryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_version_change_data import SyntheticsTestVersionChangeData + from datadog_api_client.v2.model.synthetics_test_version_history_meta import SyntheticsTestVersionHistoryMeta + return { + "data": ([SyntheticsTestVersionChangeData],), + "meta": (SyntheticsTestVersionHistoryMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[SyntheticsTestVersionChangeData], UnsetType]=unset, meta: Union[SyntheticsTestVersionHistoryMeta, UnsetType]=unset, **kwargs): + """ + Response containing the paginated version history for a Synthetic test. + + :param data: List of version change records. + :type data: [SyntheticsTestVersionChangeData], optional + + :param meta: Pagination metadata for a version history response. + :type meta: SyntheticsTestVersionHistoryMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_response.py b/datadog_api_client/v2/model/synthetics_test_version_response.py new file mode 100644 index 0000000000..e7b0acc9e5 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_test_version_data import SyntheticsTestVersionData + +class SyntheticsTestVersionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_test_version_data import SyntheticsTestVersionData + return { + "data": (SyntheticsTestVersionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[SyntheticsTestVersionData, UnsetType]=unset, **kwargs): + """ + Response containing a specific version of a Synthetic test. + + :param data: Data object for a specific Synthetic test version. + :type data: SyntheticsTestVersionData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/synthetics_test_version_type.py b/datadog_api_client/v2/model/synthetics_test_version_type.py new file mode 100644 index 0000000000..b1dcb83bed --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_test_version_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class SyntheticsTestVersionType(ModelSimple): + """ + Type of the version resource. + + :param value: If omitted defaults to "version". Must be one of ["version"]. + :type value: str + """ + + allowed_values = { + "version", + } + VERSION: ClassVar["SyntheticsTestVersionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +SyntheticsTestVersionType.VERSION = SyntheticsTestVersionType("version") diff --git a/datadog_api_client/v2/model/synthetics_variable_parser.py b/datadog_api_client/v2/model/synthetics_variable_parser.py new file mode 100644 index 0000000000..11559c8621 --- /dev/null +++ b/datadog_api_client/v2/model/synthetics_variable_parser.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.synthetics_global_variable_parser_type import SyntheticsGlobalVariableParserType + +class SyntheticsVariableParser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.synthetics_global_variable_parser_type import SyntheticsGlobalVariableParserType + return { + "type": (SyntheticsGlobalVariableParserType,), + "value": (str,), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: SyntheticsGlobalVariableParserType, value: Union[str, UnsetType]=unset, **kwargs): + """ + Details of the parser to use for the global variable. + + :param type: Type of parser for a Synthetic global variable from a synthetics test. + :type type: SyntheticsGlobalVariableParserType + + :param value: Regex or JSON path used for the parser. Not used with type ``raw``. + :type value: str, optional + """ + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/table_result_v2.py b/datadog_api_client/v2/model/table_result_v2.py new file mode 100644 index 0000000000..346189faaf --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_result_v2_data import TableResultV2Data + +class TableResultV2(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_result_v2_data import TableResultV2Data + return { + "data": (TableResultV2Data,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TableResultV2Data, UnsetType]=unset, **kwargs): + """ + A reference table resource containing its full configuration and state. + + :param data: The data object containing the reference table configuration and state. + :type data: TableResultV2Data, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/table_result_v2_array.py b/datadog_api_client/v2/model/table_result_v2_array.py new file mode 100644 index 0000000000..09113c55f8 --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_result_v2_data import TableResultV2Data + +class TableResultV2Array(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_result_v2_data import TableResultV2Data + return { + "data": ([TableResultV2Data],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[TableResultV2Data], **kwargs): + """ + List of reference tables. + + :param data: The reference tables. + :type data: [TableResultV2Data] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/table_result_v2_data.py b/datadog_api_client/v2/model/table_result_v2_data.py new file mode 100644 index 0000000000..3b938d53d6 --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_result_v2_data_attributes import TableResultV2DataAttributes + from datadog_api_client.v2.model.table_result_v2_data_type import TableResultV2DataType + +class TableResultV2Data(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_result_v2_data_attributes import TableResultV2DataAttributes + from datadog_api_client.v2.model.table_result_v2_data_type import TableResultV2DataType + return { + "attributes": (TableResultV2DataAttributes,), + "id": (str,), + "type": (TableResultV2DataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: TableResultV2DataType, attributes: Union[TableResultV2DataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the reference table configuration and state. + + :param attributes: Attributes that define the reference table's configuration and properties. + :type attributes: TableResultV2DataAttributes, optional + + :param id: Unique identifier for the reference table. + :type id: str, optional + + :param type: Reference table resource type. + :type type: TableResultV2DataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/table_result_v2_data_attributes.py b/datadog_api_client/v2/model/table_result_v2_data_attributes.py new file mode 100644 index 0000000000..d31754ea33 --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_attributes.py @@ -0,0 +1,133 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata import TableResultV2DataAttributesFileMetadata + from datadog_api_client.v2.model.table_result_v2_data_attributes_schema import TableResultV2DataAttributesSchema + from datadog_api_client.v2.model.reference_table_source_type import ReferenceTableSourceType + +class TableResultV2DataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata import TableResultV2DataAttributesFileMetadata + from datadog_api_client.v2.model.table_result_v2_data_attributes_schema import TableResultV2DataAttributesSchema + from datadog_api_client.v2.model.reference_table_source_type import ReferenceTableSourceType + return { + "created_by": (str,), + "description": (str,), + "file_metadata": (TableResultV2DataAttributesFileMetadata,), + "last_updated_by": (str,), + "row_count": (int,), + "schema": (TableResultV2DataAttributesSchema,), + "source": (ReferenceTableSourceType,), + "status": (str,), + "table_name": (str,), + "tags": ([str],), + "updated_at": (str,), + } + attribute_map = { + "created_by": "created_by", + "description": "description", + "file_metadata": "file_metadata", + "last_updated_by": "last_updated_by", + "row_count": "row_count", + "schema": "schema", + "source": "source", + "status": "status", + "table_name": "table_name", + "tags": "tags", + "updated_at": "updated_at", + } + + def __init__(self_, created_by: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, file_metadata: Union[TableResultV2DataAttributesFileMetadata, UnsetType]=unset, last_updated_by: Union[str, UnsetType]=unset, row_count: Union[int, UnsetType]=unset, schema: Union[TableResultV2DataAttributesSchema, UnsetType]=unset, source: Union[ReferenceTableSourceType, UnsetType]=unset, status: Union[str, UnsetType]=unset, table_name: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes that define the reference table's configuration and properties. + + :param created_by: UUID of the user who created the reference table. + :type created_by: str, optional + + :param description: Optional text describing the purpose or contents of this reference table. + :type description: str, optional + + :param file_metadata: Metadata specifying where and how to access the reference table's data file. + + For cloud storage tables (S3/GCS/Azure): + + * sync_enabled and access_details will always be present + * error fields (error_message, error_row_count, error_type) are present only when errors occur + + For local file tables: + + * error fields (error_message, error_row_count) are present only when errors occur + * sync_enabled, access_details are never present + :type file_metadata: TableResultV2DataAttributesFileMetadata, optional + + :param last_updated_by: UUID of the user who last updated the reference table. + :type last_updated_by: str, optional + + :param row_count: The number of successfully processed rows in the reference table. + :type row_count: int, optional + + :param schema: Schema defining the structure and columns of the reference table. + :type schema: TableResultV2DataAttributesSchema, optional + + :param source: The source type for reference table data. Includes all possible source types that can appear in responses. + :type source: ReferenceTableSourceType, optional + + :param status: The processing status of the table. + :type status: str, optional + + :param table_name: Unique name to identify this reference table. Used in enrichment processors and API calls. + :type table_name: str, optional + + :param tags: Tags for organizing and filtering reference tables. + :type tags: [str], optional + + :param updated_at: When the reference table was last updated, in ISO 8601 format. + :type updated_at: str, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if description is not unset: + kwargs["description"] = description + if file_metadata is not unset: + kwargs["file_metadata"] = file_metadata + if last_updated_by is not unset: + kwargs["last_updated_by"] = last_updated_by + if row_count is not unset: + kwargs["row_count"] = row_count + if schema is not unset: + kwargs["schema"] = schema + if source is not unset: + kwargs["source"] = source + if status is not unset: + kwargs["status"] = status + if table_name is not unset: + kwargs["table_name"] = table_name + if tags is not unset: + kwargs["tags"] = tags + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata.py b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata.py new file mode 100644 index 0000000000..1ef06cbd34 --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata.py @@ -0,0 +1,92 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details import TableResultV2DataAttributesFileMetadataOneOfAccessDetails + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_cloud_storage_error_type import TableResultV2DataAttributesFileMetadataCloudStorageErrorType + +class TableResultV2DataAttributesFileMetadata(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details import TableResultV2DataAttributesFileMetadataOneOfAccessDetails + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_cloud_storage_error_type import TableResultV2DataAttributesFileMetadataCloudStorageErrorType + return { + "access_details": (TableResultV2DataAttributesFileMetadataOneOfAccessDetails,), + "error_message": (str,), + "error_row_count": (int,), + "error_type": (TableResultV2DataAttributesFileMetadataCloudStorageErrorType,), + "sync_enabled": (bool,), + } + attribute_map = { + "access_details": "access_details", + "error_message": "error_message", + "error_row_count": "error_row_count", + "error_type": "error_type", + "sync_enabled": "sync_enabled", + } + + def __init__(self_, access_details: Union[TableResultV2DataAttributesFileMetadataOneOfAccessDetails, UnsetType]=unset, error_message: Union[str, UnsetType]=unset, error_row_count: Union[int, UnsetType]=unset, error_type: Union[TableResultV2DataAttributesFileMetadataCloudStorageErrorType, UnsetType]=unset, sync_enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Metadata specifying where and how to access the reference table's data file. + + For cloud storage tables (S3/GCS/Azure): + + * sync_enabled and access_details will always be present + * error fields (error_message, error_row_count, error_type) are present only when errors occur + + For local file tables: + + * error fields (error_message, error_row_count) are present only when errors occur + * sync_enabled, access_details are never present + + :param access_details: Cloud storage access configuration for the reference table data file. + :type access_details: TableResultV2DataAttributesFileMetadataOneOfAccessDetails, optional + + :param error_message: The error message returned from the last operation (sync for cloud storage, upload for local file). + :type error_message: str, optional + + :param error_row_count: The number of rows that failed to process. + :type error_row_count: int, optional + + :param error_type: The type of error that occurred during file processing. This field provides high-level error categories for easier troubleshooting and is only present when there are errors. + :type error_type: TableResultV2DataAttributesFileMetadataCloudStorageErrorType, optional + + :param sync_enabled: Whether this table is synced automatically from cloud storage. Only applicable for cloud storage sources. + :type sync_enabled: bool, optional + """ + if access_details is not unset: + kwargs["access_details"] = access_details + if error_message is not unset: + kwargs["error_message"] = error_message + if error_row_count is not unset: + kwargs["error_row_count"] = error_row_count + if error_type is not unset: + kwargs["error_type"] = error_type + if sync_enabled is not unset: + kwargs["sync_enabled"] = sync_enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_cloud_storage_error_type.py b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_cloud_storage_error_type.py new file mode 100644 index 0000000000..11778b1478 --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_cloud_storage_error_type.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableResultV2DataAttributesFileMetadataCloudStorageErrorType(ModelSimple): + """ + The type of error that occurred during file processing. This field provides high-level error categories for easier troubleshooting and is only present when there are errors. + + :param value: Must be one of ["TABLE_SCHEMA_ERROR", "FILE_FORMAT_ERROR", "CONFIGURATION_ERROR", "QUOTA_EXCEEDED", "CONFLICT_ERROR", "VALIDATION_ERROR", "STATE_ERROR", "OPERATION_ERROR", "SYSTEM_ERROR"]. + :type value: str + """ + + allowed_values = { + "TABLE_SCHEMA_ERROR", + "FILE_FORMAT_ERROR", + "CONFIGURATION_ERROR", + "QUOTA_EXCEEDED", + "CONFLICT_ERROR", + "VALIDATION_ERROR", + "STATE_ERROR", + "OPERATION_ERROR", + "SYSTEM_ERROR", + } + TABLE_SCHEMA_ERROR: ClassVar["TableResultV2DataAttributesFileMetadataCloudStorageErrorType"] + FILE_FORMAT_ERROR: ClassVar["TableResultV2DataAttributesFileMetadataCloudStorageErrorType"] + CONFIGURATION_ERROR: ClassVar["TableResultV2DataAttributesFileMetadataCloudStorageErrorType"] + QUOTA_EXCEEDED: ClassVar["TableResultV2DataAttributesFileMetadataCloudStorageErrorType"] + CONFLICT_ERROR: ClassVar["TableResultV2DataAttributesFileMetadataCloudStorageErrorType"] + VALIDATION_ERROR: ClassVar["TableResultV2DataAttributesFileMetadataCloudStorageErrorType"] + STATE_ERROR: ClassVar["TableResultV2DataAttributesFileMetadataCloudStorageErrorType"] + OPERATION_ERROR: ClassVar["TableResultV2DataAttributesFileMetadataCloudStorageErrorType"] + SYSTEM_ERROR: ClassVar["TableResultV2DataAttributesFileMetadataCloudStorageErrorType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableResultV2DataAttributesFileMetadataCloudStorageErrorType.TABLE_SCHEMA_ERROR = TableResultV2DataAttributesFileMetadataCloudStorageErrorType("TABLE_SCHEMA_ERROR") +TableResultV2DataAttributesFileMetadataCloudStorageErrorType.FILE_FORMAT_ERROR = TableResultV2DataAttributesFileMetadataCloudStorageErrorType("FILE_FORMAT_ERROR") +TableResultV2DataAttributesFileMetadataCloudStorageErrorType.CONFIGURATION_ERROR = TableResultV2DataAttributesFileMetadataCloudStorageErrorType("CONFIGURATION_ERROR") +TableResultV2DataAttributesFileMetadataCloudStorageErrorType.QUOTA_EXCEEDED = TableResultV2DataAttributesFileMetadataCloudStorageErrorType("QUOTA_EXCEEDED") +TableResultV2DataAttributesFileMetadataCloudStorageErrorType.CONFLICT_ERROR = TableResultV2DataAttributesFileMetadataCloudStorageErrorType("CONFLICT_ERROR") +TableResultV2DataAttributesFileMetadataCloudStorageErrorType.VALIDATION_ERROR = TableResultV2DataAttributesFileMetadataCloudStorageErrorType("VALIDATION_ERROR") +TableResultV2DataAttributesFileMetadataCloudStorageErrorType.STATE_ERROR = TableResultV2DataAttributesFileMetadataCloudStorageErrorType("STATE_ERROR") +TableResultV2DataAttributesFileMetadataCloudStorageErrorType.OPERATION_ERROR = TableResultV2DataAttributesFileMetadataCloudStorageErrorType("OPERATION_ERROR") +TableResultV2DataAttributesFileMetadataCloudStorageErrorType.SYSTEM_ERROR = TableResultV2DataAttributesFileMetadataCloudStorageErrorType("SYSTEM_ERROR") diff --git a/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details.py b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details.py new file mode 100644 index 0000000000..b21bcd46a6 --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details_aws_detail import TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAwsDetail + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details_azure_detail import TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAzureDetail + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details_gcp_detail import TableResultV2DataAttributesFileMetadataOneOfAccessDetailsGcpDetail + +class TableResultV2DataAttributesFileMetadataOneOfAccessDetails(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details_aws_detail import TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAwsDetail + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details_azure_detail import TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAzureDetail + from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details_gcp_detail import TableResultV2DataAttributesFileMetadataOneOfAccessDetailsGcpDetail + return { + "aws_detail": (TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAwsDetail,), + "azure_detail": (TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAzureDetail,), + "gcp_detail": (TableResultV2DataAttributesFileMetadataOneOfAccessDetailsGcpDetail,), + } + attribute_map = { + "aws_detail": "aws_detail", + "azure_detail": "azure_detail", + "gcp_detail": "gcp_detail", + } + + def __init__(self_, aws_detail: Union[TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAwsDetail, UnsetType]=unset, azure_detail: Union[TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAzureDetail, UnsetType]=unset, gcp_detail: Union[TableResultV2DataAttributesFileMetadataOneOfAccessDetailsGcpDetail, UnsetType]=unset, **kwargs): + """ + Cloud storage access configuration for the reference table data file. + + :param aws_detail: Amazon Web Services S3 storage access configuration. + :type aws_detail: TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAwsDetail, optional + + :param azure_detail: Azure Blob Storage access configuration. + :type azure_detail: TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAzureDetail, optional + + :param gcp_detail: Google Cloud Platform storage access configuration. + :type gcp_detail: TableResultV2DataAttributesFileMetadataOneOfAccessDetailsGcpDetail, optional + """ + if aws_detail is not unset: + kwargs["aws_detail"] = aws_detail + if azure_detail is not unset: + kwargs["azure_detail"] = azure_detail + if gcp_detail is not unset: + kwargs["gcp_detail"] = gcp_detail + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details_aws_detail.py b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details_aws_detail.py new file mode 100644 index 0000000000..43ffbef671 --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details_aws_detail.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAwsDetail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "aws_account_id": (str,), + "aws_bucket_name": (str,), + "file_path": (str,), + } + attribute_map = { + "aws_account_id": "aws_account_id", + "aws_bucket_name": "aws_bucket_name", + "file_path": "file_path", + } + + def __init__(self_, aws_account_id: Union[str, UnsetType]=unset, aws_bucket_name: Union[str, UnsetType]=unset, file_path: Union[str, UnsetType]=unset, **kwargs): + """ + Amazon Web Services S3 storage access configuration. + + :param aws_account_id: AWS account ID where the S3 bucket is located. + :type aws_account_id: str, optional + + :param aws_bucket_name: S3 bucket containing the CSV file. + :type aws_bucket_name: str, optional + + :param file_path: The relative file path from the S3 bucket root to the CSV file. + :type file_path: str, optional + """ + if aws_account_id is not unset: + kwargs["aws_account_id"] = aws_account_id + if aws_bucket_name is not unset: + kwargs["aws_bucket_name"] = aws_bucket_name + if file_path is not unset: + kwargs["file_path"] = file_path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details_azure_detail.py b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details_azure_detail.py new file mode 100644 index 0000000000..a11c8ff1fd --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details_azure_detail.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAzureDetail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "azure_client_id": (str,), + "azure_container_name": (str,), + "azure_storage_account_name": (str,), + "azure_tenant_id": (str,), + "file_path": (str,), + } + attribute_map = { + "azure_client_id": "azure_client_id", + "azure_container_name": "azure_container_name", + "azure_storage_account_name": "azure_storage_account_name", + "azure_tenant_id": "azure_tenant_id", + "file_path": "file_path", + } + + def __init__(self_, azure_client_id: Union[str, UnsetType]=unset, azure_container_name: Union[str, UnsetType]=unset, azure_storage_account_name: Union[str, UnsetType]=unset, azure_tenant_id: Union[str, UnsetType]=unset, file_path: Union[str, UnsetType]=unset, **kwargs): + """ + Azure Blob Storage access configuration. + + :param azure_client_id: Azure service principal (application) client ID with permissions to read from the container. + :type azure_client_id: str, optional + + :param azure_container_name: Azure Blob Storage container containing the CSV file. + :type azure_container_name: str, optional + + :param azure_storage_account_name: Azure storage account where the container is located. + :type azure_storage_account_name: str, optional + + :param azure_tenant_id: Azure Active Directory tenant ID. + :type azure_tenant_id: str, optional + + :param file_path: The relative file path from the Azure container root to the CSV file. + :type file_path: str, optional + """ + if azure_client_id is not unset: + kwargs["azure_client_id"] = azure_client_id + if azure_container_name is not unset: + kwargs["azure_container_name"] = azure_container_name + if azure_storage_account_name is not unset: + kwargs["azure_storage_account_name"] = azure_storage_account_name + if azure_tenant_id is not unset: + kwargs["azure_tenant_id"] = azure_tenant_id + if file_path is not unset: + kwargs["file_path"] = file_path + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details_gcp_detail.py b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details_gcp_detail.py new file mode 100644 index 0000000000..d415c210d0 --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_attributes_file_metadata_one_of_access_details_gcp_detail.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TableResultV2DataAttributesFileMetadataOneOfAccessDetailsGcpDetail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "file_path": (str,), + "gcp_bucket_name": (str,), + "gcp_project_id": (str,), + "gcp_service_account_email": (str,), + } + attribute_map = { + "file_path": "file_path", + "gcp_bucket_name": "gcp_bucket_name", + "gcp_project_id": "gcp_project_id", + "gcp_service_account_email": "gcp_service_account_email", + } + + def __init__(self_, file_path: Union[str, UnsetType]=unset, gcp_bucket_name: Union[str, UnsetType]=unset, gcp_project_id: Union[str, UnsetType]=unset, gcp_service_account_email: Union[str, UnsetType]=unset, **kwargs): + """ + Google Cloud Platform storage access configuration. + + :param file_path: The relative file path from the GCS bucket root to the CSV file. + :type file_path: str, optional + + :param gcp_bucket_name: GCP bucket containing the CSV file. + :type gcp_bucket_name: str, optional + + :param gcp_project_id: GCP project ID where the bucket is located. + :type gcp_project_id: str, optional + + :param gcp_service_account_email: Service account email with read permissions for the GCS bucket. + :type gcp_service_account_email: str, optional + """ + if file_path is not unset: + kwargs["file_path"] = file_path + if gcp_bucket_name is not unset: + kwargs["gcp_bucket_name"] = gcp_bucket_name + if gcp_project_id is not unset: + kwargs["gcp_project_id"] = gcp_project_id + if gcp_service_account_email is not unset: + kwargs["gcp_service_account_email"] = gcp_service_account_email + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/table_result_v2_data_attributes_schema.py b/datadog_api_client/v2/model/table_result_v2_data_attributes_schema.py new file mode 100644 index 0000000000..849db07744 --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_attributes_schema.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_result_v2_data_attributes_schema_fields_items import TableResultV2DataAttributesSchemaFieldsItems + +class TableResultV2DataAttributesSchema(ModelNormal): + validations = { + "fields": { + "max_items": 200, + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_result_v2_data_attributes_schema_fields_items import TableResultV2DataAttributesSchemaFieldsItems + return { + "fields": ([TableResultV2DataAttributesSchemaFieldsItems],), + "primary_keys": ([str],), + } + attribute_map = { + "fields": "fields", + "primary_keys": "primary_keys", + } + + def __init__(self_, fields: List[TableResultV2DataAttributesSchemaFieldsItems], primary_keys: List[str], **kwargs): + """ + Schema defining the structure and columns of the reference table. + + :param fields: The schema fields. Maximum of 200 columns. + :type fields: [TableResultV2DataAttributesSchemaFieldsItems] + + :param primary_keys: List of field names that serve as primary keys for the table. Only one primary key is supported, and it is used as an ID to retrieve rows. + :type primary_keys: [str] + """ + super().__init__(kwargs) + + + self_.fields = fields + self_.primary_keys = primary_keys diff --git a/datadog_api_client/v2/model/table_result_v2_data_attributes_schema_fields_items.py b/datadog_api_client/v2/model/table_result_v2_data_attributes_schema_fields_items.py new file mode 100644 index 0000000000..41f3c560bd --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_attributes_schema_fields_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.reference_table_schema_field_type import ReferenceTableSchemaFieldType + +class TableResultV2DataAttributesSchemaFieldsItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.reference_table_schema_field_type import ReferenceTableSchemaFieldType + return { + "name": (str,), + "type": (ReferenceTableSchemaFieldType,), + } + attribute_map = { + "name": "name", + "type": "type", + } + + def __init__(self_, name: str, type: ReferenceTableSchemaFieldType, **kwargs): + """ + A single field (column) in the reference table schema to be returned. + + :param name: The field name. + :type name: str + + :param type: The field type for reference table schema fields. + :type type: ReferenceTableSchemaFieldType + """ + super().__init__(kwargs) + + + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/table_result_v2_data_type.py b/datadog_api_client/v2/model/table_result_v2_data_type.py new file mode 100644 index 0000000000..0ffc515b7b --- /dev/null +++ b/datadog_api_client/v2/model/table_result_v2_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableResultV2DataType(ModelSimple): + """ + Reference table resource type. + + :param value: If omitted defaults to "reference_table". Must be one of ["reference_table"]. + :type value: str + """ + + allowed_values = { + "reference_table", + } + REFERENCE_TABLE: ClassVar["TableResultV2DataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableResultV2DataType.REFERENCE_TABLE = TableResultV2DataType("reference_table") diff --git a/datadog_api_client/v2/model/table_row_resource_array.py b/datadog_api_client/v2/model/table_row_resource_array.py new file mode 100644 index 0000000000..48b03c783c --- /dev/null +++ b/datadog_api_client/v2/model/table_row_resource_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_row_resource_data import TableRowResourceData + +class TableRowResourceArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_row_resource_data import TableRowResourceData + return { + "data": ([TableRowResourceData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[TableRowResourceData], **kwargs): + """ + List of rows from a reference table query. + + :param data: The rows. + :type data: [TableRowResourceData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/table_row_resource_data.py b/datadog_api_client/v2/model/table_row_resource_data.py new file mode 100644 index 0000000000..a6dfd33f53 --- /dev/null +++ b/datadog_api_client/v2/model/table_row_resource_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_row_resource_data_attributes import TableRowResourceDataAttributes + from datadog_api_client.v2.model.table_row_resource_data_type import TableRowResourceDataType + +class TableRowResourceData(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_row_resource_data_attributes import TableRowResourceDataAttributes + from datadog_api_client.v2.model.table_row_resource_data_type import TableRowResourceDataType + return { + "attributes": (TableRowResourceDataAttributes,), + "id": (str,), + "type": (TableRowResourceDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: TableRowResourceDataType, attributes: Union[TableRowResourceDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The data object containing the row column names and values. + + :param attributes: Column values for this row in the reference table. + :type attributes: TableRowResourceDataAttributes, optional + + :param id: Row identifier, corresponding to the primary key value. + :type id: str, optional + + :param type: Row resource type. + :type type: TableRowResourceDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/table_row_resource_data_attributes.py b/datadog_api_client/v2/model/table_row_resource_data_attributes.py new file mode 100644 index 0000000000..13ba81b4d9 --- /dev/null +++ b/datadog_api_client/v2/model/table_row_resource_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TableRowResourceDataAttributes(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + @cached_property + def openapi_types(_): + return { + "values": (dict,), + } + attribute_map = { + "values": "values", + } + + def __init__(self_, values: Union[dict, UnsetType]=unset, **kwargs): + """ + Column values for this row in the reference table. + + :param values: Key-value pairs representing the row data, where keys are field names from the schema. + :type values: dict, optional + """ + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/table_row_resource_data_type.py b/datadog_api_client/v2/model/table_row_resource_data_type.py new file mode 100644 index 0000000000..ded8862e94 --- /dev/null +++ b/datadog_api_client/v2/model/table_row_resource_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TableRowResourceDataType(ModelSimple): + """ + Row resource type. + + :param value: If omitted defaults to "row". Must be one of ["row"]. + :type value: str + """ + + allowed_values = { + "row", + } + ROW: ClassVar["TableRowResourceDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TableRowResourceDataType.ROW = TableRowResourceDataType("row") diff --git a/datadog_api_client/v2/model/table_row_resource_identifier.py b/datadog_api_client/v2/model/table_row_resource_identifier.py new file mode 100644 index 0000000000..532dd0db3f --- /dev/null +++ b/datadog_api_client/v2/model/table_row_resource_identifier.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.table_row_resource_data_type import TableRowResourceDataType + +class TableRowResourceIdentifier(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.table_row_resource_data_type import TableRowResourceDataType + return { + "id": (str,), + "type": (TableRowResourceDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TableRowResourceDataType, **kwargs): + """ + Row resource containing a single row identifier. + + :param id: The primary key value that uniquely identifies the row to delete. + :type id: str + + :param type: Row resource type. + :type type: TableRowResourceDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/tag_data.py b/datadog_api_client/v2/model/tag_data.py new file mode 100644 index 0000000000..0be16542c8 --- /dev/null +++ b/datadog_api_client/v2/model/tag_data.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_data_type import TagDataType + +class TagData(ModelNormal): + validations = { + "type": { + "min_length": 3, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_data_type import TagDataType + return { + "id": (str,), + "type": (TagDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TagDataType, **kwargs): + """ + A tag resource associated with an app. + + :param id: The name of the tag. + :type id: str + + :param type: The resource type for a tag. + :type type: TagDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/tag_data_type.py b/datadog_api_client/v2/model/tag_data_type.py new file mode 100644 index 0000000000..de13f514ca --- /dev/null +++ b/datadog_api_client/v2/model/tag_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TagDataType(ModelSimple): + """ + The resource type for a tag. + + :param value: If omitted defaults to "tag". Must be one of ["tag"]. + :type value: str + """ + + allowed_values = { + "tag", + } + TAG: ClassVar["TagDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TagDataType.TAG = TagDataType("tag") diff --git a/datadog_api_client/v2/model/tag_indexing_rule_attributes.py b/datadog_api_client/v2/model/tag_indexing_rule_attributes.py new file mode 100644 index 0000000000..eaa40d0c78 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_attributes.py @@ -0,0 +1,126 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_options import TagIndexingRuleOptions + +class TagIndexingRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_options import TagIndexingRuleOptions + return { + "created_at": (datetime,), + "created_by_handle": (str,), + "exclude_tags_mode": (bool,), + "ignored_metric_name_matches": ([str],), + "metric_name_matches": ([str],), + "modified_at": (datetime,), + "modified_by_handle": (str,), + "name": (str,), + "options": (TagIndexingRuleOptions,), + "rule_order": (int,), + "tags": ([str],), + } + attribute_map = { + "created_at": "created_at", + "created_by_handle": "created_by_handle", + "exclude_tags_mode": "exclude_tags_mode", + "ignored_metric_name_matches": "ignored_metric_name_matches", + "metric_name_matches": "metric_name_matches", + "modified_at": "modified_at", + "modified_by_handle": "modified_by_handle", + "name": "name", + "options": "options", + "rule_order": "rule_order", + "tags": "tags", + } + read_only_vars = { + "created_at", + "created_by_handle", + "modified_at", + "modified_by_handle", + "rule_order", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, created_by_handle: Union[str, UnsetType]=unset, exclude_tags_mode: Union[bool, UnsetType]=unset, ignored_metric_name_matches: Union[List[str], UnsetType]=unset, metric_name_matches: Union[List[str], UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, modified_by_handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, options: Union[TagIndexingRuleOptions, UnsetType]=unset, rule_order: Union[int, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of a tag indexing rule. + + :param created_at: Timestamp when the rule was created. + :type created_at: datetime, optional + + :param created_by_handle: Handle of the user who created the rule. + :type created_by_handle: str, optional + + :param exclude_tags_mode: When true, the rule excludes the listed tags and indexes all others. When false (default), the rule includes only the listed tags. + :type exclude_tags_mode: bool, optional + + :param ignored_metric_name_matches: Metric name prefixes excluded from the rule's scope. + :type ignored_metric_name_matches: [str], optional + + :param metric_name_matches: Metric name prefixes (glob patterns) this rule applies to. + :type metric_name_matches: [str], optional + + :param modified_at: Timestamp when the rule was last modified. + :type modified_at: datetime, optional + + :param modified_by_handle: Handle of the user who last modified the rule. + :type modified_by_handle: str, optional + + :param name: Human-readable name for the rule. + :type name: str, optional + + :param options: Versioned configuration options for a tag indexing rule. + :type options: TagIndexingRuleOptions, optional + + :param rule_order: Evaluation order within the org. Lower values are evaluated first. Assigned server-side on create (max+1); pass on update to change the rule's position. + :type rule_order: int, optional + + :param tags: Tag keys managed by this rule. + :type tags: [str], optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by_handle is not unset: + kwargs["created_by_handle"] = created_by_handle + if exclude_tags_mode is not unset: + kwargs["exclude_tags_mode"] = exclude_tags_mode + if ignored_metric_name_matches is not unset: + kwargs["ignored_metric_name_matches"] = ignored_metric_name_matches + if metric_name_matches is not unset: + kwargs["metric_name_matches"] = metric_name_matches + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if modified_by_handle is not unset: + kwargs["modified_by_handle"] = modified_by_handle + if name is not unset: + kwargs["name"] = name + if options is not unset: + kwargs["options"] = options + if rule_order is not unset: + kwargs["rule_order"] = rule_order + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_create_attributes.py b/datadog_api_client/v2/model/tag_indexing_rule_create_attributes.py new file mode 100644 index 0000000000..656c28ac1d --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_create_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_options import TagIndexingRuleOptions + +class TagIndexingRuleCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_options import TagIndexingRuleOptions + return { + "exclude_tags_mode": (bool,), + "ignored_metric_name_matches": ([str],), + "metric_name_matches": ([str],), + "name": (str,), + "options": (TagIndexingRuleOptions,), + "tags": ([str],), + } + attribute_map = { + "exclude_tags_mode": "exclude_tags_mode", + "ignored_metric_name_matches": "ignored_metric_name_matches", + "metric_name_matches": "metric_name_matches", + "name": "name", + "options": "options", + "tags": "tags", + } + + def __init__(self_, metric_name_matches: List[str], name: str, exclude_tags_mode: Union[bool, UnsetType]=unset, ignored_metric_name_matches: Union[List[str], UnsetType]=unset, options: Union[TagIndexingRuleOptions, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for creating a tag indexing rule. + + :param exclude_tags_mode: When true, the rule excludes the listed tags and indexes all others. When false (default), the rule includes only the listed tags. + :type exclude_tags_mode: bool, optional + + :param ignored_metric_name_matches: Metric name prefixes excluded from the rule's scope. + :type ignored_metric_name_matches: [str], optional + + :param metric_name_matches: Metric name prefixes (glob patterns) this rule applies to. + :type metric_name_matches: [str] + + :param name: Human-readable name for the rule. + :type name: str + + :param options: Versioned configuration options for a tag indexing rule. + :type options: TagIndexingRuleOptions, optional + + :param tags: Tag keys managed by this rule. + :type tags: [str], optional + """ + if exclude_tags_mode is not unset: + kwargs["exclude_tags_mode"] = exclude_tags_mode + if ignored_metric_name_matches is not unset: + kwargs["ignored_metric_name_matches"] = ignored_metric_name_matches + if options is not unset: + kwargs["options"] = options + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + + self_.metric_name_matches = metric_name_matches + self_.name = name diff --git a/datadog_api_client/v2/model/tag_indexing_rule_create_data.py b/datadog_api_client/v2/model/tag_indexing_rule_create_data.py new file mode 100644 index 0000000000..40aff17173 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_create_attributes import TagIndexingRuleCreateAttributes + from datadog_api_client.v2.model.tag_indexing_rule_type import TagIndexingRuleType + +class TagIndexingRuleCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_create_attributes import TagIndexingRuleCreateAttributes + from datadog_api_client.v2.model.tag_indexing_rule_type import TagIndexingRuleType + return { + "attributes": (TagIndexingRuleCreateAttributes,), + "type": (TagIndexingRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TagIndexingRuleCreateAttributes, type: TagIndexingRuleType, **kwargs): + """ + Data object for creating a tag indexing rule. + + :param attributes: Attributes for creating a tag indexing rule. + :type attributes: TagIndexingRuleCreateAttributes + + :param type: The tag indexing rule resource type. + :type type: TagIndexingRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/tag_indexing_rule_create_request.py b/datadog_api_client/v2/model/tag_indexing_rule_create_request.py new file mode 100644 index 0000000000..e97b493a54 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_create_data import TagIndexingRuleCreateData + +class TagIndexingRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_create_data import TagIndexingRuleCreateData + return { + "data": (TagIndexingRuleCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TagIndexingRuleCreateData, **kwargs): + """ + Request body for creating a tag indexing rule. + + :param data: Data object for creating a tag indexing rule. + :type data: TagIndexingRuleCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tag_indexing_rule_data.py b/datadog_api_client/v2/model/tag_indexing_rule_data.py new file mode 100644 index 0000000000..fab4b39e89 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_attributes import TagIndexingRuleAttributes + from datadog_api_client.v2.model.tag_indexing_rule_type import TagIndexingRuleType + +class TagIndexingRuleData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_attributes import TagIndexingRuleAttributes + from datadog_api_client.v2.model.tag_indexing_rule_type import TagIndexingRuleType + return { + "attributes": (TagIndexingRuleAttributes,), + "id": (str,), + "type": (TagIndexingRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[TagIndexingRuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[TagIndexingRuleType, UnsetType]=unset, **kwargs): + """ + A tag indexing rule resource object. + + :param attributes: Attributes of a tag indexing rule. + :type attributes: TagIndexingRuleAttributes, optional + + :param id: The unique identifier (UUID) of the tag indexing rule. + :type id: str, optional + + :param type: The tag indexing rule resource type. + :type type: TagIndexingRuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_dynamic_tags.py b/datadog_api_client/v2/model/tag_indexing_rule_dynamic_tags.py new file mode 100644 index 0000000000..5acb92c542 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_dynamic_tags.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TagIndexingRuleDynamicTags(ModelNormal): + validations = { + "exclude_not_queried_window_seconds": { + "inclusive_maximum": 7776000, + }, + } + @cached_property + def openapi_types(_): + return { + "exclude_not_queried_window_seconds": (int,), + "exclude_not_used_in_assets": (bool,), + "queried_tags_window_seconds": (int,), + "related_asset_tags": (bool,), + } + attribute_map = { + "exclude_not_queried_window_seconds": "exclude_not_queried_window_seconds", + "exclude_not_used_in_assets": "exclude_not_used_in_assets", + "queried_tags_window_seconds": "queried_tags_window_seconds", + "related_asset_tags": "related_asset_tags", + } + + def __init__(self_, exclude_not_queried_window_seconds: Union[int, UnsetType]=unset, exclude_not_used_in_assets: Union[bool, UnsetType]=unset, queried_tags_window_seconds: Union[int, UnsetType]=unset, related_asset_tags: Union[bool, UnsetType]=unset, **kwargs): + """ + Options for dynamic tag indexing applied per metric, such as tags filtered by query usage. + + Before a tag key is dropped by this rule, two grace period conditions must be met: + + #. The metric must be submitted for at least as long as the selected window. + #. A tag key must have been submitted for at least 15 days. + + Any metric or tag key that does not meet these conditions are excluded from this + indexing rule. The ``exclude_not_*`` fields require ``exclude_tags_mode`` to be set to ``true``. + + :param exclude_not_queried_window_seconds: Tags that have not been queried within this window are excluded from indexing. Maximum of ``7776000`` (90 days). + :type exclude_not_queried_window_seconds: int, optional + + :param exclude_not_used_in_assets: Tags not used in any dashboards, monitors, notebooks, or SLOs are excluded from indexing. + :type exclude_not_used_in_assets: bool, optional + + :param queried_tags_window_seconds: Window in seconds for evaluating queried tags. + :type queried_tags_window_seconds: int, optional + + :param related_asset_tags: When true, tags from related assets are included. + :type related_asset_tags: bool, optional + """ + if exclude_not_queried_window_seconds is not unset: + kwargs["exclude_not_queried_window_seconds"] = exclude_not_queried_window_seconds + if exclude_not_used_in_assets is not unset: + kwargs["exclude_not_used_in_assets"] = exclude_not_used_in_assets + if queried_tags_window_seconds is not unset: + kwargs["queried_tags_window_seconds"] = queried_tags_window_seconds + if related_asset_tags is not unset: + kwargs["related_asset_tags"] = related_asset_tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_exemption_attributes.py b/datadog_api_client/v2/model/tag_indexing_rule_exemption_attributes.py new file mode 100644 index 0000000000..9f430c6b02 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_exemption_attributes.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TagIndexingRuleExemptionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "created_by_handle": (str,), + "kind": (str,), + "reason": (str,), + } + attribute_map = { + "created_at": "created_at", + "created_by_handle": "created_by_handle", + "kind": "kind", + "reason": "reason", + } + read_only_vars = { + "created_at", + "created_by_handle", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, created_by_handle: Union[str, UnsetType]=unset, kind: Union[str, UnsetType]=unset, reason: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a tag indexing rule exemption. + + :param created_at: Timestamp when the exemption was created. + :type created_at: datetime, optional + + :param created_by_handle: Handle of the user who created the exemption. + :type created_by_handle: str, optional + + :param kind: Discriminates between an explicit exemption ( ``exemption`` ) and a pre-existing legacy tag configuration acting as an implicit exclusion ( ``legacy_tag_configuration`` ). + :type kind: str, optional + + :param reason: The reason the metric is exempt from tag indexing rules. + :type reason: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if created_by_handle is not unset: + kwargs["created_by_handle"] = created_by_handle + if kind is not unset: + kwargs["kind"] = kind + if reason is not unset: + kwargs["reason"] = reason + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_exemption_create_attributes.py b/datadog_api_client/v2/model/tag_indexing_rule_exemption_create_attributes.py new file mode 100644 index 0000000000..6e94530052 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_exemption_create_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TagIndexingRuleExemptionCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "reason": (str,), + } + attribute_map = { + "reason": "reason", + } + + def __init__(self_, reason: str, **kwargs): + """ + Attributes for creating a tag indexing rule exemption. + + :param reason: The reason the metric is exempt from tag indexing rules. + :type reason: str + """ + super().__init__(kwargs) + + + self_.reason = reason diff --git a/datadog_api_client/v2/model/tag_indexing_rule_exemption_create_data.py b/datadog_api_client/v2/model/tag_indexing_rule_exemption_create_data.py new file mode 100644 index 0000000000..fb935a8ce2 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_exemption_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_exemption_create_attributes import TagIndexingRuleExemptionCreateAttributes + from datadog_api_client.v2.model.tag_indexing_rule_exemption_type import TagIndexingRuleExemptionType + +class TagIndexingRuleExemptionCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_exemption_create_attributes import TagIndexingRuleExemptionCreateAttributes + from datadog_api_client.v2.model.tag_indexing_rule_exemption_type import TagIndexingRuleExemptionType + return { + "attributes": (TagIndexingRuleExemptionCreateAttributes,), + "type": (TagIndexingRuleExemptionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TagIndexingRuleExemptionCreateAttributes, type: TagIndexingRuleExemptionType, **kwargs): + """ + Data object for creating a tag indexing rule exemption. + + :param attributes: Attributes for creating a tag indexing rule exemption. + :type attributes: TagIndexingRuleExemptionCreateAttributes + + :param type: The tag indexing rule exemption resource type. + :type type: TagIndexingRuleExemptionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/tag_indexing_rule_exemption_create_request.py b/datadog_api_client/v2/model/tag_indexing_rule_exemption_create_request.py new file mode 100644 index 0000000000..67af2af422 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_exemption_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_exemption_create_data import TagIndexingRuleExemptionCreateData + +class TagIndexingRuleExemptionCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_exemption_create_data import TagIndexingRuleExemptionCreateData + return { + "data": (TagIndexingRuleExemptionCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TagIndexingRuleExemptionCreateData, **kwargs): + """ + Request body for creating a tag indexing rule exemption. + + :param data: Data object for creating a tag indexing rule exemption. + :type data: TagIndexingRuleExemptionCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tag_indexing_rule_exemption_data.py b/datadog_api_client/v2/model/tag_indexing_rule_exemption_data.py new file mode 100644 index 0000000000..006b248aae --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_exemption_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_exemption_attributes import TagIndexingRuleExemptionAttributes + from datadog_api_client.v2.model.tag_indexing_rule_exemption_type import TagIndexingRuleExemptionType + +class TagIndexingRuleExemptionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_exemption_attributes import TagIndexingRuleExemptionAttributes + from datadog_api_client.v2.model.tag_indexing_rule_exemption_type import TagIndexingRuleExemptionType + return { + "attributes": (TagIndexingRuleExemptionAttributes,), + "id": (str,), + "type": (TagIndexingRuleExemptionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[TagIndexingRuleExemptionAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[TagIndexingRuleExemptionType, UnsetType]=unset, **kwargs): + """ + A tag indexing rule exemption resource object. + + :param attributes: Attributes of a tag indexing rule exemption. + :type attributes: TagIndexingRuleExemptionAttributes, optional + + :param id: The metric name, used as the resource ID. + :type id: str, optional + + :param type: The tag indexing rule exemption resource type. + :type type: TagIndexingRuleExemptionType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_exemption_response.py b/datadog_api_client/v2/model/tag_indexing_rule_exemption_response.py new file mode 100644 index 0000000000..3379faad4d --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_exemption_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_exemption_data import TagIndexingRuleExemptionData + +class TagIndexingRuleExemptionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_exemption_data import TagIndexingRuleExemptionData + return { + "data": (TagIndexingRuleExemptionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TagIndexingRuleExemptionData, UnsetType]=unset, **kwargs): + """ + Response containing a tag indexing rule exemption. + + :param data: A tag indexing rule exemption resource object. + :type data: TagIndexingRuleExemptionData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_exemption_type.py b/datadog_api_client/v2/model/tag_indexing_rule_exemption_type.py new file mode 100644 index 0000000000..2d5820d574 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_exemption_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TagIndexingRuleExemptionType(ModelSimple): + """ + The tag indexing rule exemption resource type. + + :param value: If omitted defaults to "tag_indexing_rule_exemptions". Must be one of ["tag_indexing_rule_exemptions"]. + :type value: str + """ + + allowed_values = { + "tag_indexing_rule_exemptions", + } + TAG_INDEXING_RULE_EXEMPTIONS: ClassVar["TagIndexingRuleExemptionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TagIndexingRuleExemptionType.TAG_INDEXING_RULE_EXEMPTIONS = TagIndexingRuleExemptionType("tag_indexing_rule_exemptions") diff --git a/datadog_api_client/v2/model/tag_indexing_rule_metric_match.py b/datadog_api_client/v2/model/tag_indexing_rule_metric_match.py new file mode 100644 index 0000000000..df806a0cc6 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_metric_match.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TagIndexingRuleMetricMatch(ModelNormal): + @cached_property + def openapi_types(_): + return { + "is_queried": (bool,), + "not_queried": (bool,), + "not_used_in_assets": (bool,), + "queried_window_seconds": (int,), + "used_in_assets": (bool,), + } + attribute_map = { + "is_queried": "is_queried", + "not_queried": "not_queried", + "not_used_in_assets": "not_used_in_assets", + "queried_window_seconds": "queried_window_seconds", + "used_in_assets": "used_in_assets", + } + + def __init__(self_, is_queried: Union[bool, UnsetType]=unset, not_queried: Union[bool, UnsetType]=unset, not_used_in_assets: Union[bool, UnsetType]=unset, queried_window_seconds: Union[int, UnsetType]=unset, used_in_assets: Union[bool, UnsetType]=unset, **kwargs): + """ + Criteria for matching metrics based on query state. + + :param is_queried: Match metrics that are being queried. + :type is_queried: bool, optional + + :param not_queried: Match metrics that are not being queried. + :type not_queried: bool, optional + + :param not_used_in_assets: Match metrics not used in any dashboards or monitors. + :type not_used_in_assets: bool, optional + + :param queried_window_seconds: Window in seconds for evaluating query state. + :type queried_window_seconds: int, optional + + :param used_in_assets: Match metrics used in dashboards or monitors. + :type used_in_assets: bool, optional + """ + if is_queried is not unset: + kwargs["is_queried"] = is_queried + if not_queried is not unset: + kwargs["not_queried"] = not_queried + if not_used_in_assets is not unset: + kwargs["not_used_in_assets"] = not_used_in_assets + if queried_window_seconds is not unset: + kwargs["queried_window_seconds"] = queried_window_seconds + if used_in_assets is not unset: + kwargs["used_in_assets"] = used_in_assets + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_options.py b/datadog_api_client/v2/model/tag_indexing_rule_options.py new file mode 100644 index 0000000000..bb0866bd64 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_options.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_options_data import TagIndexingRuleOptionsData + +class TagIndexingRuleOptions(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_options_data import TagIndexingRuleOptionsData + return { + "data": (TagIndexingRuleOptionsData,), + "version": (int,), + } + attribute_map = { + "data": "data", + "version": "version", + } + + def __init__(self_, data: Union[TagIndexingRuleOptionsData, UnsetType]=unset, version: Union[int, UnsetType]=unset, **kwargs): + """ + Versioned configuration options for a tag indexing rule. + + :param data: Data payload for tag indexing rule options. + :type data: TagIndexingRuleOptionsData, optional + + :param version: Options schema version. Only ``1`` is supported. + :type version: int, optional + """ + if data is not unset: + kwargs["data"] = data + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_options_data.py b/datadog_api_client/v2/model/tag_indexing_rule_options_data.py new file mode 100644 index 0000000000..748f685400 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_options_data.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_dynamic_tags import TagIndexingRuleDynamicTags + from datadog_api_client.v2.model.tag_indexing_rule_metric_match import TagIndexingRuleMetricMatch + +class TagIndexingRuleOptionsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_dynamic_tags import TagIndexingRuleDynamicTags + from datadog_api_client.v2.model.tag_indexing_rule_metric_match import TagIndexingRuleMetricMatch + return { + "dynamic_tags": (TagIndexingRuleDynamicTags,), + "manage_preexisting_metrics": (bool,), + "metric_match": (TagIndexingRuleMetricMatch,), + "override_previous_rules": (bool,), + } + attribute_map = { + "dynamic_tags": "dynamic_tags", + "manage_preexisting_metrics": "manage_preexisting_metrics", + "metric_match": "metric_match", + "override_previous_rules": "override_previous_rules", + } + + def __init__(self_, dynamic_tags: Union[TagIndexingRuleDynamicTags, UnsetType]=unset, manage_preexisting_metrics: Union[bool, UnsetType]=unset, metric_match: Union[TagIndexingRuleMetricMatch, UnsetType]=unset, override_previous_rules: Union[bool, UnsetType]=unset, **kwargs): + """ + Data payload for tag indexing rule options. + + :param dynamic_tags: Options for dynamic tag indexing applied per metric, such as tags filtered by query usage. + + Before a tag key is dropped by this rule, two grace period conditions must be met: + + #. The metric must be submitted for at least as long as the selected window. + #. A tag key must have been submitted for at least 15 days. + + Any metric or tag key that does not meet these conditions are excluded from this + indexing rule. The ``exclude_not_*`` fields require ``exclude_tags_mode`` to be set to ``true``. + :type dynamic_tags: TagIndexingRuleDynamicTags, optional + + :param manage_preexisting_metrics: When true, the rule applies to metrics that were ingested before the rule was created. + :type manage_preexisting_metrics: bool, optional + + :param metric_match: Criteria for matching metrics based on query state. + :type metric_match: TagIndexingRuleMetricMatch, optional + + :param override_previous_rules: When true, this rule's tag list overrides tags configured by earlier rules for the same metric. When false (default), tags from all matching rules are combined. + :type override_previous_rules: bool, optional + """ + if dynamic_tags is not unset: + kwargs["dynamic_tags"] = dynamic_tags + if manage_preexisting_metrics is not unset: + kwargs["manage_preexisting_metrics"] = manage_preexisting_metrics + if metric_match is not unset: + kwargs["metric_match"] = metric_match + if override_previous_rules is not unset: + kwargs["override_previous_rules"] = override_previous_rules + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_order_attributes.py b/datadog_api_client/v2/model/tag_indexing_rule_order_attributes.py new file mode 100644 index 0000000000..7bee553184 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_order_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TagIndexingRuleOrderAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "rule_ids": ([str],), + } + attribute_map = { + "rule_ids": "rule_ids", + } + + def __init__(self_, rule_ids: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for the reorder operation. + + :param rule_ids: Ordered list of tag indexing rule UUIDs. The server assigns rule_order 1, 2, … matching position in this list. + :type rule_ids: [str], optional + """ + if rule_ids is not unset: + kwargs["rule_ids"] = rule_ids + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_order_data.py b/datadog_api_client/v2/model/tag_indexing_rule_order_data.py new file mode 100644 index 0000000000..ba459f7f56 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_order_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_order_attributes import TagIndexingRuleOrderAttributes + from datadog_api_client.v2.model.tag_indexing_rule_type import TagIndexingRuleType + +class TagIndexingRuleOrderData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_order_attributes import TagIndexingRuleOrderAttributes + from datadog_api_client.v2.model.tag_indexing_rule_type import TagIndexingRuleType + return { + "attributes": (TagIndexingRuleOrderAttributes,), + "type": (TagIndexingRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TagIndexingRuleOrderAttributes, type: TagIndexingRuleType, **kwargs): + """ + Data object for the reorder operation. + + :param attributes: Attributes for the reorder operation. + :type attributes: TagIndexingRuleOrderAttributes + + :param type: The tag indexing rule resource type. + :type type: TagIndexingRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/tag_indexing_rule_order_request.py b/datadog_api_client/v2/model/tag_indexing_rule_order_request.py new file mode 100644 index 0000000000..6b44d35961 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_order_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_order_data import TagIndexingRuleOrderData + +class TagIndexingRuleOrderRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_order_data import TagIndexingRuleOrderData + return { + "data": (TagIndexingRuleOrderData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TagIndexingRuleOrderData, **kwargs): + """ + Request body for reordering tag indexing rules. + + :param data: Data object for the reorder operation. + :type data: TagIndexingRuleOrderData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tag_indexing_rule_response.py b/datadog_api_client/v2/model/tag_indexing_rule_response.py new file mode 100644 index 0000000000..fbbe093dfe --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_data import TagIndexingRuleData + +class TagIndexingRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_data import TagIndexingRuleData + return { + "data": (TagIndexingRuleData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TagIndexingRuleData, UnsetType]=unset, **kwargs): + """ + Response containing a single tag indexing rule. + + :param data: A tag indexing rule resource object. + :type data: TagIndexingRuleData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_type.py b/datadog_api_client/v2/model/tag_indexing_rule_type.py new file mode 100644 index 0000000000..a817574d2e --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TagIndexingRuleType(ModelSimple): + """ + The tag indexing rule resource type. + + :param value: If omitted defaults to "tag_indexing_rules". Must be one of ["tag_indexing_rules"]. + :type value: str + """ + + allowed_values = { + "tag_indexing_rules", + } + TAG_INDEXING_RULES: ClassVar["TagIndexingRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TagIndexingRuleType.TAG_INDEXING_RULES = TagIndexingRuleType("tag_indexing_rules") diff --git a/datadog_api_client/v2/model/tag_indexing_rule_update_attributes.py b/datadog_api_client/v2/model/tag_indexing_rule_update_attributes.py new file mode 100644 index 0000000000..d5df91d5de --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_update_attributes.py @@ -0,0 +1,91 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_options import TagIndexingRuleOptions + +class TagIndexingRuleUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_options import TagIndexingRuleOptions + return { + "exclude_tags_mode": (bool,), + "ignored_metric_name_matches": ([str],), + "metric_name_matches": ([str],), + "name": (str,), + "options": (TagIndexingRuleOptions,), + "rule_order": (int,), + "tags": ([str],), + } + attribute_map = { + "exclude_tags_mode": "exclude_tags_mode", + "ignored_metric_name_matches": "ignored_metric_name_matches", + "metric_name_matches": "metric_name_matches", + "name": "name", + "options": "options", + "rule_order": "rule_order", + "tags": "tags", + } + + def __init__(self_, exclude_tags_mode: Union[bool, UnsetType]=unset, ignored_metric_name_matches: Union[List[str], UnsetType]=unset, metric_name_matches: Union[List[str], UnsetType]=unset, name: Union[str, UnsetType]=unset, options: Union[TagIndexingRuleOptions, UnsetType]=unset, rule_order: Union[int, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes for updating a tag indexing rule. All fields are optional; omitted fields are unchanged. + + :param exclude_tags_mode: When true, the rule excludes the listed tags and indexes all others. + :type exclude_tags_mode: bool, optional + + :param ignored_metric_name_matches: Metric name prefixes excluded from the rule's scope. + :type ignored_metric_name_matches: [str], optional + + :param metric_name_matches: Metric name prefixes (glob patterns) this rule applies to. + :type metric_name_matches: [str], optional + + :param name: Human-readable name for the rule. + :type name: str, optional + + :param options: Versioned configuration options for a tag indexing rule. + :type options: TagIndexingRuleOptions, optional + + :param rule_order: Desired evaluation order. Returns 409 if the value conflicts with another rule; use POST /api/v2/metrics/tag-indexing-rules/order for atomic re-sequencing. + :type rule_order: int, optional + + :param tags: Tag keys managed by this rule. + :type tags: [str], optional + """ + if exclude_tags_mode is not unset: + kwargs["exclude_tags_mode"] = exclude_tags_mode + if ignored_metric_name_matches is not unset: + kwargs["ignored_metric_name_matches"] = ignored_metric_name_matches + if metric_name_matches is not unset: + kwargs["metric_name_matches"] = metric_name_matches + if name is not unset: + kwargs["name"] = name + if options is not unset: + kwargs["options"] = options + if rule_order is not unset: + kwargs["rule_order"] = rule_order + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rule_update_data.py b/datadog_api_client/v2/model/tag_indexing_rule_update_data.py new file mode 100644 index 0000000000..9373fcd002 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_update_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_update_attributes import TagIndexingRuleUpdateAttributes + from datadog_api_client.v2.model.tag_indexing_rule_type import TagIndexingRuleType + +class TagIndexingRuleUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_update_attributes import TagIndexingRuleUpdateAttributes + from datadog_api_client.v2.model.tag_indexing_rule_type import TagIndexingRuleType + return { + "attributes": (TagIndexingRuleUpdateAttributes,), + "type": (TagIndexingRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: TagIndexingRuleType, attributes: Union[TagIndexingRuleUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating a tag indexing rule. + + :param attributes: Attributes for updating a tag indexing rule. All fields are optional; omitted fields are unchanged. + :type attributes: TagIndexingRuleUpdateAttributes, optional + + :param type: The tag indexing rule resource type. + :type type: TagIndexingRuleType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/tag_indexing_rule_update_request.py b/datadog_api_client/v2/model/tag_indexing_rule_update_request.py new file mode 100644 index 0000000000..85015b17ed --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rule_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_update_data import TagIndexingRuleUpdateData + +class TagIndexingRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_update_data import TagIndexingRuleUpdateData + return { + "data": (TagIndexingRuleUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TagIndexingRuleUpdateData, **kwargs): + """ + Request body for updating a tag indexing rule. + + :param data: Data object for updating a tag indexing rule. + :type data: TagIndexingRuleUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tag_indexing_rules_response.py b/datadog_api_client/v2/model/tag_indexing_rules_response.py new file mode 100644 index 0000000000..ee36691fe6 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rules_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_indexing_rule_data import TagIndexingRuleData + from datadog_api_client.v2.model.metrics_list_response_links import MetricsListResponseLinks + from datadog_api_client.v2.model.tag_indexing_rules_response_meta import TagIndexingRulesResponseMeta + +class TagIndexingRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_indexing_rule_data import TagIndexingRuleData + from datadog_api_client.v2.model.metrics_list_response_links import MetricsListResponseLinks + from datadog_api_client.v2.model.tag_indexing_rules_response_meta import TagIndexingRulesResponseMeta + return { + "data": ([TagIndexingRuleData],), + "links": (MetricsListResponseLinks,), + "meta": (TagIndexingRulesResponseMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[TagIndexingRuleData], UnsetType]=unset, links: Union[MetricsListResponseLinks, UnsetType]=unset, meta: Union[TagIndexingRulesResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing a page of tag indexing rules. + + :param data: Array of tag indexing rule objects. + :type data: [TagIndexingRuleData], optional + + :param links: Pagination links. Only present if pagination query parameters were provided. + :type links: MetricsListResponseLinks, optional + + :param meta: Pagination metadata for a list of tag indexing rules. + :type meta: TagIndexingRulesResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_indexing_rules_response_meta.py b/datadog_api_client/v2/model/tag_indexing_rules_response_meta.py new file mode 100644 index 0000000000..811e739fa2 --- /dev/null +++ b/datadog_api_client/v2/model/tag_indexing_rules_response_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TagIndexingRulesResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total": (int,), + } + attribute_map = { + "total": "total", + } + + def __init__(self_, total: Union[int, UnsetType]=unset, **kwargs): + """ + Pagination metadata for a list of tag indexing rules. + + :param total: Total number of tag indexing rules in the org. + :type total: int, optional + """ + if total is not unset: + kwargs["total"] = total + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_policies_list_response.py b/datadog_api_client/v2/model/tag_policies_list_response.py new file mode 100644 index 0000000000..64d0dffe9a --- /dev/null +++ b/datadog_api_client/v2/model/tag_policies_list_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_data import TagPolicyData + from datadog_api_client.v2.model.tag_policy_score_data import TagPolicyScoreData + +class TagPoliciesListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_data import TagPolicyData + from datadog_api_client.v2.model.tag_policy_score_data import TagPolicyScoreData + return { + "data": ([TagPolicyData],), + "included": ([TagPolicyScoreData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[TagPolicyData], included: Union[List[TagPolicyScoreData], UnsetType]=unset, **kwargs): + """ + A page of tag policies. + + :param data: An array of tag policy data objects. + :type data: [TagPolicyData] + + :param included: Related resources fetched alongside the primary tag policies. Populated when an ``include`` query parameter is supplied. + :type included: [TagPolicyScoreData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tag_policy_attributes.py b/datadog_api_client/v2/model/tag_policy_attributes.py new file mode 100644 index 0000000000..5c806136ff --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_attributes.py @@ -0,0 +1,143 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_type import TagPolicyType + from datadog_api_client.v2.model.tag_policy_source import TagPolicySource + +class TagPolicyAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_type import TagPolicyType + from datadog_api_client.v2.model.tag_policy_source import TagPolicySource + return { + "created_at": (datetime,), + "created_by": (str,), + "deleted_at": (datetime, none_type), + "deleted_by": (str, none_type), + "enabled": (bool,), + "modified_at": (datetime,), + "modified_by": (str,), + "negated": (bool,), + "policy_name": (str,), + "policy_type": (TagPolicyType,), + "required": (bool,), + "scope": (str,), + "source": (TagPolicySource,), + "tag_key": (str,), + "tag_value_patterns": ([str],), + "version": (int,), + } + attribute_map = { + "created_at": "created_at", + "created_by": "created_by", + "deleted_at": "deleted_at", + "deleted_by": "deleted_by", + "enabled": "enabled", + "modified_at": "modified_at", + "modified_by": "modified_by", + "negated": "negated", + "policy_name": "policy_name", + "policy_type": "policy_type", + "required": "required", + "scope": "scope", + "source": "source", + "tag_key": "tag_key", + "tag_value_patterns": "tag_value_patterns", + "version": "version", + } + + def __init__(self_, created_at: datetime, created_by: str, enabled: bool, modified_at: datetime, modified_by: str, negated: bool, policy_name: str, policy_type: TagPolicyType, required: bool, scope: str, source: TagPolicySource, tag_key: str, tag_value_patterns: List[str], version: int, deleted_at: Union[datetime, none_type, UnsetType]=unset, deleted_by: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + The attributes of a tag policy resource. + + :param created_at: The RFC 3339 timestamp at which the policy was created. + :type created_at: datetime + + :param created_by: The identifier of the user who created the policy. + :type created_by: str + + :param deleted_at: The RFC 3339 timestamp at which the policy was soft-deleted. ``null`` if the policy has not been deleted. Only present when ``include_deleted=true`` is requested. + :type deleted_at: datetime, none_type, optional + + :param deleted_by: The identifier of the user who soft-deleted the policy. ``null`` if the policy has not been deleted. + :type deleted_by: str, none_type, optional + + :param enabled: Whether the policy is currently enforced. + :type enabled: bool + + :param modified_at: The RFC 3339 timestamp at which the policy was last modified. + :type modified_at: datetime + + :param modified_by: The identifier of the user who last modified the policy. + :type modified_by: str + + :param negated: When ``true`` , the policy matches tag values that do NOT match any of the supplied patterns. + :type negated: bool + + :param policy_name: Human-readable name for the tag policy. + :type policy_name: str + + :param policy_type: How the policy is enforced. ``blocking`` rejects telemetry that violates the policy. + ``surfacing`` only highlights non-compliant telemetry without blocking it. + :type policy_type: TagPolicyType + + :param required: When ``true`` , telemetry without this tag is treated as a violation. + :type required: bool + + :param scope: The scope the policy applies within. + :type scope: str + + :param source: The telemetry source that a tag policy applies to. + :type source: TagPolicySource + + :param tag_key: The tag key that the policy governs. + :type tag_key: str + + :param tag_value_patterns: The patterns that valid values for the tag key must match. + :type tag_value_patterns: [str] + + :param version: A monotonically increasing version counter that is incremented on each update. + :type version: int + """ + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if deleted_by is not unset: + kwargs["deleted_by"] = deleted_by + super().__init__(kwargs) + + + self_.created_at = created_at + self_.created_by = created_by + self_.enabled = enabled + self_.modified_at = modified_at + self_.modified_by = modified_by + self_.negated = negated + self_.policy_name = policy_name + self_.policy_type = policy_type + self_.required = required + self_.scope = scope + self_.source = source + self_.tag_key = tag_key + self_.tag_value_patterns = tag_value_patterns + self_.version = version diff --git a/datadog_api_client/v2/model/tag_policy_create_attributes.py b/datadog_api_client/v2/model/tag_policy_create_attributes.py new file mode 100644 index 0000000000..c76058ea79 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_create_attributes.py @@ -0,0 +1,109 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_create_type import TagPolicyCreateType + from datadog_api_client.v2.model.tag_policy_source import TagPolicySource + +class TagPolicyCreateAttributes(ModelNormal): + validations = { + "tag_value_patterns": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_create_type import TagPolicyCreateType + from datadog_api_client.v2.model.tag_policy_source import TagPolicySource + return { + "enabled": (bool,), + "negated": (bool,), + "policy_name": (str,), + "policy_type": (TagPolicyCreateType,), + "required": (bool,), + "scope": (str,), + "source": (TagPolicySource,), + "tag_key": (str,), + "tag_value_patterns": ([str],), + } + attribute_map = { + "enabled": "enabled", + "negated": "negated", + "policy_name": "policy_name", + "policy_type": "policy_type", + "required": "required", + "scope": "scope", + "source": "source", + "tag_key": "tag_key", + "tag_value_patterns": "tag_value_patterns", + } + + def __init__(self_, policy_name: str, policy_type: TagPolicyCreateType, scope: str, source: TagPolicySource, tag_key: str, tag_value_patterns: List[str], enabled: Union[bool, UnsetType]=unset, negated: Union[bool, UnsetType]=unset, required: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes that can be supplied when creating a tag policy. + + :param enabled: Whether the policy is currently enforced. Defaults to ``true`` for newly created policies. + :type enabled: bool, optional + + :param negated: When ``true`` , the policy matches tag values that do NOT match any of the supplied patterns. Defaults to ``false``. + :type negated: bool, optional + + :param policy_name: Human-readable name for the tag policy. + :type policy_name: str + + :param policy_type: The policy type allowed when creating a tag policy. Only ``surfacing`` is accepted at + creation time. + :type policy_type: TagPolicyCreateType + + :param required: When ``true`` , telemetry without this tag is treated as a violation. Defaults to ``false``. + :type required: bool, optional + + :param scope: The scope the policy applies within. Typically an environment, team, or + organization-level identifier used to limit where the policy is enforced. + :type scope: str + + :param source: The telemetry source that a tag policy applies to. + :type source: TagPolicySource + + :param tag_key: The tag key that the policy governs (for example, ``service`` ). + :type tag_key: str + + :param tag_value_patterns: One or more patterns that valid values for the tag key must match. At least one + pattern is required. + :type tag_value_patterns: [str] + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if negated is not unset: + kwargs["negated"] = negated + if required is not unset: + kwargs["required"] = required + super().__init__(kwargs) + + + self_.policy_name = policy_name + self_.policy_type = policy_type + self_.scope = scope + self_.source = source + self_.tag_key = tag_key + self_.tag_value_patterns = tag_value_patterns diff --git a/datadog_api_client/v2/model/tag_policy_create_data.py b/datadog_api_client/v2/model/tag_policy_create_data.py new file mode 100644 index 0000000000..dd814d76ad --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_create_attributes import TagPolicyCreateAttributes + from datadog_api_client.v2.model.tag_policy_resource_type import TagPolicyResourceType + +class TagPolicyCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_create_attributes import TagPolicyCreateAttributes + from datadog_api_client.v2.model.tag_policy_resource_type import TagPolicyResourceType + return { + "attributes": (TagPolicyCreateAttributes,), + "type": (TagPolicyResourceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TagPolicyCreateAttributes, type: TagPolicyResourceType, **kwargs): + """ + Data object for creating a tag policy. + + :param attributes: Attributes that can be supplied when creating a tag policy. + :type attributes: TagPolicyCreateAttributes + + :param type: JSON:API resource type for a tag policy. + :type type: TagPolicyResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/tag_policy_create_request.py b/datadog_api_client/v2/model/tag_policy_create_request.py new file mode 100644 index 0000000000..4a9063bd61 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_create_data import TagPolicyCreateData + +class TagPolicyCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_create_data import TagPolicyCreateData + return { + "data": (TagPolicyCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TagPolicyCreateData, **kwargs): + """ + Payload for creating a new tag policy. + + :param data: Data object for creating a tag policy. + :type data: TagPolicyCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tag_policy_create_type.py b/datadog_api_client/v2/model/tag_policy_create_type.py new file mode 100644 index 0000000000..a06022b716 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_create_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TagPolicyCreateType(ModelSimple): + """ + The policy type allowed when creating a tag policy. Only `surfacing` is accepted at + creation time. + + :param value: If omitted defaults to "surfacing". Must be one of ["surfacing"]. + :type value: str + """ + + allowed_values = { + "surfacing", + } + SURFACING: ClassVar["TagPolicyCreateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TagPolicyCreateType.SURFACING = TagPolicyCreateType("surfacing") diff --git a/datadog_api_client/v2/model/tag_policy_data.py b/datadog_api_client/v2/model/tag_policy_data.py new file mode 100644 index 0000000000..a7835939b1 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_attributes import TagPolicyAttributes + from datadog_api_client.v2.model.tag_policy_relationships import TagPolicyRelationships + from datadog_api_client.v2.model.tag_policy_resource_type import TagPolicyResourceType + +class TagPolicyData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_attributes import TagPolicyAttributes + from datadog_api_client.v2.model.tag_policy_relationships import TagPolicyRelationships + from datadog_api_client.v2.model.tag_policy_resource_type import TagPolicyResourceType + return { + "attributes": (TagPolicyAttributes,), + "id": (str,), + "relationships": (TagPolicyRelationships,), + "type": (TagPolicyResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: TagPolicyAttributes, id: str, type: TagPolicyResourceType, relationships: Union[TagPolicyRelationships, UnsetType]=unset, **kwargs): + """ + A tag policy resource. + + :param attributes: The attributes of a tag policy resource. + :type attributes: TagPolicyAttributes + + :param id: The unique identifier of the tag policy. + :type id: str + + :param relationships: Related resources for a tag policy. Only present when the corresponding ``include`` query parameter is supplied. + :type relationships: TagPolicyRelationships, optional + + :param type: JSON:API resource type for a tag policy. + :type type: TagPolicyResourceType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/tag_policy_include.py b/datadog_api_client/v2/model/tag_policy_include.py new file mode 100644 index 0000000000..f7841af71d --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_include.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TagPolicyInclude(ModelSimple): + """ + A related resource to include alongside a tag policy in the response. Currently the only supported value is `score`. + + :param value: If omitted defaults to "score". Must be one of ["score"]. + :type value: str + """ + + allowed_values = { + "score", + } + SCORE: ClassVar["TagPolicyInclude"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TagPolicyInclude.SCORE = TagPolicyInclude("score") diff --git a/datadog_api_client/v2/model/tag_policy_relationships.py b/datadog_api_client/v2/model/tag_policy_relationships.py new file mode 100644 index 0000000000..2082440951 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_score_relationship import TagPolicyScoreRelationship + +class TagPolicyRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_score_relationship import TagPolicyScoreRelationship + return { + "score": (TagPolicyScoreRelationship,), + } + attribute_map = { + "score": "score", + } + + def __init__(self_, score: Union[TagPolicyScoreRelationship, UnsetType]=unset, **kwargs): + """ + Related resources for a tag policy. Only present when the corresponding ``include`` query parameter is supplied. + + :param score: A relationship to the compliance score resource for this policy. + :type score: TagPolicyScoreRelationship, optional + """ + if score is not unset: + kwargs["score"] = score + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_policy_resource_type.py b/datadog_api_client/v2/model/tag_policy_resource_type.py new file mode 100644 index 0000000000..c2c17a6f1e --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TagPolicyResourceType(ModelSimple): + """ + JSON:API resource type for a tag policy. + + :param value: If omitted defaults to "tag_policy". Must be one of ["tag_policy"]. + :type value: str + """ + + allowed_values = { + "tag_policy", + } + TAG_POLICY: ClassVar["TagPolicyResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TagPolicyResourceType.TAG_POLICY = TagPolicyResourceType("tag_policy") diff --git a/datadog_api_client/v2/model/tag_policy_response.py b/datadog_api_client/v2/model/tag_policy_response.py new file mode 100644 index 0000000000..949c045f64 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_data import TagPolicyData + from datadog_api_client.v2.model.tag_policy_score_data import TagPolicyScoreData + +class TagPolicyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_data import TagPolicyData + from datadog_api_client.v2.model.tag_policy_score_data import TagPolicyScoreData + return { + "data": (TagPolicyData,), + "included": ([TagPolicyScoreData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: TagPolicyData, included: Union[List[TagPolicyScoreData], UnsetType]=unset, **kwargs): + """ + A single tag policy. + + :param data: A tag policy resource. + :type data: TagPolicyData + + :param included: Related resources fetched alongside the primary tag policies. Populated when an ``include`` query parameter is supplied. + :type included: [TagPolicyScoreData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tag_policy_score_attributes.py b/datadog_api_client/v2/model/tag_policy_score_attributes.py new file mode 100644 index 0000000000..03534debc3 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_score_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TagPolicyScoreAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "score": (float, none_type), + "ts_end": (int,), + "ts_start": (int,), + "version": (int,), + } + attribute_map = { + "score": "score", + "ts_end": "ts_end", + "ts_start": "ts_start", + "version": "version", + } + + def __init__(self_, score: Union[float, none_type], ts_end: int, ts_start: int, version: int, **kwargs): + """ + Attributes of a tag policy compliance score. + + :param score: The compliance score for the policy over the requested time window, as a percentage + between 0 and 100. ``null`` indicates that no relevant telemetry was found. + :type score: float, none_type + + :param ts_end: End of the time window the score was computed over, as a Unix timestamp in milliseconds. + :type ts_end: int + + :param ts_start: Start of the time window the score was computed over, as a Unix timestamp in milliseconds. + :type ts_start: int + + :param version: The version of the tag policy that the score was computed against. + :type version: int + """ + super().__init__(kwargs) + + + self_.score = score + self_.ts_end = ts_end + self_.ts_start = ts_start + self_.version = version diff --git a/datadog_api_client/v2/model/tag_policy_score_data.py b/datadog_api_client/v2/model/tag_policy_score_data.py new file mode 100644 index 0000000000..4a3a6854a8 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_score_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_score_attributes import TagPolicyScoreAttributes + from datadog_api_client.v2.model.tag_policy_score_resource_type import TagPolicyScoreResourceType + +class TagPolicyScoreData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_score_attributes import TagPolicyScoreAttributes + from datadog_api_client.v2.model.tag_policy_score_resource_type import TagPolicyScoreResourceType + return { + "attributes": (TagPolicyScoreAttributes,), + "id": (str,), + "type": (TagPolicyScoreResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: TagPolicyScoreAttributes, id: str, type: TagPolicyScoreResourceType, **kwargs): + """ + A compliance score resource for a tag policy. + + :param attributes: Attributes of a tag policy compliance score. + :type attributes: TagPolicyScoreAttributes + + :param id: The unique identifier of the compliance score resource. + :type id: str + + :param type: JSON:API resource type for a tag policy compliance score. + :type type: TagPolicyScoreResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/tag_policy_score_relationship.py b/datadog_api_client/v2/model/tag_policy_score_relationship.py new file mode 100644 index 0000000000..e4f2650335 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_score_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_score_relationship_data import TagPolicyScoreRelationshipData + +class TagPolicyScoreRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_score_relationship_data import TagPolicyScoreRelationshipData + return { + "data": (TagPolicyScoreRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TagPolicyScoreRelationshipData, **kwargs): + """ + A relationship to the compliance score resource for this policy. + + :param data: Identifier of the related compliance score resource. + :type data: TagPolicyScoreRelationshipData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tag_policy_score_relationship_data.py b/datadog_api_client/v2/model/tag_policy_score_relationship_data.py new file mode 100644 index 0000000000..9e42022aec --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_score_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_score_resource_type import TagPolicyScoreResourceType + +class TagPolicyScoreRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_score_resource_type import TagPolicyScoreResourceType + return { + "id": (str,), + "type": (TagPolicyScoreResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TagPolicyScoreResourceType, **kwargs): + """ + Identifier of the related compliance score resource. + + :param id: The unique identifier of the related compliance score resource. + :type id: str + + :param type: JSON:API resource type for a tag policy compliance score. + :type type: TagPolicyScoreResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/tag_policy_score_resource_type.py b/datadog_api_client/v2/model/tag_policy_score_resource_type.py new file mode 100644 index 0000000000..55686ba632 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_score_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TagPolicyScoreResourceType(ModelSimple): + """ + JSON:API resource type for a tag policy compliance score. + + :param value: If omitted defaults to "tag_policy_score". Must be one of ["tag_policy_score"]. + :type value: str + """ + + allowed_values = { + "tag_policy_score", + } + TAG_POLICY_SCORE: ClassVar["TagPolicyScoreResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TagPolicyScoreResourceType.TAG_POLICY_SCORE = TagPolicyScoreResourceType("tag_policy_score") diff --git a/datadog_api_client/v2/model/tag_policy_score_response.py b/datadog_api_client/v2/model/tag_policy_score_response.py new file mode 100644 index 0000000000..fd8ae2e9ab --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_score_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_score_data import TagPolicyScoreData + +class TagPolicyScoreResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_score_data import TagPolicyScoreData + return { + "data": (TagPolicyScoreData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TagPolicyScoreData, **kwargs): + """ + A tag policy compliance score. + + :param data: A compliance score resource for a tag policy. + :type data: TagPolicyScoreData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tag_policy_source.py b/datadog_api_client/v2/model/tag_policy_source.py new file mode 100644 index 0000000000..171a4c92fc --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_source.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TagPolicySource(ModelSimple): + """ + The telemetry source that a tag policy applies to. + + :param value: Must be one of ["logs", "spans", "metrics", "rum", "feed"]. + :type value: str + """ + + allowed_values = { + "logs", + "spans", + "metrics", + "rum", + "feed", + } + LOGS: ClassVar["TagPolicySource"] + SPANS: ClassVar["TagPolicySource"] + METRICS: ClassVar["TagPolicySource"] + RUM: ClassVar["TagPolicySource"] + FEED: ClassVar["TagPolicySource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TagPolicySource.LOGS = TagPolicySource("logs") +TagPolicySource.SPANS = TagPolicySource("spans") +TagPolicySource.METRICS = TagPolicySource("metrics") +TagPolicySource.RUM = TagPolicySource("rum") +TagPolicySource.FEED = TagPolicySource("feed") diff --git a/datadog_api_client/v2/model/tag_policy_type.py b/datadog_api_client/v2/model/tag_policy_type.py new file mode 100644 index 0000000000..0e444e22b5 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TagPolicyType(ModelSimple): + """ + How the policy is enforced. `blocking` rejects telemetry that violates the policy. + `surfacing` only highlights non-compliant telemetry without blocking it. + + :param value: Must be one of ["blocking", "surfacing"]. + :type value: str + """ + + allowed_values = { + "blocking", + "surfacing", + } + BLOCKING: ClassVar["TagPolicyType"] + SURFACING: ClassVar["TagPolicyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TagPolicyType.BLOCKING = TagPolicyType("blocking") +TagPolicyType.SURFACING = TagPolicyType("surfacing") diff --git a/datadog_api_client/v2/model/tag_policy_update_attributes.py b/datadog_api_client/v2/model/tag_policy_update_attributes.py new file mode 100644 index 0000000000..09e8e98731 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_update_attributes.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_type import TagPolicyType + +class TagPolicyUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_type import TagPolicyType + return { + "enabled": (bool,), + "negated": (bool,), + "policy_name": (str,), + "policy_type": (TagPolicyType,), + "required": (bool,), + "scope": (str,), + "tag_key": (str,), + "tag_value_patterns": ([str],), + } + attribute_map = { + "enabled": "enabled", + "negated": "negated", + "policy_name": "policy_name", + "policy_type": "policy_type", + "required": "required", + "scope": "scope", + "tag_key": "tag_key", + "tag_value_patterns": "tag_value_patterns", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, negated: Union[bool, UnsetType]=unset, policy_name: Union[str, UnsetType]=unset, policy_type: Union[TagPolicyType, UnsetType]=unset, required: Union[bool, UnsetType]=unset, scope: Union[str, UnsetType]=unset, tag_key: Union[str, UnsetType]=unset, tag_value_patterns: Union[List[str], UnsetType]=unset, **kwargs): + """ + Mutable attributes of a tag policy. Each field is optional; omitting a field leaves its + current value unchanged. The ``source`` of a policy cannot be changed. + + :param enabled: Whether the policy is currently enforced. + :type enabled: bool, optional + + :param negated: When ``true`` , the policy matches tag values that do NOT match any of the supplied patterns. + :type negated: bool, optional + + :param policy_name: Human-readable name for the tag policy. + :type policy_name: str, optional + + :param policy_type: How the policy is enforced. ``blocking`` rejects telemetry that violates the policy. + ``surfacing`` only highlights non-compliant telemetry without blocking it. + :type policy_type: TagPolicyType, optional + + :param required: When ``true`` , telemetry without this tag is treated as a violation. + :type required: bool, optional + + :param scope: The scope the policy applies within. + :type scope: str, optional + + :param tag_key: The tag key that the policy governs. + :type tag_key: str, optional + + :param tag_value_patterns: One or more patterns that valid values for the tag key must match. + :type tag_value_patterns: [str], optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if negated is not unset: + kwargs["negated"] = negated + if policy_name is not unset: + kwargs["policy_name"] = policy_name + if policy_type is not unset: + kwargs["policy_type"] = policy_type + if required is not unset: + kwargs["required"] = required + if scope is not unset: + kwargs["scope"] = scope + if tag_key is not unset: + kwargs["tag_key"] = tag_key + if tag_value_patterns is not unset: + kwargs["tag_value_patterns"] = tag_value_patterns + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tag_policy_update_data.py b/datadog_api_client/v2/model/tag_policy_update_data.py new file mode 100644 index 0000000000..c549b350b9 --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_update_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_update_attributes import TagPolicyUpdateAttributes + from datadog_api_client.v2.model.tag_policy_resource_type import TagPolicyResourceType + +class TagPolicyUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_update_attributes import TagPolicyUpdateAttributes + from datadog_api_client.v2.model.tag_policy_resource_type import TagPolicyResourceType + return { + "attributes": (TagPolicyUpdateAttributes,), + "id": (str,), + "type": (TagPolicyResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TagPolicyResourceType, attributes: Union[TagPolicyUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Data object for updating a tag policy. + + :param attributes: Mutable attributes of a tag policy. Each field is optional; omitting a field leaves its + current value unchanged. The ``source`` of a policy cannot be changed. + :type attributes: TagPolicyUpdateAttributes, optional + + :param id: The unique identifier of the tag policy being updated. + :type id: str + + :param type: JSON:API resource type for a tag policy. + :type type: TagPolicyResourceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/tag_policy_update_request.py b/datadog_api_client/v2/model/tag_policy_update_request.py new file mode 100644 index 0000000000..83ed10611d --- /dev/null +++ b/datadog_api_client/v2/model/tag_policy_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tag_policy_update_data import TagPolicyUpdateData + +class TagPolicyUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tag_policy_update_data import TagPolicyUpdateData + return { + "data": (TagPolicyUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TagPolicyUpdateData, **kwargs): + """ + Payload for updating an existing tag policy. Only the supplied fields are modified. + + :param data: Data object for updating a tag policy. + :type data: TagPolicyUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tags_event_attribute.py b/datadog_api_client/v2/model/tags_event_attribute.py new file mode 100644 index 0000000000..a7c7144790 --- /dev/null +++ b/datadog_api_client/v2/model/tags_event_attribute.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TagsEventAttribute(ModelSimple): + """ + Array of tags associated with your event. + + + :type value: [str] + """ + + + + @cached_property + def openapi_types(_): + return { + "value": ([str],), + } diff --git a/datadog_api_client/v2/model/targeting_rule.py b/datadog_api_client/v2/model/targeting_rule.py new file mode 100644 index 0000000000..6f74254e54 --- /dev/null +++ b/datadog_api_client/v2/model/targeting_rule.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.condition import Condition + +class TargetingRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.condition import Condition + return { + "conditions": ([Condition],), + "created_at": (datetime,), + "id": (UUID,), + "updated_at": (datetime,), + } + attribute_map = { + "conditions": "conditions", + "created_at": "created_at", + "id": "id", + "updated_at": "updated_at", + } + + def __init__(self_, conditions: List[Condition], created_at: datetime, id: UUID, updated_at: datetime, **kwargs): + """ + Targeting rule details. + + :param conditions: Conditions evaluated by this targeting rule. + :type conditions: [Condition] + + :param created_at: The timestamp when the targeting rule was created. + :type created_at: datetime + + :param id: The unique identifier of the targeting rule. + :type id: UUID + + :param updated_at: The timestamp when the targeting rule was last updated. + :type updated_at: datetime + """ + super().__init__(kwargs) + + + self_.conditions = conditions + self_.created_at = created_at + self_.id = id + self_.updated_at = updated_at diff --git a/datadog_api_client/v2/model/targeting_rule_request.py b/datadog_api_client/v2/model/targeting_rule_request.py new file mode 100644 index 0000000000..2d2429e9c6 --- /dev/null +++ b/datadog_api_client/v2/model/targeting_rule_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.condition_request import ConditionRequest + +class TargetingRuleRequest(ModelNormal): + validations = { + "conditions": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.condition_request import ConditionRequest + return { + "conditions": ([ConditionRequest],), + } + attribute_map = { + "conditions": "conditions", + } + + def __init__(self_, conditions: List[ConditionRequest], **kwargs): + """ + Targeting rule request payload. + + :param conditions: Conditions that must match for this rule. + :type conditions: [ConditionRequest] + """ + super().__init__(kwargs) + + + self_.conditions = conditions diff --git a/datadog_api_client/v2/model/team.py b/datadog_api_client/v2/model/team.py new file mode 100644 index 0000000000..0810cd6bb7 --- /dev/null +++ b/datadog_api_client/v2/model/team.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_attributes import TeamAttributes + from datadog_api_client.v2.model.team_relationships import TeamRelationships + from datadog_api_client.v2.model.team_type import TeamType + +class Team(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_attributes import TeamAttributes + from datadog_api_client.v2.model.team_relationships import TeamRelationships + from datadog_api_client.v2.model.team_type import TeamType + return { + "attributes": (TeamAttributes,), + "id": (str,), + "relationships": (TeamRelationships,), + "type": (TeamType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: TeamAttributes, id: str, type: TeamType, relationships: Union[TeamRelationships, UnsetType]=unset, **kwargs): + """ + A team + + :param attributes: Team attributes + :type attributes: TeamAttributes + + :param id: The team's identifier + :type id: str + + :param relationships: Resources related to a team + :type relationships: TeamRelationships, optional + + :param type: Team type + :type type: TeamType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_attributes.py b/datadog_api_client/v2/model/team_attributes.py new file mode 100644 index 0000000000..a61807053d --- /dev/null +++ b/datadog_api_client/v2/model/team_attributes.py @@ -0,0 +1,149 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamAttributes(ModelNormal): + validations = { + "handle": { + "max_length": 195, + }, + "link_count": { + "inclusive_maximum": 2147483647, + }, + "name": { + "max_length": 200, + }, + "summary": { + "max_length": 120, + }, + "user_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "avatar": (str, none_type), + "banner": (int, none_type), + "created_at": (datetime,), + "description": (str, none_type), + "handle": (str,), + "hidden_modules": ([str], none_type), + "is_managed": (bool,), + "link_count": (int,), + "modified_at": (datetime,), + "name": (str,), + "summary": (str, none_type), + "user_count": (int,), + "visible_modules": ([str], none_type), + } + attribute_map = { + "avatar": "avatar", + "banner": "banner", + "created_at": "created_at", + "description": "description", + "handle": "handle", + "hidden_modules": "hidden_modules", + "is_managed": "is_managed", + "link_count": "link_count", + "modified_at": "modified_at", + "name": "name", + "summary": "summary", + "user_count": "user_count", + "visible_modules": "visible_modules", + } + read_only_vars = { + "link_count", + "user_count", + } + + def __init__(self_, handle: str, name: str, avatar: Union[str, none_type, UnsetType]=unset, banner: Union[int, none_type, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, description: Union[str, none_type, UnsetType]=unset, hidden_modules: Union[List[str], none_type, UnsetType]=unset, is_managed: Union[bool, UnsetType]=unset, link_count: Union[int, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, summary: Union[str, none_type, UnsetType]=unset, user_count: Union[int, UnsetType]=unset, visible_modules: Union[List[str], none_type, UnsetType]=unset, **kwargs): + """ + Team attributes + + :param avatar: Unicode representation of the avatar for the team, limited to a single grapheme + :type avatar: str, none_type, optional + + :param banner: Banner selection for the team + :type banner: int, none_type, optional + + :param created_at: Creation date of the team + :type created_at: datetime, optional + + :param description: Free-form markdown description/content for the team's homepage + :type description: str, none_type, optional + + :param handle: The team's identifier + :type handle: str + + :param hidden_modules: Collection of hidden modules for the team + :type hidden_modules: [str], none_type, optional + + :param is_managed: Whether the team is managed from an external source + :type is_managed: bool, optional + + :param link_count: The number of links belonging to the team + :type link_count: int, optional + + :param modified_at: Modification date of the team + :type modified_at: datetime, optional + + :param name: The name of the team + :type name: str + + :param summary: A brief summary of the team, derived from the ``description`` + :type summary: str, none_type, optional + + :param user_count: The number of users belonging to the team + :type user_count: int, optional + + :param visible_modules: Collection of visible modules for the team + :type visible_modules: [str], none_type, optional + """ + if avatar is not unset: + kwargs["avatar"] = avatar + if banner is not unset: + kwargs["banner"] = banner + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if hidden_modules is not unset: + kwargs["hidden_modules"] = hidden_modules + if is_managed is not unset: + kwargs["is_managed"] = is_managed + if link_count is not unset: + kwargs["link_count"] = link_count + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if summary is not unset: + kwargs["summary"] = summary + if user_count is not unset: + kwargs["user_count"] = user_count + if visible_modules is not unset: + kwargs["visible_modules"] = visible_modules + super().__init__(kwargs) + + + self_.handle = handle + self_.name = name diff --git a/datadog_api_client/v2/model/team_connection.py b/datadog_api_client/v2/model/team_connection.py new file mode 100644 index 0000000000..a605b0c171 --- /dev/null +++ b/datadog_api_client/v2/model/team_connection.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_connection_attributes import TeamConnectionAttributes + from datadog_api_client.v2.model.team_connection_relationships import TeamConnectionRelationships + from datadog_api_client.v2.model.team_connection_type import TeamConnectionType + +class TeamConnection(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_connection_attributes import TeamConnectionAttributes + from datadog_api_client.v2.model.team_connection_relationships import TeamConnectionRelationships + from datadog_api_client.v2.model.team_connection_type import TeamConnectionType + return { + "attributes": (TeamConnectionAttributes,), + "id": (str,), + "relationships": (TeamConnectionRelationships,), + "type": (TeamConnectionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: TeamConnectionType, attributes: Union[TeamConnectionAttributes, UnsetType]=unset, relationships: Union[TeamConnectionRelationships, UnsetType]=unset, **kwargs): + """ + A relationship between a Datadog team and a team from another external system. + + :param attributes: Attributes of the team connection. + :type attributes: TeamConnectionAttributes, optional + + :param id: The unique identifier of the team connection. + :type id: str + + :param relationships: Relationships of the team connection. + :type relationships: TeamConnectionRelationships, optional + + :param type: Team connection resource type. + :type type: TeamConnectionType + """ + 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/datadog_api_client/v2/model/team_connection_attributes.py b/datadog_api_client/v2/model/team_connection_attributes.py new file mode 100644 index 0000000000..290da42efa --- /dev/null +++ b/datadog_api_client/v2/model/team_connection_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamConnectionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "managed_by": (str,), + "source": (str,), + } + attribute_map = { + "managed_by": "managed_by", + "source": "source", + } + + def __init__(self_, managed_by: Union[str, UnsetType]=unset, source: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the team connection. + + :param managed_by: The entity that manages this team connection. + :type managed_by: str, optional + + :param source: The name of the external source. + :type source: str, optional + """ + if managed_by is not unset: + kwargs["managed_by"] = managed_by + if source is not unset: + kwargs["source"] = source + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_connection_create_data.py b/datadog_api_client/v2/model/team_connection_create_data.py new file mode 100644 index 0000000000..3cfae25ae1 --- /dev/null +++ b/datadog_api_client/v2/model/team_connection_create_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_connection_attributes import TeamConnectionAttributes + from datadog_api_client.v2.model.team_connection_relationships import TeamConnectionRelationships + from datadog_api_client.v2.model.team_connection_type import TeamConnectionType + +class TeamConnectionCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_connection_attributes import TeamConnectionAttributes + from datadog_api_client.v2.model.team_connection_relationships import TeamConnectionRelationships + from datadog_api_client.v2.model.team_connection_type import TeamConnectionType + return { + "attributes": (TeamConnectionAttributes,), + "relationships": (TeamConnectionRelationships,), + "type": (TeamConnectionType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: TeamConnectionType, attributes: Union[TeamConnectionAttributes, UnsetType]=unset, relationships: Union[TeamConnectionRelationships, UnsetType]=unset, **kwargs): + """ + Data for creating a team connection. + + :param attributes: Attributes of the team connection. + :type attributes: TeamConnectionAttributes, optional + + :param relationships: Relationships of the team connection. + :type relationships: TeamConnectionRelationships, optional + + :param type: Team connection resource type. + :type type: TeamConnectionType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/team_connection_create_request.py b/datadog_api_client/v2/model/team_connection_create_request.py new file mode 100644 index 0000000000..f43025f204 --- /dev/null +++ b/datadog_api_client/v2/model/team_connection_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_connection_create_data import TeamConnectionCreateData + +class TeamConnectionCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_connection_create_data import TeamConnectionCreateData + return { + "data": ([TeamConnectionCreateData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[TeamConnectionCreateData], **kwargs): + """ + Request for creating team connections. + + :param data: Array of team connections to create. + :type data: [TeamConnectionCreateData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_connection_delete_request.py b/datadog_api_client/v2/model/team_connection_delete_request.py new file mode 100644 index 0000000000..c6f194d1d6 --- /dev/null +++ b/datadog_api_client/v2/model/team_connection_delete_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_connection_delete_request_data_item import TeamConnectionDeleteRequestDataItem + +class TeamConnectionDeleteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_connection_delete_request_data_item import TeamConnectionDeleteRequestDataItem + return { + "data": ([TeamConnectionDeleteRequestDataItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[TeamConnectionDeleteRequestDataItem], **kwargs): + """ + Request for deleting team connections. + + :param data: Array of team connection IDs to delete. + :type data: [TeamConnectionDeleteRequestDataItem] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_connection_delete_request_data_item.py b/datadog_api_client/v2/model/team_connection_delete_request_data_item.py new file mode 100644 index 0000000000..754d620c68 --- /dev/null +++ b/datadog_api_client/v2/model/team_connection_delete_request_data_item.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_connection_type import TeamConnectionType + +class TeamConnectionDeleteRequestDataItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_connection_type import TeamConnectionType + return { + "id": (str,), + "type": (TeamConnectionType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamConnectionType, **kwargs): + """ + A collection of connection ids to delete. + + :param id: The unique identifier of the team connection to delete. + :type id: str + + :param type: Team connection resource type. + :type type: TeamConnectionType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_connection_relationships.py b/datadog_api_client/v2/model/team_connection_relationships.py new file mode 100644 index 0000000000..f96aa5a37e --- /dev/null +++ b/datadog_api_client/v2/model/team_connection_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.connected_team_ref import ConnectedTeamRef + from datadog_api_client.v2.model.team_ref import TeamRef + +class TeamConnectionRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.connected_team_ref import ConnectedTeamRef + from datadog_api_client.v2.model.team_ref import TeamRef + return { + "connected_team": (ConnectedTeamRef,), + "team": (TeamRef,), + } + attribute_map = { + "connected_team": "connected_team", + "team": "team", + } + + def __init__(self_, connected_team: Union[ConnectedTeamRef, UnsetType]=unset, team: Union[TeamRef, UnsetType]=unset, **kwargs): + """ + Relationships of the team connection. + + :param connected_team: Reference to a team from an external system. + :type connected_team: ConnectedTeamRef, optional + + :param team: Reference to a Datadog team. + :type team: TeamRef, optional + """ + if connected_team is not unset: + kwargs["connected_team"] = connected_team + if team is not unset: + kwargs["team"] = team + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_connection_type.py b/datadog_api_client/v2/model/team_connection_type.py new file mode 100644 index 0000000000..ac639e6b61 --- /dev/null +++ b/datadog_api_client/v2/model/team_connection_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamConnectionType(ModelSimple): + """ + Team connection resource type. + + :param value: If omitted defaults to "team_connection". Must be one of ["team_connection"]. + :type value: str + """ + + allowed_values = { + "team_connection", + } + TEAM_CONNECTION: ClassVar["TeamConnectionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamConnectionType.TEAM_CONNECTION = TeamConnectionType("team_connection") diff --git a/datadog_api_client/v2/model/team_connections_response.py b/datadog_api_client/v2/model/team_connections_response.py new file mode 100644 index 0000000000..49f9fb5fe3 --- /dev/null +++ b/datadog_api_client/v2/model/team_connections_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_connection import TeamConnection + from datadog_api_client.v2.model.connections_response_meta import ConnectionsResponseMeta + +class TeamConnectionsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_connection import TeamConnection + from datadog_api_client.v2.model.connections_response_meta import ConnectionsResponseMeta + return { + "data": ([TeamConnection],), + "meta": (ConnectionsResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[TeamConnection], UnsetType]=unset, meta: Union[ConnectionsResponseMeta, UnsetType]=unset, **kwargs): + """ + Response containing information about multiple team connections. + + :param data: Array of team connections. + :type data: [TeamConnection], optional + + :param meta: Connections response metadata. + :type meta: ConnectionsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_create.py b/datadog_api_client/v2/model/team_create.py new file mode 100644 index 0000000000..c968d325ff --- /dev/null +++ b/datadog_api_client/v2/model/team_create.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_create_attributes import TeamCreateAttributes + from datadog_api_client.v2.model.team_create_relationships import TeamCreateRelationships + from datadog_api_client.v2.model.team_type import TeamType + +class TeamCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_create_attributes import TeamCreateAttributes + from datadog_api_client.v2.model.team_create_relationships import TeamCreateRelationships + from datadog_api_client.v2.model.team_type import TeamType + return { + "attributes": (TeamCreateAttributes,), + "relationships": (TeamCreateRelationships,), + "type": (TeamType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: TeamCreateAttributes, type: TeamType, relationships: Union[TeamCreateRelationships, UnsetType]=unset, **kwargs): + """ + Team create + + :param attributes: Team creation attributes + :type attributes: TeamCreateAttributes + + :param relationships: Relationships formed with the team on creation + :type relationships: TeamCreateRelationships, optional + + :param type: Team type + :type type: TeamType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/team_create_attributes.py b/datadog_api_client/v2/model/team_create_attributes.py new file mode 100644 index 0000000000..58107f513d --- /dev/null +++ b/datadog_api_client/v2/model/team_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamCreateAttributes(ModelNormal): + validations = { + "handle": { + "max_length": 195, + }, + "name": { + "max_length": 200, + }, + } + @cached_property + def openapi_types(_): + return { + "avatar": (str, none_type), + "banner": (int, none_type), + "description": (str,), + "handle": (str,), + "hidden_modules": ([str],), + "name": (str,), + "visible_modules": ([str],), + } + attribute_map = { + "avatar": "avatar", + "banner": "banner", + "description": "description", + "handle": "handle", + "hidden_modules": "hidden_modules", + "name": "name", + "visible_modules": "visible_modules", + } + + def __init__(self_, handle: str, name: str, avatar: Union[str, none_type, UnsetType]=unset, banner: Union[int, none_type, UnsetType]=unset, description: Union[str, UnsetType]=unset, hidden_modules: Union[List[str], UnsetType]=unset, visible_modules: Union[List[str], UnsetType]=unset, **kwargs): + """ + Team creation attributes + + :param avatar: Unicode representation of the avatar for the team, limited to a single grapheme + :type avatar: str, none_type, optional + + :param banner: Banner selection for the team + :type banner: int, none_type, optional + + :param description: Free-form markdown description/content for the team's homepage + :type description: str, optional + + :param handle: The team's identifier + :type handle: str + + :param hidden_modules: Collection of hidden modules for the team + :type hidden_modules: [str], optional + + :param name: The name of the team + :type name: str + + :param visible_modules: Collection of visible modules for the team + :type visible_modules: [str], optional + """ + if avatar is not unset: + kwargs["avatar"] = avatar + if banner is not unset: + kwargs["banner"] = banner + if description is not unset: + kwargs["description"] = description + if hidden_modules is not unset: + kwargs["hidden_modules"] = hidden_modules + if visible_modules is not unset: + kwargs["visible_modules"] = visible_modules + super().__init__(kwargs) + + + self_.handle = handle + self_.name = name diff --git a/datadog_api_client/v2/model/team_create_relationships.py b/datadog_api_client/v2/model/team_create_relationships.py new file mode 100644 index 0000000000..e80e9d484c --- /dev/null +++ b/datadog_api_client/v2/model/team_create_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_users import RelationshipToUsers + +class TeamCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_users import RelationshipToUsers + return { + "users": (RelationshipToUsers,), + } + attribute_map = { + "users": "users", + } + + def __init__(self_, users: Union[RelationshipToUsers, UnsetType]=unset, **kwargs): + """ + Relationships formed with the team on creation + + :param users: Relationship to users. + :type users: RelationshipToUsers, optional + """ + if users is not unset: + kwargs["users"] = users + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_create_request.py b/datadog_api_client/v2/model/team_create_request.py new file mode 100644 index 0000000000..e165d4f3d1 --- /dev/null +++ b/datadog_api_client/v2/model/team_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_create import TeamCreate + +class TeamCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_create import TeamCreate + return { + "data": (TeamCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamCreate, **kwargs): + """ + Request to create a team + + :param data: Team create + :type data: TeamCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_hierarchy_link.py b/datadog_api_client/v2/model/team_hierarchy_link.py new file mode 100644 index 0000000000..2eada05e21 --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link_attributes import TeamHierarchyLinkAttributes + from datadog_api_client.v2.model.team_hierarchy_link_relationships import TeamHierarchyLinkRelationships + from datadog_api_client.v2.model.team_hierarchy_link_type import TeamHierarchyLinkType + +class TeamHierarchyLink(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link_attributes import TeamHierarchyLinkAttributes + from datadog_api_client.v2.model.team_hierarchy_link_relationships import TeamHierarchyLinkRelationships + from datadog_api_client.v2.model.team_hierarchy_link_type import TeamHierarchyLinkType + return { + "attributes": (TeamHierarchyLinkAttributes,), + "id": (str,), + "relationships": (TeamHierarchyLinkRelationships,), + "type": (TeamHierarchyLinkType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: TeamHierarchyLinkAttributes, id: str, type: TeamHierarchyLinkType, relationships: Union[TeamHierarchyLinkRelationships, UnsetType]=unset, **kwargs): + """ + Team hierarchy link + + :param attributes: Team hierarchy link attributes + :type attributes: TeamHierarchyLinkAttributes + + :param id: The team hierarchy link's identifier + :type id: str + + :param relationships: Team hierarchy link relationships + :type relationships: TeamHierarchyLinkRelationships, optional + + :param type: Team hierarchy link type + :type type: TeamHierarchyLinkType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_hierarchy_link_attributes.py b/datadog_api_client/v2/model/team_hierarchy_link_attributes.py new file mode 100644 index 0000000000..4df84c1169 --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamHierarchyLinkAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "provisioned_by": (str,), + } + attribute_map = { + "created_at": "created_at", + "provisioned_by": "provisioned_by", + } + + def __init__(self_, created_at: datetime, provisioned_by: str, **kwargs): + """ + Team hierarchy link attributes + + :param created_at: Timestamp when the team hierarchy link was created + :type created_at: datetime + + :param provisioned_by: The provisioner of the team hierarchy link + :type provisioned_by: str + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.provisioned_by = provisioned_by diff --git a/datadog_api_client/v2/model/team_hierarchy_link_create.py b/datadog_api_client/v2/model/team_hierarchy_link_create.py new file mode 100644 index 0000000000..dcb32c3a93 --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link_create_relationships import TeamHierarchyLinkCreateRelationships + from datadog_api_client.v2.model.team_hierarchy_link_type import TeamHierarchyLinkType + +class TeamHierarchyLinkCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link_create_relationships import TeamHierarchyLinkCreateRelationships + from datadog_api_client.v2.model.team_hierarchy_link_type import TeamHierarchyLinkType + return { + "relationships": (TeamHierarchyLinkCreateRelationships,), + "type": (TeamHierarchyLinkType,), + } + attribute_map = { + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, relationships: TeamHierarchyLinkCreateRelationships, type: TeamHierarchyLinkType, **kwargs): + """ + Data provided when creating a team hierarchy link + + :param relationships: The related teams that will be connected by the team hierarchy link + :type relationships: TeamHierarchyLinkCreateRelationships + + :param type: Team hierarchy link type + :type type: TeamHierarchyLinkType + """ + super().__init__(kwargs) + + + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/team_hierarchy_link_create_relationships.py b/datadog_api_client/v2/model/team_hierarchy_link_create_relationships.py new file mode 100644 index 0000000000..6188041b2e --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_create_relationships.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link_create_team_relationship import TeamHierarchyLinkCreateTeamRelationship + +class TeamHierarchyLinkCreateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link_create_team_relationship import TeamHierarchyLinkCreateTeamRelationship + return { + "parent_team": (TeamHierarchyLinkCreateTeamRelationship,), + "sub_team": (TeamHierarchyLinkCreateTeamRelationship,), + } + attribute_map = { + "parent_team": "parent_team", + "sub_team": "sub_team", + } + + def __init__(self_, parent_team: TeamHierarchyLinkCreateTeamRelationship, sub_team: TeamHierarchyLinkCreateTeamRelationship, **kwargs): + """ + The related teams that will be connected by the team hierarchy link + + :param parent_team: Data about each team that will be connected by the team hierarchy link + :type parent_team: TeamHierarchyLinkCreateTeamRelationship + + :param sub_team: Data about each team that will be connected by the team hierarchy link + :type sub_team: TeamHierarchyLinkCreateTeamRelationship + """ + super().__init__(kwargs) + + + self_.parent_team = parent_team + self_.sub_team = sub_team diff --git a/datadog_api_client/v2/model/team_hierarchy_link_create_request.py b/datadog_api_client/v2/model/team_hierarchy_link_create_request.py new file mode 100644 index 0000000000..4a233d0516 --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link_create import TeamHierarchyLinkCreate + +class TeamHierarchyLinkCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link_create import TeamHierarchyLinkCreate + return { + "data": (TeamHierarchyLinkCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamHierarchyLinkCreate, **kwargs): + """ + Request to create a team hierarchy link + + :param data: Data provided when creating a team hierarchy link + :type data: TeamHierarchyLinkCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_hierarchy_link_create_team.py b/datadog_api_client/v2/model/team_hierarchy_link_create_team.py new file mode 100644 index 0000000000..ffc2b2ef77 --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_create_team.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_type import TeamType + +class TeamHierarchyLinkCreateTeam(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_type import TeamType + return { + "id": (str,), + "type": (TeamType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamType, **kwargs): + """ + This schema defines the attributes about each team that has to be provided when creating a team hierarchy link + + :param id: The team's identifier + :type id: str + + :param type: Team type + :type type: TeamType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_hierarchy_link_create_team_relationship.py b/datadog_api_client/v2/model/team_hierarchy_link_create_team_relationship.py new file mode 100644 index 0000000000..7494cac114 --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_create_team_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link_create_team import TeamHierarchyLinkCreateTeam + +class TeamHierarchyLinkCreateTeamRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link_create_team import TeamHierarchyLinkCreateTeam + return { + "data": (TeamHierarchyLinkCreateTeam,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamHierarchyLinkCreateTeam, **kwargs): + """ + Data about each team that will be connected by the team hierarchy link + + :param data: This schema defines the attributes about each team that has to be provided when creating a team hierarchy link + :type data: TeamHierarchyLinkCreateTeam + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_hierarchy_link_relationships.py b/datadog_api_client/v2/model/team_hierarchy_link_relationships.py new file mode 100644 index 0000000000..20457b590c --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_relationships.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link_team_relationship import TeamHierarchyLinkTeamRelationship + +class TeamHierarchyLinkRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link_team_relationship import TeamHierarchyLinkTeamRelationship + return { + "parent_team": (TeamHierarchyLinkTeamRelationship,), + "sub_team": (TeamHierarchyLinkTeamRelationship,), + } + attribute_map = { + "parent_team": "parent_team", + "sub_team": "sub_team", + } + + def __init__(self_, parent_team: TeamHierarchyLinkTeamRelationship, sub_team: TeamHierarchyLinkTeamRelationship, **kwargs): + """ + Team hierarchy link relationships + + :param parent_team: Team hierarchy link team relationship + :type parent_team: TeamHierarchyLinkTeamRelationship + + :param sub_team: Team hierarchy link team relationship + :type sub_team: TeamHierarchyLinkTeamRelationship + """ + super().__init__(kwargs) + + + self_.parent_team = parent_team + self_.sub_team = sub_team diff --git a/datadog_api_client/v2/model/team_hierarchy_link_response.py b/datadog_api_client/v2/model/team_hierarchy_link_response.py new file mode 100644 index 0000000000..708905eb3c --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_response.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link import TeamHierarchyLink + from datadog_api_client.v2.model.team_hierarchy_link_team import TeamHierarchyLinkTeam + from datadog_api_client.v2.model.teams_hierarchy_links_response_links import TeamsHierarchyLinksResponseLinks + +class TeamHierarchyLinkResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link import TeamHierarchyLink + from datadog_api_client.v2.model.team_hierarchy_link_team import TeamHierarchyLinkTeam + from datadog_api_client.v2.model.teams_hierarchy_links_response_links import TeamsHierarchyLinksResponseLinks + return { + "data": (TeamHierarchyLink,), + "included": ([TeamHierarchyLinkTeam],), + "links": (TeamsHierarchyLinksResponseLinks,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + } + + def __init__(self_, data: Union[TeamHierarchyLink, UnsetType]=unset, included: Union[List[TeamHierarchyLinkTeam], UnsetType]=unset, links: Union[TeamsHierarchyLinksResponseLinks, UnsetType]=unset, **kwargs): + """ + Team hierarchy link response + + :param data: Team hierarchy link + :type data: TeamHierarchyLink, optional + + :param included: Included teams + :type included: [TeamHierarchyLinkTeam], optional + + :param links: When querying team hierarchy links, a set of links for navigation between different pages is included + :type links: TeamsHierarchyLinksResponseLinks, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_hierarchy_link_team.py b/datadog_api_client/v2/model/team_hierarchy_link_team.py new file mode 100644 index 0000000000..d3dc7097f0 --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_team.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link_team_attributes import TeamHierarchyLinkTeamAttributes + from datadog_api_client.v2.model.team_type import TeamType + +class TeamHierarchyLinkTeam(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link_team_attributes import TeamHierarchyLinkTeamAttributes + from datadog_api_client.v2.model.team_type import TeamType + return { + "attributes": (TeamHierarchyLinkTeamAttributes,), + "id": (str,), + "type": (TeamType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamType, attributes: Union[TeamHierarchyLinkTeamAttributes, UnsetType]=unset, **kwargs): + """ + Team hierarchy links connect different teams. This represents team objects that are connected by the team hierarchy link. + + :param attributes: Team hierarchy links connect different teams. This represents attributes from teams that are connected by the team hierarchy link. + :type attributes: TeamHierarchyLinkTeamAttributes, optional + + :param id: The team's identifier + :type id: str + + :param type: Team type + :type type: TeamType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_hierarchy_link_team_attributes.py b/datadog_api_client/v2/model/team_hierarchy_link_team_attributes.py new file mode 100644 index 0000000000..0b4bca18ae --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_team_attributes.py @@ -0,0 +1,100 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamHierarchyLinkTeamAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "avatar": (str, none_type), + "banner": (int,), + "handle": (str,), + "is_managed": (bool,), + "is_open_membership": (bool,), + "link_count": (int,), + "name": (str,), + "summary": (str, none_type), + "user_count": (int,), + } + attribute_map = { + "avatar": "avatar", + "banner": "banner", + "handle": "handle", + "is_managed": "is_managed", + "is_open_membership": "is_open_membership", + "link_count": "link_count", + "name": "name", + "summary": "summary", + "user_count": "user_count", + } + + def __init__(self_, handle: str, name: str, avatar: Union[str, none_type, UnsetType]=unset, banner: Union[int, UnsetType]=unset, is_managed: Union[bool, UnsetType]=unset, is_open_membership: Union[bool, UnsetType]=unset, link_count: Union[int, UnsetType]=unset, summary: Union[str, none_type, UnsetType]=unset, user_count: Union[int, UnsetType]=unset, **kwargs): + """ + Team hierarchy links connect different teams. This represents attributes from teams that are connected by the team hierarchy link. + + :param avatar: The team's avatar + :type avatar: str, none_type, optional + + :param banner: The team's banner + :type banner: int, optional + + :param handle: The team's handle + :type handle: str + + :param is_managed: Whether the team is managed + :type is_managed: bool, optional + + :param is_open_membership: Whether the team has open membership + :type is_open_membership: bool, optional + + :param link_count: The number of links for the team + :type link_count: int, optional + + :param name: The team's name + :type name: str + + :param summary: The team's summary + :type summary: str, none_type, optional + + :param user_count: The number of users in the team + :type user_count: int, optional + """ + if avatar is not unset: + kwargs["avatar"] = avatar + if banner is not unset: + kwargs["banner"] = banner + if is_managed is not unset: + kwargs["is_managed"] = is_managed + if is_open_membership is not unset: + kwargs["is_open_membership"] = is_open_membership + if link_count is not unset: + kwargs["link_count"] = link_count + if summary is not unset: + kwargs["summary"] = summary + if user_count is not unset: + kwargs["user_count"] = user_count + super().__init__(kwargs) + + + self_.handle = handle + self_.name = name diff --git a/datadog_api_client/v2/model/team_hierarchy_link_team_relationship.py b/datadog_api_client/v2/model/team_hierarchy_link_team_relationship.py new file mode 100644 index 0000000000..5c6e7d4b8b --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_team_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link_team import TeamHierarchyLinkTeam + +class TeamHierarchyLinkTeamRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link_team import TeamHierarchyLinkTeam + return { + "data": (TeamHierarchyLinkTeam,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamHierarchyLinkTeam, **kwargs): + """ + Team hierarchy link team relationship + + :param data: Team hierarchy links connect different teams. This represents team objects that are connected by the team hierarchy link. + :type data: TeamHierarchyLinkTeam + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_hierarchy_link_type.py b/datadog_api_client/v2/model/team_hierarchy_link_type.py new file mode 100644 index 0000000000..97828f2499 --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_link_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamHierarchyLinkType(ModelSimple): + """ + Team hierarchy link type + + :param value: If omitted defaults to "team_hierarchy_links". Must be one of ["team_hierarchy_links"]. + :type value: str + """ + + allowed_values = { + "team_hierarchy_links", + } + TEAM_HIERARCHY_LINKS: ClassVar["TeamHierarchyLinkType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamHierarchyLinkType.TEAM_HIERARCHY_LINKS = TeamHierarchyLinkType("team_hierarchy_links") diff --git a/datadog_api_client/v2/model/team_hierarchy_links_response.py b/datadog_api_client/v2/model/team_hierarchy_links_response.py new file mode 100644 index 0000000000..efb30a584f --- /dev/null +++ b/datadog_api_client/v2/model/team_hierarchy_links_response.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_hierarchy_link import TeamHierarchyLink + from datadog_api_client.v2.model.team_hierarchy_link_team import TeamHierarchyLinkTeam + from datadog_api_client.v2.model.teams_hierarchy_links_response_links import TeamsHierarchyLinksResponseLinks + from datadog_api_client.v2.model.teams_hierarchy_links_response_meta import TeamsHierarchyLinksResponseMeta + +class TeamHierarchyLinksResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_hierarchy_link import TeamHierarchyLink + from datadog_api_client.v2.model.team_hierarchy_link_team import TeamHierarchyLinkTeam + from datadog_api_client.v2.model.teams_hierarchy_links_response_links import TeamsHierarchyLinksResponseLinks + from datadog_api_client.v2.model.teams_hierarchy_links_response_meta import TeamsHierarchyLinksResponseMeta + return { + "data": ([TeamHierarchyLink],), + "included": ([TeamHierarchyLinkTeam],), + "links": (TeamsHierarchyLinksResponseLinks,), + "meta": (TeamsHierarchyLinksResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[TeamHierarchyLink], UnsetType]=unset, included: Union[List[TeamHierarchyLinkTeam], UnsetType]=unset, links: Union[TeamsHierarchyLinksResponseLinks, UnsetType]=unset, meta: Union[TeamsHierarchyLinksResponseMeta, UnsetType]=unset, **kwargs): + """ + Team hierarchy links response + + :param data: Team hierarchy links response data + :type data: [TeamHierarchyLink], optional + + :param included: Included teams + :type included: [TeamHierarchyLinkTeam], optional + + :param links: When querying team hierarchy links, a set of links for navigation between different pages is included + :type links: TeamsHierarchyLinksResponseLinks, optional + + :param meta: Metadata that is included in the response when querying the team hierarchy links + :type meta: TeamsHierarchyLinksResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_included.py b/datadog_api_client/v2/model/team_included.py new file mode 100644 index 0000000000..642f883c13 --- /dev/null +++ b/datadog_api_client/v2/model/team_included.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Included resources related to the team + + :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.team_link import TeamLink + from datadog_api_client.v2.model.user_team_permission import UserTeamPermission + return { + "oneOf": [ + User, + TeamLink, + UserTeamPermission, + ], + } diff --git a/datadog_api_client/v2/model/team_link.py b/datadog_api_client/v2/model/team_link.py new file mode 100644 index 0000000000..bb20b0ebfe --- /dev/null +++ b/datadog_api_client/v2/model/team_link.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_link_attributes import TeamLinkAttributes + from datadog_api_client.v2.model.team_link_type import TeamLinkType + +class TeamLink(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_link_attributes import TeamLinkAttributes + from datadog_api_client.v2.model.team_link_type import TeamLinkType + return { + "attributes": (TeamLinkAttributes,), + "id": (str,), + "type": (TeamLinkType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: TeamLinkAttributes, id: str, type: TeamLinkType, **kwargs): + """ + Team link + + :param attributes: Team link attributes + :type attributes: TeamLinkAttributes + + :param id: The team link's identifier + :type id: str + + :param type: Team link type + :type type: TeamLinkType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_link_attributes.py b/datadog_api_client/v2/model/team_link_attributes.py new file mode 100644 index 0000000000..3ab82a160d --- /dev/null +++ b/datadog_api_client/v2/model/team_link_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamLinkAttributes(ModelNormal): + validations = { + "label": { + "max_length": 256, + }, + "position": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "label": (str,), + "position": (int,), + "team_id": (str,), + "url": (str,), + } + attribute_map = { + "label": "label", + "position": "position", + "team_id": "team_id", + "url": "url", + } + read_only_vars = { + "team_id", + } + + def __init__(self_, label: str, url: str, position: Union[int, UnsetType]=unset, team_id: Union[str, UnsetType]=unset, **kwargs): + """ + Team link attributes + + :param label: The link's label + :type label: str + + :param position: The link's position, used to sort links for the team + :type position: int, optional + + :param team_id: ID of the team the link is associated with + :type team_id: str, optional + + :param url: The URL for the link + :type url: str + """ + if position is not unset: + kwargs["position"] = position + if team_id is not unset: + kwargs["team_id"] = team_id + super().__init__(kwargs) + + + self_.label = label + self_.url = url diff --git a/datadog_api_client/v2/model/team_link_create.py b/datadog_api_client/v2/model/team_link_create.py new file mode 100644 index 0000000000..974b87c651 --- /dev/null +++ b/datadog_api_client/v2/model/team_link_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_link_attributes import TeamLinkAttributes + from datadog_api_client.v2.model.team_link_type import TeamLinkType + +class TeamLinkCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_link_attributes import TeamLinkAttributes + from datadog_api_client.v2.model.team_link_type import TeamLinkType + return { + "attributes": (TeamLinkAttributes,), + "type": (TeamLinkType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TeamLinkAttributes, type: TeamLinkType, **kwargs): + """ + Team link create + + :param attributes: Team link attributes + :type attributes: TeamLinkAttributes + + :param type: Team link type + :type type: TeamLinkType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/team_link_create_request.py b/datadog_api_client/v2/model/team_link_create_request.py new file mode 100644 index 0000000000..a757220d90 --- /dev/null +++ b/datadog_api_client/v2/model/team_link_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_link_create import TeamLinkCreate + +class TeamLinkCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_link_create import TeamLinkCreate + return { + "data": (TeamLinkCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamLinkCreate, **kwargs): + """ + Team link create request + + :param data: Team link create + :type data: TeamLinkCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_link_response.py b/datadog_api_client/v2/model/team_link_response.py new file mode 100644 index 0000000000..8446980e4b --- /dev/null +++ b/datadog_api_client/v2/model/team_link_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_link import TeamLink + +class TeamLinkResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_link import TeamLink + return { + "data": (TeamLink,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TeamLink, UnsetType]=unset, **kwargs): + """ + Team link response + + :param data: Team link + :type data: TeamLink, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_link_type.py b/datadog_api_client/v2/model/team_link_type.py new file mode 100644 index 0000000000..2d61deb3b9 --- /dev/null +++ b/datadog_api_client/v2/model/team_link_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamLinkType(ModelSimple): + """ + Team link type + + :param value: If omitted defaults to "team_links". Must be one of ["team_links"]. + :type value: str + """ + + allowed_values = { + "team_links", + } + TEAM_LINKS: ClassVar["TeamLinkType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamLinkType.TEAM_LINKS = TeamLinkType("team_links") diff --git a/datadog_api_client/v2/model/team_links_response.py b/datadog_api_client/v2/model/team_links_response.py new file mode 100644 index 0000000000..223d587a59 --- /dev/null +++ b/datadog_api_client/v2/model/team_links_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_link import TeamLink + +class TeamLinksResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_link import TeamLink + return { + "data": ([TeamLink],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[TeamLink], UnsetType]=unset, **kwargs): + """ + Team links response + + :param data: Team links response data + :type data: [TeamLink], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_notification_rule.py b/datadog_api_client/v2/model/team_notification_rule.py new file mode 100644 index 0000000000..27fb3b9a5a --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rule.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule_attributes import TeamNotificationRuleAttributes + from datadog_api_client.v2.model.team_notification_rule_type import TeamNotificationRuleType + +class TeamNotificationRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule_attributes import TeamNotificationRuleAttributes + from datadog_api_client.v2.model.team_notification_rule_type import TeamNotificationRuleType + return { + "attributes": (TeamNotificationRuleAttributes,), + "id": (str,), + "type": (TeamNotificationRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: TeamNotificationRuleAttributes, type: TeamNotificationRuleType, id: Union[str, UnsetType]=unset, **kwargs): + """ + Team notification rule + + :param attributes: Team notification rule attributes + :type attributes: TeamNotificationRuleAttributes + + :param id: The identifier of the team notification rule + :type id: str, optional + + :param type: Team notification rule type + :type type: TeamNotificationRuleType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/team_notification_rule_attributes.py b/datadog_api_client/v2/model/team_notification_rule_attributes.py new file mode 100644 index 0000000000..30d4035ea8 --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rule_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule_attributes_email import TeamNotificationRuleAttributesEmail + from datadog_api_client.v2.model.team_notification_rule_attributes_ms_teams import TeamNotificationRuleAttributesMsTeams + from datadog_api_client.v2.model.team_notification_rule_attributes_pagerduty import TeamNotificationRuleAttributesPagerduty + from datadog_api_client.v2.model.team_notification_rule_attributes_slack import TeamNotificationRuleAttributesSlack + +class TeamNotificationRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule_attributes_email import TeamNotificationRuleAttributesEmail + from datadog_api_client.v2.model.team_notification_rule_attributes_ms_teams import TeamNotificationRuleAttributesMsTeams + from datadog_api_client.v2.model.team_notification_rule_attributes_pagerduty import TeamNotificationRuleAttributesPagerduty + from datadog_api_client.v2.model.team_notification_rule_attributes_slack import TeamNotificationRuleAttributesSlack + return { + "email": (TeamNotificationRuleAttributesEmail,), + "ms_teams": (TeamNotificationRuleAttributesMsTeams,), + "pagerduty": (TeamNotificationRuleAttributesPagerduty,), + "slack": (TeamNotificationRuleAttributesSlack,), + } + attribute_map = { + "email": "email", + "ms_teams": "ms_teams", + "pagerduty": "pagerduty", + "slack": "slack", + } + + def __init__(self_, email: Union[TeamNotificationRuleAttributesEmail, UnsetType]=unset, ms_teams: Union[TeamNotificationRuleAttributesMsTeams, UnsetType]=unset, pagerduty: Union[TeamNotificationRuleAttributesPagerduty, UnsetType]=unset, slack: Union[TeamNotificationRuleAttributesSlack, UnsetType]=unset, **kwargs): + """ + Team notification rule attributes + + :param email: Email notification settings for the team + :type email: TeamNotificationRuleAttributesEmail, optional + + :param ms_teams: MS Teams notification settings for the team + :type ms_teams: TeamNotificationRuleAttributesMsTeams, optional + + :param pagerduty: PagerDuty notification settings for the team + :type pagerduty: TeamNotificationRuleAttributesPagerduty, optional + + :param slack: Slack notification settings for the team + :type slack: TeamNotificationRuleAttributesSlack, optional + """ + if email is not unset: + kwargs["email"] = email + if ms_teams is not unset: + kwargs["ms_teams"] = ms_teams + if pagerduty is not unset: + kwargs["pagerduty"] = pagerduty + if slack is not unset: + kwargs["slack"] = slack + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_notification_rule_attributes_email.py b/datadog_api_client/v2/model/team_notification_rule_attributes_email.py new file mode 100644 index 0000000000..c31cf26df1 --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rule_attributes_email.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamNotificationRuleAttributesEmail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + } + attribute_map = { + "enabled": "enabled", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Email notification settings for the team + + :param enabled: Flag indicating email notification + :type enabled: bool, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_notification_rule_attributes_ms_teams.py b/datadog_api_client/v2/model/team_notification_rule_attributes_ms_teams.py new file mode 100644 index 0000000000..8459c7bfb1 --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rule_attributes_ms_teams.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamNotificationRuleAttributesMsTeams(ModelNormal): + @cached_property + def openapi_types(_): + return { + "connector_name": (str,), + } + attribute_map = { + "connector_name": "connector_name", + } + + def __init__(self_, connector_name: Union[str, UnsetType]=unset, **kwargs): + """ + MS Teams notification settings for the team + + :param connector_name: Handle for MS Teams + :type connector_name: str, optional + """ + if connector_name is not unset: + kwargs["connector_name"] = connector_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_notification_rule_attributes_pagerduty.py b/datadog_api_client/v2/model/team_notification_rule_attributes_pagerduty.py new file mode 100644 index 0000000000..245f553509 --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rule_attributes_pagerduty.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamNotificationRuleAttributesPagerduty(ModelNormal): + @cached_property + def openapi_types(_): + return { + "service_name": (str,), + } + attribute_map = { + "service_name": "service_name", + } + + def __init__(self_, service_name: Union[str, UnsetType]=unset, **kwargs): + """ + PagerDuty notification settings for the team + + :param service_name: Service name for PagerDuty + :type service_name: str, optional + """ + if service_name is not unset: + kwargs["service_name"] = service_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_notification_rule_attributes_slack.py b/datadog_api_client/v2/model/team_notification_rule_attributes_slack.py new file mode 100644 index 0000000000..b3b8b57178 --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rule_attributes_slack.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamNotificationRuleAttributesSlack(ModelNormal): + @cached_property + def openapi_types(_): + return { + "channel": (str,), + "workspace": (str,), + } + attribute_map = { + "channel": "channel", + "workspace": "workspace", + } + + def __init__(self_, channel: Union[str, UnsetType]=unset, workspace: Union[str, UnsetType]=unset, **kwargs): + """ + Slack notification settings for the team + + :param channel: Channel for Slack notification + :type channel: str, optional + + :param workspace: Workspace for Slack notification + :type workspace: str, optional + """ + if channel is not unset: + kwargs["channel"] = channel + if workspace is not unset: + kwargs["workspace"] = workspace + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_notification_rule_request.py b/datadog_api_client/v2/model/team_notification_rule_request.py new file mode 100644 index 0000000000..f21fef00d4 --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rule_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + +class TeamNotificationRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + return { + "data": (TeamNotificationRule,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamNotificationRule, **kwargs): + """ + Request to create or update a team notification rule + + :param data: Team notification rule + :type data: TeamNotificationRule + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_notification_rule_response.py b/datadog_api_client/v2/model/team_notification_rule_response.py new file mode 100644 index 0000000000..8244ee2b21 --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + +class TeamNotificationRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + return { + "data": (TeamNotificationRule,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TeamNotificationRule, UnsetType]=unset, **kwargs): + """ + Team notification rule response + + :param data: Team notification rule + :type data: TeamNotificationRule, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_notification_rule_type.py b/datadog_api_client/v2/model/team_notification_rule_type.py new file mode 100644 index 0000000000..81afc1d8ff --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamNotificationRuleType(ModelSimple): + """ + Team notification rule type + + :param value: If omitted defaults to "team_notification_rules". Must be one of ["team_notification_rules"]. + :type value: str + """ + + allowed_values = { + "team_notification_rules", + } + TEAM_NOTIFICATION_RULES: ClassVar["TeamNotificationRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamNotificationRuleType.TEAM_NOTIFICATION_RULES = TeamNotificationRuleType("team_notification_rules") diff --git a/datadog_api_client/v2/model/team_notification_rules_response.py b/datadog_api_client/v2/model/team_notification_rules_response.py new file mode 100644 index 0000000000..ca3ffc9fdd --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rules_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + from datadog_api_client.v2.model.team_notification_rules_response_meta import TeamNotificationRulesResponseMeta + +class TeamNotificationRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + from datadog_api_client.v2.model.team_notification_rules_response_meta import TeamNotificationRulesResponseMeta + return { + "data": ([TeamNotificationRule],), + "meta": (TeamNotificationRulesResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[TeamNotificationRule], UnsetType]=unset, meta: Union[TeamNotificationRulesResponseMeta, UnsetType]=unset, **kwargs): + """ + Team notification rules response + + :param data: Team notification rules response data + :type data: [TeamNotificationRule], optional + + :param meta: Metadata that is included in the response when querying the team notification rules + :type meta: TeamNotificationRulesResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_notification_rules_response_meta.py b/datadog_api_client/v2/model/team_notification_rules_response_meta.py new file mode 100644 index 0000000000..6cee36b2d6 --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rules_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rules_response_meta_page import TeamNotificationRulesResponseMetaPage + +class TeamNotificationRulesResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rules_response_meta_page import TeamNotificationRulesResponseMetaPage + return { + "page": (TeamNotificationRulesResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[TeamNotificationRulesResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Metadata that is included in the response when querying the team notification rules + + :param page: Metadata related to paging information that is included in the response when querying the team notification rules + :type page: TeamNotificationRulesResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_notification_rules_response_meta_page.py b/datadog_api_client/v2/model/team_notification_rules_response_meta_page.py new file mode 100644 index 0000000000..4e6e9a3f00 --- /dev/null +++ b/datadog_api_client/v2/model/team_notification_rules_response_meta_page.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamNotificationRulesResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_offset": (int,), + "last_offset": (int,), + "limit": (int,), + "next_offset": (int, none_type), + "offset": (int,), + "prev_offset": (int, none_type), + "total": (int,), + "type": (str,), + } + attribute_map = { + "first_offset": "first_offset", + "last_offset": "last_offset", + "limit": "limit", + "next_offset": "next_offset", + "offset": "offset", + "prev_offset": "prev_offset", + "total": "total", + "type": "type", + } + + def __init__(self_, first_offset: Union[int, UnsetType]=unset, last_offset: Union[int, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_offset: Union[int, none_type, UnsetType]=unset, offset: Union[int, UnsetType]=unset, prev_offset: Union[int, none_type, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Metadata related to paging information that is included in the response when querying the team notification rules + + :param first_offset: The first offset. + :type first_offset: int, optional + + :param last_offset: The last offset. + :type last_offset: int, optional + + :param limit: Pagination limit. + :type limit: int, optional + + :param next_offset: The next offset. + :type next_offset: int, none_type, optional + + :param offset: The offset. + :type offset: int, optional + + :param prev_offset: The previous offset. + :type prev_offset: int, none_type, optional + + :param total: Total results. + :type total: int, optional + + :param type: Offset type. + :type type: str, optional + """ + if first_offset is not unset: + kwargs["first_offset"] = first_offset + if last_offset is not unset: + kwargs["last_offset"] = last_offset + if limit is not unset: + kwargs["limit"] = limit + if next_offset is not unset: + kwargs["next_offset"] = next_offset + if offset is not unset: + kwargs["offset"] = offset + if prev_offset is not unset: + kwargs["prev_offset"] = prev_offset + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_on_call_responders.py b/datadog_api_client/v2/model/team_on_call_responders.py new file mode 100644 index 0000000000..5fa62896ec --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_on_call_responders_data import TeamOnCallRespondersData + from datadog_api_client.v2.model.team_on_call_responders_included import TeamOnCallRespondersIncluded + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.escalation import Escalation + +class TeamOnCallResponders(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_on_call_responders_data import TeamOnCallRespondersData + from datadog_api_client.v2.model.team_on_call_responders_included import TeamOnCallRespondersIncluded + return { + "data": (TeamOnCallRespondersData,), + "included": ([TeamOnCallRespondersIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[TeamOnCallRespondersData, UnsetType]=unset, included: Union[List[Union[TeamOnCallRespondersIncluded, User, Escalation]], UnsetType]=unset, **kwargs): + """ + Root object representing a team's on-call responder configuration. + + :param data: Defines the main on-call responder object for a team, including relationships and metadata. + :type data: TeamOnCallRespondersData, optional + + :param included: The ``TeamOnCallResponders`` ``included``. + :type included: [TeamOnCallRespondersIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_on_call_responders_data.py b/datadog_api_client/v2/model/team_on_call_responders_data.py new file mode 100644 index 0000000000..296a47cb3d --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_on_call_responders_data_relationships import TeamOnCallRespondersDataRelationships + from datadog_api_client.v2.model.team_on_call_responders_data_type import TeamOnCallRespondersDataType + +class TeamOnCallRespondersData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_on_call_responders_data_relationships import TeamOnCallRespondersDataRelationships + from datadog_api_client.v2.model.team_on_call_responders_data_type import TeamOnCallRespondersDataType + return { + "id": (str,), + "relationships": (TeamOnCallRespondersDataRelationships,), + "type": (TeamOnCallRespondersDataType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: TeamOnCallRespondersDataType, id: Union[str, UnsetType]=unset, relationships: Union[TeamOnCallRespondersDataRelationships, UnsetType]=unset, **kwargs): + """ + Defines the main on-call responder object for a team, including relationships and metadata. + + :param id: Unique identifier of the on-call responder configuration. + :type id: str, optional + + :param relationships: Relationship objects linked to a team's on-call responder configuration, including escalations and responders. + :type relationships: TeamOnCallRespondersDataRelationships, optional + + :param type: Represents the resource type for a group of users assigned to handle on-call duties within a team. + :type type: TeamOnCallRespondersDataType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/team_on_call_responders_data_relationships.py b/datadog_api_client/v2/model/team_on_call_responders_data_relationships.py new file mode 100644 index 0000000000..067bfff20f --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_data_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_escalations import TeamOnCallRespondersDataRelationshipsEscalations + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_responders import TeamOnCallRespondersDataRelationshipsResponders + +class TeamOnCallRespondersDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_escalations import TeamOnCallRespondersDataRelationshipsEscalations + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_responders import TeamOnCallRespondersDataRelationshipsResponders + return { + "escalations": (TeamOnCallRespondersDataRelationshipsEscalations,), + "responders": (TeamOnCallRespondersDataRelationshipsResponders,), + } + attribute_map = { + "escalations": "escalations", + "responders": "responders", + } + + def __init__(self_, escalations: Union[TeamOnCallRespondersDataRelationshipsEscalations, UnsetType]=unset, responders: Union[TeamOnCallRespondersDataRelationshipsResponders, UnsetType]=unset, **kwargs): + """ + Relationship objects linked to a team's on-call responder configuration, including escalations and responders. + + :param escalations: Defines the escalation policy steps linked to the team's on-call configuration. + :type escalations: TeamOnCallRespondersDataRelationshipsEscalations, optional + + :param responders: Defines the list of users assigned as on-call responders for the team. + :type responders: TeamOnCallRespondersDataRelationshipsResponders, optional + """ + if escalations is not unset: + kwargs["escalations"] = escalations + if responders is not unset: + kwargs["responders"] = responders + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_on_call_responders_data_relationships_escalations.py b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_escalations.py new file mode 100644 index 0000000000..f41ad28d9e --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_escalations.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_escalations_data_items import TeamOnCallRespondersDataRelationshipsEscalationsDataItems + +class TeamOnCallRespondersDataRelationshipsEscalations(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_escalations_data_items import TeamOnCallRespondersDataRelationshipsEscalationsDataItems + return { + "data": ([TeamOnCallRespondersDataRelationshipsEscalationsDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[TeamOnCallRespondersDataRelationshipsEscalationsDataItems], UnsetType]=unset, **kwargs): + """ + Defines the escalation policy steps linked to the team's on-call configuration. + + :param data: Array of escalation step references. + :type data: [TeamOnCallRespondersDataRelationshipsEscalationsDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_on_call_responders_data_relationships_escalations_data_items.py b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_escalations_data_items.py new file mode 100644 index 0000000000..7f3f7b0386 --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_escalations_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_escalations_data_items_type import TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType + +class TeamOnCallRespondersDataRelationshipsEscalationsDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_escalations_data_items_type import TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType + return { + "id": (str,), + "type": (TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType, **kwargs): + """ + Represents a link to a specific escalation policy step associated with the on-call team. + + :param id: Unique identifier of the escalation step. + :type id: str + + :param type: Identifies the resource type for escalation policy steps linked to a team's on-call configuration. + :type type: TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_on_call_responders_data_relationships_escalations_data_items_type.py b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_escalations_data_items_type.py new file mode 100644 index 0000000000..837fdebb87 --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_escalations_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType(ModelSimple): + """ + Identifies the resource type for escalation policy steps linked to a team's on-call configuration. + + :param value: If omitted defaults to "escalation_policy_steps". Must be one of ["escalation_policy_steps"]. + :type value: str + """ + + allowed_values = { + "escalation_policy_steps", + } + ESCALATION_POLICY_STEPS: ClassVar["TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType.ESCALATION_POLICY_STEPS = TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType("escalation_policy_steps") diff --git a/datadog_api_client/v2/model/team_on_call_responders_data_relationships_responders.py b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_responders.py new file mode 100644 index 0000000000..071d525386 --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_responders.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_responders_data_items import TeamOnCallRespondersDataRelationshipsRespondersDataItems + +class TeamOnCallRespondersDataRelationshipsResponders(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_responders_data_items import TeamOnCallRespondersDataRelationshipsRespondersDataItems + return { + "data": ([TeamOnCallRespondersDataRelationshipsRespondersDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[TeamOnCallRespondersDataRelationshipsRespondersDataItems], UnsetType]=unset, **kwargs): + """ + Defines the list of users assigned as on-call responders for the team. + + :param data: Array of user references associated as responders. + :type data: [TeamOnCallRespondersDataRelationshipsRespondersDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_on_call_responders_data_relationships_responders_data_items.py b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_responders_data_items.py new file mode 100644 index 0000000000..0c34031a5d --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_responders_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_responders_data_items_type import TeamOnCallRespondersDataRelationshipsRespondersDataItemsType + +class TeamOnCallRespondersDataRelationshipsRespondersDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_on_call_responders_data_relationships_responders_data_items_type import TeamOnCallRespondersDataRelationshipsRespondersDataItemsType + return { + "id": (str,), + "type": (TeamOnCallRespondersDataRelationshipsRespondersDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamOnCallRespondersDataRelationshipsRespondersDataItemsType, **kwargs): + """ + Represents a user responder associated with the on-call team. + + :param id: Unique identifier of the responder. + :type id: str + + :param type: Identifies the resource type for individual user entities associated with on-call response. + :type type: TeamOnCallRespondersDataRelationshipsRespondersDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_on_call_responders_data_relationships_responders_data_items_type.py b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_responders_data_items_type.py new file mode 100644 index 0000000000..5bd99a9feb --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_data_relationships_responders_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamOnCallRespondersDataRelationshipsRespondersDataItemsType(ModelSimple): + """ + Identifies the resource type for individual user entities associated with on-call response. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["TeamOnCallRespondersDataRelationshipsRespondersDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamOnCallRespondersDataRelationshipsRespondersDataItemsType.USERS = TeamOnCallRespondersDataRelationshipsRespondersDataItemsType("users") diff --git a/datadog_api_client/v2/model/team_on_call_responders_data_type.py b/datadog_api_client/v2/model/team_on_call_responders_data_type.py new file mode 100644 index 0000000000..97393ced7d --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamOnCallRespondersDataType(ModelSimple): + """ + Represents the resource type for a group of users assigned to handle on-call duties within a team. + + :param value: If omitted defaults to "team_oncall_responders". Must be one of ["team_oncall_responders"]. + :type value: str + """ + + allowed_values = { + "team_oncall_responders", + } + TEAM_ONCALL_RESPONDERS: ClassVar["TeamOnCallRespondersDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamOnCallRespondersDataType.TEAM_ONCALL_RESPONDERS = TeamOnCallRespondersDataType("team_oncall_responders") diff --git a/datadog_api_client/v2/model/team_on_call_responders_included.py b/datadog_api_client/v2/model/team_on_call_responders_included.py new file mode 100644 index 0000000000..1a6bf7671e --- /dev/null +++ b/datadog_api_client/v2/model/team_on_call_responders_included.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamOnCallRespondersIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Represents an union of related resources included in the response, such as users and escalation steps. + + :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.escalation import Escalation + return { + "oneOf": [ + User, + Escalation, + ], + } diff --git a/datadog_api_client/v2/model/team_permission_setting.py b/datadog_api_client/v2/model/team_permission_setting.py new file mode 100644 index 0000000000..7c4ae1cafa --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_permission_setting_attributes import TeamPermissionSettingAttributes + from datadog_api_client.v2.model.team_permission_setting_type import TeamPermissionSettingType + +class TeamPermissionSetting(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_permission_setting_attributes import TeamPermissionSettingAttributes + from datadog_api_client.v2.model.team_permission_setting_type import TeamPermissionSettingType + return { + "attributes": (TeamPermissionSettingAttributes,), + "id": (str,), + "type": (TeamPermissionSettingType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamPermissionSettingType, attributes: Union[TeamPermissionSettingAttributes, UnsetType]=unset, **kwargs): + """ + Team permission setting + + :param attributes: Team permission setting attributes + :type attributes: TeamPermissionSettingAttributes, optional + + :param id: The team permission setting's identifier + :type id: str + + :param type: Team permission setting type + :type type: TeamPermissionSettingType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_permission_setting_attributes.py b/datadog_api_client/v2/model/team_permission_setting_attributes.py new file mode 100644 index 0000000000..1037de20ac --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_permission_setting_serializer_action import TeamPermissionSettingSerializerAction + from datadog_api_client.v2.model.team_permission_setting_values import TeamPermissionSettingValues + from datadog_api_client.v2.model.team_permission_setting_value import TeamPermissionSettingValue + +class TeamPermissionSettingAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_permission_setting_serializer_action import TeamPermissionSettingSerializerAction + from datadog_api_client.v2.model.team_permission_setting_values import TeamPermissionSettingValues + from datadog_api_client.v2.model.team_permission_setting_value import TeamPermissionSettingValue + return { + "action": (TeamPermissionSettingSerializerAction,), + "editable": (bool,), + "options": (TeamPermissionSettingValues,), + "title": (str,), + "value": (TeamPermissionSettingValue,), + } + attribute_map = { + "action": "action", + "editable": "editable", + "options": "options", + "title": "title", + "value": "value", + } + read_only_vars = { + "action", + "editable", + "options", + "title", + } + + def __init__(self_, action: Union[TeamPermissionSettingSerializerAction, UnsetType]=unset, editable: Union[bool, UnsetType]=unset, options: Union[TeamPermissionSettingValues, UnsetType]=unset, title: Union[str, UnsetType]=unset, value: Union[TeamPermissionSettingValue, UnsetType]=unset, **kwargs): + """ + Team permission setting attributes + + :param action: The identifier for the action + :type action: TeamPermissionSettingSerializerAction, optional + + :param editable: Whether or not the permission setting is editable by the current user + :type editable: bool, optional + + :param options: Possible values for action + :type options: TeamPermissionSettingValues, optional + + :param title: The team permission name + :type title: str, optional + + :param value: What type of user is allowed to perform the specified action + :type value: TeamPermissionSettingValue, optional + """ + if action is not unset: + kwargs["action"] = action + if editable is not unset: + kwargs["editable"] = editable + if options is not unset: + kwargs["options"] = options + if title is not unset: + kwargs["title"] = title + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_permission_setting_response.py b/datadog_api_client/v2/model/team_permission_setting_response.py new file mode 100644 index 0000000000..12f4d5cf65 --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_permission_setting import TeamPermissionSetting + +class TeamPermissionSettingResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_permission_setting import TeamPermissionSetting + return { + "data": (TeamPermissionSetting,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TeamPermissionSetting, UnsetType]=unset, **kwargs): + """ + Team permission setting response + + :param data: Team permission setting + :type data: TeamPermissionSetting, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_permission_setting_serializer_action.py b/datadog_api_client/v2/model/team_permission_setting_serializer_action.py new file mode 100644 index 0000000000..7494f6cbc9 --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting_serializer_action.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamPermissionSettingSerializerAction(ModelSimple): + """ + The identifier for the action + + :param value: Must be one of ["manage_membership", "edit"]. + :type value: str + """ + + allowed_values = { + "manage_membership", + "edit", + } + MANAGE_MEMBERSHIP: ClassVar["TeamPermissionSettingSerializerAction"] + EDIT: ClassVar["TeamPermissionSettingSerializerAction"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamPermissionSettingSerializerAction.MANAGE_MEMBERSHIP = TeamPermissionSettingSerializerAction("manage_membership") +TeamPermissionSettingSerializerAction.EDIT = TeamPermissionSettingSerializerAction("edit") diff --git a/datadog_api_client/v2/model/team_permission_setting_type.py b/datadog_api_client/v2/model/team_permission_setting_type.py new file mode 100644 index 0000000000..69a06d2c6c --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamPermissionSettingType(ModelSimple): + """ + Team permission setting type + + :param value: If omitted defaults to "team_permission_settings". Must be one of ["team_permission_settings"]. + :type value: str + """ + + allowed_values = { + "team_permission_settings", + } + TEAM_PERMISSION_SETTINGS: ClassVar["TeamPermissionSettingType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamPermissionSettingType.TEAM_PERMISSION_SETTINGS = TeamPermissionSettingType("team_permission_settings") diff --git a/datadog_api_client/v2/model/team_permission_setting_update.py b/datadog_api_client/v2/model/team_permission_setting_update.py new file mode 100644 index 0000000000..8399d678fd --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting_update.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_permission_setting_update_attributes import TeamPermissionSettingUpdateAttributes + from datadog_api_client.v2.model.team_permission_setting_type import TeamPermissionSettingType + +class TeamPermissionSettingUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_permission_setting_update_attributes import TeamPermissionSettingUpdateAttributes + from datadog_api_client.v2.model.team_permission_setting_type import TeamPermissionSettingType + return { + "attributes": (TeamPermissionSettingUpdateAttributes,), + "type": (TeamPermissionSettingType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: TeamPermissionSettingType, attributes: Union[TeamPermissionSettingUpdateAttributes, UnsetType]=unset, **kwargs): + """ + Team permission setting update + + :param attributes: Team permission setting update attributes + :type attributes: TeamPermissionSettingUpdateAttributes, optional + + :param type: Team permission setting type + :type type: TeamPermissionSettingType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/team_permission_setting_update_attributes.py b/datadog_api_client/v2/model/team_permission_setting_update_attributes.py new file mode 100644 index 0000000000..d02b455880 --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting_update_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_permission_setting_value import TeamPermissionSettingValue + +class TeamPermissionSettingUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_permission_setting_value import TeamPermissionSettingValue + return { + "value": (TeamPermissionSettingValue,), + } + attribute_map = { + "value": "value", + } + + def __init__(self_, value: Union[TeamPermissionSettingValue, UnsetType]=unset, **kwargs): + """ + Team permission setting update attributes + + :param value: What type of user is allowed to perform the specified action + :type value: TeamPermissionSettingValue, optional + """ + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_permission_setting_update_request.py b/datadog_api_client/v2/model/team_permission_setting_update_request.py new file mode 100644 index 0000000000..e8bc9f17dd --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_permission_setting_update import TeamPermissionSettingUpdate + +class TeamPermissionSettingUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_permission_setting_update import TeamPermissionSettingUpdate + return { + "data": (TeamPermissionSettingUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamPermissionSettingUpdate, **kwargs): + """ + Team permission setting update request + + :param data: Team permission setting update + :type data: TeamPermissionSettingUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_permission_setting_value.py b/datadog_api_client/v2/model/team_permission_setting_value.py new file mode 100644 index 0000000000..87c097ea35 --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting_value.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamPermissionSettingValue(ModelSimple): + """ + What type of user is allowed to perform the specified action + + :param value: Must be one of ["admins", "members", "organization", "user_access_manage", "teams_manage"]. + :type value: str + """ + + allowed_values = { + "admins", + "members", + "organization", + "user_access_manage", + "teams_manage", + } + ADMINS: ClassVar["TeamPermissionSettingValue"] + MEMBERS: ClassVar["TeamPermissionSettingValue"] + ORGANIZATION: ClassVar["TeamPermissionSettingValue"] + USER_ACCESS_MANAGE: ClassVar["TeamPermissionSettingValue"] + TEAMS_MANAGE: ClassVar["TeamPermissionSettingValue"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamPermissionSettingValue.ADMINS = TeamPermissionSettingValue("admins") +TeamPermissionSettingValue.MEMBERS = TeamPermissionSettingValue("members") +TeamPermissionSettingValue.ORGANIZATION = TeamPermissionSettingValue("organization") +TeamPermissionSettingValue.USER_ACCESS_MANAGE = TeamPermissionSettingValue("user_access_manage") +TeamPermissionSettingValue.TEAMS_MANAGE = TeamPermissionSettingValue("teams_manage") diff --git a/datadog_api_client/v2/model/team_permission_setting_values.py b/datadog_api_client/v2/model/team_permission_setting_values.py new file mode 100644 index 0000000000..58a3118a11 --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_setting_values.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamPermissionSettingValues(ModelSimple): + """ + Possible values for action + + + :type value: [TeamPermissionSettingValue] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_permission_setting_value import TeamPermissionSettingValue + return { + "value": ([TeamPermissionSettingValue],), + } diff --git a/datadog_api_client/v2/model/team_permission_settings_response.py b/datadog_api_client/v2/model/team_permission_settings_response.py new file mode 100644 index 0000000000..cee62b5f4d --- /dev/null +++ b/datadog_api_client/v2/model/team_permission_settings_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_permission_setting import TeamPermissionSetting + +class TeamPermissionSettingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_permission_setting import TeamPermissionSetting + return { + "data": ([TeamPermissionSetting],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[TeamPermissionSetting], UnsetType]=unset, **kwargs): + """ + Team permission settings response + + :param data: Team permission settings response data + :type data: [TeamPermissionSetting], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_ref.py b/datadog_api_client/v2/model/team_ref.py new file mode 100644 index 0000000000..ccb7f6fca2 --- /dev/null +++ b/datadog_api_client/v2/model/team_ref.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_ref_data import TeamRefData + +class TeamRef(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_ref_data import TeamRefData + return { + "data": (TeamRefData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TeamRefData, UnsetType]=unset, **kwargs): + """ + Reference to a Datadog team. + + :param data: Reference to a Datadog team. + :type data: TeamRefData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_ref_data.py b/datadog_api_client/v2/model/team_ref_data.py new file mode 100644 index 0000000000..08afaa14c7 --- /dev/null +++ b/datadog_api_client/v2/model/team_ref_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_ref_data_type import TeamRefDataType + +class TeamRefData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_ref_data_type import TeamRefDataType + return { + "id": (str,), + "type": (TeamRefDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamRefDataType, **kwargs): + """ + Reference to a Datadog team. + + :param id: The Datadog team ID. + :type id: str + + :param type: Datadog team resource type. + :type type: TeamRefDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_ref_data_type.py b/datadog_api_client/v2/model/team_ref_data_type.py new file mode 100644 index 0000000000..f5cb1516cb --- /dev/null +++ b/datadog_api_client/v2/model/team_ref_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamRefDataType(ModelSimple): + """ + Datadog team resource type. + + :param value: If omitted defaults to "team". Must be one of ["team"]. + :type value: str + """ + + allowed_values = { + "team", + } + TEAM: ClassVar["TeamRefDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamRefDataType.TEAM = TeamRefDataType("team") diff --git a/datadog_api_client/v2/model/team_reference.py b/datadog_api_client/v2/model/team_reference.py new file mode 100644 index 0000000000..f888861c9c --- /dev/null +++ b/datadog_api_client/v2/model/team_reference.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_reference_attributes import TeamReferenceAttributes + from datadog_api_client.v2.model.team_reference_type import TeamReferenceType + +class TeamReference(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_reference_attributes import TeamReferenceAttributes + from datadog_api_client.v2.model.team_reference_type import TeamReferenceType + return { + "attributes": (TeamReferenceAttributes,), + "id": (str,), + "type": (TeamReferenceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: TeamReferenceType, attributes: Union[TeamReferenceAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Provides a reference to a team, including ID, type, and basic attributes/relationships. + + :param attributes: Encapsulates the basic attributes of a Team reference, such as name, handle, and an optional avatar or description. + :type attributes: TeamReferenceAttributes, optional + + :param id: The team's unique identifier. + :type id: str, optional + + :param type: Teams resource type. + :type type: TeamReferenceType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/team_reference_attributes.py b/datadog_api_client/v2/model/team_reference_attributes.py new file mode 100644 index 0000000000..42ed9e1940 --- /dev/null +++ b/datadog_api_client/v2/model/team_reference_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamReferenceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "avatar": (str,), + "description": (str,), + "handle": (str,), + "name": (str,), + } + attribute_map = { + "avatar": "avatar", + "description": "description", + "handle": "handle", + "name": "name", + } + + def __init__(self_, avatar: Union[str, UnsetType]=unset, description: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Encapsulates the basic attributes of a Team reference, such as name, handle, and an optional avatar or description. + + :param avatar: URL or reference for the team's avatar (if available). + :type avatar: str, optional + + :param description: A short text describing the team. + :type description: str, optional + + :param handle: A unique handle/slug for the team. + :type handle: str, optional + + :param name: The full, human-readable name of the team. + :type name: str, optional + """ + if avatar is not unset: + kwargs["avatar"] = avatar + if description is not unset: + kwargs["description"] = description + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_reference_type.py b/datadog_api_client/v2/model/team_reference_type.py new file mode 100644 index 0000000000..f590499b34 --- /dev/null +++ b/datadog_api_client/v2/model/team_reference_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamReferenceType(ModelSimple): + """ + Teams resource type. + + :param value: If omitted defaults to "teams". Must be one of ["teams"]. + :type value: str + """ + + allowed_values = { + "teams", + } + TEAMS: ClassVar["TeamReferenceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamReferenceType.TEAMS = TeamReferenceType("teams") diff --git a/datadog_api_client/v2/model/team_relationships.py b/datadog_api_client/v2/model/team_relationships.py new file mode 100644 index 0000000000..3977ebd394 --- /dev/null +++ b/datadog_api_client/v2/model/team_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_team_links import RelationshipToTeamLinks + from datadog_api_client.v2.model.relationship_to_user_team_permission import RelationshipToUserTeamPermission + +class TeamRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_team_links import RelationshipToTeamLinks + from datadog_api_client.v2.model.relationship_to_user_team_permission import RelationshipToUserTeamPermission + return { + "team_links": (RelationshipToTeamLinks,), + "user_team_permissions": (RelationshipToUserTeamPermission,), + } + attribute_map = { + "team_links": "team_links", + "user_team_permissions": "user_team_permissions", + } + + def __init__(self_, team_links: Union[RelationshipToTeamLinks, UnsetType]=unset, user_team_permissions: Union[RelationshipToUserTeamPermission, UnsetType]=unset, **kwargs): + """ + Resources related to a team + + :param team_links: Relationship between a team and a team link + :type team_links: RelationshipToTeamLinks, optional + + :param user_team_permissions: Relationship between a user team permission and a team + :type user_team_permissions: RelationshipToUserTeamPermission, optional + """ + if team_links is not unset: + kwargs["team_links"] = team_links + if user_team_permissions is not unset: + kwargs["user_team_permissions"] = user_team_permissions + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_relationships_links.py b/datadog_api_client/v2/model/team_relationships_links.py new file mode 100644 index 0000000000..4e132712ba --- /dev/null +++ b/datadog_api_client/v2/model/team_relationships_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamRelationshipsLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "related": (str,), + } + attribute_map = { + "related": "related", + } + + def __init__(self_, related: Union[str, UnsetType]=unset, **kwargs): + """ + Links attributes. + + :param related: Related link. + :type related: str, optional + """ + if related is not unset: + kwargs["related"] = related + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_response.py b/datadog_api_client/v2/model/team_response.py new file mode 100644 index 0000000000..4278629b6c --- /dev/null +++ b/datadog_api_client/v2/model/team_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team import Team + +class TeamResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team import Team + return { + "data": (Team,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[Team, UnsetType]=unset, **kwargs): + """ + Response with a team + + :param data: A team + :type data: Team, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_routing_rules.py b/datadog_api_client/v2/model/team_routing_rules.py new file mode 100644 index 0000000000..96b132f5c9 --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_routing_rules_data import TeamRoutingRulesData + from datadog_api_client.v2.model.team_routing_rules_included import TeamRoutingRulesIncluded + from datadog_api_client.v2.model.routing_rule import RoutingRule + +class TeamRoutingRules(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_routing_rules_data import TeamRoutingRulesData + from datadog_api_client.v2.model.team_routing_rules_included import TeamRoutingRulesIncluded + return { + "data": (TeamRoutingRulesData,), + "included": ([TeamRoutingRulesIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[TeamRoutingRulesData, UnsetType]=unset, included: Union[List[Union[TeamRoutingRulesIncluded, RoutingRule]], UnsetType]=unset, **kwargs): + """ + Represents a complete set of team routing rules, including data and optionally included related resources. + + :param data: Represents the top-level data object for team routing rules, containing the ID, relationships, and resource type. + :type data: TeamRoutingRulesData, optional + + :param included: Provides related routing rules or other included resources. + :type included: [TeamRoutingRulesIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_routing_rules_data.py b/datadog_api_client/v2/model/team_routing_rules_data.py new file mode 100644 index 0000000000..22a076f594 --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_routing_rules_data_relationships import TeamRoutingRulesDataRelationships + from datadog_api_client.v2.model.team_routing_rules_data_type import TeamRoutingRulesDataType + +class TeamRoutingRulesData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_routing_rules_data_relationships import TeamRoutingRulesDataRelationships + from datadog_api_client.v2.model.team_routing_rules_data_type import TeamRoutingRulesDataType + return { + "id": (str,), + "relationships": (TeamRoutingRulesDataRelationships,), + "type": (TeamRoutingRulesDataType,), + } + attribute_map = { + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: TeamRoutingRulesDataType, id: Union[str, UnsetType]=unset, relationships: Union[TeamRoutingRulesDataRelationships, UnsetType]=unset, **kwargs): + """ + Represents the top-level data object for team routing rules, containing the ID, relationships, and resource type. + + :param id: Specifies the unique identifier of this team routing rules record. + :type id: str, optional + + :param relationships: Specifies relationships for team routing rules, including rule references. + :type relationships: TeamRoutingRulesDataRelationships, optional + + :param type: Team routing rules resource type. + :type type: TeamRoutingRulesDataType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/team_routing_rules_data_relationships.py b/datadog_api_client/v2/model/team_routing_rules_data_relationships.py new file mode 100644 index 0000000000..2b75d07770 --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_routing_rules_data_relationships_rules import TeamRoutingRulesDataRelationshipsRules + +class TeamRoutingRulesDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_routing_rules_data_relationships_rules import TeamRoutingRulesDataRelationshipsRules + return { + "rules": (TeamRoutingRulesDataRelationshipsRules,), + } + attribute_map = { + "rules": "rules", + } + + def __init__(self_, rules: Union[TeamRoutingRulesDataRelationshipsRules, UnsetType]=unset, **kwargs): + """ + Specifies relationships for team routing rules, including rule references. + + :param rules: Holds references to a set of routing rules in a relationship. + :type rules: TeamRoutingRulesDataRelationshipsRules, optional + """ + if rules is not unset: + kwargs["rules"] = rules + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_routing_rules_data_relationships_rules.py b/datadog_api_client/v2/model/team_routing_rules_data_relationships_rules.py new file mode 100644 index 0000000000..4845d1685b --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_data_relationships_rules.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_routing_rules_data_relationships_rules_data_items import TeamRoutingRulesDataRelationshipsRulesDataItems + +class TeamRoutingRulesDataRelationshipsRules(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_routing_rules_data_relationships_rules_data_items import TeamRoutingRulesDataRelationshipsRulesDataItems + return { + "data": ([TeamRoutingRulesDataRelationshipsRulesDataItems],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[TeamRoutingRulesDataRelationshipsRulesDataItems], UnsetType]=unset, **kwargs): + """ + Holds references to a set of routing rules in a relationship. + + :param data: An array of references to the routing rules associated with this team. + :type data: [TeamRoutingRulesDataRelationshipsRulesDataItems], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_routing_rules_data_relationships_rules_data_items.py b/datadog_api_client/v2/model/team_routing_rules_data_relationships_rules_data_items.py new file mode 100644 index 0000000000..fa7bdfda3b --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_data_relationships_rules_data_items.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_routing_rules_data_relationships_rules_data_items_type import TeamRoutingRulesDataRelationshipsRulesDataItemsType + +class TeamRoutingRulesDataRelationshipsRulesDataItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_routing_rules_data_relationships_rules_data_items_type import TeamRoutingRulesDataRelationshipsRulesDataItemsType + return { + "id": (str,), + "type": (TeamRoutingRulesDataRelationshipsRulesDataItemsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamRoutingRulesDataRelationshipsRulesDataItemsType, **kwargs): + """ + Defines a relationship item to link a routing rule by its ID and type. + + :param id: Specifies the unique identifier for the related routing rule. + :type id: str + + :param type: Indicates that the resource is of type 'team_routing_rules'. + :type type: TeamRoutingRulesDataRelationshipsRulesDataItemsType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_routing_rules_data_relationships_rules_data_items_type.py b/datadog_api_client/v2/model/team_routing_rules_data_relationships_rules_data_items_type.py new file mode 100644 index 0000000000..6afd5a5025 --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_data_relationships_rules_data_items_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamRoutingRulesDataRelationshipsRulesDataItemsType(ModelSimple): + """ + Indicates that the resource is of type 'team_routing_rules'. + + :param value: If omitted defaults to "team_routing_rules". Must be one of ["team_routing_rules"]. + :type value: str + """ + + allowed_values = { + "team_routing_rules", + } + TEAM_ROUTING_RULES: ClassVar["TeamRoutingRulesDataRelationshipsRulesDataItemsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamRoutingRulesDataRelationshipsRulesDataItemsType.TEAM_ROUTING_RULES = TeamRoutingRulesDataRelationshipsRulesDataItemsType("team_routing_rules") diff --git a/datadog_api_client/v2/model/team_routing_rules_data_type.py b/datadog_api_client/v2/model/team_routing_rules_data_type.py new file mode 100644 index 0000000000..45e617a135 --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamRoutingRulesDataType(ModelSimple): + """ + Team routing rules resource type. + + :param value: If omitted defaults to "team_routing_rules". Must be one of ["team_routing_rules"]. + :type value: str + """ + + allowed_values = { + "team_routing_rules", + } + TEAM_ROUTING_RULES: ClassVar["TeamRoutingRulesDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamRoutingRulesDataType.TEAM_ROUTING_RULES = TeamRoutingRulesDataType("team_routing_rules") diff --git a/datadog_api_client/v2/model/team_routing_rules_included.py b/datadog_api_client/v2/model/team_routing_rules_included.py new file mode 100644 index 0000000000..f9d9737644 --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_included.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamRoutingRulesIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Represents additional included resources for team routing rules, such as associated routing rules. + + :param attributes: Defines the configurable attributes of a routing rule, such as actions, query, time restriction, and urgency. + :type attributes: RoutingRuleAttributes, optional + + :param id: Specifies the unique identifier of this routing rule. + :type id: str, optional + + :param relationships: Specifies relationships for a routing rule, linking to associated policy resources. + :type relationships: RoutingRuleRelationships, optional + + :param type: Team routing rules resource type. + :type type: RoutingRuleType + """ + 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.routing_rule import RoutingRule + return { + "oneOf": [ + RoutingRule, + ], + } diff --git a/datadog_api_client/v2/model/team_routing_rules_request.py b/datadog_api_client/v2/model/team_routing_rules_request.py new file mode 100644 index 0000000000..168747b0c1 --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_routing_rules_request_data import TeamRoutingRulesRequestData + 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 TeamRoutingRulesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_routing_rules_request_data import TeamRoutingRulesRequestData + return { + "data": (TeamRoutingRulesRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TeamRoutingRulesRequestData, UnsetType]=unset, **kwargs): + """ + Represents a request to create or update team routing rules, including the data payload. + + :param data: Holds the data necessary to create or update team routing rules, including attributes, ID, and resource type. + :type data: TeamRoutingRulesRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_routing_rules_request_data.py b/datadog_api_client/v2/model/team_routing_rules_request_data.py new file mode 100644 index 0000000000..3708e3ce1c --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_request_data.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_routing_rules_request_data_attributes import TeamRoutingRulesRequestDataAttributes + from datadog_api_client.v2.model.team_routing_rules_request_data_type import TeamRoutingRulesRequestDataType + 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 TeamRoutingRulesRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_routing_rules_request_data_attributes import TeamRoutingRulesRequestDataAttributes + from datadog_api_client.v2.model.team_routing_rules_request_data_type import TeamRoutingRulesRequestDataType + return { + "attributes": (TeamRoutingRulesRequestDataAttributes,), + "id": (str,), + "type": (TeamRoutingRulesRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: TeamRoutingRulesRequestDataType, attributes: Union[TeamRoutingRulesRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Holds the data necessary to create or update team routing rules, including attributes, ID, and resource type. + + :param attributes: Represents the attributes of a request to update or create team routing rules. + :type attributes: TeamRoutingRulesRequestDataAttributes, optional + + :param id: Specifies the unique identifier for this set of team routing rules. + :type id: str, optional + + :param type: Team routing rules resource type. + :type type: TeamRoutingRulesRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/team_routing_rules_request_data_attributes.py b/datadog_api_client/v2/model/team_routing_rules_request_data_attributes.py new file mode 100644 index 0000000000..161725f107 --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_request_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_routing_rules_request_rule import TeamRoutingRulesRequestRule + 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 TeamRoutingRulesRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_routing_rules_request_rule import TeamRoutingRulesRequestRule + return { + "rules": ([TeamRoutingRulesRequestRule],), + } + attribute_map = { + "rules": "rules", + } + + def __init__(self_, rules: Union[List[TeamRoutingRulesRequestRule], UnsetType]=unset, **kwargs): + """ + Represents the attributes of a request to update or create team routing rules. + + :param rules: A list of routing rule items that define how incoming pages should be handled. + :type rules: [TeamRoutingRulesRequestRule], optional + """ + if rules is not unset: + kwargs["rules"] = rules + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_routing_rules_request_data_type.py b/datadog_api_client/v2/model/team_routing_rules_request_data_type.py new file mode 100644 index 0000000000..ac95d95561 --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamRoutingRulesRequestDataType(ModelSimple): + """ + Team routing rules resource type. + + :param value: If omitted defaults to "team_routing_rules". Must be one of ["team_routing_rules"]. + :type value: str + """ + + allowed_values = { + "team_routing_rules", + } + TEAM_ROUTING_RULES: ClassVar["TeamRoutingRulesRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamRoutingRulesRequestDataType.TEAM_ROUTING_RULES = TeamRoutingRulesRequestDataType("team_routing_rules") diff --git a/datadog_api_client/v2/model/team_routing_rules_request_rule.py b/datadog_api_client/v2/model/team_routing_rules_request_rule.py new file mode 100644 index 0000000000..3db1c3cb8b --- /dev/null +++ b/datadog_api_client/v2/model/team_routing_rules_request_rule.py @@ -0,0 +1,85 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.routing_rule_action import RoutingRuleAction + from datadog_api_client.v2.model.time_restrictions import TimeRestrictions + from datadog_api_client.v2.model.urgency import Urgency + 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): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.routing_rule_action import RoutingRuleAction + from datadog_api_client.v2.model.time_restrictions import TimeRestrictions + from datadog_api_client.v2.model.urgency import Urgency + return { + "actions": ([RoutingRuleAction],), + "policy_id": (str,), + "query": (str,), + "time_restriction": (TimeRestrictions,), + "urgency": (Urgency,), + } + attribute_map = { + "actions": "actions", + "policy_id": "policy_id", + "query": "query", + "time_restriction": "time_restriction", + "urgency": "urgency", + } + + def __init__(self_, actions: Union[List[Union[RoutingRuleAction, SendSlackMessageAction, SendTeamsMessageAction, TriggerWorkflowAutomationAction, RoutingRuleEscalationPolicyAction]], UnsetType]=unset, policy_id: Union[str, UnsetType]=unset, query: Union[str, UnsetType]=unset, time_restriction: Union[TimeRestrictions, UnsetType]=unset, urgency: Union[Urgency, UnsetType]=unset, **kwargs): + """ + Defines an individual routing rule item that contains the rule data for the request. + + :param actions: Specifies the list of actions to perform when the routing rule is matched. + :type actions: [RoutingRuleAction], optional + + :param policy_id: Identifies the policy to be applied when this routing rule matches. + :type policy_id: str, optional + + :param query: Defines the query or condition that triggers this routing rule. + :type query: str, optional + + :param time_restriction: Time restrictions during which the routing rule is active. Outside of these hours, the rule does not match and routing continues to subsequent rules. This is mutually exclusive with the action-level ``support_hours`` field. + :type time_restriction: TimeRestrictions, optional + + :param urgency: Specifies the level of urgency for a routing rule (low, high, or dynamic). + :type urgency: Urgency, optional + """ + if actions is not unset: + kwargs["actions"] = actions + if policy_id is not unset: + kwargs["policy_id"] = policy_id + if query is not unset: + kwargs["query"] = query + if time_restriction is not unset: + kwargs["time_restriction"] = time_restriction + if urgency is not unset: + kwargs["urgency"] = urgency + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_sync_attributes.py b/datadog_api_client/v2/model/team_sync_attributes.py new file mode 100644 index 0000000000..bf6c96d75b --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_attributes.py @@ -0,0 +1,83 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_sync_attributes_frequency import TeamSyncAttributesFrequency + from datadog_api_client.v2.model.team_sync_selection_state_item import TeamSyncSelectionStateItem + from datadog_api_client.v2.model.team_sync_attributes_source import TeamSyncAttributesSource + from datadog_api_client.v2.model.team_sync_attributes_type import TeamSyncAttributesType + +class TeamSyncAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_sync_attributes_frequency import TeamSyncAttributesFrequency + from datadog_api_client.v2.model.team_sync_selection_state_item import TeamSyncSelectionStateItem + from datadog_api_client.v2.model.team_sync_attributes_source import TeamSyncAttributesSource + from datadog_api_client.v2.model.team_sync_attributes_type import TeamSyncAttributesType + return { + "frequency": (TeamSyncAttributesFrequency,), + "selection_state": ([TeamSyncSelectionStateItem],), + "source": (TeamSyncAttributesSource,), + "sync_membership": (bool,), + "type": (TeamSyncAttributesType,), + } + attribute_map = { + "frequency": "frequency", + "selection_state": "selection_state", + "source": "source", + "sync_membership": "sync_membership", + "type": "type", + } + + def __init__(self_, source: TeamSyncAttributesSource, type: TeamSyncAttributesType, frequency: Union[TeamSyncAttributesFrequency, UnsetType]=unset, selection_state: Union[List[TeamSyncSelectionStateItem], UnsetType]=unset, sync_membership: Union[bool, UnsetType]=unset, **kwargs): + """ + Team sync attributes. + + :param frequency: How often the sync process should be run. Defaults to ``once`` when not provided. + :type frequency: TeamSyncAttributesFrequency, optional + + :param selection_state: Specifies which teams or organizations to sync. When + provided, synchronization is limited to the specified + items and their subtrees. + :type selection_state: [TeamSyncSelectionStateItem], optional + + :param source: The external source platform for team synchronization. Only "github" is supported. + :type source: TeamSyncAttributesSource + + :param sync_membership: Whether to sync members from the external team to the Datadog team. Defaults to ``false`` when not provided. + :type sync_membership: bool, optional + + :param type: The type of synchronization operation. "link" connects teams by matching names. "provision" creates new teams when no match is found. + :type type: TeamSyncAttributesType + """ + if frequency is not unset: + kwargs["frequency"] = frequency + if selection_state is not unset: + kwargs["selection_state"] = selection_state + if sync_membership is not unset: + kwargs["sync_membership"] = sync_membership + super().__init__(kwargs) + + + self_.source = source + self_.type = type diff --git a/datadog_api_client/v2/model/team_sync_attributes_frequency.py b/datadog_api_client/v2/model/team_sync_attributes_frequency.py new file mode 100644 index 0000000000..e45f932921 --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_attributes_frequency.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamSyncAttributesFrequency(ModelSimple): + """ + How often the sync process should be run. Defaults to `once` when not provided. + + :param value: Must be one of ["once", "continuously", "paused"]. + :type value: str + """ + + allowed_values = { + "once", + "continuously", + "paused", + } + ONCE: ClassVar["TeamSyncAttributesFrequency"] + CONTINUOUSLY: ClassVar["TeamSyncAttributesFrequency"] + PAUSED: ClassVar["TeamSyncAttributesFrequency"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamSyncAttributesFrequency.ONCE = TeamSyncAttributesFrequency("once") +TeamSyncAttributesFrequency.CONTINUOUSLY = TeamSyncAttributesFrequency("continuously") +TeamSyncAttributesFrequency.PAUSED = TeamSyncAttributesFrequency("paused") diff --git a/datadog_api_client/v2/model/team_sync_attributes_source.py b/datadog_api_client/v2/model/team_sync_attributes_source.py new file mode 100644 index 0000000000..a1b73b06ad --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_attributes_source.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamSyncAttributesSource(ModelSimple): + """ + The external source platform for team synchronization. Only "github" is supported. + + :param value: If omitted defaults to "github". Must be one of ["github"]. + :type value: str + """ + + allowed_values = { + "github", + } + GITHUB: ClassVar["TeamSyncAttributesSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamSyncAttributesSource.GITHUB = TeamSyncAttributesSource("github") diff --git a/datadog_api_client/v2/model/team_sync_attributes_type.py b/datadog_api_client/v2/model/team_sync_attributes_type.py new file mode 100644 index 0000000000..3710bd7097 --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_attributes_type.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamSyncAttributesType(ModelSimple): + """ + The type of synchronization operation. "link" connects teams by matching names. "provision" creates new teams when no match is found. + + :param value: Must be one of ["link", "provision"]. + :type value: str + """ + + allowed_values = { + "link", + "provision", + } + LINK: ClassVar["TeamSyncAttributesType"] + PROVISION: ClassVar["TeamSyncAttributesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamSyncAttributesType.LINK = TeamSyncAttributesType("link") +TeamSyncAttributesType.PROVISION = TeamSyncAttributesType("provision") diff --git a/datadog_api_client/v2/model/team_sync_bulk_type.py b/datadog_api_client/v2/model/team_sync_bulk_type.py new file mode 100644 index 0000000000..15ad88778d --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_bulk_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamSyncBulkType(ModelSimple): + """ + Team sync bulk type. + + :param value: If omitted defaults to "team_sync_bulk". Must be one of ["team_sync_bulk"]. + :type value: str + """ + + allowed_values = { + "team_sync_bulk", + } + TEAM_SYNC_BULK: ClassVar["TeamSyncBulkType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamSyncBulkType.TEAM_SYNC_BULK = TeamSyncBulkType("team_sync_bulk") diff --git a/datadog_api_client/v2/model/team_sync_data.py b/datadog_api_client/v2/model/team_sync_data.py new file mode 100644 index 0000000000..a7cd384b8d --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_sync_attributes import TeamSyncAttributes + from datadog_api_client.v2.model.team_sync_bulk_type import TeamSyncBulkType + +class TeamSyncData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_sync_attributes import TeamSyncAttributes + from datadog_api_client.v2.model.team_sync_bulk_type import TeamSyncBulkType + return { + "attributes": (TeamSyncAttributes,), + "id": (str,), + "type": (TeamSyncBulkType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: TeamSyncAttributes, type: TeamSyncBulkType, id: Union[str, UnsetType]=unset, **kwargs): + """ + A configuration governing syncing between Datadog teams and teams from an external system. + + :param attributes: Team sync attributes. + :type attributes: TeamSyncAttributes + + :param id: The sync's identifier + :type id: str, optional + + :param type: Team sync bulk type. + :type type: TeamSyncBulkType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/team_sync_request.py b/datadog_api_client/v2/model/team_sync_request.py new file mode 100644 index 0000000000..800493f783 --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_sync_data import TeamSyncData + +class TeamSyncRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_sync_data import TeamSyncData + return { + "data": (TeamSyncData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamSyncData, **kwargs): + """ + Team sync request. + + :param data: A configuration governing syncing between Datadog teams and teams from an external system. + :type data: TeamSyncData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/team_sync_response.py b/datadog_api_client/v2/model/team_sync_response.py new file mode 100644 index 0000000000..d11b960e3a --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_sync_data import TeamSyncData + +class TeamSyncResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_sync_data import TeamSyncData + return { + "data": ([TeamSyncData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[TeamSyncData], UnsetType]=unset, **kwargs): + """ + Team sync configurations response. + + :param data: List of team sync configurations + :type data: [TeamSyncData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_sync_selection_state_external_id.py b/datadog_api_client/v2/model/team_sync_selection_state_external_id.py new file mode 100644 index 0000000000..adddfd88b4 --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_selection_state_external_id.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_sync_selection_state_external_id_type import TeamSyncSelectionStateExternalIdType + +class TeamSyncSelectionStateExternalId(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_sync_selection_state_external_id_type import TeamSyncSelectionStateExternalIdType + return { + "type": (TeamSyncSelectionStateExternalIdType,), + "value": (str,), + } + attribute_map = { + "type": "type", + "value": "value", + } + + def __init__(self_, type: TeamSyncSelectionStateExternalIdType, value: str, **kwargs): + """ + The external identifier for a team or organization in the source platform. + + :param type: The type of external identifier for the selection state item. + For GitHub synchronization, the allowed values are ``team`` and + ``organization``. + :type type: TeamSyncSelectionStateExternalIdType + + :param value: The external identifier value from the source + platform. For GitHub, this is the string + representation of a GitHub organization ID or team + ID. + :type value: str + """ + super().__init__(kwargs) + + + self_.type = type + self_.value = value diff --git a/datadog_api_client/v2/model/team_sync_selection_state_external_id_type.py b/datadog_api_client/v2/model/team_sync_selection_state_external_id_type.py new file mode 100644 index 0000000000..ca08f98f9d --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_selection_state_external_id_type.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamSyncSelectionStateExternalIdType(ModelSimple): + """ + The type of external identifier for the selection state item. + For GitHub synchronization, the allowed values are `team` and + `organization`. + + :param value: Must be one of ["team", "organization"]. + :type value: str + """ + + allowed_values = { + "team", + "organization", + } + TEAM: ClassVar["TeamSyncSelectionStateExternalIdType"] + ORGANIZATION: ClassVar["TeamSyncSelectionStateExternalIdType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamSyncSelectionStateExternalIdType.TEAM = TeamSyncSelectionStateExternalIdType("team") +TeamSyncSelectionStateExternalIdType.ORGANIZATION = TeamSyncSelectionStateExternalIdType("organization") diff --git a/datadog_api_client/v2/model/team_sync_selection_state_item.py b/datadog_api_client/v2/model/team_sync_selection_state_item.py new file mode 100644 index 0000000000..65ec1f64a4 --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_selection_state_item.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_sync_selection_state_external_id import TeamSyncSelectionStateExternalId + from datadog_api_client.v2.model.team_sync_selection_state_operation import TeamSyncSelectionStateOperation + from datadog_api_client.v2.model.team_sync_selection_state_scope import TeamSyncSelectionStateScope + +class TeamSyncSelectionStateItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_sync_selection_state_external_id import TeamSyncSelectionStateExternalId + from datadog_api_client.v2.model.team_sync_selection_state_operation import TeamSyncSelectionStateOperation + from datadog_api_client.v2.model.team_sync_selection_state_scope import TeamSyncSelectionStateScope + return { + "external_id": (TeamSyncSelectionStateExternalId,), + "operation": (TeamSyncSelectionStateOperation,), + "scope": (TeamSyncSelectionStateScope,), + } + attribute_map = { + "external_id": "external_id", + "operation": "operation", + "scope": "scope", + } + + def __init__(self_, external_id: TeamSyncSelectionStateExternalId, operation: Union[TeamSyncSelectionStateOperation, UnsetType]=unset, scope: Union[TeamSyncSelectionStateScope, UnsetType]=unset, **kwargs): + """ + Identifies a team or organization hierarchy to include in synchronization. + + :param external_id: The external identifier for a team or organization in the source platform. + :type external_id: TeamSyncSelectionStateExternalId + + :param operation: The operation to perform on the selected hierarchy. + When set to ``include`` , synchronization covers the + referenced teams or organizations. + :type operation: TeamSyncSelectionStateOperation, optional + + :param scope: The scope of the selection. When set to ``subtree`` , + synchronization includes the referenced team or + organization and everything nested under it. + :type scope: TeamSyncSelectionStateScope, optional + """ + if operation is not unset: + kwargs["operation"] = operation + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.external_id = external_id diff --git a/datadog_api_client/v2/model/team_sync_selection_state_operation.py b/datadog_api_client/v2/model/team_sync_selection_state_operation.py new file mode 100644 index 0000000000..41e31a495c --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_selection_state_operation.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamSyncSelectionStateOperation(ModelSimple): + """ + The operation to perform on the selected hierarchy. + When set to `include`, synchronization covers the + referenced teams or organizations. + + :param value: If omitted defaults to "include". Must be one of ["include"]. + :type value: str + """ + + allowed_values = { + "include", + } + INCLUDE: ClassVar["TeamSyncSelectionStateOperation"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamSyncSelectionStateOperation.INCLUDE = TeamSyncSelectionStateOperation("include") diff --git a/datadog_api_client/v2/model/team_sync_selection_state_scope.py b/datadog_api_client/v2/model/team_sync_selection_state_scope.py new file mode 100644 index 0000000000..6a8f69c494 --- /dev/null +++ b/datadog_api_client/v2/model/team_sync_selection_state_scope.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamSyncSelectionStateScope(ModelSimple): + """ + The scope of the selection. When set to `subtree`, + synchronization includes the referenced team or + organization and everything nested under it. + + :param value: If omitted defaults to "subtree". Must be one of ["subtree"]. + :type value: str + """ + + allowed_values = { + "subtree", + } + SUBTREE: ClassVar["TeamSyncSelectionStateScope"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamSyncSelectionStateScope.SUBTREE = TeamSyncSelectionStateScope("subtree") diff --git a/datadog_api_client/v2/model/team_target.py b/datadog_api_client/v2/model/team_target.py new file mode 100644 index 0000000000..7dabe6e2fe --- /dev/null +++ b/datadog_api_client/v2/model/team_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_target_type import TeamTargetType + +class TeamTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_target_type import TeamTargetType + return { + "id": (str,), + "type": (TeamTargetType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: TeamTargetType, **kwargs): + """ + Represents a team target for an escalation policy step, including the team's ID and resource type. + + :param id: Specifies the unique identifier of the team resource. + :type id: str + + :param type: Indicates that the resource is of type ``teams``. + :type type: TeamTargetType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/team_target_type.py b/datadog_api_client/v2/model/team_target_type.py new file mode 100644 index 0000000000..6b6f58ed25 --- /dev/null +++ b/datadog_api_client/v2/model/team_target_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamTargetType(ModelSimple): + """ + Indicates that the resource is of type `teams`. + + :param value: If omitted defaults to "teams". Must be one of ["teams"]. + :type value: str + """ + + allowed_values = { + "teams", + } + TEAMS: ClassVar["TeamTargetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamTargetType.TEAMS = TeamTargetType("teams") diff --git a/datadog_api_client/v2/model/team_type.py b/datadog_api_client/v2/model/team_type.py new file mode 100644 index 0000000000..4b9b095617 --- /dev/null +++ b/datadog_api_client/v2/model/team_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamType(ModelSimple): + """ + Team type + + :param value: If omitted defaults to "team". Must be one of ["team"]. + :type value: str + """ + + allowed_values = { + "team", + } + TEAM: ClassVar["TeamType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamType.TEAM = TeamType("team") diff --git a/datadog_api_client/v2/model/team_update.py b/datadog_api_client/v2/model/team_update.py new file mode 100644 index 0000000000..71c869bd8f --- /dev/null +++ b/datadog_api_client/v2/model/team_update.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_update_attributes import TeamUpdateAttributes + from datadog_api_client.v2.model.team_update_relationships import TeamUpdateRelationships + from datadog_api_client.v2.model.team_type import TeamType + +class TeamUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_update_attributes import TeamUpdateAttributes + from datadog_api_client.v2.model.team_update_relationships import TeamUpdateRelationships + from datadog_api_client.v2.model.team_type import TeamType + return { + "attributes": (TeamUpdateAttributes,), + "relationships": (TeamUpdateRelationships,), + "type": (TeamType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: TeamUpdateAttributes, type: TeamType, relationships: Union[TeamUpdateRelationships, UnsetType]=unset, **kwargs): + """ + Team update request + + :param attributes: Team update attributes + :type attributes: TeamUpdateAttributes + + :param relationships: Team update relationships + :type relationships: TeamUpdateRelationships, optional + + :param type: Team type + :type type: TeamType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/team_update_attributes.py b/datadog_api_client/v2/model/team_update_attributes.py new file mode 100644 index 0000000000..0e871b6edb --- /dev/null +++ b/datadog_api_client/v2/model/team_update_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamUpdateAttributes(ModelNormal): + validations = { + "handle": { + "max_length": 195, + }, + "name": { + "max_length": 200, + }, + } + @cached_property + def openapi_types(_): + return { + "avatar": (str, none_type), + "banner": (int, none_type), + "description": (str,), + "handle": (str,), + "hidden_modules": ([str],), + "name": (str,), + "visible_modules": ([str],), + } + attribute_map = { + "avatar": "avatar", + "banner": "banner", + "description": "description", + "handle": "handle", + "hidden_modules": "hidden_modules", + "name": "name", + "visible_modules": "visible_modules", + } + + def __init__(self_, handle: str, name: str, avatar: Union[str, none_type, UnsetType]=unset, banner: Union[int, none_type, UnsetType]=unset, description: Union[str, UnsetType]=unset, hidden_modules: Union[List[str], UnsetType]=unset, visible_modules: Union[List[str], UnsetType]=unset, **kwargs): + """ + Team update attributes + + :param avatar: Unicode representation of the avatar for the team, limited to a single grapheme + :type avatar: str, none_type, optional + + :param banner: Banner selection for the team + :type banner: int, none_type, optional + + :param description: Free-form markdown description/content for the team's homepage + :type description: str, optional + + :param handle: The team's identifier + :type handle: str + + :param hidden_modules: Collection of hidden modules for the team + :type hidden_modules: [str], optional + + :param name: The name of the team + :type name: str + + :param visible_modules: Collection of visible modules for the team + :type visible_modules: [str], optional + """ + if avatar is not unset: + kwargs["avatar"] = avatar + if banner is not unset: + kwargs["banner"] = banner + if description is not unset: + kwargs["description"] = description + if hidden_modules is not unset: + kwargs["hidden_modules"] = hidden_modules + if visible_modules is not unset: + kwargs["visible_modules"] = visible_modules + super().__init__(kwargs) + + + self_.handle = handle + self_.name = name diff --git a/datadog_api_client/v2/model/team_update_relationships.py b/datadog_api_client/v2/model/team_update_relationships.py new file mode 100644 index 0000000000..4cd21f8c19 --- /dev/null +++ b/datadog_api_client/v2/model/team_update_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_team_links import RelationshipToTeamLinks + +class TeamUpdateRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_team_links import RelationshipToTeamLinks + return { + "team_links": (RelationshipToTeamLinks,), + } + attribute_map = { + "team_links": "team_links", + } + + def __init__(self_, team_links: Union[RelationshipToTeamLinks, UnsetType]=unset, **kwargs): + """ + Team update relationships + + :param team_links: Relationship between a team and a team link + :type team_links: RelationshipToTeamLinks, optional + """ + if team_links is not unset: + kwargs["team_links"] = team_links + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/team_update_request.py b/datadog_api_client/v2/model/team_update_request.py new file mode 100644 index 0000000000..1b22dc2dce --- /dev/null +++ b/datadog_api_client/v2/model/team_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_update import TeamUpdate + +class TeamUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_update import TeamUpdate + return { + "data": (TeamUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamUpdate, **kwargs): + """ + Team update request + + :param data: Team update request + :type data: TeamUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/teams_field.py b/datadog_api_client/v2/model/teams_field.py new file mode 100644 index 0000000000..a579d01d9c --- /dev/null +++ b/datadog_api_client/v2/model/teams_field.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TeamsField(ModelSimple): + """ + Supported teams field. + + :param value: Must be one of ["id", "name", "handle", "summary", "description", "avatar", "banner", "visible_modules", "hidden_modules", "created_at", "modified_at", "user_count", "link_count", "team_links", "user_team_permissions"]. + :type value: str + """ + + allowed_values = { + "id", + "name", + "handle", + "summary", + "description", + "avatar", + "banner", + "visible_modules", + "hidden_modules", + "created_at", + "modified_at", + "user_count", + "link_count", + "team_links", + "user_team_permissions", + } + ID: ClassVar["TeamsField"] + NAME: ClassVar["TeamsField"] + HANDLE: ClassVar["TeamsField"] + SUMMARY: ClassVar["TeamsField"] + DESCRIPTION: ClassVar["TeamsField"] + AVATAR: ClassVar["TeamsField"] + BANNER: ClassVar["TeamsField"] + VISIBLE_MODULES: ClassVar["TeamsField"] + HIDDEN_MODULES: ClassVar["TeamsField"] + CREATED_AT: ClassVar["TeamsField"] + MODIFIED_AT: ClassVar["TeamsField"] + USER_COUNT: ClassVar["TeamsField"] + LINK_COUNT: ClassVar["TeamsField"] + TEAM_LINKS: ClassVar["TeamsField"] + USER_TEAM_PERMISSIONS: ClassVar["TeamsField"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TeamsField.ID = TeamsField("id") +TeamsField.NAME = TeamsField("name") +TeamsField.HANDLE = TeamsField("handle") +TeamsField.SUMMARY = TeamsField("summary") +TeamsField.DESCRIPTION = TeamsField("description") +TeamsField.AVATAR = TeamsField("avatar") +TeamsField.BANNER = TeamsField("banner") +TeamsField.VISIBLE_MODULES = TeamsField("visible_modules") +TeamsField.HIDDEN_MODULES = TeamsField("hidden_modules") +TeamsField.CREATED_AT = TeamsField("created_at") +TeamsField.MODIFIED_AT = TeamsField("modified_at") +TeamsField.USER_COUNT = TeamsField("user_count") +TeamsField.LINK_COUNT = TeamsField("link_count") +TeamsField.TEAM_LINKS = TeamsField("team_links") +TeamsField.USER_TEAM_PERMISSIONS = TeamsField("user_team_permissions") diff --git a/datadog_api_client/v2/model/teams_hierarchy_links_response_links.py b/datadog_api_client/v2/model/teams_hierarchy_links_response_links.py new file mode 100644 index 0000000000..79d772d52a --- /dev/null +++ b/datadog_api_client/v2/model/teams_hierarchy_links_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamsHierarchyLinksResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str, none_type), + "last": (str, none_type), + "next": (str, none_type), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, none_type, UnsetType]=unset, last: Union[str, none_type, UnsetType]=unset, next: Union[str, none_type, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + When querying team hierarchy links, a set of links for navigation between different pages is included + + :param first: Link to the first page. + :type first: str, none_type, optional + + :param last: Link to the last page. + :type last: str, none_type, optional + + :param next: Link to the next page. + :type next: str, none_type, optional + + :param prev: Link to the previous page. + :type prev: str, none_type, optional + + :param self: Link to the current object. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/teams_hierarchy_links_response_meta.py b/datadog_api_client/v2/model/teams_hierarchy_links_response_meta.py new file mode 100644 index 0000000000..dbca3959d6 --- /dev/null +++ b/datadog_api_client/v2/model/teams_hierarchy_links_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.teams_hierarchy_links_response_meta_page import TeamsHierarchyLinksResponseMetaPage + +class TeamsHierarchyLinksResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.teams_hierarchy_links_response_meta_page import TeamsHierarchyLinksResponseMetaPage + return { + "page": (TeamsHierarchyLinksResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[TeamsHierarchyLinksResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Metadata that is included in the response when querying the team hierarchy links + + :param page: Metadata related to paging information that is included in the response when querying the team hierarchy links + :type page: TeamsHierarchyLinksResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/teams_hierarchy_links_response_meta_page.py b/datadog_api_client/v2/model/teams_hierarchy_links_response_meta_page.py new file mode 100644 index 0000000000..6eabfa0701 --- /dev/null +++ b/datadog_api_client/v2/model/teams_hierarchy_links_response_meta_page.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamsHierarchyLinksResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_number": (int,), + "last_number": (int,), + "next_number": (int, none_type), + "number": (int,), + "prev_number": (int, none_type), + "size": (int,), + "total": (int,), + "type": (str,), + } + attribute_map = { + "first_number": "first_number", + "last_number": "last_number", + "next_number": "next_number", + "number": "number", + "prev_number": "prev_number", + "size": "size", + "total": "total", + "type": "type", + } + + def __init__(self_, first_number: Union[int, UnsetType]=unset, last_number: Union[int, UnsetType]=unset, next_number: Union[int, none_type, UnsetType]=unset, number: Union[int, UnsetType]=unset, prev_number: Union[int, none_type, UnsetType]=unset, size: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Metadata related to paging information that is included in the response when querying the team hierarchy links + + :param first_number: First page number. + :type first_number: int, optional + + :param last_number: Last page number. + :type last_number: int, optional + + :param next_number: Next page number. + :type next_number: int, none_type, optional + + :param number: Page number. + :type number: int, optional + + :param prev_number: Previous page number. + :type prev_number: int, none_type, optional + + :param size: Page size. + :type size: int, optional + + :param total: Total number of results. + :type total: int, optional + + :param type: Pagination type. + :type type: str, optional + """ + if first_number is not unset: + kwargs["first_number"] = first_number + if last_number is not unset: + kwargs["last_number"] = last_number + if next_number is not unset: + kwargs["next_number"] = next_number + if number is not unset: + kwargs["number"] = number + if prev_number is not unset: + kwargs["prev_number"] = prev_number + if size is not unset: + kwargs["size"] = size + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/teams_response.py b/datadog_api_client/v2/model/teams_response.py new file mode 100644 index 0000000000..a77146cccd --- /dev/null +++ b/datadog_api_client/v2/model/teams_response.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team import Team + from datadog_api_client.v2.model.team_included import TeamIncluded + from datadog_api_client.v2.model.teams_response_links import TeamsResponseLinks + from datadog_api_client.v2.model.teams_response_meta import TeamsResponseMeta + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.team_link import TeamLink + from datadog_api_client.v2.model.user_team_permission import UserTeamPermission + +class TeamsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team import Team + from datadog_api_client.v2.model.team_included import TeamIncluded + from datadog_api_client.v2.model.teams_response_links import TeamsResponseLinks + from datadog_api_client.v2.model.teams_response_meta import TeamsResponseMeta + return { + "data": ([Team],), + "included": ([TeamIncluded],), + "links": (TeamsResponseLinks,), + "meta": (TeamsResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[Team], UnsetType]=unset, included: Union[List[Union[TeamIncluded, User, TeamLink, UserTeamPermission]], UnsetType]=unset, links: Union[TeamsResponseLinks, UnsetType]=unset, meta: Union[TeamsResponseMeta, UnsetType]=unset, **kwargs): + """ + Response with multiple teams + + :param data: Teams response data + :type data: [Team], optional + + :param included: Resources related to the team + :type included: [TeamIncluded], optional + + :param links: Teams response links. + :type links: TeamsResponseLinks, optional + + :param meta: Teams response metadata. + :type meta: TeamsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/teams_response_links.py b/datadog_api_client/v2/model/teams_response_links.py new file mode 100644 index 0000000000..09d2ffa8c5 --- /dev/null +++ b/datadog_api_client/v2/model/teams_response_links.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamsResponseLinks(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first": (str,), + "last": (str, none_type), + "next": (str,), + "prev": (str, none_type), + "self": (str,), + } + attribute_map = { + "first": "first", + "last": "last", + "next": "next", + "prev": "prev", + "self": "self", + } + + def __init__(self_, first: Union[str, UnsetType]=unset, last: Union[str, none_type, UnsetType]=unset, next: Union[str, UnsetType]=unset, prev: Union[str, none_type, UnsetType]=unset, self: Union[str, UnsetType]=unset, **kwargs): + """ + Teams response links. + + :param first: First link. + :type first: str, optional + + :param last: Last link. + :type last: str, none_type, optional + + :param next: Next link. + :type next: str, optional + + :param prev: Previous link. + :type prev: str, none_type, optional + + :param self: Current link. + :type self: str, optional + """ + if first is not unset: + kwargs["first"] = first + if last is not unset: + kwargs["last"] = last + if next is not unset: + kwargs["next"] = next + if prev is not unset: + kwargs["prev"] = prev + if self is not unset: + kwargs["self"] = self + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/teams_response_meta.py b/datadog_api_client/v2/model/teams_response_meta.py new file mode 100644 index 0000000000..da08f548d4 --- /dev/null +++ b/datadog_api_client/v2/model/teams_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.teams_response_meta_pagination import TeamsResponseMetaPagination + +class TeamsResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.teams_response_meta_pagination import TeamsResponseMetaPagination + return { + "pagination": (TeamsResponseMetaPagination,), + } + attribute_map = { + "pagination": "pagination", + } + + def __init__(self_, pagination: Union[TeamsResponseMetaPagination, UnsetType]=unset, **kwargs): + """ + Teams response metadata. + + :param pagination: Teams response metadata. + :type pagination: TeamsResponseMetaPagination, optional + """ + if pagination is not unset: + kwargs["pagination"] = pagination + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/teams_response_meta_pagination.py b/datadog_api_client/v2/model/teams_response_meta_pagination.py new file mode 100644 index 0000000000..6d22e591ed --- /dev/null +++ b/datadog_api_client/v2/model/teams_response_meta_pagination.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TeamsResponseMetaPagination(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_offset": (int,), + "last_offset": (int,), + "limit": (int,), + "next_offset": (int,), + "offset": (int,), + "prev_offset": (int,), + "total": (int,), + "type": (str,), + } + attribute_map = { + "first_offset": "first_offset", + "last_offset": "last_offset", + "limit": "limit", + "next_offset": "next_offset", + "offset": "offset", + "prev_offset": "prev_offset", + "total": "total", + "type": "type", + } + + def __init__(self_, first_offset: Union[int, UnsetType]=unset, last_offset: Union[int, UnsetType]=unset, limit: Union[int, UnsetType]=unset, next_offset: Union[int, UnsetType]=unset, offset: Union[int, UnsetType]=unset, prev_offset: Union[int, UnsetType]=unset, total: Union[int, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + Teams response metadata. + + :param first_offset: The first offset. + :type first_offset: int, optional + + :param last_offset: The last offset. + :type last_offset: int, optional + + :param limit: Pagination limit. + :type limit: int, optional + + :param next_offset: The next offset. + :type next_offset: int, optional + + :param offset: The offset. + :type offset: int, optional + + :param prev_offset: The previous offset. + :type prev_offset: int, optional + + :param total: Total results. + :type total: int, optional + + :param type: Offset type. + :type type: str, optional + """ + if first_offset is not unset: + kwargs["first_offset"] = first_offset + if last_offset is not unset: + kwargs["last_offset"] = last_offset + if limit is not unset: + kwargs["limit"] = limit + if next_offset is not unset: + kwargs["next_offset"] = next_offset + if offset is not unset: + kwargs["offset"] = offset + if prev_offset is not unset: + kwargs["prev_offset"] = prev_offset + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tenancy_config.py b/datadog_api_client/v2/model/tenancy_config.py new file mode 100644 index 0000000000..66c01e13bc --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tenancy_config_data import TenancyConfigData + +class TenancyConfig(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tenancy_config_data import TenancyConfigData + return { + "data": (TenancyConfigData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TenancyConfigData, UnsetType]=unset, **kwargs): + """ + Response containing a single OCI tenancy integration configuration. + + :param data: A single OCI tenancy integration configuration resource object containing the tenancy ID, type, and configuration attributes. + :type data: TenancyConfigData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tenancy_config_data.py b/datadog_api_client/v2/model/tenancy_config_data.py new file mode 100644 index 0000000000..0f136047ac --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_config_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tenancy_config_data_attributes import TenancyConfigDataAttributes + from datadog_api_client.v2.model.update_tenancy_config_data_type import UpdateTenancyConfigDataType + +class TenancyConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tenancy_config_data_attributes import TenancyConfigDataAttributes + from datadog_api_client.v2.model.update_tenancy_config_data_type import UpdateTenancyConfigDataType + return { + "attributes": (TenancyConfigDataAttributes,), + "id": (str,), + "type": (UpdateTenancyConfigDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: UpdateTenancyConfigDataType, attributes: Union[TenancyConfigDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + A single OCI tenancy integration configuration resource object containing the tenancy ID, type, and configuration attributes. + + :param attributes: Attributes of an OCI tenancy integration configuration, including authentication details, region settings, and collection options. + :type attributes: TenancyConfigDataAttributes, optional + + :param id: The OCID of the OCI tenancy. + :type id: str, optional + + :param type: OCI tenancy resource type. + :type type: UpdateTenancyConfigDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/tenancy_config_data_attributes.py b/datadog_api_client/v2/model/tenancy_config_data_attributes.py new file mode 100644 index 0000000000..e39cc9ead8 --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_config_data_attributes.py @@ -0,0 +1,142 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tenancy_config_data_attributes_logs_config import TenancyConfigDataAttributesLogsConfig + from datadog_api_client.v2.model.tenancy_config_data_attributes_metrics_config import TenancyConfigDataAttributesMetricsConfig + from datadog_api_client.v2.model.tenancy_config_data_attributes_regions_config import TenancyConfigDataAttributesRegionsConfig + +class TenancyConfigDataAttributes(ModelNormal): + validations = { + "billing_plan_id": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tenancy_config_data_attributes_logs_config import TenancyConfigDataAttributesLogsConfig + from datadog_api_client.v2.model.tenancy_config_data_attributes_metrics_config import TenancyConfigDataAttributesMetricsConfig + from datadog_api_client.v2.model.tenancy_config_data_attributes_regions_config import TenancyConfigDataAttributesRegionsConfig + return { + "billing_plan_id": (int,), + "config_version": (int,), + "cost_collection_enabled": (bool,), + "dd_compartment_id": (str,), + "dd_stack_id": (str,), + "home_region": (str,), + "logs_config": (TenancyConfigDataAttributesLogsConfig,), + "metrics_config": (TenancyConfigDataAttributesMetricsConfig,), + "parent_tenancy_name": (str,), + "regions_config": (TenancyConfigDataAttributesRegionsConfig,), + "resource_collection_enabled": (bool,), + "tenancy_name": (str,), + "user_ocid": (str,), + } + attribute_map = { + "billing_plan_id": "billing_plan_id", + "config_version": "config_version", + "cost_collection_enabled": "cost_collection_enabled", + "dd_compartment_id": "dd_compartment_id", + "dd_stack_id": "dd_stack_id", + "home_region": "home_region", + "logs_config": "logs_config", + "metrics_config": "metrics_config", + "parent_tenancy_name": "parent_tenancy_name", + "regions_config": "regions_config", + "resource_collection_enabled": "resource_collection_enabled", + "tenancy_name": "tenancy_name", + "user_ocid": "user_ocid", + } + + def __init__(self_, billing_plan_id: Union[int, UnsetType]=unset, config_version: Union[int, UnsetType]=unset, cost_collection_enabled: Union[bool, UnsetType]=unset, dd_compartment_id: Union[str, UnsetType]=unset, dd_stack_id: Union[str, UnsetType]=unset, home_region: Union[str, UnsetType]=unset, logs_config: Union[TenancyConfigDataAttributesLogsConfig, UnsetType]=unset, metrics_config: Union[TenancyConfigDataAttributesMetricsConfig, UnsetType]=unset, parent_tenancy_name: Union[str, UnsetType]=unset, regions_config: Union[TenancyConfigDataAttributesRegionsConfig, UnsetType]=unset, resource_collection_enabled: Union[bool, UnsetType]=unset, tenancy_name: Union[str, UnsetType]=unset, user_ocid: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of an OCI tenancy integration configuration, including authentication details, region settings, and collection options. + + :param billing_plan_id: The identifier of the billing plan associated with the OCI tenancy. + :type billing_plan_id: int, optional + + :param config_version: Version number of the integration the tenancy is integrated with + :type config_version: int, optional + + :param cost_collection_enabled: Whether cost data collection from OCI is enabled for the tenancy. + :type cost_collection_enabled: bool, optional + + :param dd_compartment_id: The OCID of the OCI compartment used by the Datadog integration stack. + :type dd_compartment_id: str, optional + + :param dd_stack_id: The OCID of the OCI Resource Manager stack used by the Datadog integration. + :type dd_stack_id: str, optional + + :param home_region: The home region of the OCI tenancy (for example, us-ashburn-1). + :type home_region: str, optional + + :param logs_config: Log collection configuration for an OCI tenancy, indicating which compartments and services have log collection enabled. + :type logs_config: TenancyConfigDataAttributesLogsConfig, optional + + :param metrics_config: Metrics collection configuration for an OCI tenancy, indicating which compartments and services are included or excluded. + :type metrics_config: TenancyConfigDataAttributesMetricsConfig, optional + + :param parent_tenancy_name: The name of the parent OCI tenancy, if applicable. + :type parent_tenancy_name: str, optional + + :param regions_config: Region configuration for an OCI tenancy, indicating which regions are available, enabled, or disabled for data collection. + :type regions_config: TenancyConfigDataAttributesRegionsConfig, optional + + :param resource_collection_enabled: Whether resource collection from OCI is enabled for the tenancy. + :type resource_collection_enabled: bool, optional + + :param tenancy_name: The human-readable name of the OCI tenancy. + :type tenancy_name: str, optional + + :param user_ocid: The OCID of the OCI user used by the Datadog integration for authentication. + :type user_ocid: str, optional + """ + if billing_plan_id is not unset: + kwargs["billing_plan_id"] = billing_plan_id + if config_version is not unset: + kwargs["config_version"] = config_version + if cost_collection_enabled is not unset: + kwargs["cost_collection_enabled"] = cost_collection_enabled + if dd_compartment_id is not unset: + kwargs["dd_compartment_id"] = dd_compartment_id + if dd_stack_id is not unset: + kwargs["dd_stack_id"] = dd_stack_id + if home_region is not unset: + kwargs["home_region"] = home_region + if logs_config is not unset: + kwargs["logs_config"] = logs_config + if metrics_config is not unset: + kwargs["metrics_config"] = metrics_config + if parent_tenancy_name is not unset: + kwargs["parent_tenancy_name"] = parent_tenancy_name + if regions_config is not unset: + kwargs["regions_config"] = regions_config + if resource_collection_enabled is not unset: + kwargs["resource_collection_enabled"] = resource_collection_enabled + if tenancy_name is not unset: + kwargs["tenancy_name"] = tenancy_name + if user_ocid is not unset: + kwargs["user_ocid"] = user_ocid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tenancy_config_data_attributes_logs_config.py b/datadog_api_client/v2/model/tenancy_config_data_attributes_logs_config.py new file mode 100644 index 0000000000..5af66d8568 --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_config_data_attributes_logs_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TenancyConfigDataAttributesLogsConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compartment_tag_filters": ([str],), + "enabled": (bool,), + "enabled_services": ([str],), + } + attribute_map = { + "compartment_tag_filters": "compartment_tag_filters", + "enabled": "enabled", + "enabled_services": "enabled_services", + } + + def __init__(self_, compartment_tag_filters: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, enabled_services: Union[List[str], UnsetType]=unset, **kwargs): + """ + Log collection configuration for an OCI tenancy, indicating which compartments and services have log collection enabled. + + :param compartment_tag_filters: List of compartment tag filters scoping log collection to specific compartments. + :type compartment_tag_filters: [str], optional + + :param enabled: Whether log collection is enabled for the tenancy. + :type enabled: bool, optional + + :param enabled_services: List of OCI service names for which log collection is enabled. + :type enabled_services: [str], optional + """ + if compartment_tag_filters is not unset: + kwargs["compartment_tag_filters"] = compartment_tag_filters + if enabled is not unset: + kwargs["enabled"] = enabled + if enabled_services is not unset: + kwargs["enabled_services"] = enabled_services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tenancy_config_data_attributes_metrics_config.py b/datadog_api_client/v2/model/tenancy_config_data_attributes_metrics_config.py new file mode 100644 index 0000000000..f0a696547d --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_config_data_attributes_metrics_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TenancyConfigDataAttributesMetricsConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compartment_tag_filters": ([str],), + "enabled": (bool,), + "excluded_services": ([str],), + } + attribute_map = { + "compartment_tag_filters": "compartment_tag_filters", + "enabled": "enabled", + "excluded_services": "excluded_services", + } + + def __init__(self_, compartment_tag_filters: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, excluded_services: Union[List[str], UnsetType]=unset, **kwargs): + """ + Metrics collection configuration for an OCI tenancy, indicating which compartments and services are included or excluded. + + :param compartment_tag_filters: List of compartment tag filters scoping metrics collection to specific compartments. + :type compartment_tag_filters: [str], optional + + :param enabled: Whether metrics collection is enabled for the tenancy. + :type enabled: bool, optional + + :param excluded_services: List of OCI service names excluded from metrics collection. + :type excluded_services: [str], optional + """ + if compartment_tag_filters is not unset: + kwargs["compartment_tag_filters"] = compartment_tag_filters + if enabled is not unset: + kwargs["enabled"] = enabled + if excluded_services is not unset: + kwargs["excluded_services"] = excluded_services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tenancy_config_data_attributes_regions_config.py b/datadog_api_client/v2/model/tenancy_config_data_attributes_regions_config.py new file mode 100644 index 0000000000..a9ac609668 --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_config_data_attributes_regions_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TenancyConfigDataAttributesRegionsConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "available": ([str],), + "disabled": ([str],), + "enabled": ([str],), + } + attribute_map = { + "available": "available", + "disabled": "disabled", + "enabled": "enabled", + } + + def __init__(self_, available: Union[List[str], UnsetType]=unset, disabled: Union[List[str], UnsetType]=unset, enabled: Union[List[str], UnsetType]=unset, **kwargs): + """ + Region configuration for an OCI tenancy, indicating which regions are available, enabled, or disabled for data collection. + + :param available: List of OCI regions available for data collection in the tenancy. + :type available: [str], optional + + :param disabled: List of OCI regions explicitly disabled for data collection. + :type disabled: [str], optional + + :param enabled: List of OCI regions enabled for data collection. + :type enabled: [str], optional + """ + if available is not unset: + kwargs["available"] = available + if disabled is not unset: + kwargs["disabled"] = disabled + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tenancy_config_list.py b/datadog_api_client/v2/model/tenancy_config_list.py new file mode 100644 index 0000000000..70af645efc --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_config_list.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tenancy_config_data import TenancyConfigData + +class TenancyConfigList(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tenancy_config_data import TenancyConfigData + return { + "data": ([TenancyConfigData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[TenancyConfigData], **kwargs): + """ + Response containing a list of OCI tenancy integration configurations. + + :param data: List of OCI tenancy integration configuration objects. + :type data: [TenancyConfigData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/tenancy_products_data.py b/datadog_api_client/v2/model/tenancy_products_data.py new file mode 100644 index 0000000000..32c7403b37 --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_products_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tenancy_products_data_attributes import TenancyProductsDataAttributes + from datadog_api_client.v2.model.tenancy_products_data_type import TenancyProductsDataType + +class TenancyProductsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tenancy_products_data_attributes import TenancyProductsDataAttributes + from datadog_api_client.v2.model.tenancy_products_data_type import TenancyProductsDataType + return { + "attributes": (TenancyProductsDataAttributes,), + "id": (str,), + "type": (TenancyProductsDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: TenancyProductsDataType, attributes: Union[TenancyProductsDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + A single OCI tenancy product resource object containing the tenancy ID, type, and product attributes. + + :param attributes: Attributes of an OCI tenancy product resource, containing the list of available products and their enablement status. + :type attributes: TenancyProductsDataAttributes, optional + + :param id: The OCID of the OCI tenancy. + :type id: str, optional + + :param type: OCI tenancy product resource type. + :type type: TenancyProductsDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/tenancy_products_data_attributes.py b/datadog_api_client/v2/model/tenancy_products_data_attributes.py new file mode 100644 index 0000000000..61ad8309d2 --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_products_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tenancy_products_data_attributes_products_items import TenancyProductsDataAttributesProductsItems + +class TenancyProductsDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tenancy_products_data_attributes_products_items import TenancyProductsDataAttributesProductsItems + return { + "products": ([TenancyProductsDataAttributesProductsItems],), + } + attribute_map = { + "products": "products", + } + + def __init__(self_, products: Union[List[TenancyProductsDataAttributesProductsItems], UnsetType]=unset, **kwargs): + """ + Attributes of an OCI tenancy product resource, containing the list of available products and their enablement status. + + :param products: List of Datadog products and their enablement status for the tenancy. + :type products: [TenancyProductsDataAttributesProductsItems], optional + """ + if products is not unset: + kwargs["products"] = products + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tenancy_products_data_attributes_products_items.py b/datadog_api_client/v2/model/tenancy_products_data_attributes_products_items.py new file mode 100644 index 0000000000..b9b71ed4e0 --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_products_data_attributes_products_items.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TenancyProductsDataAttributesProductsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + "product_key": (str,), + } + attribute_map = { + "enabled": "enabled", + "product_key": "product_key", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, product_key: Union[str, UnsetType]=unset, **kwargs): + """ + An individual Datadog product with its enablement status for a tenancy. + + :param enabled: Indicates whether the product is enabled for the tenancy. + :type enabled: bool, optional + + :param product_key: The unique key identifying the Datadog product (for example, CLOUD_SECURITY_POSTURE_MANAGEMENT). + :type product_key: str, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if product_key is not unset: + kwargs["product_key"] = product_key + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/tenancy_products_data_type.py b/datadog_api_client/v2/model/tenancy_products_data_type.py new file mode 100644 index 0000000000..786b9f202c --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_products_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TenancyProductsDataType(ModelSimple): + """ + OCI tenancy product resource type. + + :param value: If omitted defaults to "oci_tenancy_product". Must be one of ["oci_tenancy_product"]. + :type value: str + """ + + allowed_values = { + "oci_tenancy_product", + } + OCI_TENANCY_PRODUCT: ClassVar["TenancyProductsDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TenancyProductsDataType.OCI_TENANCY_PRODUCT = TenancyProductsDataType("oci_tenancy_product") diff --git a/datadog_api_client/v2/model/tenancy_products_list.py b/datadog_api_client/v2/model/tenancy_products_list.py new file mode 100644 index 0000000000..385e8f5d9d --- /dev/null +++ b/datadog_api_client/v2/model/tenancy_products_list.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.tenancy_products_data import TenancyProductsData + +class TenancyProductsList(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.tenancy_products_data import TenancyProductsData + return { + "data": ([TenancyProductsData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[TenancyProductsData], **kwargs): + """ + Response containing a list of OCI tenancy product resources with their product enablement status. + + :param data: List of OCI tenancy product resource objects. + :type data: [TenancyProductsData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/test_optimization_delete_service_settings_request.py b/datadog_api_client/v2/model/test_optimization_delete_service_settings_request.py new file mode 100644 index 0000000000..2879277059 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_delete_service_settings_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_delete_service_settings_request_data import TestOptimizationDeleteServiceSettingsRequestData + +class TestOptimizationDeleteServiceSettingsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_delete_service_settings_request_data import TestOptimizationDeleteServiceSettingsRequestData + return { + "data": (TestOptimizationDeleteServiceSettingsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TestOptimizationDeleteServiceSettingsRequestData, **kwargs): + """ + Request object for deleting Test Optimization service settings. + + :param data: Data object for delete service settings request. + :type data: TestOptimizationDeleteServiceSettingsRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/test_optimization_delete_service_settings_request_attributes.py b/datadog_api_client/v2/model/test_optimization_delete_service_settings_request_attributes.py new file mode 100644 index 0000000000..69f241961c --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_delete_service_settings_request_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TestOptimizationDeleteServiceSettingsRequestAttributes(ModelNormal): + validations = { + "repository_id": { + "min_length": 1, + }, + "service_name": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "env": (str,), + "repository_id": (str,), + "service_name": (str,), + } + attribute_map = { + "env": "env", + "repository_id": "repository_id", + "service_name": "service_name", + } + + def __init__(self_, repository_id: str, service_name: str, env: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for deleting Test Optimization service settings. + + :param env: The environment name. If omitted, defaults to ``none``. + :type env: str, optional + + :param repository_id: The repository identifier. + :type repository_id: str + + :param service_name: The service name. + :type service_name: str + """ + if env is not unset: + kwargs["env"] = env + super().__init__(kwargs) + + + self_.repository_id = repository_id + self_.service_name = service_name diff --git a/datadog_api_client/v2/model/test_optimization_delete_service_settings_request_data.py b/datadog_api_client/v2/model/test_optimization_delete_service_settings_request_data.py new file mode 100644 index 0000000000..cb4d640019 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_delete_service_settings_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_delete_service_settings_request_attributes import TestOptimizationDeleteServiceSettingsRequestAttributes + from datadog_api_client.v2.model.test_optimization_delete_service_settings_request_data_type import TestOptimizationDeleteServiceSettingsRequestDataType + +class TestOptimizationDeleteServiceSettingsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_delete_service_settings_request_attributes import TestOptimizationDeleteServiceSettingsRequestAttributes + from datadog_api_client.v2.model.test_optimization_delete_service_settings_request_data_type import TestOptimizationDeleteServiceSettingsRequestDataType + return { + "attributes": (TestOptimizationDeleteServiceSettingsRequestAttributes,), + "type": (TestOptimizationDeleteServiceSettingsRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TestOptimizationDeleteServiceSettingsRequestAttributes, type: TestOptimizationDeleteServiceSettingsRequestDataType, **kwargs): + """ + Data object for delete service settings request. + + :param attributes: Attributes for deleting Test Optimization service settings. + :type attributes: TestOptimizationDeleteServiceSettingsRequestAttributes + + :param type: JSON:API type for delete service settings request. + The value must always be ``test_optimization_delete_service_settings_request``. + :type type: TestOptimizationDeleteServiceSettingsRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/test_optimization_delete_service_settings_request_data_type.py b/datadog_api_client/v2/model/test_optimization_delete_service_settings_request_data_type.py new file mode 100644 index 0000000000..a5462f8857 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_delete_service_settings_request_data_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TestOptimizationDeleteServiceSettingsRequestDataType(ModelSimple): + """ + JSON:API type for delete service settings request. + The value must always be `test_optimization_delete_service_settings_request`. + + :param value: If omitted defaults to "test_optimization_delete_service_settings_request". Must be one of ["test_optimization_delete_service_settings_request"]. + :type value: str + """ + + allowed_values = { + "test_optimization_delete_service_settings_request", + } + TEST_OPTIMIZATION_DELETE_SERVICE_SETTINGS_REQUEST: ClassVar["TestOptimizationDeleteServiceSettingsRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TestOptimizationDeleteServiceSettingsRequestDataType.TEST_OPTIMIZATION_DELETE_SERVICE_SETTINGS_REQUEST = TestOptimizationDeleteServiceSettingsRequestDataType("test_optimization_delete_service_settings_request") diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_attempt_to_fix.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_attempt_to_fix.py new file mode 100644 index 0000000000..255334231d --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_attempt_to_fix.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TestOptimizationFlakyTestsManagementPoliciesAttemptToFix(ModelNormal): + @cached_property + def openapi_types(_): + return { + "retries": (int,), + } + attribute_map = { + "retries": "retries", + } + + def __init__(self_, retries: Union[int, UnsetType]=unset, **kwargs): + """ + Configuration for the attempt-to-fix Flaky Tests Management policy. + + :param retries: Number of retries when attempting to fix a flaky test. Must be greater than 0. + :type retries: int, optional + """ + if retries is not unset: + kwargs["retries"] = retries + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_attributes.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_attributes.py new file mode 100644 index 0000000000..0f5ab0e2b0 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_attempt_to_fix import TestOptimizationFlakyTestsManagementPoliciesAttemptToFix + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled import TestOptimizationFlakyTestsManagementPoliciesDisabled + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_quarantined import TestOptimizationFlakyTestsManagementPoliciesQuarantined + +class TestOptimizationFlakyTestsManagementPoliciesAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_attempt_to_fix import TestOptimizationFlakyTestsManagementPoliciesAttemptToFix + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled import TestOptimizationFlakyTestsManagementPoliciesDisabled + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_quarantined import TestOptimizationFlakyTestsManagementPoliciesQuarantined + return { + "attempt_to_fix": (TestOptimizationFlakyTestsManagementPoliciesAttemptToFix,), + "disabled": (TestOptimizationFlakyTestsManagementPoliciesDisabled,), + "quarantined": (TestOptimizationFlakyTestsManagementPoliciesQuarantined,), + "repository_id": (str,), + } + attribute_map = { + "attempt_to_fix": "attempt_to_fix", + "disabled": "disabled", + "quarantined": "quarantined", + "repository_id": "repository_id", + } + + def __init__(self_, attempt_to_fix: Union[TestOptimizationFlakyTestsManagementPoliciesAttemptToFix, UnsetType]=unset, disabled: Union[TestOptimizationFlakyTestsManagementPoliciesDisabled, UnsetType]=unset, quarantined: Union[TestOptimizationFlakyTestsManagementPoliciesQuarantined, UnsetType]=unset, repository_id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the Flaky Tests Management policies for a repository. + + :param attempt_to_fix: Configuration for the attempt-to-fix Flaky Tests Management policy. + :type attempt_to_fix: TestOptimizationFlakyTestsManagementPoliciesAttemptToFix, optional + + :param disabled: Configuration for the disabled Flaky Tests Management policy. + :type disabled: TestOptimizationFlakyTestsManagementPoliciesDisabled, optional + + :param quarantined: Configuration for the quarantined Flaky Tests Management policy. + :type quarantined: TestOptimizationFlakyTestsManagementPoliciesQuarantined, optional + + :param repository_id: The repository identifier. + :type repository_id: str, optional + """ + if attempt_to_fix is not unset: + kwargs["attempt_to_fix"] = attempt_to_fix + if disabled is not unset: + kwargs["disabled"] = disabled + if quarantined is not unset: + kwargs["quarantined"] = quarantined + if repository_id is not unset: + kwargs["repository_id"] = repository_id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_auto_disable_rule.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_auto_disable_rule.py new file mode 100644 index 0000000000..6fd08e9e50 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_auto_disable_rule.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled_status import TestOptimizationFlakyTestsManagementPoliciesDisabledStatus + +class TestOptimizationFlakyTestsManagementPoliciesAutoDisableRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled_status import TestOptimizationFlakyTestsManagementPoliciesDisabledStatus + return { + "enabled": (bool,), + "status": (TestOptimizationFlakyTestsManagementPoliciesDisabledStatus,), + "window_seconds": (int,), + } + attribute_map = { + "enabled": "enabled", + "status": "status", + "window_seconds": "window_seconds", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, status: Union[TestOptimizationFlakyTestsManagementPoliciesDisabledStatus, UnsetType]=unset, window_seconds: Union[int, UnsetType]=unset, **kwargs): + """ + Automatic disable triggering rule based on a time window and test status. + + :param enabled: Whether this auto-disable rule is enabled. + :type enabled: bool, optional + + :param status: Test status that the disable policy applies to. + Must be either ``active`` or ``quarantined``. + :type status: TestOptimizationFlakyTestsManagementPoliciesDisabledStatus, optional + + :param window_seconds: Time window in seconds over which flakiness is evaluated. Must be greater than 0. + :type window_seconds: int, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if status is not unset: + kwargs["status"] = status + if window_seconds is not unset: + kwargs["window_seconds"] = window_seconds + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_auto_quarantine_rule.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_auto_quarantine_rule.py new file mode 100644 index 0000000000..5789e6b17c --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_auto_quarantine_rule.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TestOptimizationFlakyTestsManagementPoliciesAutoQuarantineRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + "window_seconds": (int,), + } + attribute_map = { + "enabled": "enabled", + "window_seconds": "window_seconds", + } + + def __init__(self_, enabled: Union[bool, UnsetType]=unset, window_seconds: Union[int, UnsetType]=unset, **kwargs): + """ + Automatic quarantine triggering rule based on a time window. + + :param enabled: Whether this auto-quarantine rule is enabled. + :type enabled: bool, optional + + :param window_seconds: Time window in seconds over which flakiness is evaluated. Must be greater than 0. + :type window_seconds: int, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + if window_seconds is not unset: + kwargs["window_seconds"] = window_seconds + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_branch_rule.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_branch_rule.py new file mode 100644 index 0000000000..5de95b5d1f --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_branch_rule.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TestOptimizationFlakyTestsManagementPoliciesBranchRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "branches": ([str],), + "enabled": (bool,), + "excluded_branches": ([str],), + "excluded_test_services": ([str],), + } + attribute_map = { + "branches": "branches", + "enabled": "enabled", + "excluded_branches": "excluded_branches", + "excluded_test_services": "excluded_test_services", + } + + def __init__(self_, branches: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, excluded_branches: Union[List[str], UnsetType]=unset, excluded_test_services: Union[List[str], UnsetType]=unset, **kwargs): + """ + Branch filtering rule for a Flaky Tests Management policy. + + :param branches: List of branches to which the policy applies. + :type branches: [str], optional + + :param enabled: Whether this branch rule is enabled. + :type enabled: bool, optional + + :param excluded_branches: List of branches excluded from the policy. + :type excluded_branches: [str], optional + + :param excluded_test_services: List of test services excluded from the policy. + :type excluded_test_services: [str], optional + """ + if branches is not unset: + kwargs["branches"] = branches + if enabled is not unset: + kwargs["enabled"] = enabled + if excluded_branches is not unset: + kwargs["excluded_branches"] = excluded_branches + if excluded_test_services is not unset: + kwargs["excluded_test_services"] = excluded_test_services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_data.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_data.py new file mode 100644 index 0000000000..3ffe65d9f6 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_attributes import TestOptimizationFlakyTestsManagementPoliciesAttributes + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_type import TestOptimizationFlakyTestsManagementPoliciesType + +class TestOptimizationFlakyTestsManagementPoliciesData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_attributes import TestOptimizationFlakyTestsManagementPoliciesAttributes + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_type import TestOptimizationFlakyTestsManagementPoliciesType + return { + "attributes": (TestOptimizationFlakyTestsManagementPoliciesAttributes,), + "id": (str,), + "type": (TestOptimizationFlakyTestsManagementPoliciesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[TestOptimizationFlakyTestsManagementPoliciesAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[TestOptimizationFlakyTestsManagementPoliciesType, UnsetType]=unset, **kwargs): + """ + Data object for Flaky Tests Management policies response. + + :param attributes: Attributes of the Flaky Tests Management policies for a repository. + :type attributes: TestOptimizationFlakyTestsManagementPoliciesAttributes, optional + + :param id: The repository identifier used as the resource ID. + :type id: str, optional + + :param type: JSON:API type for Flaky Tests Management policies response. + The value must always be ``test_optimization_flaky_tests_management_policies``. + :type type: TestOptimizationFlakyTestsManagementPoliciesType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_disabled.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_disabled.py new file mode 100644 index 0000000000..fb8d480fa4 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_disabled.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_auto_disable_rule import TestOptimizationFlakyTestsManagementPoliciesAutoDisableRule + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_branch_rule import TestOptimizationFlakyTestsManagementPoliciesBranchRule + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled_failure_rate_rule import TestOptimizationFlakyTestsManagementPoliciesDisabledFailureRateRule + +class TestOptimizationFlakyTestsManagementPoliciesDisabled(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_auto_disable_rule import TestOptimizationFlakyTestsManagementPoliciesAutoDisableRule + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_branch_rule import TestOptimizationFlakyTestsManagementPoliciesBranchRule + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled_failure_rate_rule import TestOptimizationFlakyTestsManagementPoliciesDisabledFailureRateRule + return { + "auto_disable_rule": (TestOptimizationFlakyTestsManagementPoliciesAutoDisableRule,), + "branch_rule": (TestOptimizationFlakyTestsManagementPoliciesBranchRule,), + "enabled": (bool,), + "failure_rate_rule": (TestOptimizationFlakyTestsManagementPoliciesDisabledFailureRateRule,), + } + attribute_map = { + "auto_disable_rule": "auto_disable_rule", + "branch_rule": "branch_rule", + "enabled": "enabled", + "failure_rate_rule": "failure_rate_rule", + } + + def __init__(self_, auto_disable_rule: Union[TestOptimizationFlakyTestsManagementPoliciesAutoDisableRule, UnsetType]=unset, branch_rule: Union[TestOptimizationFlakyTestsManagementPoliciesBranchRule, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, failure_rate_rule: Union[TestOptimizationFlakyTestsManagementPoliciesDisabledFailureRateRule, UnsetType]=unset, **kwargs): + """ + Configuration for the disabled Flaky Tests Management policy. + + :param auto_disable_rule: Automatic disable triggering rule based on a time window and test status. + :type auto_disable_rule: TestOptimizationFlakyTestsManagementPoliciesAutoDisableRule, optional + + :param branch_rule: Branch filtering rule for a Flaky Tests Management policy. + :type branch_rule: TestOptimizationFlakyTestsManagementPoliciesBranchRule, optional + + :param enabled: Whether the disabled policy is enabled. + :type enabled: bool, optional + + :param failure_rate_rule: Failure-rate-based rule for the disabled policy. + :type failure_rate_rule: TestOptimizationFlakyTestsManagementPoliciesDisabledFailureRateRule, optional + """ + if auto_disable_rule is not unset: + kwargs["auto_disable_rule"] = auto_disable_rule + if branch_rule is not unset: + kwargs["branch_rule"] = branch_rule + if enabled is not unset: + kwargs["enabled"] = enabled + if failure_rate_rule is not unset: + kwargs["failure_rate_rule"] = failure_rate_rule + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_disabled_failure_rate_rule.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_disabled_failure_rate_rule.py new file mode 100644 index 0000000000..080a503c3a --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_disabled_failure_rate_rule.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled_status import TestOptimizationFlakyTestsManagementPoliciesDisabledStatus + +class TestOptimizationFlakyTestsManagementPoliciesDisabledFailureRateRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled_status import TestOptimizationFlakyTestsManagementPoliciesDisabledStatus + return { + "branches": ([str],), + "enabled": (bool,), + "min_runs": (int,), + "status": (TestOptimizationFlakyTestsManagementPoliciesDisabledStatus,), + "threshold": (float,), + } + attribute_map = { + "branches": "branches", + "enabled": "enabled", + "min_runs": "min_runs", + "status": "status", + "threshold": "threshold", + } + + def __init__(self_, branches: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, min_runs: Union[int, UnsetType]=unset, status: Union[TestOptimizationFlakyTestsManagementPoliciesDisabledStatus, UnsetType]=unset, threshold: Union[float, UnsetType]=unset, **kwargs): + """ + Failure-rate-based rule for the disabled policy. + + :param branches: List of branches to which this rule applies. + :type branches: [str], optional + + :param enabled: Whether this failure rate rule is enabled. + :type enabled: bool, optional + + :param min_runs: Minimum number of runs required before the rule is evaluated. Must be greater than or equal to 0. + :type min_runs: int, optional + + :param status: Test status that the disable policy applies to. + Must be either ``active`` or ``quarantined``. + :type status: TestOptimizationFlakyTestsManagementPoliciesDisabledStatus, optional + + :param threshold: Failure rate threshold (0.0–1.0) above which the rule triggers. + :type threshold: float, optional + """ + if branches is not unset: + kwargs["branches"] = branches + if enabled is not unset: + kwargs["enabled"] = enabled + if min_runs is not unset: + kwargs["min_runs"] = min_runs + if status is not unset: + kwargs["status"] = status + if threshold is not unset: + kwargs["threshold"] = threshold + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_disabled_status.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_disabled_status.py new file mode 100644 index 0000000000..00aa010cd0 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_disabled_status.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TestOptimizationFlakyTestsManagementPoliciesDisabledStatus(ModelSimple): + """ + Test status that the disable policy applies to. + Must be either `active` or `quarantined`. + + :param value: Must be one of ["active", "quarantined"]. + :type value: str + """ + + allowed_values = { + "active", + "quarantined", + } + ACTIVE: ClassVar["TestOptimizationFlakyTestsManagementPoliciesDisabledStatus"] + QUARANTINED: ClassVar["TestOptimizationFlakyTestsManagementPoliciesDisabledStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TestOptimizationFlakyTestsManagementPoliciesDisabledStatus.ACTIVE = TestOptimizationFlakyTestsManagementPoliciesDisabledStatus("active") +TestOptimizationFlakyTestsManagementPoliciesDisabledStatus.QUARANTINED = TestOptimizationFlakyTestsManagementPoliciesDisabledStatus("quarantined") diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_get_request.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_get_request.py new file mode 100644 index 0000000000..e221a8c9fb --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_get_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_get_request_data import TestOptimizationFlakyTestsManagementPoliciesGetRequestData + +class TestOptimizationFlakyTestsManagementPoliciesGetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_get_request_data import TestOptimizationFlakyTestsManagementPoliciesGetRequestData + return { + "data": (TestOptimizationFlakyTestsManagementPoliciesGetRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TestOptimizationFlakyTestsManagementPoliciesGetRequestData, **kwargs): + """ + Request object for getting Flaky Tests Management policies. + + :param data: Data object for get Flaky Tests Management policies request. + :type data: TestOptimizationFlakyTestsManagementPoliciesGetRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_get_request_attributes.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_get_request_attributes.py new file mode 100644 index 0000000000..edd3ece188 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_get_request_attributes.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TestOptimizationFlakyTestsManagementPoliciesGetRequestAttributes(ModelNormal): + validations = { + "repository_id": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "repository_id": (str,), + } + attribute_map = { + "repository_id": "repository_id", + } + + def __init__(self_, repository_id: str, **kwargs): + """ + Attributes for requesting Flaky Tests Management policies. + + :param repository_id: The repository identifier. + :type repository_id: str + """ + super().__init__(kwargs) + + + self_.repository_id = repository_id diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_get_request_data.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_get_request_data.py new file mode 100644 index 0000000000..a7d996c8d3 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_get_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_get_request_attributes import TestOptimizationFlakyTestsManagementPoliciesGetRequestAttributes + from datadog_api_client.v2.model.test_optimization_get_flaky_tests_management_policies_request_data_type import TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType + +class TestOptimizationFlakyTestsManagementPoliciesGetRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_get_request_attributes import TestOptimizationFlakyTestsManagementPoliciesGetRequestAttributes + from datadog_api_client.v2.model.test_optimization_get_flaky_tests_management_policies_request_data_type import TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType + return { + "attributes": (TestOptimizationFlakyTestsManagementPoliciesGetRequestAttributes,), + "type": (TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TestOptimizationFlakyTestsManagementPoliciesGetRequestAttributes, type: TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType, **kwargs): + """ + Data object for get Flaky Tests Management policies request. + + :param attributes: Attributes for requesting Flaky Tests Management policies. + :type attributes: TestOptimizationFlakyTestsManagementPoliciesGetRequestAttributes + + :param type: JSON:API type for get Flaky Tests Management policies request. + The value must always be ``test_optimization_get_flaky_tests_management_policies_request``. + :type type: TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_quarantined.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_quarantined.py new file mode 100644 index 0000000000..5e67cd4655 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_quarantined.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_auto_quarantine_rule import TestOptimizationFlakyTestsManagementPoliciesAutoQuarantineRule + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_branch_rule import TestOptimizationFlakyTestsManagementPoliciesBranchRule + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_quarantined_failure_rate_rule import TestOptimizationFlakyTestsManagementPoliciesQuarantinedFailureRateRule + +class TestOptimizationFlakyTestsManagementPoliciesQuarantined(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_auto_quarantine_rule import TestOptimizationFlakyTestsManagementPoliciesAutoQuarantineRule + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_branch_rule import TestOptimizationFlakyTestsManagementPoliciesBranchRule + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_quarantined_failure_rate_rule import TestOptimizationFlakyTestsManagementPoliciesQuarantinedFailureRateRule + return { + "auto_quarantine_rule": (TestOptimizationFlakyTestsManagementPoliciesAutoQuarantineRule,), + "branch_rule": (TestOptimizationFlakyTestsManagementPoliciesBranchRule,), + "enabled": (bool,), + "failure_rate_rule": (TestOptimizationFlakyTestsManagementPoliciesQuarantinedFailureRateRule,), + } + attribute_map = { + "auto_quarantine_rule": "auto_quarantine_rule", + "branch_rule": "branch_rule", + "enabled": "enabled", + "failure_rate_rule": "failure_rate_rule", + } + + def __init__(self_, auto_quarantine_rule: Union[TestOptimizationFlakyTestsManagementPoliciesAutoQuarantineRule, UnsetType]=unset, branch_rule: Union[TestOptimizationFlakyTestsManagementPoliciesBranchRule, UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, failure_rate_rule: Union[TestOptimizationFlakyTestsManagementPoliciesQuarantinedFailureRateRule, UnsetType]=unset, **kwargs): + """ + Configuration for the quarantined Flaky Tests Management policy. + + :param auto_quarantine_rule: Automatic quarantine triggering rule based on a time window. + :type auto_quarantine_rule: TestOptimizationFlakyTestsManagementPoliciesAutoQuarantineRule, optional + + :param branch_rule: Branch filtering rule for a Flaky Tests Management policy. + :type branch_rule: TestOptimizationFlakyTestsManagementPoliciesBranchRule, optional + + :param enabled: Whether the quarantined policy is enabled. + :type enabled: bool, optional + + :param failure_rate_rule: Failure-rate-based rule for the quarantined policy. + :type failure_rate_rule: TestOptimizationFlakyTestsManagementPoliciesQuarantinedFailureRateRule, optional + """ + if auto_quarantine_rule is not unset: + kwargs["auto_quarantine_rule"] = auto_quarantine_rule + if branch_rule is not unset: + kwargs["branch_rule"] = branch_rule + if enabled is not unset: + kwargs["enabled"] = enabled + if failure_rate_rule is not unset: + kwargs["failure_rate_rule"] = failure_rate_rule + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_quarantined_failure_rate_rule.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_quarantined_failure_rate_rule.py new file mode 100644 index 0000000000..85185ebbfb --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_quarantined_failure_rate_rule.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TestOptimizationFlakyTestsManagementPoliciesQuarantinedFailureRateRule(ModelNormal): + @cached_property + def openapi_types(_): + return { + "branches": ([str],), + "enabled": (bool,), + "min_runs": (int,), + "threshold": (float,), + } + attribute_map = { + "branches": "branches", + "enabled": "enabled", + "min_runs": "min_runs", + "threshold": "threshold", + } + + def __init__(self_, branches: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, min_runs: Union[int, UnsetType]=unset, threshold: Union[float, UnsetType]=unset, **kwargs): + """ + Failure-rate-based rule for the quarantined policy. + + :param branches: List of branches to which this rule applies. + :type branches: [str], optional + + :param enabled: Whether this failure rate rule is enabled. + :type enabled: bool, optional + + :param min_runs: Minimum number of runs required before the rule is evaluated. Must be greater than or equal to 0. + :type min_runs: int, optional + + :param threshold: Failure rate threshold (0.0–1.0) above which the rule triggers. + :type threshold: float, optional + """ + if branches is not unset: + kwargs["branches"] = branches + if enabled is not unset: + kwargs["enabled"] = enabled + if min_runs is not unset: + kwargs["min_runs"] = min_runs + if threshold is not unset: + kwargs["threshold"] = threshold + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_response.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_response.py new file mode 100644 index 0000000000..01f434e357 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_data import TestOptimizationFlakyTestsManagementPoliciesData + +class TestOptimizationFlakyTestsManagementPoliciesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_data import TestOptimizationFlakyTestsManagementPoliciesData + return { + "data": (TestOptimizationFlakyTestsManagementPoliciesData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TestOptimizationFlakyTestsManagementPoliciesData, UnsetType]=unset, **kwargs): + """ + Response object containing Flaky Tests Management policies for a repository. + + :param data: Data object for Flaky Tests Management policies response. + :type data: TestOptimizationFlakyTestsManagementPoliciesData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_type.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_type.py new file mode 100644 index 0000000000..62b0e92dd8 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TestOptimizationFlakyTestsManagementPoliciesType(ModelSimple): + """ + JSON:API type for Flaky Tests Management policies response. + The value must always be `test_optimization_flaky_tests_management_policies`. + + :param value: If omitted defaults to "test_optimization_flaky_tests_management_policies". Must be one of ["test_optimization_flaky_tests_management_policies"]. + :type value: str + """ + + allowed_values = { + "test_optimization_flaky_tests_management_policies", + } + TEST_OPTIMIZATION_FLAKY_TESTS_MANAGEMENT_POLICIES: ClassVar["TestOptimizationFlakyTestsManagementPoliciesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TestOptimizationFlakyTestsManagementPoliciesType.TEST_OPTIMIZATION_FLAKY_TESTS_MANAGEMENT_POLICIES = TestOptimizationFlakyTestsManagementPoliciesType("test_optimization_flaky_tests_management_policies") diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_update_request.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_update_request.py new file mode 100644 index 0000000000..100d6154be --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_update_request_data import TestOptimizationFlakyTestsManagementPoliciesUpdateRequestData + +class TestOptimizationFlakyTestsManagementPoliciesUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_update_request_data import TestOptimizationFlakyTestsManagementPoliciesUpdateRequestData + return { + "data": (TestOptimizationFlakyTestsManagementPoliciesUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TestOptimizationFlakyTestsManagementPoliciesUpdateRequestData, **kwargs): + """ + Request object for updating Flaky Tests Management policies. + + :param data: Data object for update Flaky Tests Management policies request. + :type data: TestOptimizationFlakyTestsManagementPoliciesUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_update_request_attributes.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_update_request_attributes.py new file mode 100644 index 0000000000..1f7b4223b8 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_update_request_attributes.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_attempt_to_fix import TestOptimizationFlakyTestsManagementPoliciesAttemptToFix + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled import TestOptimizationFlakyTestsManagementPoliciesDisabled + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_quarantined import TestOptimizationFlakyTestsManagementPoliciesQuarantined + +class TestOptimizationFlakyTestsManagementPoliciesUpdateRequestAttributes(ModelNormal): + validations = { + "repository_id": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_attempt_to_fix import TestOptimizationFlakyTestsManagementPoliciesAttemptToFix + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled import TestOptimizationFlakyTestsManagementPoliciesDisabled + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_quarantined import TestOptimizationFlakyTestsManagementPoliciesQuarantined + return { + "attempt_to_fix": (TestOptimizationFlakyTestsManagementPoliciesAttemptToFix,), + "disabled": (TestOptimizationFlakyTestsManagementPoliciesDisabled,), + "quarantined": (TestOptimizationFlakyTestsManagementPoliciesQuarantined,), + "repository_id": (str,), + } + attribute_map = { + "attempt_to_fix": "attempt_to_fix", + "disabled": "disabled", + "quarantined": "quarantined", + "repository_id": "repository_id", + } + + def __init__(self_, repository_id: str, attempt_to_fix: Union[TestOptimizationFlakyTestsManagementPoliciesAttemptToFix, UnsetType]=unset, disabled: Union[TestOptimizationFlakyTestsManagementPoliciesDisabled, UnsetType]=unset, quarantined: Union[TestOptimizationFlakyTestsManagementPoliciesQuarantined, UnsetType]=unset, **kwargs): + """ + Attributes for updating Flaky Tests Management policies. + Only provided policy blocks are updated; omitted blocks are left unchanged. + + :param attempt_to_fix: Configuration for the attempt-to-fix Flaky Tests Management policy. + :type attempt_to_fix: TestOptimizationFlakyTestsManagementPoliciesAttemptToFix, optional + + :param disabled: Configuration for the disabled Flaky Tests Management policy. + :type disabled: TestOptimizationFlakyTestsManagementPoliciesDisabled, optional + + :param quarantined: Configuration for the quarantined Flaky Tests Management policy. + :type quarantined: TestOptimizationFlakyTestsManagementPoliciesQuarantined, optional + + :param repository_id: The repository identifier. + :type repository_id: str + """ + if attempt_to_fix is not unset: + kwargs["attempt_to_fix"] = attempt_to_fix + if disabled is not unset: + kwargs["disabled"] = disabled + if quarantined is not unset: + kwargs["quarantined"] = quarantined + super().__init__(kwargs) + + + self_.repository_id = repository_id diff --git a/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_update_request_data.py b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_update_request_data.py new file mode 100644 index 0000000000..a5713dd424 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_flaky_tests_management_policies_update_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_update_request_attributes import TestOptimizationFlakyTestsManagementPoliciesUpdateRequestAttributes + from datadog_api_client.v2.model.test_optimization_update_flaky_tests_management_policies_request_data_type import TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType + +class TestOptimizationFlakyTestsManagementPoliciesUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_update_request_attributes import TestOptimizationFlakyTestsManagementPoliciesUpdateRequestAttributes + from datadog_api_client.v2.model.test_optimization_update_flaky_tests_management_policies_request_data_type import TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType + return { + "attributes": (TestOptimizationFlakyTestsManagementPoliciesUpdateRequestAttributes,), + "type": (TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TestOptimizationFlakyTestsManagementPoliciesUpdateRequestAttributes, type: TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType, **kwargs): + """ + Data object for update Flaky Tests Management policies request. + + :param attributes: Attributes for updating Flaky Tests Management policies. + Only provided policy blocks are updated; omitted blocks are left unchanged. + :type attributes: TestOptimizationFlakyTestsManagementPoliciesUpdateRequestAttributes + + :param type: JSON:API type for update Flaky Tests Management policies request. + The value must always be ``test_optimization_update_flaky_tests_management_policies_request``. + :type type: TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/test_optimization_get_flaky_tests_management_policies_request_data_type.py b/datadog_api_client/v2/model/test_optimization_get_flaky_tests_management_policies_request_data_type.py new file mode 100644 index 0000000000..dd9dce68b0 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_get_flaky_tests_management_policies_request_data_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType(ModelSimple): + """ + JSON:API type for get Flaky Tests Management policies request. + The value must always be `test_optimization_get_flaky_tests_management_policies_request`. + + :param value: If omitted defaults to "test_optimization_get_flaky_tests_management_policies_request". Must be one of ["test_optimization_get_flaky_tests_management_policies_request"]. + :type value: str + """ + + allowed_values = { + "test_optimization_get_flaky_tests_management_policies_request", + } + TEST_OPTIMIZATION_GET_FLAKY_TESTS_MANAGEMENT_POLICIES_REQUEST: ClassVar["TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType.TEST_OPTIMIZATION_GET_FLAKY_TESTS_MANAGEMENT_POLICIES_REQUEST = TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType("test_optimization_get_flaky_tests_management_policies_request") diff --git a/datadog_api_client/v2/model/test_optimization_get_service_settings_request.py b/datadog_api_client/v2/model/test_optimization_get_service_settings_request.py new file mode 100644 index 0000000000..2f19e1195a --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_get_service_settings_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_get_service_settings_request_data import TestOptimizationGetServiceSettingsRequestData + +class TestOptimizationGetServiceSettingsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_get_service_settings_request_data import TestOptimizationGetServiceSettingsRequestData + return { + "data": (TestOptimizationGetServiceSettingsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TestOptimizationGetServiceSettingsRequestData, **kwargs): + """ + Request object for getting Test Optimization service settings. + + :param data: Data object for get service settings request. + :type data: TestOptimizationGetServiceSettingsRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/test_optimization_get_service_settings_request_attributes.py b/datadog_api_client/v2/model/test_optimization_get_service_settings_request_attributes.py new file mode 100644 index 0000000000..87186f4518 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_get_service_settings_request_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TestOptimizationGetServiceSettingsRequestAttributes(ModelNormal): + validations = { + "repository_id": { + "min_length": 1, + }, + "service_name": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "env": (str,), + "repository_id": (str,), + "service_name": (str,), + } + attribute_map = { + "env": "env", + "repository_id": "repository_id", + "service_name": "service_name", + } + + def __init__(self_, repository_id: str, service_name: str, env: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for requesting Test Optimization service settings. + + :param env: The environment name. If omitted, defaults to ``none``. + :type env: str, optional + + :param repository_id: The repository identifier. + :type repository_id: str + + :param service_name: The service name. + :type service_name: str + """ + if env is not unset: + kwargs["env"] = env + super().__init__(kwargs) + + + self_.repository_id = repository_id + self_.service_name = service_name diff --git a/datadog_api_client/v2/model/test_optimization_get_service_settings_request_data.py b/datadog_api_client/v2/model/test_optimization_get_service_settings_request_data.py new file mode 100644 index 0000000000..520faa3cdf --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_get_service_settings_request_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_get_service_settings_request_attributes import TestOptimizationGetServiceSettingsRequestAttributes + from datadog_api_client.v2.model.test_optimization_get_service_settings_request_data_type import TestOptimizationGetServiceSettingsRequestDataType + +class TestOptimizationGetServiceSettingsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_get_service_settings_request_attributes import TestOptimizationGetServiceSettingsRequestAttributes + from datadog_api_client.v2.model.test_optimization_get_service_settings_request_data_type import TestOptimizationGetServiceSettingsRequestDataType + return { + "attributes": (TestOptimizationGetServiceSettingsRequestAttributes,), + "type": (TestOptimizationGetServiceSettingsRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TestOptimizationGetServiceSettingsRequestAttributes, type: TestOptimizationGetServiceSettingsRequestDataType, **kwargs): + """ + Data object for get service settings request. + + :param attributes: Attributes for requesting Test Optimization service settings. + :type attributes: TestOptimizationGetServiceSettingsRequestAttributes + + :param type: JSON:API type for get service settings request. + The value must always be ``test_optimization_get_service_settings_request``. + :type type: TestOptimizationGetServiceSettingsRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/test_optimization_get_service_settings_request_data_type.py b/datadog_api_client/v2/model/test_optimization_get_service_settings_request_data_type.py new file mode 100644 index 0000000000..2793b5a774 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_get_service_settings_request_data_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TestOptimizationGetServiceSettingsRequestDataType(ModelSimple): + """ + JSON:API type for get service settings request. + The value must always be `test_optimization_get_service_settings_request`. + + :param value: If omitted defaults to "test_optimization_get_service_settings_request". Must be one of ["test_optimization_get_service_settings_request"]. + :type value: str + """ + + allowed_values = { + "test_optimization_get_service_settings_request", + } + TEST_OPTIMIZATION_GET_SERVICE_SETTINGS_REQUEST: ClassVar["TestOptimizationGetServiceSettingsRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TestOptimizationGetServiceSettingsRequestDataType.TEST_OPTIMIZATION_GET_SERVICE_SETTINGS_REQUEST = TestOptimizationGetServiceSettingsRequestDataType("test_optimization_get_service_settings_request") diff --git a/datadog_api_client/v2/model/test_optimization_service_settings_attributes.py b/datadog_api_client/v2/model/test_optimization_service_settings_attributes.py new file mode 100644 index 0000000000..c892b4d29c --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_service_settings_attributes.py @@ -0,0 +1,137 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TestOptimizationServiceSettingsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "auto_test_retries_enabled": (bool,), + "auto_test_retries_enabled_is_overridden": (bool,), + "code_coverage_enabled": (bool,), + "code_coverage_enabled_is_overridden": (bool,), + "early_flake_detection_enabled": (bool,), + "early_flake_detection_enabled_is_overridden": (bool,), + "env": (str,), + "failed_test_replay_enabled": (bool,), + "failed_test_replay_enabled_is_overridden": (bool,), + "pr_comments_enabled": (bool,), + "repository_id": (str,), + "service_name": (str,), + "test_impact_analysis_enabled": (bool,), + "test_impact_analysis_enabled_is_overridden": (bool,), + } + attribute_map = { + "auto_test_retries_enabled": "auto_test_retries_enabled", + "auto_test_retries_enabled_is_overridden": "auto_test_retries_enabled_is_overridden", + "code_coverage_enabled": "code_coverage_enabled", + "code_coverage_enabled_is_overridden": "code_coverage_enabled_is_overridden", + "early_flake_detection_enabled": "early_flake_detection_enabled", + "early_flake_detection_enabled_is_overridden": "early_flake_detection_enabled_is_overridden", + "env": "env", + "failed_test_replay_enabled": "failed_test_replay_enabled", + "failed_test_replay_enabled_is_overridden": "failed_test_replay_enabled_is_overridden", + "pr_comments_enabled": "pr_comments_enabled", + "repository_id": "repository_id", + "service_name": "service_name", + "test_impact_analysis_enabled": "test_impact_analysis_enabled", + "test_impact_analysis_enabled_is_overridden": "test_impact_analysis_enabled_is_overridden", + } + + def __init__(self_, auto_test_retries_enabled: Union[bool, UnsetType]=unset, auto_test_retries_enabled_is_overridden: Union[bool, UnsetType]=unset, code_coverage_enabled: Union[bool, UnsetType]=unset, code_coverage_enabled_is_overridden: Union[bool, UnsetType]=unset, early_flake_detection_enabled: Union[bool, UnsetType]=unset, early_flake_detection_enabled_is_overridden: Union[bool, UnsetType]=unset, env: Union[str, UnsetType]=unset, failed_test_replay_enabled: Union[bool, UnsetType]=unset, failed_test_replay_enabled_is_overridden: Union[bool, UnsetType]=unset, pr_comments_enabled: Union[bool, UnsetType]=unset, repository_id: Union[str, UnsetType]=unset, service_name: Union[str, UnsetType]=unset, test_impact_analysis_enabled: Union[bool, UnsetType]=unset, test_impact_analysis_enabled_is_overridden: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for Test Optimization service settings. + + :param auto_test_retries_enabled: Whether Auto Test Retries are enabled for this service. + :type auto_test_retries_enabled: bool, optional + + :param auto_test_retries_enabled_is_overridden: Whether the Auto Test Retries setting is overridden at the service level. + :type auto_test_retries_enabled_is_overridden: bool, optional + + :param code_coverage_enabled: Whether Code Coverage is enabled for this service. + :type code_coverage_enabled: bool, optional + + :param code_coverage_enabled_is_overridden: Whether the Code Coverage setting is overridden at the service level. + :type code_coverage_enabled_is_overridden: bool, optional + + :param early_flake_detection_enabled: Whether Early Flake Detection is enabled for this service. + :type early_flake_detection_enabled: bool, optional + + :param early_flake_detection_enabled_is_overridden: Whether the Early Flake Detection setting is overridden at the service level. + :type early_flake_detection_enabled_is_overridden: bool, optional + + :param env: The environment name. + :type env: str, optional + + :param failed_test_replay_enabled: Whether Failed Test Replay is enabled for this service. + :type failed_test_replay_enabled: bool, optional + + :param failed_test_replay_enabled_is_overridden: Whether the Failed Test Replay setting is overridden at the service level. + :type failed_test_replay_enabled_is_overridden: bool, optional + + :param pr_comments_enabled: Whether PR Comments are enabled. This value reflects the repository-level setting and cannot be overridden at the service level. + :type pr_comments_enabled: bool, optional + + :param repository_id: The repository identifier. + :type repository_id: str, optional + + :param service_name: The service name. + :type service_name: str, optional + + :param test_impact_analysis_enabled: Whether Test Impact Analysis is enabled for this service. + :type test_impact_analysis_enabled: bool, optional + + :param test_impact_analysis_enabled_is_overridden: Whether the Test Impact Analysis setting is overridden at the service level. + :type test_impact_analysis_enabled_is_overridden: bool, optional + """ + if auto_test_retries_enabled is not unset: + kwargs["auto_test_retries_enabled"] = auto_test_retries_enabled + if auto_test_retries_enabled_is_overridden is not unset: + kwargs["auto_test_retries_enabled_is_overridden"] = auto_test_retries_enabled_is_overridden + if code_coverage_enabled is not unset: + kwargs["code_coverage_enabled"] = code_coverage_enabled + if code_coverage_enabled_is_overridden is not unset: + kwargs["code_coverage_enabled_is_overridden"] = code_coverage_enabled_is_overridden + if early_flake_detection_enabled is not unset: + kwargs["early_flake_detection_enabled"] = early_flake_detection_enabled + if early_flake_detection_enabled_is_overridden is not unset: + kwargs["early_flake_detection_enabled_is_overridden"] = early_flake_detection_enabled_is_overridden + if env is not unset: + kwargs["env"] = env + if failed_test_replay_enabled is not unset: + kwargs["failed_test_replay_enabled"] = failed_test_replay_enabled + if failed_test_replay_enabled_is_overridden is not unset: + kwargs["failed_test_replay_enabled_is_overridden"] = failed_test_replay_enabled_is_overridden + if pr_comments_enabled is not unset: + kwargs["pr_comments_enabled"] = pr_comments_enabled + if repository_id is not unset: + kwargs["repository_id"] = repository_id + if service_name is not unset: + kwargs["service_name"] = service_name + if test_impact_analysis_enabled is not unset: + kwargs["test_impact_analysis_enabled"] = test_impact_analysis_enabled + if test_impact_analysis_enabled_is_overridden is not unset: + kwargs["test_impact_analysis_enabled_is_overridden"] = test_impact_analysis_enabled_is_overridden + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_service_settings_data.py b/datadog_api_client/v2/model/test_optimization_service_settings_data.py new file mode 100644 index 0000000000..fcf18f33db --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_service_settings_data.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_service_settings_attributes import TestOptimizationServiceSettingsAttributes + from datadog_api_client.v2.model.test_optimization_service_settings_type import TestOptimizationServiceSettingsType + +class TestOptimizationServiceSettingsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_service_settings_attributes import TestOptimizationServiceSettingsAttributes + from datadog_api_client.v2.model.test_optimization_service_settings_type import TestOptimizationServiceSettingsType + return { + "attributes": (TestOptimizationServiceSettingsAttributes,), + "id": (str,), + "type": (TestOptimizationServiceSettingsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[TestOptimizationServiceSettingsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[TestOptimizationServiceSettingsType, UnsetType]=unset, **kwargs): + """ + Data object for Test Optimization service settings response. + + :param attributes: Attributes for Test Optimization service settings. + :type attributes: TestOptimizationServiceSettingsAttributes, optional + + :param id: Unique identifier for the service settings. + :type id: str, optional + + :param type: JSON:API type for service settings response. + The value must always be ``test_optimization_service_settings``. + :type type: TestOptimizationServiceSettingsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_service_settings_response.py b/datadog_api_client/v2/model/test_optimization_service_settings_response.py new file mode 100644 index 0000000000..f750566211 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_service_settings_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_service_settings_data import TestOptimizationServiceSettingsData + +class TestOptimizationServiceSettingsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_service_settings_data import TestOptimizationServiceSettingsData + return { + "data": (TestOptimizationServiceSettingsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TestOptimizationServiceSettingsData, UnsetType]=unset, **kwargs): + """ + Response object containing Test Optimization service settings. + + :param data: Data object for Test Optimization service settings response. + :type data: TestOptimizationServiceSettingsData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/test_optimization_service_settings_type.py b/datadog_api_client/v2/model/test_optimization_service_settings_type.py new file mode 100644 index 0000000000..5c18c0ef6a --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_service_settings_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TestOptimizationServiceSettingsType(ModelSimple): + """ + JSON:API type for service settings response. + The value must always be `test_optimization_service_settings`. + + :param value: If omitted defaults to "test_optimization_service_settings". Must be one of ["test_optimization_service_settings"]. + :type value: str + """ + + allowed_values = { + "test_optimization_service_settings", + } + TEST_OPTIMIZATION_SERVICE_SETTINGS: ClassVar["TestOptimizationServiceSettingsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TestOptimizationServiceSettingsType.TEST_OPTIMIZATION_SERVICE_SETTINGS = TestOptimizationServiceSettingsType("test_optimization_service_settings") diff --git a/datadog_api_client/v2/model/test_optimization_update_flaky_tests_management_policies_request_data_type.py b/datadog_api_client/v2/model/test_optimization_update_flaky_tests_management_policies_request_data_type.py new file mode 100644 index 0000000000..c6da2af033 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_update_flaky_tests_management_policies_request_data_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType(ModelSimple): + """ + JSON:API type for update Flaky Tests Management policies request. + The value must always be `test_optimization_update_flaky_tests_management_policies_request`. + + :param value: If omitted defaults to "test_optimization_update_flaky_tests_management_policies_request". Must be one of ["test_optimization_update_flaky_tests_management_policies_request"]. + :type value: str + """ + + allowed_values = { + "test_optimization_update_flaky_tests_management_policies_request", + } + TEST_OPTIMIZATION_UPDATE_FLAKY_TESTS_MANAGEMENT_POLICIES_REQUEST: ClassVar["TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType.TEST_OPTIMIZATION_UPDATE_FLAKY_TESTS_MANAGEMENT_POLICIES_REQUEST = TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType("test_optimization_update_flaky_tests_management_policies_request") diff --git a/datadog_api_client/v2/model/test_optimization_update_service_settings_request.py b/datadog_api_client/v2/model/test_optimization_update_service_settings_request.py new file mode 100644 index 0000000000..8ad3d85dac --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_update_service_settings_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_update_service_settings_request_data import TestOptimizationUpdateServiceSettingsRequestData + +class TestOptimizationUpdateServiceSettingsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_update_service_settings_request_data import TestOptimizationUpdateServiceSettingsRequestData + return { + "data": (TestOptimizationUpdateServiceSettingsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TestOptimizationUpdateServiceSettingsRequestData, **kwargs): + """ + Request object for updating Test Optimization service settings. + + :param data: Data object for update service settings request. + :type data: TestOptimizationUpdateServiceSettingsRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/test_optimization_update_service_settings_request_attributes.py b/datadog_api_client/v2/model/test_optimization_update_service_settings_request_attributes.py new file mode 100644 index 0000000000..6c24378914 --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_update_service_settings_request_attributes.py @@ -0,0 +1,145 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TestOptimizationUpdateServiceSettingsRequestAttributes(ModelNormal): + validations = { + "repository_id": { + "min_length": 1, + }, + "service_name": { + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "auto_test_retries_enabled": (bool,), + "auto_test_retries_enabled_inherit": (bool,), + "code_coverage_enabled": (bool,), + "code_coverage_enabled_inherit": (bool,), + "early_flake_detection_enabled": (bool,), + "early_flake_detection_enabled_inherit": (bool,), + "env": (str,), + "failed_test_replay_enabled": (bool,), + "failed_test_replay_enabled_inherit": (bool,), + "pr_comments_enabled": (bool,), + "repository_id": (str,), + "service_name": (str,), + "test_impact_analysis_enabled": (bool,), + "test_impact_analysis_enabled_inherit": (bool,), + } + attribute_map = { + "auto_test_retries_enabled": "auto_test_retries_enabled", + "auto_test_retries_enabled_inherit": "auto_test_retries_enabled_inherit", + "code_coverage_enabled": "code_coverage_enabled", + "code_coverage_enabled_inherit": "code_coverage_enabled_inherit", + "early_flake_detection_enabled": "early_flake_detection_enabled", + "early_flake_detection_enabled_inherit": "early_flake_detection_enabled_inherit", + "env": "env", + "failed_test_replay_enabled": "failed_test_replay_enabled", + "failed_test_replay_enabled_inherit": "failed_test_replay_enabled_inherit", + "pr_comments_enabled": "pr_comments_enabled", + "repository_id": "repository_id", + "service_name": "service_name", + "test_impact_analysis_enabled": "test_impact_analysis_enabled", + "test_impact_analysis_enabled_inherit": "test_impact_analysis_enabled_inherit", + } + + def __init__(self_, repository_id: str, service_name: str, auto_test_retries_enabled: Union[bool, UnsetType]=unset, auto_test_retries_enabled_inherit: Union[bool, UnsetType]=unset, code_coverage_enabled: Union[bool, UnsetType]=unset, code_coverage_enabled_inherit: Union[bool, UnsetType]=unset, early_flake_detection_enabled: Union[bool, UnsetType]=unset, early_flake_detection_enabled_inherit: Union[bool, UnsetType]=unset, env: Union[str, UnsetType]=unset, failed_test_replay_enabled: Union[bool, UnsetType]=unset, failed_test_replay_enabled_inherit: Union[bool, UnsetType]=unset, pr_comments_enabled: Union[bool, UnsetType]=unset, test_impact_analysis_enabled: Union[bool, UnsetType]=unset, test_impact_analysis_enabled_inherit: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for updating Test Optimization service settings. + All non-required fields are optional; only provided fields will be updated. + Setting a field to ``null`` is a no-op. To reset a setting to inherit from the repository level, use the corresponding ``_inherit`` field. + + :param auto_test_retries_enabled: Whether Auto Test Retries are enabled for this service. Setting to ``null`` is a no-op; use ``auto_test_retries_enabled_inherit`` to reset to repository-level inheritance. + :type auto_test_retries_enabled: bool, optional + + :param auto_test_retries_enabled_inherit: When ``true`` , resets the Auto Test Retries setting to inherit from the repository level. + :type auto_test_retries_enabled_inherit: bool, optional + + :param code_coverage_enabled: Whether Code Coverage is enabled for this service. Setting to ``null`` is a no-op; use ``code_coverage_enabled_inherit`` to reset to repository-level inheritance. + :type code_coverage_enabled: bool, optional + + :param code_coverage_enabled_inherit: When ``true`` , resets the Code Coverage setting to inherit from the repository level. + :type code_coverage_enabled_inherit: bool, optional + + :param early_flake_detection_enabled: Whether Early Flake Detection is enabled for this service. Setting to ``null`` is a no-op; use ``early_flake_detection_enabled_inherit`` to reset to repository-level inheritance. + :type early_flake_detection_enabled: bool, optional + + :param early_flake_detection_enabled_inherit: When ``true`` , resets the Early Flake Detection setting to inherit from the repository level. + :type early_flake_detection_enabled_inherit: bool, optional + + :param env: The environment name. If omitted, defaults to ``none``. + :type env: str, optional + + :param failed_test_replay_enabled: Whether Failed Test Replay is enabled for this service. Setting to ``null`` is a no-op; use ``failed_test_replay_enabled_inherit`` to reset to repository-level inheritance. + :type failed_test_replay_enabled: bool, optional + + :param failed_test_replay_enabled_inherit: When ``true`` , resets the Failed Test Replay setting to inherit from the repository level. + :type failed_test_replay_enabled_inherit: bool, optional + + :param pr_comments_enabled: This field is ignored. PR Comments cannot be overridden at the service level. + :type pr_comments_enabled: bool, optional + + :param repository_id: The repository identifier. + :type repository_id: str + + :param service_name: The service name. + :type service_name: str + + :param test_impact_analysis_enabled: Whether Test Impact Analysis is enabled for this service. Setting to ``null`` is a no-op; use ``test_impact_analysis_enabled_inherit`` to reset to repository-level inheritance. + :type test_impact_analysis_enabled: bool, optional + + :param test_impact_analysis_enabled_inherit: When ``true`` , resets the Test Impact Analysis setting to inherit from the repository level. + :type test_impact_analysis_enabled_inherit: bool, optional + """ + if auto_test_retries_enabled is not unset: + kwargs["auto_test_retries_enabled"] = auto_test_retries_enabled + if auto_test_retries_enabled_inherit is not unset: + kwargs["auto_test_retries_enabled_inherit"] = auto_test_retries_enabled_inherit + if code_coverage_enabled is not unset: + kwargs["code_coverage_enabled"] = code_coverage_enabled + if code_coverage_enabled_inherit is not unset: + kwargs["code_coverage_enabled_inherit"] = code_coverage_enabled_inherit + if early_flake_detection_enabled is not unset: + kwargs["early_flake_detection_enabled"] = early_flake_detection_enabled + if early_flake_detection_enabled_inherit is not unset: + kwargs["early_flake_detection_enabled_inherit"] = early_flake_detection_enabled_inherit + if env is not unset: + kwargs["env"] = env + if failed_test_replay_enabled is not unset: + kwargs["failed_test_replay_enabled"] = failed_test_replay_enabled + if failed_test_replay_enabled_inherit is not unset: + kwargs["failed_test_replay_enabled_inherit"] = failed_test_replay_enabled_inherit + if pr_comments_enabled is not unset: + kwargs["pr_comments_enabled"] = pr_comments_enabled + if test_impact_analysis_enabled is not unset: + kwargs["test_impact_analysis_enabled"] = test_impact_analysis_enabled + if test_impact_analysis_enabled_inherit is not unset: + kwargs["test_impact_analysis_enabled_inherit"] = test_impact_analysis_enabled_inherit + super().__init__(kwargs) + + + self_.repository_id = repository_id + self_.service_name = service_name diff --git a/datadog_api_client/v2/model/test_optimization_update_service_settings_request_data.py b/datadog_api_client/v2/model/test_optimization_update_service_settings_request_data.py new file mode 100644 index 0000000000..c595ec90db --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_update_service_settings_request_data.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.test_optimization_update_service_settings_request_attributes import TestOptimizationUpdateServiceSettingsRequestAttributes + from datadog_api_client.v2.model.test_optimization_update_service_settings_request_data_type import TestOptimizationUpdateServiceSettingsRequestDataType + +class TestOptimizationUpdateServiceSettingsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.test_optimization_update_service_settings_request_attributes import TestOptimizationUpdateServiceSettingsRequestAttributes + from datadog_api_client.v2.model.test_optimization_update_service_settings_request_data_type import TestOptimizationUpdateServiceSettingsRequestDataType + return { + "attributes": (TestOptimizationUpdateServiceSettingsRequestAttributes,), + "type": (TestOptimizationUpdateServiceSettingsRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TestOptimizationUpdateServiceSettingsRequestAttributes, type: TestOptimizationUpdateServiceSettingsRequestDataType, **kwargs): + """ + Data object for update service settings request. + + :param attributes: Attributes for updating Test Optimization service settings. + All non-required fields are optional; only provided fields will be updated. + Setting a field to ``null`` is a no-op. To reset a setting to inherit from the repository level, use the corresponding ``_inherit`` field. + :type attributes: TestOptimizationUpdateServiceSettingsRequestAttributes + + :param type: JSON:API type for update service settings request. + The value must always be ``test_optimization_update_service_settings_request``. + :type type: TestOptimizationUpdateServiceSettingsRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/test_optimization_update_service_settings_request_data_type.py b/datadog_api_client/v2/model/test_optimization_update_service_settings_request_data_type.py new file mode 100644 index 0000000000..05a85109ec --- /dev/null +++ b/datadog_api_client/v2/model/test_optimization_update_service_settings_request_data_type.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TestOptimizationUpdateServiceSettingsRequestDataType(ModelSimple): + """ + JSON:API type for update service settings request. + The value must always be `test_optimization_update_service_settings_request`. + + :param value: If omitted defaults to "test_optimization_update_service_settings_request". Must be one of ["test_optimization_update_service_settings_request"]. + :type value: str + """ + + allowed_values = { + "test_optimization_update_service_settings_request", + } + TEST_OPTIMIZATION_UPDATE_SERVICE_SETTINGS_REQUEST: ClassVar["TestOptimizationUpdateServiceSettingsRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TestOptimizationUpdateServiceSettingsRequestDataType.TEST_OPTIMIZATION_UPDATE_SERVICE_SETTINGS_REQUEST = TestOptimizationUpdateServiceSettingsRequestDataType("test_optimization_update_service_settings_request") diff --git a/datadog_api_client/v2/model/ticket_creation_rule_action.py b/datadog_api_client/v2/model/ticket_creation_rule_action.py new file mode 100644 index 0000000000..31d365a09e --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_action.py @@ -0,0 +1,80 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_target import TicketCreationTarget + +class TicketCreationRuleAction(ModelNormal): + validations = { + "max_tickets_per_day": { + "inclusive_maximum": 500, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_target import TicketCreationTarget + return { + "assignee_id": (UUID,), + "fields": (dict,), + "max_tickets_per_day": (int,), + "project_id": (UUID,), + "target": (TicketCreationTarget,), + } + attribute_map = { + "assignee_id": "assignee_id", + "fields": "fields", + "max_tickets_per_day": "max_tickets_per_day", + "project_id": "project_id", + "target": "target", + } + + def __init__(self_, max_tickets_per_day: int, project_id: UUID, target: TicketCreationTarget, assignee_id: Union[UUID, UnsetType]=unset, fields: Union[dict, UnsetType]=unset, **kwargs): + """ + The action to take when the ticket creation rule matches a finding. + + :param assignee_id: The UUID of the default assignee for created tickets. + :type assignee_id: UUID, optional + + :param fields: Custom fields of the Jira issue to create. For the list of available fields, see `Jira documentation `_. + :type fields: dict, optional + + :param max_tickets_per_day: The maximum number of tickets the rule may create per day. If exceeded, one final ticket will be created, explaining the limit was hit and link back to the responsible rule. + :type max_tickets_per_day: int + + :param project_id: The UUID of the case management project. + :type project_id: UUID + + :param target: The ticketing system to create tickets in. + :type target: TicketCreationTarget + """ + if assignee_id is not unset: + kwargs["assignee_id"] = assignee_id + if fields is not unset: + kwargs["fields"] = fields + super().__init__(kwargs) + + + self_.max_tickets_per_day = max_tickets_per_day + self_.project_id = project_id + self_.target = target diff --git a/datadog_api_client/v2/model/ticket_creation_rule_action_response.py b/datadog_api_client/v2/model/ticket_creation_rule_action_response.py new file mode 100644 index 0000000000..9e59dac4b1 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_action_response.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_target import TicketCreationTarget + +class TicketCreationRuleActionResponse(ModelNormal): + validations = { + "max_tickets_per_day": { + "inclusive_maximum": 500, + "inclusive_minimum": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_target import TicketCreationTarget + return { + "assignee_id": (UUID,), + "auto_disabled_reason": (str,), + "fields": (dict,), + "max_tickets_per_day": (int,), + "project_id": (UUID,), + "target": (TicketCreationTarget,), + } + attribute_map = { + "assignee_id": "assignee_id", + "auto_disabled_reason": "auto_disabled_reason", + "fields": "fields", + "max_tickets_per_day": "max_tickets_per_day", + "project_id": "project_id", + "target": "target", + } + + def __init__(self_, max_tickets_per_day: int, project_id: UUID, target: TicketCreationTarget, assignee_id: Union[UUID, UnsetType]=unset, auto_disabled_reason: Union[str, UnsetType]=unset, fields: Union[dict, UnsetType]=unset, **kwargs): + """ + The action to take when the ticket creation rule matches a finding. + + :param assignee_id: The UUID of the default assignee for created tickets. + :type assignee_id: UUID, optional + + :param auto_disabled_reason: The reason the rule was automatically disabled by the system due to a ticketing integration error. + :type auto_disabled_reason: str, optional + + :param fields: Custom fields of the Jira issue to create. For the list of available fields, see `Jira documentation `_. + :type fields: dict, optional + + :param max_tickets_per_day: The maximum number of tickets the rule may create per day. If exceeded, one final ticket will be created, explaining the limit was hit and link back to the responsible rule. + :type max_tickets_per_day: int + + :param project_id: The UUID of the case management project. + :type project_id: UUID + + :param target: The ticketing system to create tickets in. + :type target: TicketCreationTarget + """ + if assignee_id is not unset: + kwargs["assignee_id"] = assignee_id + if auto_disabled_reason is not unset: + kwargs["auto_disabled_reason"] = auto_disabled_reason + if fields is not unset: + kwargs["fields"] = fields + super().__init__(kwargs) + + + self_.max_tickets_per_day = max_tickets_per_day + self_.project_id = project_id + self_.target = target diff --git a/datadog_api_client/v2/model/ticket_creation_rule_attributes_create.py b/datadog_api_client/v2/model/ticket_creation_rule_attributes_create.py new file mode 100644 index 0000000000..c82f4d7404 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_attributes_create.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_action import TicketCreationRuleAction + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + +class TicketCreationRuleAttributesCreate(ModelNormal): + validations = { + "name": { + "max_length": 255, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_action import TicketCreationRuleAction + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + return { + "action": (TicketCreationRuleAction,), + "enabled": (bool,), + "name": (str,), + "rule": (AutomationRuleScope,), + } + attribute_map = { + "action": "action", + "enabled": "enabled", + "name": "name", + "rule": "rule", + } + + def __init__(self_, action: TicketCreationRuleAction, name: str, rule: AutomationRuleScope, enabled: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for creating or updating a ticket creation rule. + + :param action: The action to take when the ticket creation rule matches a finding. + :type action: TicketCreationRuleAction + + :param enabled: Whether the ticket creation rule is enabled. + :type enabled: bool, optional + + :param name: The name of the ticket creation rule. + :type name: str + + :param rule: Defines the scope of findings to which the automation rule applies. + :type rule: AutomationRuleScope + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + + self_.action = action + self_.name = name + self_.rule = rule diff --git a/datadog_api_client/v2/model/ticket_creation_rule_attributes_response.py b/datadog_api_client/v2/model/ticket_creation_rule_attributes_response.py new file mode 100644 index 0000000000..708608e5f4 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_attributes_response.py @@ -0,0 +1,102 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_action_response import TicketCreationRuleActionResponse + from datadog_api_client.v2.model.automation_rule_created_by import AutomationRuleCreatedBy + from datadog_api_client.v2.model.automation_rule_modified_by import AutomationRuleModifiedBy + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + +class TicketCreationRuleAttributesResponse(ModelNormal): + validations = { + "name": { + "max_length": 255, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_action_response import TicketCreationRuleActionResponse + from datadog_api_client.v2.model.automation_rule_created_by import AutomationRuleCreatedBy + from datadog_api_client.v2.model.automation_rule_modified_by import AutomationRuleModifiedBy + from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope + return { + "action": (TicketCreationRuleActionResponse,), + "created_at": (int,), + "created_by": (AutomationRuleCreatedBy,), + "enabled": (bool,), + "modified_at": (int,), + "modified_by": (AutomationRuleModifiedBy,), + "name": (str,), + "rule": (AutomationRuleScope,), + } + attribute_map = { + "action": "action", + "created_at": "created_at", + "created_by": "created_by", + "enabled": "enabled", + "modified_at": "modified_at", + "modified_by": "modified_by", + "name": "name", + "rule": "rule", + } + + def __init__(self_, action: TicketCreationRuleActionResponse, created_at: int, created_by: AutomationRuleCreatedBy, enabled: bool, modified_at: int, modified_by: AutomationRuleModifiedBy, name: str, rule: AutomationRuleScope, **kwargs): + """ + Attributes of a ticket creation rule returned by the API. + + :param action: The action to take when the ticket creation rule matches a finding. + :type action: TicketCreationRuleActionResponse + + :param created_at: The Unix timestamp in milliseconds when the rule was created. + :type created_at: int + + :param created_by: The user or Datadog system who created the rule. + :type created_by: AutomationRuleCreatedBy + + :param enabled: Whether the ticket creation rule is enabled. + :type enabled: bool + + :param modified_at: The Unix timestamp in milliseconds when the rule was last modified. + :type modified_at: int + + :param modified_by: The user or Datadog system who last modified the rule. + :type modified_by: AutomationRuleModifiedBy + + :param name: The name of the ticket creation rule. + :type name: str + + :param rule: Defines the scope of findings to which the automation rule applies. + :type rule: AutomationRuleScope + """ + super().__init__(kwargs) + + + self_.action = action + self_.created_at = created_at + self_.created_by = created_by + self_.enabled = enabled + self_.modified_at = modified_at + self_.modified_by = modified_by + self_.name = name + self_.rule = rule diff --git a/datadog_api_client/v2/model/ticket_creation_rule_create_request.py b/datadog_api_client/v2/model/ticket_creation_rule_create_request.py new file mode 100644 index 0000000000..197af33c33 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_data_create import TicketCreationRuleDataCreate + +class TicketCreationRuleCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_data_create import TicketCreationRuleDataCreate + return { + "data": (TicketCreationRuleDataCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TicketCreationRuleDataCreate, **kwargs): + """ + The body of a ticket creation rule create request. + + :param data: The data object for a ticket creation rule create or update request. + :type data: TicketCreationRuleDataCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ticket_creation_rule_data_create.py b/datadog_api_client/v2/model/ticket_creation_rule_data_create.py new file mode 100644 index 0000000000..ba12f900a1 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_data_create.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_attributes_create import TicketCreationRuleAttributesCreate + from datadog_api_client.v2.model.ticket_creation_rule_type import TicketCreationRuleType + +class TicketCreationRuleDataCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_attributes_create import TicketCreationRuleAttributesCreate + from datadog_api_client.v2.model.ticket_creation_rule_type import TicketCreationRuleType + return { + "attributes": (TicketCreationRuleAttributesCreate,), + "type": (TicketCreationRuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TicketCreationRuleAttributesCreate, type: TicketCreationRuleType, **kwargs): + """ + The data object for a ticket creation rule create or update request. + + :param attributes: Attributes for creating or updating a ticket creation rule. + :type attributes: TicketCreationRuleAttributesCreate + + :param type: The JSON:API type for ticket creation rules. + :type type: TicketCreationRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/ticket_creation_rule_data_response.py b/datadog_api_client/v2/model/ticket_creation_rule_data_response.py new file mode 100644 index 0000000000..05f79d8da6 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_data_response.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_attributes_response import TicketCreationRuleAttributesResponse + from datadog_api_client.v2.model.ticket_creation_rule_type import TicketCreationRuleType + +class TicketCreationRuleDataResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_attributes_response import TicketCreationRuleAttributesResponse + from datadog_api_client.v2.model.ticket_creation_rule_type import TicketCreationRuleType + return { + "attributes": (TicketCreationRuleAttributesResponse,), + "id": (UUID,), + "type": (TicketCreationRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: TicketCreationRuleAttributesResponse, id: UUID, type: TicketCreationRuleType, **kwargs): + """ + The data object for a ticket creation rule returned by the API. + + :param attributes: Attributes of a ticket creation rule returned by the API. + :type attributes: TicketCreationRuleAttributesResponse + + :param id: The ID of the ticket creation rule. + :type id: UUID + + :param type: The JSON:API type for ticket creation rules. + :type type: TicketCreationRuleType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ticket_creation_rule_reorder_item.py b/datadog_api_client/v2/model/ticket_creation_rule_reorder_item.py new file mode 100644 index 0000000000..4678aeadc4 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_reorder_item.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_type import TicketCreationRuleType + +class TicketCreationRuleReorderItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_type import TicketCreationRuleType + return { + "id": (UUID,), + "type": (TicketCreationRuleType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: UUID, type: TicketCreationRuleType, **kwargs): + """ + A reference to a ticket creation rule used for reordering. + + :param id: The ID of the automation rule. + :type id: UUID + + :param type: The JSON:API type for ticket creation rules. + :type type: TicketCreationRuleType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/ticket_creation_rule_reorder_request.py b/datadog_api_client/v2/model/ticket_creation_rule_reorder_request.py new file mode 100644 index 0000000000..f94d714b8b --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_reorder_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_reorder_item import TicketCreationRuleReorderItem + +class TicketCreationRuleReorderRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_reorder_item import TicketCreationRuleReorderItem + return { + "data": ([TicketCreationRuleReorderItem],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[TicketCreationRuleReorderItem], **kwargs): + """ + The body of the ticket creation rule reorder request. + + :param data: The ordered list of all ticket creation rules; every rule must be included. + :type data: [TicketCreationRuleReorderItem] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ticket_creation_rule_response.py b/datadog_api_client/v2/model/ticket_creation_rule_response.py new file mode 100644 index 0000000000..44036476c6 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_data_response import TicketCreationRuleDataResponse + +class TicketCreationRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_data_response import TicketCreationRuleDataResponse + return { + "data": (TicketCreationRuleDataResponse,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TicketCreationRuleDataResponse, **kwargs): + """ + A single ticket creation rule response. + + :param data: The data object for a ticket creation rule returned by the API. + :type data: TicketCreationRuleDataResponse + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ticket_creation_rule_type.py b/datadog_api_client/v2/model/ticket_creation_rule_type.py new file mode 100644 index 0000000000..ba283f3404 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TicketCreationRuleType(ModelSimple): + """ + The JSON:API type for ticket creation rules. + + :param value: If omitted defaults to "ticket_creation_rules". Must be one of ["ticket_creation_rules"]. + :type value: str + """ + + allowed_values = { + "ticket_creation_rules", + } + TICKET_CREATION_RULES: ClassVar["TicketCreationRuleType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TicketCreationRuleType.TICKET_CREATION_RULES = TicketCreationRuleType("ticket_creation_rules") diff --git a/datadog_api_client/v2/model/ticket_creation_rule_update_request.py b/datadog_api_client/v2/model/ticket_creation_rule_update_request.py new file mode 100644 index 0000000000..5185bef036 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rule_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_data_create import TicketCreationRuleDataCreate + +class TicketCreationRuleUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_data_create import TicketCreationRuleDataCreate + return { + "data": (TicketCreationRuleDataCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TicketCreationRuleDataCreate, **kwargs): + """ + The body of a ticket creation rule update request. + + :param data: The data object for a ticket creation rule create or update request. + :type data: TicketCreationRuleDataCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/ticket_creation_rules_response.py b/datadog_api_client/v2/model/ticket_creation_rules_response.py new file mode 100644 index 0000000000..1aa149c413 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_rules_response.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.ticket_creation_rule_data_response import TicketCreationRuleDataResponse + from datadog_api_client.v2.model.security_automation_rules_links import SecurityAutomationRulesLinks + from datadog_api_client.v2.model.security_automation_rules_meta import SecurityAutomationRulesMeta + +class TicketCreationRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.ticket_creation_rule_data_response import TicketCreationRuleDataResponse + from datadog_api_client.v2.model.security_automation_rules_links import SecurityAutomationRulesLinks + from datadog_api_client.v2.model.security_automation_rules_meta import SecurityAutomationRulesMeta + return { + "data": ([TicketCreationRuleDataResponse],), + "links": (SecurityAutomationRulesLinks,), + "meta": (SecurityAutomationRulesMeta,), + } + attribute_map = { + "data": "data", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: List[TicketCreationRuleDataResponse], links: SecurityAutomationRulesLinks, meta: SecurityAutomationRulesMeta, **kwargs): + """ + A list of ticket creation rules with pagination metadata. + + :param data: A list of ticket creation rule data objects. + :type data: [TicketCreationRuleDataResponse] + + :param links: Pagination links for the list of automation rules. + :type links: SecurityAutomationRulesLinks + + :param meta: Metadata for the list of automation rules. + :type meta: SecurityAutomationRulesMeta + """ + super().__init__(kwargs) + + + self_.data = data + self_.links = links + self_.meta = meta diff --git a/datadog_api_client/v2/model/ticket_creation_target.py b/datadog_api_client/v2/model/ticket_creation_target.py new file mode 100644 index 0000000000..a699aeec00 --- /dev/null +++ b/datadog_api_client/v2/model/ticket_creation_target.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TicketCreationTarget(ModelSimple): + """ + The ticketing system to create tickets in. + + :param value: Must be one of ["jira", "case_management"]. + :type value: str + """ + + allowed_values = { + "jira", + "case_management", + } + JIRA: ClassVar["TicketCreationTarget"] + CASE_MANAGEMENT: ClassVar["TicketCreationTarget"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TicketCreationTarget.JIRA = TicketCreationTarget("jira") +TicketCreationTarget.CASE_MANAGEMENT = TicketCreationTarget("case_management") diff --git a/datadog_api_client/v2/model/time_restriction.py b/datadog_api_client/v2/model/time_restriction.py new file mode 100644 index 0000000000..75139b738c --- /dev/null +++ b/datadog_api_client/v2/model/time_restriction.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.weekday import Weekday + +class TimeRestriction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.weekday import Weekday + return { + "end_day": (Weekday,), + "end_time": (str,), + "start_day": (Weekday,), + "start_time": (str,), + } + attribute_map = { + "end_day": "end_day", + "end_time": "end_time", + "start_day": "start_day", + "start_time": "start_time", + } + + def __init__(self_, end_day: Union[Weekday, UnsetType]=unset, end_time: Union[str, UnsetType]=unset, start_day: Union[Weekday, UnsetType]=unset, start_time: Union[str, UnsetType]=unset, **kwargs): + """ + Defines a single time restriction rule with start and end times and the applicable weekdays. + + :param end_day: A day of the week. + :type end_day: Weekday, optional + + :param end_time: Specifies the ending time for this restriction. + :type end_time: str, optional + + :param start_day: A day of the week. + :type start_day: Weekday, optional + + :param start_time: Specifies the starting time for this restriction. + :type start_time: str, optional + """ + if end_day is not unset: + kwargs["end_day"] = end_day + if end_time is not unset: + kwargs["end_time"] = end_time + if start_day is not unset: + kwargs["start_day"] = start_day + if start_time is not unset: + kwargs["start_time"] = start_time + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/time_restrictions.py b/datadog_api_client/v2/model/time_restrictions.py new file mode 100644 index 0000000000..450bbdb198 --- /dev/null +++ b/datadog_api_client/v2/model/time_restrictions.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.time_restriction import TimeRestriction + +class TimeRestrictions(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_, restrictions: List[TimeRestriction], time_zone: str, **kwargs): + """ + Time restrictions during which the routing rule is active. Outside of these hours, the rule does not match and routing continues to subsequent rules. This is mutually exclusive with the action-level ``support_hours`` field. + + :param restrictions: Defines the list of time-based restrictions. + :type restrictions: [TimeRestriction] + + :param time_zone: Specifies the time zone applicable to the restrictions. + :type time_zone: str + """ + super().__init__(kwargs) + + + self_.restrictions = restrictions + self_.time_zone = time_zone diff --git a/datadog_api_client/v2/model/timeline_cell.py b/datadog_api_client/v2/model/timeline_cell.py new file mode 100644 index 0000000000..76bb24f34f --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.timeline_cell_author import TimelineCellAuthor + from datadog_api_client.v2.model.timeline_cell_content import TimelineCellContent + from datadog_api_client.v2.model.timeline_cell_type import TimelineCellType + from datadog_api_client.v2.model.timeline_cell_author_user import TimelineCellAuthorUser + from datadog_api_client.v2.model.timeline_cell_content_comment import TimelineCellContentComment + +class TimelineCell(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeline_cell_author import TimelineCellAuthor + from datadog_api_client.v2.model.timeline_cell_content import TimelineCellContent + from datadog_api_client.v2.model.timeline_cell_type import TimelineCellType + return { + "author": (TimelineCellAuthor,), + "cell_content": (TimelineCellContent,), + "created_at": (datetime,), + "deleted_at": (datetime,), + "modified_at": (datetime,), + "type": (TimelineCellType,), + } + attribute_map = { + "author": "author", + "cell_content": "cell_content", + "created_at": "created_at", + "deleted_at": "deleted_at", + "modified_at": "modified_at", + "type": "type", + } + read_only_vars = { + "created_at", + "deleted_at", + "modified_at", + } + + def __init__(self_, author: Union[TimelineCellAuthor, TimelineCellAuthorUser, UnsetType]=unset, cell_content: Union[TimelineCellContent, TimelineCellContentComment, UnsetType]=unset, created_at: Union[datetime, UnsetType]=unset, deleted_at: Union[datetime, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, type: Union[TimelineCellType, UnsetType]=unset, **kwargs): + """ + Attributes of a timeline cell, representing a single event in a case's chronological activity log (for example, a comment, status change, or assignment update). + + :param author: The author of the timeline cell. Currently only user authors are supported. + :type author: TimelineCellAuthor, optional + + :param cell_content: The content payload of a timeline cell, varying by cell type. + :type cell_content: TimelineCellContent, optional + + :param created_at: Timestamp of when the cell was created + :type created_at: datetime, optional + + :param deleted_at: Timestamp of when the cell was deleted + :type deleted_at: datetime, optional + + :param modified_at: Timestamp of when the cell was last modified + :type modified_at: datetime, optional + + :param type: The type of content in the timeline cell. Currently only ``COMMENT`` is supported in this endpoint. + :type type: TimelineCellType, optional + """ + if author is not unset: + kwargs["author"] = author + if cell_content is not unset: + kwargs["cell_content"] = cell_content + if created_at is not unset: + kwargs["created_at"] = created_at + if deleted_at is not unset: + kwargs["deleted_at"] = deleted_at + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/timeline_cell_author.py b/datadog_api_client/v2/model/timeline_cell_author.py new file mode 100644 index 0000000000..837ce8421e --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell_author.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimelineCellAuthor(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The author of the timeline cell. Currently only user authors are supported. + + :param content: Profile information for the user who authored the timeline cell. + :type content: TimelineCellAuthorUserContent, optional + + :param type: The type of timeline cell author. Currently only `USER` is supported. + :type type: TimelineCellAuthorUserType, 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.timeline_cell_author_user import TimelineCellAuthorUser + return { + "oneOf": [ + TimelineCellAuthorUser, + ], + } diff --git a/datadog_api_client/v2/model/timeline_cell_author_user.py b/datadog_api_client/v2/model/timeline_cell_author_user.py new file mode 100644 index 0000000000..02ed181fac --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell_author_user.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.timeline_cell_author_user_content import TimelineCellAuthorUserContent + from datadog_api_client.v2.model.timeline_cell_author_user_type import TimelineCellAuthorUserType + +class TimelineCellAuthorUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeline_cell_author_user_content import TimelineCellAuthorUserContent + from datadog_api_client.v2.model.timeline_cell_author_user_type import TimelineCellAuthorUserType + return { + "content": (TimelineCellAuthorUserContent,), + "type": (TimelineCellAuthorUserType,), + } + attribute_map = { + "content": "content", + "type": "type", + } + + def __init__(self_, content: Union[TimelineCellAuthorUserContent, UnsetType]=unset, type: Union[TimelineCellAuthorUserType, UnsetType]=unset, **kwargs): + """ + A user who authored a timeline cell. + + :param content: Profile information for the user who authored the timeline cell. + :type content: TimelineCellAuthorUserContent, optional + + :param type: The type of timeline cell author. Currently only ``USER`` is supported. + :type type: TimelineCellAuthorUserType, optional + """ + if content is not unset: + kwargs["content"] = content + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/timeline_cell_author_user_content.py b/datadog_api_client/v2/model/timeline_cell_author_user_content.py new file mode 100644 index 0000000000..45151fb7db --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell_author_user_content.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimelineCellAuthorUserContent(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "handle": (str,), + "id": (str,), + "name": (str,), + } + attribute_map = { + "email": "email", + "handle": "handle", + "id": "id", + "name": "name", + } + + def __init__(self_, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Profile information for the user who authored the timeline cell. + + :param email: The email address of the user. + :type email: str, optional + + :param handle: The Datadog handle of the user. + :type handle: str, optional + + :param id: The UUID of the user. + :type id: str, optional + + :param name: The display name of the user. + :type name: str, optional + """ + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if id is not unset: + kwargs["id"] = id + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/timeline_cell_author_user_type.py b/datadog_api_client/v2/model/timeline_cell_author_user_type.py new file mode 100644 index 0000000000..4a47306611 --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell_author_user_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TimelineCellAuthorUserType(ModelSimple): + """ + The type of timeline cell author. Currently only `USER` is supported. + + :param value: If omitted defaults to "USER". Must be one of ["USER"]. + :type value: str + """ + + allowed_values = { + "USER", + } + USER: ClassVar["TimelineCellAuthorUserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TimelineCellAuthorUserType.USER = TimelineCellAuthorUserType("USER") diff --git a/datadog_api_client/v2/model/timeline_cell_content.py b/datadog_api_client/v2/model/timeline_cell_content.py new file mode 100644 index 0000000000..44808d1727 --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell_content.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimelineCellContent(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The content payload of a timeline cell, varying by cell type. + + :param message: The text content of the comment. Supports Markdown formatting. + :type message: str, 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.timeline_cell_content_comment import TimelineCellContentComment + return { + "oneOf": [ + TimelineCellContentComment, + ], + } diff --git a/datadog_api_client/v2/model/timeline_cell_content_comment.py b/datadog_api_client/v2/model/timeline_cell_content_comment.py new file mode 100644 index 0000000000..c43708cf2b --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell_content_comment.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimelineCellContentComment(ModelNormal): + @cached_property + def openapi_types(_): + return { + "message": (str,), + } + attribute_map = { + "message": "message", + } + + def __init__(self_, message: Union[str, UnsetType]=unset, **kwargs): + """ + The content of a comment timeline cell. + + :param message: The text content of the comment. Supports Markdown formatting. + :type message: str, optional + """ + if message is not unset: + kwargs["message"] = message + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/timeline_cell_resource.py b/datadog_api_client/v2/model/timeline_cell_resource.py new file mode 100644 index 0000000000..c40ab5c541 --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell_resource.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.timeline_cell import TimelineCell + from datadog_api_client.v2.model.timeline_cell_resource_type import TimelineCellResourceType + from datadog_api_client.v2.model.timeline_cell_author_user import TimelineCellAuthorUser + from datadog_api_client.v2.model.timeline_cell_content_comment import TimelineCellContentComment + +class TimelineCellResource(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeline_cell import TimelineCell + from datadog_api_client.v2.model.timeline_cell_resource_type import TimelineCellResourceType + return { + "attributes": (TimelineCell,), + "id": (str,), + "type": (TimelineCellResourceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: TimelineCell, id: str, type: TimelineCellResourceType, **kwargs): + """ + A timeline cell resource representing a single entry in a case's activity timeline. + + :param attributes: Attributes of a timeline cell, representing a single event in a case's chronological activity log (for example, a comment, status change, or assignment update). + :type attributes: TimelineCell + + :param id: Timeline cell's identifier + :type id: str + + :param type: JSON:API resource type for timeline cells. + :type type: TimelineCellResourceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/timeline_cell_resource_type.py b/datadog_api_client/v2/model/timeline_cell_resource_type.py new file mode 100644 index 0000000000..66671832f7 --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TimelineCellResourceType(ModelSimple): + """ + JSON:API resource type for timeline cells. + + :param value: If omitted defaults to "timeline_cell". Must be one of ["timeline_cell"]. + :type value: str + """ + + allowed_values = { + "timeline_cell", + } + TIMELINE_CELL: ClassVar["TimelineCellResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TimelineCellResourceType.TIMELINE_CELL = TimelineCellResourceType("timeline_cell") diff --git a/datadog_api_client/v2/model/timeline_cell_type.py b/datadog_api_client/v2/model/timeline_cell_type.py new file mode 100644 index 0000000000..a879be83c1 --- /dev/null +++ b/datadog_api_client/v2/model/timeline_cell_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TimelineCellType(ModelSimple): + """ + The type of content in the timeline cell. Currently only `COMMENT` is supported in this endpoint. + + :param value: If omitted defaults to "COMMENT". Must be one of ["COMMENT"]. + :type value: str + """ + + allowed_values = { + "COMMENT", + } + COMMENT: ClassVar["TimelineCellType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TimelineCellType.COMMENT = TimelineCellType("COMMENT") diff --git a/datadog_api_client/v2/model/timeline_response.py b/datadog_api_client/v2/model/timeline_response.py new file mode 100644 index 0000000000..8d44f21a79 --- /dev/null +++ b/datadog_api_client/v2/model/timeline_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.timeline_cell_resource import TimelineCellResource + from datadog_api_client.v2.model.timeline_cell_author_user import TimelineCellAuthorUser + from datadog_api_client.v2.model.timeline_cell_content_comment import TimelineCellContentComment + +class TimelineResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeline_cell_resource import TimelineCellResource + return { + "data": ([TimelineCellResource],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[TimelineCellResource], UnsetType]=unset, **kwargs): + """ + Response containing the chronological list of timeline cells for a case. + + :param data: The ``TimelineResponse`` ``data``. + :type data: [TimelineCellResource], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/timeseries_formula_query_request.py b/datadog_api_client/v2/model/timeseries_formula_query_request.py new file mode 100644 index 0000000000..f27231a006 --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_formula_query_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.timeseries_formula_request import TimeseriesFormulaRequest + from datadog_api_client.v2.model.metrics_timeseries_query import MetricsTimeseriesQuery + from datadog_api_client.v2.model.events_timeseries_query import EventsTimeseriesQuery + from datadog_api_client.v2.model.apm_resource_stats_query import ApmResourceStatsQuery + from datadog_api_client.v2.model.apm_metrics_query import ApmMetricsQuery + from datadog_api_client.v2.model.apm_dependency_stats_query import ApmDependencyStatsQuery + from datadog_api_client.v2.model.slo_query import SloQuery + from datadog_api_client.v2.model.process_timeseries_query import ProcessTimeseriesQuery + from datadog_api_client.v2.model.container_timeseries_query import ContainerTimeseriesQuery + +class TimeseriesFormulaQueryRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeseries_formula_request import TimeseriesFormulaRequest + return { + "data": (TimeseriesFormulaRequest,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TimeseriesFormulaRequest, **kwargs): + """ + A request wrapper around a single timeseries query to be executed. + + :param data: A single timeseries query to be executed. + :type data: TimeseriesFormulaRequest + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/timeseries_formula_query_response.py b/datadog_api_client/v2/model/timeseries_formula_query_response.py new file mode 100644 index 0000000000..e499300bce --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_formula_query_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.timeseries_response import TimeseriesResponse + +class TimeseriesFormulaQueryResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeseries_response import TimeseriesResponse + return { + "data": (TimeseriesResponse,), + "errors": (str,), + } + attribute_map = { + "data": "data", + "errors": "errors", + } + + def __init__(self_, data: Union[TimeseriesResponse, UnsetType]=unset, errors: Union[str, UnsetType]=unset, **kwargs): + """ + A message containing one response to a timeseries query made with timeseries formula query request. + + :param data: A message containing the response to a timeseries query. + :type data: TimeseriesResponse, optional + + :param errors: The error generated by the request. + :type errors: str, optional + """ + if data is not unset: + kwargs["data"] = data + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/timeseries_formula_request.py b/datadog_api_client/v2/model/timeseries_formula_request.py new file mode 100644 index 0000000000..abfa5663b8 --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_formula_request.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.timeseries_formula_request_attributes import TimeseriesFormulaRequestAttributes + from datadog_api_client.v2.model.timeseries_formula_request_type import TimeseriesFormulaRequestType + from datadog_api_client.v2.model.metrics_timeseries_query import MetricsTimeseriesQuery + from datadog_api_client.v2.model.events_timeseries_query import EventsTimeseriesQuery + from datadog_api_client.v2.model.apm_resource_stats_query import ApmResourceStatsQuery + from datadog_api_client.v2.model.apm_metrics_query import ApmMetricsQuery + from datadog_api_client.v2.model.apm_dependency_stats_query import ApmDependencyStatsQuery + from datadog_api_client.v2.model.slo_query import SloQuery + from datadog_api_client.v2.model.process_timeseries_query import ProcessTimeseriesQuery + from datadog_api_client.v2.model.container_timeseries_query import ContainerTimeseriesQuery + +class TimeseriesFormulaRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeseries_formula_request_attributes import TimeseriesFormulaRequestAttributes + from datadog_api_client.v2.model.timeseries_formula_request_type import TimeseriesFormulaRequestType + return { + "attributes": (TimeseriesFormulaRequestAttributes,), + "type": (TimeseriesFormulaRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TimeseriesFormulaRequestAttributes, type: TimeseriesFormulaRequestType, **kwargs): + """ + A single timeseries query to be executed. + + :param attributes: The object describing a timeseries formula request. + :type attributes: TimeseriesFormulaRequestAttributes + + :param type: The type of the resource. The value should always be timeseries_request. + :type type: TimeseriesFormulaRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/timeseries_formula_request_attributes.py b/datadog_api_client/v2/model/timeseries_formula_request_attributes.py new file mode 100644 index 0000000000..09ca877ae6 --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_formula_request_attributes.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.query_formula import QueryFormula + from datadog_api_client.v2.model.timeseries_formula_request_queries import TimeseriesFormulaRequestQueries + from datadog_api_client.v2.model.metrics_timeseries_query import MetricsTimeseriesQuery + from datadog_api_client.v2.model.events_timeseries_query import EventsTimeseriesQuery + from datadog_api_client.v2.model.apm_resource_stats_query import ApmResourceStatsQuery + from datadog_api_client.v2.model.apm_metrics_query import ApmMetricsQuery + from datadog_api_client.v2.model.apm_dependency_stats_query import ApmDependencyStatsQuery + from datadog_api_client.v2.model.slo_query import SloQuery + from datadog_api_client.v2.model.process_timeseries_query import ProcessTimeseriesQuery + from datadog_api_client.v2.model.container_timeseries_query import ContainerTimeseriesQuery + +class TimeseriesFormulaRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.query_formula import QueryFormula + from datadog_api_client.v2.model.timeseries_formula_request_queries import TimeseriesFormulaRequestQueries + return { + "formulas": ([QueryFormula],), + "_from": (int,), + "interval": (int,), + "queries": (TimeseriesFormulaRequestQueries,), + "to": (int,), + } + attribute_map = { + "formulas": "formulas", + "_from": "from", + "interval": "interval", + "queries": "queries", + "to": "to", + } + + def __init__(self_, _from: int, queries: TimeseriesFormulaRequestQueries, to: int, formulas: Union[List[QueryFormula], UnsetType]=unset, interval: Union[int, UnsetType]=unset, **kwargs): + """ + The object describing a timeseries formula request. + + :param formulas: List of formulas to be calculated and returned as responses. + :type formulas: [QueryFormula], optional + + :param _from: Start date (inclusive) of the query in milliseconds since the Unix epoch. + :type _from: int + + :param interval: A time interval in milliseconds. + May be overridden by a larger interval if the query would result in + too many points for the specified timeframe. + Defaults to a reasonable interval for the given timeframe. + :type interval: int, optional + + :param queries: List of queries to be run and used as inputs to the formulas. + :type queries: TimeseriesFormulaRequestQueries + + :param to: End date (exclusive) of the query in milliseconds since the Unix epoch. + :type to: int + """ + if formulas is not unset: + kwargs["formulas"] = formulas + if interval is not unset: + kwargs["interval"] = interval + super().__init__(kwargs) + + + self_._from = _from + self_.queries = queries + self_.to = to diff --git a/datadog_api_client/v2/model/timeseries_formula_request_queries.py b/datadog_api_client/v2/model/timeseries_formula_request_queries.py new file mode 100644 index 0000000000..c9951ff61d --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_formula_request_queries.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimeseriesFormulaRequestQueries(ModelSimple): + """ + List of queries to be run and used as inputs to the formulas. + + + :type value: [TimeseriesQuery] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeseries_query import TimeseriesQuery + return { + "value": ([TimeseriesQuery],), + } diff --git a/datadog_api_client/v2/model/timeseries_formula_request_type.py b/datadog_api_client/v2/model/timeseries_formula_request_type.py new file mode 100644 index 0000000000..c09e2c44c4 --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_formula_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TimeseriesFormulaRequestType(ModelSimple): + """ + The type of the resource. The value should always be timeseries_request. + + :param value: If omitted defaults to "timeseries_request". Must be one of ["timeseries_request"]. + :type value: str + """ + + allowed_values = { + "timeseries_request", + } + TIMESERIES_REQUEST: ClassVar["TimeseriesFormulaRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TimeseriesFormulaRequestType.TIMESERIES_REQUEST = TimeseriesFormulaRequestType("timeseries_request") diff --git a/datadog_api_client/v2/model/timeseries_formula_response_type.py b/datadog_api_client/v2/model/timeseries_formula_response_type.py new file mode 100644 index 0000000000..d6e88f2352 --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_formula_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TimeseriesFormulaResponseType(ModelSimple): + """ + The type of the resource. The value should always be timeseries_response. + + :param value: If omitted defaults to "timeseries_response". Must be one of ["timeseries_response"]. + :type value: str + """ + + allowed_values = { + "timeseries_response", + } + TIMESERIES_RESPONSE: ClassVar["TimeseriesFormulaResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TimeseriesFormulaResponseType.TIMESERIES_RESPONSE = TimeseriesFormulaResponseType("timeseries_response") diff --git a/datadog_api_client/v2/model/timeseries_query.py b/datadog_api_client/v2/model/timeseries_query.py new file mode 100644 index 0000000000..aa41006c09 --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_query.py @@ -0,0 +1,159 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimeseriesQuery(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An individual timeseries query to one of the basic Datadog data sources. + + :param cross_org_uuids: Organization UUIDs to query when using [cross-organization visibility](/account_management/org_settings/cross_org_visibility/). Limited to one organization UUID. + :type cross_org_uuids: [str], optional + + :param data_source: A data source that is powered by the Metrics platform. + :type data_source: MetricsDataSource + + :param name: The variable name for use in formulas. + :type name: str, optional + + :param query: A classic metrics query string. + :type query: str + + :param compute: The instructions for what to compute for this query. + :type compute: EventsCompute + + :param group_by: The list of facets on which to split results. + :type group_by: EventsQueryGroupBys, optional + + :param indexes: The indexes in which to search. + :type indexes: [str], optional + + :param search: Configuration of the search/filter for an events query. + :type search: EventsSearch, optional + + :param env: The environment to query. + :type env: str + + :param operation_name: The APM operation name. + :type operation_name: str, optional + + :param primary_tag_name: Name of the second primary tag used within APM. Required when `primary_tag_value` is specified. See https://docs.datadoghq.com/tracing/guide/setting_primary_tags_to_scope/#add-a-second-primary-tag-in-datadog + :type primary_tag_name: str, optional + + :param primary_tag_value: Value of the second primary tag by which to filter APM data. `primary_tag_name` must also be specified. + :type primary_tag_value: str, optional + + :param resource_name: The resource name to filter by. + :type resource_name: str, optional + + :param service: The service name to filter by. + :type service: str + + :param stat: The APM resource statistic to query. + :type stat: ApmResourceStatName + + :param operation_mode: Optional operation mode to aggregate across operation names. + :type operation_mode: str, optional + + :param peer_tags: Tags to query for a specific downstream entity (peer.service, peer.db_instance, peer.s3, peer.s3.bucket, etc.). + :type peer_tags: [str], optional + + :param query_filter: Additional filters for the query using metrics query syntax (for example, env, primary_tag). + :type query_filter: str, optional + + :param resource_hash: The resource hash for exact matching. + :type resource_hash: str, optional + + :param span_kind: Describes the relationship between the span, its parents, and its children in a trace. + :type span_kind: ApmMetricsSpanKind, optional + + :param is_upstream: Determines whether stats for upstream or downstream dependencies should be queried. + :type is_upstream: bool, optional + + :param additional_query_filters: Additional filters applied to the SLO query. + :type additional_query_filters: str, optional + + :param group_mode: How SLO results are grouped in the response. + :type group_mode: SlosGroupMode, optional + + :param measure: The SLO measurement to retrieve. + :type measure: SlosMeasure + + :param slo_id: The unique identifier of the SLO to query. + :type slo_id: str + + :param slo_query_type: The type of SLO definition being queried. + :type slo_query_type: SlosQueryType, optional + + :param is_normalized_cpu: Whether CPU metrics should be normalized by core count. + :type is_normalized_cpu: bool, optional + + :param limit: Maximum number of results to return. + :type limit: int, optional + + :param metric: The process metric to query. + :type metric: str + + :param sort: Direction of sort. + :type sort: QuerySortOrder, optional + + :param tag_filters: Tag filters to narrow down processes. + :type tag_filters: [str], optional + + :param text_filter: A full-text search filter to match process names or commands. + :type text_filter: str, 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.metrics_timeseries_query import MetricsTimeseriesQuery + from datadog_api_client.v2.model.events_timeseries_query import EventsTimeseriesQuery + from datadog_api_client.v2.model.apm_resource_stats_query import ApmResourceStatsQuery + from datadog_api_client.v2.model.apm_metrics_query import ApmMetricsQuery + from datadog_api_client.v2.model.apm_dependency_stats_query import ApmDependencyStatsQuery + from datadog_api_client.v2.model.slo_query import SloQuery + from datadog_api_client.v2.model.process_timeseries_query import ProcessTimeseriesQuery + from datadog_api_client.v2.model.container_timeseries_query import ContainerTimeseriesQuery + return { + "oneOf": [ + MetricsTimeseriesQuery, + EventsTimeseriesQuery, + ApmResourceStatsQuery, + ApmMetricsQuery, + ApmDependencyStatsQuery, + SloQuery, + ProcessTimeseriesQuery, + ContainerTimeseriesQuery, + ], + } diff --git a/datadog_api_client/v2/model/timeseries_response.py b/datadog_api_client/v2/model/timeseries_response.py new file mode 100644 index 0000000000..8123be7d2f --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.timeseries_response_attributes import TimeseriesResponseAttributes + from datadog_api_client.v2.model.timeseries_formula_response_type import TimeseriesFormulaResponseType + +class TimeseriesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeseries_response_attributes import TimeseriesResponseAttributes + from datadog_api_client.v2.model.timeseries_formula_response_type import TimeseriesFormulaResponseType + return { + "attributes": (TimeseriesResponseAttributes,), + "type": (TimeseriesFormulaResponseType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[TimeseriesResponseAttributes, UnsetType]=unset, type: Union[TimeseriesFormulaResponseType, UnsetType]=unset, **kwargs): + """ + A message containing the response to a timeseries query. + + :param attributes: The object describing a timeseries response. + :type attributes: TimeseriesResponseAttributes, optional + + :param type: The type of the resource. The value should always be timeseries_response. + :type type: TimeseriesFormulaResponseType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/timeseries_response_attributes.py b/datadog_api_client/v2/model/timeseries_response_attributes.py new file mode 100644 index 0000000000..9259755a2d --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_response_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.timeseries_response_series_list import TimeseriesResponseSeriesList + from datadog_api_client.v2.model.timeseries_response_times import TimeseriesResponseTimes + from datadog_api_client.v2.model.timeseries_response_values_list import TimeseriesResponseValuesList + +class TimeseriesResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeseries_response_series_list import TimeseriesResponseSeriesList + from datadog_api_client.v2.model.timeseries_response_times import TimeseriesResponseTimes + from datadog_api_client.v2.model.timeseries_response_values_list import TimeseriesResponseValuesList + return { + "series": (TimeseriesResponseSeriesList,), + "times": (TimeseriesResponseTimes,), + "values": (TimeseriesResponseValuesList,), + } + attribute_map = { + "series": "series", + "times": "times", + "values": "values", + } + + def __init__(self_, series: Union[TimeseriesResponseSeriesList, UnsetType]=unset, times: Union[TimeseriesResponseTimes, UnsetType]=unset, values: Union[TimeseriesResponseValuesList, UnsetType]=unset, **kwargs): + """ + The object describing a timeseries response. + + :param series: Array of response series. The index here corresponds to the index in the ``formulas`` or ``queries`` array from the request. + :type series: TimeseriesResponseSeriesList, optional + + :param times: Array of times, 1-1 match with individual values arrays. + :type times: TimeseriesResponseTimes, optional + + :param values: Array of value-arrays. The index here corresponds to the index in the ``formulas`` or ``queries`` array from the request. + :type values: TimeseriesResponseValuesList, optional + """ + if series is not unset: + kwargs["series"] = series + if times is not unset: + kwargs["times"] = times + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/timeseries_response_series.py b/datadog_api_client/v2/model/timeseries_response_series.py new file mode 100644 index 0000000000..63d37a415c --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_response_series.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.group_tags import GroupTags + from datadog_api_client.v2.model.unit import Unit + +class TimeseriesResponseSeries(ModelNormal): + validations = { + "query_index": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.group_tags import GroupTags + from datadog_api_client.v2.model.unit import Unit + return { + "group_tags": (GroupTags,), + "query_index": (int,), + "unit": ([Unit, none_type], none_type), + } + attribute_map = { + "group_tags": "group_tags", + "query_index": "query_index", + "unit": "unit", + } + + def __init__(self_, group_tags: Union[GroupTags, UnsetType]=unset, query_index: Union[int, UnsetType]=unset, unit: Union[List[Unit], none_type, UnsetType]=unset, **kwargs): + """ + A single series in a timeseries query response, containing the query index, unit information, and group tags. + + :param group_tags: List of tags that apply to a single response value. + :type group_tags: GroupTags, optional + + :param query_index: The index of the query in the "formulas" array (or "queries" array if no "formulas" was specified). + :type query_index: int, optional + + :param unit: Detailed information about the unit. + The first element describes the "primary unit" (for example, ``bytes`` in ``bytes per second`` ). + The second element describes the "per unit" (for example, ``second`` in ``bytes per second`` ). + If the second element is not present, the API returns null. + :type unit: [Unit, none_type], none_type, optional + """ + if group_tags is not unset: + kwargs["group_tags"] = group_tags + if query_index is not unset: + kwargs["query_index"] = query_index + if unit is not unset: + kwargs["unit"] = unit + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/timeseries_response_series_list.py b/datadog_api_client/v2/model/timeseries_response_series_list.py new file mode 100644 index 0000000000..41e0d833de --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_response_series_list.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimeseriesResponseSeriesList(ModelSimple): + """ + Array of response series. The index here corresponds to the index in the ``formulas`` or ``queries`` array from the request. + + + :type value: [TimeseriesResponseSeries] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeseries_response_series import TimeseriesResponseSeries + return { + "value": ([TimeseriesResponseSeries],), + } diff --git a/datadog_api_client/v2/model/timeseries_response_times.py b/datadog_api_client/v2/model/timeseries_response_times.py new file mode 100644 index 0000000000..178d17acf1 --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_response_times.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimeseriesResponseTimes(ModelSimple): + """ + Array of times, 1-1 match with individual values arrays. + + + :type value: [int] + """ + + + + @cached_property + def openapi_types(_): + return { + "value": ([int],), + } diff --git a/datadog_api_client/v2/model/timeseries_response_values.py b/datadog_api_client/v2/model/timeseries_response_values.py new file mode 100644 index 0000000000..7627033e82 --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_response_values.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimeseriesResponseValues(ModelSimple): + """ + Array of values for an individual formula or query. + + + :type value: [float, none_type] + """ + + + + @cached_property + def openapi_types(_): + return { + "value": ([float, none_type],), + } diff --git a/datadog_api_client/v2/model/timeseries_response_values_list.py b/datadog_api_client/v2/model/timeseries_response_values_list.py new file mode 100644 index 0000000000..0cd76dff50 --- /dev/null +++ b/datadog_api_client/v2/model/timeseries_response_values_list.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TimeseriesResponseValuesList(ModelSimple): + """ + Array of value-arrays. The index here corresponds to the index in the ``formulas`` or ``queries`` array from the request. + + + :type value: [TimeseriesResponseValues] + """ + + + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.timeseries_response_values import TimeseriesResponseValues + return { + "value": ([TimeseriesResponseValues],), + } diff --git a/datadog_api_client/v2/model/token_type.py b/datadog_api_client/v2/model/token_type.py new file mode 100644 index 0000000000..f122c60d19 --- /dev/null +++ b/datadog_api_client/v2/model/token_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TokenType(ModelSimple): + """ + The definition of `TokenType` object. + + :param value: If omitted defaults to "SECRET". Must be one of ["SECRET"]. + :type value: str + """ + + allowed_values = { + "SECRET", + } + SECRET: ClassVar["TokenType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TokenType.SECRET = TokenType("SECRET") diff --git a/datadog_api_client/v2/model/top_long_task_invoker.py b/datadog_api_client/v2/model/top_long_task_invoker.py new file mode 100644 index 0000000000..78874cec02 --- /dev/null +++ b/datadog_api_client/v2/model/top_long_task_invoker.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.long_task_stats_per_view import LongTaskStatsPerView + +class TopLongTaskInvoker(ModelNormal): + validations = { + "criteria_view_occurrences": { + "inclusive_maximum": 2147483647, + }, + "view_occurrences": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.long_task_stats_per_view import LongTaskStatsPerView + return { + "criteria_view_occurrences": (int,), + "file": (str, none_type), + "impact_score": (float,), + "invoker": (str,), + "stats_per_view": (LongTaskStatsPerView,), + "view_occurrences": (int,), + } + attribute_map = { + "criteria_view_occurrences": "criteria_view_occurrences", + "file": "file", + "impact_score": "impact_score", + "invoker": "invoker", + "stats_per_view": "stats_per_view", + "view_occurrences": "view_occurrences", + } + + def __init__(self_, file: Union[str, none_type], invoker: str, stats_per_view: LongTaskStatsPerView, view_occurrences: int, criteria_view_occurrences: Union[int, UnsetType]=unset, impact_score: Union[float, UnsetType]=unset, **kwargs): + """ + A top long task invoker within an invoker type. + + :param criteria_view_occurrences: Number of sampled views where this invoker had long tasks contributing to the criteria metric. + :type criteria_view_occurrences: int, optional + + :param file: Cleaned source file path for the invoker script. + :type file: str, none_type + + :param impact_score: Rank-product impact score combining view frequency and blocking time severity. + :type impact_score: float, optional + + :param invoker: Name of the invoker function or script. + :type invoker: str + + :param stats_per_view: Statistical distributions of long task metrics computed per view across sampled views. + :type stats_per_view: LongTaskStatsPerView + + :param view_occurrences: Number of sampled views where this invoker had any long tasks. + :type view_occurrences: int + """ + if criteria_view_occurrences is not unset: + kwargs["criteria_view_occurrences"] = criteria_view_occurrences + if impact_score is not unset: + kwargs["impact_score"] = impact_score + super().__init__(kwargs) + + + self_.file = file + self_.invoker = invoker + self_.stats_per_view = stats_per_view + self_.view_occurrences = view_occurrences diff --git a/datadog_api_client/v2/model/trace_attributes.py b/datadog_api_client/v2/model/trace_attributes.py new file mode 100644 index 0000000000..a8f9eb6704 --- /dev/null +++ b/datadog_api_client/v2/model/trace_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.apm_trace_span import APMTraceSpan + +class TraceAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.apm_trace_span import APMTraceSpan + return { + "is_truncated": (bool,), + "spans": ([APMTraceSpan],), + } + attribute_map = { + "is_truncated": "is_truncated", + "spans": "spans", + } + + def __init__(self_, is_truncated: bool, spans: List[APMTraceSpan], **kwargs): + """ + The attributes of a trace returned by the Get trace by ID endpoint. + + :param is_truncated: Indicates whether the trace was truncated because its size exceeded the maximum response payload. + :type is_truncated: bool + + :param spans: The list of spans that compose the trace. + :type spans: [APMTraceSpan] + """ + super().__init__(kwargs) + + + self_.is_truncated = is_truncated + self_.spans = spans diff --git a/datadog_api_client/v2/model/trace_data.py b/datadog_api_client/v2/model/trace_data.py new file mode 100644 index 0000000000..b26aa33921 --- /dev/null +++ b/datadog_api_client/v2/model/trace_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trace_attributes import TraceAttributes + from datadog_api_client.v2.model.trace_type import TraceType + +class TraceData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trace_attributes import TraceAttributes + from datadog_api_client.v2.model.trace_type import TraceType + return { + "attributes": (TraceAttributes,), + "id": (str,), + "type": (TraceType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: TraceAttributes, id: str, type: TraceType, **kwargs): + """ + A trace resource document. + + :param attributes: The attributes of a trace returned by the Get trace by ID endpoint. + :type attributes: TraceAttributes + + :param id: The full 128-bit trace ID, encoded as a 32-character hexadecimal string. + :type id: str + + :param type: The type of the trace resource. The value is always ``trace``. + :type type: TraceType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/trace_response.py b/datadog_api_client/v2/model/trace_response.py new file mode 100644 index 0000000000..0f61107fda --- /dev/null +++ b/datadog_api_client/v2/model/trace_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trace_data import TraceData + +class TraceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trace_data import TraceData + return { + "data": (TraceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TraceData, **kwargs): + """ + Response containing a single trace. + + :param data: A trace resource document. + :type data: TraceData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/trace_type.py b/datadog_api_client/v2/model/trace_type.py new file mode 100644 index 0000000000..a6cbd41098 --- /dev/null +++ b/datadog_api_client/v2/model/trace_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TraceType(ModelSimple): + """ + The type of the trace resource. The value is always `trace`. + + :param value: If omitted defaults to "trace". Must be one of ["trace"]. + :type value: str + """ + + allowed_values = { + "trace", + } + TRACE: ClassVar["TraceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TraceType.TRACE = TraceType("trace") diff --git a/datadog_api_client/v2/model/trigger.py b/datadog_api_client/v2/model/trigger.py new file mode 100644 index 0000000000..e09e9d73d5 --- /dev/null +++ b/datadog_api_client/v2/model/trigger.py @@ -0,0 +1,150 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Trigger(ModelComposed): + + + + def __init__(self, **kwargs): + """ + One of the triggers that can start the execution of a workflow. + + :param agent_trigger: Trigger a workflow from an agent via the MCP execute tool. Workflow can be executed from Bits Chat, Bits Agent Builder, Claude Code, Codex, Cursor, and any other coding agent using the Datadog MCP. + :type agent_trigger: AgentTrigger + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + + :param api_trigger: Trigger a workflow from an API request. The workflow must be published. + :type api_trigger: APITrigger + + :param app_trigger: Trigger a workflow from an App. + :type app_trigger: dict + + :param case_trigger: Trigger a workflow from a Case. For automatic triggering a handle must be configured and the workflow must be published. + :type case_trigger: CaseTrigger + + :param change_event_trigger: Trigger a workflow from a Change Event. + :type change_event_trigger: dict + + :param database_monitoring_trigger: Trigger a workflow from Database Monitoring. + :type database_monitoring_trigger: dict + + :param datastore_trigger: Trigger a workflow from a Datastore. For automatic triggering a handle must be configured and the workflow must be published. + :type datastore_trigger: DatastoreTrigger + + :param dashboard_trigger: Trigger a workflow from a Dashboard. + :type dashboard_trigger: dict + + :param form_trigger: Trigger a workflow from a Form. + :type form_trigger: FormTrigger + + :param github_webhook_trigger: Trigger a workflow from a GitHub webhook. To trigger a workflow from GitHub, you must set a `webhookSecret`. In your GitHub Webhook Settings, set the Payload URL to "base_url"/api/v2/workflows/"workflow_id"/webhook?orgId="org_id", select application/json for the content type, and be highly recommend enabling SSL verification for security. The workflow must be published. + :type github_webhook_trigger: GithubWebhookTrigger + + :param incident_trigger: Trigger a workflow from an Incident. For automatic triggering a handle must be configured and the workflow must be published. + :type incident_trigger: IncidentTrigger + + :param monitor_trigger: Trigger a workflow from a Monitor. For automatic triggering a handle must be configured and the workflow must be published. + :type monitor_trigger: MonitorTrigger + + :param notebook_trigger: Trigger a workflow from a Notebook. + :type notebook_trigger: dict + + :param on_call_trigger: Trigger a workflow from an On-Call Page or On-Call Handover. For automatic triggering a handle must be configured and the workflow must be published. + :type on_call_trigger: OnCallTrigger + + :param schedule_trigger: Trigger a workflow from a Schedule. The workflow must be published. + :type schedule_trigger: ScheduleTrigger + + :param security_trigger: Trigger a workflow from a Security Signal or Finding. For automatic triggering a handle must be configured and the workflow must be published. + :type security_trigger: SecurityTrigger + + :param self_service_trigger: Trigger a workflow from Self Service. + :type self_service_trigger: dict + + :param slack_trigger: Trigger a workflow from Slack. The workflow must be published. + :type slack_trigger: dict + + :param software_catalog_trigger: Trigger a workflow from Software Catalog. + :type software_catalog_trigger: dict + + :param workflow_trigger: Trigger a workflow from the Datadog UI. When present, this must be the workflow's only trigger. + :type workflow_trigger: dict + """ + 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.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + return { + "oneOf": [ + AgentTriggerWrapper, + APITriggerWrapper, + AppTriggerWrapper, + CaseTriggerWrapper, + ChangeEventTriggerWrapper, + DatabaseMonitoringTriggerWrapper, + DatastoreTriggerWrapper, + DashboardTriggerWrapper, + FormTriggerWrapper, + GithubWebhookTriggerWrapper, + IncidentTriggerWrapper, + MonitorTriggerWrapper, + NotebookTriggerWrapper, + OnCallTriggerWrapper, + ScheduleTriggerWrapper, + SecurityTriggerWrapper, + SelfServiceTriggerWrapper, + SlackTriggerWrapper, + SoftwareCatalogTriggerWrapper, + WorkflowTriggerWrapper, + ], + } diff --git a/datadog_api_client/v2/model/trigger_attributes.py b/datadog_api_client/v2/model/trigger_attributes.py new file mode 100644 index 0000000000..c33b3ec9e2 --- /dev/null +++ b/datadog_api_client/v2/model/trigger_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.monitor_alert_trigger_attributes import MonitorAlertTriggerAttributes + from datadog_api_client.v2.model.trigger_type import TriggerType + +class TriggerAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.monitor_alert_trigger_attributes import MonitorAlertTriggerAttributes + from datadog_api_client.v2.model.trigger_type import TriggerType + return { + "monitor_alert_trigger": (MonitorAlertTriggerAttributes,), + "type": (TriggerType,), + } + attribute_map = { + "monitor_alert_trigger": "monitor_alert_trigger", + "type": "type", + } + + def __init__(self_, monitor_alert_trigger: MonitorAlertTriggerAttributes, type: TriggerType, **kwargs): + """ + The trigger definition for starting an investigation. + + :param monitor_alert_trigger: Attributes for a monitor alert trigger. + :type monitor_alert_trigger: MonitorAlertTriggerAttributes + + :param type: The type of trigger for the investigation. + :type type: TriggerType + """ + super().__init__(kwargs) + + + self_.monitor_alert_trigger = monitor_alert_trigger + self_.type = type diff --git a/datadog_api_client/v2/model/trigger_investigation_request.py b/datadog_api_client/v2/model/trigger_investigation_request.py new file mode 100644 index 0000000000..2f443978e6 --- /dev/null +++ b/datadog_api_client/v2/model/trigger_investigation_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_investigation_request_data import TriggerInvestigationRequestData + +class TriggerInvestigationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_investigation_request_data import TriggerInvestigationRequestData + return { + "data": (TriggerInvestigationRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TriggerInvestigationRequestData, **kwargs): + """ + Request to trigger a new investigation. + + :param data: Data for the trigger investigation request. + :type data: TriggerInvestigationRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/trigger_investigation_request_data.py b/datadog_api_client/v2/model/trigger_investigation_request_data.py new file mode 100644 index 0000000000..65252a7ebf --- /dev/null +++ b/datadog_api_client/v2/model/trigger_investigation_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_investigation_request_data_attributes import TriggerInvestigationRequestDataAttributes + from datadog_api_client.v2.model.trigger_investigation_request_type import TriggerInvestigationRequestType + +class TriggerInvestigationRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_investigation_request_data_attributes import TriggerInvestigationRequestDataAttributes + from datadog_api_client.v2.model.trigger_investigation_request_type import TriggerInvestigationRequestType + return { + "attributes": (TriggerInvestigationRequestDataAttributes,), + "type": (TriggerInvestigationRequestType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: TriggerInvestigationRequestDataAttributes, type: TriggerInvestigationRequestType, **kwargs): + """ + Data for the trigger investigation request. + + :param attributes: Attributes for the trigger investigation request. + :type attributes: TriggerInvestigationRequestDataAttributes + + :param type: The resource type for trigger investigation requests. + :type type: TriggerInvestigationRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/trigger_investigation_request_data_attributes.py b/datadog_api_client/v2/model/trigger_investigation_request_data_attributes.py new file mode 100644 index 0000000000..fd6e621535 --- /dev/null +++ b/datadog_api_client/v2/model/trigger_investigation_request_data_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_attributes import TriggerAttributes + +class TriggerInvestigationRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_attributes import TriggerAttributes + return { + "trigger": (TriggerAttributes,), + } + attribute_map = { + "trigger": "trigger", + } + + def __init__(self_, trigger: TriggerAttributes, **kwargs): + """ + Attributes for the trigger investigation request. + + :param trigger: The trigger definition for starting an investigation. + :type trigger: TriggerAttributes + """ + super().__init__(kwargs) + + + self_.trigger = trigger diff --git a/datadog_api_client/v2/model/trigger_investigation_request_type.py b/datadog_api_client/v2/model/trigger_investigation_request_type.py new file mode 100644 index 0000000000..b0e57a5fec --- /dev/null +++ b/datadog_api_client/v2/model/trigger_investigation_request_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TriggerInvestigationRequestType(ModelSimple): + """ + The resource type for trigger investigation requests. + + :param value: If omitted defaults to "trigger_investigation_request". Must be one of ["trigger_investigation_request"]. + :type value: str + """ + + allowed_values = { + "trigger_investigation_request", + } + TRIGGER_INVESTIGATION_REQUEST: ClassVar["TriggerInvestigationRequestType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TriggerInvestigationRequestType.TRIGGER_INVESTIGATION_REQUEST = TriggerInvestigationRequestType("trigger_investigation_request") diff --git a/datadog_api_client/v2/model/trigger_investigation_response.py b/datadog_api_client/v2/model/trigger_investigation_response.py new file mode 100644 index 0000000000..444d5fb94a --- /dev/null +++ b/datadog_api_client/v2/model/trigger_investigation_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_investigation_response_data import TriggerInvestigationResponseData + +class TriggerInvestigationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_investigation_response_data import TriggerInvestigationResponseData + return { + "data": (TriggerInvestigationResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TriggerInvestigationResponseData, **kwargs): + """ + Response after triggering an investigation. + + :param data: Data for the trigger investigation response. + :type data: TriggerInvestigationResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/trigger_investigation_response_data.py b/datadog_api_client/v2/model/trigger_investigation_response_data.py new file mode 100644 index 0000000000..71f44d7bf4 --- /dev/null +++ b/datadog_api_client/v2/model/trigger_investigation_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_investigation_response_data_attributes import TriggerInvestigationResponseDataAttributes + from datadog_api_client.v2.model.trigger_investigation_response_type import TriggerInvestigationResponseType + +class TriggerInvestigationResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_investigation_response_data_attributes import TriggerInvestigationResponseDataAttributes + from datadog_api_client.v2.model.trigger_investigation_response_type import TriggerInvestigationResponseType + return { + "attributes": (TriggerInvestigationResponseDataAttributes,), + "id": (str,), + "type": (TriggerInvestigationResponseType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: TriggerInvestigationResponseDataAttributes, id: str, type: TriggerInvestigationResponseType, **kwargs): + """ + Data for the trigger investigation response. + + :param attributes: Attributes for the trigger investigation response. + :type attributes: TriggerInvestigationResponseDataAttributes + + :param id: Unique identifier for the trigger response. + :type id: str + + :param type: The resource type for trigger investigation responses. + :type type: TriggerInvestigationResponseType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/trigger_investigation_response_data_attributes.py b/datadog_api_client/v2/model/trigger_investigation_response_data_attributes.py new file mode 100644 index 0000000000..06be306552 --- /dev/null +++ b/datadog_api_client/v2/model/trigger_investigation_response_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TriggerInvestigationResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "investigation_id": (str,), + } + attribute_map = { + "investigation_id": "investigation_id", + } + + def __init__(self_, investigation_id: str, **kwargs): + """ + Attributes for the trigger investigation response. + + :param investigation_id: The ID of the investigation that was created. + :type investigation_id: str + """ + super().__init__(kwargs) + + + self_.investigation_id = investigation_id diff --git a/datadog_api_client/v2/model/trigger_investigation_response_type.py b/datadog_api_client/v2/model/trigger_investigation_response_type.py new file mode 100644 index 0000000000..7738ab04fa --- /dev/null +++ b/datadog_api_client/v2/model/trigger_investigation_response_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TriggerInvestigationResponseType(ModelSimple): + """ + The resource type for trigger investigation responses. + + :param value: If omitted defaults to "trigger_investigation_response". Must be one of ["trigger_investigation_response"]. + :type value: str + """ + + allowed_values = { + "trigger_investigation_response", + } + TRIGGER_INVESTIGATION_RESPONSE: ClassVar["TriggerInvestigationResponseType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TriggerInvestigationResponseType.TRIGGER_INVESTIGATION_RESPONSE = TriggerInvestigationResponseType("trigger_investigation_response") diff --git a/datadog_api_client/v2/model/trigger_rate_limit.py b/datadog_api_client/v2/model/trigger_rate_limit.py new file mode 100644 index 0000000000..1b7194df7c --- /dev/null +++ b/datadog_api_client/v2/model/trigger_rate_limit.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class TriggerRateLimit(ModelNormal): + @cached_property + def openapi_types(_): + return { + "count": (int,), + "interval": (str,), + } + attribute_map = { + "count": "count", + "interval": "interval", + } + + def __init__(self_, count: Union[int, UnsetType]=unset, interval: Union[str, UnsetType]=unset, **kwargs): + """ + Defines a rate limit for a trigger. + + :param count: The ``TriggerRateLimit`` ``count``. + :type count: int, optional + + :param interval: The ``TriggerRateLimit`` ``interval``. The expected format is the number of seconds ending with an s. For example, 1 day is 86400s + :type interval: str, optional + """ + if count is not unset: + kwargs["count"] = count + if interval is not unset: + kwargs["interval"] = interval + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/trigger_source.py b/datadog_api_client/v2/model/trigger_source.py new file mode 100644 index 0000000000..3f0b4ae717 --- /dev/null +++ b/datadog_api_client/v2/model/trigger_source.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TriggerSource(ModelSimple): + """ + The type of security issues on which the rule applies. Notification rules based on security signals need to use the trigger source "security_signals", + while notification rules based on security vulnerabilities need to use the trigger source "security_findings". + + :param value: Must be one of ["security_findings", "security_signals"]. + :type value: str + """ + + allowed_values = { + "security_findings", + "security_signals", + } + SECURITY_FINDINGS: ClassVar["TriggerSource"] + SECURITY_SIGNALS: ClassVar["TriggerSource"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TriggerSource.SECURITY_FINDINGS = TriggerSource("security_findings") +TriggerSource.SECURITY_SIGNALS = TriggerSource("security_signals") diff --git a/datadog_api_client/v2/model/trigger_type.py b/datadog_api_client/v2/model/trigger_type.py new file mode 100644 index 0000000000..a0645f0c89 --- /dev/null +++ b/datadog_api_client/v2/model/trigger_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TriggerType(ModelSimple): + """ + The type of trigger for the investigation. + + :param value: If omitted defaults to "monitor_alert_trigger". Must be one of ["monitor_alert_trigger"]. + :type value: str + """ + + allowed_values = { + "monitor_alert_trigger", + } + MONITOR_ALERT_TRIGGER: ClassVar["TriggerType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TriggerType.MONITOR_ALERT_TRIGGER = TriggerType("monitor_alert_trigger") diff --git a/datadog_api_client/v2/model/trigger_workflow_automation_action.py b/datadog_api_client/v2/model/trigger_workflow_automation_action.py new file mode 100644 index 0000000000..cd9796131f --- /dev/null +++ b/datadog_api_client/v2/model/trigger_workflow_automation_action.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.trigger_workflow_automation_action_type import TriggerWorkflowAutomationActionType + +class TriggerWorkflowAutomationAction(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.trigger_workflow_automation_action_type import TriggerWorkflowAutomationActionType + return { + "handle": (str,), + "type": (TriggerWorkflowAutomationActionType,), + } + attribute_map = { + "handle": "handle", + "type": "type", + } + + def __init__(self_, handle: str, type: TriggerWorkflowAutomationActionType, **kwargs): + """ + Triggers a Workflow Automation. + + :param handle: The handle of the Workflow Automation to trigger. + :type handle: str + + :param type: Indicates that the action triggers a Workflow Automation. + :type type: TriggerWorkflowAutomationActionType + """ + super().__init__(kwargs) + + + self_.handle = handle + self_.type = type diff --git a/datadog_api_client/v2/model/trigger_workflow_automation_action_type.py b/datadog_api_client/v2/model/trigger_workflow_automation_action_type.py new file mode 100644 index 0000000000..16c0ced7fc --- /dev/null +++ b/datadog_api_client/v2/model/trigger_workflow_automation_action_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class TriggerWorkflowAutomationActionType(ModelSimple): + """ + Indicates that the action triggers a Workflow Automation. + + :param value: If omitted defaults to "workflow". Must be one of ["workflow"]. + :type value: str + """ + + allowed_values = { + "workflow", + } + TRIGGER_WORKFLOW_AUTOMATION: ClassVar["TriggerWorkflowAutomationActionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +TriggerWorkflowAutomationActionType.TRIGGER_WORKFLOW_AUTOMATION = TriggerWorkflowAutomationActionType("workflow") diff --git a/datadog_api_client/v2/model/uc_config_pair.py b/datadog_api_client/v2/model/uc_config_pair.py new file mode 100644 index 0000000000..143a144f69 --- /dev/null +++ b/datadog_api_client/v2/model/uc_config_pair.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.uc_config_pair_data import UCConfigPairData + +class UCConfigPair(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.uc_config_pair_data import UCConfigPairData + return { + "data": (UCConfigPairData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UCConfigPairData, UnsetType]=unset, **kwargs): + """ + The definition of ``UCConfigPair`` object. + + :param data: The definition of ``UCConfigPairData`` object. + :type data: UCConfigPairData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/uc_config_pair_data.py b/datadog_api_client/v2/model/uc_config_pair_data.py new file mode 100644 index 0000000000..800093f24e --- /dev/null +++ b/datadog_api_client/v2/model/uc_config_pair_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.uc_config_pair_data_attributes import UCConfigPairDataAttributes + from datadog_api_client.v2.model.uc_config_pair_data_type import UCConfigPairDataType + +class UCConfigPairData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.uc_config_pair_data_attributes import UCConfigPairDataAttributes + from datadog_api_client.v2.model.uc_config_pair_data_type import UCConfigPairDataType + return { + "attributes": (UCConfigPairDataAttributes,), + "id": (str,), + "type": (UCConfigPairDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: UCConfigPairDataType, attributes: Union[UCConfigPairDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``UCConfigPairData`` object. + + :param attributes: The definition of ``UCConfigPairDataAttributes`` object. + :type attributes: UCConfigPairDataAttributes, optional + + :param id: The ``UCConfigPairData`` ``id``. + :type id: str, optional + + :param type: Azure UC configs resource type. + :type type: UCConfigPairDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/uc_config_pair_data_attributes.py b/datadog_api_client/v2/model/uc_config_pair_data_attributes.py new file mode 100644 index 0000000000..56d6cbf9c8 --- /dev/null +++ b/datadog_api_client/v2/model/uc_config_pair_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.uc_config_pair_data_attributes_configs_items import UCConfigPairDataAttributesConfigsItems + +class UCConfigPairDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.uc_config_pair_data_attributes_configs_items import UCConfigPairDataAttributesConfigsItems + return { + "configs": ([UCConfigPairDataAttributesConfigsItems],), + } + attribute_map = { + "configs": "configs", + } + + def __init__(self_, configs: Union[List[UCConfigPairDataAttributesConfigsItems], UnsetType]=unset, **kwargs): + """ + The definition of ``UCConfigPairDataAttributes`` object. + + :param configs: The ``attributes`` ``configs``. + :type configs: [UCConfigPairDataAttributesConfigsItems], optional + """ + if configs is not unset: + kwargs["configs"] = configs + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/uc_config_pair_data_attributes_configs_items.py b/datadog_api_client/v2/model/uc_config_pair_data_attributes_configs_items.py new file mode 100644 index 0000000000..3d6d1acb35 --- /dev/null +++ b/datadog_api_client/v2/model/uc_config_pair_data_attributes_configs_items.py @@ -0,0 +1,144 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UCConfigPairDataAttributesConfigsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "account_id": (str,), + "client_id": (str,), + "created_at": (str,), + "dataset_type": (str,), + "error_messages": ([str], none_type), + "export_name": (str,), + "export_path": (str,), + "id": (str,), + "months": (int,), + "scope": (str,), + "status": (str,), + "status_updated_at": (str,), + "storage_account": (str,), + "storage_container": (str,), + "updated_at": (str,), + } + attribute_map = { + "account_id": "account_id", + "client_id": "client_id", + "created_at": "created_at", + "dataset_type": "dataset_type", + "error_messages": "error_messages", + "export_name": "export_name", + "export_path": "export_path", + "id": "id", + "months": "months", + "scope": "scope", + "status": "status", + "status_updated_at": "status_updated_at", + "storage_account": "storage_account", + "storage_container": "storage_container", + "updated_at": "updated_at", + } + + def __init__(self_, account_id: Union[str, UnsetType]=unset, client_id: Union[str, UnsetType]=unset, created_at: Union[str, UnsetType]=unset, dataset_type: Union[str, UnsetType]=unset, error_messages: Union[List[str], none_type, UnsetType]=unset, export_name: Union[str, UnsetType]=unset, export_path: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, months: Union[int, UnsetType]=unset, scope: Union[str, UnsetType]=unset, status: Union[str, UnsetType]=unset, status_updated_at: Union[str, UnsetType]=unset, storage_account: Union[str, UnsetType]=unset, storage_container: Union[str, UnsetType]=unset, updated_at: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``UCConfigPairDataAttributesConfigsItems`` object. + + :param account_id: The ``items`` ``account_id``. + :type account_id: str, optional + + :param client_id: The ``items`` ``client_id``. + :type client_id: str, optional + + :param created_at: The ``items`` ``created_at``. + :type created_at: str, optional + + :param dataset_type: The ``items`` ``dataset_type``. + :type dataset_type: str, optional + + :param error_messages: The ``items`` ``error_messages``. + :type error_messages: [str], none_type, optional + + :param export_name: The ``items`` ``export_name``. + :type export_name: str, optional + + :param export_path: The ``items`` ``export_path``. + :type export_path: str, optional + + :param id: The ``items`` ``id``. + :type id: str, optional + + :param months: The ``items`` ``months``. + :type months: int, optional + + :param scope: The ``items`` ``scope``. + :type scope: str, optional + + :param status: The ``items`` ``status``. + :type status: str, optional + + :param status_updated_at: The ``items`` ``status_updated_at``. + :type status_updated_at: str, optional + + :param storage_account: The ``items`` ``storage_account``. + :type storage_account: str, optional + + :param storage_container: The ``items`` ``storage_container``. + :type storage_container: str, optional + + :param updated_at: The ``items`` ``updated_at``. + :type updated_at: str, optional + """ + if account_id is not unset: + kwargs["account_id"] = account_id + if client_id is not unset: + kwargs["client_id"] = client_id + if created_at is not unset: + kwargs["created_at"] = created_at + if dataset_type is not unset: + kwargs["dataset_type"] = dataset_type + if error_messages is not unset: + kwargs["error_messages"] = error_messages + if export_name is not unset: + kwargs["export_name"] = export_name + if export_path is not unset: + kwargs["export_path"] = export_path + if id is not unset: + kwargs["id"] = id + if months is not unset: + kwargs["months"] = months + if scope is not unset: + kwargs["scope"] = scope + if status is not unset: + kwargs["status"] = status + if status_updated_at is not unset: + kwargs["status_updated_at"] = status_updated_at + if storage_account is not unset: + kwargs["storage_account"] = storage_account + if storage_container is not unset: + kwargs["storage_container"] = storage_container + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/uc_config_pair_data_type.py b/datadog_api_client/v2/model/uc_config_pair_data_type.py new file mode 100644 index 0000000000..6711d3862a --- /dev/null +++ b/datadog_api_client/v2/model/uc_config_pair_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UCConfigPairDataType(ModelSimple): + """ + Azure UC configs resource type. + + :param value: If omitted defaults to "azure_uc_configs". Must be one of ["azure_uc_configs"]. + :type value: str + """ + + allowed_values = { + "azure_uc_configs", + } + AZURE_UC_CONFIGS: ClassVar["UCConfigPairDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UCConfigPairDataType.AZURE_UC_CONFIGS = UCConfigPairDataType("azure_uc_configs") diff --git a/datadog_api_client/v2/model/unassign_seats_user_request.py b/datadog_api_client/v2/model/unassign_seats_user_request.py new file mode 100644 index 0000000000..86aec5ebb4 --- /dev/null +++ b/datadog_api_client/v2/model/unassign_seats_user_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.unassign_seats_user_request_data import UnassignSeatsUserRequestData + +class UnassignSeatsUserRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.unassign_seats_user_request_data import UnassignSeatsUserRequestData + return { + "data": (UnassignSeatsUserRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UnassignSeatsUserRequestData, UnsetType]=unset, **kwargs): + """ + The request body for unassigning seats from users for a product code. + + :param data: The request data object containing attributes for unassigning seats from users. + :type data: UnassignSeatsUserRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/unassign_seats_user_request_data.py b/datadog_api_client/v2/model/unassign_seats_user_request_data.py new file mode 100644 index 0000000000..5a05cc6bdb --- /dev/null +++ b/datadog_api_client/v2/model/unassign_seats_user_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.unassign_seats_user_request_data_attributes import UnassignSeatsUserRequestDataAttributes + from datadog_api_client.v2.model.seat_assignments_data_type import SeatAssignmentsDataType + +class UnassignSeatsUserRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.unassign_seats_user_request_data_attributes import UnassignSeatsUserRequestDataAttributes + from datadog_api_client.v2.model.seat_assignments_data_type import SeatAssignmentsDataType + return { + "attributes": (UnassignSeatsUserRequestDataAttributes,), + "id": (str,), + "type": (SeatAssignmentsDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: UnassignSeatsUserRequestDataAttributes, type: SeatAssignmentsDataType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The request data object containing attributes for unassigning seats from users. + + :param attributes: Attributes specifying the product and users from whom seats will be unassigned. + :type attributes: UnassignSeatsUserRequestDataAttributes + + :param id: The ID of the unassign seats user request. + :type id: str, optional + + :param type: Seat assignments resource type. + :type type: SeatAssignmentsDataType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/unassign_seats_user_request_data_attributes.py b/datadog_api_client/v2/model/unassign_seats_user_request_data_attributes.py new file mode 100644 index 0000000000..1c529267d4 --- /dev/null +++ b/datadog_api_client/v2/model/unassign_seats_user_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UnassignSeatsUserRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "product_code": (str,), + "user_uuids": ([str],), + } + attribute_map = { + "product_code": "product_code", + "user_uuids": "user_uuids", + } + + def __init__(self_, product_code: str, user_uuids: List[str], **kwargs): + """ + Attributes specifying the product and users from whom seats will be unassigned. + + :param product_code: The product code for which to unassign seats. + :type product_code: str + + :param user_uuids: The list of user IDs to unassign seats from. + :type user_uuids: [str] + """ + super().__init__(kwargs) + + + self_.product_code = product_code + self_.user_uuids = user_uuids diff --git a/datadog_api_client/v2/model/unit.py b/datadog_api_client/v2/model/unit.py new file mode 100644 index 0000000000..eec34b4fac --- /dev/null +++ b/datadog_api_client/v2/model/unit.py @@ -0,0 +1,75 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Unit(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "family": (str,), + "name": (str,), + "plural": (str,), + "scale_factor": (float,), + "short_name": (str,), + } + attribute_map = { + "family": "family", + "name": "name", + "plural": "plural", + "scale_factor": "scale_factor", + "short_name": "short_name", + } + + def __init__(self_, family: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, plural: Union[str, UnsetType]=unset, scale_factor: Union[float, UnsetType]=unset, short_name: Union[str, UnsetType]=unset, **kwargs): + """ + Object containing the metric unit family, scale factor, name, and short name. + + :param family: Unit family, allows for conversion between units of the same family, for scaling. + :type family: str, optional + + :param name: Unit name + :type name: str, optional + + :param plural: Plural form of the unit name. + :type plural: str, optional + + :param scale_factor: Factor for scaling between units of the same family. + :type scale_factor: float, optional + + :param short_name: Abbreviation of the unit. + :type short_name: str, optional + """ + if family is not unset: + kwargs["family"] = family + if name is not unset: + kwargs["name"] = name + if plural is not unset: + kwargs["plural"] = plural + if scale_factor is not unset: + kwargs["scale_factor"] = scale_factor + if short_name is not unset: + kwargs["short_name"] = short_name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/unpublish_app_response.py b/datadog_api_client/v2/model/unpublish_app_response.py new file mode 100644 index 0000000000..f78e39f92d --- /dev/null +++ b/datadog_api_client/v2/model/unpublish_app_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment import Deployment + +class UnpublishAppResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment import Deployment + return { + "data": (Deployment,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[Deployment, UnsetType]=unset, **kwargs): + """ + The response object after an app is successfully unpublished. + + :param data: The version of the app that was published. + :type data: Deployment, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_action_connection_request.py b/datadog_api_client/v2/model/update_action_connection_request.py new file mode 100644 index 0000000000..280f54fda0 --- /dev/null +++ b/datadog_api_client/v2/model/update_action_connection_request.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_connection_data_update import ActionConnectionDataUpdate + from datadog_api_client.v2.model.aws_integration_update import AWSIntegrationUpdate + from datadog_api_client.v2.model.anthropic_integration_update import AnthropicIntegrationUpdate + from datadog_api_client.v2.model.asana_integration_update import AsanaIntegrationUpdate + from datadog_api_client.v2.model.azure_integration_update import AzureIntegrationUpdate + from datadog_api_client.v2.model.circle_ci_integration_update import CircleCIIntegrationUpdate + from datadog_api_client.v2.model.clickup_integration_update import ClickupIntegrationUpdate + from datadog_api_client.v2.model.cloudflare_integration_update import CloudflareIntegrationUpdate + from datadog_api_client.v2.model.config_cat_integration_update import ConfigCatIntegrationUpdate + from datadog_api_client.v2.model.datadog_integration_update import DatadogIntegrationUpdate + from datadog_api_client.v2.model.fastly_integration_update import FastlyIntegrationUpdate + from datadog_api_client.v2.model.freshservice_integration_update import FreshserviceIntegrationUpdate + from datadog_api_client.v2.model.gcp_integration_update import GCPIntegrationUpdate + from datadog_api_client.v2.model.gemini_integration_update import GeminiIntegrationUpdate + from datadog_api_client.v2.model.gitlab_integration_update import GitlabIntegrationUpdate + from datadog_api_client.v2.model.grey_noise_integration_update import GreyNoiseIntegrationUpdate + from datadog_api_client.v2.model.http_integration_update import HTTPIntegrationUpdate + from datadog_api_client.v2.model.launch_darkly_integration_update import LaunchDarklyIntegrationUpdate + from datadog_api_client.v2.model.notion_integration_update import NotionIntegrationUpdate + from datadog_api_client.v2.model.okta_integration_update import OktaIntegrationUpdate + from datadog_api_client.v2.model.open_ai_integration_update import OpenAIIntegrationUpdate + from datadog_api_client.v2.model.service_now_integration_update import ServiceNowIntegrationUpdate + from datadog_api_client.v2.model.split_integration_update import SplitIntegrationUpdate + from datadog_api_client.v2.model.statsig_integration_update import StatsigIntegrationUpdate + from datadog_api_client.v2.model.virus_total_integration_update import VirusTotalIntegrationUpdate + +class UpdateActionConnectionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_connection_data_update import ActionConnectionDataUpdate + return { + "data": (ActionConnectionDataUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ActionConnectionDataUpdate, **kwargs): + """ + Request used to update an action connection. + + :param data: Data related to the connection update. + :type data: ActionConnectionDataUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_action_connection_response.py b/datadog_api_client/v2/model/update_action_connection_response.py new file mode 100644 index 0000000000..32ad2dd717 --- /dev/null +++ b/datadog_api_client/v2/model/update_action_connection_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.action_connection_data import ActionConnectionData + from datadog_api_client.v2.model.aws_integration import AWSIntegration + from datadog_api_client.v2.model.anthropic_integration import AnthropicIntegration + from datadog_api_client.v2.model.asana_integration import AsanaIntegration + from datadog_api_client.v2.model.azure_integration import AzureIntegration + from datadog_api_client.v2.model.circle_ci_integration import CircleCIIntegration + from datadog_api_client.v2.model.clickup_integration import ClickupIntegration + from datadog_api_client.v2.model.cloudflare_integration import CloudflareIntegration + from datadog_api_client.v2.model.config_cat_integration import ConfigCatIntegration + from datadog_api_client.v2.model.datadog_integration import DatadogIntegration + from datadog_api_client.v2.model.fastly_integration import FastlyIntegration + from datadog_api_client.v2.model.freshservice_integration import FreshserviceIntegration + from datadog_api_client.v2.model.gcp_integration import GCPIntegration + from datadog_api_client.v2.model.gemini_integration import GeminiIntegration + from datadog_api_client.v2.model.gitlab_integration import GitlabIntegration + from datadog_api_client.v2.model.grey_noise_integration import GreyNoiseIntegration + from datadog_api_client.v2.model.http_integration import HTTPIntegration + from datadog_api_client.v2.model.launch_darkly_integration import LaunchDarklyIntegration + from datadog_api_client.v2.model.notion_integration import NotionIntegration + from datadog_api_client.v2.model.okta_integration import OktaIntegration + from datadog_api_client.v2.model.open_ai_integration import OpenAIIntegration + from datadog_api_client.v2.model.service_now_integration import ServiceNowIntegration + from datadog_api_client.v2.model.split_integration import SplitIntegration + from datadog_api_client.v2.model.statsig_integration import StatsigIntegration + from datadog_api_client.v2.model.virus_total_integration import VirusTotalIntegration + +class UpdateActionConnectionResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.action_connection_data import ActionConnectionData + return { + "data": (ActionConnectionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ActionConnectionData, UnsetType]=unset, **kwargs): + """ + The response for an updated connection. + + :param data: Data related to the connection. + :type data: ActionConnectionData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_favorite_request.py b/datadog_api_client/v2/model/update_app_favorite_request.py new file mode 100644 index 0000000000..183fd797bf --- /dev/null +++ b/datadog_api_client/v2/model/update_app_favorite_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_favorite_request_data import UpdateAppFavoriteRequestData + +class UpdateAppFavoriteRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_favorite_request_data import UpdateAppFavoriteRequestData + return { + "data": (UpdateAppFavoriteRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateAppFavoriteRequestData, UnsetType]=unset, **kwargs): + """ + A request to add or remove an app from the current user's favorites. + + :param data: Data for updating an app's favorite status. + :type data: UpdateAppFavoriteRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_favorite_request_data.py b/datadog_api_client/v2/model/update_app_favorite_request_data.py new file mode 100644 index 0000000000..1a99ba6538 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_favorite_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_favorite_request_data_attributes import UpdateAppFavoriteRequestDataAttributes + from datadog_api_client.v2.model.app_favorite_type import AppFavoriteType + +class UpdateAppFavoriteRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_favorite_request_data_attributes import UpdateAppFavoriteRequestDataAttributes + from datadog_api_client.v2.model.app_favorite_type import AppFavoriteType + return { + "attributes": (UpdateAppFavoriteRequestDataAttributes,), + "type": (AppFavoriteType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[UpdateAppFavoriteRequestDataAttributes, UnsetType]=unset, type: Union[AppFavoriteType, UnsetType]=unset, **kwargs): + """ + Data for updating an app's favorite status. + + :param attributes: Attributes for updating an app's favorite status. + :type attributes: UpdateAppFavoriteRequestDataAttributes, optional + + :param type: The favorite resource type. + :type type: AppFavoriteType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_favorite_request_data_attributes.py b/datadog_api_client/v2/model/update_app_favorite_request_data_attributes.py new file mode 100644 index 0000000000..6e30c1e6ab --- /dev/null +++ b/datadog_api_client/v2/model/update_app_favorite_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateAppFavoriteRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "favorite": (bool,), + } + attribute_map = { + "favorite": "favorite", + } + + def __init__(self_, favorite: bool, **kwargs): + """ + Attributes for updating an app's favorite status. + + :param favorite: Whether the app should be marked as a favorite for the current user. + :type favorite: bool + """ + super().__init__(kwargs) + + + self_.favorite = favorite diff --git a/datadog_api_client/v2/model/update_app_protection_level_request.py b/datadog_api_client/v2/model/update_app_protection_level_request.py new file mode 100644 index 0000000000..835ff262f7 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_protection_level_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_protection_level_request_data import UpdateAppProtectionLevelRequestData + +class UpdateAppProtectionLevelRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_protection_level_request_data import UpdateAppProtectionLevelRequestData + return { + "data": (UpdateAppProtectionLevelRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateAppProtectionLevelRequestData, UnsetType]=unset, **kwargs): + """ + A request to update an app's publication protection level. + + :param data: Data for updating an app's publication protection level. + :type data: UpdateAppProtectionLevelRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_protection_level_request_data.py b/datadog_api_client/v2/model/update_app_protection_level_request_data.py new file mode 100644 index 0000000000..3bacbf4389 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_protection_level_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_protection_level_request_data_attributes import UpdateAppProtectionLevelRequestDataAttributes + from datadog_api_client.v2.model.app_protection_level_type import AppProtectionLevelType + +class UpdateAppProtectionLevelRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_protection_level_request_data_attributes import UpdateAppProtectionLevelRequestDataAttributes + from datadog_api_client.v2.model.app_protection_level_type import AppProtectionLevelType + return { + "attributes": (UpdateAppProtectionLevelRequestDataAttributes,), + "type": (AppProtectionLevelType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[UpdateAppProtectionLevelRequestDataAttributes, UnsetType]=unset, type: Union[AppProtectionLevelType, UnsetType]=unset, **kwargs): + """ + Data for updating an app's publication protection level. + + :param attributes: Attributes for updating an app's publication protection level. + :type attributes: UpdateAppProtectionLevelRequestDataAttributes, optional + + :param type: The protection-level resource type. + :type type: AppProtectionLevelType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_protection_level_request_data_attributes.py b/datadog_api_client/v2/model/update_app_protection_level_request_data_attributes.py new file mode 100644 index 0000000000..09d12b7101 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_protection_level_request_data_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.app_protection_level import AppProtectionLevel + +class UpdateAppProtectionLevelRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.app_protection_level import AppProtectionLevel + return { + "protection_level": (AppProtectionLevel,), + } + attribute_map = { + "protection_level": "protectionLevel", + } + + def __init__(self_, protection_level: AppProtectionLevel, **kwargs): + """ + Attributes for updating an app's publication protection level. + + :param protection_level: The publication protection level of the app. ``approval_required`` means changes must go through an approval workflow before being published. + :type protection_level: AppProtectionLevel + """ + super().__init__(kwargs) + + + self_.protection_level = protection_level diff --git a/datadog_api_client/v2/model/update_app_request.py b/datadog_api_client/v2/model/update_app_request.py new file mode 100644 index 0000000000..a76c1e115e --- /dev/null +++ b/datadog_api_client/v2/model/update_app_request.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_request_data import UpdateAppRequestData + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class UpdateAppRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_request_data import UpdateAppRequestData + return { + "data": (UpdateAppRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateAppRequestData, UnsetType]=unset, **kwargs): + """ + A request object for updating an existing app. + + :param data: The data object containing the new app definition. Any fields not included in the request remain unchanged. + :type data: UpdateAppRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_request_data.py b/datadog_api_client/v2/model/update_app_request_data.py new file mode 100644 index 0000000000..d962de2c99 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_request_data.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_request_data_attributes import UpdateAppRequestDataAttributes + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class UpdateAppRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_request_data_attributes import UpdateAppRequestDataAttributes + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + return { + "attributes": (UpdateAppRequestDataAttributes,), + "id": (UUID,), + "type": (AppDefinitionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: AppDefinitionType, attributes: Union[UpdateAppRequestDataAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + The data object containing the new app definition. Any fields not included in the request remain unchanged. + + :param attributes: App definition attributes to be updated, such as name, description, and components. + :type attributes: UpdateAppRequestDataAttributes, optional + + :param id: The ID of the app to update. The app ID must match the ID in the URL path. + :type id: UUID, optional + + :param type: The app definition type. + :type type: AppDefinitionType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/update_app_request_data_attributes.py b/datadog_api_client/v2/model/update_app_request_data_attributes.py new file mode 100644 index 0000000000..51abbd5b8a --- /dev/null +++ b/datadog_api_client/v2/model/update_app_request_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.component_grid import ComponentGrid + from datadog_api_client.v2.model.query import Query + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class UpdateAppRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.component_grid import ComponentGrid + from datadog_api_client.v2.model.query import Query + return { + "components": ([ComponentGrid],), + "description": (str,), + "name": (str,), + "queries": ([Query],), + "root_instance_name": (str,), + "tags": ([str],), + } + attribute_map = { + "components": "components", + "description": "description", + "name": "name", + "queries": "queries", + "root_instance_name": "rootInstanceName", + "tags": "tags", + } + + def __init__(self_, components: Union[List[ComponentGrid], UnsetType]=unset, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, queries: Union[List[Union[Query, ActionQuery, DataTransform, StateVariable]], UnsetType]=unset, root_instance_name: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + App definition attributes to be updated, such as name, description, and components. + + :param components: The new UI components that make up the app. If this field is set, all existing components are replaced with the new components under this field. + :type components: [ComponentGrid], optional + + :param description: The new human-readable description for the app. + :type description: str, optional + + :param name: The new name of the app. + :type name: str, optional + + :param queries: The new array of queries, such as external actions and state variables, that the app uses. If this field is set, all existing queries are replaced with the new queries under this field. + :type queries: [Query], optional + + :param root_instance_name: The new name of the root component of the app. This must be a ``grid`` component that contains all other components. + :type root_instance_name: str, optional + + :param tags: The new list of tags for the app, which can be used to filter apps. If this field is set, any existing tags not included in the request are removed. + :type tags: [str], optional + """ + if components is not unset: + kwargs["components"] = components + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if queries is not unset: + kwargs["queries"] = queries + if root_instance_name is not unset: + kwargs["root_instance_name"] = root_instance_name + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_response.py b/datadog_api_client/v2/model/update_app_response.py new file mode 100644 index 0000000000..2f8b20b238 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_response.py @@ -0,0 +1,79 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_response_data import UpdateAppResponseData + from datadog_api_client.v2.model.deployment import Deployment + from datadog_api_client.v2.model.app_meta import AppMeta + from datadog_api_client.v2.model.app_relationship import AppRelationship + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class UpdateAppResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_response_data import UpdateAppResponseData + from datadog_api_client.v2.model.deployment import Deployment + from datadog_api_client.v2.model.app_meta import AppMeta + from datadog_api_client.v2.model.app_relationship import AppRelationship + return { + "data": (UpdateAppResponseData,), + "included": ([Deployment],), + "meta": (AppMeta,), + "relationship": (AppRelationship,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + "relationship": "relationship", + } + + def __init__(self_, data: Union[UpdateAppResponseData, UnsetType]=unset, included: Union[List[Deployment], UnsetType]=unset, meta: Union[AppMeta, UnsetType]=unset, relationship: Union[AppRelationship, UnsetType]=unset, **kwargs): + """ + The response object after an app is successfully updated. + + :param data: The data object containing the updated app definition. + :type data: UpdateAppResponseData, optional + + :param included: Data on the version of the app that was published. + :type included: [Deployment], optional + + :param meta: Metadata of an app. + :type meta: AppMeta, optional + + :param relationship: The app's publication relationship and custom connections. + :type relationship: AppRelationship, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + if relationship is not unset: + kwargs["relationship"] = relationship + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_response_data.py b/datadog_api_client/v2/model/update_app_response_data.py new file mode 100644 index 0000000000..5d16e438be --- /dev/null +++ b/datadog_api_client/v2/model/update_app_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_response_data_attributes import UpdateAppResponseDataAttributes + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class UpdateAppResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_response_data_attributes import UpdateAppResponseDataAttributes + from datadog_api_client.v2.model.app_definition_type import AppDefinitionType + return { + "attributes": (UpdateAppResponseDataAttributes,), + "id": (UUID,), + "type": (AppDefinitionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: UpdateAppResponseDataAttributes, id: UUID, type: AppDefinitionType, **kwargs): + """ + The data object containing the updated app definition. + + :param attributes: The updated app definition attributes, such as name, description, and components. + :type attributes: UpdateAppResponseDataAttributes + + :param id: The ID of the updated app. + :type id: UUID + + :param type: The app definition type. + :type type: AppDefinitionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/update_app_response_data_attributes.py b/datadog_api_client/v2/model/update_app_response_data_attributes.py new file mode 100644 index 0000000000..3ade5aa092 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_response_data_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.component_grid import ComponentGrid + from datadog_api_client.v2.model.query import Query + from datadog_api_client.v2.model.action_query import ActionQuery + from datadog_api_client.v2.model.data_transform import DataTransform + from datadog_api_client.v2.model.state_variable import StateVariable + +class UpdateAppResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.component_grid import ComponentGrid + from datadog_api_client.v2.model.query import Query + return { + "components": ([ComponentGrid],), + "description": (str,), + "favorite": (bool,), + "name": (str,), + "queries": ([Query],), + "root_instance_name": (str,), + "tags": ([str],), + } + attribute_map = { + "components": "components", + "description": "description", + "favorite": "favorite", + "name": "name", + "queries": "queries", + "root_instance_name": "rootInstanceName", + "tags": "tags", + } + + def __init__(self_, components: Union[List[ComponentGrid], UnsetType]=unset, description: Union[str, UnsetType]=unset, favorite: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, queries: Union[List[Union[Query, ActionQuery, DataTransform, StateVariable]], UnsetType]=unset, root_instance_name: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, **kwargs): + """ + The updated app definition attributes, such as name, description, and components. + + :param components: The UI components that make up the app. + :type components: [ComponentGrid], optional + + :param description: The human-readable description for the app. + :type description: str, optional + + :param favorite: Whether the app is marked as a favorite by the current user. + :type favorite: bool, optional + + :param name: The name of the app. + :type name: str, optional + + :param queries: An array of queries, such as external actions and state variables, that the app uses. + :type queries: [Query], optional + + :param root_instance_name: The name of the root component of the app. This must be a ``grid`` component that contains all other components. + :type root_instance_name: str, optional + + :param tags: A list of tags for the app, which can be used to filter apps. + :type tags: [str], optional + """ + if components is not unset: + kwargs["components"] = components + if description is not unset: + kwargs["description"] = description + if favorite is not unset: + kwargs["favorite"] = favorite + if name is not unset: + kwargs["name"] = name + if queries is not unset: + kwargs["queries"] = queries + if root_instance_name is not unset: + kwargs["root_instance_name"] = root_instance_name + if tags is not unset: + kwargs["tags"] = tags + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_self_service_request.py b/datadog_api_client/v2/model/update_app_self_service_request.py new file mode 100644 index 0000000000..895238dcf1 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_self_service_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_self_service_request_data import UpdateAppSelfServiceRequestData + +class UpdateAppSelfServiceRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_self_service_request_data import UpdateAppSelfServiceRequestData + return { + "data": (UpdateAppSelfServiceRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateAppSelfServiceRequestData, UnsetType]=unset, **kwargs): + """ + A request to enable or disable self-service for an app. + + :param data: Data for updating an app's self-service status. + :type data: UpdateAppSelfServiceRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_self_service_request_data.py b/datadog_api_client/v2/model/update_app_self_service_request_data.py new file mode 100644 index 0000000000..7779cb4cfb --- /dev/null +++ b/datadog_api_client/v2/model/update_app_self_service_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_self_service_request_data_attributes import UpdateAppSelfServiceRequestDataAttributes + from datadog_api_client.v2.model.app_self_service_type import AppSelfServiceType + +class UpdateAppSelfServiceRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_self_service_request_data_attributes import UpdateAppSelfServiceRequestDataAttributes + from datadog_api_client.v2.model.app_self_service_type import AppSelfServiceType + return { + "attributes": (UpdateAppSelfServiceRequestDataAttributes,), + "type": (AppSelfServiceType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[UpdateAppSelfServiceRequestDataAttributes, UnsetType]=unset, type: Union[AppSelfServiceType, UnsetType]=unset, **kwargs): + """ + Data for updating an app's self-service status. + + :param attributes: Attributes for updating an app's self-service status. + :type attributes: UpdateAppSelfServiceRequestDataAttributes, optional + + :param type: The self-service resource type. + :type type: AppSelfServiceType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_self_service_request_data_attributes.py b/datadog_api_client/v2/model/update_app_self_service_request_data_attributes.py new file mode 100644 index 0000000000..32564bfa3e --- /dev/null +++ b/datadog_api_client/v2/model/update_app_self_service_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateAppSelfServiceRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "self_service": (bool,), + } + attribute_map = { + "self_service": "selfService", + } + + def __init__(self_, self_service: bool, **kwargs): + """ + Attributes for updating an app's self-service status. + + :param self_service: Whether the app is enabled for self-service. + :type self_service: bool + """ + super().__init__(kwargs) + + + self_.self_service = self_service diff --git a/datadog_api_client/v2/model/update_app_tags_request.py b/datadog_api_client/v2/model/update_app_tags_request.py new file mode 100644 index 0000000000..2692d22fb2 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_tags_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_tags_request_data import UpdateAppTagsRequestData + +class UpdateAppTagsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_tags_request_data import UpdateAppTagsRequestData + return { + "data": (UpdateAppTagsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateAppTagsRequestData, UnsetType]=unset, **kwargs): + """ + A request to replace the tags on an app. + + :param data: Data for replacing an app's tags. + :type data: UpdateAppTagsRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_tags_request_data.py b/datadog_api_client/v2/model/update_app_tags_request_data.py new file mode 100644 index 0000000000..063a164447 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_tags_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_tags_request_data_attributes import UpdateAppTagsRequestDataAttributes + from datadog_api_client.v2.model.app_tags_type import AppTagsType + +class UpdateAppTagsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_tags_request_data_attributes import UpdateAppTagsRequestDataAttributes + from datadog_api_client.v2.model.app_tags_type import AppTagsType + return { + "attributes": (UpdateAppTagsRequestDataAttributes,), + "type": (AppTagsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[UpdateAppTagsRequestDataAttributes, UnsetType]=unset, type: Union[AppTagsType, UnsetType]=unset, **kwargs): + """ + Data for replacing an app's tags. + + :param attributes: Attributes for replacing an app's tags. + :type attributes: UpdateAppTagsRequestDataAttributes, optional + + :param type: The tags resource type. + :type type: AppTagsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_tags_request_data_attributes.py b/datadog_api_client/v2/model/update_app_tags_request_data_attributes.py new file mode 100644 index 0000000000..c1db6b0f54 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_tags_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateAppTagsRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "tags": ([str],), + } + attribute_map = { + "tags": "tags", + } + + def __init__(self_, tags: List[str], **kwargs): + """ + Attributes for replacing an app's tags. + + :param tags: The full list of tags that should be set on the app. Existing tags not present in this list are removed. + :type tags: [str] + """ + super().__init__(kwargs) + + + self_.tags = tags diff --git a/datadog_api_client/v2/model/update_app_version_name_request.py b/datadog_api_client/v2/model/update_app_version_name_request.py new file mode 100644 index 0000000000..de06d28f80 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_version_name_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_version_name_request_data import UpdateAppVersionNameRequestData + +class UpdateAppVersionNameRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_version_name_request_data import UpdateAppVersionNameRequestData + return { + "data": (UpdateAppVersionNameRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateAppVersionNameRequestData, UnsetType]=unset, **kwargs): + """ + A request to assign a human-readable name to a specific app version. + + :param data: Data for naming a specific app version. + :type data: UpdateAppVersionNameRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_version_name_request_data.py b/datadog_api_client/v2/model/update_app_version_name_request_data.py new file mode 100644 index 0000000000..57f48478c0 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_version_name_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_app_version_name_request_data_attributes import UpdateAppVersionNameRequestDataAttributes + from datadog_api_client.v2.model.app_version_name_type import AppVersionNameType + +class UpdateAppVersionNameRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_app_version_name_request_data_attributes import UpdateAppVersionNameRequestDataAttributes + from datadog_api_client.v2.model.app_version_name_type import AppVersionNameType + return { + "attributes": (UpdateAppVersionNameRequestDataAttributes,), + "type": (AppVersionNameType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[UpdateAppVersionNameRequestDataAttributes, UnsetType]=unset, type: Union[AppVersionNameType, UnsetType]=unset, **kwargs): + """ + Data for naming a specific app version. + + :param attributes: Attributes for naming a specific app version. + :type attributes: UpdateAppVersionNameRequestDataAttributes, optional + + :param type: The version-name resource type. + :type type: AppVersionNameType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_app_version_name_request_data_attributes.py b/datadog_api_client/v2/model/update_app_version_name_request_data_attributes.py new file mode 100644 index 0000000000..ba2d127240 --- /dev/null +++ b/datadog_api_client/v2/model/update_app_version_name_request_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateAppVersionNameRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + } + attribute_map = { + "name": "name", + } + + def __init__(self_, name: str, **kwargs): + """ + Attributes for naming a specific app version. + + :param name: The name to assign to the app version. + :type name: str + """ + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/update_apps_datastore_item_request.py b/datadog_api_client/v2/model/update_apps_datastore_item_request.py new file mode 100644 index 0000000000..c04c16ee81 --- /dev/null +++ b/datadog_api_client/v2/model/update_apps_datastore_item_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_apps_datastore_item_request_data import UpdateAppsDatastoreItemRequestData + +class UpdateAppsDatastoreItemRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_apps_datastore_item_request_data import UpdateAppsDatastoreItemRequestData + return { + "data": (UpdateAppsDatastoreItemRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateAppsDatastoreItemRequestData, UnsetType]=unset, **kwargs): + """ + Request to update specific fields on an existing datastore item. + + :param data: Data wrapper containing the item identifier and the changes to apply during the update operation. + :type data: UpdateAppsDatastoreItemRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_apps_datastore_item_request_data.py b/datadog_api_client/v2/model/update_apps_datastore_item_request_data.py new file mode 100644 index 0000000000..32c1b2ba3f --- /dev/null +++ b/datadog_api_client/v2/model/update_apps_datastore_item_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_apps_datastore_item_request_data_attributes import UpdateAppsDatastoreItemRequestDataAttributes + from datadog_api_client.v2.model.update_apps_datastore_item_request_data_type import UpdateAppsDatastoreItemRequestDataType + +class UpdateAppsDatastoreItemRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_apps_datastore_item_request_data_attributes import UpdateAppsDatastoreItemRequestDataAttributes + from datadog_api_client.v2.model.update_apps_datastore_item_request_data_type import UpdateAppsDatastoreItemRequestDataType + return { + "attributes": (UpdateAppsDatastoreItemRequestDataAttributes,), + "id": (str,), + "type": (UpdateAppsDatastoreItemRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: UpdateAppsDatastoreItemRequestDataType, attributes: Union[UpdateAppsDatastoreItemRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data wrapper containing the item identifier and the changes to apply during the update operation. + + :param attributes: Attributes for updating a datastore item, including the item key and changes to apply. + :type attributes: UpdateAppsDatastoreItemRequestDataAttributes, optional + + :param id: The unique identifier of the datastore item. + :type id: str, optional + + :param type: The resource type for datastore items. + :type type: UpdateAppsDatastoreItemRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/update_apps_datastore_item_request_data_attributes.py b/datadog_api_client/v2/model/update_apps_datastore_item_request_data_attributes.py new file mode 100644 index 0000000000..14d97f42b1 --- /dev/null +++ b/datadog_api_client/v2/model/update_apps_datastore_item_request_data_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_apps_datastore_item_request_data_attributes_item_changes import UpdateAppsDatastoreItemRequestDataAttributesItemChanges + +class UpdateAppsDatastoreItemRequestDataAttributes(ModelNormal): + validations = { + "item_key": { + "max_length": 256, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_apps_datastore_item_request_data_attributes_item_changes import UpdateAppsDatastoreItemRequestDataAttributesItemChanges + return { + "id": (str,), + "item_changes": (UpdateAppsDatastoreItemRequestDataAttributesItemChanges,), + "item_key": (str,), + } + attribute_map = { + "id": "id", + "item_changes": "item_changes", + "item_key": "item_key", + } + + def __init__(self_, item_changes: UpdateAppsDatastoreItemRequestDataAttributesItemChanges, item_key: str, id: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating a datastore item, including the item key and changes to apply. + + :param id: The unique identifier of the item being updated. + :type id: str, optional + + :param item_changes: Changes to apply to a datastore item using set operations. + :type item_changes: UpdateAppsDatastoreItemRequestDataAttributesItemChanges + + :param item_key: The primary key that identifies the item to update. Cannot exceed 256 characters. + :type item_key: str + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.item_changes = item_changes + self_.item_key = item_key diff --git a/datadog_api_client/v2/model/update_apps_datastore_item_request_data_attributes_item_changes.py b/datadog_api_client/v2/model/update_apps_datastore_item_request_data_attributes_item_changes.py new file mode 100644 index 0000000000..1119d1347a --- /dev/null +++ b/datadog_api_client/v2/model/update_apps_datastore_item_request_data_attributes_item_changes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateAppsDatastoreItemRequestDataAttributesItemChanges(ModelNormal): + @cached_property + def openapi_types(_): + return { + "ops_set": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "ops_set": "ops_set", + } + + def __init__(self_, ops_set: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + Changes to apply to a datastore item using set operations. + + :param ops_set: Set operation that contains key-value pairs to set on the datastore item. + :type ops_set: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + """ + if ops_set is not unset: + kwargs["ops_set"] = ops_set + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_apps_datastore_item_request_data_type.py b/datadog_api_client/v2/model/update_apps_datastore_item_request_data_type.py new file mode 100644 index 0000000000..9fba40088c --- /dev/null +++ b/datadog_api_client/v2/model/update_apps_datastore_item_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateAppsDatastoreItemRequestDataType(ModelSimple): + """ + The resource type for datastore items. + + :param value: If omitted defaults to "items". Must be one of ["items"]. + :type value: str + """ + + allowed_values = { + "items", + } + ITEMS: ClassVar["UpdateAppsDatastoreItemRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateAppsDatastoreItemRequestDataType.ITEMS = UpdateAppsDatastoreItemRequestDataType("items") diff --git a/datadog_api_client/v2/model/update_apps_datastore_request.py b/datadog_api_client/v2/model/update_apps_datastore_request.py new file mode 100644 index 0000000000..c9c05afeb7 --- /dev/null +++ b/datadog_api_client/v2/model/update_apps_datastore_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_apps_datastore_request_data import UpdateAppsDatastoreRequestData + +class UpdateAppsDatastoreRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_apps_datastore_request_data import UpdateAppsDatastoreRequestData + return { + "data": (UpdateAppsDatastoreRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateAppsDatastoreRequestData, UnsetType]=unset, **kwargs): + """ + Request to update a datastore's configuration such as its name or description. + + :param data: Data wrapper containing the datastore identifier and the attributes to update. + :type data: UpdateAppsDatastoreRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_apps_datastore_request_data.py b/datadog_api_client/v2/model/update_apps_datastore_request_data.py new file mode 100644 index 0000000000..51dd2fde84 --- /dev/null +++ b/datadog_api_client/v2/model/update_apps_datastore_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_apps_datastore_request_data_attributes import UpdateAppsDatastoreRequestDataAttributes + from datadog_api_client.v2.model.datastore_data_type import DatastoreDataType + +class UpdateAppsDatastoreRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_apps_datastore_request_data_attributes import UpdateAppsDatastoreRequestDataAttributes + from datadog_api_client.v2.model.datastore_data_type import DatastoreDataType + return { + "attributes": (UpdateAppsDatastoreRequestDataAttributes,), + "id": (str,), + "type": (DatastoreDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: DatastoreDataType, attributes: Union[UpdateAppsDatastoreRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data wrapper containing the datastore identifier and the attributes to update. + + :param attributes: Attributes that can be updated on a datastore. + :type attributes: UpdateAppsDatastoreRequestDataAttributes, optional + + :param id: The unique identifier of the datastore to update. + :type id: str, optional + + :param type: The resource type for datastores. + :type type: DatastoreDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/update_apps_datastore_request_data_attributes.py b/datadog_api_client/v2/model/update_apps_datastore_request_data_attributes.py new file mode 100644 index 0000000000..1febc7fecb --- /dev/null +++ b/datadog_api_client/v2/model/update_apps_datastore_request_data_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateAppsDatastoreRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "name": (str,), + } + attribute_map = { + "description": "description", + "name": "name", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes that can be updated on a datastore. + + :param description: A human-readable description about the datastore. + :type description: str, optional + + :param name: The display name of the datastore. + :type name: str, optional + """ + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_campaign_request.py b/datadog_api_client/v2/model/update_campaign_request.py new file mode 100644 index 0000000000..a1d8baf17c --- /dev/null +++ b/datadog_api_client/v2/model/update_campaign_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_campaign_request_data import UpdateCampaignRequestData + +class UpdateCampaignRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_campaign_request_data import UpdateCampaignRequestData + return { + "data": (UpdateCampaignRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateCampaignRequestData, **kwargs): + """ + Request to update a campaign. + + :param data: Data for updating a campaign. + :type data: UpdateCampaignRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_campaign_request_attributes.py b/datadog_api_client/v2/model/update_campaign_request_attributes.py new file mode 100644 index 0000000000..b516a2dc8a --- /dev/null +++ b/datadog_api_client/v2/model/update_campaign_request_attributes.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateCampaignRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "due_date": (datetime,), + "entity_scope": (str,), + "guidance": (str,), + "key": (str,), + "name": (str,), + "owner_id": (str,), + "rule_ids": ([str],), + "start_date": (datetime,), + "status": (str,), + } + attribute_map = { + "description": "description", + "due_date": "due_date", + "entity_scope": "entity_scope", + "guidance": "guidance", + "key": "key", + "name": "name", + "owner_id": "owner_id", + "rule_ids": "rule_ids", + "start_date": "start_date", + "status": "status", + } + + def __init__(self_, name: str, owner_id: str, rule_ids: List[str], start_date: datetime, status: str, description: Union[str, UnsetType]=unset, due_date: Union[datetime, UnsetType]=unset, entity_scope: Union[str, UnsetType]=unset, guidance: Union[str, UnsetType]=unset, key: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating a campaign. + + :param description: The description of the campaign. + :type description: str, optional + + :param due_date: The due date of the campaign. + :type due_date: datetime, optional + + :param entity_scope: Entity scope query to filter entities for this campaign. + :type entity_scope: str, optional + + :param guidance: Guidance for the campaign. + :type guidance: str, optional + + :param key: The unique key for the campaign. + :type key: str, optional + + :param name: The name of the campaign. + :type name: str + + :param owner_id: The UUID of the campaign owner. + :type owner_id: str + + :param rule_ids: Array of rule IDs associated with this campaign. + :type rule_ids: [str] + + :param start_date: The start date of the campaign. + :type start_date: datetime + + :param status: The status of the campaign. + :type status: str + """ + if description is not unset: + kwargs["description"] = description + if due_date is not unset: + kwargs["due_date"] = due_date + if entity_scope is not unset: + kwargs["entity_scope"] = entity_scope + if guidance is not unset: + kwargs["guidance"] = guidance + if key is not unset: + kwargs["key"] = key + super().__init__(kwargs) + + + self_.name = name + self_.owner_id = owner_id + self_.rule_ids = rule_ids + self_.start_date = start_date + self_.status = status diff --git a/datadog_api_client/v2/model/update_campaign_request_data.py b/datadog_api_client/v2/model/update_campaign_request_data.py new file mode 100644 index 0000000000..a4f99912d3 --- /dev/null +++ b/datadog_api_client/v2/model/update_campaign_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_campaign_request_attributes import UpdateCampaignRequestAttributes + from datadog_api_client.v2.model.campaign_type import CampaignType + +class UpdateCampaignRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_campaign_request_attributes import UpdateCampaignRequestAttributes + from datadog_api_client.v2.model.campaign_type import CampaignType + return { + "attributes": (UpdateCampaignRequestAttributes,), + "type": (CampaignType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: UpdateCampaignRequestAttributes, type: CampaignType, **kwargs): + """ + Data for updating a campaign. + + :param attributes: Attributes for updating a campaign. + :type attributes: UpdateCampaignRequestAttributes + + :param type: The JSON:API type for campaigns. + :type type: CampaignType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/update_connection_request.py b/datadog_api_client/v2/model/update_connection_request.py new file mode 100644 index 0000000000..caf972bd1b --- /dev/null +++ b/datadog_api_client/v2/model/update_connection_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_connection_request_data import UpdateConnectionRequestData + +class UpdateConnectionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_connection_request_data import UpdateConnectionRequestData + return { + "data": (UpdateConnectionRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateConnectionRequestData, UnsetType]=unset, **kwargs): + """ + Request body for updating an existing data source connection by adding, modifying, or removing fields. + + :param data: The data object containing the resource identifier and attributes for updating an existing connection. + :type data: UpdateConnectionRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_connection_request_data.py b/datadog_api_client/v2/model/update_connection_request_data.py new file mode 100644 index 0000000000..b363329216 --- /dev/null +++ b/datadog_api_client/v2/model/update_connection_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_connection_request_data_attributes import UpdateConnectionRequestDataAttributes + from datadog_api_client.v2.model.update_connection_request_data_type import UpdateConnectionRequestDataType + +class UpdateConnectionRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_connection_request_data_attributes import UpdateConnectionRequestDataAttributes + from datadog_api_client.v2.model.update_connection_request_data_type import UpdateConnectionRequestDataType + return { + "attributes": (UpdateConnectionRequestDataAttributes,), + "id": (str,), + "type": (UpdateConnectionRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UpdateConnectionRequestDataType, attributes: Union[UpdateConnectionRequestDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object containing the resource identifier and attributes for updating an existing connection. + + :param attributes: Attributes specifying the field modifications to apply to an existing connection. + :type attributes: UpdateConnectionRequestDataAttributes, optional + + :param id: The unique identifier of the connection to update. + :type id: str + + :param type: Connection id resource type. + :type type: UpdateConnectionRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/update_connection_request_data_attributes.py b/datadog_api_client/v2/model/update_connection_request_data_attributes.py new file mode 100644 index 0000000000..535a81504b --- /dev/null +++ b/datadog_api_client/v2/model/update_connection_request_data_attributes.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.create_connection_request_data_attributes_fields_items import CreateConnectionRequestDataAttributesFieldsItems + from datadog_api_client.v2.model.update_connection_request_data_attributes_fields_to_update_items import UpdateConnectionRequestDataAttributesFieldsToUpdateItems + +class UpdateConnectionRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.create_connection_request_data_attributes_fields_items import CreateConnectionRequestDataAttributesFieldsItems + from datadog_api_client.v2.model.update_connection_request_data_attributes_fields_to_update_items import UpdateConnectionRequestDataAttributesFieldsToUpdateItems + return { + "fields_to_add": ([CreateConnectionRequestDataAttributesFieldsItems],), + "fields_to_delete": ([str],), + "fields_to_update": ([UpdateConnectionRequestDataAttributesFieldsToUpdateItems],), + } + attribute_map = { + "fields_to_add": "fields_to_add", + "fields_to_delete": "fields_to_delete", + "fields_to_update": "fields_to_update", + } + + def __init__(self_, fields_to_add: Union[List[CreateConnectionRequestDataAttributesFieldsItems], UnsetType]=unset, fields_to_delete: Union[List[str], UnsetType]=unset, fields_to_update: Union[List[UpdateConnectionRequestDataAttributesFieldsToUpdateItems], UnsetType]=unset, **kwargs): + """ + Attributes specifying the field modifications to apply to an existing connection. + + :param fields_to_add: New fields to add to the connection from the data source. + :type fields_to_add: [CreateConnectionRequestDataAttributesFieldsItems], optional + + :param fields_to_delete: Identifiers of existing fields to remove from the connection. + :type fields_to_delete: [str], optional + + :param fields_to_update: Existing fields with updated metadata to apply to the connection. + :type fields_to_update: [UpdateConnectionRequestDataAttributesFieldsToUpdateItems], optional + """ + if fields_to_add is not unset: + kwargs["fields_to_add"] = fields_to_add + if fields_to_delete is not unset: + kwargs["fields_to_delete"] = fields_to_delete + if fields_to_update is not unset: + kwargs["fields_to_update"] = fields_to_update + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_connection_request_data_attributes_fields_to_update_items.py b/datadog_api_client/v2/model/update_connection_request_data_attributes_fields_to_update_items.py new file mode 100644 index 0000000000..68c4ee1743 --- /dev/null +++ b/datadog_api_client/v2/model/update_connection_request_data_attributes_fields_to_update_items.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateConnectionRequestDataAttributesFieldsToUpdateItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "field_id": (str,), + "updated_description": (str,), + "updated_display_name": (str,), + "updated_field_id": (str,), + "updated_groups": ([str],), + } + attribute_map = { + "field_id": "field_id", + "updated_description": "updated_description", + "updated_display_name": "updated_display_name", + "updated_field_id": "updated_field_id", + "updated_groups": "updated_groups", + } + + def __init__(self_, field_id: str, updated_description: Union[str, UnsetType]=unset, updated_display_name: Union[str, UnsetType]=unset, updated_field_id: Union[str, UnsetType]=unset, updated_groups: Union[List[str], UnsetType]=unset, **kwargs): + """ + Specification for updating an existing field in a connection, including which field to modify and the new values. + + :param field_id: The identifier of the existing field to update. + :type field_id: str + + :param updated_description: The new description to set for the field. + :type updated_description: str, optional + + :param updated_display_name: The new human-readable display name to set for the field. + :type updated_display_name: str, optional + + :param updated_field_id: The new identifier to assign to the field, if renaming it. + :type updated_field_id: str, optional + + :param updated_groups: The updated list of group labels to associate with the field. + :type updated_groups: [str], optional + """ + if updated_description is not unset: + kwargs["updated_description"] = updated_description + if updated_display_name is not unset: + kwargs["updated_display_name"] = updated_display_name + if updated_field_id is not unset: + kwargs["updated_field_id"] = updated_field_id + if updated_groups is not unset: + kwargs["updated_groups"] = updated_groups + super().__init__(kwargs) + + + self_.field_id = field_id diff --git a/datadog_api_client/v2/model/update_connection_request_data_type.py b/datadog_api_client/v2/model/update_connection_request_data_type.py new file mode 100644 index 0000000000..b828b074d1 --- /dev/null +++ b/datadog_api_client/v2/model/update_connection_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateConnectionRequestDataType(ModelSimple): + """ + Connection id resource type. + + :param value: If omitted defaults to "connection_id". Must be one of ["connection_id"]. + :type value: str + """ + + allowed_values = { + "connection_id", + } + CONNECTION_ID: ClassVar["UpdateConnectionRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateConnectionRequestDataType.CONNECTION_ID = UpdateConnectionRequestDataType("connection_id") diff --git a/datadog_api_client/v2/model/update_custom_framework_request.py b/datadog_api_client/v2/model/update_custom_framework_request.py new file mode 100644 index 0000000000..6245f55d95 --- /dev/null +++ b/datadog_api_client/v2/model/update_custom_framework_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.custom_framework_data import CustomFrameworkData + +class UpdateCustomFrameworkRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.custom_framework_data import CustomFrameworkData + return { + "data": (CustomFrameworkData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: CustomFrameworkData, **kwargs): + """ + Request object to update a custom framework. + + :param data: Contains type and attributes for custom frameworks. + :type data: CustomFrameworkData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_custom_framework_response.py b/datadog_api_client/v2/model/update_custom_framework_response.py new file mode 100644 index 0000000000..3131f58f82 --- /dev/null +++ b/datadog_api_client/v2/model/update_custom_framework_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.framework_handle_and_version_response_data import FrameworkHandleAndVersionResponseData + +class UpdateCustomFrameworkResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.framework_handle_and_version_response_data import FrameworkHandleAndVersionResponseData + return { + "data": (FrameworkHandleAndVersionResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: FrameworkHandleAndVersionResponseData, **kwargs): + """ + Response object to update a custom framework. + + :param data: Contains type and attributes for custom frameworks. + :type data: FrameworkHandleAndVersionResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_deployment_gate_params.py b/datadog_api_client/v2/model/update_deployment_gate_params.py new file mode 100644 index 0000000000..25d899091f --- /dev/null +++ b/datadog_api_client/v2/model/update_deployment_gate_params.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_deployment_gate_params_data import UpdateDeploymentGateParamsData + +class UpdateDeploymentGateParams(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_deployment_gate_params_data import UpdateDeploymentGateParamsData + return { + "data": (UpdateDeploymentGateParamsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateDeploymentGateParamsData, **kwargs): + """ + Parameters for updating a deployment gate. + + :param data: Parameters for updating a deployment gate. + :type data: UpdateDeploymentGateParamsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_deployment_gate_params_data.py b/datadog_api_client/v2/model/update_deployment_gate_params_data.py new file mode 100644 index 0000000000..f3df587e23 --- /dev/null +++ b/datadog_api_client/v2/model/update_deployment_gate_params_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_deployment_gate_params_data_attributes import UpdateDeploymentGateParamsDataAttributes + from datadog_api_client.v2.model.deployment_gate_data_type import DeploymentGateDataType + +class UpdateDeploymentGateParamsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_deployment_gate_params_data_attributes import UpdateDeploymentGateParamsDataAttributes + from datadog_api_client.v2.model.deployment_gate_data_type import DeploymentGateDataType + return { + "attributes": (UpdateDeploymentGateParamsDataAttributes,), + "id": (str,), + "type": (DeploymentGateDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: UpdateDeploymentGateParamsDataAttributes, id: str, type: DeploymentGateDataType, **kwargs): + """ + Parameters for updating a deployment gate. + + :param attributes: Attributes for updating a deployment gate. + :type attributes: UpdateDeploymentGateParamsDataAttributes + + :param id: Unique identifier of the deployment gate. + :type id: str + + :param type: Deployment gate resource type. + :type type: DeploymentGateDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/update_deployment_gate_params_data_attributes.py b/datadog_api_client/v2/model/update_deployment_gate_params_data_attributes.py new file mode 100644 index 0000000000..50255de81f --- /dev/null +++ b/datadog_api_client/v2/model/update_deployment_gate_params_data_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateDeploymentGateParamsDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "dry_run": (bool,), + } + attribute_map = { + "dry_run": "dry_run", + } + + def __init__(self_, dry_run: bool, **kwargs): + """ + Attributes for updating a deployment gate. + + :param dry_run: Whether to run in dry-run mode. + :type dry_run: bool + """ + super().__init__(kwargs) + + + self_.dry_run = dry_run diff --git a/datadog_api_client/v2/model/update_deployment_rule_params.py b/datadog_api_client/v2/model/update_deployment_rule_params.py new file mode 100644 index 0000000000..f28865f7dd --- /dev/null +++ b/datadog_api_client/v2/model/update_deployment_rule_params.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_deployment_rule_params_data import UpdateDeploymentRuleParamsData + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class UpdateDeploymentRuleParams(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_deployment_rule_params_data import UpdateDeploymentRuleParamsData + return { + "data": (UpdateDeploymentRuleParamsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateDeploymentRuleParamsData, **kwargs): + """ + Parameters for updating a deployment rule. + + :param data: Parameters for updating a deployment rule. + :type data: UpdateDeploymentRuleParamsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_deployment_rule_params_data.py b/datadog_api_client/v2/model/update_deployment_rule_params_data.py new file mode 100644 index 0000000000..e43fefc57b --- /dev/null +++ b/datadog_api_client/v2/model/update_deployment_rule_params_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_deployment_rule_params_data_attributes import UpdateDeploymentRuleParamsDataAttributes + from datadog_api_client.v2.model.deployment_rule_data_type import DeploymentRuleDataType + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class UpdateDeploymentRuleParamsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_deployment_rule_params_data_attributes import UpdateDeploymentRuleParamsDataAttributes + from datadog_api_client.v2.model.deployment_rule_data_type import DeploymentRuleDataType + return { + "attributes": (UpdateDeploymentRuleParamsDataAttributes,), + "type": (DeploymentRuleDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: UpdateDeploymentRuleParamsDataAttributes, type: DeploymentRuleDataType, **kwargs): + """ + Parameters for updating a deployment rule. + + :param attributes: Parameters for updating a deployment rule. + :type attributes: UpdateDeploymentRuleParamsDataAttributes + + :param type: Deployment rule resource type. + :type type: DeploymentRuleDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/update_deployment_rule_params_data_attributes.py b/datadog_api_client/v2/model/update_deployment_rule_params_data_attributes.py new file mode 100644 index 0000000000..3868892bc7 --- /dev/null +++ b/datadog_api_client/v2/model/update_deployment_rule_params_data_attributes.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.deployment_rules_options import DeploymentRulesOptions + from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection + from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor + +class UpdateDeploymentRuleParamsDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.deployment_rules_options import DeploymentRulesOptions + return { + "dry_run": (bool,), + "name": (str,), + "options": (DeploymentRulesOptions,), + } + attribute_map = { + "dry_run": "dry_run", + "name": "name", + "options": "options", + } + + def __init__(self_, dry_run: bool, name: str, options: Union[DeploymentRulesOptions, DeploymentRuleOptionsFaultyDeploymentDetection, DeploymentRuleOptionsMonitor], **kwargs): + """ + Parameters for updating a deployment rule. + + :param dry_run: Whether to run this rule in dry-run mode. + :type dry_run: bool + + :param name: The name of the deployment rule. + :type name: str + + :param options: Options for deployment rule response representing either faulty deployment detection or monitor options. + :type options: DeploymentRulesOptions + """ + super().__init__(kwargs) + + + self_.dry_run = dry_run + self_.name = name + self_.options = options diff --git a/datadog_api_client/v2/model/update_environment_attributes.py b/datadog_api_client/v2/model/update_environment_attributes.py new file mode 100644 index 0000000000..c26175aa99 --- /dev/null +++ b/datadog_api_client/v2/model/update_environment_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateEnvironmentAttributes(ModelNormal): + validations = { + "queries": { + "min_items": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "is_production": (bool,), + "name": (str,), + "queries": ([str],), + "require_feature_flag_approval": (bool,), + } + attribute_map = { + "is_production": "is_production", + "name": "name", + "queries": "queries", + "require_feature_flag_approval": "require_feature_flag_approval", + } + + def __init__(self_, is_production: Union[bool, UnsetType]=unset, name: Union[str, UnsetType]=unset, queries: Union[List[str], UnsetType]=unset, require_feature_flag_approval: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes for updating an environment. + + :param is_production: Indicates whether this is a production environment. + :type is_production: bool, optional + + :param name: The name of the environment. + :type name: str, optional + + :param queries: List of queries to define the environment scope. + :type queries: [str], optional + + :param require_feature_flag_approval: Indicates whether feature flag changes require approval in this environment. + :type require_feature_flag_approval: bool, optional + """ + if is_production is not unset: + kwargs["is_production"] = is_production + if name is not unset: + kwargs["name"] = name + if queries is not unset: + kwargs["queries"] = queries + if require_feature_flag_approval is not unset: + kwargs["require_feature_flag_approval"] = require_feature_flag_approval + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_environment_data.py b/datadog_api_client/v2/model/update_environment_data.py new file mode 100644 index 0000000000..70cff983dc --- /dev/null +++ b/datadog_api_client/v2/model/update_environment_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_environment_attributes import UpdateEnvironmentAttributes + from datadog_api_client.v2.model.update_environment_data_type import UpdateEnvironmentDataType + +class UpdateEnvironmentData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_environment_attributes import UpdateEnvironmentAttributes + from datadog_api_client.v2.model.update_environment_data_type import UpdateEnvironmentDataType + return { + "attributes": (UpdateEnvironmentAttributes,), + "type": (UpdateEnvironmentDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: UpdateEnvironmentAttributes, type: UpdateEnvironmentDataType, **kwargs): + """ + Data for updating an environment. + + :param attributes: Attributes for updating an environment. + :type attributes: UpdateEnvironmentAttributes + + :param type: The resource type. + :type type: UpdateEnvironmentDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/update_environment_data_type.py b/datadog_api_client/v2/model/update_environment_data_type.py new file mode 100644 index 0000000000..667f5e36b3 --- /dev/null +++ b/datadog_api_client/v2/model/update_environment_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateEnvironmentDataType(ModelSimple): + """ + The resource type. + + :param value: If omitted defaults to "environments". Must be one of ["environments"]. + :type value: str + """ + + allowed_values = { + "environments", + } + ENVIRONMENTS: ClassVar["UpdateEnvironmentDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateEnvironmentDataType.ENVIRONMENTS = UpdateEnvironmentDataType("environments") diff --git a/datadog_api_client/v2/model/update_environment_request.py b/datadog_api_client/v2/model/update_environment_request.py new file mode 100644 index 0000000000..f7e92380cb --- /dev/null +++ b/datadog_api_client/v2/model/update_environment_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_environment_data import UpdateEnvironmentData + +class UpdateEnvironmentRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_environment_data import UpdateEnvironmentData + return { + "data": (UpdateEnvironmentData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateEnvironmentData, **kwargs): + """ + Request to update an environment. + + :param data: Data for updating an environment. + :type data: UpdateEnvironmentData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_feature_flag_attributes.py b/datadog_api_client/v2/model/update_feature_flag_attributes.py new file mode 100644 index 0000000000..780686b9ff --- /dev/null +++ b/datadog_api_client/v2/model/update_feature_flag_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateFeatureFlagAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "description": (str,), + "json_schema": (str, none_type), + "name": (str,), + } + attribute_map = { + "description": "description", + "json_schema": "json_schema", + "name": "name", + } + + def __init__(self_, description: Union[str, UnsetType]=unset, json_schema: Union[str, none_type, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating a feature flag. + + :param description: The description of the feature flag. + :type description: str, optional + + :param json_schema: JSON schema for validation when value_type is JSON. + :type json_schema: str, none_type, optional + + :param name: The name of the feature flag. + :type name: str, optional + """ + if description is not unset: + kwargs["description"] = description + if json_schema is not unset: + kwargs["json_schema"] = json_schema + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_feature_flag_data.py b/datadog_api_client/v2/model/update_feature_flag_data.py new file mode 100644 index 0000000000..8cdd0d6cb1 --- /dev/null +++ b/datadog_api_client/v2/model/update_feature_flag_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_feature_flag_attributes import UpdateFeatureFlagAttributes + from datadog_api_client.v2.model.update_feature_flag_data_type import UpdateFeatureFlagDataType + +class UpdateFeatureFlagData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_feature_flag_attributes import UpdateFeatureFlagAttributes + from datadog_api_client.v2.model.update_feature_flag_data_type import UpdateFeatureFlagDataType + return { + "attributes": (UpdateFeatureFlagAttributes,), + "type": (UpdateFeatureFlagDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: UpdateFeatureFlagAttributes, type: UpdateFeatureFlagDataType, **kwargs): + """ + Data for updating a feature flag. + + :param attributes: Attributes for updating a feature flag. + :type attributes: UpdateFeatureFlagAttributes + + :param type: The resource type. + :type type: UpdateFeatureFlagDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/update_feature_flag_data_type.py b/datadog_api_client/v2/model/update_feature_flag_data_type.py new file mode 100644 index 0000000000..feae7c020c --- /dev/null +++ b/datadog_api_client/v2/model/update_feature_flag_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateFeatureFlagDataType(ModelSimple): + """ + The resource type. + + :param value: If omitted defaults to "feature-flags". Must be one of ["feature-flags"]. + :type value: str + """ + + allowed_values = { + "feature-flags", + } + FEATURE_FLAGS: ClassVar["UpdateFeatureFlagDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateFeatureFlagDataType.FEATURE_FLAGS = UpdateFeatureFlagDataType("feature-flags") diff --git a/datadog_api_client/v2/model/update_feature_flag_request.py b/datadog_api_client/v2/model/update_feature_flag_request.py new file mode 100644 index 0000000000..af61996d98 --- /dev/null +++ b/datadog_api_client/v2/model/update_feature_flag_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_feature_flag_data import UpdateFeatureFlagData + +class UpdateFeatureFlagRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_feature_flag_data import UpdateFeatureFlagData + return { + "data": (UpdateFeatureFlagData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateFeatureFlagData, **kwargs): + """ + Request to update a feature flag. + + :param data: Data for updating a feature flag. + :type data: UpdateFeatureFlagData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_flaky_tests_request.py b/datadog_api_client/v2/model/update_flaky_tests_request.py new file mode 100644 index 0000000000..4bd9d83948 --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_flaky_tests_request_data import UpdateFlakyTestsRequestData + +class UpdateFlakyTestsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_flaky_tests_request_data import UpdateFlakyTestsRequestData + return { + "data": (UpdateFlakyTestsRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateFlakyTestsRequestData, **kwargs): + """ + Request to update the state of multiple flaky tests. + + :param data: The JSON:API data for updating flaky test states. + :type data: UpdateFlakyTestsRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_flaky_tests_request_attributes.py b/datadog_api_client/v2/model/update_flaky_tests_request_attributes.py new file mode 100644 index 0000000000..e63042591a --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_request_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_flaky_tests_request_test import UpdateFlakyTestsRequestTest + +class UpdateFlakyTestsRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_flaky_tests_request_test import UpdateFlakyTestsRequestTest + return { + "tests": ([UpdateFlakyTestsRequestTest],), + } + attribute_map = { + "tests": "tests", + } + + def __init__(self_, tests: List[UpdateFlakyTestsRequestTest], **kwargs): + """ + Attributes for updating flaky test states. + + :param tests: List of flaky tests to update. + :type tests: [UpdateFlakyTestsRequestTest] + """ + super().__init__(kwargs) + + + self_.tests = tests diff --git a/datadog_api_client/v2/model/update_flaky_tests_request_data.py b/datadog_api_client/v2/model/update_flaky_tests_request_data.py new file mode 100644 index 0000000000..83b7c8cc3f --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_flaky_tests_request_attributes import UpdateFlakyTestsRequestAttributes + from datadog_api_client.v2.model.update_flaky_tests_request_data_type import UpdateFlakyTestsRequestDataType + +class UpdateFlakyTestsRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_flaky_tests_request_attributes import UpdateFlakyTestsRequestAttributes + from datadog_api_client.v2.model.update_flaky_tests_request_data_type import UpdateFlakyTestsRequestDataType + return { + "attributes": (UpdateFlakyTestsRequestAttributes,), + "type": (UpdateFlakyTestsRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: UpdateFlakyTestsRequestAttributes, type: UpdateFlakyTestsRequestDataType, **kwargs): + """ + The JSON:API data for updating flaky test states. + + :param attributes: Attributes for updating flaky test states. + :type attributes: UpdateFlakyTestsRequestAttributes + + :param type: The definition of ``UpdateFlakyTestsRequestDataType`` object. + :type type: UpdateFlakyTestsRequestDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/update_flaky_tests_request_data_type.py b/datadog_api_client/v2/model/update_flaky_tests_request_data_type.py new file mode 100644 index 0000000000..25a9aa1313 --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateFlakyTestsRequestDataType(ModelSimple): + """ + The definition of `UpdateFlakyTestsRequestDataType` object. + + :param value: If omitted defaults to "update_flaky_test_state_request". Must be one of ["update_flaky_test_state_request"]. + :type value: str + """ + + allowed_values = { + "update_flaky_test_state_request", + } + UPDATE_FLAKY_TEST_STATE_REQUEST: ClassVar["UpdateFlakyTestsRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateFlakyTestsRequestDataType.UPDATE_FLAKY_TEST_STATE_REQUEST = UpdateFlakyTestsRequestDataType("update_flaky_test_state_request") diff --git a/datadog_api_client/v2/model/update_flaky_tests_request_test.py b/datadog_api_client/v2/model/update_flaky_tests_request_test.py new file mode 100644 index 0000000000..796db8a2c6 --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_request_test.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_flaky_tests_request_test_new_state import UpdateFlakyTestsRequestTestNewState + +class UpdateFlakyTestsRequestTest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_flaky_tests_request_test_new_state import UpdateFlakyTestsRequestTestNewState + return { + "id": (str,), + "new_state": (UpdateFlakyTestsRequestTestNewState,), + } + attribute_map = { + "id": "id", + "new_state": "new_state", + } + + def __init__(self_, id: str, new_state: UpdateFlakyTestsRequestTestNewState, **kwargs): + """ + Details of what tests to update and their new attributes. + + :param id: The ID of the flaky test. This is the same ID returned by the Search flaky tests endpoint and is the + value of the ``@test.fingerprint_fqn`` facet on test events. You can find it by searching on + ``@test.fingerprint_fqn`` in the Test Optimization Explorer, or by filtering the Search flaky tests + endpoint with the ``fingerprint_fqn`` key. + :type id: str + + :param new_state: The new state to set for the flaky test. + :type new_state: UpdateFlakyTestsRequestTestNewState + """ + super().__init__(kwargs) + + + self_.id = id + self_.new_state = new_state diff --git a/datadog_api_client/v2/model/update_flaky_tests_request_test_new_state.py b/datadog_api_client/v2/model/update_flaky_tests_request_test_new_state.py new file mode 100644 index 0000000000..baaff1bb1a --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_request_test_new_state.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateFlakyTestsRequestTestNewState(ModelSimple): + """ + The new state to set for the flaky test. + + :param value: Must be one of ["active", "quarantined", "disabled", "fixed"]. + :type value: str + """ + + allowed_values = { + "active", + "quarantined", + "disabled", + "fixed", + } + ACTIVE: ClassVar["UpdateFlakyTestsRequestTestNewState"] + QUARANTINED: ClassVar["UpdateFlakyTestsRequestTestNewState"] + DISABLED: ClassVar["UpdateFlakyTestsRequestTestNewState"] + FIXED: ClassVar["UpdateFlakyTestsRequestTestNewState"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateFlakyTestsRequestTestNewState.ACTIVE = UpdateFlakyTestsRequestTestNewState("active") +UpdateFlakyTestsRequestTestNewState.QUARANTINED = UpdateFlakyTestsRequestTestNewState("quarantined") +UpdateFlakyTestsRequestTestNewState.DISABLED = UpdateFlakyTestsRequestTestNewState("disabled") +UpdateFlakyTestsRequestTestNewState.FIXED = UpdateFlakyTestsRequestTestNewState("fixed") diff --git a/datadog_api_client/v2/model/update_flaky_tests_response.py b/datadog_api_client/v2/model/update_flaky_tests_response.py new file mode 100644 index 0000000000..a731dd5bde --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_flaky_tests_response_data import UpdateFlakyTestsResponseData + +class UpdateFlakyTestsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_flaky_tests_response_data import UpdateFlakyTestsResponseData + return { + "data": (UpdateFlakyTestsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateFlakyTestsResponseData, UnsetType]=unset, **kwargs): + """ + Response object for updating flaky test states. + + :param data: Summary of the update operations. Tells whether a test succeeded or failed to be updated. + :type data: UpdateFlakyTestsResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_flaky_tests_response_attributes.py b/datadog_api_client/v2/model/update_flaky_tests_response_attributes.py new file mode 100644 index 0000000000..2d1e527613 --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_response_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_flaky_tests_response_result import UpdateFlakyTestsResponseResult + +class UpdateFlakyTestsResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_flaky_tests_response_result import UpdateFlakyTestsResponseResult + return { + "has_errors": (bool,), + "results": ([UpdateFlakyTestsResponseResult],), + } + attribute_map = { + "has_errors": "has_errors", + "results": "results", + } + + def __init__(self_, has_errors: bool, results: List[UpdateFlakyTestsResponseResult], **kwargs): + """ + Attributes for the update flaky test state response. + + :param has_errors: ``True`` if any errors occurred during the update operations. ``False`` if all tests succeeded to be updated. + :type has_errors: bool + + :param results: Results of the update operation for each test. + :type results: [UpdateFlakyTestsResponseResult] + """ + super().__init__(kwargs) + + + self_.has_errors = has_errors + self_.results = results diff --git a/datadog_api_client/v2/model/update_flaky_tests_response_data.py b/datadog_api_client/v2/model/update_flaky_tests_response_data.py new file mode 100644 index 0000000000..494fabf229 --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_response_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_flaky_tests_response_attributes import UpdateFlakyTestsResponseAttributes + from datadog_api_client.v2.model.update_flaky_tests_response_data_type import UpdateFlakyTestsResponseDataType + +class UpdateFlakyTestsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_flaky_tests_response_attributes import UpdateFlakyTestsResponseAttributes + from datadog_api_client.v2.model.update_flaky_tests_response_data_type import UpdateFlakyTestsResponseDataType + return { + "attributes": (UpdateFlakyTestsResponseAttributes,), + "id": (str,), + "type": (UpdateFlakyTestsResponseDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[UpdateFlakyTestsResponseAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[UpdateFlakyTestsResponseDataType, UnsetType]=unset, **kwargs): + """ + Summary of the update operations. Tells whether a test succeeded or failed to be updated. + + :param attributes: Attributes for the update flaky test state response. + :type attributes: UpdateFlakyTestsResponseAttributes, optional + + :param id: The ID of the response. + :type id: str, optional + + :param type: The definition of ``UpdateFlakyTestsResponseDataType`` object. + :type type: UpdateFlakyTestsResponseDataType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_flaky_tests_response_data_type.py b/datadog_api_client/v2/model/update_flaky_tests_response_data_type.py new file mode 100644 index 0000000000..9871ea1aa0 --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_response_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateFlakyTestsResponseDataType(ModelSimple): + """ + The definition of `UpdateFlakyTestsResponseDataType` object. + + :param value: If omitted defaults to "update_flaky_test_state_response". Must be one of ["update_flaky_test_state_response"]. + :type value: str + """ + + allowed_values = { + "update_flaky_test_state_response", + } + UPDATE_FLAKY_TEST_STATE_RESPONSE: ClassVar["UpdateFlakyTestsResponseDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateFlakyTestsResponseDataType.UPDATE_FLAKY_TEST_STATE_RESPONSE = UpdateFlakyTestsResponseDataType("update_flaky_test_state_response") diff --git a/datadog_api_client/v2/model/update_flaky_tests_response_result.py b/datadog_api_client/v2/model/update_flaky_tests_response_result.py new file mode 100644 index 0000000000..53be557fdf --- /dev/null +++ b/datadog_api_client/v2/model/update_flaky_tests_response_result.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateFlakyTestsResponseResult(ModelNormal): + @cached_property + def openapi_types(_): + return { + "error": (str,), + "id": (str,), + "success": (bool,), + } + attribute_map = { + "error": "error", + "id": "id", + "success": "success", + } + + def __init__(self_, id: str, success: bool, error: Union[str, UnsetType]=unset, **kwargs): + """ + Result of updating a single flaky test state. + + :param error: Error message if the update failed. + :type error: str, optional + + :param id: The ID of the flaky test from the request. This is the value of the ``@test.fingerprint_fqn`` facet + on test events, the same ID accepted by the update request and returned by the Search flaky tests + endpoint. + :type id: str + + :param success: ``True`` if the update was successful, ``False`` if there were any errors. + :type success: bool + """ + if error is not unset: + kwargs["error"] = error + super().__init__(kwargs) + + + self_.id = id + self_.success = success diff --git a/datadog_api_client/v2/model/update_form_data.py b/datadog_api_client/v2/model/update_form_data.py new file mode 100644 index 0000000000..60b3df7b69 --- /dev/null +++ b/datadog_api_client/v2/model/update_form_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_form_data_attributes import UpdateFormDataAttributes + from datadog_api_client.v2.model.form_type import FormType + +class UpdateFormData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_form_data_attributes import UpdateFormDataAttributes + from datadog_api_client.v2.model.form_type import FormType + return { + "attributes": (UpdateFormDataAttributes,), + "id": (UUID,), + "type": (FormType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: UpdateFormDataAttributes, type: FormType, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + The data for updating a form. + + :param attributes: The attributes for updating a form. + :type attributes: UpdateFormDataAttributes + + :param id: The ID of the form. + :type id: UUID, optional + + :param type: The resource type for a form. + :type type: FormType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/update_form_data_attributes.py b/datadog_api_client/v2/model/update_form_data_attributes.py new file mode 100644 index 0000000000..760530a774 --- /dev/null +++ b/datadog_api_client/v2/model/update_form_data_attributes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_update_attributes import FormUpdateAttributes + +class UpdateFormDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_update_attributes import FormUpdateAttributes + return { + "form_update": (FormUpdateAttributes,), + } + attribute_map = { + "form_update": "form_update", + } + + def __init__(self_, form_update: FormUpdateAttributes, **kwargs): + """ + The attributes for updating a form. + + :param form_update: The fields to update on a form. At least one field must be provided. + :type form_update: FormUpdateAttributes + """ + super().__init__(kwargs) + + + self_.form_update = form_update diff --git a/datadog_api_client/v2/model/update_form_request.py b/datadog_api_client/v2/model/update_form_request.py new file mode 100644 index 0000000000..aecfba34c1 --- /dev/null +++ b/datadog_api_client/v2/model/update_form_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_form_data import UpdateFormData + +class UpdateFormRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_form_data import UpdateFormData + return { + "data": (UpdateFormData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateFormData, **kwargs): + """ + A request to update a form. + + :param data: The data for updating a form. + :type data: UpdateFormData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_on_call_notification_rule_request.py b/datadog_api_client/v2/model/update_on_call_notification_rule_request.py new file mode 100644 index 0000000000..434ddff8e1 --- /dev/null +++ b/datadog_api_client/v2/model/update_on_call_notification_rule_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_on_call_notification_rule_request_data import UpdateOnCallNotificationRuleRequestData + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + +class UpdateOnCallNotificationRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_on_call_notification_rule_request_data import UpdateOnCallNotificationRuleRequestData + return { + "data": (UpdateOnCallNotificationRuleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateOnCallNotificationRuleRequestData, **kwargs): + """ + A top-level wrapper for updating a notification rule for a user + + :param data: Data for updating an on-call notification rule + :type data: UpdateOnCallNotificationRuleRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_on_call_notification_rule_request_attributes.py b/datadog_api_client/v2/model/update_on_call_notification_rule_request_attributes.py new file mode 100644 index 0000000000..0074a055d2 --- /dev/null +++ b/datadog_api_client/v2/model/update_on_call_notification_rule_request_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.on_call_notification_rule_category import OnCallNotificationRuleCategory + from datadog_api_client.v2.model.on_call_notification_rule_channel_settings import OnCallNotificationRuleChannelSettings + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + +class UpdateOnCallNotificationRuleRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.on_call_notification_rule_category import OnCallNotificationRuleCategory + from datadog_api_client.v2.model.on_call_notification_rule_channel_settings import OnCallNotificationRuleChannelSettings + return { + "category": (OnCallNotificationRuleCategory,), + "channel_settings": (OnCallNotificationRuleChannelSettings,), + "delay_minutes": (int,), + } + attribute_map = { + "category": "category", + "channel_settings": "channel_settings", + "delay_minutes": "delay_minutes", + } + + def __init__(self_, category: Union[OnCallNotificationRuleCategory, UnsetType]=unset, channel_settings: Union[OnCallNotificationRuleChannelSettings, OnCallPhoneNotificationRuleSettings, UnsetType]=unset, delay_minutes: Union[int, UnsetType]=unset, **kwargs): + """ + Attributes for creating or modifying an on-call notification rule. + + :param category: Specifies the category a notification rule will apply to + :type category: OnCallNotificationRuleCategory, optional + + :param channel_settings: Defines the configuration for a channel associated with a notification rule + :type channel_settings: OnCallNotificationRuleChannelSettings, optional + + :param delay_minutes: The number of minutes that will elapse before this rule is evaluated. 0 indicates immediate evaluation + :type delay_minutes: int, optional + """ + if category is not unset: + kwargs["category"] = category + if channel_settings is not unset: + kwargs["channel_settings"] = channel_settings + if delay_minutes is not unset: + kwargs["delay_minutes"] = delay_minutes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_on_call_notification_rule_request_data.py b/datadog_api_client/v2/model/update_on_call_notification_rule_request_data.py new file mode 100644 index 0000000000..89841c2ab2 --- /dev/null +++ b/datadog_api_client/v2/model/update_on_call_notification_rule_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_on_call_notification_rule_request_attributes import UpdateOnCallNotificationRuleRequestAttributes + from datadog_api_client.v2.model.on_call_notification_rule_relationships import OnCallNotificationRuleRelationships + from datadog_api_client.v2.model.on_call_notification_rule_type import OnCallNotificationRuleType + from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings + +class UpdateOnCallNotificationRuleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_on_call_notification_rule_request_attributes import UpdateOnCallNotificationRuleRequestAttributes + from datadog_api_client.v2.model.on_call_notification_rule_relationships import OnCallNotificationRuleRelationships + from datadog_api_client.v2.model.on_call_notification_rule_type import OnCallNotificationRuleType + return { + "attributes": (UpdateOnCallNotificationRuleRequestAttributes,), + "id": (str,), + "relationships": (OnCallNotificationRuleRelationships,), + "type": (OnCallNotificationRuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: OnCallNotificationRuleType, attributes: Union[UpdateOnCallNotificationRuleRequestAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[OnCallNotificationRuleRelationships, UnsetType]=unset, **kwargs): + """ + Data for updating an on-call notification rule + + :param attributes: Attributes for creating or modifying an on-call notification rule. + :type attributes: UpdateOnCallNotificationRuleRequestAttributes, optional + + :param id: Unique identifier for the rule + :type id: str, optional + + :param relationships: Relationship object for creating a notification rule + :type relationships: OnCallNotificationRuleRelationships, optional + + :param type: Indicates that the resource is of type 'notification_rules'. + :type type: OnCallNotificationRuleType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/update_open_api_response.py b/datadog_api_client/v2/model/update_open_api_response.py new file mode 100644 index 0000000000..92535bae89 --- /dev/null +++ b/datadog_api_client/v2/model/update_open_api_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_open_api_response_data import UpdateOpenAPIResponseData + +class UpdateOpenAPIResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_open_api_response_data import UpdateOpenAPIResponseData + return { + "data": (UpdateOpenAPIResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateOpenAPIResponseData, UnsetType]=unset, **kwargs): + """ + Response for ``UpdateOpenAPI``. + + :param data: Data envelope for ``UpdateOpenAPIResponse``. + :type data: UpdateOpenAPIResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_open_api_response_attributes.py b/datadog_api_client/v2/model/update_open_api_response_attributes.py new file mode 100644 index 0000000000..f5e33952aa --- /dev/null +++ b/datadog_api_client/v2/model/update_open_api_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.open_api_endpoint import OpenAPIEndpoint + +class UpdateOpenAPIResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.open_api_endpoint import OpenAPIEndpoint + return { + "failed_endpoints": ([OpenAPIEndpoint],), + } + attribute_map = { + "failed_endpoints": "failed_endpoints", + } + + def __init__(self_, failed_endpoints: Union[List[OpenAPIEndpoint], UnsetType]=unset, **kwargs): + """ + Attributes for ``UpdateOpenAPI``. + + :param failed_endpoints: List of endpoints which couldn't be parsed. + :type failed_endpoints: [OpenAPIEndpoint], optional + """ + if failed_endpoints is not unset: + kwargs["failed_endpoints"] = failed_endpoints + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_open_api_response_data.py b/datadog_api_client/v2/model/update_open_api_response_data.py new file mode 100644 index 0000000000..e4c6c9a7b4 --- /dev/null +++ b/datadog_api_client/v2/model/update_open_api_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_open_api_response_attributes import UpdateOpenAPIResponseAttributes + +class UpdateOpenAPIResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_open_api_response_attributes import UpdateOpenAPIResponseAttributes + return { + "attributes": (UpdateOpenAPIResponseAttributes,), + "id": (UUID,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + } + + def __init__(self_, attributes: Union[UpdateOpenAPIResponseAttributes, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, **kwargs): + """ + Data envelope for ``UpdateOpenAPIResponse``. + + :param attributes: Attributes for ``UpdateOpenAPI``. + :type attributes: UpdateOpenAPIResponseAttributes, optional + + :param id: API identifier. + :type id: UUID, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_outcomes_async_attributes.py b/datadog_api_client/v2/model/update_outcomes_async_attributes.py new file mode 100644 index 0000000000..2355284051 --- /dev/null +++ b/datadog_api_client/v2/model/update_outcomes_async_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_outcomes_async_request_item import UpdateOutcomesAsyncRequestItem + +class UpdateOutcomesAsyncAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_outcomes_async_request_item import UpdateOutcomesAsyncRequestItem + return { + "results": ([UpdateOutcomesAsyncRequestItem],), + } + attribute_map = { + "results": "results", + } + + def __init__(self_, results: Union[List[UpdateOutcomesAsyncRequestItem], UnsetType]=unset, **kwargs): + """ + The JSON:API attributes for a batched set of scorecard outcomes. + + :param results: Set of scorecard outcomes to update asynchronously. + :type results: [UpdateOutcomesAsyncRequestItem], optional + """ + if results is not unset: + kwargs["results"] = results + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_outcomes_async_request.py b/datadog_api_client/v2/model/update_outcomes_async_request.py new file mode 100644 index 0000000000..b800ea3496 --- /dev/null +++ b/datadog_api_client/v2/model/update_outcomes_async_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_outcomes_async_request_data import UpdateOutcomesAsyncRequestData + +class UpdateOutcomesAsyncRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_outcomes_async_request_data import UpdateOutcomesAsyncRequestData + return { + "data": (UpdateOutcomesAsyncRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateOutcomesAsyncRequestData, UnsetType]=unset, **kwargs): + """ + Scorecard outcomes batch request. + + :param data: Scorecard outcomes batch request data. + :type data: UpdateOutcomesAsyncRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_outcomes_async_request_data.py b/datadog_api_client/v2/model/update_outcomes_async_request_data.py new file mode 100644 index 0000000000..9fd6524991 --- /dev/null +++ b/datadog_api_client/v2/model/update_outcomes_async_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_outcomes_async_attributes import UpdateOutcomesAsyncAttributes + from datadog_api_client.v2.model.update_outcomes_async_type import UpdateOutcomesAsyncType + +class UpdateOutcomesAsyncRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_outcomes_async_attributes import UpdateOutcomesAsyncAttributes + from datadog_api_client.v2.model.update_outcomes_async_type import UpdateOutcomesAsyncType + return { + "attributes": (UpdateOutcomesAsyncAttributes,), + "type": (UpdateOutcomesAsyncType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[UpdateOutcomesAsyncAttributes, UnsetType]=unset, type: Union[UpdateOutcomesAsyncType, UnsetType]=unset, **kwargs): + """ + Scorecard outcomes batch request data. + + :param attributes: The JSON:API attributes for a batched set of scorecard outcomes. + :type attributes: UpdateOutcomesAsyncAttributes, optional + + :param type: The JSON:API type for scorecard outcomes. + :type type: UpdateOutcomesAsyncType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_outcomes_async_request_item.py b/datadog_api_client/v2/model/update_outcomes_async_request_item.py new file mode 100644 index 0000000000..c575253bb0 --- /dev/null +++ b/datadog_api_client/v2/model/update_outcomes_async_request_item.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.state import State + +class UpdateOutcomesAsyncRequestItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.state import State + return { + "entity_reference": (str,), + "remarks": (str,), + "rule_id": (str,), + "state": (State,), + } + attribute_map = { + "entity_reference": "entity_reference", + "remarks": "remarks", + "rule_id": "rule_id", + "state": "state", + } + + def __init__(self_, entity_reference: str, rule_id: str, state: State, remarks: Union[str, UnsetType]=unset, **kwargs): + """ + Scorecard outcome for a single entity and rule. + + :param entity_reference: The unique reference for an IDP entity. + :type entity_reference: str + + :param remarks: Any remarks regarding the scorecard rule's evaluation. Supports HTML hyperlinks. + :type remarks: str, optional + + :param rule_id: The unique ID for a scorecard rule. + :type rule_id: str + + :param state: The state of the rule evaluation. + :type state: State + """ + if remarks is not unset: + kwargs["remarks"] = remarks + super().__init__(kwargs) + + + self_.entity_reference = entity_reference + self_.rule_id = rule_id + self_.state = state diff --git a/datadog_api_client/v2/model/update_outcomes_async_type.py b/datadog_api_client/v2/model/update_outcomes_async_type.py new file mode 100644 index 0000000000..f43bd66c3f --- /dev/null +++ b/datadog_api_client/v2/model/update_outcomes_async_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateOutcomesAsyncType(ModelSimple): + """ + The JSON:API type for scorecard outcomes. + + :param value: If omitted defaults to "batched-outcome". Must be one of ["batched-outcome"]. + :type value: str + """ + + allowed_values = { + "batched-outcome", + } + BATCHED_OUTCOME: ClassVar["UpdateOutcomesAsyncType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateOutcomesAsyncType.BATCHED_OUTCOME = UpdateOutcomesAsyncType("batched-outcome") diff --git a/datadog_api_client/v2/model/update_resource_evaluation_filters_request.py b/datadog_api_client/v2/model/update_resource_evaluation_filters_request.py new file mode 100644 index 0000000000..2bd3c7a8af --- /dev/null +++ b/datadog_api_client/v2/model/update_resource_evaluation_filters_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_resource_evaluation_filters_request_data import UpdateResourceEvaluationFiltersRequestData + +class UpdateResourceEvaluationFiltersRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_resource_evaluation_filters_request_data import UpdateResourceEvaluationFiltersRequestData + return { + "data": (UpdateResourceEvaluationFiltersRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateResourceEvaluationFiltersRequestData, **kwargs): + """ + Request object to update a resource filter. + + :param data: The definition of ``UpdateResourceFilterRequestData`` object. + :type data: UpdateResourceEvaluationFiltersRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_resource_evaluation_filters_request_data.py b/datadog_api_client/v2/model/update_resource_evaluation_filters_request_data.py new file mode 100644 index 0000000000..49c97cdadd --- /dev/null +++ b/datadog_api_client/v2/model/update_resource_evaluation_filters_request_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resource_filter_attributes import ResourceFilterAttributes + from datadog_api_client.v2.model.resource_filter_request_type import ResourceFilterRequestType + +class UpdateResourceEvaluationFiltersRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resource_filter_attributes import ResourceFilterAttributes + from datadog_api_client.v2.model.resource_filter_request_type import ResourceFilterRequestType + return { + "attributes": (ResourceFilterAttributes,), + "id": (str,), + "type": (ResourceFilterRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ResourceFilterAttributes, type: ResourceFilterRequestType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``UpdateResourceFilterRequestData`` object. + + :param attributes: Attributes of a resource filter. + :type attributes: ResourceFilterAttributes + + :param id: The ``UpdateResourceEvaluationFiltersRequestData`` ``id``. + :type id: str, optional + + :param type: Constant string to identify the request type. + :type type: ResourceFilterRequestType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/update_resource_evaluation_filters_response.py b/datadog_api_client/v2/model/update_resource_evaluation_filters_response.py new file mode 100644 index 0000000000..3eec1bf18b --- /dev/null +++ b/datadog_api_client/v2/model/update_resource_evaluation_filters_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_resource_evaluation_filters_response_data import UpdateResourceEvaluationFiltersResponseData + +class UpdateResourceEvaluationFiltersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_resource_evaluation_filters_response_data import UpdateResourceEvaluationFiltersResponseData + return { + "data": (UpdateResourceEvaluationFiltersResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateResourceEvaluationFiltersResponseData, **kwargs): + """ + The definition of ``UpdateResourceEvaluationFiltersResponse`` object. + + :param data: The definition of ``UpdateResourceFilterResponseData`` object. + :type data: UpdateResourceEvaluationFiltersResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_resource_evaluation_filters_response_data.py b/datadog_api_client/v2/model/update_resource_evaluation_filters_response_data.py new file mode 100644 index 0000000000..d2ad616502 --- /dev/null +++ b/datadog_api_client/v2/model/update_resource_evaluation_filters_response_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.resource_filter_attributes import ResourceFilterAttributes + from datadog_api_client.v2.model.resource_filter_request_type import ResourceFilterRequestType + +class UpdateResourceEvaluationFiltersResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.resource_filter_attributes import ResourceFilterAttributes + from datadog_api_client.v2.model.resource_filter_request_type import ResourceFilterRequestType + return { + "attributes": (ResourceFilterAttributes,), + "id": (str,), + "type": (ResourceFilterRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ResourceFilterAttributes, type: ResourceFilterRequestType, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``UpdateResourceFilterResponseData`` object. + + :param attributes: Attributes of a resource filter. + :type attributes: ResourceFilterAttributes + + :param id: The ``data`` ``id``. + :type id: str, optional + + :param type: Constant string to identify the request type. + :type type: ResourceFilterRequestType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/update_rule_request.py b/datadog_api_client/v2/model/update_rule_request.py new file mode 100644 index 0000000000..a9dc4e686d --- /dev/null +++ b/datadog_api_client/v2/model/update_rule_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_rule_request_data import UpdateRuleRequestData + +class UpdateRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_rule_request_data import UpdateRuleRequestData + return { + "data": (UpdateRuleRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateRuleRequestData, UnsetType]=unset, **kwargs): + """ + Request to update a scorecard rule. + + :param data: Data for the request to update a scorecard rule. + :type data: UpdateRuleRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_rule_request_data.py b/datadog_api_client/v2/model/update_rule_request_data.py new file mode 100644 index 0000000000..6b45f64449 --- /dev/null +++ b/datadog_api_client/v2/model/update_rule_request_data.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_attributes_request import RuleAttributesRequest + from datadog_api_client.v2.model.rule_type import RuleType + +class UpdateRuleRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_attributes_request import RuleAttributesRequest + from datadog_api_client.v2.model.rule_type import RuleType + return { + "attributes": (RuleAttributesRequest,), + "type": (RuleType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: Union[RuleAttributesRequest, UnsetType]=unset, type: Union[RuleType, UnsetType]=unset, **kwargs): + """ + Data for the request to update a scorecard rule. + + :param attributes: Attributes for creating or updating a rule. Server-managed fields (created_at, modified_at, custom) are excluded. + :type attributes: RuleAttributesRequest, optional + + :param type: The JSON:API type for scorecard rules. + :type type: RuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_rule_response.py b/datadog_api_client/v2/model/update_rule_response.py new file mode 100644 index 0000000000..99e1ca2687 --- /dev/null +++ b/datadog_api_client/v2/model/update_rule_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_rule_response_data import UpdateRuleResponseData + +class UpdateRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_rule_response_data import UpdateRuleResponseData + return { + "data": (UpdateRuleResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateRuleResponseData, UnsetType]=unset, **kwargs): + """ + The response from a rule update request. + + :param data: The data for a rule update response. + :type data: UpdateRuleResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_rule_response_data.py b/datadog_api_client/v2/model/update_rule_response_data.py new file mode 100644 index 0000000000..5526395afd --- /dev/null +++ b/datadog_api_client/v2/model/update_rule_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.rule_attributes import RuleAttributes + from datadog_api_client.v2.model.relationship_to_rule import RelationshipToRule + from datadog_api_client.v2.model.rule_type import RuleType + +class UpdateRuleResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.rule_attributes import RuleAttributes + from datadog_api_client.v2.model.relationship_to_rule import RelationshipToRule + from datadog_api_client.v2.model.rule_type import RuleType + return { + "attributes": (RuleAttributes,), + "id": (str,), + "relationships": (RelationshipToRule,), + "type": (RuleType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[RuleAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[RelationshipToRule, UnsetType]=unset, type: Union[RuleType, UnsetType]=unset, **kwargs): + """ + The data for a rule update response. + + :param attributes: Details of a rule. + :type attributes: RuleAttributes, optional + + :param id: The unique ID for a scorecard rule. + :type id: str, optional + + :param relationships: Scorecard create rule response relationship. + :type relationships: RelationshipToRule, optional + + :param type: The JSON:API type for scorecard rules. + :type type: RuleType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_ruleset_request.py b/datadog_api_client/v2/model/update_ruleset_request.py new file mode 100644 index 0000000000..9c3c2ca8f1 --- /dev/null +++ b/datadog_api_client/v2/model/update_ruleset_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_ruleset_request_data import UpdateRulesetRequestData + +class UpdateRulesetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_ruleset_request_data import UpdateRulesetRequestData + return { + "data": (UpdateRulesetRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UpdateRulesetRequestData, UnsetType]=unset, **kwargs): + """ + The definition of ``UpdateRulesetRequest`` object. + + :param data: The definition of ``UpdateRulesetRequestData`` object. + :type data: UpdateRulesetRequestData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_ruleset_request_data.py b/datadog_api_client/v2/model/update_ruleset_request_data.py new file mode 100644 index 0000000000..9d851071af --- /dev/null +++ b/datadog_api_client/v2/model/update_ruleset_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_ruleset_request_data_attributes import UpdateRulesetRequestDataAttributes + from datadog_api_client.v2.model.update_ruleset_request_data_type import UpdateRulesetRequestDataType + +class UpdateRulesetRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_ruleset_request_data_attributes import UpdateRulesetRequestDataAttributes + from datadog_api_client.v2.model.update_ruleset_request_data_type import UpdateRulesetRequestDataType + return { + "attributes": (UpdateRulesetRequestDataAttributes,), + "id": (str,), + "type": (UpdateRulesetRequestDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: UpdateRulesetRequestDataType, attributes: Union[UpdateRulesetRequestDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``UpdateRulesetRequestData`` object. + + :param attributes: The definition of ``UpdateRulesetRequestDataAttributes`` object. + :type attributes: UpdateRulesetRequestDataAttributes, optional + + :param id: The ``UpdateRulesetRequestData`` ``id``. + :type id: str, optional + + :param type: Update ruleset resource type. + :type type: UpdateRulesetRequestDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/update_ruleset_request_data_attributes.py b/datadog_api_client/v2/model/update_ruleset_request_data_attributes.py new file mode 100644 index 0000000000..9b301401be --- /dev/null +++ b/datadog_api_client/v2/model/update_ruleset_request_data_attributes.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items import UpdateRulesetRequestDataAttributesRulesItems + +class UpdateRulesetRequestDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items import UpdateRulesetRequestDataAttributesRulesItems + return { + "enabled": (bool,), + "last_version": (int,), + "rules": ([UpdateRulesetRequestDataAttributesRulesItems],), + } + attribute_map = { + "enabled": "enabled", + "last_version": "last_version", + "rules": "rules", + } + + def __init__(self_, enabled: bool, rules: List[UpdateRulesetRequestDataAttributesRulesItems], last_version: Union[int, UnsetType]=unset, **kwargs): + """ + The definition of ``UpdateRulesetRequestDataAttributes`` object. + + :param enabled: The ``attributes`` ``enabled``. + :type enabled: bool + + :param last_version: The ``attributes`` ``last_version``. + :type last_version: int, optional + + :param rules: The ``attributes`` ``rules``. + :type rules: [UpdateRulesetRequestDataAttributesRulesItems] + """ + if last_version is not unset: + kwargs["last_version"] = last_version + super().__init__(kwargs) + + + self_.enabled = enabled + self_.rules = rules diff --git a/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items.py b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items.py new file mode 100644 index 0000000000..e8abeb7744 --- /dev/null +++ b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping + from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query import UpdateRulesetRequestDataAttributesRulesItemsQuery + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_reference_table import UpdateRulesetRequestDataAttributesRulesItemsReferenceTable + +class UpdateRulesetRequestDataAttributesRulesItems(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping + from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query import UpdateRulesetRequestDataAttributesRulesItemsQuery + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_reference_table import UpdateRulesetRequestDataAttributesRulesItemsReferenceTable + return { + "enabled": (bool,), + "mapping": (DataAttributesRulesItemsMapping,), + "metadata": (RulesetItemMetadata,), + "name": (str,), + "query": (UpdateRulesetRequestDataAttributesRulesItemsQuery,), + "reference_table": (UpdateRulesetRequestDataAttributesRulesItemsReferenceTable,), + } + attribute_map = { + "enabled": "enabled", + "mapping": "mapping", + "metadata": "metadata", + "name": "name", + "query": "query", + "reference_table": "reference_table", + } + + def __init__(self_, enabled: bool, name: str, mapping: Union[DataAttributesRulesItemsMapping, none_type, UnsetType]=unset, metadata: Union[RulesetItemMetadata, none_type, UnsetType]=unset, query: Union[UpdateRulesetRequestDataAttributesRulesItemsQuery, none_type, UnsetType]=unset, reference_table: Union[UpdateRulesetRequestDataAttributesRulesItemsReferenceTable, none_type, UnsetType]=unset, **kwargs): + """ + The definition of ``UpdateRulesetRequestDataAttributesRulesItems`` object. + + :param enabled: The ``items`` ``enabled``. + :type enabled: bool + + :param mapping: The definition of ``DataAttributesRulesItemsMapping`` object. + :type mapping: DataAttributesRulesItemsMapping, none_type, optional + + :param metadata: The ``items`` ``metadata``. + :type metadata: RulesetItemMetadata, none_type, optional + + :param name: The ``items`` ``name``. + :type name: str + + :param query: The definition of ``UpdateRulesetRequestDataAttributesRulesItemsQuery`` object. + :type query: UpdateRulesetRequestDataAttributesRulesItemsQuery, none_type, optional + + :param reference_table: The definition of ``UpdateRulesetRequestDataAttributesRulesItemsReferenceTable`` object. + :type reference_table: UpdateRulesetRequestDataAttributesRulesItemsReferenceTable, none_type, optional + """ + if mapping is not unset: + kwargs["mapping"] = mapping + if metadata is not unset: + kwargs["metadata"] = metadata + if query is not unset: + kwargs["query"] = query + if reference_table is not unset: + kwargs["reference_table"] = reference_table + super().__init__(kwargs) + + + self_.enabled = enabled + self_.name = name diff --git a/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query.py b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query.py new file mode 100644 index 0000000000..42166c4cf4 --- /dev/null +++ b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query_addition import UpdateRulesetRequestDataAttributesRulesItemsQueryAddition + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + +class UpdateRulesetRequestDataAttributesRulesItemsQuery(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query_addition import UpdateRulesetRequestDataAttributesRulesItemsQueryAddition + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + return { + "addition": (UpdateRulesetRequestDataAttributesRulesItemsQueryAddition,), + "case_insensitivity": (bool,), + "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), + "query": (str,), + } + attribute_map = { + "addition": "addition", + "case_insensitivity": "case_insensitivity", + "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", + "query": "query", + } + + def __init__(self_, addition: Union[UpdateRulesetRequestDataAttributesRulesItemsQueryAddition, none_type], query: str, case_insensitivity: Union[bool, UnsetType]=unset, if_not_exists: Union[bool, UnsetType]=unset, if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType]=unset, **kwargs): + """ + The definition of ``UpdateRulesetRequestDataAttributesRulesItemsQuery`` object. + + :param addition: The definition of ``UpdateRulesetRequestDataAttributesRulesItemsQueryAddition`` object. + :type addition: UpdateRulesetRequestDataAttributesRulesItemsQueryAddition, none_type + + :param case_insensitivity: The ``query`` ``case_insensitivity``. + :type case_insensitivity: bool, optional + + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``query`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + + :param query: The ``query`` ``query``. + :type query: str + """ + if case_insensitivity is not unset: + kwargs["case_insensitivity"] = case_insensitivity + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists + super().__init__(kwargs) + + + self_.addition = addition + self_.query = query diff --git a/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query_addition.py b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query_addition.py new file mode 100644 index 0000000000..07564edbe2 --- /dev/null +++ b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query_addition.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateRulesetRequestDataAttributesRulesItemsQueryAddition(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "key": (str,), + "value": (str,), + } + attribute_map = { + "key": "key", + "value": "value", + } + + def __init__(self_, key: str, value: str, **kwargs): + """ + The definition of ``UpdateRulesetRequestDataAttributesRulesItemsQueryAddition`` object. + + :param key: The ``addition`` ``key``. + :type key: str + + :param value: The ``addition`` ``value``. + :type value: str + """ + super().__init__(kwargs) + + + self_.key = key + self_.value = value diff --git a/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table.py b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table.py new file mode 100644 index 0000000000..c00c70eca9 --- /dev/null +++ b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + +class UpdateRulesetRequestDataAttributesRulesItemsReferenceTable(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + return { + "case_insensitivity": (bool,), + "field_pairs": ([UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems],), + "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), + "source_keys": ([str],), + "table_name": (str,), + } + attribute_map = { + "case_insensitivity": "case_insensitivity", + "field_pairs": "field_pairs", + "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", + "source_keys": "source_keys", + "table_name": "table_name", + } + + def __init__(self_, field_pairs: List[UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems], source_keys: List[str], table_name: str, case_insensitivity: Union[bool, UnsetType]=unset, if_not_exists: Union[bool, UnsetType]=unset, if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType]=unset, **kwargs): + """ + The definition of ``UpdateRulesetRequestDataAttributesRulesItemsReferenceTable`` object. + + :param case_insensitivity: The ``reference_table`` ``case_insensitivity``. + :type case_insensitivity: bool, optional + + :param field_pairs: The ``reference_table`` ``field_pairs``. + :type field_pairs: [UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems] + + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``reference_table`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + + :param source_keys: The ``reference_table`` ``source_keys``. + :type source_keys: [str] + + :param table_name: The ``reference_table`` ``table_name``. + :type table_name: str + """ + if case_insensitivity is not unset: + kwargs["case_insensitivity"] = case_insensitivity + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists + super().__init__(kwargs) + + + self_.field_pairs = field_pairs + self_.source_keys = source_keys + self_.table_name = table_name diff --git a/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items.py b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items.py new file mode 100644 index 0000000000..34c353d976 --- /dev/null +++ b/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems(ModelNormal): + @cached_property + def openapi_types(_): + return { + "input_column": (str,), + "output_key": (str,), + } + attribute_map = { + "input_column": "input_column", + "output_key": "output_key", + } + + def __init__(self_, input_column: str, output_key: str, **kwargs): + """ + The definition of ``UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems`` object. + + :param input_column: The ``items`` ``input_column``. + :type input_column: str + + :param output_key: The ``items`` ``output_key``. + :type output_key: str + """ + super().__init__(kwargs) + + + self_.input_column = input_column + self_.output_key = output_key diff --git a/datadog_api_client/v2/model/update_ruleset_request_data_type.py b/datadog_api_client/v2/model/update_ruleset_request_data_type.py new file mode 100644 index 0000000000..273f0971c7 --- /dev/null +++ b/datadog_api_client/v2/model/update_ruleset_request_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateRulesetRequestDataType(ModelSimple): + """ + Update ruleset resource type. + + :param value: If omitted defaults to "update_ruleset". Must be one of ["update_ruleset"]. + :type value: str + """ + + allowed_values = { + "update_ruleset", + } + UPDATE_RULESET: ClassVar["UpdateRulesetRequestDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateRulesetRequestDataType.UPDATE_RULESET = UpdateRulesetRequestDataType("update_ruleset") diff --git a/datadog_api_client/v2/model/update_tenancy_config_data.py b/datadog_api_client/v2/model/update_tenancy_config_data.py new file mode 100644 index 0000000000..972df8f4d9 --- /dev/null +++ b/datadog_api_client/v2/model/update_tenancy_config_data.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_tenancy_config_data_attributes import UpdateTenancyConfigDataAttributes + from datadog_api_client.v2.model.update_tenancy_config_data_type import UpdateTenancyConfigDataType + +class UpdateTenancyConfigData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_tenancy_config_data_attributes import UpdateTenancyConfigDataAttributes + from datadog_api_client.v2.model.update_tenancy_config_data_type import UpdateTenancyConfigDataType + return { + "attributes": (UpdateTenancyConfigDataAttributes,), + "id": (str,), + "type": (UpdateTenancyConfigDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UpdateTenancyConfigDataType, attributes: Union[UpdateTenancyConfigDataAttributes, UnsetType]=unset, **kwargs): + """ + The data object for updating an existing OCI tenancy integration configuration, including the tenancy ID, type, and updated attributes. + + :param attributes: Attributes for updating an existing OCI tenancy integration configuration, including optional credentials, region settings, and collection options. + :type attributes: UpdateTenancyConfigDataAttributes, optional + + :param id: The OCID of the OCI tenancy to update. + :type id: str + + :param type: OCI tenancy resource type. + :type type: UpdateTenancyConfigDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/update_tenancy_config_data_attributes.py b/datadog_api_client/v2/model/update_tenancy_config_data_attributes.py new file mode 100644 index 0000000000..f6bc90d397 --- /dev/null +++ b/datadog_api_client/v2/model/update_tenancy_config_data_attributes.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_tenancy_config_data_attributes_auth_credentials import UpdateTenancyConfigDataAttributesAuthCredentials + from datadog_api_client.v2.model.update_tenancy_config_data_attributes_logs_config import UpdateTenancyConfigDataAttributesLogsConfig + from datadog_api_client.v2.model.update_tenancy_config_data_attributes_metrics_config import UpdateTenancyConfigDataAttributesMetricsConfig + from datadog_api_client.v2.model.update_tenancy_config_data_attributes_regions_config import UpdateTenancyConfigDataAttributesRegionsConfig + +class UpdateTenancyConfigDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_tenancy_config_data_attributes_auth_credentials import UpdateTenancyConfigDataAttributesAuthCredentials + from datadog_api_client.v2.model.update_tenancy_config_data_attributes_logs_config import UpdateTenancyConfigDataAttributesLogsConfig + from datadog_api_client.v2.model.update_tenancy_config_data_attributes_metrics_config import UpdateTenancyConfigDataAttributesMetricsConfig + from datadog_api_client.v2.model.update_tenancy_config_data_attributes_regions_config import UpdateTenancyConfigDataAttributesRegionsConfig + return { + "auth_credentials": (UpdateTenancyConfigDataAttributesAuthCredentials,), + "cost_collection_enabled": (bool,), + "home_region": (str,), + "logs_config": (UpdateTenancyConfigDataAttributesLogsConfig,), + "metrics_config": (UpdateTenancyConfigDataAttributesMetricsConfig,), + "regions_config": (UpdateTenancyConfigDataAttributesRegionsConfig,), + "resource_collection_enabled": (bool,), + "user_ocid": (str,), + } + attribute_map = { + "auth_credentials": "auth_credentials", + "cost_collection_enabled": "cost_collection_enabled", + "home_region": "home_region", + "logs_config": "logs_config", + "metrics_config": "metrics_config", + "regions_config": "regions_config", + "resource_collection_enabled": "resource_collection_enabled", + "user_ocid": "user_ocid", + } + + def __init__(self_, auth_credentials: Union[UpdateTenancyConfigDataAttributesAuthCredentials, UnsetType]=unset, cost_collection_enabled: Union[bool, UnsetType]=unset, home_region: Union[str, UnsetType]=unset, logs_config: Union[UpdateTenancyConfigDataAttributesLogsConfig, UnsetType]=unset, metrics_config: Union[UpdateTenancyConfigDataAttributesMetricsConfig, UnsetType]=unset, regions_config: Union[UpdateTenancyConfigDataAttributesRegionsConfig, UnsetType]=unset, resource_collection_enabled: Union[bool, UnsetType]=unset, user_ocid: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for updating an existing OCI tenancy integration configuration, including optional credentials, region settings, and collection options. + + :param auth_credentials: OCI API signing key credentials used to update the Datadog integration's authentication with the OCI tenancy. + :type auth_credentials: UpdateTenancyConfigDataAttributesAuthCredentials, optional + + :param cost_collection_enabled: Whether cost data collection from OCI is enabled for the tenancy. + :type cost_collection_enabled: bool, optional + + :param home_region: The home region of the OCI tenancy (for example, us-ashburn-1). + :type home_region: str, optional + + :param logs_config: Log collection configuration for updating an OCI tenancy, controlling which compartments and services have log collection enabled. + :type logs_config: UpdateTenancyConfigDataAttributesLogsConfig, optional + + :param metrics_config: Metrics collection configuration for updating an OCI tenancy, controlling which compartments and services are included or excluded. + :type metrics_config: UpdateTenancyConfigDataAttributesMetricsConfig, optional + + :param regions_config: Region configuration for updating an OCI tenancy, specifying which regions are available, enabled, or disabled for data collection. + :type regions_config: UpdateTenancyConfigDataAttributesRegionsConfig, optional + + :param resource_collection_enabled: Whether resource collection from OCI is enabled for the tenancy. + :type resource_collection_enabled: bool, optional + + :param user_ocid: The OCID of the OCI user used by the Datadog integration for authentication. + :type user_ocid: str, optional + """ + if auth_credentials is not unset: + kwargs["auth_credentials"] = auth_credentials + if cost_collection_enabled is not unset: + kwargs["cost_collection_enabled"] = cost_collection_enabled + if home_region is not unset: + kwargs["home_region"] = home_region + if logs_config is not unset: + kwargs["logs_config"] = logs_config + if metrics_config is not unset: + kwargs["metrics_config"] = metrics_config + if regions_config is not unset: + kwargs["regions_config"] = regions_config + if resource_collection_enabled is not unset: + kwargs["resource_collection_enabled"] = resource_collection_enabled + if user_ocid is not unset: + kwargs["user_ocid"] = user_ocid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_tenancy_config_data_attributes_auth_credentials.py b/datadog_api_client/v2/model/update_tenancy_config_data_attributes_auth_credentials.py new file mode 100644 index 0000000000..66eea68278 --- /dev/null +++ b/datadog_api_client/v2/model/update_tenancy_config_data_attributes_auth_credentials.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateTenancyConfigDataAttributesAuthCredentials(ModelNormal): + @cached_property + def openapi_types(_): + return { + "fingerprint": (str,), + "private_key": (str,), + } + attribute_map = { + "fingerprint": "fingerprint", + "private_key": "private_key", + } + + def __init__(self_, private_key: str, fingerprint: Union[str, UnsetType]=unset, **kwargs): + """ + OCI API signing key credentials used to update the Datadog integration's authentication with the OCI tenancy. + + :param fingerprint: The fingerprint of the OCI API signing key used for authentication. + :type fingerprint: str, optional + + :param private_key: The PEM-encoded private key corresponding to the OCI API signing key fingerprint. + :type private_key: str + """ + if fingerprint is not unset: + kwargs["fingerprint"] = fingerprint + super().__init__(kwargs) + + + self_.private_key = private_key diff --git a/datadog_api_client/v2/model/update_tenancy_config_data_attributes_logs_config.py b/datadog_api_client/v2/model/update_tenancy_config_data_attributes_logs_config.py new file mode 100644 index 0000000000..a4b3751306 --- /dev/null +++ b/datadog_api_client/v2/model/update_tenancy_config_data_attributes_logs_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateTenancyConfigDataAttributesLogsConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compartment_tag_filters": ([str],), + "enabled": (bool,), + "enabled_services": ([str],), + } + attribute_map = { + "compartment_tag_filters": "compartment_tag_filters", + "enabled": "enabled", + "enabled_services": "enabled_services", + } + + def __init__(self_, compartment_tag_filters: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, enabled_services: Union[List[str], UnsetType]=unset, **kwargs): + """ + Log collection configuration for updating an OCI tenancy, controlling which compartments and services have log collection enabled. + + :param compartment_tag_filters: List of compartment tag filters to scope log collection to specific compartments. + :type compartment_tag_filters: [str], optional + + :param enabled: Whether log collection is enabled for the tenancy. + :type enabled: bool, optional + + :param enabled_services: List of OCI service names for which log collection is enabled. + :type enabled_services: [str], optional + """ + if compartment_tag_filters is not unset: + kwargs["compartment_tag_filters"] = compartment_tag_filters + if enabled is not unset: + kwargs["enabled"] = enabled + if enabled_services is not unset: + kwargs["enabled_services"] = enabled_services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_tenancy_config_data_attributes_metrics_config.py b/datadog_api_client/v2/model/update_tenancy_config_data_attributes_metrics_config.py new file mode 100644 index 0000000000..cbe66ed088 --- /dev/null +++ b/datadog_api_client/v2/model/update_tenancy_config_data_attributes_metrics_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateTenancyConfigDataAttributesMetricsConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "compartment_tag_filters": ([str],), + "enabled": (bool,), + "excluded_services": ([str],), + } + attribute_map = { + "compartment_tag_filters": "compartment_tag_filters", + "enabled": "enabled", + "excluded_services": "excluded_services", + } + + def __init__(self_, compartment_tag_filters: Union[List[str], UnsetType]=unset, enabled: Union[bool, UnsetType]=unset, excluded_services: Union[List[str], UnsetType]=unset, **kwargs): + """ + Metrics collection configuration for updating an OCI tenancy, controlling which compartments and services are included or excluded. + + :param compartment_tag_filters: List of compartment tag filters to scope metrics collection to specific compartments. + :type compartment_tag_filters: [str], optional + + :param enabled: Whether metrics collection is enabled for the tenancy. + :type enabled: bool, optional + + :param excluded_services: List of OCI service names to exclude from metrics collection. + :type excluded_services: [str], optional + """ + if compartment_tag_filters is not unset: + kwargs["compartment_tag_filters"] = compartment_tag_filters + if enabled is not unset: + kwargs["enabled"] = enabled + if excluded_services is not unset: + kwargs["excluded_services"] = excluded_services + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_tenancy_config_data_attributes_regions_config.py b/datadog_api_client/v2/model/update_tenancy_config_data_attributes_regions_config.py new file mode 100644 index 0000000000..a9e5d53725 --- /dev/null +++ b/datadog_api_client/v2/model/update_tenancy_config_data_attributes_regions_config.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateTenancyConfigDataAttributesRegionsConfig(ModelNormal): + @cached_property + def openapi_types(_): + return { + "available": ([str],), + "disabled": ([str],), + "enabled": ([str],), + } + attribute_map = { + "available": "available", + "disabled": "disabled", + "enabled": "enabled", + } + + def __init__(self_, available: Union[List[str], UnsetType]=unset, disabled: Union[List[str], UnsetType]=unset, enabled: Union[List[str], UnsetType]=unset, **kwargs): + """ + Region configuration for updating an OCI tenancy, specifying which regions are available, enabled, or disabled for data collection. + + :param available: List of OCI regions available for data collection in the tenancy. + :type available: [str], optional + + :param disabled: List of OCI regions explicitly disabled for data collection. + :type disabled: [str], optional + + :param enabled: List of OCI regions enabled for data collection. + :type enabled: [str], optional + """ + if available is not unset: + kwargs["available"] = available + if disabled is not unset: + kwargs["disabled"] = disabled + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_tenancy_config_data_type.py b/datadog_api_client/v2/model/update_tenancy_config_data_type.py new file mode 100644 index 0000000000..15372a2579 --- /dev/null +++ b/datadog_api_client/v2/model/update_tenancy_config_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpdateTenancyConfigDataType(ModelSimple): + """ + OCI tenancy resource type. + + :param value: If omitted defaults to "oci_tenancy". Must be one of ["oci_tenancy"]. + :type value: str + """ + + allowed_values = { + "oci_tenancy", + } + OCI_TENANCY: ClassVar["UpdateTenancyConfigDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpdateTenancyConfigDataType.OCI_TENANCY = UpdateTenancyConfigDataType("oci_tenancy") diff --git a/datadog_api_client/v2/model/update_tenancy_config_request.py b/datadog_api_client/v2/model/update_tenancy_config_request.py new file mode 100644 index 0000000000..bd714b7f60 --- /dev/null +++ b/datadog_api_client/v2/model/update_tenancy_config_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.update_tenancy_config_data import UpdateTenancyConfigData + +class UpdateTenancyConfigRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.update_tenancy_config_data import UpdateTenancyConfigData + return { + "data": (UpdateTenancyConfigData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpdateTenancyConfigData, **kwargs): + """ + Request body for updating an existing OCI tenancy integration configuration. + + :param data: The data object for updating an existing OCI tenancy integration configuration, including the tenancy ID, type, and updated attributes. + :type data: UpdateTenancyConfigData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_user_identity_providers_request.py b/datadog_api_client/v2/model/update_user_identity_providers_request.py new file mode 100644 index 0000000000..77d52ff5c3 --- /dev/null +++ b/datadog_api_client/v2/model/update_user_identity_providers_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_relationship_identity_provider_data import UserRelationshipIdentityProviderData + +class UpdateUserIdentityProvidersRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_relationship_identity_provider_data import UserRelationshipIdentityProviderData + return { + "data": ([UserRelationshipIdentityProviderData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[UserRelationshipIdentityProviderData], **kwargs): + """ + Request body for setting identity provider overrides for a user. + + :param data: List of identity provider resource identifiers for a relationship update. + :type data: [UserRelationshipIdentityProviderData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_variant_request.py b/datadog_api_client/v2/model/update_variant_request.py new file mode 100644 index 0000000000..9ee3095dfc --- /dev/null +++ b/datadog_api_client/v2/model/update_variant_request.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpdateVariantRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + Request to update an existing variant's name and value. + + :param name: The display name of the variant. + :type name: str, optional + + :param value: The value of the variant as a string. + :type value: str, optional + """ + if name is not unset: + kwargs["name"] = name + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/update_workflow_request.py b/datadog_api_client/v2/model/update_workflow_request.py new file mode 100644 index 0000000000..629155d84d --- /dev/null +++ b/datadog_api_client/v2/model/update_workflow_request.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_data_update import WorkflowDataUpdate + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class UpdateWorkflowRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_data_update import WorkflowDataUpdate + return { + "data": (WorkflowDataUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: WorkflowDataUpdate, **kwargs): + """ + A request object for updating an existing workflow. + + :param data: Data related to the workflow being updated. + :type data: WorkflowDataUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/update_workflow_response.py b/datadog_api_client/v2/model/update_workflow_response.py new file mode 100644 index 0000000000..8a76768561 --- /dev/null +++ b/datadog_api_client/v2/model/update_workflow_response.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_data_update import WorkflowDataUpdate + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class UpdateWorkflowResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_data_update import WorkflowDataUpdate + return { + "data": (WorkflowDataUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[WorkflowDataUpdate, UnsetType]=unset, **kwargs): + """ + The response object after updating a workflow. + + :param data: Data related to the workflow being updated. + :type data: WorkflowDataUpdate, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/upsert_allocation_request.py b/datadog_api_client/v2/model/upsert_allocation_request.py new file mode 100644 index 0000000000..f471734806 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_allocation_request.py @@ -0,0 +1,110 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.exposure_schedule_request import ExposureScheduleRequest + from datadog_api_client.v2.model.guardrail_metric_request import GuardrailMetricRequest + from datadog_api_client.v2.model.targeting_rule_request import TargetingRuleRequest + from datadog_api_client.v2.model.allocation_type import AllocationType + from datadog_api_client.v2.model.variant_weight_request import VariantWeightRequest + +class UpsertAllocationRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.exposure_schedule_request import ExposureScheduleRequest + from datadog_api_client.v2.model.guardrail_metric_request import GuardrailMetricRequest + from datadog_api_client.v2.model.targeting_rule_request import TargetingRuleRequest + from datadog_api_client.v2.model.allocation_type import AllocationType + from datadog_api_client.v2.model.variant_weight_request import VariantWeightRequest + return { + "experiment_id": (str, none_type), + "exposure_schedule": (ExposureScheduleRequest,), + "guardrail_metrics": ([GuardrailMetricRequest],), + "id": (UUID,), + "key": (str,), + "name": (str,), + "targeting_rules": ([TargetingRuleRequest],), + "type": (AllocationType,), + "variant_weights": ([VariantWeightRequest],), + } + attribute_map = { + "experiment_id": "experiment_id", + "exposure_schedule": "exposure_schedule", + "guardrail_metrics": "guardrail_metrics", + "id": "id", + "key": "key", + "name": "name", + "targeting_rules": "targeting_rules", + "type": "type", + "variant_weights": "variant_weights", + } + + def __init__(self_, key: str, name: str, type: AllocationType, experiment_id: Union[str, none_type, UnsetType]=unset, exposure_schedule: Union[ExposureScheduleRequest, UnsetType]=unset, guardrail_metrics: Union[List[GuardrailMetricRequest], UnsetType]=unset, id: Union[UUID, UnsetType]=unset, targeting_rules: Union[List[TargetingRuleRequest], UnsetType]=unset, variant_weights: Union[List[VariantWeightRequest], UnsetType]=unset, **kwargs): + """ + Request to create or update a targeting rule (allocation) for a feature flag environment. + + :param experiment_id: The experiment ID for experiment-linked allocations. + :type experiment_id: str, none_type, optional + + :param exposure_schedule: Progressive release request payload. + :type exposure_schedule: ExposureScheduleRequest, optional + + :param guardrail_metrics: Guardrail metrics used to monitor and auto-pause or abort. + :type guardrail_metrics: [GuardrailMetricRequest], optional + + :param id: The unique identifier of the targeting rule allocation. + :type id: UUID, optional + + :param key: The unique key of the targeting rule allocation. + :type key: str + + :param name: The display name of the targeting rule. + :type name: str + + :param targeting_rules: Targeting rules that determine audience eligibility. + :type targeting_rules: [TargetingRuleRequest], optional + + :param type: The type of targeting rule (called allocation in the API model). + :type type: AllocationType + + :param variant_weights: Variant distribution weights. + :type variant_weights: [VariantWeightRequest], optional + """ + if experiment_id is not unset: + kwargs["experiment_id"] = experiment_id + if exposure_schedule is not unset: + kwargs["exposure_schedule"] = exposure_schedule + if guardrail_metrics is not unset: + kwargs["guardrail_metrics"] = guardrail_metrics + if id is not unset: + kwargs["id"] = id + if targeting_rules is not unset: + kwargs["targeting_rules"] = targeting_rules + if variant_weights is not unset: + kwargs["variant_weights"] = variant_weights + super().__init__(kwargs) + + + self_.key = key + self_.name = name + self_.type = type diff --git a/datadog_api_client/v2/model/upsert_and_publish_form_version_data.py b/datadog_api_client/v2/model/upsert_and_publish_form_version_data.py new file mode 100644 index 0000000000..bffc261eae --- /dev/null +++ b/datadog_api_client/v2/model/upsert_and_publish_form_version_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.upsert_and_publish_form_version_data_attributes import UpsertAndPublishFormVersionDataAttributes + from datadog_api_client.v2.model.form_version_type import FormVersionType + +class UpsertAndPublishFormVersionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.upsert_and_publish_form_version_data_attributes import UpsertAndPublishFormVersionDataAttributes + from datadog_api_client.v2.model.form_version_type import FormVersionType + return { + "attributes": (UpsertAndPublishFormVersionDataAttributes,), + "type": (FormVersionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: UpsertAndPublishFormVersionDataAttributes, type: FormVersionType, **kwargs): + """ + The data for upserting and publishing a form version. + + :param attributes: The attributes for upserting and publishing a form version. + :type attributes: UpsertAndPublishFormVersionDataAttributes + + :param type: The resource type for a form version. + :type type: FormVersionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/upsert_and_publish_form_version_data_attributes.py b/datadog_api_client/v2/model/upsert_and_publish_form_version_data_attributes.py new file mode 100644 index 0000000000..3d7d7623c0 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_and_publish_form_version_data_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_data_definition import FormDataDefinition + from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition + from datadog_api_client.v2.model.upsert_and_publish_form_version_upsert_params import UpsertAndPublishFormVersionUpsertParams + +class UpsertAndPublishFormVersionDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_data_definition import FormDataDefinition + from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition + from datadog_api_client.v2.model.upsert_and_publish_form_version_upsert_params import UpsertAndPublishFormVersionUpsertParams + return { + "data_definition": (FormDataDefinition,), + "ui_definition": (FormUiDefinition,), + "upsert_params": (UpsertAndPublishFormVersionUpsertParams,), + } + attribute_map = { + "data_definition": "data_definition", + "ui_definition": "ui_definition", + "upsert_params": "upsert_params", + } + + def __init__(self_, data_definition: FormDataDefinition, ui_definition: FormUiDefinition, upsert_params: UpsertAndPublishFormVersionUpsertParams, **kwargs): + """ + The attributes for upserting and publishing a form version. + + :param data_definition: A JSON Schema definition that describes the form's data fields. + :type data_definition: FormDataDefinition + + :param ui_definition: UI configuration for rendering form fields, including widget overrides, field ordering, and themes. + :type ui_definition: FormUiDefinition + + :param upsert_params: Concurrency control parameters for the upsert and publish operation. + :type upsert_params: UpsertAndPublishFormVersionUpsertParams + """ + super().__init__(kwargs) + + + self_.data_definition = data_definition + self_.ui_definition = ui_definition + self_.upsert_params = upsert_params diff --git a/datadog_api_client/v2/model/upsert_and_publish_form_version_request.py b/datadog_api_client/v2/model/upsert_and_publish_form_version_request.py new file mode 100644 index 0000000000..15282ddc02 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_and_publish_form_version_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.upsert_and_publish_form_version_data import UpsertAndPublishFormVersionData + +class UpsertAndPublishFormVersionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.upsert_and_publish_form_version_data import UpsertAndPublishFormVersionData + return { + "data": (UpsertAndPublishFormVersionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpsertAndPublishFormVersionData, **kwargs): + """ + A request to upsert and publish a form version in a single transaction. + + :param data: The data for upserting and publishing a form version. + :type data: UpsertAndPublishFormVersionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/upsert_and_publish_form_version_upsert_params.py b/datadog_api_client/v2/model/upsert_and_publish_form_version_upsert_params.py new file mode 100644 index 0000000000..1b34e51b89 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_and_publish_form_version_upsert_params.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpsertAndPublishFormVersionUpsertParams(ModelNormal): + @cached_property + def openapi_types(_): + return { + "etag": (str,), + } + attribute_map = { + "etag": "etag", + } + + def __init__(self_, etag: str, **kwargs): + """ + Concurrency control parameters for the upsert and publish operation. + + :param etag: The ETag of the latest version used for optimistic concurrency control. + :type etag: str + """ + super().__init__(kwargs) + + + self_.etag = etag diff --git a/datadog_api_client/v2/model/upsert_catalog_entity_request.py b/datadog_api_client/v2/model/upsert_catalog_entity_request.py new file mode 100644 index 0000000000..95072f2bcf --- /dev/null +++ b/datadog_api_client/v2/model/upsert_catalog_entity_request.py @@ -0,0 +1,50 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpsertCatalogEntityRequest(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Create or update entity request. + """ + 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.entity_v3 import EntityV3 + return { + "oneOf": [ + EntityV3, + str, + ], + } diff --git a/datadog_api_client/v2/model/upsert_catalog_entity_response.py b/datadog_api_client/v2/model/upsert_catalog_entity_response.py new file mode 100644 index 0000000000..d21ece85d3 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_catalog_entity_response.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.entity_data import EntityData + from datadog_api_client.v2.model.upsert_catalog_entity_response_included_item import UpsertCatalogEntityResponseIncludedItem + from datadog_api_client.v2.model.entity_response_meta import EntityResponseMeta + from datadog_api_client.v2.model.entity_response_included_schema import EntityResponseIncludedSchema + +class UpsertCatalogEntityResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.entity_data import EntityData + from datadog_api_client.v2.model.upsert_catalog_entity_response_included_item import UpsertCatalogEntityResponseIncludedItem + from datadog_api_client.v2.model.entity_response_meta import EntityResponseMeta + return { + "data": ([EntityData],), + "included": ([UpsertCatalogEntityResponseIncludedItem],), + "meta": (EntityResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: Union[List[EntityData], UnsetType]=unset, included: Union[List[Union[UpsertCatalogEntityResponseIncludedItem, EntityResponseIncludedSchema]], UnsetType]=unset, meta: Union[EntityResponseMeta, UnsetType]=unset, **kwargs): + """ + Upsert entity response. + + :param data: List of entity data. + :type data: [EntityData], optional + + :param included: Upsert entity response included. + :type included: [UpsertCatalogEntityResponseIncludedItem], optional + + :param meta: Entity metadata. + :type meta: EntityResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/upsert_catalog_entity_response_included_item.py b/datadog_api_client/v2/model/upsert_catalog_entity_response_included_item.py new file mode 100644 index 0000000000..2299361e13 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_catalog_entity_response_included_item.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpsertCatalogEntityResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Upsert entity response included item. + + :param attributes: Included schema. + :type attributes: EntityResponseIncludedSchemaAttributes, optional + + :param id: Entity ID. + :type id: str, optional + + :param type: Schema type. + :type type: EntityResponseIncludedSchemaType, 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.entity_response_included_schema import EntityResponseIncludedSchema + return { + "oneOf": [ + EntityResponseIncludedSchema, + ], + } diff --git a/datadog_api_client/v2/model/upsert_catalog_kind_request.py b/datadog_api_client/v2/model/upsert_catalog_kind_request.py new file mode 100644 index 0000000000..659e161443 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_catalog_kind_request.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UpsertCatalogKindRequest(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Create or update kind request. + + :param description: Short description of the kind. + :type description: str, optional + + :param display_name: The display name of the kind. Automatically generated if not provided. + :type display_name: str, optional + + :param kind: The name of the kind to create or update. This must be in kebab-case format. + :type kind: str + """ + 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.kind_obj import KindObj + return { + "oneOf": [ + KindObj, + str, + ], + } diff --git a/datadog_api_client/v2/model/upsert_catalog_kind_response.py b/datadog_api_client/v2/model/upsert_catalog_kind_response.py new file mode 100644 index 0000000000..9462af91c0 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_catalog_kind_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.kind_data import KindData + from datadog_api_client.v2.model.kind_response_meta import KindResponseMeta + +class UpsertCatalogKindResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.kind_data import KindData + from datadog_api_client.v2.model.kind_response_meta import KindResponseMeta + return { + "data": ([KindData],), + "meta": (KindResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[KindData], UnsetType]=unset, meta: Union[KindResponseMeta, UnsetType]=unset, **kwargs): + """ + Upsert kind response. + + :param data: List of kind responses. + :type data: [KindData], optional + + :param meta: Kind response metadata. + :type meta: KindResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/upsert_cloud_inventory_sync_config_request.py b/datadog_api_client/v2/model/upsert_cloud_inventory_sync_config_request.py new file mode 100644 index 0000000000..609ccb1f69 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_cloud_inventory_sync_config_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.upsert_cloud_inventory_sync_config_request_data import UpsertCloudInventorySyncConfigRequestData + +class UpsertCloudInventorySyncConfigRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.upsert_cloud_inventory_sync_config_request_data import UpsertCloudInventorySyncConfigRequestData + return { + "data": (UpsertCloudInventorySyncConfigRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpsertCloudInventorySyncConfigRequestData, **kwargs): + """ + Request body for creating or updating a cloud inventory sync configuration. + + :param data: Storage Management configuration data for the create or update request. + :type data: UpsertCloudInventorySyncConfigRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/upsert_cloud_inventory_sync_config_request_attributes.py b/datadog_api_client/v2/model/upsert_cloud_inventory_sync_config_request_attributes.py new file mode 100644 index 0000000000..fa718a0839 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_cloud_inventory_sync_config_request_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cloud_inventory_sync_config_aws_request_attributes import CloudInventorySyncConfigAWSRequestAttributes + from datadog_api_client.v2.model.cloud_inventory_sync_config_azure_request_attributes import CloudInventorySyncConfigAzureRequestAttributes + from datadog_api_client.v2.model.cloud_inventory_sync_config_gcp_request_attributes import CloudInventorySyncConfigGCPRequestAttributes + +class UpsertCloudInventorySyncConfigRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cloud_inventory_sync_config_aws_request_attributes import CloudInventorySyncConfigAWSRequestAttributes + from datadog_api_client.v2.model.cloud_inventory_sync_config_azure_request_attributes import CloudInventorySyncConfigAzureRequestAttributes + from datadog_api_client.v2.model.cloud_inventory_sync_config_gcp_request_attributes import CloudInventorySyncConfigGCPRequestAttributes + return { + "aws": (CloudInventorySyncConfigAWSRequestAttributes,), + "azure": (CloudInventorySyncConfigAzureRequestAttributes,), + "gcp": (CloudInventorySyncConfigGCPRequestAttributes,), + } + attribute_map = { + "aws": "aws", + "azure": "azure", + "gcp": "gcp", + } + + def __init__(self_, aws: Union[CloudInventorySyncConfigAWSRequestAttributes, UnsetType]=unset, azure: Union[CloudInventorySyncConfigAzureRequestAttributes, UnsetType]=unset, gcp: Union[CloudInventorySyncConfigGCPRequestAttributes, UnsetType]=unset, **kwargs): + """ + Settings for the cloud provider specified in ``data.id``. Include only the matching provider object ( ``aws`` , ``gcp`` , or ``azure`` ). + + :param aws: AWS settings for the S3 bucket Storage Management reads inventory reports from. + :type aws: CloudInventorySyncConfigAWSRequestAttributes, optional + + :param azure: Azure settings for the storage account and container with inventory data. + :type azure: CloudInventorySyncConfigAzureRequestAttributes, optional + + :param gcp: GCP settings for buckets involved in inventory reporting. + :type gcp: CloudInventorySyncConfigGCPRequestAttributes, optional + """ + if aws is not unset: + kwargs["aws"] = aws + if azure is not unset: + kwargs["azure"] = azure + if gcp is not unset: + kwargs["gcp"] = gcp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/upsert_cloud_inventory_sync_config_request_data.py b/datadog_api_client/v2/model/upsert_cloud_inventory_sync_config_request_data.py new file mode 100644 index 0000000000..17d47bb3ba --- /dev/null +++ b/datadog_api_client/v2/model/upsert_cloud_inventory_sync_config_request_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.upsert_cloud_inventory_sync_config_request_attributes import UpsertCloudInventorySyncConfigRequestAttributes + from datadog_api_client.v2.model.cloud_inventory_cloud_provider_id import CloudInventoryCloudProviderId + from datadog_api_client.v2.model.cloud_inventory_cloud_provider_request_type import CloudInventoryCloudProviderRequestType + +class UpsertCloudInventorySyncConfigRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.upsert_cloud_inventory_sync_config_request_attributes import UpsertCloudInventorySyncConfigRequestAttributes + from datadog_api_client.v2.model.cloud_inventory_cloud_provider_id import CloudInventoryCloudProviderId + from datadog_api_client.v2.model.cloud_inventory_cloud_provider_request_type import CloudInventoryCloudProviderRequestType + return { + "attributes": (UpsertCloudInventorySyncConfigRequestAttributes,), + "id": (CloudInventoryCloudProviderId,), + "type": (CloudInventoryCloudProviderRequestType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: UpsertCloudInventorySyncConfigRequestAttributes, id: CloudInventoryCloudProviderId, type: CloudInventoryCloudProviderRequestType, **kwargs): + """ + Storage Management configuration data for the create or update request. + + :param attributes: Settings for the cloud provider specified in ``data.id``. Include only the matching provider object ( ``aws`` , ``gcp`` , or ``azure`` ). + :type attributes: UpsertCloudInventorySyncConfigRequestAttributes + + :param id: Cloud provider for this sync configuration ( ``aws`` , ``gcp`` , or ``azure`` ). For requests, must match the provider block supplied under ``attributes``. + :type id: CloudInventoryCloudProviderId + + :param type: Always ``cloud_provider``. + :type type: CloudInventoryCloudProviderRequestType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/upsert_form_version_data.py b/datadog_api_client/v2/model/upsert_form_version_data.py new file mode 100644 index 0000000000..61763961ec --- /dev/null +++ b/datadog_api_client/v2/model/upsert_form_version_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.upsert_form_version_data_attributes import UpsertFormVersionDataAttributes + from datadog_api_client.v2.model.form_version_type import FormVersionType + +class UpsertFormVersionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.upsert_form_version_data_attributes import UpsertFormVersionDataAttributes + from datadog_api_client.v2.model.form_version_type import FormVersionType + return { + "attributes": (UpsertFormVersionDataAttributes,), + "type": (FormVersionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: UpsertFormVersionDataAttributes, type: FormVersionType, **kwargs): + """ + The data for creating or updating a form version. + + :param attributes: The attributes for creating or updating a form version. + :type attributes: UpsertFormVersionDataAttributes + + :param type: The resource type for a form version. + :type type: FormVersionType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/upsert_form_version_data_attributes.py b/datadog_api_client/v2/model/upsert_form_version_data_attributes.py new file mode 100644 index 0000000000..7e965c0d25 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_form_version_data_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.form_data_definition import FormDataDefinition + from datadog_api_client.v2.model.form_version_state import FormVersionState + from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition + from datadog_api_client.v2.model.upsert_form_version_upsert_params import UpsertFormVersionUpsertParams + +class UpsertFormVersionDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.form_data_definition import FormDataDefinition + from datadog_api_client.v2.model.form_version_state import FormVersionState + from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition + from datadog_api_client.v2.model.upsert_form_version_upsert_params import UpsertFormVersionUpsertParams + return { + "data_definition": (FormDataDefinition,), + "state": (FormVersionState,), + "ui_definition": (FormUiDefinition,), + "upsert_params": (UpsertFormVersionUpsertParams,), + } + attribute_map = { + "data_definition": "data_definition", + "state": "state", + "ui_definition": "ui_definition", + "upsert_params": "upsert_params", + } + + def __init__(self_, data_definition: FormDataDefinition, state: FormVersionState, ui_definition: FormUiDefinition, upsert_params: UpsertFormVersionUpsertParams, **kwargs): + """ + The attributes for creating or updating a form version. + + :param data_definition: A JSON Schema definition that describes the form's data fields. + :type data_definition: FormDataDefinition + + :param state: The state of a form version. + :type state: FormVersionState + + :param ui_definition: UI configuration for rendering form fields, including widget overrides, field ordering, and themes. + :type ui_definition: FormUiDefinition + + :param upsert_params: Concurrency control parameters for the form version upsert operation. + :type upsert_params: UpsertFormVersionUpsertParams + """ + super().__init__(kwargs) + + + self_.data_definition = data_definition + self_.state = state + self_.ui_definition = ui_definition + self_.upsert_params = upsert_params diff --git a/datadog_api_client/v2/model/upsert_form_version_request.py b/datadog_api_client/v2/model/upsert_form_version_request.py new file mode 100644 index 0000000000..a4e04b4f2f --- /dev/null +++ b/datadog_api_client/v2/model/upsert_form_version_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.upsert_form_version_data import UpsertFormVersionData + +class UpsertFormVersionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.upsert_form_version_data import UpsertFormVersionData + return { + "data": (UpsertFormVersionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpsertFormVersionData, **kwargs): + """ + A request to create or update a form version. + + :param data: The data for creating or updating a form version. + :type data: UpsertFormVersionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/upsert_form_version_upsert_params.py b/datadog_api_client/v2/model/upsert_form_version_upsert_params.py new file mode 100644 index 0000000000..df77f89e70 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_form_version_upsert_params.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.latest_version_match_policy import LatestVersionMatchPolicy + +class UpsertFormVersionUpsertParams(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.latest_version_match_policy import LatestVersionMatchPolicy + return { + "etag": (str, none_type), + "insert_only": (bool,), + "match_policy": (LatestVersionMatchPolicy,), + } + attribute_map = { + "etag": "etag", + "insert_only": "insert_only", + "match_policy": "match_policy", + } + + def __init__(self_, match_policy: LatestVersionMatchPolicy, etag: Union[str, none_type, UnsetType]=unset, insert_only: Union[bool, UnsetType]=unset, **kwargs): + """ + Concurrency control parameters for the form version upsert operation. + + :param etag: The ETag of the latest version. Required when ``match_policy`` is ``if_etag_match``. + :type etag: str, none_type, optional + + :param insert_only: If true, only a new version may be inserted; updating the current draft is not allowed. + :type insert_only: bool, optional + + :param match_policy: The policy for matching the latest form version during an upsert operation. + :type match_policy: LatestVersionMatchPolicy + """ + if etag is not unset: + kwargs["etag"] = etag + if insert_only is not unset: + kwargs["insert_only"] = insert_only + super().__init__(kwargs) + + + self_.match_policy = match_policy diff --git a/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_data.py b/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_data.py new file mode 100644 index 0000000000..a8083fee67 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_data.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_data_attributes import UpsertOAuthScopesRestrictionDataAttributes + from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_type import UpsertOAuthScopesRestrictionType + +class UpsertOAuthScopesRestrictionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_data_attributes import UpsertOAuthScopesRestrictionDataAttributes + from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_type import UpsertOAuthScopesRestrictionType + return { + "attributes": (UpsertOAuthScopesRestrictionDataAttributes,), + "type": (UpsertOAuthScopesRestrictionType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: UpsertOAuthScopesRestrictionType, attributes: Union[UpsertOAuthScopesRestrictionDataAttributes, UnsetType]=unset, **kwargs): + """ + Data object of an upsert OAuth2 scopes restriction request. + + :param attributes: Attributes of an upsert OAuth2 scopes restriction request. + :type attributes: UpsertOAuthScopesRestrictionDataAttributes, optional + + :param type: JSON:API resource type for an upsert OAuth2 client scopes restriction request. + :type type: UpsertOAuthScopesRestrictionType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_data_attributes.py b/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_data_attributes.py new file mode 100644 index 0000000000..1595cbf996 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_data_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.o_auth_oidc_scope import OAuthOidcScope + +class UpsertOAuthScopesRestrictionDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.o_auth_oidc_scope import OAuthOidcScope + return { + "oidc_scopes": ([OAuthOidcScope],), + "permission_scopes": ([str],), + } + attribute_map = { + "oidc_scopes": "oidc_scopes", + "permission_scopes": "permission_scopes", + } + + def __init__(self_, oidc_scopes: Union[List[OAuthOidcScope], UnsetType]=unset, permission_scopes: Union[List[str], UnsetType]=unset, **kwargs): + """ + Attributes of an upsert OAuth2 scopes restriction request. + + :param oidc_scopes: OIDC scopes the client is allowed to request. + :type oidc_scopes: [OAuthOidcScope], optional + + :param permission_scopes: Datadog permission scopes the client is allowed to request. + Each value must be a valid permission name. + :type permission_scopes: [str], optional + """ + if oidc_scopes is not unset: + kwargs["oidc_scopes"] = oidc_scopes + if permission_scopes is not unset: + kwargs["permission_scopes"] = permission_scopes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_request.py b/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_request.py new file mode 100644 index 0000000000..918df84d35 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_data import UpsertOAuthScopesRestrictionData + +class UpsertOAuthScopesRestrictionRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_data import UpsertOAuthScopesRestrictionData + return { + "data": (UpsertOAuthScopesRestrictionData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UpsertOAuthScopesRestrictionData, **kwargs): + """ + Request payload for creating or updating the scopes restriction of an OAuth2 client. + + :param data: Data object of an upsert OAuth2 scopes restriction request. + :type data: UpsertOAuthScopesRestrictionData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_type.py b/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_type.py new file mode 100644 index 0000000000..aae6dc5493 --- /dev/null +++ b/datadog_api_client/v2/model/upsert_o_auth_scopes_restriction_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UpsertOAuthScopesRestrictionType(ModelSimple): + """ + JSON:API resource type for an upsert OAuth2 client scopes restriction request. + + :param value: If omitted defaults to "upsert_scopes_restriction". Must be one of ["upsert_scopes_restriction"]. + :type value: str + """ + + allowed_values = { + "upsert_scopes_restriction", + } + UPSERT_SCOPES_RESTRICTION: ClassVar["UpsertOAuthScopesRestrictionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UpsertOAuthScopesRestrictionType.UPSERT_SCOPES_RESTRICTION = UpsertOAuthScopesRestrictionType("upsert_scopes_restriction") diff --git a/datadog_api_client/v2/model/urgency.py b/datadog_api_client/v2/model/urgency.py new file mode 100644 index 0000000000..e0f26e19f4 --- /dev/null +++ b/datadog_api_client/v2/model/urgency.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class Urgency(ModelSimple): + """ + Specifies the level of urgency for a routing rule (low, high, or dynamic). + + :param value: Must be one of ["low", "high", "dynamic"]. + :type value: str + """ + + allowed_values = { + "low", + "high", + "dynamic", + } + LOW: ClassVar["Urgency"] + HIGH: ClassVar["Urgency"] + DYNAMIC: ClassVar["Urgency"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +Urgency.LOW = Urgency("low") +Urgency.HIGH = Urgency("high") +Urgency.DYNAMIC = Urgency("dynamic") diff --git a/datadog_api_client/v2/model/url_param.py b/datadog_api_client/v2/model/url_param.py new file mode 100644 index 0000000000..377088bddd --- /dev/null +++ b/datadog_api_client/v2/model/url_param.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UrlParam(ModelNormal): + validations = { + "name": { + }, + } + @cached_property + def openapi_types(_): + return { + "name": (str,), + "value": (str,), + } + attribute_map = { + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, value: str, **kwargs): + """ + The definition of ``UrlParam`` object. + + :param name: Name for tokens. + :type name: str + + :param value: The ``UrlParam`` ``value``. + :type value: str + """ + super().__init__(kwargs) + + + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/url_param_update.py b/datadog_api_client/v2/model/url_param_update.py new file mode 100644 index 0000000000..4c3df1be8c --- /dev/null +++ b/datadog_api_client/v2/model/url_param_update.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UrlParamUpdate(ModelNormal): + validations = { + "name": { + }, + } + @cached_property + def openapi_types(_): + return { + "deleted": (bool,), + "name": (str,), + "value": (str,), + } + attribute_map = { + "deleted": "deleted", + "name": "name", + "value": "value", + } + + def __init__(self_, name: str, deleted: Union[bool, UnsetType]=unset, value: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``UrlParamUpdate`` object. + + :param deleted: Should the header be deleted. + :type deleted: bool, optional + + :param name: Name for tokens. + :type name: str + + :param value: The ``UrlParamUpdate`` ``value``. + :type value: str, optional + """ + if deleted is not unset: + kwargs["deleted"] = deleted + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/usage_application_security_monitoring_response.py b/datadog_api_client/v2/model/usage_application_security_monitoring_response.py new file mode 100644 index 0000000000..5151757af7 --- /dev/null +++ b/datadog_api_client/v2/model/usage_application_security_monitoring_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.usage_data_object import UsageDataObject + +class UsageApplicationSecurityMonitoringResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.usage_data_object import UsageDataObject + return { + "data": ([UsageDataObject],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[UsageDataObject], UnsetType]=unset, **kwargs): + """ + Application Security Monitoring usage response. + + :param data: Response containing Application Security Monitoring usage. + :type data: [UsageDataObject], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_attributes_object.py b/datadog_api_client/v2/model/usage_attributes_object.py new file mode 100644 index 0000000000..b103e7cab1 --- /dev/null +++ b/datadog_api_client/v2/model/usage_attributes_object.py @@ -0,0 +1,86 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.usage_time_series_object import UsageTimeSeriesObject + from datadog_api_client.v2.model.hourly_usage_type import HourlyUsageType + +class UsageAttributesObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.usage_time_series_object import UsageTimeSeriesObject + from datadog_api_client.v2.model.hourly_usage_type import HourlyUsageType + return { + "org_name": (str,), + "product_family": (str,), + "public_id": (str,), + "region": (str,), + "timeseries": ([UsageTimeSeriesObject],), + "usage_type": (HourlyUsageType,), + } + attribute_map = { + "org_name": "org_name", + "product_family": "product_family", + "public_id": "public_id", + "region": "region", + "timeseries": "timeseries", + "usage_type": "usage_type", + } + + def __init__(self_, org_name: Union[str, UnsetType]=unset, product_family: Union[str, UnsetType]=unset, public_id: Union[str, UnsetType]=unset, region: Union[str, UnsetType]=unset, timeseries: Union[List[UsageTimeSeriesObject], UnsetType]=unset, usage_type: Union[HourlyUsageType, UnsetType]=unset, **kwargs): + """ + Usage attributes data. + + :param org_name: The organization name. + :type org_name: str, optional + + :param product_family: The product for which usage is being reported. + :type product_family: str, optional + + :param public_id: The organization public ID. + :type public_id: str, optional + + :param region: The region of the Datadog instance that the organization belongs to. + :type region: str, optional + + :param timeseries: List of usage data reported for each requested hour. + :type timeseries: [UsageTimeSeriesObject], optional + + :param usage_type: Usage type that is being measured. + :type usage_type: HourlyUsageType, optional + """ + if org_name is not unset: + kwargs["org_name"] = org_name + if product_family is not unset: + kwargs["product_family"] = product_family + if public_id is not unset: + kwargs["public_id"] = public_id + if region is not unset: + kwargs["region"] = region + if timeseries is not unset: + kwargs["timeseries"] = timeseries + if usage_type is not unset: + kwargs["usage_type"] = usage_type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_attribution_types_attributes.py b/datadog_api_client/v2/model/usage_attribution_types_attributes.py new file mode 100644 index 0000000000..bdd09e2d96 --- /dev/null +++ b/datadog_api_client/v2/model/usage_attribution_types_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageAttributionTypesAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "values": ([str],), + } + attribute_map = { + "values": "values", + } + + def __init__(self_, values: Union[List[str], UnsetType]=unset, **kwargs): + """ + List of usage attribution types. + + :param values: List of usage attribution types. + :type values: [str], optional + """ + if values is not unset: + kwargs["values"] = values + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_attribution_types_body.py b/datadog_api_client/v2/model/usage_attribution_types_body.py new file mode 100644 index 0000000000..95c87fbe63 --- /dev/null +++ b/datadog_api_client/v2/model/usage_attribution_types_body.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.usage_attribution_types_attributes import UsageAttributionTypesAttributes + from datadog_api_client.v2.model.usage_attribution_types_type import UsageAttributionTypesType + +class UsageAttributionTypesBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.usage_attribution_types_attributes import UsageAttributionTypesAttributes + from datadog_api_client.v2.model.usage_attribution_types_type import UsageAttributionTypesType + return { + "attributes": (UsageAttributionTypesAttributes,), + "id": (str,), + "type": (UsageAttributionTypesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[UsageAttributionTypesAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[UsageAttributionTypesType, UnsetType]=unset, **kwargs): + """ + Usage attribution types data. + + :param attributes: List of usage attribution types. + :type attributes: UsageAttributionTypesAttributes, optional + + :param id: Unique ID of the response. + :type id: str, optional + + :param type: Type of usage attribution types data. + :type type: UsageAttributionTypesType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_attribution_types_response.py b/datadog_api_client/v2/model/usage_attribution_types_response.py new file mode 100644 index 0000000000..3f3a7ca3e5 --- /dev/null +++ b/datadog_api_client/v2/model/usage_attribution_types_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.usage_attribution_types_body import UsageAttributionTypesBody + +class UsageAttributionTypesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.usage_attribution_types_body import UsageAttributionTypesBody + return { + "data": (UsageAttributionTypesBody,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UsageAttributionTypesBody, UnsetType]=unset, **kwargs): + """ + Usage attribution types response. + + :param data: Usage attribution types data. + :type data: UsageAttributionTypesBody, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_attribution_types_type.py b/datadog_api_client/v2/model/usage_attribution_types_type.py new file mode 100644 index 0000000000..160599bb4c --- /dev/null +++ b/datadog_api_client/v2/model/usage_attribution_types_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UsageAttributionTypesType(ModelSimple): + """ + Type of usage attribution types data. + + :param value: If omitted defaults to "usage_attribution_types". Must be one of ["usage_attribution_types"]. + :type value: str + """ + + allowed_values = { + "usage_attribution_types", + } + USAGE_ATTRIBUTION_TYPES: ClassVar["UsageAttributionTypesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UsageAttributionTypesType.USAGE_ATTRIBUTION_TYPES = UsageAttributionTypesType("usage_attribution_types") diff --git a/datadog_api_client/v2/model/usage_data_object.py b/datadog_api_client/v2/model/usage_data_object.py new file mode 100644 index 0000000000..db5abeae29 --- /dev/null +++ b/datadog_api_client/v2/model/usage_data_object.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.usage_attributes_object import UsageAttributesObject + from datadog_api_client.v2.model.usage_time_series_type import UsageTimeSeriesType + +class UsageDataObject(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.usage_attributes_object import UsageAttributesObject + from datadog_api_client.v2.model.usage_time_series_type import UsageTimeSeriesType + return { + "attributes": (UsageAttributesObject,), + "id": (str,), + "type": (UsageTimeSeriesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[UsageAttributesObject, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[UsageTimeSeriesType, UnsetType]=unset, **kwargs): + """ + Usage data. + + :param attributes: Usage attributes data. + :type attributes: UsageAttributesObject, optional + + :param id: Unique ID of the response. + :type id: str, optional + + :param type: Type of usage data. + :type type: UsageTimeSeriesType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_lambda_traced_invocations_response.py b/datadog_api_client/v2/model/usage_lambda_traced_invocations_response.py new file mode 100644 index 0000000000..42b2b566fa --- /dev/null +++ b/datadog_api_client/v2/model/usage_lambda_traced_invocations_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.usage_data_object import UsageDataObject + +class UsageLambdaTracedInvocationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.usage_data_object import UsageDataObject + return { + "data": ([UsageDataObject],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[UsageDataObject], UnsetType]=unset, **kwargs): + """ + Lambda Traced Invocations usage response. + + :param data: Response containing Lambda Traced Invocations usage. + :type data: [UsageDataObject], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_observability_pipelines_response.py b/datadog_api_client/v2/model/usage_observability_pipelines_response.py new file mode 100644 index 0000000000..b1e1c80dae --- /dev/null +++ b/datadog_api_client/v2/model/usage_observability_pipelines_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.usage_data_object import UsageDataObject + +class UsageObservabilityPipelinesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.usage_data_object import UsageDataObject + return { + "data": ([UsageDataObject],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[UsageDataObject], UnsetType]=unset, **kwargs): + """ + Observability Pipelines usage response. + + :param data: Response containing Observability Pipelines usage. + :type data: [UsageDataObject], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_summary_available_fields_attributes.py b/datadog_api_client/v2/model/usage_summary_available_fields_attributes.py new file mode 100644 index 0000000000..ac94f8d609 --- /dev/null +++ b/datadog_api_client/v2/model/usage_summary_available_fields_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageSummaryAvailableFieldsAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "date_fields": ([str],), + "date_org_fields": ([str],), + "response_fields": ([str],), + } + attribute_map = { + "date_fields": "date_fields", + "date_org_fields": "date_org_fields", + "response_fields": "response_fields", + } + + def __init__(self_, date_fields: Union[List[str], UnsetType]=unset, date_org_fields: Union[List[str], UnsetType]=unset, response_fields: Union[List[str], UnsetType]=unset, **kwargs): + """ + The lists of field names returned by ``GET /api/v1/usage/summary`` at each + of its three response levels. Each list contains every key the data endpoint + emits—both typed fields declared in the OpenAPI spec and untyped keys + exposed through ``additionalProperties``. + + :param date_fields: Sorted list of every key returned inside each ``UsageSummaryDate`` + entry of ``usage[]`` (typed fields and ``additionalProperties`` keys + combined). + :type date_fields: [str], optional + + :param date_org_fields: Sorted list of every key returned inside each ``UsageSummaryDateOrg`` + entry of ``usage[].orgs[]`` (typed fields and ``additionalProperties`` + keys combined). + :type date_org_fields: [str], optional + + :param response_fields: Sorted list of every key returned as a direct property of + ``UsageSummaryResponse`` (typed fields and ``additionalProperties`` + keys combined). + :type response_fields: [str], optional + """ + if date_fields is not unset: + kwargs["date_fields"] = date_fields + if date_org_fields is not unset: + kwargs["date_org_fields"] = date_org_fields + if response_fields is not unset: + kwargs["response_fields"] = response_fields + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_summary_available_fields_body.py b/datadog_api_client/v2/model/usage_summary_available_fields_body.py new file mode 100644 index 0000000000..0e0fa2eee4 --- /dev/null +++ b/datadog_api_client/v2/model/usage_summary_available_fields_body.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.usage_summary_available_fields_attributes import UsageSummaryAvailableFieldsAttributes + from datadog_api_client.v2.model.usage_summary_available_fields_type import UsageSummaryAvailableFieldsType + +class UsageSummaryAvailableFieldsBody(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.usage_summary_available_fields_attributes import UsageSummaryAvailableFieldsAttributes + from datadog_api_client.v2.model.usage_summary_available_fields_type import UsageSummaryAvailableFieldsType + return { + "attributes": (UsageSummaryAvailableFieldsAttributes,), + "id": (str,), + "type": (UsageSummaryAvailableFieldsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[UsageSummaryAvailableFieldsAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[UsageSummaryAvailableFieldsType, UnsetType]=unset, **kwargs): + """ + Available-fields data. + + :param attributes: The lists of field names returned by ``GET /api/v1/usage/summary`` at each + of its three response levels. Each list contains every key the data endpoint + emits—both typed fields declared in the OpenAPI spec and untyped keys + exposed through ``additionalProperties``. + :type attributes: UsageSummaryAvailableFieldsAttributes, optional + + :param id: The identifier for the discovery scope. Always ``"all"``. + :type id: str, optional + + :param type: Type of available-fields data. + :type type: UsageSummaryAvailableFieldsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_summary_available_fields_response.py b/datadog_api_client/v2/model/usage_summary_available_fields_response.py new file mode 100644 index 0000000000..daa27d345e --- /dev/null +++ b/datadog_api_client/v2/model/usage_summary_available_fields_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.usage_summary_available_fields_body import UsageSummaryAvailableFieldsBody + +class UsageSummaryAvailableFieldsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.usage_summary_available_fields_body import UsageSummaryAvailableFieldsBody + return { + "data": (UsageSummaryAvailableFieldsBody,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UsageSummaryAvailableFieldsBody, UnsetType]=unset, **kwargs): + """ + Response listing every field name returned by ``GET /api/v1/usage/summary`` + at each of its three response levels. Includes both typed fields and untyped + ``additionalProperties`` keys. + + :param data: Available-fields data. + :type data: UsageSummaryAvailableFieldsBody, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_summary_available_fields_type.py b/datadog_api_client/v2/model/usage_summary_available_fields_type.py new file mode 100644 index 0000000000..d0b6e1aaeb --- /dev/null +++ b/datadog_api_client/v2/model/usage_summary_available_fields_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UsageSummaryAvailableFieldsType(ModelSimple): + """ + Type of available-fields data. + + :param value: If omitted defaults to "usage_summary_available_fields". Must be one of ["usage_summary_available_fields"]. + :type value: str + """ + + allowed_values = { + "usage_summary_available_fields", + } + USAGE_SUMMARY_AVAILABLE_FIELDS: ClassVar["UsageSummaryAvailableFieldsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UsageSummaryAvailableFieldsType.USAGE_SUMMARY_AVAILABLE_FIELDS = UsageSummaryAvailableFieldsType("usage_summary_available_fields") diff --git a/datadog_api_client/v2/model/usage_time_series_object.py b/datadog_api_client/v2/model/usage_time_series_object.py new file mode 100644 index 0000000000..f9787c186c --- /dev/null +++ b/datadog_api_client/v2/model/usage_time_series_object.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UsageTimeSeriesObject(ModelNormal): + @cached_property + def openapi_types(_): + return { + "timestamp": (datetime,), + "value": (int, none_type), + } + attribute_map = { + "timestamp": "timestamp", + "value": "value", + } + + def __init__(self_, timestamp: Union[datetime, UnsetType]=unset, value: Union[int, none_type, UnsetType]=unset, **kwargs): + """ + Usage timeseries data. + + :param timestamp: Datetime in ISO-8601 format, UTC. The hour for the usage. + :type timestamp: datetime, optional + + :param value: Contains the number measured for the given usage_type during the hour. + :type value: int, none_type, optional + """ + if timestamp is not unset: + kwargs["timestamp"] = timestamp + if value is not unset: + kwargs["value"] = value + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/usage_time_series_type.py b/datadog_api_client/v2/model/usage_time_series_type.py new file mode 100644 index 0000000000..561c10ea24 --- /dev/null +++ b/datadog_api_client/v2/model/usage_time_series_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UsageTimeSeriesType(ModelSimple): + """ + Type of usage data. + + :param value: If omitted defaults to "usage_timeseries". Must be one of ["usage_timeseries"]. + :type value: str + """ + + allowed_values = { + "usage_timeseries", + } + USAGE_TIMESERIES: ClassVar["UsageTimeSeriesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UsageTimeSeriesType.USAGE_TIMESERIES = UsageTimeSeriesType("usage_timeseries") diff --git a/datadog_api_client/v2/model/user.py b/datadog_api_client/v2/model/user.py new file mode 100644 index 0000000000..f30351f83b --- /dev/null +++ b/datadog_api_client/v2/model/user.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_attributes import UserAttributes + from datadog_api_client.v2.model.user_response_relationships import UserResponseRelationships + from datadog_api_client.v2.model.users_type import UsersType + +class User(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_attributes import UserAttributes + from datadog_api_client.v2.model.user_response_relationships import UserResponseRelationships + from datadog_api_client.v2.model.users_type import UsersType + return { + "attributes": (UserAttributes,), + "id": (str,), + "relationships": (UserResponseRelationships,), + "type": (UsersType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[UserAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[UserResponseRelationships, UnsetType]=unset, type: Union[UsersType, UnsetType]=unset, **kwargs): + """ + User object returned by the API. + + :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 + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_attributes.py b/datadog_api_client/v2/model/user_attributes.py new file mode 100644 index 0000000000..1638b29d2a --- /dev/null +++ b/datadog_api_client/v2/model/user_attributes.py @@ -0,0 +1,143 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "disabled": (bool,), + "email": (str,), + "handle": (str,), + "icon": (str,), + "last_login_time": (datetime, none_type), + "mfa_enabled": (bool,), + "modified_at": (datetime,), + "name": (str, none_type), + "service_account": (bool,), + "status": (str,), + "title": (str, none_type), + "uuid": (str,), + "verified": (bool,), + } + attribute_map = { + "created_at": "created_at", + "disabled": "disabled", + "email": "email", + "handle": "handle", + "icon": "icon", + "last_login_time": "last_login_time", + "mfa_enabled": "mfa_enabled", + "modified_at": "modified_at", + "name": "name", + "service_account": "service_account", + "status": "status", + "title": "title", + "uuid": "uuid", + "verified": "verified", + } + read_only_vars = { + "last_login_time", + "mfa_enabled", + "uuid", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, disabled: Union[bool, UnsetType]=unset, email: Union[str, UnsetType]=unset, handle: Union[str, UnsetType]=unset, icon: Union[str, UnsetType]=unset, last_login_time: Union[datetime, none_type, UnsetType]=unset, mfa_enabled: Union[bool, UnsetType]=unset, modified_at: Union[datetime, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, service_account: Union[bool, UnsetType]=unset, status: Union[str, UnsetType]=unset, title: Union[str, none_type, UnsetType]=unset, uuid: Union[str, UnsetType]=unset, verified: Union[bool, UnsetType]=unset, **kwargs): + """ + Attributes of user object returned by the API. + + :param created_at: The ISO 8601 timestamp of when the user account was created. + :type created_at: datetime, optional + + :param disabled: Whether the user account is deactivated. Disabled users cannot log in. + :type disabled: bool, optional + + :param email: The email address of the user, used for login and notifications. + :type email: str, optional + + :param handle: The unique handle (username) of the user, typically matching their email prefix. + :type handle: str, optional + + :param icon: URL of the user's profile icon, typically a Gravatar URL derived from the email address. + :type icon: str, optional + + :param last_login_time: The ISO 8601 timestamp of the user's most recent login, or null if the user has never logged in. + :type last_login_time: datetime, none_type, optional + + :param mfa_enabled: Whether multi-factor authentication (MFA) is enabled for the user's account. + :type mfa_enabled: bool, optional + + :param modified_at: The ISO 8601 timestamp of when the user account was last modified. + :type modified_at: datetime, optional + + :param name: The full display name of the user as shown in the Datadog UI. + :type name: str, none_type, optional + + :param service_account: Whether this is a service account rather than a human user. + Service accounts are used for programmatic API access. + :type service_account: bool, optional + + :param status: The current status of the user account (for example, ``Active`` , ``Pending`` , or ``Disabled`` ). + :type status: str, optional + + :param title: The job title of the user (for example, "Senior Engineer" or "Product Manager"). + :type title: str, none_type, optional + + :param uuid: The globally unique identifier (UUID) of the user. + :type uuid: str, optional + + :param verified: Whether the user's email address has been verified. + :type verified: bool, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if disabled is not unset: + kwargs["disabled"] = disabled + if email is not unset: + kwargs["email"] = email + if handle is not unset: + kwargs["handle"] = handle + if icon is not unset: + kwargs["icon"] = icon + if last_login_time is not unset: + kwargs["last_login_time"] = last_login_time + if mfa_enabled is not unset: + kwargs["mfa_enabled"] = mfa_enabled + if modified_at is not unset: + kwargs["modified_at"] = modified_at + if name is not unset: + kwargs["name"] = name + if service_account is not unset: + kwargs["service_account"] = service_account + if status is not unset: + kwargs["status"] = status + if title is not unset: + kwargs["title"] = title + if uuid is not unset: + kwargs["uuid"] = uuid + if verified is not unset: + kwargs["verified"] = verified + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_attributes_status.py b/datadog_api_client/v2/model/user_attributes_status.py new file mode 100644 index 0000000000..e37c201ed1 --- /dev/null +++ b/datadog_api_client/v2/model/user_attributes_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserAttributesStatus(ModelSimple): + """ + The user's status. + + :param value: Must be one of ["active", "deactivated", "pending"]. + :type value: str + """ + + allowed_values = { + "active", + "deactivated", + "pending", + } + ACTIVE: ClassVar["UserAttributesStatus"] + DEACTIVATED: ClassVar["UserAttributesStatus"] + PENDING: ClassVar["UserAttributesStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserAttributesStatus.ACTIVE = UserAttributesStatus("active") +UserAttributesStatus.DEACTIVATED = UserAttributesStatus("deactivated") +UserAttributesStatus.PENDING = UserAttributesStatus("pending") diff --git a/datadog_api_client/v2/model/user_authorized_client_attributes.py b/datadog_api_client/v2/model/user_authorized_client_attributes.py new file mode 100644 index 0000000000..2c51c868f4 --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_attributes.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserAuthorizedClientAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "disabled": (bool,), + "last_exercised": (datetime, none_type), + "modified_at": (datetime,), + "org_disabled": (bool,), + } + attribute_map = { + "created_at": "created_at", + "disabled": "disabled", + "last_exercised": "last_exercised", + "modified_at": "modified_at", + "org_disabled": "org_disabled", + } + + def __init__(self_, created_at: datetime, disabled: bool, last_exercised: Union[datetime, none_type], modified_at: datetime, org_disabled: bool, **kwargs): + """ + Attributes of a user authorized client. + + :param created_at: The date and time this authorization was created. + :type created_at: datetime + + :param disabled: Whether the user has disabled this authorization. + :type disabled: bool + + :param last_exercised: The date and time this authorization was last exercised. + :type last_exercised: datetime, none_type + + :param modified_at: The date and time this authorization was last modified. + :type modified_at: datetime + + :param org_disabled: Whether the organization has disabled this authorization. + :type org_disabled: bool + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.disabled = disabled + self_.last_exercised = last_exercised + self_.modified_at = modified_at + self_.org_disabled = org_disabled diff --git a/datadog_api_client/v2/model/user_authorized_client_data.py b/datadog_api_client/v2/model/user_authorized_client_data.py new file mode 100644 index 0000000000..1032953c95 --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_data.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_attributes import UserAuthorizedClientAttributes + from datadog_api_client.v2.model.user_authorized_client_relationships import UserAuthorizedClientRelationships + from datadog_api_client.v2.model.user_authorized_client_type import UserAuthorizedClientType + +class UserAuthorizedClientData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_attributes import UserAuthorizedClientAttributes + from datadog_api_client.v2.model.user_authorized_client_relationships import UserAuthorizedClientRelationships + from datadog_api_client.v2.model.user_authorized_client_type import UserAuthorizedClientType + return { + "attributes": (UserAuthorizedClientAttributes,), + "id": (str,), + "relationships": (UserAuthorizedClientRelationships,), + "type": (UserAuthorizedClientType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: UserAuthorizedClientAttributes, id: str, relationships: UserAuthorizedClientRelationships, type: UserAuthorizedClientType, **kwargs): + """ + Data object representing a user authorized client. + + :param attributes: Attributes of a user authorized client. + :type attributes: UserAuthorizedClientAttributes + + :param id: The unique identifier of the user authorized client. + :type id: str + + :param relationships: Relationships for a user authorized client. + :type relationships: UserAuthorizedClientRelationships + + :param type: The resource type for user authorized clients. + :type type: UserAuthorizedClientType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/user_authorized_client_relationship_o_auth2_client.py b/datadog_api_client/v2/model/user_authorized_client_relationship_o_auth2_client.py new file mode 100644 index 0000000000..e6a3b3382e --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationship_o_auth2_client.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_relationship_o_auth2_client_data import UserAuthorizedClientRelationshipOAuth2ClientData + +class UserAuthorizedClientRelationshipOAuth2Client(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_relationship_o_auth2_client_data import UserAuthorizedClientRelationshipOAuth2ClientData + return { + "data": (UserAuthorizedClientRelationshipOAuth2ClientData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UserAuthorizedClientRelationshipOAuth2ClientData, **kwargs): + """ + Relationship to the OAuth2 client that was authorized. + + :param data: Data identifying the OAuth2 client that was authorized. + :type data: UserAuthorizedClientRelationshipOAuth2ClientData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/user_authorized_client_relationship_o_auth2_client_data.py b/datadog_api_client/v2/model/user_authorized_client_relationship_o_auth2_client_data.py new file mode 100644 index 0000000000..6c18b679df --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationship_o_auth2_client_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_relationship_o_auth2_client_data_type import UserAuthorizedClientRelationshipOAuth2ClientDataType + +class UserAuthorizedClientRelationshipOAuth2ClientData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_relationship_o_auth2_client_data_type import UserAuthorizedClientRelationshipOAuth2ClientDataType + return { + "id": (str,), + "type": (UserAuthorizedClientRelationshipOAuth2ClientDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserAuthorizedClientRelationshipOAuth2ClientDataType, **kwargs): + """ + Data identifying the OAuth2 client that was authorized. + + :param id: The ID of the OAuth2 client. + :type id: str + + :param type: OAuth2 client resource type. + :type type: UserAuthorizedClientRelationshipOAuth2ClientDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/user_authorized_client_relationship_o_auth2_client_data_type.py b/datadog_api_client/v2/model/user_authorized_client_relationship_o_auth2_client_data_type.py new file mode 100644 index 0000000000..60d84178e9 --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationship_o_auth2_client_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserAuthorizedClientRelationshipOAuth2ClientDataType(ModelSimple): + """ + OAuth2 client resource type. + + :param value: If omitted defaults to "oauth2_clients". Must be one of ["oauth2_clients"]. + :type value: str + """ + + allowed_values = { + "oauth2_clients", + } + OAUTH2_CLIENTS: ClassVar["UserAuthorizedClientRelationshipOAuth2ClientDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserAuthorizedClientRelationshipOAuth2ClientDataType.OAUTH2_CLIENTS = UserAuthorizedClientRelationshipOAuth2ClientDataType("oauth2_clients") diff --git a/datadog_api_client/v2/model/user_authorized_client_relationship_scope_data.py b/datadog_api_client/v2/model/user_authorized_client_relationship_scope_data.py new file mode 100644 index 0000000000..0ba059eef9 --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationship_scope_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_relationship_scope_data_type import UserAuthorizedClientRelationshipScopeDataType + +class UserAuthorizedClientRelationshipScopeData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_relationship_scope_data_type import UserAuthorizedClientRelationshipScopeDataType + return { + "id": (str,), + "type": (UserAuthorizedClientRelationshipScopeDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserAuthorizedClientRelationshipScopeDataType, **kwargs): + """ + Data identifying a scope granted to the OAuth2 client. + + :param id: The identifier of the scope. + :type id: str + + :param type: Scope resource type. + :type type: UserAuthorizedClientRelationshipScopeDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/user_authorized_client_relationship_scope_data_type.py b/datadog_api_client/v2/model/user_authorized_client_relationship_scope_data_type.py new file mode 100644 index 0000000000..e5262c5eff --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationship_scope_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserAuthorizedClientRelationshipScopeDataType(ModelSimple): + """ + Scope resource type. + + :param value: If omitted defaults to "scopes". Must be one of ["scopes"]. + :type value: str + """ + + allowed_values = { + "scopes", + } + SCOPES: ClassVar["UserAuthorizedClientRelationshipScopeDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserAuthorizedClientRelationshipScopeDataType.SCOPES = UserAuthorizedClientRelationshipScopeDataType("scopes") diff --git a/datadog_api_client/v2/model/user_authorized_client_relationship_scopes.py b/datadog_api_client/v2/model/user_authorized_client_relationship_scopes.py new file mode 100644 index 0000000000..791dfad7dd --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationship_scopes.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_relationship_scope_data import UserAuthorizedClientRelationshipScopeData + +class UserAuthorizedClientRelationshipScopes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_relationship_scope_data import UserAuthorizedClientRelationshipScopeData + return { + "data": ([UserAuthorizedClientRelationshipScopeData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[UserAuthorizedClientRelationshipScopeData], **kwargs): + """ + Relationship to the scopes granted to the OAuth2 client. + + :param data: List of scope relationship data objects. + :type data: [UserAuthorizedClientRelationshipScopeData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/user_authorized_client_relationship_user.py b/datadog_api_client/v2/model/user_authorized_client_relationship_user.py new file mode 100644 index 0000000000..467992f144 --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationship_user.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_relationship_user_data import UserAuthorizedClientRelationshipUserData + +class UserAuthorizedClientRelationshipUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_relationship_user_data import UserAuthorizedClientRelationshipUserData + return { + "data": (UserAuthorizedClientRelationshipUserData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UserAuthorizedClientRelationshipUserData, **kwargs): + """ + Relationship to the user who granted this authorization. + + :param data: Data identifying the user who granted this authorization. + :type data: UserAuthorizedClientRelationshipUserData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/user_authorized_client_relationship_user_data.py b/datadog_api_client/v2/model/user_authorized_client_relationship_user_data.py new file mode 100644 index 0000000000..6371798eaa --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationship_user_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_relationship_user_data_type import UserAuthorizedClientRelationshipUserDataType + +class UserAuthorizedClientRelationshipUserData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_relationship_user_data_type import UserAuthorizedClientRelationshipUserDataType + return { + "id": (str,), + "type": (UserAuthorizedClientRelationshipUserDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserAuthorizedClientRelationshipUserDataType, **kwargs): + """ + Data identifying the user who granted this authorization. + + :param id: The ID of the user. + :type id: str + + :param type: User resource type. + :type type: UserAuthorizedClientRelationshipUserDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/user_authorized_client_relationship_user_data_type.py b/datadog_api_client/v2/model/user_authorized_client_relationship_user_data_type.py new file mode 100644 index 0000000000..93ea6346b9 --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationship_user_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserAuthorizedClientRelationshipUserDataType(ModelSimple): + """ + User resource type. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["UserAuthorizedClientRelationshipUserDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserAuthorizedClientRelationshipUserDataType.USERS = UserAuthorizedClientRelationshipUserDataType("users") diff --git a/datadog_api_client/v2/model/user_authorized_client_relationships.py b/datadog_api_client/v2/model/user_authorized_client_relationships.py new file mode 100644 index 0000000000..2bc4ab323e --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_relationships.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_relationship_o_auth2_client import UserAuthorizedClientRelationshipOAuth2Client + from datadog_api_client.v2.model.user_authorized_client_relationship_scopes import UserAuthorizedClientRelationshipScopes + from datadog_api_client.v2.model.user_authorized_client_relationship_user import UserAuthorizedClientRelationshipUser + +class UserAuthorizedClientRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_relationship_o_auth2_client import UserAuthorizedClientRelationshipOAuth2Client + from datadog_api_client.v2.model.user_authorized_client_relationship_scopes import UserAuthorizedClientRelationshipScopes + from datadog_api_client.v2.model.user_authorized_client_relationship_user import UserAuthorizedClientRelationshipUser + return { + "oauth2_client": (UserAuthorizedClientRelationshipOAuth2Client,), + "scopes": (UserAuthorizedClientRelationshipScopes,), + "user": (UserAuthorizedClientRelationshipUser,), + } + attribute_map = { + "oauth2_client": "oauth2_client", + "scopes": "scopes", + "user": "user", + } + + def __init__(self_, oauth2_client: UserAuthorizedClientRelationshipOAuth2Client, scopes: UserAuthorizedClientRelationshipScopes, user: UserAuthorizedClientRelationshipUser, **kwargs): + """ + Relationships for a user authorized client. + + :param oauth2_client: Relationship to the OAuth2 client that was authorized. + :type oauth2_client: UserAuthorizedClientRelationshipOAuth2Client + + :param scopes: Relationship to the scopes granted to the OAuth2 client. + :type scopes: UserAuthorizedClientRelationshipScopes + + :param user: Relationship to the user who granted this authorization. + :type user: UserAuthorizedClientRelationshipUser + """ + super().__init__(kwargs) + + + self_.oauth2_client = oauth2_client + self_.scopes = scopes + self_.user = user diff --git a/datadog_api_client/v2/model/user_authorized_client_response.py b/datadog_api_client/v2/model/user_authorized_client_response.py new file mode 100644 index 0000000000..dd9a44bce8 --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_data import UserAuthorizedClientData + +class UserAuthorizedClientResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_data import UserAuthorizedClientData + return { + "data": (UserAuthorizedClientData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UserAuthorizedClientData, **kwargs): + """ + Response containing a single user authorized client. + + :param data: Data object representing a user authorized client. + :type data: UserAuthorizedClientData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/user_authorized_client_type.py b/datadog_api_client/v2/model/user_authorized_client_type.py new file mode 100644 index 0000000000..7d231a5c2c --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_client_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserAuthorizedClientType(ModelSimple): + """ + The resource type for user authorized clients. + + :param value: If omitted defaults to "user_authorized_clients". Must be one of ["user_authorized_clients"]. + :type value: str + """ + + allowed_values = { + "user_authorized_clients", + } + USER_AUTHORIZED_CLIENTS: ClassVar["UserAuthorizedClientType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserAuthorizedClientType.USER_AUTHORIZED_CLIENTS = UserAuthorizedClientType("user_authorized_clients") diff --git a/datadog_api_client/v2/model/user_authorized_clients_response.py b/datadog_api_client/v2/model/user_authorized_clients_response.py new file mode 100644 index 0000000000..ed2737f0dd --- /dev/null +++ b/datadog_api_client/v2/model/user_authorized_clients_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_authorized_client_data import UserAuthorizedClientData + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + +class UserAuthorizedClientsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_authorized_client_data import UserAuthorizedClientData + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + return { + "data": ([UserAuthorizedClientData],), + "meta": (ResponseMetaAttributes,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: List[UserAuthorizedClientData], meta: ResponseMetaAttributes, **kwargs): + """ + Response containing a list of user authorized clients. + + :param data: List of user authorized client data objects. + :type data: [UserAuthorizedClientData] + + :param meta: Object describing meta attributes of response. + :type meta: ResponseMetaAttributes + """ + super().__init__(kwargs) + + + self_.data = data + self_.meta = meta diff --git a/datadog_api_client/v2/model/user_create_attributes.py b/datadog_api_client/v2/model/user_create_attributes.py new file mode 100644 index 0000000000..7f6e03b311 --- /dev/null +++ b/datadog_api_client/v2/model/user_create_attributes.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserCreateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "email": (str,), + "name": (str,), + "title": (str,), + } + attribute_map = { + "email": "email", + "name": "name", + "title": "title", + } + + def __init__(self_, email: str, name: Union[str, UnsetType]=unset, title: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of the created user. + + :param email: The email of the user. + :type email: str + + :param name: The name of the user. + :type name: str, optional + + :param title: The title of the user. + :type title: str, optional + """ + if name is not unset: + kwargs["name"] = name + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + + self_.email = email diff --git a/datadog_api_client/v2/model/user_create_data.py b/datadog_api_client/v2/model/user_create_data.py new file mode 100644 index 0000000000..a2ab728bed --- /dev/null +++ b/datadog_api_client/v2/model/user_create_data.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_create_attributes import UserCreateAttributes + from datadog_api_client.v2.model.user_relationships import UserRelationships + from datadog_api_client.v2.model.users_type import UsersType + +class UserCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_create_attributes import UserCreateAttributes + from datadog_api_client.v2.model.user_relationships import UserRelationships + from datadog_api_client.v2.model.users_type import UsersType + return { + "attributes": (UserCreateAttributes,), + "relationships": (UserRelationships,), + "type": (UsersType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: UserCreateAttributes, type: UsersType, relationships: Union[UserRelationships, UnsetType]=unset, **kwargs): + """ + Object to create a user. + + :param attributes: Attributes of the created user. + :type attributes: UserCreateAttributes + + :param relationships: Relationships of the user object. + :type relationships: UserRelationships, optional + + :param type: Users resource type. + :type type: UsersType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/user_create_request.py b/datadog_api_client/v2/model/user_create_request.py new file mode 100644 index 0000000000..f6e4e3e30b --- /dev/null +++ b/datadog_api_client/v2/model/user_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_create_data import UserCreateData + +class UserCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_create_data import UserCreateData + return { + "data": (UserCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UserCreateData, **kwargs): + """ + Create a user. + + :param data: Object to create a user. + :type data: UserCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/user_invitation_data.py b/datadog_api_client/v2/model/user_invitation_data.py new file mode 100644 index 0000000000..f854a44526 --- /dev/null +++ b/datadog_api_client/v2/model/user_invitation_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_invitation_relationships import UserInvitationRelationships + from datadog_api_client.v2.model.user_invitations_type import UserInvitationsType + +class UserInvitationData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_invitation_relationships import UserInvitationRelationships + from datadog_api_client.v2.model.user_invitations_type import UserInvitationsType + return { + "relationships": (UserInvitationRelationships,), + "type": (UserInvitationsType,), + } + attribute_map = { + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, relationships: UserInvitationRelationships, type: UserInvitationsType, **kwargs): + """ + Object to create a user invitation. + + :param relationships: Relationships data for user invitation. + :type relationships: UserInvitationRelationships + + :param type: User invitations type. + :type type: UserInvitationsType + """ + super().__init__(kwargs) + + + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/user_invitation_data_attributes.py b/datadog_api_client/v2/model/user_invitation_data_attributes.py new file mode 100644 index 0000000000..f27e816ea0 --- /dev/null +++ b/datadog_api_client/v2/model/user_invitation_data_attributes.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserInvitationDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "expires_at": (datetime,), + "invite_type": (str,), + "uuid": (str,), + } + attribute_map = { + "created_at": "created_at", + "expires_at": "expires_at", + "invite_type": "invite_type", + "uuid": "uuid", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, expires_at: Union[datetime, UnsetType]=unset, invite_type: Union[str, UnsetType]=unset, uuid: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a user invitation. + + :param created_at: Creation time of the user invitation. + :type created_at: datetime, optional + + :param expires_at: Time of invitation expiration. + :type expires_at: datetime, optional + + :param invite_type: Type of invitation. + :type invite_type: str, optional + + :param uuid: UUID of the user invitation. + :type uuid: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if expires_at is not unset: + kwargs["expires_at"] = expires_at + if invite_type is not unset: + kwargs["invite_type"] = invite_type + if uuid is not unset: + kwargs["uuid"] = uuid + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_invitation_relationships.py b/datadog_api_client/v2/model/user_invitation_relationships.py new file mode 100644 index 0000000000..5dffd01028 --- /dev/null +++ b/datadog_api_client/v2/model/user_invitation_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + +class UserInvitationRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser + return { + "user": (RelationshipToUser,), + } + attribute_map = { + "user": "user", + } + + def __init__(self_, user: RelationshipToUser, **kwargs): + """ + Relationships data for user invitation. + + :param user: Relationship to user. + :type user: RelationshipToUser + """ + super().__init__(kwargs) + + + self_.user = user diff --git a/datadog_api_client/v2/model/user_invitation_response.py b/datadog_api_client/v2/model/user_invitation_response.py new file mode 100644 index 0000000000..964aa36bdc --- /dev/null +++ b/datadog_api_client/v2/model/user_invitation_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_invitation_response_data import UserInvitationResponseData + +class UserInvitationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_invitation_response_data import UserInvitationResponseData + return { + "data": (UserInvitationResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[UserInvitationResponseData, UnsetType]=unset, **kwargs): + """ + User invitation as returned by the API. + + :param data: Object of a user invitation returned by the API. + :type data: UserInvitationResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_invitation_response_data.py b/datadog_api_client/v2/model/user_invitation_response_data.py new file mode 100644 index 0000000000..3d2c6ddead --- /dev/null +++ b/datadog_api_client/v2/model/user_invitation_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_invitation_data_attributes import UserInvitationDataAttributes + from datadog_api_client.v2.model.user_invitation_relationships import UserInvitationRelationships + from datadog_api_client.v2.model.user_invitations_type import UserInvitationsType + +class UserInvitationResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_invitation_data_attributes import UserInvitationDataAttributes + from datadog_api_client.v2.model.user_invitation_relationships import UserInvitationRelationships + from datadog_api_client.v2.model.user_invitations_type import UserInvitationsType + return { + "attributes": (UserInvitationDataAttributes,), + "id": (str,), + "relationships": (UserInvitationRelationships,), + "type": (UserInvitationsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: Union[UserInvitationDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, relationships: Union[UserInvitationRelationships, UnsetType]=unset, type: Union[UserInvitationsType, UnsetType]=unset, **kwargs): + """ + Object of a user invitation returned by the API. + + :param attributes: Attributes of a user invitation. + :type attributes: UserInvitationDataAttributes, optional + + :param id: ID of the user invitation. + :type id: str, optional + + :param relationships: Relationships data for user invitation. + :type relationships: UserInvitationRelationships, optional + + :param type: User invitations type. + :type type: UserInvitationsType, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_invitations_request.py b/datadog_api_client/v2/model/user_invitations_request.py new file mode 100644 index 0000000000..0e1e719864 --- /dev/null +++ b/datadog_api_client/v2/model/user_invitations_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_invitation_data import UserInvitationData + +class UserInvitationsRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_invitation_data import UserInvitationData + return { + "data": ([UserInvitationData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[UserInvitationData], **kwargs): + """ + Object to invite users to join the organization. + + :param data: List of user invitations. + :type data: [UserInvitationData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/user_invitations_response.py b/datadog_api_client/v2/model/user_invitations_response.py new file mode 100644 index 0000000000..201bb20a80 --- /dev/null +++ b/datadog_api_client/v2/model/user_invitations_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_invitation_response_data import UserInvitationResponseData + +class UserInvitationsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_invitation_response_data import UserInvitationResponseData + return { + "data": ([UserInvitationResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[UserInvitationResponseData], UnsetType]=unset, **kwargs): + """ + User invitations as returned by the API. + + :param data: Array of user invitations. + :type data: [UserInvitationResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_invitations_type.py b/datadog_api_client/v2/model/user_invitations_type.py new file mode 100644 index 0000000000..f69d33b591 --- /dev/null +++ b/datadog_api_client/v2/model/user_invitations_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserInvitationsType(ModelSimple): + """ + User invitations type. + + :param value: If omitted defaults to "user_invitations". Must be one of ["user_invitations"]. + :type value: str + """ + + allowed_values = { + "user_invitations", + } + USER_INVITATIONS: ClassVar["UserInvitationsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserInvitationsType.USER_INVITATIONS = UserInvitationsType("user_invitations") diff --git a/datadog_api_client/v2/model/user_override_identity_provider_attributes.py b/datadog_api_client/v2/model/user_override_identity_provider_attributes.py new file mode 100644 index 0000000000..4a8a15eb43 --- /dev/null +++ b/datadog_api_client/v2/model/user_override_identity_provider_attributes.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserOverrideIdentityProviderAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "authentication_method": (str,), + } + attribute_map = { + "authentication_method": "authentication_method", + } + + def __init__(self_, authentication_method: str, **kwargs): + """ + Attributes of an identity provider override for a user. + + :param authentication_method: The authentication method used by this identity provider. + :type authentication_method: str + """ + super().__init__(kwargs) + + + self_.authentication_method = authentication_method diff --git a/datadog_api_client/v2/model/user_override_identity_provider_data.py b/datadog_api_client/v2/model/user_override_identity_provider_data.py new file mode 100644 index 0000000000..f3f4014014 --- /dev/null +++ b/datadog_api_client/v2/model/user_override_identity_provider_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_override_identity_provider_attributes import UserOverrideIdentityProviderAttributes + from datadog_api_client.v2.model.user_override_identity_provider_data_type import UserOverrideIdentityProviderDataType + +class UserOverrideIdentityProviderData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_override_identity_provider_attributes import UserOverrideIdentityProviderAttributes + from datadog_api_client.v2.model.user_override_identity_provider_data_type import UserOverrideIdentityProviderDataType + return { + "attributes": (UserOverrideIdentityProviderAttributes,), + "id": (str,), + "type": (UserOverrideIdentityProviderDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: UserOverrideIdentityProviderAttributes, id: str, type: UserOverrideIdentityProviderDataType, **kwargs): + """ + Data object representing a user identity provider override. + + :param attributes: Attributes of an identity provider override for a user. + :type attributes: UserOverrideIdentityProviderAttributes + + :param id: The unique identifier of the identity provider. + :type id: str + + :param type: The resource type for identity providers. + :type type: UserOverrideIdentityProviderDataType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/user_override_identity_provider_data_type.py b/datadog_api_client/v2/model/user_override_identity_provider_data_type.py new file mode 100644 index 0000000000..746b95d885 --- /dev/null +++ b/datadog_api_client/v2/model/user_override_identity_provider_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserOverrideIdentityProviderDataType(ModelSimple): + """ + The resource type for identity providers. + + :param value: If omitted defaults to "identity_providers". Must be one of ["identity_providers"]. + :type value: str + """ + + allowed_values = { + "identity_providers", + } + IDENTITY_PROVIDERS: ClassVar["UserOverrideIdentityProviderDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserOverrideIdentityProviderDataType.IDENTITY_PROVIDERS = UserOverrideIdentityProviderDataType("identity_providers") diff --git a/datadog_api_client/v2/model/user_override_identity_providers_response.py b/datadog_api_client/v2/model/user_override_identity_providers_response.py new file mode 100644 index 0000000000..11358e5506 --- /dev/null +++ b/datadog_api_client/v2/model/user_override_identity_providers_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_override_identity_provider_data import UserOverrideIdentityProviderData + +class UserOverrideIdentityProvidersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_override_identity_provider_data import UserOverrideIdentityProviderData + return { + "data": ([UserOverrideIdentityProviderData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[UserOverrideIdentityProviderData], **kwargs): + """ + Response containing a user's identity provider overrides. + + :param data: List of user identity provider override data objects. + :type data: [UserOverrideIdentityProviderData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/user_relationship_data.py b/datadog_api_client/v2/model/user_relationship_data.py new file mode 100644 index 0000000000..9a2eeec7fd --- /dev/null +++ b/datadog_api_client/v2/model/user_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_resource_type import UserResourceType + +class UserRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_resource_type import UserResourceType + return { + "id": (str,), + "type": (UserResourceType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserResourceType, **kwargs): + """ + Relationship to user object. + + :param id: A unique identifier that represents the user. + :type id: str + + :param type: User resource type. + :type type: UserResourceType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/user_relationship_identity_provider_data.py b/datadog_api_client/v2/model/user_relationship_identity_provider_data.py new file mode 100644 index 0000000000..b6473a79b5 --- /dev/null +++ b/datadog_api_client/v2/model/user_relationship_identity_provider_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_relationship_identity_provider_data_type import UserRelationshipIdentityProviderDataType + +class UserRelationshipIdentityProviderData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_relationship_identity_provider_data_type import UserRelationshipIdentityProviderDataType + return { + "id": (str,), + "type": (UserRelationshipIdentityProviderDataType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserRelationshipIdentityProviderDataType, **kwargs): + """ + Resource identifier for an identity provider in a relationship update. + + :param id: The unique identifier of the identity provider. + :type id: str + + :param type: The resource type for identity providers. + :type type: UserRelationshipIdentityProviderDataType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/user_relationship_identity_provider_data_type.py b/datadog_api_client/v2/model/user_relationship_identity_provider_data_type.py new file mode 100644 index 0000000000..1809e726b3 --- /dev/null +++ b/datadog_api_client/v2/model/user_relationship_identity_provider_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserRelationshipIdentityProviderDataType(ModelSimple): + """ + The resource type for identity providers. + + :param value: If omitted defaults to "identity_providers". Must be one of ["identity_providers"]. + :type value: str + """ + + allowed_values = { + "identity_providers", + } + IDENTITY_PROVIDERS: ClassVar["UserRelationshipIdentityProviderDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserRelationshipIdentityProviderDataType.IDENTITY_PROVIDERS = UserRelationshipIdentityProviderDataType("identity_providers") diff --git a/datadog_api_client/v2/model/user_relationships.py b/datadog_api_client/v2/model/user_relationships.py new file mode 100644 index 0000000000..b0eb534267 --- /dev/null +++ b/datadog_api_client/v2/model/user_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_roles import RelationshipToRoles + +class UserRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_roles import RelationshipToRoles + return { + "roles": (RelationshipToRoles,), + } + attribute_map = { + "roles": "roles", + } + + def __init__(self_, roles: Union[RelationshipToRoles, UnsetType]=unset, **kwargs): + """ + Relationships of the user object. + + :param roles: Relationship to roles. + :type roles: RelationshipToRoles, optional + """ + if roles is not unset: + kwargs["roles"] = roles + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_resource_type.py b/datadog_api_client/v2/model/user_resource_type.py new file mode 100644 index 0000000000..5feb220a35 --- /dev/null +++ b/datadog_api_client/v2/model/user_resource_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserResourceType(ModelSimple): + """ + User resource type. + + :param value: If omitted defaults to "user". Must be one of ["user"]. + :type value: str + """ + + allowed_values = { + "user", + } + USER: ClassVar["UserResourceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserResourceType.USER = UserResourceType("user") diff --git a/datadog_api_client/v2/model/user_response.py b/datadog_api_client/v2/model/user_response.py new file mode 100644 index 0000000000..7f7cbe9343 --- /dev/null +++ b/datadog_api_client/v2/model/user_response.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.user_response_included_item import UserResponseIncludedItem + from datadog_api_client.v2.model.organization import Organization + from datadog_api_client.v2.model.permission import Permission + from datadog_api_client.v2.model.role import Role + +class UserResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.user_response_included_item import UserResponseIncludedItem + return { + "data": (User,), + "included": ([UserResponseIncludedItem],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[User, UnsetType]=unset, included: Union[List[Union[UserResponseIncludedItem, Organization, Permission, Role]], UnsetType]=unset, **kwargs): + """ + Response containing information about a single user. + + :param data: User object returned by the API. + :type data: User, optional + + :param included: Array of objects related to the user. + :type included: [UserResponseIncludedItem], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_response_included_item.py b/datadog_api_client/v2/model/user_response_included_item.py new file mode 100644 index 0000000000..c069a9b9be --- /dev/null +++ b/datadog_api_client/v2/model/user_response_included_item.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserResponseIncludedItem(ModelComposed): + + + + def __init__(self, **kwargs): + """ + An object related to a user. + + :param attributes: Attributes of the organization. + :type attributes: OrganizationAttributes, optional + + :param id: ID of the organization. + :type id: str, optional + + :param type: Organizations resource type. + :type type: OrganizationsType + + :param relationships: Relationships of the role object returned by the API. + :type relationships: RoleResponseRelationships, 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.organization import Organization + from datadog_api_client.v2.model.permission import Permission + from datadog_api_client.v2.model.role import Role + return { + "oneOf": [ + Organization, + Permission, + Role, + ], + } diff --git a/datadog_api_client/v2/model/user_response_relationships.py b/datadog_api_client/v2/model/user_response_relationships.py new file mode 100644 index 0000000000..14c7d7580b --- /dev/null +++ b/datadog_api_client/v2/model/user_response_relationships.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_organization import RelationshipToOrganization + from datadog_api_client.v2.model.relationship_to_organizations import RelationshipToOrganizations + from datadog_api_client.v2.model.relationship_to_users import RelationshipToUsers + from datadog_api_client.v2.model.relationship_to_roles import RelationshipToRoles + +class UserResponseRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_organization import RelationshipToOrganization + from datadog_api_client.v2.model.relationship_to_organizations import RelationshipToOrganizations + from datadog_api_client.v2.model.relationship_to_users import RelationshipToUsers + from datadog_api_client.v2.model.relationship_to_roles import RelationshipToRoles + return { + "org": (RelationshipToOrganization,), + "other_orgs": (RelationshipToOrganizations,), + "other_users": (RelationshipToUsers,), + "roles": (RelationshipToRoles,), + } + attribute_map = { + "org": "org", + "other_orgs": "other_orgs", + "other_users": "other_users", + "roles": "roles", + } + + def __init__(self_, org: Union[RelationshipToOrganization, UnsetType]=unset, other_orgs: Union[RelationshipToOrganizations, UnsetType]=unset, other_users: Union[RelationshipToUsers, UnsetType]=unset, roles: Union[RelationshipToRoles, UnsetType]=unset, **kwargs): + """ + Relationships of the user object returned by the API. + + :param org: Relationship to an organization. + :type org: RelationshipToOrganization, optional + + :param other_orgs: Relationship to organizations. + :type other_orgs: RelationshipToOrganizations, optional + + :param other_users: Relationship to users. + :type other_users: RelationshipToUsers, optional + + :param roles: Relationship to roles. + :type roles: RelationshipToRoles, optional + """ + if org is not unset: + kwargs["org"] = org + if other_orgs is not unset: + kwargs["other_orgs"] = other_orgs + if other_users is not unset: + kwargs["other_users"] = other_users + if roles is not unset: + kwargs["roles"] = roles + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_target.py b/datadog_api_client/v2/model/user_target.py new file mode 100644 index 0000000000..2627259606 --- /dev/null +++ b/datadog_api_client/v2/model/user_target.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_target_type import UserTargetType + +class UserTarget(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_target_type import UserTargetType + return { + "id": (str,), + "type": (UserTargetType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserTargetType, **kwargs): + """ + Represents a user target for an escalation policy step, including the user's ID and resource type. + + :param id: Specifies the unique identifier of the user resource. + :type id: str + + :param type: Indicates that the resource is of type ``users``. + :type type: UserTargetType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/user_target_type.py b/datadog_api_client/v2/model/user_target_type.py new file mode 100644 index 0000000000..317f2ac0b8 --- /dev/null +++ b/datadog_api_client/v2/model/user_target_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserTargetType(ModelSimple): + """ + Indicates that the resource is of type `users`. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["UserTargetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserTargetType.USERS = UserTargetType("users") diff --git a/datadog_api_client/v2/model/user_team.py b/datadog_api_client/v2/model/user_team.py new file mode 100644 index 0000000000..d1318c0d99 --- /dev/null +++ b/datadog_api_client/v2/model/user_team.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_attributes import UserTeamAttributes + from datadog_api_client.v2.model.user_team_relationships import UserTeamRelationships + from datadog_api_client.v2.model.user_team_type import UserTeamType + +class UserTeam(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_attributes import UserTeamAttributes + from datadog_api_client.v2.model.user_team_relationships import UserTeamRelationships + from datadog_api_client.v2.model.user_team_type import UserTeamType + return { + "attributes": (UserTeamAttributes,), + "id": (str,), + "relationships": (UserTeamRelationships,), + "type": (UserTeamType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, id: str, type: UserTeamType, attributes: Union[UserTeamAttributes, UnsetType]=unset, relationships: Union[UserTeamRelationships, UnsetType]=unset, **kwargs): + """ + A user's relationship with a team + + :param attributes: Team membership attributes + :type attributes: UserTeamAttributes, optional + + :param id: The ID of a user's relationship with a team + :type id: str + + :param relationships: Relationship between membership and a user + :type relationships: UserTeamRelationships, optional + + :param type: Team membership type + :type type: UserTeamType + """ + 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/datadog_api_client/v2/model/user_team_attributes.py b/datadog_api_client/v2/model/user_team_attributes.py new file mode 100644 index 0000000000..e8ea1b4788 --- /dev/null +++ b/datadog_api_client/v2/model/user_team_attributes.py @@ -0,0 +1,68 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_role import UserTeamRole + +class UserTeamAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_role import UserTeamRole + return { + "provisioned_by": (str, none_type), + "provisioned_by_id": (str, none_type), + "role": (UserTeamRole,), + } + attribute_map = { + "provisioned_by": "provisioned_by", + "provisioned_by_id": "provisioned_by_id", + "role": "role", + } + read_only_vars = { + "provisioned_by", + "provisioned_by_id", + } + + def __init__(self_, provisioned_by: Union[str, none_type, UnsetType]=unset, provisioned_by_id: Union[str, none_type, UnsetType]=unset, role: Union[UserTeamRole, none_type, UnsetType]=unset, **kwargs): + """ + Team membership attributes + + :param provisioned_by: The mechanism responsible for provisioning the team relationship. + Possible values: null for added by a user, "service_account" if added by a service account, and "saml_mapping" if provisioned via SAML mapping. + :type provisioned_by: str, none_type, optional + + :param provisioned_by_id: UUID of the User or Service Account who provisioned this team membership, or null if provisioned via SAML mapping. + :type provisioned_by_id: str, none_type, optional + + :param role: The user's role within the team + :type role: UserTeamRole, none_type, optional + """ + if provisioned_by is not unset: + kwargs["provisioned_by"] = provisioned_by + if provisioned_by_id is not unset: + kwargs["provisioned_by_id"] = provisioned_by_id + if role is not unset: + kwargs["role"] = role + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_team_create.py b/datadog_api_client/v2/model/user_team_create.py new file mode 100644 index 0000000000..503e4dc1e2 --- /dev/null +++ b/datadog_api_client/v2/model/user_team_create.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_attributes import UserTeamAttributes + from datadog_api_client.v2.model.user_team_relationships import UserTeamRelationships + from datadog_api_client.v2.model.user_team_type import UserTeamType + +class UserTeamCreate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_attributes import UserTeamAttributes + from datadog_api_client.v2.model.user_team_relationships import UserTeamRelationships + from datadog_api_client.v2.model.user_team_type import UserTeamType + return { + "attributes": (UserTeamAttributes,), + "relationships": (UserTeamRelationships,), + "type": (UserTeamType,), + } + attribute_map = { + "attributes": "attributes", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, type: UserTeamType, attributes: Union[UserTeamAttributes, UnsetType]=unset, relationships: Union[UserTeamRelationships, UnsetType]=unset, **kwargs): + """ + A user's relationship with a team + + :param attributes: Team membership attributes + :type attributes: UserTeamAttributes, optional + + :param relationships: Relationship between membership and a user + :type relationships: UserTeamRelationships, optional + + :param type: Team membership type + :type type: UserTeamType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/user_team_included.py b/datadog_api_client/v2/model/user_team_included.py new file mode 100644 index 0000000000..39cd619028 --- /dev/null +++ b/datadog_api_client/v2/model/user_team_included.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserTeamIncluded(ModelComposed): + + + + def __init__(self, **kwargs): + """ + Included resources related to the team membership + + :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.team import Team + return { + "oneOf": [ + User, + Team, + ], + } diff --git a/datadog_api_client/v2/model/user_team_permission.py b/datadog_api_client/v2/model/user_team_permission.py new file mode 100644 index 0000000000..18af91490b --- /dev/null +++ b/datadog_api_client/v2/model/user_team_permission.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_permission_attributes import UserTeamPermissionAttributes + from datadog_api_client.v2.model.user_team_permission_type import UserTeamPermissionType + +class UserTeamPermission(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_permission_attributes import UserTeamPermissionAttributes + from datadog_api_client.v2.model.user_team_permission_type import UserTeamPermissionType + return { + "attributes": (UserTeamPermissionAttributes,), + "id": (str,), + "type": (UserTeamPermissionType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: UserTeamPermissionType, attributes: Union[UserTeamPermissionAttributes, UnsetType]=unset, **kwargs): + """ + A user's permissions for a given team + + :param attributes: User team permission attributes + :type attributes: UserTeamPermissionAttributes, optional + + :param id: The user team permission's identifier + :type id: str + + :param type: User team permission type + :type type: UserTeamPermissionType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/user_team_permission_attributes.py b/datadog_api_client/v2/model/user_team_permission_attributes.py new file mode 100644 index 0000000000..c2600e9575 --- /dev/null +++ b/datadog_api_client/v2/model/user_team_permission_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserTeamPermissionAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "permissions": (dict,), + } + attribute_map = { + "permissions": "permissions", + } + read_only_vars = { + "permissions", + } + + def __init__(self_, permissions: Union[dict, UnsetType]=unset, **kwargs): + """ + User team permission attributes + + :param permissions: Object of team permission actions and boolean values that a logged in user can perform on this team. + :type permissions: dict, optional + """ + if permissions is not unset: + kwargs["permissions"] = permissions + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_team_permission_type.py b/datadog_api_client/v2/model/user_team_permission_type.py new file mode 100644 index 0000000000..ebc024a6ab --- /dev/null +++ b/datadog_api_client/v2/model/user_team_permission_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserTeamPermissionType(ModelSimple): + """ + User team permission type + + :param value: If omitted defaults to "user_team_permissions". Must be one of ["user_team_permissions"]. + :type value: str + """ + + allowed_values = { + "user_team_permissions", + } + USER_TEAM_PERMISSIONS: ClassVar["UserTeamPermissionType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserTeamPermissionType.USER_TEAM_PERMISSIONS = UserTeamPermissionType("user_team_permissions") diff --git a/datadog_api_client/v2/model/user_team_relationships.py b/datadog_api_client/v2/model/user_team_relationships.py new file mode 100644 index 0000000000..02c9f9efd8 --- /dev/null +++ b/datadog_api_client/v2/model/user_team_relationships.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.relationship_to_user_team_team import RelationshipToUserTeamTeam + from datadog_api_client.v2.model.relationship_to_user_team_user import RelationshipToUserTeamUser + +class UserTeamRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.relationship_to_user_team_team import RelationshipToUserTeamTeam + from datadog_api_client.v2.model.relationship_to_user_team_user import RelationshipToUserTeamUser + return { + "team": (RelationshipToUserTeamTeam,), + "user": (RelationshipToUserTeamUser,), + } + attribute_map = { + "team": "team", + "user": "user", + } + + def __init__(self_, team: Union[RelationshipToUserTeamTeam, UnsetType]=unset, user: Union[RelationshipToUserTeamUser, UnsetType]=unset, **kwargs): + """ + Relationship between membership and a user + + :param team: Relationship between team membership and team + :type team: RelationshipToUserTeamTeam, optional + + :param user: Relationship between team membership and user + :type user: RelationshipToUserTeamUser, optional + """ + if team is not unset: + kwargs["team"] = team + if user is not unset: + kwargs["user"] = user + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_team_request.py b/datadog_api_client/v2/model/user_team_request.py new file mode 100644 index 0000000000..403ebd6656 --- /dev/null +++ b/datadog_api_client/v2/model/user_team_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_create import UserTeamCreate + +class UserTeamRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_create import UserTeamCreate + return { + "data": (UserTeamCreate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UserTeamCreate, **kwargs): + """ + Team membership request + + :param data: A user's relationship with a team + :type data: UserTeamCreate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/user_team_response.py b/datadog_api_client/v2/model/user_team_response.py new file mode 100644 index 0000000000..804102d348 --- /dev/null +++ b/datadog_api_client/v2/model/user_team_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team import UserTeam + from datadog_api_client.v2.model.user_team_included import UserTeamIncluded + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.team import Team + +class UserTeamResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team import UserTeam + from datadog_api_client.v2.model.user_team_included import UserTeamIncluded + return { + "data": (UserTeam,), + "included": ([UserTeamIncluded],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: Union[UserTeam, UnsetType]=unset, included: Union[List[Union[UserTeamIncluded, User, Team]], UnsetType]=unset, **kwargs): + """ + Team membership response + + :param data: A user's relationship with a team + :type data: UserTeam, optional + + :param included: Resources related to the team memberships + :type included: [UserTeamIncluded], optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_team_role.py b/datadog_api_client/v2/model/user_team_role.py new file mode 100644 index 0000000000..efec7f3e40 --- /dev/null +++ b/datadog_api_client/v2/model/user_team_role.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserTeamRole(ModelSimple): + """ + The user's role within the team + + :param value: If omitted defaults to "admin". Must be one of ["admin"]. + :type value: str + """ + + allowed_values = { + "admin", + } + ADMIN: ClassVar["UserTeamRole"] + + + _nullable = True + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserTeamRole.ADMIN = UserTeamRole("admin") diff --git a/datadog_api_client/v2/model/user_team_team_type.py b/datadog_api_client/v2/model/user_team_team_type.py new file mode 100644 index 0000000000..ea7fb7a47a --- /dev/null +++ b/datadog_api_client/v2/model/user_team_team_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserTeamTeamType(ModelSimple): + """ + User team team type + + :param value: If omitted defaults to "team". Must be one of ["team"]. + :type value: str + """ + + allowed_values = { + "team", + } + TEAM: ClassVar["UserTeamTeamType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserTeamTeamType.TEAM = UserTeamTeamType("team") diff --git a/datadog_api_client/v2/model/user_team_type.py b/datadog_api_client/v2/model/user_team_type.py new file mode 100644 index 0000000000..32a3a43a8d --- /dev/null +++ b/datadog_api_client/v2/model/user_team_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserTeamType(ModelSimple): + """ + Team membership type + + :param value: If omitted defaults to "team_memberships". Must be one of ["team_memberships"]. + :type value: str + """ + + allowed_values = { + "team_memberships", + } + TEAM_MEMBERSHIPS: ClassVar["UserTeamType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserTeamType.TEAM_MEMBERSHIPS = UserTeamType("team_memberships") diff --git a/datadog_api_client/v2/model/user_team_update.py b/datadog_api_client/v2/model/user_team_update.py new file mode 100644 index 0000000000..41c11bc623 --- /dev/null +++ b/datadog_api_client/v2/model/user_team_update.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_attributes import UserTeamAttributes + from datadog_api_client.v2.model.user_team_type import UserTeamType + +class UserTeamUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_attributes import UserTeamAttributes + from datadog_api_client.v2.model.user_team_type import UserTeamType + return { + "attributes": (UserTeamAttributes,), + "type": (UserTeamType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, type: UserTeamType, attributes: Union[UserTeamAttributes, UnsetType]=unset, **kwargs): + """ + A user's relationship with a team + + :param attributes: Team membership attributes + :type attributes: UserTeamAttributes, optional + + :param type: Team membership type + :type type: UserTeamType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/user_team_update_request.py b/datadog_api_client/v2/model/user_team_update_request.py new file mode 100644 index 0000000000..c76d88f07e --- /dev/null +++ b/datadog_api_client/v2/model/user_team_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team_update import UserTeamUpdate + +class UserTeamUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team_update import UserTeamUpdate + return { + "data": (UserTeamUpdate,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UserTeamUpdate, **kwargs): + """ + Team membership request + + :param data: A user's relationship with a team + :type data: UserTeamUpdate + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/user_team_user_type.py b/datadog_api_client/v2/model/user_team_user_type.py new file mode 100644 index 0000000000..258975bb7f --- /dev/null +++ b/datadog_api_client/v2/model/user_team_user_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UserTeamUserType(ModelSimple): + """ + User team user type + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["UserTeamUserType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UserTeamUserType.USERS = UserTeamUserType("users") diff --git a/datadog_api_client/v2/model/user_teams_response.py b/datadog_api_client/v2/model/user_teams_response.py new file mode 100644 index 0000000000..66a0a00817 --- /dev/null +++ b/datadog_api_client/v2/model/user_teams_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_team import UserTeam + from datadog_api_client.v2.model.user_team_included import UserTeamIncluded + from datadog_api_client.v2.model.teams_response_links import TeamsResponseLinks + from datadog_api_client.v2.model.teams_response_meta import TeamsResponseMeta + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.team import Team + +class UserTeamsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_team import UserTeam + from datadog_api_client.v2.model.user_team_included import UserTeamIncluded + from datadog_api_client.v2.model.teams_response_links import TeamsResponseLinks + from datadog_api_client.v2.model.teams_response_meta import TeamsResponseMeta + return { + "data": ([UserTeam],), + "included": ([UserTeamIncluded],), + "links": (TeamsResponseLinks,), + "meta": (TeamsResponseMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "links": "links", + "meta": "meta", + } + + def __init__(self_, data: Union[List[UserTeam], UnsetType]=unset, included: Union[List[Union[UserTeamIncluded, User, Team]], UnsetType]=unset, links: Union[TeamsResponseLinks, UnsetType]=unset, meta: Union[TeamsResponseMeta, UnsetType]=unset, **kwargs): + """ + Team memberships response + + :param data: Team memberships response data + :type data: [UserTeam], optional + + :param included: Resources related to the team memberships + :type included: [UserTeamIncluded], optional + + :param links: Teams response links. + :type links: TeamsResponseLinks, optional + + :param meta: Teams response metadata. + :type meta: TeamsResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if links is not unset: + kwargs["links"] = links + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_update_attributes.py b/datadog_api_client/v2/model/user_update_attributes.py new file mode 100644 index 0000000000..c67094aebe --- /dev/null +++ b/datadog_api_client/v2/model/user_update_attributes.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class UserUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "disabled": (bool,), + "email": (str,), + "name": (str,), + "title": (str, none_type), + } + attribute_map = { + "disabled": "disabled", + "email": "email", + "name": "name", + "title": "title", + } + + def __init__(self_, disabled: Union[bool, UnsetType]=unset, email: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, title: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of the edited user. + + :param disabled: When set to ``true`` , the user is deactivated and can no longer log in. + When ``false`` , the user is active. + :type disabled: bool, optional + + :param email: The email address of the user, used for login and notifications. + Must be a valid email format. + :type email: str, optional + + :param name: The full display name of the user as shown in the Datadog UI. + Maximum 55 characters, cannot contain ``<`` or ``>``. + :type name: str, optional + + :param title: The job title of the user (for example, "Senior Engineer" or "Product Manager"). + :type title: str, none_type, optional + """ + if disabled is not unset: + kwargs["disabled"] = disabled + if email is not unset: + kwargs["email"] = email + if name is not unset: + kwargs["name"] = name + if title is not unset: + kwargs["title"] = title + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/user_update_data.py b/datadog_api_client/v2/model/user_update_data.py new file mode 100644 index 0000000000..5aedcda0a2 --- /dev/null +++ b/datadog_api_client/v2/model/user_update_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_update_attributes import UserUpdateAttributes + from datadog_api_client.v2.model.users_type import UsersType + +class UserUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_update_attributes import UserUpdateAttributes + from datadog_api_client.v2.model.users_type import UsersType + return { + "attributes": (UserUpdateAttributes,), + "id": (str,), + "type": (UsersType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: UserUpdateAttributes, id: str, type: UsersType, **kwargs): + """ + Object to update a user. + + :param attributes: Attributes of the edited user. + :type attributes: UserUpdateAttributes + + :param id: ID of the user. + :type id: str + + :param type: Users resource type. + :type type: UsersType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/user_update_request.py b/datadog_api_client/v2/model/user_update_request.py new file mode 100644 index 0000000000..6a08e940ad --- /dev/null +++ b/datadog_api_client/v2/model/user_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_update_data import UserUpdateData + +class UserUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_update_data import UserUpdateData + return { + "data": (UserUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: UserUpdateData, **kwargs): + """ + Update a user. + + :param data: Object to update a user. + :type data: UserUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/users_relationship.py b/datadog_api_client/v2/model/users_relationship.py new file mode 100644 index 0000000000..9596d94f1e --- /dev/null +++ b/datadog_api_client/v2/model/users_relationship.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user_relationship_data import UserRelationshipData + +class UsersRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user_relationship_data import UserRelationshipData + return { + "data": ([UserRelationshipData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[UserRelationshipData], **kwargs): + """ + Relationship to users. + + :param data: Relationships to user objects. + :type data: [UserRelationshipData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/users_response.py b/datadog_api_client/v2/model/users_response.py new file mode 100644 index 0000000000..be120b3df4 --- /dev/null +++ b/datadog_api_client/v2/model/users_response.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.user_response_included_item import UserResponseIncludedItem + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + from datadog_api_client.v2.model.organization import Organization + from datadog_api_client.v2.model.permission import Permission + from datadog_api_client.v2.model.role import Role + +class UsersResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.user import User + from datadog_api_client.v2.model.user_response_included_item import UserResponseIncludedItem + from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes + return { + "data": ([User],), + "included": ([UserResponseIncludedItem],), + "meta": (ResponseMetaAttributes,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: Union[List[User], UnsetType]=unset, included: Union[List[Union[UserResponseIncludedItem, Organization, Permission, Role]], UnsetType]=unset, meta: Union[ResponseMetaAttributes, UnsetType]=unset, **kwargs): + """ + Response containing information about multiple users. + + :param data: Array of returned users. + :type data: [User], optional + + :param included: Array of objects related to the users. + :type included: [UserResponseIncludedItem], optional + + :param meta: Object describing meta attributes of response. + :type meta: ResponseMetaAttributes, optional + """ + if data is not unset: + kwargs["data"] = data + if included is not unset: + kwargs["included"] = included + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/users_type.py b/datadog_api_client/v2/model/users_type.py new file mode 100644 index 0000000000..59ae6b6131 --- /dev/null +++ b/datadog_api_client/v2/model/users_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class UsersType(ModelSimple): + """ + Users resource type. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["UsersType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +UsersType.USERS = UsersType("users") diff --git a/datadog_api_client/v2/model/v2_event.py b/datadog_api_client/v2/model/v2_event.py new file mode 100644 index 0000000000..be78690343 --- /dev/null +++ b/datadog_api_client/v2/model/v2_event.py @@ -0,0 +1,65 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.v2_event_attributes import V2EventAttributes + from datadog_api_client.v2.model.change_event_attributes import ChangeEventAttributes + from datadog_api_client.v2.model.alert_event_attributes import AlertEventAttributes + +class V2Event(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.v2_event_attributes import V2EventAttributes + return { + "attributes": (V2EventAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: Union[V2EventAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, type: Union[str, UnsetType]=unset, **kwargs): + """ + An event object. + + :param attributes: Event attributes. + :type attributes: V2EventAttributes, optional + + :param id: The event's ID. + :type id: str, optional + + :param type: Entity type. + :type type: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/v2_event_attributes.py b/datadog_api_client/v2/model/v2_event_attributes.py new file mode 100644 index 0000000000..7089fd26b2 --- /dev/null +++ b/datadog_api_client/v2/model/v2_event_attributes.py @@ -0,0 +1,72 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.v2_event_attributes_attributes import V2EventAttributesAttributes + from datadog_api_client.v2.model.change_event_attributes import ChangeEventAttributes + from datadog_api_client.v2.model.alert_event_attributes import AlertEventAttributes + +class V2EventAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.v2_event_attributes_attributes import V2EventAttributesAttributes + return { + "attributes": (V2EventAttributesAttributes,), + "message": (str,), + "tags": ([str],), + "timestamp": (str,), + } + attribute_map = { + "attributes": "attributes", + "message": "message", + "tags": "tags", + "timestamp": "timestamp", + } + + def __init__(self_, attributes: Union[V2EventAttributesAttributes, ChangeEventAttributes, AlertEventAttributes, UnsetType]=unset, message: Union[str, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, timestamp: Union[str, UnsetType]=unset, **kwargs): + """ + Event attributes. + + :param attributes: JSON object for category-specific attributes. + :type attributes: V2EventAttributesAttributes, optional + + :param message: Free-form text associated with the event. + :type message: str, optional + + :param tags: A list of tags associated with the event. + :type tags: [str], optional + + :param timestamp: Timestamp when the event occurred. + :type timestamp: str, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if message is not unset: + kwargs["message"] = message + if tags is not unset: + kwargs["tags"] = tags + if timestamp is not unset: + kwargs["timestamp"] = timestamp + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/v2_event_attributes_attributes.py b/datadog_api_client/v2/model/v2_event_attributes_attributes.py new file mode 100644 index 0000000000..0d36dbb9ac --- /dev/null +++ b/datadog_api_client/v2/model/v2_event_attributes_attributes.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class V2EventAttributesAttributes(ModelComposed): + + + + def __init__(self, **kwargs): + """ + JSON object for category-specific attributes. + + :param aggregation_key: Aggregation key of the event. + :type aggregation_key: str, optional + + :param author: The entity that made the change. + :type author: ChangeEventAttributesAuthor, optional + + :param change_metadata: JSON object of change metadata. + :type change_metadata: dict, optional + + :param changed_resource: A uniquely identified resource. + :type changed_resource: ChangeEventAttributesChangedResource, optional + + :param evt: JSON object of event system attributes. + :type evt: EventSystemAttributes, optional + + :param impacted_resources: A list of resources impacted by this change. + :type impacted_resources: [ChangeEventAttributesImpactedResourcesItem], optional + + :param new_value: The new state of the changed resource. + :type new_value: dict, optional + + :param prev_value: The previous state of the changed resource. + :type prev_value: dict, optional + + :param service: Service that triggered the event. + :type service: str, optional + + :param timestamp: POSIX timestamp of the event. + :type timestamp: int, optional + + :param title: The title of the event. + :type title: str, optional + + :param custom: JSON object of custom attributes. + :type custom: dict, optional + + :param links: The links related to the event. + :type links: [AlertEventAttributesLinksItem], optional + + :param priority: The priority of the alert. + :type priority: AlertEventAttributesPriority, optional + + :param status: The status of the alert. + :type status: AlertEventAttributesStatus, 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.change_event_attributes import ChangeEventAttributes + from datadog_api_client.v2.model.alert_event_attributes import AlertEventAttributes + return { + "oneOf": [ + ChangeEventAttributes, + AlertEventAttributes, + ], + } diff --git a/datadog_api_client/v2/model/v2_event_response.py b/datadog_api_client/v2/model/v2_event_response.py new file mode 100644 index 0000000000..ba73042d9e --- /dev/null +++ b/datadog_api_client/v2/model/v2_event_response.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.v2_event import V2Event + from datadog_api_client.v2.model.change_event_attributes import ChangeEventAttributes + from datadog_api_client.v2.model.alert_event_attributes import AlertEventAttributes + +class V2EventResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.v2_event import V2Event + return { + "data": (V2Event,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[V2Event, UnsetType]=unset, **kwargs): + """ + Get an event response. + + :param data: An event object. + :type data: V2Event, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/validate_api_key_response.py b/datadog_api_client/v2/model/validate_api_key_response.py new file mode 100644 index 0000000000..7fdb94b5c0 --- /dev/null +++ b/datadog_api_client/v2/model/validate_api_key_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.validate_api_key_status import ValidateAPIKeyStatus + +class ValidateAPIKeyResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.validate_api_key_status import ValidateAPIKeyStatus + return { + "status": (ValidateAPIKeyStatus,), + } + attribute_map = { + "status": "status", + } + + def __init__(self_, status: ValidateAPIKeyStatus, **kwargs): + """ + Response object for the API and application key validation status check. + + :param status: Status of the validation. Always ``ok`` when both the API key and the application key are valid. + :type status: ValidateAPIKeyStatus + """ + super().__init__(kwargs) + + + self_.status = status diff --git a/datadog_api_client/v2/model/validate_api_key_status.py b/datadog_api_client/v2/model/validate_api_key_status.py new file mode 100644 index 0000000000..f21eaec8f9 --- /dev/null +++ b/datadog_api_client/v2/model/validate_api_key_status.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ValidateAPIKeyStatus(ModelSimple): + """ + Status of the validation. Always `ok` when both the API key and the application key are valid. + + :param value: If omitted defaults to "ok". Must be one of ["ok"]. + :type value: str + """ + + allowed_values = { + "ok", + } + OK: ClassVar["ValidateAPIKeyStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ValidateAPIKeyStatus.OK = ValidateAPIKeyStatus("ok") diff --git a/datadog_api_client/v2/model/validate_v2_attributes.py b/datadog_api_client/v2/model/validate_v2_attributes.py new file mode 100644 index 0000000000..df9d2eeee9 --- /dev/null +++ b/datadog_api_client/v2/model/validate_v2_attributes.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ValidateV2Attributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "api_key_id": (str,), + "api_key_scopes": ([str],), + "valid": (bool,), + } + attribute_map = { + "api_key_id": "api_key_id", + "api_key_scopes": "api_key_scopes", + "valid": "valid", + } + + def __init__(self_, api_key_id: str, api_key_scopes: List[str], valid: bool, **kwargs): + """ + Attributes of the API key validation response. + + :param api_key_id: The UUID of the API key. + :type api_key_id: str + + :param api_key_scopes: List of scope names associated with the API key. + :type api_key_scopes: [str] + + :param valid: Whether the API key is valid. + :type valid: bool + """ + super().__init__(kwargs) + + + self_.api_key_id = api_key_id + self_.api_key_scopes = api_key_scopes + self_.valid = valid diff --git a/datadog_api_client/v2/model/validate_v2_data.py b/datadog_api_client/v2/model/validate_v2_data.py new file mode 100644 index 0000000000..b2142fce68 --- /dev/null +++ b/datadog_api_client/v2/model/validate_v2_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.validate_v2_attributes import ValidateV2Attributes + from datadog_api_client.v2.model.validate_v2_type import ValidateV2Type + +class ValidateV2Data(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.validate_v2_attributes import ValidateV2Attributes + from datadog_api_client.v2.model.validate_v2_type import ValidateV2Type + return { + "attributes": (ValidateV2Attributes,), + "id": (str,), + "type": (ValidateV2Type,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: ValidateV2Attributes, id: str, type: ValidateV2Type, **kwargs): + """ + Data object containing the API key validation result. + + :param attributes: Attributes of the API key validation response. + :type attributes: ValidateV2Attributes + + :param id: The UUID of the organization associated with the API key. + :type id: str + + :param type: Resource type for the API key validation response. + :type type: ValidateV2Type + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/validate_v2_response.py b/datadog_api_client/v2/model/validate_v2_response.py new file mode 100644 index 0000000000..5d200b92f7 --- /dev/null +++ b/datadog_api_client/v2/model/validate_v2_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.validate_v2_data import ValidateV2Data + +class ValidateV2Response(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.validate_v2_data import ValidateV2Data + return { + "data": (ValidateV2Data,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: ValidateV2Data, **kwargs): + """ + Response for the API key validation endpoint. + + :param data: Data object containing the API key validation result. + :type data: ValidateV2Data + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/validate_v2_type.py b/datadog_api_client/v2/model/validate_v2_type.py new file mode 100644 index 0000000000..8bb288ec84 --- /dev/null +++ b/datadog_api_client/v2/model/validate_v2_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ValidateV2Type(ModelSimple): + """ + Resource type for the API key validation response. + + :param value: If omitted defaults to "validate_v2". Must be one of ["validate_v2"]. + :type value: str + """ + + allowed_values = { + "validate_v2", + } + ValidateV2: ClassVar["ValidateV2Type"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ValidateV2Type.ValidateV2 = ValidateV2Type("validate_v2") diff --git a/datadog_api_client/v2/model/validation_error.py b/datadog_api_client/v2/model/validation_error.py new file mode 100644 index 0000000000..2179a4d3a3 --- /dev/null +++ b/datadog_api_client/v2/model/validation_error.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.validation_error_meta import ValidationErrorMeta + +class ValidationError(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.validation_error_meta import ValidationErrorMeta + return { + "meta": (ValidationErrorMeta,), + "title": (str,), + } + attribute_map = { + "meta": "meta", + "title": "title", + } + + def __init__(self_, meta: ValidationErrorMeta, title: str, **kwargs): + """ + Represents a single validation error, including a human-readable title and metadata. + + :param meta: Describes additional metadata for validation errors, including field names and error messages. + :type meta: ValidationErrorMeta + + :param title: A short, human-readable summary of the error. + :type title: str + """ + super().__init__(kwargs) + + + self_.meta = meta + self_.title = title diff --git a/datadog_api_client/v2/model/validation_error_meta.py b/datadog_api_client/v2/model/validation_error_meta.py new file mode 100644 index 0000000000..4da26ab3a1 --- /dev/null +++ b/datadog_api_client/v2/model/validation_error_meta.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ValidationErrorMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "field": (str,), + "id": (str,), + "message": (str,), + } + attribute_map = { + "field": "field", + "id": "id", + "message": "message", + } + + def __init__(self_, message: str, field: Union[str, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Describes additional metadata for validation errors, including field names and error messages. + + :param field: The field name that caused the error. + :type field: str, optional + + :param id: The ID of the component in which the error occurred. + :type id: str, optional + + :param message: The detailed error message. + :type message: str + """ + if field is not unset: + kwargs["field"] = field + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.message = message diff --git a/datadog_api_client/v2/model/validation_response.py b/datadog_api_client/v2/model/validation_response.py new file mode 100644 index 0000000000..09aacaaf2f --- /dev/null +++ b/datadog_api_client/v2/model/validation_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.validation_error import ValidationError + +class ValidationResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.validation_error import ValidationError + return { + "errors": ([ValidationError],), + } + attribute_map = { + "errors": "errors", + } + + def __init__(self_, errors: Union[List[ValidationError], UnsetType]=unset, **kwargs): + """ + Response containing validation errors. + + :param errors: The ``ValidationResponse`` ``errors``. + :type errors: [ValidationError], optional + """ + if errors is not unset: + kwargs["errors"] = errors + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/value_type.py b/datadog_api_client/v2/model/value_type.py new file mode 100644 index 0000000000..33a398d46c --- /dev/null +++ b/datadog_api_client/v2/model/value_type.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ValueType(ModelSimple): + """ + The type of values for the feature flag variants. + + :param value: Must be one of ["BOOLEAN", "INTEGER", "NUMERIC", "STRING", "JSON"]. + :type value: str + """ + + allowed_values = { + "BOOLEAN", + "INTEGER", + "NUMERIC", + "STRING", + "JSON", + } + BOOLEAN: ClassVar["ValueType"] + INTEGER: ClassVar["ValueType"] + NUMERIC: ClassVar["ValueType"] + STRING: ClassVar["ValueType"] + JSON: ClassVar["ValueType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ValueType.BOOLEAN = ValueType("BOOLEAN") +ValueType.INTEGER = ValueType("INTEGER") +ValueType.NUMERIC = ValueType("NUMERIC") +ValueType.STRING = ValueType("STRING") +ValueType.JSON = ValueType("JSON") diff --git a/datadog_api_client/v2/model/variant.py b/datadog_api_client/v2/model/variant.py new file mode 100644 index 0000000000..49ff1a8f87 --- /dev/null +++ b/datadog_api_client/v2/model/variant.py @@ -0,0 +1,77 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class Variant(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_at": (datetime,), + "id": (UUID,), + "key": (str,), + "name": (str,), + "updated_at": (datetime,), + "value": (str,), + } + attribute_map = { + "created_at": "created_at", + "id": "id", + "key": "key", + "name": "name", + "updated_at": "updated_at", + "value": "value", + } + + def __init__(self_, id: UUID, key: str, name: str, value: str, created_at: Union[datetime, UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + A variant of a feature flag. + + :param created_at: The timestamp when the variant was created. + :type created_at: datetime, optional + + :param id: The unique identifier of the variant. + :type id: UUID + + :param key: The unique key of the variant. + :type key: str + + :param name: The name of the variant. + :type name: str + + :param updated_at: The timestamp when the variant was last updated. + :type updated_at: datetime, optional + + :param value: The value of the variant as a string. + :type value: str + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.id = id + self_.key = key + self_.name = name + self_.value = value diff --git a/datadog_api_client/v2/model/variant_weight.py b/datadog_api_client/v2/model/variant_weight.py new file mode 100644 index 0000000000..72a8ef8876 --- /dev/null +++ b/datadog_api_client/v2/model/variant_weight.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.variant import Variant + +class VariantWeight(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.variant import Variant + return { + "created_at": (datetime,), + "id": (UUID,), + "updated_at": (datetime,), + "value": (float,), + "variant": (Variant,), + "variant_id": (UUID,), + } + attribute_map = { + "created_at": "created_at", + "id": "id", + "updated_at": "updated_at", + "value": "value", + "variant": "variant", + "variant_id": "variant_id", + } + + def __init__(self_, value: float, variant_id: UUID, created_at: Union[datetime, UnsetType]=unset, id: Union[UUID, UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, variant: Union[Variant, UnsetType]=unset, **kwargs): + """ + Variant weight details. + + :param created_at: The timestamp when the variant weight was created. + :type created_at: datetime, optional + + :param id: Unique identifier of the variant weight assignment. + :type id: UUID, optional + + :param updated_at: The timestamp when the variant weight was last updated. + :type updated_at: datetime, optional + + :param value: The percentage weight for the variant. + :type value: float + + :param variant: A variant of a feature flag. + :type variant: Variant, optional + + :param variant_id: The variant ID. + :type variant_id: UUID + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if id is not unset: + kwargs["id"] = id + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if variant is not unset: + kwargs["variant"] = variant + super().__init__(kwargs) + + + self_.value = value + self_.variant_id = variant_id diff --git a/datadog_api_client/v2/model/variant_weight_request.py b/datadog_api_client/v2/model/variant_weight_request.py new file mode 100644 index 0000000000..3eb486603e --- /dev/null +++ b/datadog_api_client/v2/model/variant_weight_request.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class VariantWeightRequest(ModelNormal): + @cached_property + def openapi_types(_): + return { + "value": (float,), + "variant_id": (UUID,), + "variant_key": (str,), + } + attribute_map = { + "value": "value", + "variant_id": "variant_id", + "variant_key": "variant_key", + } + + def __init__(self_, value: float, variant_id: Union[UUID, UnsetType]=unset, variant_key: Union[str, UnsetType]=unset, **kwargs): + """ + Variant weight request payload. + + :param value: The percentage weight for this variant. + :type value: float + + :param variant_id: The variant ID to assign weight to. + :type variant_id: UUID, optional + + :param variant_key: The variant key to assign weight to. + :type variant_key: str, optional + """ + if variant_id is not unset: + kwargs["variant_id"] = variant_id + if variant_key is not unset: + kwargs["variant_key"] = variant_key + super().__init__(kwargs) + + + self_.value = value diff --git a/datadog_api_client/v2/model/version_history_update.py b/datadog_api_client/v2/model/version_history_update.py new file mode 100644 index 0000000000..7f9f3b60a1 --- /dev/null +++ b/datadog_api_client/v2/model/version_history_update.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.version_history_update_type import VersionHistoryUpdateType + +class VersionHistoryUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.version_history_update_type import VersionHistoryUpdateType + return { + "change": (str,), + "field": (str,), + "type": (VersionHistoryUpdateType,), + } + attribute_map = { + "change": "change", + "field": "field", + "type": "type", + } + + def __init__(self_, change: Union[str, UnsetType]=unset, field: Union[str, UnsetType]=unset, type: Union[VersionHistoryUpdateType, UnsetType]=unset, **kwargs): + """ + A change in a rule version. + + :param change: The new value of the field. + :type change: str, optional + + :param field: The field that was changed. + :type field: str, optional + + :param type: The type of change. + :type type: VersionHistoryUpdateType, optional + """ + if change is not unset: + kwargs["change"] = change + if field is not unset: + kwargs["field"] = field + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/version_history_update_type.py b/datadog_api_client/v2/model/version_history_update_type.py new file mode 100644 index 0000000000..ac92f9a1bc --- /dev/null +++ b/datadog_api_client/v2/model/version_history_update_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class VersionHistoryUpdateType(ModelSimple): + """ + The type of change. + + :param value: Must be one of ["create", "update", "delete"]. + :type value: str + """ + + allowed_values = { + "create", + "update", + "delete", + } + CREATE: ClassVar["VersionHistoryUpdateType"] + UPDATE: ClassVar["VersionHistoryUpdateType"] + DELETE: ClassVar["VersionHistoryUpdateType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +VersionHistoryUpdateType.CREATE = VersionHistoryUpdateType("create") +VersionHistoryUpdateType.UPDATE = VersionHistoryUpdateType("update") +VersionHistoryUpdateType.DELETE = VersionHistoryUpdateType("delete") diff --git a/datadog_api_client/v2/model/viewership_history_session_array.py b/datadog_api_client/v2/model/viewership_history_session_array.py new file mode 100644 index 0000000000..fb80a64f5a --- /dev/null +++ b/datadog_api_client/v2/model/viewership_history_session_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.viewership_history_session_data import ViewershipHistorySessionData + +class ViewershipHistorySessionArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.viewership_history_session_data import ViewershipHistorySessionData + return { + "data": ([ViewershipHistorySessionData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[ViewershipHistorySessionData], **kwargs): + """ + A list of RUM replay sessions from a user's viewership history. + + :param data: Array of viewership history session data objects. + :type data: [ViewershipHistorySessionData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/viewership_history_session_data.py b/datadog_api_client/v2/model/viewership_history_session_data.py new file mode 100644 index 0000000000..8133d2458b --- /dev/null +++ b/datadog_api_client/v2/model/viewership_history_session_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.viewership_history_session_data_attributes import ViewershipHistorySessionDataAttributes + from datadog_api_client.v2.model.viewership_history_session_data_type import ViewershipHistorySessionDataType + +class ViewershipHistorySessionData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.viewership_history_session_data_attributes import ViewershipHistorySessionDataAttributes + from datadog_api_client.v2.model.viewership_history_session_data_type import ViewershipHistorySessionDataType + return { + "attributes": (ViewershipHistorySessionDataAttributes,), + "id": (str,), + "type": (ViewershipHistorySessionDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: ViewershipHistorySessionDataType, attributes: Union[ViewershipHistorySessionDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data object representing a session in the viewership history, including its identifier, type, and attributes. + + :param attributes: Attributes of a viewership history session entry, capturing when it was last watched and the associated event data. + :type attributes: ViewershipHistorySessionDataAttributes, optional + + :param id: Unique identifier of the RUM replay session. + :type id: str, optional + + :param type: Rum replay session resource type. + :type type: ViewershipHistorySessionDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/viewership_history_session_data_attributes.py b/datadog_api_client/v2/model/viewership_history_session_data_attributes.py new file mode 100644 index 0000000000..d57e28a649 --- /dev/null +++ b/datadog_api_client/v2/model/viewership_history_session_data_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ViewershipHistorySessionDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "event_id": (str,), + "last_watched_at": (datetime,), + "session_event": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + "track": (str,), + } + attribute_map = { + "event_id": "event_id", + "last_watched_at": "last_watched_at", + "session_event": "session_event", + "track": "track", + } + + def __init__(self_, last_watched_at: datetime, event_id: Union[str, UnsetType]=unset, session_event: Union[Dict[str, Any], UnsetType]=unset, track: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a viewership history session entry, capturing when it was last watched and the associated event data. + + :param event_id: Unique identifier of the RUM event associated with the watched session. + :type event_id: str, optional + + :param last_watched_at: Timestamp when the session was last watched by the user. + :type last_watched_at: datetime + + :param session_event: Raw event data associated with the replay session. + :type session_event: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + + :param track: Replay track identifier indicating which recording track the session belongs to. + :type track: str, optional + """ + if event_id is not unset: + kwargs["event_id"] = event_id + if session_event is not unset: + kwargs["session_event"] = session_event + if track is not unset: + kwargs["track"] = track + super().__init__(kwargs) + + + self_.last_watched_at = last_watched_at diff --git a/datadog_api_client/v2/model/viewership_history_session_data_type.py b/datadog_api_client/v2/model/viewership_history_session_data_type.py new file mode 100644 index 0000000000..c8c306465b --- /dev/null +++ b/datadog_api_client/v2/model/viewership_history_session_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class ViewershipHistorySessionDataType(ModelSimple): + """ + Rum replay session resource type. + + :param value: If omitted defaults to "rum_replay_session". Must be one of ["rum_replay_session"]. + :type value: str + """ + + allowed_values = { + "rum_replay_session", + } + RUM_REPLAY_SESSION: ClassVar["ViewershipHistorySessionDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +ViewershipHistorySessionDataType.RUM_REPLAY_SESSION = ViewershipHistorySessionDataType("rum_replay_session") diff --git a/datadog_api_client/v2/model/virus_total_api_key.py b/datadog_api_client/v2/model/virus_total_api_key.py new file mode 100644 index 0000000000..1887189ebf --- /dev/null +++ b/datadog_api_client/v2/model/virus_total_api_key.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.virus_total_api_key_type import VirusTotalAPIKeyType + +class VirusTotalAPIKey(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.virus_total_api_key_type import VirusTotalAPIKeyType + return { + "api_key": (str,), + "type": (VirusTotalAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, api_key: str, type: VirusTotalAPIKeyType, **kwargs): + """ + The definition of the ``VirusTotalAPIKey`` object. + + :param api_key: The ``VirusTotalAPIKey`` ``api_key``. + :type api_key: str + + :param type: The definition of the ``VirusTotalAPIKey`` object. + :type type: VirusTotalAPIKeyType + """ + super().__init__(kwargs) + + + self_.api_key = api_key + self_.type = type diff --git a/datadog_api_client/v2/model/virus_total_api_key_type.py b/datadog_api_client/v2/model/virus_total_api_key_type.py new file mode 100644 index 0000000000..231d8d6eb4 --- /dev/null +++ b/datadog_api_client/v2/model/virus_total_api_key_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class VirusTotalAPIKeyType(ModelSimple): + """ + The definition of the `VirusTotalAPIKey` object. + + :param value: If omitted defaults to "VirusTotalAPIKey". Must be one of ["VirusTotalAPIKey"]. + :type value: str + """ + + allowed_values = { + "VirusTotalAPIKey", + } + VIRUSTOTALAPIKEY: ClassVar["VirusTotalAPIKeyType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +VirusTotalAPIKeyType.VIRUSTOTALAPIKEY = VirusTotalAPIKeyType("VirusTotalAPIKey") diff --git a/datadog_api_client/v2/model/virus_total_api_key_update.py b/datadog_api_client/v2/model/virus_total_api_key_update.py new file mode 100644 index 0000000000..6cfc45f361 --- /dev/null +++ b/datadog_api_client/v2/model/virus_total_api_key_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.virus_total_api_key_type import VirusTotalAPIKeyType + +class VirusTotalAPIKeyUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.virus_total_api_key_type import VirusTotalAPIKeyType + return { + "api_key": (str,), + "type": (VirusTotalAPIKeyType,), + } + attribute_map = { + "api_key": "api_key", + "type": "type", + } + + def __init__(self_, type: VirusTotalAPIKeyType, api_key: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of the ``VirusTotalAPIKey`` object. + + :param api_key: The ``VirusTotalAPIKeyUpdate`` ``api_key``. + :type api_key: str, optional + + :param type: The definition of the ``VirusTotalAPIKey`` object. + :type type: VirusTotalAPIKeyType + """ + if api_key is not unset: + kwargs["api_key"] = api_key + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/virus_total_credentials.py b/datadog_api_client/v2/model/virus_total_credentials.py new file mode 100644 index 0000000000..568524fde6 --- /dev/null +++ b/datadog_api_client/v2/model/virus_total_credentials.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class VirusTotalCredentials(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``VirusTotalCredentials`` object. + + :param api_key: The `VirusTotalAPIKey` `api_key`. + :type api_key: str + + :param type: The definition of the `VirusTotalAPIKey` object. + :type type: VirusTotalAPIKeyType + """ + 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.virus_total_api_key import VirusTotalAPIKey + return { + "oneOf": [ + VirusTotalAPIKey, + ], + } diff --git a/datadog_api_client/v2/model/virus_total_credentials_update.py b/datadog_api_client/v2/model/virus_total_credentials_update.py new file mode 100644 index 0000000000..c0c5e6a421 --- /dev/null +++ b/datadog_api_client/v2/model/virus_total_credentials_update.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class VirusTotalCredentialsUpdate(ModelComposed): + + + + def __init__(self, **kwargs): + """ + The definition of the ``VirusTotalCredentialsUpdate`` object. + + :param api_key: The `VirusTotalAPIKeyUpdate` `api_key`. + :type api_key: str, optional + + :param type: The definition of the `VirusTotalAPIKey` object. + :type type: VirusTotalAPIKeyType + """ + 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.virus_total_api_key_update import VirusTotalAPIKeyUpdate + return { + "oneOf": [ + VirusTotalAPIKeyUpdate, + ], + } diff --git a/datadog_api_client/v2/model/virus_total_integration.py b/datadog_api_client/v2/model/virus_total_integration.py new file mode 100644 index 0000000000..475e058f07 --- /dev/null +++ b/datadog_api_client/v2/model/virus_total_integration.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.virus_total_credentials import VirusTotalCredentials + from datadog_api_client.v2.model.virus_total_integration_type import VirusTotalIntegrationType + from datadog_api_client.v2.model.virus_total_api_key import VirusTotalAPIKey + +class VirusTotalIntegration(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.virus_total_credentials import VirusTotalCredentials + from datadog_api_client.v2.model.virus_total_integration_type import VirusTotalIntegrationType + return { + "credentials": (VirusTotalCredentials,), + "type": (VirusTotalIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, credentials: Union[VirusTotalCredentials, VirusTotalAPIKey], type: VirusTotalIntegrationType, **kwargs): + """ + The definition of the ``VirusTotalIntegration`` object. + + :param credentials: The definition of the ``VirusTotalCredentials`` object. + :type credentials: VirusTotalCredentials + + :param type: The definition of the ``VirusTotalIntegrationType`` object. + :type type: VirusTotalIntegrationType + """ + super().__init__(kwargs) + + + self_.credentials = credentials + self_.type = type diff --git a/datadog_api_client/v2/model/virus_total_integration_type.py b/datadog_api_client/v2/model/virus_total_integration_type.py new file mode 100644 index 0000000000..9fd8a9e4d8 --- /dev/null +++ b/datadog_api_client/v2/model/virus_total_integration_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class VirusTotalIntegrationType(ModelSimple): + """ + The definition of the `VirusTotalIntegrationType` object. + + :param value: If omitted defaults to "VirusTotal". Must be one of ["VirusTotal"]. + :type value: str + """ + + allowed_values = { + "VirusTotal", + } + VIRUSTOTAL: ClassVar["VirusTotalIntegrationType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +VirusTotalIntegrationType.VIRUSTOTAL = VirusTotalIntegrationType("VirusTotal") diff --git a/datadog_api_client/v2/model/virus_total_integration_update.py b/datadog_api_client/v2/model/virus_total_integration_update.py new file mode 100644 index 0000000000..a4e3f71ea9 --- /dev/null +++ b/datadog_api_client/v2/model/virus_total_integration_update.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.virus_total_credentials_update import VirusTotalCredentialsUpdate + from datadog_api_client.v2.model.virus_total_integration_type import VirusTotalIntegrationType + from datadog_api_client.v2.model.virus_total_api_key_update import VirusTotalAPIKeyUpdate + +class VirusTotalIntegrationUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.virus_total_credentials_update import VirusTotalCredentialsUpdate + from datadog_api_client.v2.model.virus_total_integration_type import VirusTotalIntegrationType + return { + "credentials": (VirusTotalCredentialsUpdate,), + "type": (VirusTotalIntegrationType,), + } + attribute_map = { + "credentials": "credentials", + "type": "type", + } + + def __init__(self_, type: VirusTotalIntegrationType, credentials: Union[VirusTotalCredentialsUpdate, VirusTotalAPIKeyUpdate, UnsetType]=unset, **kwargs): + """ + The definition of the ``VirusTotalIntegrationUpdate`` object. + + :param credentials: The definition of the ``VirusTotalCredentialsUpdate`` object. + :type credentials: VirusTotalCredentialsUpdate, optional + + :param type: The definition of the ``VirusTotalIntegrationType`` object. + :type type: VirusTotalIntegrationType + """ + if credentials is not unset: + kwargs["credentials"] = credentials + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/vulnerabilities_type.py b/datadog_api_client/v2/model/vulnerabilities_type.py new file mode 100644 index 0000000000..9d37140cb2 --- /dev/null +++ b/datadog_api_client/v2/model/vulnerabilities_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class VulnerabilitiesType(ModelSimple): + """ + The JSON:API type. + + :param value: If omitted defaults to "vulnerabilities". Must be one of ["vulnerabilities"]. + :type value: str + """ + + allowed_values = { + "vulnerabilities", + } + VULNERABILITIES: ClassVar["VulnerabilitiesType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +VulnerabilitiesType.VULNERABILITIES = VulnerabilitiesType("vulnerabilities") diff --git a/datadog_api_client/v2/model/vulnerability.py b/datadog_api_client/v2/model/vulnerability.py new file mode 100644 index 0000000000..e1f063cc24 --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability.py @@ -0,0 +1,70 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.vulnerability_attributes import VulnerabilityAttributes + from datadog_api_client.v2.model.vulnerability_relationships import VulnerabilityRelationships + from datadog_api_client.v2.model.vulnerabilities_type import VulnerabilitiesType + +class Vulnerability(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.vulnerability_attributes import VulnerabilityAttributes + from datadog_api_client.v2.model.vulnerability_relationships import VulnerabilityRelationships + from datadog_api_client.v2.model.vulnerabilities_type import VulnerabilitiesType + return { + "attributes": (VulnerabilityAttributes,), + "id": (str,), + "relationships": (VulnerabilityRelationships,), + "type": (VulnerabilitiesType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: VulnerabilityAttributes, id: str, relationships: VulnerabilityRelationships, type: VulnerabilitiesType, **kwargs): + """ + A single vulnerability + + :param attributes: The JSON:API attributes of the vulnerability. + :type attributes: VulnerabilityAttributes + + :param id: The unique ID for this vulnerability. + :type id: str + + :param relationships: Related entities object. + :type relationships: VulnerabilityRelationships + + :param type: The JSON:API type. + :type type: VulnerabilitiesType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.relationships = relationships + self_.type = type diff --git a/datadog_api_client/v2/model/vulnerability_advisory.py b/datadog_api_client/v2/model/vulnerability_advisory.py new file mode 100644 index 0000000000..87ae3ca537 --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_advisory.py @@ -0,0 +1,59 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class VulnerabilityAdvisory(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "last_modification_date": (str,), + "publish_date": (str,), + } + attribute_map = { + "id": "id", + "last_modification_date": "last_modification_date", + "publish_date": "publish_date", + } + + def __init__(self_, id: str, last_modification_date: Union[str, UnsetType]=unset, publish_date: Union[str, UnsetType]=unset, **kwargs): + """ + Advisory associated with the vulnerability. + + :param id: Vulnerability advisory ID. + :type id: str + + :param last_modification_date: Vulnerability advisory last modification date. + :type last_modification_date: str, optional + + :param publish_date: Vulnerability advisory publish date. + :type publish_date: str, optional + """ + if last_modification_date is not unset: + kwargs["last_modification_date"] = last_modification_date + if publish_date is not unset: + kwargs["publish_date"] = publish_date + super().__init__(kwargs) + + + self_.id = id diff --git a/datadog_api_client/v2/model/vulnerability_attributes.py b/datadog_api_client/v2/model/vulnerability_attributes.py new file mode 100644 index 0000000000..8e6599a560 --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_attributes.py @@ -0,0 +1,208 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.vulnerability_advisory import VulnerabilityAdvisory + from datadog_api_client.v2.model.code_location import CodeLocation + from datadog_api_client.v2.model.vulnerability_cvss import VulnerabilityCvss + from datadog_api_client.v2.model.vulnerability_dependency_locations import VulnerabilityDependencyLocations + from datadog_api_client.v2.model.vulnerability_ecosystem import VulnerabilityEcosystem + from datadog_api_client.v2.model.library import Library + from datadog_api_client.v2.model.remediation import Remediation + from datadog_api_client.v2.model.vulnerability_risks import VulnerabilityRisks + from datadog_api_client.v2.model.vulnerability_status import VulnerabilityStatus + from datadog_api_client.v2.model.vulnerability_tool import VulnerabilityTool + from datadog_api_client.v2.model.vulnerability_type import VulnerabilityType + +class VulnerabilityAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.vulnerability_advisory import VulnerabilityAdvisory + from datadog_api_client.v2.model.code_location import CodeLocation + from datadog_api_client.v2.model.vulnerability_cvss import VulnerabilityCvss + from datadog_api_client.v2.model.vulnerability_dependency_locations import VulnerabilityDependencyLocations + from datadog_api_client.v2.model.vulnerability_ecosystem import VulnerabilityEcosystem + from datadog_api_client.v2.model.library import Library + from datadog_api_client.v2.model.remediation import Remediation + from datadog_api_client.v2.model.vulnerability_risks import VulnerabilityRisks + from datadog_api_client.v2.model.vulnerability_status import VulnerabilityStatus + from datadog_api_client.v2.model.vulnerability_tool import VulnerabilityTool + from datadog_api_client.v2.model.vulnerability_type import VulnerabilityType + return { + "advisory": (VulnerabilityAdvisory,), + "advisory_id": (str,), + "code_location": (CodeLocation,), + "cve_list": ([str],), + "cvss": (VulnerabilityCvss,), + "dependency_locations": (VulnerabilityDependencyLocations,), + "description": (str,), + "ecosystem": (VulnerabilityEcosystem,), + "exposure_time": (int,), + "first_detection": (str,), + "fix_available": (bool,), + "language": (str,), + "last_detection": (str,), + "library": (Library,), + "origin": ([str],), + "remediations": ([Remediation],), + "repo_digests": ([str],), + "risks": (VulnerabilityRisks,), + "running_kernel": (bool,), + "status": (VulnerabilityStatus,), + "title": (str,), + "tool": (VulnerabilityTool,), + "type": (VulnerabilityType,), + } + attribute_map = { + "advisory": "advisory", + "advisory_id": "advisory_id", + "code_location": "code_location", + "cve_list": "cve_list", + "cvss": "cvss", + "dependency_locations": "dependency_locations", + "description": "description", + "ecosystem": "ecosystem", + "exposure_time": "exposure_time", + "first_detection": "first_detection", + "fix_available": "fix_available", + "language": "language", + "last_detection": "last_detection", + "library": "library", + "origin": "origin", + "remediations": "remediations", + "repo_digests": "repo_digests", + "risks": "risks", + "running_kernel": "running_kernel", + "status": "status", + "title": "title", + "tool": "tool", + "type": "type", + } + + def __init__(self_, cve_list: List[str], cvss: VulnerabilityCvss, description: str, exposure_time: int, first_detection: str, fix_available: bool, language: str, last_detection: str, origin: List[str], remediations: List[Remediation], risks: VulnerabilityRisks, status: VulnerabilityStatus, title: str, tool: VulnerabilityTool, type: VulnerabilityType, advisory: Union[VulnerabilityAdvisory, UnsetType]=unset, advisory_id: Union[str, UnsetType]=unset, code_location: Union[CodeLocation, UnsetType]=unset, dependency_locations: Union[VulnerabilityDependencyLocations, UnsetType]=unset, ecosystem: Union[VulnerabilityEcosystem, UnsetType]=unset, library: Union[Library, UnsetType]=unset, repo_digests: Union[List[str], UnsetType]=unset, running_kernel: Union[bool, UnsetType]=unset, **kwargs): + """ + The JSON:API attributes of the vulnerability. + + :param advisory: Advisory associated with the vulnerability. + :type advisory: VulnerabilityAdvisory, optional + + :param advisory_id: Vulnerability advisory ID. + :type advisory_id: str, optional + + :param code_location: Code vulnerability location. + :type code_location: CodeLocation, optional + + :param cve_list: Vulnerability CVE list. + :type cve_list: [str] + + :param cvss: Vulnerability severities. + :type cvss: VulnerabilityCvss + + :param dependency_locations: Static library vulnerability location. + :type dependency_locations: VulnerabilityDependencyLocations, optional + + :param description: Vulnerability description. + :type description: str + + :param ecosystem: The related vulnerability asset ecosystem. + :type ecosystem: VulnerabilityEcosystem, optional + + :param exposure_time: Vulnerability exposure time in seconds. + :type exposure_time: int + + :param first_detection: First detection of the vulnerability in `RFC 3339 `_ format + :type first_detection: str + + :param fix_available: Whether the vulnerability has a remediation or not. + :type fix_available: bool + + :param language: Vulnerability language. + :type language: str + + :param last_detection: Last detection of the vulnerability in `RFC 3339 `_ format + :type last_detection: str + + :param library: Vulnerability library. + :type library: Library, optional + + :param origin: Vulnerability origin. + :type origin: [str] + + :param remediations: List of remediations. + :type remediations: [Remediation] + + :param repo_digests: Vulnerability ``repo_digest`` list (when the vulnerability is related to ``Image`` asset). + :type repo_digests: [str], optional + + :param risks: Vulnerability risks. + :type risks: VulnerabilityRisks + + :param running_kernel: True if the vulnerability affects a package in the host’s running kernel, false if it affects a non-running kernel, and omit if it is not kernel-related. + :type running_kernel: bool, optional + + :param status: The vulnerability status. + :type status: VulnerabilityStatus + + :param title: Vulnerability title. + :type title: str + + :param tool: The vulnerability tool. + :type tool: VulnerabilityTool + + :param type: The vulnerability type. + :type type: VulnerabilityType + """ + if advisory is not unset: + kwargs["advisory"] = advisory + if advisory_id is not unset: + kwargs["advisory_id"] = advisory_id + if code_location is not unset: + kwargs["code_location"] = code_location + if dependency_locations is not unset: + kwargs["dependency_locations"] = dependency_locations + if ecosystem is not unset: + kwargs["ecosystem"] = ecosystem + if library is not unset: + kwargs["library"] = library + if repo_digests is not unset: + kwargs["repo_digests"] = repo_digests + if running_kernel is not unset: + kwargs["running_kernel"] = running_kernel + super().__init__(kwargs) + + + self_.cve_list = cve_list + self_.cvss = cvss + self_.description = description + self_.exposure_time = exposure_time + self_.first_detection = first_detection + self_.fix_available = fix_available + self_.language = language + self_.last_detection = last_detection + self_.origin = origin + self_.remediations = remediations + self_.risks = risks + self_.status = status + self_.title = title + self_.tool = tool + self_.type = type diff --git a/datadog_api_client/v2/model/vulnerability_cvss.py b/datadog_api_client/v2/model/vulnerability_cvss.py new file mode 100644 index 0000000000..977478ed24 --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_cvss.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.cvss import CVSS + +class VulnerabilityCvss(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.cvss import CVSS + return { + "base": (CVSS,), + "datadog": (CVSS,), + } + attribute_map = { + "base": "base", + "datadog": "datadog", + } + + def __init__(self_, base: CVSS, datadog: CVSS, **kwargs): + """ + Vulnerability severities. + + :param base: Vulnerability severity. + :type base: CVSS + + :param datadog: Vulnerability severity. + :type datadog: CVSS + """ + super().__init__(kwargs) + + + self_.base = base + self_.datadog = datadog diff --git a/datadog_api_client/v2/model/vulnerability_dependency_locations.py b/datadog_api_client/v2/model/vulnerability_dependency_locations.py new file mode 100644 index 0000000000..e66460fa2f --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_dependency_locations.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dependency_location import DependencyLocation + +class VulnerabilityDependencyLocations(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dependency_location import DependencyLocation + return { + "block": (DependencyLocation,), + "name": (DependencyLocation,), + "version": (DependencyLocation,), + } + attribute_map = { + "block": "block", + "name": "name", + "version": "version", + } + + def __init__(self_, block: DependencyLocation, name: Union[DependencyLocation, UnsetType]=unset, version: Union[DependencyLocation, UnsetType]=unset, **kwargs): + """ + Static library vulnerability location. + + :param block: Static library vulnerability location. + :type block: DependencyLocation + + :param name: Static library vulnerability location. + :type name: DependencyLocation, optional + + :param version: Static library vulnerability location. + :type version: DependencyLocation, optional + """ + if name is not unset: + kwargs["name"] = name + if version is not unset: + kwargs["version"] = version + super().__init__(kwargs) + + + self_.block = block diff --git a/datadog_api_client/v2/model/vulnerability_ecosystem.py b/datadog_api_client/v2/model/vulnerability_ecosystem.py new file mode 100644 index 0000000000..476c5f63bc --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_ecosystem.py @@ -0,0 +1,90 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class VulnerabilityEcosystem(ModelSimple): + """ + The related vulnerability asset ecosystem. + + :param value: Must be one of ["PyPI", "Maven", "NuGet", "Npm", "RubyGems", "Go", "Packagist", "Deb", "Rpm", "Apk", "Windows", "Generic", "MacOs", "Oci", "BottleRocket", "None"]. + :type value: str + """ + + allowed_values = { + "PyPI", + "Maven", + "NuGet", + "Npm", + "RubyGems", + "Go", + "Packagist", + "Deb", + "Rpm", + "Apk", + "Windows", + "Generic", + "MacOs", + "Oci", + "BottleRocket", + "None", + } + PYPI: ClassVar["VulnerabilityEcosystem"] + MAVEN: ClassVar["VulnerabilityEcosystem"] + NUGET: ClassVar["VulnerabilityEcosystem"] + NPM: ClassVar["VulnerabilityEcosystem"] + RUBY_GEMS: ClassVar["VulnerabilityEcosystem"] + GO: ClassVar["VulnerabilityEcosystem"] + PACKAGIST: ClassVar["VulnerabilityEcosystem"] + DEB: ClassVar["VulnerabilityEcosystem"] + RPM: ClassVar["VulnerabilityEcosystem"] + APK: ClassVar["VulnerabilityEcosystem"] + WINDOWS: ClassVar["VulnerabilityEcosystem"] + GENERIC: ClassVar["VulnerabilityEcosystem"] + MAC_OS: ClassVar["VulnerabilityEcosystem"] + OCI: ClassVar["VulnerabilityEcosystem"] + BOTTLE_ROCKET: ClassVar["VulnerabilityEcosystem"] + NONE: ClassVar["VulnerabilityEcosystem"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +VulnerabilityEcosystem.PYPI = VulnerabilityEcosystem("PyPI") +VulnerabilityEcosystem.MAVEN = VulnerabilityEcosystem("Maven") +VulnerabilityEcosystem.NUGET = VulnerabilityEcosystem("NuGet") +VulnerabilityEcosystem.NPM = VulnerabilityEcosystem("Npm") +VulnerabilityEcosystem.RUBY_GEMS = VulnerabilityEcosystem("RubyGems") +VulnerabilityEcosystem.GO = VulnerabilityEcosystem("Go") +VulnerabilityEcosystem.PACKAGIST = VulnerabilityEcosystem("Packagist") +VulnerabilityEcosystem.DEB = VulnerabilityEcosystem("Deb") +VulnerabilityEcosystem.RPM = VulnerabilityEcosystem("Rpm") +VulnerabilityEcosystem.APK = VulnerabilityEcosystem("Apk") +VulnerabilityEcosystem.WINDOWS = VulnerabilityEcosystem("Windows") +VulnerabilityEcosystem.GENERIC = VulnerabilityEcosystem("Generic") +VulnerabilityEcosystem.MAC_OS = VulnerabilityEcosystem("MacOs") +VulnerabilityEcosystem.OCI = VulnerabilityEcosystem("Oci") +VulnerabilityEcosystem.BOTTLE_ROCKET = VulnerabilityEcosystem("BottleRocket") +VulnerabilityEcosystem.NONE = VulnerabilityEcosystem("None") diff --git a/datadog_api_client/v2/model/vulnerability_relationships.py b/datadog_api_client/v2/model/vulnerability_relationships.py new file mode 100644 index 0000000000..10a374f510 --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_relationships.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.vulnerability_relationships_affects import VulnerabilityRelationshipsAffects + +class VulnerabilityRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.vulnerability_relationships_affects import VulnerabilityRelationshipsAffects + return { + "affects": (VulnerabilityRelationshipsAffects,), + } + attribute_map = { + "affects": "affects", + } + + def __init__(self_, affects: VulnerabilityRelationshipsAffects, **kwargs): + """ + Related entities object. + + :param affects: Relationship type. + :type affects: VulnerabilityRelationshipsAffects + """ + super().__init__(kwargs) + + + self_.affects = affects diff --git a/datadog_api_client/v2/model/vulnerability_relationships_affects.py b/datadog_api_client/v2/model/vulnerability_relationships_affects.py new file mode 100644 index 0000000000..b2aaa21a5b --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_relationships_affects.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.vulnerability_relationships_affects_data import VulnerabilityRelationshipsAffectsData + +class VulnerabilityRelationshipsAffects(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.vulnerability_relationships_affects_data import VulnerabilityRelationshipsAffectsData + return { + "data": (VulnerabilityRelationshipsAffectsData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: VulnerabilityRelationshipsAffectsData, **kwargs): + """ + Relationship type. + + :param data: Asset affected by this vulnerability. + :type data: VulnerabilityRelationshipsAffectsData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/vulnerability_relationships_affects_data.py b/datadog_api_client/v2/model/vulnerability_relationships_affects_data.py new file mode 100644 index 0000000000..e077f7f4ac --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_relationships_affects_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.asset_entity_type import AssetEntityType + +class VulnerabilityRelationshipsAffectsData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.asset_entity_type import AssetEntityType + return { + "id": (str,), + "type": (AssetEntityType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: AssetEntityType, **kwargs): + """ + Asset affected by this vulnerability. + + :param id: The unique ID for this related asset. + :type id: str + + :param type: The JSON:API type. + :type type: AssetEntityType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/vulnerability_risks.py b/datadog_api_client/v2/model/vulnerability_risks.py new file mode 100644 index 0000000000..6e9d53c18e --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_risks.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.epss import EPSS + +class VulnerabilityRisks(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.epss import EPSS + return { + "epss": (EPSS,), + "exploit_available": (bool,), + "exploit_sources": ([str],), + "exploitation_probability": (bool,), + "poc_exploit_available": (bool,), + } + attribute_map = { + "epss": "epss", + "exploit_available": "exploit_available", + "exploit_sources": "exploit_sources", + "exploitation_probability": "exploitation_probability", + "poc_exploit_available": "poc_exploit_available", + } + + def __init__(self_, exploit_available: bool, exploit_sources: List[str], exploitation_probability: bool, poc_exploit_available: bool, epss: Union[EPSS, UnsetType]=unset, **kwargs): + """ + Vulnerability risks. + + :param epss: Vulnerability EPSS severity. + :type epss: EPSS, optional + + :param exploit_available: Vulnerability public exploit availability. + :type exploit_available: bool + + :param exploit_sources: Vulnerability exploit sources. + :type exploit_sources: [str] + + :param exploitation_probability: Vulnerability exploitation probability. + :type exploitation_probability: bool + + :param poc_exploit_available: Vulnerability POC exploit availability. + :type poc_exploit_available: bool + """ + if epss is not unset: + kwargs["epss"] = epss + super().__init__(kwargs) + + + self_.exploit_available = exploit_available + self_.exploit_sources = exploit_sources + self_.exploitation_probability = exploitation_probability + self_.poc_exploit_available = poc_exploit_available diff --git a/datadog_api_client/v2/model/vulnerability_severity.py b/datadog_api_client/v2/model/vulnerability_severity.py new file mode 100644 index 0000000000..b0f1b19cce --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_severity.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class VulnerabilitySeverity(ModelSimple): + """ + The vulnerability severity. + + :param value: Must be one of ["Unknown", "None", "Low", "Medium", "High", "Critical"]. + :type value: str + """ + + allowed_values = { + "Unknown", + "None", + "Low", + "Medium", + "High", + "Critical", + } + UNKNOWN: ClassVar["VulnerabilitySeverity"] + NONE: ClassVar["VulnerabilitySeverity"] + LOW: ClassVar["VulnerabilitySeverity"] + MEDIUM: ClassVar["VulnerabilitySeverity"] + HIGH: ClassVar["VulnerabilitySeverity"] + CRITICAL: ClassVar["VulnerabilitySeverity"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +VulnerabilitySeverity.UNKNOWN = VulnerabilitySeverity("Unknown") +VulnerabilitySeverity.NONE = VulnerabilitySeverity("None") +VulnerabilitySeverity.LOW = VulnerabilitySeverity("Low") +VulnerabilitySeverity.MEDIUM = VulnerabilitySeverity("Medium") +VulnerabilitySeverity.HIGH = VulnerabilitySeverity("High") +VulnerabilitySeverity.CRITICAL = VulnerabilitySeverity("Critical") diff --git a/datadog_api_client/v2/model/vulnerability_status.py b/datadog_api_client/v2/model/vulnerability_status.py new file mode 100644 index 0000000000..82ce8829a7 --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_status.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class VulnerabilityStatus(ModelSimple): + """ + The vulnerability status. + + :param value: Must be one of ["Open", "Muted", "Remediated", "InProgress", "AutoClosed"]. + :type value: str + """ + + allowed_values = { + "Open", + "Muted", + "Remediated", + "InProgress", + "AutoClosed", + } + OPEN: ClassVar["VulnerabilityStatus"] + MUTED: ClassVar["VulnerabilityStatus"] + REMEDIATED: ClassVar["VulnerabilityStatus"] + INPROGRESS: ClassVar["VulnerabilityStatus"] + AUTOCLOSED: ClassVar["VulnerabilityStatus"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +VulnerabilityStatus.OPEN = VulnerabilityStatus("Open") +VulnerabilityStatus.MUTED = VulnerabilityStatus("Muted") +VulnerabilityStatus.REMEDIATED = VulnerabilityStatus("Remediated") +VulnerabilityStatus.INPROGRESS = VulnerabilityStatus("InProgress") +VulnerabilityStatus.AUTOCLOSED = VulnerabilityStatus("AutoClosed") diff --git a/datadog_api_client/v2/model/vulnerability_tool.py b/datadog_api_client/v2/model/vulnerability_tool.py new file mode 100644 index 0000000000..ed2bff61e0 --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_tool.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class VulnerabilityTool(ModelSimple): + """ + The vulnerability tool. + + :param value: Must be one of ["IAST", "SCA", "Infra", "SAST"]. + :type value: str + """ + + allowed_values = { + "IAST", + "SCA", + "Infra", + "SAST", + } + IAST: ClassVar["VulnerabilityTool"] + SCA: ClassVar["VulnerabilityTool"] + INFRA: ClassVar["VulnerabilityTool"] + SAST: ClassVar["VulnerabilityTool"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +VulnerabilityTool.IAST = VulnerabilityTool("IAST") +VulnerabilityTool.SCA = VulnerabilityTool("SCA") +VulnerabilityTool.INFRA = VulnerabilityTool("Infra") +VulnerabilityTool.SAST = VulnerabilityTool("SAST") diff --git a/datadog_api_client/v2/model/vulnerability_type.py b/datadog_api_client/v2/model/vulnerability_type.py new file mode 100644 index 0000000000..e557bdf635 --- /dev/null +++ b/datadog_api_client/v2/model/vulnerability_type.py @@ -0,0 +1,168 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class VulnerabilityType(ModelSimple): + """ + The vulnerability type. + + :param value: Must be one of ["AdminConsoleActive", "CodeInjection", "CommandInjection", "ComponentWithKnownVulnerability", "DangerousWorkflows", "DefaultAppDeployed", "DefaultHtmlEscapeInvalid", "DirectoryListingLeak", "EmailHtmlInjection", "EndOfLife", "HardcodedPassword", "HardcodedSecret", "HeaderInjection", "HstsHeaderMissing", "InsecureAuthProtocol", "InsecureCookie", "InsecureJspLayout", "LdapInjection", "MaliciousPackage", "MandatoryRemediation", "NoHttpOnlyCookie", "NoSameSiteCookie", "NoSqlMongoDbInjection", "PathTraversal", "ReflectionInjection", "RiskyLicense", "SessionRewriting", "SessionTimeout", "SqlInjection", "Ssrf", "StackTraceLeak", "TrustBoundaryViolation", "Unmaintained", "UntrustedDeserialization", "UnvalidatedRedirect", "VerbTampering", "WeakCipher", "WeakHash", "WeakRandomness", "XContentTypeHeaderMissing", "XPathInjection", "Xss"]. + :type value: str + """ + + allowed_values = { + "AdminConsoleActive", + "CodeInjection", + "CommandInjection", + "ComponentWithKnownVulnerability", + "DangerousWorkflows", + "DefaultAppDeployed", + "DefaultHtmlEscapeInvalid", + "DirectoryListingLeak", + "EmailHtmlInjection", + "EndOfLife", + "HardcodedPassword", + "HardcodedSecret", + "HeaderInjection", + "HstsHeaderMissing", + "InsecureAuthProtocol", + "InsecureCookie", + "InsecureJspLayout", + "LdapInjection", + "MaliciousPackage", + "MandatoryRemediation", + "NoHttpOnlyCookie", + "NoSameSiteCookie", + "NoSqlMongoDbInjection", + "PathTraversal", + "ReflectionInjection", + "RiskyLicense", + "SessionRewriting", + "SessionTimeout", + "SqlInjection", + "Ssrf", + "StackTraceLeak", + "TrustBoundaryViolation", + "Unmaintained", + "UntrustedDeserialization", + "UnvalidatedRedirect", + "VerbTampering", + "WeakCipher", + "WeakHash", + "WeakRandomness", + "XContentTypeHeaderMissing", + "XPathInjection", + "Xss", + } + ADMIN_CONSOLE_ACTIVE: ClassVar["VulnerabilityType"] + CODE_INJECTION: ClassVar["VulnerabilityType"] + COMMAND_INJECTION: ClassVar["VulnerabilityType"] + COMPONENT_WITH_KNOWN_VULNERABILITY: ClassVar["VulnerabilityType"] + DANGEROUS_WORKFLOWS: ClassVar["VulnerabilityType"] + DEFAULT_APP_DEPLOYED: ClassVar["VulnerabilityType"] + DEFAULT_HTML_ESCAPE_INVALID: ClassVar["VulnerabilityType"] + DIRECTORY_LISTING_LEAK: ClassVar["VulnerabilityType"] + EMAIL_HTML_INJECTION: ClassVar["VulnerabilityType"] + END_OF_LIFE: ClassVar["VulnerabilityType"] + HARDCODED_PASSWORD: ClassVar["VulnerabilityType"] + HARDCODED_SECRET: ClassVar["VulnerabilityType"] + HEADER_INJECTION: ClassVar["VulnerabilityType"] + HSTS_HEADER_MISSING: ClassVar["VulnerabilityType"] + INSECURE_AUTH_PROTOCOL: ClassVar["VulnerabilityType"] + INSECURE_COOKIE: ClassVar["VulnerabilityType"] + INSECURE_JSP_LAYOUT: ClassVar["VulnerabilityType"] + LDAP_INJECTION: ClassVar["VulnerabilityType"] + MALICIOUS_PACKAGE: ClassVar["VulnerabilityType"] + MANDATORY_REMEDIATION: ClassVar["VulnerabilityType"] + NO_HTTP_ONLY_COOKIE: ClassVar["VulnerabilityType"] + NO_SAME_SITE_COOKIE: ClassVar["VulnerabilityType"] + NO_SQL_MONGO_DB_INJECTION: ClassVar["VulnerabilityType"] + PATH_TRAVERSAL: ClassVar["VulnerabilityType"] + REFLECTION_INJECTION: ClassVar["VulnerabilityType"] + RISKY_LICENSE: ClassVar["VulnerabilityType"] + SESSION_REWRITING: ClassVar["VulnerabilityType"] + SESSION_TIMEOUT: ClassVar["VulnerabilityType"] + SQL_INJECTION: ClassVar["VulnerabilityType"] + SSRF: ClassVar["VulnerabilityType"] + STACK_TRACE_LEAK: ClassVar["VulnerabilityType"] + TRUST_BOUNDARY_VIOLATION: ClassVar["VulnerabilityType"] + UNMAINTAINED: ClassVar["VulnerabilityType"] + UNTRUSTED_DESERIALIZATION: ClassVar["VulnerabilityType"] + UNVALIDATED_REDIRECT: ClassVar["VulnerabilityType"] + VERB_TAMPERING: ClassVar["VulnerabilityType"] + WEAK_CIPHER: ClassVar["VulnerabilityType"] + WEAK_HASH: ClassVar["VulnerabilityType"] + WEAK_RANDOMNESS: ClassVar["VulnerabilityType"] + X_CONTENT_TYPE_HEADER_MISSING: ClassVar["VulnerabilityType"] + X_PATH_INJECTION: ClassVar["VulnerabilityType"] + XSS: ClassVar["VulnerabilityType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +VulnerabilityType.ADMIN_CONSOLE_ACTIVE = VulnerabilityType("AdminConsoleActive") +VulnerabilityType.CODE_INJECTION = VulnerabilityType("CodeInjection") +VulnerabilityType.COMMAND_INJECTION = VulnerabilityType("CommandInjection") +VulnerabilityType.COMPONENT_WITH_KNOWN_VULNERABILITY = VulnerabilityType("ComponentWithKnownVulnerability") +VulnerabilityType.DANGEROUS_WORKFLOWS = VulnerabilityType("DangerousWorkflows") +VulnerabilityType.DEFAULT_APP_DEPLOYED = VulnerabilityType("DefaultAppDeployed") +VulnerabilityType.DEFAULT_HTML_ESCAPE_INVALID = VulnerabilityType("DefaultHtmlEscapeInvalid") +VulnerabilityType.DIRECTORY_LISTING_LEAK = VulnerabilityType("DirectoryListingLeak") +VulnerabilityType.EMAIL_HTML_INJECTION = VulnerabilityType("EmailHtmlInjection") +VulnerabilityType.END_OF_LIFE = VulnerabilityType("EndOfLife") +VulnerabilityType.HARDCODED_PASSWORD = VulnerabilityType("HardcodedPassword") +VulnerabilityType.HARDCODED_SECRET = VulnerabilityType("HardcodedSecret") +VulnerabilityType.HEADER_INJECTION = VulnerabilityType("HeaderInjection") +VulnerabilityType.HSTS_HEADER_MISSING = VulnerabilityType("HstsHeaderMissing") +VulnerabilityType.INSECURE_AUTH_PROTOCOL = VulnerabilityType("InsecureAuthProtocol") +VulnerabilityType.INSECURE_COOKIE = VulnerabilityType("InsecureCookie") +VulnerabilityType.INSECURE_JSP_LAYOUT = VulnerabilityType("InsecureJspLayout") +VulnerabilityType.LDAP_INJECTION = VulnerabilityType("LdapInjection") +VulnerabilityType.MALICIOUS_PACKAGE = VulnerabilityType("MaliciousPackage") +VulnerabilityType.MANDATORY_REMEDIATION = VulnerabilityType("MandatoryRemediation") +VulnerabilityType.NO_HTTP_ONLY_COOKIE = VulnerabilityType("NoHttpOnlyCookie") +VulnerabilityType.NO_SAME_SITE_COOKIE = VulnerabilityType("NoSameSiteCookie") +VulnerabilityType.NO_SQL_MONGO_DB_INJECTION = VulnerabilityType("NoSqlMongoDbInjection") +VulnerabilityType.PATH_TRAVERSAL = VulnerabilityType("PathTraversal") +VulnerabilityType.REFLECTION_INJECTION = VulnerabilityType("ReflectionInjection") +VulnerabilityType.RISKY_LICENSE = VulnerabilityType("RiskyLicense") +VulnerabilityType.SESSION_REWRITING = VulnerabilityType("SessionRewriting") +VulnerabilityType.SESSION_TIMEOUT = VulnerabilityType("SessionTimeout") +VulnerabilityType.SQL_INJECTION = VulnerabilityType("SqlInjection") +VulnerabilityType.SSRF = VulnerabilityType("Ssrf") +VulnerabilityType.STACK_TRACE_LEAK = VulnerabilityType("StackTraceLeak") +VulnerabilityType.TRUST_BOUNDARY_VIOLATION = VulnerabilityType("TrustBoundaryViolation") +VulnerabilityType.UNMAINTAINED = VulnerabilityType("Unmaintained") +VulnerabilityType.UNTRUSTED_DESERIALIZATION = VulnerabilityType("UntrustedDeserialization") +VulnerabilityType.UNVALIDATED_REDIRECT = VulnerabilityType("UnvalidatedRedirect") +VulnerabilityType.VERB_TAMPERING = VulnerabilityType("VerbTampering") +VulnerabilityType.WEAK_CIPHER = VulnerabilityType("WeakCipher") +VulnerabilityType.WEAK_HASH = VulnerabilityType("WeakHash") +VulnerabilityType.WEAK_RANDOMNESS = VulnerabilityType("WeakRandomness") +VulnerabilityType.X_CONTENT_TYPE_HEADER_MISSING = VulnerabilityType("XContentTypeHeaderMissing") +VulnerabilityType.X_PATH_INJECTION = VulnerabilityType("XPathInjection") +VulnerabilityType.XSS = VulnerabilityType("Xss") diff --git a/datadog_api_client/v2/model/watch.py b/datadog_api_client/v2/model/watch.py new file mode 100644 index 0000000000..890222c842 --- /dev/null +++ b/datadog_api_client/v2/model/watch.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.watch_data import WatchData + +class Watch(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.watch_data import WatchData + return { + "data": (WatchData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: WatchData, **kwargs): + """ + A single RUM replay session watch resource returned by create operations. + + :param data: Data object representing a session watch record, including its identifier, type, and attributes. + :type data: WatchData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/watch_data.py b/datadog_api_client/v2/model/watch_data.py new file mode 100644 index 0000000000..cd055ea407 --- /dev/null +++ b/datadog_api_client/v2/model/watch_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.watch_data_attributes import WatchDataAttributes + from datadog_api_client.v2.model.watch_data_type import WatchDataType + +class WatchData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.watch_data_attributes import WatchDataAttributes + from datadog_api_client.v2.model.watch_data_type import WatchDataType + return { + "attributes": (WatchDataAttributes,), + "id": (str,), + "type": (WatchDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: WatchDataType, attributes: Union[WatchDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data object representing a session watch record, including its identifier, type, and attributes. + + :param attributes: Attributes for recording a session watch event, including the application, event reference, and timestamp. + :type attributes: WatchDataAttributes, optional + + :param id: Unique identifier of the watch record. + :type id: str, optional + + :param type: Rum replay watch resource type. + :type type: WatchDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/watch_data_attributes.py b/datadog_api_client/v2/model/watch_data_attributes.py new file mode 100644 index 0000000000..c5d184b182 --- /dev/null +++ b/datadog_api_client/v2/model/watch_data_attributes.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WatchDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "application_id": (str,), + "data_source": (str,), + "event_id": (str,), + "timestamp": (datetime,), + } + attribute_map = { + "application_id": "application_id", + "data_source": "data_source", + "event_id": "event_id", + "timestamp": "timestamp", + } + + def __init__(self_, application_id: str, event_id: str, timestamp: datetime, data_source: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes for recording a session watch event, including the application, event reference, and timestamp. + + :param application_id: Unique identifier of the RUM application containing the session. + :type application_id: str + + :param data_source: Data source type indicating the origin of the session data (e.g., rum or product_analytics). + :type data_source: str, optional + + :param event_id: Unique identifier of the RUM event that was watched. + :type event_id: str + + :param timestamp: Timestamp when the session was watched. + :type timestamp: datetime + """ + if data_source is not unset: + kwargs["data_source"] = data_source + super().__init__(kwargs) + + + self_.application_id = application_id + self_.event_id = event_id + self_.timestamp = timestamp diff --git a/datadog_api_client/v2/model/watch_data_type.py b/datadog_api_client/v2/model/watch_data_type.py new file mode 100644 index 0000000000..fc349f1f4d --- /dev/null +++ b/datadog_api_client/v2/model/watch_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WatchDataType(ModelSimple): + """ + Rum replay watch resource type. + + :param value: If omitted defaults to "rum_replay_watch". Must be one of ["rum_replay_watch"]. + :type value: str + """ + + allowed_values = { + "rum_replay_watch", + } + RUM_REPLAY_WATCH: ClassVar["WatchDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WatchDataType.RUM_REPLAY_WATCH = WatchDataType("rum_replay_watch") diff --git a/datadog_api_client/v2/model/watcher_array.py b/datadog_api_client/v2/model/watcher_array.py new file mode 100644 index 0000000000..22efdc7f1c --- /dev/null +++ b/datadog_api_client/v2/model/watcher_array.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.watcher_data import WatcherData + +class WatcherArray(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.watcher_data import WatcherData + return { + "data": ([WatcherData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: List[WatcherData], **kwargs): + """ + A list of users who have watched a RUM replay session. + + :param data: Array of watcher data objects. + :type data: [WatcherData] + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/watcher_data.py b/datadog_api_client/v2/model/watcher_data.py new file mode 100644 index 0000000000..90c1ed2c36 --- /dev/null +++ b/datadog_api_client/v2/model/watcher_data.py @@ -0,0 +1,64 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.watcher_data_attributes import WatcherDataAttributes + from datadog_api_client.v2.model.watcher_data_type import WatcherDataType + +class WatcherData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.watcher_data_attributes import WatcherDataAttributes + from datadog_api_client.v2.model.watcher_data_type import WatcherDataType + return { + "attributes": (WatcherDataAttributes,), + "id": (str,), + "type": (WatcherDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, type: WatcherDataType, attributes: Union[WatcherDataAttributes, UnsetType]=unset, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data object representing a session watcher, including their identifier, type, and attributes. + + :param attributes: Attributes of a user who has watched a RUM replay session, including contact information and watch statistics. + :type attributes: WatcherDataAttributes, optional + + :param id: Unique identifier of the watcher user. + :type id: str, optional + + :param type: Rum replay watcher resource type. + :type type: WatcherDataType + """ + if attributes is not unset: + kwargs["attributes"] = attributes + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + + self_.type = type diff --git a/datadog_api_client/v2/model/watcher_data_attributes.py b/datadog_api_client/v2/model/watcher_data_attributes.py new file mode 100644 index 0000000000..acf676eeac --- /dev/null +++ b/datadog_api_client/v2/model/watcher_data_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WatcherDataAttributes(ModelNormal): + validations = { + "watch_count": { + "inclusive_maximum": 2147483647, + }, + } + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "icon": (str,), + "last_watched_at": (datetime,), + "name": (str,), + "watch_count": (int,), + } + attribute_map = { + "handle": "handle", + "icon": "icon", + "last_watched_at": "last_watched_at", + "name": "name", + "watch_count": "watch_count", + } + + def __init__(self_, handle: str, last_watched_at: datetime, watch_count: int, icon: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, **kwargs): + """ + Attributes of a user who has watched a RUM replay session, including contact information and watch statistics. + + :param handle: Email handle of the user who watched the session. + :type handle: str + + :param icon: URL or identifier of the watcher's avatar icon. + :type icon: str, optional + + :param last_watched_at: Timestamp when the watcher last viewed the session. + :type last_watched_at: datetime + + :param name: Display name of the user who watched the session. + :type name: str, optional + + :param watch_count: Total number of times the user has watched the session. + :type watch_count: int + """ + if icon is not unset: + kwargs["icon"] = icon + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + + self_.handle = handle + self_.last_watched_at = last_watched_at + self_.watch_count = watch_count diff --git a/datadog_api_client/v2/model/watcher_data_type.py b/datadog_api_client/v2/model/watcher_data_type.py new file mode 100644 index 0000000000..41ac0f38bf --- /dev/null +++ b/datadog_api_client/v2/model/watcher_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WatcherDataType(ModelSimple): + """ + Rum replay watcher resource type. + + :param value: If omitted defaults to "rum_replay_watcher". Must be one of ["rum_replay_watcher"]. + :type value: str + """ + + allowed_values = { + "rum_replay_watcher", + } + RUM_REPLAY_WATCHER: ClassVar["WatcherDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WatcherDataType.RUM_REPLAY_WATCHER = WatcherDataType("rum_replay_watcher") diff --git a/datadog_api_client/v2/model/web_integration_account_create_request.py b/datadog_api_client/v2/model/web_integration_account_create_request.py new file mode 100644 index 0000000000..cf3d9a6536 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_create_request_data import WebIntegrationAccountCreateRequestData + +class WebIntegrationAccountCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_create_request_data import WebIntegrationAccountCreateRequestData + return { + "data": (WebIntegrationAccountCreateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: WebIntegrationAccountCreateRequestData, **kwargs): + """ + Payload schema when adding a web integration account. + + :param data: Data object for creating a web integration account. + :type data: WebIntegrationAccountCreateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/web_integration_account_create_request_attributes.py b/datadog_api_client/v2/model/web_integration_account_create_request_attributes.py new file mode 100644 index 0000000000..caf2173149 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_create_request_attributes.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_secrets import WebIntegrationAccountSecrets + from datadog_api_client.v2.model.web_integration_account_settings import WebIntegrationAccountSettings + +class WebIntegrationAccountCreateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_secrets import WebIntegrationAccountSecrets + from datadog_api_client.v2.model.web_integration_account_settings import WebIntegrationAccountSettings + return { + "name": (str,), + "secrets": (WebIntegrationAccountSecrets,), + "settings": (WebIntegrationAccountSettings,), + } + attribute_map = { + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, name: str, secrets: WebIntegrationAccountSecrets, settings: WebIntegrationAccountSettings, **kwargs): + """ + Attributes object for creating a web integration account. + + :param name: A human-readable name for the account. Must be unique among accounts of the same integration. + :type name: str + + :param secrets: Integration-specific secrets. The shape of this object varies by integration. Secrets + are write-only and never returned by the API. + :type secrets: WebIntegrationAccountSecrets + + :param settings: Integration-specific settings. The shape of this object varies by integration. + :type settings: WebIntegrationAccountSettings + """ + super().__init__(kwargs) + + + self_.name = name + self_.secrets = secrets + self_.settings = settings diff --git a/datadog_api_client/v2/model/web_integration_account_create_request_data.py b/datadog_api_client/v2/model/web_integration_account_create_request_data.py new file mode 100644 index 0000000000..6d448f682a --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_create_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_create_request_attributes import WebIntegrationAccountCreateRequestAttributes + from datadog_api_client.v2.model.web_integration_account_type import WebIntegrationAccountType + +class WebIntegrationAccountCreateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_create_request_attributes import WebIntegrationAccountCreateRequestAttributes + from datadog_api_client.v2.model.web_integration_account_type import WebIntegrationAccountType + return { + "attributes": (WebIntegrationAccountCreateRequestAttributes,), + "type": (WebIntegrationAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: WebIntegrationAccountCreateRequestAttributes, type: WebIntegrationAccountType, **kwargs): + """ + Data object for creating a web integration account. + + :param attributes: Attributes object for creating a web integration account. + :type attributes: WebIntegrationAccountCreateRequestAttributes + + :param type: Account resource type. + :type type: WebIntegrationAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/web_integration_account_response.py b/datadog_api_client/v2/model/web_integration_account_response.py new file mode 100644 index 0000000000..744cf0cc14 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_response_data import WebIntegrationAccountResponseData + +class WebIntegrationAccountResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_response_data import WebIntegrationAccountResponseData + return { + "data": (WebIntegrationAccountResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[WebIntegrationAccountResponseData, UnsetType]=unset, **kwargs): + """ + The expected response schema when getting a single web integration account. + + :param data: Data object of a web integration account. + :type data: WebIntegrationAccountResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/web_integration_account_response_attributes.py b/datadog_api_client/v2/model/web_integration_account_response_attributes.py new file mode 100644 index 0000000000..4c774c0968 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_response_attributes.py @@ -0,0 +1,55 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_settings import WebIntegrationAccountSettings + +class WebIntegrationAccountResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_settings import WebIntegrationAccountSettings + return { + "name": (str,), + "settings": (WebIntegrationAccountSettings,), + } + attribute_map = { + "name": "name", + "settings": "settings", + } + + def __init__(self_, name: str, settings: Union[WebIntegrationAccountSettings, UnsetType]=unset, **kwargs): + """ + Attributes object of a web integration account. Secrets are never returned. + + :param name: A human-readable name for the account. + :type name: str + + :param settings: Integration-specific settings. The shape of this object varies by integration. + :type settings: WebIntegrationAccountSettings, optional + """ + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/web_integration_account_response_data.py b/datadog_api_client/v2/model/web_integration_account_response_data.py new file mode 100644 index 0000000000..0648984d56 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_response_attributes import WebIntegrationAccountResponseAttributes + from datadog_api_client.v2.model.web_integration_account_type import WebIntegrationAccountType + +class WebIntegrationAccountResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_response_attributes import WebIntegrationAccountResponseAttributes + from datadog_api_client.v2.model.web_integration_account_type import WebIntegrationAccountType + return { + "attributes": (WebIntegrationAccountResponseAttributes,), + "id": (str,), + "type": (WebIntegrationAccountType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: WebIntegrationAccountResponseAttributes, id: str, type: WebIntegrationAccountType, **kwargs): + """ + Data object of a web integration account. + + :param attributes: Attributes object of a web integration account. Secrets are never returned. + :type attributes: WebIntegrationAccountResponseAttributes + + :param id: The unique identifier of the web integration account. + :type id: str + + :param type: Account resource type. + :type type: WebIntegrationAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/web_integration_account_secrets.py b/datadog_api_client/v2/model/web_integration_account_secrets.py new file mode 100644 index 0000000000..992bf91f72 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_secrets.py @@ -0,0 +1,34 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WebIntegrationAccountSecrets(ModelNormal): + + def __init__(self_, **kwargs): + """ + Integration-specific secrets. The shape of this object varies by integration. Secrets + are write-only and never returned by the API. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/web_integration_account_settings.py b/datadog_api_client/v2/model/web_integration_account_settings.py new file mode 100644 index 0000000000..ae7023ce51 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_settings.py @@ -0,0 +1,33 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WebIntegrationAccountSettings(ModelNormal): + + def __init__(self_, **kwargs): + """ + Integration-specific settings. The shape of this object varies by integration. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/web_integration_account_type.py b/datadog_api_client/v2/model/web_integration_account_type.py new file mode 100644 index 0000000000..7041b95d85 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WebIntegrationAccountType(ModelSimple): + """ + Account resource type. + + :param value: If omitted defaults to "Account". Must be one of ["Account"]. + :type value: str + """ + + allowed_values = { + "Account", + } + ACCOUNT: ClassVar["WebIntegrationAccountType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WebIntegrationAccountType.ACCOUNT = WebIntegrationAccountType("Account") diff --git a/datadog_api_client/v2/model/web_integration_account_update_request.py b/datadog_api_client/v2/model/web_integration_account_update_request.py new file mode 100644 index 0000000000..c8447745e2 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_update_request_data import WebIntegrationAccountUpdateRequestData + +class WebIntegrationAccountUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_update_request_data import WebIntegrationAccountUpdateRequestData + return { + "data": (WebIntegrationAccountUpdateRequestData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: WebIntegrationAccountUpdateRequestData, **kwargs): + """ + Payload schema when updating a web integration account. + + :param data: Data object for updating a web integration account. + :type data: WebIntegrationAccountUpdateRequestData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/web_integration_account_update_request_attributes.py b/datadog_api_client/v2/model/web_integration_account_update_request_attributes.py new file mode 100644 index 0000000000..6e119c8c06 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_update_request_attributes.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_secrets import WebIntegrationAccountSecrets + from datadog_api_client.v2.model.web_integration_account_settings import WebIntegrationAccountSettings + +class WebIntegrationAccountUpdateRequestAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_secrets import WebIntegrationAccountSecrets + from datadog_api_client.v2.model.web_integration_account_settings import WebIntegrationAccountSettings + return { + "name": (str,), + "secrets": (WebIntegrationAccountSecrets,), + "settings": (WebIntegrationAccountSettings,), + } + attribute_map = { + "name": "name", + "secrets": "secrets", + "settings": "settings", + } + + def __init__(self_, name: Union[str, UnsetType]=unset, secrets: Union[WebIntegrationAccountSecrets, UnsetType]=unset, settings: Union[WebIntegrationAccountSettings, UnsetType]=unset, **kwargs): + """ + Attributes object for updating a web integration account. + + :param name: A human-readable name for the account. + :type name: str, optional + + :param secrets: Integration-specific secrets. The shape of this object varies by integration. Secrets + are write-only and never returned by the API. + :type secrets: WebIntegrationAccountSecrets, optional + + :param settings: Integration-specific settings. The shape of this object varies by integration. + :type settings: WebIntegrationAccountSettings, optional + """ + if name is not unset: + kwargs["name"] = name + if secrets is not unset: + kwargs["secrets"] = secrets + if settings is not unset: + kwargs["settings"] = settings + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/web_integration_account_update_request_data.py b/datadog_api_client/v2/model/web_integration_account_update_request_data.py new file mode 100644 index 0000000000..73f4e325f6 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_account_update_request_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_update_request_attributes import WebIntegrationAccountUpdateRequestAttributes + from datadog_api_client.v2.model.web_integration_account_type import WebIntegrationAccountType + +class WebIntegrationAccountUpdateRequestData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_update_request_attributes import WebIntegrationAccountUpdateRequestAttributes + from datadog_api_client.v2.model.web_integration_account_type import WebIntegrationAccountType + return { + "attributes": (WebIntegrationAccountUpdateRequestAttributes,), + "type": (WebIntegrationAccountType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: WebIntegrationAccountUpdateRequestAttributes, type: WebIntegrationAccountType, **kwargs): + """ + Data object for updating a web integration account. + + :param attributes: Attributes object for updating a web integration account. + :type attributes: WebIntegrationAccountUpdateRequestAttributes + + :param type: Account resource type. + :type type: WebIntegrationAccountType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/web_integration_accounts_response.py b/datadog_api_client/v2/model/web_integration_accounts_response.py new file mode 100644 index 0000000000..873222fe70 --- /dev/null +++ b/datadog_api_client/v2/model/web_integration_accounts_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.web_integration_account_response_data import WebIntegrationAccountResponseData + +class WebIntegrationAccountsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.web_integration_account_response_data import WebIntegrationAccountResponseData + return { + "data": ([WebIntegrationAccountResponseData],), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[List[WebIntegrationAccountResponseData], UnsetType]=unset, **kwargs): + """ + The expected response schema when listing web integration accounts. + + :param data: The JSON:API data array. + :type data: [WebIntegrationAccountResponseData], optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/webhooks_auth_method_attributes.py b/datadog_api_client/v2/model/webhooks_auth_method_attributes.py new file mode 100644 index 0000000000..772f3cbb11 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_auth_method_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_auth_method_protocol import WebhooksAuthMethodProtocol + +class WebhooksAuthMethodAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_auth_method_protocol import WebhooksAuthMethodProtocol + return { + "protocol": (WebhooksAuthMethodProtocol,), + } + attribute_map = { + "protocol": "protocol", + } + + def __init__(self_, protocol: Union[WebhooksAuthMethodProtocol, UnsetType]=unset, **kwargs): + """ + Attributes of a webhooks auth method. + + :param protocol: Authentication protocol used by the auth method. + :type protocol: WebhooksAuthMethodProtocol, optional + """ + if protocol is not unset: + kwargs["protocol"] = protocol + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/webhooks_auth_method_protocol.py b/datadog_api_client/v2/model/webhooks_auth_method_protocol.py new file mode 100644 index 0000000000..30ca804c8b --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_auth_method_protocol.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WebhooksAuthMethodProtocol(ModelSimple): + """ + Authentication protocol used by the auth method. + + :param value: If omitted defaults to "oauth2-client-credentials". Must be one of ["oauth2-client-credentials"]. + :type value: str + """ + + allowed_values = { + "oauth2-client-credentials", + } + OAUTH2_CLIENT_CREDENTIALS: ClassVar["WebhooksAuthMethodProtocol"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WebhooksAuthMethodProtocol.OAUTH2_CLIENT_CREDENTIALS = WebhooksAuthMethodProtocol("oauth2-client-credentials") diff --git a/datadog_api_client/v2/model/webhooks_auth_method_relationships.py b/datadog_api_client/v2/model/webhooks_auth_method_relationships.py new file mode 100644 index 0000000000..25e692d50e --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_auth_method_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_relationship import WebhooksOAuth2ClientCredentialsRelationship + +class WebhooksAuthMethodRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_relationship import WebhooksOAuth2ClientCredentialsRelationship + return { + "oauth2_client_credentials": (WebhooksOAuth2ClientCredentialsRelationship,), + } + attribute_map = { + "oauth2_client_credentials": "oauth2-client-credentials", + } + + def __init__(self_, oauth2_client_credentials: Union[WebhooksOAuth2ClientCredentialsRelationship, UnsetType]=unset, **kwargs): + """ + Relationships of a webhooks auth method to its protocol-specific resource. + + :param oauth2_client_credentials: Relationship pointing to the OAuth2 client credentials resource for this auth method. + :type oauth2_client_credentials: WebhooksOAuth2ClientCredentialsRelationship, optional + """ + if oauth2_client_credentials is not unset: + kwargs["oauth2_client_credentials"] = oauth2_client_credentials + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/webhooks_auth_method_response_data.py b/datadog_api_client/v2/model/webhooks_auth_method_response_data.py new file mode 100644 index 0000000000..7b2c486634 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_auth_method_response_data.py @@ -0,0 +1,71 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_auth_method_attributes import WebhooksAuthMethodAttributes + from datadog_api_client.v2.model.webhooks_auth_method_relationships import WebhooksAuthMethodRelationships + from datadog_api_client.v2.model.webhooks_auth_method_type import WebhooksAuthMethodType + +class WebhooksAuthMethodResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_auth_method_attributes import WebhooksAuthMethodAttributes + from datadog_api_client.v2.model.webhooks_auth_method_relationships import WebhooksAuthMethodRelationships + from datadog_api_client.v2.model.webhooks_auth_method_type import WebhooksAuthMethodType + return { + "attributes": (WebhooksAuthMethodAttributes,), + "id": (str,), + "relationships": (WebhooksAuthMethodRelationships,), + "type": (WebhooksAuthMethodType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: WebhooksAuthMethodAttributes, id: str, type: WebhooksAuthMethodType, relationships: Union[WebhooksAuthMethodRelationships, UnsetType]=unset, **kwargs): + """ + Webhooks auth method data from a response. + + :param attributes: Attributes of a webhooks auth method. + :type attributes: WebhooksAuthMethodAttributes + + :param id: The ID of the auth method. + :type id: str + + :param relationships: Relationships of a webhooks auth method to its protocol-specific resource. + :type relationships: WebhooksAuthMethodRelationships, optional + + :param type: Webhooks auth method resource type. + :type type: WebhooksAuthMethodType + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/webhooks_auth_method_type.py b/datadog_api_client/v2/model/webhooks_auth_method_type.py new file mode 100644 index 0000000000..0b72c045c9 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_auth_method_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WebhooksAuthMethodType(ModelSimple): + """ + Webhooks auth method resource type. + + :param value: If omitted defaults to "webhooks-auth-method". Must be one of ["webhooks-auth-method"]. + :type value: str + """ + + allowed_values = { + "webhooks-auth-method", + } + WEBHOOKS_AUTH_METHOD: ClassVar["WebhooksAuthMethodType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WebhooksAuthMethodType.WEBHOOKS_AUTH_METHOD = WebhooksAuthMethodType("webhooks-auth-method") diff --git a/datadog_api_client/v2/model/webhooks_auth_methods_response.py b/datadog_api_client/v2/model/webhooks_auth_methods_response.py new file mode 100644 index 0000000000..0edf4629c6 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_auth_methods_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_auth_method_response_data import WebhooksAuthMethodResponseData + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response_data import WebhooksOAuth2ClientCredentialsResponseData + +class WebhooksAuthMethodsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_auth_method_response_data import WebhooksAuthMethodResponseData + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response_data import WebhooksOAuth2ClientCredentialsResponseData + return { + "data": ([WebhooksAuthMethodResponseData],), + "included": ([WebhooksOAuth2ClientCredentialsResponseData],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: List[WebhooksAuthMethodResponseData], included: Union[List[WebhooksOAuth2ClientCredentialsResponseData], UnsetType]=unset, **kwargs): + """ + Response containing a list of webhooks auth methods. + + :param data: An array of webhooks auth methods. + :type data: [WebhooksAuthMethodResponseData] + + :param included: Resources related to the auth methods, included when requested via the ``include`` query parameter. + :type included: [WebhooksOAuth2ClientCredentialsResponseData], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_create_attributes.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_create_attributes.py new file mode 100644 index 0000000000..b0c2ea5787 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_create_attributes.py @@ -0,0 +1,104 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WebhooksOAuth2ClientCredentialsCreateAttributes(ModelNormal): + validations = { + "access_token_url": { + "max_length": 2048, + "min_length": 1, + }, + "audience": { + "max_length": 2048, + "min_length": 1, + }, + "client_id": { + "max_length": 2048, + "min_length": 1, + }, + "client_secret": { + "max_length": 2048, + "min_length": 1, + }, + "name": { + "max_length": 100, + "min_length": 1, + }, + "scope": { + "max_length": 2048, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "access_token_url": (str,), + "audience": (str, none_type), + "client_id": (str,), + "client_secret": (str,), + "name": (str,), + "scope": (str, none_type), + } + attribute_map = { + "access_token_url": "access_token_url", + "audience": "audience", + "client_id": "client_id", + "client_secret": "client_secret", + "name": "name", + "scope": "scope", + } + + def __init__(self_, access_token_url: str, client_id: str, client_secret: str, name: str, audience: Union[str, none_type, UnsetType]=unset, scope: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + OAuth2 client credentials attributes for a create request. + + :param access_token_url: URL of the OAuth2 access token endpoint. + :type access_token_url: str + + :param audience: The intended audience for the OAuth2 access token. + :type audience: str, none_type, optional + + :param client_id: The OAuth2 client ID issued by the authorization server. + :type client_id: str + + :param client_secret: The OAuth2 client secret issued by the authorization server. + Write-only; never returned by the API. + :type client_secret: str + + :param name: Human-readable name for this auth method. Must be unique within your organization. + :type name: str + + :param scope: Space-separated list of OAuth2 scopes to request. + :type scope: str, none_type, optional + """ + if audience is not unset: + kwargs["audience"] = audience + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + + self_.access_token_url = access_token_url + self_.client_id = client_id + self_.client_secret = client_secret + self_.name = name diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_create_data.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_create_data.py new file mode 100644 index 0000000000..03dec09743 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_create_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_create_attributes import WebhooksOAuth2ClientCredentialsCreateAttributes + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_type import WebhooksOAuth2ClientCredentialsType + +class WebhooksOAuth2ClientCredentialsCreateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_create_attributes import WebhooksOAuth2ClientCredentialsCreateAttributes + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_type import WebhooksOAuth2ClientCredentialsType + return { + "attributes": (WebhooksOAuth2ClientCredentialsCreateAttributes,), + "type": (WebhooksOAuth2ClientCredentialsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: WebhooksOAuth2ClientCredentialsCreateAttributes, type: WebhooksOAuth2ClientCredentialsType, **kwargs): + """ + OAuth2 client credentials data for a create request. + + :param attributes: OAuth2 client credentials attributes for a create request. + :type attributes: WebhooksOAuth2ClientCredentialsCreateAttributes + + :param type: OAuth2 client credentials resource type. + :type type: WebhooksOAuth2ClientCredentialsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_create_request.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_create_request.py new file mode 100644 index 0000000000..75b140f119 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_create_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_create_data import WebhooksOAuth2ClientCredentialsCreateData + +class WebhooksOAuth2ClientCredentialsCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_create_data import WebhooksOAuth2ClientCredentialsCreateData + return { + "data": (WebhooksOAuth2ClientCredentialsCreateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: WebhooksOAuth2ClientCredentialsCreateData, **kwargs): + """ + Create request for an OAuth2 client credentials auth method. + + :param data: OAuth2 client credentials data for a create request. + :type data: WebhooksOAuth2ClientCredentialsCreateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_relationship.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_relationship.py new file mode 100644 index 0000000000..d8ed111aa4 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_relationship_data import WebhooksOAuth2ClientCredentialsRelationshipData + +class WebhooksOAuth2ClientCredentialsRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_relationship_data import WebhooksOAuth2ClientCredentialsRelationshipData + return { + "data": (WebhooksOAuth2ClientCredentialsRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[WebhooksOAuth2ClientCredentialsRelationshipData, UnsetType]=unset, **kwargs): + """ + Relationship pointing to the OAuth2 client credentials resource for this auth method. + + :param data: Relationship data referencing an OAuth2 client credentials resource. + :type data: WebhooksOAuth2ClientCredentialsRelationshipData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_relationship_data.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_relationship_data.py new file mode 100644 index 0000000000..6dda0b200f --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_relationship_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_type import WebhooksOAuth2ClientCredentialsType + +class WebhooksOAuth2ClientCredentialsRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_type import WebhooksOAuth2ClientCredentialsType + return { + "id": (str,), + "type": (WebhooksOAuth2ClientCredentialsType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, type: Union[WebhooksOAuth2ClientCredentialsType, UnsetType]=unset, **kwargs): + """ + Relationship data referencing an OAuth2 client credentials resource. + + :param id: The ID of the OAuth2 client credentials resource. + :type id: str, optional + + :param type: OAuth2 client credentials resource type. + :type type: WebhooksOAuth2ClientCredentialsType, optional + """ + if id is not unset: + kwargs["id"] = id + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_response.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_response.py new file mode 100644 index 0000000000..cc7383d02b --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_response.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response_data import WebhooksOAuth2ClientCredentialsResponseData + +class WebhooksOAuth2ClientCredentialsResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response_data import WebhooksOAuth2ClientCredentialsResponseData + return { + "data": (WebhooksOAuth2ClientCredentialsResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: WebhooksOAuth2ClientCredentialsResponseData, **kwargs): + """ + Response containing an OAuth2 client credentials auth method. + + :param data: OAuth2 client credentials data from a response. + :type data: WebhooksOAuth2ClientCredentialsResponseData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_response_attributes.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_response_attributes.py new file mode 100644 index 0000000000..6e3a8a487c --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_response_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_auth_method_protocol import WebhooksAuthMethodProtocol + +class WebhooksOAuth2ClientCredentialsResponseAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_auth_method_protocol import WebhooksAuthMethodProtocol + return { + "access_token_url": (str,), + "audience": (str, none_type), + "client_id": (str,), + "name": (str,), + "protocol": (WebhooksAuthMethodProtocol,), + "scope": (str, none_type), + } + attribute_map = { + "access_token_url": "access_token_url", + "audience": "audience", + "client_id": "client_id", + "name": "name", + "protocol": "protocol", + "scope": "scope", + } + + def __init__(self_, access_token_url: Union[str, UnsetType]=unset, audience: Union[str, none_type, UnsetType]=unset, client_id: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, protocol: Union[WebhooksAuthMethodProtocol, UnsetType]=unset, scope: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + OAuth2 client credentials attributes returned by the API. The ``client_secret`` is never echoed. + + :param access_token_url: URL of the OAuth2 access token endpoint. + :type access_token_url: str, optional + + :param audience: The intended audience for the OAuth2 access token. + :type audience: str, none_type, optional + + :param client_id: The OAuth2 client ID issued by the authorization server. + :type client_id: str, optional + + :param name: Human-readable name for this auth method. + :type name: str, optional + + :param protocol: Authentication protocol used by the auth method. + :type protocol: WebhooksAuthMethodProtocol, optional + + :param scope: Space-separated list of OAuth2 scopes to request. + :type scope: str, none_type, optional + """ + if access_token_url is not unset: + kwargs["access_token_url"] = access_token_url + if audience is not unset: + kwargs["audience"] = audience + if client_id is not unset: + kwargs["client_id"] = client_id + if name is not unset: + kwargs["name"] = name + if protocol is not unset: + kwargs["protocol"] = protocol + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_response_data.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_response_data.py new file mode 100644 index 0000000000..9debc07f0b --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_response_data.py @@ -0,0 +1,62 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response_attributes import WebhooksOAuth2ClientCredentialsResponseAttributes + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_type import WebhooksOAuth2ClientCredentialsType + +class WebhooksOAuth2ClientCredentialsResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response_attributes import WebhooksOAuth2ClientCredentialsResponseAttributes + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_type import WebhooksOAuth2ClientCredentialsType + return { + "attributes": (WebhooksOAuth2ClientCredentialsResponseAttributes,), + "id": (str,), + "type": (WebhooksOAuth2ClientCredentialsType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, attributes: WebhooksOAuth2ClientCredentialsResponseAttributes, id: str, type: WebhooksOAuth2ClientCredentialsType, **kwargs): + """ + OAuth2 client credentials data from a response. + + :param attributes: OAuth2 client credentials attributes returned by the API. The ``client_secret`` is never echoed. + :type attributes: WebhooksOAuth2ClientCredentialsResponseAttributes + + :param id: The ID of the OAuth2 client credentials auth method. + :type id: str + + :param type: OAuth2 client credentials resource type. + :type type: WebhooksOAuth2ClientCredentialsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_type.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_type.py new file mode 100644 index 0000000000..80d4f83bbb --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WebhooksOAuth2ClientCredentialsType(ModelSimple): + """ + OAuth2 client credentials resource type. + + :param value: If omitted defaults to "webhooks-auth-method-oauth2-client-credentials". Must be one of ["webhooks-auth-method-oauth2-client-credentials"]. + :type value: str + """ + + allowed_values = { + "webhooks-auth-method-oauth2-client-credentials", + } + WEBHOOKS_AUTH_METHOD_OAUTH2_CLIENT_CREDENTIALS: ClassVar["WebhooksOAuth2ClientCredentialsType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WebhooksOAuth2ClientCredentialsType.WEBHOOKS_AUTH_METHOD_OAUTH2_CLIENT_CREDENTIALS = WebhooksOAuth2ClientCredentialsType("webhooks-auth-method-oauth2-client-credentials") diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_update_attributes.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_update_attributes.py new file mode 100644 index 0000000000..bfefc9b16c --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_update_attributes.py @@ -0,0 +1,108 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WebhooksOAuth2ClientCredentialsUpdateAttributes(ModelNormal): + validations = { + "access_token_url": { + "max_length": 2048, + "min_length": 1, + }, + "audience": { + "max_length": 2048, + "min_length": 1, + }, + "client_id": { + "max_length": 2048, + "min_length": 1, + }, + "client_secret": { + "max_length": 2048, + "min_length": 1, + }, + "name": { + "max_length": 100, + "min_length": 1, + }, + "scope": { + "max_length": 2048, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + return { + "access_token_url": (str,), + "audience": (str, none_type), + "client_id": (str,), + "client_secret": (str,), + "name": (str,), + "scope": (str, none_type), + } + attribute_map = { + "access_token_url": "access_token_url", + "audience": "audience", + "client_id": "client_id", + "client_secret": "client_secret", + "name": "name", + "scope": "scope", + } + + def __init__(self_, access_token_url: Union[str, UnsetType]=unset, audience: Union[str, none_type, UnsetType]=unset, client_id: Union[str, UnsetType]=unset, client_secret: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, scope: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + OAuth2 client credentials attributes for an update request. + + :param access_token_url: URL of the OAuth2 access token endpoint. + :type access_token_url: str, optional + + :param audience: The intended audience for the OAuth2 access token. + :type audience: str, none_type, optional + + :param client_id: The OAuth2 client ID issued by the authorization server. + :type client_id: str, optional + + :param client_secret: The OAuth2 client secret issued by the authorization server. + Write-only; never returned by the API. + :type client_secret: str, optional + + :param name: Human-readable name for this auth method. + :type name: str, optional + + :param scope: Space-separated list of OAuth2 scopes to request. + :type scope: str, none_type, optional + """ + if access_token_url is not unset: + kwargs["access_token_url"] = access_token_url + if audience is not unset: + kwargs["audience"] = audience + if client_id is not unset: + kwargs["client_id"] = client_id + if client_secret is not unset: + kwargs["client_secret"] = client_secret + if name is not unset: + kwargs["name"] = name + if scope is not unset: + kwargs["scope"] = scope + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_update_data.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_update_data.py new file mode 100644 index 0000000000..c76d10cb82 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_update_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_update_attributes import WebhooksOAuth2ClientCredentialsUpdateAttributes + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_type import WebhooksOAuth2ClientCredentialsType + +class WebhooksOAuth2ClientCredentialsUpdateData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_update_attributes import WebhooksOAuth2ClientCredentialsUpdateAttributes + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_type import WebhooksOAuth2ClientCredentialsType + return { + "attributes": (WebhooksOAuth2ClientCredentialsUpdateAttributes,), + "type": (WebhooksOAuth2ClientCredentialsType,), + } + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: WebhooksOAuth2ClientCredentialsUpdateAttributes, type: WebhooksOAuth2ClientCredentialsType, **kwargs): + """ + OAuth2 client credentials data for an update request. + + :param attributes: OAuth2 client credentials attributes for an update request. + :type attributes: WebhooksOAuth2ClientCredentialsUpdateAttributes + + :param type: OAuth2 client credentials resource type. + :type type: WebhooksOAuth2ClientCredentialsType + """ + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_update_request.py b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_update_request.py new file mode 100644 index 0000000000..ff574efbb1 --- /dev/null +++ b/datadog_api_client/v2/model/webhooks_o_auth2_client_credentials_update_request.py @@ -0,0 +1,48 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_update_data import WebhooksOAuth2ClientCredentialsUpdateData + +class WebhooksOAuth2ClientCredentialsUpdateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_update_data import WebhooksOAuth2ClientCredentialsUpdateData + return { + "data": (WebhooksOAuth2ClientCredentialsUpdateData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: WebhooksOAuth2ClientCredentialsUpdateData, **kwargs): + """ + Update request for an OAuth2 client credentials auth method. + + :param data: OAuth2 client credentials data for an update request. + :type data: WebhooksOAuth2ClientCredentialsUpdateData + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/weekday.py b/datadog_api_client/v2/model/weekday.py new file mode 100644 index 0000000000..ad70377e29 --- /dev/null +++ b/datadog_api_client/v2/model/weekday.py @@ -0,0 +1,63 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class Weekday(ModelSimple): + """ + A day of the week. + + :param value: Must be one of ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]. + :type value: str + """ + + allowed_values = { + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday", + } + MONDAY: ClassVar["Weekday"] + TUESDAY: ClassVar["Weekday"] + WEDNESDAY: ClassVar["Weekday"] + THURSDAY: ClassVar["Weekday"] + FRIDAY: ClassVar["Weekday"] + SATURDAY: ClassVar["Weekday"] + SUNDAY: ClassVar["Weekday"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +Weekday.MONDAY = Weekday("monday") +Weekday.TUESDAY = Weekday("tuesday") +Weekday.WEDNESDAY = Weekday("wednesday") +Weekday.THURSDAY = Weekday("thursday") +Weekday.FRIDAY = Weekday("friday") +Weekday.SATURDAY = Weekday("saturday") +Weekday.SUNDAY = Weekday("sunday") diff --git a/datadog_api_client/v2/model/widget_annotations_map.py b/datadog_api_client/v2/model/widget_annotations_map.py new file mode 100644 index 0000000000..217a9d3e00 --- /dev/null +++ b/datadog_api_client/v2/model/widget_annotations_map.py @@ -0,0 +1,39 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_annotation_ids import WidgetAnnotationIds + +class WidgetAnnotationsMap(ModelNormal): + @cached_property + def additional_properties_type(_): + from datadog_api_client.v2.model.widget_annotation_ids import WidgetAnnotationIds + return ([UUID],) + + def __init__(self_, **kwargs): + """ + Map from widget ID to the list of annotation IDs displayed on that widget. + """ + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/widget_attributes.py b/datadog_api_client/v2/model/widget_attributes.py new file mode 100644 index 0000000000..c9fe2a98b7 --- /dev/null +++ b/datadog_api_client/v2/model/widget_attributes.py @@ -0,0 +1,76 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_definition import WidgetDefinition + +class WidgetAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.widget_definition import WidgetDefinition + return { + "created_at": (str,), + "definition": (WidgetDefinition,), + "is_favorited": (bool,), + "modified_at": (str,), + "tags": ([str], none_type), + } + attribute_map = { + "created_at": "created_at", + "definition": "definition", + "is_favorited": "is_favorited", + "modified_at": "modified_at", + "tags": "tags", + } + + def __init__(self_, created_at: str, definition: WidgetDefinition, is_favorited: bool, modified_at: str, tags: Union[List[str], none_type], **kwargs): + """ + Attributes of a widget resource. + + :param created_at: ISO 8601 timestamp of when the widget was created. + :type created_at: str + + :param definition: The definition of a widget, including its type and configuration. + :type definition: WidgetDefinition + + :param is_favorited: Whether the current user has favorited this widget. Populated on get, + batch_get, update, and search responses; create responses always return + ``false`` because a widget can only be favorited after it exists. + Favoriting itself is performed through the shared favorites API, not + this service. + :type is_favorited: bool + + :param modified_at: ISO 8601 timestamp of when the widget was last modified. + :type modified_at: str + + :param tags: User-defined tags for organizing widgets. + :type tags: [str], none_type + """ + super().__init__(kwargs) + + + self_.created_at = created_at + self_.definition = definition + self_.is_favorited = is_favorited + self_.modified_at = modified_at + self_.tags = tags diff --git a/datadog_api_client/v2/model/widget_data.py b/datadog_api_client/v2/model/widget_data.py new file mode 100644 index 0000000000..48ac04c3b0 --- /dev/null +++ b/datadog_api_client/v2/model/widget_data.py @@ -0,0 +1,69 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_attributes import WidgetAttributes + from datadog_api_client.v2.model.widget_relationships import WidgetRelationships + +class WidgetData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.widget_attributes import WidgetAttributes + from datadog_api_client.v2.model.widget_relationships import WidgetRelationships + return { + "attributes": (WidgetAttributes,), + "id": (str,), + "relationships": (WidgetRelationships,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + + def __init__(self_, attributes: WidgetAttributes, id: str, type: str, relationships: Union[WidgetRelationships, UnsetType]=unset, **kwargs): + """ + A widget resource object. + + :param attributes: Attributes of a widget resource. + :type attributes: WidgetAttributes + + :param id: The unique identifier of the widget. + :type id: str + + :param relationships: Relationships of the widget resource. + :type relationships: WidgetRelationships, optional + + :param type: Widgets resource type. + :type type: str + """ + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/widget_definition.py b/datadog_api_client/v2/model/widget_definition.py new file mode 100644 index 0000000000..e04c9689a1 --- /dev/null +++ b/datadog_api_client/v2/model/widget_definition.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_type import WidgetType + +class WidgetDefinition(ModelNormal): + validations = { + "title": { + "max_length": 100, + "min_length": 1, + }, + } + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.widget_type import WidgetType + return { + "title": (str,), + "type": (WidgetType,), + } + attribute_map = { + "title": "title", + "type": "type", + } + + def __init__(self_, title: str, type: WidgetType, **kwargs): + """ + The definition of a widget, including its type and configuration. + + :param title: The display title of the widget. + :type title: str + + :param type: Widget types that are allowed to be stored as individual records. + This is not a complete list of dashboard and notebook widget types. + :type type: WidgetType + """ + super().__init__(kwargs) + + + self_.title = title + self_.type = type diff --git a/datadog_api_client/v2/model/widget_experience_type.py b/datadog_api_client/v2/model/widget_experience_type.py new file mode 100644 index 0000000000..10c3080a38 --- /dev/null +++ b/datadog_api_client/v2/model/widget_experience_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetExperienceType(ModelSimple): + """ + Widget experience types that differentiate between the products using the specific widget. + + :param value: Must be one of ["ccm_reports", "logs_reports", "csv_reports", "product_analytics"]. + :type value: str + """ + + allowed_values = { + "ccm_reports", + "logs_reports", + "csv_reports", + "product_analytics", + } + CCM_REPORTS: ClassVar["WidgetExperienceType"] + LOGS_REPORTS: ClassVar["WidgetExperienceType"] + CSV_REPORTS: ClassVar["WidgetExperienceType"] + PRODUCT_ANALYTICS: ClassVar["WidgetExperienceType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetExperienceType.CCM_REPORTS = WidgetExperienceType("ccm_reports") +WidgetExperienceType.LOGS_REPORTS = WidgetExperienceType("logs_reports") +WidgetExperienceType.CSV_REPORTS = WidgetExperienceType("csv_reports") +WidgetExperienceType.PRODUCT_ANALYTICS = WidgetExperienceType("product_analytics") diff --git a/datadog_api_client/v2/model/widget_included_user.py b/datadog_api_client/v2/model/widget_included_user.py new file mode 100644 index 0000000000..c6a25acc56 --- /dev/null +++ b/datadog_api_client/v2/model/widget_included_user.py @@ -0,0 +1,61 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_included_user_attributes import WidgetIncludedUserAttributes + +class WidgetIncludedUser(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.widget_included_user_attributes import WidgetIncludedUserAttributes + return { + "attributes": (WidgetIncludedUserAttributes,), + "id": (str,), + "type": (str,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: str, attributes: Union[WidgetIncludedUserAttributes, UnsetType]=unset, **kwargs): + """ + A user resource included in the response. + + :param attributes: Attributes of an included user resource. + :type attributes: WidgetIncludedUserAttributes, optional + + :param id: The unique identifier of the user. + :type id: str + + :param type: Users resource type. + :type type: str + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/widget_included_user_attributes.py b/datadog_api_client/v2/model/widget_included_user_attributes.py new file mode 100644 index 0000000000..c4124ca45a --- /dev/null +++ b/datadog_api_client/v2/model/widget_included_user_attributes.py @@ -0,0 +1,53 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetIncludedUserAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "handle": (str,), + "name": (str, none_type), + } + attribute_map = { + "handle": "handle", + "name": "name", + } + + def __init__(self_, handle: Union[str, UnsetType]=unset, name: Union[str, none_type, UnsetType]=unset, **kwargs): + """ + Attributes of an included user resource. + + :param handle: The email handle of the user. + :type handle: str, optional + + :param name: The display name of the user. + :type name: str, none_type, optional + """ + if handle is not unset: + kwargs["handle"] = handle + if name is not unset: + kwargs["name"] = name + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/widget_list_response.py b/datadog_api_client/v2/model/widget_list_response.py new file mode 100644 index 0000000000..dd5bb3e10b --- /dev/null +++ b/datadog_api_client/v2/model/widget_list_response.py @@ -0,0 +1,66 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_data import WidgetData + from datadog_api_client.v2.model.widget_included_user import WidgetIncludedUser + from datadog_api_client.v2.model.widget_search_meta import WidgetSearchMeta + +class WidgetListResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.widget_data import WidgetData + from datadog_api_client.v2.model.widget_included_user import WidgetIncludedUser + from datadog_api_client.v2.model.widget_search_meta import WidgetSearchMeta + return { + "data": ([WidgetData],), + "included": ([WidgetIncludedUser],), + "meta": (WidgetSearchMeta,), + } + attribute_map = { + "data": "data", + "included": "included", + "meta": "meta", + } + + def __init__(self_, data: List[WidgetData], included: Union[List[WidgetIncludedUser], UnsetType]=unset, meta: Union[WidgetSearchMeta, UnsetType]=unset, **kwargs): + """ + Response containing a list of widgets. + + :param data: List of widget resources. + :type data: [WidgetData] + + :param included: Array of user resources related to the widgets. + :type included: [WidgetIncludedUser], optional + + :param meta: Metadata about the search results. + :type meta: WidgetSearchMeta, 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/datadog_api_client/v2/model/widget_live_span.py b/datadog_api_client/v2/model/widget_live_span.py new file mode 100644 index 0000000000..3b1306937a --- /dev/null +++ b/datadog_api_client/v2/model/widget_live_span.py @@ -0,0 +1,87 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetLiveSpan(ModelSimple): + """ + The available timeframes depend on the widget you are using. + + :param value: Must be one of ["1m", "5m", "10m", "15m", "30m", "1h", "4h", "1d", "2d", "1w", "1mo", "3mo", "6mo", "1y", "alert"]. + :type value: str + """ + + allowed_values = { + "1m", + "5m", + "10m", + "15m", + "30m", + "1h", + "4h", + "1d", + "2d", + "1w", + "1mo", + "3mo", + "6mo", + "1y", + "alert", + } + PAST_ONE_MINUTE: ClassVar["WidgetLiveSpan"] + PAST_FIVE_MINUTES: ClassVar["WidgetLiveSpan"] + PAST_TEN_MINUTES: ClassVar["WidgetLiveSpan"] + PAST_FIFTEEN_MINUTES: ClassVar["WidgetLiveSpan"] + PAST_THIRTY_MINUTES: ClassVar["WidgetLiveSpan"] + PAST_ONE_HOUR: ClassVar["WidgetLiveSpan"] + PAST_FOUR_HOURS: ClassVar["WidgetLiveSpan"] + PAST_ONE_DAY: ClassVar["WidgetLiveSpan"] + PAST_TWO_DAYS: ClassVar["WidgetLiveSpan"] + PAST_ONE_WEEK: ClassVar["WidgetLiveSpan"] + PAST_ONE_MONTH: ClassVar["WidgetLiveSpan"] + PAST_THREE_MONTHS: ClassVar["WidgetLiveSpan"] + PAST_SIX_MONTHS: ClassVar["WidgetLiveSpan"] + PAST_ONE_YEAR: ClassVar["WidgetLiveSpan"] + ALERT: ClassVar["WidgetLiveSpan"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetLiveSpan.PAST_ONE_MINUTE = WidgetLiveSpan("1m") +WidgetLiveSpan.PAST_FIVE_MINUTES = WidgetLiveSpan("5m") +WidgetLiveSpan.PAST_TEN_MINUTES = WidgetLiveSpan("10m") +WidgetLiveSpan.PAST_FIFTEEN_MINUTES = WidgetLiveSpan("15m") +WidgetLiveSpan.PAST_THIRTY_MINUTES = WidgetLiveSpan("30m") +WidgetLiveSpan.PAST_ONE_HOUR = WidgetLiveSpan("1h") +WidgetLiveSpan.PAST_FOUR_HOURS = WidgetLiveSpan("4h") +WidgetLiveSpan.PAST_ONE_DAY = WidgetLiveSpan("1d") +WidgetLiveSpan.PAST_TWO_DAYS = WidgetLiveSpan("2d") +WidgetLiveSpan.PAST_ONE_WEEK = WidgetLiveSpan("1w") +WidgetLiveSpan.PAST_ONE_MONTH = WidgetLiveSpan("1mo") +WidgetLiveSpan.PAST_THREE_MONTHS = WidgetLiveSpan("3mo") +WidgetLiveSpan.PAST_SIX_MONTHS = WidgetLiveSpan("6mo") +WidgetLiveSpan.PAST_ONE_YEAR = WidgetLiveSpan("1y") +WidgetLiveSpan.ALERT = WidgetLiveSpan("alert") diff --git a/datadog_api_client/v2/model/widget_relationship_data.py b/datadog_api_client/v2/model/widget_relationship_data.py new file mode 100644 index 0000000000..0f93f4de16 --- /dev/null +++ b/datadog_api_client/v2/model/widget_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: str, **kwargs): + """ + Relationship data referencing a user resource. + + :param id: The unique identifier of the user. + :type id: str + + :param type: Users resource type. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/widget_relationship_item.py b/datadog_api_client/v2/model/widget_relationship_item.py new file mode 100644 index 0000000000..980c89048a --- /dev/null +++ b/datadog_api_client/v2/model/widget_relationship_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_relationship_data import WidgetRelationshipData + +class WidgetRelationshipItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.widget_relationship_data import WidgetRelationshipData + return { + "data": (WidgetRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[WidgetRelationshipData, UnsetType]=unset, **kwargs): + """ + A JSON:API relationship to a user. + + :param data: Relationship data referencing a user resource. + :type data: WidgetRelationshipData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/widget_relationships.py b/datadog_api_client/v2/model/widget_relationships.py new file mode 100644 index 0000000000..cd8e8413d2 --- /dev/null +++ b/datadog_api_client/v2/model/widget_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_relationship_item import WidgetRelationshipItem + +class WidgetRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.widget_relationship_item import WidgetRelationshipItem + return { + "created_by": (WidgetRelationshipItem,), + "modified_by": (WidgetRelationshipItem,), + } + attribute_map = { + "created_by": "created_by", + "modified_by": "modified_by", + } + + def __init__(self_, created_by: Union[WidgetRelationshipItem, UnsetType]=unset, modified_by: Union[WidgetRelationshipItem, UnsetType]=unset, **kwargs): + """ + Relationships of the widget resource. + + :param created_by: A JSON:API relationship to a user. + :type created_by: WidgetRelationshipItem, optional + + :param modified_by: A JSON:API relationship to a user. + :type modified_by: WidgetRelationshipItem, optional + """ + if created_by is not unset: + kwargs["created_by"] = created_by + if modified_by is not unset: + kwargs["modified_by"] = modified_by + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/widget_response.py b/datadog_api_client/v2/model/widget_response.py new file mode 100644 index 0000000000..8505416fba --- /dev/null +++ b/datadog_api_client/v2/model/widget_response.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.widget_data import WidgetData + from datadog_api_client.v2.model.widget_included_user import WidgetIncludedUser + +class WidgetResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.widget_data import WidgetData + from datadog_api_client.v2.model.widget_included_user import WidgetIncludedUser + return { + "data": (WidgetData,), + "included": ([WidgetIncludedUser],), + } + attribute_map = { + "data": "data", + "included": "included", + } + + def __init__(self_, data: WidgetData, included: Union[List[WidgetIncludedUser], UnsetType]=unset, **kwargs): + """ + Response containing a single widget. + + :param data: A widget resource object. + :type data: WidgetData + + :param included: Array of user resources related to the widget. + :type included: [WidgetIncludedUser], optional + """ + if included is not unset: + kwargs["included"] = included + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/widget_search_meta.py b/datadog_api_client/v2/model/widget_search_meta.py new file mode 100644 index 0000000000..b815a64493 --- /dev/null +++ b/datadog_api_client/v2/model/widget_search_meta.py @@ -0,0 +1,67 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WidgetSearchMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "created_by_anyone_total": (int,), + "created_by_you_total": (int,), + "favorited_by_you_total": (int,), + "filtered_total": (int,), + } + attribute_map = { + "created_by_anyone_total": "created_by_anyone_total", + "created_by_you_total": "created_by_you_total", + "favorited_by_you_total": "favorited_by_you_total", + "filtered_total": "filtered_total", + } + + def __init__(self_, created_by_anyone_total: Union[int, UnsetType]=unset, created_by_you_total: Union[int, UnsetType]=unset, favorited_by_you_total: Union[int, UnsetType]=unset, filtered_total: Union[int, UnsetType]=unset, **kwargs): + """ + Metadata about the search results. + + :param created_by_anyone_total: Total number of widgets created by anyone. + :type created_by_anyone_total: int, optional + + :param created_by_you_total: Total number of widgets created by the current user. + :type created_by_you_total: int, optional + + :param favorited_by_you_total: Total number of widgets favorited by the current user. + :type favorited_by_you_total: int, optional + + :param filtered_total: Total number of widgets matching the current filter criteria. + :type filtered_total: int, optional + """ + if created_by_anyone_total is not unset: + kwargs["created_by_anyone_total"] = created_by_anyone_total + if created_by_you_total is not unset: + kwargs["created_by_you_total"] = created_by_you_total + if favorited_by_you_total is not unset: + kwargs["favorited_by_you_total"] = favorited_by_you_total + if filtered_total is not unset: + kwargs["filtered_total"] = filtered_total + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/widget_type.py b/datadog_api_client/v2/model/widget_type.py new file mode 100644 index 0000000000..d0d4884b91 --- /dev/null +++ b/datadog_api_client/v2/model/widget_type.py @@ -0,0 +1,88 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WidgetType(ModelSimple): + """ + Widget types that are allowed to be stored as individual records. + This is not a complete list of dashboard and notebook widget types. + + :param value: Must be one of ["bar_chart", "change", "cloud_cost_summary", "cohort", "funnel", "geomap", "list_stream", "query_table", "query_value", "retention_curve", "sankey", "sunburst", "timeseries", "toplist", "treemap"]. + :type value: str + """ + + allowed_values = { + "bar_chart", + "change", + "cloud_cost_summary", + "cohort", + "funnel", + "geomap", + "list_stream", + "query_table", + "query_value", + "retention_curve", + "sankey", + "sunburst", + "timeseries", + "toplist", + "treemap", + } + BAR_CHART: ClassVar["WidgetType"] + CHANGE: ClassVar["WidgetType"] + CLOUD_COST_SUMMARY: ClassVar["WidgetType"] + COHORT: ClassVar["WidgetType"] + FUNNEL: ClassVar["WidgetType"] + GEOMAP: ClassVar["WidgetType"] + LIST_STREAM: ClassVar["WidgetType"] + QUERY_TABLE: ClassVar["WidgetType"] + QUERY_VALUE: ClassVar["WidgetType"] + RETENTION_CURVE: ClassVar["WidgetType"] + SANKEY: ClassVar["WidgetType"] + SUNBURST: ClassVar["WidgetType"] + TIMESERIES: ClassVar["WidgetType"] + TOPLIST: ClassVar["WidgetType"] + TREEMAP: ClassVar["WidgetType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WidgetType.BAR_CHART = WidgetType("bar_chart") +WidgetType.CHANGE = WidgetType("change") +WidgetType.CLOUD_COST_SUMMARY = WidgetType("cloud_cost_summary") +WidgetType.COHORT = WidgetType("cohort") +WidgetType.FUNNEL = WidgetType("funnel") +WidgetType.GEOMAP = WidgetType("geomap") +WidgetType.LIST_STREAM = WidgetType("list_stream") +WidgetType.QUERY_TABLE = WidgetType("query_table") +WidgetType.QUERY_VALUE = WidgetType("query_value") +WidgetType.RETENTION_CURVE = WidgetType("retention_curve") +WidgetType.SANKEY = WidgetType("sankey") +WidgetType.SUNBURST = WidgetType("sunburst") +WidgetType.TIMESERIES = WidgetType("timeseries") +WidgetType.TOPLIST = WidgetType("toplist") +WidgetType.TREEMAP = WidgetType("treemap") diff --git a/datadog_api_client/v2/model/workflow_data.py b/datadog_api_client/v2/model/workflow_data.py new file mode 100644 index 0000000000..bcb1954e63 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_data.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_data_attributes import WorkflowDataAttributes + from datadog_api_client.v2.model.workflow_data_relationships import WorkflowDataRelationships + from datadog_api_client.v2.model.workflow_data_type import WorkflowDataType + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class WorkflowData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_data_attributes import WorkflowDataAttributes + from datadog_api_client.v2.model.workflow_data_relationships import WorkflowDataRelationships + from datadog_api_client.v2.model.workflow_data_type import WorkflowDataType + return { + "attributes": (WorkflowDataAttributes,), + "id": (str,), + "relationships": (WorkflowDataRelationships,), + "type": (WorkflowDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + read_only_vars = { + "id", + "relationships", + } + + def __init__(self_, attributes: WorkflowDataAttributes, type: WorkflowDataType, id: Union[str, UnsetType]=unset, relationships: Union[WorkflowDataRelationships, UnsetType]=unset, **kwargs): + """ + Data related to the workflow. + + :param attributes: The definition of ``WorkflowDataAttributes`` object. + :type attributes: WorkflowDataAttributes + + :param id: The workflow identifier + :type id: str, optional + + :param relationships: The definition of ``WorkflowDataRelationships`` object. + :type relationships: WorkflowDataRelationships, optional + + :param type: The definition of ``WorkflowDataType`` object. + :type type: WorkflowDataType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/workflow_data_attributes.py b/datadog_api_client/v2/model/workflow_data_attributes.py new file mode 100644 index 0000000000..e8adf1edee --- /dev/null +++ b/datadog_api_client/v2/model/workflow_data_attributes.py @@ -0,0 +1,120 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spec import Spec + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class WorkflowDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spec import Spec + return { + "created_at": (datetime,), + "description": (str,), + "name": (str,), + "published": (bool,), + "spec": (Spec,), + "tags": ([str],), + "updated_at": (datetime,), + "webhook_secret": (str,), + } + attribute_map = { + "created_at": "createdAt", + "description": "description", + "name": "name", + "published": "published", + "spec": "spec", + "tags": "tags", + "updated_at": "updatedAt", + "webhook_secret": "webhookSecret", + } + read_only_vars = { + "created_at", + "updated_at", + } + + def __init__(self_, name: str, spec: Spec, created_at: Union[datetime, UnsetType]=unset, description: Union[str, UnsetType]=unset, published: Union[bool, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, webhook_secret: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``WorkflowDataAttributes`` object. + + :param created_at: When the workflow was created. + :type created_at: datetime, optional + + :param description: Description of the workflow. + :type description: str, optional + + :param name: Name of the workflow. + :type name: str + + :param published: Set the workflow to published or unpublished. Workflows in an unpublished state will only be executable via manual runs. Automatic triggers such as Schedule will not execute the workflow until it is published. + :type published: bool, optional + + :param spec: A complete Workflow Automation definition, including its triggers, steps, and connections. + :type spec: Spec + + :param tags: Tags of the workflow. + :type tags: [str], optional + + :param updated_at: When the workflow was last updated. + :type updated_at: datetime, optional + + :param webhook_secret: If a Webhook trigger is defined on this workflow, a webhookSecret is required and should be provided here. + :type webhook_secret: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if published is not unset: + kwargs["published"] = published + if tags is not unset: + kwargs["tags"] = tags + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if webhook_secret is not unset: + kwargs["webhook_secret"] = webhook_secret + super().__init__(kwargs) + + + self_.name = name + self_.spec = spec diff --git a/datadog_api_client/v2/model/workflow_data_relationships.py b/datadog_api_client/v2/model/workflow_data_relationships.py new file mode 100644 index 0000000000..29d43fd455 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_data_relationships.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_user_relationship import WorkflowUserRelationship + +class WorkflowDataRelationships(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_user_relationship import WorkflowUserRelationship + return { + "creator": (WorkflowUserRelationship,), + "owner": (WorkflowUserRelationship,), + } + attribute_map = { + "creator": "creator", + "owner": "owner", + } + + def __init__(self_, creator: Union[WorkflowUserRelationship, UnsetType]=unset, owner: Union[WorkflowUserRelationship, UnsetType]=unset, **kwargs): + """ + The definition of ``WorkflowDataRelationships`` object. + + :param creator: The definition of ``WorkflowUserRelationship`` object. + :type creator: WorkflowUserRelationship, optional + + :param owner: The definition of ``WorkflowUserRelationship`` object. + :type owner: WorkflowUserRelationship, optional + """ + if creator is not unset: + kwargs["creator"] = creator + if owner is not unset: + kwargs["owner"] = owner + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_data_type.py b/datadog_api_client/v2/model/workflow_data_type.py new file mode 100644 index 0000000000..a307709096 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_data_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WorkflowDataType(ModelSimple): + """ + The definition of `WorkflowDataType` object. + + :param value: If omitted defaults to "workflows". Must be one of ["workflows"]. + :type value: str + """ + + allowed_values = { + "workflows", + } + WORKFLOWS: ClassVar["WorkflowDataType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WorkflowDataType.WORKFLOWS = WorkflowDataType("workflows") diff --git a/datadog_api_client/v2/model/workflow_data_update.py b/datadog_api_client/v2/model/workflow_data_update.py new file mode 100644 index 0000000000..dbb4e76479 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_data_update.py @@ -0,0 +1,95 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_data_update_attributes import WorkflowDataUpdateAttributes + from datadog_api_client.v2.model.workflow_data_relationships import WorkflowDataRelationships + from datadog_api_client.v2.model.workflow_data_type import WorkflowDataType + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class WorkflowDataUpdate(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_data_update_attributes import WorkflowDataUpdateAttributes + from datadog_api_client.v2.model.workflow_data_relationships import WorkflowDataRelationships + from datadog_api_client.v2.model.workflow_data_type import WorkflowDataType + return { + "attributes": (WorkflowDataUpdateAttributes,), + "id": (str,), + "relationships": (WorkflowDataRelationships,), + "type": (WorkflowDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + read_only_vars = { + "relationships", + } + + def __init__(self_, attributes: WorkflowDataUpdateAttributes, type: WorkflowDataType, id: Union[str, UnsetType]=unset, relationships: Union[WorkflowDataRelationships, UnsetType]=unset, **kwargs): + """ + Data related to the workflow being updated. + + :param attributes: The definition of ``WorkflowDataUpdateAttributes`` object. + :type attributes: WorkflowDataUpdateAttributes + + :param id: The workflow identifier + :type id: str, optional + + :param relationships: The definition of ``WorkflowDataRelationships`` object. + :type relationships: WorkflowDataRelationships, optional + + :param type: The definition of ``WorkflowDataType`` object. + :type type: WorkflowDataType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/workflow_data_update_attributes.py b/datadog_api_client/v2/model/workflow_data_update_attributes.py new file mode 100644 index 0000000000..0e44e0ef13 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_data_update_attributes.py @@ -0,0 +1,122 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spec import Spec + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class WorkflowDataUpdateAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spec import Spec + return { + "created_at": (datetime,), + "description": (str,), + "name": (str,), + "published": (bool,), + "spec": (Spec,), + "tags": ([str],), + "updated_at": (datetime,), + "webhook_secret": (str,), + } + attribute_map = { + "created_at": "createdAt", + "description": "description", + "name": "name", + "published": "published", + "spec": "spec", + "tags": "tags", + "updated_at": "updatedAt", + "webhook_secret": "webhookSecret", + } + read_only_vars = { + "created_at", + "updated_at", + } + + def __init__(self_, created_at: Union[datetime, UnsetType]=unset, description: Union[str, UnsetType]=unset, name: Union[str, UnsetType]=unset, published: Union[bool, UnsetType]=unset, spec: Union[Spec, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, webhook_secret: Union[str, UnsetType]=unset, **kwargs): + """ + The definition of ``WorkflowDataUpdateAttributes`` object. + + :param created_at: When the workflow was created. + :type created_at: datetime, optional + + :param description: Description of the workflow. + :type description: str, optional + + :param name: Name of the workflow. + :type name: str, optional + + :param published: Set the workflow to published or unpublished. Workflows in an unpublished state will only be executable via manual runs. Automatic triggers such as Schedule will not execute the workflow until it is published. + :type published: bool, optional + + :param spec: A complete Workflow Automation definition, including its triggers, steps, and connections. + :type spec: Spec, optional + + :param tags: Tags of the workflow. + :type tags: [str], optional + + :param updated_at: When the workflow was last updated. + :type updated_at: datetime, optional + + :param webhook_secret: If a Webhook trigger is defined on this workflow, a webhookSecret is required and should be provided here. + :type webhook_secret: str, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if name is not unset: + kwargs["name"] = name + if published is not unset: + kwargs["published"] = published + if spec is not unset: + kwargs["spec"] = spec + if tags is not unset: + kwargs["tags"] = tags + if updated_at is not unset: + kwargs["updated_at"] = updated_at + if webhook_secret is not unset: + kwargs["webhook_secret"] = webhook_secret + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_instance_create_meta.py b/datadog_api_client/v2/model/workflow_instance_create_meta.py new file mode 100644 index 0000000000..5d9537c92d --- /dev/null +++ b/datadog_api_client/v2/model/workflow_instance_create_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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WorkflowInstanceCreateMeta(ModelNormal): + @cached_property + def openapi_types(_): + return { + "payload": ({str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)},), + } + attribute_map = { + "payload": "payload", + } + + def __init__(self_, payload: Union[Dict[str, Any], UnsetType]=unset, **kwargs): + """ + Additional information for creating a workflow instance. + + :param payload: The input parameters to the workflow. + :type payload: {str: (bool, date, datetime, dict, float, int, list, str, UUID, none_type,)}, optional + """ + if payload is not unset: + kwargs["payload"] = payload + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_instance_create_request.py b/datadog_api_client/v2/model/workflow_instance_create_request.py new file mode 100644 index 0000000000..1309afe765 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_instance_create_request.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_instance_create_meta import WorkflowInstanceCreateMeta + +class WorkflowInstanceCreateRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_instance_create_meta import WorkflowInstanceCreateMeta + return { + "meta": (WorkflowInstanceCreateMeta,), + } + attribute_map = { + "meta": "meta", + } + + def __init__(self_, meta: Union[WorkflowInstanceCreateMeta, UnsetType]=unset, **kwargs): + """ + Request used to create a workflow instance. + + :param meta: Additional information for creating a workflow instance. + :type meta: WorkflowInstanceCreateMeta, optional + """ + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_instance_create_response.py b/datadog_api_client/v2/model/workflow_instance_create_response.py new file mode 100644 index 0000000000..213465de28 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_instance_create_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_instance_create_response_data import WorkflowInstanceCreateResponseData + +class WorkflowInstanceCreateResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_instance_create_response_data import WorkflowInstanceCreateResponseData + return { + "data": (WorkflowInstanceCreateResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[WorkflowInstanceCreateResponseData, UnsetType]=unset, **kwargs): + """ + Response returned upon successful workflow instance creation. + + :param data: Data about the created workflow instance. + :type data: WorkflowInstanceCreateResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_instance_create_response_data.py b/datadog_api_client/v2/model/workflow_instance_create_response_data.py new file mode 100644 index 0000000000..e75dec944f --- /dev/null +++ b/datadog_api_client/v2/model/workflow_instance_create_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WorkflowInstanceCreateResponseData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data about the created workflow instance. + + :param id: The ID of the workflow execution. It can be used to fetch the execution status. + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_instance_list_item.py b/datadog_api_client/v2/model/workflow_instance_list_item.py new file mode 100644 index 0000000000..312aea138f --- /dev/null +++ b/datadog_api_client/v2/model/workflow_instance_list_item.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WorkflowInstanceListItem(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, **kwargs): + """ + An item in the workflow instances list. + + :param id: The ID of the workflow instance + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_list_instances_response.py b/datadog_api_client/v2/model/workflow_list_instances_response.py new file mode 100644 index 0000000000..42435a796d --- /dev/null +++ b/datadog_api_client/v2/model/workflow_list_instances_response.py @@ -0,0 +1,58 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_instance_list_item import WorkflowInstanceListItem + from datadog_api_client.v2.model.workflow_list_instances_response_meta import WorkflowListInstancesResponseMeta + +class WorkflowListInstancesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_instance_list_item import WorkflowInstanceListItem + from datadog_api_client.v2.model.workflow_list_instances_response_meta import WorkflowListInstancesResponseMeta + return { + "data": ([WorkflowInstanceListItem],), + "meta": (WorkflowListInstancesResponseMeta,), + } + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__(self_, data: Union[List[WorkflowInstanceListItem], UnsetType]=unset, meta: Union[WorkflowListInstancesResponseMeta, UnsetType]=unset, **kwargs): + """ + Response returned when listing workflow instances. + + :param data: A list of workflow instances. + :type data: [WorkflowInstanceListItem], optional + + :param meta: Metadata about the instances list + :type meta: WorkflowListInstancesResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_list_instances_response_meta.py b/datadog_api_client/v2/model/workflow_list_instances_response_meta.py new file mode 100644 index 0000000000..c1e643bde0 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_list_instances_response_meta.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_list_instances_response_meta_page import WorkflowListInstancesResponseMetaPage + +class WorkflowListInstancesResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_list_instances_response_meta_page import WorkflowListInstancesResponseMetaPage + return { + "page": (WorkflowListInstancesResponseMetaPage,), + } + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[WorkflowListInstancesResponseMetaPage, UnsetType]=unset, **kwargs): + """ + Metadata about the instances list + + :param page: Page information for the list instances response. + :type page: WorkflowListInstancesResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_list_instances_response_meta_page.py b/datadog_api_client/v2/model/workflow_list_instances_response_meta_page.py new file mode 100644 index 0000000000..cc564d6686 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_list_instances_response_meta_page.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WorkflowListInstancesResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "total_count": (int,), + } + attribute_map = { + "total_count": "totalCount", + } + + def __init__(self_, total_count: Union[int, UnsetType]=unset, **kwargs): + """ + Page information for the list instances response. + + :param total_count: The total count of items. + :type total_count: int, optional + """ + if total_count is not unset: + kwargs["total_count"] = total_count + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_list_item.py b/datadog_api_client/v2/model/workflow_list_item.py new file mode 100644 index 0000000000..0a5379bb19 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_list_item.py @@ -0,0 +1,96 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_list_item_attributes import WorkflowListItemAttributes + from datadog_api_client.v2.model.workflow_data_relationships import WorkflowDataRelationships + from datadog_api_client.v2.model.workflow_data_type import WorkflowDataType + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class WorkflowListItem(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_list_item_attributes import WorkflowListItemAttributes + from datadog_api_client.v2.model.workflow_data_relationships import WorkflowDataRelationships + from datadog_api_client.v2.model.workflow_data_type import WorkflowDataType + return { + "attributes": (WorkflowListItemAttributes,), + "id": (str,), + "relationships": (WorkflowDataRelationships,), + "type": (WorkflowDataType,), + } + attribute_map = { + "attributes": "attributes", + "id": "id", + "relationships": "relationships", + "type": "type", + } + read_only_vars = { + "id", + "relationships", + } + + def __init__(self_, attributes: WorkflowListItemAttributes, type: WorkflowDataType, id: Union[str, UnsetType]=unset, relationships: Union[WorkflowDataRelationships, UnsetType]=unset, **kwargs): + """ + A workflow returned by the list workflows endpoint. + + :param attributes: Attributes of a workflow returned in a list response. + :type attributes: WorkflowListItemAttributes + + :param id: The workflow identifier. + :type id: str, optional + + :param relationships: The definition of ``WorkflowDataRelationships`` object. + :type relationships: WorkflowDataRelationships, optional + + :param type: The definition of ``WorkflowDataType`` object. + :type type: WorkflowDataType + """ + if id is not unset: + kwargs["id"] = id + if relationships is not unset: + kwargs["relationships"] = relationships + super().__init__(kwargs) + + + self_.attributes = attributes + self_.type = type diff --git a/datadog_api_client/v2/model/workflow_list_item_attributes.py b/datadog_api_client/v2/model/workflow_list_item_attributes.py new file mode 100644 index 0000000000..0bf8747fdf --- /dev/null +++ b/datadog_api_client/v2/model/workflow_list_item_attributes.py @@ -0,0 +1,114 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.spec import Spec + from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper + from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper + from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper + from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper + from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper + from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper + from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper + from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper + from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper + from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper + from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper + from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper + from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper + from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper + from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper + from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper + from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper + from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper + from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper + from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper + +class WorkflowListItemAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.spec import Spec + return { + "created_at": (datetime,), + "description": (str,), + "name": (str,), + "published": (bool,), + "spec": (Spec,), + "tags": ([str],), + "updated_at": (datetime,), + } + attribute_map = { + "created_at": "createdAt", + "description": "description", + "name": "name", + "published": "published", + "spec": "spec", + "tags": "tags", + "updated_at": "updatedAt", + } + read_only_vars = { + "created_at", + "updated_at", + } + + def __init__(self_, name: str, created_at: Union[datetime, UnsetType]=unset, description: Union[str, UnsetType]=unset, published: Union[bool, UnsetType]=unset, spec: Union[Spec, UnsetType]=unset, tags: Union[List[str], UnsetType]=unset, updated_at: Union[datetime, UnsetType]=unset, **kwargs): + """ + Attributes of a workflow returned in a list response. + + :param created_at: When the workflow was created. + :type created_at: datetime, optional + + :param description: Description of the workflow. + :type description: str, optional + + :param name: Name of the workflow. + :type name: str + + :param published: Whether the workflow is published. Unpublished workflows can only be run manually. Automatic triggers such as Schedule do not fire until the workflow is published. + :type published: bool, optional + + :param spec: A complete Workflow Automation definition, including its triggers, steps, and connections. + :type spec: Spec, optional + + :param tags: Tags of the workflow. + :type tags: [str], optional + + :param updated_at: When the workflow was last updated. + :type updated_at: datetime, optional + """ + if created_at is not unset: + kwargs["created_at"] = created_at + if description is not unset: + kwargs["description"] = description + if published is not unset: + kwargs["published"] = published + if spec is not unset: + kwargs["spec"] = spec + if tags is not unset: + kwargs["tags"] = tags + if updated_at is not unset: + kwargs["updated_at"] = updated_at + super().__init__(kwargs) + + + self_.name = name diff --git a/datadog_api_client/v2/model/workflow_trigger_wrapper.py b/datadog_api_client/v2/model/workflow_trigger_wrapper.py new file mode 100644 index 0000000000..a47a8aeb83 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_trigger_wrapper.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WorkflowTriggerWrapper(ModelNormal): + @cached_property + def openapi_types(_): + return { + "start_step_names": ([str],), + "workflow_trigger": (dict,), + } + attribute_map = { + "start_step_names": "startStepNames", + "workflow_trigger": "workflowTrigger", + } + + def __init__(self_, workflow_trigger: dict, start_step_names: Union[List[str], UnsetType]=unset, **kwargs): + """ + Schema for a Workflow-based trigger. + + :param start_step_names: Names of existing workflow steps that run first after a trigger fires. + :type start_step_names: [str], optional + + :param workflow_trigger: Trigger a workflow from the Datadog UI. When present, this must be the workflow's only trigger. + :type workflow_trigger: dict + """ + if start_step_names is not unset: + kwargs["start_step_names"] = start_step_names + super().__init__(kwargs) + + + self_.workflow_trigger = workflow_trigger diff --git a/datadog_api_client/v2/model/workflow_user_relationship.py b/datadog_api_client/v2/model/workflow_user_relationship.py new file mode 100644 index 0000000000..91f9c93940 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_user_relationship.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_user_relationship_data import WorkflowUserRelationshipData + +class WorkflowUserRelationship(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_user_relationship_data import WorkflowUserRelationshipData + return { + "data": (WorkflowUserRelationshipData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[WorkflowUserRelationshipData, UnsetType]=unset, **kwargs): + """ + The definition of ``WorkflowUserRelationship`` object. + + :param data: The definition of ``WorkflowUserRelationshipData`` object. + :type data: WorkflowUserRelationshipData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/workflow_user_relationship_data.py b/datadog_api_client/v2/model/workflow_user_relationship_data.py new file mode 100644 index 0000000000..a088b63af3 --- /dev/null +++ b/datadog_api_client/v2/model/workflow_user_relationship_data.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.workflow_user_relationship_type import WorkflowUserRelationshipType + +class WorkflowUserRelationshipData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.workflow_user_relationship_type import WorkflowUserRelationshipType + return { + "id": (str,), + "type": (WorkflowUserRelationshipType,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: WorkflowUserRelationshipType, **kwargs): + """ + The definition of ``WorkflowUserRelationshipData`` object. + + :param id: The user identifier + :type id: str + + :param type: The definition of ``WorkflowUserRelationshipType`` object. + :type type: WorkflowUserRelationshipType + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/model/workflow_user_relationship_type.py b/datadog_api_client/v2/model/workflow_user_relationship_type.py new file mode 100644 index 0000000000..5f76d78ead --- /dev/null +++ b/datadog_api_client/v2/model/workflow_user_relationship_type.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + +from typing import ClassVar + +class WorkflowUserRelationshipType(ModelSimple): + """ + The definition of `WorkflowUserRelationshipType` object. + + :param value: If omitted defaults to "users". Must be one of ["users"]. + :type value: str + """ + + allowed_values = { + "users", + } + USERS: ClassVar["WorkflowUserRelationshipType"] + + + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } +WorkflowUserRelationshipType.USERS = WorkflowUserRelationshipType("users") diff --git a/datadog_api_client/v2/model/worklflow_cancel_instance_response.py b/datadog_api_client/v2/model/worklflow_cancel_instance_response.py new file mode 100644 index 0000000000..621ffe4f03 --- /dev/null +++ b/datadog_api_client/v2/model/worklflow_cancel_instance_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.worklflow_cancel_instance_response_data import WorklflowCancelInstanceResponseData + +class WorklflowCancelInstanceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.worklflow_cancel_instance_response_data import WorklflowCancelInstanceResponseData + return { + "data": (WorklflowCancelInstanceResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[WorklflowCancelInstanceResponseData, UnsetType]=unset, **kwargs): + """ + Information about the canceled instance. + + :param data: Data about the canceled instance. + :type data: WorklflowCancelInstanceResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/worklflow_cancel_instance_response_data.py b/datadog_api_client/v2/model/worklflow_cancel_instance_response_data.py new file mode 100644 index 0000000000..d95c482176 --- /dev/null +++ b/datadog_api_client/v2/model/worklflow_cancel_instance_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WorklflowCancelInstanceResponseData(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, **kwargs): + """ + Data about the canceled instance. + + :param id: The id of the canceled instance + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/worklflow_get_instance_response.py b/datadog_api_client/v2/model/worklflow_get_instance_response.py new file mode 100644 index 0000000000..bac7103448 --- /dev/null +++ b/datadog_api_client/v2/model/worklflow_get_instance_response.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.worklflow_get_instance_response_data import WorklflowGetInstanceResponseData + +class WorklflowGetInstanceResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.worklflow_get_instance_response_data import WorklflowGetInstanceResponseData + return { + "data": (WorklflowGetInstanceResponseData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[WorklflowGetInstanceResponseData, UnsetType]=unset, **kwargs): + """ + The state of the given workflow instance. + + :param data: The data of the instance response. + :type data: WorklflowGetInstanceResponseData, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/worklflow_get_instance_response_data.py b/datadog_api_client/v2/model/worklflow_get_instance_response_data.py new file mode 100644 index 0000000000..126b707da3 --- /dev/null +++ b/datadog_api_client/v2/model/worklflow_get_instance_response_data.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.worklflow_get_instance_response_data_attributes import WorklflowGetInstanceResponseDataAttributes + +class WorklflowGetInstanceResponseData(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.worklflow_get_instance_response_data_attributes import WorklflowGetInstanceResponseDataAttributes + return { + "attributes": (WorklflowGetInstanceResponseDataAttributes,), + } + attribute_map = { + "attributes": "attributes", + } + + def __init__(self_, attributes: Union[WorklflowGetInstanceResponseDataAttributes, UnsetType]=unset, **kwargs): + """ + The data of the instance response. + + :param attributes: The attributes of the instance response data. + :type attributes: WorklflowGetInstanceResponseDataAttributes, optional + """ + if attributes is not unset: + kwargs["attributes"] = attributes + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/worklflow_get_instance_response_data_attributes.py b/datadog_api_client/v2/model/worklflow_get_instance_response_data_attributes.py new file mode 100644 index 0000000000..f577eb37a8 --- /dev/null +++ b/datadog_api_client/v2/model/worklflow_get_instance_response_data_attributes.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class WorklflowGetInstanceResponseDataAttributes(ModelNormal): + @cached_property + def openapi_types(_): + return { + "id": (str,), + } + attribute_map = { + "id": "id", + } + + def __init__(self_, id: Union[str, UnsetType]=unset, **kwargs): + """ + The attributes of the instance response data. + + :param id: The id of the instance. + :type id: str, optional + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + diff --git a/datadog_api_client/v2/model/x_ray_services_include_all.py b/datadog_api_client/v2/model/x_ray_services_include_all.py new file mode 100644 index 0000000000..71dca24443 --- /dev/null +++ b/datadog_api_client/v2/model/x_ray_services_include_all.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 typing import Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class XRayServicesIncludeAll(ModelNormal): + @cached_property + def openapi_types(_): + return { + "include_all": (bool,), + } + attribute_map = { + "include_all": "include_all", + } + + def __init__(self_, include_all: bool, **kwargs): + """ + Include all services. + + :param include_all: Include all services. + :type include_all: bool + """ + super().__init__(kwargs) + + + self_.include_all = include_all diff --git a/datadog_api_client/v2/model/x_ray_services_include_only.py b/datadog_api_client/v2/model/x_ray_services_include_only.py new file mode 100644 index 0000000000..7b7ffc8e8d --- /dev/null +++ b/datadog_api_client/v2/model/x_ray_services_include_only.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class XRayServicesIncludeOnly(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "include_only": ([str],), + } + attribute_map = { + "include_only": "include_only", + } + + def __init__(self_, include_only: List[str], **kwargs): + """ + Include only these services. Defaults to ``[]``. + + :param include_only: Include only these services. + :type include_only: [str] + """ + super().__init__(kwargs) + + + self_.include_only = include_only diff --git a/datadog_api_client/v2/model/x_ray_services_list.py b/datadog_api_client/v2/model/x_ray_services_list.py new file mode 100644 index 0000000000..25f5a85c23 --- /dev/null +++ b/datadog_api_client/v2/model/x_ray_services_list.py @@ -0,0 +1,57 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class XRayServicesList(ModelComposed): + + + + def __init__(self, **kwargs): + """ + AWS X-Ray services to collect traces from. Defaults to ``include_only``. + + :param include_all: Include all services. + :type include_all: bool + + :param include_only: Include only these services. + :type include_only: [str] + """ + 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.x_ray_services_include_all import XRayServicesIncludeAll + from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly + return { + "oneOf": [ + XRayServicesIncludeAll, + XRayServicesIncludeOnly, + ], + } diff --git a/datadog_api_client/v2/model/zoom_configuration_reference.py b/datadog_api_client/v2/model/zoom_configuration_reference.py new file mode 100644 index 0000000000..e8947ee40a --- /dev/null +++ b/datadog_api_client/v2/model/zoom_configuration_reference.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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.zoom_configuration_reference_data import ZoomConfigurationReferenceData + +class ZoomConfigurationReference(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.zoom_configuration_reference_data import ZoomConfigurationReferenceData + return { + "data": (ZoomConfigurationReferenceData,), + } + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[ZoomConfigurationReferenceData, none_type], **kwargs): + """ + A reference to a Zoom configuration resource. + + :param data: The Zoom configuration relationship data object. + :type data: ZoomConfigurationReferenceData, none_type + """ + super().__init__(kwargs) + + + self_.data = data diff --git a/datadog_api_client/v2/model/zoom_configuration_reference_data.py b/datadog_api_client/v2/model/zoom_configuration_reference_data.py new file mode 100644 index 0000000000..a4a48259e8 --- /dev/null +++ b/datadog_api_client/v2/model/zoom_configuration_reference_data.py @@ -0,0 +1,52 @@ +# 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 Any, Dict, List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ApiTypeError, + ModelComposed, + ModelNormal, + ModelSimple, + cached_property, + date, + datetime, + file_type, + none_type, + unset, + UnsetType, + UUID, +) + + + +class ZoomConfigurationReferenceData(ModelNormal): + _nullable = True + @cached_property + def openapi_types(_): + return { + "id": (str,), + "type": (str,), + } + attribute_map = { + "id": "id", + "type": "type", + } + + def __init__(self_, id: str, type: str, **kwargs): + """ + The Zoom configuration relationship data object. + + :param id: The unique identifier of the Zoom configuration. + :type id: str + + :param type: The type of the Zoom configuration. + :type type: str + """ + super().__init__(kwargs) + + + self_.id = id + self_.type = type diff --git a/datadog_api_client/v2/models/__init__.py b/datadog_api_client/v2/models/__init__.py new file mode 100644 index 0000000000..670e5ea29f --- /dev/null +++ b/datadog_api_client/v2/models/__init__.py @@ -0,0 +1,14772 @@ + +from datadog_api_client.v2.model.api_error_response import APIErrorResponse +from datadog_api_client.v2.model.api_key_create_attributes import APIKeyCreateAttributes +from datadog_api_client.v2.model.api_key_create_data import APIKeyCreateData +from datadog_api_client.v2.model.api_key_create_request import APIKeyCreateRequest +from datadog_api_client.v2.model.api_key_relationships import APIKeyRelationships +from datadog_api_client.v2.model.api_key_response import APIKeyResponse +from datadog_api_client.v2.model.api_key_response_included_item import APIKeyResponseIncludedItem +from datadog_api_client.v2.model.api_key_update_attributes import APIKeyUpdateAttributes +from datadog_api_client.v2.model.api_key_update_data import APIKeyUpdateData +from datadog_api_client.v2.model.api_key_update_request import APIKeyUpdateRequest +from datadog_api_client.v2.model.api_keys_response import APIKeysResponse +from datadog_api_client.v2.model.api_keys_response_meta import APIKeysResponseMeta +from datadog_api_client.v2.model.api_keys_response_meta_page import APIKeysResponseMetaPage +from datadog_api_client.v2.model.api_keys_sort import APIKeysSort +from datadog_api_client.v2.model.api_keys_type import APIKeysType +from datadog_api_client.v2.model.api_trigger import APITrigger +from datadog_api_client.v2.model.api_trigger_wrapper import APITriggerWrapper +from datadog_api_client.v2.model.apm_span_error_flag import APMSpanErrorFlag +from datadog_api_client.v2.model.apm_trace_span import APMTraceSpan +from datadog_api_client.v2.model.aws_account_create_request import AWSAccountCreateRequest +from datadog_api_client.v2.model.aws_account_create_request_attributes import AWSAccountCreateRequestAttributes +from datadog_api_client.v2.model.aws_account_create_request_data import AWSAccountCreateRequestData +from datadog_api_client.v2.model.aws_account_partition import AWSAccountPartition +from datadog_api_client.v2.model.aws_account_response import AWSAccountResponse +from datadog_api_client.v2.model.aws_account_response_attributes import AWSAccountResponseAttributes +from datadog_api_client.v2.model.aws_account_response_data import AWSAccountResponseData +from datadog_api_client.v2.model.aws_account_type import AWSAccountType +from datadog_api_client.v2.model.aws_account_update_request import AWSAccountUpdateRequest +from datadog_api_client.v2.model.aws_account_update_request_attributes import AWSAccountUpdateRequestAttributes +from datadog_api_client.v2.model.aws_account_update_request_data import AWSAccountUpdateRequestData +from datadog_api_client.v2.model.aws_accounts_response import AWSAccountsResponse +from datadog_api_client.v2.model.aws_assume_role import AWSAssumeRole +from datadog_api_client.v2.model.aws_assume_role_type import AWSAssumeRoleType +from datadog_api_client.v2.model.aws_assume_role_update import AWSAssumeRoleUpdate +from datadog_api_client.v2.model.aws_auth_config import AWSAuthConfig +from datadog_api_client.v2.model.aws_auth_config_keys import AWSAuthConfigKeys +from datadog_api_client.v2.model.aws_auth_config_role import AWSAuthConfigRole +from datadog_api_client.v2.model.aws_ccm_config import AWSCcmConfig +from datadog_api_client.v2.model.aws_ccm_config_request import AWSCcmConfigRequest +from datadog_api_client.v2.model.aws_ccm_config_request_attributes import AWSCcmConfigRequestAttributes +from datadog_api_client.v2.model.aws_ccm_config_request_data import AWSCcmConfigRequestData +from datadog_api_client.v2.model.aws_ccm_config_response import AWSCcmConfigResponse +from datadog_api_client.v2.model.aws_ccm_config_response_attributes import AWSCcmConfigResponseAttributes +from datadog_api_client.v2.model.aws_ccm_config_response_data import AWSCcmConfigResponseData +from datadog_api_client.v2.model.aws_ccm_config_type import AWSCcmConfigType +from datadog_api_client.v2.model.aws_ccm_config_validation_issue import AWSCcmConfigValidationIssue +from datadog_api_client.v2.model.aws_ccm_config_validation_issue_code import AWSCcmConfigValidationIssueCode +from datadog_api_client.v2.model.aws_ccm_config_validation_request import AWSCcmConfigValidationRequest +from datadog_api_client.v2.model.aws_ccm_config_validation_request_attributes import AWSCcmConfigValidationRequestAttributes +from datadog_api_client.v2.model.aws_ccm_config_validation_request_data import AWSCcmConfigValidationRequestData +from datadog_api_client.v2.model.aws_ccm_config_validation_response import AWSCcmConfigValidationResponse +from datadog_api_client.v2.model.aws_ccm_config_validation_response_attributes import AWSCcmConfigValidationResponseAttributes +from datadog_api_client.v2.model.aws_ccm_config_validation_response_data import AWSCcmConfigValidationResponseData +from datadog_api_client.v2.model.aws_ccm_config_validation_type import AWSCcmConfigValidationType +from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_attributes_response import AWSCloudAuthPersonaMappingAttributesResponse +from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_create_attributes import AWSCloudAuthPersonaMappingCreateAttributes +from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_create_data import AWSCloudAuthPersonaMappingCreateData +from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_create_request import AWSCloudAuthPersonaMappingCreateRequest +from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_data_response import AWSCloudAuthPersonaMappingDataResponse +from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_response import AWSCloudAuthPersonaMappingResponse +from datadog_api_client.v2.model.aws_cloud_auth_persona_mapping_type import AWSCloudAuthPersonaMappingType +from datadog_api_client.v2.model.aws_cloud_auth_persona_mappings_response import AWSCloudAuthPersonaMappingsResponse +from datadog_api_client.v2.model.aws_credentials import AWSCredentials +from datadog_api_client.v2.model.aws_credentials_update import AWSCredentialsUpdate +from datadog_api_client.v2.model.aws_event_bridge_account_configuration import AWSEventBridgeAccountConfiguration +from datadog_api_client.v2.model.aws_event_bridge_create_request import AWSEventBridgeCreateRequest +from datadog_api_client.v2.model.aws_event_bridge_create_request_attributes import AWSEventBridgeCreateRequestAttributes +from datadog_api_client.v2.model.aws_event_bridge_create_request_data import AWSEventBridgeCreateRequestData +from datadog_api_client.v2.model.aws_event_bridge_create_response import AWSEventBridgeCreateResponse +from datadog_api_client.v2.model.aws_event_bridge_create_response_attributes import AWSEventBridgeCreateResponseAttributes +from datadog_api_client.v2.model.aws_event_bridge_create_response_data import AWSEventBridgeCreateResponseData +from datadog_api_client.v2.model.aws_event_bridge_create_status import AWSEventBridgeCreateStatus +from datadog_api_client.v2.model.aws_event_bridge_delete_request import AWSEventBridgeDeleteRequest +from datadog_api_client.v2.model.aws_event_bridge_delete_request_attributes import AWSEventBridgeDeleteRequestAttributes +from datadog_api_client.v2.model.aws_event_bridge_delete_request_data import AWSEventBridgeDeleteRequestData +from datadog_api_client.v2.model.aws_event_bridge_delete_response import AWSEventBridgeDeleteResponse +from datadog_api_client.v2.model.aws_event_bridge_delete_response_attributes import AWSEventBridgeDeleteResponseAttributes +from datadog_api_client.v2.model.aws_event_bridge_delete_response_data import AWSEventBridgeDeleteResponseData +from datadog_api_client.v2.model.aws_event_bridge_delete_status import AWSEventBridgeDeleteStatus +from datadog_api_client.v2.model.aws_event_bridge_list_response import AWSEventBridgeListResponse +from datadog_api_client.v2.model.aws_event_bridge_list_response_attributes import AWSEventBridgeListResponseAttributes +from datadog_api_client.v2.model.aws_event_bridge_list_response_data import AWSEventBridgeListResponseData +from datadog_api_client.v2.model.aws_event_bridge_source import AWSEventBridgeSource +from datadog_api_client.v2.model.aws_event_bridge_type import AWSEventBridgeType +from datadog_api_client.v2.model.aws_integration import AWSIntegration +from datadog_api_client.v2.model.aws_integration_iam_permissions_response import AWSIntegrationIamPermissionsResponse +from datadog_api_client.v2.model.aws_integration_iam_permissions_response_attributes import AWSIntegrationIamPermissionsResponseAttributes +from datadog_api_client.v2.model.aws_integration_iam_permissions_response_data import AWSIntegrationIamPermissionsResponseData +from datadog_api_client.v2.model.aws_integration_iam_permissions_response_data_type import AWSIntegrationIamPermissionsResponseDataType +from datadog_api_client.v2.model.aws_integration_type import AWSIntegrationType +from datadog_api_client.v2.model.aws_integration_update import AWSIntegrationUpdate +from datadog_api_client.v2.model.aws_lambda_forwarder_config import AWSLambdaForwarderConfig +from datadog_api_client.v2.model.aws_lambda_forwarder_config_log_source_config import AWSLambdaForwarderConfigLogSourceConfig +from datadog_api_client.v2.model.aws_log_source_tag_filter import AWSLogSourceTagFilter +from datadog_api_client.v2.model.aws_logs_config import AWSLogsConfig +from datadog_api_client.v2.model.aws_logs_services_response import AWSLogsServicesResponse +from datadog_api_client.v2.model.aws_logs_services_response_attributes import AWSLogsServicesResponseAttributes +from datadog_api_client.v2.model.aws_logs_services_response_data import AWSLogsServicesResponseData +from datadog_api_client.v2.model.aws_logs_services_response_data_type import AWSLogsServicesResponseDataType +from datadog_api_client.v2.model.aws_metric_name_filter_preview_dd_name import AWSMetricNameFilterPreviewDDName +from datadog_api_client.v2.model.aws_metric_name_filter_preview_filter_match import AWSMetricNameFilterPreviewFilterMatch +from datadog_api_client.v2.model.aws_metric_name_filter_preview_metric import AWSMetricNameFilterPreviewMetric +from datadog_api_client.v2.model.aws_metric_name_filter_preview_namespace import AWSMetricNameFilterPreviewNamespace +from datadog_api_client.v2.model.aws_metric_name_filter_preview_request import AWSMetricNameFilterPreviewRequest +from datadog_api_client.v2.model.aws_metric_name_filter_preview_request_attributes import AWSMetricNameFilterPreviewRequestAttributes +from datadog_api_client.v2.model.aws_metric_name_filter_preview_request_data import AWSMetricNameFilterPreviewRequestData +from datadog_api_client.v2.model.aws_metric_name_filter_preview_response import AWSMetricNameFilterPreviewResponse +from datadog_api_client.v2.model.aws_metric_name_filter_preview_response_attributes import AWSMetricNameFilterPreviewResponseAttributes +from datadog_api_client.v2.model.aws_metric_name_filter_preview_response_data import AWSMetricNameFilterPreviewResponseData +from datadog_api_client.v2.model.aws_metric_name_filter_preview_type import AWSMetricNameFilterPreviewType +from datadog_api_client.v2.model.aws_metric_name_filters import AWSMetricNameFilters +from datadog_api_client.v2.model.aws_metric_name_filters_exclude_only import AWSMetricNameFiltersExcludeOnly +from datadog_api_client.v2.model.aws_metric_name_filters_include_only import AWSMetricNameFiltersIncludeOnly +from datadog_api_client.v2.model.aws_metrics_config import AWSMetricsConfig +from datadog_api_client.v2.model.aws_namespace_filters import AWSNamespaceFilters +from datadog_api_client.v2.model.aws_namespace_filters_exclude_only import AWSNamespaceFiltersExcludeOnly +from datadog_api_client.v2.model.aws_namespace_filters_include_only import AWSNamespaceFiltersIncludeOnly +from datadog_api_client.v2.model.aws_namespace_tag_filter import AWSNamespaceTagFilter +from datadog_api_client.v2.model.aws_namespaces_response import AWSNamespacesResponse +from datadog_api_client.v2.model.aws_namespaces_response_attributes import AWSNamespacesResponseAttributes +from datadog_api_client.v2.model.aws_namespaces_response_data import AWSNamespacesResponseData +from datadog_api_client.v2.model.aws_namespaces_response_data_type import AWSNamespacesResponseDataType +from datadog_api_client.v2.model.aws_new_external_id_response import AWSNewExternalIDResponse +from datadog_api_client.v2.model.aws_new_external_id_response_attributes import AWSNewExternalIDResponseAttributes +from datadog_api_client.v2.model.aws_new_external_id_response_data import AWSNewExternalIDResponseData +from datadog_api_client.v2.model.aws_new_external_id_response_data_type import AWSNewExternalIDResponseDataType +from datadog_api_client.v2.model.aws_regions import AWSRegions +from datadog_api_client.v2.model.aws_regions_include_all import AWSRegionsIncludeAll +from datadog_api_client.v2.model.aws_regions_include_only import AWSRegionsIncludeOnly +from datadog_api_client.v2.model.aws_resources_config import AWSResourcesConfig +from datadog_api_client.v2.model.aws_traces_config import AWSTracesConfig +from datadog_api_client.v2.model.access_token_list_item import AccessTokenListItem +from datadog_api_client.v2.model.access_token_list_item_relationships import AccessTokenListItemRelationships +from datadog_api_client.v2.model.access_token_owner_type import AccessTokenOwnerType +from datadog_api_client.v2.model.access_tokens_type import AccessTokensType +from datadog_api_client.v2.model.account_filtering_config import AccountFilteringConfig +from datadog_api_client.v2.model.account_filters import AccountFilters +from datadog_api_client.v2.model.account_filters_attributes import AccountFiltersAttributes +from datadog_api_client.v2.model.account_filters_patch_data import AccountFiltersPatchData +from datadog_api_client.v2.model.account_filters_patch_request import AccountFiltersPatchRequest +from datadog_api_client.v2.model.account_filters_patch_request_attributes import AccountFiltersPatchRequestAttributes +from datadog_api_client.v2.model.account_filters_patch_request_type import AccountFiltersPatchRequestType +from datadog_api_client.v2.model.account_filters_response import AccountFiltersResponse +from datadog_api_client.v2.model.account_filters_type import AccountFiltersType +from datadog_api_client.v2.model.action_connection_attributes import ActionConnectionAttributes +from datadog_api_client.v2.model.action_connection_attributes_update import ActionConnectionAttributesUpdate +from datadog_api_client.v2.model.action_connection_data import ActionConnectionData +from datadog_api_client.v2.model.action_connection_data_type import ActionConnectionDataType +from datadog_api_client.v2.model.action_connection_data_update import ActionConnectionDataUpdate +from datadog_api_client.v2.model.action_connection_integration import ActionConnectionIntegration +from datadog_api_client.v2.model.action_connection_integration_update import ActionConnectionIntegrationUpdate +from datadog_api_client.v2.model.action_query import ActionQuery +from datadog_api_client.v2.model.action_query_condition import ActionQueryCondition +from datadog_api_client.v2.model.action_query_debounce_in_ms import ActionQueryDebounceInMs +from datadog_api_client.v2.model.action_query_mocked_outputs import ActionQueryMockedOutputs +from datadog_api_client.v2.model.action_query_mocked_outputs_enabled import ActionQueryMockedOutputsEnabled +from datadog_api_client.v2.model.action_query_mocked_outputs_object import ActionQueryMockedOutputsObject +from datadog_api_client.v2.model.action_query_only_trigger_manually import ActionQueryOnlyTriggerManually +from datadog_api_client.v2.model.action_query_polling_interval_in_ms import ActionQueryPollingIntervalInMs +from datadog_api_client.v2.model.action_query_properties import ActionQueryProperties +from datadog_api_client.v2.model.action_query_requires_confirmation import ActionQueryRequiresConfirmation +from datadog_api_client.v2.model.action_query_show_toast_on_error import ActionQueryShowToastOnError +from datadog_api_client.v2.model.action_query_spec import ActionQuerySpec +from datadog_api_client.v2.model.action_query_spec_connection_group import ActionQuerySpecConnectionGroup +from datadog_api_client.v2.model.action_query_spec_input import ActionQuerySpecInput +from datadog_api_client.v2.model.action_query_spec_inputs import ActionQuerySpecInputs +from datadog_api_client.v2.model.action_query_spec_object import ActionQuerySpecObject +from datadog_api_client.v2.model.action_query_type import ActionQueryType +from datadog_api_client.v2.model.active_billing_dimensions_attributes import ActiveBillingDimensionsAttributes +from datadog_api_client.v2.model.active_billing_dimensions_body import ActiveBillingDimensionsBody +from datadog_api_client.v2.model.active_billing_dimensions_response import ActiveBillingDimensionsResponse +from datadog_api_client.v2.model.active_billing_dimensions_type import ActiveBillingDimensionsType +from datadog_api_client.v2.model.add_member_team_request import AddMemberTeamRequest +from datadog_api_client.v2.model.advisory import Advisory +from datadog_api_client.v2.model.agent_trigger import AgentTrigger +from datadog_api_client.v2.model.agent_trigger_wrapper import AgentTriggerWrapper +from datadog_api_client.v2.model.aggregated_high_frozen_frame_rate import AggregatedHighFrozenFrameRate +from datadog_api_client.v2.model.aggregated_high_script_eval import AggregatedHighScriptEval +from datadog_api_client.v2.model.aggregated_long_tasks_by_invoker_type import AggregatedLongTasksByInvokerType +from datadog_api_client.v2.model.aggregated_long_tasks_request import AggregatedLongTasksRequest +from datadog_api_client.v2.model.aggregated_long_tasks_request_attributes import AggregatedLongTasksRequestAttributes +from datadog_api_client.v2.model.aggregated_long_tasks_request_data import AggregatedLongTasksRequestData +from datadog_api_client.v2.model.aggregated_long_tasks_request_type import AggregatedLongTasksRequestType +from datadog_api_client.v2.model.aggregated_long_tasks_response import AggregatedLongTasksResponse +from datadog_api_client.v2.model.aggregated_long_tasks_response_attributes import AggregatedLongTasksResponseAttributes +from datadog_api_client.v2.model.aggregated_long_tasks_response_data import AggregatedLongTasksResponseData +from datadog_api_client.v2.model.aggregated_low_cache_hit_rate import AggregatedLowCacheHitRate +from datadog_api_client.v2.model.aggregated_mobile_scroll_friction import AggregatedMobileScrollFriction +from datadog_api_client.v2.model.aggregated_resource import AggregatedResource +from datadog_api_client.v2.model.aggregated_resource_timing_breakdown import AggregatedResourceTimingBreakdown +from datadog_api_client.v2.model.aggregated_signals_problems_request import AggregatedSignalsProblemsRequest +from datadog_api_client.v2.model.aggregated_signals_problems_request_attributes import AggregatedSignalsProblemsRequestAttributes +from datadog_api_client.v2.model.aggregated_signals_problems_request_data import AggregatedSignalsProblemsRequestData +from datadog_api_client.v2.model.aggregated_signals_problems_request_type import AggregatedSignalsProblemsRequestType +from datadog_api_client.v2.model.aggregated_signals_problems_response import AggregatedSignalsProblemsResponse +from datadog_api_client.v2.model.aggregated_signals_problems_response_attributes import AggregatedSignalsProblemsResponseAttributes +from datadog_api_client.v2.model.aggregated_signals_problems_response_data import AggregatedSignalsProblemsResponseData +from datadog_api_client.v2.model.aggregated_slow_fcp_high_bytes import AggregatedSlowFCPHighBytes +from datadog_api_client.v2.model.aggregated_slow_interaction_long_task import AggregatedSlowInteractionLongTask +from datadog_api_client.v2.model.aggregated_uncompressed_resource import AggregatedUncompressedResource +from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria import AggregatedWaterfallPerformanceCriteria +from datadog_api_client.v2.model.aggregated_waterfall_performance_criteria_metric import AggregatedWaterfallPerformanceCriteriaMetric +from datadog_api_client.v2.model.aggregated_waterfall_request import AggregatedWaterfallRequest +from datadog_api_client.v2.model.aggregated_waterfall_request_attributes import AggregatedWaterfallRequestAttributes +from datadog_api_client.v2.model.aggregated_waterfall_request_data import AggregatedWaterfallRequestData +from datadog_api_client.v2.model.aggregated_waterfall_request_type import AggregatedWaterfallRequestType +from datadog_api_client.v2.model.aggregated_waterfall_response import AggregatedWaterfallResponse +from datadog_api_client.v2.model.aggregated_waterfall_response_attributes import AggregatedWaterfallResponseAttributes +from datadog_api_client.v2.model.aggregated_waterfall_response_data import AggregatedWaterfallResponseData +from datadog_api_client.v2.model.ai_custom_rule_data_type import AiCustomRuleDataType +from datadog_api_client.v2.model.ai_custom_rule_item import AiCustomRuleItem +from datadog_api_client.v2.model.ai_custom_rule_request import AiCustomRuleRequest +from datadog_api_client.v2.model.ai_custom_rule_request_attributes import AiCustomRuleRequestAttributes +from datadog_api_client.v2.model.ai_custom_rule_request_data import AiCustomRuleRequestData +from datadog_api_client.v2.model.ai_custom_rule_response import AiCustomRuleResponse +from datadog_api_client.v2.model.ai_custom_rule_response_data import AiCustomRuleResponseData +from datadog_api_client.v2.model.ai_custom_rule_revision_data_type import AiCustomRuleRevisionDataType +from datadog_api_client.v2.model.ai_custom_rule_revision_execution_mode import AiCustomRuleRevisionExecutionMode +from datadog_api_client.v2.model.ai_custom_rule_revision_request import AiCustomRuleRevisionRequest +from datadog_api_client.v2.model.ai_custom_rule_revision_request_attributes import AiCustomRuleRevisionRequestAttributes +from datadog_api_client.v2.model.ai_custom_rule_revision_request_data import AiCustomRuleRevisionRequestData +from datadog_api_client.v2.model.ai_custom_rule_revision_response import AiCustomRuleRevisionResponse +from datadog_api_client.v2.model.ai_custom_rule_revision_response_attributes import AiCustomRuleRevisionResponseAttributes +from datadog_api_client.v2.model.ai_custom_rule_revision_response_data import AiCustomRuleRevisionResponseData +from datadog_api_client.v2.model.ai_custom_rule_revisions_response import AiCustomRuleRevisionsResponse +from datadog_api_client.v2.model.ai_custom_ruleset_data_type import AiCustomRulesetDataType +from datadog_api_client.v2.model.ai_custom_ruleset_request import AiCustomRulesetRequest +from datadog_api_client.v2.model.ai_custom_ruleset_request_attributes import AiCustomRulesetRequestAttributes +from datadog_api_client.v2.model.ai_custom_ruleset_request_data import AiCustomRulesetRequestData +from datadog_api_client.v2.model.ai_custom_ruleset_response import AiCustomRulesetResponse +from datadog_api_client.v2.model.ai_custom_ruleset_response_attributes import AiCustomRulesetResponseAttributes +from datadog_api_client.v2.model.ai_custom_ruleset_response_data import AiCustomRulesetResponseData +from datadog_api_client.v2.model.ai_custom_ruleset_update_attributes import AiCustomRulesetUpdateAttributes +from datadog_api_client.v2.model.ai_custom_ruleset_update_data import AiCustomRulesetUpdateData +from datadog_api_client.v2.model.ai_custom_ruleset_update_request import AiCustomRulesetUpdateRequest +from datadog_api_client.v2.model.ai_custom_rulesets_response import AiCustomRulesetsResponse +from datadog_api_client.v2.model.ai_memory_violation_result_data_type import AiMemoryViolationResultDataType +from datadog_api_client.v2.model.ai_memory_violation_result_request import AiMemoryViolationResultRequest +from datadog_api_client.v2.model.ai_memory_violation_result_request_attributes import AiMemoryViolationResultRequestAttributes +from datadog_api_client.v2.model.ai_memory_violation_result_request_data import AiMemoryViolationResultRequestData +from datadog_api_client.v2.model.ai_memory_violation_result_response_attributes import AiMemoryViolationResultResponseAttributes +from datadog_api_client.v2.model.ai_memory_violation_result_response_data import AiMemoryViolationResultResponseData +from datadog_api_client.v2.model.ai_memory_violation_results_response import AiMemoryViolationResultsResponse +from datadog_api_client.v2.model.ai_memory_violation_type import AiMemoryViolationType +from datadog_api_client.v2.model.ai_prompt_data_type import AiPromptDataType +from datadog_api_client.v2.model.ai_prompt_response_attributes import AiPromptResponseAttributes +from datadog_api_client.v2.model.ai_prompt_response_data import AiPromptResponseData +from datadog_api_client.v2.model.ai_prompts_response import AiPromptsResponse +from datadog_api_client.v2.model.alert_event_attributes import AlertEventAttributes +from datadog_api_client.v2.model.alert_event_attributes_links_item import AlertEventAttributesLinksItem +from datadog_api_client.v2.model.alert_event_attributes_links_item_category import AlertEventAttributesLinksItemCategory +from datadog_api_client.v2.model.alert_event_attributes_priority import AlertEventAttributesPriority +from datadog_api_client.v2.model.alert_event_attributes_status import AlertEventAttributesStatus +from datadog_api_client.v2.model.alert_event_custom_attributes import AlertEventCustomAttributes +from datadog_api_client.v2.model.alert_event_custom_attributes_custom import AlertEventCustomAttributesCustom +from datadog_api_client.v2.model.alert_event_custom_attributes_links_items import AlertEventCustomAttributesLinksItems +from datadog_api_client.v2.model.alert_event_custom_attributes_links_items_category import AlertEventCustomAttributesLinksItemsCategory +from datadog_api_client.v2.model.alert_event_custom_attributes_priority import AlertEventCustomAttributesPriority +from datadog_api_client.v2.model.alert_event_custom_attributes_status import AlertEventCustomAttributesStatus +from datadog_api_client.v2.model.allocation import Allocation +from datadog_api_client.v2.model.allocation_data_request import AllocationDataRequest +from datadog_api_client.v2.model.allocation_data_response import AllocationDataResponse +from datadog_api_client.v2.model.allocation_data_type import AllocationDataType +from datadog_api_client.v2.model.allocation_exposure_guardrail_trigger import AllocationExposureGuardrailTrigger +from datadog_api_client.v2.model.allocation_exposure_rollout_step import AllocationExposureRolloutStep +from datadog_api_client.v2.model.allocation_exposure_schedule import AllocationExposureSchedule +from datadog_api_client.v2.model.allocation_exposure_schedule_data import AllocationExposureScheduleData +from datadog_api_client.v2.model.allocation_exposure_schedule_data_type import AllocationExposureScheduleDataType +from datadog_api_client.v2.model.allocation_exposure_schedule_response import AllocationExposureScheduleResponse +from datadog_api_client.v2.model.allocation_response import AllocationResponse +from datadog_api_client.v2.model.allocation_type import AllocationType +from datadog_api_client.v2.model.analysis_edit import AnalysisEdit +from datadog_api_client.v2.model.analysis_edit_type import AnalysisEditType +from datadog_api_client.v2.model.analysis_fix import AnalysisFix +from datadog_api_client.v2.model.analysis_position import AnalysisPosition +from datadog_api_client.v2.model.analysis_request import AnalysisRequest +from datadog_api_client.v2.model.analysis_request_data import AnalysisRequestData +from datadog_api_client.v2.model.analysis_request_data_attributes import AnalysisRequestDataAttributes +from datadog_api_client.v2.model.analysis_request_data_type import AnalysisRequestDataType +from datadog_api_client.v2.model.analysis_request_rule import AnalysisRequestRule +from datadog_api_client.v2.model.analysis_response import AnalysisResponse +from datadog_api_client.v2.model.analysis_response_data import AnalysisResponseData +from datadog_api_client.v2.model.analysis_response_data_attributes import AnalysisResponseDataAttributes +from datadog_api_client.v2.model.analysis_response_data_type import AnalysisResponseDataType +from datadog_api_client.v2.model.analysis_rule_response import AnalysisRuleResponse +from datadog_api_client.v2.model.analysis_violation import AnalysisViolation +from datadog_api_client.v2.model.annotation import Annotation +from datadog_api_client.v2.model.annotation_attributes import AnnotationAttributes +from datadog_api_client.v2.model.annotation_color import AnnotationColor +from datadog_api_client.v2.model.annotation_create_attributes import AnnotationCreateAttributes +from datadog_api_client.v2.model.annotation_create_request import AnnotationCreateRequest +from datadog_api_client.v2.model.annotation_data import AnnotationData +from datadog_api_client.v2.model.annotation_display import AnnotationDisplay +from datadog_api_client.v2.model.annotation_display_bounds import AnnotationDisplayBounds +from datadog_api_client.v2.model.annotation_in_page import AnnotationInPage +from datadog_api_client.v2.model.annotation_kind import AnnotationKind +from datadog_api_client.v2.model.annotation_markdown_text_annotation import AnnotationMarkdownTextAnnotation +from datadog_api_client.v2.model.annotation_request_data import AnnotationRequestData +from datadog_api_client.v2.model.annotation_response import AnnotationResponse +from datadog_api_client.v2.model.annotation_type import AnnotationType +from datadog_api_client.v2.model.annotation_update_request import AnnotationUpdateRequest +from datadog_api_client.v2.model.annotations_in_page_map import AnnotationsInPageMap +from datadog_api_client.v2.model.annotations_response import AnnotationsResponse +from datadog_api_client.v2.model.anonymize_user_error import AnonymizeUserError +from datadog_api_client.v2.model.anonymize_users_request import AnonymizeUsersRequest +from datadog_api_client.v2.model.anonymize_users_request_attributes import AnonymizeUsersRequestAttributes +from datadog_api_client.v2.model.anonymize_users_request_data import AnonymizeUsersRequestData +from datadog_api_client.v2.model.anonymize_users_request_type import AnonymizeUsersRequestType +from datadog_api_client.v2.model.anonymize_users_response import AnonymizeUsersResponse +from datadog_api_client.v2.model.anonymize_users_response_attributes import AnonymizeUsersResponseAttributes +from datadog_api_client.v2.model.anonymize_users_response_data import AnonymizeUsersResponseData +from datadog_api_client.v2.model.anonymize_users_response_type import AnonymizeUsersResponseType +from datadog_api_client.v2.model.anthropic_api_key import AnthropicAPIKey +from datadog_api_client.v2.model.anthropic_api_key_type import AnthropicAPIKeyType +from datadog_api_client.v2.model.anthropic_api_key_update import AnthropicAPIKeyUpdate +from datadog_api_client.v2.model.anthropic_credentials import AnthropicCredentials +from datadog_api_client.v2.model.anthropic_credentials_update import AnthropicCredentialsUpdate +from datadog_api_client.v2.model.anthropic_integration import AnthropicIntegration +from datadog_api_client.v2.model.anthropic_integration_type import AnthropicIntegrationType +from datadog_api_client.v2.model.anthropic_integration_update import AnthropicIntegrationUpdate +from datadog_api_client.v2.model.any_value import AnyValue +from datadog_api_client.v2.model.any_value_item import AnyValueItem +from datadog_api_client.v2.model.any_value_object import AnyValueObject +from datadog_api_client.v2.model.apm_dependency_stat_name import ApmDependencyStatName +from datadog_api_client.v2.model.apm_dependency_stats_data_source import ApmDependencyStatsDataSource +from datadog_api_client.v2.model.apm_dependency_stats_query import ApmDependencyStatsQuery +from datadog_api_client.v2.model.apm_metrics_data_source import ApmMetricsDataSource +from datadog_api_client.v2.model.apm_metrics_query import ApmMetricsQuery +from datadog_api_client.v2.model.apm_metrics_span_kind import ApmMetricsSpanKind +from datadog_api_client.v2.model.apm_metrics_stat import ApmMetricsStat +from datadog_api_client.v2.model.apm_resource_stat_name import ApmResourceStatName +from datadog_api_client.v2.model.apm_resource_stats_data_source import ApmResourceStatsDataSource +from datadog_api_client.v2.model.apm_resource_stats_query import ApmResourceStatsQuery +from datadog_api_client.v2.model.apm_retention_filter_type import ApmRetentionFilterType +from datadog_api_client.v2.model.app_builder_event import AppBuilderEvent +from datadog_api_client.v2.model.app_builder_event_name import AppBuilderEventName +from datadog_api_client.v2.model.app_builder_event_type import AppBuilderEventType +from datadog_api_client.v2.model.app_builder_list_tags_response import AppBuilderListTagsResponse +from datadog_api_client.v2.model.app_definition_type import AppDefinitionType +from datadog_api_client.v2.model.app_deployment_type import AppDeploymentType +from datadog_api_client.v2.model.app_favorite_type import AppFavoriteType +from datadog_api_client.v2.model.app_key_registration_data import AppKeyRegistrationData +from datadog_api_client.v2.model.app_key_registration_data_type import AppKeyRegistrationDataType +from datadog_api_client.v2.model.app_meta import AppMeta +from datadog_api_client.v2.model.app_protection_level import AppProtectionLevel +from datadog_api_client.v2.model.app_protection_level_type import AppProtectionLevelType +from datadog_api_client.v2.model.app_relationship import AppRelationship +from datadog_api_client.v2.model.app_self_service_type import AppSelfServiceType +from datadog_api_client.v2.model.app_tags_type import AppTagsType +from datadog_api_client.v2.model.app_trigger_wrapper import AppTriggerWrapper +from datadog_api_client.v2.model.app_version import AppVersion +from datadog_api_client.v2.model.app_version_attributes import AppVersionAttributes +from datadog_api_client.v2.model.app_version_name_type import AppVersionNameType +from datadog_api_client.v2.model.app_version_type import AppVersionType +from datadog_api_client.v2.model.application_key_create_attributes import ApplicationKeyCreateAttributes +from datadog_api_client.v2.model.application_key_create_data import ApplicationKeyCreateData +from datadog_api_client.v2.model.application_key_create_request import ApplicationKeyCreateRequest +from datadog_api_client.v2.model.application_key_relationships import ApplicationKeyRelationships +from datadog_api_client.v2.model.application_key_response import ApplicationKeyResponse +from datadog_api_client.v2.model.application_key_response_included_item import ApplicationKeyResponseIncludedItem +from datadog_api_client.v2.model.application_key_response_meta import ApplicationKeyResponseMeta +from datadog_api_client.v2.model.application_key_response_meta_page import ApplicationKeyResponseMetaPage +from datadog_api_client.v2.model.application_key_update_attributes import ApplicationKeyUpdateAttributes +from datadog_api_client.v2.model.application_key_update_data import ApplicationKeyUpdateData +from datadog_api_client.v2.model.application_key_update_request import ApplicationKeyUpdateRequest +from datadog_api_client.v2.model.application_keys_sort import ApplicationKeysSort +from datadog_api_client.v2.model.application_keys_type import ApplicationKeysType +from datadog_api_client.v2.model.application_security_policy_attributes import ApplicationSecurityPolicyAttributes +from datadog_api_client.v2.model.application_security_policy_create_attributes import ApplicationSecurityPolicyCreateAttributes +from datadog_api_client.v2.model.application_security_policy_create_data import ApplicationSecurityPolicyCreateData +from datadog_api_client.v2.model.application_security_policy_create_request import ApplicationSecurityPolicyCreateRequest +from datadog_api_client.v2.model.application_security_policy_data import ApplicationSecurityPolicyData +from datadog_api_client.v2.model.application_security_policy_list_response import ApplicationSecurityPolicyListResponse +from datadog_api_client.v2.model.application_security_policy_metadata import ApplicationSecurityPolicyMetadata +from datadog_api_client.v2.model.application_security_policy_response import ApplicationSecurityPolicyResponse +from datadog_api_client.v2.model.application_security_policy_rule_override import ApplicationSecurityPolicyRuleOverride +from datadog_api_client.v2.model.application_security_policy_ruleset_override import ApplicationSecurityPolicyRulesetOverride +from datadog_api_client.v2.model.application_security_policy_scope import ApplicationSecurityPolicyScope +from datadog_api_client.v2.model.application_security_policy_type import ApplicationSecurityPolicyType +from datadog_api_client.v2.model.application_security_policy_update_attributes import ApplicationSecurityPolicyUpdateAttributes +from datadog_api_client.v2.model.application_security_policy_update_data import ApplicationSecurityPolicyUpdateData +from datadog_api_client.v2.model.application_security_policy_update_request import ApplicationSecurityPolicyUpdateRequest +from datadog_api_client.v2.model.application_security_service_attributes import ApplicationSecurityServiceAttributes +from datadog_api_client.v2.model.application_security_service_resource import ApplicationSecurityServiceResource +from datadog_api_client.v2.model.application_security_service_type import ApplicationSecurityServiceType +from datadog_api_client.v2.model.application_security_services_metadata import ApplicationSecurityServicesMetadata +from datadog_api_client.v2.model.application_security_services_response import ApplicationSecurityServicesResponse +from datadog_api_client.v2.model.application_security_waf_custom_rule_action import ApplicationSecurityWafCustomRuleAction +from datadog_api_client.v2.model.application_security_waf_custom_rule_action_action import ApplicationSecurityWafCustomRuleActionAction +from datadog_api_client.v2.model.application_security_waf_custom_rule_action_parameters import ApplicationSecurityWafCustomRuleActionParameters +from datadog_api_client.v2.model.application_security_waf_custom_rule_attributes import ApplicationSecurityWafCustomRuleAttributes +from datadog_api_client.v2.model.application_security_waf_custom_rule_condition import ApplicationSecurityWafCustomRuleCondition +from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_input import ApplicationSecurityWafCustomRuleConditionInput +from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_input_address import ApplicationSecurityWafCustomRuleConditionInputAddress +from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_operator import ApplicationSecurityWafCustomRuleConditionOperator +from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_options import ApplicationSecurityWafCustomRuleConditionOptions +from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_parameters import ApplicationSecurityWafCustomRuleConditionParameters +from datadog_api_client.v2.model.application_security_waf_custom_rule_condition_parameters_type import ApplicationSecurityWafCustomRuleConditionParametersType +from datadog_api_client.v2.model.application_security_waf_custom_rule_create_attributes import ApplicationSecurityWafCustomRuleCreateAttributes +from datadog_api_client.v2.model.application_security_waf_custom_rule_create_data import ApplicationSecurityWafCustomRuleCreateData +from datadog_api_client.v2.model.application_security_waf_custom_rule_create_request import ApplicationSecurityWafCustomRuleCreateRequest +from datadog_api_client.v2.model.application_security_waf_custom_rule_data import ApplicationSecurityWafCustomRuleData +from datadog_api_client.v2.model.application_security_waf_custom_rule_list_response import ApplicationSecurityWafCustomRuleListResponse +from datadog_api_client.v2.model.application_security_waf_custom_rule_metadata import ApplicationSecurityWafCustomRuleMetadata +from datadog_api_client.v2.model.application_security_waf_custom_rule_response import ApplicationSecurityWafCustomRuleResponse +from datadog_api_client.v2.model.application_security_waf_custom_rule_scope import ApplicationSecurityWafCustomRuleScope +from datadog_api_client.v2.model.application_security_waf_custom_rule_tags import ApplicationSecurityWafCustomRuleTags +from datadog_api_client.v2.model.application_security_waf_custom_rule_tags_category import ApplicationSecurityWafCustomRuleTagsCategory +from datadog_api_client.v2.model.application_security_waf_custom_rule_type import ApplicationSecurityWafCustomRuleType +from datadog_api_client.v2.model.application_security_waf_custom_rule_update_attributes import ApplicationSecurityWafCustomRuleUpdateAttributes +from datadog_api_client.v2.model.application_security_waf_custom_rule_update_data import ApplicationSecurityWafCustomRuleUpdateData +from datadog_api_client.v2.model.application_security_waf_custom_rule_update_request import ApplicationSecurityWafCustomRuleUpdateRequest +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_attributes import ApplicationSecurityWafExclusionFilterAttributes +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_create_attributes import ApplicationSecurityWafExclusionFilterCreateAttributes +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_create_data import ApplicationSecurityWafExclusionFilterCreateData +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_create_request import ApplicationSecurityWafExclusionFilterCreateRequest +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_metadata import ApplicationSecurityWafExclusionFilterMetadata +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_on_match import ApplicationSecurityWafExclusionFilterOnMatch +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_resource import ApplicationSecurityWafExclusionFilterResource +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_response import ApplicationSecurityWafExclusionFilterResponse +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target import ApplicationSecurityWafExclusionFilterRulesTarget +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_rules_target_tags import ApplicationSecurityWafExclusionFilterRulesTargetTags +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_scope import ApplicationSecurityWafExclusionFilterScope +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_type import ApplicationSecurityWafExclusionFilterType +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_update_attributes import ApplicationSecurityWafExclusionFilterUpdateAttributes +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_update_data import ApplicationSecurityWafExclusionFilterUpdateData +from datadog_api_client.v2.model.application_security_waf_exclusion_filter_update_request import ApplicationSecurityWafExclusionFilterUpdateRequest +from datadog_api_client.v2.model.application_security_waf_exclusion_filters_response import ApplicationSecurityWafExclusionFiltersResponse +from datadog_api_client.v2.model.apps_sort_field import AppsSortField +from datadog_api_client.v2.model.arbitrary_cost_upsert_request import ArbitraryCostUpsertRequest +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data import ArbitraryCostUpsertRequestData +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes import ArbitraryCostUpsertRequestDataAttributes +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_costs_to_allocate_items import ArbitraryCostUpsertRequestDataAttributesCostsToAllocateItems +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy import ArbitraryCostUpsertRequestDataAttributesStrategy +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_filters_items import ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByFiltersItems +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items import ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItems +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_allocated_by_items_allocated_tags_items import ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItemsAllocatedTagsItems +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_based_on_costs_items import ArbitraryCostUpsertRequestDataAttributesStrategyBasedOnCostsItems +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_attributes_strategy_evaluate_grouped_by_filters_items import ArbitraryCostUpsertRequestDataAttributesStrategyEvaluateGroupedByFiltersItems +from datadog_api_client.v2.model.arbitrary_cost_upsert_request_data_type import ArbitraryCostUpsertRequestDataType +from datadog_api_client.v2.model.arbitrary_rule_response import ArbitraryRuleResponse +from datadog_api_client.v2.model.arbitrary_rule_response_array import ArbitraryRuleResponseArray +from datadog_api_client.v2.model.arbitrary_rule_response_array_meta import ArbitraryRuleResponseArrayMeta +from datadog_api_client.v2.model.arbitrary_rule_response_data import ArbitraryRuleResponseData +from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes import ArbitraryRuleResponseDataAttributes +from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_costs_to_allocate_items import ArbitraryRuleResponseDataAttributesCostsToAllocateItems +from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy import ArbitraryRuleResponseDataAttributesStrategy +from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_allocated_by_filters_items import ArbitraryRuleResponseDataAttributesStrategyAllocatedByFiltersItems +from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_allocated_by_items import ArbitraryRuleResponseDataAttributesStrategyAllocatedByItems +from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_allocated_by_items_allocated_tags_items import ArbitraryRuleResponseDataAttributesStrategyAllocatedByItemsAllocatedTagsItems +from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_based_on_costs_items import ArbitraryRuleResponseDataAttributesStrategyBasedOnCostsItems +from datadog_api_client.v2.model.arbitrary_rule_response_data_attributes_strategy_evaluate_grouped_by_filters_items import ArbitraryRuleResponseDataAttributesStrategyEvaluateGroupedByFiltersItems +from datadog_api_client.v2.model.arbitrary_rule_response_data_type import ArbitraryRuleResponseDataType +from datadog_api_client.v2.model.arbitrary_rule_status_response_array import ArbitraryRuleStatusResponseArray +from datadog_api_client.v2.model.arbitrary_rule_status_response_data import ArbitraryRuleStatusResponseData +from datadog_api_client.v2.model.arbitrary_rule_status_response_data_attributes import ArbitraryRuleStatusResponseDataAttributes +from datadog_api_client.v2.model.arbitrary_rule_status_response_data_type import ArbitraryRuleStatusResponseDataType +from datadog_api_client.v2.model.argument import Argument +from datadog_api_client.v2.model.asana_access_token import AsanaAccessToken +from datadog_api_client.v2.model.asana_access_token_type import AsanaAccessTokenType +from datadog_api_client.v2.model.asana_access_token_update import AsanaAccessTokenUpdate +from datadog_api_client.v2.model.asana_credentials import AsanaCredentials +from datadog_api_client.v2.model.asana_credentials_update import AsanaCredentialsUpdate +from datadog_api_client.v2.model.asana_integration import AsanaIntegration +from datadog_api_client.v2.model.asana_integration_type import AsanaIntegrationType +from datadog_api_client.v2.model.asana_integration_update import AsanaIntegrationUpdate +from datadog_api_client.v2.model.asset import Asset +from datadog_api_client.v2.model.asset_attributes import AssetAttributes +from datadog_api_client.v2.model.asset_entity_type import AssetEntityType +from datadog_api_client.v2.model.asset_operating_system import AssetOperatingSystem +from datadog_api_client.v2.model.asset_risks import AssetRisks +from datadog_api_client.v2.model.asset_type import AssetType +from datadog_api_client.v2.model.asset_version import AssetVersion +from datadog_api_client.v2.model.assign_seats_user_request import AssignSeatsUserRequest +from datadog_api_client.v2.model.assign_seats_user_request_data import AssignSeatsUserRequestData +from datadog_api_client.v2.model.assign_seats_user_request_data_attributes import AssignSeatsUserRequestDataAttributes +from datadog_api_client.v2.model.assign_seats_user_response import AssignSeatsUserResponse +from datadog_api_client.v2.model.assign_seats_user_response_data import AssignSeatsUserResponseData +from datadog_api_client.v2.model.assign_seats_user_response_data_attributes import AssignSeatsUserResponseDataAttributes +from datadog_api_client.v2.model.assignee_data_type import AssigneeDataType +from datadog_api_client.v2.model.assignee_request import AssigneeRequest +from datadog_api_client.v2.model.assignee_request_data import AssigneeRequestData +from datadog_api_client.v2.model.assignee_request_data_attributes import AssigneeRequestDataAttributes +from datadog_api_client.v2.model.assignee_request_data_relationships import AssigneeRequestDataRelationships +from datadog_api_client.v2.model.assignee_response import AssigneeResponse +from datadog_api_client.v2.model.assignee_response_data import AssigneeResponseData +from datadog_api_client.v2.model.assignee_response_data_attributes import AssigneeResponseDataAttributes +from datadog_api_client.v2.model.assignee_response_meta import AssigneeResponseMeta +from datadog_api_client.v2.model.assignment_result import AssignmentResult +from datadog_api_client.v2.model.attach_case_request import AttachCaseRequest +from datadog_api_client.v2.model.attach_case_request_data import AttachCaseRequestData +from datadog_api_client.v2.model.attach_case_request_data_relationships import AttachCaseRequestDataRelationships +from datadog_api_client.v2.model.attach_jira_issue_request import AttachJiraIssueRequest +from datadog_api_client.v2.model.attach_jira_issue_request_data import AttachJiraIssueRequestData +from datadog_api_client.v2.model.attach_jira_issue_request_data_attributes import AttachJiraIssueRequestDataAttributes +from datadog_api_client.v2.model.attach_jira_issue_request_data_relationships import AttachJiraIssueRequestDataRelationships +from datadog_api_client.v2.model.attach_linear_issue_request import AttachLinearIssueRequest +from datadog_api_client.v2.model.attach_linear_issue_request_data import AttachLinearIssueRequestData +from datadog_api_client.v2.model.attach_linear_issue_request_data_attributes import AttachLinearIssueRequestDataAttributes +from datadog_api_client.v2.model.attach_linear_issue_request_data_relationships import AttachLinearIssueRequestDataRelationships +from datadog_api_client.v2.model.attach_service_now_ticket_request import AttachServiceNowTicketRequest +from datadog_api_client.v2.model.attach_service_now_ticket_request_data import AttachServiceNowTicketRequestData +from datadog_api_client.v2.model.attach_service_now_ticket_request_data_attributes import AttachServiceNowTicketRequestDataAttributes +from datadog_api_client.v2.model.attach_service_now_ticket_request_data_relationships import AttachServiceNowTicketRequestDataRelationships +from datadog_api_client.v2.model.attachment import Attachment +from datadog_api_client.v2.model.attachment_array import AttachmentArray +from datadog_api_client.v2.model.attachment_data import AttachmentData +from datadog_api_client.v2.model.attachment_data_attributes import AttachmentDataAttributes +from datadog_api_client.v2.model.attachment_data_attributes_attachment import AttachmentDataAttributesAttachment +from datadog_api_client.v2.model.attachment_data_attributes_attachment_type import AttachmentDataAttributesAttachmentType +from datadog_api_client.v2.model.attachment_data_relationships import AttachmentDataRelationships +from datadog_api_client.v2.model.attachment_included import AttachmentIncluded +from datadog_api_client.v2.model.audit_logs_event import AuditLogsEvent +from datadog_api_client.v2.model.audit_logs_event_attributes import AuditLogsEventAttributes +from datadog_api_client.v2.model.audit_logs_event_type import AuditLogsEventType +from datadog_api_client.v2.model.audit_logs_events_response import AuditLogsEventsResponse +from datadog_api_client.v2.model.audit_logs_query_filter import AuditLogsQueryFilter +from datadog_api_client.v2.model.audit_logs_query_options import AuditLogsQueryOptions +from datadog_api_client.v2.model.audit_logs_query_page_options import AuditLogsQueryPageOptions +from datadog_api_client.v2.model.audit_logs_response_links import AuditLogsResponseLinks +from datadog_api_client.v2.model.audit_logs_response_metadata import AuditLogsResponseMetadata +from datadog_api_client.v2.model.audit_logs_response_page import AuditLogsResponsePage +from datadog_api_client.v2.model.audit_logs_response_status import AuditLogsResponseStatus +from datadog_api_client.v2.model.audit_logs_search_events_request import AuditLogsSearchEventsRequest +from datadog_api_client.v2.model.audit_logs_sort import AuditLogsSort +from datadog_api_client.v2.model.audit_logs_warning import AuditLogsWarning +from datadog_api_client.v2.model.authn_mapping import AuthNMapping +from datadog_api_client.v2.model.authn_mapping_attributes import AuthNMappingAttributes +from datadog_api_client.v2.model.authn_mapping_create_attributes import AuthNMappingCreateAttributes +from datadog_api_client.v2.model.authn_mapping_create_data import AuthNMappingCreateData +from datadog_api_client.v2.model.authn_mapping_create_relationships import AuthNMappingCreateRelationships +from datadog_api_client.v2.model.authn_mapping_create_request import AuthNMappingCreateRequest +from datadog_api_client.v2.model.authn_mapping_included import AuthNMappingIncluded +from datadog_api_client.v2.model.authn_mapping_relationship_to_role import AuthNMappingRelationshipToRole +from datadog_api_client.v2.model.authn_mapping_relationship_to_team import AuthNMappingRelationshipToTeam +from datadog_api_client.v2.model.authn_mapping_relationships import AuthNMappingRelationships +from datadog_api_client.v2.model.authn_mapping_resource_type import AuthNMappingResourceType +from datadog_api_client.v2.model.authn_mapping_response import AuthNMappingResponse +from datadog_api_client.v2.model.authn_mapping_team import AuthNMappingTeam +from datadog_api_client.v2.model.authn_mapping_team_attributes import AuthNMappingTeamAttributes +from datadog_api_client.v2.model.authn_mapping_update_attributes import AuthNMappingUpdateAttributes +from datadog_api_client.v2.model.authn_mapping_update_data import AuthNMappingUpdateData +from datadog_api_client.v2.model.authn_mapping_update_relationships import AuthNMappingUpdateRelationships +from datadog_api_client.v2.model.authn_mapping_update_request import AuthNMappingUpdateRequest +from datadog_api_client.v2.model.authn_mappings_response import AuthNMappingsResponse +from datadog_api_client.v2.model.authn_mappings_sort import AuthNMappingsSort +from datadog_api_client.v2.model.authn_mappings_type import AuthNMappingsType +from datadog_api_client.v2.model.auto_close_inactive_cases import AutoCloseInactiveCases +from datadog_api_client.v2.model.auto_transition_assigned_cases import AutoTransitionAssignedCases +from datadog_api_client.v2.model.automation_rule import AutomationRule +from datadog_api_client.v2.model.automation_rule_action import AutomationRuleAction +from datadog_api_client.v2.model.automation_rule_action_data import AutomationRuleActionData +from datadog_api_client.v2.model.automation_rule_action_type import AutomationRuleActionType +from datadog_api_client.v2.model.automation_rule_actor_type import AutomationRuleActorType +from datadog_api_client.v2.model.automation_rule_attributes import AutomationRuleAttributes +from datadog_api_client.v2.model.automation_rule_create import AutomationRuleCreate +from datadog_api_client.v2.model.automation_rule_create_attributes import AutomationRuleCreateAttributes +from datadog_api_client.v2.model.automation_rule_create_request import AutomationRuleCreateRequest +from datadog_api_client.v2.model.automation_rule_created_by import AutomationRuleCreatedBy +from datadog_api_client.v2.model.automation_rule_modified_by import AutomationRuleModifiedBy +from datadog_api_client.v2.model.automation_rule_relationships import AutomationRuleRelationships +from datadog_api_client.v2.model.automation_rule_response import AutomationRuleResponse +from datadog_api_client.v2.model.automation_rule_scope import AutomationRuleScope +from datadog_api_client.v2.model.automation_rule_trigger import AutomationRuleTrigger +from datadog_api_client.v2.model.automation_rule_trigger_data import AutomationRuleTriggerData +from datadog_api_client.v2.model.automation_rule_trigger_type import AutomationRuleTriggerType +from datadog_api_client.v2.model.automation_rule_update import AutomationRuleUpdate +from datadog_api_client.v2.model.automation_rule_update_request import AutomationRuleUpdateRequest +from datadog_api_client.v2.model.automation_rules_response import AutomationRulesResponse +from datadog_api_client.v2.model.aws_cur_config import AwsCURConfig +from datadog_api_client.v2.model.aws_cur_config_attributes import AwsCURConfigAttributes +from datadog_api_client.v2.model.aws_cur_config_patch_data import AwsCURConfigPatchData +from datadog_api_client.v2.model.aws_cur_config_patch_request import AwsCURConfigPatchRequest +from datadog_api_client.v2.model.aws_cur_config_patch_request_attributes import AwsCURConfigPatchRequestAttributes +from datadog_api_client.v2.model.aws_cur_config_patch_request_type import AwsCURConfigPatchRequestType +from datadog_api_client.v2.model.aws_cur_config_post_data import AwsCURConfigPostData +from datadog_api_client.v2.model.aws_cur_config_post_request import AwsCURConfigPostRequest +from datadog_api_client.v2.model.aws_cur_config_post_request_attributes import AwsCURConfigPostRequestAttributes +from datadog_api_client.v2.model.aws_cur_config_post_request_type import AwsCURConfigPostRequestType +from datadog_api_client.v2.model.aws_cur_config_type import AwsCURConfigType +from datadog_api_client.v2.model.aws_cur_configs_response import AwsCURConfigsResponse +from datadog_api_client.v2.model.aws_cur_config_response import AwsCurConfigResponse +from datadog_api_client.v2.model.aws_cur_config_response_data import AwsCurConfigResponseData +from datadog_api_client.v2.model.aws_cur_config_response_data_attributes import AwsCurConfigResponseDataAttributes +from datadog_api_client.v2.model.aws_cur_config_response_data_attributes_account_filters import AwsCurConfigResponseDataAttributesAccountFilters +from datadog_api_client.v2.model.aws_cur_config_response_data_type import AwsCurConfigResponseDataType +from datadog_api_client.v2.model.aws_on_demand_attributes import AwsOnDemandAttributes +from datadog_api_client.v2.model.aws_on_demand_create_attributes import AwsOnDemandCreateAttributes +from datadog_api_client.v2.model.aws_on_demand_create_data import AwsOnDemandCreateData +from datadog_api_client.v2.model.aws_on_demand_create_request import AwsOnDemandCreateRequest +from datadog_api_client.v2.model.aws_on_demand_data import AwsOnDemandData +from datadog_api_client.v2.model.aws_on_demand_list_response import AwsOnDemandListResponse +from datadog_api_client.v2.model.aws_on_demand_response import AwsOnDemandResponse +from datadog_api_client.v2.model.aws_on_demand_type import AwsOnDemandType +from datadog_api_client.v2.model.aws_scan_options_attributes import AwsScanOptionsAttributes +from datadog_api_client.v2.model.aws_scan_options_create_attributes import AwsScanOptionsCreateAttributes +from datadog_api_client.v2.model.aws_scan_options_create_data import AwsScanOptionsCreateData +from datadog_api_client.v2.model.aws_scan_options_create_request import AwsScanOptionsCreateRequest +from datadog_api_client.v2.model.aws_scan_options_data import AwsScanOptionsData +from datadog_api_client.v2.model.aws_scan_options_list_response import AwsScanOptionsListResponse +from datadog_api_client.v2.model.aws_scan_options_response import AwsScanOptionsResponse +from datadog_api_client.v2.model.aws_scan_options_type import AwsScanOptionsType +from datadog_api_client.v2.model.aws_scan_options_update_attributes import AwsScanOptionsUpdateAttributes +from datadog_api_client.v2.model.aws_scan_options_update_data import AwsScanOptionsUpdateData +from datadog_api_client.v2.model.aws_scan_options_update_request import AwsScanOptionsUpdateRequest +from datadog_api_client.v2.model.azure_credentials import AzureCredentials +from datadog_api_client.v2.model.azure_credentials_update import AzureCredentialsUpdate +from datadog_api_client.v2.model.azure_integration import AzureIntegration +from datadog_api_client.v2.model.azure_integration_type import AzureIntegrationType +from datadog_api_client.v2.model.azure_integration_update import AzureIntegrationUpdate +from datadog_api_client.v2.model.azure_scan_options import AzureScanOptions +from datadog_api_client.v2.model.azure_scan_options_array import AzureScanOptionsArray +from datadog_api_client.v2.model.azure_scan_options_data import AzureScanOptionsData +from datadog_api_client.v2.model.azure_scan_options_data_attributes import AzureScanOptionsDataAttributes +from datadog_api_client.v2.model.azure_scan_options_data_type import AzureScanOptionsDataType +from datadog_api_client.v2.model.azure_scan_options_input_update import AzureScanOptionsInputUpdate +from datadog_api_client.v2.model.azure_scan_options_input_update_data import AzureScanOptionsInputUpdateData +from datadog_api_client.v2.model.azure_scan_options_input_update_data_attributes import AzureScanOptionsInputUpdateDataAttributes +from datadog_api_client.v2.model.azure_scan_options_input_update_data_type import AzureScanOptionsInputUpdateDataType +from datadog_api_client.v2.model.azure_storage_destination import AzureStorageDestination +from datadog_api_client.v2.model.azure_storage_destination_type import AzureStorageDestinationType +from datadog_api_client.v2.model.azure_tenant import AzureTenant +from datadog_api_client.v2.model.azure_tenant_type import AzureTenantType +from datadog_api_client.v2.model.azure_tenant_update import AzureTenantUpdate +from datadog_api_client.v2.model.azure_uc_config import AzureUCConfig +from datadog_api_client.v2.model.azure_uc_config_pair import AzureUCConfigPair +from datadog_api_client.v2.model.azure_uc_config_pair_attributes import AzureUCConfigPairAttributes +from datadog_api_client.v2.model.azure_uc_config_pair_type import AzureUCConfigPairType +from datadog_api_client.v2.model.azure_uc_config_pairs_response import AzureUCConfigPairsResponse +from datadog_api_client.v2.model.azure_uc_config_patch_data import AzureUCConfigPatchData +from datadog_api_client.v2.model.azure_uc_config_patch_request import AzureUCConfigPatchRequest +from datadog_api_client.v2.model.azure_uc_config_patch_request_attributes import AzureUCConfigPatchRequestAttributes +from datadog_api_client.v2.model.azure_uc_config_patch_request_type import AzureUCConfigPatchRequestType +from datadog_api_client.v2.model.azure_uc_config_post_data import AzureUCConfigPostData +from datadog_api_client.v2.model.azure_uc_config_post_request import AzureUCConfigPostRequest +from datadog_api_client.v2.model.azure_uc_config_post_request_attributes import AzureUCConfigPostRequestAttributes +from datadog_api_client.v2.model.azure_uc_config_post_request_type import AzureUCConfigPostRequestType +from datadog_api_client.v2.model.azure_uc_configs_response import AzureUCConfigsResponse +from datadog_api_client.v2.model.batch_delete_rows_request_array import BatchDeleteRowsRequestArray +from datadog_api_client.v2.model.batch_rows_query_data_type import BatchRowsQueryDataType +from datadog_api_client.v2.model.batch_rows_query_request import BatchRowsQueryRequest +from datadog_api_client.v2.model.batch_rows_query_request_data import BatchRowsQueryRequestData +from datadog_api_client.v2.model.batch_rows_query_request_data_attributes import BatchRowsQueryRequestDataAttributes +from datadog_api_client.v2.model.batch_rows_query_response import BatchRowsQueryResponse +from datadog_api_client.v2.model.batch_rows_query_response_data import BatchRowsQueryResponseData +from datadog_api_client.v2.model.batch_rows_query_response_data_relationships import BatchRowsQueryResponseDataRelationships +from datadog_api_client.v2.model.batch_rows_query_response_data_relationships_rows import BatchRowsQueryResponseDataRelationshipsRows +from datadog_api_client.v2.model.batch_upsert_rows_request_array import BatchUpsertRowsRequestArray +from datadog_api_client.v2.model.batch_upsert_rows_request_data import BatchUpsertRowsRequestData +from datadog_api_client.v2.model.batch_upsert_rows_request_data_attributes import BatchUpsertRowsRequestDataAttributes +from datadog_api_client.v2.model.batch_upsert_rows_request_data_attributes_value import BatchUpsertRowsRequestDataAttributesValue +from datadog_api_client.v2.model.bill_config import BillConfig +from datadog_api_client.v2.model.billing_dimensions_mapping_body_item import BillingDimensionsMappingBodyItem +from datadog_api_client.v2.model.billing_dimensions_mapping_body_item_attributes import BillingDimensionsMappingBodyItemAttributes +from datadog_api_client.v2.model.billing_dimensions_mapping_body_item_attributes_endpoints_items import BillingDimensionsMappingBodyItemAttributesEndpointsItems +from datadog_api_client.v2.model.billing_dimensions_mapping_body_item_attributes_endpoints_items_status import BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus +from datadog_api_client.v2.model.billing_dimensions_mapping_response import BillingDimensionsMappingResponse +from datadog_api_client.v2.model.blueprint_attributes import BlueprintAttributes +from datadog_api_client.v2.model.blueprint_data import BlueprintData +from datadog_api_client.v2.model.blueprint_data_type import BlueprintDataType +from datadog_api_client.v2.model.blueprint_metadata_attributes import BlueprintMetadataAttributes +from datadog_api_client.v2.model.blueprint_metadata_data import BlueprintMetadataData +from datadog_api_client.v2.model.blueprint_native_action import BlueprintNativeAction +from datadog_api_client.v2.model.branch_coverage_summary_request import BranchCoverageSummaryRequest +from datadog_api_client.v2.model.branch_coverage_summary_request_attributes import BranchCoverageSummaryRequestAttributes +from datadog_api_client.v2.model.branch_coverage_summary_request_data import BranchCoverageSummaryRequestData +from datadog_api_client.v2.model.branch_coverage_summary_request_type import BranchCoverageSummaryRequestType +from datadog_api_client.v2.model.budget import Budget +from datadog_api_client.v2.model.budget_array import BudgetArray +from datadog_api_client.v2.model.budget_attributes import BudgetAttributes +from datadog_api_client.v2.model.budget_attributes_costs import BudgetAttributesCosts +from datadog_api_client.v2.model.budget_attributes_costs_unit import BudgetAttributesCostsUnit +from datadog_api_client.v2.model.budget_validation_request import BudgetValidationRequest +from datadog_api_client.v2.model.budget_validation_request_data import BudgetValidationRequestData +from datadog_api_client.v2.model.budget_validation_response import BudgetValidationResponse +from datadog_api_client.v2.model.budget_validation_response_data import BudgetValidationResponseData +from datadog_api_client.v2.model.budget_validation_response_data_attributes import BudgetValidationResponseDataAttributes +from datadog_api_client.v2.model.budget_validation_response_data_type import BudgetValidationResponseDataType +from datadog_api_client.v2.model.budget_with_entries import BudgetWithEntries +from datadog_api_client.v2.model.budget_with_entries_data import BudgetWithEntriesData +from datadog_api_client.v2.model.budget_with_entries_data_attributes import BudgetWithEntriesDataAttributes +from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items import BudgetWithEntriesDataAttributesEntriesItems +from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items_costs import BudgetWithEntriesDataAttributesEntriesItemsCosts +from datadog_api_client.v2.model.budget_with_entries_data_attributes_entries_items_tag_filters_items import BudgetWithEntriesDataAttributesEntriesItemsTagFiltersItems +from datadog_api_client.v2.model.budget_with_entries_data_type import BudgetWithEntriesDataType +from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request import BulkDeleteAppsDatastoreItemsRequest +from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request_data import BulkDeleteAppsDatastoreItemsRequestData +from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request_data_attributes import BulkDeleteAppsDatastoreItemsRequestDataAttributes +from datadog_api_client.v2.model.bulk_delete_apps_datastore_items_request_data_type import BulkDeleteAppsDatastoreItemsRequestDataType +from datadog_api_client.v2.model.bulk_put_apps_datastore_items_request import BulkPutAppsDatastoreItemsRequest +from datadog_api_client.v2.model.bulk_put_apps_datastore_items_request_data import BulkPutAppsDatastoreItemsRequestData +from datadog_api_client.v2.model.bulk_put_apps_datastore_items_request_data_attributes import BulkPutAppsDatastoreItemsRequestDataAttributes +from datadog_api_client.v2.model.ci_app_aggregate_bucket_value import CIAppAggregateBucketValue +from datadog_api_client.v2.model.ci_app_aggregate_bucket_value_timeseries import CIAppAggregateBucketValueTimeseries +from datadog_api_client.v2.model.ci_app_aggregate_bucket_value_timeseries_point import CIAppAggregateBucketValueTimeseriesPoint +from datadog_api_client.v2.model.ci_app_aggregate_sort import CIAppAggregateSort +from datadog_api_client.v2.model.ci_app_aggregate_sort_type import CIAppAggregateSortType +from datadog_api_client.v2.model.ci_app_aggregation_function import CIAppAggregationFunction +from datadog_api_client.v2.model.ci_app_ci_error import CIAppCIError +from datadog_api_client.v2.model.ci_app_ci_error_domain import CIAppCIErrorDomain +from datadog_api_client.v2.model.ci_app_compute import CIAppCompute +from datadog_api_client.v2.model.ci_app_compute_type import CIAppComputeType +from datadog_api_client.v2.model.ci_app_computes import CIAppComputes +from datadog_api_client.v2.model.ci_app_create_pipeline_event_request import CIAppCreatePipelineEventRequest +from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_attributes import CIAppCreatePipelineEventRequestAttributes +from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_attributes_resource import CIAppCreatePipelineEventRequestAttributesResource +from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_data import CIAppCreatePipelineEventRequestData +from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_data_single_or_array import CIAppCreatePipelineEventRequestDataSingleOrArray +from datadog_api_client.v2.model.ci_app_create_pipeline_event_request_data_type import CIAppCreatePipelineEventRequestDataType +from datadog_api_client.v2.model.ci_app_event_attributes import CIAppEventAttributes +from datadog_api_client.v2.model.ci_app_git_hub_account_attributes import CIAppGitHubAccountAttributes +from datadog_api_client.v2.model.ci_app_git_hub_account_data import CIAppGitHubAccountData +from datadog_api_client.v2.model.ci_app_git_hub_account_repository import CIAppGitHubAccountRepository +from datadog_api_client.v2.model.ci_app_git_hub_account_response import CIAppGitHubAccountResponse +from datadog_api_client.v2.model.ci_app_git_hub_account_type import CIAppGitHubAccountType +from datadog_api_client.v2.model.ci_app_git_hub_account_update_request import CIAppGitHubAccountUpdateRequest +from datadog_api_client.v2.model.ci_app_git_hub_account_update_request_attributes import CIAppGitHubAccountUpdateRequestAttributes +from datadog_api_client.v2.model.ci_app_git_hub_account_update_request_data import CIAppGitHubAccountUpdateRequestData +from datadog_api_client.v2.model.ci_app_git_hub_account_update_request_repository import CIAppGitHubAccountUpdateRequestRepository +from datadog_api_client.v2.model.ci_app_git_hub_accounts_response import CIAppGitHubAccountsResponse +from datadog_api_client.v2.model.ci_app_git_info import CIAppGitInfo +from datadog_api_client.v2.model.ci_app_group_by_histogram import CIAppGroupByHistogram +from datadog_api_client.v2.model.ci_app_group_by_missing import CIAppGroupByMissing +from datadog_api_client.v2.model.ci_app_group_by_total import CIAppGroupByTotal +from datadog_api_client.v2.model.ci_app_host_info import CIAppHostInfo +from datadog_api_client.v2.model.ci_app_pipeline_event import CIAppPipelineEvent +from datadog_api_client.v2.model.ci_app_pipeline_event_attributes import CIAppPipelineEventAttributes +from datadog_api_client.v2.model.ci_app_pipeline_event_finished_job import CIAppPipelineEventFinishedJob +from datadog_api_client.v2.model.ci_app_pipeline_event_finished_pipeline import CIAppPipelineEventFinishedPipeline +from datadog_api_client.v2.model.ci_app_pipeline_event_in_progress_job import CIAppPipelineEventInProgressJob +from datadog_api_client.v2.model.ci_app_pipeline_event_in_progress_pipeline import CIAppPipelineEventInProgressPipeline +from datadog_api_client.v2.model.ci_app_pipeline_event_job import CIAppPipelineEventJob +from datadog_api_client.v2.model.ci_app_pipeline_event_job_in_progress_status import CIAppPipelineEventJobInProgressStatus +from datadog_api_client.v2.model.ci_app_pipeline_event_job_level import CIAppPipelineEventJobLevel +from datadog_api_client.v2.model.ci_app_pipeline_event_job_status import CIAppPipelineEventJobStatus +from datadog_api_client.v2.model.ci_app_pipeline_event_parameters import CIAppPipelineEventParameters +from datadog_api_client.v2.model.ci_app_pipeline_event_parent_pipeline import CIAppPipelineEventParentPipeline +from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline import CIAppPipelineEventPipeline +from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_in_progress_status import CIAppPipelineEventPipelineInProgressStatus +from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_level import CIAppPipelineEventPipelineLevel +from datadog_api_client.v2.model.ci_app_pipeline_event_pipeline_status import CIAppPipelineEventPipelineStatus +from datadog_api_client.v2.model.ci_app_pipeline_event_previous_pipeline import CIAppPipelineEventPreviousPipeline +from datadog_api_client.v2.model.ci_app_pipeline_event_stage import CIAppPipelineEventStage +from datadog_api_client.v2.model.ci_app_pipeline_event_stage_level import CIAppPipelineEventStageLevel +from datadog_api_client.v2.model.ci_app_pipeline_event_stage_status import CIAppPipelineEventStageStatus +from datadog_api_client.v2.model.ci_app_pipeline_event_step import CIAppPipelineEventStep +from datadog_api_client.v2.model.ci_app_pipeline_event_step_level import CIAppPipelineEventStepLevel +from datadog_api_client.v2.model.ci_app_pipeline_event_step_status import CIAppPipelineEventStepStatus +from datadog_api_client.v2.model.ci_app_pipeline_event_type_name import CIAppPipelineEventTypeName +from datadog_api_client.v2.model.ci_app_pipeline_events_request import CIAppPipelineEventsRequest +from datadog_api_client.v2.model.ci_app_pipeline_events_response import CIAppPipelineEventsResponse +from datadog_api_client.v2.model.ci_app_pipeline_level import CIAppPipelineLevel +from datadog_api_client.v2.model.ci_app_pipelines_aggregate_request import CIAppPipelinesAggregateRequest +from datadog_api_client.v2.model.ci_app_pipelines_aggregation_buckets_response import CIAppPipelinesAggregationBucketsResponse +from datadog_api_client.v2.model.ci_app_pipelines_analytics_aggregate_response import CIAppPipelinesAnalyticsAggregateResponse +from datadog_api_client.v2.model.ci_app_pipelines_bucket_response import CIAppPipelinesBucketResponse +from datadog_api_client.v2.model.ci_app_pipelines_group_by import CIAppPipelinesGroupBy +from datadog_api_client.v2.model.ci_app_pipelines_query_filter import CIAppPipelinesQueryFilter +from datadog_api_client.v2.model.ci_app_query_options import CIAppQueryOptions +from datadog_api_client.v2.model.ci_app_query_page_options import CIAppQueryPageOptions +from datadog_api_client.v2.model.ci_app_response_links import CIAppResponseLinks +from datadog_api_client.v2.model.ci_app_response_metadata import CIAppResponseMetadata +from datadog_api_client.v2.model.ci_app_response_metadata_with_pagination import CIAppResponseMetadataWithPagination +from datadog_api_client.v2.model.ci_app_response_page import CIAppResponsePage +from datadog_api_client.v2.model.ci_app_response_status import CIAppResponseStatus +from datadog_api_client.v2.model.ci_app_sort import CIAppSort +from datadog_api_client.v2.model.ci_app_sort_order import CIAppSortOrder +from datadog_api_client.v2.model.ci_app_test_event import CIAppTestEvent +from datadog_api_client.v2.model.ci_app_test_event_type_name import CIAppTestEventTypeName +from datadog_api_client.v2.model.ci_app_test_events_request import CIAppTestEventsRequest +from datadog_api_client.v2.model.ci_app_test_events_response import CIAppTestEventsResponse +from datadog_api_client.v2.model.ci_app_test_level import CIAppTestLevel +from datadog_api_client.v2.model.ci_app_tests_aggregate_request import CIAppTestsAggregateRequest +from datadog_api_client.v2.model.ci_app_tests_aggregation_buckets_response import CIAppTestsAggregationBucketsResponse +from datadog_api_client.v2.model.ci_app_tests_analytics_aggregate_response import CIAppTestsAnalyticsAggregateResponse +from datadog_api_client.v2.model.ci_app_tests_bucket_response import CIAppTestsBucketResponse +from datadog_api_client.v2.model.ci_app_tests_group_by import CIAppTestsGroupBy +from datadog_api_client.v2.model.ci_app_tests_query_filter import CIAppTestsQueryFilter +from datadog_api_client.v2.model.ci_app_warning import CIAppWarning +from datadog_api_client.v2.model.csm_agents_metadata import CSMAgentsMetadata +from datadog_api_client.v2.model.csm_agents_type import CSMAgentsType +from datadog_api_client.v2.model.cvss import CVSS +from datadog_api_client.v2.model.calculated_field import CalculatedField +from datadog_api_client.v2.model.campaign_response import CampaignResponse +from datadog_api_client.v2.model.campaign_response_attributes import CampaignResponseAttributes +from datadog_api_client.v2.model.campaign_response_data import CampaignResponseData +from datadog_api_client.v2.model.campaign_status import CampaignStatus +from datadog_api_client.v2.model.campaign_type import CampaignType +from datadog_api_client.v2.model.cancel_data_deletion_response_body import CancelDataDeletionResponseBody +from datadog_api_client.v2.model.case import Case +from datadog_api_client.v2.model.case3rd_party_ticket_status import Case3rdPartyTicketStatus +from datadog_api_client.v2.model.case_aggregate_group import CaseAggregateGroup +from datadog_api_client.v2.model.case_aggregate_group_by import CaseAggregateGroupBy +from datadog_api_client.v2.model.case_aggregate_request import CaseAggregateRequest +from datadog_api_client.v2.model.case_aggregate_request_attributes import CaseAggregateRequestAttributes +from datadog_api_client.v2.model.case_aggregate_request_data import CaseAggregateRequestData +from datadog_api_client.v2.model.case_aggregate_resource_type import CaseAggregateResourceType +from datadog_api_client.v2.model.case_aggregate_response import CaseAggregateResponse +from datadog_api_client.v2.model.case_aggregate_response_attributes import CaseAggregateResponseAttributes +from datadog_api_client.v2.model.case_aggregate_response_data import CaseAggregateResponseData +from datadog_api_client.v2.model.case_assign import CaseAssign +from datadog_api_client.v2.model.case_assign_attributes import CaseAssignAttributes +from datadog_api_client.v2.model.case_assign_request import CaseAssignRequest +from datadog_api_client.v2.model.case_attributes import CaseAttributes +from datadog_api_client.v2.model.case_automation_rule_resource_type import CaseAutomationRuleResourceType +from datadog_api_client.v2.model.case_automation_rule_state import CaseAutomationRuleState +from datadog_api_client.v2.model.case_bulk_action_type import CaseBulkActionType +from datadog_api_client.v2.model.case_bulk_resource_type import CaseBulkResourceType +from datadog_api_client.v2.model.case_bulk_update_request import CaseBulkUpdateRequest +from datadog_api_client.v2.model.case_bulk_update_request_attributes import CaseBulkUpdateRequestAttributes +from datadog_api_client.v2.model.case_bulk_update_request_data import CaseBulkUpdateRequestData +from datadog_api_client.v2.model.case_comment import CaseComment +from datadog_api_client.v2.model.case_comment_attributes import CaseCommentAttributes +from datadog_api_client.v2.model.case_comment_request import CaseCommentRequest +from datadog_api_client.v2.model.case_count_group import CaseCountGroup +from datadog_api_client.v2.model.case_count_group_value import CaseCountGroupValue +from datadog_api_client.v2.model.case_count_response import CaseCountResponse +from datadog_api_client.v2.model.case_count_response_attributes import CaseCountResponseAttributes +from datadog_api_client.v2.model.case_count_response_data import CaseCountResponseData +from datadog_api_client.v2.model.case_create import CaseCreate +from datadog_api_client.v2.model.case_create_attributes import CaseCreateAttributes +from datadog_api_client.v2.model.case_create_relationships import CaseCreateRelationships +from datadog_api_client.v2.model.case_create_request import CaseCreateRequest +from datadog_api_client.v2.model.case_data_type import CaseDataType +from datadog_api_client.v2.model.case_empty import CaseEmpty +from datadog_api_client.v2.model.case_empty_request import CaseEmptyRequest +from datadog_api_client.v2.model.case_insight import CaseInsight +from datadog_api_client.v2.model.case_insight_type import CaseInsightType +from datadog_api_client.v2.model.case_insights_attributes import CaseInsightsAttributes +from datadog_api_client.v2.model.case_insights_data import CaseInsightsData +from datadog_api_client.v2.model.case_insights_items import CaseInsightsItems +from datadog_api_client.v2.model.case_insights_request import CaseInsightsRequest +from datadog_api_client.v2.model.case_link import CaseLink +from datadog_api_client.v2.model.case_link_attributes import CaseLinkAttributes +from datadog_api_client.v2.model.case_link_create import CaseLinkCreate +from datadog_api_client.v2.model.case_link_create_request import CaseLinkCreateRequest +from datadog_api_client.v2.model.case_link_resource_type import CaseLinkResourceType +from datadog_api_client.v2.model.case_link_response import CaseLinkResponse +from datadog_api_client.v2.model.case_links_response import CaseLinksResponse +from datadog_api_client.v2.model.case_management_project import CaseManagementProject +from datadog_api_client.v2.model.case_management_project_data import CaseManagementProjectData +from datadog_api_client.v2.model.case_management_project_data_type import CaseManagementProjectDataType +from datadog_api_client.v2.model.case_notification_rule import CaseNotificationRule +from datadog_api_client.v2.model.case_notification_rule_attributes import CaseNotificationRuleAttributes +from datadog_api_client.v2.model.case_notification_rule_create import CaseNotificationRuleCreate +from datadog_api_client.v2.model.case_notification_rule_create_attributes import CaseNotificationRuleCreateAttributes +from datadog_api_client.v2.model.case_notification_rule_create_request import CaseNotificationRuleCreateRequest +from datadog_api_client.v2.model.case_notification_rule_recipient import CaseNotificationRuleRecipient +from datadog_api_client.v2.model.case_notification_rule_recipient_data import CaseNotificationRuleRecipientData +from datadog_api_client.v2.model.case_notification_rule_resource_type import CaseNotificationRuleResourceType +from datadog_api_client.v2.model.case_notification_rule_response import CaseNotificationRuleResponse +from datadog_api_client.v2.model.case_notification_rule_trigger import CaseNotificationRuleTrigger +from datadog_api_client.v2.model.case_notification_rule_trigger_data import CaseNotificationRuleTriggerData +from datadog_api_client.v2.model.case_notification_rule_update import CaseNotificationRuleUpdate +from datadog_api_client.v2.model.case_notification_rule_update_request import CaseNotificationRuleUpdateRequest +from datadog_api_client.v2.model.case_notification_rules_response import CaseNotificationRulesResponse +from datadog_api_client.v2.model.case_object_attributes import CaseObjectAttributes +from datadog_api_client.v2.model.case_priority import CasePriority +from datadog_api_client.v2.model.case_relationships import CaseRelationships +from datadog_api_client.v2.model.case_resource_type import CaseResourceType +from datadog_api_client.v2.model.case_response import CaseResponse +from datadog_api_client.v2.model.case_sortable_field import CaseSortableField +from datadog_api_client.v2.model.case_status import CaseStatus +from datadog_api_client.v2.model.case_status_group import CaseStatusGroup +from datadog_api_client.v2.model.case_trigger import CaseTrigger +from datadog_api_client.v2.model.case_trigger_wrapper import CaseTriggerWrapper +from datadog_api_client.v2.model.case_type import CaseType +from datadog_api_client.v2.model.case_type_create import CaseTypeCreate +from datadog_api_client.v2.model.case_type_create_request import CaseTypeCreateRequest +from datadog_api_client.v2.model.case_type_resource import CaseTypeResource +from datadog_api_client.v2.model.case_type_resource_attributes import CaseTypeResourceAttributes +from datadog_api_client.v2.model.case_type_resource_type import CaseTypeResourceType +from datadog_api_client.v2.model.case_type_response import CaseTypeResponse +from datadog_api_client.v2.model.case_type_update import CaseTypeUpdate +from datadog_api_client.v2.model.case_type_update_request import CaseTypeUpdateRequest +from datadog_api_client.v2.model.case_types_response import CaseTypesResponse +from datadog_api_client.v2.model.case_update_attributes import CaseUpdateAttributes +from datadog_api_client.v2.model.case_update_attributes_attributes import CaseUpdateAttributesAttributes +from datadog_api_client.v2.model.case_update_attributes_request import CaseUpdateAttributesRequest +from datadog_api_client.v2.model.case_update_comment import CaseUpdateComment +from datadog_api_client.v2.model.case_update_comment_attributes import CaseUpdateCommentAttributes +from datadog_api_client.v2.model.case_update_comment_request import CaseUpdateCommentRequest +from datadog_api_client.v2.model.case_update_custom_attribute import CaseUpdateCustomAttribute +from datadog_api_client.v2.model.case_update_custom_attribute_request import CaseUpdateCustomAttributeRequest +from datadog_api_client.v2.model.case_update_description import CaseUpdateDescription +from datadog_api_client.v2.model.case_update_description_attributes import CaseUpdateDescriptionAttributes +from datadog_api_client.v2.model.case_update_description_request import CaseUpdateDescriptionRequest +from datadog_api_client.v2.model.case_update_due_date import CaseUpdateDueDate +from datadog_api_client.v2.model.case_update_due_date_attributes import CaseUpdateDueDateAttributes +from datadog_api_client.v2.model.case_update_due_date_request import CaseUpdateDueDateRequest +from datadog_api_client.v2.model.case_update_priority import CaseUpdatePriority +from datadog_api_client.v2.model.case_update_priority_attributes import CaseUpdatePriorityAttributes +from datadog_api_client.v2.model.case_update_priority_request import CaseUpdatePriorityRequest +from datadog_api_client.v2.model.case_update_resolved_reason import CaseUpdateResolvedReason +from datadog_api_client.v2.model.case_update_resolved_reason_attributes import CaseUpdateResolvedReasonAttributes +from datadog_api_client.v2.model.case_update_resolved_reason_request import CaseUpdateResolvedReasonRequest +from datadog_api_client.v2.model.case_update_status import CaseUpdateStatus +from datadog_api_client.v2.model.case_update_status_attributes import CaseUpdateStatusAttributes +from datadog_api_client.v2.model.case_update_status_request import CaseUpdateStatusRequest +from datadog_api_client.v2.model.case_update_title import CaseUpdateTitle +from datadog_api_client.v2.model.case_update_title_attributes import CaseUpdateTitleAttributes +from datadog_api_client.v2.model.case_update_title_request import CaseUpdateTitleRequest +from datadog_api_client.v2.model.case_view import CaseView +from datadog_api_client.v2.model.case_view_attributes import CaseViewAttributes +from datadog_api_client.v2.model.case_view_create import CaseViewCreate +from datadog_api_client.v2.model.case_view_create_attributes import CaseViewCreateAttributes +from datadog_api_client.v2.model.case_view_create_request import CaseViewCreateRequest +from datadog_api_client.v2.model.case_view_relationships import CaseViewRelationships +from datadog_api_client.v2.model.case_view_resource_type import CaseViewResourceType +from datadog_api_client.v2.model.case_view_response import CaseViewResponse +from datadog_api_client.v2.model.case_view_update import CaseViewUpdate +from datadog_api_client.v2.model.case_view_update_attributes import CaseViewUpdateAttributes +from datadog_api_client.v2.model.case_view_update_request import CaseViewUpdateRequest +from datadog_api_client.v2.model.case_views_response import CaseViewsResponse +from datadog_api_client.v2.model.case_watcher import CaseWatcher +from datadog_api_client.v2.model.case_watcher_relationships import CaseWatcherRelationships +from datadog_api_client.v2.model.case_watcher_resource_type import CaseWatcherResourceType +from datadog_api_client.v2.model.case_watcher_user_relationship import CaseWatcherUserRelationship +from datadog_api_client.v2.model.case_watchers_response import CaseWatchersResponse +from datadog_api_client.v2.model.cases_response import CasesResponse +from datadog_api_client.v2.model.cases_response_meta import CasesResponseMeta +from datadog_api_client.v2.model.cases_response_meta_pagination import CasesResponseMetaPagination +from datadog_api_client.v2.model.change_event_attributes import ChangeEventAttributes +from datadog_api_client.v2.model.change_event_attributes_author import ChangeEventAttributesAuthor +from datadog_api_client.v2.model.change_event_attributes_author_type import ChangeEventAttributesAuthorType +from datadog_api_client.v2.model.change_event_attributes_changed_resource import ChangeEventAttributesChangedResource +from datadog_api_client.v2.model.change_event_attributes_changed_resource_type import ChangeEventAttributesChangedResourceType +from datadog_api_client.v2.model.change_event_attributes_impacted_resources_item import ChangeEventAttributesImpactedResourcesItem +from datadog_api_client.v2.model.change_event_attributes_impacted_resources_item_type import ChangeEventAttributesImpactedResourcesItemType +from datadog_api_client.v2.model.change_event_custom_attributes import ChangeEventCustomAttributes +from datadog_api_client.v2.model.change_event_custom_attributes_author import ChangeEventCustomAttributesAuthor +from datadog_api_client.v2.model.change_event_custom_attributes_author_type import ChangeEventCustomAttributesAuthorType +from datadog_api_client.v2.model.change_event_custom_attributes_changed_resource import ChangeEventCustomAttributesChangedResource +from datadog_api_client.v2.model.change_event_custom_attributes_changed_resource_type import ChangeEventCustomAttributesChangedResourceType +from datadog_api_client.v2.model.change_event_custom_attributes_impacted_resources_items import ChangeEventCustomAttributesImpactedResourcesItems +from datadog_api_client.v2.model.change_event_custom_attributes_impacted_resources_items_type import ChangeEventCustomAttributesImpactedResourcesItemsType +from datadog_api_client.v2.model.change_event_trigger_wrapper import ChangeEventTriggerWrapper +from datadog_api_client.v2.model.change_request_branch_create_attributes import ChangeRequestBranchCreateAttributes +from datadog_api_client.v2.model.change_request_branch_create_data import ChangeRequestBranchCreateData +from datadog_api_client.v2.model.change_request_branch_create_request import ChangeRequestBranchCreateRequest +from datadog_api_client.v2.model.change_request_branch_resource_type import ChangeRequestBranchResourceType +from datadog_api_client.v2.model.change_request_change_type import ChangeRequestChangeType +from datadog_api_client.v2.model.change_request_create_attributes import ChangeRequestCreateAttributes +from datadog_api_client.v2.model.change_request_create_data import ChangeRequestCreateData +from datadog_api_client.v2.model.change_request_create_request import ChangeRequestCreateRequest +from datadog_api_client.v2.model.change_request_decision_create_attributes import ChangeRequestDecisionCreateAttributes +from datadog_api_client.v2.model.change_request_decision_create_item import ChangeRequestDecisionCreateItem +from datadog_api_client.v2.model.change_request_decision_create_relationships import ChangeRequestDecisionCreateRelationships +from datadog_api_client.v2.model.change_request_decision_relationship_data import ChangeRequestDecisionRelationshipData +from datadog_api_client.v2.model.change_request_decision_relationships import ChangeRequestDecisionRelationships +from datadog_api_client.v2.model.change_request_decision_resource_type import ChangeRequestDecisionResourceType +from datadog_api_client.v2.model.change_request_decision_response_attributes import ChangeRequestDecisionResponseAttributes +from datadog_api_client.v2.model.change_request_decision_status_type import ChangeRequestDecisionStatusType +from datadog_api_client.v2.model.change_request_decision_update_data import ChangeRequestDecisionUpdateData +from datadog_api_client.v2.model.change_request_decision_update_data_attributes import ChangeRequestDecisionUpdateDataAttributes +from datadog_api_client.v2.model.change_request_decision_update_data_relationships import ChangeRequestDecisionUpdateDataRelationships +from datadog_api_client.v2.model.change_request_decision_update_request import ChangeRequestDecisionUpdateRequest +from datadog_api_client.v2.model.change_request_decisions_relationship import ChangeRequestDecisionsRelationship +from datadog_api_client.v2.model.change_request_included_decision import ChangeRequestIncludedDecision +from datadog_api_client.v2.model.change_request_included_item import ChangeRequestIncludedItem +from datadog_api_client.v2.model.change_request_included_user import ChangeRequestIncludedUser +from datadog_api_client.v2.model.change_request_included_user_attributes import ChangeRequestIncludedUserAttributes +from datadog_api_client.v2.model.change_request_object_attributes import ChangeRequestObjectAttributes +from datadog_api_client.v2.model.change_request_relationships import ChangeRequestRelationships +from datadog_api_client.v2.model.change_request_resource_type import ChangeRequestResourceType +from datadog_api_client.v2.model.change_request_response import ChangeRequestResponse +from datadog_api_client.v2.model.change_request_response_attributes import ChangeRequestResponseAttributes +from datadog_api_client.v2.model.change_request_response_data import ChangeRequestResponseData +from datadog_api_client.v2.model.change_request_risk_level import ChangeRequestRiskLevel +from datadog_api_client.v2.model.change_request_update_attributes import ChangeRequestUpdateAttributes +from datadog_api_client.v2.model.change_request_update_data import ChangeRequestUpdateData +from datadog_api_client.v2.model.change_request_update_relationships import ChangeRequestUpdateRelationships +from datadog_api_client.v2.model.change_request_update_request import ChangeRequestUpdateRequest +from datadog_api_client.v2.model.change_request_user_relationship import ChangeRequestUserRelationship +from datadog_api_client.v2.model.change_request_user_relationship_data import ChangeRequestUserRelationshipData +from datadog_api_client.v2.model.chargeback_breakdown import ChargebackBreakdown +from datadog_api_client.v2.model.circle_ciapi_key import CircleCIAPIKey +from datadog_api_client.v2.model.circle_ciapi_key_type import CircleCIAPIKeyType +from datadog_api_client.v2.model.circle_ciapi_key_update import CircleCIAPIKeyUpdate +from datadog_api_client.v2.model.circle_ci_credentials import CircleCICredentials +from datadog_api_client.v2.model.circle_ci_credentials_update import CircleCICredentialsUpdate +from datadog_api_client.v2.model.circle_ci_integration import CircleCIIntegration +from datadog_api_client.v2.model.circle_ci_integration_type import CircleCIIntegrationType +from datadog_api_client.v2.model.circle_ci_integration_update import CircleCIIntegrationUpdate +from datadog_api_client.v2.model.clickup_api_key import ClickupAPIKey +from datadog_api_client.v2.model.clickup_api_key_type import ClickupAPIKeyType +from datadog_api_client.v2.model.clickup_api_key_update import ClickupAPIKeyUpdate +from datadog_api_client.v2.model.clickup_credentials import ClickupCredentials +from datadog_api_client.v2.model.clickup_credentials_update import ClickupCredentialsUpdate +from datadog_api_client.v2.model.clickup_integration import ClickupIntegration +from datadog_api_client.v2.model.clickup_integration_type import ClickupIntegrationType +from datadog_api_client.v2.model.clickup_integration_update import ClickupIntegrationUpdate +from datadog_api_client.v2.model.clone_form_data import CloneFormData +from datadog_api_client.v2.model.clone_form_data_attributes import CloneFormDataAttributes +from datadog_api_client.v2.model.clone_form_request import CloneFormRequest +from datadog_api_client.v2.model.cloud_asset_type import CloudAssetType +from datadog_api_client.v2.model.cloud_configuration_compliance_rule_options import CloudConfigurationComplianceRuleOptions +from datadog_api_client.v2.model.cloud_configuration_rego_rule import CloudConfigurationRegoRule +from datadog_api_client.v2.model.cloud_configuration_rule_case_create import CloudConfigurationRuleCaseCreate +from datadog_api_client.v2.model.cloud_configuration_rule_compliance_signal_options import CloudConfigurationRuleComplianceSignalOptions +from datadog_api_client.v2.model.cloud_configuration_rule_create_payload import CloudConfigurationRuleCreatePayload +from datadog_api_client.v2.model.cloud_configuration_rule_options import CloudConfigurationRuleOptions +from datadog_api_client.v2.model.cloud_configuration_rule_payload import CloudConfigurationRulePayload +from datadog_api_client.v2.model.cloud_configuration_rule_type import CloudConfigurationRuleType +from datadog_api_client.v2.model.cloud_inventory_cloud_provider_id import CloudInventoryCloudProviderId +from datadog_api_client.v2.model.cloud_inventory_cloud_provider_request_type import CloudInventoryCloudProviderRequestType +from datadog_api_client.v2.model.cloud_inventory_sync_config_aws_request_attributes import CloudInventorySyncConfigAWSRequestAttributes +from datadog_api_client.v2.model.cloud_inventory_sync_config_attributes import CloudInventorySyncConfigAttributes +from datadog_api_client.v2.model.cloud_inventory_sync_config_azure_request_attributes import CloudInventorySyncConfigAzureRequestAttributes +from datadog_api_client.v2.model.cloud_inventory_sync_config_gcp_request_attributes import CloudInventorySyncConfigGCPRequestAttributes +from datadog_api_client.v2.model.cloud_inventory_sync_config_resource_type import CloudInventorySyncConfigResourceType +from datadog_api_client.v2.model.cloud_inventory_sync_config_response import CloudInventorySyncConfigResponse +from datadog_api_client.v2.model.cloud_inventory_sync_config_response_data import CloudInventorySyncConfigResponseData +from datadog_api_client.v2.model.cloud_workload_security_agent_policies_list_response import CloudWorkloadSecurityAgentPoliciesListResponse +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_attributes import CloudWorkloadSecurityAgentPolicyAttributes +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_create_attributes import CloudWorkloadSecurityAgentPolicyCreateAttributes +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_create_data import CloudWorkloadSecurityAgentPolicyCreateData +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_create_request import CloudWorkloadSecurityAgentPolicyCreateRequest +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_data import CloudWorkloadSecurityAgentPolicyData +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_response import CloudWorkloadSecurityAgentPolicyResponse +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_type import CloudWorkloadSecurityAgentPolicyType +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_update_attributes import CloudWorkloadSecurityAgentPolicyUpdateAttributes +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_update_data import CloudWorkloadSecurityAgentPolicyUpdateData +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_update_request import CloudWorkloadSecurityAgentPolicyUpdateRequest +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_updater_attributes import CloudWorkloadSecurityAgentPolicyUpdaterAttributes +from datadog_api_client.v2.model.cloud_workload_security_agent_policy_version import CloudWorkloadSecurityAgentPolicyVersion +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action import CloudWorkloadSecurityAgentRuleAction +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_hash import CloudWorkloadSecurityAgentRuleActionHash +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_metadata import CloudWorkloadSecurityAgentRuleActionMetadata +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_set import CloudWorkloadSecurityAgentRuleActionSet +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_action_set_value import CloudWorkloadSecurityAgentRuleActionSetValue +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_attributes import CloudWorkloadSecurityAgentRuleAttributes +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_create_attributes import CloudWorkloadSecurityAgentRuleCreateAttributes +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_create_data import CloudWorkloadSecurityAgentRuleCreateData +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_create_request import CloudWorkloadSecurityAgentRuleCreateRequest +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_creator_attributes import CloudWorkloadSecurityAgentRuleCreatorAttributes +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_data import CloudWorkloadSecurityAgentRuleData +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_kill import CloudWorkloadSecurityAgentRuleKill +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_response import CloudWorkloadSecurityAgentRuleResponse +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_type import CloudWorkloadSecurityAgentRuleType +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_update_attributes import CloudWorkloadSecurityAgentRuleUpdateAttributes +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_update_data import CloudWorkloadSecurityAgentRuleUpdateData +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_update_request import CloudWorkloadSecurityAgentRuleUpdateRequest +from datadog_api_client.v2.model.cloud_workload_security_agent_rule_updater_attributes import CloudWorkloadSecurityAgentRuleUpdaterAttributes +from datadog_api_client.v2.model.cloud_workload_security_agent_rules_list_response import CloudWorkloadSecurityAgentRulesListResponse +from datadog_api_client.v2.model.cloudflare_api_token import CloudflareAPIToken +from datadog_api_client.v2.model.cloudflare_api_token_type import CloudflareAPITokenType +from datadog_api_client.v2.model.cloudflare_api_token_update import CloudflareAPITokenUpdate +from datadog_api_client.v2.model.cloudflare_account_create_request import CloudflareAccountCreateRequest +from datadog_api_client.v2.model.cloudflare_account_create_request_attributes import CloudflareAccountCreateRequestAttributes +from datadog_api_client.v2.model.cloudflare_account_create_request_data import CloudflareAccountCreateRequestData +from datadog_api_client.v2.model.cloudflare_account_response import CloudflareAccountResponse +from datadog_api_client.v2.model.cloudflare_account_response_attributes import CloudflareAccountResponseAttributes +from datadog_api_client.v2.model.cloudflare_account_response_data import CloudflareAccountResponseData +from datadog_api_client.v2.model.cloudflare_account_type import CloudflareAccountType +from datadog_api_client.v2.model.cloudflare_account_update_request import CloudflareAccountUpdateRequest +from datadog_api_client.v2.model.cloudflare_account_update_request_attributes import CloudflareAccountUpdateRequestAttributes +from datadog_api_client.v2.model.cloudflare_account_update_request_data import CloudflareAccountUpdateRequestData +from datadog_api_client.v2.model.cloudflare_accounts_response import CloudflareAccountsResponse +from datadog_api_client.v2.model.cloudflare_credentials import CloudflareCredentials +from datadog_api_client.v2.model.cloudflare_credentials_update import CloudflareCredentialsUpdate +from datadog_api_client.v2.model.cloudflare_global_api_token import CloudflareGlobalAPIToken +from datadog_api_client.v2.model.cloudflare_global_api_token_type import CloudflareGlobalAPITokenType +from datadog_api_client.v2.model.cloudflare_global_api_token_update import CloudflareGlobalAPITokenUpdate +from datadog_api_client.v2.model.cloudflare_integration import CloudflareIntegration +from datadog_api_client.v2.model.cloudflare_integration_type import CloudflareIntegrationType +from datadog_api_client.v2.model.cloudflare_integration_update import CloudflareIntegrationUpdate +from datadog_api_client.v2.model.code_location import CodeLocation +from datadog_api_client.v2.model.commit_coverage_summary_request import CommitCoverageSummaryRequest +from datadog_api_client.v2.model.commit_coverage_summary_request_attributes import CommitCoverageSummaryRequestAttributes +from datadog_api_client.v2.model.commit_coverage_summary_request_data import CommitCoverageSummaryRequestData +from datadog_api_client.v2.model.commit_coverage_summary_request_type import CommitCoverageSummaryRequestType +from datadog_api_client.v2.model.commitments_aws_ec2_ri_commitment import CommitmentsAwsEC2RICommitment +from datadog_api_client.v2.model.commitments_aws_elasticache_ri_commitment import CommitmentsAwsElasticacheRICommitment +from datadog_api_client.v2.model.commitments_aws_rdsri_commitment import CommitmentsAwsRDSRICommitment +from datadog_api_client.v2.model.commitments_aws_sp_commitment import CommitmentsAwsSPCommitment +from datadog_api_client.v2.model.commitments_azure_compute_sp_commitment import CommitmentsAzureComputeSPCommitment +from datadog_api_client.v2.model.commitments_azure_vmri_commitment import CommitmentsAzureVMRICommitment +from datadog_api_client.v2.model.commitments_azure_vmri_status import CommitmentsAzureVMRIStatus +from datadog_api_client.v2.model.commitments_commitment_type import CommitmentsCommitmentType +from datadog_api_client.v2.model.commitments_coverage_scalar_response import CommitmentsCoverageScalarResponse +from datadog_api_client.v2.model.commitments_coverage_timeseries_response import CommitmentsCoverageTimeseriesResponse +from datadog_api_client.v2.model.commitments_list_item import CommitmentsListItem +from datadog_api_client.v2.model.commitments_list_meta import CommitmentsListMeta +from datadog_api_client.v2.model.commitments_list_response import CommitmentsListResponse +from datadog_api_client.v2.model.commitments_on_demand_hotspots_scalar_meta import CommitmentsOnDemandHotspotsScalarMeta +from datadog_api_client.v2.model.commitments_on_demand_hotspots_scalar_response import CommitmentsOnDemandHotspotsScalarResponse +from datadog_api_client.v2.model.commitments_provider import CommitmentsProvider +from datadog_api_client.v2.model.commitments_savings_scalar_response import CommitmentsSavingsScalarResponse +from datadog_api_client.v2.model.commitments_savings_timeseries_response import CommitmentsSavingsTimeseriesResponse +from datadog_api_client.v2.model.commitments_scalar_column import CommitmentsScalarColumn +from datadog_api_client.v2.model.commitments_scalar_column_meta import CommitmentsScalarColumnMeta +from datadog_api_client.v2.model.commitments_scalar_column_type import CommitmentsScalarColumnType +from datadog_api_client.v2.model.commitments_timeseries_metric import CommitmentsTimeseriesMetric +from datadog_api_client.v2.model.commitments_timeseries_series import CommitmentsTimeseriesSeries +from datadog_api_client.v2.model.commitments_unit import CommitmentsUnit +from datadog_api_client.v2.model.commitments_utilization_scalar_product_breakdown_entry import CommitmentsUtilizationScalarProductBreakdownEntry +from datadog_api_client.v2.model.commitments_utilization_scalar_response import CommitmentsUtilizationScalarResponse +from datadog_api_client.v2.model.commitments_utilization_timeseries_response import CommitmentsUtilizationTimeseriesResponse +from datadog_api_client.v2.model.completion_condition import CompletionCondition +from datadog_api_client.v2.model.completion_condition_operator import CompletionConditionOperator +from datadog_api_client.v2.model.completion_gate import CompletionGate +from datadog_api_client.v2.model.component import Component +from datadog_api_client.v2.model.component_grid import ComponentGrid +from datadog_api_client.v2.model.component_grid_properties import ComponentGridProperties +from datadog_api_client.v2.model.component_grid_properties_is_visible import ComponentGridPropertiesIsVisible +from datadog_api_client.v2.model.component_grid_type import ComponentGridType +from datadog_api_client.v2.model.component_properties import ComponentProperties +from datadog_api_client.v2.model.component_properties_is_visible import ComponentPropertiesIsVisible +from datadog_api_client.v2.model.component_recommendation import ComponentRecommendation +from datadog_api_client.v2.model.component_type import ComponentType +from datadog_api_client.v2.model.condition import Condition +from datadog_api_client.v2.model.condition_operator import ConditionOperator +from datadog_api_client.v2.model.condition_request import ConditionRequest +from datadog_api_client.v2.model.config_cat_credentials import ConfigCatCredentials +from datadog_api_client.v2.model.config_cat_credentials_update import ConfigCatCredentialsUpdate +from datadog_api_client.v2.model.config_cat_integration import ConfigCatIntegration +from datadog_api_client.v2.model.config_cat_integration_type import ConfigCatIntegrationType +from datadog_api_client.v2.model.config_cat_integration_update import ConfigCatIntegrationUpdate +from datadog_api_client.v2.model.config_cat_sdk_key import ConfigCatSDKKey +from datadog_api_client.v2.model.config_cat_sdk_key_type import ConfigCatSDKKeyType +from datadog_api_client.v2.model.config_cat_sdk_key_update import ConfigCatSDKKeyUpdate +from datadog_api_client.v2.model.configured_schedule import ConfiguredSchedule +from datadog_api_client.v2.model.configured_schedule_target import ConfiguredScheduleTarget +from datadog_api_client.v2.model.configured_schedule_target_attributes import ConfiguredScheduleTargetAttributes +from datadog_api_client.v2.model.configured_schedule_target_relationships import ConfiguredScheduleTargetRelationships +from datadog_api_client.v2.model.configured_schedule_target_relationships_schedule import ConfiguredScheduleTargetRelationshipsSchedule +from datadog_api_client.v2.model.configured_schedule_target_type import ConfiguredScheduleTargetType +from datadog_api_client.v2.model.confluence_postmortem_settings import ConfluencePostmortemSettings +from datadog_api_client.v2.model.confluent_account_create_request import ConfluentAccountCreateRequest +from datadog_api_client.v2.model.confluent_account_create_request_attributes import ConfluentAccountCreateRequestAttributes +from datadog_api_client.v2.model.confluent_account_create_request_data import ConfluentAccountCreateRequestData +from datadog_api_client.v2.model.confluent_account_resource_attributes import ConfluentAccountResourceAttributes +from datadog_api_client.v2.model.confluent_account_response import ConfluentAccountResponse +from datadog_api_client.v2.model.confluent_account_response_attributes import ConfluentAccountResponseAttributes +from datadog_api_client.v2.model.confluent_account_response_data import ConfluentAccountResponseData +from datadog_api_client.v2.model.confluent_account_type import ConfluentAccountType +from datadog_api_client.v2.model.confluent_account_update_request import ConfluentAccountUpdateRequest +from datadog_api_client.v2.model.confluent_account_update_request_attributes import ConfluentAccountUpdateRequestAttributes +from datadog_api_client.v2.model.confluent_account_update_request_data import ConfluentAccountUpdateRequestData +from datadog_api_client.v2.model.confluent_accounts_response import ConfluentAccountsResponse +from datadog_api_client.v2.model.confluent_resource_request import ConfluentResourceRequest +from datadog_api_client.v2.model.confluent_resource_request_attributes import ConfluentResourceRequestAttributes +from datadog_api_client.v2.model.confluent_resource_request_data import ConfluentResourceRequestData +from datadog_api_client.v2.model.confluent_resource_response import ConfluentResourceResponse +from datadog_api_client.v2.model.confluent_resource_response_attributes import ConfluentResourceResponseAttributes +from datadog_api_client.v2.model.confluent_resource_response_data import ConfluentResourceResponseData +from datadog_api_client.v2.model.confluent_resource_type import ConfluentResourceType +from datadog_api_client.v2.model.confluent_resources_response import ConfluentResourcesResponse +from datadog_api_client.v2.model.connected_team_ref import ConnectedTeamRef +from datadog_api_client.v2.model.connected_team_ref_data import ConnectedTeamRefData +from datadog_api_client.v2.model.connected_team_ref_data_type import ConnectedTeamRefDataType +from datadog_api_client.v2.model.connection import Connection +from datadog_api_client.v2.model.connection_env import ConnectionEnv +from datadog_api_client.v2.model.connection_env_env import ConnectionEnvEnv +from datadog_api_client.v2.model.connection_group import ConnectionGroup +from datadog_api_client.v2.model.connections_page_pagination import ConnectionsPagePagination +from datadog_api_client.v2.model.connections_response_meta import ConnectionsResponseMeta +from datadog_api_client.v2.model.container import Container +from datadog_api_client.v2.model.container_attributes import ContainerAttributes +from datadog_api_client.v2.model.container_data_source import ContainerDataSource +from datadog_api_client.v2.model.container_group import ContainerGroup +from datadog_api_client.v2.model.container_group_attributes import ContainerGroupAttributes +from datadog_api_client.v2.model.container_group_relationships import ContainerGroupRelationships +from datadog_api_client.v2.model.container_group_relationships_link import ContainerGroupRelationshipsLink +from datadog_api_client.v2.model.container_group_relationships_links import ContainerGroupRelationshipsLinks +from datadog_api_client.v2.model.container_group_type import ContainerGroupType +from datadog_api_client.v2.model.container_image import ContainerImage +from datadog_api_client.v2.model.container_image_attributes import ContainerImageAttributes +from datadog_api_client.v2.model.container_image_flavor import ContainerImageFlavor +from datadog_api_client.v2.model.container_image_group import ContainerImageGroup +from datadog_api_client.v2.model.container_image_group_attributes import ContainerImageGroupAttributes +from datadog_api_client.v2.model.container_image_group_images_relationships_link import ContainerImageGroupImagesRelationshipsLink +from datadog_api_client.v2.model.container_image_group_relationships import ContainerImageGroupRelationships +from datadog_api_client.v2.model.container_image_group_relationships_links import ContainerImageGroupRelationshipsLinks +from datadog_api_client.v2.model.container_image_group_type import ContainerImageGroupType +from datadog_api_client.v2.model.container_image_item import ContainerImageItem +from datadog_api_client.v2.model.container_image_meta import ContainerImageMeta +from datadog_api_client.v2.model.container_image_meta_page import ContainerImageMetaPage +from datadog_api_client.v2.model.container_image_meta_page_type import ContainerImageMetaPageType +from datadog_api_client.v2.model.container_image_type import ContainerImageType +from datadog_api_client.v2.model.container_image_vulnerabilities import ContainerImageVulnerabilities +from datadog_api_client.v2.model.container_images_response import ContainerImagesResponse +from datadog_api_client.v2.model.container_images_response_links import ContainerImagesResponseLinks +from datadog_api_client.v2.model.container_item import ContainerItem +from datadog_api_client.v2.model.container_meta import ContainerMeta +from datadog_api_client.v2.model.container_meta_page import ContainerMetaPage +from datadog_api_client.v2.model.container_meta_page_type import ContainerMetaPageType +from datadog_api_client.v2.model.container_scalar_query import ContainerScalarQuery +from datadog_api_client.v2.model.container_timeseries_query import ContainerTimeseriesQuery +from datadog_api_client.v2.model.container_type import ContainerType +from datadog_api_client.v2.model.containers_response import ContainersResponse +from datadog_api_client.v2.model.containers_response_links import ContainersResponseLinks +from datadog_api_client.v2.model.content_encoding import ContentEncoding +from datadog_api_client.v2.model.control_notification_event_setting import ControlNotificationEventSetting +from datadog_api_client.v2.model.control_notification_settings_attributes import ControlNotificationSettingsAttributes +from datadog_api_client.v2.model.control_notification_settings_data import ControlNotificationSettingsData +from datadog_api_client.v2.model.control_notification_settings_resource_type import ControlNotificationSettingsResourceType +from datadog_api_client.v2.model.control_notification_settings_response import ControlNotificationSettingsResponse +from datadog_api_client.v2.model.control_notification_settings_update_attributes import ControlNotificationSettingsUpdateAttributes +from datadog_api_client.v2.model.control_notification_settings_update_data import ControlNotificationSettingsUpdateData +from datadog_api_client.v2.model.control_notification_settings_update_request import ControlNotificationSettingsUpdateRequest +from datadog_api_client.v2.model.control_notification_target import ControlNotificationTarget +from datadog_api_client.v2.model.control_notification_target_type import ControlNotificationTargetType +from datadog_api_client.v2.model.convert_job_results_to_signals_attributes import ConvertJobResultsToSignalsAttributes +from datadog_api_client.v2.model.convert_job_results_to_signals_data import ConvertJobResultsToSignalsData +from datadog_api_client.v2.model.convert_job_results_to_signals_data_type import ConvertJobResultsToSignalsDataType +from datadog_api_client.v2.model.convert_job_results_to_signals_request import ConvertJobResultsToSignalsRequest +from datadog_api_client.v2.model.cost_aggregation_type import CostAggregationType +from datadog_api_client.v2.model.cost_anomalies_response import CostAnomaliesResponse +from datadog_api_client.v2.model.cost_anomalies_response_data import CostAnomaliesResponseData +from datadog_api_client.v2.model.cost_anomalies_response_data_attributes import CostAnomaliesResponseDataAttributes +from datadog_api_client.v2.model.cost_anomalies_response_data_type import CostAnomaliesResponseDataType +from datadog_api_client.v2.model.cost_anomaly import CostAnomaly +from datadog_api_client.v2.model.cost_anomaly_correlated_tags import CostAnomalyCorrelatedTags +from datadog_api_client.v2.model.cost_anomaly_dimensions import CostAnomalyDimensions +from datadog_api_client.v2.model.cost_anomaly_dismissal import CostAnomalyDismissal +from datadog_api_client.v2.model.cost_anomaly_response import CostAnomalyResponse +from datadog_api_client.v2.model.cost_anomaly_response_data import CostAnomalyResponseData +from datadog_api_client.v2.model.cost_attribution_aggregates_body import CostAttributionAggregatesBody +from datadog_api_client.v2.model.cost_attribution_tag_names import CostAttributionTagNames +from datadog_api_client.v2.model.cost_attribution_type import CostAttributionType +from datadog_api_client.v2.model.cost_by_org import CostByOrg +from datadog_api_client.v2.model.cost_by_org_attributes import CostByOrgAttributes +from datadog_api_client.v2.model.cost_by_org_response import CostByOrgResponse +from datadog_api_client.v2.model.cost_by_org_type import CostByOrgType +from datadog_api_client.v2.model.cost_currency import CostCurrency +from datadog_api_client.v2.model.cost_currency_response import CostCurrencyResponse +from datadog_api_client.v2.model.cost_currency_type import CostCurrencyType +from datadog_api_client.v2.model.cost_metric import CostMetric +from datadog_api_client.v2.model.cost_metric_type import CostMetricType +from datadog_api_client.v2.model.cost_metrics_response import CostMetricsResponse +from datadog_api_client.v2.model.cost_orchestrator import CostOrchestrator +from datadog_api_client.v2.model.cost_orchestrator_type import CostOrchestratorType +from datadog_api_client.v2.model.cost_orchestrators_response import CostOrchestratorsResponse +from datadog_api_client.v2.model.cost_recommendation_array import CostRecommendationArray +from datadog_api_client.v2.model.cost_recommendation_data import CostRecommendationData +from datadog_api_client.v2.model.cost_recommendation_data_attributes import CostRecommendationDataAttributes +from datadog_api_client.v2.model.cost_recommendation_data_attributes_potential_daily_savings import CostRecommendationDataAttributesPotentialDailySavings +from datadog_api_client.v2.model.cost_recommendation_data_type import CostRecommendationDataType +from datadog_api_client.v2.model.cost_tag import CostTag +from datadog_api_client.v2.model.cost_tag_attributes import CostTagAttributes +from datadog_api_client.v2.model.cost_tag_description import CostTagDescription +from datadog_api_client.v2.model.cost_tag_description_attributes import CostTagDescriptionAttributes +from datadog_api_client.v2.model.cost_tag_description_response import CostTagDescriptionResponse +from datadog_api_client.v2.model.cost_tag_description_source import CostTagDescriptionSource +from datadog_api_client.v2.model.cost_tag_description_type import CostTagDescriptionType +from datadog_api_client.v2.model.cost_tag_description_upsert_request import CostTagDescriptionUpsertRequest +from datadog_api_client.v2.model.cost_tag_description_upsert_request_data import CostTagDescriptionUpsertRequestData +from datadog_api_client.v2.model.cost_tag_description_upsert_request_data_attributes import CostTagDescriptionUpsertRequestDataAttributes +from datadog_api_client.v2.model.cost_tag_descriptions_response import CostTagDescriptionsResponse +from datadog_api_client.v2.model.cost_tag_key import CostTagKey +from datadog_api_client.v2.model.cost_tag_key_attributes import CostTagKeyAttributes +from datadog_api_client.v2.model.cost_tag_key_details import CostTagKeyDetails +from datadog_api_client.v2.model.cost_tag_key_metadata import CostTagKeyMetadata +from datadog_api_client.v2.model.cost_tag_key_metadata_attributes import CostTagKeyMetadataAttributes +from datadog_api_client.v2.model.cost_tag_key_metadata_cardinality_by_account import CostTagKeyMetadataCardinalityByAccount +from datadog_api_client.v2.model.cost_tag_key_metadata_response import CostTagKeyMetadataResponse +from datadog_api_client.v2.model.cost_tag_key_metadata_top_values_by_account import CostTagKeyMetadataTopValuesByAccount +from datadog_api_client.v2.model.cost_tag_key_metadata_type import CostTagKeyMetadataType +from datadog_api_client.v2.model.cost_tag_key_response import CostTagKeyResponse +from datadog_api_client.v2.model.cost_tag_key_source import CostTagKeySource +from datadog_api_client.v2.model.cost_tag_key_source_attributes import CostTagKeySourceAttributes +from datadog_api_client.v2.model.cost_tag_key_source_type import CostTagKeySourceType +from datadog_api_client.v2.model.cost_tag_key_sources_response import CostTagKeySourcesResponse +from datadog_api_client.v2.model.cost_tag_key_type import CostTagKeyType +from datadog_api_client.v2.model.cost_tag_keys_response import CostTagKeysResponse +from datadog_api_client.v2.model.cost_tag_metadata_daily_filter import CostTagMetadataDailyFilter +from datadog_api_client.v2.model.cost_tag_metadata_month import CostTagMetadataMonth +from datadog_api_client.v2.model.cost_tag_metadata_month_type import CostTagMetadataMonthType +from datadog_api_client.v2.model.cost_tag_metadata_months_response import CostTagMetadataMonthsResponse +from datadog_api_client.v2.model.cost_tag_type import CostTagType +from datadog_api_client.v2.model.cost_tags_response import CostTagsResponse +from datadog_api_client.v2.model.coverage_summary_attributes import CoverageSummaryAttributes +from datadog_api_client.v2.model.coverage_summary_codeowner_stats import CoverageSummaryCodeownerStats +from datadog_api_client.v2.model.coverage_summary_data import CoverageSummaryData +from datadog_api_client.v2.model.coverage_summary_response import CoverageSummaryResponse +from datadog_api_client.v2.model.coverage_summary_service_stats import CoverageSummaryServiceStats +from datadog_api_client.v2.model.coverage_summary_type import CoverageSummaryType +from datadog_api_client.v2.model.cpu import Cpu +from datadog_api_client.v2.model.create_action_connection_request import CreateActionConnectionRequest +from datadog_api_client.v2.model.create_action_connection_response import CreateActionConnectionResponse +from datadog_api_client.v2.model.create_allocations_request import CreateAllocationsRequest +from datadog_api_client.v2.model.create_app_request import CreateAppRequest +from datadog_api_client.v2.model.create_app_request_data import CreateAppRequestData +from datadog_api_client.v2.model.create_app_request_data_attributes import CreateAppRequestDataAttributes +from datadog_api_client.v2.model.create_app_response import CreateAppResponse +from datadog_api_client.v2.model.create_app_response_data import CreateAppResponseData +from datadog_api_client.v2.model.create_apps_datastore_request import CreateAppsDatastoreRequest +from datadog_api_client.v2.model.create_apps_datastore_request_data import CreateAppsDatastoreRequestData +from datadog_api_client.v2.model.create_apps_datastore_request_data_attributes import CreateAppsDatastoreRequestDataAttributes +from datadog_api_client.v2.model.create_apps_datastore_request_data_attributes_org_access import CreateAppsDatastoreRequestDataAttributesOrgAccess +from datadog_api_client.v2.model.create_apps_datastore_response import CreateAppsDatastoreResponse +from datadog_api_client.v2.model.create_apps_datastore_response_data import CreateAppsDatastoreResponseData +from datadog_api_client.v2.model.create_attachment_request import CreateAttachmentRequest +from datadog_api_client.v2.model.create_attachment_request_data import CreateAttachmentRequestData +from datadog_api_client.v2.model.create_attachment_request_data_attributes import CreateAttachmentRequestDataAttributes +from datadog_api_client.v2.model.create_attachment_request_data_attributes_attachment import CreateAttachmentRequestDataAttributesAttachment +from datadog_api_client.v2.model.create_backfilled_degradation_request import CreateBackfilledDegradationRequest +from datadog_api_client.v2.model.create_backfilled_degradation_request_data import CreateBackfilledDegradationRequestData +from datadog_api_client.v2.model.create_backfilled_degradation_request_data_attributes import CreateBackfilledDegradationRequestDataAttributes +from datadog_api_client.v2.model.create_backfilled_degradation_request_data_attributes_updates_items import CreateBackfilledDegradationRequestDataAttributesUpdatesItems +from datadog_api_client.v2.model.create_backfilled_degradation_request_data_relationships import CreateBackfilledDegradationRequestDataRelationships +from datadog_api_client.v2.model.create_backfilled_degradation_request_data_relationships_template import CreateBackfilledDegradationRequestDataRelationshipsTemplate +from datadog_api_client.v2.model.create_backfilled_degradation_request_data_relationships_template_data import CreateBackfilledDegradationRequestDataRelationshipsTemplateData +from datadog_api_client.v2.model.create_backfilled_maintenance_request import CreateBackfilledMaintenanceRequest +from datadog_api_client.v2.model.create_backfilled_maintenance_request_data import CreateBackfilledMaintenanceRequestData +from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_attributes import CreateBackfilledMaintenanceRequestDataAttributes +from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_attributes_updates_items import CreateBackfilledMaintenanceRequestDataAttributesUpdatesItems +from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_relationships import CreateBackfilledMaintenanceRequestDataRelationships +from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_relationships_template import CreateBackfilledMaintenanceRequestDataRelationshipsTemplate +from datadog_api_client.v2.model.create_backfilled_maintenance_request_data_relationships_template_data import CreateBackfilledMaintenanceRequestDataRelationshipsTemplateData +from datadog_api_client.v2.model.create_campaign_request import CreateCampaignRequest +from datadog_api_client.v2.model.create_campaign_request_attributes import CreateCampaignRequestAttributes +from datadog_api_client.v2.model.create_campaign_request_data import CreateCampaignRequestData +from datadog_api_client.v2.model.create_case_request_array import CreateCaseRequestArray +from datadog_api_client.v2.model.create_case_request_data import CreateCaseRequestData +from datadog_api_client.v2.model.create_case_request_data_attributes import CreateCaseRequestDataAttributes +from datadog_api_client.v2.model.create_case_request_data_relationships import CreateCaseRequestDataRelationships +from datadog_api_client.v2.model.create_component_request import CreateComponentRequest +from datadog_api_client.v2.model.create_component_request_data import CreateComponentRequestData +from datadog_api_client.v2.model.create_component_request_data_attributes import CreateComponentRequestDataAttributes +from datadog_api_client.v2.model.create_component_request_data_attributes_components_items import CreateComponentRequestDataAttributesComponentsItems +from datadog_api_client.v2.model.create_component_request_data_attributes_type import CreateComponentRequestDataAttributesType +from datadog_api_client.v2.model.create_component_request_data_relationships import CreateComponentRequestDataRelationships +from datadog_api_client.v2.model.create_component_request_data_relationships_group import CreateComponentRequestDataRelationshipsGroup +from datadog_api_client.v2.model.create_component_request_data_relationships_group_data import CreateComponentRequestDataRelationshipsGroupData +from datadog_api_client.v2.model.create_connection_request import CreateConnectionRequest +from datadog_api_client.v2.model.create_connection_request_data import CreateConnectionRequestData +from datadog_api_client.v2.model.create_connection_request_data_attributes import CreateConnectionRequestDataAttributes +from datadog_api_client.v2.model.create_connection_request_data_attributes_fields_items import CreateConnectionRequestDataAttributesFieldsItems +from datadog_api_client.v2.model.create_custom_framework_request import CreateCustomFrameworkRequest +from datadog_api_client.v2.model.create_custom_framework_response import CreateCustomFrameworkResponse +from datadog_api_client.v2.model.create_data_deletion_request_body import CreateDataDeletionRequestBody +from datadog_api_client.v2.model.create_data_deletion_request_body_attributes import CreateDataDeletionRequestBodyAttributes +from datadog_api_client.v2.model.create_data_deletion_request_body_data import CreateDataDeletionRequestBodyData +from datadog_api_client.v2.model.create_data_deletion_request_body_data_type import CreateDataDeletionRequestBodyDataType +from datadog_api_client.v2.model.create_data_deletion_response_body import CreateDataDeletionResponseBody +from datadog_api_client.v2.model.create_degradation_request import CreateDegradationRequest +from datadog_api_client.v2.model.create_degradation_request_data import CreateDegradationRequestData +from datadog_api_client.v2.model.create_degradation_request_data_attributes import CreateDegradationRequestDataAttributes +from datadog_api_client.v2.model.create_degradation_request_data_attributes_components_affected_items import CreateDegradationRequestDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.create_degradation_request_data_attributes_status import CreateDegradationRequestDataAttributesStatus +from datadog_api_client.v2.model.create_degradation_request_data_relationships import CreateDegradationRequestDataRelationships +from datadog_api_client.v2.model.create_degradation_request_data_relationships_template import CreateDegradationRequestDataRelationshipsTemplate +from datadog_api_client.v2.model.create_degradation_request_data_relationships_template_data import CreateDegradationRequestDataRelationshipsTemplateData +from datadog_api_client.v2.model.create_degradation_template_request import CreateDegradationTemplateRequest +from datadog_api_client.v2.model.create_degradation_template_request_data import CreateDegradationTemplateRequestData +from datadog_api_client.v2.model.create_degradation_template_request_data_attributes import CreateDegradationTemplateRequestDataAttributes +from datadog_api_client.v2.model.create_degradation_template_request_data_attributes_components_affected_items import CreateDegradationTemplateRequestDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.create_degradation_template_request_data_attributes_updates_items import CreateDegradationTemplateRequestDataAttributesUpdatesItems +from datadog_api_client.v2.model.create_deployment_gate_params import CreateDeploymentGateParams +from datadog_api_client.v2.model.create_deployment_gate_params_data import CreateDeploymentGateParamsData +from datadog_api_client.v2.model.create_deployment_gate_params_data_attributes import CreateDeploymentGateParamsDataAttributes +from datadog_api_client.v2.model.create_deployment_rule_params import CreateDeploymentRuleParams +from datadog_api_client.v2.model.create_deployment_rule_params_data import CreateDeploymentRuleParamsData +from datadog_api_client.v2.model.create_deployment_rule_params_data_attributes import CreateDeploymentRuleParamsDataAttributes +from datadog_api_client.v2.model.create_email_notification_channel_config import CreateEmailNotificationChannelConfig +from datadog_api_client.v2.model.create_environment_attributes import CreateEnvironmentAttributes +from datadog_api_client.v2.model.create_environment_data import CreateEnvironmentData +from datadog_api_client.v2.model.create_environment_data_type import CreateEnvironmentDataType +from datadog_api_client.v2.model.create_environment_request import CreateEnvironmentRequest +from datadog_api_client.v2.model.create_feature_flag_attributes import CreateFeatureFlagAttributes +from datadog_api_client.v2.model.create_feature_flag_data import CreateFeatureFlagData +from datadog_api_client.v2.model.create_feature_flag_data_type import CreateFeatureFlagDataType +from datadog_api_client.v2.model.create_feature_flag_request import CreateFeatureFlagRequest +from datadog_api_client.v2.model.create_form_data import CreateFormData +from datadog_api_client.v2.model.create_form_data_attributes import CreateFormDataAttributes +from datadog_api_client.v2.model.create_form_request import CreateFormRequest +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 +from datadog_api_client.v2.model.create_jira_issue_request_array import CreateJiraIssueRequestArray +from datadog_api_client.v2.model.create_jira_issue_request_data import CreateJiraIssueRequestData +from datadog_api_client.v2.model.create_jira_issue_request_data_attributes import CreateJiraIssueRequestDataAttributes +from datadog_api_client.v2.model.create_jira_issue_request_data_relationships import CreateJiraIssueRequestDataRelationships +from datadog_api_client.v2.model.create_linear_issue_request_array import CreateLinearIssueRequestArray +from datadog_api_client.v2.model.create_linear_issue_request_data import CreateLinearIssueRequestData +from datadog_api_client.v2.model.create_linear_issue_request_data_attributes import CreateLinearIssueRequestDataAttributes +from datadog_api_client.v2.model.create_linear_issue_request_data_relationships import CreateLinearIssueRequestDataRelationships +from datadog_api_client.v2.model.create_maintenance_request import CreateMaintenanceRequest +from datadog_api_client.v2.model.create_maintenance_request_data import CreateMaintenanceRequestData +from datadog_api_client.v2.model.create_maintenance_request_data_attributes import CreateMaintenanceRequestDataAttributes +from datadog_api_client.v2.model.create_maintenance_request_data_attributes_components_affected_items import CreateMaintenanceRequestDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.create_maintenance_request_data_attributes_updates_items_status import CreateMaintenanceRequestDataAttributesUpdatesItemsStatus +from datadog_api_client.v2.model.create_maintenance_request_data_relationships import CreateMaintenanceRequestDataRelationships +from datadog_api_client.v2.model.create_maintenance_request_data_relationships_template import CreateMaintenanceRequestDataRelationshipsTemplate +from datadog_api_client.v2.model.create_maintenance_request_data_relationships_template_data import CreateMaintenanceRequestDataRelationshipsTemplateData +from datadog_api_client.v2.model.create_maintenance_template_request import CreateMaintenanceTemplateRequest +from datadog_api_client.v2.model.create_maintenance_template_request_data import CreateMaintenanceTemplateRequestData +from datadog_api_client.v2.model.create_maintenance_template_request_data_attributes import CreateMaintenanceTemplateRequestDataAttributes +from datadog_api_client.v2.model.create_notification_channel_attributes import CreateNotificationChannelAttributes +from datadog_api_client.v2.model.create_notification_channel_config import CreateNotificationChannelConfig +from datadog_api_client.v2.model.create_notification_channel_data import CreateNotificationChannelData +from datadog_api_client.v2.model.create_notification_rule_parameters import CreateNotificationRuleParameters +from datadog_api_client.v2.model.create_notification_rule_parameters_data import CreateNotificationRuleParametersData +from datadog_api_client.v2.model.create_notification_rule_parameters_data_attributes import CreateNotificationRuleParametersDataAttributes +from datadog_api_client.v2.model.create_on_call_notification_rule_request import CreateOnCallNotificationRuleRequest +from datadog_api_client.v2.model.create_on_call_notification_rule_request_data import CreateOnCallNotificationRuleRequestData +from datadog_api_client.v2.model.create_open_api_response import CreateOpenAPIResponse +from datadog_api_client.v2.model.create_open_api_response_attributes import CreateOpenAPIResponseAttributes +from datadog_api_client.v2.model.create_open_api_response_data import CreateOpenAPIResponseData +from datadog_api_client.v2.model.create_or_update_widget_request import CreateOrUpdateWidgetRequest +from datadog_api_client.v2.model.create_or_update_widget_request_attributes import CreateOrUpdateWidgetRequestAttributes +from datadog_api_client.v2.model.create_or_update_widget_request_data import CreateOrUpdateWidgetRequestData +from datadog_api_client.v2.model.create_page_request import CreatePageRequest +from datadog_api_client.v2.model.create_page_request_data import CreatePageRequestData +from datadog_api_client.v2.model.create_page_request_data_attributes import CreatePageRequestDataAttributes +from datadog_api_client.v2.model.create_page_request_data_attributes_target import CreatePageRequestDataAttributesTarget +from datadog_api_client.v2.model.create_page_request_data_type import CreatePageRequestDataType +from datadog_api_client.v2.model.create_page_response import CreatePageResponse +from datadog_api_client.v2.model.create_page_response_data import CreatePageResponseData +from datadog_api_client.v2.model.create_page_response_data_type import CreatePageResponseDataType +from datadog_api_client.v2.model.create_phone_notification_channel_config import CreatePhoneNotificationChannelConfig +from datadog_api_client.v2.model.create_publish_request_request import CreatePublishRequestRequest +from datadog_api_client.v2.model.create_publish_request_request_data import CreatePublishRequestRequestData +from datadog_api_client.v2.model.create_publish_request_request_data_attributes import CreatePublishRequestRequestDataAttributes +from datadog_api_client.v2.model.create_rule_request import CreateRuleRequest +from datadog_api_client.v2.model.create_rule_request_data import CreateRuleRequestData +from datadog_api_client.v2.model.create_rule_response import CreateRuleResponse +from datadog_api_client.v2.model.create_rule_response_data import CreateRuleResponseData +from datadog_api_client.v2.model.create_ruleset_request import CreateRulesetRequest +from datadog_api_client.v2.model.create_ruleset_request_data import CreateRulesetRequestData +from datadog_api_client.v2.model.create_ruleset_request_data_attributes import CreateRulesetRequestDataAttributes +from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items import CreateRulesetRequestDataAttributesRulesItems +from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query import CreateRulesetRequestDataAttributesRulesItemsQuery +from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query_addition import CreateRulesetRequestDataAttributesRulesItemsQueryAddition +from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_reference_table import CreateRulesetRequestDataAttributesRulesItemsReferenceTable +from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems +from datadog_api_client.v2.model.create_ruleset_request_data_type import CreateRulesetRequestDataType +from datadog_api_client.v2.model.create_service_now_ticket_request_array import CreateServiceNowTicketRequestArray +from datadog_api_client.v2.model.create_service_now_ticket_request_data import CreateServiceNowTicketRequestData +from datadog_api_client.v2.model.create_service_now_ticket_request_data_attributes import CreateServiceNowTicketRequestDataAttributes +from datadog_api_client.v2.model.create_service_now_ticket_request_data_relationships import CreateServiceNowTicketRequestDataRelationships +from datadog_api_client.v2.model.create_snapshot_additional_config import CreateSnapshotAdditionalConfig +from datadog_api_client.v2.model.create_snapshot_data_attributes_request import CreateSnapshotDataAttributesRequest +from datadog_api_client.v2.model.create_snapshot_data_attributes_response import CreateSnapshotDataAttributesResponse +from datadog_api_client.v2.model.create_snapshot_data_request import CreateSnapshotDataRequest +from datadog_api_client.v2.model.create_snapshot_data_response import CreateSnapshotDataResponse +from datadog_api_client.v2.model.create_snapshot_request import CreateSnapshotRequest +from datadog_api_client.v2.model.create_snapshot_response import CreateSnapshotResponse +from datadog_api_client.v2.model.create_snapshot_ttl import CreateSnapshotTTL +from datadog_api_client.v2.model.create_snapshot_template_variable import CreateSnapshotTemplateVariable +from datadog_api_client.v2.model.create_snapshot_timeseries_legend_type import CreateSnapshotTimeseriesLegendType +from datadog_api_client.v2.model.create_snapshot_type import CreateSnapshotType +from datadog_api_client.v2.model.create_status_page_request import CreateStatusPageRequest +from datadog_api_client.v2.model.create_status_page_request_data import CreateStatusPageRequestData +from datadog_api_client.v2.model.create_status_page_request_data_attributes import CreateStatusPageRequestDataAttributes +from datadog_api_client.v2.model.create_status_page_request_data_attributes_components_items import CreateStatusPageRequestDataAttributesComponentsItems +from datadog_api_client.v2.model.create_status_page_request_data_attributes_components_items_components_items import CreateStatusPageRequestDataAttributesComponentsItemsComponentsItems +from datadog_api_client.v2.model.create_status_page_request_data_attributes_type import CreateStatusPageRequestDataAttributesType +from datadog_api_client.v2.model.create_status_page_request_data_attributes_visualization_type import CreateStatusPageRequestDataAttributesVisualizationType +from datadog_api_client.v2.model.create_table_request import CreateTableRequest +from datadog_api_client.v2.model.create_table_request_data import CreateTableRequestData +from datadog_api_client.v2.model.create_table_request_data_attributes import CreateTableRequestDataAttributes +from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata import CreateTableRequestDataAttributesFileMetadata +from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_cloud_storage import CreateTableRequestDataAttributesFileMetadataCloudStorage +from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_local_file import CreateTableRequestDataAttributesFileMetadataLocalFile +from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetails +from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail +from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail +from datadog_api_client.v2.model.create_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail import CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail +from datadog_api_client.v2.model.create_table_request_data_attributes_schema import CreateTableRequestDataAttributesSchema +from datadog_api_client.v2.model.create_table_request_data_attributes_schema_fields_items import CreateTableRequestDataAttributesSchemaFieldsItems +from datadog_api_client.v2.model.create_table_request_data_type import CreateTableRequestDataType +from datadog_api_client.v2.model.create_tenancy_config_data import CreateTenancyConfigData +from datadog_api_client.v2.model.create_tenancy_config_data_attributes import CreateTenancyConfigDataAttributes +from datadog_api_client.v2.model.create_tenancy_config_data_attributes_auth_credentials import CreateTenancyConfigDataAttributesAuthCredentials +from datadog_api_client.v2.model.create_tenancy_config_data_attributes_logs_config import CreateTenancyConfigDataAttributesLogsConfig +from datadog_api_client.v2.model.create_tenancy_config_data_attributes_metrics_config import CreateTenancyConfigDataAttributesMetricsConfig +from datadog_api_client.v2.model.create_tenancy_config_data_attributes_regions_config import CreateTenancyConfigDataAttributesRegionsConfig +from datadog_api_client.v2.model.create_tenancy_config_request import CreateTenancyConfigRequest +from datadog_api_client.v2.model.create_upload_request import CreateUploadRequest +from datadog_api_client.v2.model.create_upload_request_data import CreateUploadRequestData +from datadog_api_client.v2.model.create_upload_request_data_attributes import CreateUploadRequestDataAttributes +from datadog_api_client.v2.model.create_upload_request_data_type import CreateUploadRequestDataType +from datadog_api_client.v2.model.create_upload_response import CreateUploadResponse +from datadog_api_client.v2.model.create_upload_response_data import CreateUploadResponseData +from datadog_api_client.v2.model.create_upload_response_data_attributes import CreateUploadResponseDataAttributes +from datadog_api_client.v2.model.create_upload_response_data_type import CreateUploadResponseDataType +from datadog_api_client.v2.model.create_user_notification_channel_request import CreateUserNotificationChannelRequest +from datadog_api_client.v2.model.create_variant import CreateVariant +from datadog_api_client.v2.model.create_workflow_request import CreateWorkflowRequest +from datadog_api_client.v2.model.create_workflow_response import CreateWorkflowResponse +from datadog_api_client.v2.model.creator import Creator +from datadog_api_client.v2.model.csm_agent_data import CsmAgentData +from datadog_api_client.v2.model.csm_agentless_host_attributes import CsmAgentlessHostAttributes +from datadog_api_client.v2.model.csm_agentless_host_data import CsmAgentlessHostData +from datadog_api_client.v2.model.csm_agentless_host_facet_attributes import CsmAgentlessHostFacetAttributes +from datadog_api_client.v2.model.csm_agentless_host_facet_data import CsmAgentlessHostFacetData +from datadog_api_client.v2.model.csm_agentless_host_facet_type import CsmAgentlessHostFacetType +from datadog_api_client.v2.model.csm_agentless_host_facets_response import CsmAgentlessHostFacetsResponse +from datadog_api_client.v2.model.csm_agentless_host_resource_type import CsmAgentlessHostResourceType +from datadog_api_client.v2.model.csm_agentless_host_type import CsmAgentlessHostType +from datadog_api_client.v2.model.csm_agentless_hosts_response import CsmAgentlessHostsResponse +from datadog_api_client.v2.model.csm_agents_attributes import CsmAgentsAttributes +from datadog_api_client.v2.model.csm_agents_response import CsmAgentsResponse +from datadog_api_client.v2.model.csm_cloud_accounts_coverage_analysis_attributes import CsmCloudAccountsCoverageAnalysisAttributes +from datadog_api_client.v2.model.csm_cloud_accounts_coverage_analysis_data import CsmCloudAccountsCoverageAnalysisData +from datadog_api_client.v2.model.csm_cloud_accounts_coverage_analysis_response import CsmCloudAccountsCoverageAnalysisResponse +from datadog_api_client.v2.model.csm_cloud_provider import CsmCloudProvider +from datadog_api_client.v2.model.csm_coverage_analysis import CsmCoverageAnalysis +from datadog_api_client.v2.model.csm_facet_info_type import CsmFacetInfoType +from datadog_api_client.v2.model.csm_host_facet_info_attributes import CsmHostFacetInfoAttributes +from datadog_api_client.v2.model.csm_host_facet_info_data import CsmHostFacetInfoData +from datadog_api_client.v2.model.csm_host_facet_info_item import CsmHostFacetInfoItem +from datadog_api_client.v2.model.csm_host_facet_info_meta import CsmHostFacetInfoMeta +from datadog_api_client.v2.model.csm_host_facet_info_response import CsmHostFacetInfoResponse +from datadog_api_client.v2.model.csm_hosts_and_containers_coverage_analysis_attributes import CsmHostsAndContainersCoverageAnalysisAttributes +from datadog_api_client.v2.model.csm_hosts_and_containers_coverage_analysis_data import CsmHostsAndContainersCoverageAnalysisData +from datadog_api_client.v2.model.csm_hosts_and_containers_coverage_analysis_response import CsmHostsAndContainersCoverageAnalysisResponse +from datadog_api_client.v2.model.csm_serverless_coverage_analysis_attributes import CsmServerlessCoverageAnalysisAttributes +from datadog_api_client.v2.model.csm_serverless_coverage_analysis_data import CsmServerlessCoverageAnalysisData +from datadog_api_client.v2.model.csm_serverless_coverage_analysis_response import CsmServerlessCoverageAnalysisResponse +from datadog_api_client.v2.model.csm_settings_meta import CsmSettingsMeta +from datadog_api_client.v2.model.csm_unified_host_attributes import CsmUnifiedHostAttributes +from datadog_api_client.v2.model.csm_unified_host_data import CsmUnifiedHostData +from datadog_api_client.v2.model.csm_unified_host_facet_data import CsmUnifiedHostFacetData +from datadog_api_client.v2.model.csm_unified_host_facet_type import CsmUnifiedHostFacetType +from datadog_api_client.v2.model.csm_unified_host_facets_response import CsmUnifiedHostFacetsResponse +from datadog_api_client.v2.model.csm_unified_host_source import CsmUnifiedHostSource +from datadog_api_client.v2.model.csm_unified_host_type import CsmUnifiedHostType +from datadog_api_client.v2.model.csm_unified_hosts_meta import CsmUnifiedHostsMeta +from datadog_api_client.v2.model.csm_unified_hosts_response import CsmUnifiedHostsResponse +from datadog_api_client.v2.model.custom_attribute_config import CustomAttributeConfig +from datadog_api_client.v2.model.custom_attribute_config_attributes_create import CustomAttributeConfigAttributesCreate +from datadog_api_client.v2.model.custom_attribute_config_create import CustomAttributeConfigCreate +from datadog_api_client.v2.model.custom_attribute_config_create_request import CustomAttributeConfigCreateRequest +from datadog_api_client.v2.model.custom_attribute_config_resource_attributes import CustomAttributeConfigResourceAttributes +from datadog_api_client.v2.model.custom_attribute_config_resource_type import CustomAttributeConfigResourceType +from datadog_api_client.v2.model.custom_attribute_config_response import CustomAttributeConfigResponse +from datadog_api_client.v2.model.custom_attribute_config_update import CustomAttributeConfigUpdate +from datadog_api_client.v2.model.custom_attribute_config_update_attributes import CustomAttributeConfigUpdateAttributes +from datadog_api_client.v2.model.custom_attribute_config_update_request import CustomAttributeConfigUpdateRequest +from datadog_api_client.v2.model.custom_attribute_configs_response import CustomAttributeConfigsResponse +from datadog_api_client.v2.model.custom_attribute_select_option import CustomAttributeSelectOption +from datadog_api_client.v2.model.custom_attribute_type import CustomAttributeType +from datadog_api_client.v2.model.custom_attribute_type_data import CustomAttributeTypeData +from datadog_api_client.v2.model.custom_attribute_value import CustomAttributeValue +from datadog_api_client.v2.model.custom_attribute_values_union import CustomAttributeValuesUnion +from datadog_api_client.v2.model.custom_connection import CustomConnection +from datadog_api_client.v2.model.custom_connection_attributes import CustomConnectionAttributes +from datadog_api_client.v2.model.custom_connection_attributes_on_prem_runner import CustomConnectionAttributesOnPremRunner +from datadog_api_client.v2.model.custom_connection_type import CustomConnectionType +from datadog_api_client.v2.model.custom_cost_get_response_meta import CustomCostGetResponseMeta +from datadog_api_client.v2.model.custom_cost_list_response_meta import CustomCostListResponseMeta +from datadog_api_client.v2.model.custom_cost_upload_response_meta import CustomCostUploadResponseMeta +from datadog_api_client.v2.model.custom_costs_file_get_response import CustomCostsFileGetResponse +from datadog_api_client.v2.model.custom_costs_file_line_item import CustomCostsFileLineItem +from datadog_api_client.v2.model.custom_costs_file_list_response import CustomCostsFileListResponse +from datadog_api_client.v2.model.custom_costs_file_metadata import CustomCostsFileMetadata +from datadog_api_client.v2.model.custom_costs_file_metadata_high_level import CustomCostsFileMetadataHighLevel +from datadog_api_client.v2.model.custom_costs_file_metadata_with_content import CustomCostsFileMetadataWithContent +from datadog_api_client.v2.model.custom_costs_file_metadata_with_content_high_level import CustomCostsFileMetadataWithContentHighLevel +from datadog_api_client.v2.model.custom_costs_file_upload_response import CustomCostsFileUploadResponse +from datadog_api_client.v2.model.custom_costs_file_usage_charge_period import CustomCostsFileUsageChargePeriod +from datadog_api_client.v2.model.custom_costs_user import CustomCostsUser +from datadog_api_client.v2.model.custom_destination_attribute_tags_restriction_list_type import CustomDestinationAttributeTagsRestrictionListType +from datadog_api_client.v2.model.custom_destination_create_request import CustomDestinationCreateRequest +from datadog_api_client.v2.model.custom_destination_create_request_attributes import CustomDestinationCreateRequestAttributes +from datadog_api_client.v2.model.custom_destination_create_request_definition import CustomDestinationCreateRequestDefinition +from datadog_api_client.v2.model.custom_destination_elasticsearch_destination_auth import CustomDestinationElasticsearchDestinationAuth +from datadog_api_client.v2.model.custom_destination_forward_destination import CustomDestinationForwardDestination +from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch import CustomDestinationForwardDestinationElasticsearch +from datadog_api_client.v2.model.custom_destination_forward_destination_elasticsearch_type import CustomDestinationForwardDestinationElasticsearchType +from datadog_api_client.v2.model.custom_destination_forward_destination_http import CustomDestinationForwardDestinationHttp +from datadog_api_client.v2.model.custom_destination_forward_destination_http_type import CustomDestinationForwardDestinationHttpType +from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel import CustomDestinationForwardDestinationMicrosoftSentinel +from datadog_api_client.v2.model.custom_destination_forward_destination_microsoft_sentinel_type import CustomDestinationForwardDestinationMicrosoftSentinelType +from datadog_api_client.v2.model.custom_destination_forward_destination_splunk import CustomDestinationForwardDestinationSplunk +from datadog_api_client.v2.model.custom_destination_forward_destination_splunk_type import CustomDestinationForwardDestinationSplunkType +from datadog_api_client.v2.model.custom_destination_http_destination_auth import CustomDestinationHttpDestinationAuth +from datadog_api_client.v2.model.custom_destination_http_destination_auth_basic import CustomDestinationHttpDestinationAuthBasic +from datadog_api_client.v2.model.custom_destination_http_destination_auth_basic_type import CustomDestinationHttpDestinationAuthBasicType +from datadog_api_client.v2.model.custom_destination_http_destination_auth_custom_header import CustomDestinationHttpDestinationAuthCustomHeader +from datadog_api_client.v2.model.custom_destination_http_destination_auth_custom_header_type import CustomDestinationHttpDestinationAuthCustomHeaderType +from datadog_api_client.v2.model.custom_destination_response import CustomDestinationResponse +from datadog_api_client.v2.model.custom_destination_response_attributes import CustomDestinationResponseAttributes +from datadog_api_client.v2.model.custom_destination_response_definition import CustomDestinationResponseDefinition +from datadog_api_client.v2.model.custom_destination_response_elasticsearch_destination_auth import CustomDestinationResponseElasticsearchDestinationAuth +from datadog_api_client.v2.model.custom_destination_response_forward_destination import CustomDestinationResponseForwardDestination +from datadog_api_client.v2.model.custom_destination_response_forward_destination_elasticsearch import CustomDestinationResponseForwardDestinationElasticsearch +from datadog_api_client.v2.model.custom_destination_response_forward_destination_elasticsearch_type import CustomDestinationResponseForwardDestinationElasticsearchType +from datadog_api_client.v2.model.custom_destination_response_forward_destination_http import CustomDestinationResponseForwardDestinationHttp +from datadog_api_client.v2.model.custom_destination_response_forward_destination_http_type import CustomDestinationResponseForwardDestinationHttpType +from datadog_api_client.v2.model.custom_destination_response_forward_destination_microsoft_sentinel import CustomDestinationResponseForwardDestinationMicrosoftSentinel +from datadog_api_client.v2.model.custom_destination_response_forward_destination_microsoft_sentinel_type import CustomDestinationResponseForwardDestinationMicrosoftSentinelType +from datadog_api_client.v2.model.custom_destination_response_forward_destination_splunk import CustomDestinationResponseForwardDestinationSplunk +from datadog_api_client.v2.model.custom_destination_response_forward_destination_splunk_type import CustomDestinationResponseForwardDestinationSplunkType +from datadog_api_client.v2.model.custom_destination_response_http_destination_auth import CustomDestinationResponseHttpDestinationAuth +from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_basic import CustomDestinationResponseHttpDestinationAuthBasic +from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_basic_type import CustomDestinationResponseHttpDestinationAuthBasicType +from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_custom_header import CustomDestinationResponseHttpDestinationAuthCustomHeader +from datadog_api_client.v2.model.custom_destination_response_http_destination_auth_custom_header_type import CustomDestinationResponseHttpDestinationAuthCustomHeaderType +from datadog_api_client.v2.model.custom_destination_type import CustomDestinationType +from datadog_api_client.v2.model.custom_destination_update_request import CustomDestinationUpdateRequest +from datadog_api_client.v2.model.custom_destination_update_request_attributes import CustomDestinationUpdateRequestAttributes +from datadog_api_client.v2.model.custom_destination_update_request_definition import CustomDestinationUpdateRequestDefinition +from datadog_api_client.v2.model.custom_destinations_response import CustomDestinationsResponse +from datadog_api_client.v2.model.custom_forecast_entry import CustomForecastEntry +from datadog_api_client.v2.model.custom_forecast_entry_tag_filter import CustomForecastEntryTagFilter +from datadog_api_client.v2.model.custom_forecast_response import CustomForecastResponse +from datadog_api_client.v2.model.custom_forecast_response_data import CustomForecastResponseData +from datadog_api_client.v2.model.custom_forecast_response_data_attributes import CustomForecastResponseDataAttributes +from datadog_api_client.v2.model.custom_forecast_type import CustomForecastType +from datadog_api_client.v2.model.custom_forecast_upsert_request import CustomForecastUpsertRequest +from datadog_api_client.v2.model.custom_forecast_upsert_request_data import CustomForecastUpsertRequestData +from datadog_api_client.v2.model.custom_forecast_upsert_request_data_attributes import CustomForecastUpsertRequestDataAttributes +from datadog_api_client.v2.model.custom_framework_control import CustomFrameworkControl +from datadog_api_client.v2.model.custom_framework_data import CustomFrameworkData +from datadog_api_client.v2.model.custom_framework_data_attributes import CustomFrameworkDataAttributes +from datadog_api_client.v2.model.custom_framework_data_handle_and_version import CustomFrameworkDataHandleAndVersion +from datadog_api_client.v2.model.custom_framework_metadata import CustomFrameworkMetadata +from datadog_api_client.v2.model.custom_framework_requirement import CustomFrameworkRequirement +from datadog_api_client.v2.model.custom_framework_type import CustomFrameworkType +from datadog_api_client.v2.model.custom_framework_without_requirements import CustomFrameworkWithoutRequirements +from datadog_api_client.v2.model.custom_rule import CustomRule +from datadog_api_client.v2.model.custom_rule_data_type import CustomRuleDataType +from datadog_api_client.v2.model.custom_rule_request import CustomRuleRequest +from datadog_api_client.v2.model.custom_rule_request_data import CustomRuleRequestData +from datadog_api_client.v2.model.custom_rule_request_data_attributes import CustomRuleRequestDataAttributes +from datadog_api_client.v2.model.custom_rule_response import CustomRuleResponse +from datadog_api_client.v2.model.custom_rule_response_data import CustomRuleResponseData +from datadog_api_client.v2.model.custom_rule_revision import CustomRuleRevision +from datadog_api_client.v2.model.custom_rule_revision_attributes import CustomRuleRevisionAttributes +from datadog_api_client.v2.model.custom_rule_revision_attributes_category import CustomRuleRevisionAttributesCategory +from datadog_api_client.v2.model.custom_rule_revision_attributes_severity import CustomRuleRevisionAttributesSeverity +from datadog_api_client.v2.model.custom_rule_revision_data_type import CustomRuleRevisionDataType +from datadog_api_client.v2.model.custom_rule_revision_input_attributes import CustomRuleRevisionInputAttributes +from datadog_api_client.v2.model.custom_rule_revision_request import CustomRuleRevisionRequest +from datadog_api_client.v2.model.custom_rule_revision_request_data import CustomRuleRevisionRequestData +from datadog_api_client.v2.model.custom_rule_revision_response import CustomRuleRevisionResponse +from datadog_api_client.v2.model.custom_rule_revision_test import CustomRuleRevisionTest +from datadog_api_client.v2.model.custom_rule_revisions_response import CustomRuleRevisionsResponse +from datadog_api_client.v2.model.custom_ruleset import CustomRuleset +from datadog_api_client.v2.model.custom_ruleset_attributes import CustomRulesetAttributes +from datadog_api_client.v2.model.custom_ruleset_data_type import CustomRulesetDataType +from datadog_api_client.v2.model.custom_ruleset_list_response import CustomRulesetListResponse +from datadog_api_client.v2.model.custom_ruleset_request import CustomRulesetRequest +from datadog_api_client.v2.model.custom_ruleset_request_data import CustomRulesetRequestData +from datadog_api_client.v2.model.custom_ruleset_request_data_attributes import CustomRulesetRequestDataAttributes +from datadog_api_client.v2.model.custom_ruleset_response import CustomRulesetResponse +from datadog_api_client.v2.model.customer_org_disable_request import CustomerOrgDisableRequest +from datadog_api_client.v2.model.customer_org_disable_request_attributes import CustomerOrgDisableRequestAttributes +from datadog_api_client.v2.model.customer_org_disable_request_data import CustomerOrgDisableRequestData +from datadog_api_client.v2.model.customer_org_disable_response import CustomerOrgDisableResponse +from datadog_api_client.v2.model.customer_org_disable_response_attributes import CustomerOrgDisableResponseAttributes +from datadog_api_client.v2.model.customer_org_disable_response_data import CustomerOrgDisableResponseData +from datadog_api_client.v2.model.customer_org_disable_response_type import CustomerOrgDisableResponseType +from datadog_api_client.v2.model.customer_org_disable_status import CustomerOrgDisableStatus +from datadog_api_client.v2.model.customer_org_disable_type import CustomerOrgDisableType +from datadog_api_client.v2.model.cyclone_dx_bom import CycloneDXBom +from datadog_api_client.v2.model.cyclone_dx_component import CycloneDXComponent +from datadog_api_client.v2.model.cyclone_dx_component_type import CycloneDXComponentType +from datadog_api_client.v2.model.cyclone_dx_metadata import CycloneDXMetadata +from datadog_api_client.v2.model.cyclone_dx_metadata_component import CycloneDXMetadataComponent +from datadog_api_client.v2.model.cyclone_dx_metadata_tools import CycloneDXMetadataTools +from datadog_api_client.v2.model.cyclone_dx_tool_component import CycloneDXToolComponent +from datadog_api_client.v2.model.cyclone_dx_vulnerability import CycloneDXVulnerability +from datadog_api_client.v2.model.cyclone_dx_vulnerability_advisory import CycloneDXVulnerabilityAdvisory +from datadog_api_client.v2.model.cyclone_dx_vulnerability_affects import CycloneDXVulnerabilityAffects +from datadog_api_client.v2.model.cyclone_dx_vulnerability_analysis import CycloneDXVulnerabilityAnalysis +from datadog_api_client.v2.model.cyclone_dx_vulnerability_rating import CycloneDXVulnerabilityRating +from datadog_api_client.v2.model.cyclone_dx_vulnerability_reference import CycloneDXVulnerabilityReference +from datadog_api_client.v2.model.cyclone_dx_vulnerability_reference_source import CycloneDXVulnerabilityReferenceSource +from datadog_api_client.v2.model.dora_deployment_fetch_response import DORADeploymentFetchResponse +from datadog_api_client.v2.model.dora_deployment_object import DORADeploymentObject +from datadog_api_client.v2.model.dora_deployment_object_attributes import DORADeploymentObjectAttributes +from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation import DORADeploymentPatchByVersionRemediation +from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation_by_id import DORADeploymentPatchByVersionRemediationByID +from datadog_api_client.v2.model.dora_deployment_patch_by_version_remediation_by_version import DORADeploymentPatchByVersionRemediationByVersion +from datadog_api_client.v2.model.dora_deployment_patch_by_version_request import DORADeploymentPatchByVersionRequest +from datadog_api_client.v2.model.dora_deployment_patch_by_version_request_attributes import DORADeploymentPatchByVersionRequestAttributes +from datadog_api_client.v2.model.dora_deployment_patch_by_version_request_data import DORADeploymentPatchByVersionRequestData +from datadog_api_client.v2.model.dora_deployment_patch_remediation import DORADeploymentPatchRemediation +from datadog_api_client.v2.model.dora_deployment_patch_remediation_type import DORADeploymentPatchRemediationType +from datadog_api_client.v2.model.dora_deployment_patch_request import DORADeploymentPatchRequest +from datadog_api_client.v2.model.dora_deployment_patch_request_attributes import DORADeploymentPatchRequestAttributes +from datadog_api_client.v2.model.dora_deployment_patch_request_data import DORADeploymentPatchRequestData +from datadog_api_client.v2.model.dora_deployment_patch_request_data_type import DORADeploymentPatchRequestDataType +from datadog_api_client.v2.model.dora_deployment_request import DORADeploymentRequest +from datadog_api_client.v2.model.dora_deployment_request_attributes import DORADeploymentRequestAttributes +from datadog_api_client.v2.model.dora_deployment_request_data import DORADeploymentRequestData +from datadog_api_client.v2.model.dora_deployment_response import DORADeploymentResponse +from datadog_api_client.v2.model.dora_deployment_response_data import DORADeploymentResponseData +from datadog_api_client.v2.model.dora_deployment_type import DORADeploymentType +from datadog_api_client.v2.model.dora_deployments_list_response import DORADeploymentsListResponse +from datadog_api_client.v2.model.dora_failure_fetch_response import DORAFailureFetchResponse +from datadog_api_client.v2.model.dora_failure_request import DORAFailureRequest +from datadog_api_client.v2.model.dora_failure_request_attributes import DORAFailureRequestAttributes +from datadog_api_client.v2.model.dora_failure_request_data import DORAFailureRequestData +from datadog_api_client.v2.model.dora_failure_response import DORAFailureResponse +from datadog_api_client.v2.model.dora_failure_response_data import DORAFailureResponseData +from datadog_api_client.v2.model.dora_failure_type import DORAFailureType +from datadog_api_client.v2.model.dora_failures_list_response import DORAFailuresListResponse +from datadog_api_client.v2.model.dora_git_info import DORAGitInfo +from datadog_api_client.v2.model.dora_git_info_response import DORAGitInfoResponse +from datadog_api_client.v2.model.dora_incident_object import DORAIncidentObject +from datadog_api_client.v2.model.dora_incident_object_attributes import DORAIncidentObjectAttributes +from datadog_api_client.v2.model.dora_list_deployments_request import DORAListDeploymentsRequest +from datadog_api_client.v2.model.dora_list_deployments_request_attributes import DORAListDeploymentsRequestAttributes +from datadog_api_client.v2.model.dora_list_deployments_request_data import DORAListDeploymentsRequestData +from datadog_api_client.v2.model.dora_list_deployments_request_data_type import DORAListDeploymentsRequestDataType +from datadog_api_client.v2.model.dora_list_failures_request import DORAListFailuresRequest +from datadog_api_client.v2.model.dora_list_failures_request_attributes import DORAListFailuresRequestAttributes +from datadog_api_client.v2.model.dora_list_failures_request_data import DORAListFailuresRequestData +from datadog_api_client.v2.model.dora_list_failures_request_data_type import DORAListFailuresRequestDataType +from datadog_api_client.v2.model.dashboard_list_add_items_request import DashboardListAddItemsRequest +from datadog_api_client.v2.model.dashboard_list_add_items_response import DashboardListAddItemsResponse +from datadog_api_client.v2.model.dashboard_list_delete_items_request import DashboardListDeleteItemsRequest +from datadog_api_client.v2.model.dashboard_list_delete_items_response import DashboardListDeleteItemsResponse +from datadog_api_client.v2.model.dashboard_list_item import DashboardListItem +from datadog_api_client.v2.model.dashboard_list_item_request import DashboardListItemRequest +from datadog_api_client.v2.model.dashboard_list_item_response import DashboardListItemResponse +from datadog_api_client.v2.model.dashboard_list_items import DashboardListItems +from datadog_api_client.v2.model.dashboard_list_update_items_request import DashboardListUpdateItemsRequest +from datadog_api_client.v2.model.dashboard_list_update_items_response import DashboardListUpdateItemsResponse +from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper +from datadog_api_client.v2.model.dashboard_type import DashboardType +from datadog_api_client.v2.model.dashboard_usage import DashboardUsage +from datadog_api_client.v2.model.dashboard_usage_attributes import DashboardUsageAttributes +from datadog_api_client.v2.model.dashboard_usage_response import DashboardUsageResponse +from datadog_api_client.v2.model.dashboard_usage_type import DashboardUsageType +from datadog_api_client.v2.model.dashboard_usage_user import DashboardUsageUser +from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists +from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping +from datadog_api_client.v2.model.data_deletion_response_item import DataDeletionResponseItem +from datadog_api_client.v2.model.data_deletion_response_item_attributes import DataDeletionResponseItemAttributes +from datadog_api_client.v2.model.data_deletion_response_meta import DataDeletionResponseMeta +from datadog_api_client.v2.model.data_export_config import DataExportConfig +from datadog_api_client.v2.model.data_observability_monitor_run_status import DataObservabilityMonitorRunStatus +from datadog_api_client.v2.model.data_observability_monitor_run_type import DataObservabilityMonitorRunType +from datadog_api_client.v2.model.data_relationships_teams import DataRelationshipsTeams +from datadog_api_client.v2.model.data_relationships_teams_data_items import DataRelationshipsTeamsDataItems +from datadog_api_client.v2.model.data_relationships_teams_data_items_type import DataRelationshipsTeamsDataItemsType +from datadog_api_client.v2.model.data_scalar_column import DataScalarColumn +from datadog_api_client.v2.model.data_transform import DataTransform +from datadog_api_client.v2.model.data_transform_properties import DataTransformProperties +from datadog_api_client.v2.model.data_transform_type import DataTransformType +from datadog_api_client.v2.model.database_monitoring_trigger_wrapper import DatabaseMonitoringTriggerWrapper +from datadog_api_client.v2.model.datadog_api_key import DatadogAPIKey +from datadog_api_client.v2.model.datadog_api_key_type import DatadogAPIKeyType +from datadog_api_client.v2.model.datadog_api_key_update import DatadogAPIKeyUpdate +from datadog_api_client.v2.model.datadog_credentials import DatadogCredentials +from datadog_api_client.v2.model.datadog_credentials_update import DatadogCredentialsUpdate +from datadog_api_client.v2.model.datadog_integration import DatadogIntegration +from datadog_api_client.v2.model.datadog_integration_type import DatadogIntegrationType +from datadog_api_client.v2.model.datadog_integration_update import DatadogIntegrationUpdate +from datadog_api_client.v2.model.dataset_attributes_request import DatasetAttributesRequest +from datadog_api_client.v2.model.dataset_attributes_response import DatasetAttributesResponse +from datadog_api_client.v2.model.dataset_create_request import DatasetCreateRequest +from datadog_api_client.v2.model.dataset_report_schedule_list_response import DatasetReportScheduleListResponse +from datadog_api_client.v2.model.dataset_report_schedule_resource_type import DatasetReportScheduleResourceType +from datadog_api_client.v2.model.dataset_report_schedule_response_attributes import DatasetReportScheduleResponseAttributes +from datadog_api_client.v2.model.dataset_report_schedule_response_data import DatasetReportScheduleResponseData +from datadog_api_client.v2.model.dataset_request import DatasetRequest +from datadog_api_client.v2.model.dataset_response import DatasetResponse +from datadog_api_client.v2.model.dataset_response_multi import DatasetResponseMulti +from datadog_api_client.v2.model.dataset_response_single import DatasetResponseSingle +from datadog_api_client.v2.model.dataset_type import DatasetType +from datadog_api_client.v2.model.dataset_update_request import DatasetUpdateRequest +from datadog_api_client.v2.model.datastore import Datastore +from datadog_api_client.v2.model.datastore_array import DatastoreArray +from datadog_api_client.v2.model.datastore_data import DatastoreData +from datadog_api_client.v2.model.datastore_data_attributes import DatastoreDataAttributes +from datadog_api_client.v2.model.datastore_data_type import DatastoreDataType +from datadog_api_client.v2.model.datastore_item_conflict_mode import DatastoreItemConflictMode +from datadog_api_client.v2.model.datastore_items_data_type import DatastoreItemsDataType +from datadog_api_client.v2.model.datastore_primary_key_generation_strategy import DatastorePrimaryKeyGenerationStrategy +from datadog_api_client.v2.model.datastore_trigger import DatastoreTrigger +from datadog_api_client.v2.model.datastore_trigger_wrapper import DatastoreTriggerWrapper +from datadog_api_client.v2.model.ddsql_tabular_query_column import DdsqlTabularQueryColumn +from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request import DdsqlTabularQueryFetchRequest +from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request_attributes import DdsqlTabularQueryFetchRequestAttributes +from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request_data import DdsqlTabularQueryFetchRequestData +from datadog_api_client.v2.model.ddsql_tabular_query_fetch_request_type import DdsqlTabularQueryFetchRequestType +from datadog_api_client.v2.model.ddsql_tabular_query_request import DdsqlTabularQueryRequest +from datadog_api_client.v2.model.ddsql_tabular_query_request_attributes import DdsqlTabularQueryRequestAttributes +from datadog_api_client.v2.model.ddsql_tabular_query_request_data import DdsqlTabularQueryRequestData +from datadog_api_client.v2.model.ddsql_tabular_query_request_type import DdsqlTabularQueryRequestType +from datadog_api_client.v2.model.ddsql_tabular_query_response import DdsqlTabularQueryResponse +from datadog_api_client.v2.model.ddsql_tabular_query_response_attributes import DdsqlTabularQueryResponseAttributes +from datadog_api_client.v2.model.ddsql_tabular_query_response_data import DdsqlTabularQueryResponseData +from datadog_api_client.v2.model.ddsql_tabular_query_response_meta import DdsqlTabularQueryResponseMeta +from datadog_api_client.v2.model.ddsql_tabular_query_response_type import DdsqlTabularQueryResponseType +from datadog_api_client.v2.model.ddsql_tabular_query_state import DdsqlTabularQueryState +from datadog_api_client.v2.model.ddsql_tabular_query_time_window import DdsqlTabularQueryTimeWindow +from datadog_api_client.v2.model.default_rulesets_per_language_data import DefaultRulesetsPerLanguageData +from datadog_api_client.v2.model.default_rulesets_per_language_data_attributes import DefaultRulesetsPerLanguageDataAttributes +from datadog_api_client.v2.model.default_rulesets_per_language_data_type import DefaultRulesetsPerLanguageDataType +from datadog_api_client.v2.model.default_rulesets_per_language_response import DefaultRulesetsPerLanguageResponse +from datadog_api_client.v2.model.degradation import Degradation +from datadog_api_client.v2.model.degradation_array import DegradationArray +from datadog_api_client.v2.model.degradation_data import DegradationData +from datadog_api_client.v2.model.degradation_data_attributes import DegradationDataAttributes +from datadog_api_client.v2.model.degradation_data_attributes_components_affected_items import DegradationDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.degradation_data_attributes_source import DegradationDataAttributesSource +from datadog_api_client.v2.model.degradation_data_attributes_source_type import DegradationDataAttributesSourceType +from datadog_api_client.v2.model.degradation_data_attributes_updates_items import DegradationDataAttributesUpdatesItems +from datadog_api_client.v2.model.degradation_data_attributes_updates_items_components_affected_items import DegradationDataAttributesUpdatesItemsComponentsAffectedItems +from datadog_api_client.v2.model.degradation_data_relationships import DegradationDataRelationships +from datadog_api_client.v2.model.degradation_data_relationships_created_by_user import DegradationDataRelationshipsCreatedByUser +from datadog_api_client.v2.model.degradation_data_relationships_created_by_user_data import DegradationDataRelationshipsCreatedByUserData +from datadog_api_client.v2.model.degradation_data_relationships_last_modified_by_user import DegradationDataRelationshipsLastModifiedByUser +from datadog_api_client.v2.model.degradation_data_relationships_last_modified_by_user_data import DegradationDataRelationshipsLastModifiedByUserData +from datadog_api_client.v2.model.degradation_data_relationships_status_page import DegradationDataRelationshipsStatusPage +from datadog_api_client.v2.model.degradation_data_relationships_status_page_data import DegradationDataRelationshipsStatusPageData +from datadog_api_client.v2.model.degradation_data_relationships_template import DegradationDataRelationshipsTemplate +from datadog_api_client.v2.model.degradation_data_relationships_template_data import DegradationDataRelationshipsTemplateData +from datadog_api_client.v2.model.degradation_included import DegradationIncluded +from datadog_api_client.v2.model.degradation_request_meta import DegradationRequestMeta +from datadog_api_client.v2.model.degradation_template import DegradationTemplate +from datadog_api_client.v2.model.degradation_template_array import DegradationTemplateArray +from datadog_api_client.v2.model.degradation_template_data import DegradationTemplateData +from datadog_api_client.v2.model.degradation_template_data_attributes import DegradationTemplateDataAttributes +from datadog_api_client.v2.model.degradation_template_data_attributes_components_affected_items import DegradationTemplateDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.degradation_template_data_attributes_updates_items import DegradationTemplateDataAttributesUpdatesItems +from datadog_api_client.v2.model.degradation_template_data_relationships import DegradationTemplateDataRelationships +from datadog_api_client.v2.model.degradation_template_data_relationships_created_by_user import DegradationTemplateDataRelationshipsCreatedByUser +from datadog_api_client.v2.model.degradation_template_data_relationships_created_by_user_data import DegradationTemplateDataRelationshipsCreatedByUserData +from datadog_api_client.v2.model.degradation_template_data_relationships_last_modified_by_user import DegradationTemplateDataRelationshipsLastModifiedByUser +from datadog_api_client.v2.model.degradation_template_data_relationships_last_modified_by_user_data import DegradationTemplateDataRelationshipsLastModifiedByUserData +from datadog_api_client.v2.model.degradation_template_data_relationships_status_page import DegradationTemplateDataRelationshipsStatusPage +from datadog_api_client.v2.model.degradation_template_data_relationships_status_page_data import DegradationTemplateDataRelationshipsStatusPageData +from datadog_api_client.v2.model.degradation_update import DegradationUpdate +from datadog_api_client.v2.model.degradation_update_data import DegradationUpdateData +from datadog_api_client.v2.model.degradation_update_data_attributes import DegradationUpdateDataAttributes +from datadog_api_client.v2.model.degradation_update_data_attributes_components_affected_items import DegradationUpdateDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.degradation_update_data_relationships import DegradationUpdateDataRelationships +from datadog_api_client.v2.model.degradation_update_data_relationships_degradation import DegradationUpdateDataRelationshipsDegradation +from datadog_api_client.v2.model.degradation_update_data_relationships_degradation_data import DegradationUpdateDataRelationshipsDegradationData +from datadog_api_client.v2.model.degradation_update_data_relationships_status_page import DegradationUpdateDataRelationshipsStatusPage +from datadog_api_client.v2.model.degradation_update_data_relationships_status_page_data import DegradationUpdateDataRelationshipsStatusPageData +from datadog_api_client.v2.model.degradation_update_data_relationships_user import DegradationUpdateDataRelationshipsUser +from datadog_api_client.v2.model.degradation_update_data_relationships_user_data import DegradationUpdateDataRelationshipsUserData +from datadog_api_client.v2.model.degradation_update_included import DegradationUpdateIncluded +from datadog_api_client.v2.model.delete_app_response import DeleteAppResponse +from datadog_api_client.v2.model.delete_app_response_data import DeleteAppResponseData +from datadog_api_client.v2.model.delete_apps_datastore_item_request import DeleteAppsDatastoreItemRequest +from datadog_api_client.v2.model.delete_apps_datastore_item_request_data import DeleteAppsDatastoreItemRequestData +from datadog_api_client.v2.model.delete_apps_datastore_item_request_data_attributes import DeleteAppsDatastoreItemRequestDataAttributes +from datadog_api_client.v2.model.delete_apps_datastore_item_response import DeleteAppsDatastoreItemResponse +from datadog_api_client.v2.model.delete_apps_datastore_item_response_array import DeleteAppsDatastoreItemResponseArray +from datadog_api_client.v2.model.delete_apps_datastore_item_response_data import DeleteAppsDatastoreItemResponseData +from datadog_api_client.v2.model.delete_apps_request import DeleteAppsRequest +from datadog_api_client.v2.model.delete_apps_request_data_items import DeleteAppsRequestDataItems +from datadog_api_client.v2.model.delete_apps_response import DeleteAppsResponse +from datadog_api_client.v2.model.delete_apps_response_data_items import DeleteAppsResponseDataItems +from datadog_api_client.v2.model.delete_custom_framework_response import DeleteCustomFrameworkResponse +from datadog_api_client.v2.model.delete_form_data import DeleteFormData +from datadog_api_client.v2.model.delete_form_response import DeleteFormResponse +from datadog_api_client.v2.model.deleted_suite_response_data import DeletedSuiteResponseData +from datadog_api_client.v2.model.deleted_suite_response_data_attributes import DeletedSuiteResponseDataAttributes +from datadog_api_client.v2.model.deleted_suites_request_delete import DeletedSuitesRequestDelete +from datadog_api_client.v2.model.deleted_suites_request_delete_attributes import DeletedSuitesRequestDeleteAttributes +from datadog_api_client.v2.model.deleted_suites_request_delete_request import DeletedSuitesRequestDeleteRequest +from datadog_api_client.v2.model.deleted_suites_request_type import DeletedSuitesRequestType +from datadog_api_client.v2.model.deleted_suites_response import DeletedSuitesResponse +from datadog_api_client.v2.model.deleted_test_response_data import DeletedTestResponseData +from datadog_api_client.v2.model.deleted_test_response_data_attributes import DeletedTestResponseDataAttributes +from datadog_api_client.v2.model.deleted_tests_request_delete import DeletedTestsRequestDelete +from datadog_api_client.v2.model.deleted_tests_request_delete_attributes import DeletedTestsRequestDeleteAttributes +from datadog_api_client.v2.model.deleted_tests_request_delete_request import DeletedTestsRequestDeleteRequest +from datadog_api_client.v2.model.deleted_tests_request_type import DeletedTestsRequestType +from datadog_api_client.v2.model.deleted_tests_response import DeletedTestsResponse +from datadog_api_client.v2.model.deleted_tests_response_type import DeletedTestsResponseType +from datadog_api_client.v2.model.dependency_location import DependencyLocation +from datadog_api_client.v2.model.deployment import Deployment +from datadog_api_client.v2.model.deployment_attributes import DeploymentAttributes +from datadog_api_client.v2.model.deployment_gate_data_type import DeploymentGateDataType +from datadog_api_client.v2.model.deployment_gate_response import DeploymentGateResponse +from datadog_api_client.v2.model.deployment_gate_response_data import DeploymentGateResponseData +from datadog_api_client.v2.model.deployment_gate_response_data_attributes import DeploymentGateResponseDataAttributes +from datadog_api_client.v2.model.deployment_gate_response_data_attributes_created_by import DeploymentGateResponseDataAttributesCreatedBy +from datadog_api_client.v2.model.deployment_gate_response_data_attributes_updated_by import DeploymentGateResponseDataAttributesUpdatedBy +from datadog_api_client.v2.model.deployment_gate_rules_response import DeploymentGateRulesResponse +from datadog_api_client.v2.model.deployment_gates_evaluation_configuration import DeploymentGatesEvaluationConfiguration +from datadog_api_client.v2.model.deployment_gates_evaluation_request import DeploymentGatesEvaluationRequest +from datadog_api_client.v2.model.deployment_gates_evaluation_request_attributes import DeploymentGatesEvaluationRequestAttributes +from datadog_api_client.v2.model.deployment_gates_evaluation_request_data import DeploymentGatesEvaluationRequestData +from datadog_api_client.v2.model.deployment_gates_evaluation_request_data_type import DeploymentGatesEvaluationRequestDataType +from datadog_api_client.v2.model.deployment_gates_evaluation_response import DeploymentGatesEvaluationResponse +from datadog_api_client.v2.model.deployment_gates_evaluation_response_attributes import DeploymentGatesEvaluationResponseAttributes +from datadog_api_client.v2.model.deployment_gates_evaluation_response_data import DeploymentGatesEvaluationResponseData +from datadog_api_client.v2.model.deployment_gates_evaluation_response_data_type import DeploymentGatesEvaluationResponseDataType +from datadog_api_client.v2.model.deployment_gates_evaluation_result_response import DeploymentGatesEvaluationResultResponse +from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_attributes import DeploymentGatesEvaluationResultResponseAttributes +from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_attributes_gate_status import DeploymentGatesEvaluationResultResponseAttributesGateStatus +from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_data import DeploymentGatesEvaluationResultResponseData +from datadog_api_client.v2.model.deployment_gates_evaluation_result_response_data_type import DeploymentGatesEvaluationResultResponseDataType +from datadog_api_client.v2.model.deployment_gates_evaluation_rule import DeploymentGatesEvaluationRule +from datadog_api_client.v2.model.deployment_gates_fdd_rule import DeploymentGatesFDDRule +from datadog_api_client.v2.model.deployment_gates_fdd_rule_options import DeploymentGatesFDDRuleOptions +from datadog_api_client.v2.model.deployment_gates_fdd_rule_type import DeploymentGatesFDDRuleType +from datadog_api_client.v2.model.deployment_gates_list_response import DeploymentGatesListResponse +from datadog_api_client.v2.model.deployment_gates_list_response_meta import DeploymentGatesListResponseMeta +from datadog_api_client.v2.model.deployment_gates_list_response_meta_page import DeploymentGatesListResponseMetaPage +from datadog_api_client.v2.model.deployment_gates_monitor_rule import DeploymentGatesMonitorRule +from datadog_api_client.v2.model.deployment_gates_monitor_rule_options import DeploymentGatesMonitorRuleOptions +from datadog_api_client.v2.model.deployment_gates_monitor_rule_type import DeploymentGatesMonitorRuleType +from datadog_api_client.v2.model.deployment_gates_rule_response import DeploymentGatesRuleResponse +from datadog_api_client.v2.model.deployment_metadata import DeploymentMetadata +from datadog_api_client.v2.model.deployment_relationship import DeploymentRelationship +from datadog_api_client.v2.model.deployment_relationship_data import DeploymentRelationshipData +from datadog_api_client.v2.model.deployment_rule_data_type import DeploymentRuleDataType +from datadog_api_client.v2.model.deployment_rule_options_faulty_deployment_detection import DeploymentRuleOptionsFaultyDeploymentDetection +from datadog_api_client.v2.model.deployment_rule_options_monitor import DeploymentRuleOptionsMonitor +from datadog_api_client.v2.model.deployment_rule_response import DeploymentRuleResponse +from datadog_api_client.v2.model.deployment_rule_response_data import DeploymentRuleResponseData +from datadog_api_client.v2.model.deployment_rule_response_data_attributes import DeploymentRuleResponseDataAttributes +from datadog_api_client.v2.model.deployment_rule_response_data_attributes_created_by import DeploymentRuleResponseDataAttributesCreatedBy +from datadog_api_client.v2.model.deployment_rule_response_data_attributes_type import DeploymentRuleResponseDataAttributesType +from datadog_api_client.v2.model.deployment_rule_response_data_attributes_updated_by import DeploymentRuleResponseDataAttributesUpdatedBy +from datadog_api_client.v2.model.deployment_rules_options import DeploymentRulesOptions +from datadog_api_client.v2.model.detach_case_request import DetachCaseRequest +from datadog_api_client.v2.model.detach_case_request_data import DetachCaseRequestData +from datadog_api_client.v2.model.detach_case_request_data_relationships import DetachCaseRequestDataRelationships +from datadog_api_client.v2.model.detailed_finding import DetailedFinding +from datadog_api_client.v2.model.detailed_finding_attributes import DetailedFindingAttributes +from datadog_api_client.v2.model.detailed_finding_type import DetailedFindingType +from datadog_api_client.v2.model.device_attributes import DeviceAttributes +from datadog_api_client.v2.model.device_attributes_interface_statuses import DeviceAttributesInterfaceStatuses +from datadog_api_client.v2.model.devices_list_data import DevicesListData +from datadog_api_client.v2.model.dns_metric_key import DnsMetricKey +from datadog_api_client.v2.model.domain_allowlist import DomainAllowlist +from datadog_api_client.v2.model.domain_allowlist_attributes import DomainAllowlistAttributes +from datadog_api_client.v2.model.domain_allowlist_request import DomainAllowlistRequest +from datadog_api_client.v2.model.domain_allowlist_response import DomainAllowlistResponse +from datadog_api_client.v2.model.domain_allowlist_response_data import DomainAllowlistResponseData +from datadog_api_client.v2.model.domain_allowlist_response_data_attributes import DomainAllowlistResponseDataAttributes +from datadog_api_client.v2.model.domain_allowlist_type import DomainAllowlistType +from datadog_api_client.v2.model.downtime_create_request import DowntimeCreateRequest +from datadog_api_client.v2.model.downtime_create_request_attributes import DowntimeCreateRequestAttributes +from datadog_api_client.v2.model.downtime_create_request_data import DowntimeCreateRequestData +from datadog_api_client.v2.model.downtime_included_monitor_type import DowntimeIncludedMonitorType +from datadog_api_client.v2.model.downtime_meta import DowntimeMeta +from datadog_api_client.v2.model.downtime_meta_page import DowntimeMetaPage +from datadog_api_client.v2.model.downtime_monitor_identifier import DowntimeMonitorIdentifier +from datadog_api_client.v2.model.downtime_monitor_identifier_id import DowntimeMonitorIdentifierId +from datadog_api_client.v2.model.downtime_monitor_identifier_tags import DowntimeMonitorIdentifierTags +from datadog_api_client.v2.model.downtime_monitor_included_attributes import DowntimeMonitorIncludedAttributes +from datadog_api_client.v2.model.downtime_monitor_included_item import DowntimeMonitorIncludedItem +from datadog_api_client.v2.model.downtime_notify_end_state_actions import DowntimeNotifyEndStateActions +from datadog_api_client.v2.model.downtime_notify_end_state_types import DowntimeNotifyEndStateTypes +from datadog_api_client.v2.model.downtime_relationships import DowntimeRelationships +from datadog_api_client.v2.model.downtime_relationships_created_by import DowntimeRelationshipsCreatedBy +from datadog_api_client.v2.model.downtime_relationships_created_by_data import DowntimeRelationshipsCreatedByData +from datadog_api_client.v2.model.downtime_relationships_monitor import DowntimeRelationshipsMonitor +from datadog_api_client.v2.model.downtime_relationships_monitor_data import DowntimeRelationshipsMonitorData +from datadog_api_client.v2.model.downtime_resource_type import DowntimeResourceType +from datadog_api_client.v2.model.downtime_response import DowntimeResponse +from datadog_api_client.v2.model.downtime_response_attributes import DowntimeResponseAttributes +from datadog_api_client.v2.model.downtime_response_data import DowntimeResponseData +from datadog_api_client.v2.model.downtime_response_included_item import DowntimeResponseIncludedItem +from datadog_api_client.v2.model.downtime_schedule_create_request import DowntimeScheduleCreateRequest +from datadog_api_client.v2.model.downtime_schedule_current_downtime_response import DowntimeScheduleCurrentDowntimeResponse +from datadog_api_client.v2.model.downtime_schedule_one_time_create_update_request import DowntimeScheduleOneTimeCreateUpdateRequest +from datadog_api_client.v2.model.downtime_schedule_one_time_response import DowntimeScheduleOneTimeResponse +from datadog_api_client.v2.model.downtime_schedule_recurrence_create_update_request import DowntimeScheduleRecurrenceCreateUpdateRequest +from datadog_api_client.v2.model.downtime_schedule_recurrence_response import DowntimeScheduleRecurrenceResponse +from datadog_api_client.v2.model.downtime_schedule_recurrences_create_request import DowntimeScheduleRecurrencesCreateRequest +from datadog_api_client.v2.model.downtime_schedule_recurrences_response import DowntimeScheduleRecurrencesResponse +from datadog_api_client.v2.model.downtime_schedule_recurrences_update_request import DowntimeScheduleRecurrencesUpdateRequest +from datadog_api_client.v2.model.downtime_schedule_response import DowntimeScheduleResponse +from datadog_api_client.v2.model.downtime_schedule_update_request import DowntimeScheduleUpdateRequest +from datadog_api_client.v2.model.downtime_status import DowntimeStatus +from datadog_api_client.v2.model.downtime_update_request import DowntimeUpdateRequest +from datadog_api_client.v2.model.downtime_update_request_attributes import DowntimeUpdateRequestAttributes +from datadog_api_client.v2.model.downtime_update_request_data import DowntimeUpdateRequestData +from datadog_api_client.v2.model.due_date_from import DueDateFrom +from datadog_api_client.v2.model.due_date_per_severity_item import DueDatePerSeverityItem +from datadog_api_client.v2.model.due_date_rule_action import DueDateRuleAction +from datadog_api_client.v2.model.due_date_rule_attributes_create import DueDateRuleAttributesCreate +from datadog_api_client.v2.model.due_date_rule_attributes_response import DueDateRuleAttributesResponse +from datadog_api_client.v2.model.due_date_rule_create_request import DueDateRuleCreateRequest +from datadog_api_client.v2.model.due_date_rule_data_create import DueDateRuleDataCreate +from datadog_api_client.v2.model.due_date_rule_data_response import DueDateRuleDataResponse +from datadog_api_client.v2.model.due_date_rule_reorder_item import DueDateRuleReorderItem +from datadog_api_client.v2.model.due_date_rule_reorder_request import DueDateRuleReorderRequest +from datadog_api_client.v2.model.due_date_rule_response import DueDateRuleResponse +from datadog_api_client.v2.model.due_date_rule_type import DueDateRuleType +from datadog_api_client.v2.model.due_date_rule_update_request import DueDateRuleUpdateRequest +from datadog_api_client.v2.model.due_date_rules_response import DueDateRulesResponse +from datadog_api_client.v2.model.due_date_severity import DueDateSeverity +from datadog_api_client.v2.model.elf_sourcemap_attributes import ELFSourcemapAttributes +from datadog_api_client.v2.model.elf_sourcemap_data import ELFSourcemapData +from datadog_api_client.v2.model.epss import EPSS +from datadog_api_client.v2.model.entity_attributes import EntityAttributes +from datadog_api_client.v2.model.entity_context_entity import EntityContextEntity +from datadog_api_client.v2.model.entity_context_entity_attributes import EntityContextEntityAttributes +from datadog_api_client.v2.model.entity_context_page import EntityContextPage +from datadog_api_client.v2.model.entity_context_response import EntityContextResponse +from datadog_api_client.v2.model.entity_context_response_meta import EntityContextResponseMeta +from datadog_api_client.v2.model.entity_context_revision import EntityContextRevision +from datadog_api_client.v2.model.entity_context_revision_attributes import EntityContextRevisionAttributes +from datadog_api_client.v2.model.entity_data import EntityData +from datadog_api_client.v2.model.entity_integration_config_attributes import EntityIntegrationConfigAttributes +from datadog_api_client.v2.model.entity_integration_config_data import EntityIntegrationConfigData +from datadog_api_client.v2.model.entity_integration_config_payload import EntityIntegrationConfigPayload +from datadog_api_client.v2.model.entity_integration_config_request import EntityIntegrationConfigRequest +from datadog_api_client.v2.model.entity_integration_config_request_attributes import EntityIntegrationConfigRequestAttributes +from datadog_api_client.v2.model.entity_integration_config_request_data import EntityIntegrationConfigRequestData +from datadog_api_client.v2.model.entity_integration_config_request_type import EntityIntegrationConfigRequestType +from datadog_api_client.v2.model.entity_integration_config_response import EntityIntegrationConfigResponse +from datadog_api_client.v2.model.entity_integration_config_type import EntityIntegrationConfigType +from datadog_api_client.v2.model.entity_meta import EntityMeta +from datadog_api_client.v2.model.entity_relationships import EntityRelationships +from datadog_api_client.v2.model.entity_response_array import EntityResponseArray +from datadog_api_client.v2.model.entity_response_data_attributes import EntityResponseDataAttributes +from datadog_api_client.v2.model.entity_response_data_relationships import EntityResponseDataRelationships +from datadog_api_client.v2.model.entity_response_data_relationships_incidents import EntityResponseDataRelationshipsIncidents +from datadog_api_client.v2.model.entity_response_data_relationships_incidents_data_items import EntityResponseDataRelationshipsIncidentsDataItems +from datadog_api_client.v2.model.entity_response_data_relationships_incidents_data_items_type import EntityResponseDataRelationshipsIncidentsDataItemsType +from datadog_api_client.v2.model.entity_response_data_relationships_oncalls import EntityResponseDataRelationshipsOncalls +from datadog_api_client.v2.model.entity_response_data_relationships_oncalls_data_items import EntityResponseDataRelationshipsOncallsDataItems +from datadog_api_client.v2.model.entity_response_data_relationships_oncalls_data_items_type import EntityResponseDataRelationshipsOncallsDataItemsType +from datadog_api_client.v2.model.entity_response_data_relationships_raw_schema import EntityResponseDataRelationshipsRawSchema +from datadog_api_client.v2.model.entity_response_data_relationships_raw_schema_data import EntityResponseDataRelationshipsRawSchemaData +from datadog_api_client.v2.model.entity_response_data_relationships_raw_schema_data_type import EntityResponseDataRelationshipsRawSchemaDataType +from datadog_api_client.v2.model.entity_response_data_relationships_related_entities import EntityResponseDataRelationshipsRelatedEntities +from datadog_api_client.v2.model.entity_response_data_relationships_related_entities_data_items import EntityResponseDataRelationshipsRelatedEntitiesDataItems +from datadog_api_client.v2.model.entity_response_data_relationships_related_entities_data_items_type import EntityResponseDataRelationshipsRelatedEntitiesDataItemsType +from datadog_api_client.v2.model.entity_response_data_relationships_schema import EntityResponseDataRelationshipsSchema +from datadog_api_client.v2.model.entity_response_data_relationships_schema_data import EntityResponseDataRelationshipsSchemaData +from datadog_api_client.v2.model.entity_response_data_relationships_schema_data_type import EntityResponseDataRelationshipsSchemaDataType +from datadog_api_client.v2.model.entity_response_data_type import EntityResponseDataType +from datadog_api_client.v2.model.entity_response_included_incident import EntityResponseIncludedIncident +from datadog_api_client.v2.model.entity_response_included_incident_type import EntityResponseIncludedIncidentType +from datadog_api_client.v2.model.entity_response_included_oncall import EntityResponseIncludedOncall +from datadog_api_client.v2.model.entity_response_included_oncall_type import EntityResponseIncludedOncallType +from datadog_api_client.v2.model.entity_response_included_raw_schema import EntityResponseIncludedRawSchema +from datadog_api_client.v2.model.entity_response_included_raw_schema_attributes import EntityResponseIncludedRawSchemaAttributes +from datadog_api_client.v2.model.entity_response_included_raw_schema_type import EntityResponseIncludedRawSchemaType +from datadog_api_client.v2.model.entity_response_included_related_entity import EntityResponseIncludedRelatedEntity +from datadog_api_client.v2.model.entity_response_included_related_entity_attributes import EntityResponseIncludedRelatedEntityAttributes +from datadog_api_client.v2.model.entity_response_included_related_entity_meta import EntityResponseIncludedRelatedEntityMeta +from datadog_api_client.v2.model.entity_response_included_related_entity_type import EntityResponseIncludedRelatedEntityType +from datadog_api_client.v2.model.entity_response_included_related_incident_attributes import EntityResponseIncludedRelatedIncidentAttributes +from datadog_api_client.v2.model.entity_response_included_related_oncall_attributes import EntityResponseIncludedRelatedOncallAttributes +from datadog_api_client.v2.model.entity_response_included_related_oncall_escalation_item import EntityResponseIncludedRelatedOncallEscalationItem +from datadog_api_client.v2.model.entity_response_included_schema import EntityResponseIncludedSchema +from datadog_api_client.v2.model.entity_response_included_schema_attributes import EntityResponseIncludedSchemaAttributes +from datadog_api_client.v2.model.entity_response_included_schema_type import EntityResponseIncludedSchemaType +from datadog_api_client.v2.model.entity_response_meta import EntityResponseMeta +from datadog_api_client.v2.model.entity_to_incidents import EntityToIncidents +from datadog_api_client.v2.model.entity_to_oncalls import EntityToOncalls +from datadog_api_client.v2.model.entity_to_raw_schema import EntityToRawSchema +from datadog_api_client.v2.model.entity_to_related_entities import EntityToRelatedEntities +from datadog_api_client.v2.model.entity_to_schema import EntityToSchema +from datadog_api_client.v2.model.entity_v3 import EntityV3 +from datadog_api_client.v2.model.entity_v3_api import EntityV3API +from datadog_api_client.v2.model.entity_v3_api_datadog import EntityV3APIDatadog +from datadog_api_client.v2.model.entity_v3_api_kind import EntityV3APIKind +from datadog_api_client.v2.model.entity_v3_api_spec import EntityV3APISpec +from datadog_api_client.v2.model.entity_v3_api_spec_interface import EntityV3APISpecInterface +from datadog_api_client.v2.model.entity_v3_api_spec_interface_definition import EntityV3APISpecInterfaceDefinition +from datadog_api_client.v2.model.entity_v3_api_spec_interface_file_ref import EntityV3APISpecInterfaceFileRef +from datadog_api_client.v2.model.entity_v3_api_version import EntityV3APIVersion +from datadog_api_client.v2.model.entity_v3_datadog_code_location_item import EntityV3DatadogCodeLocationItem +from datadog_api_client.v2.model.entity_v3_datadog_event_item import EntityV3DatadogEventItem +from datadog_api_client.v2.model.entity_v3_datadog_integration_opsgenie import EntityV3DatadogIntegrationOpsgenie +from datadog_api_client.v2.model.entity_v3_datadog_integration_pagerduty import EntityV3DatadogIntegrationPagerduty +from datadog_api_client.v2.model.entity_v3_datadog_log_item import EntityV3DatadogLogItem +from datadog_api_client.v2.model.entity_v3_datadog_performance import EntityV3DatadogPerformance +from datadog_api_client.v2.model.entity_v3_datadog_pipelines import EntityV3DatadogPipelines +from datadog_api_client.v2.model.entity_v3_datastore import EntityV3Datastore +from datadog_api_client.v2.model.entity_v3_datastore_datadog import EntityV3DatastoreDatadog +from datadog_api_client.v2.model.entity_v3_datastore_kind import EntityV3DatastoreKind +from datadog_api_client.v2.model.entity_v3_datastore_spec import EntityV3DatastoreSpec +from datadog_api_client.v2.model.entity_v3_integrations import EntityV3Integrations +from datadog_api_client.v2.model.entity_v3_metadata import EntityV3Metadata +from datadog_api_client.v2.model.entity_v3_metadata_additional_owners_items import EntityV3MetadataAdditionalOwnersItems +from datadog_api_client.v2.model.entity_v3_metadata_contacts_items import EntityV3MetadataContactsItems +from datadog_api_client.v2.model.entity_v3_metadata_links_items import EntityV3MetadataLinksItems +from datadog_api_client.v2.model.entity_v3_queue import EntityV3Queue +from datadog_api_client.v2.model.entity_v3_queue_datadog import EntityV3QueueDatadog +from datadog_api_client.v2.model.entity_v3_queue_kind import EntityV3QueueKind +from datadog_api_client.v2.model.entity_v3_queue_spec import EntityV3QueueSpec +from datadog_api_client.v2.model.entity_v3_service import EntityV3Service +from datadog_api_client.v2.model.entity_v3_service_datadog import EntityV3ServiceDatadog +from datadog_api_client.v2.model.entity_v3_service_kind import EntityV3ServiceKind +from datadog_api_client.v2.model.entity_v3_service_spec import EntityV3ServiceSpec +from datadog_api_client.v2.model.entity_v3_system import EntityV3System +from datadog_api_client.v2.model.entity_v3_system_datadog import EntityV3SystemDatadog +from datadog_api_client.v2.model.entity_v3_system_kind import EntityV3SystemKind +from datadog_api_client.v2.model.entity_v3_system_spec import EntityV3SystemSpec +from datadog_api_client.v2.model.environment import Environment +from datadog_api_client.v2.model.environment_attributes import EnvironmentAttributes +from datadog_api_client.v2.model.environment_response import EnvironmentResponse +from datadog_api_client.v2.model.environments_pagination_meta import EnvironmentsPaginationMeta +from datadog_api_client.v2.model.environments_pagination_meta_page import EnvironmentsPaginationMetaPage +from datadog_api_client.v2.model.error_handler import ErrorHandler +from datadog_api_client.v2.model.escalation import Escalation +from datadog_api_client.v2.model.escalation_policy import EscalationPolicy +from datadog_api_client.v2.model.escalation_policy_create_request import EscalationPolicyCreateRequest +from datadog_api_client.v2.model.escalation_policy_create_request_data import EscalationPolicyCreateRequestData +from datadog_api_client.v2.model.escalation_policy_create_request_data_attributes import EscalationPolicyCreateRequestDataAttributes +from datadog_api_client.v2.model.escalation_policy_create_request_data_attributes_steps_items import EscalationPolicyCreateRequestDataAttributesStepsItems +from datadog_api_client.v2.model.escalation_policy_create_request_data_relationships import EscalationPolicyCreateRequestDataRelationships +from datadog_api_client.v2.model.escalation_policy_create_request_data_type import EscalationPolicyCreateRequestDataType +from datadog_api_client.v2.model.escalation_policy_data import EscalationPolicyData +from datadog_api_client.v2.model.escalation_policy_data_attributes import EscalationPolicyDataAttributes +from datadog_api_client.v2.model.escalation_policy_data_relationships import EscalationPolicyDataRelationships +from datadog_api_client.v2.model.escalation_policy_data_relationships_steps import EscalationPolicyDataRelationshipsSteps +from datadog_api_client.v2.model.escalation_policy_data_relationships_steps_data_items import EscalationPolicyDataRelationshipsStepsDataItems +from datadog_api_client.v2.model.escalation_policy_data_relationships_steps_data_items_type import EscalationPolicyDataRelationshipsStepsDataItemsType +from datadog_api_client.v2.model.escalation_policy_data_type import EscalationPolicyDataType +from datadog_api_client.v2.model.escalation_policy_included import EscalationPolicyIncluded +from datadog_api_client.v2.model.escalation_policy_step import EscalationPolicyStep +from datadog_api_client.v2.model.escalation_policy_step_attributes import EscalationPolicyStepAttributes +from datadog_api_client.v2.model.escalation_policy_step_attributes_assignment import EscalationPolicyStepAttributesAssignment +from datadog_api_client.v2.model.escalation_policy_step_relationships import EscalationPolicyStepRelationships +from datadog_api_client.v2.model.escalation_policy_step_target import EscalationPolicyStepTarget +from datadog_api_client.v2.model.escalation_policy_step_target_config import EscalationPolicyStepTargetConfig +from datadog_api_client.v2.model.escalation_policy_step_target_config_schedule import EscalationPolicyStepTargetConfigSchedule +from datadog_api_client.v2.model.escalation_policy_step_target_type import EscalationPolicyStepTargetType +from datadog_api_client.v2.model.escalation_policy_step_type import EscalationPolicyStepType +from datadog_api_client.v2.model.escalation_policy_update_request import EscalationPolicyUpdateRequest +from datadog_api_client.v2.model.escalation_policy_update_request_data import EscalationPolicyUpdateRequestData +from datadog_api_client.v2.model.escalation_policy_update_request_data_attributes import EscalationPolicyUpdateRequestDataAttributes +from datadog_api_client.v2.model.escalation_policy_update_request_data_attributes_steps_items import EscalationPolicyUpdateRequestDataAttributesStepsItems +from datadog_api_client.v2.model.escalation_policy_update_request_data_relationships import EscalationPolicyUpdateRequestDataRelationships +from datadog_api_client.v2.model.escalation_policy_update_request_data_type import EscalationPolicyUpdateRequestDataType +from datadog_api_client.v2.model.escalation_policy_user import EscalationPolicyUser +from datadog_api_client.v2.model.escalation_policy_user_attributes import EscalationPolicyUserAttributes +from datadog_api_client.v2.model.escalation_policy_user_type import EscalationPolicyUserType +from datadog_api_client.v2.model.escalation_relationships import EscalationRelationships +from datadog_api_client.v2.model.escalation_relationships_responders import EscalationRelationshipsResponders +from datadog_api_client.v2.model.escalation_relationships_responders_data_items import EscalationRelationshipsRespondersDataItems +from datadog_api_client.v2.model.escalation_relationships_responders_data_items_type import EscalationRelationshipsRespondersDataItemsType +from datadog_api_client.v2.model.escalation_target import EscalationTarget +from datadog_api_client.v2.model.escalation_targets import EscalationTargets +from datadog_api_client.v2.model.escalation_type import EscalationType +from datadog_api_client.v2.model.estimation import Estimation +from datadog_api_client.v2.model.event import Event +from datadog_api_client.v2.model.event_attributes import EventAttributes +from datadog_api_client.v2.model.event_category import EventCategory +from datadog_api_client.v2.model.event_create_request import EventCreateRequest +from datadog_api_client.v2.model.event_create_request_payload import EventCreateRequestPayload +from datadog_api_client.v2.model.event_create_request_type import EventCreateRequestType +from datadog_api_client.v2.model.event_create_response import EventCreateResponse +from datadog_api_client.v2.model.event_create_response_attributes import EventCreateResponseAttributes +from datadog_api_client.v2.model.event_create_response_attributes_attributes import EventCreateResponseAttributesAttributes +from datadog_api_client.v2.model.event_create_response_attributes_attributes_evt import EventCreateResponseAttributesAttributesEvt +from datadog_api_client.v2.model.event_create_response_payload import EventCreateResponsePayload +from datadog_api_client.v2.model.event_create_response_payload_links import EventCreateResponsePayloadLinks +from datadog_api_client.v2.model.event_payload import EventPayload +from datadog_api_client.v2.model.event_payload_attributes import EventPayloadAttributes +from datadog_api_client.v2.model.event_payload_integration_id import EventPayloadIntegrationId +from datadog_api_client.v2.model.event_priority import EventPriority +from datadog_api_client.v2.model.event_response import EventResponse +from datadog_api_client.v2.model.event_response_attributes import EventResponseAttributes +from datadog_api_client.v2.model.event_status_type import EventStatusType +from datadog_api_client.v2.model.event_system_attributes import EventSystemAttributes +from datadog_api_client.v2.model.event_system_attributes_category import EventSystemAttributesCategory +from datadog_api_client.v2.model.event_system_attributes_integration_id import EventSystemAttributesIntegrationId +from datadog_api_client.v2.model.event_type import EventType +from datadog_api_client.v2.model.events_aggregation import EventsAggregation +from datadog_api_client.v2.model.events_compute import EventsCompute +from datadog_api_client.v2.model.events_data_source import EventsDataSource +from datadog_api_client.v2.model.events_group_by import EventsGroupBy +from datadog_api_client.v2.model.events_group_by_sort import EventsGroupBySort +from datadog_api_client.v2.model.events_list_request import EventsListRequest +from datadog_api_client.v2.model.events_list_response import EventsListResponse +from datadog_api_client.v2.model.events_list_response_links import EventsListResponseLinks +from datadog_api_client.v2.model.events_query_filter import EventsQueryFilter +from datadog_api_client.v2.model.events_query_group_bys import EventsQueryGroupBys +from datadog_api_client.v2.model.events_query_options import EventsQueryOptions +from datadog_api_client.v2.model.events_request_page import EventsRequestPage +from datadog_api_client.v2.model.events_response_metadata import EventsResponseMetadata +from datadog_api_client.v2.model.events_response_metadata_page import EventsResponseMetadataPage +from datadog_api_client.v2.model.events_scalar_query import EventsScalarQuery +from datadog_api_client.v2.model.events_search import EventsSearch +from datadog_api_client.v2.model.events_sort import EventsSort +from datadog_api_client.v2.model.events_sort_type import EventsSortType +from datadog_api_client.v2.model.events_timeseries_query import EventsTimeseriesQuery +from datadog_api_client.v2.model.events_warning import EventsWarning +from datadog_api_client.v2.model.exposure_rollout_step_request import ExposureRolloutStepRequest +from datadog_api_client.v2.model.exposure_schedule_request import ExposureScheduleRequest +from datadog_api_client.v2.model.facet_info_request import FacetInfoRequest +from datadog_api_client.v2.model.facet_info_request_data import FacetInfoRequestData +from datadog_api_client.v2.model.facet_info_request_data_attributes import FacetInfoRequestDataAttributes +from datadog_api_client.v2.model.facet_info_request_data_attributes_search import FacetInfoRequestDataAttributesSearch +from datadog_api_client.v2.model.facet_info_request_data_attributes_term_search import FacetInfoRequestDataAttributesTermSearch +from datadog_api_client.v2.model.facet_info_request_data_type import FacetInfoRequestDataType +from datadog_api_client.v2.model.facet_info_response import FacetInfoResponse +from datadog_api_client.v2.model.facet_info_response_data import FacetInfoResponseData +from datadog_api_client.v2.model.facet_info_response_data_attributes import FacetInfoResponseDataAttributes +from datadog_api_client.v2.model.facet_info_response_data_attributes_result import FacetInfoResponseDataAttributesResult +from datadog_api_client.v2.model.facet_info_response_data_attributes_result_range import FacetInfoResponseDataAttributesResultRange +from datadog_api_client.v2.model.facet_info_response_data_attributes_result_values_items import FacetInfoResponseDataAttributesResultValuesItems +from datadog_api_client.v2.model.facet_info_response_data_type import FacetInfoResponseDataType +from datadog_api_client.v2.model.fastly_api_key import FastlyAPIKey +from datadog_api_client.v2.model.fastly_api_key_type import FastlyAPIKeyType +from datadog_api_client.v2.model.fastly_api_key_update import FastlyAPIKeyUpdate +from datadog_api_client.v2.model.fastly_accoun_response_attributes import FastlyAccounResponseAttributes +from datadog_api_client.v2.model.fastly_account_create_request import FastlyAccountCreateRequest +from datadog_api_client.v2.model.fastly_account_create_request_attributes import FastlyAccountCreateRequestAttributes +from datadog_api_client.v2.model.fastly_account_create_request_data import FastlyAccountCreateRequestData +from datadog_api_client.v2.model.fastly_account_response import FastlyAccountResponse +from datadog_api_client.v2.model.fastly_account_response_data import FastlyAccountResponseData +from datadog_api_client.v2.model.fastly_account_type import FastlyAccountType +from datadog_api_client.v2.model.fastly_account_update_request import FastlyAccountUpdateRequest +from datadog_api_client.v2.model.fastly_account_update_request_attributes import FastlyAccountUpdateRequestAttributes +from datadog_api_client.v2.model.fastly_account_update_request_data import FastlyAccountUpdateRequestData +from datadog_api_client.v2.model.fastly_accounts_response import FastlyAccountsResponse +from datadog_api_client.v2.model.fastly_credentials import FastlyCredentials +from datadog_api_client.v2.model.fastly_credentials_update import FastlyCredentialsUpdate +from datadog_api_client.v2.model.fastly_integration import FastlyIntegration +from datadog_api_client.v2.model.fastly_integration_type import FastlyIntegrationType +from datadog_api_client.v2.model.fastly_integration_update import FastlyIntegrationUpdate +from datadog_api_client.v2.model.fastly_service import FastlyService +from datadog_api_client.v2.model.fastly_service_attributes import FastlyServiceAttributes +from datadog_api_client.v2.model.fastly_service_data import FastlyServiceData +from datadog_api_client.v2.model.fastly_service_request import FastlyServiceRequest +from datadog_api_client.v2.model.fastly_service_response import FastlyServiceResponse +from datadog_api_client.v2.model.fastly_service_type import FastlyServiceType +from datadog_api_client.v2.model.fastly_services_response import FastlyServicesResponse +from datadog_api_client.v2.model.feature_flag import FeatureFlag +from datadog_api_client.v2.model.feature_flag_attributes import FeatureFlagAttributes +from datadog_api_client.v2.model.feature_flag_environment import FeatureFlagEnvironment +from datadog_api_client.v2.model.feature_flag_environment_list_item import FeatureFlagEnvironmentListItem +from datadog_api_client.v2.model.feature_flag_list_item import FeatureFlagListItem +from datadog_api_client.v2.model.feature_flag_list_item_attributes import FeatureFlagListItemAttributes +from datadog_api_client.v2.model.feature_flag_response import FeatureFlagResponse +from datadog_api_client.v2.model.feature_flag_status import FeatureFlagStatus +from datadog_api_client.v2.model.feature_flags_pagination_meta import FeatureFlagsPaginationMeta +from datadog_api_client.v2.model.feature_flags_pagination_meta_page import FeatureFlagsPaginationMetaPage +from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct +from datadog_api_client.v2.model.finding import Finding +from datadog_api_client.v2.model.finding_attributes import FindingAttributes +from datadog_api_client.v2.model.finding_case_response import FindingCaseResponse +from datadog_api_client.v2.model.finding_case_response_array import FindingCaseResponseArray +from datadog_api_client.v2.model.finding_case_response_data import FindingCaseResponseData +from datadog_api_client.v2.model.finding_case_response_data_attributes import FindingCaseResponseDataAttributes +from datadog_api_client.v2.model.finding_case_response_data_relationships import FindingCaseResponseDataRelationships +from datadog_api_client.v2.model.finding_data import FindingData +from datadog_api_client.v2.model.finding_data_type import FindingDataType +from datadog_api_client.v2.model.finding_evaluation import FindingEvaluation +from datadog_api_client.v2.model.finding_jira_issue import FindingJiraIssue +from datadog_api_client.v2.model.finding_jira_issue_result import FindingJiraIssueResult +from datadog_api_client.v2.model.finding_linear_issue import FindingLinearIssue +from datadog_api_client.v2.model.finding_linear_issue_result import FindingLinearIssueResult +from datadog_api_client.v2.model.finding_mute import FindingMute +from datadog_api_client.v2.model.finding_mute_reason import FindingMuteReason +from datadog_api_client.v2.model.finding_rule import FindingRule +from datadog_api_client.v2.model.finding_service_now_ticket import FindingServiceNowTicket +from datadog_api_client.v2.model.finding_service_now_ticket_result import FindingServiceNowTicketResult +from datadog_api_client.v2.model.finding_status import FindingStatus +from datadog_api_client.v2.model.finding_type import FindingType +from datadog_api_client.v2.model.finding_vulnerability_type import FindingVulnerabilityType +from datadog_api_client.v2.model.findings import Findings +from datadog_api_client.v2.model.flaky_test import FlakyTest +from datadog_api_client.v2.model.flaky_test_attributes import FlakyTestAttributes +from datadog_api_client.v2.model.flaky_test_attributes_flaky_state import FlakyTestAttributesFlakyState +from datadog_api_client.v2.model.flaky_test_history import FlakyTestHistory +from datadog_api_client.v2.model.flaky_test_history_policy_id import FlakyTestHistoryPolicyId +from datadog_api_client.v2.model.flaky_test_history_policy_meta import FlakyTestHistoryPolicyMeta +from datadog_api_client.v2.model.flaky_test_history_policy_meta_config import FlakyTestHistoryPolicyMetaConfig +from datadog_api_client.v2.model.flaky_test_impact_level import FlakyTestImpactLevel +from datadog_api_client.v2.model.flaky_test_pipeline_stats import FlakyTestPipelineStats +from datadog_api_client.v2.model.flaky_test_run_metadata import FlakyTestRunMetadata +from datadog_api_client.v2.model.flaky_test_stats import FlakyTestStats +from datadog_api_client.v2.model.flaky_test_type import FlakyTestType +from datadog_api_client.v2.model.flaky_tests_pagination import FlakyTestsPagination +from datadog_api_client.v2.model.flaky_tests_search_filter import FlakyTestsSearchFilter +from datadog_api_client.v2.model.flaky_tests_search_page_options import FlakyTestsSearchPageOptions +from datadog_api_client.v2.model.flaky_tests_search_request import FlakyTestsSearchRequest +from datadog_api_client.v2.model.flaky_tests_search_request_attributes import FlakyTestsSearchRequestAttributes +from datadog_api_client.v2.model.flaky_tests_search_request_data import FlakyTestsSearchRequestData +from datadog_api_client.v2.model.flaky_tests_search_request_data_type import FlakyTestsSearchRequestDataType +from datadog_api_client.v2.model.flaky_tests_search_response import FlakyTestsSearchResponse +from datadog_api_client.v2.model.flaky_tests_search_response_meta import FlakyTestsSearchResponseMeta +from datadog_api_client.v2.model.flaky_tests_search_sort import FlakyTestsSearchSort +from datadog_api_client.v2.model.fleet_agent_attributes_tags_items import FleetAgentAttributesTagsItems +from datadog_api_client.v2.model.fleet_agent_configuration_files_v2 import FleetAgentConfigurationFilesV2 +from datadog_api_client.v2.model.fleet_agent_detail_v2 import FleetAgentDetailV2 +from datadog_api_client.v2.model.fleet_agent_detail_v2_attributes import FleetAgentDetailV2Attributes +from datadog_api_client.v2.model.fleet_agent_detail_v2_response import FleetAgentDetailV2Response +from datadog_api_client.v2.model.fleet_agent_info_details_v2 import FleetAgentInfoDetailsV2 +from datadog_api_client.v2.model.fleet_agent_v2 import FleetAgentV2 +from datadog_api_client.v2.model.fleet_agent_v2_attributes import FleetAgentV2Attributes +from datadog_api_client.v2.model.fleet_agent_v2_attributes_instrumentation_status import FleetAgentV2AttributesInstrumentationStatus +from datadog_api_client.v2.model.fleet_agent_v2_resource_type import FleetAgentV2ResourceType +from datadog_api_client.v2.model.fleet_agent_version_v2 import FleetAgentVersionV2 +from datadog_api_client.v2.model.fleet_agent_version_v2_attributes import FleetAgentVersionV2Attributes +from datadog_api_client.v2.model.fleet_agent_version_v2_resource_type import FleetAgentVersionV2ResourceType +from datadog_api_client.v2.model.fleet_agent_versions_v2_page import FleetAgentVersionsV2Page +from datadog_api_client.v2.model.fleet_agent_versions_v2_response import FleetAgentVersionsV2Response +from datadog_api_client.v2.model.fleet_agent_versions_v2_response_meta import FleetAgentVersionsV2ResponseMeta +from datadog_api_client.v2.model.fleet_agents_v2_page import FleetAgentsV2Page +from datadog_api_client.v2.model.fleet_agents_v2_response import FleetAgentsV2Response +from datadog_api_client.v2.model.fleet_agents_v2_response_meta import FleetAgentsV2ResponseMeta +from datadog_api_client.v2.model.fleet_configuration_file_v2 import FleetConfigurationFileV2 +from datadog_api_client.v2.model.fleet_configuration_layer import FleetConfigurationLayer +from datadog_api_client.v2.model.fleet_deployment import FleetDeployment +from datadog_api_client.v2.model.fleet_deployment_attributes import FleetDeploymentAttributes +from datadog_api_client.v2.model.fleet_deployment_configure_v2_attributes import FleetDeploymentConfigureV2Attributes +from datadog_api_client.v2.model.fleet_deployment_configure_v2_create import FleetDeploymentConfigureV2Create +from datadog_api_client.v2.model.fleet_deployment_configure_v2_create_request import FleetDeploymentConfigureV2CreateRequest +from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run import FleetDeploymentConfigureV2DryRun +from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run_attributes import FleetDeploymentConfigureV2DryRunAttributes +from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run_response import FleetDeploymentConfigureV2DryRunResponse +from datadog_api_client.v2.model.fleet_deployment_configure_v2_dry_run_result import FleetDeploymentConfigureV2DryRunResult +from datadog_api_client.v2.model.fleet_deployment_configure_v2_package import FleetDeploymentConfigureV2Package +from datadog_api_client.v2.model.fleet_deployment_file_op import FleetDeploymentFileOp +from datadog_api_client.v2.model.fleet_deployment_host import FleetDeploymentHost +from datadog_api_client.v2.model.fleet_deployment_host_package import FleetDeploymentHostPackage +from datadog_api_client.v2.model.fleet_deployment_hosts_page import FleetDeploymentHostsPage +from datadog_api_client.v2.model.fleet_deployment_operation import FleetDeploymentOperation +from datadog_api_client.v2.model.fleet_deployment_package import FleetDeploymentPackage +from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_attributes import FleetDeploymentPackageUpgradeV2Attributes +from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_create import FleetDeploymentPackageUpgradeV2Create +from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_create_request import FleetDeploymentPackageUpgradeV2CreateRequest +from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType +from datadog_api_client.v2.model.fleet_deployment_response import FleetDeploymentResponse +from datadog_api_client.v2.model.fleet_deployment_response_meta import FleetDeploymentResponseMeta +from datadog_api_client.v2.model.fleet_deployment_v2 import FleetDeploymentV2 +from datadog_api_client.v2.model.fleet_deployment_v2_attributes import FleetDeploymentV2Attributes +from datadog_api_client.v2.model.fleet_deployment_v2_cancel import FleetDeploymentV2Cancel +from datadog_api_client.v2.model.fleet_deployment_v2_cancel_attributes import FleetDeploymentV2CancelAttributes +from datadog_api_client.v2.model.fleet_deployment_v2_cancel_response import FleetDeploymentV2CancelResponse +from datadog_api_client.v2.model.fleet_deployment_v2_create_response import FleetDeploymentV2CreateResponse +from datadog_api_client.v2.model.fleet_deployment_v2_detail import FleetDeploymentV2Detail +from datadog_api_client.v2.model.fleet_deployment_v2_detail_agent import FleetDeploymentV2DetailAgent +from datadog_api_client.v2.model.fleet_deployment_v2_detail_attributes import FleetDeploymentV2DetailAttributes +from datadog_api_client.v2.model.fleet_deployment_v2_detail_response import FleetDeploymentV2DetailResponse +from datadog_api_client.v2.model.fleet_deployments_v2_page import FleetDeploymentsV2Page +from datadog_api_client.v2.model.fleet_deployments_v2_response import FleetDeploymentsV2Response +from datadog_api_client.v2.model.fleet_deployments_v2_response_meta import FleetDeploymentsV2ResponseMeta +from datadog_api_client.v2.model.fleet_detected_integration import FleetDetectedIntegration +from datadog_api_client.v2.model.fleet_integration_details_v2 import FleetIntegrationDetailsV2 +from datadog_api_client.v2.model.fleet_integrations_by_status_v2 import FleetIntegrationsByStatusV2 +from datadog_api_client.v2.model.fleet_otel_collector import FleetOtelCollector +from datadog_api_client.v2.model.fleet_otel_collector_configuration_v2 import FleetOtelCollectorConfigurationV2 +from datadog_api_client.v2.model.fleet_schedule import FleetSchedule +from datadog_api_client.v2.model.fleet_schedule_attributes import FleetScheduleAttributes +from datadog_api_client.v2.model.fleet_schedule_create import FleetScheduleCreate +from datadog_api_client.v2.model.fleet_schedule_create_attributes import FleetScheduleCreateAttributes +from datadog_api_client.v2.model.fleet_schedule_create_request import FleetScheduleCreateRequest +from datadog_api_client.v2.model.fleet_schedule_patch import FleetSchedulePatch +from datadog_api_client.v2.model.fleet_schedule_patch_attributes import FleetSchedulePatchAttributes +from datadog_api_client.v2.model.fleet_schedule_patch_request import FleetSchedulePatchRequest +from datadog_api_client.v2.model.fleet_schedule_recurrence_rule import FleetScheduleRecurrenceRule +from datadog_api_client.v2.model.fleet_schedule_resource_type import FleetScheduleResourceType +from datadog_api_client.v2.model.fleet_schedule_response import FleetScheduleResponse +from datadog_api_client.v2.model.fleet_schedule_status import FleetScheduleStatus +from datadog_api_client.v2.model.fleet_schedule_v2 import FleetScheduleV2 +from datadog_api_client.v2.model.fleet_schedule_v2_attributes import FleetScheduleV2Attributes +from datadog_api_client.v2.model.fleet_schedule_v2_notification_rule import FleetScheduleV2NotificationRule +from datadog_api_client.v2.model.fleet_schedule_v2_recurrence_rule import FleetScheduleV2RecurrenceRule +from datadog_api_client.v2.model.fleet_schedule_v2_response import FleetScheduleV2Response +from datadog_api_client.v2.model.fleet_schedules_v2_page import FleetSchedulesV2Page +from datadog_api_client.v2.model.fleet_schedules_v2_response import FleetSchedulesV2Response +from datadog_api_client.v2.model.fleet_schedules_v2_response_meta import FleetSchedulesV2ResponseMeta +from datadog_api_client.v2.model.fleet_tracer_attributes import FleetTracerAttributes +from datadog_api_client.v2.model.fleet_tracers_response import FleetTracersResponse +from datadog_api_client.v2.model.fleet_tracers_response_data import FleetTracersResponseData +from datadog_api_client.v2.model.fleet_tracers_response_data_attributes import FleetTracersResponseDataAttributes +from datadog_api_client.v2.model.fleet_tracers_response_meta import FleetTracersResponseMeta +from datadog_api_client.v2.model.flutter_sourcemap_attributes import FlutterSourcemapAttributes +from datadog_api_client.v2.model.flutter_sourcemap_data import FlutterSourcemapData +from datadog_api_client.v2.model.form_data import FormData +from datadog_api_client.v2.model.form_data_attributes import FormDataAttributes +from datadog_api_client.v2.model.form_data_definition import FormDataDefinition +from datadog_api_client.v2.model.form_data_definition_type import FormDataDefinitionType +from datadog_api_client.v2.model.form_datastore_config_attributes import FormDatastoreConfigAttributes +from datadog_api_client.v2.model.form_publication_attributes import FormPublicationAttributes +from datadog_api_client.v2.model.form_publication_data import FormPublicationData +from datadog_api_client.v2.model.form_publication_response import FormPublicationResponse +from datadog_api_client.v2.model.form_publication_type import FormPublicationType +from datadog_api_client.v2.model.form_response import FormResponse +from datadog_api_client.v2.model.form_trigger import FormTrigger +from datadog_api_client.v2.model.form_trigger_wrapper import FormTriggerWrapper +from datadog_api_client.v2.model.form_type import FormType +from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition +from datadog_api_client.v2.model.form_ui_definition_ui_theme import FormUiDefinitionUiTheme +from datadog_api_client.v2.model.form_ui_definition_ui_theme_primary_color import FormUiDefinitionUiThemePrimaryColor +from datadog_api_client.v2.model.form_update_attributes import FormUpdateAttributes +from datadog_api_client.v2.model.form_version_attributes import FormVersionAttributes +from datadog_api_client.v2.model.form_version_data import FormVersionData +from datadog_api_client.v2.model.form_version_response import FormVersionResponse +from datadog_api_client.v2.model.form_version_state import FormVersionState +from datadog_api_client.v2.model.form_version_type import FormVersionType +from datadog_api_client.v2.model.forms_response import FormsResponse +from datadog_api_client.v2.model.formula_limit import FormulaLimit +from datadog_api_client.v2.model.framework_handle_and_version_response_data import FrameworkHandleAndVersionResponseData +from datadog_api_client.v2.model.freshservice_api_key import FreshserviceAPIKey +from datadog_api_client.v2.model.freshservice_api_key_type import FreshserviceAPIKeyType +from datadog_api_client.v2.model.freshservice_api_key_update import FreshserviceAPIKeyUpdate +from datadog_api_client.v2.model.freshservice_credentials import FreshserviceCredentials +from datadog_api_client.v2.model.freshservice_credentials_update import FreshserviceCredentialsUpdate +from datadog_api_client.v2.model.freshservice_integration import FreshserviceIntegration +from datadog_api_client.v2.model.freshservice_integration_type import FreshserviceIntegrationType +from datadog_api_client.v2.model.freshservice_integration_update import FreshserviceIntegrationUpdate +from datadog_api_client.v2.model.full_api_key import FullAPIKey +from datadog_api_client.v2.model.full_api_key_attributes import FullAPIKeyAttributes +from datadog_api_client.v2.model.full_application_key import FullApplicationKey +from datadog_api_client.v2.model.full_application_key_attributes import FullApplicationKeyAttributes +from datadog_api_client.v2.model.full_custom_framework_data import FullCustomFrameworkData +from datadog_api_client.v2.model.full_custom_framework_data_attributes import FullCustomFrameworkDataAttributes +from datadog_api_client.v2.model.full_personal_access_token import FullPersonalAccessToken +from datadog_api_client.v2.model.full_personal_access_token_attributes import FullPersonalAccessTokenAttributes +from datadog_api_client.v2.model.full_service_access_token import FullServiceAccessToken +from datadog_api_client.v2.model.full_service_access_token_attributes import FullServiceAccessTokenAttributes +from datadog_api_client.v2.model.gcp_credentials import GCPCredentials +from datadog_api_client.v2.model.gcp_credentials_update import GCPCredentialsUpdate +from datadog_api_client.v2.model.gcp_integration import GCPIntegration +from datadog_api_client.v2.model.gcp_integration_type import GCPIntegrationType +from datadog_api_client.v2.model.gcp_integration_update import GCPIntegrationUpdate +from datadog_api_client.v2.model.gcp_metric_namespace_config import GCPMetricNamespaceConfig +from datadog_api_client.v2.model.gcp_monitored_resource_config import GCPMonitoredResourceConfig +from datadog_api_client.v2.model.gcp_monitored_resource_config_type import GCPMonitoredResourceConfigType +from datadog_api_client.v2.model.gcpsts_delegate_account import GCPSTSDelegateAccount +from datadog_api_client.v2.model.gcpsts_delegate_account_attributes import GCPSTSDelegateAccountAttributes +from datadog_api_client.v2.model.gcpsts_delegate_account_response import GCPSTSDelegateAccountResponse +from datadog_api_client.v2.model.gcpsts_delegate_account_type import GCPSTSDelegateAccountType +from datadog_api_client.v2.model.gcpsts_service_account import GCPSTSServiceAccount +from datadog_api_client.v2.model.gcpsts_service_account_attributes import GCPSTSServiceAccountAttributes +from datadog_api_client.v2.model.gcpsts_service_account_create_request import GCPSTSServiceAccountCreateRequest +from datadog_api_client.v2.model.gcpsts_service_account_data import GCPSTSServiceAccountData +from datadog_api_client.v2.model.gcpsts_service_account_response import GCPSTSServiceAccountResponse +from datadog_api_client.v2.model.gcpsts_service_account_update_request import GCPSTSServiceAccountUpdateRequest +from datadog_api_client.v2.model.gcpsts_service_account_update_request_data import GCPSTSServiceAccountUpdateRequestData +from datadog_api_client.v2.model.gcpsts_service_accounts_response import GCPSTSServiceAccountsResponse +from datadog_api_client.v2.model.gcp_service_account import GCPServiceAccount +from datadog_api_client.v2.model.gcp_service_account_credential_type import GCPServiceAccountCredentialType +from datadog_api_client.v2.model.gcp_service_account_meta import GCPServiceAccountMeta +from datadog_api_client.v2.model.gcp_service_account_type import GCPServiceAccountType +from datadog_api_client.v2.model.gcp_service_account_update import GCPServiceAccountUpdate +from datadog_api_client.v2.model.gcp_usage_cost_config import GCPUsageCostConfig +from datadog_api_client.v2.model.gcp_usage_cost_config_attributes import GCPUsageCostConfigAttributes +from datadog_api_client.v2.model.gcp_usage_cost_config_patch_data import GCPUsageCostConfigPatchData +from datadog_api_client.v2.model.gcp_usage_cost_config_patch_request import GCPUsageCostConfigPatchRequest +from datadog_api_client.v2.model.gcp_usage_cost_config_patch_request_attributes import GCPUsageCostConfigPatchRequestAttributes +from datadog_api_client.v2.model.gcp_usage_cost_config_patch_request_type import GCPUsageCostConfigPatchRequestType +from datadog_api_client.v2.model.gcp_usage_cost_config_post_data import GCPUsageCostConfigPostData +from datadog_api_client.v2.model.gcp_usage_cost_config_post_request import GCPUsageCostConfigPostRequest +from datadog_api_client.v2.model.gcp_usage_cost_config_post_request_attributes import GCPUsageCostConfigPostRequestAttributes +from datadog_api_client.v2.model.gcp_usage_cost_config_post_request_type import GCPUsageCostConfigPostRequestType +from datadog_api_client.v2.model.gcp_usage_cost_config_response import GCPUsageCostConfigResponse +from datadog_api_client.v2.model.gcp_usage_cost_config_type import GCPUsageCostConfigType +from datadog_api_client.v2.model.gcp_usage_cost_configs_response import GCPUsageCostConfigsResponse +from datadog_api_client.v2.model.gcp_scan_options import GcpScanOptions +from datadog_api_client.v2.model.gcp_scan_options_array import GcpScanOptionsArray +from datadog_api_client.v2.model.gcp_scan_options_data import GcpScanOptionsData +from datadog_api_client.v2.model.gcp_scan_options_data_attributes import GcpScanOptionsDataAttributes +from datadog_api_client.v2.model.gcp_scan_options_data_type import GcpScanOptionsDataType +from datadog_api_client.v2.model.gcp_scan_options_input_update import GcpScanOptionsInputUpdate +from datadog_api_client.v2.model.gcp_scan_options_input_update_data import GcpScanOptionsInputUpdateData +from datadog_api_client.v2.model.gcp_scan_options_input_update_data_attributes import GcpScanOptionsInputUpdateDataAttributes +from datadog_api_client.v2.model.gcp_scan_options_input_update_data_type import GcpScanOptionsInputUpdateDataType +from datadog_api_client.v2.model.gcp_uc_config_response import GcpUcConfigResponse +from datadog_api_client.v2.model.gcp_uc_config_response_data import GcpUcConfigResponseData +from datadog_api_client.v2.model.gcp_uc_config_response_data_attributes import GcpUcConfigResponseDataAttributes +from datadog_api_client.v2.model.gcp_uc_config_response_data_type import GcpUcConfigResponseDataType +from datadog_api_client.v2.model.gemini_api_key import GeminiAPIKey +from datadog_api_client.v2.model.gemini_api_key_type import GeminiAPIKeyType +from datadog_api_client.v2.model.gemini_api_key_update import GeminiAPIKeyUpdate +from datadog_api_client.v2.model.gemini_credentials import GeminiCredentials +from datadog_api_client.v2.model.gemini_credentials_update import GeminiCredentialsUpdate +from datadog_api_client.v2.model.gemini_integration import GeminiIntegration +from datadog_api_client.v2.model.gemini_integration_type import GeminiIntegrationType +from datadog_api_client.v2.model.gemini_integration_update import GeminiIntegrationUpdate +from datadog_api_client.v2.model.generate_cost_tag_description_response import GenerateCostTagDescriptionResponse +from datadog_api_client.v2.model.generated_cost_tag_description import GeneratedCostTagDescription +from datadog_api_client.v2.model.generated_cost_tag_description_attributes import GeneratedCostTagDescriptionAttributes +from datadog_api_client.v2.model.generated_cost_tag_description_type import GeneratedCostTagDescriptionType +from datadog_api_client.v2.model.get_action_connection_response import GetActionConnectionResponse +from datadog_api_client.v2.model.get_app_key_registration_response import GetAppKeyRegistrationResponse +from datadog_api_client.v2.model.get_app_response import GetAppResponse +from datadog_api_client.v2.model.get_app_response_data import GetAppResponseData +from datadog_api_client.v2.model.get_app_response_data_attributes import GetAppResponseDataAttributes +from datadog_api_client.v2.model.get_ast_request import GetAstRequest +from datadog_api_client.v2.model.get_ast_request_data import GetAstRequestData +from datadog_api_client.v2.model.get_ast_request_data_attributes import GetAstRequestDataAttributes +from datadog_api_client.v2.model.get_ast_request_data_type import GetAstRequestDataType +from datadog_api_client.v2.model.get_ast_response import GetAstResponse +from datadog_api_client.v2.model.get_ast_response_data import GetAstResponseData +from datadog_api_client.v2.model.get_ast_response_data_attributes import GetAstResponseDataAttributes +from datadog_api_client.v2.model.get_ast_response_data_type import GetAstResponseDataType +from datadog_api_client.v2.model.get_blueprint_response import GetBlueprintResponse +from datadog_api_client.v2.model.get_blueprints_response import GetBlueprintsResponse +from datadog_api_client.v2.model.get_custom_framework_response import GetCustomFrameworkResponse +from datadog_api_client.v2.model.get_data_deletions_response_body import GetDataDeletionsResponseBody +from datadog_api_client.v2.model.get_data_observability_monitor_run_status_response import GetDataObservabilityMonitorRunStatusResponse +from datadog_api_client.v2.model.get_data_observability_monitor_run_status_response_attributes import GetDataObservabilityMonitorRunStatusResponseAttributes +from datadog_api_client.v2.model.get_data_observability_monitor_run_status_response_data import GetDataObservabilityMonitorRunStatusResponseData +from datadog_api_client.v2.model.get_device_attributes import GetDeviceAttributes +from datadog_api_client.v2.model.get_device_data import GetDeviceData +from datadog_api_client.v2.model.get_device_response import GetDeviceResponse +from datadog_api_client.v2.model.get_finding_response import GetFindingResponse +from datadog_api_client.v2.model.get_interfaces_data import GetInterfacesData +from datadog_api_client.v2.model.get_interfaces_response import GetInterfacesResponse +from datadog_api_client.v2.model.get_investigation_response import GetInvestigationResponse +from datadog_api_client.v2.model.get_investigation_response_data import GetInvestigationResponseData +from datadog_api_client.v2.model.get_investigation_response_data_attributes import GetInvestigationResponseDataAttributes +from datadog_api_client.v2.model.get_investigation_response_links import GetInvestigationResponseLinks +from datadog_api_client.v2.model.get_io_c_indicator_response import GetIoCIndicatorResponse +from datadog_api_client.v2.model.get_io_c_indicator_response_attributes import GetIoCIndicatorResponseAttributes +from datadog_api_client.v2.model.get_io_c_indicator_response_data import GetIoCIndicatorResponseData +from datadog_api_client.v2.model.get_issue_include_query_parameter_item import GetIssueIncludeQueryParameterItem +from datadog_api_client.v2.model.get_mapping_response import GetMappingResponse +from datadog_api_client.v2.model.get_mapping_response_data import GetMappingResponseData +from datadog_api_client.v2.model.get_mapping_response_data_attributes import GetMappingResponseDataAttributes +from datadog_api_client.v2.model.get_mapping_response_data_attributes_attributes_items import GetMappingResponseDataAttributesAttributesItems +from datadog_api_client.v2.model.get_mapping_response_data_type import GetMappingResponseDataType +from datadog_api_client.v2.model.get_multiple_rulesets_request import GetMultipleRulesetsRequest +from datadog_api_client.v2.model.get_multiple_rulesets_request_data import GetMultipleRulesetsRequestData +from datadog_api_client.v2.model.get_multiple_rulesets_request_data_attributes import GetMultipleRulesetsRequestDataAttributes +from datadog_api_client.v2.model.get_multiple_rulesets_request_data_type import GetMultipleRulesetsRequestDataType +from datadog_api_client.v2.model.get_multiple_rulesets_response import GetMultipleRulesetsResponse +from datadog_api_client.v2.model.get_multiple_rulesets_response_data import GetMultipleRulesetsResponseData +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes import GetMultipleRulesetsResponseDataAttributes +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items import GetMultipleRulesetsResponseDataAttributesRulesetsItems +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_data import GetMultipleRulesetsResponseDataAttributesRulesetsItemsData +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_data_type import GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_arguments_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsArgumentsItems +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsData +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_data_type import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_attributes_rulesets_items_rules_items_tests_items import GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsTestsItems +from datadog_api_client.v2.model.get_multiple_rulesets_response_data_type import GetMultipleRulesetsResponseDataType +from datadog_api_client.v2.model.get_resource_evaluation_filters_response import GetResourceEvaluationFiltersResponse +from datadog_api_client.v2.model.get_resource_evaluation_filters_response_data import GetResourceEvaluationFiltersResponseData +from datadog_api_client.v2.model.get_rule_version_history_data import GetRuleVersionHistoryData +from datadog_api_client.v2.model.get_rule_version_history_data_type import GetRuleVersionHistoryDataType +from datadog_api_client.v2.model.get_rule_version_history_response import GetRuleVersionHistoryResponse +from datadog_api_client.v2.model.get_sbom_response import GetSBOMResponse +from datadog_api_client.v2.model.get_suppression_version_history_data import GetSuppressionVersionHistoryData +from datadog_api_client.v2.model.get_suppression_version_history_data_type import GetSuppressionVersionHistoryDataType +from datadog_api_client.v2.model.get_suppression_version_history_response import GetSuppressionVersionHistoryResponse +from datadog_api_client.v2.model.get_team_memberships_sort import GetTeamMembershipsSort +from datadog_api_client.v2.model.get_workflow_response import GetWorkflowResponse +from datadog_api_client.v2.model.github_webhook_trigger import GithubWebhookTrigger +from datadog_api_client.v2.model.github_webhook_trigger_wrapper import GithubWebhookTriggerWrapper +from datadog_api_client.v2.model.gitlab_api_key import GitlabAPIKey +from datadog_api_client.v2.model.gitlab_api_key_type import GitlabAPIKeyType +from datadog_api_client.v2.model.gitlab_api_key_update import GitlabAPIKeyUpdate +from datadog_api_client.v2.model.gitlab_credentials import GitlabCredentials +from datadog_api_client.v2.model.gitlab_credentials_update import GitlabCredentialsUpdate +from datadog_api_client.v2.model.gitlab_integration import GitlabIntegration +from datadog_api_client.v2.model.gitlab_integration_type import GitlabIntegrationType +from datadog_api_client.v2.model.gitlab_integration_update import GitlabIntegrationUpdate +from datadog_api_client.v2.model.global_incident_settings_attributes_request import GlobalIncidentSettingsAttributesRequest +from datadog_api_client.v2.model.global_incident_settings_attributes_response import GlobalIncidentSettingsAttributesResponse +from datadog_api_client.v2.model.global_incident_settings_data_request import GlobalIncidentSettingsDataRequest +from datadog_api_client.v2.model.global_incident_settings_data_response import GlobalIncidentSettingsDataResponse +from datadog_api_client.v2.model.global_incident_settings_request import GlobalIncidentSettingsRequest +from datadog_api_client.v2.model.global_incident_settings_response import GlobalIncidentSettingsResponse +from datadog_api_client.v2.model.global_incident_settings_type import GlobalIncidentSettingsType +from datadog_api_client.v2.model.global_org import GlobalOrg +from datadog_api_client.v2.model.global_org_attributes import GlobalOrgAttributes +from datadog_api_client.v2.model.global_org_data import GlobalOrgData +from datadog_api_client.v2.model.global_org_identifier import GlobalOrgIdentifier +from datadog_api_client.v2.model.global_org_type import GlobalOrgType +from datadog_api_client.v2.model.global_org_user import GlobalOrgUser +from datadog_api_client.v2.model.global_orgs_links import GlobalOrgsLinks +from datadog_api_client.v2.model.global_orgs_meta import GlobalOrgsMeta +from datadog_api_client.v2.model.global_orgs_meta_page import GlobalOrgsMetaPage +from datadog_api_client.v2.model.global_orgs_meta_page_type import GlobalOrgsMetaPageType +from datadog_api_client.v2.model.global_orgs_response import GlobalOrgsResponse +from datadog_api_client.v2.model.global_variable_data import GlobalVariableData +from datadog_api_client.v2.model.global_variable_json_patch_request import GlobalVariableJsonPatchRequest +from datadog_api_client.v2.model.global_variable_json_patch_request_data import GlobalVariableJsonPatchRequestData +from datadog_api_client.v2.model.global_variable_json_patch_request_data_attributes import GlobalVariableJsonPatchRequestDataAttributes +from datadog_api_client.v2.model.global_variable_json_patch_type import GlobalVariableJsonPatchType +from datadog_api_client.v2.model.global_variable_response import GlobalVariableResponse +from datadog_api_client.v2.model.global_variable_type import GlobalVariableType +from datadog_api_client.v2.model.google_chat_app_named_space_response import GoogleChatAppNamedSpaceResponse +from datadog_api_client.v2.model.google_chat_app_named_space_response_attributes import GoogleChatAppNamedSpaceResponseAttributes +from datadog_api_client.v2.model.google_chat_app_named_space_response_data import GoogleChatAppNamedSpaceResponseData +from datadog_api_client.v2.model.google_chat_app_named_space_type import GoogleChatAppNamedSpaceType +from datadog_api_client.v2.model.google_chat_create_organization_handle_request import GoogleChatCreateOrganizationHandleRequest +from datadog_api_client.v2.model.google_chat_create_organization_handle_request_attributes import GoogleChatCreateOrganizationHandleRequestAttributes +from datadog_api_client.v2.model.google_chat_create_organization_handle_request_data import GoogleChatCreateOrganizationHandleRequestData +from datadog_api_client.v2.model.google_chat_delegated_user_attributes import GoogleChatDelegatedUserAttributes +from datadog_api_client.v2.model.google_chat_delegated_user_data import GoogleChatDelegatedUserData +from datadog_api_client.v2.model.google_chat_delegated_user_response import GoogleChatDelegatedUserResponse +from datadog_api_client.v2.model.google_chat_delegated_user_type import GoogleChatDelegatedUserType +from datadog_api_client.v2.model.google_chat_organization_attributes import GoogleChatOrganizationAttributes +from datadog_api_client.v2.model.google_chat_organization_data import GoogleChatOrganizationData +from datadog_api_client.v2.model.google_chat_organization_handle_response import GoogleChatOrganizationHandleResponse +from datadog_api_client.v2.model.google_chat_organization_handle_response_attributes import GoogleChatOrganizationHandleResponseAttributes +from datadog_api_client.v2.model.google_chat_organization_handle_response_data import GoogleChatOrganizationHandleResponseData +from datadog_api_client.v2.model.google_chat_organization_handle_type import GoogleChatOrganizationHandleType +from datadog_api_client.v2.model.google_chat_organization_handles_response import GoogleChatOrganizationHandlesResponse +from datadog_api_client.v2.model.google_chat_organization_relationships import GoogleChatOrganizationRelationships +from datadog_api_client.v2.model.google_chat_organization_relationships_delegated_user import GoogleChatOrganizationRelationshipsDelegatedUser +from datadog_api_client.v2.model.google_chat_organization_relationships_delegated_user_data import GoogleChatOrganizationRelationshipsDelegatedUserData +from datadog_api_client.v2.model.google_chat_organization_response import GoogleChatOrganizationResponse +from datadog_api_client.v2.model.google_chat_organization_type import GoogleChatOrganizationType +from datadog_api_client.v2.model.google_chat_organizations_response import GoogleChatOrganizationsResponse +from datadog_api_client.v2.model.google_chat_target_audience_attributes import GoogleChatTargetAudienceAttributes +from datadog_api_client.v2.model.google_chat_target_audience_create_request import GoogleChatTargetAudienceCreateRequest +from datadog_api_client.v2.model.google_chat_target_audience_create_request_attributes import GoogleChatTargetAudienceCreateRequestAttributes +from datadog_api_client.v2.model.google_chat_target_audience_create_request_data import GoogleChatTargetAudienceCreateRequestData +from datadog_api_client.v2.model.google_chat_target_audience_data import GoogleChatTargetAudienceData +from datadog_api_client.v2.model.google_chat_target_audience_response import GoogleChatTargetAudienceResponse +from datadog_api_client.v2.model.google_chat_target_audience_type import GoogleChatTargetAudienceType +from datadog_api_client.v2.model.google_chat_target_audience_update_request import GoogleChatTargetAudienceUpdateRequest +from datadog_api_client.v2.model.google_chat_target_audience_update_request_attributes import GoogleChatTargetAudienceUpdateRequestAttributes +from datadog_api_client.v2.model.google_chat_target_audience_update_request_data import GoogleChatTargetAudienceUpdateRequestData +from datadog_api_client.v2.model.google_chat_target_audiences_response import GoogleChatTargetAudiencesResponse +from datadog_api_client.v2.model.google_chat_update_organization_handle_request import GoogleChatUpdateOrganizationHandleRequest +from datadog_api_client.v2.model.google_chat_update_organization_handle_request_attributes import GoogleChatUpdateOrganizationHandleRequestAttributes +from datadog_api_client.v2.model.google_chat_update_organization_handle_request_data import GoogleChatUpdateOrganizationHandleRequestData +from datadog_api_client.v2.model.google_docs_postmortem_settings import GoogleDocsPostmortemSettings +from datadog_api_client.v2.model.google_meet_configuration_reference import GoogleMeetConfigurationReference +from datadog_api_client.v2.model.google_meet_configuration_reference_data import GoogleMeetConfigurationReferenceData +from datadog_api_client.v2.model.governance_config_attributes import GovernanceConfigAttributes +from datadog_api_client.v2.model.governance_config_data import GovernanceConfigData +from datadog_api_client.v2.model.governance_config_response import GovernanceConfigResponse +from datadog_api_client.v2.model.governance_console_config_resource_type import GovernanceConsoleConfigResourceType +from datadog_api_client.v2.model.governance_control_attributes import GovernanceControlAttributes +from datadog_api_client.v2.model.governance_control_data import GovernanceControlData +from datadog_api_client.v2.model.governance_control_detection_assignment_source import GovernanceControlDetectionAssignmentSource +from datadog_api_client.v2.model.governance_control_detection_attributes import GovernanceControlDetectionAttributes +from datadog_api_client.v2.model.governance_control_detection_data import GovernanceControlDetectionData +from datadog_api_client.v2.model.governance_control_detection_resource_type import GovernanceControlDetectionResourceType +from datadog_api_client.v2.model.governance_control_detection_response import GovernanceControlDetectionResponse +from datadog_api_client.v2.model.governance_control_detection_state import GovernanceControlDetectionState +from datadog_api_client.v2.model.governance_control_detection_update_attributes import GovernanceControlDetectionUpdateAttributes +from datadog_api_client.v2.model.governance_control_detection_update_data import GovernanceControlDetectionUpdateData +from datadog_api_client.v2.model.governance_control_detection_update_request import GovernanceControlDetectionUpdateRequest +from datadog_api_client.v2.model.governance_control_detection_update_state import GovernanceControlDetectionUpdateState +from datadog_api_client.v2.model.governance_control_detections_response import GovernanceControlDetectionsResponse +from datadog_api_client.v2.model.governance_control_mitigation_definition import GovernanceControlMitigationDefinition +from datadog_api_client.v2.model.governance_control_parameter_definition import GovernanceControlParameterDefinition +from datadog_api_client.v2.model.governance_control_parameters_map import GovernanceControlParametersMap +from datadog_api_client.v2.model.governance_control_resource_type import GovernanceControlResourceType +from datadog_api_client.v2.model.governance_control_response import GovernanceControlResponse +from datadog_api_client.v2.model.governance_control_supported_value import GovernanceControlSupportedValue +from datadog_api_client.v2.model.governance_control_update_attributes import GovernanceControlUpdateAttributes +from datadog_api_client.v2.model.governance_control_update_data import GovernanceControlUpdateData +from datadog_api_client.v2.model.governance_control_update_request import GovernanceControlUpdateRequest +from datadog_api_client.v2.model.governance_controls_response import GovernanceControlsResponse +from datadog_api_client.v2.model.governance_insight_attributes import GovernanceInsightAttributes +from datadog_api_client.v2.model.governance_insight_audit_compute import GovernanceInsightAuditCompute +from datadog_api_client.v2.model.governance_insight_audit_query import GovernanceInsightAuditQuery +from datadog_api_client.v2.model.governance_insight_data import GovernanceInsightData +from datadog_api_client.v2.model.governance_insight_directionality import GovernanceInsightDirectionality +from datadog_api_client.v2.model.governance_insight_event_compute import GovernanceInsightEventCompute +from datadog_api_client.v2.model.governance_insight_event_query import GovernanceInsightEventQuery +from datadog_api_client.v2.model.governance_insight_metric_query import GovernanceInsightMetricQuery +from datadog_api_client.v2.model.governance_insight_percentage_query import GovernanceInsightPercentageQuery +from datadog_api_client.v2.model.governance_insight_query_config import GovernanceInsightQueryConfig +from datadog_api_client.v2.model.governance_insight_resource_type import GovernanceInsightResourceType +from datadog_api_client.v2.model.governance_insight_usage_query import GovernanceInsightUsageQuery +from datadog_api_client.v2.model.governance_insights_response import GovernanceInsightsResponse +from datadog_api_client.v2.model.governance_mitigation_request import GovernanceMitigationRequest +from datadog_api_client.v2.model.governance_mitigation_request_attributes import GovernanceMitigationRequestAttributes +from datadog_api_client.v2.model.governance_mitigation_request_data import GovernanceMitigationRequestData +from datadog_api_client.v2.model.governance_notification_settings_attributes import GovernanceNotificationSettingsAttributes +from datadog_api_client.v2.model.governance_notification_settings_data import GovernanceNotificationSettingsData +from datadog_api_client.v2.model.governance_notification_settings_resource_type import GovernanceNotificationSettingsResourceType +from datadog_api_client.v2.model.governance_notification_settings_response import GovernanceNotificationSettingsResponse +from datadog_api_client.v2.model.governance_notification_settings_update_attributes import GovernanceNotificationSettingsUpdateAttributes +from datadog_api_client.v2.model.governance_notification_settings_update_data import GovernanceNotificationSettingsUpdateData +from datadog_api_client.v2.model.governance_notification_settings_update_request import GovernanceNotificationSettingsUpdateRequest +from datadog_api_client.v2.model.grey_noise_api_key import GreyNoiseAPIKey +from datadog_api_client.v2.model.grey_noise_api_key_type import GreyNoiseAPIKeyType +from datadog_api_client.v2.model.grey_noise_api_key_update import GreyNoiseAPIKeyUpdate +from datadog_api_client.v2.model.grey_noise_credentials import GreyNoiseCredentials +from datadog_api_client.v2.model.grey_noise_credentials_update import GreyNoiseCredentialsUpdate +from datadog_api_client.v2.model.grey_noise_integration import GreyNoiseIntegration +from datadog_api_client.v2.model.grey_noise_integration_type import GreyNoiseIntegrationType +from datadog_api_client.v2.model.grey_noise_integration_update import GreyNoiseIntegrationUpdate +from datadog_api_client.v2.model.group_scalar_column import GroupScalarColumn +from datadog_api_client.v2.model.group_tags import GroupTags +from datadog_api_client.v2.model.guardrail_metric import GuardrailMetric +from datadog_api_client.v2.model.guardrail_metric_request import GuardrailMetricRequest +from datadog_api_client.v2.model.guardrail_trigger_action import GuardrailTriggerAction +from datadog_api_client.v2.model.http_body import HTTPBody +from datadog_api_client.v2.model.httpcd_gates_bad_request_response import HTTPCDGatesBadRequestResponse +from datadog_api_client.v2.model.httpcd_gates_not_found_response import HTTPCDGatesNotFoundResponse +from datadog_api_client.v2.model.httpcd_rules_not_found_response import HTTPCDRulesNotFoundResponse +from datadog_api_client.v2.model.httpci_app_error import HTTPCIAppError +from datadog_api_client.v2.model.httpci_app_errors import HTTPCIAppErrors +from datadog_api_client.v2.model.http_credentials import HTTPCredentials +from datadog_api_client.v2.model.http_credentials_update import HTTPCredentialsUpdate +from datadog_api_client.v2.model.http_header import HTTPHeader +from datadog_api_client.v2.model.http_header_update import HTTPHeaderUpdate +from datadog_api_client.v2.model.http_integration import HTTPIntegration +from datadog_api_client.v2.model.http_integration_type import HTTPIntegrationType +from datadog_api_client.v2.model.http_integration_update import HTTPIntegrationUpdate +from datadog_api_client.v2.model.http_log import HTTPLog +from datadog_api_client.v2.model.http_log_error import HTTPLogError +from datadog_api_client.v2.model.http_log_errors import HTTPLogErrors +from datadog_api_client.v2.model.http_log_item import HTTPLogItem +from datadog_api_client.v2.model.http_token import HTTPToken +from datadog_api_client.v2.model.http_token_auth import HTTPTokenAuth +from datadog_api_client.v2.model.http_token_auth_type import HTTPTokenAuthType +from datadog_api_client.v2.model.http_token_auth_update import HTTPTokenAuthUpdate +from datadog_api_client.v2.model.http_token_update import HTTPTokenUpdate +from datadog_api_client.v2.model.hamr_org_connection_attributes_request import HamrOrgConnectionAttributesRequest +from datadog_api_client.v2.model.hamr_org_connection_attributes_response import HamrOrgConnectionAttributesResponse +from datadog_api_client.v2.model.hamr_org_connection_data_request import HamrOrgConnectionDataRequest +from datadog_api_client.v2.model.hamr_org_connection_data_response import HamrOrgConnectionDataResponse +from datadog_api_client.v2.model.hamr_org_connection_request import HamrOrgConnectionRequest +from datadog_api_client.v2.model.hamr_org_connection_response import HamrOrgConnectionResponse +from datadog_api_client.v2.model.hamr_org_connection_status import HamrOrgConnectionStatus +from datadog_api_client.v2.model.hamr_org_connection_type import HamrOrgConnectionType +from datadog_api_client.v2.model.historical_job_data_type import HistoricalJobDataType +from datadog_api_client.v2.model.historical_job_list_meta import HistoricalJobListMeta +from datadog_api_client.v2.model.historical_job_options import HistoricalJobOptions +from datadog_api_client.v2.model.historical_job_query import HistoricalJobQuery +from datadog_api_client.v2.model.historical_job_response import HistoricalJobResponse +from datadog_api_client.v2.model.historical_job_response_attributes import HistoricalJobResponseAttributes +from datadog_api_client.v2.model.historical_job_response_data import HistoricalJobResponseData +from datadog_api_client.v2.model.historical_metrics_configuration_attributes import HistoricalMetricsConfigurationAttributes +from datadog_api_client.v2.model.historical_metrics_configuration_create_data import HistoricalMetricsConfigurationCreateData +from datadog_api_client.v2.model.historical_metrics_configuration_create_request import HistoricalMetricsConfigurationCreateRequest +from datadog_api_client.v2.model.historical_metrics_configuration_data import HistoricalMetricsConfigurationData +from datadog_api_client.v2.model.historical_metrics_configuration_response import HistoricalMetricsConfigurationResponse +from datadog_api_client.v2.model.historical_metrics_configuration_type import HistoricalMetricsConfigurationType +from datadog_api_client.v2.model.hourly_usage import HourlyUsage +from datadog_api_client.v2.model.hourly_usage_attributes import HourlyUsageAttributes +from datadog_api_client.v2.model.hourly_usage_measurement import HourlyUsageMeasurement +from datadog_api_client.v2.model.hourly_usage_metadata import HourlyUsageMetadata +from datadog_api_client.v2.model.hourly_usage_pagination import HourlyUsagePagination +from datadog_api_client.v2.model.hourly_usage_response import HourlyUsageResponse +from datadog_api_client.v2.model.hourly_usage_type import HourlyUsageType +from datadog_api_client.v2.model.il2_cpp_sourcemap_attributes import IL2CPPSourcemapAttributes +from datadog_api_client.v2.model.il2_cpp_sourcemap_data import IL2CPPSourcemapData +from datadog_api_client.v2.model.ios_sourcemap_attributes import IOSSourcemapAttributes +from datadog_api_client.v2.model.ios_sourcemap_data import IOSSourcemapData +from datadog_api_client.v2.model.ip_allowlist_attributes import IPAllowlistAttributes +from datadog_api_client.v2.model.ip_allowlist_data import IPAllowlistData +from datadog_api_client.v2.model.ip_allowlist_entry import IPAllowlistEntry +from datadog_api_client.v2.model.ip_allowlist_entry_attributes import IPAllowlistEntryAttributes +from datadog_api_client.v2.model.ip_allowlist_entry_data import IPAllowlistEntryData +from datadog_api_client.v2.model.ip_allowlist_entry_type import IPAllowlistEntryType +from datadog_api_client.v2.model.ip_allowlist_response import IPAllowlistResponse +from datadog_api_client.v2.model.ip_allowlist_type import IPAllowlistType +from datadog_api_client.v2.model.ip_allowlist_update_request import IPAllowlistUpdateRequest +from datadog_api_client.v2.model.idp_metadata_form_data import IdPMetadataFormData +from datadog_api_client.v2.model.identity_provider_attributes import IdentityProviderAttributes +from datadog_api_client.v2.model.identity_provider_data import IdentityProviderData +from datadog_api_client.v2.model.identity_provider_response import IdentityProviderResponse +from datadog_api_client.v2.model.identity_provider_type import IdentityProviderType +from datadog_api_client.v2.model.identity_provider_update_attributes import IdentityProviderUpdateAttributes +from datadog_api_client.v2.model.identity_provider_update_data import IdentityProviderUpdateData +from datadog_api_client.v2.model.identity_provider_update_request import IdentityProviderUpdateRequest +from datadog_api_client.v2.model.identity_providers_response import IdentityProvidersResponse +from datadog_api_client.v2.model.incident_ai_postmortem_data_attributes_response import IncidentAIPostmortemDataAttributesResponse +from datadog_api_client.v2.model.incident_ai_postmortem_data_response import IncidentAIPostmortemDataResponse +from datadog_api_client.v2.model.incident_ai_postmortem_response import IncidentAIPostmortemResponse +from datadog_api_client.v2.model.incident_ai_postmortem_response_type import IncidentAIPostmortemResponseType +from datadog_api_client.v2.model.incident_attachment_type import IncidentAttachmentType +from datadog_api_client.v2.model.incident_configuration_data_attributes_request import IncidentConfigurationDataAttributesRequest +from datadog_api_client.v2.model.incident_configuration_data_attributes_response import IncidentConfigurationDataAttributesResponse +from datadog_api_client.v2.model.incident_configuration_data_request import IncidentConfigurationDataRequest +from datadog_api_client.v2.model.incident_configuration_data_response import IncidentConfigurationDataResponse +from datadog_api_client.v2.model.incident_configuration_patch_data_attributes_request import IncidentConfigurationPatchDataAttributesRequest +from datadog_api_client.v2.model.incident_configuration_patch_data_request import IncidentConfigurationPatchDataRequest +from datadog_api_client.v2.model.incident_configuration_patch_request import IncidentConfigurationPatchRequest +from datadog_api_client.v2.model.incident_configuration_relationships import IncidentConfigurationRelationships +from datadog_api_client.v2.model.incident_configuration_request import IncidentConfigurationRequest +from datadog_api_client.v2.model.incident_configuration_response import IncidentConfigurationResponse +from datadog_api_client.v2.model.incident_configuration_type import IncidentConfigurationType +from datadog_api_client.v2.model.incident_create_attributes import IncidentCreateAttributes +from datadog_api_client.v2.model.incident_create_data import IncidentCreateData +from datadog_api_client.v2.model.incident_create_on_call_page_data_attributes_request import IncidentCreateOnCallPageDataAttributesRequest +from datadog_api_client.v2.model.incident_create_on_call_page_data_request import IncidentCreateOnCallPageDataRequest +from datadog_api_client.v2.model.incident_create_on_call_page_request import IncidentCreateOnCallPageRequest +from datadog_api_client.v2.model.incident_create_page_from_incident_data_attributes_request import IncidentCreatePageFromIncidentDataAttributesRequest +from datadog_api_client.v2.model.incident_create_page_from_incident_data_request import IncidentCreatePageFromIncidentDataRequest +from datadog_api_client.v2.model.incident_create_page_from_incident_request import IncidentCreatePageFromIncidentRequest +from datadog_api_client.v2.model.incident_create_page_from_incident_type import IncidentCreatePageFromIncidentType +from datadog_api_client.v2.model.incident_create_relationships import IncidentCreateRelationships +from datadog_api_client.v2.model.incident_create_request import IncidentCreateRequest +from datadog_api_client.v2.model.incident_field_attributes import IncidentFieldAttributes +from datadog_api_client.v2.model.incident_field_attributes_multiple_value import IncidentFieldAttributesMultipleValue +from datadog_api_client.v2.model.incident_field_attributes_single_value import IncidentFieldAttributesSingleValue +from datadog_api_client.v2.model.incident_field_attributes_single_value_type import IncidentFieldAttributesSingleValueType +from datadog_api_client.v2.model.incident_field_attributes_value_type import IncidentFieldAttributesValueType +from datadog_api_client.v2.model.incident_google_chat_configuration_data_attributes_request import IncidentGoogleChatConfigurationDataAttributesRequest +from datadog_api_client.v2.model.incident_google_chat_configuration_data_attributes_response import IncidentGoogleChatConfigurationDataAttributesResponse +from datadog_api_client.v2.model.incident_google_chat_configuration_data_request import IncidentGoogleChatConfigurationDataRequest +from datadog_api_client.v2.model.incident_google_chat_configuration_data_response import IncidentGoogleChatConfigurationDataResponse +from datadog_api_client.v2.model.incident_google_chat_configuration_patch_data_attributes_request import IncidentGoogleChatConfigurationPatchDataAttributesRequest +from datadog_api_client.v2.model.incident_google_chat_configuration_patch_data_request import IncidentGoogleChatConfigurationPatchDataRequest +from datadog_api_client.v2.model.incident_google_chat_configuration_patch_request import IncidentGoogleChatConfigurationPatchRequest +from datadog_api_client.v2.model.incident_google_chat_configuration_relationships import IncidentGoogleChatConfigurationRelationships +from datadog_api_client.v2.model.incident_google_chat_configuration_relationships_request import IncidentGoogleChatConfigurationRelationshipsRequest +from datadog_api_client.v2.model.incident_google_chat_configuration_request import IncidentGoogleChatConfigurationRequest +from datadog_api_client.v2.model.incident_google_chat_configuration_response import IncidentGoogleChatConfigurationResponse +from datadog_api_client.v2.model.incident_google_chat_configuration_type import IncidentGoogleChatConfigurationType +from datadog_api_client.v2.model.incident_google_meet_configuration_data_attributes_request import IncidentGoogleMeetConfigurationDataAttributesRequest +from datadog_api_client.v2.model.incident_google_meet_configuration_data_attributes_response import IncidentGoogleMeetConfigurationDataAttributesResponse +from datadog_api_client.v2.model.incident_google_meet_configuration_data_request import IncidentGoogleMeetConfigurationDataRequest +from datadog_api_client.v2.model.incident_google_meet_configuration_data_response import IncidentGoogleMeetConfigurationDataResponse +from datadog_api_client.v2.model.incident_google_meet_configuration_patch_data_attributes_request import IncidentGoogleMeetConfigurationPatchDataAttributesRequest +from datadog_api_client.v2.model.incident_google_meet_configuration_patch_data_request import IncidentGoogleMeetConfigurationPatchDataRequest +from datadog_api_client.v2.model.incident_google_meet_configuration_patch_request import IncidentGoogleMeetConfigurationPatchRequest +from datadog_api_client.v2.model.incident_google_meet_configuration_relationships import IncidentGoogleMeetConfigurationRelationships +from datadog_api_client.v2.model.incident_google_meet_configuration_relationships_request import IncidentGoogleMeetConfigurationRelationshipsRequest +from datadog_api_client.v2.model.incident_google_meet_configuration_request import IncidentGoogleMeetConfigurationRequest +from datadog_api_client.v2.model.incident_google_meet_configuration_response import IncidentGoogleMeetConfigurationResponse +from datadog_api_client.v2.model.incident_google_meet_configuration_type import IncidentGoogleMeetConfigurationType +from datadog_api_client.v2.model.incident_handle_attributes_fields import IncidentHandleAttributesFields +from datadog_api_client.v2.model.incident_handle_attributes_request import IncidentHandleAttributesRequest +from datadog_api_client.v2.model.incident_handle_attributes_response import IncidentHandleAttributesResponse +from datadog_api_client.v2.model.incident_handle_data_request import IncidentHandleDataRequest +from datadog_api_client.v2.model.incident_handle_data_response import IncidentHandleDataResponse +from datadog_api_client.v2.model.incident_handle_included_item_response import IncidentHandleIncludedItemResponse +from datadog_api_client.v2.model.incident_handle_relationship import IncidentHandleRelationship +from datadog_api_client.v2.model.incident_handle_relationship_data import IncidentHandleRelationshipData +from datadog_api_client.v2.model.incident_handle_relationships import IncidentHandleRelationships +from datadog_api_client.v2.model.incident_handle_relationships_request import IncidentHandleRelationshipsRequest +from datadog_api_client.v2.model.incident_handle_request import IncidentHandleRequest +from datadog_api_client.v2.model.incident_handle_response import IncidentHandleResponse +from datadog_api_client.v2.model.incident_handle_type import IncidentHandleType +from datadog_api_client.v2.model.incident_handles_response import IncidentHandlesResponse +from datadog_api_client.v2.model.incident_impact_attributes import IncidentImpactAttributes +from datadog_api_client.v2.model.incident_impact_create_attributes import IncidentImpactCreateAttributes +from datadog_api_client.v2.model.incident_impact_create_data import IncidentImpactCreateData +from datadog_api_client.v2.model.incident_impact_create_request import IncidentImpactCreateRequest +from datadog_api_client.v2.model.incident_impact_field_choice import IncidentImpactFieldChoice +from datadog_api_client.v2.model.incident_impact_field_data_attributes_request import IncidentImpactFieldDataAttributesRequest +from datadog_api_client.v2.model.incident_impact_field_data_attributes_response import IncidentImpactFieldDataAttributesResponse +from datadog_api_client.v2.model.incident_impact_field_data_request import IncidentImpactFieldDataRequest +from datadog_api_client.v2.model.incident_impact_field_data_response import IncidentImpactFieldDataResponse +from datadog_api_client.v2.model.incident_impact_field_relationships import IncidentImpactFieldRelationships +from datadog_api_client.v2.model.incident_impact_field_relationships_request import IncidentImpactFieldRelationshipsRequest +from datadog_api_client.v2.model.incident_impact_field_request import IncidentImpactFieldRequest +from datadog_api_client.v2.model.incident_impact_field_response import IncidentImpactFieldResponse +from datadog_api_client.v2.model.incident_impact_field_type import IncidentImpactFieldType +from datadog_api_client.v2.model.incident_impact_field_value_type import IncidentImpactFieldValueType +from datadog_api_client.v2.model.incident_impact_fields_object import IncidentImpactFieldsObject +from datadog_api_client.v2.model.incident_impact_fields_response import IncidentImpactFieldsResponse +from datadog_api_client.v2.model.incident_impact_patch_attributes import IncidentImpactPatchAttributes +from datadog_api_client.v2.model.incident_impact_patch_data import IncidentImpactPatchData +from datadog_api_client.v2.model.incident_impact_patch_request import IncidentImpactPatchRequest +from datadog_api_client.v2.model.incident_impact_related_object import IncidentImpactRelatedObject +from datadog_api_client.v2.model.incident_impact_relationships import IncidentImpactRelationships +from datadog_api_client.v2.model.incident_impact_response import IncidentImpactResponse +from datadog_api_client.v2.model.incident_impact_response_data import IncidentImpactResponseData +from datadog_api_client.v2.model.incident_impact_type import IncidentImpactType +from datadog_api_client.v2.model.incident_impacts_response import IncidentImpactsResponse +from datadog_api_client.v2.model.incident_impacts_type import IncidentImpactsType +from datadog_api_client.v2.model.incident_import_field_attributes import IncidentImportFieldAttributes +from datadog_api_client.v2.model.incident_import_field_attributes_multiple_value import IncidentImportFieldAttributesMultipleValue +from datadog_api_client.v2.model.incident_import_field_attributes_single_value import IncidentImportFieldAttributesSingleValue +from datadog_api_client.v2.model.incident_import_related_object import IncidentImportRelatedObject +from datadog_api_client.v2.model.incident_import_relationships import IncidentImportRelationships +from datadog_api_client.v2.model.incident_import_request import IncidentImportRequest +from datadog_api_client.v2.model.incident_import_request_attributes import IncidentImportRequestAttributes +from datadog_api_client.v2.model.incident_import_request_data import IncidentImportRequestData +from datadog_api_client.v2.model.incident_import_response import IncidentImportResponse +from datadog_api_client.v2.model.incident_import_response_attributes import IncidentImportResponseAttributes +from datadog_api_client.v2.model.incident_import_response_data import IncidentImportResponseData +from datadog_api_client.v2.model.incident_import_response_included_item import IncidentImportResponseIncludedItem +from datadog_api_client.v2.model.incident_import_response_relationships import IncidentImportResponseRelationships +from datadog_api_client.v2.model.incident_import_visibility import IncidentImportVisibility +from datadog_api_client.v2.model.incident_integration_metadata_attributes import IncidentIntegrationMetadataAttributes +from datadog_api_client.v2.model.incident_integration_metadata_create_data import IncidentIntegrationMetadataCreateData +from datadog_api_client.v2.model.incident_integration_metadata_create_request import IncidentIntegrationMetadataCreateRequest +from datadog_api_client.v2.model.incident_integration_metadata_list_response import IncidentIntegrationMetadataListResponse +from datadog_api_client.v2.model.incident_integration_metadata_metadata import IncidentIntegrationMetadataMetadata +from datadog_api_client.v2.model.incident_integration_metadata_patch_data import IncidentIntegrationMetadataPatchData +from datadog_api_client.v2.model.incident_integration_metadata_patch_request import IncidentIntegrationMetadataPatchRequest +from datadog_api_client.v2.model.incident_integration_metadata_response import IncidentIntegrationMetadataResponse +from datadog_api_client.v2.model.incident_integration_metadata_response_data import IncidentIntegrationMetadataResponseData +from datadog_api_client.v2.model.incident_integration_metadata_response_included_item import IncidentIntegrationMetadataResponseIncludedItem +from datadog_api_client.v2.model.incident_integration_metadata_type import IncidentIntegrationMetadataType +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 +from datadog_api_client.v2.model.incident_notification_template_array_meta_page import IncidentNotificationTemplateArrayMetaPage +from datadog_api_client.v2.model.incident_notification_template_attributes import IncidentNotificationTemplateAttributes +from datadog_api_client.v2.model.incident_notification_template_create_attributes import IncidentNotificationTemplateCreateAttributes +from datadog_api_client.v2.model.incident_notification_template_create_data import IncidentNotificationTemplateCreateData +from datadog_api_client.v2.model.incident_notification_template_create_data_relationships import IncidentNotificationTemplateCreateDataRelationships +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 +from datadog_api_client.v2.model.incident_notification_template_response_data import IncidentNotificationTemplateResponseData +from datadog_api_client.v2.model.incident_notification_template_type import IncidentNotificationTemplateType +from datadog_api_client.v2.model.incident_notification_template_update_attributes import IncidentNotificationTemplateUpdateAttributes +from datadog_api_client.v2.model.incident_notification_template_update_data import IncidentNotificationTemplateUpdateData +from datadog_api_client.v2.model.incident_on_call_page_data_attributes_request import IncidentOnCallPageDataAttributesRequest +from datadog_api_client.v2.model.incident_on_call_page_data_request import IncidentOnCallPageDataRequest +from datadog_api_client.v2.model.incident_on_call_page_link_request import IncidentOnCallPageLinkRequest +from datadog_api_client.v2.model.incident_on_call_page_target import IncidentOnCallPageTarget +from datadog_api_client.v2.model.incident_on_call_page_type import IncidentOnCallPageType +from datadog_api_client.v2.model.incident_org_settings_data_attributes_response import IncidentOrgSettingsDataAttributesResponse +from datadog_api_client.v2.model.incident_org_settings_data_response import IncidentOrgSettingsDataResponse +from datadog_api_client.v2.model.incident_org_settings_list_response import IncidentOrgSettingsListResponse +from datadog_api_client.v2.model.incident_org_settings_meta import IncidentOrgSettingsMeta +from datadog_api_client.v2.model.incident_org_settings_relationships import IncidentOrgSettingsRelationships +from datadog_api_client.v2.model.incident_org_settings_response import IncidentOrgSettingsResponse +from datadog_api_client.v2.model.incident_org_settings_type import IncidentOrgSettingsType +from datadog_api_client.v2.model.incident_page_role_reference import IncidentPageRoleReference +from datadog_api_client.v2.model.incident_page_role_type import IncidentPageRoleType +from datadog_api_client.v2.model.incident_page_target import IncidentPageTarget +from datadog_api_client.v2.model.incident_page_target_type import IncidentPageTargetType +from datadog_api_client.v2.model.incident_page_uuid_data_response import IncidentPageUUIDDataResponse +from datadog_api_client.v2.model.incident_page_uuid_response import IncidentPageUUIDResponse +from datadog_api_client.v2.model.incident_page_uuid_type import IncidentPageUUIDType +from datadog_api_client.v2.model.incident_postmortem_type import IncidentPostmortemType +from datadog_api_client.v2.model.incident_related_object import IncidentRelatedObject +from datadog_api_client.v2.model.incident_relationship_data import IncidentRelationshipData +from datadog_api_client.v2.model.incident_resource_type import IncidentResourceType +from datadog_api_client.v2.model.incident_responder_data_attributes_response import IncidentResponderDataAttributesResponse +from datadog_api_client.v2.model.incident_responder_data_request import IncidentResponderDataRequest +from datadog_api_client.v2.model.incident_responder_data_response import IncidentResponderDataResponse +from datadog_api_client.v2.model.incident_responder_relationships import IncidentResponderRelationships +from datadog_api_client.v2.model.incident_responder_relationships_request import IncidentResponderRelationshipsRequest +from datadog_api_client.v2.model.incident_responder_request import IncidentResponderRequest +from datadog_api_client.v2.model.incident_responder_response import IncidentResponderResponse +from datadog_api_client.v2.model.incident_responder_role_assignment_relationship_data import IncidentResponderRoleAssignmentRelationshipData +from datadog_api_client.v2.model.incident_responder_role_assignments_relationship import IncidentResponderRoleAssignmentsRelationship +from datadog_api_client.v2.model.incident_responder_type import IncidentResponderType +from datadog_api_client.v2.model.incident_responder_user_relationship import IncidentResponderUserRelationship +from datadog_api_client.v2.model.incident_responder_user_relationship_data import IncidentResponderUserRelationshipData +from datadog_api_client.v2.model.incident_responders_response import IncidentRespondersResponse +from datadog_api_client.v2.model.incident_responders_type import IncidentRespondersType +from datadog_api_client.v2.model.incident_response import IncidentResponse +from datadog_api_client.v2.model.incident_response_attributes import IncidentResponseAttributes +from datadog_api_client.v2.model.incident_response_data import IncidentResponseData +from datadog_api_client.v2.model.incident_response_included_item import IncidentResponseIncludedItem +from datadog_api_client.v2.model.incident_response_meta import IncidentResponseMeta +from datadog_api_client.v2.model.incident_response_meta_pagination import IncidentResponseMetaPagination +from datadog_api_client.v2.model.incident_response_relationships import IncidentResponseRelationships +from datadog_api_client.v2.model.incident_rule_condition import IncidentRuleCondition +from datadog_api_client.v2.model.incident_rule_data_attributes_request import IncidentRuleDataAttributesRequest +from datadog_api_client.v2.model.incident_rule_data_attributes_response import IncidentRuleDataAttributesResponse +from datadog_api_client.v2.model.incident_rule_data_request import IncidentRuleDataRequest +from datadog_api_client.v2.model.incident_rule_data_response import IncidentRuleDataResponse +from datadog_api_client.v2.model.incident_rule_execution_type import IncidentRuleExecutionType +from datadog_api_client.v2.model.incident_rule_patch_data_attributes_request import IncidentRulePatchDataAttributesRequest +from datadog_api_client.v2.model.incident_rule_patch_data_request import IncidentRulePatchDataRequest +from datadog_api_client.v2.model.incident_rule_patch_request import IncidentRulePatchRequest +from datadog_api_client.v2.model.incident_rule_query_condition import IncidentRuleQueryCondition +from datadog_api_client.v2.model.incident_rule_request import IncidentRuleRequest +from datadog_api_client.v2.model.incident_rule_response import IncidentRuleResponse +from datadog_api_client.v2.model.incident_rule_response_type import IncidentRuleResponseType +from datadog_api_client.v2.model.incident_rule_task_id_type import IncidentRuleTaskIDType +from datadog_api_client.v2.model.incident_rule_trigger_type import IncidentRuleTriggerType +from datadog_api_client.v2.model.incident_rule_type import IncidentRuleType +from datadog_api_client.v2.model.incident_rules_response import IncidentRulesResponse +from datadog_api_client.v2.model.incident_search_response import IncidentSearchResponse +from datadog_api_client.v2.model.incident_search_response_attributes import IncidentSearchResponseAttributes +from datadog_api_client.v2.model.incident_search_response_data import IncidentSearchResponseData +from datadog_api_client.v2.model.incident_search_response_facets_data import IncidentSearchResponseFacetsData +from datadog_api_client.v2.model.incident_search_response_field_facet_data import IncidentSearchResponseFieldFacetData +from datadog_api_client.v2.model.incident_search_response_incidents_data import IncidentSearchResponseIncidentsData +from datadog_api_client.v2.model.incident_search_response_meta import IncidentSearchResponseMeta +from datadog_api_client.v2.model.incident_search_response_numeric_facet_data import IncidentSearchResponseNumericFacetData +from datadog_api_client.v2.model.incident_search_response_numeric_facet_data_aggregates import IncidentSearchResponseNumericFacetDataAggregates +from datadog_api_client.v2.model.incident_search_response_property_field_facet_data import IncidentSearchResponsePropertyFieldFacetData +from datadog_api_client.v2.model.incident_search_response_user_facet_data import IncidentSearchResponseUserFacetData +from datadog_api_client.v2.model.incident_search_results_type import IncidentSearchResultsType +from datadog_api_client.v2.model.incident_search_sort_order import IncidentSearchSortOrder +from datadog_api_client.v2.model.incident_service_now_record_data_attributes_request import IncidentServiceNowRecordDataAttributesRequest +from datadog_api_client.v2.model.incident_service_now_record_data_request import IncidentServiceNowRecordDataRequest +from datadog_api_client.v2.model.incident_service_now_record_prompt_type import IncidentServiceNowRecordPromptType +from datadog_api_client.v2.model.incident_service_now_record_request import IncidentServiceNowRecordRequest +from datadog_api_client.v2.model.incident_severity import IncidentSeverity +from datadog_api_client.v2.model.incident_timeline_cell_create_attributes import IncidentTimelineCellCreateAttributes +from datadog_api_client.v2.model.incident_timeline_cell_markdown_content_type import IncidentTimelineCellMarkdownContentType +from datadog_api_client.v2.model.incident_timeline_cell_markdown_create_attributes import IncidentTimelineCellMarkdownCreateAttributes +from datadog_api_client.v2.model.incident_timeline_cell_markdown_create_attributes_content import IncidentTimelineCellMarkdownCreateAttributesContent +from datadog_api_client.v2.model.incident_timestamp_override_data_attributes_request import IncidentTimestampOverrideDataAttributesRequest +from datadog_api_client.v2.model.incident_timestamp_override_data_attributes_response import IncidentTimestampOverrideDataAttributesResponse +from datadog_api_client.v2.model.incident_timestamp_override_data_request import IncidentTimestampOverrideDataRequest +from datadog_api_client.v2.model.incident_timestamp_override_data_response import IncidentTimestampOverrideDataResponse +from datadog_api_client.v2.model.incident_timestamp_override_patch_data_attributes_request import IncidentTimestampOverridePatchDataAttributesRequest +from datadog_api_client.v2.model.incident_timestamp_override_patch_data_request import IncidentTimestampOverridePatchDataRequest +from datadog_api_client.v2.model.incident_timestamp_override_patch_request import IncidentTimestampOverridePatchRequest +from datadog_api_client.v2.model.incident_timestamp_override_relationships import IncidentTimestampOverrideRelationships +from datadog_api_client.v2.model.incident_timestamp_override_request import IncidentTimestampOverrideRequest +from datadog_api_client.v2.model.incident_timestamp_override_response import IncidentTimestampOverrideResponse +from datadog_api_client.v2.model.incident_timestamp_override_type import IncidentTimestampOverrideType +from datadog_api_client.v2.model.incident_timestamp_overrides_response import IncidentTimestampOverridesResponse +from datadog_api_client.v2.model.incident_timestamp_type import IncidentTimestampType +from datadog_api_client.v2.model.incident_todo_anonymous_assignee import IncidentTodoAnonymousAssignee +from datadog_api_client.v2.model.incident_todo_anonymous_assignee_source import IncidentTodoAnonymousAssigneeSource +from datadog_api_client.v2.model.incident_todo_assignee import IncidentTodoAssignee +from datadog_api_client.v2.model.incident_todo_assignee_array import IncidentTodoAssigneeArray +from datadog_api_client.v2.model.incident_todo_attributes import IncidentTodoAttributes +from datadog_api_client.v2.model.incident_todo_create_data import IncidentTodoCreateData +from datadog_api_client.v2.model.incident_todo_create_request import IncidentTodoCreateRequest +from datadog_api_client.v2.model.incident_todo_list_response import IncidentTodoListResponse +from datadog_api_client.v2.model.incident_todo_patch_data import IncidentTodoPatchData +from datadog_api_client.v2.model.incident_todo_patch_request import IncidentTodoPatchRequest +from datadog_api_client.v2.model.incident_todo_relationships import IncidentTodoRelationships +from datadog_api_client.v2.model.incident_todo_response import IncidentTodoResponse +from datadog_api_client.v2.model.incident_todo_response_data import IncidentTodoResponseData +from datadog_api_client.v2.model.incident_todo_response_included_item import IncidentTodoResponseIncludedItem +from datadog_api_client.v2.model.incident_todo_type import IncidentTodoType +from datadog_api_client.v2.model.incident_trigger import IncidentTrigger +from datadog_api_client.v2.model.incident_trigger_wrapper import IncidentTriggerWrapper +from datadog_api_client.v2.model.incident_type import IncidentType +from datadog_api_client.v2.model.incident_type_attributes import IncidentTypeAttributes +from datadog_api_client.v2.model.incident_type_configuration import IncidentTypeConfiguration +from datadog_api_client.v2.model.incident_type_create_data import IncidentTypeCreateData +from datadog_api_client.v2.model.incident_type_create_request import IncidentTypeCreateRequest +from datadog_api_client.v2.model.incident_type_list_response import IncidentTypeListResponse +from datadog_api_client.v2.model.incident_type_object import IncidentTypeObject +from datadog_api_client.v2.model.incident_type_patch_data import IncidentTypePatchData +from datadog_api_client.v2.model.incident_type_patch_request import IncidentTypePatchRequest +from datadog_api_client.v2.model.incident_type_relationships import IncidentTypeRelationships +from datadog_api_client.v2.model.incident_type_response import IncidentTypeResponse +from datadog_api_client.v2.model.incident_type_slug_source import IncidentTypeSlugSource +from datadog_api_client.v2.model.incident_type_type import IncidentTypeType +from datadog_api_client.v2.model.incident_type_update_attributes import IncidentTypeUpdateAttributes +from datadog_api_client.v2.model.incident_update_attributes import IncidentUpdateAttributes +from datadog_api_client.v2.model.incident_update_data import IncidentUpdateData +from datadog_api_client.v2.model.incident_update_relationships import IncidentUpdateRelationships +from datadog_api_client.v2.model.incident_update_request import IncidentUpdateRequest +from datadog_api_client.v2.model.incident_user_attributes import IncidentUserAttributes +from datadog_api_client.v2.model.incident_user_data import IncidentUserData +from datadog_api_client.v2.model.incident_user_defined_field_attributes_create_request import IncidentUserDefinedFieldAttributesCreateRequest +from datadog_api_client.v2.model.incident_user_defined_field_attributes_response import IncidentUserDefinedFieldAttributesResponse +from datadog_api_client.v2.model.incident_user_defined_field_attributes_update_request import IncidentUserDefinedFieldAttributesUpdateRequest +from datadog_api_client.v2.model.incident_user_defined_field_category import IncidentUserDefinedFieldCategory +from datadog_api_client.v2.model.incident_user_defined_field_collected import IncidentUserDefinedFieldCollected +from datadog_api_client.v2.model.incident_user_defined_field_create_data import IncidentUserDefinedFieldCreateData +from datadog_api_client.v2.model.incident_user_defined_field_create_relationships import IncidentUserDefinedFieldCreateRelationships +from datadog_api_client.v2.model.incident_user_defined_field_create_request import IncidentUserDefinedFieldCreateRequest +from datadog_api_client.v2.model.incident_user_defined_field_field_type import IncidentUserDefinedFieldFieldType +from datadog_api_client.v2.model.incident_user_defined_field_list_meta import IncidentUserDefinedFieldListMeta +from datadog_api_client.v2.model.incident_user_defined_field_list_response import IncidentUserDefinedFieldListResponse +from datadog_api_client.v2.model.incident_user_defined_field_metadata import IncidentUserDefinedFieldMetadata +from datadog_api_client.v2.model.incident_user_defined_field_relationships import IncidentUserDefinedFieldRelationships +from datadog_api_client.v2.model.incident_user_defined_field_response import IncidentUserDefinedFieldResponse +from datadog_api_client.v2.model.incident_user_defined_field_response_data import IncidentUserDefinedFieldResponseData +from datadog_api_client.v2.model.incident_user_defined_field_type import IncidentUserDefinedFieldType +from datadog_api_client.v2.model.incident_user_defined_field_update_data import IncidentUserDefinedFieldUpdateData +from datadog_api_client.v2.model.incident_user_defined_field_update_request import IncidentUserDefinedFieldUpdateRequest +from datadog_api_client.v2.model.incident_user_defined_field_valid_value import IncidentUserDefinedFieldValidValue +from datadog_api_client.v2.model.incident_user_defined_role_data_attributes_request import IncidentUserDefinedRoleDataAttributesRequest +from datadog_api_client.v2.model.incident_user_defined_role_data_attributes_response import IncidentUserDefinedRoleDataAttributesResponse +from datadog_api_client.v2.model.incident_user_defined_role_data_request import IncidentUserDefinedRoleDataRequest +from datadog_api_client.v2.model.incident_user_defined_role_data_response import IncidentUserDefinedRoleDataResponse +from datadog_api_client.v2.model.incident_user_defined_role_incident_type_relationship import IncidentUserDefinedRoleIncidentTypeRelationship +from datadog_api_client.v2.model.incident_user_defined_role_incident_type_relationship_data import IncidentUserDefinedRoleIncidentTypeRelationshipData +from datadog_api_client.v2.model.incident_user_defined_role_included_item import IncidentUserDefinedRoleIncludedItem +from datadog_api_client.v2.model.incident_user_defined_role_patch_data_attributes_request import IncidentUserDefinedRolePatchDataAttributesRequest +from datadog_api_client.v2.model.incident_user_defined_role_patch_data_request import IncidentUserDefinedRolePatchDataRequest +from datadog_api_client.v2.model.incident_user_defined_role_patch_request import IncidentUserDefinedRolePatchRequest +from datadog_api_client.v2.model.incident_user_defined_role_policy import IncidentUserDefinedRolePolicy +from datadog_api_client.v2.model.incident_user_defined_role_relationships_request import IncidentUserDefinedRoleRelationshipsRequest +from datadog_api_client.v2.model.incident_user_defined_role_relationships_response import IncidentUserDefinedRoleRelationshipsResponse +from datadog_api_client.v2.model.incident_user_defined_role_request import IncidentUserDefinedRoleRequest +from datadog_api_client.v2.model.incident_user_defined_role_response import IncidentUserDefinedRoleResponse +from datadog_api_client.v2.model.incident_user_defined_role_type import IncidentUserDefinedRoleType +from datadog_api_client.v2.model.incident_user_defined_roles_response import IncidentUserDefinedRolesResponse +from datadog_api_client.v2.model.incidents_response import IncidentsResponse +from datadog_api_client.v2.model.include_type import IncludeType +from datadog_api_client.v2.model.input_schema import InputSchema +from datadog_api_client.v2.model.input_schema_parameters import InputSchemaParameters +from datadog_api_client.v2.model.input_schema_parameters_type import InputSchemaParametersType +from datadog_api_client.v2.model.intake_payload_accepted import IntakePayloadAccepted +from datadog_api_client.v2.model.integration import Integration +from datadog_api_client.v2.model.integration_attributes import IntegrationAttributes +from datadog_api_client.v2.model.integration_incident import IntegrationIncident +from datadog_api_client.v2.model.integration_incident_field_mappings_items import IntegrationIncidentFieldMappingsItems +from datadog_api_client.v2.model.integration_incident_severity_config import IntegrationIncidentSeverityConfig +from datadog_api_client.v2.model.integration_jira import IntegrationJira +from datadog_api_client.v2.model.integration_jira_auto_creation import IntegrationJiraAutoCreation +from datadog_api_client.v2.model.integration_jira_metadata import IntegrationJiraMetadata +from datadog_api_client.v2.model.integration_jira_sync import IntegrationJiraSync +from datadog_api_client.v2.model.integration_jira_sync_due_date import IntegrationJiraSyncDueDate +from datadog_api_client.v2.model.integration_jira_sync_properties import IntegrationJiraSyncProperties +from datadog_api_client.v2.model.integration_jira_sync_properties_custom_fields_additional_properties import IntegrationJiraSyncPropertiesCustomFieldsAdditionalProperties +from datadog_api_client.v2.model.integration_links import IntegrationLinks +from datadog_api_client.v2.model.integration_monitor import IntegrationMonitor +from datadog_api_client.v2.model.integration_on_call import IntegrationOnCall +from datadog_api_client.v2.model.integration_on_call_escalation_queries_items import IntegrationOnCallEscalationQueriesItems +from datadog_api_client.v2.model.integration_on_call_escalation_queries_items_target import IntegrationOnCallEscalationQueriesItemsTarget +from datadog_api_client.v2.model.integration_service_now import IntegrationServiceNow +from datadog_api_client.v2.model.integration_service_now_auto_creation import IntegrationServiceNowAutoCreation +from datadog_api_client.v2.model.integration_service_now_sync_config import IntegrationServiceNowSyncConfig +from datadog_api_client.v2.model.integration_service_now_sync_config139772721534496 import IntegrationServiceNowSyncConfig139772721534496 +from datadog_api_client.v2.model.integration_service_now_sync_config_priority import IntegrationServiceNowSyncConfigPriority +from datadog_api_client.v2.model.integration_type import IntegrationType +from datadog_api_client.v2.model.interface_attributes import InterfaceAttributes +from datadog_api_client.v2.model.interface_attributes_status import InterfaceAttributesStatus +from datadog_api_client.v2.model.investigation_conclusion import InvestigationConclusion +from datadog_api_client.v2.model.investigation_type import InvestigationType +from datadog_api_client.v2.model.io_c_explorer_list_response import IoCExplorerListResponse +from datadog_api_client.v2.model.io_c_explorer_list_response_attributes import IoCExplorerListResponseAttributes +from datadog_api_client.v2.model.io_c_explorer_list_response_data import IoCExplorerListResponseData +from datadog_api_client.v2.model.io_c_explorer_list_response_metadata import IoCExplorerListResponseMetadata +from datadog_api_client.v2.model.io_c_explorer_list_response_paging import IoCExplorerListResponsePaging +from datadog_api_client.v2.model.io_c_geo_location import IoCGeoLocation +from datadog_api_client.v2.model.io_c_indicator import IoCIndicator +from datadog_api_client.v2.model.io_c_indicator_detailed import IoCIndicatorDetailed +from datadog_api_client.v2.model.io_c_score_effect import IoCScoreEffect +from datadog_api_client.v2.model.io_c_signal_severity_count import IoCSignalSeverityCount +from datadog_api_client.v2.model.io_c_source import IoCSource +from datadog_api_client.v2.model.io_c_triage_event import IoCTriageEvent +from datadog_api_client.v2.model.io_c_triage_state import IoCTriageState +from datadog_api_client.v2.model.io_c_triage_write_request import IoCTriageWriteRequest +from datadog_api_client.v2.model.io_c_triage_write_request_attributes import IoCTriageWriteRequestAttributes +from datadog_api_client.v2.model.io_c_triage_write_request_data import IoCTriageWriteRequestData +from datadog_api_client.v2.model.io_c_triage_write_response import IoCTriageWriteResponse +from datadog_api_client.v2.model.io_c_triage_write_response_attributes import IoCTriageWriteResponseAttributes +from datadog_api_client.v2.model.io_c_triage_write_response_data import IoCTriageWriteResponseData +from datadog_api_client.v2.model.issue import Issue +from datadog_api_client.v2.model.issue_assignee_relationship import IssueAssigneeRelationship +from datadog_api_client.v2.model.issue_attributes import IssueAttributes +from datadog_api_client.v2.model.issue_case import IssueCase +from datadog_api_client.v2.model.issue_case_attributes import IssueCaseAttributes +from datadog_api_client.v2.model.issue_case_insight import IssueCaseInsight +from datadog_api_client.v2.model.issue_case_jira_issue import IssueCaseJiraIssue +from datadog_api_client.v2.model.issue_case_jira_issue_result import IssueCaseJiraIssueResult +from datadog_api_client.v2.model.issue_case_linear_issue import IssueCaseLinearIssue +from datadog_api_client.v2.model.issue_case_linear_issue_result import IssueCaseLinearIssueResult +from datadog_api_client.v2.model.issue_case_reference import IssueCaseReference +from datadog_api_client.v2.model.issue_case_relationship import IssueCaseRelationship +from datadog_api_client.v2.model.issue_case_relationships import IssueCaseRelationships +from datadog_api_client.v2.model.issue_case_resource_type import IssueCaseResourceType +from datadog_api_client.v2.model.issue_included import IssueIncluded +from datadog_api_client.v2.model.issue_language import IssueLanguage +from datadog_api_client.v2.model.issue_platform import IssuePlatform +from datadog_api_client.v2.model.issue_reference import IssueReference +from datadog_api_client.v2.model.issue_regression import IssueRegression +from datadog_api_client.v2.model.issue_relationships import IssueRelationships +from datadog_api_client.v2.model.issue_response import IssueResponse +from datadog_api_client.v2.model.issue_state import IssueState +from datadog_api_client.v2.model.issue_team import IssueTeam +from datadog_api_client.v2.model.issue_team_attributes import IssueTeamAttributes +from datadog_api_client.v2.model.issue_team_owners_relationship import IssueTeamOwnersRelationship +from datadog_api_client.v2.model.issue_team_reference import IssueTeamReference +from datadog_api_client.v2.model.issue_team_type import IssueTeamType +from datadog_api_client.v2.model.issue_type import IssueType +from datadog_api_client.v2.model.issue_update_assignee_request import IssueUpdateAssigneeRequest +from datadog_api_client.v2.model.issue_update_assignee_request_data import IssueUpdateAssigneeRequestData +from datadog_api_client.v2.model.issue_update_assignee_request_data_type import IssueUpdateAssigneeRequestDataType +from datadog_api_client.v2.model.issue_update_state_request import IssueUpdateStateRequest +from datadog_api_client.v2.model.issue_update_state_request_data import IssueUpdateStateRequestData +from datadog_api_client.v2.model.issue_update_state_request_data_attributes import IssueUpdateStateRequestDataAttributes +from datadog_api_client.v2.model.issue_update_state_request_data_type import IssueUpdateStateRequestDataType +from datadog_api_client.v2.model.issue_user import IssueUser +from datadog_api_client.v2.model.issue_user_attributes import IssueUserAttributes +from datadog_api_client.v2.model.issue_user_reference import IssueUserReference +from datadog_api_client.v2.model.issue_user_type import IssueUserType +from datadog_api_client.v2.model.issues_search_request import IssuesSearchRequest +from datadog_api_client.v2.model.issues_search_request_data import IssuesSearchRequestData +from datadog_api_client.v2.model.issues_search_request_data_attributes import IssuesSearchRequestDataAttributes +from datadog_api_client.v2.model.issues_search_request_data_attributes_order_by import IssuesSearchRequestDataAttributesOrderBy +from datadog_api_client.v2.model.issues_search_request_data_attributes_persona import IssuesSearchRequestDataAttributesPersona +from datadog_api_client.v2.model.issues_search_request_data_attributes_track import IssuesSearchRequestDataAttributesTrack +from datadog_api_client.v2.model.issues_search_request_data_type import IssuesSearchRequestDataType +from datadog_api_client.v2.model.issues_search_response import IssuesSearchResponse +from datadog_api_client.v2.model.issues_search_result import IssuesSearchResult +from datadog_api_client.v2.model.issues_search_result_attributes import IssuesSearchResultAttributes +from datadog_api_client.v2.model.issues_search_result_included import IssuesSearchResultIncluded +from datadog_api_client.v2.model.issues_search_result_issue_relationship import IssuesSearchResultIssueRelationship +from datadog_api_client.v2.model.issues_search_result_relationships import IssuesSearchResultRelationships +from datadog_api_client.v2.model.issues_search_result_type import IssuesSearchResultType +from datadog_api_client.v2.model.item_api_payload import ItemApiPayload +from datadog_api_client.v2.model.item_api_payload_array import ItemApiPayloadArray +from datadog_api_client.v2.model.item_api_payload_data import ItemApiPayloadData +from datadog_api_client.v2.model.item_api_payload_data_attributes import ItemApiPayloadDataAttributes +from datadog_api_client.v2.model.item_api_payload_data_attributes_value import ItemApiPayloadDataAttributesValue +from datadog_api_client.v2.model.item_api_payload_meta import ItemApiPayloadMeta +from datadog_api_client.v2.model.item_api_payload_meta_page import ItemApiPayloadMetaPage +from datadog_api_client.v2.model.item_api_payload_meta_schema import ItemApiPayloadMetaSchema +from datadog_api_client.v2.model.item_api_payload_meta_schema_field import ItemApiPayloadMetaSchemaField +from datadog_api_client.v2.model.jsonapi_error_item import JSONAPIErrorItem +from datadog_api_client.v2.model.jsonapi_error_item_source import JSONAPIErrorItemSource +from datadog_api_client.v2.model.jsonapi_error_response import JSONAPIErrorResponse +from datadog_api_client.v2.model.js_sourcemap_attributes import JSSourcemapAttributes +from datadog_api_client.v2.model.js_sourcemap_data import JSSourcemapData +from datadog_api_client.v2.model.jvm_sourcemap_attributes import JVMSourcemapAttributes +from datadog_api_client.v2.model.jvm_sourcemap_data import JVMSourcemapData +from datadog_api_client.v2.model.jira_account_attributes import JiraAccountAttributes +from datadog_api_client.v2.model.jira_account_data import JiraAccountData +from datadog_api_client.v2.model.jira_account_relationship import JiraAccountRelationship +from datadog_api_client.v2.model.jira_account_type import JiraAccountType +from datadog_api_client.v2.model.jira_accounts_meta import JiraAccountsMeta +from datadog_api_client.v2.model.jira_accounts_response import JiraAccountsResponse +from datadog_api_client.v2.model.jira_integration_metadata import JiraIntegrationMetadata +from datadog_api_client.v2.model.jira_integration_metadata_issues_item import JiraIntegrationMetadataIssuesItem +from datadog_api_client.v2.model.jira_issue import JiraIssue +from datadog_api_client.v2.model.jira_issue_create_attributes import JiraIssueCreateAttributes +from datadog_api_client.v2.model.jira_issue_create_data import JiraIssueCreateData +from datadog_api_client.v2.model.jira_issue_create_request import JiraIssueCreateRequest +from datadog_api_client.v2.model.jira_issue_link_attributes import JiraIssueLinkAttributes +from datadog_api_client.v2.model.jira_issue_link_data import JiraIssueLinkData +from datadog_api_client.v2.model.jira_issue_link_request import JiraIssueLinkRequest +from datadog_api_client.v2.model.jira_issue_resource_type import JiraIssueResourceType +from datadog_api_client.v2.model.jira_issue_result import JiraIssueResult +from datadog_api_client.v2.model.jira_issue_template_create_request import JiraIssueTemplateCreateRequest +from datadog_api_client.v2.model.jira_issue_template_create_request_attributes import JiraIssueTemplateCreateRequestAttributes +from datadog_api_client.v2.model.jira_issue_template_create_request_attributes_jira_account import JiraIssueTemplateCreateRequestAttributesJiraAccount +from datadog_api_client.v2.model.jira_issue_template_create_request_data import JiraIssueTemplateCreateRequestData +from datadog_api_client.v2.model.jira_issue_template_data import JiraIssueTemplateData +from datadog_api_client.v2.model.jira_issue_template_data_attributes import JiraIssueTemplateDataAttributes +from datadog_api_client.v2.model.jira_issue_template_data_relationships import JiraIssueTemplateDataRelationships +from datadog_api_client.v2.model.jira_issue_template_response import JiraIssueTemplateResponse +from datadog_api_client.v2.model.jira_issue_template_type import JiraIssueTemplateType +from datadog_api_client.v2.model.jira_issue_template_update_request import JiraIssueTemplateUpdateRequest +from datadog_api_client.v2.model.jira_issue_template_update_request_attributes import JiraIssueTemplateUpdateRequestAttributes +from datadog_api_client.v2.model.jira_issue_template_update_request_data import JiraIssueTemplateUpdateRequestData +from datadog_api_client.v2.model.jira_issue_templates_response import JiraIssueTemplatesResponse +from datadog_api_client.v2.model.jira_issues_data_type import JiraIssuesDataType +from datadog_api_client.v2.model.job_create_response import JobCreateResponse +from datadog_api_client.v2.model.job_create_response_data import JobCreateResponseData +from datadog_api_client.v2.model.job_definition import JobDefinition +from datadog_api_client.v2.model.job_definition_from_rule import JobDefinitionFromRule +from datadog_api_client.v2.model.json_patch_operation import JsonPatchOperation +from datadog_api_client.v2.model.json_patch_operation_op import JsonPatchOperationOp +from datadog_api_client.v2.model.kind_attributes import KindAttributes +from datadog_api_client.v2.model.kind_data import KindData +from datadog_api_client.v2.model.kind_metadata import KindMetadata +from datadog_api_client.v2.model.kind_obj import KindObj +from datadog_api_client.v2.model.kind_response_meta import KindResponseMeta +from datadog_api_client.v2.model.llm_obs_annotated_interaction_by_trace_item import LLMObsAnnotatedInteractionByTraceItem +from datadog_api_client.v2.model.llm_obs_annotated_interaction_item import LLMObsAnnotatedInteractionItem +from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_data_attributes_response import LLMObsAnnotatedInteractionsByTraceDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_data_response import LLMObsAnnotatedInteractionsByTraceDataResponse +from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_response import LLMObsAnnotatedInteractionsByTraceResponse +from datadog_api_client.v2.model.llm_obs_annotated_interactions_by_trace_type import LLMObsAnnotatedInteractionsByTraceType +from datadog_api_client.v2.model.llm_obs_annotated_interactions_data_attributes_response import LLMObsAnnotatedInteractionsDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_annotated_interactions_data_response import LLMObsAnnotatedInteractionsDataResponse +from datadog_api_client.v2.model.llm_obs_annotated_interactions_response import LLMObsAnnotatedInteractionsResponse +from datadog_api_client.v2.model.llm_obs_annotated_interactions_type import LLMObsAnnotatedInteractionsType +from datadog_api_client.v2.model.llm_obs_annotation_assessment import LLMObsAnnotationAssessment +from datadog_api_client.v2.model.llm_obs_annotation_error import LLMObsAnnotationError +from datadog_api_client.v2.model.llm_obs_annotation_item import LLMObsAnnotationItem +from datadog_api_client.v2.model.llm_obs_annotation_item_response import LLMObsAnnotationItemResponse +from datadog_api_client.v2.model.llm_obs_annotation_label_value import LLMObsAnnotationLabelValue +from datadog_api_client.v2.model.llm_obs_annotation_label_value_response import LLMObsAnnotationLabelValueResponse +from datadog_api_client.v2.model.llm_obs_annotation_label_value_value import LLMObsAnnotationLabelValueValue +from datadog_api_client.v2.model.llm_obs_annotation_queue_data_attributes_request import LLMObsAnnotationQueueDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_data_attributes_response import LLMObsAnnotationQueueDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_data_request import LLMObsAnnotationQueueDataRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_data_response import LLMObsAnnotationQueueDataResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_interaction_item import LLMObsAnnotationQueueInteractionItem +from datadog_api_client.v2.model.llm_obs_annotation_queue_interaction_response_item import LLMObsAnnotationQueueInteractionResponseItem +from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_attributes_request import LLMObsAnnotationQueueInteractionsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_attributes_response import LLMObsAnnotationQueueInteractionsDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_request import LLMObsAnnotationQueueInteractionsDataRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_data_response import LLMObsAnnotationQueueInteractionsDataResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_request import LLMObsAnnotationQueueInteractionsRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_response import LLMObsAnnotationQueueInteractionsResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_interactions_type import LLMObsAnnotationQueueInteractionsType +from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_attributes import LLMObsAnnotationQueueLabelSchemaAttributes +from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_data import LLMObsAnnotationQueueLabelSchemaData +from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_response import LLMObsAnnotationQueueLabelSchemaResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_update_attributes import LLMObsAnnotationQueueLabelSchemaUpdateAttributes +from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_update_data import LLMObsAnnotationQueueLabelSchemaUpdateData +from datadog_api_client.v2.model.llm_obs_annotation_queue_label_schema_update_request import LLMObsAnnotationQueueLabelSchemaUpdateRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_request import LLMObsAnnotationQueueRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_response import LLMObsAnnotationQueueResponse +from datadog_api_client.v2.model.llm_obs_annotation_queue_type import LLMObsAnnotationQueueType +from datadog_api_client.v2.model.llm_obs_annotation_queue_update_data_attributes_request import LLMObsAnnotationQueueUpdateDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_update_data_request import LLMObsAnnotationQueueUpdateDataRequest +from datadog_api_client.v2.model.llm_obs_annotation_queue_update_request import LLMObsAnnotationQueueUpdateRequest +from datadog_api_client.v2.model.llm_obs_annotation_queues_response import LLMObsAnnotationQueuesResponse +from datadog_api_client.v2.model.llm_obs_annotation_schema import LLMObsAnnotationSchema +from datadog_api_client.v2.model.llm_obs_annotations_data_attributes_request import LLMObsAnnotationsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_annotations_data_attributes_response import LLMObsAnnotationsDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_annotations_data_request import LLMObsAnnotationsDataRequest +from datadog_api_client.v2.model.llm_obs_annotations_data_response import LLMObsAnnotationsDataResponse +from datadog_api_client.v2.model.llm_obs_annotations_request import LLMObsAnnotationsRequest +from datadog_api_client.v2.model.llm_obs_annotations_response import LLMObsAnnotationsResponse +from datadog_api_client.v2.model.llm_obs_annotations_type import LLMObsAnnotationsType +from datadog_api_client.v2.model.llm_obs_anthropic_effort import LLMObsAnthropicEffort +from datadog_api_client.v2.model.llm_obs_anthropic_metadata import LLMObsAnthropicMetadata +from datadog_api_client.v2.model.llm_obs_anthropic_thinking_config import LLMObsAnthropicThinkingConfig +from datadog_api_client.v2.model.llm_obs_anthropic_thinking_type import LLMObsAnthropicThinkingType +from datadog_api_client.v2.model.llm_obs_any_interaction_type import LLMObsAnyInteractionType +from datadog_api_client.v2.model.llm_obs_azure_open_ai_metadata import LLMObsAzureOpenAIMetadata +from datadog_api_client.v2.model.llm_obs_bedrock_metadata import LLMObsBedrockMetadata +from datadog_api_client.v2.model.llm_obs_content_block import LLMObsContentBlock +from datadog_api_client.v2.model.llm_obs_content_block_header_level import LLMObsContentBlockHeaderLevel +from datadog_api_client.v2.model.llm_obs_content_block_llm_obs_trace_interaction_type import LLMObsContentBlockLLMObsTraceInteractionType +from datadog_api_client.v2.model.llm_obs_content_block_time_frame import LLMObsContentBlockTimeFrame +from datadog_api_client.v2.model.llm_obs_content_block_type import LLMObsContentBlockType +from datadog_api_client.v2.model.llm_obs_create_prompt_data import LLMObsCreatePromptData +from datadog_api_client.v2.model.llm_obs_create_prompt_data_attributes import LLMObsCreatePromptDataAttributes +from datadog_api_client.v2.model.llm_obs_create_prompt_request import LLMObsCreatePromptRequest +from datadog_api_client.v2.model.llm_obs_create_prompt_version_data import LLMObsCreatePromptVersionData +from datadog_api_client.v2.model.llm_obs_create_prompt_version_data_attributes import LLMObsCreatePromptVersionDataAttributes +from datadog_api_client.v2.model.llm_obs_create_prompt_version_request import LLMObsCreatePromptVersionRequest +from datadog_api_client.v2.model.llm_obs_cursor_meta import LLMObsCursorMeta +from datadog_api_client.v2.model.llm_obs_custom_eval_config_assessment_criteria import LLMObsCustomEvalConfigAssessmentCriteria +from datadog_api_client.v2.model.llm_obs_custom_eval_config_attributes import LLMObsCustomEvalConfigAttributes +from datadog_api_client.v2.model.llm_obs_custom_eval_config_bedrock_options import LLMObsCustomEvalConfigBedrockOptions +from datadog_api_client.v2.model.llm_obs_custom_eval_config_data import LLMObsCustomEvalConfigData +from datadog_api_client.v2.model.llm_obs_custom_eval_config_eval_scope import LLMObsCustomEvalConfigEvalScope +from datadog_api_client.v2.model.llm_obs_custom_eval_config_inference_params import LLMObsCustomEvalConfigInferenceParams +from datadog_api_client.v2.model.llm_obs_custom_eval_config_integration_provider import LLMObsCustomEvalConfigIntegrationProvider +from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_judge_config import LLMObsCustomEvalConfigLLMJudgeConfig +from datadog_api_client.v2.model.llm_obs_custom_eval_config_llm_provider import LLMObsCustomEvalConfigLLMProvider +from datadog_api_client.v2.model.llm_obs_custom_eval_config_list_response import LLMObsCustomEvalConfigListResponse +from datadog_api_client.v2.model.llm_obs_custom_eval_config_parsing_type import LLMObsCustomEvalConfigParsingType +from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_content import LLMObsCustomEvalConfigPromptContent +from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_content_value import LLMObsCustomEvalConfigPromptContentValue +from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_message import LLMObsCustomEvalConfigPromptMessage +from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_tool_call import LLMObsCustomEvalConfigPromptToolCall +from datadog_api_client.v2.model.llm_obs_custom_eval_config_prompt_tool_result import LLMObsCustomEvalConfigPromptToolResult +from datadog_api_client.v2.model.llm_obs_custom_eval_config_response import LLMObsCustomEvalConfigResponse +from datadog_api_client.v2.model.llm_obs_custom_eval_config_target import LLMObsCustomEvalConfigTarget +from datadog_api_client.v2.model.llm_obs_custom_eval_config_type import LLMObsCustomEvalConfigType +from datadog_api_client.v2.model.llm_obs_custom_eval_config_update_attributes import LLMObsCustomEvalConfigUpdateAttributes +from datadog_api_client.v2.model.llm_obs_custom_eval_config_update_data import LLMObsCustomEvalConfigUpdateData +from datadog_api_client.v2.model.llm_obs_custom_eval_config_update_request import LLMObsCustomEvalConfigUpdateRequest +from datadog_api_client.v2.model.llm_obs_custom_eval_config_user import LLMObsCustomEvalConfigUser +from datadog_api_client.v2.model.llm_obs_custom_eval_config_vertex_ai_options import LLMObsCustomEvalConfigVertexAIOptions +from datadog_api_client.v2.model.llm_obs_data_deletion_request import LLMObsDataDeletionRequest +from datadog_api_client.v2.model.llm_obs_data_deletion_request_attributes import LLMObsDataDeletionRequestAttributes +from datadog_api_client.v2.model.llm_obs_data_deletion_request_data import LLMObsDataDeletionRequestData +from datadog_api_client.v2.model.llm_obs_data_deletion_request_type import LLMObsDataDeletionRequestType +from datadog_api_client.v2.model.llm_obs_data_deletion_response import LLMObsDataDeletionResponse +from datadog_api_client.v2.model.llm_obs_data_deletion_response_attributes import LLMObsDataDeletionResponseAttributes +from datadog_api_client.v2.model.llm_obs_data_deletion_response_data import LLMObsDataDeletionResponseData +from datadog_api_client.v2.model.llm_obs_data_deletion_response_type import LLMObsDataDeletionResponseType +from datadog_api_client.v2.model.llm_obs_dataset_batch_update_data_attributes_request import LLMObsDatasetBatchUpdateDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_dataset_batch_update_data_request import LLMObsDatasetBatchUpdateDataRequest +from datadog_api_client.v2.model.llm_obs_dataset_batch_update_insert_record import LLMObsDatasetBatchUpdateInsertRecord +from datadog_api_client.v2.model.llm_obs_dataset_batch_update_request import LLMObsDatasetBatchUpdateRequest +from datadog_api_client.v2.model.llm_obs_dataset_batch_update_update_record import LLMObsDatasetBatchUpdateUpdateRecord +from datadog_api_client.v2.model.llm_obs_dataset_clone_data_attributes_request import LLMObsDatasetCloneDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_dataset_clone_data_request import LLMObsDatasetCloneDataRequest +from datadog_api_client.v2.model.llm_obs_dataset_clone_request import LLMObsDatasetCloneRequest +from datadog_api_client.v2.model.llm_obs_dataset_data_attributes_request import LLMObsDatasetDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_dataset_data_attributes_response import LLMObsDatasetDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_dataset_data_request import LLMObsDatasetDataRequest +from datadog_api_client.v2.model.llm_obs_dataset_data_response import LLMObsDatasetDataResponse +from datadog_api_client.v2.model.llm_obs_dataset_draft_state_data import LLMObsDatasetDraftStateData +from datadog_api_client.v2.model.llm_obs_dataset_draft_state_data_attributes import LLMObsDatasetDraftStateDataAttributes +from datadog_api_client.v2.model.llm_obs_dataset_draft_state_response import LLMObsDatasetDraftStateResponse +from datadog_api_client.v2.model.llm_obs_dataset_draft_state_type import LLMObsDatasetDraftStateType +from datadog_api_client.v2.model.llm_obs_dataset_draft_state_user import LLMObsDatasetDraftStateUser +from datadog_api_client.v2.model.llm_obs_dataset_export_format import LLMObsDatasetExportFormat +from datadog_api_client.v2.model.llm_obs_dataset_record_data_response import LLMObsDatasetRecordDataResponse +from datadog_api_client.v2.model.llm_obs_dataset_record_item import LLMObsDatasetRecordItem +from datadog_api_client.v2.model.llm_obs_dataset_record_tag_operations import LLMObsDatasetRecordTagOperations +from datadog_api_client.v2.model.llm_obs_dataset_record_update_item import LLMObsDatasetRecordUpdateItem +from datadog_api_client.v2.model.llm_obs_dataset_records_data_attributes_request import LLMObsDatasetRecordsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_dataset_records_data_request import LLMObsDatasetRecordsDataRequest +from datadog_api_client.v2.model.llm_obs_dataset_records_list_response import LLMObsDatasetRecordsListResponse +from datadog_api_client.v2.model.llm_obs_dataset_records_mutation_data import LLMObsDatasetRecordsMutationData +from datadog_api_client.v2.model.llm_obs_dataset_records_mutation_response import LLMObsDatasetRecordsMutationResponse +from datadog_api_client.v2.model.llm_obs_dataset_records_request import LLMObsDatasetRecordsRequest +from datadog_api_client.v2.model.llm_obs_dataset_records_update_data_attributes_request import LLMObsDatasetRecordsUpdateDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_dataset_records_update_data_request import LLMObsDatasetRecordsUpdateDataRequest +from datadog_api_client.v2.model.llm_obs_dataset_records_update_request import LLMObsDatasetRecordsUpdateRequest +from datadog_api_client.v2.model.llm_obs_dataset_records_upload_file import LLMObsDatasetRecordsUploadFile +from datadog_api_client.v2.model.llm_obs_dataset_request import LLMObsDatasetRequest +from datadog_api_client.v2.model.llm_obs_dataset_response import LLMObsDatasetResponse +from datadog_api_client.v2.model.llm_obs_dataset_restore_version_data_attributes_request import LLMObsDatasetRestoreVersionDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_dataset_restore_version_data_request import LLMObsDatasetRestoreVersionDataRequest +from datadog_api_client.v2.model.llm_obs_dataset_restore_version_request import LLMObsDatasetRestoreVersionRequest +from datadog_api_client.v2.model.llm_obs_dataset_type import LLMObsDatasetType +from datadog_api_client.v2.model.llm_obs_dataset_update_data_attributes_request import LLMObsDatasetUpdateDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_dataset_update_data_request import LLMObsDatasetUpdateDataRequest +from datadog_api_client.v2.model.llm_obs_dataset_update_request import LLMObsDatasetUpdateRequest +from datadog_api_client.v2.model.llm_obs_dataset_version_data import LLMObsDatasetVersionData +from datadog_api_client.v2.model.llm_obs_dataset_version_data_attributes import LLMObsDatasetVersionDataAttributes +from datadog_api_client.v2.model.llm_obs_dataset_version_type import LLMObsDatasetVersionType +from datadog_api_client.v2.model.llm_obs_dataset_versions_response import LLMObsDatasetVersionsResponse +from datadog_api_client.v2.model.llm_obs_datasets_response import LLMObsDatasetsResponse +from datadog_api_client.v2.model.llm_obs_delete_annotation_error import LLMObsDeleteAnnotationError +from datadog_api_client.v2.model.llm_obs_delete_annotation_queue_interactions_data_attributes_request import LLMObsDeleteAnnotationQueueInteractionsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_delete_annotation_queue_interactions_data_request import LLMObsDeleteAnnotationQueueInteractionsDataRequest +from datadog_api_client.v2.model.llm_obs_delete_annotation_queue_interactions_request import LLMObsDeleteAnnotationQueueInteractionsRequest +from datadog_api_client.v2.model.llm_obs_delete_annotations_data_attributes_request import LLMObsDeleteAnnotationsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_delete_annotations_data_attributes_response import LLMObsDeleteAnnotationsDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_delete_annotations_data_request import LLMObsDeleteAnnotationsDataRequest +from datadog_api_client.v2.model.llm_obs_delete_annotations_data_response import LLMObsDeleteAnnotationsDataResponse +from datadog_api_client.v2.model.llm_obs_delete_annotations_request import LLMObsDeleteAnnotationsRequest +from datadog_api_client.v2.model.llm_obs_delete_annotations_response import LLMObsDeleteAnnotationsResponse +from datadog_api_client.v2.model.llm_obs_delete_dataset_records_data_attributes_request import LLMObsDeleteDatasetRecordsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_delete_dataset_records_data_request import LLMObsDeleteDatasetRecordsDataRequest +from datadog_api_client.v2.model.llm_obs_delete_dataset_records_request import LLMObsDeleteDatasetRecordsRequest +from datadog_api_client.v2.model.llm_obs_delete_datasets_data_attributes_request import LLMObsDeleteDatasetsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_delete_datasets_data_request import LLMObsDeleteDatasetsDataRequest +from datadog_api_client.v2.model.llm_obs_delete_datasets_request import LLMObsDeleteDatasetsRequest +from datadog_api_client.v2.model.llm_obs_delete_experiments_data_attributes_request import LLMObsDeleteExperimentsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_delete_experiments_data_request import LLMObsDeleteExperimentsDataRequest +from datadog_api_client.v2.model.llm_obs_delete_experiments_request import LLMObsDeleteExperimentsRequest +from datadog_api_client.v2.model.llm_obs_delete_projects_data_attributes_request import LLMObsDeleteProjectsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_delete_projects_data_request import LLMObsDeleteProjectsDataRequest +from datadog_api_client.v2.model.llm_obs_delete_projects_request import LLMObsDeleteProjectsRequest +from datadog_api_client.v2.model.llm_obs_deleted_prompt_data import LLMObsDeletedPromptData +from datadog_api_client.v2.model.llm_obs_deleted_prompt_data_attributes import LLMObsDeletedPromptDataAttributes +from datadog_api_client.v2.model.llm_obs_deleted_prompt_response import LLMObsDeletedPromptResponse +from datadog_api_client.v2.model.llm_obs_display_block_annotated_interaction_item import LLMObsDisplayBlockAnnotatedInteractionItem +from datadog_api_client.v2.model.llm_obs_display_block_interaction_item import LLMObsDisplayBlockInteractionItem +from datadog_api_client.v2.model.llm_obs_display_block_interaction_response_item import LLMObsDisplayBlockInteractionResponseItem +from datadog_api_client.v2.model.llm_obs_display_block_interaction_type import LLMObsDisplayBlockInteractionType +from datadog_api_client.v2.model.llm_obs_event_type import LLMObsEventType +from datadog_api_client.v2.model.llm_obs_experiment_data_attributes_request import LLMObsExperimentDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_experiment_data_attributes_response import LLMObsExperimentDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_experiment_data_request import LLMObsExperimentDataRequest +from datadog_api_client.v2.model.llm_obs_experiment_data_response import LLMObsExperimentDataResponse +from datadog_api_client.v2.model.llm_obs_experiment_eval_metric_event import LLMObsExperimentEvalMetricEvent +from datadog_api_client.v2.model.llm_obs_experiment_events_data_attributes_request import LLMObsExperimentEventsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_experiment_events_data_request import LLMObsExperimentEventsDataRequest +from datadog_api_client.v2.model.llm_obs_experiment_events_request import LLMObsExperimentEventsRequest +from datadog_api_client.v2.model.llm_obs_experiment_events_type import LLMObsExperimentEventsType +from datadog_api_client.v2.model.llm_obs_experiment_events_v2_data_attributes_response import LLMObsExperimentEventsV2DataAttributesResponse +from datadog_api_client.v2.model.llm_obs_experiment_events_v2_data_response import LLMObsExperimentEventsV2DataResponse +from datadog_api_client.v2.model.llm_obs_experiment_events_v2_response import LLMObsExperimentEventsV2Response +from datadog_api_client.v2.model.llm_obs_experiment_metric import LLMObsExperimentMetric +from datadog_api_client.v2.model.llm_obs_experiment_metric_error import LLMObsExperimentMetricError +from datadog_api_client.v2.model.llm_obs_experiment_request import LLMObsExperimentRequest +from datadog_api_client.v2.model.llm_obs_experiment_response import LLMObsExperimentResponse +from datadog_api_client.v2.model.llm_obs_experiment_run_data_response import LLMObsExperimentRunDataResponse +from datadog_api_client.v2.model.llm_obs_experiment_span import LLMObsExperimentSpan +from datadog_api_client.v2.model.llm_obs_experiment_span_data_response import LLMObsExperimentSpanDataResponse +from datadog_api_client.v2.model.llm_obs_experiment_span_error import LLMObsExperimentSpanError +from datadog_api_client.v2.model.llm_obs_experiment_span_meta import LLMObsExperimentSpanMeta +from datadog_api_client.v2.model.llm_obs_experiment_span_status import LLMObsExperimentSpanStatus +from datadog_api_client.v2.model.llm_obs_experiment_span_type import LLMObsExperimentSpanType +from datadog_api_client.v2.model.llm_obs_experiment_span_with_evals import LLMObsExperimentSpanWithEvals +from datadog_api_client.v2.model.llm_obs_experiment_spans_response import LLMObsExperimentSpansResponse +from datadog_api_client.v2.model.llm_obs_experiment_status import LLMObsExperimentStatus +from datadog_api_client.v2.model.llm_obs_experiment_type import LLMObsExperimentType +from datadog_api_client.v2.model.llm_obs_experiment_update_data_attributes_request import LLMObsExperimentUpdateDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_experiment_update_data_request import LLMObsExperimentUpdateDataRequest +from datadog_api_client.v2.model.llm_obs_experiment_update_request import LLMObsExperimentUpdateRequest +from datadog_api_client.v2.model.llm_obs_experiment_user import LLMObsExperimentUser +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_aggregate import LLMObsExperimentationAnalyticsAggregate +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_compute import LLMObsExperimentationAnalyticsCompute +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_attributes_request import LLMObsExperimentationAnalyticsDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_attributes_response import LLMObsExperimentationAnalyticsDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_request import LLMObsExperimentationAnalyticsDataRequest +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_data_response import LLMObsExperimentationAnalyticsDataResponse +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_group_by import LLMObsExperimentationAnalyticsGroupBy +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_request import LLMObsExperimentationAnalyticsRequest +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_response import LLMObsExperimentationAnalyticsResponse +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_result import LLMObsExperimentationAnalyticsResult +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_search import LLMObsExperimentationAnalyticsSearch +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_time_range import LLMObsExperimentationAnalyticsTimeRange +from datadog_api_client.v2.model.llm_obs_experimentation_analytics_value import LLMObsExperimentationAnalyticsValue +from datadog_api_client.v2.model.llm_obs_experimentation_content_preview import LLMObsExperimentationContentPreview +from datadog_api_client.v2.model.llm_obs_experimentation_cursor_page import LLMObsExperimentationCursorPage +from datadog_api_client.v2.model.llm_obs_experimentation_filter import LLMObsExperimentationFilter +from datadog_api_client.v2.model.llm_obs_experimentation_include import LLMObsExperimentationInclude +from datadog_api_client.v2.model.llm_obs_experimentation_number_page import LLMObsExperimentationNumberPage +from datadog_api_client.v2.model.llm_obs_experimentation_search_data_attributes_request import LLMObsExperimentationSearchDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_experimentation_search_data_request import LLMObsExperimentationSearchDataRequest +from datadog_api_client.v2.model.llm_obs_experimentation_search_data_response import LLMObsExperimentationSearchDataResponse +from datadog_api_client.v2.model.llm_obs_experimentation_search_request import LLMObsExperimentationSearchRequest +from datadog_api_client.v2.model.llm_obs_experimentation_search_response import LLMObsExperimentationSearchResponse +from datadog_api_client.v2.model.llm_obs_experimentation_search_results import LLMObsExperimentationSearchResults +from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_data_attributes_request import LLMObsExperimentationSimpleSearchDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_data_request import LLMObsExperimentationSimpleSearchDataRequest +from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_data_response import LLMObsExperimentationSimpleSearchDataResponse +from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_meta import LLMObsExperimentationSimpleSearchMeta +from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_meta_page import LLMObsExperimentationSimpleSearchMetaPage +from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_request import LLMObsExperimentationSimpleSearchRequest +from datadog_api_client.v2.model.llm_obs_experimentation_simple_search_response import LLMObsExperimentationSimpleSearchResponse +from datadog_api_client.v2.model.llm_obs_experimentation_sort_field import LLMObsExperimentationSortField +from datadog_api_client.v2.model.llm_obs_experimentation_sort_field_direction import LLMObsExperimentationSortFieldDirection +from datadog_api_client.v2.model.llm_obs_experimentation_type import LLMObsExperimentationType +from datadog_api_client.v2.model.llm_obs_experiments_response import LLMObsExperimentsResponse +from datadog_api_client.v2.model.llm_obs_inference_code import LLMObsInferenceCode +from datadog_api_client.v2.model.llm_obs_inference_content import LLMObsInferenceContent +from datadog_api_client.v2.model.llm_obs_inference_content_value import LLMObsInferenceContentValue +from datadog_api_client.v2.model.llm_obs_inference_error_response import LLMObsInferenceErrorResponse +from datadog_api_client.v2.model.llm_obs_inference_function import LLMObsInferenceFunction +from datadog_api_client.v2.model.llm_obs_inference_message import LLMObsInferenceMessage +from datadog_api_client.v2.model.llm_obs_inference_run_result import LLMObsInferenceRunResult +from datadog_api_client.v2.model.llm_obs_inference_tool import LLMObsInferenceTool +from datadog_api_client.v2.model.llm_obs_inference_tool_call import LLMObsInferenceToolCall +from datadog_api_client.v2.model.llm_obs_inference_tool_result import LLMObsInferenceToolResult +from datadog_api_client.v2.model.llm_obs_integration_account import LLMObsIntegrationAccount +from datadog_api_client.v2.model.llm_obs_integration_inference_request import LLMObsIntegrationInferenceRequest +from datadog_api_client.v2.model.llm_obs_integration_inference_response import LLMObsIntegrationInferenceResponse +from datadog_api_client.v2.model.llm_obs_integration_model import LLMObsIntegrationModel +from datadog_api_client.v2.model.llm_obs_integration_model_region_prefix_overrides import LLMObsIntegrationModelRegionPrefixOverrides +from datadog_api_client.v2.model.llm_obs_integration_name import LLMObsIntegrationName +from datadog_api_client.v2.model.llm_obs_internal_reasoning import LLMObsInternalReasoning +from datadog_api_client.v2.model.llm_obs_label_schema import LLMObsLabelSchema +from datadog_api_client.v2.model.llm_obs_label_schema_type import LLMObsLabelSchemaType +from datadog_api_client.v2.model.llm_obs_metric_assessment import LLMObsMetricAssessment +from datadog_api_client.v2.model.llm_obs_metric_score_type import LLMObsMetricScoreType +from datadog_api_client.v2.model.llm_obs_open_ai_metadata import LLMObsOpenAIMetadata +from datadog_api_client.v2.model.llm_obs_open_ai_reasoning_effort import LLMObsOpenAIReasoningEffort +from datadog_api_client.v2.model.llm_obs_open_ai_reasoning_summary import LLMObsOpenAIReasoningSummary +from datadog_api_client.v2.model.llm_obs_patterns_activity_progress import LLMObsPatternsActivityProgress +from datadog_api_client.v2.model.llm_obs_patterns_clustered_point import LLMObsPatternsClusteredPoint +from datadog_api_client.v2.model.llm_obs_patterns_clustered_point_ref import LLMObsPatternsClusteredPointRef +from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_response import LLMObsPatternsClusteredPointsResponse +from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_response_attributes import LLMObsPatternsClusteredPointsResponseAttributes +from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_response_data import LLMObsPatternsClusteredPointsResponseData +from datadog_api_client.v2.model.llm_obs_patterns_clustered_points_type import LLMObsPatternsClusteredPointsType +from datadog_api_client.v2.model.llm_obs_patterns_config_attributes import LLMObsPatternsConfigAttributes +from datadog_api_client.v2.model.llm_obs_patterns_config_item import LLMObsPatternsConfigItem +from datadog_api_client.v2.model.llm_obs_patterns_config_response import LLMObsPatternsConfigResponse +from datadog_api_client.v2.model.llm_obs_patterns_config_response_data import LLMObsPatternsConfigResponseData +from datadog_api_client.v2.model.llm_obs_patterns_config_snapshot import LLMObsPatternsConfigSnapshot +from datadog_api_client.v2.model.llm_obs_patterns_config_type import LLMObsPatternsConfigType +from datadog_api_client.v2.model.llm_obs_patterns_config_upsert_request import LLMObsPatternsConfigUpsertRequest +from datadog_api_client.v2.model.llm_obs_patterns_config_upsert_request_attributes import LLMObsPatternsConfigUpsertRequestAttributes +from datadog_api_client.v2.model.llm_obs_patterns_config_upsert_request_data import LLMObsPatternsConfigUpsertRequestData +from datadog_api_client.v2.model.llm_obs_patterns_configs_list_type import LLMObsPatternsConfigsListType +from datadog_api_client.v2.model.llm_obs_patterns_configs_response import LLMObsPatternsConfigsResponse +from datadog_api_client.v2.model.llm_obs_patterns_configs_response_attributes import LLMObsPatternsConfigsResponseAttributes +from datadog_api_client.v2.model.llm_obs_patterns_configs_response_data import LLMObsPatternsConfigsResponseData +from datadog_api_client.v2.model.llm_obs_patterns_request_type import LLMObsPatternsRequestType +from datadog_api_client.v2.model.llm_obs_patterns_run_status_response import LLMObsPatternsRunStatusResponse +from datadog_api_client.v2.model.llm_obs_patterns_run_status_response_attributes import LLMObsPatternsRunStatusResponseAttributes +from datadog_api_client.v2.model.llm_obs_patterns_run_status_response_data import LLMObsPatternsRunStatusResponseData +from datadog_api_client.v2.model.llm_obs_patterns_run_status_type import LLMObsPatternsRunStatusType +from datadog_api_client.v2.model.llm_obs_patterns_run_summary import LLMObsPatternsRunSummary +from datadog_api_client.v2.model.llm_obs_patterns_runs_list_type import LLMObsPatternsRunsListType +from datadog_api_client.v2.model.llm_obs_patterns_runs_response import LLMObsPatternsRunsResponse +from datadog_api_client.v2.model.llm_obs_patterns_runs_response_attributes import LLMObsPatternsRunsResponseAttributes +from datadog_api_client.v2.model.llm_obs_patterns_runs_response_data import LLMObsPatternsRunsResponseData +from datadog_api_client.v2.model.llm_obs_patterns_topic import LLMObsPatternsTopic +from datadog_api_client.v2.model.llm_obs_patterns_topic_with_clustered_points import LLMObsPatternsTopicWithClusteredPoints +from datadog_api_client.v2.model.llm_obs_patterns_topics_response import LLMObsPatternsTopicsResponse +from datadog_api_client.v2.model.llm_obs_patterns_topics_response_attributes import LLMObsPatternsTopicsResponseAttributes +from datadog_api_client.v2.model.llm_obs_patterns_topics_response_data import LLMObsPatternsTopicsResponseData +from datadog_api_client.v2.model.llm_obs_patterns_topics_type import LLMObsPatternsTopicsType +from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_response import LLMObsPatternsTopicsWithClusteredPointsResponse +from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_response_attributes import LLMObsPatternsTopicsWithClusteredPointsResponseAttributes +from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_response_data import LLMObsPatternsTopicsWithClusteredPointsResponseData +from datadog_api_client.v2.model.llm_obs_patterns_topics_with_clustered_points_type import LLMObsPatternsTopicsWithClusteredPointsType +from datadog_api_client.v2.model.llm_obs_patterns_trigger_request import LLMObsPatternsTriggerRequest +from datadog_api_client.v2.model.llm_obs_patterns_trigger_request_attributes import LLMObsPatternsTriggerRequestAttributes +from datadog_api_client.v2.model.llm_obs_patterns_trigger_request_data import LLMObsPatternsTriggerRequestData +from datadog_api_client.v2.model.llm_obs_patterns_trigger_response import LLMObsPatternsTriggerResponse +from datadog_api_client.v2.model.llm_obs_patterns_trigger_response_attributes import LLMObsPatternsTriggerResponseAttributes +from datadog_api_client.v2.model.llm_obs_patterns_trigger_response_data import LLMObsPatternsTriggerResponseData +from datadog_api_client.v2.model.llm_obs_patterns_trigger_response_type import LLMObsPatternsTriggerResponseType +from datadog_api_client.v2.model.llm_obs_project_data_attributes_request import LLMObsProjectDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_project_data_attributes_response import LLMObsProjectDataAttributesResponse +from datadog_api_client.v2.model.llm_obs_project_data_request import LLMObsProjectDataRequest +from datadog_api_client.v2.model.llm_obs_project_data_response import LLMObsProjectDataResponse +from datadog_api_client.v2.model.llm_obs_project_request import LLMObsProjectRequest +from datadog_api_client.v2.model.llm_obs_project_response import LLMObsProjectResponse +from datadog_api_client.v2.model.llm_obs_project_type import LLMObsProjectType +from datadog_api_client.v2.model.llm_obs_project_update_data_attributes_request import LLMObsProjectUpdateDataAttributesRequest +from datadog_api_client.v2.model.llm_obs_project_update_data_request import LLMObsProjectUpdateDataRequest +from datadog_api_client.v2.model.llm_obs_project_update_request import LLMObsProjectUpdateRequest +from datadog_api_client.v2.model.llm_obs_projects_response import LLMObsProjectsResponse +from datadog_api_client.v2.model.llm_obs_prompt_chat_message import LLMObsPromptChatMessage +from datadog_api_client.v2.model.llm_obs_prompt_data import LLMObsPromptData +from datadog_api_client.v2.model.llm_obs_prompt_data_attributes import LLMObsPromptDataAttributes +from datadog_api_client.v2.model.llm_obs_prompt_dataset import LLMObsPromptDataset +from datadog_api_client.v2.model.llm_obs_prompt_response import LLMObsPromptResponse +from datadog_api_client.v2.model.llm_obs_prompt_response_source import LLMObsPromptResponseSource +from datadog_api_client.v2.model.llm_obs_prompt_sdk_data import LLMObsPromptSDKData +from datadog_api_client.v2.model.llm_obs_prompt_sdk_data_attributes import LLMObsPromptSDKDataAttributes +from datadog_api_client.v2.model.llm_obs_prompt_sdk_response import LLMObsPromptSDKResponse +from datadog_api_client.v2.model.llm_obs_prompt_template import LLMObsPromptTemplate +from datadog_api_client.v2.model.llm_obs_prompt_type import LLMObsPromptType +from datadog_api_client.v2.model.llm_obs_prompt_version_data import LLMObsPromptVersionData +from datadog_api_client.v2.model.llm_obs_prompt_version_data_attributes import LLMObsPromptVersionDataAttributes +from datadog_api_client.v2.model.llm_obs_prompt_version_label import LLMObsPromptVersionLabel +from datadog_api_client.v2.model.llm_obs_prompt_version_list_data import LLMObsPromptVersionListData +from datadog_api_client.v2.model.llm_obs_prompt_version_list_data_attributes import LLMObsPromptVersionListDataAttributes +from datadog_api_client.v2.model.llm_obs_prompt_version_response import LLMObsPromptVersionResponse +from datadog_api_client.v2.model.llm_obs_prompt_version_type import LLMObsPromptVersionType +from datadog_api_client.v2.model.llm_obs_prompt_versions_response import LLMObsPromptVersionsResponse +from datadog_api_client.v2.model.llm_obs_prompts_response import LLMObsPromptsResponse +from datadog_api_client.v2.model.llm_obs_record_type import LLMObsRecordType +from datadog_api_client.v2.model.llm_obs_search_spans_request import LLMObsSearchSpansRequest +from datadog_api_client.v2.model.llm_obs_search_spans_request_attributes import LLMObsSearchSpansRequestAttributes +from datadog_api_client.v2.model.llm_obs_search_spans_request_data import LLMObsSearchSpansRequestData +from datadog_api_client.v2.model.llm_obs_search_spans_request_type import LLMObsSearchSpansRequestType +from datadog_api_client.v2.model.llm_obs_span_attributes import LLMObsSpanAttributes +from datadog_api_client.v2.model.llm_obs_span_data import LLMObsSpanData +from datadog_api_client.v2.model.llm_obs_span_evaluation_metric import LLMObsSpanEvaluationMetric +from datadog_api_client.v2.model.llm_obs_span_filter import LLMObsSpanFilter +from datadog_api_client.v2.model.llm_obs_span_io import LLMObsSpanIO +from datadog_api_client.v2.model.llm_obs_span_message import LLMObsSpanMessage +from datadog_api_client.v2.model.llm_obs_span_page_query import LLMObsSpanPageQuery +from datadog_api_client.v2.model.llm_obs_span_search_options import LLMObsSpanSearchOptions +from datadog_api_client.v2.model.llm_obs_span_tool_call import LLMObsSpanToolCall +from datadog_api_client.v2.model.llm_obs_span_tool_definition import LLMObsSpanToolDefinition +from datadog_api_client.v2.model.llm_obs_span_tool_result import LLMObsSpanToolResult +from datadog_api_client.v2.model.llm_obs_span_type import LLMObsSpanType +from datadog_api_client.v2.model.llm_obs_spans_response import LLMObsSpansResponse +from datadog_api_client.v2.model.llm_obs_spans_response_links import LLMObsSpansResponseLinks +from datadog_api_client.v2.model.llm_obs_spans_response_meta import LLMObsSpansResponseMeta +from datadog_api_client.v2.model.llm_obs_spans_response_page import LLMObsSpansResponsePage +from datadog_api_client.v2.model.llm_obs_trace_annotated_interaction_item import LLMObsTraceAnnotatedInteractionItem +from datadog_api_client.v2.model.llm_obs_trace_interaction_item import LLMObsTraceInteractionItem +from datadog_api_client.v2.model.llm_obs_trace_interaction_response_item import LLMObsTraceInteractionResponseItem +from datadog_api_client.v2.model.llm_obs_trace_interaction_type import LLMObsTraceInteractionType +from datadog_api_client.v2.model.llm_obs_update_prompt_data import LLMObsUpdatePromptData +from datadog_api_client.v2.model.llm_obs_update_prompt_data_attributes import LLMObsUpdatePromptDataAttributes +from datadog_api_client.v2.model.llm_obs_update_prompt_request import LLMObsUpdatePromptRequest +from datadog_api_client.v2.model.llm_obs_update_prompt_version_data import LLMObsUpdatePromptVersionData +from datadog_api_client.v2.model.llm_obs_update_prompt_version_data_attributes import LLMObsUpdatePromptVersionDataAttributes +from datadog_api_client.v2.model.llm_obs_update_prompt_version_request import LLMObsUpdatePromptVersionRequest +from datadog_api_client.v2.model.llm_obs_upsert_annotation_item import LLMObsUpsertAnnotationItem +from datadog_api_client.v2.model.llm_obs_vertex_ai_metadata import LLMObsVertexAIMetadata +from datadog_api_client.v2.model.language import Language +from datadog_api_client.v2.model.latest_version_match_policy import LatestVersionMatchPolicy +from datadog_api_client.v2.model.launch_darkly_api_key import LaunchDarklyAPIKey +from datadog_api_client.v2.model.launch_darkly_api_key_type import LaunchDarklyAPIKeyType +from datadog_api_client.v2.model.launch_darkly_api_key_update import LaunchDarklyAPIKeyUpdate +from datadog_api_client.v2.model.launch_darkly_credentials import LaunchDarklyCredentials +from datadog_api_client.v2.model.launch_darkly_credentials_update import LaunchDarklyCredentialsUpdate +from datadog_api_client.v2.model.launch_darkly_integration import LaunchDarklyIntegration +from datadog_api_client.v2.model.launch_darkly_integration_type import LaunchDarklyIntegrationType +from datadog_api_client.v2.model.launch_darkly_integration_update import LaunchDarklyIntegrationUpdate +from datadog_api_client.v2.model.layer import Layer +from datadog_api_client.v2.model.layer_attributes import LayerAttributes +from datadog_api_client.v2.model.layer_attributes_interval import LayerAttributesInterval +from datadog_api_client.v2.model.layer_relationships import LayerRelationships +from datadog_api_client.v2.model.layer_relationships_members import LayerRelationshipsMembers +from datadog_api_client.v2.model.layer_relationships_members_data_items import LayerRelationshipsMembersDataItems +from datadog_api_client.v2.model.layer_relationships_members_data_items_type import LayerRelationshipsMembersDataItemsType +from datadog_api_client.v2.model.layer_type import LayerType +from datadog_api_client.v2.model.leaked_key import LeakedKey +from datadog_api_client.v2.model.leaked_key_attributes import LeakedKeyAttributes +from datadog_api_client.v2.model.leaked_key_type import LeakedKeyType +from datadog_api_client.v2.model.library import Library +from datadog_api_client.v2.model.licenses_list_response import LicensesListResponse +from datadog_api_client.v2.model.licenses_list_response_data import LicensesListResponseData +from datadog_api_client.v2.model.licenses_list_response_data_attributes import LicensesListResponseDataAttributes +from datadog_api_client.v2.model.licenses_list_response_data_attributes_licenses_items import LicensesListResponseDataAttributesLicensesItems +from datadog_api_client.v2.model.licenses_list_response_data_type import LicensesListResponseDataType +from datadog_api_client.v2.model.linear_issues_data_type import LinearIssuesDataType +from datadog_api_client.v2.model.links import Links +from datadog_api_client.v2.model.list_apis_response import ListAPIsResponse +from datadog_api_client.v2.model.list_apis_response_data import ListAPIsResponseData +from datadog_api_client.v2.model.list_apis_response_data_attributes import ListAPIsResponseDataAttributes +from datadog_api_client.v2.model.list_apis_response_meta import ListAPIsResponseMeta +from datadog_api_client.v2.model.list_apis_response_meta_pagination import ListAPIsResponseMetaPagination +from datadog_api_client.v2.model.list_allocations_response import ListAllocationsResponse +from datadog_api_client.v2.model.list_app_key_registrations_response import ListAppKeyRegistrationsResponse +from datadog_api_client.v2.model.list_app_key_registrations_response_meta import ListAppKeyRegistrationsResponseMeta +from datadog_api_client.v2.model.list_app_versions_response import ListAppVersionsResponse +from datadog_api_client.v2.model.list_application_keys_response import ListApplicationKeysResponse +from datadog_api_client.v2.model.list_apps_response import ListAppsResponse +from datadog_api_client.v2.model.list_apps_response_data_items import ListAppsResponseDataItems +from datadog_api_client.v2.model.list_apps_response_data_items_attributes import ListAppsResponseDataItemsAttributes +from datadog_api_client.v2.model.list_apps_response_data_items_relationships import ListAppsResponseDataItemsRelationships +from datadog_api_client.v2.model.list_apps_response_meta import ListAppsResponseMeta +from datadog_api_client.v2.model.list_apps_response_meta_page import ListAppsResponseMetaPage +from datadog_api_client.v2.model.list_assets_sbo_ms_response import ListAssetsSBOMsResponse +from datadog_api_client.v2.model.list_blueprints_response import ListBlueprintsResponse +from datadog_api_client.v2.model.list_campaigns_response import ListCampaignsResponse +from datadog_api_client.v2.model.list_connections_response import ListConnectionsResponse +from datadog_api_client.v2.model.list_connections_response_data import ListConnectionsResponseData +from datadog_api_client.v2.model.list_connections_response_data_attributes import ListConnectionsResponseDataAttributes +from datadog_api_client.v2.model.list_connections_response_data_attributes_connections_items import ListConnectionsResponseDataAttributesConnectionsItems +from datadog_api_client.v2.model.list_connections_response_data_attributes_connections_items_join import ListConnectionsResponseDataAttributesConnectionsItemsJoin +from datadog_api_client.v2.model.list_connections_response_data_type import ListConnectionsResponseDataType +from datadog_api_client.v2.model.list_dashboards_usage_response import ListDashboardsUsageResponse +from datadog_api_client.v2.model.list_dashboards_usage_response_links import ListDashboardsUsageResponseLinks +from datadog_api_client.v2.model.list_dashboards_usage_response_meta import ListDashboardsUsageResponseMeta +from datadog_api_client.v2.model.list_deployment_rule_response_data import ListDeploymentRuleResponseData +from datadog_api_client.v2.model.list_deployment_rules_data_type import ListDeploymentRulesDataType +from datadog_api_client.v2.model.list_deployment_rules_response_data_attributes import ListDeploymentRulesResponseDataAttributes +from datadog_api_client.v2.model.list_devices_response import ListDevicesResponse +from datadog_api_client.v2.model.list_devices_response_metadata import ListDevicesResponseMetadata +from datadog_api_client.v2.model.list_devices_response_metadata_page import ListDevicesResponseMetadataPage +from datadog_api_client.v2.model.list_downtimes_response import ListDowntimesResponse +from datadog_api_client.v2.model.list_entity_catalog_response import ListEntityCatalogResponse +from datadog_api_client.v2.model.list_entity_catalog_response_included_item import ListEntityCatalogResponseIncludedItem +from datadog_api_client.v2.model.list_entity_catalog_response_links import ListEntityCatalogResponseLinks +from datadog_api_client.v2.model.list_environments_response import ListEnvironmentsResponse +from datadog_api_client.v2.model.list_feature_flags_response import ListFeatureFlagsResponse +from datadog_api_client.v2.model.list_findings_meta import ListFindingsMeta +from datadog_api_client.v2.model.list_findings_page import ListFindingsPage +from datadog_api_client.v2.model.list_findings_response import ListFindingsResponse +from datadog_api_client.v2.model.list_historical_jobs_response import ListHistoricalJobsResponse +from datadog_api_client.v2.model.list_integrations_response import ListIntegrationsResponse +from datadog_api_client.v2.model.list_interface_tags_response import ListInterfaceTagsResponse +from datadog_api_client.v2.model.list_interface_tags_response_data import ListInterfaceTagsResponseData +from datadog_api_client.v2.model.list_investigations_response import ListInvestigationsResponse +from datadog_api_client.v2.model.list_investigations_response_data import ListInvestigationsResponseData +from datadog_api_client.v2.model.list_investigations_response_data_attributes import ListInvestigationsResponseDataAttributes +from datadog_api_client.v2.model.list_investigations_response_links import ListInvestigationsResponseLinks +from datadog_api_client.v2.model.list_investigations_response_meta import ListInvestigationsResponseMeta +from datadog_api_client.v2.model.list_investigations_response_meta_page import ListInvestigationsResponseMetaPage +from datadog_api_client.v2.model.list_kind_catalog_response import ListKindCatalogResponse +from datadog_api_client.v2.model.list_notification_channels_response import ListNotificationChannelsResponse +from datadog_api_client.v2.model.list_on_call_notification_rules_response import ListOnCallNotificationRulesResponse +from datadog_api_client.v2.model.list_personal_access_tokens_response import ListPersonalAccessTokensResponse +from datadog_api_client.v2.model.list_pipelines_response import ListPipelinesResponse +from datadog_api_client.v2.model.list_pipelines_response_meta import ListPipelinesResponseMeta +from datadog_api_client.v2.model.list_powerpacks_response import ListPowerpacksResponse +from datadog_api_client.v2.model.list_relation_catalog_response import ListRelationCatalogResponse +from datadog_api_client.v2.model.list_relation_catalog_response_links import ListRelationCatalogResponseLinks +from datadog_api_client.v2.model.list_rows_response import ListRowsResponse +from datadog_api_client.v2.model.list_rows_response_links import ListRowsResponseLinks +from datadog_api_client.v2.model.list_rows_response_meta import ListRowsResponseMeta +from datadog_api_client.v2.model.list_rows_response_meta_page import ListRowsResponseMetaPage +from datadog_api_client.v2.model.list_rules_response import ListRulesResponse +from datadog_api_client.v2.model.list_rules_response_data_item import ListRulesResponseDataItem +from datadog_api_client.v2.model.list_rules_response_links import ListRulesResponseLinks +from datadog_api_client.v2.model.list_scorecard_scores_meta import ListScorecardScoresMeta +from datadog_api_client.v2.model.list_scorecard_scores_response import ListScorecardScoresResponse +from datadog_api_client.v2.model.list_scorecards_response import ListScorecardsResponse +from datadog_api_client.v2.model.list_security_findings_response import ListSecurityFindingsResponse +from datadog_api_client.v2.model.list_service_access_tokens_response import ListServiceAccessTokensResponse +from datadog_api_client.v2.model.list_shared_dashboards_response import ListSharedDashboardsResponse +from datadog_api_client.v2.model.list_sourcemaps_response import ListSourcemapsResponse +from datadog_api_client.v2.model.list_tags_response import ListTagsResponse +from datadog_api_client.v2.model.list_tags_response_data import ListTagsResponseData +from datadog_api_client.v2.model.list_tags_response_data_attributes import ListTagsResponseDataAttributes +from datadog_api_client.v2.model.list_teams_include import ListTeamsInclude +from datadog_api_client.v2.model.list_teams_sort import ListTeamsSort +from datadog_api_client.v2.model.list_vulnerabilities_response import ListVulnerabilitiesResponse +from datadog_api_client.v2.model.list_vulnerable_assets_response import ListVulnerableAssetsResponse +from datadog_api_client.v2.model.list_workflows_response import ListWorkflowsResponse +from datadog_api_client.v2.model.list_workflows_response_meta import ListWorkflowsResponseMeta +from datadog_api_client.v2.model.list_workflows_response_meta_page import ListWorkflowsResponseMetaPage +from datadog_api_client.v2.model.log import Log +from datadog_api_client.v2.model.log_attributes import LogAttributes +from datadog_api_client.v2.model.log_type import LogType +from datadog_api_client.v2.model.logs_aggregate_bucket import LogsAggregateBucket +from datadog_api_client.v2.model.logs_aggregate_bucket_value import LogsAggregateBucketValue +from datadog_api_client.v2.model.logs_aggregate_bucket_value_timeseries import LogsAggregateBucketValueTimeseries +from datadog_api_client.v2.model.logs_aggregate_bucket_value_timeseries_point import LogsAggregateBucketValueTimeseriesPoint +from datadog_api_client.v2.model.logs_aggregate_request import LogsAggregateRequest +from datadog_api_client.v2.model.logs_aggregate_request_page import LogsAggregateRequestPage +from datadog_api_client.v2.model.logs_aggregate_response import LogsAggregateResponse +from datadog_api_client.v2.model.logs_aggregate_response_data import LogsAggregateResponseData +from datadog_api_client.v2.model.logs_aggregate_response_status import LogsAggregateResponseStatus +from datadog_api_client.v2.model.logs_aggregate_sort import LogsAggregateSort +from datadog_api_client.v2.model.logs_aggregate_sort_type import LogsAggregateSortType +from datadog_api_client.v2.model.logs_aggregation_function import LogsAggregationFunction +from datadog_api_client.v2.model.logs_archive import LogsArchive +from datadog_api_client.v2.model.logs_archive_attributes import LogsArchiveAttributes +from datadog_api_client.v2.model.logs_archive_attributes_compression_method import LogsArchiveAttributesCompressionMethod +from datadog_api_client.v2.model.logs_archive_create_request import LogsArchiveCreateRequest +from datadog_api_client.v2.model.logs_archive_create_request_attributes import LogsArchiveCreateRequestAttributes +from datadog_api_client.v2.model.logs_archive_create_request_definition import LogsArchiveCreateRequestDefinition +from datadog_api_client.v2.model.logs_archive_create_request_destination import LogsArchiveCreateRequestDestination +from datadog_api_client.v2.model.logs_archive_definition import LogsArchiveDefinition +from datadog_api_client.v2.model.logs_archive_destination import LogsArchiveDestination +from datadog_api_client.v2.model.logs_archive_destination_azure import LogsArchiveDestinationAzure +from datadog_api_client.v2.model.logs_archive_destination_azure_type import LogsArchiveDestinationAzureType +from datadog_api_client.v2.model.logs_archive_destination_gcs import LogsArchiveDestinationGCS +from datadog_api_client.v2.model.logs_archive_destination_gcs_type import LogsArchiveDestinationGCSType +from datadog_api_client.v2.model.logs_archive_destination_s3 import LogsArchiveDestinationS3 +from datadog_api_client.v2.model.logs_archive_destination_s3_type import LogsArchiveDestinationS3Type +from datadog_api_client.v2.model.logs_archive_encryption_s3 import LogsArchiveEncryptionS3 +from datadog_api_client.v2.model.logs_archive_encryption_s3_type import LogsArchiveEncryptionS3Type +from datadog_api_client.v2.model.logs_archive_integration_azure import LogsArchiveIntegrationAzure +from datadog_api_client.v2.model.logs_archive_integration_gcs import LogsArchiveIntegrationGCS +from datadog_api_client.v2.model.logs_archive_integration_s3 import LogsArchiveIntegrationS3 +from datadog_api_client.v2.model.logs_archive_integration_s3_access_key import LogsArchiveIntegrationS3AccessKey +from datadog_api_client.v2.model.logs_archive_integration_s3_role import LogsArchiveIntegrationS3Role +from datadog_api_client.v2.model.logs_archive_order import LogsArchiveOrder +from datadog_api_client.v2.model.logs_archive_order_attributes import LogsArchiveOrderAttributes +from datadog_api_client.v2.model.logs_archive_order_definition import LogsArchiveOrderDefinition +from datadog_api_client.v2.model.logs_archive_order_definition_type import LogsArchiveOrderDefinitionType +from datadog_api_client.v2.model.logs_archive_state import LogsArchiveState +from datadog_api_client.v2.model.logs_archive_storage_class_s3_type import LogsArchiveStorageClassS3Type +from datadog_api_client.v2.model.logs_archives import LogsArchives +from datadog_api_client.v2.model.logs_compute import LogsCompute +from datadog_api_client.v2.model.logs_compute_type import LogsComputeType +from datadog_api_client.v2.model.logs_group_by import LogsGroupBy +from datadog_api_client.v2.model.logs_group_by_histogram import LogsGroupByHistogram +from datadog_api_client.v2.model.logs_group_by_missing import LogsGroupByMissing +from datadog_api_client.v2.model.logs_group_by_total import LogsGroupByTotal +from datadog_api_client.v2.model.logs_list_request import LogsListRequest +from datadog_api_client.v2.model.logs_list_request_page import LogsListRequestPage +from datadog_api_client.v2.model.logs_list_response import LogsListResponse +from datadog_api_client.v2.model.logs_list_response_links import LogsListResponseLinks +from datadog_api_client.v2.model.logs_metric_compute import LogsMetricCompute +from datadog_api_client.v2.model.logs_metric_compute_aggregation_type import LogsMetricComputeAggregationType +from datadog_api_client.v2.model.logs_metric_create_attributes import LogsMetricCreateAttributes +from datadog_api_client.v2.model.logs_metric_create_data import LogsMetricCreateData +from datadog_api_client.v2.model.logs_metric_create_request import LogsMetricCreateRequest +from datadog_api_client.v2.model.logs_metric_filter import LogsMetricFilter +from datadog_api_client.v2.model.logs_metric_group_by import LogsMetricGroupBy +from datadog_api_client.v2.model.logs_metric_response import LogsMetricResponse +from datadog_api_client.v2.model.logs_metric_response_attributes import LogsMetricResponseAttributes +from datadog_api_client.v2.model.logs_metric_response_compute import LogsMetricResponseCompute +from datadog_api_client.v2.model.logs_metric_response_compute_aggregation_type import LogsMetricResponseComputeAggregationType +from datadog_api_client.v2.model.logs_metric_response_data import LogsMetricResponseData +from datadog_api_client.v2.model.logs_metric_response_filter import LogsMetricResponseFilter +from datadog_api_client.v2.model.logs_metric_response_group_by import LogsMetricResponseGroupBy +from datadog_api_client.v2.model.logs_metric_type import LogsMetricType +from datadog_api_client.v2.model.logs_metric_update_attributes import LogsMetricUpdateAttributes +from datadog_api_client.v2.model.logs_metric_update_compute import LogsMetricUpdateCompute +from datadog_api_client.v2.model.logs_metric_update_data import LogsMetricUpdateData +from datadog_api_client.v2.model.logs_metric_update_request import LogsMetricUpdateRequest +from datadog_api_client.v2.model.logs_metrics_response import LogsMetricsResponse +from datadog_api_client.v2.model.logs_query_filter import LogsQueryFilter +from datadog_api_client.v2.model.logs_query_options import LogsQueryOptions +from datadog_api_client.v2.model.logs_response_metadata import LogsResponseMetadata +from datadog_api_client.v2.model.logs_response_metadata_page import LogsResponseMetadataPage +from datadog_api_client.v2.model.logs_restriction_queries_type import LogsRestrictionQueriesType +from datadog_api_client.v2.model.logs_sort import LogsSort +from datadog_api_client.v2.model.logs_sort_order import LogsSortOrder +from datadog_api_client.v2.model.logs_storage_tier import LogsStorageTier +from datadog_api_client.v2.model.logs_warning import LogsWarning +from datadog_api_client.v2.model.long_task_metric_stats import LongTaskMetricStats +from datadog_api_client.v2.model.long_task_stats_per_view import LongTaskStatsPerView +from datadog_api_client.v2.model.ms_teams_integration_metadata import MSTeamsIntegrationMetadata +from datadog_api_client.v2.model.ms_teams_integration_metadata_teams_item import MSTeamsIntegrationMetadataTeamsItem +from datadog_api_client.v2.model.maintenance import Maintenance +from datadog_api_client.v2.model.maintenance_array import MaintenanceArray +from datadog_api_client.v2.model.maintenance_data import MaintenanceData +from datadog_api_client.v2.model.maintenance_data_attributes import MaintenanceDataAttributes +from datadog_api_client.v2.model.maintenance_data_attributes_components_affected_items import MaintenanceDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.maintenance_data_attributes_status import MaintenanceDataAttributesStatus +from datadog_api_client.v2.model.maintenance_data_attributes_updates_items import MaintenanceDataAttributesUpdatesItems +from datadog_api_client.v2.model.maintenance_data_attributes_updates_items_components_affected_items import MaintenanceDataAttributesUpdatesItemsComponentsAffectedItems +from datadog_api_client.v2.model.maintenance_data_relationships import MaintenanceDataRelationships +from datadog_api_client.v2.model.maintenance_data_relationships_created_by_user import MaintenanceDataRelationshipsCreatedByUser +from datadog_api_client.v2.model.maintenance_data_relationships_created_by_user_data import MaintenanceDataRelationshipsCreatedByUserData +from datadog_api_client.v2.model.maintenance_data_relationships_last_modified_by_user import MaintenanceDataRelationshipsLastModifiedByUser +from datadog_api_client.v2.model.maintenance_data_relationships_last_modified_by_user_data import MaintenanceDataRelationshipsLastModifiedByUserData +from datadog_api_client.v2.model.maintenance_data_relationships_status_page import MaintenanceDataRelationshipsStatusPage +from datadog_api_client.v2.model.maintenance_data_relationships_status_page_data import MaintenanceDataRelationshipsStatusPageData +from datadog_api_client.v2.model.maintenance_data_relationships_template import MaintenanceDataRelationshipsTemplate +from datadog_api_client.v2.model.maintenance_data_relationships_template_data import MaintenanceDataRelationshipsTemplateData +from datadog_api_client.v2.model.maintenance_template import MaintenanceTemplate +from datadog_api_client.v2.model.maintenance_template_array import MaintenanceTemplateArray +from datadog_api_client.v2.model.maintenance_template_data import MaintenanceTemplateData +from datadog_api_client.v2.model.maintenance_template_data_attributes import MaintenanceTemplateDataAttributes +from datadog_api_client.v2.model.maintenance_template_data_relationships import MaintenanceTemplateDataRelationships +from datadog_api_client.v2.model.maintenance_template_data_relationships_created_by_user import MaintenanceTemplateDataRelationshipsCreatedByUser +from datadog_api_client.v2.model.maintenance_template_data_relationships_created_by_user_data import MaintenanceTemplateDataRelationshipsCreatedByUserData +from datadog_api_client.v2.model.maintenance_template_data_relationships_last_modified_by_user import MaintenanceTemplateDataRelationshipsLastModifiedByUser +from datadog_api_client.v2.model.maintenance_template_data_relationships_last_modified_by_user_data import MaintenanceTemplateDataRelationshipsLastModifiedByUserData +from datadog_api_client.v2.model.maintenance_template_data_relationships_status_page import MaintenanceTemplateDataRelationshipsStatusPage +from datadog_api_client.v2.model.maintenance_template_data_relationships_status_page_data import MaintenanceTemplateDataRelationshipsStatusPageData +from datadog_api_client.v2.model.maintenance_update import MaintenanceUpdate +from datadog_api_client.v2.model.maintenance_update_data import MaintenanceUpdateData +from datadog_api_client.v2.model.maintenance_update_data_attributes import MaintenanceUpdateDataAttributes +from datadog_api_client.v2.model.maintenance_update_data_attributes_status import MaintenanceUpdateDataAttributesStatus +from datadog_api_client.v2.model.maintenance_update_data_relationships import MaintenanceUpdateDataRelationships +from datadog_api_client.v2.model.maintenance_update_data_relationships_maintenance import MaintenanceUpdateDataRelationshipsMaintenance +from datadog_api_client.v2.model.maintenance_update_data_relationships_maintenance_data import MaintenanceUpdateDataRelationshipsMaintenanceData +from datadog_api_client.v2.model.maintenance_update_data_relationships_user import MaintenanceUpdateDataRelationshipsUser +from datadog_api_client.v2.model.maintenance_update_data_relationships_user_data import MaintenanceUpdateDataRelationshipsUserData +from datadog_api_client.v2.model.maintenance_window import MaintenanceWindow +from datadog_api_client.v2.model.maintenance_window_attributes import MaintenanceWindowAttributes +from datadog_api_client.v2.model.maintenance_window_create import MaintenanceWindowCreate +from datadog_api_client.v2.model.maintenance_window_create_attributes import MaintenanceWindowCreateAttributes +from datadog_api_client.v2.model.maintenance_window_create_request import MaintenanceWindowCreateRequest +from datadog_api_client.v2.model.maintenance_window_resource_type import MaintenanceWindowResourceType +from datadog_api_client.v2.model.maintenance_window_response import MaintenanceWindowResponse +from datadog_api_client.v2.model.maintenance_window_update import MaintenanceWindowUpdate +from datadog_api_client.v2.model.maintenance_window_update_attributes import MaintenanceWindowUpdateAttributes +from datadog_api_client.v2.model.maintenance_window_update_request import MaintenanceWindowUpdateRequest +from datadog_api_client.v2.model.maintenance_windows_response import MaintenanceWindowsResponse +from datadog_api_client.v2.model.managed_orgs_data import ManagedOrgsData +from datadog_api_client.v2.model.managed_orgs_relationship_to_org import ManagedOrgsRelationshipToOrg +from datadog_api_client.v2.model.managed_orgs_relationship_to_orgs import ManagedOrgsRelationshipToOrgs +from datadog_api_client.v2.model.managed_orgs_relationships import ManagedOrgsRelationships +from datadog_api_client.v2.model.managed_orgs_response import ManagedOrgsResponse +from datadog_api_client.v2.model.managed_orgs_type import ManagedOrgsType +from datadog_api_client.v2.model.max_session_duration_type import MaxSessionDurationType +from datadog_api_client.v2.model.max_session_duration_update_attributes import MaxSessionDurationUpdateAttributes +from datadog_api_client.v2.model.max_session_duration_update_data import MaxSessionDurationUpdateData +from datadog_api_client.v2.model.max_session_duration_update_request import MaxSessionDurationUpdateRequest +from datadog_api_client.v2.model.mcp_scan_request import McpScanRequest +from datadog_api_client.v2.model.mcp_scan_request_data import McpScanRequestData +from datadog_api_client.v2.model.mcp_scan_request_data_attributes import McpScanRequestDataAttributes +from datadog_api_client.v2.model.mcp_scan_request_data_attributes_libraries_items import McpScanRequestDataAttributesLibrariesItems +from datadog_api_client.v2.model.mcp_scan_request_data_type import McpScanRequestDataType +from datadog_api_client.v2.model.mcp_scan_request_response import McpScanRequestResponse +from datadog_api_client.v2.model.mcp_scan_request_response_data import McpScanRequestResponseData +from datadog_api_client.v2.model.mcp_scan_request_response_data_attributes import McpScanRequestResponseDataAttributes +from datadog_api_client.v2.model.mcp_scan_request_response_data_type import McpScanRequestResponseDataType +from datadog_api_client.v2.model.member_team import MemberTeam +from datadog_api_client.v2.model.member_team_type import MemberTeamType +from datadog_api_client.v2.model.metadata import Metadata +from datadog_api_client.v2.model.metric import Metric +from datadog_api_client.v2.model.metric_active_configuration_type import MetricActiveConfigurationType +from datadog_api_client.v2.model.metric_all_tags import MetricAllTags +from datadog_api_client.v2.model.metric_all_tags_attributes import MetricAllTagsAttributes +from datadog_api_client.v2.model.metric_all_tags_response import MetricAllTagsResponse +from datadog_api_client.v2.model.metric_asset_attributes import MetricAssetAttributes +from datadog_api_client.v2.model.metric_asset_dashboard_relationship import MetricAssetDashboardRelationship +from datadog_api_client.v2.model.metric_asset_dashboard_relationships import MetricAssetDashboardRelationships +from datadog_api_client.v2.model.metric_asset_monitor_relationship import MetricAssetMonitorRelationship +from datadog_api_client.v2.model.metric_asset_monitor_relationships import MetricAssetMonitorRelationships +from datadog_api_client.v2.model.metric_asset_notebook_relationship import MetricAssetNotebookRelationship +from datadog_api_client.v2.model.metric_asset_notebook_relationships import MetricAssetNotebookRelationships +from datadog_api_client.v2.model.metric_asset_response_data import MetricAssetResponseData +from datadog_api_client.v2.model.metric_asset_response_included import MetricAssetResponseIncluded +from datadog_api_client.v2.model.metric_asset_response_relationships import MetricAssetResponseRelationships +from datadog_api_client.v2.model.metric_asset_slo_relationship import MetricAssetSLORelationship +from datadog_api_client.v2.model.metric_asset_slo_relationships import MetricAssetSLORelationships +from datadog_api_client.v2.model.metric_assets_response import MetricAssetsResponse +from datadog_api_client.v2.model.metric_bulk_configure_tags_type import MetricBulkConfigureTagsType +from datadog_api_client.v2.model.metric_bulk_tag_config_create import MetricBulkTagConfigCreate +from datadog_api_client.v2.model.metric_bulk_tag_config_create_attributes import MetricBulkTagConfigCreateAttributes +from datadog_api_client.v2.model.metric_bulk_tag_config_create_request import MetricBulkTagConfigCreateRequest +from datadog_api_client.v2.model.metric_bulk_tag_config_delete import MetricBulkTagConfigDelete +from datadog_api_client.v2.model.metric_bulk_tag_config_delete_attributes import MetricBulkTagConfigDeleteAttributes +from datadog_api_client.v2.model.metric_bulk_tag_config_delete_request import MetricBulkTagConfigDeleteRequest +from datadog_api_client.v2.model.metric_bulk_tag_config_email_list import MetricBulkTagConfigEmailList +from datadog_api_client.v2.model.metric_bulk_tag_config_response import MetricBulkTagConfigResponse +from datadog_api_client.v2.model.metric_bulk_tag_config_status import MetricBulkTagConfigStatus +from datadog_api_client.v2.model.metric_bulk_tag_config_status_attributes import MetricBulkTagConfigStatusAttributes +from datadog_api_client.v2.model.metric_bulk_tag_config_tag_name_list import MetricBulkTagConfigTagNameList +from datadog_api_client.v2.model.metric_content_encoding import MetricContentEncoding +from datadog_api_client.v2.model.metric_custom_aggregation import MetricCustomAggregation +from datadog_api_client.v2.model.metric_custom_aggregations import MetricCustomAggregations +from datadog_api_client.v2.model.metric_custom_space_aggregation import MetricCustomSpaceAggregation +from datadog_api_client.v2.model.metric_custom_time_aggregation import MetricCustomTimeAggregation +from datadog_api_client.v2.model.metric_dashboard_asset import MetricDashboardAsset +from datadog_api_client.v2.model.metric_dashboard_attributes import MetricDashboardAttributes +from datadog_api_client.v2.model.metric_dashboard_type import MetricDashboardType +from datadog_api_client.v2.model.metric_distinct_volume import MetricDistinctVolume +from datadog_api_client.v2.model.metric_distinct_volume_attributes import MetricDistinctVolumeAttributes +from datadog_api_client.v2.model.metric_distinct_volume_type import MetricDistinctVolumeType +from datadog_api_client.v2.model.metric_estimate import MetricEstimate +from datadog_api_client.v2.model.metric_estimate_attributes import MetricEstimateAttributes +from datadog_api_client.v2.model.metric_estimate_resource_type import MetricEstimateResourceType +from datadog_api_client.v2.model.metric_estimate_response import MetricEstimateResponse +from datadog_api_client.v2.model.metric_estimate_type import MetricEstimateType +from datadog_api_client.v2.model.metric_ingested_indexed_volume import MetricIngestedIndexedVolume +from datadog_api_client.v2.model.metric_ingested_indexed_volume_attributes import MetricIngestedIndexedVolumeAttributes +from datadog_api_client.v2.model.metric_ingested_indexed_volume_type import MetricIngestedIndexedVolumeType +from datadog_api_client.v2.model.metric_intake_type import MetricIntakeType +from datadog_api_client.v2.model.metric_meta_page import MetricMetaPage +from datadog_api_client.v2.model.metric_meta_page_type import MetricMetaPageType +from datadog_api_client.v2.model.metric_metadata import MetricMetadata +from datadog_api_client.v2.model.metric_monitor_asset import MetricMonitorAsset +from datadog_api_client.v2.model.metric_monitor_type import MetricMonitorType +from datadog_api_client.v2.model.metric_notebook_asset import MetricNotebookAsset +from datadog_api_client.v2.model.metric_notebook_type import MetricNotebookType +from datadog_api_client.v2.model.metric_origin import MetricOrigin +from datadog_api_client.v2.model.metric_pagination_meta import MetricPaginationMeta +from datadog_api_client.v2.model.metric_payload import MetricPayload +from datadog_api_client.v2.model.metric_point import MetricPoint +from datadog_api_client.v2.model.metric_relationships import MetricRelationships +from datadog_api_client.v2.model.metric_resource import MetricResource +from datadog_api_client.v2.model.metric_slo_asset import MetricSLOAsset +from datadog_api_client.v2.model.metric_slo_type import MetricSLOType +from datadog_api_client.v2.model.metric_series import MetricSeries +from datadog_api_client.v2.model.metric_suggested_aggregations import MetricSuggestedAggregations +from datadog_api_client.v2.model.metric_suggested_tags_and_aggregations import MetricSuggestedTagsAndAggregations +from datadog_api_client.v2.model.metric_suggested_tags_and_aggregations_response import MetricSuggestedTagsAndAggregationsResponse +from datadog_api_client.v2.model.metric_suggested_tags_attributes import MetricSuggestedTagsAttributes +from datadog_api_client.v2.model.metric_tag_cardinalities_meta import MetricTagCardinalitiesMeta +from datadog_api_client.v2.model.metric_tag_cardinalities_response import MetricTagCardinalitiesResponse +from datadog_api_client.v2.model.metric_tag_cardinality import MetricTagCardinality +from datadog_api_client.v2.model.metric_tag_cardinality_attributes import MetricTagCardinalityAttributes +from datadog_api_client.v2.model.metric_tag_configuration import MetricTagConfiguration +from datadog_api_client.v2.model.metric_tag_configuration_attributes import MetricTagConfigurationAttributes +from datadog_api_client.v2.model.metric_tag_configuration_create_attributes import MetricTagConfigurationCreateAttributes +from datadog_api_client.v2.model.metric_tag_configuration_create_data import MetricTagConfigurationCreateData +from datadog_api_client.v2.model.metric_tag_configuration_create_request import MetricTagConfigurationCreateRequest +from datadog_api_client.v2.model.metric_tag_configuration_metric_type_category import MetricTagConfigurationMetricTypeCategory +from datadog_api_client.v2.model.metric_tag_configuration_metric_types import MetricTagConfigurationMetricTypes +from datadog_api_client.v2.model.metric_tag_configuration_response import MetricTagConfigurationResponse +from datadog_api_client.v2.model.metric_tag_configuration_type import MetricTagConfigurationType +from datadog_api_client.v2.model.metric_tag_configuration_update_attributes import MetricTagConfigurationUpdateAttributes +from datadog_api_client.v2.model.metric_tag_configuration_update_data import MetricTagConfigurationUpdateData +from datadog_api_client.v2.model.metric_tag_configuration_update_request import MetricTagConfigurationUpdateRequest +from datadog_api_client.v2.model.metric_type import MetricType +from datadog_api_client.v2.model.metric_volumes import MetricVolumes +from datadog_api_client.v2.model.metric_volumes_relationship import MetricVolumesRelationship +from datadog_api_client.v2.model.metric_volumes_relationship_data import MetricVolumesRelationshipData +from datadog_api_client.v2.model.metric_volumes_response import MetricVolumesResponse +from datadog_api_client.v2.model.metrics_aggregator import MetricsAggregator +from datadog_api_client.v2.model.metrics_and_metric_tag_configurations import MetricsAndMetricTagConfigurations +from datadog_api_client.v2.model.metrics_and_metric_tag_configurations_response import MetricsAndMetricTagConfigurationsResponse +from datadog_api_client.v2.model.metrics_data_source import MetricsDataSource +from datadog_api_client.v2.model.metrics_list_response_links import MetricsListResponseLinks +from datadog_api_client.v2.model.metrics_scalar_query import MetricsScalarQuery +from datadog_api_client.v2.model.metrics_timeseries_query import MetricsTimeseriesQuery +from datadog_api_client.v2.model.microsoft_sentinel_destination import MicrosoftSentinelDestination +from datadog_api_client.v2.model.microsoft_sentinel_destination_type import MicrosoftSentinelDestinationType +from datadog_api_client.v2.model.microsoft_teams_channel_info_response_attributes import MicrosoftTeamsChannelInfoResponseAttributes +from datadog_api_client.v2.model.microsoft_teams_channel_info_response_data import MicrosoftTeamsChannelInfoResponseData +from datadog_api_client.v2.model.microsoft_teams_channel_info_type import MicrosoftTeamsChannelInfoType +from datadog_api_client.v2.model.microsoft_teams_configuration_reference import MicrosoftTeamsConfigurationReference +from datadog_api_client.v2.model.microsoft_teams_configuration_reference_data import MicrosoftTeamsConfigurationReferenceData +from datadog_api_client.v2.model.microsoft_teams_create_tenant_based_handle_request import MicrosoftTeamsCreateTenantBasedHandleRequest +from datadog_api_client.v2.model.microsoft_teams_create_workflows_webhook_handle_request import MicrosoftTeamsCreateWorkflowsWebhookHandleRequest +from datadog_api_client.v2.model.microsoft_teams_get_channel_by_name_response import MicrosoftTeamsGetChannelByNameResponse +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_attributes import MicrosoftTeamsTenantBasedHandleAttributes +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_info_response_attributes import MicrosoftTeamsTenantBasedHandleInfoResponseAttributes +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_info_response_data import MicrosoftTeamsTenantBasedHandleInfoResponseData +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_info_type import MicrosoftTeamsTenantBasedHandleInfoType +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_request_attributes import MicrosoftTeamsTenantBasedHandleRequestAttributes +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_request_data import MicrosoftTeamsTenantBasedHandleRequestData +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_response import MicrosoftTeamsTenantBasedHandleResponse +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_response_data import MicrosoftTeamsTenantBasedHandleResponseData +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handle_type import MicrosoftTeamsTenantBasedHandleType +from datadog_api_client.v2.model.microsoft_teams_tenant_based_handles_response import MicrosoftTeamsTenantBasedHandlesResponse +from datadog_api_client.v2.model.microsoft_teams_update_tenant_based_handle_request import MicrosoftTeamsUpdateTenantBasedHandleRequest +from datadog_api_client.v2.model.microsoft_teams_update_tenant_based_handle_request_data import MicrosoftTeamsUpdateTenantBasedHandleRequestData +from datadog_api_client.v2.model.microsoft_teams_update_workflows_webhook_handle_request import MicrosoftTeamsUpdateWorkflowsWebhookHandleRequest +from datadog_api_client.v2.model.microsoft_teams_update_workflows_webhook_handle_request_data import MicrosoftTeamsUpdateWorkflowsWebhookHandleRequestData +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_attributes import MicrosoftTeamsWorkflowsWebhookHandleAttributes +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_request_attributes import MicrosoftTeamsWorkflowsWebhookHandleRequestAttributes +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_request_data import MicrosoftTeamsWorkflowsWebhookHandleRequestData +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_response import MicrosoftTeamsWorkflowsWebhookHandleResponse +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_response_data import MicrosoftTeamsWorkflowsWebhookHandleResponseData +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handle_type import MicrosoftTeamsWorkflowsWebhookHandleType +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_handles_response import MicrosoftTeamsWorkflowsWebhookHandlesResponse +from datadog_api_client.v2.model.microsoft_teams_workflows_webhook_response_attributes import MicrosoftTeamsWorkflowsWebhookResponseAttributes +from datadog_api_client.v2.model.model_lab_artifact_info import ModelLabArtifactInfo +from datadog_api_client.v2.model.model_lab_artifact_object_info import ModelLabArtifactObjectInfo +from datadog_api_client.v2.model.model_lab_facet_keys_attributes import ModelLabFacetKeysAttributes +from datadog_api_client.v2.model.model_lab_facet_keys_data import ModelLabFacetKeysData +from datadog_api_client.v2.model.model_lab_facet_keys_response import ModelLabFacetKeysResponse +from datadog_api_client.v2.model.model_lab_facet_keys_type import ModelLabFacetKeysType +from datadog_api_client.v2.model.model_lab_facet_type import ModelLabFacetType +from datadog_api_client.v2.model.model_lab_facet_values_attributes import ModelLabFacetValuesAttributes +from datadog_api_client.v2.model.model_lab_facet_values_data import ModelLabFacetValuesData +from datadog_api_client.v2.model.model_lab_facet_values_response import ModelLabFacetValuesResponse +from datadog_api_client.v2.model.model_lab_facet_values_type import ModelLabFacetValuesType +from datadog_api_client.v2.model.model_lab_metric_stat_range import ModelLabMetricStatRange +from datadog_api_client.v2.model.model_lab_metric_summary import ModelLabMetricSummary +from datadog_api_client.v2.model.model_lab_numeric_range import ModelLabNumericRange +from datadog_api_client.v2.model.model_lab_page_meta import ModelLabPageMeta +from datadog_api_client.v2.model.model_lab_page_meta_page import ModelLabPageMetaPage +from datadog_api_client.v2.model.model_lab_pagination_links import ModelLabPaginationLinks +from datadog_api_client.v2.model.model_lab_project_artifacts_attributes import ModelLabProjectArtifactsAttributes +from datadog_api_client.v2.model.model_lab_project_artifacts_data import ModelLabProjectArtifactsData +from datadog_api_client.v2.model.model_lab_project_artifacts_response import ModelLabProjectArtifactsResponse +from datadog_api_client.v2.model.model_lab_project_artifacts_type import ModelLabProjectArtifactsType +from datadog_api_client.v2.model.model_lab_project_attributes import ModelLabProjectAttributes +from datadog_api_client.v2.model.model_lab_project_data import ModelLabProjectData +from datadog_api_client.v2.model.model_lab_project_facet_type import ModelLabProjectFacetType +from datadog_api_client.v2.model.model_lab_project_response import ModelLabProjectResponse +from datadog_api_client.v2.model.model_lab_project_type import ModelLabProjectType +from datadog_api_client.v2.model.model_lab_projects_response import ModelLabProjectsResponse +from datadog_api_client.v2.model.model_lab_run_artifacts_attributes import ModelLabRunArtifactsAttributes +from datadog_api_client.v2.model.model_lab_run_artifacts_data import ModelLabRunArtifactsData +from datadog_api_client.v2.model.model_lab_run_artifacts_response import ModelLabRunArtifactsResponse +from datadog_api_client.v2.model.model_lab_run_artifacts_type import ModelLabRunArtifactsType +from datadog_api_client.v2.model.model_lab_run_attributes import ModelLabRunAttributes +from datadog_api_client.v2.model.model_lab_run_data import ModelLabRunData +from datadog_api_client.v2.model.model_lab_run_param import ModelLabRunParam +from datadog_api_client.v2.model.model_lab_run_response import ModelLabRunResponse +from datadog_api_client.v2.model.model_lab_run_status import ModelLabRunStatus +from datadog_api_client.v2.model.model_lab_run_type import ModelLabRunType +from datadog_api_client.v2.model.model_lab_runs_response import ModelLabRunsResponse +from datadog_api_client.v2.model.model_lab_tag import ModelLabTag +from datadog_api_client.v2.model.monitor_alert_trigger_attributes import MonitorAlertTriggerAttributes +from datadog_api_client.v2.model.monitor_config_policy_attribute_create_request import MonitorConfigPolicyAttributeCreateRequest +from datadog_api_client.v2.model.monitor_config_policy_attribute_edit_request import MonitorConfigPolicyAttributeEditRequest +from datadog_api_client.v2.model.monitor_config_policy_attribute_response import MonitorConfigPolicyAttributeResponse +from datadog_api_client.v2.model.monitor_config_policy_create_data import MonitorConfigPolicyCreateData +from datadog_api_client.v2.model.monitor_config_policy_create_request import MonitorConfigPolicyCreateRequest +from datadog_api_client.v2.model.monitor_config_policy_edit_data import MonitorConfigPolicyEditData +from datadog_api_client.v2.model.monitor_config_policy_edit_request import MonitorConfigPolicyEditRequest +from datadog_api_client.v2.model.monitor_config_policy_list_response import MonitorConfigPolicyListResponse +from datadog_api_client.v2.model.monitor_config_policy_policy import MonitorConfigPolicyPolicy +from datadog_api_client.v2.model.monitor_config_policy_policy_create_request import MonitorConfigPolicyPolicyCreateRequest +from datadog_api_client.v2.model.monitor_config_policy_resource_type import MonitorConfigPolicyResourceType +from datadog_api_client.v2.model.monitor_config_policy_response import MonitorConfigPolicyResponse +from datadog_api_client.v2.model.monitor_config_policy_response_data import MonitorConfigPolicyResponseData +from datadog_api_client.v2.model.monitor_config_policy_tag_policy import MonitorConfigPolicyTagPolicy +from datadog_api_client.v2.model.monitor_config_policy_tag_policy_create_request import MonitorConfigPolicyTagPolicyCreateRequest +from datadog_api_client.v2.model.monitor_config_policy_type import MonitorConfigPolicyType +from datadog_api_client.v2.model.monitor_downtime_match_resource_type import MonitorDowntimeMatchResourceType +from datadog_api_client.v2.model.monitor_downtime_match_response import MonitorDowntimeMatchResponse +from datadog_api_client.v2.model.monitor_downtime_match_response_attributes import MonitorDowntimeMatchResponseAttributes +from datadog_api_client.v2.model.monitor_downtime_match_response_data import MonitorDowntimeMatchResponseData +from datadog_api_client.v2.model.monitor_notification_rule_attributes import MonitorNotificationRuleAttributes +from datadog_api_client.v2.model.monitor_notification_rule_condition import MonitorNotificationRuleCondition +from datadog_api_client.v2.model.monitor_notification_rule_conditional_recipients import MonitorNotificationRuleConditionalRecipients +from datadog_api_client.v2.model.monitor_notification_rule_create_request import MonitorNotificationRuleCreateRequest +from datadog_api_client.v2.model.monitor_notification_rule_create_request_data import MonitorNotificationRuleCreateRequestData +from datadog_api_client.v2.model.monitor_notification_rule_data import MonitorNotificationRuleData +from datadog_api_client.v2.model.monitor_notification_rule_filter import MonitorNotificationRuleFilter +from datadog_api_client.v2.model.monitor_notification_rule_filter_scope import MonitorNotificationRuleFilterScope +from datadog_api_client.v2.model.monitor_notification_rule_filter_tags import MonitorNotificationRuleFilterTags +from datadog_api_client.v2.model.monitor_notification_rule_list_response import MonitorNotificationRuleListResponse +from datadog_api_client.v2.model.monitor_notification_rule_relationships import MonitorNotificationRuleRelationships +from datadog_api_client.v2.model.monitor_notification_rule_relationships_created_by import MonitorNotificationRuleRelationshipsCreatedBy +from datadog_api_client.v2.model.monitor_notification_rule_relationships_created_by_data import MonitorNotificationRuleRelationshipsCreatedByData +from datadog_api_client.v2.model.monitor_notification_rule_resource_type import MonitorNotificationRuleResourceType +from datadog_api_client.v2.model.monitor_notification_rule_response import MonitorNotificationRuleResponse +from datadog_api_client.v2.model.monitor_notification_rule_response_attributes import MonitorNotificationRuleResponseAttributes +from datadog_api_client.v2.model.monitor_notification_rule_response_included_item import MonitorNotificationRuleResponseIncludedItem +from datadog_api_client.v2.model.monitor_notification_rule_update_request import MonitorNotificationRuleUpdateRequest +from datadog_api_client.v2.model.monitor_notification_rule_update_request_data import MonitorNotificationRuleUpdateRequestData +from datadog_api_client.v2.model.monitor_trigger import MonitorTrigger +from datadog_api_client.v2.model.monitor_trigger_wrapper import MonitorTriggerWrapper +from datadog_api_client.v2.model.monitor_type import MonitorType +from datadog_api_client.v2.model.monitor_user_template import MonitorUserTemplate +from datadog_api_client.v2.model.monitor_user_template_create_data import MonitorUserTemplateCreateData +from datadog_api_client.v2.model.monitor_user_template_create_request import MonitorUserTemplateCreateRequest +from datadog_api_client.v2.model.monitor_user_template_create_response import MonitorUserTemplateCreateResponse +from datadog_api_client.v2.model.monitor_user_template_list_response import MonitorUserTemplateListResponse +from datadog_api_client.v2.model.monitor_user_template_request_attributes import MonitorUserTemplateRequestAttributes +from datadog_api_client.v2.model.monitor_user_template_resource_type import MonitorUserTemplateResourceType +from datadog_api_client.v2.model.monitor_user_template_response import MonitorUserTemplateResponse +from datadog_api_client.v2.model.monitor_user_template_response_attributes import MonitorUserTemplateResponseAttributes +from datadog_api_client.v2.model.monitor_user_template_response_data import MonitorUserTemplateResponseData +from datadog_api_client.v2.model.monitor_user_template_response_data_with_versions import MonitorUserTemplateResponseDataWithVersions +from datadog_api_client.v2.model.monitor_user_template_template_variables_items import MonitorUserTemplateTemplateVariablesItems +from datadog_api_client.v2.model.monitor_user_template_update_data import MonitorUserTemplateUpdateData +from datadog_api_client.v2.model.monitor_user_template_update_request import MonitorUserTemplateUpdateRequest +from datadog_api_client.v2.model.monthly_cost_attribution_attributes import MonthlyCostAttributionAttributes +from datadog_api_client.v2.model.monthly_cost_attribution_body import MonthlyCostAttributionBody +from datadog_api_client.v2.model.monthly_cost_attribution_meta import MonthlyCostAttributionMeta +from datadog_api_client.v2.model.monthly_cost_attribution_pagination import MonthlyCostAttributionPagination +from datadog_api_client.v2.model.monthly_cost_attribution_response import MonthlyCostAttributionResponse +from datadog_api_client.v2.model.mute_data_type import MuteDataType +from datadog_api_client.v2.model.mute_findings_mute_attributes import MuteFindingsMuteAttributes +from datadog_api_client.v2.model.mute_findings_reason import MuteFindingsReason +from datadog_api_client.v2.model.mute_findings_request import MuteFindingsRequest +from datadog_api_client.v2.model.mute_findings_request_data import MuteFindingsRequestData +from datadog_api_client.v2.model.mute_findings_request_data_attributes import MuteFindingsRequestDataAttributes +from datadog_api_client.v2.model.mute_findings_request_data_relationships import MuteFindingsRequestDataRelationships +from datadog_api_client.v2.model.mute_findings_response import MuteFindingsResponse +from datadog_api_client.v2.model.mute_findings_response_data import MuteFindingsResponseData +from datadog_api_client.v2.model.mute_reason import MuteReason +from datadog_api_client.v2.model.mute_rule_action import MuteRuleAction +from datadog_api_client.v2.model.mute_rule_attributes_create import MuteRuleAttributesCreate +from datadog_api_client.v2.model.mute_rule_attributes_response import MuteRuleAttributesResponse +from datadog_api_client.v2.model.mute_rule_create_request import MuteRuleCreateRequest +from datadog_api_client.v2.model.mute_rule_data_create import MuteRuleDataCreate +from datadog_api_client.v2.model.mute_rule_data_response import MuteRuleDataResponse +from datadog_api_client.v2.model.mute_rule_reorder_item import MuteRuleReorderItem +from datadog_api_client.v2.model.mute_rule_reorder_request import MuteRuleReorderRequest +from datadog_api_client.v2.model.mute_rule_response import MuteRuleResponse +from datadog_api_client.v2.model.mute_rule_type import MuteRuleType +from datadog_api_client.v2.model.mute_rule_update_request import MuteRuleUpdateRequest +from datadog_api_client.v2.model.mute_rules_response import MuteRulesResponse +from datadog_api_client.v2.model.ndk_sourcemap_attributes import NDKSourcemapAttributes +from datadog_api_client.v2.model.ndk_sourcemap_data import NDKSourcemapData +from datadog_api_client.v2.model.network_health_insight import NetworkHealthInsight +from datadog_api_client.v2.model.network_health_insight_attributes import NetworkHealthInsightAttributes +from datadog_api_client.v2.model.network_health_insight_category import NetworkHealthInsightCategory +from datadog_api_client.v2.model.network_health_insight_failure_type import NetworkHealthInsightFailureType +from datadog_api_client.v2.model.network_health_insight_traffic_volume import NetworkHealthInsightTrafficVolume +from datadog_api_client.v2.model.network_health_insights_response import NetworkHealthInsightsResponse +from datadog_api_client.v2.model.network_health_insights_type import NetworkHealthInsightsType +from datadog_api_client.v2.model.node_type import NodeType +from datadog_api_client.v2.model.node_types_response import NodeTypesResponse +from datadog_api_client.v2.model.node_types_response_data import NodeTypesResponseData +from datadog_api_client.v2.model.node_types_response_data_attributes import NodeTypesResponseDataAttributes +from datadog_api_client.v2.model.node_types_response_data_type import NodeTypesResponseDataType +from datadog_api_client.v2.model.notebook_create_data import NotebookCreateData +from datadog_api_client.v2.model.notebook_create_request import NotebookCreateRequest +from datadog_api_client.v2.model.notebook_resource_type import NotebookResourceType +from datadog_api_client.v2.model.notebook_trigger_wrapper import NotebookTriggerWrapper +from datadog_api_client.v2.model.notification_channel import NotificationChannel +from datadog_api_client.v2.model.notification_channel_attributes import NotificationChannelAttributes +from datadog_api_client.v2.model.notification_channel_config import NotificationChannelConfig +from datadog_api_client.v2.model.notification_channel_data import NotificationChannelData +from datadog_api_client.v2.model.notification_channel_email_config import NotificationChannelEmailConfig +from datadog_api_client.v2.model.notification_channel_email_config_type import NotificationChannelEmailConfigType +from datadog_api_client.v2.model.notification_channel_email_format_type import NotificationChannelEmailFormatType +from datadog_api_client.v2.model.notification_channel_phone_config import NotificationChannelPhoneConfig +from datadog_api_client.v2.model.notification_channel_phone_config_type import NotificationChannelPhoneConfigType +from datadog_api_client.v2.model.notification_channel_push_config import NotificationChannelPushConfig +from datadog_api_client.v2.model.notification_channel_push_config_type import NotificationChannelPushConfigType +from datadog_api_client.v2.model.notification_channel_type import NotificationChannelType +from datadog_api_client.v2.model.notification_rule import NotificationRule +from datadog_api_client.v2.model.notification_rule_attributes import NotificationRuleAttributes +from datadog_api_client.v2.model.notification_rule_preview_notification_status import NotificationRulePreviewNotificationStatus +from datadog_api_client.v2.model.notification_rule_preview_response import NotificationRulePreviewResponse +from datadog_api_client.v2.model.notification_rule_preview_response_attributes import NotificationRulePreviewResponseAttributes +from datadog_api_client.v2.model.notification_rule_preview_response_data import NotificationRulePreviewResponseData +from datadog_api_client.v2.model.notification_rule_preview_response_type import NotificationRulePreviewResponseType +from datadog_api_client.v2.model.notification_rule_preview_result import NotificationRulePreviewResult +from datadog_api_client.v2.model.notification_rule_response import NotificationRuleResponse +from datadog_api_client.v2.model.notification_rule_routing import NotificationRuleRouting +from datadog_api_client.v2.model.notification_rule_routing_mode import NotificationRuleRoutingMode +from datadog_api_client.v2.model.notification_rules_list_response import NotificationRulesListResponse +from datadog_api_client.v2.model.notification_rules_type import NotificationRulesType +from datadog_api_client.v2.model.notion_api_key import NotionAPIKey +from datadog_api_client.v2.model.notion_api_key_type import NotionAPIKeyType +from datadog_api_client.v2.model.notion_api_key_update import NotionAPIKeyUpdate +from datadog_api_client.v2.model.notion_credentials import NotionCredentials +from datadog_api_client.v2.model.notion_credentials_update import NotionCredentialsUpdate +from datadog_api_client.v2.model.notion_integration import NotionIntegration +from datadog_api_client.v2.model.notion_integration_type import NotionIntegrationType +from datadog_api_client.v2.model.notion_integration_update import NotionIntegrationUpdate +from datadog_api_client.v2.model.nullable_relationship_to_user import NullableRelationshipToUser +from datadog_api_client.v2.model.nullable_relationship_to_user_data import NullableRelationshipToUserData +from datadog_api_client.v2.model.nullable_user_relationship import NullableUserRelationship +from datadog_api_client.v2.model.nullable_user_relationship_data import NullableUserRelationshipData +from datadog_api_client.v2.model.o_auth2_well_known_sites_attributes import OAuth2WellKnownSitesAttributes +from datadog_api_client.v2.model.o_auth2_well_known_sites_data import OAuth2WellKnownSitesData +from datadog_api_client.v2.model.o_auth2_well_known_sites_env_type import OAuth2WellKnownSitesEnvType +from datadog_api_client.v2.model.o_auth2_well_known_sites_response import OAuth2WellKnownSitesResponse +from datadog_api_client.v2.model.o_auth_client_registration_error import OAuthClientRegistrationError +from datadog_api_client.v2.model.o_auth_client_registration_grant_type import OAuthClientRegistrationGrantType +from datadog_api_client.v2.model.o_auth_client_registration_request import OAuthClientRegistrationRequest +from datadog_api_client.v2.model.o_auth_client_registration_response import OAuthClientRegistrationResponse +from datadog_api_client.v2.model.o_auth_client_registration_response_type import OAuthClientRegistrationResponseType +from datadog_api_client.v2.model.o_auth_oidc_scope import OAuthOidcScope +from datadog_api_client.v2.model.o_auth_scopes_restriction import OAuthScopesRestriction +from datadog_api_client.v2.model.o_auth_scopes_restriction_response import OAuthScopesRestrictionResponse +from datadog_api_client.v2.model.o_auth_scopes_restriction_response_attributes import OAuthScopesRestrictionResponseAttributes +from datadog_api_client.v2.model.o_auth_scopes_restriction_response_data import OAuthScopesRestrictionResponseData +from datadog_api_client.v2.model.o_auth_scopes_restriction_type import OAuthScopesRestrictionType +from datadog_api_client.v2.model.oci_config import OCIConfig +from datadog_api_client.v2.model.oci_config_attributes import OCIConfigAttributes +from datadog_api_client.v2.model.oci_config_type import OCIConfigType +from datadog_api_client.v2.model.oci_configs_response import OCIConfigsResponse +from datadog_api_client.v2.model.observability_pipeline import ObservabilityPipeline +from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor import ObservabilityPipelineAddEnvVarsProcessor +from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor_type import ObservabilityPipelineAddEnvVarsProcessorType +from datadog_api_client.v2.model.observability_pipeline_add_env_vars_processor_variable import ObservabilityPipelineAddEnvVarsProcessorVariable +from datadog_api_client.v2.model.observability_pipeline_add_fields_processor import ObservabilityPipelineAddFieldsProcessor +from datadog_api_client.v2.model.observability_pipeline_add_fields_processor_type import ObservabilityPipelineAddFieldsProcessorType +from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor import ObservabilityPipelineAddHostnameProcessor +from datadog_api_client.v2.model.observability_pipeline_add_hostname_processor_type import ObservabilityPipelineAddHostnameProcessorType +from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor import ObservabilityPipelineAddMetricTagsProcessor +from datadog_api_client.v2.model.observability_pipeline_add_metric_tags_processor_type import ObservabilityPipelineAddMetricTagsProcessorType +from datadog_api_client.v2.model.observability_pipeline_aggregate_processor import ObservabilityPipelineAggregateProcessor +from datadog_api_client.v2.model.observability_pipeline_aggregate_processor_mode import ObservabilityPipelineAggregateProcessorMode +from datadog_api_client.v2.model.observability_pipeline_aggregate_processor_type import ObservabilityPipelineAggregateProcessorType +from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source import ObservabilityPipelineAmazonDataFirehoseSource +from datadog_api_client.v2.model.observability_pipeline_amazon_data_firehose_source_type import ObservabilityPipelineAmazonDataFirehoseSourceType +from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination import ObservabilityPipelineAmazonOpenSearchDestination +from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_auth import ObservabilityPipelineAmazonOpenSearchDestinationAuth +from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_auth_strategy import ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy +from datadog_api_client.v2.model.observability_pipeline_amazon_open_search_destination_type import ObservabilityPipelineAmazonOpenSearchDestinationType +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination import ObservabilityPipelineAmazonS3Destination +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_server_side_encryption import ObservabilityPipelineAmazonS3DestinationServerSideEncryption +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_storage_class import ObservabilityPipelineAmazonS3DestinationStorageClass +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_destination_type import ObservabilityPipelineAmazonS3DestinationType +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_batch_settings import ObservabilityPipelineAmazonS3GenericBatchSettings +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression import ObservabilityPipelineAmazonS3GenericCompression +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_gzip import ObservabilityPipelineAmazonS3GenericCompressionGzip +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_gzip_type import ObservabilityPipelineAmazonS3GenericCompressionGzipType +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_snappy import ObservabilityPipelineAmazonS3GenericCompressionSnappy +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_snappy_type import ObservabilityPipelineAmazonS3GenericCompressionSnappyType +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_zstd import ObservabilityPipelineAmazonS3GenericCompressionZstd +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_compression_zstd_type import ObservabilityPipelineAmazonS3GenericCompressionZstdType +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination import ObservabilityPipelineAmazonS3GenericDestination +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_destination_type import ObservabilityPipelineAmazonS3GenericDestinationType +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding import ObservabilityPipelineAmazonS3GenericEncoding +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_json import ObservabilityPipelineAmazonS3GenericEncodingJson +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_json_type import ObservabilityPipelineAmazonS3GenericEncodingJsonType +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_parquet import ObservabilityPipelineAmazonS3GenericEncodingParquet +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_generic_encoding_parquet_type import ObservabilityPipelineAmazonS3GenericEncodingParquetType +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source import ObservabilityPipelineAmazonS3Source +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source_compression import ObservabilityPipelineAmazonS3SourceCompression +from datadog_api_client.v2.model.observability_pipeline_amazon_s3_source_type import ObservabilityPipelineAmazonS3SourceType +from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination import ObservabilityPipelineAmazonSecurityLakeDestination +from datadog_api_client.v2.model.observability_pipeline_amazon_security_lake_destination_type import ObservabilityPipelineAmazonSecurityLakeDestinationType +from datadog_api_client.v2.model.observability_pipeline_aws_auth import ObservabilityPipelineAwsAuth +from datadog_api_client.v2.model.observability_pipeline_buffer_options import ObservabilityPipelineBufferOptions +from datadog_api_client.v2.model.observability_pipeline_buffer_options_disk_type import ObservabilityPipelineBufferOptionsDiskType +from datadog_api_client.v2.model.observability_pipeline_buffer_options_memory_type import ObservabilityPipelineBufferOptionsMemoryType +from datadog_api_client.v2.model.observability_pipeline_buffer_options_when_full import ObservabilityPipelineBufferOptionsWhenFull +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination import ObservabilityPipelineClickhouseDestination +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_auth import ObservabilityPipelineClickhouseDestinationAuth +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_auth_strategy import ObservabilityPipelineClickhouseDestinationAuthStrategy +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_batch import ObservabilityPipelineClickhouseDestinationBatch +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_batch_encoding import ObservabilityPipelineClickhouseDestinationBatchEncoding +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_batch_encoding_codec import ObservabilityPipelineClickhouseDestinationBatchEncodingCodec +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_compression import ObservabilityPipelineClickhouseDestinationCompression +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_compression_algorithm import ObservabilityPipelineClickhouseDestinationCompressionAlgorithm +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_compression_object import ObservabilityPipelineClickhouseDestinationCompressionObject +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_format import ObservabilityPipelineClickhouseDestinationFormat +from datadog_api_client.v2.model.observability_pipeline_clickhouse_destination_type import ObservabilityPipelineClickhouseDestinationType +from datadog_api_client.v2.model.observability_pipeline_client_tls import ObservabilityPipelineClientTls +from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination import ObservabilityPipelineCloudPremDestination +from datadog_api_client.v2.model.observability_pipeline_cloud_prem_destination_type import ObservabilityPipelineCloudPremDestinationType +from datadog_api_client.v2.model.observability_pipeline_config import ObservabilityPipelineConfig +from datadog_api_client.v2.model.observability_pipeline_config_destination_item import ObservabilityPipelineConfigDestinationItem +from datadog_api_client.v2.model.observability_pipeline_config_pipeline_type import ObservabilityPipelineConfigPipelineType +from datadog_api_client.v2.model.observability_pipeline_config_processor_group import ObservabilityPipelineConfigProcessorGroup +from datadog_api_client.v2.model.observability_pipeline_config_processor_item import ObservabilityPipelineConfigProcessorItem +from datadog_api_client.v2.model.observability_pipeline_config_source_item import ObservabilityPipelineConfigSourceItem +from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination import ObservabilityPipelineCrowdStrikeNextGenSiemDestination +from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_compression import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompression +from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_compression_algorithm import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm +from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_encoding import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding +from datadog_api_client.v2.model.observability_pipeline_crowd_strike_next_gen_siem_destination_type import ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType +from datadog_api_client.v2.model.observability_pipeline_custom_processor import ObservabilityPipelineCustomProcessor +from datadog_api_client.v2.model.observability_pipeline_custom_processor_remap import ObservabilityPipelineCustomProcessorRemap +from datadog_api_client.v2.model.observability_pipeline_custom_processor_type import ObservabilityPipelineCustomProcessorType +from datadog_api_client.v2.model.observability_pipeline_data import ObservabilityPipelineData +from datadog_api_client.v2.model.observability_pipeline_data_attributes import ObservabilityPipelineDataAttributes +from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination import ObservabilityPipelineDatabricksZerobusDestination +from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination_auth import ObservabilityPipelineDatabricksZerobusDestinationAuth +from datadog_api_client.v2.model.observability_pipeline_databricks_zerobus_destination_type import ObservabilityPipelineDatabricksZerobusDestinationType +from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source import ObservabilityPipelineDatadogAgentSource +from datadog_api_client.v2.model.observability_pipeline_datadog_agent_source_type import ObservabilityPipelineDatadogAgentSourceType +from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination import ObservabilityPipelineDatadogLogsDestination +from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination_route import ObservabilityPipelineDatadogLogsDestinationRoute +from datadog_api_client.v2.model.observability_pipeline_datadog_logs_destination_type import ObservabilityPipelineDatadogLogsDestinationType +from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination import ObservabilityPipelineDatadogMetricsDestination +from datadog_api_client.v2.model.observability_pipeline_datadog_metrics_destination_type import ObservabilityPipelineDatadogMetricsDestinationType +from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor import ObservabilityPipelineDatadogTagsProcessor +from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor_action import ObservabilityPipelineDatadogTagsProcessorAction +from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor_mode import ObservabilityPipelineDatadogTagsProcessorMode +from datadog_api_client.v2.model.observability_pipeline_datadog_tags_processor_type import ObservabilityPipelineDatadogTagsProcessorType +from datadog_api_client.v2.model.observability_pipeline_decoding import ObservabilityPipelineDecoding +from datadog_api_client.v2.model.observability_pipeline_dedupe_processor import ObservabilityPipelineDedupeProcessor +from datadog_api_client.v2.model.observability_pipeline_dedupe_processor_cache import ObservabilityPipelineDedupeProcessorCache +from datadog_api_client.v2.model.observability_pipeline_dedupe_processor_mode import ObservabilityPipelineDedupeProcessorMode +from datadog_api_client.v2.model.observability_pipeline_dedupe_processor_type import ObservabilityPipelineDedupeProcessorType +from datadog_api_client.v2.model.observability_pipeline_disk_buffer_options import ObservabilityPipelineDiskBufferOptions +from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination import ObservabilityPipelineElasticsearchDestination +from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_api_version import ObservabilityPipelineElasticsearchDestinationApiVersion +from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_auth import ObservabilityPipelineElasticsearchDestinationAuth +from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_compression import ObservabilityPipelineElasticsearchDestinationCompression +from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_compression_algorithm import ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm +from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_data_stream import ObservabilityPipelineElasticsearchDestinationDataStream +from datadog_api_client.v2.model.observability_pipeline_elasticsearch_destination_type import ObservabilityPipelineElasticsearchDestinationType +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_event_lookup import ObservabilityPipelineEnrichmentTableFieldEventLookup +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_secret_lookup import ObservabilityPipelineEnrichmentTableFieldSecretLookup +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_field_vrl_lookup import ObservabilityPipelineEnrichmentTableFieldVrlLookup +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file import ObservabilityPipelineEnrichmentTableFile +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_encoding import ObservabilityPipelineEnrichmentTableFileEncoding +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_encoding_type import ObservabilityPipelineEnrichmentTableFileEncodingType +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_key_item_field import ObservabilityPipelineEnrichmentTableFileKeyItemField +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_key_items import ObservabilityPipelineEnrichmentTableFileKeyItems +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_key_items_comparison import ObservabilityPipelineEnrichmentTableFileKeyItemsComparison +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_schema_items import ObservabilityPipelineEnrichmentTableFileSchemaItems +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_file_schema_items_type import ObservabilityPipelineEnrichmentTableFileSchemaItemsType +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_geo_ip import ObservabilityPipelineEnrichmentTableGeoIp +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor import ObservabilityPipelineEnrichmentTableProcessor +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_processor_type import ObservabilityPipelineEnrichmentTableProcessorType +from datadog_api_client.v2.model.observability_pipeline_enrichment_table_reference_table import ObservabilityPipelineEnrichmentTableReferenceTable +from datadog_api_client.v2.model.observability_pipeline_field_value import ObservabilityPipelineFieldValue +from datadog_api_client.v2.model.observability_pipeline_filter_processor import ObservabilityPipelineFilterProcessor +from datadog_api_client.v2.model.observability_pipeline_filter_processor_type import ObservabilityPipelineFilterProcessorType +from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source import ObservabilityPipelineFluentBitSource +from datadog_api_client.v2.model.observability_pipeline_fluent_bit_source_type import ObservabilityPipelineFluentBitSourceType +from datadog_api_client.v2.model.observability_pipeline_fluentd_source import ObservabilityPipelineFluentdSource +from datadog_api_client.v2.model.observability_pipeline_fluentd_source_type import ObservabilityPipelineFluentdSourceType +from datadog_api_client.v2.model.observability_pipeline_gcp_auth import ObservabilityPipelineGcpAuth +from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor import ObservabilityPipelineGenerateMetricsProcessor +from datadog_api_client.v2.model.observability_pipeline_generate_metrics_processor_type import ObservabilityPipelineGenerateMetricsProcessorType +from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor import ObservabilityPipelineGenerateMetricsV2Processor +from datadog_api_client.v2.model.observability_pipeline_generate_metrics_v2_processor_type import ObservabilityPipelineGenerateMetricsV2ProcessorType +from datadog_api_client.v2.model.observability_pipeline_generated_metric import ObservabilityPipelineGeneratedMetric +from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_field import ObservabilityPipelineGeneratedMetricIncrementByField +from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_field_strategy import ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy +from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_one import ObservabilityPipelineGeneratedMetricIncrementByOne +from datadog_api_client.v2.model.observability_pipeline_generated_metric_increment_by_one_strategy import ObservabilityPipelineGeneratedMetricIncrementByOneStrategy +from datadog_api_client.v2.model.observability_pipeline_generated_metric_metric_type import ObservabilityPipelineGeneratedMetricMetricType +from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination import ObservabilityPipelineGoogleChronicleDestination +from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination_encoding import ObservabilityPipelineGoogleChronicleDestinationEncoding +from datadog_api_client.v2.model.observability_pipeline_google_chronicle_destination_type import ObservabilityPipelineGoogleChronicleDestinationType +from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination import ObservabilityPipelineGoogleCloudStorageDestination +from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination_acl import ObservabilityPipelineGoogleCloudStorageDestinationAcl +from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination_storage_class import ObservabilityPipelineGoogleCloudStorageDestinationStorageClass +from datadog_api_client.v2.model.observability_pipeline_google_cloud_storage_destination_type import ObservabilityPipelineGoogleCloudStorageDestinationType +from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination import ObservabilityPipelineGooglePubSubDestination +from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination_encoding import ObservabilityPipelineGooglePubSubDestinationEncoding +from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_destination_type import ObservabilityPipelineGooglePubSubDestinationType +from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source import ObservabilityPipelineGooglePubSubSource +from datadog_api_client.v2.model.observability_pipeline_google_pub_sub_source_type import ObservabilityPipelineGooglePubSubSourceType +from datadog_api_client.v2.model.observability_pipeline_http_client_destination import ObservabilityPipelineHttpClientDestination +from datadog_api_client.v2.model.observability_pipeline_http_client_destination_auth_strategy import ObservabilityPipelineHttpClientDestinationAuthStrategy +from datadog_api_client.v2.model.observability_pipeline_http_client_destination_compression import ObservabilityPipelineHttpClientDestinationCompression +from datadog_api_client.v2.model.observability_pipeline_http_client_destination_compression_algorithm import ObservabilityPipelineHttpClientDestinationCompressionAlgorithm +from datadog_api_client.v2.model.observability_pipeline_http_client_destination_encoding import ObservabilityPipelineHttpClientDestinationEncoding +from datadog_api_client.v2.model.observability_pipeline_http_client_destination_type import ObservabilityPipelineHttpClientDestinationType +from datadog_api_client.v2.model.observability_pipeline_http_client_source import ObservabilityPipelineHttpClientSource +from datadog_api_client.v2.model.observability_pipeline_http_client_source_auth_strategy import ObservabilityPipelineHttpClientSourceAuthStrategy +from datadog_api_client.v2.model.observability_pipeline_http_client_source_type import ObservabilityPipelineHttpClientSourceType +from datadog_api_client.v2.model.observability_pipeline_http_server_source import ObservabilityPipelineHttpServerSource +from datadog_api_client.v2.model.observability_pipeline_http_server_source_auth_strategy import ObservabilityPipelineHttpServerSourceAuthStrategy +from datadog_api_client.v2.model.observability_pipeline_http_server_source_type import ObservabilityPipelineHttpServerSourceType +from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token import ObservabilityPipelineHttpServerSourceValidToken +from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token_path_to_token import ObservabilityPipelineHttpServerSourceValidTokenPathToToken +from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token_path_to_token_header import ObservabilityPipelineHttpServerSourceValidTokenPathToTokenHeader +from datadog_api_client.v2.model.observability_pipeline_http_server_source_valid_token_path_to_token_location import ObservabilityPipelineHttpServerSourceValidTokenPathToTokenLocation +from datadog_api_client.v2.model.observability_pipeline_kafka_destination import ObservabilityPipelineKafkaDestination +from datadog_api_client.v2.model.observability_pipeline_kafka_destination_compression import ObservabilityPipelineKafkaDestinationCompression +from datadog_api_client.v2.model.observability_pipeline_kafka_destination_encoding import ObservabilityPipelineKafkaDestinationEncoding +from datadog_api_client.v2.model.observability_pipeline_kafka_destination_type import ObservabilityPipelineKafkaDestinationType +from datadog_api_client.v2.model.observability_pipeline_kafka_librdkafka_option import ObservabilityPipelineKafkaLibrdkafkaOption +from datadog_api_client.v2.model.observability_pipeline_kafka_sasl import ObservabilityPipelineKafkaSasl +from datadog_api_client.v2.model.observability_pipeline_kafka_sasl_mechanism import ObservabilityPipelineKafkaSaslMechanism +from datadog_api_client.v2.model.observability_pipeline_kafka_source import ObservabilityPipelineKafkaSource +from datadog_api_client.v2.model.observability_pipeline_kafka_source_type import ObservabilityPipelineKafkaSourceType +from datadog_api_client.v2.model.observability_pipeline_logstash_source import ObservabilityPipelineLogstashSource +from datadog_api_client.v2.model.observability_pipeline_logstash_source_type import ObservabilityPipelineLogstashSourceType +from datadog_api_client.v2.model.observability_pipeline_memory_buffer_options import ObservabilityPipelineMemoryBufferOptions +from datadog_api_client.v2.model.observability_pipeline_memory_buffer_size_options import ObservabilityPipelineMemoryBufferSizeOptions +from datadog_api_client.v2.model.observability_pipeline_metadata_entry import ObservabilityPipelineMetadataEntry +from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor import ObservabilityPipelineMetricTagsProcessor +from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_rule import ObservabilityPipelineMetricTagsProcessorRule +from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_rule_action import ObservabilityPipelineMetricTagsProcessorRuleAction +from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_rule_mode import ObservabilityPipelineMetricTagsProcessorRuleMode +from datadog_api_client.v2.model.observability_pipeline_metric_tags_processor_type import ObservabilityPipelineMetricTagsProcessorType +from datadog_api_client.v2.model.observability_pipeline_metric_value import ObservabilityPipelineMetricValue +from datadog_api_client.v2.model.observability_pipeline_mtls_server_tls import ObservabilityPipelineMtlsServerTls +from datadog_api_client.v2.model.observability_pipeline_new_relic_destination import ObservabilityPipelineNewRelicDestination +from datadog_api_client.v2.model.observability_pipeline_new_relic_destination_region import ObservabilityPipelineNewRelicDestinationRegion +from datadog_api_client.v2.model.observability_pipeline_new_relic_destination_type import ObservabilityPipelineNewRelicDestinationType +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor import ObservabilityPipelineOcsfMapperProcessor +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor_mapping import ObservabilityPipelineOcsfMapperProcessorMapping +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor_mapping_mapping import ObservabilityPipelineOcsfMapperProcessorMappingMapping +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapper_processor_type import ObservabilityPipelineOcsfMapperProcessorType +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom import ObservabilityPipelineOcsfMappingCustom +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_field_mapping import ObservabilityPipelineOcsfMappingCustomFieldMapping +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_lookup import ObservabilityPipelineOcsfMappingCustomLookup +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_lookup_table_entry import ObservabilityPipelineOcsfMappingCustomLookupTableEntry +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_custom_metadata import ObservabilityPipelineOcsfMappingCustomMetadata +from datadog_api_client.v2.model.observability_pipeline_ocsf_mapping_library import ObservabilityPipelineOcsfMappingLibrary +from datadog_api_client.v2.model.observability_pipeline_open_search_destination import ObservabilityPipelineOpenSearchDestination +from datadog_api_client.v2.model.observability_pipeline_open_search_destination_data_stream import ObservabilityPipelineOpenSearchDestinationDataStream +from datadog_api_client.v2.model.observability_pipeline_open_search_destination_type import ObservabilityPipelineOpenSearchDestinationType +from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source import ObservabilityPipelineOpentelemetrySource +from datadog_api_client.v2.model.observability_pipeline_opentelemetry_source_type import ObservabilityPipelineOpentelemetrySourceType +from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor import ObservabilityPipelineParseGrokProcessor +from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_include_rule import ObservabilityPipelineParseGrokProcessorIncludeRule +from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule import ObservabilityPipelineParseGrokProcessorRule +from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_item import ObservabilityPipelineParseGrokProcessorRuleItem +from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_match_rule import ObservabilityPipelineParseGrokProcessorRuleMatchRule +from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_rule_support_rule import ObservabilityPipelineParseGrokProcessorRuleSupportRule +from datadog_api_client.v2.model.observability_pipeline_parse_grok_processor_type import ObservabilityPipelineParseGrokProcessorType +from datadog_api_client.v2.model.observability_pipeline_parse_json_processor import ObservabilityPipelineParseJSONProcessor +from datadog_api_client.v2.model.observability_pipeline_parse_json_processor_type import ObservabilityPipelineParseJSONProcessorType +from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor import ObservabilityPipelineParseXMLProcessor +from datadog_api_client.v2.model.observability_pipeline_parse_xml_processor_type import ObservabilityPipelineParseXMLProcessorType +from datadog_api_client.v2.model.observability_pipeline_quota_processor import ObservabilityPipelineQuotaProcessor +from datadog_api_client.v2.model.observability_pipeline_quota_processor_limit import ObservabilityPipelineQuotaProcessorLimit +from datadog_api_client.v2.model.observability_pipeline_quota_processor_limit_enforce_type import ObservabilityPipelineQuotaProcessorLimitEnforceType +from datadog_api_client.v2.model.observability_pipeline_quota_processor_overflow_action import ObservabilityPipelineQuotaProcessorOverflowAction +from datadog_api_client.v2.model.observability_pipeline_quota_processor_override import ObservabilityPipelineQuotaProcessorOverride +from datadog_api_client.v2.model.observability_pipeline_quota_processor_type import ObservabilityPipelineQuotaProcessorType +from datadog_api_client.v2.model.observability_pipeline_reduce_processor import ObservabilityPipelineReduceProcessor +from datadog_api_client.v2.model.observability_pipeline_reduce_processor_merge_strategy import ObservabilityPipelineReduceProcessorMergeStrategy +from datadog_api_client.v2.model.observability_pipeline_reduce_processor_merge_strategy_strategy import ObservabilityPipelineReduceProcessorMergeStrategyStrategy +from datadog_api_client.v2.model.observability_pipeline_reduce_processor_type import ObservabilityPipelineReduceProcessorType +from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor import ObservabilityPipelineRemoveFieldsProcessor +from datadog_api_client.v2.model.observability_pipeline_remove_fields_processor_type import ObservabilityPipelineRemoveFieldsProcessorType +from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor import ObservabilityPipelineRenameFieldsProcessor +from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor_field import ObservabilityPipelineRenameFieldsProcessorField +from datadog_api_client.v2.model.observability_pipeline_rename_fields_processor_type import ObservabilityPipelineRenameFieldsProcessorType +from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor import ObservabilityPipelineRenameMetricTagsProcessor +from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor_tag import ObservabilityPipelineRenameMetricTagsProcessorTag +from datadog_api_client.v2.model.observability_pipeline_rename_metric_tags_processor_type import ObservabilityPipelineRenameMetricTagsProcessorType +from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination import ObservabilityPipelineRsyslogDestination +from datadog_api_client.v2.model.observability_pipeline_rsyslog_destination_type import ObservabilityPipelineRsyslogDestinationType +from datadog_api_client.v2.model.observability_pipeline_rsyslog_source import ObservabilityPipelineRsyslogSource +from datadog_api_client.v2.model.observability_pipeline_rsyslog_source_type import ObservabilityPipelineRsyslogSourceType +from datadog_api_client.v2.model.observability_pipeline_sample_processor import ObservabilityPipelineSampleProcessor +from datadog_api_client.v2.model.observability_pipeline_sample_processor_type import ObservabilityPipelineSampleProcessorType +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor import ObservabilityPipelineSensitiveDataScannerProcessor +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action import ObservabilityPipelineSensitiveDataScannerProcessorAction +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_hash import ObservabilityPipelineSensitiveDataScannerProcessorActionHash +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_hash_action import ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedact +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_action import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptions +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_partial_redact_options_direction import ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_redact import ObservabilityPipelineSensitiveDataScannerProcessorActionRedact +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_redact_action import ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_action_redact_options import ObservabilityPipelineSensitiveDataScannerProcessorActionRedactOptions +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_custom_pattern import ObservabilityPipelineSensitiveDataScannerProcessorCustomPattern +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_custom_pattern_options import ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternOptions +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_custom_pattern_type import ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_keyword_options import ObservabilityPipelineSensitiveDataScannerProcessorKeywordOptions +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPattern +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern_options import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternOptions +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_library_pattern_type import ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_pattern import ObservabilityPipelineSensitiveDataScannerProcessorPattern +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_rule import ObservabilityPipelineSensitiveDataScannerProcessorRule +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope import ObservabilityPipelineSensitiveDataScannerProcessorScope +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_all import ObservabilityPipelineSensitiveDataScannerProcessorScopeAll +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_all_target import ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_exclude import ObservabilityPipelineSensitiveDataScannerProcessorScopeExclude +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_exclude_target import ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_include import ObservabilityPipelineSensitiveDataScannerProcessorScopeInclude +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_include_target import ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_scope_options import ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions +from datadog_api_client.v2.model.observability_pipeline_sensitive_data_scanner_processor_type import ObservabilityPipelineSensitiveDataScannerProcessorType +from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination import ObservabilityPipelineSentinelOneDestination +from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination_region import ObservabilityPipelineSentinelOneDestinationRegion +from datadog_api_client.v2.model.observability_pipeline_sentinel_one_destination_type import ObservabilityPipelineSentinelOneDestinationType +from datadog_api_client.v2.model.observability_pipeline_socket_destination import ObservabilityPipelineSocketDestination +from datadog_api_client.v2.model.observability_pipeline_socket_destination_encoding import ObservabilityPipelineSocketDestinationEncoding +from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing import ObservabilityPipelineSocketDestinationFraming +from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_bytes import ObservabilityPipelineSocketDestinationFramingBytes +from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_bytes_method import ObservabilityPipelineSocketDestinationFramingBytesMethod +from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_character_delimited import ObservabilityPipelineSocketDestinationFramingCharacterDelimited +from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_character_delimited_method import ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod +from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_newline_delimited import ObservabilityPipelineSocketDestinationFramingNewlineDelimited +from datadog_api_client.v2.model.observability_pipeline_socket_destination_framing_newline_delimited_method import ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod +from datadog_api_client.v2.model.observability_pipeline_socket_destination_mode import ObservabilityPipelineSocketDestinationMode +from datadog_api_client.v2.model.observability_pipeline_socket_destination_type import ObservabilityPipelineSocketDestinationType +from datadog_api_client.v2.model.observability_pipeline_socket_source import ObservabilityPipelineSocketSource +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing import ObservabilityPipelineSocketSourceFraming +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_bytes import ObservabilityPipelineSocketSourceFramingBytes +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_bytes_method import ObservabilityPipelineSocketSourceFramingBytesMethod +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_character_delimited import ObservabilityPipelineSocketSourceFramingCharacterDelimited +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_character_delimited_method import ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_chunked_gelf import ObservabilityPipelineSocketSourceFramingChunkedGelf +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_chunked_gelf_method import ObservabilityPipelineSocketSourceFramingChunkedGelfMethod +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_newline_delimited import ObservabilityPipelineSocketSourceFramingNewlineDelimited +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_newline_delimited_method import ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_octet_counting import ObservabilityPipelineSocketSourceFramingOctetCounting +from datadog_api_client.v2.model.observability_pipeline_socket_source_framing_octet_counting_method import ObservabilityPipelineSocketSourceFramingOctetCountingMethod +from datadog_api_client.v2.model.observability_pipeline_socket_source_mode import ObservabilityPipelineSocketSourceMode +from datadog_api_client.v2.model.observability_pipeline_socket_source_type import ObservabilityPipelineSocketSourceType +from datadog_api_client.v2.model.observability_pipeline_source_valid_token_field_to_add import ObservabilityPipelineSourceValidTokenFieldToAdd +from datadog_api_client.v2.model.observability_pipeline_spec import ObservabilityPipelineSpec +from datadog_api_client.v2.model.observability_pipeline_spec_data import ObservabilityPipelineSpecData +from datadog_api_client.v2.model.observability_pipeline_split_array_processor import ObservabilityPipelineSplitArrayProcessor +from datadog_api_client.v2.model.observability_pipeline_split_array_processor_array_config import ObservabilityPipelineSplitArrayProcessorArrayConfig +from datadog_api_client.v2.model.observability_pipeline_split_array_processor_type import ObservabilityPipelineSplitArrayProcessorType +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination import ObservabilityPipelineSplunkHecDestination +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination_encoding import ObservabilityPipelineSplunkHecDestinationEncoding +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination_token_strategy import ObservabilityPipelineSplunkHecDestinationTokenStrategy +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_destination_type import ObservabilityPipelineSplunkHecDestinationType +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination import ObservabilityPipelineSplunkHecMetricsDestination +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination_compression import ObservabilityPipelineSplunkHecMetricsDestinationCompression +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_metrics_destination_type import ObservabilityPipelineSplunkHecMetricsDestinationType +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source import ObservabilityPipelineSplunkHecSource +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source_type import ObservabilityPipelineSplunkHecSourceType +from datadog_api_client.v2.model.observability_pipeline_splunk_hec_source_valid_token import ObservabilityPipelineSplunkHecSourceValidToken +from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source import ObservabilityPipelineSplunkTcpSource +from datadog_api_client.v2.model.observability_pipeline_splunk_tcp_source_type import ObservabilityPipelineSplunkTcpSourceType +from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination import ObservabilityPipelineSumoLogicDestination +from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination_encoding import ObservabilityPipelineSumoLogicDestinationEncoding +from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination_header_custom_fields_item import ObservabilityPipelineSumoLogicDestinationHeaderCustomFieldsItem +from datadog_api_client.v2.model.observability_pipeline_sumo_logic_destination_type import ObservabilityPipelineSumoLogicDestinationType +from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source import ObservabilityPipelineSumoLogicSource +from datadog_api_client.v2.model.observability_pipeline_sumo_logic_source_type import ObservabilityPipelineSumoLogicSourceType +from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination import ObservabilityPipelineSyslogNgDestination +from datadog_api_client.v2.model.observability_pipeline_syslog_ng_destination_type import ObservabilityPipelineSyslogNgDestinationType +from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source import ObservabilityPipelineSyslogNgSource +from datadog_api_client.v2.model.observability_pipeline_syslog_ng_source_type import ObservabilityPipelineSyslogNgSourceType +from datadog_api_client.v2.model.observability_pipeline_syslog_source_mode import ObservabilityPipelineSyslogSourceMode +from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor import ObservabilityPipelineTagCardinalityLimitProcessor +from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_action import ObservabilityPipelineTagCardinalityLimitProcessorAction +from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_override_type import ObservabilityPipelineTagCardinalityLimitProcessorOverrideType +from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_per_metric_limit import ObservabilityPipelineTagCardinalityLimitProcessorPerMetricLimit +from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_per_tag_limit import ObservabilityPipelineTagCardinalityLimitProcessorPerTagLimit +from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_tracking_mode import ObservabilityPipelineTagCardinalityLimitProcessorTrackingMode +from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_tracking_mode_mode import ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode +from datadog_api_client.v2.model.observability_pipeline_tag_cardinality_limit_processor_type import ObservabilityPipelineTagCardinalityLimitProcessorType +from datadog_api_client.v2.model.observability_pipeline_throttle_processor import ObservabilityPipelineThrottleProcessor +from datadog_api_client.v2.model.observability_pipeline_throttle_processor_type import ObservabilityPipelineThrottleProcessorType +from datadog_api_client.v2.model.observability_pipeline_tls import ObservabilityPipelineTls +from datadog_api_client.v2.model.observability_pipeline_websocket_source import ObservabilityPipelineWebsocketSource +from datadog_api_client.v2.model.observability_pipeline_websocket_source_auth_strategy import ObservabilityPipelineWebsocketSourceAuthStrategy +from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls import ObservabilityPipelineWebsocketSourceTls +from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_enabled import ObservabilityPipelineWebsocketSourceTlsEnabled +from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_enabled_mode import ObservabilityPipelineWebsocketSourceTlsEnabledMode +from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_with_client_cert import ObservabilityPipelineWebsocketSourceTlsWithClientCert +from datadog_api_client.v2.model.observability_pipeline_websocket_source_tls_with_client_cert_mode import ObservabilityPipelineWebsocketSourceTlsWithClientCertMode +from datadog_api_client.v2.model.observability_pipeline_websocket_source_type import ObservabilityPipelineWebsocketSourceType +from datadog_api_client.v2.model.okta_api_token import OktaAPIToken +from datadog_api_client.v2.model.okta_api_token_type import OktaAPITokenType +from datadog_api_client.v2.model.okta_api_token_update import OktaAPITokenUpdate +from datadog_api_client.v2.model.okta_account import OktaAccount +from datadog_api_client.v2.model.okta_account_attributes import OktaAccountAttributes +from datadog_api_client.v2.model.okta_account_request import OktaAccountRequest +from datadog_api_client.v2.model.okta_account_response import OktaAccountResponse +from datadog_api_client.v2.model.okta_account_response_data import OktaAccountResponseData +from datadog_api_client.v2.model.okta_account_type import OktaAccountType +from datadog_api_client.v2.model.okta_account_update_request import OktaAccountUpdateRequest +from datadog_api_client.v2.model.okta_account_update_request_attributes import OktaAccountUpdateRequestAttributes +from datadog_api_client.v2.model.okta_account_update_request_data import OktaAccountUpdateRequestData +from datadog_api_client.v2.model.okta_accounts_response import OktaAccountsResponse +from datadog_api_client.v2.model.okta_credentials import OktaCredentials +from datadog_api_client.v2.model.okta_credentials_update import OktaCredentialsUpdate +from datadog_api_client.v2.model.okta_integration import OktaIntegration +from datadog_api_client.v2.model.okta_integration_type import OktaIntegrationType +from datadog_api_client.v2.model.okta_integration_update import OktaIntegrationUpdate +from datadog_api_client.v2.model.on_call_notification_rule import OnCallNotificationRule +from datadog_api_client.v2.model.on_call_notification_rule_attributes import OnCallNotificationRuleAttributes +from datadog_api_client.v2.model.on_call_notification_rule_category import OnCallNotificationRuleCategory +from datadog_api_client.v2.model.on_call_notification_rule_channel_relationship import OnCallNotificationRuleChannelRelationship +from datadog_api_client.v2.model.on_call_notification_rule_channel_relationship_data import OnCallNotificationRuleChannelRelationshipData +from datadog_api_client.v2.model.on_call_notification_rule_channel_settings import OnCallNotificationRuleChannelSettings +from datadog_api_client.v2.model.on_call_notification_rule_data import OnCallNotificationRuleData +from datadog_api_client.v2.model.on_call_notification_rule_relationships import OnCallNotificationRuleRelationships +from datadog_api_client.v2.model.on_call_notification_rule_request_attributes import OnCallNotificationRuleRequestAttributes +from datadog_api_client.v2.model.on_call_notification_rule_type import OnCallNotificationRuleType +from datadog_api_client.v2.model.on_call_notification_rules_included import OnCallNotificationRulesIncluded +from datadog_api_client.v2.model.on_call_page_target_type import OnCallPageTargetType +from datadog_api_client.v2.model.on_call_phone_notification_rule_method import OnCallPhoneNotificationRuleMethod +from datadog_api_client.v2.model.on_call_phone_notification_rule_settings import OnCallPhoneNotificationRuleSettings +from datadog_api_client.v2.model.on_call_trigger import OnCallTrigger +from datadog_api_client.v2.model.on_call_trigger_wrapper import OnCallTriggerWrapper +from datadog_api_client.v2.model.on_demand_concurrency_cap import OnDemandConcurrencyCap +from datadog_api_client.v2.model.on_demand_concurrency_cap_attributes import OnDemandConcurrencyCapAttributes +from datadog_api_client.v2.model.on_demand_concurrency_cap_response import OnDemandConcurrencyCapResponse +from datadog_api_client.v2.model.on_demand_concurrency_cap_type import OnDemandConcurrencyCapType +from datadog_api_client.v2.model.open_aiapi_key import OpenAIAPIKey +from datadog_api_client.v2.model.open_aiapi_key_type import OpenAIAPIKeyType +from datadog_api_client.v2.model.open_aiapi_key_update import OpenAIAPIKeyUpdate +from datadog_api_client.v2.model.open_ai_credentials import OpenAICredentials +from datadog_api_client.v2.model.open_ai_credentials_update import OpenAICredentialsUpdate +from datadog_api_client.v2.model.open_ai_integration import OpenAIIntegration +from datadog_api_client.v2.model.open_ai_integration_type import OpenAIIntegrationType +from datadog_api_client.v2.model.open_ai_integration_update import OpenAIIntegrationUpdate +from datadog_api_client.v2.model.open_api_endpoint import OpenAPIEndpoint +from datadog_api_client.v2.model.open_api_file import OpenAPIFile +from datadog_api_client.v2.model.opsgenie_account_create_attributes import OpsgenieAccountCreateAttributes +from datadog_api_client.v2.model.opsgenie_account_create_data import OpsgenieAccountCreateData +from datadog_api_client.v2.model.opsgenie_account_create_request import OpsgenieAccountCreateRequest +from datadog_api_client.v2.model.opsgenie_account_response import OpsgenieAccountResponse +from datadog_api_client.v2.model.opsgenie_account_response_attributes import OpsgenieAccountResponseAttributes +from datadog_api_client.v2.model.opsgenie_account_response_data import OpsgenieAccountResponseData +from datadog_api_client.v2.model.opsgenie_account_type import OpsgenieAccountType +from datadog_api_client.v2.model.opsgenie_account_update_attributes import OpsgenieAccountUpdateAttributes +from datadog_api_client.v2.model.opsgenie_account_update_data import OpsgenieAccountUpdateData +from datadog_api_client.v2.model.opsgenie_account_update_request import OpsgenieAccountUpdateRequest +from datadog_api_client.v2.model.opsgenie_accounts_response import OpsgenieAccountsResponse +from datadog_api_client.v2.model.opsgenie_service_create_attributes import OpsgenieServiceCreateAttributes +from datadog_api_client.v2.model.opsgenie_service_create_data import OpsgenieServiceCreateData +from datadog_api_client.v2.model.opsgenie_service_create_request import OpsgenieServiceCreateRequest +from datadog_api_client.v2.model.opsgenie_service_region_type import OpsgenieServiceRegionType +from datadog_api_client.v2.model.opsgenie_service_response import OpsgenieServiceResponse +from datadog_api_client.v2.model.opsgenie_service_response_attributes import OpsgenieServiceResponseAttributes +from datadog_api_client.v2.model.opsgenie_service_response_data import OpsgenieServiceResponseData +from datadog_api_client.v2.model.opsgenie_service_type import OpsgenieServiceType +from datadog_api_client.v2.model.opsgenie_service_update_attributes import OpsgenieServiceUpdateAttributes +from datadog_api_client.v2.model.opsgenie_service_update_data import OpsgenieServiceUpdateData +from datadog_api_client.v2.model.opsgenie_service_update_request import OpsgenieServiceUpdateRequest +from datadog_api_client.v2.model.opsgenie_services_response import OpsgenieServicesResponse +from datadog_api_client.v2.model.order_direction import OrderDirection +from datadog_api_client.v2.model.org_attributes import OrgAttributes +from datadog_api_client.v2.model.org_authorized_client_attributes import OrgAuthorizedClientAttributes +from datadog_api_client.v2.model.org_authorized_client_data import OrgAuthorizedClientData +from datadog_api_client.v2.model.org_authorized_client_relationship_o_auth2_client import OrgAuthorizedClientRelationshipOAuth2Client +from datadog_api_client.v2.model.org_authorized_client_relationship_o_auth2_client_data import OrgAuthorizedClientRelationshipOAuth2ClientData +from datadog_api_client.v2.model.org_authorized_client_relationship_o_auth2_client_data_type import OrgAuthorizedClientRelationshipOAuth2ClientDataType +from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients import OrgAuthorizedClientRelationshipUserAuthorizedClients +from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients_data import OrgAuthorizedClientRelationshipUserAuthorizedClientsData +from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients_data_type import OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType +from datadog_api_client.v2.model.org_authorized_client_relationship_user_authorized_clients_links import OrgAuthorizedClientRelationshipUserAuthorizedClientsLinks +from datadog_api_client.v2.model.org_authorized_client_relationships import OrgAuthorizedClientRelationships +from datadog_api_client.v2.model.org_authorized_client_response import OrgAuthorizedClientResponse +from datadog_api_client.v2.model.org_authorized_client_type import OrgAuthorizedClientType +from datadog_api_client.v2.model.org_authorized_client_update_attributes import OrgAuthorizedClientUpdateAttributes +from datadog_api_client.v2.model.org_authorized_client_update_data import OrgAuthorizedClientUpdateData +from datadog_api_client.v2.model.org_authorized_client_update_request import OrgAuthorizedClientUpdateRequest +from datadog_api_client.v2.model.org_authorized_client_user_authorizations_sort import OrgAuthorizedClientUserAuthorizationsSort +from datadog_api_client.v2.model.org_authorized_clients_response import OrgAuthorizedClientsResponse +from datadog_api_client.v2.model.org_config_get_response import OrgConfigGetResponse +from datadog_api_client.v2.model.org_config_list_response import OrgConfigListResponse +from datadog_api_client.v2.model.org_config_read import OrgConfigRead +from datadog_api_client.v2.model.org_config_read_attributes import OrgConfigReadAttributes +from datadog_api_client.v2.model.org_config_type import OrgConfigType +from datadog_api_client.v2.model.org_config_write import OrgConfigWrite +from datadog_api_client.v2.model.org_config_write_attributes import OrgConfigWriteAttributes +from datadog_api_client.v2.model.org_config_write_request import OrgConfigWriteRequest +from datadog_api_client.v2.model.org_connection import OrgConnection +from datadog_api_client.v2.model.org_connection_attributes import OrgConnectionAttributes +from datadog_api_client.v2.model.org_connection_create import OrgConnectionCreate +from datadog_api_client.v2.model.org_connection_create_attributes import OrgConnectionCreateAttributes +from datadog_api_client.v2.model.org_connection_create_relationships import OrgConnectionCreateRelationships +from datadog_api_client.v2.model.org_connection_create_request import OrgConnectionCreateRequest +from datadog_api_client.v2.model.org_connection_list_response import OrgConnectionListResponse +from datadog_api_client.v2.model.org_connection_list_response_meta import OrgConnectionListResponseMeta +from datadog_api_client.v2.model.org_connection_list_response_meta_page import OrgConnectionListResponseMetaPage +from datadog_api_client.v2.model.org_connection_org_relationship import OrgConnectionOrgRelationship +from datadog_api_client.v2.model.org_connection_org_relationship_data import OrgConnectionOrgRelationshipData +from datadog_api_client.v2.model.org_connection_org_relationship_data_type import OrgConnectionOrgRelationshipDataType +from datadog_api_client.v2.model.org_connection_relationships import OrgConnectionRelationships +from datadog_api_client.v2.model.org_connection_response import OrgConnectionResponse +from datadog_api_client.v2.model.org_connection_type import OrgConnectionType +from datadog_api_client.v2.model.org_connection_type_enum import OrgConnectionTypeEnum +from datadog_api_client.v2.model.org_connection_update import OrgConnectionUpdate +from datadog_api_client.v2.model.org_connection_update_attributes import OrgConnectionUpdateAttributes +from datadog_api_client.v2.model.org_connection_update_request import OrgConnectionUpdateRequest +from datadog_api_client.v2.model.org_connection_user_relationship import OrgConnectionUserRelationship +from datadog_api_client.v2.model.org_connection_user_relationship_data import OrgConnectionUserRelationshipData +from datadog_api_client.v2.model.org_connection_user_relationship_data_type import OrgConnectionUserRelationshipDataType +from datadog_api_client.v2.model.org_data import OrgData +from datadog_api_client.v2.model.org_group_attributes import OrgGroupAttributes +from datadog_api_client.v2.model.org_group_create_attributes import OrgGroupCreateAttributes +from datadog_api_client.v2.model.org_group_create_data import OrgGroupCreateData +from datadog_api_client.v2.model.org_group_create_request import OrgGroupCreateRequest +from datadog_api_client.v2.model.org_group_data import OrgGroupData +from datadog_api_client.v2.model.org_group_list_response import OrgGroupListResponse +from datadog_api_client.v2.model.org_group_membership_attributes import OrgGroupMembershipAttributes +from datadog_api_client.v2.model.org_group_membership_bulk_update_attributes import OrgGroupMembershipBulkUpdateAttributes +from datadog_api_client.v2.model.org_group_membership_bulk_update_data import OrgGroupMembershipBulkUpdateData +from datadog_api_client.v2.model.org_group_membership_bulk_update_relationships import OrgGroupMembershipBulkUpdateRelationships +from datadog_api_client.v2.model.org_group_membership_bulk_update_request import OrgGroupMembershipBulkUpdateRequest +from datadog_api_client.v2.model.org_group_membership_bulk_update_type import OrgGroupMembershipBulkUpdateType +from datadog_api_client.v2.model.org_group_membership_data import OrgGroupMembershipData +from datadog_api_client.v2.model.org_group_membership_list_response import OrgGroupMembershipListResponse +from datadog_api_client.v2.model.org_group_membership_relationships import OrgGroupMembershipRelationships +from datadog_api_client.v2.model.org_group_membership_response import OrgGroupMembershipResponse +from datadog_api_client.v2.model.org_group_membership_sort_option import OrgGroupMembershipSortOption +from datadog_api_client.v2.model.org_group_membership_type import OrgGroupMembershipType +from datadog_api_client.v2.model.org_group_membership_update_data import OrgGroupMembershipUpdateData +from datadog_api_client.v2.model.org_group_membership_update_relationships import OrgGroupMembershipUpdateRelationships +from datadog_api_client.v2.model.org_group_membership_update_request import OrgGroupMembershipUpdateRequest +from datadog_api_client.v2.model.org_group_pagination_links import OrgGroupPaginationLinks +from datadog_api_client.v2.model.org_group_pagination_meta import OrgGroupPaginationMeta +from datadog_api_client.v2.model.org_group_pagination_meta_page import OrgGroupPaginationMetaPage +from datadog_api_client.v2.model.org_group_policy_attributes import OrgGroupPolicyAttributes +from datadog_api_client.v2.model.org_group_policy_config_attributes import OrgGroupPolicyConfigAttributes +from datadog_api_client.v2.model.org_group_policy_config_data import OrgGroupPolicyConfigData +from datadog_api_client.v2.model.org_group_policy_config_list_response import OrgGroupPolicyConfigListResponse +from datadog_api_client.v2.model.org_group_policy_config_type import OrgGroupPolicyConfigType +from datadog_api_client.v2.model.org_group_policy_create_attributes import OrgGroupPolicyCreateAttributes +from datadog_api_client.v2.model.org_group_policy_create_data import OrgGroupPolicyCreateData +from datadog_api_client.v2.model.org_group_policy_create_relationships import OrgGroupPolicyCreateRelationships +from datadog_api_client.v2.model.org_group_policy_create_request import OrgGroupPolicyCreateRequest +from datadog_api_client.v2.model.org_group_policy_data import OrgGroupPolicyData +from datadog_api_client.v2.model.org_group_policy_enforcement_tier import OrgGroupPolicyEnforcementTier +from datadog_api_client.v2.model.org_group_policy_list_response import OrgGroupPolicyListResponse +from datadog_api_client.v2.model.org_group_policy_override_attributes import OrgGroupPolicyOverrideAttributes +from datadog_api_client.v2.model.org_group_policy_override_create_attributes import OrgGroupPolicyOverrideCreateAttributes +from datadog_api_client.v2.model.org_group_policy_override_create_data import OrgGroupPolicyOverrideCreateData +from datadog_api_client.v2.model.org_group_policy_override_create_relationships import OrgGroupPolicyOverrideCreateRelationships +from datadog_api_client.v2.model.org_group_policy_override_create_request import OrgGroupPolicyOverrideCreateRequest +from datadog_api_client.v2.model.org_group_policy_override_data import OrgGroupPolicyOverrideData +from datadog_api_client.v2.model.org_group_policy_override_list_response import OrgGroupPolicyOverrideListResponse +from datadog_api_client.v2.model.org_group_policy_override_relationships import OrgGroupPolicyOverrideRelationships +from datadog_api_client.v2.model.org_group_policy_override_response import OrgGroupPolicyOverrideResponse +from datadog_api_client.v2.model.org_group_policy_override_sort_option import OrgGroupPolicyOverrideSortOption +from datadog_api_client.v2.model.org_group_policy_override_type import OrgGroupPolicyOverrideType +from datadog_api_client.v2.model.org_group_policy_override_update_attributes import OrgGroupPolicyOverrideUpdateAttributes +from datadog_api_client.v2.model.org_group_policy_override_update_data import OrgGroupPolicyOverrideUpdateData +from datadog_api_client.v2.model.org_group_policy_override_update_request import OrgGroupPolicyOverrideUpdateRequest +from datadog_api_client.v2.model.org_group_policy_policy_type import OrgGroupPolicyPolicyType +from datadog_api_client.v2.model.org_group_policy_relationship_to_one import OrgGroupPolicyRelationshipToOne +from datadog_api_client.v2.model.org_group_policy_relationship_to_one_data import OrgGroupPolicyRelationshipToOneData +from datadog_api_client.v2.model.org_group_policy_relationships import OrgGroupPolicyRelationships +from datadog_api_client.v2.model.org_group_policy_response import OrgGroupPolicyResponse +from datadog_api_client.v2.model.org_group_policy_sort_option import OrgGroupPolicySortOption +from datadog_api_client.v2.model.org_group_policy_suggestion_attributes import OrgGroupPolicySuggestionAttributes +from datadog_api_client.v2.model.org_group_policy_suggestion_data import OrgGroupPolicySuggestionData +from datadog_api_client.v2.model.org_group_policy_suggestion_list_response import OrgGroupPolicySuggestionListResponse +from datadog_api_client.v2.model.org_group_policy_suggestion_relationships import OrgGroupPolicySuggestionRelationships +from datadog_api_client.v2.model.org_group_policy_suggestion_status import OrgGroupPolicySuggestionStatus +from datadog_api_client.v2.model.org_group_policy_suggestion_type import OrgGroupPolicySuggestionType +from datadog_api_client.v2.model.org_group_policy_type import OrgGroupPolicyType +from datadog_api_client.v2.model.org_group_policy_update_attributes import OrgGroupPolicyUpdateAttributes +from datadog_api_client.v2.model.org_group_policy_update_data import OrgGroupPolicyUpdateData +from datadog_api_client.v2.model.org_group_policy_update_request import OrgGroupPolicyUpdateRequest +from datadog_api_client.v2.model.org_group_relationship_to_one import OrgGroupRelationshipToOne +from datadog_api_client.v2.model.org_group_relationship_to_one_data import OrgGroupRelationshipToOneData +from datadog_api_client.v2.model.org_group_response import OrgGroupResponse +from datadog_api_client.v2.model.org_group_sort_option import OrgGroupSortOption +from datadog_api_client.v2.model.org_group_type import OrgGroupType +from datadog_api_client.v2.model.org_group_update_attributes import OrgGroupUpdateAttributes +from datadog_api_client.v2.model.org_group_update_data import OrgGroupUpdateData +from datadog_api_client.v2.model.org_group_update_request import OrgGroupUpdateRequest +from datadog_api_client.v2.model.org_relationship_data import OrgRelationshipData +from datadog_api_client.v2.model.org_resource_type import OrgResourceType +from datadog_api_client.v2.model.org_saml_preferences_attributes import OrgSAMLPreferencesAttributes +from datadog_api_client.v2.model.org_saml_preferences_data import OrgSAMLPreferencesData +from datadog_api_client.v2.model.org_saml_preferences_type import OrgSAMLPreferencesType +from datadog_api_client.v2.model.org_saml_preferences_update_request import OrgSAMLPreferencesUpdateRequest +from datadog_api_client.v2.model.organization import Organization +from datadog_api_client.v2.model.organization_attributes import OrganizationAttributes +from datadog_api_client.v2.model.organizations_type import OrganizationsType +from datadog_api_client.v2.model.outbound_edge import OutboundEdge +from datadog_api_client.v2.model.outcome_type import OutcomeType +from datadog_api_client.v2.model.outcomes_batch_attributes import OutcomesBatchAttributes +from datadog_api_client.v2.model.outcomes_batch_request import OutcomesBatchRequest +from datadog_api_client.v2.model.outcomes_batch_request_data import OutcomesBatchRequestData +from datadog_api_client.v2.model.outcomes_batch_request_item import OutcomesBatchRequestItem +from datadog_api_client.v2.model.outcomes_batch_response import OutcomesBatchResponse +from datadog_api_client.v2.model.outcomes_batch_response_attributes import OutcomesBatchResponseAttributes +from datadog_api_client.v2.model.outcomes_batch_response_meta import OutcomesBatchResponseMeta +from datadog_api_client.v2.model.outcomes_batch_type import OutcomesBatchType +from datadog_api_client.v2.model.outcomes_response import OutcomesResponse +from datadog_api_client.v2.model.outcomes_response_data_item import OutcomesResponseDataItem +from datadog_api_client.v2.model.outcomes_response_included_item import OutcomesResponseIncludedItem +from datadog_api_client.v2.model.outcomes_response_included_rule_attributes import OutcomesResponseIncludedRuleAttributes +from datadog_api_client.v2.model.outcomes_response_links import OutcomesResponseLinks +from datadog_api_client.v2.model.output_schema import OutputSchema +from datadog_api_client.v2.model.output_schema_parameters import OutputSchemaParameters +from datadog_api_client.v2.model.output_schema_parameters_type import OutputSchemaParametersType +from datadog_api_client.v2.model.overwrite_allocations_request import OverwriteAllocationsRequest +from datadog_api_client.v2.model.ownership_confidence_level import OwnershipConfidenceLevel +from datadog_api_client.v2.model.ownership_evidence_attributes import OwnershipEvidenceAttributes +from datadog_api_client.v2.model.ownership_evidence_data import OwnershipEvidenceData +from datadog_api_client.v2.model.ownership_evidence_response import OwnershipEvidenceResponse +from datadog_api_client.v2.model.ownership_evidence_type import OwnershipEvidenceType +from datadog_api_client.v2.model.ownership_evidence_version import OwnershipEvidenceVersion +from datadog_api_client.v2.model.ownership_feedback_action import OwnershipFeedbackAction +from datadog_api_client.v2.model.ownership_feedback_request import OwnershipFeedbackRequest +from datadog_api_client.v2.model.ownership_feedback_request_attributes import OwnershipFeedbackRequestAttributes +from datadog_api_client.v2.model.ownership_feedback_request_data import OwnershipFeedbackRequestData +from datadog_api_client.v2.model.ownership_feedback_response import OwnershipFeedbackResponse +from datadog_api_client.v2.model.ownership_feedback_result_attributes import OwnershipFeedbackResultAttributes +from datadog_api_client.v2.model.ownership_feedback_result_data import OwnershipFeedbackResultData +from datadog_api_client.v2.model.ownership_feedback_result_type import OwnershipFeedbackResultType +from datadog_api_client.v2.model.ownership_feedback_type import OwnershipFeedbackType +from datadog_api_client.v2.model.ownership_history_attributes import OwnershipHistoryAttributes +from datadog_api_client.v2.model.ownership_history_data import OwnershipHistoryData +from datadog_api_client.v2.model.ownership_history_item import OwnershipHistoryItem +from datadog_api_client.v2.model.ownership_history_pagination import OwnershipHistoryPagination +from datadog_api_client.v2.model.ownership_history_response import OwnershipHistoryResponse +from datadog_api_client.v2.model.ownership_history_type import OwnershipHistoryType +from datadog_api_client.v2.model.ownership_inference_attributes import OwnershipInferenceAttributes +from datadog_api_client.v2.model.ownership_inference_data import OwnershipInferenceData +from datadog_api_client.v2.model.ownership_inference_item import OwnershipInferenceItem +from datadog_api_client.v2.model.ownership_inference_list_attributes import OwnershipInferenceListAttributes +from datadog_api_client.v2.model.ownership_inference_list_data import OwnershipInferenceListData +from datadog_api_client.v2.model.ownership_inference_list_response import OwnershipInferenceListResponse +from datadog_api_client.v2.model.ownership_inference_response import OwnershipInferenceResponse +from datadog_api_client.v2.model.ownership_inference_source import OwnershipInferenceSource +from datadog_api_client.v2.model.ownership_inference_status import OwnershipInferenceStatus +from datadog_api_client.v2.model.ownership_inference_type import OwnershipInferenceType +from datadog_api_client.v2.model.ownership_inferences_type import OwnershipInferencesType +from datadog_api_client.v2.model.ownership_owner_type import OwnershipOwnerType +from datadog_api_client.v2.model.ownership_settings_attributes import OwnershipSettingsAttributes +from datadog_api_client.v2.model.ownership_settings_data import OwnershipSettingsData +from datadog_api_client.v2.model.ownership_settings_request import OwnershipSettingsRequest +from datadog_api_client.v2.model.ownership_settings_request_attributes import OwnershipSettingsRequestAttributes +from datadog_api_client.v2.model.ownership_settings_request_data import OwnershipSettingsRequestData +from datadog_api_client.v2.model.ownership_settings_response import OwnershipSettingsResponse +from datadog_api_client.v2.model.ownership_settings_type import OwnershipSettingsType +from datadog_api_client.v2.model.ownership_untagged_findings_attributes import OwnershipUntaggedFindingsAttributes +from datadog_api_client.v2.model.ownership_untagged_findings_data import OwnershipUntaggedFindingsData +from datadog_api_client.v2.model.ownership_untagged_findings_response import OwnershipUntaggedFindingsResponse +from datadog_api_client.v2.model.ownership_untagged_findings_type import OwnershipUntaggedFindingsType +from datadog_api_client.v2.model.page_annotations_attributes import PageAnnotationsAttributes +from datadog_api_client.v2.model.page_annotations_data import PageAnnotationsData +from datadog_api_client.v2.model.page_annotations_response import PageAnnotationsResponse +from datadog_api_client.v2.model.page_annotations_type import PageAnnotationsType +from datadog_api_client.v2.model.page_urgency import PageUrgency +from datadog_api_client.v2.model.paginated_response_meta import PaginatedResponseMeta +from datadog_api_client.v2.model.pagination import Pagination +from datadog_api_client.v2.model.pagination_meta import PaginationMeta +from datadog_api_client.v2.model.pagination_meta_page import PaginationMetaPage +from datadog_api_client.v2.model.pagination_meta_page_type import PaginationMetaPageType +from datadog_api_client.v2.model.parameter import Parameter +from datadog_api_client.v2.model.partial_api_key import PartialAPIKey +from datadog_api_client.v2.model.partial_api_key_attributes import PartialAPIKeyAttributes +from datadog_api_client.v2.model.partial_application_key import PartialApplicationKey +from datadog_api_client.v2.model.partial_application_key_attributes import PartialApplicationKeyAttributes +from datadog_api_client.v2.model.partial_application_key_response import PartialApplicationKeyResponse +from datadog_api_client.v2.model.patch_attachment_request import PatchAttachmentRequest +from datadog_api_client.v2.model.patch_attachment_request_data import PatchAttachmentRequestData +from datadog_api_client.v2.model.patch_attachment_request_data_attributes import PatchAttachmentRequestDataAttributes +from datadog_api_client.v2.model.patch_attachment_request_data_attributes_attachment import PatchAttachmentRequestDataAttributesAttachment +from datadog_api_client.v2.model.patch_component_request import PatchComponentRequest +from datadog_api_client.v2.model.patch_component_request_data import PatchComponentRequestData +from datadog_api_client.v2.model.patch_component_request_data_attributes import PatchComponentRequestDataAttributes +from datadog_api_client.v2.model.patch_degradation_request import PatchDegradationRequest +from datadog_api_client.v2.model.patch_degradation_request_data import PatchDegradationRequestData +from datadog_api_client.v2.model.patch_degradation_request_data_attributes import PatchDegradationRequestDataAttributes +from datadog_api_client.v2.model.patch_degradation_request_data_attributes_components_affected_items import PatchDegradationRequestDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.patch_degradation_request_data_attributes_status import PatchDegradationRequestDataAttributesStatus +from datadog_api_client.v2.model.patch_degradation_request_data_relationships import PatchDegradationRequestDataRelationships +from datadog_api_client.v2.model.patch_degradation_request_data_relationships_template import PatchDegradationRequestDataRelationshipsTemplate +from datadog_api_client.v2.model.patch_degradation_request_data_relationships_template_data import PatchDegradationRequestDataRelationshipsTemplateData +from datadog_api_client.v2.model.patch_degradation_request_data_type import PatchDegradationRequestDataType +from datadog_api_client.v2.model.patch_degradation_template_request import PatchDegradationTemplateRequest +from datadog_api_client.v2.model.patch_degradation_template_request_data import PatchDegradationTemplateRequestData +from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes import PatchDegradationTemplateRequestDataAttributes +from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_components_affected_items_status import PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus +from datadog_api_client.v2.model.patch_degradation_template_request_data_attributes_updates_items import PatchDegradationTemplateRequestDataAttributesUpdatesItems +from datadog_api_client.v2.model.patch_degradation_template_request_data_type import PatchDegradationTemplateRequestDataType +from datadog_api_client.v2.model.patch_degradation_update_request import PatchDegradationUpdateRequest +from datadog_api_client.v2.model.patch_degradation_update_request_data import PatchDegradationUpdateRequestData +from datadog_api_client.v2.model.patch_degradation_update_request_data_attributes import PatchDegradationUpdateRequestDataAttributes +from datadog_api_client.v2.model.patch_degradation_update_request_data_attributes_status import PatchDegradationUpdateRequestDataAttributesStatus +from datadog_api_client.v2.model.patch_degradation_update_request_data_type import PatchDegradationUpdateRequestDataType +from datadog_api_client.v2.model.patch_incident_notification_template_request import PatchIncidentNotificationTemplateRequest +from datadog_api_client.v2.model.patch_maintenance_request import PatchMaintenanceRequest +from datadog_api_client.v2.model.patch_maintenance_request_data import PatchMaintenanceRequestData +from datadog_api_client.v2.model.patch_maintenance_request_data_attributes import PatchMaintenanceRequestDataAttributes +from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items import PatchMaintenanceRequestDataAttributesComponentsAffectedItems +from datadog_api_client.v2.model.patch_maintenance_request_data_attributes_components_affected_items_status import PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus +from datadog_api_client.v2.model.patch_maintenance_request_data_relationships import PatchMaintenanceRequestDataRelationships +from datadog_api_client.v2.model.patch_maintenance_request_data_relationships_template import PatchMaintenanceRequestDataRelationshipsTemplate +from datadog_api_client.v2.model.patch_maintenance_request_data_relationships_template_data import PatchMaintenanceRequestDataRelationshipsTemplateData +from datadog_api_client.v2.model.patch_maintenance_request_data_type import PatchMaintenanceRequestDataType +from datadog_api_client.v2.model.patch_maintenance_template_request import PatchMaintenanceTemplateRequest +from datadog_api_client.v2.model.patch_maintenance_template_request_data import PatchMaintenanceTemplateRequestData +from datadog_api_client.v2.model.patch_maintenance_template_request_data_attributes import PatchMaintenanceTemplateRequestDataAttributes +from datadog_api_client.v2.model.patch_maintenance_template_request_data_type import PatchMaintenanceTemplateRequestDataType +from datadog_api_client.v2.model.patch_maintenance_update_request import PatchMaintenanceUpdateRequest +from datadog_api_client.v2.model.patch_maintenance_update_request_data import PatchMaintenanceUpdateRequestData +from datadog_api_client.v2.model.patch_maintenance_update_request_data_attributes import PatchMaintenanceUpdateRequestDataAttributes +from datadog_api_client.v2.model.patch_maintenance_update_request_data_type import PatchMaintenanceUpdateRequestDataType +from datadog_api_client.v2.model.patch_notification_rule_parameters import PatchNotificationRuleParameters +from datadog_api_client.v2.model.patch_notification_rule_parameters_data import PatchNotificationRuleParametersData +from datadog_api_client.v2.model.patch_notification_rule_parameters_data_attributes import PatchNotificationRuleParametersDataAttributes +from datadog_api_client.v2.model.patch_status_page_request import PatchStatusPageRequest +from datadog_api_client.v2.model.patch_status_page_request_data import PatchStatusPageRequestData +from datadog_api_client.v2.model.patch_status_page_request_data_attributes import PatchStatusPageRequestDataAttributes +from datadog_api_client.v2.model.patch_table_request import PatchTableRequest +from datadog_api_client.v2.model.patch_table_request_data import PatchTableRequestData +from datadog_api_client.v2.model.patch_table_request_data_attributes import PatchTableRequestDataAttributes +from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata import PatchTableRequestDataAttributesFileMetadata +from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_cloud_storage import PatchTableRequestDataAttributesFileMetadataCloudStorage +from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_local_file import PatchTableRequestDataAttributesFileMetadataLocalFile +from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetails +from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details_aws_detail import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail +from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details_azure_detail import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail +from datadog_api_client.v2.model.patch_table_request_data_attributes_file_metadata_one_of_access_details_gcp_detail import PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail +from datadog_api_client.v2.model.patch_table_request_data_attributes_schema import PatchTableRequestDataAttributesSchema +from datadog_api_client.v2.model.patch_table_request_data_attributes_schema_fields_items import PatchTableRequestDataAttributesSchemaFieldsItems +from datadog_api_client.v2.model.patch_table_request_data_type import PatchTableRequestDataType +from datadog_api_client.v2.model.permission import Permission +from datadog_api_client.v2.model.permission_attributes import PermissionAttributes +from datadog_api_client.v2.model.permissions_response import PermissionsResponse +from datadog_api_client.v2.model.permissions_type import PermissionsType +from datadog_api_client.v2.model.personal_access_token import PersonalAccessToken +from datadog_api_client.v2.model.personal_access_token_attributes import PersonalAccessTokenAttributes +from datadog_api_client.v2.model.personal_access_token_create_attributes import PersonalAccessTokenCreateAttributes +from datadog_api_client.v2.model.personal_access_token_create_data import PersonalAccessTokenCreateData +from datadog_api_client.v2.model.personal_access_token_create_request import PersonalAccessTokenCreateRequest +from datadog_api_client.v2.model.personal_access_token_create_response import PersonalAccessTokenCreateResponse +from datadog_api_client.v2.model.personal_access_token_relationships import PersonalAccessTokenRelationships +from datadog_api_client.v2.model.personal_access_token_response import PersonalAccessTokenResponse +from datadog_api_client.v2.model.personal_access_token_response_meta import PersonalAccessTokenResponseMeta +from datadog_api_client.v2.model.personal_access_token_response_meta_page import PersonalAccessTokenResponseMetaPage +from datadog_api_client.v2.model.personal_access_token_update_attributes import PersonalAccessTokenUpdateAttributes +from datadog_api_client.v2.model.personal_access_token_update_data import PersonalAccessTokenUpdateData +from datadog_api_client.v2.model.personal_access_token_update_request import PersonalAccessTokenUpdateRequest +from datadog_api_client.v2.model.personal_access_tokens_sort import PersonalAccessTokensSort +from datadog_api_client.v2.model.personal_access_tokens_type import PersonalAccessTokensType +from datadog_api_client.v2.model.playlist import Playlist +from datadog_api_client.v2.model.playlist_array import PlaylistArray +from datadog_api_client.v2.model.playlist_data import PlaylistData +from datadog_api_client.v2.model.playlist_data_attributes import PlaylistDataAttributes +from datadog_api_client.v2.model.playlist_data_attributes_created_by import PlaylistDataAttributesCreatedBy +from datadog_api_client.v2.model.playlist_data_type import PlaylistDataType +from datadog_api_client.v2.model.playlists_session import PlaylistsSession +from datadog_api_client.v2.model.playlists_session_array import PlaylistsSessionArray +from datadog_api_client.v2.model.playlists_session_data import PlaylistsSessionData +from datadog_api_client.v2.model.playlists_session_data_attributes import PlaylistsSessionDataAttributes +from datadog_api_client.v2.model.postmortem_attachment_request import PostmortemAttachmentRequest +from datadog_api_client.v2.model.postmortem_attachment_request_attributes import PostmortemAttachmentRequestAttributes +from datadog_api_client.v2.model.postmortem_attachment_request_data import PostmortemAttachmentRequestData +from datadog_api_client.v2.model.postmortem_cell import PostmortemCell +from datadog_api_client.v2.model.postmortem_cell_attributes import PostmortemCellAttributes +from datadog_api_client.v2.model.postmortem_cell_definition import PostmortemCellDefinition +from datadog_api_client.v2.model.postmortem_cell_type import PostmortemCellType +from datadog_api_client.v2.model.postmortem_template_attributes_request import PostmortemTemplateAttributesRequest +from datadog_api_client.v2.model.postmortem_template_attributes_response import PostmortemTemplateAttributesResponse +from datadog_api_client.v2.model.postmortem_template_create_relationships import PostmortemTemplateCreateRelationships +from datadog_api_client.v2.model.postmortem_template_data_request import PostmortemTemplateDataRequest +from datadog_api_client.v2.model.postmortem_template_data_response import PostmortemTemplateDataResponse +from datadog_api_client.v2.model.postmortem_template_incident_type_relationship import PostmortemTemplateIncidentTypeRelationship +from datadog_api_client.v2.model.postmortem_template_incident_type_relationship_data import PostmortemTemplateIncidentTypeRelationshipData +from datadog_api_client.v2.model.postmortem_template_location import PostmortemTemplateLocation +from datadog_api_client.v2.model.postmortem_template_request import PostmortemTemplateRequest +from datadog_api_client.v2.model.postmortem_template_response import PostmortemTemplateResponse +from datadog_api_client.v2.model.postmortem_template_response_relationships import PostmortemTemplateResponseRelationships +from datadog_api_client.v2.model.postmortem_template_type import PostmortemTemplateType +from datadog_api_client.v2.model.postmortem_template_user_relationship import PostmortemTemplateUserRelationship +from datadog_api_client.v2.model.postmortem_template_user_relationship_data import PostmortemTemplateUserRelationshipData +from datadog_api_client.v2.model.postmortem_templates_response import PostmortemTemplatesResponse +from datadog_api_client.v2.model.powerpack import Powerpack +from datadog_api_client.v2.model.powerpack_attributes import PowerpackAttributes +from datadog_api_client.v2.model.powerpack_data import PowerpackData +from datadog_api_client.v2.model.powerpack_group_widget import PowerpackGroupWidget +from datadog_api_client.v2.model.powerpack_group_widget_definition import PowerpackGroupWidgetDefinition +from datadog_api_client.v2.model.powerpack_group_widget_layout import PowerpackGroupWidgetLayout +from datadog_api_client.v2.model.powerpack_inner_widget_layout import PowerpackInnerWidgetLayout +from datadog_api_client.v2.model.powerpack_inner_widgets import PowerpackInnerWidgets +from datadog_api_client.v2.model.powerpack_relationships import PowerpackRelationships +from datadog_api_client.v2.model.powerpack_response import PowerpackResponse +from datadog_api_client.v2.model.powerpack_response_links import PowerpackResponseLinks +from datadog_api_client.v2.model.powerpack_template_variable import PowerpackTemplateVariable +from datadog_api_client.v2.model.powerpacks_response_meta import PowerpacksResponseMeta +from datadog_api_client.v2.model.powerpacks_response_meta_pagination import PowerpacksResponseMetaPagination +from datadog_api_client.v2.model.preview_entity_response_data import PreviewEntityResponseData +from datadog_api_client.v2.model.print_report_request import PrintReportRequest +from datadog_api_client.v2.model.print_report_request_attributes import PrintReportRequestAttributes +from datadog_api_client.v2.model.print_report_request_data import PrintReportRequestData +from datadog_api_client.v2.model.print_report_response import PrintReportResponse +from datadog_api_client.v2.model.print_report_response_attributes import PrintReportResponseAttributes +from datadog_api_client.v2.model.print_report_response_data import PrintReportResponseData +from datadog_api_client.v2.model.print_report_type import PrintReportType +from datadog_api_client.v2.model.process_data_source import ProcessDataSource +from datadog_api_client.v2.model.process_scalar_query import ProcessScalarQuery +from datadog_api_client.v2.model.process_summaries_meta import ProcessSummariesMeta +from datadog_api_client.v2.model.process_summaries_meta_page import ProcessSummariesMetaPage +from datadog_api_client.v2.model.process_summaries_response import ProcessSummariesResponse +from datadog_api_client.v2.model.process_summary import ProcessSummary +from datadog_api_client.v2.model.process_summary_attributes import ProcessSummaryAttributes +from datadog_api_client.v2.model.process_summary_type import ProcessSummaryType +from datadog_api_client.v2.model.process_timeseries_query import ProcessTimeseriesQuery +from datadog_api_client.v2.model.product_analytics_analytics_query import ProductAnalyticsAnalyticsQuery +from datadog_api_client.v2.model.product_analytics_analytics_request import ProductAnalyticsAnalyticsRequest +from datadog_api_client.v2.model.product_analytics_analytics_request_attributes import ProductAnalyticsAnalyticsRequestAttributes +from datadog_api_client.v2.model.product_analytics_analytics_request_data import ProductAnalyticsAnalyticsRequestData +from datadog_api_client.v2.model.product_analytics_analytics_request_type import ProductAnalyticsAnalyticsRequestType +from datadog_api_client.v2.model.product_analytics_audience_account_subquery import ProductAnalyticsAudienceAccountSubquery +from datadog_api_client.v2.model.product_analytics_audience_filters import ProductAnalyticsAudienceFilters +from datadog_api_client.v2.model.product_analytics_audience_segment_subquery import ProductAnalyticsAudienceSegmentSubquery +from datadog_api_client.v2.model.product_analytics_audience_user_subquery import ProductAnalyticsAudienceUserSubquery +from datadog_api_client.v2.model.product_analytics_base_query import ProductAnalyticsBaseQuery +from datadog_api_client.v2.model.product_analytics_compute import ProductAnalyticsCompute +from datadog_api_client.v2.model.product_analytics_event_query import ProductAnalyticsEventQuery +from datadog_api_client.v2.model.product_analytics_event_query_data_source import ProductAnalyticsEventQueryDataSource +from datadog_api_client.v2.model.product_analytics_event_search import ProductAnalyticsEventSearch +from datadog_api_client.v2.model.product_analytics_execution_type import ProductAnalyticsExecutionType +from datadog_api_client.v2.model.product_analytics_group_by import ProductAnalyticsGroupBy +from datadog_api_client.v2.model.product_analytics_group_by_sort import ProductAnalyticsGroupBySort +from datadog_api_client.v2.model.product_analytics_interval import ProductAnalyticsInterval +from datadog_api_client.v2.model.product_analytics_occurrence_filter import ProductAnalyticsOccurrenceFilter +from datadog_api_client.v2.model.product_analytics_occurrence_query import ProductAnalyticsOccurrenceQuery +from datadog_api_client.v2.model.product_analytics_occurrence_query_data_source import ProductAnalyticsOccurrenceQueryDataSource +from datadog_api_client.v2.model.product_analytics_occurrence_search import ProductAnalyticsOccurrenceSearch +from datadog_api_client.v2.model.product_analytics_response_meta import ProductAnalyticsResponseMeta +from datadog_api_client.v2.model.product_analytics_response_meta_status import ProductAnalyticsResponseMetaStatus +from datadog_api_client.v2.model.product_analytics_scalar_column import ProductAnalyticsScalarColumn +from datadog_api_client.v2.model.product_analytics_scalar_column_meta import ProductAnalyticsScalarColumnMeta +from datadog_api_client.v2.model.product_analytics_scalar_column_type import ProductAnalyticsScalarColumnType +from datadog_api_client.v2.model.product_analytics_scalar_response import ProductAnalyticsScalarResponse +from datadog_api_client.v2.model.product_analytics_scalar_response_attributes import ProductAnalyticsScalarResponseAttributes +from datadog_api_client.v2.model.product_analytics_scalar_response_data import ProductAnalyticsScalarResponseData +from datadog_api_client.v2.model.product_analytics_scalar_response_type import ProductAnalyticsScalarResponseType +from datadog_api_client.v2.model.product_analytics_serie import ProductAnalyticsSerie +from datadog_api_client.v2.model.product_analytics_server_side_event_error import ProductAnalyticsServerSideEventError +from datadog_api_client.v2.model.product_analytics_server_side_event_errors import ProductAnalyticsServerSideEventErrors +from datadog_api_client.v2.model.product_analytics_server_side_event_item import ProductAnalyticsServerSideEventItem +from datadog_api_client.v2.model.product_analytics_server_side_event_item_account import ProductAnalyticsServerSideEventItemAccount +from datadog_api_client.v2.model.product_analytics_server_side_event_item_application import ProductAnalyticsServerSideEventItemApplication +from datadog_api_client.v2.model.product_analytics_server_side_event_item_event import ProductAnalyticsServerSideEventItemEvent +from datadog_api_client.v2.model.product_analytics_server_side_event_item_session import ProductAnalyticsServerSideEventItemSession +from datadog_api_client.v2.model.product_analytics_server_side_event_item_type import ProductAnalyticsServerSideEventItemType +from datadog_api_client.v2.model.product_analytics_server_side_event_item_usr import ProductAnalyticsServerSideEventItemUsr +from datadog_api_client.v2.model.product_analytics_timeseries_response import ProductAnalyticsTimeseriesResponse +from datadog_api_client.v2.model.product_analytics_timeseries_response_attributes import ProductAnalyticsTimeseriesResponseAttributes +from datadog_api_client.v2.model.product_analytics_timeseries_response_data import ProductAnalyticsTimeseriesResponseData +from datadog_api_client.v2.model.product_analytics_timeseries_response_type import ProductAnalyticsTimeseriesResponseType +from datadog_api_client.v2.model.product_analytics_unit import ProductAnalyticsUnit +from datadog_api_client.v2.model.project import Project +from datadog_api_client.v2.model.project_attributes import ProjectAttributes +from datadog_api_client.v2.model.project_columns_config import ProjectColumnsConfig +from datadog_api_client.v2.model.project_columns_config_columns_items import ProjectColumnsConfigColumnsItems +from datadog_api_client.v2.model.project_columns_config_columns_items_sort import ProjectColumnsConfigColumnsItemsSort +from datadog_api_client.v2.model.project_create import ProjectCreate +from datadog_api_client.v2.model.project_create_attributes import ProjectCreateAttributes +from datadog_api_client.v2.model.project_create_request import ProjectCreateRequest +from datadog_api_client.v2.model.project_favorite import ProjectFavorite +from datadog_api_client.v2.model.project_favorite_resource_type import ProjectFavoriteResourceType +from datadog_api_client.v2.model.project_favorites_response import ProjectFavoritesResponse +from datadog_api_client.v2.model.project_notification_settings import ProjectNotificationSettings +from datadog_api_client.v2.model.project_relationship import ProjectRelationship +from datadog_api_client.v2.model.project_relationship_data import ProjectRelationshipData +from datadog_api_client.v2.model.project_relationships import ProjectRelationships +from datadog_api_client.v2.model.project_resource_type import ProjectResourceType +from datadog_api_client.v2.model.project_response import ProjectResponse +from datadog_api_client.v2.model.project_settings import ProjectSettings +from datadog_api_client.v2.model.project_update import ProjectUpdate +from datadog_api_client.v2.model.project_update_attributes import ProjectUpdateAttributes +from datadog_api_client.v2.model.project_update_request import ProjectUpdateRequest +from datadog_api_client.v2.model.projected_cost import ProjectedCost +from datadog_api_client.v2.model.projected_cost_attributes import ProjectedCostAttributes +from datadog_api_client.v2.model.projected_cost_response import ProjectedCostResponse +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.pruned_trace_attributes import PrunedTraceAttributes +from datadog_api_client.v2.model.pruned_trace_data import PrunedTraceData +from datadog_api_client.v2.model.pruned_trace_response import PrunedTraceResponse +from datadog_api_client.v2.model.pruned_trace_type import PrunedTraceType +from datadog_api_client.v2.model.publish_app_response import PublishAppResponse +from datadog_api_client.v2.model.publish_form_data import PublishFormData +from datadog_api_client.v2.model.publish_form_data_attributes import PublishFormDataAttributes +from datadog_api_client.v2.model.publish_form_request import PublishFormRequest +from datadog_api_client.v2.model.publish_request_type import PublishRequestType +from datadog_api_client.v2.model.put_apps_datastore_item_response_array import PutAppsDatastoreItemResponseArray +from datadog_api_client.v2.model.put_apps_datastore_item_response_data import PutAppsDatastoreItemResponseData +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_account_request import QueryAccountRequest +from datadog_api_client.v2.model.query_account_request_data import QueryAccountRequestData +from datadog_api_client.v2.model.query_account_request_data_attributes import QueryAccountRequestDataAttributes +from datadog_api_client.v2.model.query_account_request_data_attributes_sort import QueryAccountRequestDataAttributesSort +from datadog_api_client.v2.model.query_account_request_data_type import QueryAccountRequestDataType +from datadog_api_client.v2.model.query_event_filtered_users_request import QueryEventFilteredUsersRequest +from datadog_api_client.v2.model.query_event_filtered_users_request_data import QueryEventFilteredUsersRequestData +from datadog_api_client.v2.model.query_event_filtered_users_request_data_attributes import QueryEventFilteredUsersRequestDataAttributes +from datadog_api_client.v2.model.query_event_filtered_users_request_data_attributes_event_query import QueryEventFilteredUsersRequestDataAttributesEventQuery +from datadog_api_client.v2.model.query_event_filtered_users_request_data_attributes_event_query_time_frame import QueryEventFilteredUsersRequestDataAttributesEventQueryTimeFrame +from datadog_api_client.v2.model.query_event_filtered_users_request_data_type import QueryEventFilteredUsersRequestDataType +from datadog_api_client.v2.model.query_formula import QueryFormula +from datadog_api_client.v2.model.query_response import QueryResponse +from datadog_api_client.v2.model.query_response_data import QueryResponseData +from datadog_api_client.v2.model.query_response_data_attributes import QueryResponseDataAttributes +from datadog_api_client.v2.model.query_response_data_type import QueryResponseDataType +from datadog_api_client.v2.model.query_sort_order import QuerySortOrder +from datadog_api_client.v2.model.query_users_request import QueryUsersRequest +from datadog_api_client.v2.model.query_users_request_data import QueryUsersRequestData +from datadog_api_client.v2.model.query_users_request_data_attributes import QueryUsersRequestDataAttributes +from datadog_api_client.v2.model.query_users_request_data_attributes_sort import QueryUsersRequestDataAttributesSort +from datadog_api_client.v2.model.query_users_request_data_type import QueryUsersRequestDataType +from datadog_api_client.v2.model.rum_aggregate_bucket_value import RUMAggregateBucketValue +from datadog_api_client.v2.model.rum_aggregate_bucket_value_timeseries import RUMAggregateBucketValueTimeseries +from datadog_api_client.v2.model.rum_aggregate_bucket_value_timeseries_point import RUMAggregateBucketValueTimeseriesPoint +from datadog_api_client.v2.model.rum_aggregate_request import RUMAggregateRequest +from datadog_api_client.v2.model.rum_aggregate_sort import RUMAggregateSort +from datadog_api_client.v2.model.rum_aggregate_sort_type import RUMAggregateSortType +from datadog_api_client.v2.model.rum_aggregation_buckets_response import RUMAggregationBucketsResponse +from datadog_api_client.v2.model.rum_aggregation_function import RUMAggregationFunction +from datadog_api_client.v2.model.rum_analytics_aggregate_response import RUMAnalyticsAggregateResponse +from datadog_api_client.v2.model.rum_application import RUMApplication +from datadog_api_client.v2.model.rum_application_attributes import RUMApplicationAttributes +from datadog_api_client.v2.model.rum_application_create import RUMApplicationCreate +from datadog_api_client.v2.model.rum_application_create_attributes import RUMApplicationCreateAttributes +from datadog_api_client.v2.model.rum_application_create_request import RUMApplicationCreateRequest +from datadog_api_client.v2.model.rum_application_create_type import RUMApplicationCreateType +from datadog_api_client.v2.model.rum_application_list import RUMApplicationList +from datadog_api_client.v2.model.rum_application_list_attributes import RUMApplicationListAttributes +from datadog_api_client.v2.model.rum_application_list_type import RUMApplicationListType +from datadog_api_client.v2.model.rum_application_response import RUMApplicationResponse +from datadog_api_client.v2.model.rum_application_type import RUMApplicationType +from datadog_api_client.v2.model.rum_application_update import RUMApplicationUpdate +from datadog_api_client.v2.model.rum_application_update_attributes import RUMApplicationUpdateAttributes +from datadog_api_client.v2.model.rum_application_update_request import RUMApplicationUpdateRequest +from datadog_api_client.v2.model.rum_application_update_type import RUMApplicationUpdateType +from datadog_api_client.v2.model.rum_applications_response import RUMApplicationsResponse +from datadog_api_client.v2.model.rum_bucket_response import RUMBucketResponse +from datadog_api_client.v2.model.rum_compute import RUMCompute +from datadog_api_client.v2.model.rum_compute_type import RUMComputeType +from datadog_api_client.v2.model.rum_event import RUMEvent +from datadog_api_client.v2.model.rum_event_attributes import RUMEventAttributes +from datadog_api_client.v2.model.rum_event_processing_scale import RUMEventProcessingScale +from datadog_api_client.v2.model.rum_event_processing_state import RUMEventProcessingState +from datadog_api_client.v2.model.rum_event_type import RUMEventType +from datadog_api_client.v2.model.rum_events_response import RUMEventsResponse +from datadog_api_client.v2.model.rum_group_by import RUMGroupBy +from datadog_api_client.v2.model.rum_group_by_histogram import RUMGroupByHistogram +from datadog_api_client.v2.model.rum_group_by_missing import RUMGroupByMissing +from datadog_api_client.v2.model.rum_group_by_total import RUMGroupByTotal +from datadog_api_client.v2.model.rum_operation_create_request import RUMOperationCreateRequest +from datadog_api_client.v2.model.rum_operation_create_request_data import RUMOperationCreateRequestData +from datadog_api_client.v2.model.rum_operation_journey_composite_rule import RUMOperationJourneyCompositeRule +from datadog_api_client.v2.model.rum_operation_journey_composite_rule_kind import RUMOperationJourneyCompositeRuleKind +from datadog_api_client.v2.model.rum_operation_journey_node import RUMOperationJourneyNode +from datadog_api_client.v2.model.rum_operation_journey_predicate import RUMOperationJourneyPredicate +from datadog_api_client.v2.model.rum_operation_journey_rum import RUMOperationJourneyRum +from datadog_api_client.v2.model.rum_operation_journey_step import RUMOperationJourneyStep +from datadog_api_client.v2.model.rum_operation_journey_step_type import RUMOperationJourneyStepType +from datadog_api_client.v2.model.rum_operation_request_attributes import RUMOperationRequestAttributes +from datadog_api_client.v2.model.rum_operation_response import RUMOperationResponse +from datadog_api_client.v2.model.rum_operation_response_attributes import RUMOperationResponseAttributes +from datadog_api_client.v2.model.rum_operation_response_data import RUMOperationResponseData +from datadog_api_client.v2.model.rum_operation_strong_link_create_request import RUMOperationStrongLinkCreateRequest +from datadog_api_client.v2.model.rum_operation_strong_link_create_request_attributes import RUMOperationStrongLinkCreateRequestAttributes +from datadog_api_client.v2.model.rum_operation_strong_link_create_request_data import RUMOperationStrongLinkCreateRequestData +from datadog_api_client.v2.model.rum_operation_strong_link_response import RUMOperationStrongLinkResponse +from datadog_api_client.v2.model.rum_operation_strong_link_response_attributes import RUMOperationStrongLinkResponseAttributes +from datadog_api_client.v2.model.rum_operation_strong_link_response_data import RUMOperationStrongLinkResponseData +from datadog_api_client.v2.model.rum_operation_strong_link_status import RUMOperationStrongLinkStatus +from datadog_api_client.v2.model.rum_operation_strong_link_type import RUMOperationStrongLinkType +from datadog_api_client.v2.model.rum_operation_strong_link_update_request import RUMOperationStrongLinkUpdateRequest +from datadog_api_client.v2.model.rum_operation_strong_link_update_request_attributes import RUMOperationStrongLinkUpdateRequestAttributes +from datadog_api_client.v2.model.rum_operation_strong_link_update_request_data import RUMOperationStrongLinkUpdateRequestData +from datadog_api_client.v2.model.rum_operation_strong_link_update_status import RUMOperationStrongLinkUpdateStatus +from datadog_api_client.v2.model.rum_operation_strong_links_list_response import RUMOperationStrongLinksListResponse +from datadog_api_client.v2.model.rum_operation_strong_links_list_response_meta import RUMOperationStrongLinksListResponseMeta +from datadog_api_client.v2.model.rum_operation_type import RUMOperationType +from datadog_api_client.v2.model.rum_operation_update_request import RUMOperationUpdateRequest +from datadog_api_client.v2.model.rum_operation_update_request_data import RUMOperationUpdateRequestData +from datadog_api_client.v2.model.rum_operation_user import RUMOperationUser +from datadog_api_client.v2.model.rum_operations_list_response import RUMOperationsListResponse +from datadog_api_client.v2.model.rum_operations_list_response_meta import RUMOperationsListResponseMeta +from datadog_api_client.v2.model.rum_operations_list_response_meta_page import RUMOperationsListResponseMetaPage +from datadog_api_client.v2.model.rum_product_analytics_retention_scale import RUMProductAnalyticsRetentionScale +from datadog_api_client.v2.model.rum_product_analytics_retention_state import RUMProductAnalyticsRetentionState +from datadog_api_client.v2.model.rum_product_scales import RUMProductScales +from datadog_api_client.v2.model.rum_query_filter import RUMQueryFilter +from datadog_api_client.v2.model.rum_query_options import RUMQueryOptions +from datadog_api_client.v2.model.rum_query_page_options import RUMQueryPageOptions +from datadog_api_client.v2.model.rum_response_links import RUMResponseLinks +from datadog_api_client.v2.model.rum_response_metadata import RUMResponseMetadata +from datadog_api_client.v2.model.rum_response_page import RUMResponsePage +from datadog_api_client.v2.model.rum_response_status import RUMResponseStatus +from datadog_api_client.v2.model.rum_search_events_request import RUMSearchEventsRequest +from datadog_api_client.v2.model.rum_sort import RUMSort +from datadog_api_client.v2.model.rum_sort_order import RUMSortOrder +from datadog_api_client.v2.model.rum_warning import RUMWarning +from datadog_api_client.v2.model.raw_error_budget_remaining import RawErrorBudgetRemaining +from datadog_api_client.v2.model.react_native_sourcemap_attributes import ReactNativeSourcemapAttributes +from datadog_api_client.v2.model.react_native_sourcemap_data import ReactNativeSourcemapData +from datadog_api_client.v2.model.readiness_gate import ReadinessGate +from datadog_api_client.v2.model.readiness_gate_threshold_type import ReadinessGateThresholdType +from datadog_api_client.v2.model.recommendation_attributes import RecommendationAttributes +from datadog_api_client.v2.model.recommendation_data import RecommendationData +from datadog_api_client.v2.model.recommendation_document import RecommendationDocument +from datadog_api_client.v2.model.recommendation_type import RecommendationType +from datadog_api_client.v2.model.recommendations_filter_request import RecommendationsFilterRequest +from datadog_api_client.v2.model.recommendations_filter_request_sort_items import RecommendationsFilterRequestSortItems +from datadog_api_client.v2.model.recommendations_page_meta import RecommendationsPageMeta +from datadog_api_client.v2.model.recommendations_page_meta_page import RecommendationsPageMetaPage +from datadog_api_client.v2.model.reference_table_create_source_type import ReferenceTableCreateSourceType +from datadog_api_client.v2.model.reference_table_schema_field_type import ReferenceTableSchemaFieldType +from datadog_api_client.v2.model.reference_table_sort_type import ReferenceTableSortType +from datadog_api_client.v2.model.reference_table_source_type import ReferenceTableSourceType +from datadog_api_client.v2.model.register_app_key_response import RegisterAppKeyResponse +from datadog_api_client.v2.model.relation_attributes import RelationAttributes +from datadog_api_client.v2.model.relation_entity import RelationEntity +from datadog_api_client.v2.model.relation_include_type import RelationIncludeType +from datadog_api_client.v2.model.relation_meta import RelationMeta +from datadog_api_client.v2.model.relation_relationships import RelationRelationships +from datadog_api_client.v2.model.relation_response import RelationResponse +from datadog_api_client.v2.model.relation_response_meta import RelationResponseMeta +from datadog_api_client.v2.model.relation_response_type import RelationResponseType +from datadog_api_client.v2.model.relation_to_entity import RelationToEntity +from datadog_api_client.v2.model.relation_type import RelationType +from datadog_api_client.v2.model.relationship_item import RelationshipItem +from datadog_api_client.v2.model.relationship_to_access_token_owner import RelationshipToAccessTokenOwner +from datadog_api_client.v2.model.relationship_to_access_token_owner_data import RelationshipToAccessTokenOwnerData +from datadog_api_client.v2.model.relationship_to_incident import RelationshipToIncident +from datadog_api_client.v2.model.relationship_to_incident_attachment import RelationshipToIncidentAttachment +from datadog_api_client.v2.model.relationship_to_incident_attachment_data import RelationshipToIncidentAttachmentData +from datadog_api_client.v2.model.relationship_to_incident_data import RelationshipToIncidentData +from datadog_api_client.v2.model.relationship_to_incident_impact_data import RelationshipToIncidentImpactData +from datadog_api_client.v2.model.relationship_to_incident_impacts import RelationshipToIncidentImpacts +from datadog_api_client.v2.model.relationship_to_incident_integration_metadata_data import RelationshipToIncidentIntegrationMetadataData +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_request import RelationshipToIncidentRequest +from datadog_api_client.v2.model.relationship_to_incident_responder_data import RelationshipToIncidentResponderData +from datadog_api_client.v2.model.relationship_to_incident_responders import RelationshipToIncidentResponders +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 datadog_api_client.v2.model.relationship_to_incident_user_defined_field_data import RelationshipToIncidentUserDefinedFieldData +from datadog_api_client.v2.model.relationship_to_incident_user_defined_fields import RelationshipToIncidentUserDefinedFields +from datadog_api_client.v2.model.relationship_to_organization import RelationshipToOrganization +from datadog_api_client.v2.model.relationship_to_organization_data import RelationshipToOrganizationData +from datadog_api_client.v2.model.relationship_to_organizations import RelationshipToOrganizations +from datadog_api_client.v2.model.relationship_to_outcome import RelationshipToOutcome +from datadog_api_client.v2.model.relationship_to_outcome_data import RelationshipToOutcomeData +from datadog_api_client.v2.model.relationship_to_permission import RelationshipToPermission +from datadog_api_client.v2.model.relationship_to_permission_data import RelationshipToPermissionData +from datadog_api_client.v2.model.relationship_to_permissions import RelationshipToPermissions +from datadog_api_client.v2.model.relationship_to_role import RelationshipToRole +from datadog_api_client.v2.model.relationship_to_role_data import RelationshipToRoleData +from datadog_api_client.v2.model.relationship_to_roles import RelationshipToRoles +from datadog_api_client.v2.model.relationship_to_rule import RelationshipToRule +from datadog_api_client.v2.model.relationship_to_rule_data import RelationshipToRuleData +from datadog_api_client.v2.model.relationship_to_rule_data_object import RelationshipToRuleDataObject +from datadog_api_client.v2.model.relationship_to_saml_assertion_attribute import RelationshipToSAMLAssertionAttribute +from datadog_api_client.v2.model.relationship_to_saml_assertion_attribute_data import RelationshipToSAMLAssertionAttributeData +from datadog_api_client.v2.model.relationship_to_service_account import RelationshipToServiceAccount +from datadog_api_client.v2.model.relationship_to_service_account_data import RelationshipToServiceAccountData +from datadog_api_client.v2.model.relationship_to_team import RelationshipToTeam +from datadog_api_client.v2.model.relationship_to_team_data import RelationshipToTeamData +from datadog_api_client.v2.model.relationship_to_team_link_data import RelationshipToTeamLinkData +from datadog_api_client.v2.model.relationship_to_team_links import RelationshipToTeamLinks +from datadog_api_client.v2.model.relationship_to_user import RelationshipToUser +from datadog_api_client.v2.model.relationship_to_user_data import RelationshipToUserData +from datadog_api_client.v2.model.relationship_to_user_team_permission import RelationshipToUserTeamPermission +from datadog_api_client.v2.model.relationship_to_user_team_permission_data import RelationshipToUserTeamPermissionData +from datadog_api_client.v2.model.relationship_to_user_team_team import RelationshipToUserTeamTeam +from datadog_api_client.v2.model.relationship_to_user_team_team_data import RelationshipToUserTeamTeamData +from datadog_api_client.v2.model.relationship_to_user_team_user import RelationshipToUserTeamUser +from datadog_api_client.v2.model.relationship_to_user_team_user_data import RelationshipToUserTeamUserData +from datadog_api_client.v2.model.relationship_to_users import RelationshipToUsers +from datadog_api_client.v2.model.remediation import Remediation +from datadog_api_client.v2.model.reorder_retention_filters_request import ReorderRetentionFiltersRequest +from datadog_api_client.v2.model.reorder_rule_resource_array import ReorderRuleResourceArray +from datadog_api_client.v2.model.reorder_rule_resource_data import ReorderRuleResourceData +from datadog_api_client.v2.model.reorder_rule_resource_data_type import ReorderRuleResourceDataType +from datadog_api_client.v2.model.reorder_ruleset_resource_array import ReorderRulesetResourceArray +from datadog_api_client.v2.model.reorder_ruleset_resource_data import ReorderRulesetResourceData +from datadog_api_client.v2.model.reorder_ruleset_resource_data_type import ReorderRulesetResourceDataType +from datadog_api_client.v2.model.report_schedule_author import ReportScheduleAuthor +from datadog_api_client.v2.model.report_schedule_author_attributes import ReportScheduleAuthorAttributes +from datadog_api_client.v2.model.report_schedule_author_relationship import ReportScheduleAuthorRelationship +from datadog_api_client.v2.model.report_schedule_author_relationship_data import ReportScheduleAuthorRelationshipData +from datadog_api_client.v2.model.report_schedule_author_type import ReportScheduleAuthorType +from datadog_api_client.v2.model.report_schedule_create_request import ReportScheduleCreateRequest +from datadog_api_client.v2.model.report_schedule_create_request_attributes import ReportScheduleCreateRequestAttributes +from datadog_api_client.v2.model.report_schedule_create_request_data import ReportScheduleCreateRequestData +from datadog_api_client.v2.model.report_schedule_delivery_format import ReportScheduleDeliveryFormat +from datadog_api_client.v2.model.report_schedule_included_resource import ReportScheduleIncludedResource +from datadog_api_client.v2.model.report_schedule_included_resource_type import ReportScheduleIncludedResourceType +from datadog_api_client.v2.model.report_schedule_index_template_variable import ReportScheduleIndexTemplateVariable +from datadog_api_client.v2.model.report_schedule_list_resource_relationship import ReportScheduleListResourceRelationship +from datadog_api_client.v2.model.report_schedule_list_resource_relationship_data import ReportScheduleListResourceRelationshipData +from datadog_api_client.v2.model.report_schedule_list_response import ReportScheduleListResponse +from datadog_api_client.v2.model.report_schedule_list_response_attributes import ReportScheduleListResponseAttributes +from datadog_api_client.v2.model.report_schedule_list_response_data import ReportScheduleListResponseData +from datadog_api_client.v2.model.report_schedule_list_response_links import ReportScheduleListResponseLinks +from datadog_api_client.v2.model.report_schedule_list_response_meta import ReportScheduleListResponseMeta +from datadog_api_client.v2.model.report_schedule_list_response_pagination import ReportScheduleListResponsePagination +from datadog_api_client.v2.model.report_schedule_list_response_pagination_type import ReportScheduleListResponsePaginationType +from datadog_api_client.v2.model.report_schedule_list_response_relationships import ReportScheduleListResponseRelationships +from datadog_api_client.v2.model.report_schedule_patch_request import ReportSchedulePatchRequest +from datadog_api_client.v2.model.report_schedule_patch_request_attributes import ReportSchedulePatchRequestAttributes +from datadog_api_client.v2.model.report_schedule_patch_request_data import ReportSchedulePatchRequestData +from datadog_api_client.v2.model.report_schedule_resource import ReportScheduleResource +from datadog_api_client.v2.model.report_schedule_resource_attributes import ReportScheduleResourceAttributes +from datadog_api_client.v2.model.report_schedule_resource_type import ReportScheduleResourceType +from datadog_api_client.v2.model.report_schedule_response import ReportScheduleResponse +from datadog_api_client.v2.model.report_schedule_response_attributes import ReportScheduleResponseAttributes +from datadog_api_client.v2.model.report_schedule_response_attributes_delivery_format import ReportScheduleResponseAttributesDeliveryFormat +from datadog_api_client.v2.model.report_schedule_response_data import ReportScheduleResponseData +from datadog_api_client.v2.model.report_schedule_response_relationships import ReportScheduleResponseRelationships +from datadog_api_client.v2.model.report_schedule_status import ReportScheduleStatus +from datadog_api_client.v2.model.report_schedule_template_variable import ReportScheduleTemplateVariable +from datadog_api_client.v2.model.report_schedule_toggle_request import ReportScheduleToggleRequest +from datadog_api_client.v2.model.report_schedule_toggle_request_attributes import ReportScheduleToggleRequestAttributes +from datadog_api_client.v2.model.report_schedule_toggle_request_data import ReportScheduleToggleRequestData +from datadog_api_client.v2.model.report_schedule_type import ReportScheduleType +from datadog_api_client.v2.model.resolve_vulnerable_symbols_request import ResolveVulnerableSymbolsRequest +from datadog_api_client.v2.model.resolve_vulnerable_symbols_request_data import ResolveVulnerableSymbolsRequestData +from datadog_api_client.v2.model.resolve_vulnerable_symbols_request_data_attributes import ResolveVulnerableSymbolsRequestDataAttributes +from datadog_api_client.v2.model.resolve_vulnerable_symbols_request_data_type import ResolveVulnerableSymbolsRequestDataType +from datadog_api_client.v2.model.resolve_vulnerable_symbols_response import ResolveVulnerableSymbolsResponse +from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_data import ResolveVulnerableSymbolsResponseData +from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_data_attributes import ResolveVulnerableSymbolsResponseDataAttributes +from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_data_type import ResolveVulnerableSymbolsResponseDataType +from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_results import ResolveVulnerableSymbolsResponseResults +from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_results_vulnerable_symbols import ResolveVulnerableSymbolsResponseResultsVulnerableSymbols +from datadog_api_client.v2.model.resolve_vulnerable_symbols_response_results_vulnerable_symbols_symbols import ResolveVulnerableSymbolsResponseResultsVulnerableSymbolsSymbols +from datadog_api_client.v2.model.resource_filter_attributes import ResourceFilterAttributes +from datadog_api_client.v2.model.resource_filter_request_type import ResourceFilterRequestType +from datadog_api_client.v2.model.response_meta_attributes import ResponseMetaAttributes +from datadog_api_client.v2.model.restriction_policy import RestrictionPolicy +from datadog_api_client.v2.model.restriction_policy_attributes import RestrictionPolicyAttributes +from datadog_api_client.v2.model.restriction_policy_binding import RestrictionPolicyBinding +from datadog_api_client.v2.model.restriction_policy_response import RestrictionPolicyResponse +from datadog_api_client.v2.model.restriction_policy_type import RestrictionPolicyType +from datadog_api_client.v2.model.restriction_policy_update_request import RestrictionPolicyUpdateRequest +from datadog_api_client.v2.model.restriction_query_attributes import RestrictionQueryAttributes +from datadog_api_client.v2.model.restriction_query_create_attributes import RestrictionQueryCreateAttributes +from datadog_api_client.v2.model.restriction_query_create_data import RestrictionQueryCreateData +from datadog_api_client.v2.model.restriction_query_create_payload import RestrictionQueryCreatePayload +from datadog_api_client.v2.model.restriction_query_list_response import RestrictionQueryListResponse +from datadog_api_client.v2.model.restriction_query_response_included_item import RestrictionQueryResponseIncludedItem +from datadog_api_client.v2.model.restriction_query_role import RestrictionQueryRole +from datadog_api_client.v2.model.restriction_query_role_attribute import RestrictionQueryRoleAttribute +from datadog_api_client.v2.model.restriction_query_roles_response import RestrictionQueryRolesResponse +from datadog_api_client.v2.model.restriction_query_update_attributes import RestrictionQueryUpdateAttributes +from datadog_api_client.v2.model.restriction_query_update_data import RestrictionQueryUpdateData +from datadog_api_client.v2.model.restriction_query_update_payload import RestrictionQueryUpdatePayload +from datadog_api_client.v2.model.restriction_query_with_relationships import RestrictionQueryWithRelationships +from datadog_api_client.v2.model.restriction_query_with_relationships_response import RestrictionQueryWithRelationshipsResponse +from datadog_api_client.v2.model.restriction_query_without_relationships import RestrictionQueryWithoutRelationships +from datadog_api_client.v2.model.restriction_query_without_relationships_response import RestrictionQueryWithoutRelationshipsResponse +from datadog_api_client.v2.model.retention_filter import RetentionFilter +from datadog_api_client.v2.model.retention_filter_all import RetentionFilterAll +from datadog_api_client.v2.model.retention_filter_all_attributes import RetentionFilterAllAttributes +from datadog_api_client.v2.model.retention_filter_all_type import RetentionFilterAllType +from datadog_api_client.v2.model.retention_filter_attributes import RetentionFilterAttributes +from datadog_api_client.v2.model.retention_filter_create_attributes import RetentionFilterCreateAttributes +from datadog_api_client.v2.model.retention_filter_create_data import RetentionFilterCreateData +from datadog_api_client.v2.model.retention_filter_create_request import RetentionFilterCreateRequest +from datadog_api_client.v2.model.retention_filter_create_response import RetentionFilterCreateResponse +from datadog_api_client.v2.model.retention_filter_response import RetentionFilterResponse +from datadog_api_client.v2.model.retention_filter_type import RetentionFilterType +from datadog_api_client.v2.model.retention_filter_update_attributes import RetentionFilterUpdateAttributes +from datadog_api_client.v2.model.retention_filter_update_data import RetentionFilterUpdateData +from datadog_api_client.v2.model.retention_filter_update_request import RetentionFilterUpdateRequest +from datadog_api_client.v2.model.retention_filter_without_attributes import RetentionFilterWithoutAttributes +from datadog_api_client.v2.model.retention_filters_response import RetentionFiltersResponse +from datadog_api_client.v2.model.retry_strategy import RetryStrategy +from datadog_api_client.v2.model.retry_strategy_kind import RetryStrategyKind +from datadog_api_client.v2.model.retry_strategy_linear import RetryStrategyLinear +from datadog_api_client.v2.model.revert_custom_rule_revision_data_type import RevertCustomRuleRevisionDataType +from datadog_api_client.v2.model.revert_custom_rule_revision_request import RevertCustomRuleRevisionRequest +from datadog_api_client.v2.model.revert_custom_rule_revision_request_data import RevertCustomRuleRevisionRequestData +from datadog_api_client.v2.model.revert_custom_rule_revision_request_data_attributes import RevertCustomRuleRevisionRequestDataAttributes +from datadog_api_client.v2.model.role import Role +from datadog_api_client.v2.model.role_attributes import RoleAttributes +from datadog_api_client.v2.model.role_clone import RoleClone +from datadog_api_client.v2.model.role_clone_attributes import RoleCloneAttributes +from datadog_api_client.v2.model.role_clone_request import RoleCloneRequest +from datadog_api_client.v2.model.role_create_attributes import RoleCreateAttributes +from datadog_api_client.v2.model.role_create_data import RoleCreateData +from datadog_api_client.v2.model.role_create_request import RoleCreateRequest +from datadog_api_client.v2.model.role_create_response import RoleCreateResponse +from datadog_api_client.v2.model.role_create_response_data import RoleCreateResponseData +from datadog_api_client.v2.model.role_relationships import RoleRelationships +from datadog_api_client.v2.model.role_response import RoleResponse +from datadog_api_client.v2.model.role_response_relationships import RoleResponseRelationships +from datadog_api_client.v2.model.role_template_array import RoleTemplateArray +from datadog_api_client.v2.model.role_template_data import RoleTemplateData +from datadog_api_client.v2.model.role_template_data_attributes import RoleTemplateDataAttributes +from datadog_api_client.v2.model.role_template_data_type import RoleTemplateDataType +from datadog_api_client.v2.model.role_update_attributes import RoleUpdateAttributes +from datadog_api_client.v2.model.role_update_data import RoleUpdateData +from datadog_api_client.v2.model.role_update_request import RoleUpdateRequest +from datadog_api_client.v2.model.role_update_response import RoleUpdateResponse +from datadog_api_client.v2.model.role_update_response_data import RoleUpdateResponseData +from datadog_api_client.v2.model.roles_response import RolesResponse +from datadog_api_client.v2.model.roles_sort import RolesSort +from datadog_api_client.v2.model.roles_type import RolesType +from datadog_api_client.v2.model.rollout_options import RolloutOptions +from datadog_api_client.v2.model.rollout_options_request import RolloutOptionsRequest +from datadog_api_client.v2.model.rollout_strategy import RolloutStrategy +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 +from datadog_api_client.v2.model.routing_rule_relationships_policy_data_type import RoutingRuleRelationshipsPolicyDataType +from datadog_api_client.v2.model.routing_rule_type import RoutingRuleType +from datadog_api_client.v2.model.rule_attributes import RuleAttributes +from datadog_api_client.v2.model.rule_attributes_request import RuleAttributesRequest +from datadog_api_client.v2.model.rule_based_view_attributes import RuleBasedViewAttributes +from datadog_api_client.v2.model.rule_based_view_compliance_framework import RuleBasedViewComplianceFramework +from datadog_api_client.v2.model.rule_based_view_data import RuleBasedViewData +from datadog_api_client.v2.model.rule_based_view_response import RuleBasedViewResponse +from datadog_api_client.v2.model.rule_based_view_rule import RuleBasedViewRule +from datadog_api_client.v2.model.rule_based_view_rule_category import RuleBasedViewRuleCategory +from datadog_api_client.v2.model.rule_based_view_rule_stats import RuleBasedViewRuleStats +from datadog_api_client.v2.model.rule_based_view_type import RuleBasedViewType +from datadog_api_client.v2.model.rule_outcome_relationships import RuleOutcomeRelationships +from datadog_api_client.v2.model.rule_severity import RuleSeverity +from datadog_api_client.v2.model.rule_type import RuleType +from datadog_api_client.v2.model.rule_types_items import RuleTypesItems +from datadog_api_client.v2.model.rule_user import RuleUser +from datadog_api_client.v2.model.rule_version_history import RuleVersionHistory +from datadog_api_client.v2.model.rule_versions import RuleVersions +from datadog_api_client.v2.model.rules_validate_query_request import RulesValidateQueryRequest +from datadog_api_client.v2.model.rules_validate_query_request_data import RulesValidateQueryRequestData +from datadog_api_client.v2.model.rules_validate_query_request_data_attributes import RulesValidateQueryRequestDataAttributes +from datadog_api_client.v2.model.rules_validate_query_request_data_type import RulesValidateQueryRequestDataType +from datadog_api_client.v2.model.rules_validate_query_response import RulesValidateQueryResponse +from datadog_api_client.v2.model.rules_validate_query_response_data import RulesValidateQueryResponseData +from datadog_api_client.v2.model.rules_validate_query_response_data_attributes import RulesValidateQueryResponseDataAttributes +from datadog_api_client.v2.model.rules_validate_query_response_data_type import RulesValidateQueryResponseDataType +from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata +from datadog_api_client.v2.model.ruleset_resp import RulesetResp +from datadog_api_client.v2.model.ruleset_resp_array import RulesetRespArray +from datadog_api_client.v2.model.ruleset_resp_data import RulesetRespData +from datadog_api_client.v2.model.ruleset_resp_data_attributes import RulesetRespDataAttributes +from datadog_api_client.v2.model.ruleset_resp_data_attributes_created import RulesetRespDataAttributesCreated +from datadog_api_client.v2.model.ruleset_resp_data_attributes_modified import RulesetRespDataAttributesModified +from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items import RulesetRespDataAttributesRulesItems +from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query import RulesetRespDataAttributesRulesItemsQuery +from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query_addition import RulesetRespDataAttributesRulesItemsQueryAddition +from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_reference_table import RulesetRespDataAttributesRulesItemsReferenceTable +from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_reference_table_field_pairs_items import RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems +from datadog_api_client.v2.model.ruleset_resp_data_type import RulesetRespDataType +from datadog_api_client.v2.model.ruleset_status_resp_array import RulesetStatusRespArray +from datadog_api_client.v2.model.ruleset_status_resp_data import RulesetStatusRespData +from datadog_api_client.v2.model.ruleset_status_resp_data_attributes import RulesetStatusRespDataAttributes +from datadog_api_client.v2.model.ruleset_status_resp_data_type import RulesetStatusRespDataType +from datadog_api_client.v2.model.rum_config_attributes import RumConfigAttributes +from datadog_api_client.v2.model.rum_config_create_attributes import RumConfigCreateAttributes +from datadog_api_client.v2.model.rum_config_create_data import RumConfigCreateData +from datadog_api_client.v2.model.rum_config_create_request import RumConfigCreateRequest +from datadog_api_client.v2.model.rum_config_data import RumConfigData +from datadog_api_client.v2.model.rum_config_response import RumConfigResponse +from datadog_api_client.v2.model.rum_config_type import RumConfigType +from datadog_api_client.v2.model.rum_config_update_attributes import RumConfigUpdateAttributes +from datadog_api_client.v2.model.rum_config_update_data import RumConfigUpdateData +from datadog_api_client.v2.model.rum_config_update_request import RumConfigUpdateRequest +from datadog_api_client.v2.model.rum_cross_product_sampling import RumCrossProductSampling +from datadog_api_client.v2.model.rum_cross_product_sampling_create import RumCrossProductSamplingCreate +from datadog_api_client.v2.model.rum_cross_product_sampling_update import RumCrossProductSamplingUpdate +from datadog_api_client.v2.model.rum_metric_compute import RumMetricCompute +from datadog_api_client.v2.model.rum_metric_compute_aggregation_type import RumMetricComputeAggregationType +from datadog_api_client.v2.model.rum_metric_create_attributes import RumMetricCreateAttributes +from datadog_api_client.v2.model.rum_metric_create_data import RumMetricCreateData +from datadog_api_client.v2.model.rum_metric_create_request import RumMetricCreateRequest +from datadog_api_client.v2.model.rum_metric_event_type import RumMetricEventType +from datadog_api_client.v2.model.rum_metric_filter import RumMetricFilter +from datadog_api_client.v2.model.rum_metric_group_by import RumMetricGroupBy +from datadog_api_client.v2.model.rum_metric_response import RumMetricResponse +from datadog_api_client.v2.model.rum_metric_response_attributes import RumMetricResponseAttributes +from datadog_api_client.v2.model.rum_metric_response_compute import RumMetricResponseCompute +from datadog_api_client.v2.model.rum_metric_response_data import RumMetricResponseData +from datadog_api_client.v2.model.rum_metric_response_filter import RumMetricResponseFilter +from datadog_api_client.v2.model.rum_metric_response_group_by import RumMetricResponseGroupBy +from datadog_api_client.v2.model.rum_metric_response_uniqueness import RumMetricResponseUniqueness +from datadog_api_client.v2.model.rum_metric_type import RumMetricType +from datadog_api_client.v2.model.rum_metric_uniqueness import RumMetricUniqueness +from datadog_api_client.v2.model.rum_metric_uniqueness_when import RumMetricUniquenessWhen +from datadog_api_client.v2.model.rum_metric_update_attributes import RumMetricUpdateAttributes +from datadog_api_client.v2.model.rum_metric_update_compute import RumMetricUpdateCompute +from datadog_api_client.v2.model.rum_metric_update_data import RumMetricUpdateData +from datadog_api_client.v2.model.rum_metric_update_request import RumMetricUpdateRequest +from datadog_api_client.v2.model.rum_metrics_response import RumMetricsResponse +from datadog_api_client.v2.model.rum_permanent_retention_filter_attributes import RumPermanentRetentionFilterAttributes +from datadog_api_client.v2.model.rum_permanent_retention_filter_data import RumPermanentRetentionFilterData +from datadog_api_client.v2.model.rum_permanent_retention_filter_editability import RumPermanentRetentionFilterEditability +from datadog_api_client.v2.model.rum_permanent_retention_filter_id import RumPermanentRetentionFilterID +from datadog_api_client.v2.model.rum_permanent_retention_filter_response import RumPermanentRetentionFilterResponse +from datadog_api_client.v2.model.rum_permanent_retention_filter_type import RumPermanentRetentionFilterType +from datadog_api_client.v2.model.rum_permanent_retention_filter_update_attributes import RumPermanentRetentionFilterUpdateAttributes +from datadog_api_client.v2.model.rum_permanent_retention_filter_update_data import RumPermanentRetentionFilterUpdateData +from datadog_api_client.v2.model.rum_permanent_retention_filter_update_request import RumPermanentRetentionFilterUpdateRequest +from datadog_api_client.v2.model.rum_permanent_retention_filters_response import RumPermanentRetentionFiltersResponse +from datadog_api_client.v2.model.rum_retention_filter_attributes import RumRetentionFilterAttributes +from datadog_api_client.v2.model.rum_retention_filter_create_attributes import RumRetentionFilterCreateAttributes +from datadog_api_client.v2.model.rum_retention_filter_create_data import RumRetentionFilterCreateData +from datadog_api_client.v2.model.rum_retention_filter_create_request import RumRetentionFilterCreateRequest +from datadog_api_client.v2.model.rum_retention_filter_data import RumRetentionFilterData +from datadog_api_client.v2.model.rum_retention_filter_event_type import RumRetentionFilterEventType +from datadog_api_client.v2.model.rum_retention_filter_response import RumRetentionFilterResponse +from datadog_api_client.v2.model.rum_retention_filter_type import RumRetentionFilterType +from datadog_api_client.v2.model.rum_retention_filter_update_attributes import RumRetentionFilterUpdateAttributes +from datadog_api_client.v2.model.rum_retention_filter_update_data import RumRetentionFilterUpdateData +from datadog_api_client.v2.model.rum_retention_filter_update_request import RumRetentionFilterUpdateRequest +from datadog_api_client.v2.model.rum_retention_filters_order_data import RumRetentionFiltersOrderData +from datadog_api_client.v2.model.rum_retention_filters_order_request import RumRetentionFiltersOrderRequest +from datadog_api_client.v2.model.rum_retention_filters_order_response import RumRetentionFiltersOrderResponse +from datadog_api_client.v2.model.rum_retention_filters_response import RumRetentionFiltersResponse +from datadog_api_client.v2.model.rum_sdk_config_attributes import RumSdkConfigAttributes +from datadog_api_client.v2.model.rum_sdk_config_data import RumSdkConfigData +from datadog_api_client.v2.model.rum_sdk_config_dynamic_option import RumSdkConfigDynamicOption +from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_pair import RumSdkConfigDynamicOptionPair +from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_serialized_type import RumSdkConfigDynamicOptionSerializedType +from datadog_api_client.v2.model.rum_sdk_config_dynamic_option_strategy import RumSdkConfigDynamicOptionStrategy +from datadog_api_client.v2.model.rum_sdk_config_match_option import RumSdkConfigMatchOption +from datadog_api_client.v2.model.rum_sdk_config_match_option_serialized_type import RumSdkConfigMatchOptionSerializedType +from datadog_api_client.v2.model.rum_sdk_config_meta import RumSdkConfigMeta +from datadog_api_client.v2.model.rum_sdk_config_response import RumSdkConfigResponse +from datadog_api_client.v2.model.rum_sdk_config_rum_attributes import RumSdkConfigRumAttributes +from datadog_api_client.v2.model.rum_sdk_config_rum_update_attributes import RumSdkConfigRumUpdateAttributes +from datadog_api_client.v2.model.rum_sdk_config_serialized_regex import RumSdkConfigSerializedRegex +from datadog_api_client.v2.model.rum_sdk_config_serialized_regex_type import RumSdkConfigSerializedRegexType +from datadog_api_client.v2.model.rum_sdk_config_tracing_url_config import RumSdkConfigTracingUrlConfig +from datadog_api_client.v2.model.rum_sdk_config_tracing_url_propagator_type import RumSdkConfigTracingUrlPropagatorType +from datadog_api_client.v2.model.rum_sdk_config_type import RumSdkConfigType +from datadog_api_client.v2.model.rum_sdk_config_update_attributes import RumSdkConfigUpdateAttributes +from datadog_api_client.v2.model.rum_sdk_config_update_data import RumSdkConfigUpdateData +from datadog_api_client.v2.model.rum_sdk_config_update_request import RumSdkConfigUpdateRequest +from datadog_api_client.v2.model.run_data_observability_monitor_response import RunDataObservabilityMonitorResponse +from datadog_api_client.v2.model.run_data_observability_monitor_response_data import RunDataObservabilityMonitorResponseData +from datadog_api_client.v2.model.run_historical_job_request import RunHistoricalJobRequest +from datadog_api_client.v2.model.run_historical_job_request_attributes import RunHistoricalJobRequestAttributes +from datadog_api_client.v2.model.run_historical_job_request_data import RunHistoricalJobRequestData +from datadog_api_client.v2.model.run_historical_job_request_data_type import RunHistoricalJobRequestDataType +from datadog_api_client.v2.model.saml_assertion_attribute import SAMLAssertionAttribute +from datadog_api_client.v2.model.saml_assertion_attribute_attributes import SAMLAssertionAttributeAttributes +from datadog_api_client.v2.model.saml_assertion_attributes_type import SAMLAssertionAttributesType +from datadog_api_client.v2.model.saml_configuration import SAMLConfiguration +from datadog_api_client.v2.model.saml_configuration_attributes import SAMLConfigurationAttributes +from datadog_api_client.v2.model.saml_configuration_relationships import SAMLConfigurationRelationships +from datadog_api_client.v2.model.saml_configuration_response import SAMLConfigurationResponse +from datadog_api_client.v2.model.saml_configuration_update_attributes import SAMLConfigurationUpdateAttributes +from datadog_api_client.v2.model.saml_configuration_update_data import SAMLConfigurationUpdateData +from datadog_api_client.v2.model.saml_configuration_update_request import SAMLConfigurationUpdateRequest +from datadog_api_client.v2.model.saml_configurations_response import SAMLConfigurationsResponse +from datadog_api_client.v2.model.saml_configurations_type import SAMLConfigurationsType +from datadog_api_client.v2.model.sbom import SBOM +from datadog_api_client.v2.model.sbom_attributes import SBOMAttributes +from datadog_api_client.v2.model.sbom_component import SBOMComponent +from datadog_api_client.v2.model.sbom_component_dependency import SBOMComponentDependency +from datadog_api_client.v2.model.sbom_component_license import SBOMComponentLicense +from datadog_api_client.v2.model.sbom_component_license_license import SBOMComponentLicenseLicense +from datadog_api_client.v2.model.sbom_component_license_type import SBOMComponentLicenseType +from datadog_api_client.v2.model.sbom_component_property import SBOMComponentProperty +from datadog_api_client.v2.model.sbom_component_supplier import SBOMComponentSupplier +from datadog_api_client.v2.model.sbom_component_type import SBOMComponentType +from datadog_api_client.v2.model.sbom_format import SBOMFormat +from datadog_api_client.v2.model.sbom_metadata import SBOMMetadata +from datadog_api_client.v2.model.sbom_metadata_author import SBOMMetadataAuthor +from datadog_api_client.v2.model.sbom_metadata_component import SBOMMetadataComponent +from datadog_api_client.v2.model.sbom_type import SBOMType +from datadog_api_client.v2.model.slo_report_interval import SLOReportInterval +from datadog_api_client.v2.model.slo_report_post_response import SLOReportPostResponse +from datadog_api_client.v2.model.slo_report_post_response_data import SLOReportPostResponseData +from datadog_api_client.v2.model.slo_report_status import SLOReportStatus +from datadog_api_client.v2.model.slo_report_status_get_response import SLOReportStatusGetResponse +from datadog_api_client.v2.model.slo_report_status_get_response_attributes import SLOReportStatusGetResponseAttributes +from datadog_api_client.v2.model.slo_report_status_get_response_data import SLOReportStatusGetResponseData +from datadog_api_client.v2.model.salesforce_incidents_organization_response_attributes import SalesforceIncidentsOrganizationResponseAttributes +from datadog_api_client.v2.model.salesforce_incidents_organization_response_data import SalesforceIncidentsOrganizationResponseData +from datadog_api_client.v2.model.salesforce_incidents_organization_type import SalesforceIncidentsOrganizationType +from datadog_api_client.v2.model.salesforce_incidents_organizations_response import SalesforceIncidentsOrganizationsResponse +from datadog_api_client.v2.model.salesforce_incidents_template_create_attributes import SalesforceIncidentsTemplateCreateAttributes +from datadog_api_client.v2.model.salesforce_incidents_template_create_data import SalesforceIncidentsTemplateCreateData +from datadog_api_client.v2.model.salesforce_incidents_template_create_request import SalesforceIncidentsTemplateCreateRequest +from datadog_api_client.v2.model.salesforce_incidents_template_priority import SalesforceIncidentsTemplatePriority +from datadog_api_client.v2.model.salesforce_incidents_template_response import SalesforceIncidentsTemplateResponse +from datadog_api_client.v2.model.salesforce_incidents_template_response_attributes import SalesforceIncidentsTemplateResponseAttributes +from datadog_api_client.v2.model.salesforce_incidents_template_response_data import SalesforceIncidentsTemplateResponseData +from datadog_api_client.v2.model.salesforce_incidents_template_type import SalesforceIncidentsTemplateType +from datadog_api_client.v2.model.salesforce_incidents_template_update_attributes import SalesforceIncidentsTemplateUpdateAttributes +from datadog_api_client.v2.model.salesforce_incidents_template_update_data import SalesforceIncidentsTemplateUpdateData +from datadog_api_client.v2.model.salesforce_incidents_template_update_request import SalesforceIncidentsTemplateUpdateRequest +from datadog_api_client.v2.model.salesforce_incidents_templates_response import SalesforceIncidentsTemplatesResponse +from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_attributes import SampleLogGenerationBulkSubscriptionAttributes +from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_data import SampleLogGenerationBulkSubscriptionData +from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_item_meta import SampleLogGenerationBulkSubscriptionItemMeta +from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_request import SampleLogGenerationBulkSubscriptionRequest +from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_request_type import SampleLogGenerationBulkSubscriptionRequestType +from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_response import SampleLogGenerationBulkSubscriptionResponse +from datadog_api_client.v2.model.sample_log_generation_bulk_subscription_result_item import SampleLogGenerationBulkSubscriptionResultItem +from datadog_api_client.v2.model.sample_log_generation_duration import SampleLogGenerationDuration +from datadog_api_client.v2.model.sample_log_generation_subscription_attributes import SampleLogGenerationSubscriptionAttributes +from datadog_api_client.v2.model.sample_log_generation_subscription_create_attributes import SampleLogGenerationSubscriptionCreateAttributes +from datadog_api_client.v2.model.sample_log_generation_subscription_create_data import SampleLogGenerationSubscriptionCreateData +from datadog_api_client.v2.model.sample_log_generation_subscription_create_request import SampleLogGenerationSubscriptionCreateRequest +from datadog_api_client.v2.model.sample_log_generation_subscription_data import SampleLogGenerationSubscriptionData +from datadog_api_client.v2.model.sample_log_generation_subscription_request_type import SampleLogGenerationSubscriptionRequestType +from datadog_api_client.v2.model.sample_log_generation_subscription_resource_type import SampleLogGenerationSubscriptionResourceType +from datadog_api_client.v2.model.sample_log_generation_subscription_response import SampleLogGenerationSubscriptionResponse +from datadog_api_client.v2.model.sample_log_generation_subscription_status import SampleLogGenerationSubscriptionStatus +from datadog_api_client.v2.model.sample_log_generation_subscriptions_response import SampleLogGenerationSubscriptionsResponse +from datadog_api_client.v2.model.sample_log_generation_subscriptions_response_meta import SampleLogGenerationSubscriptionsResponseMeta +from datadog_api_client.v2.model.sample_log_generation_subscriptions_status_filter import SampleLogGenerationSubscriptionsStatusFilter +from datadog_api_client.v2.model.sast_ruleset_data import SastRulesetData +from datadog_api_client.v2.model.sast_ruleset_data_attributes import SastRulesetDataAttributes +from datadog_api_client.v2.model.sast_ruleset_response import SastRulesetResponse +from datadog_api_client.v2.model.sast_rulesets_response import SastRulesetsResponse +from datadog_api_client.v2.model.sca_request import ScaRequest +from datadog_api_client.v2.model.sca_request_data import ScaRequestData +from datadog_api_client.v2.model.sca_request_data_attributes import ScaRequestDataAttributes +from datadog_api_client.v2.model.sca_request_data_attributes_commit import ScaRequestDataAttributesCommit +from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items import ScaRequestDataAttributesDependenciesItems +from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_locations_items import ScaRequestDataAttributesDependenciesItemsLocationsItems +from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_locations_items_file_position import ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition +from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_locations_items_position import ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition +from datadog_api_client.v2.model.sca_request_data_attributes_dependencies_items_reachable_symbol_properties_items import ScaRequestDataAttributesDependenciesItemsReachableSymbolPropertiesItems +from datadog_api_client.v2.model.sca_request_data_attributes_files_items import ScaRequestDataAttributesFilesItems +from datadog_api_client.v2.model.sca_request_data_attributes_relations_items import ScaRequestDataAttributesRelationsItems +from datadog_api_client.v2.model.sca_request_data_attributes_repository import ScaRequestDataAttributesRepository +from datadog_api_client.v2.model.sca_request_data_attributes_vulnerabilities_items import ScaRequestDataAttributesVulnerabilitiesItems +from datadog_api_client.v2.model.sca_request_data_attributes_vulnerabilities_items_affects_items import ScaRequestDataAttributesVulnerabilitiesItemsAffectsItems +from datadog_api_client.v2.model.sca_request_data_type import ScaRequestDataType +from datadog_api_client.v2.model.scalar_column import ScalarColumn +from datadog_api_client.v2.model.scalar_column_type_group import ScalarColumnTypeGroup +from datadog_api_client.v2.model.scalar_column_type_number import ScalarColumnTypeNumber +from datadog_api_client.v2.model.scalar_formula_query_request import ScalarFormulaQueryRequest +from datadog_api_client.v2.model.scalar_formula_query_response import ScalarFormulaQueryResponse +from datadog_api_client.v2.model.scalar_formula_request import ScalarFormulaRequest +from datadog_api_client.v2.model.scalar_formula_request_attributes import ScalarFormulaRequestAttributes +from datadog_api_client.v2.model.scalar_formula_request_queries import ScalarFormulaRequestQueries +from datadog_api_client.v2.model.scalar_formula_request_type import ScalarFormulaRequestType +from datadog_api_client.v2.model.scalar_formula_response_atrributes import ScalarFormulaResponseAtrributes +from datadog_api_client.v2.model.scalar_formula_response_type import ScalarFormulaResponseType +from datadog_api_client.v2.model.scalar_meta import ScalarMeta +from datadog_api_client.v2.model.scalar_query import ScalarQuery +from datadog_api_client.v2.model.scalar_response import ScalarResponse +from datadog_api_client.v2.model.scan_result_response import ScanResultResponse +from datadog_api_client.v2.model.scanned_asset_metadata import ScannedAssetMetadata +from datadog_api_client.v2.model.scanned_asset_metadata_asset import ScannedAssetMetadataAsset +from datadog_api_client.v2.model.scanned_asset_metadata_attributes import ScannedAssetMetadataAttributes +from datadog_api_client.v2.model.scanned_asset_metadata_last_success import ScannedAssetMetadataLastSuccess +from datadog_api_client.v2.model.scanned_assets_metadata import ScannedAssetsMetadata +from datadog_api_client.v2.model.schedule import Schedule +from datadog_api_client.v2.model.schedule_create_request import ScheduleCreateRequest +from datadog_api_client.v2.model.schedule_create_request_data import ScheduleCreateRequestData +from datadog_api_client.v2.model.schedule_create_request_data_attributes import ScheduleCreateRequestDataAttributes +from datadog_api_client.v2.model.schedule_create_request_data_attributes_layers_items import ScheduleCreateRequestDataAttributesLayersItems +from datadog_api_client.v2.model.schedule_create_request_data_relationships import ScheduleCreateRequestDataRelationships +from datadog_api_client.v2.model.schedule_create_request_data_type import ScheduleCreateRequestDataType +from datadog_api_client.v2.model.schedule_data import ScheduleData +from datadog_api_client.v2.model.schedule_data_attributes import ScheduleDataAttributes +from datadog_api_client.v2.model.schedule_data_included_item import ScheduleDataIncludedItem +from datadog_api_client.v2.model.schedule_data_relationships import ScheduleDataRelationships +from datadog_api_client.v2.model.schedule_data_relationships_layers import ScheduleDataRelationshipsLayers +from datadog_api_client.v2.model.schedule_data_relationships_layers_data_items import ScheduleDataRelationshipsLayersDataItems +from datadog_api_client.v2.model.schedule_data_relationships_layers_data_items_type import ScheduleDataRelationshipsLayersDataItemsType +from datadog_api_client.v2.model.schedule_data_type import ScheduleDataType +from datadog_api_client.v2.model.schedule_member import ScheduleMember +from datadog_api_client.v2.model.schedule_member_relationships import ScheduleMemberRelationships +from datadog_api_client.v2.model.schedule_member_relationships_user import ScheduleMemberRelationshipsUser +from datadog_api_client.v2.model.schedule_member_relationships_user_data import ScheduleMemberRelationshipsUserData +from datadog_api_client.v2.model.schedule_member_relationships_user_data_type import ScheduleMemberRelationshipsUserDataType +from datadog_api_client.v2.model.schedule_member_type import ScheduleMemberType +from datadog_api_client.v2.model.schedule_on_call_responder_data import ScheduleOnCallResponderData +from datadog_api_client.v2.model.schedule_on_call_responder_data_attributes import ScheduleOnCallResponderDataAttributes +from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships import ScheduleOnCallResponderDataRelationships +from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships_shifts import ScheduleOnCallResponderDataRelationshipsShifts +from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships_shifts_data_items import ScheduleOnCallResponderDataRelationshipsShiftsDataItems +from datadog_api_client.v2.model.schedule_on_call_responder_data_relationships_shifts_data_items_type import ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType +from datadog_api_client.v2.model.schedule_on_call_responder_data_type import ScheduleOnCallResponderDataType +from datadog_api_client.v2.model.schedule_on_call_responders import ScheduleOnCallResponders +from datadog_api_client.v2.model.schedule_on_call_responders_data import ScheduleOnCallRespondersData +from datadog_api_client.v2.model.schedule_on_call_responders_data_attributes import ScheduleOnCallRespondersDataAttributes +from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships import ScheduleOnCallRespondersDataRelationships +from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_responders import ScheduleOnCallRespondersDataRelationshipsResponders +from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_responders_data_items import ScheduleOnCallRespondersDataRelationshipsRespondersDataItems +from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_responders_data_items_type import ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType +from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_schedule import ScheduleOnCallRespondersDataRelationshipsSchedule +from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_schedule_data import ScheduleOnCallRespondersDataRelationshipsScheduleData +from datadog_api_client.v2.model.schedule_on_call_responders_data_relationships_schedule_data_type import ScheduleOnCallRespondersDataRelationshipsScheduleDataType +from datadog_api_client.v2.model.schedule_on_call_responders_data_type import ScheduleOnCallRespondersDataType +from datadog_api_client.v2.model.schedule_on_call_responders_included import ScheduleOnCallRespondersIncluded +from datadog_api_client.v2.model.schedule_request_data_attributes_layers_items_members_items import ScheduleRequestDataAttributesLayersItemsMembersItems +from datadog_api_client.v2.model.schedule_request_data_attributes_layers_items_members_items_user import ScheduleRequestDataAttributesLayersItemsMembersItemsUser +from datadog_api_client.v2.model.schedule_target import ScheduleTarget +from datadog_api_client.v2.model.schedule_target_position import ScheduleTargetPosition +from datadog_api_client.v2.model.schedule_target_type import ScheduleTargetType +from datadog_api_client.v2.model.schedule_trigger import ScheduleTrigger +from datadog_api_client.v2.model.schedule_trigger_overlap_behavior import ScheduleTriggerOverlapBehavior +from datadog_api_client.v2.model.schedule_trigger_wrapper import ScheduleTriggerWrapper +from datadog_api_client.v2.model.schedule_update_request import ScheduleUpdateRequest +from datadog_api_client.v2.model.schedule_update_request_data import ScheduleUpdateRequestData +from datadog_api_client.v2.model.schedule_update_request_data_attributes import ScheduleUpdateRequestDataAttributes +from datadog_api_client.v2.model.schedule_update_request_data_attributes_layers_items import ScheduleUpdateRequestDataAttributesLayersItems +from datadog_api_client.v2.model.schedule_update_request_data_relationships import ScheduleUpdateRequestDataRelationships +from datadog_api_client.v2.model.schedule_update_request_data_type import ScheduleUpdateRequestDataType +from datadog_api_client.v2.model.schedule_user import ScheduleUser +from datadog_api_client.v2.model.schedule_user_attributes import ScheduleUserAttributes +from datadog_api_client.v2.model.schedule_user_type import ScheduleUserType +from datadog_api_client.v2.model.scorecard_list_response_attributes import ScorecardListResponseAttributes +from datadog_api_client.v2.model.scorecard_list_response_data import ScorecardListResponseData +from datadog_api_client.v2.model.scorecard_list_type import ScorecardListType +from datadog_api_client.v2.model.scorecard_score_attributes import ScorecardScoreAttributes +from datadog_api_client.v2.model.scorecard_score_data import ScorecardScoreData +from datadog_api_client.v2.model.scorecard_score_data_type import ScorecardScoreDataType +from datadog_api_client.v2.model.scorecard_score_relationship_data import ScorecardScoreRelationshipData +from datadog_api_client.v2.model.scorecard_score_relationship_item import ScorecardScoreRelationshipItem +from datadog_api_client.v2.model.scorecard_score_relationships import ScorecardScoreRelationships +from datadog_api_client.v2.model.scorecard_scores_aggregation import ScorecardScoresAggregation +from datadog_api_client.v2.model.scorecard_type import ScorecardType +from datadog_api_client.v2.model.search_issues_include_query_parameter_item import SearchIssuesIncludeQueryParameterItem +from datadog_api_client.v2.model.seat_assignments_data_type import SeatAssignmentsDataType +from datadog_api_client.v2.model.seat_user_data import SeatUserData +from datadog_api_client.v2.model.seat_user_data_array import SeatUserDataArray +from datadog_api_client.v2.model.seat_user_data_attributes import SeatUserDataAttributes +from datadog_api_client.v2.model.seat_user_data_type import SeatUserDataType +from datadog_api_client.v2.model.seat_user_meta import SeatUserMeta +from datadog_api_client.v2.model.secret_rule_array import SecretRuleArray +from datadog_api_client.v2.model.secret_rule_data import SecretRuleData +from datadog_api_client.v2.model.secret_rule_data_attributes import SecretRuleDataAttributes +from datadog_api_client.v2.model.secret_rule_data_attributes_match_validation import SecretRuleDataAttributesMatchValidation +from datadog_api_client.v2.model.secret_rule_data_attributes_match_validation_invalid_http_status_code_items import SecretRuleDataAttributesMatchValidationInvalidHttpStatusCodeItems +from datadog_api_client.v2.model.secret_rule_data_attributes_match_validation_valid_http_status_code_items import SecretRuleDataAttributesMatchValidationValidHttpStatusCodeItems +from datadog_api_client.v2.model.secret_rule_data_type import SecretRuleDataType +from datadog_api_client.v2.model.secure_embed_create_request import SecureEmbedCreateRequest +from datadog_api_client.v2.model.secure_embed_create_request_attributes import SecureEmbedCreateRequestAttributes +from datadog_api_client.v2.model.secure_embed_create_request_data import SecureEmbedCreateRequestData +from datadog_api_client.v2.model.secure_embed_create_response import SecureEmbedCreateResponse +from datadog_api_client.v2.model.secure_embed_create_response_attributes import SecureEmbedCreateResponseAttributes +from datadog_api_client.v2.model.secure_embed_create_response_data import SecureEmbedCreateResponseData +from datadog_api_client.v2.model.secure_embed_create_response_type import SecureEmbedCreateResponseType +from datadog_api_client.v2.model.secure_embed_get_response import SecureEmbedGetResponse +from datadog_api_client.v2.model.secure_embed_get_response_attributes import SecureEmbedGetResponseAttributes +from datadog_api_client.v2.model.secure_embed_get_response_data import SecureEmbedGetResponseData +from datadog_api_client.v2.model.secure_embed_get_response_type import SecureEmbedGetResponseType +from datadog_api_client.v2.model.secure_embed_global_time import SecureEmbedGlobalTime +from datadog_api_client.v2.model.secure_embed_global_time_live_span import SecureEmbedGlobalTimeLiveSpan +from datadog_api_client.v2.model.secure_embed_request_type import SecureEmbedRequestType +from datadog_api_client.v2.model.secure_embed_selectable_template_variable import SecureEmbedSelectableTemplateVariable +from datadog_api_client.v2.model.secure_embed_share_type import SecureEmbedShareType +from datadog_api_client.v2.model.secure_embed_status import SecureEmbedStatus +from datadog_api_client.v2.model.secure_embed_update_request import SecureEmbedUpdateRequest +from datadog_api_client.v2.model.secure_embed_update_request_attributes import SecureEmbedUpdateRequestAttributes +from datadog_api_client.v2.model.secure_embed_update_request_data import SecureEmbedUpdateRequestData +from datadog_api_client.v2.model.secure_embed_update_request_type import SecureEmbedUpdateRequestType +from datadog_api_client.v2.model.secure_embed_update_response import SecureEmbedUpdateResponse +from datadog_api_client.v2.model.secure_embed_update_response_attributes import SecureEmbedUpdateResponseAttributes +from datadog_api_client.v2.model.secure_embed_update_response_data import SecureEmbedUpdateResponseData +from datadog_api_client.v2.model.secure_embed_update_response_type import SecureEmbedUpdateResponseType +from datadog_api_client.v2.model.secure_embed_viewing_preferences import SecureEmbedViewingPreferences +from datadog_api_client.v2.model.secure_embed_viewing_preferences_theme import SecureEmbedViewingPreferencesTheme +from datadog_api_client.v2.model.security_automation_rules_links import SecurityAutomationRulesLinks +from datadog_api_client.v2.model.security_automation_rules_meta import SecurityAutomationRulesMeta +from datadog_api_client.v2.model.security_automation_rules_page_info import SecurityAutomationRulesPageInfo +from datadog_api_client.v2.model.security_entity_config_risks import SecurityEntityConfigRisks +from datadog_api_client.v2.model.security_entity_metadata import SecurityEntityMetadata +from datadog_api_client.v2.model.security_entity_risk_score import SecurityEntityRiskScore +from datadog_api_client.v2.model.security_entity_risk_score_attributes import SecurityEntityRiskScoreAttributes +from datadog_api_client.v2.model.security_entity_risk_score_attributes_severity import SecurityEntityRiskScoreAttributesSeverity +from datadog_api_client.v2.model.security_entity_risk_score_response import SecurityEntityRiskScoreResponse +from datadog_api_client.v2.model.security_entity_risk_score_type import SecurityEntityRiskScoreType +from datadog_api_client.v2.model.security_entity_risk_scores_meta import SecurityEntityRiskScoresMeta +from datadog_api_client.v2.model.security_entity_risk_scores_response import SecurityEntityRiskScoresResponse +from datadog_api_client.v2.model.security_filter import SecurityFilter +from datadog_api_client.v2.model.security_filter_attributes import SecurityFilterAttributes +from datadog_api_client.v2.model.security_filter_create_attributes import SecurityFilterCreateAttributes +from datadog_api_client.v2.model.security_filter_create_data import SecurityFilterCreateData +from datadog_api_client.v2.model.security_filter_create_request import SecurityFilterCreateRequest +from datadog_api_client.v2.model.security_filter_exclusion_filter import SecurityFilterExclusionFilter +from datadog_api_client.v2.model.security_filter_exclusion_filter_response import SecurityFilterExclusionFilterResponse +from datadog_api_client.v2.model.security_filter_filtered_data_type import SecurityFilterFilteredDataType +from datadog_api_client.v2.model.security_filter_meta import SecurityFilterMeta +from datadog_api_client.v2.model.security_filter_response import SecurityFilterResponse +from datadog_api_client.v2.model.security_filter_type import SecurityFilterType +from datadog_api_client.v2.model.security_filter_update_attributes import SecurityFilterUpdateAttributes +from datadog_api_client.v2.model.security_filter_update_data import SecurityFilterUpdateData +from datadog_api_client.v2.model.security_filter_update_request import SecurityFilterUpdateRequest +from datadog_api_client.v2.model.security_filter_version import SecurityFilterVersion +from datadog_api_client.v2.model.security_filter_version_attributes import SecurityFilterVersionAttributes +from datadog_api_client.v2.model.security_filter_version_entry import SecurityFilterVersionEntry +from datadog_api_client.v2.model.security_filter_version_type import SecurityFilterVersionType +from datadog_api_client.v2.model.security_filter_versions_response import SecurityFilterVersionsResponse +from datadog_api_client.v2.model.security_filters_response import SecurityFiltersResponse +from datadog_api_client.v2.model.security_finding_type import SecurityFindingType +from datadog_api_client.v2.model.security_findings_attributes import SecurityFindingsAttributes +from datadog_api_client.v2.model.security_findings_data import SecurityFindingsData +from datadog_api_client.v2.model.security_findings_data_type import SecurityFindingsDataType +from datadog_api_client.v2.model.security_findings_links import SecurityFindingsLinks +from datadog_api_client.v2.model.security_findings_meta import SecurityFindingsMeta +from datadog_api_client.v2.model.security_findings_page import SecurityFindingsPage +from datadog_api_client.v2.model.security_findings_search_request import SecurityFindingsSearchRequest +from datadog_api_client.v2.model.security_findings_search_request_data import SecurityFindingsSearchRequestData +from datadog_api_client.v2.model.security_findings_search_request_data_attributes import SecurityFindingsSearchRequestDataAttributes +from datadog_api_client.v2.model.security_findings_search_request_page import SecurityFindingsSearchRequestPage +from datadog_api_client.v2.model.security_findings_sort import SecurityFindingsSort +from datadog_api_client.v2.model.security_findings_status import SecurityFindingsStatus +from datadog_api_client.v2.model.security_monitoring_azure_app_registration import SecurityMonitoringAzureAppRegistration +from datadog_api_client.v2.model.security_monitoring_content_pack_activation import SecurityMonitoringContentPackActivation +from datadog_api_client.v2.model.security_monitoring_content_pack_app_sec_details import SecurityMonitoringContentPackAppSecDetails +from datadog_api_client.v2.model.security_monitoring_content_pack_app_sec_details_type import SecurityMonitoringContentPackAppSecDetailsType +from datadog_api_client.v2.model.security_monitoring_content_pack_audit_details import SecurityMonitoringContentPackAuditDetails +from datadog_api_client.v2.model.security_monitoring_content_pack_audit_details_type import SecurityMonitoringContentPackAuditDetailsType +from datadog_api_client.v2.model.security_monitoring_content_pack_entity_details import SecurityMonitoringContentPackEntityDetails +from datadog_api_client.v2.model.security_monitoring_content_pack_entity_details_type import SecurityMonitoringContentPackEntityDetailsType +from datadog_api_client.v2.model.security_monitoring_content_pack_integration_status import SecurityMonitoringContentPackIntegrationStatus +from datadog_api_client.v2.model.security_monitoring_content_pack_logs_details import SecurityMonitoringContentPackLogsDetails +from datadog_api_client.v2.model.security_monitoring_content_pack_onboarding_details import SecurityMonitoringContentPackOnboardingDetails +from datadog_api_client.v2.model.security_monitoring_content_pack_onboarding_details_type import SecurityMonitoringContentPackOnboardingDetailsType +from datadog_api_client.v2.model.security_monitoring_content_pack_state_attributes import SecurityMonitoringContentPackStateAttributes +from datadog_api_client.v2.model.security_monitoring_content_pack_state_data import SecurityMonitoringContentPackStateData +from datadog_api_client.v2.model.security_monitoring_content_pack_state_details import SecurityMonitoringContentPackStateDetails +from datadog_api_client.v2.model.security_monitoring_content_pack_state_meta import SecurityMonitoringContentPackStateMeta +from datadog_api_client.v2.model.security_monitoring_content_pack_state_type import SecurityMonitoringContentPackStateType +from datadog_api_client.v2.model.security_monitoring_content_pack_states_response import SecurityMonitoringContentPackStatesResponse +from datadog_api_client.v2.model.security_monitoring_content_pack_status import SecurityMonitoringContentPackStatus +from datadog_api_client.v2.model.security_monitoring_content_pack_threat_intel_details import SecurityMonitoringContentPackThreatIntelDetails +from datadog_api_client.v2.model.security_monitoring_content_pack_threat_intel_details_type import SecurityMonitoringContentPackThreatIntelDetailsType +from datadog_api_client.v2.model.security_monitoring_content_pack_timestamp_bucket import SecurityMonitoringContentPackTimestampBucket +from datadog_api_client.v2.model.security_monitoring_content_pack_vulnerability_details import SecurityMonitoringContentPackVulnerabilityDetails +from datadog_api_client.v2.model.security_monitoring_content_pack_vulnerability_details_type import SecurityMonitoringContentPackVulnerabilityDetailsType +from datadog_api_client.v2.model.security_monitoring_critical_asset import SecurityMonitoringCriticalAsset +from datadog_api_client.v2.model.security_monitoring_critical_asset_attributes import SecurityMonitoringCriticalAssetAttributes +from datadog_api_client.v2.model.security_monitoring_critical_asset_create_attributes import SecurityMonitoringCriticalAssetCreateAttributes +from datadog_api_client.v2.model.security_monitoring_critical_asset_create_data import SecurityMonitoringCriticalAssetCreateData +from datadog_api_client.v2.model.security_monitoring_critical_asset_create_request import SecurityMonitoringCriticalAssetCreateRequest +from datadog_api_client.v2.model.security_monitoring_critical_asset_response import SecurityMonitoringCriticalAssetResponse +from datadog_api_client.v2.model.security_monitoring_critical_asset_severity import SecurityMonitoringCriticalAssetSeverity +from datadog_api_client.v2.model.security_monitoring_critical_asset_type import SecurityMonitoringCriticalAssetType +from datadog_api_client.v2.model.security_monitoring_critical_asset_update_attributes import SecurityMonitoringCriticalAssetUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_critical_asset_update_data import SecurityMonitoringCriticalAssetUpdateData +from datadog_api_client.v2.model.security_monitoring_critical_asset_update_request import SecurityMonitoringCriticalAssetUpdateRequest +from datadog_api_client.v2.model.security_monitoring_critical_assets_response import SecurityMonitoringCriticalAssetsResponse +from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_config_create_attributes import SecurityMonitoringCrowdStrikeIntegrationConfigCreateAttributes +from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_config_update_attributes import SecurityMonitoringCrowdStrikeIntegrationConfigUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_crowd_strike_integration_credentials_validate_attributes import SecurityMonitoringCrowdStrikeIntegrationCredentialsValidateAttributes +from datadog_api_client.v2.model.security_monitoring_dataset_attributes_request import SecurityMonitoringDatasetAttributesRequest +from datadog_api_client.v2.model.security_monitoring_dataset_attributes_response import SecurityMonitoringDatasetAttributesResponse +from datadog_api_client.v2.model.security_monitoring_dataset_column import SecurityMonitoringDatasetColumn +from datadog_api_client.v2.model.security_monitoring_dataset_create_data import SecurityMonitoringDatasetCreateData +from datadog_api_client.v2.model.security_monitoring_dataset_create_request import SecurityMonitoringDatasetCreateRequest +from datadog_api_client.v2.model.security_monitoring_dataset_create_response import SecurityMonitoringDatasetCreateResponse +from datadog_api_client.v2.model.security_monitoring_dataset_create_response_data import SecurityMonitoringDatasetCreateResponseData +from datadog_api_client.v2.model.security_monitoring_dataset_create_type import SecurityMonitoringDatasetCreateType +from datadog_api_client.v2.model.security_monitoring_dataset_data import SecurityMonitoringDatasetData +from datadog_api_client.v2.model.security_monitoring_dataset_definition import SecurityMonitoringDatasetDefinition +from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_request import SecurityMonitoringDatasetDependenciesRequest +from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_request_attributes import SecurityMonitoringDatasetDependenciesRequestAttributes +from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_request_data import SecurityMonitoringDatasetDependenciesRequestData +from datadog_api_client.v2.model.security_monitoring_dataset_dependencies_response import SecurityMonitoringDatasetDependenciesResponse +from datadog_api_client.v2.model.security_monitoring_dataset_dependents_attributes import SecurityMonitoringDatasetDependentsAttributes +from datadog_api_client.v2.model.security_monitoring_dataset_dependents_data import SecurityMonitoringDatasetDependentsData +from datadog_api_client.v2.model.security_monitoring_dataset_dependents_type import SecurityMonitoringDatasetDependentsType +from datadog_api_client.v2.model.security_monitoring_dataset_response import SecurityMonitoringDatasetResponse +from datadog_api_client.v2.model.security_monitoring_dataset_search import SecurityMonitoringDatasetSearch +from datadog_api_client.v2.model.security_monitoring_dataset_time_window import SecurityMonitoringDatasetTimeWindow +from datadog_api_client.v2.model.security_monitoring_dataset_type import SecurityMonitoringDatasetType +from datadog_api_client.v2.model.security_monitoring_dataset_update_data import SecurityMonitoringDatasetUpdateData +from datadog_api_client.v2.model.security_monitoring_dataset_update_request import SecurityMonitoringDatasetUpdateRequest +from datadog_api_client.v2.model.security_monitoring_dataset_update_type import SecurityMonitoringDatasetUpdateType +from datadog_api_client.v2.model.security_monitoring_dataset_version_entry import SecurityMonitoringDatasetVersionEntry +from datadog_api_client.v2.model.security_monitoring_dataset_version_field_change import SecurityMonitoringDatasetVersionFieldChange +from datadog_api_client.v2.model.security_monitoring_dataset_version_history_attributes import SecurityMonitoringDatasetVersionHistoryAttributes +from datadog_api_client.v2.model.security_monitoring_dataset_version_history_data import SecurityMonitoringDatasetVersionHistoryData +from datadog_api_client.v2.model.security_monitoring_dataset_version_history_entries import SecurityMonitoringDatasetVersionHistoryEntries +from datadog_api_client.v2.model.security_monitoring_dataset_version_history_response import SecurityMonitoringDatasetVersionHistoryResponse +from datadog_api_client.v2.model.security_monitoring_dataset_version_history_type import SecurityMonitoringDatasetVersionHistoryType +from datadog_api_client.v2.model.security_monitoring_datasets_list_meta import SecurityMonitoringDatasetsListMeta +from datadog_api_client.v2.model.security_monitoring_datasets_list_response import SecurityMonitoringDatasetsListResponse +from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_attributes import SecurityMonitoringEntraIdAzureAppRegistrationsAttributes +from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_data import SecurityMonitoringEntraIdAzureAppRegistrationsData +from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_resource_type import SecurityMonitoringEntraIdAzureAppRegistrationsResourceType +from datadog_api_client.v2.model.security_monitoring_entra_id_azure_app_registrations_response import SecurityMonitoringEntraIdAzureAppRegistrationsResponse +from datadog_api_client.v2.model.security_monitoring_entra_id_integration_config_create_attributes import SecurityMonitoringEntraIdIntegrationConfigCreateAttributes +from datadog_api_client.v2.model.security_monitoring_entra_id_integration_config_update_attributes import SecurityMonitoringEntraIdIntegrationConfigUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_entra_id_integration_credentials_validate_attributes import SecurityMonitoringEntraIdIntegrationCredentialsValidateAttributes +from datadog_api_client.v2.model.security_monitoring_filter import SecurityMonitoringFilter +from datadog_api_client.v2.model.security_monitoring_filter_action import SecurityMonitoringFilterAction +from datadog_api_client.v2.model.security_monitoring_google_workspace_integration_config_create_attributes import SecurityMonitoringGoogleWorkspaceIntegrationConfigCreateAttributes +from datadog_api_client.v2.model.security_monitoring_google_workspace_integration_config_update_attributes import SecurityMonitoringGoogleWorkspaceIntegrationConfigUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_google_workspace_integration_credentials_validate_attributes import SecurityMonitoringGoogleWorkspaceIntegrationCredentialsValidateAttributes +from datadog_api_client.v2.model.security_monitoring_integration_activate_attributes import SecurityMonitoringIntegrationActivateAttributes +from datadog_api_client.v2.model.security_monitoring_integration_activate_data import SecurityMonitoringIntegrationActivateData +from datadog_api_client.v2.model.security_monitoring_integration_activate_request import SecurityMonitoringIntegrationActivateRequest +from datadog_api_client.v2.model.security_monitoring_integration_activate_resource_type import SecurityMonitoringIntegrationActivateResourceType +from datadog_api_client.v2.model.security_monitoring_integration_config_attributes import SecurityMonitoringIntegrationConfigAttributes +from datadog_api_client.v2.model.security_monitoring_integration_config_create_attributes import SecurityMonitoringIntegrationConfigCreateAttributes +from datadog_api_client.v2.model.security_monitoring_integration_config_create_data import SecurityMonitoringIntegrationConfigCreateData +from datadog_api_client.v2.model.security_monitoring_integration_config_create_request import SecurityMonitoringIntegrationConfigCreateRequest +from datadog_api_client.v2.model.security_monitoring_integration_config_crowd_strike_secrets import SecurityMonitoringIntegrationConfigCrowdStrikeSecrets +from datadog_api_client.v2.model.security_monitoring_integration_config_data import SecurityMonitoringIntegrationConfigData +from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_secrets import SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets +from datadog_api_client.v2.model.security_monitoring_integration_config_google_workspace_service_account import SecurityMonitoringIntegrationConfigGoogleWorkspaceServiceAccount +from datadog_api_client.v2.model.security_monitoring_integration_config_okta_secrets import SecurityMonitoringIntegrationConfigOktaSecrets +from datadog_api_client.v2.model.security_monitoring_integration_config_resource_type import SecurityMonitoringIntegrationConfigResourceType +from datadog_api_client.v2.model.security_monitoring_integration_config_response import SecurityMonitoringIntegrationConfigResponse +from datadog_api_client.v2.model.security_monitoring_integration_config_sentinel_one_secrets import SecurityMonitoringIntegrationConfigSentinelOneSecrets +from datadog_api_client.v2.model.security_monitoring_integration_config_settings import SecurityMonitoringIntegrationConfigSettings +from datadog_api_client.v2.model.security_monitoring_integration_config_state import SecurityMonitoringIntegrationConfigState +from datadog_api_client.v2.model.security_monitoring_integration_config_update_attributes import SecurityMonitoringIntegrationConfigUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_integration_config_update_data import SecurityMonitoringIntegrationConfigUpdateData +from datadog_api_client.v2.model.security_monitoring_integration_config_update_request import SecurityMonitoringIntegrationConfigUpdateRequest +from datadog_api_client.v2.model.security_monitoring_integration_configs_response import SecurityMonitoringIntegrationConfigsResponse +from datadog_api_client.v2.model.security_monitoring_integration_credentials_validate_attributes import SecurityMonitoringIntegrationCredentialsValidateAttributes +from datadog_api_client.v2.model.security_monitoring_integration_credentials_validate_data import SecurityMonitoringIntegrationCredentialsValidateData +from datadog_api_client.v2.model.security_monitoring_integration_credentials_validate_request import SecurityMonitoringIntegrationCredentialsValidateRequest +from datadog_api_client.v2.model.security_monitoring_integration_type import SecurityMonitoringIntegrationType +from datadog_api_client.v2.model.security_monitoring_integration_type_crowd_strike import SecurityMonitoringIntegrationTypeCrowdStrike +from datadog_api_client.v2.model.security_monitoring_integration_type_entra_id import SecurityMonitoringIntegrationTypeEntraId +from datadog_api_client.v2.model.security_monitoring_integration_type_google_workspace import SecurityMonitoringIntegrationTypeGoogleWorkspace +from datadog_api_client.v2.model.security_monitoring_integration_type_okta import SecurityMonitoringIntegrationTypeOkta +from datadog_api_client.v2.model.security_monitoring_integration_type_sentinel_one import SecurityMonitoringIntegrationTypeSentinelOne +from datadog_api_client.v2.model.security_monitoring_list_rules_response import SecurityMonitoringListRulesResponse +from datadog_api_client.v2.model.security_monitoring_okta_integration_config_create_attributes import SecurityMonitoringOktaIntegrationConfigCreateAttributes +from datadog_api_client.v2.model.security_monitoring_okta_integration_config_update_attributes import SecurityMonitoringOktaIntegrationConfigUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_okta_integration_credentials_validate_attributes import SecurityMonitoringOktaIntegrationCredentialsValidateAttributes +from datadog_api_client.v2.model.security_monitoring_paginated_suppressions_response import SecurityMonitoringPaginatedSuppressionsResponse +from datadog_api_client.v2.model.security_monitoring_reference_table import SecurityMonitoringReferenceTable +from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options import SecurityMonitoringRuleAnomalyDetectionOptions +from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options_bucket_duration import SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration +from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options_detection_tolerance import SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance +from datadog_api_client.v2.model.security_monitoring_rule_anomaly_detection_options_learning_duration import SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_attributes import SecurityMonitoringRuleBulkDeleteAttributes +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_data import SecurityMonitoringRuleBulkDeleteData +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_payload import SecurityMonitoringRuleBulkDeletePayload +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_request_data_type import SecurityMonitoringRuleBulkDeleteRequestDataType +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response import SecurityMonitoringRuleBulkDeleteResponse +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response_attributes import SecurityMonitoringRuleBulkDeleteResponseAttributes +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response_data import SecurityMonitoringRuleBulkDeleteResponseData +from datadog_api_client.v2.model.security_monitoring_rule_bulk_delete_response_data_type import SecurityMonitoringRuleBulkDeleteResponseDataType +from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_attributes import SecurityMonitoringRuleBulkExportAttributes +from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_data import SecurityMonitoringRuleBulkExportData +from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_data_type import SecurityMonitoringRuleBulkExportDataType +from datadog_api_client.v2.model.security_monitoring_rule_bulk_export_payload import SecurityMonitoringRuleBulkExportPayload +from datadog_api_client.v2.model.security_monitoring_rule_case import SecurityMonitoringRuleCase +from datadog_api_client.v2.model.security_monitoring_rule_case_action import SecurityMonitoringRuleCaseAction +from datadog_api_client.v2.model.security_monitoring_rule_case_action_options import SecurityMonitoringRuleCaseActionOptions +from datadog_api_client.v2.model.security_monitoring_rule_case_action_options_flagged_ip_type import SecurityMonitoringRuleCaseActionOptionsFlaggedIPType +from datadog_api_client.v2.model.security_monitoring_rule_case_action_type import SecurityMonitoringRuleCaseActionType +from datadog_api_client.v2.model.security_monitoring_rule_case_create import SecurityMonitoringRuleCaseCreate +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_attributes import SecurityMonitoringRuleConvertBulkAttributes +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data import SecurityMonitoringRuleConvertBulkData +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_data_type import SecurityMonitoringRuleConvertBulkDataType +from datadog_api_client.v2.model.security_monitoring_rule_convert_bulk_payload import SecurityMonitoringRuleConvertBulkPayload +from datadog_api_client.v2.model.security_monitoring_rule_convert_payload import SecurityMonitoringRuleConvertPayload +from datadog_api_client.v2.model.security_monitoring_rule_convert_response import SecurityMonitoringRuleConvertResponse +from datadog_api_client.v2.model.security_monitoring_rule_create_payload import SecurityMonitoringRuleCreatePayload +from datadog_api_client.v2.model.security_monitoring_rule_detection_method import SecurityMonitoringRuleDetectionMethod +from datadog_api_client.v2.model.security_monitoring_rule_evaluation_window import SecurityMonitoringRuleEvaluationWindow +from datadog_api_client.v2.model.security_monitoring_rule_hardcoded_evaluator_type import SecurityMonitoringRuleHardcodedEvaluatorType +from datadog_api_client.v2.model.security_monitoring_rule_impossible_travel_options import SecurityMonitoringRuleImpossibleTravelOptions +from datadog_api_client.v2.model.security_monitoring_rule_keep_alive import SecurityMonitoringRuleKeepAlive +from datadog_api_client.v2.model.security_monitoring_rule_max_signal_duration import SecurityMonitoringRuleMaxSignalDuration +from datadog_api_client.v2.model.security_monitoring_rule_new_value_options import SecurityMonitoringRuleNewValueOptions +from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_learning_method import SecurityMonitoringRuleNewValueOptionsLearningMethod +from datadog_api_client.v2.model.security_monitoring_rule_new_value_options_learning_threshold import SecurityMonitoringRuleNewValueOptionsLearningThreshold +from datadog_api_client.v2.model.security_monitoring_rule_options import SecurityMonitoringRuleOptions +from datadog_api_client.v2.model.security_monitoring_rule_query import SecurityMonitoringRuleQuery +from datadog_api_client.v2.model.security_monitoring_rule_query_aggregation import SecurityMonitoringRuleQueryAggregation +from datadog_api_client.v2.model.security_monitoring_rule_query_payload import SecurityMonitoringRuleQueryPayload +from datadog_api_client.v2.model.security_monitoring_rule_query_payload_data import SecurityMonitoringRuleQueryPayloadData +from datadog_api_client.v2.model.security_monitoring_rule_response import SecurityMonitoringRuleResponse +from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_options import SecurityMonitoringRuleSequenceDetectionOptions +from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_step import SecurityMonitoringRuleSequenceDetectionStep +from datadog_api_client.v2.model.security_monitoring_rule_sequence_detection_step_transition import SecurityMonitoringRuleSequenceDetectionStepTransition +from datadog_api_client.v2.model.security_monitoring_rule_severity import SecurityMonitoringRuleSeverity +from datadog_api_client.v2.model.security_monitoring_rule_sort import SecurityMonitoringRuleSort +from datadog_api_client.v2.model.security_monitoring_rule_test_payload import SecurityMonitoringRuleTestPayload +from datadog_api_client.v2.model.security_monitoring_rule_test_request import SecurityMonitoringRuleTestRequest +from datadog_api_client.v2.model.security_monitoring_rule_test_response import SecurityMonitoringRuleTestResponse +from datadog_api_client.v2.model.security_monitoring_rule_third_party_options import SecurityMonitoringRuleThirdPartyOptions +from datadog_api_client.v2.model.security_monitoring_rule_type_create import SecurityMonitoringRuleTypeCreate +from datadog_api_client.v2.model.security_monitoring_rule_type_read import SecurityMonitoringRuleTypeRead +from datadog_api_client.v2.model.security_monitoring_rule_type_test import SecurityMonitoringRuleTypeTest +from datadog_api_client.v2.model.security_monitoring_rule_update_payload import SecurityMonitoringRuleUpdatePayload +from datadog_api_client.v2.model.security_monitoring_rule_validate_payload import SecurityMonitoringRuleValidatePayload +from datadog_api_client.v2.model.security_monitoring_sku import SecurityMonitoringSKU +from datadog_api_client.v2.model.security_monitoring_scheduling_options import SecurityMonitoringSchedulingOptions +from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_config_create_attributes import SecurityMonitoringSentinelOneIntegrationConfigCreateAttributes +from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_config_update_attributes import SecurityMonitoringSentinelOneIntegrationConfigUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_sentinel_one_integration_credentials_validate_attributes import SecurityMonitoringSentinelOneIntegrationCredentialsValidateAttributes +from datadog_api_client.v2.model.security_monitoring_signal import SecurityMonitoringSignal +from datadog_api_client.v2.model.security_monitoring_signal_archive_reason import SecurityMonitoringSignalArchiveReason +from datadog_api_client.v2.model.security_monitoring_signal_assignee_update_attributes import SecurityMonitoringSignalAssigneeUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_signal_assignee_update_data import SecurityMonitoringSignalAssigneeUpdateData +from datadog_api_client.v2.model.security_monitoring_signal_assignee_update_request import SecurityMonitoringSignalAssigneeUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signal_attributes import SecurityMonitoringSignalAttributes +from datadog_api_client.v2.model.security_monitoring_signal_incident_ids import SecurityMonitoringSignalIncidentIds +from datadog_api_client.v2.model.security_monitoring_signal_incidents_update_attributes import SecurityMonitoringSignalIncidentsUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_signal_incidents_update_data import SecurityMonitoringSignalIncidentsUpdateData +from datadog_api_client.v2.model.security_monitoring_signal_incidents_update_request import SecurityMonitoringSignalIncidentsUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signal_investigation_query_template_variables import SecurityMonitoringSignalInvestigationQueryTemplateVariables +from datadog_api_client.v2.model.security_monitoring_signal_list_request import SecurityMonitoringSignalListRequest +from datadog_api_client.v2.model.security_monitoring_signal_list_request_filter import SecurityMonitoringSignalListRequestFilter +from datadog_api_client.v2.model.security_monitoring_signal_list_request_page import SecurityMonitoringSignalListRequestPage +from datadog_api_client.v2.model.security_monitoring_signal_metadata_type import SecurityMonitoringSignalMetadataType +from datadog_api_client.v2.model.security_monitoring_signal_response import SecurityMonitoringSignalResponse +from datadog_api_client.v2.model.security_monitoring_signal_rule_create_payload import SecurityMonitoringSignalRuleCreatePayload +from datadog_api_client.v2.model.security_monitoring_signal_rule_payload import SecurityMonitoringSignalRulePayload +from datadog_api_client.v2.model.security_monitoring_signal_rule_query import SecurityMonitoringSignalRuleQuery +from datadog_api_client.v2.model.security_monitoring_signal_rule_response import SecurityMonitoringSignalRuleResponse +from datadog_api_client.v2.model.security_monitoring_signal_rule_response_query import SecurityMonitoringSignalRuleResponseQuery +from datadog_api_client.v2.model.security_monitoring_signal_rule_type import SecurityMonitoringSignalRuleType +from datadog_api_client.v2.model.security_monitoring_signal_state import SecurityMonitoringSignalState +from datadog_api_client.v2.model.security_monitoring_signal_state_update_attributes import SecurityMonitoringSignalStateUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_signal_state_update_data import SecurityMonitoringSignalStateUpdateData +from datadog_api_client.v2.model.security_monitoring_signal_state_update_request import SecurityMonitoringSignalStateUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signal_suggested_action import SecurityMonitoringSignalSuggestedAction +from datadog_api_client.v2.model.security_monitoring_signal_suggested_action_attributes import SecurityMonitoringSignalSuggestedActionAttributes +from datadog_api_client.v2.model.security_monitoring_signal_suggested_action_type import SecurityMonitoringSignalSuggestedActionType +from datadog_api_client.v2.model.security_monitoring_signal_suggested_actions_response import SecurityMonitoringSignalSuggestedActionsResponse +from datadog_api_client.v2.model.security_monitoring_signal_triage_attributes import SecurityMonitoringSignalTriageAttributes +from datadog_api_client.v2.model.security_monitoring_signal_triage_update_data import SecurityMonitoringSignalTriageUpdateData +from datadog_api_client.v2.model.security_monitoring_signal_triage_update_response import SecurityMonitoringSignalTriageUpdateResponse +from datadog_api_client.v2.model.security_monitoring_signal_type import SecurityMonitoringSignalType +from datadog_api_client.v2.model.security_monitoring_signal_update_attributes import SecurityMonitoringSignalUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_signal_update_data import SecurityMonitoringSignalUpdateData +from datadog_api_client.v2.model.security_monitoring_signal_update_request import SecurityMonitoringSignalUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signals_bulk_assignee_update_attributes import SecurityMonitoringSignalsBulkAssigneeUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_signals_bulk_assignee_update_data import SecurityMonitoringSignalsBulkAssigneeUpdateData +from datadog_api_client.v2.model.security_monitoring_signals_bulk_assignee_update_request import SecurityMonitoringSignalsBulkAssigneeUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signals_bulk_state_update_data import SecurityMonitoringSignalsBulkStateUpdateData +from datadog_api_client.v2.model.security_monitoring_signals_bulk_state_update_request import SecurityMonitoringSignalsBulkStateUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_event import SecurityMonitoringSignalsBulkTriageEvent +from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_event_attributes import SecurityMonitoringSignalsBulkTriageEventAttributes +from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_update_response import SecurityMonitoringSignalsBulkTriageUpdateResponse +from datadog_api_client.v2.model.security_monitoring_signals_bulk_triage_update_result import SecurityMonitoringSignalsBulkTriageUpdateResult +from datadog_api_client.v2.model.security_monitoring_signals_bulk_update_data import SecurityMonitoringSignalsBulkUpdateData +from datadog_api_client.v2.model.security_monitoring_signals_bulk_update_request import SecurityMonitoringSignalsBulkUpdateRequest +from datadog_api_client.v2.model.security_monitoring_signals_list_response import SecurityMonitoringSignalsListResponse +from datadog_api_client.v2.model.security_monitoring_signals_list_response_links import SecurityMonitoringSignalsListResponseLinks +from datadog_api_client.v2.model.security_monitoring_signals_list_response_meta import SecurityMonitoringSignalsListResponseMeta +from datadog_api_client.v2.model.security_monitoring_signals_list_response_meta_page import SecurityMonitoringSignalsListResponseMetaPage +from datadog_api_client.v2.model.security_monitoring_signals_sort import SecurityMonitoringSignalsSort +from datadog_api_client.v2.model.security_monitoring_standard_data_source import SecurityMonitoringStandardDataSource +from datadog_api_client.v2.model.security_monitoring_standard_rule_create_payload import SecurityMonitoringStandardRuleCreatePayload +from datadog_api_client.v2.model.security_monitoring_standard_rule_payload import SecurityMonitoringStandardRulePayload +from datadog_api_client.v2.model.security_monitoring_standard_rule_query import SecurityMonitoringStandardRuleQuery +from datadog_api_client.v2.model.security_monitoring_standard_rule_response import SecurityMonitoringStandardRuleResponse +from datadog_api_client.v2.model.security_monitoring_standard_rule_test_payload import SecurityMonitoringStandardRuleTestPayload +from datadog_api_client.v2.model.security_monitoring_suppression import SecurityMonitoringSuppression +from datadog_api_client.v2.model.security_monitoring_suppression_attributes import SecurityMonitoringSuppressionAttributes +from datadog_api_client.v2.model.security_monitoring_suppression_create_attributes import SecurityMonitoringSuppressionCreateAttributes +from datadog_api_client.v2.model.security_monitoring_suppression_create_data import SecurityMonitoringSuppressionCreateData +from datadog_api_client.v2.model.security_monitoring_suppression_create_request import SecurityMonitoringSuppressionCreateRequest +from datadog_api_client.v2.model.security_monitoring_suppression_response import SecurityMonitoringSuppressionResponse +from datadog_api_client.v2.model.security_monitoring_suppression_sort import SecurityMonitoringSuppressionSort +from datadog_api_client.v2.model.security_monitoring_suppression_type import SecurityMonitoringSuppressionType +from datadog_api_client.v2.model.security_monitoring_suppression_update_attributes import SecurityMonitoringSuppressionUpdateAttributes +from datadog_api_client.v2.model.security_monitoring_suppression_update_data import SecurityMonitoringSuppressionUpdateData +from datadog_api_client.v2.model.security_monitoring_suppression_update_request import SecurityMonitoringSuppressionUpdateRequest +from datadog_api_client.v2.model.security_monitoring_suppressions_meta import SecurityMonitoringSuppressionsMeta +from datadog_api_client.v2.model.security_monitoring_suppressions_page_meta import SecurityMonitoringSuppressionsPageMeta +from datadog_api_client.v2.model.security_monitoring_suppressions_response import SecurityMonitoringSuppressionsResponse +from datadog_api_client.v2.model.security_monitoring_terraform_bulk_export_attributes import SecurityMonitoringTerraformBulkExportAttributes +from datadog_api_client.v2.model.security_monitoring_terraform_bulk_export_data import SecurityMonitoringTerraformBulkExportData +from datadog_api_client.v2.model.security_monitoring_terraform_bulk_export_request import SecurityMonitoringTerraformBulkExportRequest +from datadog_api_client.v2.model.security_monitoring_terraform_convert_attributes import SecurityMonitoringTerraformConvertAttributes +from datadog_api_client.v2.model.security_monitoring_terraform_convert_data import SecurityMonitoringTerraformConvertData +from datadog_api_client.v2.model.security_monitoring_terraform_convert_request import SecurityMonitoringTerraformConvertRequest +from datadog_api_client.v2.model.security_monitoring_terraform_export_attributes import SecurityMonitoringTerraformExportAttributes +from datadog_api_client.v2.model.security_monitoring_terraform_export_data import SecurityMonitoringTerraformExportData +from datadog_api_client.v2.model.security_monitoring_terraform_export_response import SecurityMonitoringTerraformExportResponse +from datadog_api_client.v2.model.security_monitoring_terraform_resource_type import SecurityMonitoringTerraformResourceType +from datadog_api_client.v2.model.security_monitoring_third_party_root_query import SecurityMonitoringThirdPartyRootQuery +from datadog_api_client.v2.model.security_monitoring_third_party_rule_case import SecurityMonitoringThirdPartyRuleCase +from datadog_api_client.v2.model.security_monitoring_third_party_rule_case_create import SecurityMonitoringThirdPartyRuleCaseCreate +from datadog_api_client.v2.model.security_monitoring_triage_user import SecurityMonitoringTriageUser +from datadog_api_client.v2.model.security_monitoring_user import SecurityMonitoringUser +from datadog_api_client.v2.model.security_trigger import SecurityTrigger +from datadog_api_client.v2.model.security_trigger_wrapper import SecurityTriggerWrapper +from datadog_api_client.v2.model.selectors import Selectors +from datadog_api_client.v2.model.self_service_trigger_wrapper import SelfServiceTriggerWrapper +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.send_teams_message_action import SendTeamsMessageAction +from datadog_api_client.v2.model.send_teams_message_action_type import SendTeamsMessageActionType +from datadog_api_client.v2.model.sensitive_data_scanner_config_request import SensitiveDataScannerConfigRequest +from datadog_api_client.v2.model.sensitive_data_scanner_configuration import SensitiveDataScannerConfiguration +from datadog_api_client.v2.model.sensitive_data_scanner_configuration_data import SensitiveDataScannerConfigurationData +from datadog_api_client.v2.model.sensitive_data_scanner_configuration_relationships import SensitiveDataScannerConfigurationRelationships +from datadog_api_client.v2.model.sensitive_data_scanner_configuration_type import SensitiveDataScannerConfigurationType +from datadog_api_client.v2.model.sensitive_data_scanner_create_group_response import SensitiveDataScannerCreateGroupResponse +from datadog_api_client.v2.model.sensitive_data_scanner_create_rule_response import SensitiveDataScannerCreateRuleResponse +from datadog_api_client.v2.model.sensitive_data_scanner_filter import SensitiveDataScannerFilter +from datadog_api_client.v2.model.sensitive_data_scanner_get_config_included_array import SensitiveDataScannerGetConfigIncludedArray +from datadog_api_client.v2.model.sensitive_data_scanner_get_config_included_item import SensitiveDataScannerGetConfigIncludedItem +from datadog_api_client.v2.model.sensitive_data_scanner_get_config_response import SensitiveDataScannerGetConfigResponse +from datadog_api_client.v2.model.sensitive_data_scanner_get_config_response_data import SensitiveDataScannerGetConfigResponseData +from datadog_api_client.v2.model.sensitive_data_scanner_group import SensitiveDataScannerGroup +from datadog_api_client.v2.model.sensitive_data_scanner_group_attributes import SensitiveDataScannerGroupAttributes +from datadog_api_client.v2.model.sensitive_data_scanner_group_create import SensitiveDataScannerGroupCreate +from datadog_api_client.v2.model.sensitive_data_scanner_group_create_request import SensitiveDataScannerGroupCreateRequest +from datadog_api_client.v2.model.sensitive_data_scanner_group_data import SensitiveDataScannerGroupData +from datadog_api_client.v2.model.sensitive_data_scanner_group_delete_request import SensitiveDataScannerGroupDeleteRequest +from datadog_api_client.v2.model.sensitive_data_scanner_group_delete_response import SensitiveDataScannerGroupDeleteResponse +from datadog_api_client.v2.model.sensitive_data_scanner_group_included_item import SensitiveDataScannerGroupIncludedItem +from datadog_api_client.v2.model.sensitive_data_scanner_group_item import SensitiveDataScannerGroupItem +from datadog_api_client.v2.model.sensitive_data_scanner_group_list import SensitiveDataScannerGroupList +from datadog_api_client.v2.model.sensitive_data_scanner_group_relationships import SensitiveDataScannerGroupRelationships +from datadog_api_client.v2.model.sensitive_data_scanner_group_response import SensitiveDataScannerGroupResponse +from datadog_api_client.v2.model.sensitive_data_scanner_group_type import SensitiveDataScannerGroupType +from datadog_api_client.v2.model.sensitive_data_scanner_group_update import SensitiveDataScannerGroupUpdate +from datadog_api_client.v2.model.sensitive_data_scanner_group_update_request import SensitiveDataScannerGroupUpdateRequest +from datadog_api_client.v2.model.sensitive_data_scanner_group_update_response import SensitiveDataScannerGroupUpdateResponse +from datadog_api_client.v2.model.sensitive_data_scanner_included_keyword_configuration import SensitiveDataScannerIncludedKeywordConfiguration +from datadog_api_client.v2.model.sensitive_data_scanner_meta import SensitiveDataScannerMeta +from datadog_api_client.v2.model.sensitive_data_scanner_meta_version_only import SensitiveDataScannerMetaVersionOnly +from datadog_api_client.v2.model.sensitive_data_scanner_product import SensitiveDataScannerProduct +from datadog_api_client.v2.model.sensitive_data_scanner_reorder_config import SensitiveDataScannerReorderConfig +from datadog_api_client.v2.model.sensitive_data_scanner_reorder_groups_response import SensitiveDataScannerReorderGroupsResponse +from datadog_api_client.v2.model.sensitive_data_scanner_rule import SensitiveDataScannerRule +from datadog_api_client.v2.model.sensitive_data_scanner_rule_attributes import SensitiveDataScannerRuleAttributes +from datadog_api_client.v2.model.sensitive_data_scanner_rule_create import SensitiveDataScannerRuleCreate +from datadog_api_client.v2.model.sensitive_data_scanner_rule_create_request import SensitiveDataScannerRuleCreateRequest +from datadog_api_client.v2.model.sensitive_data_scanner_rule_data import SensitiveDataScannerRuleData +from datadog_api_client.v2.model.sensitive_data_scanner_rule_delete_request import SensitiveDataScannerRuleDeleteRequest +from datadog_api_client.v2.model.sensitive_data_scanner_rule_delete_response import SensitiveDataScannerRuleDeleteResponse +from datadog_api_client.v2.model.sensitive_data_scanner_rule_included_item import SensitiveDataScannerRuleIncludedItem +from datadog_api_client.v2.model.sensitive_data_scanner_rule_relationships import SensitiveDataScannerRuleRelationships +from datadog_api_client.v2.model.sensitive_data_scanner_rule_response import SensitiveDataScannerRuleResponse +from datadog_api_client.v2.model.sensitive_data_scanner_rule_type import SensitiveDataScannerRuleType +from datadog_api_client.v2.model.sensitive_data_scanner_rule_update import SensitiveDataScannerRuleUpdate +from datadog_api_client.v2.model.sensitive_data_scanner_rule_update_request import SensitiveDataScannerRuleUpdateRequest +from datadog_api_client.v2.model.sensitive_data_scanner_rule_update_response import SensitiveDataScannerRuleUpdateResponse +from datadog_api_client.v2.model.sensitive_data_scanner_samplings import SensitiveDataScannerSamplings +from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern import SensitiveDataScannerStandardPattern +from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_attributes import SensitiveDataScannerStandardPatternAttributes +from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_data import SensitiveDataScannerStandardPatternData +from datadog_api_client.v2.model.sensitive_data_scanner_standard_pattern_type import SensitiveDataScannerStandardPatternType +from datadog_api_client.v2.model.sensitive_data_scanner_standard_patterns_response import SensitiveDataScannerStandardPatternsResponse +from datadog_api_client.v2.model.sensitive_data_scanner_standard_patterns_response_data import SensitiveDataScannerStandardPatternsResponseData +from datadog_api_client.v2.model.sensitive_data_scanner_standard_patterns_response_item import SensitiveDataScannerStandardPatternsResponseItem +from datadog_api_client.v2.model.sensitive_data_scanner_suppressions import SensitiveDataScannerSuppressions +from datadog_api_client.v2.model.sensitive_data_scanner_text_replacement import SensitiveDataScannerTextReplacement +from datadog_api_client.v2.model.sensitive_data_scanner_text_replacement_type import SensitiveDataScannerTextReplacementType +from datadog_api_client.v2.model.service_access_token import ServiceAccessToken +from datadog_api_client.v2.model.service_access_token_attributes import ServiceAccessTokenAttributes +from datadog_api_client.v2.model.service_access_token_create_response import ServiceAccessTokenCreateResponse +from datadog_api_client.v2.model.service_access_token_relationships import ServiceAccessTokenRelationships +from datadog_api_client.v2.model.service_access_token_response import ServiceAccessTokenResponse +from datadog_api_client.v2.model.service_access_token_response_meta import ServiceAccessTokenResponseMeta +from datadog_api_client.v2.model.service_access_token_response_meta_page import ServiceAccessTokenResponseMetaPage +from datadog_api_client.v2.model.service_access_tokens_type import ServiceAccessTokensType +from datadog_api_client.v2.model.service_account_access_token_create_attributes import ServiceAccountAccessTokenCreateAttributes +from datadog_api_client.v2.model.service_account_access_token_create_data import ServiceAccountAccessTokenCreateData +from datadog_api_client.v2.model.service_account_access_token_create_request import ServiceAccountAccessTokenCreateRequest +from datadog_api_client.v2.model.service_account_access_token_update_attributes import ServiceAccountAccessTokenUpdateAttributes +from datadog_api_client.v2.model.service_account_access_token_update_data import ServiceAccountAccessTokenUpdateData +from datadog_api_client.v2.model.service_account_access_token_update_request import ServiceAccountAccessTokenUpdateRequest +from datadog_api_client.v2.model.service_account_create_attributes import ServiceAccountCreateAttributes +from datadog_api_client.v2.model.service_account_create_data import ServiceAccountCreateData +from datadog_api_client.v2.model.service_account_create_request import ServiceAccountCreateRequest +from datadog_api_client.v2.model.service_account_type import ServiceAccountType +from datadog_api_client.v2.model.service_definition_create_response import ServiceDefinitionCreateResponse +from datadog_api_client.v2.model.service_definition_data import ServiceDefinitionData +from datadog_api_client.v2.model.service_definition_data_attributes import ServiceDefinitionDataAttributes +from datadog_api_client.v2.model.service_definition_get_response import ServiceDefinitionGetResponse +from datadog_api_client.v2.model.service_definition_meta import ServiceDefinitionMeta +from datadog_api_client.v2.model.service_definition_meta_warnings import ServiceDefinitionMetaWarnings +from datadog_api_client.v2.model.service_definition_schema import ServiceDefinitionSchema +from datadog_api_client.v2.model.service_definition_schema_versions import ServiceDefinitionSchemaVersions +from datadog_api_client.v2.model.service_definition_v1 import ServiceDefinitionV1 +from datadog_api_client.v2.model.service_definition_v1_contact import ServiceDefinitionV1Contact +from datadog_api_client.v2.model.service_definition_v1_info import ServiceDefinitionV1Info +from datadog_api_client.v2.model.service_definition_v1_integrations import ServiceDefinitionV1Integrations +from datadog_api_client.v2.model.service_definition_v1_org import ServiceDefinitionV1Org +from datadog_api_client.v2.model.service_definition_v1_resource import ServiceDefinitionV1Resource +from datadog_api_client.v2.model.service_definition_v1_resource_type import ServiceDefinitionV1ResourceType +from datadog_api_client.v2.model.service_definition_v1_version import ServiceDefinitionV1Version +from datadog_api_client.v2.model.service_definition_v2 import ServiceDefinitionV2 +from datadog_api_client.v2.model.service_definition_v2_contact import ServiceDefinitionV2Contact +from datadog_api_client.v2.model.service_definition_v2_doc import ServiceDefinitionV2Doc +from datadog_api_client.v2.model.service_definition_v2_dot1 import ServiceDefinitionV2Dot1 +from datadog_api_client.v2.model.service_definition_v2_dot1_contact import ServiceDefinitionV2Dot1Contact +from datadog_api_client.v2.model.service_definition_v2_dot1_email import ServiceDefinitionV2Dot1Email +from datadog_api_client.v2.model.service_definition_v2_dot1_email_type import ServiceDefinitionV2Dot1EmailType +from datadog_api_client.v2.model.service_definition_v2_dot1_integrations import ServiceDefinitionV2Dot1Integrations +from datadog_api_client.v2.model.service_definition_v2_dot1_link import ServiceDefinitionV2Dot1Link +from datadog_api_client.v2.model.service_definition_v2_dot1_link_type import ServiceDefinitionV2Dot1LinkType +from datadog_api_client.v2.model.service_definition_v2_dot1_ms_teams import ServiceDefinitionV2Dot1MSTeams +from datadog_api_client.v2.model.service_definition_v2_dot1_ms_teams_type import ServiceDefinitionV2Dot1MSTeamsType +from datadog_api_client.v2.model.service_definition_v2_dot1_opsgenie import ServiceDefinitionV2Dot1Opsgenie +from datadog_api_client.v2.model.service_definition_v2_dot1_opsgenie_region import ServiceDefinitionV2Dot1OpsgenieRegion +from datadog_api_client.v2.model.service_definition_v2_dot1_pagerduty import ServiceDefinitionV2Dot1Pagerduty +from datadog_api_client.v2.model.service_definition_v2_dot1_slack import ServiceDefinitionV2Dot1Slack +from datadog_api_client.v2.model.service_definition_v2_dot1_slack_type import ServiceDefinitionV2Dot1SlackType +from datadog_api_client.v2.model.service_definition_v2_dot1_version import ServiceDefinitionV2Dot1Version +from datadog_api_client.v2.model.service_definition_v2_dot2 import ServiceDefinitionV2Dot2 +from datadog_api_client.v2.model.service_definition_v2_dot2_contact import ServiceDefinitionV2Dot2Contact +from datadog_api_client.v2.model.service_definition_v2_dot2_integrations import ServiceDefinitionV2Dot2Integrations +from datadog_api_client.v2.model.service_definition_v2_dot2_link import ServiceDefinitionV2Dot2Link +from datadog_api_client.v2.model.service_definition_v2_dot2_opsgenie import ServiceDefinitionV2Dot2Opsgenie +from datadog_api_client.v2.model.service_definition_v2_dot2_opsgenie_region import ServiceDefinitionV2Dot2OpsgenieRegion +from datadog_api_client.v2.model.service_definition_v2_dot2_pagerduty import ServiceDefinitionV2Dot2Pagerduty +from datadog_api_client.v2.model.service_definition_v2_dot2_version import ServiceDefinitionV2Dot2Version +from datadog_api_client.v2.model.service_definition_v2_email import ServiceDefinitionV2Email +from datadog_api_client.v2.model.service_definition_v2_email_type import ServiceDefinitionV2EmailType +from datadog_api_client.v2.model.service_definition_v2_integrations import ServiceDefinitionV2Integrations +from datadog_api_client.v2.model.service_definition_v2_link import ServiceDefinitionV2Link +from datadog_api_client.v2.model.service_definition_v2_link_type import ServiceDefinitionV2LinkType +from datadog_api_client.v2.model.service_definition_v2_ms_teams import ServiceDefinitionV2MSTeams +from datadog_api_client.v2.model.service_definition_v2_ms_teams_type import ServiceDefinitionV2MSTeamsType +from datadog_api_client.v2.model.service_definition_v2_opsgenie import ServiceDefinitionV2Opsgenie +from datadog_api_client.v2.model.service_definition_v2_opsgenie_region import ServiceDefinitionV2OpsgenieRegion +from datadog_api_client.v2.model.service_definition_v2_repo import ServiceDefinitionV2Repo +from datadog_api_client.v2.model.service_definition_v2_slack import ServiceDefinitionV2Slack +from datadog_api_client.v2.model.service_definition_v2_slack_type import ServiceDefinitionV2SlackType +from datadog_api_client.v2.model.service_definition_v2_version import ServiceDefinitionV2Version +from datadog_api_client.v2.model.service_definitions_create_request import ServiceDefinitionsCreateRequest +from datadog_api_client.v2.model.service_definitions_list_response import ServiceDefinitionsListResponse +from datadog_api_client.v2.model.service_list import ServiceList +from datadog_api_client.v2.model.service_list_data import ServiceListData +from datadog_api_client.v2.model.service_list_data_attributes import ServiceListDataAttributes +from datadog_api_client.v2.model.service_list_data_attributes_metadata_items import ServiceListDataAttributesMetadataItems +from datadog_api_client.v2.model.service_list_data_type import ServiceListDataType +from datadog_api_client.v2.model.service_now_assignment_group_attributes import ServiceNowAssignmentGroupAttributes +from datadog_api_client.v2.model.service_now_assignment_group_data import ServiceNowAssignmentGroupData +from datadog_api_client.v2.model.service_now_assignment_group_type import ServiceNowAssignmentGroupType +from datadog_api_client.v2.model.service_now_assignment_groups_response import ServiceNowAssignmentGroupsResponse +from datadog_api_client.v2.model.service_now_basic_auth import ServiceNowBasicAuth +from datadog_api_client.v2.model.service_now_basic_auth_type import ServiceNowBasicAuthType +from datadog_api_client.v2.model.service_now_basic_auth_update import ServiceNowBasicAuthUpdate +from datadog_api_client.v2.model.service_now_business_service_attributes import ServiceNowBusinessServiceAttributes +from datadog_api_client.v2.model.service_now_business_service_data import ServiceNowBusinessServiceData +from datadog_api_client.v2.model.service_now_business_service_type import ServiceNowBusinessServiceType +from datadog_api_client.v2.model.service_now_business_services_response import ServiceNowBusinessServicesResponse +from datadog_api_client.v2.model.service_now_credentials import ServiceNowCredentials +from datadog_api_client.v2.model.service_now_credentials_update import ServiceNowCredentialsUpdate +from datadog_api_client.v2.model.service_now_instance_attributes import ServiceNowInstanceAttributes +from datadog_api_client.v2.model.service_now_instance_data import ServiceNowInstanceData +from datadog_api_client.v2.model.service_now_instance_type import ServiceNowInstanceType +from datadog_api_client.v2.model.service_now_instances_response import ServiceNowInstancesResponse +from datadog_api_client.v2.model.service_now_integration import ServiceNowIntegration +from datadog_api_client.v2.model.service_now_integration_type import ServiceNowIntegrationType +from datadog_api_client.v2.model.service_now_integration_update import ServiceNowIntegrationUpdate +from datadog_api_client.v2.model.service_now_template_attributes import ServiceNowTemplateAttributes +from datadog_api_client.v2.model.service_now_template_create_request import ServiceNowTemplateCreateRequest +from datadog_api_client.v2.model.service_now_template_create_request_attributes import ServiceNowTemplateCreateRequestAttributes +from datadog_api_client.v2.model.service_now_template_create_request_data import ServiceNowTemplateCreateRequestData +from datadog_api_client.v2.model.service_now_template_data import ServiceNowTemplateData +from datadog_api_client.v2.model.service_now_template_response import ServiceNowTemplateResponse +from datadog_api_client.v2.model.service_now_template_type import ServiceNowTemplateType +from datadog_api_client.v2.model.service_now_template_update_request import ServiceNowTemplateUpdateRequest +from datadog_api_client.v2.model.service_now_template_update_request_attributes import ServiceNowTemplateUpdateRequestAttributes +from datadog_api_client.v2.model.service_now_template_update_request_data import ServiceNowTemplateUpdateRequestData +from datadog_api_client.v2.model.service_now_templates_response import ServiceNowTemplatesResponse +from datadog_api_client.v2.model.service_now_ticket import ServiceNowTicket +from datadog_api_client.v2.model.service_now_ticket_create_attributes import ServiceNowTicketCreateAttributes +from datadog_api_client.v2.model.service_now_ticket_create_data import ServiceNowTicketCreateData +from datadog_api_client.v2.model.service_now_ticket_create_request import ServiceNowTicketCreateRequest +from datadog_api_client.v2.model.service_now_ticket_resource_type import ServiceNowTicketResourceType +from datadog_api_client.v2.model.service_now_ticket_result import ServiceNowTicketResult +from datadog_api_client.v2.model.service_now_tickets_data_type import ServiceNowTicketsDataType +from datadog_api_client.v2.model.service_now_user_attributes import ServiceNowUserAttributes +from datadog_api_client.v2.model.service_now_user_data import ServiceNowUserData +from datadog_api_client.v2.model.service_now_user_type import ServiceNowUserType +from datadog_api_client.v2.model.service_now_users_response import ServiceNowUsersResponse +from datadog_api_client.v2.model.service_repository_info_data_type import ServiceRepositoryInfoDataType +from datadog_api_client.v2.model.service_repository_info_request import ServiceRepositoryInfoRequest +from datadog_api_client.v2.model.service_repository_info_request_attributes import ServiceRepositoryInfoRequestAttributes +from datadog_api_client.v2.model.service_repository_info_request_data import ServiceRepositoryInfoRequestData +from datadog_api_client.v2.model.service_repository_info_response import ServiceRepositoryInfoResponse +from datadog_api_client.v2.model.service_repository_info_response_attributes import ServiceRepositoryInfoResponseAttributes +from datadog_api_client.v2.model.service_repository_info_response_data import ServiceRepositoryInfoResponseData +from datadog_api_client.v2.model.service_repository_info_status import ServiceRepositoryInfoStatus +from datadog_api_client.v2.model.session_id_array import SessionIdArray +from datadog_api_client.v2.model.session_id_data import SessionIdData +from datadog_api_client.v2.model.shared_dashboard_global_time import SharedDashboardGlobalTime +from datadog_api_client.v2.model.shared_dashboard_included import SharedDashboardIncluded +from datadog_api_client.v2.model.shared_dashboard_included_dashboard import SharedDashboardIncludedDashboard +from datadog_api_client.v2.model.shared_dashboard_included_dashboard_attributes import SharedDashboardIncludedDashboardAttributes +from datadog_api_client.v2.model.shared_dashboard_included_dashboard_type import SharedDashboardIncludedDashboardType +from datadog_api_client.v2.model.shared_dashboard_included_user import SharedDashboardIncludedUser +from datadog_api_client.v2.model.shared_dashboard_included_user_attributes import SharedDashboardIncludedUserAttributes +from datadog_api_client.v2.model.shared_dashboard_invitee import SharedDashboardInvitee +from datadog_api_client.v2.model.shared_dashboard_relationship_dashboard import SharedDashboardRelationshipDashboard +from datadog_api_client.v2.model.shared_dashboard_relationship_dashboard_data import SharedDashboardRelationshipDashboardData +from datadog_api_client.v2.model.shared_dashboard_relationship_sharer import SharedDashboardRelationshipSharer +from datadog_api_client.v2.model.shared_dashboard_relationships import SharedDashboardRelationships +from datadog_api_client.v2.model.shared_dashboard_response import SharedDashboardResponse +from datadog_api_client.v2.model.shared_dashboard_response_attributes import SharedDashboardResponseAttributes +from datadog_api_client.v2.model.shared_dashboard_selectable_template_variable import SharedDashboardSelectableTemplateVariable +from datadog_api_client.v2.model.shared_dashboard_share_type import SharedDashboardShareType +from datadog_api_client.v2.model.shared_dashboard_status import SharedDashboardStatus +from datadog_api_client.v2.model.shared_dashboard_type import SharedDashboardType +from datadog_api_client.v2.model.shared_dashboard_viewing_preferences import SharedDashboardViewingPreferences +from datadog_api_client.v2.model.shared_dashboard_viewing_preferences_theme import SharedDashboardViewingPreferencesTheme +from datadog_api_client.v2.model.shift import Shift +from datadog_api_client.v2.model.shift_data import ShiftData +from datadog_api_client.v2.model.shift_data_attributes import ShiftDataAttributes +from datadog_api_client.v2.model.shift_data_relationships import ShiftDataRelationships +from datadog_api_client.v2.model.shift_data_relationships_user import ShiftDataRelationshipsUser +from datadog_api_client.v2.model.shift_data_relationships_user_data import ShiftDataRelationshipsUserData +from datadog_api_client.v2.model.shift_data_relationships_user_data_type import ShiftDataRelationshipsUserDataType +from datadog_api_client.v2.model.shift_data_type import ShiftDataType +from datadog_api_client.v2.model.shift_included import ShiftIncluded +from datadog_api_client.v2.model.signal_entities_attributes import SignalEntitiesAttributes +from datadog_api_client.v2.model.signal_entities_data import SignalEntitiesData +from datadog_api_client.v2.model.signal_entities_response import SignalEntitiesResponse +from datadog_api_client.v2.model.signal_entities_type import SignalEntitiesType +from datadog_api_client.v2.model.signal_entity_identity import SignalEntityIdentity +from datadog_api_client.v2.model.signals_problems_detections import SignalsProblemsDetections +from datadog_api_client.v2.model.signals_problems_sample_metadata import SignalsProblemsSampleMetadata +from datadog_api_client.v2.model.simple_monitor_user_template import SimpleMonitorUserTemplate +from datadog_api_client.v2.model.single_aggregated_connection_response_array import SingleAggregatedConnectionResponseArray +from datadog_api_client.v2.model.single_aggregated_connection_response_data import SingleAggregatedConnectionResponseData +from datadog_api_client.v2.model.single_aggregated_connection_response_data_attributes import SingleAggregatedConnectionResponseDataAttributes +from datadog_api_client.v2.model.single_aggregated_connection_response_data_type import SingleAggregatedConnectionResponseDataType +from datadog_api_client.v2.model.single_aggregated_dns_response_array import SingleAggregatedDnsResponseArray +from datadog_api_client.v2.model.single_aggregated_dns_response_data import SingleAggregatedDnsResponseData +from datadog_api_client.v2.model.single_aggregated_dns_response_data_attributes import SingleAggregatedDnsResponseDataAttributes +from datadog_api_client.v2.model.single_aggregated_dns_response_data_attributes_group_by_items import SingleAggregatedDnsResponseDataAttributesGroupByItems +from datadog_api_client.v2.model.single_aggregated_dns_response_data_attributes_metrics_items import SingleAggregatedDnsResponseDataAttributesMetricsItems +from datadog_api_client.v2.model.single_aggregated_dns_response_data_type import SingleAggregatedDnsResponseDataType +from datadog_api_client.v2.model.single_entity_context_response import SingleEntityContextResponse +from datadog_api_client.v2.model.slack_integration_metadata import SlackIntegrationMetadata +from datadog_api_client.v2.model.slack_integration_metadata_channel_item import SlackIntegrationMetadataChannelItem +from datadog_api_client.v2.model.slack_trigger_wrapper import SlackTriggerWrapper +from datadog_api_client.v2.model.slack_user_binding_data import SlackUserBindingData +from datadog_api_client.v2.model.slack_user_binding_type import SlackUserBindingType +from datadog_api_client.v2.model.slack_user_bindings_response import SlackUserBindingsResponse +from datadog_api_client.v2.model.slo_data_source import SloDataSource +from datadog_api_client.v2.model.slo_query import SloQuery +from datadog_api_client.v2.model.slo_report_create_request import SloReportCreateRequest +from datadog_api_client.v2.model.slo_report_create_request_attributes import SloReportCreateRequestAttributes +from datadog_api_client.v2.model.slo_report_create_request_data import SloReportCreateRequestData +from datadog_api_client.v2.model.slo_status_data import SloStatusData +from datadog_api_client.v2.model.slo_status_data_attributes import SloStatusDataAttributes +from datadog_api_client.v2.model.slo_status_response import SloStatusResponse +from datadog_api_client.v2.model.slo_status_type import SloStatusType +from datadog_api_client.v2.model.slos_group_mode import SlosGroupMode +from datadog_api_client.v2.model.slos_measure import SlosMeasure +from datadog_api_client.v2.model.slos_query_type import SlosQueryType +from datadog_api_client.v2.model.snapshot import Snapshot +from datadog_api_client.v2.model.snapshot_array import SnapshotArray +from datadog_api_client.v2.model.snapshot_create_request import SnapshotCreateRequest +from datadog_api_client.v2.model.snapshot_create_request_data import SnapshotCreateRequestData +from datadog_api_client.v2.model.snapshot_create_request_data_attributes import SnapshotCreateRequestDataAttributes +from datadog_api_client.v2.model.snapshot_data import SnapshotData +from datadog_api_client.v2.model.snapshot_data_attributes import SnapshotDataAttributes +from datadog_api_client.v2.model.snapshot_update_request import SnapshotUpdateRequest +from datadog_api_client.v2.model.snapshot_update_request_data import SnapshotUpdateRequestData +from datadog_api_client.v2.model.snapshot_update_request_data_attributes import SnapshotUpdateRequestDataAttributes +from datadog_api_client.v2.model.snapshot_update_request_data_type import SnapshotUpdateRequestDataType +from datadog_api_client.v2.model.software_catalog_trigger_wrapper import SoftwareCatalogTriggerWrapper +from datadog_api_client.v2.model.sort_direction import SortDirection +from datadog_api_client.v2.model.sourcemap_data_type import SourcemapDataType +from datadog_api_client.v2.model.sourcemap_file_attributes import SourcemapFileAttributes +from datadog_api_client.v2.model.sourcemap_file_data import SourcemapFileData +from datadog_api_client.v2.model.sourcemap_file_data_type import SourcemapFileDataType +from datadog_api_client.v2.model.sourcemap_file_response import SourcemapFileResponse +from datadog_api_client.v2.model.sourcemap_item import SourcemapItem +from datadog_api_client.v2.model.sourcemap_map_kind import SourcemapMapKind +from datadog_api_client.v2.model.sourcemaps_list_meta import SourcemapsListMeta +from datadog_api_client.v2.model.sourcemaps_list_meta_page import SourcemapsListMetaPage +from datadog_api_client.v2.model.sourcemaps_response import SourcemapsResponse +from datadog_api_client.v2.model.span import Span +from datadog_api_client.v2.model.spans_aggregate_bucket import SpansAggregateBucket +from datadog_api_client.v2.model.spans_aggregate_bucket_attributes import SpansAggregateBucketAttributes +from datadog_api_client.v2.model.spans_aggregate_bucket_type import SpansAggregateBucketType +from datadog_api_client.v2.model.spans_aggregate_bucket_value import SpansAggregateBucketValue +from datadog_api_client.v2.model.spans_aggregate_bucket_value_timeseries_point import SpansAggregateBucketValueTimeseriesPoint +from datadog_api_client.v2.model.spans_aggregate_data import SpansAggregateData +from datadog_api_client.v2.model.spans_aggregate_request import SpansAggregateRequest +from datadog_api_client.v2.model.spans_aggregate_request_attributes import SpansAggregateRequestAttributes +from datadog_api_client.v2.model.spans_aggregate_request_type import SpansAggregateRequestType +from datadog_api_client.v2.model.spans_aggregate_response import SpansAggregateResponse +from datadog_api_client.v2.model.spans_aggregate_response_metadata import SpansAggregateResponseMetadata +from datadog_api_client.v2.model.spans_aggregate_response_status import SpansAggregateResponseStatus +from datadog_api_client.v2.model.spans_aggregate_sort import SpansAggregateSort +from datadog_api_client.v2.model.spans_aggregate_sort_type import SpansAggregateSortType +from datadog_api_client.v2.model.spans_aggregation_function import SpansAggregationFunction +from datadog_api_client.v2.model.spans_attributes import SpansAttributes +from datadog_api_client.v2.model.spans_compute import SpansCompute +from datadog_api_client.v2.model.spans_compute_type import SpansComputeType +from datadog_api_client.v2.model.spans_filter import SpansFilter +from datadog_api_client.v2.model.spans_filter_create import SpansFilterCreate +from datadog_api_client.v2.model.spans_group_by import SpansGroupBy +from datadog_api_client.v2.model.spans_group_by_histogram import SpansGroupByHistogram +from datadog_api_client.v2.model.spans_group_by_missing import SpansGroupByMissing +from datadog_api_client.v2.model.spans_group_by_total import SpansGroupByTotal +from datadog_api_client.v2.model.spans_list_request import SpansListRequest +from datadog_api_client.v2.model.spans_list_request_attributes import SpansListRequestAttributes +from datadog_api_client.v2.model.spans_list_request_data import SpansListRequestData +from datadog_api_client.v2.model.spans_list_request_page import SpansListRequestPage +from datadog_api_client.v2.model.spans_list_request_type import SpansListRequestType +from datadog_api_client.v2.model.spans_list_response import SpansListResponse +from datadog_api_client.v2.model.spans_list_response_links import SpansListResponseLinks +from datadog_api_client.v2.model.spans_list_response_metadata import SpansListResponseMetadata +from datadog_api_client.v2.model.spans_metric_compute import SpansMetricCompute +from datadog_api_client.v2.model.spans_metric_compute_aggregation_type import SpansMetricComputeAggregationType +from datadog_api_client.v2.model.spans_metric_create_attributes import SpansMetricCreateAttributes +from datadog_api_client.v2.model.spans_metric_create_data import SpansMetricCreateData +from datadog_api_client.v2.model.spans_metric_create_request import SpansMetricCreateRequest +from datadog_api_client.v2.model.spans_metric_filter import SpansMetricFilter +from datadog_api_client.v2.model.spans_metric_group_by import SpansMetricGroupBy +from datadog_api_client.v2.model.spans_metric_response import SpansMetricResponse +from datadog_api_client.v2.model.spans_metric_response_attributes import SpansMetricResponseAttributes +from datadog_api_client.v2.model.spans_metric_response_compute import SpansMetricResponseCompute +from datadog_api_client.v2.model.spans_metric_response_data import SpansMetricResponseData +from datadog_api_client.v2.model.spans_metric_response_filter import SpansMetricResponseFilter +from datadog_api_client.v2.model.spans_metric_response_group_by import SpansMetricResponseGroupBy +from datadog_api_client.v2.model.spans_metric_type import SpansMetricType +from datadog_api_client.v2.model.spans_metric_update_attributes import SpansMetricUpdateAttributes +from datadog_api_client.v2.model.spans_metric_update_compute import SpansMetricUpdateCompute +from datadog_api_client.v2.model.spans_metric_update_data import SpansMetricUpdateData +from datadog_api_client.v2.model.spans_metric_update_request import SpansMetricUpdateRequest +from datadog_api_client.v2.model.spans_metrics_response import SpansMetricsResponse +from datadog_api_client.v2.model.spans_query_filter import SpansQueryFilter +from datadog_api_client.v2.model.spans_query_options import SpansQueryOptions +from datadog_api_client.v2.model.spans_response_metadata_page import SpansResponseMetadataPage +from datadog_api_client.v2.model.spans_sort import SpansSort +from datadog_api_client.v2.model.spans_sort_order import SpansSortOrder +from datadog_api_client.v2.model.spans_type import SpansType +from datadog_api_client.v2.model.spans_warning import SpansWarning +from datadog_api_client.v2.model.spec import Spec +from datadog_api_client.v2.model.spec_version import SpecVersion +from datadog_api_client.v2.model.split_api_key import SplitAPIKey +from datadog_api_client.v2.model.split_api_key_type import SplitAPIKeyType +from datadog_api_client.v2.model.split_api_key_update import SplitAPIKeyUpdate +from datadog_api_client.v2.model.split_credentials import SplitCredentials +from datadog_api_client.v2.model.split_credentials_update import SplitCredentialsUpdate +from datadog_api_client.v2.model.split_integration import SplitIntegration +from datadog_api_client.v2.model.split_integration_type import SplitIntegrationType +from datadog_api_client.v2.model.split_integration_update import SplitIntegrationUpdate +from datadog_api_client.v2.model.state import State +from datadog_api_client.v2.model.state_variable import StateVariable +from datadog_api_client.v2.model.state_variable_properties import StateVariableProperties +from datadog_api_client.v2.model.state_variable_type import StateVariableType +from datadog_api_client.v2.model.statsig_api_key import StatsigAPIKey +from datadog_api_client.v2.model.statsig_api_key_type import StatsigAPIKeyType +from datadog_api_client.v2.model.statsig_api_key_update import StatsigAPIKeyUpdate +from datadog_api_client.v2.model.statsig_credentials import StatsigCredentials +from datadog_api_client.v2.model.statsig_credentials_update import StatsigCredentialsUpdate +from datadog_api_client.v2.model.statsig_integration import StatsigIntegration +from datadog_api_client.v2.model.statsig_integration_type import StatsigIntegrationType +from datadog_api_client.v2.model.statsig_integration_update import StatsigIntegrationUpdate +from datadog_api_client.v2.model.status_page import StatusPage +from datadog_api_client.v2.model.status_page_array import StatusPageArray +from datadog_api_client.v2.model.status_page_array_included import StatusPageArrayIncluded +from datadog_api_client.v2.model.status_page_as_included import StatusPageAsIncluded +from datadog_api_client.v2.model.status_page_as_included_attributes import StatusPageAsIncludedAttributes +from datadog_api_client.v2.model.status_page_as_included_attributes_components_items import StatusPageAsIncludedAttributesComponentsItems +from datadog_api_client.v2.model.status_page_as_included_attributes_components_items_components_items import StatusPageAsIncludedAttributesComponentsItemsComponentsItems +from datadog_api_client.v2.model.status_page_as_included_relationships import StatusPageAsIncludedRelationships +from datadog_api_client.v2.model.status_page_as_included_relationships_created_by_user import StatusPageAsIncludedRelationshipsCreatedByUser +from datadog_api_client.v2.model.status_page_as_included_relationships_created_by_user_data import StatusPageAsIncludedRelationshipsCreatedByUserData +from datadog_api_client.v2.model.status_page_as_included_relationships_last_modified_by_user import StatusPageAsIncludedRelationshipsLastModifiedByUser +from datadog_api_client.v2.model.status_page_as_included_relationships_last_modified_by_user_data import StatusPageAsIncludedRelationshipsLastModifiedByUserData +from datadog_api_client.v2.model.status_page_data import StatusPageData +from datadog_api_client.v2.model.status_page_data_attributes import StatusPageDataAttributes +from datadog_api_client.v2.model.status_page_data_attributes_components_items import StatusPageDataAttributesComponentsItems +from datadog_api_client.v2.model.status_page_data_attributes_components_items_components_items import StatusPageDataAttributesComponentsItemsComponentsItems +from datadog_api_client.v2.model.status_page_data_relationships import StatusPageDataRelationships +from datadog_api_client.v2.model.status_page_data_relationships_created_by_user import StatusPageDataRelationshipsCreatedByUser +from datadog_api_client.v2.model.status_page_data_relationships_created_by_user_data import StatusPageDataRelationshipsCreatedByUserData +from datadog_api_client.v2.model.status_page_data_relationships_last_modified_by_user import StatusPageDataRelationshipsLastModifiedByUser +from datadog_api_client.v2.model.status_page_data_relationships_last_modified_by_user_data import StatusPageDataRelationshipsLastModifiedByUserData +from datadog_api_client.v2.model.status_page_data_type import StatusPageDataType +from datadog_api_client.v2.model.status_pages_component import StatusPagesComponent +from datadog_api_client.v2.model.status_pages_component_array import StatusPagesComponentArray +from datadog_api_client.v2.model.status_pages_component_array_included import StatusPagesComponentArrayIncluded +from datadog_api_client.v2.model.status_pages_component_data import StatusPagesComponentData +from datadog_api_client.v2.model.status_pages_component_data_attributes import StatusPagesComponentDataAttributes +from datadog_api_client.v2.model.status_pages_component_data_attributes_components_items import StatusPagesComponentDataAttributesComponentsItems +from datadog_api_client.v2.model.status_pages_component_data_attributes_status import StatusPagesComponentDataAttributesStatus +from datadog_api_client.v2.model.status_pages_component_data_relationships import StatusPagesComponentDataRelationships +from datadog_api_client.v2.model.status_pages_component_data_relationships_created_by_user import StatusPagesComponentDataRelationshipsCreatedByUser +from datadog_api_client.v2.model.status_pages_component_data_relationships_created_by_user_data import StatusPagesComponentDataRelationshipsCreatedByUserData +from datadog_api_client.v2.model.status_pages_component_data_relationships_group import StatusPagesComponentDataRelationshipsGroup +from datadog_api_client.v2.model.status_pages_component_data_relationships_group_data import StatusPagesComponentDataRelationshipsGroupData +from datadog_api_client.v2.model.status_pages_component_data_relationships_last_modified_by_user import StatusPagesComponentDataRelationshipsLastModifiedByUser +from datadog_api_client.v2.model.status_pages_component_data_relationships_last_modified_by_user_data import StatusPagesComponentDataRelationshipsLastModifiedByUserData +from datadog_api_client.v2.model.status_pages_component_data_relationships_status_page import StatusPagesComponentDataRelationshipsStatusPage +from datadog_api_client.v2.model.status_pages_component_data_relationships_status_page_data import StatusPagesComponentDataRelationshipsStatusPageData +from datadog_api_client.v2.model.status_pages_component_group import StatusPagesComponentGroup +from datadog_api_client.v2.model.status_pages_component_group_attributes import StatusPagesComponentGroupAttributes +from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items import StatusPagesComponentGroupAttributesComponentsItems +from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_status import StatusPagesComponentGroupAttributesComponentsItemsStatus +from datadog_api_client.v2.model.status_pages_component_group_attributes_components_items_type import StatusPagesComponentGroupAttributesComponentsItemsType +from datadog_api_client.v2.model.status_pages_component_group_relationships import StatusPagesComponentGroupRelationships +from datadog_api_client.v2.model.status_pages_component_group_relationships_created_by_user import StatusPagesComponentGroupRelationshipsCreatedByUser +from datadog_api_client.v2.model.status_pages_component_group_relationships_created_by_user_data import StatusPagesComponentGroupRelationshipsCreatedByUserData +from datadog_api_client.v2.model.status_pages_component_group_relationships_group import StatusPagesComponentGroupRelationshipsGroup +from datadog_api_client.v2.model.status_pages_component_group_relationships_group_data import StatusPagesComponentGroupRelationshipsGroupData +from datadog_api_client.v2.model.status_pages_component_group_relationships_last_modified_by_user import StatusPagesComponentGroupRelationshipsLastModifiedByUser +from datadog_api_client.v2.model.status_pages_component_group_relationships_last_modified_by_user_data import StatusPagesComponentGroupRelationshipsLastModifiedByUserData +from datadog_api_client.v2.model.status_pages_component_group_relationships_status_page import StatusPagesComponentGroupRelationshipsStatusPage +from datadog_api_client.v2.model.status_pages_component_group_relationships_status_page_data import StatusPagesComponentGroupRelationshipsStatusPageData +from datadog_api_client.v2.model.status_pages_component_group_type import StatusPagesComponentGroupType +from datadog_api_client.v2.model.status_pages_user import StatusPagesUser +from datadog_api_client.v2.model.status_pages_user_attributes import StatusPagesUserAttributes +from datadog_api_client.v2.model.status_pages_user_type import StatusPagesUserType +from datadog_api_client.v2.model.statuspage_account_create_attributes import StatuspageAccountCreateAttributes +from datadog_api_client.v2.model.statuspage_account_create_data import StatuspageAccountCreateData +from datadog_api_client.v2.model.statuspage_account_create_request import StatuspageAccountCreateRequest +from datadog_api_client.v2.model.statuspage_account_response import StatuspageAccountResponse +from datadog_api_client.v2.model.statuspage_account_response_attributes import StatuspageAccountResponseAttributes +from datadog_api_client.v2.model.statuspage_account_response_data import StatuspageAccountResponseData +from datadog_api_client.v2.model.statuspage_account_type import StatuspageAccountType +from datadog_api_client.v2.model.statuspage_account_update_attributes import StatuspageAccountUpdateAttributes +from datadog_api_client.v2.model.statuspage_account_update_data import StatuspageAccountUpdateData +from datadog_api_client.v2.model.statuspage_account_update_request import StatuspageAccountUpdateRequest +from datadog_api_client.v2.model.statuspage_url_setting_create_attributes import StatuspageUrlSettingCreateAttributes +from datadog_api_client.v2.model.statuspage_url_setting_create_data import StatuspageUrlSettingCreateData +from datadog_api_client.v2.model.statuspage_url_setting_create_request import StatuspageUrlSettingCreateRequest +from datadog_api_client.v2.model.statuspage_url_setting_response import StatuspageUrlSettingResponse +from datadog_api_client.v2.model.statuspage_url_setting_response_attributes import StatuspageUrlSettingResponseAttributes +from datadog_api_client.v2.model.statuspage_url_setting_response_data import StatuspageUrlSettingResponseData +from datadog_api_client.v2.model.statuspage_url_setting_type import StatuspageUrlSettingType +from datadog_api_client.v2.model.statuspage_url_setting_update_attributes import StatuspageUrlSettingUpdateAttributes +from datadog_api_client.v2.model.statuspage_url_setting_update_data import StatuspageUrlSettingUpdateData +from datadog_api_client.v2.model.statuspage_url_setting_update_request import StatuspageUrlSettingUpdateRequest +from datadog_api_client.v2.model.statuspage_url_settings_response import StatuspageUrlSettingsResponse +from datadog_api_client.v2.model.stegadography_get_widgets_request import StegadographyGetWidgetsRequest +from datadog_api_client.v2.model.stegadography_get_widgets_response import StegadographyGetWidgetsResponse +from datadog_api_client.v2.model.stegadography_widget import StegadographyWidget +from datadog_api_client.v2.model.stegadography_widget_attributes import StegadographyWidgetAttributes +from datadog_api_client.v2.model.stegadography_widget_type import StegadographyWidgetType +from datadog_api_client.v2.model.step import Step +from datadog_api_client.v2.model.step_display import StepDisplay +from datadog_api_client.v2.model.step_display_bounds import StepDisplayBounds +from datadog_api_client.v2.model.suite_create_edit import SuiteCreateEdit +from datadog_api_client.v2.model.suite_create_edit_request import SuiteCreateEditRequest +from datadog_api_client.v2.model.suite_json_patch_request import SuiteJsonPatchRequest +from datadog_api_client.v2.model.suite_json_patch_request_data import SuiteJsonPatchRequestData +from datadog_api_client.v2.model.suite_json_patch_request_data_attributes import SuiteJsonPatchRequestDataAttributes +from datadog_api_client.v2.model.suite_json_patch_type import SuiteJsonPatchType +from datadog_api_client.v2.model.suite_search_response_type import SuiteSearchResponseType +from datadog_api_client.v2.model.summarized_span import SummarizedSpan +from datadog_api_client.v2.model.summarized_trace import SummarizedTrace +from datadog_api_client.v2.model.suppression_version_history import SuppressionVersionHistory +from datadog_api_client.v2.model.suppression_versions import SuppressionVersions +from datadog_api_client.v2.model.sync_property import SyncProperty +from datadog_api_client.v2.model.sync_property_with_mapping import SyncPropertyWithMapping +from datadog_api_client.v2.model.synthetics_api_multistep_parent_test_attributes import SyntheticsApiMultistepParentTestAttributes +from datadog_api_client.v2.model.synthetics_api_multistep_parent_test_data import SyntheticsApiMultistepParentTestData +from datadog_api_client.v2.model.synthetics_api_multistep_parent_test_type import SyntheticsApiMultistepParentTestType +from datadog_api_client.v2.model.synthetics_api_multistep_parent_tests_response import SyntheticsApiMultistepParentTestsResponse +from datadog_api_client.v2.model.synthetics_api_multistep_subtest_attributes import SyntheticsApiMultistepSubtestAttributes +from datadog_api_client.v2.model.synthetics_api_multistep_subtest_data import SyntheticsApiMultistepSubtestData +from datadog_api_client.v2.model.synthetics_api_multistep_subtest_type import SyntheticsApiMultistepSubtestType +from datadog_api_client.v2.model.synthetics_api_multistep_subtests_response import SyntheticsApiMultistepSubtestsResponse +from datadog_api_client.v2.model.synthetics_downtime_data import SyntheticsDowntimeData +from datadog_api_client.v2.model.synthetics_downtime_data_attributes_request import SyntheticsDowntimeDataAttributesRequest +from datadog_api_client.v2.model.synthetics_downtime_data_attributes_response import SyntheticsDowntimeDataAttributesResponse +from datadog_api_client.v2.model.synthetics_downtime_data_request import SyntheticsDowntimeDataRequest +from datadog_api_client.v2.model.synthetics_downtime_frequency import SyntheticsDowntimeFrequency +from datadog_api_client.v2.model.synthetics_downtime_request import SyntheticsDowntimeRequest +from datadog_api_client.v2.model.synthetics_downtime_resource_type import SyntheticsDowntimeResourceType +from datadog_api_client.v2.model.synthetics_downtime_response import SyntheticsDowntimeResponse +from datadog_api_client.v2.model.synthetics_downtime_time_slot_date import SyntheticsDowntimeTimeSlotDate +from datadog_api_client.v2.model.synthetics_downtime_time_slot_recurrence_request import SyntheticsDowntimeTimeSlotRecurrenceRequest +from datadog_api_client.v2.model.synthetics_downtime_time_slot_recurrence_response import SyntheticsDowntimeTimeSlotRecurrenceResponse +from datadog_api_client.v2.model.synthetics_downtime_time_slot_request import SyntheticsDowntimeTimeSlotRequest +from datadog_api_client.v2.model.synthetics_downtime_time_slot_response import SyntheticsDowntimeTimeSlotResponse +from datadog_api_client.v2.model.synthetics_downtime_weekday import SyntheticsDowntimeWeekday +from datadog_api_client.v2.model.synthetics_downtime_weekday_position import SyntheticsDowntimeWeekdayPosition +from datadog_api_client.v2.model.synthetics_downtimes_response import SyntheticsDowntimesResponse +from datadog_api_client.v2.model.synthetics_fast_test_result import SyntheticsFastTestResult +from datadog_api_client.v2.model.synthetics_fast_test_result_attributes import SyntheticsFastTestResultAttributes +from datadog_api_client.v2.model.synthetics_fast_test_result_data import SyntheticsFastTestResultData +from datadog_api_client.v2.model.synthetics_fast_test_result_detail import SyntheticsFastTestResultDetail +from datadog_api_client.v2.model.synthetics_fast_test_result_type import SyntheticsFastTestResultType +from datadog_api_client.v2.model.synthetics_fast_test_sub_type import SyntheticsFastTestSubType +from datadog_api_client.v2.model.synthetics_fast_test_type import SyntheticsFastTestType +from datadog_api_client.v2.model.synthetics_global_variable import SyntheticsGlobalVariable +from datadog_api_client.v2.model.synthetics_global_variable_attributes import SyntheticsGlobalVariableAttributes +from datadog_api_client.v2.model.synthetics_global_variable_options import SyntheticsGlobalVariableOptions +from datadog_api_client.v2.model.synthetics_global_variable_parse_test_options import SyntheticsGlobalVariableParseTestOptions +from datadog_api_client.v2.model.synthetics_global_variable_parse_test_options_type import SyntheticsGlobalVariableParseTestOptionsType +from datadog_api_client.v2.model.synthetics_global_variable_parser_type import SyntheticsGlobalVariableParserType +from datadog_api_client.v2.model.synthetics_global_variable_totp_parameters import SyntheticsGlobalVariableTOTPParameters +from datadog_api_client.v2.model.synthetics_global_variable_value import SyntheticsGlobalVariableValue +from datadog_api_client.v2.model.synthetics_network_assertion import SyntheticsNetworkAssertion +from datadog_api_client.v2.model.synthetics_network_assertion_jitter import SyntheticsNetworkAssertionJitter +from datadog_api_client.v2.model.synthetics_network_assertion_jitter_type import SyntheticsNetworkAssertionJitterType +from datadog_api_client.v2.model.synthetics_network_assertion_latency import SyntheticsNetworkAssertionLatency +from datadog_api_client.v2.model.synthetics_network_assertion_latency_type import SyntheticsNetworkAssertionLatencyType +from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop import SyntheticsNetworkAssertionMultiNetworkHop +from datadog_api_client.v2.model.synthetics_network_assertion_multi_network_hop_type import SyntheticsNetworkAssertionMultiNetworkHopType +from datadog_api_client.v2.model.synthetics_network_assertion_operator import SyntheticsNetworkAssertionOperator +from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage import SyntheticsNetworkAssertionPacketLossPercentage +from datadog_api_client.v2.model.synthetics_network_assertion_packet_loss_percentage_type import SyntheticsNetworkAssertionPacketLossPercentageType +from datadog_api_client.v2.model.synthetics_network_assertion_property import SyntheticsNetworkAssertionProperty +from datadog_api_client.v2.model.synthetics_network_test import SyntheticsNetworkTest +from datadog_api_client.v2.model.synthetics_network_test_config import SyntheticsNetworkTestConfig +from datadog_api_client.v2.model.synthetics_network_test_edit import SyntheticsNetworkTestEdit +from datadog_api_client.v2.model.synthetics_network_test_edit_request import SyntheticsNetworkTestEditRequest +from datadog_api_client.v2.model.synthetics_network_test_request import SyntheticsNetworkTestRequest +from datadog_api_client.v2.model.synthetics_network_test_request_tcp_method import SyntheticsNetworkTestRequestTCPMethod +from datadog_api_client.v2.model.synthetics_network_test_response import SyntheticsNetworkTestResponse +from datadog_api_client.v2.model.synthetics_network_test_response_data import SyntheticsNetworkTestResponseData +from datadog_api_client.v2.model.synthetics_network_test_response_type import SyntheticsNetworkTestResponseType +from datadog_api_client.v2.model.synthetics_network_test_sub_type import SyntheticsNetworkTestSubType +from datadog_api_client.v2.model.synthetics_network_test_type import SyntheticsNetworkTestType +from datadog_api_client.v2.model.synthetics_poll_test_results_response import SyntheticsPollTestResultsResponse +from datadog_api_client.v2.model.synthetics_suite import SyntheticsSuite +from datadog_api_client.v2.model.synthetics_suite_options import SyntheticsSuiteOptions +from datadog_api_client.v2.model.synthetics_suite_response import SyntheticsSuiteResponse +from datadog_api_client.v2.model.synthetics_suite_response_data import SyntheticsSuiteResponseData +from datadog_api_client.v2.model.synthetics_suite_search_response import SyntheticsSuiteSearchResponse +from datadog_api_client.v2.model.synthetics_suite_search_response_data import SyntheticsSuiteSearchResponseData +from datadog_api_client.v2.model.synthetics_suite_search_response_data_attributes import SyntheticsSuiteSearchResponseDataAttributes +from datadog_api_client.v2.model.synthetics_suite_test import SyntheticsSuiteTest +from datadog_api_client.v2.model.synthetics_suite_test_alerting_criticality import SyntheticsSuiteTestAlertingCriticality +from datadog_api_client.v2.model.synthetics_suite_type import SyntheticsSuiteType +from datadog_api_client.v2.model.synthetics_suite_types import SyntheticsSuiteTypes +from datadog_api_client.v2.model.synthetics_test_file_abort_multipart_upload_request import SyntheticsTestFileAbortMultipartUploadRequest +from datadog_api_client.v2.model.synthetics_test_file_complete_multipart_upload_part import SyntheticsTestFileCompleteMultipartUploadPart +from datadog_api_client.v2.model.synthetics_test_file_complete_multipart_upload_request import SyntheticsTestFileCompleteMultipartUploadRequest +from datadog_api_client.v2.model.synthetics_test_file_download_request import SyntheticsTestFileDownloadRequest +from datadog_api_client.v2.model.synthetics_test_file_download_response import SyntheticsTestFileDownloadResponse +from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_params import SyntheticsTestFileMultipartPresignedUrlsParams +from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_part import SyntheticsTestFileMultipartPresignedUrlsPart +from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_request import SyntheticsTestFileMultipartPresignedUrlsRequest +from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_request_bucket_key_prefix import SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix +from datadog_api_client.v2.model.synthetics_test_file_multipart_presigned_urls_response import SyntheticsTestFileMultipartPresignedUrlsResponse +from datadog_api_client.v2.model.synthetics_test_latest_results_response import SyntheticsTestLatestResultsResponse +from datadog_api_client.v2.model.synthetics_test_options import SyntheticsTestOptions +from datadog_api_client.v2.model.synthetics_test_options_monitor_options import SyntheticsTestOptionsMonitorOptions +from datadog_api_client.v2.model.synthetics_test_options_monitor_options_notification_preset_name import SyntheticsTestOptionsMonitorOptionsNotificationPresetName +from datadog_api_client.v2.model.synthetics_test_options_retry import SyntheticsTestOptionsRetry +from datadog_api_client.v2.model.synthetics_test_options_scheduling import SyntheticsTestOptionsScheduling +from datadog_api_client.v2.model.synthetics_test_options_scheduling_timeframe import SyntheticsTestOptionsSchedulingTimeframe +from datadog_api_client.v2.model.synthetics_test_parent_suite_attributes import SyntheticsTestParentSuiteAttributes +from datadog_api_client.v2.model.synthetics_test_parent_suite_data import SyntheticsTestParentSuiteData +from datadog_api_client.v2.model.synthetics_test_parent_suite_type import SyntheticsTestParentSuiteType +from datadog_api_client.v2.model.synthetics_test_parent_suites_response import SyntheticsTestParentSuitesResponse +from datadog_api_client.v2.model.synthetics_test_pause_status import SyntheticsTestPauseStatus +from datadog_api_client.v2.model.synthetics_test_result_assertion_result import SyntheticsTestResultAssertionResult +from datadog_api_client.v2.model.synthetics_test_result_attributes import SyntheticsTestResultAttributes +from datadog_api_client.v2.model.synthetics_test_result_batch import SyntheticsTestResultBatch +from datadog_api_client.v2.model.synthetics_test_result_bounds import SyntheticsTestResultBounds +from datadog_api_client.v2.model.synthetics_test_result_browser_error import SyntheticsTestResultBrowserError +from datadog_api_client.v2.model.synthetics_test_result_bucket_keys import SyntheticsTestResultBucketKeys +from datadog_api_client.v2.model.synthetics_test_result_ci import SyntheticsTestResultCI +from datadog_api_client.v2.model.synthetics_test_result_ci_pipeline import SyntheticsTestResultCIPipeline +from datadog_api_client.v2.model.synthetics_test_result_ci_provider import SyntheticsTestResultCIProvider +from datadog_api_client.v2.model.synthetics_test_result_ci_stage import SyntheticsTestResultCIStage +from datadog_api_client.v2.model.synthetics_test_result_cdn_cache_status import SyntheticsTestResultCdnCacheStatus +from datadog_api_client.v2.model.synthetics_test_result_cdn_provider_info import SyntheticsTestResultCdnProviderInfo +from datadog_api_client.v2.model.synthetics_test_result_cdn_resource import SyntheticsTestResultCdnResource +from datadog_api_client.v2.model.synthetics_test_result_certificate import SyntheticsTestResultCertificate +from datadog_api_client.v2.model.synthetics_test_result_certificate_validity import SyntheticsTestResultCertificateValidity +from datadog_api_client.v2.model.synthetics_test_result_data import SyntheticsTestResultData +from datadog_api_client.v2.model.synthetics_test_result_detail import SyntheticsTestResultDetail +from datadog_api_client.v2.model.synthetics_test_result_device import SyntheticsTestResultDevice +from datadog_api_client.v2.model.synthetics_test_result_device_browser import SyntheticsTestResultDeviceBrowser +from datadog_api_client.v2.model.synthetics_test_result_device_platform import SyntheticsTestResultDevicePlatform +from datadog_api_client.v2.model.synthetics_test_result_device_resolution import SyntheticsTestResultDeviceResolution +from datadog_api_client.v2.model.synthetics_test_result_dns_record import SyntheticsTestResultDnsRecord +from datadog_api_client.v2.model.synthetics_test_result_dns_resolution import SyntheticsTestResultDnsResolution +from datadog_api_client.v2.model.synthetics_test_result_dns_resolution_attempt import SyntheticsTestResultDnsResolutionAttempt +from datadog_api_client.v2.model.synthetics_test_result_duration import SyntheticsTestResultDuration +from datadog_api_client.v2.model.synthetics_test_result_execution_info import SyntheticsTestResultExecutionInfo +from datadog_api_client.v2.model.synthetics_test_result_failure import SyntheticsTestResultFailure +from datadog_api_client.v2.model.synthetics_test_result_file_ref import SyntheticsTestResultFileRef +from datadog_api_client.v2.model.synthetics_test_result_git import SyntheticsTestResultGit +from datadog_api_client.v2.model.synthetics_test_result_git_commit import SyntheticsTestResultGitCommit +from datadog_api_client.v2.model.synthetics_test_result_git_user import SyntheticsTestResultGitUser +from datadog_api_client.v2.model.synthetics_test_result_handshake import SyntheticsTestResultHandshake +from datadog_api_client.v2.model.synthetics_test_result_health_check import SyntheticsTestResultHealthCheck +from datadog_api_client.v2.model.synthetics_test_result_included_item import SyntheticsTestResultIncludedItem +from datadog_api_client.v2.model.synthetics_test_result_location import SyntheticsTestResultLocation +from datadog_api_client.v2.model.synthetics_test_result_netpath import SyntheticsTestResultNetpath +from datadog_api_client.v2.model.synthetics_test_result_netpath_destination import SyntheticsTestResultNetpathDestination +from datadog_api_client.v2.model.synthetics_test_result_netpath_endpoint import SyntheticsTestResultNetpathEndpoint +from datadog_api_client.v2.model.synthetics_test_result_netpath_hop import SyntheticsTestResultNetpathHop +from datadog_api_client.v2.model.synthetics_test_result_netstats import SyntheticsTestResultNetstats +from datadog_api_client.v2.model.synthetics_test_result_netstats_hops import SyntheticsTestResultNetstatsHops +from datadog_api_client.v2.model.synthetics_test_result_network_latency import SyntheticsTestResultNetworkLatency +from datadog_api_client.v2.model.synthetics_test_result_ocsp_certificate import SyntheticsTestResultOCSPCertificate +from datadog_api_client.v2.model.synthetics_test_result_ocsp_response import SyntheticsTestResultOCSPResponse +from datadog_api_client.v2.model.synthetics_test_result_ocsp_updates import SyntheticsTestResultOCSPUpdates +from datadog_api_client.v2.model.synthetics_test_result_parent_step import SyntheticsTestResultParentStep +from datadog_api_client.v2.model.synthetics_test_result_parent_test import SyntheticsTestResultParentTest +from datadog_api_client.v2.model.synthetics_test_result_redirect import SyntheticsTestResultRedirect +from datadog_api_client.v2.model.synthetics_test_result_relationship_test import SyntheticsTestResultRelationshipTest +from datadog_api_client.v2.model.synthetics_test_result_relationship_test_data import SyntheticsTestResultRelationshipTestData +from datadog_api_client.v2.model.synthetics_test_result_relationships import SyntheticsTestResultRelationships +from datadog_api_client.v2.model.synthetics_test_result_request_info import SyntheticsTestResultRequestInfo +from datadog_api_client.v2.model.synthetics_test_result_response import SyntheticsTestResultResponse +from datadog_api_client.v2.model.synthetics_test_result_response_info import SyntheticsTestResultResponseInfo +from datadog_api_client.v2.model.synthetics_test_result_router import SyntheticsTestResultRouter +from datadog_api_client.v2.model.synthetics_test_result_rum_context import SyntheticsTestResultRumContext +from datadog_api_client.v2.model.synthetics_test_result_run_type import SyntheticsTestResultRunType +from datadog_api_client.v2.model.synthetics_test_result_status import SyntheticsTestResultStatus +from datadog_api_client.v2.model.synthetics_test_result_step import SyntheticsTestResultStep +from datadog_api_client.v2.model.synthetics_test_result_step_assertion_result import SyntheticsTestResultStepAssertionResult +from datadog_api_client.v2.model.synthetics_test_result_step_element_updates import SyntheticsTestResultStepElementUpdates +from datadog_api_client.v2.model.synthetics_test_result_steps_info import SyntheticsTestResultStepsInfo +from datadog_api_client.v2.model.synthetics_test_result_sub_step import SyntheticsTestResultSubStep +from datadog_api_client.v2.model.synthetics_test_result_sub_test import SyntheticsTestResultSubTest +from datadog_api_client.v2.model.synthetics_test_result_summary_attributes import SyntheticsTestResultSummaryAttributes +from datadog_api_client.v2.model.synthetics_test_result_summary_data import SyntheticsTestResultSummaryData +from datadog_api_client.v2.model.synthetics_test_result_summary_type import SyntheticsTestResultSummaryType +from datadog_api_client.v2.model.synthetics_test_result_tab import SyntheticsTestResultTab +from datadog_api_client.v2.model.synthetics_test_result_trace import SyntheticsTestResultTrace +from datadog_api_client.v2.model.synthetics_test_result_traceroute_hop import SyntheticsTestResultTracerouteHop +from datadog_api_client.v2.model.synthetics_test_result_turn import SyntheticsTestResultTurn +from datadog_api_client.v2.model.synthetics_test_result_turn_step import SyntheticsTestResultTurnStep +from datadog_api_client.v2.model.synthetics_test_result_type import SyntheticsTestResultType +from datadog_api_client.v2.model.synthetics_test_result_variable import SyntheticsTestResultVariable +from datadog_api_client.v2.model.synthetics_test_result_variables import SyntheticsTestResultVariables +from datadog_api_client.v2.model.synthetics_test_result_vitals_metrics import SyntheticsTestResultVitalsMetrics +from datadog_api_client.v2.model.synthetics_test_result_warning import SyntheticsTestResultWarning +from datadog_api_client.v2.model.synthetics_test_result_web_socket_close import SyntheticsTestResultWebSocketClose +from datadog_api_client.v2.model.synthetics_test_sub_type import SyntheticsTestSubType +from datadog_api_client.v2.model.synthetics_test_type import SyntheticsTestType +from datadog_api_client.v2.model.synthetics_test_version_action_metadata import SyntheticsTestVersionActionMetadata +from datadog_api_client.v2.model.synthetics_test_version_attributes import SyntheticsTestVersionAttributes +from datadog_api_client.v2.model.synthetics_test_version_author import SyntheticsTestVersionAuthor +from datadog_api_client.v2.model.synthetics_test_version_change_attributes import SyntheticsTestVersionChangeAttributes +from datadog_api_client.v2.model.synthetics_test_version_change_data import SyntheticsTestVersionChangeData +from datadog_api_client.v2.model.synthetics_test_version_change_metadata_item import SyntheticsTestVersionChangeMetadataItem +from datadog_api_client.v2.model.synthetics_test_version_change_type import SyntheticsTestVersionChangeType +from datadog_api_client.v2.model.synthetics_test_version_data import SyntheticsTestVersionData +from datadog_api_client.v2.model.synthetics_test_version_diff_patch_diff import SyntheticsTestVersionDiffPatchDiff +from datadog_api_client.v2.model.synthetics_test_version_diff_patches import SyntheticsTestVersionDiffPatches +from datadog_api_client.v2.model.synthetics_test_version_history_meta import SyntheticsTestVersionHistoryMeta +from datadog_api_client.v2.model.synthetics_test_version_history_response import SyntheticsTestVersionHistoryResponse +from datadog_api_client.v2.model.synthetics_test_version_response import SyntheticsTestVersionResponse +from datadog_api_client.v2.model.synthetics_test_version_type import SyntheticsTestVersionType +from datadog_api_client.v2.model.synthetics_variable_parser import SyntheticsVariableParser +from datadog_api_client.v2.model.table_result_v2 import TableResultV2 +from datadog_api_client.v2.model.table_result_v2_array import TableResultV2Array +from datadog_api_client.v2.model.table_result_v2_data import TableResultV2Data +from datadog_api_client.v2.model.table_result_v2_data_attributes import TableResultV2DataAttributes +from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata import TableResultV2DataAttributesFileMetadata +from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_cloud_storage_error_type import TableResultV2DataAttributesFileMetadataCloudStorageErrorType +from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details import TableResultV2DataAttributesFileMetadataOneOfAccessDetails +from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details_aws_detail import TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAwsDetail +from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details_azure_detail import TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAzureDetail +from datadog_api_client.v2.model.table_result_v2_data_attributes_file_metadata_one_of_access_details_gcp_detail import TableResultV2DataAttributesFileMetadataOneOfAccessDetailsGcpDetail +from datadog_api_client.v2.model.table_result_v2_data_attributes_schema import TableResultV2DataAttributesSchema +from datadog_api_client.v2.model.table_result_v2_data_attributes_schema_fields_items import TableResultV2DataAttributesSchemaFieldsItems +from datadog_api_client.v2.model.table_result_v2_data_type import TableResultV2DataType +from datadog_api_client.v2.model.table_row_resource_array import TableRowResourceArray +from datadog_api_client.v2.model.table_row_resource_data import TableRowResourceData +from datadog_api_client.v2.model.table_row_resource_data_attributes import TableRowResourceDataAttributes +from datadog_api_client.v2.model.table_row_resource_data_type import TableRowResourceDataType +from datadog_api_client.v2.model.table_row_resource_identifier import TableRowResourceIdentifier +from datadog_api_client.v2.model.tag_data import TagData +from datadog_api_client.v2.model.tag_data_type import TagDataType +from datadog_api_client.v2.model.tag_indexing_rule_attributes import TagIndexingRuleAttributes +from datadog_api_client.v2.model.tag_indexing_rule_create_attributes import TagIndexingRuleCreateAttributes +from datadog_api_client.v2.model.tag_indexing_rule_create_data import TagIndexingRuleCreateData +from datadog_api_client.v2.model.tag_indexing_rule_create_request import TagIndexingRuleCreateRequest +from datadog_api_client.v2.model.tag_indexing_rule_data import TagIndexingRuleData +from datadog_api_client.v2.model.tag_indexing_rule_dynamic_tags import TagIndexingRuleDynamicTags +from datadog_api_client.v2.model.tag_indexing_rule_exemption_attributes import TagIndexingRuleExemptionAttributes +from datadog_api_client.v2.model.tag_indexing_rule_exemption_create_attributes import TagIndexingRuleExemptionCreateAttributes +from datadog_api_client.v2.model.tag_indexing_rule_exemption_create_data import TagIndexingRuleExemptionCreateData +from datadog_api_client.v2.model.tag_indexing_rule_exemption_create_request import TagIndexingRuleExemptionCreateRequest +from datadog_api_client.v2.model.tag_indexing_rule_exemption_data import TagIndexingRuleExemptionData +from datadog_api_client.v2.model.tag_indexing_rule_exemption_response import TagIndexingRuleExemptionResponse +from datadog_api_client.v2.model.tag_indexing_rule_exemption_type import TagIndexingRuleExemptionType +from datadog_api_client.v2.model.tag_indexing_rule_metric_match import TagIndexingRuleMetricMatch +from datadog_api_client.v2.model.tag_indexing_rule_options import TagIndexingRuleOptions +from datadog_api_client.v2.model.tag_indexing_rule_options_data import TagIndexingRuleOptionsData +from datadog_api_client.v2.model.tag_indexing_rule_order_attributes import TagIndexingRuleOrderAttributes +from datadog_api_client.v2.model.tag_indexing_rule_order_data import TagIndexingRuleOrderData +from datadog_api_client.v2.model.tag_indexing_rule_order_request import TagIndexingRuleOrderRequest +from datadog_api_client.v2.model.tag_indexing_rule_response import TagIndexingRuleResponse +from datadog_api_client.v2.model.tag_indexing_rule_type import TagIndexingRuleType +from datadog_api_client.v2.model.tag_indexing_rule_update_attributes import TagIndexingRuleUpdateAttributes +from datadog_api_client.v2.model.tag_indexing_rule_update_data import TagIndexingRuleUpdateData +from datadog_api_client.v2.model.tag_indexing_rule_update_request import TagIndexingRuleUpdateRequest +from datadog_api_client.v2.model.tag_indexing_rules_response import TagIndexingRulesResponse +from datadog_api_client.v2.model.tag_indexing_rules_response_meta import TagIndexingRulesResponseMeta +from datadog_api_client.v2.model.tag_policies_list_response import TagPoliciesListResponse +from datadog_api_client.v2.model.tag_policy_attributes import TagPolicyAttributes +from datadog_api_client.v2.model.tag_policy_create_attributes import TagPolicyCreateAttributes +from datadog_api_client.v2.model.tag_policy_create_data import TagPolicyCreateData +from datadog_api_client.v2.model.tag_policy_create_request import TagPolicyCreateRequest +from datadog_api_client.v2.model.tag_policy_create_type import TagPolicyCreateType +from datadog_api_client.v2.model.tag_policy_data import TagPolicyData +from datadog_api_client.v2.model.tag_policy_include import TagPolicyInclude +from datadog_api_client.v2.model.tag_policy_relationships import TagPolicyRelationships +from datadog_api_client.v2.model.tag_policy_resource_type import TagPolicyResourceType +from datadog_api_client.v2.model.tag_policy_response import TagPolicyResponse +from datadog_api_client.v2.model.tag_policy_score_attributes import TagPolicyScoreAttributes +from datadog_api_client.v2.model.tag_policy_score_data import TagPolicyScoreData +from datadog_api_client.v2.model.tag_policy_score_relationship import TagPolicyScoreRelationship +from datadog_api_client.v2.model.tag_policy_score_relationship_data import TagPolicyScoreRelationshipData +from datadog_api_client.v2.model.tag_policy_score_resource_type import TagPolicyScoreResourceType +from datadog_api_client.v2.model.tag_policy_score_response import TagPolicyScoreResponse +from datadog_api_client.v2.model.tag_policy_source import TagPolicySource +from datadog_api_client.v2.model.tag_policy_type import TagPolicyType +from datadog_api_client.v2.model.tag_policy_update_attributes import TagPolicyUpdateAttributes +from datadog_api_client.v2.model.tag_policy_update_data import TagPolicyUpdateData +from datadog_api_client.v2.model.tag_policy_update_request import TagPolicyUpdateRequest +from datadog_api_client.v2.model.tags_event_attribute import TagsEventAttribute +from datadog_api_client.v2.model.targeting_rule import TargetingRule +from datadog_api_client.v2.model.targeting_rule_request import TargetingRuleRequest +from datadog_api_client.v2.model.team import Team +from datadog_api_client.v2.model.team_attributes import TeamAttributes +from datadog_api_client.v2.model.team_connection import TeamConnection +from datadog_api_client.v2.model.team_connection_attributes import TeamConnectionAttributes +from datadog_api_client.v2.model.team_connection_create_data import TeamConnectionCreateData +from datadog_api_client.v2.model.team_connection_create_request import TeamConnectionCreateRequest +from datadog_api_client.v2.model.team_connection_delete_request import TeamConnectionDeleteRequest +from datadog_api_client.v2.model.team_connection_delete_request_data_item import TeamConnectionDeleteRequestDataItem +from datadog_api_client.v2.model.team_connection_relationships import TeamConnectionRelationships +from datadog_api_client.v2.model.team_connection_type import TeamConnectionType +from datadog_api_client.v2.model.team_connections_response import TeamConnectionsResponse +from datadog_api_client.v2.model.team_create import TeamCreate +from datadog_api_client.v2.model.team_create_attributes import TeamCreateAttributes +from datadog_api_client.v2.model.team_create_relationships import TeamCreateRelationships +from datadog_api_client.v2.model.team_create_request import TeamCreateRequest +from datadog_api_client.v2.model.team_hierarchy_link import TeamHierarchyLink +from datadog_api_client.v2.model.team_hierarchy_link_attributes import TeamHierarchyLinkAttributes +from datadog_api_client.v2.model.team_hierarchy_link_create import TeamHierarchyLinkCreate +from datadog_api_client.v2.model.team_hierarchy_link_create_relationships import TeamHierarchyLinkCreateRelationships +from datadog_api_client.v2.model.team_hierarchy_link_create_request import TeamHierarchyLinkCreateRequest +from datadog_api_client.v2.model.team_hierarchy_link_create_team import TeamHierarchyLinkCreateTeam +from datadog_api_client.v2.model.team_hierarchy_link_create_team_relationship import TeamHierarchyLinkCreateTeamRelationship +from datadog_api_client.v2.model.team_hierarchy_link_relationships import TeamHierarchyLinkRelationships +from datadog_api_client.v2.model.team_hierarchy_link_response import TeamHierarchyLinkResponse +from datadog_api_client.v2.model.team_hierarchy_link_team import TeamHierarchyLinkTeam +from datadog_api_client.v2.model.team_hierarchy_link_team_attributes import TeamHierarchyLinkTeamAttributes +from datadog_api_client.v2.model.team_hierarchy_link_team_relationship import TeamHierarchyLinkTeamRelationship +from datadog_api_client.v2.model.team_hierarchy_link_type import TeamHierarchyLinkType +from datadog_api_client.v2.model.team_hierarchy_links_response import TeamHierarchyLinksResponse +from datadog_api_client.v2.model.team_included import TeamIncluded +from datadog_api_client.v2.model.team_link import TeamLink +from datadog_api_client.v2.model.team_link_attributes import TeamLinkAttributes +from datadog_api_client.v2.model.team_link_create import TeamLinkCreate +from datadog_api_client.v2.model.team_link_create_request import TeamLinkCreateRequest +from datadog_api_client.v2.model.team_link_response import TeamLinkResponse +from datadog_api_client.v2.model.team_link_type import TeamLinkType +from datadog_api_client.v2.model.team_links_response import TeamLinksResponse +from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule +from datadog_api_client.v2.model.team_notification_rule_attributes import TeamNotificationRuleAttributes +from datadog_api_client.v2.model.team_notification_rule_attributes_email import TeamNotificationRuleAttributesEmail +from datadog_api_client.v2.model.team_notification_rule_attributes_ms_teams import TeamNotificationRuleAttributesMsTeams +from datadog_api_client.v2.model.team_notification_rule_attributes_pagerduty import TeamNotificationRuleAttributesPagerduty +from datadog_api_client.v2.model.team_notification_rule_attributes_slack import TeamNotificationRuleAttributesSlack +from datadog_api_client.v2.model.team_notification_rule_request import TeamNotificationRuleRequest +from datadog_api_client.v2.model.team_notification_rule_response import TeamNotificationRuleResponse +from datadog_api_client.v2.model.team_notification_rule_type import TeamNotificationRuleType +from datadog_api_client.v2.model.team_notification_rules_response import TeamNotificationRulesResponse +from datadog_api_client.v2.model.team_notification_rules_response_meta import TeamNotificationRulesResponseMeta +from datadog_api_client.v2.model.team_notification_rules_response_meta_page import TeamNotificationRulesResponseMetaPage +from datadog_api_client.v2.model.team_on_call_responders import TeamOnCallResponders +from datadog_api_client.v2.model.team_on_call_responders_data import TeamOnCallRespondersData +from datadog_api_client.v2.model.team_on_call_responders_data_relationships import TeamOnCallRespondersDataRelationships +from datadog_api_client.v2.model.team_on_call_responders_data_relationships_escalations import TeamOnCallRespondersDataRelationshipsEscalations +from datadog_api_client.v2.model.team_on_call_responders_data_relationships_escalations_data_items import TeamOnCallRespondersDataRelationshipsEscalationsDataItems +from datadog_api_client.v2.model.team_on_call_responders_data_relationships_escalations_data_items_type import TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType +from datadog_api_client.v2.model.team_on_call_responders_data_relationships_responders import TeamOnCallRespondersDataRelationshipsResponders +from datadog_api_client.v2.model.team_on_call_responders_data_relationships_responders_data_items import TeamOnCallRespondersDataRelationshipsRespondersDataItems +from datadog_api_client.v2.model.team_on_call_responders_data_relationships_responders_data_items_type import TeamOnCallRespondersDataRelationshipsRespondersDataItemsType +from datadog_api_client.v2.model.team_on_call_responders_data_type import TeamOnCallRespondersDataType +from datadog_api_client.v2.model.team_on_call_responders_included import TeamOnCallRespondersIncluded +from datadog_api_client.v2.model.team_permission_setting import TeamPermissionSetting +from datadog_api_client.v2.model.team_permission_setting_attributes import TeamPermissionSettingAttributes +from datadog_api_client.v2.model.team_permission_setting_response import TeamPermissionSettingResponse +from datadog_api_client.v2.model.team_permission_setting_serializer_action import TeamPermissionSettingSerializerAction +from datadog_api_client.v2.model.team_permission_setting_type import TeamPermissionSettingType +from datadog_api_client.v2.model.team_permission_setting_update import TeamPermissionSettingUpdate +from datadog_api_client.v2.model.team_permission_setting_update_attributes import TeamPermissionSettingUpdateAttributes +from datadog_api_client.v2.model.team_permission_setting_update_request import TeamPermissionSettingUpdateRequest +from datadog_api_client.v2.model.team_permission_setting_value import TeamPermissionSettingValue +from datadog_api_client.v2.model.team_permission_setting_values import TeamPermissionSettingValues +from datadog_api_client.v2.model.team_permission_settings_response import TeamPermissionSettingsResponse +from datadog_api_client.v2.model.team_ref import TeamRef +from datadog_api_client.v2.model.team_ref_data import TeamRefData +from datadog_api_client.v2.model.team_ref_data_type import TeamRefDataType +from datadog_api_client.v2.model.team_reference import TeamReference +from datadog_api_client.v2.model.team_reference_attributes import TeamReferenceAttributes +from datadog_api_client.v2.model.team_reference_type import TeamReferenceType +from datadog_api_client.v2.model.team_relationships import TeamRelationships +from datadog_api_client.v2.model.team_relationships_links import TeamRelationshipsLinks +from datadog_api_client.v2.model.team_response import TeamResponse +from datadog_api_client.v2.model.team_routing_rules import TeamRoutingRules +from datadog_api_client.v2.model.team_routing_rules_data import TeamRoutingRulesData +from datadog_api_client.v2.model.team_routing_rules_data_relationships import TeamRoutingRulesDataRelationships +from datadog_api_client.v2.model.team_routing_rules_data_relationships_rules import TeamRoutingRulesDataRelationshipsRules +from datadog_api_client.v2.model.team_routing_rules_data_relationships_rules_data_items import TeamRoutingRulesDataRelationshipsRulesDataItems +from datadog_api_client.v2.model.team_routing_rules_data_relationships_rules_data_items_type import TeamRoutingRulesDataRelationshipsRulesDataItemsType +from datadog_api_client.v2.model.team_routing_rules_data_type import TeamRoutingRulesDataType +from datadog_api_client.v2.model.team_routing_rules_included import TeamRoutingRulesIncluded +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 +from datadog_api_client.v2.model.team_routing_rules_request_data_type import TeamRoutingRulesRequestDataType +from datadog_api_client.v2.model.team_routing_rules_request_rule import TeamRoutingRulesRequestRule +from datadog_api_client.v2.model.team_sync_attributes import TeamSyncAttributes +from datadog_api_client.v2.model.team_sync_attributes_frequency import TeamSyncAttributesFrequency +from datadog_api_client.v2.model.team_sync_attributes_source import TeamSyncAttributesSource +from datadog_api_client.v2.model.team_sync_attributes_type import TeamSyncAttributesType +from datadog_api_client.v2.model.team_sync_bulk_type import TeamSyncBulkType +from datadog_api_client.v2.model.team_sync_data import TeamSyncData +from datadog_api_client.v2.model.team_sync_request import TeamSyncRequest +from datadog_api_client.v2.model.team_sync_response import TeamSyncResponse +from datadog_api_client.v2.model.team_sync_selection_state_external_id import TeamSyncSelectionStateExternalId +from datadog_api_client.v2.model.team_sync_selection_state_external_id_type import TeamSyncSelectionStateExternalIdType +from datadog_api_client.v2.model.team_sync_selection_state_item import TeamSyncSelectionStateItem +from datadog_api_client.v2.model.team_sync_selection_state_operation import TeamSyncSelectionStateOperation +from datadog_api_client.v2.model.team_sync_selection_state_scope import TeamSyncSelectionStateScope +from datadog_api_client.v2.model.team_target import TeamTarget +from datadog_api_client.v2.model.team_target_type import TeamTargetType +from datadog_api_client.v2.model.team_type import TeamType +from datadog_api_client.v2.model.team_update import TeamUpdate +from datadog_api_client.v2.model.team_update_attributes import TeamUpdateAttributes +from datadog_api_client.v2.model.team_update_relationships import TeamUpdateRelationships +from datadog_api_client.v2.model.team_update_request import TeamUpdateRequest +from datadog_api_client.v2.model.teams_field import TeamsField +from datadog_api_client.v2.model.teams_hierarchy_links_response_links import TeamsHierarchyLinksResponseLinks +from datadog_api_client.v2.model.teams_hierarchy_links_response_meta import TeamsHierarchyLinksResponseMeta +from datadog_api_client.v2.model.teams_hierarchy_links_response_meta_page import TeamsHierarchyLinksResponseMetaPage +from datadog_api_client.v2.model.teams_response import TeamsResponse +from datadog_api_client.v2.model.teams_response_links import TeamsResponseLinks +from datadog_api_client.v2.model.teams_response_meta import TeamsResponseMeta +from datadog_api_client.v2.model.teams_response_meta_pagination import TeamsResponseMetaPagination +from datadog_api_client.v2.model.tenancy_config import TenancyConfig +from datadog_api_client.v2.model.tenancy_config_data import TenancyConfigData +from datadog_api_client.v2.model.tenancy_config_data_attributes import TenancyConfigDataAttributes +from datadog_api_client.v2.model.tenancy_config_data_attributes_logs_config import TenancyConfigDataAttributesLogsConfig +from datadog_api_client.v2.model.tenancy_config_data_attributes_metrics_config import TenancyConfigDataAttributesMetricsConfig +from datadog_api_client.v2.model.tenancy_config_data_attributes_regions_config import TenancyConfigDataAttributesRegionsConfig +from datadog_api_client.v2.model.tenancy_config_list import TenancyConfigList +from datadog_api_client.v2.model.tenancy_products_data import TenancyProductsData +from datadog_api_client.v2.model.tenancy_products_data_attributes import TenancyProductsDataAttributes +from datadog_api_client.v2.model.tenancy_products_data_attributes_products_items import TenancyProductsDataAttributesProductsItems +from datadog_api_client.v2.model.tenancy_products_data_type import TenancyProductsDataType +from datadog_api_client.v2.model.tenancy_products_list import TenancyProductsList +from datadog_api_client.v2.model.test_optimization_delete_service_settings_request import TestOptimizationDeleteServiceSettingsRequest +from datadog_api_client.v2.model.test_optimization_delete_service_settings_request_attributes import TestOptimizationDeleteServiceSettingsRequestAttributes +from datadog_api_client.v2.model.test_optimization_delete_service_settings_request_data import TestOptimizationDeleteServiceSettingsRequestData +from datadog_api_client.v2.model.test_optimization_delete_service_settings_request_data_type import TestOptimizationDeleteServiceSettingsRequestDataType +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_attempt_to_fix import TestOptimizationFlakyTestsManagementPoliciesAttemptToFix +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_attributes import TestOptimizationFlakyTestsManagementPoliciesAttributes +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_auto_disable_rule import TestOptimizationFlakyTestsManagementPoliciesAutoDisableRule +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_auto_quarantine_rule import TestOptimizationFlakyTestsManagementPoliciesAutoQuarantineRule +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_branch_rule import TestOptimizationFlakyTestsManagementPoliciesBranchRule +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_data import TestOptimizationFlakyTestsManagementPoliciesData +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled import TestOptimizationFlakyTestsManagementPoliciesDisabled +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled_failure_rate_rule import TestOptimizationFlakyTestsManagementPoliciesDisabledFailureRateRule +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_disabled_status import TestOptimizationFlakyTestsManagementPoliciesDisabledStatus +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_get_request import TestOptimizationFlakyTestsManagementPoliciesGetRequest +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_get_request_attributes import TestOptimizationFlakyTestsManagementPoliciesGetRequestAttributes +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_get_request_data import TestOptimizationFlakyTestsManagementPoliciesGetRequestData +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_quarantined import TestOptimizationFlakyTestsManagementPoliciesQuarantined +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_quarantined_failure_rate_rule import TestOptimizationFlakyTestsManagementPoliciesQuarantinedFailureRateRule +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_response import TestOptimizationFlakyTestsManagementPoliciesResponse +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_type import TestOptimizationFlakyTestsManagementPoliciesType +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_update_request import TestOptimizationFlakyTestsManagementPoliciesUpdateRequest +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_update_request_attributes import TestOptimizationFlakyTestsManagementPoliciesUpdateRequestAttributes +from datadog_api_client.v2.model.test_optimization_flaky_tests_management_policies_update_request_data import TestOptimizationFlakyTestsManagementPoliciesUpdateRequestData +from datadog_api_client.v2.model.test_optimization_get_flaky_tests_management_policies_request_data_type import TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType +from datadog_api_client.v2.model.test_optimization_get_service_settings_request import TestOptimizationGetServiceSettingsRequest +from datadog_api_client.v2.model.test_optimization_get_service_settings_request_attributes import TestOptimizationGetServiceSettingsRequestAttributes +from datadog_api_client.v2.model.test_optimization_get_service_settings_request_data import TestOptimizationGetServiceSettingsRequestData +from datadog_api_client.v2.model.test_optimization_get_service_settings_request_data_type import TestOptimizationGetServiceSettingsRequestDataType +from datadog_api_client.v2.model.test_optimization_service_settings_attributes import TestOptimizationServiceSettingsAttributes +from datadog_api_client.v2.model.test_optimization_service_settings_data import TestOptimizationServiceSettingsData +from datadog_api_client.v2.model.test_optimization_service_settings_response import TestOptimizationServiceSettingsResponse +from datadog_api_client.v2.model.test_optimization_service_settings_type import TestOptimizationServiceSettingsType +from datadog_api_client.v2.model.test_optimization_update_flaky_tests_management_policies_request_data_type import TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType +from datadog_api_client.v2.model.test_optimization_update_service_settings_request import TestOptimizationUpdateServiceSettingsRequest +from datadog_api_client.v2.model.test_optimization_update_service_settings_request_attributes import TestOptimizationUpdateServiceSettingsRequestAttributes +from datadog_api_client.v2.model.test_optimization_update_service_settings_request_data import TestOptimizationUpdateServiceSettingsRequestData +from datadog_api_client.v2.model.test_optimization_update_service_settings_request_data_type import TestOptimizationUpdateServiceSettingsRequestDataType +from datadog_api_client.v2.model.ticket_creation_rule_action import TicketCreationRuleAction +from datadog_api_client.v2.model.ticket_creation_rule_action_response import TicketCreationRuleActionResponse +from datadog_api_client.v2.model.ticket_creation_rule_attributes_create import TicketCreationRuleAttributesCreate +from datadog_api_client.v2.model.ticket_creation_rule_attributes_response import TicketCreationRuleAttributesResponse +from datadog_api_client.v2.model.ticket_creation_rule_create_request import TicketCreationRuleCreateRequest +from datadog_api_client.v2.model.ticket_creation_rule_data_create import TicketCreationRuleDataCreate +from datadog_api_client.v2.model.ticket_creation_rule_data_response import TicketCreationRuleDataResponse +from datadog_api_client.v2.model.ticket_creation_rule_reorder_item import TicketCreationRuleReorderItem +from datadog_api_client.v2.model.ticket_creation_rule_reorder_request import TicketCreationRuleReorderRequest +from datadog_api_client.v2.model.ticket_creation_rule_response import TicketCreationRuleResponse +from datadog_api_client.v2.model.ticket_creation_rule_type import TicketCreationRuleType +from datadog_api_client.v2.model.ticket_creation_rule_update_request import TicketCreationRuleUpdateRequest +from datadog_api_client.v2.model.ticket_creation_rules_response import TicketCreationRulesResponse +from datadog_api_client.v2.model.ticket_creation_target import TicketCreationTarget +from datadog_api_client.v2.model.time_restriction import TimeRestriction +from datadog_api_client.v2.model.time_restrictions import TimeRestrictions +from datadog_api_client.v2.model.timeline_cell import TimelineCell +from datadog_api_client.v2.model.timeline_cell_author import TimelineCellAuthor +from datadog_api_client.v2.model.timeline_cell_author_user import TimelineCellAuthorUser +from datadog_api_client.v2.model.timeline_cell_author_user_content import TimelineCellAuthorUserContent +from datadog_api_client.v2.model.timeline_cell_author_user_type import TimelineCellAuthorUserType +from datadog_api_client.v2.model.timeline_cell_content import TimelineCellContent +from datadog_api_client.v2.model.timeline_cell_content_comment import TimelineCellContentComment +from datadog_api_client.v2.model.timeline_cell_resource import TimelineCellResource +from datadog_api_client.v2.model.timeline_cell_resource_type import TimelineCellResourceType +from datadog_api_client.v2.model.timeline_cell_type import TimelineCellType +from datadog_api_client.v2.model.timeline_response import TimelineResponse +from datadog_api_client.v2.model.timeseries_formula_query_request import TimeseriesFormulaQueryRequest +from datadog_api_client.v2.model.timeseries_formula_query_response import TimeseriesFormulaQueryResponse +from datadog_api_client.v2.model.timeseries_formula_request import TimeseriesFormulaRequest +from datadog_api_client.v2.model.timeseries_formula_request_attributes import TimeseriesFormulaRequestAttributes +from datadog_api_client.v2.model.timeseries_formula_request_queries import TimeseriesFormulaRequestQueries +from datadog_api_client.v2.model.timeseries_formula_request_type import TimeseriesFormulaRequestType +from datadog_api_client.v2.model.timeseries_formula_response_type import TimeseriesFormulaResponseType +from datadog_api_client.v2.model.timeseries_query import TimeseriesQuery +from datadog_api_client.v2.model.timeseries_response import TimeseriesResponse +from datadog_api_client.v2.model.timeseries_response_attributes import TimeseriesResponseAttributes +from datadog_api_client.v2.model.timeseries_response_series import TimeseriesResponseSeries +from datadog_api_client.v2.model.timeseries_response_series_list import TimeseriesResponseSeriesList +from datadog_api_client.v2.model.timeseries_response_times import TimeseriesResponseTimes +from datadog_api_client.v2.model.timeseries_response_values import TimeseriesResponseValues +from datadog_api_client.v2.model.timeseries_response_values_list import TimeseriesResponseValuesList +from datadog_api_client.v2.model.token_type import TokenType +from datadog_api_client.v2.model.top_long_task_invoker import TopLongTaskInvoker +from datadog_api_client.v2.model.trace_attributes import TraceAttributes +from datadog_api_client.v2.model.trace_data import TraceData +from datadog_api_client.v2.model.trace_response import TraceResponse +from datadog_api_client.v2.model.trace_type import TraceType +from datadog_api_client.v2.model.trigger import Trigger +from datadog_api_client.v2.model.trigger_attributes import TriggerAttributes +from datadog_api_client.v2.model.trigger_investigation_request import TriggerInvestigationRequest +from datadog_api_client.v2.model.trigger_investigation_request_data import TriggerInvestigationRequestData +from datadog_api_client.v2.model.trigger_investigation_request_data_attributes import TriggerInvestigationRequestDataAttributes +from datadog_api_client.v2.model.trigger_investigation_request_type import TriggerInvestigationRequestType +from datadog_api_client.v2.model.trigger_investigation_response import TriggerInvestigationResponse +from datadog_api_client.v2.model.trigger_investigation_response_data import TriggerInvestigationResponseData +from datadog_api_client.v2.model.trigger_investigation_response_data_attributes import TriggerInvestigationResponseDataAttributes +from datadog_api_client.v2.model.trigger_investigation_response_type import TriggerInvestigationResponseType +from datadog_api_client.v2.model.trigger_rate_limit import TriggerRateLimit +from datadog_api_client.v2.model.trigger_source import TriggerSource +from datadog_api_client.v2.model.trigger_type import TriggerType +from datadog_api_client.v2.model.trigger_workflow_automation_action import TriggerWorkflowAutomationAction +from datadog_api_client.v2.model.trigger_workflow_automation_action_type import TriggerWorkflowAutomationActionType +from datadog_api_client.v2.model.uc_config_pair import UCConfigPair +from datadog_api_client.v2.model.uc_config_pair_data import UCConfigPairData +from datadog_api_client.v2.model.uc_config_pair_data_attributes import UCConfigPairDataAttributes +from datadog_api_client.v2.model.uc_config_pair_data_attributes_configs_items import UCConfigPairDataAttributesConfigsItems +from datadog_api_client.v2.model.uc_config_pair_data_type import UCConfigPairDataType +from datadog_api_client.v2.model.unassign_seats_user_request import UnassignSeatsUserRequest +from datadog_api_client.v2.model.unassign_seats_user_request_data import UnassignSeatsUserRequestData +from datadog_api_client.v2.model.unassign_seats_user_request_data_attributes import UnassignSeatsUserRequestDataAttributes +from datadog_api_client.v2.model.unit import Unit +from datadog_api_client.v2.model.unpublish_app_response import UnpublishAppResponse +from datadog_api_client.v2.model.update_action_connection_request import UpdateActionConnectionRequest +from datadog_api_client.v2.model.update_action_connection_response import UpdateActionConnectionResponse +from datadog_api_client.v2.model.update_app_favorite_request import UpdateAppFavoriteRequest +from datadog_api_client.v2.model.update_app_favorite_request_data import UpdateAppFavoriteRequestData +from datadog_api_client.v2.model.update_app_favorite_request_data_attributes import UpdateAppFavoriteRequestDataAttributes +from datadog_api_client.v2.model.update_app_protection_level_request import UpdateAppProtectionLevelRequest +from datadog_api_client.v2.model.update_app_protection_level_request_data import UpdateAppProtectionLevelRequestData +from datadog_api_client.v2.model.update_app_protection_level_request_data_attributes import UpdateAppProtectionLevelRequestDataAttributes +from datadog_api_client.v2.model.update_app_request import UpdateAppRequest +from datadog_api_client.v2.model.update_app_request_data import UpdateAppRequestData +from datadog_api_client.v2.model.update_app_request_data_attributes import UpdateAppRequestDataAttributes +from datadog_api_client.v2.model.update_app_response import UpdateAppResponse +from datadog_api_client.v2.model.update_app_response_data import UpdateAppResponseData +from datadog_api_client.v2.model.update_app_response_data_attributes import UpdateAppResponseDataAttributes +from datadog_api_client.v2.model.update_app_self_service_request import UpdateAppSelfServiceRequest +from datadog_api_client.v2.model.update_app_self_service_request_data import UpdateAppSelfServiceRequestData +from datadog_api_client.v2.model.update_app_self_service_request_data_attributes import UpdateAppSelfServiceRequestDataAttributes +from datadog_api_client.v2.model.update_app_tags_request import UpdateAppTagsRequest +from datadog_api_client.v2.model.update_app_tags_request_data import UpdateAppTagsRequestData +from datadog_api_client.v2.model.update_app_tags_request_data_attributes import UpdateAppTagsRequestDataAttributes +from datadog_api_client.v2.model.update_app_version_name_request import UpdateAppVersionNameRequest +from datadog_api_client.v2.model.update_app_version_name_request_data import UpdateAppVersionNameRequestData +from datadog_api_client.v2.model.update_app_version_name_request_data_attributes import UpdateAppVersionNameRequestDataAttributes +from datadog_api_client.v2.model.update_apps_datastore_item_request import UpdateAppsDatastoreItemRequest +from datadog_api_client.v2.model.update_apps_datastore_item_request_data import UpdateAppsDatastoreItemRequestData +from datadog_api_client.v2.model.update_apps_datastore_item_request_data_attributes import UpdateAppsDatastoreItemRequestDataAttributes +from datadog_api_client.v2.model.update_apps_datastore_item_request_data_attributes_item_changes import UpdateAppsDatastoreItemRequestDataAttributesItemChanges +from datadog_api_client.v2.model.update_apps_datastore_item_request_data_type import UpdateAppsDatastoreItemRequestDataType +from datadog_api_client.v2.model.update_apps_datastore_request import UpdateAppsDatastoreRequest +from datadog_api_client.v2.model.update_apps_datastore_request_data import UpdateAppsDatastoreRequestData +from datadog_api_client.v2.model.update_apps_datastore_request_data_attributes import UpdateAppsDatastoreRequestDataAttributes +from datadog_api_client.v2.model.update_campaign_request import UpdateCampaignRequest +from datadog_api_client.v2.model.update_campaign_request_attributes import UpdateCampaignRequestAttributes +from datadog_api_client.v2.model.update_campaign_request_data import UpdateCampaignRequestData +from datadog_api_client.v2.model.update_connection_request import UpdateConnectionRequest +from datadog_api_client.v2.model.update_connection_request_data import UpdateConnectionRequestData +from datadog_api_client.v2.model.update_connection_request_data_attributes import UpdateConnectionRequestDataAttributes +from datadog_api_client.v2.model.update_connection_request_data_attributes_fields_to_update_items import UpdateConnectionRequestDataAttributesFieldsToUpdateItems +from datadog_api_client.v2.model.update_connection_request_data_type import UpdateConnectionRequestDataType +from datadog_api_client.v2.model.update_custom_framework_request import UpdateCustomFrameworkRequest +from datadog_api_client.v2.model.update_custom_framework_response import UpdateCustomFrameworkResponse +from datadog_api_client.v2.model.update_deployment_gate_params import UpdateDeploymentGateParams +from datadog_api_client.v2.model.update_deployment_gate_params_data import UpdateDeploymentGateParamsData +from datadog_api_client.v2.model.update_deployment_gate_params_data_attributes import UpdateDeploymentGateParamsDataAttributes +from datadog_api_client.v2.model.update_deployment_rule_params import UpdateDeploymentRuleParams +from datadog_api_client.v2.model.update_deployment_rule_params_data import UpdateDeploymentRuleParamsData +from datadog_api_client.v2.model.update_deployment_rule_params_data_attributes import UpdateDeploymentRuleParamsDataAttributes +from datadog_api_client.v2.model.update_environment_attributes import UpdateEnvironmentAttributes +from datadog_api_client.v2.model.update_environment_data import UpdateEnvironmentData +from datadog_api_client.v2.model.update_environment_data_type import UpdateEnvironmentDataType +from datadog_api_client.v2.model.update_environment_request import UpdateEnvironmentRequest +from datadog_api_client.v2.model.update_feature_flag_attributes import UpdateFeatureFlagAttributes +from datadog_api_client.v2.model.update_feature_flag_data import UpdateFeatureFlagData +from datadog_api_client.v2.model.update_feature_flag_data_type import UpdateFeatureFlagDataType +from datadog_api_client.v2.model.update_feature_flag_request import UpdateFeatureFlagRequest +from datadog_api_client.v2.model.update_flaky_tests_request import UpdateFlakyTestsRequest +from datadog_api_client.v2.model.update_flaky_tests_request_attributes import UpdateFlakyTestsRequestAttributes +from datadog_api_client.v2.model.update_flaky_tests_request_data import UpdateFlakyTestsRequestData +from datadog_api_client.v2.model.update_flaky_tests_request_data_type import UpdateFlakyTestsRequestDataType +from datadog_api_client.v2.model.update_flaky_tests_request_test import UpdateFlakyTestsRequestTest +from datadog_api_client.v2.model.update_flaky_tests_request_test_new_state import UpdateFlakyTestsRequestTestNewState +from datadog_api_client.v2.model.update_flaky_tests_response import UpdateFlakyTestsResponse +from datadog_api_client.v2.model.update_flaky_tests_response_attributes import UpdateFlakyTestsResponseAttributes +from datadog_api_client.v2.model.update_flaky_tests_response_data import UpdateFlakyTestsResponseData +from datadog_api_client.v2.model.update_flaky_tests_response_data_type import UpdateFlakyTestsResponseDataType +from datadog_api_client.v2.model.update_flaky_tests_response_result import UpdateFlakyTestsResponseResult +from datadog_api_client.v2.model.update_form_data import UpdateFormData +from datadog_api_client.v2.model.update_form_data_attributes import UpdateFormDataAttributes +from datadog_api_client.v2.model.update_form_request import UpdateFormRequest +from datadog_api_client.v2.model.update_on_call_notification_rule_request import UpdateOnCallNotificationRuleRequest +from datadog_api_client.v2.model.update_on_call_notification_rule_request_attributes import UpdateOnCallNotificationRuleRequestAttributes +from datadog_api_client.v2.model.update_on_call_notification_rule_request_data import UpdateOnCallNotificationRuleRequestData +from datadog_api_client.v2.model.update_open_api_response import UpdateOpenAPIResponse +from datadog_api_client.v2.model.update_open_api_response_attributes import UpdateOpenAPIResponseAttributes +from datadog_api_client.v2.model.update_open_api_response_data import UpdateOpenAPIResponseData +from datadog_api_client.v2.model.update_outcomes_async_attributes import UpdateOutcomesAsyncAttributes +from datadog_api_client.v2.model.update_outcomes_async_request import UpdateOutcomesAsyncRequest +from datadog_api_client.v2.model.update_outcomes_async_request_data import UpdateOutcomesAsyncRequestData +from datadog_api_client.v2.model.update_outcomes_async_request_item import UpdateOutcomesAsyncRequestItem +from datadog_api_client.v2.model.update_outcomes_async_type import UpdateOutcomesAsyncType +from datadog_api_client.v2.model.update_resource_evaluation_filters_request import UpdateResourceEvaluationFiltersRequest +from datadog_api_client.v2.model.update_resource_evaluation_filters_request_data import UpdateResourceEvaluationFiltersRequestData +from datadog_api_client.v2.model.update_resource_evaluation_filters_response import UpdateResourceEvaluationFiltersResponse +from datadog_api_client.v2.model.update_resource_evaluation_filters_response_data import UpdateResourceEvaluationFiltersResponseData +from datadog_api_client.v2.model.update_rule_request import UpdateRuleRequest +from datadog_api_client.v2.model.update_rule_request_data import UpdateRuleRequestData +from datadog_api_client.v2.model.update_rule_response import UpdateRuleResponse +from datadog_api_client.v2.model.update_rule_response_data import UpdateRuleResponseData +from datadog_api_client.v2.model.update_ruleset_request import UpdateRulesetRequest +from datadog_api_client.v2.model.update_ruleset_request_data import UpdateRulesetRequestData +from datadog_api_client.v2.model.update_ruleset_request_data_attributes import UpdateRulesetRequestDataAttributes +from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items import UpdateRulesetRequestDataAttributesRulesItems +from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query import UpdateRulesetRequestDataAttributesRulesItemsQuery +from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query_addition import UpdateRulesetRequestDataAttributesRulesItemsQueryAddition +from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_reference_table import UpdateRulesetRequestDataAttributesRulesItemsReferenceTable +from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems +from datadog_api_client.v2.model.update_ruleset_request_data_type import UpdateRulesetRequestDataType +from datadog_api_client.v2.model.update_tenancy_config_data import UpdateTenancyConfigData +from datadog_api_client.v2.model.update_tenancy_config_data_attributes import UpdateTenancyConfigDataAttributes +from datadog_api_client.v2.model.update_tenancy_config_data_attributes_auth_credentials import UpdateTenancyConfigDataAttributesAuthCredentials +from datadog_api_client.v2.model.update_tenancy_config_data_attributes_logs_config import UpdateTenancyConfigDataAttributesLogsConfig +from datadog_api_client.v2.model.update_tenancy_config_data_attributes_metrics_config import UpdateTenancyConfigDataAttributesMetricsConfig +from datadog_api_client.v2.model.update_tenancy_config_data_attributes_regions_config import UpdateTenancyConfigDataAttributesRegionsConfig +from datadog_api_client.v2.model.update_tenancy_config_data_type import UpdateTenancyConfigDataType +from datadog_api_client.v2.model.update_tenancy_config_request import UpdateTenancyConfigRequest +from datadog_api_client.v2.model.update_user_identity_providers_request import UpdateUserIdentityProvidersRequest +from datadog_api_client.v2.model.update_variant_request import UpdateVariantRequest +from datadog_api_client.v2.model.update_workflow_request import UpdateWorkflowRequest +from datadog_api_client.v2.model.update_workflow_response import UpdateWorkflowResponse +from datadog_api_client.v2.model.upsert_allocation_request import UpsertAllocationRequest +from datadog_api_client.v2.model.upsert_and_publish_form_version_data import UpsertAndPublishFormVersionData +from datadog_api_client.v2.model.upsert_and_publish_form_version_data_attributes import UpsertAndPublishFormVersionDataAttributes +from datadog_api_client.v2.model.upsert_and_publish_form_version_request import UpsertAndPublishFormVersionRequest +from datadog_api_client.v2.model.upsert_and_publish_form_version_upsert_params import UpsertAndPublishFormVersionUpsertParams +from datadog_api_client.v2.model.upsert_catalog_entity_request import UpsertCatalogEntityRequest +from datadog_api_client.v2.model.upsert_catalog_entity_response import UpsertCatalogEntityResponse +from datadog_api_client.v2.model.upsert_catalog_entity_response_included_item import UpsertCatalogEntityResponseIncludedItem +from datadog_api_client.v2.model.upsert_catalog_kind_request import UpsertCatalogKindRequest +from datadog_api_client.v2.model.upsert_catalog_kind_response import UpsertCatalogKindResponse +from datadog_api_client.v2.model.upsert_cloud_inventory_sync_config_request import UpsertCloudInventorySyncConfigRequest +from datadog_api_client.v2.model.upsert_cloud_inventory_sync_config_request_attributes import UpsertCloudInventorySyncConfigRequestAttributes +from datadog_api_client.v2.model.upsert_cloud_inventory_sync_config_request_data import UpsertCloudInventorySyncConfigRequestData +from datadog_api_client.v2.model.upsert_form_version_data import UpsertFormVersionData +from datadog_api_client.v2.model.upsert_form_version_data_attributes import UpsertFormVersionDataAttributes +from datadog_api_client.v2.model.upsert_form_version_request import UpsertFormVersionRequest +from datadog_api_client.v2.model.upsert_form_version_upsert_params import UpsertFormVersionUpsertParams +from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_data import UpsertOAuthScopesRestrictionData +from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_data_attributes import UpsertOAuthScopesRestrictionDataAttributes +from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_request import UpsertOAuthScopesRestrictionRequest +from datadog_api_client.v2.model.upsert_o_auth_scopes_restriction_type import UpsertOAuthScopesRestrictionType +from datadog_api_client.v2.model.urgency import Urgency +from datadog_api_client.v2.model.url_param import UrlParam +from datadog_api_client.v2.model.url_param_update import UrlParamUpdate +from datadog_api_client.v2.model.usage_application_security_monitoring_response import UsageApplicationSecurityMonitoringResponse +from datadog_api_client.v2.model.usage_attributes_object import UsageAttributesObject +from datadog_api_client.v2.model.usage_attribution_types_attributes import UsageAttributionTypesAttributes +from datadog_api_client.v2.model.usage_attribution_types_body import UsageAttributionTypesBody +from datadog_api_client.v2.model.usage_attribution_types_response import UsageAttributionTypesResponse +from datadog_api_client.v2.model.usage_attribution_types_type import UsageAttributionTypesType +from datadog_api_client.v2.model.usage_data_object import UsageDataObject +from datadog_api_client.v2.model.usage_lambda_traced_invocations_response import UsageLambdaTracedInvocationsResponse +from datadog_api_client.v2.model.usage_observability_pipelines_response import UsageObservabilityPipelinesResponse +from datadog_api_client.v2.model.usage_summary_available_fields_attributes import UsageSummaryAvailableFieldsAttributes +from datadog_api_client.v2.model.usage_summary_available_fields_body import UsageSummaryAvailableFieldsBody +from datadog_api_client.v2.model.usage_summary_available_fields_response import UsageSummaryAvailableFieldsResponse +from datadog_api_client.v2.model.usage_summary_available_fields_type import UsageSummaryAvailableFieldsType +from datadog_api_client.v2.model.usage_time_series_object import UsageTimeSeriesObject +from datadog_api_client.v2.model.usage_time_series_type import UsageTimeSeriesType +from datadog_api_client.v2.model.user import User +from datadog_api_client.v2.model.user_attributes import UserAttributes +from datadog_api_client.v2.model.user_attributes_status import UserAttributesStatus +from datadog_api_client.v2.model.user_authorized_client_attributes import UserAuthorizedClientAttributes +from datadog_api_client.v2.model.user_authorized_client_data import UserAuthorizedClientData +from datadog_api_client.v2.model.user_authorized_client_relationship_o_auth2_client import UserAuthorizedClientRelationshipOAuth2Client +from datadog_api_client.v2.model.user_authorized_client_relationship_o_auth2_client_data import UserAuthorizedClientRelationshipOAuth2ClientData +from datadog_api_client.v2.model.user_authorized_client_relationship_o_auth2_client_data_type import UserAuthorizedClientRelationshipOAuth2ClientDataType +from datadog_api_client.v2.model.user_authorized_client_relationship_scope_data import UserAuthorizedClientRelationshipScopeData +from datadog_api_client.v2.model.user_authorized_client_relationship_scope_data_type import UserAuthorizedClientRelationshipScopeDataType +from datadog_api_client.v2.model.user_authorized_client_relationship_scopes import UserAuthorizedClientRelationshipScopes +from datadog_api_client.v2.model.user_authorized_client_relationship_user import UserAuthorizedClientRelationshipUser +from datadog_api_client.v2.model.user_authorized_client_relationship_user_data import UserAuthorizedClientRelationshipUserData +from datadog_api_client.v2.model.user_authorized_client_relationship_user_data_type import UserAuthorizedClientRelationshipUserDataType +from datadog_api_client.v2.model.user_authorized_client_relationships import UserAuthorizedClientRelationships +from datadog_api_client.v2.model.user_authorized_client_response import UserAuthorizedClientResponse +from datadog_api_client.v2.model.user_authorized_client_type import UserAuthorizedClientType +from datadog_api_client.v2.model.user_authorized_clients_response import UserAuthorizedClientsResponse +from datadog_api_client.v2.model.user_create_attributes import UserCreateAttributes +from datadog_api_client.v2.model.user_create_data import UserCreateData +from datadog_api_client.v2.model.user_create_request import UserCreateRequest +from datadog_api_client.v2.model.user_invitation_data import UserInvitationData +from datadog_api_client.v2.model.user_invitation_data_attributes import UserInvitationDataAttributes +from datadog_api_client.v2.model.user_invitation_relationships import UserInvitationRelationships +from datadog_api_client.v2.model.user_invitation_response import UserInvitationResponse +from datadog_api_client.v2.model.user_invitation_response_data import UserInvitationResponseData +from datadog_api_client.v2.model.user_invitations_request import UserInvitationsRequest +from datadog_api_client.v2.model.user_invitations_response import UserInvitationsResponse +from datadog_api_client.v2.model.user_invitations_type import UserInvitationsType +from datadog_api_client.v2.model.user_override_identity_provider_attributes import UserOverrideIdentityProviderAttributes +from datadog_api_client.v2.model.user_override_identity_provider_data import UserOverrideIdentityProviderData +from datadog_api_client.v2.model.user_override_identity_provider_data_type import UserOverrideIdentityProviderDataType +from datadog_api_client.v2.model.user_override_identity_providers_response import UserOverrideIdentityProvidersResponse +from datadog_api_client.v2.model.user_relationship_data import UserRelationshipData +from datadog_api_client.v2.model.user_relationship_identity_provider_data import UserRelationshipIdentityProviderData +from datadog_api_client.v2.model.user_relationship_identity_provider_data_type import UserRelationshipIdentityProviderDataType +from datadog_api_client.v2.model.user_relationships import UserRelationships +from datadog_api_client.v2.model.user_resource_type import UserResourceType +from datadog_api_client.v2.model.user_response import UserResponse +from datadog_api_client.v2.model.user_response_included_item import UserResponseIncludedItem +from datadog_api_client.v2.model.user_response_relationships import UserResponseRelationships +from datadog_api_client.v2.model.user_target import UserTarget +from datadog_api_client.v2.model.user_target_type import UserTargetType +from datadog_api_client.v2.model.user_team import UserTeam +from datadog_api_client.v2.model.user_team_attributes import UserTeamAttributes +from datadog_api_client.v2.model.user_team_create import UserTeamCreate +from datadog_api_client.v2.model.user_team_included import UserTeamIncluded +from datadog_api_client.v2.model.user_team_permission import UserTeamPermission +from datadog_api_client.v2.model.user_team_permission_attributes import UserTeamPermissionAttributes +from datadog_api_client.v2.model.user_team_permission_type import UserTeamPermissionType +from datadog_api_client.v2.model.user_team_relationships import UserTeamRelationships +from datadog_api_client.v2.model.user_team_request import UserTeamRequest +from datadog_api_client.v2.model.user_team_response import UserTeamResponse +from datadog_api_client.v2.model.user_team_role import UserTeamRole +from datadog_api_client.v2.model.user_team_team_type import UserTeamTeamType +from datadog_api_client.v2.model.user_team_type import UserTeamType +from datadog_api_client.v2.model.user_team_update import UserTeamUpdate +from datadog_api_client.v2.model.user_team_update_request import UserTeamUpdateRequest +from datadog_api_client.v2.model.user_team_user_type import UserTeamUserType +from datadog_api_client.v2.model.user_teams_response import UserTeamsResponse +from datadog_api_client.v2.model.user_update_attributes import UserUpdateAttributes +from datadog_api_client.v2.model.user_update_data import UserUpdateData +from datadog_api_client.v2.model.user_update_request import UserUpdateRequest +from datadog_api_client.v2.model.users_relationship import UsersRelationship +from datadog_api_client.v2.model.users_response import UsersResponse +from datadog_api_client.v2.model.users_type import UsersType +from datadog_api_client.v2.model.v2_event import V2Event +from datadog_api_client.v2.model.v2_event_attributes import V2EventAttributes +from datadog_api_client.v2.model.v2_event_attributes_attributes import V2EventAttributesAttributes +from datadog_api_client.v2.model.v2_event_response import V2EventResponse +from datadog_api_client.v2.model.validate_api_key_response import ValidateAPIKeyResponse +from datadog_api_client.v2.model.validate_api_key_status import ValidateAPIKeyStatus +from datadog_api_client.v2.model.validate_v2_attributes import ValidateV2Attributes +from datadog_api_client.v2.model.validate_v2_data import ValidateV2Data +from datadog_api_client.v2.model.validate_v2_response import ValidateV2Response +from datadog_api_client.v2.model.validate_v2_type import ValidateV2Type +from datadog_api_client.v2.model.validation_error import ValidationError +from datadog_api_client.v2.model.validation_error_meta import ValidationErrorMeta +from datadog_api_client.v2.model.validation_response import ValidationResponse +from datadog_api_client.v2.model.value_type import ValueType +from datadog_api_client.v2.model.variant import Variant +from datadog_api_client.v2.model.variant_weight import VariantWeight +from datadog_api_client.v2.model.variant_weight_request import VariantWeightRequest +from datadog_api_client.v2.model.version_history_update import VersionHistoryUpdate +from datadog_api_client.v2.model.version_history_update_type import VersionHistoryUpdateType +from datadog_api_client.v2.model.viewership_history_session_array import ViewershipHistorySessionArray +from datadog_api_client.v2.model.viewership_history_session_data import ViewershipHistorySessionData +from datadog_api_client.v2.model.viewership_history_session_data_attributes import ViewershipHistorySessionDataAttributes +from datadog_api_client.v2.model.viewership_history_session_data_type import ViewershipHistorySessionDataType +from datadog_api_client.v2.model.virus_total_api_key import VirusTotalAPIKey +from datadog_api_client.v2.model.virus_total_api_key_type import VirusTotalAPIKeyType +from datadog_api_client.v2.model.virus_total_api_key_update import VirusTotalAPIKeyUpdate +from datadog_api_client.v2.model.virus_total_credentials import VirusTotalCredentials +from datadog_api_client.v2.model.virus_total_credentials_update import VirusTotalCredentialsUpdate +from datadog_api_client.v2.model.virus_total_integration import VirusTotalIntegration +from datadog_api_client.v2.model.virus_total_integration_type import VirusTotalIntegrationType +from datadog_api_client.v2.model.virus_total_integration_update import VirusTotalIntegrationUpdate +from datadog_api_client.v2.model.vulnerabilities_type import VulnerabilitiesType +from datadog_api_client.v2.model.vulnerability import Vulnerability +from datadog_api_client.v2.model.vulnerability_advisory import VulnerabilityAdvisory +from datadog_api_client.v2.model.vulnerability_attributes import VulnerabilityAttributes +from datadog_api_client.v2.model.vulnerability_cvss import VulnerabilityCvss +from datadog_api_client.v2.model.vulnerability_dependency_locations import VulnerabilityDependencyLocations +from datadog_api_client.v2.model.vulnerability_ecosystem import VulnerabilityEcosystem +from datadog_api_client.v2.model.vulnerability_relationships import VulnerabilityRelationships +from datadog_api_client.v2.model.vulnerability_relationships_affects import VulnerabilityRelationshipsAffects +from datadog_api_client.v2.model.vulnerability_relationships_affects_data import VulnerabilityRelationshipsAffectsData +from datadog_api_client.v2.model.vulnerability_risks import VulnerabilityRisks +from datadog_api_client.v2.model.vulnerability_severity import VulnerabilitySeverity +from datadog_api_client.v2.model.vulnerability_status import VulnerabilityStatus +from datadog_api_client.v2.model.vulnerability_tool import VulnerabilityTool +from datadog_api_client.v2.model.vulnerability_type import VulnerabilityType +from datadog_api_client.v2.model.watch import Watch +from datadog_api_client.v2.model.watch_data import WatchData +from datadog_api_client.v2.model.watch_data_attributes import WatchDataAttributes +from datadog_api_client.v2.model.watch_data_type import WatchDataType +from datadog_api_client.v2.model.watcher_array import WatcherArray +from datadog_api_client.v2.model.watcher_data import WatcherData +from datadog_api_client.v2.model.watcher_data_attributes import WatcherDataAttributes +from datadog_api_client.v2.model.watcher_data_type import WatcherDataType +from datadog_api_client.v2.model.web_integration_account_create_request import WebIntegrationAccountCreateRequest +from datadog_api_client.v2.model.web_integration_account_create_request_attributes import WebIntegrationAccountCreateRequestAttributes +from datadog_api_client.v2.model.web_integration_account_create_request_data import WebIntegrationAccountCreateRequestData +from datadog_api_client.v2.model.web_integration_account_response import WebIntegrationAccountResponse +from datadog_api_client.v2.model.web_integration_account_response_attributes import WebIntegrationAccountResponseAttributes +from datadog_api_client.v2.model.web_integration_account_response_data import WebIntegrationAccountResponseData +from datadog_api_client.v2.model.web_integration_account_secrets import WebIntegrationAccountSecrets +from datadog_api_client.v2.model.web_integration_account_settings import WebIntegrationAccountSettings +from datadog_api_client.v2.model.web_integration_account_type import WebIntegrationAccountType +from datadog_api_client.v2.model.web_integration_account_update_request import WebIntegrationAccountUpdateRequest +from datadog_api_client.v2.model.web_integration_account_update_request_attributes import WebIntegrationAccountUpdateRequestAttributes +from datadog_api_client.v2.model.web_integration_account_update_request_data import WebIntegrationAccountUpdateRequestData +from datadog_api_client.v2.model.web_integration_accounts_response import WebIntegrationAccountsResponse +from datadog_api_client.v2.model.webhooks_auth_method_attributes import WebhooksAuthMethodAttributes +from datadog_api_client.v2.model.webhooks_auth_method_protocol import WebhooksAuthMethodProtocol +from datadog_api_client.v2.model.webhooks_auth_method_relationships import WebhooksAuthMethodRelationships +from datadog_api_client.v2.model.webhooks_auth_method_response_data import WebhooksAuthMethodResponseData +from datadog_api_client.v2.model.webhooks_auth_method_type import WebhooksAuthMethodType +from datadog_api_client.v2.model.webhooks_auth_methods_response import WebhooksAuthMethodsResponse +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_create_attributes import WebhooksOAuth2ClientCredentialsCreateAttributes +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_create_data import WebhooksOAuth2ClientCredentialsCreateData +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_create_request import WebhooksOAuth2ClientCredentialsCreateRequest +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_relationship import WebhooksOAuth2ClientCredentialsRelationship +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_relationship_data import WebhooksOAuth2ClientCredentialsRelationshipData +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response import WebhooksOAuth2ClientCredentialsResponse +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response_attributes import WebhooksOAuth2ClientCredentialsResponseAttributes +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_response_data import WebhooksOAuth2ClientCredentialsResponseData +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_type import WebhooksOAuth2ClientCredentialsType +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_update_attributes import WebhooksOAuth2ClientCredentialsUpdateAttributes +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_update_data import WebhooksOAuth2ClientCredentialsUpdateData +from datadog_api_client.v2.model.webhooks_o_auth2_client_credentials_update_request import WebhooksOAuth2ClientCredentialsUpdateRequest +from datadog_api_client.v2.model.weekday import Weekday +from datadog_api_client.v2.model.widget_annotations_map import WidgetAnnotationsMap +from datadog_api_client.v2.model.widget_attributes import WidgetAttributes +from datadog_api_client.v2.model.widget_data import WidgetData +from datadog_api_client.v2.model.widget_definition import WidgetDefinition +from datadog_api_client.v2.model.widget_experience_type import WidgetExperienceType +from datadog_api_client.v2.model.widget_included_user import WidgetIncludedUser +from datadog_api_client.v2.model.widget_included_user_attributes import WidgetIncludedUserAttributes +from datadog_api_client.v2.model.widget_list_response import WidgetListResponse +from datadog_api_client.v2.model.widget_live_span import WidgetLiveSpan +from datadog_api_client.v2.model.widget_relationship_data import WidgetRelationshipData +from datadog_api_client.v2.model.widget_relationship_item import WidgetRelationshipItem +from datadog_api_client.v2.model.widget_relationships import WidgetRelationships +from datadog_api_client.v2.model.widget_response import WidgetResponse +from datadog_api_client.v2.model.widget_search_meta import WidgetSearchMeta +from datadog_api_client.v2.model.widget_type import WidgetType +from datadog_api_client.v2.model.workflow_data import WorkflowData +from datadog_api_client.v2.model.workflow_data_attributes import WorkflowDataAttributes +from datadog_api_client.v2.model.workflow_data_relationships import WorkflowDataRelationships +from datadog_api_client.v2.model.workflow_data_type import WorkflowDataType +from datadog_api_client.v2.model.workflow_data_update import WorkflowDataUpdate +from datadog_api_client.v2.model.workflow_data_update_attributes import WorkflowDataUpdateAttributes +from datadog_api_client.v2.model.workflow_instance_create_meta import WorkflowInstanceCreateMeta +from datadog_api_client.v2.model.workflow_instance_create_request import WorkflowInstanceCreateRequest +from datadog_api_client.v2.model.workflow_instance_create_response import WorkflowInstanceCreateResponse +from datadog_api_client.v2.model.workflow_instance_create_response_data import WorkflowInstanceCreateResponseData +from datadog_api_client.v2.model.workflow_instance_list_item import WorkflowInstanceListItem +from datadog_api_client.v2.model.workflow_list_instances_response import WorkflowListInstancesResponse +from datadog_api_client.v2.model.workflow_list_instances_response_meta import WorkflowListInstancesResponseMeta +from datadog_api_client.v2.model.workflow_list_instances_response_meta_page import WorkflowListInstancesResponseMetaPage +from datadog_api_client.v2.model.workflow_list_item import WorkflowListItem +from datadog_api_client.v2.model.workflow_list_item_attributes import WorkflowListItemAttributes +from datadog_api_client.v2.model.workflow_trigger_wrapper import WorkflowTriggerWrapper +from datadog_api_client.v2.model.workflow_user_relationship import WorkflowUserRelationship +from datadog_api_client.v2.model.workflow_user_relationship_data import WorkflowUserRelationshipData +from datadog_api_client.v2.model.workflow_user_relationship_type import WorkflowUserRelationshipType +from datadog_api_client.v2.model.worklflow_cancel_instance_response import WorklflowCancelInstanceResponse +from datadog_api_client.v2.model.worklflow_cancel_instance_response_data import WorklflowCancelInstanceResponseData +from datadog_api_client.v2.model.worklflow_get_instance_response import WorklflowGetInstanceResponse +from datadog_api_client.v2.model.worklflow_get_instance_response_data import WorklflowGetInstanceResponseData +from datadog_api_client.v2.model.worklflow_get_instance_response_data_attributes import WorklflowGetInstanceResponseDataAttributes +from datadog_api_client.v2.model.x_ray_services_include_all import XRayServicesIncludeAll +from datadog_api_client.v2.model.x_ray_services_include_only import XRayServicesIncludeOnly +from datadog_api_client.v2.model.x_ray_services_list import XRayServicesList +from datadog_api_client.v2.model.zoom_configuration_reference import ZoomConfigurationReference +from datadog_api_client.v2.model.zoom_configuration_reference_data import ZoomConfigurationReferenceData + +__all__ = [ + "APIErrorResponse", + "APIKeyCreateAttributes", + "APIKeyCreateData", + "APIKeyCreateRequest", + "APIKeyRelationships", + "APIKeyResponse", + "APIKeyResponseIncludedItem", + "APIKeyUpdateAttributes", + "APIKeyUpdateData", + "APIKeyUpdateRequest", + "APIKeysResponse", + "APIKeysResponseMeta", + "APIKeysResponseMetaPage", + "APIKeysSort", + "APIKeysType", + "APITrigger", + "APITriggerWrapper", + "APMSpanErrorFlag", + "APMTraceSpan", + "AWSAccountCreateRequest", + "AWSAccountCreateRequestAttributes", + "AWSAccountCreateRequestData", + "AWSAccountPartition", + "AWSAccountResponse", + "AWSAccountResponseAttributes", + "AWSAccountResponseData", + "AWSAccountType", + "AWSAccountUpdateRequest", + "AWSAccountUpdateRequestAttributes", + "AWSAccountUpdateRequestData", + "AWSAccountsResponse", + "AWSAssumeRole", + "AWSAssumeRoleType", + "AWSAssumeRoleUpdate", + "AWSAuthConfig", + "AWSAuthConfigKeys", + "AWSAuthConfigRole", + "AWSCcmConfig", + "AWSCcmConfigRequest", + "AWSCcmConfigRequestAttributes", + "AWSCcmConfigRequestData", + "AWSCcmConfigResponse", + "AWSCcmConfigResponseAttributes", + "AWSCcmConfigResponseData", + "AWSCcmConfigType", + "AWSCcmConfigValidationIssue", + "AWSCcmConfigValidationIssueCode", + "AWSCcmConfigValidationRequest", + "AWSCcmConfigValidationRequestAttributes", + "AWSCcmConfigValidationRequestData", + "AWSCcmConfigValidationResponse", + "AWSCcmConfigValidationResponseAttributes", + "AWSCcmConfigValidationResponseData", + "AWSCcmConfigValidationType", + "AWSCloudAuthPersonaMappingAttributesResponse", + "AWSCloudAuthPersonaMappingCreateAttributes", + "AWSCloudAuthPersonaMappingCreateData", + "AWSCloudAuthPersonaMappingCreateRequest", + "AWSCloudAuthPersonaMappingDataResponse", + "AWSCloudAuthPersonaMappingResponse", + "AWSCloudAuthPersonaMappingType", + "AWSCloudAuthPersonaMappingsResponse", + "AWSCredentials", + "AWSCredentialsUpdate", + "AWSEventBridgeAccountConfiguration", + "AWSEventBridgeCreateRequest", + "AWSEventBridgeCreateRequestAttributes", + "AWSEventBridgeCreateRequestData", + "AWSEventBridgeCreateResponse", + "AWSEventBridgeCreateResponseAttributes", + "AWSEventBridgeCreateResponseData", + "AWSEventBridgeCreateStatus", + "AWSEventBridgeDeleteRequest", + "AWSEventBridgeDeleteRequestAttributes", + "AWSEventBridgeDeleteRequestData", + "AWSEventBridgeDeleteResponse", + "AWSEventBridgeDeleteResponseAttributes", + "AWSEventBridgeDeleteResponseData", + "AWSEventBridgeDeleteStatus", + "AWSEventBridgeListResponse", + "AWSEventBridgeListResponseAttributes", + "AWSEventBridgeListResponseData", + "AWSEventBridgeSource", + "AWSEventBridgeType", + "AWSIntegration", + "AWSIntegrationIamPermissionsResponse", + "AWSIntegrationIamPermissionsResponseAttributes", + "AWSIntegrationIamPermissionsResponseData", + "AWSIntegrationIamPermissionsResponseDataType", + "AWSIntegrationType", + "AWSIntegrationUpdate", + "AWSLambdaForwarderConfig", + "AWSLambdaForwarderConfigLogSourceConfig", + "AWSLogSourceTagFilter", + "AWSLogsConfig", + "AWSLogsServicesResponse", + "AWSLogsServicesResponseAttributes", + "AWSLogsServicesResponseData", + "AWSLogsServicesResponseDataType", + "AWSMetricNameFilterPreviewDDName", + "AWSMetricNameFilterPreviewFilterMatch", + "AWSMetricNameFilterPreviewMetric", + "AWSMetricNameFilterPreviewNamespace", + "AWSMetricNameFilterPreviewRequest", + "AWSMetricNameFilterPreviewRequestAttributes", + "AWSMetricNameFilterPreviewRequestData", + "AWSMetricNameFilterPreviewResponse", + "AWSMetricNameFilterPreviewResponseAttributes", + "AWSMetricNameFilterPreviewResponseData", + "AWSMetricNameFilterPreviewType", + "AWSMetricNameFilters", + "AWSMetricNameFiltersExcludeOnly", + "AWSMetricNameFiltersIncludeOnly", + "AWSMetricsConfig", + "AWSNamespaceFilters", + "AWSNamespaceFiltersExcludeOnly", + "AWSNamespaceFiltersIncludeOnly", + "AWSNamespaceTagFilter", + "AWSNamespacesResponse", + "AWSNamespacesResponseAttributes", + "AWSNamespacesResponseData", + "AWSNamespacesResponseDataType", + "AWSNewExternalIDResponse", + "AWSNewExternalIDResponseAttributes", + "AWSNewExternalIDResponseData", + "AWSNewExternalIDResponseDataType", + "AWSRegions", + "AWSRegionsIncludeAll", + "AWSRegionsIncludeOnly", + "AWSResourcesConfig", + "AWSTracesConfig", + "AccessTokenListItem", + "AccessTokenListItemRelationships", + "AccessTokenOwnerType", + "AccessTokensType", + "AccountFilteringConfig", + "AccountFilters", + "AccountFiltersAttributes", + "AccountFiltersPatchData", + "AccountFiltersPatchRequest", + "AccountFiltersPatchRequestAttributes", + "AccountFiltersPatchRequestType", + "AccountFiltersResponse", + "AccountFiltersType", + "ActionConnectionAttributes", + "ActionConnectionAttributesUpdate", + "ActionConnectionData", + "ActionConnectionDataType", + "ActionConnectionDataUpdate", + "ActionConnectionIntegration", + "ActionConnectionIntegrationUpdate", + "ActionQuery", + "ActionQueryCondition", + "ActionQueryDebounceInMs", + "ActionQueryMockedOutputs", + "ActionQueryMockedOutputsEnabled", + "ActionQueryMockedOutputsObject", + "ActionQueryOnlyTriggerManually", + "ActionQueryPollingIntervalInMs", + "ActionQueryProperties", + "ActionQueryRequiresConfirmation", + "ActionQueryShowToastOnError", + "ActionQuerySpec", + "ActionQuerySpecConnectionGroup", + "ActionQuerySpecInput", + "ActionQuerySpecInputs", + "ActionQuerySpecObject", + "ActionQueryType", + "ActiveBillingDimensionsAttributes", + "ActiveBillingDimensionsBody", + "ActiveBillingDimensionsResponse", + "ActiveBillingDimensionsType", + "AddMemberTeamRequest", + "Advisory", + "AgentTrigger", + "AgentTriggerWrapper", + "AggregatedHighFrozenFrameRate", + "AggregatedHighScriptEval", + "AggregatedLongTasksByInvokerType", + "AggregatedLongTasksRequest", + "AggregatedLongTasksRequestAttributes", + "AggregatedLongTasksRequestData", + "AggregatedLongTasksRequestType", + "AggregatedLongTasksResponse", + "AggregatedLongTasksResponseAttributes", + "AggregatedLongTasksResponseData", + "AggregatedLowCacheHitRate", + "AggregatedMobileScrollFriction", + "AggregatedResource", + "AggregatedResourceTimingBreakdown", + "AggregatedSignalsProblemsRequest", + "AggregatedSignalsProblemsRequestAttributes", + "AggregatedSignalsProblemsRequestData", + "AggregatedSignalsProblemsRequestType", + "AggregatedSignalsProblemsResponse", + "AggregatedSignalsProblemsResponseAttributes", + "AggregatedSignalsProblemsResponseData", + "AggregatedSlowFCPHighBytes", + "AggregatedSlowInteractionLongTask", + "AggregatedUncompressedResource", + "AggregatedWaterfallPerformanceCriteria", + "AggregatedWaterfallPerformanceCriteriaMetric", + "AggregatedWaterfallRequest", + "AggregatedWaterfallRequestAttributes", + "AggregatedWaterfallRequestData", + "AggregatedWaterfallRequestType", + "AggregatedWaterfallResponse", + "AggregatedWaterfallResponseAttributes", + "AggregatedWaterfallResponseData", + "AiCustomRuleDataType", + "AiCustomRuleItem", + "AiCustomRuleRequest", + "AiCustomRuleRequestAttributes", + "AiCustomRuleRequestData", + "AiCustomRuleResponse", + "AiCustomRuleResponseData", + "AiCustomRuleRevisionDataType", + "AiCustomRuleRevisionExecutionMode", + "AiCustomRuleRevisionRequest", + "AiCustomRuleRevisionRequestAttributes", + "AiCustomRuleRevisionRequestData", + "AiCustomRuleRevisionResponse", + "AiCustomRuleRevisionResponseAttributes", + "AiCustomRuleRevisionResponseData", + "AiCustomRuleRevisionsResponse", + "AiCustomRulesetDataType", + "AiCustomRulesetRequest", + "AiCustomRulesetRequestAttributes", + "AiCustomRulesetRequestData", + "AiCustomRulesetResponse", + "AiCustomRulesetResponseAttributes", + "AiCustomRulesetResponseData", + "AiCustomRulesetUpdateAttributes", + "AiCustomRulesetUpdateData", + "AiCustomRulesetUpdateRequest", + "AiCustomRulesetsResponse", + "AiMemoryViolationResultDataType", + "AiMemoryViolationResultRequest", + "AiMemoryViolationResultRequestAttributes", + "AiMemoryViolationResultRequestData", + "AiMemoryViolationResultResponseAttributes", + "AiMemoryViolationResultResponseData", + "AiMemoryViolationResultsResponse", + "AiMemoryViolationType", + "AiPromptDataType", + "AiPromptResponseAttributes", + "AiPromptResponseData", + "AiPromptsResponse", + "AlertEventAttributes", + "AlertEventAttributesLinksItem", + "AlertEventAttributesLinksItemCategory", + "AlertEventAttributesPriority", + "AlertEventAttributesStatus", + "AlertEventCustomAttributes", + "AlertEventCustomAttributesCustom", + "AlertEventCustomAttributesLinksItems", + "AlertEventCustomAttributesLinksItemsCategory", + "AlertEventCustomAttributesPriority", + "AlertEventCustomAttributesStatus", + "Allocation", + "AllocationDataRequest", + "AllocationDataResponse", + "AllocationDataType", + "AllocationExposureGuardrailTrigger", + "AllocationExposureRolloutStep", + "AllocationExposureSchedule", + "AllocationExposureScheduleData", + "AllocationExposureScheduleDataType", + "AllocationExposureScheduleResponse", + "AllocationResponse", + "AllocationType", + "AnalysisEdit", + "AnalysisEditType", + "AnalysisFix", + "AnalysisPosition", + "AnalysisRequest", + "AnalysisRequestData", + "AnalysisRequestDataAttributes", + "AnalysisRequestDataType", + "AnalysisRequestRule", + "AnalysisResponse", + "AnalysisResponseData", + "AnalysisResponseDataAttributes", + "AnalysisResponseDataType", + "AnalysisRuleResponse", + "AnalysisViolation", + "Annotation", + "AnnotationAttributes", + "AnnotationColor", + "AnnotationCreateAttributes", + "AnnotationCreateRequest", + "AnnotationData", + "AnnotationDisplay", + "AnnotationDisplayBounds", + "AnnotationInPage", + "AnnotationKind", + "AnnotationMarkdownTextAnnotation", + "AnnotationRequestData", + "AnnotationResponse", + "AnnotationType", + "AnnotationUpdateRequest", + "AnnotationsInPageMap", + "AnnotationsResponse", + "AnonymizeUserError", + "AnonymizeUsersRequest", + "AnonymizeUsersRequestAttributes", + "AnonymizeUsersRequestData", + "AnonymizeUsersRequestType", + "AnonymizeUsersResponse", + "AnonymizeUsersResponseAttributes", + "AnonymizeUsersResponseData", + "AnonymizeUsersResponseType", + "AnthropicAPIKey", + "AnthropicAPIKeyType", + "AnthropicAPIKeyUpdate", + "AnthropicCredentials", + "AnthropicCredentialsUpdate", + "AnthropicIntegration", + "AnthropicIntegrationType", + "AnthropicIntegrationUpdate", + "AnyValue", + "AnyValueItem", + "AnyValueObject", + "ApmDependencyStatName", + "ApmDependencyStatsDataSource", + "ApmDependencyStatsQuery", + "ApmMetricsDataSource", + "ApmMetricsQuery", + "ApmMetricsSpanKind", + "ApmMetricsStat", + "ApmResourceStatName", + "ApmResourceStatsDataSource", + "ApmResourceStatsQuery", + "ApmRetentionFilterType", + "AppBuilderEvent", + "AppBuilderEventName", + "AppBuilderEventType", + "AppBuilderListTagsResponse", + "AppDefinitionType", + "AppDeploymentType", + "AppFavoriteType", + "AppKeyRegistrationData", + "AppKeyRegistrationDataType", + "AppMeta", + "AppProtectionLevel", + "AppProtectionLevelType", + "AppRelationship", + "AppSelfServiceType", + "AppTagsType", + "AppTriggerWrapper", + "AppVersion", + "AppVersionAttributes", + "AppVersionNameType", + "AppVersionType", + "ApplicationKeyCreateAttributes", + "ApplicationKeyCreateData", + "ApplicationKeyCreateRequest", + "ApplicationKeyRelationships", + "ApplicationKeyResponse", + "ApplicationKeyResponseIncludedItem", + "ApplicationKeyResponseMeta", + "ApplicationKeyResponseMetaPage", + "ApplicationKeyUpdateAttributes", + "ApplicationKeyUpdateData", + "ApplicationKeyUpdateRequest", + "ApplicationKeysSort", + "ApplicationKeysType", + "ApplicationSecurityPolicyAttributes", + "ApplicationSecurityPolicyCreateAttributes", + "ApplicationSecurityPolicyCreateData", + "ApplicationSecurityPolicyCreateRequest", + "ApplicationSecurityPolicyData", + "ApplicationSecurityPolicyListResponse", + "ApplicationSecurityPolicyMetadata", + "ApplicationSecurityPolicyResponse", + "ApplicationSecurityPolicyRuleOverride", + "ApplicationSecurityPolicyRulesetOverride", + "ApplicationSecurityPolicyScope", + "ApplicationSecurityPolicyType", + "ApplicationSecurityPolicyUpdateAttributes", + "ApplicationSecurityPolicyUpdateData", + "ApplicationSecurityPolicyUpdateRequest", + "ApplicationSecurityServiceAttributes", + "ApplicationSecurityServiceResource", + "ApplicationSecurityServiceType", + "ApplicationSecurityServicesMetadata", + "ApplicationSecurityServicesResponse", + "ApplicationSecurityWafCustomRuleAction", + "ApplicationSecurityWafCustomRuleActionAction", + "ApplicationSecurityWafCustomRuleActionParameters", + "ApplicationSecurityWafCustomRuleAttributes", + "ApplicationSecurityWafCustomRuleCondition", + "ApplicationSecurityWafCustomRuleConditionInput", + "ApplicationSecurityWafCustomRuleConditionInputAddress", + "ApplicationSecurityWafCustomRuleConditionOperator", + "ApplicationSecurityWafCustomRuleConditionOptions", + "ApplicationSecurityWafCustomRuleConditionParameters", + "ApplicationSecurityWafCustomRuleConditionParametersType", + "ApplicationSecurityWafCustomRuleCreateAttributes", + "ApplicationSecurityWafCustomRuleCreateData", + "ApplicationSecurityWafCustomRuleCreateRequest", + "ApplicationSecurityWafCustomRuleData", + "ApplicationSecurityWafCustomRuleListResponse", + "ApplicationSecurityWafCustomRuleMetadata", + "ApplicationSecurityWafCustomRuleResponse", + "ApplicationSecurityWafCustomRuleScope", + "ApplicationSecurityWafCustomRuleTags", + "ApplicationSecurityWafCustomRuleTagsCategory", + "ApplicationSecurityWafCustomRuleType", + "ApplicationSecurityWafCustomRuleUpdateAttributes", + "ApplicationSecurityWafCustomRuleUpdateData", + "ApplicationSecurityWafCustomRuleUpdateRequest", + "ApplicationSecurityWafExclusionFilterAttributes", + "ApplicationSecurityWafExclusionFilterCreateAttributes", + "ApplicationSecurityWafExclusionFilterCreateData", + "ApplicationSecurityWafExclusionFilterCreateRequest", + "ApplicationSecurityWafExclusionFilterMetadata", + "ApplicationSecurityWafExclusionFilterOnMatch", + "ApplicationSecurityWafExclusionFilterResource", + "ApplicationSecurityWafExclusionFilterResponse", + "ApplicationSecurityWafExclusionFilterRulesTarget", + "ApplicationSecurityWafExclusionFilterRulesTargetTags", + "ApplicationSecurityWafExclusionFilterScope", + "ApplicationSecurityWafExclusionFilterType", + "ApplicationSecurityWafExclusionFilterUpdateAttributes", + "ApplicationSecurityWafExclusionFilterUpdateData", + "ApplicationSecurityWafExclusionFilterUpdateRequest", + "ApplicationSecurityWafExclusionFiltersResponse", + "AppsSortField", + "ArbitraryCostUpsertRequest", + "ArbitraryCostUpsertRequestData", + "ArbitraryCostUpsertRequestDataAttributes", + "ArbitraryCostUpsertRequestDataAttributesCostsToAllocateItems", + "ArbitraryCostUpsertRequestDataAttributesStrategy", + "ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByFiltersItems", + "ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItems", + "ArbitraryCostUpsertRequestDataAttributesStrategyAllocatedByItemsAllocatedTagsItems", + "ArbitraryCostUpsertRequestDataAttributesStrategyBasedOnCostsItems", + "ArbitraryCostUpsertRequestDataAttributesStrategyEvaluateGroupedByFiltersItems", + "ArbitraryCostUpsertRequestDataType", + "ArbitraryRuleResponse", + "ArbitraryRuleResponseArray", + "ArbitraryRuleResponseArrayMeta", + "ArbitraryRuleResponseData", + "ArbitraryRuleResponseDataAttributes", + "ArbitraryRuleResponseDataAttributesCostsToAllocateItems", + "ArbitraryRuleResponseDataAttributesStrategy", + "ArbitraryRuleResponseDataAttributesStrategyAllocatedByFiltersItems", + "ArbitraryRuleResponseDataAttributesStrategyAllocatedByItems", + "ArbitraryRuleResponseDataAttributesStrategyAllocatedByItemsAllocatedTagsItems", + "ArbitraryRuleResponseDataAttributesStrategyBasedOnCostsItems", + "ArbitraryRuleResponseDataAttributesStrategyEvaluateGroupedByFiltersItems", + "ArbitraryRuleResponseDataType", + "ArbitraryRuleStatusResponseArray", + "ArbitraryRuleStatusResponseData", + "ArbitraryRuleStatusResponseDataAttributes", + "ArbitraryRuleStatusResponseDataType", + "Argument", + "AsanaAccessToken", + "AsanaAccessTokenType", + "AsanaAccessTokenUpdate", + "AsanaCredentials", + "AsanaCredentialsUpdate", + "AsanaIntegration", + "AsanaIntegrationType", + "AsanaIntegrationUpdate", + "Asset", + "AssetAttributes", + "AssetEntityType", + "AssetOperatingSystem", + "AssetRisks", + "AssetType", + "AssetVersion", + "AssignSeatsUserRequest", + "AssignSeatsUserRequestData", + "AssignSeatsUserRequestDataAttributes", + "AssignSeatsUserResponse", + "AssignSeatsUserResponseData", + "AssignSeatsUserResponseDataAttributes", + "AssigneeDataType", + "AssigneeRequest", + "AssigneeRequestData", + "AssigneeRequestDataAttributes", + "AssigneeRequestDataRelationships", + "AssigneeResponse", + "AssigneeResponseData", + "AssigneeResponseDataAttributes", + "AssigneeResponseMeta", + "AssignmentResult", + "AttachCaseRequest", + "AttachCaseRequestData", + "AttachCaseRequestDataRelationships", + "AttachJiraIssueRequest", + "AttachJiraIssueRequestData", + "AttachJiraIssueRequestDataAttributes", + "AttachJiraIssueRequestDataRelationships", + "AttachLinearIssueRequest", + "AttachLinearIssueRequestData", + "AttachLinearIssueRequestDataAttributes", + "AttachLinearIssueRequestDataRelationships", + "AttachServiceNowTicketRequest", + "AttachServiceNowTicketRequestData", + "AttachServiceNowTicketRequestDataAttributes", + "AttachServiceNowTicketRequestDataRelationships", + "Attachment", + "AttachmentArray", + "AttachmentData", + "AttachmentDataAttributes", + "AttachmentDataAttributesAttachment", + "AttachmentDataAttributesAttachmentType", + "AttachmentDataRelationships", + "AttachmentIncluded", + "AuditLogsEvent", + "AuditLogsEventAttributes", + "AuditLogsEventType", + "AuditLogsEventsResponse", + "AuditLogsQueryFilter", + "AuditLogsQueryOptions", + "AuditLogsQueryPageOptions", + "AuditLogsResponseLinks", + "AuditLogsResponseMetadata", + "AuditLogsResponsePage", + "AuditLogsResponseStatus", + "AuditLogsSearchEventsRequest", + "AuditLogsSort", + "AuditLogsWarning", + "AuthNMapping", + "AuthNMappingAttributes", + "AuthNMappingCreateAttributes", + "AuthNMappingCreateData", + "AuthNMappingCreateRelationships", + "AuthNMappingCreateRequest", + "AuthNMappingIncluded", + "AuthNMappingRelationshipToRole", + "AuthNMappingRelationshipToTeam", + "AuthNMappingRelationships", + "AuthNMappingResourceType", + "AuthNMappingResponse", + "AuthNMappingTeam", + "AuthNMappingTeamAttributes", + "AuthNMappingUpdateAttributes", + "AuthNMappingUpdateData", + "AuthNMappingUpdateRelationships", + "AuthNMappingUpdateRequest", + "AuthNMappingsResponse", + "AuthNMappingsSort", + "AuthNMappingsType", + "AutoCloseInactiveCases", + "AutoTransitionAssignedCases", + "AutomationRule", + "AutomationRuleAction", + "AutomationRuleActionData", + "AutomationRuleActionType", + "AutomationRuleActorType", + "AutomationRuleAttributes", + "AutomationRuleCreate", + "AutomationRuleCreateAttributes", + "AutomationRuleCreateRequest", + "AutomationRuleCreatedBy", + "AutomationRuleModifiedBy", + "AutomationRuleRelationships", + "AutomationRuleResponse", + "AutomationRuleScope", + "AutomationRuleTrigger", + "AutomationRuleTriggerData", + "AutomationRuleTriggerType", + "AutomationRuleUpdate", + "AutomationRuleUpdateRequest", + "AutomationRulesResponse", + "AwsCURConfig", + "AwsCURConfigAttributes", + "AwsCURConfigPatchData", + "AwsCURConfigPatchRequest", + "AwsCURConfigPatchRequestAttributes", + "AwsCURConfigPatchRequestType", + "AwsCURConfigPostData", + "AwsCURConfigPostRequest", + "AwsCURConfigPostRequestAttributes", + "AwsCURConfigPostRequestType", + "AwsCURConfigType", + "AwsCURConfigsResponse", + "AwsCurConfigResponse", + "AwsCurConfigResponseData", + "AwsCurConfigResponseDataAttributes", + "AwsCurConfigResponseDataAttributesAccountFilters", + "AwsCurConfigResponseDataType", + "AwsOnDemandAttributes", + "AwsOnDemandCreateAttributes", + "AwsOnDemandCreateData", + "AwsOnDemandCreateRequest", + "AwsOnDemandData", + "AwsOnDemandListResponse", + "AwsOnDemandResponse", + "AwsOnDemandType", + "AwsScanOptionsAttributes", + "AwsScanOptionsCreateAttributes", + "AwsScanOptionsCreateData", + "AwsScanOptionsCreateRequest", + "AwsScanOptionsData", + "AwsScanOptionsListResponse", + "AwsScanOptionsResponse", + "AwsScanOptionsType", + "AwsScanOptionsUpdateAttributes", + "AwsScanOptionsUpdateData", + "AwsScanOptionsUpdateRequest", + "AzureCredentials", + "AzureCredentialsUpdate", + "AzureIntegration", + "AzureIntegrationType", + "AzureIntegrationUpdate", + "AzureScanOptions", + "AzureScanOptionsArray", + "AzureScanOptionsData", + "AzureScanOptionsDataAttributes", + "AzureScanOptionsDataType", + "AzureScanOptionsInputUpdate", + "AzureScanOptionsInputUpdateData", + "AzureScanOptionsInputUpdateDataAttributes", + "AzureScanOptionsInputUpdateDataType", + "AzureStorageDestination", + "AzureStorageDestinationType", + "AzureTenant", + "AzureTenantType", + "AzureTenantUpdate", + "AzureUCConfig", + "AzureUCConfigPair", + "AzureUCConfigPairAttributes", + "AzureUCConfigPairType", + "AzureUCConfigPairsResponse", + "AzureUCConfigPatchData", + "AzureUCConfigPatchRequest", + "AzureUCConfigPatchRequestAttributes", + "AzureUCConfigPatchRequestType", + "AzureUCConfigPostData", + "AzureUCConfigPostRequest", + "AzureUCConfigPostRequestAttributes", + "AzureUCConfigPostRequestType", + "AzureUCConfigsResponse", + "BatchDeleteRowsRequestArray", + "BatchRowsQueryDataType", + "BatchRowsQueryRequest", + "BatchRowsQueryRequestData", + "BatchRowsQueryRequestDataAttributes", + "BatchRowsQueryResponse", + "BatchRowsQueryResponseData", + "BatchRowsQueryResponseDataRelationships", + "BatchRowsQueryResponseDataRelationshipsRows", + "BatchUpsertRowsRequestArray", + "BatchUpsertRowsRequestData", + "BatchUpsertRowsRequestDataAttributes", + "BatchUpsertRowsRequestDataAttributesValue", + "BillConfig", + "BillingDimensionsMappingBodyItem", + "BillingDimensionsMappingBodyItemAttributes", + "BillingDimensionsMappingBodyItemAttributesEndpointsItems", + "BillingDimensionsMappingBodyItemAttributesEndpointsItemsStatus", + "BillingDimensionsMappingResponse", + "BlueprintAttributes", + "BlueprintData", + "BlueprintDataType", + "BlueprintMetadataAttributes", + "BlueprintMetadataData", + "BlueprintNativeAction", + "BranchCoverageSummaryRequest", + "BranchCoverageSummaryRequestAttributes", + "BranchCoverageSummaryRequestData", + "BranchCoverageSummaryRequestType", + "Budget", + "BudgetArray", + "BudgetAttributes", + "BudgetAttributesCosts", + "BudgetAttributesCostsUnit", + "BudgetValidationRequest", + "BudgetValidationRequestData", + "BudgetValidationResponse", + "BudgetValidationResponseData", + "BudgetValidationResponseDataAttributes", + "BudgetValidationResponseDataType", + "BudgetWithEntries", + "BudgetWithEntriesData", + "BudgetWithEntriesDataAttributes", + "BudgetWithEntriesDataAttributesEntriesItems", + "BudgetWithEntriesDataAttributesEntriesItemsCosts", + "BudgetWithEntriesDataAttributesEntriesItemsTagFiltersItems", + "BudgetWithEntriesDataType", + "BulkDeleteAppsDatastoreItemsRequest", + "BulkDeleteAppsDatastoreItemsRequestData", + "BulkDeleteAppsDatastoreItemsRequestDataAttributes", + "BulkDeleteAppsDatastoreItemsRequestDataType", + "BulkPutAppsDatastoreItemsRequest", + "BulkPutAppsDatastoreItemsRequestData", + "BulkPutAppsDatastoreItemsRequestDataAttributes", + "CIAppAggregateBucketValue", + "CIAppAggregateBucketValueTimeseries", + "CIAppAggregateBucketValueTimeseriesPoint", + "CIAppAggregateSort", + "CIAppAggregateSortType", + "CIAppAggregationFunction", + "CIAppCIError", + "CIAppCIErrorDomain", + "CIAppCompute", + "CIAppComputeType", + "CIAppComputes", + "CIAppCreatePipelineEventRequest", + "CIAppCreatePipelineEventRequestAttributes", + "CIAppCreatePipelineEventRequestAttributesResource", + "CIAppCreatePipelineEventRequestData", + "CIAppCreatePipelineEventRequestDataSingleOrArray", + "CIAppCreatePipelineEventRequestDataType", + "CIAppEventAttributes", + "CIAppGitHubAccountAttributes", + "CIAppGitHubAccountData", + "CIAppGitHubAccountRepository", + "CIAppGitHubAccountResponse", + "CIAppGitHubAccountType", + "CIAppGitHubAccountUpdateRequest", + "CIAppGitHubAccountUpdateRequestAttributes", + "CIAppGitHubAccountUpdateRequestData", + "CIAppGitHubAccountUpdateRequestRepository", + "CIAppGitHubAccountsResponse", + "CIAppGitInfo", + "CIAppGroupByHistogram", + "CIAppGroupByMissing", + "CIAppGroupByTotal", + "CIAppHostInfo", + "CIAppPipelineEvent", + "CIAppPipelineEventAttributes", + "CIAppPipelineEventFinishedJob", + "CIAppPipelineEventFinishedPipeline", + "CIAppPipelineEventInProgressJob", + "CIAppPipelineEventInProgressPipeline", + "CIAppPipelineEventJob", + "CIAppPipelineEventJobInProgressStatus", + "CIAppPipelineEventJobLevel", + "CIAppPipelineEventJobStatus", + "CIAppPipelineEventParameters", + "CIAppPipelineEventParentPipeline", + "CIAppPipelineEventPipeline", + "CIAppPipelineEventPipelineInProgressStatus", + "CIAppPipelineEventPipelineLevel", + "CIAppPipelineEventPipelineStatus", + "CIAppPipelineEventPreviousPipeline", + "CIAppPipelineEventStage", + "CIAppPipelineEventStageLevel", + "CIAppPipelineEventStageStatus", + "CIAppPipelineEventStep", + "CIAppPipelineEventStepLevel", + "CIAppPipelineEventStepStatus", + "CIAppPipelineEventTypeName", + "CIAppPipelineEventsRequest", + "CIAppPipelineEventsResponse", + "CIAppPipelineLevel", + "CIAppPipelinesAggregateRequest", + "CIAppPipelinesAggregationBucketsResponse", + "CIAppPipelinesAnalyticsAggregateResponse", + "CIAppPipelinesBucketResponse", + "CIAppPipelinesGroupBy", + "CIAppPipelinesQueryFilter", + "CIAppQueryOptions", + "CIAppQueryPageOptions", + "CIAppResponseLinks", + "CIAppResponseMetadata", + "CIAppResponseMetadataWithPagination", + "CIAppResponsePage", + "CIAppResponseStatus", + "CIAppSort", + "CIAppSortOrder", + "CIAppTestEvent", + "CIAppTestEventTypeName", + "CIAppTestEventsRequest", + "CIAppTestEventsResponse", + "CIAppTestLevel", + "CIAppTestsAggregateRequest", + "CIAppTestsAggregationBucketsResponse", + "CIAppTestsAnalyticsAggregateResponse", + "CIAppTestsBucketResponse", + "CIAppTestsGroupBy", + "CIAppTestsQueryFilter", + "CIAppWarning", + "CSMAgentsMetadata", + "CSMAgentsType", + "CVSS", + "CalculatedField", + "CampaignResponse", + "CampaignResponseAttributes", + "CampaignResponseData", + "CampaignStatus", + "CampaignType", + "CancelDataDeletionResponseBody", + "Case", + "Case3rdPartyTicketStatus", + "CaseAggregateGroup", + "CaseAggregateGroupBy", + "CaseAggregateRequest", + "CaseAggregateRequestAttributes", + "CaseAggregateRequestData", + "CaseAggregateResourceType", + "CaseAggregateResponse", + "CaseAggregateResponseAttributes", + "CaseAggregateResponseData", + "CaseAssign", + "CaseAssignAttributes", + "CaseAssignRequest", + "CaseAttributes", + "CaseAutomationRuleResourceType", + "CaseAutomationRuleState", + "CaseBulkActionType", + "CaseBulkResourceType", + "CaseBulkUpdateRequest", + "CaseBulkUpdateRequestAttributes", + "CaseBulkUpdateRequestData", + "CaseComment", + "CaseCommentAttributes", + "CaseCommentRequest", + "CaseCountGroup", + "CaseCountGroupValue", + "CaseCountResponse", + "CaseCountResponseAttributes", + "CaseCountResponseData", + "CaseCreate", + "CaseCreateAttributes", + "CaseCreateRelationships", + "CaseCreateRequest", + "CaseDataType", + "CaseEmpty", + "CaseEmptyRequest", + "CaseInsight", + "CaseInsightType", + "CaseInsightsAttributes", + "CaseInsightsData", + "CaseInsightsItems", + "CaseInsightsRequest", + "CaseLink", + "CaseLinkAttributes", + "CaseLinkCreate", + "CaseLinkCreateRequest", + "CaseLinkResourceType", + "CaseLinkResponse", + "CaseLinksResponse", + "CaseManagementProject", + "CaseManagementProjectData", + "CaseManagementProjectDataType", + "CaseNotificationRule", + "CaseNotificationRuleAttributes", + "CaseNotificationRuleCreate", + "CaseNotificationRuleCreateAttributes", + "CaseNotificationRuleCreateRequest", + "CaseNotificationRuleRecipient", + "CaseNotificationRuleRecipientData", + "CaseNotificationRuleResourceType", + "CaseNotificationRuleResponse", + "CaseNotificationRuleTrigger", + "CaseNotificationRuleTriggerData", + "CaseNotificationRuleUpdate", + "CaseNotificationRuleUpdateRequest", + "CaseNotificationRulesResponse", + "CaseObjectAttributes", + "CasePriority", + "CaseRelationships", + "CaseResourceType", + "CaseResponse", + "CaseSortableField", + "CaseStatus", + "CaseStatusGroup", + "CaseTrigger", + "CaseTriggerWrapper", + "CaseType", + "CaseTypeCreate", + "CaseTypeCreateRequest", + "CaseTypeResource", + "CaseTypeResourceAttributes", + "CaseTypeResourceType", + "CaseTypeResponse", + "CaseTypeUpdate", + "CaseTypeUpdateRequest", + "CaseTypesResponse", + "CaseUpdateAttributes", + "CaseUpdateAttributesAttributes", + "CaseUpdateAttributesRequest", + "CaseUpdateComment", + "CaseUpdateCommentAttributes", + "CaseUpdateCommentRequest", + "CaseUpdateCustomAttribute", + "CaseUpdateCustomAttributeRequest", + "CaseUpdateDescription", + "CaseUpdateDescriptionAttributes", + "CaseUpdateDescriptionRequest", + "CaseUpdateDueDate", + "CaseUpdateDueDateAttributes", + "CaseUpdateDueDateRequest", + "CaseUpdatePriority", + "CaseUpdatePriorityAttributes", + "CaseUpdatePriorityRequest", + "CaseUpdateResolvedReason", + "CaseUpdateResolvedReasonAttributes", + "CaseUpdateResolvedReasonRequest", + "CaseUpdateStatus", + "CaseUpdateStatusAttributes", + "CaseUpdateStatusRequest", + "CaseUpdateTitle", + "CaseUpdateTitleAttributes", + "CaseUpdateTitleRequest", + "CaseView", + "CaseViewAttributes", + "CaseViewCreate", + "CaseViewCreateAttributes", + "CaseViewCreateRequest", + "CaseViewRelationships", + "CaseViewResourceType", + "CaseViewResponse", + "CaseViewUpdate", + "CaseViewUpdateAttributes", + "CaseViewUpdateRequest", + "CaseViewsResponse", + "CaseWatcher", + "CaseWatcherRelationships", + "CaseWatcherResourceType", + "CaseWatcherUserRelationship", + "CaseWatchersResponse", + "CasesResponse", + "CasesResponseMeta", + "CasesResponseMetaPagination", + "ChangeEventAttributes", + "ChangeEventAttributesAuthor", + "ChangeEventAttributesAuthorType", + "ChangeEventAttributesChangedResource", + "ChangeEventAttributesChangedResourceType", + "ChangeEventAttributesImpactedResourcesItem", + "ChangeEventAttributesImpactedResourcesItemType", + "ChangeEventCustomAttributes", + "ChangeEventCustomAttributesAuthor", + "ChangeEventCustomAttributesAuthorType", + "ChangeEventCustomAttributesChangedResource", + "ChangeEventCustomAttributesChangedResourceType", + "ChangeEventCustomAttributesImpactedResourcesItems", + "ChangeEventCustomAttributesImpactedResourcesItemsType", + "ChangeEventTriggerWrapper", + "ChangeRequestBranchCreateAttributes", + "ChangeRequestBranchCreateData", + "ChangeRequestBranchCreateRequest", + "ChangeRequestBranchResourceType", + "ChangeRequestChangeType", + "ChangeRequestCreateAttributes", + "ChangeRequestCreateData", + "ChangeRequestCreateRequest", + "ChangeRequestDecisionCreateAttributes", + "ChangeRequestDecisionCreateItem", + "ChangeRequestDecisionCreateRelationships", + "ChangeRequestDecisionRelationshipData", + "ChangeRequestDecisionRelationships", + "ChangeRequestDecisionResourceType", + "ChangeRequestDecisionResponseAttributes", + "ChangeRequestDecisionStatusType", + "ChangeRequestDecisionUpdateData", + "ChangeRequestDecisionUpdateDataAttributes", + "ChangeRequestDecisionUpdateDataRelationships", + "ChangeRequestDecisionUpdateRequest", + "ChangeRequestDecisionsRelationship", + "ChangeRequestIncludedDecision", + "ChangeRequestIncludedItem", + "ChangeRequestIncludedUser", + "ChangeRequestIncludedUserAttributes", + "ChangeRequestObjectAttributes", + "ChangeRequestRelationships", + "ChangeRequestResourceType", + "ChangeRequestResponse", + "ChangeRequestResponseAttributes", + "ChangeRequestResponseData", + "ChangeRequestRiskLevel", + "ChangeRequestUpdateAttributes", + "ChangeRequestUpdateData", + "ChangeRequestUpdateRelationships", + "ChangeRequestUpdateRequest", + "ChangeRequestUserRelationship", + "ChangeRequestUserRelationshipData", + "ChargebackBreakdown", + "CircleCIAPIKey", + "CircleCIAPIKeyType", + "CircleCIAPIKeyUpdate", + "CircleCICredentials", + "CircleCICredentialsUpdate", + "CircleCIIntegration", + "CircleCIIntegrationType", + "CircleCIIntegrationUpdate", + "ClickupAPIKey", + "ClickupAPIKeyType", + "ClickupAPIKeyUpdate", + "ClickupCredentials", + "ClickupCredentialsUpdate", + "ClickupIntegration", + "ClickupIntegrationType", + "ClickupIntegrationUpdate", + "CloneFormData", + "CloneFormDataAttributes", + "CloneFormRequest", + "CloudAssetType", + "CloudConfigurationComplianceRuleOptions", + "CloudConfigurationRegoRule", + "CloudConfigurationRuleCaseCreate", + "CloudConfigurationRuleComplianceSignalOptions", + "CloudConfigurationRuleCreatePayload", + "CloudConfigurationRuleOptions", + "CloudConfigurationRulePayload", + "CloudConfigurationRuleType", + "CloudInventoryCloudProviderId", + "CloudInventoryCloudProviderRequestType", + "CloudInventorySyncConfigAWSRequestAttributes", + "CloudInventorySyncConfigAttributes", + "CloudInventorySyncConfigAzureRequestAttributes", + "CloudInventorySyncConfigGCPRequestAttributes", + "CloudInventorySyncConfigResourceType", + "CloudInventorySyncConfigResponse", + "CloudInventorySyncConfigResponseData", + "CloudWorkloadSecurityAgentPoliciesListResponse", + "CloudWorkloadSecurityAgentPolicyAttributes", + "CloudWorkloadSecurityAgentPolicyCreateAttributes", + "CloudWorkloadSecurityAgentPolicyCreateData", + "CloudWorkloadSecurityAgentPolicyCreateRequest", + "CloudWorkloadSecurityAgentPolicyData", + "CloudWorkloadSecurityAgentPolicyResponse", + "CloudWorkloadSecurityAgentPolicyType", + "CloudWorkloadSecurityAgentPolicyUpdateAttributes", + "CloudWorkloadSecurityAgentPolicyUpdateData", + "CloudWorkloadSecurityAgentPolicyUpdateRequest", + "CloudWorkloadSecurityAgentPolicyUpdaterAttributes", + "CloudWorkloadSecurityAgentPolicyVersion", + "CloudWorkloadSecurityAgentRuleAction", + "CloudWorkloadSecurityAgentRuleActionHash", + "CloudWorkloadSecurityAgentRuleActionMetadata", + "CloudWorkloadSecurityAgentRuleActionSet", + "CloudWorkloadSecurityAgentRuleActionSetValue", + "CloudWorkloadSecurityAgentRuleAttributes", + "CloudWorkloadSecurityAgentRuleCreateAttributes", + "CloudWorkloadSecurityAgentRuleCreateData", + "CloudWorkloadSecurityAgentRuleCreateRequest", + "CloudWorkloadSecurityAgentRuleCreatorAttributes", + "CloudWorkloadSecurityAgentRuleData", + "CloudWorkloadSecurityAgentRuleKill", + "CloudWorkloadSecurityAgentRuleResponse", + "CloudWorkloadSecurityAgentRuleType", + "CloudWorkloadSecurityAgentRuleUpdateAttributes", + "CloudWorkloadSecurityAgentRuleUpdateData", + "CloudWorkloadSecurityAgentRuleUpdateRequest", + "CloudWorkloadSecurityAgentRuleUpdaterAttributes", + "CloudWorkloadSecurityAgentRulesListResponse", + "CloudflareAPIToken", + "CloudflareAPITokenType", + "CloudflareAPITokenUpdate", + "CloudflareAccountCreateRequest", + "CloudflareAccountCreateRequestAttributes", + "CloudflareAccountCreateRequestData", + "CloudflareAccountResponse", + "CloudflareAccountResponseAttributes", + "CloudflareAccountResponseData", + "CloudflareAccountType", + "CloudflareAccountUpdateRequest", + "CloudflareAccountUpdateRequestAttributes", + "CloudflareAccountUpdateRequestData", + "CloudflareAccountsResponse", + "CloudflareCredentials", + "CloudflareCredentialsUpdate", + "CloudflareGlobalAPIToken", + "CloudflareGlobalAPITokenType", + "CloudflareGlobalAPITokenUpdate", + "CloudflareIntegration", + "CloudflareIntegrationType", + "CloudflareIntegrationUpdate", + "CodeLocation", + "CommitCoverageSummaryRequest", + "CommitCoverageSummaryRequestAttributes", + "CommitCoverageSummaryRequestData", + "CommitCoverageSummaryRequestType", + "CommitmentsAwsEC2RICommitment", + "CommitmentsAwsElasticacheRICommitment", + "CommitmentsAwsRDSRICommitment", + "CommitmentsAwsSPCommitment", + "CommitmentsAzureComputeSPCommitment", + "CommitmentsAzureVMRICommitment", + "CommitmentsAzureVMRIStatus", + "CommitmentsCommitmentType", + "CommitmentsCoverageScalarResponse", + "CommitmentsCoverageTimeseriesResponse", + "CommitmentsListItem", + "CommitmentsListMeta", + "CommitmentsListResponse", + "CommitmentsOnDemandHotspotsScalarMeta", + "CommitmentsOnDemandHotspotsScalarResponse", + "CommitmentsProvider", + "CommitmentsSavingsScalarResponse", + "CommitmentsSavingsTimeseriesResponse", + "CommitmentsScalarColumn", + "CommitmentsScalarColumnMeta", + "CommitmentsScalarColumnType", + "CommitmentsTimeseriesMetric", + "CommitmentsTimeseriesSeries", + "CommitmentsUnit", + "CommitmentsUtilizationScalarProductBreakdownEntry", + "CommitmentsUtilizationScalarResponse", + "CommitmentsUtilizationTimeseriesResponse", + "CompletionCondition", + "CompletionConditionOperator", + "CompletionGate", + "Component", + "ComponentGrid", + "ComponentGridProperties", + "ComponentGridPropertiesIsVisible", + "ComponentGridType", + "ComponentProperties", + "ComponentPropertiesIsVisible", + "ComponentRecommendation", + "ComponentType", + "Condition", + "ConditionOperator", + "ConditionRequest", + "ConfigCatCredentials", + "ConfigCatCredentialsUpdate", + "ConfigCatIntegration", + "ConfigCatIntegrationType", + "ConfigCatIntegrationUpdate", + "ConfigCatSDKKey", + "ConfigCatSDKKeyType", + "ConfigCatSDKKeyUpdate", + "ConfiguredSchedule", + "ConfiguredScheduleTarget", + "ConfiguredScheduleTargetAttributes", + "ConfiguredScheduleTargetRelationships", + "ConfiguredScheduleTargetRelationshipsSchedule", + "ConfiguredScheduleTargetType", + "ConfluencePostmortemSettings", + "ConfluentAccountCreateRequest", + "ConfluentAccountCreateRequestAttributes", + "ConfluentAccountCreateRequestData", + "ConfluentAccountResourceAttributes", + "ConfluentAccountResponse", + "ConfluentAccountResponseAttributes", + "ConfluentAccountResponseData", + "ConfluentAccountType", + "ConfluentAccountUpdateRequest", + "ConfluentAccountUpdateRequestAttributes", + "ConfluentAccountUpdateRequestData", + "ConfluentAccountsResponse", + "ConfluentResourceRequest", + "ConfluentResourceRequestAttributes", + "ConfluentResourceRequestData", + "ConfluentResourceResponse", + "ConfluentResourceResponseAttributes", + "ConfluentResourceResponseData", + "ConfluentResourceType", + "ConfluentResourcesResponse", + "ConnectedTeamRef", + "ConnectedTeamRefData", + "ConnectedTeamRefDataType", + "Connection", + "ConnectionEnv", + "ConnectionEnvEnv", + "ConnectionGroup", + "ConnectionsPagePagination", + "ConnectionsResponseMeta", + "Container", + "ContainerAttributes", + "ContainerDataSource", + "ContainerGroup", + "ContainerGroupAttributes", + "ContainerGroupRelationships", + "ContainerGroupRelationshipsLink", + "ContainerGroupRelationshipsLinks", + "ContainerGroupType", + "ContainerImage", + "ContainerImageAttributes", + "ContainerImageFlavor", + "ContainerImageGroup", + "ContainerImageGroupAttributes", + "ContainerImageGroupImagesRelationshipsLink", + "ContainerImageGroupRelationships", + "ContainerImageGroupRelationshipsLinks", + "ContainerImageGroupType", + "ContainerImageItem", + "ContainerImageMeta", + "ContainerImageMetaPage", + "ContainerImageMetaPageType", + "ContainerImageType", + "ContainerImageVulnerabilities", + "ContainerImagesResponse", + "ContainerImagesResponseLinks", + "ContainerItem", + "ContainerMeta", + "ContainerMetaPage", + "ContainerMetaPageType", + "ContainerScalarQuery", + "ContainerTimeseriesQuery", + "ContainerType", + "ContainersResponse", + "ContainersResponseLinks", + "ContentEncoding", + "ControlNotificationEventSetting", + "ControlNotificationSettingsAttributes", + "ControlNotificationSettingsData", + "ControlNotificationSettingsResourceType", + "ControlNotificationSettingsResponse", + "ControlNotificationSettingsUpdateAttributes", + "ControlNotificationSettingsUpdateData", + "ControlNotificationSettingsUpdateRequest", + "ControlNotificationTarget", + "ControlNotificationTargetType", + "ConvertJobResultsToSignalsAttributes", + "ConvertJobResultsToSignalsData", + "ConvertJobResultsToSignalsDataType", + "ConvertJobResultsToSignalsRequest", + "CostAggregationType", + "CostAnomaliesResponse", + "CostAnomaliesResponseData", + "CostAnomaliesResponseDataAttributes", + "CostAnomaliesResponseDataType", + "CostAnomaly", + "CostAnomalyCorrelatedTags", + "CostAnomalyDimensions", + "CostAnomalyDismissal", + "CostAnomalyResponse", + "CostAnomalyResponseData", + "CostAttributionAggregatesBody", + "CostAttributionTagNames", + "CostAttributionType", + "CostByOrg", + "CostByOrgAttributes", + "CostByOrgResponse", + "CostByOrgType", + "CostCurrency", + "CostCurrencyResponse", + "CostCurrencyType", + "CostMetric", + "CostMetricType", + "CostMetricsResponse", + "CostOrchestrator", + "CostOrchestratorType", + "CostOrchestratorsResponse", + "CostRecommendationArray", + "CostRecommendationData", + "CostRecommendationDataAttributes", + "CostRecommendationDataAttributesPotentialDailySavings", + "CostRecommendationDataType", + "CostTag", + "CostTagAttributes", + "CostTagDescription", + "CostTagDescriptionAttributes", + "CostTagDescriptionResponse", + "CostTagDescriptionSource", + "CostTagDescriptionType", + "CostTagDescriptionUpsertRequest", + "CostTagDescriptionUpsertRequestData", + "CostTagDescriptionUpsertRequestDataAttributes", + "CostTagDescriptionsResponse", + "CostTagKey", + "CostTagKeyAttributes", + "CostTagKeyDetails", + "CostTagKeyMetadata", + "CostTagKeyMetadataAttributes", + "CostTagKeyMetadataCardinalityByAccount", + "CostTagKeyMetadataResponse", + "CostTagKeyMetadataTopValuesByAccount", + "CostTagKeyMetadataType", + "CostTagKeyResponse", + "CostTagKeySource", + "CostTagKeySourceAttributes", + "CostTagKeySourceType", + "CostTagKeySourcesResponse", + "CostTagKeyType", + "CostTagKeysResponse", + "CostTagMetadataDailyFilter", + "CostTagMetadataMonth", + "CostTagMetadataMonthType", + "CostTagMetadataMonthsResponse", + "CostTagType", + "CostTagsResponse", + "CoverageSummaryAttributes", + "CoverageSummaryCodeownerStats", + "CoverageSummaryData", + "CoverageSummaryResponse", + "CoverageSummaryServiceStats", + "CoverageSummaryType", + "Cpu", + "CreateActionConnectionRequest", + "CreateActionConnectionResponse", + "CreateAllocationsRequest", + "CreateAppRequest", + "CreateAppRequestData", + "CreateAppRequestDataAttributes", + "CreateAppResponse", + "CreateAppResponseData", + "CreateAppsDatastoreRequest", + "CreateAppsDatastoreRequestData", + "CreateAppsDatastoreRequestDataAttributes", + "CreateAppsDatastoreRequestDataAttributesOrgAccess", + "CreateAppsDatastoreResponse", + "CreateAppsDatastoreResponseData", + "CreateAttachmentRequest", + "CreateAttachmentRequestData", + "CreateAttachmentRequestDataAttributes", + "CreateAttachmentRequestDataAttributesAttachment", + "CreateBackfilledDegradationRequest", + "CreateBackfilledDegradationRequestData", + "CreateBackfilledDegradationRequestDataAttributes", + "CreateBackfilledDegradationRequestDataAttributesUpdatesItems", + "CreateBackfilledDegradationRequestDataRelationships", + "CreateBackfilledDegradationRequestDataRelationshipsTemplate", + "CreateBackfilledDegradationRequestDataRelationshipsTemplateData", + "CreateBackfilledMaintenanceRequest", + "CreateBackfilledMaintenanceRequestData", + "CreateBackfilledMaintenanceRequestDataAttributes", + "CreateBackfilledMaintenanceRequestDataAttributesUpdatesItems", + "CreateBackfilledMaintenanceRequestDataRelationships", + "CreateBackfilledMaintenanceRequestDataRelationshipsTemplate", + "CreateBackfilledMaintenanceRequestDataRelationshipsTemplateData", + "CreateCampaignRequest", + "CreateCampaignRequestAttributes", + "CreateCampaignRequestData", + "CreateCaseRequestArray", + "CreateCaseRequestData", + "CreateCaseRequestDataAttributes", + "CreateCaseRequestDataRelationships", + "CreateComponentRequest", + "CreateComponentRequestData", + "CreateComponentRequestDataAttributes", + "CreateComponentRequestDataAttributesComponentsItems", + "CreateComponentRequestDataAttributesType", + "CreateComponentRequestDataRelationships", + "CreateComponentRequestDataRelationshipsGroup", + "CreateComponentRequestDataRelationshipsGroupData", + "CreateConnectionRequest", + "CreateConnectionRequestData", + "CreateConnectionRequestDataAttributes", + "CreateConnectionRequestDataAttributesFieldsItems", + "CreateCustomFrameworkRequest", + "CreateCustomFrameworkResponse", + "CreateDataDeletionRequestBody", + "CreateDataDeletionRequestBodyAttributes", + "CreateDataDeletionRequestBodyData", + "CreateDataDeletionRequestBodyDataType", + "CreateDataDeletionResponseBody", + "CreateDegradationRequest", + "CreateDegradationRequestData", + "CreateDegradationRequestDataAttributes", + "CreateDegradationRequestDataAttributesComponentsAffectedItems", + "CreateDegradationRequestDataAttributesStatus", + "CreateDegradationRequestDataRelationships", + "CreateDegradationRequestDataRelationshipsTemplate", + "CreateDegradationRequestDataRelationshipsTemplateData", + "CreateDegradationTemplateRequest", + "CreateDegradationTemplateRequestData", + "CreateDegradationTemplateRequestDataAttributes", + "CreateDegradationTemplateRequestDataAttributesComponentsAffectedItems", + "CreateDegradationTemplateRequestDataAttributesUpdatesItems", + "CreateDeploymentGateParams", + "CreateDeploymentGateParamsData", + "CreateDeploymentGateParamsDataAttributes", + "CreateDeploymentRuleParams", + "CreateDeploymentRuleParamsData", + "CreateDeploymentRuleParamsDataAttributes", + "CreateEmailNotificationChannelConfig", + "CreateEnvironmentAttributes", + "CreateEnvironmentData", + "CreateEnvironmentDataType", + "CreateEnvironmentRequest", + "CreateFeatureFlagAttributes", + "CreateFeatureFlagData", + "CreateFeatureFlagDataType", + "CreateFeatureFlagRequest", + "CreateFormData", + "CreateFormDataAttributes", + "CreateFormRequest", + "CreateIncidentNotificationRuleRequest", + "CreateIncidentNotificationTemplateRequest", + "CreateJiraIssueRequestArray", + "CreateJiraIssueRequestData", + "CreateJiraIssueRequestDataAttributes", + "CreateJiraIssueRequestDataRelationships", + "CreateLinearIssueRequestArray", + "CreateLinearIssueRequestData", + "CreateLinearIssueRequestDataAttributes", + "CreateLinearIssueRequestDataRelationships", + "CreateMaintenanceRequest", + "CreateMaintenanceRequestData", + "CreateMaintenanceRequestDataAttributes", + "CreateMaintenanceRequestDataAttributesComponentsAffectedItems", + "CreateMaintenanceRequestDataAttributesUpdatesItemsStatus", + "CreateMaintenanceRequestDataRelationships", + "CreateMaintenanceRequestDataRelationshipsTemplate", + "CreateMaintenanceRequestDataRelationshipsTemplateData", + "CreateMaintenanceTemplateRequest", + "CreateMaintenanceTemplateRequestData", + "CreateMaintenanceTemplateRequestDataAttributes", + "CreateNotificationChannelAttributes", + "CreateNotificationChannelConfig", + "CreateNotificationChannelData", + "CreateNotificationRuleParameters", + "CreateNotificationRuleParametersData", + "CreateNotificationRuleParametersDataAttributes", + "CreateOnCallNotificationRuleRequest", + "CreateOnCallNotificationRuleRequestData", + "CreateOpenAPIResponse", + "CreateOpenAPIResponseAttributes", + "CreateOpenAPIResponseData", + "CreateOrUpdateWidgetRequest", + "CreateOrUpdateWidgetRequestAttributes", + "CreateOrUpdateWidgetRequestData", + "CreatePageRequest", + "CreatePageRequestData", + "CreatePageRequestDataAttributes", + "CreatePageRequestDataAttributesTarget", + "CreatePageRequestDataType", + "CreatePageResponse", + "CreatePageResponseData", + "CreatePageResponseDataType", + "CreatePhoneNotificationChannelConfig", + "CreatePublishRequestRequest", + "CreatePublishRequestRequestData", + "CreatePublishRequestRequestDataAttributes", + "CreateRuleRequest", + "CreateRuleRequestData", + "CreateRuleResponse", + "CreateRuleResponseData", + "CreateRulesetRequest", + "CreateRulesetRequestData", + "CreateRulesetRequestDataAttributes", + "CreateRulesetRequestDataAttributesRulesItems", + "CreateRulesetRequestDataAttributesRulesItemsQuery", + "CreateRulesetRequestDataAttributesRulesItemsQueryAddition", + "CreateRulesetRequestDataAttributesRulesItemsReferenceTable", + "CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems", + "CreateRulesetRequestDataType", + "CreateServiceNowTicketRequestArray", + "CreateServiceNowTicketRequestData", + "CreateServiceNowTicketRequestDataAttributes", + "CreateServiceNowTicketRequestDataRelationships", + "CreateSnapshotAdditionalConfig", + "CreateSnapshotDataAttributesRequest", + "CreateSnapshotDataAttributesResponse", + "CreateSnapshotDataRequest", + "CreateSnapshotDataResponse", + "CreateSnapshotRequest", + "CreateSnapshotResponse", + "CreateSnapshotTTL", + "CreateSnapshotTemplateVariable", + "CreateSnapshotTimeseriesLegendType", + "CreateSnapshotType", + "CreateStatusPageRequest", + "CreateStatusPageRequestData", + "CreateStatusPageRequestDataAttributes", + "CreateStatusPageRequestDataAttributesComponentsItems", + "CreateStatusPageRequestDataAttributesComponentsItemsComponentsItems", + "CreateStatusPageRequestDataAttributesType", + "CreateStatusPageRequestDataAttributesVisualizationType", + "CreateTableRequest", + "CreateTableRequestData", + "CreateTableRequestDataAttributes", + "CreateTableRequestDataAttributesFileMetadata", + "CreateTableRequestDataAttributesFileMetadataCloudStorage", + "CreateTableRequestDataAttributesFileMetadataLocalFile", + "CreateTableRequestDataAttributesFileMetadataOneOfAccessDetails", + "CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail", + "CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail", + "CreateTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail", + "CreateTableRequestDataAttributesSchema", + "CreateTableRequestDataAttributesSchemaFieldsItems", + "CreateTableRequestDataType", + "CreateTenancyConfigData", + "CreateTenancyConfigDataAttributes", + "CreateTenancyConfigDataAttributesAuthCredentials", + "CreateTenancyConfigDataAttributesLogsConfig", + "CreateTenancyConfigDataAttributesMetricsConfig", + "CreateTenancyConfigDataAttributesRegionsConfig", + "CreateTenancyConfigRequest", + "CreateUploadRequest", + "CreateUploadRequestData", + "CreateUploadRequestDataAttributes", + "CreateUploadRequestDataType", + "CreateUploadResponse", + "CreateUploadResponseData", + "CreateUploadResponseDataAttributes", + "CreateUploadResponseDataType", + "CreateUserNotificationChannelRequest", + "CreateVariant", + "CreateWorkflowRequest", + "CreateWorkflowResponse", + "Creator", + "CsmAgentData", + "CsmAgentlessHostAttributes", + "CsmAgentlessHostData", + "CsmAgentlessHostFacetAttributes", + "CsmAgentlessHostFacetData", + "CsmAgentlessHostFacetType", + "CsmAgentlessHostFacetsResponse", + "CsmAgentlessHostResourceType", + "CsmAgentlessHostType", + "CsmAgentlessHostsResponse", + "CsmAgentsAttributes", + "CsmAgentsResponse", + "CsmCloudAccountsCoverageAnalysisAttributes", + "CsmCloudAccountsCoverageAnalysisData", + "CsmCloudAccountsCoverageAnalysisResponse", + "CsmCloudProvider", + "CsmCoverageAnalysis", + "CsmFacetInfoType", + "CsmHostFacetInfoAttributes", + "CsmHostFacetInfoData", + "CsmHostFacetInfoItem", + "CsmHostFacetInfoMeta", + "CsmHostFacetInfoResponse", + "CsmHostsAndContainersCoverageAnalysisAttributes", + "CsmHostsAndContainersCoverageAnalysisData", + "CsmHostsAndContainersCoverageAnalysisResponse", + "CsmServerlessCoverageAnalysisAttributes", + "CsmServerlessCoverageAnalysisData", + "CsmServerlessCoverageAnalysisResponse", + "CsmSettingsMeta", + "CsmUnifiedHostAttributes", + "CsmUnifiedHostData", + "CsmUnifiedHostFacetData", + "CsmUnifiedHostFacetType", + "CsmUnifiedHostFacetsResponse", + "CsmUnifiedHostSource", + "CsmUnifiedHostType", + "CsmUnifiedHostsMeta", + "CsmUnifiedHostsResponse", + "CustomAttributeConfig", + "CustomAttributeConfigAttributesCreate", + "CustomAttributeConfigCreate", + "CustomAttributeConfigCreateRequest", + "CustomAttributeConfigResourceAttributes", + "CustomAttributeConfigResourceType", + "CustomAttributeConfigResponse", + "CustomAttributeConfigUpdate", + "CustomAttributeConfigUpdateAttributes", + "CustomAttributeConfigUpdateRequest", + "CustomAttributeConfigsResponse", + "CustomAttributeSelectOption", + "CustomAttributeType", + "CustomAttributeTypeData", + "CustomAttributeValue", + "CustomAttributeValuesUnion", + "CustomConnection", + "CustomConnectionAttributes", + "CustomConnectionAttributesOnPremRunner", + "CustomConnectionType", + "CustomCostGetResponseMeta", + "CustomCostListResponseMeta", + "CustomCostUploadResponseMeta", + "CustomCostsFileGetResponse", + "CustomCostsFileLineItem", + "CustomCostsFileListResponse", + "CustomCostsFileMetadata", + "CustomCostsFileMetadataHighLevel", + "CustomCostsFileMetadataWithContent", + "CustomCostsFileMetadataWithContentHighLevel", + "CustomCostsFileUploadResponse", + "CustomCostsFileUsageChargePeriod", + "CustomCostsUser", + "CustomDestinationAttributeTagsRestrictionListType", + "CustomDestinationCreateRequest", + "CustomDestinationCreateRequestAttributes", + "CustomDestinationCreateRequestDefinition", + "CustomDestinationElasticsearchDestinationAuth", + "CustomDestinationForwardDestination", + "CustomDestinationForwardDestinationElasticsearch", + "CustomDestinationForwardDestinationElasticsearchType", + "CustomDestinationForwardDestinationHttp", + "CustomDestinationForwardDestinationHttpType", + "CustomDestinationForwardDestinationMicrosoftSentinel", + "CustomDestinationForwardDestinationMicrosoftSentinelType", + "CustomDestinationForwardDestinationSplunk", + "CustomDestinationForwardDestinationSplunkType", + "CustomDestinationHttpDestinationAuth", + "CustomDestinationHttpDestinationAuthBasic", + "CustomDestinationHttpDestinationAuthBasicType", + "CustomDestinationHttpDestinationAuthCustomHeader", + "CustomDestinationHttpDestinationAuthCustomHeaderType", + "CustomDestinationResponse", + "CustomDestinationResponseAttributes", + "CustomDestinationResponseDefinition", + "CustomDestinationResponseElasticsearchDestinationAuth", + "CustomDestinationResponseForwardDestination", + "CustomDestinationResponseForwardDestinationElasticsearch", + "CustomDestinationResponseForwardDestinationElasticsearchType", + "CustomDestinationResponseForwardDestinationHttp", + "CustomDestinationResponseForwardDestinationHttpType", + "CustomDestinationResponseForwardDestinationMicrosoftSentinel", + "CustomDestinationResponseForwardDestinationMicrosoftSentinelType", + "CustomDestinationResponseForwardDestinationSplunk", + "CustomDestinationResponseForwardDestinationSplunkType", + "CustomDestinationResponseHttpDestinationAuth", + "CustomDestinationResponseHttpDestinationAuthBasic", + "CustomDestinationResponseHttpDestinationAuthBasicType", + "CustomDestinationResponseHttpDestinationAuthCustomHeader", + "CustomDestinationResponseHttpDestinationAuthCustomHeaderType", + "CustomDestinationType", + "CustomDestinationUpdateRequest", + "CustomDestinationUpdateRequestAttributes", + "CustomDestinationUpdateRequestDefinition", + "CustomDestinationsResponse", + "CustomForecastEntry", + "CustomForecastEntryTagFilter", + "CustomForecastResponse", + "CustomForecastResponseData", + "CustomForecastResponseDataAttributes", + "CustomForecastType", + "CustomForecastUpsertRequest", + "CustomForecastUpsertRequestData", + "CustomForecastUpsertRequestDataAttributes", + "CustomFrameworkControl", + "CustomFrameworkData", + "CustomFrameworkDataAttributes", + "CustomFrameworkDataHandleAndVersion", + "CustomFrameworkMetadata", + "CustomFrameworkRequirement", + "CustomFrameworkType", + "CustomFrameworkWithoutRequirements", + "CustomRule", + "CustomRuleDataType", + "CustomRuleRequest", + "CustomRuleRequestData", + "CustomRuleRequestDataAttributes", + "CustomRuleResponse", + "CustomRuleResponseData", + "CustomRuleRevision", + "CustomRuleRevisionAttributes", + "CustomRuleRevisionAttributesCategory", + "CustomRuleRevisionAttributesSeverity", + "CustomRuleRevisionDataType", + "CustomRuleRevisionInputAttributes", + "CustomRuleRevisionRequest", + "CustomRuleRevisionRequestData", + "CustomRuleRevisionResponse", + "CustomRuleRevisionTest", + "CustomRuleRevisionsResponse", + "CustomRuleset", + "CustomRulesetAttributes", + "CustomRulesetDataType", + "CustomRulesetListResponse", + "CustomRulesetRequest", + "CustomRulesetRequestData", + "CustomRulesetRequestDataAttributes", + "CustomRulesetResponse", + "CustomerOrgDisableRequest", + "CustomerOrgDisableRequestAttributes", + "CustomerOrgDisableRequestData", + "CustomerOrgDisableResponse", + "CustomerOrgDisableResponseAttributes", + "CustomerOrgDisableResponseData", + "CustomerOrgDisableResponseType", + "CustomerOrgDisableStatus", + "CustomerOrgDisableType", + "CycloneDXBom", + "CycloneDXComponent", + "CycloneDXComponentType", + "CycloneDXMetadata", + "CycloneDXMetadataComponent", + "CycloneDXMetadataTools", + "CycloneDXToolComponent", + "CycloneDXVulnerability", + "CycloneDXVulnerabilityAdvisory", + "CycloneDXVulnerabilityAffects", + "CycloneDXVulnerabilityAnalysis", + "CycloneDXVulnerabilityRating", + "CycloneDXVulnerabilityReference", + "CycloneDXVulnerabilityReferenceSource", + "DORADeploymentFetchResponse", + "DORADeploymentObject", + "DORADeploymentObjectAttributes", + "DORADeploymentPatchByVersionRemediation", + "DORADeploymentPatchByVersionRemediationByID", + "DORADeploymentPatchByVersionRemediationByVersion", + "DORADeploymentPatchByVersionRequest", + "DORADeploymentPatchByVersionRequestAttributes", + "DORADeploymentPatchByVersionRequestData", + "DORADeploymentPatchRemediation", + "DORADeploymentPatchRemediationType", + "DORADeploymentPatchRequest", + "DORADeploymentPatchRequestAttributes", + "DORADeploymentPatchRequestData", + "DORADeploymentPatchRequestDataType", + "DORADeploymentRequest", + "DORADeploymentRequestAttributes", + "DORADeploymentRequestData", + "DORADeploymentResponse", + "DORADeploymentResponseData", + "DORADeploymentType", + "DORADeploymentsListResponse", + "DORAFailureFetchResponse", + "DORAFailureRequest", + "DORAFailureRequestAttributes", + "DORAFailureRequestData", + "DORAFailureResponse", + "DORAFailureResponseData", + "DORAFailureType", + "DORAFailuresListResponse", + "DORAGitInfo", + "DORAGitInfoResponse", + "DORAIncidentObject", + "DORAIncidentObjectAttributes", + "DORAListDeploymentsRequest", + "DORAListDeploymentsRequestAttributes", + "DORAListDeploymentsRequestData", + "DORAListDeploymentsRequestDataType", + "DORAListFailuresRequest", + "DORAListFailuresRequestAttributes", + "DORAListFailuresRequestData", + "DORAListFailuresRequestDataType", + "DashboardListAddItemsRequest", + "DashboardListAddItemsResponse", + "DashboardListDeleteItemsRequest", + "DashboardListDeleteItemsResponse", + "DashboardListItem", + "DashboardListItemRequest", + "DashboardListItemResponse", + "DashboardListItems", + "DashboardListUpdateItemsRequest", + "DashboardListUpdateItemsResponse", + "DashboardTriggerWrapper", + "DashboardType", + "DashboardUsage", + "DashboardUsageAttributes", + "DashboardUsageResponse", + "DashboardUsageType", + "DashboardUsageUser", + "DataAttributesRulesItemsIfTagExists", + "DataAttributesRulesItemsMapping", + "DataDeletionResponseItem", + "DataDeletionResponseItemAttributes", + "DataDeletionResponseMeta", + "DataExportConfig", + "DataObservabilityMonitorRunStatus", + "DataObservabilityMonitorRunType", + "DataRelationshipsTeams", + "DataRelationshipsTeamsDataItems", + "DataRelationshipsTeamsDataItemsType", + "DataScalarColumn", + "DataTransform", + "DataTransformProperties", + "DataTransformType", + "DatabaseMonitoringTriggerWrapper", + "DatadogAPIKey", + "DatadogAPIKeyType", + "DatadogAPIKeyUpdate", + "DatadogCredentials", + "DatadogCredentialsUpdate", + "DatadogIntegration", + "DatadogIntegrationType", + "DatadogIntegrationUpdate", + "DatasetAttributesRequest", + "DatasetAttributesResponse", + "DatasetCreateRequest", + "DatasetReportScheduleListResponse", + "DatasetReportScheduleResourceType", + "DatasetReportScheduleResponseAttributes", + "DatasetReportScheduleResponseData", + "DatasetRequest", + "DatasetResponse", + "DatasetResponseMulti", + "DatasetResponseSingle", + "DatasetType", + "DatasetUpdateRequest", + "Datastore", + "DatastoreArray", + "DatastoreData", + "DatastoreDataAttributes", + "DatastoreDataType", + "DatastoreItemConflictMode", + "DatastoreItemsDataType", + "DatastorePrimaryKeyGenerationStrategy", + "DatastoreTrigger", + "DatastoreTriggerWrapper", + "DdsqlTabularQueryColumn", + "DdsqlTabularQueryFetchRequest", + "DdsqlTabularQueryFetchRequestAttributes", + "DdsqlTabularQueryFetchRequestData", + "DdsqlTabularQueryFetchRequestType", + "DdsqlTabularQueryRequest", + "DdsqlTabularQueryRequestAttributes", + "DdsqlTabularQueryRequestData", + "DdsqlTabularQueryRequestType", + "DdsqlTabularQueryResponse", + "DdsqlTabularQueryResponseAttributes", + "DdsqlTabularQueryResponseData", + "DdsqlTabularQueryResponseMeta", + "DdsqlTabularQueryResponseType", + "DdsqlTabularQueryState", + "DdsqlTabularQueryTimeWindow", + "DefaultRulesetsPerLanguageData", + "DefaultRulesetsPerLanguageDataAttributes", + "DefaultRulesetsPerLanguageDataType", + "DefaultRulesetsPerLanguageResponse", + "Degradation", + "DegradationArray", + "DegradationData", + "DegradationDataAttributes", + "DegradationDataAttributesComponentsAffectedItems", + "DegradationDataAttributesSource", + "DegradationDataAttributesSourceType", + "DegradationDataAttributesUpdatesItems", + "DegradationDataAttributesUpdatesItemsComponentsAffectedItems", + "DegradationDataRelationships", + "DegradationDataRelationshipsCreatedByUser", + "DegradationDataRelationshipsCreatedByUserData", + "DegradationDataRelationshipsLastModifiedByUser", + "DegradationDataRelationshipsLastModifiedByUserData", + "DegradationDataRelationshipsStatusPage", + "DegradationDataRelationshipsStatusPageData", + "DegradationDataRelationshipsTemplate", + "DegradationDataRelationshipsTemplateData", + "DegradationIncluded", + "DegradationRequestMeta", + "DegradationTemplate", + "DegradationTemplateArray", + "DegradationTemplateData", + "DegradationTemplateDataAttributes", + "DegradationTemplateDataAttributesComponentsAffectedItems", + "DegradationTemplateDataAttributesUpdatesItems", + "DegradationTemplateDataRelationships", + "DegradationTemplateDataRelationshipsCreatedByUser", + "DegradationTemplateDataRelationshipsCreatedByUserData", + "DegradationTemplateDataRelationshipsLastModifiedByUser", + "DegradationTemplateDataRelationshipsLastModifiedByUserData", + "DegradationTemplateDataRelationshipsStatusPage", + "DegradationTemplateDataRelationshipsStatusPageData", + "DegradationUpdate", + "DegradationUpdateData", + "DegradationUpdateDataAttributes", + "DegradationUpdateDataAttributesComponentsAffectedItems", + "DegradationUpdateDataRelationships", + "DegradationUpdateDataRelationshipsDegradation", + "DegradationUpdateDataRelationshipsDegradationData", + "DegradationUpdateDataRelationshipsStatusPage", + "DegradationUpdateDataRelationshipsStatusPageData", + "DegradationUpdateDataRelationshipsUser", + "DegradationUpdateDataRelationshipsUserData", + "DegradationUpdateIncluded", + "DeleteAppResponse", + "DeleteAppResponseData", + "DeleteAppsDatastoreItemRequest", + "DeleteAppsDatastoreItemRequestData", + "DeleteAppsDatastoreItemRequestDataAttributes", + "DeleteAppsDatastoreItemResponse", + "DeleteAppsDatastoreItemResponseArray", + "DeleteAppsDatastoreItemResponseData", + "DeleteAppsRequest", + "DeleteAppsRequestDataItems", + "DeleteAppsResponse", + "DeleteAppsResponseDataItems", + "DeleteCustomFrameworkResponse", + "DeleteFormData", + "DeleteFormResponse", + "DeletedSuiteResponseData", + "DeletedSuiteResponseDataAttributes", + "DeletedSuitesRequestDelete", + "DeletedSuitesRequestDeleteAttributes", + "DeletedSuitesRequestDeleteRequest", + "DeletedSuitesRequestType", + "DeletedSuitesResponse", + "DeletedTestResponseData", + "DeletedTestResponseDataAttributes", + "DeletedTestsRequestDelete", + "DeletedTestsRequestDeleteAttributes", + "DeletedTestsRequestDeleteRequest", + "DeletedTestsRequestType", + "DeletedTestsResponse", + "DeletedTestsResponseType", + "DependencyLocation", + "Deployment", + "DeploymentAttributes", + "DeploymentGateDataType", + "DeploymentGateResponse", + "DeploymentGateResponseData", + "DeploymentGateResponseDataAttributes", + "DeploymentGateResponseDataAttributesCreatedBy", + "DeploymentGateResponseDataAttributesUpdatedBy", + "DeploymentGateRulesResponse", + "DeploymentGatesEvaluationConfiguration", + "DeploymentGatesEvaluationRequest", + "DeploymentGatesEvaluationRequestAttributes", + "DeploymentGatesEvaluationRequestData", + "DeploymentGatesEvaluationRequestDataType", + "DeploymentGatesEvaluationResponse", + "DeploymentGatesEvaluationResponseAttributes", + "DeploymentGatesEvaluationResponseData", + "DeploymentGatesEvaluationResponseDataType", + "DeploymentGatesEvaluationResultResponse", + "DeploymentGatesEvaluationResultResponseAttributes", + "DeploymentGatesEvaluationResultResponseAttributesGateStatus", + "DeploymentGatesEvaluationResultResponseData", + "DeploymentGatesEvaluationResultResponseDataType", + "DeploymentGatesEvaluationRule", + "DeploymentGatesFDDRule", + "DeploymentGatesFDDRuleOptions", + "DeploymentGatesFDDRuleType", + "DeploymentGatesListResponse", + "DeploymentGatesListResponseMeta", + "DeploymentGatesListResponseMetaPage", + "DeploymentGatesMonitorRule", + "DeploymentGatesMonitorRuleOptions", + "DeploymentGatesMonitorRuleType", + "DeploymentGatesRuleResponse", + "DeploymentMetadata", + "DeploymentRelationship", + "DeploymentRelationshipData", + "DeploymentRuleDataType", + "DeploymentRuleOptionsFaultyDeploymentDetection", + "DeploymentRuleOptionsMonitor", + "DeploymentRuleResponse", + "DeploymentRuleResponseData", + "DeploymentRuleResponseDataAttributes", + "DeploymentRuleResponseDataAttributesCreatedBy", + "DeploymentRuleResponseDataAttributesType", + "DeploymentRuleResponseDataAttributesUpdatedBy", + "DeploymentRulesOptions", + "DetachCaseRequest", + "DetachCaseRequestData", + "DetachCaseRequestDataRelationships", + "DetailedFinding", + "DetailedFindingAttributes", + "DetailedFindingType", + "DeviceAttributes", + "DeviceAttributesInterfaceStatuses", + "DevicesListData", + "DnsMetricKey", + "DomainAllowlist", + "DomainAllowlistAttributes", + "DomainAllowlistRequest", + "DomainAllowlistResponse", + "DomainAllowlistResponseData", + "DomainAllowlistResponseDataAttributes", + "DomainAllowlistType", + "DowntimeCreateRequest", + "DowntimeCreateRequestAttributes", + "DowntimeCreateRequestData", + "DowntimeIncludedMonitorType", + "DowntimeMeta", + "DowntimeMetaPage", + "DowntimeMonitorIdentifier", + "DowntimeMonitorIdentifierId", + "DowntimeMonitorIdentifierTags", + "DowntimeMonitorIncludedAttributes", + "DowntimeMonitorIncludedItem", + "DowntimeNotifyEndStateActions", + "DowntimeNotifyEndStateTypes", + "DowntimeRelationships", + "DowntimeRelationshipsCreatedBy", + "DowntimeRelationshipsCreatedByData", + "DowntimeRelationshipsMonitor", + "DowntimeRelationshipsMonitorData", + "DowntimeResourceType", + "DowntimeResponse", + "DowntimeResponseAttributes", + "DowntimeResponseData", + "DowntimeResponseIncludedItem", + "DowntimeScheduleCreateRequest", + "DowntimeScheduleCurrentDowntimeResponse", + "DowntimeScheduleOneTimeCreateUpdateRequest", + "DowntimeScheduleOneTimeResponse", + "DowntimeScheduleRecurrenceCreateUpdateRequest", + "DowntimeScheduleRecurrenceResponse", + "DowntimeScheduleRecurrencesCreateRequest", + "DowntimeScheduleRecurrencesResponse", + "DowntimeScheduleRecurrencesUpdateRequest", + "DowntimeScheduleResponse", + "DowntimeScheduleUpdateRequest", + "DowntimeStatus", + "DowntimeUpdateRequest", + "DowntimeUpdateRequestAttributes", + "DowntimeUpdateRequestData", + "DueDateFrom", + "DueDatePerSeverityItem", + "DueDateRuleAction", + "DueDateRuleAttributesCreate", + "DueDateRuleAttributesResponse", + "DueDateRuleCreateRequest", + "DueDateRuleDataCreate", + "DueDateRuleDataResponse", + "DueDateRuleReorderItem", + "DueDateRuleReorderRequest", + "DueDateRuleResponse", + "DueDateRuleType", + "DueDateRuleUpdateRequest", + "DueDateRulesResponse", + "DueDateSeverity", + "ELFSourcemapAttributes", + "ELFSourcemapData", + "EPSS", + "EntityAttributes", + "EntityContextEntity", + "EntityContextEntityAttributes", + "EntityContextPage", + "EntityContextResponse", + "EntityContextResponseMeta", + "EntityContextRevision", + "EntityContextRevisionAttributes", + "EntityData", + "EntityIntegrationConfigAttributes", + "EntityIntegrationConfigData", + "EntityIntegrationConfigPayload", + "EntityIntegrationConfigRequest", + "EntityIntegrationConfigRequestAttributes", + "EntityIntegrationConfigRequestData", + "EntityIntegrationConfigRequestType", + "EntityIntegrationConfigResponse", + "EntityIntegrationConfigType", + "EntityMeta", + "EntityRelationships", + "EntityResponseArray", + "EntityResponseDataAttributes", + "EntityResponseDataRelationships", + "EntityResponseDataRelationshipsIncidents", + "EntityResponseDataRelationshipsIncidentsDataItems", + "EntityResponseDataRelationshipsIncidentsDataItemsType", + "EntityResponseDataRelationshipsOncalls", + "EntityResponseDataRelationshipsOncallsDataItems", + "EntityResponseDataRelationshipsOncallsDataItemsType", + "EntityResponseDataRelationshipsRawSchema", + "EntityResponseDataRelationshipsRawSchemaData", + "EntityResponseDataRelationshipsRawSchemaDataType", + "EntityResponseDataRelationshipsRelatedEntities", + "EntityResponseDataRelationshipsRelatedEntitiesDataItems", + "EntityResponseDataRelationshipsRelatedEntitiesDataItemsType", + "EntityResponseDataRelationshipsSchema", + "EntityResponseDataRelationshipsSchemaData", + "EntityResponseDataRelationshipsSchemaDataType", + "EntityResponseDataType", + "EntityResponseIncludedIncident", + "EntityResponseIncludedIncidentType", + "EntityResponseIncludedOncall", + "EntityResponseIncludedOncallType", + "EntityResponseIncludedRawSchema", + "EntityResponseIncludedRawSchemaAttributes", + "EntityResponseIncludedRawSchemaType", + "EntityResponseIncludedRelatedEntity", + "EntityResponseIncludedRelatedEntityAttributes", + "EntityResponseIncludedRelatedEntityMeta", + "EntityResponseIncludedRelatedEntityType", + "EntityResponseIncludedRelatedIncidentAttributes", + "EntityResponseIncludedRelatedOncallAttributes", + "EntityResponseIncludedRelatedOncallEscalationItem", + "EntityResponseIncludedSchema", + "EntityResponseIncludedSchemaAttributes", + "EntityResponseIncludedSchemaType", + "EntityResponseMeta", + "EntityToIncidents", + "EntityToOncalls", + "EntityToRawSchema", + "EntityToRelatedEntities", + "EntityToSchema", + "EntityV3", + "EntityV3API", + "EntityV3APIDatadog", + "EntityV3APIKind", + "EntityV3APISpec", + "EntityV3APISpecInterface", + "EntityV3APISpecInterfaceDefinition", + "EntityV3APISpecInterfaceFileRef", + "EntityV3APIVersion", + "EntityV3DatadogCodeLocationItem", + "EntityV3DatadogEventItem", + "EntityV3DatadogIntegrationOpsgenie", + "EntityV3DatadogIntegrationPagerduty", + "EntityV3DatadogLogItem", + "EntityV3DatadogPerformance", + "EntityV3DatadogPipelines", + "EntityV3Datastore", + "EntityV3DatastoreDatadog", + "EntityV3DatastoreKind", + "EntityV3DatastoreSpec", + "EntityV3Integrations", + "EntityV3Metadata", + "EntityV3MetadataAdditionalOwnersItems", + "EntityV3MetadataContactsItems", + "EntityV3MetadataLinksItems", + "EntityV3Queue", + "EntityV3QueueDatadog", + "EntityV3QueueKind", + "EntityV3QueueSpec", + "EntityV3Service", + "EntityV3ServiceDatadog", + "EntityV3ServiceKind", + "EntityV3ServiceSpec", + "EntityV3System", + "EntityV3SystemDatadog", + "EntityV3SystemKind", + "EntityV3SystemSpec", + "Environment", + "EnvironmentAttributes", + "EnvironmentResponse", + "EnvironmentsPaginationMeta", + "EnvironmentsPaginationMetaPage", + "ErrorHandler", + "Escalation", + "EscalationPolicy", + "EscalationPolicyCreateRequest", + "EscalationPolicyCreateRequestData", + "EscalationPolicyCreateRequestDataAttributes", + "EscalationPolicyCreateRequestDataAttributesStepsItems", + "EscalationPolicyCreateRequestDataRelationships", + "EscalationPolicyCreateRequestDataType", + "EscalationPolicyData", + "EscalationPolicyDataAttributes", + "EscalationPolicyDataRelationships", + "EscalationPolicyDataRelationshipsSteps", + "EscalationPolicyDataRelationshipsStepsDataItems", + "EscalationPolicyDataRelationshipsStepsDataItemsType", + "EscalationPolicyDataType", + "EscalationPolicyIncluded", + "EscalationPolicyStep", + "EscalationPolicyStepAttributes", + "EscalationPolicyStepAttributesAssignment", + "EscalationPolicyStepRelationships", + "EscalationPolicyStepTarget", + "EscalationPolicyStepTargetConfig", + "EscalationPolicyStepTargetConfigSchedule", + "EscalationPolicyStepTargetType", + "EscalationPolicyStepType", + "EscalationPolicyUpdateRequest", + "EscalationPolicyUpdateRequestData", + "EscalationPolicyUpdateRequestDataAttributes", + "EscalationPolicyUpdateRequestDataAttributesStepsItems", + "EscalationPolicyUpdateRequestDataRelationships", + "EscalationPolicyUpdateRequestDataType", + "EscalationPolicyUser", + "EscalationPolicyUserAttributes", + "EscalationPolicyUserType", + "EscalationRelationships", + "EscalationRelationshipsResponders", + "EscalationRelationshipsRespondersDataItems", + "EscalationRelationshipsRespondersDataItemsType", + "EscalationTarget", + "EscalationTargets", + "EscalationType", + "Estimation", + "Event", + "EventAttributes", + "EventCategory", + "EventCreateRequest", + "EventCreateRequestPayload", + "EventCreateRequestType", + "EventCreateResponse", + "EventCreateResponseAttributes", + "EventCreateResponseAttributesAttributes", + "EventCreateResponseAttributesAttributesEvt", + "EventCreateResponsePayload", + "EventCreateResponsePayloadLinks", + "EventPayload", + "EventPayloadAttributes", + "EventPayloadIntegrationId", + "EventPriority", + "EventResponse", + "EventResponseAttributes", + "EventStatusType", + "EventSystemAttributes", + "EventSystemAttributesCategory", + "EventSystemAttributesIntegrationId", + "EventType", + "EventsAggregation", + "EventsCompute", + "EventsDataSource", + "EventsGroupBy", + "EventsGroupBySort", + "EventsListRequest", + "EventsListResponse", + "EventsListResponseLinks", + "EventsQueryFilter", + "EventsQueryGroupBys", + "EventsQueryOptions", + "EventsRequestPage", + "EventsResponseMetadata", + "EventsResponseMetadataPage", + "EventsScalarQuery", + "EventsSearch", + "EventsSort", + "EventsSortType", + "EventsTimeseriesQuery", + "EventsWarning", + "ExposureRolloutStepRequest", + "ExposureScheduleRequest", + "FacetInfoRequest", + "FacetInfoRequestData", + "FacetInfoRequestDataAttributes", + "FacetInfoRequestDataAttributesSearch", + "FacetInfoRequestDataAttributesTermSearch", + "FacetInfoRequestDataType", + "FacetInfoResponse", + "FacetInfoResponseData", + "FacetInfoResponseDataAttributes", + "FacetInfoResponseDataAttributesResult", + "FacetInfoResponseDataAttributesResultRange", + "FacetInfoResponseDataAttributesResultValuesItems", + "FacetInfoResponseDataType", + "FastlyAPIKey", + "FastlyAPIKeyType", + "FastlyAPIKeyUpdate", + "FastlyAccounResponseAttributes", + "FastlyAccountCreateRequest", + "FastlyAccountCreateRequestAttributes", + "FastlyAccountCreateRequestData", + "FastlyAccountResponse", + "FastlyAccountResponseData", + "FastlyAccountType", + "FastlyAccountUpdateRequest", + "FastlyAccountUpdateRequestAttributes", + "FastlyAccountUpdateRequestData", + "FastlyAccountsResponse", + "FastlyCredentials", + "FastlyCredentialsUpdate", + "FastlyIntegration", + "FastlyIntegrationType", + "FastlyIntegrationUpdate", + "FastlyService", + "FastlyServiceAttributes", + "FastlyServiceData", + "FastlyServiceRequest", + "FastlyServiceResponse", + "FastlyServiceType", + "FastlyServicesResponse", + "FeatureFlag", + "FeatureFlagAttributes", + "FeatureFlagEnvironment", + "FeatureFlagEnvironmentListItem", + "FeatureFlagListItem", + "FeatureFlagListItemAttributes", + "FeatureFlagResponse", + "FeatureFlagStatus", + "FeatureFlagsPaginationMeta", + "FeatureFlagsPaginationMetaPage", + "FiltersPerProduct", + "Finding", + "FindingAttributes", + "FindingCaseResponse", + "FindingCaseResponseArray", + "FindingCaseResponseData", + "FindingCaseResponseDataAttributes", + "FindingCaseResponseDataRelationships", + "FindingData", + "FindingDataType", + "FindingEvaluation", + "FindingJiraIssue", + "FindingJiraIssueResult", + "FindingLinearIssue", + "FindingLinearIssueResult", + "FindingMute", + "FindingMuteReason", + "FindingRule", + "FindingServiceNowTicket", + "FindingServiceNowTicketResult", + "FindingStatus", + "FindingType", + "FindingVulnerabilityType", + "Findings", + "FlakyTest", + "FlakyTestAttributes", + "FlakyTestAttributesFlakyState", + "FlakyTestHistory", + "FlakyTestHistoryPolicyId", + "FlakyTestHistoryPolicyMeta", + "FlakyTestHistoryPolicyMetaConfig", + "FlakyTestImpactLevel", + "FlakyTestPipelineStats", + "FlakyTestRunMetadata", + "FlakyTestStats", + "FlakyTestType", + "FlakyTestsPagination", + "FlakyTestsSearchFilter", + "FlakyTestsSearchPageOptions", + "FlakyTestsSearchRequest", + "FlakyTestsSearchRequestAttributes", + "FlakyTestsSearchRequestData", + "FlakyTestsSearchRequestDataType", + "FlakyTestsSearchResponse", + "FlakyTestsSearchResponseMeta", + "FlakyTestsSearchSort", + "FleetAgentAttributesTagsItems", + "FleetAgentConfigurationFilesV2", + "FleetAgentDetailV2", + "FleetAgentDetailV2Attributes", + "FleetAgentDetailV2Response", + "FleetAgentInfoDetailsV2", + "FleetAgentV2", + "FleetAgentV2Attributes", + "FleetAgentV2AttributesInstrumentationStatus", + "FleetAgentV2ResourceType", + "FleetAgentVersionV2", + "FleetAgentVersionV2Attributes", + "FleetAgentVersionV2ResourceType", + "FleetAgentVersionsV2Page", + "FleetAgentVersionsV2Response", + "FleetAgentVersionsV2ResponseMeta", + "FleetAgentsV2Page", + "FleetAgentsV2Response", + "FleetAgentsV2ResponseMeta", + "FleetConfigurationFileV2", + "FleetConfigurationLayer", + "FleetDeployment", + "FleetDeploymentAttributes", + "FleetDeploymentConfigureV2Attributes", + "FleetDeploymentConfigureV2Create", + "FleetDeploymentConfigureV2CreateRequest", + "FleetDeploymentConfigureV2DryRun", + "FleetDeploymentConfigureV2DryRunAttributes", + "FleetDeploymentConfigureV2DryRunResponse", + "FleetDeploymentConfigureV2DryRunResult", + "FleetDeploymentConfigureV2Package", + "FleetDeploymentFileOp", + "FleetDeploymentHost", + "FleetDeploymentHostPackage", + "FleetDeploymentHostsPage", + "FleetDeploymentOperation", + "FleetDeploymentPackage", + "FleetDeploymentPackageUpgradeV2Attributes", + "FleetDeploymentPackageUpgradeV2Create", + "FleetDeploymentPackageUpgradeV2CreateRequest", + "FleetDeploymentResourceType", + "FleetDeploymentResponse", + "FleetDeploymentResponseMeta", + "FleetDeploymentV2", + "FleetDeploymentV2Attributes", + "FleetDeploymentV2Cancel", + "FleetDeploymentV2CancelAttributes", + "FleetDeploymentV2CancelResponse", + "FleetDeploymentV2CreateResponse", + "FleetDeploymentV2Detail", + "FleetDeploymentV2DetailAgent", + "FleetDeploymentV2DetailAttributes", + "FleetDeploymentV2DetailResponse", + "FleetDeploymentsV2Page", + "FleetDeploymentsV2Response", + "FleetDeploymentsV2ResponseMeta", + "FleetDetectedIntegration", + "FleetIntegrationDetailsV2", + "FleetIntegrationsByStatusV2", + "FleetOtelCollector", + "FleetOtelCollectorConfigurationV2", + "FleetSchedule", + "FleetScheduleAttributes", + "FleetScheduleCreate", + "FleetScheduleCreateAttributes", + "FleetScheduleCreateRequest", + "FleetSchedulePatch", + "FleetSchedulePatchAttributes", + "FleetSchedulePatchRequest", + "FleetScheduleRecurrenceRule", + "FleetScheduleResourceType", + "FleetScheduleResponse", + "FleetScheduleStatus", + "FleetScheduleV2", + "FleetScheduleV2Attributes", + "FleetScheduleV2NotificationRule", + "FleetScheduleV2RecurrenceRule", + "FleetScheduleV2Response", + "FleetSchedulesV2Page", + "FleetSchedulesV2Response", + "FleetSchedulesV2ResponseMeta", + "FleetTracerAttributes", + "FleetTracersResponse", + "FleetTracersResponseData", + "FleetTracersResponseDataAttributes", + "FleetTracersResponseMeta", + "FlutterSourcemapAttributes", + "FlutterSourcemapData", + "FormData", + "FormDataAttributes", + "FormDataDefinition", + "FormDataDefinitionType", + "FormDatastoreConfigAttributes", + "FormPublicationAttributes", + "FormPublicationData", + "FormPublicationResponse", + "FormPublicationType", + "FormResponse", + "FormTrigger", + "FormTriggerWrapper", + "FormType", + "FormUiDefinition", + "FormUiDefinitionUiTheme", + "FormUiDefinitionUiThemePrimaryColor", + "FormUpdateAttributes", + "FormVersionAttributes", + "FormVersionData", + "FormVersionResponse", + "FormVersionState", + "FormVersionType", + "FormsResponse", + "FormulaLimit", + "FrameworkHandleAndVersionResponseData", + "FreshserviceAPIKey", + "FreshserviceAPIKeyType", + "FreshserviceAPIKeyUpdate", + "FreshserviceCredentials", + "FreshserviceCredentialsUpdate", + "FreshserviceIntegration", + "FreshserviceIntegrationType", + "FreshserviceIntegrationUpdate", + "FullAPIKey", + "FullAPIKeyAttributes", + "FullApplicationKey", + "FullApplicationKeyAttributes", + "FullCustomFrameworkData", + "FullCustomFrameworkDataAttributes", + "FullPersonalAccessToken", + "FullPersonalAccessTokenAttributes", + "FullServiceAccessToken", + "FullServiceAccessTokenAttributes", + "GCPCredentials", + "GCPCredentialsUpdate", + "GCPIntegration", + "GCPIntegrationType", + "GCPIntegrationUpdate", + "GCPMetricNamespaceConfig", + "GCPMonitoredResourceConfig", + "GCPMonitoredResourceConfigType", + "GCPSTSDelegateAccount", + "GCPSTSDelegateAccountAttributes", + "GCPSTSDelegateAccountResponse", + "GCPSTSDelegateAccountType", + "GCPSTSServiceAccount", + "GCPSTSServiceAccountAttributes", + "GCPSTSServiceAccountCreateRequest", + "GCPSTSServiceAccountData", + "GCPSTSServiceAccountResponse", + "GCPSTSServiceAccountUpdateRequest", + "GCPSTSServiceAccountUpdateRequestData", + "GCPSTSServiceAccountsResponse", + "GCPServiceAccount", + "GCPServiceAccountCredentialType", + "GCPServiceAccountMeta", + "GCPServiceAccountType", + "GCPServiceAccountUpdate", + "GCPUsageCostConfig", + "GCPUsageCostConfigAttributes", + "GCPUsageCostConfigPatchData", + "GCPUsageCostConfigPatchRequest", + "GCPUsageCostConfigPatchRequestAttributes", + "GCPUsageCostConfigPatchRequestType", + "GCPUsageCostConfigPostData", + "GCPUsageCostConfigPostRequest", + "GCPUsageCostConfigPostRequestAttributes", + "GCPUsageCostConfigPostRequestType", + "GCPUsageCostConfigResponse", + "GCPUsageCostConfigType", + "GCPUsageCostConfigsResponse", + "GcpScanOptions", + "GcpScanOptionsArray", + "GcpScanOptionsData", + "GcpScanOptionsDataAttributes", + "GcpScanOptionsDataType", + "GcpScanOptionsInputUpdate", + "GcpScanOptionsInputUpdateData", + "GcpScanOptionsInputUpdateDataAttributes", + "GcpScanOptionsInputUpdateDataType", + "GcpUcConfigResponse", + "GcpUcConfigResponseData", + "GcpUcConfigResponseDataAttributes", + "GcpUcConfigResponseDataType", + "GeminiAPIKey", + "GeminiAPIKeyType", + "GeminiAPIKeyUpdate", + "GeminiCredentials", + "GeminiCredentialsUpdate", + "GeminiIntegration", + "GeminiIntegrationType", + "GeminiIntegrationUpdate", + "GenerateCostTagDescriptionResponse", + "GeneratedCostTagDescription", + "GeneratedCostTagDescriptionAttributes", + "GeneratedCostTagDescriptionType", + "GetActionConnectionResponse", + "GetAppKeyRegistrationResponse", + "GetAppResponse", + "GetAppResponseData", + "GetAppResponseDataAttributes", + "GetAstRequest", + "GetAstRequestData", + "GetAstRequestDataAttributes", + "GetAstRequestDataType", + "GetAstResponse", + "GetAstResponseData", + "GetAstResponseDataAttributes", + "GetAstResponseDataType", + "GetBlueprintResponse", + "GetBlueprintsResponse", + "GetCustomFrameworkResponse", + "GetDataDeletionsResponseBody", + "GetDataObservabilityMonitorRunStatusResponse", + "GetDataObservabilityMonitorRunStatusResponseAttributes", + "GetDataObservabilityMonitorRunStatusResponseData", + "GetDeviceAttributes", + "GetDeviceData", + "GetDeviceResponse", + "GetFindingResponse", + "GetInterfacesData", + "GetInterfacesResponse", + "GetInvestigationResponse", + "GetInvestigationResponseData", + "GetInvestigationResponseDataAttributes", + "GetInvestigationResponseLinks", + "GetIoCIndicatorResponse", + "GetIoCIndicatorResponseAttributes", + "GetIoCIndicatorResponseData", + "GetIssueIncludeQueryParameterItem", + "GetMappingResponse", + "GetMappingResponseData", + "GetMappingResponseDataAttributes", + "GetMappingResponseDataAttributesAttributesItems", + "GetMappingResponseDataType", + "GetMultipleRulesetsRequest", + "GetMultipleRulesetsRequestData", + "GetMultipleRulesetsRequestDataAttributes", + "GetMultipleRulesetsRequestDataType", + "GetMultipleRulesetsResponse", + "GetMultipleRulesetsResponseData", + "GetMultipleRulesetsResponseDataAttributes", + "GetMultipleRulesetsResponseDataAttributesRulesetsItems", + "GetMultipleRulesetsResponseDataAttributesRulesetsItemsData", + "GetMultipleRulesetsResponseDataAttributesRulesetsItemsDataType", + "GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItems", + "GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsArgumentsItems", + "GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsData", + "GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsDataType", + "GetMultipleRulesetsResponseDataAttributesRulesetsItemsRulesItemsTestsItems", + "GetMultipleRulesetsResponseDataType", + "GetResourceEvaluationFiltersResponse", + "GetResourceEvaluationFiltersResponseData", + "GetRuleVersionHistoryData", + "GetRuleVersionHistoryDataType", + "GetRuleVersionHistoryResponse", + "GetSBOMResponse", + "GetSuppressionVersionHistoryData", + "GetSuppressionVersionHistoryDataType", + "GetSuppressionVersionHistoryResponse", + "GetTeamMembershipsSort", + "GetWorkflowResponse", + "GithubWebhookTrigger", + "GithubWebhookTriggerWrapper", + "GitlabAPIKey", + "GitlabAPIKeyType", + "GitlabAPIKeyUpdate", + "GitlabCredentials", + "GitlabCredentialsUpdate", + "GitlabIntegration", + "GitlabIntegrationType", + "GitlabIntegrationUpdate", + "GlobalIncidentSettingsAttributesRequest", + "GlobalIncidentSettingsAttributesResponse", + "GlobalIncidentSettingsDataRequest", + "GlobalIncidentSettingsDataResponse", + "GlobalIncidentSettingsRequest", + "GlobalIncidentSettingsResponse", + "GlobalIncidentSettingsType", + "GlobalOrg", + "GlobalOrgAttributes", + "GlobalOrgData", + "GlobalOrgIdentifier", + "GlobalOrgType", + "GlobalOrgUser", + "GlobalOrgsLinks", + "GlobalOrgsMeta", + "GlobalOrgsMetaPage", + "GlobalOrgsMetaPageType", + "GlobalOrgsResponse", + "GlobalVariableData", + "GlobalVariableJsonPatchRequest", + "GlobalVariableJsonPatchRequestData", + "GlobalVariableJsonPatchRequestDataAttributes", + "GlobalVariableJsonPatchType", + "GlobalVariableResponse", + "GlobalVariableType", + "GoogleChatAppNamedSpaceResponse", + "GoogleChatAppNamedSpaceResponseAttributes", + "GoogleChatAppNamedSpaceResponseData", + "GoogleChatAppNamedSpaceType", + "GoogleChatCreateOrganizationHandleRequest", + "GoogleChatCreateOrganizationHandleRequestAttributes", + "GoogleChatCreateOrganizationHandleRequestData", + "GoogleChatDelegatedUserAttributes", + "GoogleChatDelegatedUserData", + "GoogleChatDelegatedUserResponse", + "GoogleChatDelegatedUserType", + "GoogleChatOrganizationAttributes", + "GoogleChatOrganizationData", + "GoogleChatOrganizationHandleResponse", + "GoogleChatOrganizationHandleResponseAttributes", + "GoogleChatOrganizationHandleResponseData", + "GoogleChatOrganizationHandleType", + "GoogleChatOrganizationHandlesResponse", + "GoogleChatOrganizationRelationships", + "GoogleChatOrganizationRelationshipsDelegatedUser", + "GoogleChatOrganizationRelationshipsDelegatedUserData", + "GoogleChatOrganizationResponse", + "GoogleChatOrganizationType", + "GoogleChatOrganizationsResponse", + "GoogleChatTargetAudienceAttributes", + "GoogleChatTargetAudienceCreateRequest", + "GoogleChatTargetAudienceCreateRequestAttributes", + "GoogleChatTargetAudienceCreateRequestData", + "GoogleChatTargetAudienceData", + "GoogleChatTargetAudienceResponse", + "GoogleChatTargetAudienceType", + "GoogleChatTargetAudienceUpdateRequest", + "GoogleChatTargetAudienceUpdateRequestAttributes", + "GoogleChatTargetAudienceUpdateRequestData", + "GoogleChatTargetAudiencesResponse", + "GoogleChatUpdateOrganizationHandleRequest", + "GoogleChatUpdateOrganizationHandleRequestAttributes", + "GoogleChatUpdateOrganizationHandleRequestData", + "GoogleDocsPostmortemSettings", + "GoogleMeetConfigurationReference", + "GoogleMeetConfigurationReferenceData", + "GovernanceConfigAttributes", + "GovernanceConfigData", + "GovernanceConfigResponse", + "GovernanceConsoleConfigResourceType", + "GovernanceControlAttributes", + "GovernanceControlData", + "GovernanceControlDetectionAssignmentSource", + "GovernanceControlDetectionAttributes", + "GovernanceControlDetectionData", + "GovernanceControlDetectionResourceType", + "GovernanceControlDetectionResponse", + "GovernanceControlDetectionState", + "GovernanceControlDetectionUpdateAttributes", + "GovernanceControlDetectionUpdateData", + "GovernanceControlDetectionUpdateRequest", + "GovernanceControlDetectionUpdateState", + "GovernanceControlDetectionsResponse", + "GovernanceControlMitigationDefinition", + "GovernanceControlParameterDefinition", + "GovernanceControlParametersMap", + "GovernanceControlResourceType", + "GovernanceControlResponse", + "GovernanceControlSupportedValue", + "GovernanceControlUpdateAttributes", + "GovernanceControlUpdateData", + "GovernanceControlUpdateRequest", + "GovernanceControlsResponse", + "GovernanceInsightAttributes", + "GovernanceInsightAuditCompute", + "GovernanceInsightAuditQuery", + "GovernanceInsightData", + "GovernanceInsightDirectionality", + "GovernanceInsightEventCompute", + "GovernanceInsightEventQuery", + "GovernanceInsightMetricQuery", + "GovernanceInsightPercentageQuery", + "GovernanceInsightQueryConfig", + "GovernanceInsightResourceType", + "GovernanceInsightUsageQuery", + "GovernanceInsightsResponse", + "GovernanceMitigationRequest", + "GovernanceMitigationRequestAttributes", + "GovernanceMitigationRequestData", + "GovernanceNotificationSettingsAttributes", + "GovernanceNotificationSettingsData", + "GovernanceNotificationSettingsResourceType", + "GovernanceNotificationSettingsResponse", + "GovernanceNotificationSettingsUpdateAttributes", + "GovernanceNotificationSettingsUpdateData", + "GovernanceNotificationSettingsUpdateRequest", + "GreyNoiseAPIKey", + "GreyNoiseAPIKeyType", + "GreyNoiseAPIKeyUpdate", + "GreyNoiseCredentials", + "GreyNoiseCredentialsUpdate", + "GreyNoiseIntegration", + "GreyNoiseIntegrationType", + "GreyNoiseIntegrationUpdate", + "GroupScalarColumn", + "GroupTags", + "GuardrailMetric", + "GuardrailMetricRequest", + "GuardrailTriggerAction", + "HTTPBody", + "HTTPCDGatesBadRequestResponse", + "HTTPCDGatesNotFoundResponse", + "HTTPCDRulesNotFoundResponse", + "HTTPCIAppError", + "HTTPCIAppErrors", + "HTTPCredentials", + "HTTPCredentialsUpdate", + "HTTPHeader", + "HTTPHeaderUpdate", + "HTTPIntegration", + "HTTPIntegrationType", + "HTTPIntegrationUpdate", + "HTTPLog", + "HTTPLogError", + "HTTPLogErrors", + "HTTPLogItem", + "HTTPToken", + "HTTPTokenAuth", + "HTTPTokenAuthType", + "HTTPTokenAuthUpdate", + "HTTPTokenUpdate", + "HamrOrgConnectionAttributesRequest", + "HamrOrgConnectionAttributesResponse", + "HamrOrgConnectionDataRequest", + "HamrOrgConnectionDataResponse", + "HamrOrgConnectionRequest", + "HamrOrgConnectionResponse", + "HamrOrgConnectionStatus", + "HamrOrgConnectionType", + "HistoricalJobDataType", + "HistoricalJobListMeta", + "HistoricalJobOptions", + "HistoricalJobQuery", + "HistoricalJobResponse", + "HistoricalJobResponseAttributes", + "HistoricalJobResponseData", + "HistoricalMetricsConfigurationAttributes", + "HistoricalMetricsConfigurationCreateData", + "HistoricalMetricsConfigurationCreateRequest", + "HistoricalMetricsConfigurationData", + "HistoricalMetricsConfigurationResponse", + "HistoricalMetricsConfigurationType", + "HourlyUsage", + "HourlyUsageAttributes", + "HourlyUsageMeasurement", + "HourlyUsageMetadata", + "HourlyUsagePagination", + "HourlyUsageResponse", + "HourlyUsageType", + "IL2CPPSourcemapAttributes", + "IL2CPPSourcemapData", + "IOSSourcemapAttributes", + "IOSSourcemapData", + "IPAllowlistAttributes", + "IPAllowlistData", + "IPAllowlistEntry", + "IPAllowlistEntryAttributes", + "IPAllowlistEntryData", + "IPAllowlistEntryType", + "IPAllowlistResponse", + "IPAllowlistType", + "IPAllowlistUpdateRequest", + "IdPMetadataFormData", + "IdentityProviderAttributes", + "IdentityProviderData", + "IdentityProviderResponse", + "IdentityProviderType", + "IdentityProviderUpdateAttributes", + "IdentityProviderUpdateData", + "IdentityProviderUpdateRequest", + "IdentityProvidersResponse", + "IncidentAIPostmortemDataAttributesResponse", + "IncidentAIPostmortemDataResponse", + "IncidentAIPostmortemResponse", + "IncidentAIPostmortemResponseType", + "IncidentAttachmentType", + "IncidentConfigurationDataAttributesRequest", + "IncidentConfigurationDataAttributesResponse", + "IncidentConfigurationDataRequest", + "IncidentConfigurationDataResponse", + "IncidentConfigurationPatchDataAttributesRequest", + "IncidentConfigurationPatchDataRequest", + "IncidentConfigurationPatchRequest", + "IncidentConfigurationRelationships", + "IncidentConfigurationRequest", + "IncidentConfigurationResponse", + "IncidentConfigurationType", + "IncidentCreateAttributes", + "IncidentCreateData", + "IncidentCreateOnCallPageDataAttributesRequest", + "IncidentCreateOnCallPageDataRequest", + "IncidentCreateOnCallPageRequest", + "IncidentCreatePageFromIncidentDataAttributesRequest", + "IncidentCreatePageFromIncidentDataRequest", + "IncidentCreatePageFromIncidentRequest", + "IncidentCreatePageFromIncidentType", + "IncidentCreateRelationships", + "IncidentCreateRequest", + "IncidentFieldAttributes", + "IncidentFieldAttributesMultipleValue", + "IncidentFieldAttributesSingleValue", + "IncidentFieldAttributesSingleValueType", + "IncidentFieldAttributesValueType", + "IncidentGoogleChatConfigurationDataAttributesRequest", + "IncidentGoogleChatConfigurationDataAttributesResponse", + "IncidentGoogleChatConfigurationDataRequest", + "IncidentGoogleChatConfigurationDataResponse", + "IncidentGoogleChatConfigurationPatchDataAttributesRequest", + "IncidentGoogleChatConfigurationPatchDataRequest", + "IncidentGoogleChatConfigurationPatchRequest", + "IncidentGoogleChatConfigurationRelationships", + "IncidentGoogleChatConfigurationRelationshipsRequest", + "IncidentGoogleChatConfigurationRequest", + "IncidentGoogleChatConfigurationResponse", + "IncidentGoogleChatConfigurationType", + "IncidentGoogleMeetConfigurationDataAttributesRequest", + "IncidentGoogleMeetConfigurationDataAttributesResponse", + "IncidentGoogleMeetConfigurationDataRequest", + "IncidentGoogleMeetConfigurationDataResponse", + "IncidentGoogleMeetConfigurationPatchDataAttributesRequest", + "IncidentGoogleMeetConfigurationPatchDataRequest", + "IncidentGoogleMeetConfigurationPatchRequest", + "IncidentGoogleMeetConfigurationRelationships", + "IncidentGoogleMeetConfigurationRelationshipsRequest", + "IncidentGoogleMeetConfigurationRequest", + "IncidentGoogleMeetConfigurationResponse", + "IncidentGoogleMeetConfigurationType", + "IncidentHandleAttributesFields", + "IncidentHandleAttributesRequest", + "IncidentHandleAttributesResponse", + "IncidentHandleDataRequest", + "IncidentHandleDataResponse", + "IncidentHandleIncludedItemResponse", + "IncidentHandleRelationship", + "IncidentHandleRelationshipData", + "IncidentHandleRelationships", + "IncidentHandleRelationshipsRequest", + "IncidentHandleRequest", + "IncidentHandleResponse", + "IncidentHandleType", + "IncidentHandlesResponse", + "IncidentImpactAttributes", + "IncidentImpactCreateAttributes", + "IncidentImpactCreateData", + "IncidentImpactCreateRequest", + "IncidentImpactFieldChoice", + "IncidentImpactFieldDataAttributesRequest", + "IncidentImpactFieldDataAttributesResponse", + "IncidentImpactFieldDataRequest", + "IncidentImpactFieldDataResponse", + "IncidentImpactFieldRelationships", + "IncidentImpactFieldRelationshipsRequest", + "IncidentImpactFieldRequest", + "IncidentImpactFieldResponse", + "IncidentImpactFieldType", + "IncidentImpactFieldValueType", + "IncidentImpactFieldsObject", + "IncidentImpactFieldsResponse", + "IncidentImpactPatchAttributes", + "IncidentImpactPatchData", + "IncidentImpactPatchRequest", + "IncidentImpactRelatedObject", + "IncidentImpactRelationships", + "IncidentImpactResponse", + "IncidentImpactResponseData", + "IncidentImpactType", + "IncidentImpactsResponse", + "IncidentImpactsType", + "IncidentImportFieldAttributes", + "IncidentImportFieldAttributesMultipleValue", + "IncidentImportFieldAttributesSingleValue", + "IncidentImportRelatedObject", + "IncidentImportRelationships", + "IncidentImportRequest", + "IncidentImportRequestAttributes", + "IncidentImportRequestData", + "IncidentImportResponse", + "IncidentImportResponseAttributes", + "IncidentImportResponseData", + "IncidentImportResponseIncludedItem", + "IncidentImportResponseRelationships", + "IncidentImportVisibility", + "IncidentIntegrationMetadataAttributes", + "IncidentIntegrationMetadataCreateData", + "IncidentIntegrationMetadataCreateRequest", + "IncidentIntegrationMetadataListResponse", + "IncidentIntegrationMetadataMetadata", + "IncidentIntegrationMetadataPatchData", + "IncidentIntegrationMetadataPatchRequest", + "IncidentIntegrationMetadataResponse", + "IncidentIntegrationMetadataResponseData", + "IncidentIntegrationMetadataResponseIncludedItem", + "IncidentIntegrationMetadataType", + "IncidentIntegrationRelationships", + "IncidentNonDatadogCreator", + "IncidentNotificationHandle", + "IncidentNotificationRule", + "IncidentNotificationRuleArray", + "IncidentNotificationRuleArrayMeta", + "IncidentNotificationRuleArrayMetaPage", + "IncidentNotificationRuleAttributes", + "IncidentNotificationRuleAttributesVisibility", + "IncidentNotificationRuleConditionsItems", + "IncidentNotificationRuleCreateAttributes", + "IncidentNotificationRuleCreateAttributesVisibility", + "IncidentNotificationRuleCreateData", + "IncidentNotificationRuleCreateDataRelationships", + "IncidentNotificationRuleIncludedItems", + "IncidentNotificationRuleRelationships", + "IncidentNotificationRuleResponseData", + "IncidentNotificationRuleType", + "IncidentNotificationRuleUpdateData", + "IncidentNotificationTemplate", + "IncidentNotificationTemplateArray", + "IncidentNotificationTemplateArrayMeta", + "IncidentNotificationTemplateArrayMetaPage", + "IncidentNotificationTemplateAttributes", + "IncidentNotificationTemplateCreateAttributes", + "IncidentNotificationTemplateCreateData", + "IncidentNotificationTemplateCreateDataRelationships", + "IncidentNotificationTemplateIncludedItems", + "IncidentNotificationTemplateObject", + "IncidentNotificationTemplateRelationships", + "IncidentNotificationTemplateResponseData", + "IncidentNotificationTemplateType", + "IncidentNotificationTemplateUpdateAttributes", + "IncidentNotificationTemplateUpdateData", + "IncidentOnCallPageDataAttributesRequest", + "IncidentOnCallPageDataRequest", + "IncidentOnCallPageLinkRequest", + "IncidentOnCallPageTarget", + "IncidentOnCallPageType", + "IncidentOrgSettingsDataAttributesResponse", + "IncidentOrgSettingsDataResponse", + "IncidentOrgSettingsListResponse", + "IncidentOrgSettingsMeta", + "IncidentOrgSettingsRelationships", + "IncidentOrgSettingsResponse", + "IncidentOrgSettingsType", + "IncidentPageRoleReference", + "IncidentPageRoleType", + "IncidentPageTarget", + "IncidentPageTargetType", + "IncidentPageUUIDDataResponse", + "IncidentPageUUIDResponse", + "IncidentPageUUIDType", + "IncidentPostmortemType", + "IncidentRelatedObject", + "IncidentRelationshipData", + "IncidentResourceType", + "IncidentResponderDataAttributesResponse", + "IncidentResponderDataRequest", + "IncidentResponderDataResponse", + "IncidentResponderRelationships", + "IncidentResponderRelationshipsRequest", + "IncidentResponderRequest", + "IncidentResponderResponse", + "IncidentResponderRoleAssignmentRelationshipData", + "IncidentResponderRoleAssignmentsRelationship", + "IncidentResponderType", + "IncidentResponderUserRelationship", + "IncidentResponderUserRelationshipData", + "IncidentRespondersResponse", + "IncidentRespondersType", + "IncidentResponse", + "IncidentResponseAttributes", + "IncidentResponseData", + "IncidentResponseIncludedItem", + "IncidentResponseMeta", + "IncidentResponseMetaPagination", + "IncidentResponseRelationships", + "IncidentRuleCondition", + "IncidentRuleDataAttributesRequest", + "IncidentRuleDataAttributesResponse", + "IncidentRuleDataRequest", + "IncidentRuleDataResponse", + "IncidentRuleExecutionType", + "IncidentRulePatchDataAttributesRequest", + "IncidentRulePatchDataRequest", + "IncidentRulePatchRequest", + "IncidentRuleQueryCondition", + "IncidentRuleRequest", + "IncidentRuleResponse", + "IncidentRuleResponseType", + "IncidentRuleTaskIDType", + "IncidentRuleTriggerType", + "IncidentRuleType", + "IncidentRulesResponse", + "IncidentSearchResponse", + "IncidentSearchResponseAttributes", + "IncidentSearchResponseData", + "IncidentSearchResponseFacetsData", + "IncidentSearchResponseFieldFacetData", + "IncidentSearchResponseIncidentsData", + "IncidentSearchResponseMeta", + "IncidentSearchResponseNumericFacetData", + "IncidentSearchResponseNumericFacetDataAggregates", + "IncidentSearchResponsePropertyFieldFacetData", + "IncidentSearchResponseUserFacetData", + "IncidentSearchResultsType", + "IncidentSearchSortOrder", + "IncidentServiceNowRecordDataAttributesRequest", + "IncidentServiceNowRecordDataRequest", + "IncidentServiceNowRecordPromptType", + "IncidentServiceNowRecordRequest", + "IncidentSeverity", + "IncidentTimelineCellCreateAttributes", + "IncidentTimelineCellMarkdownContentType", + "IncidentTimelineCellMarkdownCreateAttributes", + "IncidentTimelineCellMarkdownCreateAttributesContent", + "IncidentTimestampOverrideDataAttributesRequest", + "IncidentTimestampOverrideDataAttributesResponse", + "IncidentTimestampOverrideDataRequest", + "IncidentTimestampOverrideDataResponse", + "IncidentTimestampOverridePatchDataAttributesRequest", + "IncidentTimestampOverridePatchDataRequest", + "IncidentTimestampOverridePatchRequest", + "IncidentTimestampOverrideRelationships", + "IncidentTimestampOverrideRequest", + "IncidentTimestampOverrideResponse", + "IncidentTimestampOverrideType", + "IncidentTimestampOverridesResponse", + "IncidentTimestampType", + "IncidentTodoAnonymousAssignee", + "IncidentTodoAnonymousAssigneeSource", + "IncidentTodoAssignee", + "IncidentTodoAssigneeArray", + "IncidentTodoAttributes", + "IncidentTodoCreateData", + "IncidentTodoCreateRequest", + "IncidentTodoListResponse", + "IncidentTodoPatchData", + "IncidentTodoPatchRequest", + "IncidentTodoRelationships", + "IncidentTodoResponse", + "IncidentTodoResponseData", + "IncidentTodoResponseIncludedItem", + "IncidentTodoType", + "IncidentTrigger", + "IncidentTriggerWrapper", + "IncidentType", + "IncidentTypeAttributes", + "IncidentTypeConfiguration", + "IncidentTypeCreateData", + "IncidentTypeCreateRequest", + "IncidentTypeListResponse", + "IncidentTypeObject", + "IncidentTypePatchData", + "IncidentTypePatchRequest", + "IncidentTypeRelationships", + "IncidentTypeResponse", + "IncidentTypeSlugSource", + "IncidentTypeType", + "IncidentTypeUpdateAttributes", + "IncidentUpdateAttributes", + "IncidentUpdateData", + "IncidentUpdateRelationships", + "IncidentUpdateRequest", + "IncidentUserAttributes", + "IncidentUserData", + "IncidentUserDefinedFieldAttributesCreateRequest", + "IncidentUserDefinedFieldAttributesResponse", + "IncidentUserDefinedFieldAttributesUpdateRequest", + "IncidentUserDefinedFieldCategory", + "IncidentUserDefinedFieldCollected", + "IncidentUserDefinedFieldCreateData", + "IncidentUserDefinedFieldCreateRelationships", + "IncidentUserDefinedFieldCreateRequest", + "IncidentUserDefinedFieldFieldType", + "IncidentUserDefinedFieldListMeta", + "IncidentUserDefinedFieldListResponse", + "IncidentUserDefinedFieldMetadata", + "IncidentUserDefinedFieldRelationships", + "IncidentUserDefinedFieldResponse", + "IncidentUserDefinedFieldResponseData", + "IncidentUserDefinedFieldType", + "IncidentUserDefinedFieldUpdateData", + "IncidentUserDefinedFieldUpdateRequest", + "IncidentUserDefinedFieldValidValue", + "IncidentUserDefinedRoleDataAttributesRequest", + "IncidentUserDefinedRoleDataAttributesResponse", + "IncidentUserDefinedRoleDataRequest", + "IncidentUserDefinedRoleDataResponse", + "IncidentUserDefinedRoleIncidentTypeRelationship", + "IncidentUserDefinedRoleIncidentTypeRelationshipData", + "IncidentUserDefinedRoleIncludedItem", + "IncidentUserDefinedRolePatchDataAttributesRequest", + "IncidentUserDefinedRolePatchDataRequest", + "IncidentUserDefinedRolePatchRequest", + "IncidentUserDefinedRolePolicy", + "IncidentUserDefinedRoleRelationshipsRequest", + "IncidentUserDefinedRoleRelationshipsResponse", + "IncidentUserDefinedRoleRequest", + "IncidentUserDefinedRoleResponse", + "IncidentUserDefinedRoleType", + "IncidentUserDefinedRolesResponse", + "IncidentsResponse", + "IncludeType", + "InputSchema", + "InputSchemaParameters", + "InputSchemaParametersType", + "IntakePayloadAccepted", + "Integration", + "IntegrationAttributes", + "IntegrationIncident", + "IntegrationIncidentFieldMappingsItems", + "IntegrationIncidentSeverityConfig", + "IntegrationJira", + "IntegrationJiraAutoCreation", + "IntegrationJiraMetadata", + "IntegrationJiraSync", + "IntegrationJiraSyncDueDate", + "IntegrationJiraSyncProperties", + "IntegrationJiraSyncPropertiesCustomFieldsAdditionalProperties", + "IntegrationLinks", + "IntegrationMonitor", + "IntegrationOnCall", + "IntegrationOnCallEscalationQueriesItems", + "IntegrationOnCallEscalationQueriesItemsTarget", + "IntegrationServiceNow", + "IntegrationServiceNowAutoCreation", + "IntegrationServiceNowSyncConfig", + "IntegrationServiceNowSyncConfig139772721534496", + "IntegrationServiceNowSyncConfigPriority", + "IntegrationType", + "InterfaceAttributes", + "InterfaceAttributesStatus", + "InvestigationConclusion", + "InvestigationType", + "IoCExplorerListResponse", + "IoCExplorerListResponseAttributes", + "IoCExplorerListResponseData", + "IoCExplorerListResponseMetadata", + "IoCExplorerListResponsePaging", + "IoCGeoLocation", + "IoCIndicator", + "IoCIndicatorDetailed", + "IoCScoreEffect", + "IoCSignalSeverityCount", + "IoCSource", + "IoCTriageEvent", + "IoCTriageState", + "IoCTriageWriteRequest", + "IoCTriageWriteRequestAttributes", + "IoCTriageWriteRequestData", + "IoCTriageWriteResponse", + "IoCTriageWriteResponseAttributes", + "IoCTriageWriteResponseData", + "Issue", + "IssueAssigneeRelationship", + "IssueAttributes", + "IssueCase", + "IssueCaseAttributes", + "IssueCaseInsight", + "IssueCaseJiraIssue", + "IssueCaseJiraIssueResult", + "IssueCaseLinearIssue", + "IssueCaseLinearIssueResult", + "IssueCaseReference", + "IssueCaseRelationship", + "IssueCaseRelationships", + "IssueCaseResourceType", + "IssueIncluded", + "IssueLanguage", + "IssuePlatform", + "IssueReference", + "IssueRegression", + "IssueRelationships", + "IssueResponse", + "IssueState", + "IssueTeam", + "IssueTeamAttributes", + "IssueTeamOwnersRelationship", + "IssueTeamReference", + "IssueTeamType", + "IssueType", + "IssueUpdateAssigneeRequest", + "IssueUpdateAssigneeRequestData", + "IssueUpdateAssigneeRequestDataType", + "IssueUpdateStateRequest", + "IssueUpdateStateRequestData", + "IssueUpdateStateRequestDataAttributes", + "IssueUpdateStateRequestDataType", + "IssueUser", + "IssueUserAttributes", + "IssueUserReference", + "IssueUserType", + "IssuesSearchRequest", + "IssuesSearchRequestData", + "IssuesSearchRequestDataAttributes", + "IssuesSearchRequestDataAttributesOrderBy", + "IssuesSearchRequestDataAttributesPersona", + "IssuesSearchRequestDataAttributesTrack", + "IssuesSearchRequestDataType", + "IssuesSearchResponse", + "IssuesSearchResult", + "IssuesSearchResultAttributes", + "IssuesSearchResultIncluded", + "IssuesSearchResultIssueRelationship", + "IssuesSearchResultRelationships", + "IssuesSearchResultType", + "ItemApiPayload", + "ItemApiPayloadArray", + "ItemApiPayloadData", + "ItemApiPayloadDataAttributes", + "ItemApiPayloadDataAttributesValue", + "ItemApiPayloadMeta", + "ItemApiPayloadMetaPage", + "ItemApiPayloadMetaSchema", + "ItemApiPayloadMetaSchemaField", + "JSONAPIErrorItem", + "JSONAPIErrorItemSource", + "JSONAPIErrorResponse", + "JSSourcemapAttributes", + "JSSourcemapData", + "JVMSourcemapAttributes", + "JVMSourcemapData", + "JiraAccountAttributes", + "JiraAccountData", + "JiraAccountRelationship", + "JiraAccountType", + "JiraAccountsMeta", + "JiraAccountsResponse", + "JiraIntegrationMetadata", + "JiraIntegrationMetadataIssuesItem", + "JiraIssue", + "JiraIssueCreateAttributes", + "JiraIssueCreateData", + "JiraIssueCreateRequest", + "JiraIssueLinkAttributes", + "JiraIssueLinkData", + "JiraIssueLinkRequest", + "JiraIssueResourceType", + "JiraIssueResult", + "JiraIssueTemplateCreateRequest", + "JiraIssueTemplateCreateRequestAttributes", + "JiraIssueTemplateCreateRequestAttributesJiraAccount", + "JiraIssueTemplateCreateRequestData", + "JiraIssueTemplateData", + "JiraIssueTemplateDataAttributes", + "JiraIssueTemplateDataRelationships", + "JiraIssueTemplateResponse", + "JiraIssueTemplateType", + "JiraIssueTemplateUpdateRequest", + "JiraIssueTemplateUpdateRequestAttributes", + "JiraIssueTemplateUpdateRequestData", + "JiraIssueTemplatesResponse", + "JiraIssuesDataType", + "JobCreateResponse", + "JobCreateResponseData", + "JobDefinition", + "JobDefinitionFromRule", + "JsonPatchOperation", + "JsonPatchOperationOp", + "KindAttributes", + "KindData", + "KindMetadata", + "KindObj", + "KindResponseMeta", + "LLMObsAnnotatedInteractionByTraceItem", + "LLMObsAnnotatedInteractionItem", + "LLMObsAnnotatedInteractionsByTraceDataAttributesResponse", + "LLMObsAnnotatedInteractionsByTraceDataResponse", + "LLMObsAnnotatedInteractionsByTraceResponse", + "LLMObsAnnotatedInteractionsByTraceType", + "LLMObsAnnotatedInteractionsDataAttributesResponse", + "LLMObsAnnotatedInteractionsDataResponse", + "LLMObsAnnotatedInteractionsResponse", + "LLMObsAnnotatedInteractionsType", + "LLMObsAnnotationAssessment", + "LLMObsAnnotationError", + "LLMObsAnnotationItem", + "LLMObsAnnotationItemResponse", + "LLMObsAnnotationLabelValue", + "LLMObsAnnotationLabelValueResponse", + "LLMObsAnnotationLabelValueValue", + "LLMObsAnnotationQueueDataAttributesRequest", + "LLMObsAnnotationQueueDataAttributesResponse", + "LLMObsAnnotationQueueDataRequest", + "LLMObsAnnotationQueueDataResponse", + "LLMObsAnnotationQueueInteractionItem", + "LLMObsAnnotationQueueInteractionResponseItem", + "LLMObsAnnotationQueueInteractionsDataAttributesRequest", + "LLMObsAnnotationQueueInteractionsDataAttributesResponse", + "LLMObsAnnotationQueueInteractionsDataRequest", + "LLMObsAnnotationQueueInteractionsDataResponse", + "LLMObsAnnotationQueueInteractionsRequest", + "LLMObsAnnotationQueueInteractionsResponse", + "LLMObsAnnotationQueueInteractionsType", + "LLMObsAnnotationQueueLabelSchemaAttributes", + "LLMObsAnnotationQueueLabelSchemaData", + "LLMObsAnnotationQueueLabelSchemaResponse", + "LLMObsAnnotationQueueLabelSchemaUpdateAttributes", + "LLMObsAnnotationQueueLabelSchemaUpdateData", + "LLMObsAnnotationQueueLabelSchemaUpdateRequest", + "LLMObsAnnotationQueueRequest", + "LLMObsAnnotationQueueResponse", + "LLMObsAnnotationQueueType", + "LLMObsAnnotationQueueUpdateDataAttributesRequest", + "LLMObsAnnotationQueueUpdateDataRequest", + "LLMObsAnnotationQueueUpdateRequest", + "LLMObsAnnotationQueuesResponse", + "LLMObsAnnotationSchema", + "LLMObsAnnotationsDataAttributesRequest", + "LLMObsAnnotationsDataAttributesResponse", + "LLMObsAnnotationsDataRequest", + "LLMObsAnnotationsDataResponse", + "LLMObsAnnotationsRequest", + "LLMObsAnnotationsResponse", + "LLMObsAnnotationsType", + "LLMObsAnthropicEffort", + "LLMObsAnthropicMetadata", + "LLMObsAnthropicThinkingConfig", + "LLMObsAnthropicThinkingType", + "LLMObsAnyInteractionType", + "LLMObsAzureOpenAIMetadata", + "LLMObsBedrockMetadata", + "LLMObsContentBlock", + "LLMObsContentBlockHeaderLevel", + "LLMObsContentBlockLLMObsTraceInteractionType", + "LLMObsContentBlockTimeFrame", + "LLMObsContentBlockType", + "LLMObsCreatePromptData", + "LLMObsCreatePromptDataAttributes", + "LLMObsCreatePromptRequest", + "LLMObsCreatePromptVersionData", + "LLMObsCreatePromptVersionDataAttributes", + "LLMObsCreatePromptVersionRequest", + "LLMObsCursorMeta", + "LLMObsCustomEvalConfigAssessmentCriteria", + "LLMObsCustomEvalConfigAttributes", + "LLMObsCustomEvalConfigBedrockOptions", + "LLMObsCustomEvalConfigData", + "LLMObsCustomEvalConfigEvalScope", + "LLMObsCustomEvalConfigInferenceParams", + "LLMObsCustomEvalConfigIntegrationProvider", + "LLMObsCustomEvalConfigLLMJudgeConfig", + "LLMObsCustomEvalConfigLLMProvider", + "LLMObsCustomEvalConfigListResponse", + "LLMObsCustomEvalConfigParsingType", + "LLMObsCustomEvalConfigPromptContent", + "LLMObsCustomEvalConfigPromptContentValue", + "LLMObsCustomEvalConfigPromptMessage", + "LLMObsCustomEvalConfigPromptToolCall", + "LLMObsCustomEvalConfigPromptToolResult", + "LLMObsCustomEvalConfigResponse", + "LLMObsCustomEvalConfigTarget", + "LLMObsCustomEvalConfigType", + "LLMObsCustomEvalConfigUpdateAttributes", + "LLMObsCustomEvalConfigUpdateData", + "LLMObsCustomEvalConfigUpdateRequest", + "LLMObsCustomEvalConfigUser", + "LLMObsCustomEvalConfigVertexAIOptions", + "LLMObsDataDeletionRequest", + "LLMObsDataDeletionRequestAttributes", + "LLMObsDataDeletionRequestData", + "LLMObsDataDeletionRequestType", + "LLMObsDataDeletionResponse", + "LLMObsDataDeletionResponseAttributes", + "LLMObsDataDeletionResponseData", + "LLMObsDataDeletionResponseType", + "LLMObsDatasetBatchUpdateDataAttributesRequest", + "LLMObsDatasetBatchUpdateDataRequest", + "LLMObsDatasetBatchUpdateInsertRecord", + "LLMObsDatasetBatchUpdateRequest", + "LLMObsDatasetBatchUpdateUpdateRecord", + "LLMObsDatasetCloneDataAttributesRequest", + "LLMObsDatasetCloneDataRequest", + "LLMObsDatasetCloneRequest", + "LLMObsDatasetDataAttributesRequest", + "LLMObsDatasetDataAttributesResponse", + "LLMObsDatasetDataRequest", + "LLMObsDatasetDataResponse", + "LLMObsDatasetDraftStateData", + "LLMObsDatasetDraftStateDataAttributes", + "LLMObsDatasetDraftStateResponse", + "LLMObsDatasetDraftStateType", + "LLMObsDatasetDraftStateUser", + "LLMObsDatasetExportFormat", + "LLMObsDatasetRecordDataResponse", + "LLMObsDatasetRecordItem", + "LLMObsDatasetRecordTagOperations", + "LLMObsDatasetRecordUpdateItem", + "LLMObsDatasetRecordsDataAttributesRequest", + "LLMObsDatasetRecordsDataRequest", + "LLMObsDatasetRecordsListResponse", + "LLMObsDatasetRecordsMutationData", + "LLMObsDatasetRecordsMutationResponse", + "LLMObsDatasetRecordsRequest", + "LLMObsDatasetRecordsUpdateDataAttributesRequest", + "LLMObsDatasetRecordsUpdateDataRequest", + "LLMObsDatasetRecordsUpdateRequest", + "LLMObsDatasetRecordsUploadFile", + "LLMObsDatasetRequest", + "LLMObsDatasetResponse", + "LLMObsDatasetRestoreVersionDataAttributesRequest", + "LLMObsDatasetRestoreVersionDataRequest", + "LLMObsDatasetRestoreVersionRequest", + "LLMObsDatasetType", + "LLMObsDatasetUpdateDataAttributesRequest", + "LLMObsDatasetUpdateDataRequest", + "LLMObsDatasetUpdateRequest", + "LLMObsDatasetVersionData", + "LLMObsDatasetVersionDataAttributes", + "LLMObsDatasetVersionType", + "LLMObsDatasetVersionsResponse", + "LLMObsDatasetsResponse", + "LLMObsDeleteAnnotationError", + "LLMObsDeleteAnnotationQueueInteractionsDataAttributesRequest", + "LLMObsDeleteAnnotationQueueInteractionsDataRequest", + "LLMObsDeleteAnnotationQueueInteractionsRequest", + "LLMObsDeleteAnnotationsDataAttributesRequest", + "LLMObsDeleteAnnotationsDataAttributesResponse", + "LLMObsDeleteAnnotationsDataRequest", + "LLMObsDeleteAnnotationsDataResponse", + "LLMObsDeleteAnnotationsRequest", + "LLMObsDeleteAnnotationsResponse", + "LLMObsDeleteDatasetRecordsDataAttributesRequest", + "LLMObsDeleteDatasetRecordsDataRequest", + "LLMObsDeleteDatasetRecordsRequest", + "LLMObsDeleteDatasetsDataAttributesRequest", + "LLMObsDeleteDatasetsDataRequest", + "LLMObsDeleteDatasetsRequest", + "LLMObsDeleteExperimentsDataAttributesRequest", + "LLMObsDeleteExperimentsDataRequest", + "LLMObsDeleteExperimentsRequest", + "LLMObsDeleteProjectsDataAttributesRequest", + "LLMObsDeleteProjectsDataRequest", + "LLMObsDeleteProjectsRequest", + "LLMObsDeletedPromptData", + "LLMObsDeletedPromptDataAttributes", + "LLMObsDeletedPromptResponse", + "LLMObsDisplayBlockAnnotatedInteractionItem", + "LLMObsDisplayBlockInteractionItem", + "LLMObsDisplayBlockInteractionResponseItem", + "LLMObsDisplayBlockInteractionType", + "LLMObsEventType", + "LLMObsExperimentDataAttributesRequest", + "LLMObsExperimentDataAttributesResponse", + "LLMObsExperimentDataRequest", + "LLMObsExperimentDataResponse", + "LLMObsExperimentEvalMetricEvent", + "LLMObsExperimentEventsDataAttributesRequest", + "LLMObsExperimentEventsDataRequest", + "LLMObsExperimentEventsRequest", + "LLMObsExperimentEventsType", + "LLMObsExperimentEventsV2DataAttributesResponse", + "LLMObsExperimentEventsV2DataResponse", + "LLMObsExperimentEventsV2Response", + "LLMObsExperimentMetric", + "LLMObsExperimentMetricError", + "LLMObsExperimentRequest", + "LLMObsExperimentResponse", + "LLMObsExperimentRunDataResponse", + "LLMObsExperimentSpan", + "LLMObsExperimentSpanDataResponse", + "LLMObsExperimentSpanError", + "LLMObsExperimentSpanMeta", + "LLMObsExperimentSpanStatus", + "LLMObsExperimentSpanType", + "LLMObsExperimentSpanWithEvals", + "LLMObsExperimentSpansResponse", + "LLMObsExperimentStatus", + "LLMObsExperimentType", + "LLMObsExperimentUpdateDataAttributesRequest", + "LLMObsExperimentUpdateDataRequest", + "LLMObsExperimentUpdateRequest", + "LLMObsExperimentUser", + "LLMObsExperimentationAnalyticsAggregate", + "LLMObsExperimentationAnalyticsCompute", + "LLMObsExperimentationAnalyticsDataAttributesRequest", + "LLMObsExperimentationAnalyticsDataAttributesResponse", + "LLMObsExperimentationAnalyticsDataRequest", + "LLMObsExperimentationAnalyticsDataResponse", + "LLMObsExperimentationAnalyticsGroupBy", + "LLMObsExperimentationAnalyticsRequest", + "LLMObsExperimentationAnalyticsResponse", + "LLMObsExperimentationAnalyticsResult", + "LLMObsExperimentationAnalyticsSearch", + "LLMObsExperimentationAnalyticsTimeRange", + "LLMObsExperimentationAnalyticsValue", + "LLMObsExperimentationContentPreview", + "LLMObsExperimentationCursorPage", + "LLMObsExperimentationFilter", + "LLMObsExperimentationInclude", + "LLMObsExperimentationNumberPage", + "LLMObsExperimentationSearchDataAttributesRequest", + "LLMObsExperimentationSearchDataRequest", + "LLMObsExperimentationSearchDataResponse", + "LLMObsExperimentationSearchRequest", + "LLMObsExperimentationSearchResponse", + "LLMObsExperimentationSearchResults", + "LLMObsExperimentationSimpleSearchDataAttributesRequest", + "LLMObsExperimentationSimpleSearchDataRequest", + "LLMObsExperimentationSimpleSearchDataResponse", + "LLMObsExperimentationSimpleSearchMeta", + "LLMObsExperimentationSimpleSearchMetaPage", + "LLMObsExperimentationSimpleSearchRequest", + "LLMObsExperimentationSimpleSearchResponse", + "LLMObsExperimentationSortField", + "LLMObsExperimentationSortFieldDirection", + "LLMObsExperimentationType", + "LLMObsExperimentsResponse", + "LLMObsInferenceCode", + "LLMObsInferenceContent", + "LLMObsInferenceContentValue", + "LLMObsInferenceErrorResponse", + "LLMObsInferenceFunction", + "LLMObsInferenceMessage", + "LLMObsInferenceRunResult", + "LLMObsInferenceTool", + "LLMObsInferenceToolCall", + "LLMObsInferenceToolResult", + "LLMObsIntegrationAccount", + "LLMObsIntegrationInferenceRequest", + "LLMObsIntegrationInferenceResponse", + "LLMObsIntegrationModel", + "LLMObsIntegrationModelRegionPrefixOverrides", + "LLMObsIntegrationName", + "LLMObsInternalReasoning", + "LLMObsLabelSchema", + "LLMObsLabelSchemaType", + "LLMObsMetricAssessment", + "LLMObsMetricScoreType", + "LLMObsOpenAIMetadata", + "LLMObsOpenAIReasoningEffort", + "LLMObsOpenAIReasoningSummary", + "LLMObsPatternsActivityProgress", + "LLMObsPatternsClusteredPoint", + "LLMObsPatternsClusteredPointRef", + "LLMObsPatternsClusteredPointsResponse", + "LLMObsPatternsClusteredPointsResponseAttributes", + "LLMObsPatternsClusteredPointsResponseData", + "LLMObsPatternsClusteredPointsType", + "LLMObsPatternsConfigAttributes", + "LLMObsPatternsConfigItem", + "LLMObsPatternsConfigResponse", + "LLMObsPatternsConfigResponseData", + "LLMObsPatternsConfigSnapshot", + "LLMObsPatternsConfigType", + "LLMObsPatternsConfigUpsertRequest", + "LLMObsPatternsConfigUpsertRequestAttributes", + "LLMObsPatternsConfigUpsertRequestData", + "LLMObsPatternsConfigsListType", + "LLMObsPatternsConfigsResponse", + "LLMObsPatternsConfigsResponseAttributes", + "LLMObsPatternsConfigsResponseData", + "LLMObsPatternsRequestType", + "LLMObsPatternsRunStatusResponse", + "LLMObsPatternsRunStatusResponseAttributes", + "LLMObsPatternsRunStatusResponseData", + "LLMObsPatternsRunStatusType", + "LLMObsPatternsRunSummary", + "LLMObsPatternsRunsListType", + "LLMObsPatternsRunsResponse", + "LLMObsPatternsRunsResponseAttributes", + "LLMObsPatternsRunsResponseData", + "LLMObsPatternsTopic", + "LLMObsPatternsTopicWithClusteredPoints", + "LLMObsPatternsTopicsResponse", + "LLMObsPatternsTopicsResponseAttributes", + "LLMObsPatternsTopicsResponseData", + "LLMObsPatternsTopicsType", + "LLMObsPatternsTopicsWithClusteredPointsResponse", + "LLMObsPatternsTopicsWithClusteredPointsResponseAttributes", + "LLMObsPatternsTopicsWithClusteredPointsResponseData", + "LLMObsPatternsTopicsWithClusteredPointsType", + "LLMObsPatternsTriggerRequest", + "LLMObsPatternsTriggerRequestAttributes", + "LLMObsPatternsTriggerRequestData", + "LLMObsPatternsTriggerResponse", + "LLMObsPatternsTriggerResponseAttributes", + "LLMObsPatternsTriggerResponseData", + "LLMObsPatternsTriggerResponseType", + "LLMObsProjectDataAttributesRequest", + "LLMObsProjectDataAttributesResponse", + "LLMObsProjectDataRequest", + "LLMObsProjectDataResponse", + "LLMObsProjectRequest", + "LLMObsProjectResponse", + "LLMObsProjectType", + "LLMObsProjectUpdateDataAttributesRequest", + "LLMObsProjectUpdateDataRequest", + "LLMObsProjectUpdateRequest", + "LLMObsProjectsResponse", + "LLMObsPromptChatMessage", + "LLMObsPromptData", + "LLMObsPromptDataAttributes", + "LLMObsPromptDataset", + "LLMObsPromptResponse", + "LLMObsPromptResponseSource", + "LLMObsPromptSDKData", + "LLMObsPromptSDKDataAttributes", + "LLMObsPromptSDKResponse", + "LLMObsPromptTemplate", + "LLMObsPromptType", + "LLMObsPromptVersionData", + "LLMObsPromptVersionDataAttributes", + "LLMObsPromptVersionLabel", + "LLMObsPromptVersionListData", + "LLMObsPromptVersionListDataAttributes", + "LLMObsPromptVersionResponse", + "LLMObsPromptVersionType", + "LLMObsPromptVersionsResponse", + "LLMObsPromptsResponse", + "LLMObsRecordType", + "LLMObsSearchSpansRequest", + "LLMObsSearchSpansRequestAttributes", + "LLMObsSearchSpansRequestData", + "LLMObsSearchSpansRequestType", + "LLMObsSpanAttributes", + "LLMObsSpanData", + "LLMObsSpanEvaluationMetric", + "LLMObsSpanFilter", + "LLMObsSpanIO", + "LLMObsSpanMessage", + "LLMObsSpanPageQuery", + "LLMObsSpanSearchOptions", + "LLMObsSpanToolCall", + "LLMObsSpanToolDefinition", + "LLMObsSpanToolResult", + "LLMObsSpanType", + "LLMObsSpansResponse", + "LLMObsSpansResponseLinks", + "LLMObsSpansResponseMeta", + "LLMObsSpansResponsePage", + "LLMObsTraceAnnotatedInteractionItem", + "LLMObsTraceInteractionItem", + "LLMObsTraceInteractionResponseItem", + "LLMObsTraceInteractionType", + "LLMObsUpdatePromptData", + "LLMObsUpdatePromptDataAttributes", + "LLMObsUpdatePromptRequest", + "LLMObsUpdatePromptVersionData", + "LLMObsUpdatePromptVersionDataAttributes", + "LLMObsUpdatePromptVersionRequest", + "LLMObsUpsertAnnotationItem", + "LLMObsVertexAIMetadata", + "Language", + "LatestVersionMatchPolicy", + "LaunchDarklyAPIKey", + "LaunchDarklyAPIKeyType", + "LaunchDarklyAPIKeyUpdate", + "LaunchDarklyCredentials", + "LaunchDarklyCredentialsUpdate", + "LaunchDarklyIntegration", + "LaunchDarklyIntegrationType", + "LaunchDarklyIntegrationUpdate", + "Layer", + "LayerAttributes", + "LayerAttributesInterval", + "LayerRelationships", + "LayerRelationshipsMembers", + "LayerRelationshipsMembersDataItems", + "LayerRelationshipsMembersDataItemsType", + "LayerType", + "LeakedKey", + "LeakedKeyAttributes", + "LeakedKeyType", + "Library", + "LicensesListResponse", + "LicensesListResponseData", + "LicensesListResponseDataAttributes", + "LicensesListResponseDataAttributesLicensesItems", + "LicensesListResponseDataType", + "LinearIssuesDataType", + "Links", + "ListAPIsResponse", + "ListAPIsResponseData", + "ListAPIsResponseDataAttributes", + "ListAPIsResponseMeta", + "ListAPIsResponseMetaPagination", + "ListAllocationsResponse", + "ListAppKeyRegistrationsResponse", + "ListAppKeyRegistrationsResponseMeta", + "ListAppVersionsResponse", + "ListApplicationKeysResponse", + "ListAppsResponse", + "ListAppsResponseDataItems", + "ListAppsResponseDataItemsAttributes", + "ListAppsResponseDataItemsRelationships", + "ListAppsResponseMeta", + "ListAppsResponseMetaPage", + "ListAssetsSBOMsResponse", + "ListBlueprintsResponse", + "ListCampaignsResponse", + "ListConnectionsResponse", + "ListConnectionsResponseData", + "ListConnectionsResponseDataAttributes", + "ListConnectionsResponseDataAttributesConnectionsItems", + "ListConnectionsResponseDataAttributesConnectionsItemsJoin", + "ListConnectionsResponseDataType", + "ListDashboardsUsageResponse", + "ListDashboardsUsageResponseLinks", + "ListDashboardsUsageResponseMeta", + "ListDeploymentRuleResponseData", + "ListDeploymentRulesDataType", + "ListDeploymentRulesResponseDataAttributes", + "ListDevicesResponse", + "ListDevicesResponseMetadata", + "ListDevicesResponseMetadataPage", + "ListDowntimesResponse", + "ListEntityCatalogResponse", + "ListEntityCatalogResponseIncludedItem", + "ListEntityCatalogResponseLinks", + "ListEnvironmentsResponse", + "ListFeatureFlagsResponse", + "ListFindingsMeta", + "ListFindingsPage", + "ListFindingsResponse", + "ListHistoricalJobsResponse", + "ListIntegrationsResponse", + "ListInterfaceTagsResponse", + "ListInterfaceTagsResponseData", + "ListInvestigationsResponse", + "ListInvestigationsResponseData", + "ListInvestigationsResponseDataAttributes", + "ListInvestigationsResponseLinks", + "ListInvestigationsResponseMeta", + "ListInvestigationsResponseMetaPage", + "ListKindCatalogResponse", + "ListNotificationChannelsResponse", + "ListOnCallNotificationRulesResponse", + "ListPersonalAccessTokensResponse", + "ListPipelinesResponse", + "ListPipelinesResponseMeta", + "ListPowerpacksResponse", + "ListRelationCatalogResponse", + "ListRelationCatalogResponseLinks", + "ListRowsResponse", + "ListRowsResponseLinks", + "ListRowsResponseMeta", + "ListRowsResponseMetaPage", + "ListRulesResponse", + "ListRulesResponseDataItem", + "ListRulesResponseLinks", + "ListScorecardScoresMeta", + "ListScorecardScoresResponse", + "ListScorecardsResponse", + "ListSecurityFindingsResponse", + "ListServiceAccessTokensResponse", + "ListSharedDashboardsResponse", + "ListSourcemapsResponse", + "ListTagsResponse", + "ListTagsResponseData", + "ListTagsResponseDataAttributes", + "ListTeamsInclude", + "ListTeamsSort", + "ListVulnerabilitiesResponse", + "ListVulnerableAssetsResponse", + "ListWorkflowsResponse", + "ListWorkflowsResponseMeta", + "ListWorkflowsResponseMetaPage", + "Log", + "LogAttributes", + "LogType", + "LogsAggregateBucket", + "LogsAggregateBucketValue", + "LogsAggregateBucketValueTimeseries", + "LogsAggregateBucketValueTimeseriesPoint", + "LogsAggregateRequest", + "LogsAggregateRequestPage", + "LogsAggregateResponse", + "LogsAggregateResponseData", + "LogsAggregateResponseStatus", + "LogsAggregateSort", + "LogsAggregateSortType", + "LogsAggregationFunction", + "LogsArchive", + "LogsArchiveAttributes", + "LogsArchiveAttributesCompressionMethod", + "LogsArchiveCreateRequest", + "LogsArchiveCreateRequestAttributes", + "LogsArchiveCreateRequestDefinition", + "LogsArchiveCreateRequestDestination", + "LogsArchiveDefinition", + "LogsArchiveDestination", + "LogsArchiveDestinationAzure", + "LogsArchiveDestinationAzureType", + "LogsArchiveDestinationGCS", + "LogsArchiveDestinationGCSType", + "LogsArchiveDestinationS3", + "LogsArchiveDestinationS3Type", + "LogsArchiveEncryptionS3", + "LogsArchiveEncryptionS3Type", + "LogsArchiveIntegrationAzure", + "LogsArchiveIntegrationGCS", + "LogsArchiveIntegrationS3", + "LogsArchiveIntegrationS3AccessKey", + "LogsArchiveIntegrationS3Role", + "LogsArchiveOrder", + "LogsArchiveOrderAttributes", + "LogsArchiveOrderDefinition", + "LogsArchiveOrderDefinitionType", + "LogsArchiveState", + "LogsArchiveStorageClassS3Type", + "LogsArchives", + "LogsCompute", + "LogsComputeType", + "LogsGroupBy", + "LogsGroupByHistogram", + "LogsGroupByMissing", + "LogsGroupByTotal", + "LogsListRequest", + "LogsListRequestPage", + "LogsListResponse", + "LogsListResponseLinks", + "LogsMetricCompute", + "LogsMetricComputeAggregationType", + "LogsMetricCreateAttributes", + "LogsMetricCreateData", + "LogsMetricCreateRequest", + "LogsMetricFilter", + "LogsMetricGroupBy", + "LogsMetricResponse", + "LogsMetricResponseAttributes", + "LogsMetricResponseCompute", + "LogsMetricResponseComputeAggregationType", + "LogsMetricResponseData", + "LogsMetricResponseFilter", + "LogsMetricResponseGroupBy", + "LogsMetricType", + "LogsMetricUpdateAttributes", + "LogsMetricUpdateCompute", + "LogsMetricUpdateData", + "LogsMetricUpdateRequest", + "LogsMetricsResponse", + "LogsQueryFilter", + "LogsQueryOptions", + "LogsResponseMetadata", + "LogsResponseMetadataPage", + "LogsRestrictionQueriesType", + "LogsSort", + "LogsSortOrder", + "LogsStorageTier", + "LogsWarning", + "LongTaskMetricStats", + "LongTaskStatsPerView", + "MSTeamsIntegrationMetadata", + "MSTeamsIntegrationMetadataTeamsItem", + "Maintenance", + "MaintenanceArray", + "MaintenanceData", + "MaintenanceDataAttributes", + "MaintenanceDataAttributesComponentsAffectedItems", + "MaintenanceDataAttributesStatus", + "MaintenanceDataAttributesUpdatesItems", + "MaintenanceDataAttributesUpdatesItemsComponentsAffectedItems", + "MaintenanceDataRelationships", + "MaintenanceDataRelationshipsCreatedByUser", + "MaintenanceDataRelationshipsCreatedByUserData", + "MaintenanceDataRelationshipsLastModifiedByUser", + "MaintenanceDataRelationshipsLastModifiedByUserData", + "MaintenanceDataRelationshipsStatusPage", + "MaintenanceDataRelationshipsStatusPageData", + "MaintenanceDataRelationshipsTemplate", + "MaintenanceDataRelationshipsTemplateData", + "MaintenanceTemplate", + "MaintenanceTemplateArray", + "MaintenanceTemplateData", + "MaintenanceTemplateDataAttributes", + "MaintenanceTemplateDataRelationships", + "MaintenanceTemplateDataRelationshipsCreatedByUser", + "MaintenanceTemplateDataRelationshipsCreatedByUserData", + "MaintenanceTemplateDataRelationshipsLastModifiedByUser", + "MaintenanceTemplateDataRelationshipsLastModifiedByUserData", + "MaintenanceTemplateDataRelationshipsStatusPage", + "MaintenanceTemplateDataRelationshipsStatusPageData", + "MaintenanceUpdate", + "MaintenanceUpdateData", + "MaintenanceUpdateDataAttributes", + "MaintenanceUpdateDataAttributesStatus", + "MaintenanceUpdateDataRelationships", + "MaintenanceUpdateDataRelationshipsMaintenance", + "MaintenanceUpdateDataRelationshipsMaintenanceData", + "MaintenanceUpdateDataRelationshipsUser", + "MaintenanceUpdateDataRelationshipsUserData", + "MaintenanceWindow", + "MaintenanceWindowAttributes", + "MaintenanceWindowCreate", + "MaintenanceWindowCreateAttributes", + "MaintenanceWindowCreateRequest", + "MaintenanceWindowResourceType", + "MaintenanceWindowResponse", + "MaintenanceWindowUpdate", + "MaintenanceWindowUpdateAttributes", + "MaintenanceWindowUpdateRequest", + "MaintenanceWindowsResponse", + "ManagedOrgsData", + "ManagedOrgsRelationshipToOrg", + "ManagedOrgsRelationshipToOrgs", + "ManagedOrgsRelationships", + "ManagedOrgsResponse", + "ManagedOrgsType", + "MaxSessionDurationType", + "MaxSessionDurationUpdateAttributes", + "MaxSessionDurationUpdateData", + "MaxSessionDurationUpdateRequest", + "McpScanRequest", + "McpScanRequestData", + "McpScanRequestDataAttributes", + "McpScanRequestDataAttributesLibrariesItems", + "McpScanRequestDataType", + "McpScanRequestResponse", + "McpScanRequestResponseData", + "McpScanRequestResponseDataAttributes", + "McpScanRequestResponseDataType", + "MemberTeam", + "MemberTeamType", + "Metadata", + "Metric", + "MetricActiveConfigurationType", + "MetricAllTags", + "MetricAllTagsAttributes", + "MetricAllTagsResponse", + "MetricAssetAttributes", + "MetricAssetDashboardRelationship", + "MetricAssetDashboardRelationships", + "MetricAssetMonitorRelationship", + "MetricAssetMonitorRelationships", + "MetricAssetNotebookRelationship", + "MetricAssetNotebookRelationships", + "MetricAssetResponseData", + "MetricAssetResponseIncluded", + "MetricAssetResponseRelationships", + "MetricAssetSLORelationship", + "MetricAssetSLORelationships", + "MetricAssetsResponse", + "MetricBulkConfigureTagsType", + "MetricBulkTagConfigCreate", + "MetricBulkTagConfigCreateAttributes", + "MetricBulkTagConfigCreateRequest", + "MetricBulkTagConfigDelete", + "MetricBulkTagConfigDeleteAttributes", + "MetricBulkTagConfigDeleteRequest", + "MetricBulkTagConfigEmailList", + "MetricBulkTagConfigResponse", + "MetricBulkTagConfigStatus", + "MetricBulkTagConfigStatusAttributes", + "MetricBulkTagConfigTagNameList", + "MetricContentEncoding", + "MetricCustomAggregation", + "MetricCustomAggregations", + "MetricCustomSpaceAggregation", + "MetricCustomTimeAggregation", + "MetricDashboardAsset", + "MetricDashboardAttributes", + "MetricDashboardType", + "MetricDistinctVolume", + "MetricDistinctVolumeAttributes", + "MetricDistinctVolumeType", + "MetricEstimate", + "MetricEstimateAttributes", + "MetricEstimateResourceType", + "MetricEstimateResponse", + "MetricEstimateType", + "MetricIngestedIndexedVolume", + "MetricIngestedIndexedVolumeAttributes", + "MetricIngestedIndexedVolumeType", + "MetricIntakeType", + "MetricMetaPage", + "MetricMetaPageType", + "MetricMetadata", + "MetricMonitorAsset", + "MetricMonitorType", + "MetricNotebookAsset", + "MetricNotebookType", + "MetricOrigin", + "MetricPaginationMeta", + "MetricPayload", + "MetricPoint", + "MetricRelationships", + "MetricResource", + "MetricSLOAsset", + "MetricSLOType", + "MetricSeries", + "MetricSuggestedAggregations", + "MetricSuggestedTagsAndAggregations", + "MetricSuggestedTagsAndAggregationsResponse", + "MetricSuggestedTagsAttributes", + "MetricTagCardinalitiesMeta", + "MetricTagCardinalitiesResponse", + "MetricTagCardinality", + "MetricTagCardinalityAttributes", + "MetricTagConfiguration", + "MetricTagConfigurationAttributes", + "MetricTagConfigurationCreateAttributes", + "MetricTagConfigurationCreateData", + "MetricTagConfigurationCreateRequest", + "MetricTagConfigurationMetricTypeCategory", + "MetricTagConfigurationMetricTypes", + "MetricTagConfigurationResponse", + "MetricTagConfigurationType", + "MetricTagConfigurationUpdateAttributes", + "MetricTagConfigurationUpdateData", + "MetricTagConfigurationUpdateRequest", + "MetricType", + "MetricVolumes", + "MetricVolumesRelationship", + "MetricVolumesRelationshipData", + "MetricVolumesResponse", + "MetricsAggregator", + "MetricsAndMetricTagConfigurations", + "MetricsAndMetricTagConfigurationsResponse", + "MetricsDataSource", + "MetricsListResponseLinks", + "MetricsScalarQuery", + "MetricsTimeseriesQuery", + "MicrosoftSentinelDestination", + "MicrosoftSentinelDestinationType", + "MicrosoftTeamsChannelInfoResponseAttributes", + "MicrosoftTeamsChannelInfoResponseData", + "MicrosoftTeamsChannelInfoType", + "MicrosoftTeamsConfigurationReference", + "MicrosoftTeamsConfigurationReferenceData", + "MicrosoftTeamsCreateTenantBasedHandleRequest", + "MicrosoftTeamsCreateWorkflowsWebhookHandleRequest", + "MicrosoftTeamsGetChannelByNameResponse", + "MicrosoftTeamsTenantBasedHandleAttributes", + "MicrosoftTeamsTenantBasedHandleInfoResponseAttributes", + "MicrosoftTeamsTenantBasedHandleInfoResponseData", + "MicrosoftTeamsTenantBasedHandleInfoType", + "MicrosoftTeamsTenantBasedHandleRequestAttributes", + "MicrosoftTeamsTenantBasedHandleRequestData", + "MicrosoftTeamsTenantBasedHandleResponse", + "MicrosoftTeamsTenantBasedHandleResponseData", + "MicrosoftTeamsTenantBasedHandleType", + "MicrosoftTeamsTenantBasedHandlesResponse", + "MicrosoftTeamsUpdateTenantBasedHandleRequest", + "MicrosoftTeamsUpdateTenantBasedHandleRequestData", + "MicrosoftTeamsUpdateWorkflowsWebhookHandleRequest", + "MicrosoftTeamsUpdateWorkflowsWebhookHandleRequestData", + "MicrosoftTeamsWorkflowsWebhookHandleAttributes", + "MicrosoftTeamsWorkflowsWebhookHandleRequestAttributes", + "MicrosoftTeamsWorkflowsWebhookHandleRequestData", + "MicrosoftTeamsWorkflowsWebhookHandleResponse", + "MicrosoftTeamsWorkflowsWebhookHandleResponseData", + "MicrosoftTeamsWorkflowsWebhookHandleType", + "MicrosoftTeamsWorkflowsWebhookHandlesResponse", + "MicrosoftTeamsWorkflowsWebhookResponseAttributes", + "ModelLabArtifactInfo", + "ModelLabArtifactObjectInfo", + "ModelLabFacetKeysAttributes", + "ModelLabFacetKeysData", + "ModelLabFacetKeysResponse", + "ModelLabFacetKeysType", + "ModelLabFacetType", + "ModelLabFacetValuesAttributes", + "ModelLabFacetValuesData", + "ModelLabFacetValuesResponse", + "ModelLabFacetValuesType", + "ModelLabMetricStatRange", + "ModelLabMetricSummary", + "ModelLabNumericRange", + "ModelLabPageMeta", + "ModelLabPageMetaPage", + "ModelLabPaginationLinks", + "ModelLabProjectArtifactsAttributes", + "ModelLabProjectArtifactsData", + "ModelLabProjectArtifactsResponse", + "ModelLabProjectArtifactsType", + "ModelLabProjectAttributes", + "ModelLabProjectData", + "ModelLabProjectFacetType", + "ModelLabProjectResponse", + "ModelLabProjectType", + "ModelLabProjectsResponse", + "ModelLabRunArtifactsAttributes", + "ModelLabRunArtifactsData", + "ModelLabRunArtifactsResponse", + "ModelLabRunArtifactsType", + "ModelLabRunAttributes", + "ModelLabRunData", + "ModelLabRunParam", + "ModelLabRunResponse", + "ModelLabRunStatus", + "ModelLabRunType", + "ModelLabRunsResponse", + "ModelLabTag", + "MonitorAlertTriggerAttributes", + "MonitorConfigPolicyAttributeCreateRequest", + "MonitorConfigPolicyAttributeEditRequest", + "MonitorConfigPolicyAttributeResponse", + "MonitorConfigPolicyCreateData", + "MonitorConfigPolicyCreateRequest", + "MonitorConfigPolicyEditData", + "MonitorConfigPolicyEditRequest", + "MonitorConfigPolicyListResponse", + "MonitorConfigPolicyPolicy", + "MonitorConfigPolicyPolicyCreateRequest", + "MonitorConfigPolicyResourceType", + "MonitorConfigPolicyResponse", + "MonitorConfigPolicyResponseData", + "MonitorConfigPolicyTagPolicy", + "MonitorConfigPolicyTagPolicyCreateRequest", + "MonitorConfigPolicyType", + "MonitorDowntimeMatchResourceType", + "MonitorDowntimeMatchResponse", + "MonitorDowntimeMatchResponseAttributes", + "MonitorDowntimeMatchResponseData", + "MonitorNotificationRuleAttributes", + "MonitorNotificationRuleCondition", + "MonitorNotificationRuleConditionalRecipients", + "MonitorNotificationRuleCreateRequest", + "MonitorNotificationRuleCreateRequestData", + "MonitorNotificationRuleData", + "MonitorNotificationRuleFilter", + "MonitorNotificationRuleFilterScope", + "MonitorNotificationRuleFilterTags", + "MonitorNotificationRuleListResponse", + "MonitorNotificationRuleRelationships", + "MonitorNotificationRuleRelationshipsCreatedBy", + "MonitorNotificationRuleRelationshipsCreatedByData", + "MonitorNotificationRuleResourceType", + "MonitorNotificationRuleResponse", + "MonitorNotificationRuleResponseAttributes", + "MonitorNotificationRuleResponseIncludedItem", + "MonitorNotificationRuleUpdateRequest", + "MonitorNotificationRuleUpdateRequestData", + "MonitorTrigger", + "MonitorTriggerWrapper", + "MonitorType", + "MonitorUserTemplate", + "MonitorUserTemplateCreateData", + "MonitorUserTemplateCreateRequest", + "MonitorUserTemplateCreateResponse", + "MonitorUserTemplateListResponse", + "MonitorUserTemplateRequestAttributes", + "MonitorUserTemplateResourceType", + "MonitorUserTemplateResponse", + "MonitorUserTemplateResponseAttributes", + "MonitorUserTemplateResponseData", + "MonitorUserTemplateResponseDataWithVersions", + "MonitorUserTemplateTemplateVariablesItems", + "MonitorUserTemplateUpdateData", + "MonitorUserTemplateUpdateRequest", + "MonthlyCostAttributionAttributes", + "MonthlyCostAttributionBody", + "MonthlyCostAttributionMeta", + "MonthlyCostAttributionPagination", + "MonthlyCostAttributionResponse", + "MuteDataType", + "MuteFindingsMuteAttributes", + "MuteFindingsReason", + "MuteFindingsRequest", + "MuteFindingsRequestData", + "MuteFindingsRequestDataAttributes", + "MuteFindingsRequestDataRelationships", + "MuteFindingsResponse", + "MuteFindingsResponseData", + "MuteReason", + "MuteRuleAction", + "MuteRuleAttributesCreate", + "MuteRuleAttributesResponse", + "MuteRuleCreateRequest", + "MuteRuleDataCreate", + "MuteRuleDataResponse", + "MuteRuleReorderItem", + "MuteRuleReorderRequest", + "MuteRuleResponse", + "MuteRuleType", + "MuteRuleUpdateRequest", + "MuteRulesResponse", + "NDKSourcemapAttributes", + "NDKSourcemapData", + "NetworkHealthInsight", + "NetworkHealthInsightAttributes", + "NetworkHealthInsightCategory", + "NetworkHealthInsightFailureType", + "NetworkHealthInsightTrafficVolume", + "NetworkHealthInsightsResponse", + "NetworkHealthInsightsType", + "NodeType", + "NodeTypesResponse", + "NodeTypesResponseData", + "NodeTypesResponseDataAttributes", + "NodeTypesResponseDataType", + "NotebookCreateData", + "NotebookCreateRequest", + "NotebookResourceType", + "NotebookTriggerWrapper", + "NotificationChannel", + "NotificationChannelAttributes", + "NotificationChannelConfig", + "NotificationChannelData", + "NotificationChannelEmailConfig", + "NotificationChannelEmailConfigType", + "NotificationChannelEmailFormatType", + "NotificationChannelPhoneConfig", + "NotificationChannelPhoneConfigType", + "NotificationChannelPushConfig", + "NotificationChannelPushConfigType", + "NotificationChannelType", + "NotificationRule", + "NotificationRuleAttributes", + "NotificationRulePreviewNotificationStatus", + "NotificationRulePreviewResponse", + "NotificationRulePreviewResponseAttributes", + "NotificationRulePreviewResponseData", + "NotificationRulePreviewResponseType", + "NotificationRulePreviewResult", + "NotificationRuleResponse", + "NotificationRuleRouting", + "NotificationRuleRoutingMode", + "NotificationRulesListResponse", + "NotificationRulesType", + "NotionAPIKey", + "NotionAPIKeyType", + "NotionAPIKeyUpdate", + "NotionCredentials", + "NotionCredentialsUpdate", + "NotionIntegration", + "NotionIntegrationType", + "NotionIntegrationUpdate", + "NullableRelationshipToUser", + "NullableRelationshipToUserData", + "NullableUserRelationship", + "NullableUserRelationshipData", + "OAuth2WellKnownSitesAttributes", + "OAuth2WellKnownSitesData", + "OAuth2WellKnownSitesEnvType", + "OAuth2WellKnownSitesResponse", + "OAuthClientRegistrationError", + "OAuthClientRegistrationGrantType", + "OAuthClientRegistrationRequest", + "OAuthClientRegistrationResponse", + "OAuthClientRegistrationResponseType", + "OAuthOidcScope", + "OAuthScopesRestriction", + "OAuthScopesRestrictionResponse", + "OAuthScopesRestrictionResponseAttributes", + "OAuthScopesRestrictionResponseData", + "OAuthScopesRestrictionType", + "OCIConfig", + "OCIConfigAttributes", + "OCIConfigType", + "OCIConfigsResponse", + "ObservabilityPipeline", + "ObservabilityPipelineAddEnvVarsProcessor", + "ObservabilityPipelineAddEnvVarsProcessorType", + "ObservabilityPipelineAddEnvVarsProcessorVariable", + "ObservabilityPipelineAddFieldsProcessor", + "ObservabilityPipelineAddFieldsProcessorType", + "ObservabilityPipelineAddHostnameProcessor", + "ObservabilityPipelineAddHostnameProcessorType", + "ObservabilityPipelineAddMetricTagsProcessor", + "ObservabilityPipelineAddMetricTagsProcessorType", + "ObservabilityPipelineAggregateProcessor", + "ObservabilityPipelineAggregateProcessorMode", + "ObservabilityPipelineAggregateProcessorType", + "ObservabilityPipelineAmazonDataFirehoseSource", + "ObservabilityPipelineAmazonDataFirehoseSourceType", + "ObservabilityPipelineAmazonOpenSearchDestination", + "ObservabilityPipelineAmazonOpenSearchDestinationAuth", + "ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy", + "ObservabilityPipelineAmazonOpenSearchDestinationType", + "ObservabilityPipelineAmazonS3Destination", + "ObservabilityPipelineAmazonS3DestinationServerSideEncryption", + "ObservabilityPipelineAmazonS3DestinationStorageClass", + "ObservabilityPipelineAmazonS3DestinationType", + "ObservabilityPipelineAmazonS3GenericBatchSettings", + "ObservabilityPipelineAmazonS3GenericCompression", + "ObservabilityPipelineAmazonS3GenericCompressionGzip", + "ObservabilityPipelineAmazonS3GenericCompressionGzipType", + "ObservabilityPipelineAmazonS3GenericCompressionSnappy", + "ObservabilityPipelineAmazonS3GenericCompressionSnappyType", + "ObservabilityPipelineAmazonS3GenericCompressionZstd", + "ObservabilityPipelineAmazonS3GenericCompressionZstdType", + "ObservabilityPipelineAmazonS3GenericDestination", + "ObservabilityPipelineAmazonS3GenericDestinationType", + "ObservabilityPipelineAmazonS3GenericEncoding", + "ObservabilityPipelineAmazonS3GenericEncodingJson", + "ObservabilityPipelineAmazonS3GenericEncodingJsonType", + "ObservabilityPipelineAmazonS3GenericEncodingParquet", + "ObservabilityPipelineAmazonS3GenericEncodingParquetType", + "ObservabilityPipelineAmazonS3Source", + "ObservabilityPipelineAmazonS3SourceCompression", + "ObservabilityPipelineAmazonS3SourceType", + "ObservabilityPipelineAmazonSecurityLakeDestination", + "ObservabilityPipelineAmazonSecurityLakeDestinationType", + "ObservabilityPipelineAwsAuth", + "ObservabilityPipelineBufferOptions", + "ObservabilityPipelineBufferOptionsDiskType", + "ObservabilityPipelineBufferOptionsMemoryType", + "ObservabilityPipelineBufferOptionsWhenFull", + "ObservabilityPipelineClickhouseDestination", + "ObservabilityPipelineClickhouseDestinationAuth", + "ObservabilityPipelineClickhouseDestinationAuthStrategy", + "ObservabilityPipelineClickhouseDestinationBatch", + "ObservabilityPipelineClickhouseDestinationBatchEncoding", + "ObservabilityPipelineClickhouseDestinationBatchEncodingCodec", + "ObservabilityPipelineClickhouseDestinationCompression", + "ObservabilityPipelineClickhouseDestinationCompressionAlgorithm", + "ObservabilityPipelineClickhouseDestinationCompressionObject", + "ObservabilityPipelineClickhouseDestinationFormat", + "ObservabilityPipelineClickhouseDestinationType", + "ObservabilityPipelineClientTls", + "ObservabilityPipelineCloudPremDestination", + "ObservabilityPipelineCloudPremDestinationType", + "ObservabilityPipelineConfig", + "ObservabilityPipelineConfigDestinationItem", + "ObservabilityPipelineConfigPipelineType", + "ObservabilityPipelineConfigProcessorGroup", + "ObservabilityPipelineConfigProcessorItem", + "ObservabilityPipelineConfigSourceItem", + "ObservabilityPipelineCrowdStrikeNextGenSiemDestination", + "ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompression", + "ObservabilityPipelineCrowdStrikeNextGenSiemDestinationCompressionAlgorithm", + "ObservabilityPipelineCrowdStrikeNextGenSiemDestinationEncoding", + "ObservabilityPipelineCrowdStrikeNextGenSiemDestinationType", + "ObservabilityPipelineCustomProcessor", + "ObservabilityPipelineCustomProcessorRemap", + "ObservabilityPipelineCustomProcessorType", + "ObservabilityPipelineData", + "ObservabilityPipelineDataAttributes", + "ObservabilityPipelineDatabricksZerobusDestination", + "ObservabilityPipelineDatabricksZerobusDestinationAuth", + "ObservabilityPipelineDatabricksZerobusDestinationType", + "ObservabilityPipelineDatadogAgentSource", + "ObservabilityPipelineDatadogAgentSourceType", + "ObservabilityPipelineDatadogLogsDestination", + "ObservabilityPipelineDatadogLogsDestinationRoute", + "ObservabilityPipelineDatadogLogsDestinationType", + "ObservabilityPipelineDatadogMetricsDestination", + "ObservabilityPipelineDatadogMetricsDestinationType", + "ObservabilityPipelineDatadogTagsProcessor", + "ObservabilityPipelineDatadogTagsProcessorAction", + "ObservabilityPipelineDatadogTagsProcessorMode", + "ObservabilityPipelineDatadogTagsProcessorType", + "ObservabilityPipelineDecoding", + "ObservabilityPipelineDedupeProcessor", + "ObservabilityPipelineDedupeProcessorCache", + "ObservabilityPipelineDedupeProcessorMode", + "ObservabilityPipelineDedupeProcessorType", + "ObservabilityPipelineDiskBufferOptions", + "ObservabilityPipelineElasticsearchDestination", + "ObservabilityPipelineElasticsearchDestinationApiVersion", + "ObservabilityPipelineElasticsearchDestinationAuth", + "ObservabilityPipelineElasticsearchDestinationCompression", + "ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm", + "ObservabilityPipelineElasticsearchDestinationDataStream", + "ObservabilityPipelineElasticsearchDestinationType", + "ObservabilityPipelineEnrichmentTableFieldEventLookup", + "ObservabilityPipelineEnrichmentTableFieldSecretLookup", + "ObservabilityPipelineEnrichmentTableFieldVrlLookup", + "ObservabilityPipelineEnrichmentTableFile", + "ObservabilityPipelineEnrichmentTableFileEncoding", + "ObservabilityPipelineEnrichmentTableFileEncodingType", + "ObservabilityPipelineEnrichmentTableFileKeyItemField", + "ObservabilityPipelineEnrichmentTableFileKeyItems", + "ObservabilityPipelineEnrichmentTableFileKeyItemsComparison", + "ObservabilityPipelineEnrichmentTableFileSchemaItems", + "ObservabilityPipelineEnrichmentTableFileSchemaItemsType", + "ObservabilityPipelineEnrichmentTableGeoIp", + "ObservabilityPipelineEnrichmentTableProcessor", + "ObservabilityPipelineEnrichmentTableProcessorType", + "ObservabilityPipelineEnrichmentTableReferenceTable", + "ObservabilityPipelineFieldValue", + "ObservabilityPipelineFilterProcessor", + "ObservabilityPipelineFilterProcessorType", + "ObservabilityPipelineFluentBitSource", + "ObservabilityPipelineFluentBitSourceType", + "ObservabilityPipelineFluentdSource", + "ObservabilityPipelineFluentdSourceType", + "ObservabilityPipelineGcpAuth", + "ObservabilityPipelineGenerateMetricsProcessor", + "ObservabilityPipelineGenerateMetricsProcessorType", + "ObservabilityPipelineGenerateMetricsV2Processor", + "ObservabilityPipelineGenerateMetricsV2ProcessorType", + "ObservabilityPipelineGeneratedMetric", + "ObservabilityPipelineGeneratedMetricIncrementByField", + "ObservabilityPipelineGeneratedMetricIncrementByFieldStrategy", + "ObservabilityPipelineGeneratedMetricIncrementByOne", + "ObservabilityPipelineGeneratedMetricIncrementByOneStrategy", + "ObservabilityPipelineGeneratedMetricMetricType", + "ObservabilityPipelineGoogleChronicleDestination", + "ObservabilityPipelineGoogleChronicleDestinationEncoding", + "ObservabilityPipelineGoogleChronicleDestinationType", + "ObservabilityPipelineGoogleCloudStorageDestination", + "ObservabilityPipelineGoogleCloudStorageDestinationAcl", + "ObservabilityPipelineGoogleCloudStorageDestinationStorageClass", + "ObservabilityPipelineGoogleCloudStorageDestinationType", + "ObservabilityPipelineGooglePubSubDestination", + "ObservabilityPipelineGooglePubSubDestinationEncoding", + "ObservabilityPipelineGooglePubSubDestinationType", + "ObservabilityPipelineGooglePubSubSource", + "ObservabilityPipelineGooglePubSubSourceType", + "ObservabilityPipelineHttpClientDestination", + "ObservabilityPipelineHttpClientDestinationAuthStrategy", + "ObservabilityPipelineHttpClientDestinationCompression", + "ObservabilityPipelineHttpClientDestinationCompressionAlgorithm", + "ObservabilityPipelineHttpClientDestinationEncoding", + "ObservabilityPipelineHttpClientDestinationType", + "ObservabilityPipelineHttpClientSource", + "ObservabilityPipelineHttpClientSourceAuthStrategy", + "ObservabilityPipelineHttpClientSourceType", + "ObservabilityPipelineHttpServerSource", + "ObservabilityPipelineHttpServerSourceAuthStrategy", + "ObservabilityPipelineHttpServerSourceType", + "ObservabilityPipelineHttpServerSourceValidToken", + "ObservabilityPipelineHttpServerSourceValidTokenPathToToken", + "ObservabilityPipelineHttpServerSourceValidTokenPathToTokenHeader", + "ObservabilityPipelineHttpServerSourceValidTokenPathToTokenLocation", + "ObservabilityPipelineKafkaDestination", + "ObservabilityPipelineKafkaDestinationCompression", + "ObservabilityPipelineKafkaDestinationEncoding", + "ObservabilityPipelineKafkaDestinationType", + "ObservabilityPipelineKafkaLibrdkafkaOption", + "ObservabilityPipelineKafkaSasl", + "ObservabilityPipelineKafkaSaslMechanism", + "ObservabilityPipelineKafkaSource", + "ObservabilityPipelineKafkaSourceType", + "ObservabilityPipelineLogstashSource", + "ObservabilityPipelineLogstashSourceType", + "ObservabilityPipelineMemoryBufferOptions", + "ObservabilityPipelineMemoryBufferSizeOptions", + "ObservabilityPipelineMetadataEntry", + "ObservabilityPipelineMetricTagsProcessor", + "ObservabilityPipelineMetricTagsProcessorRule", + "ObservabilityPipelineMetricTagsProcessorRuleAction", + "ObservabilityPipelineMetricTagsProcessorRuleMode", + "ObservabilityPipelineMetricTagsProcessorType", + "ObservabilityPipelineMetricValue", + "ObservabilityPipelineMtlsServerTls", + "ObservabilityPipelineNewRelicDestination", + "ObservabilityPipelineNewRelicDestinationRegion", + "ObservabilityPipelineNewRelicDestinationType", + "ObservabilityPipelineOcsfMapperProcessor", + "ObservabilityPipelineOcsfMapperProcessorMapping", + "ObservabilityPipelineOcsfMapperProcessorMappingMapping", + "ObservabilityPipelineOcsfMapperProcessorType", + "ObservabilityPipelineOcsfMappingCustom", + "ObservabilityPipelineOcsfMappingCustomFieldMapping", + "ObservabilityPipelineOcsfMappingCustomLookup", + "ObservabilityPipelineOcsfMappingCustomLookupTableEntry", + "ObservabilityPipelineOcsfMappingCustomMetadata", + "ObservabilityPipelineOcsfMappingLibrary", + "ObservabilityPipelineOpenSearchDestination", + "ObservabilityPipelineOpenSearchDestinationDataStream", + "ObservabilityPipelineOpenSearchDestinationType", + "ObservabilityPipelineOpentelemetrySource", + "ObservabilityPipelineOpentelemetrySourceType", + "ObservabilityPipelineParseGrokProcessor", + "ObservabilityPipelineParseGrokProcessorIncludeRule", + "ObservabilityPipelineParseGrokProcessorRule", + "ObservabilityPipelineParseGrokProcessorRuleItem", + "ObservabilityPipelineParseGrokProcessorRuleMatchRule", + "ObservabilityPipelineParseGrokProcessorRuleSupportRule", + "ObservabilityPipelineParseGrokProcessorType", + "ObservabilityPipelineParseJSONProcessor", + "ObservabilityPipelineParseJSONProcessorType", + "ObservabilityPipelineParseXMLProcessor", + "ObservabilityPipelineParseXMLProcessorType", + "ObservabilityPipelineQuotaProcessor", + "ObservabilityPipelineQuotaProcessorLimit", + "ObservabilityPipelineQuotaProcessorLimitEnforceType", + "ObservabilityPipelineQuotaProcessorOverflowAction", + "ObservabilityPipelineQuotaProcessorOverride", + "ObservabilityPipelineQuotaProcessorType", + "ObservabilityPipelineReduceProcessor", + "ObservabilityPipelineReduceProcessorMergeStrategy", + "ObservabilityPipelineReduceProcessorMergeStrategyStrategy", + "ObservabilityPipelineReduceProcessorType", + "ObservabilityPipelineRemoveFieldsProcessor", + "ObservabilityPipelineRemoveFieldsProcessorType", + "ObservabilityPipelineRenameFieldsProcessor", + "ObservabilityPipelineRenameFieldsProcessorField", + "ObservabilityPipelineRenameFieldsProcessorType", + "ObservabilityPipelineRenameMetricTagsProcessor", + "ObservabilityPipelineRenameMetricTagsProcessorTag", + "ObservabilityPipelineRenameMetricTagsProcessorType", + "ObservabilityPipelineRsyslogDestination", + "ObservabilityPipelineRsyslogDestinationType", + "ObservabilityPipelineRsyslogSource", + "ObservabilityPipelineRsyslogSourceType", + "ObservabilityPipelineSampleProcessor", + "ObservabilityPipelineSampleProcessorType", + "ObservabilityPipelineSensitiveDataScannerProcessor", + "ObservabilityPipelineSensitiveDataScannerProcessorAction", + "ObservabilityPipelineSensitiveDataScannerProcessorActionHash", + "ObservabilityPipelineSensitiveDataScannerProcessorActionHashAction", + "ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedact", + "ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactAction", + "ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptions", + "ObservabilityPipelineSensitiveDataScannerProcessorActionPartialRedactOptionsDirection", + "ObservabilityPipelineSensitiveDataScannerProcessorActionRedact", + "ObservabilityPipelineSensitiveDataScannerProcessorActionRedactAction", + "ObservabilityPipelineSensitiveDataScannerProcessorActionRedactOptions", + "ObservabilityPipelineSensitiveDataScannerProcessorCustomPattern", + "ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternOptions", + "ObservabilityPipelineSensitiveDataScannerProcessorCustomPatternType", + "ObservabilityPipelineSensitiveDataScannerProcessorKeywordOptions", + "ObservabilityPipelineSensitiveDataScannerProcessorLibraryPattern", + "ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternOptions", + "ObservabilityPipelineSensitiveDataScannerProcessorLibraryPatternType", + "ObservabilityPipelineSensitiveDataScannerProcessorPattern", + "ObservabilityPipelineSensitiveDataScannerProcessorRule", + "ObservabilityPipelineSensitiveDataScannerProcessorScope", + "ObservabilityPipelineSensitiveDataScannerProcessorScopeAll", + "ObservabilityPipelineSensitiveDataScannerProcessorScopeAllTarget", + "ObservabilityPipelineSensitiveDataScannerProcessorScopeExclude", + "ObservabilityPipelineSensitiveDataScannerProcessorScopeExcludeTarget", + "ObservabilityPipelineSensitiveDataScannerProcessorScopeInclude", + "ObservabilityPipelineSensitiveDataScannerProcessorScopeIncludeTarget", + "ObservabilityPipelineSensitiveDataScannerProcessorScopeOptions", + "ObservabilityPipelineSensitiveDataScannerProcessorType", + "ObservabilityPipelineSentinelOneDestination", + "ObservabilityPipelineSentinelOneDestinationRegion", + "ObservabilityPipelineSentinelOneDestinationType", + "ObservabilityPipelineSocketDestination", + "ObservabilityPipelineSocketDestinationEncoding", + "ObservabilityPipelineSocketDestinationFraming", + "ObservabilityPipelineSocketDestinationFramingBytes", + "ObservabilityPipelineSocketDestinationFramingBytesMethod", + "ObservabilityPipelineSocketDestinationFramingCharacterDelimited", + "ObservabilityPipelineSocketDestinationFramingCharacterDelimitedMethod", + "ObservabilityPipelineSocketDestinationFramingNewlineDelimited", + "ObservabilityPipelineSocketDestinationFramingNewlineDelimitedMethod", + "ObservabilityPipelineSocketDestinationMode", + "ObservabilityPipelineSocketDestinationType", + "ObservabilityPipelineSocketSource", + "ObservabilityPipelineSocketSourceFraming", + "ObservabilityPipelineSocketSourceFramingBytes", + "ObservabilityPipelineSocketSourceFramingBytesMethod", + "ObservabilityPipelineSocketSourceFramingCharacterDelimited", + "ObservabilityPipelineSocketSourceFramingCharacterDelimitedMethod", + "ObservabilityPipelineSocketSourceFramingChunkedGelf", + "ObservabilityPipelineSocketSourceFramingChunkedGelfMethod", + "ObservabilityPipelineSocketSourceFramingNewlineDelimited", + "ObservabilityPipelineSocketSourceFramingNewlineDelimitedMethod", + "ObservabilityPipelineSocketSourceFramingOctetCounting", + "ObservabilityPipelineSocketSourceFramingOctetCountingMethod", + "ObservabilityPipelineSocketSourceMode", + "ObservabilityPipelineSocketSourceType", + "ObservabilityPipelineSourceValidTokenFieldToAdd", + "ObservabilityPipelineSpec", + "ObservabilityPipelineSpecData", + "ObservabilityPipelineSplitArrayProcessor", + "ObservabilityPipelineSplitArrayProcessorArrayConfig", + "ObservabilityPipelineSplitArrayProcessorType", + "ObservabilityPipelineSplunkHecDestination", + "ObservabilityPipelineSplunkHecDestinationEncoding", + "ObservabilityPipelineSplunkHecDestinationTokenStrategy", + "ObservabilityPipelineSplunkHecDestinationType", + "ObservabilityPipelineSplunkHecMetricsDestination", + "ObservabilityPipelineSplunkHecMetricsDestinationCompression", + "ObservabilityPipelineSplunkHecMetricsDestinationType", + "ObservabilityPipelineSplunkHecSource", + "ObservabilityPipelineSplunkHecSourceType", + "ObservabilityPipelineSplunkHecSourceValidToken", + "ObservabilityPipelineSplunkTcpSource", + "ObservabilityPipelineSplunkTcpSourceType", + "ObservabilityPipelineSumoLogicDestination", + "ObservabilityPipelineSumoLogicDestinationEncoding", + "ObservabilityPipelineSumoLogicDestinationHeaderCustomFieldsItem", + "ObservabilityPipelineSumoLogicDestinationType", + "ObservabilityPipelineSumoLogicSource", + "ObservabilityPipelineSumoLogicSourceType", + "ObservabilityPipelineSyslogNgDestination", + "ObservabilityPipelineSyslogNgDestinationType", + "ObservabilityPipelineSyslogNgSource", + "ObservabilityPipelineSyslogNgSourceType", + "ObservabilityPipelineSyslogSourceMode", + "ObservabilityPipelineTagCardinalityLimitProcessor", + "ObservabilityPipelineTagCardinalityLimitProcessorAction", + "ObservabilityPipelineTagCardinalityLimitProcessorOverrideType", + "ObservabilityPipelineTagCardinalityLimitProcessorPerMetricLimit", + "ObservabilityPipelineTagCardinalityLimitProcessorPerTagLimit", + "ObservabilityPipelineTagCardinalityLimitProcessorTrackingMode", + "ObservabilityPipelineTagCardinalityLimitProcessorTrackingModeMode", + "ObservabilityPipelineTagCardinalityLimitProcessorType", + "ObservabilityPipelineThrottleProcessor", + "ObservabilityPipelineThrottleProcessorType", + "ObservabilityPipelineTls", + "ObservabilityPipelineWebsocketSource", + "ObservabilityPipelineWebsocketSourceAuthStrategy", + "ObservabilityPipelineWebsocketSourceTls", + "ObservabilityPipelineWebsocketSourceTlsEnabled", + "ObservabilityPipelineWebsocketSourceTlsEnabledMode", + "ObservabilityPipelineWebsocketSourceTlsWithClientCert", + "ObservabilityPipelineWebsocketSourceTlsWithClientCertMode", + "ObservabilityPipelineWebsocketSourceType", + "OktaAPIToken", + "OktaAPITokenType", + "OktaAPITokenUpdate", + "OktaAccount", + "OktaAccountAttributes", + "OktaAccountRequest", + "OktaAccountResponse", + "OktaAccountResponseData", + "OktaAccountType", + "OktaAccountUpdateRequest", + "OktaAccountUpdateRequestAttributes", + "OktaAccountUpdateRequestData", + "OktaAccountsResponse", + "OktaCredentials", + "OktaCredentialsUpdate", + "OktaIntegration", + "OktaIntegrationType", + "OktaIntegrationUpdate", + "OnCallNotificationRule", + "OnCallNotificationRuleAttributes", + "OnCallNotificationRuleCategory", + "OnCallNotificationRuleChannelRelationship", + "OnCallNotificationRuleChannelRelationshipData", + "OnCallNotificationRuleChannelSettings", + "OnCallNotificationRuleData", + "OnCallNotificationRuleRelationships", + "OnCallNotificationRuleRequestAttributes", + "OnCallNotificationRuleType", + "OnCallNotificationRulesIncluded", + "OnCallPageTargetType", + "OnCallPhoneNotificationRuleMethod", + "OnCallPhoneNotificationRuleSettings", + "OnCallTrigger", + "OnCallTriggerWrapper", + "OnDemandConcurrencyCap", + "OnDemandConcurrencyCapAttributes", + "OnDemandConcurrencyCapResponse", + "OnDemandConcurrencyCapType", + "OpenAIAPIKey", + "OpenAIAPIKeyType", + "OpenAIAPIKeyUpdate", + "OpenAICredentials", + "OpenAICredentialsUpdate", + "OpenAIIntegration", + "OpenAIIntegrationType", + "OpenAIIntegrationUpdate", + "OpenAPIEndpoint", + "OpenAPIFile", + "OpsgenieAccountCreateAttributes", + "OpsgenieAccountCreateData", + "OpsgenieAccountCreateRequest", + "OpsgenieAccountResponse", + "OpsgenieAccountResponseAttributes", + "OpsgenieAccountResponseData", + "OpsgenieAccountType", + "OpsgenieAccountUpdateAttributes", + "OpsgenieAccountUpdateData", + "OpsgenieAccountUpdateRequest", + "OpsgenieAccountsResponse", + "OpsgenieServiceCreateAttributes", + "OpsgenieServiceCreateData", + "OpsgenieServiceCreateRequest", + "OpsgenieServiceRegionType", + "OpsgenieServiceResponse", + "OpsgenieServiceResponseAttributes", + "OpsgenieServiceResponseData", + "OpsgenieServiceType", + "OpsgenieServiceUpdateAttributes", + "OpsgenieServiceUpdateData", + "OpsgenieServiceUpdateRequest", + "OpsgenieServicesResponse", + "OrderDirection", + "OrgAttributes", + "OrgAuthorizedClientAttributes", + "OrgAuthorizedClientData", + "OrgAuthorizedClientRelationshipOAuth2Client", + "OrgAuthorizedClientRelationshipOAuth2ClientData", + "OrgAuthorizedClientRelationshipOAuth2ClientDataType", + "OrgAuthorizedClientRelationshipUserAuthorizedClients", + "OrgAuthorizedClientRelationshipUserAuthorizedClientsData", + "OrgAuthorizedClientRelationshipUserAuthorizedClientsDataType", + "OrgAuthorizedClientRelationshipUserAuthorizedClientsLinks", + "OrgAuthorizedClientRelationships", + "OrgAuthorizedClientResponse", + "OrgAuthorizedClientType", + "OrgAuthorizedClientUpdateAttributes", + "OrgAuthorizedClientUpdateData", + "OrgAuthorizedClientUpdateRequest", + "OrgAuthorizedClientUserAuthorizationsSort", + "OrgAuthorizedClientsResponse", + "OrgConfigGetResponse", + "OrgConfigListResponse", + "OrgConfigRead", + "OrgConfigReadAttributes", + "OrgConfigType", + "OrgConfigWrite", + "OrgConfigWriteAttributes", + "OrgConfigWriteRequest", + "OrgConnection", + "OrgConnectionAttributes", + "OrgConnectionCreate", + "OrgConnectionCreateAttributes", + "OrgConnectionCreateRelationships", + "OrgConnectionCreateRequest", + "OrgConnectionListResponse", + "OrgConnectionListResponseMeta", + "OrgConnectionListResponseMetaPage", + "OrgConnectionOrgRelationship", + "OrgConnectionOrgRelationshipData", + "OrgConnectionOrgRelationshipDataType", + "OrgConnectionRelationships", + "OrgConnectionResponse", + "OrgConnectionType", + "OrgConnectionTypeEnum", + "OrgConnectionUpdate", + "OrgConnectionUpdateAttributes", + "OrgConnectionUpdateRequest", + "OrgConnectionUserRelationship", + "OrgConnectionUserRelationshipData", + "OrgConnectionUserRelationshipDataType", + "OrgData", + "OrgGroupAttributes", + "OrgGroupCreateAttributes", + "OrgGroupCreateData", + "OrgGroupCreateRequest", + "OrgGroupData", + "OrgGroupListResponse", + "OrgGroupMembershipAttributes", + "OrgGroupMembershipBulkUpdateAttributes", + "OrgGroupMembershipBulkUpdateData", + "OrgGroupMembershipBulkUpdateRelationships", + "OrgGroupMembershipBulkUpdateRequest", + "OrgGroupMembershipBulkUpdateType", + "OrgGroupMembershipData", + "OrgGroupMembershipListResponse", + "OrgGroupMembershipRelationships", + "OrgGroupMembershipResponse", + "OrgGroupMembershipSortOption", + "OrgGroupMembershipType", + "OrgGroupMembershipUpdateData", + "OrgGroupMembershipUpdateRelationships", + "OrgGroupMembershipUpdateRequest", + "OrgGroupPaginationLinks", + "OrgGroupPaginationMeta", + "OrgGroupPaginationMetaPage", + "OrgGroupPolicyAttributes", + "OrgGroupPolicyConfigAttributes", + "OrgGroupPolicyConfigData", + "OrgGroupPolicyConfigListResponse", + "OrgGroupPolicyConfigType", + "OrgGroupPolicyCreateAttributes", + "OrgGroupPolicyCreateData", + "OrgGroupPolicyCreateRelationships", + "OrgGroupPolicyCreateRequest", + "OrgGroupPolicyData", + "OrgGroupPolicyEnforcementTier", + "OrgGroupPolicyListResponse", + "OrgGroupPolicyOverrideAttributes", + "OrgGroupPolicyOverrideCreateAttributes", + "OrgGroupPolicyOverrideCreateData", + "OrgGroupPolicyOverrideCreateRelationships", + "OrgGroupPolicyOverrideCreateRequest", + "OrgGroupPolicyOverrideData", + "OrgGroupPolicyOverrideListResponse", + "OrgGroupPolicyOverrideRelationships", + "OrgGroupPolicyOverrideResponse", + "OrgGroupPolicyOverrideSortOption", + "OrgGroupPolicyOverrideType", + "OrgGroupPolicyOverrideUpdateAttributes", + "OrgGroupPolicyOverrideUpdateData", + "OrgGroupPolicyOverrideUpdateRequest", + "OrgGroupPolicyPolicyType", + "OrgGroupPolicyRelationshipToOne", + "OrgGroupPolicyRelationshipToOneData", + "OrgGroupPolicyRelationships", + "OrgGroupPolicyResponse", + "OrgGroupPolicySortOption", + "OrgGroupPolicySuggestionAttributes", + "OrgGroupPolicySuggestionData", + "OrgGroupPolicySuggestionListResponse", + "OrgGroupPolicySuggestionRelationships", + "OrgGroupPolicySuggestionStatus", + "OrgGroupPolicySuggestionType", + "OrgGroupPolicyType", + "OrgGroupPolicyUpdateAttributes", + "OrgGroupPolicyUpdateData", + "OrgGroupPolicyUpdateRequest", + "OrgGroupRelationshipToOne", + "OrgGroupRelationshipToOneData", + "OrgGroupResponse", + "OrgGroupSortOption", + "OrgGroupType", + "OrgGroupUpdateAttributes", + "OrgGroupUpdateData", + "OrgGroupUpdateRequest", + "OrgRelationshipData", + "OrgResourceType", + "OrgSAMLPreferencesAttributes", + "OrgSAMLPreferencesData", + "OrgSAMLPreferencesType", + "OrgSAMLPreferencesUpdateRequest", + "Organization", + "OrganizationAttributes", + "OrganizationsType", + "OutboundEdge", + "OutcomeType", + "OutcomesBatchAttributes", + "OutcomesBatchRequest", + "OutcomesBatchRequestData", + "OutcomesBatchRequestItem", + "OutcomesBatchResponse", + "OutcomesBatchResponseAttributes", + "OutcomesBatchResponseMeta", + "OutcomesBatchType", + "OutcomesResponse", + "OutcomesResponseDataItem", + "OutcomesResponseIncludedItem", + "OutcomesResponseIncludedRuleAttributes", + "OutcomesResponseLinks", + "OutputSchema", + "OutputSchemaParameters", + "OutputSchemaParametersType", + "OverwriteAllocationsRequest", + "OwnershipConfidenceLevel", + "OwnershipEvidenceAttributes", + "OwnershipEvidenceData", + "OwnershipEvidenceResponse", + "OwnershipEvidenceType", + "OwnershipEvidenceVersion", + "OwnershipFeedbackAction", + "OwnershipFeedbackRequest", + "OwnershipFeedbackRequestAttributes", + "OwnershipFeedbackRequestData", + "OwnershipFeedbackResponse", + "OwnershipFeedbackResultAttributes", + "OwnershipFeedbackResultData", + "OwnershipFeedbackResultType", + "OwnershipFeedbackType", + "OwnershipHistoryAttributes", + "OwnershipHistoryData", + "OwnershipHistoryItem", + "OwnershipHistoryPagination", + "OwnershipHistoryResponse", + "OwnershipHistoryType", + "OwnershipInferenceAttributes", + "OwnershipInferenceData", + "OwnershipInferenceItem", + "OwnershipInferenceListAttributes", + "OwnershipInferenceListData", + "OwnershipInferenceListResponse", + "OwnershipInferenceResponse", + "OwnershipInferenceSource", + "OwnershipInferenceStatus", + "OwnershipInferenceType", + "OwnershipInferencesType", + "OwnershipOwnerType", + "OwnershipSettingsAttributes", + "OwnershipSettingsData", + "OwnershipSettingsRequest", + "OwnershipSettingsRequestAttributes", + "OwnershipSettingsRequestData", + "OwnershipSettingsResponse", + "OwnershipSettingsType", + "OwnershipUntaggedFindingsAttributes", + "OwnershipUntaggedFindingsData", + "OwnershipUntaggedFindingsResponse", + "OwnershipUntaggedFindingsType", + "PageAnnotationsAttributes", + "PageAnnotationsData", + "PageAnnotationsResponse", + "PageAnnotationsType", + "PageUrgency", + "PaginatedResponseMeta", + "Pagination", + "PaginationMeta", + "PaginationMetaPage", + "PaginationMetaPageType", + "Parameter", + "PartialAPIKey", + "PartialAPIKeyAttributes", + "PartialApplicationKey", + "PartialApplicationKeyAttributes", + "PartialApplicationKeyResponse", + "PatchAttachmentRequest", + "PatchAttachmentRequestData", + "PatchAttachmentRequestDataAttributes", + "PatchAttachmentRequestDataAttributesAttachment", + "PatchComponentRequest", + "PatchComponentRequestData", + "PatchComponentRequestDataAttributes", + "PatchDegradationRequest", + "PatchDegradationRequestData", + "PatchDegradationRequestDataAttributes", + "PatchDegradationRequestDataAttributesComponentsAffectedItems", + "PatchDegradationRequestDataAttributesStatus", + "PatchDegradationRequestDataRelationships", + "PatchDegradationRequestDataRelationshipsTemplate", + "PatchDegradationRequestDataRelationshipsTemplateData", + "PatchDegradationRequestDataType", + "PatchDegradationTemplateRequest", + "PatchDegradationTemplateRequestData", + "PatchDegradationTemplateRequestDataAttributes", + "PatchDegradationTemplateRequestDataAttributesComponentsAffectedItems", + "PatchDegradationTemplateRequestDataAttributesComponentsAffectedItemsStatus", + "PatchDegradationTemplateRequestDataAttributesUpdatesItems", + "PatchDegradationTemplateRequestDataType", + "PatchDegradationUpdateRequest", + "PatchDegradationUpdateRequestData", + "PatchDegradationUpdateRequestDataAttributes", + "PatchDegradationUpdateRequestDataAttributesStatus", + "PatchDegradationUpdateRequestDataType", + "PatchIncidentNotificationTemplateRequest", + "PatchMaintenanceRequest", + "PatchMaintenanceRequestData", + "PatchMaintenanceRequestDataAttributes", + "PatchMaintenanceRequestDataAttributesComponentsAffectedItems", + "PatchMaintenanceRequestDataAttributesComponentsAffectedItemsStatus", + "PatchMaintenanceRequestDataRelationships", + "PatchMaintenanceRequestDataRelationshipsTemplate", + "PatchMaintenanceRequestDataRelationshipsTemplateData", + "PatchMaintenanceRequestDataType", + "PatchMaintenanceTemplateRequest", + "PatchMaintenanceTemplateRequestData", + "PatchMaintenanceTemplateRequestDataAttributes", + "PatchMaintenanceTemplateRequestDataType", + "PatchMaintenanceUpdateRequest", + "PatchMaintenanceUpdateRequestData", + "PatchMaintenanceUpdateRequestDataAttributes", + "PatchMaintenanceUpdateRequestDataType", + "PatchNotificationRuleParameters", + "PatchNotificationRuleParametersData", + "PatchNotificationRuleParametersDataAttributes", + "PatchStatusPageRequest", + "PatchStatusPageRequestData", + "PatchStatusPageRequestDataAttributes", + "PatchTableRequest", + "PatchTableRequestData", + "PatchTableRequestDataAttributes", + "PatchTableRequestDataAttributesFileMetadata", + "PatchTableRequestDataAttributesFileMetadataCloudStorage", + "PatchTableRequestDataAttributesFileMetadataLocalFile", + "PatchTableRequestDataAttributesFileMetadataOneOfAccessDetails", + "PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAwsDetail", + "PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsAzureDetail", + "PatchTableRequestDataAttributesFileMetadataOneOfAccessDetailsGcpDetail", + "PatchTableRequestDataAttributesSchema", + "PatchTableRequestDataAttributesSchemaFieldsItems", + "PatchTableRequestDataType", + "Permission", + "PermissionAttributes", + "PermissionsResponse", + "PermissionsType", + "PersonalAccessToken", + "PersonalAccessTokenAttributes", + "PersonalAccessTokenCreateAttributes", + "PersonalAccessTokenCreateData", + "PersonalAccessTokenCreateRequest", + "PersonalAccessTokenCreateResponse", + "PersonalAccessTokenRelationships", + "PersonalAccessTokenResponse", + "PersonalAccessTokenResponseMeta", + "PersonalAccessTokenResponseMetaPage", + "PersonalAccessTokenUpdateAttributes", + "PersonalAccessTokenUpdateData", + "PersonalAccessTokenUpdateRequest", + "PersonalAccessTokensSort", + "PersonalAccessTokensType", + "Playlist", + "PlaylistArray", + "PlaylistData", + "PlaylistDataAttributes", + "PlaylistDataAttributesCreatedBy", + "PlaylistDataType", + "PlaylistsSession", + "PlaylistsSessionArray", + "PlaylistsSessionData", + "PlaylistsSessionDataAttributes", + "PostmortemAttachmentRequest", + "PostmortemAttachmentRequestAttributes", + "PostmortemAttachmentRequestData", + "PostmortemCell", + "PostmortemCellAttributes", + "PostmortemCellDefinition", + "PostmortemCellType", + "PostmortemTemplateAttributesRequest", + "PostmortemTemplateAttributesResponse", + "PostmortemTemplateCreateRelationships", + "PostmortemTemplateDataRequest", + "PostmortemTemplateDataResponse", + "PostmortemTemplateIncidentTypeRelationship", + "PostmortemTemplateIncidentTypeRelationshipData", + "PostmortemTemplateLocation", + "PostmortemTemplateRequest", + "PostmortemTemplateResponse", + "PostmortemTemplateResponseRelationships", + "PostmortemTemplateType", + "PostmortemTemplateUserRelationship", + "PostmortemTemplateUserRelationshipData", + "PostmortemTemplatesResponse", + "Powerpack", + "PowerpackAttributes", + "PowerpackData", + "PowerpackGroupWidget", + "PowerpackGroupWidgetDefinition", + "PowerpackGroupWidgetLayout", + "PowerpackInnerWidgetLayout", + "PowerpackInnerWidgets", + "PowerpackRelationships", + "PowerpackResponse", + "PowerpackResponseLinks", + "PowerpackTemplateVariable", + "PowerpacksResponseMeta", + "PowerpacksResponseMetaPagination", + "PreviewEntityResponseData", + "PrintReportRequest", + "PrintReportRequestAttributes", + "PrintReportRequestData", + "PrintReportResponse", + "PrintReportResponseAttributes", + "PrintReportResponseData", + "PrintReportType", + "ProcessDataSource", + "ProcessScalarQuery", + "ProcessSummariesMeta", + "ProcessSummariesMetaPage", + "ProcessSummariesResponse", + "ProcessSummary", + "ProcessSummaryAttributes", + "ProcessSummaryType", + "ProcessTimeseriesQuery", + "ProductAnalyticsAnalyticsQuery", + "ProductAnalyticsAnalyticsRequest", + "ProductAnalyticsAnalyticsRequestAttributes", + "ProductAnalyticsAnalyticsRequestData", + "ProductAnalyticsAnalyticsRequestType", + "ProductAnalyticsAudienceAccountSubquery", + "ProductAnalyticsAudienceFilters", + "ProductAnalyticsAudienceSegmentSubquery", + "ProductAnalyticsAudienceUserSubquery", + "ProductAnalyticsBaseQuery", + "ProductAnalyticsCompute", + "ProductAnalyticsEventQuery", + "ProductAnalyticsEventQueryDataSource", + "ProductAnalyticsEventSearch", + "ProductAnalyticsExecutionType", + "ProductAnalyticsGroupBy", + "ProductAnalyticsGroupBySort", + "ProductAnalyticsInterval", + "ProductAnalyticsOccurrenceFilter", + "ProductAnalyticsOccurrenceQuery", + "ProductAnalyticsOccurrenceQueryDataSource", + "ProductAnalyticsOccurrenceSearch", + "ProductAnalyticsResponseMeta", + "ProductAnalyticsResponseMetaStatus", + "ProductAnalyticsScalarColumn", + "ProductAnalyticsScalarColumnMeta", + "ProductAnalyticsScalarColumnType", + "ProductAnalyticsScalarResponse", + "ProductAnalyticsScalarResponseAttributes", + "ProductAnalyticsScalarResponseData", + "ProductAnalyticsScalarResponseType", + "ProductAnalyticsSerie", + "ProductAnalyticsServerSideEventError", + "ProductAnalyticsServerSideEventErrors", + "ProductAnalyticsServerSideEventItem", + "ProductAnalyticsServerSideEventItemAccount", + "ProductAnalyticsServerSideEventItemApplication", + "ProductAnalyticsServerSideEventItemEvent", + "ProductAnalyticsServerSideEventItemSession", + "ProductAnalyticsServerSideEventItemType", + "ProductAnalyticsServerSideEventItemUsr", + "ProductAnalyticsTimeseriesResponse", + "ProductAnalyticsTimeseriesResponseAttributes", + "ProductAnalyticsTimeseriesResponseData", + "ProductAnalyticsTimeseriesResponseType", + "ProductAnalyticsUnit", + "Project", + "ProjectAttributes", + "ProjectColumnsConfig", + "ProjectColumnsConfigColumnsItems", + "ProjectColumnsConfigColumnsItemsSort", + "ProjectCreate", + "ProjectCreateAttributes", + "ProjectCreateRequest", + "ProjectFavorite", + "ProjectFavoriteResourceType", + "ProjectFavoritesResponse", + "ProjectNotificationSettings", + "ProjectRelationship", + "ProjectRelationshipData", + "ProjectRelationships", + "ProjectResourceType", + "ProjectResponse", + "ProjectSettings", + "ProjectUpdate", + "ProjectUpdateAttributes", + "ProjectUpdateRequest", + "ProjectedCost", + "ProjectedCostAttributes", + "ProjectedCostResponse", + "ProjectedCostType", + "ProjectsResponse", + "PrunedTraceAttributes", + "PrunedTraceData", + "PrunedTraceResponse", + "PrunedTraceType", + "PublishAppResponse", + "PublishFormData", + "PublishFormDataAttributes", + "PublishFormRequest", + "PublishRequestType", + "PutAppsDatastoreItemResponseArray", + "PutAppsDatastoreItemResponseData", + "PutIncidentNotificationRuleRequest", + "Query", + "QueryAccountRequest", + "QueryAccountRequestData", + "QueryAccountRequestDataAttributes", + "QueryAccountRequestDataAttributesSort", + "QueryAccountRequestDataType", + "QueryEventFilteredUsersRequest", + "QueryEventFilteredUsersRequestData", + "QueryEventFilteredUsersRequestDataAttributes", + "QueryEventFilteredUsersRequestDataAttributesEventQuery", + "QueryEventFilteredUsersRequestDataAttributesEventQueryTimeFrame", + "QueryEventFilteredUsersRequestDataType", + "QueryFormula", + "QueryResponse", + "QueryResponseData", + "QueryResponseDataAttributes", + "QueryResponseDataType", + "QuerySortOrder", + "QueryUsersRequest", + "QueryUsersRequestData", + "QueryUsersRequestDataAttributes", + "QueryUsersRequestDataAttributesSort", + "QueryUsersRequestDataType", + "RUMAggregateBucketValue", + "RUMAggregateBucketValueTimeseries", + "RUMAggregateBucketValueTimeseriesPoint", + "RUMAggregateRequest", + "RUMAggregateSort", + "RUMAggregateSortType", + "RUMAggregationBucketsResponse", + "RUMAggregationFunction", + "RUMAnalyticsAggregateResponse", + "RUMApplication", + "RUMApplicationAttributes", + "RUMApplicationCreate", + "RUMApplicationCreateAttributes", + "RUMApplicationCreateRequest", + "RUMApplicationCreateType", + "RUMApplicationList", + "RUMApplicationListAttributes", + "RUMApplicationListType", + "RUMApplicationResponse", + "RUMApplicationType", + "RUMApplicationUpdate", + "RUMApplicationUpdateAttributes", + "RUMApplicationUpdateRequest", + "RUMApplicationUpdateType", + "RUMApplicationsResponse", + "RUMBucketResponse", + "RUMCompute", + "RUMComputeType", + "RUMEvent", + "RUMEventAttributes", + "RUMEventProcessingScale", + "RUMEventProcessingState", + "RUMEventType", + "RUMEventsResponse", + "RUMGroupBy", + "RUMGroupByHistogram", + "RUMGroupByMissing", + "RUMGroupByTotal", + "RUMOperationCreateRequest", + "RUMOperationCreateRequestData", + "RUMOperationJourneyCompositeRule", + "RUMOperationJourneyCompositeRuleKind", + "RUMOperationJourneyNode", + "RUMOperationJourneyPredicate", + "RUMOperationJourneyRum", + "RUMOperationJourneyStep", + "RUMOperationJourneyStepType", + "RUMOperationRequestAttributes", + "RUMOperationResponse", + "RUMOperationResponseAttributes", + "RUMOperationResponseData", + "RUMOperationStrongLinkCreateRequest", + "RUMOperationStrongLinkCreateRequestAttributes", + "RUMOperationStrongLinkCreateRequestData", + "RUMOperationStrongLinkResponse", + "RUMOperationStrongLinkResponseAttributes", + "RUMOperationStrongLinkResponseData", + "RUMOperationStrongLinkStatus", + "RUMOperationStrongLinkType", + "RUMOperationStrongLinkUpdateRequest", + "RUMOperationStrongLinkUpdateRequestAttributes", + "RUMOperationStrongLinkUpdateRequestData", + "RUMOperationStrongLinkUpdateStatus", + "RUMOperationStrongLinksListResponse", + "RUMOperationStrongLinksListResponseMeta", + "RUMOperationType", + "RUMOperationUpdateRequest", + "RUMOperationUpdateRequestData", + "RUMOperationUser", + "RUMOperationsListResponse", + "RUMOperationsListResponseMeta", + "RUMOperationsListResponseMetaPage", + "RUMProductAnalyticsRetentionScale", + "RUMProductAnalyticsRetentionState", + "RUMProductScales", + "RUMQueryFilter", + "RUMQueryOptions", + "RUMQueryPageOptions", + "RUMResponseLinks", + "RUMResponseMetadata", + "RUMResponsePage", + "RUMResponseStatus", + "RUMSearchEventsRequest", + "RUMSort", + "RUMSortOrder", + "RUMWarning", + "RawErrorBudgetRemaining", + "ReactNativeSourcemapAttributes", + "ReactNativeSourcemapData", + "ReadinessGate", + "ReadinessGateThresholdType", + "RecommendationAttributes", + "RecommendationData", + "RecommendationDocument", + "RecommendationType", + "RecommendationsFilterRequest", + "RecommendationsFilterRequestSortItems", + "RecommendationsPageMeta", + "RecommendationsPageMetaPage", + "ReferenceTableCreateSourceType", + "ReferenceTableSchemaFieldType", + "ReferenceTableSortType", + "ReferenceTableSourceType", + "RegisterAppKeyResponse", + "RelationAttributes", + "RelationEntity", + "RelationIncludeType", + "RelationMeta", + "RelationRelationships", + "RelationResponse", + "RelationResponseMeta", + "RelationResponseType", + "RelationToEntity", + "RelationType", + "RelationshipItem", + "RelationshipToAccessTokenOwner", + "RelationshipToAccessTokenOwnerData", + "RelationshipToIncident", + "RelationshipToIncidentAttachment", + "RelationshipToIncidentAttachmentData", + "RelationshipToIncidentData", + "RelationshipToIncidentImpactData", + "RelationshipToIncidentImpacts", + "RelationshipToIncidentIntegrationMetadataData", + "RelationshipToIncidentIntegrationMetadatas", + "RelationshipToIncidentNotificationTemplate", + "RelationshipToIncidentNotificationTemplateData", + "RelationshipToIncidentPostmortem", + "RelationshipToIncidentPostmortemData", + "RelationshipToIncidentRequest", + "RelationshipToIncidentResponderData", + "RelationshipToIncidentResponders", + "RelationshipToIncidentType", + "RelationshipToIncidentTypeData", + "RelationshipToIncidentUserDefinedFieldData", + "RelationshipToIncidentUserDefinedFields", + "RelationshipToOrganization", + "RelationshipToOrganizationData", + "RelationshipToOrganizations", + "RelationshipToOutcome", + "RelationshipToOutcomeData", + "RelationshipToPermission", + "RelationshipToPermissionData", + "RelationshipToPermissions", + "RelationshipToRole", + "RelationshipToRoleData", + "RelationshipToRoles", + "RelationshipToRule", + "RelationshipToRuleData", + "RelationshipToRuleDataObject", + "RelationshipToSAMLAssertionAttribute", + "RelationshipToSAMLAssertionAttributeData", + "RelationshipToServiceAccount", + "RelationshipToServiceAccountData", + "RelationshipToTeam", + "RelationshipToTeamData", + "RelationshipToTeamLinkData", + "RelationshipToTeamLinks", + "RelationshipToUser", + "RelationshipToUserData", + "RelationshipToUserTeamPermission", + "RelationshipToUserTeamPermissionData", + "RelationshipToUserTeamTeam", + "RelationshipToUserTeamTeamData", + "RelationshipToUserTeamUser", + "RelationshipToUserTeamUserData", + "RelationshipToUsers", + "Remediation", + "ReorderRetentionFiltersRequest", + "ReorderRuleResourceArray", + "ReorderRuleResourceData", + "ReorderRuleResourceDataType", + "ReorderRulesetResourceArray", + "ReorderRulesetResourceData", + "ReorderRulesetResourceDataType", + "ReportScheduleAuthor", + "ReportScheduleAuthorAttributes", + "ReportScheduleAuthorRelationship", + "ReportScheduleAuthorRelationshipData", + "ReportScheduleAuthorType", + "ReportScheduleCreateRequest", + "ReportScheduleCreateRequestAttributes", + "ReportScheduleCreateRequestData", + "ReportScheduleDeliveryFormat", + "ReportScheduleIncludedResource", + "ReportScheduleIncludedResourceType", + "ReportScheduleIndexTemplateVariable", + "ReportScheduleListResourceRelationship", + "ReportScheduleListResourceRelationshipData", + "ReportScheduleListResponse", + "ReportScheduleListResponseAttributes", + "ReportScheduleListResponseData", + "ReportScheduleListResponseLinks", + "ReportScheduleListResponseMeta", + "ReportScheduleListResponsePagination", + "ReportScheduleListResponsePaginationType", + "ReportScheduleListResponseRelationships", + "ReportSchedulePatchRequest", + "ReportSchedulePatchRequestAttributes", + "ReportSchedulePatchRequestData", + "ReportScheduleResource", + "ReportScheduleResourceAttributes", + "ReportScheduleResourceType", + "ReportScheduleResponse", + "ReportScheduleResponseAttributes", + "ReportScheduleResponseAttributesDeliveryFormat", + "ReportScheduleResponseData", + "ReportScheduleResponseRelationships", + "ReportScheduleStatus", + "ReportScheduleTemplateVariable", + "ReportScheduleToggleRequest", + "ReportScheduleToggleRequestAttributes", + "ReportScheduleToggleRequestData", + "ReportScheduleType", + "ResolveVulnerableSymbolsRequest", + "ResolveVulnerableSymbolsRequestData", + "ResolveVulnerableSymbolsRequestDataAttributes", + "ResolveVulnerableSymbolsRequestDataType", + "ResolveVulnerableSymbolsResponse", + "ResolveVulnerableSymbolsResponseData", + "ResolveVulnerableSymbolsResponseDataAttributes", + "ResolveVulnerableSymbolsResponseDataType", + "ResolveVulnerableSymbolsResponseResults", + "ResolveVulnerableSymbolsResponseResultsVulnerableSymbols", + "ResolveVulnerableSymbolsResponseResultsVulnerableSymbolsSymbols", + "ResourceFilterAttributes", + "ResourceFilterRequestType", + "ResponseMetaAttributes", + "RestrictionPolicy", + "RestrictionPolicyAttributes", + "RestrictionPolicyBinding", + "RestrictionPolicyResponse", + "RestrictionPolicyType", + "RestrictionPolicyUpdateRequest", + "RestrictionQueryAttributes", + "RestrictionQueryCreateAttributes", + "RestrictionQueryCreateData", + "RestrictionQueryCreatePayload", + "RestrictionQueryListResponse", + "RestrictionQueryResponseIncludedItem", + "RestrictionQueryRole", + "RestrictionQueryRoleAttribute", + "RestrictionQueryRolesResponse", + "RestrictionQueryUpdateAttributes", + "RestrictionQueryUpdateData", + "RestrictionQueryUpdatePayload", + "RestrictionQueryWithRelationships", + "RestrictionQueryWithRelationshipsResponse", + "RestrictionQueryWithoutRelationships", + "RestrictionQueryWithoutRelationshipsResponse", + "RetentionFilter", + "RetentionFilterAll", + "RetentionFilterAllAttributes", + "RetentionFilterAllType", + "RetentionFilterAttributes", + "RetentionFilterCreateAttributes", + "RetentionFilterCreateData", + "RetentionFilterCreateRequest", + "RetentionFilterCreateResponse", + "RetentionFilterResponse", + "RetentionFilterType", + "RetentionFilterUpdateAttributes", + "RetentionFilterUpdateData", + "RetentionFilterUpdateRequest", + "RetentionFilterWithoutAttributes", + "RetentionFiltersResponse", + "RetryStrategy", + "RetryStrategyKind", + "RetryStrategyLinear", + "RevertCustomRuleRevisionDataType", + "RevertCustomRuleRevisionRequest", + "RevertCustomRuleRevisionRequestData", + "RevertCustomRuleRevisionRequestDataAttributes", + "Role", + "RoleAttributes", + "RoleClone", + "RoleCloneAttributes", + "RoleCloneRequest", + "RoleCreateAttributes", + "RoleCreateData", + "RoleCreateRequest", + "RoleCreateResponse", + "RoleCreateResponseData", + "RoleRelationships", + "RoleResponse", + "RoleResponseRelationships", + "RoleTemplateArray", + "RoleTemplateData", + "RoleTemplateDataAttributes", + "RoleTemplateDataType", + "RoleUpdateAttributes", + "RoleUpdateData", + "RoleUpdateRequest", + "RoleUpdateResponse", + "RoleUpdateResponseData", + "RolesResponse", + "RolesSort", + "RolesType", + "RolloutOptions", + "RolloutOptionsRequest", + "RolloutStrategy", + "RoutingRule", + "RoutingRuleAction", + "RoutingRuleAttributes", + "RoutingRuleEscalationPolicyAction", + "RoutingRuleEscalationPolicyActionSupportHours", + "RoutingRuleEscalationPolicyActionType", + "RoutingRuleRelationships", + "RoutingRuleRelationshipsPolicy", + "RoutingRuleRelationshipsPolicyData", + "RoutingRuleRelationshipsPolicyDataType", + "RoutingRuleType", + "RuleAttributes", + "RuleAttributesRequest", + "RuleBasedViewAttributes", + "RuleBasedViewComplianceFramework", + "RuleBasedViewData", + "RuleBasedViewResponse", + "RuleBasedViewRule", + "RuleBasedViewRuleCategory", + "RuleBasedViewRuleStats", + "RuleBasedViewType", + "RuleOutcomeRelationships", + "RuleSeverity", + "RuleType", + "RuleTypesItems", + "RuleUser", + "RuleVersionHistory", + "RuleVersions", + "RulesValidateQueryRequest", + "RulesValidateQueryRequestData", + "RulesValidateQueryRequestDataAttributes", + "RulesValidateQueryRequestDataType", + "RulesValidateQueryResponse", + "RulesValidateQueryResponseData", + "RulesValidateQueryResponseDataAttributes", + "RulesValidateQueryResponseDataType", + "RulesetItemMetadata", + "RulesetResp", + "RulesetRespArray", + "RulesetRespData", + "RulesetRespDataAttributes", + "RulesetRespDataAttributesCreated", + "RulesetRespDataAttributesModified", + "RulesetRespDataAttributesRulesItems", + "RulesetRespDataAttributesRulesItemsQuery", + "RulesetRespDataAttributesRulesItemsQueryAddition", + "RulesetRespDataAttributesRulesItemsReferenceTable", + "RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems", + "RulesetRespDataType", + "RulesetStatusRespArray", + "RulesetStatusRespData", + "RulesetStatusRespDataAttributes", + "RulesetStatusRespDataType", + "RumConfigAttributes", + "RumConfigCreateAttributes", + "RumConfigCreateData", + "RumConfigCreateRequest", + "RumConfigData", + "RumConfigResponse", + "RumConfigType", + "RumConfigUpdateAttributes", + "RumConfigUpdateData", + "RumConfigUpdateRequest", + "RumCrossProductSampling", + "RumCrossProductSamplingCreate", + "RumCrossProductSamplingUpdate", + "RumMetricCompute", + "RumMetricComputeAggregationType", + "RumMetricCreateAttributes", + "RumMetricCreateData", + "RumMetricCreateRequest", + "RumMetricEventType", + "RumMetricFilter", + "RumMetricGroupBy", + "RumMetricResponse", + "RumMetricResponseAttributes", + "RumMetricResponseCompute", + "RumMetricResponseData", + "RumMetricResponseFilter", + "RumMetricResponseGroupBy", + "RumMetricResponseUniqueness", + "RumMetricType", + "RumMetricUniqueness", + "RumMetricUniquenessWhen", + "RumMetricUpdateAttributes", + "RumMetricUpdateCompute", + "RumMetricUpdateData", + "RumMetricUpdateRequest", + "RumMetricsResponse", + "RumPermanentRetentionFilterAttributes", + "RumPermanentRetentionFilterData", + "RumPermanentRetentionFilterEditability", + "RumPermanentRetentionFilterID", + "RumPermanentRetentionFilterResponse", + "RumPermanentRetentionFilterType", + "RumPermanentRetentionFilterUpdateAttributes", + "RumPermanentRetentionFilterUpdateData", + "RumPermanentRetentionFilterUpdateRequest", + "RumPermanentRetentionFiltersResponse", + "RumRetentionFilterAttributes", + "RumRetentionFilterCreateAttributes", + "RumRetentionFilterCreateData", + "RumRetentionFilterCreateRequest", + "RumRetentionFilterData", + "RumRetentionFilterEventType", + "RumRetentionFilterResponse", + "RumRetentionFilterType", + "RumRetentionFilterUpdateAttributes", + "RumRetentionFilterUpdateData", + "RumRetentionFilterUpdateRequest", + "RumRetentionFiltersOrderData", + "RumRetentionFiltersOrderRequest", + "RumRetentionFiltersOrderResponse", + "RumRetentionFiltersResponse", + "RumSdkConfigAttributes", + "RumSdkConfigData", + "RumSdkConfigDynamicOption", + "RumSdkConfigDynamicOptionPair", + "RumSdkConfigDynamicOptionSerializedType", + "RumSdkConfigDynamicOptionStrategy", + "RumSdkConfigMatchOption", + "RumSdkConfigMatchOptionSerializedType", + "RumSdkConfigMeta", + "RumSdkConfigResponse", + "RumSdkConfigRumAttributes", + "RumSdkConfigRumUpdateAttributes", + "RumSdkConfigSerializedRegex", + "RumSdkConfigSerializedRegexType", + "RumSdkConfigTracingUrlConfig", + "RumSdkConfigTracingUrlPropagatorType", + "RumSdkConfigType", + "RumSdkConfigUpdateAttributes", + "RumSdkConfigUpdateData", + "RumSdkConfigUpdateRequest", + "RunDataObservabilityMonitorResponse", + "RunDataObservabilityMonitorResponseData", + "RunHistoricalJobRequest", + "RunHistoricalJobRequestAttributes", + "RunHistoricalJobRequestData", + "RunHistoricalJobRequestDataType", + "SAMLAssertionAttribute", + "SAMLAssertionAttributeAttributes", + "SAMLAssertionAttributesType", + "SAMLConfiguration", + "SAMLConfigurationAttributes", + "SAMLConfigurationRelationships", + "SAMLConfigurationResponse", + "SAMLConfigurationUpdateAttributes", + "SAMLConfigurationUpdateData", + "SAMLConfigurationUpdateRequest", + "SAMLConfigurationsResponse", + "SAMLConfigurationsType", + "SBOM", + "SBOMAttributes", + "SBOMComponent", + "SBOMComponentDependency", + "SBOMComponentLicense", + "SBOMComponentLicenseLicense", + "SBOMComponentLicenseType", + "SBOMComponentProperty", + "SBOMComponentSupplier", + "SBOMComponentType", + "SBOMFormat", + "SBOMMetadata", + "SBOMMetadataAuthor", + "SBOMMetadataComponent", + "SBOMType", + "SLOReportInterval", + "SLOReportPostResponse", + "SLOReportPostResponseData", + "SLOReportStatus", + "SLOReportStatusGetResponse", + "SLOReportStatusGetResponseAttributes", + "SLOReportStatusGetResponseData", + "SalesforceIncidentsOrganizationResponseAttributes", + "SalesforceIncidentsOrganizationResponseData", + "SalesforceIncidentsOrganizationType", + "SalesforceIncidentsOrganizationsResponse", + "SalesforceIncidentsTemplateCreateAttributes", + "SalesforceIncidentsTemplateCreateData", + "SalesforceIncidentsTemplateCreateRequest", + "SalesforceIncidentsTemplatePriority", + "SalesforceIncidentsTemplateResponse", + "SalesforceIncidentsTemplateResponseAttributes", + "SalesforceIncidentsTemplateResponseData", + "SalesforceIncidentsTemplateType", + "SalesforceIncidentsTemplateUpdateAttributes", + "SalesforceIncidentsTemplateUpdateData", + "SalesforceIncidentsTemplateUpdateRequest", + "SalesforceIncidentsTemplatesResponse", + "SampleLogGenerationBulkSubscriptionAttributes", + "SampleLogGenerationBulkSubscriptionData", + "SampleLogGenerationBulkSubscriptionItemMeta", + "SampleLogGenerationBulkSubscriptionRequest", + "SampleLogGenerationBulkSubscriptionRequestType", + "SampleLogGenerationBulkSubscriptionResponse", + "SampleLogGenerationBulkSubscriptionResultItem", + "SampleLogGenerationDuration", + "SampleLogGenerationSubscriptionAttributes", + "SampleLogGenerationSubscriptionCreateAttributes", + "SampleLogGenerationSubscriptionCreateData", + "SampleLogGenerationSubscriptionCreateRequest", + "SampleLogGenerationSubscriptionData", + "SampleLogGenerationSubscriptionRequestType", + "SampleLogGenerationSubscriptionResourceType", + "SampleLogGenerationSubscriptionResponse", + "SampleLogGenerationSubscriptionStatus", + "SampleLogGenerationSubscriptionsResponse", + "SampleLogGenerationSubscriptionsResponseMeta", + "SampleLogGenerationSubscriptionsStatusFilter", + "SastRulesetData", + "SastRulesetDataAttributes", + "SastRulesetResponse", + "SastRulesetsResponse", + "ScaRequest", + "ScaRequestData", + "ScaRequestDataAttributes", + "ScaRequestDataAttributesCommit", + "ScaRequestDataAttributesDependenciesItems", + "ScaRequestDataAttributesDependenciesItemsLocationsItems", + "ScaRequestDataAttributesDependenciesItemsLocationsItemsFilePosition", + "ScaRequestDataAttributesDependenciesItemsLocationsItemsPosition", + "ScaRequestDataAttributesDependenciesItemsReachableSymbolPropertiesItems", + "ScaRequestDataAttributesFilesItems", + "ScaRequestDataAttributesRelationsItems", + "ScaRequestDataAttributesRepository", + "ScaRequestDataAttributesVulnerabilitiesItems", + "ScaRequestDataAttributesVulnerabilitiesItemsAffectsItems", + "ScaRequestDataType", + "ScalarColumn", + "ScalarColumnTypeGroup", + "ScalarColumnTypeNumber", + "ScalarFormulaQueryRequest", + "ScalarFormulaQueryResponse", + "ScalarFormulaRequest", + "ScalarFormulaRequestAttributes", + "ScalarFormulaRequestQueries", + "ScalarFormulaRequestType", + "ScalarFormulaResponseAtrributes", + "ScalarFormulaResponseType", + "ScalarMeta", + "ScalarQuery", + "ScalarResponse", + "ScanResultResponse", + "ScannedAssetMetadata", + "ScannedAssetMetadataAsset", + "ScannedAssetMetadataAttributes", + "ScannedAssetMetadataLastSuccess", + "ScannedAssetsMetadata", + "Schedule", + "ScheduleCreateRequest", + "ScheduleCreateRequestData", + "ScheduleCreateRequestDataAttributes", + "ScheduleCreateRequestDataAttributesLayersItems", + "ScheduleCreateRequestDataRelationships", + "ScheduleCreateRequestDataType", + "ScheduleData", + "ScheduleDataAttributes", + "ScheduleDataIncludedItem", + "ScheduleDataRelationships", + "ScheduleDataRelationshipsLayers", + "ScheduleDataRelationshipsLayersDataItems", + "ScheduleDataRelationshipsLayersDataItemsType", + "ScheduleDataType", + "ScheduleMember", + "ScheduleMemberRelationships", + "ScheduleMemberRelationshipsUser", + "ScheduleMemberRelationshipsUserData", + "ScheduleMemberRelationshipsUserDataType", + "ScheduleMemberType", + "ScheduleOnCallResponderData", + "ScheduleOnCallResponderDataAttributes", + "ScheduleOnCallResponderDataRelationships", + "ScheduleOnCallResponderDataRelationshipsShifts", + "ScheduleOnCallResponderDataRelationshipsShiftsDataItems", + "ScheduleOnCallResponderDataRelationshipsShiftsDataItemsType", + "ScheduleOnCallResponderDataType", + "ScheduleOnCallResponders", + "ScheduleOnCallRespondersData", + "ScheduleOnCallRespondersDataAttributes", + "ScheduleOnCallRespondersDataRelationships", + "ScheduleOnCallRespondersDataRelationshipsResponders", + "ScheduleOnCallRespondersDataRelationshipsRespondersDataItems", + "ScheduleOnCallRespondersDataRelationshipsRespondersDataItemsType", + "ScheduleOnCallRespondersDataRelationshipsSchedule", + "ScheduleOnCallRespondersDataRelationshipsScheduleData", + "ScheduleOnCallRespondersDataRelationshipsScheduleDataType", + "ScheduleOnCallRespondersDataType", + "ScheduleOnCallRespondersIncluded", + "ScheduleRequestDataAttributesLayersItemsMembersItems", + "ScheduleRequestDataAttributesLayersItemsMembersItemsUser", + "ScheduleTarget", + "ScheduleTargetPosition", + "ScheduleTargetType", + "ScheduleTrigger", + "ScheduleTriggerOverlapBehavior", + "ScheduleTriggerWrapper", + "ScheduleUpdateRequest", + "ScheduleUpdateRequestData", + "ScheduleUpdateRequestDataAttributes", + "ScheduleUpdateRequestDataAttributesLayersItems", + "ScheduleUpdateRequestDataRelationships", + "ScheduleUpdateRequestDataType", + "ScheduleUser", + "ScheduleUserAttributes", + "ScheduleUserType", + "ScorecardListResponseAttributes", + "ScorecardListResponseData", + "ScorecardListType", + "ScorecardScoreAttributes", + "ScorecardScoreData", + "ScorecardScoreDataType", + "ScorecardScoreRelationshipData", + "ScorecardScoreRelationshipItem", + "ScorecardScoreRelationships", + "ScorecardScoresAggregation", + "ScorecardType", + "SearchIssuesIncludeQueryParameterItem", + "SeatAssignmentsDataType", + "SeatUserData", + "SeatUserDataArray", + "SeatUserDataAttributes", + "SeatUserDataType", + "SeatUserMeta", + "SecretRuleArray", + "SecretRuleData", + "SecretRuleDataAttributes", + "SecretRuleDataAttributesMatchValidation", + "SecretRuleDataAttributesMatchValidationInvalidHttpStatusCodeItems", + "SecretRuleDataAttributesMatchValidationValidHttpStatusCodeItems", + "SecretRuleDataType", + "SecureEmbedCreateRequest", + "SecureEmbedCreateRequestAttributes", + "SecureEmbedCreateRequestData", + "SecureEmbedCreateResponse", + "SecureEmbedCreateResponseAttributes", + "SecureEmbedCreateResponseData", + "SecureEmbedCreateResponseType", + "SecureEmbedGetResponse", + "SecureEmbedGetResponseAttributes", + "SecureEmbedGetResponseData", + "SecureEmbedGetResponseType", + "SecureEmbedGlobalTime", + "SecureEmbedGlobalTimeLiveSpan", + "SecureEmbedRequestType", + "SecureEmbedSelectableTemplateVariable", + "SecureEmbedShareType", + "SecureEmbedStatus", + "SecureEmbedUpdateRequest", + "SecureEmbedUpdateRequestAttributes", + "SecureEmbedUpdateRequestData", + "SecureEmbedUpdateRequestType", + "SecureEmbedUpdateResponse", + "SecureEmbedUpdateResponseAttributes", + "SecureEmbedUpdateResponseData", + "SecureEmbedUpdateResponseType", + "SecureEmbedViewingPreferences", + "SecureEmbedViewingPreferencesTheme", + "SecurityAutomationRulesLinks", + "SecurityAutomationRulesMeta", + "SecurityAutomationRulesPageInfo", + "SecurityEntityConfigRisks", + "SecurityEntityMetadata", + "SecurityEntityRiskScore", + "SecurityEntityRiskScoreAttributes", + "SecurityEntityRiskScoreAttributesSeverity", + "SecurityEntityRiskScoreResponse", + "SecurityEntityRiskScoreType", + "SecurityEntityRiskScoresMeta", + "SecurityEntityRiskScoresResponse", + "SecurityFilter", + "SecurityFilterAttributes", + "SecurityFilterCreateAttributes", + "SecurityFilterCreateData", + "SecurityFilterCreateRequest", + "SecurityFilterExclusionFilter", + "SecurityFilterExclusionFilterResponse", + "SecurityFilterFilteredDataType", + "SecurityFilterMeta", + "SecurityFilterResponse", + "SecurityFilterType", + "SecurityFilterUpdateAttributes", + "SecurityFilterUpdateData", + "SecurityFilterUpdateRequest", + "SecurityFilterVersion", + "SecurityFilterVersionAttributes", + "SecurityFilterVersionEntry", + "SecurityFilterVersionType", + "SecurityFilterVersionsResponse", + "SecurityFiltersResponse", + "SecurityFindingType", + "SecurityFindingsAttributes", + "SecurityFindingsData", + "SecurityFindingsDataType", + "SecurityFindingsLinks", + "SecurityFindingsMeta", + "SecurityFindingsPage", + "SecurityFindingsSearchRequest", + "SecurityFindingsSearchRequestData", + "SecurityFindingsSearchRequestDataAttributes", + "SecurityFindingsSearchRequestPage", + "SecurityFindingsSort", + "SecurityFindingsStatus", + "SecurityMonitoringAzureAppRegistration", + "SecurityMonitoringContentPackActivation", + "SecurityMonitoringContentPackAppSecDetails", + "SecurityMonitoringContentPackAppSecDetailsType", + "SecurityMonitoringContentPackAuditDetails", + "SecurityMonitoringContentPackAuditDetailsType", + "SecurityMonitoringContentPackEntityDetails", + "SecurityMonitoringContentPackEntityDetailsType", + "SecurityMonitoringContentPackIntegrationStatus", + "SecurityMonitoringContentPackLogsDetails", + "SecurityMonitoringContentPackOnboardingDetails", + "SecurityMonitoringContentPackOnboardingDetailsType", + "SecurityMonitoringContentPackStateAttributes", + "SecurityMonitoringContentPackStateData", + "SecurityMonitoringContentPackStateDetails", + "SecurityMonitoringContentPackStateMeta", + "SecurityMonitoringContentPackStateType", + "SecurityMonitoringContentPackStatesResponse", + "SecurityMonitoringContentPackStatus", + "SecurityMonitoringContentPackThreatIntelDetails", + "SecurityMonitoringContentPackThreatIntelDetailsType", + "SecurityMonitoringContentPackTimestampBucket", + "SecurityMonitoringContentPackVulnerabilityDetails", + "SecurityMonitoringContentPackVulnerabilityDetailsType", + "SecurityMonitoringCriticalAsset", + "SecurityMonitoringCriticalAssetAttributes", + "SecurityMonitoringCriticalAssetCreateAttributes", + "SecurityMonitoringCriticalAssetCreateData", + "SecurityMonitoringCriticalAssetCreateRequest", + "SecurityMonitoringCriticalAssetResponse", + "SecurityMonitoringCriticalAssetSeverity", + "SecurityMonitoringCriticalAssetType", + "SecurityMonitoringCriticalAssetUpdateAttributes", + "SecurityMonitoringCriticalAssetUpdateData", + "SecurityMonitoringCriticalAssetUpdateRequest", + "SecurityMonitoringCriticalAssetsResponse", + "SecurityMonitoringCrowdStrikeIntegrationConfigCreateAttributes", + "SecurityMonitoringCrowdStrikeIntegrationConfigUpdateAttributes", + "SecurityMonitoringCrowdStrikeIntegrationCredentialsValidateAttributes", + "SecurityMonitoringDatasetAttributesRequest", + "SecurityMonitoringDatasetAttributesResponse", + "SecurityMonitoringDatasetColumn", + "SecurityMonitoringDatasetCreateData", + "SecurityMonitoringDatasetCreateRequest", + "SecurityMonitoringDatasetCreateResponse", + "SecurityMonitoringDatasetCreateResponseData", + "SecurityMonitoringDatasetCreateType", + "SecurityMonitoringDatasetData", + "SecurityMonitoringDatasetDefinition", + "SecurityMonitoringDatasetDependenciesRequest", + "SecurityMonitoringDatasetDependenciesRequestAttributes", + "SecurityMonitoringDatasetDependenciesRequestData", + "SecurityMonitoringDatasetDependenciesResponse", + "SecurityMonitoringDatasetDependentsAttributes", + "SecurityMonitoringDatasetDependentsData", + "SecurityMonitoringDatasetDependentsType", + "SecurityMonitoringDatasetResponse", + "SecurityMonitoringDatasetSearch", + "SecurityMonitoringDatasetTimeWindow", + "SecurityMonitoringDatasetType", + "SecurityMonitoringDatasetUpdateData", + "SecurityMonitoringDatasetUpdateRequest", + "SecurityMonitoringDatasetUpdateType", + "SecurityMonitoringDatasetVersionEntry", + "SecurityMonitoringDatasetVersionFieldChange", + "SecurityMonitoringDatasetVersionHistoryAttributes", + "SecurityMonitoringDatasetVersionHistoryData", + "SecurityMonitoringDatasetVersionHistoryEntries", + "SecurityMonitoringDatasetVersionHistoryResponse", + "SecurityMonitoringDatasetVersionHistoryType", + "SecurityMonitoringDatasetsListMeta", + "SecurityMonitoringDatasetsListResponse", + "SecurityMonitoringEntraIdAzureAppRegistrationsAttributes", + "SecurityMonitoringEntraIdAzureAppRegistrationsData", + "SecurityMonitoringEntraIdAzureAppRegistrationsResourceType", + "SecurityMonitoringEntraIdAzureAppRegistrationsResponse", + "SecurityMonitoringEntraIdIntegrationConfigCreateAttributes", + "SecurityMonitoringEntraIdIntegrationConfigUpdateAttributes", + "SecurityMonitoringEntraIdIntegrationCredentialsValidateAttributes", + "SecurityMonitoringFilter", + "SecurityMonitoringFilterAction", + "SecurityMonitoringGoogleWorkspaceIntegrationConfigCreateAttributes", + "SecurityMonitoringGoogleWorkspaceIntegrationConfigUpdateAttributes", + "SecurityMonitoringGoogleWorkspaceIntegrationCredentialsValidateAttributes", + "SecurityMonitoringIntegrationActivateAttributes", + "SecurityMonitoringIntegrationActivateData", + "SecurityMonitoringIntegrationActivateRequest", + "SecurityMonitoringIntegrationActivateResourceType", + "SecurityMonitoringIntegrationConfigAttributes", + "SecurityMonitoringIntegrationConfigCreateAttributes", + "SecurityMonitoringIntegrationConfigCreateData", + "SecurityMonitoringIntegrationConfigCreateRequest", + "SecurityMonitoringIntegrationConfigCrowdStrikeSecrets", + "SecurityMonitoringIntegrationConfigData", + "SecurityMonitoringIntegrationConfigGoogleWorkspaceSecrets", + "SecurityMonitoringIntegrationConfigGoogleWorkspaceServiceAccount", + "SecurityMonitoringIntegrationConfigOktaSecrets", + "SecurityMonitoringIntegrationConfigResourceType", + "SecurityMonitoringIntegrationConfigResponse", + "SecurityMonitoringIntegrationConfigSentinelOneSecrets", + "SecurityMonitoringIntegrationConfigSettings", + "SecurityMonitoringIntegrationConfigState", + "SecurityMonitoringIntegrationConfigUpdateAttributes", + "SecurityMonitoringIntegrationConfigUpdateData", + "SecurityMonitoringIntegrationConfigUpdateRequest", + "SecurityMonitoringIntegrationConfigsResponse", + "SecurityMonitoringIntegrationCredentialsValidateAttributes", + "SecurityMonitoringIntegrationCredentialsValidateData", + "SecurityMonitoringIntegrationCredentialsValidateRequest", + "SecurityMonitoringIntegrationType", + "SecurityMonitoringIntegrationTypeCrowdStrike", + "SecurityMonitoringIntegrationTypeEntraId", + "SecurityMonitoringIntegrationTypeGoogleWorkspace", + "SecurityMonitoringIntegrationTypeOkta", + "SecurityMonitoringIntegrationTypeSentinelOne", + "SecurityMonitoringListRulesResponse", + "SecurityMonitoringOktaIntegrationConfigCreateAttributes", + "SecurityMonitoringOktaIntegrationConfigUpdateAttributes", + "SecurityMonitoringOktaIntegrationCredentialsValidateAttributes", + "SecurityMonitoringPaginatedSuppressionsResponse", + "SecurityMonitoringReferenceTable", + "SecurityMonitoringRuleAnomalyDetectionOptions", + "SecurityMonitoringRuleAnomalyDetectionOptionsBucketDuration", + "SecurityMonitoringRuleAnomalyDetectionOptionsDetectionTolerance", + "SecurityMonitoringRuleAnomalyDetectionOptionsLearningDuration", + "SecurityMonitoringRuleBulkDeleteAttributes", + "SecurityMonitoringRuleBulkDeleteData", + "SecurityMonitoringRuleBulkDeletePayload", + "SecurityMonitoringRuleBulkDeleteRequestDataType", + "SecurityMonitoringRuleBulkDeleteResponse", + "SecurityMonitoringRuleBulkDeleteResponseAttributes", + "SecurityMonitoringRuleBulkDeleteResponseData", + "SecurityMonitoringRuleBulkDeleteResponseDataType", + "SecurityMonitoringRuleBulkExportAttributes", + "SecurityMonitoringRuleBulkExportData", + "SecurityMonitoringRuleBulkExportDataType", + "SecurityMonitoringRuleBulkExportPayload", + "SecurityMonitoringRuleCase", + "SecurityMonitoringRuleCaseAction", + "SecurityMonitoringRuleCaseActionOptions", + "SecurityMonitoringRuleCaseActionOptionsFlaggedIPType", + "SecurityMonitoringRuleCaseActionType", + "SecurityMonitoringRuleCaseCreate", + "SecurityMonitoringRuleConvertBulkAttributes", + "SecurityMonitoringRuleConvertBulkData", + "SecurityMonitoringRuleConvertBulkDataType", + "SecurityMonitoringRuleConvertBulkPayload", + "SecurityMonitoringRuleConvertPayload", + "SecurityMonitoringRuleConvertResponse", + "SecurityMonitoringRuleCreatePayload", + "SecurityMonitoringRuleDetectionMethod", + "SecurityMonitoringRuleEvaluationWindow", + "SecurityMonitoringRuleHardcodedEvaluatorType", + "SecurityMonitoringRuleImpossibleTravelOptions", + "SecurityMonitoringRuleKeepAlive", + "SecurityMonitoringRuleMaxSignalDuration", + "SecurityMonitoringRuleNewValueOptions", + "SecurityMonitoringRuleNewValueOptionsLearningMethod", + "SecurityMonitoringRuleNewValueOptionsLearningThreshold", + "SecurityMonitoringRuleOptions", + "SecurityMonitoringRuleQuery", + "SecurityMonitoringRuleQueryAggregation", + "SecurityMonitoringRuleQueryPayload", + "SecurityMonitoringRuleQueryPayloadData", + "SecurityMonitoringRuleResponse", + "SecurityMonitoringRuleSequenceDetectionOptions", + "SecurityMonitoringRuleSequenceDetectionStep", + "SecurityMonitoringRuleSequenceDetectionStepTransition", + "SecurityMonitoringRuleSeverity", + "SecurityMonitoringRuleSort", + "SecurityMonitoringRuleTestPayload", + "SecurityMonitoringRuleTestRequest", + "SecurityMonitoringRuleTestResponse", + "SecurityMonitoringRuleThirdPartyOptions", + "SecurityMonitoringRuleTypeCreate", + "SecurityMonitoringRuleTypeRead", + "SecurityMonitoringRuleTypeTest", + "SecurityMonitoringRuleUpdatePayload", + "SecurityMonitoringRuleValidatePayload", + "SecurityMonitoringSKU", + "SecurityMonitoringSchedulingOptions", + "SecurityMonitoringSentinelOneIntegrationConfigCreateAttributes", + "SecurityMonitoringSentinelOneIntegrationConfigUpdateAttributes", + "SecurityMonitoringSentinelOneIntegrationCredentialsValidateAttributes", + "SecurityMonitoringSignal", + "SecurityMonitoringSignalArchiveReason", + "SecurityMonitoringSignalAssigneeUpdateAttributes", + "SecurityMonitoringSignalAssigneeUpdateData", + "SecurityMonitoringSignalAssigneeUpdateRequest", + "SecurityMonitoringSignalAttributes", + "SecurityMonitoringSignalIncidentIds", + "SecurityMonitoringSignalIncidentsUpdateAttributes", + "SecurityMonitoringSignalIncidentsUpdateData", + "SecurityMonitoringSignalIncidentsUpdateRequest", + "SecurityMonitoringSignalInvestigationQueryTemplateVariables", + "SecurityMonitoringSignalListRequest", + "SecurityMonitoringSignalListRequestFilter", + "SecurityMonitoringSignalListRequestPage", + "SecurityMonitoringSignalMetadataType", + "SecurityMonitoringSignalResponse", + "SecurityMonitoringSignalRuleCreatePayload", + "SecurityMonitoringSignalRulePayload", + "SecurityMonitoringSignalRuleQuery", + "SecurityMonitoringSignalRuleResponse", + "SecurityMonitoringSignalRuleResponseQuery", + "SecurityMonitoringSignalRuleType", + "SecurityMonitoringSignalState", + "SecurityMonitoringSignalStateUpdateAttributes", + "SecurityMonitoringSignalStateUpdateData", + "SecurityMonitoringSignalStateUpdateRequest", + "SecurityMonitoringSignalSuggestedAction", + "SecurityMonitoringSignalSuggestedActionAttributes", + "SecurityMonitoringSignalSuggestedActionType", + "SecurityMonitoringSignalSuggestedActionsResponse", + "SecurityMonitoringSignalTriageAttributes", + "SecurityMonitoringSignalTriageUpdateData", + "SecurityMonitoringSignalTriageUpdateResponse", + "SecurityMonitoringSignalType", + "SecurityMonitoringSignalUpdateAttributes", + "SecurityMonitoringSignalUpdateData", + "SecurityMonitoringSignalUpdateRequest", + "SecurityMonitoringSignalsBulkAssigneeUpdateAttributes", + "SecurityMonitoringSignalsBulkAssigneeUpdateData", + "SecurityMonitoringSignalsBulkAssigneeUpdateRequest", + "SecurityMonitoringSignalsBulkStateUpdateData", + "SecurityMonitoringSignalsBulkStateUpdateRequest", + "SecurityMonitoringSignalsBulkTriageEvent", + "SecurityMonitoringSignalsBulkTriageEventAttributes", + "SecurityMonitoringSignalsBulkTriageUpdateResponse", + "SecurityMonitoringSignalsBulkTriageUpdateResult", + "SecurityMonitoringSignalsBulkUpdateData", + "SecurityMonitoringSignalsBulkUpdateRequest", + "SecurityMonitoringSignalsListResponse", + "SecurityMonitoringSignalsListResponseLinks", + "SecurityMonitoringSignalsListResponseMeta", + "SecurityMonitoringSignalsListResponseMetaPage", + "SecurityMonitoringSignalsSort", + "SecurityMonitoringStandardDataSource", + "SecurityMonitoringStandardRuleCreatePayload", + "SecurityMonitoringStandardRulePayload", + "SecurityMonitoringStandardRuleQuery", + "SecurityMonitoringStandardRuleResponse", + "SecurityMonitoringStandardRuleTestPayload", + "SecurityMonitoringSuppression", + "SecurityMonitoringSuppressionAttributes", + "SecurityMonitoringSuppressionCreateAttributes", + "SecurityMonitoringSuppressionCreateData", + "SecurityMonitoringSuppressionCreateRequest", + "SecurityMonitoringSuppressionResponse", + "SecurityMonitoringSuppressionSort", + "SecurityMonitoringSuppressionType", + "SecurityMonitoringSuppressionUpdateAttributes", + "SecurityMonitoringSuppressionUpdateData", + "SecurityMonitoringSuppressionUpdateRequest", + "SecurityMonitoringSuppressionsMeta", + "SecurityMonitoringSuppressionsPageMeta", + "SecurityMonitoringSuppressionsResponse", + "SecurityMonitoringTerraformBulkExportAttributes", + "SecurityMonitoringTerraformBulkExportData", + "SecurityMonitoringTerraformBulkExportRequest", + "SecurityMonitoringTerraformConvertAttributes", + "SecurityMonitoringTerraformConvertData", + "SecurityMonitoringTerraformConvertRequest", + "SecurityMonitoringTerraformExportAttributes", + "SecurityMonitoringTerraformExportData", + "SecurityMonitoringTerraformExportResponse", + "SecurityMonitoringTerraformResourceType", + "SecurityMonitoringThirdPartyRootQuery", + "SecurityMonitoringThirdPartyRuleCase", + "SecurityMonitoringThirdPartyRuleCaseCreate", + "SecurityMonitoringTriageUser", + "SecurityMonitoringUser", + "SecurityTrigger", + "SecurityTriggerWrapper", + "Selectors", + "SelfServiceTriggerWrapper", + "SendSlackMessageAction", + "SendSlackMessageActionType", + "SendTeamsMessageAction", + "SendTeamsMessageActionType", + "SensitiveDataScannerConfigRequest", + "SensitiveDataScannerConfiguration", + "SensitiveDataScannerConfigurationData", + "SensitiveDataScannerConfigurationRelationships", + "SensitiveDataScannerConfigurationType", + "SensitiveDataScannerCreateGroupResponse", + "SensitiveDataScannerCreateRuleResponse", + "SensitiveDataScannerFilter", + "SensitiveDataScannerGetConfigIncludedArray", + "SensitiveDataScannerGetConfigIncludedItem", + "SensitiveDataScannerGetConfigResponse", + "SensitiveDataScannerGetConfigResponseData", + "SensitiveDataScannerGroup", + "SensitiveDataScannerGroupAttributes", + "SensitiveDataScannerGroupCreate", + "SensitiveDataScannerGroupCreateRequest", + "SensitiveDataScannerGroupData", + "SensitiveDataScannerGroupDeleteRequest", + "SensitiveDataScannerGroupDeleteResponse", + "SensitiveDataScannerGroupIncludedItem", + "SensitiveDataScannerGroupItem", + "SensitiveDataScannerGroupList", + "SensitiveDataScannerGroupRelationships", + "SensitiveDataScannerGroupResponse", + "SensitiveDataScannerGroupType", + "SensitiveDataScannerGroupUpdate", + "SensitiveDataScannerGroupUpdateRequest", + "SensitiveDataScannerGroupUpdateResponse", + "SensitiveDataScannerIncludedKeywordConfiguration", + "SensitiveDataScannerMeta", + "SensitiveDataScannerMetaVersionOnly", + "SensitiveDataScannerProduct", + "SensitiveDataScannerReorderConfig", + "SensitiveDataScannerReorderGroupsResponse", + "SensitiveDataScannerRule", + "SensitiveDataScannerRuleAttributes", + "SensitiveDataScannerRuleCreate", + "SensitiveDataScannerRuleCreateRequest", + "SensitiveDataScannerRuleData", + "SensitiveDataScannerRuleDeleteRequest", + "SensitiveDataScannerRuleDeleteResponse", + "SensitiveDataScannerRuleIncludedItem", + "SensitiveDataScannerRuleRelationships", + "SensitiveDataScannerRuleResponse", + "SensitiveDataScannerRuleType", + "SensitiveDataScannerRuleUpdate", + "SensitiveDataScannerRuleUpdateRequest", + "SensitiveDataScannerRuleUpdateResponse", + "SensitiveDataScannerSamplings", + "SensitiveDataScannerStandardPattern", + "SensitiveDataScannerStandardPatternAttributes", + "SensitiveDataScannerStandardPatternData", + "SensitiveDataScannerStandardPatternType", + "SensitiveDataScannerStandardPatternsResponse", + "SensitiveDataScannerStandardPatternsResponseData", + "SensitiveDataScannerStandardPatternsResponseItem", + "SensitiveDataScannerSuppressions", + "SensitiveDataScannerTextReplacement", + "SensitiveDataScannerTextReplacementType", + "ServiceAccessToken", + "ServiceAccessTokenAttributes", + "ServiceAccessTokenCreateResponse", + "ServiceAccessTokenRelationships", + "ServiceAccessTokenResponse", + "ServiceAccessTokenResponseMeta", + "ServiceAccessTokenResponseMetaPage", + "ServiceAccessTokensType", + "ServiceAccountAccessTokenCreateAttributes", + "ServiceAccountAccessTokenCreateData", + "ServiceAccountAccessTokenCreateRequest", + "ServiceAccountAccessTokenUpdateAttributes", + "ServiceAccountAccessTokenUpdateData", + "ServiceAccountAccessTokenUpdateRequest", + "ServiceAccountCreateAttributes", + "ServiceAccountCreateData", + "ServiceAccountCreateRequest", + "ServiceAccountType", + "ServiceDefinitionCreateResponse", + "ServiceDefinitionData", + "ServiceDefinitionDataAttributes", + "ServiceDefinitionGetResponse", + "ServiceDefinitionMeta", + "ServiceDefinitionMetaWarnings", + "ServiceDefinitionSchema", + "ServiceDefinitionSchemaVersions", + "ServiceDefinitionV1", + "ServiceDefinitionV1Contact", + "ServiceDefinitionV1Info", + "ServiceDefinitionV1Integrations", + "ServiceDefinitionV1Org", + "ServiceDefinitionV1Resource", + "ServiceDefinitionV1ResourceType", + "ServiceDefinitionV1Version", + "ServiceDefinitionV2", + "ServiceDefinitionV2Contact", + "ServiceDefinitionV2Doc", + "ServiceDefinitionV2Dot1", + "ServiceDefinitionV2Dot1Contact", + "ServiceDefinitionV2Dot1Email", + "ServiceDefinitionV2Dot1EmailType", + "ServiceDefinitionV2Dot1Integrations", + "ServiceDefinitionV2Dot1Link", + "ServiceDefinitionV2Dot1LinkType", + "ServiceDefinitionV2Dot1MSTeams", + "ServiceDefinitionV2Dot1MSTeamsType", + "ServiceDefinitionV2Dot1Opsgenie", + "ServiceDefinitionV2Dot1OpsgenieRegion", + "ServiceDefinitionV2Dot1Pagerduty", + "ServiceDefinitionV2Dot1Slack", + "ServiceDefinitionV2Dot1SlackType", + "ServiceDefinitionV2Dot1Version", + "ServiceDefinitionV2Dot2", + "ServiceDefinitionV2Dot2Contact", + "ServiceDefinitionV2Dot2Integrations", + "ServiceDefinitionV2Dot2Link", + "ServiceDefinitionV2Dot2Opsgenie", + "ServiceDefinitionV2Dot2OpsgenieRegion", + "ServiceDefinitionV2Dot2Pagerduty", + "ServiceDefinitionV2Dot2Version", + "ServiceDefinitionV2Email", + "ServiceDefinitionV2EmailType", + "ServiceDefinitionV2Integrations", + "ServiceDefinitionV2Link", + "ServiceDefinitionV2LinkType", + "ServiceDefinitionV2MSTeams", + "ServiceDefinitionV2MSTeamsType", + "ServiceDefinitionV2Opsgenie", + "ServiceDefinitionV2OpsgenieRegion", + "ServiceDefinitionV2Repo", + "ServiceDefinitionV2Slack", + "ServiceDefinitionV2SlackType", + "ServiceDefinitionV2Version", + "ServiceDefinitionsCreateRequest", + "ServiceDefinitionsListResponse", + "ServiceList", + "ServiceListData", + "ServiceListDataAttributes", + "ServiceListDataAttributesMetadataItems", + "ServiceListDataType", + "ServiceNowAssignmentGroupAttributes", + "ServiceNowAssignmentGroupData", + "ServiceNowAssignmentGroupType", + "ServiceNowAssignmentGroupsResponse", + "ServiceNowBasicAuth", + "ServiceNowBasicAuthType", + "ServiceNowBasicAuthUpdate", + "ServiceNowBusinessServiceAttributes", + "ServiceNowBusinessServiceData", + "ServiceNowBusinessServiceType", + "ServiceNowBusinessServicesResponse", + "ServiceNowCredentials", + "ServiceNowCredentialsUpdate", + "ServiceNowInstanceAttributes", + "ServiceNowInstanceData", + "ServiceNowInstanceType", + "ServiceNowInstancesResponse", + "ServiceNowIntegration", + "ServiceNowIntegrationType", + "ServiceNowIntegrationUpdate", + "ServiceNowTemplateAttributes", + "ServiceNowTemplateCreateRequest", + "ServiceNowTemplateCreateRequestAttributes", + "ServiceNowTemplateCreateRequestData", + "ServiceNowTemplateData", + "ServiceNowTemplateResponse", + "ServiceNowTemplateType", + "ServiceNowTemplateUpdateRequest", + "ServiceNowTemplateUpdateRequestAttributes", + "ServiceNowTemplateUpdateRequestData", + "ServiceNowTemplatesResponse", + "ServiceNowTicket", + "ServiceNowTicketCreateAttributes", + "ServiceNowTicketCreateData", + "ServiceNowTicketCreateRequest", + "ServiceNowTicketResourceType", + "ServiceNowTicketResult", + "ServiceNowTicketsDataType", + "ServiceNowUserAttributes", + "ServiceNowUserData", + "ServiceNowUserType", + "ServiceNowUsersResponse", + "ServiceRepositoryInfoDataType", + "ServiceRepositoryInfoRequest", + "ServiceRepositoryInfoRequestAttributes", + "ServiceRepositoryInfoRequestData", + "ServiceRepositoryInfoResponse", + "ServiceRepositoryInfoResponseAttributes", + "ServiceRepositoryInfoResponseData", + "ServiceRepositoryInfoStatus", + "SessionIdArray", + "SessionIdData", + "SharedDashboardGlobalTime", + "SharedDashboardIncluded", + "SharedDashboardIncludedDashboard", + "SharedDashboardIncludedDashboardAttributes", + "SharedDashboardIncludedDashboardType", + "SharedDashboardIncludedUser", + "SharedDashboardIncludedUserAttributes", + "SharedDashboardInvitee", + "SharedDashboardRelationshipDashboard", + "SharedDashboardRelationshipDashboardData", + "SharedDashboardRelationshipSharer", + "SharedDashboardRelationships", + "SharedDashboardResponse", + "SharedDashboardResponseAttributes", + "SharedDashboardSelectableTemplateVariable", + "SharedDashboardShareType", + "SharedDashboardStatus", + "SharedDashboardType", + "SharedDashboardViewingPreferences", + "SharedDashboardViewingPreferencesTheme", + "Shift", + "ShiftData", + "ShiftDataAttributes", + "ShiftDataRelationships", + "ShiftDataRelationshipsUser", + "ShiftDataRelationshipsUserData", + "ShiftDataRelationshipsUserDataType", + "ShiftDataType", + "ShiftIncluded", + "SignalEntitiesAttributes", + "SignalEntitiesData", + "SignalEntitiesResponse", + "SignalEntitiesType", + "SignalEntityIdentity", + "SignalsProblemsDetections", + "SignalsProblemsSampleMetadata", + "SimpleMonitorUserTemplate", + "SingleAggregatedConnectionResponseArray", + "SingleAggregatedConnectionResponseData", + "SingleAggregatedConnectionResponseDataAttributes", + "SingleAggregatedConnectionResponseDataType", + "SingleAggregatedDnsResponseArray", + "SingleAggregatedDnsResponseData", + "SingleAggregatedDnsResponseDataAttributes", + "SingleAggregatedDnsResponseDataAttributesGroupByItems", + "SingleAggregatedDnsResponseDataAttributesMetricsItems", + "SingleAggregatedDnsResponseDataType", + "SingleEntityContextResponse", + "SlackIntegrationMetadata", + "SlackIntegrationMetadataChannelItem", + "SlackTriggerWrapper", + "SlackUserBindingData", + "SlackUserBindingType", + "SlackUserBindingsResponse", + "SloDataSource", + "SloQuery", + "SloReportCreateRequest", + "SloReportCreateRequestAttributes", + "SloReportCreateRequestData", + "SloStatusData", + "SloStatusDataAttributes", + "SloStatusResponse", + "SloStatusType", + "SlosGroupMode", + "SlosMeasure", + "SlosQueryType", + "Snapshot", + "SnapshotArray", + "SnapshotCreateRequest", + "SnapshotCreateRequestData", + "SnapshotCreateRequestDataAttributes", + "SnapshotData", + "SnapshotDataAttributes", + "SnapshotUpdateRequest", + "SnapshotUpdateRequestData", + "SnapshotUpdateRequestDataAttributes", + "SnapshotUpdateRequestDataType", + "SoftwareCatalogTriggerWrapper", + "SortDirection", + "SourcemapDataType", + "SourcemapFileAttributes", + "SourcemapFileData", + "SourcemapFileDataType", + "SourcemapFileResponse", + "SourcemapItem", + "SourcemapMapKind", + "SourcemapsListMeta", + "SourcemapsListMetaPage", + "SourcemapsResponse", + "Span", + "SpansAggregateBucket", + "SpansAggregateBucketAttributes", + "SpansAggregateBucketType", + "SpansAggregateBucketValue", + "SpansAggregateBucketValueTimeseriesPoint", + "SpansAggregateData", + "SpansAggregateRequest", + "SpansAggregateRequestAttributes", + "SpansAggregateRequestType", + "SpansAggregateResponse", + "SpansAggregateResponseMetadata", + "SpansAggregateResponseStatus", + "SpansAggregateSort", + "SpansAggregateSortType", + "SpansAggregationFunction", + "SpansAttributes", + "SpansCompute", + "SpansComputeType", + "SpansFilter", + "SpansFilterCreate", + "SpansGroupBy", + "SpansGroupByHistogram", + "SpansGroupByMissing", + "SpansGroupByTotal", + "SpansListRequest", + "SpansListRequestAttributes", + "SpansListRequestData", + "SpansListRequestPage", + "SpansListRequestType", + "SpansListResponse", + "SpansListResponseLinks", + "SpansListResponseMetadata", + "SpansMetricCompute", + "SpansMetricComputeAggregationType", + "SpansMetricCreateAttributes", + "SpansMetricCreateData", + "SpansMetricCreateRequest", + "SpansMetricFilter", + "SpansMetricGroupBy", + "SpansMetricResponse", + "SpansMetricResponseAttributes", + "SpansMetricResponseCompute", + "SpansMetricResponseData", + "SpansMetricResponseFilter", + "SpansMetricResponseGroupBy", + "SpansMetricType", + "SpansMetricUpdateAttributes", + "SpansMetricUpdateCompute", + "SpansMetricUpdateData", + "SpansMetricUpdateRequest", + "SpansMetricsResponse", + "SpansQueryFilter", + "SpansQueryOptions", + "SpansResponseMetadataPage", + "SpansSort", + "SpansSortOrder", + "SpansType", + "SpansWarning", + "Spec", + "SpecVersion", + "SplitAPIKey", + "SplitAPIKeyType", + "SplitAPIKeyUpdate", + "SplitCredentials", + "SplitCredentialsUpdate", + "SplitIntegration", + "SplitIntegrationType", + "SplitIntegrationUpdate", + "State", + "StateVariable", + "StateVariableProperties", + "StateVariableType", + "StatsigAPIKey", + "StatsigAPIKeyType", + "StatsigAPIKeyUpdate", + "StatsigCredentials", + "StatsigCredentialsUpdate", + "StatsigIntegration", + "StatsigIntegrationType", + "StatsigIntegrationUpdate", + "StatusPage", + "StatusPageArray", + "StatusPageArrayIncluded", + "StatusPageAsIncluded", + "StatusPageAsIncludedAttributes", + "StatusPageAsIncludedAttributesComponentsItems", + "StatusPageAsIncludedAttributesComponentsItemsComponentsItems", + "StatusPageAsIncludedRelationships", + "StatusPageAsIncludedRelationshipsCreatedByUser", + "StatusPageAsIncludedRelationshipsCreatedByUserData", + "StatusPageAsIncludedRelationshipsLastModifiedByUser", + "StatusPageAsIncludedRelationshipsLastModifiedByUserData", + "StatusPageData", + "StatusPageDataAttributes", + "StatusPageDataAttributesComponentsItems", + "StatusPageDataAttributesComponentsItemsComponentsItems", + "StatusPageDataRelationships", + "StatusPageDataRelationshipsCreatedByUser", + "StatusPageDataRelationshipsCreatedByUserData", + "StatusPageDataRelationshipsLastModifiedByUser", + "StatusPageDataRelationshipsLastModifiedByUserData", + "StatusPageDataType", + "StatusPagesComponent", + "StatusPagesComponentArray", + "StatusPagesComponentArrayIncluded", + "StatusPagesComponentData", + "StatusPagesComponentDataAttributes", + "StatusPagesComponentDataAttributesComponentsItems", + "StatusPagesComponentDataAttributesStatus", + "StatusPagesComponentDataRelationships", + "StatusPagesComponentDataRelationshipsCreatedByUser", + "StatusPagesComponentDataRelationshipsCreatedByUserData", + "StatusPagesComponentDataRelationshipsGroup", + "StatusPagesComponentDataRelationshipsGroupData", + "StatusPagesComponentDataRelationshipsLastModifiedByUser", + "StatusPagesComponentDataRelationshipsLastModifiedByUserData", + "StatusPagesComponentDataRelationshipsStatusPage", + "StatusPagesComponentDataRelationshipsStatusPageData", + "StatusPagesComponentGroup", + "StatusPagesComponentGroupAttributes", + "StatusPagesComponentGroupAttributesComponentsItems", + "StatusPagesComponentGroupAttributesComponentsItemsStatus", + "StatusPagesComponentGroupAttributesComponentsItemsType", + "StatusPagesComponentGroupRelationships", + "StatusPagesComponentGroupRelationshipsCreatedByUser", + "StatusPagesComponentGroupRelationshipsCreatedByUserData", + "StatusPagesComponentGroupRelationshipsGroup", + "StatusPagesComponentGroupRelationshipsGroupData", + "StatusPagesComponentGroupRelationshipsLastModifiedByUser", + "StatusPagesComponentGroupRelationshipsLastModifiedByUserData", + "StatusPagesComponentGroupRelationshipsStatusPage", + "StatusPagesComponentGroupRelationshipsStatusPageData", + "StatusPagesComponentGroupType", + "StatusPagesUser", + "StatusPagesUserAttributes", + "StatusPagesUserType", + "StatuspageAccountCreateAttributes", + "StatuspageAccountCreateData", + "StatuspageAccountCreateRequest", + "StatuspageAccountResponse", + "StatuspageAccountResponseAttributes", + "StatuspageAccountResponseData", + "StatuspageAccountType", + "StatuspageAccountUpdateAttributes", + "StatuspageAccountUpdateData", + "StatuspageAccountUpdateRequest", + "StatuspageUrlSettingCreateAttributes", + "StatuspageUrlSettingCreateData", + "StatuspageUrlSettingCreateRequest", + "StatuspageUrlSettingResponse", + "StatuspageUrlSettingResponseAttributes", + "StatuspageUrlSettingResponseData", + "StatuspageUrlSettingType", + "StatuspageUrlSettingUpdateAttributes", + "StatuspageUrlSettingUpdateData", + "StatuspageUrlSettingUpdateRequest", + "StatuspageUrlSettingsResponse", + "StegadographyGetWidgetsRequest", + "StegadographyGetWidgetsResponse", + "StegadographyWidget", + "StegadographyWidgetAttributes", + "StegadographyWidgetType", + "Step", + "StepDisplay", + "StepDisplayBounds", + "SuiteCreateEdit", + "SuiteCreateEditRequest", + "SuiteJsonPatchRequest", + "SuiteJsonPatchRequestData", + "SuiteJsonPatchRequestDataAttributes", + "SuiteJsonPatchType", + "SuiteSearchResponseType", + "SummarizedSpan", + "SummarizedTrace", + "SuppressionVersionHistory", + "SuppressionVersions", + "SyncProperty", + "SyncPropertyWithMapping", + "SyntheticsApiMultistepParentTestAttributes", + "SyntheticsApiMultistepParentTestData", + "SyntheticsApiMultistepParentTestType", + "SyntheticsApiMultistepParentTestsResponse", + "SyntheticsApiMultistepSubtestAttributes", + "SyntheticsApiMultistepSubtestData", + "SyntheticsApiMultistepSubtestType", + "SyntheticsApiMultistepSubtestsResponse", + "SyntheticsDowntimeData", + "SyntheticsDowntimeDataAttributesRequest", + "SyntheticsDowntimeDataAttributesResponse", + "SyntheticsDowntimeDataRequest", + "SyntheticsDowntimeFrequency", + "SyntheticsDowntimeRequest", + "SyntheticsDowntimeResourceType", + "SyntheticsDowntimeResponse", + "SyntheticsDowntimeTimeSlotDate", + "SyntheticsDowntimeTimeSlotRecurrenceRequest", + "SyntheticsDowntimeTimeSlotRecurrenceResponse", + "SyntheticsDowntimeTimeSlotRequest", + "SyntheticsDowntimeTimeSlotResponse", + "SyntheticsDowntimeWeekday", + "SyntheticsDowntimeWeekdayPosition", + "SyntheticsDowntimesResponse", + "SyntheticsFastTestResult", + "SyntheticsFastTestResultAttributes", + "SyntheticsFastTestResultData", + "SyntheticsFastTestResultDetail", + "SyntheticsFastTestResultType", + "SyntheticsFastTestSubType", + "SyntheticsFastTestType", + "SyntheticsGlobalVariable", + "SyntheticsGlobalVariableAttributes", + "SyntheticsGlobalVariableOptions", + "SyntheticsGlobalVariableParseTestOptions", + "SyntheticsGlobalVariableParseTestOptionsType", + "SyntheticsGlobalVariableParserType", + "SyntheticsGlobalVariableTOTPParameters", + "SyntheticsGlobalVariableValue", + "SyntheticsNetworkAssertion", + "SyntheticsNetworkAssertionJitter", + "SyntheticsNetworkAssertionJitterType", + "SyntheticsNetworkAssertionLatency", + "SyntheticsNetworkAssertionLatencyType", + "SyntheticsNetworkAssertionMultiNetworkHop", + "SyntheticsNetworkAssertionMultiNetworkHopType", + "SyntheticsNetworkAssertionOperator", + "SyntheticsNetworkAssertionPacketLossPercentage", + "SyntheticsNetworkAssertionPacketLossPercentageType", + "SyntheticsNetworkAssertionProperty", + "SyntheticsNetworkTest", + "SyntheticsNetworkTestConfig", + "SyntheticsNetworkTestEdit", + "SyntheticsNetworkTestEditRequest", + "SyntheticsNetworkTestRequest", + "SyntheticsNetworkTestRequestTCPMethod", + "SyntheticsNetworkTestResponse", + "SyntheticsNetworkTestResponseData", + "SyntheticsNetworkTestResponseType", + "SyntheticsNetworkTestSubType", + "SyntheticsNetworkTestType", + "SyntheticsPollTestResultsResponse", + "SyntheticsSuite", + "SyntheticsSuiteOptions", + "SyntheticsSuiteResponse", + "SyntheticsSuiteResponseData", + "SyntheticsSuiteSearchResponse", + "SyntheticsSuiteSearchResponseData", + "SyntheticsSuiteSearchResponseDataAttributes", + "SyntheticsSuiteTest", + "SyntheticsSuiteTestAlertingCriticality", + "SyntheticsSuiteType", + "SyntheticsSuiteTypes", + "SyntheticsTestFileAbortMultipartUploadRequest", + "SyntheticsTestFileCompleteMultipartUploadPart", + "SyntheticsTestFileCompleteMultipartUploadRequest", + "SyntheticsTestFileDownloadRequest", + "SyntheticsTestFileDownloadResponse", + "SyntheticsTestFileMultipartPresignedUrlsParams", + "SyntheticsTestFileMultipartPresignedUrlsPart", + "SyntheticsTestFileMultipartPresignedUrlsRequest", + "SyntheticsTestFileMultipartPresignedUrlsRequestBucketKeyPrefix", + "SyntheticsTestFileMultipartPresignedUrlsResponse", + "SyntheticsTestLatestResultsResponse", + "SyntheticsTestOptions", + "SyntheticsTestOptionsMonitorOptions", + "SyntheticsTestOptionsMonitorOptionsNotificationPresetName", + "SyntheticsTestOptionsRetry", + "SyntheticsTestOptionsScheduling", + "SyntheticsTestOptionsSchedulingTimeframe", + "SyntheticsTestParentSuiteAttributes", + "SyntheticsTestParentSuiteData", + "SyntheticsTestParentSuiteType", + "SyntheticsTestParentSuitesResponse", + "SyntheticsTestPauseStatus", + "SyntheticsTestResultAssertionResult", + "SyntheticsTestResultAttributes", + "SyntheticsTestResultBatch", + "SyntheticsTestResultBounds", + "SyntheticsTestResultBrowserError", + "SyntheticsTestResultBucketKeys", + "SyntheticsTestResultCI", + "SyntheticsTestResultCIPipeline", + "SyntheticsTestResultCIProvider", + "SyntheticsTestResultCIStage", + "SyntheticsTestResultCdnCacheStatus", + "SyntheticsTestResultCdnProviderInfo", + "SyntheticsTestResultCdnResource", + "SyntheticsTestResultCertificate", + "SyntheticsTestResultCertificateValidity", + "SyntheticsTestResultData", + "SyntheticsTestResultDetail", + "SyntheticsTestResultDevice", + "SyntheticsTestResultDeviceBrowser", + "SyntheticsTestResultDevicePlatform", + "SyntheticsTestResultDeviceResolution", + "SyntheticsTestResultDnsRecord", + "SyntheticsTestResultDnsResolution", + "SyntheticsTestResultDnsResolutionAttempt", + "SyntheticsTestResultDuration", + "SyntheticsTestResultExecutionInfo", + "SyntheticsTestResultFailure", + "SyntheticsTestResultFileRef", + "SyntheticsTestResultGit", + "SyntheticsTestResultGitCommit", + "SyntheticsTestResultGitUser", + "SyntheticsTestResultHandshake", + "SyntheticsTestResultHealthCheck", + "SyntheticsTestResultIncludedItem", + "SyntheticsTestResultLocation", + "SyntheticsTestResultNetpath", + "SyntheticsTestResultNetpathDestination", + "SyntheticsTestResultNetpathEndpoint", + "SyntheticsTestResultNetpathHop", + "SyntheticsTestResultNetstats", + "SyntheticsTestResultNetstatsHops", + "SyntheticsTestResultNetworkLatency", + "SyntheticsTestResultOCSPCertificate", + "SyntheticsTestResultOCSPResponse", + "SyntheticsTestResultOCSPUpdates", + "SyntheticsTestResultParentStep", + "SyntheticsTestResultParentTest", + "SyntheticsTestResultRedirect", + "SyntheticsTestResultRelationshipTest", + "SyntheticsTestResultRelationshipTestData", + "SyntheticsTestResultRelationships", + "SyntheticsTestResultRequestInfo", + "SyntheticsTestResultResponse", + "SyntheticsTestResultResponseInfo", + "SyntheticsTestResultRouter", + "SyntheticsTestResultRumContext", + "SyntheticsTestResultRunType", + "SyntheticsTestResultStatus", + "SyntheticsTestResultStep", + "SyntheticsTestResultStepAssertionResult", + "SyntheticsTestResultStepElementUpdates", + "SyntheticsTestResultStepsInfo", + "SyntheticsTestResultSubStep", + "SyntheticsTestResultSubTest", + "SyntheticsTestResultSummaryAttributes", + "SyntheticsTestResultSummaryData", + "SyntheticsTestResultSummaryType", + "SyntheticsTestResultTab", + "SyntheticsTestResultTrace", + "SyntheticsTestResultTracerouteHop", + "SyntheticsTestResultTurn", + "SyntheticsTestResultTurnStep", + "SyntheticsTestResultType", + "SyntheticsTestResultVariable", + "SyntheticsTestResultVariables", + "SyntheticsTestResultVitalsMetrics", + "SyntheticsTestResultWarning", + "SyntheticsTestResultWebSocketClose", + "SyntheticsTestSubType", + "SyntheticsTestType", + "SyntheticsTestVersionActionMetadata", + "SyntheticsTestVersionAttributes", + "SyntheticsTestVersionAuthor", + "SyntheticsTestVersionChangeAttributes", + "SyntheticsTestVersionChangeData", + "SyntheticsTestVersionChangeMetadataItem", + "SyntheticsTestVersionChangeType", + "SyntheticsTestVersionData", + "SyntheticsTestVersionDiffPatchDiff", + "SyntheticsTestVersionDiffPatches", + "SyntheticsTestVersionHistoryMeta", + "SyntheticsTestVersionHistoryResponse", + "SyntheticsTestVersionResponse", + "SyntheticsTestVersionType", + "SyntheticsVariableParser", + "TableResultV2", + "TableResultV2Array", + "TableResultV2Data", + "TableResultV2DataAttributes", + "TableResultV2DataAttributesFileMetadata", + "TableResultV2DataAttributesFileMetadataCloudStorageErrorType", + "TableResultV2DataAttributesFileMetadataOneOfAccessDetails", + "TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAwsDetail", + "TableResultV2DataAttributesFileMetadataOneOfAccessDetailsAzureDetail", + "TableResultV2DataAttributesFileMetadataOneOfAccessDetailsGcpDetail", + "TableResultV2DataAttributesSchema", + "TableResultV2DataAttributesSchemaFieldsItems", + "TableResultV2DataType", + "TableRowResourceArray", + "TableRowResourceData", + "TableRowResourceDataAttributes", + "TableRowResourceDataType", + "TableRowResourceIdentifier", + "TagData", + "TagDataType", + "TagIndexingRuleAttributes", + "TagIndexingRuleCreateAttributes", + "TagIndexingRuleCreateData", + "TagIndexingRuleCreateRequest", + "TagIndexingRuleData", + "TagIndexingRuleDynamicTags", + "TagIndexingRuleExemptionAttributes", + "TagIndexingRuleExemptionCreateAttributes", + "TagIndexingRuleExemptionCreateData", + "TagIndexingRuleExemptionCreateRequest", + "TagIndexingRuleExemptionData", + "TagIndexingRuleExemptionResponse", + "TagIndexingRuleExemptionType", + "TagIndexingRuleMetricMatch", + "TagIndexingRuleOptions", + "TagIndexingRuleOptionsData", + "TagIndexingRuleOrderAttributes", + "TagIndexingRuleOrderData", + "TagIndexingRuleOrderRequest", + "TagIndexingRuleResponse", + "TagIndexingRuleType", + "TagIndexingRuleUpdateAttributes", + "TagIndexingRuleUpdateData", + "TagIndexingRuleUpdateRequest", + "TagIndexingRulesResponse", + "TagIndexingRulesResponseMeta", + "TagPoliciesListResponse", + "TagPolicyAttributes", + "TagPolicyCreateAttributes", + "TagPolicyCreateData", + "TagPolicyCreateRequest", + "TagPolicyCreateType", + "TagPolicyData", + "TagPolicyInclude", + "TagPolicyRelationships", + "TagPolicyResourceType", + "TagPolicyResponse", + "TagPolicyScoreAttributes", + "TagPolicyScoreData", + "TagPolicyScoreRelationship", + "TagPolicyScoreRelationshipData", + "TagPolicyScoreResourceType", + "TagPolicyScoreResponse", + "TagPolicySource", + "TagPolicyType", + "TagPolicyUpdateAttributes", + "TagPolicyUpdateData", + "TagPolicyUpdateRequest", + "TagsEventAttribute", + "TargetingRule", + "TargetingRuleRequest", + "Team", + "TeamAttributes", + "TeamConnection", + "TeamConnectionAttributes", + "TeamConnectionCreateData", + "TeamConnectionCreateRequest", + "TeamConnectionDeleteRequest", + "TeamConnectionDeleteRequestDataItem", + "TeamConnectionRelationships", + "TeamConnectionType", + "TeamConnectionsResponse", + "TeamCreate", + "TeamCreateAttributes", + "TeamCreateRelationships", + "TeamCreateRequest", + "TeamHierarchyLink", + "TeamHierarchyLinkAttributes", + "TeamHierarchyLinkCreate", + "TeamHierarchyLinkCreateRelationships", + "TeamHierarchyLinkCreateRequest", + "TeamHierarchyLinkCreateTeam", + "TeamHierarchyLinkCreateTeamRelationship", + "TeamHierarchyLinkRelationships", + "TeamHierarchyLinkResponse", + "TeamHierarchyLinkTeam", + "TeamHierarchyLinkTeamAttributes", + "TeamHierarchyLinkTeamRelationship", + "TeamHierarchyLinkType", + "TeamHierarchyLinksResponse", + "TeamIncluded", + "TeamLink", + "TeamLinkAttributes", + "TeamLinkCreate", + "TeamLinkCreateRequest", + "TeamLinkResponse", + "TeamLinkType", + "TeamLinksResponse", + "TeamNotificationRule", + "TeamNotificationRuleAttributes", + "TeamNotificationRuleAttributesEmail", + "TeamNotificationRuleAttributesMsTeams", + "TeamNotificationRuleAttributesPagerduty", + "TeamNotificationRuleAttributesSlack", + "TeamNotificationRuleRequest", + "TeamNotificationRuleResponse", + "TeamNotificationRuleType", + "TeamNotificationRulesResponse", + "TeamNotificationRulesResponseMeta", + "TeamNotificationRulesResponseMetaPage", + "TeamOnCallResponders", + "TeamOnCallRespondersData", + "TeamOnCallRespondersDataRelationships", + "TeamOnCallRespondersDataRelationshipsEscalations", + "TeamOnCallRespondersDataRelationshipsEscalationsDataItems", + "TeamOnCallRespondersDataRelationshipsEscalationsDataItemsType", + "TeamOnCallRespondersDataRelationshipsResponders", + "TeamOnCallRespondersDataRelationshipsRespondersDataItems", + "TeamOnCallRespondersDataRelationshipsRespondersDataItemsType", + "TeamOnCallRespondersDataType", + "TeamOnCallRespondersIncluded", + "TeamPermissionSetting", + "TeamPermissionSettingAttributes", + "TeamPermissionSettingResponse", + "TeamPermissionSettingSerializerAction", + "TeamPermissionSettingType", + "TeamPermissionSettingUpdate", + "TeamPermissionSettingUpdateAttributes", + "TeamPermissionSettingUpdateRequest", + "TeamPermissionSettingValue", + "TeamPermissionSettingValues", + "TeamPermissionSettingsResponse", + "TeamRef", + "TeamRefData", + "TeamRefDataType", + "TeamReference", + "TeamReferenceAttributes", + "TeamReferenceType", + "TeamRelationships", + "TeamRelationshipsLinks", + "TeamResponse", + "TeamRoutingRules", + "TeamRoutingRulesData", + "TeamRoutingRulesDataRelationships", + "TeamRoutingRulesDataRelationshipsRules", + "TeamRoutingRulesDataRelationshipsRulesDataItems", + "TeamRoutingRulesDataRelationshipsRulesDataItemsType", + "TeamRoutingRulesDataType", + "TeamRoutingRulesIncluded", + "TeamRoutingRulesRequest", + "TeamRoutingRulesRequestData", + "TeamRoutingRulesRequestDataAttributes", + "TeamRoutingRulesRequestDataType", + "TeamRoutingRulesRequestRule", + "TeamSyncAttributes", + "TeamSyncAttributesFrequency", + "TeamSyncAttributesSource", + "TeamSyncAttributesType", + "TeamSyncBulkType", + "TeamSyncData", + "TeamSyncRequest", + "TeamSyncResponse", + "TeamSyncSelectionStateExternalId", + "TeamSyncSelectionStateExternalIdType", + "TeamSyncSelectionStateItem", + "TeamSyncSelectionStateOperation", + "TeamSyncSelectionStateScope", + "TeamTarget", + "TeamTargetType", + "TeamType", + "TeamUpdate", + "TeamUpdateAttributes", + "TeamUpdateRelationships", + "TeamUpdateRequest", + "TeamsField", + "TeamsHierarchyLinksResponseLinks", + "TeamsHierarchyLinksResponseMeta", + "TeamsHierarchyLinksResponseMetaPage", + "TeamsResponse", + "TeamsResponseLinks", + "TeamsResponseMeta", + "TeamsResponseMetaPagination", + "TenancyConfig", + "TenancyConfigData", + "TenancyConfigDataAttributes", + "TenancyConfigDataAttributesLogsConfig", + "TenancyConfigDataAttributesMetricsConfig", + "TenancyConfigDataAttributesRegionsConfig", + "TenancyConfigList", + "TenancyProductsData", + "TenancyProductsDataAttributes", + "TenancyProductsDataAttributesProductsItems", + "TenancyProductsDataType", + "TenancyProductsList", + "TestOptimizationDeleteServiceSettingsRequest", + "TestOptimizationDeleteServiceSettingsRequestAttributes", + "TestOptimizationDeleteServiceSettingsRequestData", + "TestOptimizationDeleteServiceSettingsRequestDataType", + "TestOptimizationFlakyTestsManagementPoliciesAttemptToFix", + "TestOptimizationFlakyTestsManagementPoliciesAttributes", + "TestOptimizationFlakyTestsManagementPoliciesAutoDisableRule", + "TestOptimizationFlakyTestsManagementPoliciesAutoQuarantineRule", + "TestOptimizationFlakyTestsManagementPoliciesBranchRule", + "TestOptimizationFlakyTestsManagementPoliciesData", + "TestOptimizationFlakyTestsManagementPoliciesDisabled", + "TestOptimizationFlakyTestsManagementPoliciesDisabledFailureRateRule", + "TestOptimizationFlakyTestsManagementPoliciesDisabledStatus", + "TestOptimizationFlakyTestsManagementPoliciesGetRequest", + "TestOptimizationFlakyTestsManagementPoliciesGetRequestAttributes", + "TestOptimizationFlakyTestsManagementPoliciesGetRequestData", + "TestOptimizationFlakyTestsManagementPoliciesQuarantined", + "TestOptimizationFlakyTestsManagementPoliciesQuarantinedFailureRateRule", + "TestOptimizationFlakyTestsManagementPoliciesResponse", + "TestOptimizationFlakyTestsManagementPoliciesType", + "TestOptimizationFlakyTestsManagementPoliciesUpdateRequest", + "TestOptimizationFlakyTestsManagementPoliciesUpdateRequestAttributes", + "TestOptimizationFlakyTestsManagementPoliciesUpdateRequestData", + "TestOptimizationGetFlakyTestsManagementPoliciesRequestDataType", + "TestOptimizationGetServiceSettingsRequest", + "TestOptimizationGetServiceSettingsRequestAttributes", + "TestOptimizationGetServiceSettingsRequestData", + "TestOptimizationGetServiceSettingsRequestDataType", + "TestOptimizationServiceSettingsAttributes", + "TestOptimizationServiceSettingsData", + "TestOptimizationServiceSettingsResponse", + "TestOptimizationServiceSettingsType", + "TestOptimizationUpdateFlakyTestsManagementPoliciesRequestDataType", + "TestOptimizationUpdateServiceSettingsRequest", + "TestOptimizationUpdateServiceSettingsRequestAttributes", + "TestOptimizationUpdateServiceSettingsRequestData", + "TestOptimizationUpdateServiceSettingsRequestDataType", + "TicketCreationRuleAction", + "TicketCreationRuleActionResponse", + "TicketCreationRuleAttributesCreate", + "TicketCreationRuleAttributesResponse", + "TicketCreationRuleCreateRequest", + "TicketCreationRuleDataCreate", + "TicketCreationRuleDataResponse", + "TicketCreationRuleReorderItem", + "TicketCreationRuleReorderRequest", + "TicketCreationRuleResponse", + "TicketCreationRuleType", + "TicketCreationRuleUpdateRequest", + "TicketCreationRulesResponse", + "TicketCreationTarget", + "TimeRestriction", + "TimeRestrictions", + "TimelineCell", + "TimelineCellAuthor", + "TimelineCellAuthorUser", + "TimelineCellAuthorUserContent", + "TimelineCellAuthorUserType", + "TimelineCellContent", + "TimelineCellContentComment", + "TimelineCellResource", + "TimelineCellResourceType", + "TimelineCellType", + "TimelineResponse", + "TimeseriesFormulaQueryRequest", + "TimeseriesFormulaQueryResponse", + "TimeseriesFormulaRequest", + "TimeseriesFormulaRequestAttributes", + "TimeseriesFormulaRequestQueries", + "TimeseriesFormulaRequestType", + "TimeseriesFormulaResponseType", + "TimeseriesQuery", + "TimeseriesResponse", + "TimeseriesResponseAttributes", + "TimeseriesResponseSeries", + "TimeseriesResponseSeriesList", + "TimeseriesResponseTimes", + "TimeseriesResponseValues", + "TimeseriesResponseValuesList", + "TokenType", + "TopLongTaskInvoker", + "TraceAttributes", + "TraceData", + "TraceResponse", + "TraceType", + "Trigger", + "TriggerAttributes", + "TriggerInvestigationRequest", + "TriggerInvestigationRequestData", + "TriggerInvestigationRequestDataAttributes", + "TriggerInvestigationRequestType", + "TriggerInvestigationResponse", + "TriggerInvestigationResponseData", + "TriggerInvestigationResponseDataAttributes", + "TriggerInvestigationResponseType", + "TriggerRateLimit", + "TriggerSource", + "TriggerType", + "TriggerWorkflowAutomationAction", + "TriggerWorkflowAutomationActionType", + "UCConfigPair", + "UCConfigPairData", + "UCConfigPairDataAttributes", + "UCConfigPairDataAttributesConfigsItems", + "UCConfigPairDataType", + "UnassignSeatsUserRequest", + "UnassignSeatsUserRequestData", + "UnassignSeatsUserRequestDataAttributes", + "Unit", + "UnpublishAppResponse", + "UpdateActionConnectionRequest", + "UpdateActionConnectionResponse", + "UpdateAppFavoriteRequest", + "UpdateAppFavoriteRequestData", + "UpdateAppFavoriteRequestDataAttributes", + "UpdateAppProtectionLevelRequest", + "UpdateAppProtectionLevelRequestData", + "UpdateAppProtectionLevelRequestDataAttributes", + "UpdateAppRequest", + "UpdateAppRequestData", + "UpdateAppRequestDataAttributes", + "UpdateAppResponse", + "UpdateAppResponseData", + "UpdateAppResponseDataAttributes", + "UpdateAppSelfServiceRequest", + "UpdateAppSelfServiceRequestData", + "UpdateAppSelfServiceRequestDataAttributes", + "UpdateAppTagsRequest", + "UpdateAppTagsRequestData", + "UpdateAppTagsRequestDataAttributes", + "UpdateAppVersionNameRequest", + "UpdateAppVersionNameRequestData", + "UpdateAppVersionNameRequestDataAttributes", + "UpdateAppsDatastoreItemRequest", + "UpdateAppsDatastoreItemRequestData", + "UpdateAppsDatastoreItemRequestDataAttributes", + "UpdateAppsDatastoreItemRequestDataAttributesItemChanges", + "UpdateAppsDatastoreItemRequestDataType", + "UpdateAppsDatastoreRequest", + "UpdateAppsDatastoreRequestData", + "UpdateAppsDatastoreRequestDataAttributes", + "UpdateCampaignRequest", + "UpdateCampaignRequestAttributes", + "UpdateCampaignRequestData", + "UpdateConnectionRequest", + "UpdateConnectionRequestData", + "UpdateConnectionRequestDataAttributes", + "UpdateConnectionRequestDataAttributesFieldsToUpdateItems", + "UpdateConnectionRequestDataType", + "UpdateCustomFrameworkRequest", + "UpdateCustomFrameworkResponse", + "UpdateDeploymentGateParams", + "UpdateDeploymentGateParamsData", + "UpdateDeploymentGateParamsDataAttributes", + "UpdateDeploymentRuleParams", + "UpdateDeploymentRuleParamsData", + "UpdateDeploymentRuleParamsDataAttributes", + "UpdateEnvironmentAttributes", + "UpdateEnvironmentData", + "UpdateEnvironmentDataType", + "UpdateEnvironmentRequest", + "UpdateFeatureFlagAttributes", + "UpdateFeatureFlagData", + "UpdateFeatureFlagDataType", + "UpdateFeatureFlagRequest", + "UpdateFlakyTestsRequest", + "UpdateFlakyTestsRequestAttributes", + "UpdateFlakyTestsRequestData", + "UpdateFlakyTestsRequestDataType", + "UpdateFlakyTestsRequestTest", + "UpdateFlakyTestsRequestTestNewState", + "UpdateFlakyTestsResponse", + "UpdateFlakyTestsResponseAttributes", + "UpdateFlakyTestsResponseData", + "UpdateFlakyTestsResponseDataType", + "UpdateFlakyTestsResponseResult", + "UpdateFormData", + "UpdateFormDataAttributes", + "UpdateFormRequest", + "UpdateOnCallNotificationRuleRequest", + "UpdateOnCallNotificationRuleRequestAttributes", + "UpdateOnCallNotificationRuleRequestData", + "UpdateOpenAPIResponse", + "UpdateOpenAPIResponseAttributes", + "UpdateOpenAPIResponseData", + "UpdateOutcomesAsyncAttributes", + "UpdateOutcomesAsyncRequest", + "UpdateOutcomesAsyncRequestData", + "UpdateOutcomesAsyncRequestItem", + "UpdateOutcomesAsyncType", + "UpdateResourceEvaluationFiltersRequest", + "UpdateResourceEvaluationFiltersRequestData", + "UpdateResourceEvaluationFiltersResponse", + "UpdateResourceEvaluationFiltersResponseData", + "UpdateRuleRequest", + "UpdateRuleRequestData", + "UpdateRuleResponse", + "UpdateRuleResponseData", + "UpdateRulesetRequest", + "UpdateRulesetRequestData", + "UpdateRulesetRequestDataAttributes", + "UpdateRulesetRequestDataAttributesRulesItems", + "UpdateRulesetRequestDataAttributesRulesItemsQuery", + "UpdateRulesetRequestDataAttributesRulesItemsQueryAddition", + "UpdateRulesetRequestDataAttributesRulesItemsReferenceTable", + "UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems", + "UpdateRulesetRequestDataType", + "UpdateTenancyConfigData", + "UpdateTenancyConfigDataAttributes", + "UpdateTenancyConfigDataAttributesAuthCredentials", + "UpdateTenancyConfigDataAttributesLogsConfig", + "UpdateTenancyConfigDataAttributesMetricsConfig", + "UpdateTenancyConfigDataAttributesRegionsConfig", + "UpdateTenancyConfigDataType", + "UpdateTenancyConfigRequest", + "UpdateUserIdentityProvidersRequest", + "UpdateVariantRequest", + "UpdateWorkflowRequest", + "UpdateWorkflowResponse", + "UpsertAllocationRequest", + "UpsertAndPublishFormVersionData", + "UpsertAndPublishFormVersionDataAttributes", + "UpsertAndPublishFormVersionRequest", + "UpsertAndPublishFormVersionUpsertParams", + "UpsertCatalogEntityRequest", + "UpsertCatalogEntityResponse", + "UpsertCatalogEntityResponseIncludedItem", + "UpsertCatalogKindRequest", + "UpsertCatalogKindResponse", + "UpsertCloudInventorySyncConfigRequest", + "UpsertCloudInventorySyncConfigRequestAttributes", + "UpsertCloudInventorySyncConfigRequestData", + "UpsertFormVersionData", + "UpsertFormVersionDataAttributes", + "UpsertFormVersionRequest", + "UpsertFormVersionUpsertParams", + "UpsertOAuthScopesRestrictionData", + "UpsertOAuthScopesRestrictionDataAttributes", + "UpsertOAuthScopesRestrictionRequest", + "UpsertOAuthScopesRestrictionType", + "Urgency", + "UrlParam", + "UrlParamUpdate", + "UsageApplicationSecurityMonitoringResponse", + "UsageAttributesObject", + "UsageAttributionTypesAttributes", + "UsageAttributionTypesBody", + "UsageAttributionTypesResponse", + "UsageAttributionTypesType", + "UsageDataObject", + "UsageLambdaTracedInvocationsResponse", + "UsageObservabilityPipelinesResponse", + "UsageSummaryAvailableFieldsAttributes", + "UsageSummaryAvailableFieldsBody", + "UsageSummaryAvailableFieldsResponse", + "UsageSummaryAvailableFieldsType", + "UsageTimeSeriesObject", + "UsageTimeSeriesType", + "User", + "UserAttributes", + "UserAttributesStatus", + "UserAuthorizedClientAttributes", + "UserAuthorizedClientData", + "UserAuthorizedClientRelationshipOAuth2Client", + "UserAuthorizedClientRelationshipOAuth2ClientData", + "UserAuthorizedClientRelationshipOAuth2ClientDataType", + "UserAuthorizedClientRelationshipScopeData", + "UserAuthorizedClientRelationshipScopeDataType", + "UserAuthorizedClientRelationshipScopes", + "UserAuthorizedClientRelationshipUser", + "UserAuthorizedClientRelationshipUserData", + "UserAuthorizedClientRelationshipUserDataType", + "UserAuthorizedClientRelationships", + "UserAuthorizedClientResponse", + "UserAuthorizedClientType", + "UserAuthorizedClientsResponse", + "UserCreateAttributes", + "UserCreateData", + "UserCreateRequest", + "UserInvitationData", + "UserInvitationDataAttributes", + "UserInvitationRelationships", + "UserInvitationResponse", + "UserInvitationResponseData", + "UserInvitationsRequest", + "UserInvitationsResponse", + "UserInvitationsType", + "UserOverrideIdentityProviderAttributes", + "UserOverrideIdentityProviderData", + "UserOverrideIdentityProviderDataType", + "UserOverrideIdentityProvidersResponse", + "UserRelationshipData", + "UserRelationshipIdentityProviderData", + "UserRelationshipIdentityProviderDataType", + "UserRelationships", + "UserResourceType", + "UserResponse", + "UserResponseIncludedItem", + "UserResponseRelationships", + "UserTarget", + "UserTargetType", + "UserTeam", + "UserTeamAttributes", + "UserTeamCreate", + "UserTeamIncluded", + "UserTeamPermission", + "UserTeamPermissionAttributes", + "UserTeamPermissionType", + "UserTeamRelationships", + "UserTeamRequest", + "UserTeamResponse", + "UserTeamRole", + "UserTeamTeamType", + "UserTeamType", + "UserTeamUpdate", + "UserTeamUpdateRequest", + "UserTeamUserType", + "UserTeamsResponse", + "UserUpdateAttributes", + "UserUpdateData", + "UserUpdateRequest", + "UsersRelationship", + "UsersResponse", + "UsersType", + "V2Event", + "V2EventAttributes", + "V2EventAttributesAttributes", + "V2EventResponse", + "ValidateAPIKeyResponse", + "ValidateAPIKeyStatus", + "ValidateV2Attributes", + "ValidateV2Data", + "ValidateV2Response", + "ValidateV2Type", + "ValidationError", + "ValidationErrorMeta", + "ValidationResponse", + "ValueType", + "Variant", + "VariantWeight", + "VariantWeightRequest", + "VersionHistoryUpdate", + "VersionHistoryUpdateType", + "ViewershipHistorySessionArray", + "ViewershipHistorySessionData", + "ViewershipHistorySessionDataAttributes", + "ViewershipHistorySessionDataType", + "VirusTotalAPIKey", + "VirusTotalAPIKeyType", + "VirusTotalAPIKeyUpdate", + "VirusTotalCredentials", + "VirusTotalCredentialsUpdate", + "VirusTotalIntegration", + "VirusTotalIntegrationType", + "VirusTotalIntegrationUpdate", + "VulnerabilitiesType", + "Vulnerability", + "VulnerabilityAdvisory", + "VulnerabilityAttributes", + "VulnerabilityCvss", + "VulnerabilityDependencyLocations", + "VulnerabilityEcosystem", + "VulnerabilityRelationships", + "VulnerabilityRelationshipsAffects", + "VulnerabilityRelationshipsAffectsData", + "VulnerabilityRisks", + "VulnerabilitySeverity", + "VulnerabilityStatus", + "VulnerabilityTool", + "VulnerabilityType", + "Watch", + "WatchData", + "WatchDataAttributes", + "WatchDataType", + "WatcherArray", + "WatcherData", + "WatcherDataAttributes", + "WatcherDataType", + "WebIntegrationAccountCreateRequest", + "WebIntegrationAccountCreateRequestAttributes", + "WebIntegrationAccountCreateRequestData", + "WebIntegrationAccountResponse", + "WebIntegrationAccountResponseAttributes", + "WebIntegrationAccountResponseData", + "WebIntegrationAccountSecrets", + "WebIntegrationAccountSettings", + "WebIntegrationAccountType", + "WebIntegrationAccountUpdateRequest", + "WebIntegrationAccountUpdateRequestAttributes", + "WebIntegrationAccountUpdateRequestData", + "WebIntegrationAccountsResponse", + "WebhooksAuthMethodAttributes", + "WebhooksAuthMethodProtocol", + "WebhooksAuthMethodRelationships", + "WebhooksAuthMethodResponseData", + "WebhooksAuthMethodType", + "WebhooksAuthMethodsResponse", + "WebhooksOAuth2ClientCredentialsCreateAttributes", + "WebhooksOAuth2ClientCredentialsCreateData", + "WebhooksOAuth2ClientCredentialsCreateRequest", + "WebhooksOAuth2ClientCredentialsRelationship", + "WebhooksOAuth2ClientCredentialsRelationshipData", + "WebhooksOAuth2ClientCredentialsResponse", + "WebhooksOAuth2ClientCredentialsResponseAttributes", + "WebhooksOAuth2ClientCredentialsResponseData", + "WebhooksOAuth2ClientCredentialsType", + "WebhooksOAuth2ClientCredentialsUpdateAttributes", + "WebhooksOAuth2ClientCredentialsUpdateData", + "WebhooksOAuth2ClientCredentialsUpdateRequest", + "Weekday", + "WidgetAnnotationsMap", + "WidgetAttributes", + "WidgetData", + "WidgetDefinition", + "WidgetExperienceType", + "WidgetIncludedUser", + "WidgetIncludedUserAttributes", + "WidgetListResponse", + "WidgetLiveSpan", + "WidgetRelationshipData", + "WidgetRelationshipItem", + "WidgetRelationships", + "WidgetResponse", + "WidgetSearchMeta", + "WidgetType", + "WorkflowData", + "WorkflowDataAttributes", + "WorkflowDataRelationships", + "WorkflowDataType", + "WorkflowDataUpdate", + "WorkflowDataUpdateAttributes", + "WorkflowInstanceCreateMeta", + "WorkflowInstanceCreateRequest", + "WorkflowInstanceCreateResponse", + "WorkflowInstanceCreateResponseData", + "WorkflowInstanceListItem", + "WorkflowListInstancesResponse", + "WorkflowListInstancesResponseMeta", + "WorkflowListInstancesResponseMetaPage", + "WorkflowListItem", + "WorkflowListItemAttributes", + "WorkflowTriggerWrapper", + "WorkflowUserRelationship", + "WorkflowUserRelationshipData", + "WorkflowUserRelationshipType", + "WorklflowCancelInstanceResponse", + "WorklflowCancelInstanceResponseData", + "WorklflowGetInstanceResponse", + "WorklflowGetInstanceResponseData", + "WorklflowGetInstanceResponseDataAttributes", + "XRayServicesIncludeAll", + "XRayServicesIncludeOnly", + "XRayServicesList", + "ZoomConfigurationReference", + "ZoomConfigurationReferenceData", +] \ No newline at end of file diff --git a/datadog_api_client/version.py b/datadog_api_client/version.py new file mode 100644 index 0000000000..d3f40f89ce --- /dev/null +++ b/datadog_api_client/version.py @@ -0,0 +1,6 @@ +# Unless explicitly stated otherwise all files in this repository are licensed +# under the 3-clause BSD style license (see LICENSE). +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2020-Present Datadog, Inc. + +__version__ = "1.0.0" \ No newline at end of file diff --git a/src/datadog_api_client/v2/api/authn_mappings_api.py b/src/datadog_api_client/v2/api/authn_mappings_api.py index 33f6045e4f..69190d5f35 100644 --- a/src/datadog_api_client/v2/api/authn_mappings_api.py +++ b/src/datadog_api_client/v2/api/authn_mappings_api.py @@ -228,7 +228,7 @@ def list_authn_mappings( List all AuthN Mappings in the org. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/case_management_api.py b/src/datadog_api_client/v2/api/case_management_api.py index 131bc18e2f..90def4d903 100644 --- a/src/datadog_api_client/v2/api/case_management_api.py +++ b/src/datadog_api_client/v2/api/case_management_api.py @@ -2683,7 +2683,7 @@ def search_cases( Search cases. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -2726,7 +2726,7 @@ def search_cases_with_pagination( Provide a paginated version of :meth:`search_cases`, returning all items. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/identity_providers_api.py b/src/datadog_api_client/v2/api/identity_providers_api.py index 71a513e4f3..df078b974b 100644 --- a/src/datadog_api_client/v2/api/identity_providers_api.py +++ b/src/datadog_api_client/v2/api/identity_providers_api.py @@ -157,7 +157,7 @@ def list_identity_provider_users( :param idp_id: The ID of the identity provider. :type idp_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -213,7 +213,7 @@ def list_identity_provider_users_with_pagination( :param idp_id: The ID of the identity provider. :type idp_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/incidents_api.py b/src/datadog_api_client/v2/api/incidents_api.py index 074e1bd0e1..8a98542b1b 100644 --- a/src/datadog_api_client/v2/api/incidents_api.py +++ b/src/datadog_api_client/v2/api/incidents_api.py @@ -3935,7 +3935,7 @@ def list_incidents( :param include: Specifies which types of related objects should be included in the response. :type include: [IncidentRelatedObject], optional - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_offset: Specific offset to use as the beginning of the returned page. :type page_offset: int, optional @@ -3966,7 +3966,7 @@ def list_incidents_with_pagination( :param include: Specifies which types of related objects should be included in the response. :type include: [IncidentRelatedObject], optional - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_offset: Specific offset to use as the beginning of the returned page. :type page_offset: int, optional @@ -4209,7 +4209,7 @@ def search_incidents( :type include: IncidentRelatedObject, optional :param sort: Specifies the order of returned incidents. :type sort: IncidentSearchSortOrder, optional - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_offset: Specific offset to use as the beginning of the returned page. :type page_offset: int, optional @@ -4253,7 +4253,7 @@ def search_incidents_with_pagination( :type include: IncidentRelatedObject, optional :param sort: Specifies the order of returned incidents. :type sort: IncidentSearchSortOrder, optional - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_offset: Specific offset to use as the beginning of the returned page. :type page_offset: int, optional diff --git a/src/datadog_api_client/v2/api/key_management_api.py b/src/datadog_api_client/v2/api/key_management_api.py index b2d51ccc80..6991e488c9 100644 --- a/src/datadog_api_client/v2/api/key_management_api.py +++ b/src/datadog_api_client/v2/api/key_management_api.py @@ -862,7 +862,7 @@ def list_api_keys( List all API keys available for your account. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -940,7 +940,7 @@ def list_application_keys( List all application keys available for your org - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -1002,7 +1002,7 @@ def list_current_user_application_keys( List all application keys available for current user - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -1057,7 +1057,7 @@ def list_personal_access_tokens( List all access tokens for the organization. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/logs_restriction_queries_api.py b/src/datadog_api_client/v2/api/logs_restriction_queries_api.py index 3c084e57c8..a5545f3cb4 100644 --- a/src/datadog_api_client/v2/api/logs_restriction_queries_api.py +++ b/src/datadog_api_client/v2/api/logs_restriction_queries_api.py @@ -425,7 +425,7 @@ def list_restriction_queries( Returns all restriction queries, including their names and IDs. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -453,7 +453,7 @@ def list_restriction_query_roles( :param restriction_query_id: The ID of the restriction query. :type restriction_query_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/observability_pipelines_api.py b/src/datadog_api_client/v2/api/observability_pipelines_api.py index 7422aedcd5..52be574f11 100644 --- a/src/datadog_api_client/v2/api/observability_pipelines_api.py +++ b/src/datadog_api_client/v2/api/observability_pipelines_api.py @@ -226,7 +226,7 @@ def list_pipelines( Retrieve a list of pipelines. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/org_authorized_clients_api.py b/src/datadog_api_client/v2/api/org_authorized_clients_api.py index fa3ee66ed1..581c029e0a 100644 --- a/src/datadog_api_client/v2/api/org_authorized_clients_api.py +++ b/src/datadog_api_client/v2/api/org_authorized_clients_api.py @@ -403,7 +403,7 @@ def list_org_authorized_clients( Get a list of all OAuth2 clients authorized for the current organization. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -459,7 +459,7 @@ def list_org_authorized_clients_with_pagination( Provide a paginated version of :meth:`list_org_authorized_clients`, returning all items. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -531,7 +531,7 @@ def list_org_authorized_client_user_authorizations( :param org_authorized_client_id: The ID of the org authorized client. :type org_authorized_client_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -591,7 +591,7 @@ def list_org_authorized_client_user_authorizations_with_pagination( :param org_authorized_client_id: The ID of the org authorized client. :type org_authorized_client_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/roles_api.py b/src/datadog_api_client/v2/api/roles_api.py index f2e4c23e60..0a033f298a 100644 --- a/src/datadog_api_client/v2/api/roles_api.py +++ b/src/datadog_api_client/v2/api/roles_api.py @@ -576,7 +576,7 @@ def list_roles( Returns all roles, including their names and their unique identifiers. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -635,7 +635,7 @@ def list_role_users( :param role_id: The unique identifier of the role. :type role_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/scorecards_api.py b/src/datadog_api_client/v2/api/scorecards_api.py index 5554c863b1..e2b55755f0 100644 --- a/src/datadog_api_client/v2/api/scorecards_api.py +++ b/src/datadog_api_client/v2/api/scorecards_api.py @@ -719,7 +719,7 @@ def list_scorecard_outcomes( Fetches all rule outcomes. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_offset: Specific offset to use as the beginning of the returned page. :type page_offset: int, optional @@ -792,7 +792,7 @@ def list_scorecard_outcomes_with_pagination( Provide a paginated version of :meth:`list_scorecard_outcomes`, returning all items. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_offset: Specific offset to use as the beginning of the returned page. :type page_offset: int, optional @@ -877,7 +877,7 @@ def list_scorecard_rules( Fetch all rules. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_offset: Specific offset to use as the beginning of the returned page. :type page_offset: int, optional @@ -950,7 +950,7 @@ def list_scorecard_rules_with_pagination( Provide a paginated version of :meth:`list_scorecard_rules`, returning all items. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_offset: Specific offset to use as the beginning of the returned page. :type page_offset: int, optional diff --git a/src/datadog_api_client/v2/api/security_monitoring_api.py b/src/datadog_api_client/v2/api/security_monitoring_api.py index d2a4849c57..3b726f7a41 100644 --- a/src/datadog_api_client/v2/api/security_monitoring_api.py +++ b/src/datadog_api_client/v2/api/security_monitoring_api.py @@ -6058,7 +6058,7 @@ def get_rule_version_history( :param rule_id: The ID of the rule. :type rule_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -6663,7 +6663,7 @@ def get_suppression_version_history( :param suppression_id: The ID of the suppression rule :type suppression_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -7093,7 +7093,7 @@ def list_historical_jobs( List historical jobs. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -7680,7 +7680,7 @@ def list_security_monitoring_rules( List rules. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/service_accounts_api.py b/src/datadog_api_client/v2/api/service_accounts_api.py index 1eea255614..b34ff000c3 100644 --- a/src/datadog_api_client/v2/api/service_accounts_api.py +++ b/src/datadog_api_client/v2/api/service_accounts_api.py @@ -528,7 +528,7 @@ def list_service_account_access_tokens( :param service_account_id: The ID of the service account. :type service_account_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -574,7 +574,7 @@ def list_service_account_application_keys( :param service_account_id: The ID of the service account. :type service_account_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/service_definition_api.py b/src/datadog_api_client/v2/api/service_definition_api.py index 0c3969e9a7..98e5378b75 100644 --- a/src/datadog_api_client/v2/api/service_definition_api.py +++ b/src/datadog_api_client/v2/api/service_definition_api.py @@ -210,7 +210,7 @@ def list_service_definitions( Get a list of all service definitions from the Datadog Service Catalog. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -241,7 +241,7 @@ def list_service_definitions_with_pagination( Provide a paginated version of :meth:`list_service_definitions`, returning all items. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/teams_api.py b/src/datadog_api_client/v2/api/teams_api.py index b1ca1e3c70..94e3fc16e3 100644 --- a/src/datadog_api_client/v2/api/teams_api.py +++ b/src/datadog_api_client/v2/api/teams_api.py @@ -1349,7 +1349,7 @@ def get_team_memberships( :param team_id: None :type team_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -1391,7 +1391,7 @@ def get_team_memberships_with_pagination( :param team_id: None :type team_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -1535,7 +1535,7 @@ def list_member_teams( :param super_team_id: None :type super_team_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -1572,7 +1572,7 @@ def list_member_teams_with_pagination( :param super_team_id: None :type super_team_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -1621,7 +1621,7 @@ def list_team_connections( Returns all team connections. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -1670,7 +1670,7 @@ def list_team_connections_with_pagination( Provide a paginated version of :meth:`list_team_connections`, returning all items. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -1732,7 +1732,7 @@ def list_team_hierarchy_links( :param page_number: Specific page number to return. :type page_number: int, optional - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param filter_parent_team: Filter by parent team ID :type filter_parent_team: str, optional @@ -1769,7 +1769,7 @@ def list_team_hierarchy_links_with_pagination( :param page_number: Specific page number to return. :type page_number: int, optional - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param filter_parent_team: Filter by parent team ID :type filter_parent_team: str, optional @@ -1823,7 +1823,7 @@ def list_teams( :param page_number: Specific page number to return. :type page_number: int, optional - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param sort: Specifies the order of the returned teams :type sort: ListTeamsSort, optional @@ -1878,7 +1878,7 @@ def list_teams_with_pagination( :param page_number: Specific page number to return. :type page_number: int, optional - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param sort: Specifies the order of the returned teams :type sort: ListTeamsSort, optional diff --git a/src/datadog_api_client/v2/api/user_authorized_clients_api.py b/src/datadog_api_client/v2/api/user_authorized_clients_api.py index 105afdb39a..9af3b65822 100644 --- a/src/datadog_api_client/v2/api/user_authorized_clients_api.py +++ b/src/datadog_api_client/v2/api/user_authorized_clients_api.py @@ -204,7 +204,7 @@ def list_user_authorized_clients( Get a list of all OAuth2 clients authorized by the current user. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -247,7 +247,7 @@ def list_user_authorized_clients_with_pagination( Provide a paginated version of :meth:`list_user_authorized_clients`, returning all items. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/users_api.py b/src/datadog_api_client/v2/api/users_api.py index 8642e82d93..b54760a1bb 100644 --- a/src/datadog_api_client/v2/api/users_api.py +++ b/src/datadog_api_client/v2/api/users_api.py @@ -585,7 +585,7 @@ def list_users( Get the list of all users in the organization. This list includes all users even if they are deactivated or unverified. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional @@ -639,7 +639,7 @@ def list_users_with_pagination( Provide a paginated version of :meth:`list_users`, returning all items. - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/src/datadog_api_client/v2/api/workflow_automation_api.py b/src/datadog_api_client/v2/api/workflow_automation_api.py index 6436ea5a58..e35f0354da 100644 --- a/src/datadog_api_client/v2/api/workflow_automation_api.py +++ b/src/datadog_api_client/v2/api/workflow_automation_api.py @@ -428,7 +428,7 @@ def list_workflow_instances( :param workflow_id: The ID of the workflow. :type workflow_id: str - :param page_size: Size for a given page. The maximum allowed value is 100. + :param page_size: Number of items to return per page. The maximum allowed value is 100. :type page_size: int, optional :param page_number: Specific page number to return. :type page_number: int, optional diff --git a/test-runner-data/features/v1/authentication.feature b/test-runner-data/features/v1/authentication.feature new file mode 100644 index 0000000000..b82a231321 --- /dev/null +++ b/test-runner-data/features/v1/authentication.feature @@ -0,0 +1,29 @@ +@endpoint(authentication) @endpoint(authentication-v1) +Feature: Authentication + All requests to Datadog’s API must be authenticated. Requests that write + data require reporting access and require an `API key`. Requests that read + data require full access and also require an `application key`. **Note:** + All Datadog API clients are configured by default to consume Datadog US + site APIs. If you are on the Datadog EU site, set the environment variable + `DATADOG_HOST` to `https://api.datadoghq.eu` or override this value + directly when creating your client. [Manage your account’s API and + application keys](https://app.datadoghq.com/organization-settings/) in + Datadog, and see the [API and Application Keys + page](https://docs.datadoghq.com/account_management/api-app-keys/) in the + documentation. + + Background: + Given an instance of "Authentication" API + And new "Validate" request + + @skip-validation @team:DataDog/credentials-management + Scenario: Validate API key returns "Forbidden" response + When the request is sent + Then the response status is 403 OK + + @team:DataDog/credentials-management + Scenario: Validate API key returns "OK" response + Given a valid "apiKeyAuth" key in the system + When the request is sent + Then the response status is 200 OK + And the response "valid" is equal to true diff --git a/test-runner-data/features/v1/aws_integration.feature b/test-runner-data/features/v1/aws_integration.feature new file mode 100644 index 0000000000..08c57bbc61 --- /dev/null +++ b/test-runner-data/features/v1/aws_integration.feature @@ -0,0 +1,191 @@ +@endpoint(aws-integration) @endpoint(aws-integration-v1) +Feature: AWS Integration + Configure your Datadog-AWS integration directly through the Datadog API. + For more information, see the [AWS integration + page](https://docs.datadoghq.com/integrations/amazon_web_services). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "AWSIntegration" API + + @generated @skip @team:DataDog/aws-integrations + Scenario: Create an AWS integration returns "Bad Request" response + Given new "CreateAWSAccount" request + And body with value {"account_id": "123456789012", "account_specific_namespace_rules": {"auto_scaling": false, "opswork": false}, "cspm_resource_collection_enabled": true, "excluded_regions": ["us-east-1", "us-west-2"], "extended_resource_collection_enabled": true, "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": false, "resource_collection_enabled": true, "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Create an AWS integration returns "Conflict Error" response + Given new "CreateAWSAccount" request + And body with value {"account_id": "123456789012", "account_specific_namespace_rules": {"auto_scaling": false, "opswork": false}, "cspm_resource_collection_enabled": true, "excluded_regions": ["us-east-1", "us-west-2"], "extended_resource_collection_enabled": true, "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": false, "resource_collection_enabled": true, "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 409 Conflict Error + + @team:DataDog/aws-integrations + Scenario: Create an AWS integration returns "OK" response + Given new "CreateAWSAccount" request + And body with value {"account_id": "{{ timestamp("now") }}00", "account_specific_namespace_rules": {"auto_scaling": false}, "cspm_resource_collection_enabled": true, "excluded_regions": ["us-east-1", "us-west-2"], "extended_resource_collection_enabled": true, "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": false, "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: Create an Amazon EventBridge source returns "Bad Request" response + Given new "CreateAWSEventBridgeSource" request + And body with value {"account_id": "123456789012", "create_event_bus": true, "event_generator_name": "app-alerts", "region": "us-east-1"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Create an Amazon EventBridge source returns "OK" response + Given new "CreateAWSEventBridgeSource" request + And body with value {"account_id": "123456789012", "create_event_bus": true, "event_generator_name": "app-alerts", "region": "us-east-1"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: Delete a tag filtering entry returns "Bad Request" response + Given new "DeleteAWSTagFilter" request + And body with value {"account_id": "FAKEAC0FAKEAC2FAKEAC", "namespace": "elb"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Delete a tag filtering entry returns "OK" response + Given new "DeleteAWSTagFilter" request + And body with value {"account_id": "FAKEAC0FAKEAC2FAKEAC", "namespace": "elb"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: Delete an AWS integration returns "Bad Request" response + Given new "DeleteAWSAccount" request + And body with value {"account_id": "123456789012", "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Delete an AWS integration returns "Conflict Error" response + Given new "DeleteAWSAccount" request + And body with value {"account_id": "123456789012", "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 409 Conflict Error + + @team:DataDog/aws-integrations + Scenario: Delete an AWS integration returns "OK" response + Given there is a valid "aws_account" in the system + And new "DeleteAWSAccount" request + And body with value {"account_id": "{{ timestamp("now") }}00", "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: Delete an Amazon EventBridge source returns "Bad Request" response + Given new "DeleteAWSEventBridgeSource" request + And body with value {"account_id": "123456789012", "event_generator_name": "app-alerts-zyxw3210", "region": "us-east-1"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Delete an Amazon EventBridge source returns "OK" response + Given new "DeleteAWSEventBridgeSource" request + And body with value {"account_id": "123456789012", "event_generator_name": "app-alerts-zyxw3210", "region": "us-east-1"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: Generate a new external ID returns "Bad Request" response + Given new "CreateNewAWSExternalID" request + And body with value {"account_id": "123456789012", "account_specific_namespace_rules": {"auto_scaling": false, "opswork": false}, "cspm_resource_collection_enabled": true, "excluded_regions": ["us-east-1", "us-west-2"], "extended_resource_collection_enabled": true, "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": false, "resource_collection_enabled": true, "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Generate a new external ID returns "OK" response + Given new "CreateNewAWSExternalID" request + And body with value {"account_id": "123456789012", "account_specific_namespace_rules": {"auto_scaling": false, "opswork": false}, "cspm_resource_collection_enabled": true, "excluded_regions": ["us-east-1", "us-west-2"], "extended_resource_collection_enabled": true, "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": false, "resource_collection_enabled": true, "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get all AWS tag filters returns "Bad Request" response + Given new "ListAWSTagFilters" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get all AWS tag filters returns "OK" response + Given new "ListAWSTagFilters" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get all Amazon EventBridge sources returns "Bad Request" response + Given new "ListAWSEventBridgeSources" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get all Amazon EventBridge sources returns "OK" response + Given new "ListAWSEventBridgeSources" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: List all AWS integrations returns "Bad Request" response + Given new "ListAWSAccounts" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: List all AWS integrations returns "OK" response + Given new "ListAWSAccounts" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: List namespace rules returns "OK" response + Given new "ListAvailableAWSNamespaces" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: Set an AWS tag filter returns "Bad Request" response + Given new "CreateAWSTagFilter" request + And body with value {"account_id": "123456789012", "namespace": "elb", "tag_filter_str": "prod*"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Set an AWS tag filter returns "OK" response + Given new "CreateAWSTagFilter" request + And body with value {"account_id": "123456789012", "namespace": "elb", "tag_filter_str": "prod*"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aws-integrations + Scenario: Update an AWS integration returns "Bad Request" response + Given new "UpdateAWSAccount" request + And body with value {"account_id": "123456789012", "account_specific_namespace_rules": {"auto_scaling": false, "opswork": false}, "cspm_resource_collection_enabled": true, "excluded_regions": ["us-east-1", "us-west-2"], "extended_resource_collection_enabled": true, "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": false, "resource_collection_enabled": true, "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Update an AWS integration returns "Conflict Error" response + Given new "UpdateAWSAccount" request + And body with value {"account_id": "123456789012", "account_specific_namespace_rules": {"auto_scaling": false, "opswork": false}, "cspm_resource_collection_enabled": true, "excluded_regions": ["us-east-1", "us-west-2"], "extended_resource_collection_enabled": true, "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": false, "resource_collection_enabled": true, "role_name": "DatadogAWSIntegrationRole"} + When the request is sent + Then the response status is 409 Conflict Error + + @team:DataDog/aws-integrations + Scenario: Update an AWS integration returns "OK" response + Given there is a valid "aws_account" in the system + And new "UpdateAWSAccount" request + And body with value {"account_id": "{{ timestamp("now") }}00", "account_specific_namespace_rules": {"auto_scaling": false}, "cspm_resource_collection_enabled": false, "excluded_regions": ["us-east-1", "us-west-2"], "extended_resource_collection_enabled": true, "filter_tags": ["$KEY:$VALUE"], "host_tags": ["$KEY:$VALUE"], "metrics_collection_enabled": true, "role_name": "DatadogAWSIntegrationRole"} + And request contains "account_id" parameter with value "{{ timestamp("now") }}00" + And request contains "role_name" parameter with value "DatadogAWSIntegrationRole" + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v1/azure_integration.feature b/test-runner-data/features/v1/azure_integration.feature new file mode 100644 index 0000000000..6ba40e91e5 --- /dev/null +++ b/test-runner-data/features/v1/azure_integration.feature @@ -0,0 +1,80 @@ +@endpoint(azure-integration) @endpoint(azure-integration-v1) +Feature: Azure Integration + Configure your Datadog-Azure integration directly through the Datadog API. + For more information, see the [Datadog-Azure integration + page](https://docs.datadoghq.com/integrations/azure). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "AzureIntegration" API + + @generated @skip @team:DataDog/azure-integrations + Scenario: Create an Azure integration returns "Bad Request" response + Given new "CreateAzureIntegration" request + And body with value {"app_service_plan_filters": "key:value,filter:example", "automute": true, "client_id": "testc7f6-1234-5678-9101-3fcbf464test", "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", "container_app_filters": "key:value,filter:example", "cspm_enabled": true, "custom_metrics_enabled": true, "errors": ["*"], "host_filters": "key:value,filter:example", "metrics_enabled": true, "metrics_enabled_default": true, "new_client_id": "new1c7f6-1234-5678-9101-3fcbf464test", "new_tenant_name": "new1c44-1234-5678-9101-cc00736ftest", "resource_collection_enabled": true, "resource_provider_configs": [{"metrics_enabled": true, "namespace": "Microsoft.Compute"}], "secretless_auth_enabled": true, "tenant_name": "testc44-1234-5678-9101-cc00736ftest", "usage_metrics_enabled": true} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/azure-integrations + Scenario: Create an Azure integration returns "OK" response + Given new "CreateAzureIntegration" request + And body with value {"app_service_plan_filters": "key:value,filter:example", "automute": true, "client_id": "{{ uuid }}", "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", "container_app_filters": "key:value,filter:example", "cspm_enabled": true, "custom_metrics_enabled": true, "errors": ["*"], "host_filters": "key:value,filter:example", "new_client_id": "{{ uuid }}", "new_tenant_name": "{{ uuid }}", "resource_collection_enabled": true, "tenant_name": "{{ uuid }}"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/azure-integrations + Scenario: Delete an Azure integration returns "Bad Request" response + Given new "DeleteAzureIntegration" request + And body with value {"app_service_plan_filters": "key:value,filter:example", "automute": true, "client_id": "testc7f6-1234-5678-9101-3fcbf464test", "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", "container_app_filters": "key:value,filter:example", "cspm_enabled": true, "custom_metrics_enabled": true, "errors": ["*"], "host_filters": "key:value,filter:example", "metrics_enabled": true, "metrics_enabled_default": true, "new_client_id": "new1c7f6-1234-5678-9101-3fcbf464test", "new_tenant_name": "new1c44-1234-5678-9101-cc00736ftest", "resource_collection_enabled": true, "resource_provider_configs": [{"metrics_enabled": true, "namespace": "Microsoft.Compute"}], "secretless_auth_enabled": true, "tenant_name": "testc44-1234-5678-9101-cc00736ftest", "usage_metrics_enabled": true} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/azure-integrations + Scenario: Delete an Azure integration returns "OK" response + Given there is a valid "azure_account" in the system + And new "DeleteAzureIntegration" request + And body with value {"client_id": "{{ uuid }}", "tenant_name": "{{ uuid }}"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/azure-integrations + Scenario: List all Azure integrations returns "Bad Request" response + Given new "ListAzureIntegration" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/azure-integrations + Scenario: List all Azure integrations returns "OK" response + Given new "ListAzureIntegration" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/azure-integrations + Scenario: Update Azure integration host filters returns "Bad Request" response + Given new "UpdateAzureHostFilters" request + And body with value {"app_service_plan_filters": "key:value,filter:example", "automute": true, "client_id": "testc7f6-1234-5678-9101-3fcbf464test", "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", "container_app_filters": "key:value,filter:example", "cspm_enabled": true, "custom_metrics_enabled": true, "errors": ["*"], "host_filters": "key:value,filter:example", "metrics_enabled": true, "metrics_enabled_default": true, "new_client_id": "new1c7f6-1234-5678-9101-3fcbf464test", "new_tenant_name": "new1c44-1234-5678-9101-cc00736ftest", "resource_collection_enabled": true, "resource_provider_configs": [{"metrics_enabled": true, "namespace": "Microsoft.Compute"}], "secretless_auth_enabled": true, "tenant_name": "testc44-1234-5678-9101-cc00736ftest", "usage_metrics_enabled": true} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/azure-integrations + Scenario: Update Azure integration host filters returns "OK" response + Given new "UpdateAzureHostFilters" request + And body with value {"app_service_plan_filters": "key:value,filter:example", "automute": true, "client_id": "testc7f6-1234-5678-9101-3fcbf464test", "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", "container_app_filters": "key:value,filter:example", "cspm_enabled": true, "custom_metrics_enabled": true, "errors": ["*"], "host_filters": "key:value,filter:example", "metrics_enabled": true, "metrics_enabled_default": true, "new_client_id": "new1c7f6-1234-5678-9101-3fcbf464test", "new_tenant_name": "new1c44-1234-5678-9101-cc00736ftest", "resource_collection_enabled": true, "resource_provider_configs": [{"metrics_enabled": true, "namespace": "Microsoft.Compute"}], "secretless_auth_enabled": true, "tenant_name": "testc44-1234-5678-9101-cc00736ftest", "usage_metrics_enabled": true} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/azure-integrations + Scenario: Update an Azure integration returns "Bad Request" response + Given new "UpdateAzureIntegration" request + And body with value {"app_service_plan_filters": "key:value,filter:example", "automute": true, "client_id": "testc7f6-1234-5678-9101-3fcbf464test", "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", "container_app_filters": "key:value,filter:example", "cspm_enabled": true, "custom_metrics_enabled": true, "errors": ["*"], "host_filters": "key:value,filter:example", "metrics_enabled": true, "metrics_enabled_default": true, "new_client_id": "new1c7f6-1234-5678-9101-3fcbf464test", "new_tenant_name": "new1c44-1234-5678-9101-cc00736ftest", "resource_collection_enabled": true, "resource_provider_configs": [{"metrics_enabled": true, "namespace": "Microsoft.Compute"}], "secretless_auth_enabled": true, "tenant_name": "testc44-1234-5678-9101-cc00736ftest", "usage_metrics_enabled": true} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/azure-integrations + Scenario: Update an Azure integration returns "OK" response + Given there is a valid "azure_account" in the system + And new "UpdateAzureIntegration" request + And body with value {"app_service_plan_filters": "key:value,filter:example", "automute": true, "client_id": "{{ uuid }}", "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", "container_app_filters": "key:value,filter:example", "cspm_enabled": true, "custom_metrics_enabled": true, "errors": ["*"], "host_filters": "key:value,filter:example", "new_client_id": "{{ uuid }}", "new_tenant_name": "{{ uuid }}", "resource_collection_enabled": true, "secretless_auth_enabled": true, "tenant_name": "{{ uuid }}"} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v1/dashboard_lists.feature b/test-runner-data/features/v1/dashboard_lists.feature new file mode 100644 index 0000000000..2077d45039 --- /dev/null +++ b/test-runner-data/features/v1/dashboard_lists.feature @@ -0,0 +1,91 @@ +@endpoint(dashboard-lists) @endpoint(dashboard-lists-v1) +Feature: Dashboard Lists + Interact with your dashboard lists through the API to organize, find, and + share all of your dashboards with your team and organization. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "DashboardLists" API + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Create a dashboard list returns "Bad Request" response + Given new "CreateDashboardList" request + And body with value {"name": "My Dashboard"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dashboards-backend + Scenario: Create a dashboard list returns "OK" response + Given new "CreateDashboardList" request + And body with value {"name": "{{ unique }}"} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + + @team:DataDog/dashboards-backend + Scenario: Delete a dashboard list returns "Not Found" response + Given new "DeleteDashboardList" request + And request contains "list_id" parameter with value 0 + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/dashboards-backend + Scenario: Delete a dashboard list returns "OK" response + Given there is a valid "dashboard_list" in the system + And new "DeleteDashboardList" request + And request contains "list_id" parameter from "dashboard_list.id" + When the request is sent + Then the response status is 200 OK + And the response "deleted_dashboard_list_id" has the same value as "dashboard_list.id" + + @team:DataDog/dashboards-backend + Scenario: Get a dashboard list returns "Not Found" response + Given new "GetDashboardList" request + And request contains "list_id" parameter with value 0 + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/dashboards-backend + Scenario: Get a dashboard list returns "OK" response + Given there is a valid "dashboard_list" in the system + And new "GetDashboardList" request + And request contains "list_id" parameter from "dashboard_list.id" + When the request is sent + Then the response status is 200 OK + And the response "id" has the same value as "dashboard_list.id" + And the response "name" has the same value as "dashboard_list.name" + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get all dashboard lists returns "OK" response + Given there is a valid "dashboard_list" in the system + And new "ListDashboardLists" request + When the request is sent + Then the response status is 200 OK + And the response "dashboard_lists[0].name" has the same value as "dashboard_list.name" + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Update a dashboard list returns "Bad Request" response + Given new "UpdateDashboardList" request + And request contains "list_id" parameter from "REPLACE.ME" + And body with value {"name": "My Dashboard"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dashboards-backend + Scenario: Update a dashboard list returns "Not Found" response + Given new "UpdateDashboardList" request + And request contains "list_id" parameter with value 0 + And body with value {"name": "Not found"} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/dashboards-backend + Scenario: Update a dashboard list returns "OK" response + Given there is a valid "dashboard_list" in the system + And new "UpdateDashboardList" request + And request contains "list_id" parameter from "dashboard_list.id" + And body with value {"name": "updated {{unique}}"} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "updated {{ unique }}" diff --git a/test-runner-data/features/v1/dashboards.feature b/test-runner-data/features/v1/dashboards.feature new file mode 100644 index 0000000000..afe8356d4c --- /dev/null +++ b/test-runner-data/features/v1/dashboards.feature @@ -0,0 +1,1585 @@ +@endpoint(dashboards) @endpoint(dashboards-v1) +Feature: Dashboards + Manage all your dashboards, as well as access to your shared dashboards, + through the API. See the [Dashboards + page](https://docs.datadoghq.com/dashboards/) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Dashboards" API + + @replay-only @team:DataDog/dashboards-backend + Scenario: Clients deserialize a dashboard with a empty time object + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [ { "definition": { "title": "Example Cloud Cost Query", "title_size": "16", "title_align": "left", "type": "timeseries", "requests": [ { "formulas": [ { "formula": "query1" } ], "queries": [ { "data_source": "cloud_cost", "name": "query1", "query": "sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)" } ], "response_format": "timeseries", "style": { "palette": "dog_classic", "line_type": "solid", "line_width": "normal" }, "display_type": "bars" } ], "time": {} } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.time" is equal to {} + + @team:DataDog/dashboards-backend + Scenario: Create a distribution widget using a histogram request containing a formulas and functions APM Stats query + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "description": "", "widgets": [ { "definition": { "title": "APM Stats - Request latency HOP", "title_size": "16", "title_align": "left", "show_legend": false, "type": "distribution", "xaxis": { "max": "auto", "include_zero": true, "scale": "linear", "min": "auto" }, "yaxis": { "max": "auto", "include_zero": true, "scale": "linear", "min": "auto" }, "requests": [ { "query": { "primary_tag_value": "*", "stat": "latency_distribution", "data_source": "apm_resource_stats", "name": "query1", "service": "azure-bill-import", "group_by": [ "resource_name" ], "env": "staging", "primary_tag_name": "datacenter", "operation_name": "universal.http.client" }, "request_type": "histogram", "style": { "palette": "dog_classic" } } ] }, "layout": { "x": 8, "y": 0, "width": 4, "height": 2 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].request_type" is equal to "histogram" + And the response "widgets[0].definition.requests[0].style" is equal to { "palette": "dog_classic" } + And the response "widgets[0].definition.requests[0].query.primary_tag_value" is equal to "*" + And the response "widgets[0].definition.requests[0].query.stat" is equal to "latency_distribution" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "apm_resource_stats" + And the response "widgets[0].definition.requests[0].query.name" is equal to "query1" + And the response "widgets[0].definition.requests[0].query.service" is equal to "azure-bill-import" + And the response "widgets[0].definition.requests[0].query.group_by" is equal to ["resource_name"] + And the response "widgets[0].definition.requests[0].query.env" is equal to "staging" + And the response "widgets[0].definition.requests[0].query.primary_tag_name" is equal to "datacenter" + And the response "widgets[0].definition.requests[0].query.operation_name" is equal to "universal.http.client" + + @team:DataDog/dashboards-backend + Scenario: Create a distribution widget using a histogram request containing a formulas and functions events query + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "description": "{{ unique }}", "widgets": [ { "definition": { "title": "Events Platform - Request latency HOP", "title_size": "16", "title_align": "left", "show_legend": false, "type": "distribution", "xaxis": { "max": "auto", "include_zero": true, "scale": "linear", "min": "auto" }, "yaxis": { "max": "auto", "include_zero": true, "scale": "linear", "min": "auto" }, "requests": [ { "query": { "search": { "query": "" }, "data_source": "events", "compute": { "metric": "@duration", "aggregation": "min" }, "name": "query1", "indexes": [ "*" ] }, "request_type": "histogram" } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 2 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].request_type" is equal to "histogram" + And the response "widgets[0].definition.requests[0].query.search.query" is equal to "" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "events" + And the response "widgets[0].definition.requests[0].query.compute.metric" is equal to "@duration" + And the response "widgets[0].definition.requests[0].query.compute.aggregation" is equal to "min" + And the response "widgets[0].definition.requests[0].query.name" is equal to "query1" + And the response "widgets[0].definition.requests[0].query.indexes" is equal to ["*"] + + @team:DataDog/dashboards-backend + Scenario: Create a distribution widget using a histogram request containing a formulas and functions metrics query + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }}","widgets":[{"definition":{"title":"Metrics HOP","title_size":"16","title_align":"left","show_legend":false,"type":"distribution","custom_links":[{"label":"Example","link":"https://example.org/"}],"xaxis":{"max":"auto","include_zero":true,"scale":"linear","min":"auto"},"yaxis":{"max":"auto","include_zero":true,"scale":"linear","min":"auto"},"requests":[{"query":{"query":"histogram:trace.Load{*}","data_source":"metrics","name":"query1"},"request_type":"histogram","style":{"palette":"dog_classic"}}]},"layout":{"x":0,"y":0,"width":4,"height":2}}],"layout_type":"ordered"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].request_type" is equal to "histogram" + And the response "widgets[0].definition.requests[0].style" is equal to { "palette": "dog_classic" } + And the response "widgets[0].definition.requests[0].query.query" is equal to "histogram:trace.Load{*}" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "metrics" + And the response "widgets[0].definition.requests[0].query.name" is equal to "query1" + And the response "widgets[0].definition.custom_links" has item with field "label" with value "Example" + + @team:DataDog/dashboards-backend + Scenario: Create a geomap widget using an event_list request + Given new "CreateDashboard" request + And body with value {"title": "{{ unique }}","description": "{{ unique }}","widgets":[{"definition":{"title":"","title_size":"16","title_align":"left","type":"geomap","requests":[{"response_format":"event_list","query":{"data_source":"logs_stream","query_string":"","indexes":[]},"columns":[{"field":"@network.client.geoip.location.latitude","width":"auto"},{"field":"@network.client.geoip.location.longitude","width":"auto"},{"field":"@network.client.geoip.country.iso_code","width":"auto"},{"field":"@network.client.geoip.subdivision.name","width":"auto"},{"field":"classic","width":"auto"},{"field":"","width":"auto"}]}],"style":{"palette":"hostmap_blues","palette_flip":false},"view":{"focus":"WORLD"}},"layout":{"x":0,"y":0,"width":12,"height":6}}],"template_variables":[],"layout_type":"ordered","notify_list":[],"reflow_type":"fixed","tags":[]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "event_list" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "logs_stream" + + @team:DataDog/dashboards-backend + Scenario: Create a geomap widget with conditional formats and text formats + Given new "CreateDashboard" request + And body with value {"title": "{{ unique }}","description": "{{ unique }}","widgets":[{"definition":{"title":"Log Count by Service and Source","type":"geomap","requests":[{"response_format":"scalar","queries":[{"data_source":"rum","name":"query1","search":{"query":"@type:session"},"indexes":["*"],"compute":{"aggregation":"count"}}],"conditional_formats":[{"comparator":">","value":1000,"palette":"white_on_green"}],"formulas":[{"formula":"query1"}],"sort":{"count":250,"order_by":[{"type":"formula","index":0,"order":"desc"}]}},{"response_format":"event_list","query":{"data_source":"logs_stream","query_string":"","indexes":[],"storage":"hot"},"columns":[{"field":"@network.client.geoip.location.latitude","width":"auto"},{"field":"@network.client.geoip.location.longitude","width":"auto"},{"field":"@network.client.geoip.country.iso_code","width":"auto"},{"field":"@network.client.geoip.subdivision.name","width":"auto"}],"style":{"color_by":"status"},"text_formats":[{"match":{"type":"is","value":"error"},"palette":"white_on_red"}]}],"style":{"palette":"hostmap_blues","palette_flip":false},"view":{"focus":"NORTH_AMERICA"}},"layout":{"x":0,"y":0,"width":12,"height":6}}],"template_variables":[],"layout_type":"ordered","notify_list":[],"reflow_type":"fixed","tags":[]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "geomap" + And the response "widgets[0].definition.title" is equal to "Log Count by Service and Source" + And the response "widgets[0].definition.requests[0].conditional_formats[0].comparator" is equal to ">" + And the response "widgets[0].definition.requests[0].conditional_formats[0].palette" is equal to "white_on_green" + And the response "widgets[0].definition.requests[0].conditional_formats[0].value" is equal to 1000 + And the response "widgets[0].definition.requests[1].text_formats[0].match.type" is equal to "is" + And the response "widgets[0].definition.requests[1].text_formats[0].match.value" is equal to "error" + And the response "widgets[0].definition.requests[1].text_formats[0].palette" is equal to "white_on_red" + And the response "widgets[0].definition.view.focus" is equal to "NORTH_AMERICA" + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Create a new dashboard returns "Bad Request" response + Given new "CreateDashboard" request + And body with value {"default_timeframe": {"type": "live", "unit": "minute", "value": 4}, "description": null, "is_read_only": false, "layout_type": "ordered", "notify_list": [], "reflow_type": "auto", "restricted_roles": [], "tabs": [{"id": "", "name": "L", "widget_ids": [0]}], "tags": [], "template_variable_presets": [{"template_variables": [{"values": []}]}], "template_variables": [{"available_values": ["my-host", "host1", "host2"], "default": "my-host", "defaults": ["my-host-1", "my-host-2"], "name": "host1", "prefix": "host", "type": "group"}], "title": "", "widgets": [{"definition": {"requests": {"fill": {"q": "avg:system.cpu.user{*}"}}, "type": "hostmap"}}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard returns "OK" response + Given new "CreateDashboard" request + And body from file "dashboard_payload.json" + When the request is sent + Then the response status is 200 OK + And the response "title" is equal to "{{ unique }} with Profile Metrics Query" + And the response "widgets[0].definition.requests[0].profile_metrics_query.search.query" is equal to "runtime:jvm" + And the response "widgets[0].definition.requests[0].profile_metrics_query.compute.facet" is equal to "@prof_core_cpu_cores" + And the response "widgets[0].definition.requests[0].profile_metrics_query.compute.aggregation" is equal to "sum" + + @skip-terraform-config @skip-typescript @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a bar_chart widget with stacked type and no legend specified + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }}","description":"","widgets":[{"layout":{"x":0,"y":0,"width":47,"height":15},"definition":{"title":"","title_size":"16","title_align":"left","time":{},"style":{"display": {"type": "stacked"},"scaling": "relative","palette": "dog_classic"},"type":"bar_chart","requests":[{"queries":[{"data_source":"metrics","name":"query1","query":"avg:system.cpu.user{*} by {service}","aggregator":"avg"}],"formulas":[{"formula":"query1"}],"sort":{"count":10,"order_by":[{"type":"group","name":"service","order":"asc"}]},"response_format":"scalar"}]}}],"template_variables":[],"layout_type":"free","notify_list":[]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "bar_chart" + And the response "widgets[0].definition.requests[0].sort.order_by[0].order" is equal to "asc" + And the response "widgets[0].definition.requests[0].sort.order_by[0].type" is equal to "group" + And the response "widgets[0].definition.requests[0].sort.order_by[0].name" is equal to "service" + And the response "widgets[0].definition.style.display.type" is equal to "stacked" + And the response "widgets[0].definition.style.display" does not have field "legend" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a change widget using formulas and functions slo query + Given there is a valid "slo" in the system + And new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [ { "definition": {"title": "", "title_size": "16", "title_align": "left", "time": {}, "type": "change", "requests": [ {"formulas": [ { "formula": "hour_before(query1)" }, { "formula": "query1" } ], "queries": [ {"name": "query1", "data_source": "slo", "slo_id": "{{ slo.data[0].id }}", "measure": "slo_status", "group_mode": "overall", "slo_query_type": "metric", "additional_query_filters": "*" } ], "response_format": "scalar", "order_by": "change", "change_type": "absolute", "increase_good": true, "order_dir": "asc" } ] }, "layout": { "x":0, "y": 0, "width": 4, "height": 2 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].increase_good" is equal to true + And the response "widgets[0].definition.requests[0].order_by" is equal to "change" + And the response "widgets[0].definition.requests[0].change_type" is equal to "absolute" + And the response "widgets[0].definition.requests[0].order_dir" is equal to "asc" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "slo" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].group_mode" is equal to "overall" + And the response "widgets[0].definition.requests[0].queries[0].measure" is equal to "slo_status" + And the response "widgets[0].definition.requests[0].queries[0].slo_query_type" is equal to "metric" + And the response "widgets[0].definition.requests[0].queries[0].slo_id" has the same value as "slo.data[0].id" + And the response "widgets[0].definition.requests[0].queries[0].additional_query_filters" is equal to "*" + And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "hour_before(query1)" + And the response "widgets[0].definition.requests[0].formulas[1].formula" is equal to "query1" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a formulas and functions change widget + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [ { "definition": { "title": "", "title_size": "16", "title_align": "left", "time": {}, "type": "change", "requests": [ { "formulas": [ { "formula": "hour_before(query1)" }, { "formula": "query1" } ], "queries": [ { "data_source": "logs", "name": "query1", "search": { "query": "" }, "indexes": [ "*" ], "compute": { "aggregation": "count" } } ], "response_format": "scalar", "compare_to": "hour_before", "increase_good": true, "order_by": "change", "change_type": "absolute", "order_dir": "desc" } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].compare_to" is equal to "hour_before" + And the response "widgets[0].definition.requests[0].increase_good" is equal to true + And the response "widgets[0].definition.requests[0].order_by" is equal to "change" + And the response "widgets[0].definition.requests[0].change_type" is equal to "absolute" + And the response "widgets[0].definition.requests[0].order_dir" is equal to "desc" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "logs" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].compute.aggregation" is equal to "count" + And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "hour_before(query1)" + And the response "widgets[0].definition.requests[0].formulas[1].formula" is equal to "query1" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a formulas and functions treemap widget + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [ { "definition": { "title": "", "type": "treemap", "requests": [ { "formulas": [ { "formula": "hour_before(query1)" }, { "formula": "query1" } ], "queries": [ { "data_source": "logs", "name": "query1", "search": { "query": "" }, "indexes": [ "*" ], "compute": { "aggregation": "count" } } ], "response_format": "scalar" } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "logs" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].compute.aggregation" is equal to "count" + And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "hour_before(query1)" + And the response "widgets[0].definition.requests[0].formulas[1].formula" is equal to "query1" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a live default_timeframe returns "OK" response + Given new "CreateDashboard" request + And body with value {"title": "{{ unique }}", "layout_type": "ordered", "widgets": [{"definition": {"type": "note", "content": "test", "background_color": "white", "font_size": "14", "text_align": "left", "show_tick": false, "tick_pos": "50%", "tick_edge": "left"}}], "default_timeframe": {"type": "live", "unit": "hour", "value": 4}} + When the request is sent + Then the response status is 200 OK + And the response "default_timeframe.type" is equal to "live" + And the response "default_timeframe.unit" is equal to "hour" + And the response "default_timeframe.value" is equal to 4 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a query value widget using the percentile aggregator + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with QVW Percentile Aggregator", "widgets": [{"definition":{"title_size":"16","title":"","title_align":"left","precision":2,"time":{},"autoscale":true,"requests":[{"formulas":[{"formula":"query1"}],"response_format":"scalar","queries":[{"query":"p90:dist.dd.dogweb.latency{*}","data_source":"metrics","name":"query1","aggregator":"percentile"}]}],"type":"query_value"},"layout":{"y":0,"x":0,"height":2,"width":2}}]} + When the request is sent + Then the response status is 200 OK + And the response "title" is equal to "{{ unique }} with QVW Percentile Aggregator" + And the response "widgets[0].definition.title_size" is equal to "16" + And the response "widgets[0].definition.title_align" is equal to "left" + And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "query1" + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a query value widget using timeseries background + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with QVW Timeseries Background", "widgets": [{"definition":{"title_size":"16","title":"","title_align":"left","precision":2,"time":{},"autoscale":true,"requests":[{"formulas":[{"formula":"query1"}],"response_format":"scalar","queries":[{"query":"sum:my.cool.count.metric{*}","data_source":"metrics","name":"query1","aggregator":"percentile"}]}],"type":"query_value","timeseries_background":{"type":"area","yaxis":{"include_zero":true}}},"layout":{"y":0,"x":0,"height":2,"width":2}}]} + When the request is sent + Then the response status is 200 OK + And the response "title" is equal to "{{ unique }} with QVW Timeseries Background" + And the response "widgets[0].definition.title_size" is equal to "16" + And the response "widgets[0].definition.title_align" is equal to "left" + And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "query1" + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].queries[0].query" is equal to "sum:my.cool.count.metric{*}" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a query_value widget containing a description + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/query_value_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "query_value" + And the response "widgets[0].definition.description" is equal to "Example widget description" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a timeseries widget and an overlay request + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }}", "widgets": [{"definition": {"type": "timeseries", "requests": [{"on_right_yaxis": false, "queries": [{"data_source": "metrics", "name": "mymetric", "query": "avg:system.cpu.user{*}"}], "response_format": "timeseries", "display_type": "line"}, {"response_format": "timeseries", "queries": [{"data_source": "metrics", "name": "mymetricoverlay", "query": "avg:system.cpu.user{*}"}], "style": {"palette": "purple", "line_type": "solid", "line_width": "normal"}, "display_type": "overlay"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "timeseries" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "metrics" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "mymetric" + And the response "widgets[0].definition.requests[0].queries[0].query" is equal to "avg:system.cpu.user{*}" + And the response "widgets[0].definition.requests[1].display_type" is equal to "overlay" + And the response "widgets[0].definition.requests[1].queries[0].query" is equal to "avg:system.cpu.user{*}" + And the response "widgets[0].definition.requests[1].queries[0].name" is equal to "mymetricoverlay" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a timeseries widget using formulas and functions cloud cost query + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [ { "definition": { "title": "Example Cloud Cost Query", "title_size": "16", "title_align": "left", "type": "timeseries", "requests": [ { "formulas": [ { "formula": "query1" } ], "queries": [ { "data_source": "cloud_cost", "name": "query1", "query": "sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)" } ], "response_format": "timeseries", "style": { "palette": "dog_classic", "line_type": "solid", "line_width": "normal" }, "display_type": "bars" } ], "time": { "live_span": "week_to_date" } } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "timeseries" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "cloud_cost" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].query" is equal to "sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)" + And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "query1" + And the response "widgets[0].definition.time.live_span" is equal to "week_to_date" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a timeseries widget using formulas and functions metrics query with combined semantic_mode + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with combined semantic_mode", "widgets": [{"definition": {"type": "timeseries", "requests": [{"queries": [{"data_source": "metrics", "name": "query1", "query": "avg:system.cpu.user{*}", "semantic_mode": "combined"}], "response_format": "timeseries", "formulas": [{"formula": "query1"}], "display_type": "line"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "timeseries" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "metrics" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].query" is equal to "avg:system.cpu.user{*}" + And the response "widgets[0].definition.requests[0].queries[0].semantic_mode" is equal to "combined" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a timeseries widget using formulas and functions metrics query with native semantic_mode + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with native semantic_mode", "widgets": [{"definition": {"type": "timeseries", "requests": [{"queries": [{"data_source": "metrics", "name": "query1", "query": "avg:system.cpu.user{*}", "semantic_mode": "native"}], "response_format": "timeseries", "formulas": [{"formula": "query1"}], "display_type": "line"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "timeseries" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "metrics" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].query" is equal to "avg:system.cpu.user{*}" + And the response "widgets[0].definition.requests[0].queries[0].semantic_mode" is equal to "native" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a toplist widget sorted by group + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }}","description":"","widgets":[{"layout":{"x":0,"y":0,"width":47,"height":15},"definition":{"title":"","title_size":"16","title_align":"left","time":{},"style":{"display": {"type": "stacked","legend": "inline"},"scaling": "relative","palette": "dog_classic"},"type":"toplist","requests":[{"queries":[{"data_source":"metrics","name":"query1","query":"avg:system.cpu.user{*} by {service}","aggregator":"avg"}],"formulas":[{"formula":"query1"}],"sort":{"count":10,"order_by":[{"type":"group","name":"service","order":"asc"}]},"response_format":"scalar"}]}}],"template_variables":[],"layout_type":"free","notify_list":[]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "toplist" + And the response "widgets[0].definition.requests[0].sort.order_by[0].order" is equal to "asc" + And the response "widgets[0].definition.requests[0].sort.order_by[0].type" is equal to "group" + And the response "widgets[0].definition.requests[0].sort.order_by[0].name" is equal to "service" + + @skip-terraform-config @skip-typescript @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with a toplist widget with stacked type and no legend specified + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }}","description":"","widgets":[{"layout":{"x":0,"y":0,"width":47,"height":15},"definition":{"title":"","title_size":"16","title_align":"left","time":{},"style":{"display": {"type": "stacked"},"scaling": "relative","palette": "dog_classic"},"type":"toplist","requests":[{"queries":[{"data_source":"metrics","name":"query1","query":"avg:system.cpu.user{*} by {service}","aggregator":"avg"}],"formulas":[{"formula":"query1"}],"sort":{"count":10,"order_by":[{"type":"group","name":"service","order":"asc"}]},"response_format":"scalar"}]}}],"template_variables":[],"layout_type":"free","notify_list":[]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "toplist" + And the response "widgets[0].definition.requests[0].sort.order_by[0].order" is equal to "asc" + And the response "widgets[0].definition.requests[0].sort.order_by[0].type" is equal to "group" + And the response "widgets[0].definition.requests[0].sort.order_by[0].name" is equal to "service" + And the response "widgets[0].definition.style.display.type" is equal to "stacked" + And the response "widgets[0].definition.style.display" does not have field "legend" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with alert_graph widget + Given there is a valid "monitor" in the system + And new "CreateDashboard" request + And body from file "dashboards_json_payload/alert_graph_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "alert_graph" + And the response "widgets[0].definition.viz_type" is equal to "timeseries" + And the response "widgets[0].definition.alert_id" is equal to "{{ monitor.id }}" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with alert_value widget + Given there is a valid "monitor" in the system + And new "CreateDashboard" request + And body from file "dashboards_json_payload/alert_value_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "alert_value" + And the response "widgets[0].definition.alert_id" is equal to "{{ monitor.id }}" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with an audit logs query + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with Audit Logs Query", "widgets": [{"definition": {"type": "timeseries","requests": [{"response_format": "timeseries","queries": [{"search": {"query": ""},"data_source": "audit","compute": {"aggregation": "count"},"name": "query1","indexes": ["*"]}]}]},"layout": {"x": 2,"y": 0,"width": 4,"height": 2}}]} + When the request is sent + Then the response status is 200 OK + And the response "title" is equal to "{{ unique }} with Audit Logs Query" + And the response "widgets[0].definition.type" is equal to "timeseries" + And the response "widgets[0].definition.requests[0].response_format" is equal to "timeseries" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "audit" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with apm dependency stats widget + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [{"definition": { "title": "", "title_size": "16", "title_align": "left", "type": "query_table", "requests": [ { "response_format": "scalar", "queries": [ { "primary_tag_value": "edge-eu1.prod.dog", "stat": "avg_duration", "resource_name": "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?", "name": "query1", "service": "cassandra", "data_source": "apm_dependency_stats", "env": "ci", "primary_tag_name": "datacenter", "operation_name": "cassandra.query" } ] } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].queries[0].primary_tag_value" is equal to "edge-eu1.prod.dog" + And the response "widgets[0].definition.requests[0].queries[0].stat" is equal to "avg_duration" + And the response "widgets[0].definition.requests[0].queries[0].resource_name" is equal to "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].service" is equal to "cassandra" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "apm_dependency_stats" + And the response "widgets[0].definition.requests[0].queries[0].env" is equal to "ci" + And the response "widgets[0].definition.requests[0].queries[0].primary_tag_name" is equal to "datacenter" + And the response "widgets[0].definition.requests[0].queries[0].operation_name" is equal to "cassandra.query" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with apm metrics widget + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [{"definition": { "title": "", "title_size": "16", "title_align": "left", "type": "query_table", "requests": [ { "response_format": "scalar", "queries": [ { "stat": "hits", "name": "query1", "service": "web-store", "data_source": "apm_metrics", "query_filter": "env:prod", "group_by": ["resource_name"] } ] } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].queries[0].stat" is equal to "hits" + And the response "widgets[0].definition.requests[0].queries[0].group_by[0]" is equal to "resource_name" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].service" is equal to "web-store" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "apm_metrics" + And the response "widgets[0].definition.requests[0].queries[0].query_filter" is equal to "env:prod" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with apm resource stats widget + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [{"definition": { "title": "", "title_size": "16", "title_align": "left", "type": "query_table", "requests": [ { "response_format": "scalar", "queries": [ { "primary_tag_value": "edge-eu1.prod.dog", "stat": "hits", "name": "query1", "service": "cassandra", "data_source": "apm_resource_stats", "env": "ci", "primary_tag_name": "datacenter", "operation_name": "cassandra.query", "group_by": ["resource_name"] } ] } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].queries[0].primary_tag_value" is equal to "edge-eu1.prod.dog" + And the response "widgets[0].definition.requests[0].queries[0].stat" is equal to "hits" + And the response "widgets[0].definition.requests[0].queries[0].group_by[0]" is equal to "resource_name" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].service" is equal to "cassandra" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "apm_resource_stats" + And the response "widgets[0].definition.requests[0].queries[0].env" is equal to "ci" + And the response "widgets[0].definition.requests[0].queries[0].primary_tag_name" is equal to "datacenter" + And the response "widgets[0].definition.requests[0].queries[0].operation_name" is equal to "cassandra.query" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with apm_issue_stream list_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"apm_issue_stream","query_string":""},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "title" is equal to "{{ unique }} with list_stream widget" + And the response "widgets[0].definition.type" is equal to "list_stream" + And the response "widgets[0].definition.requests[0].columns[0].width" is equal to "auto" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "apm_issue_stream" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with bar_chart widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/bar_chart_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "bar_chart" + And the response "widgets[0].definition.requests[0].sort.order_by[0].order" is equal to "desc" + And the response "widgets[0].definition.requests[0].sort.order_by[0].type" is equal to "formula" + And the response "widgets[0].definition.requests[0].sort.order_by[0].index" is equal to 0 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with bar_chart widget sorted by group + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }}","description":"","widgets":[{"layout":{"x":0,"y":0,"width":47,"height":15},"definition":{"title":"","title_size":"16","title_align":"left","time":{},"style":{"display": {"type": "stacked","legend": "inline"},"scaling": "relative","palette": "dog_classic"},"type":"bar_chart","requests":[{"queries":[{"data_source":"metrics","name":"query1","query":"avg:system.cpu.user{*} by {service}","aggregator":"avg"}],"formulas":[{"formula":"query1"}],"sort":{"count":10,"order_by":[{"type":"group","name":"service","order":"asc"}]},"response_format":"scalar"}]}}],"template_variables":[],"layout_type":"free","notify_list":[]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "bar_chart" + And the response "widgets[0].definition.requests[0].sort.order_by[0].order" is equal to "asc" + And the response "widgets[0].definition.requests[0].sort.order_by[0].type" is equal to "group" + And the response "widgets[0].definition.requests[0].sort.order_by[0].name" is equal to "service" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with check_status widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/check_status_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "check_status" + And the response "widgets[0].definition.check" is equal to "datadog.agent.up" + And the response "widgets[0].definition.grouping" is equal to "check" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with ci_test_stream list_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"ci_test_stream","query_string":"test_level:suite"},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "list_stream" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "ci_test_stream" + And the response "widgets[0].definition.requests[0].query.query_string" is equal to "test_level:suite" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with distribution widget and apm stats data + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [{"definition": { "title": "", "title_size": "16", "title_align": "left", "type": "distribution", "requests": [{ "apm_stats_query": { "env": "prod", "service": "cassandra", "name": "cassandra.query", "primary_tag": "datacenter:dc1", "row_type": "service" }}] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].apm_stats_query.primary_tag" is equal to "datacenter:dc1" + And the response "widgets[0].definition.requests[0].apm_stats_query.row_type" is equal to "service" + And the response "widgets[0].definition.requests[0].apm_stats_query.env" is equal to "prod" + And the response "widgets[0].definition.requests[0].apm_stats_query.service" is equal to "cassandra" + And the response "widgets[0].definition.requests[0].apm_stats_query.name" is equal to "cassandra.query" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with distribution widget with markers and num_buckets + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [{"definition": { "title": "", "title_size": "16", "title_align": "left", "type": "distribution", "xaxis": { "scale": "linear", "min": "auto", "max": "auto", "include_zero": true, "num_buckets": 55 }, "yaxis": { "scale": "linear", "min": "auto", "max": "auto", "include_zero": true }, "markers": [{ "display_type": "percentile", "value": "50" }, { "display_type": "percentile", "value": "99" }, { "display_type": "percentile", "value": "90" }], "requests": [{ "response_format": "scalar", "queries": [{ "data_source": "metrics", "name": "query1", "query": "avg:system.cpu.user{*} by {service}", "aggregator": "avg" }] }] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.xaxis.num_buckets" is equal to 55 + And the response "widgets[0].definition.markers" is equal to [{"display_type": "percentile", "value": "50"}, {"display_type": "percentile", "value": "99"}, {"display_type": "percentile", "value": "90"}] + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with event_stream list_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered","title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns": [{"width": "auto","field": "timestamp"}],"query": {"data_source": "event_stream","query_string": "","event_size": "l"},"response_format": "event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "list_stream" + And the response "widgets[0].definition.requests[0].response_format" is equal to "event_list" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "event_stream" + And the response "widgets[0].definition.requests[0].query.event_size" is equal to "l" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with event_stream widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/event_stream_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "event_stream" + And the response "widgets[0].definition.query" is equal to "example-query" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with event_timeline widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/event_timeline_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "event_timeline" + And the response "widgets[0].definition.query" is equal to "status:error priority:all" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with formula and function distribution widget + Given new "CreateDashboard" request + And body with value {"title": "{{ unique }}", "widgets": [{"layout": {"x": 0, "y": 0, "width": 47, "height": 15}, "definition": {"title": "", "title_size": "16", "title_align": "left", "time": {}, "type": "distribution", "requests": [{"response_format": "scalar", "queries": [{"data_source": "logs", "name": "query1", "search": {"query": ""}, "indexes": ["*"], "compute": {"aggregation": "avg", "metric": "@duration"}, "group_by": [{"facet": "service", "limit": 1000, "sort": {"aggregation": "count", "order": "desc"}}], "storage": "hot"}]}]}}], "template_variables": [], "layout_type": "free", "notify_list": []} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "distribution" + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "logs" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].compute.aggregation" is equal to "avg" + And the response "widgets[0].definition.requests[0].queries[0].compute.metric" is equal to "@duration" + And the response "widgets[0].definition.requests[0].queries[0].group_by[0].facet" is equal to "service" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with formula and function heatmap widget + Given new "CreateDashboard" request + And body with value {"title": "{{ unique }}", "widgets": [{"layout": {"x": 0, "y": 0, "width": 47, "height": 15}, "definition": {"title": "", "title_size": "16", "title_align": "left", "time": {}, "type": "heatmap", "requests": [{"response_format": "timeseries", "queries": [{"data_source": "metrics", "name": "query1", "query": "avg:system.cpu.user{*}"}], "formulas": [{"formula": "query1"}], "style": {"palette": "dog_classic"}}]}}], "template_variables": [], "layout_type": "free", "notify_list": []} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "heatmap" + And the response "widgets[0].definition.requests[0].queries[0].query" is equal to "avg:system.cpu.user{*}" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "metrics" + And the response "widgets[0].definition.requests[0].style.palette" is equal to "dog_classic" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with formulas and functions events query using facet group by + Given new "CreateDashboard" request + And body with value {"title": "{{ unique }} with events facet group_by", "widgets": [{"definition": {"type": "timeseries", "requests": [{"response_format": "timeseries", "queries": [{"data_source": "events", "name": "query1", "search": {"query": ""}, "compute": {"aggregation": "count"}, "group_by": [{"facet": "service", "limit": 10}]}]}]}, "layout": {"x": 0, "y": 0, "width": 4, "height": 2}}], "layout_type": "ordered"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "events" + And the response "widgets[0].definition.requests[0].queries[0].group_by[0].facet" is equal to "service" + And the response "widgets[0].definition.requests[0].queries[0].group_by[0].limit" is equal to 10 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with formulas and functions events query using flat group by fields + Given new "CreateDashboard" request + And body with value {"title": "{{ unique }} with events flat group_by fields", "widgets": [{"definition": {"type": "timeseries", "requests": [{"response_format": "timeseries", "queries": [{"data_source": "events", "name": "query1", "search": {"query": ""}, "compute": {"aggregation": "count"}, "group_by": {"fields": ["service", "host"], "limit": 10}}]}]}, "layout": {"x": 0, "y": 0, "width": 4, "height": 2}}], "layout_type": "ordered"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "events" + And the response "widgets[0].definition.requests[0].queries[0].group_by.fields[0]" is equal to "service" + And the response "widgets[0].definition.requests[0].queries[0].group_by.fields[1]" is equal to "host" + And the response "widgets[0].definition.requests[0].queries[0].group_by.limit" is equal to 10 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with formulas and functions scatterplot widget + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [ { "id": 5346764334358972, "definition": { "title": "", "title_size": "16", "title_align": "left", "type": "scatterplot", "requests": { "table": { "formulas": [ { "formula": "query1", "dimension": "x", "alias": "my-query1" }, { "formula": "query2", "dimension": "y", "alias": "my-query2" } ], "queries": [ { "data_source": "metrics", "name": "query1", "query": "avg:system.cpu.user{*} by {service}", "aggregator": "avg" }, { "data_source": "metrics", "name": "query2", "query": "avg:system.mem.used{*} by {service}", "aggregator": "avg" } ], "response_format": "scalar" } } }, "layout": { "x": 0, "y": 0, "width": 4, "height": 2 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests.table.formulas[0].formula" is equal to "query1" + And the response "widgets[0].definition.requests.table.formulas[0].dimension" is equal to "x" + And the response "widgets[0].definition.requests.table.formulas[0].alias" is equal to "my-query1" + And the response "widgets[0].definition.requests.table.formulas[1].formula" is equal to "query2" + And the response "widgets[0].definition.requests.table.formulas[1].dimension" is equal to "y" + And the response "widgets[0].definition.requests.table.formulas[1].alias" is equal to "my-query2" + And the response "widgets[0].definition.requests.table.queries[0].data_source" is equal to "metrics" + And the response "widgets[0].definition.requests.table.queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests.table.queries[0].query" is equal to "avg:system.cpu.user{*} by {service}" + And the response "widgets[0].definition.requests.table.queries[0].aggregator" is equal to "avg" + And the response "widgets[0].definition.requests.table.queries[1].data_source" is equal to "metrics" + And the response "widgets[0].definition.requests.table.queries[1].name" is equal to "query2" + And the response "widgets[0].definition.requests.table.queries[1].query" is equal to "avg:system.mem.used{*} by {service}" + And the response "widgets[0].definition.requests.table.queries[1].aggregator" is equal to "avg" + And the response "widgets[0].definition.requests.table.response_format" is equal to "scalar" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with free_text widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/free_text_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "free_text" + And the response "widgets[0].definition.text" is equal to "Example free text" + And the response "widgets[0].definition.color" is equal to "#4d4d4d" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with funnel widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with funnel widget","widgets": [{"definition": {"type": "funnel","requests": [{"query":{"data_source":"rum","query_string":"","steps":[]},"request_type":"funnel"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "title" is equal to "{{ unique }} with funnel widget" + And the response "widgets[0].definition.type" is equal to "funnel" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "rum" + And the response "widgets[0].definition.requests[0].request_type" is equal to "funnel" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with geomap widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/geomap_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "geomap" + And the response "widgets[0].definition.requests[0].sort.order_by[0].order" is equal to "desc" + And the response "widgets[0].definition.requests[0].sort.order_by[0].type" is equal to "formula" + And the response "widgets[0].definition.requests[0].sort.order_by[0].index" is equal to 0 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with heatmap widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/heatmap_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "heatmap" + And the response "widgets[0].definition.requests[0].q" is equal to "avg:system.cpu.user{*} by {service}" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with heatmap widget with markers and num_buckets + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [{"definition": { "title": "", "title_size": "16", "title_align": "left", "type": "heatmap", "xaxis": { "num_buckets": 75 }, "yaxis": { "scale": "linear", "min": "auto", "max": "auto", "include_zero": true }, "markers": [{ "display_type": "percentile", "value": "50" }, { "display_type": "percentile", "value": "99" }], "requests": [{ "request_type": "histogram", "query": { "data_source": "metrics", "name": "query1", "query": "histogram:trace.servlet.request{*}"} }] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } }], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.xaxis.num_buckets" is equal to 75 + And the response "widgets[0].definition.markers" is equal to [{"display_type": "percentile", "value": "50"}, {"display_type": "percentile", "value": "99"}] + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with hostmap DDSQL widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/hostmap_ddsql_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "hostmap" + And the response "widgets[0].definition.requests" is equal to {"request_type": "data_projection", "limit": 1000, "query": {"data_source": "dataset", "dataset_provider": "ddsql_query", "dataset_id": "abc-123-def"}, "projection": {"type": "hostmap", "dimensions": [{"column": "entity_id", "dimension": "node"}, {"column": "parent_id", "dimension": "group"}, {"column": "cpu_usage", "dimension": "fill"}]}, "style": {"palette": "green_to_orange", "palette_flip": false}} + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with hostmap infra widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/hostmap_infra_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "hostmap" + And the response "widgets[0].definition.requests" is equal to {"request_type": "infrastructure_hostmap", "node_type": "host", "filter": "env:prod", "group_by": [{"column": "tags", "key": "service"}], "enrichments": [{"response_format": "scalar", "queries": [{"data_source": "metrics", "name": "query1", "query": "avg:system.cpu.user{*} by {host}"}], "formulas": [{"formula": "query1", "dimension": "fill"}]}], "style": {"palette": "green_to_orange", "palette_flip": false}} + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with hostmap widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/hostmap_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "hostmap" + And the response "widgets[0].definition.requests.fill.q" is equal to "avg:system.cpu.user{*} by {host}" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with iframe widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/iframe_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "iframe" + And the response "widgets[0].definition.url" is equal to "https://docs.datadoghq.com/api/latest/" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with image widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/image_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "image" + And the response "widgets[0].definition.url" is equal to "https://example.com/image.png" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with invalid team tags returns "Bad Request" response + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [ { "definition": { "title": "", "title_size": "16", "title_align": "left", "time": {}, "type": "change", "requests": [ { "formulas": [ { "formula": "hour_before(query1)" }, { "formula": "query1" } ], "queries": [ { "data_source": "logs", "name": "query1", "search": { "query": "" }, "indexes": [ "*" ], "compute": { "aggregation": "count" } } ], "response_format": "scalar", "compare_to": "hour_before", "increase_good": true, "order_by": "change", "change_type": "absolute", "order_dir": "desc" } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "tags": ["tm:foobar"], "layout_type": "ordered" } + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with list_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"apm_issue_stream","query_string":""},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "list_stream" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "apm_issue_stream" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with list_stream widget with a valid sort parameter ASC + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered","title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns": [{"width": "auto","field": "timestamp"}],"query": {"data_source": "event_stream","query_string": "","event_size": "l", "sort": {"column": "timestamp", "order": "asc"}},"response_format": "event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "list_stream" + And the response "widgets[0].definition.requests[0].response_format" is equal to "event_list" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "event_stream" + And the response "widgets[0].definition.requests[0].query.event_size" is equal to "l" + And the response "widgets[0].definition.requests[0].query.sort.column" is equal to "timestamp" + And the response "widgets[0].definition.requests[0].query.sort.order" is equal to "asc" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with list_stream widget with a valid sort parameter DESC + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered","title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns": [{"width": "auto","field": "timestamp"}],"query": {"data_source": "event_stream","query_string": "","event_size": "l", "sort": {"column": "timestamp", "order": "desc"}},"response_format": "event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "list_stream" + And the response "widgets[0].definition.requests[0].response_format" is equal to "event_list" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "event_stream" + And the response "widgets[0].definition.requests[0].query.event_size" is equal to "l" + And the response "widgets[0].definition.requests[0].query.sort.column" is equal to "timestamp" + And the response "widgets[0].definition.requests[0].query.sort.order" is equal to "desc" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with llm_observability_stream list_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type":"ordered","title":"{{ unique }} with list_stream widget","widgets":[{"definition":{"type":"list_stream","requests":[{"response_format":"event_list","query":{"data_source":"llm_observability_stream","query_string":"@event_type:span @parent_id:undefined","indexes":[]},"columns":[{"field":"@status","width":"compact"},{"field":"@content.prompt","width":"auto"},{"field":"@content.response.content","width":"auto"},{"field":"timestamp","width":"auto"},{"field":"@ml_app","width":"auto"},{"field":"service","width":"auto"},{"field":"@meta.evaluations.quality","width":"auto"},{"field":"@meta.evaluations.security","width":"auto"},{"field":"@duration","width":"auto"}]}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "llm_observability_stream" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with log_stream widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/log_stream_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "log_stream" + And the response "widgets[0].definition.query" is equal to "" + And the response "widgets[0].definition.indexes[0]" is equal to "main" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with logs query table widget and storage parameter + Given new "CreateDashboard" request + And body with value {"layout_type":"ordered","title":"{{ unique }} with query table widget and storage parameter","widgets":[{"definition":{"type":"query_table","requests":[{"queries":[{"data_source":"logs","name":"query1","search":{"query":""},"indexes":["*"],"compute":{"aggregation":"count"},"storage":"online_archives"}],"formulas":[{"conditional_formats":[],"cell_display_mode":"bar","formula":"query1"}],"sort":{"count":50, "order_by":[{"type":"formula","index":0,"order":"desc"}]},"response_format":"scalar"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "query_table" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "logs" + And the response "widgets[0].definition.requests[0].queries[0].storage" is equal to "online_archives" + And the response "widgets[0].definition.requests[0].sort.order_by[0].order" is equal to "desc" + And the response "widgets[0].definition.requests[0].sort.order_by[0].type" is equal to "formula" + And the response "widgets[0].definition.requests[0].sort.order_by[0].index" is equal to 0 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with logs_pattern_stream list_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"},{"width":"auto","field":"message"}],"query":{"data_source":"logs_pattern_stream","query_string":"","clustering_pattern_field_path":"message","group_by":[{"facet":"service"}]}, "response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "logs_pattern_stream" + And the response "widgets[0].definition.requests[0].query.group_by[0].facet" is equal to "service" + And the response "widgets[0].definition.requests[0].query.clustering_pattern_field_path" is equal to "message" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with logs_stream list_stream widget and storage parameter + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"logs_stream","query_string":"", "storage": "hot"},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "list_stream" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "logs_stream" + And the response "widgets[0].definition.requests[0].query.storage" is equal to "hot" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with logs_transaction_stream list_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"logs_transaction_stream","query_string":"","group_by":[{"facet":"service"}],"compute":[{"facet":"service","aggregation":"count"}]},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "logs_transaction_stream" + And the response "widgets[0].definition.requests[0].query.group_by[0].facet" is equal to "service" + And the response "widgets[0].definition.requests[0].query.compute[0].facet" is equal to "service" + And the response "widgets[0].definition.requests[0].query.compute[0].aggregation" is equal to "count" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with logs_transaction_stream list_stream widget and version + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"logs_transaction_stream","query_string":"","group_by":[{"facet":"service"}],"compute":[{"facet":"service","aggregation":"count"}],"version":"sequential_query"},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "logs_transaction_stream" + And the response "widgets[0].definition.requests[0].query.version" is equal to "sequential_query" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with manage_status widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/manage_status_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "manage_status" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with manage_status widget and show_priority parameter + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/manage_status_widget_priority_sort.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "manage_status" + And the response "widgets[0].definition.show_priority" is false + And the response "widgets[0].definition.sort" is equal to "priority,asc" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with note widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/note_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "note" + And the response "widgets[0].definition.content" is equal to "# Example Note" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with point_plot widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/point_plot_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "point_plot" + And the response "widgets[0].definition.requests[0].request_type" is equal to "data_projection" + And the response "widgets[0].definition.requests[0].projection.type" is equal to "point_plot" + And the response "widgets[0].definition.requests[0].projection.dimensions[0].dimension" is equal to "group" + And the response "widgets[0].definition.requests[0].projection.dimensions[1].dimension" is equal to "y" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with powerpack widget + Given new "CreateDashboard" request + And there is a valid "powerpack" in the system + And body from file "dashboards_json_payload/powerpack_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "powerpack" + And the response "widgets[0].definition.powerpack_id" has the same value as "powerpack.data.id" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with query_table widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/query_table_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "query_table" + And the response "widgets[0].definition.requests[0].sort.order_by[0].order" is equal to "desc" + And the response "widgets[0].definition.requests[0].sort.order_by[0].type" is equal to "formula" + And the response "widgets[0].definition.requests[0].sort.order_by[0].index" is equal to 0 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with query_table widget and cell_display_mode is trend + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/query_table_widget_cell_display_mode_trend.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "query_table" + And the response "widgets[0].definition.requests[0].formulas[0].cell_display_mode" is equal to "trend" + And the response "widgets[0].definition.requests[0].formulas[0].cell_display_mode_options.trend_type" is equal to "line" + And the response "widgets[0].definition.requests[0].formulas[0].cell_display_mode_options.y_scale" is equal to "shared" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with query_table widget and text formatting + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/query_table_widget_text_formatting.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "query_table" + And the response "widgets[0].definition.requests[0].text_formats[0][0].match.type" is equal to "is" + And the response "widgets[0].definition.requests[0].text_formats[0][0].match.value" is equal to "fruit" + And the response "widgets[0].definition.requests[0].text_formats[0][0].palette" is equal to "white_on_red" + And the response "widgets[0].definition.requests[0].text_formats[0][0].replace.type" is equal to "all" + And the response "widgets[0].definition.requests[0].text_formats[0][0].replace.with" is equal to "vegetable" + And the response "widgets[0].definition.requests[0].text_formats[0][1].palette" is equal to "custom_bg" + And the response "widgets[0].definition.requests[0].text_formats[0][1].custom_bg_color" is equal to "#632ca6" + And the response "widgets[0].definition.requests[0].text_formats[5][2].custom_fg_color" is equal to "#632ca6" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with query_value widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/query_value_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "query_value" + And the response "widgets[0].definition.requests[0].queries[0].query" is equal to "avg:system.cpu.user{*}" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with rum_issue_stream list_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"rum_issue_stream","query_string":""},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "list_stream" + And the response "widgets[0].definition.requests[0].response_format" is equal to "event_list" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with run-workflow widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/run_workflow_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "run_workflow" + And the response "widgets[0].definition.workflow_id" is equal to "2e055f16-8b6a-4cdd-b452-17a34c44b160" + And the response "widgets[0].definition.inputs[0]" is equal to {"name": "environment", "value": "$env.value"} + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with sankey widget and RUM data source + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/sankey_rum_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "sankey" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "rum" + And the response "widgets[0].definition.requests[0].query.query_string" is equal to "@type:view" + And the response "widgets[0].definition.requests[0].query.mode" is equal to "source" + And the response "widgets[0].definition.requests[0].request_type" is equal to "sankey" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with sankey widget and network data source + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/sankey_network_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "sankey" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "network" + And the response "widgets[0].definition.requests[0].query.query_string" is equal to "*" + And the response "widgets[0].definition.requests[0].query.group_by" is equal to ["source", "destination"] + And the response "widgets[0].definition.requests[0].query.limit" is equal to 100 + And the response "widgets[0].definition.requests[0].request_type" is equal to "netflow_sankey" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with sankey widget and product analytics data source + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/sankey_product_analytics_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "sankey" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "product_analytics" + And the response "widgets[0].definition.requests[0].query.query_string" is equal to "@type:session" + And the response "widgets[0].definition.requests[0].query.mode" is equal to "source" + And the response "widgets[0].definition.requests[0].request_type" is equal to "sankey" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with scatterplot widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/scatterplot_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "scatterplot" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with servicemap widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/servicemap_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "servicemap" + And the response "widgets[0].definition.filters" is equal to ["env:none","environment:*"] + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with slo list widget + Given there is a valid "slo" in the system + And new "CreateDashboard" request + And body from file "dashboards_json_payload/slo_list_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "slo_list" + And the response "widgets[0].definition.requests[0].query.query_string" is equal to "env:prod AND service:my-app" + And the response "widgets[0].definition.requests[0].query.limit" is equal to 75 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with slo list widget with sort + Given there is a valid "slo" in the system + And new "CreateDashboard" request + And body from file "dashboards_json_payload/slo_list_widget_with_sort.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "slo_list" + And the response "widgets[0].definition.requests[0].query.query_string" is equal to "env:prod AND service:my-app" + And the response "widgets[0].definition.requests[0].query.limit" is equal to 75 + And the response "widgets[0].definition.requests[0].query.sort[0].column" is equal to "status.sli" + And the response "widgets[0].definition.requests[0].query.sort[0].order" is equal to "asc" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with slo widget + Given there is a valid "slo" in the system + And new "CreateDashboard" request + And body from file "dashboards_json_payload/slo_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "slo" + And the response "widgets[0].definition.slo_id" is equal to "{{ slo.data[0].id }}" + And the response "widgets[0].definition.additional_query_filters" is equal to "!host:excluded_host" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with split graph widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/split_graph_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "split_group" + And the response "widgets[0].definition.source_widget_definition.type" is equal to "timeseries" + And the response "widgets[0].definition.source_widget_definition.requests[0].response_format" is equal to "timeseries" + And the response "widgets[0].definition.source_widget_definition.requests[0].queries[0].data_source" is equal to "metrics" + And the response "widgets[0].definition.source_widget_definition.requests[0].queries[0].query" is equal to "avg:system.cpu.user{*}" + And the response "widgets[0].definition.source_widget_definition.requests[0].style.palette" is equal to "dog_classic" + And the response "widgets[0].definition.split_config.split_dimensions[0].one_graph_per" is equal to "service" + And the response "widgets[0].definition.split_config.limit" is equal to 24 + And the response "widgets[0].definition.split_config.sort.compute.aggregation" is equal to "sum" + And the response "widgets[0].definition.split_config.sort.compute.metric" is equal to "system.cpu.user" + And the response "widgets[0].definition.split_config.sort.order" is equal to "desc" + And the response "widgets[0].definition.split_config.static_splits[0][0].tag_key" is equal to "service" + And the response "widgets[0].definition.split_config.static_splits[0][0].tag_values[0]" is equal to "cassandra" + And the response "widgets[0].definition.split_config.static_splits[0][1].tag_key" is equal to "datacenter" + And the response "widgets[0].definition.split_config.static_splits[0][1].tag_values" has length 0 + And the response "widgets[0].definition.split_config.static_splits[1][0].tag_key" is equal to "demo" + And the response "widgets[0].definition.split_config.static_splits[1][0].tag_values[0]" is equal to "env" + And the response "widgets[0].definition.size" is equal to "md" + And the response "widgets[0].definition.has_uniform_y_axes" is equal to true + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with sunburst widget and metrics data + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [ { "definition": { "title": "", "title_size": "16", "title_align": "left", "type": "sunburst", "requests": [ { "response_format": "scalar", "formulas": [ { "formula": "query1" } ], "queries": [ { "query": "sum:system.mem.used{*} by {service}", "data_source": "metrics", "name": "query1", "aggregator": "sum" } ], "style": { "palette": "dog_classic" } } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].response_format" is equal to "scalar" + And the response "widgets[0].definition.requests[0].queries[0].query" is equal to "sum:system.mem.used{*} by {service}" + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "metrics" + And the response "widgets[0].definition.requests[0].queries[0].name" is equal to "query1" + And the response "widgets[0].definition.requests[0].queries[0].aggregator" is equal to "sum" + And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "query1" + And the response "widgets[0].definition.requests[0].style.palette" is equal to "dog_classic" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with team tags returns "OK" response + Given new "CreateDashboard" request + And body with value { "title": "{{ unique }}", "widgets": [ { "definition": { "title": "", "title_size": "16", "title_align": "left", "time": {}, "type": "change", "requests": [ { "formulas": [ { "formula": "hour_before(query1)" }, { "formula": "query1" } ], "queries": [ { "data_source": "logs", "name": "query1", "search": { "query": "" }, "indexes": [ "*" ], "compute": { "aggregation": "count" } } ], "response_format": "scalar", "compare_to": "hour_before", "increase_good": true, "order_by": "change", "change_type": "absolute", "order_dir": "desc" } ] }, "layout": { "x": 0, "y": 0, "width": 4, "height": 4 } } ], "tags": ["team:foobar"], "layout_type": "ordered" } + When the request is sent + Then the response status is 200 OK + And the response "title" is equal to "{{ unique }}" + And the response "tags" array contains value "team:foobar" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with template variable defaults and default returns "Bad Request" response + Given new "CreateDashboard" request + And body with value {"description": null, "layout_type": "ordered", "notify_list": [], "reflow_type": "auto", "restricted_roles": [], "template_variables": [{"available_values": ["my-host", "host1", "host2"], "default": "my-host", "defaults": ["my-host"], "name": "host1", "prefix": "host"}], "title": "", "widgets": [{"definition": {"requests": {"fill": {"q": "avg:system.cpu.user{*}"}}, "type": "hostmap"}}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with template variable defaults returns "OK" response + Given new "CreateDashboard" request + And body with value {"description": null, "layout_type": "ordered", "notify_list": [], "reflow_type": "auto", "restricted_roles": [], "template_variables": [{"available_values": ["my-host", "host1", "host2"], "defaults": ["my-host"], "name": "host1", "prefix": "host"}], "title": "", "widgets": [{"definition": {"requests": {"fill": {"q": "avg:system.cpu.user{*}"}}, "type": "hostmap"}}]} + When the request is sent + Then the response status is 200 OK + And the response "template_variables[0].name" is equal to "host1" + And the response "template_variables[0].available_values[0]" is equal to "my-host" + And the response "template_variables[0].defaults[0]" is equal to "my-host" + + @skip-validation @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with template variable defaults whose value has no length returns "Bad Request" response + Given new "CreateDashboard" request + And body with value {"description": null, "layout_type": "ordered", "notify_list": [], "reflow_type": "auto", "restricted_roles": [], "template_variables": [{"available_values": ["my-host", "host1", "host2"], "defaults": [""], "name": "host1", "prefix": "host"}], "title": "", "widgets": [{"definition": {"requests": {"fill": {"q": "avg:system.cpu.user{*}"}}, "type": "hostmap"}}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with template variable presets using values and value returns "Bad Request" response + Given new "CreateDashboard" request + And body with value {"description": null, "layout_type": "ordered", "notify_list": [], "reflow_type": "auto", "restricted_roles": [], "template_variable_presets": [{"name": "my saved view", "template_variables": [{"name": "datacenter", "value": "*", "values": [ "*" ]}]}], "template_variables": [{"available_values": ["my-host", "host1", "host2"], "defaults": ["my-host"], "name": "host1", "prefix": "host"}], "title": "", "widgets": [{"definition": {"requests": {"fill": {"q": "avg:system.cpu.user{*}"}}, "type": "hostmap"}}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with template variable presets using values returns "OK" response + Given new "CreateDashboard" request + And body with value {"description": null, "layout_type": "ordered", "notify_list": [], "reflow_type": "auto", "restricted_roles": [], "template_variable_presets": [{"name": "my saved view", "template_variables": [{"name": "datacenter", "values": ["*", "my-host"]}]}], "template_variables": [{"available_values": ["my-host", "host1", "host2"], "defaults": ["my-host"], "name": "host1", "prefix": "host"}], "title": "", "widgets": [{"definition": {"requests": {"fill": {"q": "avg:system.cpu.user{*}"}}, "type": "hostmap"}}]} + When the request is sent + Then the response status is 200 OK + And the response "template_variable_presets[0].name" is equal to "my saved view" + And the response "template_variable_presets[0].template_variables[0].name" is equal to "datacenter" + And the response "template_variable_presets[0].template_variables[0].values[0]" is equal to "*" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with template variable type field returns "OK" response + Given new "CreateDashboard" request + And body with value {"description": null, "layout_type": "ordered", "notify_list": [], "reflow_type": "auto", "restricted_roles": [], "template_variables": [{"available_values": ["service", "datacenter", "env"], "defaults": ["service", "datacenter"], "name": "group_by_var", "type": "group"}], "title": "", "widgets": [{"definition": {"requests": {"fill": {"q": "avg:system.cpu.user{*}"}}, "type": "hostmap"}}]} + When the request is sent + Then the response status is 200 OK + And the response "template_variables[0].name" is equal to "group_by_var" + And the response "template_variables[0].available_values[0]" is equal to "service" + And the response "template_variables[0].defaults[0]" is equal to "service" + And the response "template_variables[0].type" is equal to "group" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget and formula style attributes + Given new "CreateDashboard" request + And body with value {"title": "{{ unique }} with formula style","widgets": [{"definition": {"title": "styled timeseries","show_legend": true,"legend_layout": "auto","legend_columns": ["avg","min","max","value","sum"],"time": {},"type": "timeseries","requests": [{"formulas": [{"formula": "query1","style": {"palette_index": 4,"palette": "classic"}}],"queries": [{"query": "avg:system.cpu.user{*}","data_source": "metrics","name": "query1"}],"response_format": "timeseries","style": {"palette": "dog_classic","line_type": "solid","line_width": "normal"},"display_type": "line"}]}}],"layout_type": "ordered","reflow_type": "auto"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].formulas[0].formula" is equal to "query1" + And the response "widgets[0].definition.requests[0].formulas[0].style.palette" is equal to "classic" + And the response "widgets[0].definition.requests[0].formulas[0].style.palette_index" is equal to 4 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget containing style attributes + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with timeseries widget","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "sum:trace.test.errors{env:prod,service:datadog-api-spec} by {resource_name}.as_count()","on_right_yaxis": false,"style": {"palette": "warm","line_type": "solid","line_width": "normal"},"display_type": "bars"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].on_right_yaxis" is false + And the response "widgets[0].definition.requests[0].style" is equal to {"palette": "warm","line_type": "solid","line_width": "normal"} + And the response "widgets[0].definition.requests[0].display_type" is equal to "bars" + And the response "widgets[0].definition.requests[0].q" is equal to "sum:trace.test.errors{env:prod,service:datadog-api-spec} by {resource_name}.as_count()" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget using has_value_labels + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with has_value_labels","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "dog_classic","line_type": "solid","line_width": "normal","has_value_labels": true},"display_type": "line"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].style.has_value_labels" is equal to true + And the response "widgets[0].definition.requests[0].style.palette" is equal to "dog_classic" + And the response "widgets[0].definition.requests[0].style.line_type" is equal to "solid" + And the response "widgets[0].definition.requests[0].style.line_width" is equal to "normal" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget using order_by tags + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with order_by tags","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "dog_classic","order_by": "tags"},"display_type": "line"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].style.order_by" is equal to "tags" + And the response "widgets[0].definition.requests[0].style.palette" is equal to "dog_classic" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget using order_by values + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with order_by values","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "warm","order_by": "values"},"display_type": "line"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].style.order_by" is equal to "values" + And the response "widgets[0].definition.requests[0].style.palette" is equal to "warm" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget with custom_unit + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/timeseries_widget_with_custom_unit.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "timeseries" + And the response "widgets[0].definition.requests[0].formulas[0].number_format.unit_scale.type" is equal to "canonical_unit" + And the response "widgets[0].definition.requests[0].formulas[0].number_format.unit_scale.unit_name" is equal to "apdex" + And the response "widgets[0].definition.requests[0].formulas[0].number_format.unit.type" is equal to "canonical_unit" + And the response "widgets[0].definition.requests[0].formulas[0].number_format.unit.unit_name" is equal to "fraction" + And the response "widgets[0].definition.description" is equal to "Example widget description" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with timeseries widget without order_by for backward compatibility + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} without order_by","widgets": [{"definition": {"type": "timeseries","requests": [{"q": "avg:system.cpu.user{*} by {host}","style": {"palette": "dog_classic","line_type": "solid","line_width": "normal"},"display_type": "line"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].style.palette" is equal to "dog_classic" + And the response "widgets[0].definition.requests[0].style.line_type" is equal to "solid" + And the response "widgets[0].definition.requests[0].style.line_width" is equal to "normal" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with toplist widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/toplist_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "toplist" + And the response "widgets[0].definition.requests[0].sort.order_by[0].order" is equal to "desc" + And the response "widgets[0].definition.requests[0].sort.order_by[0].type" is equal to "formula" + And the response "widgets[0].definition.requests[0].sort.order_by[0].index" is equal to 0 + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with topology_map data_streams widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/topology_map_widget_data_streams.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "topology_map" + And the response "widgets[0].definition.requests[0].request_type" is equal to "topology" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "data_streams" + And the response "widgets[0].definition.requests[0].query.service" is equal to "" + And the response "widgets[0].definition.requests[0].query.filters" is equal to ["env:prod"] + And the response "widgets[0].definition.requests[0].query.query_string" is equal to "service:myservice" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with topology_map widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/topology_map_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "topology_map" + And the response "widgets[0].definition.requests[0].request_type" is equal to "topology" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "service_map" + And the response "widgets[0].definition.requests[0].query.service" is equal to "" + And the response "widgets[0].definition.requests[0].query.filters" is equal to ["env:none","environment:*"] + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with trace_service widget + Given new "CreateDashboard" request + And body from file "dashboards_json_payload/trace_service_widget.json" + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "trace_service" + And the response "widgets[0].definition.env" is equal to "none" + + @team:DataDog/dashboards-backend + Scenario: Create a new dashboard with trace_stream widget + Given new "CreateDashboard" request + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"},{"width":"auto","field":"service"}],"query":{"data_source":"trace_stream","query_string":""},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.type" is equal to "list_stream" + And the response "widgets[0].definition.requests[0].query.data_source" is equal to "trace_stream" + + @team:DataDog/dashboards-backend + Scenario: Create a new timeseries widget with ci_pipelines data source + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }} with ci_pipelines datasource","widgets":[{"definition":{"title":"","show_legend":true,"legend_layout":"auto","legend_columns":["avg","min","max","value","sum"],"time":{},"type":"timeseries","requests":[{"formulas":[{"formula":"query1"}],"queries":[{"data_source":"ci_pipelines","name":"query1","search":{"query":"ci_level:job"},"indexes":["*"],"compute":{"aggregation":"count", "metric": "@ci.queue_time"}}],"response_format":"timeseries","style":{"palette":"dog_classic","line_type":"solid","line_width":"normal"},"display_type":"line"}]}}],"layout_type":"ordered","reflow_type":"auto"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "ci_pipelines" + And the response "widgets[0].definition.requests[0].queries[0].search.query" is equal to "ci_level:job" + + @team:DataDog/dashboards-backend + Scenario: Create a new timeseries widget with ci_tests data source + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }} with ci_tests datasource","widgets":[{"definition":{"title":"","show_legend":true,"legend_layout":"auto","legend_columns":["avg","min","max","value","sum"],"time":{},"type":"timeseries","requests":[{"formulas":[{"formula":"query1"}],"queries":[{"data_source":"ci_tests","name":"query1","search":{"query":"test_level:test"},"indexes":["*"],"compute":{"aggregation":"count"}}],"response_format":"timeseries","style":{"palette":"dog_classic","line_type":"solid","line_width":"normal"},"display_type":"line"}]}}],"layout_type":"ordered","reflow_type":"auto"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "ci_tests" + And the response "widgets[0].definition.requests[0].queries[0].search.query" is equal to "test_level:test" + + @team:DataDog/dashboards-backend + Scenario: Create a new timeseries widget with incident_analytics data source + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }} with incident_analytics datasource","widgets":[{"definition":{"title":"","show_legend":true,"legend_layout":"auto","legend_columns":["avg","min","max","value","sum"],"time":{},"type":"timeseries","requests":[{"formulas":[{"formula":"query1"}],"queries":[{"data_source":"incident_analytics","name":"query1","search":{"query":"test_level:test"},"indexes":["*"],"compute":{"aggregation":"count"}}],"response_format":"timeseries","style":{"palette":"dog_classic","line_type":"solid","line_width":"normal"},"display_type":"line"}]}}],"layout_type":"ordered","reflow_type":"auto"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "incident_analytics" + And the response "widgets[0].definition.requests[0].queries[0].search.query" is equal to "test_level:test" + + @team:DataDog/dashboards-backend + Scenario: Create a new timeseries widget with legacy live span time format + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }} with legacy live span time","widgets":[{"definition":{"title":"","show_legend":true,"legend_layout":"auto","legend_columns":["avg","min","max","value","sum"],"time":{"live_span": "5m", "hide_incomplete_cost_data": true},"type":"timeseries","requests":[{"formulas":[{"formula":"query1"}],"queries":[{"data_source":"ci_pipelines","name":"query1","search":{"query":"ci_level:job"},"indexes":["*"],"compute":{"aggregation":"count", "metric": "@ci.queue_time"}}],"response_format":"timeseries","style":{"palette":"dog_classic","line_type":"solid","line_width":"normal"},"display_type":"line"}]}}],"layout_type":"ordered","reflow_type":"auto"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.time.live_span" is equal to "5m" + And the response "widgets[0].definition.time.hide_incomplete_cost_data" is equal to true + + @team:DataDog/dashboards-backend + Scenario: Create a new timeseries widget with new fixed span time format + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }} with new fixed span time","widgets":[{"definition":{"title":"","show_legend":true,"legend_layout":"auto","legend_columns":["avg","min","max","value","sum"],"time":{"type": "fixed", "from": 1712080128, "to": 1712083128, "hide_incomplete_cost_data": true},"type":"timeseries","requests":[{"formulas":[{"formula":"query1"}],"queries":[{"data_source":"ci_pipelines","name":"query1","search":{"query":"ci_level:job"},"indexes":["*"],"compute":{"aggregation":"count", "metric": "@ci.queue_time"}}],"response_format":"timeseries","style":{"palette":"dog_classic","line_type":"solid","line_width":"normal"},"display_type":"line"}]}}],"layout_type":"ordered","reflow_type":"auto"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.time.type" is equal to "fixed" + And the response "widgets[0].definition.time.from" is equal to 1712080128 + And the response "widgets[0].definition.time.to" is equal to 1712083128 + And the response "widgets[0].definition.time.hide_incomplete_cost_data" is equal to true + + @team:DataDog/dashboards-backend + Scenario: Create a new timeseries widget with new live span time format + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }} with new live span time","widgets":[{"definition":{"title":"","show_legend":true,"legend_layout":"auto","legend_columns":["avg","min","max","value","sum"],"time":{"type": "live", "unit": "minute", "value": 8, "hide_incomplete_cost_data": true},"type":"timeseries","requests":[{"formulas":[{"formula":"query1"}],"queries":[{"data_source":"ci_pipelines","name":"query1","search":{"query":"ci_level:job"},"indexes":["*"],"compute":{"aggregation":"count", "metric": "@ci.queue_time"}}],"response_format":"timeseries","style":{"palette":"dog_classic","line_type":"solid","line_width":"normal"},"display_type":"line"}]}}],"layout_type":"ordered","reflow_type":"auto"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.time.type" is equal to "live" + And the response "widgets[0].definition.time.unit" is equal to "minute" + And the response "widgets[0].definition.time.value" is equal to 8 + And the response "widgets[0].definition.time.hide_incomplete_cost_data" is equal to true + + @team:DataDog/dashboards-backend + Scenario: Create a new timeseries widget with product_analytics data source + Given new "CreateDashboard" request + And body with value {"title":"{{ unique }} with product_analytics datasource","widgets":[{"definition":{"title":"","show_legend":true,"legend_layout":"auto","legend_columns":["avg","min","max","value","sum"],"time":{},"type":"timeseries","requests":[{"formulas":[{"formula":"query1"}],"queries":[{"data_source":"product_analytics","name":"query1","search":{"query":"test_level:test"},"indexes":["*"],"compute":{"aggregation":"count"}}],"response_format":"timeseries","style":{"palette":"dog_classic","line_type":"solid","line_width":"normal"},"display_type":"line"}]}}],"layout_type":"ordered","reflow_type":"auto"} + When the request is sent + Then the response status is 200 OK + And the response "widgets[0].definition.requests[0].queries[0].data_source" is equal to "product_analytics" + And the response "widgets[0].definition.requests[0].queries[0].search.query" is equal to "test_level:test" + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Create a shared dashboard returns "Bad Request" response + Given new "CreatePublicDashboard" request + And body with value {"dashboard_id": "123-abc-456", "dashboard_type": "custom_timeboard", "embeddable_domains": ["https://domain.atlassian.net/", "http://myserver.com/"], "expiration": null, "global_time": {"live_span": "1h"}, "global_time_selectable_enabled": null, "invitees": [{"access_expiration": "2030-01-01T12:00:00.00Z", "email": "test@datadoghq.com"}, {"access_expiration": null, "email": "test2@datadoghq.com"}], "selectable_template_vars": [{"default_value": "*", "name": "exampleVar", "prefix": "test", "visible_tags": ["selectableValue1", "selectableValue2"]}], "share_list": ["test@datadoghq.com", "test2@email.com"], "share_type": "open", "status": "active", "viewing_preferences": {"theme": "system"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/reporting-and-sharing + Scenario: Create a shared dashboard returns "Dashboard Not Found" response + Given new "CreatePublicDashboard" request + And body with value {"dashboard_id": "abc-123-def", "dashboard_type": "custom_timeboard", "share_type": "open", "global_time": {"live_span": "1h"}} + When the request is sent + Then the response status is 404 Dashboard Not Found + + @team:DataDog/reporting-and-sharing + Scenario: Create a shared dashboard returns "OK" response + Given there is a valid "dashboard" in the system + And new "CreatePublicDashboard" request + And body with value {"dashboard_id": "{{dashboard.id}}", "dashboard_type": "custom_timeboard", "share_type": "open", "global_time": {"live_span": "1h"}} + When the request is sent + Then the response status is 200 OK + And the response "dashboard_id" has the same value as "dashboard.id" + And the response "dashboard_type" is equal to "custom_timeboard" + + @team:DataDog/reporting-and-sharing + Scenario: Create a shared dashboard with a group template variable returns "OK" response + Given there is a valid "dashboard" in the system + And new "CreatePublicDashboard" request + And body with value {"dashboard_id": "{{dashboard.id}}", "dashboard_type": "custom_timeboard", "share_type": "open", "global_time": {"live_span": "1h"}, "selectable_template_vars": [{"default_value": "*", "name": "group_by_var", "type": "group", "visible_tags": ["selectableValue1", "selectableValue2"]}]} + When the request is sent + Then the response status is 200 OK + And the response "dashboard_id" has the same value as "dashboard.id" + And the response "dashboard_type" is equal to "custom_timeboard" + And the response "selectable_template_vars[0].name" is equal to "group_by_var" + And the response "selectable_template_vars[0].type" is equal to "group" + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Delete a dashboard returns "Dashboards Not Found" response + Given new "DeleteDashboard" request + And request contains "dashboard_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Dashboards Not Found + + @team:DataDog/dashboards-backend + Scenario: Delete a dashboard returns "OK" response + Given there is a valid "dashboard" in the system + And new "DeleteDashboard" request + And request contains "dashboard_id" parameter from "dashboard.id" + When the request is sent + Then the response status is 200 OK + And the response "deleted_dashboard_id" is equal to "{{ dashboard.id }}" + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Delete dashboards returns "Bad Request" response + Given new "DeleteDashboards" request + And body with value {"data": [{"id": "123-abc-456", "type": "dashboard"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Delete dashboards returns "Dashboards Not Found" response + Given new "DeleteDashboards" request + And body with value {"data": [{"id": "123-abc-456", "type": "dashboard"}]} + When the request is sent + Then the response status is 404 Dashboards Not Found + + @team:DataDog/dashboards-backend + Scenario: Delete dashboards returns "No Content" response + Given there is a valid "dashboard" in the system + And new "DeleteDashboards" request + And body with value {"data": [{"id": "{{ dashboard.id }}", "type": "dashboard"}]} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Get a dashboard returns "Item Not Found" response + Given new "GetDashboard" request + And request contains "dashboard_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Item Not Found + + @team:DataDog/dashboards-backend + Scenario: Get a dashboard returns "OK" response + Given there is a valid "dashboard" in the system + And new "GetDashboard" request + And request contains "dashboard_id" parameter from "dashboard.id" + When the request is sent + Then the response status is 200 OK + And the response "description" is equal to null + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get a dashboard returns 'author_name' + Given there is a valid "dashboard" in the system + And new "GetDashboard" request + And request contains "dashboard_id" parameter from "dashboard.id" + When the request is sent + Then the response status is 200 OK + And the response "author_name" is equal to "Frog Account" + + @team:DataDog/reporting-and-sharing + Scenario: Get a shared dashboard returns "OK" response + Given there is a valid "dashboard" in the system + And there is a valid "shared_dashboard" in the system + And new "GetPublicDashboard" request + And request contains "token" parameter from "shared_dashboard.token" + When the request is sent + Then the response status is 200 OK + And the response "dashboard_id" has the same value as "dashboard.id" + And the response "token" has the same value as "shared_dashboard.token" + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Get a shared dashboard returns "Shared Dashboard Not Found" response + Given new "GetPublicDashboard" request + And request contains "token" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Shared Dashboard Not Found + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get all dashboards returns "OK" response + Given new "ListDashboards" request + And there is a valid "dashboard" in the system + And request contains "filter[shared]" parameter with value false + When the request is sent + Then the response status is 200 OK + And the response "dashboards[0].title" has the same value as "dashboard.title" + And the response "dashboards[0].id" has the same value as "dashboard.id" + + @replay-only @skip-validation @team:DataDog/dashboards-backend @with-pagination + Scenario: Get all dashboards returns "OK" response with pagination + Given new "ListDashboards" request + And request contains "count" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Get all invitations for a shared dashboard returns "Not Found" response + Given new "GetPublicDashboardInvitations" request + And request contains "token" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/reporting-and-sharing + Scenario: Get all invitations for a shared dashboard returns "OK" response + Given there is a valid "dashboard" in the system + And there is a valid "shared_dashboard" in the system + And new "GetPublicDashboardInvitations" request + And request contains "token" parameter from "shared_dashboard.token" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 0 + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get deleted dashboards returns "OK" response + Given new "ListDashboards" request + And there is a valid "dashboard" in the system + And the "dashboard" was deleted + And request contains "filter[deleted]" parameter with value true + When the request is sent + Then the response status is 200 OK + And the response "dashboards[0].title" has the same value as "dashboard.title" + And the response "dashboards[0].id" has the same value as "dashboard.id" + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Restore deleted dashboards returns "Bad Request" response + Given new "RestoreDashboards" request + And body with value {"data": [{"id": "123-abc-456", "type": "dashboard"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Restore deleted dashboards returns "Dashboards Not Found" response + Given new "RestoreDashboards" request + And body with value {"data": [{"id": "123-abc-456", "type": "dashboard"}]} + When the request is sent + Then the response status is 404 Dashboards Not Found + + @team:DataDog/dashboards-backend + Scenario: Restore deleted dashboards returns "No Content" response + Given there is a valid "dashboard" in the system + And the "dashboard" was deleted + And new "RestoreDashboards" request + And body with value {"data": [{"id": "{{ dashboard.id }}", "type": "dashboard"}]} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Revoke a shared dashboard URL returns "OK" response + Given new "DeletePublicDashboard" request + And request contains "token" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Revoke a shared dashboard URL returns "Shared Dashboard Not Found" response + Given new "DeletePublicDashboard" request + And request contains "token" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Shared Dashboard Not Found + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Revoke shared dashboard invitations returns "Not Found" response + Given new "DeletePublicDashboardInvitation" request + And request contains "token" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"email": "test@datadoghq.com"}, "type": "public_dashboard_invitation"}]} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Revoke shared dashboard invitations returns "OK" response + Given new "DeletePublicDashboardInvitation" request + And request contains "token" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"email": "test@datadoghq.com"}, "type": "public_dashboard_invitation"}]} + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Send shared dashboard invitation email returns "Bad Request" response + Given new "SendPublicDashboardInvitation" request + And request contains "token" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"email": "test@datadoghq.com"}, "type": "public_dashboard_invitation"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Send shared dashboard invitation email returns "Not Found" response + Given new "SendPublicDashboardInvitation" request + And request contains "token" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"email": "test@datadoghq.com"}, "type": "public_dashboard_invitation"}]} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Send shared dashboard invitation email returns "OK" response + Given new "SendPublicDashboardInvitation" request + And request contains "token" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"email": "test@datadoghq.com"}, "type": "public_dashboard_invitation"}]} + When the request is sent + Then the response status is 201 OK + + @team:DataDog/reporting-and-sharing + Scenario: Send shared dashboard invitation email returns OK + Given there is a valid "dashboard" in the system + And there is a valid "shared_dashboard" in the system + And new "SendPublicDashboardInvitation" request + And request contains "token" parameter from "shared_dashboard.token" + And body with value {"data": {"attributes": {"email": "{{unique_lower_alnum}}@datadoghq.com"}, "type": "public_dashboard_invitation"}} + When the request is sent + Then the response status is 201 OK + And the response "data.attributes.email" has the same value as "shared_dashboard.share_list[1]" + And the response "data.attributes.share_token" has the same value as "shared_dashboard.token" + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Update a dashboard returns "Bad Request" response + Given new "UpdateDashboard" request + And request contains "dashboard_id" parameter from "REPLACE.ME" + And body with value {"default_timeframe": {"type": "live", "unit": "minute", "value": 4}, "description": null, "is_read_only": false, "layout_type": "ordered", "notify_list": [], "reflow_type": "auto", "restricted_roles": [], "tabs": [{"id": "", "name": "L", "widget_ids": [0]}], "tags": [], "template_variable_presets": [{"template_variables": [{"values": []}]}], "template_variables": [{"available_values": ["my-host", "host1", "host2"], "default": "my-host", "defaults": ["my-host-1", "my-host-2"], "name": "host1", "prefix": "host", "type": "group"}], "title": "", "widgets": [{"definition": {"requests": {"fill": {"q": "avg:system.cpu.user{*}"}}, "type": "hostmap"}}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Update a dashboard returns "Item Not Found" response + Given new "UpdateDashboard" request + And request contains "dashboard_id" parameter from "REPLACE.ME" + And body with value {"default_timeframe": {"type": "live", "unit": "minute", "value": 4}, "description": null, "is_read_only": false, "layout_type": "ordered", "notify_list": [], "reflow_type": "auto", "restricted_roles": [], "tabs": [{"id": "", "name": "L", "widget_ids": [0]}], "tags": [], "template_variable_presets": [{"template_variables": [{"values": []}]}], "template_variables": [{"available_values": ["my-host", "host1", "host2"], "default": "my-host", "defaults": ["my-host-1", "my-host-2"], "name": "host1", "prefix": "host", "type": "group"}], "title": "", "widgets": [{"definition": {"requests": {"fill": {"q": "avg:system.cpu.user{*}"}}, "type": "hostmap"}}]} + When the request is sent + Then the response status is 404 Item Not Found + + @team:DataDog/dashboards-backend + Scenario: Update a dashboard returns "OK" response + Given there is a valid "dashboard" in the system + And new "UpdateDashboard" request + And request contains "dashboard_id" parameter from "dashboard.id" + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","description":"Updated description","widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"apm_issue_stream","query_string":""},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "description" is equal to "Updated description" + + @team:DataDog/dashboards-backend + Scenario: Update a dashboard with tags returns "OK" response + Given there is a valid "dashboard" in the system + And new "UpdateDashboard" request + And request contains "dashboard_id" parameter from "dashboard.id" + And body with value {"layout_type": "ordered", "title": "{{ unique }} with list_stream widget","description":"Updated description", "tags": ["team:foo", "team:bar"], "widgets": [{"definition": {"type": "list_stream","requests": [{"columns":[{"width":"auto","field":"timestamp"}],"query":{"data_source":"apm_issue_stream","query_string":""},"response_format":"event_list"}]}}]} + When the request is sent + Then the response status is 200 OK + And the response "tags" is equal to ["team:foo", "team:bar"] + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Update a shared dashboard returns "Bad Request" response + Given new "UpdatePublicDashboard" request + And request contains "token" parameter from "REPLACE.ME" + And body with value {"global_time": {"live_span": "1h"}, "share_list": ["test@datadoghq.com", "test2@datadoghq.com"], "share_type": "invite"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/reporting-and-sharing + Scenario: Update a shared dashboard returns "Item Not Found" response + Given new "UpdatePublicDashboard" request + And request contains "token" parameter from "REPLACE.ME" + And body with value {"global_time": {"live_span": "1h"}, "share_list": ["test@datadoghq.com", "test2@datadoghq.com"], "share_type": "invite"} + When the request is sent + Then the response status is 404 Item Not Found + + @team:DataDog/reporting-and-sharing + Scenario: Update a shared dashboard returns "OK" response + Given there is a valid "dashboard" in the system + And there is a valid "shared_dashboard" in the system + And new "UpdatePublicDashboard" request + And request contains "token" parameter from "shared_dashboard.token" + And body with value {"global_time": {"live_span": "15m"}, "share_list": [], "share_type": "open"} + When the request is sent + Then the response status is 200 OK + And the response "dashboard_id" has the same value as "dashboard.id" + And the response "dashboard_type" is equal to "custom_timeboard" + And the response "global_time.live_span" is equal to "15m" + And the response "share_type" is equal to "open" + And the response "share_list" has length 0 + + @team:DataDog/reporting-and-sharing + Scenario: Update a shared dashboard with selectable_template_vars returns "OK" response + Given there is a valid "dashboard" in the system + And there is a valid "shared_dashboard" in the system + And new "UpdatePublicDashboard" request + And request contains "token" parameter from "shared_dashboard.token" + And body with value {"global_time": {"live_span": "15m"}, "share_list": [], "share_type": "open", "selectable_template_vars": [{"default_value": "*", "name": "group_by_var", "type": "group", "visible_tags": ["selectableValue1", "selectableValue2"]}]} + When the request is sent + Then the response status is 200 OK + And the response "dashboard_id" has the same value as "dashboard.id" + And the response "dashboard_type" is equal to "custom_timeboard" + And the response "global_time.live_span" is equal to "15m" + And the response "share_type" is equal to "open" + And the response "share_list" has length 0 + And the response "selectable_template_vars[0].name" is equal to "group_by_var" + And the response "selectable_template_vars[0].type" is equal to "group" diff --git a/test-runner-data/features/v1/downtimes.feature b/test-runner-data/features/v1/downtimes.feature new file mode 100644 index 0000000000..fccf366027 --- /dev/null +++ b/test-runner-data/features/v1/downtimes.feature @@ -0,0 +1,203 @@ +@endpoint(downtimes) @endpoint(downtimes-v1) +Feature: Downtimes + [Downtiming](https://docs.datadoghq.com/monitors/notify/downtimes) gives + you greater control over monitor notifications by allowing you to globally + exclude scopes from alerting. Downtime settings, which can be scheduled + with start and end times, prevent all alerting related to specified + Datadog tags. **Note:** `curl` commands require [url + encoding](https://curl.se/docs/url-syntax.html). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Downtimes" API + + @team:DataDog/monitor-app + Scenario: Cancel a downtime returns "Downtime not found" response + Given new "CancelDowntime" request + And request contains "downtime_id" parameter with value 0 + When the request is sent + Then the response status is 404 Downtime not found + + @team:DataDog/monitor-app + Scenario: Cancel a downtime returns "OK" response + Given there is a valid "downtime" in the system + And new "CancelDowntime" request + And request contains "downtime_id" parameter from "downtime.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/monitor-app + Scenario: Cancel downtimes by scope returns "Bad Request" response + Given new "CancelDowntimesByScope" request + And body with value {"scope": "host:myserver"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Cancel downtimes by scope returns "Downtimes not found" response + Given new "CancelDowntimesByScope" request + And body with value {"scope": "test:{{ unique_lower_alnum }}_invalid"} + When the request is sent + Then the response status is 404 Downtimes not found + + @team:DataDog/monitor-app + Scenario: Cancel downtimes by scope returns "OK" response + Given there is a valid "downtime" in the system + And new "CancelDowntimesByScope" request + And body with value {"scope": "{{ downtime.scope[0] }}"} + When the request is sent + Then the response status is 200 OK + And the response "cancelled_ids[0]" has the same value as "downtime.id" + + @team:DataDog/monitor-app + Scenario: Get a downtime returns "Downtime not found" response + Given new "GetDowntime" request + And request contains "downtime_id" parameter with value 0 + When the request is sent + Then the response status is 404 Downtime not found + + @team:DataDog/monitor-app + Scenario: Get a downtime returns "OK" response + Given there is a valid "downtime" in the system + And new "GetDowntime" request + And request contains "downtime_id" parameter from "downtime.id" + When the request is sent + Then the response status is 200 OK + And the response "id" has the same value as "downtime.id" + And the response "message" has the same value as "downtime.message" + + @generated @skip @team:DataDog/monitor-app + Scenario: Get active downtimes for a monitor returns "Bad Request" response + Given new "ListMonitorDowntimes" request + And request contains "monitor_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/monitor-app + Scenario: Get active downtimes for a monitor returns "Monitor Not Found error" response + Given new "ListMonitorDowntimes" request + And request contains "monitor_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Monitor Not Found error + + @generated @skip @team:DataDog/monitor-app + Scenario: Get active downtimes for a monitor returns "OK" response + Given new "ListMonitorDowntimes" request + And request contains "monitor_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/monitor-app + Scenario: Get all downtimes returns "OK" response + Given new "ListDowntimes" request + And request contains "with_creator" parameter with value true + When the request is sent + Then the response status is 200 OK + + @team:DataDog/monitor-app + Scenario: Schedule a downtime once a year + Given new "CreateDowntime" request + And body from file "downtime_recurrence_payload_once_a_year.json" + When the request is sent + Then the response status is 200 OK + And the response "message" is equal to "{{ unique }}" + And the response "monitor_tags[0]" is equal to "tag0" + And the response "recurrence.period" is equal to 1 + And the response "recurrence.type" is equal to "years" + + @team:DataDog/monitor-app + Scenario: Schedule a downtime returns "Bad Request" response + Given new "CreateDowntime" request + And body from file "downtime_with_many_tags_payload.json" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Schedule a downtime returns "OK" response + Given new "CreateDowntime" request + And body with value {"message": "{{ unique }}", "start": {{ timestamp("now") }}, "end": {{ timestamp("now + 1h") }}, "timezone": "Etc/UTC", "scope": ["test:{{ unique_lower_alnum }}"], "recurrence": {"type": "weeks", "period": 1, "week_days": ["Mon", "Tue", "Wed", "Thu", "Fri"], "until_date": {{ timestamp("now + 21d")}} }, "notify_end_states": ["alert", "no data", "warn"], "notify_end_types": ["canceled", "expired"]} + When the request is sent + Then the response status is 200 OK + And the response "message" is equal to "{{ unique }}" + And the response "active" is equal to true + And the response "notify_end_states" array contains value "alert" + And the response "notify_end_types" array contains value "canceled" + + @team:DataDog/monitor-app + Scenario: Schedule a downtime until date + Given new "CreateDowntime" request + And body from file "downtime_recurrence_payload_until_date.json" + When the request is sent + Then the response status is 200 OK + And the response "message" is equal to "{{ unique }}" + And the response "recurrence.period" is equal to 1 + And the response "recurrence.until_date" is equal to {{ timestamp("now + 21d") }} + + @team:DataDog/monitor-app + Scenario: Schedule a downtime with invalid type hours + Given new "CreateDowntime" request + And body from file "downtime_recurrence_payload_invalid_type_hours.json" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Schedule a downtime with invalid weekdays + Given new "CreateDowntime" request + And body from file "downtime_recurrence_payload_invalid_weekdays.json" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Schedule a downtime with mutually exclusive until occurrences and until date properties + Given new "CreateDowntime" request + And body from file "downtime_recurrence_payload_until_occurrences_and_until_date_are_mutually_exclusive.json" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Schedule a downtime with until occurrences + Given new "CreateDowntime" request + And body from file "downtime_recurrence_payload_until_occurrences.json" + When the request is sent + Then the response status is 200 OK + And the response "message" is equal to "{{ unique }}" + And the response "recurrence.period" is equal to 1 + And the response "recurrence.until_occurrences" is equal to 3 + + @team:DataDog/monitor-app + Scenario: Schedule a monitor downtime returns "OK" response + Given there is a valid "monitor" in the system + And new "CreateDowntime" request + And body with value {"message": "{{ unique }}", "start": {{ timestamp("now") }}, "timezone": "Etc/UTC", "scope": ["test:{{ unique_lower_alnum }}"], "monitor_id": {{ monitor.id }}} + When the request is sent + Then the response status is 200 OK + And the response "monitor_id" has the same value as "monitor.id" + + @generated @skip @team:DataDog/monitor-app + Scenario: Update a downtime returns "Bad Request" response + Given new "UpdateDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And body with value {"disabled": false, "end": 1412793983, "message": "Message on the downtime", "monitor_id": 123456, "monitor_tags": ["*"], "mute_first_recovery_notification": false, "notify_end_states": ["alert", "no data", "warn"], "notify_end_types": ["canceled", "expired"], "parent_id": 123, "recurrence": {"period": 1, "rrule": "FREQ=MONTHLY;BYSETPOS=3;BYDAY=WE;INTERVAL=1", "type": "weeks", "until_date": 1447786293, "until_occurrences": 2, "week_days": ["Mon", "Tue"]}, "scope": ["env:staging"], "start": 1412792983, "timezone": "America/New_York"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/monitor-app + Scenario: Update a downtime returns "Downtime not found" response + Given new "UpdateDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And body with value {"disabled": false, "end": 1412793983, "message": "Message on the downtime", "monitor_id": 123456, "monitor_tags": ["*"], "mute_first_recovery_notification": false, "notify_end_states": ["alert", "no data", "warn"], "notify_end_types": ["canceled", "expired"], "parent_id": 123, "recurrence": {"period": 1, "rrule": "FREQ=MONTHLY;BYSETPOS=3;BYDAY=WE;INTERVAL=1", "type": "weeks", "until_date": 1447786293, "until_occurrences": 2, "week_days": ["Mon", "Tue"]}, "scope": ["env:staging"], "start": 1412792983, "timezone": "America/New_York"} + When the request is sent + Then the response status is 404 Downtime not found + + @team:DataDog/monitor-app + Scenario: Update a downtime returns "OK" response + Given there is a valid "downtime" in the system + And new "UpdateDowntime" request + And request contains "downtime_id" parameter from "downtime.id" + And body with value {"message": "{{ unique}}-updated", "mute_first_recovery_notification": true, "notify_end_states": ["alert", "no data", "warn"], "notify_end_types": ["canceled", "expired"]} + When the request is sent + Then the response status is 200 OK + And the response "message" is equal to "{{ unique }}-updated" + And the response "notify_end_states" array contains value "alert" + And the response "notify_end_types" array contains value "canceled" diff --git a/test-runner-data/features/v1/events.feature b/test-runner-data/features/v1/events.feature new file mode 100644 index 0000000000..e1b7d8a0fd --- /dev/null +++ b/test-runner-data/features/v1/events.feature @@ -0,0 +1,80 @@ +@endpoint(events) @endpoint(events-v1) +Feature: Events + The Event Management API allows you to programmatically post events to the + Events Explorer and fetch events from the Events Explorer. See the [Event + Management page](https://docs.datadoghq.com/service_management/events/) + for more information. **Update to Datadog monitor events + `aggregation_key` starting March 1, 2025:** The Datadog monitor events + `aggregation_key` is unique to each Monitor ID. Starting March 1st, this + key will also include Monitor Group, making it unique per *Monitor ID and + Monitor Group*. If you're using monitor events `aggregation_key` in + dashboard queries or the Event API, you must migrate to use `@monitor.id`. + Reach out to [support](https://www.datadoghq.com/support/) if you have any + question. + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "Events" API + + @generated @skip @team:DataDog/monitors-evaluation + Scenario: Get a list of events returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListEvents" request + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/monitors-evaluation + Scenario: Get a list of events returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListEvents" request + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/monitors-evaluation + Scenario: Get an event returns "Item Not Found" response + Given a valid "appKeyAuth" key in the system + And new "GetEvent" request + And request contains "event_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Item Not Found + + @generated @skip @team:DataDog/monitors-evaluation + Scenario: Get an event returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "GetEvent" request + And request contains "event_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip-validation @team:DataDog/monitors-evaluation + Scenario: Post an event in the past returns "Bad Request" response + Given new "CreateEvent" request + And body with value {"title": "{{ unique }}", "text": "A text message.", "date_happened": 1, "tags": ["test:{{ unique_alnum }}"]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/monitors-evaluation + Scenario: Post an event returns "Bad Request" response + Given new "CreateEvent" request + And body with value {"alert_type": "info", "priority": "normal", "tags": ["environment:test"], "text": "Oh boy!", "title": "Did you hear the news today?"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitors-evaluation + Scenario: Post an event returns "OK" response + Given new "CreateEvent" request + And body with value {"title": "{{ unique }}", "text": "A text message.", "tags": ["test:{{ unique_alnum }}"]} + When the request is sent + Then the response status is 202 OK + And the response "event.text" is equal to "A text message." + + @team:DataDog/monitors-evaluation + Scenario: Post an event with a long title returns "OK" response + Given new "CreateEvent" request + And body with value {"title": "{{ unique }} very very very looooooooong looooooooooooong loooooooooooooooooooooong looooooooooooooooooooooooooong title with 100+ characters", "text": "A text message.", "tags": ["test:{{ unique_alnum }}"]} + When the request is sent + Then the response status is 202 OK diff --git a/test-runner-data/features/v1/gcp_integration.feature b/test-runner-data/features/v1/gcp_integration.feature new file mode 100644 index 0000000000..5e6bccf3a7 --- /dev/null +++ b/test-runner-data/features/v1/gcp_integration.feature @@ -0,0 +1,75 @@ +@endpoint(gcp-integration) @endpoint(gcp-integration-v1) +Feature: GCP Integration + Configure your Datadog-Google Cloud Platform (GCP) integration directly + through the Datadog API. Read more about the [Datadog-Google Cloud + Platform integration](https://docs.datadoghq.com/integrations/google_cloud + _platform). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "GCPIntegration" API + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Create a GCP integration returns "Bad Request" response + Given new "CreateGCPIntegration" request + And body with value {"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "client_email": "api-dev@datadog-sandbox.iam.gserviceaccount.com", "client_id": "123456712345671234567", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", "cloud_run_revision_filters": ["$KEY:$VALUE"], "errors": ["*"], "host_filters": "$KEY1:$VALUE1,$KEY2:$VALUE2", "is_cspm_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "private_key": "private_key", "private_key_id": "123456789abcdefghi123456789abcdefghijklm", "project_id": "datadog-apitest", "resource_collection_enabled": true, "token_uri": "https://accounts.google.com/o/oauth2/token", "type": "service_account"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/gcp-integrations + Scenario: Create a GCP integration returns "OK" response + Given new "CreateGCPIntegration" request + And body with value {"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "client_email": "{{unique_hash}}@example.com", "client_id": "{{ timestamp("now") }}{{ timestamp("now") }}0", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", "host_filters": "key:value,filter:example", "cloud_run_revision_filters": ["dr:dre"], "is_cspm_enabled": true, "is_security_command_center_enabled": true, "is_resource_change_collection_enabled": true, "private_key": "private_key", "private_key_id": "123456789abcdefghi123456789abcdefghijklm", "project_id": "datadog-apitest", "resource_collection_enabled": true, "token_uri": "https://accounts.google.com/o/oauth2/token", "type": "service_account"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Delete a GCP integration returns "Bad Request" response + Given new "DeleteGCPIntegration" request + And body with value {"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "client_email": "api-dev@datadog-sandbox.iam.gserviceaccount.com", "client_id": "123456712345671234567", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", "cloud_run_revision_filters": ["$KEY:$VALUE"], "errors": ["*"], "host_filters": "$KEY1:$VALUE1,$KEY2:$VALUE2", "is_cspm_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "private_key": "private_key", "private_key_id": "123456789abcdefghi123456789abcdefghijklm", "project_id": "datadog-apitest", "resource_collection_enabled": true, "token_uri": "https://accounts.google.com/o/oauth2/token", "type": "service_account"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/gcp-integrations + Scenario: Delete a GCP integration returns "OK" response + Given there is a valid "gcp_account" in the system + And new "DeleteGCPIntegration" request + And body with value {"client_email": "{{unique_hash}}@example.com", "client_id": "{{ timestamp("now") }}{{ timestamp("now") }}0", "project_id": "datadog-apitest"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/gcp-integrations + Scenario: List all GCP integrations returns "Bad Request" response + Given new "ListGCPIntegration" request + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/gcp-integrations + Scenario: List all GCP integrations returns "OK" response + Given new "ListGCPIntegration" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/gcp-integrations + Scenario: Update a GCP integration cloud run revision filters returns "OK" response + Given there is a valid "gcp_account" in the system + And new "UpdateGCPIntegration" request + And body with value {"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "client_email": "{{unique_hash}}@example.com", "client_id": "{{ timestamp("now") }}{{ timestamp("now") }}0", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", "host_filters": "key:value,filter:example", "cloud_run_revision_filters": ["merp:derp"], "is_cspm_enabled": true, "is_security_command_center_enabled": true, "is_resource_change_collection_enabled": true, "private_key": "private_key", "private_key_id": "123456789abcdefghi123456789abcdefghijklm", "project_id": "datadog-apitest", "resource_collection_enabled": true, "token_uri": "https://accounts.google.com/o/oauth2/token", "type": "service_account"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Update a GCP integration returns "Bad Request" response + Given new "UpdateGCPIntegration" request + And body with value {"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "client_email": "api-dev@datadog-sandbox.iam.gserviceaccount.com", "client_id": "123456712345671234567", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", "cloud_run_revision_filters": ["$KEY:$VALUE"], "errors": ["*"], "host_filters": "$KEY1:$VALUE1,$KEY2:$VALUE2", "is_cspm_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "private_key": "private_key", "private_key_id": "123456789abcdefghi123456789abcdefghijklm", "project_id": "datadog-apitest", "resource_collection_enabled": true, "token_uri": "https://accounts.google.com/o/oauth2/token", "type": "service_account"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/gcp-integrations + Scenario: Update a GCP integration returns "OK" response + Given there is a valid "gcp_account" in the system + And new "UpdateGCPIntegration" request + And body with value {"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "client_email": "{{unique_hash}}@example.com", "client_id": "{{ timestamp("now") }}{{ timestamp("now") }}0", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", "host_filters": "key:value,filter:example", "is_cspm_enabled": true, "is_security_command_center_enabled": true, "is_resource_change_collection_enabled": true, "private_key": "private_key", "private_key_id": "123456789abcdefghi123456789abcdefghijklm", "project_id": "datadog-apitest", "resource_collection_enabled": true, "token_uri": "https://accounts.google.com/o/oauth2/token", "type": "service_account"} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v1/hosts.feature b/test-runner-data/features/v1/hosts.feature new file mode 100644 index 0000000000..56257ab184 --- /dev/null +++ b/test-runner-data/features/v1/hosts.feature @@ -0,0 +1,85 @@ +@endpoint(hosts) @endpoint(hosts-v1) +Feature: Hosts + Get information about your infrastructure hosts in Datadog, and mute or + unmute any notifications from your hosts. See the [Infrastructure + page](https://docs.datadoghq.com/infrastructure/) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Hosts" API + + @generated @skip @team:DataDog/redapl-hosts + Scenario: Get all hosts for your organization returns "Invalid Parameter Error" response + Given new "ListHosts" request + When the request is sent + Then the response status is 400 Invalid Parameter Error + + @integration-only @team:DataDog/redapl-hosts + Scenario: Get all hosts for your organization returns "OK" response + Given new "ListHosts" request + And request contains "filter" parameter with value "env:ci" + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/redapl-hosts + Scenario: Get all hosts with metadata deserializes successfully + Given new "ListHosts" request + And request contains "include_hosts_metadata" parameter with value true + When the request is sent + Then the response status is 200 OK + And the response "total_returned" is equal to 1 + And the response "host_list[0].meta.platform" is equal to "linux" + And the response "host_list[0].meta.nixV" is equal to ["ubuntu","18.04",""] + And the response "host_list[0].meta.install_method.tool" is equal to "install_script" + And the response "host_list[0].meta.agent_checks[0]" is equal to ["ntp","ntp","ntp:d884b5186b651429","OK","",""] + And the response "host_list[0].meta.gohai" is equal to "{\"cpu\":{\"cache_size\":\"8192 KB\",\"cpu_cores\":\"1\",\"cpu_logical_processors\":\"1\",\"family\":\"6\",\"mhz\":\"2711.998\",\"model\":\"142\",\"model_name\":\"Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz\",\"stepping\":\"10\",\"vendor_id\":\"GenuineIntel\"},\"filesystem\":[{\"kb_size\":\"3966892\",\"mounted_on\":\"/dev\",\"name\":\"udev\"},{\"kb_size\":\"797396\",\"mounted_on\":\"/run\",\"name\":\"tmpfs\"},{\"kb_size\":\"64800356\",\"mounted_on\":\"/\",\"name\":\"/dev/mapper/vagrant--vg-root\"},{\"kb_size\":\"3986968\",\"mounted_on\":\"/dev/shm\",\"name\":\"tmpfs\"},{\"kb_size\":\"5120\",\"mounted_on\":\"/run/lock\",\"name\":\"tmpfs\"},{\"kb_size\":\"3986968\",\"mounted_on\":\"/sys/fs/cgroup\",\"name\":\"tmpfs\"},{\"kb_size\":\"488245288\",\"mounted_on\":\"/vagrant\",\"name\":\"/vagrant\"},{\"kb_size\":\"797392\",\"mounted_on\":\"/run/user/1000\",\"name\":\"tmpfs\"}],\"memory\":{\"swap_total\":\"1003516kB\",\"total\":\"7973940kB\"},\"network\":{\"interfaces\":[{\"ipv4\":\"10.0.2.15\",\"ipv4-network\":\"10.0.2.0/24\",\"ipv6\":\"fe80::a00:27ff:fec2:be11\",\"ipv6-network\":\"fe80::/64\",\"macaddress\":\"08:00:27:c2:be:11\",\"name\":\"eth0\"},{\"ipv4\":\"192.168.122.1\",\"ipv4-network\":\"192.168.122.0/24\",\"macaddress\":\"52:54:00:6f:1c:bf\",\"name\":\"virbr0\"}],\"ipaddress\":\"10.0.2.15\",\"ipaddressv6\":\"fe80::a00:27ff:fec2:be11\",\"macaddress\":\"08:00:27:c2:be:11\"},\"platform\":{\"GOOARCH\":\"amd64\",\"GOOS\":\"linux\",\"goV\":\"1.16.7\",\"hardware_platform\":\"x86_64\",\"hostname\":\"vagrant\",\"kernel_name\":\"Linux\",\"kernel_release\":\"4.15.0-29-generic\",\"kernel_version\":\"#31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018\",\"machine\":\"x86_64\",\"os\":\"GNU/Linux\",\"processor\":\"x86_64\",\"pythonV\":\"2.7.15rc1\"}}" + + @skip-validation @team:DataDog/redapl-hosts + Scenario: Get all hosts with metadata for your organization returns "OK" response + Given new "ListHosts" request + And request contains "include_hosts_metadata" parameter with value true + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/redapl-hosts + Scenario: Get the total number of active hosts returns "Invalid Parameter Error" response + Given new "GetHostTotals" request + When the request is sent + Then the response status is 400 Invalid Parameter Error + + @generated @skip @team:DataDog/redapl-hosts + Scenario: Get the total number of active hosts returns "OK" response + Given new "GetHostTotals" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/redapl-hosts + Scenario: Mute a host returns "Invalid Parameter Error" response + Given new "MuteHost" request + And request contains "host_name" parameter from "REPLACE.ME" + And body with value {"end": 1579098130, "message": "Muting this host for a test!", "override": false} + When the request is sent + Then the response status is 400 Invalid Parameter Error + + @generated @skip @team:DataDog/redapl-hosts + Scenario: Mute a host returns "OK" response + Given new "MuteHost" request + And request contains "host_name" parameter from "REPLACE.ME" + And body with value {"end": 1579098130, "message": "Muting this host for a test!", "override": false} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/redapl-hosts + Scenario: Unmute a host returns "Invalid Parameter Error" response + Given new "UnmuteHost" request + And request contains "host_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Invalid Parameter Error + + @generated @skip @team:DataDog/redapl-hosts + Scenario: Unmute a host returns "OK" response + Given new "UnmuteHost" request + And request contains "host_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v1/ip_ranges.feature b/test-runner-data/features/v1/ip_ranges.feature new file mode 100644 index 0000000000..067c9b6215 --- /dev/null +++ b/test-runner-data/features/v1/ip_ranges.feature @@ -0,0 +1,12 @@ +@endpoint(ip-ranges) @endpoint(ip-ranges-v1) +Feature: IP Ranges + Get a list of IP prefixes belonging to Datadog. + + @team:DataDog/network-edge + Scenario: List IP Ranges returns "OK" response + Given an instance of "IPRanges" API + And new "GetIPRanges" request + When the request is sent + Then the response status is 200 OK + And the response "agents.prefixes_ipv4" has length 1 + And the response "agents.prefixes_ipv6" has length 1 diff --git a/test-runner-data/features/v1/logs.feature b/test-runner-data/features/v1/logs.feature new file mode 100644 index 0000000000..5ae909c3aa --- /dev/null +++ b/test-runner-data/features/v1/logs.feature @@ -0,0 +1,63 @@ +@endpoint(logs) @endpoint(logs-v1) +Feature: Logs + Search your logs and send them to your Datadog platform over HTTP. See the + [Log Management page](https://docs.datadoghq.com/logs/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "Logs" API + + @generated @skip @team:DataDog/logs-app + Scenario: Search logs returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListLogs" request + And body with value {"index": "retention-3,retention-15", "query": "service:web* AND @http.status_code:[200 TO 299]", "sort": "asc", "time": {"from": "2020-02-02T02:02:02.202Z", "to": "2020-02-20T02:02:02.202Z"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-app + Scenario: Search logs returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListLogs" request + And body with value {"index": "retention-3,retention-15", "query": "service:web* AND @http.status_code:[200 TO 299]", "sort": "asc", "time": {"from": "2020-02-02T02:02:02.202Z", "to": "2020-02-20T02:02:02.202Z"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-app + Scenario: Search test logs returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListLogs" request + And body with value {"index": "main", "query": "host:Test*", "sort": "asc", "time": {"from": "{{ timeISO("now - 1h") }}", "timezone": "Europe/Paris", "to": "{{ timeISO("now") }}" }} + When the request is sent + Then the response status is 200 OK + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/event-platform-intake + Scenario: Send deflate logs returns "Response from server (always 200 empty JSON)." response + Given new "SubmitLog" request + And body with value [{"message": "{{ unique }}", "ddtags": "host:{{ unique_alnum }}"}] + And request contains "Content-Encoding" parameter with value "deflate" + When the request is sent + Then the response status is 200 Response from server (always 200 empty JSON). + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/event-platform-intake + Scenario: Send gzip logs returns "Response from server (always 200 empty JSON)." response + Given new "SubmitLog" request + And body with value [{"message": "{{ unique }}", "ddtags": "host:{{ unique_alnum }}"}] + And request contains "Content-Encoding" parameter with value "gzip" + When the request is sent + Then the response status is 200 Response from server (always 200 empty JSON). + + @team:DataDog/event-platform-intake + Scenario: Send logs returns "Response from server (always 200 empty JSON)." response + Given new "SubmitLog" request + And body with value [{"message": "{{ unique }}", "ddtags": "host:{{ unique_alnum }}"}] + When the request is sent + Then the response status is 200 Response from server (always 200 empty JSON). + + @generated @skip @team:DataDog/event-platform-intake + Scenario: Send logs returns "unexpected error" response + Given new "SubmitLog" request + And body with value [{"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}] + When the request is sent + Then the response status is 400 unexpected error diff --git a/test-runner-data/features/v1/logs_pipelines.feature b/test-runner-data/features/v1/logs_pipelines.feature new file mode 100644 index 0000000000..8b584949d9 --- /dev/null +++ b/test-runner-data/features/v1/logs_pipelines.feature @@ -0,0 +1,232 @@ +@endpoint(logs-pipelines) @endpoint(logs-pipelines-v1) +Feature: Logs Pipelines + Pipelines and processors operate on incoming logs, parsing and + transforming them into structured attributes for easier querying. - See + the [pipelines configuration + page](https://app.datadoghq.com/logs/pipelines) for a list of the + pipelines and processors currently configured in web UI. - Additional + API-related information about processors can be found in the [processors + documentation](https://docs.datadoghq.com/logs/log_configuration/processor + s/?tab=api#lookup-processor). - For more information about Pipelines, see + the [pipeline documentation](https://docs.datadoghq.com/logs/log_configu + ration/pipelines). **Notes:** **Grok parsing rules may effect JSON + output and require returned data to be configured before using in a + request.** For example, if you are using the data returned from a request + for another request body, and have a parsing rule that uses a regex + pattern like `\s` for spaces, you will need to configure all escaped + spaces as `%{space}` to use in the body data. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "LogsPipelines" API + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Create a pipeline returns "Bad Request" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "", "processors": [{"grok": {"match_rules": "rule_name_1 foo\nrule_name_2 bar", "support_rules": "rule_name_1 foo\nrule_name_2 bar"}, "is_enabled": false, "samples": [], "source": "message", "type": "grok-parser"}], "tags": []} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Create a pipeline returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "", "processors": [{"grok": {"match_rules": "rule_name_1 foo\nrule_name_2 bar", "support_rules": "rule_name_1 foo\nrule_name_2 bar"}, "is_enabled": false, "samples": [], "source": "message", "type": "grok-parser"}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Map Processor returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayMap", "processors": [{"type": "array-map-processor", "is_enabled": true, "name": "map items", "source": "items", "target": "out", "preserve_source": true, "processors": [{"type": "attribute-remapper", "sources": ["$sourceElem.id"], "target": "$targetElem.uid", "preserve_source": true}, {"type": "string-builder-processor", "template": "item-%{$sourceElem.id}", "target": "$targetElem.label"}]}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Map Processor using arithmetic sub-processor returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayMapArithmetic", "processors": [{"type": "array-map-processor", "is_enabled": true, "name": "double counts", "source": "items", "target": "out", "processors": [{"type": "arithmetic-processor", "expression": "$sourceElem.count * 2", "target": "$targetElem.doubled"}]}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Map Processor using category sub-processor returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayMapCategory", "processors": [{"type": "array-map-processor", "is_enabled": true, "name": "categorize items", "source": "items", "target": "out", "processors": [{"type": "category-processor", "target": "$targetElem.level", "categories": [{"filter": {"query": "@$sourceElem.status:error"}, "name": "error"}, {"filter": {"query": "*"}, "name": "info"}]}]}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Map Processor with preserve_source false returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayMapNoPreserve", "processors": [{"type": "array-map-processor", "is_enabled": true, "name": "map and remove source", "source": "items", "target": "out", "preserve_source": false, "processors": [{"type": "attribute-remapper", "sources": ["$sourceElem.id"], "target": "$targetElem.uid"}]}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Processor Append Operation returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayAppend", "processors": [{"type": "array-processor", "is_enabled": true, "name": "append_ip_to_array", "operation": {"type": "append", "source": "network.client.ip", "target": "sourceIps"}}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Processor Append Operation with preserve_source false returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayAppendNoPreserve", "processors": [{"type": "array-processor", "is_enabled": true, "name": "append_ip_and_remove_source", "operation": {"type": "append", "source": "network.client.ip", "target": "sourceIps", "preserve_source": false}}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Processor Append Operation with preserve_source true returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayAppendPreserve", "processors": [{"type": "array-processor", "is_enabled": true, "name": "append_ip_and_keep_source", "operation": {"type": "append", "source": "network.client.ip", "target": "sourceIps", "preserve_source": true}}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Processor Key Value Operation returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayKeyValue", "processors": [{"type": "array-processor", "is_enabled": true, "name": "extract_kv", "operation": {"type": "key-value", "source": "tags", "key_to_extract": "name", "value_to_extract": "value"}}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Processor Key Value Operation with target and override_on_conflict returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayKeyValueTarget", "processors": [{"type": "array-processor", "is_enabled": true, "name": "extract_kv_to_target", "operation": {"type": "key-value", "source": "tags", "key_to_extract": "name", "value_to_extract": "value", "target": "extracted", "override_on_conflict": true}}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Processor Length Operation returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArrayLength", "processors": [{"type": "array-processor", "is_enabled": true, "name": "count_tags", "operation": {"type": "length", "source": "tags", "target": "tagCount"}}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Array Processor Select Operation returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineArraySelect", "processors": [{"type": "array-processor", "is_enabled": true, "name": "extract_referrer", "operation": {"type": "select", "source": "httpRequest.headers", "target": "referrer", "filter": "name:Referrer", "value_to_extract": "value"}}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Decoder Processor returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testDecoderProcessor", "processors": [{"type": "decoder-processor", "is_enabled": true, "name": "test_decoder", "source": "encoded.field", "target": "decoded.field", "binary_to_text_encoding": "base16", "input_representation": "utf_8"}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Schema Processor and preserve_source false returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testSchemaProcessor", "processors": [{"type": "schema-processor", "is_enabled": true, "name": "Apply OCSF schema for 3001", "schema": {"schema_type": "ocsf", "version": "1.5.0", "class_uid": 3001, "class_name": "Account Change", "profiles": ["cloud", "datetime"]}, "mappers": [{"type": "schema-category-mapper", "name": "activity_id and activity_name", "categories": [{"filter": {"query": "@eventName:(*Create*)"}, "name": "Create", "id": 1}, {"filter": {"query": "@eventName:(ChangePassword OR PasswordUpdated)"}, "name": "Password Change", "id": 3}, {"filter": {"query": "@eventName:(*Attach*)"}, "name": "Attach Policy", "id": 7}, {"filter": {"query": "@eventName:(*Detach* OR *Remove*)"}, "name": "Detach Policy", "id": 8}, {"filter": {"query": "@eventName:(*Delete*)"}, "name": "Delete", "id": 6}, {"filter": {"query": "@eventName:*"}, "name": "Other", "id": 99}], "targets": {"name": "ocsf.activity_name", "id": "ocsf.activity_id"}, "fallback": {"values": {"ocsf.activity_id": "99", "ocsf.activity_name": "Other"}, "sources": {"ocsf.activity_name": ["eventName"]}}}, {"type": "schema-category-mapper", "name": "status", "categories": [{"filter": {"query": "-@errorCode:*"}, "id": 1, "name": "Success"}, {"filter": {"query": "@errorCode:*"}, "id": 2, "name": "Failure"}], "targets": {"id": "ocsf.status_id", "name": "ocsf.status"}}, {"type": "schema-category-mapper", "name": "Set default severity", "categories": [{"filter": {"query": "@eventName:*"}, "name": "Informational", "id": 1}], "targets": {"name": "ocsf.severity", "id": "ocsf.severity_id"}}, {"type": "schema-remapper", "name": "Map userIdentity to ocsf.user.uid", "sources": ["userIdentity.principalId", "responseElements.role.roleId", "responseElements.user.userId"], "target": "ocsf.user.uid", "preserve_source": false}, {"type": "schema-remapper", "name": "Map userName to ocsf.user.name", "sources": ["requestParameters.userName", "responseElements.role.roleName", "requestParameters.roleName", "responseElements.user.userName"], "target": "ocsf.user.name", "preserve_source": false}, {"type": "schema-remapper", "name": "Map api to ocsf.api", "sources": ["api"], "target": "ocsf.api", "preserve_source": false}, {"type": "schema-remapper", "name": "Map user to ocsf.user", "sources": ["user"], "target": "ocsf.user", "preserve_source": false}, {"type": "schema-remapper", "name": "Map actor to ocsf.actor", "sources": ["actor"], "target": "ocsf.actor", "preserve_source": false}, {"type": "schema-remapper", "name": "Map cloud to ocsf.cloud", "sources": ["cloud"], "target": "ocsf.cloud", "preserve_source": false}, {"type": "schema-remapper", "name": "Map http_request to ocsf.http_request", "sources": ["http_request"], "target": "ocsf.http_request", "preserve_source": false}, {"type": "schema-remapper", "name": "Map metadata to ocsf.metadata", "sources": ["metadata"], "target": "ocsf.metadata", "preserve_source": false}, {"type": "schema-remapper", "name": "Map time to ocsf.time", "sources": ["time"], "target": "ocsf.time", "preserve_source": false}, {"type": "schema-remapper", "name": "Map src_endpoint to ocsf.src_endpoint", "sources": ["src_endpoint"], "target": "ocsf.src_endpoint", "preserve_source": false}, {"type": "schema-remapper", "name": "Map severity to ocsf.severity", "sources": ["severity"], "target": "ocsf.severity", "preserve_source": false}, {"type": "schema-remapper", "name": "Map severity_id to ocsf.severity_id", "sources": ["severity_id"], "target": "ocsf.severity_id", "preserve_source": false}]}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Schema Processor and preserve_source true returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testSchemaProcessor", "processors": [{"type": "schema-processor", "is_enabled": true, "name": "Apply OCSF schema for 3001", "schema": {"schema_type": "ocsf", "version": "1.5.0", "class_uid": 3001, "class_name": "Account Change", "profiles": ["cloud", "datetime"]}, "mappers": [{"type": "schema-category-mapper", "name": "activity_id and activity_name", "categories": [{"filter": {"query": "@eventName:(*Create*)"}, "name": "Create", "id": 1}, {"filter": {"query": "@eventName:(ChangePassword OR PasswordUpdated)"}, "name": "Password Change", "id": 3}, {"filter": {"query": "@eventName:(*Attach*)"}, "name": "Attach Policy", "id": 7}, {"filter": {"query": "@eventName:(*Detach* OR *Remove*)"}, "name": "Detach Policy", "id": 8}, {"filter": {"query": "@eventName:(*Delete*)"}, "name": "Delete", "id": 6}, {"filter": {"query": "@eventName:*"}, "name": "Other", "id": 99}], "targets": {"name": "ocsf.activity_name", "id": "ocsf.activity_id"}, "fallback": {"values": {"ocsf.activity_id": "99", "ocsf.activity_name": "Other"}, "sources": {"ocsf.activity_name": ["eventName"]}}}, {"type": "schema-category-mapper", "name": "status", "categories": [{"filter": {"query": "-@errorCode:*"}, "id": 1, "name": "Success"}, {"filter": {"query": "@errorCode:*"}, "id": 2, "name": "Failure"}], "targets": {"id": "ocsf.status_id", "name": "ocsf.status"}}, {"type": "schema-category-mapper", "name": "Set default severity", "categories": [{"filter": {"query": "@eventName:*"}, "name": "Informational", "id": 1}], "targets": {"name": "ocsf.severity", "id": "ocsf.severity_id"}}, {"type": "schema-remapper", "name": "Map userIdentity to ocsf.user.uid", "sources": ["userIdentity.principalId", "responseElements.role.roleId", "responseElements.user.userId"], "target": "ocsf.user.uid", "preserve_source": true}, {"type": "schema-remapper", "name": "Map userName to ocsf.user.name", "sources": ["requestParameters.userName", "responseElements.role.roleName", "requestParameters.roleName", "responseElements.user.userName"], "target": "ocsf.user.name", "preserve_source": true}, {"type": "schema-remapper", "name": "Map api to ocsf.api", "sources": ["api"], "target": "ocsf.api", "preserve_source": true}, {"type": "schema-remapper", "name": "Map user to ocsf.user", "sources": ["user"], "target": "ocsf.user", "preserve_source": true}, {"type": "schema-remapper", "name": "Map actor to ocsf.actor", "sources": ["actor"], "target": "ocsf.actor", "preserve_source": true}, {"type": "schema-remapper", "name": "Map cloud to ocsf.cloud", "sources": ["cloud"], "target": "ocsf.cloud", "preserve_source": true}, {"type": "schema-remapper", "name": "Map http_request to ocsf.http_request", "sources": ["http_request"], "target": "ocsf.http_request", "preserve_source": true}, {"type": "schema-remapper", "name": "Map metadata to ocsf.metadata", "sources": ["metadata"], "target": "ocsf.metadata", "preserve_source": true}, {"type": "schema-remapper", "name": "Map time to ocsf.time", "sources": ["time"], "target": "ocsf.time", "preserve_source": true}, {"type": "schema-remapper", "name": "Map src_endpoint to ocsf.src_endpoint", "sources": ["src_endpoint"], "target": "ocsf.src_endpoint", "preserve_source": true}, {"type": "schema-remapper", "name": "Map severity to ocsf.severity", "sources": ["severity"], "target": "ocsf.severity", "preserve_source": true}, {"type": "schema-remapper", "name": "Map severity_id to ocsf.severity_id", "sources": ["severity_id"], "target": "ocsf.severity_id", "preserve_source": true}]}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with Span Id Remapper returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipeline", "processors": [{"type": "span-id-remapper", "is_enabled" : true, "name" : "test_filter", "sources" : [ "dd.span_id"] }], "tags": []} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with nested pipeline processor returns "OK" response + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testPipelineWithNested", "processors": [{"type": "pipeline", "is_enabled": true, "name": "nested_pipeline_with_metadata", "filter": {"query": "env:production"}, "tags": ["env:prod", "type:nested"], "description": "This is a nested pipeline for production logs"}], "tags": ["team:test"], "description": "Pipeline containing nested processor with tags and description"} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-onboarding + Scenario: Create a pipeline with schema processor + Given new "CreateLogsPipeline" request + And body with value {"filter": {"query": "source:python"}, "name": "testSchemaProcessor", "processors": [{"type": "schema-processor", "is_enabled": true, "name": "Apply OCSF schema for 3001", "schema": {"schema_type": "ocsf", "version": "1.5.0", "class_uid": 3001, "class_name": "Account Change", "profiles": ["cloud", "datetime"]}, "mappers": [{"type": "schema-category-mapper", "name": "activity_id and activity_name", "categories": [{"filter": {"query": "@eventName:(*Create*)"}, "name": "Create", "id": 1}, {"filter": {"query": "@eventName:(ChangePassword OR PasswordUpdated)"}, "name": "Password Change", "id": 3}, {"filter": {"query": "@eventName:(*Attach*)"}, "name": "Attach Policy", "id": 7}, {"filter": {"query": "@eventName:(*Detach* OR *Remove*)"}, "name": "Detach Policy", "id": 8}, {"filter": {"query": "@eventName:(*Delete*)"}, "name": "Delete", "id": 6}, {"filter": {"query": "@eventName:*"}, "name": "Other", "id": 99}], "targets": {"name": "ocsf.activity_name", "id": "ocsf.activity_id"}, "fallback": {"values": {"ocsf.activity_id": "99", "ocsf.activity_name": "Other"}, "sources": {"ocsf.activity_name": ["eventName"]}}}, {"type": "schema-category-mapper", "name": "status", "categories": [{"filter": {"query": "-@errorCode:*"}, "id": 1, "name": "Success"}, {"filter": {"query": "@errorCode:*"}, "id": 2, "name": "Failure"}], "targets": {"id": "ocsf.status_id", "name": "ocsf.status"}}, {"type": "schema-category-mapper", "name": "Set default severity", "categories": [{"filter": {"query": "@eventName:*"}, "name": "Informational", "id": 1}], "targets": {"name": "ocsf.severity", "id": "ocsf.severity_id"}}, {"type": "schema-remapper", "name": "Map userIdentity to ocsf.user.uid", "sources": ["userIdentity.principalId", "responseElements.role.roleId", "responseElements.user.userId"], "target": "ocsf.user.uid"}, {"type": "schema-remapper", "name": "Map userName to ocsf.user.name", "sources": ["requestParameters.userName", "responseElements.role.roleName", "requestParameters.roleName", "responseElements.user.userName"], "target": "ocsf.user.name"}, {"type": "schema-remapper", "name": "Map api to ocsf.api", "sources": ["api"], "target": "ocsf.api"}, {"type": "schema-remapper", "name": "Map user to ocsf.user", "sources": ["user"], "target": "ocsf.user"}, {"type": "schema-remapper", "name": "Map actor to ocsf.actor", "sources": ["actor"], "target": "ocsf.actor"}, {"type": "schema-remapper", "name": "Map cloud to ocsf.cloud", "sources": ["cloud"], "target": "ocsf.cloud"}, {"type": "schema-remapper", "name": "Map http_request to ocsf.http_request", "sources": ["http_request"], "target": "ocsf.http_request"}, {"type": "schema-remapper", "name": "Map metadata to ocsf.metadata", "sources": ["metadata"], "target": "ocsf.metadata"}, {"type": "schema-remapper", "name": "Map time to ocsf.time", "sources": ["time"], "target": "ocsf.time"}, {"type": "schema-remapper", "name": "Map src_endpoint to ocsf.src_endpoint", "sources": ["src_endpoint"], "target": "ocsf.src_endpoint"}, {"type": "schema-remapper", "name": "Map severity to ocsf.severity", "sources": ["severity"], "target": "ocsf.severity"}, {"type": "schema-remapper", "name": "Map severity_id to ocsf.severity_id", "sources": ["severity_id"], "target": "ocsf.severity_id"}]}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Delete a pipeline returns "Bad Request" response + Given new "DeleteLogsPipeline" request + And request contains "pipeline_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Delete a pipeline returns "OK" response + Given new "DeleteLogsPipeline" request + And request contains "pipeline_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Get a pipeline returns "Bad Request" response + Given new "GetLogsPipeline" request + And request contains "pipeline_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Get a pipeline returns "OK" response + Given new "GetLogsPipeline" request + And request contains "pipeline_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Get all pipelines returns "OK" response + Given new "ListLogsPipelines" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Get pipeline order returns "OK" response + Given new "GetLogsPipelineOrder" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Update a pipeline returns "Bad Request" response + Given new "UpdateLogsPipeline" request + And request contains "pipeline_id" parameter from "REPLACE.ME" + And body with value {"filter": {"query": "source:python"}, "name": "", "processors": [{"grok": {"match_rules": "rule_name_1 foo\nrule_name_2 bar", "support_rules": "rule_name_1 foo\nrule_name_2 bar"}, "is_enabled": false, "samples": [], "source": "message", "type": "grok-parser"}], "tags": []} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Update a pipeline returns "OK" response + Given new "UpdateLogsPipeline" request + And request contains "pipeline_id" parameter from "REPLACE.ME" + And body with value {"filter": {"query": "source:python"}, "name": "", "processors": [{"grok": {"match_rules": "rule_name_1 foo\nrule_name_2 bar", "support_rules": "rule_name_1 foo\nrule_name_2 bar"}, "is_enabled": false, "samples": [], "source": "message", "type": "grok-parser"}], "tags": []} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Update pipeline order returns "Bad Request" response + Given new "UpdateLogsPipelineOrder" request + And body with value {"pipeline_ids": ["tags", "org_ids", "products"]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Update pipeline order returns "OK" response + Given new "UpdateLogsPipelineOrder" request + And body with value {"pipeline_ids": ["tags", "org_ids", "products"]} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-onboarding + Scenario: Update pipeline order returns "Unprocessable Entity" response + Given new "UpdateLogsPipelineOrder" request + And body with value {"pipeline_ids": ["tags", "org_ids", "products"]} + When the request is sent + Then the response status is 422 Unprocessable Entity diff --git a/test-runner-data/features/v1/metrics.feature b/test-runner-data/features/v1/metrics.feature new file mode 100644 index 0000000000..578439f7ac --- /dev/null +++ b/test-runner-data/features/v1/metrics.feature @@ -0,0 +1,184 @@ +@endpoint(metrics) @endpoint(metrics-v1) +Feature: Metrics + The metrics endpoint allows you to: - Post metrics data so it can be + graphed on Datadog’s dashboards - Query metrics from any time period - + Modify tag configurations for metrics - View tags and volumes for metrics + **Note**: A graph can only contain a set number of points and as the + timeframe over which a metric is viewed increases, aggregation between + points occurs to stay below that set number. The Post, Patch, and Delete + `manage_tags` API methods can only be performed by a user who has the + `Manage Tags for Metrics` permission. See the [Metrics + page](https://docs.datadoghq.com/metrics/) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "Metrics" API + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Edit metric metadata returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "UpdateMetricMetadata" request + And request contains "metric_name" parameter from "REPLACE.ME" + And body with value {"per_unit": "second", "type": "count", "unit": "byte"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Edit metric metadata returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "UpdateMetricMetadata" request + And request contains "metric_name" parameter from "REPLACE.ME" + And body with value {"per_unit": "second", "type": "count", "unit": "byte"} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Edit metric metadata returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "UpdateMetricMetadata" request + And request contains "metric_name" parameter from "REPLACE.ME" + And body with value {"per_unit": "second", "type": "count", "unit": "byte"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Get active metrics list returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListActiveMetrics" request + And request contains "from" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Get active metrics list returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListActiveMetrics" request + And request contains "from" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Get metric metadata returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "GetMetricMetadata" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Get metric metadata returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "GetMetricMetadata" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Query timeseries points returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "QueryMetrics" request + And request contains "from" parameter from "REPLACE.ME" + And request contains "to" parameter from "REPLACE.ME" + And request contains "query" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Query timeseries points returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryMetrics" request + And request contains "from" parameter with value {{ timestamp("now - 1d") }} + And request contains "to" parameter with value {{ timestamp("now") }} + And request contains "query" parameter with value "system.cpu.idle{*}" + When the request is sent + Then the response status is 200 OK + And the response "status" is equal to "ok" + And the response "query" is equal to "system.cpu.idle{*}" + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Search metrics returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListMetrics" request + And request contains "q" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience @team:DataDog/metrics-index @team:DataDog/metrics-intake @team:DataDog/timeseries-query + Scenario: Search metrics returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListMetrics" request + And request contains "q" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/metrics-intake-edge + Scenario: Submit deflate distribution points returns "Payload accepted" response + Given new "SubmitDistributionPoints" request + And body with value {"series": [{"metric": "system.load.1.dist", "points": [[{{ timestamp("now") }}, [1.0, 2.0]]]}]} + And request contains "Content-Encoding" parameter with value "deflate" + When the request is sent + Then the response status is 202 Payload accepted + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/metrics-intake + Scenario: Submit deflate metrics returns "Payload accepted" response + Given new "SubmitMetrics" request + And body with value {"series": [{"metric": "system.load.1", "type": "gauge", "points": [[{{ timestamp("now") }}, 1.1]], "tags": ["test:{{ unique_alnum }}"]}]} + And request contains "Content-Encoding" parameter with value "deflate" + When the request is sent + Then the response status is 202 Payload accepted + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/metrics-intake-edge + Scenario: Submit distribution points returns "Bad Request" response + Given new "SubmitDistributionPoints" request + And body with value {"series": [{"metric": "system.load.1.dist", "points": [[1475317847.0, 1.0]]}]} + When the request is sent + Then the response status is 400 Bad Request + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/metrics-intake-edge + Scenario: Submit distribution points returns "Payload accepted" response + Given new "SubmitDistributionPoints" request + And body with value {"series": [{"metric": "system.load.1.dist", "points": [[{{ timestamp("now") }}, [1.0, 2.0]]]}]} + When the request is sent + Then the response status is 202 Payload accepted + + @generated @skip @team:DataDog/metrics-intake-edge + Scenario: Submit distribution points returns "Payload too large" response + Given new "SubmitDistributionPoints" request + And body with value {"series": [{"metric": "system.load.1", "points": [[1475317847.0, [1.0, 2.0]]]}]} + When the request is sent + Then the response status is 413 Payload too large + + @generated @skip @team:DataDog/metrics-intake-edge + Scenario: Submit distribution points returns "Request timeout" response + Given new "SubmitDistributionPoints" request + And body with value {"series": [{"metric": "system.load.1", "points": [[1475317847.0, [1.0, 2.0]]]}]} + When the request is sent + Then the response status is 408 Request timeout + + @skip @team:DataDog/metrics-intake + Scenario: Submit metrics returns "Bad Request" response + Given new "SubmitMetrics" request + And body with value "invalid" + When the request is sent + Then the response status is 400 Bad Request + + @skip-validation @team:DataDog/metrics-intake + Scenario: Submit metrics returns "Payload accepted" response + Given new "SubmitMetrics" request + And body with value {"series": [{"metric": "system.load.1", "type": "gauge", "points": [[{{ timestamp("now") }}, 1.1]], "tags": ["test:{{ unique_alnum }}"]}]} + When the request is sent + Then the response status is 202 Payload accepted + + @generated @skip @team:DataDog/metrics-intake + Scenario: Submit metrics returns "Payload too large" response + Given new "SubmitMetrics" request + And body with value {"series": [{"metric": "system.load.1", "points": [[1475317847.0, 0.7]]}]} + When the request is sent + Then the response status is 413 Payload too large + + @generated @skip @team:DataDog/metrics-intake + Scenario: Submit metrics returns "Request timeout" response + Given new "SubmitMetrics" request + And body with value {"series": [{"metric": "system.load.1", "points": [[1475317847.0, 0.7]]}]} + When the request is sent + Then the response status is 408 Request timeout diff --git a/test-runner-data/features/v1/monitors.feature b/test-runner-data/features/v1/monitors.feature new file mode 100644 index 0000000000..9fc73243c7 --- /dev/null +++ b/test-runner-data/features/v1/monitors.feature @@ -0,0 +1,413 @@ +@endpoint(monitors) @endpoint(monitors-v1) +Feature: Monitors + [Monitors](https://docs.datadoghq.com/monitors) allow you to watch a + metric or check that you care about and notifies your team when a defined + threshold has exceeded. For more information, see [Creating + Monitors](https://docs.datadoghq.com/monitors/create/types/). **Note:** + `curl` commands require [url encoding](https://curl.se/docs/url- + syntax.html). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Monitors" API + + @generated @skip @team:DataDog/monitor-app + Scenario: Check if a monitor can be deleted returns "Bad Request" response + Given new "CheckCanDeleteMonitor" request + And request contains "monitor_ids" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/monitor-app + Scenario: Check if a monitor can be deleted returns "Deletion conflict error" response + Given new "CheckCanDeleteMonitor" request + And request contains "monitor_ids" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Deletion conflict error + + @team:DataDog/monitor-app + Scenario: Check if a monitor can be deleted returns "OK" response + Given there is a valid "monitor" in the system + And new "CheckCanDeleteMonitor" request + And request contains "monitor_ids" parameter with value [{{monitor.id}}] + When the request is sent + Then the response status is 200 OK + And the response "data.ok[0]" has the same value as "monitor.id" + + @team:DataDog/monitor-app + Scenario: Create a Cost Monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "Example Monitor", "type": "cost alert", "query": "formula(\"exclude_null(query1)\").last(\"7d\").anomaly(direction=\"above\", threshold=10) >= 5", "message": "some message Notify: @hipchat-channel", "tags": ["test:examplemonitor", "env:ci"], "priority": 3, "options": {"thresholds": {"critical": 5, "warning": 3}, "variables": [{"data_source": "cloud_cost", "query": "sum:aws.cost.net.amortized.shared.resources.allocated{aws_product IN (amplify ,athena, backup, bedrock ) } by {aws_product}.rollup(sum, 86400)", "name": "query1", "aggregator": "sum"}], "include_tags": true}} + 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 + And body with value {"name": "{{ unique }}", "type": "data-quality alert", "query": "formula(\"query1\").last(\"5m\") > 100", "message": "Data quality alert triggered", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"], "priority": 3, "options": {"thresholds": {"critical": 100}, "variables": [{"name": "query1", "data_source": "data_quality_metrics", "measure": "row_count", "filter": "search for column where `database:production AND table:users`", "group_by": ["entity_id"]}]}} + 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-quality alert" + + @team:DataDog/monitor-app + Scenario: Create a Data Quality monitor with sensitivity returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}", "type": "data-quality alert", "query": "formula(\"query1\").last(\"5m\") > 100", "message": "Data quality alert triggered", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"], "priority": 3, "options": {"thresholds": {"critical": 100}, "variables": [{"name": "query1", "data_source": "data_quality_metrics", "measure": "row_count", "filter": "search for column where `database:production AND table:users`", "group_by": ["entity_id"], "monitor_options": {"sensitivity": 2.5}}]}} + 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-quality alert" + And the response "options.variables[0].monitor_options.sensitivity" is equal to 2.5 + + @team:DataDog/monitor-app + Scenario: Create a RUM formula and functions monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}","type": "rum alert","query": "formula(\"query2 / query1 * 100\").last(\"15m\") >= 0.8","message": "some message Notify: @hipchat-channel", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"],"priority": 3,"options":{"thresholds":{"critical":0.8},"variables":[{"data_source": "rum","name": "query2","search": {"query": ""},"indexes": ["*"],"compute": {"aggregation": "count"},"group_by": []}, {"data_source": "rum","name": "query1","search": {"query": "status:error"},"indexes": ["*"],"compute": {"aggregation": "count"},"group_by": []}]}} + 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 "rum alert" + And the response "draft_status" is equal to "published" + + @team:DataDog/monitor-app + Scenario: Create a ci-pipelines formula and functions monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}","type": "ci-pipelines alert","query": "formula(\"query1 / query2 * 100\").last(\"15m\") >= 0.8","message": "some message Notify: @hipchat-channel","tags": ["test:{{ unique_lower_alnum }}", "env:ci"],"priority": 3,"options": {"thresholds": {"critical": 0.8},"variables": [{"data_source": "ci_pipelines","name": "query1","search": {"query": "@ci.status:error"},"indexes": ["*"],"compute": {"aggregation": "count"},"group_by": []},{"data_source": "ci_pipelines","name": "query2","search": {"query": ""},"indexes": ["*"],"compute": {"aggregation": "count"},"group_by": []}]}} + 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 "ci-pipelines alert" + And the response "query" is equal to "formula(\"query1 / query2 * 100\").last(\"15m\") >= 0.8" + + @team:DataDog/monitor-app + Scenario: Create a ci-pipelines monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}","type": "ci-pipelines alert","query": "ci-pipelines(\"ci_level:pipeline @git.branch:staging* @ci.status:error\").rollup(\"count\").by(\"@git.branch,@ci.pipeline.name\").last(\"5m\") >= 1","message": "some message Notify: @hipchat-channel", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"],"priority": 3,"options":{"thresholds":{"critical":1}}} + 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 "ci-pipelines alert" + And the response "query" is equal to "ci-pipelines(\"ci_level:pipeline @git.branch:staging* @ci.status:error\").rollup(\"count\").by(\"@git.branch,@ci.pipeline.name\").last(\"5m\") >= 1" + + @team:DataDog/monitor-app + Scenario: Create a ci-tests formula and functions monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}","type": "ci-tests alert","query": "formula(\"query1 / query2 * 100\").last(\"15m\") >= 0.8","message": "some message Notify: @hipchat-channel","tags": ["test:{{ unique_lower_alnum }}", "env:ci"],"priority": 3,"options": {"thresholds": {"critical": 0.8},"variables": [{"data_source": "ci_tests","name": "query1","search": {"query": "@test.status:fail"},"indexes": ["*"],"compute": {"aggregation": "count"},"group_by": []},{"data_source": "ci_tests","name": "query2","search": {"query": ""},"indexes": ["*"],"compute": {"aggregation": "count"},"group_by": []}]}} + 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 "ci-tests alert" + And the response "query" is equal to "formula(\"query1 / query2 * 100\").last(\"15m\") >= 0.8" + + @team:DataDog/monitor-app + Scenario: Create a ci-tests monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}","type": "ci-tests alert","query": "ci-tests(\"type:test @git.branch:staging* @test.status:fail\").rollup(\"count\").by(\"@test.name\").last(\"5m\") >= 1","message": "some message Notify: @hipchat-channel", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"],"priority": 3,"options":{"thresholds":{"critical":1}}} + 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 "ci-tests alert" + And the response "query" is equal to "ci-tests(\"type:test @git.branch:staging* @test.status:fail\").rollup(\"count\").by(\"@test.name\").last(\"5m\") >= 1" + + @team:DataDog/monitor-app + Scenario: Create a metric monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}", "type": "metric alert", "query": "avg(current_1mo):avg:system.load.5{*} > 0.5", "message": "some message Notify: @hipchat-channel", "options":{"thresholds":{"critical":0.5}, "scheduling_options":{"evaluation_window":{"day_starts":"04:00", "month_starts":1}}}} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "query" is equal to "avg(current_1mo):avg:system.load.5{*} > 0.5" + + @team:DataDog/monitor-app + Scenario: Create a metric monitor with a custom schedule returns "OK" response + Given new "CreateMonitor" request + And body with value {"message":"some message Notify: @hipchat-channel","name":"{{ unique }}","query":"avg(current_1mo):avg:system.load.5{*} > 0.5","tags":[],"options":{"thresholds":{"critical":0.5},"notify_audit":false,"include_tags":false,"on_missing_data":"default","scheduling_options":{"evaluation_window":{"day_starts":"04:00", "month_starts":1},"custom_schedule":{"recurrences":[{"rrule":"FREQ=DAILY;INTERVAL=1","timezone":"America/Los_Angeles","start":"2024-10-26T09:13:00"}]}}},"type":"query alert", "draft_status": "published"} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "draft_status" is equal to "published" + And the response "options.scheduling_options.custom_schedule.recurrences[0].rrule" is equal to "FREQ=DAILY;INTERVAL=1" + And the response "options.scheduling_options.custom_schedule.recurrences[0].start" is equal to "2024-10-26T09:13:00" + And the response "options.scheduling_options.custom_schedule.recurrences[0].timezone" is equal to "America/Los_Angeles" + + @team:DataDog/monitor-app + Scenario: Create a monitor returns "Bad Request" response + Given new "CreateMonitor" request + And body with value {"type": "log alert", "query": "query"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Create a monitor returns "OK" response + Given there is a valid "role" in the system + And new "CreateMonitor" request + And body with value {"name": "{{ unique }}", "type": "log alert", "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", "message": "some message Notify: @hipchat-channel", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"], "priority": 3, "restricted_roles": ["{{ role.data.id }}"]} + 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 "log alert" + And the response "query" is equal to "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2" + + @team:DataDog/monitor-app + Scenario: Create a monitor with aggregate augmented query variables returns "OK" response + Given new "CreateMonitor" request + And body with value {"name":"{{ unique }}","type":"query alert","query":"formula(\"query1\").rollup(\"sum\").last(\"5m\") > 124","message":"test message","options":{"thresholds":{"critical":124},"variables":[{"data_source":"aggregate_augmented_query","name":"query1","group_by":[{"facet":"org_id"},{"facet":"name"}],"compute":[{"name":"compute_result","aggregation":"max"}],"augment_query":{"name":"filter_query","data_source":"reference_table","table_name":"test_table","columns":[{"name":"org_id"},{"name":"name"}]},"base_query":{"data_source":"metrics","name":"query1","query":"avg:dd{*} by {org_id}.as_count()"},"join_condition":{"augment_attribute":"org_id","base_attribute":"org_id","join_type":"inner"}}]}} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "options.variables[0].data_source" is equal to "aggregate_augmented_query" + And the response "options.variables[0].join_condition.join_type" is equal to "inner" + + @team:DataDog/monitor-app + Scenario: Create a monitor with aggregate filtered query variables returns "OK" response + Given new "CreateMonitor" request + And body with value {"name":"{{ unique }}","type":"query alert","query":"formula(\"query1\").rollup(\"sum\").last(\"5m\") > 100","message":"test message","options":{"thresholds":{"critical":100},"variables":[{"data_source":"aggregate_filtered_query","name":"query1","base_query":{"data_source":"metrics","name":"query1","query":"max:container.cpu.usage{*} by {kube_cluster_name}.rollup(max)"},"filter_query":{"name":"filter_query","data_source":"reference_table","table_name":"test_table","columns":[{"name":"cluster_name"}]},"filters":[{"base_attribute":"kube_cluster_name","filter_attribute":"cluster_name"}]}]}} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "options.variables[0].data_source" is equal to "aggregate_filtered_query" + And the response "options.variables[0].filters[0].base_attribute" is equal to "kube_cluster_name" + + @team:DataDog/monitor-app + Scenario: Create a monitor with assets returns "OK" response + Given new "CreateMonitor" request + And body with value {"assets": [{"category": "runbook", "name": "Monitor Runbook", "resource_key": "12345", "resource_type": "notebook", "url": "/notebooks/12345"}], "name": "{{ unique }}", "type": "metric alert", "query": "avg(current_1mo):avg:system.load.5{*} > 0.5", "message": "some message Notify: @hipchat-channel", "options":{"thresholds":{"critical":0.5}, "scheduling_options":{"evaluation_window":{"day_starts":"04:00", "month_starts":1}}}} + When the request is sent + Then the response status is 200 OK + And the response "assets[0].category" is equal to "runbook" + And the response "assets[0].name" is equal to "Monitor Runbook" + And the response "assets[0].resource_key" is equal to "12345" + And the response "assets[0].resource_type" is equal to "notebook" + And the response "assets[0].url" is equal to "/notebooks/12345" + + @team:DataDog/monitor-app + Scenario: Create an Error Tracking monitor returns "OK" response + Given new "CreateMonitor" request + And body from file "monitor_error_tracking_alert_payload.json" + 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 "error-tracking alert" + And the response "query" is equal to "error-tracking-rum(\"service:foo AND @error.source:source\").rollup(\"count\").by(\"@issue.id\").last(\"1h\") >= 1" + And the response "draft_status" is equal to "draft" + + @team:DataDog/monitor-app + Scenario: Create an LLM Observability monitor returns "OK" response + Given new "CreateMonitor" request + And body with value {"name": "{{ unique }}", "type": "llm-observability alert", "query": "llm-observability(\"*\").rollup(\"count\").last(\"2h\") > 0", "message": "LLM observability alert triggered", "tags": ["test:{{ unique_lower_alnum }}", "env:ci"], "options": {"thresholds": {"critical": 0}, "include_tags": true, "notify_audit": false}} + 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 "llm-observability alert" + + @generated @skip @team:DataDog/monitor-app + Scenario: Delete a monitor returns "Bad Request" response + Given new "DeleteMonitor" request + And request contains "monitor_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Delete a monitor returns "Item not found error" response + Given new "DeleteMonitor" request + And request contains "monitor_id" parameter with value 0 + When the request is sent + Then the response status is 404 Item not found error + + @team:DataDog/monitor-app + Scenario: Delete a monitor returns "OK" response + Given there is a valid "monitor" in the system + And new "DeleteMonitor" request + And request contains "monitor_id" parameter from "monitor.id" + When the request is sent + Then the response status is 200 OK + And the response "deleted_monitor_id" has the same value as "monitor.id" + + @generated @skip @team:DataDog/monitor-app + Scenario: Edit a monitor returns "Bad Request" response + Given new "UpdateMonitor" request + And request contains "monitor_id" parameter from "REPLACE.ME" + And body with value {"assets": [{"category": "runbook", "name": "Monitor Runbook", "resource_key": "12345", "resource_type": "notebook", "url": "/notebooks/12345"}], "draft_status": "published", "options": {"evaluation_delay": null, "include_tags": true, "min_failure_duration": 0, "min_location_failed": 1, "new_group_delay": null, "new_host_delay": 300, "no_data_timeframe": null, "notification_preset_name": "show_all", "notify_audit": false, "notify_by": [], "on_missing_data": "default", "renotify_interval": null, "renotify_occurrences": null, "renotify_statuses": ["alert"], "scheduling_options": {"custom_schedule": {"recurrences": [{"rrule": "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR", "start": "2023-08-31T16:30:00", "timezone": "Europe/Paris"}]}, "evaluation_window": {"day_starts": "04:00", "hour_starts": 0, "month_starts": 1, "timezone": "Europe/Paris"}}, "synthetics_check_id": null, "threshold_windows": {"recovery_window": null, "trigger_window": null}, "thresholds": {"critical_query": "formula(\"2 * query1\").rollup(\"avg\").last(\"6mo\")", "critical_recovery": null, "critical_recovery_query": "formula(\"1.5 * query1\").rollup(\"avg\").last(\"3mo\")", "ok": null, "unknown": null, "warning": null, "warning_recovery": null}, "timeout_h": null, "variables": [{"compute": {"aggregation": "avg", "interval": 60000, "metric": "@duration", "name": "compute_result", "source": "filter_query"}, "data_source": "rum", "group_by": [{"facet": "status", "limit": 10, "sort": {"aggregation": "avg", "order": "asc"}, "source": "filter_query"}], "indexes": ["days-3", "days-7"], "name": "query_errors", "search": {"query": "service:query"}}]}, "priority": null, "restricted_roles": [], "tags": [], "type": "query alert"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Edit a monitor returns "Monitor Not Found error" response + Given new "UpdateMonitor" request + And request contains "monitor_id" parameter with value 0 + And body with value {"name": "updated", "options": {"evaluation_delay": null, "new_group_delay": 600, "new_host_delay":null, "renotify_interval":null, "thresholds": {"critical":2, "warning": null}, "timeout_h": null}} + When the request is sent + Then the response status is 404 Monitor Not Found error + + @team:DataDog/monitor-app + Scenario: Edit a monitor returns "OK" response + Given there is a valid "monitor" in the system + And new "UpdateMonitor" request + And request contains "monitor_id" parameter from "monitor.id" + And body with value {"name": "{{ monitor.name }}-updated", "priority": null, "options": {"evaluation_delay": null, "new_group_delay": 600, "new_host_delay":null, "renotify_interval":null, "thresholds": {"critical":2, "warning": null}, "timeout_h": null}} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ monitor.name }}-updated" + And the response "priority" is equal to null + + @generated @skip @team:DataDog/monitor-app + Scenario: Get a monitor's details returns "Bad Request" response + Given new "GetMonitor" request + And request contains "monitor_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Get a monitor's details returns "Monitor Not Found error" response + Given new "GetMonitor" request + And request contains "monitor_id" parameter with value 12345 + When the request is sent + Then the response status is 404 Monitor Not Found error + + @team:DataDog/monitor-app + Scenario: Get a monitor's details returns "OK" response + Given there is a valid "monitor" in the system + And new "GetMonitor" request + And request contains "monitor_id" parameter from "monitor.id" + And request contains "with_downtimes" parameter with value true + When the request is sent + Then the response status is 200 OK + And the response "id" has the same value as "monitor.id" + + @replay-only @team:DataDog/monitor-app + Scenario: Get a monitor's details with downtime returns "OK" response + Given there is a valid "monitor" in the system + And there is a valid "downtime" for a "monitor" in the system + And new "GetMonitor" request + And request contains "monitor_id" parameter from "monitor.id" + And request contains "with_downtimes" parameter with value true + When the request is sent + Then the response status is 200 OK + And the response "id" has the same value as "monitor.id" + And the response "matching_downtimes" has length 1 + And the response "matching_downtimes[0].id" has the same value as "downtime_monitor.id" + + @team:DataDog/monitor-app + Scenario: Get a synthetics monitor's details + Given there is a valid "synthetics_api_test" in the system + And new "GetMonitor" request + And request contains "monitor_id" parameter from "synthetics_api_test.monitor_id" + When the request is sent + Then the response status is 200 OK + And the response "options.synthetics_check_id" has the same value as "synthetics_api_test.public_id" + + @team:DataDog/monitor-app + Scenario: Get all monitors returns "Bad Request" response + Given new "ListMonitors" request + And request contains "group_states" parameter with value "notagroupstate" + When the request is sent + Then the response status is 400 Bad Request + + @integration-only @team:DataDog/monitor-app + Scenario: Get all monitors returns "OK" response + Given new "ListMonitors" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/monitor-app @with-pagination + Scenario: Get all monitors returns "OK" response with pagination + Given new "ListMonitors" request + And request contains "page_size" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @skip @team:DataDog/monitor-app + Scenario: Get all monitors with tags + Given there is a valid "monitor" in the system + And new "ListMonitors" request + And request contains "tags" parameter with value "test:{{ unique_lower_alnum }}" + And request contains "page_size" parameter with value 1 + When the request is sent + Then the response status is 200 OK + And the response "[0].id" has the same value as "monitor.id" + + @team:DataDog/monitor-app + Scenario: Monitors group search returns "Bad Request" response + Given new "SearchMonitorGroups" request + And request contains "query" parameter with value "status:notastatus" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Monitors group search returns "OK" response + Given new "SearchMonitorGroups" request + When the request is sent + Then the response status is 200 OK + And the response "metadata.page" is equal to 0 + + @team:DataDog/monitor-app + Scenario: Monitors search returns "Bad Request" response + Given new "SearchMonitors" request + And request contains "query" parameter with value "status:notastatus" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Monitors search returns "OK" response + Given new "SearchMonitors" request + When the request is sent + Then the response status is 200 OK + And the response "metadata.page" is equal to 0 + + @team:DataDog/monitor-app + Scenario: Validate a monitor returns "Invalid JSON" response + Given new "ValidateMonitor" request + And body with value {"type": "log alert", "query": "query"} + When the request is sent + Then the response status is 400 Invalid JSON + + @team:DataDog/monitor-app + Scenario: Validate a monitor returns "OK" response + Given new "ValidateMonitor" request + And body from file "monitor_payload.json" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/monitor-app + Scenario: Validate a multi-alert monitor returns "OK" response + Given new "ValidateMonitor" request + And body from file "multi_alert_monitor_payload.json" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/monitor-app + Scenario: Validate an existing monitor returns "Invalid JSON" response + Given there is a valid "monitor" in the system + And new "ValidateExistingMonitor" request + And request contains "monitor_id" parameter from "monitor.id" + And body with value {"type": "log alert", "query": "query"} + When the request is sent + Then the response status is 400 Invalid JSON + + @skip @team:DataDog/monitor-app + Scenario: Validate an existing monitor returns "Item not found error" response + Given new "ValidateExistingMonitor" request + And request contains "monitor_id" parameter with value 0 + When the request is sent + Then the response status is 404 Item not found error + + @team:DataDog/monitor-app + Scenario: Validate an existing monitor returns "OK" response + Given there is a valid "monitor" in the system + And new "ValidateExistingMonitor" request + And request contains "monitor_id" parameter from "monitor.id" + And body from file "monitor_payload.json" + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v1/notebooks.feature b/test-runner-data/features/v1/notebooks.feature new file mode 100644 index 0000000000..1a7dcacb6b --- /dev/null +++ b/test-runner-data/features/v1/notebooks.feature @@ -0,0 +1,130 @@ +@endpoint(notebooks) @endpoint(notebooks-v1) +Feature: Notebooks + Interact with your notebooks through the API to make it easier to + organize, find, and share all of your notebooks with your team and + organization. For more information, see the [Notebooks + documentation](https://docs.datadoghq.com/notebooks/). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Notebooks" API + + @generated @skip @team:DataDog/notebooks + Scenario: Create a notebook returns "Bad Request" response + Given new "CreateNotebook" request + And body with value {"data": {"attributes": {"cells": [{"attributes": {"definition": {"text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", "type": "markdown"}}, "type": "notebook_cells"}, {"attributes": {"definition": {"requests": [{"display_type": "line", "q": "avg:system.load.1{*}", "style": {"line_type": "solid", "line_width": "normal", "palette": "dog_classic"}}], "show_legend": true, "type": "timeseries", "yaxis": {"scale": "linear"}}, "graph_size": "m", "split_by": {"keys": [], "tags": []}, "time": null}, "type": "notebook_cells"}], "metadata": {"is_template": false, "take_snapshots": false, "type": "investigation"}, "name": "Example Notebook", "status": "published", "template_variables": [{"available_values": ["my-host", "host1", "host2"], "available_values_query": {"data_source": "logs", "group_by": [{"facet": "host"}], "search": {"query": "service:web"}}, "default": "my-host", "defaults": ["my-host-1", "my-host-2"], "name": "host1", "placement": "global", "prefix": "host", "type": "tag"}], "time": {"live_span": "1h"}}, "type": "notebooks"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/notebooks + Scenario: Create a notebook returns "OK" response + Given new "CreateNotebook" request + And body with value {"data": {"attributes": {"cells": [{"attributes": {"definition": {"text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", "type": "markdown"}}, "type": "notebook_cells"}, {"attributes": {"definition": {"requests": [{"display_type": "line", "q": "avg:system.load.1{*}", "style": {"line_type": "solid", "line_width": "normal", "palette": "dog_classic"}}], "show_legend": true, "type": "timeseries", "yaxis": {"scale": "linear"}}, "graph_size": "m", "split_by": {"keys": [], "tags": []}, "time": null}, "type": "notebook_cells"}], "name": "{{ unique }}", "status": "published", "time": {"live_span": "1h"}}, "type": "notebooks"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "notebooks" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.cells[0].attributes.definition.text" is equal to "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```" + + @skip @team:DataDog/notebooks + Scenario: Delete a notebook returns "Bad Request" response + Given new "DeleteNotebook" request + And request contains "notebook_id" parameter with value "ThisIsntANotebookId" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/notebooks + Scenario: Delete a notebook returns "Not Found" response + Given new "DeleteNotebook" request + And request contains "notebook_id" parameter with value 123456 + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/notebooks + Scenario: Delete a notebook returns "OK" response + Given new "DeleteNotebook" request + And there is a valid "notebook" in the system + And request contains "notebook_id" parameter from "notebook.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/notebooks + Scenario: Get a notebook returns "Bad Request" response + Given new "GetNotebook" request + And request contains "notebook_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/notebooks + Scenario: Get a notebook returns "Not Found" response + Given new "GetNotebook" request + And request contains "notebook_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/notebooks + Scenario: Get a notebook returns "OK" response + Given new "GetNotebook" request + And there is a valid "notebook" in the system + And request contains "notebook_id" parameter from "notebook.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" has the same value as "notebook.data.attributes.name" + And the response "data.attributes.cells[0].attributes.definition.type" has the same value as "notebook.data.attributes.cells[0].attributes.definition.type" + + @generated @skip @team:DataDog/notebooks + Scenario: Get all notebooks returns "Bad Request" response + Given new "ListNotebooks" request + When the request is sent + Then the response status is 400 Bad Request + + @skip-validation @team:DataDog/notebooks + Scenario: Get all notebooks returns "OK" response + Given new "ListNotebooks" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "attributes.status" with value "published" + + @replay-only @skip-validation @team:DataDog/notebooks @with-pagination + Scenario: Get all notebooks returns "OK" response with pagination + Given new "ListNotebooks" request + And request contains "count" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/notebooks + Scenario: Update a notebook returns "Bad Request" response + Given new "UpdateNotebook" request + And request contains "notebook_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cells": [{"attributes": {"definition": {"text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", "type": "markdown"}}, "id": "bzbycoya", "type": "notebook_cells"}, {"attributes": {"definition": {"requests": [{"display_type": "line", "q": "avg:system.load.1{*}", "style": {"line_type": "solid", "line_width": "normal", "palette": "dog_classic"}}], "show_legend": true, "type": "timeseries", "yaxis": {"scale": "linear"}}, "graph_size": "m", "split_by": {"keys": [], "tags": []}, "time": null}, "id": "9k6bc6xc", "type": "notebook_cells"}], "metadata": {"is_template": false, "take_snapshots": false, "type": "investigation"}, "name": "Example Notebook", "status": "published", "template_variables": [{"available_values": ["my-host", "host1", "host2"], "available_values_query": {"data_source": "logs", "group_by": [{"facet": "host"}], "search": {"query": "service:web"}}, "default": "my-host", "defaults": ["my-host-1", "my-host-2"], "name": "host1", "placement": "global", "prefix": "host", "type": "tag"}], "time": {"live_span": "1h"}}, "type": "notebooks"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/notebooks + Scenario: Update a notebook returns "Conflict" response + Given new "UpdateNotebook" request + And request contains "notebook_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cells": [{"attributes": {"definition": {"text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", "type": "markdown"}}, "id": "bzbycoya", "type": "notebook_cells"}, {"attributes": {"definition": {"requests": [{"display_type": "line", "q": "avg:system.load.1{*}", "style": {"line_type": "solid", "line_width": "normal", "palette": "dog_classic"}}], "show_legend": true, "type": "timeseries", "yaxis": {"scale": "linear"}}, "graph_size": "m", "split_by": {"keys": [], "tags": []}, "time": null}, "id": "9k6bc6xc", "type": "notebook_cells"}], "metadata": {"is_template": false, "take_snapshots": false, "type": "investigation"}, "name": "Example Notebook", "status": "published", "template_variables": [{"available_values": ["my-host", "host1", "host2"], "available_values_query": {"data_source": "logs", "group_by": [{"facet": "host"}], "search": {"query": "service:web"}}, "default": "my-host", "defaults": ["my-host-1", "my-host-2"], "name": "host1", "placement": "global", "prefix": "host", "type": "tag"}], "time": {"live_span": "1h"}}, "type": "notebooks"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/notebooks + Scenario: Update a notebook returns "Not Found" response + Given new "UpdateNotebook" request + And request contains "notebook_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cells": [{"attributes": {"definition": {"text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", "type": "markdown"}}, "id": "bzbycoya", "type": "notebook_cells"}, {"attributes": {"definition": {"requests": [{"display_type": "line", "q": "avg:system.load.1{*}", "style": {"line_type": "solid", "line_width": "normal", "palette": "dog_classic"}}], "show_legend": true, "type": "timeseries", "yaxis": {"scale": "linear"}}, "graph_size": "m", "split_by": {"keys": [], "tags": []}, "time": null}, "id": "9k6bc6xc", "type": "notebook_cells"}], "metadata": {"is_template": false, "take_snapshots": false, "type": "investigation"}, "name": "Example Notebook", "status": "published", "template_variables": [{"available_values": ["my-host", "host1", "host2"], "available_values_query": {"data_source": "logs", "group_by": [{"facet": "host"}], "search": {"query": "service:web"}}, "default": "my-host", "defaults": ["my-host-1", "my-host-2"], "name": "host1", "placement": "global", "prefix": "host", "type": "tag"}], "time": {"live_span": "1h"}}, "type": "notebooks"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/notebooks + Scenario: Update a notebook returns "OK" response + Given new "UpdateNotebook" request + And there is a valid "notebook" in the system + And request contains "notebook_id" parameter from "notebook.data.id" + And body with value {"data": {"attributes": {"cells": [{"attributes": {"definition": {"text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", "type": "markdown"}}, "type": "notebook_cells"}, {"attributes": {"definition": {"requests": [{"display_type": "line", "q": "avg:system.load.1{*}", "style": {"line_type": "solid", "line_width": "normal", "palette": "dog_classic"}}], "show_legend": true, "type": "timeseries", "yaxis": {"scale": "linear"}}, "graph_size": "m", "split_by": {"keys": [], "tags": []}, "time": null}, "type": "notebook_cells"}], "name": "{{ unique }}-updated", "status": "published", "time": {"live_span": "1h"}}, "type": "notebooks"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{ unique }}-updated" + And the response "data.attributes.status" is equal to "published" diff --git a/test-runner-data/features/v1/security_monitoring.feature b/test-runner-data/features/v1/security_monitoring.feature new file mode 100644 index 0000000000..ce9090d171 --- /dev/null +++ b/test-runner-data/features/v1/security_monitoring.feature @@ -0,0 +1,85 @@ +@endpoint(security-monitoring) @endpoint(security-monitoring-v1) +Feature: Security Monitoring + Create and manage your security rules, signals, filters, and more. See the + [Datadog Security page](https://docs.datadoghq.com/security/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "SecurityMonitoring" API + + @generated @skip @team:DataDog/cloud-siem + Scenario: Add a security signal to an incident returns "Bad Request" response + Given new "AddSecurityMonitoringSignalToIncident" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"incident_id": 2066, "version": 0} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Add a security signal to an incident returns "Not Found" response + Given new "AddSecurityMonitoringSignalToIncident" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"incident_id": 2066, "version": 0} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-siem + Scenario: Add a security signal to an incident returns "OK" response + Given new "AddSecurityMonitoringSignalToIncident" request + And request contains "signal_id" parameter with value "AQAAAYDiB_Ol8PbzFAAAAABBWURpQl9PbEFBQU0yeXhGTG9ZV2JnQUE" + And body with value {"incident_id": 2609} + When the request is sent + Then the response status is 200 OK + And the response "status" is equal to "done" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Change the triage state of a security signal returns "Bad Request" response + Given new "EditSecurityMonitoringSignalState" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"archiveReason": "none", "state": "open", "version": 0} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Change the triage state of a security signal returns "Not Found" response + Given new "EditSecurityMonitoringSignalState" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"archiveReason": "none", "state": "open", "version": 0} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-siem + Scenario: Change the triage state of a security signal returns "OK" response + Given new "EditSecurityMonitoringSignalState" request + And request contains "signal_id" parameter with value "AQAAAYDiB_Ol8PbzFAAAAABBWURpQl9PbEFBQU0yeXhGTG9ZV2JnQUE" + And body with value {"archiveReason": "none", "state": "open"} + When the request is sent + Then the response status is 200 OK + And the response "status" is equal to "done" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Modify the triage assignee of a security signal returns "Bad Request" response + Given new "EditSecurityMonitoringSignalAssignee" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"assignee": "773b045d-ccf8-4808-bd3b-955ef6a8c940", "version": 0} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Modify the triage assignee of a security signal returns "Not Found" response + Given new "EditSecurityMonitoringSignalAssignee" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"assignee": "773b045d-ccf8-4808-bd3b-955ef6a8c940", "version": 0} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-siem + Scenario: Modify the triage assignee of a security signal returns "OK" response + Given new "EditSecurityMonitoringSignalAssignee" request + And request contains "signal_id" parameter with value "AQAAAYDiB_Ol8PbzFAAAAABBWURpQl9PbEFBQU0yeXhGTG9ZV2JnQUE" + And body with value {"assignee": "773b045d-ccf8-4808-bd3b-955ef6a8c940"} + When the request is sent + Then the response status is 200 OK + And the response "status" is equal to "done" diff --git a/test-runner-data/features/v1/service_checks.feature b/test-runner-data/features/v1/service_checks.feature new file mode 100644 index 0000000000..5ed435e4cb --- /dev/null +++ b/test-runner-data/features/v1/service_checks.feature @@ -0,0 +1,45 @@ +@endpoint(service-checks) @endpoint(service-checks-v1) +Feature: Service Checks + The service check endpoint allows you to post check statuses for use with + monitors. Service check messages are limited to 500 characters. If a check + is posted with a message containing more than 500 characters, only the + first 500 characters are displayed. Messages are limited for checks with a + Critical or Warning status, they are dropped for checks with an OK status. + - [Read more about Service Check monitors][1]. - [Read more about Process + Check monitors][2]. - [Read more about Network monitors][3]. - [Read more + about Custom Check monitors][4]. - [Read more about Service Checks and + status codes][5]. [1]: + https://docs.datadoghq.com/monitors/types/service_check/ [2]: https://docs + .datadoghq.com/monitors/create/types/process_check/?tab=checkalert [3]: + https://docs.datadoghq.com/monitors/create/types/network/?tab=checkalert + [4]: https://docs.datadoghq.com/monitors/create/types/custom_check/?tab=ch + eckalert [5]: https://docs.datadoghq.com/developers/service_checks/ + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "ServiceChecks" API + And new "SubmitServiceCheck" request + + @generated @skip @team:DataDog/monitors-evaluation + Scenario: Submit a Service Check returns "Bad Request" response + Given body with value [{"check": "app.ok", "host_name": "app.host1", "message": "app is running", "status": 0, "tags": ["environment:test"]}] + When the request is sent + Then the response status is 400 Bad Request + + @skip-validation @team:DataDog/monitors-evaluation + Scenario: Submit a Service Check returns "Payload accepted" response + Given body with value [{"check": "app.ok", "host_name": "host", "status": 0, "tags": ["test:{{ unique_alnum }}"]}] + When the request is sent + Then the response status is 202 Payload accepted + + @generated @skip @team:DataDog/monitors-evaluation + Scenario: Submit a Service Check returns "Payload too large" response + Given body with value [{"check": "app.ok", "host_name": "app.host1", "message": "app is running", "status": 0, "tags": ["environment:test"]}] + When the request is sent + Then the response status is 413 Payload too large + + @generated @skip @team:DataDog/monitors-evaluation + Scenario: Submit a Service Check returns "Request timeout" response + Given body with value [{"check": "app.ok", "host_name": "app.host1", "message": "app is running", "status": 0, "tags": ["environment:test"]}] + When the request is sent + Then the response status is 408 Request timeout diff --git a/test-runner-data/features/v1/service_level_objective_corrections.feature b/test-runner-data/features/v1/service_level_objective_corrections.feature new file mode 100644 index 0000000000..5b89ea6df2 --- /dev/null +++ b/test-runner-data/features/v1/service_level_objective_corrections.feature @@ -0,0 +1,153 @@ +@endpoint(service-level-objective-corrections) @endpoint(service-level-objective-corrections-v1) +Feature: Service Level Objective Corrections + SLO Status Corrections allow you to prevent specific time periods from + negatively impacting your SLO’s status and error budget. You can use + Status Corrections for various purposes, such as removing planned + maintenance windows, non-business hours, or other time periods that do not + correspond to genuine issues. See [SLO status corrections](https://docs.da + tadoghq.com/service_management/service_level_objectives/#slo-status- + corrections) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ServiceLevelObjectiveCorrections" API + + @skip @team:DataDog/slo-app + Scenario: Create an SLO correction returns "Bad Request" response + Given there is a valid "slo" in the system + And new "CreateSLOCorrection" request + And body with value {"data": {"attributes": {"category": "Scheduled Maintenance", "description": "{{ unique }}", "end": {{ timestamp("now + 1h") }}, "start": {{ timestamp("now") }}, "timezone": "UTC"}, "type": "correction"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/slo-app + Scenario: Create an SLO correction returns "OK" response + Given there is a valid "slo" in the system + And new "CreateSLOCorrection" request + And body with value {"data": {"attributes": {"category": "Scheduled Maintenance", "description": "{{ unique }}", "end": {{ timestamp("now + 1h") }}, "slo_id": "{{ slo.data[0].id }}", "start": {{ timestamp("now") }}, "timezone": "UTC"}, "type": "correction"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "correction" + And the response "data.attributes.category" is equal to "Scheduled Maintenance" + And the response "data.attributes.slo_id" has the same value as "slo.data[0].id" + + @skip @team:DataDog/slo-app + Scenario: Create an SLO correction returns "SLO Not Found" response + Given new "CreateSLOCorrection" request + And body with value {"data": {"attributes": {"category": "Scheduled Maintenance", "description": "{{ unique }}", "end": {{ timestamp("now + 1h") }}, "slo_id": "sloId", "start": {{ timestamp("now") }}, "timezone": "UTC"}, "type": "correction"}} + When the request is sent + Then the response status is 404 SLO Not Found + + @team:DataDog/slo-app + Scenario: Create an SLO correction with rrule returns "OK" response + Given there is a valid "slo" in the system + And new "CreateSLOCorrection" request + And body with value {"data": {"attributes": {"category": "Scheduled Maintenance", "description": "{{ unique }}", "slo_id": "{{ slo.data[0].id }}", "start": {{ timestamp("now") }}, "duration": 3600, "rrule": "FREQ=DAILY;INTERVAL=10;COUNT=5", "timezone": "UTC"}, "type": "correction"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "correction" + And the response "data.attributes.rrule" is equal to "FREQ=DAILY;INTERVAL=10;COUNT=5" + + @team:DataDog/slo-app + Scenario: Create an SLO correction with slo_query returns "OK" response + Given new "CreateSLOCorrection" request + And body with value {"data": {"attributes": {"category": "Scheduled Maintenance", "description": "{{ unique }}", "end": {{ timestamp("now + 1h") }}, "slo_query": "env:prod service:checkout", "start": {{ timestamp("now") }}, "timezone": "UTC"}, "type": "correction"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "correction" + And the response "data.attributes.category" is equal to "Scheduled Maintenance" + And the response "data.attributes.slo_query" is equal to "env:prod service:checkout" + + @generated @skip @team:DataDog/slo-app + Scenario: Delete an SLO correction returns "Not found" response + Given new "DeleteSLOCorrection" request + And request contains "slo_correction_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @generated @skip @team:DataDog/slo-app + Scenario: Delete an SLO correction returns "OK" response + Given new "DeleteSLOCorrection" request + And request contains "slo_correction_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/slo-app + Scenario: Get all SLO corrections returns "OK" response + Given there is a valid "slo" in the system + And there is a valid "correction" for "slo" + And new "ListSLOCorrection" request + And request contains "offset" parameter with value 1 + And request contains "limit" parameter with value 1 + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + + @replay-only @skip-validation @team:DataDog/slo-app @with-pagination + Scenario: Get all SLO corrections returns "OK" response with pagination + Given new "ListSLOCorrection" request + And request contains "limit" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/slo-app + Scenario: Get an SLO correction for an SLO returns "Bad Request" response + Given new "GetSLOCorrection" request + And request contains "slo_correction_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/slo-app + Scenario: Get an SLO correction for an SLO returns "OK" response + Given there is a valid "slo" in the system + And there is a valid "correction" for "slo" + And new "GetSLOCorrection" request + And request contains "slo_correction_id" parameter from "correction.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" has the same value as "correction.data.type" + And the response "data.attributes.category" has the same value as "correction.data.attributes.category" + + @skip @team:DataDog/slo-app + Scenario: Update an SLO correction returns "Bad Request" response + Given there is a valid "slo" in the system + And there is a valid "correction" for "slo" + And new "UpdateSLOCorrection" request + And request contains "slo_correction_id" parameter from "correction.data.id" + And body with value {"data": {"attributes": {"category": "Invalid Test"}, "type": "correction"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/slo-app + Scenario: Update an SLO correction returns "Not Found" response + Given new "UpdateSLOCorrection" request + And request contains "slo_correction_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "Scheduled Maintenance", "duration": 3600, "end": 1600000000, "rrule": "FREQ=DAILY;INTERVAL=10;COUNT=5", "slo_query": "env:prod service:checkout", "start": 1600000000, "timezone": "UTC"}, "type": "correction"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/slo-app + Scenario: Update an SLO correction returns "OK" response + Given there is a valid "slo" in the system + And there is a valid "correction" for "slo" + And new "UpdateSLOCorrection" request + And request contains "slo_correction_id" parameter from "correction.data.id" + And body with value {"data": {"attributes": {"category": "Deployment", "description": "{{ unique }}", "end": {{ timestamp("now + 1h") }}, "start": {{ timestamp("now") }}, "timezone": "UTC"}, "type": "correction"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "correction.data.id" + And the response "data.attributes.slo_id" has the same value as "correction.data.attributes.slo_id" + And the response "data.attributes.category" is equal to "Deployment" + + @team:DataDog/slo-app + Scenario: Update an SLO correction with slo_query returns "OK" response + Given there is a valid "correction_with_query" in the system + And new "UpdateSLOCorrection" request + And request contains "slo_correction_id" parameter from "correction_with_query.data.id" + And body with value {"data": {"attributes": {"category": "Scheduled Maintenance", "description": "{{ unique }}", "end": {{ timestamp("now + 1h") }}, "slo_query": "env:staging service:checkout", "start": {{ timestamp("now") }}, "timezone": "UTC"}, "type": "correction"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "correction_with_query.data.id" + And the response "data.attributes.slo_query" is equal to "env:staging service:checkout" diff --git a/test-runner-data/features/v1/service_level_objectives.feature b/test-runner-data/features/v1/service_level_objectives.feature new file mode 100644 index 0000000000..6e756c5a54 --- /dev/null +++ b/test-runner-data/features/v1/service_level_objectives.feature @@ -0,0 +1,278 @@ +@endpoint(service-level-objectives) @endpoint(service-level-objectives-v1) +Feature: Service Level Objectives + [Service Level Objectives](https://docs.datadoghq.com/monitors/service_lev + el_objectives/#configuration) (or SLOs) are a key part of the site + reliability engineering toolkit. SLOs provide a framework for defining + clear targets around application performance, which ultimately help teams + provide a consistent customer experience, balance feature development with + platform stability, and improve communication with internal and external + users. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ServiceLevelObjectives" API + + @generated @skip @team:DataDog/slo-app + Scenario: Bulk Delete SLO Timeframes returns "Bad Request" response + Given new "DeleteSLOTimeframeInBulk" request + And body with value {"id1": ["7d", "30d"], "id2": ["7d", "30d"]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/slo-app + Scenario: Bulk Delete SLO Timeframes returns "OK" response + Given new "DeleteSLOTimeframeInBulk" request + And body with value {"id1": ["7d", "30d"], "id2": ["7d", "30d"]} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/slo-app + Scenario: Check if SLOs can be safely deleted returns "Bad Request" response + Given new "CheckCanDeleteSLO" request + And request contains "ids" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/slo-app + Scenario: Check if SLOs can be safely deleted returns "Conflict" response + Given new "CheckCanDeleteSLO" request + And request contains "ids" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/slo-app + Scenario: Check if SLOs can be safely deleted returns "OK" response + Given new "CheckCanDeleteSLO" request + And request contains "ids" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/slo-app + Scenario: Create a new metric SLO object using bad events formula returns "OK" response + Given new "CreateSLO" request + And body with value {"type":"metric","description":"Metric SLO using sli_specification","name":"{{ unique }}","sli_specification":{"count":{"good_events_formula":{"formula":"query1 - query2"},"bad_events_formula":{"formula":"query2"},"queries":[{"data_source":"metrics","name":"query1","query":"sum:httpservice.hits{*}.as_count()"},{"data_source":"metrics","name":"query2","query":"sum:httpservice.errors{*}.as_count()"}]}},"tags":["env:prod","type:count"],"thresholds":[{"target":99.0,"target_display":"99.0","timeframe":"7d","warning":99.5,"warning_display":"99.5"}],"timeframe":"7d","target_threshold":99.0,"warning_threshold":99.5} + When the request is sent + Then the response status is 200 OK + And the response "data[0]" has field "sli_specification" + And the response "data[0].sli_specification" has field "count" + And the response "data[0].sli_specification.count" has field "good_events_formula" + And the response "data[0].sli_specification.count" has field "bad_events_formula" + And the response "data[0].sli_specification.count" has field "queries" + And the response "data[0].sli_specification.count.queries" has length 2 + + @team:DataDog/slo-app + Scenario: Create a new metric SLO object using sli_specification returns "OK" response + Given new "CreateSLO" request + And body with value {"type":"metric","description":"Metric SLO using sli_specification","name":"{{ unique }}","sli_specification":{"count":{"good_events_formula":{"formula":"query1 - query2"},"total_events_formula":{"formula":"query1"},"queries":[{"data_source":"metrics","name":"query1","query":"sum:httpservice.hits{*}.as_count()"},{"data_source":"metrics","name":"query2","query":"sum:httpservice.errors{*}.as_count()"}]}},"tags":["env:prod","type:count"],"thresholds":[{"target":99.0,"target_display":"99.0","timeframe":"7d","warning":99.5,"warning_display":"99.5"}],"timeframe":"7d","target_threshold":99.0,"warning_threshold":99.5} + When the request is sent + Then the response status is 200 OK + And the response "data[0].timeframe" is equal to "7d" + And the response "data[0].target_threshold" is equal to 99.0 + And the response "data[0].warning_threshold" is equal to 99.5 + And the response "data[0]" has field "sli_specification" + And the response "data[0].sli_specification" has field "count" + And the response "data[0].sli_specification.count" has field "good_events_formula" + And the response "data[0].sli_specification.count" has field "total_events_formula" + And the response "data[0].sli_specification.count" has field "queries" + And the response "data[0].sli_specification.count.queries" has length 2 + And the response "data[0]" has field "query" + + @team:DataDog/slo-app + Scenario: Create a time-slice SLO object returns "OK" response + Given new "CreateSLO" request + And body with value {"type":"time_slice","description":"string","name":"{{ unique }}","sli_specification":{"time_slice":{"query":{"formulas":[{"formula":"query1"}],"queries":[{"data_source":"metrics","name":"query1","query":"trace.servlet.request{env:prod}"}]},"comparator":">","threshold":5}},"tags":["env:prod"],"thresholds":[{"target":97.0,"target_display":"97.0","timeframe":"7d","warning":98,"warning_display":"98.0"}],"timeframe":"7d","target_threshold":97.0,"warning_threshold":98} + When the request is sent + Then the response status is 200 OK + And the response "data[0].timeframe" is equal to "7d" + And the response "data[0].target_threshold" is equal to 97.0 + And the response "data[0].warning_threshold" is equal to 98.0 + + @team:DataDog/slo-app + Scenario: Create an SLO object returns "Bad Request" response + Given new "CreateSLO" request + And body with value {"type":"monitor","name":"{{ unique }}","thresholds":[{"target":95.0,"target_display":"95.0","timeframe":"7d","warning":98,"warning_display":"98.0"}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/slo-app + Scenario: Create an SLO object returns "OK" response + Given new "CreateSLO" request + And body with value {"type":"metric","description":"string","groups":["env:test","role:mysql"],"monitor_ids":[],"name":"{{ unique }}","query":{"denominator":"sum:httpservice.hits{!code:3xx}.as_count()","numerator":"sum:httpservice.hits{code:2xx}.as_count()"},"tags":["env:prod","app:core"],"thresholds":[{"target":97.0,"target_display":"97.0","timeframe":"7d","warning":98,"warning_display":"98.0"}],"timeframe":"7d","target_threshold":97.0,"warning_threshold":98} + When the request is sent + Then the response status is 200 OK + And the response "data[0].timeframe" is equal to "7d" + And the response "data[0].target_threshold" is equal to 97.0 + And the response "data[0].warning_threshold" is equal to 98.0 + + @generated @skip @team:DataDog/slo-app + Scenario: Delete an SLO returns "Conflict" response + Given new "DeleteSLO" request + And request contains "slo_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/slo-app + Scenario: Delete an SLO returns "Not found" response + Given new "DeleteSLO" request + And request contains "slo_id" parameter with value "{{ unique_lower_alnum }}" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/slo-app + Scenario: Delete an SLO returns "OK" response + Given there is a valid "slo" in the system + And new "DeleteSLO" request + And request contains "slo_id" parameter from "slo.data[0].id" + When the request is sent + Then the response status is 200 OK + And the response "data[0]" has the same value as "slo.data[0].id" + + @generated @skip @team:DataDog/slo-app + Scenario: Get Corrections For an SLO returns "Bad Request" response + Given new "GetSLOCorrections" request + And request contains "slo_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/slo-app + Scenario: Get Corrections For an SLO returns "Not Found" response + Given new "GetSLOCorrections" request + And request contains "slo_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/slo-app + Scenario: Get Corrections For an SLO returns "OK" response + Given there is a valid "slo" in the system + And there is a valid "correction" for "slo" + And new "GetSLOCorrections" request + And request contains "slo_id" parameter from "slo.data[0].id" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + + @generated @skip @team:DataDog/slo-app + Scenario: Get all SLOs returns "Bad Request" response + Given new "ListSLOs" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/slo-app + Scenario: Get all SLOs returns "Not Found" response + Given new "ListSLOs" request + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/slo-app + Scenario: Get all SLOs returns "OK" response + Given there is a valid "slo" in the system + And new "ListSLOs" request + And request contains "ids" parameter from "slo.data[0].id" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + And the response "data[0].id" has the same value as "slo.data[0].id" + + @replay-only @skip-validation @team:DataDog/slo-app @with-pagination + Scenario: Get all SLOs returns "OK" response with pagination + Given new "ListSLOs" request + And request contains "limit" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/slo-app + Scenario: Get an SLO's details returns "Not found" response + Given new "GetSLO" request + And request contains "slo_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/slo-app + Scenario: Get an SLO's details returns "OK" response + Given there is a valid "slo" in the system + And new "GetSLO" request + And request contains "slo_id" parameter from "slo.data[0].id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "metric" + + @generated @skip @team:DataDog/slo-app + Scenario: Get an SLO's history returns "Bad Request" response + Given new "GetSLOHistory" request + And request contains "slo_id" parameter from "REPLACE.ME" + And request contains "from_ts" parameter from "REPLACE.ME" + And request contains "to_ts" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/slo-app + Scenario: Get an SLO's history returns "Not Found" response + Given new "GetSLOHistory" request + And request contains "slo_id" parameter from "REPLACE.ME" + And request contains "from_ts" parameter from "REPLACE.ME" + And request contains "to_ts" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/slo-app + Scenario: Get an SLO's history returns "OK" response + Given there is a valid "slo" in the system + And new "GetSLOHistory" request + And request contains "slo_id" parameter from "slo.data[0].id" + And request contains "from_ts" parameter with value {{ timestamp("now - 1d") }} + And request contains "to_ts" parameter with value {{ timestamp("now") }} + When the request is sent + Then the response status is 200 OK + And the response "data.series.res_type" is equal to "time_series" + + @generated @skip @team:DataDog/slo-app + Scenario: Search for SLOs returns "Bad Request" response + Given new "SearchSLO" request + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/slo-app + Scenario: Search for SLOs returns "OK" response + Given there is a valid "slo" in the system + And new "SearchSLO" request + And request contains "query" parameter from "slo.data[0].name" + And request contains "page[size]" parameter with value 20 + And request contains "page[number]" parameter with value 0 + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.slos[0].data.attributes.name" is equal to "{{ slo.data[0].name }}" + And the response "data.attributes.slos[0].data.attributes.overall_status[0].error_budget_remaining" is equal to null + And the response "data.attributes.slos[0].data.attributes.overall_status[0].status" is equal to null + And the response "data.attributes.slos[0].data.attributes.status.state" is equal to "no_data" + + @team:DataDog/slo-app + Scenario: Update an SLO returns "Bad Request" response + Given new "UpdateSLO" request + And there is a valid "slo" in the system + And request contains "slo_id" parameter from "slo.data[0].id" + And body with value {"type":"monitor","name":"{{ unique }}","thresholds":[{"target":95.0,"target_display":"95.0","timeframe":"7d","warning":98,"warning_display":"98.0"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/slo-app + Scenario: Update an SLO returns "Not Found" response + Given new "UpdateSLO" request + And request contains "slo_id" parameter from "REPLACE.ME" + And body with value {"description": null, "groups": ["env:prod", "role:mysql"], "monitor_ids": [], "monitor_tags": [], "name": "Custom Metric SLO", "query": {"denominator": "sum:my.custom.metric{*}.as_count()", "numerator": "sum:my.custom.metric{type:good}.as_count()"}, "sli_specification": {"time_slice": {"comparator": "<", "query": {"formulas": [{"formula": "query2/query1"}], "queries": [{"data_source": "metrics", "name": "query1", "query": "sum:trace.servlet.request.hits{*} by {env}.as_count()"}, {"data_source": "metrics", "name": "query2", "query": "sum:trace.servlet.request.errors{*} by {env}.as_count()"}]}, "threshold": 5}}, "tags": ["env:prod", "app:core"], "target_threshold": 99.9, "thresholds": [{"target": 95, "timeframe": "7d"}, {"target": 95, "timeframe": "30d", "warning": 97}], "timeframe": "30d", "type": "metric", "warning_threshold": 99.95} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/slo-app + Scenario: Update an SLO returns "OK" response + Given there is a valid "slo" in the system + And new "UpdateSLO" request + And request contains "slo_id" parameter from "slo.data[0].id" + And body with value {"type":"metric","name":"{{ slo.data[0].name }}","thresholds":[{"target":97.0,"timeframe":"7d","warning":98.0}],"timeframe":"7d","target_threshold":97.0,"warning_threshold":98,"query":{"numerator":"sum:httpservice.hits{code:2xx}.as_count()","denominator":"sum:httpservice.hits{!code:3xx}.as_count()"}} + When the request is sent + Then the response status is 200 OK + And the response "data[0].thresholds[0].target" is equal to 97.0 + And the response "data[0].timeframe" is equal to "7d" + And the response "data[0].target_threshold" is equal to 97.0 + And the response "data[0].warning_threshold" is equal to 98.0 diff --git a/test-runner-data/features/v1/synthetics.feature b/test-runner-data/features/v1/synthetics.feature new file mode 100644 index 0000000000..911cc25517 --- /dev/null +++ b/test-runner-data/features/v1/synthetics.feature @@ -0,0 +1,877 @@ +@endpoint(synthetics) @endpoint(synthetics-v1) +Feature: Synthetics + Synthetic tests use simulated requests and actions so you can monitor the + availability and performance of systems and applications. Datadog supports + the following types of synthetic tests: - [API + tests](https://docs.datadoghq.com/synthetics/api_tests/) - [Browser + tests](https://docs.datadoghq.com/synthetics/browser_tests) - [Network + Path tests](https://docs.datadoghq.com/synthetics/network_path_tests/) - + [Mobile Application + tests](https://docs.datadoghq.com/synthetics/mobile_app_testing) You can + use the Datadog API to create, manage, and organize tests and test suites + programmatically. For more information, see the [Synthetic Monitoring + documentation](https://docs.datadoghq.com/synthetics/). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Synthetics" API + + @replay-only @skip-validation @team:DataDog/synthetics-orchestrating-managing + Scenario: Client is resilient to enum and oneOf deserialization errors + Given new "ListTests" request + When the request is sent + Then the response status is 200 OK - Returns the list of all Synthetic tests. + And the response "tests" has length 6 + And the response "tests[0].config.assertions" has length 3 + And the response "tests[0].config.assertions[0].operator" is equal to "lessThan" + And the response "tests[0].config.assertions[2].operator" is equal to "A non existent operator" + And the response "tests[1].config.assertions[0].operator" is equal to "lessThan" + And the response "tests[1].config.assertions[1].type" is equal to "A non existent assertion type" + And the response "tests[2].options.device_ids" has length 3 + And the response "tests[2].options.device_ids[2]" is equal to "A non existent device ID" + And the response "tests[3].type" is equal to "A non existent test type" + And the response "tests[4].config.request.method" is equal to "A non existent method" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a FIDO global variable returns "OK" response + Given there is a valid "synthetics_api_test_multi_step" in the system + And new "CreateGlobalVariable" request + And body from file "synthetics_global_variable_fido_payload.json" + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "GLOBAL_VARIABLE_FIDO_PAYLOAD_{{ unique_upper_alnum }}" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a TOTP global variable returns "OK" response + Given there is a valid "synthetics_api_test_multi_step" in the system + And new "CreateGlobalVariable" request + And body from file "synthetics_global_variable_totp_payload.json" + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "GLOBAL_VARIABLE_TOTP_PAYLOAD_{{ unique_upper_alnum }}" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a browser test returns "- JSON format is wrong" response + Given new "CreateSyntheticsBrowserTest" request + And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "files": [{}], "httpVersion": "http1", "mcpProtocolVersion": "2025-06-18", "proxy": {"url": "https://example.com"}, "service": "Greeter", "toolName": "search", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"} + When the request is sent + Then the response status is 400 - JSON format is wrong + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a browser test returns "OK - Returns saved rumSettings." response + Given new "CreateSyntheticsBrowserTest" request + And body from file "synthetics_browser_test_payload_with_rum_settings.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "options.rumSettings.isEnabled" is equal to true + And the response "options.rumSettings.applicationId" is equal to "mockApplicationId" + And the response "options.rumSettings.clientTokenId" is equal to 12345 + And the response "steps[0]" has field "public_id" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a browser test returns "OK - Returns the created test details." response + Given new "CreateSyntheticsBrowserTest" request + And body from file "synthetics_browser_test_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + And the response "config.configVariables" has item with field "secure" with value true + And the response "config.variables" has item with field "secure" with value true + And the response "steps[0].alwaysExecute" is equal to true + And the response "steps[0].exitIfSucceed" is equal to true + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a browser test returns "Test quota is reached" response + Given new "CreateSyntheticsBrowserTest" request + And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "files": [{}], "httpVersion": "http1", "mcpProtocolVersion": "2025-06-18", "proxy": {"url": "https://example.com"}, "service": "Greeter", "toolName": "search", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"} + When the request is sent + Then the response status is 402 Test quota is reached + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a browser test with advanced scheduling options returns "OK - Returns the created test details." response + Given new "CreateSyntheticsBrowserTest" request + And body from file "synthetics_browser_test_payload_with_advanced_scheduling.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + And the response "options.scheduling.timeframes[0].day" is equal to 1 + And the response "options.scheduling.timeframes[0].from" is equal to "07:00" + And the response "options.scheduling.timeframes[1].to" is equal to "16:00" + And the response "options.scheduling.timezone" is equal to "America/New_York" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a global variable from test returns "OK" response + Given there is a valid "synthetics_api_test_multi_step" in the system + And new "CreateGlobalVariable" request + And body from file "synthetics_global_variable_from_test_payload.json" + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "GLOBAL_VARIABLE_FROM_TEST_PAYLOAD_{{ unique_upper_alnum }}" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a global variable returns "Conflict" response + Given new "CreateGlobalVariable" request + And body with value {"attributes": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "description": "Example description", "name": "MY_VARIABLE", "parse_test_options": {"field": "content-type", "localVariableName": "LOCAL_VARIABLE", "parser": {"type": "regex", "value": ".*"}, "type": "http_body"}, "parse_test_public_id": "abc-def-123", "tags": ["team:front", "test:workflow-1"], "value": {"secure": true, "value": "value"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a global variable returns "Invalid request" response + Given new "CreateGlobalVariable" request + And body with value {"attributes": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "description": "Example description", "name": "MY_VARIABLE", "parse_test_options": {"field": "content-type", "localVariableName": "LOCAL_VARIABLE", "parser": {"type": "regex", "value": ".*"}, "type": "http_body"}, "parse_test_public_id": "abc-def-123", "tags": ["team:front", "test:workflow-1"], "value": {"secure": true, "value": "value"}} + When the request is sent + Then the response status is 400 Invalid request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a global variable returns "OK" response + Given new "CreateGlobalVariable" request + And body with value {"attributes": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "description": "Example description", "name": "MY_VARIABLE", "parse_test_options": {"field": "content-type", "localVariableName": "LOCAL_VARIABLE", "parser": {"type": "regex", "value": ".*"}, "type": "http_body"}, "parse_test_public_id": "abc-def-123", "tags": ["team:front", "test:workflow-1"], "value": {"secure": true, "value": "value"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a mobile test returns "- JSON format is wrong" response + Given new "CreateSyntheticsMobileTest" request + And body with value {"config": {"variables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}]}, "device_ids": ["chrome.laptop_large"], "message": "Notification message", "name": "Example test name", "options": {"bindings": [{"principals": [], "relation": "editor"}], "ci": {"executionRule": "blocking"}, "device_ids": ["synthetics:mobile:device:apple_ipad_10th_gen_2022_ios_16"], "mobileApplication": {"applicationId": "00000000-0000-0000-0000-aaaaaaaaaaaa", "referenceId": "00000000-0000-0000-0000-aaaaaaaaaaab", "referenceType": "latest"}, "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}, "tick_every": 300}, "status": "live", "steps": [{"name": "", "params": {"check": "equals", "direction": "up", "element": {"contextType": "native", "relativePosition": {}, "userLocator": {"values": [{"type": "accessibility-id"}]}}, "positions": [{}], "variable": {"example": "", "name": "VAR_NAME"}}, "publicId": "pub-lic-id0", "type": "assertElementContent"}], "tags": ["env:production"], "type": "mobile"} + When the request is sent + Then the response status is 400 - JSON format is wrong + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a mobile test returns "OK - Returns the created test details." response + Given new "CreateSyntheticsMobileTest" request + And body from file "synthetics_mobile_test_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + And the response "options.device_ids[0]" is equal to "synthetics:mobile:device:iphone_15_ios_17" + And the response "options.mobileApplication.applicationId" is equal to "ab0e0aed-536d-411a-9a99-5428c27d8f8e" + And the response "options.mobileApplication.referenceId" is equal to "6115922a-5f5d-455e-bc7e-7955a57f3815" + And the response "options.mobileApplication.referenceType" is equal to "version" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a mobile test returns "Test quota is reached" response + Given new "CreateSyntheticsMobileTest" request + And body with value {"config": {"variables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}]}, "device_ids": ["chrome.laptop_large"], "message": "Notification message", "name": "Example test name", "options": {"bindings": [{"principals": [], "relation": "editor"}], "ci": {"executionRule": "blocking"}, "device_ids": ["synthetics:mobile:device:apple_ipad_10th_gen_2022_ios_16"], "mobileApplication": {"applicationId": "00000000-0000-0000-0000-aaaaaaaaaaaa", "referenceId": "00000000-0000-0000-0000-aaaaaaaaaaab", "referenceType": "latest"}, "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}, "tick_every": 300}, "status": "live", "steps": [{"name": "", "params": {"check": "equals", "direction": "up", "element": {"contextType": "native", "relativePosition": {}, "userLocator": {"values": [{"type": "accessibility-id"}]}}, "positions": [{}], "variable": {"example": "", "name": "VAR_NAME"}}, "publicId": "pub-lic-id0", "type": "assertElementContent"}], "tags": ["env:production"], "type": "mobile"} + When the request is sent + Then the response status is 402 Test quota is reached + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a multi-step api test with every type of basicAuth returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_test_multi_step_with_every_type_of_basic_auth.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + And the response "config.steps[0].request.basicAuth" is equal to {"password": "password", "username": "username"} + And the response "config.steps[1].request.basicAuth.type" is equal to "web" + And the response "config.steps[2].request.basicAuth.type" is equal to "sigv4" + And the response "config.steps[3].request.basicAuth.type" is equal to "ntlm" + And the response "config.steps[4].request.basicAuth.type" is equal to "digest" + And the response "config.steps[5].request.basicAuth.type" is equal to "oauth-client" + And the response "config.steps[6].request.basicAuth.type" is equal to "oauth-rop" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a multistep test with subtest returns "OK" response + Given there is a valid "synthetics_api_test" in the system + And new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_test_multi_step_with_subtest.json" + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a private location returns "OK" response + Given there is a valid "role" in the system + And new "CreatePrivateLocation" request + And body with value {"description": "Test {{ unique }} description", "metadata": {"restricted_roles": ["{{ role.data.id }}"]}, "name": "{{ unique }}", "tags": ["test:{{ unique_lower_alnum }}"]} + When the request is sent + Then the response status is 200 OK + And the response "private_location.name" is equal to "{{ unique }}" + And the response "private_location.metadata.restricted_roles[0]" has the same value as "role.data.id" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a private location returns "Private locations are not activated for the user" response + Given new "CreatePrivateLocation" request + And body with value {"description": "Description of private location", "metadata": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "name": "New private location", "tags": ["team:front"]} + When the request is sent + Then the response status is 404 Private locations are not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a private location returns "Quota reached for private locations" response + Given new "CreatePrivateLocation" request + And body with value {"description": "Description of private location", "metadata": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "name": "New private location", "tags": ["team:front"]} + When the request is sent + Then the response status is 402 Quota reached for private locations + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API GRPC test returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_grpc_test_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API HTTP test has bodyHash filled out + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_http_test_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "config.assertions[6].operator" is equal to "md5" + And the response "config.assertions[6].target" is equal to "a" + And the response "config.assertions[6].type" is equal to "bodyHash" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API HTTP test returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_http_test_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + And the response "config.assertions[7].type" is equal to "javascript" + And the response "config.assertions[7].code" is equal to "const hello = 'world';" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API HTTP with oauth-rop test returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_http_test_oauth_rop_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API SSL test returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_ssl_test_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + And the response "options.ignore_certificate_validation" is equal to true + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API test returns "- JSON format is wrong" response + Given new "CreateSyntheticsAPITest" request + And body with value {"config": {"assertions": [{"operator": "lessThan", "target": 1000, "type": "responseTime"}], "request": {"method": "GET", "url": "https://example.com"}}, "locations": ["aws:eu-west-3"], "message": "Notification message", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "http", "tags": ["env:production"], "type": "api"} + When the request is sent + Then the response status is 400 - JSON format is wrong + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API test returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body with value {"config": {"assertions": [{"operator": "lessThan", "target": 1000, "type": "responseTime"}], "request": {"method": "GET", "url": "https://example.com"}}, "locations": ["aws:eu-west-3"], "message": "Notification message", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "http", "tags": ["env:production"], "type": "api"} + When the request is sent + Then the response status is 200 OK - Returns the created test details. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API test returns "Test quota is reached" response + Given new "CreateSyntheticsAPITest" request + And body with value {"config": {"assertions": [{"operator": "lessThan", "target": 1000, "type": "responseTime"}], "request": {"method": "GET", "url": "https://example.com"}}, "locations": ["aws:eu-west-3"], "message": "Notification message", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "http", "tags": ["env:production"], "type": "api"} + When the request is sent + Then the response status is 402 Test quota is reached + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API test with MCP steps returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_test_mcp_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + And the response "config.steps[0].subtype" is equal to "mcp" + And the response "config.steps[0].request.callType" is equal to "init" + And the response "config.steps[0].request.mcpProtocolVersion" is equal to "2025-06-18" + And the response "config.steps[1].subtype" is equal to "mcp" + And the response "config.steps[1].request.callType" is equal to "tool_list" + And the response "config.steps[2].subtype" is equal to "mcp" + And the response "config.steps[2].request.callType" is equal to "tool_call" + And the response "config.steps[2].request.toolName" is equal to "search" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API test with UDP subtype returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_test_udp_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API test with WEBSOCKET subtype returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_test_websocket_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API test with a file payload returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_http_test_with_file_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + And the response "config.request.files[0].name" is equal to "file name" + And the response "config.request.files[0].originalFileName" is equal to "image.png" + And the response "config.request.files[0].type" is equal to "file type" + And the response "config.request.files[0]" has field "bucketKey" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create an API test with multi subtype returns "OK - Returns the created test details." response + Given new "CreateSyntheticsAPITest" request + And body from file "synthetics_api_test_multi_step_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}" + And the response "config.steps[0].retry.count" is equal to 5 + And the response "config.steps[0].retry.interval" is equal to 1000 + And the response "config.steps[0].request.httpVersion" is equal to "http2" + And the response "config.steps[0].exitIfSucceed" is equal to true + And the response "config.steps[0].extractedValues[0].secure" is equal to true + And the response "config.steps[0].extractedValuesFromScript" is equal to "dd.variable.set('STATUS_CODE', dd.response.statusCode);" + And the response "config.steps[1].subtype" is equal to "wait" + And the response "config.steps[1].value" is equal to 1 + And the response "config.steps[2].request.host" is equal to "grpcbin.test.k6.io" + And the response "config.steps[3].subtype" is equal to "ssl" + And the response "config.steps[3].request.host" is equal to "example.org" + And the response "config.steps[3].request.port" is equal to 443 + And the response "config.steps[3].request.checkCertificateRevocation" is equal to true + And the response "config.steps[3].request.disableAiaIntermediateFetching" is equal to true + And the response "config.steps[4].subtype" is equal to "dns" + And the response "config.steps[4].request.host" is equal to "troisdizaines.com" + And the response "config.steps[4].request.dnsServer" is equal to "8.8.8.8" + And the response "config.steps[4].request.dnsServerPort" is equal to "53" + And the response "config.steps[5].subtype" is equal to "tcp" + And the response "config.steps[5].request.host" is equal to "34.95.79.70" + And the response "config.steps[5].request.shouldTrackHops" is equal to true + And the response "config.steps[6].subtype" is equal to "icmp" + And the response "config.steps[6].request.host" is equal to "34.95.79.70" + And the response "config.steps[6].request.numberOfPackets" is equal to 4 + And the response "config.steps[7].subtype" is equal to "websocket" + And the response "config.steps[7].request.url" is equal to "ws://34.95.79.70/web-socket" + And the response "config.steps[7].request.message" is equal to "My message" + And the response "config.steps[7].request.isMessageBase64Encoded" is equal to true + And the response "config.steps[8].subtype" is equal to "udp" + And the response "config.steps[8].request.host" is equal to "8.8.8.8" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete a global variable returns "JSON format is wrong" response + Given new "DeleteGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 JSON format is wrong + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete a global variable returns "Not found" response + Given new "DeleteGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete a global variable returns "OK" response + Given new "DeleteGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete a private location returns "- Private locations are not activated for the user" response + Given new "DeletePrivateLocation" request + And request contains "location_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Private locations are not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete a private location returns "OK" response + Given new "DeletePrivateLocation" request + And request contains "location_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete tests returns "- JSON format is wrong" response + Given new "DeleteTests" request + And body with value {"force_delete_dependencies": false, "public_ids": []} + When the request is sent + Then the response status is 400 - JSON format is wrong + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete tests returns "- Tests to be deleted can't be found" response + Given new "DeleteTests" request + And body with value {"force_delete_dependencies": false, "public_ids": []} + When the request is sent + Then the response status is 404 - Tests to be deleted can't be found + + @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete tests returns "OK." response + Given there is a valid "synthetics_api_test" in the system + And new "DeleteTests" request + And body with value {"public_ids": ["{{ synthetics_api_test.public_id }}"]} + When the request is sent + Then the response status is 200 OK. + And the response "deleted_tests[0].public_id" is equal to "{{ synthetics_api_test.public_id }}" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a Mobile test returns "OK" response + Given there is a valid "synthetics_mobile_test" in the system + And new "UpdateMobileTest" request + And request contains "public_id" parameter from "synthetics_mobile_test.public_id" + And body from file "synthetics_mobile_test_update_payload.json" + When the request is sent + Then the response status is 200 OK - Returns the created test details. + And the response "name" is equal to "{{ unique }}-updated" + And the response "options.device_ids[0]" is equal to "synthetics:mobile:device:iphone_15_ios_17" + And the response "options.mobileApplication.applicationId" is equal to "ab0e0aed-536d-411a-9a99-5428c27d8f8e" + And the response "options.mobileApplication.referenceId" is equal to "6115922a-5f5d-455e-bc7e-7955a57f3815" + And the response "options.mobileApplication.referenceType" is equal to "version" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a browser test returns "- JSON format is wrong" response + Given new "UpdateBrowserTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "files": [{}], "httpVersion": "http1", "mcpProtocolVersion": "2025-06-18", "proxy": {"url": "https://example.com"}, "service": "Greeter", "toolName": "search", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"} + When the request is sent + Then the response status is 400 - JSON format is wrong + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a browser test returns "- Synthetic Monitoring is not activated for the user" response + Given new "UpdateBrowserTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "files": [{}], "httpVersion": "http1", "mcpProtocolVersion": "2025-06-18", "proxy": {"url": "https://example.com"}, "service": "Greeter", "toolName": "search", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"} + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a browser test returns "OK" response + Given new "UpdateBrowserTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"config": {"assertions": [], "configVariables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}], "request": {"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "bodyType": "text/plain", "callType": "unary", "certificate": {"cert": {}, "key": {}}, "certificateDomains": [], "files": [{}], "httpVersion": "http1", "mcpProtocolVersion": "2025-06-18", "proxy": {"url": "https://example.com"}, "service": "Greeter", "toolName": "search", "url": "https://example.com"}, "variables": [{"name": "VARIABLE_NAME", "type": "text"}]}, "locations": ["aws:eu-west-3"], "message": "", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "steps": [{"type": "assertElementContent"}], "tags": ["env:prod"], "type": "browser"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a global variable returns "Invalid request" response + Given new "EditGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + And body with value {"attributes": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "description": "Example description", "name": "MY_VARIABLE", "parse_test_options": {"field": "content-type", "localVariableName": "LOCAL_VARIABLE", "parser": {"type": "regex", "value": ".*"}, "type": "http_body"}, "parse_test_public_id": "abc-def-123", "tags": ["team:front", "test:workflow-1"], "value": {"secure": true, "value": "value"}} + When the request is sent + Then the response status is 400 Invalid request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a global variable returns "OK" response + Given new "EditGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + And body with value {"attributes": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "description": "Example description", "name": "MY_VARIABLE", "parse_test_options": {"field": "content-type", "localVariableName": "LOCAL_VARIABLE", "parser": {"type": "regex", "value": ".*"}, "type": "http_body"}, "parse_test_public_id": "abc-def-123", "tags": ["team:front", "test:workflow-1"], "value": {"secure": true, "value": "value"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a mobile test returns "- JSON format is wrong" response + Given new "UpdateMobileTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"config": {"variables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}]}, "device_ids": ["chrome.laptop_large"], "message": "Notification message", "name": "Example test name", "options": {"bindings": [{"principals": [], "relation": "editor"}], "ci": {"executionRule": "blocking"}, "device_ids": ["synthetics:mobile:device:apple_ipad_10th_gen_2022_ios_16"], "mobileApplication": {"applicationId": "00000000-0000-0000-0000-aaaaaaaaaaaa", "referenceId": "00000000-0000-0000-0000-aaaaaaaaaaab", "referenceType": "latest"}, "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}, "tick_every": 300}, "status": "live", "steps": [{"name": "", "params": {"check": "equals", "direction": "up", "element": {"contextType": "native", "relativePosition": {}, "userLocator": {"values": [{"type": "accessibility-id"}]}}, "positions": [{}], "variable": {"example": "", "name": "VAR_NAME"}}, "publicId": "pub-lic-id0", "type": "assertElementContent"}], "tags": ["env:production"], "type": "mobile"} + When the request is sent + Then the response status is 400 - JSON format is wrong + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a mobile test returns "- Synthetic Monitoring is not activated for the user" response + Given new "UpdateMobileTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"config": {"variables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}]}, "device_ids": ["chrome.laptop_large"], "message": "Notification message", "name": "Example test name", "options": {"bindings": [{"principals": [], "relation": "editor"}], "ci": {"executionRule": "blocking"}, "device_ids": ["synthetics:mobile:device:apple_ipad_10th_gen_2022_ios_16"], "mobileApplication": {"applicationId": "00000000-0000-0000-0000-aaaaaaaaaaaa", "referenceId": "00000000-0000-0000-0000-aaaaaaaaaaab", "referenceType": "latest"}, "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}, "tick_every": 300}, "status": "live", "steps": [{"name": "", "params": {"check": "equals", "direction": "up", "element": {"contextType": "native", "relativePosition": {}, "userLocator": {"values": [{"type": "accessibility-id"}]}}, "positions": [{}], "variable": {"example": "", "name": "VAR_NAME"}}, "publicId": "pub-lic-id0", "type": "assertElementContent"}], "tags": ["env:production"], "type": "mobile"} + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a mobile test returns "OK" response + Given new "UpdateMobileTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"config": {"variables": [{"name": "VARIABLE_NAME", "secure": false, "type": "text"}]}, "device_ids": ["chrome.laptop_large"], "message": "Notification message", "name": "Example test name", "options": {"bindings": [{"principals": [], "relation": "editor"}], "ci": {"executionRule": "blocking"}, "device_ids": ["synthetics:mobile:device:apple_ipad_10th_gen_2022_ios_16"], "mobileApplication": {"applicationId": "00000000-0000-0000-0000-aaaaaaaaaaaa", "referenceId": "00000000-0000-0000-0000-aaaaaaaaaaab", "referenceType": "latest"}, "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}, "tick_every": 300}, "status": "live", "steps": [{"name": "", "params": {"check": "equals", "direction": "up", "element": {"contextType": "native", "relativePosition": {}, "userLocator": {"values": [{"type": "accessibility-id"}]}}, "positions": [{}], "variable": {"example": "", "name": "VAR_NAME"}}, "publicId": "pub-lic-id0", "type": "assertElementContent"}], "tags": ["env:production"], "type": "mobile"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a private location returns "- Private locations are not activated for the user" response + Given new "UpdatePrivateLocation" request + And request contains "location_id" parameter from "REPLACE.ME" + And body with value {"description": "Description of private location", "metadata": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "name": "New private location", "tags": ["team:front"]} + When the request is sent + Then the response status is 404 - Private locations are not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a private location returns "OK" response + Given new "UpdatePrivateLocation" request + And request contains "location_id" parameter from "REPLACE.ME" + And body with value {"description": "Description of private location", "metadata": {"restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]}, "name": "New private location", "tags": ["team:front"]} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit an API test returns "- JSON format is wrong" response + Given new "UpdateAPITest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"config": {"assertions": [{"operator": "lessThan", "target": 1000, "type": "responseTime"}], "request": {"method": "GET", "url": "https://example.com"}}, "locations": ["aws:eu-west-3"], "message": "Notification message", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "http", "tags": ["env:production"], "type": "api"} + When the request is sent + Then the response status is 400 - JSON format is wrong + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit an API test returns "- Synthetic Monitoring is not activated for the user" response + Given new "UpdateAPITest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"config": {"assertions": [{"operator": "lessThan", "target": 1000, "type": "responseTime"}], "request": {"method": "GET", "url": "https://example.com"}}, "locations": ["aws:eu-west-3"], "message": "Notification message", "name": "Example test name", "options": {"blockedRequestPatterns": [], "ci": {"executionRule": "blocking"}, "device_ids": ["chrome.laptop_large"], "httpVersion": "http1", "monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "rumSettings": {"applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "clientTokenId": 12345, "isEnabled": true}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "http", "tags": ["env:production"], "type": "api"} + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit an API test returns "OK" response + Given there is a valid "synthetics_api_test" in the system + And new "UpdateAPITest" request + And request contains "public_id" parameter from "synthetics_api_test.public_id" + And body from file "synthetics_api_test_update_payload.json" + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ synthetics_api_test.name }}-updated" + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Fetch uptime for multiple tests returns "- JSON format is wrong" response + Given new "FetchUptimes" request + And body with value {"from_ts": 0, "public_ids": [], "to_ts": 0} + When the request is sent + Then the response status is 400 - JSON format is wrong + + @replay-only @team:DataDog/synthetics-orchestrating-managing + Scenario: Fetch uptime for multiple tests returns "OK." response + Given new "FetchUptimes" request + And body with value {"from_ts": 1726041488, "public_ids": ["p8m-9gw-nte"], "to_ts": 1726055954} + When the request is sent + Then the response status is 200 OK + And the response "[0].public_id" is equal to "p8m-9gw-nte" + And the response "[0].overall.uptime" is equal to 83.05682373046875 + And the response "[0].overall.history" has length 2 + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a Mobile test returns "OK" response + Given there is a valid "synthetics_mobile_test" in the system + And new "GetMobileTest" request + And request contains "public_id" parameter from "synthetics_mobile_test.public_id" + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ synthetics_mobile_test.name }}" + And the response "options.device_ids[0]" is equal to "synthetics:mobile:device:iphone_15_ios_17" + And the response "options.mobileApplication.applicationId" is equal to "ab0e0aed-536d-411a-9a99-5428c27d8f8e" + And the response "options.mobileApplication.referenceId" is equal to "6115922a-5f5d-455e-bc7e-7955a57f3815" + And the response "options.mobileApplication.referenceType" is equal to "version" + And the response "type" is equal to "mobile" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test result returns "- Synthetic Monitoring is not activated for the user" response + Given new "GetBrowserTestResult" request + And request contains "public_id" parameter from "REPLACE.ME" + And request contains "result_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @replay-only @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test result returns "OK" response + Given new "GetBrowserTestResult" request + And request contains "public_id" parameter with value "2yy-sem-mjh" + And request contains "result_id" parameter with value "5671719892074090418" + When the request is sent + Then the response status is 200 OK + And the response "result_id" is equal to "5671719892074090418" + And the response "probe_dc" is equal to "aws:ca-central-1" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test returns "- Synthetic Monitoring is not activated for the user" response + Given new "GetBrowserTest" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test returns "OK" response + Given new "GetBrowserTest" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test's latest results summaries returns "- Synthetic Monitoring is not activated for the user" response + Given new "GetBrowserTestLatestResults" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @replay-only @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test's latest results summaries returns "OK" response + Given new "GetBrowserTestLatestResults" request + And request contains "public_id" parameter with value "2yy-sem-mjh" + When the request is sent + Then the response status is 200 OK + And the response "results" has length 3 + And the response "results[0].status" is equal to 0 + And the response "results[0].probe_dc" is equal to "aws:ca-central-1" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a global variable returns "Not found" response + Given new "GetGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a global variable returns "OK" response + Given new "GetGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a mobile test returns "- Synthetic Monitoring is not activated for the user" response + Given new "GetMobileTest" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a mobile test returns "OK" response + Given new "GetMobileTest" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a private location returns "- Synthetic private locations are not activated for the user" response + Given new "GetPrivateLocation" request + And request contains "location_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Synthetic private locations are not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a private location returns "OK" response + Given new "GetPrivateLocation" request + And request contains "location_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a test configuration returns "- Synthetic is not activated for the user" response + Given new "GetTest" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Synthetic is not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a test configuration returns "OK" response + Given new "GetTest" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get all global variables returns "OK" response + Given new "ListGlobalVariables" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get all locations (public and private) returns "OK" response + Given new "ListLocations" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get an API test result returns "- Synthetic Monitoring is not activated for the user" response + Given new "GetAPITestResult" request + And request contains "public_id" parameter from "REPLACE.ME" + And request contains "result_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @replay-only @team:DataDog/synthetics-orchestrating-managing + Scenario: Get an API test result returns "OK" response + Given new "GetAPITestResult" request + And request contains "public_id" parameter with value "hwb-332-3xe" + And request contains "result_id" parameter with value "3420446318379485707" + When the request is sent + Then the response status is 200 OK + And the response "result_id" is equal to "3420446318379485707" + And the response "probe_dc" is equal to "aws:us-west-1" + + @replay-only @team:DataDog/synthetics-orchestrating-managing + Scenario: Get an API test result returns result with failure object + Given there is a "synthetics_api_test_with_wrong_dns" in the system + And the "synthetics_api_test_with_wrong_dns" is triggered + And new "GetAPITestResult" request + And request contains "public_id" parameter from "synthetics_api_test_with_wrong_dns.public_id" + And request contains "result_id" parameter from "synthetics_api_test_with_wrong_dns_result.results[0].result_id" + When the request is sent + Then the response status is 200 OK + And the response "result.failure.code" is equal to "DNS" + And the response "result.failure.message" is equal to "Error during DNS resolution of hostname app.datadfoghq.com (ENOTFOUND)." + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get an API test returns "- Synthetic Monitoring is not activated for the user" response + Given new "GetAPITest" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get an API test returns "OK" response + Given new "GetAPITest" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get an API test's latest results summaries returns "- Synthetic is not activated for the user" response + Given new "GetAPITestLatestResults" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 - Synthetic is not activated for the user + + @replay-only @team:DataDog/synthetics-orchestrating-managing + Scenario: Get an API test's latest results summaries returns "OK" response + Given new "GetAPITestLatestResults" request + And request contains "public_id" parameter with value "hwb-332-3xe" + When the request is sent + Then the response status is 200 OK + And the response "results" has length 150 + And the response "results[0].status" is equal to 0 + And the response "results[0].probe_dc" is equal to "aws:us-west-1" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get details of batch returns "Batch does not exist." response + Given new "GetSyntheticsCIBatch" request + And request contains "batch_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Batch does not exist. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get details of batch returns "OK" response + Given new "GetSyntheticsCIBatch" request + And request contains "batch_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get the default locations returns "OK" response + Given new "GetSyntheticsDefaultLocations" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get the list of all Synthetic tests returns "OK - Returns the list of all Synthetic tests." response + Given new "ListTests" request + When the request is sent + Then the response status is 200 OK - Returns the list of all Synthetic tests. + + @replay-only @skip-validation @team:DataDog/synthetics-orchestrating-managing @with-pagination + Scenario: Get the list of all Synthetic tests returns "OK - Returns the list of all Synthetic tests." response with pagination + Given new "ListTests" request + And request contains "page_size" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK - Returns the list of all Synthetic tests. + And the response has 3 items + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get the list of all Synthetic tests returns "Synthetic Monitoring is not activated for the user." response + Given new "ListTests" request + When the request is sent + Then the response status is 404 Synthetic Monitoring is not activated for the user. + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Get the list of default locations returns "OK" response + Given new "GetSyntheticsDefaultLocations" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Patch a Synthetic test returns "- JSON format is wrong" response + Given new "PatchTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"data": [{"op": "replace", "path": "/name", "value": "New test name"}, {"op": "remove", "path": "/config/assertions/0"}]} + When the request is sent + Then the response status is 400 - JSON format is wrong + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Patch a Synthetic test returns "- Synthetic Monitoring is not activated for the user" response + Given new "PatchTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"data": [{"op": "replace", "path": "/name", "value": "New test name"}, {"op": "remove", "path": "/config/assertions/0"}]} + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Patch a Synthetic test returns "OK" response + Given there is a valid "synthetics_api_test" in the system + And new "PatchTest" request + And request contains "public_id" parameter from "synthetics_api_test.public_id" + And body with value {"data": [{"op": "replace", "path": "/name", "value": "New test name"}, {"op": "remove", "path": "/config/assertions/0"}]} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Pause or start a test returns "- Synthetic Monitoring is not activated for the user" response + Given new "UpdateTestPauseStatus" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"new_status": "live"} + When the request is sent + Then the response status is 404 - Synthetic Monitoring is not activated for the user + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Pause or start a test returns "JSON format is wrong." response + Given new "UpdateTestPauseStatus" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"new_status": "live"} + When the request is sent + Then the response status is 400 JSON format is wrong. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Pause or start a test returns "OK - Returns a boolean indicating if the update was successful." response + Given new "UpdateTestPauseStatus" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"new_status": "live"} + When the request is sent + Then the response status is 200 OK - Returns a boolean indicating if the update was successful. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Search Synthetic tests returns "Not found" response + Given new "SearchTests" request + When the request is sent + Then the response status is 404 Not found + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Search Synthetic tests returns "OK - Returns the list of Synthetic tests matching the search." response + Given new "SearchTests" request + When the request is sent + Then the response status is 200 OK - Returns the list of Synthetic tests matching the search. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Trigger Synthetic tests returns "Bad Request" response + Given new "TriggerTests" request + And body with value {"tests": [{"metadata": {"ci": {"pipeline": {}, "provider": {}}, "git": {}}, "public_id": "aaa-aaa-aaa"}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Trigger Synthetic tests returns "OK" response + Given there is a valid "synthetics_api_test" in the system + And new "TriggerTests" request + And body with value {"tests": [{"public_id": "{{ synthetics_api_test.public_id }}"}]} + When the request is sent + Then the response status is 200 OK + And the response "triggered_check_ids" array contains value "{{ synthetics_api_test.public_id }}" + And the response "results" has item with field "public_id" with value "{{ synthetics_api_test.public_id }}" + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Trigger tests from CI/CD pipelines returns "JSON format is wrong" response + Given new "TriggerCITests" request + And body with value {"tests": [{"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "deviceIds": ["chrome.laptop_large"], "locations": ["aws:eu-west-3"], "metadata": {"ci": {"pipeline": {}, "provider": {}}, "git": {}}, "public_id": "aaa-aaa-aaa", "retry": {}}]} + When the request is sent + Then the response status is 400 JSON format is wrong + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Trigger tests from CI/CD pipelines returns "OK" response + Given new "TriggerCITests" request + And body with value {"tests": [{"basicAuth": {"password": "PaSSw0RD!", "type": "web", "username": "my_username"}, "deviceIds": ["chrome.laptop_large"], "locations": ["aws:eu-west-3"], "metadata": {"ci": {"pipeline": {}, "provider": {}}, "git": {}}, "public_id": "aaa-aaa-aaa", "retry": {}}]} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v1/usage_metering.feature b/test-runner-data/features/v1/usage_metering.feature new file mode 100644 index 0000000000..e8651834ac --- /dev/null +++ b/test-runner-data/features/v1/usage_metering.feature @@ -0,0 +1,724 @@ +@endpoint(usage-metering) @endpoint(usage-metering-v1) +Feature: Usage Metering + The usage metering API allows you to get hourly, daily, and monthly usage + across multiple facets of Datadog. This API is available to all Pro and + Enterprise customers. **Note**: Usage data is delayed by up to 72 hours + from when it was incurred. It is retained for 15 months. You can retrieve + up to 24 hours of hourly usage data for multiple organizations, and up to + two months of hourly usage data for a single organization in one request. + Learn more on the [usage details documentation](https://docs.datadoghq.com + /account_management/billing/usage_details/). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "UsageMetering" API + + @team:DataDog/billing-hub + Scenario: Get all custom metrics by hourly average returns "Bad Request" response + Given new "GetUsageTopAvgMetrics" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get all custom metrics by hourly average returns "OK" response + Given new "GetUsageTopAvgMetrics" request + And request contains "day" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get billable usage across your account returns "Bad Request" response + Given new "GetUsageBillableSummary" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get billable usage across your account returns "OK" response + Given new "GetUsageBillableSummary" request + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly logs usage by retention returns "Bad Request" response + Given new "GetUsageLogsByRetention" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly logs usage by retention returns "OK" response + Given new "GetUsageLogsByRetention" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage attribution returns "Bad Request" response + Given new "GetHourlyUsageAttribution" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "usage_type" parameter with value "not_a_product" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get hourly usage attribution returns "OK" response + Given new "GetHourlyUsageAttribution" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "usage_type" parameter with value "infra_host_usage" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for CI visibility returns "Bad Request" response + Given new "GetUsageCIApp" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for CI visibility returns "OK" response + Given new "GetUsageCIApp" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for CSM Pro returns "Bad Request" response + Given new "GetUsageCloudSecurityPostureManagement" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for CSM Pro returns "OK" response + Given new "GetUsageCloudSecurityPostureManagement" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Database Monitoring returns "OK" response + Given new "GetUsageDBM" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Fargate returns "Bad Request" response + Given new "GetUsageFargate" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Fargate returns "OK" response + Given new "GetUsageFargate" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for IoT returns "Bad Request" response + Given new "GetUsageInternetOfThings" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for IoT returns "OK" response + Given new "GetUsageInternetOfThings" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Lambda returns "Bad Request" response + Given new "GetUsageLambda" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Lambda returns "OK" response + Given new "GetUsageLambda" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/billing-hub + Scenario: Get hourly usage for Logs by Index returns "Bad Request" response + Given new "GetUsageLogsByIndex" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get hourly usage for Logs by Index returns "OK" response + Given new "GetUsageLogsByIndex" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Logs returns "Bad Request" response + Given new "GetUsageLogs" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Logs returns "OK" response + Given new "GetUsageLogs" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Network Flows returns "Bad Request" response + Given new "GetUsageNetworkFlows" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Network Flows returns "OK" response + Given new "GetUsageNetworkFlows" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Network Hosts returns "Bad Request" response + Given new "GetUsageNetworkHosts" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Network Hosts returns "OK" response + Given new "GetUsageNetworkHosts" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Online Archive returns "Bad Request" response + Given new "GetUsageOnlineArchive" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Online Archive returns "OK" response + Given new "GetUsageOnlineArchive" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for RUM Sessions returns "Bad Request" response + Given new "GetUsageRumSessions" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for RUM Sessions returns "OK" response + Given new "GetUsageRumSessions" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for RUM Units returns "OK" response + Given new "GetUsageRumUnits" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for RUM sessions returns "Bad Request" response + Given new "GetUsageRumSessions" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for RUM sessions returns "OK" response + Given new "GetUsageRumSessions" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for RUM units returns "Bad Request" response + Given new "GetUsageRumUnits" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for RUM units returns "OK" response + Given new "GetUsageRumUnits" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for SNMP devices returns "Bad Request" response + Given new "GetUsageSNMP" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for SNMP devices returns "OK" response + Given new "GetUsageSNMP" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Sensitive Data Scanner returns "OK" response + Given new "GetUsageSDS" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Synthetics API Checks returns "Bad Request" response + Given new "GetUsageSyntheticsAPI" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Synthetics API Checks returns "OK" response + Given new "GetUsageSyntheticsAPI" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Synthetics Browser Checks returns "Bad Request" response + Given new "GetUsageSyntheticsBrowser" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for Synthetics Browser Checks returns "OK" response + Given new "GetUsageSyntheticsBrowser" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for analyzed logs returns "Bad Request" response + Given new "GetUsageAnalyzedLogs" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for analyzed logs returns "OK" response + Given new "GetUsageAnalyzedLogs" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for audit logs returns "Bad Request" response + Given new "GetUsageAuditLogs" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for audit logs returns "OK" response + Given new "GetUsageAuditLogs" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for cloud workload security returns "Bad Request" response + Given new "GetUsageCWS" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for cloud workload security returns "OK" response + Given new "GetUsageCWS" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for custom metrics returns "Bad Request" response + Given new "GetUsageTimeseries" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for custom metrics returns "OK" response + Given new "GetUsageTimeseries" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for database monitoring returns "Bad Request" response + Given new "GetUsageDBM" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for database monitoring returns "OK" response + Given new "GetUsageDBM" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for hosts and containers returns "Bad Request" response + Given new "GetUsageHosts" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for hosts and containers returns "OK" response + Given new "GetUsageHosts" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for incident management returns "Bad Request" response + Given new "GetIncidentManagement" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for incident management returns "OK" response + Given new "GetIncidentManagement" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for indexed spans returns "Bad Request" response + Given new "GetUsageIndexedSpans" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for indexed spans returns "OK" response + Given new "GetUsageIndexedSpans" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for ingested spans returns "Bad Request" response + Given new "GetIngestedSpans" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for ingested spans returns "OK" response + Given new "GetIngestedSpans" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for logs by index returns "Bad Request" response + Given new "GetUsageLogsByIndex" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for logs by index returns "OK" response + Given new "GetUsageLogsByIndex" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for logs returns "Bad Request" response + Given new "GetUsageLogs" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for logs returns "OK" response + Given new "GetUsageLogs" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for network hosts returns "Bad Request" response + Given new "GetUsageNetworkHosts" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for network hosts returns "OK" response + Given new "GetUsageNetworkHosts" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for online archive returns "Bad Request" response + Given new "GetUsageOnlineArchive" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for online archive returns "OK" response + Given new "GetUsageOnlineArchive" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for profiled hosts returns "Bad Request" response + Given new "GetUsageProfiling" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for profiled hosts returns "OK" response + Given new "GetUsageProfiling" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for sensitive data scanner returns "Bad Request" response + Given new "GetUsageSDS" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for sensitive data scanner returns "OK" response + Given new "GetUsageSDS" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for synthetics API checks returns "Bad Request" response + Given new "GetUsageSyntheticsAPI" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for synthetics API checks returns "OK" response + Given new "GetUsageSyntheticsAPI" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for synthetics browser checks returns "Bad Request" response + Given new "GetUsageSyntheticsBrowser" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for synthetics browser checks returns "OK" response + Given new "GetUsageSyntheticsBrowser" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for synthetics checks returns "Bad Request" response + Given new "GetUsageSynthetics" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for synthetics checks returns "OK" response + Given new "GetUsageSynthetics" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get mobile hourly usage for RUM Sessions returns "OK" response + Given new "GetUsageRumSessions" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "type" parameter with value "mobile" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get monthly usage attribution returns "Bad Request" response + Given new "GetMonthlyUsageAttribution" request + And request contains "start_month" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "fields" parameter with value "not_a_product" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get monthly usage attribution returns "OK" response + Given new "GetMonthlyUsageAttribution" request + And request contains "start_month" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "fields" parameter with value "infra_host_usage" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get specified daily custom reports returns "Not Found" response + Given new "GetSpecifiedDailyCustomReports" request + And request contains "report_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/billing-hub + Scenario: Get specified daily custom reports returns "OK" response + Given new "GetSpecifiedDailyCustomReports" request + And request contains "report_id" parameter with value "2022-03-20" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get specified monthly custom reports returns "Bad Request" response + Given new "GetSpecifiedMonthlyCustomReports" request + And request contains "report_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get specified monthly custom reports returns "Not Found" response + Given new "GetSpecifiedMonthlyCustomReports" request + And request contains "report_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/billing-hub + Scenario: Get specified monthly custom reports returns "OK" response + Given new "GetSpecifiedMonthlyCustomReports" request + And request contains "report_id" parameter with value "2021-05-01" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get the list of available daily custom reports returns "OK" response + Given new "GetDailyCustomReports" request + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Get the list of available monthly custom reports returns "OK" response + Given new "GetMonthlyCustomReports" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get usage across your account returns "Bad Request" response + Given new "GetUsageSummary" request + And request contains "start_month" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get usage across your account returns "OK" response + Given new "GetUsageSummary" request + And request contains "start_month" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/billing-hub + Scenario: Paginate monthly usage attribution + Given there is a valid "monthly_usage_attribution" response + And new "GetMonthlyUsageAttribution" request + And request contains "next_record_id" parameter from "monthly_usage_attribution.metadata.pagination.next_record_id" + And request contains "start_month" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "fields" parameter with value "infra_host_usage" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: get hourly usage for network flows returns "Bad Request" response + Given new "GetUsageNetworkFlows" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: get hourly usage for network flows returns "OK" response + Given new "GetUsageNetworkFlows" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v1/users.feature b/test-runner-data/features/v1/users.feature new file mode 100644 index 0000000000..6be22f2fd0 --- /dev/null +++ b/test-runner-data/features/v1/users.feature @@ -0,0 +1,102 @@ +@endpoint(users) @endpoint(users-v1) +Feature: Users + Create, edit, and disable users. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Users" API + + @generated @skip @team:DataDog/org-management + Scenario: Create a user returns "Bad Request" response + Given new "CreateUser" request + And body with value {"access_role": "ro", "disabled": false, "email": "test@datadoghq.com", "handle": "test@datadoghq.com", "name": "test user"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/org-management + Scenario: Create a user returns "Conflict" response + Given new "CreateUser" request + And body with value {"access_role": "ro", "disabled": false, "email": "test@datadoghq.com", "handle": "test@datadoghq.com", "name": "test user"} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/org-management + Scenario: Create a user returns "User created" response + Given new "CreateUser" request + And body with value {"access_role": "ro", "disabled": false, "email": "test@datadoghq.com", "handle": "test@datadoghq.com", "name": "test user"} + When the request is sent + Then the response status is 200 User created + + @replay-only @team:DataDog/org-management + Scenario: Create a user returns null access role + Given new "CreateUser" request + And body with value {"access_role": null, "disabled": false, "email": "test@datadoghq.com", "handle": "test@datadoghq.com", "name": "test user"} + When the request is sent + Then the response status is 200 User created + And the response "user.access_role" is equal to null + + @generated @skip @team:DataDog/org-management + Scenario: Disable a user returns "Bad Request" response + Given new "DisableUser" request + And request contains "user_handle" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/org-management + Scenario: Disable a user returns "Not Found" response + Given new "DisableUser" request + And request contains "user_handle" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/org-management + Scenario: Disable a user returns "User disabled" response + Given new "DisableUser" request + And request contains "user_handle" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 User disabled + + @generated @skip @team:DataDog/org-management + Scenario: Get user details returns "Not Found" response + Given new "GetUser" request + And request contains "user_handle" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/org-management + Scenario: Get user details returns "OK for get user" response + Given new "GetUser" request + And request contains "user_handle" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK for get user + + @generated @skip @team:DataDog/org-management + Scenario: List all users returns "OK" response + Given new "ListUsers" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: Update a user returns "Bad Request" response + Given new "UpdateUser" request + And request contains "user_handle" parameter from "REPLACE.ME" + And body with value {"access_role": "ro", "disabled": false, "email": "test@datadoghq.com", "handle": "test@datadoghq.com", "name": "test user"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/org-management + Scenario: Update a user returns "Not Found" response + Given new "UpdateUser" request + And request contains "user_handle" parameter from "REPLACE.ME" + And body with value {"access_role": "ro", "disabled": false, "email": "test@datadoghq.com", "handle": "test@datadoghq.com", "name": "test user"} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/org-management + Scenario: Update a user returns "User updated" response + Given new "UpdateUser" request + And request contains "user_handle" parameter from "REPLACE.ME" + And body with value {"access_role": "ro", "disabled": false, "email": "test@datadoghq.com", "handle": "test@datadoghq.com", "name": "test user"} + When the request is sent + Then the response status is 200 User updated diff --git a/test-runner-data/features/v1/webhooks_integration.feature b/test-runner-data/features/v1/webhooks_integration.feature new file mode 100644 index 0000000000..e58d93b781 --- /dev/null +++ b/test-runner-data/features/v1/webhooks_integration.feature @@ -0,0 +1,162 @@ +@endpoint(webhooks-integration) @endpoint(webhooks-integration-v1) +Feature: Webhooks Integration + Configure your Datadog-Webhooks integration directly through the Datadog + API. See the [Webhooks integration + page](https://docs.datadoghq.com/integrations/webhooks) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "WebhooksIntegration" API + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Create a custom variable returns "Bad Request" response + Given new "CreateWebhooksIntegrationCustomVariable" request + And body with value {"is_secret": true, "name": "CUSTOM_VARIABLE_NAME", "value": "CUSTOM_VARIABLE_VALUE"} + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:Datadog/collaboration-integrations + Scenario: Create a custom variable returns "OK" response + Given new "CreateWebhooksIntegrationCustomVariable" request + And body with value {"is_secret": true, "name": "{{ unique_upper_alnum }}", "value": "CUSTOM_VARIABLE_VALUE"} + When the request is sent + Then the response status is 201 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Create a webhooks integration returns "Bad Request" response + Given new "CreateWebhooksIntegration" request + And body with value {"custom_headers": null, "encode_as": "json", "name": "WEBHOOK_NAME", "payload": null, "url": "https://example.com/webhook"} + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:Datadog/collaboration-integrations + Scenario: Create a webhooks integration returns "OK" response + Given new "CreateWebhooksIntegration" request + And body with value {"name": "{{ unique }}", "url": "https://example.com/webhook"} + When the request is sent + Then the response status is 201 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Delete a custom variable returns "Item Not Found" response + Given new "DeleteWebhooksIntegrationCustomVariable" request + And request contains "custom_variable_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Item Not Found + + @skip-terraform-config @team:Datadog/collaboration-integrations + Scenario: Delete a custom variable returns "OK" response + Given there is a valid "webhook_custom_variable" in the system + And new "DeleteWebhooksIntegrationCustomVariable" request + And request contains "custom_variable_name" parameter from "webhook_custom_variable.name" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Delete a webhook returns "Item Not Found" response + Given new "DeleteWebhooksIntegration" request + And request contains "webhook_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Item Not Found + + @skip-terraform-config @team:Datadog/collaboration-integrations + Scenario: Delete a webhook returns "OK" response + Given there is a valid "webhook" in the system + And new "DeleteWebhooksIntegration" request + And request contains "webhook_name" parameter from "webhook.name" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Get a custom variable returns "Bad Request" response + Given new "GetWebhooksIntegrationCustomVariable" request + And request contains "custom_variable_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Get a custom variable returns "Item Not Found" response + Given new "GetWebhooksIntegrationCustomVariable" request + And request contains "custom_variable_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Item Not Found + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Get a custom variable returns "OK" response + Given new "GetWebhooksIntegrationCustomVariable" request + And request contains "custom_variable_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Get a webhook integration returns "Bad Request" response + Given new "GetWebhooksIntegration" request + And request contains "webhook_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Get a webhook integration returns "Item Not Found" response + Given new "GetWebhooksIntegration" request + And request contains "webhook_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Item Not Found + + @skip-terraform-config @team:Datadog/collaboration-integrations + Scenario: Get a webhook integration returns "OK" response + Given there is a valid "webhook" in the system + And new "GetWebhooksIntegration" request + And request contains "webhook_name" parameter from "webhook.name" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Update a custom variable returns "Bad Request" response + Given new "UpdateWebhooksIntegrationCustomVariable" request + And request contains "custom_variable_name" parameter from "REPLACE.ME" + And body with value {"name": "CUSTOM_VARIABLE_NAME", "value": "CUSTOM_VARIABLE_VALUE"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Update a custom variable returns "Item Not Found" response + Given new "UpdateWebhooksIntegrationCustomVariable" request + And request contains "custom_variable_name" parameter from "REPLACE.ME" + And body with value {"name": "CUSTOM_VARIABLE_NAME", "value": "CUSTOM_VARIABLE_VALUE"} + When the request is sent + Then the response status is 404 Item Not Found + + @skip-terraform-config @team:Datadog/collaboration-integrations + Scenario: Update a custom variable returns "OK" response + Given there is a valid "webhook_custom_variable" in the system + And new "UpdateWebhooksIntegrationCustomVariable" request + And request contains "custom_variable_name" parameter from "webhook_custom_variable.name" + And body with value {"value": "variable-updated"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Update a webhook returns "Bad Request" response + Given new "UpdateWebhooksIntegration" request + And request contains "webhook_name" parameter from "REPLACE.ME" + And body with value {"encode_as": "json", "name": "WEBHOOK_NAME", "payload": null, "url": "https://example.com/webhook"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Update a webhook returns "Item Not Found" response + Given new "UpdateWebhooksIntegration" request + And request contains "webhook_name" parameter from "REPLACE.ME" + And body with value {"encode_as": "json", "name": "WEBHOOK_NAME", "payload": null, "url": "https://example.com/webhook"} + When the request is sent + Then the response status is 404 Item Not Found + + @skip-terraform-config @team:Datadog/collaboration-integrations + Scenario: Update a webhook returns "OK" response + Given there is a valid "webhook" in the system + And new "UpdateWebhooksIntegration" request + And request contains "webhook_name" parameter from "webhook.name" + And body with value {"url": "https://example.com/webhook-updated"} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/action_connection.feature b/test-runner-data/features/v2/action_connection.feature new file mode 100644 index 0000000000..759615a8fd --- /dev/null +++ b/test-runner-data/features/v2/action_connection.feature @@ -0,0 +1,157 @@ +@endpoint(action-connection) @endpoint(action-connection-v2) +Feature: Action Connection + Action connections extend your installed integrations and allow you to + take action in your third-party systems (e.g. AWS, GitLab, and Statuspage) + with Datadog’s Workflow Automation and App Builder products. Datadog’s + Integrations automatically provide authentication for Slack, Microsoft + Teams, PagerDuty, Opsgenie, JIRA, GitHub, and Statuspage. You do not need + additional connections in order to access these tools within Workflow + Automation and App Builder. We offer granular access control for editing + and resolving connections. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ActionConnection" API + + @team:DataDog/workflow-automation-dev + Scenario: Create a new Action Connection returns "Bad Request" response + Given new "CreateActionConnection" request + And body with value {"data":{"type":"action_connection","attributes":{"name":"Cassette Connection","integration":{"type":"AWS","credentials":{"type":"AWSAssumeRole","role":"MyRoleUpdated","account_id":"1"}}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/workflow-automation-dev + Scenario: Create a new Action Connection returns "Successfully created Action Connection" response + Given new "CreateActionConnection" request + And body with value {"data":{"type":"action_connection","attributes":{"name":"Cassette Connection {{ unique_lower_alnum }}","integration":{"type":"AWS","credentials":{"type":"AWSAssumeRole","role":"MyRoleUpdated","account_id":"123456789123"}}}}} + When the request is sent + Then the response status is 201 Successfully created Action Connection + + @team:DataDog/workflow-automation-dev + Scenario: Delete an existing Action Connection returns "Not Found" response + Given new "DeleteActionConnection" request + And request contains "connection_id" parameter with value "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/workflow-automation-dev + Scenario: Delete an existing Action Connection returns "The resource was deleted successfully." response + Given there is a valid "action_connection" in the system + And new "DeleteActionConnection" request + And request contains "connection_id" parameter from "action_connection.data.id" + When the request is sent + Then the response status is 204 The resource was deleted successfully. + + @team:DataDog/workflow-automation-dev + Scenario: Get an existing Action Connection returns "Bad Request" response + Given new "GetActionConnection" request + And request contains "connection_id" parameter with value "bad-format" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/workflow-automation-dev + Scenario: Get an existing Action Connection returns "Not Found" response + Given new "GetActionConnection" request + And request contains "connection_id" parameter with value "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/workflow-automation-dev + Scenario: Get an existing Action Connection returns "Successfully get Action Connection" response + Given new "GetActionConnection" request + And request contains "connection_id" parameter with value "cb460d51-3c88-4e87-adac-d47131d0423d" + When the request is sent + Then the response status is 200 Successfully get Action Connection + + @team:DataDog/workflow-automation-dev + Scenario: Get an existing App Key Registration returns "Bad request" response + Given new "GetAppKeyRegistration" request + And request contains "app_key_id" parameter with value "not_valid_app_key_id" + When the request is sent + Then the response status is 400 Bad request + + @team:DataDog/workflow-automation-dev + Scenario: Get an existing App Key Registration returns "Not found" response + Given new "GetAppKeyRegistration" request + And request contains "app_key_id" parameter with value "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/workflow-automation-dev + Scenario: Get an existing App Key Registration returns "OK" response + Given new "GetAppKeyRegistration" request + And request contains "app_key_id" parameter with value "b7feea52-994e-4714-a100-1bd9eff5aee1" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/workflow-automation-dev + Scenario: List App Key Registrations returns "Bad request" response + Given new "ListAppKeyRegistrations" request + When the request is sent + Then the response status is 400 Bad request + + @team:DataDog/workflow-automation-dev + Scenario: List App Key Registrations returns "OK" response + Given new "ListAppKeyRegistrations" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/workflow-automation-dev + Scenario: Register a new App Key returns "Bad request" response + Given new "RegisterAppKey" request + And request contains "app_key_id" parameter with value "not_valid_app_key_id" + When the request is sent + Then the response status is 400 Bad request + + @team:DataDog/workflow-automation-dev + Scenario: Register a new App Key returns "Created" response + Given new "RegisterAppKey" request + And request contains "app_key_id" parameter with value "b7feea52-994e-4714-a100-1bd9eff5aee1" + When the request is sent + Then the response status is 201 Created + + @team:DataDog/workflow-automation-dev + Scenario: Unregister an App Key returns "Bad request" response + Given new "UnregisterAppKey" request + And request contains "app_key_id" parameter with value "not_valid_app_key_id" + When the request is sent + Then the response status is 400 Bad request + + @skip @team:DataDog/workflow-automation-dev + Scenario: Unregister an App Key returns "No Content" response + Given new "UnregisterAppKey" request + And request contains "app_key_id" parameter with value "57cc69ae-9214-4ecc-8df8-43ecc1d92d99" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/workflow-automation-dev + Scenario: Unregister an App Key returns "Not found" response + Given new "UnregisterAppKey" request + And request contains "app_key_id" parameter with value "57cc69ae-9214-4ecc-8df8-43ecc1d92d99" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/workflow-automation-dev + Scenario: Update an existing Action Connection returns "Bad Request" response + Given new "UpdateActionConnection" request + And request contains "connection_id" parameter with value "cb460d51-3c88-4e87-adac-d47131d0423d" + And body with value {"data":{"type":"action_connection","attributes":{"name":"Cassette Connection","integration":{"type":"AWS","credentials":{"type":"AWSAssumeRole","role":"MyRoleUpdated","account_id":"1"}}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/workflow-automation-dev + Scenario: Update an existing Action Connection returns "Not Found" response + Given new "UpdateActionConnection" request + And request contains "connection_id" parameter with value "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + And body with value {"data":{"type":"action_connection","attributes":{"name":"Cassette Connection","integration":{"type":"AWS","credentials":{"type":"AWSAssumeRole","role":"MyRoleUpdated","account_id":"123456789123"}}}}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/workflow-automation-dev + Scenario: Update an existing Action Connection returns "Successfully updated Action Connection" response + Given new "UpdateActionConnection" request + And request contains "connection_id" parameter with value "cb460d51-3c88-4e87-adac-d47131d0423d" + And body with value {"data":{"type":"action_connection","attributes":{"name":"Cassette Connection","integration":{"type":"AWS","credentials":{"type":"AWSAssumeRole","role":"MyRoleUpdated","account_id":"123456789123"}}}}} + When the request is sent + Then the response status is 200 Successfully updated Action Connection diff --git a/test-runner-data/features/v2/actions_datastores.feature b/test-runner-data/features/v2/actions_datastores.feature new file mode 100644 index 0000000000..a8cd02fe05 --- /dev/null +++ b/test-runner-data/features/v2/actions_datastores.feature @@ -0,0 +1,247 @@ +@endpoint(actions-datastores) @endpoint(actions-datastores-v2) +Feature: Actions Datastores + Leverage the Actions Datastore API to create, modify, and delete items in + datastores owned by your organization. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ActionsDatastores" API + + @team:DataDog/app-builder-backend + Scenario: Bulk delete datastore items returns "Bad Request" response + Given new "BulkDeleteDatastoreItems" request + And there is a valid "datastore" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + And body with value {"data": {"attributes": {"item_keys": []}, "type": "items"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Bulk delete datastore items returns "Not Found" response + Given new "BulkDeleteDatastoreItems" request + And request contains "datastore_id" parameter with value "c1eb5bb8-726a-4e59-9a61-ccbb26f95329" + And body with value {"data": {"attributes": {"item_keys": ["nonexistent"]}, "type": "items"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Bulk delete datastore items returns "OK" response + Given new "BulkDeleteDatastoreItems" request + And there is a valid "datastore" in the system + And there is a valid "datastore_item" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + And body with value {"data": {"attributes": {"item_keys": ["test-key"]}, "type": "items"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: Bulk write datastore items returns "Bad Request" response + Given new "BulkWriteDatastoreItems" request + And there is a valid "datastore" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + And body with value {"data": {"attributes": {"values": [{"id": "cust_3141", "name": "Johnathan"}, {"badPrimaryKey": "key2", "name": "Johnathan"}]}, "type": "items"}} + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "item key missing or invalid" + + @team:DataDog/app-builder-backend + Scenario: Bulk write datastore items returns "Not Found" response + Given new "BulkWriteDatastoreItems" request + And request contains "datastore_id" parameter with value "70b87c26-886f-497a-bd9d-09f53bc9b40c" + And body with value {"data": {"attributes": {"values": [{"id": "cust_3141", "name": "Johnathan"}, {"id": "cust_3142", "name": "Mary"}]}, "type": "items"}} + When the request is sent + Then the response status is 404 Not Found + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "datastore not found" + + @team:DataDog/app-builder-backend + Scenario: Bulk write datastore items returns "OK" response + Given new "BulkWriteDatastoreItems" request + And there is a valid "datastore" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + And body with value {"data": {"attributes": {"values": [{"id": "cust_3141", "name": "Johnathan"}, {"id": "cust_3142", "name": "Mary"}]}, "type": "items"}} + When the request is sent + Then the response status is 200 OK + And the response "data" has length 2 + + @team:DataDog/app-builder-backend + Scenario: Create datastore returns "Bad Request" response + Given new "CreateDatastore" request + And body with value {"data": {"attributes": {"name": "datastore-name", "primary_column_name": "0invalid_key"}, "type": "datastores"}} + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "datastore configuration invalid" + + @team:DataDog/app-builder-backend + Scenario: Create datastore returns "OK" response + Given new "CreateDatastore" request + And body with value {"data": {"attributes": {"name": "datastore-name", "primary_column_name": "primaryKey"}, "type": "datastores"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: Delete datastore item returns "Bad Request" response + Given new "DeleteDatastoreItem" request + And request contains "datastore_id" parameter with value "invalid-uuid" + And body with value {"data": {"attributes": {"item_key": "primaryKey"}, "type": "items"}} + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "invalid path parameter" + + @team:DataDog/app-builder-backend + Scenario: Delete datastore item returns "Not Found" response + Given new "DeleteDatastoreItem" request + And request contains "datastore_id" parameter with value "70b87c26-886f-497a-bd9d-09f53bc9b40c" + And body with value {"data": {"attributes": {"item_key": "primaryKey"}, "type": "items"}} + When the request is sent + Then the response status is 404 Not Found + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "datastore not found" + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Delete datastore item returns "OK" response + Given new "DeleteDatastoreItem" request + And there is a valid "datastore" in the system + And there is a valid "datastore_item" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + And body with value {"data": {"attributes": {"item_key": "test-key"}, "type": "items" }} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: Delete datastore returns "Bad Request" response + Given new "DeleteDatastore" request + And request contains "datastore_id" parameter with value "invalid-uuid" + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "invalid path parameter" + + @skip-typescript @skip-validation @team:DataDog/app-builder-backend + Scenario: Delete datastore returns "OK" response + Given new "DeleteDatastore" request + And there is a valid "datastore" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: Get datastore returns "Bad Request" response + Given new "GetDatastore" request + And request contains "datastore_id" parameter with value "invalid-uuid" + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "invalid path parameter" + + @team:DataDog/app-builder-backend + Scenario: Get datastore returns "Not Found" response + Given new "GetDatastore" request + And request contains "datastore_id" parameter with value "5bf53b3f-b230-4b35-ab1a-b39f2633eb22" + When the request is sent + Then the response status is 404 Not Found + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "datastore not found" + + @team:DataDog/app-builder-backend + Scenario: Get datastore returns "OK" response + Given new "GetDatastore" request + And there is a valid "datastore" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{datastore.data.id}}" + + @team:DataDog/app-builder-backend + Scenario: List datastore items returns "Bad Request" response + Given new "ListDatastoreItems" request + And request contains "datastore_id" parameter with value "invalid-uuid" + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "invalid path parameter" + + @team:DataDog/app-builder-backend + Scenario: List datastore items returns "Not Found" response + Given new "ListDatastoreItems" request + And request contains "datastore_id" parameter with value "3cfdd0b8-c490-4969-8d51-69add64a70ea" + When the request is sent + Then the response status is 404 Not Found + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "datastore not found" + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: List datastore items returns "OK" response + Given new "ListDatastoreItems" request + And there is a valid "datastore" in the system + And there is a valid "datastore_item" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + + @team:DataDog/app-builder-backend + Scenario: List datastores returns "OK" response + Given new "ListDatastores" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: Update datastore item returns "Bad Request" response + Given new "UpdateDatastoreItem" request + And request contains "datastore_id" parameter with value "invalid-uuid" + And body with value {"data": {"attributes": {"item_changes": {}, "item_key": ""}, "type": "items"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Update datastore item returns "Not Found" response + Given new "UpdateDatastoreItem" request + And request contains "datastore_id" parameter with value "3cfdd0b8-c490-4969-8d51-69add64a70ea" + And body with value {"data": {"attributes": {"item_changes": {}, "item_key": "itemKey"}, "type": "items"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update datastore item returns "OK" response + Given new "UpdateDatastoreItem" request + And there is a valid "datastore" in the system + And there is a valid "datastore_item" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + And body with value {"data": {"attributes": {"item_changes": {}, "item_key": "test-key"}, "type": "items"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: Update datastore returns "Bad Request" response + Given new "UpdateDatastore" request + And request contains "datastore_id" parameter with value "invalid-uuid" + And body with value {"data": {"attributes": {}, "type": "datastores", "id": "invalid-uuid"}} + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "invalid path parameter" + + @team:DataDog/app-builder-backend + Scenario: Update datastore returns "Not Found" response + Given new "UpdateDatastore" request + And request contains "datastore_id" parameter with value "c1eb5bb8-726a-4e59-9a61-ccbb26f95329" + And body with value {"data": {"attributes": {"name": "updated name"}, "type": "datastores", "id": "c1eb5bb8-726a-4e59-9a61-ccbb26f95329"}} + When the request is sent + Then the response status is 404 Not Found + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "datastore not found" + + @team:DataDog/app-builder-backend + Scenario: Update datastore returns "OK" response + Given new "UpdateDatastore" request + And there is a valid "datastore" in the system + And request contains "datastore_id" parameter from "datastore.data.id" + And body with value {"data": {"attributes": {"name": "updated name"}, "type": "datastores", "id": "{{datastore.data.id}}"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "updated name" diff --git a/test-runner-data/features/v2/agentless_scanning.feature b/test-runner-data/features/v2/agentless_scanning.feature new file mode 100644 index 0000000000..3b1344cb4a --- /dev/null +++ b/test-runner-data/features/v2/agentless_scanning.feature @@ -0,0 +1,312 @@ +@endpoint(agentless-scanning) @endpoint(agentless-scanning-v2) +Feature: Agentless Scanning + Datadog Agentless Scanning provides visibility into risks and + vulnerabilities within your hosts, running containers, and serverless + functions—all without requiring teams to install Agents on every host or + where Agents cannot be installed. Agentless offers also Sensitive Data + Scanning capabilities on your storage. Go to + https://www.datadoghq.com/blog/agentless-scanning/ to learn more. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "AgentlessScanning" API + + @team:DataDog/k9-agentless + Scenario: Create AWS on demand task returns "AWS on demand task created successfully." response + Given new "CreateAwsOnDemandTask" request + And body with value {"data": {"attributes": {"arn": "arn:aws:lambda:us-west-2:123456789012:function:my-function"}, "type": "aws_resource"}} + When the request is sent + Then the response status is 201 AWS on demand task created successfully + And the response "data.attributes.arn" is equal to "arn:aws:lambda:us-west-2:123456789012:function:my-function" + And the response "data.attributes.status" is equal to "QUEUED" + + @team:DataDog/k9-agentless + Scenario: Create AWS on demand task returns "Bad Request" response + Given new "CreateAwsOnDemandTask" request + And body with value {"data": {"attributes": {"arn": "invalid-arn"}, "type": "aws_resource"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/k9-agentless + Scenario: Create AWS scan options returns "Agentless scan options enabled successfully." response + Given new "CreateAwsScanOptions" request + And body with value {"data": {"id": "000000000003", "type": "aws_scan_options", "attributes": {"compliance_host": true, "lambda": true, "sensitive_data": false, "vuln_containers_os": true, "vuln_host_os": true}}} + When the request is sent + Then the response status is 201 Created + + @team:DataDog/k9-agentless + Scenario: Create AWS scan options returns "Bad Request" response + Given new "CreateAwsScanOptions" request + And body with value {"data": {"id": "123", "type": "aws_scan_options", "attributes": {"compliance_host": true, "lambda": true, "sensitive_data": false, "vuln_containers_os": true, "vuln_host_os": true}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-agentless + Scenario: Create AWS scan options returns "Conflict" response + Given new "CreateAwsScanOptions" request + And body with value {"data":{"type":"aws_scan_options","id":"000000000002","attributes":{"compliance_host":true,"vuln_host_os":true,"vuln_containers_os":true,"sensitive_data":false,"lambda":false}}} + When the request is sent + Then the response status is 409 Conflict + + @skip-validation @team:DataDog/k9-agentless + Scenario: Create Azure scan options returns "Created" response + Given new "CreateAzureScanOptions" request + And body with value {"data": {"attributes": {"function": true, "vuln_containers_os": true, "vuln_host_os": true}, "id": "12345678-90ab-cdef-1234-567890abcdef", "type": "azure_scan_options"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.function" is equal to true + + @team:DataDog/k9-agentless + Scenario: Create GCP scan options returns "Agentless scan options enabled successfully." response + Given new "CreateGcpScanOptions" request + And body with value {"data": {"id": "new-project", "type": "gcp_scan_options", "attributes": {"cloud_function": true, "vuln_host_os": true, "vuln_containers_os": true}}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.cloud_function" is equal to true + + @team:DataDog/k9-agentless + Scenario: Create GCP scan options returns "Bad Request" response + Given new "CreateGcpScanOptions" request + And body with value {"data": {"id": "no", "type": "gcp_scan_options", "attributes": {"vuln_host_os": true, "vuln_containers_os": true}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-agentless + Scenario: Create GCP scan options returns "Conflict" response + Given new "CreateGcpScanOptions" request + And body with value {"data": {"id": "api-spec-test", "type": "gcp_scan_options", "attributes": {"vuln_host_os": true, "vuln_containers_os": true}}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/k9-agentless + Scenario: Delete AWS scan options returns "Bad Request" response + Given new "DeleteAwsScanOptions" request + And request contains "account_id" parameter with value "incorrectId" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-agentless + Scenario: Delete AWS scan options returns "No Content" response + Given new "DeleteAwsScanOptions" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/k9-agentless + Scenario: Delete AWS scan options returns "Not Found" response + Given new "DeleteAwsScanOptions" request + And request contains "account_id" parameter with value "000000000005" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-agentless + Scenario: Delete Azure scan options returns "No Content" response + Given new "DeleteAzureScanOptions" request + And request contains "subscription_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/k9-agentless + Scenario: Delete GCP scan options returns "Bad Request" response + Given new "DeleteGcpScanOptions" request + And request contains "project_id" parameter with value "no" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-agentless + Scenario: Delete GCP scan options returns "No Content" response + Given new "DeleteGcpScanOptions" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/k9-agentless + Scenario: Delete GCP scan options returns "Not Found" response + Given new "DeleteGcpScanOptions" request + And request contains "project_id" parameter with value "nonexistent-project-id" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-agentless + Scenario: Get AWS on demand task returns "Bad Request" response + Given new "GetAwsOnDemandTask" request + And request contains "task_id" parameter with value "invalid-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-agentless + Scenario: Get AWS on demand task returns "Not Found" response + Given new "GetAwsOnDemandTask" request + And request contains "task_id" parameter with value "00000000-0000-0000-824a-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-agentless + Scenario: Get AWS on demand task returns "OK." response + Given new "GetAwsOnDemandTask" request + And request contains "task_id" parameter with value "63d6b4f5-e5d0-4d90-824a-9580f05f026a" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.arn" is equal to "arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test" + + @team:DataDog/k9-agentless + Scenario: Get AWS scan options returns "Bad Request" response + Given new "GetAwsScanOptions" request + And request contains "account_id" parameter with value "not-an-account-id" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-agentless + Scenario: Get AWS scan options returns "Not Found" response + Given new "GetAwsScanOptions" request + And request contains "account_id" parameter with value "404404404404" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-agentless + Scenario: Get AWS scan options returns "OK" response + Given there is a valid "aws_scan_options" in the system + And new "GetAwsScanOptions" request + And request contains "account_id" parameter with value "{{ aws_scan_options.id }}" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{ aws_scan_options.id }}" + And the response "data.type" is equal to "{{ aws_scan_options.type }}" + + @skip @team:DataDog/k9-agentless + Scenario: Get Azure scan options returns "Bad Request" response + Given new "GetAzureScanOptions" request + And request contains "subscription_id" parameter with value "invalid uuid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-agentless + Scenario: Get Azure scan options returns "Not Found" response + Given new "GetAzureScanOptions" request + And request contains "subscription_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-agentless + Scenario: Get Azure scan options returns "OK" response + Given new "GetAzureScanOptions" request + And request contains "subscription_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-agentless + Scenario: Get GCP scan options returns "Bad Request" response + Given new "GetGcpScanOptions" request + And request contains "project_id" parameter with value "no" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-agentless + Scenario: Get GCP scan options returns "Not Found" response + Given new "GetGcpScanOptions" request + And request contains "project_id" parameter with value "nonexistent-project-id" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-agentless + Scenario: Get GCP scan options returns "OK" response + Given there is a valid "gcp_scan_options" in the system + And new "GetGcpScanOptions" request + And request contains "project_id" parameter with value "api-spec-test" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "api-spec-test" + And the response "data.type" is equal to "{{ gcp_scan_options.type }}" + + @team:DataDog/k9-agentless + Scenario: List AWS on demand tasks returns "OK" response + Given new "ListAwsOnDemandTasks" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "aws_resource" + + @team:DataDog/k9-agentless + Scenario: List AWS scan options returns "OK" response + Given new "ListAwsScanOptions" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-agentless + Scenario: List Azure scan options returns "OK" response + Given new "ListAzureScanOptions" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-agentless + Scenario: List GCP scan options returns "OK" response + Given new "ListGcpScanOptions" request + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/k9-agentless + Scenario: Update AWS scan options returns "Bad Request" response + Given new "UpdateAwsScanOptions" request + And request contains "account_id" parameter with value "000000000003" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-agentless + Scenario: Update AWS scan options returns "Bad Request" response 2 + Given new "UpdateAwsScanOptions" request + And request contains "account_id" parameter with value "000000000003" + And body with value {"data":{"type":"aws_scan_options","id":"000000000005","attributes":{"vuln_host_os":true,"vuln_containers_os":true}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-agentless + Scenario: Update AWS scan options returns "No Content" response + Given new "UpdateAwsScanOptions" request + And request contains "account_id" parameter with value "000000000002" + And body with value {"data":{"type":"aws_scan_options","id":"000000000002","attributes":{"vuln_host_os":true,"vuln_containers_os":true,"lambda":false}}} + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/k9-agentless + Scenario: Update AWS scan options returns "Not Found" response + Given new "UpdateAwsScanOptions" request + And request contains "account_id" parameter with value "000000000005" + And body with value {"data":{"type":"aws_scan_options","id":"000000000005","attributes":{"vuln_host_os":true,"vuln_containers_os":true}}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-agentless + Scenario: Update Azure scan options returns "OK" response + Given new "UpdateAzureScanOptions" request + And request contains "subscription_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "12345678-90ab-cdef-1234-567890abcdef", "type": "azure_scan_options"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-agentless + Scenario: Update GCP scan options returns "Bad Request" response + Given new "UpdateGcpScanOptions" request + And request contains "project_id" parameter with value "no" + And body with value {"data": {"id": "different-project-id", "type": "gcp_scan_options"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-agentless + Scenario: Update GCP scan options returns "Not Found" response + Given new "UpdateGcpScanOptions" request + And request contains "project_id" parameter with value "nonexistent-project-id" + And body with value {"data": {"id": "nonexistent-project-id", "type": "gcp_scan_options", "attributes": {"vuln_host_os": true, "vuln_containers_os": true}}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-agentless + Scenario: Update GCP scan options returns "OK" response + Given new "UpdateGcpScanOptions" request + And request contains "project_id" parameter with value "api-spec-test" + And body with value {"data": {"id": "api-spec-test", "type": "gcp_scan_options", "attributes": {"cloud_function": true, "vuln_containers_os": false}}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "api-spec-test" + And the response "data.attributes.vuln_host_os" is equal to true + And the response "data.attributes.vuln_containers_os" is equal to false + And the response "data.attributes.cloud_function" is equal to true diff --git a/test-runner-data/features/v2/annotations.feature b/test-runner-data/features/v2/annotations.feature new file mode 100644 index 0000000000..0df59be814 --- /dev/null +++ b/test-runner-data/features/v2/annotations.feature @@ -0,0 +1,112 @@ +@endpoint(annotations) @endpoint(annotations-v2) +Feature: Annotations + Add annotations to dashboards and notebooks to mark events such as + deployments, incidents, or other notable moments in time. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Annotations" API + + @generated @skip @team:DataDog/dataviz-advanced-analytics + Scenario: Create an annotation returns "Bad Request" response + Given operation "CreateAnnotation" enabled + And new "CreateAnnotation" request + And body with value {"data": {"attributes": {"color": "blue", "description": "Deployed v2.3.1 to production.", "end_time": 1704070800000, "page_id": "dashboard:abc-def-xyz", "start_time": 1704067200000, "type": "pointInTime", "widget_ids": ["1234567890"]}, "type": "annotation"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dataviz-advanced-analytics + Scenario: Create an annotation returns "OK" response + Given operation "CreateAnnotation" enabled + And new "CreateAnnotation" request + And body with value {"data": {"attributes": {"color": "blue", "description": "Deployed v2.3.1 to production.", "page_id": "dashboard:abc-def-xyz", "start_time": 1704067200000, "type": "pointInTime", "widget_ids": ["1234567890"]}, "type": "annotation"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/dataviz-advanced-analytics + Scenario: Delete an annotation returns "Bad Request" response + Given operation "DeleteAnnotation" enabled + And new "DeleteAnnotation" request + And request contains "annotation_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dataviz-advanced-analytics + Scenario: Delete an annotation returns "No Content" response + Given operation "DeleteAnnotation" enabled + And there is a valid "annotation" in the system + And new "DeleteAnnotation" request + And request contains "annotation_id" parameter from "annotation.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/dataviz-advanced-analytics + Scenario: Get annotations for a page returns "Bad Request" response + Given operation "GetPageAnnotations" enabled + And new "GetPageAnnotations" request + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "start_time" parameter from "REPLACE.ME" + And request contains "end_time" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dataviz-advanced-analytics + Scenario: Get annotations for a page returns "OK" response + Given there is a valid "annotation" in the system + And operation "GetPageAnnotations" enabled + And new "GetPageAnnotations" request + And request contains "page_id" parameter from "annotation.data.attributes.page_id" + And request contains "start_time" parameter with value 1704067200000 + And request contains "end_time" parameter with value 1704153600000 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/dataviz-advanced-analytics + Scenario: List annotations returns "Bad Request" response + Given operation "ListAnnotations" enabled + And new "ListAnnotations" request + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "start_time" parameter from "REPLACE.ME" + And request contains "end_time" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dataviz-advanced-analytics + Scenario: List annotations returns "OK" response + Given there is a valid "annotation" in the system + And operation "ListAnnotations" enabled + And new "ListAnnotations" request + And request contains "page_id" parameter from "annotation.data.attributes.page_id" + And request contains "start_time" parameter with value 1704067200000 + And request contains "end_time" parameter with value 1704153600000 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/dataviz-advanced-analytics + Scenario: Update an annotation returns "Bad Request" response + Given operation "UpdateAnnotation" enabled + And new "UpdateAnnotation" request + And request contains "annotation_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"color": "blue", "description": "Deployed v2.3.1 to production.", "end_time": 1704070800000, "page_id": "dashboard:abc-def-xyz", "start_time": 1704067200000, "type": "pointInTime", "widget_ids": ["1234567890"]}, "type": "annotation"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/dataviz-advanced-analytics + Scenario: Update an annotation returns "Not Found" response + Given operation "UpdateAnnotation" enabled + And new "UpdateAnnotation" request + And request contains "annotation_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"color": "blue", "description": "Deployed v2.3.1 to production.", "end_time": 1704070800000, "page_id": "dashboard:abc-def-xyz", "start_time": 1704067200000, "type": "pointInTime", "widget_ids": ["1234567890"]}, "type": "annotation"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/dataviz-advanced-analytics + Scenario: Update an annotation returns "OK" response + Given there is a valid "annotation" in the system + And operation "UpdateAnnotation" enabled + And new "UpdateAnnotation" request + And request contains "annotation_id" parameter from "annotation.data.id" + And body with value {"data": {"attributes": {"color": "green", "description": "Updated annotation.", "page_id": "dashboard:abc-def-xyz", "start_time": 1704067200000, "type": "pointInTime"}, "type": "annotation"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/apm_retention_filters.feature b/test-runner-data/features/v2/apm_retention_filters.feature new file mode 100644 index 0000000000..f3334c20e3 --- /dev/null +++ b/test-runner-data/features/v2/apm_retention_filters.feature @@ -0,0 +1,136 @@ +@endpoint(apm-retention-filters) @endpoint(apm-retention-filters-v2) +Feature: APM Retention Filters + Manage configuration of [APM retention + filters](https://app.datadoghq.com/apm/traces/retention-filters) for your + organization. You need an API and application key with Admin rights to + interact with this endpoint. See [retention filters](https://docs.datadogh + q.com/tracing/trace_pipeline/trace_retention/#retention-filters) on the + Trace Retention page for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "APMRetentionFilters" API + + @team:DataDog/apm-trace-intake + Scenario: Create a default retention filter returns "Bad Request" response + Given new "CreateApmRetentionFilter" request + And body with value {"data": {"attributes": {"enabled": true, "filter": {"query": "@http.status_code:200 service:my-service"}, "filter_type": "spans-errors-sampling-processor", "name": "my retention filter", "rate": 1.0}, "type": "apm_retention_filter"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/apm-trace-intake + Scenario: Create a retention filter returns "Bad Request" response + Given new "CreateApmRetentionFilter" request + And body with value {"data": {"attributes": {"enabled": true, "filter": {"query": "@http.status_code:200 service:my-service"}, "filter_type": "spans-sampling-processor", "name": "my retention filter", "rate": 2.0}, "type": "apm_retention_filter"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/apm-trace-intake + Scenario: Create a retention filter returns "Conflict" response + Given new "CreateApmRetentionFilter" request + And body with value {"data": {"attributes": {"enabled": true, "filter": {"query": "@http.status_code:200 service:my-service"}, "filter_type": "spans-sampling-processor", "name": "my retention filter", "rate": 1.0, "trace_rate": 1.0}, "type": "apm_retention_filter"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/apm-trace-intake + Scenario: Create a retention filter returns "OK" response + Given new "CreateApmRetentionFilter" request + And body with value {"data": {"attributes": {"enabled": true, "filter": {"query": "@http.status_code:200 service:my-service"}, "filter_type": "spans-sampling-processor", "name": "my retention filter", "rate": 1.0}, "type": "apm_retention_filter"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "my retention filter" + + @team:DataDog/apm-trace-intake + Scenario: Create a retention filter with trace rate returns "OK" response + Given new "CreateApmRetentionFilter" request + And body with value {"data": {"attributes": {"enabled": true, "filter": {"query": "@http.status_code:200 service:my-service"}, "filter_type": "spans-sampling-processor", "name": "my retention filter", "rate": 1.0, "trace_rate": 1.0}, "type": "apm_retention_filter"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/apm-trace-intake + Scenario: Delete a retention filter returns "Not Found" response + Given new "DeleteApmRetentionFilter" request + And request contains "filter_id" parameter with value "not_found" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/apm-trace-intake + Scenario: Delete a retention filter returns "OK" response + Given there is a valid "retention_filter" in the system + And new "DeleteApmRetentionFilter" request + And request contains "filter_id" parameter from "retention_filter.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/apm-trace-intake + Scenario: Get a given APM retention filter returns "Not Found" response + Given new "GetApmRetentionFilter" request + And request contains "filter_id" parameter with value "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/apm-trace-intake + Scenario: Get a given APM retention filter returns "OK" response + Given there is a valid "retention_filter" in the system + And new "GetApmRetentionFilter" request + And request contains "filter_id" parameter from "retention_filter.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/apm-trace-intake + Scenario: List all APM retention filters returns "OK" response + Given there is a valid "retention_filter" in the system + And new "ListApmRetentionFilters" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "id" with value "{{ retention_filter.data.id }}" + + @generated @skip @team:DataDog/apm-trace-intake + Scenario: Re-order retention filters returns "Bad Request" response + Given new "ReorderApmRetentionFilters" request + And body with value {"data": [{"id": "7RBOb7dLSYWI01yc3pIH8w", "type": "apm_retention_filter"}]} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/apm-trace-intake + Scenario: Re-order retention filters returns "OK" response + Given new "ReorderApmRetentionFilters" request + And body with value {"data":[{"id":"jdZrilSJQLqzb6Cu7aub9Q","type":"apm_retention_filter"},{"id":"7RBOb7dLSYWI01yc3pIH8w","type":"apm_retention_filter"}]} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/apm-trace-intake + Scenario: Update a retention filter returns "Bad Request" response + Given there is a valid "retention_filter" in the system + And new "UpdateApmRetentionFilter" request + And request contains "filter_id" parameter from "retention_filter.data.id" + And body with value {"data": { "attributes": { "name": "test","rate": 1.90, "filter": {"query": "@_top_level:1 test:service-demo"},"enabled": true,"filter_type": "spans-sampling-processor"}, "id":"test-id", "type": "apm_retention_filter"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/apm-trace-intake + Scenario: Update a retention filter returns "Not Found" response + Given new "UpdateApmRetentionFilter" request + And request contains "filter_id" parameter with value "not_found" + And body with value {"data": { "attributes": { "name": "test", "rate": 0.90, "filter": {"query": "@_top_level:1 test:service-demo"},"enabled": true,"filter_type": "spans-sampling-processor"}, "id":"not_found", "type": "apm_retention_filter"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/apm-trace-intake + Scenario: Update a retention filter returns "OK" response + Given there is a valid "retention_filter" in the system + And new "UpdateApmRetentionFilter" request + And request contains "filter_id" parameter from "retention_filter.data.id" + And body with value {"data": { "attributes": { "name": "test", "rate": 0.90, "filter": {"query": "@_top_level:1 test:service-demo"},"enabled": true,"filter_type": "spans-sampling-processor"}, "id":"test-id", "type": "apm_retention_filter"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/apm-trace-intake + Scenario: Update a retention filter with trace rate returns "OK" response + Given there is a valid "retention_filter" in the system + And new "UpdateApmRetentionFilter" request + And request contains "filter_id" parameter from "retention_filter.data.id" + And body with value {"data": {"attributes": {"name": "test", "rate": 0.90, "trace_rate": 1.0, "filter": {"query": "@_top_level:1 test:service-demo"},"enabled": true,"filter_type": "spans-sampling-processor"}, "id":"test-id", "type": "apm_retention_filter"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/app_builder.feature b/test-runner-data/features/v2/app_builder.feature new file mode 100644 index 0000000000..782c77895f --- /dev/null +++ b/test-runner-data/features/v2/app_builder.feature @@ -0,0 +1,434 @@ +@endpoint(app-builder) @endpoint(app-builder-v2) +Feature: App Builder + Datadog App Builder provides a low-code solution to rapidly develop and + integrate secure, customized applications into your monitoring stack that + are built to accelerate remediation at scale. These API endpoints allow + you to create, read, update, delete, and publish apps. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "AppBuilder" API + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Create App returns "Bad Request" response + Given new "CreateApp" request + And body with value {"data": {"attributes": {"description": "This is a bad example app", "queries": [], "rootInstanceName": "grid0"}, "type": "appDefinitions"}} + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "missing required field" + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Create App returns "Created" response + Given new "CreateApp" request + And body with value {"data":{"type":"appDefinitions","attributes":{"rootInstanceName":"grid0","components":[{"name":"grid0","type":"grid","properties":{"children":[{"type":"gridCell","name":"gridCell0","properties":{"children":[{"name":"text0","type":"text","properties":{"content":"# Cat Facts","contentType":"markdown","textAlign":"left","verticalAlign":"top","isVisible":true},"events":[]}],"isVisible":"true","layout":{"default":{"x":0,"y":0,"width":4,"height":5}}},"events":[]},{"type":"gridCell","name":"gridCell2","properties":{"children":[{"name":"table0","type":"table","properties":{"data":"${fetchFacts?.outputs?.body?.data}","columns":[{"dataPath":"fact","header":"fact","isHidden":false,"id":"0ae2ae9e-0280-4389-83c6-1c5949f7e674"},{"dataPath":"length","header":"length","isHidden":true,"id":"c9048611-0196-4a00-9366-1ef9e3ec0408"},{"id":"8fa9284b-7a58-4f13-9959-57b7d8a7fe8f","dataPath":"Due Date","header":"Unused Old Column","disableSortBy":false,"formatter":{"type":"formatted_time","format":"LARGE_WITHOUT_TIME"},"isDeleted":true}],"summary":true,"pageSize":"${pageSize?.value}","paginationType":"server_side","isLoading":"${fetchFacts?.isLoading}","rowButtons":[],"isWrappable":false,"isScrollable":"vertical","isSubRowsEnabled":false,"globalFilter":false,"isVisible":true,"totalCount":"${fetchFacts?.outputs?.body?.total}"},"events":[]}],"isVisible":"true","layout":{"default":{"x":0,"y":5,"width":12,"height":96}}},"events":[]},{"type":"gridCell","name":"gridCell1","properties":{"children":[{"name":"text1","type":"text","properties":{"content":"## Random Fact\n\n${randomFact?.outputs?.fact}","contentType":"markdown","textAlign":"left","verticalAlign":"top","isVisible":true},"events":[]}],"isVisible":"true","layout":{"default":{"x":0,"y":101,"width":12,"height":16}}},"events":[]},{"type":"gridCell","name":"gridCell3","properties":{"children":[{"name":"button0","type":"button","properties":{"label":"Increase Page Size","level":"default","isPrimary":true,"isBorderless":false,"isLoading":false,"isDisabled":false,"isVisible":true,"iconLeft":"angleUp","iconRight":""},"events":[{"variableName":"pageSize","value":"${pageSize?.value + 1}","name":"click","type":"setStateVariableValue"}]}],"isVisible":"true","layout":{"default":{"x":10,"y":134,"width":2,"height":4}}},"events":[]},{"type":"gridCell","name":"gridCell4","properties":{"children":[{"name":"button1","type":"button","properties":{"label":"Decrease Page Size","level":"default","isPrimary":true,"isBorderless":false,"isLoading":false,"isDisabled":false,"isVisible":true,"iconLeft":"angleDown","iconRight":""},"events":[{"variableName":"pageSize","value":"${pageSize?.value - 1}","name":"click","type":"setStateVariableValue"}]}],"isVisible":"true","layout":{"default":{"x":10,"y":138,"width":2,"height":4}}},"events":[]}],"backgroundColor":"default"},"events":[]}],"queries":[{"id":"92ff0bb8-553b-4f31-87c7-ef5bd16d47d5","type":"action","name":"fetchFacts","events":[],"properties":{"spec":{"fqn":"com.datadoghq.http.request","connectionId":"5e63f4a8-4ce6-47de-ba11-f6617c1d54f3","inputs":{"verb":"GET","url":"https://catfact.ninja/facts","urlParams":[{"key":"limit","value":"${pageSize.value.toString()}"},{"key":"page","value":"${(table0.pageIndex + 1).toString()}"}]}}}},{"type":"stateVariable","name":"pageSize","properties":{"defaultValue":"${20}"},"id":"afd03c81-4075-4432-8618-ba09d52d2f2d"},{"type":"dataTransform","name":"randomFact","properties":{"outputs":"${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}"},"id":"0fb22859-47dc-4137-9e41-7b67d04c525c"}],"name":"Example Cat Facts Viewer","description":"This is a slightly complicated example app that fetches and displays cat facts"}}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "appDefinitions" + + @skip @team:DataDog/app-builder-backend + Scenario: Create Publish Request returns "Bad Request" response + Given new "CreatePublishRequest" request + And request contains "app_id" parameter with value "bad-app-id" + And body with value {"data": {"attributes": {"description": "Adds new dashboard widgets and a few bug fixes.", "title": "Release v1.2 to production"}, "type": "publishRequest"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Create Publish Request returns "Created" response + Given new "CreatePublishRequest" request + And request contains "app_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Adds new dashboard widgets and a few bug fixes.", "title": "Release v1.2 to production"}, "type": "publishRequest"}} + When the request is sent + Then the response status is 201 Created + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Create Publish Request returns "Not Found" response + Given new "CreatePublishRequest" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + And body with value {"data": {"attributes": {"description": "Adds new dashboard widgets and a few bug fixes.", "title": "Release v1.2 to production"}, "type": "publishRequest"}} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/app-builder-backend + Scenario: Delete App returns "Bad Request" response + Given new "DeleteApp" request + And request contains "app_id" parameter with value "bad-app-id" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/app-builder-backend + Scenario: Delete App returns "Gone" response + Given new "DeleteApp" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + When the request is sent + Then the response status is 410 Gone + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Delete App returns "Not Found" response + Given new "DeleteApp" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + When the request is sent + Then the response status is 404 Not Found + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Delete App returns "OK" response + Given there is a valid "app" in the system + And new "DeleteApp" request + And request contains "app_id" parameter from "app.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "app.data.id" + And the response "data.type" is equal to "appDefinitions" + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Delete Multiple Apps returns "Bad Request" response + Given new "DeleteApps" request + And body with value {"data": [{"id": "aea2ed17-b45f-40d0-ba59-c86b7972c901", "type": "appDefinitions"}, {"id": "f69bb8be-6168-4fe7-a30d-370256b6504a", "type": "appDefinitions"}, {"id": "ab1ed73e-13ad-4426-b0df-a0ff8876a088", "type": "appDefinitions"}]} + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Delete Multiple Apps returns "Not Found" response + Given new "DeleteApps" request + And body with value {"data": [{"id": "aea2ed17-b45f-40d0-ba59-c86b7972c901", "type": "appDefinitions"}, {"id": "f69bb8be-6168-4fe7-a30d-370256b6504a", "type": "appDefinitions"}, {"id": "ab1ed73e-13ad-4426-b0df-a0ff8876a088", "type": "appDefinitions"}]} + When the request is sent + Then the response status is 404 Not Found + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Delete Multiple Apps returns "OK" response + Given new "DeleteApps" request + And there is a valid "app" in the system + And body with value {"data": [{"id": "{{ app.data.id }}", "type": "appDefinitions"}]} + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + And the response "data[0].id" has the same value as "app.data.id" + + @skip @team:DataDog/app-builder-backend + Scenario: Get App returns "Bad Request" response + Given new "GetApp" request + And request contains "app_id" parameter with value "invalid-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/app-builder-backend + Scenario: Get App returns "Gone" response + Given new "GetApp" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + And request contains "version" parameter with value "31" + When the request is sent + Then the response status is 410 Gone + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Get App returns "Not Found" response + Given new "GetApp" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + When the request is sent + Then the response status is 404 Not Found + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Get App returns "OK" response + Given new "GetApp" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "app.data.id" + And the response "data.type" is equal to "appDefinitions" + + @team:DataDog/app-builder-backend + Scenario: Get Blueprint returns "Not Found" response + Given new "GetBlueprint" request + And request contains "blueprint_id" parameter with value "00000000-0000-0000-0000-000000000001" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Get Blueprint returns "OK" response + Given new "GetBlueprint" request + And request contains "blueprint_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: Get Blueprints by Integration ID returns "OK" response + Given new "GetBlueprintsByIntegrationId" request + And request contains "integration_id" parameter with value "aws" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: Get Blueprints by Slugs returns "OK" response + Given new "GetBlueprintsBySlugs" request + And request contains "slugs" parameter with value "aws-service-manager" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/app-builder-backend + Scenario: List App Versions returns "Bad Request" response + Given new "ListAppVersions" request + And request contains "app_id" parameter with value "bad-app-id" + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: List App Versions returns "Not Found" response + Given new "ListAppVersions" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + When the request is sent + Then the response status is 404 Not Found + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: List App Versions returns "OK" response + Given new "ListAppVersions" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/app-builder-backend + Scenario: List Apps returns "Bad Request" response + Given new "ListApps" request + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: List Apps returns "OK" response + Given new "ListApps" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: List Blueprints returns "OK" response + Given new "ListBlueprints" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/app-builder-backend + Scenario: List Tags returns "OK" response + Given new "ListTags" request + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/app-builder-backend + Scenario: Name App Version returns "Bad Request" response + Given new "UpdateAppVersionName" request + And request contains "app_id" parameter with value "bad-app-id" + And request contains "version" parameter with value "latest" + And body with value {"data": {"attributes": {"name": "v1.2.0 - bug fix release"}, "type": "versionNames"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Name App Version returns "No Content" response + Given new "UpdateAppVersionName" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + And request contains "version" parameter with value "latest" + And body with value {"data": {"attributes": {"name": "v1.2.0 - bug fix release"}, "type": "versionNames"}} + When the request is sent + Then the response status is 204 No Content + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Name App Version returns "Not Found" response + Given new "UpdateAppVersionName" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + And request contains "version" parameter with value "latest" + And body with value {"data": {"attributes": {"name": "v1.2.0 - bug fix release"}, "type": "versionNames"}} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/app-builder-backend + Scenario: Publish App returns "Bad Request" response + Given new "PublishApp" request + And request contains "app_id" parameter with value "invalid-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Publish App returns "Created" response + Given new "PublishApp" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + When the request is sent + Then the response status is 201 Created + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Publish App returns "Not Found" response + Given new "PublishApp" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/app-builder-backend + Scenario: Revert App returns "Bad Request" response + Given new "RevertApp" request + And request contains "app_id" parameter with value "bad-app-id" + And request contains "version" parameter with value "1" + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Revert App returns "Not Found" response + Given new "RevertApp" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + And request contains "version" parameter with value "1" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Revert App returns "OK" response + Given new "RevertApp" request + And request contains "app_id" parameter from "REPLACE.ME" + And request contains "version" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/app-builder-backend + Scenario: Unpublish App returns "Bad Request" response + Given new "UnpublishApp" request + And request contains "app_id" parameter with value "invalid-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Unpublish App returns "Not Found" response + Given new "UnpublishApp" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + When the request is sent + Then the response status is 404 Not Found + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Unpublish App returns "OK" response + Given new "UnpublishApp" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/app-builder-backend + Scenario: Update App Favorite Status returns "Bad Request" response + Given new "UpdateAppFavorite" request + And request contains "app_id" parameter with value "bad-app-id" + And body with value {"data": {"attributes": {"favorite": true}, "type": "favorites"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App Favorite Status returns "No Content" response + Given new "UpdateAppFavorite" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + And body with value {"data": {"attributes": {"favorite": true}, "type": "favorites"}} + When the request is sent + Then the response status is 204 No Content + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App Favorite Status returns "Not Found" response + Given new "UpdateAppFavorite" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + And body with value {"data": {"attributes": {"favorite": true}, "type": "favorites"}} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/app-builder-backend + Scenario: Update App Protection Level returns "Bad Request" response + Given new "UpdateProtectionLevel" request + And request contains "app_id" parameter with value "bad-app-id" + And body with value {"data": {"attributes": {"protectionLevel": "approval_required"}, "type": "protectionLevel"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App Protection Level returns "Not Found" response + Given new "UpdateProtectionLevel" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + And body with value {"data": {"attributes": {"protectionLevel": "approval_required"}, "type": "protectionLevel"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App Protection Level returns "OK" response + Given new "UpdateProtectionLevel" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + And body with value {"data": {"attributes": {"protectionLevel": "approval_required"}, "type": "protectionLevel"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "appDefinitions" + + @skip @team:DataDog/app-builder-backend + Scenario: Update App Self-Service Status returns "Bad Request" response + Given new "UpdateAppSelfService" request + And request contains "app_id" parameter with value "bad-app-id" + And body with value {"data": {"attributes": {"selfService": true}, "type": "selfService"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App Self-Service Status returns "No Content" response + Given new "UpdateAppSelfService" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + And body with value {"data": {"attributes": {"selfService": true}, "type": "selfService"}} + When the request is sent + Then the response status is 204 No Content + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App Self-Service Status returns "Not Found" response + Given new "UpdateAppSelfService" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + And body with value {"data": {"attributes": {"selfService": true}, "type": "selfService"}} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/app-builder-backend + Scenario: Update App Tags returns "Bad Request" response + Given new "UpdateAppTags" request + And request contains "app_id" parameter with value "bad-app-id" + And body with value {"data": {"attributes": {"tags": ["team:platform", "service:ops"]}, "type": "tags"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App Tags returns "No Content" response + Given new "UpdateAppTags" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + And body with value {"data": {"attributes": {"tags": ["team:platform", "service:ops"]}, "type": "tags"}} + When the request is sent + Then the response status is 204 No Content + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App Tags returns "Not Found" response + Given new "UpdateAppTags" request + And request contains "app_id" parameter with value "7addb29b-f935-472c-ae79-d1963979a23e" + And body with value {"data": {"attributes": {"tags": ["team:platform", "service:ops"]}, "type": "tags"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App returns "Bad Request" response + Given new "UpdateApp" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + And body with value {"data": {"attributes": {"rootInstanceName": ""}, "id": "{{ app.data.id }}", "type": "appDefinitions"}} + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0].title" is equal to "missing required field" + + @skip-typescript @team:DataDog/app-builder-backend + Scenario: Update App returns "OK" response + Given new "UpdateApp" request + And there is a valid "app" in the system + And request contains "app_id" parameter from "app.data.id" + And body with value {"data": {"attributes": {"name": "Updated Name", "rootInstanceName": "grid0"}, "id": "{{ app.data.id }}", "type": "appDefinitions"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "app.data.id" + And the response "data.type" is equal to "appDefinitions" + And the response "data.attributes.name" is equal to "Updated Name" diff --git a/test-runner-data/features/v2/application_security.feature b/test-runner-data/features/v2/application_security.feature new file mode 100644 index 0000000000..710a606414 --- /dev/null +++ b/test-runner-data/features/v2/application_security.feature @@ -0,0 +1,314 @@ +@endpoint(application-security) @endpoint(application-security-v2) +Feature: Application Security + [Datadog Application + Security](https://docs.datadoghq.com/security/application_security/) + provides protection against application-level attacks that aim to exploit + code-level vulnerabilities, such as Server-Side-Request-Forgery (SSRF), + SQL injection, Log4Shell, and Reflected Cross-Site-Scripting (XSS). You + can monitor and protect apps hosted directly on a server, Docker, + Kubernetes, Amazon ECS, and (for supported languages) AWS Fargate. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ApplicationSecurity" API + + @generated @skip @team:DataDog/asm-backend + Scenario: Create a WAF Policy returns "Bad Request" response + Given new "CreateApplicationSecurityWafPolicy" request + And body with value {"data": {"attributes": {"basedOn": "recommended", "description": "Policy applied to internal web applications.", "isDefault": false, "name": "Internal Network Policy", "protectionPresets": ["attack-tools"], "rules": [{"blocking": false, "enabled": true, "extended_data_collection": false, "id": "rasp-001-002"}], "rulesets": [{"blocking": false, "enabled": true, "id": "attack_tool"}], "scope": [{"env": "prod", "service": "billing-service"}], "version": 0}, "type": "policy"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/asm-backend + Scenario: Create a WAF Policy returns "Concurrent Modification" response + Given new "CreateApplicationSecurityWafPolicy" request + And body with value {"data": {"attributes": {"basedOn": "recommended", "description": "Policy applied to internal web applications.", "isDefault": false, "name": "Internal Network Policy", "protectionPresets": ["attack-tools"], "rules": [{"blocking": false, "enabled": true, "extended_data_collection": false, "id": "rasp-001-002"}], "rulesets": [{"blocking": false, "enabled": true, "id": "attack_tool"}], "scope": [{"env": "prod", "service": "billing-service"}], "version": 0}, "type": "policy"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @team:DataDog/asm-backend + Scenario: Create a WAF Policy returns "Created" response + Given new "CreateApplicationSecurityWafPolicy" request + And body with value {"data": {"attributes": {"basedOn": "recommended", "description": "Policy applied to internal web applications.", "isDefault": false, "name": "Internal Network Policy", "protectionPresets": ["attack-tools"], "rules": [{"blocking": false, "enabled": true, "id": "rasp-001-002"}], "scope": [{"env": "prod", "service": "billing-service"}], "version": 0}, "type": "policy"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/asm-backend + Scenario: Create a WAF custom rule returns "Bad Request" response + Given new "CreateApplicationSecurityWafCustomRule" request + And body with value {"data": {"attributes": {"action": {"action": "block_request", "parameters": {"location": "/blocking", "status_code": 403}}, "blocking": false, "conditions": [{"operator": "match_regex", "parameters": {"data": "blocked_users", "inputs": [{"address": "server.db.statement", "key_path": []}], "list": [], "options": {"case_sensitive": false, "min_length": 0}, "regex": "path.*", "type": "string", "value": "custom_tag"}}], "enabled": false, "name": "Block request from a bad useragent", "path_glob": "/api/search/*", "scope": [{"env": "prod", "service": "billing-service"}], "tags": {"category": "business_logic", "type": "users.login.success"}}, "type": "custom_rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/asm-backend + Scenario: Create a WAF custom rule returns "Concurrent Modification" response + Given new "CreateApplicationSecurityWafCustomRule" request + And body with value {"data": {"attributes": {"action": {"action": "block_request", "parameters": {"location": "/blocking", "status_code": 403}}, "blocking": false, "conditions": [{"operator": "match_regex", "parameters": {"data": "blocked_users", "inputs": [{"address": "server.db.statement", "key_path": []}], "list": [], "options": {"case_sensitive": false, "min_length": 0}, "regex": "path.*", "type": "string", "value": "custom_tag"}}], "enabled": false, "name": "Block request from a bad useragent", "path_glob": "/api/search/*", "scope": [{"env": "prod", "service": "billing-service"}], "tags": {"category": "business_logic", "type": "users.login.success"}}, "type": "custom_rule"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @generated @skip @team:DataDog/asm-backend + Scenario: Create a WAF custom rule returns "Created" response + Given new "CreateApplicationSecurityWafCustomRule" request + And body with value {"data": {"attributes": {"action": {"action": "block_request", "parameters": {"location": "/blocking", "status_code": 403}}, "blocking": false, "conditions": [{"operator": "match_regex", "parameters": {"data": "blocked_users", "inputs": [{"address": "server.db.statement", "key_path": []}], "list": [], "options": {"case_sensitive": false, "min_length": 0}, "regex": "path.*", "type": "string", "value": "custom_tag"}}], "enabled": false, "name": "Block request from a bad useragent", "path_glob": "/api/search/*", "scope": [{"env": "prod", "service": "billing-service"}], "tags": {"category": "business_logic", "type": "users.login.success"}}, "type": "custom_rule"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/asm-backend + Scenario: Create a WAF exclusion filter returns "Bad Request" response + Given new "CreateApplicationSecurityWafExclusionFilter" request + And body with value {"data": {"attributes": {"description": "Exclude false positives on a path", "enabled": true, "ip_list": ["198.51.100.72"], "on_match": "monitor", "parameters": ["list.search.query"], "path_glob": "/accounts/*", "rules_target": [{"rule_id": "dog-913-009", "tags": {"category": "attack_attempt", "type": "lfi"}}], "scope": [{"env": "www", "service": "prod"}]}, "type": "exclusion_filter"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/asm-backend + Scenario: Create a WAF exclusion filter returns "Concurrent Modification" response + Given new "CreateApplicationSecurityWafExclusionFilter" request + And body with value {"data": {"attributes": {"description": "Exclude false positives on a path", "enabled": true, "ip_list": ["198.51.100.72"], "on_match": "monitor", "parameters": ["list.search.query"], "path_glob": "/accounts/*", "rules_target": [{"rule_id": "dog-913-009", "tags": {"category": "attack_attempt", "type": "lfi"}}], "scope": [{"env": "www", "service": "prod"}]}, "type": "exclusion_filter"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @team:DataDog/asm-backend + Scenario: Create a WAF exclusion filter returns "OK" response + Given new "CreateApplicationSecurityWafExclusionFilter" request + And body with value {"data": {"attributes": {"description": "Exclude false positives on a path", "enabled": true, "parameters": ["list.search.query"], "path_glob": "/accounts/*", "rules_target": [{"tags": {"category": "attack_attempt", "type": "lfi"}}], "scope": [{"env": "www", "service": "prod"}]}, "type": "exclusion_filter"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.enabled" is equal to true + + @team:DataDog/asm-backend + Scenario: Create a legacy WAF exclusion filter returns "Bad Request" response + Given new "CreateApplicationSecurityWafExclusionFilter" request + And body with value {"data": {"attributes": {"description": "Exclude false positives on a path", "enabled": true, "event_query": "test:1"}, "type": "exclusion_filter"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/asm-backend + Scenario: Delete a WAF Custom Rule returns "Concurrent Modification" response + Given new "DeleteApplicationSecurityWafCustomRule" request + And request contains "custom_rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Concurrent Modification + + @generated @skip @team:DataDog/asm-backend + Scenario: Delete a WAF Custom Rule returns "No Content" response + Given new "DeleteApplicationSecurityWafCustomRule" request + And request contains "custom_rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/asm-backend + Scenario: Delete a WAF Custom Rule returns "Not Found" response + Given new "DeleteApplicationSecurityWafCustomRule" request + And request contains "custom_rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/asm-backend + Scenario: Delete a WAF Policy returns "Concurrent Modification" response + Given new "DeleteApplicationSecurityWafPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Concurrent Modification + + @generated @skip @team:DataDog/asm-backend + Scenario: Delete a WAF Policy returns "No Content" response + Given new "DeleteApplicationSecurityWafPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/asm-backend + Scenario: Delete a WAF Policy returns "Not Found" response + Given new "DeleteApplicationSecurityWafPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/asm-backend + Scenario: Delete a WAF exclusion filter returns "Concurrent Modification" response + Given new "DeleteApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Concurrent Modification + + @team:DataDog/asm-backend + Scenario: Delete a WAF exclusion filter returns "Not Found" response + Given new "DeleteApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter with value "unknown" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/asm-backend + Scenario: Delete a WAF exclusion filter returns "OK" response + Given there is a valid "exclusion_filter" in the system + And new "DeleteApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter from "exclusion_filter.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/asm-backend + Scenario: Get Application Security details for a service returns "OK" response + Given operation "GetAsmServiceByName" enabled + And new "GetAsmServiceByName" request + And request contains "service_filter" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/asm-backend + Scenario: Get a WAF Policy returns "OK" response + Given there is a valid "policy" in the system + And new "GetApplicationSecurityWafPolicy" request + And request contains "policy_id" parameter from "policy.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/asm-backend + Scenario: Get a WAF custom rule returns "OK" response + Given new "GetApplicationSecurityWafCustomRule" request + And request contains "custom_rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/asm-backend + Scenario: Get a WAF exclusion filter returns "Not Found" response + Given new "GetApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/asm-backend + Scenario: Get a WAF exclusion filter returns "OK" response + Given there is a valid "exclusion_filter" in the system + And new "GetApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter from "exclusion_filter.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/asm-backend + Scenario: List all WAF custom rules returns "OK" response + Given new "ListApplicationSecurityWAFCustomRules" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/asm-backend + Scenario: List all WAF exclusion filters returns "OK" response + Given new "ListApplicationSecurityWafExclusionFilters" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/asm-backend + Scenario: List all WAF policies returns "OK" response + Given new "ListApplicationSecurityWAFPolicies" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/asm-backend + Scenario: Update a WAF Custom Rule returns "Bad Request" response + Given there is a valid "custom_rule" in the system + And new "UpdateApplicationSecurityWafCustomRule" request + And request contains "custom_rule_id" parameter from "custom_rule.data.id" + And body with value {"data": {"type": "custom_rule", "attributes": {"blocking": false, "conditions": [{"operator": "match_regex", "parameters": { "inputs": [ { "address": "server.request.query", "key_path": [ "id" ] } ], "regex": "\\" } } ], "enabled": false, "name": "test", "path_glob": "/test", "scope": [ { "env": "test", "service": "test" } ], "tags": { "category": "attack_attempt", "type": "test"}}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/asm-backend + Scenario: Update a WAF Custom Rule returns "Concurrent Modification" response + Given new "UpdateApplicationSecurityWafCustomRule" request + And request contains "custom_rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"action": "block_request", "parameters": {"location": "/blocking", "status_code": 403}}, "blocking": false, "conditions": [{"operator": "match_regex", "parameters": {"data": "blocked_users", "inputs": [{"address": "server.db.statement", "key_path": []}], "list": [], "options": {"case_sensitive": false, "min_length": 0}, "regex": "path.*", "type": "string", "value": "custom_tag"}}], "enabled": false, "name": "Block request from bad useragent", "path_glob": "/api/search/*", "scope": [{"env": "prod", "service": "billing-service"}], "tags": {"category": "business_logic", "type": "users.login.success"}}, "type": "custom_rule"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @generated @skip @team:DataDog/asm-backend + Scenario: Update a WAF Custom Rule returns "Not Found" response + Given new "UpdateApplicationSecurityWafCustomRule" request + And request contains "custom_rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"action": "block_request", "parameters": {"location": "/blocking", "status_code": 403}}, "blocking": false, "conditions": [{"operator": "match_regex", "parameters": {"data": "blocked_users", "inputs": [{"address": "server.db.statement", "key_path": []}], "list": [], "options": {"case_sensitive": false, "min_length": 0}, "regex": "path.*", "type": "string", "value": "custom_tag"}}], "enabled": false, "name": "Block request from bad useragent", "path_glob": "/api/search/*", "scope": [{"env": "prod", "service": "billing-service"}], "tags": {"category": "business_logic", "type": "users.login.success"}}, "type": "custom_rule"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/asm-backend + Scenario: Update a WAF Custom Rule returns "OK" response + Given there is a valid "custom_rule" in the system + And new "UpdateApplicationSecurityWafCustomRule" request + And request contains "custom_rule_id" parameter from "custom_rule.data.id" + And body with value {"data": {"type": "custom_rule", "attributes": {"blocking": false, "conditions": [{"operator": "match_regex", "parameters": { "inputs": [ { "address": "server.request.query", "key_path": [ "id" ] } ], "regex": "badactor" } } ], "enabled": false, "name": "test", "path_glob": "/test", "scope": [ { "env": "test", "service": "test" } ], "tags": { "category": "attack_attempt", "type": "test"}}}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/asm-backend + Scenario: Update a WAF Policy returns "Bad Request" response + Given new "UpdateApplicationSecurityWafPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Policy applied to internal web applications.", "isDefault": false, "name": "Internal Network Policy", "protectionPresets": ["attack-tools"], "rules": [{"blocking": false, "enabled": true, "extended_data_collection": false, "id": "rasp-001-002"}], "rulesets": [{"blocking": false, "enabled": true, "id": "attack_tool"}], "scope": [{"env": "prod", "service": "billing-service"}], "version": 0}, "type": "policy"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/asm-backend + Scenario: Update a WAF Policy returns "Concurrent Modification" response + Given new "UpdateApplicationSecurityWafPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Policy applied to internal web applications.", "isDefault": false, "name": "Internal Network Policy", "protectionPresets": ["attack-tools"], "rules": [{"blocking": false, "enabled": true, "extended_data_collection": false, "id": "rasp-001-002"}], "rulesets": [{"blocking": false, "enabled": true, "id": "attack_tool"}], "scope": [{"env": "prod", "service": "billing-service"}], "version": 0}, "type": "policy"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @generated @skip @team:DataDog/asm-backend + Scenario: Update a WAF Policy returns "Not Found" response + Given new "UpdateApplicationSecurityWafPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Policy applied to internal web applications.", "isDefault": false, "name": "Internal Network Policy", "protectionPresets": ["attack-tools"], "rules": [{"blocking": false, "enabled": true, "extended_data_collection": false, "id": "rasp-001-002"}], "rulesets": [{"blocking": false, "enabled": true, "id": "attack_tool"}], "scope": [{"env": "prod", "service": "billing-service"}], "version": 0}, "type": "policy"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/asm-backend + Scenario: Update a WAF Policy returns "OK" response + Given new "UpdateApplicationSecurityWafPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Policy applied to internal web applications.", "isDefault": false, "name": "Internal Network Policy", "protectionPresets": ["attack-tools"], "rules": [{"blocking": false, "enabled": true, "extended_data_collection": false, "id": "rasp-001-002"}], "rulesets": [{"blocking": false, "enabled": true, "id": "attack_tool"}], "scope": [{"env": "prod", "service": "billing-service"}], "version": 0}, "type": "policy"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/asm-backend + Scenario: Update a WAF exclusion filter returns "Bad Request" response + Given there is a valid "custom_rule" in the system + And new "UpdateApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter from "custom_rule.data.id" + And body with value {"data": {"attributes": {"description": "Exclude false positives on a path", "enabled": false, "ip_list": ["198.51.100.72"], "on_match": "monitor", "parameters": ["list.search.query"], "path_glob": "/accounts/*", "rules_target": [{"rule_id": "dog-913-009", "tags": {"category": "attack_attempt", "type": "lfi"}}], "scope": [{"env": "www", "service": "prod"}]}, "type": "exclusion_filter"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/asm-backend + Scenario: Update a WAF exclusion filter returns "Concurrent Modification" response + Given new "UpdateApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Exclude false positives on a path", "enabled": true, "ip_list": ["198.51.100.72"], "on_match": "monitor", "parameters": ["list.search.query"], "path_glob": "/accounts/*", "rules_target": [{"rule_id": "dog-913-009", "tags": {"category": "attack_attempt", "type": "lfi"}}], "scope": [{"env": "www", "service": "prod"}]}, "type": "exclusion_filter"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @team:DataDog/asm-backend + Scenario: Update a WAF exclusion filter returns "Not Found" response + Given new "UpdateApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter with value "unknown" + And body with value {"data": {"attributes": {"description": "Exclude false positives on a path", "enabled": true, "parameters": ["list.search.query"], "path_glob": "/accounts/*", "rules_target": [{"rule_id": "dog-913-009", "tags": {"category": "attack_attempt", "type": "lfi"}}], "scope": [{"env": "www", "service": "prod"}]}, "type": "exclusion_filter"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/asm-backend + Scenario: Update a WAF exclusion filter returns "OK" response + Given there is a valid "exclusion_filter" in the system + And new "UpdateApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter from "exclusion_filter.data.id" + And body with value {"data": {"attributes": {"description": "Exclude false positives on a path", "enabled": false, "ip_list": ["198.51.100.72"], "on_match": "monitor"}, "type": "exclusion_filter"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/asm-backend + Scenario: Update a legacy WAF exclusion filter returns "Bad Request" response + Given there is a valid "exclusion_filter" in the system + And new "UpdateApplicationSecurityWafExclusionFilter" request + And request contains "exclusion_filter_id" parameter from "exclusion_filter.data.id" + And body with value {"data": {"attributes": {"description": "Exclude false positives on a path", "enabled": true, "event_query": "test:1"}, "type": "exclusion_filter"}} + When the request is sent + Then the response status is 400 Bad Request diff --git a/test-runner-data/features/v2/audit.feature b/test-runner-data/features/v2/audit.feature new file mode 100644 index 0000000000..20a2c45f34 --- /dev/null +++ b/test-runner-data/features/v2/audit.feature @@ -0,0 +1,50 @@ +@endpoint(audit) @endpoint(audit-v2) +Feature: Audit + Search your Audit Logs events over HTTP. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Audit" API + + @generated @skip @team:DataDog/audit-trail + Scenario: Get a list of Audit Logs events returns "Bad Request" response + Given new "ListAuditLogs" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/audit-trail + Scenario: Get a list of Audit Logs events returns "OK" response + Given new "ListAuditLogs" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/audit-trail @with-pagination + Scenario: Get a list of Audit Logs events returns "OK" response with pagination + Given new "ListAuditLogs" request + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/audit-trail + Scenario: Search Audit Logs events returns "Bad Request" response + Given new "SearchAuditLogs" request + And body with value {"filter": {"from": "now-15m", "query": "@type:session AND @session.type:user", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/audit-trail + Scenario: Search Audit Logs events returns "OK" response + Given new "SearchAuditLogs" request + And body with value {"filter": {"from": "now-15m", "query": "@type:session AND @session.type:user", "to": "now"}, "options": {"time_offset": 0, "timezone": "GMT"}, "page": {"limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/audit-trail @with-pagination + Scenario: Search Audit Logs events returns "OK" response with pagination + Given new "SearchAuditLogs" request + And body with value {"filter": {"from": "now-15m", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"limit": 2}, "sort": "timestamp"} + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items diff --git a/test-runner-data/features/v2/authn_mappings.feature b/test-runner-data/features/v2/authn_mappings.feature new file mode 100644 index 0000000000..0065724463 --- /dev/null +++ b/test-runner-data/features/v2/authn_mappings.feature @@ -0,0 +1,127 @@ +@endpoint(authn-mappings) @endpoint(authn-mappings-v2) +Feature: AuthN Mappings + [The AuthN Mappings API](https://docs.datadoghq.com/account_management/aut + hn_mapping/?tab=example) is used to automatically map groups of users to + roles in Datadog using attributes sent from Identity Providers. Use these + endpoints to manage your AuthN Mappings. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "AuthNMappings" API + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Create an AuthN Mapping returns "Bad Request" response + Given new "CreateAuthNMapping" request + And body with value {"data": {"attributes": {"attribute_key": "member-of", "attribute_value": "Development"}, "relationships": {"role": {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}}}, "type": "authn_mappings"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Create an AuthN Mapping returns "Not Found" response + Given new "CreateAuthNMapping" request + And body with value {"data": {"attributes": {"attribute_key": "member-of", "attribute_value": "Development"}, "relationships": {"role": {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}}}, "type": "authn_mappings"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/delegated-auth-login + Scenario: Create an AuthN Mapping returns "OK" response + Given there is a valid "role" in the system + And new "CreateAuthNMapping" request + And body with value {"data": {"attributes": {"attribute_key": "{{ unique_lower_alnum }}", "attribute_value": "{{ unique }}"}, "relationships": {"role": {"data": {"id": "{{ role.data.id }}", "type": "roles"}}}, "type": "authn_mappings"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.attribute_key" is equal to "{{ unique_lower_alnum }}" + And the response "data.attributes.attribute_value" is equal to "{{ unique }}" + And the response "data.relationships.role.data.id" is equal to "{{ role.data.id }}" + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Delete an AuthN Mapping returns "Not Found" response + Given new "DeleteAuthNMapping" request + And request contains "authn_mapping_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/delegated-auth-login + Scenario: Delete an AuthN Mapping returns "OK" response + Given there is a valid "role" in the system + And there is a valid "authn_mapping" in the system + And new "DeleteAuthNMapping" request + And request contains "authn_mapping_id" parameter from "authn_mapping.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Edit an AuthN Mapping returns "Bad Request" response + Given new "UpdateAuthNMapping" request + And request contains "authn_mapping_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"attribute_key": "member-of", "attribute_value": "Development"}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"role": {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}}}, "type": "authn_mappings"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Edit an AuthN Mapping returns "Conflict" response + Given new "UpdateAuthNMapping" request + And request contains "authn_mapping_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"attribute_key": "member-of", "attribute_value": "Development"}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"role": {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}}}, "type": "authn_mappings"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Edit an AuthN Mapping returns "Not Found" response + Given new "UpdateAuthNMapping" request + And request contains "authn_mapping_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"attribute_key": "member-of", "attribute_value": "Development"}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"role": {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}}}, "type": "authn_mappings"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/delegated-auth-login + Scenario: Edit an AuthN Mapping returns "OK" response + Given there is a valid "role" in the system + And there is a valid "authn_mapping" in the system + And new "UpdateAuthNMapping" request + And request contains "authn_mapping_id" parameter from "authn_mapping.data.id" + And body with value {"data": {"attributes": {"attribute_key": "member-of", "attribute_value": "Development"}, "id": "{{ authn_mapping.data.id }}", "relationships": {"role": {"data": {"id": "{{ role.data.id }}", "type": "roles"}}}, "type": "authn_mappings"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{ authn_mapping.data.id }}" + And the response "data.attributes.attribute_key" is equal to "member-of" + And the response "data.attributes.attribute_value" is equal to "Development" + And the response "data.relationships.role.data.id" is equal to "{{ role.data.id }}" + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Edit an AuthN Mapping returns "Unprocessable Entity" response + Given new "UpdateAuthNMapping" request + And request contains "authn_mapping_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"attribute_key": "member-of", "attribute_value": "Development"}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"role": {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}}}, "type": "authn_mappings"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Get an AuthN Mapping by UUID returns "Not Found" response + Given new "GetAuthNMapping" request + And request contains "authn_mapping_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/delegated-auth-login + Scenario: Get an AuthN Mapping by UUID returns "OK" response + Given there is a valid "role" in the system + And there is a valid "authn_mapping" in the system + And new "GetAuthNMapping" request + And request contains "authn_mapping_id" parameter from "authn_mapping.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{ authn_mapping.data.id }}" + And the response "data.attributes.attribute_key" is equal to "{{ unique_lower_alnum }}" + And the response "data.attributes.attribute_value" is equal to "{{ unique }}" + And the response "data.relationships.role.data.id" is equal to "{{ role.data.id }}" + + @team:DataDog/delegated-auth-login + Scenario: List all AuthN Mappings returns "OK" response + Given there is a valid "role" in the system + And there is a valid "authn_mapping" in the system + And new "ListAuthNMappings" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "authn_mappings" diff --git a/test-runner-data/features/v2/aws_integration.feature b/test-runner-data/features/v2/aws_integration.feature new file mode 100644 index 0000000000..8d91676e64 --- /dev/null +++ b/test-runner-data/features/v2/aws_integration.feature @@ -0,0 +1,353 @@ +@endpoint(aws-integration) @endpoint(aws-integration-v2) +Feature: AWS Integration + Configure your Datadog-AWS integration directly through the Datadog API. + For more information, see the [AWS integration + page](https://docs.datadoghq.com/integrations/amazon_web_services). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "AWSIntegration" API + + @skip @team:DataDog/aws-integrations + Scenario: Create AWS CCM config returns "AWS CCM Config object" response + Given operation "CreateAWSAccountCCMConfig" enabled + And new "CreateAWSAccountCCMConfig" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"ccm_config": {"data_export_configs": [{"bucket_name": "billing", "bucket_region": "us-east-1", "report_name": "cost-and-usage-report", "report_prefix": "reports", "report_type": "CUR2.0"}]}}, "type": "ccm_config"}} + When the request is sent + Then the response status is 200 AWS CCM Config object + + @skip @team:DataDog/aws-integrations + Scenario: Create AWS CCM config returns "Conflict" response + Given operation "CreateAWSAccountCCMConfig" enabled + And new "CreateAWSAccountCCMConfig" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"ccm_config": {"data_export_configs": [{"bucket_name": "billing", "bucket_region": "us-east-1", "report_name": "cost-and-usage-report", "report_prefix": "reports", "report_type": "CUR2.0"}]}}, "type": "ccm_config"}} + When the request is sent + Then the response status is 409 Conflict + + @skip @team:DataDog/aws-integrations + Scenario: Create AWS CCM config returns "Not Found" response + Given operation "CreateAWSAccountCCMConfig" enabled + And new "CreateAWSAccountCCMConfig" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"ccm_config": {"data_export_configs": [{"bucket_name": "billing", "bucket_region": "us-east-1", "report_name": "cost-and-usage-report", "report_prefix": "reports", "report_type": "CUR2.0"}]}}, "type": "ccm_config"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/aws-integrations + Scenario: Create an AWS account returns "AWS Account object" response + Given new "CreateAWSAccount" request + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + When the request is sent + Then the response status is 200 AWS Account object + + @team:DataDog/aws-integrations + Scenario: Create an AWS integration returns "AWS Account object" response + Given new "CreateAWSAccount" request + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"access_key_id": "AKIAIOSFODNN7EXAMPLE", "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + When the request is sent + Then the response status is 200 AWS Account object + + @team:DataDog/aws-integrations + Scenario: Create an AWS integration returns "Bad Request" response + Given new "CreateAWSAccount" request + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws-invalid", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aws-integrations + Scenario: Create an AWS integration returns "Conflict" response + Given there is a valid "aws_account_v2" in the system + And new "CreateAWSAccount" request + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/aws-integrations + Scenario: Create an Amazon EventBridge source returns "Amazon EventBridge source created." response + Given new "CreateAWSEventBridgeSource" request + And body with value {"data": {"attributes": {"account_id": "123456789012", "create_event_bus": true, "event_generator_name": "app-alerts", "region": "us-east-1"}, "type": "event_bridge"}} + When the request is sent + Then the response status is 200 Amazon EventBridge source created. + + @generated @skip @team:DataDog/aws-integrations + Scenario: Create an Amazon EventBridge source returns "Bad Request" response + Given new "CreateAWSEventBridgeSource" request + And body with value {"data": {"attributes": {"account_id": "123456789012", "create_event_bus": true, "event_generator_name": "app-alerts", "region": "us-east-1"}, "type": "event_bridge"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Create an Amazon EventBridge source returns "Conflict" response + Given new "CreateAWSEventBridgeSource" request + And body with value {"data": {"attributes": {"account_id": "123456789012", "create_event_bus": true, "event_generator_name": "app-alerts", "region": "us-east-1"}, "type": "event_bridge"}} + When the request is sent + Then the response status is 409 Conflict + + @skip @team:DataDog/aws-integrations + Scenario: Delete AWS CCM config returns "No Content" response + Given operation "DeleteAWSAccountCCMConfig" enabled + And new "DeleteAWSAccountCCMConfig" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @skip @team:DataDog/aws-integrations + Scenario: Delete AWS CCM config returns "Not Found" response + Given operation "DeleteAWSAccountCCMConfig" enabled + And new "DeleteAWSAccountCCMConfig" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/aws-integrations + Scenario: Delete an AWS integration returns "Bad Request" response + Given new "DeleteAWSAccount" request + And request contains "aws_account_config_id" parameter with value "not-a-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aws-integrations + Scenario: Delete an AWS integration returns "No Content" response + Given there is a valid "aws_account_v2" in the system + And new "DeleteAWSAccount" request + And request contains "aws_account_config_id" parameter from "aws_account_v2.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/aws-integrations + Scenario: Delete an AWS integration returns "Not Found" response + Given there is a valid "aws_account_v2" in the system + And new "DeleteAWSAccount" request + And request contains "aws_account_config_id" parameter with value "448169a8-251c-4344-abee-1c4edef39f7a" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/aws-integrations + Scenario: Delete an Amazon EventBridge source returns "Amazon EventBridge source deleted." response + Given new "DeleteAWSEventBridgeSource" request + And body with value {"data": {"attributes": {"account_id": "123456789012", "event_generator_name": "app-alerts-zyxw3210", "region": "us-east-1"}, "type": "event_bridge"}} + When the request is sent + Then the response status is 200 Amazon EventBridge source deleted. + + @generated @skip @team:DataDog/aws-integrations + Scenario: Delete an Amazon EventBridge source returns "Bad Request" response + Given new "DeleteAWSEventBridgeSource" request + And body with value {"data": {"attributes": {"account_id": "123456789012", "event_generator_name": "app-alerts-zyxw3210", "region": "us-east-1"}, "type": "event_bridge"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aws-integrations + Scenario: Generate a new external ID returns "AWS External ID object" response + Given new "CreateNewAWSExternalID" request + When the request is sent + Then the response status is 200 AWS External ID object + + @team:DataDog/aws-integrations + Scenario: Generate new external ID returns "AWS External ID object" response + Given new "CreateNewAWSExternalID" request + When the request is sent + Then the response status is 200 AWS External ID object + + @skip @team:DataDog/aws-integrations + Scenario: Get AWS CCM config returns "AWS CCM Config object" response + Given operation "GetAWSAccountCCMConfig" enabled + And new "GetAWSAccountCCMConfig" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 AWS CCM Config object + + @skip @team:DataDog/aws-integrations + Scenario: Get AWS CCM config returns "Not Found" response + Given operation "GetAWSAccountCCMConfig" enabled + And new "GetAWSAccountCCMConfig" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get AWS integration IAM permissions returns "AWS IAM Permissions object" response + Given new "GetAWSIntegrationIAMPermissions" request + When the request is sent + Then the response status is 200 AWS IAM Permissions object + + @team:DataDog/aws-integrations + Scenario: Get AWS integration standard IAM permissions returns "AWS IAM Permissions object" response + Given new "GetAWSIntegrationIAMPermissionsStandard" request + When the request is sent + Then the response status is 200 AWS IAM Permissions object + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get AWS integration standard IAM permissions returns "AWS integration standard IAM permissions." response + Given new "GetAWSIntegrationIAMPermissionsStandard" request + When the request is sent + Then the response status is 200 AWS integration standard IAM permissions. + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get AWS metric name filter preview returns "AWS metric name filter preview result" response + Given operation "GetAWSMetricNameFilterPreview" enabled + And new "GetAWSMetricNameFilterPreview" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 AWS metric name filter preview result + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get AWS metric name filter preview returns "Not Found" response + Given operation "GetAWSMetricNameFilterPreview" enabled + And new "GetAWSMetricNameFilterPreview" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get all Amazon EventBridge sources returns "Amazon EventBridge sources list." response + Given new "ListAWSEventBridgeSources" request + When the request is sent + Then the response status is 200 Amazon EventBridge sources list. + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get all Amazon EventBridge sources returns "Bad Request" response + Given new "ListAWSEventBridgeSources" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aws-integrations + Scenario: Get an AWS integration by config ID returns "AWS Account object" response + Given there is a valid "aws_account_v2" in the system + And new "GetAWSAccount" request + And request contains "aws_account_config_id" parameter from "aws_account_v2.data.id" + When the request is sent + Then the response status is 200 AWS Account object + + @team:DataDog/aws-integrations + Scenario: Get an AWS integration by config ID returns "Bad Request" response + Given new "GetAWSAccount" request + And request contains "aws_account_config_id" parameter with value "not-a-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aws-integrations + Scenario: Get an AWS integration by config ID returns "Not Found" response + Given new "GetAWSAccount" request + And request contains "aws_account_config_id" parameter with value "448169a8-251c-4344-abee-1c4edef39f7a" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/aws-integrations + Scenario: Get resource collection IAM permissions returns "AWS IAM Permissions object" response + Given new "GetAWSIntegrationIAMPermissionsResourceCollection" request + When the request is sent + Then the response status is 200 AWS IAM Permissions object + + @generated @skip @team:DataDog/aws-integrations + Scenario: Get resource collection IAM permissions returns "AWS integration resource collection IAM permissions." response + Given new "GetAWSIntegrationIAMPermissionsResourceCollection" request + When the request is sent + Then the response status is 200 AWS integration resource collection IAM permissions. + + @team:DataDog/aws-integrations + Scenario: List all AWS integrations returns "AWS Accounts List object" response + Given new "ListAWSAccounts" request + When the request is sent + Then the response status is 200 AWS Accounts List object + + @team:DataDog/aws-integrations + Scenario: List available namespaces returns "AWS Namespaces List object" response + Given new "ListAWSNamespaces" request + When the request is sent + Then the response status is 200 AWS Namespaces List object + + @team:DataDog/aws-integrations + Scenario: List namespaces returns "AWS Namespaces List object" response + Given new "ListAWSNamespaces" request + When the request is sent + Then the response status is 200 AWS Namespaces List object + + @generated @skip @team:DataDog/aws-integrations + Scenario: Preview AWS metric name filter returns "AWS metric name filter preview result" response + Given operation "PreviewAWSMetricNameFilter" enabled + And new "PreviewAWSMetricNameFilter" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"metric_name_filters": [{"include_only": ["aws.ec2.network_in"], "namespace": "AWS/EC2"}]}, "type": "metric_name_filter_preview"}} + When the request is sent + Then the response status is 200 AWS metric name filter preview result + + @generated @skip @team:DataDog/aws-integrations + Scenario: Preview AWS metric name filter returns "Bad Request" response + Given operation "PreviewAWSMetricNameFilter" enabled + And new "PreviewAWSMetricNameFilter" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"metric_name_filters": [{"include_only": ["aws.ec2.network_in"], "namespace": "AWS/EC2"}]}, "type": "metric_name_filter_preview"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aws-integrations + Scenario: Preview AWS metric name filter returns "Not Found" response + Given operation "PreviewAWSMetricNameFilter" enabled + And new "PreviewAWSMetricNameFilter" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"metric_name_filters": [{"include_only": ["aws.ec2.network_in"], "namespace": "AWS/EC2"}]}, "type": "metric_name_filter_preview"}} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/aws-integrations + Scenario: Update AWS CCM config returns "AWS CCM Config object" response + Given operation "UpdateAWSAccountCCMConfig" enabled + And new "UpdateAWSAccountCCMConfig" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"ccm_config": {"data_export_configs": [{"bucket_name": "billing", "bucket_region": "us-east-1", "report_name": "cost-and-usage-report", "report_prefix": "reports", "report_type": "CUR2.0"}]}}, "type": "ccm_config"}} + When the request is sent + Then the response status is 200 AWS CCM Config object + + @skip @team:DataDog/aws-integrations + Scenario: Update AWS CCM config returns "Not Found" response + Given operation "UpdateAWSAccountCCMConfig" enabled + And new "UpdateAWSAccountCCMConfig" request + And request contains "aws_account_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"ccm_config": {"data_export_configs": [{"bucket_name": "billing", "bucket_region": "us-east-1", "report_name": "cost-and-usage-report", "report_prefix": "reports", "report_type": "CUR2.0"}]}}, "type": "ccm_config"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/aws-integrations + Scenario: Update an AWS integration returns "AWS Account object" response + Given there is a valid "aws_account_v2" in the system + And new "UpdateAWSAccount" request + And request contains "aws_account_config_id" parameter from "aws_account_v2.data.id" + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + When the request is sent + Then the response status is 200 AWS Account object + + @team:DataDog/aws-integrations + Scenario: Update an AWS integration returns "Bad Request" response + Given there is a valid "aws_account_v2" in the system + And new "UpdateAWSAccount" request + And request contains "aws_account_config_id" parameter from "aws_account_v2.data.id" + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"access_key_id": "AKIAIOSFODNN7EXAMPLE", "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aws-integrations + Scenario: Update an AWS integration returns "Not Found" response + Given new "UpdateAWSAccount" request + And request contains "aws_account_config_id" parameter with value "448169a8-251c-4344-abee-1c4edef39f7a" + And body with value {"data": {"attributes": {"account_tags": ["key:value"], "auth_config": {"role_name": "DatadogIntegrationRole"}, "aws_account_id": "123456789012", "aws_partition": "aws", "logs_config": {"lambda_forwarder": {"lambdas": ["arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder"], "log_source_config": {"tag_filters": [{"source": "s3", "tags": ["test:test"]}]}, "sources": ["s3"]}}, "metrics_config": {"automute_enabled": true, "collect_cloudwatch_alarms": true, "collect_custom_metrics": true, "enabled": true, "tag_filters": [{"namespace": "AWS/EC2", "tags": ["key:value"]}]}, "resources_config": {"cloud_security_posture_management_collection": false, "extended_collection": false}, "traces_config": {}}, "type": "account"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/aws-integrations + Scenario: Validate AWS CCM config returns "AWS CCM Config validation result" response + Given operation "ValidateAWSCCMConfig" enabled + And new "ValidateAWSCCMConfig" request + And body with value {"data": {"attributes": {"account_id": "123456789012", "bucket_name": "billing", "bucket_region": "us-east-1", "report_name": "cost-and-usage-report", "report_prefix": "reports"}, "type": "ccm_config_validation"}} + When the request is sent + Then the response status is 200 AWS CCM Config validation result + + @generated @skip @team:DataDog/aws-integrations + Scenario: Validate AWS CCM config returns "Bad Request" response + Given operation "ValidateAWSCCMConfig" enabled + And new "ValidateAWSCCMConfig" request + And body with value {"data": {"attributes": {"account_id": "123456789012", "bucket_name": "billing", "bucket_region": "us-east-1", "report_name": "cost-and-usage-report", "report_prefix": "reports"}, "type": "ccm_config_validation"}} + When the request is sent + Then the response status is 400 Bad Request diff --git a/test-runner-data/features/v2/aws_logs_integration.feature b/test-runner-data/features/v2/aws_logs_integration.feature new file mode 100644 index 0000000000..0dc915e579 --- /dev/null +++ b/test-runner-data/features/v2/aws_logs_integration.feature @@ -0,0 +1,15 @@ +@endpoint(aws-logs-integration) @endpoint(aws-logs-integration-v2) +Feature: AWS Logs Integration + Configure your Datadog-AWS-Logs integration directly through Datadog API. + For more information, see the [AWS integration + page](https://docs.datadoghq.com/integrations/amazon_web_services/#log- + collection). + + @team:DataDog/aws-integrations + Scenario: Get list of AWS log ready services returns "AWS Logs Services List object" response + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "AWSLogsIntegration" API + And new "ListAWSLogsServices" request + When the request is sent + Then the response status is 200 AWS Logs Services List object diff --git a/test-runner-data/features/v2/case_management.feature b/test-runner-data/features/v2/case_management.feature new file mode 100644 index 0000000000..f34e59ada6 --- /dev/null +++ b/test-runner-data/features/v2/case_management.feature @@ -0,0 +1,1545 @@ +@endpoint(case-management) @endpoint(case-management-v2) +Feature: Case Management + View and manage cases and projects within Case Management. See the [Case + Management + page](https://docs.datadoghq.com/service_management/case_management/) for + more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CaseManagement" API + + @generated @skip @team:DataDog/case-management + Scenario: Add insights to a case returns "Bad Request" response + Given new "AddCaseInsights" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"insights": [{"ref": "/monitors/12345?q=total", "resource_id": "12345", "type": "SECURITY_SIGNAL"}]}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Add insights to a case returns "Not Found" response + Given new "AddCaseInsights" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"insights": [{"ref": "/monitors/12345?q=total", "resource_id": "12345", "type": "SECURITY_SIGNAL"}]}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Add insights to a case returns "OK" response + Given new "AddCaseInsights" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"insights": [{"ref": "/monitors/12345?q=total", "resource_id": "12345", "type": "SECURITY_SIGNAL"}]}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Aggregate cases returns "Bad Request" response + Given new "AggregateCases" request + And body with value {"data": {"attributes": {"group_by": {"groups": ["status"], "limit": 14}, "query_filter": "service:case-api"}, "type": "aggregate"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Aggregate cases returns "Not Found" response + Given new "AggregateCases" request + And body with value {"data": {"attributes": {"group_by": {"groups": ["status"], "limit": 14}, "query_filter": "service:case-api"}, "type": "aggregate"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Aggregate cases returns "OK" response + Given new "AggregateCases" request + And body with value {"data": {"attributes": {"group_by": {"groups": ["status"], "limit": 14}, "query_filter": "service:case-api"}, "type": "aggregate"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/case-management + Scenario: Archive case returns "Bad Request" response + Given new "ArchiveCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"type": "project"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Archive case returns "Not Found" response + Given new "ArchiveCase" request + And request contains "case_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Archive case returns "OK" response + Given new "ArchiveCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"type": "case"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/case-management + Scenario: Assign case returns "Bad Request" response + Given new "AssignCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"assignee_id": "invalid-uuid"}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Assign case returns "Not Found" response + Given new "AssignCase" request + And there is a valid "user" in the system + And request contains "case_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"attributes": {"assignee_id": "{{user.data.id}}"}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Assign case returns "OK" response + Given new "AssignCase" request + And there is a valid "case" in the system + And there is a valid "user" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"assignee_id": "{{user.data.id}}"}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Bulk update cases returns "Bad Request" response + Given new "BulkUpdateCases" request + And body with value {"data": {"attributes": {"case_ids": ["case-id-1", "case-id-2"], "payload": {"priority": "P1"}, "type": "priority"}, "type": "bulk"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Bulk update cases returns "Not Found" response + Given new "BulkUpdateCases" request + And body with value {"data": {"attributes": {"case_ids": ["case-id-1", "case-id-2"], "payload": {"priority": "P1"}, "type": "priority"}, "type": "bulk"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Bulk update cases returns "OK" response + Given new "BulkUpdateCases" request + And body with value {"data": {"attributes": {"case_ids": ["case-id-1", "case-id-2"], "payload": {"priority": "P1"}, "type": "priority"}, "type": "bulk"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/case-management + Scenario: Comment case returns "Bad Request" response + Given new "CommentCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"comment": ""}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Comment case returns "Not Found" response + Given new "CommentCase" request + And request contains "case_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"attributes": {"comment": "Hello world !"}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Comment case returns "OK" response + Given new "CommentCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"comment": "Hello World !"}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Count cases returns "Bad Request" response + Given new "CountCases" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Count cases returns "Not Found" response + Given new "CountCases" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Count cases returns "OK" response + Given new "CountCases" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Create Jira issue for case returns "Accepted" response + Given new "CreateCaseJiraIssue" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"fields": {}, "issue_type_id": "10001", "jira_account_id": "1234", "project_id": "5678"}, "type": "issues"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/case-management + Scenario: Create Jira issue for case returns "Bad Request" response + Given new "CreateCaseJiraIssue" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"fields": {}, "issue_type_id": "10001", "jira_account_id": "1234", "project_id": "5678"}, "type": "issues"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Create Jira issue for case returns "Not Found" response + Given new "CreateCaseJiraIssue" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"fields": {}, "issue_type_id": "10001", "jira_account_id": "1234", "project_id": "5678"}, "type": "issues"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Create ServiceNow ticket for case returns "Accepted" response + Given new "CreateCaseServiceNowTicket" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"assignment_group": "IT Support", "instance_name": "my-instance"}, "type": "tickets"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/case-management + Scenario: Create ServiceNow ticket for case returns "Bad Request" response + Given new "CreateCaseServiceNowTicket" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"assignment_group": "IT Support", "instance_name": "my-instance"}, "type": "tickets"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Create ServiceNow ticket for case returns "Not Found" response + Given new "CreateCaseServiceNowTicket" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"assignment_group": "IT Support", "instance_name": "my-instance"}, "type": "tickets"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Create a case link returns "Bad Request" response + Given new "CreateCaseLink" request + And body with value {"data": {"attributes": {"child_entity_id": "4417921d-0866-4a38-822c-6f2a0f65f77d", "child_entity_type": "CASE", "parent_entity_id": "bf0cbac6-4c16-4cfb-b6bf-ca5e0ec37a4f", "parent_entity_type": "CASE", "relationship": "BLOCKS"}, "type": "link"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Create a case link returns "Created" response + Given new "CreateCaseLink" request + And body with value {"data": {"attributes": {"child_entity_id": "4417921d-0866-4a38-822c-6f2a0f65f77d", "child_entity_type": "CASE", "parent_entity_id": "bf0cbac6-4c16-4cfb-b6bf-ca5e0ec37a4f", "parent_entity_type": "CASE", "relationship": "BLOCKS"}, "type": "link"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/case-management + Scenario: Create a case link returns "Not Found" response + Given new "CreateCaseLink" request + And body with value {"data": {"attributes": {"child_entity_id": "4417921d-0866-4a38-822c-6f2a0f65f77d", "child_entity_type": "CASE", "parent_entity_id": "bf0cbac6-4c16-4cfb-b6bf-ca5e0ec37a4f", "parent_entity_type": "CASE", "relationship": "BLOCKS"}, "type": "link"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Create a case returns "Bad Request" response + Given new "CreateCase" request + And body with value {"data": {"attributes": {"priority": "NOT_DEFINED", "title": "Security breach investigation", "type_id": "00000000-0000-0000-0000-000000000001"}, "relationships": {"assignee": {"data": {"id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", "type": "userx"}}, "project": {"data": {"id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", "type": "project"}}}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Create a case returns "CREATED" response + Given new "CreateCase" request + And there is a valid "user" in the system + And body with value {"data": {"attributes": {"priority": "NOT_DEFINED", "title": "Security breach investigation in {{ unique_hash }}", "type_id": "00000000-0000-0000-0000-000000000001"}, "relationships": {"assignee": {"data": {"id": "{{user.data.id}}", "type": "user"} }, "project": {"data": {"id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", "type": "project"}}}, "type": "case"}} + When the request is sent + Then the response status is 201 CREATED + And the response "data" has field "id" + And the response "data.attributes.title" is equal to "Security breach investigation in {{ unique_hash }}" + And the response "data.attributes.type" is equal to "STANDARD" + And the response "data.attributes.priority" is equal to "NOT_DEFINED" + + @team:DataDog/case-management + Scenario: Create a case returns "Not Found" response + Given new "CreateCase" request + And body with value {"data": {"attributes": {"priority": "NOT_DEFINED", "title": "Security breach investigation", "type_id": "00000000-0000-0000-0000-000000000001"}, "relationships": {"assignee": {"data": {"id": "721074c8-63df-4d8f-a43d-ab41dd24ec35", "type": "user"}}, "project": {"data": {"id": "721074c8-63df-4d8f-a43d-ab41dd24ec35", "type": "project"}}}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Create a case view returns "Bad Request" response + Given new "CreateCaseView" request + And body with value {"data": {"attributes": {"name": "Open bugs", "project_id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", "query": "status:open type:bug"}, "type": "view"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Create a case view returns "Created" response + Given new "CreateCaseView" request + And body with value {"data": {"attributes": {"name": "Open bugs", "project_id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", "query": "status:open type:bug"}, "type": "view"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/case-management + Scenario: Create a case view returns "Not Found" response + Given new "CreateCaseView" request + And body with value {"data": {"attributes": {"name": "Open bugs", "project_id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", "query": "status:open type:bug"}, "type": "view"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Create a maintenance window returns "Bad Request" response + Given new "CreateMaintenanceWindow" request + And body with value {"data": {"attributes": {"end_at": "2026-06-01T06:00:00Z", "name": "Weekly maintenance", "query": "project:SEC", "start_at": "2026-06-01T00:00:00Z"}, "type": "maintenance_window"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Create a maintenance window returns "Created" response + Given new "CreateMaintenanceWindow" request + And body with value {"data": {"attributes": {"end_at": "2026-06-01T06:00:00Z", "name": "Weekly maintenance", "query": "project:SEC", "start_at": "2026-06-01T00:00:00Z"}, "type": "maintenance_window"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/case-management + Scenario: Create a maintenance window returns "Not Found" response + Given new "CreateMaintenanceWindow" request + And body with value {"data": {"attributes": {"end_at": "2026-06-01T06:00:00Z", "name": "Weekly maintenance", "query": "project:SEC", "start_at": "2026-06-01T00:00:00Z"}, "type": "maintenance_window"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Create a notification rule returns "Bad Request" response + Given new "CreateProjectNotificationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"is_enabled": true, "recipients": [{"data": {}, "type": "EMAIL"}], "triggers": [{"data": {}, "type": "CASE_CREATED"}]}, "type": "notification_rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Create a notification rule returns "CREATED" response + Given new "CreateProjectNotificationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"is_enabled": true, "recipients": [{"data": {}, "type": "EMAIL"}], "triggers": [{"data": {}, "type": "CASE_CREATED"}]}, "type": "notification_rule"}} + When the request is sent + Then the response status is 201 CREATED + + @generated @skip @team:DataDog/case-management + Scenario: Create a notification rule returns "Not Found" response + Given new "CreateProjectNotificationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"is_enabled": true, "recipients": [{"data": {}, "type": "EMAIL"}], "triggers": [{"data": {}, "type": "CASE_CREATED"}]}, "type": "notification_rule"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Create a project returns "Bad Request" response + Given new "CreateProject" request + And body with value {"data": {"attributes": {"enabled_custom_case_types": [], "key": "SEC", "name": "Security Investigation"}, "type": "project"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Create a project returns "CREATED" response + Given new "CreateProject" request + And body with value {"data": {"attributes": {"enabled_custom_case_types": [], "key": "SEC", "name": "Security Investigation"}, "type": "project"}} + When the request is sent + Then the response status is 201 CREATED + + @generated @skip @team:DataDog/case-management + Scenario: Create a project returns "Not Found" response + Given new "CreateProject" request + And body with value {"data": {"attributes": {"enabled_custom_case_types": [], "key": "SEC", "name": "Security Investigation"}, "type": "project"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Create an automation rule returns "Bad Request" response + Given new "CreateCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"data": {"handle": "workflow-handle-123"}, "type": "EXECUTE_WORKFLOW"}, "name": "Auto-assign workflow", "state": "ENABLED", "trigger": {"data": {}, "type": "CASE_CREATED"}}, "type": "rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Create an automation rule returns "Created" response + Given new "CreateCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"data": {"handle": "workflow-handle-123"}, "type": "EXECUTE_WORKFLOW"}, "name": "Auto-assign workflow", "state": "ENABLED", "trigger": {"data": {}, "type": "CASE_CREATED"}}, "type": "rule"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/case-management + Scenario: Create an automation rule returns "Not Found" response + Given new "CreateCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"data": {"handle": "workflow-handle-123"}, "type": "EXECUTE_WORKFLOW"}, "name": "Auto-assign workflow", "state": "ENABLED", "trigger": {"data": {}, "type": "CASE_CREATED"}}, "type": "rule"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Create investigation notebook for case returns "Bad Request" response + Given new "CreateCaseNotebook" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"type": "notebook"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Create investigation notebook for case returns "No Content" response + Given new "CreateCaseNotebook" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"type": "notebook"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Create investigation notebook for case returns "Not Found" response + Given new "CreateCaseNotebook" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"type": "notebook"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Delete a case link returns "Bad Request" response + Given new "DeleteCaseLink" request + And request contains "link_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Delete a case link returns "No Content" response + Given new "DeleteCaseLink" request + And request contains "link_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Delete a case link returns "Not Found" response + Given new "DeleteCaseLink" request + And request contains "link_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Delete a case view returns "Bad Request" response + Given new "DeleteCaseView" request + And request contains "view_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Delete a case view returns "No Content" response + Given new "DeleteCaseView" request + And request contains "view_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Delete a case view returns "Not Found" response + Given new "DeleteCaseView" request + And request contains "view_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Delete a maintenance window returns "Bad Request" response + Given new "DeleteMaintenanceWindow" request + And request contains "maintenance_window_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Delete a maintenance window returns "No Content" response + Given new "DeleteMaintenanceWindow" request + And request contains "maintenance_window_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Delete a maintenance window returns "Not Found" response + Given new "DeleteMaintenanceWindow" request + And request contains "maintenance_window_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Delete a notification rule returns "API error response" response + Given new "DeleteProjectNotificationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "notification_rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response + + @generated @skip @team:DataDog/case-management + Scenario: Delete a notification rule returns "No Content" response + Given new "DeleteProjectNotificationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "notification_rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Delete an automation rule returns "No Content" response + Given new "DeleteCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Delete an automation rule returns "Not Found" response + Given new "DeleteCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/case-management + Scenario: Delete case comment returns "Bad Request" response + Given new "DeleteCaseComment" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And request contains "cell_id" parameter with value "not-an-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/case-management + Scenario: Delete case comment returns "No Content" response + Given new "DeleteCaseComment" request + And there is a valid "case" in the system + And there is a valid "comment" in the system + And request contains "case_id" parameter from "case.id" + And request contains "cell_id" parameter from "comment.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/case-management + Scenario: Delete case comment returns "Not Found" response + Given new "DeleteCaseComment" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And request contains "cell_id" parameter with value "23fca2aa-4967-4936-bdd7-9157d9e456d7" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Delete custom attribute from case returns "Not Found" response + Given new "DeleteCaseCustomAttribute" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And request contains "custom_attribute_key" parameter with value "invalid_key" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/case-management + Scenario: Delete custom attribute from case returns "OK" response + Given new "DeleteCaseCustomAttribute" request + And there is a valid "case_type" in the system + And there is a valid "custom_attribute" in the system + And there is a valid "case" with a custom "case_type" in the system + And request contains "case_id" parameter from "case_with_type.id" + And request contains "custom_attribute_key" parameter from "custom_attribute.attributes.key" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Disable an automation rule returns "Bad Request" response + Given new "DisableCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Disable an automation rule returns "Not Found" response + Given new "DisableCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Disable an automation rule returns "OK" response + Given new "DisableCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Enable an automation rule returns "Bad Request" response + Given new "EnableCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Enable an automation rule returns "Not Found" response + Given new "EnableCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Enable an automation rule returns "OK" response + Given new "EnableCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Favorite a project returns "Bad Request" response + Given new "FavoriteCaseProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Favorite a project returns "No Content" response + Given new "FavoriteCaseProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Favorite a project returns "Not Found" response + Given new "FavoriteCaseProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Get a case view returns "Bad Request" response + Given new "GetCaseView" request + And request contains "view_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Get a case view returns "Not Found" response + Given new "GetCaseView" request + And request contains "view_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Get a case view returns "OK" response + Given new "GetCaseView" request + And request contains "view_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Get all projects returns "Bad Request" response + Given new "GetProjects" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Get all projects returns "Not Found" response + Given new "GetProjects" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Get all projects returns "OK" response + Given new "GetProjects" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Get an automation rule returns "Bad Request" response + Given new "GetCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Get an automation rule returns "Not Found" response + Given new "GetCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Get an automation rule returns "OK" response + Given new "GetCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Get case timeline returns "Bad Request" response + Given new "ListCaseTimeline" request + And request contains "case_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Get case timeline returns "Not Found" response + Given new "ListCaseTimeline" request + And request contains "case_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Get case timeline returns "OK" response + Given new "ListCaseTimeline" request + And request contains "case_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Get notification rules returns "Bad Request" response + Given new "GetProjectNotificationRules" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Get notification rules returns "Not Found" response + Given new "GetProjectNotificationRules" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Get notification rules returns "OK" response + Given new "GetProjectNotificationRules" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/case-management + Scenario: Get the details of a case returns "Bad Request" response + Given new "GetCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Get the details of a case returns "Not Found" response + Given new "GetCase" request + And request contains "case_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Get the details of a case returns "OK" response + Given new "GetCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Get the details of a project returns "Bad Request" response + Given new "GetProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Get the details of a project returns "Not Found" response + Given new "GetProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Get the details of a project returns "OK" response + Given new "GetProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Link existing Jira issue to case returns "Bad Request" response + Given new "LinkJiraIssueToCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"jira_issue_url": "https://jira.example.com/browse/PROJ-123"}, "type": "issues"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Link existing Jira issue to case returns "Conflict" response + Given new "LinkJiraIssueToCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"jira_issue_url": "https://jira.example.com/browse/PROJ-123"}, "type": "issues"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/case-management + Scenario: Link existing Jira issue to case returns "No Content" response + Given new "LinkJiraIssueToCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"jira_issue_url": "https://jira.example.com/browse/PROJ-123"}, "type": "issues"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Link existing Jira issue to case returns "Not Found" response + Given new "LinkJiraIssueToCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"jira_issue_url": "https://jira.example.com/browse/PROJ-123"}, "type": "issues"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Link incident to case returns "Bad Request" response + Given new "LinkIncident" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incidents"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Link incident to case returns "Created" response + Given new "LinkIncident" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incidents"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/case-management + Scenario: Link incident to case returns "Not Found" response + Given new "LinkIncident" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incidents"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: List automation rules returns "Bad Request" response + Given new "ListCaseAutomationRules" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: List automation rules returns "Not Found" response + Given new "ListCaseAutomationRules" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: List automation rules returns "OK" response + Given new "ListCaseAutomationRules" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: List case links returns "Bad Request" response + Given new "ListCaseLinks" request + And request contains "entity_type" parameter from "REPLACE.ME" + And request contains "entity_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: List case links returns "Not Found" response + Given new "ListCaseLinks" request + And request contains "entity_type" parameter from "REPLACE.ME" + And request contains "entity_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: List case links returns "OK" response + Given new "ListCaseLinks" request + And request contains "entity_type" parameter from "REPLACE.ME" + And request contains "entity_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: List case views returns "Bad Request" response + Given new "ListCaseViews" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: List case views returns "Not Found" response + Given new "ListCaseViews" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: List case views returns "OK" response + Given new "ListCaseViews" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: List case watchers returns "Bad Request" response + Given new "ListCaseWatchers" request + And request contains "case_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: List case watchers returns "Not Found" response + Given new "ListCaseWatchers" request + And request contains "case_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: List case watchers returns "OK" response + Given new "ListCaseWatchers" request + And request contains "case_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: List maintenance windows returns "Bad Request" response + Given new "ListMaintenanceWindows" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: List maintenance windows returns "Not Found" response + Given new "ListMaintenanceWindows" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: List maintenance windows returns "OK" response + Given new "ListMaintenanceWindows" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: List project favorites returns "Bad Request" response + Given new "ListUserCaseProjectFavorites" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: List project favorites returns "Not Found" response + Given new "ListUserCaseProjectFavorites" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: List project favorites returns "OK" response + Given new "ListUserCaseProjectFavorites" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Remove Jira issue link from case returns "Bad Request" response + Given new "UnlinkJiraIssue" request + And request contains "case_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Remove Jira issue link from case returns "No Content" response + Given new "UnlinkJiraIssue" request + And request contains "case_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Remove Jira issue link from case returns "Not Found" response + Given new "UnlinkJiraIssue" request + And request contains "case_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Remove a project returns "API error response" response + Given new "DeleteProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response + + @generated @skip @team:DataDog/case-management + Scenario: Remove a project returns "No Content" response + Given new "DeleteProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Remove insights from a case returns "Bad Request" response + Given new "RemoveCaseInsights" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"insights": [{"ref": "/monitors/12345?q=total", "resource_id": "12345", "type": "SECURITY_SIGNAL"}]}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Remove insights from a case returns "Not Found" response + Given new "RemoveCaseInsights" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"insights": [{"ref": "/monitors/12345?q=total", "resource_id": "12345", "type": "SECURITY_SIGNAL"}]}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Remove insights from a case returns "OK" response + Given new "RemoveCaseInsights" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"insights": [{"ref": "/monitors/12345?q=total", "resource_id": "12345", "type": "SECURITY_SIGNAL"}]}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Search cases returns "Bad Request" response + Given new "SearchCases" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Search cases returns "Not Found" response + Given new "SearchCases" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Search cases returns "OK" response + Given new "SearchCases" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/case-management @with-pagination + Scenario: Search cases returns "OK" response with pagination + Given new "SearchCases" request + And request contains "page[size]" parameter with value 2 + And request contains "filter" parameter with value "status:closed" + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @team:DataDog/case-management + Scenario: Unarchive case returns "Bad Request" response + Given new "UnarchiveCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"type": "project"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Unarchive case returns "Not Found" response + Given new "UnarchiveCase" request + And request contains "case_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Unarchive case returns "OK" response + Given new "UnarchiveCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"type": "case"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/case-management + Scenario: Unassign case returns "Bad Request" response + Given new "UnassignCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"type": "project"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Unassign case returns "Not Found" response + Given new "UnassignCase" request + And request contains "case_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Unassign case returns "OK" response + Given new "UnassignCase" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"type": "case"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Unfavorite a project returns "Bad Request" response + Given new "UnfavoriteCaseProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Unfavorite a project returns "No Content" response + Given new "UnfavoriteCaseProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Unfavorite a project returns "Not Found" response + Given new "UnfavoriteCaseProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Unwatch a case returns "Bad Request" response + Given new "UnwatchCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And request contains "user_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Unwatch a case returns "No Content" response + Given new "UnwatchCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And request contains "user_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Unwatch a case returns "Not Found" response + Given new "UnwatchCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And request contains "user_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update a case view returns "Bad Request" response + Given new "UpdateCaseView" request + And request contains "view_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "view"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update a case view returns "Not Found" response + Given new "UpdateCaseView" request + And request contains "view_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "view"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update a case view returns "OK" response + Given new "UpdateCaseView" request + And request contains "view_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "view"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Update a maintenance window returns "Bad Request" response + Given new "UpdateMaintenanceWindow" request + And request contains "maintenance_window_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "maintenance_window"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update a maintenance window returns "Not Found" response + Given new "UpdateMaintenanceWindow" request + And request contains "maintenance_window_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "maintenance_window"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update a maintenance window returns "OK" response + Given new "UpdateMaintenanceWindow" request + And request contains "maintenance_window_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "maintenance_window"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Update a notification rule returns "Bad Request" response + Given new "UpdateProjectNotificationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "notification_rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"recipients": [{"data": {}, "type": "EMAIL"}], "triggers": [{"data": {}, "type": "CASE_CREATED"}]}, "type": "notification_rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update a notification rule returns "No Content" response + Given new "UpdateProjectNotificationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "notification_rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"recipients": [{"data": {}, "type": "EMAIL"}], "triggers": [{"data": {}, "type": "CASE_CREATED"}]}, "type": "notification_rule"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/case-management + Scenario: Update a notification rule returns "Not Found" response + Given new "UpdateProjectNotificationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "notification_rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"recipients": [{"data": {}, "type": "EMAIL"}], "triggers": [{"data": {}, "type": "CASE_CREATED"}]}, "type": "notification_rule"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Update a project returns "Bad Request" response + Given new "UpdateProject" request + And request contains "project_id" parameter with value "d4bbe1af-f36e-42f1-87c1-493ca35c320e" + And body with value {"data": {"type": "invalid_type"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Update a project returns "Not Found" response + Given new "UpdateProject" request + And request contains "project_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"type": "project", "attributes": {"name": "Updated Project Name"}}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Update a project returns "OK" response + Given new "UpdateProject" request + And request contains "project_id" parameter with value "d4bbe1af-f36e-42f1-87c1-493ca35c320e" + And body with value {"data": {"type": "project", "attributes": {"name": "Updated Project Name {{ unique }}"}}} + When the request is sent + Then the response status is 200 OK + And the response "data" has field "id" + And the response "data.attributes.name" is equal to "Updated Project Name {{ unique }}" + + @generated @skip @team:DataDog/case-management + Scenario: Update an automation rule returns "Bad Request" response + Given new "UpdateCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"data": {"handle": "workflow-handle-123"}, "type": "EXECUTE_WORKFLOW"}, "name": "Auto-assign workflow", "state": "ENABLED", "trigger": {"data": {}, "type": "CASE_CREATED"}}, "type": "rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update an automation rule returns "Not Found" response + Given new "UpdateCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"data": {"handle": "workflow-handle-123"}, "type": "EXECUTE_WORKFLOW"}, "name": "Auto-assign workflow", "state": "ENABLED", "trigger": {"data": {}, "type": "CASE_CREATED"}}, "type": "rule"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update an automation rule returns "OK" response + Given new "UpdateCaseAutomationRule" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"data": {"handle": "workflow-handle-123"}, "type": "EXECUTE_WORKFLOW"}, "name": "Auto-assign workflow", "state": "ENABLED", "trigger": {"data": {}, "type": "CASE_CREATED"}}, "type": "rule"}} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/case-management + Scenario: Update case attributes returns "Bad Request" response + Given new "UpdateAttributes" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value { "data": { "type": "case", "attributes": { "attributes": { "service": "web-store"}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Update case attributes returns "Not Found" response + Given new "UpdateAttributes" request + And request contains "case_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value { "data": { "type": "case", "attributes": { "attributes": {} } } } + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Update case attributes returns "OK" response + Given new "UpdateAttributes" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"attributes": {"env": ["test"], "service": ["web-store", "web-api"], "team": ["engineer"]}}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Update case comment returns "Bad Request" response + Given new "UpdateCaseComment" request + And request contains "case_id" parameter from "REPLACE.ME" + And request contains "cell_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"comment": "Updated comment text"}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update case comment returns "Not Found" response + Given new "UpdateCaseComment" request + And request contains "case_id" parameter from "REPLACE.ME" + And request contains "cell_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"comment": "Updated comment text"}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update case comment returns "OK" response + Given new "UpdateCaseComment" request + And request contains "case_id" parameter from "REPLACE.ME" + And request contains "cell_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"comment": "Updated comment text"}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/case-management + Scenario: Update case custom attribute returns "Bad Request" response + Given new "UpdateCaseCustomAttribute" request + And there is a valid "case_type" in the system + And there is a valid "custom_attribute" in the system + And there is a valid "case" with a custom "case_type" in the system + And request contains "case_id" parameter from "case_with_type.id" + And request contains "custom_attribute_key" parameter from "custom_attribute.attributes.key" + And body with value {"data": {"attributes": {"type": "FLOAT", "is_multi": true, "value": [1.0, 2.4]}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Update case custom attribute returns "Not Found" response + Given new "UpdateCaseCustomAttribute" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And request contains "custom_attribute_key" parameter with value "invalid_key" + And body with value {"data": {"attributes": {"type": "TEXT", "is_multi": true, "value": ["Abba", "The Cure"]}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/case-management + Scenario: Update case custom attribute returns "OK" response + Given new "UpdateCaseCustomAttribute" request + And there is a valid "case_type" in the system + And there is a valid "custom_attribute" in the system + And there is a valid "case" with a custom "case_type" in the system + And request contains "case_id" parameter from "case_with_type.id" + And request contains "custom_attribute_key" parameter from "custom_attribute.attributes.key" + And body with value {"data": {"attributes": {"type": "TEXT", "is_multi": true, "value": ["Abba", "The Cure"]}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/case-management + Scenario: Update case description returns "Bad Request" response + Given new "UpdateCaseDescription" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"description": "Seeing some weird memory increase... We shouldn't ignore this"}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Update case description returns "Not Found" response + Given new "UpdateCaseDescription" request + And request contains "case_id" parameter with value "0198c6b0-2a0a-7bea-87ff-3876f119aebb" + And body with value {"data": {"attributes": {"description": "Seeing some weird memory increase... We shouldn't ignore this"}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Update case description returns "OK" response + Given new "UpdateCaseDescription" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"description": "Seeing some weird memory increase... Updating the description"}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Update case due date returns "Bad Request" response + Given new "UpdateCaseDueDate" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"due_date": "2026-12-31"}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update case due date returns "Not Found" response + Given new "UpdateCaseDueDate" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"due_date": "2026-12-31"}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update case due date returns "OK" response + Given new "UpdateCaseDueDate" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"due_date": "2026-12-31"}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/case-management + Scenario: Update case priority returns "Bad Request" response + Given new "UpdatePriority" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"priority": "P1234"}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Update case priority returns "Not Found" response + Given new "UpdatePriority" request + And request contains "case_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"attributes": {"priority": "P3"}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Update case priority returns "OK" response + Given new "UpdatePriority" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"priority": "P3"}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.priority" is equal to "P3" + + @generated @skip @team:DataDog/case-management + Scenario: Update case project returns "Bad Request" response + Given new "MoveCaseToProject" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", "type": "project"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update case project returns "Not Found" response + Given new "MoveCaseToProject" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", "type": "project"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update case project returns "OK" response + Given new "MoveCaseToProject" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", "type": "project"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Update case resolved reason returns "Bad Request" response + Given new "UpdateCaseResolvedReason" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"security_resolved_reason": "FALSE_POSITIVE"}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update case resolved reason returns "Not Found" response + Given new "UpdateCaseResolvedReason" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"security_resolved_reason": "FALSE_POSITIVE"}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update case resolved reason returns "OK" response + Given new "UpdateCaseResolvedReason" request + And request contains "case_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"security_resolved_reason": "FALSE_POSITIVE"}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/case-management + Scenario: Update case status returns "Bad Request" response + Given new "UpdateStatus" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"status": "OPENED"}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Update case status returns "Not Found" response + Given new "UpdateStatus" request + And request contains "case_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"attributes": {"status": "OPEN"}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Update case status returns "OK" response + Given new "UpdateStatus" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"status": "IN_PROGRESS"}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.status" is equal to "IN_PROGRESS" + + @team:DataDog/case-management + Scenario: Update case title returns "Bad Request" response + Given new "UpdateCaseTitle" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"title": ""}, "type": "case"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Update case title returns "Not Found" response + Given new "UpdateCaseTitle" request + And request contains "case_id" parameter with value "0198c6b8-b08f-7c08-978a-d95217f2eeac" + And body with value {"data": {"attributes": {"title": "Memory leak investigation on API"}, "type": "case"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Update case title returns "OK" response + Given new "UpdateCaseTitle" request + And there is a valid "case" in the system + And request contains "case_id" parameter from "case.id" + And body with value {"data": {"attributes": {"title": "[UPDATED] Memory leak investigation on API"}, "type": "case"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Watch a case returns "Bad Request" response + Given new "WatchCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And request contains "user_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Watch a case returns "Created" response + Given new "WatchCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And request contains "user_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/case-management + Scenario: Watch a case returns "Not Found" response + Given new "WatchCase" request + And request contains "case_id" parameter from "REPLACE.ME" + And request contains "user_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found diff --git a/test-runner-data/features/v2/case_management_attribute.feature b/test-runner-data/features/v2/case_management_attribute.feature new file mode 100644 index 0000000000..b7e1006103 --- /dev/null +++ b/test-runner-data/features/v2/case_management_attribute.feature @@ -0,0 +1,104 @@ +@endpoint(case-management-attribute) @endpoint(case-management-attribute-v2) +Feature: Case Management Attribute + View and configure custom attributes within Case Management. See the [Case + Management + page](https://docs.datadoghq.com/service_management/case_management/) for + more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CaseManagementAttribute" API + + @team:DataDog/case-management + Scenario: Create custom attribute config for a case type returns "Bad Request" response + Given new "CreateCustomAttributeConfig" request + And there is a valid "case_type" in the system + And request contains "case_type_id" parameter from "case_type.id" + And body with value {"data": {"attributes": {"display_name": "AWS Region {{uuid}}", "is_multi": true, "key": "region_{{unique_hash}}", "type": "FLOAT"}, "type": "custom_attribute"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Create custom attribute config for a case type returns "CREATED" response + Given new "CreateCustomAttributeConfig" request + And there is a valid "case_type" in the system + And request contains "case_type_id" parameter from "case_type.id" + And body with value {"data": {"attributes": {"display_name": "AWS Region {{uuid}}", "is_multi": true, "key": "region_{{unique_hash}}", "type": "NUMBER"}, "type": "custom_attribute"}} + When the request is sent + Then the response status is 201 CREATED + + @team:DataDog/case-management + Scenario: Create custom attribute config for a case type returns "Not Found" response + Given new "CreateCustomAttributeConfig" request + And request contains "case_type_id" parameter with value "9fd476d7-a955-454a-851d-980c655c02d3" + And body with value {"data": {"attributes": {"display_name": "AWS Region {{unique_hash}}", "is_multi": true, "key": "region_{{unique_hash}}", "type": "NUMBER"}, "type": "custom_attribute"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/case-management + Scenario: Delete custom attributes config returns "Bad Request" response + Given new "DeleteCustomAttributeConfig" request + And there is a valid "case_type" in the system + And request contains "case_type_id" parameter from "case_type.id" + And request contains "custom_attribute_id" parameter with value "not-an-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/case-management + Scenario: Delete custom attributes config returns "No Content" response + Given new "DeleteCustomAttributeConfig" request + And there is a valid "case_type" in the system + And there is a valid "custom_attribute" in the system + And request contains "case_type_id" parameter from "case_type.id" + And request contains "custom_attribute_id" parameter from "custom_attribute.id" + When the request is sent + Then the response status is 204 No Content + + @skip @team:DataDog/case-management + Scenario: Get all custom attributes config of case type returns "Bad Request" response + Given new "GetAllCustomAttributeConfigsByCaseType" request + And request contains "case_type_id" parameter with value "not-an-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Get all custom attributes config of case type returns "OK" response + Given new "GetAllCustomAttributeConfigsByCaseType" request + And there is a valid "case_type" in the system + And request contains "case_type_id" parameter from "case_type.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/case-management + Scenario: Get all custom attributes returns "OK" response + Given new "GetAllCustomAttributes" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Update custom attribute config returns "Bad Request" response + Given new "UpdateCustomAttributeConfig" request + And request contains "case_type_id" parameter from "REPLACE.ME" + And request contains "custom_attribute_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Updated description.", "display_name": "AWS Region", "type": "NUMBER", "type_data": {"options": [{"value": "us-east-1"}]}}, "type": "custom_attribute"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update custom attribute config returns "Not Found" response + Given new "UpdateCustomAttributeConfig" request + And request contains "case_type_id" parameter from "REPLACE.ME" + And request contains "custom_attribute_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Updated description.", "display_name": "AWS Region", "type": "NUMBER", "type_data": {"options": [{"value": "us-east-1"}]}}, "type": "custom_attribute"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update custom attribute config returns "OK" response + Given new "UpdateCustomAttributeConfig" request + And request contains "case_type_id" parameter from "REPLACE.ME" + And request contains "custom_attribute_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Updated description.", "display_name": "AWS Region", "type": "NUMBER", "type_data": {"options": [{"value": "us-east-1"}]}}, "type": "custom_attribute"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/case_management_type.feature b/test-runner-data/features/v2/case_management_type.feature new file mode 100644 index 0000000000..6415083b69 --- /dev/null +++ b/test-runner-data/features/v2/case_management_type.feature @@ -0,0 +1,70 @@ +@endpoint(case-management-type) @endpoint(case-management-type-v2) +Feature: Case Management Type + View and configure case types within Case Management. See the [Case + Management + page](https://docs.datadoghq.com/service_management/case_management/) for + more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CaseManagementType" API + + @team:DataDog/case-management + Scenario: Create a case type returns "Bad Request" response + Given new "CreateCaseType" request + And body with value {"data": {"attributes": {"description": "Investigations done in case management", "emoji": "notanemoji", "name": "Investigation"}, "type": "case_type"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/case-management + Scenario: Create a case type returns "CREATED" response + Given new "CreateCaseType" request + And body with value {"data": {"attributes": {"description": "Investigations done in case management", "emoji": "👑", "name": "Investigation"}, "type": "case_type"}} + When the request is sent + Then the response status is 201 CREATED + + @generated @skip @team:DataDog/case-management + Scenario: Delete a case type returns "No Content" response + Given new "DeleteCaseType" request + And request contains "case_type_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/case-management + Scenario: Delete a case type returns "NotContent" response + Given new "DeleteCaseType" request + And there is a valid "case_type" in the system + And request contains "case_type_id" parameter from "case_type.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/case-management + Scenario: Get all case types returns "OK" response + Given new "GetAllCaseTypes" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/case-management + Scenario: Update a case type returns "Bad Request" response + Given new "UpdateCaseType" request + And request contains "case_type_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Investigations done in case management", "emoji": "\ud83d\udd75\ud83c\udffb\u200d\u2642\ufe0f", "name": "Investigation"}, "type": "case_type"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/case-management + Scenario: Update a case type returns "Not Found" response + Given new "UpdateCaseType" request + And request contains "case_type_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Investigations done in case management", "emoji": "\ud83d\udd75\ud83c\udffb\u200d\u2642\ufe0f", "name": "Investigation"}, "type": "case_type"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/case-management + Scenario: Update a case type returns "OK" response + Given new "UpdateCaseType" request + And request contains "case_type_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Investigations done in case management", "emoji": "\ud83d\udd75\ud83c\udffb\u200d\u2642\ufe0f", "name": "Investigation"}, "type": "case_type"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/ci_visibility_pipelines.feature b/test-runner-data/features/v2/ci_visibility_pipelines.feature new file mode 100644 index 0000000000..c81cb9ec82 --- /dev/null +++ b/test-runner-data/features/v2/ci_visibility_pipelines.feature @@ -0,0 +1,144 @@ +@endpoint(ci-visibility-pipelines) @endpoint(ci-visibility-pipelines-v2) +Feature: CI Visibility Pipelines + Search or aggregate your CI Visibility pipeline events and send them to + your Datadog site over HTTP. See the [CI Pipeline Visibility in Datadog + page](https://docs.datadoghq.com/continuous_integration/pipelines/) for + more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "CIVisibilityPipelines" API + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Aggregate pipelines events returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "AggregateCIAppPipelineEvents" request + And body with value {"compute": [{"aggregation": "pc90", "interval": "5m", "metric": "@duration", "type": "total"}], "filter": {"from": "now-15m", "query": "@ci.provider.name:github AND @ci.status:error", "to": "now"}, "group_by": [{"facet": "@ci.status", "histogram": {"interval": 10, "max": 100, "min": 50}, "limit": 10, "sort": {"aggregation": "count", "order": "asc"}, "total": false}], "options": {"timezone": "GMT"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-java @skip-python @skip-typescript @team:DataDog/ci-app-backend + Scenario: Aggregate pipelines events returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "AggregateCIAppPipelineEvents" request + And body with value {"compute": [{"aggregation": "pc90", "metric": "@duration", "type": "total"}], "filter": {"from": "now-15m", "query": "@ci.provider.name:(gitlab OR github)", "to": "now"}, "group_by": [{ "facet": "@ci.status", "limit": 10, "total": false}], "options": {"timezone": "GMT"}} + When the request is sent + Then the response status is 200 OK + And the response "meta.status" is equal to "done" + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get a list of pipelines events returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListCIAppPipelineEvents" request + When the request is sent + Then the response status is 400 Bad Request + + @skip-java @skip-python @skip-typescript @team:DataDog/ci-app-backend + Scenario: Get a list of pipelines events returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListCIAppPipelineEvents" request + And request contains "filter[query]" parameter with value "@ci.provider.name:circleci" + And request contains "filter[from]" parameter with value "{{ timeISO('now - 30m') }}" + And request contains "filter[to]" parameter with value "{{ timeISO('now') }}" + And request contains "page[limit]" parameter with value 5 + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-java @skip-python @skip-typescript @skip-validation @team:DataDog/ci-app-backend @with-pagination + Scenario: Get a list of pipelines events returns "OK" response with pagination + Given a valid "appKeyAuth" key in the system + And new "ListCIAppPipelineEvents" request + And request contains "filter[from]" parameter with value "{{ timeISO('now - 30s') }}" + And request contains "filter[to]" parameter with value "{{ timeISO('now') }}" + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 2 items + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Search pipelines events returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "SearchCIAppPipelineEvents" request + And body with value {"filter": {"from": "now-15m", "query": "@ci.provider.name:github AND @ci.status:error", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 400 Bad Request + + @skip-java @skip-python @skip-typescript @team:DataDog/ci-app-backend + Scenario: Search pipelines events returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "SearchCIAppPipelineEvents" request + And body with value {"filter": {"from": "now-15m", "query": "@ci.provider.name:github AND @ci.status:error", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"limit": 5}, "sort": "timestamp"} + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-java @skip-python @skip-typescript @skip-validation @team:DataDog/ci-app-backend @with-pagination + Scenario: Search pipelines events returns "OK" response with pagination + Given a valid "appKeyAuth" key in the system + And new "SearchCIAppPipelineEvents" request + And body with value {"filter": {"from": "now-30s", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"limit": 2}, "sort": "timestamp"} + When the request with pagination is sent + Then the response status is 200 OK + And the response has 2 items + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send pipeline event returns "Bad Request" response + Given new "CreateCIAppPipelineEvent" request + And body with value {"data": {"attributes": {"resource": "Details TBD"}, "type": "cipipeline_resource_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send pipeline event returns "Payload Too Large" response + Given new "CreateCIAppPipelineEvent" request + And body with value {"data": {"attributes": {"resource": "Details TBD"}, "type": "cipipeline_resource_request"}} + When the request is sent + Then the response status is 413 Payload Too Large + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send pipeline event returns "Request Timeout" response + Given new "CreateCIAppPipelineEvent" request + And body with value {"data": {"attributes": {"resource": "Details TBD"}, "type": "cipipeline_resource_request"}} + When the request is sent + Then the response status is 408 Request Timeout + + @skip-java @skip-python @skip-typescript @team:DataDog/ci-app-backend + Scenario: Send pipeline event returns "Request accepted for processing" response + Given new "CreateCIAppPipelineEvent" request + And body with value {"data": {"attributes": {"resource": {"level": "pipeline","unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a","name": "Deploy to AWS","url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1","start": "{{ timeISO('now - 120s') }}","end": "{{ timeISO('now - 30s') }}","status": "success","partial_retry": false,"git": {"repository_url": "https://github.com/DataDog/datadog-agent","sha": "7f263865994b76066c4612fd1965215e7dcb4cd2","author_email": "john.doe@email.com"}}},"type": "cipipeline_resource_request"}} + When the request is sent + Then the response status is 202 Request accepted for processing + + @skip-java @skip-python @skip-typescript @team:DataDog/ci-app-backend + Scenario: Send pipeline event with custom provider returns "Request accepted for processing" response + Given new "CreateCIAppPipelineEvent" request + And body with value {"data": {"attributes": {"provider_name": "example-provider", "resource": {"level": "pipeline","unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a","name": "Deploy to AWS","url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1","start": "{{ timeISO('now - 120s') }}","end": "{{ timeISO('now - 30s') }}","status": "success","partial_retry": false,"git": {"repository_url": "https://github.com/DataDog/datadog-agent","sha": "7f263865994b76066c4612fd1965215e7dcb4cd2","author_email": "john.doe@email.com"}}},"type": "cipipeline_resource_request"}} + When the request is sent + Then the response status is 202 Request accepted for processing + + @skip @skip-java @skip-python @skip-typescript @team:DataDog/ci-app-backend + Scenario: Send pipeline job event returns "Request accepted for processing" response + Given new "CreateCIAppPipelineEvent" request + And body with value {"data": {"attributes": {"resource": {"level": "job", "id": "cf9456de-8b9e-4c27-aa79-27b1e78c1a33", "name": "Build image", "pipeline_unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", "pipeline_name": "Deploy to AWS", "start": "{{ timeISO('now - 120s') }}", "end": "{{ timeISO('now - 30s') }}", "status": "error", "url": "https://my-ci-provider.example/jobs/my-jobs/run/1"}}, "type": "cipipeline_resource_request"}} + When the request is sent + Then the response status is 202 Request accepted for processing + + @skip-java @skip-python @skip-typescript @team:DataDog/ci-app-backend + Scenario: Send running job event returns "Request accepted for processing" response + Given new "CreateCIAppPipelineEvent" request + And body with value {"data": {"attributes": {"resource": {"level": "job", "id": "cf9456de-8b9e-4c27-aa79-27b1e78c1a33", "name": "Build image", "pipeline_unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", "pipeline_name": "Deploy to AWS", "start": "{{ timeISO('now - 120s') }}", "status": "running", "url": "https://my-ci-provider.example/jobs/my-jobs/run/1"}}, "type": "cipipeline_resource_request"}} + When the request is sent + Then the response status is 202 Request accepted for processing + + @skip-java @skip-python @skip-typescript @team:DataDog/ci-app-backend + Scenario: Send running pipeline event returns "Request accepted for processing" response + Given new "CreateCIAppPipelineEvent" request + And body with value {"data": {"attributes": {"resource": {"level": "pipeline","unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a","name": "Deploy to AWS","url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1","start": "{{ timeISO('now - 120s') }}","status": "running","partial_retry": false,"git": {"repository_url": "https://github.com/DataDog/datadog-agent","sha": "7f263865994b76066c4612fd1965215e7dcb4cd2","author_email": "john.doe@email.com"}}},"type": "cipipeline_resource_request"}} + When the request is sent + Then the response status is 202 Request accepted for processing + + @skip-java @skip-python @skip-typescript @team:DataDog/ci-app-backend + Scenario: Send several pipeline events returns "Request accepted for processing" response + Given new "CreateCIAppPipelineEvent" request + And body with value {"data": [{"attributes": {"provider_name": "example-provider", "resource": {"level": "pipeline","unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a","name": "Deploy to AWS","url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1","start": "{{ timeISO('now - 120s') }}","end": "{{ timeISO('now - 30s') }}","status": "success","partial_retry": false,"git": {"repository_url": "https://github.com/DataDog/datadog-agent","sha": "7f263865994b76066c4612fd1965215e7dcb4cd2","author_email": "john.doe@email.com"}}},"type": "cipipeline_resource_request"},{"attributes": {"provider_name": "example-provider", "resource": {"level": "pipeline","unique_id": "7b2c8f9e-aa15-4d22-9c7d-83f4e065138b","name": "Deploy to Production","url": "https://my-ci-provider.example/pipelines/prod-pipeline/run/2","start": "{{ timeISO('now - 180s') }}","end": "{{ timeISO('now - 45s') }}","status": "success","partial_retry": false,"git": {"repository_url": "https://github.com/DataDog/datadog-agent","sha": "9a4f7c28b3e5d12f8e6c9b2a5d8f3e1c7b4a6d9e","author_email": "jane.smith@email.com"}}},"type": "cipipeline_resource_request"}]} + When the request is sent + Then the response status is 202 Request accepted for processing diff --git a/test-runner-data/features/v2/ci_visibility_tests.feature b/test-runner-data/features/v2/ci_visibility_tests.feature new file mode 100644 index 0000000000..612c778053 --- /dev/null +++ b/test-runner-data/features/v2/ci_visibility_tests.feature @@ -0,0 +1,73 @@ +@endpoint(ci-visibility-tests) @endpoint(ci-visibility-tests-v2) +Feature: CI Visibility Tests + Search or aggregate your CI Visibility test events over HTTP. See the + [Test Visibility in Datadog page](https://docs.datadoghq.com/tests/) for + more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CIVisibilityTests" API + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Aggregate tests events returns "Bad Request" response + Given new "AggregateCIAppTestEvents" request + And body with value {"compute": [{"aggregation": "pc90", "interval": "5m", "metric": "@duration", "type": "total"}], "filter": {"from": "now-15m", "query": "@test.service:web-ui-tests AND @test.status:fail", "to": "now"}, "group_by": [{"facet": "@test.service", "histogram": {"interval": 10, "max": 100, "min": 50}, "limit": 10, "sort": {"aggregation": "count", "order": "asc"}, "total": false}], "options": {"timezone": "GMT"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/ci-app-backend + Scenario: Aggregate tests events returns "OK" response + Given new "AggregateCIAppTestEvents" request + And body with value {"compute": [{"aggregation": "count", "metric": "@test.is_flaky", "type": "total"}], "filter": {"from": "now-15m", "query": "@language:(python OR go)", "to": "now"}, "group_by": [{"facet": "@git.branch", "limit": 10, "sort": {"order": "asc"}, "total": false}], "options": {"timezone": "GMT"}} + When the request is sent + Then the response status is 200 OK + And the response "meta.status" is equal to "done" + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get a list of tests events returns "Bad Request" response + Given new "ListCIAppTestEvents" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/ci-app-backend + Scenario: Get a list of tests events returns "OK" response + Given new "ListCIAppTestEvents" request + And request contains "filter[query]" parameter with value "@test.service:web-ui-tests" + And request contains "filter[from]" parameter with value "{{ timeISO('now - 30s') }}" + And request contains "filter[to]" parameter with value "{{ timeISO('now') }}" + And request contains "page[limit]" parameter with value 5 + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/ci-app-backend @with-pagination + Scenario: Get a list of tests events returns "OK" response with pagination + Given new "ListCIAppTestEvents" request + And request contains "filter[from]" parameter with value "{{ timeISO('now - 30s') }}" + And request contains "filter[to]" parameter with value "{{ timeISO('now') }}" + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 2 items + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Search tests events returns "Bad Request" response + Given new "SearchCIAppTestEvents" request + And body with value {"filter": {"from": "now-15m", "query": "@test.service:web-ui-tests AND @test.status:fail", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/ci-app-backend + Scenario: Search tests events returns "OK" response + Given new "SearchCIAppTestEvents" request + And body with value {"filter": {"from": "now-15m", "query": "@test.service:web-ui-tests AND @test.status:skip", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/ci-app-backend @with-pagination + Scenario: Search tests events returns "OK" response with pagination + Given new "SearchCIAppTestEvents" request + And body with value {"filter": {"from": "now-15m", "query": "@test.status:pass AND -@language:python", "to": "now"}, "page": {"limit": 2}, "sort": "timestamp"} + When the request with pagination is sent + Then the response status is 200 OK + And the response has 2 items diff --git a/test-runner-data/features/v2/cloud_cost_management.feature b/test-runner-data/features/v2/cloud_cost_management.feature new file mode 100644 index 0000000000..57849f54f3 --- /dev/null +++ b/test-runner-data/features/v2/cloud_cost_management.feature @@ -0,0 +1,1081 @@ +@endpoint(cloud-cost-management) @endpoint(cloud-cost-management-v2) +Feature: Cloud Cost Management + The Cloud Cost Management API allows you to set up, edit, and delete Cloud + Cost Management accounts for AWS, Azure, and Google Cloud. You can query + your cost data by using the [Metrics + endpoint](https://docs.datadoghq.com/api/latest/metrics/#query-timeseries- + data-across-multiple-products) and the `cloud_cost` data source. For more + information, see the [Cloud Cost Management + documentation](https://docs.datadoghq.com/cloud_cost_management/). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CloudCostManagement" API + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Create Cloud Cost Management AWS CUR config returns "Bad Request" response + Given new "CreateCostAWSCURConfig" request + And body with value {"data": {"attributes": {"account_filters": {"excluded_accounts": ["123456789123", "123456789143"], "include_new_accounts": true, "included_accounts": ["123456789123", "123456789143"]}, "account_id": "123456789123", "bucket_name": "dd-cost-bucket", "bucket_region": "us-east-1", "report_name": "dd-report-name", "report_prefix": "dd-report-prefix"}, "type": "aws_cur_config_post_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Create Cloud Cost Management AWS CUR config returns "OK" response + Given new "CreateCostAWSCURConfig" request + And body with value {"data": {"attributes": {"account_id": "123456789123", "bucket_name": "dd-cost-bucket", "bucket_region": "us-east-1", "report_name": "dd-report-name", "report_prefix": "dd-report-prefix"}, "type": "aws_cur_config_post_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.account_id" is equal to "123456789123" + + @team:DataDog/cloud-cost-management + Scenario: Create Cloud Cost Management Azure configs returns "Bad Request" response + Given new "CreateCostAzureUCConfigs" request + And body with value {"data": {"attributes": {"account_id": "1234abcd-1234-abcd-1234-1234abcd1234", "actual_bill_config": {"export_name": "dd-actual-export", "export_path": "dd-export-path", "storage_account": "dd-storage-account", "storage_container": "dd-storage-container"}, "amortized_bill_config": {"export_name": "dd-actual-export", "export_path": "dd-export-path", "storage_account": "dd-storage-account", "storage_container": "dd-storage-container"}, "client_id": "1234abcd-1234-abcd-1234-1234abcd1234", "scope": "this_is_an_invalid_scope"}, "type": "azure_uc_config_post_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Create Cloud Cost Management Azure configs returns "OK" response + Given new "CreateCostAzureUCConfigs" request + And body with value {"data": {"attributes": {"account_id": "1234abcd-1234-abcd-1234-1234abcd1234", "actual_bill_config": {"export_name": "dd-actual-export", "export_path": "dd-export-path", "storage_account": "dd-storage-account", "storage_container": "dd-storage-container"}, "amortized_bill_config": {"export_name": "dd-actual-export", "export_path": "dd-export-path", "storage_account": "dd-storage-account", "storage_container": "dd-storage-container"}, "client_id": "1234abcd-1234-abcd-1234-1234abcd1234", "scope": "subscriptions/1234abcd-1234-abcd-1234-1234abcd1234"}, "type": "azure_uc_config_post_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.configs[0].account_id" is equal to "1234abcd-1234-abcd-1234-1234abcd1234" + + @team:DataDog/cloud-cost-management + Scenario: Create Google Cloud Usage Cost config returns "Bad Request" response + Given new "CreateCostGCPUsageCostConfig" request + And body with value {"data": {"attributes": {"billing_account_id": "123456_A123BC_12AB34", "bucket_name": "dd-cost-bucket", "export_dataset_name": "billing", "export_prefix": "datadog_cloud_cost_usage_export", "export_project_name": "dd-cloud-cost-report", "service_account": "InvalidServiceAccount"}, "type": "gcp_uc_config_post_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Create Google Cloud Usage Cost config returns "OK" response + Given new "CreateCostGCPUsageCostConfig" request + And body with value {"data": {"attributes": {"billing_account_id": "123456_A123BC_12AB34", "bucket_name": "dd-cost-bucket", "export_dataset_name": "billing", "export_prefix": "datadog_cloud_cost_usage_export", "export_project_name": "dd-cloud-cost-report", "service_account": "dd-ccm-gcp-integration@my-environment.iam.gserviceaccount.com"}, "type": "gcp_uc_config_post_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.account_id" is equal to "123456_A123BC_12AB34" + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Create custom allocation rule returns "OK" response + Given new "CreateCustomAllocationRule" request + And body with value {"data": {"attributes": {"costs_to_allocate": [{"condition": "is", "tag": "account_id", "value": "123456789"}, {"condition": "in", "tag": "environment", "value": "", "values": ["production", "staging"]}], "enabled": true, "order_id": 1, "provider": ["aws", "gcp"], "rule_name": "example-arbitrary-cost-rule", "strategy": {"allocated_by_tag_keys": ["team", "environment"], "based_on_costs": [{"condition": "is", "tag": "service", "value": "web-api"}, {"condition": "not in", "tag": "team", "value": "", "values": ["legacy", "deprecated"]}], "granularity": "daily", "method": "proportional"}, "type": "shared"}, "type": "upsert_arbitrary_rule"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "arbitrary_rule" + And the response "data.attributes.rule_name" is equal to "example-arbitrary-cost-rule" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Create or replace a budget's custom forecast returns "Bad Request" response + Given new "UpsertCustomForecast" request + And body with value {"data": {"attributes": {"budget_uid": "00000000-0000-0000-0000-000000000001", "entries": [{"amount": 400, "month": 202501, "tag_filters": [{"tag_key": "service", "tag_value": "ec2"}]}]}, "id": "", "type": "custom_forecast"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Create or replace a budget's custom forecast returns "Not Found" response + Given new "UpsertCustomForecast" request + And body with value {"data": {"attributes": {"budget_uid": "00000000-0000-0000-0000-000000000001", "entries": [{"amount": 400, "month": 202501, "tag_filters": [{"tag_key": "service", "tag_value": "ec2"}]}]}, "id": "", "type": "custom_forecast"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Create or replace a budget's custom forecast returns "OK" response + Given new "UpsertCustomForecast" request + And body with value {"data": {"attributes": {"budget_uid": "00000000-0000-0000-0000-000000000001", "entries": [{"amount": 400, "month": 202501, "tag_filters": [{"tag_key": "service", "tag_value": "ec2"}]}]}, "id": "", "type": "custom_forecast"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Create or update a budget returns "Bad Request" response + Given new "UpsertBudget" request + And body with value {"data": {"attributes": {"costs": {"actual": null, "amount": null, "forecast": null, "ootb_forecast": null}, "costs_unit": {}, "created_at": 1738258683590, "created_by": "00000000-0a0a-0a0a-aaa0-00000000000a", "end_month": 202502, "entries": [{"costs": {"actual": null, "amount": null, "custom_forecast": null, "forecast": null, "ootb_forecast": null}, "tag_filters": [{}]}], "metrics_query": "aws.cost.amortized{service:ec2} by {service}", "name": "my budget", "org_id": 123, "start_month": 202501, "total_amount": 1000, "updated_at": 1738258683590, "updated_by": "00000000-0a0a-0a0a-aaa0-00000000000a"}, "id": "00000000-0a0a-0a0a-aaa0-00000000000a", "type": ""}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Create or update a budget returns "Not Found" response + Given new "UpsertBudget" request + And body with value {"data": {"attributes": {"costs": {"actual": null, "amount": null, "forecast": null, "ootb_forecast": null}, "costs_unit": {}, "created_at": 1738258683590, "created_by": "00000000-0a0a-0a0a-aaa0-00000000000a", "end_month": 202502, "entries": [{"costs": {"actual": null, "amount": null, "custom_forecast": null, "forecast": null, "ootb_forecast": null}, "tag_filters": [{}]}], "metrics_query": "aws.cost.amortized{service:ec2} by {service}", "name": "my budget", "org_id": 123, "start_month": 202501, "total_amount": 1000, "updated_at": 1738258683590, "updated_by": "00000000-0a0a-0a0a-aaa0-00000000000a"}, "id": "00000000-0a0a-0a0a-aaa0-00000000000a", "type": ""}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Create or update a budget returns "OK" response + Given new "UpsertBudget" request + And body with value {"data": {"attributes": {"costs": {"actual": null, "amount": null, "forecast": null, "ootb_forecast": null}, "costs_unit": {}, "created_at": 1738258683590, "created_by": "00000000-0a0a-0a0a-aaa0-00000000000a", "end_month": 202502, "entries": [{"costs": {"actual": null, "amount": null, "custom_forecast": null, "forecast": null, "ootb_forecast": null}, "tag_filters": [{}]}], "metrics_query": "aws.cost.amortized{service:ec2} by {service}", "name": "my budget", "org_id": 123, "start_month": 202501, "total_amount": 1000, "updated_at": 1738258683590, "updated_by": "00000000-0a0a-0a0a-aaa0-00000000000a"}, "id": "00000000-0a0a-0a0a-aaa0-00000000000a", "type": ""}} + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Create tag pipeline ruleset returns "OK" response + Given new "CreateTagPipelinesRuleset" request + And body with value {"data": {"attributes": {"enabled": true, "rules": [{"enabled": true, "mapping": null, "name": "Add Cost Center Tag", "query": {"addition": {"key": "cost_center", "value": "engineering"}, "case_insensitivity": false, "if_not_exists": true, "query": "account_id:\"123456789\" AND service:\"web-api\""}, "reference_table": null}]}, "id": "New Ruleset", "type": "create_ruleset"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "ruleset" + And the response "data.attributes.name" is equal to "New Ruleset" + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Create tag pipeline ruleset with if_tag_exists returns "OK" response + Given new "CreateTagPipelinesRuleset" request + And body with value {"data": {"attributes": {"enabled": true, "rules": [{"enabled": true, "mapping": null, "name": "Add Cost Center Tag", "query": {"addition": {"key": "cost_center", "value": "engineering"}, "case_insensitivity": false, "if_tag_exists": "replace", "query": "account_id:\"123456789\" AND service:\"web-api\""}, "reference_table": null}]}, "id": "New Ruleset", "type": "create_ruleset"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "ruleset" + And the response "data.attributes.name" is equal to "New Ruleset" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete Cloud Cost Management AWS CUR config returns "Bad Request" response + Given new "DeleteCostAWSCURConfig" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Delete Cloud Cost Management AWS CUR config returns "No Content" response + Given new "DeleteCostAWSCURConfig" request + And request contains "cloud_account_id" parameter with value 100 + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/cloud-cost-management + Scenario: Delete Cloud Cost Management AWS CUR config returns "Not Found" response + Given new "DeleteCostAWSCURConfig" request + And request contains "cloud_account_id" parameter with value 123456 + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete Cloud Cost Management Azure config returns "Bad Request" response + Given new "DeleteCostAzureUCConfig" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Delete Cloud Cost Management Azure config returns "No Content" response + Given new "DeleteCostAzureUCConfig" request + And request contains "cloud_account_id" parameter with value 100 + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/cloud-cost-management + Scenario: Delete Cloud Cost Management Azure config returns "Not Found" response + Given new "DeleteCostAzureUCConfig" request + And request contains "cloud_account_id" parameter with value 123456 + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Delete Custom Costs File returns "No Content" response + Given new "DeleteCustomCostsFile" request + And request contains "file_id" parameter with value "9d055d22-a838-4e9f-bc34-a4f9ab66280c" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete Custom Costs file returns "No Content" response + Given new "DeleteCustomCostsFile" request + And request contains "file_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/cloud-cost-management + Scenario: Delete Custom Costs file returns "Not Found" response + Given new "DeleteCustomCostsFile" request + And request contains "file_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete Google Cloud Usage Cost config returns "Bad Request" response + Given new "DeleteCostGCPUsageCostConfig" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Delete Google Cloud Usage Cost config returns "No Content" response + Given new "DeleteCostGCPUsageCostConfig" request + And request contains "cloud_account_id" parameter with value 100 + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/cloud-cost-management + Scenario: Delete Google Cloud Usage Cost config returns "Not Found" response + Given new "DeleteCostGCPUsageCostConfig" request + And request contains "cloud_account_id" parameter with value 123456 + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete a Cloud Cost Management tag description returns "Bad Request" response + Given new "DeleteCostTagDescriptionByKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete a Cloud Cost Management tag description returns "No Content" response + Given new "DeleteCostTagDescriptionByKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/cloud-cost-management + Scenario: Delete a budget returns "Bad Request" response + Given new "DeleteBudget" request + And request contains "budget_id" parameter with value "1" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete a budget's custom forecast returns "Bad Request" response + Given new "DeleteCustomForecast" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete a budget's custom forecast returns "No Content" response + Given new "DeleteCustomForecast" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete a budget's custom forecast returns "Not Found" response + Given new "DeleteCustomForecast" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Delete budget returns "No Content" response + Given new "DeleteBudget" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Delete custom allocation rule returns "No Content" response + Given new "DeleteCustomAllocationRule" request + And request contains "rule_id" parameter with value 683 + When the request is sent + Then the response status is 204 No Content + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Delete tag pipeline ruleset returns "No Content" response + Given new "DeleteTagPipelinesRuleset" request + And request contains "ruleset_id" parameter with value "ee10c3ff-312f-464c-b4f6-46adaa6d00a1" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Generate a Cloud Cost Management tag description returns "Bad Request" response + Given new "GenerateCostTagDescriptionByKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Generate a Cloud Cost Management tag description returns "OK" response + Given new "GenerateCostTagDescriptionByKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Get Custom Costs File returns "OK" response + Given new "GetCustomCostsFile" request + And request contains "file_id" parameter with value "9d055d22-a838-4e9f-bc34-a4f9ab66280c" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "data.json" + And the response "data.attributes.content[0].ChargeDescription" is equal to "my_description" + + @team:DataDog/cloud-cost-management + Scenario: Get Custom Costs file returns "Not Found" response + Given new "GetCustomCostsFile" request + And request contains "file_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get Custom Costs file returns "OK" response + Given new "GetCustomCostsFile" request + And request contains "file_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Get Google Cloud Usage Cost config returns "OK" response + Given new "GetCostGCPUsageCostConfig" request + And request contains "cloud_account_id" parameter with value 123456 + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "gcp_uc_config" + And the response "data.attributes.account_id" is equal to "123456_ABCDEF_123ABC" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get a Cloud Cost Management tag description returns "Bad Request" response + Given new "GetCostTagDescriptionByKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get a Cloud Cost Management tag description returns "Not Found" response + Given new "GetCostTagDescriptionByKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get a Cloud Cost Management tag description returns "OK" response + Given new "GetCostTagDescriptionByKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get a Cloud Cost Management tag key returns "Bad Request" response + Given new "GetCostTagKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get a Cloud Cost Management tag key returns "Not Found" response + Given new "GetCostTagKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get a Cloud Cost Management tag key returns "OK" response + Given new "GetCostTagKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-cost-management + Scenario: Get a budget returns "Not Found" response + Given new "GetBudget" request + And request contains "budget_id" parameter with value "9d055d22-0a0a-0a0a-aaa0-00000000000a" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get a budget's custom forecast returns "Bad Request" response + Given new "GetCustomForecast" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get a budget's custom forecast returns "Not Found" response + Given new "GetCustomForecast" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get a budget's custom forecast returns "OK" response + Given new "GetCustomForecast" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Get a tag pipeline ruleset returns "OK" response + Given new "GetTagPipelinesRuleset" request + And request contains "ruleset_id" parameter with value "a1e9de9b-b88e-41c6-a0cd-cc0ebd7092de" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "ruleset" + And the response "data.attributes.name" is equal to "EVP Cost Tags" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get account filters returns "Bad Request" response + Given new "GetCostAccountFilters" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get account filters returns "Not Found" response + Given new "GetCostAccountFilters" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get account filters returns "OK" response + Given new "GetCostAccountFilters" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get budget returns "Bad Request" response + Given new "GetBudget" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get budget returns "Not Found" response + Given new "GetBudget" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get budget returns "OK" response + Given new "GetBudget" request + And request contains "budget_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments coverage (scalar) returns "Bad Request" response + Given operation "GetCommitmentsCoverageScalar" enabled + And new "GetCommitmentsCoverageScalar" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments coverage (scalar) returns "OK" response + Given operation "GetCommitmentsCoverageScalar" enabled + And new "GetCommitmentsCoverageScalar" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments coverage (timeseries) returns "Bad Request" response + Given operation "GetCommitmentsCoverageTimeseries" enabled + And new "GetCommitmentsCoverageTimeseries" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments coverage (timeseries) returns "OK" response + Given operation "GetCommitmentsCoverageTimeseries" enabled + And new "GetCommitmentsCoverageTimeseries" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments list returns "Bad Request" response + Given operation "GetCommitmentsCommitmentList" enabled + And new "GetCommitmentsCommitmentList" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments list returns "OK" response + Given operation "GetCommitmentsCommitmentList" enabled + And new "GetCommitmentsCommitmentList" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments on-demand hot spots (scalar) returns "Bad Request" response + Given operation "GetCommitmentsOnDemandHotspotsScalar" enabled + And new "GetCommitmentsOnDemandHotspotsScalar" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments on-demand hot spots (scalar) returns "OK" response + Given operation "GetCommitmentsOnDemandHotspotsScalar" enabled + And new "GetCommitmentsOnDemandHotspotsScalar" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments savings (scalar) returns "Bad Request" response + Given operation "GetCommitmentsSavingsScalar" enabled + And new "GetCommitmentsSavingsScalar" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments savings (scalar) returns "OK" response + Given operation "GetCommitmentsSavingsScalar" enabled + And new "GetCommitmentsSavingsScalar" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments savings (timeseries) returns "Bad Request" response + Given operation "GetCommitmentsSavingsTimeseries" enabled + And new "GetCommitmentsSavingsTimeseries" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments savings (timeseries) returns "OK" response + Given operation "GetCommitmentsSavingsTimeseries" enabled + And new "GetCommitmentsSavingsTimeseries" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments utilization (scalar) returns "Bad Request" response + Given operation "GetCommitmentsUtilizationScalar" enabled + And new "GetCommitmentsUtilizationScalar" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments utilization (scalar) returns "OK" response + Given operation "GetCommitmentsUtilizationScalar" enabled + And new "GetCommitmentsUtilizationScalar" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments utilization (timeseries) returns "Bad Request" response + Given operation "GetCommitmentsUtilizationTimeseries" enabled + And new "GetCommitmentsUtilizationTimeseries" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get commitments utilization (timeseries) returns "OK" response + Given operation "GetCommitmentsUtilizationTimeseries" enabled + And new "GetCommitmentsUtilizationTimeseries" request + And request contains "provider" parameter from "REPLACE.ME" + And request contains "product" parameter from "REPLACE.ME" + And request contains "start" parameter from "REPLACE.ME" + And request contains "end" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Get cost AWS CUR config returns "OK" response + Given new "GetCostAWSCURConfig" request + And request contains "cloud_account_id" parameter with value 123456 + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "aws_cur_config" + And the response "data.attributes.account_id" is equal to "123456123456" + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Get cost Azure UC config returns "OK" response + Given new "GetCostAzureUCConfig" request + And request contains "cloud_account_id" parameter with value 123456 + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "azure_uc_configs" + And the response "data.attributes.configs[0].dataset_type" is equal to "amortized" + And the response "data.attributes.configs[1].dataset_type" is equal to "actual" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get cost anomaly returns "Bad Request" response + Given operation "GetCostAnomaly" enabled + And new "GetCostAnomaly" request + And request contains "anomaly_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get cost anomaly returns "Not Found" response + Given operation "GetCostAnomaly" enabled + And new "GetCostAnomaly" request + And request contains "anomaly_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get cost anomaly returns "OK" response + Given operation "GetCostAnomaly" enabled + And new "GetCostAnomaly" request + And request contains "anomaly_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Get custom allocation rule returns "OK" response + Given new "GetCustomAllocationRule" request + And request contains "rule_id" parameter with value 683 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get the Cloud Cost Management billing currency returns "Bad Request" response + Given operation "GetCostTagMetadataCurrency" enabled + And new "GetCostTagMetadataCurrency" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Get the Cloud Cost Management billing currency returns "OK" response + Given operation "GetCostTagMetadataCurrency" enabled + And new "GetCostTagMetadataCurrency" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management AWS CUR configs returns "OK" response + Given new "ListCostAWSCURConfigs" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.bucket_name" is equal to "test_bucket_name" + + @replay-only @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management Azure configs returns "OK" response + Given new "ListCostAzureUCConfigs" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.configs[0].export_name" is equal to "test_export_name" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management OCI configs returns "OK" response + Given new "ListCostOCIConfigs" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management orchestrators returns "Bad Request" response + Given operation "ListCostTagMetadataOrchestrators" enabled + And new "ListCostTagMetadataOrchestrators" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management orchestrators returns "OK" response + Given operation "ListCostTagMetadataOrchestrators" enabled + And new "ListCostTagMetadataOrchestrators" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag descriptions returns "OK" response + Given new "ListCostTagDescriptions" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag key metadata returns "Bad Request" response + Given operation "ListCostTagMetadata" enabled + And new "ListCostTagMetadata" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag key metadata returns "OK" response + Given operation "ListCostTagMetadata" enabled + And new "ListCostTagMetadata" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag keys returns "Bad Request" response + Given new "ListCostTagKeys" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag keys returns "OK" response + Given new "ListCostTagKeys" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag metadata months returns "Bad Request" response + Given operation "ListCostTagMetadataMonths" enabled + And new "ListCostTagMetadataMonths" request + And request contains "filter[provider]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag metadata months returns "OK" response + Given operation "ListCostTagMetadataMonths" enabled + And new "ListCostTagMetadataMonths" request + And request contains "filter[provider]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag sources returns "Bad Request" response + Given operation "ListCostTagKeySources" enabled + And new "ListCostTagKeySources" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tag sources returns "OK" response + Given operation "ListCostTagKeySources" enabled + And new "ListCostTagKeySources" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tags returns "Bad Request" response + Given new "ListCostTags" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Cloud Cost Management tags returns "OK" response + Given new "ListCostTags" request + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: List Custom Costs Files returns "OK" response + Given new "ListCustomCostsFiles" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.name" is equal to "data.json" + + @team:DataDog/cloud-cost-management + Scenario: List Custom Costs files returns "Bad Request" response + Given new "ListCustomCostsFiles" request + And request contains "filter[status]" parameter with value "invalid_file_status" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List Custom Costs files returns "OK" response + Given new "ListCustomCostsFiles" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-cost-management + Scenario: List Google Cloud Usage Cost configs returns "OK" response + Given new "ListCostGCPUsageCostConfigs" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List available Cloud Cost Management metrics returns "Bad Request" response + Given operation "ListCostTagMetadataMetrics" enabled + And new "ListCostTagMetadataMetrics" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List available Cloud Cost Management metrics returns "OK" response + Given operation "ListCostTagMetadataMetrics" enabled + And new "ListCostTagMetadataMetrics" request + And request contains "filter[month]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-cost-management + Scenario: List budgets returns "OK" response + Given new "ListBudgets" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List cost anomalies returns "Bad Request" response + Given operation "ListCostAnomalies" enabled + And new "ListCostAnomalies" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List cost anomalies returns "OK" response + Given operation "ListCostAnomalies" enabled + And new "ListCostAnomalies" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List custom allocation rule statuses returns "OK" response + Given new "ListCustomAllocationRulesStatus" request + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: List custom allocation rules returns "OK" response + Given new "ListCustomAllocationRules" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.rule_name" is equal to "example-arbitrary-cost-rule" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: List tag pipeline ruleset statuses returns "OK" response + Given new "ListTagPipelinesRulesetsStatus" request + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: List tag pipeline rulesets returns "OK" response + Given new "ListTagPipelinesRulesets" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.name" is equal to "New Ruleset" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Reorder custom allocation rules returns "Successfully reordered rules" response + Given new "ReorderCustomAllocationRules" request + And body with value {"data": [{"id": "456", "type": "arbitrary_rule"}, {"id": "123", "type": "arbitrary_rule"}, {"id": "789", "type": "arbitrary_rule"}]} + When the request is sent + Then the response status is 204 Successfully reordered rules + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Reorder tag pipeline rulesets returns "Successfully reordered rulesets" response + Given new "ReorderTagPipelinesRulesets" request + And body with value {"data": [{"id": "55ef2385-9ae1-4410-90c4-5ac1b60fec10", "type": "ruleset"}, {"id": "a7b8c9d0-1234-5678-9abc-def012345678", "type": "ruleset"}, {"id": "f1e2d3c4-b5a6-9780-1234-567890abcdef", "type": "ruleset"}]} + When the request is sent + Then the response status is 204 Successfully reordered rulesets + + @generated @skip @team:DataDog/ccm-optimize + Scenario: Search cost recommendations returns "OK" response + Given operation "SearchCostRecommendations" enabled + And new "SearchCostRecommendations" request + And body with value {"filter": "@resource_table:aws_ec2_instance", "sort": [{"expression": "potential_daily_savings.amount", "order": "DESC"}]} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-cost-management + Scenario: Update Cloud Cost Management AWS CUR config returns "Not Found" response + Given new "UpdateCostAWSCURConfig" request + And request contains "cloud_account_id" parameter with value 123456 + And body with value {"data": {"attributes": {"is_enabled": true}, "type": "aws_cur_config_patch_request"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Update Cloud Cost Management AWS CUR config returns "OK" response + Given new "UpdateCostAWSCURConfig" request + And request contains "cloud_account_id" parameter with value 100 + And body with value {"data": {"attributes": {"is_enabled": true}, "type": "aws_cur_config_patch_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.account_id" is equal to "000000000000" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Update Cloud Cost Management Azure config returns "Bad Request" response + Given new "UpdateCostAzureUCConfigs" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"is_enabled": true}, "type": "azure_uc_config_patch_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-cost-management + Scenario: Update Cloud Cost Management Azure config returns "Not Found" response + Given new "UpdateCostAzureUCConfigs" request + And request contains "cloud_account_id" parameter with value 123456 + And body with value {"data": {"attributes": {"is_enabled": true}, "type": "azure_uc_config_patch_request"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Update Cloud Cost Management Azure config returns "OK" response + Given new "UpdateCostAzureUCConfigs" request + And request contains "cloud_account_id" parameter with value 100 + And body with value {"data": {"attributes": {"is_enabled": true}, "type": "azure_uc_config_patch_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "azure_uc_configs" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Update Google Cloud Usage Cost config returns "Bad Request" response + Given new "UpdateCostGCPUsageCostConfig" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"is_enabled": true}, "type": "gcp_uc_config_patch_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-cost-management + Scenario: Update Google Cloud Usage Cost config returns "Not Found" response + Given new "UpdateCostGCPUsageCostConfig" request + And request contains "cloud_account_id" parameter with value 123456 + And body with value {"data": {"attributes": {"is_enabled": true}, "type": "gcp_uc_config_patch_request"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Update Google Cloud Usage Cost config returns "OK" response + Given new "UpdateCostGCPUsageCostConfig" request + And request contains "cloud_account_id" parameter with value 100 + And body with value {"data": {"attributes": {"is_enabled": true}, "type": "gcp_uc_config_patch_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.account_id" is equal to "123456_A123BC_12AB34" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Update account filters returns "Bad Request" response + Given new "UpdateCostAccountFilters" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"account_filters": {"excluded_accounts": ["123456789123", "123456789143"], "include_new_accounts": true, "included_accounts": ["123456789123", "123456789143"]}}, "type": "account_filters_patch_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Update account filters returns "Not Found" response + Given new "UpdateCostAccountFilters" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"account_filters": {"excluded_accounts": ["123456789123", "123456789143"], "include_new_accounts": true, "included_accounts": ["123456789123", "123456789143"]}}, "type": "account_filters_patch_request"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Update account filters returns "OK" response + Given new "UpdateCostAccountFilters" request + And request contains "cloud_account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"account_filters": {"excluded_accounts": ["123456789123", "123456789143"], "include_new_accounts": true, "included_accounts": ["123456789123", "123456789143"]}}, "type": "account_filters_patch_request"}} + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Update custom allocation rule returns "OK" response + Given new "UpdateCustomAllocationRule" request + And request contains "rule_id" parameter with value 683 + And body with value {"data": {"attributes": {"costs_to_allocate": [{"condition": "is", "tag": "account_id", "value": "123456789", "values":[]}, {"condition": "in", "tag": "environment", "value": "", "values": ["production", "staging"]}], "enabled": true, "order_id": 1, "provider": ["aws", "gcp"], "rule_name": "example-arbitrary-cost-rule", "strategy": {"allocated_by_tag_keys": ["team", "environment"], "based_on_costs": [{"condition": "is", "tag": "service", "value": "web-api", "values":[]}, {"condition": "not in", "tag": "team", "value": "", "values": ["legacy", "deprecated"]}], "granularity": "daily", "method": "proportional"}, "type": "shared"}, "type": "upsert_arbitrary_rule"}} + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Update tag pipeline ruleset returns "OK" response + Given new "UpdateTagPipelinesRuleset" request + And request contains "ruleset_id" parameter with value "ee10c3ff-312f-464c-b4f6-46adaa6d00a1" + And body with value {"data": {"attributes": {"enabled": true, "last_version": 3611102, "rules": [{"enabled": true, "mapping": {"destination_key": "team_owner", "if_not_exists": true, "source_keys": ["account_name", "account_id"]}, "name": "Account Name Mapping", "query": null, "reference_table": null}]}, "id": "New Ruleset", "type": "update_ruleset"}} + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Update tag pipeline ruleset with if_tag_exists returns "OK" response + Given new "UpdateTagPipelinesRuleset" request + And request contains "ruleset_id" parameter with value "ee10c3ff-312f-464c-b4f6-46adaa6d00a1" + And body with value {"data": {"attributes": {"enabled": true, "last_version": 3611102, "rules": [{"enabled": true, "mapping": {"destination_key": "team_owner", "if_tag_exists": "replace", "source_keys": ["account_name", "account_id"]}, "name": "Account Name Mapping", "query": null, "reference_table": null}]}, "id": "New Ruleset", "type": "update_ruleset"}} + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Upload Custom Costs File returns "Accepted" response + Given new "UploadCustomCostsFile" request + And body with value [{ "ProviderName": "my_provider", "ChargePeriodStart": "2023-05-06", "ChargePeriodEnd": "2023-06-06","ChargeDescription": "my_description","BilledCost": 250,"BillingCurrency": "USD","Tags": {"key": "value"}}] + When the request is sent + Then the response status is 202 Accepted + And the response "data.attributes.name" is equal to "data.json" + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Upload Custom Costs file returns "Accepted" response + Given new "UploadCustomCostsFile" request + And body with value [{"BilledCost": 100.5, "BillingCurrency": "USD", "ChargeDescription": "Monthly usage charge for my service", "ChargePeriodEnd": "2023-02-28", "ChargePeriodStart": "2023-02-01"}] + When the request is sent + Then the response status is 202 Accepted + + @team:DataDog/cloud-cost-management + Scenario: Upload Custom Costs file returns "Bad Request" response + Given new "UploadCustomCostsFile" request + And body with value [{"BilledCost": 100.5, "BillingCurrency": "USD", "ChargeDescription": "Monthly usage charge for my service", "ChargePeriodEnd": "2023-02-28", "ChargePeriodStart": "2023-02-01"}] + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Upsert a Cloud Cost Management tag description returns "Bad Request" response + Given new "UpsertCostTagDescriptionByKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cloud": "aws", "description": "AWS account that owns this cost."}, "id": "account_id", "type": "cost_tag_description"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Upsert a Cloud Cost Management tag description returns "No Content" response + Given new "UpsertCostTagDescriptionByKey" request + And request contains "tag_key" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cloud": "aws", "description": "AWS account that owns this cost."}, "id": "account_id", "type": "cost_tag_description"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Validate CSV budget returns "OK" response + Given new "ValidateCsvBudget" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-cost-management + Scenario: Validate budget returns "OK" response + Given new "ValidateBudget" request + And body with value {"data": {"attributes": {"created_at": 1738258683590, "created_by": "00000000-0a0a-0a0a-aaa0-00000000000a", "end_month": 202502, "entries": [{"amount": 500, "month": 202501, "tag_filters": [{"tag_key": "service", "tag_value": "ec2"}]}, {"amount": 500, "month": 202502, "tag_filters": [{"tag_key": "service", "tag_value": "ec2"}]}], "metrics_query": "aws.cost.amortized{service:ec2} by {service}", "name": "my budget", "org_id": 123, "start_month": 202501, "total_amount": 1000, "updated_at": 1738258683590, "updated_by": "00000000-0a0a-0a0a-aaa0-00000000000a"}, "id": "1", "type": "budget"}} + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/cloud-cost-management + Scenario: Validate query returns "OK" response + Given new "ValidateQuery" request + And body with value {"data": {"attributes": {"Query": "example:query AND test:true"}, "type": "validate_query"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/cloud_network_monitoring.feature b/test-runner-data/features/v2/cloud_network_monitoring.feature new file mode 100644 index 0000000000..12064508f1 --- /dev/null +++ b/test-runner-data/features/v2/cloud_network_monitoring.feature @@ -0,0 +1,45 @@ +@endpoint(cloud-network-monitoring) @endpoint(cloud-network-monitoring-v2) +Feature: Cloud Network Monitoring + The Cloud Network Monitoring API allows you to fetch aggregated + connections and DNS traffic with their attributes. See the [Cloud Network + Monitoring page](https://docs.datadoghq.com/network_monitoring/cloud_netwo + rk_monitoring/) and [DNS Monitoring + page](https://docs.datadoghq.com/network_monitoring/dns/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CloudNetworkMonitoring" API + + @team:Datadog/networks + Scenario: Get aggregated connections returns "OK" response + Given new "GetAggregatedConnections" request + When the request is sent + Then the response status is 200 OK + + @team:Datadog/networks + Scenario: Get all aggregated DNS traffic returns "Bad Request" response + Given new "GetAggregatedDns" request + And request contains "group_by" parameter with value "server_ungrouped,server_service" + When the request is sent + Then the response status is 400 Bad Request + + @team:Datadog/networks + Scenario: Get all aggregated DNS traffic returns "OK" response + Given new "GetAggregatedDns" request + When the request is sent + Then the response status is 200 OK + + @skip-python @skip-ruby @team:Datadog/networks + Scenario: Get all aggregated connections returns "Bad Request" response + Given new "GetAggregatedConnections" request + And request contains "limit" parameter with value 8000 + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/networks + Scenario: Get all aggregated connections returns "OK" response + Given new "GetAggregatedConnections" request + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/cloudflare_integration.feature b/test-runner-data/features/v2/cloudflare_integration.feature new file mode 100644 index 0000000000..506d440826 --- /dev/null +++ b/test-runner-data/features/v2/cloudflare_integration.feature @@ -0,0 +1,160 @@ +@endpoint(cloudflare-integration) @endpoint(cloudflare-integration-v2) +Feature: Cloudflare Integration + Manage your Datadog Cloudflare integration directly through the Datadog + API. See the [Cloudflare integration + page](https://docs.datadoghq.com/integrations/cloudflare/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CloudflareIntegration" API + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Cloudflare account returns "Bad Request" response + Given new "CreateCloudflareAccount" request + And body with value {"data": {"attributes": {"api_key": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", "email": "test-email@example.com", "name": "test-name", "resources": ["web", "dns", "lb", "worker"], "zones": ["zone_id_1", "zone_id_2"]}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/saas-integrations + Scenario: Add Cloudflare account returns "Bad Request" response due to missing email + Given new "CreateCloudflareAccount" request + And body with value {"data": {"attributes": {"api_key": "fakekey", "name": "{{ unique_lower_alnum }}"}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/saas-integrations + Scenario: Add Cloudflare account returns "Bad Request" response using invalid auth key + Given new "CreateCloudflareAccount" request + And body with value {"data": {"attributes": {"api_key": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "name": "{{ unique_lower_alnum }}"}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/saas-integrations + Scenario: Add Cloudflare account returns "CREATED" response + Given new "CreateCloudflareAccount" request + And body with value {"data": {"attributes": {"api_key": "fakekey", "email": "dev@datadoghq.com", "name": "{{ unique_lower_alnum }}"}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 201 CREATED + And the response "data.type" is equal to "cloudflare-accounts" + And the response "data.attributes.email" is equal to "dev@datadoghq.com" + And the response "data.attributes.name" is equal to "{{ unique_lower_alnum }}" + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Cloudflare account returns "Not Found" response + Given new "CreateCloudflareAccount" request + And body with value {"data": {"attributes": {"api_key": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", "email": "test-email@example.com", "name": "test-name", "resources": ["web", "dns", "lb", "worker"], "zones": ["zone_id_1", "zone_id_2"]}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Cloudflare account returns "Bad Request" response + Given new "DeleteCloudflareAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Cloudflare account returns "Not Found" response + Given new "DeleteCloudflareAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Cloudflare account returns "OK" response + Given new "DeleteCloudflareAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Cloudflare account returns "Bad Request" response + Given new "GetCloudflareAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Cloudflare account returns "Not Found" response + Given new "GetCloudflareAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/saas-integrations + Scenario: Get Cloudflare account returns "OK" response + Given there is a valid "cloudflare_account" in the system + And new "GetCloudflareAccount" request + And request contains "account_id" parameter from "cloudflare_account.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "cloudflare-accounts" + And the response "data.attributes.email" is equal to "dev@datadog.com" + And the response "data.attributes.name" is equal to "{{ unique_lower_alnum }}" + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Cloudflare accounts returns "Bad Request" response + Given new "ListCloudflareAccounts" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Cloudflare accounts returns "Not Found" response + Given new "ListCloudflareAccounts" request + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/saas-integrations + Scenario: List Cloudflare accounts returns "OK" response + Given there is a valid "cloudflare_account" in the system + And new "ListCloudflareAccounts" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "cloudflare-accounts" + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Cloudflare account returns "Bad Request" response + Given new "UpdateCloudflareAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", "email": "test-email@example.com", "resources": ["web", "dns", "lb", "worker"], "zones": ["zone_id_1", "zone_id_2"]}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/saas-integrations + Scenario: Update Cloudflare account returns "Bad Request" response due to invalid api key + Given there is a valid "cloudflare_account" in the system + And new "UpdateCloudflareAccount" request + And request contains "account_id" parameter from "cloudflare_account.data.id" + And body with value {"data": {"attributes": {"api_key": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/saas-integrations + Scenario: Update Cloudflare account returns "Bad Request" response due to missing required email + Given there is a valid "cloudflare_account" in the system + And new "UpdateCloudflareAccount" request + And request contains "account_id" parameter from "cloudflare_account.data.id" + And body with value {"data": {"attributes": {"api_key": "fakekey"}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Cloudflare account returns "Not Found" response + Given new "UpdateCloudflareAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", "email": "test-email@example.com", "resources": ["web", "dns", "lb", "worker"], "zones": ["zone_id_1", "zone_id_2"]}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/saas-integrations + Scenario: Update Cloudflare account returns "OK" response + Given there is a valid "cloudflare_account" in the system + And new "UpdateCloudflareAccount" request + And request contains "account_id" parameter from "cloudflare_account.data.id" + And body with value {"data": {"attributes": {"api_key": "fakekey", "email": "dev@datadoghq.com", "zones": ["zone-id-3"]}, "type": "cloudflare-accounts"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{cloudflare_account.data.attributes.name }}" + And the response "data.attributes.zones" array contains value "zone-id-3" diff --git a/test-runner-data/features/v2/confluent_cloud.feature b/test-runner-data/features/v2/confluent_cloud.feature new file mode 100644 index 0000000000..f81e01d093 --- /dev/null +++ b/test-runner-data/features/v2/confluent_cloud.feature @@ -0,0 +1,251 @@ +@endpoint(confluent-cloud) @endpoint(confluent-cloud-v2) +Feature: Confluent Cloud + Manage your Datadog Confluent Cloud integration accounts and account + resources directly through the Datadog API. See the [Confluent Cloud + page](https://docs.datadoghq.com/integrations/confluent_cloud/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ConfluentCloud" API + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Confluent account returns "Bad Request" response + Given new "CreateConfluentAccount" request + And body with value {"data": {"attributes": {"api_key": "TESTAPIKEY123", "api_secret": "test-api-secret-123", "resources": [{"enable_custom_metrics": false, "id": "resource-id-123", "resource_type": "kafka", "tags": ["myTag", "myTag2:myValue"]}], "tags": ["myTag", "myTag2:myValue"]}, "type": "confluent-cloud-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Confluent account returns "Not Found" response + Given new "CreateConfluentAccount" request + And body with value {"data": {"attributes": {"api_key": "TESTAPIKEY123", "api_secret": "test-api-secret-123", "resources": [{"enable_custom_metrics": false, "id": "resource-id-123", "resource_type": "kafka", "tags": ["myTag", "myTag2:myValue"]}], "tags": ["myTag", "myTag2:myValue"]}, "type": "confluent-cloud-accounts"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Confluent account returns "OK" response + Given new "CreateConfluentAccount" request + And body with value {"data": {"attributes": {"api_key": "TESTAPIKEY123", "api_secret": "test-api-secret-123", "resources": [{"enable_custom_metrics": false, "id": "resource-id-123", "resource_type": "kafka", "tags": ["myTag", "myTag2:myValue"]}], "tags": ["myTag", "myTag2:myValue"]}, "type": "confluent-cloud-accounts"}} + When the request is sent + Then the response status is 201 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add resource to Confluent account returns "Bad Request" response + Given new "CreateConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"enable_custom_metrics": false, "resource_type": "kafka", "tags": ["myTag", "myTag2:myValue"]}, "id": "resource-id-123", "type": "confluent-cloud-resources"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add resource to Confluent account returns "Not Found" response + Given new "CreateConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"enable_custom_metrics": false, "resource_type": "kafka", "tags": ["myTag", "myTag2:myValue"]}, "id": "resource-id-123", "type": "confluent-cloud-resources"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: Add resource to Confluent account returns "OK" response + Given there is a valid "confluent_account" in the system + And new "CreateConfluentResource" request + And request contains "account_id" parameter from "confluent_account.data.id" + And body with value {"data": {"attributes": {"resource_type": "kafka", "tags": ["myTag", "myTag2:myValue"], "enable_custom_metrics": false}, "id": "{{ unique_lower_alnum }}", "type": "confluent-cloud-resources"}} + When the request is sent + Then the response status is 201 OK + And the response "data.id" is equal to "{{ unique_lower_alnum }}" + And the response "data.attributes.resource_type" is equal to "kafka" + And the response "data.attributes.tags[0]" is equal to "mytag" + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Confluent account returns "Bad Request" response + Given new "DeleteConfluentAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Confluent account returns "Not Found" response + Given new "DeleteConfluentAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: Delete Confluent account returns "OK" response + Given there is a valid "confluent_account" in the system + And new "DeleteConfluentAccount" request + And request contains "account_id" parameter from "confluent_account.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete resource from Confluent account returns "Bad Request" response + Given new "DeleteConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete resource from Confluent account returns "Not Found" response + Given new "DeleteConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete resource from Confluent account returns "OK" response + Given new "DeleteConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Confluent account returns "Bad Request" response + Given new "GetConfluentAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Confluent account returns "Not Found" response + Given new "GetConfluentAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: Get Confluent account returns "OK" response + Given there is a valid "confluent_account" in the system + And new "GetConfluentAccount" request + And request contains "account_id" parameter from "confluent_account.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "confluent-cloud-accounts" + And the response "data.attributes.api_key" is equal to "{{ unique_alnum }}" + And the response "data.attributes.resources[0].resource_type" is equal to "kafka" + And the response "data.attributes.resources[0].enable_custom_metrics" is equal to false + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get resource from Confluent account returns "Bad Request" response + Given new "GetConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get resource from Confluent account returns "Not Found" response + Given new "GetConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get resource from Confluent account returns "OK" response + Given new "GetConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Confluent Account resources returns "Bad Request" response + Given new "ListConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Confluent Account resources returns "Not Found" response + Given new "ListConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Confluent Account resources returns "OK" response + Given new "ListConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Confluent accounts returns "Bad Request" response + Given new "ListConfluentAccount" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Confluent accounts returns "Not Found" response + Given new "ListConfluentAccount" request + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: List Confluent accounts returns "OK" response + Given there is a valid "confluent_account" in the system + And new "ListConfluentAccount" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "confluent-cloud-accounts" + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Confluent account returns "Bad Request" response + Given new "UpdateConfluentAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "TESTAPIKEY123", "api_secret": "test-api-secret-123", "tags": ["myTag", "myTag2:myValue"]}, "type": "confluent-cloud-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Confluent account returns "Not Found" response + Given new "UpdateConfluentAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "TESTAPIKEY123", "api_secret": "test-api-secret-123", "tags": ["myTag", "myTag2:myValue"]}, "type": "confluent-cloud-accounts"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: Update Confluent account returns "OK" response + Given there is a valid "confluent_account" in the system + And new "UpdateConfluentAccount" request + And request contains "account_id" parameter from "confluent_account.data.id" + And body with value {"data": {"attributes": {"api_key": "{{confluent_account.data.attributes.api_key}}", "api_secret": "update-secret", "tags": ["updated_tag:val"]}, "type": "confluent-cloud-accounts"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.tags[0]" is equal to "updated_tag:val" + And the response "data.attributes.api_key" is equal to "{{ confluent_account.data.attributes.api_key }}" + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update resource in Confluent account returns "Bad Request" response + Given new "UpdateConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"enable_custom_metrics": false, "resource_type": "kafka", "tags": ["myTag", "myTag2:myValue"]}, "id": "resource-id-123", "type": "confluent-cloud-resources"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update resource in Confluent account returns "Not Found" response + Given new "UpdateConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"enable_custom_metrics": false, "resource_type": "kafka", "tags": ["myTag", "myTag2:myValue"]}, "id": "resource-id-123", "type": "confluent-cloud-resources"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update resource in Confluent account returns "OK" response + Given new "UpdateConfluentResource" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"enable_custom_metrics": false, "resource_type": "kafka", "tags": ["myTag", "myTag2:myValue"]}, "id": "resource-id-123", "type": "confluent-cloud-resources"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/container_images.feature b/test-runner-data/features/v2/container_images.feature new file mode 100644 index 0000000000..8e9162526c --- /dev/null +++ b/test-runner-data/features/v2/container_images.feature @@ -0,0 +1,36 @@ +@endpoint(container-images) @endpoint(container-images-v2) +Feature: Container Images + The Container Images API allows you to query Container Image data for your + organization. See the [Container Images View page](https://docs.datadoghq. + com/infrastructure/containers/container_images/) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ContainerImages" API + And new "ListContainerImages" request + + @replay-only @team:DataDog/container-experiences + Scenario: Get all Container Image groups returns "OK" response + Given request contains "group_by" parameter with value "short_image" + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.name" is equal to "test_name" + + @generated @skip @team:DataDog/container-experiences + Scenario: Get all Container Images returns "Bad Request" response + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/container-experiences + Scenario: Get all Container Images returns "OK" response + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.name" is equal to "test_name" + + @replay-only @skip-validation @team:DataDog/container-experiences @with-pagination + Scenario: Get all Container Images returns "OK" response with pagination + Given request contains "page[size]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items diff --git a/test-runner-data/features/v2/containers.feature b/test-runner-data/features/v2/containers.feature new file mode 100644 index 0000000000..1e1e842371 --- /dev/null +++ b/test-runner-data/features/v2/containers.feature @@ -0,0 +1,36 @@ +@endpoint(containers) @endpoint(containers-v2) +Feature: Containers + The Containers API allows you to query container data for your + organization. See the [Container Monitoring + page](https://docs.datadoghq.com/containers/) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Containers" API + And new "ListContainers" request + + @replay-only @team:DataDog/container-experiences + Scenario: Get All Container groups returns "OK" response + Given request contains "group_by" parameter with value "short_image" + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.count" is equal to 123 + + @generated @skip @team:DataDog/container-experiences + Scenario: Get All Containers returns "Bad Request" response + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/container-experiences + Scenario: Get All Containers returns "OK" response + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.name" is equal to "test_name" + + @replay-only @skip-validation @team:DataDog/container-experiences @with-pagination + Scenario: Get All Containers returns "OK" response with pagination + Given request contains "page[size]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items diff --git a/test-runner-data/features/v2/csm_agents.feature b/test-runner-data/features/v2/csm_agents.feature new file mode 100644 index 0000000000..c5c25bb35e --- /dev/null +++ b/test-runner-data/features/v2/csm_agents.feature @@ -0,0 +1,25 @@ +@endpoint(csm-agents) @endpoint(csm-agents-v2) +Feature: CSM Agents + Datadog Cloud Security Management (CSM) delivers real-time threat + detection and continuous configuration audits across your entire cloud + infrastructure, all in a unified view for seamless collaboration and + faster remediation. Go to + https://docs.datadoghq.com/security/cloud_security_management to learn + more + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CSMAgents" API + + @team:DataDog/k9-misconfigs + Scenario: Get all CSM Agents returns "OK" response + Given new "ListAllCSMAgents" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-misconfigs + Scenario: Get all CSM Serverless Agents returns "OK" response + Given new "ListAllCSMServerlessAgents" request + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/csm_coverage_analysis.feature b/test-runner-data/features/v2/csm_coverage_analysis.feature new file mode 100644 index 0000000000..a6c05b8dfc --- /dev/null +++ b/test-runner-data/features/v2/csm_coverage_analysis.feature @@ -0,0 +1,31 @@ +@endpoint(csm-coverage-analysis) @endpoint(csm-coverage-analysis-v2) +Feature: CSM Coverage Analysis + Datadog Cloud Security Management (CSM) delivers real-time threat + detection and continuous configuration audits across your entire cloud + infrastructure, all in a unified view for seamless collaboration and + faster remediation. Go to + https://docs.datadoghq.com/security/cloud_security_management to learn + more. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CSMCoverageAnalysis" API + + @team:DataDog/k9-misconfigs + Scenario: Get the CSM Cloud Accounts Coverage Analysis returns "OK" response + Given new "GetCSMCloudAccountsCoverageAnalysis" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-misconfigs + Scenario: Get the CSM Hosts and Containers Coverage Analysis returns "OK" response + Given new "GetCSMHostsAndContainersCoverageAnalysis" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-misconfigs + Scenario: Get the CSM Serverless Coverage Analysis returns "OK" response + Given new "GetCSMServerlessCoverageAnalysis" request + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/csm_threats.feature b/test-runner-data/features/v2/csm_threats.feature new file mode 100644 index 0000000000..2522d1efeb --- /dev/null +++ b/test-runner-data/features/v2/csm_threats.feature @@ -0,0 +1,333 @@ +@endpoint(csm-threats) @endpoint(csm-threats-v2) +Feature: CSM Threats + Workload Protection monitors file, network, and process activity across + your environment to detect real-time threats to your infrastructure. See + [Workload + Protection](https://docs.datadoghq.com/security/workload_protection/) for + more information on setting up Workload Protection. **Note**: These + endpoints are split based on whether you are using the US1-FED site or + not. Please reference the specific resource for the site you are using. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "CSMThreats" API + + @replay-only @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection agent rule (US1-FED) returns "Bad Request" response + Given there is a valid "policy_rc" in the system + And new "CreateCloudWorkloadSecurityAgentRule" request + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name", "filters": [], "name": "my_agent_rule"}, "type": "agent_rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection agent rule (US1-FED) returns "Conflict" response + Given there is a valid "policy_rc" in the system + And new "CreateCloudWorkloadSecurityAgentRule" request + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\"", "filters": [], "name": "my_agent_rule"}, "type": "agent_rule"}} + When the request is sent + Then the response status is 409 Conflict + + @replay-only @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection agent rule (US1-FED) returns "OK" response + Given there is a valid "policy_rc" in the system + And new "CreateCloudWorkloadSecurityAgentRule" request + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\"", "filters": [], "name": "{{ unique_lower_alnum }}"}, "type": "agent_rule"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection agent rule returns "Bad Request" response + Given there is a valid "policy_rc" in the system + And new "CreateCSMThreatsAgentRule" request + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name", "filters": [], "name": "my_agent_rule", "policy_id": "{{ policy.data.id }}", "product_tags": []}, "type": "agent_rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection agent rule returns "Conflict" response + Given there is a valid "policy_rc" in the system + And new "CreateCSMThreatsAgentRule" request + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\"", "filters": [], "name": "my_agent_rule", "policy_id": "{{ policy.data.id }}", "product_tags": []}, "type": "agent_rule"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection agent rule returns "OK" response + Given there is a valid "policy_rc" in the system + And new "CreateCSMThreatsAgentRule" request + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\"", "agent_version": "> 7.60", "filters": [], "name": "{{ unique_lower_alnum }}", "policy_id": "{{ policy.data.id }}", "product_tags": []}, "type": "agent_rule"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection agent rule with set action returns "OK" response + Given there is a valid "policy_rc" in the system + And new "CreateCSMThreatsAgentRule" request + And body with value {"data": {"attributes": {"description": "My Agent rule with set action", "enabled": true, "expression": "exec.file.name == \"sh\"", "filters": [], "name": "{{ unique_lower_alnum }}", "policy_id": "{{ policy.data.id }}", "product_tags": [], "actions": [{"set": {"name": "test_set", "value": "test_value", "scope": "process", "inherited": true}}, {"hash": {"field": "exec.file"}}]}, "type": "agent_rule"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection agent rule with set action with expression returns "OK" response + Given there is a valid "policy_rc" in the system + And new "CreateCSMThreatsAgentRule" request + And body with value {"data": {"attributes": {"description": "My Agent rule with set action with expression", "enabled": true, "expression": "exec.file.name == \"sh\"", "filters": [], "name": "{{ unique_lower_alnum }}", "policy_id": "{{ policy.data.id }}", "product_tags": [], "actions": [{"set": {"name": "test_set", "expression": "exec.file.path", "default_value": "/dev/null", "scope": "process"}}]}, "type": "agent_rule"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection policy returns "Bad Request" response + Given new "CreateCSMThreatsAgentPolicy" request + And body with value {"data": {"attributes": {"description": "My agent policy", "enabled": true, "hostTags": [], "hostTagsLists": [], "name": "test"}, "type": "policy"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection policy returns "Conflict" response + Given new "CreateCSMThreatsAgentPolicy" request + And body with value {"data": {"attributes": {"description": "My agent policy", "enabled": true, "hostTags": [], "name": "my_agent_policy"}, "type": "policy"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/k9-cws-backend + Scenario: Create a Workload Protection policy returns "OK" response + Given new "CreateCSMThreatsAgentPolicy" request + And body with value {"data": {"attributes": {"description": "My agent policy", "enabled": true, "hostTagsLists": [["env:test"]], "name": "my_agent_policy_2"}, "type": "policy"}} + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/k9-cws-backend + Scenario: Delete a Workload Protection agent rule (US1-FED) returns "Not Found" response + Given new "DeleteCloudWorkloadSecurityAgentRule" request + And request contains "agent_rule_id" parameter with value "non-existent-rule-id" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/k9-cws-backend + Scenario: Delete a Workload Protection agent rule (US1-FED) returns "OK" response + Given there is a valid "agent_rule" in the system + And new "DeleteCloudWorkloadSecurityAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/k9-cws-backend + Scenario: Delete a Workload Protection agent rule returns "Not Found" response + Given new "DeleteCSMThreatsAgentRule" request + And request contains "agent_rule_id" parameter with value "non-existent-rule-id" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-cws-backend + Scenario: Delete a Workload Protection agent rule returns "OK" response + Given there is a valid "policy_rc" in the system + And there is a valid "agent_rule_rc" in the system + And new "DeleteCSMThreatsAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + And request contains "policy_id" parameter from "policy.data.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/k9-cws-backend + Scenario: Delete a Workload Protection policy returns "Not Found" response + Given new "DeleteCSMThreatsAgentPolicy" request + And request contains "policy_id" parameter with value "non-existent-policy-id" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-cws-backend + Scenario: Delete a Workload Protection policy returns "OK" response + Given there is a valid "policy_rc" in the system + And new "DeleteCSMThreatsAgentPolicy" request + And request contains "policy_id" parameter from "policy.data.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/k9-cws-backend + Scenario: Download the Workload Protection policy (US1-FED) returns "OK" response + Given new "DownloadCloudWorkloadPolicyFile" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Download the Workload Protection policy returns "OK" response + Given new "DownloadCSMThreatsPolicy" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Get a Workload Protection agent rule (US1-FED) returns "Not Found" response + Given new "GetCloudWorkloadSecurityAgentRule" request + And request contains "agent_rule_id" parameter with value "abc-def-ghi" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-cws-backend + Scenario: Get a Workload Protection agent rule (US1-FED) returns "OK" response + Given there is a valid "agent_rule" in the system + And new "GetCloudWorkloadSecurityAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Get a Workload Protection agent rule returns "Not Found" response + Given new "GetCSMThreatsAgentRule" request + And request contains "agent_rule_id" parameter with value "abc-def-ghi" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-cws-backend + Scenario: Get a Workload Protection agent rule returns "OK" response + Given there is a valid "policy_rc" in the system + And there is a valid "agent_rule_rc" in the system + And new "GetCSMThreatsAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + And request contains "policy_id" parameter from "policy.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Get a Workload Protection policy returns "Not Found" response + Given new "GetCSMThreatsAgentPolicy" request + And request contains "policy_id" parameter with value "non-existent-policy-id" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-cws-backend + Scenario: Get a Workload Protection policy returns "OK" response + Given there is a valid "policy_rc" in the system + And new "GetCSMThreatsAgentPolicy" request + And request contains "policy_id" parameter from "policy.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Get all Workload Protection agent rules (US1-FED) returns "OK" response + Given new "ListCloudWorkloadSecurityAgentRules" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Get all Workload Protection agent rules returns "OK" response + Given new "ListCSMThreatsAgentRules" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Get all Workload Protection policies returns "OK" response + Given new "ListCSMThreatsAgentPolicies" request + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection agent rule (US1-FED) returns "Bad Request" response + Given there is a valid "agent_rule" in the system + And new "UpdateCloudWorkloadSecurityAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name"}, "id": "{{ agent_rule.data.id }}", "type": "agent_rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection agent rule (US1-FED) returns "Concurrent Modification" response + Given there is a valid "agent_rule" in the system + And new "UpdateCloudWorkloadSecurityAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\""}, "id": "{{ agent_rule.data.id }}", "type": "agent_rule"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @replay-only @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection agent rule (US1-FED) returns "Not Found" response + Given new "UpdateCloudWorkloadSecurityAgentRule" request + And request contains "agent_rule_id" parameter with value "non-existent-rule-id" + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\""}, "id": "invalid-agent-rule-id", "type": "agent_rule"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection agent rule (US1-FED) returns "OK" response + Given there is a valid "agent_rule" in the system + And new "UpdateCloudWorkloadSecurityAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + And body with value {"data": {"attributes": {"description": "Updated Agent rule", "expression": "exec.file.name == \"sh\""}, "id": "{{ agent_rule.data.id }}", "type": "agent_rule"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection agent rule returns "Bad Request" response + Given there is a valid "policy_rc" in the system + And there is a valid "agent_rule_rc" in the system + And new "UpdateCSMThreatsAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\"", "policy_id": "{{ policy.data.id }}", "product_tags": []}, "id": "invalid-agent-rule-id", "type": "agent_rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection agent rule returns "Concurrent Modification" response + Given there is a valid "agent_rule_rc" in the system + And there is a valid "policy_rc" in the system + And new "UpdateCSMThreatsAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\"", "policy_id": "{{ policy.data.id }}", "product_tags": []}, "id": "{{ agent_rule.data.id }}", "type": "agent_rule"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection agent rule returns "Not Found" response + Given there is a valid "policy_rc" in the system + And new "UpdateCSMThreatsAgentRule" request + And request contains "agent_rule_id" parameter with value "non-existent-rule-id" + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\"", "policy_id": "{{ policy.data.id }}", "product_tags": []}, "id": "non-existent-rule-id", "type": "agent_rule"}} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection agent rule returns "OK" response + Given there is a valid "policy_rc" in the system + And there is a valid "agent_rule_rc" in the system + And new "UpdateCSMThreatsAgentRule" request + And request contains "agent_rule_id" parameter from "agent_rule.data.id" + And request contains "policy_id" parameter from "policy.data.id" + And body with value {"data": {"attributes": {"description": "My Agent rule", "enabled": true, "expression": "exec.file.name == \"sh\"", "policy_id": "{{ policy.data.id }}", "product_tags": []}, "id": "{{ agent_rule.data.id }}", "type": "agent_rule"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection policy returns "Bad Request" response + Given there is a valid "policy_rc" in the system + And new "UpdateCSMThreatsAgentPolicy" request + And request contains "policy_id" parameter from "policy.data.id" + And body with value {"data": {"attributes": {"description": "My agent policy", "enabled": true, "hostTags": ["env:test"], "hostTagsLists": [["env:test"]], "name": ""}, "id": "{{ policy.data.id }}", "type": "policy"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection policy returns "Concurrent Modification" response + Given there is a valid "policy_rc" in the system + And new "UpdateCSMThreatsAgentPolicy" request + And request contains "policy_id" parameter from "policy.data.id" + And body with value {"data": {"attributes": {"description": "My agent policy", "enabled": true, "hostTags": [], "name": "my_agent_policy"}, "id": "{{ policy.data.id }}", "type": "policy"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection policy returns "Not Found" response + Given new "UpdateCSMThreatsAgentPolicy" request + And request contains "policy_id" parameter with value "non-existent-policy-id" + And body with value {"data": {"attributes": {"description": "My agent policy", "enabled": true, "hostTags": [], "name": "my_agent_policy"}, "id": "non-existent-policy-id", "type": "policy"}} + When the request is sent + Then the response status is 404 Bad Request + + @team:DataDog/k9-cws-backend + Scenario: Update a Workload Protection policy returns "OK" response + Given there is a valid "policy_rc" in the system + And new "UpdateCSMThreatsAgentPolicy" request + And request contains "policy_id" parameter from "policy.data.id" + And body with value {"data": {"attributes": {"description": "Updated agent policy", "enabled": true, "hostTagsLists": [["env:test"]], "name": "updated_agent_policy"}, "id": "{{ policy.data.id }}", "type": "policy"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/dashboard_lists.feature b/test-runner-data/features/v2/dashboard_lists.feature new file mode 100644 index 0000000000..1d36afaadd --- /dev/null +++ b/test-runner-data/features/v2/dashboard_lists.feature @@ -0,0 +1,162 @@ +@endpoint(dashboard-lists) @endpoint(dashboard-lists-v2) +Feature: Dashboard Lists + Interact with your dashboard lists through the API to organize, find, and + share all of your dashboards with your team and organization. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "DashboardLists" API + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Add Items to a Dashboard List returns "Bad Request" response + Given new "CreateDashboardListItems" request + And request contains "dashboard_list_id" parameter from "REPLACE.ME" + And body with value {"dashboards": [{"id": "q5j-nti-fv6", "type": "host_timeboard"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Add Items to a Dashboard List returns "Not Found" response + Given new "CreateDashboardListItems" request + And request contains "dashboard_list_id" parameter from "REPLACE.ME" + And body with value {"dashboards": [{"id": "q5j-nti-fv6", "type": "host_timeboard"}]} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Add Items to a Dashboard List returns "OK" response + Given new "CreateDashboardListItems" request + And request contains "dashboard_list_id" parameter from "REPLACE.ME" + And body with value {"dashboards": [{"id": "q5j-nti-fv6", "type": "host_timeboard"}]} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/dashboards-backend + Scenario: Add custom screenboard dashboard to an existing dashboard list returns "OK" response + Given there is a valid "dashboard_list" in the system + And there is a valid "screenboard_dashboard" in the system + And new "CreateDashboardListItems" request + And request contains "dashboard_list_id" parameter from "dashboard_list.id" + And body with value {"dashboards": [{"id": "{{ screenboard_dashboard.id }}", "type": "custom_screenboard"}]} + When the request is sent + Then the response status is 200 OK + And the response "added_dashboards_to_list[0].type" is equal to "custom_screenboard" + And the response "added_dashboards_to_list[0].id" is equal to "{{ screenboard_dashboard.id }}" + And the response "added_dashboards_to_list" has length 1 + + @team:DataDog/dashboards-backend + Scenario: Add custom timeboard dashboard to an existing dashboard list returns "OK" response + Given there is a valid "dashboard_list" in the system + And there is a valid "dashboard" in the system + And new "CreateDashboardListItems" request + And request contains "dashboard_list_id" parameter from "dashboard_list.id" + And body with value {"dashboards": [{"id": "{{ dashboard.id }}", "type": "custom_timeboard"}]} + When the request is sent + Then the response status is 200 OK + And the response "added_dashboards_to_list[0].type" is equal to "custom_timeboard" + And the response "added_dashboards_to_list[0].id" is equal to "{{ dashboard.id }}" + And the response "added_dashboards_to_list" has length 1 + + @team:DataDog/dashboards-backend + Scenario: Delete custom screenboard dashboard from an existing dashboard list returns "OK" response + Given there is a valid "dashboard_list" in the system + And there is a valid "screenboard_dashboard" in the system + And the "dashboard_list" has the "screenboard_dashboard" + And new "DeleteDashboardListItems" request + And request contains "dashboard_list_id" parameter from "dashboard_list.id" + And body with value {"dashboards": [{"id": "{{ screenboard_dashboard.id }}", "type": "custom_screenboard"}]} + When the request is sent + Then the response status is 200 OK + And the response "deleted_dashboards_from_list[0].type" is equal to "custom_screenboard" + And the response "deleted_dashboards_from_list[0].id" is equal to "{{ screenboard_dashboard.id }}" + And the response "deleted_dashboards_from_list" has length 1 + + @team:DataDog/dashboards-backend + Scenario: Delete custom timeboard dashboard from an existing dashboard list returns "OK" response + Given there is a valid "dashboard_list" in the system + And there is a valid "dashboard" in the system + And the "dashboard_list" has the "dashboard" + And new "DeleteDashboardListItems" request + And request contains "dashboard_list_id" parameter from "dashboard_list.id" + And body with value {"dashboards": [{"id": "{{ dashboard.id }}", "type": "custom_timeboard"}]} + When the request is sent + Then the response status is 200 OK + And the response "deleted_dashboards_from_list[0].type" is equal to "custom_timeboard" + And the response "deleted_dashboards_from_list[0].id" is equal to "{{ dashboard.id }}" + And the response "deleted_dashboards_from_list" has length 1 + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Delete items from a dashboard list returns "Bad Request" response + Given new "DeleteDashboardListItems" request + And request contains "dashboard_list_id" parameter from "REPLACE.ME" + And body with value {"dashboards": [{"id": "q5j-nti-fv6", "type": "host_timeboard"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Delete items from a dashboard list returns "Not Found" response + Given new "DeleteDashboardListItems" request + And request contains "dashboard_list_id" parameter from "REPLACE.ME" + And body with value {"dashboards": [{"id": "q5j-nti-fv6", "type": "host_timeboard"}]} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Delete items from a dashboard list returns "OK" response + Given new "DeleteDashboardListItems" request + And request contains "dashboard_list_id" parameter from "REPLACE.ME" + And body with value {"dashboards": [{"id": "q5j-nti-fv6", "type": "host_timeboard"}]} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Get items of a Dashboard List returns "Not Found" response + Given new "GetDashboardListItems" request + And request contains "dashboard_list_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/dashboards-backend + Scenario: Get items of a Dashboard List returns "OK" response + Given there is a valid "dashboard_list" in the system + And there is a valid "dashboard" in the system + And the "dashboard_list" has the "dashboard" + And new "GetDashboardListItems" request + And request contains "dashboard_list_id" parameter from "dashboard_list.id" + When the request is sent + Then the response status is 200 OK + And the response "dashboards[0].id" is equal to "{{ dashboard.id }}" + And the response "dashboards[0].type" is equal to "custom_timeboard" + And the response "dashboards" has length 1 + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Update items of a dashboard list returns "Bad Request" response + Given new "UpdateDashboardListItems" request + And request contains "dashboard_list_id" parameter from "REPLACE.ME" + And body with value {"dashboards": [{"id": "q5j-nti-fv6", "type": "host_timeboard"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Update items of a dashboard list returns "Not Found" response + Given new "UpdateDashboardListItems" request + And request contains "dashboard_list_id" parameter from "REPLACE.ME" + And body with value {"dashboards": [{"id": "q5j-nti-fv6", "type": "host_timeboard"}]} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/dashboards-backend + Scenario: Update items of a dashboard list returns "OK" response + Given there is a valid "dashboard_list" in the system + And there is a valid "dashboard" in the system + And there is a valid "screenboard_dashboard" in the system + And the "dashboard_list" has the "dashboard" + And new "UpdateDashboardListItems" request + And request contains "dashboard_list_id" parameter from "dashboard_list.id" + And body with value {"dashboards": [{"id": "{{ screenboard_dashboard.id }}", "type": "custom_screenboard"}]} + When the request is sent + Then the response status is 200 OK + And the response "dashboards[0].id" is equal to "{{ screenboard_dashboard.id }}" + And the response "dashboards[0].type" is equal to "custom_screenboard" + And the response "dashboards" has length 1 diff --git a/test-runner-data/features/v2/dashboards.feature b/test-runner-data/features/v2/dashboards.feature new file mode 100644 index 0000000000..347955175e --- /dev/null +++ b/test-runner-data/features/v2/dashboards.feature @@ -0,0 +1,101 @@ +@endpoint(dashboards) @endpoint(dashboards-v2) +Feature: Dashboards + Get usage statistics for the dashboards in your organization, including + view counts, last-edit times, widget counts, and quality scores. See the + [Dashboards documentation](https://docs.datadoghq.com/dashboards/) for + more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Dashboards" API + + @generated @skip @team:DataDog/dashboards-backend + Scenario: Get usage stats for a dashboard returns "Bad Request" response + Given operation "GetDashboardUsage" enabled + And new "GetDashboardUsage" request + And request contains "dashboard_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get usage stats for a dashboard returns "Not Found" response + Given operation "GetDashboardUsage" enabled + And new "GetDashboardUsage" request + And request contains "dashboard_id" parameter with value "xxx-xxx-xxx" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get usage stats for a dashboard returns "OK" response + Given operation "GetDashboardUsage" enabled + And there is a valid "dashboard" in the system + And new "GetDashboardUsage" request + And request contains "dashboard_id" parameter from "dashboard.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "dashboard.id" + And the response "data.type" is equal to "dashboards-usages" + And the response "data.attributes.title" has the same value as "dashboard.title" + And the response "data.attributes" has field "org_id" + And the response "data.attributes" has field "total_views" + And the response "data.attributes.author" has field "handle" + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get usage stats for all dashboards returns "Bad Request" response + Given operation "ListDashboardsUsage" enabled + And new "ListDashboardsUsage" request + And request contains "page[limit]" parameter with value 10000 + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get usage stats for all dashboards returns "OK" response + Given operation "ListDashboardsUsage" enabled + And there is a valid "dashboard" in the system + And new "ListDashboardsUsage" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "dashboards-usages" + And the response "data[0]" has field "id" + And the response "data[0].attributes" has field "org_id" + And the response "meta.page.type" is equal to "offset_limit" + And the response "meta.page" has field "total" + And the response "links" has field "self" + + @replay-only @skip-validation @team:DataDog/dashboards-backend @with-pagination + Scenario: Get usage stats for all dashboards returns "OK" response with pagination + Given operation "ListDashboardsUsage" enabled + And new "ListDashboardsUsage" request + And request contains "page[limit]" parameter with value 500 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 590 items + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get usage stats for all dashboards with both filters returns "OK" response + Given operation "ListDashboardsUsage" enabled + And new "ListDashboardsUsage" request + And request contains "filter[edited_before]" parameter with value "2025-04-26T00:00:00Z" + And request contains "filter[viewed_before]" parameter with value "2025-04-26T00:00:00Z" + When the request is sent + Then the response status is 200 OK + And the response "meta.page" has field "total" + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get usage stats for all dashboards with edited_before filter returns "OK" response + Given operation "ListDashboardsUsage" enabled + And new "ListDashboardsUsage" request + And request contains "filter[edited_before]" parameter with value "2025-04-26T00:00:00Z" + When the request is sent + Then the response status is 200 OK + And the response "meta.page" has field "total" + + @replay-only @team:DataDog/dashboards-backend + Scenario: Get usage stats for all dashboards with viewed_before filter returns "OK" response + Given operation "ListDashboardsUsage" enabled + And new "ListDashboardsUsage" request + And request contains "filter[viewed_before]" parameter with value "2025-04-26T00:00:00Z" + When the request is sent + Then the response status is 200 OK + And the response "meta.page" has field "total" diff --git a/test-runner-data/features/v2/data_deletion.feature b/test-runner-data/features/v2/data_deletion.feature new file mode 100644 index 0000000000..6bfc942e2a --- /dev/null +++ b/test-runner-data/features/v2/data_deletion.feature @@ -0,0 +1,84 @@ +@endpoint(data-deletion) @endpoint(data-deletion-v2) +Feature: Data Deletion + The Data Deletion API allows the user to target and delete data from the + allowed products. It's currently enabled for Logs and RUM and depends on + `logs_delete_data` and `rum_delete_data` permissions respectively. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "DataDeletion" API + + @replay-only @team:DataDog/supportability-engineering + Scenario: Cancels a data deletion request returns "Bad Request" response + Given operation "CancelDataDeletionRequest" enabled + And new "CancelDataDeletionRequest" request + And request contains "id" parameter with value "id-1" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/supportability-engineering + Scenario: Cancels a data deletion request returns "OK" response + Given operation "CancelDataDeletionRequest" enabled + And there is a valid "deletion_request" in the system + And new "CancelDataDeletionRequest" request + And request contains "id" parameter from "deletion_request.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{ deletion_request.data.id }}" + And the response "data.type" is equal to "{{ deletion_request.data.type }}" + And the response "data.attributes.product" is equal to "{{ deletion_request.data.attributes.product }}" + And the response "data.attributes.status" is equal to "canceled" + + @replay-only @team:DataDog/supportability-engineering + Scenario: Cancels a data deletion request returns "Precondition failed error" response + Given operation "CancelDataDeletionRequest" enabled + And new "CancelDataDeletionRequest" request + And request contains "id" parameter with value "-1" + When the request is sent + Then the response status is 412 Precondition failed error + + @generated @skip @team:DataDog/supportability-engineering + Scenario: Creates a data deletion request returns "Bad Request" response + Given operation "CreateDataDeletionRequest" enabled + And new "CreateDataDeletionRequest" request + And request contains "product" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"from": 1672527600000, "indexes": ["test-index", "test-index-2"], "query": {"host": "abc", "service": "xyz"}, "to": 1704063600000}, "type": "create_deletion_req"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/supportability-engineering + Scenario: Creates a data deletion request returns "OK" response + Given operation "CreateDataDeletionRequest" enabled + And new "CreateDataDeletionRequest" request + And request contains "product" parameter with value "logs" + And body with value {"data": {"attributes": {"from": 1672527600000, "indexes": ["test-index", "test-index-2"], "query": {"host": "abc", "service": "xyz"}, "to": 1704063600000}, "type": "create_deletion_req"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "deletion_request" + And the response "data.attributes.product" is equal to "logs" + And the response "data.attributes.status" is equal to "pending" + + @replay-only @team:DataDog/supportability-engineering + Scenario: Creates a data deletion request returns "Precondition failed error" response + Given operation "CreateDataDeletionRequest" enabled + And new "CreateDataDeletionRequest" request + And request contains "product" parameter with value "logs" + And body with value {"data": {"attributes": {"from": 1672527600000, "indexes": ["test-index", "test-index-2"], "query": {}, "to": 1704063600000}, "type": "create_deletion_req"}} + When the request is sent + Then the response status is 412 Precondition failed error + + @generated @skip @team:DataDog/supportability-engineering + Scenario: Gets a list of data deletion requests returns "Bad Request" response + Given operation "GetDataDeletionRequests" enabled + And new "GetDataDeletionRequests" request + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/supportability-engineering + Scenario: Gets a list of data deletion requests returns "OK" response + Given operation "GetDataDeletionRequests" enabled + And there is a valid "deletion_request" in the system + And new "GetDataDeletionRequests" request + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/datasets.feature b/test-runner-data/features/v2/datasets.feature new file mode 100644 index 0000000000..1efcaeb669 --- /dev/null +++ b/test-runner-data/features/v2/datasets.feature @@ -0,0 +1,123 @@ +@endpoint(datasets) @endpoint(datasets-v2) +Feature: Datasets + Data Access Controls in Datadog is a feature that allows administrators + and access managers to regulate access to sensitive data. By defining + Restricted Datasets, you can ensure that only specific teams or roles can + view certain types of telemetry (for example, logs, traces, metrics, and + RUM data). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Datasets" API + + @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-terraform-config @skip-typescript @skip-validation @team:DataDog/access-enforcement + Scenario: Create a dataset returns "Bad Request" response + Given new "CreateDataset" request + And operation "CreateDataset" enabled + And body with value {"test": "bad_request"} + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Create a dataset returns "Conflict" response + Given there is a valid "dataset" in the system + And operation "CreateDataset" enabled + And new "CreateDataset" request + And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "metrics"}]}, "type": "dataset"}} + When the request is sent + Then the response status is 409 Conflict + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Create a dataset returns "OK" response + Given new "CreateDataset" request + And operation "CreateDataset" enabled + And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "metrics"}]}, "type": "dataset"}} + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Delete a dataset returns "Bad Request" response + Given new "DeleteDataset" request + And operation "DeleteDataset" enabled + And request contains "dataset_id" parameter with value "malformed_id" + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Delete a dataset returns "No Content" response + Given there is a valid "dataset" in the system + And operation "DeleteDataset" enabled + And new "DeleteDataset" request + And request contains "dataset_id" parameter from "dataset.data.id" + When the request is sent + Then the response status is 204 No Content + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Delete a dataset returns "Not Found" response + Given new "DeleteDataset" request + And operation "DeleteDataset" enabled + And request contains "dataset_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-terraform-config @skip-typescript @skip-validation @team:DataDog/access-enforcement + Scenario: Edit a dataset returns "Bad Request" response + Given new "UpdateDataset" request + And operation "UpdateDataset" enabled + And request contains "dataset_id" parameter with value "malformed_id" + When the request is sent + Then the response status is 400 Bad Request + + @skip @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Edit a dataset returns "Not Found" response + Given there is a valid "dataset" in the system + And operation "UpdateDataset" enabled + And new "UpdateDataset" request + And request contains "dataset_id" parameter from "dataset.data.id" + And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:1234"], "product": "metrics"}]}, "type": "dataset"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Edit a dataset returns "OK" response + Given there is a valid "dataset" in the system + And operation "UpdateDataset" enabled + And new "UpdateDataset" request + And request contains "dataset_id" parameter from "dataset.data.id" + And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:1234"], "product": "metrics"}]}, "type": "dataset"}} + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Get a single dataset by ID returns "Bad Request" response + Given new "GetDataset" request + And operation "GetDataset" enabled + And request contains "dataset_id" parameter with value "malformed_id" + When the request is sent + Then the response status is 400 Bad Request + + @skip @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Get a single dataset by ID returns "Not Found" response + Given operation "GetDataset" enabled + And new "GetDataset" request + And request contains "dataset_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Get a single dataset by ID returns "OK" response + Given there is a valid "dataset" in the system + And operation "GetDataset" enabled + And new "GetDataset" request + And request contains "dataset_id" parameter from "dataset.data.id" + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Get all datasets returns "OK" response + Given there is a valid "dataset" in the system + And operation "GetAllDatasets" enabled + And new "GetAllDatasets" request + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/deployment_gates.feature b/test-runner-data/features/v2/deployment_gates.feature new file mode 100644 index 0000000000..1825f8af3a --- /dev/null +++ b/test-runner-data/features/v2/deployment_gates.feature @@ -0,0 +1,415 @@ +@endpoint(deployment-gates) @endpoint(deployment-gates-v2) +Feature: Deployment Gates + Manage Deployment Gates using this API to reduce the likelihood and impact + of incidents caused by deployments. See the [Deployment Gates + documentation](https://docs.datadoghq.com/deployment_gates/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "DeploymentGates" API + + @team:DataDog/ci-app-backend + Scenario: Create deployment gate returns "Bad Request" response + Given operation "CreateDeploymentGate" enabled + And new "CreateDeploymentGate" request + And body with value {"data": {"attributes": {"env": "", "service":"test-service", "identifier": "my-gate"}, "type": "deployment_gate"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Create deployment gate returns "Bad request." response + Given operation "CreateDeploymentGate" enabled + And new "CreateDeploymentGate" request + And body with value {"data": {"attributes": {"dry_run": false, "env": "production", "identifier": "pre", "service": "my-service"}, "type": "deployment_gate"}} + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Create deployment gate returns "OK" response + Given operation "CreateDeploymentGate" enabled + And new "CreateDeploymentGate" request + And body with value {"data": {"attributes": {"dry_run": false, "env": "production", "identifier": "my-gate-1", "service": "my-service"}, "type": "deployment_gate"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ci-app-backend + Scenario: Create deployment rule returns "Bad Request" response + Given there is a valid "deployment_gate" in the system + And operation "CreateDeploymentRule" enabled + And new "CreateDeploymentRule" request + And request contains "gate_id" parameter from "deployment_gate.data.id" + And body with value {"data": {"attributes": {"dry_run": false, "name":"test", "options": {"excluded_resources": []}, "type": "fdd"}, "type": "deployment_rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Create deployment rule returns "Bad request." response + Given operation "CreateDeploymentRule" enabled + And new "CreateDeploymentRule" request + And request contains "gate_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dry_run": false, "name": "My deployment rule", "options": {"allowed_resources": ["resource1", "resource2"], "duration": 3600, "excluded_resources": ["resource1", "resource2"]}, "type": "faulty_deployment_detection"}, "type": "deployment_rule"}} + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Create deployment rule returns "OK" response + Given there is a valid "deployment_gate" in the system + And operation "CreateDeploymentRule" enabled + And new "CreateDeploymentRule" request + And request contains "gate_id" parameter from "deployment_gate.data.id" + And body with value {"data": {"attributes": {"dry_run": false, "name": "My deployment rule", "options": {"excluded_resources": []}, "type": "faulty_deployment_detection"}, "type": "deployment_rule"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ci-app-backend + Scenario: Delete deployment gate returns "Bad Request" response + Given operation "DeleteDeploymentGate" enabled + And new "DeleteDeploymentGate" request + And request contains "id" parameter with value "invalid-gate-id" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Delete deployment gate returns "Bad request." response + Given operation "DeleteDeploymentGate" enabled + And new "DeleteDeploymentGate" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Delete deployment gate returns "Deployment gate not found." response + Given operation "DeleteDeploymentGate" enabled + And new "DeleteDeploymentGate" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Deployment gate not found. + + @team:DataDog/ci-app-backend + Scenario: Delete deployment gate returns "No Content" response + Given there is a valid "deployment_gate" in the system + And operation "DeleteDeploymentGate" enabled + And new "DeleteDeploymentGate" request + And request contains "id" parameter from "deployment_gate.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/ci-app-backend + Scenario: Delete deployment rule returns "Bad Request" response + Given operation "DeleteDeploymentRule" enabled + And new "DeleteDeploymentRule" request + And request contains "gate_id" parameter with value "invalid-gate-id" + And request contains "id" parameter with value "invalid-rule-id" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Delete deployment rule returns "Bad request." response + Given operation "DeleteDeploymentRule" enabled + And new "DeleteDeploymentRule" request + And request contains "gate_id" parameter from "REPLACE.ME" + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Delete deployment rule returns "Deployment gate not found." response + Given operation "DeleteDeploymentRule" enabled + And new "DeleteDeploymentRule" request + And request contains "gate_id" parameter with value "00000000-0000-0000-0000-000000000000" + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Deployment gate not found. + + @team:DataDog/ci-app-backend + Scenario: Delete deployment rule returns "No Content" response + Given there is a valid "deployment_gate" in the system + And there is a valid "deployment_rule" in the system + And operation "DeleteDeploymentRule" enabled + And new "DeleteDeploymentRule" request + And request contains "gate_id" parameter from "deployment_gate.data.id" + And request contains "id" parameter from "deployment_rule.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get a deployment gate evaluation result returns "Bad request." response + Given operation "GetDeploymentGatesEvaluationResult" enabled + And new "GetDeploymentGatesEvaluationResult" 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/ci-app-backend + Scenario: Get a deployment gate evaluation result returns "Deployment gate not found." response + Given operation "GetDeploymentGatesEvaluationResult" enabled + And new "GetDeploymentGatesEvaluationResult" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Deployment gate not found. + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get a deployment gate evaluation result returns "OK" response + Given operation "GetDeploymentGatesEvaluationResult" enabled + And new "GetDeploymentGatesEvaluationResult" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ci-app-backend + Scenario: Get a deployment gates evaluation result returns "Deployment gate not found." response + Given operation "GetDeploymentGatesEvaluationResult" enabled + And new "GetDeploymentGatesEvaluationResult" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Deployment gate not found. + + @team:DataDog/ci-app-backend + Scenario: Get a deployment gates evaluation result returns "OK" response + Given operation "GetDeploymentGatesEvaluationResult" enabled + And there is a valid "deployment_gate" in the system + And there is a valid "deployment_rule" in the system + And there is a valid "deployment_gates_evaluation" in the system + And new "GetDeploymentGatesEvaluationResult" request + And request contains "id" parameter from "deployment_gates_evaluation.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "deployment_gates_evaluation_result_response" + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get all deployment gates returns "Bad request." response + Given operation "ListDeploymentGates" enabled + And new "ListDeploymentGates" request + When the request is sent + Then the response status is 400 Bad request. + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get all deployment gates returns "OK" response + Given operation "ListDeploymentGates" enabled + And new "ListDeploymentGates" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ci-app-backend + Scenario: Get deployment gate returns "Bad Request" response + Given operation "GetDeploymentGate" enabled + And new "GetDeploymentGate" request + And request contains "id" parameter with value "invalid-gate-id" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get deployment gate returns "Bad request." response + Given operation "GetDeploymentGate" enabled + And new "GetDeploymentGate" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Get deployment gate returns "Deployment gate not found." response + Given operation "GetDeploymentGate" enabled + And new "GetDeploymentGate" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Deployment gate not found. + + @team:DataDog/ci-app-backend + Scenario: Get deployment gate returns "OK" response + Given there is a valid "deployment_gate" in the system + And operation "GetDeploymentGate" enabled + And new "GetDeploymentGate" request + And request contains "id" parameter from "deployment_gate.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ci-app-backend + Scenario: Get deployment rule returns "Bad Request" response + Given there is a valid "deployment_gate" in the system + And there is a valid "deployment_rule" in the system + And operation "GetDeploymentRule" enabled + And new "GetDeploymentRule" request + And request contains "gate_id" parameter with value "invalid-gate-id" + And request contains "id" parameter with value "invalid-rule-id" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get deployment rule returns "Bad request." response + Given operation "GetDeploymentRule" enabled + And new "GetDeploymentRule" request + And request contains "gate_id" parameter from "REPLACE.ME" + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Get deployment rule returns "Deployment rule not found." response + Given operation "GetDeploymentRule" enabled + And new "GetDeploymentRule" request + And request contains "gate_id" parameter with value "00000000-0000-0000-0000-000000000000" + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Deployment rule not found. + + @team:DataDog/ci-app-backend + Scenario: Get deployment rule returns "OK" response + Given there is a valid "deployment_gate" in the system + And there is a valid "deployment_rule" in the system + And operation "GetDeploymentRule" enabled + And new "GetDeploymentRule" request + And request contains "gate_id" parameter from "deployment_gate.data.id" + And request contains "id" parameter from "deployment_rule.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ci-app-backend + Scenario: Get rules for a deployment gate returns "Bad request." response + Given operation "GetDeploymentGateRules" enabled + And new "GetDeploymentGateRules" request + And request contains "gate_id" parameter with value "not-a-valid-id" + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Get rules for a deployment gate returns "OK" response + Given there is a valid "deployment_gate" in the system + And operation "GetDeploymentGateRules" enabled + And new "GetDeploymentGateRules" request + And request contains "gate_id" parameter from "deployment_gate.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Trigger a deployment gate evaluation returns "Accepted" response + Given operation "TriggerDeploymentGatesEvaluation" enabled + And new "TriggerDeploymentGatesEvaluation" request + And body with value {"data": {"attributes": {"configuration": {"dry_run": false, "rules": [{"dry_run": false, "name": "error rate monitors", "options": {"duration": 300, "query": "service:transaction-backend env:production"}, "type": "monitor"}]}, "env": "staging", "identifier": "pre-deploy", "primary_tag": "region:us-east-1", "service": "transaction-backend", "version": "v1.2.3"}, "type": "deployment_gates_evaluation_request"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Trigger a deployment gate evaluation returns "Bad request." response + Given operation "TriggerDeploymentGatesEvaluation" enabled + And new "TriggerDeploymentGatesEvaluation" request + And body with value {"data": {"attributes": {"configuration": {"dry_run": false, "rules": [{"dry_run": false, "name": "error rate monitors", "options": {"duration": 300, "query": "service:transaction-backend env:production"}, "type": "monitor"}]}, "env": "staging", "identifier": "pre-deploy", "primary_tag": "region:us-east-1", "service": "transaction-backend", "version": "v1.2.3"}, "type": "deployment_gates_evaluation_request"}} + When the request is sent + Then the response status is 400 Bad request. + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Trigger a deployment gate evaluation returns "Deployment gate not found." response + Given operation "TriggerDeploymentGatesEvaluation" enabled + And new "TriggerDeploymentGatesEvaluation" request + And body with value {"data": {"attributes": {"configuration": {"dry_run": false, "rules": [{"dry_run": false, "name": "error rate monitors", "options": {"duration": 300, "query": "service:transaction-backend env:production"}, "type": "monitor"}]}, "env": "staging", "identifier": "pre-deploy", "primary_tag": "region:us-east-1", "service": "transaction-backend", "version": "v1.2.3"}, "type": "deployment_gates_evaluation_request"}} + When the request is sent + Then the response status is 404 Deployment gate not found. + + @team:DataDog/ci-app-backend + Scenario: Trigger a deployment gates evaluation returns "Accepted" response + Given operation "TriggerDeploymentGatesEvaluation" enabled + And there is a valid "deployment_gate" in the system + And there is a valid "deployment_rule" in the system + And new "TriggerDeploymentGatesEvaluation" request + And body with value {"data": {"attributes": {"env": "production", "identifier": "{{ deployment_gate.data.attributes.identifier }}", "service": "my-service"}, "type": "deployment_gates_evaluation_request"}} + When the request is sent + Then the response status is 202 Accepted + And the response "data.type" is equal to "deployment_gates_evaluation_response" + + @team:DataDog/ci-app-backend + Scenario: Trigger a deployment gates evaluation returns "Bad request." response + Given operation "TriggerDeploymentGatesEvaluation" enabled + And new "TriggerDeploymentGatesEvaluation" request + And body with value {"data": {"attributes": {"env": "", "service": "my-service"}, "type": "deployment_gates_evaluation_request"}} + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Trigger a deployment gates evaluation returns "Deployment gate not found." response + Given operation "TriggerDeploymentGatesEvaluation" enabled + And new "TriggerDeploymentGatesEvaluation" request + And body with value {"data": {"attributes": {"env": "staging", "service": "non-existent-service-xyz"}, "type": "deployment_gates_evaluation_request"}} + When the request is sent + Then the response status is 404 Deployment gate not found. + + @team:DataDog/ci-app-backend + Scenario: Update deployment gate returns "Bad Request" response + Given operation "UpdateDeploymentGate" enabled + And new "UpdateDeploymentGate" request + And request contains "id" parameter with value "invalid-gate-id" + And body with value {"data": {"attributes": {"dry_run":true}, "id": "invalid-gate-id", "type": "deployment_gate"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Update deployment gate returns "Bad request." response + Given operation "UpdateDeploymentGate" enabled + And new "UpdateDeploymentGate" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dry_run": false}, "id": "12345678-1234-1234-1234-123456789012", "type": "deployment_gate"}} + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Update deployment gate returns "Deployment gate not found." response + Given operation "UpdateDeploymentGate" enabled + And new "UpdateDeploymentGate" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"attributes": {"dry_run": false}, "id": "12345678-1234-1234-1234-123456789012", "type": "deployment_gate"}} + When the request is sent + Then the response status is 404 Deployment gate not found. + + @team:DataDog/ci-app-backend + Scenario: Update deployment gate returns "OK" response + Given there is a valid "deployment_gate" in the system + And operation "UpdateDeploymentGate" enabled + And new "UpdateDeploymentGate" request + And request contains "id" parameter from "deployment_gate.data.id" + And body with value {"data": {"attributes": {"dry_run": false}, "id": "12345678-1234-1234-1234-123456789012", "type": "deployment_gate"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ci-app-backend + Scenario: Update deployment rule returns "Bad Request" response + Given there is a valid "deployment_gate" in the system + And there is a valid "deployment_rule" in the system + And operation "UpdateDeploymentRule" enabled + And new "UpdateDeploymentRule" request + And request contains "gate_id" parameter with value "invalid-gate-id" + And request contains "id" parameter with value "invalid-rule-id" + And body with value {"data": {"attributes": {"dry_run": false, "name": "Updated deployment rule", "options": {"excluded_resources": []}}, "type": "deployment_rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Update deployment rule returns "Bad request." response + Given operation "UpdateDeploymentRule" enabled + And new "UpdateDeploymentRule" request + And request contains "gate_id" parameter from "REPLACE.ME" + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dry_run": false, "name": "Updated deployment rule", "options": {"allowed_resources": ["resource1", "resource2"], "duration": 3600, "excluded_resources": ["resource1", "resource2"]}}, "type": "deployment_rule"}} + When the request is sent + Then the response status is 400 Bad request. + + @team:DataDog/ci-app-backend + Scenario: Update deployment rule returns "Deployment rule not found." response + Given operation "UpdateDeploymentRule" enabled + And new "UpdateDeploymentRule" request + And request contains "gate_id" parameter with value "00000000-0000-0000-0000-000000000000" + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"attributes": {"dry_run": false, "name": "Updated deployment rule", "options": {"duration": 3600, "excluded_resources": ["resource1", "resource2"]}}, "type": "deployment_rule"}} + When the request is sent + Then the response status is 404 Deployment rule not found. + + @team:DataDog/ci-app-backend + Scenario: Update deployment rule returns "OK" response + Given there is a valid "deployment_gate" in the system + And there is a valid "deployment_rule" in the system + And operation "UpdateDeploymentRule" enabled + And new "UpdateDeploymentRule" request + And request contains "gate_id" parameter from "deployment_gate.data.id" + And request contains "id" parameter from "deployment_rule.data.id" + And body with value {"data": {"attributes": {"dry_run": false, "name": "Updated deployment rule", "options": {"excluded_resources": []}}, "type": "deployment_rule"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/domain_allowlist.feature b/test-runner-data/features/v2/domain_allowlist.feature new file mode 100644 index 0000000000..8fe10371d5 --- /dev/null +++ b/test-runner-data/features/v2/domain_allowlist.feature @@ -0,0 +1,32 @@ +@endpoint(domain-allowlist) @endpoint(domain-allowlist-v2) +Feature: Domain Allowlist + Configure your Datadog Email Domain Allowlist directly through the Datadog + API. The Email Domain Allowlist controls the domains that certain datadog + emails can be sent to. For more information, see the [Domain Allowlist + docs page](https://docs.datadoghq.com/account_management/org_settings/doma + in_allowlist) + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "DomainAllowlist" API + + @team:Datadog/team-aaa-dogmail + Scenario: Get Domain Allowlist returns "OK" response + Given new "GetDomainAllowlist" request + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "domain_allowlist" + And the response "data.attributes.domains" array contains value "@static-test-domain.test" + And the response "data.attributes.enabled" is equal to false + + @team:Datadog/team-aaa-dogmail + Scenario: Sets Domain Allowlist returns "OK" response + Given new "PatchDomainAllowlist" request + And body with value {"data": {"attributes": {"domains": ["@static-test-domain.test"], "enabled": false}, "type": "domain_allowlist"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "domain_allowlist" + And the response "data.attributes.domains" has length 1 + And the response "data.attributes.domains" array contains value "@static-test-domain.test" + And the response "data.attributes.enabled" is equal to false diff --git a/test-runner-data/features/v2/dora_metrics.feature b/test-runner-data/features/v2/dora_metrics.feature new file mode 100644 index 0000000000..a8249df9a7 --- /dev/null +++ b/test-runner-data/features/v2/dora_metrics.feature @@ -0,0 +1,271 @@ +@endpoint(dora-metrics) @endpoint(dora-metrics-v2) +Feature: DORA Metrics + Search, send, or delete events for DORA Metrics to measure and improve + your software delivery performance. See the [DORA Metrics + page](https://docs.datadoghq.com/dora_metrics/) for more information. + **Note**: DORA Metrics are not available in the US1-FED site. + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "DORAMetrics" API + + @skip @team:DataDog/ci-app-backend + Scenario: Delete a deployment event returns "Accepted" response + Given new "DeleteDORADeployment" request + And a valid "appKeyAuth" key in the system + And request contains "deployment_id" parameter with value "NO_VALUE" + When the request is sent + Then the response status is 202 Accepted + + @skip @team:DataDog/ci-app-backend + Scenario: Delete a deployment event returns "Bad Request" response + Given new "DeleteDORADeployment" request + And request contains "deployment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/ci-app-backend + Scenario: Delete a failure event returns "Accepted" response + Given new "DeleteDORAFailure" request + And a valid "appKeyAuth" key in the system + And request contains "failure_id" parameter with value "NO_VALUE" + When the request is sent + Then the response status is 202 Accepted + + @skip @team:DataDog/ci-app-backend + Scenario: Delete a failure event returns "Bad Request" response + Given new "DeleteDORAFailure" request + And a valid "appKeyAuth" key in the system + And request contains "failure_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Delete an incident event returns "Accepted" response + Given a valid "appKeyAuth" key in the system + And new "DeleteDORAFailure" request + And request contains "failure_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Delete an incident event returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "DeleteDORAFailure" request + And request contains "failure_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get a deployment event returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "GetDORADeployment" request + And request contains "deployment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get a deployment event returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "GetDORADeployment" request + And request contains "deployment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ci-app-backend + Scenario: Get a list of deployment events returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListDORADeployments" request + And body with value {"data": {"attributes": {"limit": 10}}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/ci-app-backend + Scenario: Get a list of deployment events returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListDORADeployments" request + And body with value {"data": {"attributes": {"from": "2025-03-23T00:00:00Z", "limit": 1, "to": "2025-03-24T00:00:00Z"}, "type": "dora_deployments_list_request"}} + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/ci-app-backend + Scenario: Get a list of deployment events returns deployments with date-time timestamps + Given a valid "appKeyAuth" key in the system + And new "ListDORADeployments" request + And body with value {"data": {"attributes": {"from": "2023-08-31T00:00:00Z", "to": "2023-09-01T00:00:00Z"}, "type": "dora_deployments_list_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 "dora_deployment" + And the response "data[0].attributes" has field "started_at" + And the response "data[0].attributes" has field "finished_at" + + @team:DataDog/ci-app-backend + Scenario: Get a list of failure events returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListDORAFailures" request + And body with value {"data": {"attributes": {"limit": 10}}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/ci-app-backend + Scenario: Get a list of failure events returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListDORAFailures" request + And body with value {"data": {"attributes": {"from": "2025-03-23T00:00:00Z", "limit": 1, "to": "2025-03-24T00:00:00Z"}, "type": "dora_failures_list_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get a list of incident events returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListDORAFailures" request + And body with value {"data": {"attributes": {"from": "2025-01-01T00:00:00Z", "limit": 100, "query": "severity:(SEV-1 OR SEV-2) env:production team:backend", "sort": "-started_at", "to": "2025-01-31T23:59:59Z"}, "type": "dora_failures_list_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get a list of incident events returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListDORAFailures" request + And body with value {"data": {"attributes": {"from": "2025-01-01T00:00:00Z", "limit": 100, "query": "severity:(SEV-1 OR SEV-2) env:production team:backend", "sort": "-started_at", "to": "2025-01-31T23:59:59Z"}, "type": "dora_failures_list_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get an incident event returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "GetDORAFailure" request + And request contains "failure_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Get an incident event returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "GetDORAFailure" request + And request contains "failure_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Patch a deployment event by version returns "Accepted" response + Given a valid "appKeyAuth" key in the system + And operation "PatchDORADeploymentByVersion" enabled + And new "PatchDORADeploymentByVersion" request + And body with value {"data": {"attributes": {"change_failure": true, "env": "production", "remediation": {"type": "rollback", "version": "v1.2.2"}, "service": "my-service", "version": "v1.2.3"}, "type": "dora_deployment_patch_request"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Patch a deployment event by version returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "PatchDORADeploymentByVersion" enabled + And new "PatchDORADeploymentByVersion" request + And body with value {"data": {"attributes": {"change_failure": true, "env": "production", "remediation": {"type": "rollback", "version": "v1.2.2"}, "service": "my-service", "version": "v1.2.3"}, "type": "dora_deployment_patch_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/ci-app-backend + Scenario: Patch a deployment event by version with a missing version returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "PatchDORADeploymentByVersion" enabled + And new "PatchDORADeploymentByVersion" request + And body with value {"data": {"attributes": {"change_failure": true, "env": "production", "service": "my-service"}, "type": "dora_deployment_patch_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Patch a deployment event returns "Accepted" response + Given a valid "appKeyAuth" key in the system + And new "PatchDORADeployment" request + And request contains "deployment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"change_failure": true, "remediation": {"id": "eG42zNIkVjM", "type": "rollback"}}, "id": "z_RwVLi7v4Y", "type": "dora_deployment_patch_request"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Patch a deployment event returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "PatchDORADeployment" request + And request contains "deployment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"change_failure": true, "remediation": {"id": "eG42zNIkVjM", "type": "rollback"}}, "id": "z_RwVLi7v4Y", "type": "dora_deployment_patch_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/ci-app-backend + Scenario: Send a deployment event returns "Bad Request" response + Given new "CreateDORADeployment" request + And body with value {"data": {"attributes": {}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send a deployment event returns "OK - but delayed due to incident" response + Given new "CreateDORADeployment" request + And body with value {"data": {"attributes": {"custom_tags": ["language:java", "department:engineering"], "env": "staging", "finished_at": 1693491984000000000, "git": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_url": "https://github.com/organization/example-repository"}, "service": "shopist", "started_at": 1693491974000000000, "team": "backend", "version": "v1.12.07"}}} + When the request is sent + Then the response status is 202 OK - but delayed due to incident + + @replay-only @team:DataDog/ci-app-backend + Scenario: Send a deployment event returns "OK" response + Given new "CreateDORADeployment" request + And body with value {"data": {"attributes": {"finished_at": 1693491984000000000, "git": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_url": "https://github.com/organization/example-repository"}, "service": "shopist", "started_at": 1693491974000000000, "version": "v1.12.07"}}} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/ci-app-backend + Scenario: Send a failure event returns "Bad Request" response + Given new "CreateDORAIncident" request + And body with value {"data": {"attributes": {}}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ci-app-backend + Scenario: Send a failure event returns "OK" response + Given new "CreateDORAIncident" request + And body with value {"data": {"attributes": {"finished_at": 1707842944600000000, "git": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_url": "https://github.com/organization/example-repository"}, "name": "Webserver is down failing all requests", "services": ["shopist"], "severity": "High", "started_at": 1707842944500000000, "team": "backend", "version": "v1.12.07"}}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send an incident event (legacy) returns "Bad Request" response + Given new "CreateDORAIncident" request + And body with value {"data": {"attributes": {"custom_tags": ["language:java", "department:engineering"], "env": "staging", "finished_at": 1693491984000000000, "git": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_url": "https://github.com/organization/example-repository"}, "name": "Webserver is down failing all requests.", "services": ["shopist"], "severity": "High", "started_at": 1693491974000000000, "team": "backend", "version": "v1.12.07"}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send an incident event (legacy) returns "OK - but delayed due to incident" response + Given new "CreateDORAIncident" request + And body with value {"data": {"attributes": {"custom_tags": ["language:java", "department:engineering"], "env": "staging", "finished_at": 1693491984000000000, "git": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_url": "https://github.com/organization/example-repository"}, "name": "Webserver is down failing all requests.", "services": ["shopist"], "severity": "High", "started_at": 1693491974000000000, "team": "backend", "version": "v1.12.07"}}} + When the request is sent + Then the response status is 202 OK - but delayed due to incident + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send an incident event (legacy) returns "OK" response + Given new "CreateDORAIncident" request + And body with value {"data": {"attributes": {"custom_tags": ["language:java", "department:engineering"], "env": "staging", "finished_at": 1693491984000000000, "git": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_url": "https://github.com/organization/example-repository"}, "name": "Webserver is down failing all requests.", "services": ["shopist"], "severity": "High", "started_at": 1693491974000000000, "team": "backend", "version": "v1.12.07"}}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send an incident event returns "Bad Request" response + Given new "CreateDORAFailure" request + And body with value {"data": {"attributes": {"custom_tags": ["language:java", "department:engineering"], "env": "staging", "finished_at": 1693491984000000000, "git": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_url": "https://github.com/organization/example-repository"}, "name": "Webserver is down failing all requests.", "services": ["shopist"], "severity": "High", "started_at": 1693491974000000000, "team": "backend", "version": "v1.12.07"}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send an incident event returns "OK - but delayed due to incident" response + Given new "CreateDORAFailure" request + And body with value {"data": {"attributes": {"custom_tags": ["language:java", "department:engineering"], "env": "staging", "finished_at": 1693491984000000000, "git": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_url": "https://github.com/organization/example-repository"}, "name": "Webserver is down failing all requests.", "services": ["shopist"], "severity": "High", "started_at": 1693491974000000000, "team": "backend", "version": "v1.12.07"}}} + When the request is sent + Then the response status is 202 OK - but delayed due to incident + + @generated @skip @team:DataDog/ci-app-backend + Scenario: Send an incident event returns "OK" response + Given new "CreateDORAFailure" request + And body with value {"data": {"attributes": {"custom_tags": ["language:java", "department:engineering"], "env": "staging", "finished_at": 1693491984000000000, "git": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_url": "https://github.com/organization/example-repository"}, "name": "Webserver is down failing all requests.", "services": ["shopist"], "severity": "High", "started_at": 1693491974000000000, "team": "backend", "version": "v1.12.07"}}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/downtimes.feature b/test-runner-data/features/v2/downtimes.feature new file mode 100644 index 0000000000..5e6dc55f71 --- /dev/null +++ b/test-runner-data/features/v2/downtimes.feature @@ -0,0 +1,139 @@ +@endpoint(downtimes) @endpoint(downtimes-v2) +Feature: Downtimes + **Note**: Downtime V2 is currently in private beta. To request access, + contact [Datadog support](https://docs.datadoghq.com/help/). + [Downtiming](https://docs.datadoghq.com/monitors/notify/downtimes) gives + you greater control over monitor notifications by allowing you to globally + exclude scopes from alerting. Downtime settings, which can be scheduled + with start and end times, prevent all alerting related to specified + Datadog tags. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Downtimes" API + + @skip-validation @team:DataDog/monitor-app + Scenario: Cancel a downtime returns "Downtime not found" response + Given new "CancelDowntime" request + And request contains "downtime_id" parameter with value "00000000-0000-1234-0000-000000000000" + When the request is sent + Then the response status is 404 Downtime not found + + @team:DataDog/monitor-app + Scenario: Cancel a downtime returns "OK" response + Given there is a valid "downtime_v2" in the system + And new "CancelDowntime" request + And request contains "downtime_id" parameter from "downtime_v2.data.id" + When the request is sent + Then the response status is 204 OK + + @skip-validation @team:DataDog/monitor-app + Scenario: Get a downtime returns "Bad Request" response + Given new "GetDowntime" request + And request contains "downtime_id" parameter with value "INVALID_UUID_LENGTH" + When the request is sent + Then the response status is 400 Bad Request + + @skip-validation @team:DataDog/monitor-app + Scenario: Get a downtime returns "Not Found" response + Given new "GetDowntime" request + And request contains "downtime_id" parameter with value "00000000-0000-1234-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Get a downtime returns "OK" response + Given there is a valid "downtime_v2" in the system + And new "GetDowntime" request + And request contains "downtime_id" parameter from "downtime_v2.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.message" is equal to "test message" + + @generated @skip @team:DataDog/monitor-app + Scenario: Get active downtimes for a monitor returns "Monitor Not Found error" response + Given new "ListMonitorDowntimes" request + And request contains "monitor_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Monitor Not Found error + + @replay-only @team:DataDog/monitor-app + Scenario: Get active downtimes for a monitor returns "OK" response + Given new "ListMonitorDowntimes" request + And request contains "monitor_id" parameter with value 35534610 + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + And the response "data" has item with field "id" with value "aeefc6a8-15d8-11ee-a8ef-da7ad0900002" + + @generated @skip @team:DataDog/monitor-app @with-pagination + Scenario: Get active downtimes for a monitor returns "OK" response with pagination + Given new "ListMonitorDowntimes" request + And request contains "monitor_id" parameter from "REPLACE.ME" + When the request with pagination is sent + Then the response status is 200 OK + + @team:DataDog/monitor-app + Scenario: Get all downtimes for a monitor returns "Monitor Not Found error" response + Given new "ListMonitorDowntimes" request + And request contains "monitor_id" parameter with value 0 + When the request is sent + Then the response status is 404 Monitor Not Found error + + @replay-only @team:DataDog/monitor-app + Scenario: Get all downtimes returns "OK" response + Given new "ListDowntimes" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "id" with value "1dcb33f8-b23a-11ed-ae77-da7ad0900002" + + @replay-only @skip-validation @team:DataDog/monitor-app @with-pagination + Scenario: Get all downtimes returns "OK" response with pagination + Given new "ListDowntimes" request + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @skip-validation @team:DataDog/monitor-app + Scenario: Schedule a downtime returns "Bad Request" response + Given new "CreateDowntime" request + And body with value { "data": { "attributes": { "monitor_identifier": { "monitor_tags": ["cat:hat"] }, "scope": "BAD_SCOPE_MISSING_KEY_VALUE_FORMAT", "schedule": {"start": null } }, "type": "downtime" } } + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Schedule a downtime returns "OK" response + Given new "CreateDowntime" request + And body with value { "data": { "attributes": { "message": "dark forest", "monitor_identifier": { "monitor_tags": ["cat:hat"] }, "scope": "test:{{ unique_lower_alnum }}", "schedule": {"start": null } }, "type": "downtime" } } + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.message" is equal to "dark forest" + + @skip-java @skip-python @skip-ruby @skip-rust @skip-typescript @skip-validation @team:DataDog/monitor-app + Scenario: Update a downtime returns "Bad Request" response + Given there is a valid "downtime_v2" in the system + And new "UpdateDowntime" request + And request contains "downtime_id" parameter from "downtime_v2.data.id" + And body with value {"data": {"attributes": {"invalid_field": "sophon"}, "id": "{{ downtime_v2.data.id }}", "type": "downtime"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-validation @team:DataDog/monitor-app + Scenario: Update a downtime returns "Downtime not found" response + Given new "UpdateDowntime" request + And request contains "downtime_id" parameter with value "00000000-0000-1234-0000-000000000000" + And body with value {"data": {"attributes": {"message": "test msg"}, "id": "00000000-0000-1234-0000-000000000000", "type": "downtime"}} + When the request is sent + Then the response status is 404 Downtime not found + + @team:DataDog/monitor-app + Scenario: Update a downtime returns "OK" response + Given there is a valid "downtime_v2" in the system + And new "UpdateDowntime" request + And request contains "downtime_id" parameter from "downtime_v2.data.id" + And body with value {"data": {"attributes": {"message": "light speed"}, "id": "{{ downtime_v2.data.id }}", "type": "downtime"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.message" is equal to "light speed" diff --git a/test-runner-data/features/v2/error_tracking.feature b/test-runner-data/features/v2/error_tracking.feature new file mode 100644 index 0000000000..253c3b24b2 --- /dev/null +++ b/test-runner-data/features/v2/error_tracking.feature @@ -0,0 +1,122 @@ +@endpoint(error-tracking) @endpoint(error-tracking-v2) +Feature: Error Tracking + View and manage issues within Error Tracking. See the [Error Tracking + page](https://docs.datadoghq.com/error_tracking/) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ErrorTracking" API + + @team:DataDog/error-tracking + Scenario: Get the details of an error tracking issue returns "Bad Request" response + Given new "GetIssue" request + And request contains "issue_id" parameter with value "invalid-issue-id" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/error-tracking + Scenario: Get the details of an error tracking issue returns "Not Found" response + Given new "GetIssue" request + And there is a valid "issue" in the system + And request contains "issue_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/error-tracking + Scenario: Get the details of an error tracking issue returns "OK" response + Given new "GetIssue" request + And there is a valid "issue" in the system + And request contains "issue_id" parameter from "issue.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{ issue.id }}" + + @generated @skip @team:DataDog/error-tracking + Scenario: Remove the assignee of an issue returns "Bad Request" response + Given new "DeleteIssueAssignee" request + And request contains "issue_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/error-tracking + Scenario: Remove the assignee of an issue returns "No Content" response + Given new "DeleteIssueAssignee" request + And there is a valid "issue" in the system + And request contains "issue_id" parameter from "issue.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/error-tracking + Scenario: Remove the assignee of an issue returns "Not Found" response + Given new "DeleteIssueAssignee" request + And request contains "issue_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/error-tracking + Scenario: Search error tracking issues returns "Bad Request" response + Given new "SearchIssues" request + And body with value {"data": {"attributes": {"query": "service:orders-* AND @language:go", "from": 1671612804000, "to": 1671620004000, "track": "invalid-track"}, "type": "search_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/error-tracking + Scenario: Search error tracking issues returns "OK" response + Given new "SearchIssues" request + And body with value {"data": {"attributes": {"query": "service:orders-* AND @language:go", "from": 1671612804000, "to": 1671620004000, "track": "trace"}, "type": "search_request"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/error-tracking + Scenario: Update the assignee of an issue returns "Bad Request" response + Given new "UpdateIssueAssignee" request + And there is a valid "issue" in the system + And request contains "issue_id" parameter from "issue.id" + And body with value {"data": {"id": "invalid-id", "type": "assignee"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/error-tracking + Scenario: Update the assignee of an issue returns "Not Found" response + Given new "UpdateIssueAssignee" request + And request contains "issue_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"id": "87cb11a0-278c-440a-99fe-701223c80296", "type": "assignee"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/error-tracking + Scenario: Update the assignee of an issue returns "OK" response + Given new "UpdateIssueAssignee" request + And there is a valid "issue" in the system + And request contains "issue_id" parameter from "issue.id" + And body with value {"data": {"id": "87cb11a0-278c-440a-99fe-701223c80296", "type": "assignee"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/error-tracking + Scenario: Update the state of an issue returns "Bad Request" response + Given new "UpdateIssueState" request + And there is a valid "issue" in the system + And request contains "issue_id" parameter from "issue.id" + And body with value {"data": {"attributes": {"state": "invalid-state"}, "id": "{{ issue.id }}", "type": "error_tracking_issue"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/error-tracking + Scenario: Update the state of an issue returns "Not Found" response + Given new "UpdateIssueState" request + And request contains "issue_id" parameter with value "67d80aa3-36ff-44b9-a694-c501a7591737" + And body with value {"data": {"attributes": {"state": "resolved"}, "id": "67d80aa3-36ff-44b9-a694-c501a7591737", "type": "error_tracking_issue"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/error-tracking + Scenario: Update the state of an issue returns "OK" response + Given new "UpdateIssueState" request + And there is a valid "issue" in the system + And request contains "issue_id" parameter from "issue.id" + And body with value {"data": {"attributes": {"state": "RESOLVED"}, "id": "{{ issue.id }}", "type": "error_tracking_issue"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.state" is equal to "RESOLVED" diff --git a/test-runner-data/features/v2/events.feature b/test-runner-data/features/v2/events.feature new file mode 100644 index 0000000000..5beda13d5e --- /dev/null +++ b/test-runner-data/features/v2/events.feature @@ -0,0 +1,111 @@ +@endpoint(events) @endpoint(events-v2) +Feature: Events + The Event Management API allows you to programmatically post events to the + Events Explorer and fetch events from the Events Explorer. See the [Event + Management page](https://docs.datadoghq.com/service_management/events/) + for more information. **Update to Datadog monitor events + `aggregation_key` starting March 1, 2025:** The Datadog monitor events + `aggregation_key` is unique to each Monitor ID. Starting March 1st, this + key will also include Monitor Group, making it unique per *Monitor ID and + Monitor Group*. If you're using monitor events `aggregation_key` in + dashboard queries or the Event API, you must migrate to use `@monitor.id`. + Reach out to [support](https://www.datadoghq.com/support/) if you have any + question. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Events" API + + @generated @skip @team:DataDog/event-management + Scenario: Get a list of events returns "Bad Request" response + Given new "ListEvents" request + When the request is sent + Then the response status is 400 Bad Request + + @skip-validation @team:DataDog/event-management + Scenario: Get a list of events returns "OK" response + Given new "ListEvents" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/event-management @with-pagination + Scenario: Get a list of events returns "OK" response with pagination + Given new "ListEvents" request + And request contains "filter[from]" parameter with value "now-15m" + And request contains "filter[to]" parameter with value "now" + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @team:DataDog/event-management + Scenario: Get a quick list of events returns "OK" response + Given new "ListEvents" request + And request contains "filter[query]" parameter with value "datadog-agent" + And request contains "filter[from]" parameter with value "2020-09-17T11:48:36+01:00" + And request contains "filter[to]" parameter with value "2020-09-17T12:48:36+01:00" + And request contains "page[limit]" parameter with value 5 + When the request is sent + Then the response status is 200 OK + And the response "data" has length 0 + + @generated @skip @team:DataDog/event-management + Scenario: Get an event returns "Bad Request" response + Given new "GetEvent" request + And request contains "event_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/event-management + Scenario: Get an event returns "Not Found" response + Given new "GetEvent" request + And request contains "event_id" parameter with value "AAAAAAAAAAAAAAAAAAAAAAAA" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/event-management + Scenario: Get an event returns "OK" response + Given new "GetEvent" request + And request contains "event_id" parameter with value "AZeF-nTCAABzkAgGXzYPtgAA" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/event-management + Scenario: Post an event returns "Bad request" response + Given new "CreateEvent" request + And body with value {"data": {"attributes": {"aggregation_key": "aggregation_key_123", "attributes": {"author": {"name": "example@datadog.com", "type": "user"}, "change_metadata": {"dd": {"team": "datadog_team", "user_email": "datadog@datadog.com", "user_id": "datadog_user_id", "user_name": "datadog_username"}, "resource_link": "datadog.com/feature/fallback_payments_test"}, "changed_resource": {"name": "fallback_payments_test", "type": "feature_flag"}, "impacted_resources": [{"name": "payments_api", "type": "service"}], "new_value": {"enabled": true, "percentage": "50%", "rule": {"datacenter": "devcycle.us1.prod"}}, "prev_value": {"enabled": true, "percentage": "10%", "rule": {"datacenter": "devcycle.us1.prod"}}}, "category": "invalid", "integration_id": "custom-events", "host": "test-host", "message": "payment_processed feature flag has been enabled", "tags": ["env:api_client_test"], "title": "payment_processed feature flag updated"}, "type": "event"}} + When the request is sent + Then the response status is 400 Bad request + + @skip-validation @team:DataDog/event-management + Scenario: Post an event returns "OK" response + Given new "CreateEvent" request + And body with value {"data": {"attributes": {"aggregation_key": "aggregation_key_123", "attributes": {"author": {"name": "example@datadog.com", "type": "user"}, "change_metadata": {"dd": {"team": "datadog_team", "user_email": "datadog@datadog.com", "user_id": "datadog_user_id", "user_name": "datadog_username"}, "resource_link": "datadog.com/feature/fallback_payments_test"}, "changed_resource": {"name": "fallback_payments_test", "type": "feature_flag"}, "impacted_resources": [{"name": "payments_api", "type": "service"}], "new_value": {"enabled": true, "percentage": "50%", "rule": {"datacenter": "devcycle.us1.prod"}}, "prev_value": {"enabled": true, "percentage": "10%", "rule": {"datacenter": "devcycle.us1.prod"}}}, "category": "change", "integration_id": "custom-events", "host": "test-host", "message": "payment_processed feature flag has been enabled", "tags": ["env:api_client_test"], "title": "payment_processed feature flag updated"}, "type": "event"}} + When the request is sent + Then the response status is 202 OK + And the response "data.type" is equal to "event" + And the response "data.attributes.attributes.evt" has field "uid" + + @team:DataDog/event-management + Scenario: Search events returns "Bad Request" response + Given new "SearchEvents" request + And body with value {"filter": {"from": "now-15m", "query": "service:web* AND @http.status_code:[200 TO 299]", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/event-management + Scenario: Search events returns "OK" response + Given new "SearchEvents" request + And body with value {"filter": {"query": "datadog-agent", "from": "2020-09-17T11:48:36+01:00", "to": "2020-09-17T12:48:36+01:00"}, "sort": "timestamp", "page": {"limit": 5}} + When the request is sent + Then the response status is 200 OK + And the response "data" has length 0 + + @replay-only @skip-validation @team:DataDog/event-management @with-pagination + Scenario: Search events returns "OK" response with pagination + Given new "SearchEvents" request + And body with value {"filter": {"from": "now-15m", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"limit": 2}, "sort": "timestamp"} + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items diff --git a/test-runner-data/features/v2/fastly_integration.feature b/test-runner-data/features/v2/fastly_integration.feature new file mode 100644 index 0000000000..61dd97599e --- /dev/null +++ b/test-runner-data/features/v2/fastly_integration.feature @@ -0,0 +1,248 @@ +@endpoint(fastly-integration) @endpoint(fastly-integration-v2) +Feature: Fastly Integration + Manage your Datadog Fastly integration accounts and services directly + through the Datadog API. See the [Fastly integration + page](https://docs.datadoghq.com/integrations/fastly/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "FastlyIntegration" API + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Fastly account returns "Bad Request" response + Given new "CreateFastlyAccount" request + And body with value {"data": {"attributes": {"api_key": "ABCDEFG123", "name": "test-name", "services": [{"id": "6abc7de6893AbcDe9fghIj", "tags": ["myTag", "myTag2:myValue"]}]}, "type": "fastly-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/saas-integrations + Scenario: Add Fastly account returns "CREATED" response + Given new "CreateFastlyAccount" request + And body with value {"data": {"attributes": {"api_key": "{{ unique_alnum }}", "name": "{{ unique }}", "services": []}, "type": "fastly-accounts"}} + When the request is sent + Then the response status is 201 CREATED + And the response "data.type" is equal to "fastly-accounts" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.services" has length 0 + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Fastly account returns "Not Found" response + Given new "CreateFastlyAccount" request + And body with value {"data": {"attributes": {"api_key": "ABCDEFG123", "name": "test-name", "services": [{"id": "6abc7de6893AbcDe9fghIj", "tags": ["myTag", "myTag2:myValue"]}]}, "type": "fastly-accounts"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Fastly service returns "Bad Request" response + Given new "CreateFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"tags": ["myTag", "myTag2:myValue"]}, "id": "abc123", "type": "fastly-services"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Fastly service returns "CREATED" response + Given new "CreateFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"tags": ["myTag", "myTag2:myValue"]}, "id": "abc123", "type": "fastly-services"}} + When the request is sent + Then the response status is 201 CREATED + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Fastly service returns "Not Found" response + Given new "CreateFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"tags": ["myTag", "myTag2:myValue"]}, "id": "abc123", "type": "fastly-services"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Fastly account returns "Bad Request" response + Given new "DeleteFastlyAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Fastly account returns "Not Found" response + Given new "DeleteFastlyAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Fastly account returns "OK" response + Given new "DeleteFastlyAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Fastly service returns "Bad Request" response + Given new "DeleteFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Fastly service returns "Not Found" response + Given new "DeleteFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Fastly service returns "OK" response + Given new "DeleteFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Fastly account returns "Bad Request" response + Given new "GetFastlyAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Fastly account returns "Not Found" response + Given new "GetFastlyAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: Get Fastly account returns "OK" response + Given there is a valid "fastly_account" in the system + And new "GetFastlyAccount" request + And request contains "account_id" parameter from "fastly_account.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "fastly-accounts" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.services" has length 0 + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Fastly service returns "Bad Request" response + Given new "GetFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Fastly service returns "Not Found" response + Given new "GetFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Fastly service returns "OK" response + Given new "GetFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Fastly accounts returns "Bad Request" response + Given new "ListFastlyAccounts" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Fastly accounts returns "Not Found" response + Given new "ListFastlyAccounts" request + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: List Fastly accounts returns "OK" response + Given there is a valid "fastly_account" in the system + And new "ListFastlyAccounts" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "fastly-accounts" + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Fastly services returns "Bad Request" response + Given new "ListFastlyServices" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Fastly services returns "Not Found" response + Given new "ListFastlyServices" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Fastly services returns "OK" response + Given new "ListFastlyServices" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Fastly account returns "Bad Request" response + Given new "UpdateFastlyAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "ABCDEFG123"}, "type": "fastly-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Fastly account returns "Not Found" response + Given new "UpdateFastlyAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "ABCDEFG123"}, "type": "fastly-accounts"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: Update Fastly account returns "OK" response + Given there is a valid "fastly_account" in the system + And new "UpdateFastlyAccount" request + And request contains "account_id" parameter from "fastly_account.data.id" + And body with value {"data": {"attributes": {"api_key": "update-secret"}, "type": "fastly-accounts"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{fastly_account.data.id }}" + And the response "data.attributes.name" is equal to "{{fastly_account.data.attributes.name }}" + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Fastly service returns "Bad Request" response + Given new "UpdateFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "service_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"tags": ["myTag", "myTag2:myValue"]}, "id": "abc123", "type": "fastly-services"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Fastly service returns "Not Found" response + Given new "UpdateFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "service_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"tags": ["myTag", "myTag2:myValue"]}, "id": "abc123", "type": "fastly-services"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Fastly service returns "OK" response + Given new "UpdateFastlyService" request + And request contains "account_id" parameter from "REPLACE.ME" + And request contains "service_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"tags": ["myTag", "myTag2:myValue"]}, "id": "abc123", "type": "fastly-services"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/feature_flags.feature b/test-runner-data/features/v2/feature_flags.feature new file mode 100644 index 0000000000..f44699236d --- /dev/null +++ b/test-runner-data/features/v2/feature_flags.feature @@ -0,0 +1,590 @@ +@endpoint(feature-flags) @endpoint(feature-flags-v2) +Feature: Feature Flags + Manage feature flags and environments. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "FeatureFlags" API + + @generated @skip @team:DataDog/feature-flags + Scenario: Add a variant to a feature flag returns "Bad Request" response + Given new "CreateVariantForFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And body with value {"key": "variant-abc123", "name": "Variant ABC123", "value": "true"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Add a variant to a feature flag returns "Conflict - A variant with this key already exists on the flag." response + Given new "CreateVariantForFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And body with value {"key": "variant-abc123", "name": "Variant ABC123", "value": "true"} + When the request is sent + Then the response status is 409 Conflict - A variant with this key already exists on the flag. + + @generated @skip @team:DataDog/feature-flags + Scenario: Add a variant to a feature flag returns "Created" response + Given new "CreateVariantForFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And body with value {"key": "variant-abc123", "name": "Variant ABC123", "value": "true"} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/feature-flags + Scenario: Add a variant to a feature flag returns "Not Found" response + Given new "CreateVariantForFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And body with value {"key": "variant-abc123", "name": "Variant ABC123", "value": "true"} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/feature-flags + Scenario: Archive a feature flag returns "Bad Request" response + Given new "ArchiveFeatureFlag" request + And request contains "feature_flag_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/feature-flags + Scenario: Archive a feature flag returns "Not Found" response + Given new "ArchiveFeatureFlag" request + And request contains "feature_flag_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/feature-flags + Scenario: Archive a feature flag returns "OK" response + Given there is a valid "feature_flag" in the system + And new "ArchiveFeatureFlag" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/feature-flags + Scenario: Create a feature flag returns "Bad Request" response + Given new "CreateFeatureFlag" request + And body with value {"data": {"type": "feature-flags", "attributes": {"default_variant_key": "control", "description": "This is an example feature flag for demonstration", "json_schema": "{\"type\": \"object\", \"properties\": {\"enabled\": {\"type\": \"boolean\"}}}", "key": "example-feature-flag", "name": "Example Feature Flag", "value_type": "BOOLEAN", "variants": [{"key": "control", "name": "Control Variant", "value": "true"}]}}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/feature-flags + Scenario: Create a feature flag returns "Conflict" response + Given new "CreateFeatureFlag" request + And body with value {"data": {"type": "feature-flags", "attributes": {"default_variant_key": "control", "description": "This is an example feature flag for demonstration", "json_schema": "{\"type\": \"object\", \"properties\": {\"enabled\": {\"type\": \"boolean\"}}}", "key": "example-feature-flag", "name": "Example Feature Flag", "value_type": "BOOLEAN", "variants": [{"key": "control", "name": "Control Variant", "value": "true"}]}}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/feature-flags + Scenario: Create a feature flag returns "Created" response + Given new "CreateFeatureFlag" request + And body with value {"data": {"type": "feature-flags", "attributes": {"default_variant_key": "variant-{{ unique }}-1", "description": "Test feature flag for BDD scenarios", "key": "test-feature-flag-{{ unique }}", "name": "Test Feature Flag {{ unique }}", "value_type": "BOOLEAN", "variants": [{"key": "variant-{{ unique }}-1", "name": "Variant {{ unique }} A", "value": "true"}, {"key": "variant-{{ unique }}-2", "name": "Variant {{ unique }} B", "value": "false"}]}}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.key" is equal to "test-feature-flag-{{ unique }}" + And the response "data.attributes.name" is equal to "Test Feature Flag {{ unique }}" + And the response "data.attributes.value_type" is equal to "BOOLEAN" + + @team:DataDog/feature-flags + Scenario: Create allocation for a flag in an environment returns "Created" response + Given there is a valid "feature_flag" in the system + And there is a valid "environment" in the system + And new "CreateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + And request contains "environment_id" parameter from "environment.data.id" + And body with value {"data":{"type":"allocations","attributes":{"name":"New targeting rule {{ unique }}","key":"new-targeting-rule-{{ unique_lower }}","targeting_rules":[],"variant_weights":[{"variant_id":"{{ feature_flag.data.attributes.variants[0].id }}","value":100}],"guardrail_metrics":[],"type":"CANARY"}}} + When the request is sent + Then the response status is 201 Created + + @skip @team:DataDog/feature-flags + Scenario: Create an environment returns "Bad Request" response + Given new "CreateFeatureFlagsEnvironment" request + And body with value {"data": {"type": "environments", "attributes": {"description": "Staging environment for testing", "key": "staging", "name": "staging"}}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/feature-flags + Scenario: Create an environment returns "Conflict" response + Given new "CreateFeatureFlagsEnvironment" request + And body with value {"data": {"type": "environments", "attributes": {"description": "Staging environment for testing", "key": "staging", "name": "staging"}}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/feature-flags + Scenario: Create an environment returns "Created" response + Given new "CreateFeatureFlagsEnvironment" request + And body with value {"data": {"type": "environments", "attributes": {"name": "Test Environment {{ unique }}", "queries": ["test-{{ unique }}", "env-{{ unique }}"]}}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/feature-flags + Scenario: Create targeting rules for a flag env returns "Accepted - Approval required for this change" response + Given new "CreateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}} + When the request is sent + Then the response status is 202 Accepted - Approval required for this change + + @generated @skip @team:DataDog/feature-flags + Scenario: Create targeting rules for a flag env returns "Bad Request" response + Given new "CreateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Create targeting rules for a flag env returns "Conflict" response + Given new "CreateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/feature-flags + Scenario: Create targeting rules for a flag env returns "Created" response + Given new "CreateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/feature-flags + Scenario: Create targeting rules for a flag env returns "Not Found" response + Given new "CreateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Delete a variant returns "Bad Request" response + Given new "DeleteVariantFromFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "variant_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Delete a variant returns "Conflict - A pending suggestion already exists for this property." response + Given new "DeleteVariantFromFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "variant_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict - A pending suggestion already exists for this property. + + @generated @skip @team:DataDog/feature-flags + Scenario: Delete a variant returns "No Content" response + Given new "DeleteVariantFromFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "variant_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/feature-flags + Scenario: Delete a variant returns "Not Found" response + Given new "DeleteVariantFromFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "variant_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/feature-flags + Scenario: Delete an environment returns "No Content" response + Given there is a valid "environment" in the system + And new "DeleteFeatureFlagsEnvironment" request + And request contains "environment_id" parameter from "environment.data.id" + When the request is sent + Then the response status is 204 No Content + + @skip @team:DataDog/feature-flags + Scenario: Delete an environment returns "Not Found" response + Given new "DeleteFeatureFlagsEnvironment" request + And request contains "environment_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/feature-flags + Scenario: Disable a feature flag in an environment returns "Accepted - Approval required for this change" response + Given there is a valid "feature_flag" in the system + And there is a valid "environment" in the system + And new "DisableFeatureFlagEnvironment" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + And request contains "environment_id" parameter from "environment.data.id" + When the request is sent + Then the response status is 202 Accepted - Approval required for this change + + @skip @team:DataDog/feature-flags + Scenario: Disable a feature flag in an environment returns "Not Found" response + Given new "DisableFeatureFlagEnvironment" request + And request contains "feature_flag_id" parameter with value "00000000-0000-0000-0000-000000000000" + And request contains "environment_id" parameter with value "00000000-0000-0000-0000-000000000001" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/feature-flags + Scenario: Disable a feature flag in an environment returns "OK" response + Given there is a valid "feature_flag" in the system + And there is a valid "environment" in the system + And new "DisableFeatureFlagEnvironment" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + And request contains "environment_id" parameter from "environment.data.id" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/feature-flags + Scenario: Enable a feature flag in an environment returns "Accepted - Approval required for this change" response + Given there is a valid "feature_flag" in the system + And there is a valid "environment" in the system + And new "EnableFeatureFlagEnvironment" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + And request contains "environment_id" parameter from "environment.data.id" + When the request is sent + Then the response status is 202 Accepted - Approval required for this change + + @skip @team:DataDog/feature-flags + Scenario: Enable a feature flag in an environment returns "Not Found" response + Given new "EnableFeatureFlagEnvironment" request + And request contains "feature_flag_id" parameter with value "00000000-0000-0000-0000-000000000000" + And request contains "environment_id" parameter with value "00000000-0000-0000-0000-000000000001" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/feature-flags + Scenario: Enable a feature flag in an environment returns "OK" response + Given there is a valid "feature_flag" in the system + And there is a valid "environment" in the system + And new "EnableFeatureFlagEnvironment" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + And request contains "environment_id" parameter from "environment.data.id" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/feature-flags + Scenario: Get a feature flag returns "Not Found" response + Given new "GetFeatureFlag" request + And request contains "feature_flag_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/feature-flags + Scenario: Get a feature flag returns "OK" response + Given there is a valid "feature_flag" in the system + And new "GetFeatureFlag" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.key" has the same value as "feature_flag.data.attributes.key" + And the response "data.attributes.name" has the same value as "feature_flag.data.attributes.name" + And the response "data.attributes.value_type" has the same value as "feature_flag.data.attributes.value_type" + + @skip @team:DataDog/feature-flags + Scenario: Get an environment returns "Not Found" response + Given new "GetFeatureFlagsEnvironment" request + And request contains "environment_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/feature-flags + Scenario: Get an environment returns "OK" response + Given there is a valid "environment" in the system + And new "GetFeatureFlagsEnvironment" request + And request contains "environment_id" parameter from "environment.data.id" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/feature-flags + Scenario: List environments returns "OK" response + Given new "ListFeatureFlagsEnvironments" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/feature-flags + Scenario: List feature flags returns "OK" response + Given new "ListFeatureFlags" request + And request contains "limit" parameter with value 10 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/feature-flags + Scenario: Pause a progressive rollout returns "Bad Request" response + Given new "PauseExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Pause a progressive rollout returns "Conflict" response + Given new "PauseExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/feature-flags + Scenario: Pause a progressive rollout returns "Not Found" response + Given new "PauseExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Pause a progressive rollout returns "OK" response + Given new "PauseExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/feature-flags + Scenario: Resume a progressive rollout returns "Bad Request" response + Given new "ResumeExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Resume a progressive rollout returns "Conflict" response + Given new "ResumeExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/feature-flags + Scenario: Resume a progressive rollout returns "Not Found" response + Given new "ResumeExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Resume a progressive rollout returns "OK" response + Given new "ResumeExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/feature-flags + Scenario: Start a progressive rollout returns "Bad Request" response + Given new "StartExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Start a progressive rollout returns "Conflict" response + Given new "StartExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/feature-flags + Scenario: Start a progressive rollout returns "Not Found" response + Given new "StartExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Start a progressive rollout returns "OK" response + Given new "StartExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/feature-flags + Scenario: Stop a progressive rollout returns "Bad Request" response + Given new "StopExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Stop a progressive rollout returns "Conflict" response + Given new "StopExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/feature-flags + Scenario: Stop a progressive rollout returns "Not Found" response + Given new "StopExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Stop a progressive rollout returns "OK" response + Given new "StopExposureSchedule" request + And request contains "exposure_schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/feature-flags + Scenario: Unarchive a feature flag returns "Bad Request" response + Given new "UnarchiveFeatureFlag" request + And request contains "feature_flag_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/feature-flags + Scenario: Unarchive a feature flag returns "Not Found" response + Given new "UnarchiveFeatureFlag" request + And request contains "feature_flag_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/feature-flags + Scenario: Unarchive a feature flag returns "OK" response + Given there is a valid "feature_flag" in the system + And new "UnarchiveFeatureFlag" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/feature-flags + Scenario: Update a feature flag returns "Bad Request" response + Given new "UpdateFeatureFlag" request + And request contains "feature_flag_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"type": "feature-flags", "attributes": {"description": "Updated description for the feature flag", "json_schema": "{\"type\": \"object\", \"properties\": {\"enabled\": {\"type\": \"boolean\"}}}", "name": "Updated Feature Flag Name"}}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/feature-flags + Scenario: Update a feature flag returns "Not Found" response + Given new "UpdateFeatureFlag" request + And request contains "feature_flag_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"type": "feature-flags", "attributes": {"description": "Updated description for the feature flag", "json_schema": "{\"type\": \"object\", \"properties\": {\"enabled\": {\"type\": \"boolean\"}}}", "name": "Updated Feature Flag Name"}}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/feature-flags + Scenario: Update a feature flag returns "OK" response + Given there is a valid "feature_flag" in the system + And new "UpdateFeatureFlag" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + And body with value {"data": {"type": "feature-flags", "attributes": {"description": "Updated description for the feature flag", "name": "Updated Test Feature Flag {{ unique }}"}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "Updated Test Feature Flag {{ unique }}" + And the response "data.attributes.description" is equal to "Updated description for the feature flag" + + @generated @skip @team:DataDog/feature-flags + Scenario: Update a variant returns "Bad Request" response + Given new "UpdateVariantForFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "variant_id" parameter from "REPLACE.ME" + And body with value {"name": "Variant ABC123 Updated", "value": "new_value"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Update a variant returns "Conflict - A pending suggestion already exists for this property." response + Given new "UpdateVariantForFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "variant_id" parameter from "REPLACE.ME" + And body with value {"name": "Variant ABC123 Updated", "value": "new_value"} + When the request is sent + Then the response status is 409 Conflict - A pending suggestion already exists for this property. + + @generated @skip @team:DataDog/feature-flags + Scenario: Update a variant returns "Not Found" response + Given new "UpdateVariantForFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "variant_id" parameter from "REPLACE.ME" + And body with value {"name": "Variant ABC123 Updated", "value": "new_value"} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Update a variant returns "OK" response + Given new "UpdateVariantForFeatureFlag" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "variant_id" parameter from "REPLACE.ME" + And body with value {"name": "Variant ABC123 Updated", "value": "new_value"} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/feature-flags + Scenario: Update an environment returns "Bad Request" response + Given new "UpdateFeatureFlagsEnvironment" request + And request contains "environment_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"type": "environments", "attributes": {"description": "Updated staging environment description", "name": "Updated Staging"}}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/feature-flags + Scenario: Update an environment returns "Not Found" response + Given new "UpdateFeatureFlagsEnvironment" request + And request contains "environment_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"type": "environments", "attributes": {"description": "Updated staging environment description", "name": "Updated Staging"}}} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/feature-flags + Scenario: Update an environment returns "OK" response + Given there is a valid "environment" in the system + And new "UpdateFeatureFlagsEnvironment" request + And request contains "environment_id" parameter from "environment.data.id" + And body with value {"data": {"type": "environments", "attributes": {"name": "Updated Test Environment {{ unique }}", "queries": ["updated-{{ unique }}", "live-{{ unique }}"]}}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/feature-flags + Scenario: Update targeting rules for a flag in an environment returns "OK" response + Given there is a valid "feature_flag" in the system + And there is a valid "environment" in the system + And new "UpdateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "feature_flag.data.id" + And request contains "environment_id" parameter from "environment.data.id" + And body with value {"data":[{"type":"allocations","attributes":{"key":"overwrite-allocation-{{ unique_lower }}","name":"New targeting rule {{ unique }}","targeting_rules":[],"variant_weights":[{"variant_id":"{{ feature_flag.data.attributes.variants[0].id }}","value":100}],"exposure_schedule":{"rollout_options":{"strategy":"UNIFORM_INTERVALS","autostart":false,"selection_interval_ms":86400000},"rollout_steps":[{"exposure_ratio":0.05,"interval_ms":null,"is_pause_record":false,"grouped_step_index":0},{"exposure_ratio":0.25,"interval_ms":null,"is_pause_record":false,"grouped_step_index":1},{"exposure_ratio":1,"interval_ms":null,"is_pause_record":false,"grouped_step_index":2}]},"guardrail_metrics":[],"type":"CANARY"}}]} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/feature-flags + Scenario: Update targeting rules for a flag returns "Accepted - Approval required for this change" response + Given new "UpdateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}]} + When the request is sent + Then the response status is 202 Accepted - Approval required for this change + + @generated @skip @team:DataDog/feature-flags + Scenario: Update targeting rules for a flag returns "Bad Request" response + Given new "UpdateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/feature-flags + Scenario: Update targeting rules for a flag returns "Conflict" response + Given new "UpdateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}]} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/feature-flags + Scenario: Update targeting rules for a flag returns "Not Found" response + Given new "UpdateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}]} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/feature-flags + Scenario: Update targeting rules for a flag returns "OK" response + Given new "UpdateAllocationsForFeatureFlagInEnvironment" request + And request contains "feature_flag_id" parameter from "REPLACE.ME" + And request contains "environment_id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"experiment_id": "550e8400-e29b-41d4-a716-446655440030", "exposure_schedule": {"absolute_start_time": "2025-06-13T12:00:00Z", "control_variant_id": "550e8400-e29b-41d4-a716-446655440012", "control_variant_key": "control", "id": "550e8400-e29b-41d4-a716-446655440010", "rollout_options": {"autostart": false, "selection_interval_ms": 3600000, "strategy": "UNIFORM_INTERVALS"}, "rollout_steps": [{"exposure_ratio": 0.5, "grouped_step_index": 1, "id": "550e8400-e29b-41d4-a716-446655440040", "interval_ms": 3600000, "is_pause_record": false}]}, "guardrail_metrics": [{"metric_id": "metric-error-rate", "trigger_action": "PAUSE"}], "id": "550e8400-e29b-41d4-a716-446655440020", "key": "prod-rollout", "name": "Production Rollout", "targeting_rules": [{"conditions": [{"attribute": "user_tier", "operator": "ONE_OF", "saved_filter_id": "550e8400-e29b-41d4-a716-446655440090", "value": ["premium", "enterprise"]}]}], "type": "FEATURE_GATE", "variant_weights": [{"value": 50, "variant_id": "550e8400-e29b-41d4-a716-446655440001", "variant_key": "control"}]}, "type": "allocations"}]} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/forms.feature b/test-runner-data/features/v2/forms.feature new file mode 100644 index 0000000000..eb380d0f84 --- /dev/null +++ b/test-runner-data/features/v2/forms.feature @@ -0,0 +1,246 @@ +@endpoint(forms) @endpoint(forms-v2) +Feature: Forms + The Datadog Forms API lets you create and manage forms within the App + Builder platform. You can configure form settings, manage versions, and + publish forms. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Forms" API + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Clone a form returns "Bad Request" response + Given operation "CloneForm" enabled + And new "CloneForm" request + And request contains "form_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Copy of My Form"}, "type": "forms"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Clone a form returns "Not Found" response + Given operation "CloneForm" enabled + And new "CloneForm" request + And request contains "form_id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"attributes": {"name": "Copy of My Form"}, "type": "forms"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Clone a form returns "OK" response + Given operation "CloneForm" enabled + And new "CloneForm" request + And request contains "form_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Copy of My Form"}, "type": "forms"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Create a form returns "Bad Request" response + Given operation "CreateForm" enabled + And new "CreateForm" request + And body with value {"data": {"attributes": {"anonymous": false, "data_definition": {"description": "Welcome to the Engineering Experience Survey.", "required": [], "title": "Developer Experience Survey", "type": "object"}, "description": "A form to collect user feedback.", "idp_survey": false, "name": "User Feedback Form", "single_response": false, "ui_definition": {"ui:order": [], "ui:theme": {"primaryColor": "gray"}}}, "type": "forms"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Create a form returns "OK" response + Given operation "CreateForm" enabled + And new "CreateForm" request + And body with value {"data": {"attributes": {"anonymous": false, "data_definition": {}, "description": "A form to collect user feedback.", "idp_survey": false, "name": "User Feedback Form", "single_response": false, "ui_definition": {}}, "type": "forms"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Create and publish a form returns "Bad Request" response + Given operation "CreateAndPublishForm" enabled + And new "CreateAndPublishForm" request + And body with value {"data": {"attributes": {"anonymous": false, "data_definition": {"description": "Welcome to the Engineering Experience Survey.", "required": [], "title": "Developer Experience Survey", "type": "object"}, "description": "A form to collect user feedback.", "idp_survey": false, "name": "User Feedback Form", "single_response": false, "ui_definition": {"ui:order": [], "ui:theme": {"primaryColor": "gray"}}}, "type": "forms"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Create and publish a form returns "OK" response + Given operation "CreateAndPublishForm" enabled + And new "CreateAndPublishForm" request + And body with value {"data": {"attributes": {"anonymous": false, "data_definition": {}, "description": "A form to collect user feedback.", "idp_survey": false, "name": "User Feedback Form", "single_response": false, "ui_definition": {}}, "type": "forms"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Create or update a form version returns "Bad Request" response + Given operation "UpsertFormVersion" enabled + And new "UpsertFormVersion" request + And request contains "form_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"data_definition": {"description": "Welcome to the Engineering Experience Survey.", "required": [], "title": "Developer Experience Survey", "type": "object"}, "state": "frozen", "ui_definition": {"ui:order": [], "ui:theme": {"primaryColor": "gray"}}, "upsert_params": {"etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d", "insert_only": false, "match_policy": "none"}}, "type": "form_versions"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Create or update a form version returns "Not Found" response + Given operation "UpsertFormVersion" enabled + And new "UpsertFormVersion" request + And request contains "form_id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"attributes": {"data_definition": {"description": "Welcome to the Engineering Experience Survey.", "required": [], "title": "Developer Experience Survey", "type": "object"}, "state": "frozen", "ui_definition": {"ui:order": [], "ui:theme": {"primaryColor": "gray"}}, "upsert_params": {"etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d", "insert_only": false, "match_policy": "none"}}, "type": "form_versions"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/app-builder-backend + Scenario: Create or update a form version returns "OK" response + Given operation "UpsertFormVersion" enabled + And there is a valid "form" in the system + And new "UpsertFormVersion" request + And request contains "form_id" parameter from "form.data.id" + And body with value {"data": {"attributes": {"data_definition": {"description": "Welcome to the Engineering Experience Survey.", "required": [], "title": "Developer Experience Survey", "type": "object"}, "state": "frozen", "ui_definition": {"ui:order": [], "ui:theme": {"primaryColor": "gray"}}, "upsert_params": {"etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d", "insert_only": false, "match_policy": "none"}}, "type": "form_versions"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Delete a form returns "Bad Request" response + Given operation "DeleteForm" enabled + And new "DeleteForm" request + And request contains "form_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Delete a form returns "OK" response + Given operation "DeleteForm" enabled + And there is a valid "form" in the system + And new "DeleteForm" request + And request contains "form_id" parameter from "form.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "form.data.id" + And the response "data.type" is equal to "forms" + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Get a form returns "Bad Request" response + Given operation "GetForm" enabled + And new "GetForm" request + And request contains "form_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Get a form returns "Not Found" response + Given operation "GetForm" enabled + And new "GetForm" request + And request contains "form_id" parameter with value "00000000-0000-0000-0000-000000000001" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/app-builder-backend + Scenario: Get a form returns "OK" response + Given operation "GetForm" enabled + And there is a valid "form" in the system + And new "GetForm" request + And request contains "form_id" parameter from "form.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "form.data.id" + And the response "data.type" is equal to "forms" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @generated @skip @team:DataDog/app-builder-backend + Scenario: List forms returns "Bad Request" response + Given operation "ListForms" enabled + And new "ListForms" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: List forms returns "OK" response + Given operation "ListForms" enabled + And there is a valid "form" in the system + And new "ListForms" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "id" with value "{{ form.data.id }}" + And the response "data" has item with field "type" with value "forms" + And the response "data" has item with field "attributes.name" with value "{{ unique }}" + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Publish a form version returns "Bad Request" response + Given operation "PublishForm" enabled + And new "PublishForm" request + And request contains "form_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"version": 1}, "type": "form_publications"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Publish a form version returns "Not Found" response + Given operation "PublishForm" enabled + And new "PublishForm" request + And request contains "form_id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"attributes": {"version": 1}, "type": "form_publications"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/app-builder-backend + Scenario: Publish a form version returns "OK" response + Given operation "PublishForm" enabled + And there is a valid "form" in the system + And new "PublishForm" request + And request contains "form_id" parameter from "form.data.id" + And body with value {"data": {"attributes": {"version": 1}, "type": "form_publications"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Update a form returns "Bad Request" response + Given operation "UpdateForm" enabled + And new "UpdateForm" request + And request contains "form_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"form_update": {"datastore_config": {"datastore_id": "5108ea24-dd83-4696-9caa-f069f73d0fad", "primary_column_name": "id", "primary_key_generation_strategy": "none"}, "description": "An updated description.", "name": "Updated Form Name"}}, "id": "22f6006a-2302-4926-9396-d2dfcf7b0b34", "type": "forms"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Update a form returns "Not Found" response + Given operation "UpdateForm" enabled + And new "UpdateForm" request + And request contains "form_id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"attributes": {"form_update": {"datastore_config": {"datastore_id": "5108ea24-dd83-4696-9caa-f069f73d0fad", "primary_column_name": "id", "primary_key_generation_strategy": "none"}, "description": "An updated description.", "name": "Updated Form Name"}}, "id": "22f6006a-2302-4926-9396-d2dfcf7b0b34", "type": "forms"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/app-builder-backend + Scenario: Update a form returns "OK" response + Given operation "UpdateForm" enabled + And there is a valid "form" in the system + And new "UpdateForm" request + And request contains "form_id" parameter from "form.data.id" + And body with value {"data": {"attributes": {"form_update": {"datastore_config": {"datastore_id": "5108ea24-dd83-4696-9caa-f069f73d0fad", "primary_column_name": "id", "primary_key_generation_strategy": "none"}, "description": "An updated description.", "name": "Updated Form Name"}}, "id": "22f6006a-2302-4926-9396-d2dfcf7b0b34", "type": "forms"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/app-builder-backend + Scenario: Upsert and publish a form version returns "Bad Request" response + Given operation "UpsertAndPublishFormVersion" enabled + And new "UpsertAndPublishFormVersion" request + And request contains "form_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"data_definition": {"description": "Welcome to the Engineering Experience Survey.", "required": [], "title": "Developer Experience Survey", "type": "object"}, "ui_definition": {"ui:order": [], "ui:theme": {"primaryColor": "gray"}}, "upsert_params": {"etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d"}}, "type": "form_versions"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/app-builder-backend + Scenario: Upsert and publish a form version returns "Not Found" response + Given operation "UpsertAndPublishFormVersion" enabled + And new "UpsertAndPublishFormVersion" request + And request contains "form_id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"attributes": {"data_definition": {"description": "Welcome to the Engineering Experience Survey.", "required": [], "title": "Developer Experience Survey", "type": "object"}, "ui_definition": {"ui:order": [], "ui:theme": {"primaryColor": "gray"}}, "upsert_params": {"etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d"}}, "type": "form_versions"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/app-builder-backend + Scenario: Upsert and publish a form version returns "OK" response + Given operation "UpsertAndPublishFormVersion" enabled + And there is a valid "form" in the system + And new "UpsertAndPublishFormVersion" request + And request contains "form_id" parameter from "form.data.id" + And body with value {"data": {"attributes": {"data_definition": {"description": "Welcome to the Engineering Experience Survey.", "required": [], "title": "Developer Experience Survey", "type": "object"}, "ui_definition": {"ui:order": [], "ui:theme": {"primaryColor": "gray"}}, "upsert_params": {"etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d"}}, "type": "form_versions"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/gcp_integration.feature b/test-runner-data/features/v2/gcp_integration.feature new file mode 100644 index 0000000000..6dcb271ec1 --- /dev/null +++ b/test-runner-data/features/v2/gcp_integration.feature @@ -0,0 +1,191 @@ +@endpoint(gcp-integration) @endpoint(gcp-integration-v2) +Feature: GCP Integration + Configure your Datadog-Google Cloud Platform (GCP) integration directly + through the Datadog API. Read more about the [Datadog-Google Cloud + Platform integration](https://docs.datadoghq.com/integrations/google_cloud + _platform). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "GCPIntegration" API + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Create a Datadog GCP principal returns "Conflict" response + Given new "MakeGCPSTSDelegate" request + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/gcp-integrations + Scenario: Create a Datadog GCP principal returns "OK" response + Given new "MakeGCPSTSDelegate" request + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "gcp_sts_delegate" + + @team:DataDog/gcp-integrations + Scenario: Create a Datadog GCP principal with empty body returns "OK" response + Given new "MakeGCPSTSDelegate" request + And body with value {} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "gcp_sts_delegate" + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Create a new entry for your service account returns "Bad Request" response + Given new "CreateGCPSTSAccount" request + And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "region_filter_configs": ["nam4", "europe-north1"]}, "type": "gcp_service_account"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Create a new entry for your service account returns "Conflict" response + Given new "CreateGCPSTSAccount" request + And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "region_filter_configs": ["nam4", "europe-north1"]}, "type": "gcp_service_account"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/gcp-integrations + Scenario: Create a new entry for your service account returns "OK" response + Given new "CreateGCPSTSAccount" request + And body with value {"data": {"attributes": {"client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", "host_filters": []}, "type": "gcp_service_account"}} + When the request is sent + Then the response status is 201 OK + And the response "data.type" is equal to "gcp_service_account" + And the response "data.attributes.client_email" is equal to "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com" + + @team:DataDog/gcp-integrations + Scenario: Create a new entry for your service account with account_tags returns "OK" response + Given new "CreateGCPSTSAccount" request + And body with value {"data": {"attributes": {"account_tags": ["lorem", "ipsum"], "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", "host_filters": []}, "type": "gcp_service_account"}} + When the request is sent + Then the response status is 201 OK + And the response "data.type" is equal to "gcp_service_account" + And the response "data.attributes.client_email" is equal to "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com" + And the response "data.attributes.account_tags" is equal to ["lorem", "ipsum"] + + @team:DataDog/gcp-integrations + Scenario: Create a new entry for your service account with cloud run revision filters enabled returns "OK" response + Given new "CreateGCPSTSAccount" request + And body with value {"data": {"attributes": {"cloud_run_revision_filters": ["meh:bleh"], "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", "host_filters": []}, "type": "gcp_service_account"}} + When the request is sent + Then the response status is 201 OK + And the response "data.type" is equal to "gcp_service_account" + And the response "data.attributes.client_email" is equal to "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com" + And the response "data.attributes.cloud_run_revision_filters" is equal to ["meh:bleh"] + + @team:DataDog/gcp-integrations + Scenario: Create a new entry for your service account with cspm enabled returns "OK" response + Given new "CreateGCPSTSAccount" request + And body with value {"data": {"attributes": {"is_cspm_enabled": true, "resource_collection_enabled": true, "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", "host_filters": []}, "type": "gcp_service_account"}} + When the request is sent + Then the response status is 201 OK + And the response "data.type" is equal to "gcp_service_account" + And the response "data.attributes.client_email" is equal to "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com" + And the response "data.attributes.is_cspm_enabled" is equal to true + + @team:DataDog/gcp-integrations + Scenario: Create a new entry for your service account with resource collection enabled disabled and cspm enabled returns "Bad Request" response + Given new "CreateGCPSTSAccount" request + And body with value {"data": {"attributes": {"resource_collection_enabled": false, "is_cspm_enabled": true, "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", "host_filters": []}, "type": "gcp_service_account"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/gcp-integrations + Scenario: Create a new entry for your service account with resource collection enabled returns "OK" response + Given new "CreateGCPSTSAccount" request + And body with value {"data": {"attributes": {"resource_collection_enabled": true, "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", "host_filters": []}, "type": "gcp_service_account"}} + When the request is sent + Then the response status is 201 OK + And the response "data.type" is equal to "gcp_service_account" + And the response "data.attributes.client_email" is equal to "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com" + And the response "data.attributes.resource_collection_enabled" is equal to true + + @team:DataDog/gcp-integrations + Scenario: Create a new entry for your service account with security command center enabled returns "OK" response + Given new "CreateGCPSTSAccount" request + And body with value {"data": {"attributes": {"is_security_command_center_enabled": true, "is_resource_change_collection_enabled": true, "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", "host_filters": []}, "type": "gcp_service_account"}} + When the request is sent + Then the response status is 201 OK + And the response "data.type" is equal to "gcp_service_account" + And the response "data.attributes.client_email" is equal to "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com" + And the response "data.attributes.is_security_command_center_enabled" is equal to true + And the response "data.attributes.is_resource_change_collection_enabled" is equal to true + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Delete an STS enabled GCP Account returns "Bad Request" response + Given new "DeleteGCPSTSAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Delete an STS enabled GCP Account returns "No Content" response + Given new "DeleteGCPSTSAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/gcp-integrations + Scenario: List all GCP STS-enabled service accounts returns "Not Found" response + Given new "ListGCPSTSAccounts" request + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/gcp-integrations + Scenario: List all GCP STS-enabled service accounts returns "OK" response + Given there is a valid "gcp_sts_account" in the system + And new "ListGCPSTSAccounts" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "type" with value "gcp_service_account" + + @team:DataDog/gcp-integrations + Scenario: List delegate account returns "OK" response + Given new "GetGCPSTSDelegate" request + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "gcp_sts_delegate" + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Update STS Service Account returns "Bad Request" response + Given new "UpdateGCPSTSAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "region_filter_configs": ["nam4", "europe-north1"]}, "id": "d291291f-12c2-22g4-j290-123456678897", "type": "gcp_service_account"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/gcp-integrations + Scenario: Update STS Service Account returns "Not Found" response + Given new "UpdateGCPSTSAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"account_tags": [], "client_email": "datadog-service-account@test-project.iam.gserviceaccount.com", "cloud_run_revision_filters": ["$KEY:$VALUE"], "host_filters": ["$KEY:$VALUE"], "is_global_location_enabled": true, "is_per_project_quota_enabled": true, "is_resource_change_collection_enabled": true, "is_security_command_center_enabled": true, "metric_namespace_configs": [{"disabled": true, "id": "aiplatform"}, {"filters": ["snapshot.*", "!*_by_region"], "id": "pubsub"}], "monitored_resource_configs": [{"filters": ["$KEY:$VALUE"], "type": "gce_instance"}], "region_filter_configs": ["nam4", "europe-north1"]}, "id": "d291291f-12c2-22g4-j290-123456678897", "type": "gcp_service_account"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/gcp-integrations + Scenario: Update STS Service Account returns "OK" response + Given there is a valid "gcp_sts_account" in the system + And new "UpdateGCPSTSAccount" request + And request contains "account_id" parameter from "gcp_sts_account.data.id" + And body with value {"data": {"attributes": {"client_email": "Test-{{ unique_hash }}@example.com", "host_filters": ["foo:bar"]}, "id": "{{ gcp_sts_account.data.id }}", "type": "gcp_service_account"}} + When the request is sent + Then the response status is 201 OK + + @team:DataDog/gcp-integrations + Scenario: Update STS Service Account returns "OK" response with cloud run revision filters + Given there is a valid "gcp_sts_account" in the system + And new "UpdateGCPSTSAccount" request + And request contains "account_id" parameter from "gcp_sts_account.data.id" + And body with value {"data": {"attributes": {"client_email": "Test-{{ unique_hash }}@example.com", "cloud_run_revision_filters": ["merp:derp"]}, "id": "{{ gcp_sts_account.data.id }}", "type": "gcp_service_account"}} + When the request is sent + Then the response status is 201 OK + + @team:DataDog/gcp-integrations + Scenario: Update STS Service Account returns "OK" response with enable resource collection turned on + Given there is a valid "gcp_sts_account" in the system + And new "UpdateGCPSTSAccount" request + And request contains "account_id" parameter from "gcp_sts_account.data.id" + And body with value {"data": {"attributes": {"client_email": "Test-{{ unique_hash }}@example.com", "resource_collection_enabled": true}, "id": "{{ gcp_sts_account.data.id }}", "type": "gcp_service_account"}} + When the request is sent + Then the response status is 201 OK diff --git a/test-runner-data/features/v2/google_chat_integration.feature b/test-runner-data/features/v2/google_chat_integration.feature new file mode 100644 index 0000000000..65c1f264a6 --- /dev/null +++ b/test-runner-data/features/v2/google_chat_integration.feature @@ -0,0 +1,342 @@ +@endpoint(google-chat-integration) @endpoint(google-chat-integration-v2) +Feature: Google Chat Integration + Configure your [Datadog Google Chat + integration](https://docs.datadoghq.com/integrations/google-hangouts- + chat/) directly through the Datadog API. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "GoogleChatIntegration" API + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create a target audience returns "Bad Request" response + Given new "CreateGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"audience_id": "fake-audience-id-1", "audience_name": "fake audience name 1"}, "type": "google-chat-target-audience"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create a target audience returns "CREATED" response + Given new "CreateGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"audience_id": "fake-audience-id-1", "audience_name": "fake audience name 1"}, "type": "google-chat-target-audience"}} + When the request is sent + Then the response status is 201 CREATED + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create a target audience returns "Conflict" response + Given new "CreateGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"audience_id": "fake-audience-id-1", "audience_name": "fake audience name 1"}, "type": "google-chat-target-audience"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create a target audience returns "Not Found" response + Given new "CreateGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"audience_id": "fake-audience-id-1", "audience_name": "fake audience name 1"}, "type": "google-chat-target-audience"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create organization handle returns "Bad Request" response + Given new "CreateOrganizationHandle" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "space_resource_name": "spaces/AAAAAAAAA"}}, "type": "google-chat-organization-handle"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/chat-integrations + Scenario: Create organization handle returns "CREATED" response + Given new "CreateOrganizationHandle" request + And request contains "organization_binding_id" parameter with value "e54cb570-c674-529c-769d-84b312288ed7" + And body with value {"data": {"attributes": {"name": "{{unique}}", "space_resource_name": "spaces/AAQA-zFIks8"}}, "type": "google-chat-organization-handle"} + When the request is sent + Then the response status is 201 CREATED + And the response "data.attributes.name" is equal to "{{unique}}" + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create organization handle returns "Conflict" response + Given new "CreateOrganizationHandle" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "space_resource_name": "spaces/AAAAAAAAA"}}, "type": "google-chat-organization-handle"} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create organization handle returns "Not Found" response + Given new "CreateOrganizationHandle" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "space_resource_name": "spaces/AAAAAAAAA"}}, "type": "google-chat-organization-handle"} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete a Google Chat organization binding returns "Bad Request" response + Given new "DeleteGoogleChatOrganization" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete a Google Chat organization binding returns "OK" response + Given new "DeleteGoogleChatOrganization" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete a target audience returns "Not Found" response + Given new "DeleteGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "target_audience_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete a target audience returns "OK" response + Given new "DeleteGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "target_audience_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete organization handle returns "Bad Request" response + Given new "DeleteOrganizationHandle" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/chat-integrations + Scenario: Delete organization handle returns "OK" response + Given new "DeleteOrganizationHandle" request + And there is a valid "organization_handle" in the system + And request contains "organization_binding_id" parameter with value "e54cb570-c674-529c-769d-84b312288ed7" + And request contains "handle_id" parameter from "organization_handle.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete the delegated user returns "Not Found" response + Given new "DeleteGoogleChatDelegatedUser" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete the delegated user returns "OK" response + Given new "DeleteGoogleChatDelegatedUser" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get a Google Chat organization binding returns "Not Found" response + Given new "GetGoogleChatOrganization" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get a Google Chat organization binding returns "OK" response + Given new "GetGoogleChatOrganization" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get a target audience returns "Not Found" response + Given new "GetGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "target_audience_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get a target audience returns "OK" response + Given new "GetGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "target_audience_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all Google Chat organization bindings returns "OK" response + Given new "ListGoogleChatOrganizations" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all organization handles returns "Bad Request" response + Given new "ListOrganizationHandles" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all organization handles returns "Not Found" response + Given new "ListOrganizationHandles" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/chat-integrations + Scenario: Get all organization handles returns "OK" response + Given new "ListOrganizationHandles" request + And there is a valid "organization_handle" in the system + And request contains "organization_binding_id" parameter with value "e54cb570-c674-529c-769d-84b312288ed7" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "google-chat-organization-handle" + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all target audiences returns "Not Found" response + Given new "ListGoogleChatTargetAudiences" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all target audiences returns "OK" response + Given new "ListGoogleChatTargetAudiences" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get organization handle returns "Bad Request" response + Given new "GetOrganizationHandle" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get organization handle returns "Not Found" response + Given new "GetOrganizationHandle" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/chat-integrations + Scenario: Get organization handle returns "OK" response + Given new "GetOrganizationHandle" request + And there is a valid "organization_handle" in the system + And request contains "organization_binding_id" parameter with value "e54cb570-c674-529c-769d-84b312288ed7" + And request contains "handle_id" parameter from "organization_handle.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" has the same value as "organization_handle.data.attributes.name" + And the response "data.attributes.space_display_name" has the same value as "organization_handle.data.attributes.space_display_name" + And the response "data.attributes.space_resource_name" has the same value as "organization_handle.data.attributes.space_resource_name" + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get space information by display name returns "Bad Request" response + Given new "GetSpaceByDisplayName" request + And request contains "domain_name" parameter from "REPLACE.ME" + And request contains "space_display_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get space information by display name returns "Not Found" response + Given new "GetSpaceByDisplayName" request + And request contains "domain_name" parameter from "REPLACE.ME" + And request contains "space_display_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/chat-integrations + Scenario: Get space information by display name returns "OK" response + Given new "GetSpaceByDisplayName" request + And request contains "domain_name" parameter with value "datadog.ninja" + And request contains "space_display_name" parameter with value "api-test-space" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.resource_name" is equal to "spaces/AAQA-zFIks8" + And the response "data.attributes.organization_binding_id" is equal to "e54cb570-c674-529c-769d-84b312288ed7" + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get the delegated user returns "Not Found" response + Given new "GetGoogleChatDelegatedUser" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get the delegated user returns "OK" response + Given new "GetGoogleChatDelegatedUser" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update a target audience returns "Bad Request" response + Given new "UpdateGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "target_audience_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"audience_id": "fake-audience-id-1", "audience_name": "fake audience name 1"}, "type": "google-chat-target-audience"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update a target audience returns "Not Found" response + Given new "UpdateGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "target_audience_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"audience_id": "fake-audience-id-1", "audience_name": "fake audience name 1"}, "type": "google-chat-target-audience"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update a target audience returns "OK" response + Given new "UpdateGoogleChatTargetAudience" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "target_audience_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"audience_id": "fake-audience-id-1", "audience_name": "fake audience name 1"}, "type": "google-chat-target-audience"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update organization handle returns "Bad Request" response + Given new "UpdateOrganizationHandle" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "space_resource_name": "spaces/AAAAAAAAA"}}, "type": "google-chat-organization-handle"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update organization handle returns "Conflict" response + Given new "UpdateOrganizationHandle" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "space_resource_name": "spaces/AAAAAAAAA"}}, "type": "google-chat-organization-handle"} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update organization handle returns "Not Found" response + Given new "UpdateOrganizationHandle" request + And request contains "organization_binding_id" parameter from "REPLACE.ME" + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "space_resource_name": "spaces/AAAAAAAAA"}}, "type": "google-chat-organization-handle"} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/chat-integrations + Scenario: Update organization handle returns "OK" response + Given new "UpdateOrganizationHandle" request + And there is a valid "organization_handle" in the system + And request contains "organization_binding_id" parameter with value "e54cb570-c674-529c-769d-84b312288ed7" + And request contains "handle_id" parameter from "organization_handle.data.id" + And body with value {"data": {"attributes": {"name": "{{organization_handle.data.attributes.name}}--updated"}}, "type": "google-chat-organization-handle"} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{organization_handle.data.attributes.name}}--updated" diff --git a/test-runner-data/features/v2/incidents.feature b/test-runner-data/features/v2/incidents.feature new file mode 100644 index 0000000000..51b1cb54ce --- /dev/null +++ b/test-runner-data/features/v2/incidents.feature @@ -0,0 +1,1643 @@ +@endpoint(incidents) @endpoint(incidents-v2) +Feature: Incidents + Manage incident response, as well as associated attachments, metadata, and + todos. See the [Incident Management + page](https://docs.datadoghq.com/service_management/incident_management/) + for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Incidents" API + + @team:DataDog/incident-app + Scenario: Add commander to an incident returns "OK" response + Given operation "UpdateIncident" enabled + And there is a valid "user" in the system + And there is a valid "incident" in the system + And new "UpdateIncident" request + And request contains "incident_id" parameter from "incident.data.id" + And body with value {"data": {"id": "{{incident.data.id}}", "type": "incidents", "relationships": {"commander_user": {"data": {"id": "{{user.data.id}}", "type": "users"}}}}} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/incident-app + Scenario: Create an incident impact returns "Bad Request" response + Given operation "CreateIncidentImpact" enabled + And new "CreateIncidentImpact" request + And request contains "incident_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"attributes": {"description": "Service was unavailable for external users", "end_at": "2025-08-29T13:17:00Z", "fields": {"customers_impacted": "all", "products_impacted": ["shopping", "marketing"]}, "start_at": "2025-08-28T13:17:00Z"}, "type": "incident_impacts"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/incident-app + Scenario: Create an incident impact returns "CREATED" response + Given there is a valid "incident" in the system + And operation "CreateIncidentImpact" enabled + And new "CreateIncidentImpact" request + And request contains "incident_id" parameter from "incident.data.id" + And body with value {"data": {"type": "incident_impacts", "attributes": {"start_at": "2025-09-12T13:50:00.000Z", "end_at": "2025-09-12T14:50:00.000Z", "description": "Outage in the us-east-1 region"}}} + When the request is sent + Then the response status is 201 CREATED + And the response "data.type" is equal to "incident_impacts" + And the response "data.relationships.incident.data.id" has the same value as "incident.data.id" + + @skip @team:DataDog/incident-app + Scenario: Create an incident impact returns "Not Found" response + Given operation "CreateIncidentImpact" enabled + And new "CreateIncidentImpact" request + And request contains "incident_id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"attributes": {"description": "Service was unavailable for external users", "end_at": "2025-08-29T13:17:00Z", "fields": {"customers_impacted": "all", "products_impacted": ["shopping", "marketing"]}, "start_at": "2025-08-28T13:17:00Z"}, "type": "incident_impacts"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: Create an incident integration metadata returns "Bad Request" response + Given operation "CreateIncidentIntegration" enabled + And new "CreateIncidentIntegration" request + And request contains "incident_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"incident_id": "00000000-aaaa-0000-0000-000000000000", "integration_type": 1, "metadata": {"channels": []}}, "type": "incident_integrations"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/incident-app + Scenario: Create an incident integration metadata returns "CREATED" response + Given operation "CreateIncidentIntegration" enabled + And new "CreateIncidentIntegration" request + And there is a valid "incident" in the system + And request contains "incident_id" parameter from "incident.data.id" + And body with value {"data": {"attributes": {"incident_id": "{{ incident.data.id }}", "integration_type": 1, "metadata": {"channels": [{"channel_id": "C0123456789", "channel_name": "#new-channel", "team_id": "T01234567", "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567"}]}}, "type": "incident_integrations"}} + When the request is sent + Then the response status is 201 CREATED + And the response "data.type" is equal to "incident_integrations" + And the response "data.attributes.metadata.channels" has length 1 + And the response "data.attributes.metadata.channels[0].channel_name" is equal to "#new-channel" + + @generated @skip @team:DataDog/incident-app + Scenario: Create an incident integration metadata returns "Not Found" response + Given operation "CreateIncidentIntegration" enabled + And new "CreateIncidentIntegration" request + And request contains "incident_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"incident_id": "00000000-aaaa-0000-0000-000000000000", "integration_type": 1, "metadata": {"channels": []}}, "type": "incident_integrations"}} + 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 + And new "CreateIncident" request + And body with value {"data": {"attributes": {"customer_impact_scope": "Example customer impact scope", "customer_impacted": false, "fields": {"severity": {"type": "dropdown", "value": "SEV-5"}}, "incident_type_uuid": "00000000-0000-0000-0000-000000000000", "initial_cells": [{"cell_type": "markdown", "content": {"content": "An example timeline cell message."}, "important": false}], "is_test": false, "notification_handles": [{"display_name": "Jane Doe", "handle": "@user@email.com"}, {"display_name": "Slack Channel", "handle": "@slack-channel"}, {"display_name": "Incident Workflow", "handle": "@workflow-from-incident"}], "title": "A test incident title"}, "relationships": {"commander_user": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "users"}}}, "type": "incidents"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/incident-app + Scenario: Create an incident returns "CREATED" response + Given there is a valid "user" in the system + And operation "CreateIncident" enabled + And new "CreateIncident" request + And body with value {"data": {"type": "incidents", "attributes": {"title": "{{unique}}", "customer_impacted": false, "fields": {"state": {"type": "dropdown", "value": "resolved"}}}, "relationships": {"commander_user": {"data": {"type": "{{ user.data.type }}", "id": "{{ user.data.id }}"}}}}} + When the request is sent + Then the response status is 201 CREATED + And the response "data.relationships.commander_user.data.id" has the same value as "user.data.id" + And the response "data.attributes.title" has the same value as "unique" + + @generated @skip @team:DataDog/incident-app + Scenario: Create an incident returns "Not Found" response + Given operation "CreateIncident" enabled + And new "CreateIncident" request + And body with value {"data": {"attributes": {"customer_impact_scope": "Example customer impact scope", "customer_impacted": false, "fields": {"severity": {"type": "dropdown", "value": "SEV-5"}}, "incident_type_uuid": "00000000-0000-0000-0000-000000000000", "initial_cells": [{"cell_type": "markdown", "content": {"content": "An example timeline cell message."}, "important": false}], "is_test": false, "notification_handles": [{"display_name": "Jane Doe", "handle": "@user@email.com"}, {"display_name": "Slack Channel", "handle": "@slack-channel"}, {"display_name": "Incident Workflow", "handle": "@workflow-from-incident"}], "title": "A test incident title"}, "relationships": {"commander_user": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "users"}}}, "type": "incidents"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:Datadog/incident-app + Scenario: Create an incident todo returns "Bad Request" response + Given operation "CreateIncidentTodo" enabled + And new "CreateIncidentTodo" request + And request contains "incident_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"assignees": ["@test.user@test.com"], "completed": "2023-03-06T22:00:00.000000+00:00", "content": "Restore lost data.", "due_date": "2023-07-10T05:00:00.000000+00:00", "incident_id": "00000000-aaaa-0000-0000-000000000000"}, "type": "incident_todos"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:Datadog/incident-app + Scenario: Create an incident todo returns "CREATED" response + Given operation "CreateIncidentTodo" enabled + And new "CreateIncidentTodo" request + And there is a valid "incident" in the system + And request contains "incident_id" parameter from "incident.data.id" + And body with value {"data": {"attributes": {"assignees": ["@test.user@test.com"], "content": "Restore lost data."}, "type": "incident_todos"}} + When the request is sent + Then the response status is 201 CREATED + And the response "data.attributes.assignees" has length 1 + + @generated @skip @team:Datadog/incident-app + Scenario: Create an incident todo returns "Not Found" response + Given operation "CreateIncidentTodo" enabled + And new "CreateIncidentTodo" request + And request contains "incident_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"assignees": ["@test.user@test.com"], "completed": "2023-03-06T22:00:00.000000+00:00", "content": "Restore lost data.", "due_date": "2023-07-10T05:00:00.000000+00:00", "incident_id": "00000000-aaaa-0000-0000-000000000000"}, "type": "incident_todos"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:Datadog/incident-app + Scenario: Create an incident type returns "Bad Request" response + Given operation "CreateIncidentType" enabled + And new "CreateIncidentType" request + And body with value {"data": {"attributes": {"configuration": {"allow_incident_deletion": false, "allow_workflows": true, "create_message": "Create an incident here", "editable_timestamps": false, "private_incidents": false, "private_incidents_by_default": false, "slug_source": "default", "test_incidents": true}, "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"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @skip-validation @team:Datadog/incident-app + Scenario: Create an incident type returns "CREATED" response + Given operation "CreateIncidentType" enabled + And new "CreateIncidentType" request + And body with value {"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"}} + When the request is sent + Then the response status is 201 CREATED + + @generated @skip @team:Datadog/incident-app + Scenario: Create an incident type returns "Not Found" response + Given operation "CreateIncidentType" enabled + And new "CreateIncidentType" request + And body with value {"data": {"attributes": {"configuration": {"allow_incident_deletion": false, "allow_workflows": true, "create_message": "Create an incident here", "editable_timestamps": false, "private_incidents": false, "private_incidents_by_default": false, "slug_source": "default", "test_incidents": true}, "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"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: Create an incident user-defined field returns "Bad Request" response + Given operation "CreateIncidentUserDefinedField" enabled + And new "CreateIncidentUserDefinedField" request + And body with value {"data": {"attributes": {"category": "what_happened", "collected": "active", "default_value": "critical", "display_name": "Root Cause", "name": "root_cause", "ordinal": "1.5", "required": false, "tag_key": "datacenter", "type": 3, "valid_values": [{"description": "A critical severity incident.", "display_name": "Critical", "short_description": "Critical", "value": "critical"}]}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}}, "type": "user_defined_field"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Create an incident user-defined field returns "CREATED" response + Given operation "CreateIncidentUserDefinedField" enabled + And new "CreateIncidentUserDefinedField" request + And body with value {"data": {"attributes": {"category": "what_happened", "collected": "active", "default_value": "critical", "display_name": "Root Cause", "name": "root_cause", "ordinal": "1.5", "required": false, "tag_key": "datacenter", "type": 3, "valid_values": [{"description": "A critical severity incident.", "display_name": "Critical", "short_description": "Critical", "value": "critical"}]}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}}, "type": "user_defined_field"}} + When the request is sent + Then the response status is 201 CREATED + + @generated @skip @team:DataDog/incident-app + Scenario: Create an incident user-defined field returns "Not Found" response + Given operation "CreateIncidentUserDefinedField" enabled + And new "CreateIncidentUserDefinedField" request + And body with value {"data": {"attributes": {"category": "what_happened", "collected": "active", "default_value": "critical", "display_name": "Root Cause", "name": "root_cause", "ordinal": "1.5", "required": false, "tag_key": "datacenter", "type": 3, "valid_values": [{"description": "A critical severity incident.", "display_name": "Critical", "short_description": "Critical", "value": "critical"}]}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}}}, "type": "user_defined_field"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: Create an incident user-defined role returns "Bad Request" response + Given operation "CreateIncidentUserDefinedRole" enabled + And new "CreateIncidentUserDefinedRole" request + And body with value {"data": {"attributes": {"description": "The technical lead for the incident.", "name": "Tech Lead", "policy": {"is_single": true}}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000001", "type": "incident_types"}}}, "type": "incident_user_defined_roles"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Create an incident user-defined role returns "Created" response + Given operation "CreateIncidentUserDefinedRole" enabled + And new "CreateIncidentUserDefinedRole" request + And body with value {"data": {"attributes": {"description": "The technical lead for the incident.", "name": "Tech Lead", "policy": {"is_single": true}}, "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000001", "type": "incident_types"}}}, "type": "incident_user_defined_roles"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/incident-app + Scenario: Create global incident handle returns "Bad Request" response + Given operation "CreateGlobalIncidentHandle" enabled + And new "CreateGlobalIncidentHandle" request + And body with value {"data": {"attributes": {"fields": {"severity": ["SEV-1"]}, "name": "@incident-sev-1"}, "id": "b2494081-cdf0-4205-b366-4e1dd4fdf0bf", "relationships": {"commander_user": {"data": {"id": "f7b538b1-ed7c-4e84-82de-fdf84a539d40", "type": "incident_types"}}, "incident_type": {"data": {"id": "f7b538b1-ed7c-4e84-82de-fdf84a539d40", "type": "incident_types"}}}, "type": "incidents_handles"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Create global incident handle returns "Created" response + Given operation "CreateGlobalIncidentHandle" enabled + And new "CreateGlobalIncidentHandle" request + And body with value {"data": {"attributes": {"fields": {"severity": ["SEV-1"]}, "name": "@incident-sev-1"}, "id": "b2494081-cdf0-4205-b366-4e1dd4fdf0bf", "relationships": {"commander_user": {"data": {"id": "f7b538b1-ed7c-4e84-82de-fdf84a539d40", "type": "incident_types"}}, "incident_type": {"data": {"id": "f7b538b1-ed7c-4e84-82de-fdf84a539d40", "type": "incident_types"}}}, "type": "incidents_handles"}} + When the request is sent + Then the response status is 201 Created + + @skip @team:DataDog/incident-app + Scenario: Create incident attachment returns "Bad Request" response + Given operation "CreateIncidentAttachment" enabled + And new "CreateIncidentAttachment" request + And request contains "incident_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"attributes": {"attachment": {"documentUrl": "https://app.datadoghq.com/notebook/123/Postmortem-IR-123", "title": "Postmortem-IR-123"}, "attachment_type": "postmortem"}, "type": "incident_attachments"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/incident-app + Scenario: Create incident attachment returns "Created" response + Given operation "CreateIncidentAttachment" enabled + And there is a valid "incident" in the system + And new "CreateIncidentAttachment" request + And request contains "incident_id" parameter from "incident.data.id" + And body with value {"data": {"attributes": {"attachment": {"documentUrl": "https://app.datadoghq.com/notebook/{{ unique_alnum }}/{{ unique }}", "title": "{{ unique }}"}, "attachment_type": "postmortem"}, "type": "incident_attachments"}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "incident_attachments" + And the response "data.attributes.attachment.title" has the same value as "unique" + + @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 + + @skip-terraform-config @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 + And new "CreateIncidentNotificationTemplate" request + And body with value {"data": {"attributes": {"category": "alert", "content": "An incident has been declared. Please join the incident channel for updates.", "name": "Test Template", "subject": "Incident Alert"}, "type": "invalid_type"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:Datadog/incident-app + Scenario: Create incident notification template returns "Created" response + Given there is a valid "incident_type" in the system + And operation "CreateIncidentNotificationTemplate" enabled + And new "CreateIncidentNotificationTemplate" request + And body with value {"data": {"attributes": {"category": "alert", "content": "An incident has been declared.\n\nTitle: Sample Incident Title\nSeverity: SEV-2\nAffected Services: web-service, database-service\nStatus: active\n\nPlease join the incident channel for updates.", "name": "{{ unique }}", "subject": "SEV-2 Incident: Sample Incident Title"}, "relationships": {"incident_type": {"data": {"id": "{{ incident_type.data.id }}", "type": "incident_types"}}}, "type": "notification_templates"}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "notification_templates" + And the response "data.attributes.name" has the same value as "unique" + And the response "data.attributes.category" is equal to "alert" + And the response "data.relationships.incident_type.data.id" has the same value as "incident_type.data.id" + + @team:Datadog/incident-app + Scenario: Create incident notification template returns "Not Found" response + Given operation "CreateIncidentNotificationTemplate" enabled + And new "CreateIncidentNotificationTemplate" request + And body with value {"data": {"attributes": {"category": "alert", "content": "An incident has been declared. Please join the incident channel for updates.", "name": "Incident Alert Template", "subject": "Incident Alert"}, "relationships": {"incident_type": {"data": {"id": "00000000-1111-2222-3333-444444444444", "type": "incident_types"}}}, "type": "notification_templates"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: Create postmortem attachment returns "Bad Request" response + Given operation "CreateIncidentPostmortemAttachment" enabled + And new "CreateIncidentPostmortemAttachment" request + And request contains "incident_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cells": [{"attributes": {"definition": {"content": "## Incident Summary\nThis incident was caused by..."}}, "id": "cell-1", "type": "markdown"}], "content": "# Incident Report - IR-123\n[...]", "postmortem_template_id": "93645509-874e-45c4-adfa-623bfeaead89-123", "title": "Postmortem-IR-123"}, "type": "incident_attachments"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Create postmortem attachment returns "Created" response + Given operation "CreateIncidentPostmortemAttachment" enabled + And new "CreateIncidentPostmortemAttachment" request + And request contains "incident_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cells": [{"attributes": {"definition": {"content": "## Incident Summary\nThis incident was caused by..."}}, "id": "cell-1", "type": "markdown"}], "content": "# Incident Report - IR-123\n[...]", "postmortem_template_id": "93645509-874e-45c4-adfa-623bfeaead89-123", "title": "Postmortem-IR-123"}, "type": "incident_attachments"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/incident-app + Scenario: Create postmortem template returns "Bad Request" response + Given operation "CreateIncidentPostmortemTemplate" enabled + And new "CreateIncidentPostmortemTemplate" request + And body with value {"data": {"attributes": {"confluence_postmortem_settings": {"account_id": "123456", "parent_id": "345678", "space_id": "789012"}, "content": "# Overview\n\n# What Happened\n\n# Timeline\n\n# Action Items", "google_docs_postmortem_settings": {"account_id": "123456", "parent_folder_id": "789012"}, "is_default": "2024-01-01T00:00:00+00:00", "location": "datadog_notebooks", "name": "Standard Postmortem Template"}, "id": "00000000-0000-0000-0000-000000000000", "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000009", "type": "incident_types"}}}, "type": "postmortem_templates"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Create postmortem template returns "Created" response + Given operation "CreateIncidentPostmortemTemplate" enabled + And new "CreateIncidentPostmortemTemplate" request + And body with value {"data": {"attributes": {"confluence_postmortem_settings": {"account_id": "123456", "parent_id": "345678", "space_id": "789012"}, "content": "# Overview\n\n# What Happened\n\n# Timeline\n\n# Action Items", "google_docs_postmortem_settings": {"account_id": "123456", "parent_folder_id": "789012"}, "is_default": "2024-01-01T00:00:00+00:00", "location": "datadog_notebooks", "name": "Standard Postmortem Template"}, "id": "00000000-0000-0000-0000-000000000000", "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000009", "type": "incident_types"}}}, "type": "postmortem_templates"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:Datadog/incident-app + Scenario: Delete a notification template returns "Bad Request" response + Given operation "DeleteIncidentNotificationTemplate" enabled + And new "DeleteIncidentNotificationTemplate" 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 a notification template returns "No Content" response + Given operation "DeleteIncidentNotificationTemplate" enabled + And new "DeleteIncidentNotificationTemplate" 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 a notification template returns "Not Found" response + Given operation "DeleteIncidentNotificationTemplate" enabled + And new "DeleteIncidentNotificationTemplate" 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 existing incident returns "Bad Request" response + Given operation "DeleteIncident" enabled + And new "DeleteIncident" request + And request contains "incident_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 existing incident returns "Not Found" response + Given operation "DeleteIncident" enabled + And new "DeleteIncident" request + And request contains "incident_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/incident-app + Scenario: Delete an existing incident returns "OK" response + Given operation "DeleteIncident" enabled + And there is a valid "incident" in the system + And new "DeleteIncident" request + And request contains "incident_id" parameter from "incident.data.id" + When the request is sent + Then the response status is 204 OK + + @skip @team:DataDog/incident-app + Scenario: Delete an incident impact returns "No Content" response + Given there is a valid "incident" in the system + And the "incident" has an "incident_impact" + And operation "DeleteIncidentImpact" enabled + And new "DeleteIncidentImpact" request + And request contains "incident_id" parameter from "incident_impact.data.relationships.incident.data.id" + And request contains "impact_id" parameter from "incident_impact.data.id" + When the request is sent + Then the response status is 204 No Content + + @skip @team:DataDog/incident-app + Scenario: Delete an incident impact returns "Not Found" response + Given operation "DeleteIncidentImpact" enabled + And new "DeleteIncidentImpact" request + And request contains "incident_id" parameter with value "00000000-0000-0000-0000-000000000001" + And request contains "impact_id" parameter with value "00000000-0000-0000-0000-000000000001" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: Delete an incident integration metadata returns "Bad Request" response + Given operation "DeleteIncidentIntegration" enabled + And new "DeleteIncidentIntegration" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "integration_metadata_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 integration metadata returns "Not Found" response + Given operation "DeleteIncidentIntegration" enabled + And new "DeleteIncidentIntegration" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "integration_metadata_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/incident-app + Scenario: Delete an incident integration metadata returns "OK" response + Given operation "DeleteIncidentIntegration" enabled + And new "DeleteIncidentIntegration" request + And there is a valid "incident" in the system + And request contains "incident_id" parameter from "incident.data.id" + And the "incident" has an "incident_integration_metadata" + And request contains "integration_metadata_id" parameter from "incident_integration_metadata.data.id" + 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 + And new "DeleteIncidentTodo" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "todo_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 todo returns "Not Found" response + Given operation "DeleteIncidentTodo" enabled + And new "DeleteIncidentTodo" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "todo_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:Datadog/incident-app + Scenario: Delete an incident todo returns "OK" response + Given operation "DeleteIncidentTodo" enabled + And new "DeleteIncidentTodo" request + And there is a valid "incident" in the system + And the "incident" has an "incident_todo" + And request contains "incident_id" parameter from "incident.data.id" + And request contains "todo_id" parameter from "incident_todo.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:Datadog/incident-app + Scenario: Delete an incident type returns "Bad Request" response + Given operation "DeleteIncidentType" enabled + And new "DeleteIncidentType" request + And request contains "incident_type_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 type returns "Not Found" response + Given operation "DeleteIncidentType" enabled + And new "DeleteIncidentType" request + And request contains "incident_type_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @skip-validation @team:Datadog/incident-app + Scenario: Delete an incident type returns "OK" response + Given operation "DeleteIncidentType" enabled + And new "DeleteIncidentType" request + And there is a valid "incident_type" in the system + And request contains "incident_type_id" parameter from "incident_type.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Delete an incident user-defined field returns "Bad Request" response + Given operation "DeleteIncidentUserDefinedField" enabled + And new "DeleteIncidentUserDefinedField" request + And request contains "field_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 user-defined field returns "No Content" response + Given operation "DeleteIncidentUserDefinedField" enabled + And new "DeleteIncidentUserDefinedField" request + And request contains "field_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 user-defined field returns "Not Found" response + Given operation "DeleteIncidentUserDefinedField" enabled + And new "DeleteIncidentUserDefinedField" request + And request contains "field_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 user-defined role returns "Bad Request" response + Given operation "DeleteIncidentUserDefinedRole" enabled + And new "DeleteIncidentUserDefinedRole" request + And request contains "role_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 user-defined role returns "No Content" response + Given operation "DeleteIncidentUserDefinedRole" enabled + And new "DeleteIncidentUserDefinedRole" request + And request contains "role_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 user-defined role returns "Not Found" response + Given operation "DeleteIncidentUserDefinedRole" enabled + And new "DeleteIncidentUserDefinedRole" request + And request contains "role_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 global incident handle returns "Bad Request" response + Given operation "DeleteGlobalIncidentHandle" enabled + And new "DeleteGlobalIncidentHandle" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Delete global incident handle returns "No Content" response + Given operation "DeleteGlobalIncidentHandle" enabled + And new "DeleteGlobalIncidentHandle" request + When the request is sent + Then the response status is 204 No Content + + @skip @team:DataDog/incident-app + Scenario: Delete incident attachment returns "Bad Request" response + Given operation "DeleteIncidentAttachment" enabled + And new "DeleteIncidentAttachment" request + And request contains "incident_id" parameter with value "00000000-0000-0000-0000-000000000000" + And request contains "attachment_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/incident-app + Scenario: Delete incident attachment returns "No Content" response + Given operation "DeleteIncidentAttachment" enabled + And there is a valid "incident" in the system + And there is a valid "incident_attachment" in the system + And new "DeleteIncidentAttachment" request + And request contains "incident_id" parameter from "incident.data.id" + And request contains "attachment_id" parameter from "incident_attachment.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/incident-app + Scenario: Delete incident attachment returns "Not Found" response + Given operation "DeleteIncidentAttachment" enabled + And new "DeleteIncidentAttachment" request + And request contains "incident_id" parameter with value "00000000-0000-0000-0000-000000000001" + And request contains "attachment_id" parameter with value "00000000-0000-0000-0000-000000000001" + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @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 + + @skip-terraform-config @team:Datadog/incident-app + Scenario: Delete incident notification template returns "No Content" response + Given there is a valid "incident_type" in the system + And there is a valid "notification_template" in the system + And operation "DeleteIncidentNotificationTemplate" enabled + And new "DeleteIncidentNotificationTemplate" request + And request contains "id" parameter from "notification_template.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/incident-app + Scenario: Delete postmortem template returns "Bad Request" response + Given operation "DeleteIncidentPostmortemTemplate" enabled + And new "DeleteIncidentPostmortemTemplate" request + And request contains "template_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 postmortem template returns "No Content" response + Given operation "DeleteIncidentPostmortemTemplate" enabled + And new "DeleteIncidentPostmortemTemplate" request + And request contains "template_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 postmortem template returns "Not Found" response + Given operation "DeleteIncidentPostmortemTemplate" enabled + And new "DeleteIncidentPostmortemTemplate" request + And request contains "template_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 a list of an incident's integration metadata returns "Bad Request" response + Given operation "ListIncidentIntegrations" enabled + And new "ListIncidentIntegrations" request + And request contains "incident_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 a list of an incident's integration metadata returns "Not Found" response + Given operation "ListIncidentIntegrations" enabled + And new "ListIncidentIntegrations" request + And request contains "incident_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/incident-app + Scenario: Get a list of an incident's integration metadata returns "OK" response + Given operation "ListIncidentIntegrations" enabled + And new "ListIncidentIntegrations" request + And there is a valid "incident" in the system + And request contains "incident_id" parameter from "incident.data.id" + And the "incident" has an "incident_integration_metadata" + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.metadata.channels[0].channel_name" is equal to "#example-channel-name" + + @generated @skip @team:Datadog/incident-app + Scenario: Get a list of an incident's todos returns "Bad Request" response + Given operation "ListIncidentTodos" enabled + And new "ListIncidentTodos" request + And request contains "incident_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 a list of an incident's todos returns "Not Found" response + Given operation "ListIncidentTodos" enabled + And new "ListIncidentTodos" request + And request contains "incident_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:Datadog/incident-app + Scenario: Get a list of an incident's todos returns "OK" response + Given operation "ListIncidentTodos" enabled + And new "ListIncidentTodos" request + And there is a valid "incident" in the system + And the "incident" has an "incident_todo" + And request contains "incident_id" parameter from "incident.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + And the response "data[0].attributes.assignees" has length 2 + And the response "data[0].attributes.content" is equal to "Follow up with customer about the impact they saw." + + @generated @skip @team:Datadog/incident-app + Scenario: Get a list of incident types returns "Bad Request" response + Given operation "ListIncidentTypes" enabled + And new "ListIncidentTypes" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/incident-app + Scenario: Get a list of incident types returns "OK" response + Given operation "ListIncidentTypes" enabled + And new "ListIncidentTypes" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Get a list of incident user-defined fields returns "Bad Request" response + Given operation "ListIncidentUserDefinedFields" enabled + And new "ListIncidentUserDefinedFields" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Get a list of incident user-defined fields returns "OK" response + Given operation "ListIncidentUserDefinedFields" enabled + And new "ListIncidentUserDefinedFields" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Get a list of incidents returns "Bad Request" response + Given operation "ListIncidents" enabled + And new "ListIncidents" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Get a list of incidents returns "Not Found" response + Given operation "ListIncidents" enabled + And new "ListIncidents" request + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/incident-app + Scenario: Get a list of incidents returns "OK" response + Given operation "ListIncidents" enabled + And there is a valid "incident" in the system + And new "ListIncidents" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "incidents" + + @replay-only @skip-validation @team:DataDog/incident-app @with-pagination + Scenario: Get a list of incidents returns "OK" response with pagination + Given operation "ListIncidents" enabled + And new "ListIncidents" request + And request contains "page[size]" parameter with value 2 + When the request with pagination is sent + 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 + + @generated @skip @team:DataDog/incident-app + Scenario: Get an incident user-defined field returns "Not Found" response + Given operation "GetIncidentUserDefinedField" enabled + And new "GetIncidentUserDefinedField" request + And request contains "field_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 user-defined field returns "OK" response + Given operation "GetIncidentUserDefinedField" enabled + And new "GetIncidentUserDefinedField" request + And request contains "field_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Get an incident user-defined role returns "Bad Request" response + Given operation "GetIncidentUserDefinedRole" enabled + And new "GetIncidentUserDefinedRole" request + And request contains "role_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 user-defined role returns "Not Found" response + Given operation "GetIncidentUserDefinedRole" enabled + And new "GetIncidentUserDefinedRole" request + And request contains "role_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 user-defined role returns "OK" response + Given operation "GetIncidentUserDefinedRole" enabled + And new "GetIncidentUserDefinedRole" request + And request contains "role_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Get global incident settings returns "Bad Request" response + Given operation "GetGlobalIncidentSettings" enabled + And new "GetGlobalIncidentSettings" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Get global incident settings returns "OK" response + Given operation "GetGlobalIncidentSettings" enabled + And new "GetGlobalIncidentSettings" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Get incident integration metadata details returns "Bad Request" response + Given operation "GetIncidentIntegration" enabled + And new "GetIncidentIntegration" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "integration_metadata_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 incident integration metadata details returns "Not Found" response + Given operation "GetIncidentIntegration" enabled + And new "GetIncidentIntegration" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "integration_metadata_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/incident-app + Scenario: Get incident integration metadata details returns "OK" response + Given operation "GetIncidentIntegration" enabled + And new "GetIncidentIntegration" request + And there is a valid "incident" in the system + And request contains "incident_id" parameter from "incident.data.id" + And the "incident" has an "incident_integration_metadata" + And request contains "integration_metadata_id" parameter from "incident_integration_metadata.data.id" + 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 + + @skip-terraform-config @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 + And new "GetIncidentNotificationTemplate" 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 incident notification template returns "Not Found" response + Given operation "GetIncidentNotificationTemplate" enabled + And new "GetIncidentNotificationTemplate" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:Datadog/incident-app + Scenario: Get incident notification template returns "OK" response + Given there is a valid "incident_type" in the system + And there is a valid "notification_template" in the system + And operation "GetIncidentNotificationTemplate" enabled + And new "GetIncidentNotificationTemplate" request + And request contains "id" parameter from "notification_template.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "notification_templates" + And the response "data.id" has the same value as "notification_template.data.id" + And the response "data" has field "attributes" + And the response "data" has field "relationships" + + @generated @skip @team:Datadog/incident-app + Scenario: Get incident todo details returns "Bad Request" response + Given operation "GetIncidentTodo" enabled + And new "GetIncidentTodo" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "todo_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 incident todo details returns "Not Found" response + Given operation "GetIncidentTodo" enabled + And new "GetIncidentTodo" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "todo_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:Datadog/incident-app + Scenario: Get incident todo details returns "OK" response + Given operation "GetIncidentTodo" enabled + And new "GetIncidentTodo" request + And there is a valid "incident" in the system + And the "incident" has an "incident_todo" + And request contains "incident_id" parameter from "incident.data.id" + And request contains "todo_id" parameter from "incident_todo.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.assignees" has length 2 + And the response "data.attributes.content" is equal to "Follow up with customer about the impact they saw." + + @generated @skip @team:Datadog/incident-app + Scenario: Get incident type details returns "Bad Request" response + Given operation "GetIncidentType" enabled + And new "GetIncidentType" request + And request contains "incident_type_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 incident type details returns "Not Found" response + Given operation "GetIncidentType" enabled + And new "GetIncidentType" request + And request contains "incident_type_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 incident type details returns "OK" response + Given operation "GetIncidentType" enabled + And new "GetIncidentType" request + And request contains "incident_type_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Get postmortem template returns "Bad Request" response + Given operation "GetIncidentPostmortemTemplate" enabled + And new "GetIncidentPostmortemTemplate" request + And request contains "template_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 postmortem template returns "Not Found" response + Given operation "GetIncidentPostmortemTemplate" enabled + And new "GetIncidentPostmortemTemplate" request + And request contains "template_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 postmortem template returns "OK" response + Given operation "GetIncidentPostmortemTemplate" enabled + And new "GetIncidentPostmortemTemplate" request + And request contains "template_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Get the details of an incident returns "Bad Request" response + Given operation "GetIncident" enabled + And new "GetIncident" request + And request contains "incident_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 the details of an incident returns "Not Found" response + Given operation "GetIncident" enabled + And new "GetIncident" request + And request contains "incident_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/incident-app + Scenario: Get the details of an incident returns "OK" response + Given operation "GetIncident" enabled + And there is a valid "incident" in the system + And new "GetIncident" request + And request contains "incident_id" parameter from "incident.data.id" + When the request is sent + 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: Import an incident returns "Bad Request" response + Given operation "ImportIncident" enabled + And new "ImportIncident" request + And body with value {"data": {"attributes": {"declared": "2025-01-01T00:00:00Z", "detected": "2025-01-01T00:00:00Z", "fields": {"severity": {"value": "SEV-5"}, "state": {"value": "active"}}, "incident_type_uuid": "00000000-0000-0000-0000-000000000000", "resolved": "2025-01-01T01:00:00Z", "title": "Imported incident from external system", "visibility": "organization"}, "relationships": {"commander_user": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "users"}}, "declared_by_user": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "users"}}}, "type": "incidents"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/incident-app + Scenario: Import an incident returns "CREATED" response + Given operation "ImportIncident" enabled + And new "ImportIncident" request + And body with value {"data": {"type": "incidents", "attributes": {"title": "{{unique}}", "visibility": "organization"}}} + When the request is sent + Then the response status is 201 CREATED + And the response "data.type" is equal to "incidents" + And the response "data.attributes.title" has the same value as "unique" + + @generated @skip @team:DataDog/incident-app + Scenario: Import an incident returns "Not Found" response + Given operation "ImportIncident" enabled + And new "ImportIncident" request + And body with value {"data": {"attributes": {"declared": "2025-01-01T00:00:00Z", "detected": "2025-01-01T00:00:00Z", "fields": {"severity": {"value": "SEV-5"}, "state": {"value": "active"}}, "incident_type_uuid": "00000000-0000-0000-0000-000000000000", "resolved": "2025-01-01T01:00:00Z", "title": "Imported incident from external system", "visibility": "organization"}, "relationships": {"commander_user": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "users"}}, "declared_by_user": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "users"}}}, "type": "incidents"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: List an incident's impacts returns "Bad Request" response + Given new "ListIncidentImpacts" request + And request contains "incident_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: List an incident's impacts returns "Not Found" response + Given new "ListIncidentImpacts" request + And request contains "incident_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/incident-app + Scenario: List an incident's impacts returns "OK" response + Given there is a valid "incident" in the system + And operation "ListIncidentImpacts" enabled + And new "ListIncidentImpacts" request + And request contains "incident_id" parameter from "incident.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: List global incident handles returns "Bad Request" response + Given operation "ListGlobalIncidentHandles" enabled + And new "ListGlobalIncidentHandles" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: List global incident handles returns "OK" response + Given operation "ListGlobalIncidentHandles" enabled + And new "ListGlobalIncidentHandles" request + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/incident-app + Scenario: List incident attachments returns "Bad Request" response + Given operation "ListIncidentAttachments" enabled + And new "ListIncidentAttachments" request + And request contains "incident_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/incident-app + Scenario: List incident attachments returns "OK" response + Given operation "ListIncidentAttachments" enabled + And there is a valid "incident" in the system + And there is a valid "incident_attachment" in the system + And new "ListIncidentAttachments" request + And request contains "incident_id" parameter from "incident.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + + @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 + + @skip-terraform-config @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 + And new "ListIncidentNotificationTemplates" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/incident-app + Scenario: List incident notification templates returns "Not Found" response + Given operation "ListIncidentNotificationTemplates" enabled + And new "ListIncidentNotificationTemplates" request + When the request is sent + Then the response status is 404 Not Found + + @team:Datadog/incident-app + Scenario: List incident notification templates returns "OK" response + Given operation "ListIncidentNotificationTemplates" enabled + And new "ListIncidentNotificationTemplates" request + When the request is sent + Then the response status is 200 OK + And the response "data" has length 0 + + @generated @skip @team:DataDog/incident-app + Scenario: List incident user-defined roles returns "Bad Request" response + Given operation "ListIncidentUserDefinedRoles" enabled + And new "ListIncidentUserDefinedRoles" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: List incident user-defined roles returns "OK" response + Given operation "ListIncidentUserDefinedRoles" enabled + And new "ListIncidentUserDefinedRoles" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: List postmortem templates returns "Bad Request" response + Given operation "ListIncidentPostmortemTemplates" enabled + And new "ListIncidentPostmortemTemplates" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: List postmortem templates returns "OK" response + Given operation "ListIncidentPostmortemTemplates" enabled + And new "ListIncidentPostmortemTemplates" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: Remove commander from an incident returns "OK" response + Given operation "UpdateIncident" enabled + And there is a valid "incident" in the system + And new "UpdateIncident" request + And request contains "incident_id" parameter from "incident.data.id" + And body with value {"data": {"id": "{{incident.data.id}}", "type": "incidents", "relationships": {"commander_user": {"data": null}}}} + When the request is sent + Then the response status is 200 OK + And the response "data.relationships.commander_user.data" is equal to null + + @generated @skip @team:DataDog/incident-app + Scenario: Search for incidents returns "Bad Request" response + Given operation "SearchIncidents" enabled + And new "SearchIncidents" request + And request contains "query" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Search for incidents returns "Not Found" response + Given operation "SearchIncidents" enabled + And new "SearchIncidents" request + And request contains "query" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/incident-app + Scenario: Search for incidents returns "OK" response + Given operation "SearchIncidents" enabled + And there is a valid "incident" in the system + And new "SearchIncidents" request + And request contains "query" parameter with value "state:(active OR stable OR resolved)" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "incidents_search_results" + And the response "data.attributes.incidents[0].data.type" is equal to "incidents" + + @replay-only @skip-validation @team:DataDog/incident-app @with-pagination + Scenario: Search for incidents returns "OK" response with pagination + Given operation "SearchIncidents" enabled + And new "SearchIncidents" request + And request contains "query" parameter with value "state:(active OR stable OR resolved)" + And request contains "page[size]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/incident-app + Scenario: Update an existing incident integration metadata returns "Bad Request" response + Given operation "UpdateIncidentIntegration" enabled + And new "UpdateIncidentIntegration" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "integration_metadata_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"incident_id": "00000000-aaaa-0000-0000-000000000000", "integration_type": 1, "metadata": {"channels": []}}, "type": "incident_integrations"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Update an existing incident integration metadata returns "Not Found" response + Given operation "UpdateIncidentIntegration" enabled + And new "UpdateIncidentIntegration" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "integration_metadata_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"incident_id": "00000000-aaaa-0000-0000-000000000000", "integration_type": 1, "metadata": {"channels": []}}, "type": "incident_integrations"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/incident-app + Scenario: Update an existing incident integration metadata returns "OK" response + Given operation "UpdateIncidentIntegration" enabled + And new "UpdateIncidentIntegration" request + And there is a valid "incident" in the system + And request contains "incident_id" parameter from "incident.data.id" + And the "incident" has an "incident_integration_metadata" + And request contains "integration_metadata_id" parameter from "incident_integration_metadata.data.id" + And body with value {"data": {"attributes": {"incident_id": "{{ incident.data.id }}", "integration_type": 1, "metadata": {"channels": [{"channel_id": "C0123456789", "channel_name": "#updated-channel-name", "team_id": "T01234567", "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567"}]}}, "type": "incident_integrations"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.metadata.channels[0].channel_name" is equal to "#updated-channel-name" + + @generated @skip @team:DataDog/incident-app + Scenario: Update an existing incident returns "Bad Request" response + Given operation "UpdateIncident" enabled + And new "UpdateIncident" request + And request contains "incident_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"customer_impact_end": null, "customer_impact_scope": "Example customer impact scope", "customer_impact_start": null, "customer_impacted": false, "detected": null, "fields": {"severity": {"type": "dropdown", "value": "SEV-5"}}, "notification_handles": [{"display_name": "Jane Doe", "handle": "@user@email.com"}, {"display_name": "Slack Channel", "handle": "@slack-channel"}, {"display_name": "Incident Workflow", "handle": "@workflow-from-incident"}], "title": "A test incident title"}, "id": "00000000-0000-0000-4567-000000000000", "relationships": {"commander_user": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "users"}}, "integrations": {"data": [{"id": "00000000-abcd-0005-0000-000000000000", "type": "incident_integrations"}, {"id": "00000000-abcd-0006-0000-000000000000", "type": "incident_integrations"}]}, "postmortem": {"data": {"id": "00000000-0000-abcd-3000-000000000000", "type": "incident_postmortems"}}}, "type": "incidents"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Update an existing incident returns "Not Found" response + Given operation "UpdateIncident" enabled + And new "UpdateIncident" request + And request contains "incident_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"customer_impact_end": null, "customer_impact_scope": "Example customer impact scope", "customer_impact_start": null, "customer_impacted": false, "detected": null, "fields": {"severity": {"type": "dropdown", "value": "SEV-5"}}, "notification_handles": [{"display_name": "Jane Doe", "handle": "@user@email.com"}, {"display_name": "Slack Channel", "handle": "@slack-channel"}, {"display_name": "Incident Workflow", "handle": "@workflow-from-incident"}], "title": "A test incident title"}, "id": "00000000-0000-0000-4567-000000000000", "relationships": {"commander_user": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "users"}}, "integrations": {"data": [{"id": "00000000-abcd-0005-0000-000000000000", "type": "incident_integrations"}, {"id": "00000000-abcd-0006-0000-000000000000", "type": "incident_integrations"}]}, "postmortem": {"data": {"id": "00000000-0000-abcd-3000-000000000000", "type": "incident_postmortems"}}}, "type": "incidents"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/incident-app + Scenario: Update an existing incident returns "OK" response + Given operation "UpdateIncident" enabled + And there is a valid "incident" in the system + And new "UpdateIncident" request + And request contains "incident_id" parameter from "incident.data.id" + And body with value {"data": {"id": "{{incident.data.id}}", "type": "incidents", "attributes": {"fields": {"state": {"type": "dropdown", "value":"resolved"}}, "title": "{{ incident.data.attributes.title }}-updated"}}} + When the request is sent + 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 impact returns "Bad Request" response + Given operation "PatchIncidentImpact" enabled + And new "PatchIncidentImpact" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "impact_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Service was unavailable for external users", "end_at": "2025-08-29T13:17:00Z", "fields": {"customers_impacted": "all", "products_impacted": ["shopping", "marketing"]}, "start_at": "2025-08-28T13:17:00Z"}, "type": "incident_impacts"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Update an incident impact returns "Not Found" response + Given operation "PatchIncidentImpact" enabled + And new "PatchIncidentImpact" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "impact_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Service was unavailable for external users", "end_at": "2025-08-29T13:17:00Z", "fields": {"customers_impacted": "all", "products_impacted": ["shopping", "marketing"]}, "start_at": "2025-08-28T13:17:00Z"}, "type": "incident_impacts"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: Update an incident impact returns "OK" response + Given operation "PatchIncidentImpact" enabled + And new "PatchIncidentImpact" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "impact_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Service was unavailable for external users", "end_at": "2025-08-29T13:17:00Z", "fields": {"customers_impacted": "all", "products_impacted": ["shopping", "marketing"]}, "start_at": "2025-08-28T13:17:00Z"}, "type": "incident_impacts"}} + When the request is sent + Then the response status is 200 OK + + @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 + And new "UpdateIncidentTodo" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "todo_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"assignees": ["@test.user@test.com"], "completed": "2023-03-06T22:00:00.000000+00:00", "content": "Restore lost data.", "due_date": "2023-07-10T05:00:00.000000+00:00", "incident_id": "00000000-aaaa-0000-0000-000000000000"}, "type": "incident_todos"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/incident-app + Scenario: Update an incident todo returns "Not Found" response + Given operation "UpdateIncidentTodo" enabled + And new "UpdateIncidentTodo" request + And request contains "incident_id" parameter from "REPLACE.ME" + And request contains "todo_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"assignees": ["@test.user@test.com"], "completed": "2023-03-06T22:00:00.000000+00:00", "content": "Restore lost data.", "due_date": "2023-07-10T05:00:00.000000+00:00", "incident_id": "00000000-aaaa-0000-0000-000000000000"}, "type": "incident_todos"}} + When the request is sent + Then the response status is 404 Not Found + + @team:Datadog/incident-app + Scenario: Update an incident todo returns "OK" response + Given operation "UpdateIncidentTodo" enabled + And new "UpdateIncidentTodo" request + And there is a valid "incident" in the system + And the "incident" has an "incident_todo" + And request contains "incident_id" parameter from "incident.data.id" + And request contains "todo_id" parameter from "incident_todo.data.id" + And body with value {"data": {"attributes": {"assignees": ["@test.user@test.com"], "content": "Restore lost data.", "completed": "2023-03-06T22:00:00.000000+00:00", "due_date": "2023-07-10T05:00:00.000000+00:00"}, "type": "incident_todos"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.assignees" has length 1 + And the response "data.attributes.content" is equal to "Restore lost data." + + @generated @skip @team:Datadog/incident-app + Scenario: Update an incident type returns "Bad Request" response + Given operation "UpdateIncidentType" enabled + And new "UpdateIncidentType" request + And request contains "incident_type_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"configuration": {"allow_incident_deletion": false, "allow_workflows": true, "create_message": "Create an incident here", "editable_timestamps": false, "private_incidents": false, "private_incidents_by_default": false, "slug_source": "default", "test_incidents": true}, "description": "Any incidents that harm (or have the potential to) the confidentiality, integrity, or availability of our data. Note: This will notify the security team.", "is_default": false, "name": "Security Incident"}, "id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/incident-app + Scenario: Update an incident type returns "Not Found" response + Given operation "UpdateIncidentType" enabled + And new "UpdateIncidentType" request + And request contains "incident_type_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"configuration": {"allow_incident_deletion": false, "allow_workflows": true, "create_message": "Create an incident here", "editable_timestamps": false, "private_incidents": false, "private_incidents_by_default": false, "slug_source": "default", "test_incidents": true}, "description": "Any incidents that harm (or have the potential to) the confidentiality, integrity, or availability of our data. Note: This will notify the security team.", "is_default": false, "name": "Security Incident"}, "id": "00000000-0000-0000-0000-000000000000", "type": "incident_types"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @skip-validation @team:Datadog/incident-app + Scenario: Update an incident type returns "OK" response + Given operation "UpdateIncidentType" enabled + And new "UpdateIncidentType" request + And there is a valid "incident_type" in the system + And request contains "incident_type_id" parameter from "incident_type.data.id" + And body with value {"data": {"id": "{{incident_type.data.id}}", "attributes": {"name": "{{incident_type.data.attributes.name}}-updated"}, "type": "incident_types"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Update an incident user-defined field returns "Bad Request" response + Given operation "UpdateIncidentUserDefinedField" enabled + And new "UpdateIncidentUserDefinedField" request + And request contains "field_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "what_happened", "collected": "active", "default_value": "critical", "display_name": "Root Cause", "ordinal": "1.5", "required": false, "valid_values": [{"description": "A critical severity incident.", "display_name": "Critical", "short_description": "Critical", "value": "critical"}]}, "id": "00000000-0000-0000-0000-000000000000", "type": "user_defined_field"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Update an incident user-defined field returns "Not Found" response + Given operation "UpdateIncidentUserDefinedField" enabled + And new "UpdateIncidentUserDefinedField" request + And request contains "field_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "what_happened", "collected": "active", "default_value": "critical", "display_name": "Root Cause", "ordinal": "1.5", "required": false, "valid_values": [{"description": "A critical severity incident.", "display_name": "Critical", "short_description": "Critical", "value": "critical"}]}, "id": "00000000-0000-0000-0000-000000000000", "type": "user_defined_field"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: Update an incident user-defined field returns "OK" response + Given operation "UpdateIncidentUserDefinedField" enabled + And new "UpdateIncidentUserDefinedField" request + And request contains "field_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "what_happened", "collected": "active", "default_value": "critical", "display_name": "Root Cause", "ordinal": "1.5", "required": false, "valid_values": [{"description": "A critical severity incident.", "display_name": "Critical", "short_description": "Critical", "value": "critical"}]}, "id": "00000000-0000-0000-0000-000000000000", "type": "user_defined_field"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Update an incident user-defined role returns "Bad Request" response + Given operation "UpdateIncidentUserDefinedRole" enabled + And new "UpdateIncidentUserDefinedRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "The technical lead for the incident.", "name": "Tech Lead", "policy": {"is_single": true}}, "id": "00000000-0000-0000-0000-000000000002", "type": "incident_user_defined_roles"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Update an incident user-defined role returns "Not Found" response + Given operation "UpdateIncidentUserDefinedRole" enabled + And new "UpdateIncidentUserDefinedRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "The technical lead for the incident.", "name": "Tech Lead", "policy": {"is_single": true}}, "id": "00000000-0000-0000-0000-000000000002", "type": "incident_user_defined_roles"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: Update an incident user-defined role returns "OK" response + Given operation "UpdateIncidentUserDefinedRole" enabled + And new "UpdateIncidentUserDefinedRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "The technical lead for the incident.", "name": "Tech Lead", "policy": {"is_single": true}}, "id": "00000000-0000-0000-0000-000000000002", "type": "incident_user_defined_roles"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Update global incident handle returns "Bad Request" response + Given operation "UpdateGlobalIncidentHandle" enabled + And new "UpdateGlobalIncidentHandle" request + And body with value {"data": {"attributes": {"fields": {"severity": ["SEV-1"]}, "name": "@incident-sev-1"}, "id": "b2494081-cdf0-4205-b366-4e1dd4fdf0bf", "relationships": {"commander_user": {"data": {"id": "f7b538b1-ed7c-4e84-82de-fdf84a539d40", "type": "incident_types"}}, "incident_type": {"data": {"id": "f7b538b1-ed7c-4e84-82de-fdf84a539d40", "type": "incident_types"}}}, "type": "incidents_handles"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Update global incident handle returns "OK" response + Given operation "UpdateGlobalIncidentHandle" enabled + And new "UpdateGlobalIncidentHandle" request + And body with value {"data": {"attributes": {"fields": {"severity": ["SEV-1"]}, "name": "@incident-sev-1"}, "id": "b2494081-cdf0-4205-b366-4e1dd4fdf0bf", "relationships": {"commander_user": {"data": {"id": "f7b538b1-ed7c-4e84-82de-fdf84a539d40", "type": "incident_types"}}, "incident_type": {"data": {"id": "f7b538b1-ed7c-4e84-82de-fdf84a539d40", "type": "incident_types"}}}, "type": "incidents_handles"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Update global incident settings returns "Bad Request" response + Given operation "UpdateGlobalIncidentSettings" enabled + And new "UpdateGlobalIncidentSettings" request + And body with value {"data": {"attributes": {"analytics_dashboard_id": "abc-123-def"}, "type": "incidents_global_settings"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Update global incident settings returns "OK" response + Given operation "UpdateGlobalIncidentSettings" enabled + And new "UpdateGlobalIncidentSettings" request + And body with value {"data": {"attributes": {"analytics_dashboard_id": "abc-123-def"}, "type": "incidents_global_settings"}} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/incident-app + Scenario: Update incident attachment returns "Bad Request" response + Given operation "UpdateIncidentAttachment" enabled + And new "UpdateIncidentAttachment" request + And request contains "incident_id" parameter with value "00000000-0000-0000-0000-00000000000" + And request contains "attachment_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"attributes": {"attachment": {"documentUrl": "https://app.datadoghq.com/notebook/124/Postmortem-IR-124", "title": "Postmortem-IR-124"}}, "id": "00000000-abcd-0002-0000-000000000000", "type": "incident_attachments"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/incident-app + Scenario: Update incident attachment returns "Not Found" response + Given operation "UpdateIncidentAttachment" enabled + And new "UpdateIncidentAttachment" request + And request contains "incident_id" parameter with value "00000000-0000-0000-0000-000000000001" + And request contains "attachment_id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"attributes": {"attachment": {"documentUrl": "https://app.datadoghq.com/notebook/124/Postmortem-IR-124", "title": "Postmortem-IR-124"}}, "id": "00000000-abcd-0002-0000-000000000000", "type": "incident_attachments"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/incident-app + Scenario: Update incident attachment returns "OK" response + Given operation "UpdateIncidentAttachment" enabled + And there is a valid "incident" in the system + And there is a valid "incident_attachment" in the system + And new "UpdateIncidentAttachment" request + And request contains "incident_id" parameter from "incident.data.id" + And request contains "attachment_id" parameter from "incident_attachment.data.id" + And body with value {"data": {"attributes": {"attachment": {"documentUrl": "https://app.datadoghq.com/notebook/124/{{ unique }}", "title": "{{ unique }}"}}, "id": "{{ incident_attachment.data.id }}", "type": "incident_attachments"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "incident_attachments" + And the response "data.attributes.attachment.title" has the same value as "unique" + + @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 + + @skip-terraform-config @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 + And new "UpdateIncidentNotificationTemplate" request + And request contains "id" parameter with value "00000000-1111-2222-3333-444444444444" + And body with value {"data": {"attributes": {"category": "update", "content": "Incident Status Update: For more details, visit the incident page.", "name": "Update Template", "subject": "Incident Update"}, "id": "00000000-0000-0000-0000-000000000001", "type": "invalid_type"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:Datadog/incident-app + Scenario: Update incident notification template returns "Not Found" response + Given operation "UpdateIncidentNotificationTemplate" enabled + And new "UpdateIncidentNotificationTemplate" request + And request contains "id" parameter with value "00000000-1111-2222-3333-444444444444" + And body with value {"data": {"attributes": {"category": "update", "content": "Incident Status Update: For more details, visit the incident page.", "name": "Updated Template Name", "subject": "Incident Update"}, "id": "00000000-1111-2222-3333-444444444444", "type": "notification_templates"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:Datadog/incident-app + Scenario: Update incident notification template returns "OK" response + Given there is a valid "incident_type" in the system + And there is a valid "notification_template" in the system + And operation "UpdateIncidentNotificationTemplate" enabled + And new "UpdateIncidentNotificationTemplate" request + And request contains "id" parameter from "notification_template.data.id" + And body with value {"data": {"attributes": {"category": "update", "content": "Incident Status Update:\n\nTitle: Sample Incident Title\nNew Status: resolved\nSeverity: SEV-2\nServices: web-service, database-service\nCommander: John Doe\n\nFor more details, visit the incident page.", "name": "{{ unique }}", "subject": "Incident Update: Sample Incident Title - resolved"}, "id": "{{ notification_template.data.id }}", "type": "notification_templates"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "notification_templates" + And the response "data.id" has the same value as "notification_template.data.id" + And the response "data.attributes.name" has the same value as "unique" + And the response "data.attributes.category" is equal to "update" + + @generated @skip @team:DataDog/incident-app + Scenario: Update postmortem template returns "Bad Request" response + Given operation "UpdateIncidentPostmortemTemplate" enabled + And new "UpdateIncidentPostmortemTemplate" request + And request contains "template_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"confluence_postmortem_settings": {"account_id": "123456", "parent_id": "345678", "space_id": "789012"}, "content": "# Overview\n\n# What Happened\n\n# Timeline\n\n# Action Items", "google_docs_postmortem_settings": {"account_id": "123456", "parent_folder_id": "789012"}, "is_default": "2024-01-01T00:00:00+00:00", "location": "datadog_notebooks", "name": "Standard Postmortem Template"}, "id": "00000000-0000-0000-0000-000000000000", "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000009", "type": "incident_types"}}}, "type": "postmortem_templates"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/incident-app + Scenario: Update postmortem template returns "Not Found" response + Given operation "UpdateIncidentPostmortemTemplate" enabled + And new "UpdateIncidentPostmortemTemplate" request + And request contains "template_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"confluence_postmortem_settings": {"account_id": "123456", "parent_id": "345678", "space_id": "789012"}, "content": "# Overview\n\n# What Happened\n\n# Timeline\n\n# Action Items", "google_docs_postmortem_settings": {"account_id": "123456", "parent_folder_id": "789012"}, "is_default": "2024-01-01T00:00:00+00:00", "location": "datadog_notebooks", "name": "Standard Postmortem Template"}, "id": "00000000-0000-0000-0000-000000000000", "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000009", "type": "incident_types"}}}, "type": "postmortem_templates"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/incident-app + Scenario: Update postmortem template returns "OK" response + Given operation "UpdateIncidentPostmortemTemplate" enabled + And new "UpdateIncidentPostmortemTemplate" request + And request contains "template_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"confluence_postmortem_settings": {"account_id": "123456", "parent_id": "345678", "space_id": "789012"}, "content": "# Overview\n\n# What Happened\n\n# Timeline\n\n# Action Items", "google_docs_postmortem_settings": {"account_id": "123456", "parent_folder_id": "789012"}, "is_default": "2024-01-01T00:00:00+00:00", "location": "datadog_notebooks", "name": "Standard Postmortem Template"}, "id": "00000000-0000-0000-0000-000000000000", "relationships": {"incident_type": {"data": {"id": "00000000-0000-0000-0000-000000000009", "type": "incident_types"}}}, "type": "postmortem_templates"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/integrations.feature b/test-runner-data/features/v2/integrations.feature new file mode 100644 index 0000000000..20b20a472f --- /dev/null +++ b/test-runner-data/features/v2/integrations.feature @@ -0,0 +1,13 @@ +@endpoint(integrations) @endpoint(integrations-v2) +Feature: Integrations + The Integrations API is used to list available integrations and retrieve + information about their installation status. + + @skip-validation @team:DataDog/integrations-experience + Scenario: List Integrations returns "Successful Response." response + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Integrations" API + And new "ListIntegrations" request + When the request is sent + Then the response status is 200 Successful Response. diff --git a/test-runner-data/features/v2/ip_allowlist.feature b/test-runner-data/features/v2/ip_allowlist.feature new file mode 100644 index 0000000000..5faede4ef4 --- /dev/null +++ b/test-runner-data/features/v2/ip_allowlist.feature @@ -0,0 +1,61 @@ +@endpoint(ip-allowlist) @endpoint(ip-allowlist-v2) +Feature: IP Allowlist + The IP allowlist API is used to manage the IP addresses that can access + the Datadog API and web UI. It does not block access to intake APIs or + public dashboards. This is an enterprise-only feature. Request access by + contacting Datadog support, or see the [IP Allowlist page](https://docs.da + tadoghq.com/account_management/org_settings/ip_allowlist/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "IPAllowlist" API + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Get IP Allowlist returns "Not Found" response + Given new "GetIPAllowlist" request + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Get IP Allowlist returns "OK" response + Given the "ip_allowlist_nonempty_disabled" has two entries and is disabled + And new "GetIPAllowlist" request + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "{{ ip_allowlist_nonempty_disabled.data.type }}" + And the response "data.attributes.enabled" has the same value as "ip_allowlist_nonempty_disabled.data.attributes.enabled" + And the response "data.attributes.entries" has length 2 + And the response "data.attributes.entries[0].data.attributes.note" has the same value as "ip_allowlist_nonempty_disabled.data.attributes.entries[0].data.attributes.note" + And the response "data.attributes.entries[0].data.type" is equal to "{{ ip_allowlist_nonempty_disabled.data.attributes.entries[0].data.type }}" + And the response "data.attributes.entries[1].data.attributes.note" has the same value as "ip_allowlist_nonempty_disabled.data.attributes.entries[1].data.attributes.note" + And the response "data.attributes.entries[1].data.type" is equal to "{{ ip_allowlist_nonempty_disabled.data.attributes.entries[1].data.type }}" + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Update IP Allowlist returns "Bad Request" response + Given new "UpdateIPAllowlist" request + And body with value {"data": {"type": "ip_allowlist", "attributes": {"enabled": true, "entries": []}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Update IP Allowlist returns "Not Found" response + Given new "UpdateIPAllowlist" request + And body with value {"data": {"attributes": {"entries": [{"data": {"attributes": {}, "type": "ip_allowlist_entry"}}]}, "type": "ip_allowlist"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @skip-terraform-config @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Update IP Allowlist returns "OK" response + Given the "ip_allowlist_empty_disabled" has no entries and is disabled + And new "UpdateIPAllowlist" request + And body with value {"data": {"attributes": {"entries": [{"data": {"attributes": {"note": "{{ unique }}", "cidr_block": "127.0.0.1"}, "type": "ip_allowlist_entry"}}], "enabled": false}, "type": "ip_allowlist"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "ip_allowlist" + And the response "data.attributes.entries" has length 1 + And the response "data.attributes.entries[0].data.attributes.note" is equal to "{{ unique }}" + And the response "data.attributes.entries[0].data.attributes.cidr_block" is equal to "127.0.0.1/32" + And the response "data.attributes.entries[0].data.type" is equal to "ip_allowlist_entry" + And the response "data.attributes.enabled" is equal to false diff --git a/test-runner-data/features/v2/key_management.feature b/test-runner-data/features/v2/key_management.feature new file mode 100644 index 0000000000..9ebc28dba7 --- /dev/null +++ b/test-runner-data/features/v2/key_management.feature @@ -0,0 +1,459 @@ +@endpoint(key-management) @endpoint(key-management-v2) +Feature: Key Management + Manage your Datadog API and application keys. You need an API key and an + application key for a user with the required permissions to interact with + these endpoints. Consult the following pages to view and manage your + keys: - [API Keys](https://app.datadoghq.com/organization-settings/api- + keys) - [Application Keys](https://app.datadoghq.com/personal- + settings/application-keys) + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "KeyManagement" API + + @generated @skip @team:DataDog/credentials-management + Scenario: Create a personal access token returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "CreatePersonalAccessToken" request + And body with value {"data": {"attributes": {"expires_at": "2025-12-31T23:59:59+00:00", "name": "My Personal Access Token", "scopes": ["dashboards_read", "dashboards_write"]}, "type": "personal_access_tokens"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: Create a personal access token returns "Created" response + Given a valid "appKeyAuth" key in the system + And new "CreatePersonalAccessToken" request + And body with value {"data": {"type": "personal_access_tokens", "attributes": {"name": "{{ unique }}", "scopes": ["dashboards_read"], "expires_at": "{{ timeISO('now+365d') }}"}}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "personal_access_tokens" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.scopes" is equal to ["dashboards_read"] + And the response "data.attributes" has field "key" + + @generated @skip @team:DataDog/credentials-management + Scenario: Create an API key returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "CreateAPIKey" request + And body with value {"data": {"attributes": {"name": "API Key for submitting metrics"}, "type": "api_keys"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/credentials-management + Scenario: Create an API key returns "Created" response + Given a valid "appKeyAuth" key in the system + And new "CreateAPIKey" request + And body with value {"data": {"type": "api_keys", "attributes": {"name": "{{ unique }}"}}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "api_keys" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @team:DataDog/credentials-management + Scenario: Create an Application key with scopes for current user returns "Created" response + Given a valid "appKeyAuth" key in the system + And new "CreateCurrentUserApplicationKey" request + And body with value {"data": {"type": "application_keys", "attributes": {"name": "{{ unique }}", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.scopes" is equal to ["dashboards_read", "dashboards_write", "dashboards_public_share"] + + @generated @skip @team:DataDog/credentials-management + Scenario: Create an application key for current user returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "CreateCurrentUserApplicationKey" request + And body with value {"data": {"attributes": {"name": "Application Key for managing dashboards", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}, "type": "application_keys"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/credentials-management + Scenario: Create an application key for current user returns "Created" response + Given a valid "appKeyAuth" key in the system + And new "CreateCurrentUserApplicationKey" request + And body with value {"data": {"type": "application_keys", "attributes": {"name": "{{ unique }}"}}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "application_keys" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @team:DataDog/credentials-management + Scenario: Delete an API key returns "No Content" response + Given a valid "appKeyAuth" key in the system + And there is a valid "api_key" in the system + And new "DeleteAPIKey" request + And request contains "api_key_id" parameter from "api_key.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/credentials-management + Scenario: Delete an API key returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "DeleteAPIKey" request + And request contains "api_key_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Delete an application key owned by current user returns "No Content" response + Given a valid "appKeyAuth" key in the system + And there is a valid "application_key" in the system + And new "DeleteCurrentUserApplicationKey" request + And request contains "app_key_id" parameter from "application_key.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/credentials-management + Scenario: Delete an application key owned by current user returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "DeleteCurrentUserApplicationKey" request + And request contains "app_key_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Delete an application key returns "No Content" response + Given a valid "appKeyAuth" key in the system + And there is a valid "application_key" in the system + And new "DeleteApplicationKey" request + And request contains "app_key_id" parameter from "application_key.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/credentials-management + Scenario: Delete an application key returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "DeleteApplicationKey" request + And request contains "app_key_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/credentials-management + Scenario: Edit an API key returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "UpdateAPIKey" request + And request contains "api_key_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "API Key for submitting metrics"}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "api_keys"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management + Scenario: Edit an API key returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "UpdateAPIKey" request + And request contains "api_key_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "API Key for submitting metrics"}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "api_keys"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Edit an API key returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "api_key" in the system + And new "UpdateAPIKey" request + And request contains "api_key_id" parameter from "api_key.data.id" + And body with value {"data": {"type": "api_keys", "id": "{{ api_key.data.id }}", "attributes": {"name": "{{ unique }}"}}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "api_keys" + And the response "data.id" is equal to "{{ api_key.data.id }}" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @generated @skip @team:DataDog/credentials-management + Scenario: Edit an application key owned by current user returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "UpdateCurrentUserApplicationKey" request + And request contains "app_key_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Application Key for managing dashboards", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "application_keys"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management + Scenario: Edit an application key owned by current user returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "UpdateCurrentUserApplicationKey" request + And request contains "app_key_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Application Key for managing dashboards", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "application_keys"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Edit an application key owned by current user returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "application_key" in the system + And new "UpdateCurrentUserApplicationKey" request + And request contains "app_key_id" parameter from "application_key.data.id" + And body with value {"data": {"id": "{{ application_key.data.id }}", "type": "application_keys", "attributes": {"name" : "{{ application_key.data.attributes.name }}-updated"}}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "application_keys" + And the response "data.id" is equal to "{{ application_key.data.id }}" + And the response "data.attributes.name" is equal to "{{ application_key.data.attributes.name }}-updated" + + @generated @skip @team:DataDog/credentials-management + Scenario: Edit an application key returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "UpdateApplicationKey" request + And request contains "app_key_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Application Key for managing dashboards", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "application_keys"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management + Scenario: Edit an application key returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "UpdateApplicationKey" request + And request contains "app_key_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Application Key for managing dashboards", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "application_keys"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Edit an application key returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "application_key" in the system + And new "UpdateApplicationKey" request + And request contains "app_key_id" parameter from "application_key.data.id" + And body with value {"data": {"id": "{{ application_key.data.id }}", "type": "application_keys", "attributes": {"name" : "{{ application_key.data.attributes.name }}-updated"}}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "application_keys" + And the response "data.id" is equal to "{{ application_key.data.id }}" + And the response "data.attributes.name" is equal to "{{ application_key.data.attributes.name }}-updated" + + @team:DataDog/credentials-management + Scenario: Get API key returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "GetAPIKey" request + And request contains "api_key_id" parameter with value "invalidId" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Get API key returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "api_key" in the system + And new "GetAPIKey" request + And request contains "api_key_id" parameter from "api_key.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "api_keys" + And the response "data.id" is equal to "{{ api_key.data.id }}" + And the response "data.attributes" has field "date_last_used" + + @generated @skip @team:DataDog/credentials-management + Scenario: Get a personal access token returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "GetPersonalAccessToken" request + And request contains "token_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: Get a personal access token returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "personal_access_token" in the system + And new "GetPersonalAccessToken" request + And request contains "token_id" parameter from "personal_access_token.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "personal_access_tokens" + And the response "data.id" has the same value as "personal_access_token.data.id" + + @generated @skip @team:DataDog/credentials-management + Scenario: Get all API keys returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListAPIKeys" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/credentials-management + Scenario: Get all API keys returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "api_key" in the system + And new "ListAPIKeys" request + And request contains "filter" parameter from "api_key.data.attributes.name" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "api_keys" + And the response "data[0].attributes" has field "date_last_used" + + @generated @skip @team:DataDog/credentials-management + Scenario: Get all access tokens returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListPersonalAccessTokens" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management + Scenario: Get all access tokens returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListPersonalAccessTokens" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/credentials-management + Scenario: Get all application keys owned by current user returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListCurrentUserApplicationKeys" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management + Scenario: Get all application keys owned by current user returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "ListCurrentUserApplicationKeys" request + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Get all application keys owned by current user returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListCurrentUserApplicationKeys" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "application_keys" + And the response "data[0].attributes" has field "last_used_at" + + @generated @skip @team:DataDog/credentials-management + Scenario: Get all application keys returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListApplicationKeys" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management + Scenario: Get all application keys returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "ListApplicationKeys" request + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Get all application keys returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "application_key" in the system + And new "ListApplicationKeys" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "application_keys" + And the response "data[0].attributes" has field "last_used_at" + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: Get all personal access tokens returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "personal_access_token" in the system + And new "ListPersonalAccessTokens" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "type" with value "personal_access_tokens" + + @generated @skip @team:DataDog/credentials-management + Scenario: Get an application key returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "GetApplicationKey" request + And request contains "app_key_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/credentials-management + Scenario: Get an application key returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "GetApplicationKey" request + And request contains "app_key_id" parameter with value "invalidId" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Get an application key returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "application_key" in the system + And new "GetApplicationKey" request + And request contains "app_key_id" parameter from "application_key.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "application_keys" + And the response "data.id" has the same value as "application_key.data.id" + And the response "data.attributes" has field "last_used_at" + + @team:DataDog/credentials-management + Scenario: Get one application key owned by current user returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "GetCurrentUserApplicationKey" request + And request contains "app_key_id" parameter with value "incorrectId" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management + Scenario: Get one application key owned by current user returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "application_key" in the system + And new "GetCurrentUserApplicationKey" request + And request contains "app_key_id" parameter from "application_key.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "application_keys" + And the response "data.id" is equal to "{{ application_key.data.id }}" + And the response "data.attributes.name" is equal to "{{ application_key.data.attributes.name }}" + And the response "data.attributes" has field "scopes" + And the response "data.attributes" has field "last_used_at" + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: Revoke a personal access token returns "No Content" response + Given a valid "appKeyAuth" key in the system + And there is a valid "personal_access_token" in the system + And new "RevokePersonalAccessToken" request + And request contains "token_id" parameter from "personal_access_token.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/credentials-management + Scenario: Revoke a personal access token returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "RevokePersonalAccessToken" request + And request contains "token_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/credentials-management + Scenario: Update a personal access token returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "UpdatePersonalAccessToken" request + And request contains "token_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Updated Personal Access Token", "scopes": ["dashboards_read", "dashboards_write"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "personal_access_tokens"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management + Scenario: Update a personal access token returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "UpdatePersonalAccessToken" request + And request contains "token_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Updated Personal Access Token", "scopes": ["dashboards_read", "dashboards_write"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "personal_access_tokens"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: Update a personal access token returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "personal_access_token" in the system + And new "UpdatePersonalAccessToken" request + And request contains "token_id" parameter from "personal_access_token.data.id" + And body with value {"data": {"type": "personal_access_tokens", "id": "{{ personal_access_token.data.id }}", "attributes": {"name": "{{ unique }}-updated"}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{ unique }}-updated" + + @generated @skip @team:DataDog/identity-platform + Scenario: Validate API and application keys returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ValidateAPIKey" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/identity-platform + Scenario: Validate API key returns "OK" response + Given operation "Validate" enabled + And new "Validate" request + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/llm_observability.feature b/test-runner-data/features/v2/llm_observability.feature new file mode 100644 index 0000000000..b1897f532b --- /dev/null +++ b/test-runner-data/features/v2/llm_observability.feature @@ -0,0 +1,1728 @@ +@endpoint(llm-observability) @endpoint(llm-observability-v2) +Feature: LLM Observability + Manage LLM Observability spans, data, projects, datasets, dataset records, + experiments, prompts, and annotations. + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "LLMObservability" API + And a valid "appKeyAuth" key in the system + + @skip @team:DataDog/ml-observability + Scenario: Add a display_block interaction returns "Created" response + Given operation "CreateLLMObsAnnotationQueueInteractions" enabled + And new "CreateLLMObsAnnotationQueueInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"interactions": [{"type": "display_block", "display_block": [{"type": "markdown", "content": "## Triage Instructions"}]}]}, "type": "interactions"}} + When the request is sent + Then the response status is 201 Created + + @skip @team:DataDog/ml-observability + Scenario: Add a display_block interaction with an image block missing url returns "Bad Request" response + Given operation "CreateLLMObsAnnotationQueueInteractions" enabled + And new "CreateLLMObsAnnotationQueueInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"interactions": [{"type": "display_block", "display_block": [{"type": "image"}]}]}, "type": "interactions"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Add annotation queue interactions returns "Bad Request" response + Given operation "CreateLLMObsAnnotationQueueInteractions" enabled + And new "CreateLLMObsAnnotationQueueInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"interactions": [{"content_id": "trace-abc-123", "type": "trace"}]}, "type": "interactions"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Add annotation queue interactions returns "Created" response + Given operation "CreateLLMObsAnnotationQueueInteractions" enabled + And new "CreateLLMObsAnnotationQueueInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"interactions": [{"content_id": "trace-abc-123", "type": "trace"}]}, "type": "interactions"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/ml-observability + Scenario: Add annotation queue interactions returns "Not Found" response + Given operation "CreateLLMObsAnnotationQueueInteractions" enabled + And new "CreateLLMObsAnnotationQueueInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"interactions": [{"content_id": "trace-abc-123", "type": "trace"}]}, "type": "interactions"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Aggregate LLM Observability experimentation returns "Bad Request" response + Given operation "AggregateLLMObsExperimentation" enabled + And new "AggregateLLMObsExperimentation" request + And body with value {"data": {"attributes": {"aggregate": {"compute": [{"metric": "score_value", "name": "avg_faithfulness"}], "dataset_version": null, "group_by": [{"field": "span_id"}], "indexes": ["experiment-evals"], "limit": 1000, "search": {"query": "@experiment_id:3fd6b5e0-8910-4b1c-a7d0-5b84de329012"}, "time": {"from": 1705312200000, "to": 1705315800000}}}, "type": "experimentation"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Aggregate LLM Observability experimentation returns "OK" response + Given operation "AggregateLLMObsExperimentation" enabled + And new "AggregateLLMObsExperimentation" request + And body with value {"data": {"attributes": {"aggregate": {"compute": [{"metric": "score_value", "name": "avg_faithfulness"}], "dataset_version": null, "group_by": [{"field": "span_id"}], "indexes": ["experiment-evals"], "limit": 1000, "search": {"query": "@experiment_id:3fd6b5e0-8910-4b1c-a7d0-5b84de329012"}, "time": {"from": 1705312200000, "to": 1705315800000}}}, "type": "experimentation"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Append records to an LLM Observability dataset returns "Bad Request" response + Given operation "CreateLLMObsDatasetRecords" enabled + And new "CreateLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"records": [{"expected_output": null, "input": null}]}, "type": "records"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Append records to an LLM Observability dataset returns "Created" response + Given operation "CreateLLMObsDatasetRecords" enabled + And new "CreateLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"records": [{"expected_output": null, "input": null}]}, "type": "records"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/ml-observability + Scenario: Append records to an LLM Observability dataset returns "Not Found" response + Given operation "CreateLLMObsDatasetRecords" enabled + And new "CreateLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"records": [{"expected_output": null, "input": null}]}, "type": "records"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Append records to an LLM Observability dataset returns "OK" response + Given operation "CreateLLMObsDatasetRecords" enabled + And new "CreateLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"records": [{"expected_output": null, "input": null}]}, "type": "records"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Batch update LLM Observability dataset records returns "Bad Request" response + Given operation "BatchUpdateLLMObsDataset" enabled + And new "BatchUpdateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"create_new_version": true, "delete_records": [], "insert_records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null, "tag_operations": {"add": [], "remove": [], "set": []}, "tags": []}], "tags": [], "update_records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null, "tag_operations": {"add": [], "remove": [], "set": []}}]}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Batch update LLM Observability dataset records returns "Not Found" response + Given operation "BatchUpdateLLMObsDataset" enabled + And new "BatchUpdateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"create_new_version": true, "delete_records": [], "insert_records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null, "tag_operations": {"add": [], "remove": [], "set": []}, "tags": []}], "tags": [], "update_records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null, "tag_operations": {"add": [], "remove": [], "set": []}}]}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Batch update LLM Observability dataset records returns "OK" response + Given operation "BatchUpdateLLMObsDataset" enabled + And new "BatchUpdateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"create_new_version": true, "delete_records": [], "insert_records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null, "tag_operations": {"add": [], "remove": [], "set": []}, "tags": []}], "tags": [], "update_records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null, "tag_operations": {"add": [], "remove": [], "set": []}}]}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Batch update LLM Observability dataset records returns "Payload Too Large" response + Given operation "BatchUpdateLLMObsDataset" enabled + And new "BatchUpdateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"create_new_version": true, "delete_records": [], "insert_records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null, "tag_operations": {"add": [], "remove": [], "set": []}, "tags": []}], "tags": [], "update_records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null, "tag_operations": {"add": [], "remove": [], "set": []}}]}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 413 Payload Too Large + + @generated @skip @team:DataDog/ml-observability + Scenario: Clone an LLM Observability dataset returns "Bad Request" response + Given operation "CloneLLMObsDataset" enabled + And new "CloneLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Clone of the original dataset for experimentation.", "name": "My cloned dataset"}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Clone an LLM Observability dataset returns "Not Found" response + Given operation "CloneLLMObsDataset" enabled + And new "CloneLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Clone of the original dataset for experimentation.", "name": "My cloned dataset"}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Clone an LLM Observability dataset returns "OK" response + Given operation "CloneLLMObsDataset" enabled + And new "CloneLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Clone of the original dataset for experimentation.", "name": "My cloned dataset"}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ml-observability + Scenario: Create a new LLM Observability prompt version returns "Bad Request" response + Given there is a valid "prompt" in the system + And operation "CreateLLMObsPromptVersion" enabled + And new "CreateLLMObsPromptVersion" request + And request contains "prompt_id" parameter from "prompt.data.attributes.prompt_id" + And body with value {"data": {"attributes": {"template": " "}, "type": "prompt-template-versions"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/ml-observability + Scenario: Create a new LLM Observability prompt version returns "Not Found" response + Given operation "CreateLLMObsPromptVersion" enabled + And new "CreateLLMObsPromptVersion" request + And request contains "prompt_id" parameter with value "nonexistent-prompt" + And body with value {"data": {"attributes": {"env_ids": [], "labels": [], "template": [{"content": "Hello v2", "role": "user"}]}, "type": "prompt-template-versions"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/ml-observability + Scenario: Create a new LLM Observability prompt version returns "OK" response + Given there is a valid "prompt" in the system + And operation "CreateLLMObsPromptVersion" enabled + And new "CreateLLMObsPromptVersion" request + And request contains "prompt_id" parameter from "prompt.data.attributes.prompt_id" + And body with value {"data": {"attributes": {"template": [{"content": "You are a concise customer support assistant for {{ '{{company_name}}' }}.", "role": "system"}, {"content": "Answer {{ '{{customer_name}}' }}'s question: {{ '{{question}}' }}", "role": "user"}]}, "type": "prompt-template-versions"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability annotation queue returns "Bad Request" response + Given operation "CreateLLMObsAnnotationQueue" enabled + And new "CreateLLMObsAnnotationQueue" request + And body with value {"data": {"attributes": {"annotation_schema": {"label_schemas": [{"description": "Rating of the response quality.", "has_assessment": false, "has_reasoning": false, "id": "abc-123", "is_assessment": false, "is_integer": false, "is_required": true, "max": 5.0, "min": 0.0, "name": "quality", "type": "score", "values": ["good", "bad", "neutral"]}]}, "description": "Queue for annotating customer support traces", "name": "My annotation queue", "project_id": "00000000-0000-0000-0000-000000000002"}, "type": "queues"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability annotation queue returns "Created" response + Given operation "CreateLLMObsAnnotationQueue" enabled + And new "CreateLLMObsAnnotationQueue" request + And body with value {"data": {"attributes": {"annotation_schema": {"label_schemas": [{"description": "Rating of the response quality.", "has_assessment": false, "has_reasoning": false, "id": "abc-123", "is_assessment": false, "is_integer": false, "is_required": true, "max": 5.0, "min": 0.0, "name": "quality", "type": "score", "values": ["good", "bad", "neutral"]}]}, "description": "Queue for annotating customer support traces", "name": "My annotation queue", "project_id": "00000000-0000-0000-0000-000000000002"}, "type": "queues"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability dataset returns "Bad Request" response + Given operation "CreateLLMObsDataset" enabled + And new "CreateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "My LLM Dataset"}, "type": "datasets"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability dataset returns "Created" response + Given operation "CreateLLMObsDataset" enabled + And new "CreateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "My LLM Dataset"}, "type": "datasets"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability dataset returns "Not Found" response + Given operation "CreateLLMObsDataset" enabled + And new "CreateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "My LLM Dataset"}, "type": "datasets"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability dataset returns "OK" response + Given operation "CreateLLMObsDataset" enabled + And new "CreateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "My LLM Dataset"}, "type": "datasets"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability experiment returns "Bad Request" response + Given operation "CreateLLMObsExperiment" enabled + And new "CreateLLMObsExperiment" request + And body with value {"data": {"attributes": {"dataset_id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "name": "My Experiment v1", "parent_experiment_id": "3fd6b5e0-8910-4b1c-a7d0-5b84de329012", "project_id": "a33671aa-24fd-4dcd-9b33-a8ec7dde7751"}, "type": "experiments"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability experiment returns "Created" response + Given operation "CreateLLMObsExperiment" enabled + And new "CreateLLMObsExperiment" request + And body with value {"data": {"attributes": {"dataset_id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "name": "My Experiment v1", "parent_experiment_id": "3fd6b5e0-8910-4b1c-a7d0-5b84de329012", "project_id": "a33671aa-24fd-4dcd-9b33-a8ec7dde7751"}, "type": "experiments"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability experiment returns "OK" response + Given operation "CreateLLMObsExperiment" enabled + And new "CreateLLMObsExperiment" request + And body with value {"data": {"attributes": {"dataset_id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "name": "My Experiment v1", "parent_experiment_id": "3fd6b5e0-8910-4b1c-a7d0-5b84de329012", "project_id": "a33671aa-24fd-4dcd-9b33-a8ec7dde7751"}, "type": "experiments"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability project returns "Bad Request" response + Given operation "CreateLLMObsProject" enabled + And new "CreateLLMObsProject" request + And body with value {"data": {"attributes": {"name": "My LLM Project"}, "type": "projects"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability project returns "Created" response + Given operation "CreateLLMObsProject" enabled + And new "CreateLLMObsProject" request + And body with value {"data": {"attributes": {"name": "My LLM Project"}, "type": "projects"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/ml-observability + Scenario: Create an LLM Observability project returns "OK" response + Given operation "CreateLLMObsProject" enabled + And new "CreateLLMObsProject" request + And body with value {"data": {"attributes": {"name": "My LLM Project"}, "type": "projects"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ml-observability + Scenario: Create an LLM Observability prompt returns "Bad Request" response + Given operation "CreateLLMObsPrompt" enabled + And new "CreateLLMObsPrompt" request + And body with value {"data": {"attributes": {"prompt_id": "{{ unique }}", "template": " "}, "type": "prompt-templates"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/ml-observability + Scenario: Create an LLM Observability prompt returns "Conflict" response + Given there is a valid "prompt" in the system + And operation "CreateLLMObsPrompt" enabled + And new "CreateLLMObsPrompt" request + And body with value {"data": {"attributes": {"env_ids": [], "labels": [], "prompt_id": "{{ prompt.data.attributes.prompt_id }}", "template": [{"content": "Hello", "role": "user"}]}, "type": "prompt-templates"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/ml-observability + Scenario: Create an LLM Observability prompt returns "OK" response + Given operation "CreateLLMObsPrompt" enabled + And new "CreateLLMObsPrompt" request + And body with value {"data": {"attributes": {"prompt_id": "{{ unique }}", "title": "Customer Support Assistant", "template": [{"content": "You are a helpful customer support assistant for {{ '{{company_name}}' }}.", "role": "system"}, {"content": "Help {{ '{{customer_name}}' }} with this question: {{ '{{question}}' }}", "role": "user"}]}, "type": "prompt-templates"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update a custom evaluator configuration returns "Bad Request" response + Given operation "UpdateLLMObsCustomEvalConfig" enabled + And new "UpdateLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "Custom", "eval_name": "my-custom-evaluator", "llm_judge_config": {"assessment_criteria": {"max_threshold": 1.0, "min_threshold": 0.7, "pass_values": ["pass", "yes"], "pass_when": true}, "context_query": "@input.context", "inference_params": {"frequency_penalty": 0.0, "max_tokens": 1024, "presence_penalty": 0.0, "temperature": 0.7, "top_k": 50, "top_p": 1.0}, "last_used_library_prompt_template_name": "sentiment-analysis-v1", "modified_library_prompt_template": false, "output_schema": null, "parsing_type": "structured_output", "prompt_template": [{"content": "Rate the quality of the following response:", "contents": [{"type": "text", "value": {"text": "What is the sentiment of this review?", "tool_call": {"arguments": "{\"location\": \"San Francisco\"}", "id": "call_abc123", "name": "get_weather", "type": "function"}, "tool_call_result": {"name": "get_weather", "result": "sunny, 72F", "tool_id": "call_abc123", "type": "function"}}}], "role": "user"}], "target_query": "@output.value", "user_specified_json_post_processing_function": null}, "llm_provider": {"bedrock": {"inference_profile": "arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123", "region": "us-east-1"}, "integration_account_id": "my-account-id", "integration_provider": "openai", "model_name": "gpt-4o", "vertex_ai": {"location": "us-central1", "project": "my-gcp-project"}}, "target": {"application_name": "my-llm-app", "enabled": true, "eval_scope": "span", "experiment_project_ids": [], "filter": "@service:my-service", "root_spans_only": true, "sampling_percentage": 50.0}}, "id": "my-custom-evaluator", "type": "evaluator_config"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update a custom evaluator configuration returns "Not Found" response + Given operation "UpdateLLMObsCustomEvalConfig" enabled + And new "UpdateLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "Custom", "eval_name": "my-custom-evaluator", "llm_judge_config": {"assessment_criteria": {"max_threshold": 1.0, "min_threshold": 0.7, "pass_values": ["pass", "yes"], "pass_when": true}, "context_query": "@input.context", "inference_params": {"frequency_penalty": 0.0, "max_tokens": 1024, "presence_penalty": 0.0, "temperature": 0.7, "top_k": 50, "top_p": 1.0}, "last_used_library_prompt_template_name": "sentiment-analysis-v1", "modified_library_prompt_template": false, "output_schema": null, "parsing_type": "structured_output", "prompt_template": [{"content": "Rate the quality of the following response:", "contents": [{"type": "text", "value": {"text": "What is the sentiment of this review?", "tool_call": {"arguments": "{\"location\": \"San Francisco\"}", "id": "call_abc123", "name": "get_weather", "type": "function"}, "tool_call_result": {"name": "get_weather", "result": "sunny, 72F", "tool_id": "call_abc123", "type": "function"}}}], "role": "user"}], "target_query": "@output.value", "user_specified_json_post_processing_function": null}, "llm_provider": {"bedrock": {"inference_profile": "arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123", "region": "us-east-1"}, "integration_account_id": "my-account-id", "integration_provider": "openai", "model_name": "gpt-4o", "vertex_ai": {"location": "us-central1", "project": "my-gcp-project"}}, "target": {"application_name": "my-llm-app", "enabled": true, "eval_scope": "span", "experiment_project_ids": [], "filter": "@service:my-service", "root_spans_only": true, "sampling_percentage": 50.0}}, "id": "my-custom-evaluator", "type": "evaluator_config"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update a custom evaluator configuration returns "OK" response + Given operation "UpdateLLMObsCustomEvalConfig" enabled + And new "UpdateLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "Custom", "eval_name": "my-custom-evaluator", "llm_judge_config": {"assessment_criteria": {"max_threshold": 1.0, "min_threshold": 0.7, "pass_values": ["pass", "yes"], "pass_when": true}, "context_query": "@input.context", "inference_params": {"frequency_penalty": 0.0, "max_tokens": 1024, "presence_penalty": 0.0, "temperature": 0.7, "top_k": 50, "top_p": 1.0}, "last_used_library_prompt_template_name": "sentiment-analysis-v1", "modified_library_prompt_template": false, "output_schema": null, "parsing_type": "structured_output", "prompt_template": [{"content": "Rate the quality of the following response:", "contents": [{"type": "text", "value": {"text": "What is the sentiment of this review?", "tool_call": {"arguments": "{\"location\": \"San Francisco\"}", "id": "call_abc123", "name": "get_weather", "type": "function"}, "tool_call_result": {"name": "get_weather", "result": "sunny, 72F", "tool_id": "call_abc123", "type": "function"}}}], "role": "user"}], "target_query": "@output.value", "user_specified_json_post_processing_function": null}, "llm_provider": {"bedrock": {"inference_profile": "arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123", "region": "us-east-1"}, "integration_account_id": "my-account-id", "integration_provider": "openai", "model_name": "gpt-4o", "vertex_ai": {"location": "us-central1", "project": "my-gcp-project"}}, "target": {"application_name": "my-llm-app", "enabled": true, "eval_scope": "span", "experiment_project_ids": [], "filter": "@service:my-service", "root_spans_only": true, "sampling_percentage": 50.0}}, "id": "my-custom-evaluator", "type": "evaluator_config"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update a custom evaluator configuration returns "Unprocessable Entity" response + Given operation "UpdateLLMObsCustomEvalConfig" enabled + And new "UpdateLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "Custom", "eval_name": "my-custom-evaluator", "llm_judge_config": {"assessment_criteria": {"max_threshold": 1.0, "min_threshold": 0.7, "pass_values": ["pass", "yes"], "pass_when": true}, "context_query": "@input.context", "inference_params": {"frequency_penalty": 0.0, "max_tokens": 1024, "presence_penalty": 0.0, "temperature": 0.7, "top_k": 50, "top_p": 1.0}, "last_used_library_prompt_template_name": "sentiment-analysis-v1", "modified_library_prompt_template": false, "output_schema": null, "parsing_type": "structured_output", "prompt_template": [{"content": "Rate the quality of the following response:", "contents": [{"type": "text", "value": {"text": "What is the sentiment of this review?", "tool_call": {"arguments": "{\"location\": \"San Francisco\"}", "id": "call_abc123", "name": "get_weather", "type": "function"}, "tool_call_result": {"name": "get_weather", "result": "sunny, 72F", "tool_id": "call_abc123", "type": "function"}}}], "role": "user"}], "target_query": "@output.value", "user_specified_json_post_processing_function": null}, "llm_provider": {"bedrock": {"inference_profile": "arn:aws:bedrock:us-east-1:123456789012:application-inference-profile/abc123", "region": "us-east-1"}, "integration_account_id": "my-account-id", "integration_provider": "openai", "model_name": "gpt-4o", "vertex_ai": {"location": "us-central1", "project": "my-gcp-project"}}, "target": {"application_name": "my-llm-app", "enabled": true, "eval_scope": "span", "experiment_project_ids": [], "filter": "@service:my-service", "root_spans_only": true, "sampling_percentage": 50.0}}, "id": "my-custom-evaluator", "type": "evaluator_config"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update a patterns configuration returns "Bad Request" response + Given operation "UpsertLLMObsPatternsConfig" enabled + And new "UpsertLLMObsPatternsConfig" request + And body with value {"data": {"attributes": {"account_id": "1000000001", "config_id": "a7c8d9e0-1234-5678-9abc-def012345678", "evp_query": "@ml_app:support-bot", "hierarchy_depth": 2, "integration_provider": "openai", "model_name": "gpt-4o", "name": "Support chatbot topics", "num_records": 1000, "sampling_ratio": 0.1, "scope": "", "template": ""}, "type": "topic_discovery_configs"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update a patterns configuration returns "Not Found" response + Given operation "UpsertLLMObsPatternsConfig" enabled + And new "UpsertLLMObsPatternsConfig" request + And body with value {"data": {"attributes": {"account_id": "1000000001", "config_id": "a7c8d9e0-1234-5678-9abc-def012345678", "evp_query": "@ml_app:support-bot", "hierarchy_depth": 2, "integration_provider": "openai", "model_name": "gpt-4o", "name": "Support chatbot topics", "num_records": 1000, "sampling_ratio": 0.1, "scope": "", "template": ""}, "type": "topic_discovery_configs"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update a patterns configuration returns "OK" response + Given operation "UpsertLLMObsPatternsConfig" enabled + And new "UpsertLLMObsPatternsConfig" request + And body with value {"data": {"attributes": {"account_id": "1000000001", "config_id": "a7c8d9e0-1234-5678-9abc-def012345678", "evp_query": "@ml_app:support-bot", "hierarchy_depth": 2, "integration_provider": "openai", "model_name": "gpt-4o", "name": "Support chatbot topics", "num_records": 1000, "sampling_ratio": 0.1, "scope": "", "template": ""}, "type": "topic_discovery_configs"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update annotations returns "Bad Request" response + Given operation "UpsertLLMObsAnnotations" enabled + And new "UpsertLLMObsAnnotations" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotations": [{"interaction_id": "00000000-0000-0000-0000-000000000001", "label_values": [{"label_schema_id": "abc-123", "value": "good"}, {"label_schema_id": "ef56gh78", "value": "positive"}]}]}, "type": "annotations"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update annotations returns "Not Found — the queue does not exist." response + Given operation "UpsertLLMObsAnnotations" enabled + And new "UpsertLLMObsAnnotations" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotations": [{"interaction_id": "00000000-0000-0000-0000-000000000001", "label_values": [{"label_schema_id": "abc-123", "value": "good"}, {"label_schema_id": "ef56gh78", "value": "positive"}]}]}, "type": "annotations"}} + When the request is sent + Then the response status is 404 Not Found — the queue does not exist. + + @generated @skip @team:DataDog/ml-observability + Scenario: Create or update annotations returns "OK — annotations created or updated. Per-item errors are listed in `errors`." response + Given operation "UpsertLLMObsAnnotations" enabled + And new "UpsertLLMObsAnnotations" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotations": [{"interaction_id": "00000000-0000-0000-0000-000000000001", "label_values": [{"label_schema_id": "abc-123", "value": "good"}, {"label_schema_id": "ef56gh78", "value": "positive"}]}]}, "type": "annotations"}} + When the request is sent + Then the response status is 200 OK — annotations created or updated. Per-item errors are listed in `errors`. + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability data returns "Accepted" response + Given operation "DeleteLLMObsData" enabled + And new "DeleteLLMObsData" request + And body with value {"data": {"attributes": {"delay": 0, "from": 1705314600000, "query": {"query": "@trace_id:abc123def456"}, "to": 1705315200000}, "type": "create_deletion_req"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability data returns "Bad Request" response + Given operation "DeleteLLMObsData" enabled + And new "DeleteLLMObsData" request + And body with value {"data": {"attributes": {"delay": 0, "from": 1705314600000, "query": {"query": "@trace_id:abc123def456"}, "to": 1705315200000}, "type": "create_deletion_req"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability dataset records returns "Bad Request" response + Given operation "DeleteLLMObsDatasetRecords" enabled + And new "DeleteLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"record_ids": ["rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c"]}, "type": "records"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability dataset records returns "No Content" response + Given operation "DeleteLLMObsDatasetRecords" enabled + And new "DeleteLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"record_ids": ["rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c"]}, "type": "records"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability dataset records returns "Not Found" response + Given operation "DeleteLLMObsDatasetRecords" enabled + And new "DeleteLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"record_ids": ["rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c"]}, "type": "records"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability datasets returns "Bad Request" response + Given operation "DeleteLLMObsDatasets" enabled + And new "DeleteLLMObsDatasets" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dataset_ids": ["9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d"]}, "type": "datasets"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability datasets returns "No Content" response + Given operation "DeleteLLMObsDatasets" enabled + And new "DeleteLLMObsDatasets" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dataset_ids": ["9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d"]}, "type": "datasets"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability datasets returns "Not Found" response + Given operation "DeleteLLMObsDatasets" enabled + And new "DeleteLLMObsDatasets" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dataset_ids": ["9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d"]}, "type": "datasets"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability experiments returns "Bad Request" response + Given operation "DeleteLLMObsExperiments" enabled + And new "DeleteLLMObsExperiments" request + And body with value {"data": {"attributes": {"experiment_ids": ["3fd6b5e0-8910-4b1c-a7d0-5b84de329012"]}, "type": "experiments"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability experiments returns "No Content" response + Given operation "DeleteLLMObsExperiments" enabled + And new "DeleteLLMObsExperiments" request + And body with value {"data": {"attributes": {"experiment_ids": ["3fd6b5e0-8910-4b1c-a7d0-5b84de329012"]}, "type": "experiments"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability projects returns "Bad Request" response + Given operation "DeleteLLMObsProjects" enabled + And new "DeleteLLMObsProjects" request + And body with value {"data": {"attributes": {"project_ids": ["a33671aa-24fd-4dcd-9b33-a8ec7dde7751"]}, "type": "projects"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete LLM Observability projects returns "No Content" response + Given operation "DeleteLLMObsProjects" enabled + And new "DeleteLLMObsProjects" request + And body with value {"data": {"attributes": {"project_ids": ["a33671aa-24fd-4dcd-9b33-a8ec7dde7751"]}, "type": "projects"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete a custom evaluator configuration returns "Bad Request" response + Given operation "DeleteLLMObsCustomEvalConfig" enabled + And new "DeleteLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete a custom evaluator configuration returns "No Content" response + Given operation "DeleteLLMObsCustomEvalConfig" enabled + And new "DeleteLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete a custom evaluator configuration returns "Not Found" response + Given operation "DeleteLLMObsCustomEvalConfig" enabled + And new "DeleteLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete a patterns configuration returns "Bad Request" response + Given operation "DeleteLLMObsPatternsConfig" enabled + And new "DeleteLLMObsPatternsConfig" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete a patterns configuration returns "No Content" response + Given operation "DeleteLLMObsPatternsConfig" enabled + And new "DeleteLLMObsPatternsConfig" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete a patterns configuration returns "Not Found" response + Given operation "DeleteLLMObsPatternsConfig" enabled + And new "DeleteLLMObsPatternsConfig" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete an LLM Observability annotation queue returns "No Content" response + Given operation "DeleteLLMObsAnnotationQueue" enabled + And new "DeleteLLMObsAnnotationQueue" request + And request contains "queue_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete an LLM Observability annotation queue returns "Not Found" response + Given operation "DeleteLLMObsAnnotationQueue" enabled + And new "DeleteLLMObsAnnotationQueue" request + And request contains "queue_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/ml-observability + Scenario: Delete an LLM Observability prompt returns "Not Found" response + Given operation "DeleteLLMObsPrompt" enabled + And new "DeleteLLMObsPrompt" request + And request contains "prompt_id" parameter with value "nonexistent-prompt" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/ml-observability + Scenario: Delete an LLM Observability prompt returns "OK" response + Given there is a valid "prompt" in the system + And operation "DeleteLLMObsPrompt" enabled + And new "DeleteLLMObsPrompt" request + And request contains "prompt_id" parameter from "prompt.data.attributes.prompt_id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete annotation queue interactions returns "Bad Request" response + Given operation "DeleteLLMObsAnnotationQueueInteractions" enabled + And new "DeleteLLMObsAnnotationQueueInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"interaction_ids": ["00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001"]}, "type": "interactions"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete annotation queue interactions returns "No Content" response + Given operation "DeleteLLMObsAnnotationQueueInteractions" enabled + And new "DeleteLLMObsAnnotationQueueInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"interaction_ids": ["00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001"]}, "type": "interactions"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete annotation queue interactions returns "Not Found" response + Given operation "DeleteLLMObsAnnotationQueueInteractions" enabled + And new "DeleteLLMObsAnnotationQueueInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"interaction_ids": ["00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001"]}, "type": "interactions"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete annotations returns "Bad Request" response + Given operation "DeleteLLMObsAnnotations" enabled + And new "DeleteLLMObsAnnotations" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotation_ids": ["00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001"]}, "type": "annotations"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete annotations returns "Not Found — the queue does not exist." response + Given operation "DeleteLLMObsAnnotations" enabled + And new "DeleteLLMObsAnnotations" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotation_ids": ["00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001"]}, "type": "annotations"}} + When the request is sent + Then the response status is 404 Not Found — the queue does not exist. + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete annotations returns "OK — annotations deleted. Errors for annotations that could not be deleted are listed in `errors`." response + Given operation "DeleteLLMObsAnnotations" enabled + And new "DeleteLLMObsAnnotations" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotation_ids": ["00000000-0000-0000-0000-000000000000", "00000000-0000-0000-0000-000000000001"]}, "type": "annotations"}} + When the request is sent + Then the response status is 200 OK — annotations deleted. Errors for annotations that could not be deleted are listed in `errors`. + + @generated @skip @team:DataDog/ml-observability + Scenario: Export an LLM Observability dataset returns "Bad Request" response + Given operation "ExportLLMObsDataset" enabled + And new "ExportLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Export an LLM Observability dataset returns "Not Found" response + Given operation "ExportLLMObsDataset" enabled + And new "ExportLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Export an LLM Observability dataset returns "OK" response + Given operation "ExportLLMObsDataset" enabled + And new "ExportLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get LLM Observability dataset draft state returns "Bad Request" response + Given operation "GetLLMObsDatasetDraftState" enabled + And new "GetLLMObsDatasetDraftState" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Get LLM Observability dataset draft state returns "Not Found" response + Given operation "GetLLMObsDatasetDraftState" enabled + And new "GetLLMObsDatasetDraftState" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Get LLM Observability dataset draft state returns "OK" response + Given operation "GetLLMObsDatasetDraftState" enabled + And new "GetLLMObsDatasetDraftState" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get a custom evaluator configuration returns "Bad Request" response + Given operation "GetLLMObsCustomEvalConfig" enabled + And new "GetLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Get a custom evaluator configuration returns "Not Found" response + Given operation "GetLLMObsCustomEvalConfig" enabled + And new "GetLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Get a custom evaluator configuration returns "OK" response + Given operation "GetLLMObsCustomEvalConfig" enabled + And new "GetLLMObsCustomEvalConfig" request + And request contains "eval_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get a patterns configuration returns "Bad Request" response + Given operation "GetLLMObsPatternsConfig" enabled + And new "GetLLMObsPatternsConfig" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Get a patterns configuration returns "Not Found" response + Given operation "GetLLMObsPatternsConfig" enabled + And new "GetLLMObsPatternsConfig" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Get a patterns configuration returns "OK" response + Given operation "GetLLMObsPatternsConfig" enabled + And new "GetLLMObsPatternsConfig" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get a specific LLM Observability prompt version returns "Bad Request" response + Given operation "GetLLMObsPromptVersion" enabled + And new "GetLLMObsPromptVersion" request + And request contains "prompt_id" parameter from "REPLACE.ME" + And request contains "version" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/ml-observability + Scenario: Get a specific LLM Observability prompt version returns "Not Found" response + Given operation "GetLLMObsPromptVersion" enabled + And new "GetLLMObsPromptVersion" request + And request contains "prompt_id" parameter with value "nonexistent-prompt" + And request contains "version" parameter with value 1 + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/ml-observability + Scenario: Get a specific LLM Observability prompt version returns "OK" response + Given there is a valid "prompt" in the system + And there is a valid "prompt_version" in the system + And operation "GetLLMObsPromptVersion" enabled + And new "GetLLMObsPromptVersion" request + And request contains "prompt_id" parameter from "prompt.data.attributes.prompt_id" + And request contains "version" parameter from "prompt_version.data.attributes.version" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ml-observability + Scenario: Get an LLM Observability prompt returns "Not Found" response + Given operation "GetLLMObsPrompt" enabled + And new "GetLLMObsPrompt" request + And request contains "prompt_id" parameter with value "nonexistent-prompt" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/ml-observability + Scenario: Get an LLM Observability prompt returns "OK" response + Given there is a valid "prompt" in the system + And operation "GetLLMObsPrompt" enabled + And new "GetLLMObsPrompt" request + And request contains "prompt_id" parameter from "prompt.data.attributes.prompt_id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get annotated interactions by content IDs returns "Bad Request" response + Given operation "GetLLMObsAnnotatedInteractionsByTraceIDs" enabled + And new "GetLLMObsAnnotatedInteractionsByTraceIDs" request + And request contains "contentIds" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Get annotated interactions by content IDs returns "OK" response + Given operation "GetLLMObsAnnotatedInteractionsByTraceIDs" enabled + And new "GetLLMObsAnnotatedInteractionsByTraceIDs" request + And request contains "contentIds" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get annotated queue interactions returns "Bad Request" response + Given operation "GetLLMObsAnnotatedInteractions" enabled + And new "GetLLMObsAnnotatedInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Get annotated queue interactions returns "Not Found" response + Given operation "GetLLMObsAnnotatedInteractions" enabled + And new "GetLLMObsAnnotatedInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Get annotated queue interactions returns "OK" response + Given operation "GetLLMObsAnnotatedInteractions" enabled + And new "GetLLMObsAnnotatedInteractions" request + And request contains "queue_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get annotation queue label schema returns "Not Found" response + Given operation "GetLLMObsAnnotationQueueLabelSchema" enabled + And new "GetLLMObsAnnotationQueueLabelSchema" request + And request contains "queue_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Get annotation queue label schema returns "OK" response + Given operation "GetLLMObsAnnotationQueueLabelSchema" enabled + And new "GetLLMObsAnnotationQueueLabelSchema" request + And request contains "queue_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get patterns run status returns "Bad Request" response + Given operation "GetLLMObsPatternsRunStatus" enabled + And new "GetLLMObsPatternsRunStatus" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Get patterns run status returns "Not Found" response + Given operation "GetLLMObsPatternsRunStatus" enabled + And new "GetLLMObsPatternsRunStatus" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Get patterns run status returns "OK" response + Given operation "GetLLMObsPatternsRunStatus" enabled + And new "GetLLMObsPatternsRunStatus" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability annotation queues returns "Bad Request" response + Given operation "ListLLMObsAnnotationQueues" enabled + And new "ListLLMObsAnnotationQueues" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability annotation queues returns "OK" response + Given operation "ListLLMObsAnnotationQueues" enabled + And new "ListLLMObsAnnotationQueues" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability dataset records returns "Bad Request" response + Given operation "ListLLMObsDatasetRecords" enabled + And new "ListLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability dataset records returns "Not Found" response + Given operation "ListLLMObsDatasetRecords" enabled + And new "ListLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability dataset records returns "OK" response + Given operation "ListLLMObsDatasetRecords" enabled + And new "ListLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability dataset versions returns "Bad Request" response + Given operation "ListLLMObsDatasetVersions" enabled + And new "ListLLMObsDatasetVersions" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability dataset versions returns "Not Found" response + Given operation "ListLLMObsDatasetVersions" enabled + And new "ListLLMObsDatasetVersions" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability dataset versions returns "OK" response + Given operation "ListLLMObsDatasetVersions" enabled + And new "ListLLMObsDatasetVersions" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability datasets returns "Bad Request" response + Given operation "ListLLMObsDatasets" enabled + And new "ListLLMObsDatasets" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability datasets returns "Not Found" response + Given operation "ListLLMObsDatasets" enabled + And new "ListLLMObsDatasets" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability datasets returns "OK" response + Given operation "ListLLMObsDatasets" enabled + And new "ListLLMObsDatasets" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability experiment events (v2) returns "Bad Request" response + Given operation "ListLLMObsExperimentEventsV2" enabled + And new "ListLLMObsExperimentEventsV2" request + And request contains "experiment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability experiment events (v2) returns "Not Found" response + Given operation "ListLLMObsExperimentEventsV2" enabled + And new "ListLLMObsExperimentEventsV2" request + And request contains "experiment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability experiment events (v2) returns "OK" response + Given operation "ListLLMObsExperimentEventsV2" enabled + And new "ListLLMObsExperimentEventsV2" request + And request contains "experiment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability experiment spans (v1) returns "Bad Request" response + Given operation "ListLLMObsExperimentEventsV1" enabled + And new "ListLLMObsExperimentEventsV1" request + And request contains "experiment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability experiment spans (v1) returns "Not Found" response + Given operation "ListLLMObsExperimentEventsV1" enabled + And new "ListLLMObsExperimentEventsV1" request + And request contains "experiment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability experiment spans (v1) returns "OK" response + Given operation "ListLLMObsExperimentEventsV1" enabled + And new "ListLLMObsExperimentEventsV1" request + And request contains "experiment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability experiments returns "Bad Request" response + Given operation "ListLLMObsExperiments" enabled + And new "ListLLMObsExperiments" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability experiments returns "OK" response + Given operation "ListLLMObsExperiments" enabled + And new "ListLLMObsExperiments" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability projects returns "Bad Request" response + Given operation "ListLLMObsProjects" enabled + And new "ListLLMObsProjects" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability projects returns "OK" response + Given operation "ListLLMObsProjects" enabled + And new "ListLLMObsProjects" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ml-observability + Scenario: List LLM Observability prompts returns "OK" response + Given there is a valid "prompt" in the system + And operation "ListLLMObsPrompts" enabled + And new "ListLLMObsPrompts" request + And request contains "filter[prompt_id]" parameter from "prompt.data.attributes.prompt_id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability spans returns "Bad Request" response + Given operation "ListLLMObsSpans" enabled + And new "ListLLMObsSpans" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM Observability spans returns "OK" response + Given operation "ListLLMObsSpans" enabled + And new "ListLLMObsSpans" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM integration accounts returns "Bad Request" response + Given operation "ListLLMObsIntegrationAccounts" enabled + And new "ListLLMObsIntegrationAccounts" request + And request contains "integration" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM integration accounts returns "OK" response + Given operation "ListLLMObsIntegrationAccounts" enabled + And new "ListLLMObsIntegrationAccounts" request + And request contains "integration" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM integration models returns "Bad Request" response + Given operation "ListLLMObsIntegrationModels" enabled + And new "ListLLMObsIntegrationModels" request + And request contains "integration" parameter from "REPLACE.ME" + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List LLM integration models returns "OK" response + Given operation "ListLLMObsIntegrationModels" enabled + And new "ListLLMObsIntegrationModels" request + And request contains "integration" parameter from "REPLACE.ME" + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List custom evaluator configurations returns "OK" response + Given operation "ListLLMObsCustomEvalConfigs" enabled + And new "ListLLMObsCustomEvalConfigs" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List events for an LLM Observability experiment returns "Bad Request" response + Given operation "ListLLMObsExperimentEvents" enabled + And new "ListLLMObsExperimentEvents" request + And request contains "experiment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List events for an LLM Observability experiment returns "Not Found" response + Given operation "ListLLMObsExperimentEvents" enabled + And new "ListLLMObsExperimentEvents" request + And request contains "experiment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List events for an LLM Observability experiment returns "OK" response + Given operation "ListLLMObsExperimentEvents" enabled + And new "ListLLMObsExperimentEvents" request + And request contains "experiment_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns clustered points returns "Bad Request" response + Given operation "ListLLMObsPatternsClusteredPoints" enabled + And new "ListLLMObsPatternsClusteredPoints" request + And request contains "topic_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns clustered points returns "Not Found" response + Given operation "ListLLMObsPatternsClusteredPoints" enabled + And new "ListLLMObsPatternsClusteredPoints" request + And request contains "topic_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns clustered points returns "OK" response + Given operation "ListLLMObsPatternsClusteredPoints" enabled + And new "ListLLMObsPatternsClusteredPoints" request + And request contains "topic_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns configurations returns "Bad Request" response + Given operation "ListLLMObsPatternsConfigs" enabled + And new "ListLLMObsPatternsConfigs" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns configurations returns "OK" response + Given operation "ListLLMObsPatternsConfigs" enabled + And new "ListLLMObsPatternsConfigs" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns runs returns "Bad Request" response + Given operation "ListLLMObsPatternsRuns" enabled + And new "ListLLMObsPatternsRuns" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns runs returns "Not Found" response + Given operation "ListLLMObsPatternsRuns" enabled + And new "ListLLMObsPatternsRuns" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns runs returns "OK" response + Given operation "ListLLMObsPatternsRuns" enabled + And new "ListLLMObsPatternsRuns" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns topics returns "Bad Request" response + Given operation "ListLLMObsPatternsTopics" enabled + And new "ListLLMObsPatternsTopics" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns topics returns "Not Found" response + Given operation "ListLLMObsPatternsTopics" enabled + And new "ListLLMObsPatternsTopics" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns topics returns "OK" response + Given operation "ListLLMObsPatternsTopics" enabled + And new "ListLLMObsPatternsTopics" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns topics with clustered points returns "Bad Request" response + Given operation "ListLLMObsPatternsTopicsWithClusteredPoints" enabled + And new "ListLLMObsPatternsTopicsWithClusteredPoints" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns topics with clustered points returns "Not Found" response + Given operation "ListLLMObsPatternsTopicsWithClusteredPoints" enabled + And new "ListLLMObsPatternsTopicsWithClusteredPoints" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: List patterns topics with clustered points returns "OK" response + Given operation "ListLLMObsPatternsTopicsWithClusteredPoints" enabled + And new "ListLLMObsPatternsTopicsWithClusteredPoints" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ml-observability + Scenario: List versions of an LLM Observability prompt returns "OK" response + Given there is a valid "prompt" in the system + And operation "ListLLMObsPromptVersions" enabled + And new "ListLLMObsPromptVersions" request + And request contains "prompt_id" parameter from "prompt.data.attributes.prompt_id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Lock LLM Observability dataset draft state returns "Bad Request" response + Given operation "LockLLMObsDatasetDraftState" enabled + And new "LockLLMObsDatasetDraftState" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Lock LLM Observability dataset draft state returns "Not Found" response + Given operation "LockLLMObsDatasetDraftState" enabled + And new "LockLLMObsDatasetDraftState" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Lock LLM Observability dataset draft state returns "OK" response + Given operation "LockLLMObsDatasetDraftState" enabled + And new "LockLLMObsDatasetDraftState" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Push events for an LLM Observability experiment returns "Accepted" response + Given operation "CreateLLMObsExperimentEvents" enabled + And new "CreateLLMObsExperimentEvents" request + And request contains "experiment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"metrics": [{"assessment": "pass", "error": {}, "label": "faithfulness", "metric_type": "score", "span_id": "span-7a1b2c3d", "tags": [], "timestamp_ms": 1705314600000}], "spans": [{"dataset_id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "duration": 1500000000, "meta": {"error": {"message": "Model response timed out", "stack": "Traceback (most recent call last):\n File \"main.py\", line 10, in \n response = model.generate(input)\n File \"model.py\", line 45, in generate\n raise TimeoutError(\"Model response timed out\")\nTimeoutError: Model response timed out", "type": "TimeoutError"}, "input": null, "output": null}, "name": "llm_call", "project_id": "a33671aa-24fd-4dcd-9b33-a8ec7dde7751", "span_id": "span-7a1b2c3d", "start_ns": 1705314600000000000, "status": "ok", "tags": [], "trace_id": "abc123def456"}]}, "type": "events"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/ml-observability + Scenario: Push events for an LLM Observability experiment returns "Bad Request" response + Given operation "CreateLLMObsExperimentEvents" enabled + And new "CreateLLMObsExperimentEvents" request + And request contains "experiment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"metrics": [{"assessment": "pass", "error": {}, "label": "faithfulness", "metric_type": "score", "span_id": "span-7a1b2c3d", "tags": [], "timestamp_ms": 1705314600000}], "spans": [{"dataset_id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "duration": 1500000000, "meta": {"error": {"message": "Model response timed out", "stack": "Traceback (most recent call last):\n File \"main.py\", line 10, in \n response = model.generate(input)\n File \"model.py\", line 45, in generate\n raise TimeoutError(\"Model response timed out\")\nTimeoutError: Model response timed out", "type": "TimeoutError"}, "input": null, "output": null}, "name": "llm_call", "project_id": "a33671aa-24fd-4dcd-9b33-a8ec7dde7751", "span_id": "span-7a1b2c3d", "start_ns": 1705314600000000000, "status": "ok", "tags": [], "trace_id": "abc123def456"}]}, "type": "events"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Push events for an LLM Observability experiment returns "Not Found" response + Given operation "CreateLLMObsExperimentEvents" enabled + And new "CreateLLMObsExperimentEvents" request + And request contains "experiment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"metrics": [{"assessment": "pass", "error": {}, "label": "faithfulness", "metric_type": "score", "span_id": "span-7a1b2c3d", "tags": [], "timestamp_ms": 1705314600000}], "spans": [{"dataset_id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "duration": 1500000000, "meta": {"error": {"message": "Model response timed out", "stack": "Traceback (most recent call last):\n File \"main.py\", line 10, in \n response = model.generate(input)\n File \"model.py\", line 45, in generate\n raise TimeoutError(\"Model response timed out\")\nTimeoutError: Model response timed out", "type": "TimeoutError"}, "input": null, "output": null}, "name": "llm_call", "project_id": "a33671aa-24fd-4dcd-9b33-a8ec7dde7751", "span_id": "span-7a1b2c3d", "start_ns": 1705314600000000000, "status": "ok", "tags": [], "trace_id": "abc123def456"}]}, "type": "events"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Restore an LLM Observability dataset version returns "Bad Request" response + Given operation "RestoreLLMObsDatasetVersion" enabled + And new "RestoreLLMObsDatasetVersion" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dataset_version": 1}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Restore an LLM Observability dataset version returns "Not Found" response + Given operation "RestoreLLMObsDatasetVersion" enabled + And new "RestoreLLMObsDatasetVersion" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dataset_version": 1}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Restore an LLM Observability dataset version returns "OK" response + Given operation "RestoreLLMObsDatasetVersion" enabled + And new "RestoreLLMObsDatasetVersion" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dataset_version": 1}, "id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "type": "datasets"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Run an LLM inference returns "Bad Request" response + Given operation "CreateLLMObsIntegrationInference" enabled + And new "CreateLLMObsIntegrationInference" request + And request contains "integration" parameter from "REPLACE.ME" + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"anthropic_metadata": {"effort": "medium", "thinking": {"budget_tokens": 1024, "type": "enabled"}}, "azure_openai_metadata": {"deployment_id": "my-gpt4-deployment", "model_version": "0613", "resource_name": "my-azure-resource"}, "bedrock_metadata": {"region": "us-east-1"}, "frequency_penalty": 0.0, "json_schema": "{\"type\":\"object\",\"properties\":{\"answer\":{\"type\":\"string\"}}}", "max_completion_tokens": 1024, "max_tokens": 1024, "messages": [{"content": "What is the capital of France?", "contents": [{"type": "text", "value": {"text": "Hello, how can I help you?", "tool_call": {"arguments": {"location": "San Francisco"}, "name": "get_weather", "tool_id": "call_abc123", "type": "function"}, "tool_call_result": {"name": "get_weather", "result": "The weather in San Francisco is 68\u00b0F and sunny.", "tool_id": "call_abc123", "type": "function"}}}], "id": "msg_001", "role": "user", "tool_calls": [{"arguments": {"location": "San Francisco"}, "name": "get_weather", "tool_id": "call_abc123", "type": "function"}], "tool_results": [{"name": "get_weather", "result": "The weather in San Francisco is 68\u00b0F and sunny.", "tool_id": "call_abc123", "type": "function"}]}], "model_id": "gpt-4o", "openai_metadata": {"reasoning_effort": "medium", "reasoning_summary": "auto"}, "presence_penalty": 0.0, "temperature": 0.7, "tools": [{"function": {"description": "Get the current weather for a location.", "name": "get_weather", "parameters": {"properties": {"location": {"type": "string"}}, "type": "object"}}, "type": "function"}], "top_k": 50, "top_p": 1.0, "vertex_ai_metadata": {"location": "us-central1", "project": "my-gcp-project", "project_ids": ["my-gcp-project"]}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Run an LLM inference returns "OK" response + Given operation "CreateLLMObsIntegrationInference" enabled + And new "CreateLLMObsIntegrationInference" request + And request contains "integration" parameter from "REPLACE.ME" + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"anthropic_metadata": {"effort": "medium", "thinking": {"budget_tokens": 1024, "type": "enabled"}}, "azure_openai_metadata": {"deployment_id": "my-gpt4-deployment", "model_version": "0613", "resource_name": "my-azure-resource"}, "bedrock_metadata": {"region": "us-east-1"}, "frequency_penalty": 0.0, "json_schema": "{\"type\":\"object\",\"properties\":{\"answer\":{\"type\":\"string\"}}}", "max_completion_tokens": 1024, "max_tokens": 1024, "messages": [{"content": "What is the capital of France?", "contents": [{"type": "text", "value": {"text": "Hello, how can I help you?", "tool_call": {"arguments": {"location": "San Francisco"}, "name": "get_weather", "tool_id": "call_abc123", "type": "function"}, "tool_call_result": {"name": "get_weather", "result": "The weather in San Francisco is 68\u00b0F and sunny.", "tool_id": "call_abc123", "type": "function"}}}], "id": "msg_001", "role": "user", "tool_calls": [{"arguments": {"location": "San Francisco"}, "name": "get_weather", "tool_id": "call_abc123", "type": "function"}], "tool_results": [{"name": "get_weather", "result": "The weather in San Francisco is 68\u00b0F and sunny.", "tool_id": "call_abc123", "type": "function"}]}], "model_id": "gpt-4o", "openai_metadata": {"reasoning_effort": "medium", "reasoning_summary": "auto"}, "presence_penalty": 0.0, "temperature": 0.7, "tools": [{"function": {"description": "Get the current weather for a location.", "name": "get_weather", "parameters": {"properties": {"location": {"type": "string"}}, "type": "object"}}, "type": "function"}], "top_k": 50, "top_p": 1.0, "vertex_ai_metadata": {"location": "us-central1", "project": "my-gcp-project", "project_ids": ["my-gcp-project"]}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Search LLM Observability experimentation entities returns "Bad Request" response + Given operation "SearchLLMObsExperimentation" enabled + And new "SearchLLMObsExperimentation" request + And body with value {"data": {"attributes": {"content_preview": {"limit": 500}, "filter": {"include_deleted": false, "is_deleted": false, "query": "my experiment", "scope": ["experiments"], "version": null}, "include": {"user_data": false}, "page": {"limit": 100}}, "type": "experimentation"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Search LLM Observability experimentation entities returns "OK — all results returned in a single page." response + Given operation "SearchLLMObsExperimentation" enabled + And new "SearchLLMObsExperimentation" request + And body with value {"data": {"attributes": {"content_preview": {"limit": 500}, "filter": {"include_deleted": false, "is_deleted": false, "query": "my experiment", "scope": ["experiments"], "version": null}, "include": {"user_data": false}, "page": {"limit": 100}}, "type": "experimentation"}} + When the request is sent + Then the response status is 200 OK — all results returned in a single page. + + @generated @skip @team:DataDog/ml-observability + Scenario: Search LLM Observability experimentation entities returns "Partial Content — more results are available. Use `meta.after` as the next `page.cursor`." response + Given operation "SearchLLMObsExperimentation" enabled + And new "SearchLLMObsExperimentation" request + And body with value {"data": {"attributes": {"content_preview": {"limit": 500}, "filter": {"include_deleted": false, "is_deleted": false, "query": "my experiment", "scope": ["experiments"], "version": null}, "include": {"user_data": false}, "page": {"limit": 100}}, "type": "experimentation"}} + When the request is sent + Then the response status is 206 Partial Content — more results are available. Use `meta.after` as the next `page.cursor`. + + @generated @skip @team:DataDog/ml-observability + Scenario: Search LLM Observability spans returns "Bad Request" response + Given operation "SearchLLMObsSpans" enabled + And new "SearchLLMObsSpans" request + And body with value {"data": {"attributes": {"filter": {"from": "now-900s", "ml_app": "my-llm-app", "query": "@session_id:abc123def456", "span_id": "abc123def456", "span_kind": "llm", "span_name": "llm_call", "to": "now", "trace_id": "trace-9a8b7c6d5e4f"}, "options": {"include_attachments": true, "time_offset": 0}, "page": {"cursor": "eyJzdGFydCI6MTAwfQ==", "limit": 10}, "sort": "-start_ns"}, "type": "spans"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Search LLM Observability spans returns "OK" response + Given operation "SearchLLMObsSpans" enabled + And new "SearchLLMObsSpans" request + And body with value {"data": {"attributes": {"filter": {"from": "now-900s", "ml_app": "my-llm-app", "query": "@session_id:abc123def456", "span_id": "abc123def456", "span_kind": "llm", "span_name": "llm_call", "to": "now", "trace_id": "trace-9a8b7c6d5e4f"}, "options": {"include_attachments": true, "time_offset": 0}, "page": {"cursor": "eyJzdGFydCI6MTAwfQ==", "limit": 10}, "sort": "-start_ns"}, "type": "spans"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Simple search experimentation entities returns "Bad Request" response + Given operation "SimpleSearchLLMObsExperimentation" enabled + And new "SimpleSearchLLMObsExperimentation" request + And body with value {"data": {"attributes": {"content_preview": {"limit": 500}, "filter": {"include_deleted": false, "is_deleted": false, "query": "my experiment", "scope": ["experiments"], "version": null}, "include": {"user_data": false}, "page": {"limit": 50, "number": 1}, "sort": [{"direction": "desc", "field": "created_at"}]}, "type": "experimentation"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Simple search experimentation entities returns "OK" response + Given operation "SimpleSearchLLMObsExperimentation" enabled + And new "SimpleSearchLLMObsExperimentation" request + And body with value {"data": {"attributes": {"content_preview": {"limit": 500}, "filter": {"include_deleted": false, "is_deleted": false, "query": "my experiment", "scope": ["experiments"], "version": null}, "include": {"user_data": false}, "page": {"limit": 50, "number": 1}, "sort": [{"direction": "desc", "field": "created_at"}]}, "type": "experimentation"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Trigger a patterns run returns "Accepted" response + Given operation "TriggerLLMObsPatterns" enabled + And new "TriggerLLMObsPatterns" request + And body with value {"data": {"attributes": {"config_id": "a7c8d9e0-1234-5678-9abc-def012345678"}, "type": "topic_discovery"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/ml-observability + Scenario: Trigger a patterns run returns "Bad Request" response + Given operation "TriggerLLMObsPatterns" enabled + And new "TriggerLLMObsPatterns" request + And body with value {"data": {"attributes": {"config_id": "a7c8d9e0-1234-5678-9abc-def012345678"}, "type": "topic_discovery"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Trigger a patterns run returns "Not Found" response + Given operation "TriggerLLMObsPatterns" enabled + And new "TriggerLLMObsPatterns" request + And body with value {"data": {"attributes": {"config_id": "a7c8d9e0-1234-5678-9abc-def012345678"}, "type": "topic_discovery"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Unlock LLM Observability dataset draft state returns "Bad Request" response + Given operation "UnlockLLMObsDatasetDraftState" enabled + And new "UnlockLLMObsDatasetDraftState" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Unlock LLM Observability dataset draft state returns "Not Found" response + Given operation "UnlockLLMObsDatasetDraftState" enabled + And new "UnlockLLMObsDatasetDraftState" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Unlock LLM Observability dataset draft state returns "OK" response + Given operation "UnlockLLMObsDatasetDraftState" enabled + And new "UnlockLLMObsDatasetDraftState" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Update LLM Observability dataset records returns "Bad Request" response + Given operation "UpdateLLMObsDatasetRecords" enabled + And new "UpdateLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null}]}, "type": "records"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Update LLM Observability dataset records returns "Not Found" response + Given operation "UpdateLLMObsDatasetRecords" enabled + And new "UpdateLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null}]}, "type": "records"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Update LLM Observability dataset records returns "OK" response + Given operation "UpdateLLMObsDatasetRecords" enabled + And new "UpdateLLMObsDatasetRecords" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"records": [{"expected_output": null, "id": "rec-7c3f5a1b-9e2d-4f8a-b1c6-3d7e9f0a2b4c", "input": null}]}, "type": "records"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Update a specific LLM Observability prompt version returns "Bad Request" response + Given operation "UpdateLLMObsPromptVersion" enabled + And new "UpdateLLMObsPromptVersion" request + And request contains "prompt_id" parameter from "REPLACE.ME" + And request contains "version" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"env_ids": [], "labels": ["production"]}, "type": "prompt-template-versions"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/ml-observability + Scenario: Update a specific LLM Observability prompt version returns "Not Found" response + Given operation "UpdateLLMObsPromptVersion" enabled + And new "UpdateLLMObsPromptVersion" request + And request contains "prompt_id" parameter with value "nonexistent-prompt" + And request contains "version" parameter with value 1 + And body with value {"data": {"attributes": {"env_ids": [], "labels": []}, "type": "prompt-template-versions"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/ml-observability + Scenario: Update a specific LLM Observability prompt version returns "OK" response + Given there is a valid "prompt" in the system + And there is a valid "prompt_version" in the system + And operation "UpdateLLMObsPromptVersion" enabled + And new "UpdateLLMObsPromptVersion" request + And request contains "prompt_id" parameter from "prompt.data.attributes.prompt_id" + And request contains "version" parameter from "prompt_version.data.attributes.version" + And body with value {"data": {"attributes": {"description": "Give concise answers and cite relevant help-center articles."}, "type": "prompt-template-versions"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability annotation queue returns "Bad Request" response + Given operation "UpdateLLMObsAnnotationQueue" enabled + And new "UpdateLLMObsAnnotationQueue" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotation_schema": {"label_schemas": [{"description": "Rating of the response quality.", "has_assessment": false, "has_reasoning": false, "id": "abc-123", "is_assessment": false, "is_integer": false, "is_required": true, "max": 5.0, "min": 0.0, "name": "quality", "type": "score", "values": ["good", "bad", "neutral"]}]}, "description": "Updated description", "name": "Updated queue name"}, "type": "queues"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability annotation queue returns "Not Found" response + Given operation "UpdateLLMObsAnnotationQueue" enabled + And new "UpdateLLMObsAnnotationQueue" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotation_schema": {"label_schemas": [{"description": "Rating of the response quality.", "has_assessment": false, "has_reasoning": false, "id": "abc-123", "is_assessment": false, "is_integer": false, "is_required": true, "max": 5.0, "min": 0.0, "name": "quality", "type": "score", "values": ["good", "bad", "neutral"]}]}, "description": "Updated description", "name": "Updated queue name"}, "type": "queues"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability annotation queue returns "OK" response + Given operation "UpdateLLMObsAnnotationQueue" enabled + And new "UpdateLLMObsAnnotationQueue" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotation_schema": {"label_schemas": [{"description": "Rating of the response quality.", "has_assessment": false, "has_reasoning": false, "id": "abc-123", "is_assessment": false, "is_integer": false, "is_required": true, "max": 5.0, "min": 0.0, "name": "quality", "type": "score", "values": ["good", "bad", "neutral"]}]}, "description": "Updated description", "name": "Updated queue name"}, "type": "queues"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability dataset returns "Bad Request" response + Given operation "UpdateLLMObsDataset" enabled + And new "UpdateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "datasets"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability dataset returns "Not Found" response + Given operation "UpdateLLMObsDataset" enabled + And new "UpdateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "datasets"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability dataset returns "OK" response + Given operation "UpdateLLMObsDataset" enabled + And new "UpdateLLMObsDataset" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "datasets"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability experiment returns "Bad Request" response + Given operation "UpdateLLMObsExperiment" enabled + And new "UpdateLLMObsExperiment" request + And request contains "experiment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dataset_id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "status": "completed"}, "type": "experiments"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability experiment returns "Not Found" response + Given operation "UpdateLLMObsExperiment" enabled + And new "UpdateLLMObsExperiment" request + And request contains "experiment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dataset_id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "status": "completed"}, "type": "experiments"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability experiment returns "OK" response + Given operation "UpdateLLMObsExperiment" enabled + And new "UpdateLLMObsExperiment" request + And request contains "experiment_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"dataset_id": "9f64e5c7-dc5a-45c8-a17c-1b85f0bec97d", "status": "completed"}, "type": "experiments"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability project returns "Bad Request" response + Given operation "UpdateLLMObsProject" enabled + And new "UpdateLLMObsProject" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "projects"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability project returns "Not Found" response + Given operation "UpdateLLMObsProject" enabled + And new "UpdateLLMObsProject" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "projects"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Update an LLM Observability project returns "OK" response + Given operation "UpdateLLMObsProject" enabled + And new "UpdateLLMObsProject" request + And request contains "project_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {}, "type": "projects"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/ml-observability + Scenario: Update an LLM Observability prompt returns "Bad Request" response + Given there is a valid "prompt" in the system + And operation "UpdateLLMObsPrompt" enabled + And new "UpdateLLMObsPrompt" request + And request contains "prompt_id" parameter from "prompt.data.attributes.prompt_id" + And body with value {"data": {"attributes": {}, "type": "prompt-templates"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/ml-observability + Scenario: Update an LLM Observability prompt returns "Not Found" response + Given operation "UpdateLLMObsPrompt" enabled + And new "UpdateLLMObsPrompt" request + And request contains "prompt_id" parameter with value "nonexistent-prompt" + And body with value {"data": {"attributes": {"title": "New title"}, "type": "prompt-templates"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/ml-observability + Scenario: Update an LLM Observability prompt returns "OK" response + Given there is a valid "prompt" in the system + And operation "UpdateLLMObsPrompt" enabled + And new "UpdateLLMObsPrompt" request + And request contains "prompt_id" parameter from "prompt.data.attributes.prompt_id" + And body with value {"data": {"attributes": {"title": "Customer Support Assistant"}, "type": "prompt-templates"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Update annotation queue label schema returns "Bad Request" response + Given operation "UpdateLLMObsAnnotationQueueLabelSchema" enabled + And new "UpdateLLMObsAnnotationQueueLabelSchema" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotation_schema": {"label_schemas": [{"description": "Rating of the response quality.", "has_assessment": false, "has_reasoning": false, "id": "abc-123", "is_assessment": false, "is_integer": false, "is_required": true, "max": 5.0, "min": 0.0, "name": "quality", "type": "score", "values": ["good", "bad", "neutral"]}]}}, "type": "queues"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Update annotation queue label schema returns "Not Found" response + Given operation "UpdateLLMObsAnnotationQueueLabelSchema" enabled + And new "UpdateLLMObsAnnotationQueueLabelSchema" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotation_schema": {"label_schemas": [{"description": "Rating of the response quality.", "has_assessment": false, "has_reasoning": false, "id": "abc-123", "is_assessment": false, "is_integer": false, "is_required": true, "max": 5.0, "min": 0.0, "name": "quality", "type": "score", "values": ["good", "bad", "neutral"]}]}}, "type": "queues"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Update annotation queue label schema returns "OK" response + Given operation "UpdateLLMObsAnnotationQueueLabelSchema" enabled + And new "UpdateLLMObsAnnotationQueueLabelSchema" request + And request contains "queue_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"annotation_schema": {"label_schemas": [{"description": "Rating of the response quality.", "has_assessment": false, "has_reasoning": false, "id": "abc-123", "is_assessment": false, "is_integer": false, "is_required": true, "max": 5.0, "min": 0.0, "name": "quality", "type": "score", "values": ["good", "bad", "neutral"]}]}}, "type": "queues"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Upload records to an LLM Observability dataset returns "Bad Request" response + Given operation "UploadLLMObsDatasetRecordsFile" enabled + And new "UploadLLMObsDatasetRecordsFile" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Upload records to an LLM Observability dataset returns "Not Found" response + Given operation "UploadLLMObsDatasetRecordsFile" enabled + And new "UploadLLMObsDatasetRecordsFile" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Upload records to an LLM Observability dataset returns "OK" response + Given operation "UploadLLMObsDatasetRecordsFile" enabled + And new "UploadLLMObsDatasetRecordsFile" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/logs.feature b/test-runner-data/features/v2/logs.feature new file mode 100644 index 0000000000..b7accd07dd --- /dev/null +++ b/test-runner-data/features/v2/logs.feature @@ -0,0 +1,173 @@ +@endpoint(logs) @endpoint(logs-v2) +Feature: Logs + Search your logs and send them to your Datadog platform over HTTP. See the + [Log Management page](https://docs.datadoghq.com/logs/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "Logs" API + + @team:DataDog/logs-app + Scenario: Aggregate compute events returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "AggregateLogs" request + And body with value {"compute": [{"aggregation": "count", "interval": "5m", "type": "timeseries"}], "filter": {"from": "now-15m", "indexes": ["main"], "query": "*", "to": "now"}} + When the request is sent + Then the response status is 200 OK + And the response "meta.status" is equal to "done" + + @team:DataDog/logs-app + Scenario: Aggregate compute events with group by returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "AggregateLogs" request + And body with value {"compute": [{"aggregation": "count", "interval": "5m", "type": "timeseries"}], "filter": {"from": "now-15m", "indexes": ["main"], "query": "*", "to": "now"}, "group_by": [{"facet": "host", "missing": "miss", "sort": {"type": "measure", "order": "asc", "aggregation": "pc90", "metric": "@duration"}}]} + When the request is sent + Then the response status is 200 OK + And the response "meta.status" is equal to "done" + + @generated @skip @team:DataDog/logs-app + Scenario: Aggregate events returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "AggregateLogs" request + And body with value {"compute": [{"aggregation": "pc90", "interval": "5m", "metric": "@duration", "type": "total"}], "filter": {"from": "now-15m", "indexes": ["main", "web"], "query": "service:web* AND @http.status_code:[200 TO 299]", "storage_tier": "indexes", "to": "now"}, "group_by": [{"facet": "host", "histogram": {"interval": 10, "max": 100, "min": 50}, "limit": 10, "sort": {"aggregation": "count", "order": "asc"}, "total": false}], "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ=="}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/logs-app + Scenario: Aggregate events returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "AggregateLogs" request + And body with value {"filter": {"from": "now-15m", "indexes": ["main"], "query": "*", "to": "now"}} + When the request is sent + Then the response status is 200 OK + And the response "meta.status" is equal to "done" + + @replay-only @skip-validation @team:DataDog/logs-app @with-pagination + Scenario: Get a list of logs returns "OK" response with pagination + Given a valid "appKeyAuth" key in the system + And new "ListLogsGet" request + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @team:DataDog/logs-app + Scenario: Get a quick list of logs returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListLogsGet" request + And request contains "filter[query]" parameter with value "datadog-agent" + And request contains "filter[indexes]" parameter with value ["main"] + And request contains "filter[from]" parameter with value "2020-09-17T11:48:36+01:00" + And request contains "filter[to]" parameter with value "2020-09-17T12:48:36+01:00" + And request contains "page[limit]" parameter with value 5 + When the request is sent + Then the response status is 200 OK + And the response "data" has length 0 + + @generated @skip @team:DataDog/logs-app + Scenario: Search logs (GET) returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListLogsGet" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-app + Scenario: Search logs (GET) returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListLogsGet" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-app @with-pagination + Scenario: Search logs (GET) returns "OK" response with pagination + Given a valid "appKeyAuth" key in the system + And new "ListLogsGet" request + When the request with pagination is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-app + Scenario: Search logs (POST) returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListLogs" request + And body with value {"filter": {"from": "now-15m", "indexes": ["main", "web"], "query": "service:web* AND @http.status_code:[200 TO 299]", "storage_tier": "indexes", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-app + Scenario: Search logs (POST) returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListLogs" request + And body with value {"filter": {"from": "now-15m", "indexes": ["main", "web"], "query": "service:web* AND @http.status_code:[200 TO 299]", "storage_tier": "indexes", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/logs-app @with-pagination + Scenario: Search logs (POST) returns "OK" response with pagination + Given a valid "appKeyAuth" key in the system + And new "ListLogs" request + And body with value {"filter": {"from": "now-15m", "indexes": ["main", "web"], "query": "service:web* AND @http.status_code:[200 TO 299]", "storage_tier": "indexes", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request with pagination is sent + Then the response status is 200 OK + + @team:DataDog/logs-app + Scenario: Search logs returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "ListLogs" request + And body with value {"filter": {"query": "datadog-agent", "indexes": ["main"], "from": "2020-09-17T11:48:36+01:00", "to": "2020-09-17T12:48:36+01:00"}, "sort": "timestamp", "page": {"limit": 5}} + When the request is sent + Then the response status is 200 OK + And the response "data" has length 0 + + @replay-only @skip-validation @team:DataDog/logs-app @with-pagination + Scenario: Search logs returns "OK" response with pagination + Given a valid "appKeyAuth" key in the system + And new "ListLogs" request + And body with value {"filter": {"from": "now-15m", "indexes": ["main"], "to": "now"}, "options": {"timezone": "GMT"}, "page": {"limit": 2}, "sort": "timestamp"} + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/event-platform-intake @team:DataDog/logs-backend @team:DataDog/logs-ingestion + Scenario: Send deflate logs returns "Request accepted for processing (always 202 empty JSON)." response + Given new "SubmitLog" request + And body with value [{"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}] + And request contains "Content-Encoding" parameter with value "deflate" + When the request is sent + Then the response status is 202 Response from server (always 202 empty JSON). + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/event-platform-intake @team:DataDog/logs-backend @team:DataDog/logs-ingestion + Scenario: Send gzip logs returns "Request accepted for processing (always 202 empty JSON)." response + Given new "SubmitLog" request + And body with value [{"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}] + And request contains "Content-Encoding" parameter with value "gzip" + When the request is sent + Then the response status is 202 Request accepted for processing (always 202 empty JSON). + + @generated @skip @team:DataDog/event-platform-intake @team:DataDog/logs-backend @team:DataDog/logs-ingestion + Scenario: Send logs returns "Bad Request" response + Given new "SubmitLog" request + And body with value [{"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}] + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/event-platform-intake @team:DataDog/logs-backend @team:DataDog/logs-ingestion + Scenario: Send logs returns "Payload Too Large" response + Given new "SubmitLog" request + And body with value [{"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}] + When the request is sent + Then the response status is 413 Payload Too Large + + @generated @skip @team:DataDog/event-platform-intake @team:DataDog/logs-backend @team:DataDog/logs-ingestion + Scenario: Send logs returns "Request Timeout" response + Given new "SubmitLog" request + And body with value [{"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}] + When the request is sent + Then the response status is 408 Request Timeout + + @team:DataDog/event-platform-intake @team:DataDog/logs-backend @team:DataDog/logs-ingestion + Scenario: Send logs returns "Request accepted for processing (always 202 empty JSON)." response + Given new "SubmitLog" request + And body with value [{"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment", "status": "info"}] + When the request is sent + Then the response status is 202 Request accepted for processing (always 202 empty JSON). diff --git a/test-runner-data/features/v2/logs_custom_destinations.feature b/test-runner-data/features/v2/logs_custom_destinations.feature new file mode 100644 index 0000000000..e9aa229099 --- /dev/null +++ b/test-runner-data/features/v2/logs_custom_destinations.feature @@ -0,0 +1,395 @@ +@endpoint(logs-custom-destinations) @endpoint(logs-custom-destinations-v2) +Feature: Logs Custom Destinations + Custom Destinations forward all the logs ingested to an external + destination. **Note**: Log forwarding is not available for the Government + (US1-FED) site. Contact your account representative for more information. + See the [Custom Destinations + Page](https://app.datadoghq.com/logs/pipelines/log-forwarding/custom- + destinations) for a list of the custom destinations currently configured + in web UI. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "LogsCustomDestinations" API + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a Basic HTTP custom destination returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forward_tags_restriction_list": ["datacenter", "host"], "forward_tags_restriction_list_type": "ALLOW_LIST", "forwarder_destination": {"auth": {"password": "datadog-custom-destination-password", "type": "basic", "username": "datadog-custom-destination-username"}, "endpoint": "https://example.com", "type": "http"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data" has field "id" + And the response "data.attributes.name" is equal to "Nginx logs" + And the response "data.attributes.query" is equal to "source:nginx" + And the response "data.attributes.forwarder_destination.type" is equal to "http" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination.auth.type" is equal to "basic" + And the response "data.attributes.forwarder_destination.auth" does not have field "username" + And the response "data.attributes.forwarder_destination.auth" does not have field "password" + And the response "data.attributes.enabled" is false + And the response "data.attributes.forward_tags" is false + And the response "data.attributes.forward_tags_restriction_list" has length 2 + And the response "data.attributes.forward_tags_restriction_list" array contains value "datacenter" + And the response "data.attributes.forward_tags_restriction_list" array contains value "host" + And the response "data.attributes.forward_tags_restriction_list_type" is equal to "ALLOW_LIST" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a Custom Header HTTP custom destination returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forward_tags_restriction_list": ["datacenter", "host"], "forward_tags_restriction_list_type": "ALLOW_LIST", "forwarder_destination": {"auth": {"header_value": "my-secret", "type": "custom_header", "header_name": "MY-AUTHENTICATION-HEADER"}, "endpoint": "https://example.com", "type": "http"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data" has field "id" + And the response "data.attributes.name" is equal to "Nginx logs" + And the response "data.attributes.query" is equal to "source:nginx" + And the response "data.attributes.forwarder_destination.type" is equal to "http" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination.auth.type" is equal to "custom_header" + And the response "data.attributes.forwarder_destination.auth.header_name" is equal to "MY-AUTHENTICATION-HEADER" + And the response "data.attributes.forwarder_destination.auth" does not have field "header_value" + And the response "data.attributes.enabled" is false + And the response "data.attributes.forward_tags" is false + And the response "data.attributes.forward_tags_restriction_list" has length 2 + And the response "data.attributes.forward_tags_restriction_list" array contains value "datacenter" + And the response "data.attributes.forward_tags_restriction_list" array contains value "host" + And the response "data.attributes.forward_tags_restriction_list_type" is equal to "ALLOW_LIST" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a Microsoft Sentinel custom destination returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forward_tags_restriction_list": ["datacenter", "host"], "forward_tags_restriction_list_type": "ALLOW_LIST", "forwarder_destination": {"type": "microsoft_sentinel", "tenant_id": "f3c9a8a1-4c2e-4d2e-b911-9f3c28c3c8b2", "client_id": "9a2f4d83-2b5e-429e-a35a-2b3c4182db71", "data_collection_endpoint": "https://my-dce-5kyl.eastus-1.ingest.monitor.azure.com", "data_collection_rule_id": "dcr-000a00a000a00000a000000aa000a0aa", "stream_name": "Custom-MyTable"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data" has field "id" + And the response "data.attributes.name" is equal to "Nginx logs" + And the response "data.attributes.query" is equal to "source:nginx" + And the response "data.attributes.forwarder_destination.type" is equal to "microsoft_sentinel" + And the response "data.attributes.forwarder_destination.tenant_id" is equal to "f3c9a8a1-4c2e-4d2e-b911-9f3c28c3c8b2" + And the response "data.attributes.forwarder_destination.client_id" is equal to "9a2f4d83-2b5e-429e-a35a-2b3c4182db71" + And the response "data.attributes.forwarder_destination.data_collection_endpoint" is equal to "https://my-dce-5kyl.eastus-1.ingest.monitor.azure.com" + And the response "data.attributes.forwarder_destination.data_collection_rule_id" is equal to "dcr-000a00a000a00000a000000aa000a0aa" + And the response "data.attributes.forwarder_destination.stream_name" is equal to "Custom-MyTable" + And the response "data.attributes.enabled" is false + And the response "data.attributes.forward_tags" is false + And the response "data.attributes.forward_tags_restriction_list" has length 2 + And the response "data.attributes.forward_tags_restriction_list" array contains value "datacenter" + And the response "data.attributes.forward_tags_restriction_list" array contains value "host" + And the response "data.attributes.forward_tags_restriction_list_type" is equal to "ALLOW_LIST" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a Splunk custom destination returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forward_tags_restriction_list": ["datacenter", "host"], "forward_tags_restriction_list_type": "ALLOW_LIST", "forwarder_destination": {"access_token": "my-access-token", "endpoint": "https://example.com", "type": "splunk_hec"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data" has field "id" + And the response "data.attributes.name" is equal to "Nginx logs" + And the response "data.attributes.query" is equal to "source:nginx" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination" does not have field "access_token" + And the response "data.attributes.forwarder_destination" does not have field "sourcetype" + And the response "data.attributes.enabled" is false + And the response "data.attributes.forward_tags" is false + And the response "data.attributes.forward_tags_restriction_list" has length 2 + And the response "data.attributes.forward_tags_restriction_list" array contains value "datacenter" + And the response "data.attributes.forward_tags_restriction_list" array contains value "host" + And the response "data.attributes.forward_tags_restriction_list_type" is equal to "ALLOW_LIST" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a Splunk custom destination with a null sourcetype returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forwarder_destination": {"access_token": "my-access-token", "endpoint": "https://example.com", "type": "splunk_hec", "sourcetype": null}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data" has field "id" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination" does not have field "access_token" + And the response "data.attributes.forwarder_destination.sourcetype" is equal to null + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a Splunk custom destination with a sourcetype returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forwarder_destination": {"access_token": "my-access-token", "endpoint": "https://example.com", "type": "splunk_hec", "sourcetype": "my-sourcetype"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data" has field "id" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination" does not have field "access_token" + And the response "data.attributes.forwarder_destination.sourcetype" is equal to "my-sourcetype" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a Splunk custom destination with an empty string sourcetype returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forwarder_destination": {"access_token": "my-access-token", "endpoint": "https://example.com", "type": "splunk_hec", "sourcetype": ""}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data" has field "id" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination" does not have field "access_token" + And the response "data.attributes.forwarder_destination.sourcetype" is equal to "" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a Splunk custom destination without a sourcetype returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forwarder_destination": {"access_token": "my-access-token", "endpoint": "https://example.com", "type": "splunk_hec"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data" has field "id" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination" does not have field "access_token" + And the response "data.attributes.forwarder_destination" does not have field "sourcetype" + + @skip-java @skip-python @skip-rust @skip-typescript @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a custom destination returns "Bad Request" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"name": "Nginx logs"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a custom destination returns "Conflict" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": true, "forward_tags": true, "forward_tags_restriction_list": ["datacenter", "host"], "forward_tags_restriction_list_type": "ALLOW_LIST", "forwarder_destination": {"auth": {"password": "datadog-custom-destination-password", "type": "basic", "username": "datadog-custom-destination-username"}, "endpoint": "https://example.com", "type": "http"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a custom destination returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": true, "forward_tags": true, "forward_tags_restriction_list": ["datacenter", "host"], "forward_tags_restriction_list_type": "ALLOW_LIST", "forwarder_destination": {"auth": {"password": "datadog-custom-destination-password", "type": "basic", "username": "datadog-custom-destination-username"}, "endpoint": "https://example.com", "type": "http"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create an Elasticsearch custom destination returns "OK" response + Given new "CreateLogsCustomDestination" request + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forward_tags_restriction_list": ["datacenter", "host"], "forward_tags_restriction_list_type": "ALLOW_LIST", "forwarder_destination": {"auth": {"username": "my-username", "password": "my-password"}, "index_name": "nginx-logs", "index_rotation": "yyyy-MM-dd", "endpoint": "https://example.com", "type": "elasticsearch"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data" has field "id" + And the response "data.attributes.name" is equal to "Nginx logs" + And the response "data.attributes.query" is equal to "source:nginx" + And the response "data.attributes.forwarder_destination.type" is equal to "elasticsearch" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination.index_name" is equal to "nginx-logs" + And the response "data.attributes.forwarder_destination.index_rotation" is equal to "yyyy-MM-dd" + And the response "data.attributes.forwarder_destination.auth" does not have field "username" + And the response "data.attributes.forwarder_destination.auth" does not have field "password" + And the response "data.attributes.enabled" is false + And the response "data.attributes.forward_tags" is false + And the response "data.attributes.forward_tags_restriction_list" has length 2 + And the response "data.attributes.forward_tags_restriction_list" array contains value "datacenter" + And the response "data.attributes.forward_tags_restriction_list" array contains value "host" + And the response "data.attributes.forward_tags_restriction_list_type" is equal to "ALLOW_LIST" + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Delete a custom destination returns "Bad Request" response + Given new "DeleteLogsCustomDestination" request + And request contains "custom_destination_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Delete a custom destination returns "Not Found" response + Given new "DeleteLogsCustomDestination" request + And request contains "custom_destination_id" parameter with value "does-not-exist" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Delete a custom destination returns "OK" response + Given new "DeleteLogsCustomDestination" request + And there is a valid "custom_destination" in the system + And request contains "custom_destination_id" parameter from "custom_destination.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Get a custom destination returns "Bad Request" response + Given new "GetLogsCustomDestination" request + And request contains "custom_destination_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Get a custom destination returns "Not Found" response + Given new "GetLogsCustomDestination" request + And request contains "custom_destination_id" parameter with value "does-not-exist" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Get a custom destination returns "OK" response + Given new "GetLogsCustomDestination" request + And there is a valid "custom_destination" in the system + And request contains "custom_destination_id" parameter from "custom_destination.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data.id" is equal to "{{ custom_destination.data.id }}" + And the response "data.attributes.name" is equal to "{{ custom_destination.data.attributes.name }}" + And the response "data.attributes.query" is equal to "{{ custom_destination.data.attributes.query }}" + And the response "data.attributes.forwarder_destination.type" is equal to "{{ custom_destination.data.attributes.forwarder_destination.type }}" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "{{ custom_destination.data.attributes.forwarder_destination.endpoint }}" + And the response "data.attributes.forwarder_destination.auth.type" is equal to "{{ custom_destination.data.attributes.forwarder_destination.auth.type }}" + And the response "data.attributes.forwarder_destination.auth" does not have field "username" + And the response "data.attributes.forwarder_destination.auth" does not have field "password" + And the response "data.attributes.enabled" is false + And the response "data.attributes.forward_tags" is false + And the response "data.attributes.forward_tags_restriction_list" has length 1 + And the response "data.attributes.forward_tags_restriction_list" array contains value "host" + And the response "data.attributes.forward_tags_restriction_list_type" is equal to "{{ custom_destination.data.attributes.forward_tags_restriction_list_type }}" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Get all custom destinations returns "OK" response + Given new "ListLogsCustomDestinations" request + And there is a valid "custom_destination" in the system + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "type" with value "custom_destination" + And the response "data" has item with field "id" with value "{{ custom_destination.data.id }}" + And the response "data" has item with field "attributes.name" with value "{{ custom_destination.data.attributes.name }}" + And the response "data" has item with field "attributes.query" with value "{{ custom_destination.data.attributes.query }}" + And the response "data" has item with field "attributes.forwarder_destination.type" with value "{{ custom_destination.data.attributes.forwarder_destination.type }}" + And the response "data" has item with field "attributes.forwarder_destination.endpoint" with value "{{ custom_destination.data.attributes.forwarder_destination.endpoint }}" + And the response "data" has item with field "attributes.forwarder_destination.auth.type" with value "{{ custom_destination.data.attributes.forwarder_destination.auth.type }}" + And the response "data" has item with field "attributes.enabled" with value false + And the response "data" has item with field "attributes.forward_tags" with value false + And the response "data" has item with field "attributes.forward_tags_restriction_list_type" with value "{{ custom_destination.data.attributes.forward_tags_restriction_list_type }}" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a Splunk custom destination with a null sourcetype returns "OK" response + Given new "UpdateLogsCustomDestination" request + And there is a valid "custom_destination_splunk_with_sourcetype" in the system + And request contains "custom_destination_id" parameter from "custom_destination_splunk_with_sourcetype.data.id" + And body with value {"data": {"attributes": {"forwarder_destination": {"type": "splunk_hec", "endpoint": "https://example.com", "access_token": "my-access-token", "sourcetype": null}}, "type": "custom_destination", "id": "{{ custom_destination_splunk_with_sourcetype.data.id }}"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data.id" is equal to "{{ custom_destination_splunk_with_sourcetype.data.id }}" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination" does not have field "access_token" + And the response "data.attributes.forwarder_destination.sourcetype" is equal to null + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a Splunk custom destination with a sourcetype returns "OK" response + Given new "UpdateLogsCustomDestination" request + And there is a valid "custom_destination_splunk" in the system + And request contains "custom_destination_id" parameter from "custom_destination_splunk.data.id" + And body with value {"data": {"attributes": {"forwarder_destination": {"type": "splunk_hec", "endpoint": "https://example.com", "access_token": "my-access-token", "sourcetype": "new-sourcetype"}}, "type": "custom_destination", "id": "{{ custom_destination_splunk.data.id }}"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data.id" is equal to "{{ custom_destination_splunk.data.id }}" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://example.com" + And the response "data.attributes.forwarder_destination" does not have field "access_token" + And the response "data.attributes.forwarder_destination.sourcetype" is equal to "new-sourcetype" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a Splunk custom destination's attributes preserves the absent sourcetype returns "OK" response + Given new "UpdateLogsCustomDestination" request + And there is a valid "custom_destination_splunk" in the system + And request contains "custom_destination_id" parameter from "custom_destination_splunk.data.id" + And body with value {"data": {"attributes": {"name": "Nginx logs (Updated)"}, "type": "custom_destination", "id": "{{ custom_destination_splunk.data.id }}"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data.id" is equal to "{{ custom_destination_splunk.data.id }}" + And the response "data.attributes.name" is equal to "Nginx logs (Updated)" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination" does not have field "sourcetype" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a Splunk custom destination's destination preserves the null sourcetype returns "OK" response + Given new "UpdateLogsCustomDestination" request + And there is a valid "custom_destination_splunk_with_null_sourcetype" in the system + And request contains "custom_destination_id" parameter from "custom_destination_splunk_with_null_sourcetype.data.id" + And body with value {"data": {"attributes": {"forwarder_destination": {"type": "splunk_hec", "endpoint": "https://updated-example.com", "access_token": "my-access-token"}}, "type": "custom_destination", "id": "{{ custom_destination_splunk_with_null_sourcetype.data.id }}"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data.id" is equal to "{{ custom_destination_splunk_with_null_sourcetype.data.id }}" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://updated-example.com" + And the response "data.attributes.forwarder_destination" does not have field "access_token" + And the response "data.attributes.forwarder_destination.sourcetype" is equal to null + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a Splunk custom destination's destination preserves the sourcetype returns "OK" response + Given new "UpdateLogsCustomDestination" request + And there is a valid "custom_destination_splunk_with_sourcetype" in the system + And request contains "custom_destination_id" parameter from "custom_destination_splunk_with_sourcetype.data.id" + And body with value {"data": {"attributes": {"forwarder_destination": {"type": "splunk_hec", "endpoint": "https://updated-example.com", "access_token": "my-access-token"}}, "type": "custom_destination", "id": "{{ custom_destination_splunk_with_sourcetype.data.id }}"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data.id" is equal to "{{ custom_destination_splunk_with_sourcetype.data.id }}" + And the response "data.attributes.forwarder_destination.type" is equal to "splunk_hec" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "https://updated-example.com" + And the response "data.attributes.forwarder_destination" does not have field "access_token" + And the response "data.attributes.forwarder_destination.sourcetype" is equal to "my-sourcetype" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a custom destination returns "Bad Request" response + Given new "UpdateLogsCustomDestination" request + And there is a valid "custom_destination" in the system + And request contains "custom_destination_id" parameter from "custom_destination.data.id" + And body with value {"data": {"attributes": {"forward_tags_restriction_list_type": "this_list_type_does_not_exist"}, "type": "custom_destination", "id": "{{ custom_destination.data.id }}" }} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a custom destination returns "Conflict" response + Given new "UpdateLogsCustomDestination" request + And request contains "custom_destination_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forward_tags_restriction_list": ["datacenter", "host"], "forward_tags_restriction_list_type": "ALLOW_LIST", "forwarder_destination": {"auth": {"password": "datadog-custom-destination-password", "type": "basic", "username": "datadog-custom-destination-username"}, "endpoint": "https://example.com", "type": "http"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a custom destination returns "Not Found" response + Given new "UpdateLogsCustomDestination" request + And request contains "custom_destination_id" parameter with value "id-from-non-existing-custom-destination" + And body with value {"data": {"attributes": {"enabled": false, "forward_tags": false, "forward_tags_restriction_list": ["datacenter", "host"], "forward_tags_restriction_list_type": "ALLOW_LIST", "forwarder_destination": {"auth": {"type": "basic", "username": "datadog-custom-destination-username", "password": "datadog-custom-destination-password"}, "endpoint": "https://example.com", "type": "http"}, "name": "Nginx logs", "query": "source:nginx"}, "type": "custom_destination", "id": "id-from-non-existing-custom-destination" }} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a custom destination returns "OK" response + Given new "UpdateLogsCustomDestination" request + And there is a valid "custom_destination" in the system + And request contains "custom_destination_id" parameter from "custom_destination.data.id" + And body with value {"data": {"attributes": {"name": "Nginx logs (Updated)", "query": "source:nginx", "enabled":false, "forward_tags":false, "forward_tags_restriction_list_type":"BLOCK_LIST"}, "type": "custom_destination", "id": "{{ custom_destination.data.id }}"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "custom_destination" + And the response "data.id" is equal to "{{ custom_destination.data.id }}" + And the response "data.attributes.name" is equal to "Nginx logs (Updated)" + And the response "data.attributes.query" is equal to "{{ custom_destination.data.attributes.query }}" + And the response "data.attributes.forwarder_destination.type" is equal to "{{ custom_destination.data.attributes.forwarder_destination.type }}" + And the response "data.attributes.forwarder_destination.endpoint" is equal to "{{ custom_destination.data.attributes.forwarder_destination.endpoint }}" + And the response "data.attributes.forwarder_destination.auth.type" is equal to "{{ custom_destination.data.attributes.forwarder_destination.auth.type }}" + And the response "data.attributes.forwarder_destination.auth" does not have field "username" + And the response "data.attributes.forwarder_destination.auth" does not have field "password" + And the response "data.attributes.enabled" is false + And the response "data.attributes.forward_tags" is false + And the response "data.attributes.forward_tags_restriction_list" has length 1 + And the response "data.attributes.forward_tags_restriction_list" array contains value "host" + And the response "data.attributes.forward_tags_restriction_list_type" is equal to "{{ custom_destination.data.attributes.forward_tags_restriction_list_type }}" diff --git a/test-runner-data/features/v2/logs_metrics.feature b/test-runner-data/features/v2/logs_metrics.feature new file mode 100644 index 0000000000..4342f80a9c --- /dev/null +++ b/test-runner-data/features/v2/logs_metrics.feature @@ -0,0 +1,112 @@ +@endpoint(logs-metrics) @endpoint(logs-metrics-v2) +Feature: Logs Metrics + Manage configuration of [log-based + metrics](https://app.datadoghq.com/logs/pipelines/generate-metrics) for + your organization. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "LogsMetrics" API + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a log-based metric returns "Bad Request" response + Given new "CreateLogsMetric" request + And body with value {"data": {"attributes": {"compute": {"aggregation_type": "distribution", "include_percentiles": true, "path": "@duration"}, "filter": {"query": "service:web* AND @http.status_code:[200 TO 299]"}, "group_by": [{"path": "@http.status_code", "tag_name": "status_code"}]}, "id": "logs.page.load.count", "type": "logs_metrics"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a log-based metric returns "Conflict" response + Given new "CreateLogsMetric" request + And body with value {"data": {"attributes": {"compute": {"aggregation_type": "distribution", "include_percentiles": true, "path": "@duration"}, "filter": {"query": "service:web* AND @http.status_code:[200 TO 299]"}, "group_by": [{"path": "@http.status_code", "tag_name": "status_code"}]}, "id": "logs.page.load.count", "type": "logs_metrics"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Create a log-based metric returns "OK" response + Given new "CreateLogsMetric" request + And body with value {"data": {"id": "{{ unique_alnum }}", "type": "logs_metrics", "attributes": {"compute": {"aggregation_type": "distribution", "include_percentiles": true, "path":"@duration"}}}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "unique_alnum" + And the response "data.type" is equal to "logs_metrics" + And the response "data.attributes.compute.aggregation_type" is equal to "distribution" + And the response "data.attributes.compute.include_percentiles" is equal to true + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Delete a log-based metric returns "Not Found" response + Given new "DeleteLogsMetric" request + And request contains "metric_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Delete a log-based metric returns "OK" response + Given there is a valid "logs_metric" in the system + And new "DeleteLogsMetric" request + And request contains "metric_id" parameter from "logs_metric.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Get a log-based metric returns "Not Found" response + Given new "GetLogsMetric" request + And request contains "metric_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Get a log-based metric returns "OK" response + Given there is a valid "logs_metric" in the system + And new "GetLogsMetric" request + And request contains "metric_id" parameter from "logs_metric.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.filter.query" has the same value as "logs_metric.data.attributes.filter.query" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Get all log-based metrics returns "OK" response + Given there is a valid "logs_metric" in the system + And new "ListLogsMetrics" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "logs_metrics" + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a log-based metric returns "Bad Request" response + Given new "UpdateLogsMetric" request + And request contains "metric_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"compute": {"include_percentiles": true}, "filter": {"query": "service:web* AND @http.status_code:[200 TO 299]"}, "group_by": [{"path": "@http.status_code", "tag_name": "status_code"}]}, "type": "logs_metrics"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a log-based metric returns "Not Found" response + Given new "UpdateLogsMetric" request + And request contains "metric_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"compute": {"include_percentiles": true}, "filter": {"query": "service:web* AND @http.status_code:[200 TO 299]"}, "group_by": [{"path": "@http.status_code", "tag_name": "status_code"}]}, "type": "logs_metrics"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a log-based metric returns "OK" response + Given there is a valid "logs_metric" in the system + And new "UpdateLogsMetric" request + And request contains "metric_id" parameter from "logs_metric.data.id" + And body with value {"data": {"type": "logs_metrics", "attributes": {"filter" : {"query": "{{ logs_metric.data.attributes.filter.query }}-updated"}}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.filter.query" is equal to "{{ logs_metric.data.attributes.filter.query }}-updated" + + @team:DataDog/logs-backend @team:DataDog/logs-forwarding + Scenario: Update a log-based metric with include_percentiles field returns "OK" response + Given there is a valid "logs_metric_percentile" in the system + And new "UpdateLogsMetric" request + And request contains "metric_id" parameter from "logs_metric_percentile.data.id" + And body with value {"data": {"type": "logs_metrics", "attributes": {"compute": {"include_percentiles": false}}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.compute.include_percentiles" is false + And the response "data.type" is equal to "logs_metrics" + And the response "data.id" is equal to "{{ logs_metric_percentile.data.id }}" diff --git a/test-runner-data/features/v2/logs_restriction_queries.feature b/test-runner-data/features/v2/logs_restriction_queries.feature new file mode 100644 index 0000000000..44d65b92fd --- /dev/null +++ b/test-runner-data/features/v2/logs_restriction_queries.feature @@ -0,0 +1,287 @@ +@endpoint(logs-restriction-queries) @endpoint(logs-restriction-queries-v2) +Feature: Logs Restriction Queries + **Note: This endpoint is in public beta. If you have any feedback, contact + [Datadog support](https://docs.datadoghq.com/help/).** A Restriction + Query is a logs query that restricts which logs the `logs_read_data` + permission grants read access to. For users whose roles have Restriction + Queries, any log query they make only returns those log events that also + match one of their Restriction Queries. This is true whether the user + queries log events from any log-related feature, including the log + explorer, Live Tail, re-hydration, or a dashboard widget. Restriction + Queries currently only support use of the following components of log + events: - Reserved attributes - The log message - Tags To restrict read + access on log data, add a team tag to log events to indicate which teams + own them, and then scope Restriction Queries to the relevant values of the + team tag. Tags can be applied to log events in many ways, and a log event + can have multiple tags with the same key (like team) and different values. + This means the same log event can be visible to roles whose restriction + queries are scoped to different team values. See [How to Set Up RBAC for + Logs](https://docs.datadoghq.com/logs/guide/logs-rbac/?tab=api#restrict- + access-to-logs) for details on how to add restriction queries. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "LogsRestrictionQueries" API + + @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-terraform-config @skip-typescript @skip-validation @team:DataDog/logs-app + Scenario: Create a restriction query returns "Bad Request" response + Given operation "CreateRestrictionQuery" enabled + And new "CreateRestrictionQuery" request + And body with value {"test": "bad_request"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/logs-app + Scenario: Create a restriction query returns "OK" response + Given operation "CreateRestrictionQuery" enabled + And new "CreateRestrictionQuery" request + And body with value {"data": {"attributes": {"restriction_query": "env:sandbox"}, "type": "logs_restriction_queries"}} + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/logs-app + Scenario: Delete a restriction query returns "Bad Request" response + Given operation "DeleteRestrictionQuery" enabled + And new "DeleteRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "malformed_id" + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/logs-app + Scenario: Delete a restriction query returns "Not found" response + Given operation "DeleteRestrictionQuery" enabled + And new "DeleteRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/logs-app + Scenario: Delete a restriction query returns "OK" response + Given operation "DeleteRestrictionQuery" enabled + And there is a valid "restriction_query" in the system + And new "DeleteRestrictionQuery" request + And request contains "restriction_query_id" parameter from "restriction_query.data.id" + When the request is sent + Then the response status is 204 OK + + @skip-terraform-config @team:DataDog/logs-app + Scenario: Get a restriction query returns "Bad Request" response + Given operation "GetRestrictionQuery" enabled + And new "GetRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "malformed_id" + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/logs-app + Scenario: Get a restriction query returns "Not found" response + Given operation "GetRestrictionQuery" enabled + And new "GetRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/logs-app + Scenario: Get a restriction query returns "OK" response + Given operation "GetRestrictionQuery" enabled + And there is a valid "restriction_query" in the system + And new "GetRestrictionQuery" request + And request contains "restriction_query_id" parameter from "restriction_query.data.id" + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/logs-app + Scenario: Get all restriction queries for a given user returns "Bad Request" response + Given operation "ListUserRestrictionQueries" enabled + And new "ListUserRestrictionQueries" request + And request contains "user_id" parameter with value "malformed_id" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/logs-app + Scenario: Get all restriction queries for a given user returns "Not found" response + Given operation "ListUserRestrictionQueries" enabled + And new "ListUserRestrictionQueries" request + And request contains "user_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/logs-app + Scenario: Get all restriction queries for a given user returns "OK" response + Given operation "ListUserRestrictionQueries" enabled + And there is a valid "user" in the system + And new "ListUserRestrictionQueries" request + And request contains "user_id" parameter from "user.data.id" + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/logs-app + Scenario: Get restriction query for a given role returns "Bad Request" response + Given operation "GetRoleRestrictionQuery" enabled + And new "GetRoleRestrictionQuery" request + And request contains "role_id" parameter with value "malformed_id" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/logs-app + Scenario: Get restriction query for a given role returns "Not found" response + Given operation "GetRoleRestrictionQuery" enabled + And new "GetRoleRestrictionQuery" request + And request contains "role_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/logs-app + Scenario: Get restriction query for a given role returns "OK" response + Given operation "GetRoleRestrictionQuery" enabled + And there is a valid "role" in the system + And new "GetRoleRestrictionQuery" request + And request contains "role_id" parameter from "role.data.id" + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/logs-app + Scenario: Grant role to a restriction query returns "Bad Request" response + Given operation "AddRoleToRestrictionQuery" enabled + And new "AddRoleToRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "malformed_id" + And body with value {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}} + When the request is sent + Then the response status is 404 Not found + + @skip-terraform-config @team:DataDog/logs-app + Scenario: Grant role to a restriction query returns "Not found" response + Given operation "AddRoleToRestrictionQuery" enabled + And new "AddRoleToRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}} + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/logs-app + Scenario: Grant role to a restriction query returns "OK" response + Given operation "AddRoleToRestrictionQuery" enabled + And there is a valid "restriction_query" in the system + And there is a valid "role" in the system + And new "AddRoleToRestrictionQuery" request + And request contains "restriction_query_id" parameter from "restriction_query.data.id" + And body with value {"data": {"id": "{{ role.data.id }}", "type": "roles"}} + When the request is sent + Then the response status is 204 OK + + @skip-terraform-config @team:DataDog/logs-app + Scenario: List restriction queries returns "OK" response + Given operation "ListRestrictionQueries" enabled + And new "ListRestrictionQueries" request + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/logs-app + Scenario: List roles for a restriction query returns "Bad Request" response + Given operation "ListRestrictionQueryRoles" enabled + And new "ListRestrictionQueryRoles" request + And request contains "restriction_query_id" parameter with value "malformed_id" + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/logs-app + Scenario: List roles for a restriction query returns "Not found" response + Given operation "ListRestrictionQueryRoles" enabled + And new "ListRestrictionQueryRoles" request + And request contains "restriction_query_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/logs-app + Scenario: List roles for a restriction query returns "OK" response + Given operation "ListRestrictionQueryRoles" enabled + And there is a valid "restriction_query" in the system + And new "ListRestrictionQueryRoles" request + And request contains "restriction_query_id" parameter from "restriction_query.data.id" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/logs-app + Scenario: Replace a restriction query returns "Bad Request" response + Given operation "ReplaceRestrictionQuery" enabled + And new "ReplaceRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "malformed_id" + And body with value {"data": {"attributes": {"restriction_query": "env:sandbox"}, "type": "logs_restriction_queries"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/logs-app + Scenario: Replace a restriction query returns "Not found" response + Given operation "ReplaceRestrictionQuery" enabled + And new "ReplaceRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"attributes": {"restriction_query": "env:sandbox"}, "type": "logs_restriction_queries"}} + When the request is sent + Then the response status is 404 Not found + + @skip @team:DataDog/logs-app + Scenario: Replace a restriction query returns "OK" response + Given operation "ReplaceRestrictionQuery" enabled + And there is a valid "restriction_query" in the system + And new "ReplaceRestrictionQuery" request + And request contains "restriction_query_id" parameter from "restriction_query.data.id" + And body with value {"data": {"attributes": {"restriction_query": "env:staging"}, "type": "logs_restriction_queries"}} + When the request is sent + Then the response status is 200 OK + + @skip @skip-terraform-config @team:DataDog/logs-app + Scenario: Revoke role from a restriction query returns "Bad Request" response + Given operation "RemoveRoleFromRestrictionQuery" enabled + And new "RemoveRoleFromRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "malformed_id" + And body with value {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @skip-terraform-config @team:DataDog/logs-app + Scenario: Revoke role from a restriction query returns "Not found" response + Given operation "RemoveRoleFromRestrictionQuery" enabled + And new "RemoveRoleFromRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}} + When the request is sent + Then the response status is 404 Not found + + @skip @team:DataDog/logs-app + Scenario: Revoke role from a restriction query returns "OK" response + Given operation "RemoveRoleFromRestrictionQuery" enabled + And there is a valid "restriction_query" in the system + And there is a valid "role" in the system + And new "RemoveRoleFromRestrictionQuery" request + And request contains "restriction_query_id" parameter from "restriction_query.data.id" + And body with value {"data": {"id": "{{ role.data.id }}", "type": "roles"}} + When the request is sent + Then the response status is 204 OK + + @skip @skip-terraform-config @team:DataDog/logs-app + Scenario: Update a restriction query returns "Bad Request" response + Given operation "UpdateRestrictionQuery" enabled + And new "UpdateRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "malformed_id" + And body with value {"data": {"attributes": {"restriction_query": "env:sandbox"}, "type": "logs_restriction_queries"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @skip-terraform-config @team:DataDog/logs-app + Scenario: Update a restriction query returns "Not found" response + Given operation "UpdateRestrictionQuery" enabled + And new "UpdateRestrictionQuery" request + And request contains "restriction_query_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"attributes": {"restriction_query": "env:sandbox"}, "type": "logs_restriction_queries"}} + When the request is sent + Then the response status is 404 Not found + + @skip @team:DataDog/logs-app + Scenario: Update a restriction query returns "OK" response + Given operation "UpdateRestrictionQuery" enabled + And there is a valid "restriction_query" in the system + And new "UpdateRestrictionQuery" request + And request contains "restriction_query_id" parameter from "restriction_query.data.id" + And body with value {"data": {"attributes": {"restriction_query": "env:production"}, "type": "logs_restriction_queries"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/metrics.feature b/test-runner-data/features/v2/metrics.feature new file mode 100644 index 0000000000..e5e78d4a9c --- /dev/null +++ b/test-runner-data/features/v2/metrics.feature @@ -0,0 +1,1158 @@ +@endpoint(metrics) @endpoint(metrics-v2) +Feature: Metrics + The metrics endpoint allows you to: - Post metrics data so it can be + graphed on Datadog’s dashboards - Query metrics from any time period + (timeseries and scalar) - Modify tag configurations for metrics - View + tags and volumes for metrics **Note**: A graph can only contain a set + number of points and as the timeframe over which a metric is viewed + increases, aggregation between points occurs to stay below that set + number. The Post, Patch, and Delete `manage_tags` API methods can only be + performed by a user who has the `Manage Tags for Metrics` permission. See + the [Metrics page](https://docs.datadoghq.com/metrics/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And an instance of "Metrics" API + + @skip-typescript @team:DataDog/metrics-experience + Scenario: Configure tags for multiple metrics returns "Accepted" response + Given a valid "appKeyAuth" key in the system + And there is a valid "user" in the system + And new "CreateBulkTagsMetricsConfiguration" request + And body with value {"data": {"attributes": {"emails": ["{{ user.data.attributes.email }}"], "tags": ["test", "{{ unique_lower_alnum }}"]}, "id": "system.load.1", "type": "metric_bulk_configure_tags"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/metrics-experience + Scenario: Configure tags for multiple metrics returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "CreateBulkTagsMetricsConfiguration" request + And body with value {"data": {"attributes": {"emails": ["sue@example.com", "bob@example.com"], "tags": ["host", "pod_name", "is_shadow"]}, "id": "kafka.lag", "type": "metric_bulk_configure_tags"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Configure tags for multiple metrics returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "CreateBulkTagsMetricsConfiguration" request + And body with value {"data": {"attributes": {"emails": ["sue@example.com", "bob@example.com"], "tags": ["host", "pod_name", "is_shadow"]}, "id": "kafka.lag", "type": "metric_bulk_configure_tags"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/metrics-experience + Scenario: Create a tag configuration returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "CreateTagConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"include_percentiles": false, "metric_type": "distribution", "tags": ["app", "datacenter"]}, "id": "http.endpoint.request", "type": "manage_tags"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Create a tag configuration returns "Conflict" response + Given a valid "appKeyAuth" key in the system + And new "CreateTagConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"include_percentiles": false, "metric_type": "distribution", "tags": ["app", "datacenter"]}, "id": "http.endpoint.request", "type": "manage_tags"}} + When the request is sent + Then the response status is 409 Conflict + + @replay-only @skip-validation @team:DataDog/metrics-experience + Scenario: Create a tag configuration returns "Created" response + Given a valid "appKeyAuth" key in the system + And new "CreateTagConfiguration" request + And there is a valid "metric" in the system + And request contains "metric_name" parameter with value "{{ unique_alnum }}" + And body with value {"data": {"type": "manage_tags", "id": "{{ unique_alnum }}", "attributes": {"tags": ["app","datacenter"], "metric_type": "gauge"}}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/metrics-experience + Scenario: Create a tag indexing rule exemption returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "CreateTagIndexingRuleExemption" enabled + And new "CreateTagIndexingRuleExemption" request + And request contains "metric_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"reason": "This metric has a pre-existing tag configuration."}, "type": "tag_indexing_rule_exemptions"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Create a tag indexing rule exemption returns "Created" response + Given a valid "appKeyAuth" key in the system + And operation "CreateTagIndexingRuleExemption" enabled + And new "CreateTagIndexingRuleExemption" request + And request contains "metric_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"reason": "This metric has a pre-existing tag configuration."}, "type": "tag_indexing_rule_exemptions"}} + When the request is sent + Then the response status is 201 Created + + @team:DataDog/metrics-experience + Scenario: Create a tag indexing rule returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "CreateTagIndexingRule" enabled + And new "CreateTagIndexingRule" request + And body with value {"data": {"type": "tag_indexing_rules", "attributes": {"name": "test", "metric_name_matches": ["dd.test.*"], "options": {"version": 99, "data": {"override_previous_rules": false, "manage_preexisting_metrics": true}}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/metrics-experience + Scenario: Create a tag indexing rule returns "Created" response + Given a valid "appKeyAuth" key in the system + And operation "CreateTagIndexingRule" enabled + And new "CreateTagIndexingRule" request + And body with value {"data": {"attributes": {"exclude_tags_mode": false, "ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"queried_tags_window_seconds": 3600, "related_asset_tags": false}, "manage_preexisting_metrics": true, "metric_match": {"queried_window_seconds": 3600}, "override_previous_rules": false}, "version": 1}, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 201 Created + + @team:DataDog/metrics-experience + Scenario: Create a tag indexing rule with exclude-mode tag usage fields returns "Created" response + Given a valid "appKeyAuth" key in the system + And operation "CreateTagIndexingRule" enabled + And new "CreateTagIndexingRule" request + And body with value {"data": {"attributes": {"exclude_tags_mode": true, "ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"exclude_not_queried_window_seconds": 3600, "exclude_not_used_in_assets": true}, "manage_preexisting_metrics": true, "override_previous_rules": false}, "version": 1}, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 201 Created + + @team:DataDog/metrics-experience + Scenario: Create a tag indexing rule with exclude_not_queried_window_seconds and exclude_tags_mode false returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "CreateTagIndexingRule" enabled + And new "CreateTagIndexingRule" request + And body with value {"data": {"attributes": {"exclude_tags_mode": false, "ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"exclude_not_queried_window_seconds": 3600}, "manage_preexisting_metrics": true, "override_previous_rules": false}, "version": 1}, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/metrics-experience + Scenario: Create a tag indexing rule with exclude_not_queried_window_seconds over the maximum returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "CreateTagIndexingRule" enabled + And new "CreateTagIndexingRule" request + And body with value {"data": {"attributes": {"exclude_tags_mode": true, "ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"exclude_not_queried_window_seconds": 7776001}, "manage_preexisting_metrics": true, "override_previous_rules": false}, "version": 1}, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/metrics-experience + Scenario: Create a tag indexing rule with exclude_not_used_in_assets and exclude_tags_mode false returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "CreateTagIndexingRule" enabled + And new "CreateTagIndexingRule" request + And body with value {"data": {"attributes": {"exclude_tags_mode": false, "ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"exclude_not_used_in_assets": true}, "manage_preexisting_metrics": true, "override_previous_rules": false}, "version": 1}, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Delete a historical metrics configuration returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "DeleteHistoricalMetricsConfiguration" enabled + And new "DeleteHistoricalMetricsConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Delete a historical metrics configuration returns "No Content" response + Given a valid "appKeyAuth" key in the system + And operation "DeleteHistoricalMetricsConfiguration" enabled + And new "DeleteHistoricalMetricsConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @replay-only @skip-validation @team:DataDog/metrics-experience + Scenario: Delete a tag configuration returns "No Content" response + Given there is a valid "metric" in the system + And there is a valid "metric_tag_configuration" in the system + And a valid "appKeyAuth" key in the system + And new "DeleteTagConfiguration" request + And request contains "metric_name" parameter with value "{{ unique_alnum }}" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/metrics-experience + Scenario: Delete a tag configuration returns "Not found" response + Given a valid "appKeyAuth" key in the system + And new "DeleteTagConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @generated @skip @team:DataDog/metrics-experience + Scenario: Delete a tag indexing rule exemption returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "DeleteTagIndexingRuleExemption" enabled + And new "DeleteTagIndexingRuleExemption" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Delete a tag indexing rule exemption returns "No Content" response + Given a valid "appKeyAuth" key in the system + And operation "DeleteTagIndexingRuleExemption" enabled + And new "DeleteTagIndexingRuleExemption" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/metrics-experience + Scenario: Delete a tag indexing rule returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "DeleteTagIndexingRule" enabled + And new "DeleteTagIndexingRule" request + And request contains "id" parameter with value "not-a-valid-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/metrics-experience + Scenario: Delete a tag indexing rule returns "No Content" response + Given a valid "appKeyAuth" key in the system + And operation "DeleteTagIndexingRule" enabled + And there is a valid "tag_indexing_rule" in the system + And new "DeleteTagIndexingRule" request + And request contains "id" parameter from "tag_indexing_rule.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/metrics-experience + Scenario: Delete tags for multiple metrics returns "Accepted" response + Given a valid "appKeyAuth" key in the system + And new "DeleteBulkTagsMetricsConfiguration" request + And body with value {"data": {"attributes": {"emails": ["sue@example.com", "bob@example.com"]}, "id": "kafka.lag", "type": "metric_bulk_configure_tags"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/metrics-experience + Scenario: Delete tags for multiple metrics returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "DeleteBulkTagsMetricsConfiguration" request + And body with value {"data": {"attributes": {"emails": ["sue@example.com", "bob@example.com"]}, "id": "kafka.lag", "type": "metric_bulk_configure_tags"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Delete tags for multiple metrics returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "DeleteBulkTagsMetricsConfiguration" request + And body with value {"data": {"attributes": {"emails": ["sue@example.com", "bob@example.com"]}, "id": "kafka.lag", "type": "metric_bulk_configure_tags"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/metrics-experience + Scenario: Enable historical metrics ingestion returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "CreateHistoricalMetricsConfiguration" enabled + And new "CreateHistoricalMetricsConfiguration" request + And body with value {"data": {"id": "dd.test.metric", "type": "historical_metrics_configurations"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Enable historical metrics ingestion returns "Created" response + Given a valid "appKeyAuth" key in the system + And operation "CreateHistoricalMetricsConfiguration" enabled + And new "CreateHistoricalMetricsConfiguration" request + And body with value {"data": {"id": "dd.test.metric", "type": "historical_metrics_configurations"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/metrics-experience + Scenario: Enable historical metrics ingestion returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And operation "CreateHistoricalMetricsConfiguration" enabled + And new "CreateHistoricalMetricsConfiguration" request + And body with value {"data": {"id": "dd.test.metric", "type": "historical_metrics_configurations"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/metrics-experience + Scenario: Enable historical metrics ingestion returns "OK" response + Given a valid "appKeyAuth" key in the system + And operation "CreateHistoricalMetricsConfiguration" enabled + And new "CreateHistoricalMetricsConfiguration" request + And body with value {"data": {"id": "dd.test.metric", "type": "historical_metrics_configurations"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/metrics-experience + Scenario: Enable historical metrics ingestion returns "Unprocessable Entity" response + Given a valid "appKeyAuth" key in the system + And operation "CreateHistoricalMetricsConfiguration" enabled + And new "CreateHistoricalMetricsConfiguration" request + And body with value {"data": {"id": "dd.test.metric", "type": "historical_metrics_configurations"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get a historical metrics configuration returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "GetHistoricalMetricsConfiguration" enabled + And new "GetHistoricalMetricsConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get a historical metrics configuration returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And operation "GetHistoricalMetricsConfiguration" enabled + And new "GetHistoricalMetricsConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get a historical metrics configuration returns "OK" response + Given a valid "appKeyAuth" key in the system + And operation "GetHistoricalMetricsConfiguration" enabled + And new "GetHistoricalMetricsConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get a list of metrics returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListTagConfigurations" request + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/metrics-experience + Scenario: Get a list of metrics returns "Success" response + Given a valid "appKeyAuth" key in the system + And there is a valid "metric_tag_configuration" in the system + And new "ListTagConfigurations" request + When the request is sent + Then the response status is 200 Success + + @replay-only @skip-validation @team:DataDog/metrics-experience @with-pagination + Scenario: Get a list of metrics returns "Success" response with pagination + Given a valid "appKeyAuth" key in the system + And new "ListTagConfigurations" request + And request contains "page[size]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 Success + And the response has 3 items + + @team:DataDog/metrics-experience + Scenario: Get a list of metrics with a tag filter returns "Success" response + Given a valid "appKeyAuth" key in the system + And new "ListTagConfigurations" request + And request contains "filter[tags]" parameter with value "{{ unique_alnum }}" + When the request is sent + Then the response status is 200 Success + And the response "data" has length 0 + + @replay-only @team:DataDog/metrics-experience + Scenario: Get a list of metrics with configured filter returns "Success" response + Given a valid "appKeyAuth" key in the system + And new "ListTagConfigurations" request + And request contains "filter[configured]" parameter with value true + When the request is sent + Then the response status is 200 Success + And the response "data[0].type" is equal to "manage_tags" + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get a tag indexing rule exemption returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "GetTagIndexingRuleExemption" enabled + And new "GetTagIndexingRuleExemption" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get a tag indexing rule exemption returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And operation "GetTagIndexingRuleExemption" enabled + And new "GetTagIndexingRuleExemption" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get a tag indexing rule exemption returns "OK" response + Given a valid "appKeyAuth" key in the system + And operation "GetTagIndexingRuleExemption" enabled + And new "GetTagIndexingRuleExemption" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/metrics-experience + Scenario: Get a tag indexing rule returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "GetTagIndexingRule" enabled + And new "GetTagIndexingRule" request + And request contains "id" parameter with value "not-a-valid-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/metrics-experience + Scenario: Get a tag indexing rule returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And operation "GetTagIndexingRule" enabled + And new "GetTagIndexingRule" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/metrics-experience + Scenario: Get a tag indexing rule returns "OK" response + Given a valid "appKeyAuth" key in the system + And operation "GetTagIndexingRule" enabled + And there is a valid "tag_indexing_rule" in the system + And new "GetTagIndexingRule" request + And request contains "id" parameter from "tag_indexing_rule.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get tag key cardinality details returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "GetMetricTagCardinalityDetails" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get tag key cardinality details returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "GetMetricTagCardinalityDetails" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/metrics-experience + Scenario: Get tag key cardinality details returns "Success" response + Given a valid "appKeyAuth" key in the system + And new "GetMetricTagCardinalityDetails" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 Success + + @generated @skip @team:DataDog/metrics-experience + Scenario: List active tags and aggregations returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListActiveMetricConfigurations" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: List active tags and aggregations returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "ListActiveMetricConfigurations" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/metrics-experience + Scenario: List active tags and aggregations returns "Success" response + Given a valid "appKeyAuth" key in the system + And there is a valid "metric_static" in the system + And new "ListActiveMetricConfigurations" request + And request contains "metric_name" parameter with value "static_test_metric_donotdelete" + When the request is sent + Then the response status is 200 Success + And the response "data.type" is equal to "actively_queried_configurations" + And the response "data.id" is equal to "static_test_metric_donotdelete" + + @generated @skip @team:DataDog/metrics-experience + Scenario: List distinct metric volumes by metric name returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListVolumesByMetricName" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: List distinct metric volumes by metric name returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "ListVolumesByMetricName" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/metrics-experience + Scenario: List distinct metric volumes by metric name returns "Success" response + Given a valid "appKeyAuth" key in the system + And there is a valid "metric_static" in the system + And new "ListVolumesByMetricName" request + And request contains "metric_name" parameter with value "static_test_metric_donotdelete" + When the request is sent + Then the response status is 200 Success + And the response "data.type" is equal to "metric_volumes" + And the response "data.id" is equal to "static_test_metric_donotdelete" + + @generated @skip @team:DataDog/metrics-experience + Scenario: List tag configuration by name returns "No tag configuration exists for the metric" response + Given a valid "appKeyAuth" key in the system + And new "ListTagConfigurationByName" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 No tag configuration exists for the metric + + @replay-only @skip-validation @team:DataDog/metrics-experience + Scenario: List tag configuration by name returns "Success" response + Given a valid "appKeyAuth" key in the system + And there is a valid "metric" in the system + And there is a valid "metric_tag_configuration" in the system + And new "ListTagConfigurationByName" request + And request contains "metric_name" parameter from "metric_tag_configuration.data.id" + When the request is sent + Then the response status is 200 Success + And the response "data.id" has the same value as "metric_tag_configuration.data.id" + + @team:DataDog/metrics-experience + Scenario: List tag indexing rules for a metric returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "ListTagIndexingRulesForMetric" enabled + And new "ListTagIndexingRulesForMetric" request + And request contains "metric_name" parameter with value "1invalid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/metrics-experience + Scenario: List tag indexing rules for a metric returns "OK" response + Given a valid "appKeyAuth" key in the system + And operation "ListTagIndexingRulesForMetric" enabled + And new "ListTagIndexingRulesForMetric" request + And request contains "metric_name" parameter with value "{{ unique_alnum }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/metrics-experience + Scenario: List tag indexing rules returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "ListTagIndexingRules" enabled + And new "ListTagIndexingRules" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/metrics-experience + Scenario: List tag indexing rules returns "OK" response + Given a valid "appKeyAuth" key in the system + And operation "ListTagIndexingRules" enabled + And new "ListTagIndexingRules" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/metrics-experience + Scenario: List tags by metric name returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "ListTagsByMetricName" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: List tags by metric name returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And new "ListTagsByMetricName" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @skip-validation @team:DataDog/metrics-experience + Scenario: List tags by metric name returns "Success" response + Given a valid "appKeyAuth" key in the system + And there is a valid "metric" in the system + And there is a valid "metric_tag_configuration" in the system + And new "ListTagsByMetricName" request + And request contains "metric_name" parameter from "metric_tag_configuration.data.id" + When the request is sent + Then the response status is 200 Success + And the response "data.id" has the same value as "metric_tag_configuration.data.id" + + @generated @skip @team:Datadog/timeseries-query + Scenario: Query scalar data across multiple products returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a+b", "limit": {"count": 10, "order": "desc"}}], "from": 1568899800000, "queries": [{"aggregator": "avg", "data_source": "metrics", "query": "avg:system.cpu.user{*} by {env}"}], "to": 1568923200000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/timeseries-query + Scenario: Query scalar data across multiple products returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a+b", "limit": {"count": 10, "order": "desc"}}], "from": 1568899800000, "queries": [{"aggregator": "avg", "data_source": "metrics", "query": "avg:system.cpu.user{*} by {env}"}], "to": 1568923200000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:Datadog/timeseries-query + Scenario: Query timeseries data across multiple products returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a+b", "limit": {"count": 10, "order": "desc"}}], "from": 1568899800000, "interval": 5000, "queries": [{"data_source": "metrics", "query": "avg:system.cpu.user{*} by {env}"}], "to": 1568923200000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/timeseries-query + Scenario: Query timeseries data across multiple products returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a+b", "limit": {"count": 10, "order": "desc"}}], "from": 1568899800000, "interval": 5000, "queries": [{"data_source": "metrics", "query": "avg:system.cpu.user{*} by {env}"}], "to": 1568923200000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/metrics-experience + Scenario: Related Assets to a Metric returns "API error response." response + Given a valid "appKeyAuth" key in the system + And new "ListMetricAssets" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/metrics-experience + Scenario: Related Assets to a Metric returns "Success" response + Given a valid "appKeyAuth" key in the system + And new "ListMetricAssets" request + And request contains "metric_name" parameter with value "system.cpu.user" + When the request is sent + Then the response status is 200 Success + And the response "data.type" is equal to "metrics" + And the response "data.id" is equal to "system.cpu.user" + + @team:DataDog/metrics-experience + Scenario: Reorder tag indexing rules returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "ReorderTagIndexingRules" enabled + And new "ReorderTagIndexingRules" request + And body with value {"data": {"attributes": {"rule_ids": []}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/metrics-experience + Scenario: Reorder tag indexing rules returns "No Content" response + Given a valid "appKeyAuth" key in the system + And operation "ReorderTagIndexingRules" enabled + And there is a valid "tag_indexing_rule" in the system + And new "ReorderTagIndexingRules" request + And body with value {"data": {"attributes": {"rule_ids": ["{{ tag_indexing_rule.data.id }}"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/metrics-experience + Scenario: Reorder tag indexing rules returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And operation "ReorderTagIndexingRules" enabled + And new "ReorderTagIndexingRules" request + And body with value {"data": {"attributes": {"rule_ids": ["00000000-0000-0000-0000-000000000001", "00000000-0000-0000-0000-000000000002"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:Datadog/timeseries-query + Scenario: Scalar cross product query returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a+b", "limit": {"count": 10, "order": "desc"}}], "from": 1568899800000, "queries": [{"aggregator": "avg", "data_source": "metrics", "query": "avg:system.cpu.user{*}", "name": "a"}], "to": 1568923200000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:Datadog/timeseries-query + Scenario: Scalar cross product query returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"aggregator": "avg", "data_source": "metrics", "query": "avg:system.cpu.user{*}", "name": "a"}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + And the response "data.attributes.columns[0].name" is equal to "a" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with RUM data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "rum", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with apm_dependency_stats data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "apm_dependency_stats", "name": "a", "env": "ci", "service": "cassandra", "stat": "avg_duration", "operation_name": "cassandra.query", "resource_name": "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?", "primary_tag_name": "datacenter", "primary_tag_value": "edge-eu1.prod.dog"}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with apm_metrics data source and span_kind returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "apm_metrics", "name": "a", "stat": "hits", "service": "web-store", "query_filter": "env:prod", "span_kind": "server", "group_by": ["resource_name"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with apm_metrics data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "apm_metrics", "name": "a", "stat": "hits", "service": "web-store", "query_filter": "env:prod", "group_by": ["resource_name"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with apm_resource_stats data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "apm_resource_stats", "name": "a", "env": "staging", "service": "azure-bill-import", "stat": "hits", "operation_name": "cassandra.query", "group_by": ["resource_name"], "primary_tag_name": "datacenter", "primary_tag_value": "*"}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with audit data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "audit", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with ci_pipelines data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "ci_pipelines", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with ci_tests data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "ci_tests", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with container data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "container", "name": "a", "metric": "process.stat.container.cpu.system_pct", "aggregator": "avg", "tag_filters": [], "limit": 10, "sort": "desc"}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with events data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "events", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with logs data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "logs", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with network data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "network", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with on_call_events data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "on_call_events", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with process data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "process", "name": "a", "metric": "process.stat.cpu.total_pct", "aggregator": "avg", "text_filter": "", "tag_filters": [], "limit": 10, "sort": "desc", "is_normalized_cpu": false}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with product_analytics data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "product_analytics", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with profiles data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "profiles", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with security_signals data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "security_signals", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with slo data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "slo", "name": "a", "slo_id": "12345678910", "measure": "slo_status", "slo_query_type": "metric", "group_mode": "overall", "additional_query_filters": "*"}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Scalar cross product query with spans data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryScalarData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "queries": [{"data_source": "spans", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "scalar_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "scalar_response" + + @generated @skip @team:DataDog/metrics-intake + Scenario: Submit metrics returns "Bad Request" response + Given new "SubmitMetrics" request + And body with value {"series": [{"metric": "system.load.1", "points": [{"timestamp": 1475317847, "value": 0.7}], "resources": [{"name": "dummyhost", "type": "host"}]}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/metrics-intake + Scenario: Submit metrics returns "Payload accepted" response + Given new "SubmitMetrics" request + And body with value {"series": [{"metric": "system.load.1", "type": 0, "points": [{"timestamp": {{ timestamp('now') }}, "value": 0.7}], "resources": [{"name": "dummyhost", "type": "host"}]}]} + When the request is sent + Then the response status is 202 Payload accepted + And the response "errors" has length 0 + + @generated @skip @team:DataDog/metrics-intake + Scenario: Submit metrics returns "Payload too large" response + Given new "SubmitMetrics" request + And body with value {"series": [{"metric": "system.load.1", "points": [{"timestamp": 1475317847, "value": 0.7}], "resources": [{"name": "dummyhost", "type": "host"}]}]} + When the request is sent + Then the response status is 413 Payload too large + + @generated @skip @team:DataDog/metrics-intake + Scenario: Submit metrics returns "Request timeout" response + Given new "SubmitMetrics" request + And body with value {"series": [{"metric": "system.load.1", "points": [{"timestamp": 1475317847, "value": 0.7}], "resources": [{"name": "dummyhost", "type": "host"}]}]} + When the request is sent + Then the response status is 408 Request timeout + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/metrics-intake + Scenario: Submit metrics with compression returns "Payload accepted" response + Given new "SubmitMetrics" request + And body with value {"series": [{"metric": "system.load.1", "type": 0, "points": [{"timestamp": {{ timestamp('now') }}, "value": 0.7}]}]} + And request contains "Content-Encoding" parameter with value "zstd1" + When the request is sent + Then the response status is 202 Payload accepted + + @generated @skip @team:DataDog/metrics-experience + Scenario: Tag Configuration Cardinality Estimator returns "API error response." response + Given a valid "appKeyAuth" key in the system + And new "EstimateMetricsOutputSeries" request + And request contains "metric_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @replay-only @team:DataDog/metrics-experience + Scenario: Tag Configuration Cardinality Estimator returns "Success" response + Given new "EstimateMetricsOutputSeries" request + And request contains "metric_name" parameter with value "system.cpu.idle" + And request contains "filter[groups]" parameter with value "app,host" + And request contains "filter[num_aggregations]" parameter with value 4 + When the request is sent + Then the response status is 200 Success + + @skip @team:Datadog/timeseries-query + Scenario: Timeseries cross product query returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a+b", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}, "interval": 5000, "queries": [{"data_source": "metrics", "query": "avg:system.cpu.user{*}"}], "to": {{ timestamp('now') }}}, "type": "timeseries_rquest"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:Datadog/timeseries-query + Scenario: Timeseries cross product query returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "metrics", "query": "avg:datadog.estimated_usage.metrics.custom{*}", "name": "a"}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with RUM data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "rum", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with apm_dependency_stats data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "apm_dependency_stats", "name": "a", "env": "ci", "service": "cassandra", "stat": "avg_duration", "operation_name": "cassandra.query", "resource_name": "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?", "primary_tag_name": "datacenter", "primary_tag_value": "edge-eu1.prod.dog"}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with apm_metrics data source and span_kind returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "apm_metrics", "name": "a", "stat": "hits", "service": "web-store", "query_filter": "env:prod", "span_kind": "server", "group_by": ["resource_name"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with apm_metrics data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "apm_metrics", "name": "a", "stat": "hits", "service": "web-store", "query_filter": "env:prod", "group_by": ["resource_name"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with apm_resource_stats data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "apm_resource_stats", "name": "a", "env": "staging", "service": "azure-bill-import", "stat": "hits", "operation_name": "cassandra.query", "group_by": ["resource_name"], "primary_tag_name": "datacenter", "primary_tag_value": "*"}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with audit data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "audit", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with ci_pipelines data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "ci_pipelines", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with ci_tests data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "ci_tests", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with container data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "container", "name": "a", "metric": "process.stat.container.cpu.system_pct", "tag_filters": [], "limit": 10, "sort": "desc"}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with events data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "events", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with logs data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "logs", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with network data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "network", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with on_call_events data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "on_call_events", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with process data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "process", "name": "a", "metric": "process.stat.cpu.total_pct", "text_filter": "", "tag_filters": [], "limit": 10, "sort": "desc", "is_normalized_cpu": false}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with product_analytics data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "product_analytics", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with profiles data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "profiles", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with security_signals data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "security_signals", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with slo data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "slo", "name": "a", "slo_id": "12345678910", "measure": "slo_status", "slo_query_type": "metric", "group_mode": "overall", "additional_query_filters": "*"}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @skip-validation @team:Datadog/timeseries-query + Scenario: Timeseries cross product query with spans data source returns "OK" response + Given a valid "appKeyAuth" key in the system + And new "QueryTimeseriesData" request + And body with value {"data": {"attributes": {"formulas": [{"formula": "a", "limit": {"count": 10, "order": "desc"}}], "from": {{ timestamp('now - 1h') }}000, "interval": 5000, "queries": [{"data_source": "spans", "name": "a", "compute": {"aggregation": "count"}, "search": {"query": "*"}, "indexes": ["*"]}], "to": {{ timestamp('now') }}000}, "type": "timeseries_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "timeseries_response" + + @generated @skip @team:DataDog/metrics-experience + Scenario: Update a tag configuration returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And new "UpdateTagConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"group_by": ["app", "datacenter"], "include_percentiles": false}, "id": "http.endpoint.request", "type": "manage_tags"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @skip-validation @team:DataDog/metrics-experience + Scenario: Update a tag configuration returns "OK" response + Given a valid "appKeyAuth" key in the system + And there is a valid "metric" in the system + And there is a valid "metric_tag_configuration" in the system + And new "UpdateTagConfiguration" request + And request contains "metric_name" parameter from "metric_tag_configuration.data.id" + And body with value {"data": {"type": "manage_tags", "id": "{{ metric_tag_configuration.data.id }}", "attributes": {"tags": ["app"]}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.tags[0]" is equal to "app" + + @generated @skip @team:DataDog/metrics-experience + Scenario: Update a tag configuration returns "Unprocessable Entity" response + Given a valid "appKeyAuth" key in the system + And new "UpdateTagConfiguration" request + And request contains "metric_name" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"group_by": ["app", "datacenter"], "include_percentiles": false}, "id": "http.endpoint.request", "type": "manage_tags"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @team:DataDog/metrics-experience + Scenario: Update a tag indexing rule returns "Bad Request" response + Given a valid "appKeyAuth" key in the system + And operation "UpdateTagIndexingRule" enabled + And new "UpdateTagIndexingRule" request + And request contains "id" parameter with value "not-a-valid-uuid" + And body with value {"data": {"attributes": {"ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"queried_tags_window_seconds": 3600, "related_asset_tags": false}, "manage_preexisting_metrics": true, "metric_match": {"queried_window_seconds": 3600}, "override_previous_rules": false}, "version": 1}, "rule_order": 2, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/metrics-experience + Scenario: Update a tag indexing rule returns "Conflict" response + Given a valid "appKeyAuth" key in the system + And operation "UpdateTagIndexingRule" enabled + And new "UpdateTagIndexingRule" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"exclude_not_queried_window_seconds": 3600, "exclude_not_used_in_assets": false, "queried_tags_window_seconds": 3600, "related_asset_tags": false}, "manage_preexisting_metrics": true, "metric_match": {"queried_window_seconds": 3600}, "override_previous_rules": false}, "version": 1}, "rule_order": 2, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/metrics-experience + Scenario: Update a tag indexing rule returns "Not Found" response + Given a valid "appKeyAuth" key in the system + And operation "UpdateTagIndexingRule" enabled + And new "UpdateTagIndexingRule" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"attributes": {"ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"queried_tags_window_seconds": 3600, "related_asset_tags": false}, "manage_preexisting_metrics": true, "metric_match": {"queried_window_seconds": 3600}, "override_previous_rules": false}, "version": 1}, "rule_order": 2, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/metrics-experience + Scenario: Update a tag indexing rule returns "OK" response + Given a valid "appKeyAuth" key in the system + And operation "UpdateTagIndexingRule" enabled + And there is a valid "tag_indexing_rule" in the system + And new "UpdateTagIndexingRule" request + And request contains "id" parameter from "tag_indexing_rule.data.id" + And body with value {"data": {"attributes": {"ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"queried_tags_window_seconds": 3600, "related_asset_tags": false}, "manage_preexisting_metrics": true, "metric_match": {"queried_window_seconds": 3600}, "override_previous_rules": false}, "version": 1}, "rule_order": 2, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/metrics-experience + Scenario: Update a tag indexing rule with exclude-mode tag usage fields returns "OK" response + Given a valid "appKeyAuth" key in the system + And operation "UpdateTagIndexingRule" enabled + And there is a valid "tag_indexing_rule_exclude_mode" in the system + And new "UpdateTagIndexingRule" request + And request contains "id" parameter from "tag_indexing_rule_exclude_mode.data.id" + And body with value {"data": {"attributes": {"exclude_tags_mode": true, "ignored_metric_name_matches": [], "metric_name_matches": ["dd.test.*"], "name": "my-indexing-rule", "options": {"data": {"dynamic_tags": {"exclude_not_queried_window_seconds": 7200, "exclude_not_used_in_assets": true}, "manage_preexisting_metrics": true, "override_previous_rules": false}, "version": 1}, "rule_order": 2, "tags": ["env", "service"]}, "type": "tag_indexing_rules"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/microsoft_teams_integration.feature b/test-runner-data/features/v2/microsoft_teams_integration.feature new file mode 100644 index 0000000000..ddbffd9627 --- /dev/null +++ b/test-runner-data/features/v2/microsoft_teams_integration.feature @@ -0,0 +1,443 @@ +@endpoint(microsoft-teams-integration) @endpoint(microsoft-teams-integration-v2) +Feature: Microsoft Teams Integration + Configure your [Datadog Microsoft Teams + integration](https://docs.datadoghq.com/integrations/microsoft_teams/) + directly through the Datadog API. Note: These endpoints do not support + legacy connector handles. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "MicrosoftTeamsIntegration" API + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create Workflows webhook handle returns "Bad Request" response + Given new "CreateWorkflowsWebhookHandle" request + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create Workflows webhook handle returns "CREATED" response + Given new "CreateWorkflowsWebhookHandle" request + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 201 CREATED + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create Workflows webhook handle returns "Conflict" response + Given new "CreateWorkflowsWebhookHandle" request + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create Workflows webhook handle returns "Failed Precondition" response + Given new "CreateWorkflowsWebhookHandle" request + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create Workflows webhook handle returns "Not Found" response + Given new "CreateWorkflowsWebhookHandle" request + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 404 Not Found + + @integration-only @team:DataDog/chat-integrations + Scenario: Create api handle returns "CREATED" response + Given new "CreateTenantBasedHandle" request + And body with value {"data": {"attributes": {"channel_id": "19:iD_D2xy_sAa-JV851JJYwIa6mlW9F9Nxm3SLyZq68qY1@thread.tacv2", "name": "{{unique}}", "team_id": "e5f50a58-c929-4fb3-8866-e2cd836de3c2", "tenant_id": "4d3bac44-0230-4732-9e70-cc00736f0a97"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 201 CREATED + And the response "data.attributes.name" is equal to "{{unique}}" + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create tenant-based handle returns "Bad Request" response + Given new "CreateTenantBasedHandle" request + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create tenant-based handle returns "CREATED" response + Given new "CreateTenantBasedHandle" request + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 201 CREATED + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create tenant-based handle returns "Conflict" response + Given new "CreateTenantBasedHandle" request + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create tenant-based handle returns "Failed Precondition" response + Given new "CreateTenantBasedHandle" request + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Create tenant-based handle returns "Not Found" response + Given new "CreateTenantBasedHandle" request + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/chat-integrations + Scenario: Create workflow webhook handle returns "CREATED" response + Given new "CreateWorkflowsWebhookHandle" request + And body with value {"data": {"attributes": {"name": "{{unique}}", "url": "https://example.logic.azure.com/workflows/123"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 201 CREATED + And the response "data.attributes.name" is equal to "{{unique}}" + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete Workflows webhook handle returns "Bad Request" response + Given new "DeleteWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete Workflows webhook handle returns "Failed Precondition" response + Given new "DeleteWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete Workflows webhook handle returns "OK" response + Given new "DeleteWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @integration-only @team:DataDog/chat-integrations + Scenario: Delete api handle returns "OK" response + Given there is a valid "tenant_based_handle" in the system + And new "DeleteTenantBasedHandle" request + And request contains "handle_id" parameter from "tenant_based_handle.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete tenant-based handle returns "Bad Request" response + Given new "DeleteTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete tenant-based handle returns "Failed Precondition" response + Given new "DeleteTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete tenant-based handle returns "OK" response + Given new "DeleteTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete user binding returns "Bad Request" response + Given new "DeleteMSTeamsUserBinding" request + And request contains "tenant_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete user binding returns "Failed Precondition" response + Given new "DeleteMSTeamsUserBinding" request + And request contains "tenant_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Delete user binding returns "No Content" response + Given new "DeleteMSTeamsUserBinding" request + And request contains "tenant_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/chat-integrations + Scenario: Delete workflow webhook handle returns "OK" response + Given there is a valid "workflows_webhook_handle" in the system + And new "DeleteWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "workflows_webhook_handle.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get Workflows webhook handle information returns "Bad Request" response + Given new "GetWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get Workflows webhook handle information returns "Failed Precondition" response + Given new "GetWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get Workflows webhook handle information returns "Not Found" response + Given new "GetWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get Workflows webhook handle information returns "OK" response + Given new "GetWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all Workflows webhook handles returns "Bad Request" response + Given new "ListWorkflowsWebhookHandles" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all Workflows webhook handles returns "Failed Precondition" response + Given new "ListWorkflowsWebhookHandles" request + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all Workflows webhook handles returns "Not Found" response + Given new "ListWorkflowsWebhookHandles" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all Workflows webhook handles returns "OK" response + Given new "ListWorkflowsWebhookHandles" request + When the request is sent + Then the response status is 200 OK + + @integration-only @team:DataDog/chat-integrations + Scenario: Get all api handles returns "OK" response + Given there is a valid "tenant_based_handle" in the system + And new "ListTenantBasedHandles" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "ms-teams-tenant-based-handle-info" + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all tenant-based handles returns "Bad Request" response + Given new "ListTenantBasedHandles" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all tenant-based handles returns "Failed Precondition" response + Given new "ListTenantBasedHandles" request + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all tenant-based handles returns "Not Found" response + Given new "ListTenantBasedHandles" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get all tenant-based handles returns "OK" response + Given new "ListTenantBasedHandles" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/chat-integrations + Scenario: Get all workflow webhook handles returns "OK" response + Given there is a valid "workflows_webhook_handle" in the system + And new "ListWorkflowsWebhookHandles" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "workflows-webhook-handle" + + @integration-only @team:DataDog/chat-integrations + Scenario: Get api handle information returns "OK" response + Given there is a valid "tenant_based_handle" in the system + And new "GetTenantBasedHandle" request + And request contains "handle_id" parameter from "tenant_based_handle.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" has the same value as "tenant_based_handle.data.attributes.name" + And the response "data.attributes.channel_id" has the same value as "tenant_based_handle.data.attributes.channel_id" + And the response "data.attributes.team_id" has the same value as "tenant_based_handle.data.attributes.team_id" + And the response "data.attributes.tenant_id" has the same value as "tenant_based_handle.data.attributes.tenant_id" + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get channel information by name returns "Bad Request" response + Given new "GetChannelByName" request + And request contains "tenant_name" parameter from "REPLACE.ME" + And request contains "team_name" parameter from "REPLACE.ME" + And request contains "channel_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get channel information by name returns "Not Found" response + Given new "GetChannelByName" request + And request contains "tenant_name" parameter from "REPLACE.ME" + And request contains "team_name" parameter from "REPLACE.ME" + And request contains "channel_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get channel information by name returns "OK" response + Given new "GetChannelByName" request + And request contains "tenant_name" parameter from "REPLACE.ME" + And request contains "team_name" parameter from "REPLACE.ME" + And request contains "channel_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get tenant-based handle information returns "Bad Request" response + Given new "GetTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get tenant-based handle information returns "Failed Precondition" response + Given new "GetTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get tenant-based handle information returns "Not Found" response + Given new "GetTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Get tenant-based handle information returns "OK" response + Given new "GetTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/chat-integrations + Scenario: Get workflow webhook handle information returns "OK" response + Given there is a valid "workflows_webhook_handle" in the system + And new "GetWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "workflows_webhook_handle.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update Workflows webhook handle returns "Bad Request" response + Given new "UpdateWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update Workflows webhook handle returns "Conflict" response + Given new "UpdateWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update Workflows webhook handle returns "Failed Precondition" response + Given new "UpdateWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update Workflows webhook handle returns "Not Found" response + Given new "UpdateWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update Workflows webhook handle returns "OK" response + Given new "UpdateWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-handle-name", "url": "https://fake.url.com"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 200 OK + + @integration-only @team:DataDog/chat-integrations + Scenario: Update api handle returns "OK" response + Given there is a valid "tenant_based_handle" in the system + And new "UpdateTenantBasedHandle" request + And request contains "handle_id" parameter from "tenant_based_handle.data.id" + And body with value {"data": {"attributes": {"name": "{{tenant_based_handle.data.attributes.name}}--updated"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{tenant_based_handle.data.attributes.name}}--updated" + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update tenant-based handle returns "Bad Request" response + Given new "UpdateTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update tenant-based handle returns "Conflict" response + Given new "UpdateTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update tenant-based handle returns "Failed Precondition" response + Given new "UpdateTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 412 Failed Precondition + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update tenant-based handle returns "Not Found" response + Given new "UpdateTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/chat-integrations + Scenario: Update tenant-based handle returns "OK" response + Given new "UpdateTenantBasedHandle" request + And request contains "handle_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"channel_id": "fake-channel-id", "name": "fake-handle-name", "team_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "00000000-0000-0000-0000-000000000001"}, "type": "tenant-based-handle"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/chat-integrations + Scenario: Update workflow webhook handle returns "OK" response + Given there is a valid "workflows_webhook_handle" in the system + And new "UpdateWorkflowsWebhookHandle" request + And request contains "handle_id" parameter from "workflows_webhook_handle.data.id" + And body with value {"data": {"attributes": {"name": "{{workflows_webhook_handle.data.attributes.name}}--updated"}, "type": "workflows-webhook-handle"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{workflows_webhook_handle.data.attributes.name}}--updated" diff --git a/test-runner-data/features/v2/model_lab_api.feature b/test-runner-data/features/v2/model_lab_api.feature new file mode 100644 index 0000000000..997a9c389f --- /dev/null +++ b/test-runner-data/features/v2/model_lab_api.feature @@ -0,0 +1,359 @@ +@endpoint(model-lab-api) @endpoint(model-lab-api-v2) +Feature: Model Lab API + Manage Model Lab projects, runs, artifacts, and facets for ML experiment + tracking. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ModelLabAPI" API + + @generated @skip @team:DataDog/ml-observability + Scenario: Delete a Model Lab run returns "Bad Request" response + Given operation "DeleteModelLabRun" enabled + And new "DeleteModelLabRun" request + And request contains "run_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: Delete a Model Lab run returns "No Content" response + Given operation "DeleteModelLabRun" enabled + And new "DeleteModelLabRun" request + And request contains "run_id" parameter with value 70158 + When the request is sent + Then the response status is 204 No Content + + @replay-only @team:DataDog/ml-observability + Scenario: Delete a Model Lab run returns "Not Found" response + Given operation "DeleteModelLabRun" enabled + And new "DeleteModelLabRun" request + And request contains "run_id" parameter with value 999999 + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/ml-observability + Scenario: Download artifact content returns "OK" response + Given operation "GetModelLabArtifactContent" enabled + And new "GetModelLabArtifactContent" request + And request contains "project_id" parameter with value "2387" + And request contains "artifact_path" parameter with value "f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/adapter_config.json" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get Model Lab artifact content returns "Bad Request" response + Given operation "GetModelLabArtifactContent" enabled + And new "GetModelLabArtifactContent" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "artifact_path" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Get Model Lab artifact content returns "OK" response + Given operation "GetModelLabArtifactContent" enabled + And new "GetModelLabArtifactContent" request + And request contains "project_id" parameter from "REPLACE.ME" + And request contains "artifact_path" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get a Model Lab project returns "Bad Request" response + Given operation "GetModelLabProject" enabled + And new "GetModelLabProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: Get a Model Lab project returns "Not Found" response + Given operation "GetModelLabProject" enabled + And new "GetModelLabProject" request + And request contains "project_id" parameter with value 999999 + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/ml-observability + Scenario: Get a Model Lab project returns "OK" response + Given operation "GetModelLabProject" enabled + And new "GetModelLabProject" request + And request contains "project_id" parameter with value 2387 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Get a Model Lab run returns "Bad Request" response + Given operation "GetModelLabRun" enabled + And new "GetModelLabRun" request + And request contains "run_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: Get a Model Lab run returns "Not Found" response + Given operation "GetModelLabRun" enabled + And new "GetModelLabRun" request + And request contains "run_id" parameter with value 999999 + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/ml-observability + Scenario: Get a Model Lab run returns "OK" response + Given operation "GetModelLabRun" enabled + And new "GetModelLabRun" request + And request contains "run_id" parameter with value 70158 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab project artifacts returns "Bad Request" response + Given operation "ListModelLabProjectArtifacts" enabled + And new "ListModelLabProjectArtifacts" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: List Model Lab project artifacts returns "OK" response + Given operation "ListModelLabProjectArtifacts" enabled + And new "ListModelLabProjectArtifacts" request + And request contains "project_id" parameter with value 2387 + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/ml-observability + Scenario: List Model Lab project facet keys returns "OK" response + Given operation "ListModelLabProjectFacetKeys" enabled + And new "ListModelLabProjectFacetKeys" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab project facet values returns "Bad Request" response + Given operation "ListModelLabProjectFacetValues" enabled + And new "ListModelLabProjectFacetValues" request + And request contains "facet_type" parameter from "REPLACE.ME" + And request contains "facet_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: List Model Lab project facet values returns "OK" response + Given operation "ListModelLabProjectFacetValues" enabled + And new "ListModelLabProjectFacetValues" request + And request contains "facet_type" parameter with value "tag" + And request contains "facet_name" parameter with value "model" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab projects returns "Bad Request" response + Given operation "ListModelLabProjects" enabled + And new "ListModelLabProjects" request + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: List Model Lab projects returns "OK" response + Given operation "ListModelLabProjects" enabled + And new "ListModelLabProjects" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab run artifacts returns "Bad Request" response + Given operation "ListModelLabRunArtifacts" enabled + And new "ListModelLabRunArtifacts" request + And request contains "run_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab run artifacts returns "Not Found" response + Given operation "ListModelLabRunArtifacts" enabled + And new "ListModelLabRunArtifacts" request + And request contains "run_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/ml-observability + Scenario: List Model Lab run artifacts returns "OK" response + Given operation "ListModelLabRunArtifacts" enabled + And new "ListModelLabRunArtifacts" request + And request contains "run_id" parameter with value 70158 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab run facet keys returns "Bad Request" response + Given operation "ListModelLabRunFacetKeys" enabled + And new "ListModelLabRunFacetKeys" request + And request contains "filter[project_id]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab run facet keys returns "Not Found" response + Given operation "ListModelLabRunFacetKeys" enabled + And new "ListModelLabRunFacetKeys" request + And request contains "filter[project_id]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/ml-observability + Scenario: List Model Lab run facet keys returns "OK" response + Given operation "ListModelLabRunFacetKeys" enabled + And new "ListModelLabRunFacetKeys" request + And request contains "filter[project_id]" parameter with value 2387 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab run facet values returns "Bad Request" response + Given operation "ListModelLabRunFacetValues" enabled + And new "ListModelLabRunFacetValues" request + And request contains "filter[project_id]" parameter from "REPLACE.ME" + And request contains "facet_type" parameter from "REPLACE.ME" + And request contains "facet_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab run facet values returns "Not Found" response + Given operation "ListModelLabRunFacetValues" enabled + And new "ListModelLabRunFacetValues" request + And request contains "filter[project_id]" parameter from "REPLACE.ME" + And request contains "facet_type" parameter from "REPLACE.ME" + And request contains "facet_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/ml-observability + Scenario: List Model Lab run facet values returns "OK" response + Given operation "ListModelLabRunFacetValues" enabled + And new "ListModelLabRunFacetValues" request + And request contains "filter[project_id]" parameter with value 2387 + And request contains "facet_type" parameter with value "tag" + And request contains "facet_name" parameter with value "model" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: List Model Lab runs returns "Bad Request" response + Given operation "ListModelLabRuns" enabled + And new "ListModelLabRuns" request + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: List Model Lab runs returns "OK" response + Given operation "ListModelLabRuns" enabled + And new "ListModelLabRuns" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/ml-observability + Scenario: Pin a Model Lab run returns "Bad Request" response + Given operation "PinModelLabRun" enabled + And new "PinModelLabRun" request + And request contains "run_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: Pin a Model Lab run returns "No Content" response + Given operation "PinModelLabRun" enabled + And new "PinModelLabRun" request + And request contains "run_id" parameter with value 70158 + When the request is sent + Then the response status is 204 No Content + + @replay-only @team:DataDog/ml-observability + Scenario: Pin a Model Lab run returns "Not Found" response + Given operation "PinModelLabRun" enabled + And new "PinModelLabRun" request + And request contains "run_id" parameter with value 999999 + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Remove star from a Model Lab project returns "Bad Request" response + Given operation "UnstarModelLabProject" enabled + And new "UnstarModelLabProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/ml-observability + Scenario: Remove star from a Model Lab project returns "No Content" response + Given operation "UnstarModelLabProject" enabled + And new "UnstarModelLabProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Remove star from a Model Lab project returns "Not Found" response + Given operation "UnstarModelLabProject" enabled + And new "UnstarModelLabProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Star a Model Lab project returns "Bad Request" response + Given operation "StarModelLabProject" enabled + And new "StarModelLabProject" request + And request contains "project_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: Star a Model Lab project returns "No Content" response + Given operation "StarModelLabProject" enabled + And new "StarModelLabProject" request + And request contains "project_id" parameter with value 2387 + When the request is sent + Then the response status is 204 No Content + + @replay-only @team:DataDog/ml-observability + Scenario: Star a Model Lab project returns "Not Found" response + Given operation "StarModelLabProject" enabled + And new "StarModelLabProject" request + And request contains "project_id" parameter with value 999999 + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/ml-observability + Scenario: Unpin a Model Lab run returns "Bad Request" response + Given operation "UnpinModelLabRun" enabled + And new "UnpinModelLabRun" request + And request contains "run_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/ml-observability + Scenario: Unpin a Model Lab run returns "No Content" response + Given operation "UnpinModelLabRun" enabled + And new "UnpinModelLabRun" request + And request contains "run_id" parameter with value 70158 + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/ml-observability + Scenario: Unpin a Model Lab run returns "Not Found" response + Given operation "UnpinModelLabRun" enabled + And new "UnpinModelLabRun" request + And request contains "run_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/ml-observability + Scenario: Unstar a Model Lab project returns "No Content" response + Given operation "UnstarModelLabProject" enabled + And new "UnstarModelLabProject" request + And request contains "project_id" parameter with value 2387 + When the request is sent + Then the response status is 204 No Content diff --git a/test-runner-data/features/v2/monitors.feature b/test-runner-data/features/v2/monitors.feature new file mode 100644 index 0000000000..b1bb50a8db --- /dev/null +++ b/test-runner-data/features/v2/monitors.feature @@ -0,0 +1,368 @@ +@endpoint(monitors) @endpoint(monitors-v2) +Feature: Monitors + [Monitors](https://docs.datadoghq.com/monitors) allow you to watch a + metric or check that you care about and notifies your team when a defined + threshold has exceeded. For more information, see [Creating + Monitors](https://docs.datadoghq.com/monitors/create/types/) and [Tag + Policies](https://docs.datadoghq.com/monitors/settings/). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Monitors" API + + @skip-validation @team:DataDog/monitor-app + Scenario: Create a monitor configuration policy returns "Bad Request" response + Given new "CreateMonitorConfigPolicy" request + And body with value {"data": {"attributes": {"policy_type": "INVALID", "policy": {"tag_key": "datacenter", "tag_key_required": true, "valid_tag_values": ["prod", "staging"]}}, "type": "monitor-config-policy"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Create a monitor configuration policy returns "OK" response + Given new "CreateMonitorConfigPolicy" request + And body with value {"data": {"attributes": {"policy_type": "tag", "policy": {"tag_key": "{{ unique_lower_alnum }}", "tag_key_required": false, "valid_tag_values": ["prod", "staging"]}}, "type": "monitor-config-policy"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "monitor-config-policy" + And the response "data.attributes.policy_type" is equal to "tag" + And the response "data.attributes.policy.tag_key" is equal to "{{ unique_lower_alnum }}" + And the response "data.attributes.policy.valid_tag_values" is equal to ["prod", "staging"] + + @skip-validation @team:DataDog/monitor-app + Scenario: Create a monitor notification rule returns "Bad Request" response + Given new "CreateMonitorNotificationRule" request + And body with value {"data": {"attributes": {"filter": {"tags": ["test:{{ unique_lower }}", "host:abc"]}, "name": "test rule", "recipients": ["@slack-test-channel", "@jira-test"]}, "type": "monitor-notification-rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Create a monitor notification rule returns "OK" response + Given new "CreateMonitorNotificationRule" request + And body with value {"data": {"attributes": {"filter": {"tags": ["test:{{ unique_lower }}"]}, "name": "test rule", "recipients": ["slack-test-channel", "jira-test"]}, "type": "monitor-notification-rule"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "test rule" + + @team:DataDog/monitor-app + Scenario: Create a monitor notification rule with conditional recipients returns "OK" response + Given new "CreateMonitorNotificationRule" request + And body with value {"data": {"attributes": {"filter": {"tags": ["test:{{ unique_lower }}"]}, "name": "test rule", "conditional_recipients": {"conditions": [{"scope": "transition_type:is_alert", "recipients": ["slack-test-channel", "jira-test"]}]}}, "type": "monitor-notification-rule"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "test rule" + + @team:DataDog/monitor-app + Scenario: Create a monitor notification rule with scope returns "OK" response + Given new "CreateMonitorNotificationRule" request + And body with value {"data": {"attributes": {"filter": {"scope": "test:{{ unique_lower }}"}, "name": "test rule", "recipients": ["slack-test-channel", "jira-test"]}, "type": "monitor-notification-rule"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "test rule" + + @skip-validation @team:DataDog/monitor-app + Scenario: Create a monitor user template returns "Bad Request" response + Given new "CreateMonitorUserTemplate" request + And operation "CreateMonitorUserTemplate" enabled + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "type": "monitor-user-template"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Create a monitor user template returns "OK" response + Given new "CreateMonitorUserTemplate" request + And operation "CreateMonitorUserTemplate" enabled + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {"message": "A msg.", "name": "A name {{ unique_lower }}", "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", "type": "query alert"}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "type": "monitor-user-template"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/monitor-app + Scenario: Delete a monitor configuration policy returns "Bad Request" response + Given new "DeleteMonitorConfigPolicy" request + And request contains "policy_id" parameter with value "INVALID_UUID" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Delete a monitor configuration policy returns "Not Found" response + Given new "DeleteMonitorConfigPolicy" request + And request contains "policy_id" parameter with value "00000000-0000-1234-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Delete a monitor configuration policy returns "OK" response + Given there is a valid "monitor_configuration_policy" in the system + And new "DeleteMonitorConfigPolicy" request + And request contains "policy_id" parameter from "monitor_configuration_policy.data.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/monitor-app + Scenario: Delete a monitor notification rule returns "Not Found" response + Given new "DeleteMonitorNotificationRule" request + And request contains "rule_id" parameter with value "00000000-0000-1234-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Delete a monitor notification rule returns "OK" response + Given there is a valid "monitor_notification_rule" in the system + And new "DeleteMonitorNotificationRule" request + And request contains "rule_id" parameter from "monitor_notification_rule.data.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/monitor-app + Scenario: Delete a monitor user template returns "Not Found" response + Given new "DeleteMonitorUserTemplate" request + And operation "DeleteMonitorUserTemplate" enabled + And request contains "template_id" parameter with value "00000000-0000-1234-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/monitor-app + Scenario: Delete a monitor user template returns "OK" response + Given operation "DeleteMonitorUserTemplate" enabled + And new "DeleteMonitorUserTemplate" request + And request contains "template_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/monitor-app + Scenario: Edit a monitor configuration policy returns "Not Found" response + Given new "UpdateMonitorConfigPolicy" request + And request contains "policy_id" parameter with value "00000000-0000-1234-0000-000000000000" + And body with value {"data": {"attributes": {"policy": {"tag_key": "datacenter", "tag_key_required": false, "valid_tag_values": ["prod", "staging"]}, "policy_type": "tag"}, "id": "00000000-0000-1234-0000-000000000000", "type": "monitor-config-policy"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Edit a monitor configuration policy returns "OK" response + Given there is a valid "monitor_configuration_policy" in the system + And new "UpdateMonitorConfigPolicy" request + And request contains "policy_id" parameter from "monitor_configuration_policy.data.id" + And body with value {"data": {"attributes": {"policy": {"tag_key": "{{ unique_lower_alnum }}", "tag_key_required": false, "valid_tag_values": ["prod", "staging"]}, "policy_type": "tag"}, "id": "{{ monitor_configuration_policy.data.id }}", "type": "monitor-config-policy"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "monitor-config-policy" + And the response "data.id" is equal to "{{ monitor_configuration_policy.data.id }}" + And the response "data.attributes.policy_type" is equal to "tag" + And the response "data.attributes.policy.tag_key" is equal to "{{ unique_lower_alnum }}" + And the response "data.attributes.policy.valid_tag_values" is equal to ["prod", "staging"] + + @team:DataDog/monitor-app + Scenario: Edit a monitor configuration policy returns "Unprocessable Entity" response + Given there is a valid "monitor_configuration_policy" in the system + And new "UpdateMonitorConfigPolicy" request + And request contains "policy_id" parameter from "monitor_configuration_policy.data.id" + And body with value {"data": {"attributes": {"policy": {"tag_key": "{{ unique_lower_alnum }}", "tag_key_required": false, "valid_tag_values": ["prod", "staging"]}, "policy_type": "tag"}, "id": "00000000-0000-1234-0000-000000000000", "type": "monitor-config-policy"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @team:DataDog/monitor-app + Scenario: Get a monitor configuration policy returns "Not Found" response + Given new "GetMonitorConfigPolicy" request + And request contains "policy_id" parameter with value "12340000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Get a monitor configuration policy returns "OK" response + Given there is a valid "monitor_configuration_policy" in the system + And new "GetMonitorConfigPolicy" request + And request contains "policy_id" parameter from "monitor_configuration_policy.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "monitor-config-policy" + And the response "data.id" is equal to "{{ monitor_configuration_policy.data.id }}" + And the response "data.attributes.policy_type" is equal to "tag" + And the response "data.attributes.policy.tag_key" is equal to "{{ unique_lower_alnum }}" + And the response "data.attributes.policy.valid_tag_values" is equal to ["prod", "staging"] + + @team:DataDog/monitor-app + Scenario: Get a monitor notification rule returns "Not Found" response + Given new "GetMonitorNotificationRule" request + And request contains "rule_id" parameter with value "00000000-0000-1234-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Get a monitor notification rule returns "OK" response + Given there is a valid "monitor_notification_rule" in the system + And new "GetMonitorNotificationRule" request + And request contains "rule_id" parameter from "monitor_notification_rule.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "test rule" + + @team:DataDog/monitor-app + Scenario: Get a monitor user template returns "Not Found" response + Given new "GetMonitorUserTemplate" request + And operation "GetMonitorUserTemplate" enabled + And request contains "template_id" parameter with value "00000000-0000-1234-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Get a monitor user template returns "OK" response + Given there is a valid "monitor_user_template" in the system + And new "GetMonitorUserTemplate" request + And operation "GetMonitorUserTemplate" enabled + And request contains "template_id" parameter from "monitor_user_template.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "monitor-user-template" + + @team:DataDog/monitor-app + Scenario: Get all monitor configuration policies returns "OK" response + Given there is a valid "monitor_configuration_policy" in the system + And new "ListMonitorConfigPolicies" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "type" with value "monitor-config-policy" + And the response "data" has item with field "id" with value "{{ monitor_configuration_policy.data.id }}" + And the response "data" has item with field "attributes.policy_type" with value "tag" + And the response "data" has item with field "attributes.policy.tag_key" with value "{{ unique_lower_alnum }}" + And the response "data" has item with field "attributes.policy.valid_tag_values" with value ["prod", "staging"] + + @team:DataDog/monitor-app + Scenario: Get all monitor notification rules returns "OK" response + Given there is a valid "monitor_notification_rule" in the system + And new "GetMonitorNotificationRules" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "attributes.name" with value "test rule" + + @team:DataDog/monitor-app + Scenario: Get all monitor user templates returns "OK" response + Given there is a valid "monitor_user_template" in the system + And new "ListMonitorUserTemplates" request + And operation "ListMonitorUserTemplates" enabled + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "type" with value "monitor-user-template" + And the response "data" has item with field "id" with value "{{ monitor_user_template.data.id }}" + And the response "data" has item with field "attributes.description" with value "It's a threshold" + And the response "data" has item with field "attributes.monitor_definition.message" with value "cats" + + @skip-validation @team:DataDog/monitor-app + Scenario: Update a monitor notification rule returns "Bad Request" response + Given there is a valid "monitor_notification_rule" in the system + And new "UpdateMonitorNotificationRule" request + And request contains "rule_id" parameter from "monitor_notification_rule.data.id" + And body with value {"data": {"attributes": {"filter": {"tags": ["test:{{ unique_lower }}", "host:abc"]}, "name": "updated rule", "recipients": ["@slack-test-channel"]}, "id": "{{ monitor_notification_rule.data.id }}", "type": "monitor-notification-rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Update a monitor notification rule returns "Not Found" response + Given new "UpdateMonitorNotificationRule" request + And request contains "rule_id" parameter with value "00000000-0000-1234-0000-000000000000" + And body with value {"data": {"attributes": {"filter": {"tags": ["test:{{ unique_lower }}", "host:abc"]}, "name": "updated rule", "recipients": ["slack-test-channel", "jira-test"]}, "id": "00000000-0000-1234-0000-000000000000", "type": "monitor-notification-rule"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Update a monitor notification rule returns "OK" response + Given there is a valid "monitor_notification_rule" in the system + And new "UpdateMonitorNotificationRule" request + And request contains "rule_id" parameter from "monitor_notification_rule.data.id" + And body with value {"data": {"attributes": {"filter": {"tags": ["test:{{ unique_lower }}", "host:abc"]}, "name": "updated rule", "recipients": ["slack-test-channel"]}, "id": "{{ monitor_notification_rule.data.id }}", "type": "monitor-notification-rule"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "updated rule" + + @team:DataDog/monitor-app + Scenario: Update a monitor notification rule with conditional_recipients returns "OK" response + Given there is a valid "monitor_notification_rule" in the system + And new "UpdateMonitorNotificationRule" request + And request contains "rule_id" parameter from "monitor_notification_rule.data.id" + And body with value {"data": {"attributes": {"filter": {"tags": ["test:{{ unique_lower }}", "host:abc"]}, "name": "updated rule", "conditional_recipients": {"conditions": [{"scope": "transition_type:is_alert", "recipients": ["slack-test-channel", "jira-test"]}]}}, "id": "{{ monitor_notification_rule.data.id }}", "type": "monitor-notification-rule"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "updated rule" + + @team:DataDog/monitor-app + Scenario: Update a monitor notification rule with scope returns "OK" response + Given there is a valid "monitor_notification_rule" in the system + And new "UpdateMonitorNotificationRule" request + And request contains "rule_id" parameter from "monitor_notification_rule.data.id" + And body with value {"data": {"attributes": {"filter": {"scope": "test:{{ unique_lower }}"}, "name": "updated rule", "recipients": ["slack-test-channel"]}, "id": "{{ monitor_notification_rule.data.id }}", "type": "monitor-notification-rule"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "updated rule" + + @skip-validation @team:DataDog/monitor-app + Scenario: Update a monitor user template to a new version returns "Bad Request" response + Given there is a valid "monitor_user_template" in the system + And operation "UpdateMonitorUserTemplate" enabled + And new "UpdateMonitorUserTemplate" request + And request contains "template_id" parameter from "monitor_user_template.data.id" + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "id": "00000000-0000-1234-0000-000000000000", "type": "monitor-user-template"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Update a monitor user template to a new version returns "Not Found" response + Given new "UpdateMonitorUserTemplate" request + And operation "UpdateMonitorUserTemplate" enabled + And request contains "template_id" parameter with value "00000000-0000-1234-0000-000000000000" + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {"message": "A msg.", "name": "A name {{ unique_lower }}", "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", "type": "query alert"}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "id": "00000000-0000-1234-0000-000000000000", "type": "monitor-user-template"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Update a monitor user template to a new version returns "OK" response + Given there is a valid "monitor_user_template" in the system + And new "UpdateMonitorUserTemplate" request + And operation "UpdateMonitorUserTemplate" enabled + And request contains "template_id" parameter from "monitor_user_template.data.id" + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {"message": "A msg.", "name": "A name {{ unique_lower }}", "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", "type": "query alert"}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "id": "00000000-0000-1234-0000-000000000000", "type": "monitor-user-template"}} + When the request is sent + Then the response status is 200 OK + + @skip-validation @team:DataDog/monitor-app + Scenario: Validate a monitor user template returns "Bad Request" response + Given new "ValidateMonitorUserTemplate" request + And operation "ValidateMonitorUserTemplate" enabled + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "type": "monitor-user-template"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Validate a monitor user template returns "OK" response + Given new "ValidateMonitorUserTemplate" request + And operation "ValidateMonitorUserTemplate" enabled + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {"message": "A msg.", "name": "A name {{ unique_lower }}", "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", "type": "query alert"}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "type": "monitor-user-template"}} + When the request is sent + Then the response status is 204 OK + + @skip-validation @team:DataDog/monitor-app + Scenario: Validate an existing monitor user template returns "Bad Request" response + Given there is a valid "monitor_user_template" in the system + And new "ValidateExistingMonitorUserTemplate" request + And operation "ValidateExistingMonitorUserTemplate" enabled + And request contains "template_id" parameter from "monitor_user_template.data.id" + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "id": "00000000-0000-1234-0000-000000000000", "type": "monitor-user-template"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/monitor-app + Scenario: Validate an existing monitor user template returns "Not Found" response + Given new "ValidateExistingMonitorUserTemplate" request + And operation "ValidateExistingMonitorUserTemplate" enabled + And request contains "template_id" parameter with value "00000000-0000-1234-0000-000000000000" + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {"message": "A msg.", "name": "A name {{ unique_lower }}", "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", "type": "query alert"}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "id": "00000000-0000-1234-0000-000000000000", "type": "monitor-user-template"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/monitor-app + Scenario: Validate an existing monitor user template returns "OK" response + Given there is a valid "monitor_user_template" in the system + And new "ValidateExistingMonitorUserTemplate" request + And operation "ValidateExistingMonitorUserTemplate" enabled + And request contains "template_id" parameter from "monitor_user_template.data.id" + And body with value {"data": {"attributes": {"description": "A description.", "monitor_definition": {"message": "A msg.", "name": "A name {{ unique_lower }}", "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", "type": "query alert"}, "tags": ["integration:Azure"], "template_variables": [{"available_values": ["value1", "value2"], "defaults": ["defaultValue"], "name": "regionName", "tag_key": "datacenter"}], "title": "Postgres DB {{ unique_lower }}"}, "id": "00000000-0000-1234-0000-000000000000", "type": "monitor-user-template"}} + When the request is sent + Then the response status is 204 OK diff --git a/test-runner-data/features/v2/network_device_monitoring.feature b/test-runner-data/features/v2/network_device_monitoring.feature new file mode 100644 index 0000000000..165564dc39 --- /dev/null +++ b/test-runner-data/features/v2/network_device_monitoring.feature @@ -0,0 +1,183 @@ +@endpoint(network-device-monitoring) @endpoint(network-device-monitoring-v2) +Feature: Network Device Monitoring + The Network Device Monitoring API allows you to fetch devices and + interfaces and their attributes. See the [Network Device Monitoring + page](https://docs.datadoghq.com/network_monitoring/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "NetworkDeviceMonitoring" API + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Get the device details returns "Not Found" response + Given new "GetDevice" request + And request contains "device_id" parameter with value "unknown_device_id" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Get the device details returns "OK" response + Given new "GetDevice" request + And request contains "device_id" parameter with value "default_device" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "device" + And the response "data.id" is equal to "default_device" + And the response "data.attributes.description" is equal to "a device monitored with NDM" + And the response "data.attributes.device_type" is equal to "other" + And the response "data.attributes.ip_address" is equal to "1.2.3.4" + And the response "data.attributes.location" is equal to "paris" + And the response "data.attributes.model" is equal to "xx-123" + And the response "data.attributes.name" is equal to "example device" + And the response "data.attributes.os_name" is equal to "example OS" + And the response "data.attributes.os_version" is equal to "1.0.2" + And the response "data.attributes.ping_status" is equal to "unmonitored" + And the response "data.attributes.product_name" is equal to "example device" + And the response "data.attributes.serial_number" is equal to "X12345" + And the response "data.attributes.status" is equal to "ok" + And the response "data.attributes.sys_object_id" is equal to "1.3.6.1.4.1.99999" + And the response "data.attributes.tags" is equal to ["device_ip:1.2.3.4","device_id:default_device"] + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Get the list of devices returns "Bad Request" response + Given new "ListDevices" request + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Get the list of devices returns "OK" response + Given new "ListDevices" request + And request contains "page[size]" parameter with value 1 + And request contains "page[number]" parameter with value 0 + And request contains "filter[tag]" parameter with value "device_namespace:default" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "device" + And the response "data[0].id" is equal to "default:1.2.3.4" + And the response "data[0].attributes.description" is equal to "a device monitored with NDM" + And the response "data[0].attributes.device_type" is equal to "other" + And the response "data[0].attributes.ip_address" is equal to "1.2.3.4" + And the response "data[0].attributes.location" is equal to "paris" + And the response "data[0].attributes.model" is equal to "xx-123" + And the response "data[0].attributes.name" is equal to "example device" + And the response "data[0].attributes.os_name" is equal to "example OS" + And the response "data[0].attributes.os_version" is equal to "1.0.2" + And the response "data[0].attributes.ping_status" is equal to "unmonitored" + And the response "data[0].attributes.product_name" is equal to "example device" + And the response "data[0].attributes.serial_number" is equal to "X12345" + And the response "data[0].attributes.status" is equal to "ok" + And the response "data[0].attributes.sys_object_id" is equal to "1.3.6.1.4.1.99999" + And the response "data[0].attributes.tags" is equal to ["device_ip:1.2.3.4","device_id:default:1.2.3.4"] + And the response "data[0].attributes.interface_statuses.up" is equal to 2 + And the response "data[0].attributes.interface_statuses.warning" is equal to 4 + And the response "data[0].attributes.interface_statuses.down" is equal to 13 + And the response "meta.page.total_filtered_count" is equal to 1 + + @generated @skip @team:DataDog/network-device-monitoring @with-pagination + Scenario: Get the list of devices returns "OK" response with pagination + Given new "ListDevices" request + When the request with pagination is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Get the list of interfaces of the device returns "OK" response + Given new "GetInterfaces" request + And request contains "device_id" parameter with value "default:1.2.3.4" + And request contains "get_ip_addresses" parameter with value true + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "interface" + And the response "data[0].id" is equal to "default:1.2.3.4:99" + And the response "data[0].attributes.name" is equal to "if99" + And the response "data[0].attributes.description" is equal to "a network interface" + And the response "data[0].attributes.mac_address" is equal to "00:00:00:00:00:00" + And the response "data[0].attributes.ip_addresses" is equal to ["1.1.1.1","1.1.1.2"] + And the response "data[0].attributes.alias" is equal to "interface_99" + And the response "data[0].attributes.index" is equal to 99 + And the response "data[0].attributes.status" is equal to "up" + And the response "data[1].type" is equal to "interface" + And the response "data[1].id" is equal to "default:1.2.3.4:999" + And the response "data[1].attributes.name" is equal to "if999" + And the response "data[1].attributes.description" is equal to "another network interface" + And the response "data[1].attributes.mac_address" is equal to "99:99:99:99:99:99" + And the response "data[1].attributes.alias" is equal to "interface_999" + And the response "data[1].attributes.index" is equal to 999 + And the response "data[1].attributes.status" is equal to "down" + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Get the list of tags for a device returns "Not Found" response + Given new "ListDeviceUserTags" request + And request contains "device_id" parameter with value "unknown_device_id" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Get the list of tags for a device returns "OK" response + Given new "ListDeviceUserTags" request + And request contains "device_id" parameter with value "default_device" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "default_device" + And the response "data.type" is equal to "tags" + And the response "data.attributes.tags[0]" is equal to "tag:test" + And the response "data.attributes.tags[1]" is equal to "tag:testbis" + + @replay-only @team:DataDog/network-device-monitoring + Scenario: List tags for an interface returns "Not Found" response + Given new "ListInterfaceUserTags" request + And request contains "interface_id" parameter with value "unknown_interface_id" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/network-device-monitoring + Scenario: List tags for an interface returns "OK" response + Given new "ListInterfaceUserTags" request + And request contains "interface_id" parameter with value "example:1.2.3.4:1" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "example:1.2.3.4:1" + And the response "data.type" is equal to "tags" + And the response "data.attributes.tags[0]" is equal to "tag:test" + And the response "data.attributes.tags[1]" is equal to "tag:testbis" + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Update the tags for a device returns "Not Found" response + Given new "UpdateDeviceUserTags" request + And request contains "device_id" parameter with value "unknown_device_id" + And body with value {"data": {"attributes": {"tags": ["tag:test", "tag:testbis"]}, "id": "unknown_device_id", "type":"tags"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Update the tags for a device returns "OK" response + Given new "UpdateDeviceUserTags" request + And request contains "device_id" parameter with value "default_device" + And body with value {"data": {"attributes": {"tags": ["tag:test", "tag:testbis"]}, "id": "default_device", "type":"tags"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "default_device" + And the response "data.type" is equal to "tags" + And the response "data.attributes.tags[0]" is equal to "tag:test" + And the response "data.attributes.tags[1]" is equal to "tag:testbis" + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Update the tags for an interface returns "Not Found" response + Given new "UpdateInterfaceUserTags" request + And request contains "interface_id" parameter with value "unknown_interface_id" + And body with value {"data": {"attributes": {"tags": ["tag:test", "tag:testbis"]}, "id": "unknown_interface_id", "type":"tags"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/network-device-monitoring + Scenario: Update the tags for an interface returns "OK" response + Given new "UpdateInterfaceUserTags" request + And request contains "interface_id" parameter with value "example:1.2.3.4:1" + And body with value {"data": {"attributes": {"tags": ["tag:test", "tag:testbis"]}, "id": "example:1.2.3.4:1", "type":"tags"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "example:1.2.3.4:1" + And the response "data.type" is equal to "tags" + And the response "data.attributes.tags[0]" is equal to "tag:test" + And the response "data.attributes.tags[1]" is equal to "tag:testbis" diff --git a/test-runner-data/features/v2/observability_pipelines.feature b/test-runner-data/features/v2/observability_pipelines.feature new file mode 100644 index 0000000000..8aa6ef3615 --- /dev/null +++ b/test-runner-data/features/v2/observability_pipelines.feature @@ -0,0 +1,328 @@ +@endpoint(observability-pipelines) @endpoint(observability-pipelines-v2) +Feature: Observability Pipelines + Observability Pipelines allows you to collect and process logs within your + own infrastructure, and then route them to downstream integrations. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ObservabilityPipelines" API + + @team:DataDog/observability-pipelines + Scenario: Create a new pipeline returns "Bad Request" response + Given new "CreatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "unknown-processor", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Main Observability Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/observability-pipelines + Scenario: Create a new pipeline returns "Conflict" response + Given new "CreatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "pipeline_type": "logs", "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}, {"enabled": true, "field": "message", "id": "json-processor", "include": "*", "type": "parse_json"}]}], "processors": [], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Main Observability Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/observability-pipelines + Scenario: Create a new pipeline returns "OK" response + Given new "CreatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Main Observability Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 201 OK + And the response "data" has field "id" + And the response "data.type" is equal to "pipelines" + And the response "data.attributes.name" is equal to "Main Observability Pipeline" + And the response "data.attributes.config.sources" has length 1 + And the response "data.attributes.config.processor_groups" has length 1 + And the response "data.attributes.config.destinations" has length 1 + + @team:DataDog/observability-pipelines + Scenario: Create a pipeline with dedupe processor with cache returns "OK" response + Given new "CreatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "dedupe-processor", "include": "service:my-service", "type": "dedupe", "fields": ["message"], "mode": "match", "cache": {"num_events": 5000}}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with Dedupe Cache"}, "type": "pipelines"}} + When the request is sent + Then the response status is 201 OK + And the response "data.attributes.config.processor_groups[0].processors[0].type" is equal to "dedupe" + And the response "data.attributes.config.processor_groups[0].processors[0].cache.num_events" is equal to 5000 + + @team:DataDog/observability-pipelines + Scenario: Create a pipeline with dedupe processor without cache returns "OK" response + Given new "CreatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "dedupe-processor", "include": "service:my-service", "type": "dedupe", "fields": ["message"], "mode": "match"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with Dedupe No Cache"}, "type": "pipelines"}} + When the request is sent + Then the response status is 201 OK + And the response "data.attributes.config.processor_groups[0].processors[0].type" is equal to "dedupe" + And the response "data.attributes.config.processor_groups[0].processors[0].fields[0]" is equal to "message" + + @generated @skip @team:DataDog/observability-pipelines + Scenario: Delete a pipeline returns "Conflict" response + Given new "DeletePipeline" request + And request contains "pipeline_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/observability-pipelines + Scenario: Delete a pipeline returns "Not Found" response + Given new "DeletePipeline" request + And request contains "pipeline_id" parameter with value "3fa85f64-5717-4562-b3fc-2c963f66afa6" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/observability-pipelines + Scenario: Delete a pipeline returns "OK" response + Given there is a valid "pipeline" in the system + And new "DeletePipeline" request + And request contains "pipeline_id" parameter from "pipeline.data.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/observability-pipelines + Scenario: Get a specific pipeline returns "OK" response + Given there is a valid "pipeline" in the system + And new "GetPipeline" request + And request contains "pipeline_id" parameter from "pipeline.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data" has field "id" + And the response "data.type" is equal to "pipelines" + And the response "data.attributes.name" is equal to "Main Observability Pipeline" + And the response "data.attributes.config.sources" has length 1 + And the response "data.attributes.config.processor_groups" has length 1 + And the response "data.attributes.config.destinations" has length 1 + + @team:DataDog/observability-pipelines + Scenario: List pipelines returns "Bad Request" response + Given new "ListPipelines" request + And request contains "page[size]" parameter with value 0 + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/observability-pipelines + Scenario: List pipelines returns "OK" response + Given there is a valid "pipeline" in the system + And new "ListPipelines" request + When the request is sent + Then the response status is 200 OK + And the response "data[0]" has field "id" + And the response "data[0].type" is equal to "pipelines" + And the response "data[0].attributes" has field "name" + And the response "data[0].attributes.config.sources[0]" has field "id" + And the response "data[0].attributes.config.destinations[0]" has field "id" + + @team:DataDog/observability-pipelines + Scenario: Update a pipeline returns "Bad Request" response + Given new "UpdatePipeline" request + And there is a valid "pipeline" in the system + And request contains "pipeline_id" parameter from "pipeline.data.id" + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "unknown-processor", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Main Observability Pipeline"}, "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "type": "pipelines"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/observability-pipelines + Scenario: Update a pipeline returns "Conflict" response + Given new "UpdatePipeline" request + And request contains "pipeline_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "pipeline_type": "logs", "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}, {"enabled": true, "field": "message", "id": "json-processor", "include": "*", "type": "parse_json"}]}], "processors": [], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Main Observability Pipeline"}, "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "type": "pipelines"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/observability-pipelines + Scenario: Update a pipeline returns "Not Found" response + Given new "UpdatePipeline" request + And request contains "pipeline_id" parameter with value "3fa85f64-5717-4562-b3fc-2c963f66afa6" + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Main Observability Pipeline"}, "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "type": "pipelines"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/observability-pipelines + Scenario: Update a pipeline returns "OK" response + Given there is a valid "pipeline" in the system + And new "UpdatePipeline" request + And request contains "pipeline_id" parameter from "pipeline.data.id" + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "updated-datadog-logs-destination-id", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Updated Pipeline Name"}, "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "data" has field "id" + And the response "data.type" is equal to "pipelines" + And the response "data.attributes.name" is equal to "Updated Pipeline Name" + And the response "data.attributes.config.sources" has length 1 + And the response "data.attributes.config.processor_groups" has length 1 + And the response "data.attributes.config.destinations" has length 1 + And the response "data.attributes.config.destinations[0].id" is equal to "updated-datadog-logs-destination-id" + + @team:DataDog/observability-pipelines + Scenario: Validate a metrics pipeline with opentelemetry source returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"pipeline_type": "metrics", "destinations": [{"id": "datadog-metrics-destination", "inputs": ["my-processor-group"], "type": "datadog_metrics"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "*", "inputs": ["opentelemetry-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "env:production", "type": "filter"}]}], "sources": [{"id": "opentelemetry-source", "type": "opentelemetry"}]}, "name": "Metrics OTel Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline returns "Bad Request" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Main Observability Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 400 Bad Request + And the response "errors[0].title" is equal to "Field 'include' is required" + And the response "errors[0].meta.field" is equal to "include" + And the response "errors[0].meta.id" is equal to "filter-processor" + And the response "errors[0].meta.message" is equal to "Field 'include' is required" + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Main Observability Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with ClickHouse destination arrow_stream format returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "clickhouse-destination", "inputs": ["my-processor-group"], "type": "clickhouse", "table": "application_logs", "database": "my_database", "format": "arrow_stream", "batch_encoding": {"codec": "arrow_stream", "allow_nullable_fields": false}, "compression": "gzip", "auth": {"strategy": "basic", "username_key": "CLICKHOUSE_USERNAME", "password_key": "CLICKHOUSE_PASSWORD"}, "batch": {"max_events": 1000, "timeout_secs": 1}}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with ClickHouse Destination Arrow Stream"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with ClickHouse destination returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "clickhouse-destination", "inputs": ["my-processor-group"], "type": "clickhouse", "table": "application_logs", "database": "my_database", "compression": "gzip", "auth": {"strategy": "basic", "username_key": "CLICKHOUSE_USERNAME", "password_key": "CLICKHOUSE_PASSWORD"}, "batch": {"max_events": 1000, "timeout_secs": 1}}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with ClickHouse Destination"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with ClickHouse destination with all fields set returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "clickhouse-destination", "inputs": ["my-processor-group"], "type": "clickhouse", "endpoint_url_key": "CLICKHOUSE_ENDPOINT_URL", "database": "my_database", "table": "application_logs", "format": "arrow_stream", "skip_unknown_fields": true, "date_time_best_effort": true, "compression": {"algorithm": "gzip", "level": 6}, "auth": {"strategy": "basic", "username_key": "CLICKHOUSE_USERNAME", "password_key": "CLICKHOUSE_PASSWORD"}, "batch": {"max_events": 1000, "timeout_secs": 1}, "batch_encoding": {"codec": "arrow_stream", "allow_nullable_fields": true}, "tls": {"crt_file": "/path/to/cert.crt", "ca_file": "/path/to/ca.crt", "key_file": "/path/to/key.key", "key_pass_key": "TLS_KEY_PASSPHRASE"}, "buffer": {"type": "memory", "max_events": 500, "when_full": "block"}}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with ClickHouse Destination All Fields"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with HTTP server source valid_tokens returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["http-server-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "http-server-source", "type": "http_server", "auth_strategy": "none", "decoding": "json", "valid_tokens": [{"token_key": "HTTP_SERVER_TOKEN", "enabled": true, "path_to_token": {"header": "X-Token"}, "field_to_add": {"key": "token_name", "value": "primary_token"}}, {"token_key": "HTTP_SERVER_TOKEN_BACKUP", "enabled": true, "path_to_token": "path"}]}]}, "name": "Pipeline with HTTP server valid_tokens"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with OCSF mapper custom mapping returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "ocsf-mapper-processor", "include": "service:my-service", "mappings": [{"include": "source:custom", "mapping": {"mapping": [{"default": "", "dest": "time", "source": "timestamp"}, {"default": "", "dest": "severity", "source": "level"}, {"default": "", "dest": "device.type", "lookup": {"table": [{"contains": "Desktop", "value": "desktop"}]}, "source": "host.type"}], "metadata": {"class": "Device Inventory Info", "profiles": ["container"], "version": "1.3.0"}, "version": 1}}], "type": "ocsf_mapper"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "OCSF Custom Mapper Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with OCSF mapper invalid custom mapping returns "Bad Request" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "ocsf-mapper-processor", "include": "service:my-service", "mappings": [{"include": "source:custom", "mapping": {"mapping": [{"dest": "time", "source": "timestamp"}], "metadata": {"class": "Invalid Class", "profiles": ["container"], "version": "1.3.0"}, "version": 0}}], "type": "ocsf_mapper"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "OCSF Invalid Mapper Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with OCSF mapper keep_unmatched returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "ocsf-mapper-processor", "include": "service:my-service", "type": "ocsf_mapper", "keep_unmatched": true, "mappings": [{"include": "source:cloudtrail", "mapping": "CloudTrail Account Change"}]}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "OCSF Mapper Keep Unmatched Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with OCSF mapper library mapping returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "ocsf-mapper-processor", "include": "service:my-service", "type": "ocsf_mapper", "mappings": [{"include": "source:cloudtrail", "mapping": "CloudTrail Account Change"}]}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "OCSF Mapper Pipeline"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with Splunk HEC destination token_strategy returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "splunk-hec-destination", "inputs": ["my-processor-group"], "type": "splunk_hec", "token_key": "SPLUNK_HEC_TOKEN", "token_strategy": "custom"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with Splunk HEC token_strategy"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with Splunk HEC source store_hec_token returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["splunk-hec-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "splunk-hec-source", "type": "splunk_hec", "store_hec_token": true}]}, "name": "Pipeline with Splunk HEC store_hec_token"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with Splunk HEC source valid_tokens returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["splunk-hec-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "splunk-hec-source", "type": "splunk_hec", "valid_tokens": [{"token_key": "SPLUNK_HEC_TOKEN", "enabled": true, "field_to_add": {"key": "token_name", "value": "primary_token"}}, {"token_key": "SPLUNK_HEC_TOKEN_BACKUP", "enabled": false}]}]}, "name": "Pipeline with Splunk HEC valid_tokens"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with amazon S3 source compression returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["amazon-s3-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "service:my-service", "type": "filter"}]}], "sources": [{"id": "amazon-s3-source", "type": "amazon_s3", "region": "us-east-1", "compression": "gzip"}]}, "name": "Pipeline with S3 Source Compression"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @skip @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with cloud_prem destination buffer returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "cloud-prem-destination", "inputs": ["my-processor-group"], "type": "cloud_prem", "endpoint_url_key": "CLOUDPREM_ENDPOINT_URL", "buffer": {"type": "disk", "max_size": 1073741824, "when_full": "block"}}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with CloudPrem Buffer"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with destination secret key returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "sumo-logic-destination", "inputs": ["my-processor-group"], "type": "sumo_logic", "endpoint_url_key": "SUMO_LOGIC_ENDPOINT_URL"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with Secret Key"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with enrichment table secret field lookup returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "enrichment-processor", "include": "*", "target": "enriched", "type": "enrichment_table", "file": {"encoding": {"delimiter": ",", "type": "csv", "includes_headers": true}, "key": [{"column": "user_id", "comparison": "equals", "field": {"secret": "LOOKUP_KEY_SECRET"}}], "path": "/etc/enrichment/lookup.csv", "schema": [{"column": "user_id", "type": "string"}]}}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with Enrichment Table Secret Field Lookup"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with parse grok processor include rules returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "parse-grok-processor", "include": "*", "type": "parse_grok", "field": "content", "rules": [{"include": "service:foo", "match_rules": [{"name": "MyParsingRule", "rule": "%{word:user}"}]}]}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with Parse Grok Include Rules"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with parse grok processor source rules returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["datadog-agent-source"], "processors": [{"enabled": true, "id": "parse-grok-processor", "include": "*", "type": "parse_grok", "rules": [{"source": "message", "match_rules": [{"name": "MyParsingRule", "rule": "%{word:user}"}]}]}]}], "sources": [{"id": "datadog-agent-source", "type": "datadog_agent"}]}, "name": "Pipeline with Parse Grok Source Rules"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with source secret key returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["http-client-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "http-client-source", "type": "http_client", "decoding": "bytes", "scrape_interval_secs": 15, "scrape_timeout_secs": 5, "auth_strategy": "bearer", "token_key": "HTTP_CLIENT_TOKEN"}]}, "name": "Pipeline with Source Secret"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 + + @team:DataDog/observability-pipelines + Scenario: Validate an observability pipeline with websocket source bearer auth returns "OK" response + Given new "ValidatePipeline" request + And body with value {"data": {"attributes": {"config": {"destinations": [{"id": "datadog-logs-destination", "inputs": ["my-processor-group"], "type": "datadog_logs"}], "processor_groups": [{"enabled": true, "id": "my-processor-group", "include": "service:my-service", "inputs": ["websocket-source"], "processors": [{"enabled": true, "id": "filter-processor", "include": "status:error", "type": "filter"}]}], "sources": [{"id": "websocket-source", "type": "websocket", "decoding": "json", "auth_strategy": "bearer", "token_key": "WS_BEARER_TOKEN", "uri_key": "WS_URI", "tls": {"mode": "enabled"}}]}, "name": "Pipeline with WebSocket Source"}, "type": "pipelines"}} + When the request is sent + Then the response status is 200 OK + And the response "errors" has length 0 diff --git a/test-runner-data/features/v2/okta_integration.feature b/test-runner-data/features/v2/okta_integration.feature new file mode 100644 index 0000000000..b61b09bb5f --- /dev/null +++ b/test-runner-data/features/v2/okta_integration.feature @@ -0,0 +1,119 @@ +@endpoint(okta-integration) @endpoint(okta-integration-v2) +Feature: Okta Integration + Configure your [Datadog Okta + integration](https://docs.datadoghq.com/integrations/okta/) directly + through the Datadog API. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "OktaIntegration" API + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Okta account returns "Bad Request" response + Given new "CreateOktaAccount" request + And body with value {"data": {"attributes": {"auth_method": "oauth", "domain": "https://example.okta.com/", "name": "Okta-Prod"}, "id": "f749daaf-682e-4208-a38d-c9b43162c609", "type": "okta-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Add Okta account returns "Not Found" response + Given new "CreateOktaAccount" request + And body with value {"data": {"attributes": {"auth_method": "oauth", "domain": "https://example.okta.com/", "name": "Okta-Prod"}, "id": "f749daaf-682e-4208-a38d-c9b43162c609", "type": "okta-accounts"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: Add Okta account returns "OK" response + Given new "CreateOktaAccount" request + And body with value {"data": {"attributes": {"auth_method": "oauth", "domain": "https://example.okta.com/", "name": "{{ unique_lower_alnum }}", "client_id": "client_id", "client_secret":"client_secret"},"id": "f749daaf-682e-4208-a38d-c9b43162c609", "type": "okta-accounts"}} + When the request is sent + Then the response status is 201 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Okta account returns "Bad Request" response + Given new "DeleteOktaAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Okta account returns "Not Found" response + Given new "DeleteOktaAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/saas-integrations + Scenario: Delete Okta account returns "OK" response + Given new "DeleteOktaAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Okta account returns "Bad Request" response + Given new "GetOktaAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Get Okta account returns "Not Found" response + Given new "GetOktaAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: Get Okta account returns "OK" response + Given there is a valid "okta_account" in the system + And new "GetOktaAccount" request + And request contains "account_id" parameter from "okta_account.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "okta-accounts" + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Okta accounts returns "Bad Request" response + Given new "ListOktaAccounts" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: List Okta accounts returns "Not Found" response + Given new "ListOktaAccounts" request + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: List Okta accounts returns "OK" response + Given there is a valid "okta_account" in the system + And new "ListOktaAccounts" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Okta account returns "Bad Request" response + Given new "UpdateOktaAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"auth_method": "oauth", "domain": "https://dev-test.okta.com/"}, "type": "okta-accounts"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/saas-integrations + Scenario: Update Okta account returns "Not Found" response + Given new "UpdateOktaAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"auth_method": "oauth", "domain": "https://dev-test.okta.com/"}, "type": "okta-accounts"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/saas-integrations + Scenario: Update Okta account returns "OK" response + Given there is a valid "okta_account" in the system + And new "UpdateOktaAccount" request + And request contains "account_id" parameter from "okta_account.data.id" + And body with value {"data": {"attributes": {"auth_method": "oauth", "domain": "https://example.okta.com/", "client_id": "client_id", "client_secret":"client_secret"}, "type": "okta-accounts"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/on-call.feature b/test-runner-data/features/v2/on-call.feature new file mode 100644 index 0000000000..208eca3cb9 --- /dev/null +++ b/test-runner-data/features/v2/on-call.feature @@ -0,0 +1,518 @@ +@endpoint(on-call) @endpoint(on-call-v2) +Feature: On-Call + Configure your [Datadog On- + Call](https://docs.datadoghq.com/service_management/on-call/) directly + through the Datadog API. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "On-Call" API + + @generated @skip @team:DataDog/on-call + Scenario: Create On-Call escalation policy returns "Bad Request" response + Given new "CreateOnCallEscalationPolicy" request + And body with value {"data": {"attributes": {"name": "Escalation Policy 1", "resolve_page_on_policy_end": true, "retries": 2, "steps": [{"assignment": "default", "escalate_after_seconds": 3600, "targets": [{"id": "00000000-aba1-0000-0000-000000000000", "type": "users"}, {"config": {"schedule": {"position": "previous"}}, "id": "00000000-aba2-0000-0000-000000000000", "type": "schedules"}, {"id": "00000000-aba3-0000-0000-000000000000", "type": "teams"}]}, {"assignment": "round-robin", "escalate_after_seconds": 3600, "targets": [{"id": "00000000-aba1-0000-0000-000000000000", "type": "users"}, {"id": "00000000-abb1-0000-0000-000000000000", "type": "users"}]}]}, "relationships": {"teams": {"data": [{"id": "00000000-da3a-0000-0000-000000000000", "type": "teams"}]}}, "type": "policies"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/on-call + Scenario: Create On-Call escalation policy returns "Created" response + Given new "CreateOnCallEscalationPolicy" request + And there is a valid "user" in the system + And there is a valid "schedule" in the system + And there is a valid "dd_team" in the system + And body with value {"data": {"attributes": {"name": "{{ unique }}", "resolve_page_on_policy_end": true, "retries": 2, "steps": [{"assignment": "default", "escalate_after_seconds": 3600, "targets": [{"id": "{{ user.data.id }}", "type": "users"}, {"id": "{{ schedule.data.id }}", "type": "schedules"}, {"config": {"schedule": {"position": "previous"}}, "id": "{{ schedule.data.id }}", "type": "schedules"}, {"id": "{{ dd_team.data.id }}", "type": "teams"}]}, {"assignment": "round-robin", "escalate_after_seconds": 3600, "targets": [{"id": "{{ dd_team.data.id }}", "type": "teams"}]}]}, "relationships": {"teams": {"data": [{"id": "{{ dd_team.data.id }}", "type": "teams"}]}}, "type": "policies"}} + And request contains "include" parameter with value "steps.targets" + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/on-call + Scenario: Create On-Call schedule returns "Bad Request" response + Given new "CreateOnCallSchedule" request + And body with value {"data": {"attributes": {"layers": [{"effective_date": "2025-02-03T05:00:00Z", "end_date": "2025-12-31T00:00:00Z", "interval": {"days": 1}, "members": [{"user": {"id": "00000000-aba1-0000-0000-000000000000"}}], "name": "Layer 1", "restrictions": [{"end_day": "friday", "end_time": "17:00:00", "start_day": "monday", "start_time": "09:00:00"}], "rotation_start": "2025-02-01T00:00:00Z"}], "name": "On-Call Schedule", "time_zone": "America/New_York"}, "relationships": {"teams": {"data": [{"id": "00000000-da3a-0000-0000-000000000000", "type": "teams"}]}}, "type": "schedules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/on-call + Scenario: Create On-Call schedule returns "Created" response + Given new "CreateOnCallSchedule" request + And there is a valid "user" in the system + And there is a valid "dd_team" in the system + And body with value {"data": {"attributes": {"layers": [{"effective_date": "{{ timeISO('now - 10d') }}", "end_date": "{{ timeISO('now + 10d') }}", "interval": {"days": 1}, "members": [{"user": {"id": "{{user.data.id}}"}}], "name": "Layer 1", "restrictions": [{"end_day": "friday", "end_time": "17:00:00", "start_day": "monday", "start_time": "09:00:00"}], "rotation_start": "{{ timeISO('now - 5d') }}"}], "name": "{{ unique }}", "time_zone": "America/New_York"}, "relationships": {"teams": {"data": [{"id": "{{dd_team.data.id}}", "type": "teams"}]}}, "type": "schedules"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/on-call + Scenario: Create an On-Call notification channel for a user returns "Bad Request" response + Given new "CreateUserNotificationChannel" request + And request contains "user_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"config": {"address": "foo@bar.com", "formats": ["html"], "type": "email"}}, "type": "notification_channels"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/on-call + Scenario: Create an On-Call notification channel for a user returns "Created" response + Given new "CreateUserNotificationChannel" request + And there is a valid "user" in the system + And request contains "user_id" parameter from "user.data.id" + And body with value {"data": {"attributes": {"config": {"address": "foo@bar.com", "formats": ["html"], "type": "email"}}, "type": "notification_channels"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.config.type" is equal to "email" + And the response "data.attributes.config.address" is equal to "foo@bar.com" + + @generated @skip @team:DataDog/on-call + Scenario: Create an On-Call notification channel for a user returns "Not Found" response + Given new "CreateUserNotificationChannel" request + And request contains "user_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"config": {"address": "foo@bar.com", "formats": ["html"], "type": "email"}}, "type": "notification_channels"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/on-call + Scenario: Create an On-Call notification rule for a user returns "Bad Request" response + Given new "CreateUserNotificationRule" request + And request contains "user_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "high_urgency", "channel_settings": {"method": "sms", "type": "phone"}, "delay_minutes": 1}, "relationships": {"channel": {"data": {"id": "1562fab3-a8c2-49e2-8f3a-28dcda2405e2", "type": "notification_channels"}}}, "type": "notification_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/on-call + Scenario: Create an On-Call notification rule for a user returns "Created" response + Given new "CreateUserNotificationRule" request + And there is a valid "user" in the system + And request contains "user_id" parameter from "user.data.id" + And there is a valid "oncall_email_notification_channel" in the system + And body with value {"data": {"attributes": {"category": "high_urgency", "delay_minutes": 0}, "relationships": {"channel": {"data": {"id": "{{ oncall_email_notification_channel.data.id }}", "type": "notification_channels"}}}, "type": "notification_rules"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/on-call + Scenario: Create an On-Call notification rule for a user returns "Not Found" response + Given new "CreateUserNotificationRule" request + And request contains "user_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "high_urgency", "channel_settings": {"method": "sms", "type": "phone"}, "delay_minutes": 1}, "relationships": {"channel": {"data": {"id": "1562fab3-a8c2-49e2-8f3a-28dcda2405e2", "type": "notification_channels"}}}, "type": "notification_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/on-call + Scenario: Delete On-Call escalation policy returns "No Content" response + Given new "DeleteOnCallEscalationPolicy" request + And there is a valid "user" in the system + And there is a valid "dd_team" in the system + And there is a valid "schedule" in the system + And there is a valid "escalation_policy" in the system + And request contains "policy_id" parameter from "escalation_policy.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/on-call + Scenario: Delete On-Call escalation policy returns "Not Found" response + Given new "DeleteOnCallEscalationPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/on-call + Scenario: Delete On-Call schedule returns "No Content" response + Given new "DeleteOnCallSchedule" request + And there is a valid "user" in the system + And there is a valid "schedule" in the system + And request contains "schedule_id" parameter from "schedule.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/on-call + Scenario: Delete On-Call schedule returns "Not Found" response + Given new "DeleteOnCallSchedule" request + And request contains "schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/on-call + Scenario: Delete an On-Call notification channel for a user returns "Bad Request" response + Given new "DeleteUserNotificationChannel" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "channel_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/on-call + Scenario: Delete an On-Call notification channel for a user returns "No Content" response + Given new "DeleteUserNotificationChannel" request + And there is a valid "user" in the system + And there is a valid "oncall_email_notification_channel" in the system + And request contains "user_id" parameter from "user.data.id" + And request contains "channel_id" parameter from "oncall_email_notification_channel.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/on-call + Scenario: Delete an On-Call notification channel for a user returns "Not Found" response + Given new "DeleteUserNotificationChannel" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "channel_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/on-call + Scenario: Delete an On-Call notification rule for a user returns "Bad Request" response + Given new "DeleteUserNotificationRule" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/on-call + Scenario: Delete an On-Call notification rule for a user returns "No Content" response + Given new "DeleteUserNotificationRule" request + And there is a valid "user" in the system + And there is a valid "oncall_email_notification_channel" in the system + And there is a valid "oncall_email_notification_rule" in the system + And request contains "user_id" parameter from "user.data.id" + And request contains "rule_id" parameter from "oncall_email_notification_rule.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/on-call + Scenario: Delete an On-Call notification rule for a user returns "Not Found" response + Given new "DeleteUserNotificationRule" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/on-call + Scenario: Get On-Call escalation policy returns "Bad Request" response + Given new "GetOnCallEscalationPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: Get On-Call escalation policy returns "Not Found" response + Given new "GetOnCallEscalationPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/on-call + Scenario: Get On-Call escalation policy returns "OK" response + Given new "GetOnCallEscalationPolicy" request + And there is a valid "user" in the system + And there is a valid "dd_team" in the system + And there is a valid "schedule" in the system + And there is a valid "escalation_policy" in the system + And request contains "policy_id" parameter from "escalation_policy.data.id" + And request contains "include" parameter with value "steps.targets" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/on-call + Scenario: Get On-Call schedule returns "Not Found" response + Given new "GetOnCallSchedule" request + And request contains "schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/on-call + Scenario: Get On-Call schedule returns "OK" response + Given new "GetOnCallSchedule" request + And there is a valid "user" in the system + And there is a valid "schedule" in the system + And request contains "schedule_id" parameter from "schedule.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/on-call + Scenario: Get On-Call team routing rules returns "OK" response + Given new "GetOnCallTeamRoutingRules" request + And request contains "team_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/on-call + Scenario: Get an On-Call notification channel for a user returns "Bad Request" response + Given new "GetUserNotificationChannel" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "channel_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: Get an On-Call notification channel for a user returns "Not Found" response + Given new "GetUserNotificationChannel" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "channel_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/on-call + Scenario: Get an On-Call notification channel for a user returns "OK" response + Given new "GetUserNotificationChannel" request + And there is a valid "user" in the system + And there is a valid "oncall_email_notification_channel" in the system + And request contains "user_id" parameter from "user.data.id" + And request contains "channel_id" parameter from "oncall_email_notification_channel.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.config.type" is equal to "email" + And the response "data.attributes.config.address" is equal to "{{ user.data.attributes.email }}" + + @generated @skip @team:DataDog/on-call + Scenario: Get an On-Call notification rule for a user returns "Bad Request" response + Given new "GetUserNotificationRule" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: Get an On-Call notification rule for a user returns "Not Found" response + Given new "GetUserNotificationRule" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/on-call + Scenario: Get an On-Call notification rule for a user returns "OK" response + Given new "GetUserNotificationRule" request + And there is a valid "user" in the system + And there is a valid "oncall_email_notification_channel" in the system + And there is a valid "oncall_email_notification_rule" in the system + And request contains "user_id" parameter from "user.data.id" + And request contains "rule_id" parameter from "oncall_email_notification_rule.data.id" + And request contains "include" parameter with value "channel" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.category" is equal to "high_urgency" + And the response "included" has length 1 + + @generated @skip @team:DataDog/on-call + Scenario: Get on-call responders for a schedule returns "Bad Request" response + Given new "GetScheduleOnCallResponders" request + And request contains "schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: Get on-call responders for a schedule returns "Not Found" response + Given new "GetScheduleOnCallResponders" request + And request contains "schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/on-call + Scenario: Get on-call responders for a schedule returns "OK" response + Given new "GetScheduleOnCallResponders" request + And there is a valid "user" in the system + And there is a valid "schedule" in the system + And request contains "schedule_id" parameter from "schedule.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/on-call + Scenario: Get scheduled on-call user returns "Bad Request" response + Given new "GetScheduleOnCallUser" request + And request contains "schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: Get scheduled on-call user returns "Not Found" response + Given new "GetScheduleOnCallUser" request + And request contains "schedule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/on-call + Scenario: Get scheduled on-call user returns "OK" response + Given new "GetScheduleOnCallUser" request + And there is a valid "user" in the system + And there is a valid "schedule" in the system + And request contains "schedule_id" parameter from "schedule.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/on-call + Scenario: Get team on-call users returns "Bad Request" response + Given new "GetTeamOnCallUsers" request + And request contains "team_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: Get team on-call users returns "Not Found" response + Given new "GetTeamOnCallUsers" request + And request contains "team_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/on-call + Scenario: Get team on-call users returns "OK" response + Given new "GetTeamOnCallUsers" request + And there is a valid "user" in the system + And there is a valid "dd_team" in the system + And there is a valid "schedule" in the system + And there is a valid "escalation_policy" in the system + And there are valid "routing_rules" in the system + And request contains "team_id" parameter from "routing_rules.data.id" + And request contains "include" parameter with value "responders,escalations.responders" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/on-call + Scenario: List On-Call notification channels for a user returns "Bad Request" response + Given new "ListUserNotificationChannels" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: List On-Call notification channels for a user returns "Not Found" response + Given new "ListUserNotificationChannels" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/on-call + Scenario: List On-Call notification channels for a user returns "OK" response + Given new "ListUserNotificationChannels" request + And there is a valid "user" in the system + And there is a valid "oncall_email_notification_channel" in the system + And request contains "user_id" parameter from "user.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + And the response "data[0].attributes.config.type" is equal to "email" + And the response "data[0].attributes.config.address" is equal to "{{ user.data.attributes.email }}" + + @generated @skip @team:DataDog/on-call + Scenario: List On-Call notification rules for a user returns "Bad Request" response + Given new "ListUserNotificationRules" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: List On-Call notification rules for a user returns "Not Found" response + Given new "ListUserNotificationRules" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/on-call + Scenario: List On-Call notification rules for a user returns "OK" response + Given new "ListUserNotificationRules" request + And there is a valid "user" in the system + And there is a valid "oncall_email_notification_channel" in the system + And there is a valid "oncall_email_notification_rule" in the system + And request contains "user_id" parameter from "user.data.id" + And request contains "include" parameter with value "channel" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + And the response "included" has length 1 + + @skip-python @team:DataDog/on-call + Scenario: Set On-Call team routing rules returns "OK" response + Given new "SetOnCallTeamRoutingRules" request + And there is a valid "user" in the system + And there is a valid "dd_team" in the system + 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": [{"type": "escalation_policy", "policy_id": "{{ escalation_policy.data.id }}", "urgency": "low"}], "query": "tags.service:time_restrictions", "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"}]}}, {"actions": [{"type": "escalation_policy", "policy_id": "{{ escalation_policy.data.id }}", "urgency": "low", "ack_timeout_minutes": 30, "support_hours": {"time_zone": "Europe/Paris", "restrictions": [{"end_day": "wednesday", "end_time": "17:00:00", "start_day": "wednesday", "start_time": "09:00:00"}, {"end_day": "thursday", "end_time": "17:00:00", "start_day": "thursday", "start_time": "09:00:00"}]}}], "query": "tags.service:support_hours_and_acknowledgment_timeout"}, {"policy_id": "{{ escalation_policy.data.id }}", "query": "tags.service:legacy_policy_definition", "urgency": "low"}, {"actions": [{"type": "escalation_policy", "policy_id": "{{ escalation_policy.data.id }}", "urgency": "low"}], "query": ""}]}, "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 + + @generated @skip @team:DataDog/on-call + Scenario: Update On-Call escalation policy returns "Bad Request" response + Given new "UpdateOnCallEscalationPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Escalation Policy 1", "resolve_page_on_policy_end": false, "retries": 2, "steps": [{"assignment": "default", "escalate_after_seconds": 3600, "id": "00000000-aba1-0000-0000-000000000000", "targets": [{"id": "00000000-aba1-0000-0000-000000000000", "type": "users"}, {"id": "00000000-aba2-0000-0000-000000000000", "type": "schedules"}]}]}, "id": "a3000000-0000-0000-0000-000000000000", "relationships": {"teams": {"data": [{"id": "00000000-da3a-0000-0000-000000000000", "type": "teams"}]}}, "type": "policies"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: Update On-Call escalation policy returns "Not Found" response + Given new "UpdateOnCallEscalationPolicy" request + And request contains "policy_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Escalation Policy 1", "resolve_page_on_policy_end": false, "retries": 2, "steps": [{"assignment": "default", "escalate_after_seconds": 3600, "id": "00000000-aba1-0000-0000-000000000000", "targets": [{"id": "00000000-aba1-0000-0000-000000000000", "type": "users"}, {"id": "00000000-aba2-0000-0000-000000000000", "type": "schedules"}]}]}, "id": "a3000000-0000-0000-0000-000000000000", "relationships": {"teams": {"data": [{"id": "00000000-da3a-0000-0000-000000000000", "type": "teams"}]}}, "type": "policies"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/on-call + Scenario: Update On-Call escalation policy returns "OK" response + Given new "UpdateOnCallEscalationPolicy" request + And there is a valid "user" in the system + And there is a valid "dd_team" in the system + And there is a valid "schedule" in the system + And there is a valid "escalation_policy" in the system + And request contains "policy_id" parameter from "escalation_policy.data.id" + And body with value {"data": {"attributes": {"name": "{{ unique }}-updated", "resolve_page_on_policy_end": false, "retries": 0, "steps": [{"assignment": "default", "escalate_after_seconds": 3600, "id": "{{ escalation_policy.data.relationships.steps.data[0].id }}", "targets": [{"id": "{{ user.data.id }}", "type": "users"}]}]}, "id": "{{ escalation_policy.data.id }}", "relationships": {"teams": {"data": [{"id": "{{ dd_team.data.id }}", "type": "teams"}]}}, "type": "policies"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/on-call + Scenario: Update On-Call schedule returns "Bad Request" response + Given new "UpdateOnCallSchedule" request + And request contains "schedule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"layers": [{"effective_date": "2025-02-03T05:00:00Z", "end_date": "2025-12-31T00:00:00Z", "interval": {"seconds": 3600}, "members": [{"user": {"id": "00000000-aba1-0000-0000-000000000000"}}], "name": "Layer 1", "restrictions": [{"end_day": "friday", "end_time": "17:00:00", "start_day": "monday", "start_time": "09:00:00"}], "rotation_start": "2025-02-01T00:00:00Z"}], "name": "On-Call Schedule Updated", "time_zone": "America/New_York"}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"teams": {"data": [{"id": "00000000-da3a-0000-0000-000000000000", "type": "teams"}]}}, "type": "schedules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: Update On-Call schedule returns "Not Found" response + Given new "UpdateOnCallSchedule" request + And request contains "schedule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"layers": [{"effective_date": "2025-02-03T05:00:00Z", "end_date": "2025-12-31T00:00:00Z", "interval": {"seconds": 3600}, "members": [{"user": {"id": "00000000-aba1-0000-0000-000000000000"}}], "name": "Layer 1", "restrictions": [{"end_day": "friday", "end_time": "17:00:00", "start_day": "monday", "start_time": "09:00:00"}], "rotation_start": "2025-02-01T00:00:00Z"}], "name": "On-Call Schedule Updated", "time_zone": "America/New_York"}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"teams": {"data": [{"id": "00000000-da3a-0000-0000-000000000000", "type": "teams"}]}}, "type": "schedules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/on-call + Scenario: Update On-Call schedule returns "OK" response + Given new "UpdateOnCallSchedule" request + And there is a valid "user" in the system + And there is a valid "schedule" in the system + And there is a valid "dd_team" in the system + And request contains "schedule_id" parameter from "schedule.data.id" + And body with value {"data": { "id": "{{ schedule.data.id }}", "attributes": {"layers": [{"id": "{{ schedule.data.relationships.layers.data[0].id }}" , "effective_date": "{{ timeISO('now - 10d') }}", "end_date": "{{ timeISO('now + 10d') }}", "interval": {"seconds": 3600}, "members": [{"user": {"id": "{{user.data.id}}"}}], "name": "Layer 1", "restrictions": [{"end_day": "friday", "end_time": "17:00:00", "start_day": "monday", "start_time": "09:00:00"}], "rotation_start": "{{ timeISO('now - 5d') }}"}], "name": "{{ unique }}", "time_zone": "America/New_York"}, "relationships": {"teams": {"data": [{"id": "{{dd_team.data.id}}", "type": "teams"}]}}, "type": "schedules"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/on-call + Scenario: Update an On-Call notification rule for a user returns "Bad Request" response + Given new "UpdateUserNotificationRule" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "high_urgency", "channel_settings": {"method": "sms", "type": "phone"}, "delay_minutes": 1}, "id": "2462ace1-49e2-aab1-xc4f-29cc4ae1105n7", "relationships": {"channel": {"data": {"id": "1562fab3-a8c2-49e2-8f3a-28dcda2405e2", "type": "notification_channels"}}}, "type": "notification_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/on-call + Scenario: Update an On-Call notification rule for a user returns "Not Found" response + Given new "UpdateUserNotificationRule" request + And request contains "user_id" parameter from "REPLACE.ME" + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"category": "high_urgency", "channel_settings": {"method": "sms", "type": "phone"}, "delay_minutes": 1}, "id": "2462ace1-49e2-aab1-xc4f-29cc4ae1105n7", "relationships": {"channel": {"data": {"id": "1562fab3-a8c2-49e2-8f3a-28dcda2405e2", "type": "notification_channels"}}}, "type": "notification_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/on-call + Scenario: Update an On-Call notification rule for a user returns "OK" response + Given new "UpdateUserNotificationRule" request + And there is a valid "user" in the system + And there is a valid "oncall_email_notification_channel" in the system + And there is a valid "oncall_email_notification_rule" in the system + And request contains "user_id" parameter from "user.data.id" + And request contains "rule_id" parameter from "oncall_email_notification_rule.data.id" + And body with value {"data": {"attributes": {"category": "high_urgency", "delay_minutes": 1}, "id": "{{ oncall_email_notification_rule.data.id }}", "relationships": {"channel": {"data": {"id": "{{ oncall_email_notification_channel.data.id }}", "type": "notification_channels"}}}, "type": "notification_rules"}} + And request contains "include" parameter with value "channel" + When the request is sent + Then the response status is 200 OK + And the response "included" has length 1 + And the response "data.attributes.delay_minutes" is equal to 1 diff --git a/test-runner-data/features/v2/opsgenie_integration.feature b/test-runner-data/features/v2/opsgenie_integration.feature new file mode 100644 index 0000000000..453d4a3027 --- /dev/null +++ b/test-runner-data/features/v2/opsgenie_integration.feature @@ -0,0 +1,202 @@ +@endpoint(opsgenie-integration) @endpoint(opsgenie-integration-v2) +Feature: Opsgenie Integration + Configure your [Datadog Opsgenie + integration](https://docs.datadoghq.com/integrations/opsgenie/) directly + through the Datadog API. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "OpsgenieIntegration" API + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Create a new Opsgenie account returns "Bad Request" response + Given new "CreateOpsgenieAccount" request + And body with value {"data": {"attributes": {"api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "type": "opsgenie-account"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Create a new Opsgenie account returns "CREATED" response + Given new "CreateOpsgenieAccount" request + And body with value {"data": {"attributes": {"api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "type": "opsgenie-account"}} + When the request is sent + Then the response status is 201 CREATED + + @skip @team:Datadog/collaboration-integrations + Scenario: Create a new service object returns "Bad Request" response + Given new "CreateOpsgenieService" request + And body with value {"data": {"attributes": {"name": "fake-opsgenie-service-name", "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "type": "opsgenie-service"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:Datadog/collaboration-integrations + Scenario: Create a new service object returns "CREATED" response + Given new "CreateOpsgenieService" request + And body with value {"data": {"attributes": {"name": "{{unique}}", "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "type": "opsgenie-service" }} + When the request is sent + Then the response status is 201 CREATED + And the response "data.attributes.name" is equal to "{{unique}}" + And the response "data.attributes.region" is equal to "us" + + @skip @team:Datadog/collaboration-integrations + Scenario: Create a new service object returns "Conflict" response + Given new "CreateOpsgenieService" request + And body with value {"data": {"attributes": {"name": "fake-opsgenie-service-name", "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "type": "opsgenie-service"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Delete a single service object returns "Bad Request" response + Given new "DeleteOpsgenieService" request + And request contains "integration_service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Delete a single service object returns "Not Found" response + Given new "DeleteOpsgenieService" request + And request contains "integration_service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:Datadog/collaboration-integrations + Scenario: Delete a single service object returns "OK" response + Given there is a valid "opsgenie_service" in the system + And new "DeleteOpsgenieService" request + And request contains "integration_service_id" parameter from "opsgenie_service.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Delete an Opsgenie account returns "Bad Request" response + Given new "DeleteOpsgenieAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Delete an Opsgenie account returns "Not Found" response + Given new "DeleteOpsgenieAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Delete an Opsgenie account returns "OK" response + Given new "DeleteOpsgenieAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Get a single service object returns "Bad Request" response + Given new "GetOpsgenieService" request + And request contains "integration_service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Get a single service object returns "Conflict" response + Given new "GetOpsgenieService" request + And request contains "integration_service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Get a single service object returns "Not Found" response + Given new "GetOpsgenieService" request + And request contains "integration_service_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:Datadog/collaboration-integrations + Scenario: Get a single service object returns "OK" response + Given there is a valid "opsgenie_service" in the system + And new "GetOpsgenieService" request + And request contains "integration_service_id" parameter from "opsgenie_service.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" has the same value as "opsgenie_service.data.attributes.name" + And the response "data.attributes.region" is equal to "us" + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Get all Opsgenie accounts returns "OK" response + Given new "ListOpsgenieAccounts" request + When the request is sent + Then the response status is 200 OK + + @team:Datadog/collaboration-integrations + Scenario: Get all service objects returns "OK" response + Given there is a valid "opsgenie_service" in the system + And new "ListOpsgenieServices" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "opsgenie-service" + + @skip @team:Datadog/collaboration-integrations + Scenario: Update a single service object returns "Bad Request" response + Given new "UpdateOpsgenieService" request + And request contains "integration_service_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-opsgenie-service-name", "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "id": "596da4af-0563-4097-90ff-07230c3f9db3", "type": "opsgenie-service"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:Datadog/collaboration-integrations + Scenario: Update a single service object returns "Conflict" response + Given new "UpdateOpsgenieService" request + And request contains "integration_service_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-opsgenie-service-name", "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "id": "596da4af-0563-4097-90ff-07230c3f9db3", "type": "opsgenie-service"}} + When the request is sent + Then the response status is 409 Conflict + + @skip @team:Datadog/collaboration-integrations + Scenario: Update a single service object returns "Not Found" response + Given new "UpdateOpsgenieService" request + And request contains "integration_service_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "fake-opsgenie-service-name", "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "id": "596da4af-0563-4097-90ff-07230c3f9db3", "type": "opsgenie-service"}} + When the request is sent + Then the response status is 404 Not Found + + @team:Datadog/collaboration-integrations + Scenario: Update a single service object returns "OK" response + Given there is a valid "opsgenie_service" in the system + And new "UpdateOpsgenieService" request + And request contains "integration_service_id" parameter from "opsgenie_service.data.id" + And body with value {"data": {"attributes": {"name": "{{ opsgenie_service.data.attributes.name }}--updated", "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", "region": "eu"}, "id": "{{opsgenie_service.data.id}}", "type": "opsgenie-service"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{ opsgenie_service.data.attributes.name }}--updated" + And the response "data.attributes.region" is equal to "eu" + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Update an Opsgenie account returns "Bad Request" response + Given new "UpdateOpsgenieAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "id": "596da4af-0563-4097-90ff-07230c3f9db3", "type": "opsgenie-account"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Update an Opsgenie account returns "Not Found" response + Given new "UpdateOpsgenieAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "id": "596da4af-0563-4097-90ff-07230c3f9db3", "type": "opsgenie-account"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Update an Opsgenie account returns "OK" response + Given new "UpdateOpsgenieAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "id": "596da4af-0563-4097-90ff-07230c3f9db3", "type": "opsgenie-account"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:Datadog/collaboration-integrations + Scenario: Update an Opsgenie account returns "The server cannot process the request because it contains invalid data." response + Given new "UpdateOpsgenieAccount" request + And request contains "account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"api_key": "00000000-0000-0000-0000-000000000000", "region": "us"}, "id": "596da4af-0563-4097-90ff-07230c3f9db3", "type": "opsgenie-account"}} + When the request is sent + Then the response status is 422 The server cannot process the request because it contains invalid data. diff --git a/test-runner-data/features/v2/org_connections.feature b/test-runner-data/features/v2/org_connections.feature new file mode 100644 index 0000000000..254b4050b2 --- /dev/null +++ b/test-runner-data/features/v2/org_connections.feature @@ -0,0 +1,95 @@ +@endpoint(org-connections) @endpoint(org-connections-v2) +Feature: Org Connections + Manage connections between organizations. Org connections allow for + controlled sharing of data between different Datadog organizations. See + the [Cross-Organization Visibiltiy](https://docs.datadoghq.com/account_man + agement/org_settings/cross_org_visibility/) page for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "OrgConnections" API + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Create Org Connection returns "Bad Request" response + Given new "CreateOrgConnections" request + And body with value {"data": {"type": "org_connection", "relationships": {"sink_org": {"data": {"type": "orgs", "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85"}}}, "attributes": {"connection_types": ["logs", "logs"]}}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Create Org Connection returns "Conflict" response + Given there is a valid "org_connection" in the system + And new "CreateOrgConnections" request + And body with value {"data": {"type": "org_connection", "relationships": {"sink_org": {"data": {"type": "orgs", "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85"}}}, "attributes": {"connection_types": ["logs"]}}} + When the request is sent + Then the response status is 409 Conflict + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Create Org Connection returns "Not Found" response + Given new "CreateOrgConnections" request + And body with value {"data": {"type": "org_connection", "relationships": {"sink_org": {"data": {"type": "orgs", "id": "nonexistent-org-id"}}}, "attributes": {"connection_types": ["logs"]}}} + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Create Org Connection returns "OK" response + Given new "CreateOrgConnections" request + And body with value {"data": {"type": "org_connection", "relationships": {"sink_org": {"data": {"type": "orgs", "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85"}}}, "attributes": {"connection_types": ["logs"]}}} + When the request is sent + Then the response status is 200 Created + + @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-terraform-config @skip-typescript @skip-validation @team:DataDog/access-enforcement + Scenario: Delete Org Connection returns "Bad Request" response + Given new "DeleteOrgConnections" request + And request contains "connection_id" parameter with value "malformed_id" + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Delete Org Connection returns "Not Found" response + Given new "DeleteOrgConnections" request + And request contains "connection_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Delete Org Connection returns "OK" response + Given there is a valid "org_connection" in the system + And new "DeleteOrgConnections" request + And request contains "connection_id" parameter from "org_connection.data.id" + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: List Org Connections returns "OK" response + Given new "ListOrgConnections" request + When the request is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Update Org Connection returns "Bad Request" response + Given there is a valid "org_connection" in the system + And new "UpdateOrgConnections" request + And request contains "connection_id" parameter from "org_connection.data.id" + And body with value {"data": {"type": "org_connection", "id": "{{ org_connection.data.id }}", "attributes": {"connection_types": ["logs", "logs"]}}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Update Org Connection returns "Not Found" response + Given there is a valid "org_connection" in the system + And new "UpdateOrgConnections" request + And request contains "connection_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"type": "org_connection", "id": "00000000-0000-0000-0000-000000000000", "attributes": {"connection_types": ["logs", "metrics"]}}} + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/access-enforcement + Scenario: Update Org Connection returns "OK" response + Given there is a valid "org_connection" in the system + And new "UpdateOrgConnections" request + And request contains "connection_id" parameter from "org_connection.data.id" + And body with value {"data": {"type": "org_connection", "id": "{{ org_connection.data.id }}", "attributes": {"connection_types": ["logs", "metrics"]}}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/organizations.feature b/test-runner-data/features/v2/organizations.feature new file mode 100644 index 0000000000..a8ed63ab7e --- /dev/null +++ b/test-runner-data/features/v2/organizations.feature @@ -0,0 +1,203 @@ +@endpoint(organizations) @endpoint(organizations-v2) +Feature: Organizations + Create, edit, and manage your organizations. Read more about [multi-org ac + counts](https://docs.datadoghq.com/account_management/multi_organization). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Organizations" API + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Get a SAML configuration returns "Not Found" response + Given new "GetSAMLConfiguration" request + And request contains "saml_config_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Get a SAML configuration returns "OK" response + Given new "GetSAMLConfiguration" request + And request contains "saml_config_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: Get a specific Org Config value returns "Bad Request" response + Given new "GetOrgConfig" request + And request contains "org_config_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/org-management + Scenario: Get a specific Org Config value returns "Not Found" response + Given new "GetOrgConfig" request + And request contains "org_config_name" parameter with value "i_dont_exist" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/org-management + Scenario: Get a specific Org Config value returns "OK" response + Given new "GetOrgConfig" request + And request contains "org_config_name" parameter with value "custom_roles" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: List Org Configs returns "Bad Request" response + Given new "ListOrgConfigs" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/org-management + Scenario: List Org Configs returns "OK" response + Given new "ListOrgConfigs" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: List SAML configurations returns "OK" response + Given new "ListSAMLConfigurations" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: List global orgs returns "Bad Request" response + Given new "ListGlobalOrgs" request + And request contains "user_handle" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: List global orgs returns "OK" response + Given new "ListGlobalOrgs" request + And request contains "user_handle" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/delegated-auth-login @with-pagination + Scenario: List global orgs returns "OK" response with pagination + Given new "ListGlobalOrgs" request + And request contains "user_handle" parameter from "REPLACE.ME" + When the request with pagination is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: List your managed organizations returns "OK" response + Given new "ListOrgs" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Update a SAML configuration returns "Bad Request" response + Given new "UpdateSAMLConfiguration" request + And request contains "saml_config_uuid" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"idp_initiated": true, "jit_domains": ["example.com"]}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"default_roles": {"data": [{"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}]}}, "type": "saml_configurations"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Update a SAML configuration returns "Not Found" response + Given new "UpdateSAMLConfiguration" request + And request contains "saml_config_uuid" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"idp_initiated": true, "jit_domains": ["example.com"]}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"default_roles": {"data": [{"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}]}}, "type": "saml_configurations"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Update a SAML configuration returns "OK" response + Given new "UpdateSAMLConfiguration" request + And request contains "saml_config_uuid" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"idp_initiated": true, "jit_domains": ["example.com"]}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"default_roles": {"data": [{"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}]}}, "type": "saml_configurations"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Update a SAML configuration returns "Unprocessable Entity" response + Given new "UpdateSAMLConfiguration" request + And request contains "saml_config_uuid" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"idp_initiated": true, "jit_domains": ["example.com"]}, "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "relationships": {"default_roles": {"data": [{"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}]}}, "type": "saml_configurations"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @team:DataDog/org-management + Scenario: Update a specific Org Config returns "Bad Request" response + Given new "UpdateOrgConfig" request + And request contains "org_config_name" parameter with value "custom_roles" + And body with value {"data": {"attributes": {"value": "not-a-boolean"}, "type": "org_configs"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/org-management + Scenario: Update a specific Org Config returns "Not Found" response + Given new "UpdateOrgConfig" request + And request contains "org_config_name" parameter with value "i_dont_exist" + And body with value {"data": {"attributes": {"value": []}, "type": "org_configs"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/org-management + Scenario: Update a specific Org Config returns "OK" response + Given new "UpdateOrgConfig" request + And request contains "org_config_name" parameter with value "monitor_timezone" + And body with value {"data": {"attributes": {"value": "UTC"}, "type": "org_configs"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Update organization SAML preferences returns "Bad Request" response + Given operation "UpdateOrgSamlConfigurations" enabled + And new "UpdateOrgSamlConfigurations" request + And body with value {"data": {"attributes": {"default_role_uuids": ["8dd1cf3c-0c75-11ea-ad28-fb5701eabc7d"], "jit_domains": ["example.com"]}, "id": "00000000-0000-0000-0000-000000000000", "type": "saml_preferences"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Update organization SAML preferences returns "No Content" response + Given operation "UpdateOrgSamlConfigurations" enabled + And new "UpdateOrgSamlConfigurations" request + And body with value {"data": {"attributes": {"default_role_uuids": ["8dd1cf3c-0c75-11ea-ad28-fb5701eabc7d"], "jit_domains": ["example.com"]}, "id": "00000000-0000-0000-0000-000000000000", "type": "saml_preferences"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Update organization SAML preferences returns "Not Found" response + Given operation "UpdateOrgSamlConfigurations" enabled + And new "UpdateOrgSamlConfigurations" request + And body with value {"data": {"attributes": {"default_role_uuids": ["8dd1cf3c-0c75-11ea-ad28-fb5701eabc7d"], "jit_domains": ["example.com"]}, "id": "00000000-0000-0000-0000-000000000000", "type": "saml_preferences"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Update the maximum session duration returns "Bad Request" response + Given new "UpdateLoginOrgConfigsMaxSessionDuration" request + And body with value {"data": {"attributes": {"max_session_duration": 604800}, "type": "max_session_duration"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Update the maximum session duration returns "No Content" response + Given new "UpdateLoginOrgConfigsMaxSessionDuration" request + And body with value {"data": {"attributes": {"max_session_duration": 604800}, "type": "max_session_duration"}} + When the request is sent + Then the response status is 204 No Content + + @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-terraform-config @skip-typescript @skip-validation @team:DataDog/delegated-auth-login + Scenario: Upload IdP metadata returns "Bad Request - caused by either malformed XML or invalid SAML IdP metadata" response + Given new "UploadIdPMetadata" request + And request contains "idp_file" parameter with value "fixtures/organizations/saml_configurations/invalid_idp_metadata.xml" + When the request is sent + Then the response status is 400 Bad Request - caused by either malformed XML or invalid SAML IdP metadata + + @generated @skip @team:DataDog/delegated-auth-login + Scenario: Upload IdP metadata returns "Bad Request" response + Given new "UploadIdPMetadata" request + When the request is sent + Then the response status is 400 Bad Request + + @integration-only @skip-terraform-config @skip-validation @team:DataDog/delegated-auth-login + Scenario: Upload IdP metadata returns "OK" response + Given new "UploadIdPMetadata" request + And request contains "idp_file" parameter with value "fixtures/organizations/saml_configurations/valid_idp_metadata.xml" + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/powerpack.feature b/test-runner-data/features/v2/powerpack.feature new file mode 100644 index 0000000000..31daf5b5f8 --- /dev/null +++ b/test-runner-data/features/v2/powerpack.feature @@ -0,0 +1,162 @@ +@endpoint(powerpack) @endpoint(powerpack-v2) +Feature: Powerpack + The Powerpack endpoints allow you to: - Get a Powerpack - Create a + Powerpack - Delete a Powerpack - Get a list of all Powerpacks The Patch + and Delete API methods can only be performed on a Powerpack by a user who + has the powerpack create permission for that specific Powerpack. Read + [Scale Graphing Expertise with + Powerpacks](https://docs.datadoghq.com/dashboards/guide/powerpacks-best- + practices/) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Powerpack" API + + @team:DataDog/dashboards-backend + Scenario: Create a new powerpack returns "Bad Request" response + Given new "CreatePowerpack" request + And body with value {"data": {"attributes": {"description": "Powerpack for ABC", "group_widget": {"definition": {"type": "group1", "layout_type": "ordered", "widgets": []}}, "name": "Sample Powerpack", "tags": ["tag:foo1"], "template_variables": [{"defaults": ["*"], "name": "test"}]}, "type": "powerpack"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dashboards-backend + Scenario: Create a new powerpack returns "OK" response + Given new "CreatePowerpack" request + And body from file "powerpack_payload.json" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "powerpack" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.description" is equal to "Sample powerpack" + And the response "data.attributes.template_variables[0].name" is equal to "sample" + And the response "data.attributes.template_variables[0].defaults[0]" is equal to "*" + And the response "data.attributes.group_widget.layout.width" is equal to 12 + And the response "data.attributes.group_widget.layout.height" is equal to 3 + And the response "data.attributes.group_widget.layout.x" is equal to 0 + And the response "data.attributes.group_widget.layout.y" is equal to 0 + And the response "data.attributes.group_widget.definition.type" is equal to "group" + And the response "data.attributes.group_widget.definition.layout_type" is equal to "ordered" + And the response "data.attributes.group_widget.definition.show_title" is equal to true + And the response "data.attributes.group_widget.definition.title" is equal to "Sample Powerpack" + And the response "data.attributes.group_widget.definition.widgets[0].definition.type" is equal to "note" + + @team:DataDog/dashboards-backend + Scenario: Delete a powerpack returns "OK" response + Given there is a valid "powerpack" in the system + And new "DeletePowerpack" request + And request contains "powerpack_id" parameter from "powerpack.data.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/dashboards-backend + Scenario: Delete a powerpack returns "Powerpack Not Found" response + Given new "DeletePowerpack" request + And request contains "powerpack_id" parameter with value "made-up-id" + When the request is sent + Then the response status is 404 Powerpack Not Found + + @team:DataDog/dashboards-backend + Scenario: Get a Powerpack returns "OK" response + Given there is a valid "powerpack" in the system + And new "GetPowerpack" request + And request contains "powerpack_id" parameter from "powerpack.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "powerpack" + And the response "data.id" has the same value as "powerpack.data.id" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.description" is equal to "Sample powerpack" + And the response "data.attributes.template_variables[0].name" is equal to "sample" + And the response "data.attributes.template_variables[0].defaults[0]" is equal to "*" + And the response "data.attributes.group_widget.layout.width" is equal to 12 + And the response "data.attributes.group_widget.layout.height" is equal to 3 + And the response "data.attributes.group_widget.layout.x" is equal to 0 + And the response "data.attributes.group_widget.layout.y" is equal to 0 + And the response "data.attributes.group_widget.definition.type" is equal to "group" + And the response "data.attributes.group_widget.definition.layout_type" is equal to "ordered" + And the response "data.attributes.group_widget.definition.show_title" is equal to true + And the response "data.attributes.group_widget.definition.title" is equal to "Sample Powerpack" + And the response "data.attributes.group_widget.definition.widgets[0].definition.type" is equal to "note" + And the response "data.attributes.group_widget.definition.widgets[0].definition.content" is equal to "test" + + @team:DataDog/dashboards-backend + Scenario: Get a Powerpack returns "Powerpack Not Found." response + Given new "GetPowerpack" request + And request contains "powerpack_id" parameter with value "made-up-id" + When the request is sent + Then the response status is 404 Powerpack Not Found. + + @team:DataDog/dashboards-backend + Scenario: Get all powerpacks returns "OK" response + Given there is a valid "powerpack" in the system + And new "ListPowerpacks" request + And request contains "page[limit]" parameter with value 1000 + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "type" with value "powerpack" + And the response "data" has item with field "id" with value "{{ powerpack.data.id }}" + And the response "data" has item with field "attributes.name" with value "{{ unique }}" + And the response "data" has item with field "attributes.description" with value "Sample powerpack" + And the response "data" has item with field "attributes.template_variables[0].name" with value "sample" + And the response "data" has item with field "attributes.template_variables[0].defaults[0]" with value "*" + And the response "data" has item with field "attributes.group_widget.layout.width" with value 12 + And the response "data" has item with field "attributes.group_widget.layout.height" with value 3 + And the response "data" has item with field "attributes.group_widget.layout.x" with value 0 + And the response "data" has item with field "attributes.group_widget.layout.y" with value 0 + And the response "data" has item with field "attributes.group_widget.definition.type" with value "group" + And the response "data" has item with field "attributes.group_widget.definition.layout_type" with value "ordered" + And the response "data" has item with field "attributes.group_widget.definition.show_title" with value true + And the response "data" has item with field "attributes.group_widget.definition.title" with value "Sample Powerpack" + And the response "data" has item with field "attributes.group_widget.definition.widgets[0].definition.type" with value "note" + And the response "data" has item with field "attributes.group_widget.definition.widgets[0].definition.content" with value "test" + + @replay-only @skip-validation @team:DataDog/dashboards-backend @with-pagination + Scenario: Get all powerpacks returns "OK" response with pagination + Given new "ListPowerpacks" request + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @team:DataDog/dashboards-backend + Scenario: Update a powerpack returns "Bad Request" response + Given there is a valid "powerpack" in the system + And new "UpdatePowerpack" request + And request contains "powerpack_id" parameter from "powerpack.data.id" + And body with value {"data":{"type": "powerpack","attributes": {"name": "Sample Powerpack","description": "Sample powerpack","group_widget": {"definition": {"type": "group1", "layout_type": "ordered", "widgets": []}},"template_variables": [{"name": "sample", "defaults": ["*"]}],"tags": ["tag:sample"]}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/dashboards-backend + Scenario: Update a powerpack returns "OK" response + Given there is a valid "powerpack" in the system + And new "UpdatePowerpack" request + And request contains "powerpack_id" parameter from "powerpack.data.id" + And body from file "powerpack_payload.json" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "powerpack" + And the response "data.id" has the same value as "powerpack.data.id" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.description" is equal to "Sample powerpack" + And the response "data.attributes.template_variables[0].name" is equal to "sample" + And the response "data.attributes.template_variables[0].defaults[0]" is equal to "*" + And the response "data.attributes.group_widget.layout.width" is equal to 12 + And the response "data.attributes.group_widget.layout.height" is equal to 3 + And the response "data.attributes.group_widget.layout.x" is equal to 0 + And the response "data.attributes.group_widget.layout.y" is equal to 0 + And the response "data.attributes.group_widget.definition.type" is equal to "group" + And the response "data.attributes.group_widget.definition.layout_type" is equal to "ordered" + And the response "data.attributes.group_widget.definition.show_title" is equal to true + And the response "data.attributes.group_widget.definition.title" is equal to "Sample Powerpack" + And the response "data.attributes.group_widget.definition.widgets[0].definition.type" is equal to "note" + And the response "data.attributes.group_widget.definition.widgets[0].definition.content" is equal to "test" + + @team:DataDog/dashboards-backend + Scenario: Update a powerpack returns "Powerpack Not Found" response + Given new "UpdatePowerpack" request + And request contains "powerpack_id" parameter with value "made-up-id" + And body from file "powerpack_payload.json" + When the request is sent + Then the response status is 404 Powerpack Not Found diff --git a/test-runner-data/features/v2/processes.feature b/test-runner-data/features/v2/processes.feature new file mode 100644 index 0000000000..7399829f2b --- /dev/null +++ b/test-runner-data/features/v2/processes.feature @@ -0,0 +1,32 @@ +@endpoint(processes) @endpoint(processes-v2) +Feature: Processes + The processes API allows you to query processes data for your + organization. See the [Live Processes + page](https://docs.datadoghq.com/infrastructure/process/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Processes" API + And new "ListProcesses" request + + @generated @skip @team:DataDog/container-experiences + Scenario: Get all processes returns "Bad Request" response + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/container-experiences + Scenario: Get all processes returns "OK" response + Given request contains "search" parameter with value "process-agent" + And request contains "tags" parameter with value "testing:true" + And request contains "page[limit]" parameter with value 2 + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/container-experiences @with-pagination + Scenario: Get all processes returns "OK" response with pagination + Given request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items diff --git a/test-runner-data/features/v2/reference_tables.feature b/test-runner-data/features/v2/reference_tables.feature new file mode 100644 index 0000000000..7e0b963070 --- /dev/null +++ b/test-runner-data/features/v2/reference_tables.feature @@ -0,0 +1,257 @@ +@endpoint(reference-tables) @endpoint(reference-tables-v2) +Feature: Reference Tables + View and manage Reference Tables in your organization. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ReferenceTables" API + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Batch rows query returns "Bad Request" response + Given new "BatchRowsQuery" request + And body with value {"data": {"attributes": {"row_ids": ["row_id_1", "row_id_2"], "table_id": "00000000-0000-0000-0000-000000000000"}, "type": "reference-tables-batch-rows-query"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Batch rows query returns "Not Found" response + Given new "BatchRowsQuery" request + And body with value {"data": {"attributes": {"row_ids": ["row_id_1", "row_id_2"], "table_id": "00000000-0000-0000-0000-000000000000"}, "type": "reference-tables-batch-rows-query"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Batch rows query returns "Successfully retrieved rows. Some or all requested rows were found. Response includes found rows in the included section." response + Given new "BatchRowsQuery" request + And body with value {"data": {"attributes": {"row_ids": ["row_id_1", "row_id_2"], "table_id": "00000000-0000-0000-0000-000000000000"}, "type": "reference-tables-batch-rows-query"}} + When the request is sent + Then the response status is 200 Successfully retrieved rows. Some or all requested rows were found. Response includes found rows in the included section. + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Create reference table returns "Bad Request" response + Given new "CreateReferenceTable" request + And body with value {"data": {"attributes": {"file_metadata": {"access_details": {"aws_detail": {"aws_account_id": "123456789000", "aws_bucket_name": "example-data-bucket", "file_path": "reference-tables/users.csv"}, "azure_detail": {"azure_client_id": "aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb", "azure_container_name": "reference-data", "azure_storage_account_name": "examplestorageaccount", "azure_tenant_id": "cccccccc-4444-5555-6666-dddddddddddd", "file_path": "tables/users.csv"}, "gcp_detail": {"file_path": "data/reference_tables/users.csv", "gcp_bucket_name": "example-data-bucket", "gcp_project_id": "example-gcp-project-12345", "gcp_service_account_email": "example-service@example-gcp-project-12345.iam.gserviceaccount.com"}}, "sync_enabled": false}, "schema": {"fields": [{"name": "field_1", "type": "STRING"}], "primary_keys": ["field_1"]}, "source": "LOCAL_FILE", "table_name": "table_1", "tags": ["tag_1", "tag_2"]}, "type": "reference_table"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Create reference table returns "Created" response + Given new "CreateReferenceTable" request + And body with value {"data": {"attributes": {"file_metadata": {"access_details": {"aws_detail": {"aws_account_id": "123456789000", "aws_bucket_name": "example-data-bucket", "file_path": "reference-tables/users.csv"}, "azure_detail": {"azure_client_id": "aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb", "azure_container_name": "reference-data", "azure_storage_account_name": "examplestorageaccount", "azure_tenant_id": "cccccccc-4444-5555-6666-dddddddddddd", "file_path": "tables/users.csv"}, "gcp_detail": {"file_path": "data/reference_tables/users.csv", "gcp_bucket_name": "example-data-bucket", "gcp_project_id": "example-gcp-project-12345", "gcp_service_account_email": "example-service@example-gcp-project-12345.iam.gserviceaccount.com"}}, "sync_enabled": false}, "schema": {"fields": [{"name": "field_1", "type": "STRING"}], "primary_keys": ["field_1"]}, "source": "LOCAL_FILE", "table_name": "table_1", "tags": ["tag_1", "tag_2"]}, "type": "reference_table"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Create reference table upload returns "Bad Request" response + Given new "CreateReferenceTableUpload" request + And body with value {"data": {"attributes": {"headers": ["product_id", "product_name", "price"], "part_count": 3, "part_size": 10000000, "table_name": "my_products_table"}, "type": "upload"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/redapl-experiences + Scenario: Create reference table upload returns "Created" response + Given new "CreateReferenceTableUpload" request + And body with value {"data": {"attributes": {"headers": ["id", "name", "value"], "table_name": "test_upload_table_{{ unique }}", "part_count": 1, "part_size": 1024}, "type": "upload"}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "upload" + And the response "data.attributes.table_name" is equal to "test_upload_table_{{ unique }}" + + @skip @team:DataDog/redapl-experiences + Scenario: Create reference table with upload returns "Created" response + Given new "CreateReferenceTable" request + And body with value {"data": {"attributes": {"description": "Test reference table created via BDD test {{ unique }}", "source": "LOCAL_FILE", "file_metadata": {"upload_id": "test-upload-id-{{ unique }}"}, "schema": {"fields": [{"name": "id", "type": "STRING"}, {"name": "name", "type": "STRING"}, {"name": "value", "type": "INT32"}], "primary_keys": ["id"]}, "table_name": "test_reference_table_{{ unique }}", "tags": ["test_tag"]}, "type": "reference_table"}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "reference_table" + And the response "data.attributes.table_name" is equal to "test_reference_table_{{ unique }}" + + @team:DataDog/redapl-experiences + Scenario: Create reference table without upload or access details returns "Bad Request" response + Given new "CreateReferenceTable" request + And body with value {"data": {"attributes": {"description": "Test reference table without upload or access details", "source": "LOCAL_FILE", "schema": {"fields": [{"name": "id", "type": "STRING"}], "primary_keys": ["id"]}, "table_name": "test_invalid_table_{{ unique }}", "tags": ["test_tag"]}, "type": "reference_table"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Delete rows returns "Bad Request" response + Given new "DeleteRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Delete rows returns "Conflict" response + Given new "DeleteRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Delete rows returns "Not Found" response + Given new "DeleteRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Delete rows returns "Precondition Failed" response + Given new "DeleteRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 412 Precondition Failed + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Delete rows returns "Rows deleted successfully" response + Given new "DeleteRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 200 Rows deleted successfully + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Delete table returns "Not Found" response + Given new "DeleteTable" 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/redapl-experiences + Scenario: Delete table returns "OK" response + Given new "DeleteTable" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Get rows by id returns "Not Found" response + Given new "GetRowsByID" request + And request contains "id" parameter from "REPLACE.ME" + And request contains "row_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Get rows by id returns "Some or all requested rows were found." response + Given new "GetRowsByID" request + And request contains "id" parameter from "REPLACE.ME" + And request contains "row_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 Some or all requested rows were found. + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Get table returns "Not Found" response + Given new "GetTable" 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/redapl-experiences + Scenario: Get table returns "OK" response + Given new "GetTable" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/redapl-experiences + Scenario: List reference table rows returns "Bad Request" response for invalid limit + Given new "ListReferenceTableRows" request + And request contains "id" parameter with value "not-a-valid-uuid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/redapl-experiences + Scenario: List reference table rows returns "Not Found" response + Given new "ListReferenceTableRows" request + And request contains "id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/redapl-experiences + Scenario: List rows returns "Bad Request" response + Given new "ListReferenceTableRows" 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/redapl-experiences + Scenario: List rows returns "Not Found" response + Given new "ListReferenceTableRows" 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/redapl-experiences + Scenario: List rows returns "OK" response + Given new "ListReferenceTableRows" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/redapl-experiences + Scenario: List tables returns "OK" response + Given new "ListTables" request + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Update reference table returns "Bad Request" response + Given new "UpdateReferenceTable" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "this is a cloud table generated via a cloud bucket sync", "file_metadata": {"access_details": {"aws_detail": {"aws_account_id": "test-account-id", "aws_bucket_name": "test-bucket", "file_path": "test_rt.csv"}}, "sync_enabled": true}, "schema": {"fields": [{"name": "id", "type": "INT32"}, {"name": "name", "type": "STRING"}], "primary_keys": ["id"]}, "tags": ["test_tag"]}, "type": "reference_table"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Update reference table returns "OK" response + Given new "UpdateReferenceTable" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "this is a cloud table generated via a cloud bucket sync", "file_metadata": {"access_details": {"aws_detail": {"aws_account_id": "test-account-id", "aws_bucket_name": "test-bucket", "file_path": "test_rt.csv"}}, "sync_enabled": true}, "schema": {"fields": [{"name": "id", "type": "INT32"}, {"name": "name", "type": "STRING"}], "primary_keys": ["id"]}, "tags": ["test_tag"]}, "type": "reference_table"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Upsert rows returns "Bad Request" response + Given new "UpsertRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"values": {}}, "id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Upsert rows returns "Conflict" response + Given new "UpsertRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"values": {}}, "id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Upsert rows returns "Not Found" response + Given new "UpsertRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"values": {}}, "id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Upsert rows returns "Precondition Failed" response + Given new "UpsertRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"values": {}}, "id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 412 Precondition Failed + + @generated @skip @team:DataDog/redapl-experiences + Scenario: Upsert rows returns "Rows created or updated successfully" response + Given new "UpsertRows" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": [{"attributes": {"values": {}}, "id": "primary_key_value", "type": "row"}]} + When the request is sent + Then the response status is 200 Rows created or updated successfully diff --git a/test-runner-data/features/v2/restriction_policies.feature b/test-runner-data/features/v2/restriction_policies.feature new file mode 100644 index 0000000000..fee6874341 --- /dev/null +++ b/test-runner-data/features/v2/restriction_policies.feature @@ -0,0 +1,67 @@ +@endpoint(restriction-policies) @endpoint(restriction-policies-v2) +Feature: Restriction Policies + A restriction policy defines the access control rules for a resource, + mapping a set of relations (such as editor and viewer) to a set of allowed + principals (such as roles, teams, or users). The restriction policy + determines who is authorized to perform what actions on the resource. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "RestrictionPolicies" API + + @team:DataDog/access-policies-lifecycle + Scenario: Delete a restriction policy returns "Bad Request" response + Given new "DeleteRestrictionPolicy" request + And request contains "resource_id" parameter with value "malformed" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/access-policies-lifecycle + Scenario: Delete a restriction policy returns "No Content" response + Given new "DeleteRestrictionPolicy" request + And request contains "resource_id" parameter with value "dashboard:test-delete" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/access-policies-lifecycle + Scenario: Get a restriction policy returns "Bad Request" response + Given new "GetRestrictionPolicy" request + And request contains "resource_id" parameter with value "malformed" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/access-policies-lifecycle + Scenario: Get a restriction policy returns "OK" response + Given new "GetRestrictionPolicy" request + And request contains "resource_id" parameter with value "dashboard:test-get" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "restriction_policy" + And the response "data.id" is equal to "dashboard:test-get" + And the response "data.attributes.bindings" has length 0 + + @team:DataDog/access-policies-lifecycle + Scenario: Update a restriction policy returns "Bad Request" response + Given there is a valid "role" in the system + And there is a valid "user" in the system + And the "user" has the "role" + And new "UpdateRestrictionPolicy" request + And request contains "resource_id" parameter with value "malformed" + And body with value {"data": {"id": "dashboard:abc-def-ghi", "type": "restriction_policy", "attributes": {"bindings": [{"relation": "editor", "principals": ["org:{{ user.data.relationships.org.data.id }}"]}]}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/access-policies-lifecycle + Scenario: Update a restriction policy returns "OK" response + Given there is a valid "role" in the system + And there is a valid "user" in the system + And the "user" has the "role" + And new "UpdateRestrictionPolicy" request + And request contains "resource_id" parameter with value "dashboard:test-update" + And body with value {"data": {"id": "dashboard:test-update", "type": "restriction_policy", "attributes": {"bindings": [{"relation": "editor", "principals": ["org:{{ user.data.relationships.org.data.id }}"]}]}}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "restriction_policy" + And the response "data.id" is equal to "dashboard:test-update" + And the response "data.attributes.bindings[0]" is equal to {"relation": "editor", "principals": ["org:{{ user.data.relationships.org.data.id }}"]} diff --git a/test-runner-data/features/v2/roles.feature b/test-runner-data/features/v2/roles.feature new file mode 100644 index 0000000000..3be5f45880 --- /dev/null +++ b/test-runner-data/features/v2/roles.feature @@ -0,0 +1,343 @@ +@endpoint(roles) @endpoint(roles-v2) +Feature: Roles + The Roles API is used to create and manage Datadog roles, what [global + permissions](https://docs.datadoghq.com/account_management/rbac/) they + grant, and which users belong to them. Permissions related to specific + account assets can be granted to roles in the Datadog application without + using this API. For example, granting read access on a specific log index + to a role can be done in Datadog from the [Pipelines + page](https://app.datadoghq.com/logs/pipelines). Roles can also be + managed in bulk through the Datadog UI, which provides the capability to + assign a single permission to multiple roles simultaneously. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Roles" API + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Add a user to a role returns "Bad Request" response + Given new "AddUserToRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "00000000-0000-0000-2345-000000000000", "type": "users"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Add a user to a role returns "Not found" response + Given new "AddUserToRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "00000000-0000-0000-2345-000000000000", "type": "users"}} + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Add a user to a role returns "OK" response + Given there is a valid "role" in the system + And there is a valid "user" in the system + And new "AddUserToRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"id": "{{ user.data.id}}", "type": "{{ user.data.type }}"}} + When the request is sent + Then the response status is 200 OK + And the response "data[0].id" is equal to "{{ user.data.id }}" + And the response "data[0].type" is equal to "{{ user.data.type }}" + And the response "data[0].relationships.roles.data" has item with field "id" with value "{{ role.data.id }}" + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Create a new role by cloning an existing role returns "Bad Request" response + Given there is a valid "role" in the system + And new "CloneRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"attributes": {"name": " "}, "type": "roles"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Create a new role by cloning an existing role returns "Conflict" response + Given there is a valid "role" in the system + And new "CloneRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"attributes": {"name": "{{ role.data.attributes.name }}"}, "type": "roles"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Create a new role by cloning an existing role returns "Not found" response + Given new "CloneRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "cloned-role", "receives_permissions_from": []}, "type": "roles"}} + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Create a new role by cloning an existing role returns "OK" response + Given there is a valid "role" in the system + And new "CloneRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"attributes": {"name": "{{ unique }} clone"}, "type": "roles"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{ unique }} clone" + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Create role returns "Bad Request" response + Given new "CreateRole" request + And body with value {"data": {"attributes": {"name": "developers", "receives_permissions_from": []}, "relationships": {"permissions": {"data": [{"type": "permissions"}]}}, "type": "roles"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Create role returns "OK" response + Given new "CreateRole" request + And body with value {"data": {"attributes": {"name": "developers", "receives_permissions_from": []}, "relationships": {"permissions": {"data": [{"type": "permissions"}]}}, "type": "roles"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Create role with a permission returns "OK" response + Given new "CreateRole" request + And there is a valid "permission" in the system + And body with value {"data": {"type": "roles", "attributes": {"name": "{{ unique }}"}, "relationships": {"permissions": {"data": [{"id": "{{ permission.id }}", "type": "{{ permission.type }}"}]}}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.type" is equal to "roles" + And the response "data.relationships.permissions.data" has item with field "id" with value "{{ permission.id }}" + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Delete role returns "Not found" response + Given new "DeleteRole" request + And request contains "role_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Delete role returns "OK" response + Given there is a valid "role" in the system + And new "DeleteRole" request + And request contains "role_id" parameter from "role.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Get a role returns "Not found" response + Given new "GetRole" request + And request contains "role_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Get a role returns "OK" response + Given there is a valid "role" in the system + And new "GetRole" request + And request contains "role_id" parameter from "role.data.id" + When the request is sent + Then the response status is 200 OK for get role + And the response "data.attributes.name" has the same value as "role.data.attributes.name" + And the response "data.id" has the same value as "role.data.id" + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Get all users of a role returns "Not found" response + Given new "ListRoleUsers" request + And request contains "role_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Get all users of a role returns "OK" response + Given there is a valid "role" in the system + And there is a valid "user" in the system + And the "user" has the "role" + And new "ListRoleUsers" request + And request contains "role_id" parameter from "role.data.id" + When the request is sent + Then the response status is 200 OK + And the response "meta.page.total_count" is equal to 1 + And the response "data" has item with field "id" with value "{{ user.data.id }}" + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Grant permission to a role returns "Bad Request" response + Given new "AddPermissionToRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"type": "permissions"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Grant permission to a role returns "Not found" response + Given new "AddPermissionToRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"type": "permissions"}} + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Grant permission to a role returns "OK" response + Given there is a valid "role" in the system + And there is a valid "permission" in the system + And new "AddPermissionToRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"id": "{{ permission.id }}", "type": "{{ permission.type }}"}} + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "{{ permission.type }}" + And the response "data" has item with field "id" with value "{{ permission.id }}" + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: List permissions for a role returns "Not found" response + Given new "ListRolePermissions" request + And request contains "role_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: List permissions for a role returns "OK" response + Given there is a valid "role" in the system + And there is a valid "permission" in the system + And the "permission" is granted to the "role" + And new "ListRolePermissions" request + And request contains "role_id" parameter from "role.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "{{ permission.type }}" + And the response "data" has item with field "id" with value "{{ permission.id }}" + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: List permissions returns "Bad Request" response + Given new "ListPermissions" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: List permissions returns "OK" response + Given new "ListPermissions" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "attributes.restricted" with value true + And the response "data" has item with field "attributes.restricted" with value false + And the response "data" has item with field "attributes.name" with value "admin" + And the response "data" has item with field "attributes.name_aliases" with value [] + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: List role templates returns "OK" response + Given operation "ListRoleTemplates" enabled + And new "ListRoleTemplates" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: List roles returns "OK" response + Given there is a valid "role" in the system + And new "ListRoles" request + And request contains "filter" parameter from "role.data.attributes.name" + When the request is sent + Then the response status is 200 OK + And the response "meta.page.total_filtered_count" is equal to 1 + And the response "data[0].id" has the same value as "role.data.id" + And the response "data[0].attributes.name" has the same value as "role.data.attributes.name" + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Remove a user from a role returns "Bad Request" response + Given new "RemoveUserFromRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "00000000-0000-0000-2345-000000000000", "type": "users"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Remove a user from a role returns "Not found" response + Given new "RemoveUserFromRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "00000000-0000-0000-2345-000000000000", "type": "users"}} + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Remove a user from a role returns "OK" response + Given there is a valid "role" in the system + And there is a valid "user" in the system + And the "user" has the "role" + And new "RemoveUserFromRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"id": "{{ user.data.id}}", "type": "{{ user.data.type }}"}} + When the request is sent + Then the response status is 200 OK + + @skip-validation @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Revoke permission returns "Bad Request" response + Given there is a valid "role" in the system + And new "RemovePermissionFromRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"id": "11111111-dead-beef-dead-ffffffffffff", "type": "bad_permission_type"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Revoke permission returns "Not found" response + Given there is a valid "permission" in the system + And new "RemovePermissionFromRole" request + And request contains "role_id" parameter with value "00000000-dead-beef-dead-ffffffffffff" + And body with value {"data": {"id": "{{ permission.id }}", "type": "{{ permission.type }}"}} + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Revoke permission returns "OK" response + Given there is a valid "role" in the system + And there is a valid "permission" in the system + And the "permission" is granted to the "role" + And new "RemovePermissionFromRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"id": "{{ permission.id }}", "type": "{{ permission.type }}"}} + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "permissions" + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Update a role returns "Bad Request" response + Given there is a valid "role" in the system + And there is a valid "permission" in the system + And new "UpdateRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"id": "{{ role.data.id }}", "type": "roles", "attributes": {"name" : "{{ role.data.attributes.name }}-updated"}, "relationships": {"permissions": {"data": [{"id": "11111111-dead-beef-dead-ffffffffffff", "type": "{{ permission.type }}"}]}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Update a role returns "Bad Role ID" response + Given there is a valid "role" in the system + And there is a valid "permission" in the system + And new "UpdateRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"id": "00000000-dead-beef-dead-ffffffffffff", "type": "roles", "attributes": {"name" : "{{ role.data.attributes.name }}-updated"}, "relationships": {"permissions": {"data": [{"type": "{{ permission.type }}", "id": "{{ permission.id }}"}]}}}} + When the request is sent + Then the response status is 422 Bad Role ID in Request + + @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Update a role returns "Not found" response + Given there is a valid "permission" in the system + And new "UpdateRole" request + And request contains "role_id" parameter with value "00000000-dead-beef-dead-ffffffffffff" + And body with value {"data": {"id": "00000000-dead-beef-dead-ffffffffffff", "type": "roles", "attributes": {"name" : "updated"}, "relationships": {"permissions": {"data": [{"type": "{{ permission.type }}", "id": "{{ permission.id }}"}]}}}} + When the request is sent + Then the response status is 404 Not found + + @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Update a role returns "OK" response + Given there is a valid "role" in the system + And there is a valid "permission" in the system + And new "UpdateRole" request + And request contains "role_id" parameter from "role.data.id" + And body with value {"data": {"id": "{{ role.data.id }}", "type": "roles", "attributes": {"name" : "{{ role.data.attributes.name }}-updated"}, "relationships": {"permissions": {"data": [{"id": "{{ permission.id }}", "type": "{{ permission.type }}"}]}}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{ role.data.attributes.name }}-updated" + + @generated @skip @team:DataDog/aaa-core-access @team:DataDog/access-policies-lifecycle + Scenario: Update a role returns "Unprocessable Entity" response + Given new "UpdateRole" request + And request contains "role_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"receives_permissions_from": []}, "id": "00000000-0000-1111-0000-000000000000", "relationships": {"permissions": {"data": [{"type": "permissions"}]}}, "type": "roles"}} + When the request is sent + Then the response status is 422 Unprocessable Entity diff --git a/test-runner-data/features/v2/rum.feature b/test-runner-data/features/v2/rum.feature new file mode 100644 index 0000000000..e25922fb48 --- /dev/null +++ b/test-runner-data/features/v2/rum.feature @@ -0,0 +1,210 @@ +@endpoint(rum) @endpoint(rum-v2) +Feature: RUM + Manage your Real User Monitoring (RUM) applications, and search or + aggregate your RUM events over HTTP. See the [RUM & Session Replay + page](https://docs.datadoghq.com/real_user_monitoring/) for more + information + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "RUM" API + + @generated @skip @team:DataDog/rum-backend + Scenario: Aggregate RUM events returns "Bad Request" response + Given new "AggregateRUMEvents" request + And body with value {"compute": [{"aggregation": "pc90", "interval": "5m", "metric": "@duration", "type": "total"}], "filter": {"from": "now-15m", "query": "@type:session AND @session.type:user", "to": "now"}, "group_by": [{"facet": "@view.time_spent", "histogram": {"interval": 10, "max": 100, "min": 50}, "limit": 10, "sort": {"aggregation": "count", "order": "asc"}, "total": false}], "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/rum-backend + Scenario: Aggregate RUM events returns "OK" response + Given new "AggregateRUMEvents" request + And body with value {"compute": [{"aggregation": "pc90", "metric": "@view.time_spent", "type": "total"}], "filter": {"from": "now-15m", "query": "@type:view AND @session.type:user", "to": "now"}, "group_by": [{"facet": "@view.time_spent", "limit": 10, "total": false}], "options": {"timezone": "GMT"}, "page": { "limit": 25}} + When the request is sent + Then the response status is 200 OK + And the response "meta.status" is equal to "done" + And the response "data.buckets" has length 0 + + @skip @team:DataDog/rum-backend + Scenario: Create a new RUM application returns "Bad Request" response + Given new "CreateRUMApplication" request + And body with value {"data": {"attributes": {"name": "wrong_rum_application", "type": "wrong_android"}, "type": "wrong_rum_application_type"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-validation @team:DataDog/rum-backend + Scenario: Create a new RUM application returns "OK" response + Given new "CreateRUMApplication" request + And body with value {"data": {"attributes": {"name": "test-rum-{{ unique_hash }}", "type": "ios"}, "type": "rum_application_create"}} + When the request is sent + Then the response status is 200 RUM application. + And the response "data.type" is equal to "rum_application" + And the response "data.attributes.type" is equal to "ios" + And the response "data.attributes.name" is equal to "test-rum-{{ unique_hash }}" + And the response "data.attributes.product_scales.rum_event_processing_scale.state" is equal to "ALL" + And the response "data.attributes.product_scales.product_analytics_retention_scale.state" is equal to "NONE" + And the response "data.attributes.product_scales.rum_event_processing_scale" has field "last_modified_at" + And the response "data.attributes.product_scales.product_analytics_retention_scale" has field "last_modified_at" + + @skip-validation @team:DataDog/rum-backend + Scenario: Create a new RUM application with Product Scales returns "OK" response + Given new "CreateRUMApplication" request + And body with value {"data": {"attributes": {"name": "test-rum-with-product-scales-{{ unique_hash }}", "type": "browser", "rum_event_processing_state": "ERROR_FOCUSED_MODE", "product_analytics_retention_state": "NONE"}, "type": "rum_application_create"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "rum_application" + And the response "data.attributes.name" is equal to "test-rum-with-product-scales-{{ unique_hash }}" + And the response "data.attributes.product_scales.rum_event_processing_scale.state" is equal to "ERROR_FOCUSED_MODE" + And the response "data.attributes.product_scales.product_analytics_retention_scale.state" is equal to "NONE" + And the response "data.attributes.product_scales.rum_event_processing_scale" has field "last_modified_at" + And the response "data.attributes.product_scales.product_analytics_retention_scale" has field "last_modified_at" + + @skip-validation @team:DataDog/rum-backend + Scenario: Delete a RUM application returns "No Content" response + Given there is a valid "rum_application" in the system + And new "DeleteRUMApplication" request + And request contains "id" parameter from "rum_application.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/rum-backend + Scenario: Delete a RUM application returns "Not Found" response + Given new "DeleteRUMApplication" request + And request contains "id" parameter with value "abcde-12345" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/rum-backend + Scenario: Get a RUM application returns "Not Found" response + Given new "GetRUMApplication" request + And request contains "id" parameter with value "abcd1234-0000-0000-abcd-1234abcd5678" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/rum-backend + Scenario: Get a RUM application returns "OK" response + Given there is a valid "rum_application" in the system + And new "GetRUMApplication" request + And request contains "id" parameter from "rum_application.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "rum_application" + And the response "data.attributes.type" is equal to "ios" + And the response "data.attributes.name" is equal to "test-rum-{{ unique_hash }}" + And the response "data.attributes" has field "product_scales" + + @generated @skip @team:DataDog/rum-backend + Scenario: Get a list of RUM events returns "Bad Request" response + Given new "ListRUMEvents" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/rum-backend + Scenario: Get a list of RUM events returns "OK" response + Given new "ListRUMEvents" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/rum-backend @with-pagination + Scenario: Get a list of RUM events returns "OK" response with pagination + Given new "ListRUMEvents" request + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/rum-backend + Scenario: List all the RUM applications returns "Not Found" response + Given new "GetRUMApplications" request + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/rum-backend + Scenario: List all the RUM applications returns "OK" response + Given there is a valid "rum_application" in the system + And new "GetRUMApplications" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "attributes.application_id" with value "{{ rum_application.data.id }}" + And the response "data" has item with field "attributes.product_scales.rum_event_processing_scale.state" with value "ALL" + And the response "data" has item with field "attributes.product_scales.product_analytics_retention_scale.state" with value "NONE" + + @generated @skip @team:DataDog/rum-backend + Scenario: Search RUM events returns "Bad Request" response + Given new "SearchRUMEvents" request + And body with value {"filter": {"from": "now-15m", "query": "@type:session AND @session.type:user", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/rum-backend + Scenario: Search RUM events returns "OK" response + Given new "SearchRUMEvents" request + And body with value {"filter": {"from": "now-15m", "query": "@type:session AND @session.type:user", "to": "now"}, "options": {"time_offset": 0, "timezone": "GMT"}, "page": {"limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/rum-backend @with-pagination + Scenario: Search RUM events returns "OK" response with pagination + Given new "SearchRUMEvents" request + And body with value {"filter": {"from": "now-15m", "query": "@type:session AND @session.type:user", "to": "now"}, "options": {"time_offset": 0, "timezone": "GMT"}, "page": {"limit": 2}, "sort": "timestamp"} + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/rum-backend + Scenario: Update a RUM application returns "Bad Request" response + Given new "UpdateRUMApplication" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "updated_name_for_my_existing_rum_application", "product_analytics_retention_state": "MAX", "rum_event_processing_state": "ALL", "type": "browser"}, "id": "abcd1234-0000-0000-abcd-1234abcd5678", "type": "rum_application_update"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/rum-backend + Scenario: Update a RUM application returns "Not Found" response + Given new "UpdateRUMApplication" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "updated_name_for_my_existing_rum_application", "product_analytics_retention_state": "MAX", "rum_event_processing_state": "ALL", "type": "browser"}, "id": "abcd1234-0000-0000-abcd-1234abcd5678", "type": "rum_application_update"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/rum-backend + Scenario: Update a RUM application returns "OK" response + Given there is a valid "rum_application" in the system + And new "UpdateRUMApplication" request + And request contains "id" parameter from "rum_application.data.id" + And body with value {"data": {"attributes": {"name": "updated_name_for_my_existing_rum_application", "type": "browser"}, "id": "{{ rum_application.data.id }}","type": "rum_application_update"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "rum_application" + And the response "data.attributes.application_id" is equal to "{{ rum_application.data.id }}" + And the response "data.attributes.type" is equal to "browser" + And the response "data.attributes.name" is equal to "updated_name_for_my_existing_rum_application" + And the response "data.attributes.product_scales.rum_event_processing_scale.state" is equal to "ALL" + And the response "data.attributes.product_scales.product_analytics_retention_scale.state" is equal to "NONE" + And the response "data.attributes.product_scales.rum_event_processing_scale" has field "last_modified_at" + And the response "data.attributes.product_scales.product_analytics_retention_scale" has field "last_modified_at" + + @skip-validation @team:DataDog/rum-backend + Scenario: Update a RUM application returns "Unprocessable Entity." response + Given there is a valid "rum_application" in the system + And new "UpdateRUMApplication" request + And request contains "id" parameter from "rum_application.data.id" + And body with value {"data": {"id": "this_id_will_not_match", "type": "rum_application_update"}} + When the request is sent + Then the response status is 422 Unprocessable Entity. + + @skip-validation @team:DataDog/rum-backend + Scenario: Update a RUM application with Product Scales returns "OK" response + Given there is a valid "rum_application" in the system + And new "UpdateRUMApplication" request + And request contains "id" parameter from "rum_application.data.id" + And body with value {"data": {"attributes": {"name": "updated_rum_with_product_scales", "rum_event_processing_state": "ALL", "product_analytics_retention_state": "MAX"}, "id": "{{ rum_application.data.id }}", "type": "rum_application_update"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "rum_application" + And the response "data.attributes.name" is equal to "updated_rum_with_product_scales" + And the response "data.attributes.product_scales.rum_event_processing_scale.state" is equal to "ALL" + And the response "data.attributes.product_scales.product_analytics_retention_scale.state" is equal to "MAX" + And the response "data.attributes.product_scales.rum_event_processing_scale" has field "last_modified_at" + And the response "data.attributes.product_scales.product_analytics_retention_scale" has field "last_modified_at" diff --git a/test-runner-data/features/v2/rum_metrics.feature b/test-runner-data/features/v2/rum_metrics.feature new file mode 100644 index 0000000000..c87b3187ba --- /dev/null +++ b/test-runner-data/features/v2/rum_metrics.feature @@ -0,0 +1,134 @@ +@endpoint(rum-metrics) @endpoint(rum-metrics-v2) +Feature: Rum Metrics + Manage configuration of [RUM-based + metrics](https://app.datadoghq.com/rum/generate-metrics) for your + organization. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "RumMetrics" API + + @team:DataDog/rum-backend + Scenario: Create a RUM-based metric returns "Bad Request" response + Given new "CreateRumMetric" request + And body with value {"data": {"id": "rum.actions.invalid", "type": "rum_metrics", "attributes": {"event_type": "action", "compute": {"aggregation_type": "count"}, "uniqueness":{"when": "match"}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/rum-backend + Scenario: Create a RUM-based metric returns "Conflict" response + Given there is a valid "rum_metric" in the system + And new "CreateRumMetric" request + And body with value {"data": {"id": "{{ rum_metric.data.id }}", "type": "rum_metrics", "attributes": {"compute": {"aggregation_type": "count"}, "event_type": "action"}}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/rum-backend + Scenario: Create a RUM-based metric returns "Created" response + Given new "CreateRumMetric" request + And body with value {"data": {"attributes": {"compute": {"aggregation_type": "distribution", "include_percentiles": true, "path": "@duration"}, "event_type": "session", "filter": {"query": "@service:web-ui"}, "group_by": [{"path": "@browser.name", "tag_name": "browser_name"}], "uniqueness": {"when": "match"}}, "id": "{{ unique_lower_alnum }}", "type": "rum_metrics"}} + When the request is sent + Then the response status is 201 Created + And the response "data.id" is equal to "{{ unique_lower_alnum }}" + And the response "data.type" is equal to "rum_metrics" + And the response "data.attributes.event_type" is equal to "session" + And the response "data.attributes.compute.aggregation_type" is equal to "distribution" + And the response "data.attributes.compute.include_percentiles" is equal to true + And the response "data.attributes.compute.path" is equal to "@duration" + And the response "data.attributes.filter.query" is equal to "@service:web-ui" + And the response "data.attributes.group_by[0].path" is equal to "@browser.name" + And the response "data.attributes.group_by[0].tag_name" is equal to "browser_name" + And the response "data.attributes.uniqueness.when" is equal to "match" + + @team:DataDog/rum-backend + Scenario: Delete a RUM-based metric returns "No Content" response + Given there is a valid "rum_metric" in the system + And new "DeleteRumMetric" request + And request contains "metric_id" parameter from "rum_metric.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/rum-backend + Scenario: Delete a RUM-based metric returns "Not Found" response + Given new "DeleteRumMetric" request + And request contains "metric_id" parameter with value "{{ unique }}" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/rum-backend + Scenario: Get a RUM-based metric returns "Not Found" response + Given new "GetRumMetric" request + And request contains "metric_id" parameter with value "{{ unique }}" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/rum-backend + Scenario: Get a RUM-based metric returns "OK" response + Given there is a valid "rum_metric" in the system + And new "GetRumMetric" request + And request contains "metric_id" parameter from "rum_metric.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "rum_metric.data.id" + And the response "data.type" has the same value as "rum_metric.data.type" + And the response "data.attributes.event_type" has the same value as "rum_metric.data.attributes.event_type" + And the response "data.attributes.compute.aggregation_type" has the same value as "rum_metric.data.attributes.compute.aggregation_type" + And the response "data.attributes.compute.include_percentiles" has the same value as "rum_metric.data.attributes.compute.include_percentiles" + And the response "data.attributes.compute.path" has the same value as "rum_metric.data.attributes.compute.path" + And the response "data.attributes.filter.query" has the same value as "rum_metric.data.attributes.filter.query" + And the response "data.attributes.group_by[0].path" has the same value as "rum_metric.data.attributes.group_by[0].path" + And the response "data.attributes.group_by[0].tag_name" has the same value as "rum_metric.data.attributes.group_by[0].tag_name" + And the response "data.attributes.uniqueness.when" has the same value as "rum_metric.data.attributes.uniqueness.when" + + @team:DataDog/rum-backend + Scenario: Get all RUM-based metrics returns "OK" response + Given new "ListRumMetrics" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/rum-backend + Scenario: Update a RUM-based metric returns "Bad Request" response + Given there is a valid "rum_metric" in the system + And new "UpdateRumMetric" request + And request contains "metric_id" parameter from "rum_metric.data.id" + And body with value {"data": {"id": "rum.sessions.webui.count", "type": "unknown_metrics", "attributes": {"compute": {"include_percentiles": true}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/rum-backend + Scenario: Update a RUM-based metric returns "Conflict" response + Given there is a valid "rum_metric" in the system + And new "UpdateRumMetric" request + And request contains "metric_id" parameter from "rum_metric.data.id" + And body with value {"data": {"id": "conflicting.id", "type": "rum_metrics", "attributes": {"compute": {"include_percentiles": true}}}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/rum-backend + Scenario: Update a RUM-based metric returns "Not Found" response + Given there is a valid "rum_metric" in the system + And new "UpdateRumMetric" request + And request contains "metric_id" parameter with value "8fc991bf-967e-4652-8a5b-0711a985abe3" + And body with value {"data": {"id": "8fc991bf-967e-4652-8a5b-0711a985abe3", "type": "rum_metrics", "attributes": {"compute": {"include_percentiles": true}}}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/rum-backend + Scenario: Update a RUM-based metric returns "OK" response + Given there is a valid "rum_metric" in the system + And new "UpdateRumMetric" request + And request contains "metric_id" parameter from "rum_metric.data.id" + And body with value {"data": {"id": "{{ rum_metric.data.id }}", "type": "rum_metrics", "attributes": {"compute": {"include_percentiles": false}, "filter": {"query": "@service:rum-config"}, "group_by": [{"path": "@browser.version", "tag_name": "browser_version"}]}}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "rum_metric.data.id" + And the response "data.type" has the same value as "rum_metric.data.type" + And the response "data.attributes.event_type" has the same value as "rum_metric.data.attributes.event_type" + And the response "data.attributes.compute.aggregation_type" has the same value as "rum_metric.data.attributes.compute.aggregation_type" + And the response "data.attributes.compute.include_percentiles" is equal to false + And the response "data.attributes.compute.path" has the same value as "rum_metric.data.attributes.compute.path" + And the response "data.attributes.filter.query" is equal to "@service:rum-config" + And the response "data.attributes.group_by[0].path" is equal to "@browser.version" + And the response "data.attributes.group_by[0].tag_name" is equal to "browser_version" + And the response "data.attributes.uniqueness.when" has the same value as "rum_metric.data.attributes.uniqueness.when" diff --git a/test-runner-data/features/v2/rum_remote_config.feature b/test-runner-data/features/v2/rum_remote_config.feature new file mode 100644 index 0000000000..363d3f0ac3 --- /dev/null +++ b/test-runner-data/features/v2/rum_remote_config.feature @@ -0,0 +1,70 @@ +@endpoint(rum-remote-config) @endpoint(rum-remote-config-v2) +Feature: RUM Remote Config + Manage [RUM SDK + configurations](https://docs.datadoghq.com/real_user_monitoring/) + delivered to RUM applications via Remote Configuration. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "RUMRemoteConfig" API + + @team:DataDog/rum-backend + Scenario: Get a RUM SDK configuration returns "Forbidden" response + Given operation "GetRumSdkConfig" enabled + And new "GetRumSdkConfig" request + And request contains "config_id" parameter with value "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + When the request is sent + Then the response status is 403 Forbidden + + @generated @skip @team:DataDog/rum-backend + Scenario: Get a RUM SDK configuration returns "Not Found" response + Given operation "GetRumSdkConfig" enabled + And new "GetRumSdkConfig" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/rum-backend + Scenario: Get a RUM SDK configuration returns "OK" response + Given operation "GetRumSdkConfig" enabled + And new "GetRumSdkConfig" request + And request contains "config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/rum-backend + Scenario: Update a RUM SDK configuration returns "Bad Request" response + Given operation "UpdateRumSdkConfig" enabled + And new "UpdateRumSdkConfig" request + And request contains "config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"rum": {"allowed_tracing_urls": [{"match": {"rc_serialized_type": "string", "value": "https://app.datadoghq.com"}, "propagator_types": ["datadog", "tracecontext"]}], "allowed_tracking_origins": [{"rc_serialized_type": "string", "value": "https://app.datadoghq.com"}], "context": [{"key": "id", "value": {"attribute": "data-version", "extractor": {"rc_serialized_type": "regex", "value": "^https://app-.*.datadoghq.com"}, "key": "app.version", "name": "app_version", "path": "application.version", "rc_serialized_type": "dynamic", "selector": "#app-version", "strategy": "js"}}], "default_privacy_level": "mask", "enable_privacy_for_action_name": true, "env": "production", "service": "my-service", "session_replay_sample_rate": 20, "session_sample_rate": 75, "trace_sample_rate": 100, "track_session_across_subdomains": false, "user": [{"key": "id", "value": {"attribute": "data-version", "extractor": {"rc_serialized_type": "regex", "value": "^https://app-.*.datadoghq.com"}, "key": "app.version", "name": "app_version", "path": "application.version", "rc_serialized_type": "dynamic", "selector": "#app-version", "strategy": "js"}}], "version": {"attribute": "data-version", "extractor": {"rc_serialized_type": "regex", "value": "^https://app-.*.datadoghq.com"}, "key": "app.version", "name": "app_version", "path": "application.version", "rc_serialized_type": "dynamic", "selector": "#app-version", "strategy": "js"}}}, "id": "abc12345-1234-5678-abcd-ef1234567890", "type": "rum_sdk_config"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/rum-backend + Scenario: Update a RUM SDK configuration returns "Forbidden" response + Given operation "UpdateRumSdkConfig" enabled + And new "UpdateRumSdkConfig" request + And request contains "config_id" parameter with value "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + And body with value {"data": {"id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "type": "rum_sdk_config", "attributes": {"rum": {"session_sample_rate": 75, "session_replay_sample_rate": 20, "default_privacy_level": "mask", "enable_privacy_for_action_name": true}}}} + When the request is sent + Then the response status is 403 Forbidden + + @generated @skip @team:DataDog/rum-backend + Scenario: Update a RUM SDK configuration returns "Not Found" response + Given operation "UpdateRumSdkConfig" enabled + And new "UpdateRumSdkConfig" request + And request contains "config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"rum": {"allowed_tracing_urls": [{"match": {"rc_serialized_type": "string", "value": "https://app.datadoghq.com"}, "propagator_types": ["datadog", "tracecontext"]}], "allowed_tracking_origins": [{"rc_serialized_type": "string", "value": "https://app.datadoghq.com"}], "context": [{"key": "id", "value": {"attribute": "data-version", "extractor": {"rc_serialized_type": "regex", "value": "^https://app-.*.datadoghq.com"}, "key": "app.version", "name": "app_version", "path": "application.version", "rc_serialized_type": "dynamic", "selector": "#app-version", "strategy": "js"}}], "default_privacy_level": "mask", "enable_privacy_for_action_name": true, "env": "production", "service": "my-service", "session_replay_sample_rate": 20, "session_sample_rate": 75, "trace_sample_rate": 100, "track_session_across_subdomains": false, "user": [{"key": "id", "value": {"attribute": "data-version", "extractor": {"rc_serialized_type": "regex", "value": "^https://app-.*.datadoghq.com"}, "key": "app.version", "name": "app_version", "path": "application.version", "rc_serialized_type": "dynamic", "selector": "#app-version", "strategy": "js"}}], "version": {"attribute": "data-version", "extractor": {"rc_serialized_type": "regex", "value": "^https://app-.*.datadoghq.com"}, "key": "app.version", "name": "app_version", "path": "application.version", "rc_serialized_type": "dynamic", "selector": "#app-version", "strategy": "js"}}}, "id": "abc12345-1234-5678-abcd-ef1234567890", "type": "rum_sdk_config"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/rum-backend + Scenario: Update a RUM SDK configuration returns "OK" response + Given operation "UpdateRumSdkConfig" enabled + And new "UpdateRumSdkConfig" request + And request contains "config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"rum": {"allowed_tracing_urls": [{"match": {"rc_serialized_type": "string", "value": "https://app.datadoghq.com"}, "propagator_types": ["datadog", "tracecontext"]}], "allowed_tracking_origins": [{"rc_serialized_type": "string", "value": "https://app.datadoghq.com"}], "context": [{"key": "id", "value": {"attribute": "data-version", "extractor": {"rc_serialized_type": "regex", "value": "^https://app-.*.datadoghq.com"}, "key": "app.version", "name": "app_version", "path": "application.version", "rc_serialized_type": "dynamic", "selector": "#app-version", "strategy": "js"}}], "default_privacy_level": "mask", "enable_privacy_for_action_name": true, "env": "production", "service": "my-service", "session_replay_sample_rate": 20, "session_sample_rate": 75, "trace_sample_rate": 100, "track_session_across_subdomains": false, "user": [{"key": "id", "value": {"attribute": "data-version", "extractor": {"rc_serialized_type": "regex", "value": "^https://app-.*.datadoghq.com"}, "key": "app.version", "name": "app_version", "path": "application.version", "rc_serialized_type": "dynamic", "selector": "#app-version", "strategy": "js"}}], "version": {"attribute": "data-version", "extractor": {"rc_serialized_type": "regex", "value": "^https://app-.*.datadoghq.com"}, "key": "app.version", "name": "app_version", "path": "application.version", "rc_serialized_type": "dynamic", "selector": "#app-version", "strategy": "js"}}}, "id": "abc12345-1234-5678-abcd-ef1234567890", "type": "rum_sdk_config"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/rum_retention_filters.feature b/test-runner-data/features/v2/rum_retention_filters.feature new file mode 100644 index 0000000000..9c41dcedc0 --- /dev/null +++ b/test-runner-data/features/v2/rum_retention_filters.feature @@ -0,0 +1,182 @@ +@endpoint(rum-retention-filters) @endpoint(rum-retention-filters-v2) +Feature: Rum Retention Filters + Manage retention filters through [Manage + Applications](https://app.datadoghq.com/rum/list) of RUM for your + organization. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "RumRetentionFilters" API + + @team:DataDog/rum-backend + Scenario: Create a RUM retention filter returns "Bad Request" response + Given new "CreateRetentionFilter" request + And request contains "app_id" parameter with value "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + And body with value {"data":{"type":"invalid_type","attributes":{"name":"Test creating retention filter","event_type":"session","query":"","sample_rate":25,"enabled":true}}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/rum-backend + Scenario: Create a RUM retention filter returns "Created" response + Given new "CreateRetentionFilter" request + And request contains "app_id" parameter with value "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + And body with value {"data":{"type":"retention_filters","attributes":{"name":"Test creating retention filter","event_type":"session","query":"custom_query","sample_rate":50,"enabled":true}}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "retention_filters" + And the response "data.attributes.event_type" is equal to "session" + And the response "data.attributes.name" is equal to "Test creating retention filter" + And the response "data.attributes.enabled" is equal to true + And the response "data.attributes.query" is equal to "custom_query" + And the response "data.attributes.sample_rate" is equal to 50 + + @replay-only @team:DataDog/rum-backend + Scenario: Delete a RUM retention filter returns "No Content" response + Given new "DeleteRetentionFilter" request + And request contains "app_id" parameter with value "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + And request contains "rf_id" parameter with value "fe34ee09-14cf-4976-9362-08044c0dea80" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/rum-backend + Scenario: Delete a RUM retention filter returns "Not Found" response + Given new "DeleteRetentionFilter" request + And request contains "app_id" parameter with value "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + And request contains "rf_id" parameter with value "{{ unique }}" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/rum-backend + Scenario: Get a RUM retention filter returns "Not Found" response + Given new "GetRetentionFilter" request + And request contains "app_id" parameter with value "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + And request contains "rf_id" parameter with value "{{ unique }}" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/rum-backend + Scenario: Get a RUM retention filter returns "OK" response + Given new "GetRetentionFilter" request + And request contains "app_id" parameter with value "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + And request contains "rf_id" parameter with value "4b95d361-f65d-4515-9824-c9aaeba5ac2a" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "4b95d361-f65d-4515-9824-c9aaeba5ac2a" + And the response "data.type" is equal to "retention_filters" + And the response "data.attributes.event_type" is equal to "session" + And the response "data.attributes.name" is equal to "Test retention filter for session" + And the response "data.attributes.enabled" is equal to true + And the response "data.attributes.query" is equal to "custom_query" + And the response "data.attributes.sample_rate" is equal to 25 + + @generated @skip @team:DataDog/rum-backend + Scenario: Get a permanent RUM retention filter returns "Not Found" response + Given new "GetPermanentRetentionFilter" request + And request contains "app_id" parameter from "REPLACE.ME" + And request contains "permanent_rf_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/rum-backend + Scenario: Get a permanent RUM retention filter returns "OK" response + Given new "GetPermanentRetentionFilter" request + And request contains "app_id" parameter from "REPLACE.ME" + And request contains "permanent_rf_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/rum-backend + Scenario: Get all RUM retention filters returns "OK" response + Given new "ListRetentionFilters" request + And request contains "app_id" parameter with value "1d4b9c34-7ac4-423a-91cf-9902d926e9b3" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 3 + + @generated @skip @team:DataDog/rum-backend + Scenario: Get all permanent RUM retention filters returns "OK" response + Given new "ListPermanentRetentionFilters" request + And request contains "app_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/rum-backend + Scenario: Order RUM retention filters returns "Bad Request" response + Given new "OrderRetentionFilters" request + And request contains "app_id" parameter with value "1d4b9c34-7ac4-423a-91cf-9902d926e9b3" + And body with value {"data":[{"type":"retention_filters","id":"325631eb-94c9-49c0-93f9-ab7e4fd24529"}]} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/rum-backend + Scenario: Order RUM retention filters returns "Ordered" response + Given new "OrderRetentionFilters" request + And request contains "app_id" parameter with value "1d4b9c34-7ac4-423a-91cf-9902d926e9b3" + And body with value {"data":[{"type":"retention_filters","id":"325631eb-94c9-49c0-93f9-ab7e4fd24529"},{"type":"retention_filters","id":"42d89430-5b80-426e-a44b-ba3b417ece25"},{"type":"retention_filters","id":"bff0bc34-99e9-4c16-adce-f47e71948c23"}]} + When the request is sent + Then the response status is 200 Ordered + And the response "data[0].id" is equal to "325631eb-94c9-49c0-93f9-ab7e4fd24529" + And the response "data[1].id" is equal to "42d89430-5b80-426e-a44b-ba3b417ece25" + And the response "data[2].id" is equal to "bff0bc34-99e9-4c16-adce-f47e71948c23" + + @team:DataDog/rum-backend + Scenario: Update a RUM retention filter returns "Bad Request" response + Given new "UpdateRetentionFilter" request + And request contains "app_id" parameter with value "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + And request contains "rf_id" parameter with value "{{ unique }}" + And body with value {"data":{"id":"{{ unique }}", "type":"invalid_type","attributes":{"name":"Test updating retention filter","event_type":"view","query":"","sample_rate":100,"enabled":true}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/rum-backend + Scenario: Update a RUM retention filter returns "Not Found" response + Given new "UpdateRetentionFilter" request + And request contains "app_id" parameter with value "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + And request contains "rf_id" parameter with value "{{ unique }}" + And body with value {"data":{"id":"{{ unique }}","type":"retention_filters","attributes":{"name":"Test updating retention filter","event_type":"view","query":"","sample_rate":100,"enabled":true}}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/rum-backend + Scenario: Update a RUM retention filter returns "Updated" response + Given new "UpdateRetentionFilter" request + And request contains "app_id" parameter with value "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + And request contains "rf_id" parameter with value "4b95d361-f65d-4515-9824-c9aaeba5ac2a" + And body with value {"data":{"id":"4b95d361-f65d-4515-9824-c9aaeba5ac2a","type":"retention_filters","attributes":{"name":"Test updating retention filter","event_type":"view","query":"view_query","sample_rate":100,"enabled":true}}} + When the request is sent + Then the response status is 200 Updated + And the response "data.id" is equal to "4b95d361-f65d-4515-9824-c9aaeba5ac2a" + And the response "data.type" is equal to "retention_filters" + And the response "data.attributes.event_type" is equal to "view" + And the response "data.attributes.name" is equal to "Test updating retention filter" + And the response "data.attributes.enabled" is equal to true + And the response "data.attributes.query" is equal to "view_query" + And the response "data.attributes.sample_rate" is equal to 100 + + @generated @skip @team:DataDog/rum-backend + Scenario: Update a permanent RUM retention filter returns "Bad Request" response + Given new "UpdatePermanentRetentionFilter" request + And request contains "app_id" parameter from "REPLACE.ME" + And request contains "permanent_rf_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cross_product_sampling": {"trace_enabled": true, "trace_sample_rate": 25.0}}, "id": "synthetics_sessions", "type": "permanent_retention_filters"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/rum-backend + Scenario: Update a permanent RUM retention filter returns "Not Found" response + Given new "UpdatePermanentRetentionFilter" request + And request contains "app_id" parameter from "REPLACE.ME" + And request contains "permanent_rf_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cross_product_sampling": {"trace_enabled": true, "trace_sample_rate": 25.0}}, "id": "synthetics_sessions", "type": "permanent_retention_filters"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/rum-backend + Scenario: Update a permanent RUM retention filter returns "Updated" response + Given new "UpdatePermanentRetentionFilter" request + And request contains "app_id" parameter from "REPLACE.ME" + And request contains "permanent_rf_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"cross_product_sampling": {"trace_enabled": true, "trace_sample_rate": 25.0}}, "id": "synthetics_sessions", "type": "permanent_retention_filters"}} + When the request is sent + Then the response status is 200 Updated diff --git a/test-runner-data/features/v2/scorecards.feature b/test-runner-data/features/v2/scorecards.feature new file mode 100644 index 0000000000..e932599c67 --- /dev/null +++ b/test-runner-data/features/v2/scorecards.feature @@ -0,0 +1,303 @@ +@endpoint(scorecards) @endpoint(scorecards-v2) +Feature: Scorecards + API to create and update scorecard rules and outcomes. See + [Scorecards](https://docs.datadoghq.com/service_catalog/scorecards) for + more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Scorecards" API + + @generated @skip @team:DataDog/service-catalog + Scenario: Create a new campaign returns "Bad Request" response + Given new "CreateScorecardCampaign" request + And body with value {"data": {"attributes": {"description": "Campaign to improve security posture for Q1 2024.", "due_date": "2024-03-31T23:59:59Z", "entity_scope": "kind:service AND team:platform", "guidance": "Please ensure all services pass the security requirements.", "key": "q1-security-2024", "name": "Q1 Security Campaign", "owner_id": "550e8400-e29b-41d4-a716-446655440000", "rule_ids": ["q8MQxk8TCqrHnWkx", "r9NRyl9UDrsIoXly"], "start_date": "2024-01-01T00:00:00Z", "status": "in_progress"}, "type": "campaign"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Create a new campaign returns "Created" response + Given new "CreateScorecardCampaign" request + And body with value {"data": {"attributes": {"description": "Campaign to improve security posture for Q1 2024.", "due_date": "2024-03-31T23:59:59Z", "entity_scope": "kind:service AND team:platform", "guidance": "Please ensure all services pass the security requirements.", "key": "q1-security-2024", "name": "Q1 Security Campaign", "owner_id": "550e8400-e29b-41d4-a716-446655440000", "rule_ids": ["q8MQxk8TCqrHnWkx", "r9NRyl9UDrsIoXly"], "start_date": "2024-01-01T00:00:00Z", "status": "in_progress"}, "type": "campaign"}} + When the request is sent + Then the response status is 201 Created + + @team:DataDog/service-catalog + Scenario: Create a new rule returns "Bad Request" response + Given new "CreateScorecardRule" request + And body with value {"data": {"attributes": {"enabled": true, "level": 2, "name": "Team Defined", "scorecard_id": "NOT.FOUND"}, "type": "rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/service-catalog + Scenario: Create a new rule returns "Created" response + Given new "CreateScorecardRule" request + And body with value {"data": {"attributes": {"enabled": true, "name": "{{unique}}", "scorecard_name": "Observability Best Practices"}, "type": "rule"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.scorecard_name" is equal to "Observability Best Practices" + And the response "data.relationships.scorecard.data" has field "id" + + @team:DataDog/service-catalog + Scenario: Create outcomes batch returns "Bad Request" response + Given there is a valid "create_scorecard_rule" in the system + And operation "CreateScorecardOutcomesBatch" enabled + And new "CreateScorecardOutcomesBatch" request + And body with value {"data": {"attributes": {"results": [{"remarks": "See: Services", "rule_id": "{{ create_scorecard_rule.data.id }}", "state": "pass", "service_name": ""}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/service-catalog + Scenario: Create outcomes batch returns "OK" response + Given there is a valid "create_scorecard_rule" in the system + And operation "CreateScorecardOutcomesBatch" enabled + And new "CreateScorecardOutcomesBatch" request + And body with value {"data": {"attributes": {"results": [{"remarks": "See: Services", "rule_id": "{{ create_scorecard_rule.data.id }}", "service_name": "my-service", "state": "pass"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a campaign returns "Bad Request" response + Given new "DeleteScorecardCampaign" request + And request contains "campaign_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a campaign returns "No Content" response + Given new "DeleteScorecardCampaign" request + And request contains "campaign_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a campaign returns "Not Found" response + Given new "DeleteScorecardCampaign" request + And request contains "campaign_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a rule returns "Bad Request" response + Given new "DeleteScorecardRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/service-catalog + Scenario: Delete a rule returns "Not Found" response + Given new "DeleteScorecardRule" request + And request contains "rule_id" parameter with value "2a4f524e-168a-429d-bb75-7b1ffeab0cbb" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/service-catalog + Scenario: Delete a rule returns "OK" response + Given there is a valid "create_scorecard_rule" in the system + And new "DeleteScorecardRule" request + And request contains "rule_id" parameter from "create_scorecard_rule.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/service-catalog + Scenario: Get a campaign returns "Bad Request" response + Given new "GetScorecardCampaign" request + And request contains "campaign_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Get a campaign returns "Not Found" response + Given new "GetScorecardCampaign" request + And request contains "campaign_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/service-catalog + Scenario: Get a campaign returns "OK" response + Given new "GetScorecardCampaign" request + And request contains "campaign_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/service-catalog + Scenario: List all campaigns returns "Bad Request" response + Given new "ListScorecardCampaigns" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: List all campaigns returns "OK" response + Given new "ListScorecardCampaigns" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/service-catalog + Scenario: List all rule outcomes returns "Bad Request" response + Given new "ListScorecardOutcomes" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/service-catalog + Scenario: List all rule outcomes returns "OK" response + Given new "ListScorecardOutcomes" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/service-catalog @with-pagination + Scenario: List all rule outcomes returns "OK" response with pagination + Given new "ListScorecardOutcomes" request + And request contains "page[size]" parameter with value 2 + And request contains "fields[outcome]" parameter with value "state" + And request contains "filter[outcome][service_name]" parameter with value "my-service" + When the request with pagination is sent + Then the response status is 200 OK + And the response has 2 items + + @generated @skip @team:DataDog/service-catalog + Scenario: List all rules returns "Bad Request" response + Given new "ListScorecardRules" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/service-catalog + Scenario: List all rules returns "OK" response + Given new "ListScorecardRules" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/service-catalog @with-pagination + Scenario: List all rules returns "OK" response with pagination + Given new "ListScorecardRules" request + And request contains "page[size]" parameter with value 2 + And request contains "fields[rule]" parameter with value "name" + And request contains "filter[rule][custom]" parameter with value true + When the request with pagination is sent + Then the response status is 200 OK + And the response has 4 items + + @generated @skip @team:DataDog/service-catalog + Scenario: List all scorecards returns "OK" response + Given new "ListScorecards" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/service-catalog + Scenario: List all scores returns "Bad Request" response + Given new "ListScorecardScores" request + And request contains "aggregation" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: List all scores returns "OK" response + Given new "ListScorecardScores" request + And request contains "aggregation" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/service-catalog + Scenario: Update Scorecard outcomes asynchronously returns "Accepted" response + Given there is a valid "create_scorecard_rule" in the system + And new "UpdateScorecardOutcomes" request + And body with value {"data": {"attributes": {"results": [{"rule_id": "{{create_scorecard_rule.data.id}}", "entity_reference": "service:my-service", "remarks": "See: Services", "state": "pass"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 202 Accepted + + @team:DataDog/service-catalog + Scenario: Update Scorecard outcomes asynchronously returns "Bad Request" response + Given there is a valid "create_scorecard_rule" in the system + And new "UpdateScorecardOutcomes" request + And body with value {"data": {"attributes": {"results": [{"rule_id": "{{create_scorecard_rule.data.id}}", "entity_reference": "service:my-service", "state": "INVALID"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 400 Bad Request + And the response "errors" has length 1 + And the response "errors[0]" has field "detail" + + @team:DataDog/service-catalog + Scenario: Update Scorecard outcomes asynchronously returns "Conflict" response + Given new "UpdateScorecardOutcomes" request + And body with value {"data": {"attributes": {"results": [{"rule_id": "INVALID.RULE_ID", "entity_reference": "service:my-service", "remarks": "See: Services", "state": "pass"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 409 Conflict + And the response "errors" has length 1 + + @generated @skip @team:DataDog/service-catalog + Scenario: Update Scorecard outcomes returns "Accepted" response + Given new "UpdateScorecardOutcomes" request + And body with value {"data": {"attributes": {"results": [{"entity_reference": "service:my-service", "remarks": "See: Services", "rule_id": "q8MQxk8TCqrHnWkx", "state": "pass"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/service-catalog + Scenario: Update Scorecard outcomes returns "Bad Request" response + Given new "UpdateScorecardOutcomes" request + And body with value {"data": {"attributes": {"results": [{"entity_reference": "service:my-service", "remarks": "See: Services", "rule_id": "q8MQxk8TCqrHnWkx", "state": "pass"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Update Scorecard outcomes returns "Conflict" response + Given new "UpdateScorecardOutcomes" request + And body with value {"data": {"attributes": {"results": [{"entity_reference": "service:my-service", "remarks": "See: Services", "rule_id": "q8MQxk8TCqrHnWkx", "state": "pass"}]}, "type": "batched-outcome"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/service-catalog + Scenario: Update a campaign returns "Bad Request" response + Given new "UpdateScorecardCampaign" request + And request contains "campaign_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Campaign to improve security posture for Q1 2024.", "due_date": "2024-03-31T23:59:59Z", "entity_scope": "kind:service AND team:platform", "guidance": "Please ensure all services pass the security requirements.", "key": "q1-security-2024", "name": "Q1 Security Campaign", "owner_id": "550e8400-e29b-41d4-a716-446655440000", "rule_ids": ["q8MQxk8TCqrHnWkx", "r9NRyl9UDrsIoXly"], "start_date": "2024-01-01T00:00:00Z", "status": "in_progress"}, "type": "campaign"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Update a campaign returns "Not Found" response + Given new "UpdateScorecardCampaign" request + And request contains "campaign_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Campaign to improve security posture for Q1 2024.", "due_date": "2024-03-31T23:59:59Z", "entity_scope": "kind:service AND team:platform", "guidance": "Please ensure all services pass the security requirements.", "key": "q1-security-2024", "name": "Q1 Security Campaign", "owner_id": "550e8400-e29b-41d4-a716-446655440000", "rule_ids": ["q8MQxk8TCqrHnWkx", "r9NRyl9UDrsIoXly"], "start_date": "2024-01-01T00:00:00Z", "status": "in_progress"}, "type": "campaign"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/service-catalog + Scenario: Update a campaign returns "OK" response + Given new "UpdateScorecardCampaign" request + And request contains "campaign_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Campaign to improve security posture for Q1 2024.", "due_date": "2024-03-31T23:59:59Z", "entity_scope": "kind:service AND team:platform", "guidance": "Please ensure all services pass the security requirements.", "key": "q1-security-2024", "name": "Q1 Security Campaign", "owner_id": "550e8400-e29b-41d4-a716-446655440000", "rule_ids": ["q8MQxk8TCqrHnWkx", "r9NRyl9UDrsIoXly"], "start_date": "2024-01-01T00:00:00Z", "status": "in_progress"}, "type": "campaign"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/service-catalog + Scenario: Update an existing rule returns "Rule updated successfully" response + Given there is a valid "create_scorecard_rule" in the system + And new "UpdateScorecardRule" request + And request contains "rule_id" parameter from "create_scorecard_rule.data.id" + And body with value {"data": {"type": "rule", "attributes": {"enabled": true, "name": "{{create_scorecard_rule.data.attributes.name}}", "scorecard_name": "{{create_scorecard_rule.data.attributes.scorecard_name}}", "description": "Updated description via test"}}} + When the request is sent + Then the response status is 200 Rule updated successfully + + @team:DataDog/service-catalog + Scenario: Update an existing scorecard rule returns "Bad Request" response + Given there is a valid "create_scorecard_rule" in the system + And new "UpdateScorecardRule" request + And request contains "rule_id" parameter from "create_scorecard_rule.data.id" + And body with value {"data": {"attributes": {"enabled": true, "level": 2, "name": "Team Defined", "scorecard_id": "NOT.FOUND"}, "type": "rule"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/service-catalog + Scenario: Update an existing scorecard rule returns "Not Found" response + Given new "UpdateScorecardRule" request + And request contains "rule_id" parameter with value "REPLACE.ME" + And body with value {"data": {"attributes": {"enabled": true, "level": 2, "name": "Team Defined", "scorecard_name": "Deployments automated via Deployment Trains"}, "type": "rule"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/service-catalog + Scenario: Update an existing scorecard rule returns "Rule updated successfully" response + Given new "UpdateScorecardRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"enabled": true, "level": 2, "name": "Team Defined", "scope_query": "kind:service", "scorecard_name": "Deployments automated via Deployment Trains"}, "type": "rule"}} + When the request is sent + Then the response status is 200 Rule updated successfully diff --git a/test-runner-data/features/v2/seats.feature b/test-runner-data/features/v2/seats.feature new file mode 100644 index 0000000000..4c5767750a --- /dev/null +++ b/test-runner-data/features/v2/seats.feature @@ -0,0 +1,108 @@ +@endpoint(seats) @endpoint(seats-v2) +Feature: Seats + The seats API allows you to view, assign, and unassign seats for your + organization. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Seats" API + + @generated @skip @team:DataDog/billing-experience + Scenario: Assign seats to users returns "Bad Request" response + Given new "AssignSeatsUser" request + And body with value {"data": {"attributes": {"product_code": "", "user_uuids": [""]}, "type": "seat-assignments"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @skip-validation @team:DataDog/billing-experience + Scenario: Assign seats to users returns "Created" response + Given there is a valid "user" in the system + And new "AssignSeatsUser" request + And body with value {"data": {"type": "seat-assignments", "attributes": {"product_code": "incident_response", "user_uuids": ["{{ user.data.id }}"]}}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "seat-assignments" + And the response "data.attributes.product_code" is equal to "incident_response" + And the response "data.attributes.assigned_ids[0]" is equal to "{{ user.data.id }}" + + @skip-validation @team:DataDog/billing-experience + Scenario: Assign seats to users returns "Unprocessable Entity" response + Given new "AssignSeatsUser" request + And body with value {"data": {"attributes": {"product_code": "", "user_uuids": [""]}, "type": "seat-assignments"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @team:DataDog/billing-experience + Scenario: Assign seats to users returns "Unprocessable Entity" response when product_code is empty + Given there is a valid "user" in the system + And new "AssignSeatsUser" request + And body with value {"data": {"type": "seat-assignments", "attributes": {"product_code": "", "user_uuids": ["{{ user.data.id }}"]}}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @team:DataDog/billing-experience + Scenario: Assign seats to users returns "Unprocessable Entity" response when user_uuids is empty + Given new "AssignSeatsUser" request + And body with value {"data": {"type": "seat-assignments", "attributes": {"product_code": "incident_response", "user_uuids": []}}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/billing-experience + Scenario: Get users with seats returns "Bad Request" response + Given new "GetSeatsUsers" request + And request contains "product_code" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-experience + Scenario: Get users with seats returns "OK" response + Given new "GetSeatsUsers" request + And request contains "product_code" parameter with value "incident_response" + And request contains "page[limit]" parameter with value 100 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-experience + Scenario: Get users with seats returns "Unprocessable Entity" response + Given new "GetSeatsUsers" request + And request contains "product_code" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/billing-experience + Scenario: Unassign seats from users returns "Bad Request" response + Given new "UnassignSeatsUser" request + And body with value {"data": {"attributes": {"product_code": "", "user_uuids": [""]}, "type": "seat-assignments"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @skip-validation @team:DataDog/billing-experience + Scenario: Unassign seats from users returns "No Content" response + Given there is a valid "user" in the system + And new "UnassignSeatsUser" request + And body with value {"data": {"type": "seat-assignments", "attributes": {"product_code": "incident_response", "user_uuids": ["{{ user.data.id }}"]}}} + When the request is sent + Then the response status is 204 No Content + + @skip-validation @team:DataDog/billing-experience + Scenario: Unassign seats from users returns "Unprocessable Entity" response + Given new "UnassignSeatsUser" request + And body with value {"data": {"attributes": {"product_code": "", "user_uuids": [""]}, "type": "seat-assignments"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @team:DataDog/billing-experience + Scenario: Unassign seats from users returns "Unprocessable Entity" response when product_code is empty + Given there is a valid "user" in the system + And new "UnassignSeatsUser" request + And body with value {"data": {"type": "seat-assignments", "attributes": {"product_code": "", "user_uuids": ["{{ user.data.id }}"]}}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @team:DataDog/billing-experience + Scenario: Unassign seats from users returns "Unprocessable Entity" response when user_uuids is empty + Given new "UnassignSeatsUser" request + And body with value {"data": {"type": "seat-assignments", "attributes": {"product_code": "incident_response", "user_uuids": []}}} + When the request is sent + Then the response status is 422 Unprocessable Entity diff --git a/test-runner-data/features/v2/security_monitoring.feature b/test-runner-data/features/v2/security_monitoring.feature new file mode 100644 index 0000000000..14f3d34a11 --- /dev/null +++ b/test-runner-data/features/v2/security_monitoring.feature @@ -0,0 +1,3641 @@ +@endpoint(security-monitoring) @endpoint(security-monitoring-v2) +Feature: Security Monitoring + Create and manage your security rules, signals, filters, and more. See the + [Datadog Security page](https://docs.datadoghq.com/security/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "SecurityMonitoring" API + + @generated @skip @team:DataDog/cloud-siem + Scenario: Activate an entity context sync integration returns "Bad Request" response + Given operation "ActivateIntegration" enabled + And new "ActivateIntegration" request + And request contains "integration_type" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"domain": "default", "name": "My Entra ID Integration", "settings": {"setting1": "value1"}}, "type": "activate_entra_id_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Activate an entity context sync integration returns "Not Found" response + Given operation "ActivateIntegration" enabled + And new "ActivateIntegration" request + And request contains "integration_type" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"domain": "default", "name": "My Entra ID Integration", "settings": {"setting1": "value1"}}, "type": "activate_entra_id_request"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Activate an entity context sync integration returns "OK" response + Given operation "ActivateIntegration" enabled + And new "ActivateIntegration" request + And request contains "integration_type" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"domain": "default", "name": "My Entra ID Integration", "settings": {"setting1": "value1"}}, "type": "activate_entra_id_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Activate content pack returns "Accepted" response + Given operation "ActivateContentPack" enabled + And new "ActivateContentPack" request + And request contains "content_pack_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/cloud-siem + Scenario: Activate content pack returns "Not Found" response + Given operation "ActivateContentPack" enabled + And new "ActivateContentPack" request + And request contains "content_pack_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Analyze code returns "Bad Request" response + Given operation "CreateStaticAnalysisServerAnalysis" enabled + And new "CreateStaticAnalysisServerAnalysis" request + And body with value {"data": {"attributes": {"code": "aW1wb3J0IHN5cw==", "file_encoding": "utf-8", "filename": "test.py", "language": "python", "rules": [{"category": "BEST_PRACTICES", "checksum": "abc123def456", "code": "ZnVuY3Rpb24gdmlzaXQobm9kZSkge30=", "entity_checked": null, "id": "python-best-practices/no-exit", "language": "python", "regex": null, "severity": "WARNING", "tree_sitter_query": "KGNhbGwgbmFtZTogKGF0dHJpYnV0ZSkpQHZhbA==", "type": "TREE_SITTER_QUERY"}]}, "type": "analysis_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Analyze code returns "OK" response + Given operation "CreateStaticAnalysisServerAnalysis" enabled + And new "CreateStaticAnalysisServerAnalysis" request + And body with value {"data": {"attributes": {"code": "aW1wb3J0IHN5cw==", "file_encoding": "utf-8", "filename": "test.py", "language": "python", "rules": [{"category": "BEST_PRACTICES", "checksum": "abc123def456", "code": "ZnVuY3Rpb24gdmlzaXQobm9kZSkge30=", "entity_checked": null, "id": "python-best-practices/no-exit", "language": "python", "regex": null, "severity": "WARNING", "tree_sitter_query": "KGNhbGwgbmFtZTogKGF0dHJpYnV0ZSkpQHZhbA==", "type": "TREE_SITTER_QUERY"}]}, "type": "analysis_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-investigation + Scenario: Assign or unassign security findings returns "Accepted" response + Given operation "UpdateFindingsAssignee" enabled + And new "UpdateFindingsAssignee" request + And body with value {"data": {"attributes": {"assignee_id": "f315bdaf-9ee7-4808-a9c1-99c15bf0f4d0"}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "assignee"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/k9-investigation + Scenario: Assign or unassign security findings returns "Bad Request" response + Given operation "UpdateFindingsAssignee" enabled + And new "UpdateFindingsAssignee" request + And body with value {"data": {"attributes": {"assignee_id": "f315bdaf-9ee7-4808-a9c1-99c15bf0f4d0"}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "assignee"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-investigation + Scenario: Assign or unassign security findings returns "Not Found" response + Given operation "UpdateFindingsAssignee" enabled + And new "UpdateFindingsAssignee" request + And body with value {"data": {"attributes": {"assignee_id": "f315bdaf-9ee7-4808-a9c1-99c15bf0f4d0"}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "assignee"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-investigation + Scenario: Attach security finding to a Jira issue returns "OK" response + Given new "AttachJiraIssue" request + And body with value {"data": {"attributes": {"jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476"}, "relationships": {"findings": {"data": [{"id": "OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "jira_issues"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.status_group" is equal to "SG_OPEN" + And the response "data.attributes.insights" has item with field "resource_id" with value "OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=" + And the response "data.attributes.jira_issue.result.issue_url" is equal to "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + + @team:DataDog/k9-investigation + Scenario: Attach security finding to a case returns "OK" response + Given new "AttachCase" request + And request contains "case_id" parameter with value "7d16945b-baf8-411e-ab2a-20fe43af1ea3" + And body with value {"data": {"id": "7d16945b-baf8-411e-ab2a-20fe43af1ea3", "relationships": {"findings": {"data": [{"id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", "type": "findings"}]}}, "type": "cases"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "7d16945b-baf8-411e-ab2a-20fe43af1ea3" + And the response "data.attributes.status_group" is equal to "SG_OPEN" + And the response "data.attributes.insights" has item with field "resource_id" with value "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=" + + @team:DataDog/k9-investigation + Scenario: Attach security findings to a Jira issue returns "Bad Request" response + Given new "AttachJiraIssue" request + And body with value {"data": {"attributes": {"jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476"}, "relationships": {"findings": {"data": []}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "jira_issues"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-investigation + Scenario: Attach security findings to a Jira issue returns "Not Found" response + Given new "AttachJiraIssue" request + And body with value {"data": {"attributes": {"jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476"}, "relationships": {"findings": {"data": [{"id": "wrong-finding-id", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "jira_issues"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-investigation + Scenario: Attach security findings to a Jira issue returns "OK" response + Given new "AttachJiraIssue" request + And body with value {"data": {"attributes": {"jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476"}, "relationships": {"findings": {"data": [{"id": "OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=", "type": "findings"}, {"id": "MTNjN2ZmYWMzMDIxYmU1ZDFiZDRjNWUwN2I1NzVmY2F-YTA3MzllMTUzNWM3NmEyZjdiNzEzOWM5YmViZTMzOGM=", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "jira_issues"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.status_group" is equal to "SG_OPEN" + And the response "data.attributes.insights" has item with field "resource_id" with value "OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=" + And the response "data.attributes.insights" has item with field "resource_id" with value "MTNjN2ZmYWMzMDIxYmU1ZDFiZDRjNWUwN2I1NzVmY2F-YTA3MzllMTUzNWM3NmEyZjdiNzEzOWM5YmViZTMzOGM=" + And the response "data.attributes.jira_issue.result.issue_url" is equal to "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + + @generated @skip @team:DataDog/k9-investigation + Scenario: Attach security findings to a Linear issue returns "Bad Request" response + Given new "AttachLinearIssue" request + And body with value {"data": {"attributes": {"linear_issue_url": "https://linear.app/your-workspace/issue/ENG-123"}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "linear_issues"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-investigation + Scenario: Attach security findings to a Linear issue returns "Not Found" response + Given new "AttachLinearIssue" request + And body with value {"data": {"attributes": {"linear_issue_url": "https://linear.app/your-workspace/issue/ENG-123"}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "linear_issues"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-investigation + Scenario: Attach security findings to a Linear issue returns "OK" response + Given new "AttachLinearIssue" request + And body with value {"data": {"attributes": {"linear_issue_url": "https://linear.app/your-workspace/issue/ENG-123"}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "linear_issues"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-investigation + Scenario: Attach security findings to a ServiceNow ticket returns "Bad Request" response + Given new "AttachServiceNowTicket" request + And body with value {"data": {"attributes": {"servicenow_ticket_url": "https://example.service-now.com/now/nav/ui/classic/params/target/incident.do?sys_id=abcdef0123456789abcdef0123456789"}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "servicenow_tickets"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-investigation + Scenario: Attach security findings to a ServiceNow ticket returns "Not Found" response + Given new "AttachServiceNowTicket" request + And body with value {"data": {"attributes": {"servicenow_ticket_url": "https://example.service-now.com/now/nav/ui/classic/params/target/incident.do?sys_id=abcdef0123456789abcdef0123456789"}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "servicenow_tickets"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-investigation + Scenario: Attach security findings to a ServiceNow ticket returns "OK" response + Given new "AttachServiceNowTicket" request + And body with value {"data": {"attributes": {"servicenow_ticket_url": "https://example.service-now.com/now/nav/ui/classic/params/target/incident.do?sys_id=abcdef0123456789abcdef0123456789"}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "servicenow_tickets"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-investigation + Scenario: Attach security findings to a case returns "Bad Request" response + Given new "AttachCase" request + And request contains "case_id" parameter with value "7d16945b-baf8-411e-ab2a-20fe43af1ea3" + And body with value {"data": {"id": "7d16945b-baf8-411e-ab2a-20fe43af1ea3", "relationships": {"findings": {"data": []}}, "type": "cases"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-investigation + Scenario: Attach security findings to a case returns "Not Found" response + Given new "AttachCase" request + And request contains "case_id" parameter with value "wrong-case-id" + And body with value {"data": {"id": "wrong-case-id", "relationships": {"findings": {"data": [{"id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", "type": "findings"}]}}, "type": "cases"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-investigation + Scenario: Attach security findings to a case returns "OK" response + Given new "AttachCase" request + And request contains "case_id" parameter with value "7d16945b-baf8-411e-ab2a-20fe43af1ea3" + And body with value {"data": {"id": "7d16945b-baf8-411e-ab2a-20fe43af1ea3", "relationships": {"findings": {"data": [{"id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", "type": "findings"}, {"id": "MmUzMzZkODQ2YTI3NDU0OTk4NDk3NzhkOTY5YjU2Zjh-YWJjZGI1ODI4OTYzNWM3ZmUwZTBlOWRkYTRiMGUyOGQ=", "type": "findings"}]}}, "type": "cases"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "7d16945b-baf8-411e-ab2a-20fe43af1ea3" + And the response "data.attributes.status_group" is equal to "SG_OPEN" + And the response "data.attributes.insights" has item with field "resource_id" with value "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=" + And the response "data.attributes.insights" has item with field "resource_id" with value "MmUzMzZkODQ2YTI3NDU0OTk4NDk3NzhkOTY5YjU2Zjh-YWJjZGI1ODI4OTYzNWM3ZmUwZTBlOWRkYTRiMGUyOGQ=" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk convert rules to Terraform returns "Bad Request" response + Given new "BulkConvertExistingSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["def-000-u7q", "def-000-7dd"]}, "id": "convert_bulk", "type": "security_monitoring_rules_convert_bulk"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk convert rules to Terraform returns "Not Found" response + Given new "BulkConvertExistingSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["def-000-u7q", "def-000-7dd"]}, "id": "convert_bulk", "type": "security_monitoring_rules_convert_bulk"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk convert rules to Terraform returns "OK" response + Given new "BulkConvertExistingSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["def-000-u7q", "def-000-7dd"]}, "id": "convert_bulk", "type": "security_monitoring_rules_convert_bulk"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk delete security monitoring rules returns "Bad Request" response + Given new "BulkDeleteSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["abc-000-u7q", "abc-000-7dd"]}, "id": "bulk_delete", "type": "bulk_delete_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk delete security monitoring rules returns "Not Found" response + Given new "BulkDeleteSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["abc-000-u7q", "abc-000-7dd"]}, "id": "bulk_delete", "type": "bulk_delete_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk delete security monitoring rules returns "OK" response + Given new "BulkDeleteSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["abc-000-u7q", "abc-000-7dd"]}, "id": "bulk_delete", "type": "bulk_delete_rules"}} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/cloud-siem + Scenario: Bulk export security monitoring rules returns "Bad Request" response + Given new "BulkExportSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": []}, "type": "security_monitoring_rules_bulk_export"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/cloud-siem + Scenario: Bulk export security monitoring rules returns "Not Found" response + Given new "BulkExportSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["non-existent-rule-id"]}, "type": "security_monitoring_rules_bulk_export"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Bulk export security monitoring rules returns "OK" response + Given there is a valid "security_rule" in the system + And new "BulkExportSecurityMonitoringRules" request + And body with value {"data": {"attributes": {"ruleIds": ["{{ security_rule.id }}"]}, "type": "security_monitoring_rules_bulk_export"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk subscribe to sample log generation returns "Bad Request" response + Given operation "BulkCreateSampleLogGenerationSubscriptions" enabled + And new "BulkCreateSampleLogGenerationSubscriptions" request + And body with value {"data": {"attributes": {"content_pack_ids": ["aws-cloudtrail"], "duration": "3d"}, "type": "bulk_subscription_requests"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk subscribe to sample log generation returns "OK" response + Given operation "BulkCreateSampleLogGenerationSubscriptions" enabled + And new "BulkCreateSampleLogGenerationSubscriptions" request + And body with value {"data": {"attributes": {"content_pack_ids": ["aws-cloudtrail"], "duration": "3d"}, "type": "bulk_subscription_requests"}} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/cloud-siem + Scenario: Bulk update security signals returns "Bad Request" response + Given new "BulkEditSecurityMonitoringSignals" request + And body with value {"data": [{"attributes": {"archive_reason": "none", "assignee": {"uuid": "773b045d-ccf8-4808-bd3b-955ef6a8c940"}, "state": "open"}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/cloud-siem + Scenario: Bulk update security signals returns "OK" response + Given new "BulkEditSecurityMonitoringSignals" request + And body with value {"data": [{"attributes": {"archive_reason": "none", "assignee": {"uuid": "773b045d-ccf8-4808-bd3b-955ef6a8c940"}, "state": "open"}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/cloud-siem + Scenario: Bulk update triage assignee of security signals returns "Bad Request" response + Given operation "BulkEditSecurityMonitoringSignalsAssignee" enabled + And new "BulkEditSecurityMonitoringSignalsAssignee" request + And body with value {"data": [{"attributes": {}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk update triage assignee of security signals returns "OK" response + Given new "BulkEditSecurityMonitoringSignalsAssignee" request + And body with value {"data": [{"attributes": {"assignee": "773b045d-ccf8-4808-bd3b-955ef6a8c940"}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/cloud-siem + Scenario: Bulk update triage state of security signals returns "Bad Request" response + Given operation "BulkEditSecurityMonitoringSignalsState" enabled + And new "BulkEditSecurityMonitoringSignalsState" request + And body with value {"data": [{"attributes": {}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Bulk update triage state of security signals returns "OK" response + Given new "BulkEditSecurityMonitoringSignalsState" request + And body with value {"data": [{"attributes": {"archive_reason": "none", "state": "open"}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-siem + Scenario: Cancel a historical job returns "Bad Request" response + Given operation "CancelHistoricalJob" enabled + And new "CancelHistoricalJob" request + And request contains "job_id" parameter with value "inva-lid" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Cancel a historical job returns "Conflict" response + Given operation "CancelHistoricalJob" enabled + And new "CancelHistoricalJob" request + And request contains "job_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/cloud-siem + Scenario: Cancel a historical job returns "Not Found" response + Given operation "CancelHistoricalJob" enabled + And new "CancelHistoricalJob" request + And request contains "job_id" parameter with value "8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Cancel a historical job returns "OK" response + Given operation "CancelHistoricalJob" enabled + And operation "RunHistoricalJob" enabled + And new "CancelHistoricalJob" request + And there is a valid "historical_job" in the system + And request contains "job_id" parameter from "historical_job.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/cloud-siem + Scenario: Change the related incidents of a security signal returns "Bad Request" response + Given new "EditSecurityMonitoringSignalIncidents" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"incident_ids": [2066]}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Change the related incidents of a security signal returns "Not Found" response + Given new "EditSecurityMonitoringSignalIncidents" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"incident_ids": [2066]}}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-siem + Scenario: Change the related incidents of a security signal returns "OK" response + Given new "EditSecurityMonitoringSignalIncidents" request + And request contains "signal_id" parameter with value "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + And body with value {"data": {"attributes": {"incident_ids": [2066]}}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Change the triage state of a security signal returns "Bad Request" response + Given new "EditSecurityMonitoringSignalState" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"archive_reason": "none", "state": "open"}, "type": "signal_metadata"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Change the triage state of a security signal returns "Not Found" response + Given new "EditSecurityMonitoringSignalState" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"archive_reason": "none", "state": "open"}, "type": "signal_metadata"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-siem + Scenario: Change the triage state of a security signal returns "OK" response + Given new "EditSecurityMonitoringSignalState" request + And request contains "signal_id" parameter with value "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + And body with value {"data": {"attributes": {"archive_reason": "none", "state": "open"}}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-siem + Scenario: Convert a job result to a signal returns "Bad Request" response + Given operation "ConvertJobResultToSignal" enabled + And new "ConvertJobResultToSignal" request + And body with value {"data": {"attributes": {"jobResultIds": [""], "notifications": [""], "signalMessage": "A large number of failed login attempts.", "signalSeverity": "critical"}, "type": "historicalDetectionsJobResultSignalConversion"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Convert a job result to a signal returns "Not Found" response + Given operation "ConvertJobResultToSignal" enabled + And new "ConvertJobResultToSignal" request + And body with value {"data": {"attributes": {"jobResultIds": [""], "notifications": [""], "signalMessage": "A large number of failed login attempts.", "signalSeverity": "critical"}, "type": "historicalDetectionsJobResultSignalConversion"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Convert a job result to a signal returns "OK" response + Given operation "ConvertJobResultToSignal" enabled + And new "ConvertJobResultToSignal" request + And body with value {"data": {"attributes": {"jobResultIds": [""], "notifications": [""], "signalMessage": "A large number of failed login attempts.", "signalSeverity": "critical"}, "type": "historicalDetectionsJobResultSignalConversion"}} + When the request is sent + Then the response status is 204 OK + + @skip @team:DataDog/cloud-siem + Scenario: Convert a rule from JSON to Terraform returns "Bad Request" response + Given new "ConvertSecurityMonitoringRuleFromJSONToTerraform" request + And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"metric":""}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection"} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/cloud-siem + Scenario: Convert a rule from JSON to Terraform returns "Not Found" response + Given new "ConvertSecurityMonitoringRuleFromJSONToTerraform" request + And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"metric":""}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection"} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Convert a rule from JSON to Terraform returns "OK" response + Given new "ConvertSecurityMonitoringRuleFromJSONToTerraform" request + And body with value {"name":"_{{ unique_hash }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"metric":""}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection"} + When the request is sent + Then the response status is 200 OK + And the response "terraformContent" is equal to "resource \"datadog_security_monitoring_rule\" \"_{{ unique_hash }}\" {\n\tname = \"_{{ unique_hash }}\"\n\tenabled = true\n\tquery {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\thas_optional_group_by_fields = false\n\t\tdistinct_fields = []\n\t\taggregation = \"count\"\n\t\tname = \"\"\n\t\tdata_source = \"logs\"\n\t}\n\toptions {\n\t\tkeep_alive = 3600\n\t\tmax_signal_duration = 86400\n\t\tdetection_method = \"threshold\"\n\t\tevaluation_window = 900\n\t}\n\tcase {\n\t\tname = \"\"\n\t\tstatus = \"info\"\n\t\tnotifications = []\n\t\tcondition = \"a > 0\"\n\t}\n\tmessage = \"Test rule\"\n\ttags = []\n\thas_extended_title = false\n\ttype = \"log_detection\"\n}\n" + + @skip @team:DataDog/cloud-siem + Scenario: Convert an existing rule from JSON to Terraform returns "Bad Request" response + Given new "ConvertExistingSecurityMonitoringRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/cloud-siem + Scenario: Convert an existing rule from JSON to Terraform returns "Not Found" response + Given new "ConvertExistingSecurityMonitoringRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Convert an existing rule from JSON to Terraform returns "OK" response + Given new "ConvertExistingSecurityMonitoringRule" request + And there is a valid "security_rule_hash" in the system + And request contains "rule_id" parameter from "security_rule_hash.id" + When the request is sent + Then the response status is 200 OK + And the response "terraformContent" is equal to "resource \"datadog_security_monitoring_rule\" \"_{{ unique_hash }}\" {\n\tname = \"_{{ unique_hash }}\"\n\tenabled = true\n\tquery {\n\t\tquery = \"@test:true\"\n\t\tgroup_by_fields = []\n\t\thas_optional_group_by_fields = false\n\t\tdistinct_fields = []\n\t\taggregation = \"count\"\n\t\tname = \"\"\n\t\tdata_source = \"logs\"\n\t}\n\toptions {\n\t\tkeep_alive = 3600\n\t\tmax_signal_duration = 86400\n\t\tdetection_method = \"threshold\"\n\t\tevaluation_window = 900\n\t}\n\tcase {\n\t\tname = \"\"\n\t\tstatus = \"info\"\n\t\tnotifications = []\n\t\tcondition = \"a > 0\"\n\t}\n\tmessage = \"Test rule\"\n\ttags = []\n\thas_extended_title = false\n\ttype = \"log_detection\"\n}\n" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Convert security monitoring resource to Terraform returns "Bad Request" response + Given operation "ConvertSecurityMonitoringTerraformResource" enabled + And new "ConvertSecurityMonitoringTerraformResource" request + And request contains "resource_type" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"resource_json": {"enabled": true, "name": "Custom suppression", "rule_query": "type:log_detection source:cloudtrail", "suppression_query": "env:staging status:low"}}, "id": "abc-123", "type": "convert_resource"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-siem + Scenario: Convert security monitoring resource to Terraform returns "OK" response + Given operation "ConvertSecurityMonitoringTerraformResource" enabled + And new "ConvertSecurityMonitoringTerraformResource" request + And request contains "resource_type" parameter with value "suppressions" + And body with value {"data": {"type": "convert_resource", "id": "abc-123", "attributes": {"resource_json": {"enabled": true, "name": "Example-Security-Monitoring", "rule_query": "source:cloudtrail", "suppression_query": "env:test"}}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.type_name" is equal to "datadog_security_monitoring_suppression" + And the response "data.attributes.resource_id" is equal to "abc-123" + + @team:DataDog/k9-investigation + Scenario: Create Jira issue for security finding returns "Created" response + Given new "CreateJiraIssues" request + And body with value {"data": [{"attributes": {"title": "A title", "description": "A description"}, "relationships": {"findings": {"data": [{"id": "YmNlZmJhYTcyMDU5ZDk0ZDhiNjRmNGI0NDk4MDdiNzN-MDJlMjg0NzNmYzJiODY2MzJkNjU0OTI4NmVhZTUyY2U=", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "jira_issues"}]} + When the request is sent + Then the response status is 201 Created + And the response "data" has length 1 + And the response "data[0]" has field "id" + And the response "data[0].attributes.title" is equal to "A title" + And the response "data[0].attributes.description" is equal to "A description" + And the response "data[0].attributes.type" is equal to "SECURITY" + And the response "data[0].attributes.insights" has length 1 + And the response "data[0].attributes.insights[0].resource_id" is equal to "YmNlZmJhYTcyMDU5ZDk0ZDhiNjRmNGI0NDk4MDdiNzN-MDJlMjg0NzNmYzJiODY2MzJkNjU0OTI4NmVhZTUyY2U=" + And the response "data[0].attributes.insights[0].type" is equal to "SECURITY_FINDING" + And the response "data[0].attributes.jira_issue.status" is equal to "COMPLETED" + + @team:DataDog/k9-investigation + Scenario: Create Jira issue for security findings returns "Created" response + Given new "CreateJiraIssues" request + And body with value {"data": [{"attributes": {"title": "A title", "description": "A description"}, "relationships": {"findings": {"data": [{"id": "a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==", "type": "findings"}, {"id": "eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "jira_issues"}]} + When the request is sent + Then the response status is 201 Created + And the response "data" has length 1 + And the response "data[0]" has field "id" + And the response "data[0].attributes.title" is equal to "A title" + And the response "data[0].attributes.description" is equal to "A description" + And the response "data[0].attributes.type" is equal to "SECURITY" + And the response "data[0].attributes.insights" has length 2 + And the response "data[0].attributes.insights[1].resource_id" is equal to "eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==" + And the response "data[0].attributes.insights[1].type" is equal to "SECURITY_FINDING" + And the response "data[0].attributes.insights[0].resource_id" is equal to "a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==" + And the response "data[0].attributes.insights[0].type" is equal to "SECURITY_FINDING" + And the response "data[0].attributes.jira_issue.status" is equal to "COMPLETED" + + @team:DataDog/k9-investigation + Scenario: Create Jira issues for security findings returns "Bad Request" response + Given new "CreateJiraIssues" request + And body with value {"data": [{"attributes": {}, "relationships": {"findings": {"data": []}, "project": {"data": {"id": "7f198869-c7ef-4afc-97cf-da5cdc13b5c3", "type": "projects"}}}, "type": "jira_issues"}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-investigation + Scenario: Create Jira issues for security findings returns "Created" response + Given new "CreateJiraIssues" request + And body with value {"data": [{"attributes": {"title": "A title", "description": "A description"}, "relationships": {"findings": {"data": [{"id": "eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "jira_issues"}, {"attributes": {"title": "A title", "description": "A description"}, "relationships": {"findings": {"data": [{"id": "a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "jira_issues"}]} + When the request is sent + Then the response status is 201 Created + And the response "data" has length 2 + And the response "data[0]" has field "id" + And the response "data[0].attributes.title" is equal to "A title" + And the response "data[0].attributes.description" is equal to "A description" + And the response "data[0].attributes.type" is equal to "SECURITY" + And the response "data[0].attributes.insights" has length 1 + And the response "data[0].attributes.insights[0].resource_id" is equal to "eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==" + And the response "data[0].attributes.insights[0].type" is equal to "SECURITY_FINDING" + And the response "data[0].attributes.jira_issue.status" is equal to "COMPLETED" + And the response "data[1]" has field "id" + And the response "data[1].attributes.title" is equal to "A title" + And the response "data[1].attributes.description" is equal to "A description" + And the response "data[1].attributes.type" is equal to "SECURITY" + And the response "data[1].attributes.insights" has length 1 + And the response "data[1].attributes.insights[0].resource_id" is equal to "a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==" + And the response "data[1].attributes.insights[0].type" is equal to "SECURITY_FINDING" + And the response "data[1].attributes.jira_issue.status" is equal to "COMPLETED" + + @team:DataDog/k9-investigation + Scenario: Create Jira issues for security findings returns "Not Found" response + Given new "CreateJiraIssues" request + And body with value {"data": [{"attributes": {}, "relationships": {"findings": {"data": [{"id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", "type": "findings"}]}, "project": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "projects"}}}, "type": "jira_issues"}]} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-investigation + Scenario: Create Linear issues for security findings returns "Bad Request" response + Given new "CreateLinearIssues" request + And body with value {"data": [{"attributes": {"assignee_id": "f315bdaf-9ee7-4808-a9c1-99c15bf0f4d0", "description": "A description of the Linear issue.", "label_ids": ["a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d"], "linear_project_id": "d4c3b2a1-6f5e-8b7a-0d9c-2f1e4a3b6c5d", "priority": "NOT_DEFINED", "title": "A title for the Linear issue."}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "linear_issues"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-investigation + Scenario: Create Linear issues for security findings returns "Created" response + Given new "CreateLinearIssues" request + And body with value {"data": [{"attributes": {"assignee_id": "f315bdaf-9ee7-4808-a9c1-99c15bf0f4d0", "description": "A description of the Linear issue.", "label_ids": ["a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d"], "linear_project_id": "d4c3b2a1-6f5e-8b7a-0d9c-2f1e4a3b6c5d", "priority": "NOT_DEFINED", "title": "A title for the Linear issue."}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "linear_issues"}]} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/k9-investigation + Scenario: Create Linear issues for security findings returns "Not Found" response + Given new "CreateLinearIssues" request + And body with value {"data": [{"attributes": {"assignee_id": "f315bdaf-9ee7-4808-a9c1-99c15bf0f4d0", "description": "A description of the Linear issue.", "label_ids": ["a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d"], "linear_project_id": "d4c3b2a1-6f5e-8b7a-0d9c-2f1e4a3b6c5d", "priority": "NOT_DEFINED", "title": "A title for the Linear issue."}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "linear_issues"}]} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-investigation + Scenario: Create ServiceNow tickets for security findings returns "Bad Request" response + Given new "CreateServiceNowTickets" request + And body with value {"data": [{"attributes": {"assignee_id": "f315bdaf-9ee7-4808-a9c1-99c15bf0f4d0", "description": "A description of the ServiceNow ticket.", "priority": "NOT_DEFINED", "title": "A title for the ServiceNow ticket."}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "servicenow_tickets"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-investigation + Scenario: Create ServiceNow tickets for security findings returns "Created" response + Given new "CreateServiceNowTickets" request + And body with value {"data": [{"attributes": {"assignee_id": "f315bdaf-9ee7-4808-a9c1-99c15bf0f4d0", "description": "A description of the ServiceNow ticket.", "priority": "NOT_DEFINED", "title": "A title for the ServiceNow ticket."}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "servicenow_tickets"}]} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/k9-investigation + Scenario: Create ServiceNow tickets for security findings returns "Not Found" response + Given new "CreateServiceNowTickets" request + And body with value {"data": [{"attributes": {"assignee_id": "f315bdaf-9ee7-4808-a9c1-99c15bf0f4d0", "description": "A description of the ServiceNow ticket.", "priority": "NOT_DEFINED", "title": "A title for the ServiceNow ticket."}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}, "project": {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "projects"}}}, "type": "servicenow_tickets"}]} + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a cloud_configuration rule returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"type":"cloud_configuration","name":"{{ unique }}_cloud","isEnabled":false,"cases":[{"status":"info","notifications":["channel"]}],"options":{"complianceRuleOptions":{"resourceType":"gcp_compute_disk","complexRule": false,"regoRule":{"policy":"package datadog\n\nimport data.datadog.output as dd_output\n\nimport future.keywords.contains\nimport future.keywords.if\nimport future.keywords.in\n\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\n\neval(iam_service_account_key) = \"skip\" if {\n\tiam_service_account_key.disabled\n} else = \"pass\" if {\n\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\n} else = \"fail\"\n\n# This part remains unchanged for all rules\nresults contains result if {\n\tsome resource in input.resources[input.main_resource_type]\n\tresult := dd_output.format(resource, eval(resource))\n}\n","resourceTypes":["gcp_compute_disk"]}}},"message":"ddd","tags":["my:tag"],"complianceSignalOptions":{"userActivationStatus":true,"userGroupByFields":["@account_id"]},"filters":[{"action":"require","query":"resource_id:helo*"},{"action":"suppress","query":"control:helo*"}]} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}_cloud" + And the response "type" is equal to "cloud_configuration" + And the response "message" is equal to "ddd" + And the response "options.complianceRuleOptions.resourceType" is equal to "gcp_compute_disk" + + @skip @team:DataDog/cloud-siem + Scenario: Create a critical asset returns "Bad Request" response + Given new "CreateSecurityMonitoringCriticalAsset" request + And body with value {"data": {"type": "critical_assets", "attributes": {"query": "host:test"}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create a critical asset returns "Conflict" response + Given new "CreateSecurityMonitoringCriticalAsset" request + And body with value {"data": {"attributes": {"description": "Production database servers handling PII", "enabled": true, "query": "security:monitoring", "rule_query": "type:(log_detection OR signal_correlation OR workload_security OR application_security) source:cloudtrail", "severity": "increase", "tags": ["team:database", "source:cloudtrail"]}, "type": "critical_assets"}} + When the request is sent + Then the response status is 409 Conflict + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a critical asset returns "OK" response + Given new "CreateSecurityMonitoringCriticalAsset" request + And body with value {"data": {"type": "critical_assets", "attributes": {"query": "host:{{ unique_lower_alnum }}", "rule_query": "type:(log_detection OR signal_correlation OR workload_security OR application_security) source:cloudtrail", "severity": "decrease", "tags": ["team:security", "env:test"]}}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "critical_assets" + And the response "data.attributes.severity" is equal to "decrease" + + @team:DataDog/cloud-siem + Scenario: Create a custom framework returns "Bad Request" response + Given new "CreateCustomFramework" request + And body with value {"data":{"type":"custom_framework","attributes":{"name":"name","handle":"","version":"10","icon_url":"test-url","requirements":[{"name":"requirement","controls":[{"name":"control","rules_id":["def-000-be9"]}]}]}}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @skip-terraform-config @team:DataDog/cloud-siem + Scenario: Create a custom framework returns "Conflict" response + Given there is a valid "custom_framework" in the system + And new "CreateCustomFramework" request + And body with value {"data":{"type":"custom_framework","attributes":{"name":"name","handle":"create-framework-new","version":"10","icon_url":"test-url","requirements":[{"name":"requirement","controls":[{"name":"control","rules_id":["def-000-be9"]}]}]}}} + When the request is sent + Then the response status is 409 Conflict + + @replay-only @skip-terraform-config @team:DataDog/cloud-siem + Scenario: Create a custom framework returns "OK" response + Given new "CreateCustomFramework" request + And body with value {"data":{"type":"custom_framework","attributes":{"name":"name","handle":"create-framework-new","version":"10","icon_url":"test-url","requirements":[{"name":"requirement","controls":[{"name":"control","rules_id":["def-000-be9"]}]}]}}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create a dataset returns "Bad Request" response + Given operation "CreateSecurityMonitoringDataset" enabled + And new "CreateSecurityMonitoringDataset" request + And body with value {"data": {"attributes": {"definition": {"columns": [{"column": "message", "type": "string"}], "data_source": "logs", "indexes": [], "name": "sample_dataset", "query_filter": "status = 'active'", "search": {"query": "*"}, "storage": "hot", "table_name": "my_reference_table", "time_window": {"from": 1700000000000, "to": 1700003600000}}, "description": "A sample dataset used for detection rules.", "version": 1}, "type": "datasetCreate"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create a dataset returns "Conflict" response + Given operation "CreateSecurityMonitoringDataset" enabled + And new "CreateSecurityMonitoringDataset" request + And body with value {"data": {"attributes": {"definition": {"columns": [{"column": "message", "type": "string"}], "data_source": "logs", "indexes": [], "name": "sample_dataset", "query_filter": "status = 'active'", "search": {"query": "*"}, "storage": "hot", "table_name": "my_reference_table", "time_window": {"from": 1700000000000, "to": 1700003600000}}, "description": "A sample dataset used for detection rules.", "version": 1}, "type": "datasetCreate"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create a dataset returns "Created" response + Given operation "CreateSecurityMonitoringDataset" enabled + And new "CreateSecurityMonitoringDataset" request + And body with value {"data": {"attributes": {"definition": {"columns": [{"column": "message", "type": "string"}], "data_source": "logs", "indexes": [], "name": "sample_dataset", "query_filter": "status = 'active'", "search": {"query": "*"}, "storage": "hot", "table_name": "my_reference_table", "time_window": {"from": 1700000000000, "to": 1700003600000}}, "description": "A sample dataset used for detection rules.", "version": 1}, "type": "datasetCreate"}} + When the request is sent + Then the response status is 201 Created + + @skip @team:DataDog/cloud-siem + Scenario: Create a detection rule returns "Bad Request" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}", "queries":[{"query":""}],"cases":[{"status":"info"}],"options":{},"message":"Test rule","tags":[],"isEnabled":true} + When the request is sent + Then the response status is 400 Bad Request + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a detection rule returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"metric":""}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection", "referenceTables":[{"tableName": "synthetics_test_reference_table_dont_delete", "columnName": "value", "logFieldPath":"testtag", "checkPresence":true, "ruleQueryName":"a"}]} + 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 "log_detection" + And the response "message" is equal to "Test rule" + And the response "referenceTables" is equal to [{"tableName": "synthetics_test_reference_table_dont_delete", "columnName": "value", "logFieldPath":"testtag", "checkPresence":true, "ruleQueryName":"a"}] + + @team:DataDog/cloud-siem + Scenario: Create a detection rule with detection method 'anomaly_detection' returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}","type":"log_detection","isEnabled":true,"queries":[{"aggregation":"count","dataSource":"logs","distinctFields":[],"groupByFields":["@usr.email","@network.client.ip"],"hasOptionalGroupByFields":false,"name":"","query":"service:app status:error"}],"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 0.995"}],"message":"An anomaly detection rule","options":{"detectionMethod":"anomaly_detection","evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400,"anomalyDetectionOptions":{"bucketDuration":300,"learningDuration":24,"detectionTolerance":3,"learningPeriodBaseline":10}},"tags":[],"filters":[]} + 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 "log_detection" + And the response "options.detectionMethod" is equal to "anomaly_detection" + And the response "options.anomalyDetectionOptions.bucketDuration" is equal to 300 + And the response "options.anomalyDetectionOptions.learningDuration" is equal to 24 + And the response "options.anomalyDetectionOptions.learningPeriodBaseline" is equal to 10 + And the response "options.anomalyDetectionOptions.detectionTolerance" is equal to 3 + + @team:DataDog/cloud-siem + Scenario: Create a detection rule with detection method 'anomaly_detection' with enabled feature 'instantaneousBaseline' returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}","type":"log_detection","isEnabled":true,"queries":[{"aggregation":"count","dataSource":"logs","distinctFields":[],"groupByFields":["@usr.email","@network.client.ip"],"hasOptionalGroupByFields":false,"name":"","query":"service:app status:error"}],"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 0.995"}],"message":"An anomaly detection rule","options":{"detectionMethod":"anomaly_detection","evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400,"anomalyDetectionOptions":{"bucketDuration":300,"learningDuration":24,"detectionTolerance":3,"instantaneousBaseline":true}},"tags":[],"filters":[]} + 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 "log_detection" + And the response "options.detectionMethod" is equal to "anomaly_detection" + And the response "options.anomalyDetectionOptions.instantaneousBaseline" is equal to true + + @team:DataDog/cloud-siem + Scenario: Create a detection rule with detection method 'sequence_detection' returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}","type":"log_detection","isEnabled":true,"queries":[{"aggregation":"count","dataSource":"logs","distinctFields":[],"groupByFields":[],"hasOptionalGroupByFields":false,"name":"","query":"service:logs-rule-reducer source:paul test2"},{"aggregation":"count","dataSource":"logs","distinctFields":[],"groupByFields":[],"hasOptionalGroupByFields":false,"name":"","query":"service:logs-rule-reducer source:paul test1"}],"cases":[{"name":"","status":"info","notifications":[],"condition":"step_b > 0"}],"message":"Logs and signals asdf","options":{"detectionMethod":"sequence_detection","evaluationWindow":0,"keepAlive":300,"maxSignalDuration":600,"sequenceDetectionOptions":{"stepTransitions":[{"child":"step_b","evaluationWindow":900,"parent":"step_a"}],"steps":[{"condition":"a > 0","evaluationWindow":60,"name":"step_a"},{"condition":"b > 0","evaluationWindow":60,"name":"step_b"}]}},"tags":[]} + 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 "log_detection" + And the response "options.detectionMethod" is equal to "sequence_detection" + + @team:DataDog/cloud-siem + Scenario: Create a detection rule with detection method 'third_party' returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}","type":"log_detection","isEnabled":true,"thirdPartyCases":[{"query":"status:error","name":"high","status":"high"},{"query":"status:info","name":"low","status":"low"}],"queries":[],"cases":[],"message":"This is a third party rule","options":{"detectionMethod":"third_party","keepAlive":0,"maxSignalDuration":600,"thirdPartyRuleOptions":{"defaultStatus":"info","rootQueries":[{"query":"source:guardduty @details.alertType:*EC2*", "groupByFields":["instance-id"]},{"query":"source:guardduty", "groupByFields":[]}]}}} + 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 "log_detection" + And the response "options.detectionMethod" is equal to "third_party" + And the response "thirdPartyCases[0].query" is equal to "status:error" + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a detection rule with type 'application_security 'returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"type":"application_security","name":"{{unique}}_appsec_rule","queries":[{"query":"@appsec.security_activity:business_logic.users.login.failure","aggregation":"count","groupByFields":["service","@http.client_ip"],"distinctFields":[]}],"filters":[],"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 100000","actions":[{"type":"block_ip","options":{"duration":900}}, {"type":"user_behavior","options":{"userBehaviorName":"behavior"}}, {"type":"flag_ip","options":{"flaggedIPType":"FLAGGED"}}]}],"options":{"keepAlive":3600,"maxSignalDuration":86400,"evaluationWindow":900,"detectionMethod":"threshold"},"isEnabled":true,"message":"Test rule","tags":[],"groupSignalsBy":["service"]} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}_appsec_rule" + And the response "type" is equal to "application_security" + And the response "message" is equal to "Test rule" + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a detection rule with type 'impossible_travel' and baselineUserLocationsDuration returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"queries":[{"aggregation":"geo_data","groupByFields":["@usr.id"],"distinctFields":[],"metric":"@network.client.geoip","query":"*"}],"cases":[{"name":"","status":"info","notifications":[]}],"hasExtendedTitle":true,"message":"test","isEnabled":true,"options":{"maxSignalDuration":86400,"evaluationWindow":900,"keepAlive":3600,"detectionMethod":"impossible_travel","impossibleTravelOptions":{"baselineUserLocations":true,"baselineUserLocationsDuration":7}},"name":"{{ unique }}","type":"log_detection","tags":[],"filters":[]} + 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 "log_detection" + And the response "message" is equal to "test" + And the response "options.detectionMethod" is equal to "impossible_travel" + And the response "options.impossibleTravelOptions.baselineUserLocations" is equal to true + And the response "options.impossibleTravelOptions.baselineUserLocationsDuration" is equal to 7 + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a detection rule with type 'impossible_travel' returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"queries":[{"aggregation":"geo_data","groupByFields":["@usr.id"],"distinctFields":[],"metric":"@network.client.geoip","query":"*"}],"cases":[{"name":"","status":"info","notifications":[]}],"hasExtendedTitle":true,"message":"test","isEnabled":true,"options":{"maxSignalDuration":86400,"evaluationWindow":900,"keepAlive":3600,"detectionMethod":"impossible_travel","impossibleTravelOptions":{"baselineUserLocations":false}},"name":"{{ unique }}","type":"log_detection","tags":[],"filters":[]} + 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 "log_detection" + And the response "message" is equal to "test" + And the response "options.detectionMethod" is equal to "impossible_travel" + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a detection rule with type 'signal_correlation' returns "OK" response + Given there is a valid "security_rule" in the system + And there is a valid "security_rule_bis" in the system + And new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}_signal_rule", "queries":[{"ruleId":"{{ security_rule.id }}","aggregation":"event_count","correlatedByFields":["host"],"correlatedQueryIndex":1}, {"ruleId":"{{ security_rule_bis.id }}","aggregation":"event_count","correlatedByFields":["host"]}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0 && b > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test signal correlation rule","tags":[],"isEnabled":true, "type": "signal_correlation"} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}_signal_rule" + And the response "type" is equal to "signal_correlation" + And the response "message" is equal to "Test signal correlation rule" + And the response "isEnabled" is equal to true + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a detection rule with type 'workload_security' returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"metric":""}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type": "workload_security"} + 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 "workload_security" + And the response "message" is equal to "Test rule" + And the response "isEnabled" is equal to true + + @generated @skip @team:DataDog/k9-automation + Scenario: Create a due date rule returns "Bad Request" response + Given operation "CreateSecurityFindingsAutomationDueDateRule" enabled + And new "CreateSecurityFindingsAutomationDueDateRule" request + And body with value {"data": {"attributes": {"action": {"due_days_per_severity": [{"due_in_days": 7, "severity": "critical"}], "due_from": "first_seen", "reason_description": "Applied for production findings only"}, "enabled": true, "name": "Critical findings due in 7 days", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "due_date_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-automation + Scenario: Create a due date rule returns "Successfully created the due date rule" response + Given operation "CreateSecurityFindingsAutomationDueDateRule" enabled + And new "CreateSecurityFindingsAutomationDueDateRule" request + And body with value {"data": {"attributes": {"action": {"due_days_per_severity": [{"due_in_days": 7, "severity": "critical"}], "due_from": "first_seen"}, "enabled": true, "name": "{{ unique }}", "rule": {"finding_types": ["misconfiguration"], "query": "env:staging"}}, "type": "due_date_rules"}} + When the request is sent + Then the response status is 201 Successfully created the due date rule + And the response "data.type" is equal to "due_date_rules" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.enabled" is equal to true + + @generated @skip @team:DataDog/k9-automation + Scenario: Create a due date rule returns "Unprocessable Entity" response + Given operation "CreateSecurityFindingsAutomationDueDateRule" enabled + And new "CreateSecurityFindingsAutomationDueDateRule" request + And body with value {"data": {"attributes": {"action": {"due_days_per_severity": [{"due_in_days": 7, "severity": "critical"}], "due_from": "first_seen", "reason_description": "Applied for production findings only"}, "enabled": true, "name": "Critical findings due in 7 days", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "due_date_rules"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/k9-automation + Scenario: Create a mute rule returns "Bad Request" response + Given operation "CreateSecurityFindingsAutomationMuteRule" enabled + And new "CreateSecurityFindingsAutomationMuteRule" request + And body with value {"data": {"attributes": {"action": {"expire_at": 4070908800000, "reason": "risk_accepted", "reason_description": "Accepted for dev environments only"}, "enabled": true, "name": "Mute accepted risks in dev", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "mute_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-automation + Scenario: Create a mute rule returns "Successfully created the mute rule" response + Given operation "CreateSecurityFindingsAutomationMuteRule" enabled + And new "CreateSecurityFindingsAutomationMuteRule" request + And body with value {"data": {"attributes": {"action": {"reason": "risk_accepted"}, "enabled": true, "name": "{{ unique }}", "rule": {"finding_types": ["misconfiguration"], "query": "env:staging"}}, "type": "mute_rules"}} + When the request is sent + Then the response status is 201 Successfully created the mute rule + And the response "data.type" is equal to "mute_rules" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.enabled" is equal to true + + @generated @skip @team:DataDog/k9-automation + Scenario: Create a mute rule returns "Unprocessable Entity" response + Given operation "CreateSecurityFindingsAutomationMuteRule" enabled + And new "CreateSecurityFindingsAutomationMuteRule" request + And body with value {"data": {"attributes": {"action": {"expire_at": 4070908800000, "reason": "risk_accepted", "reason_description": "Accepted for dev environments only"}, "enabled": true, "name": "Mute accepted risks in dev", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "mute_rules"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: Create a new signal-based notification rule returns "Bad Request" response + Given new "CreateSignalNotificationRule" request + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "routing": {"mode": "manual"}, "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400}, "type": "notification_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-security-posture-management + Scenario: Create a new signal-based notification rule returns "Successfully created the notification rule." response + Given new "CreateSignalNotificationRule" request + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400}, "type": "notification_rules"}} + When the request is sent + Then the response status is 201 Successfully created the notification rule. + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: Create a new vulnerability-based notification rule returns "Bad Request" response + Given new "CreateVulnerabilityNotificationRule" request + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "routing": {"mode": "manual"}, "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400}, "type": "notification_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-security-posture-management + Scenario: Create a new vulnerability-based notification rule returns "Successfully created the notification rule." response + Given new "CreateVulnerabilityNotificationRule" request + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400}, "type": "notification_rules"}} + When the request is sent + Then the response status is 201 Successfully created the notification rule. + + @team:DataDog/cloud-security-posture-management + Scenario: Create a new vulnerability-based notification rule with sast and secret rule types returns "Successfully created the notification rule." response + Given new "CreateVulnerabilityNotificationRule" request + And body with value {"data": {"attributes": {"enabled": true, "name": "{{ unique }}", "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["sast_vulnerability", "secret_vulnerability"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400}, "type": "notification_rules"}} + When the request is sent + Then the response status is 201 Successfully created the notification rule. + + @team:DataDog/cloud-siem + Scenario: Create a scheduled detection rule returns "OK" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"indexes":["main"]}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection", "schedulingOptions": {"rrule": "FREQ=HOURLY;INTERVAL=2;", "start": "2025-06-18T12:00:00", "timezone": "Europe/Paris"}} + 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 "log_detection" + And the response "message" is equal to "Test rule" + And the response "schedulingOptions" is equal to {"rrule": "FREQ=HOURLY;INTERVAL=2;", "start": "2025-06-18T12:00:00", "timezone": "Europe/Paris"} + + @team:DataDog/cloud-siem + Scenario: Create a scheduled rule without rrule returns "Bad Request" response + Given new "CreateSecurityMonitoringRule" request + And body with value {"name":"{{ unique }}", "queries":[{"query":"@test:true","aggregation":"count","groupByFields":[],"distinctFields":[],"indexes":["main"]}],"filters":[],"cases":[{"name":"","status":"info","condition":"a > 0","notifications":[]}],"options":{"evaluationWindow":900,"keepAlive":3600,"maxSignalDuration":86400},"message":"Test rule","tags":[],"isEnabled":true, "type":"log_detection", "schedulingOptions": {"start": "2025-06-18T12:00:00", "timezone": "Europe/Paris"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create a security filter returns "Bad Request" response + Given new "CreateSecurityFilter" request + And body with value {"data": {"attributes": {"exclusion_filters": [{"name": "Exclude staging", "query": "source:staging"}], "filtered_data_type": "logs", "is_enabled": true, "name": "Custom security filter", "query": "service:api"}, "type": "security_filters"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create a security filter returns "Conflict" response + Given new "CreateSecurityFilter" request + And body with value {"data": {"attributes": {"exclusion_filters": [{"name": "Exclude staging", "query": "source:staging"}], "filtered_data_type": "logs", "is_enabled": true, "name": "Custom security filter", "query": "service:api"}, "type": "security_filters"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/cloud-siem + Scenario: Create a security filter returns "OK" response + Given new "CreateSecurityFilter" request + And body with value {"data": {"attributes": {"exclusion_filters": [{"name": "Exclude staging", "query": "source:staging"}], "filtered_data_type": "logs", "is_enabled": true, "name": "{{ unique }}", "query": "service:{{ unique_alnum }}"}, "type": "security_filters"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "security_filters" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.is_enabled" is equal to true + And the response "data.attributes.exclusion_filters[0].name" is equal to "Exclude staging" + And the response "data.attributes.exclusion_filters[0].query" is equal to "source:staging" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create a suppression rule returns "Bad Request" response + Given new "CreateSecurityMonitoringSuppression" request + And body with value {"data": {"attributes": {"data_exclusion_query": "source:cloudtrail account_id:12345", "description": "This rule suppresses low-severity signals in staging environments.", "enabled": true, "expiration_date": 1703187336000, "name": "Custom suppression", "rule_query": "type:log_detection source:cloudtrail", "start_date": 1703187336000, "suppression_query": "env:staging status:low", "tags": ["technique:T1110-brute-force", "source:cloudtrail"]}, "type": "suppressions"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create a suppression rule returns "Conflict" response + Given new "CreateSecurityMonitoringSuppression" request + And body with value {"data": {"attributes": {"data_exclusion_query": "source:cloudtrail account_id:12345", "description": "This rule suppresses low-severity signals in staging environments.", "enabled": true, "expiration_date": 1703187336000, "name": "Custom suppression", "rule_query": "type:log_detection source:cloudtrail", "start_date": 1703187336000, "suppression_query": "env:staging status:low", "tags": ["technique:T1110-brute-force", "source:cloudtrail"]}, "type": "suppressions"}} + When the request is sent + Then the response status is 409 Conflict + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a suppression rule returns "OK" response + Given new "CreateSecurityMonitoringSuppression" request + And body with value {"data": {"attributes": {"description": "This rule suppresses low-severity signals in staging environments.", "enabled": true, "start_date": {{ timestamp('now + 10d') }}000, "expiration_date": {{ timestamp('now + 21d') }}000, "name": "{{ unique }}", "rule_query": "type:log_detection source:cloudtrail", "suppression_query": "env:staging status:low", "tags": ["technique:T1110-brute-force", "source:cloudtrail"]}, "type": "suppressions"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "suppressions" + And the response "data.attributes.enabled" is equal to true + And the response "data.attributes.rule_query" is equal to "type:log_detection source:cloudtrail" + + @skip-validation @team:DataDog/cloud-siem + Scenario: Create a suppression rule with an exclusion query returns "OK" response + Given new "CreateSecurityMonitoringSuppression" request + And body with value {"data": {"attributes": {"description": "This rule suppresses low-severity signals in staging environments.", "enabled": true, "start_date": {{ timestamp('now + 10d') }}000, "expiration_date": {{ timestamp('now + 21d') }}000, "name": "{{ unique }}", "rule_query": "type:log_detection source:cloudtrail", "data_exclusion_query": "account_id:12345"}, "type": "suppressions"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "suppressions" + And the response "data.attributes.enabled" is equal to true + And the response "data.attributes.rule_query" is equal to "type:log_detection source:cloudtrail" + And the response "data.attributes.data_exclusion_query" is equal to "account_id:12345" + + @generated @skip @team:DataDog/k9-automation + Scenario: Create a ticket creation rule returns "Bad Request" response + Given operation "CreateSecurityFindingsAutomationTicketCreationRule" enabled + And new "CreateSecurityFindingsAutomationTicketCreationRule" request + And body with value {"data": {"attributes": {"action": {"assignee_id": "22222222-2222-2222-2222-222222222222", "fields": {"labels": ["security"]}, "max_tickets_per_day": 100, "project_id": "11111111-1111-1111-1111-111111111111", "target": "jira"}, "enabled": true, "name": "Auto-create Jira tickets for critical findings", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "ticket_creation_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-automation + Scenario: Create a ticket creation rule returns "Successfully created the ticket creation rule" response + Given operation "CreateSecurityFindingsAutomationTicketCreationRule" enabled + And new "CreateSecurityFindingsAutomationTicketCreationRule" request + And body with value {"data": {"attributes": {"action": {"max_tickets_per_day": 10, "project_id": "11111111-1111-1111-1111-111111111111", "target": "jira"}, "enabled": true, "name": "{{ unique }}", "rule": {"finding_types": ["misconfiguration"], "query": "env:staging"}}, "type": "ticket_creation_rules"}} + When the request is sent + Then the response status is 201 Successfully created the ticket creation rule + And the response "data.type" is equal to "ticket_creation_rules" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.enabled" is equal to true + + @generated @skip @team:DataDog/k9-automation + Scenario: Create a ticket creation rule returns "Unprocessable Entity" response + Given operation "CreateSecurityFindingsAutomationTicketCreationRule" enabled + And new "CreateSecurityFindingsAutomationTicketCreationRule" request + And body with value {"data": {"attributes": {"action": {"assignee_id": "22222222-2222-2222-2222-222222222222", "fields": {"labels": ["security"]}, "max_tickets_per_day": 100, "project_id": "11111111-1111-1111-1111-111111111111", "target": "jira"}, "enabled": true, "name": "Auto-create Jira tickets for critical findings", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "ticket_creation_rules"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create an entity context sync configuration returns "Bad Request" response + Given operation "CreateSecurityMonitoringIntegrationConfig" enabled + And new "CreateSecurityMonitoringIntegrationConfig" request + And body with value {"data": {"attributes": {"domain": "siem-test.com", "integration_type": "GOOGLE_WORKSPACE", "name": "My GWS Integration", "secrets": {"admin_email": "admin@example.com", "service_account_json": {"client_email": "svc@my-project.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "project_id": "my-project", "type": "service_account"}}, "settings": {"setting1": "value1"}}, "type": "integration_config"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Create an entity context sync configuration returns "OK" response + Given operation "CreateSecurityMonitoringIntegrationConfig" enabled + And new "CreateSecurityMonitoringIntegrationConfig" request + And body with value {"data": {"attributes": {"domain": "siem-test.com", "integration_type": "GOOGLE_WORKSPACE", "name": "My GWS Integration", "secrets": {"admin_email": "admin@example.com", "service_account_json": {"client_email": "svc@my-project.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "project_id": "my-project", "type": "service_account"}}, "settings": {"setting1": "value1"}}, "type": "integration_config"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-investigation + Scenario: Create case for security finding returns "Created" response + Given new "CreateCases" request + And body with value {"data": [{"attributes": {"title": "A title", "description": "A description"}, "relationships": {"findings": {"data": [{"id": "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "cases"}]} + When the request is sent + Then the response status is 201 Created + And the response "data" has length 1 + And the response "data[0]" has field "id" + And the response "data[0].attributes.title" is equal to "A title" + And the response "data[0].attributes.description" is equal to "A description" + And the response "data[0].attributes.type" is equal to "SECURITY" + And the response "data[0].attributes.insights" has length 1 + And the response "data[0].attributes.insights[0].resource_id" is equal to "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=" + And the response "data[0].attributes.insights[0].type" is equal to "SECURITY_FINDING" + + @team:DataDog/k9-investigation + Scenario: Create case for security findings returns "Created" response + Given new "CreateCases" request + And body with value {"data": [{"attributes": {"title": "A title", "description": "A description"}, "relationships": {"findings": {"data": [{"id": "ZTd5LWNuYi1seWV-aS0wMjI2NGZjZjRmZWQ5ODMyMg==", "type": "findings"}, {"id": "c2FuLXhyaS1kZnN-aS0wODM3MjVhMTM2MDExNzNkOQ==", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "cases"}]} + When the request is sent + Then the response status is 201 Created + And the response "data" has length 1 + And the response "data[0]" has field "id" + And the response "data[0].attributes.title" is equal to "A title" + And the response "data[0].attributes.description" is equal to "A description" + And the response "data[0].attributes.type" is equal to "SECURITY" + And the response "data[0].attributes.insights" has length 2 + And the response "data[0].attributes.insights[1].resource_id" is equal to "c2FuLXhyaS1kZnN-aS0wODM3MjVhMTM2MDExNzNkOQ==" + And the response "data[0].attributes.insights[1].type" is equal to "SECURITY_FINDING" + And the response "data[0].attributes.insights[0].resource_id" is equal to "ZTd5LWNuYi1seWV-aS0wMjI2NGZjZjRmZWQ5ODMyMg==" + And the response "data[0].attributes.insights[0].type" is equal to "SECURITY_FINDING" + + @team:DataDog/k9-investigation + Scenario: Create cases for security findings returns "Bad Request" response + Given new "CreateCases" request + And body with value {"data": [{"attributes": {}, "relationships": {"findings": {"data": []}, "project": {"data": {"id": "7f198869-c7ef-4afc-97cf-da5cdc13b5c3", "type": "projects"}}}, "type": "cases"}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-investigation + Scenario: Create cases for security findings returns "Created" response + Given new "CreateCases" request + And body with value {"data": [{"attributes": {"title": "A title", "description": "A description"}, "relationships": {"findings": {"data": [{"id": "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "cases"}, {"attributes": {"title": "A title", "description": "A description"}, "relationships": {"findings": {"data": [{"id": "OGRlMDIwYzk4MjFmZTZiNTQwMzk2ZjUxNzg0MDc0NjR-MTk3Yjk4MDI4ZDQ4YzI2ZGZiMWJmMTNhNDEwZGZkYWI=", "type": "findings"}]}, "project": {"data": {"id": "959a6f71-bac8-4027-b1d3-2264f569296f", "type": "projects"}}}, "type": "cases"}]} + When the request is sent + Then the response status is 201 Created + And the response "data" has length 2 + And the response "data[0]" has field "id" + And the response "data[0].attributes.title" is equal to "A title" + And the response "data[0].attributes.description" is equal to "A description" + And the response "data[0].attributes.type" is equal to "SECURITY" + And the response "data[0].attributes.insights" has length 1 + And the response "data[0].attributes.insights[0].resource_id" is equal to "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=" + And the response "data[0].attributes.insights[0].type" is equal to "SECURITY_FINDING" + And the response "data[1]" has field "id" + And the response "data[1].attributes.title" is equal to "A title" + And the response "data[1].attributes.description" is equal to "A description" + And the response "data[1].attributes.type" is equal to "SECURITY" + And the response "data[1].attributes.insights" has length 1 + And the response "data[1].attributes.insights[0].resource_id" is equal to "OGRlMDIwYzk4MjFmZTZiNTQwMzk2ZjUxNzg0MDc0NjR-MTk3Yjk4MDI4ZDQ4YzI2ZGZiMWJmMTNhNDEwZGZkYWI=" + And the response "data[1].attributes.insights[0].type" is equal to "SECURITY_FINDING" + + @team:DataDog/k9-investigation + Scenario: Create cases for security findings returns "Not Found" response + Given new "CreateCases" request + And body with value {"data": [{"attributes": {}, "relationships": {"findings": {"data": [{"id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", "type": "findings"}]}, "project": {"data": {"id": "00000000-0000-0000-0000-000000000000", "type": "projects"}}}, "type": "cases"}]} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @skip-terraform-config @team:DataDog/cloud-siem + Scenario: Create or update an indicator triage state returns "Bad Request" response + Given operation "CreateIoCTriageState" enabled + And new "CreateIoCTriageState" request + And body with value {"data": {"attributes": {"indicator": "192.0.2.1", "triage_state": "invalid_state"}, "type": "ioc_triage_state"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @skip-terraform-config @team:DataDog/cloud-siem + Scenario: Create or update an indicator triage state returns "Created" response + Given operation "CreateIoCTriageState" enabled + And new "CreateIoCTriageState" request + And body with value {"data": {"attributes": {"indicator": "192.0.2.1", "triage_state": "reviewed"}, "type": "ioc_triage_state"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/cloud-siem + Scenario: Deactivate an entity context sync integration returns "Not Found" response + Given operation "DeactivateIntegration" enabled + And new "DeactivateIntegration" request + And request contains "integration_type" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Deactivate an entity context sync integration returns "OK" response + Given operation "DeactivateIntegration" enabled + And new "DeactivateIntegration" request + And request contains "integration_type" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Deactivate content pack returns "Accepted" response + Given operation "DeactivateContentPack" enabled + And new "DeactivateContentPack" request + And request contains "content_pack_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/cloud-siem + Scenario: Deactivate content pack returns "Not Found" response + Given operation "DeactivateContentPack" enabled + And new "DeactivateContentPack" request + And request contains "content_pack_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Delete a critical asset returns "Not Found" response + Given new "DeleteSecurityMonitoringCriticalAsset" request + And request contains "critical_asset_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Delete a critical asset returns "OK" response + Given there is a valid "critical_asset" in the system + And new "DeleteSecurityMonitoringCriticalAsset" request + And request contains "critical_asset_id" parameter from "critical_asset.data.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/cloud-siem + Scenario: Delete a custom framework returns "Bad Request" response + Given new "DeleteCustomFramework" request + And request contains "handle" parameter with value "handle-does-not-exist" + And request contains "version" parameter with value "version-does-not-exist" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-siem + Scenario: Delete a custom framework returns "OK" response + Given there is a valid "custom_framework" in the system + And new "DeleteCustomFramework" request + And request contains "handle" parameter with value "create-framework-new" + And request contains "version" parameter with value "10" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete a dataset returns "Bad Request" response + Given operation "DeleteSecurityMonitoringDataset" enabled + And new "DeleteSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete a dataset returns "No Content" response + Given operation "DeleteSecurityMonitoringDataset" enabled + And new "DeleteSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete a dataset returns "Not Found" response + Given operation "DeleteSecurityMonitoringDataset" enabled + And new "DeleteSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-automation + Scenario: Delete a due date rule returns "Not Found" response + Given operation "DeleteSecurityFindingsAutomationDueDateRule" enabled + And new "DeleteSecurityFindingsAutomationDueDateRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-automation + Scenario: Delete a due date rule returns "Rule successfully deleted." response + Given operation "DeleteSecurityFindingsAutomationDueDateRule" enabled + And there is a valid "valid_due_date_rule" in the system + And new "DeleteSecurityFindingsAutomationDueDateRule" request + And request contains "rule_id" parameter from "valid_due_date_rule.data.id" + When the request is sent + Then the response status is 204 Rule successfully deleted. + + @generated @skip @team:DataDog/k9-automation + Scenario: Delete a mute rule returns "Not Found" response + Given operation "DeleteSecurityFindingsAutomationMuteRule" enabled + And new "DeleteSecurityFindingsAutomationMuteRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-automation + Scenario: Delete a mute rule returns "Rule successfully deleted." response + Given operation "DeleteSecurityFindingsAutomationMuteRule" enabled + And there is a valid "valid_mute_rule" in the system + And new "DeleteSecurityFindingsAutomationMuteRule" request + And request contains "rule_id" parameter from "valid_mute_rule.data.id" + When the request is sent + Then the response status is 204 Rule successfully deleted. + + @skip @team:DataDog/cloud-siem + Scenario: Delete a non existing rule returns "Not Found" response + Given new "DeleteSecurityMonitoringRule" request + And request contains "rule_id" parameter with value "ThisRuleIdProbablyDoesntExist" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Delete a security filter returns "No Content" response + Given there is a valid "security_filter" in the system + And new "DeleteSecurityFilter" request + And request contains "security_filter_id" parameter from "security_filter.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete a security filter returns "Not Found" response + Given new "DeleteSecurityFilter" request + And request contains "security_filter_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete a security filter returns "OK" response + Given new "DeleteSecurityFilter" request + And request contains "security_filter_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/cloud-security-posture-management + Scenario: Delete a signal-based notification rule returns "Not Found" response + Given new "DeleteSignalNotificationRule" request + And request contains "id" parameter with value "000-000-000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-security-posture-management + Scenario: Delete a signal-based notification rule returns "Rule successfully deleted." response + Given there is a valid "valid_signal_notification_rule" in the system + And new "DeleteSignalNotificationRule" request + And request contains "id" parameter from "valid_signal_notification_rule.data.id" + When the request is sent + Then the response status is 204 Rule successfully deleted. + + @skip @team:DataDog/cloud-siem + Scenario: Delete a suppression rule returns "Not Found" response + Given new "DeleteSecurityMonitoringSuppression" request + And request contains "suppression_id" parameter with value "does-not-exist" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Delete a suppression rule returns "OK" response + Given there is a valid "suppression" in the system + And new "DeleteSecurityMonitoringSuppression" request + And request contains "suppression_id" parameter from "suppression.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/k9-automation + Scenario: Delete a ticket creation rule returns "Not Found" response + Given operation "DeleteSecurityFindingsAutomationTicketCreationRule" enabled + And new "DeleteSecurityFindingsAutomationTicketCreationRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-automation + Scenario: Delete a ticket creation rule returns "Rule successfully deleted." response + Given operation "DeleteSecurityFindingsAutomationTicketCreationRule" enabled + And there is a valid "valid_ticket_creation_rule" in the system + And new "DeleteSecurityFindingsAutomationTicketCreationRule" request + And request contains "rule_id" parameter from "valid_ticket_creation_rule.data.id" + When the request is sent + Then the response status is 204 Rule successfully deleted. + + @team:DataDog/cloud-security-posture-management + Scenario: Delete a vulnerability-based notification rule returns "Not Found" response + Given new "DeleteVulnerabilityNotificationRule" request + And request contains "id" parameter with value "000-000-000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-security-posture-management + Scenario: Delete a vulnerability-based notification rule returns "Rule successfully deleted." response + Given there is a valid "valid_vulnerability_notification_rule" in the system + And new "DeleteVulnerabilityNotificationRule" request + And request contains "id" parameter from "valid_vulnerability_notification_rule.data.id" + When the request is sent + Then the response status is 204 Rule successfully deleted. + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete an entity context sync configuration returns "Not Found" response + Given operation "DeleteSecurityMonitoringIntegrationConfig" enabled + And new "DeleteSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete an entity context sync configuration returns "OK" response + Given operation "DeleteSecurityMonitoringIntegrationConfig" enabled + And new "DeleteSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/cloud-siem + Scenario: Delete an existing job returns "Bad Request" response + Given operation "DeleteHistoricalJob" enabled + And new "DeleteHistoricalJob" request + And request contains "job_id" parameter with value "inva-lid" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete an existing job returns "Conflict" response + Given operation "DeleteHistoricalJob" enabled + And new "DeleteHistoricalJob" request + And request contains "job_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/cloud-siem + Scenario: Delete an existing job returns "Not Found" response + Given operation "DeleteHistoricalJob" enabled + And new "DeleteHistoricalJob" request + And request contains "job_id" parameter with value "8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete an existing job returns "OK" response + Given operation "DeleteHistoricalJob" enabled + And new "DeleteHistoricalJob" request + And request contains "job_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Delete an existing rule returns "Not Found" response + Given new "DeleteSecurityMonitoringRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Delete an existing rule returns "OK" response + Given there is a valid "security_rule" in the system + And new "DeleteSecurityMonitoringRule" request + And request contains "rule_id" parameter from "security_rule.id" + When the request is sent + Then the response status is 204 OK + + @team:DataDog/k9-investigation + Scenario: Detach security findings from their case returns "Bad Request" response + Given new "DetachCase" request + And body with value {"data": {"relationships": {"findings": {"data": []}}, "type": "cases"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-investigation + Scenario: Detach security findings from their case returns "No Content" response + Given new "DetachCase" request + And body with value {"data": {"relationships": {"findings": {"data": [{"id": "YzM2MTFjYzcyNmY0Zjg4MTAxZmRlNjQ1MWU1ZGQwYzR-YzI5NzE5Y2Y4MzU4ZjliNzhkNjYxNTY0ODIzZDQ2YTM=", "type": "findings"}]}}, "type": "cases"}} + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/k9-investigation + Scenario: Detach security findings from their case returns "Not Found" response + Given new "DetachCase" request + And body with value {"data": {"relationships": {"findings": {"data": [{"id": "wrong-finding-id", "type": "findings"}]}}, "type": "cases"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Export security monitoring resource to Terraform returns "Not Found" response + Given operation "ExportSecurityMonitoringTerraformResource" enabled + And new "ExportSecurityMonitoringTerraformResource" request + And request contains "resource_type" parameter from "REPLACE.ME" + And request contains "resource_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-siem + Scenario: Export security monitoring resource to Terraform returns "OK" response + Given operation "ExportSecurityMonitoringTerraformResource" enabled + And there is a valid "suppression" in the system + And new "ExportSecurityMonitoringTerraformResource" request + And request contains "resource_type" parameter with value "suppressions" + And request contains "resource_id" parameter from "suppression.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.type_name" is equal to "datadog_security_monitoring_suppression" + And the response "data.attributes.resource_id" has the same value as "suppression.data.id" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Export security monitoring resources to Terraform returns "Bad Request" response + Given operation "BulkExportSecurityMonitoringTerraformResources" enabled + And new "BulkExportSecurityMonitoringTerraformResources" request + And request contains "resource_type" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"resource_ids": [""]}, "type": "bulk_export_resources"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Export security monitoring resources to Terraform returns "Not Found" response + Given operation "BulkExportSecurityMonitoringTerraformResources" enabled + And new "BulkExportSecurityMonitoringTerraformResources" request + And request contains "resource_type" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"resource_ids": [""]}, "type": "bulk_export_resources"}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-siem + Scenario: Export security monitoring resources to Terraform returns "OK" response + Given operation "BulkExportSecurityMonitoringTerraformResources" enabled + And there is a valid "suppression" in the system + And new "BulkExportSecurityMonitoringTerraformResources" request + And request contains "resource_type" parameter with value "suppressions" + And body with value {"data": {"attributes": {"resource_ids": ["{{ suppression.data.id }}"]}, "type": "bulk_export_resources"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get AST for source code returns "Bad Request" response + Given operation "CreateStaticAnalysisAst" enabled + And new "CreateStaticAnalysisAst" request + And body with value {"data": {"attributes": {"code": "aW1wb3J0IHN5cw==", "file_encoding": "utf-8", "language": "python"}, "type": "get_ast_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get AST for source code returns "OK" response + Given operation "CreateStaticAnalysisAst" enabled + And new "CreateStaticAnalysisAst" request + And body with value {"data": {"attributes": {"code": "aW1wb3J0IHN5cw==", "file_encoding": "utf-8", "language": "python"}, "type": "get_ast_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get Entra ID Azure App Registration prerequisites returns "OK" response + Given operation "GetEntraIdAzureAppRegistrations" enabled + And new "GetEntraIdAzureAppRegistrations" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: Get SBOM returns "Bad request: The server cannot process the request due to invalid syntax in the request." response + Given new "GetSBOM" request + And request contains "asset_type" parameter from "REPLACE.ME" + And request contains "filter[asset_name]" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad request: The server cannot process the request due to invalid syntax in the request. + + @team:DataDog/k9-cloud-vm + Scenario: Get SBOM returns "Not found: asset not found" response + Given new "GetSBOM" request + And request contains "asset_type" parameter with value "Host" + And request contains "filter[asset_name]" parameter with value "unknown-host" + When the request is sent + Then the response status is 404 Not found: asset not found + + @skip @team:DataDog/k9-cloud-vm + Scenario: Get SBOM returns "OK" response + Given new "GetSBOM" request + And request contains "asset_type" parameter with value "Repository" + And request contains "filter[asset_name]" parameter with value "github.com/datadog/datadog-agent" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get a SAST ruleset returns "Bad Request" response + Given operation "GetStaticAnalysisRuleset" enabled + And new "GetStaticAnalysisRuleset" request + And request contains "ruleset_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get a SAST ruleset returns "Not Found" response + Given operation "GetStaticAnalysisRuleset" enabled + And new "GetStaticAnalysisRuleset" request + And request contains "ruleset_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get a SAST ruleset returns "OK" response + Given operation "GetStaticAnalysisRuleset" enabled + And new "GetStaticAnalysisRuleset" request + And request contains "ruleset_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip-validation @team:DataDog/cloud-siem + Scenario: Get a cloud configuration rule's details returns "OK" response + Given there is a valid "cloud_configuration_rule" in the system + And new "GetSecurityMonitoringRule" request + And request contains "rule_id" parameter from "cloud_configuration_rule.id" + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}_cloud" + And the response "id" has the same value as "cloud_configuration_rule.id" + + @team:DataDog/cloud-siem + Scenario: Get a critical asset returns "Not Found" response + Given new "GetSecurityMonitoringCriticalAsset" request + And request contains "critical_asset_id" parameter with value "00000000-0000-0000-0000-000000000000" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Get a critical asset returns "OK" response + Given new "GetSecurityMonitoringCriticalAsset" request + And there is a valid "critical_asset" in the system + And request contains "critical_asset_id" parameter from "critical_asset.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.rule_query" has the same value as "critical_asset.data.attributes.rule_query" + And the response "data.attributes.severity" is equal to "medium" + + @team:DataDog/cloud-siem + Scenario: Get a custom framework returns "Bad Request" response + Given new "GetCustomFramework" request + And request contains "handle" parameter with value "frame-does-not-exist" + And request contains "version" parameter with value "frame-does-not-exist" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-siem + Scenario: Get a custom framework returns "OK" response + Given there is a valid "custom_framework" in the system + And new "GetCustomFramework" request + And request contains "handle" parameter with value "create-framework-new" + And request contains "version" parameter with value "10" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a dataset at a specific version returns "Bad Request" response + Given operation "GetSecurityMonitoringDatasetByVersion" enabled + And new "GetSecurityMonitoringDatasetByVersion" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And request contains "version" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a dataset at a specific version returns "Not Found" response + Given operation "GetSecurityMonitoringDatasetByVersion" enabled + And new "GetSecurityMonitoringDatasetByVersion" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And request contains "version" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a dataset at a specific version returns "OK" response + Given operation "GetSecurityMonitoringDatasetByVersion" enabled + And new "GetSecurityMonitoringDatasetByVersion" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And request contains "version" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a dataset returns "Bad Request" response + Given operation "GetSecurityMonitoringDataset" enabled + And new "GetSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a dataset returns "Not Found" response + Given operation "GetSecurityMonitoringDataset" enabled + And new "GetSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a dataset returns "OK" response + Given operation "GetSecurityMonitoringDataset" enabled + And new "GetSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-automation + Scenario: Get a due date rule returns "Not Found" response + Given operation "GetSecurityFindingsAutomationDueDateRule" enabled + And new "GetSecurityFindingsAutomationDueDateRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-automation + Scenario: Get a due date rule returns "Successfully retrieved the due date rule" response + Given operation "GetSecurityFindingsAutomationDueDateRule" enabled + And there is a valid "valid_due_date_rule" in the system + And new "GetSecurityFindingsAutomationDueDateRule" request + And request contains "rule_id" parameter from "valid_due_date_rule.data.id" + When the request is sent + Then the response status is 200 Successfully retrieved the due date rule + And the response "data.id" is equal to "{{ valid_due_date_rule.data.id }}" + And the response "data.type" is equal to "due_date_rules" + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: Get a finding returns "Bad Request: The server cannot process the request due to invalid syntax in the request." response + Given operation "GetFinding" enabled + And new "GetFinding" request + And request contains "finding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request: The server cannot process the request due to invalid syntax in the request. + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: Get a finding returns "Not Found: The requested finding cannot be found." response + Given operation "GetFinding" enabled + And new "GetFinding" request + And request contains "finding_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found: The requested finding cannot be found. + + @replay-only @team:DataDog/cloud-security-posture-management + Scenario: Get a finding returns "OK" response + Given operation "GetFinding" enabled + And new "GetFinding" request + And request contains "finding_id" parameter with value "AgAAAYd59gjghzF52gAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFCRTRvV1lFeEo4SlFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.evaluation" is equal to "pass" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a hist signal's details returns "Bad Request" response + Given operation "GetSecurityMonitoringHistsignal" enabled + And new "GetSecurityMonitoringHistsignal" request + And request contains "histsignal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a hist signal's details returns "Not Found" response + Given operation "GetSecurityMonitoringHistsignal" enabled + And new "GetSecurityMonitoringHistsignal" request + And request contains "histsignal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a hist signal's details returns "OK" response + Given operation "GetSecurityMonitoringHistsignal" enabled + And new "GetSecurityMonitoringHistsignal" request + And request contains "histsignal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-siem + Scenario: Get a job's details returns "Bad Request" response + Given operation "GetHistoricalJob" enabled + And new "GetHistoricalJob" request + And request contains "job_id" parameter with value "inva-lid" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: Get a job's details returns "Not Found" response + Given operation "GetHistoricalJob" enabled + And new "GetHistoricalJob" request + And request contains "job_id" parameter with value "8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Get a job's details returns "OK" response + Given operation "GetHistoricalJob" enabled + And operation "RunHistoricalJob" enabled + And new "GetHistoricalJob" request + And there is a valid "historical_job" in the system + And request contains "job_id" parameter from "historical_job.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a job's hist signals returns "Bad Request" response + Given operation "GetSecurityMonitoringHistsignalsByJobId" enabled + And new "GetSecurityMonitoringHistsignalsByJobId" request + And request contains "job_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a job's hist signals returns "Not Found" response + Given operation "GetSecurityMonitoringHistsignalsByJobId" enabled + And new "GetSecurityMonitoringHistsignalsByJobId" request + And request contains "job_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a job's hist signals returns "OK" response + Given operation "GetSecurityMonitoringHistsignalsByJobId" enabled + And new "GetSecurityMonitoringHistsignalsByJobId" request + And request contains "job_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a list of security signals returns "Bad Request" response + Given new "SearchSecurityMonitoringSignals" request + And body with value {"filter": {"from": "2019-01-02T09:42:36.320Z", "query": "security:attack status:high", "to": "2019-01-03T09:42:36.320Z"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a list of security signals returns "OK" response + Given new "SearchSecurityMonitoringSignals" request + And body with value {"filter": {"from": "2019-01-02T09:42:36.320Z", "query": "security:attack status:high", "to": "2019-01-03T09:42:36.320Z"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/cloud-siem @with-pagination + Scenario: Get a list of security signals returns "OK" response with pagination + Given new "SearchSecurityMonitoringSignals" request + And body with value {"filter": {"from": "{{ timeISO("now-15m") }}", "query": "security:attack status:high", "to": "{{ timeISO("now") }}"}, "page": {"limit": 2}, "sort": "timestamp"} + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/k9-automation + Scenario: Get a mute rule returns "Not Found" response + Given operation "GetSecurityFindingsAutomationMuteRule" enabled + And new "GetSecurityFindingsAutomationMuteRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-automation + Scenario: Get a mute rule returns "Successfully retrieved the mute rule" response + Given operation "GetSecurityFindingsAutomationMuteRule" enabled + And there is a valid "valid_mute_rule" in the system + And new "GetSecurityFindingsAutomationMuteRule" request + And request contains "rule_id" parameter from "valid_mute_rule.data.id" + When the request is sent + Then the response status is 200 Successfully retrieved the mute rule + And the response "data.id" is equal to "{{ valid_mute_rule.data.id }}" + And the response "data.type" is equal to "mute_rules" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a quick list of security signals returns "Bad Request" response + Given new "ListSecurityMonitoringSignals" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a quick list of security signals returns "OK" response + Given new "ListSecurityMonitoringSignals" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/cloud-siem @with-pagination + Scenario: Get a quick list of security signals returns "OK" response with pagination + Given new "ListSecurityMonitoringSignals" request + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @team:DataDog/cloud-siem + Scenario: Get a rule's details returns "Not Found" response + Given new "GetSecurityMonitoringRule" request + And request contains "rule_id" parameter with value "abcde-12345" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Get a rule's details returns "OK" response + Given new "GetSecurityMonitoringRule" request + And there is a valid "security_rule" in the system + And request contains "rule_id" parameter from "security_rule.id" + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}" + And the response "id" has the same value as "security_rule.id" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a rule's version history returns "Bad Request" response + Given operation "GetRuleVersionHistory" enabled + And new "GetRuleVersionHistory" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a rule's version history returns "Not Found" response + Given operation "GetRuleVersionHistory" enabled + And new "GetRuleVersionHistory" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a rule's version history returns "OK" response + Given operation "GetRuleVersionHistory" enabled + And new "GetRuleVersionHistory" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a security filter returns "Not Found" response + Given new "GetSecurityFilter" request + And request contains "security_filter_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Get a security filter returns "OK" response + Given there is a valid "security_filter" in the system + And new "GetSecurityFilter" request + And request contains "security_filter_id" parameter from "security_filter.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "security_filters" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.is_enabled" is equal to true + And the response "data.attributes.exclusion_filters[0].name" is equal to "Exclude logs from staging" + And the response "data.attributes.exclusion_filters[0].query" is equal to "source:staging" + + @replay-only @team:DataDog/cloud-siem + Scenario: Get a signal's details returns "Not Found" response + Given new "GetSecurityMonitoringSignal" request + And request contains "signal_id" parameter with value "AQAAAYNqUBVU4-rffwAAAABBWU5xVUJWVUFBQjJBd3ptCL3QUEm3nt2" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-siem + Scenario: Get a signal's details returns "OK" response + Given new "GetSecurityMonitoringSignal" request + And request contains "signal_id" parameter with value "AQAAAYNqUBVU4-rffwAAAABBWU5xVUJWVUFBQjJBd3ptMDdQUnF3QUE" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get a single entity context returns "Bad Request" response + Given operation "GetSingleEntityContext" enabled + And new "GetSingleEntityContext" 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/cloud-siem + Scenario: Get a single entity context returns "Not Found" response + Given operation "GetSingleEntityContext" enabled + And new "GetSingleEntityContext" 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/cloud-siem + Scenario: Get a single entity context returns "OK" response + Given operation "GetSingleEntityContext" enabled + And new "GetSingleEntityContext" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip-validation @team:DataDog/cloud-siem + Scenario: Get a suppression rule returns "Not Found" response + Given new "GetSecurityMonitoringSuppression" request + And request contains "suppression_id" parameter with value "this-does-not-exist" + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Get a suppression rule returns "OK" response + Given new "GetSecurityMonitoringSuppression" request + And there is a valid "suppression" in the system + And request contains "suppression_id" parameter from "suppression.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.rule_query" has the same value as "suppression.data.attributes.rule_query" + And the response "data.attributes.suppression_query" is equal to "env:test" + + @team:DataDog/cloud-siem + Scenario: Get a suppression's version history returns "Not Found" response + Given new "GetSuppressionVersionHistory" request + And request contains "suppression_id" parameter with value "this-does-not-exist" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Get a suppression's version history returns "OK" response + Given new "GetSuppressionVersionHistory" request + And there is a valid "suppression" in the system + And request contains "suppression_id" parameter from "suppression.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-automation + Scenario: Get a ticket creation rule returns "Not Found" response + Given operation "GetSecurityFindingsAutomationTicketCreationRule" enabled + And new "GetSecurityFindingsAutomationTicketCreationRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-automation + Scenario: Get a ticket creation rule returns "Successfully retrieved the ticket creation rule" response + Given operation "GetSecurityFindingsAutomationTicketCreationRule" enabled + And there is a valid "valid_ticket_creation_rule" in the system + And new "GetSecurityFindingsAutomationTicketCreationRule" request + And request contains "rule_id" parameter from "valid_ticket_creation_rule.data.id" + When the request is sent + Then the response status is 200 Successfully retrieved the ticket creation rule + And the response "data.id" is equal to "{{ valid_ticket_creation_rule.data.id }}" + And the response "data.type" is equal to "ticket_creation_rules" + + @team:DataDog/cloud-siem + Scenario: Get all critical assets returns "OK" response + Given new "ListSecurityMonitoringCriticalAssets" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-automation + Scenario: Get all due date rules returns "Successfully retrieved the list of due date rules" response + Given operation "ListSecurityFindingsAutomationDueDateRules" enabled + And there is a valid "valid_due_date_rule" in the system + And new "ListSecurityFindingsAutomationDueDateRules" request + When the request is sent + Then the response status is 200 Successfully retrieved the list of due date rules + And the response "data" has item with field "id" with value "{{ valid_due_date_rule.data.id }}" + + @team:DataDog/k9-automation + Scenario: Get all mute rules returns "Successfully retrieved the list of mute rules" response + Given operation "ListSecurityFindingsAutomationMuteRules" enabled + And there is a valid "valid_mute_rule" in the system + And new "ListSecurityFindingsAutomationMuteRules" request + When the request is sent + Then the response status is 200 Successfully retrieved the list of mute rules + And the response "data" has item with field "id" with value "{{ valid_mute_rule.data.id }}" + + @team:DataDog/cloud-siem + Scenario: Get all security filters returns "OK" response + Given new "ListSecurityFilters" request + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "attributes.filtered_data_type" with value "logs" + And the response "data" has item with field "attributes.is_builtin" with value true + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get all suppression rules returns "OK" response + Given new "ListSecurityMonitoringSuppressions" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-siem + Scenario: Get all suppression rules returns "OK" response with pagination + Given new "ListSecurityMonitoringSuppressions" request + And there is a valid "suppression" in the system + And there is a valid "suppression2" in the system + And request contains "page[size]" parameter with value 1 + And request contains "page[number]" parameter with value 0 + And request contains "query" parameter with value "id:{{ suppression.data.id }} OR id:{{ suppression2.data.id }}" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + + @team:DataDog/cloud-siem + Scenario: Get all suppression rules returns "OK" response with sort ascending + Given new "ListSecurityMonitoringSuppressions" request + And there is a valid "suppression" in the system + And there is a valid "suppression2" in the system + And request contains "sort" parameter with value "name" + And request contains "query" parameter with value "id:{{ suppression.data.id }} OR id:{{ suppression2.data.id }}" + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.name" is equal to "suppression {{ unique_hash }}" + + @team:DataDog/cloud-siem + Scenario: Get all suppression rules returns "OK" response with sort descending + Given new "ListSecurityMonitoringSuppressions" request + And there is a valid "suppression" in the system + And there is a valid "suppression2" in the system + And request contains "sort" parameter with value "-name" + And request contains "query" parameter with value "id:{{ suppression.data.id }} OR id:{{ suppression2.data.id }}" + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.name" is equal to "suppression2 {{ unique_hash }}" + + @team:DataDog/k9-automation + Scenario: Get all ticket creation rules returns "Successfully retrieved the list of ticket creation rules" response + Given operation "ListSecurityFindingsAutomationTicketCreationRules" enabled + And there is a valid "valid_ticket_creation_rule" in the system + And new "ListSecurityFindingsAutomationTicketCreationRules" request + When the request is sent + Then the response status is 200 Successfully retrieved the list of ticket creation rules + And the response "data" has item with field "id" with value "{{ valid_ticket_creation_rule.data.id }}" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get an entity context sync configuration returns "Not Found" response + Given operation "GetSecurityMonitoringIntegrationConfig" enabled + And new "GetSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get an entity context sync configuration returns "OK" response + Given operation "GetSecurityMonitoringIntegrationConfig" enabled + And new "GetSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get an indicator of compromise returns "Bad Request" response + Given operation "GetIndicatorOfCompromise" enabled + And new "GetIndicatorOfCompromise" request + And request contains "indicator" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @skip-terraform-config @team:DataDog/cloud-siem + Scenario: Get an indicator of compromise returns "Not Found" response + Given operation "GetIndicatorOfCompromise" enabled + And new "GetIndicatorOfCompromise" request + And request contains "indicator" parameter with value "this-indicator-does-not-exist.invalid" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @skip-terraform-config @team:DataDog/cloud-siem + Scenario: Get an indicator of compromise returns "OK" response + Given operation "GetIndicatorOfCompromise" enabled + And new "GetIndicatorOfCompromise" request + And request contains "indicator" parameter with value "192.0.2.1" + And request contains "include_triage_history" parameter with value true + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get content pack states returns "Not Found" response + Given operation "GetContentPacksStates" enabled + And new "GetContentPacksStates" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get content pack states returns "OK" response + Given operation "GetContentPacksStates" enabled + And new "GetContentPacksStates" request + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/cloud-siem + Scenario: Get critical assets affecting a specific rule returns "Not Found" response + Given new "GetCriticalAssetsAffectingRule" request + And request contains "rule_id" parameter with value "aaa-bbb-ccc-ddd" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Get critical assets affecting a specific rule returns "OK" response + Given new "GetCriticalAssetsAffectingRule" request + And there is a valid "security_rule" in the system + And request contains "rule_id" parameter from "security_rule.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get dataset dependencies returns "Bad Request" response + Given operation "BatchGetSecurityMonitoringDatasetDependencies" enabled + And new "BatchGetSecurityMonitoringDatasetDependencies" request + And body with value {"data": {"attributes": {"datasetIds": ["123e4567-e89b-12d3-a456-426614174000"]}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get dataset dependencies returns "OK" response + Given operation "BatchGetSecurityMonitoringDatasetDependencies" enabled + And new "BatchGetSecurityMonitoringDatasetDependencies" request + And body with value {"data": {"attributes": {"datasetIds": ["123e4567-e89b-12d3-a456-426614174000"]}}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get default rulesets for a language returns "Bad Request" response + Given operation "GetStaticAnalysisDefaultRulesets" enabled + And new "GetStaticAnalysisDefaultRulesets" request + And request contains "language" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get default rulesets for a language returns "OK" response + Given operation "GetStaticAnalysisDefaultRulesets" enabled + And new "GetStaticAnalysisDefaultRulesets" request + And request contains "language" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: Get details of a signal-based notification rule returns "Bad Request" response + Given new "GetSignalNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-security-posture-management + Scenario: Get details of a signal-based notification rule returns "Not Found" response + Given new "GetSignalNotificationRule" request + And request contains "id" parameter with value "000-000-000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-security-posture-management + Scenario: Get details of a signal-based notification rule returns "Notification rule details." response + Given there is a valid "valid_signal_notification_rule" in the system + And new "GetSignalNotificationRule" request + And request contains "id" parameter from "valid_signal_notification_rule.data.id" + When the request is sent + Then the response status is 200 Notification rule details. + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: Get details of a vulnerability notification rule returns "Bad Request" response + Given new "GetVulnerabilityNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-security-posture-management + Scenario: Get details of a vulnerability notification rule returns "Not Found" response + Given new "GetVulnerabilityNotificationRule" request + And request contains "id" parameter with value "000-000-000" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-security-posture-management + Scenario: Get details of a vulnerability notification rule returns "Notification rule details." response + Given there is a valid "valid_vulnerability_notification_rule" in the system + And new "GetVulnerabilityNotificationRule" request + And request contains "id" parameter from "valid_vulnerability_notification_rule.data.id" + When the request is sent + Then the response status is 200 Notification rule details. + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get entities related to a signal returns "Bad Request" response + Given operation "GetSignalEntities" enabled + And new "GetSignalEntities" request + And request contains "signal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get entities related to a signal returns "Not Found" response + Given operation "GetSignalEntities" enabled + And new "GetSignalEntities" request + And request contains "signal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get entities related to a signal returns "OK" response + Given operation "GetSignalEntities" enabled + And new "GetSignalEntities" request + And request contains "signal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get entity context returns "Bad Request" response + Given operation "GetEntityContext" enabled + And new "GetEntityContext" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get entity context returns "OK" response + Given operation "GetEntityContext" enabled + And new "GetEntityContext" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get investigation queries for a signal returns "Not Found" response + Given new "GetInvestigationLogQueriesMatchingSignal" request + And request contains "signal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/cloud-siem + Scenario: Get investigation queries for a signal returns "OK" response + Given new "GetInvestigationLogQueriesMatchingSignal" request + And request contains "signal_id" parameter with value "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "investigation_log_queries" + And the response "data[0]" has field "id" + And the response "data[0].attributes" has field "name" + And the response "data[0].attributes" has field "query_filter" + And the response "data[0].attributes" has field "url" + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get node types for a language returns "Bad Request" response + Given operation "GetStaticAnalysisNodeTypes" enabled + And new "GetStaticAnalysisNodeTypes" request + And request contains "language" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get node types for a language returns "OK" response + Given operation "GetStaticAnalysisNodeTypes" enabled + And new "GetStaticAnalysisNodeTypes" request + And request contains "language" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip-go @skip-java @skip-ruby @team:DataDog/cloud-siem + Scenario: Get rule version history returns "OK" response + Given operation "GetRuleVersionHistory" enabled + And new "GetRuleVersionHistory" request + And there is a valid "security_rule" in the system + And request contains "rule_id" parameter from "security_rule.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "security_rule.id" + And the response "data.type" is equal to "GetRuleVersionHistoryResponse" + And the response "data.attributes.count" is equal to 1 + And the response "data.attributes.data[1].rule.name" has the same value as "security_rule.name" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get sample log generation subscriptions returns "Bad Request" response + Given operation "ListSampleLogGenerationSubscriptions" enabled + And new "ListSampleLogGenerationSubscriptions" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get sample log generation subscriptions returns "OK" response + Given operation "ListSampleLogGenerationSubscriptions" enabled + And new "ListSampleLogGenerationSubscriptions" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get suggested actions for a signal returns "Not Found" response + Given new "GetSuggestedActionsMatchingSignal" request + And request contains "signal_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/cloud-siem + Scenario: Get suggested actions for a signal returns "OK" response + Given new "GetSuggestedActionsMatchingSignal" request + And request contains "signal_id" parameter with value "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "investigation_log_queries" + And the response "data[0]" has field "id" + And the response "data[0].attributes" has field "name" + And the response "data[0].attributes" has field "query_filter" + And the response "data[0].attributes" has field "url" + And the response "data[1].type" is equal to "recommended_blog_posts" + And the response "data[1]" has field "id" + And the response "data[1].attributes" has field "title" + And the response "data[1].attributes" has field "url" + + @team:DataDog/cloud-siem + Scenario: Get suppressions affecting a specific rule returns "Not Found" response + Given new "GetSuppressionsAffectingRule" request + And request contains "rule_id" parameter with value "aaa-bbb-ccc-ddd" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Get suppressions affecting a specific rule returns "OK" response + Given new "GetSuppressionsAffectingRule" request + And there is a valid "security_rule" in the system + And request contains "rule_id" parameter from "security_rule.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-siem + Scenario: Get suppressions affecting future rule returns "Bad Request" response + Given new "GetSuppressionsAffectingFutureRule" request + And body with value {"invalid_key":"invalid_value"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: Get suppressions affecting future rule returns "OK" response + Given new "GetSuppressionsAffectingFutureRule" request + And body from file "security_monitoring_future_rule_suppression_payload.json" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-security-posture-management + Scenario: Get the list of signal-based notification rules returns "The list of notification rules." response + Given there is a valid "valid_signal_notification_rule" in the system + And new "GetSignalNotificationRules" request + When the request is sent + Then the response status is 200 The list of notification rules. + + @team:DataDog/cloud-security-posture-management + Scenario: Get the list of vulnerability notification rules returns "The list of notification rules." response + Given there is a valid "valid_vulnerability_notification_rule" in the system + And new "GetVulnerabilityNotificationRules" request + When the request is sent + Then the response status is 200 The list of notification rules. + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get the version history of a dataset returns "Bad Request" response + Given operation "GetSecurityMonitoringDatasetVersionHistory" enabled + And new "GetSecurityMonitoringDatasetVersionHistory" request + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get the version history of a dataset returns "Not Found" response + Given operation "GetSecurityMonitoringDatasetVersionHistory" enabled + And new "GetSecurityMonitoringDatasetVersionHistory" request + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get the version history of a dataset returns "OK" response + Given operation "GetSecurityMonitoringDatasetVersionHistory" enabled + And new "GetSecurityMonitoringDatasetVersionHistory" request + And request contains "dataset_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Get the version history of security filters returns "OK" response + Given new "ListSecurityFilterVersions" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get tree-sitter WASM file returns "BLOB with the content of the WASM file" response + Given operation "GetStaticAnalysisTreeSitterWasm" enabled + And new "GetStaticAnalysisTreeSitterWasm" request + And request contains "file" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 BLOB with the content of the WASM file + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Get tree-sitter WASM file returns "Bad Request" response + Given operation "GetStaticAnalysisTreeSitterWasm" enabled + And new "GetStaticAnalysisTreeSitterWasm" request + And request contains "file" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: Import security vulnerabilities returns "Bad Request" response + Given operation "ImportSecurityVulnerabilities" enabled + And new "ImportSecurityVulnerabilities" request + And body with value {"bomFormat": "CycloneDX", "components": [{"bom-ref": "a3390fca-c315-41ae-ae05-af5e7859cdee", "name": "lodash", "purl": "pkg:npm/lodash@4.17.21", "type": "library", "version": "4.17.21"}], "metadata": {"component": {"bom-ref": "host-ref-abc123", "name": "i-12345", "type": "operating-system"}, "tools": {"components": [{"name": "my-scanner", "type": "application"}]}}, "specVersion": "1.5", "version": 1, "vulnerabilities": [{"advisories": [{"url": "https://example.com/advisory/CVE-2021-1234"}], "affects": [{"ref": "a3390fca-c315-41ae-ae05-af5e7859cdee"}], "analysis": {"state": "resolved"}, "cwes": [123, 345], "description": "Sample vulnerability detected in the application.", "detail": "Details about the vulnerability.", "id": "CVE-2021-1234", "ratings": [{"score": 9.0, "severity": "high", "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N"}], "references": [{"id": "GHSA-35m5-8cvj-8783", "source": {"url": "https://example.com"}}]}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: Import security vulnerabilities returns "Vulnerabilities accepted successfully." response + Given operation "ImportSecurityVulnerabilities" enabled + And new "ImportSecurityVulnerabilities" request + And body with value {"bomFormat": "CycloneDX", "components": [{"bom-ref": "a3390fca-c315-41ae-ae05-af5e7859cdee", "name": "lodash", "purl": "pkg:npm/lodash@4.17.21", "type": "library", "version": "4.17.21"}], "metadata": {"component": {"bom-ref": "host-ref-abc123", "name": "i-12345", "type": "operating-system"}, "tools": {"components": [{"name": "my-scanner", "type": "application"}]}}, "specVersion": "1.5", "version": 1, "vulnerabilities": [{"advisories": [{"url": "https://example.com/advisory/CVE-2021-1234"}], "affects": [{"ref": "a3390fca-c315-41ae-ae05-af5e7859cdee"}], "analysis": {"state": "resolved"}, "cwes": [123, 345], "description": "Sample vulnerability detected in the application.", "detail": "Details about the vulnerability.", "id": "CVE-2021-1234", "ratings": [{"score": 9.0, "severity": "high", "vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N"}], "references": [{"id": "GHSA-35m5-8cvj-8783", "source": {"url": "https://example.com"}}]}]} + When the request is sent + Then the response status is 200 Vulnerabilities accepted successfully. + + @team:DataDog/k9-cloud-vm + Scenario: List assets SBOMs returns "Bad request: Invalid pagination token." response + Given new "ListAssetsSBOMs" request + And request contains "page[token]" parameter with value "SERVICE:unknown" + And request contains "page[number]" parameter with value 1 + When the request is sent + Then the response status is 400 Bad request: Invalid pagination token. + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: List assets SBOMs returns "Bad request: The server cannot process the request due to invalid syntax in the request." response + Given new "ListAssetsSBOMs" request + When the request is sent + Then the response status is 400 Bad request: The server cannot process the request due to invalid syntax in the request. + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: List assets SBOMs returns "Not found: asset not found" response + Given new "ListAssetsSBOMs" request + When the request is sent + Then the response status is 404 Not found: asset not found + + @team:DataDog/k9-cloud-vm + Scenario: List assets SBOMs returns "OK" response + Given new "ListAssetsSBOMs" request + And request contains "filter[package_name]" parameter with value "pandas" + And request contains "filter[asset_type]" parameter with value "Service" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: List codegen rulesets returns "Bad Request" response + Given operation "ListStaticAnalysisCodegenRulesets" enabled + And new "ListStaticAnalysisCodegenRulesets" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: List codegen rulesets returns "OK" response + Given operation "ListStaticAnalysisCodegenRulesets" enabled + And new "ListStaticAnalysisCodegenRulesets" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: List datasets returns "Bad Request" response + Given operation "ListSecurityMonitoringDatasets" enabled + And new "ListSecurityMonitoringDatasets" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: List datasets returns "OK" response + Given operation "ListSecurityMonitoringDatasets" enabled + And new "ListSecurityMonitoringDatasets" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: List entity context sync configurations returns "OK" response + Given operation "ListSecurityMonitoringIntegrationConfigs" enabled + And new "ListSecurityMonitoringIntegrationConfigs" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: List findings returns "Bad Request: The server cannot process the request due to invalid syntax in the request." response + Given operation "ListFindings" enabled + And new "ListFindings" request + When the request is sent + Then the response status is 400 Bad Request: The server cannot process the request due to invalid syntax in the request. + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: List findings returns "Not Found: The requested finding cannot be found." response + Given operation "ListFindings" enabled + And new "ListFindings" request + When the request is sent + Then the response status is 404 Not Found: The requested finding cannot be found. + + @replay-only @team:DataDog/cloud-security-posture-management + Scenario: List findings returns "OK" response + Given operation "ListFindings" enabled + And new "ListFindings" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "finding" + + @team:DataDog/cloud-security-posture-management + Scenario: List findings returns "OK" response with details + Given operation "ListFindings" enabled + And new "ListFindings" request + And request contains "detailed_findings" parameter with value true + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-security-posture-management @with-pagination + Scenario: List findings returns "OK" response with pagination + Given operation "ListFindings" enabled + And new "ListFindings" request + When the request with pagination is sent + Then the response status is 200 OK + + @skip-terraform-config @team:DataDog/cloud-security-posture-management + Scenario: List findings with detection_type query param returns "OK" response + Given operation "ListFindings" enabled + And new "ListFindings" request + And request contains "filter[vulnerability_type]" parameter with value ["misconfiguration", "attack_path"] + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: List hist signals returns "Bad Request" response + Given operation "ListSecurityMonitoringHistsignals" enabled + And new "ListSecurityMonitoringHistsignals" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: List hist signals returns "Not Found" response + Given operation "ListSecurityMonitoringHistsignals" enabled + And new "ListSecurityMonitoringHistsignals" request + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: List hist signals returns "OK" response + Given operation "ListSecurityMonitoringHistsignals" enabled + And new "ListSecurityMonitoringHistsignals" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: List historical jobs returns "Bad Request" response + Given operation "ListHistoricalJobs" enabled + And new "ListHistoricalJobs" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: List historical jobs returns "OK" response + Given operation "ListHistoricalJobs" enabled + And new "ListHistoricalJobs" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-terraform-config @team:DataDog/cloud-siem + Scenario: List indicators of compromise returns "Bad Request" response + Given operation "ListIndicatorsOfCompromise" enabled + And new "ListIndicatorsOfCompromise" request + And request contains "query" parameter with value "invalid:::query" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @skip-terraform-config @team:DataDog/cloud-siem + Scenario: List indicators of compromise returns "OK" response + Given operation "ListIndicatorsOfCompromise" enabled + And new "ListIndicatorsOfCompromise" request + And request contains "limit" parameter with value 1 + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-siem + Scenario: List resource filters returns "Bad Request" response + Given new "GetResourceEvaluationFilters" request + And request contains "account_id" parameter with value "123456789" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: List resource filters returns "OK" response + Given new "GetResourceEvaluationFilters" request + And request contains "cloud_provider" parameter with value "aws" + And request contains "account_id" parameter with value "123456789" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: List rules returns "Bad Request" response + Given new "ListSecurityMonitoringRules" request + When the request is sent + Then the response status is 400 Bad Request + + @skip-validation @team:DataDog/cloud-siem + Scenario: List rules returns "OK" response + Given new "ListSecurityMonitoringRules" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cloud-vm + Scenario: List scanned assets metadata returns "Bad request: Invalid Pagination Token" response + Given operation "ListScannedAssetsMetadata" enabled + And new "ListScannedAssetsMetadata" request + And request contains "page[token]" parameter with value "unknown" + And request contains "page[number]" parameter with value 1 + When the request is sent + Then the response status is 400 Bad request: Invalid pagination token. + + @skip @team:DataDog/k9-cloud-vm + Scenario: List scanned assets metadata returns "Bad request: The server cannot process the request due to invalid syntax in the request." response + Given operation "ListScannedAssetsMetadata" enabled + And new "ListScannedAssetsMetadata" request + When the request is sent + Then the response status is 400 Bad request: The server cannot process the request due to invalid syntax in the request. + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: List scanned assets metadata returns "Not found: asset not found" response + Given operation "ListScannedAssetsMetadata" enabled + And new "ListScannedAssetsMetadata" request + When the request is sent + Then the response status is 404 Not found: asset not found + + @team:DataDog/k9-cloud-vm + Scenario: List scanned assets metadata returns "OK" response + Given operation "ListScannedAssetsMetadata" enabled + And new "ListScannedAssetsMetadata" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-security-posture-management @team:DataDog/k9-findings-platform + Scenario: List security findings returns "Bad Request" response + Given new "ListSecurityFindings" request + And request contains "page[cursor]" parameter with value "invalid_cursor" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-security-posture-management @team:DataDog/k9-findings-platform + Scenario: List security findings returns "OK" response + Given new "ListSecurityFindings" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-security-posture-management @team:DataDog/k9-findings-platform + Scenario: List security findings returns "OK" response with pagination + Given new "ListSecurityFindings" request + And request contains "page[limit]" parameter with value 5 + When the request is sent + Then the response status is 200 OK + And the response "data" has length 5 + And the response "meta.page" has field "after" + And the response "links" has field "next" + + @team:DataDog/k9-cloud-vm + Scenario: List vulnerabilities returns "Bad request: Invalid pagination token." response + Given operation "ListVulnerabilities" enabled + And new "ListVulnerabilities" request + And request contains "page[token]" parameter with value "unknown" + And request contains "page[number]" parameter with value 1 + When the request is sent + Then the response status is 400 Bad request: Invalid pagination token. + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: List vulnerabilities returns "Bad request: The server cannot process the request due to invalid syntax in the request." response + Given operation "ListVulnerabilities" enabled + And new "ListVulnerabilities" request + When the request is sent + Then the response status is 400 Bad request: The server cannot process the request due to invalid syntax in the request. + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: List vulnerabilities returns "Not found: There is no request associated with the provided token." response + Given operation "ListVulnerabilities" enabled + And new "ListVulnerabilities" request + When the request is sent + Then the response status is 404 Not found: There is no request associated with the provided token. + + @team:DataDog/k9-cloud-vm + Scenario: List vulnerabilities returns "OK" response + Given operation "ListVulnerabilities" enabled + And new "ListVulnerabilities" request + And request contains "filter[cvss.base.severity]" parameter with value "High" + And request contains "filter[asset.type]" parameter with value "Service" + And request contains "filter[tool]" parameter with value "Infra" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-cloud-vm + Scenario: List vulnerable assets returns "Bad request: Invalid Pagination Token" response + Given operation "ListVulnerableAssets" enabled + And new "ListVulnerableAssets" request + And request contains "page[token]" parameter with value "unknown" + And request contains "page[number]" parameter with value 1 + When the request is sent + Then the response status is 400 Bad request: Invalid pagination token. + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: List vulnerable assets returns "Bad request: The server cannot process the request due to invalid syntax in the request." response + Given operation "ListVulnerableAssets" enabled + And new "ListVulnerableAssets" request + When the request is sent + Then the response status is 400 Bad request: The server cannot process the request due to invalid syntax in the request. + + @generated @skip @team:DataDog/k9-cloud-vm + Scenario: List vulnerable assets returns "Not found: There is no request associated with the provided token." response + Given operation "ListVulnerableAssets" enabled + And new "ListVulnerableAssets" request + When the request is sent + Then the response status is 404 Not found: There is no request associated with the provided token. + + @team:DataDog/k9-cloud-vm + Scenario: List vulnerable assets returns "OK" response + Given operation "ListVulnerableAssets" enabled + And new "ListVulnerableAssets" request + And request contains "filter[type]" parameter with value "Host" + And request contains "filter[repository_url]" parameter with value "github.com/datadog/dd-go" + And request contains "filter[risks.in_production]" parameter with value true + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Modify the triage assignee of a security signal returns "Bad Request" response + Given new "EditSecurityMonitoringSignalAssignee" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"assignee": {"name": null, "uuid": "773b045d-ccf8-4808-bd3b-955ef6a8c940"}}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Modify the triage assignee of a security signal returns "Not Found" response + Given new "EditSecurityMonitoringSignalAssignee" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"assignee": {"name": null, "uuid": "773b045d-ccf8-4808-bd3b-955ef6a8c940"}}}} + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/cloud-siem + Scenario: Modify the triage assignee of a security signal returns "OK" response + Given new "EditSecurityMonitoringSignalAssignee" request + And request contains "signal_id" parameter with value "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + And body with value {"data": {"attributes": {"assignee": {"uuid": ""}}}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-investigation + Scenario: Mute or unmute security findings returns "Accepted" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "To be resolved later.", "expire_at": 1778721573794, "is_muted": true, "reason": "PENDING_FIX"}}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 202 Accepted + + @generated @skip @team:DataDog/k9-investigation + Scenario: Mute or unmute security findings returns "Bad Request" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "To be resolved later.", "expire_at": 1778721573794, "is_muted": true, "reason": "PENDING_FIX"}}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-investigation + Scenario: Mute or unmute security findings returns "Not Found" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "To be resolved later.", "expire_at": 1778721573794, "is_muted": true, "reason": "PENDING_FIX"}}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-investigation + Scenario: Mute or unmute security findings returns "Unprocessable Entity" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "To be resolved later.", "expire_at": 1778721573794, "is_muted": true, "reason": "PENDING_FIX"}}, "id": "00000000-0000-0000-0000-000000000001", "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @team:DataDog/k9-investigation + Scenario: Mute security findings returns "Accepted" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "To be resolved later.", "expire_at": 1778721573794, "is_muted": true, "reason": "RISK_ACCEPTED"}}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwMC0wYmd-MDE4NjcyMDJkMzE4MDE5ODY5MGE4ZmQ2MmFlMjg0Y2M=", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 202 Accepted + + @team:DataDog/k9-investigation + Scenario: Mute security findings returns "Not Found" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "To be resolved later.", "expire_at": 1778721573794, "is_muted": true, "reason": "RISK_ACCEPTED"}}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-investigation + Scenario: Mute security findings returns "Unprocessable Entity" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "To be resolved later.", "expire_at": 1, "is_muted": true, "reason": "RISK_ACCEPTED"}}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @team:DataDog/cloud-security-posture-management + Scenario: Patch a signal-based notification rule returns "Bad Request" response + Given new "PatchSignalNotificationRule" request + And there is a valid "valid_signal_notification_rule" in the system + And request contains "id" parameter from "valid_signal_notification_rule.data.id" + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400}, "id": "aaa-bbb-ccc", "type": "notification_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-security-posture-management + Scenario: Patch a signal-based notification rule returns "Not Found" response + Given new "PatchSignalNotificationRule" request + And request contains "id" parameter with value "000-000-000" + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400, "version": 1}, "id": "aaa-bbb-ccc", "type": "notification_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-security-posture-management + Scenario: Patch a signal-based notification rule returns "Notification rule successfully patched." response + Given new "PatchSignalNotificationRule" request + And there is a valid "valid_signal_notification_rule" in the system + And request contains "id" parameter from "valid_signal_notification_rule.data.id" + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400, "version": 1}, "id": "aaa-bbb-ccc", "type": "notification_rules"}} + When the request is sent + Then the response status is 200 Notification rule successfully patched. + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: Patch a signal-based notification rule returns "The server cannot process the request because it contains invalid data." response + Given new "PatchSignalNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "routing": {"mode": "manual"}, "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400, "version": 1}, "id": "aaa-bbb-ccc", "type": "notification_rules"}} + When the request is sent + Then the response status is 422 The server cannot process the request because it contains invalid data. + + @team:DataDog/cloud-security-posture-management + Scenario: Patch a vulnerability-based notification rule returns "Bad Request" response + Given new "PatchVulnerabilityNotificationRule" request + And there is a valid "valid_vulnerability_notification_rule" in the system + And request contains "id" parameter from "valid_vulnerability_notification_rule.data.id" + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400}, "id": "aaa-bbb-ccc", "type": "notification_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-security-posture-management + Scenario: Patch a vulnerability-based notification rule returns "Not Found" response + Given new "PatchVulnerabilityNotificationRule" request + And request contains "id" parameter with value "000-000-000" + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400, "version": 1}, "id": "aaa-bbb-ccc", "type": "notification_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-security-posture-management + Scenario: Patch a vulnerability-based notification rule returns "Notification rule successfully patched." response + Given new "PatchVulnerabilityNotificationRule" request + And there is a valid "valid_vulnerability_notification_rule" in the system + And request contains "id" parameter from "valid_vulnerability_notification_rule.data.id" + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400, "version": 1}, "id": "aaa-bbb-ccc", "type": "notification_rules"}} + When the request is sent + Then the response status is 200 Notification rule successfully patched. + + @generated @skip @team:DataDog/cloud-security-posture-management + Scenario: Patch a vulnerability-based notification rule returns "The server cannot process the request because it contains invalid data." response + Given new "PatchVulnerabilityNotificationRule" request + And request contains "id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "routing": {"mode": "manual"}, "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400, "version": 1}, "id": "aaa-bbb-ccc", "type": "notification_rules"}} + When the request is sent + Then the response status is 422 The server cannot process the request because it contains invalid data. + + @generated @skip @team:DataDog/k9-automation + Scenario: Reorder due date rules returns "Bad Request" response + Given operation "ReorderSecurityFindingsAutomationDueDateRules" enabled + And new "ReorderSecurityFindingsAutomationDueDateRules" request + And body with value {"data": [{"id": "00000000-0000-0000-0000-000000000000", "type": "due_date_rules"}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-automation + Scenario: Reorder due date rules returns "Successfully reordered the due date rules" response + Given operation "ReorderSecurityFindingsAutomationDueDateRules" enabled + And there is a valid "valid_due_date_rule" in the system + And new "ReorderSecurityFindingsAutomationDueDateRules" request + And body with value {"data": [{"id": "{{ valid_due_date_rule.data.id }}", "type": "due_date_rules"}]} + When the request is sent + Then the response status is 200 Successfully reordered the due date rules + + @generated @skip @team:DataDog/k9-automation + Scenario: Reorder due date rules returns "Unprocessable Entity" response + Given operation "ReorderSecurityFindingsAutomationDueDateRules" enabled + And new "ReorderSecurityFindingsAutomationDueDateRules" request + And body with value {"data": [{"id": "00000000-0000-0000-0000-000000000000", "type": "due_date_rules"}]} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/k9-automation + Scenario: Reorder mute rules returns "Bad Request" response + Given operation "ReorderSecurityFindingsAutomationMuteRules" enabled + And new "ReorderSecurityFindingsAutomationMuteRules" request + And body with value {"data": [{"id": "00000000-0000-0000-0000-000000000000", "type": "mute_rules"}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-automation + Scenario: Reorder mute rules returns "Successfully reordered the mute rules" response + Given operation "ReorderSecurityFindingsAutomationMuteRules" enabled + And there is a valid "valid_mute_rule" in the system + And new "ReorderSecurityFindingsAutomationMuteRules" request + And body with value {"data": [{"id": "{{ valid_mute_rule.data.id }}", "type": "mute_rules"}]} + When the request is sent + Then the response status is 200 Successfully reordered the mute rules + + @generated @skip @team:DataDog/k9-automation + Scenario: Reorder mute rules returns "Unprocessable Entity" response + Given operation "ReorderSecurityFindingsAutomationMuteRules" enabled + And new "ReorderSecurityFindingsAutomationMuteRules" request + And body with value {"data": [{"id": "00000000-0000-0000-0000-000000000000", "type": "mute_rules"}]} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/k9-automation + Scenario: Reorder ticket creation rules returns "Bad Request" response + Given operation "ReorderSecurityFindingsAutomationTicketCreationRules" enabled + And new "ReorderSecurityFindingsAutomationTicketCreationRules" request + And body with value {"data": [{"id": "00000000-0000-0000-0000-000000000000", "type": "ticket_creation_rules"}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/k9-automation + Scenario: Reorder ticket creation rules returns "Successfully reordered the ticket creation rules" response + Given operation "ReorderSecurityFindingsAutomationTicketCreationRules" enabled + And there is a valid "valid_ticket_creation_rule" in the system + And new "ReorderSecurityFindingsAutomationTicketCreationRules" request + And body with value {"data": [{"id": "{{ valid_ticket_creation_rule.data.id }}", "type": "ticket_creation_rules"}]} + When the request is sent + Then the response status is 200 Successfully reordered the ticket creation rules + + @generated @skip @team:DataDog/k9-automation + Scenario: Reorder ticket creation rules returns "Unprocessable Entity" response + Given operation "ReorderSecurityFindingsAutomationTicketCreationRules" enabled + And new "ReorderSecurityFindingsAutomationTicketCreationRules" request + And body with value {"data": [{"id": "00000000-0000-0000-0000-000000000000", "type": "ticket_creation_rules"}]} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/cloud-siem + Scenario: Restore a rule to a historical version returns "Bad Request" response + Given operation "RestoreSecurityMonitoringRule" enabled + And new "RestoreSecurityMonitoringRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And request contains "version" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: Restore a rule to a historical version returns "Conflict" response + Given operation "RestoreSecurityMonitoringRule" enabled + And there is a valid "security_rule" in the system + And there is a valid "security_rule_updated" in the system + And new "RestoreSecurityMonitoringRule" request + And request contains "rule_id" parameter from "security_rule.id" + And request contains "version" parameter with value 2 + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/cloud-siem + Scenario: Restore a rule to a historical version returns "Not Found" response + Given operation "RestoreSecurityMonitoringRule" enabled + And there is a valid "security_rule" in the system + And new "RestoreSecurityMonitoringRule" request + And request contains "rule_id" parameter from "security_rule.id" + And request contains "version" parameter with value 9999 + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Restore a rule to a historical version returns "OK" response + Given operation "RestoreSecurityMonitoringRule" enabled + And there is a valid "security_rule" in the system + And there is a valid "security_rule_updated" in the system + And new "RestoreSecurityMonitoringRule" request + And request contains "rule_id" parameter from "security_rule.id" + And request contains "version" parameter with value 1 + When the request is sent + Then the response status is 200 OK + And the response "id" has the same value as "security_rule.id" + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Returns a list of Secrets rules returns "OK" response + Given operation "GetSecretsRules" enabled + And new "GetSecretsRules" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/k9-vm-ast + Scenario: Ruleset get multiple returns "OK" response + Given operation "ListMultipleRulesets" enabled + And new "ListMultipleRulesets" request + And body with value {"data": {"attributes": {"rulesets": []}, "type": "get_multiple_rulesets_request"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-siem + Scenario: Run a historical job returns "Bad Request" response + Given operation "RunHistoricalJob" enabled + And new "RunHistoricalJob" request + And body with value {"data":{"type":"historicalDetectionsJobCreate","attributes":{"jobDefinition":{"type":"log_detection","name":"Excessive number of failed attempts.","queries":[{"query":"source:non_existing_src_weekend","aggregation":"count","groupByFields":[],"distinctFields":[]}],"cases":[{"name":"Condition 1","status":"info","notifications":[],"condition":"a > 1"}],"options":{"keepAlive":3600,"maxSignalDuration":86400,"evaluationWindow":900},"message":"A large number of failed login attempts.","tags":[],"from":1730387522611,"to":1730391122611,"index":"non_existing_index"}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: Run a historical job returns "Not Found" response + Given operation "RunHistoricalJob" enabled + And new "RunHistoricalJob" request + And body with value {"data": { "type": "historicalDetectionsJobCreate", "attributes": {"fromRule": {"from": 1730201035064, "id": "non-existng", "index": "main", "notifications": [], "to": 1730204635115}}}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Run a historical job returns "Status created" response + Given operation "RunHistoricalJob" enabled + And new "RunHistoricalJob" request + And body with value {"data":{"type":"historicalDetectionsJobCreate","attributes":{"jobDefinition":{"type":"log_detection","name":"Excessive number of failed attempts.","queries":[{"query":"source:non_existing_src_weekend","aggregation":"count","groupByFields":[],"distinctFields":[]}],"cases":[{"name":"Condition 1","status":"info","notifications":[],"condition":"a > 1"}],"options":{"keepAlive":3600,"maxSignalDuration":86400,"evaluationWindow":900},"message":"A large number of failed login attempts.","tags":[],"from":1730387522611,"to":1730387532611,"index":"main"}}}} + When the request is sent + Then the response status is 201 Status created + + @generated @skip @team:DataDog/cloud-siem + Scenario: Search hist signals returns "Bad Request" response + Given operation "SearchSecurityMonitoringHistsignals" enabled + And new "SearchSecurityMonitoringHistsignals" request + And body with value {"filter": {"from": "2019-01-02T09:42:36.320Z", "query": "security:attack status:high", "to": "2019-01-03T09:42:36.320Z"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Search hist signals returns "Not Found" response + Given operation "SearchSecurityMonitoringHistsignals" enabled + And new "SearchSecurityMonitoringHistsignals" request + And body with value {"filter": {"from": "2019-01-02T09:42:36.320Z", "query": "security:attack status:high", "to": "2019-01-03T09:42:36.320Z"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Search hist signals returns "OK" response + Given operation "SearchSecurityMonitoringHistsignals" enabled + And new "SearchSecurityMonitoringHistsignals" request + And body with value {"filter": {"from": "2019-01-02T09:42:36.320Z", "query": "security:attack status:high", "to": "2019-01-03T09:42:36.320Z"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-security-posture-management @team:DataDog/k9-findings-platform + Scenario: Search security findings returns "Bad Request" response + Given new "SearchSecurityFindings" request + And body with value {"page": {"cursor": "invalid_cursor"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-security-posture-management @team:DataDog/k9-findings-platform + Scenario: Search security findings returns "OK" response + Given new "SearchSecurityFindings" request + And body with value {"data": {"attributes": {"filter": "@severity:(critical OR high)"}}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/cloud-security-posture-management @team:DataDog/k9-findings-platform @with-pagination + Scenario: Search security findings returns "OK" response with pagination + Given new "SearchSecurityFindings" request + And body with value {"data": {"attributes": {"filter": "@severity:(critical OR high)", "page": {"limit": 1}}}} + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + And the response "meta.page" has field "after" + And the response "links" has field "next" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Subscribe to sample log generation returns "Bad Request" response + Given operation "CreateSampleLogGenerationSubscription" enabled + And new "CreateSampleLogGenerationSubscription" request + And body with value {"data": {"attributes": {"content_pack_id": "aws-cloudtrail", "duration": "3d"}, "type": "subscription_requests"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Subscribe to sample log generation returns "OK" response + Given operation "CreateSampleLogGenerationSubscription" enabled + And new "CreateSampleLogGenerationSubscription" request + And body with value {"data": {"attributes": {"content_pack_id": "aws-cloudtrail", "duration": "3d"}, "type": "subscription_requests"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Test a notification rule returns "Bad Request" response + Given new "SendSecurityMonitoringNotificationPreview" request + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "routing": {"mode": "manual"}, "selectors": {"query": "(source:production_service OR env:prod)", "rule_types": ["misconfiguration", "attack_path"], "severities": ["critical"], "trigger_source": "security_findings"}, "targets": ["@john.doe@email.com"], "time_aggregation": 86400}, "type": "notification_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: Test a notification rule returns "OK" response + Given new "SendSecurityMonitoringNotificationPreview" request + And body with value {"data": {"attributes": {"enabled": true, "name": "Rule 1", "selectors": {"query": "env:prod", "rule_types": ["log_detection"], "severities": ["critical"], "trigger_source": "security_signals"}, "targets": ["@john.doe@email.com"]}, "type": "notification_rules"}} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/cloud-siem + Scenario: Test a rule returns "Bad Request" response + Given new "TestSecurityMonitoringRule" request + And body with value {"rule": {"cases": [], "filters": [{"action": "require"}], "hasExtendedTitle": true, "isEnabled": true, "message": "", "name": "My security monitoring rule.", "options": {"decreaseCriticalityBasedOnEnv": false, "detectionMethod": "threshold", "evaluationWindow": 0, "hardcodedEvaluatorType": "log4shell", "impossibleTravelOptions": {"baselineUserLocations": true}, "keepAlive": 0, "maxSignalDuration": 0, "newValueOptions": {"forgetAfter": 1, "learningDuration": 0, "learningMethod": "duration", "learningThreshold": 0}, "thirdPartyRuleOptions": {"defaultNotifications": [], "defaultStatus": "critical", "rootQueries": [{"groupByFields": [], "query": "source:cloudtrail"}]}}, "queries": [], "tags": ["env:prod", "team:security"], "thirdPartyCases": [], "type": "application_security"}, "ruleQueryPayloads": [{"expectedResult": true, "index": 0, "payload": {"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}}]} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/cloud-siem + Scenario: Test a rule returns "Not Found" response + Given new "TestSecurityMonitoringRule" request + And body with value {"rule": {"cases": [], "filters": [{"action": "require"}], "hasExtendedTitle": true, "isEnabled": true, "message": "", "name": "My security monitoring rule.", "options": {"decreaseCriticalityBasedOnEnv": false, "detectionMethod": "threshold", "evaluationWindow": 0, "hardcodedEvaluatorType": "log4shell", "impossibleTravelOptions": {"baselineUserLocations": true}, "keepAlive": 0, "maxSignalDuration": 0, "newValueOptions": {"forgetAfter": 1, "learningDuration": 0, "learningMethod": "duration", "learningThreshold": 0}, "thirdPartyRuleOptions": {"defaultNotifications": [], "defaultStatus": "critical", "rootQueries": [{"groupByFields": [], "query": "source:cloudtrail"}]}}, "queries": [], "tags": ["env:prod", "team:security"], "thirdPartyCases": [], "type": "application_security"}, "ruleQueryPayloads": [{"expectedResult": true, "index": 0, "payload": {"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}}]} + When the request is sent + Then the response status is 404 Not Found + + @skip-go @skip-java @skip-ruby @skip-typescript @team:DataDog/cloud-siem + Scenario: Test a rule returns "OK" response + Given new "TestSecurityMonitoringRule" request + And body with value {"rule": {"cases": [{"name": "","status": "info","notifications": [],"condition": "a > 0"}],"hasExtendedTitle": true,"isEnabled": true,"message": "My security monitoring rule message.","name": "My security monitoring rule.","options": {"decreaseCriticalityBasedOnEnv": false,"detectionMethod": "threshold","evaluationWindow": 0,"keepAlive": 0,"maxSignalDuration": 0},"queries": [{"query": "source:source_here","groupByFields": ["@userIdentity.assumed_role"],"distinctFields": [],"aggregation": "count","name": ""}],"tags": ["env:prod", "team:security"],"type": "log_detection"}, "ruleQueryPayloads": [{"expectedResult": true,"index": 0,"payload": {"ddsource": "source_here","ddtags": "env:staging,version:5.1","hostname": "i-012345678","message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World","service": "payment","userIdentity": {"assumed_role" : "fake assumed_role"}}}]} + When the request is sent + Then the response status is 200 OK + And the response "results[0]" is equal to true + + @skip @team:DataDog/cloud-siem + Scenario: Test an existing rule returns "Bad Request" response + Given new "TestExistingSecurityMonitoringRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"ruleQueryPayloads": [{"expectedResult": true, "index": 0, "payload": {"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}}]} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/cloud-siem + Scenario: Test an existing rule returns "Not Found" response + Given new "TestExistingSecurityMonitoringRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"ruleQueryPayloads": [{"expectedResult": true, "index": 0, "payload": {"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}}]} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/cloud-siem + Scenario: Test an existing rule returns "OK" response + Given new "TestExistingSecurityMonitoringRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"ruleQueryPayloads": [{"expectedResult": true, "index": 0, "payload": {"ddsource": "nginx", "ddtags": "env:staging,version:5.1", "hostname": "i-012345678", "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", "service": "payment"}}]} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/k9-investigation + Scenario: Unmute security findings returns "Accepted" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "Resolved.", "is_muted": false, "reason": "NO_PENDING_FIX"}}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwMC0wYmd-MDE4NjcyMDJkMzE4MDE5ODY5MGE4ZmQ2MmFlMjg0Y2M=", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 202 Accepted + + @team:DataDog/k9-investigation + Scenario: Unmute security findings returns "Not Found" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "Resolved.", "is_muted": false, "reason": "NO_PENDING_FIX"}}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-investigation + Scenario: Unmute security findings returns "Unprocessable Entity" response + Given new "MuteSecurityFindings" request + And body with value {"data": {"attributes": {"mute": {"description": "Resolved.", "is_muted": false, "reason": "RISK_ACCEPTED"}}, "relationships": {"findings": {"data": [{"id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", "type": "findings"}]}}, "type": "mute"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/cloud-siem + Scenario: Unsubscribe from sample log generation returns "Bad Request" response + Given operation "DeleteSampleLogGenerationSubscription" enabled + And new "DeleteSampleLogGenerationSubscription" request + And request contains "content_pack_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Unsubscribe from sample log generation returns "OK" response + Given operation "DeleteSampleLogGenerationSubscription" enabled + And new "DeleteSampleLogGenerationSubscription" request + And request contains "content_pack_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @skip-validation @team:DataDog/cloud-siem + Scenario: Update a cloud configuration rule's details returns "OK" response + Given new "UpdateSecurityMonitoringRule" request + And there is a valid "cloud_configuration_rule" in the system + And request contains "rule_id" parameter from "cloud_configuration_rule.id" + And body with value {"name":"{{ unique }}_cloud_updated","isEnabled":false,"cases":[{"status":"info","notifications":[]}],"options":{"complianceRuleOptions":{"resourceType":"gcp_compute_disk", "regoRule":{"policy":"package datadog\n\nimport data.datadog.output as dd_output\n\nimport future.keywords.contains\nimport future.keywords.if\nimport future.keywords.in\n\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\n\neval(iam_service_account_key) = \"skip\" if {\n\tiam_service_account_key.disabled\n} else = \"pass\" if {\n\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\n} else = \"fail\"\n\n# This part remains unchanged for all rules\nresults contains result if {\n\tsome resource in input.resources[input.main_resource_type]\n\tresult := dd_output.format(resource, eval(resource))\n}\n","resourceTypes":["gcp_compute_disk"]}}},"message":"ddd","tags":[],"complianceSignalOptions":{"userActivationStatus":false,"userGroupByFields":[]}} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}_cloud_updated" + And the response "id" has the same value as "cloud_configuration_rule.id" + + @skip @team:DataDog/cloud-siem + Scenario: Update a critical asset returns "Bad Request" response + Given new "UpdateSecurityMonitoringCriticalAsset" request + And request contains "critical_asset_id" parameter with value "00000000-0000-0000-0000-000000000000" + And body with value {"data": {"type": "critical_assets", "attributes": {"severity": "invalid_severity"}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a critical asset returns "Concurrent Modification" response + Given new "UpdateSecurityMonitoringCriticalAsset" request + And request contains "critical_asset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "Production database servers handling PII", "enabled": true, "query": "security:monitoring", "rule_query": "type:log_detection source:cloudtrail", "severity": "increase", "tags": ["technique:T1110-brute-force", "source:cloudtrail"], "version": 1}, "type": "critical_assets"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @team:DataDog/cloud-siem + Scenario: Update a critical asset returns "Not Found" response + Given new "UpdateSecurityMonitoringCriticalAsset" request + And request contains "critical_asset_id" parameter with value "00000000-0000-0000-0000-000000000001" + And body with value {"data": {"type": "critical_assets", "attributes": {"severity": "high"}}} + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Update a critical asset returns "OK" response + Given new "UpdateSecurityMonitoringCriticalAsset" request + And there is a valid "critical_asset" in the system + And request contains "critical_asset_id" parameter from "critical_asset.data.id" + And body with value {"data": {"type": "critical_assets", "attributes": {"enabled": false, "query": "no:alert", "rule_query": "type:(log_detection OR signal_correlation OR workload_security OR application_security) ruleId:djg-ktx-ipq", "severity": "decrease", "tags": ["env:production"], "version": 1}}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "critical_assets" + And the response "data.attributes.severity" is equal to "decrease" + And the response "data.attributes.enabled" is equal to false + And the response "data.attributes.version" is equal to 2 + + @team:DataDog/cloud-siem + Scenario: Update a custom framework returns "Bad Request" response + Given new "UpdateCustomFramework" request + And request contains "handle" parameter with value "create-framework-new" + And request contains "version" parameter with value "10" + And body with value {"data": {"attributes": {"handle": "", "name": "", "requirements": [{"controls": [{"name": "", "rules_id": [""]}], "name": ""}], "version": ""}, "type": "custom_framework"}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/cloud-siem + Scenario: Update a custom framework returns "OK" response + Given there is a valid "custom_framework" in the system + And new "UpdateCustomFramework" request + And request contains "handle" parameter with value "create-framework-new" + And request contains "version" parameter with value "10" + And body with value {"data":{"type":"custom_framework","attributes":{"name":"name","handle":"create-framework-new","version":"10","icon_url":"test-url","requirements":[{"name":"requirement","controls":[{"name":"control","rules_id":["def-000-be9"]}]}]}}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a dataset returns "Bad Request" response + Given operation "UpdateSecurityMonitoringDataset" enabled + And new "UpdateSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"definition": {"columns": [{"column": "message", "type": "string"}], "data_source": "logs", "indexes": [], "name": "sample_dataset", "query_filter": "status = 'active'", "search": {"query": "*"}, "storage": "hot", "table_name": "my_reference_table", "time_window": {"from": 1700000000000, "to": 1700003600000}}, "description": "A sample dataset used for detection rules.", "version": 1}, "type": "datasetUpdate"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a dataset returns "Conflict" response + Given operation "UpdateSecurityMonitoringDataset" enabled + And new "UpdateSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"definition": {"columns": [{"column": "message", "type": "string"}], "data_source": "logs", "indexes": [], "name": "sample_dataset", "query_filter": "status = 'active'", "search": {"query": "*"}, "storage": "hot", "table_name": "my_reference_table", "time_window": {"from": 1700000000000, "to": 1700003600000}}, "description": "A sample dataset used for detection rules.", "version": 1}, "type": "datasetUpdate"}} + When the request is sent + Then the response status is 409 Conflict + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a dataset returns "No Content" response + Given operation "UpdateSecurityMonitoringDataset" enabled + And new "UpdateSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"definition": {"columns": [{"column": "message", "type": "string"}], "data_source": "logs", "indexes": [], "name": "sample_dataset", "query_filter": "status = 'active'", "search": {"query": "*"}, "storage": "hot", "table_name": "my_reference_table", "time_window": {"from": 1700000000000, "to": 1700003600000}}, "description": "A sample dataset used for detection rules.", "version": 1}, "type": "datasetUpdate"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a dataset returns "Not Found" response + Given operation "UpdateSecurityMonitoringDataset" enabled + And new "UpdateSecurityMonitoringDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"definition": {"columns": [{"column": "message", "type": "string"}], "data_source": "logs", "indexes": [], "name": "sample_dataset", "query_filter": "status = 'active'", "search": {"query": "*"}, "storage": "hot", "table_name": "my_reference_table", "time_window": {"from": 1700000000000, "to": 1700003600000}}, "description": "A sample dataset used for detection rules.", "version": 1}, "type": "datasetUpdate"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/k9-automation + Scenario: Update a due date rule returns "Bad Request" response + Given operation "UpdateSecurityFindingsAutomationDueDateRule" enabled + And new "UpdateSecurityFindingsAutomationDueDateRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"due_days_per_severity": [{"due_in_days": 7, "severity": "critical"}], "due_from": "first_seen", "reason_description": "Applied for production findings only"}, "enabled": true, "name": "Critical findings due in 7 days", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "due_date_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-automation + Scenario: Update a due date rule returns "Not Found" response + Given operation "UpdateSecurityFindingsAutomationDueDateRule" enabled + And new "UpdateSecurityFindingsAutomationDueDateRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"due_days_per_severity": [{"due_in_days": 7, "severity": "critical"}], "due_from": "first_seen", "reason_description": "Applied for production findings only"}, "enabled": true, "name": "Critical findings due in 7 days", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "due_date_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-automation + Scenario: Update a due date rule returns "Successfully updated the due date rule" response + Given operation "UpdateSecurityFindingsAutomationDueDateRule" enabled + And there is a valid "valid_due_date_rule" in the system + And new "UpdateSecurityFindingsAutomationDueDateRule" request + And request contains "rule_id" parameter from "valid_due_date_rule.data.id" + And body with value {"data": {"attributes": {"action": {"due_days_per_severity": [{"due_in_days": 14, "severity": "critical"}], "due_from": "first_seen"}, "enabled": false, "name": "{{ unique }}", "rule": {"finding_types": ["misconfiguration"], "query": "env:staging"}}, "type": "due_date_rules"}} + When the request is sent + Then the response status is 200 Successfully updated the due date rule + And the response "data.id" is equal to "{{ valid_due_date_rule.data.id }}" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @generated @skip @team:DataDog/k9-automation + Scenario: Update a due date rule returns "Unprocessable Entity" response + Given operation "UpdateSecurityFindingsAutomationDueDateRule" enabled + And new "UpdateSecurityFindingsAutomationDueDateRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"due_days_per_severity": [{"due_in_days": 7, "severity": "critical"}], "due_from": "first_seen", "reason_description": "Applied for production findings only"}, "enabled": true, "name": "Critical findings due in 7 days", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "due_date_rules"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/k9-automation + Scenario: Update a mute rule returns "Bad Request" response + Given operation "UpdateSecurityFindingsAutomationMuteRule" enabled + And new "UpdateSecurityFindingsAutomationMuteRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"expire_at": 4070908800000, "reason": "risk_accepted", "reason_description": "Accepted for dev environments only"}, "enabled": true, "name": "Mute accepted risks in dev", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "mute_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-automation + Scenario: Update a mute rule returns "Not Found" response + Given operation "UpdateSecurityFindingsAutomationMuteRule" enabled + And new "UpdateSecurityFindingsAutomationMuteRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"expire_at": 4070908800000, "reason": "risk_accepted", "reason_description": "Accepted for dev environments only"}, "enabled": true, "name": "Mute accepted risks in dev", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "mute_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-automation + Scenario: Update a mute rule returns "Successfully updated the mute rule" response + Given operation "UpdateSecurityFindingsAutomationMuteRule" enabled + And there is a valid "valid_mute_rule" in the system + And new "UpdateSecurityFindingsAutomationMuteRule" request + And request contains "rule_id" parameter from "valid_mute_rule.data.id" + And body with value {"data": {"attributes": {"action": {"reason": "false_positive"}, "enabled": false, "name": "{{ unique }}", "rule": {"finding_types": ["misconfiguration"], "query": "env:staging"}}, "type": "mute_rules"}} + When the request is sent + Then the response status is 200 Successfully updated the mute rule + And the response "data.id" is equal to "{{ valid_mute_rule.data.id }}" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @generated @skip @team:DataDog/k9-automation + Scenario: Update a mute rule returns "Unprocessable Entity" response + Given operation "UpdateSecurityFindingsAutomationMuteRule" enabled + And new "UpdateSecurityFindingsAutomationMuteRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"expire_at": 4070908800000, "reason": "risk_accepted", "reason_description": "Accepted for dev environments only"}, "enabled": true, "name": "Mute accepted risks in dev", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "mute_rules"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a security filter returns "Bad Request" response + Given new "UpdateSecurityFilter" request + And request contains "security_filter_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"exclusion_filters": [], "filtered_data_type": "logs", "is_enabled": true, "name": "Custom security filter", "query": "service:api", "version": 1}, "type": "security_filters"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a security filter returns "Concurrent Modification" response + Given new "UpdateSecurityFilter" request + And request contains "security_filter_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"exclusion_filters": [], "filtered_data_type": "logs", "is_enabled": true, "name": "Custom security filter", "query": "service:api", "version": 1}, "type": "security_filters"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a security filter returns "Not Found" response + Given new "UpdateSecurityFilter" request + And request contains "security_filter_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"exclusion_filters": [], "filtered_data_type": "logs", "is_enabled": true, "name": "Custom security filter", "query": "service:api", "version": 1}, "type": "security_filters"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/cloud-siem + Scenario: Update a security filter returns "OK" response + Given new "UpdateSecurityFilter" request + And there is a valid "security_filter" in the system + And request contains "security_filter_id" parameter from "security_filter.data.id" + And body with value {"data": {"attributes": {"exclusion_filters": [], "filtered_data_type": "logs", "is_enabled": true, "name": "{{ unique }}", "query": "service:{{ unique_alnum }}", "version": 1}, "type": "security_filters"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "security_filters" + And the response "data.attributes.filtered_data_type" is equal to "logs" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a suppression rule returns "Bad Request" response + Given new "UpdateSecurityMonitoringSuppression" request + And request contains "suppression_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"data_exclusion_query": "source:cloudtrail account_id:12345", "description": "This rule suppresses low-severity signals in staging environments.", "enabled": true, "expiration_date": 1703187336000, "name": "Custom suppression", "rule_query": "type:log_detection source:cloudtrail", "start_date": 1703187336000, "suppression_query": "env:staging status:low", "tags": ["technique:T1110-brute-force", "source:cloudtrail"]}, "type": "suppressions"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a suppression rule returns "Concurrent Modification" response + Given new "UpdateSecurityMonitoringSuppression" request + And request contains "suppression_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"data_exclusion_query": "source:cloudtrail account_id:12345", "description": "This rule suppresses low-severity signals in staging environments.", "enabled": true, "expiration_date": 1703187336000, "name": "Custom suppression", "rule_query": "type:log_detection source:cloudtrail", "start_date": 1703187336000, "suppression_query": "env:staging status:low", "tags": ["technique:T1110-brute-force", "source:cloudtrail"]}, "type": "suppressions"}} + When the request is sent + Then the response status is 409 Concurrent Modification + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update a suppression rule returns "Not Found" response + Given new "UpdateSecurityMonitoringSuppression" request + And request contains "suppression_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"data_exclusion_query": "source:cloudtrail account_id:12345", "description": "This rule suppresses low-severity signals in staging environments.", "enabled": true, "expiration_date": 1703187336000, "name": "Custom suppression", "rule_query": "type:log_detection source:cloudtrail", "start_date": 1703187336000, "suppression_query": "env:staging status:low", "tags": ["technique:T1110-brute-force", "source:cloudtrail"]}, "type": "suppressions"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Update a suppression rule returns "OK" response + Given new "UpdateSecurityMonitoringSuppression" request + And there is a valid "suppression" in the system + And request contains "suppression_id" parameter from "suppression.data.id" + And body with value {"data": {"attributes": {"suppression_query": "env:staging status:low"}, "type": "suppressions"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "suppressions" + And the response "data.attributes.suppression_query" is equal to "env:staging status:low" + And the response "data.attributes.version" is equal to 2 + + @generated @skip @team:DataDog/k9-automation + Scenario: Update a ticket creation rule returns "Bad Request" response + Given operation "UpdateSecurityFindingsAutomationTicketCreationRule" enabled + And new "UpdateSecurityFindingsAutomationTicketCreationRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"assignee_id": "22222222-2222-2222-2222-222222222222", "fields": {"labels": ["security"]}, "max_tickets_per_day": 100, "project_id": "11111111-1111-1111-1111-111111111111", "target": "jira"}, "enabled": true, "name": "Auto-create Jira tickets for critical findings", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "ticket_creation_rules"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-automation + Scenario: Update a ticket creation rule returns "Not Found" response + Given operation "UpdateSecurityFindingsAutomationTicketCreationRule" enabled + And new "UpdateSecurityFindingsAutomationTicketCreationRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"assignee_id": "22222222-2222-2222-2222-222222222222", "fields": {"labels": ["security"]}, "max_tickets_per_day": 100, "project_id": "11111111-1111-1111-1111-111111111111", "target": "jira"}, "enabled": true, "name": "Auto-create Jira tickets for critical findings", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "ticket_creation_rules"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/k9-automation + Scenario: Update a ticket creation rule returns "Successfully updated the ticket creation rule" response + Given operation "UpdateSecurityFindingsAutomationTicketCreationRule" enabled + And there is a valid "valid_ticket_creation_rule" in the system + And new "UpdateSecurityFindingsAutomationTicketCreationRule" request + And request contains "rule_id" parameter from "valid_ticket_creation_rule.data.id" + And body with value {"data": {"attributes": {"action": {"max_tickets_per_day": 5, "project_id": "11111111-1111-1111-1111-111111111111", "target": "jira"}, "enabled": false, "name": "{{ unique }}", "rule": {"finding_types": ["misconfiguration"], "query": "env:staging"}}, "type": "ticket_creation_rules"}} + When the request is sent + Then the response status is 200 Successfully updated the ticket creation rule + And the response "data.id" is equal to "{{ valid_ticket_creation_rule.data.id }}" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @generated @skip @team:DataDog/k9-automation + Scenario: Update a ticket creation rule returns "Unprocessable Entity" response + Given operation "UpdateSecurityFindingsAutomationTicketCreationRule" enabled + And new "UpdateSecurityFindingsAutomationTicketCreationRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"action": {"assignee_id": "22222222-2222-2222-2222-222222222222", "fields": {"labels": ["security"]}, "max_tickets_per_day": 100, "project_id": "11111111-1111-1111-1111-111111111111", "target": "jira"}, "enabled": true, "name": "Auto-create Jira tickets for critical findings", "rule": {"finding_types": ["misconfiguration"], "query": "env:prod team:platform"}}, "type": "ticket_creation_rules"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update an entity context sync configuration returns "Bad Request" response + Given operation "UpdateSecurityMonitoringIntegrationConfig" enabled + And new "UpdateSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"domain": "siem-test.com", "enabled": true, "integration_type": "GOOGLE_WORKSPACE", "name": "My GWS Integration (renamed)", "secrets": {"admin_email": "admin@example.com", "service_account_json": {"client_email": "svc@my-project.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "project_id": "my-project", "type": "service_account"}}, "settings": {"setting1": "value1"}}, "type": "integration_config"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update an entity context sync configuration returns "Not Found" response + Given operation "UpdateSecurityMonitoringIntegrationConfig" enabled + And new "UpdateSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"domain": "siem-test.com", "enabled": true, "integration_type": "GOOGLE_WORKSPACE", "name": "My GWS Integration (renamed)", "secrets": {"admin_email": "admin@example.com", "service_account_json": {"client_email": "svc@my-project.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "project_id": "my-project", "type": "service_account"}}, "settings": {"setting1": "value1"}}, "type": "integration_config"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Update an entity context sync configuration returns "OK" response + Given operation "UpdateSecurityMonitoringIntegrationConfig" enabled + And new "UpdateSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"domain": "siem-test.com", "enabled": true, "integration_type": "GOOGLE_WORKSPACE", "name": "My GWS Integration (renamed)", "secrets": {"admin_email": "admin@example.com", "service_account_json": {"client_email": "svc@my-project.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "project_id": "my-project", "type": "service_account"}}, "settings": {"setting1": "value1"}}, "type": "integration_config"}} + When the request is sent + Then the response status is 200 OK + + @skip-validation @team:DataDog/cloud-siem + Scenario: Update an existing rule returns "Bad Request" response + Given new "UpdateSecurityMonitoringRule" request + And there is a valid "security_rule" in the system + And request contains "rule_id" parameter from "security_rule.id" + And body with value {"name":"{{ unique }}", "queries":[{"query":""}],"cases":[{"status":"info"}],"options":{},"message":"Test rule Bad","tags":[],"isEnabled":true} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: Update an existing rule returns "Not Found" response + Given new "UpdateSecurityMonitoringRule" request + And request contains "rule_id" parameter with value "abcde-12345" + And body with value {"name": "{{ unique }}-NotFound","queries": [{"query": "@test:true","aggregation": "count","groupByFields": [],"distinctFields": [],"metrics": []}],"filters": [],"cases": [{"name": "", "status": "info", "condition": "a > 0", "notifications": []}], "options": {"evaluationWindow": 900, "keepAlive": 3600, "maxSignalDuration": 86400}, "message": "Test rule", "tags": [], "isEnabled": true} + When the request is sent + Then the response status is 404 Not Found + + @skip-validation @team:DataDog/cloud-siem + Scenario: Update an existing rule returns "OK" response + Given new "UpdateSecurityMonitoringRule" request + And there is a valid "security_rule" in the system + And request contains "rule_id" parameter from "security_rule.id" + And body with value {"name": "{{ unique }}-Updated","queries": [{"query": "@test:true","aggregation": "count","groupByFields": [],"distinctFields": [],"metrics": []}],"filters": [],"cases": [{"name": "", "status": "info", "condition": "a > 0", "notifications": []}], "options": {"evaluationWindow": 900, "keepAlive": 3600, "maxSignalDuration": 86400}, "message": "Test rule", "tags": [], "isEnabled": true} + When the request is sent + Then the response status is 200 OK + And the response "name" is equal to "{{ unique }}-Updated" + And the response "id" has the same value as "security_rule.id" + + @team:DataDog/cloud-siem + Scenario: Update resource filters returns "Bad Request" response + Given new "UpdateResourceEvaluationFilters" request + And body with value {"data": {"attributes": {"cloud_provider": {"invalid": {"aws_account_id": ["tag1:v1"]}}}, "id": "csm_resource_filter", "type": "csm_resource_filter"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: Update resource filters returns "OK" response + Given new "UpdateResourceEvaluationFilters" request + And body with value {"data": {"attributes": {"cloud_provider": {"aws": {"aws_account_id": ["tag1:v1"]}}}, "id": "csm_resource_filter", "type": "csm_resource_filter"}} + When the request is sent + Then the response status is 201 OK + + @skip @team:DataDog/cloud-siem + Scenario: Update security signal triage state or assignee returns "Bad Request" response + Given new "EditSecurityMonitoringSignal" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"archive_reason": "none", "assignee": {"uuid": "773b045d-ccf8-4808-bd3b-955ef6a8c940"}, "state": "open"}, "type": "signal_metadata"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/cloud-siem + Scenario: Update security signal triage state or assignee returns "Not Found" response + Given new "EditSecurityMonitoringSignal" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"archive_reason": "none", "assignee": {"uuid": "773b045d-ccf8-4808-bd3b-955ef6a8c940"}, "state": "open"}, "type": "signal_metadata"}} + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/cloud-siem + Scenario: Update security signal triage state or assignee returns "OK" response + Given new "EditSecurityMonitoringSignal" request + And request contains "signal_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"archive_reason": "none", "assignee": {"uuid": "773b045d-ccf8-4808-bd3b-955ef6a8c940"}, "state": "open"}, "type": "signal_metadata"}} + When the request is sent + Then the response status is 200 OK + + @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-typescript @skip-validation @team:DataDog/cloud-siem + Scenario: Validate a detection rule returns "Bad Request" response + Given new "ValidateSecurityMonitoringRule" request + And body with value {"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 0"}],"hasExtendedTitle":true,"isEnabled":true,"message":"My security monitoring rule","name":"My security monitoring rule","options":{"evaluationWindow":1800,"keepAlive":999999,"maxSignalDuration":1800,"detectionMethod":"threshold"},"queries":[{"query":"source:source_here","groupByFields":["@userIdentity.assumed_role"],"distinctFields":[],"aggregation":"count","name":""}],"tags":["env:prod","team:security"],"type":"log_detection"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: Validate a detection rule returns "OK" response + Given new "ValidateSecurityMonitoringRule" request + And body with value {"cases":[{"name":"","status":"info","notifications":[],"condition":"a > 0"}],"hasExtendedTitle":true,"isEnabled":true,"message":"My security monitoring rule","name":"My security monitoring rule","options":{"evaluationWindow":1800,"keepAlive":1800,"maxSignalDuration":1800,"detectionMethod":"threshold"},"queries":[{"query":"source:source_here","groupByFields":["@userIdentity.assumed_role"],"distinctFields":[],"aggregation":"count","name":""}],"tags":["env:prod","team:security"],"type":"log_detection"} + When the request is sent + Then the response status is 204 OK + + @team:DataDog/cloud-siem + Scenario: Validate a detection rule with detection method 'new_value' with enabled feature 'instantaneousBaseline' returns "OK" response + Given new "ValidateSecurityMonitoringRule" request + And body with value {"cases":[{"name":"","status":"info","notifications":[]}],"hasExtendedTitle":true,"isEnabled":true,"message":"My security monitoring rule","name":"My security monitoring rule","options":{"evaluationWindow":0,"keepAlive":300,"maxSignalDuration":600,"detectionMethod":"new_value","newValueOptions":{"forgetAfter":7,"instantaneousBaseline":true,"learningDuration":1,"learningThreshold":0,"learningMethod":"duration"}},"queries":[{"query":"source:source_here","groupByFields":["@userIdentity.assumed_role"],"distinctFields":[],"metric":"name","metrics":["name"],"aggregation":"new_value","name":"","dataSource":"logs"}],"tags":["env:prod","team:security"],"type":"log_detection"} + When the request is sent + Then the response status is 204 OK + + @team:DataDog/cloud-siem + Scenario: Validate a detection rule with detection method 'sequence_detection' returns "OK" response + Given new "ValidateSecurityMonitoringRule" request + And body with value {"cases":[{"name":"","status":"info","notifications":[],"condition":"step_b > 0"}],"hasExtendedTitle":true,"isEnabled":true,"message":"My security monitoring rule","name":"My security monitoring rule","options":{"evaluationWindow":0,"keepAlive":300,"maxSignalDuration":600,"detectionMethod":"sequence_detection","sequenceDetectionOptions":{"stepTransitions":[{"child":"step_b","evaluationWindow":900,"parent":"step_a"}],"steps":[{"condition":"a > 0","evaluationWindow":60,"name":"step_a"},{"condition":"b > 0","evaluationWindow":60,"name":"step_b"}]}},"queries":[{"query":"source:source_here","groupByFields":["@userIdentity.assumed_role"],"distinctFields":[],"aggregation":"count","name":""},{"query":"source:source_here2","groupByFields":[],"distinctFields":[],"aggregation":"count","name":""}],"tags":["env:prod","team:security"],"type":"log_detection"} + When the request is sent + Then the response status is 204 OK + + @team:DataDog/cloud-siem + Scenario: Validate a suppression rule returns "Bad Request" response + Given new "ValidateSecurityMonitoringSuppression" request + And body with value {"data": {"attributes": {"name" : "cold_harbour", "enabled": false, "rule_query":"rule:[A-Invalid", "data_exclusion_query": "not enough attributes"}, "type": "suppressions"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/cloud-siem + Scenario: Validate a suppression rule returns "OK" response + Given new "ValidateSecurityMonitoringSuppression" request + And body with value {"data": {"attributes": {"data_exclusion_query": "source:cloudtrail account_id:12345", "description": "This rule suppresses low-severity signals in staging environments.", "enabled": true, "name": "Custom suppression", "rule_query": "type:log_detection source:cloudtrail"}, "type": "suppressions"}} + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Validate an entity context sync configuration returns "Bad Request" response + Given operation "ValidateSecurityMonitoringIntegrationConfig" enabled + And new "ValidateSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Validate an entity context sync configuration returns "Not Found" response + Given operation "ValidateSecurityMonitoringIntegrationConfig" enabled + And new "ValidateSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/cloud-siem + Scenario: Validate an entity context sync configuration returns "OK" response + Given operation "ValidateSecurityMonitoringIntegrationConfig" enabled + And new "ValidateSecurityMonitoringIntegrationConfig" request + And request contains "integration_config_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/cloud-siem + Scenario: Validate entity context sync credentials returns "Bad Request" response + Given operation "ValidateSecurityMonitoringIntegrationCredentials" enabled + And new "ValidateSecurityMonitoringIntegrationCredentials" request + And body with value {"data": {"attributes": {"domain": "siem-test.com", "integration_type": "GOOGLE_WORKSPACE", "secrets": {"admin_email": "admin@example.com", "service_account_json": {"client_email": "svc@my-project.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "project_id": "my-project", "type": "service_account"}}}, "type": "integration_config"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/cloud-siem + Scenario: Validate entity context sync credentials returns "OK" response + Given operation "ValidateSecurityMonitoringIntegrationCredentials" enabled + And new "ValidateSecurityMonitoringIntegrationCredentials" request + And body with value {"data": {"attributes": {"domain": "siem-test.com", "integration_type": "GOOGLE_WORKSPACE", "secrets": {"admin_email": "admin@example.com", "service_account_json": {"client_email": "svc@my-project.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "project_id": "my-project", "type": "service_account"}}}, "type": "integration_config"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/sensitive_data_scanner.feature b/test-runner-data/features/v2/sensitive_data_scanner.feature new file mode 100644 index 0000000000..d439e16daa --- /dev/null +++ b/test-runner-data/features/v2/sensitive_data_scanner.feature @@ -0,0 +1,217 @@ +@endpoint(sensitive-data-scanner) @endpoint(sensitive-data-scanner-v2) @endpoint(sensitivedatascanner) @endpoint(sensitivedatascanner-v2) +Feature: Sensitive Data Scanner + Create, update, delete, and retrieve sensitive data scanner groups and + rules. See the [Sensitive Data Scanner + page](https://docs.datadoghq.com/sensitive_data_scanner/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "SensitiveDataScanner" API + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: Create Scanning Group returns "Bad Request" response + Given new "CreateScanningGroup" request + And body with value {"data": {"attributes": {"filter": {}, "product_list": ["logs"], "samplings": [{"product": "logs", "rate": 100.0}]}, "relationships": {"configuration": {"data": {"type": "sensitive_data_scanner_configuration"}}, "rules": {"data": [{"type": "sensitive_data_scanner_rule"}]}}, "type": "sensitive_data_scanner_group"}, "meta": {"version": 0}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/sensitive-data-scanner + Scenario: Create Scanning Group returns "OK" response + Given a valid "configuration" in the system + And new "CreateScanningGroup" request + And body with value {"meta":{},"data":{"type":"sensitive_data_scanner_group","attributes":{"name":"{{ unique }}","is_enabled":false,"product_list":["logs"],"filter":{"query":"*"}},"relationships":{"configuration":{"data":{"type":"sensitive_data_scanner_configuration","id":"{{ configuration.data.id }}"}},"rules":{"data":[]}}}} + When the request is sent + Then the response status is 201 OK + And the response "data.type" is equal to "sensitive_data_scanner_group" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @team:DataDog/sensitive-data-scanner + Scenario: Create Scanning Rule returns "Bad Request" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And new "CreateScanningRule" request + And body with value {"meta":{},"data":{"type":"sensitive_data_scanner_rule","attributes":{"pattern":"pattern","text_replacement":{"type":"none"},"tags":["sensitive_data:true"],"is_enabled":true},"relationships":{"group":{"data":{"type":"{{ group.data.type }}","id":"{{ group.data.id }}"}}}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/sensitive-data-scanner + Scenario: Create Scanning Rule returns "OK" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And new "CreateScanningRule" request + And body with value {"meta":{},"data":{"type":"sensitive_data_scanner_rule","attributes":{"name":"{{ unique }}","pattern":"pattern", "namespaces": ["admin"], "excluded_namespaces": ["admin.name"], "text_replacement":{"type":"none"},"tags":["sensitive_data:true"],"is_enabled":true,"priority":1,"included_keyword_configuration":{"keywords":["credit card"],"character_count":35}},"relationships":{"group":{"data":{"type":"{{ group.data.type }}","id":"{{ group.data.id }}"}}}}} + When the request is sent + Then the response status is 201 OK + And the response "data.type" is equal to "sensitive_data_scanner_rule" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.pattern" is equal to "pattern" + And the response "data.attributes.included_keyword_configuration.character_count" is equal to 35 + And the response "data.attributes.included_keyword_configuration.keywords[0]" is equal to "credit card" + + @team:DataDog/sensitive-data-scanner + Scenario: Create Scanning Rule with should_save_match returns "OK" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And new "CreateScanningRule" request + And body with value {"meta":{},"data":{"type":"sensitive_data_scanner_rule","attributes":{"name":"{{ unique }}","pattern":"pattern","text_replacement":{"type":"replacement_string","replacement_string":"REDACTED","should_save_match":true},"tags":["sensitive_data:true"],"is_enabled":true,"priority":1},"relationships":{"group":{"data":{"type":"{{ group.data.type }}","id":"{{ group.data.id }}"}}}}} + When the request is sent + Then the response status is 201 OK + And the response "data.type" is equal to "sensitive_data_scanner_rule" + And the response "data.attributes.name" is equal to "{{ unique }}" + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: Delete Scanning Group returns "Bad Request" response + Given new "DeleteScanningGroup" request + And request contains "group_id" parameter from "REPLACE.ME" + And body with value {"meta": {"version": 0}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: Delete Scanning Group returns "Not Found" response + Given new "DeleteScanningGroup" request + And request contains "group_id" parameter from "REPLACE.ME" + And body with value {"meta": {"version": 0}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/sensitive-data-scanner + Scenario: Delete Scanning Group returns "OK" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And new "DeleteScanningGroup" request + And request contains "group_id" parameter from "group.data.id" + And body with value {"meta": {}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: Delete Scanning Rule returns "Bad Request" response + Given new "DeleteScanningRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"meta": {"version": 0}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: Delete Scanning Rule returns "Not Found" response + Given new "DeleteScanningRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"meta": {"version": 0}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/sensitive-data-scanner + Scenario: Delete Scanning Rule returns "OK" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And the "scanning_group" has a "scanning_rule" + And new "DeleteScanningRule" request + And request contains "rule_id" parameter from "rule.data.id" + And body with value {"meta": {}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: List Scanning Groups returns "Bad Request" response + Given new "ListScanningGroups" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/sensitive-data-scanner + Scenario: List Scanning Groups returns "OK" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And new "ListScanningGroups" request + When the request is sent + Then the response status is 200 OK + And the response "included" has item with field "id" with value "{{ group.data.id }}" + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: List standard patterns returns "Bad Request" response + Given new "ListStandardPatterns" request + When the request is sent + Then the response status is 400 Bad Request + + @integration-only @team:DataDog/sensitive-data-scanner + Scenario: List standard patterns returns "OK" response + Given new "ListStandardPatterns" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/sensitive-data-scanner + Scenario: Reorder Groups returns "Bad Request" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And new "ReorderScanningGroups" request + And body with value {"data": {"relationships": {"groups": {"data": [{"type": "sensitive_data_scanner_group", "id": "{{ unique }}"}]}}, "type": "sensitive_data_scanner_configuration", "id": "{{ configuration.data.id }}"}, "meta": {}} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/sensitive-data-scanner + Scenario: Reorder Groups returns "OK" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And a valid "configuration" in the system + And new "ReorderScanningGroups" request + And body with value {"data": {"relationships": {"groups": {"data": [{"type": "sensitive_data_scanner_group", "id": "{{ group.data.id }}"}]}}, "type": "sensitive_data_scanner_configuration", "id": "{{ configuration.data.id }}"}, "meta": {}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: Update Scanning Group returns "Bad Request" response + Given new "UpdateScanningGroup" request + And request contains "group_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"filter": {}, "product_list": ["logs"], "samplings": [{"product": "logs", "rate": 100.0}]}, "relationships": {"configuration": {"data": {"type": "sensitive_data_scanner_configuration"}}, "rules": {"data": [{"type": "sensitive_data_scanner_rule"}]}}, "type": "sensitive_data_scanner_group"}, "meta": {"version": 0}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: Update Scanning Group returns "Not Found" response + Given new "UpdateScanningGroup" request + And request contains "group_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"filter": {}, "product_list": ["logs"], "samplings": [{"product": "logs", "rate": 100.0}]}, "relationships": {"configuration": {"data": {"type": "sensitive_data_scanner_configuration"}}, "rules": {"data": [{"type": "sensitive_data_scanner_rule"}]}}, "type": "sensitive_data_scanner_group"}, "meta": {"version": 0}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/sensitive-data-scanner + Scenario: Update Scanning Group returns "OK" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And new "UpdateScanningGroup" request + And request contains "group_id" parameter from "group.data.id" + And body with value {"meta": {},"data":{"id": "{{ group.data.id }}", "type":"sensitive_data_scanner_group","attributes":{"name":"{{ unique }}","is_enabled":false,"product_list":["logs"],"filter":{"query":"*"}},"relationships":{"configuration":{"data":{"type":"sensitive_data_scanner_configuration","id":"{{ configuration.data.id }}"}},"rules":{"data":[]}}}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/sensitive-data-scanner + Scenario: Update Scanning Rule returns "Bad Request" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And the "scanning_group" has a "scanning_rule" + And new "UpdateScanningRule" request + And request contains "rule_id" parameter from "rule.data.id" + And body with value {"meta":{},"data":{"attributes":{"name":"{{ unique }}","pattern":"pattern","text_replacement":{"type":"none"},"tags":["sensitive_data:true"],"is_enabled":true},"relationships":{"group":{"data":{"type":"{{ group.data.type }}","id":"{{ group.data.id }}"}}}}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/sensitive-data-scanner + Scenario: Update Scanning Rule returns "Not Found" response + Given new "UpdateScanningRule" request + And request contains "rule_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"excluded_namespaces": ["admin.name"], "included_keyword_configuration": {"character_count": 30, "keywords": ["email", "address", "login"]}, "namespaces": ["admin"], "suppressions": {"ends_with": ["@example.com", "another.example.com"], "exact_match": ["admin@example.com", "user@example.com"], "starts_with": ["admin", "user"]}, "tags": [], "text_replacement": {"type": "none"}}, "relationships": {"group": {"data": {"type": "sensitive_data_scanner_group"}}, "standard_pattern": {"data": {"type": "sensitive_data_scanner_standard_pattern"}}}, "type": "sensitive_data_scanner_rule"}, "meta": {"version": 0}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/sensitive-data-scanner + Scenario: Update Scanning Rule returns "OK" response + Given a valid "configuration" in the system + And there is a valid "scanning_group" in the system + And the "scanning_group" has a "scanning_rule" + And new "UpdateScanningRule" request + And request contains "rule_id" parameter from "rule.data.id" + And body with value {"meta":{},"data":{"id": "{{ rule.data.id }}", "type":"sensitive_data_scanner_rule","attributes":{"name":"{{ unique }}","pattern":"pattern","text_replacement":{"type":"none"},"tags":["sensitive_data:true"],"is_enabled":true,"priority":5,"included_keyword_configuration": {"keywords": ["credit card", "cc"], "character_count":35}}}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/service_accounts.feature b/test-runner-data/features/v2/service_accounts.feature new file mode 100644 index 0000000000..7324724177 --- /dev/null +++ b/test-runner-data/features/v2/service_accounts.feature @@ -0,0 +1,277 @@ +@endpoint(service-accounts) @endpoint(service-accounts-v2) +Feature: Service Accounts + Create, edit, and disable service accounts. See the [Service Accounts page + ](https://docs.datadoghq.com/account_management/org_settings/service_accou + nts/) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ServiceAccounts" API + + @generated @skip @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Create a service account returns "Bad Request" response + Given new "CreateServiceAccount" request + And body with value {"data": {"attributes": {"email": "jane.doe@example.com", "service_account": true}, "relationships": {"roles": {"data": [{"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}]}}, "type": "users"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Create a service account returns "OK" response + Given there is a valid "role" in the system + And new "CreateServiceAccount" request + And body with value {"data": {"type": "users", "attributes": {"name": "Test API Client", "email": "{{ unique }}@datadoghq.com", "service_account": true}, "relationships": {"roles": {"data": [{"id": "{{ role.data.id }}", "type": "roles"}]}}}} + When the request is sent + Then the response status is 201 OK + And the response "data.attributes.email" is equal to "{{ unique_lower }}@datadoghq.com" + And the response "data.attributes.name" is equal to "Test API Client" + And the response "data.attributes.disabled" is false + And the response "data.attributes.service_account" is equal to true + And the response "data.relationships.roles.data[0].id" is equal to "{{ role.data.id }}" + + @generated @skip @team:DataDog/credentials-management + Scenario: Create an access token for a service account returns "Bad Request" response + Given new "CreateServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"expires_at": "2025-12-31T23:59:59+00:00", "name": "Service Account Access Token", "scopes": ["dashboards_read", "dashboards_write"]}, "type": "service_access_tokens"}} + When the request is sent + Then the response status is 400 Bad Request + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: Create an access token for a service account returns "Created" response + Given there is a valid "service_account_user" in the system + And new "CreateServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + And body with value {"data": {"type": "service_access_tokens", "attributes": {"name": "{{ unique }}", "scopes": ["dashboards_read"]}}} + When the request is sent + Then the response status is 201 Created + And the response "data.type" is equal to "service_access_tokens" + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.relationships.owned_by.data.id" has the same value as "service_account_user.data.id" + + @generated @skip @team:DataDog/credentials-management + Scenario: Create an access token for a service account returns "Not Found" response + Given new "CreateServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"expires_at": "2025-12-31T23:59:59+00:00", "name": "Service Account Access Token", "scopes": ["dashboards_read", "dashboards_write"]}, "type": "service_access_tokens"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Create an application key for this service account returns "Bad Request" response + Given new "CreateServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Application Key for managing dashboards", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}, "type": "application_keys"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Create an application key for this service account returns "Created" response + Given there is a valid "service_account_user" in the system + And new "CreateServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + And body with value {"data": {"attributes": {"name": "{{ unique }}"}, "type": "application_keys"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.relationships.owned_by.data.id" has the same value as "service_account_user.data.id" + + @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Create an application key with scopes for this service account returns "Created" response + Given there is a valid "service_account_user" in the system + And new "CreateServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + And body with value {"data": {"attributes": {"name": "{{ unique }}", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}, "type": "application_keys"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.name" is equal to "{{ unique }}" + And the response "data.attributes.scopes" is equal to ["dashboards_read", "dashboards_write", "dashboards_public_share"] + And the response "data.relationships.owned_by.data.id" has the same value as "service_account_user.data.id" + + @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Delete an application key for this service account returns "No Content" response + Given there is a valid "service_account_user" in the system + And there is a valid "service_account_application_key" for "service_account_user" + And new "DeleteServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + And request contains "app_key_id" parameter from "service_account_application_key.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Delete an application key for this service account returns "Not Found" response + Given new "DeleteServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And request contains "app_key_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Edit an application key for this service account returns "Bad Request" response + Given new "UpdateServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And request contains "app_key_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Application Key for managing dashboards", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "application_keys"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Edit an application key for this service account returns "Not Found" response + Given new "UpdateServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And request contains "app_key_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Application Key for managing dashboards", "scopes": ["dashboards_read", "dashboards_write", "dashboards_public_share"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "application_keys"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Edit an application key for this service account returns "OK" response + Given there is a valid "service_account_user" in the system + And there is a valid "service_account_application_key" for "service_account_user" + And new "UpdateServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + And request contains "app_key_id" parameter from "service_account_application_key.data.id" + And body with value {"data": {"id": "{{ service_account_application_key.data.id }}", "type": "application_keys", "attributes": {"name" : "{{ service_account_application_key.data.attributes.name }}-updated"}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{ service_account_application_key.data.attributes.name }}-updated" + And the response "data.type" is equal to "application_keys" + And the response "data.id" is equal to "{{ service_account_application_key.data.id }}" + + @generated @skip @team:DataDog/credentials-management + Scenario: Get an access token for a service account returns "Not Found" response + Given new "GetServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And request contains "token_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: Get an access token for a service account returns "OK" response + Given there is a valid "service_account_user" in the system + And there is a valid "service_account_access_token" for "service_account_user" + And new "GetServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + And request contains "token_id" parameter from "service_account_access_token.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" has the same value as "service_account_access_token.data.attributes.name" + And the response "data.type" is equal to "service_access_tokens" + And the response "data.id" is equal to "{{ service_account_access_token.data.id }}" + + @generated @skip @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Get one application key for this service account returns "Not Found" response + Given new "GetServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And request contains "app_key_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: Get one application key for this service account returns "OK" response + Given there is a valid "service_account_user" in the system + And there is a valid "service_account_application_key" for "service_account_user" + And new "GetServiceAccountApplicationKey" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + And request contains "app_key_id" parameter from "service_account_application_key.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" has the same value as "service_account_application_key.data.attributes.name" + And the response "data.type" is equal to "application_keys" + And the response "data.id" is equal to "{{ service_account_application_key.data.id }}" + + @generated @skip @team:DataDog/credentials-management + Scenario: List access tokens for a service account returns "Bad Request" response + Given new "ListServiceAccountAccessTokens" request + And request contains "service_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management + Scenario: List access tokens for a service account returns "Not Found" response + Given new "ListServiceAccountAccessTokens" request + And request contains "service_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: List access tokens for a service account returns "OK" response + Given there is a valid "service_account_user" in the system + And new "ListServiceAccountAccessTokens" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 0 + + @generated @skip @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: List application keys for this service account returns "Bad Request" response + Given new "ListServiceAccountApplicationKeys" request + And request contains "service_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: List application keys for this service account returns "Not Found" response + Given new "ListServiceAccountApplicationKeys" request + And request contains "service_account_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/credentials-management @team:DataDog/org-management + Scenario: List application keys for this service account returns "OK" response + Given there is a valid "service_account_user" in the system + And new "ListServiceAccountApplicationKeys" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 0 + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: Revoke an access token for a service account returns "No Content" response + Given there is a valid "service_account_user" in the system + And there is a valid "service_account_access_token" for "service_account_user" + And new "RevokeServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + And request contains "token_id" parameter from "service_account_access_token.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/credentials-management + Scenario: Revoke an access token for a service account returns "Not Found" response + Given new "RevokeServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And request contains "token_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/credentials-management + Scenario: Update an access token for a service account returns "Bad Request" response + Given new "UpdateServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And request contains "token_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Updated Service Access Token", "scopes": ["dashboards_read", "dashboards_write"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "service_access_tokens"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/credentials-management + Scenario: Update an access token for a service account returns "Not Found" response + Given new "UpdateServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "REPLACE.ME" + And request contains "token_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"name": "Updated Service Access Token", "scopes": ["dashboards_read", "dashboards_write"]}, "id": "00112233-4455-6677-8899-aabbccddeeff", "type": "service_access_tokens"}} + When the request is sent + Then the response status is 404 Not Found + + @skip-terraform-config @team:DataDog/credentials-management + Scenario: Update an access token for a service account returns "OK" response + Given there is a valid "service_account_user" in the system + And there is a valid "service_account_access_token" for "service_account_user" + And new "UpdateServiceAccountAccessToken" request + And request contains "service_account_id" parameter from "service_account_user.data.id" + And request contains "token_id" parameter from "service_account_access_token.data.id" + And body with value {"data": {"id": "{{ service_account_access_token.data.id }}", "type": "service_access_tokens", "attributes": {"name": "{{ service_account_access_token.data.attributes.name }}-updated"}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{ service_account_access_token.data.attributes.name }}-updated" + And the response "data.type" is equal to "service_access_tokens" + And the response "data.id" is equal to "{{ service_account_access_token.data.id }}" diff --git a/test-runner-data/features/v2/service_definition.feature b/test-runner-data/features/v2/service_definition.feature new file mode 100644 index 0000000000..20c9428087 --- /dev/null +++ b/test-runner-data/features/v2/service_definition.feature @@ -0,0 +1,132 @@ +@endpoint(service-definition) @endpoint(service-definition-v2) +Feature: Service Definition + API to create, update, retrieve and delete service definitions. Note: + Service Catalog [v3.0 schema](https://docs.datadoghq.com/service_catalog/s + ervice_definitions/v3-0/) has new API endpoints documented under [Software + Catalog](https://docs.datadoghq.com/api/latest/software-catalog/). Use the + following Service Definition endpoints for v2.2 and earlier. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ServiceDefinition" API + + @generated @skip @team:DataDog/service-catalog + Scenario: Create or update service definition returns "Bad Request" response + Given new "CreateOrUpdateServiceDefinitions" request + And body with value {"application": "my-app", "ci-pipeline-fingerprints": ["j88xdEy0J5lc", "eZ7LMljCk8vo"], "contacts": [{"contact": "https://teams.microsoft.com/myteam", "name": "My team channel", "type": "slack"}], "dd-service": "my-service", "description": "My service description", "extensions": {"myorg/extension": "extensionValue"}, "integrations": {"opsgenie": {"region": "US", "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000"}, "pagerduty": {"service-url": "https://my-org.pagerduty.com/service-directory/PMyService"}}, "languages": ["dotnet", "go", "java", "js", "php", "python", "ruby", "c++"], "lifecycle": "sandbox", "links": [{"name": "Runbook", "provider": "Github", "type": "runbook", "url": "https://my-runbook"}], "schema-version": "v2.2", "tags": ["my:tag", "service:tag"], "team": "my-team", "tier": "High", "type": "web"} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Create or update service definition returns "CREATED" response + Given new "CreateOrUpdateServiceDefinitions" request + And body with value {"application": "my-app", "ci-pipeline-fingerprints": ["j88xdEy0J5lc", "eZ7LMljCk8vo"], "contacts": [{"contact": "https://teams.microsoft.com/myteam", "name": "My team channel", "type": "slack"}], "dd-service": "my-service", "description": "My service description", "extensions": {"myorg/extension": "extensionValue"}, "integrations": {"opsgenie": {"region": "US", "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000"}, "pagerduty": {"service-url": "https://my-org.pagerduty.com/service-directory/PMyService"}}, "languages": ["dotnet", "go", "java", "js", "php", "python", "ruby", "c++"], "lifecycle": "sandbox", "links": [{"name": "Runbook", "provider": "Github", "type": "runbook", "url": "https://my-runbook"}], "schema-version": "v2.2", "tags": ["my:tag", "service:tag"], "team": "my-team", "tier": "High", "type": "web"} + When the request is sent + Then the response status is 200 CREATED + + @generated @skip @team:DataDog/service-catalog + Scenario: Create or update service definition returns "Conflict" response + Given new "CreateOrUpdateServiceDefinitions" request + And body with value {"application": "my-app", "ci-pipeline-fingerprints": ["j88xdEy0J5lc", "eZ7LMljCk8vo"], "contacts": [{"contact": "https://teams.microsoft.com/myteam", "name": "My team channel", "type": "slack"}], "dd-service": "my-service", "description": "My service description", "extensions": {"myorg/extension": "extensionValue"}, "integrations": {"opsgenie": {"region": "US", "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000"}, "pagerduty": {"service-url": "https://my-org.pagerduty.com/service-directory/PMyService"}}, "languages": ["dotnet", "go", "java", "js", "php", "python", "ruby", "c++"], "lifecycle": "sandbox", "links": [{"name": "Runbook", "provider": "Github", "type": "runbook", "url": "https://my-runbook"}], "schema-version": "v2.2", "tags": ["my:tag", "service:tag"], "team": "my-team", "tier": "High", "type": "web"} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/service-catalog + Scenario: Create or update service definition using schema v2 returns "CREATED" response + Given new "CreateOrUpdateServiceDefinitions" request + And body with value {"contacts": [{"contact": "contact@datadoghq.com", "name": "Team Email", "type": "email"}], "dd-service": "service-{{ unique_lower_alnum }}", "dd-team": "my-team", "docs": [{"name": "Architecture", "provider": "google drive", "url": "https://gdrive/mydoc"}], "extensions": {"myorgextension": "extensionvalue"}, "integrations": {"opsgenie": {"region": "US", "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000"}, "pagerduty": "https://my-org.pagerduty.com/service-directory/PMyService"}, "links": [{"name": "Runbook", "type": "runbook", "url": "https://my-runbook"}], "repos": [{"name": "Source Code", "provider": "GitHub", "url": "https://github.com/DataDog/schema"}], "schema-version": "v2", "tags": ["my:tag", "service:tag"], "team": "my-team"} + When the request is sent + Then the response status is 200 CREATED + And the response "data[0].attributes.meta.ingested-schema-version" is equal to "v2" + And the response "data[0].attributes.schema.dd-service" is equal to "service-{{ unique_lower_alnum }}" + + @team:DataDog/service-catalog + Scenario: Create or update service definition using schema v2-1 returns "CREATED" response + Given new "CreateOrUpdateServiceDefinitions" request + And body with value {"contacts":[{"contact":"contact@datadoghq.com","name":"Team Email","type":"email"}],"dd-service":"service-{{ unique_lower_alnum }}","extensions":{"myorgextension":"extensionvalue"},"integrations":{"opsgenie":{"region":"US","service-url":"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000"},"pagerduty":{"service-url":"https://my-org.pagerduty.com/service-directory/PMyService"}},"links":[{"name":"Runbook","type":"runbook","url":"https://my-runbook"},{"name":"Source Code","type":"repo","provider":"GitHub","url":"https://github.com/DataDog/schema"},{"name":"Architecture","type":"doc","provider":"Gigoogle drivetHub","url":"https://my-runbook"}],"schema-version":"v2.1","tags":["my:tag","service:tag"],"team":"my-team"} + When the request is sent + Then the response status is 200 CREATED + And the response "data[0].attributes.meta.ingested-schema-version" is equal to "v2.1" + And the response "data[0].attributes.schema.dd-service" is equal to "service-{{ unique_lower_alnum }}" + + @team:DataDog/service-catalog + Scenario: Create or update service definition using schema v2-2 returns "CREATED" response + Given new "CreateOrUpdateServiceDefinitions" request + And body with value {"contacts":[{"contact":"contact@datadoghq.com","name":"Team Email","type":"email"}],"dd-service":"service-{{ unique_lower_alnum }}","extensions":{"myorgextension":"extensionvalue"},"integrations":{"opsgenie":{"region":"US","service-url":"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000"},"pagerduty":{"service-url":"https://my-org.pagerduty.com/service-directory/PMyService"}},"links":[{"name":"Runbook","type":"runbook","url":"https://my-runbook"},{"name":"Source Code","type":"repo","provider":"GitHub","url":"https://github.com/DataDog/schema"},{"name":"Architecture","type":"doc","provider":"Gigoogle drivetHub","url":"https://my-runbook"}],"schema-version":"v2.2","tags":["my:tag","service:tag"],"team":"my-team"} + When the request is sent + Then the response status is 200 CREATED + And the response "data[0].attributes.meta.ingested-schema-version" is equal to "v2.2" + And the response "data[0].attributes.schema.dd-service" is equal to "service-{{ unique_lower_alnum }}" + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a single service definition returns "Bad Request" response + Given new "DeleteServiceDefinition" request + And request contains "service_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/service-catalog + Scenario: Delete a single service definition returns "Not Found" response + Given new "DeleteServiceDefinition" request + And request contains "service_name" parameter with value "not-a-service" + When the request is sent + Then the response status is 404 Not Found + And the response "errors[0]" is equal to "Not Found" + + @replay-only @team:DataDog/service-catalog + Scenario: Delete a single service definition returns "OK" response + Given new "DeleteServiceDefinition" request + And request contains "service_name" parameter with value "service-definition-test" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/service-catalog + Scenario: Get a single service definition returns "Bad Request" response + Given new "GetServiceDefinition" request + And request contains "service_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Get a single service definition returns "Conflict" response + Given new "GetServiceDefinition" request + And request contains "service_name" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/service-catalog + Scenario: Get a single service definition returns "Not Found" response + Given new "GetServiceDefinition" request + And request contains "service_name" parameter with value "not-a-service" + When the request is sent + Then the response status is 404 Not Found + And the response "errors[0]" is equal to "Not Found" + + @team:DataDog/service-catalog + Scenario: Get a single service definition returns "OK" response + Given new "GetServiceDefinition" request + And request contains "service_name" parameter with value "service-definition-test" + And request contains "schema_version" parameter with value "v2.1" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.meta.ingested-schema-version" is equal to "v2" + And the response "data.attributes.schema.schema-version" is equal to "v2.1" + And the response "data.attributes.schema.dd-service" is equal to "service-definition-test" + + @team:DataDog/service-catalog + Scenario: Get all service definitions returns "OK" response + Given new "ListServiceDefinitions" request + And request contains "schema_version" parameter with value "v2.1" + When the request is sent + Then the response status is 200 OK + And the response "data[0].attributes.meta.ingestion-source" is equal to "api" + And the response "data[0].attributes.schema.schema-version" is equal to "v2.1" + + @replay-only @skip-validation @team:DataDog/service-catalog @with-pagination + Scenario: Get all service definitions returns "OK" response with pagination + Given new "ListServiceDefinitions" request + And request contains "page[size]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items diff --git a/test-runner-data/features/v2/service_level_objectives.feature b/test-runner-data/features/v2/service_level_objectives.feature new file mode 100644 index 0000000000..4dc11df9e5 --- /dev/null +++ b/test-runner-data/features/v2/service_level_objectives.feature @@ -0,0 +1,111 @@ +@endpoint(service-level-objectives) @endpoint(service-level-objectives-v2) +Feature: Service Level Objectives + [Service Level Objectives](https://docs.datadoghq.com/monitors/service_lev + el_objectives/#configuration) (SLOs) are a key part of the site + reliability engineering toolkit. SLOs provide a framework for defining + clear targets around application performance, which ultimately help teams + provide a consistent customer experience, balance feature development with + platform stability, and improve communication with internal and external + users. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "ServiceLevelObjectives" API + + @team:DataDog/slo-app + Scenario: Create a new SLO report returns "Bad Request" response + Given operation "CreateSLOReportJob" enabled + And new "CreateSLOReportJob" request + And body with value {"data": {"attributes": {"from_ts": {{ timestamp('now - 40d') }}, "to_ts": {{ timestamp('now') }}, "query": "slo_type:metric \"SLO Reporting Test\"", "interval": "bad-interval"}}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/slo-app + Scenario: Create a new SLO report returns "OK" response + Given operation "CreateSLOReportJob" enabled + And new "CreateSLOReportJob" request + And body with value {"data": {"attributes": {"from_ts": {{ timestamp('now - 40d') }}, "to_ts": {{ timestamp('now') }}, "query": "slo_type:metric \"SLO Reporting Test\"", "interval": "monthly", "timezone": "America/New_York"}}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "report_id" + + @team:DataDog/slo-app + Scenario: Get SLO report returns "Bad Request" response + Given operation "GetSLOReport" enabled + And new "GetSLOReport" request + And request contains "report_id" parameter with value "invalid-report-id" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/slo-app + Scenario: Get SLO report returns "Not Found" response + Given operation "GetSLOReport" enabled + And new "GetSLOReport" request + And request contains "report_id" parameter with value "2b468c54-f2a7-11ee-b0b4-ffe56bb6ad43" + When the request is sent + Then the response status is 404 Not Found + + @skip @team:DataDog/slo-app + Scenario: Get SLO report returns "OK" response + Given operation "GetSLOReport" enabled + And new "GetSLOReport" request + And request contains "report_id" parameter with value "9fb2dc2a-ead0-11ee-a174-9fe3a9d7627f" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/slo-app + Scenario: Get SLO report status returns "Bad Request" response + Given operation "GetSLOReportJobStatus" enabled + And new "GetSLOReportJobStatus" request + And request contains "report_id" parameter with value "invalid-report-id" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/slo-app + Scenario: Get SLO report status returns "Not Found" response + Given operation "GetSLOReportJobStatus" enabled + And new "GetSLOReportJobStatus" request + And request contains "report_id" parameter with value "2b468c54-f2a7-11ee-b0b4-ffe56bb6ad43" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/slo-app + Scenario: Get SLO report status returns "OK" response + Given operation "GetSLOReportJobStatus" enabled + And new "GetSLOReportJobStatus" request + And there is a valid "report" in the system + And request contains "report_id" parameter from "report.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "report_id" + + @generated @skip @team:DataDog/slo-app + Scenario: Get SLO status returns "Bad Request" response + Given operation "GetSloStatus" enabled + And new "GetSloStatus" request + And request contains "slo_id" parameter from "REPLACE.ME" + And request contains "from_ts" parameter from "REPLACE.ME" + And request contains "to_ts" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/slo-app + Scenario: Get SLO status returns "Not Found" response + Given operation "GetSloStatus" enabled + And new "GetSloStatus" request + And request contains "slo_id" parameter from "REPLACE.ME" + And request contains "from_ts" parameter from "REPLACE.ME" + And request contains "to_ts" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/slo-app + Scenario: Get SLO status returns "OK" response + Given operation "GetSloStatus" enabled + And new "GetSloStatus" request + And request contains "slo_id" parameter from "REPLACE.ME" + And request contains "from_ts" parameter from "REPLACE.ME" + And request contains "to_ts" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/software_catalog.feature b/test-runner-data/features/v2/software_catalog.feature new file mode 100644 index 0000000000..34e9f95314 --- /dev/null +++ b/test-runner-data/features/v2/software_catalog.feature @@ -0,0 +1,152 @@ +@endpoint(software-catalog) @endpoint(software-catalog-v2) +Feature: Software Catalog + API to create, update, retrieve, and delete Software Catalog entities. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "SoftwareCatalog" API + + @generated @skip @team:DataDog/service-catalog + Scenario: Create or update entities returns "ACCEPTED" response + Given new "UpsertCatalogEntity" request + And body with value {"apiVersion": "v3", "datadog": {"codeLocations": [{"paths": []}], "events": [{}], "logs": [{}], "performanceData": {"tags": []}, "pipelines": {"fingerprints": []}}, "integrations": {"opsgenie": {"serviceURL": "https://www.opsgenie.com/service/shopping-cart"}, "pagerduty": {"serviceURL": "https://www.pagerduty.com/service-directory/Pshopping-cart"}}, "kind": "service", "metadata": {"additionalOwners": [{"name": ""}], "contacts": [{"contact": "https://slack/", "type": "slack"}], "id": "4b163705-23c0-4573-b2fb-f6cea2163fcb", "inheritFrom": "application:default/myapp", "links": [{"name": "mylink", "type": "link", "url": "https://mylink"}], "name": "myService", "namespace": "default", "tags": ["this:tag", "that:tag"]}, "spec": {"componentOf": [], "dependsOn": [], "languages": []}} + When the request is sent + Then the response status is 202 ACCEPTED + + @generated @skip @team:DataDog/service-catalog + Scenario: Create or update entities returns "Bad Request" response + Given new "UpsertCatalogEntity" request + And body with value {"apiVersion": "v3", "datadog": {"codeLocations": [{"paths": []}], "events": [{}], "logs": [{}], "performanceData": {"tags": []}, "pipelines": {"fingerprints": []}}, "integrations": {"opsgenie": {"serviceURL": "https://www.opsgenie.com/service/shopping-cart"}, "pagerduty": {"serviceURL": "https://www.pagerduty.com/service-directory/Pshopping-cart"}}, "kind": "service", "metadata": {"additionalOwners": [{"name": ""}], "contacts": [{"contact": "https://slack/", "type": "slack"}], "id": "4b163705-23c0-4573-b2fb-f6cea2163fcb", "inheritFrom": "application:default/myapp", "links": [{"name": "mylink", "type": "link", "url": "https://mylink"}], "name": "myService", "namespace": "default", "tags": ["this:tag", "that:tag"]}, "spec": {"componentOf": [], "dependsOn": [], "languages": []}} + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/service-catalog + Scenario: Create or update entities without metadata name returns "Internal Server Error" response + Given new "UpsertCatalogEntity" request + And body with value {"apiVersion": "v3", "datadog": {"codeLocations": [{"paths": []}], "events": [{}], "logs": [{}], "performanceData": {"tags": []}, "pipelines": {"fingerprints": []}}, "integrations": {"opsgenie": {"serviceURL": "https://www.opsgenie.com/service/shopping-cart"}, "pagerduty": {"serviceURL": "https://www.pagerduty.com/service-directory/Pshopping-cart"}}, "kind": "service", "metadata": {"additionalOwners": [], "contacts": [{"contact": "https://slack/", "type": "slack"}], "id": "4b163705-23c0-4573-b2fb-f6cea2163fcb", "inheritFrom": "application:default/myapp", "links": [{"name": "mylink", "type": "link", "url": "https://mylink"}], "tags": ["this:tag", "that:tag"]}, "spec": {"dependsOn": [], "languages": []}} + When the request is sent + Then the response status is 500 Internal Server Error + + @generated @skip @team:DataDog/service-catalog + Scenario: Create or update kinds returns "ACCEPTED" response + Given new "UpsertCatalogKind" request + And body with value {"kind": "my-job"} + When the request is sent + Then the response status is 202 ACCEPTED + + @generated @skip @team:DataDog/service-catalog + Scenario: Create or update kinds returns "Bad Request" response + Given new "UpsertCatalogKind" request + And body with value {"kind": "my-job"} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/service-catalog + Scenario: Create or update software catalog entity using schema v3 returns "ACCEPTED" response + Given new "UpsertCatalogEntity" request + And body with value {"apiVersion": "v3", "datadog": {"codeLocations": [{"paths": []}], "events": [{}], "logs": [{}], "performanceData": {"tags": []}, "pipelines": {"fingerprints": []}}, "integrations": {"opsgenie": {"serviceURL": "https://www.opsgenie.com/service/shopping-cart"}, "pagerduty": {"serviceURL": "https://www.pagerduty.com/service-directory/Pshopping-cart"}}, "kind": "service", "metadata": {"additionalOwners": [], "contacts": [{"contact": "https://slack/", "type": "slack"}], "id": "4b163705-23c0-4573-b2fb-f6cea2163fcb", "inheritFrom": "application:default/myapp", "links": [{"name": "mylink", "type": "link", "url": "https://mylink"}], "name": "service-{{ unique_lower_alnum }}", "tags": ["this:tag", "that:tag"]}, "spec": {"dependsOn": [], "languages": []}} + When the request is sent + Then the response status is 202 ACCEPTED + And the response "data[0].attributes.apiVersion" is equal to "v3" + And the response "data[0].attributes.kind" is equal to "service" + And the response "data[0].attributes.name" is equal to "service-{{ unique_lower_alnum }}" + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a single entity returns "Bad Request" response + Given new "DeleteCatalogEntity" request + And request contains "entity_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a single entity returns "Not Found" response + Given new "DeleteCatalogEntity" request + And request contains "entity_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a single entity returns "OK" response + Given new "DeleteCatalogEntity" request + And request contains "entity_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a single kind returns "Bad Request" response + Given new "DeleteCatalogKind" request + And request contains "kind_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a single kind returns "Not Found" response + Given new "DeleteCatalogKind" request + And request contains "kind_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/service-catalog + Scenario: Delete a single kind returns "OK" response + Given new "DeleteCatalogKind" request + And request contains "kind_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 OK + + @skip @team:DataDog/service-catalog + Scenario: Delete an entity returns "Not Found" response + Given new "DeleteCatalogEntity" request + And request contains "entity_id" parameter with value "service:not-a-service" + When the request is sent + Then the response status is 404 Not Found + And the response "errors[0]" is equal to "Not Found" + + @team:DataDog/service-catalog + Scenario: Get a list of entities returns "OK" response + Given new "ListCatalogEntity" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/service-catalog @with-pagination + Scenario: Get a list of entities returns "OK" response with pagination + Given new "ListCatalogEntity" request + When the request with pagination is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/service-catalog + Scenario: Get a list of entity kinds returns "Bad Request" response + Given new "ListCatalogKind" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/service-catalog + Scenario: Get a list of entity kinds returns "OK" response + Given new "ListCatalogKind" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/service-catalog @with-pagination + Scenario: Get a list of entity kinds returns "OK" response with pagination + Given new "ListCatalogKind" request + When the request with pagination is sent + Then the response status is 200 OK + + @replay-only @team:DataDog/service-catalog + Scenario: Get a list of entity relations returns "OK" response + Given new "ListCatalogRelation" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/service-catalog @with-pagination + Scenario: Get a list of entity relations returns "OK" response with pagination + Given new "ListCatalogRelation" request + And request contains "page[limit]" parameter with value 20 + When the request with pagination is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/service-catalog + Scenario: Preview catalog entities returns "Accepted" response + Given new "PreviewCatalogEntities" request + When the request is sent + Then the response status is 202 Accepted diff --git a/test-runner-data/features/v2/spans.feature b/test-runner-data/features/v2/spans.feature new file mode 100644 index 0000000000..bd1cfba58a --- /dev/null +++ b/test-runner-data/features/v2/spans.feature @@ -0,0 +1,82 @@ +@endpoint(spans) @endpoint(spans-v2) +Feature: Spans + Search and aggregate your spans from your Datadog platform over HTTP. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Spans" API + + @skip @team:DataDog/apm + Scenario: Aggregate spans returns "Bad Request" response + Given new "AggregateSpans" request + And body with value {"compute": [{"aggregation": "pc90", "interval": "5m", "metric": "@duration", "type": "total"}], "filter": {"from": "now-15m", "query": "service:web* AND @http.status_code:[200 TO 299]", "to": "now"}, "group_by": [{"facet": "host", "histogram": {"interval": 10, "max": 100, "min": 50}, "limit": 10, "sort": {"aggregation": "count", "order": "asc"}, "total": false}], "options": {"timezone": "GMT"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/apm + Scenario: Aggregate spans returns "OK" response + Given new "AggregateSpans" request + And body with value {"data":{"attributes": {"compute": [{"aggregation": "count", "interval": "5m", "type": "timeseries"}],"filter": {"from": "now-15m", "query": "*", "to": "now"}},"type":"aggregate_request"}} + When the request is sent + Then the response status is 200 OK + And the response "meta.status" is equal to "done" + + @generated @skip @team:DataDog/apm + Scenario: Get a list of spans returns "Bad Request." response + Given new "ListSpansGet" request + When the request is sent + Then the response status is 400 Bad Request. + + @replay-only @team:DataDog/apm + Scenario: Get a list of spans returns "OK" response + Given new "ListSpansGet" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "spans" + + @replay-only @skip-validation @team:DataDog/apm @with-pagination + Scenario: Get a list of spans returns "OK" response with pagination + Given new "ListSpansGet" request + And request contains "page[limit]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @team:DataDog/apm + Scenario: Get a list of spans returns "Unprocessable Entity." response + Given new "ListSpansGet" request + And request contains "filter[from]" parameter with value "now" + And request contains "filter[to]" parameter with value "now-1m" + When the request is sent + Then the response status is 422 Unprocessable Entity. + + @skip @team:DataDog/apm + Scenario: Search spans returns "Bad Request." response + Given new "ListSpans" request + And body with value {"filter": {"from": "now-15m", "query": "service:web*", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", "limit": 25}, "sort": "timestamp"} + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/apm + Scenario: Search spans returns "OK" response + Given new "ListSpans" request + And body with value {"data": {"attributes": {"filter": {"from": "now-15m", "query": "*", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"limit": 25}, "sort": "timestamp"}, "type": "search_request"}} + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "spans" + + @replay-only @skip-validation @team:DataDog/apm @with-pagination + Scenario: Search spans returns "OK" response with pagination + Given new "ListSpans" request + And body with value {"data": {"attributes": {"filter": {"from": "now-15m", "query": "service:python*", "to": "now"}, "options": {"timezone": "GMT"}, "page": {"limit": 2}, "sort": "timestamp"}, "type": "search_request"}} + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @team:DataDog/apm + Scenario: Search spans returns "Unprocessable Entity." response + Given new "ListSpans" request + And body with value {"data": {"attributes": {"filter": {"from": "now", "query": "service:web* AND @http.status_code:[200 TO 299]", "to": "now-15m"}, "options": {"timezone": "GMT"}, "page": {"limit": 10}, "sort": "timestamp"}, "type": "search_request"}} + When the request is sent + Then the response status is 422 Unprocessable Entity. diff --git a/test-runner-data/features/v2/spans_metrics.feature b/test-runner-data/features/v2/spans_metrics.feature new file mode 100644 index 0000000000..9de01b47e5 --- /dev/null +++ b/test-runner-data/features/v2/spans_metrics.feature @@ -0,0 +1,100 @@ +@endpoint(spans-metrics) @endpoint(spans-metrics-v2) +Feature: Spans Metrics + Manage configuration of [span-based + metrics](https://app.datadoghq.com/apm/traces/generate-metrics) for your + organization. See [Generate Metrics from Spans](https://docs.datadoghq.com + /tracing/trace_pipeline/generate_metrics/) for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "SpansMetrics" API + + @generated @skip @team:DataDog/apm + Scenario: Create a span-based metric returns "Bad Request" response + Given new "CreateSpansMetric" request + And body with value {"data": {"attributes": {"compute": {"aggregation_type": "distribution", "include_percentiles": false, "path": "@duration"}, "filter": {"query": "@http.status_code:200 service:my-service"}, "group_by": [{"path": "resource_name", "tag_name": "resource_name"}]}, "id": "my.metric", "type": "spans_metrics"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/apm + Scenario: Create a span-based metric returns "Conflict" response + Given new "CreateSpansMetric" request + And body with value {"data": {"attributes": {"compute": {"aggregation_type": "distribution", "include_percentiles": false, "path": "@duration"}, "filter": {"query": "@http.status_code:200 service:my-service"}, "group_by": [{"path": "resource_name", "tag_name": "resource_name"}]}, "id": "my.metric", "type": "spans_metrics"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/apm + Scenario: Create a span-based metric returns "OK" response + Given new "CreateSpansMetric" request + And body with value {"data": {"attributes": {"compute": {"aggregation_type": "distribution", "include_percentiles": false, "path": "@duration"}, "filter": {"query": "@http.status_code:200 service:my-service"}, "group_by": [{"path": "resource_name", "tag_name": "resource_name"}]}, "id": "{{ unique_alnum }}", "type": "spans_metrics"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" has the same value as "unique_alnum" + And the response "data.type" is equal to "spans_metrics" + And the response "data.attributes.compute.aggregation_type" is equal to "distribution" + + @generated @skip @team:DataDog/apm + Scenario: Delete a span-based metric returns "Not Found" response + Given new "DeleteSpansMetric" request + And request contains "metric_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/apm + Scenario: Delete a span-based metric returns "OK" response + Given there is a valid "spans_metric" in the system + And new "DeleteSpansMetric" request + And request contains "metric_id" parameter from "spans_metric.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/apm + Scenario: Get a span-based metric returns "Not Found" response + Given new "GetSpansMetric" request + And request contains "metric_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/apm + Scenario: Get a span-based metric returns "OK" response + Given there is a valid "spans_metric" in the system + And new "GetSpansMetric" request + And request contains "metric_id" parameter from "spans_metric.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.filter.query" has the same value as "spans_metric.data.attributes.filter.query" + + @team:DataDog/apm + Scenario: Get all span-based metrics returns "OK" response + Given there is a valid "spans_metric" in the system + And new "ListSpansMetrics" request + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "spans_metrics" + + @generated @skip @team:DataDog/apm + Scenario: Update a span-based metric returns "Bad Request" response + Given new "UpdateSpansMetric" request + And request contains "metric_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"compute": {"include_percentiles": false}, "filter": {"query": "@http.status_code:200 service:my-service"}, "group_by": [{"path": "resource_name", "tag_name": "resource_name"}]}, "type": "spans_metrics"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/apm + Scenario: Update a span-based metric returns "Not Found" response + Given new "UpdateSpansMetric" request + And request contains "metric_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"compute": {"include_percentiles": false}, "filter": {"query": "@http.status_code:200 service:my-service"}, "group_by": [{"path": "resource_name", "tag_name": "resource_name"}]}, "type": "spans_metrics"}} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/apm + Scenario: Update a span-based metric returns "OK" response + Given there is a valid "spans_metric" in the system + And new "UpdateSpansMetric" request + And request contains "metric_id" parameter from "spans_metric.data.id" + And body with value {"data": {"attributes": {"compute": {"include_percentiles": false}, "filter": {"query": "{{ spans_metric.data.attributes.filter.query }}-updated"}, "group_by": [{"path": "resource_name", "tag_name": "resource_name"}]}, "type": "spans_metrics"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.filter.query" is equal to "{{ spans_metric.data.attributes.filter.query }}-updated" diff --git a/test-runner-data/features/v2/status_pages.feature b/test-runner-data/features/v2/status_pages.feature new file mode 100644 index 0000000000..95da2ead98 --- /dev/null +++ b/test-runner-data/features/v2/status_pages.feature @@ -0,0 +1,339 @@ +@endpoint(status-pages) @endpoint(status-pages-v2) +Feature: Status Pages + Manage your status pages and communicate service disruptions to + stakeholders via Datadog's API. See the [Status Pages + documentation](https://docs.datadoghq.com/incident_response/status_pages/) + for more information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "StatusPages" API + + @team:DataDog/incident-app + Scenario: Create backfilled degradation returns "Created" response + Given there is a valid "status_page" in the system + And new "CreateBackfilledDegradation" request + And request contains "page_id" parameter from "status_page.data.id" + And body with value {"data": {"attributes": {"title": "Past API Outage", "updates": [{"components_affected": [{"id": "{{ status_page.data.attributes.components[0].components[0].id }}", "status": "degraded"}], "description": "We detected elevated error rates in the API.", "started_at": "{{ timeISO('now - 1h') }}", "status": "investigating"}, {"components_affected": [{"id": "{{ status_page.data.attributes.components[0].components[0].id }}", "status": "degraded"}], "description": "Root cause identified as a misconfigured deployment.", "started_at": "{{ timeISO('now - 30m') }}", "status": "identified"}, {"components_affected": [{"id": "{{ status_page.data.attributes.components[0].components[0].id }}", "status": "operational"}], "description": "The issue has been resolved and API is operating normally.", "started_at": "{{ timeISO('now') }}", "status": "resolved"}]}, "type": "degradations"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.title" is equal to "Past API Outage" + + @team:DataDog/incident-app + Scenario: Create backfilled maintenance returns "Created" response + Given there is a valid "status_page" in the system + And new "CreateBackfilledMaintenance" request + And request contains "page_id" parameter from "status_page.data.id" + And body with value {"data": {"attributes": {"title": "Past Database Maintenance", "updates": [{"components_affected": [{"id": "{{ status_page.data.attributes.components[0].components[0].id }}", "status": "maintenance"}], "description": "Database maintenance is in progress.", "started_at": "{{ timeISO('now - 1h') }}", "status": "in_progress"}, {"components_affected": [{"id": "{{ status_page.data.attributes.components[0].components[0].id }}", "status": "operational"}], "description": "Database maintenance has been completed successfully.", "started_at": "{{ timeISO('now') }}", "status": "completed"}]}, "type": "maintenances"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.title" is equal to "Past Database Maintenance" + + @team:DataDog/incident-app + Scenario: Create component returns "Created" response + Given there is a valid "status_page" in the system + And new "CreateComponent" request + And request contains "page_id" parameter from "status_page.data.id" + And body with value {"data": {"attributes": {"name": "Logs", "position": 0, "type": "component"}, "type": "components"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.status" is equal to "operational" + + @team:DataDog/incident-app + Scenario: Create degradation returns "Created" response + Given there is a valid "status_page" in the system + And new "CreateDegradation" request + And request contains "page_id" parameter from "status_page.data.id" + And body with value {"data": {"attributes": {"components_affected": [{"id": "{{ status_page.data.attributes.components[0].components[0].id }}", "status": "major_outage"}], "description": "Our API is experiencing elevated latency. We are investigating the issue.", "status": "investigating", "title": "Elevated API Latency"}, "type": "degradations"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.updates" has length 1 + + @generated @skip @team:DataDog/incident-app + Scenario: Create degradation template returns "Created" response + Given new "CreateDegradationTemplate" request + And request contains "page_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"components_affected": [{"id": "", "status": "operational"}], "name": "", "updates": [{"status": "investigating"}]}, "type": "degradation_templates"}} + When the request is sent + Then the response status is 201 Created + + @team:DataDog/incident-app + Scenario: Create maintenance returns "Created" response + Given there is a valid "status_page" in the system + And new "CreateMaintenance" request + And request contains "page_id" parameter from "status_page.data.id" + And body with value {"data": {"attributes": {"title": "API Maintenance", "scheduled_description": "We will be performing maintenance on the API to improve performance.", "in_progress_description": "We are currently performing maintenance on the API to improve performance.", "completed_description": "We have completed maintenance on the API to improve performance.", "start_date": "{{ timeISO('now + 1h') }}", "completed_date": "{{ timeISO('now + 2h') }}", "components_affected": [{"id": "{{ status_page.data.attributes.components[0].components[0].id }}", "status": "operational"}]}, "type": "maintenances"}} + When the request is sent + Then the response status is 201 Created + And the response "data.attributes.updates" has length 1 + + @generated @skip @team:DataDog/incident-app + Scenario: Create maintenance template returns "Created" response + Given new "CreateMaintenanceTemplate" request + And request contains "page_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"component_ids": [], "name": ""}, "type": "maintenance_templates"}} + When the request is sent + Then the response status is 201 Created + + @team:DataDog/incident-app + Scenario: Create status page returns "Created" response + Given new "CreateStatusPage" request + And body with value {"data": {"attributes": {"name": "A Status Page", "domain_prefix": "{{ unique_hash }}", "components":[{"name": "Login", "type": "component", "position": 0},{"name": "Settings", "type": "component", "position": 1}], "type": "internal", "visualization_type": "bars_and_uptime_percentage"}, "type": "status_pages"}} + When the request is sent + Then the response status is 201 Created + + @team:DataDog/incident-app + Scenario: Delete component returns "No Content" response + Given new "DeleteComponent" request + And there is a valid "status_page" in the system + And request contains "page_id" parameter from "status_page.data.id" + And request contains "component_id" parameter from "status_page.data.attributes.components[0].id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/incident-app + Scenario: Delete degradation returns "No Content" response + Given new "DeleteDegradation" request + And there is a valid "status_page" in the system + And there is a valid "degradation" in the system + And request contains "page_id" parameter from "status_page.data.id" + And request contains "degradation_id" parameter from "degradation.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/incident-app + Scenario: Delete degradation template returns "No Content" response + Given new "DeleteDegradationTemplate" request + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "template_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 maintenance template returns "No Content" response + Given new "DeleteMaintenanceTemplate" request + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "template_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/incident-app + Scenario: Delete status page returns "No Content" response + Given new "DeleteStatusPage" request + And there is a valid "status_page" in the system + And request contains "page_id" parameter from "status_page.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/incident-app + Scenario: Edit degradation update returns "OK" response + Given new "EditDegradationUpdate" request + And request contains "degradation_id" parameter from "REPLACE.ME" + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "update_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "We've identified the source of the latency increase and are deploying a fix.", "status": "identified"}, "id": "00000000-0000-0000-0000-000000000000", "type": "degradation_updates"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Edit maintenance update returns "OK" response + Given new "PatchMaintenanceUpdate" request + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "maintenance_id" parameter from "REPLACE.ME" + And request contains "update_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"description": "We have completed maintenance on the API to improve performance."}, "id": "00000000-0000-0000-0000-000000000000", "type": "maintenance_updates"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: Get component returns "OK" response + Given new "GetComponent" request + And there is a valid "status_page" in the system + And request contains "page_id" parameter from "status_page.data.id" + And request contains "component_id" parameter from "status_page.data.attributes.components[0].id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: Get degradation returns "OK" response + Given new "GetDegradation" request + And there is a valid "status_page" in the system + And there is a valid "degradation" in the system + And request contains "page_id" parameter from "status_page.data.id" + And request contains "degradation_id" parameter from "degradation.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Get degradation template returns "OK" response + Given new "GetDegradationTemplate" request + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "template_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: Get maintenance returns "OK" response + Given there is a valid "status_page" in the system + And there is a valid "maintenance" in the system + And new "GetMaintenance" request + And request contains "page_id" parameter from "status_page.data.id" + And request contains "maintenance_id" parameter from "maintenance.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Get maintenance template returns "OK" response + Given new "GetMaintenanceTemplate" request + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "template_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: Get status page returns "OK" response + Given new "GetStatusPage" request + And there is a valid "status_page" in the system + And request contains "page_id" parameter from "status_page.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: List components returns "OK" response + Given new "ListComponents" request + And there is a valid "status_page" in the system + And request contains "page_id" parameter from "status_page.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: List degradation templates returns "OK" response + Given new "ListDegradationTemplates" request + And request contains "page_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: List degradations returns "OK" response + Given new "ListDegradations" request + And there is a valid "status_page" in the system + And there is a valid "degradation" in the system + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: List maintenance templates returns "OK" response + Given new "ListMaintenanceTemplates" request + And request contains "page_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: List maintenances returns "OK" response + Given there is a valid "status_page" in the system + And there is a valid "maintenance" in the system + And new "ListMaintenances" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: List status pages returns "OK" response + Given new "ListStatusPages" request + And there is a valid "status_page" in the system + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: Publish status page returns "No Content" response + Given there is a valid "status_page" in the system + And new "PublishStatusPage" request + And request contains "page_id" parameter from "status_page.data.id" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/incident-app + Scenario: Schedule maintenance returns "Created" response + Given new "CreateMaintenance" request + And request contains "page_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"completed_date": "2026-02-18T19:51:13.332360075Z", "completed_description": "We have completed maintenance on the API to improve performance.", "components_affected": [{"id": "1234abcd-12ab-34cd-56ef-123456abcdef", "status": "operational"}], "in_progress_description": "We are currently performing maintenance on the API to improve performance.", "scheduled_description": "We will be performing maintenance on the API to improve performance.", "start_date": "2026-02-18T19:21:13.332360075Z", "title": "API Maintenance"}, "type": "maintenances"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/incident-app + Scenario: Soft delete degradation update returns "No Content" response + Given new "SoftDeleteDegradationUpdate" request + And request contains "degradation_id" parameter from "REPLACE.ME" + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "update_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: Unpublish status page returns "No Content" response + Given new "UnpublishStatusPage" request + And request contains "page_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/incident-app + Scenario: Update component returns "OK" response + Given new "UpdateComponent" request + And there is a valid "status_page" in the system + And request contains "page_id" parameter from "status_page.data.id" + And request contains "component_id" parameter from "status_page.data.attributes.components[0].id" + And body with value {"data": {"attributes": {"name": "Logs Indexing"}, "id": "{{ status_page.data.attributes.components[0].id }}", "type": "components"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "Logs Indexing" + + @team:DataDog/incident-app + Scenario: Update degradation returns "OK" response + Given new "UpdateDegradation" request + And there is a valid "status_page" in the system + And there is a valid "degradation" in the system + And request contains "page_id" parameter from "status_page.data.id" + And request contains "degradation_id" parameter from "degradation.data.id" + And body with value {"data": {"attributes": {"title": "Elevated API Latency in US1"}, "id": "{{ degradation.data.id }}", "type": "degradations"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.title" is equal to "Elevated API Latency in US1" + + @generated @skip @team:DataDog/incident-app + Scenario: Update degradation template returns "OK" response + Given new "UpdateDegradationTemplate" request + And request contains "template_id" parameter from "REPLACE.ME" + And request contains "page_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"components_affected": [{"id": "", "status": "operational"}], "updates": [{"status": "investigating"}]}, "id": "", "type": "degradation_templates"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: Update maintenance returns "OK" response + Given there is a valid "status_page" in the system + And there is a valid "maintenance" in the system + And new "UpdateMaintenance" request + And request contains "page_id" parameter from "status_page.data.id" + And request contains "maintenance_id" parameter from "maintenance.data.id" + And body with value {"data": {"attributes": {"scheduled_description": "We will be performing maintenance on the API to improve performance for 40 minutes.", "in_progress_description": "We are currently performing maintenance on the API to improve performance for 40 minutes."}, "id": "{{ maintenance.data.id }}", "type": "maintenances"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/incident-app + Scenario: Update maintenance template returns "OK" response + Given new "UpdateMaintenanceTemplate" request + And request contains "page_id" parameter from "REPLACE.ME" + And request contains "template_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"component_ids": []}, "id": "", "type": "maintenance_templates"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/incident-app + Scenario: Update status page returns "OK" response + Given new "UpdateStatusPage" request + And there is a valid "status_page" in the system + And request contains "page_id" parameter from "status_page.data.id" + And body with value {"data": {"attributes": {"name": "A Status Page in US1"}, "id": "{{ status_page.data.id }}", "type": "status_pages"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "A Status Page in US1" diff --git a/test-runner-data/features/v2/synthetics.feature b/test-runner-data/features/v2/synthetics.feature new file mode 100644 index 0000000000..f43e2e2c99 --- /dev/null +++ b/test-runner-data/features/v2/synthetics.feature @@ -0,0 +1,563 @@ +@endpoint(synthetics) @endpoint(synthetics-v2) +Feature: Synthetics + Synthetic tests use simulated requests and actions so you can monitor the + availability and performance of systems and applications. Datadog supports + the following types of synthetic tests: - [API + tests](https://docs.datadoghq.com/synthetics/api_tests/) - [Browser + tests](https://docs.datadoghq.com/synthetics/browser_tests) - [Network + Path tests](https://docs.datadoghq.com/synthetics/network_path_tests/) - + [Mobile Application + tests](https://docs.datadoghq.com/synthetics/mobile_app_testing) You can + use the Datadog API to create, manage, and organize tests and test suites + programmatically. For more information, see the [Synthetic Monitoring + documentation](https://docs.datadoghq.com/synthetics/). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Synthetics" API + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Abort a multipart upload of a test file returns "API error response." response + Given new "AbortTestFileMultipartUpload" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"key": "org-123/api-upload-file/abc-def-123/2024-01-01T00:00:00_uuid.json", "uploadId": "upload-id-abc123"} + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Abort a multipart upload of a test file returns "No Content" response + Given new "AbortTestFileMultipartUpload" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"key": "org-123/api-upload-file/abc-def-123/2024-01-01T00:00:00_uuid.json", "uploadId": "upload-id-abc123"} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Add a test to a Synthetics downtime returns "Bad Request" response + Given new "AddTestToSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And request contains "test_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Add a test to a Synthetics downtime returns "Not Found" response + Given new "AddTestToSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And request contains "test_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Add a test to a Synthetics downtime returns "OK" response + Given new "AddTestToSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And request contains "test_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Bulk delete suites returns "API error response." response + Given new "DeleteSyntheticsSuites" request + And body with value {"data": {"attributes": {"public_ids": [""]}, "type": "delete_suites_request"}} + When the request is sent + Then the response status is 400 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Bulk delete suites returns "OK" response + Given new "DeleteSyntheticsSuites" request + And body with value {"data": {"attributes": {"public_ids": [""]}, "type": "delete_suites_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Bulk delete tests returns "API error response." response + Given new "DeleteSyntheticsTests" request + And body with value {"data": {"attributes": {"public_ids": ["abc-def-123"]}, "type": "delete_tests_request"}} + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Bulk delete tests returns "OK" response + Given new "DeleteSyntheticsTests" request + And body with value {"data": {"attributes": {"public_ids": ["abc-def-123"]}, "type": "delete_tests_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Complete a multipart upload of a test file returns "API error response." response + Given new "CompleteTestFileMultipartUpload" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"key": "org-123/api-upload-file/abc-def-123/2024-01-01T00:00:00_uuid.json", "parts": [{"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"", "PartNumber": 1}], "uploadId": "upload-id-abc123"} + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Complete a multipart upload of a test file returns "No Content" response + Given new "CompleteTestFileMultipartUpload" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"key": "org-123/api-upload-file/abc-def-123/2024-01-01T00:00:00_uuid.json", "parts": [{"ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"", "PartNumber": 1}], "uploadId": "upload-id-abc123"} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a Network Path test returns "API error response." response + Given new "CreateSyntheticsNetworkTest" request + And body with value {"data": {"attributes": {"config": {"assertions": [{"operator": "lessThan", "property": "avg", "target": 500, "type": "latency"}], "request": {"e2e_queries": 50, "host": "", "max_ttl": 30, "port": 443, "tcp_method": "prefer_sack", "traceroute_queries": 3}}, "locations": ["aws:us-east-1", "agent:my-agent-name"], "message": "Network Path test notification", "name": "Example Network Path test", "options": {"monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "tcp", "tags": ["env:production"], "type": "network"}, "type": "network"}} + When the request is sent + Then the response status is 400 API error response. + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a Network Path test returns "OK" response + Given new "CreateSyntheticsNetworkTest" request + And body with value {"data": {"attributes": {"config": {"assertions": [{"operator": "lessThan", "property": "avg", "target": 500, "type": "latency"}], "request": {"host": "example.com", "port": 443, "tcp_method": "prefer_sack", "max_ttl": 30, "e2e_queries": 50, "traceroute_queries": 3}}, "locations": ["aws:us-east-1", "agent:my-agent-name"], "message": "Network Path test notification", "name": "Example Network Path test", "options": {"tick_every": 60}, "status": "live", "subtype": "tcp", "tags": ["env:production"], "type": "network"}, "type": "network"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a Synthetics downtime returns "Bad Request" response + Given new "CreateSyntheticsDowntime" request + And body with value {"data": {"attributes": {"isEnabled": true, "name": "Weekly maintenance", "testIds": ["abc-def-123"], "timeSlots": [{"duration": 3600, "start": {"day": 15, "hour": 10, "minute": 30, "month": 1, "year": 2024}, "timezone": "Europe/Paris"}]}, "type": "downtime"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a Synthetics downtime returns "Created" response + Given new "CreateSyntheticsDowntime" request + And body with value {"data": {"attributes": {"isEnabled": true, "name": "Weekly maintenance", "testIds": ["abc-def-123"], "timeSlots": [{"duration": 3600, "start": {"day": 15, "hour": 10, "minute": 30, "month": 1, "year": 2024}, "timezone": "Europe/Paris"}]}, "type": "downtime"}} + When the request is sent + Then the response status is 201 Created + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a test suite returns "API error response." response + Given new "CreateSyntheticsSuite" request + And body with value {"data": {"attributes": {"message": "Notification message", "name": "Example suite name", "options": {}, "tags": ["env:production"], "tests": [{"alerting_criticality": "critical", "public_id": ""}], "type": "suite"}, "type": "suites"}} + When the request is sent + Then the response status is 400 API error response. + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Create a test suite returns "OK" response + Given new "CreateSyntheticsSuite" request + And body with value {"data": {"attributes": {"message": "Notification message", "name": "Example suite name", "options": {}, "tags": ["env:production"], "tests": [], "type": "suite"}, "type": "suites"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete a Synthetics downtime returns "Bad Request" response + Given new "DeleteSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete a Synthetics downtime returns "No Content" response + Given new "DeleteSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Delete a Synthetics downtime returns "Not Found" response + Given new "DeleteSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a Network Path test returns "API error response." response + Given new "UpdateSyntheticsNetworkTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"config": {"assertions": [{"operator": "lessThan", "property": "avg", "target": 500, "type": "latency"}], "request": {"e2e_queries": 50, "host": "", "max_ttl": 30, "port": 443, "tcp_method": "prefer_sack", "traceroute_queries": 3}}, "locations": ["aws:us-east-1", "agent:my-agent-name"], "message": "Network Path test notification", "name": "Example Network Path test", "options": {"monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "tcp", "tags": ["env:production"], "type": "network"}, "type": "network"}} + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a Network Path test returns "OK" response + Given new "UpdateSyntheticsNetworkTest" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"config": {"assertions": [{"operator": "lessThan", "property": "avg", "target": 500, "type": "latency"}], "request": {"e2e_queries": 50, "host": "", "max_ttl": 30, "port": 443, "tcp_method": "prefer_sack", "traceroute_queries": 3}}, "locations": ["aws:us-east-1", "agent:my-agent-name"], "message": "Network Path test notification", "name": "Example Network Path test", "options": {"monitor_options": {"notification_preset_name": "show_all"}, "restricted_roles": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"], "retry": {}, "scheduling": {"timeframes": [{"day": 1, "from": "07:00", "to": "16:00"}, {"day": 3, "from": "07:00", "to": "16:00"}], "timezone": "America/New_York"}}, "status": "live", "subtype": "tcp", "tags": ["env:production"], "type": "network"}, "type": "network"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a test suite returns "API error response." response + Given new "EditSyntheticsSuite" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"message": "Notification message", "name": "Example suite name", "options": {}, "tags": ["env:production"], "tests": [{"alerting_criticality": "critical", "public_id": ""}], "type": "suite"}, "type": "suites"}} + When the request is sent + Then the response status is 400 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Edit a test suite returns "OK" response + Given new "EditSyntheticsSuite" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"message": "Notification message", "name": "Example suite name", "options": {}, "tags": ["env:production"], "tests": [{"alerting_criticality": "critical", "public_id": ""}], "type": "suite"}, "type": "suites"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a Network Path test returns "API error response." response + Given new "GetSyntheticsNetworkTest" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @replay-only @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a Network Path test returns "OK" response + Given new "GetSyntheticsNetworkTest" request + And request contains "public_id" parameter with value "c7a-uwa-wn2" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a Synthetics downtime returns "Bad Request" response + Given new "GetSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a Synthetics downtime returns "Not Found" response + Given new "GetSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a Synthetics downtime returns "OK" response + Given new "GetSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test result returns "API error response." response + Given new "GetSyntheticsBrowserTestResult" request + And request contains "public_id" parameter from "REPLACE.ME" + And request contains "result_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test result returns "OK" response + Given new "GetSyntheticsBrowserTestResult" request + And request contains "public_id" parameter from "REPLACE.ME" + And request contains "result_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test's latest results returns "API error response." response + Given new "ListSyntheticsBrowserTestLatestResults" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a browser test's latest results returns "OK" response + Given new "ListSyntheticsBrowserTestLatestResults" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a fast test result returns "API error response." response + Given new "GetSyntheticsFastTestResult" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a fast test result returns "OK" response + Given new "GetSyntheticsFastTestResult" request + And request contains "id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a presigned URL for downloading a test file returns "API error response." response + Given new "GetTestFileDownloadUrl" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"bucketKey": "api-upload-file/abc-def-123/2024-01-01T00:00:00_uuid.json"} + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a presigned URL for downloading a test file returns "OK" response + Given new "GetTestFileDownloadUrl" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"bucketKey": "api-upload-file/abc-def-123/2024-01-01T00:00:00_uuid.json"} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a specific version of a test returns "API error response." response + Given new "GetSyntheticsTestVersion" request + And request contains "public_id" parameter from "REPLACE.ME" + And request contains "version_number" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a specific version of a test returns "OK" response + Given new "GetSyntheticsTestVersion" request + And request contains "public_id" parameter from "REPLACE.ME" + And request contains "version_number" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a suite returns "API error response." response + Given new "GetSyntheticsSuite" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a suite returns "OK" response + Given new "GetSyntheticsSuite" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a test result returns "API error response." response + Given new "GetSyntheticsTestResult" request + And request contains "public_id" parameter from "REPLACE.ME" + And request contains "result_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a test result returns "OK" response + Given new "GetSyntheticsTestResult" request + And request contains "public_id" parameter from "REPLACE.ME" + And request contains "result_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a test's latest results returns "API error response." response + Given new "ListSyntheticsTestLatestResults" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get a test's latest results returns "OK" response + Given new "ListSyntheticsTestLatestResults" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get available subtests for a multistep test returns "OK" response + Given new "GetApiMultistepSubtests" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get parent suites for a test returns "API error response." response + Given new "GetTestParentSuites" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get parent suites for a test returns "OK" response + Given new "GetTestParentSuites" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get parent tests for a subtest returns "API error response." response + Given new "GetApiMultistepSubtestParents" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get parent tests for a subtest returns "OK" response + Given new "GetApiMultistepSubtestParents" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get presigned URLs for uploading a test file returns "API error response." response + Given new "GetTestFileMultipartPresignedUrls" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"bucketKeyPrefix": "api-upload-file", "parts": [{"md5": "1B2M2Y8AsgTpgAmY7PhCfg==", "partNumber": 1}]} + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get presigned URLs for uploading a test file returns "OK" response + Given new "GetTestFileMultipartPresignedUrls" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"bucketKeyPrefix": "api-upload-file", "parts": [{"md5": "1B2M2Y8AsgTpgAmY7PhCfg==", "partNumber": 1}]} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Get the on-demand concurrency cap returns "OK" response + Given new "GetOnDemandConcurrencyCap" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get version history of a test returns "API error response." response + Given new "ListSyntheticsTestVersions" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Get version history of a test returns "OK" response + Given new "ListSyntheticsTestVersions" request + And request contains "public_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: List Synthetics downtimes returns "Bad Request" response + Given new "ListSyntheticsDowntimes" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: List Synthetics downtimes returns "OK" response + Given new "ListSyntheticsDowntimes" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Patch a global variable returns "Bad Request" response + Given new "PatchGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"json_patch": [{"op": "add", "path": "/name"}]}, "type": "global_variables_json_patch"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Patch a global variable returns "Not Found" response + Given new "PatchGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"json_patch": [{"op": "add", "path": "/name"}]}, "type": "global_variables_json_patch"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Patch a global variable returns "OK" response + Given new "PatchGlobalVariable" request + And request contains "variable_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"json_patch": [{"op": "add", "path": "/name"}]}, "type": "global_variables_json_patch"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Patch a test suite returns "API error response." response + Given new "PatchTestSuite" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"json_patch": [{"op": "add", "path": "/name"}]}, "type": "suites_json_patch"}} + When the request is sent + Then the response status is 400 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Patch a test suite returns "OK" response + Given new "PatchTestSuite" request + And request contains "public_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"json_patch": [{"op": "add", "path": "/name"}]}, "type": "suites_json_patch"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Poll for test results returns "API error response." response + Given new "PollSyntheticsTestResults" request + And request contains "result_ids" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Poll for test results returns "OK" response + Given new "PollSyntheticsTestResults" request + And request contains "result_ids" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Remove a test from a Synthetics downtime returns "Bad Request" response + Given new "RemoveTestFromSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And request contains "test_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Remove a test from a Synthetics downtime returns "Not Found" response + Given new "RemoveTestFromSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And request contains "test_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Remove a test from a Synthetics downtime returns "OK" response + Given new "RemoveTestFromSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And request contains "test_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Save new value for on-demand concurrency cap returns "OK" response + Given new "SetOnDemandConcurrencyCap" request + And body with value {"on_demand_concurrency_cap": 20} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.on_demand_concurrency_cap" is equal to 20 + + @team:DataDog/synthetics-orchestrating-managing + Scenario: Search Synthetics suites returns "OK" response + Given new "SearchSuites" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Search test suites returns "API error response." response + Given new "SearchSuites" request + When the request is sent + Then the response status is 400 API error response. + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Search test suites returns "OK" response + Given new "SearchSuites" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Update a Synthetics downtime returns "Bad Request" response + Given new "UpdateSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"isEnabled": true, "name": "Weekly maintenance", "testIds": ["abc-def-123"], "timeSlots": [{"duration": 3600, "start": {"day": 15, "hour": 10, "minute": 30, "month": 1, "year": 2024}, "timezone": "Europe/Paris"}]}, "type": "downtime"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Update a Synthetics downtime returns "Not Found" response + Given new "UpdateSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"isEnabled": true, "name": "Weekly maintenance", "testIds": ["abc-def-123"], "timeSlots": [{"duration": 3600, "start": {"day": 15, "hour": 10, "minute": 30, "month": 1, "year": 2024}, "timezone": "Europe/Paris"}]}, "type": "downtime"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/synthetics-orchestrating-managing + Scenario: Update a Synthetics downtime returns "OK" response + Given new "UpdateSyntheticsDowntime" request + And request contains "downtime_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"isEnabled": true, "name": "Weekly maintenance", "testIds": ["abc-def-123"], "timeSlots": [{"duration": 3600, "start": {"day": 15, "hour": 10, "minute": 30, "month": 1, "year": 2024}, "timezone": "Europe/Paris"}]}, "type": "downtime"}} + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/teams.feature b/test-runner-data/features/v2/teams.feature new file mode 100644 index 0000000000..b21078ebf3 --- /dev/null +++ b/test-runner-data/features/v2/teams.feature @@ -0,0 +1,739 @@ +@endpoint(team) @endpoint(team-v2) @endpoint(teams) @endpoint(teams-v2) +Feature: Teams + View and manage teams within Datadog. See the [Teams + page](https://docs.datadoghq.com/account_management/teams/) for more + information. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Teams" API + + @generated @skip @team:DataDog/aaa-omg + Scenario: Add a member team returns "API error response." response + Given operation "AddMemberTeam" enabled + And new "AddMemberTeam" request + And request contains "super_team_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "member_teams"}} + When the request is sent + Then the response status is 409 API error response. + + @generated @skip @team:DataDog/aaa-omg + Scenario: Add a member team returns "Added" response + Given operation "AddMemberTeam" enabled + And new "AddMemberTeam" request + And request contains "super_team_id" parameter from "REPLACE.ME" + And body with value {"data": {"id": "aeadc05e-98a8-11ec-ac2c-da7ad0900001", "type": "member_teams"}} + When the request is sent + Then the response status is 204 Added + + @team:DataDog/aaa-omg + Scenario: Add a user to a team returns "API error response." response + Given new "CreateTeamMembership" request + And there is a valid "dd_team" in the system + And there is a valid "user" in the system + And there is a valid "team_membership" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And body with value {"data": {"attributes": {"role": "admin"}, "relationships": {"user": {"data": {"id": "{{user.data.id}}", "type": "users"}}}, "type": "team_memberships"}} + When the request is sent + Then the response status is 409 API error response. + + @team:DataDog/aaa-omg + Scenario: Add a user to a team returns "Represents a user's association to a team" response + Given new "CreateTeamMembership" request + And there is a valid "dd_team" in the system + And there is a valid "user" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And body with value {"data": {"attributes": {"role": "admin"}, "relationships": {"user": {"data": {"id": "{{user.data.id}}", "type": "users"}}}, "type": "team_memberships"}} + When the request is sent + Then the response status is 200 Represents a user's association to a team + And the response "data.attributes.role" is equal to "admin" + And the response "data.relationships.user.data.id" is equal to "{{ user.data.id }}" + + @team:DataDog/aaa-omg + Scenario: Create a team hierarchy link returns "Conflict" response + Given new "AddTeamHierarchyLink" request + And there is a valid "dd_team" in the system + And there is a valid "dd_team_2" in the system + And there is a valid "team_hierarchy_link" in the system + And body with value {"data": {"relationships": {"parent_team": {"data": {"id": "{{team_hierarchy_link.data.relationships.parent_team.data.id}}", "type": "team"}}, "sub_team": {"data": {"id": "{{team_hierarchy_link.data.relationships.sub_team.data.id}}", "type": "team"}}}, "type": "team_hierarchy_links"}} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/aaa-omg + Scenario: Create a team hierarchy link returns "OK" response + Given new "AddTeamHierarchyLink" request + And there is a valid "dd_team" in the system + And there is a valid "dd_team_2" in the system + And body with value {"data": {"relationships": {"parent_team": {"data": {"id": "{{dd_team.data.id}}", "type": "team"}}, "sub_team": {"data": {"id": "{{dd_team_2.data.id}}", "type": "team"}}}, "type": "team_hierarchy_links"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/aaa-omg + Scenario: Create a team link returns "API error response." response + Given new "CreateTeamLink" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And body with value {"data": {"attributes": {"label": "", "url": "https://example.com", "position": 0}, "type": "team_links"}} + When the request is sent + Then the response status is 422 API error response. + + @team:DataDog/aaa-omg + Scenario: Create a team link returns "OK" response + Given new "CreateTeamLink" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And body with value {"data": {"attributes": {"label": "Link label", "url": "https://example.com", "position": 0}, "type": "team_links"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.label" is equal to "Link label" + And the response "data.attributes.url" is equal to "https://example.com" + And the response "data.attributes.position" is equal to 0 + + @team:DataDog/aaa-omg + Scenario: Create a team returns "API error response." response + Given new "CreateTeam" request + And there is a valid "dd_team" in the system + And body with value {"data": {"attributes": {"handle": "{{dd_team.data.attributes.handle}}", "name": "Example Team"}, "relationships": {"users": {"data": []}}, "type": "team"}} + When the request is sent + Then the response status is 409 API error response. + + @team:DataDog/aaa-omg + Scenario: Create a team returns "CREATED" response + Given new "CreateTeam" request + And body with value {"data": {"attributes": {"handle": "test-handle-{{ unique_hash }}", "name": "test-name-{{ unique_hash }}"}, "relationships": {"users": {"data": []}}, "type": "team"}} + When the request is sent + Then the response status is 201 CREATED + And the response "data" has field "id" + And the response "data.attributes.handle" is equal to "test-handle-{{ unique_hash }}" + And the response "data.attributes.name" is equal to "test-name-{{ unique_hash }}" + + @team:DataDog/aaa-omg + Scenario: Create a team with V2 fields returns "CREATED" response + Given new "CreateTeam" request + And body with value {"data": {"attributes": {"handle": "test-handle-{{ unique_hash }}","name": "test-name-{{ unique_hash }}", "avatar": "🥑", "banner": 7, "visible_modules": ["m1","m2"], "hidden_modules": ["m3"]}, "type": "team"}} + When the request is sent + Then the response status is 201 CREATED + And the response "data" has field "id" + And the response "data.attributes.handle" is equal to "test-handle-{{ unique_hash }}" + And the response "data.attributes.name" is equal to "test-name-{{ unique_hash }}" + And the response "data.attributes.avatar" is equal to "🥑" + And the response "data.attributes.banner" is equal to 7 + And the response "data.attributes.visible_modules" has length 2 + And the response "data.attributes.visible_modules" array contains value "m1" + And the response "data.attributes.visible_modules" array contains value "m2" + And the response "data.attributes.hidden_modules" has length 1 + And the response "data.attributes.hidden_modules" array contains value "m3" + + @team:DataDog/aaa-omg + Scenario: Create team connections returns "Bad Request" response + Given new "CreateTeamConnections" request + And body with value {"data": []} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aaa-omg + Scenario: Create team connections returns "Conflict" response + Given new "CreateTeamConnections" request + And there is a valid "dd_team" in the system + And there is a valid "team_connection" in the system + And body with value {"data": [{"attributes": {"source": "github", "managed_by": "datadog"}, "relationships": {"connected_team": {"data": {"id": "{{ team_connection.relationships.connected_team.data.id }}", "type": "github_team"}}, "team": {"data": {"id": "{{ dd_team.data.id }}", "type": "team"}}}, "type": "team_connection"}]} + When the request is sent + Then the response status is 409 Conflict + + @team:DataDog/aaa-omg + Scenario: Create team connections returns "Created" response + Given new "CreateTeamConnections" request + And there is a valid "dd_team" in the system + And body with value {"data": [{"type": "team_connection", "attributes": {"source": "github", "managed_by": "datadog"}, "relationships": {"team": {"data": {"id": "{{ dd_team.data.id }}", "type": "team"}}, "connected_team": {"data": {"id": "@MyGitHubAccount/my-team-name", "type": "github_team"}}}}]} + When the request is sent + Then the response status is 201 Created + And the response "data[0].attributes.source" is equal to "github" + And the response "data[0].attributes.managed_by" is equal to "datadog" + And the response "data[0].relationships.team.data.id" is equal to "{{ dd_team.data.id }}" + And the response "data[0].relationships.connected_team.data.id" is equal to "@MyGitHubAccount/my-team-name" + And the response "data[0].type" is equal to "team_connection" + + @team:DataDog/aaa-omg + Scenario: Create team notification rule returns "API error response." response + Given new "CreateTeamNotificationRule" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And there is a valid "team_notification_rule" in the system + And body with value {"data": {"type": "team_notification_rules", "attributes": {"email": {"enabled": true}, "slack": {"workspace": "Datadog", "channel": "aaa-omg-ops"}}}} + When the request is sent + Then the response status is 409 API error response. + + @team:DataDog/aaa-omg + Scenario: Create team notification rule returns "OK" response + Given new "CreateTeamNotificationRule" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And body with value {"data": {"type": "team_notification_rules", "attributes": {"email": {"enabled": true}, "slack": {"workspace": "Datadog", "channel": "aaa-omg-ops"}}}} + When the request is sent + Then the response status is 201 Created + + @team:DataDog/aaa-omg + Scenario: Delete team connections returns "Bad Request" response + Given new "DeleteTeamConnections" request + And body with value {"data": [{"id": "", "type": "team_connection"}]} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aaa-omg + Scenario: Delete team connections returns "No Content" response + Given new "DeleteTeamConnections" request + And there is a valid "dd_team" in the system + And there is a valid "team_connection" in the system + And body with value {"data": [{"id": "{{ team_connection.id }}", "type": "team_connection"}]} + When the request is sent + Then the response status is 204 No Content + + @skip @team:DataDog/aaa-omg + Scenario: Delete team connections returns "Not Found" response + Given new "DeleteTeamConnections" request + And body with value {"data": [{"id": "00000000-0000-dead-beef-000000000000", "type": "team_connection"}]} + When the request is sent + Then the response status is 404 Not Found + + @team:DataDog/aaa-omg + Scenario: Delete team notification rule returns "API error response." response + Given new "DeleteTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter with value "3d031bb2-e1da-4d34-a670-1b5557b032c9" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Delete team notification rule returns "No Content" response + Given new "DeleteTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter from "team_notification_rule.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/aaa-omg + Scenario: Get a team hierarchy link returns "API error response." response + Given new "GetTeamHierarchyLink" request + And request contains "link_id" parameter with value "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get a team hierarchy link returns "OK" response + Given new "GetTeamHierarchyLink" request + And there is a valid "dd_team" in the system + And there is a valid "dd_team_2" in the system + And there is a valid "team_hierarchy_link" in the system + And request contains "link_id" parameter from "team_hierarchy_link.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{ team_hierarchy_link.data.id }}" + And the response "data.relationships.parent_team.data.id" is equal to "{{ dd_team.data.id }}" + And the response "data.relationships.sub_team.data.id" is equal to "{{ dd_team_2.data.id }}" + And the response "included" has item with field "id" with value "{{ dd_team.data.id }}" + And the response "included" has item with field "id" with value "{{ dd_team_2.data.id }}" + + @team:DataDog/aaa-omg + Scenario: Get a team link returns "API error response." response + Given new "GetTeamLink" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "link_id" parameter with value "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get a team link returns "OK" response + Given new "GetTeamLink" request + And there is a valid "dd_team" in the system + And there is a valid "team_link" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "link_id" parameter from "team_link.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/aaa-omg + Scenario: Get a team returns "API error response." response + Given new "GetTeam" request + And request contains "team_id" parameter with value "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get a team returns "OK" response + Given new "GetTeam" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aaa-omg + Scenario: Get all member teams returns "API error response." response + Given operation "ListMemberTeams" enabled + And new "ListMemberTeams" request + And request contains "super_team_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/aaa-omg + Scenario: Get all member teams returns "OK" response + Given operation "ListMemberTeams" enabled + And new "ListMemberTeams" request + And request contains "super_team_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aaa-omg @with-pagination + Scenario: Get all member teams returns "OK" response with pagination + Given operation "ListMemberTeams" enabled + And new "ListMemberTeams" request + And request contains "super_team_id" parameter from "REPLACE.ME" + When the request with pagination is sent + Then the response status is 200 OK + + @team:DataDog/aaa-omg + Scenario: Get all teams returns "OK" response + Given new "ListTeams" request + And there is a valid "dd_team" in the system + When the request is sent + Then the response status is 200 OK + And the response "data" has item with field "id" with value "{{ dd_team.data.id }}" + + @replay-only @skip-validation @team:DataDog/aaa-omg @with-pagination + Scenario: Get all teams returns "OK" response with pagination + Given new "ListTeams" request + And request contains "page[size]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @team:DataDog/aaa-omg + Scenario: Get all teams with fields_team parameter returns "OK" response + Given new "ListTeams" request + And there is a valid "dd_team" in the system + And request contains "fields[team]" parameter with value ["id", "name", "handle"] + When the request is sent + Then the response status is 200 OK + And the response "data[0]" has field "id" + And the response "data[0].attributes" has field "name" + And the response "data[0].attributes" has field "handle" + + @team:DataDog/aaa-omg + Scenario: Get links for a team returns "API error response." response + Given new "GetTeamLinks" request + And request contains "team_id" parameter with value "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get links for a team returns "OK" response + Given new "GetTeamLinks" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/aaa-omg + Scenario: Get permission settings for a team returns "API error response." response + Given new "GetTeamPermissionSettings" request + And request contains "team_id" parameter with value "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get permission settings for a team returns "OK" response + Given new "GetTeamPermissionSettings" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/aaa-omg + Scenario: Get team hierarchy links returns "OK" response + Given new "ListTeamHierarchyLinks" request + And there is a valid "dd_team" in the system + And there is a valid "dd_team_2" in the system + And there is a valid "team_hierarchy_link" in the system + And request contains "filter[parent_team]" parameter from "team_hierarchy_link.data.relationships.parent_team.data.id" + And request contains "filter[sub_team]" parameter from "team_hierarchy_link.data.relationships.sub_team.data.id" + And request contains "page[number]" parameter with value 0 + And request contains "page[size]" parameter with value 100 + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + And the response "data[0].id" is equal to "{{ team_hierarchy_link.data.id }}" + And the response "data[0].relationships.parent_team.data.id" is equal to "{{ dd_team.data.id }}" + And the response "data[0].relationships.sub_team.data.id" is equal to "{{ dd_team_2.data.id }}" + And the response "included" has item with field "id" with value "{{ dd_team.data.id }}" + And the response "included" has item with field "id" with value "{{ dd_team_2.data.id }}" + + @generated @skip @team:DataDog/aaa-omg @with-pagination + Scenario: Get team hierarchy links returns "OK" response with pagination + Given new "ListTeamHierarchyLinks" request + When the request with pagination is sent + Then the response status is 200 OK + + @team:DataDog/aaa-omg + Scenario: Get team memberships returns "API error response." response + Given new "GetTeamMemberships" request + And request contains "team_id" parameter with value "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get team memberships returns "Represents a user's association to a team" response + Given new "GetTeamMemberships" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + When the request is sent + Then the response status is 200 Represents a user's association to a team + + @replay-only @skip-validation @team:DataDog/aaa-omg @with-pagination + Scenario: Get team memberships returns "Represents a user's association to a team" response with pagination + Given new "GetTeamMemberships" request + And request contains "team_id" parameter with value "2e06bf2c-193b-41d4-b3c2-afccc080458f" + And request contains "page[size]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @team:DataDog/aaa-omg + Scenario: Get team notification rule returns "API error response." response + Given new "GetTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter from "dd_team.data.id" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get team notification rule returns "OK" response + Given new "GetTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter from "team_notification_rule.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aaa-omg + Scenario: Get team notification rules returns "API error response." response + Given new "GetTeamNotificationRules" request + And request contains "team_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get team notification rules returns "OK" response + Given new "GetTeamNotificationRules" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And there is a valid "team_notification_rule" in the system + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + + @team:DataDog/aaa-omg + Scenario: Get team sync configurations returns "OK" response + Given new "GetTeamSync" request + And request contains "filter[source]" parameter with value "github" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aaa-omg + Scenario: Get user memberships returns "API error response." response + Given new "GetUserMemberships" request + And request contains "user_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get user memberships returns "Represents a user's association to a team" response + Given new "GetUserMemberships" request + And there is a valid "user" in the system + And request contains "user_uuid" parameter from "user.data.id" + When the request is sent + Then the response status is 200 Represents a user's association to a team + And the response "data" has length 0 + + @team:DataDog/aaa-omg + Scenario: Link Teams with GitHub Teams returns "No Content" response + Given new "SyncTeams" request + And body with value {"data": {"attributes": {"source": "github", "type": "link", "selection_state": [{"external_id": {"type": "organization", "value": "1"}}]}, "type": "team_sync_bulk"}} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/aaa-omg + Scenario: Link Teams with GitHub Teams returns "OK" response + Given new "SyncTeams" request + And body with value {"data": {"attributes": {"source": "github", "type": "link"}, "type": "team_sync_bulk"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aaa-omg + Scenario: List team connections returns "Bad Request" response + Given new "ListTeamConnections" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/aaa-omg + Scenario: List team connections returns "OK" response + Given new "ListTeamConnections" request + And there is a valid "dd_team" in the system + And there is a valid "team_connection" in the system + And request contains "page[size]" parameter with value 10 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aaa-omg @with-pagination + Scenario: List team connections returns "OK" response with pagination + Given new "ListTeamConnections" request + When the request with pagination is sent + Then the response status is 200 OK + + @team:DataDog/aaa-omg + Scenario: List team connections with filters returns "OK" response + Given new "ListTeamConnections" request + And there is a valid "dd_team" in the system + And there is a valid "team_connection" in the system + And request contains "filter[sources]" parameter with value ["github"] + And request contains "page[size]" parameter with value 10 + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aaa-omg + Scenario: Remove a member team returns "API error response." response + Given operation "RemoveMemberTeam" enabled + And new "RemoveMemberTeam" request + And request contains "super_team_id" parameter from "REPLACE.ME" + And request contains "member_team_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @generated @skip @team:DataDog/aaa-omg + Scenario: Remove a member team returns "No Content" response + Given operation "RemoveMemberTeam" enabled + And new "RemoveMemberTeam" request + And request contains "super_team_id" parameter from "REPLACE.ME" + And request contains "member_team_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/aaa-omg + Scenario: Remove a team hierarchy link returns "API error response." response + Given new "RemoveTeamHierarchyLink" request + And request contains "link_id" parameter with value "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Remove a team hierarchy link returns "No Content" response + Given new "RemoveTeamHierarchyLink" request + And there is a valid "dd_team" in the system + And there is a valid "dd_team_2" in the system + And there is a valid "team_hierarchy_link" in the system + And request contains "link_id" parameter from "team_hierarchy_link.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/aaa-omg + Scenario: Remove a team link returns "API error response." response + Given new "DeleteTeamLink" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "link_id" parameter with value "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Remove a team link returns "No Content" response + Given new "DeleteTeamLink" request + And there is a valid "dd_team" in the system + And there is a valid "team_link" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "link_id" parameter from "team_link.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/aaa-omg + Scenario: Remove a team returns "API error response." response + Given new "DeleteTeam" request + And request contains "team_id" parameter with value "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Remove a team returns "No Content" response + Given new "DeleteTeam" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/aaa-omg + Scenario: Remove a user from a team returns "API error response." response + Given new "DeleteTeamMembership" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "user_id" parameter with value "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Remove a user from a team returns "No Content" response + Given new "DeleteTeamMembership" request + And there is a valid "dd_team" in the system + And there is a valid "user" in the system + And there is a valid "team_membership" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "user_id" parameter from "user.data.id" + When the request is sent + Then the response status is 204 No Content + + @team:DataDog/aaa-omg + Scenario: Update a team link returns "API error response." response + Given new "UpdateTeamLink" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "link_id" parameter with value "REPLACE.ME" + And body with value {"data": {"attributes": {"label": "Link label", "url": "https://example.com"}, "type": "team_links"}} + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Update a team link returns "OK" response + Given new "UpdateTeamLink" request + And there is a valid "dd_team" in the system + And there is a valid "team_link" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "link_id" parameter from "team_link.data.id" + And body with value {"data": {"attributes": {"label": "New Label", "url": "https://example.com"}, "type": "team_links"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{ team_link.data.id }}" + And the response "data.attributes.team_id" is equal to "{{ dd_team.data.id }}" + And the response "data.attributes.label" is equal to "New Label" + And the response "data.attributes.url" is equal to "https://example.com" + + @skip @team:DataDog/aaa-omg + Scenario: Update a team returns "API error response." response + Given new "UpdateTeam" request + And there is a valid "dd_team" in the system + And there is a valid "dd_team_2" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And body with value {"data": {"attributes": {"handle": "{{dd_team_2.data.attributes.handle}}", "name": "{{dd_team.data.attributes.name}}"}, "type": "team"}} + When the request is sent + Then the response status is 409 API error response. + + @team:DataDog/aaa-omg + Scenario: Update a team returns "OK" response + Given new "UpdateTeam" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And body with value {"data": {"attributes": {"handle": "{{dd_team.data.attributes.handle}}", "name": "{{dd_team.data.attributes.name}} updated", "avatar": "🥑", "banner": 7, "hidden_modules": ["m3"], "visible_modules": ["m1", "m2"]}, "type": "team"}} + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "{{ dd_team.data.id }}" + And the response "data.attributes.handle" is equal to "{{dd_team.data.attributes.handle}}" + And the response "data.attributes.name" is equal to "{{dd_team.data.attributes.name}} updated" + And the response "data.attributes.avatar" is equal to "🥑" + And the response "data.attributes.banner" is equal to 7 + And the response "data.attributes.hidden_modules" is equal to ["m3"] + And the response "data.attributes.visible_modules" is equal to ["m1", "m2"] + + @team:DataDog/aaa-omg + Scenario: Update a team with partial update returns "OK" response + Given new "UpdateTeam" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And body with value {"data": {"attributes": {"handle": "{{dd_team.data.attributes.handle}}", "name": "{{dd_team.data.attributes.name}} updated"}, "type": "team"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.name" is equal to "{{dd_team.data.attributes.name}} updated" + And the response "data.attributes.handle" is equal to "{{dd_team.data.attributes.handle}}" + + @team:DataDog/aaa-omg + Scenario: Update a user's membership attributes on a team returns "API error response." response + Given new "UpdateTeamMembership" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "user_id" parameter with value "00000000-0000-dead-beef-000000000000" + And body with value {"data": {"attributes": {"role": "admin"}, "type": "team_memberships"}} + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Update a user's membership attributes on a team returns "OK" response + Given new "UpdateTeamMembership" request + And there is a valid "dd_team" in the system + And there is a valid "user" in the system + And there is a valid "team_membership" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "user_id" parameter from "user.data.id" + And body with value {"data": {"attributes": {"role": "admin"}, "type": "team_memberships"}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.role" is equal to "admin" + And the response "data.relationships.user.data.id" is equal to "{{ user.data.id }}" + + @team:DataDog/aaa-omg + Scenario: Update a user's membership attributes on a team with invalid role returns "API error response." response + Given new "UpdateTeamMembership" request + And there is a valid "dd_team" in the system + And there is a valid "user" in the system + And there is a valid "team_membership" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "user_id" parameter from "user.data.id" + And body with value {"data": {"attributes": {"role": "member"}, "type": "team_memberships"}} + When the request is sent + Then the response status is 400 API error response. + + @team:DataDog/aaa-omg + Scenario: Update permission setting for team returns "API error response." response + Given new "UpdateTeamPermissionSetting" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "action" parameter with value "REPLACE.ME" + And body with value {"data": {"attributes": {"value": "admins"}, "type": "team_permission_settings"}} + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Update permission setting for team returns "OK" response + Given new "UpdateTeamPermissionSetting" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "action" parameter with value "manage_membership" + And body with value {"data": {"attributes": {"value": "admins"}, "type": "team_permission_settings"}} + When the request is sent + Then the response status is 200 OK + + @team:DataDog/aaa-omg + Scenario: Update team notification rule returns "API error response." response + Given new "UpdateTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter with value "3d031bb2-e1da-4d34-a670-1b5557b032c9" + And body with value {"data": {"type": "team_notification_rules", "id": "{{dd_team.data.id}}", "attributes": {"pagerduty": {"service_name": "Datadog-prod"}, "slack": {"workspace": "Datadog", "channel": "aaa-governance-ops"}}}} + When the request is sent + Then the response status is 409 API error response. + + @team:DataDog/aaa-omg + Scenario: Update team notification rule returns "OK" response + Given new "UpdateTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter from "team_notification_rule.data.id" + And body with value {"data": {"type": "team_notification_rules", "id": "{{team_notification_rule.data.id}}", "attributes": {"pagerduty": {"service_name": "Datadog-prod"}, "slack": {"workspace": "Datadog", "channel": "aaa-governance-ops"}}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.slack.channel" is equal to "aaa-governance-ops" + And the response "data.attributes.pagerduty.service_name" is equal to "Datadog-prod" diff --git a/test-runner-data/features/v2/usage_metering.feature b/test-runner-data/features/v2/usage_metering.feature new file mode 100644 index 0000000000..ca4cfbd670 --- /dev/null +++ b/test-runner-data/features/v2/usage_metering.feature @@ -0,0 +1,244 @@ +@endpoint(usage-metering) @endpoint(usage-metering-v2) +Feature: Usage Metering + The usage metering API allows you to get hourly, daily, and monthly usage + across multiple facets of Datadog. This API is available to all Pro and + Enterprise customers. **Note**: Usage data is delayed by up to 72 hours + from when it was incurred. It is retained for 15 months. You can retrieve + up to 24 hours of hourly usage data for multiple organizations, and up to + two months of hourly usage data for a single organization in one request. + Learn more on the [usage details documentation](https://docs.datadoghq.com + /account_management/billing/usage_details/). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "UsageMetering" API + + @replay-only @team:DataDog/billing-hub + Scenario: Get Monthly Cost Attribution returns "Bad Request" response + Given new "GetMonthlyCostAttribution" request + And request contains "start_month" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "fields" parameter with value "not_a_product" + And request contains "end_month" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/billing-hub + Scenario: Get Monthly Cost Attribution returns "OK" response + Given new "GetMonthlyCostAttribution" request + And request contains "start_month" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "fields" parameter with value "infra_host_total_cost" + And request contains "end_month" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get active billing dimensions for cost attribution returns "Bad Request" response + Given new "GetActiveBillingDimensions" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get active billing dimensions for cost attribution returns "OK" response + Given new "GetActiveBillingDimensions" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/billing-hub + Scenario: Get available fields for usage summary returns "Bad Request" response + Given new "GetUsageSummaryAvailableFields" request + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get available fields for usage summary returns "OK" response + Given new "GetUsageSummaryAvailableFields" request + When the request is sent + Then the response status is 200 OK + And the response "data.id" is equal to "all" + And the response "data.type" is equal to "usage_summary_available_fields" + And the response "data.attributes" has field "response_fields" + And the response "data.attributes" has field "date_fields" + And the response "data.attributes" has field "date_org_fields" + + @generated @skip @team:DataDog/billing-hub + Scenario: Get available fields for usage summary returns "OK." response + Given new "GetUsageSummaryAvailableFields" request + When the request is sent + Then the response status is 200 OK. + + @team:DataDog/billing-hub + Scenario: Get billing dimension mapping for usage endpoints returns "Bad Request" response + Given new "GetBillingDimensionMapping" request + When the request is sent + Then the response status is 400 Bad Request + + @skip @team:DataDog/billing-hub + Scenario: Get billing dimension mapping for usage endpoints returns "OK" response + Given new "GetBillingDimensionMapping" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get cost across multi-org account returns "Bad Request" response + Given new "GetCostByOrg" request + And request contains "start_month" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/billing-hub + Scenario: Get cost across multi-org account returns "OK" response + Given new "GetCostByOrg" request + And request contains "start_month" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get estimated cost across your account returns "Bad Request" response + Given new "GetEstimatedCostByOrg" request + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get estimated cost across your account returns "OK" response + Given new "GetEstimatedCostByOrg" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get historical cost across your account returns "Bad Request" response + Given new "GetHistoricalCostByOrg" request + And request contains "start_month" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/billing-hub + Scenario: Get historical cost across your account returns "OK" response + Given new "GetHistoricalCostByOrg" request + And request contains "start_month" parameter with value "{{ timeISO('now - 2M') }}" + And request contains "view" parameter with value "sub-org" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/billing-hub + Scenario: Get hourly usage by product family returns "Bad Request" response + Given new "GetHourlyUsage" request + And request contains "filter[timestamp][start]" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "filter[product_families]" parameter with value "infra_hosts" + And request contains "filter[timestamp][end]" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get hourly usage by product family returns "OK" response + Given new "GetHourlyUsage" request + And request contains "filter[timestamp][start]" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "filter[product_families]" parameter with value "infra_hosts" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "usage_timeseries" + And the response "data[0].attributes.region" is equal to "us" + + @team:DataDog/billing-hub + Scenario: Get hourly usage for Application Security returns "Bad Request" response + Given new "GetUsageApplicationSecurityMonitoring" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get hourly usage for Lambda traced invocations returns "Bad Request" response + Given new "GetUsageLambdaTracedInvocations" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get hourly usage for Lambda traced invocations returns "OK" response + Given new "GetUsageLambdaTracedInvocations" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "usage_timeseries" + And the response "data[0].attributes.product_family" is equal to "lambda-traced-invocations" + + @team:DataDog/billing-hub + Scenario: Get hourly usage for Observability Pipelines returns "Bad Request" response + Given new "GetUsageObservabilityPipelines" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 3d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 5d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for application security returns "Bad Request" response + Given new "GetUsageApplicationSecurityMonitoring" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get hourly usage for application security returns "OK" response + Given new "GetUsageApplicationSecurityMonitoring" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "usage_timeseries" + And the response "data[0].attributes.product_family" is equal to "app-sec" + + @generated @skip @team:DataDog/billing-hub + Scenario: Get hourly usage for observability pipelines returns "Bad Request" response + Given new "GetUsageObservabilityPipelines" request + And request contains "start_hr" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/billing-hub + Scenario: Get hourly usage for observability pipelines returns "OK" response + Given new "GetUsageObservabilityPipelines" request + And request contains "start_hr" parameter with value "{{ timeISO('now - 5d') }}" + And request contains "end_hr" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 200 OK + And the response "data[0].type" is equal to "usage_timeseries" + And the response "data[0].attributes.product_family" is equal to "observability-pipelines" + + @generated @skip @team:DataDog/billing-hub + Scenario: Get projected cost across your account returns "Bad Request" response + Given new "GetProjectedCost" request + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/billing-hub + Scenario: Get projected cost across your account returns "OK" response + Given new "GetProjectedCost" request + And request contains "view" parameter with value "sub-org" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/billing-hub + Scenario: Get usage attribution types returns "OK" response + Given new "GetUsageAttributionTypes" request + When the request is sent + Then the response status is 200 OK + + @team:DataDog/billing-hub + Scenario: GetEstimatedCostByOrg with both start_month and start_date returns "Bad Request" response + Given new "GetEstimatedCostByOrg" request + And request contains "view" parameter with value "sub-org" + And request contains "start_month" parameter with value "{{ timeISO('now') }}" + And request contains "start_date" parameter with value "{{ timeISO('now - 3d') }}" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/billing-hub + Scenario: GetEstimatedCostByOrg with start_month returns "OK" response + Given new "GetEstimatedCostByOrg" request + And request contains "view" parameter with value "sub-org" + And request contains "start_month" parameter with value "{{ timeISO('now') }}" + When the request is sent + Then the response status is 200 OK diff --git a/test-runner-data/features/v2/users.feature b/test-runner-data/features/v2/users.feature new file mode 100644 index 0000000000..b3d2a2a9ea --- /dev/null +++ b/test-runner-data/features/v2/users.feature @@ -0,0 +1,296 @@ +@endpoint(users) @endpoint(users-v2) +Feature: Users + Create, edit, and disable users. + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "Users" API + + @generated @skip @team:DataDog/org-management + Scenario: Anonymize users returns "Bad Request" response + Given operation "AnonymizeUsers" enabled + And new "AnonymizeUsers" request + And body with value {"data": {"attributes": {"user_ids": ["00000000-0000-0000-0000-000000000000"]}, "id": "00000000-0000-0000-0000-000000000000", "type": "anonymize_users_request"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/org-management + Scenario: Anonymize users returns "OK" response + Given operation "AnonymizeUsers" enabled + And new "AnonymizeUsers" request + And body with value {"data": {"attributes": {"user_ids": ["00000000-0000-0000-0000-000000000000"]}, "id": "00000000-0000-0000-0000-000000000000", "type": "anonymize_users_request"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: Create a user returns "Bad Request" response + Given new "CreateUser" request + And body with value {"data": {"attributes": {"email": "jane.doe@example.com"}, "relationships": {"roles": {"data": [{"id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", "type": "roles"}]}}, "type": "users"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/org-management + Scenario: Create a user returns "OK" response + Given new "CreateUser" request + And body with value {"data": {"type": "users", "attributes": {"name": "Datadog API Client Python", "email": "{{ unique }}@datadoghq.com"}}} + When the request is sent + Then the response status is 201 OK + And the response "data.attributes.email" is equal to "{{ unique_lower }}@datadoghq.com" + And the response "data.attributes.name" is equal to "Datadog API Client Python" + And the response "data.attributes.disabled" is false + And the response "data.attributes.service_account" is false + + @generated @skip @team:DataDog/org-management + Scenario: Delete a pending user's invitations returns "Not found" response + Given new "DeleteUserInvitations" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @generated @skip @team:DataDog/org-management + Scenario: Delete a pending user's invitations returns "OK" response + Given new "DeleteUserInvitations" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: Disable a user returns "Not found" response + Given new "DisableUser" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/org-management + Scenario: Disable a user returns "OK" response + Given there is a valid "user" in the system + And new "DisableUser" request + And request contains "user_id" parameter from "user.data.id" + When the request is sent + Then the response status is 204 OK + + @generated @skip @team:DataDog/org-management + Scenario: Get a user invitation returns "Not found" response + Given new "GetInvitation" request + And request contains "user_invitation_uuid" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/org-management + Scenario: Get a user invitation returns "OK" response + Given there is a valid "user" in the system + And the "user" has a "user_invitation" + And new "GetInvitation" request + And request contains "user_invitation_uuid" parameter from "user_invitation.id" + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.invite_type" is equal to "openid_invite" + And the response "data.attributes.uuid" is equal to "{{user_invitation.id}}" + + @generated @skip @team:DataDog/org-management + Scenario: Get a user organization returns "Not found" response + Given new "ListUserOrganizations" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @generated @skip @team:DataDog/org-management + Scenario: Get a user organization returns "OK" response + Given new "ListUserOrganizations" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: Get a user permissions returns "Not found" response + Given new "ListUserPermissions" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/org-management + Scenario: Get a user permissions returns "OK" response + Given there is a valid "user" in the system + And new "ListUserPermissions" request + And request contains "user_id" parameter from "user.data.id" + When the request is sent + Then the response status is 200 OK + And the response "data" has length 0 + + @generated @skip @team:DataDog/org-management + Scenario: Get current user returns "OK" response + Given new "GetCurrentUser" request + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: Get identity provider overrides for a user returns "Not found" response + Given new "GetUserIdentityProviders" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @generated @skip @team:DataDog/org-management + Scenario: Get identity provider overrides for a user returns "OK" response + Given new "GetUserIdentityProviders" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: Get user details returns "Not found" response + Given new "GetUser" request + And request contains "user_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/org-management + Scenario: Get user details returns "OK" response + Given there is a valid "user" in the system + And new "GetUser" request + And request contains "user_id" parameter from "user.data.id" + When the request is sent + Then the response status is 200 OK for get user + And the response "data.id" is equal to "{{ user.data.id }}" + And the response "data.type" is equal to "users" + And the response "data.attributes.handle" is equal to "{{ unique_lower }}@datadoghq.com" + + @generated @skip @team:DataDog/org-management + Scenario: List all users returns "Bad Request" response + Given new "ListUsers" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/org-management + Scenario: List all users returns "OK" response + Given there is a valid "user" in the system + And new "ListUsers" request + And request contains "filter" parameter from "user.data.attributes.email" + When the request is sent + Then the response status is 200 OK + And the response "meta.page.total_filtered_count" is equal to 1 + And the response "data[0].attributes.email" has the same value as "user.data.attributes.email" + + @replay-only @skip-validation @team:DataDog/org-management @with-pagination + Scenario: List all users returns "OK" response with pagination + Given new "ListUsers" request + And request contains "page[size]" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 3 items + + @generated @skip @team:DataDog/org-management + Scenario: Send invitation emails returns "Bad Request" response + Given new "SendInvitations" request + And body with value {"data": []} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/org-management + Scenario: Send invitation emails returns "OK" response + Given there is a valid "user" in the system + And new "SendInvitations" request + And body with value {"data": [{"type": "user_invitations", "relationships": {"user": {"data": {"type": "{{ user.data.type }}", "id": "{{ user.data.id }}"}}}}]} + When the request is sent + Then the response status is 201 OK + And the response "data" has length 1 + And the response "data[0].attributes.invite_type" is equal to "openid_invite" + + @generated @skip @team:DataDog/org-management + Scenario: Update a user returns "Bad Request" response + Given new "UpdateUser" request + And request contains "user_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"title": null}, "id": "00000000-0000-feed-0000-000000000000", "type": "users"}} + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/org-management + Scenario: Update a user returns "Bad User ID in Request" response + Given there is a valid "user" in the system + And new "UpdateUser" request + And request contains "user_id" parameter from "user.data.id" + And body with value {"data": {"id": "00000000-mismatch-body-id-ffffffffffff", "type": "users", "attributes": {"name": "updated", "disabled": true}}} + When the request is sent + Then the response status is 422 Bad User ID in Request + + @team:DataDog/org-management + Scenario: Update a user returns "Not found" response + Given new "UpdateUser" request + And request contains "user_id" parameter with value "00000000-dead-beef-dead-ffffffffffff" + And body with value {"data": {"id": "00000000-dead-beef-dead-ffffffffffff", "type": "users", "attributes": {"name": "updated", "disabled": true}}} + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/org-management + Scenario: Update a user returns "OK" response + Given there is a valid "user" in the system + And new "UpdateUser" request + And request contains "user_id" parameter from "user.data.id" + And body with value {"data": {"id": "{{ user.data.id }}", "type": "users", "attributes": {"name": "updated", "disabled": true}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.email" has the same value as "user.data.attributes.email" + And the response "data.attributes.title" has the same value as "user.data.attributes.title" + And the response "data.attributes.name" is equal to "updated" + And the response "data.attributes.disabled" is equal to true + + @generated @skip @team:DataDog/org-management + Scenario: Update a user returns "Unprocessable Entity" response + Given new "UpdateUser" request + And request contains "user_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"title": null}, "id": "00000000-0000-feed-0000-000000000000", "type": "users"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/org-management + Scenario: Update current user returns "Bad Request" response + Given new "UpdateCurrentUser" request + And body with value {"data": {"attributes": {"title": null}, "id": "00000000-0000-feed-0000-000000000000", "type": "users"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/org-management + Scenario: Update current user returns "Not found" response + Given new "UpdateCurrentUser" request + And body with value {"data": {"attributes": {"title": null}, "id": "00000000-0000-feed-0000-000000000000", "type": "users"}} + When the request is sent + Then the response status is 404 Not found + + @generated @skip @team:DataDog/org-management + Scenario: Update current user returns "OK" response + Given new "UpdateCurrentUser" request + And body with value {"data": {"attributes": {"title": null}, "id": "00000000-0000-feed-0000-000000000000", "type": "users"}} + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/org-management + Scenario: Update current user returns "Unprocessable Entity" response + Given new "UpdateCurrentUser" request + And body with value {"data": {"attributes": {"title": null}, "id": "00000000-0000-feed-0000-000000000000", "type": "users"}} + When the request is sent + Then the response status is 422 Unprocessable Entity + + @generated @skip @team:DataDog/org-management + Scenario: Update identity provider overrides for a user returns "Bad Request" response + Given new "UpdateUserIdentityProviders" request + And request contains "user_id" parameter from "REPLACE.ME" + And body with value {"data": [{"id": "00000000-0000-0000-0000-000000000001", "type": "identity_providers"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/org-management + Scenario: Update identity provider overrides for a user returns "No Content" response + Given new "UpdateUserIdentityProviders" request + And request contains "user_id" parameter from "REPLACE.ME" + And body with value {"data": [{"id": "00000000-0000-0000-0000-000000000001", "type": "identity_providers"}]} + When the request is sent + Then the response status is 204 No Content + + @generated @skip @team:DataDog/org-management + Scenario: Update identity provider overrides for a user returns "Not found" response + Given new "UpdateUserIdentityProviders" request + And request contains "user_id" parameter from "REPLACE.ME" + And body with value {"data": [{"id": "00000000-0000-0000-0000-000000000001", "type": "identity_providers"}]} + When the request is sent + Then the response status is 404 Not found diff --git a/test-runner-data/features/v2/workflow_automation.feature b/test-runner-data/features/v2/workflow_automation.feature new file mode 100644 index 0000000000..a3df6e14b0 --- /dev/null +++ b/test-runner-data/features/v2/workflow_automation.feature @@ -0,0 +1,191 @@ +@endpoint(workflow-automation) @endpoint(workflow-automation-v2) +Feature: Workflow Automation + Datadog Workflow Automation allows you to automate your end-to-end + processes by connecting Datadog with the rest of your tech stack. Build + workflows to auto-remediate your alerts, streamline your incident and + security processes, and reduce manual toil. Workflow Automation supports + over 1,000+ OOTB actions, including AWS, JIRA, ServiceNow, GitHub, and + OpenAI. Learn more in our Workflow Automation docs + [here](https://docs.datadoghq.com/service_management/workflows/). + + Background: + Given a valid "apiKeyAuth" key in the system + And a valid "appKeyAuth" key in the system + And an instance of "WorkflowAutomation" API + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: Cancel a workflow instance returns "Bad Request" response + Given new "CancelWorkflowInstance" request + And request contains "workflow_id" parameter with value "malformed" + And request contains "instance_id" parameter with value "malformed" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: Cancel a workflow instance returns "Not Found" response + Given new "CancelWorkflowInstance" request + And request contains "workflow_id" parameter with value "0233a3b7-b7ba-425e-a8cc-375ca2020b5b" + And request contains "instance_id" parameter with value "e0c64dc8-f946-4ae8-8d79-54569031ce67" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: Cancel a workflow instance returns "OK" response + Given new "CancelWorkflowInstance" request + And request contains "workflow_id" parameter with value "ccf73164-1998-4785-a7a3-8d06c7e5f558" + And request contains "instance_id" parameter with value "305a472b-71ab-4ce8-8f8d-75db635627b5" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/workflow-automation-dev + Scenario: Create a Workflow returns "Bad request" response + Given new "CreateWorkflow" request + And body with value {"data": {"attributes": {"name": "Too many characters in description", "description": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "spec": {}}, "type": "workflows"}} + When the request is sent + Then the response status is 400 Bad request + + @team:DataDog/workflow-automation-dev + Scenario: Create a Workflow returns "Successfully created a workflow." response + Given new "CreateWorkflow" request + And body with value {"data": {"attributes": {"description": "A sample workflow.", "name": "Example Workflow", "published": true, "spec": {"connectionEnvs": [{"connections": [{"connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", "label": "INTEGRATION_DATADOG"}], "env": "default"}], "inputSchema": {"parameters": [{"defaultValue": "default", "name": "input", "type": "STRING"}]}, "outputSchema": {"parameters": [{"name": "output", "type": "ARRAY_OBJECT", "value": "outputValue"}]}, "steps": [{"actionId": "com.datadoghq.dd.monitor.listMonitors", "connectionLabel": "INTEGRATION_DATADOG", "name": "Step1", "outboundEdges": [{"branchName": "main", "nextStepName": "Step2"}], "parameters": [{"name": "tags", "value": "service:monitoring"}]}, {"actionId": "com.datadoghq.core.noop", "name": "Step2"}], "triggers": [{"monitorTrigger": {"rateLimit": {"count": 1, "interval": "3600s"}}, "startStepNames": ["Step1"]}, {"startStepNames": ["Step1"], "githubWebhookTrigger": {}}]}, "tags": ["team:infra", "service:monitoring", "foo:bar"]}, "type": "workflows"}} + When the request is sent + Then the response status is 201 Successfully created a workflow. + + @team:DataDog/workflow-automation-dev + Scenario: Delete an existing Workflow returns "Not found" response + Given new "DeleteWorkflow" request + And request contains "workflow_id" parameter with value "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/workflow-automation-dev + Scenario: Delete an existing Workflow returns "Successfully deleted a workflow." response + Given there is a valid "workflow" in the system + And new "DeleteWorkflow" request + And request contains "workflow_id" parameter from "workflow.data.id" + When the request is sent + Then the response status is 204 Successfully deleted a workflow. + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: Execute a workflow returns "Bad Request" response + Given new "CreateWorkflowInstance" request + And request contains "workflow_id" parameter with value "malformed" + And body with value { "meta": { "payload": { "input": "value" } } } + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: Execute a workflow returns "Created" response + Given new "CreateWorkflowInstance" request + And request contains "workflow_id" parameter with value "ccf73164-1998-4785-a7a3-8d06c7e5f558" + And body with value { "meta": { "payload": { "input": "value" } } } + When the request is sent + Then the response status is 200 Created + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: Get a workflow instance returns "Bad Request" response + Given new "GetWorkflowInstance" request + And request contains "workflow_id" parameter with value "malformed" + And request contains "instance_id" parameter with value "malformed" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: Get a workflow instance returns "Not Found" response + Given new "GetWorkflowInstance" request + And request contains "workflow_id" parameter with value "0233a3b7-b7ba-425e-a8cc-375ca2020b5b" + And request contains "instance_id" parameter with value "e0c64dc8-f946-4ae8-8d79-54569031ce67" + When the request is sent + Then the response status is 404 Not Found + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: Get a workflow instance returns "OK" response + Given new "GetWorkflowInstance" request + And request contains "workflow_id" parameter with value "ccf73164-1998-4785-a7a3-8d06c7e5f558" + And request contains "instance_id" parameter with value "305a472b-71ab-4ce8-8f8d-75db635627b5" + When the request is sent + Then the response status is 200 OK + + @team:DataDog/workflow-automation-dev + Scenario: Get an existing Workflow returns "Bad request" response + Given new "GetWorkflow" request + And request contains "workflow_id" parameter with value "bad-format" + When the request is sent + Then the response status is 400 Bad request + + @team:DataDog/workflow-automation-dev + Scenario: Get an existing Workflow returns "Not found" response + Given new "GetWorkflow" request + And request contains "workflow_id" parameter with value "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/workflow-automation-dev + Scenario: Get an existing Workflow returns "Successfully got a workflow." response + Given there is a valid "workflow" in the system + And new "GetWorkflow" request + And request contains "workflow_id" parameter from "workflow.data.id" + When the request is sent + Then the response status is 200 Successfully got a workflow. + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: List workflow instances returns "Bad Request" response + Given new "ListWorkflowInstances" request + And request contains "workflow_id" parameter with value "malformed" + When the request is sent + Then the response status is 400 Bad Request + + @replay-only @team:DataDog/workflow-automation-dev + Scenario: List workflow instances returns "OK" response + Given new "ListWorkflowInstances" request + And request contains "workflow_id" parameter with value "ccf73164-1998-4785-a7a3-8d06c7e5f558" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/workflow-automation-dev + Scenario: List workflows returns "Bad Request" response + Given new "ListWorkflows" request + When the request is sent + Then the response status is 400 Bad Request + + @team:DataDog/workflow-automation-dev + Scenario: List workflows returns "OK" response + Given there is a valid "workflow" in the system + And new "ListWorkflows" request + When the request is sent + Then the response status is 200 OK + + @replay-only @skip-validation @team:DataDog/workflow-automation-dev @with-pagination + Scenario: List workflows returns "OK" response with pagination + Given new "ListWorkflows" request + And request contains "filter[query]" parameter with value "{{ unique }}" + And request contains "limit" parameter with value 2 + When the request with pagination is sent + Then the response status is 200 OK + And the response has 0 items + + @team:DataDog/workflow-automation-dev + Scenario: Update an existing Workflow returns "Bad request" response + Given there is a valid "workflow" in the system + And new "UpdateWorkflow" request + And request contains "workflow_id" parameter from "workflow.data.id" + And body with value {"data": {"attributes": {"name": "Too many characters in description", "description": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "spec": {}}, "id": "22222222-2222-2222-2222-222222222222", "type": "workflows"}} + When the request is sent + Then the response status is 400 Bad request + + @team:DataDog/workflow-automation-dev + Scenario: Update an existing Workflow returns "Not found" response + Given new "UpdateWorkflow" request + And request contains "workflow_id" parameter with value "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + And body with value {"data": {"attributes": {"description": "A sample workflow.", "name": "Example Workflow", "published": true, "spec": {"connectionEnvs": [{"connections": [{"connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", "label": "INTEGRATION_DATADOG"}], "env": "default"}], "inputSchema": {"parameters": [{"defaultValue": "default", "name": "input", "type": "STRING"}]}, "outputSchema": {"parameters": [{"name": "output", "type": "ARRAY_OBJECT", "value": "outputValue"}]}, "steps": [{"actionId": "com.datadoghq.dd.monitor.listMonitors", "connectionLabel": "INTEGRATION_DATADOG", "name": "Step1", "outboundEdges": [{"branchName": "main", "nextStepName": "Step2"}], "parameters": [{"name": "tags", "value": "service:monitoring"}]}, {"actionId": "com.datadoghq.core.noop", "name": "Step2"}], "triggers": [{"monitorTrigger": {"rateLimit": {"count": 1, "interval": "3600s"}}, "startStepNames": ["Step1"]}, {"startStepNames": ["Step1"], "githubWebhookTrigger": {}}]}, "tags": ["team:infra", "service:monitoring", "foo:bar"]}, "id": "22222222-2222-2222-2222-222222222222", "type": "workflows"}} + When the request is sent + Then the response status is 404 Not found + + @team:DataDog/workflow-automation-dev + Scenario: Update an existing Workflow returns "Successfully updated a workflow." response + Given there is a valid "workflow" in the system + And new "UpdateWorkflow" request + And request contains "workflow_id" parameter from "workflow.data.id" + And body with value {"data": {"attributes": {"description": "A sample workflow.", "name": "Example Workflow", "published": true, "spec": {"connectionEnvs": [{"connections": [{"connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", "label": "INTEGRATION_DATADOG"}], "env": "default"}], "inputSchema": {"parameters": [{"defaultValue": "default", "name": "input", "type": "STRING"}]}, "outputSchema": {"parameters": [{"name": "output", "type": "ARRAY_OBJECT", "value": "outputValue"}]}, "steps": [{"actionId": "com.datadoghq.dd.monitor.listMonitors", "connectionLabel": "INTEGRATION_DATADOG", "name": "Step1", "outboundEdges": [{"branchName": "main", "nextStepName": "Step2"}], "parameters": [{"name": "tags", "value": "service:monitoring"}]}, {"actionId": "com.datadoghq.core.noop", "name": "Step2"}], "triggers": [{"monitorTrigger": {"rateLimit": {"count": 1, "interval": "3600s"}}, "startStepNames": ["Step1"]}, {"startStepNames": ["Step1"], "githubWebhookTrigger": {}}]}, "tags": ["team:infra", "service:monitoring", "foo:bar"]}, "id": "22222222-2222-2222-2222-222222222222", "type": "workflows"}} + When the request is sent + Then the response status is 200 Successfully updated a workflow. diff --git a/test-runner-data/manifest.json b/test-runner-data/manifest.json new file mode 100644 index 0000000000..81c757a531 --- /dev/null +++ b/test-runner-data/manifest.json @@ -0,0 +1,11835 @@ +{ + "scenarios": [ + { + "feature": "Authentication", + "feature_file": "features/v1/authentication.feature", + "file": "v1/authentication/validate-api-key-returns-forbidden-response.json", + "scenario": "Validate API key returns \"Forbidden\" response", + "version": "v1" + }, + { + "feature": "Authentication", + "feature_file": "features/v1/authentication.feature", + "file": "v1/authentication/validate-api-key-returns-ok-response.json", + "scenario": "Validate API key returns \"OK\" response", + "version": "v1" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v1/aws_integration.feature", + "file": "v1/aws-integration/create-an-aws-integration-returns-ok-response.json", + "scenario": "Create an AWS integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v1/aws_integration.feature", + "file": "v1/aws-integration/delete-an-aws-integration-returns-ok-response.json", + "scenario": "Delete an AWS integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v1/aws_integration.feature", + "file": "v1/aws-integration/update-an-aws-integration-returns-ok-response.json", + "scenario": "Update an AWS integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Azure Integration", + "feature_file": "features/v1/azure_integration.feature", + "file": "v1/azure-integration/create-an-azure-integration-returns-ok-response.json", + "scenario": "Create an Azure integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Azure Integration", + "feature_file": "features/v1/azure_integration.feature", + "file": "v1/azure-integration/delete-an-azure-integration-returns-ok-response.json", + "scenario": "Delete an Azure integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Azure Integration", + "feature_file": "features/v1/azure_integration.feature", + "file": "v1/azure-integration/update-an-azure-integration-returns-ok-response.json", + "scenario": "Update an Azure integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v1/dashboard_lists.feature", + "file": "v1/dashboard-lists/create-a-dashboard-list-returns-ok-response.json", + "scenario": "Create a dashboard list returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v1/dashboard_lists.feature", + "file": "v1/dashboard-lists/delete-a-dashboard-list-returns-not-found-response.json", + "scenario": "Delete a dashboard list returns \"Not Found\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v1/dashboard_lists.feature", + "file": "v1/dashboard-lists/delete-a-dashboard-list-returns-ok-response.json", + "scenario": "Delete a dashboard list returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v1/dashboard_lists.feature", + "file": "v1/dashboard-lists/get-a-dashboard-list-returns-not-found-response.json", + "scenario": "Get a dashboard list returns \"Not Found\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v1/dashboard_lists.feature", + "file": "v1/dashboard-lists/get-a-dashboard-list-returns-ok-response.json", + "scenario": "Get a dashboard list returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v1/dashboard_lists.feature", + "file": "v1/dashboard-lists/get-all-dashboard-lists-returns-ok-response.json", + "scenario": "Get all dashboard lists returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v1/dashboard_lists.feature", + "file": "v1/dashboard-lists/update-a-dashboard-list-returns-not-found-response.json", + "scenario": "Update a dashboard list returns \"Not Found\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v1/dashboard_lists.feature", + "file": "v1/dashboard-lists/update-a-dashboard-list-returns-ok-response.json", + "scenario": "Update a dashboard list returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/clients-deserialize-a-dashboard-with-a-empty-time-object.json", + "scenario": "Clients deserialize a dashboard with a empty time object", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-apm-stats-query.json", + "scenario": "Create a distribution widget using a histogram request containing a formulas and functions APM Stats query", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-events-query.json", + "scenario": "Create a distribution widget using a histogram request containing a formulas and functions events query", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-metrics-query.json", + "scenario": "Create a distribution widget using a histogram request containing a formulas and functions metrics query", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-geomap-widget-using-an-event-list-request.json", + "scenario": "Create a geomap widget using an event_list request", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-geomap-widget-with-conditional-formats-and-text-formats.json", + "scenario": "Create a geomap widget with conditional formats and text formats", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-returns-ok-response.json", + "scenario": "Create a new dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-bar-chart-widget-with-stacked-type-and-no-legend-specified.json", + "scenario": "Create a new dashboard with a bar_chart widget with stacked type and no legend specified", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-change-widget-using-formulas-and-functions-slo-query.json", + "scenario": "Create a new dashboard with a change widget using formulas and functions slo query", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-formulas-and-functions-change-widget.json", + "scenario": "Create a new dashboard with a formulas and functions change widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-formulas-and-functions-treemap-widget.json", + "scenario": "Create a new dashboard with a formulas and functions treemap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-live-default-timeframe-returns-ok-response.json", + "scenario": "Create a new dashboard with a live default_timeframe returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-using-the-percentile-aggregator.json", + "scenario": "Create a new dashboard with a query value widget using the percentile aggregator", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-using-timeseries-background.json", + "scenario": "Create a new dashboard with a query value widget using timeseries background", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-containing-a-description.json", + "scenario": "Create a new dashboard with a query_value widget containing a description", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-and-an-overlay-request.json", + "scenario": "Create a new dashboard with a timeseries widget and an overlay request", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-cloud-cost-query.json", + "scenario": "Create a new dashboard with a timeseries widget using formulas and functions cloud cost query", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-metrics-query-with-combined-semantic-mode.json", + "scenario": "Create a new dashboard with a timeseries widget using formulas and functions metrics query with combined semantic_mode", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-metrics-query-with-native-semantic-mode.json", + "scenario": "Create a new dashboard with a timeseries widget using formulas and functions metrics query with native semantic_mode", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-toplist-widget-sorted-by-group.json", + "scenario": "Create a new dashboard with a toplist widget sorted by group", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-a-toplist-widget-with-stacked-type-and-no-legend-specified.json", + "scenario": "Create a new dashboard with a toplist widget with stacked type and no legend specified", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-alert-graph-widget.json", + "scenario": "Create a new dashboard with alert_graph widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-alert-value-widget.json", + "scenario": "Create a new dashboard with alert_value widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-an-audit-logs-query.json", + "scenario": "Create a new dashboard with an audit logs query", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-apm-dependency-stats-widget.json", + "scenario": "Create a new dashboard with apm dependency stats widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-apm-metrics-widget.json", + "scenario": "Create a new dashboard with apm metrics widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-apm-resource-stats-widget.json", + "scenario": "Create a new dashboard with apm resource stats widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-apm-issue-stream-list-stream-widget.json", + "scenario": "Create a new dashboard with apm_issue_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-bar-chart-widget.json", + "scenario": "Create a new dashboard with bar_chart widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-bar-chart-widget-sorted-by-group.json", + "scenario": "Create a new dashboard with bar_chart widget sorted by group", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-check-status-widget.json", + "scenario": "Create a new dashboard with check_status widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-ci-test-stream-list-stream-widget.json", + "scenario": "Create a new dashboard with ci_test_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-distribution-widget-and-apm-stats-data.json", + "scenario": "Create a new dashboard with distribution widget and apm stats data", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-distribution-widget-with-markers-and-num-buckets.json", + "scenario": "Create a new dashboard with distribution widget with markers and num_buckets", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-event-stream-list-stream-widget.json", + "scenario": "Create a new dashboard with event_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-event-stream-widget.json", + "scenario": "Create a new dashboard with event_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-event-timeline-widget.json", + "scenario": "Create a new dashboard with event_timeline widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-formula-and-function-distribution-widget.json", + "scenario": "Create a new dashboard with formula and function distribution widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-formula-and-function-heatmap-widget.json", + "scenario": "Create a new dashboard with formula and function heatmap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-events-query-using-facet-group-by.json", + "scenario": "Create a new dashboard with formulas and functions events query using facet group by", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-events-query-using-flat-group-by-fields.json", + "scenario": "Create a new dashboard with formulas and functions events query using flat group by fields", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-scatterplot-widget.json", + "scenario": "Create a new dashboard with formulas and functions scatterplot widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-free-text-widget.json", + "scenario": "Create a new dashboard with free_text widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-funnel-widget.json", + "scenario": "Create a new dashboard with funnel widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-geomap-widget.json", + "scenario": "Create a new dashboard with geomap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-heatmap-widget.json", + "scenario": "Create a new dashboard with heatmap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-heatmap-widget-with-markers-and-num-buckets.json", + "scenario": "Create a new dashboard with heatmap widget with markers and num_buckets", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-hostmap-ddsql-widget.json", + "scenario": "Create a new dashboard with hostmap DDSQL widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-hostmap-infra-widget.json", + "scenario": "Create a new dashboard with hostmap infra widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-hostmap-widget.json", + "scenario": "Create a new dashboard with hostmap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-iframe-widget.json", + "scenario": "Create a new dashboard with iframe widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-image-widget.json", + "scenario": "Create a new dashboard with image widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-invalid-team-tags-returns-bad-request-response.json", + "scenario": "Create a new dashboard with invalid team tags returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-list-stream-widget.json", + "scenario": "Create a new dashboard with list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-list-stream-widget-with-a-valid-sort-parameter-asc.json", + "scenario": "Create a new dashboard with list_stream widget with a valid sort parameter ASC", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-list-stream-widget-with-a-valid-sort-parameter-desc.json", + "scenario": "Create a new dashboard with list_stream widget with a valid sort parameter DESC", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-llm-observability-stream-list-stream-widget.json", + "scenario": "Create a new dashboard with llm_observability_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-log-stream-widget.json", + "scenario": "Create a new dashboard with log_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-logs-query-table-widget-and-storage-parameter.json", + "scenario": "Create a new dashboard with logs query table widget and storage parameter", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-logs-pattern-stream-list-stream-widget.json", + "scenario": "Create a new dashboard with logs_pattern_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-logs-stream-list-stream-widget-and-storage-parameter.json", + "scenario": "Create a new dashboard with logs_stream list_stream widget and storage parameter", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-logs-transaction-stream-list-stream-widget.json", + "scenario": "Create a new dashboard with logs_transaction_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-logs-transaction-stream-list-stream-widget-and-version.json", + "scenario": "Create a new dashboard with logs_transaction_stream list_stream widget and version", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-manage-status-widget.json", + "scenario": "Create a new dashboard with manage_status widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-manage-status-widget-and-show-priority-parameter.json", + "scenario": "Create a new dashboard with manage_status widget and show_priority parameter", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-note-widget.json", + "scenario": "Create a new dashboard with note widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-point-plot-widget.json", + "scenario": "Create a new dashboard with point_plot widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-powerpack-widget.json", + "scenario": "Create a new dashboard with powerpack widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-query-table-widget.json", + "scenario": "Create a new dashboard with query_table widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-query-table-widget-and-cell-display-mode-is-trend.json", + "scenario": "Create a new dashboard with query_table widget and cell_display_mode is trend", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-query-table-widget-and-text-formatting.json", + "scenario": "Create a new dashboard with query_table widget and text formatting", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-query-value-widget.json", + "scenario": "Create a new dashboard with query_value widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-rum-issue-stream-list-stream-widget.json", + "scenario": "Create a new dashboard with rum_issue_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-run-workflow-widget.json", + "scenario": "Create a new dashboard with run-workflow widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-rum-data-source.json", + "scenario": "Create a new dashboard with sankey widget and RUM data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-network-data-source.json", + "scenario": "Create a new dashboard with sankey widget and network data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-product-analytics-data-source.json", + "scenario": "Create a new dashboard with sankey widget and product analytics data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-scatterplot-widget.json", + "scenario": "Create a new dashboard with scatterplot widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-servicemap-widget.json", + "scenario": "Create a new dashboard with servicemap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-slo-list-widget.json", + "scenario": "Create a new dashboard with slo list widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-slo-list-widget-with-sort.json", + "scenario": "Create a new dashboard with slo list widget with sort", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-slo-widget.json", + "scenario": "Create a new dashboard with slo widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-split-graph-widget.json", + "scenario": "Create a new dashboard with split graph widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-sunburst-widget-and-metrics-data.json", + "scenario": "Create a new dashboard with sunburst widget and metrics data", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-team-tags-returns-ok-response.json", + "scenario": "Create a new dashboard with team tags returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-and-default-returns-bad-request-response.json", + "scenario": "Create a new dashboard with template variable defaults and default returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-returns-ok-response.json", + "scenario": "Create a new dashboard with template variable defaults returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-whose-value-has-no-length-returns-bad-request-response.json", + "scenario": "Create a new dashboard with template variable defaults whose value has no length returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-template-variable-presets-using-values-and-value-returns-bad-request-response.json", + "scenario": "Create a new dashboard with template variable presets using values and value returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-template-variable-presets-using-values-returns-ok-response.json", + "scenario": "Create a new dashboard with template variable presets using values returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-template-variable-type-field-returns-ok-response.json", + "scenario": "Create a new dashboard with template variable type field returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-timeseries-widget-and-formula-style-attributes.json", + "scenario": "Create a new dashboard with timeseries widget and formula style attributes", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-timeseries-widget-containing-style-attributes.json", + "scenario": "Create a new dashboard with timeseries widget containing style attributes", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-has-value-labels.json", + "scenario": "Create a new dashboard with timeseries widget using has_value_labels", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-order-by-tags.json", + "scenario": "Create a new dashboard with timeseries widget using order_by tags", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-order-by-values.json", + "scenario": "Create a new dashboard with timeseries widget using order_by values", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-timeseries-widget-with-custom-unit.json", + "scenario": "Create a new dashboard with timeseries widget with custom_unit", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-timeseries-widget-without-order-by-for-backward-compatibility.json", + "scenario": "Create a new dashboard with timeseries widget without order_by for backward compatibility", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-toplist-widget.json", + "scenario": "Create a new dashboard with toplist widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-topology-map-data-streams-widget.json", + "scenario": "Create a new dashboard with topology_map data_streams widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-topology-map-widget.json", + "scenario": "Create a new dashboard with topology_map widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-trace-service-widget.json", + "scenario": "Create a new dashboard with trace_service widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-dashboard-with-trace-stream-widget.json", + "scenario": "Create a new dashboard with trace_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-timeseries-widget-with-ci-pipelines-data-source.json", + "scenario": "Create a new timeseries widget with ci_pipelines data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-timeseries-widget-with-ci-tests-data-source.json", + "scenario": "Create a new timeseries widget with ci_tests data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-timeseries-widget-with-incident-analytics-data-source.json", + "scenario": "Create a new timeseries widget with incident_analytics data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-timeseries-widget-with-legacy-live-span-time-format.json", + "scenario": "Create a new timeseries widget with legacy live span time format", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-timeseries-widget-with-new-fixed-span-time-format.json", + "scenario": "Create a new timeseries widget with new fixed span time format", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-timeseries-widget-with-new-live-span-time-format.json", + "scenario": "Create a new timeseries widget with new live span time format", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-new-timeseries-widget-with-product-analytics-data-source.json", + "scenario": "Create a new timeseries widget with product_analytics data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-shared-dashboard-returns-dashboard-not-found-response.json", + "scenario": "Create a shared dashboard returns \"Dashboard Not Found\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-shared-dashboard-returns-ok-response.json", + "scenario": "Create a shared dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/create-a-shared-dashboard-with-a-group-template-variable-returns-ok-response.json", + "scenario": "Create a shared dashboard with a group template variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/delete-a-dashboard-returns-ok-response.json", + "scenario": "Delete a dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/delete-dashboards-returns-no-content-response.json", + "scenario": "Delete dashboards returns \"No Content\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/get-a-dashboard-returns-ok-response.json", + "scenario": "Get a dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/get-a-dashboard-returns-author-name.json", + "scenario": "Get a dashboard returns 'author_name'", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/get-a-shared-dashboard-returns-ok-response.json", + "scenario": "Get a shared dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/get-all-dashboards-returns-ok-response.json", + "scenario": "Get all dashboards returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/get-all-dashboards-returns-ok-response-with-pagination.json", + "scenario": "Get all dashboards returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/get-all-invitations-for-a-shared-dashboard-returns-ok-response.json", + "scenario": "Get all invitations for a shared dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/get-deleted-dashboards-returns-ok-response.json", + "scenario": "Get deleted dashboards returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/restore-deleted-dashboards-returns-no-content-response.json", + "scenario": "Restore deleted dashboards returns \"No Content\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/send-shared-dashboard-invitation-email-returns-ok.json", + "scenario": "Send shared dashboard invitation email returns OK", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/update-a-dashboard-returns-ok-response.json", + "scenario": "Update a dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/update-a-dashboard-with-tags-returns-ok-response.json", + "scenario": "Update a dashboard with tags returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/update-a-shared-dashboard-returns-ok-response.json", + "scenario": "Update a shared dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "feature_file": "features/v1/dashboards.feature", + "file": "v1/dashboards/update-a-shared-dashboard-with-selectable-template-vars-returns-ok-response.json", + "scenario": "Update a shared dashboard with selectable_template_vars returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/cancel-a-downtime-returns-downtime-not-found-response.json", + "scenario": "Cancel a downtime returns \"Downtime not found\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/cancel-a-downtime-returns-ok-response.json", + "scenario": "Cancel a downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/cancel-downtimes-by-scope-returns-downtimes-not-found-response.json", + "scenario": "Cancel downtimes by scope returns \"Downtimes not found\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/cancel-downtimes-by-scope-returns-ok-response.json", + "scenario": "Cancel downtimes by scope returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/get-a-downtime-returns-downtime-not-found-response.json", + "scenario": "Get a downtime returns \"Downtime not found\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/get-a-downtime-returns-ok-response.json", + "scenario": "Get a downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/get-all-downtimes-returns-ok-response.json", + "scenario": "Get all downtimes returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/schedule-a-downtime-once-a-year.json", + "scenario": "Schedule a downtime once a year", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/schedule-a-downtime-returns-bad-request-response.json", + "scenario": "Schedule a downtime returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/schedule-a-downtime-returns-ok-response.json", + "scenario": "Schedule a downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/schedule-a-downtime-until-date.json", + "scenario": "Schedule a downtime until date", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/schedule-a-downtime-with-invalid-type-hours.json", + "scenario": "Schedule a downtime with invalid type hours", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/schedule-a-downtime-with-invalid-weekdays.json", + "scenario": "Schedule a downtime with invalid weekdays", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/schedule-a-downtime-with-mutually-exclusive-until-occurrences-and-until-date-properties.json", + "scenario": "Schedule a downtime with mutually exclusive until occurrences and until date properties", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/schedule-a-downtime-with-until-occurrences.json", + "scenario": "Schedule a downtime with until occurrences", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/schedule-a-monitor-downtime-returns-ok-response.json", + "scenario": "Schedule a monitor downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "feature_file": "features/v1/downtimes.feature", + "file": "v1/downtimes/update-a-downtime-returns-ok-response.json", + "scenario": "Update a downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Events", + "feature_file": "features/v1/events.feature", + "file": "v1/events/post-an-event-in-the-past-returns-bad-request-response.json", + "scenario": "Post an event in the past returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Events", + "feature_file": "features/v1/events.feature", + "file": "v1/events/post-an-event-returns-ok-response.json", + "scenario": "Post an event returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Events", + "feature_file": "features/v1/events.feature", + "file": "v1/events/post-an-event-with-a-long-title-returns-ok-response.json", + "scenario": "Post an event with a long title returns \"OK\" response", + "version": "v1" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v1/gcp_integration.feature", + "file": "v1/gcp-integration/create-a-gcp-integration-returns-ok-response.json", + "scenario": "Create a GCP integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v1/gcp_integration.feature", + "file": "v1/gcp-integration/delete-a-gcp-integration-returns-ok-response.json", + "scenario": "Delete a GCP integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v1/gcp_integration.feature", + "file": "v1/gcp-integration/list-all-gcp-integrations-returns-ok-response.json", + "scenario": "List all GCP integrations returns \"OK\" response", + "version": "v1" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v1/gcp_integration.feature", + "file": "v1/gcp-integration/update-a-gcp-integration-cloud-run-revision-filters-returns-ok-response.json", + "scenario": "Update a GCP integration cloud run revision filters returns \"OK\" response", + "version": "v1" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v1/gcp_integration.feature", + "file": "v1/gcp-integration/update-a-gcp-integration-returns-ok-response.json", + "scenario": "Update a GCP integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Hosts", + "feature_file": "features/v1/hosts.feature", + "file": "v1/hosts/get-all-hosts-with-metadata-deserializes-successfully.json", + "scenario": "Get all hosts with metadata deserializes successfully", + "version": "v1" + }, + { + "feature": "Hosts", + "feature_file": "features/v1/hosts.feature", + "file": "v1/hosts/get-all-hosts-with-metadata-for-your-organization-returns-ok-response.json", + "scenario": "Get all hosts with metadata for your organization returns \"OK\" response", + "version": "v1" + }, + { + "feature": "IP Ranges", + "feature_file": "features/v1/ip_ranges.feature", + "file": "v1/ip-ranges/list-ip-ranges-returns-ok-response.json", + "scenario": "List IP Ranges returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs", + "feature_file": "features/v1/logs.feature", + "file": "v1/logs/search-test-logs-returns-ok-response.json", + "scenario": "Search test logs returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs", + "feature_file": "features/v1/logs.feature", + "file": "v1/logs/send-logs-returns-response-from-server-always-200-empty-json-response.json", + "scenario": "Send logs returns \"Response from server (always 200 empty JSON).\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-map-processor-returns-ok-response.json", + "scenario": "Create a pipeline with Array Map Processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-map-processor-using-arithmetic-sub-processor-returns-ok-response.json", + "scenario": "Create a pipeline with Array Map Processor using arithmetic sub-processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-map-processor-using-category-sub-processor-returns-ok-response.json", + "scenario": "Create a pipeline with Array Map Processor using category sub-processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-map-processor-with-preserve-source-false-returns-ok-response.json", + "scenario": "Create a pipeline with Array Map Processor with preserve_source false returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-returns-ok-response.json", + "scenario": "Create a pipeline with Array Processor Append Operation returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-with-preserve-source-false-returns-ok-response.json", + "scenario": "Create a pipeline with Array Processor Append Operation with preserve_source false returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-with-preserve-source-true-returns-ok-response.json", + "scenario": "Create a pipeline with Array Processor Append Operation with preserve_source true returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-processor-key-value-operation-returns-ok-response.json", + "scenario": "Create a pipeline with Array Processor Key Value Operation returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-processor-key-value-operation-with-target-and-override-on-conflict-returns-ok-response.json", + "scenario": "Create a pipeline with Array Processor Key Value Operation with target and override_on_conflict returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-processor-length-operation-returns-ok-response.json", + "scenario": "Create a pipeline with Array Processor Length Operation returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-array-processor-select-operation-returns-ok-response.json", + "scenario": "Create a pipeline with Array Processor Select Operation returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-decoder-processor-returns-ok-response.json", + "scenario": "Create a pipeline with Decoder Processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-schema-processor-and-preserve-source-false-returns-ok-response.json", + "scenario": "Create a pipeline with Schema Processor and preserve_source false returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-schema-processor-and-preserve-source-true-returns-ok-response.json", + "scenario": "Create a pipeline with Schema Processor and preserve_source true returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-span-id-remapper-returns-ok-response.json", + "scenario": "Create a pipeline with Span Id Remapper returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-nested-pipeline-processor-returns-ok-response.json", + "scenario": "Create a pipeline with nested pipeline processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "feature_file": "features/v1/logs_pipelines.feature", + "file": "v1/logs-pipelines/create-a-pipeline-with-schema-processor.json", + "scenario": "Create a pipeline with schema processor", + "version": "v1" + }, + { + "feature": "Metrics", + "feature_file": "features/v1/metrics.feature", + "file": "v1/metrics/query-timeseries-points-returns-ok-response.json", + "scenario": "Query timeseries points returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Metrics", + "feature_file": "features/v1/metrics.feature", + "file": "v1/metrics/submit-metrics-returns-payload-accepted-response.json", + "scenario": "Submit metrics returns \"Payload accepted\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/check-if-a-monitor-can-be-deleted-returns-ok-response.json", + "scenario": "Check if a monitor can be deleted returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-cost-monitor-returns-ok-response.json", + "scenario": "Create a Cost Monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-data-jobs-monitor-returns-ok-response.json", + "scenario": "Create a Data Jobs monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-data-quality-monitor-returns-ok-response.json", + "scenario": "Create a Data Quality monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-data-quality-monitor-with-sensitivity-returns-ok-response.json", + "scenario": "Create a Data Quality monitor with sensitivity returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-rum-formula-and-functions-monitor-returns-ok-response.json", + "scenario": "Create a RUM formula and functions monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-ci-pipelines-formula-and-functions-monitor-returns-ok-response.json", + "scenario": "Create a ci-pipelines formula and functions monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-ci-pipelines-monitor-returns-ok-response.json", + "scenario": "Create a ci-pipelines monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-ci-tests-formula-and-functions-monitor-returns-ok-response.json", + "scenario": "Create a ci-tests formula and functions monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-ci-tests-monitor-returns-ok-response.json", + "scenario": "Create a ci-tests monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-metric-monitor-returns-ok-response.json", + "scenario": "Create a metric monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-metric-monitor-with-a-custom-schedule-returns-ok-response.json", + "scenario": "Create a metric monitor with a custom schedule returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-monitor-returns-bad-request-response.json", + "scenario": "Create a monitor returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-monitor-returns-ok-response.json", + "scenario": "Create a monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-monitor-with-aggregate-augmented-query-variables-returns-ok-response.json", + "scenario": "Create a monitor with aggregate augmented query variables returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-monitor-with-aggregate-filtered-query-variables-returns-ok-response.json", + "scenario": "Create a monitor with aggregate filtered query variables returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-a-monitor-with-assets-returns-ok-response.json", + "scenario": "Create a monitor with assets returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-an-error-tracking-monitor-returns-ok-response.json", + "scenario": "Create an Error Tracking monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/create-an-llm-observability-monitor-returns-ok-response.json", + "scenario": "Create an LLM Observability monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/delete-a-monitor-returns-item-not-found-error-response.json", + "scenario": "Delete a monitor returns \"Item not found error\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/delete-a-monitor-returns-ok-response.json", + "scenario": "Delete a monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/edit-a-monitor-returns-monitor-not-found-error-response.json", + "scenario": "Edit a monitor returns \"Monitor Not Found error\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/edit-a-monitor-returns-ok-response.json", + "scenario": "Edit a monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/get-a-monitor-s-details-returns-monitor-not-found-error-response.json", + "scenario": "Get a monitor's details returns \"Monitor Not Found error\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/get-a-monitor-s-details-returns-ok-response.json", + "scenario": "Get a monitor's details returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/get-a-monitor-s-details-with-downtime-returns-ok-response.json", + "scenario": "Get a monitor's details with downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/get-a-synthetics-monitor-s-details.json", + "scenario": "Get a synthetics monitor's details", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/get-all-monitors-returns-bad-request-response.json", + "scenario": "Get all monitors returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/get-all-monitors-returns-ok-response-with-pagination.json", + "scenario": "Get all monitors returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/monitors-group-search-returns-bad-request-response.json", + "scenario": "Monitors group search returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/monitors-group-search-returns-ok-response.json", + "scenario": "Monitors group search returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/monitors-search-returns-bad-request-response.json", + "scenario": "Monitors search returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/monitors-search-returns-ok-response.json", + "scenario": "Monitors search returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/validate-a-monitor-returns-invalid-json-response.json", + "scenario": "Validate a monitor returns \"Invalid JSON\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/validate-a-monitor-returns-ok-response.json", + "scenario": "Validate a monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/validate-a-multi-alert-monitor-returns-ok-response.json", + "scenario": "Validate a multi-alert monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/validate-an-existing-monitor-returns-invalid-json-response.json", + "scenario": "Validate an existing monitor returns \"Invalid JSON\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "feature_file": "features/v1/monitors.feature", + "file": "v1/monitors/validate-an-existing-monitor-returns-ok-response.json", + "scenario": "Validate an existing monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "feature_file": "features/v1/notebooks.feature", + "file": "v1/notebooks/create-a-notebook-returns-ok-response.json", + "scenario": "Create a notebook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "feature_file": "features/v1/notebooks.feature", + "file": "v1/notebooks/delete-a-notebook-returns-not-found-response.json", + "scenario": "Delete a notebook returns \"Not Found\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "feature_file": "features/v1/notebooks.feature", + "file": "v1/notebooks/delete-a-notebook-returns-ok-response.json", + "scenario": "Delete a notebook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "feature_file": "features/v1/notebooks.feature", + "file": "v1/notebooks/get-a-notebook-returns-ok-response.json", + "scenario": "Get a notebook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "feature_file": "features/v1/notebooks.feature", + "file": "v1/notebooks/get-all-notebooks-returns-ok-response.json", + "scenario": "Get all notebooks returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "feature_file": "features/v1/notebooks.feature", + "file": "v1/notebooks/get-all-notebooks-returns-ok-response-with-pagination.json", + "scenario": "Get all notebooks returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Notebooks", + "feature_file": "features/v1/notebooks.feature", + "file": "v1/notebooks/update-a-notebook-returns-ok-response.json", + "scenario": "Update a notebook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v1/security_monitoring.feature", + "file": "v1/security-monitoring/add-a-security-signal-to-an-incident-returns-ok-response.json", + "scenario": "Add a security signal to an incident returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v1/security_monitoring.feature", + "file": "v1/security-monitoring/change-the-triage-state-of-a-security-signal-returns-ok-response.json", + "scenario": "Change the triage state of a security signal returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v1/security_monitoring.feature", + "file": "v1/security-monitoring/modify-the-triage-assignee-of-a-security-signal-returns-ok-response.json", + "scenario": "Modify the triage assignee of a security signal returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Checks", + "feature_file": "features/v1/service_checks.feature", + "file": "v1/service-checks/submit-a-service-check-returns-payload-accepted-response.json", + "scenario": "Submit a Service Check returns \"Payload accepted\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "feature_file": "features/v1/service_level_objective_corrections.feature", + "file": "v1/service-level-objective-corrections/create-an-slo-correction-returns-ok-response.json", + "scenario": "Create an SLO correction returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "feature_file": "features/v1/service_level_objective_corrections.feature", + "file": "v1/service-level-objective-corrections/create-an-slo-correction-with-rrule-returns-ok-response.json", + "scenario": "Create an SLO correction with rrule returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "feature_file": "features/v1/service_level_objective_corrections.feature", + "file": "v1/service-level-objective-corrections/create-an-slo-correction-with-slo-query-returns-ok-response.json", + "scenario": "Create an SLO correction with slo_query returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "feature_file": "features/v1/service_level_objective_corrections.feature", + "file": "v1/service-level-objective-corrections/get-all-slo-corrections-returns-ok-response.json", + "scenario": "Get all SLO corrections returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "feature_file": "features/v1/service_level_objective_corrections.feature", + "file": "v1/service-level-objective-corrections/get-all-slo-corrections-returns-ok-response-with-pagination.json", + "scenario": "Get all SLO corrections returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "feature_file": "features/v1/service_level_objective_corrections.feature", + "file": "v1/service-level-objective-corrections/get-an-slo-correction-for-an-slo-returns-ok-response.json", + "scenario": "Get an SLO correction for an SLO returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "feature_file": "features/v1/service_level_objective_corrections.feature", + "file": "v1/service-level-objective-corrections/update-an-slo-correction-returns-ok-response.json", + "scenario": "Update an SLO correction returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "feature_file": "features/v1/service_level_objective_corrections.feature", + "file": "v1/service-level-objective-corrections/update-an-slo-correction-with-slo-query-returns-ok-response.json", + "scenario": "Update an SLO correction with slo_query returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/create-a-new-metric-slo-object-using-bad-events-formula-returns-ok-response.json", + "scenario": "Create a new metric SLO object using bad events formula returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/create-a-new-metric-slo-object-using-sli-specification-returns-ok-response.json", + "scenario": "Create a new metric SLO object using sli_specification returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/create-a-time-slice-slo-object-returns-ok-response.json", + "scenario": "Create a time-slice SLO object returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/create-an-slo-object-returns-bad-request-response.json", + "scenario": "Create an SLO object returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/create-an-slo-object-returns-ok-response.json", + "scenario": "Create an SLO object returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/delete-an-slo-returns-not-found-response.json", + "scenario": "Delete an SLO returns \"Not found\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/delete-an-slo-returns-ok-response.json", + "scenario": "Delete an SLO returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/get-corrections-for-an-slo-returns-ok-response.json", + "scenario": "Get Corrections For an SLO returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/get-all-slos-returns-ok-response.json", + "scenario": "Get all SLOs returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/get-all-slos-returns-ok-response-with-pagination.json", + "scenario": "Get all SLOs returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/get-an-slo-s-details-returns-ok-response.json", + "scenario": "Get an SLO's details returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/get-an-slo-s-history-returns-ok-response.json", + "scenario": "Get an SLO's history returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/search-for-slos-returns-ok-response.json", + "scenario": "Search for SLOs returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/update-an-slo-returns-bad-request-response.json", + "scenario": "Update an SLO returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v1/service_level_objectives.feature", + "file": "v1/service-level-objectives/update-an-slo-returns-ok-response.json", + "scenario": "Update an SLO returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/client-is-resilient-to-enum-and-oneof-deserialization-errors.json", + "scenario": "Client is resilient to enum and oneOf deserialization errors", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-fido-global-variable-returns-ok-response.json", + "scenario": "Create a FIDO global variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-totp-global-variable-returns-ok-response.json", + "scenario": "Create a TOTP global variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-browser-test-returns-ok-returns-saved-rumsettings-response.json", + "scenario": "Create a browser test returns \"OK - Returns saved rumSettings.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-browser-test-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create a browser test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-browser-test-with-advanced-scheduling-options-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create a browser test with advanced scheduling options returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-global-variable-from-test-returns-ok-response.json", + "scenario": "Create a global variable from test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-mobile-test-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create a mobile test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-multi-step-api-test-with-every-type-of-basicauth-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create a multi-step api test with every type of basicAuth returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-multistep-test-with-subtest-returns-ok-response.json", + "scenario": "Create a multistep test with subtest returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-a-private-location-returns-ok-response.json", + "scenario": "Create a private location returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-grpc-test-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create an API GRPC test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-http-test-has-bodyhash-filled-out.json", + "scenario": "Create an API HTTP test has bodyHash filled out", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-http-test-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create an API HTTP test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-http-with-oauth-rop-test-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create an API HTTP with oauth-rop test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-ssl-test-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create an API SSL test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-test-with-mcp-steps-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create an API test with MCP steps returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-test-with-udp-subtype-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create an API test with UDP subtype returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-test-with-websocket-subtype-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create an API test with WEBSOCKET subtype returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-test-with-a-file-payload-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create an API test with a file payload returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/create-an-api-test-with-multi-subtype-returns-ok-returns-the-created-test-details-response.json", + "scenario": "Create an API test with multi subtype returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/edit-a-mobile-test-returns-ok-response.json", + "scenario": "Edit a Mobile test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/edit-an-api-test-returns-ok-response.json", + "scenario": "Edit an API test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/fetch-uptime-for-multiple-tests-returns-json-format-is-wrong-response.json", + "scenario": "Fetch uptime for multiple tests returns \"- JSON format is wrong\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/fetch-uptime-for-multiple-tests-returns-ok-response.json", + "scenario": "Fetch uptime for multiple tests returns \"OK.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/get-a-mobile-test-returns-ok-response.json", + "scenario": "Get a Mobile test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/get-a-browser-test-result-returns-ok-response.json", + "scenario": "Get a browser test result returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/get-a-browser-test-s-latest-results-summaries-returns-ok-response.json", + "scenario": "Get a browser test's latest results summaries returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/get-an-api-test-result-returns-ok-response.json", + "scenario": "Get an API test result returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/get-an-api-test-result-returns-result-with-failure-object.json", + "scenario": "Get an API test result returns result with failure object", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/get-an-api-test-s-latest-results-summaries-returns-ok-response.json", + "scenario": "Get an API test's latest results summaries returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/get-the-list-of-all-synthetic-tests-returns-ok-returns-the-list-of-all-synthetic-tests-response-with-pagination.json", + "scenario": "Get the list of all Synthetic tests returns \"OK - Returns the list of all Synthetic tests.\" response with pagination", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/get-the-list-of-default-locations-returns-ok-response.json", + "scenario": "Get the list of default locations returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/patch-a-synthetic-test-returns-ok-response.json", + "scenario": "Patch a Synthetic test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "feature_file": "features/v1/synthetics.feature", + "file": "v1/synthetics/trigger-synthetic-tests-returns-ok-response.json", + "scenario": "Trigger Synthetic tests returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v1/usage_metering.feature", + "file": "v1/usage-metering/get-all-custom-metrics-by-hourly-average-returns-bad-request-response.json", + "scenario": "Get all custom metrics by hourly average returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v1/usage_metering.feature", + "file": "v1/usage-metering/get-all-custom-metrics-by-hourly-average-returns-ok-response.json", + "scenario": "Get all custom metrics by hourly average returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v1/usage_metering.feature", + "file": "v1/usage-metering/get-hourly-usage-attribution-returns-ok-response.json", + "scenario": "Get hourly usage attribution returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v1/usage_metering.feature", + "file": "v1/usage-metering/get-hourly-usage-for-logs-by-index-returns-bad-request-response.json", + "scenario": "Get hourly usage for Logs by Index returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v1/usage_metering.feature", + "file": "v1/usage-metering/get-hourly-usage-for-logs-by-index-returns-ok-response.json", + "scenario": "Get hourly usage for Logs by Index returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v1/usage_metering.feature", + "file": "v1/usage-metering/get-monthly-usage-attribution-returns-ok-response.json", + "scenario": "Get monthly usage attribution returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v1/usage_metering.feature", + "file": "v1/usage-metering/get-specified-daily-custom-reports-returns-ok-response.json", + "scenario": "Get specified daily custom reports returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v1/usage_metering.feature", + "file": "v1/usage-metering/get-specified-monthly-custom-reports-returns-ok-response.json", + "scenario": "Get specified monthly custom reports returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Users", + "feature_file": "features/v1/users.feature", + "file": "v1/users/create-a-user-returns-null-access-role.json", + "scenario": "Create a user returns null access role", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "feature_file": "features/v1/webhooks_integration.feature", + "file": "v1/webhooks-integration/create-a-custom-variable-returns-ok-response.json", + "scenario": "Create a custom variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "feature_file": "features/v1/webhooks_integration.feature", + "file": "v1/webhooks-integration/create-a-webhooks-integration-returns-ok-response.json", + "scenario": "Create a webhooks integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "feature_file": "features/v1/webhooks_integration.feature", + "file": "v1/webhooks-integration/delete-a-custom-variable-returns-ok-response.json", + "scenario": "Delete a custom variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "feature_file": "features/v1/webhooks_integration.feature", + "file": "v1/webhooks-integration/delete-a-webhook-returns-ok-response.json", + "scenario": "Delete a webhook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "feature_file": "features/v1/webhooks_integration.feature", + "file": "v1/webhooks-integration/get-a-webhook-integration-returns-ok-response.json", + "scenario": "Get a webhook integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "feature_file": "features/v1/webhooks_integration.feature", + "file": "v1/webhooks-integration/update-a-custom-variable-returns-ok-response.json", + "scenario": "Update a custom variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "feature_file": "features/v1/webhooks_integration.feature", + "file": "v1/webhooks-integration/update-a-webhook-returns-ok-response.json", + "scenario": "Update a webhook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/create-a-new-action-connection-returns-bad-request-response.json", + "scenario": "Create a new Action Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/create-a-new-action-connection-returns-successfully-created-action-connection-response.json", + "scenario": "Create a new Action Connection returns \"Successfully created Action Connection\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/delete-an-existing-action-connection-returns-not-found-response.json", + "scenario": "Delete an existing Action Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/delete-an-existing-action-connection-returns-the-resource-was-deleted-successfully-response.json", + "scenario": "Delete an existing Action Connection returns \"The resource was deleted successfully.\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/get-an-existing-action-connection-returns-bad-request-response.json", + "scenario": "Get an existing Action Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/get-an-existing-action-connection-returns-not-found-response.json", + "scenario": "Get an existing Action Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/get-an-existing-action-connection-returns-successfully-get-action-connection-response.json", + "scenario": "Get an existing Action Connection returns \"Successfully get Action Connection\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/get-an-existing-app-key-registration-returns-bad-request-response.json", + "scenario": "Get an existing App Key Registration returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/get-an-existing-app-key-registration-returns-not-found-response.json", + "scenario": "Get an existing App Key Registration returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/get-an-existing-app-key-registration-returns-ok-response.json", + "scenario": "Get an existing App Key Registration returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/list-app-key-registrations-returns-ok-response.json", + "scenario": "List App Key Registrations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/register-a-new-app-key-returns-bad-request-response.json", + "scenario": "Register a new App Key returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/register-a-new-app-key-returns-created-response.json", + "scenario": "Register a new App Key returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/unregister-an-app-key-returns-bad-request-response.json", + "scenario": "Unregister an App Key returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/unregister-an-app-key-returns-not-found-response.json", + "scenario": "Unregister an App Key returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/update-an-existing-action-connection-returns-bad-request-response.json", + "scenario": "Update an existing Action Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/update-an-existing-action-connection-returns-not-found-response.json", + "scenario": "Update an existing Action Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "feature_file": "features/v2/action_connection.feature", + "file": "v2/action-connection/update-an-existing-action-connection-returns-successfully-updated-action-connection-response.json", + "scenario": "Update an existing Action Connection returns \"Successfully updated Action Connection\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/bulk-delete-datastore-items-returns-bad-request-response.json", + "scenario": "Bulk delete datastore items returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/bulk-delete-datastore-items-returns-not-found-response.json", + "scenario": "Bulk delete datastore items returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/bulk-delete-datastore-items-returns-ok-response.json", + "scenario": "Bulk delete datastore items returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/bulk-write-datastore-items-returns-bad-request-response.json", + "scenario": "Bulk write datastore items returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/bulk-write-datastore-items-returns-not-found-response.json", + "scenario": "Bulk write datastore items returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/bulk-write-datastore-items-returns-ok-response.json", + "scenario": "Bulk write datastore items returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/create-datastore-returns-bad-request-response.json", + "scenario": "Create datastore returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/create-datastore-returns-ok-response.json", + "scenario": "Create datastore returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/delete-datastore-item-returns-bad-request-response.json", + "scenario": "Delete datastore item returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/delete-datastore-item-returns-not-found-response.json", + "scenario": "Delete datastore item returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/delete-datastore-item-returns-ok-response.json", + "scenario": "Delete datastore item returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/delete-datastore-returns-bad-request-response.json", + "scenario": "Delete datastore returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/delete-datastore-returns-ok-response.json", + "scenario": "Delete datastore returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/get-datastore-returns-bad-request-response.json", + "scenario": "Get datastore returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/get-datastore-returns-not-found-response.json", + "scenario": "Get datastore returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/get-datastore-returns-ok-response.json", + "scenario": "Get datastore returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/list-datastore-items-returns-bad-request-response.json", + "scenario": "List datastore items returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/list-datastore-items-returns-not-found-response.json", + "scenario": "List datastore items returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/list-datastore-items-returns-ok-response.json", + "scenario": "List datastore items returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/list-datastores-returns-ok-response.json", + "scenario": "List datastores returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/update-datastore-item-returns-bad-request-response.json", + "scenario": "Update datastore item returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/update-datastore-item-returns-not-found-response.json", + "scenario": "Update datastore item returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/update-datastore-item-returns-ok-response.json", + "scenario": "Update datastore item returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/update-datastore-returns-bad-request-response.json", + "scenario": "Update datastore returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/update-datastore-returns-not-found-response.json", + "scenario": "Update datastore returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "feature_file": "features/v2/actions_datastores.feature", + "file": "v2/actions-datastores/update-datastore-returns-ok-response.json", + "scenario": "Update datastore returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/create-aws-on-demand-task-returns-aws-on-demand-task-created-successfully-response.json", + "scenario": "Create AWS on demand task returns \"AWS on demand task created successfully.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/create-aws-on-demand-task-returns-bad-request-response.json", + "scenario": "Create AWS on demand task returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/create-aws-scan-options-returns-bad-request-response.json", + "scenario": "Create AWS scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/create-aws-scan-options-returns-conflict-response.json", + "scenario": "Create AWS scan options returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/create-azure-scan-options-returns-created-response.json", + "scenario": "Create Azure scan options returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/create-gcp-scan-options-returns-agentless-scan-options-enabled-successfully-response.json", + "scenario": "Create GCP scan options returns \"Agentless scan options enabled successfully.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/create-gcp-scan-options-returns-bad-request-response.json", + "scenario": "Create GCP scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/create-gcp-scan-options-returns-conflict-response.json", + "scenario": "Create GCP scan options returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/delete-aws-scan-options-returns-bad-request-response.json", + "scenario": "Delete AWS scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/delete-aws-scan-options-returns-not-found-response.json", + "scenario": "Delete AWS scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/delete-gcp-scan-options-returns-bad-request-response.json", + "scenario": "Delete GCP scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/delete-gcp-scan-options-returns-not-found-response.json", + "scenario": "Delete GCP scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-aws-on-demand-task-returns-bad-request-response.json", + "scenario": "Get AWS on demand task returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-aws-on-demand-task-returns-not-found-response.json", + "scenario": "Get AWS on demand task returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-aws-on-demand-task-returns-ok-response.json", + "scenario": "Get AWS on demand task returns \"OK.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-aws-scan-options-returns-bad-request-response.json", + "scenario": "Get AWS scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-aws-scan-options-returns-not-found-response.json", + "scenario": "Get AWS scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-aws-scan-options-returns-ok-response.json", + "scenario": "Get AWS scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-azure-scan-options-returns-not-found-response.json", + "scenario": "Get Azure scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-gcp-scan-options-returns-bad-request-response.json", + "scenario": "Get GCP scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-gcp-scan-options-returns-not-found-response.json", + "scenario": "Get GCP scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/get-gcp-scan-options-returns-ok-response.json", + "scenario": "Get GCP scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/list-aws-on-demand-tasks-returns-ok-response.json", + "scenario": "List AWS on demand tasks returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/list-aws-scan-options-returns-ok-response.json", + "scenario": "List AWS scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/list-azure-scan-options-returns-ok-response.json", + "scenario": "List Azure scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/list-gcp-scan-options-returns-ok-response.json", + "scenario": "List GCP scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/update-aws-scan-options-returns-bad-request-response-2.json", + "scenario": "Update AWS scan options returns \"Bad Request\" response 2", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/update-aws-scan-options-returns-no-content-response.json", + "scenario": "Update AWS scan options returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/update-aws-scan-options-returns-not-found-response.json", + "scenario": "Update AWS scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/update-gcp-scan-options-returns-bad-request-response.json", + "scenario": "Update GCP scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/update-gcp-scan-options-returns-not-found-response.json", + "scenario": "Update GCP scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "feature_file": "features/v2/agentless_scanning.feature", + "file": "v2/agentless-scanning/update-gcp-scan-options-returns-ok-response.json", + "scenario": "Update GCP scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Annotations", + "feature_file": "features/v2/annotations.feature", + "file": "v2/annotations/create-an-annotation-returns-ok-response.json", + "scenario": "Create an annotation returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Annotations", + "feature_file": "features/v2/annotations.feature", + "file": "v2/annotations/delete-an-annotation-returns-no-content-response.json", + "scenario": "Delete an annotation returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Annotations", + "feature_file": "features/v2/annotations.feature", + "file": "v2/annotations/get-annotations-for-a-page-returns-ok-response.json", + "scenario": "Get annotations for a page returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Annotations", + "feature_file": "features/v2/annotations.feature", + "file": "v2/annotations/list-annotations-returns-ok-response.json", + "scenario": "List annotations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Annotations", + "feature_file": "features/v2/annotations.feature", + "file": "v2/annotations/update-an-annotation-returns-ok-response.json", + "scenario": "Update an annotation returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/create-a-default-retention-filter-returns-bad-request-response.json", + "scenario": "Create a default retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/create-a-retention-filter-returns-bad-request-response.json", + "scenario": "Create a retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/create-a-retention-filter-returns-ok-response.json", + "scenario": "Create a retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/create-a-retention-filter-with-trace-rate-returns-ok-response.json", + "scenario": "Create a retention filter with trace rate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/delete-a-retention-filter-returns-not-found-response.json", + "scenario": "Delete a retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/delete-a-retention-filter-returns-ok-response.json", + "scenario": "Delete a retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/get-a-given-apm-retention-filter-returns-not-found-response.json", + "scenario": "Get a given APM retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/get-a-given-apm-retention-filter-returns-ok-response.json", + "scenario": "Get a given APM retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/list-all-apm-retention-filters-returns-ok-response.json", + "scenario": "List all APM retention filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/re-order-retention-filters-returns-ok-response.json", + "scenario": "Re-order retention filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/update-a-retention-filter-returns-bad-request-response.json", + "scenario": "Update a retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/update-a-retention-filter-returns-not-found-response.json", + "scenario": "Update a retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/update-a-retention-filter-returns-ok-response.json", + "scenario": "Update a retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "feature_file": "features/v2/apm_retention_filters.feature", + "file": "v2/apm-retention-filters/update-a-retention-filter-with-trace-rate-returns-ok-response.json", + "scenario": "Update a retention filter with trace rate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/create-app-returns-bad-request-response.json", + "scenario": "Create App returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/create-app-returns-created-response.json", + "scenario": "Create App returns \"Created\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/create-publish-request-returns-not-found-response.json", + "scenario": "Create Publish Request returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/delete-app-returns-not-found-response.json", + "scenario": "Delete App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/delete-app-returns-ok-response.json", + "scenario": "Delete App returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/delete-multiple-apps-returns-not-found-response.json", + "scenario": "Delete Multiple Apps returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/delete-multiple-apps-returns-ok-response.json", + "scenario": "Delete Multiple Apps returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/get-app-returns-not-found-response.json", + "scenario": "Get App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/get-app-returns-ok-response.json", + "scenario": "Get App returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/get-blueprint-returns-not-found-response.json", + "scenario": "Get Blueprint returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/get-blueprints-by-integration-id-returns-ok-response.json", + "scenario": "Get Blueprints by Integration ID returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/get-blueprints-by-slugs-returns-ok-response.json", + "scenario": "Get Blueprints by Slugs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/list-app-versions-returns-not-found-response.json", + "scenario": "List App Versions returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/list-app-versions-returns-ok-response.json", + "scenario": "List App Versions returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/list-apps-returns-ok-response.json", + "scenario": "List Apps returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/list-blueprints-returns-ok-response.json", + "scenario": "List Blueprints returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/list-tags-returns-ok-response.json", + "scenario": "List Tags returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/name-app-version-returns-no-content-response.json", + "scenario": "Name App Version returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/name-app-version-returns-not-found-response.json", + "scenario": "Name App Version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/publish-app-returns-created-response.json", + "scenario": "Publish App returns \"Created\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/publish-app-returns-not-found-response.json", + "scenario": "Publish App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/revert-app-returns-not-found-response.json", + "scenario": "Revert App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/unpublish-app-returns-not-found-response.json", + "scenario": "Unpublish App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/unpublish-app-returns-ok-response.json", + "scenario": "Unpublish App returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-favorite-status-returns-no-content-response.json", + "scenario": "Update App Favorite Status returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-favorite-status-returns-not-found-response.json", + "scenario": "Update App Favorite Status returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-protection-level-returns-not-found-response.json", + "scenario": "Update App Protection Level returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-protection-level-returns-ok-response.json", + "scenario": "Update App Protection Level returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-self-service-status-returns-no-content-response.json", + "scenario": "Update App Self-Service Status returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-self-service-status-returns-not-found-response.json", + "scenario": "Update App Self-Service Status returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-tags-returns-no-content-response.json", + "scenario": "Update App Tags returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-tags-returns-not-found-response.json", + "scenario": "Update App Tags returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-returns-bad-request-response.json", + "scenario": "Update App returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "feature_file": "features/v2/app_builder.feature", + "file": "v2/app-builder/update-app-returns-ok-response.json", + "scenario": "Update App returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/create-a-waf-policy-returns-created-response.json", + "scenario": "Create a WAF Policy returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/create-a-waf-exclusion-filter-returns-ok-response.json", + "scenario": "Create a WAF exclusion filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/create-a-legacy-waf-exclusion-filter-returns-bad-request-response.json", + "scenario": "Create a legacy WAF exclusion filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/delete-a-waf-exclusion-filter-returns-not-found-response.json", + "scenario": "Delete a WAF exclusion filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/delete-a-waf-exclusion-filter-returns-ok-response.json", + "scenario": "Delete a WAF exclusion filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/get-a-waf-policy-returns-ok-response.json", + "scenario": "Get a WAF Policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/get-a-waf-exclusion-filter-returns-ok-response.json", + "scenario": "Get a WAF exclusion filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/list-all-waf-custom-rules-returns-ok-response.json", + "scenario": "List all WAF custom rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/list-all-waf-exclusion-filters-returns-ok-response.json", + "scenario": "List all WAF exclusion filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/list-all-waf-policies-returns-ok-response.json", + "scenario": "List all WAF policies returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/update-a-waf-custom-rule-returns-bad-request-response.json", + "scenario": "Update a WAF Custom Rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/update-a-waf-custom-rule-returns-ok-response.json", + "scenario": "Update a WAF Custom Rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/update-a-waf-exclusion-filter-returns-bad-request-response.json", + "scenario": "Update a WAF exclusion filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/update-a-waf-exclusion-filter-returns-not-found-response.json", + "scenario": "Update a WAF exclusion filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/update-a-waf-exclusion-filter-returns-ok-response.json", + "scenario": "Update a WAF exclusion filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "feature_file": "features/v2/application_security.feature", + "file": "v2/application-security/update-a-legacy-waf-exclusion-filter-returns-bad-request-response.json", + "scenario": "Update a legacy WAF exclusion filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Audit", + "feature_file": "features/v2/audit.feature", + "file": "v2/audit/get-a-list-of-audit-logs-events-returns-ok-response.json", + "scenario": "Get a list of Audit Logs events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Audit", + "feature_file": "features/v2/audit.feature", + "file": "v2/audit/get-a-list-of-audit-logs-events-returns-ok-response-with-pagination.json", + "scenario": "Get a list of Audit Logs events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Audit", + "feature_file": "features/v2/audit.feature", + "file": "v2/audit/search-audit-logs-events-returns-ok-response.json", + "scenario": "Search Audit Logs events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Audit", + "feature_file": "features/v2/audit.feature", + "file": "v2/audit/search-audit-logs-events-returns-ok-response-with-pagination.json", + "scenario": "Search Audit Logs events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "feature_file": "features/v2/authn_mappings.feature", + "file": "v2/authn-mappings/create-an-authn-mapping-returns-ok-response.json", + "scenario": "Create an AuthN Mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "feature_file": "features/v2/authn_mappings.feature", + "file": "v2/authn-mappings/delete-an-authn-mapping-returns-ok-response.json", + "scenario": "Delete an AuthN Mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "feature_file": "features/v2/authn_mappings.feature", + "file": "v2/authn-mappings/edit-an-authn-mapping-returns-ok-response.json", + "scenario": "Edit an AuthN Mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "feature_file": "features/v2/authn_mappings.feature", + "file": "v2/authn-mappings/get-an-authn-mapping-by-uuid-returns-ok-response.json", + "scenario": "Get an AuthN Mapping by UUID returns \"OK\" response", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "feature_file": "features/v2/authn_mappings.feature", + "file": "v2/authn-mappings/list-all-authn-mappings-returns-ok-response.json", + "scenario": "List all AuthN Mappings returns \"OK\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/create-an-aws-account-returns-aws-account-object-response.json", + "scenario": "Create an AWS account returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/create-an-aws-integration-returns-aws-account-object-response.json", + "scenario": "Create an AWS integration returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/create-an-aws-integration-returns-bad-request-response.json", + "scenario": "Create an AWS integration returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/create-an-aws-integration-returns-conflict-response.json", + "scenario": "Create an AWS integration returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/delete-an-aws-integration-returns-bad-request-response.json", + "scenario": "Delete an AWS integration returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/delete-an-aws-integration-returns-no-content-response.json", + "scenario": "Delete an AWS integration returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/delete-an-aws-integration-returns-not-found-response.json", + "scenario": "Delete an AWS integration returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/generate-a-new-external-id-returns-aws-external-id-object-response.json", + "scenario": "Generate a new external ID returns \"AWS External ID object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/generate-new-external-id-returns-aws-external-id-object-response.json", + "scenario": "Generate new external ID returns \"AWS External ID object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/get-aws-integration-standard-iam-permissions-returns-aws-iam-permissions-object-response.json", + "scenario": "Get AWS integration standard IAM permissions returns \"AWS IAM Permissions object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/get-an-aws-integration-by-config-id-returns-aws-account-object-response.json", + "scenario": "Get an AWS integration by config ID returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/get-an-aws-integration-by-config-id-returns-bad-request-response.json", + "scenario": "Get an AWS integration by config ID returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/get-an-aws-integration-by-config-id-returns-not-found-response.json", + "scenario": "Get an AWS integration by config ID returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/get-resource-collection-iam-permissions-returns-aws-iam-permissions-object-response.json", + "scenario": "Get resource collection IAM permissions returns \"AWS IAM Permissions object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/list-all-aws-integrations-returns-aws-accounts-list-object-response.json", + "scenario": "List all AWS integrations returns \"AWS Accounts List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/list-available-namespaces-returns-aws-namespaces-list-object-response.json", + "scenario": "List available namespaces returns \"AWS Namespaces List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/list-namespaces-returns-aws-namespaces-list-object-response.json", + "scenario": "List namespaces returns \"AWS Namespaces List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/update-an-aws-integration-returns-aws-account-object-response.json", + "scenario": "Update an AWS integration returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/update-an-aws-integration-returns-bad-request-response.json", + "scenario": "Update an AWS integration returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "feature_file": "features/v2/aws_integration.feature", + "file": "v2/aws-integration/update-an-aws-integration-returns-not-found-response.json", + "scenario": "Update an AWS integration returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Logs Integration", + "feature_file": "features/v2/aws_logs_integration.feature", + "file": "v2/aws-logs-integration/get-list-of-aws-log-ready-services-returns-aws-logs-services-list-object-response.json", + "scenario": "Get list of AWS log ready services returns \"AWS Logs Services List object\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/archive-case-returns-bad-request-response.json", + "scenario": "Archive case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/archive-case-returns-not-found-response.json", + "scenario": "Archive case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/archive-case-returns-ok-response.json", + "scenario": "Archive case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/assign-case-returns-bad-request-response.json", + "scenario": "Assign case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/assign-case-returns-not-found-response.json", + "scenario": "Assign case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/assign-case-returns-ok-response.json", + "scenario": "Assign case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/comment-case-returns-bad-request-response.json", + "scenario": "Comment case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/comment-case-returns-not-found-response.json", + "scenario": "Comment case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/comment-case-returns-ok-response.json", + "scenario": "Comment case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/create-a-case-returns-bad-request-response.json", + "scenario": "Create a case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/create-a-case-returns-created-response.json", + "scenario": "Create a case returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/create-a-case-returns-not-found-response.json", + "scenario": "Create a case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/delete-case-comment-returns-not-found-response.json", + "scenario": "Delete case comment returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/delete-custom-attribute-from-case-returns-not-found-response.json", + "scenario": "Delete custom attribute from case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/get-the-details-of-a-case-returns-not-found-response.json", + "scenario": "Get the details of a case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/get-the-details-of-a-case-returns-ok-response.json", + "scenario": "Get the details of a case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/search-cases-returns-ok-response-with-pagination.json", + "scenario": "Search cases returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/unarchive-case-returns-bad-request-response.json", + "scenario": "Unarchive case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/unarchive-case-returns-not-found-response.json", + "scenario": "Unarchive case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/unarchive-case-returns-ok-response.json", + "scenario": "Unarchive case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/unassign-case-returns-bad-request-response.json", + "scenario": "Unassign case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/unassign-case-returns-not-found-response.json", + "scenario": "Unassign case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/unassign-case-returns-ok-response.json", + "scenario": "Unassign case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-a-project-returns-bad-request-response.json", + "scenario": "Update a project returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-a-project-returns-not-found-response.json", + "scenario": "Update a project returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-a-project-returns-ok-response.json", + "scenario": "Update a project returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-attributes-returns-not-found-response.json", + "scenario": "Update case attributes returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-attributes-returns-ok-response.json", + "scenario": "Update case attributes returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-custom-attribute-returns-not-found-response.json", + "scenario": "Update case custom attribute returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-description-returns-not-found-response.json", + "scenario": "Update case description returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-description-returns-ok-response.json", + "scenario": "Update case description returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-priority-returns-bad-request-response.json", + "scenario": "Update case priority returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-priority-returns-not-found-response.json", + "scenario": "Update case priority returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-priority-returns-ok-response.json", + "scenario": "Update case priority returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-status-returns-bad-request-response.json", + "scenario": "Update case status returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-status-returns-not-found-response.json", + "scenario": "Update case status returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-status-returns-ok-response.json", + "scenario": "Update case status returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-title-returns-bad-request-response.json", + "scenario": "Update case title returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-title-returns-not-found-response.json", + "scenario": "Update case title returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "feature_file": "features/v2/case_management.feature", + "file": "v2/case-management/update-case-title-returns-ok-response.json", + "scenario": "Update case title returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "feature_file": "features/v2/case_management_attribute.feature", + "file": "v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-bad-request-response.json", + "scenario": "Create custom attribute config for a case type returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "feature_file": "features/v2/case_management_attribute.feature", + "file": "v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-created-response.json", + "scenario": "Create custom attribute config for a case type returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "feature_file": "features/v2/case_management_attribute.feature", + "file": "v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-not-found-response.json", + "scenario": "Create custom attribute config for a case type returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "feature_file": "features/v2/case_management_attribute.feature", + "file": "v2/case-management-attribute/delete-custom-attributes-config-returns-bad-request-response.json", + "scenario": "Delete custom attributes config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "feature_file": "features/v2/case_management_attribute.feature", + "file": "v2/case-management-attribute/get-all-custom-attributes-config-of-case-type-returns-ok-response.json", + "scenario": "Get all custom attributes config of case type returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "feature_file": "features/v2/case_management_attribute.feature", + "file": "v2/case-management-attribute/get-all-custom-attributes-returns-ok-response.json", + "scenario": "Get all custom attributes returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management Type", + "feature_file": "features/v2/case_management_type.feature", + "file": "v2/case-management-type/create-a-case-type-returns-bad-request-response.json", + "scenario": "Create a case type returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management Type", + "feature_file": "features/v2/case_management_type.feature", + "file": "v2/case-management-type/create-a-case-type-returns-created-response.json", + "scenario": "Create a case type returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Case Management Type", + "feature_file": "features/v2/case_management_type.feature", + "file": "v2/case-management-type/delete-a-case-type-returns-notcontent-response.json", + "scenario": "Delete a case type returns \"NotContent\" response", + "version": "v2" + }, + { + "feature": "Case Management Type", + "feature_file": "features/v2/case_management_type.feature", + "file": "v2/case-management-type/get-all-case-types-returns-ok-response.json", + "scenario": "Get all case types returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/aggregate-pipelines-events-returns-ok-response.json", + "scenario": "Aggregate pipelines events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/get-a-list-of-pipelines-events-returns-ok-response.json", + "scenario": "Get a list of pipelines events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/get-a-list-of-pipelines-events-returns-ok-response-with-pagination.json", + "scenario": "Get a list of pipelines events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/search-pipelines-events-returns-ok-response.json", + "scenario": "Search pipelines events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/search-pipelines-events-returns-ok-response-with-pagination.json", + "scenario": "Search pipelines events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/send-pipeline-event-returns-request-accepted-for-processing-response.json", + "scenario": "Send pipeline event returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/send-pipeline-event-with-custom-provider-returns-request-accepted-for-processing-response.json", + "scenario": "Send pipeline event with custom provider returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/send-running-job-event-returns-request-accepted-for-processing-response.json", + "scenario": "Send running job event returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/send-running-pipeline-event-returns-request-accepted-for-processing-response.json", + "scenario": "Send running pipeline event returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "feature_file": "features/v2/ci_visibility_pipelines.feature", + "file": "v2/ci-visibility-pipelines/send-several-pipeline-events-returns-request-accepted-for-processing-response.json", + "scenario": "Send several pipeline events returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "feature_file": "features/v2/ci_visibility_tests.feature", + "file": "v2/ci-visibility-tests/aggregate-tests-events-returns-ok-response.json", + "scenario": "Aggregate tests events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "feature_file": "features/v2/ci_visibility_tests.feature", + "file": "v2/ci-visibility-tests/get-a-list-of-tests-events-returns-ok-response.json", + "scenario": "Get a list of tests events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "feature_file": "features/v2/ci_visibility_tests.feature", + "file": "v2/ci-visibility-tests/get-a-list-of-tests-events-returns-ok-response-with-pagination.json", + "scenario": "Get a list of tests events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "feature_file": "features/v2/ci_visibility_tests.feature", + "file": "v2/ci-visibility-tests/search-tests-events-returns-ok-response.json", + "scenario": "Search tests events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "feature_file": "features/v2/ci_visibility_tests.feature", + "file": "v2/ci-visibility-tests/search-tests-events-returns-ok-response-with-pagination.json", + "scenario": "Search tests events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/create-cloud-cost-management-aws-cur-config-returns-ok-response.json", + "scenario": "Create Cloud Cost Management AWS CUR config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/create-cloud-cost-management-azure-configs-returns-bad-request-response.json", + "scenario": "Create Cloud Cost Management Azure configs returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/create-cloud-cost-management-azure-configs-returns-ok-response.json", + "scenario": "Create Cloud Cost Management Azure configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/create-google-cloud-usage-cost-config-returns-bad-request-response.json", + "scenario": "Create Google Cloud Usage Cost config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/create-google-cloud-usage-cost-config-returns-ok-response.json", + "scenario": "Create Google Cloud Usage Cost config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/create-custom-allocation-rule-returns-ok-response.json", + "scenario": "Create custom allocation rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/create-tag-pipeline-ruleset-returns-ok-response.json", + "scenario": "Create tag pipeline ruleset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/create-tag-pipeline-ruleset-with-if-tag-exists-returns-ok-response.json", + "scenario": "Create tag pipeline ruleset with if_tag_exists returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-cloud-cost-management-aws-cur-config-returns-no-content-response.json", + "scenario": "Delete Cloud Cost Management AWS CUR config returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-cloud-cost-management-aws-cur-config-returns-not-found-response.json", + "scenario": "Delete Cloud Cost Management AWS CUR config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-cloud-cost-management-azure-config-returns-no-content-response.json", + "scenario": "Delete Cloud Cost Management Azure config returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-cloud-cost-management-azure-config-returns-not-found-response.json", + "scenario": "Delete Cloud Cost Management Azure config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-custom-costs-file-returns-no-content-response.json", + "scenario": "Delete Custom Costs File returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-custom-costs-file-returns-not-found-response.json", + "scenario": "Delete Custom Costs file returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-google-cloud-usage-cost-config-returns-no-content-response.json", + "scenario": "Delete Google Cloud Usage Cost config returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-google-cloud-usage-cost-config-returns-not-found-response.json", + "scenario": "Delete Google Cloud Usage Cost config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-a-budget-returns-bad-request-response.json", + "scenario": "Delete a budget returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-custom-allocation-rule-returns-no-content-response.json", + "scenario": "Delete custom allocation rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/delete-tag-pipeline-ruleset-returns-no-content-response.json", + "scenario": "Delete tag pipeline ruleset returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/get-custom-costs-file-returns-ok-response.json", + "scenario": "Get Custom Costs File returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/get-custom-costs-file-returns-not-found-response.json", + "scenario": "Get Custom Costs file returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/get-google-cloud-usage-cost-config-returns-ok-response.json", + "scenario": "Get Google Cloud Usage Cost config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/get-a-budget-returns-not-found-response.json", + "scenario": "Get a budget returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/get-a-tag-pipeline-ruleset-returns-ok-response.json", + "scenario": "Get a tag pipeline ruleset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/get-cost-aws-cur-config-returns-ok-response.json", + "scenario": "Get cost AWS CUR config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/get-cost-azure-uc-config-returns-ok-response.json", + "scenario": "Get cost Azure UC config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/get-custom-allocation-rule-returns-ok-response.json", + "scenario": "Get custom allocation rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-cloud-cost-management-aws-cur-configs-returns-ok-response.json", + "scenario": "List Cloud Cost Management AWS CUR configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-cloud-cost-management-azure-configs-returns-ok-response.json", + "scenario": "List Cloud Cost Management Azure configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-custom-costs-files-returns-ok-response.json", + "scenario": "List Custom Costs Files returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-custom-costs-files-returns-bad-request-response.json", + "scenario": "List Custom Costs files returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-google-cloud-usage-cost-configs-returns-ok-response.json", + "scenario": "List Google Cloud Usage Cost configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-budgets-returns-ok-response.json", + "scenario": "List budgets returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-custom-allocation-rules-returns-ok-response.json", + "scenario": "List custom allocation rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/list-tag-pipeline-rulesets-returns-ok-response.json", + "scenario": "List tag pipeline rulesets returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/update-cloud-cost-management-aws-cur-config-returns-not-found-response.json", + "scenario": "Update Cloud Cost Management AWS CUR config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/update-cloud-cost-management-aws-cur-config-returns-ok-response.json", + "scenario": "Update Cloud Cost Management AWS CUR config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/update-cloud-cost-management-azure-config-returns-not-found-response.json", + "scenario": "Update Cloud Cost Management Azure config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/update-cloud-cost-management-azure-config-returns-ok-response.json", + "scenario": "Update Cloud Cost Management Azure config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/update-google-cloud-usage-cost-config-returns-not-found-response.json", + "scenario": "Update Google Cloud Usage Cost config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/update-google-cloud-usage-cost-config-returns-ok-response.json", + "scenario": "Update Google Cloud Usage Cost config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/update-custom-allocation-rule-returns-ok-response.json", + "scenario": "Update custom allocation rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/update-tag-pipeline-ruleset-returns-ok-response.json", + "scenario": "Update tag pipeline ruleset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/update-tag-pipeline-ruleset-with-if-tag-exists-returns-ok-response.json", + "scenario": "Update tag pipeline ruleset with if_tag_exists returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/upload-custom-costs-file-returns-accepted-response.json", + "scenario": "Upload Custom Costs File returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/upload-custom-costs-file-returns-bad-request-response.json", + "scenario": "Upload Custom Costs file returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "feature_file": "features/v2/cloud_cost_management.feature", + "file": "v2/cloud-cost-management/validate-query-returns-ok-response.json", + "scenario": "Validate query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Network Monitoring", + "feature_file": "features/v2/cloud_network_monitoring.feature", + "file": "v2/cloud-network-monitoring/get-aggregated-connections-returns-ok-response.json", + "scenario": "Get aggregated connections returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Network Monitoring", + "feature_file": "features/v2/cloud_network_monitoring.feature", + "file": "v2/cloud-network-monitoring/get-all-aggregated-dns-traffic-returns-bad-request-response.json", + "scenario": "Get all aggregated DNS traffic returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Network Monitoring", + "feature_file": "features/v2/cloud_network_monitoring.feature", + "file": "v2/cloud-network-monitoring/get-all-aggregated-dns-traffic-returns-ok-response.json", + "scenario": "Get all aggregated DNS traffic returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Network Monitoring", + "feature_file": "features/v2/cloud_network_monitoring.feature", + "file": "v2/cloud-network-monitoring/get-all-aggregated-connections-returns-bad-request-response.json", + "scenario": "Get all aggregated connections returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "feature_file": "features/v2/cloudflare_integration.feature", + "file": "v2/cloudflare-integration/add-cloudflare-account-returns-bad-request-response-due-to-missing-email.json", + "scenario": "Add Cloudflare account returns \"Bad Request\" response due to missing email", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "feature_file": "features/v2/cloudflare_integration.feature", + "file": "v2/cloudflare-integration/add-cloudflare-account-returns-bad-request-response-using-invalid-auth-key.json", + "scenario": "Add Cloudflare account returns \"Bad Request\" response using invalid auth key", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "feature_file": "features/v2/cloudflare_integration.feature", + "file": "v2/cloudflare-integration/add-cloudflare-account-returns-created-response.json", + "scenario": "Add Cloudflare account returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "feature_file": "features/v2/cloudflare_integration.feature", + "file": "v2/cloudflare-integration/get-cloudflare-account-returns-ok-response.json", + "scenario": "Get Cloudflare account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "feature_file": "features/v2/cloudflare_integration.feature", + "file": "v2/cloudflare-integration/list-cloudflare-accounts-returns-ok-response.json", + "scenario": "List Cloudflare accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "feature_file": "features/v2/cloudflare_integration.feature", + "file": "v2/cloudflare-integration/update-cloudflare-account-returns-bad-request-response-due-to-invalid-api-key.json", + "scenario": "Update Cloudflare account returns \"Bad Request\" response due to invalid api key", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "feature_file": "features/v2/cloudflare_integration.feature", + "file": "v2/cloudflare-integration/update-cloudflare-account-returns-bad-request-response-due-to-missing-required-email.json", + "scenario": "Update Cloudflare account returns \"Bad Request\" response due to missing required email", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "feature_file": "features/v2/cloudflare_integration.feature", + "file": "v2/cloudflare-integration/update-cloudflare-account-returns-ok-response.json", + "scenario": "Update Cloudflare account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "feature_file": "features/v2/confluent_cloud.feature", + "file": "v2/confluent-cloud/add-resource-to-confluent-account-returns-ok-response.json", + "scenario": "Add resource to Confluent account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "feature_file": "features/v2/confluent_cloud.feature", + "file": "v2/confluent-cloud/delete-confluent-account-returns-ok-response.json", + "scenario": "Delete Confluent account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "feature_file": "features/v2/confluent_cloud.feature", + "file": "v2/confluent-cloud/get-confluent-account-returns-ok-response.json", + "scenario": "Get Confluent account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "feature_file": "features/v2/confluent_cloud.feature", + "file": "v2/confluent-cloud/list-confluent-accounts-returns-ok-response.json", + "scenario": "List Confluent accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "feature_file": "features/v2/confluent_cloud.feature", + "file": "v2/confluent-cloud/update-confluent-account-returns-ok-response.json", + "scenario": "Update Confluent account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Container Images", + "feature_file": "features/v2/container_images.feature", + "file": "v2/container-images/get-all-container-image-groups-returns-ok-response.json", + "scenario": "Get all Container Image groups returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Container Images", + "feature_file": "features/v2/container_images.feature", + "file": "v2/container-images/get-all-container-images-returns-ok-response.json", + "scenario": "Get all Container Images returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Container Images", + "feature_file": "features/v2/container_images.feature", + "file": "v2/container-images/get-all-container-images-returns-ok-response-with-pagination.json", + "scenario": "Get all Container Images returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Containers", + "feature_file": "features/v2/containers.feature", + "file": "v2/containers/get-all-container-groups-returns-ok-response.json", + "scenario": "Get All Container groups returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Containers", + "feature_file": "features/v2/containers.feature", + "file": "v2/containers/get-all-containers-returns-ok-response.json", + "scenario": "Get All Containers returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Containers", + "feature_file": "features/v2/containers.feature", + "file": "v2/containers/get-all-containers-returns-ok-response-with-pagination.json", + "scenario": "Get All Containers returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "CSM Agents", + "feature_file": "features/v2/csm_agents.feature", + "file": "v2/csm-agents/get-all-csm-agents-returns-ok-response.json", + "scenario": "Get all CSM Agents returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Agents", + "feature_file": "features/v2/csm_agents.feature", + "file": "v2/csm-agents/get-all-csm-serverless-agents-returns-ok-response.json", + "scenario": "Get all CSM Serverless Agents returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Coverage Analysis", + "feature_file": "features/v2/csm_coverage_analysis.feature", + "file": "v2/csm-coverage-analysis/get-the-csm-cloud-accounts-coverage-analysis-returns-ok-response.json", + "scenario": "Get the CSM Cloud Accounts Coverage Analysis returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Coverage Analysis", + "feature_file": "features/v2/csm_coverage_analysis.feature", + "file": "v2/csm-coverage-analysis/get-the-csm-hosts-and-containers-coverage-analysis-returns-ok-response.json", + "scenario": "Get the CSM Hosts and Containers Coverage Analysis returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Coverage Analysis", + "feature_file": "features/v2/csm_coverage_analysis.feature", + "file": "v2/csm-coverage-analysis/get-the-csm-serverless-coverage-analysis-returns-ok-response.json", + "scenario": "Get the CSM Serverless Coverage Analysis returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/create-a-workload-protection-agent-rule-us1-fed-returns-bad-request-response.json", + "scenario": "Create a Workload Protection agent rule (US1-FED) returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/create-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json", + "scenario": "Create a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/create-a-workload-protection-agent-rule-returns-bad-request-response.json", + "scenario": "Create a Workload Protection agent rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/create-a-workload-protection-agent-rule-returns-ok-response.json", + "scenario": "Create a Workload Protection agent rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/create-a-workload-protection-agent-rule-with-set-action-returns-ok-response.json", + "scenario": "Create a Workload Protection agent rule with set action returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/create-a-workload-protection-agent-rule-with-set-action-with-expression-returns-ok-response.json", + "scenario": "Create a Workload Protection agent rule with set action with expression returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/create-a-workload-protection-policy-returns-bad-request-response.json", + "scenario": "Create a Workload Protection policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/create-a-workload-protection-policy-returns-ok-response.json", + "scenario": "Create a Workload Protection policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/delete-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json", + "scenario": "Delete a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/delete-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json", + "scenario": "Delete a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/delete-a-workload-protection-agent-rule-returns-not-found-response.json", + "scenario": "Delete a Workload Protection agent rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/delete-a-workload-protection-agent-rule-returns-ok-response.json", + "scenario": "Delete a Workload Protection agent rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/delete-a-workload-protection-policy-returns-not-found-response.json", + "scenario": "Delete a Workload Protection policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/delete-a-workload-protection-policy-returns-ok-response.json", + "scenario": "Delete a Workload Protection policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/download-the-workload-protection-policy-us1-fed-returns-ok-response.json", + "scenario": "Download the Workload Protection policy (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/download-the-workload-protection-policy-returns-ok-response.json", + "scenario": "Download the Workload Protection policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/get-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json", + "scenario": "Get a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/get-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json", + "scenario": "Get a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/get-a-workload-protection-agent-rule-returns-not-found-response.json", + "scenario": "Get a Workload Protection agent rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/get-a-workload-protection-agent-rule-returns-ok-response.json", + "scenario": "Get a Workload Protection agent rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/get-a-workload-protection-policy-returns-not-found-response.json", + "scenario": "Get a Workload Protection policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/get-a-workload-protection-policy-returns-ok-response.json", + "scenario": "Get a Workload Protection policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/get-all-workload-protection-agent-rules-us1-fed-returns-ok-response.json", + "scenario": "Get all Workload Protection agent rules (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/get-all-workload-protection-agent-rules-returns-ok-response.json", + "scenario": "Get all Workload Protection agent rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/get-all-workload-protection-policies-returns-ok-response.json", + "scenario": "Get all Workload Protection policies returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-bad-request-response.json", + "scenario": "Update a Workload Protection agent rule (US1-FED) returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json", + "scenario": "Update a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json", + "scenario": "Update a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/update-a-workload-protection-agent-rule-returns-bad-request-response.json", + "scenario": "Update a Workload Protection agent rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/update-a-workload-protection-agent-rule-returns-not-found-response.json", + "scenario": "Update a Workload Protection agent rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/update-a-workload-protection-policy-returns-bad-request-response.json", + "scenario": "Update a Workload Protection policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/update-a-workload-protection-policy-returns-not-found-response.json", + "scenario": "Update a Workload Protection policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "feature_file": "features/v2/csm_threats.feature", + "file": "v2/csm-threats/update-a-workload-protection-policy-returns-ok-response.json", + "scenario": "Update a Workload Protection policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v2/dashboard_lists.feature", + "file": "v2/dashboard-lists/add-custom-screenboard-dashboard-to-an-existing-dashboard-list-returns-ok-response.json", + "scenario": "Add custom screenboard dashboard to an existing dashboard list returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v2/dashboard_lists.feature", + "file": "v2/dashboard-lists/add-custom-timeboard-dashboard-to-an-existing-dashboard-list-returns-ok-response.json", + "scenario": "Add custom timeboard dashboard to an existing dashboard list returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v2/dashboard_lists.feature", + "file": "v2/dashboard-lists/delete-custom-screenboard-dashboard-from-an-existing-dashboard-list-returns-ok-response.json", + "scenario": "Delete custom screenboard dashboard from an existing dashboard list returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v2/dashboard_lists.feature", + "file": "v2/dashboard-lists/delete-custom-timeboard-dashboard-from-an-existing-dashboard-list-returns-ok-response.json", + "scenario": "Delete custom timeboard dashboard from an existing dashboard list returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v2/dashboard_lists.feature", + "file": "v2/dashboard-lists/get-items-of-a-dashboard-list-returns-ok-response.json", + "scenario": "Get items of a Dashboard List returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "feature_file": "features/v2/dashboard_lists.feature", + "file": "v2/dashboard-lists/update-items-of-a-dashboard-list-returns-ok-response.json", + "scenario": "Update items of a dashboard list returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "feature_file": "features/v2/dashboards.feature", + "file": "v2/dashboards/get-usage-stats-for-a-dashboard-returns-not-found-response.json", + "scenario": "Get usage stats for a dashboard returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "feature_file": "features/v2/dashboards.feature", + "file": "v2/dashboards/get-usage-stats-for-a-dashboard-returns-ok-response.json", + "scenario": "Get usage stats for a dashboard returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "feature_file": "features/v2/dashboards.feature", + "file": "v2/dashboards/get-usage-stats-for-all-dashboards-returns-bad-request-response.json", + "scenario": "Get usage stats for all dashboards returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "feature_file": "features/v2/dashboards.feature", + "file": "v2/dashboards/get-usage-stats-for-all-dashboards-returns-ok-response.json", + "scenario": "Get usage stats for all dashboards returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "feature_file": "features/v2/dashboards.feature", + "file": "v2/dashboards/get-usage-stats-for-all-dashboards-returns-ok-response-with-pagination.json", + "scenario": "Get usage stats for all dashboards returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Dashboards", + "feature_file": "features/v2/dashboards.feature", + "file": "v2/dashboards/get-usage-stats-for-all-dashboards-with-both-filters-returns-ok-response.json", + "scenario": "Get usage stats for all dashboards with both filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "feature_file": "features/v2/dashboards.feature", + "file": "v2/dashboards/get-usage-stats-for-all-dashboards-with-edited-before-filter-returns-ok-response.json", + "scenario": "Get usage stats for all dashboards with edited_before filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "feature_file": "features/v2/dashboards.feature", + "file": "v2/dashboards/get-usage-stats-for-all-dashboards-with-viewed-before-filter-returns-ok-response.json", + "scenario": "Get usage stats for all dashboards with viewed_before filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "feature_file": "features/v2/data_deletion.feature", + "file": "v2/data-deletion/cancels-a-data-deletion-request-returns-bad-request-response.json", + "scenario": "Cancels a data deletion request returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "feature_file": "features/v2/data_deletion.feature", + "file": "v2/data-deletion/cancels-a-data-deletion-request-returns-ok-response.json", + "scenario": "Cancels a data deletion request returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "feature_file": "features/v2/data_deletion.feature", + "file": "v2/data-deletion/cancels-a-data-deletion-request-returns-precondition-failed-error-response.json", + "scenario": "Cancels a data deletion request returns \"Precondition failed error\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "feature_file": "features/v2/data_deletion.feature", + "file": "v2/data-deletion/creates-a-data-deletion-request-returns-ok-response.json", + "scenario": "Creates a data deletion request returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "feature_file": "features/v2/data_deletion.feature", + "file": "v2/data-deletion/creates-a-data-deletion-request-returns-precondition-failed-error-response.json", + "scenario": "Creates a data deletion request returns \"Precondition failed error\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "feature_file": "features/v2/data_deletion.feature", + "file": "v2/data-deletion/gets-a-list-of-data-deletion-requests-returns-ok-response.json", + "scenario": "Gets a list of data deletion requests returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/create-a-dataset-returns-bad-request-response.json", + "scenario": "Create a dataset returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/create-a-dataset-returns-conflict-response.json", + "scenario": "Create a dataset returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/create-a-dataset-returns-ok-response.json", + "scenario": "Create a dataset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/delete-a-dataset-returns-bad-request-response.json", + "scenario": "Delete a dataset returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/delete-a-dataset-returns-no-content-response.json", + "scenario": "Delete a dataset returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/delete-a-dataset-returns-not-found-response.json", + "scenario": "Delete a dataset returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/edit-a-dataset-returns-bad-request-response.json", + "scenario": "Edit a dataset returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/edit-a-dataset-returns-ok-response.json", + "scenario": "Edit a dataset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/get-a-single-dataset-by-id-returns-bad-request-response.json", + "scenario": "Get a single dataset by ID returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/get-a-single-dataset-by-id-returns-ok-response.json", + "scenario": "Get a single dataset by ID returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "feature_file": "features/v2/datasets.feature", + "file": "v2/datasets/get-all-datasets-returns-ok-response.json", + "scenario": "Get all datasets returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/create-deployment-gate-returns-bad-request-response.json", + "scenario": "Create deployment gate returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/create-deployment-gate-returns-ok-response.json", + "scenario": "Create deployment gate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/create-deployment-rule-returns-bad-request-response.json", + "scenario": "Create deployment rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/create-deployment-rule-returns-ok-response.json", + "scenario": "Create deployment rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/delete-deployment-gate-returns-bad-request-response.json", + "scenario": "Delete deployment gate returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/delete-deployment-gate-returns-deployment-gate-not-found-response.json", + "scenario": "Delete deployment gate returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/delete-deployment-gate-returns-no-content-response.json", + "scenario": "Delete deployment gate returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/delete-deployment-rule-returns-bad-request-response.json", + "scenario": "Delete deployment rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/delete-deployment-rule-returns-deployment-gate-not-found-response.json", + "scenario": "Delete deployment rule returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/delete-deployment-rule-returns-no-content-response.json", + "scenario": "Delete deployment rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-a-deployment-gates-evaluation-result-returns-deployment-gate-not-found-response.json", + "scenario": "Get a deployment gates evaluation result returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-a-deployment-gates-evaluation-result-returns-ok-response.json", + "scenario": "Get a deployment gates evaluation result returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-deployment-gate-returns-bad-request-response.json", + "scenario": "Get deployment gate returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-deployment-gate-returns-deployment-gate-not-found-response.json", + "scenario": "Get deployment gate returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-deployment-gate-returns-ok-response.json", + "scenario": "Get deployment gate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-deployment-rule-returns-bad-request-response.json", + "scenario": "Get deployment rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-deployment-rule-returns-deployment-rule-not-found-response.json", + "scenario": "Get deployment rule returns \"Deployment rule not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-deployment-rule-returns-ok-response.json", + "scenario": "Get deployment rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-rules-for-a-deployment-gate-returns-bad-request-response.json", + "scenario": "Get rules for a deployment gate returns \"Bad request.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/get-rules-for-a-deployment-gate-returns-ok-response.json", + "scenario": "Get rules for a deployment gate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-accepted-response.json", + "scenario": "Trigger a deployment gates evaluation returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-bad-request-response.json", + "scenario": "Trigger a deployment gates evaluation returns \"Bad request.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-deployment-gate-not-found-response.json", + "scenario": "Trigger a deployment gates evaluation returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/update-deployment-gate-returns-bad-request-response.json", + "scenario": "Update deployment gate returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/update-deployment-gate-returns-deployment-gate-not-found-response.json", + "scenario": "Update deployment gate returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/update-deployment-gate-returns-ok-response.json", + "scenario": "Update deployment gate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/update-deployment-rule-returns-bad-request-response.json", + "scenario": "Update deployment rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/update-deployment-rule-returns-deployment-rule-not-found-response.json", + "scenario": "Update deployment rule returns \"Deployment rule not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "feature_file": "features/v2/deployment_gates.feature", + "file": "v2/deployment-gates/update-deployment-rule-returns-ok-response.json", + "scenario": "Update deployment rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Domain Allowlist", + "feature_file": "features/v2/domain_allowlist.feature", + "file": "v2/domain-allowlist/get-domain-allowlist-returns-ok-response.json", + "scenario": "Get Domain Allowlist returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Domain Allowlist", + "feature_file": "features/v2/domain_allowlist.feature", + "file": "v2/domain-allowlist/sets-domain-allowlist-returns-ok-response.json", + "scenario": "Sets Domain Allowlist returns \"OK\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "feature_file": "features/v2/dora_metrics.feature", + "file": "v2/dora-metrics/get-a-list-of-deployment-events-returns-bad-request-response.json", + "scenario": "Get a list of deployment events returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "feature_file": "features/v2/dora_metrics.feature", + "file": "v2/dora-metrics/get-a-list-of-deployment-events-returns-deployments-with-date-time-timestamps.json", + "scenario": "Get a list of deployment events returns deployments with date-time timestamps", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "feature_file": "features/v2/dora_metrics.feature", + "file": "v2/dora-metrics/get-a-list-of-failure-events-returns-bad-request-response.json", + "scenario": "Get a list of failure events returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "feature_file": "features/v2/dora_metrics.feature", + "file": "v2/dora-metrics/send-a-deployment-event-returns-ok-response.json", + "scenario": "Send a deployment event returns \"OK\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "feature_file": "features/v2/dora_metrics.feature", + "file": "v2/dora-metrics/send-a-failure-event-returns-ok-response.json", + "scenario": "Send a failure event returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/cancel-a-downtime-returns-downtime-not-found-response.json", + "scenario": "Cancel a downtime returns \"Downtime not found\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/cancel-a-downtime-returns-ok-response.json", + "scenario": "Cancel a downtime returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/get-a-downtime-returns-bad-request-response.json", + "scenario": "Get a downtime returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/get-a-downtime-returns-not-found-response.json", + "scenario": "Get a downtime returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/get-a-downtime-returns-ok-response.json", + "scenario": "Get a downtime returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/get-active-downtimes-for-a-monitor-returns-ok-response.json", + "scenario": "Get active downtimes for a monitor returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/get-all-downtimes-for-a-monitor-returns-monitor-not-found-error-response.json", + "scenario": "Get all downtimes for a monitor returns \"Monitor Not Found error\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/get-all-downtimes-returns-ok-response.json", + "scenario": "Get all downtimes returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/get-all-downtimes-returns-ok-response-with-pagination.json", + "scenario": "Get all downtimes returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/schedule-a-downtime-returns-bad-request-response.json", + "scenario": "Schedule a downtime returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/schedule-a-downtime-returns-ok-response.json", + "scenario": "Schedule a downtime returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/update-a-downtime-returns-bad-request-response.json", + "scenario": "Update a downtime returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/update-a-downtime-returns-downtime-not-found-response.json", + "scenario": "Update a downtime returns \"Downtime not found\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "feature_file": "features/v2/downtimes.feature", + "file": "v2/downtimes/update-a-downtime-returns-ok-response.json", + "scenario": "Update a downtime returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-bad-request-response.json", + "scenario": "Get the details of an error tracking issue returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-not-found-response.json", + "scenario": "Get the details of an error tracking issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-ok-response.json", + "scenario": "Get the details of an error tracking issue returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/remove-the-assignee-of-an-issue-returns-no-content-response.json", + "scenario": "Remove the assignee of an issue returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/remove-the-assignee-of-an-issue-returns-not-found-response.json", + "scenario": "Remove the assignee of an issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/search-error-tracking-issues-returns-bad-request-response.json", + "scenario": "Search error tracking issues returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/search-error-tracking-issues-returns-ok-response.json", + "scenario": "Search error tracking issues returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/update-the-assignee-of-an-issue-returns-bad-request-response.json", + "scenario": "Update the assignee of an issue returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/update-the-assignee-of-an-issue-returns-not-found-response.json", + "scenario": "Update the assignee of an issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/update-the-assignee-of-an-issue-returns-ok-response.json", + "scenario": "Update the assignee of an issue returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/update-the-state-of-an-issue-returns-bad-request-response.json", + "scenario": "Update the state of an issue returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/update-the-state-of-an-issue-returns-not-found-response.json", + "scenario": "Update the state of an issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "feature_file": "features/v2/error_tracking.feature", + "file": "v2/error-tracking/update-the-state-of-an-issue-returns-ok-response.json", + "scenario": "Update the state of an issue returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Events", + "feature_file": "features/v2/events.feature", + "file": "v2/events/get-a-list-of-events-returns-ok-response.json", + "scenario": "Get a list of events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Events", + "feature_file": "features/v2/events.feature", + "file": "v2/events/get-a-list-of-events-returns-ok-response-with-pagination.json", + "scenario": "Get a list of events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Events", + "feature_file": "features/v2/events.feature", + "file": "v2/events/get-a-quick-list-of-events-returns-ok-response.json", + "scenario": "Get a quick list of events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Events", + "feature_file": "features/v2/events.feature", + "file": "v2/events/post-an-event-returns-bad-request-response.json", + "scenario": "Post an event returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Events", + "feature_file": "features/v2/events.feature", + "file": "v2/events/post-an-event-returns-ok-response.json", + "scenario": "Post an event returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Events", + "feature_file": "features/v2/events.feature", + "file": "v2/events/search-events-returns-bad-request-response.json", + "scenario": "Search events returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Events", + "feature_file": "features/v2/events.feature", + "file": "v2/events/search-events-returns-ok-response.json", + "scenario": "Search events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Events", + "feature_file": "features/v2/events.feature", + "file": "v2/events/search-events-returns-ok-response-with-pagination.json", + "scenario": "Search events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Fastly Integration", + "feature_file": "features/v2/fastly_integration.feature", + "file": "v2/fastly-integration/add-fastly-account-returns-created-response.json", + "scenario": "Add Fastly account returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Fastly Integration", + "feature_file": "features/v2/fastly_integration.feature", + "file": "v2/fastly-integration/get-fastly-account-returns-ok-response.json", + "scenario": "Get Fastly account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Fastly Integration", + "feature_file": "features/v2/fastly_integration.feature", + "file": "v2/fastly-integration/list-fastly-accounts-returns-ok-response.json", + "scenario": "List Fastly accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Fastly Integration", + "feature_file": "features/v2/fastly_integration.feature", + "file": "v2/fastly-integration/update-fastly-account-returns-ok-response.json", + "scenario": "Update Fastly account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "feature_file": "features/v2/feature_flags.feature", + "file": "v2/feature-flags/archive-a-feature-flag-returns-ok-response.json", + "scenario": "Archive a feature flag returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "feature_file": "features/v2/feature_flags.feature", + "file": "v2/feature-flags/create-a-feature-flag-returns-created-response.json", + "scenario": "Create a feature flag returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "feature_file": "features/v2/feature_flags.feature", + "file": "v2/feature-flags/create-allocation-for-a-flag-in-an-environment-returns-created-response.json", + "scenario": "Create allocation for a flag in an environment returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "feature_file": "features/v2/feature_flags.feature", + "file": "v2/feature-flags/create-an-environment-returns-created-response.json", + "scenario": "Create an environment returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "feature_file": "features/v2/feature_flags.feature", + "file": "v2/feature-flags/get-a-feature-flag-returns-ok-response.json", + "scenario": "Get a feature flag returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "feature_file": "features/v2/feature_flags.feature", + "file": "v2/feature-flags/list-feature-flags-returns-ok-response.json", + "scenario": "List feature flags returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "feature_file": "features/v2/feature_flags.feature", + "file": "v2/feature-flags/update-a-feature-flag-returns-ok-response.json", + "scenario": "Update a feature flag returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "feature_file": "features/v2/feature_flags.feature", + "file": "v2/feature-flags/update-targeting-rules-for-a-flag-in-an-environment-returns-ok-response.json", + "scenario": "Update targeting rules for a flag in an environment returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/clone-a-form-returns-not-found-response.json", + "scenario": "Clone a form returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/create-a-form-returns-ok-response.json", + "scenario": "Create a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/create-and-publish-a-form-returns-ok-response.json", + "scenario": "Create and publish a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/create-or-update-a-form-version-returns-not-found-response.json", + "scenario": "Create or update a form version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/create-or-update-a-form-version-returns-ok-response.json", + "scenario": "Create or update a form version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/delete-a-form-returns-ok-response.json", + "scenario": "Delete a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/get-a-form-returns-not-found-response.json", + "scenario": "Get a form returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/get-a-form-returns-ok-response.json", + "scenario": "Get a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/list-forms-returns-ok-response.json", + "scenario": "List forms returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/publish-a-form-version-returns-not-found-response.json", + "scenario": "Publish a form version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/publish-a-form-version-returns-ok-response.json", + "scenario": "Publish a form version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/update-a-form-returns-not-found-response.json", + "scenario": "Update a form returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/update-a-form-returns-ok-response.json", + "scenario": "Update a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/upsert-and-publish-a-form-version-returns-not-found-response.json", + "scenario": "Upsert and publish a form version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "feature_file": "features/v2/forms.feature", + "file": "v2/forms/upsert-and-publish-a-form-version-returns-ok-response.json", + "scenario": "Upsert and publish a form version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/create-a-datadog-gcp-principal-returns-ok-response.json", + "scenario": "Create a Datadog GCP principal returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/create-a-datadog-gcp-principal-with-empty-body-returns-ok-response.json", + "scenario": "Create a Datadog GCP principal with empty body returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/create-a-new-entry-for-your-service-account-returns-ok-response.json", + "scenario": "Create a new entry for your service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/create-a-new-entry-for-your-service-account-with-account-tags-returns-ok-response.json", + "scenario": "Create a new entry for your service account with account_tags returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/create-a-new-entry-for-your-service-account-with-cloud-run-revision-filters-enabled-returns-ok-response.json", + "scenario": "Create a new entry for your service account with cloud run revision filters enabled returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/create-a-new-entry-for-your-service-account-with-cspm-enabled-returns-ok-response.json", + "scenario": "Create a new entry for your service account with cspm enabled returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/create-a-new-entry-for-your-service-account-with-resource-collection-enabled-disabled-and-cspm-enabled-returns-bad-request-response.json", + "scenario": "Create a new entry for your service account with resource collection enabled disabled and cspm enabled returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/create-a-new-entry-for-your-service-account-with-resource-collection-enabled-returns-ok-response.json", + "scenario": "Create a new entry for your service account with resource collection enabled returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/create-a-new-entry-for-your-service-account-with-security-command-center-enabled-returns-ok-response.json", + "scenario": "Create a new entry for your service account with security command center enabled returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/list-all-gcp-sts-enabled-service-accounts-returns-ok-response.json", + "scenario": "List all GCP STS-enabled service accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/list-delegate-account-returns-ok-response.json", + "scenario": "List delegate account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/update-sts-service-account-returns-ok-response.json", + "scenario": "Update STS Service Account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/update-sts-service-account-returns-ok-response-with-cloud-run-revision-filters.json", + "scenario": "Update STS Service Account returns \"OK\" response with cloud run revision filters", + "version": "v2" + }, + { + "feature": "GCP Integration", + "feature_file": "features/v2/gcp_integration.feature", + "file": "v2/gcp-integration/update-sts-service-account-returns-ok-response-with-enable-resource-collection-turned-on.json", + "scenario": "Update STS Service Account returns \"OK\" response with enable resource collection turned on", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "feature_file": "features/v2/google_chat_integration.feature", + "file": "v2/google-chat-integration/create-organization-handle-returns-created-response.json", + "scenario": "Create organization handle returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "feature_file": "features/v2/google_chat_integration.feature", + "file": "v2/google-chat-integration/delete-organization-handle-returns-ok-response.json", + "scenario": "Delete organization handle returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "feature_file": "features/v2/google_chat_integration.feature", + "file": "v2/google-chat-integration/get-all-organization-handles-returns-ok-response.json", + "scenario": "Get all organization handles returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "feature_file": "features/v2/google_chat_integration.feature", + "file": "v2/google-chat-integration/get-organization-handle-returns-ok-response.json", + "scenario": "Get organization handle returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "feature_file": "features/v2/google_chat_integration.feature", + "file": "v2/google-chat-integration/get-space-information-by-display-name-returns-ok-response.json", + "scenario": "Get space information by display name returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "feature_file": "features/v2/google_chat_integration.feature", + "file": "v2/google-chat-integration/update-organization-handle-returns-ok-response.json", + "scenario": "Update organization handle returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/add-commander-to-an-incident-returns-ok-response.json", + "scenario": "Add commander to an incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-an-incident-integration-metadata-returns-created-response.json", + "scenario": "Create an incident integration metadata returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-an-incident-returns-created-response.json", + "scenario": "Create an incident returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-an-incident-todo-returns-created-response.json", + "scenario": "Create an incident todo returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-an-incident-type-returns-created-response.json", + "scenario": "Create an incident type returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-incident-attachment-returns-created-response.json", + "scenario": "Create incident attachment returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-incident-notification-rule-returns-bad-request-response.json", + "scenario": "Create incident notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-incident-notification-rule-returns-created-response.json", + "scenario": "Create incident notification rule returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-incident-notification-template-returns-bad-request-response.json", + "scenario": "Create incident notification template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-incident-notification-template-returns-created-response.json", + "scenario": "Create incident notification template returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/create-incident-notification-template-returns-not-found-response.json", + "scenario": "Create incident notification template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/delete-an-existing-incident-returns-ok-response.json", + "scenario": "Delete an existing incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/delete-an-incident-integration-metadata-returns-ok-response.json", + "scenario": "Delete an incident integration metadata returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/delete-an-incident-todo-returns-ok-response.json", + "scenario": "Delete an incident todo returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/delete-an-incident-type-returns-ok-response.json", + "scenario": "Delete an incident type returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/delete-incident-attachment-returns-not-found-response.json", + "scenario": "Delete incident attachment returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/delete-incident-notification-rule-returns-no-content-response.json", + "scenario": "Delete incident notification rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/delete-incident-notification-rule-returns-not-found-response.json", + "scenario": "Delete incident notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/delete-incident-notification-template-returns-no-content-response.json", + "scenario": "Delete incident notification template returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-a-list-of-an-incident-s-integration-metadata-returns-ok-response.json", + "scenario": "Get a list of an incident's integration metadata returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-a-list-of-an-incident-s-todos-returns-ok-response.json", + "scenario": "Get a list of an incident's todos returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-a-list-of-incidents-returns-ok-response.json", + "scenario": "Get a list of incidents returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-a-list-of-incidents-returns-ok-response-with-pagination.json", + "scenario": "Get a list of incidents returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-incident-integration-metadata-details-returns-ok-response.json", + "scenario": "Get incident integration metadata details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-incident-notification-rule-returns-not-found-response.json", + "scenario": "Get incident notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-incident-notification-rule-returns-ok-response.json", + "scenario": "Get incident notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-incident-notification-template-returns-ok-response.json", + "scenario": "Get incident notification template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-incident-todo-details-returns-ok-response.json", + "scenario": "Get incident todo details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/get-the-details-of-an-incident-returns-ok-response.json", + "scenario": "Get the details of an incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/import-an-incident-returns-created-response.json", + "scenario": "Import an incident returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/list-incident-attachments-returns-ok-response.json", + "scenario": "List incident attachments returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/list-incident-notification-rules-returns-ok-response.json", + "scenario": "List incident notification rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/list-incident-notification-templates-returns-ok-response.json", + "scenario": "List incident notification templates returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/remove-commander-from-an-incident-returns-ok-response.json", + "scenario": "Remove commander from an incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/search-for-incidents-returns-ok-response.json", + "scenario": "Search for incidents returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/search-for-incidents-returns-ok-response-with-pagination.json", + "scenario": "Search for incidents returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-an-existing-incident-integration-metadata-returns-ok-response.json", + "scenario": "Update an existing incident integration metadata returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-an-existing-incident-returns-ok-response.json", + "scenario": "Update an existing incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-an-incident-todo-returns-ok-response.json", + "scenario": "Update an incident todo returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-an-incident-type-returns-ok-response.json", + "scenario": "Update an incident type returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-incident-attachment-returns-not-found-response.json", + "scenario": "Update incident attachment returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-incident-attachment-returns-ok-response.json", + "scenario": "Update incident attachment returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-incident-notification-rule-returns-bad-request-response.json", + "scenario": "Update incident notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-incident-notification-rule-returns-not-found-response.json", + "scenario": "Update incident notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-incident-notification-rule-returns-ok-response.json", + "scenario": "Update incident notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-incident-notification-template-returns-bad-request-response.json", + "scenario": "Update incident notification template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-incident-notification-template-returns-not-found-response.json", + "scenario": "Update incident notification template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "feature_file": "features/v2/incidents.feature", + "file": "v2/incidents/update-incident-notification-template-returns-ok-response.json", + "scenario": "Update incident notification template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Integrations", + "feature_file": "features/v2/integrations.feature", + "file": "v2/integrations/list-integrations-returns-successful-response-response.json", + "scenario": "List Integrations returns \"Successful Response.\" response", + "version": "v2" + }, + { + "feature": "IP Allowlist", + "feature_file": "features/v2/ip_allowlist.feature", + "file": "v2/ip-allowlist/get-ip-allowlist-returns-ok-response.json", + "scenario": "Get IP Allowlist returns \"OK\" response", + "version": "v2" + }, + { + "feature": "IP Allowlist", + "feature_file": "features/v2/ip_allowlist.feature", + "file": "v2/ip-allowlist/update-ip-allowlist-returns-bad-request-response.json", + "scenario": "Update IP Allowlist returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "IP Allowlist", + "feature_file": "features/v2/ip_allowlist.feature", + "file": "v2/ip-allowlist/update-ip-allowlist-returns-ok-response.json", + "scenario": "Update IP Allowlist returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/create-a-personal-access-token-returns-created-response.json", + "scenario": "Create a personal access token returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/create-an-api-key-returns-created-response.json", + "scenario": "Create an API key returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/create-an-application-key-with-scopes-for-current-user-returns-created-response.json", + "scenario": "Create an Application key with scopes for current user returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/create-an-application-key-for-current-user-returns-created-response.json", + "scenario": "Create an application key for current user returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/delete-an-api-key-returns-no-content-response.json", + "scenario": "Delete an API key returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/delete-an-application-key-owned-by-current-user-returns-no-content-response.json", + "scenario": "Delete an application key owned by current user returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/delete-an-application-key-returns-no-content-response.json", + "scenario": "Delete an application key returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/edit-an-api-key-returns-ok-response.json", + "scenario": "Edit an API key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/edit-an-application-key-owned-by-current-user-returns-ok-response.json", + "scenario": "Edit an application key owned by current user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/edit-an-application-key-returns-ok-response.json", + "scenario": "Edit an application key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-api-key-returns-not-found-response.json", + "scenario": "Get API key returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-api-key-returns-ok-response.json", + "scenario": "Get API key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-a-personal-access-token-returns-ok-response.json", + "scenario": "Get a personal access token returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-all-api-keys-returns-ok-response.json", + "scenario": "Get all API keys returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-all-application-keys-owned-by-current-user-returns-ok-response.json", + "scenario": "Get all application keys owned by current user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-all-application-keys-returns-ok-response.json", + "scenario": "Get all application keys returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-all-personal-access-tokens-returns-ok-response.json", + "scenario": "Get all personal access tokens returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-an-application-key-returns-not-found-response.json", + "scenario": "Get an application key returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-an-application-key-returns-ok-response.json", + "scenario": "Get an application key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-one-application-key-owned-by-current-user-returns-not-found-response.json", + "scenario": "Get one application key owned by current user returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/get-one-application-key-owned-by-current-user-returns-ok-response.json", + "scenario": "Get one application key owned by current user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/revoke-a-personal-access-token-returns-no-content-response.json", + "scenario": "Revoke a personal access token returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "feature_file": "features/v2/key_management.feature", + "file": "v2/key-management/update-a-personal-access-token-returns-ok-response.json", + "scenario": "Update a personal access token returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-bad-request-response.json", + "scenario": "Create a new LLM Observability prompt version returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-not-found-response.json", + "scenario": "Create a new LLM Observability prompt version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-ok-response.json", + "scenario": "Create a new LLM Observability prompt version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/create-an-llm-observability-prompt-returns-bad-request-response.json", + "scenario": "Create an LLM Observability prompt returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/create-an-llm-observability-prompt-returns-conflict-response.json", + "scenario": "Create an LLM Observability prompt returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/create-an-llm-observability-prompt-returns-ok-response.json", + "scenario": "Create an LLM Observability prompt returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/delete-an-llm-observability-prompt-returns-not-found-response.json", + "scenario": "Delete an LLM Observability prompt returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/delete-an-llm-observability-prompt-returns-ok-response.json", + "scenario": "Delete an LLM Observability prompt returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/get-a-specific-llm-observability-prompt-version-returns-not-found-response.json", + "scenario": "Get a specific LLM Observability prompt version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/get-a-specific-llm-observability-prompt-version-returns-ok-response.json", + "scenario": "Get a specific LLM Observability prompt version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/get-an-llm-observability-prompt-returns-not-found-response.json", + "scenario": "Get an LLM Observability prompt returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/get-an-llm-observability-prompt-returns-ok-response.json", + "scenario": "Get an LLM Observability prompt returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/list-llm-observability-prompts-returns-ok-response.json", + "scenario": "List LLM Observability prompts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/list-versions-of-an-llm-observability-prompt-returns-ok-response.json", + "scenario": "List versions of an LLM Observability prompt returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/update-a-specific-llm-observability-prompt-version-returns-not-found-response.json", + "scenario": "Update a specific LLM Observability prompt version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/update-a-specific-llm-observability-prompt-version-returns-ok-response.json", + "scenario": "Update a specific LLM Observability prompt version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/update-an-llm-observability-prompt-returns-bad-request-response.json", + "scenario": "Update an LLM Observability prompt returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/update-an-llm-observability-prompt-returns-not-found-response.json", + "scenario": "Update an LLM Observability prompt returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "feature_file": "features/v2/llm_observability.feature", + "file": "v2/llm-observability/update-an-llm-observability-prompt-returns-ok-response.json", + "scenario": "Update an LLM Observability prompt returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "feature_file": "features/v2/logs.feature", + "file": "v2/logs/aggregate-compute-events-returns-ok-response.json", + "scenario": "Aggregate compute events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "feature_file": "features/v2/logs.feature", + "file": "v2/logs/aggregate-compute-events-with-group-by-returns-ok-response.json", + "scenario": "Aggregate compute events with group by returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "feature_file": "features/v2/logs.feature", + "file": "v2/logs/aggregate-events-returns-ok-response.json", + "scenario": "Aggregate events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "feature_file": "features/v2/logs.feature", + "file": "v2/logs/get-a-list-of-logs-returns-ok-response-with-pagination.json", + "scenario": "Get a list of logs returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Logs", + "feature_file": "features/v2/logs.feature", + "file": "v2/logs/get-a-quick-list-of-logs-returns-ok-response.json", + "scenario": "Get a quick list of logs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "feature_file": "features/v2/logs.feature", + "file": "v2/logs/search-logs-returns-ok-response.json", + "scenario": "Search logs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "feature_file": "features/v2/logs.feature", + "file": "v2/logs/search-logs-returns-ok-response-with-pagination.json", + "scenario": "Search logs returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Logs", + "feature_file": "features/v2/logs.feature", + "file": "v2/logs/send-logs-returns-request-accepted-for-processing-always-202-empty-json-response.json", + "scenario": "Send logs returns \"Request accepted for processing (always 202 empty JSON).\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-a-basic-http-custom-destination-returns-ok-response.json", + "scenario": "Create a Basic HTTP custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-a-custom-header-http-custom-destination-returns-ok-response.json", + "scenario": "Create a Custom Header HTTP custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-a-microsoft-sentinel-custom-destination-returns-ok-response.json", + "scenario": "Create a Microsoft Sentinel custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-a-splunk-custom-destination-returns-ok-response.json", + "scenario": "Create a Splunk custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-a-splunk-custom-destination-with-a-null-sourcetype-returns-ok-response.json", + "scenario": "Create a Splunk custom destination with a null sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-a-splunk-custom-destination-with-a-sourcetype-returns-ok-response.json", + "scenario": "Create a Splunk custom destination with a sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-a-splunk-custom-destination-with-an-empty-string-sourcetype-returns-ok-response.json", + "scenario": "Create a Splunk custom destination with an empty string sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-a-splunk-custom-destination-without-a-sourcetype-returns-ok-response.json", + "scenario": "Create a Splunk custom destination without a sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-a-custom-destination-returns-bad-request-response.json", + "scenario": "Create a custom destination returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/create-an-elasticsearch-custom-destination-returns-ok-response.json", + "scenario": "Create an Elasticsearch custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/delete-a-custom-destination-returns-not-found-response.json", + "scenario": "Delete a custom destination returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/delete-a-custom-destination-returns-ok-response.json", + "scenario": "Delete a custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/get-a-custom-destination-returns-not-found-response.json", + "scenario": "Get a custom destination returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/get-a-custom-destination-returns-ok-response.json", + "scenario": "Get a custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/get-all-custom-destinations-returns-ok-response.json", + "scenario": "Get all custom destinations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/update-a-splunk-custom-destination-with-a-null-sourcetype-returns-ok-response.json", + "scenario": "Update a Splunk custom destination with a null sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/update-a-splunk-custom-destination-with-a-sourcetype-returns-ok-response.json", + "scenario": "Update a Splunk custom destination with a sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/update-a-splunk-custom-destination-s-attributes-preserves-the-absent-sourcetype-returns-ok-response.json", + "scenario": "Update a Splunk custom destination's attributes preserves the absent sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/update-a-splunk-custom-destination-s-destination-preserves-the-null-sourcetype-returns-ok-response.json", + "scenario": "Update a Splunk custom destination's destination preserves the null sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/update-a-splunk-custom-destination-s-destination-preserves-the-sourcetype-returns-ok-response.json", + "scenario": "Update a Splunk custom destination's destination preserves the sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/update-a-custom-destination-returns-bad-request-response.json", + "scenario": "Update a custom destination returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/update-a-custom-destination-returns-not-found-response.json", + "scenario": "Update a custom destination returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "feature_file": "features/v2/logs_custom_destinations.feature", + "file": "v2/logs-custom-destinations/update-a-custom-destination-returns-ok-response.json", + "scenario": "Update a custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "feature_file": "features/v2/logs_metrics.feature", + "file": "v2/logs-metrics/create-a-log-based-metric-returns-ok-response.json", + "scenario": "Create a log-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "feature_file": "features/v2/logs_metrics.feature", + "file": "v2/logs-metrics/delete-a-log-based-metric-returns-ok-response.json", + "scenario": "Delete a log-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "feature_file": "features/v2/logs_metrics.feature", + "file": "v2/logs-metrics/get-a-log-based-metric-returns-ok-response.json", + "scenario": "Get a log-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "feature_file": "features/v2/logs_metrics.feature", + "file": "v2/logs-metrics/get-all-log-based-metrics-returns-ok-response.json", + "scenario": "Get all log-based metrics returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "feature_file": "features/v2/logs_metrics.feature", + "file": "v2/logs-metrics/update-a-log-based-metric-returns-ok-response.json", + "scenario": "Update a log-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "feature_file": "features/v2/logs_metrics.feature", + "file": "v2/logs-metrics/update-a-log-based-metric-with-include-percentiles-field-returns-ok-response.json", + "scenario": "Update a log-based metric with include_percentiles field returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/create-a-restriction-query-returns-bad-request-response.json", + "scenario": "Create a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/create-a-restriction-query-returns-ok-response.json", + "scenario": "Create a restriction query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/delete-a-restriction-query-returns-bad-request-response.json", + "scenario": "Delete a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/delete-a-restriction-query-returns-not-found-response.json", + "scenario": "Delete a restriction query returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/delete-a-restriction-query-returns-ok-response.json", + "scenario": "Delete a restriction query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/get-a-restriction-query-returns-bad-request-response.json", + "scenario": "Get a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/get-a-restriction-query-returns-not-found-response.json", + "scenario": "Get a restriction query returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/get-a-restriction-query-returns-ok-response.json", + "scenario": "Get a restriction query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/get-all-restriction-queries-for-a-given-user-returns-bad-request-response.json", + "scenario": "Get all restriction queries for a given user returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/get-all-restriction-queries-for-a-given-user-returns-not-found-response.json", + "scenario": "Get all restriction queries for a given user returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-bad-request-response.json", + "scenario": "Get restriction query for a given role returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-not-found-response.json", + "scenario": "Get restriction query for a given role returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-ok-response.json", + "scenario": "Get restriction query for a given role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-bad-request-response.json", + "scenario": "Grant role to a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-not-found-response.json", + "scenario": "Grant role to a restriction query returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-ok-response.json", + "scenario": "Grant role to a restriction query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/list-restriction-queries-returns-ok-response.json", + "scenario": "List restriction queries returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-bad-request-response.json", + "scenario": "List roles for a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-not-found-response.json", + "scenario": "List roles for a restriction query returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "feature_file": "features/v2/logs_restriction_queries.feature", + "file": "v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-ok-response.json", + "scenario": "List roles for a restriction query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/configure-tags-for-multiple-metrics-returns-accepted-response.json", + "scenario": "Configure tags for multiple metrics returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/create-a-tag-configuration-returns-created-response.json", + "scenario": "Create a tag configuration returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/create-a-tag-indexing-rule-returns-bad-request-response.json", + "scenario": "Create a tag indexing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/create-a-tag-indexing-rule-returns-created-response.json", + "scenario": "Create a tag indexing rule returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/create-a-tag-indexing-rule-with-exclude-mode-tag-usage-fields-returns-created-response.json", + "scenario": "Create a tag indexing rule with exclude-mode tag usage fields returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/create-a-tag-indexing-rule-with-exclude-not-queried-window-seconds-and-exclude-tags-mode-false-returns-bad-request-response.json", + "scenario": "Create a tag indexing rule with exclude_not_queried_window_seconds and exclude_tags_mode false returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/create-a-tag-indexing-rule-with-exclude-not-used-in-assets-and-exclude-tags-mode-false-returns-bad-request-response.json", + "scenario": "Create a tag indexing rule with exclude_not_used_in_assets and exclude_tags_mode false returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/delete-a-tag-configuration-returns-no-content-response.json", + "scenario": "Delete a tag configuration returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/delete-a-tag-indexing-rule-returns-bad-request-response.json", + "scenario": "Delete a tag indexing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/delete-a-tag-indexing-rule-returns-no-content-response.json", + "scenario": "Delete a tag indexing rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/get-a-list-of-metrics-returns-success-response-with-pagination.json", + "scenario": "Get a list of metrics returns \"Success\" response with pagination", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/get-a-list-of-metrics-with-a-tag-filter-returns-success-response.json", + "scenario": "Get a list of metrics with a tag filter returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/get-a-list-of-metrics-with-configured-filter-returns-success-response.json", + "scenario": "Get a list of metrics with configured filter returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/get-a-tag-indexing-rule-returns-bad-request-response.json", + "scenario": "Get a tag indexing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/get-a-tag-indexing-rule-returns-not-found-response.json", + "scenario": "Get a tag indexing rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/get-a-tag-indexing-rule-returns-ok-response.json", + "scenario": "Get a tag indexing rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/list-active-tags-and-aggregations-returns-success-response.json", + "scenario": "List active tags and aggregations returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/list-distinct-metric-volumes-by-metric-name-returns-success-response.json", + "scenario": "List distinct metric volumes by metric name returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/list-tag-configuration-by-name-returns-success-response.json", + "scenario": "List tag configuration by name returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/list-tag-indexing-rules-for-a-metric-returns-bad-request-response.json", + "scenario": "List tag indexing rules for a metric returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/list-tag-indexing-rules-for-a-metric-returns-ok-response.json", + "scenario": "List tag indexing rules for a metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/list-tag-indexing-rules-returns-ok-response.json", + "scenario": "List tag indexing rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/list-tags-by-metric-name-returns-success-response.json", + "scenario": "List tags by metric name returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/related-assets-to-a-metric-returns-success-response.json", + "scenario": "Related Assets to a Metric returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/reorder-tag-indexing-rules-returns-bad-request-response.json", + "scenario": "Reorder tag indexing rules returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/reorder-tag-indexing-rules-returns-no-content-response.json", + "scenario": "Reorder tag indexing rules returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/reorder-tag-indexing-rules-returns-not-found-response.json", + "scenario": "Reorder tag indexing rules returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-returns-bad-request-response.json", + "scenario": "Scalar cross product query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-returns-ok-response.json", + "scenario": "Scalar cross product query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-rum-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with RUM data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-apm-dependency-stats-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with apm_dependency_stats data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-apm-metrics-data-source-and-span-kind-returns-ok-response.json", + "scenario": "Scalar cross product query with apm_metrics data source and span_kind returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-apm-metrics-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with apm_metrics data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-apm-resource-stats-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with apm_resource_stats data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-audit-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with audit data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-ci-pipelines-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with ci_pipelines data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-ci-tests-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with ci_tests data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-container-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with container data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-events-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with events data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-logs-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with logs data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-network-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with network data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-on-call-events-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with on_call_events data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-process-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with process data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-product-analytics-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with product_analytics data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-profiles-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with profiles data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-security-signals-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with security_signals data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-slo-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with slo data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/scalar-cross-product-query-with-spans-data-source-returns-ok-response.json", + "scenario": "Scalar cross product query with spans data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/submit-metrics-returns-payload-accepted-response.json", + "scenario": "Submit metrics returns \"Payload accepted\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/tag-configuration-cardinality-estimator-returns-success-response.json", + "scenario": "Tag Configuration Cardinality Estimator returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-returns-ok-response.json", + "scenario": "Timeseries cross product query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-rum-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with RUM data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-apm-dependency-stats-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with apm_dependency_stats data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-apm-metrics-data-source-and-span-kind-returns-ok-response.json", + "scenario": "Timeseries cross product query with apm_metrics data source and span_kind returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-apm-metrics-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with apm_metrics data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-apm-resource-stats-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with apm_resource_stats data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-audit-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with audit data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-ci-pipelines-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with ci_pipelines data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-ci-tests-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with ci_tests data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-container-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with container data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-events-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with events data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-logs-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with logs data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-network-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with network data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-on-call-events-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with on_call_events data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-process-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with process data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-product-analytics-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with product_analytics data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-profiles-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with profiles data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-security-signals-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with security_signals data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-slo-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with slo data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/timeseries-cross-product-query-with-spans-data-source-returns-ok-response.json", + "scenario": "Timeseries cross product query with spans data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/update-a-tag-configuration-returns-ok-response.json", + "scenario": "Update a tag configuration returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/update-a-tag-indexing-rule-returns-bad-request-response.json", + "scenario": "Update a tag indexing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/update-a-tag-indexing-rule-returns-not-found-response.json", + "scenario": "Update a tag indexing rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/update-a-tag-indexing-rule-returns-ok-response.json", + "scenario": "Update a tag indexing rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "feature_file": "features/v2/metrics.feature", + "file": "v2/metrics/update-a-tag-indexing-rule-with-exclude-mode-tag-usage-fields-returns-ok-response.json", + "scenario": "Update a tag indexing rule with exclude-mode tag usage fields returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "feature_file": "features/v2/microsoft_teams_integration.feature", + "file": "v2/microsoft-teams-integration/create-workflow-webhook-handle-returns-created-response.json", + "scenario": "Create workflow webhook handle returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "feature_file": "features/v2/microsoft_teams_integration.feature", + "file": "v2/microsoft-teams-integration/delete-workflow-webhook-handle-returns-ok-response.json", + "scenario": "Delete workflow webhook handle returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "feature_file": "features/v2/microsoft_teams_integration.feature", + "file": "v2/microsoft-teams-integration/get-all-workflow-webhook-handles-returns-ok-response.json", + "scenario": "Get all workflow webhook handles returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "feature_file": "features/v2/microsoft_teams_integration.feature", + "file": "v2/microsoft-teams-integration/get-workflow-webhook-handle-information-returns-ok-response.json", + "scenario": "Get workflow webhook handle information returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "feature_file": "features/v2/microsoft_teams_integration.feature", + "file": "v2/microsoft-teams-integration/update-workflow-webhook-handle-returns-ok-response.json", + "scenario": "Update workflow webhook handle returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/delete-a-model-lab-run-returns-no-content-response.json", + "scenario": "Delete a Model Lab run returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/delete-a-model-lab-run-returns-not-found-response.json", + "scenario": "Delete a Model Lab run returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/download-artifact-content-returns-ok-response.json", + "scenario": "Download artifact content returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/get-a-model-lab-project-returns-not-found-response.json", + "scenario": "Get a Model Lab project returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/get-a-model-lab-project-returns-ok-response.json", + "scenario": "Get a Model Lab project returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/get-a-model-lab-run-returns-not-found-response.json", + "scenario": "Get a Model Lab run returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/get-a-model-lab-run-returns-ok-response.json", + "scenario": "Get a Model Lab run returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/list-model-lab-project-artifacts-returns-ok-response.json", + "scenario": "List Model Lab project artifacts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/list-model-lab-project-facet-keys-returns-ok-response.json", + "scenario": "List Model Lab project facet keys returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/list-model-lab-project-facet-values-returns-ok-response.json", + "scenario": "List Model Lab project facet values returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/list-model-lab-projects-returns-ok-response.json", + "scenario": "List Model Lab projects returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/list-model-lab-run-artifacts-returns-ok-response.json", + "scenario": "List Model Lab run artifacts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/list-model-lab-run-facet-keys-returns-ok-response.json", + "scenario": "List Model Lab run facet keys returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/list-model-lab-run-facet-values-returns-ok-response.json", + "scenario": "List Model Lab run facet values returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/list-model-lab-runs-returns-ok-response.json", + "scenario": "List Model Lab runs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/pin-a-model-lab-run-returns-no-content-response.json", + "scenario": "Pin a Model Lab run returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/pin-a-model-lab-run-returns-not-found-response.json", + "scenario": "Pin a Model Lab run returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/star-a-model-lab-project-returns-no-content-response.json", + "scenario": "Star a Model Lab project returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/star-a-model-lab-project-returns-not-found-response.json", + "scenario": "Star a Model Lab project returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/unpin-a-model-lab-run-returns-no-content-response.json", + "scenario": "Unpin a Model Lab run returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "feature_file": "features/v2/model_lab_api.feature", + "file": "v2/model-lab-api/unstar-a-model-lab-project-returns-no-content-response.json", + "scenario": "Unstar a Model Lab project returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/create-a-monitor-configuration-policy-returns-bad-request-response.json", + "scenario": "Create a monitor configuration policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/create-a-monitor-configuration-policy-returns-ok-response.json", + "scenario": "Create a monitor configuration policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/create-a-monitor-notification-rule-returns-bad-request-response.json", + "scenario": "Create a monitor notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/create-a-monitor-notification-rule-returns-ok-response.json", + "scenario": "Create a monitor notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/create-a-monitor-notification-rule-with-conditional-recipients-returns-ok-response.json", + "scenario": "Create a monitor notification rule with conditional recipients returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/create-a-monitor-notification-rule-with-scope-returns-ok-response.json", + "scenario": "Create a monitor notification rule with scope returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/create-a-monitor-user-template-returns-bad-request-response.json", + "scenario": "Create a monitor user template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/create-a-monitor-user-template-returns-ok-response.json", + "scenario": "Create a monitor user template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/delete-a-monitor-configuration-policy-returns-bad-request-response.json", + "scenario": "Delete a monitor configuration policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/delete-a-monitor-configuration-policy-returns-not-found-response.json", + "scenario": "Delete a monitor configuration policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/delete-a-monitor-configuration-policy-returns-ok-response.json", + "scenario": "Delete a monitor configuration policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/delete-a-monitor-notification-rule-returns-not-found-response.json", + "scenario": "Delete a monitor notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/delete-a-monitor-notification-rule-returns-ok-response.json", + "scenario": "Delete a monitor notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/delete-a-monitor-user-template-returns-not-found-response.json", + "scenario": "Delete a monitor user template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/edit-a-monitor-configuration-policy-returns-not-found-response.json", + "scenario": "Edit a monitor configuration policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/edit-a-monitor-configuration-policy-returns-ok-response.json", + "scenario": "Edit a monitor configuration policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/edit-a-monitor-configuration-policy-returns-unprocessable-entity-response.json", + "scenario": "Edit a monitor configuration policy returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/get-a-monitor-configuration-policy-returns-not-found-response.json", + "scenario": "Get a monitor configuration policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/get-a-monitor-configuration-policy-returns-ok-response.json", + "scenario": "Get a monitor configuration policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/get-a-monitor-notification-rule-returns-not-found-response.json", + "scenario": "Get a monitor notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/get-a-monitor-notification-rule-returns-ok-response.json", + "scenario": "Get a monitor notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/get-a-monitor-user-template-returns-not-found-response.json", + "scenario": "Get a monitor user template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/get-a-monitor-user-template-returns-ok-response.json", + "scenario": "Get a monitor user template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/get-all-monitor-configuration-policies-returns-ok-response.json", + "scenario": "Get all monitor configuration policies returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/get-all-monitor-notification-rules-returns-ok-response.json", + "scenario": "Get all monitor notification rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/get-all-monitor-user-templates-returns-ok-response.json", + "scenario": "Get all monitor user templates returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/update-a-monitor-notification-rule-returns-bad-request-response.json", + "scenario": "Update a monitor notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/update-a-monitor-notification-rule-returns-not-found-response.json", + "scenario": "Update a monitor notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/update-a-monitor-notification-rule-returns-ok-response.json", + "scenario": "Update a monitor notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/update-a-monitor-notification-rule-with-conditional-recipients-returns-ok-response.json", + "scenario": "Update a monitor notification rule with conditional_recipients returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/update-a-monitor-notification-rule-with-scope-returns-ok-response.json", + "scenario": "Update a monitor notification rule with scope returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-bad-request-response.json", + "scenario": "Update a monitor user template to a new version returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-not-found-response.json", + "scenario": "Update a monitor user template to a new version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-ok-response.json", + "scenario": "Update a monitor user template to a new version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/validate-a-monitor-user-template-returns-bad-request-response.json", + "scenario": "Validate a monitor user template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/validate-a-monitor-user-template-returns-ok-response.json", + "scenario": "Validate a monitor user template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/validate-an-existing-monitor-user-template-returns-bad-request-response.json", + "scenario": "Validate an existing monitor user template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/validate-an-existing-monitor-user-template-returns-not-found-response.json", + "scenario": "Validate an existing monitor user template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "feature_file": "features/v2/monitors.feature", + "file": "v2/monitors/validate-an-existing-monitor-user-template-returns-ok-response.json", + "scenario": "Validate an existing monitor user template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/get-the-device-details-returns-not-found-response.json", + "scenario": "Get the device details returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/get-the-device-details-returns-ok-response.json", + "scenario": "Get the device details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/get-the-list-of-devices-returns-bad-request-response.json", + "scenario": "Get the list of devices returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/get-the-list-of-devices-returns-ok-response.json", + "scenario": "Get the list of devices returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/get-the-list-of-interfaces-of-the-device-returns-ok-response.json", + "scenario": "Get the list of interfaces of the device returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/get-the-list-of-tags-for-a-device-returns-not-found-response.json", + "scenario": "Get the list of tags for a device returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/get-the-list-of-tags-for-a-device-returns-ok-response.json", + "scenario": "Get the list of tags for a device returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/list-tags-for-an-interface-returns-not-found-response.json", + "scenario": "List tags for an interface returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/list-tags-for-an-interface-returns-ok-response.json", + "scenario": "List tags for an interface returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/update-the-tags-for-a-device-returns-not-found-response.json", + "scenario": "Update the tags for a device returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/update-the-tags-for-a-device-returns-ok-response.json", + "scenario": "Update the tags for a device returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/update-the-tags-for-an-interface-returns-not-found-response.json", + "scenario": "Update the tags for an interface returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "feature_file": "features/v2/network_device_monitoring.feature", + "file": "v2/network-device-monitoring/update-the-tags-for-an-interface-returns-ok-response.json", + "scenario": "Update the tags for an interface returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/create-a-new-pipeline-returns-bad-request-response.json", + "scenario": "Create a new pipeline returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/create-a-new-pipeline-returns-ok-response.json", + "scenario": "Create a new pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/create-a-pipeline-with-dedupe-processor-with-cache-returns-ok-response.json", + "scenario": "Create a pipeline with dedupe processor with cache returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/create-a-pipeline-with-dedupe-processor-without-cache-returns-ok-response.json", + "scenario": "Create a pipeline with dedupe processor without cache returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/delete-a-pipeline-returns-not-found-response.json", + "scenario": "Delete a pipeline returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/delete-a-pipeline-returns-ok-response.json", + "scenario": "Delete a pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/get-a-specific-pipeline-returns-ok-response.json", + "scenario": "Get a specific pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/list-pipelines-returns-bad-request-response.json", + "scenario": "List pipelines returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/list-pipelines-returns-ok-response.json", + "scenario": "List pipelines returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/update-a-pipeline-returns-bad-request-response.json", + "scenario": "Update a pipeline returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/update-a-pipeline-returns-not-found-response.json", + "scenario": "Update a pipeline returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/update-a-pipeline-returns-ok-response.json", + "scenario": "Update a pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-a-metrics-pipeline-with-opentelemetry-source-returns-ok-response.json", + "scenario": "Validate a metrics pipeline with opentelemetry source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-returns-bad-request-response.json", + "scenario": "Validate an observability pipeline returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-returns-ok-response.json", + "scenario": "Validate an observability pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-arrow-stream-format-returns-ok-response.json", + "scenario": "Validate an observability pipeline with ClickHouse destination arrow_stream format returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-returns-ok-response.json", + "scenario": "Validate an observability pipeline with ClickHouse destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-with-all-fields-set-returns-ok-response.json", + "scenario": "Validate an observability pipeline with ClickHouse destination with all fields set returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-http-server-source-valid-tokens-returns-ok-response.json", + "scenario": "Validate an observability pipeline with HTTP server source valid_tokens returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-custom-mapping-returns-ok-response.json", + "scenario": "Validate an observability pipeline with OCSF mapper custom mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-invalid-custom-mapping-returns-bad-request-response.json", + "scenario": "Validate an observability pipeline with OCSF mapper invalid custom mapping returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-keep-unmatched-returns-ok-response.json", + "scenario": "Validate an observability pipeline with OCSF mapper keep_unmatched returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-library-mapping-returns-ok-response.json", + "scenario": "Validate an observability pipeline with OCSF mapper library mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-destination-token-strategy-returns-ok-response.json", + "scenario": "Validate an observability pipeline with Splunk HEC destination token_strategy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-source-store-hec-token-returns-ok-response.json", + "scenario": "Validate an observability pipeline with Splunk HEC source store_hec_token returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-source-valid-tokens-returns-ok-response.json", + "scenario": "Validate an observability pipeline with Splunk HEC source valid_tokens returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-amazon-s3-source-compression-returns-ok-response.json", + "scenario": "Validate an observability pipeline with amazon S3 source compression returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-destination-secret-key-returns-ok-response.json", + "scenario": "Validate an observability pipeline with destination secret key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-enrichment-table-secret-field-lookup-returns-ok-response.json", + "scenario": "Validate an observability pipeline with enrichment table secret field lookup returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-parse-grok-processor-include-rules-returns-ok-response.json", + "scenario": "Validate an observability pipeline with parse grok processor include rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-parse-grok-processor-source-rules-returns-ok-response.json", + "scenario": "Validate an observability pipeline with parse grok processor source rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-source-secret-key-returns-ok-response.json", + "scenario": "Validate an observability pipeline with source secret key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "feature_file": "features/v2/observability_pipelines.feature", + "file": "v2/observability-pipelines/validate-an-observability-pipeline-with-websocket-source-bearer-auth-returns-ok-response.json", + "scenario": "Validate an observability pipeline with websocket source bearer auth returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Okta Integration", + "feature_file": "features/v2/okta_integration.feature", + "file": "v2/okta-integration/add-okta-account-returns-ok-response.json", + "scenario": "Add Okta account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Okta Integration", + "feature_file": "features/v2/okta_integration.feature", + "file": "v2/okta-integration/get-okta-account-returns-ok-response.json", + "scenario": "Get Okta account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Okta Integration", + "feature_file": "features/v2/okta_integration.feature", + "file": "v2/okta-integration/list-okta-accounts-returns-ok-response.json", + "scenario": "List Okta accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Okta Integration", + "feature_file": "features/v2/okta_integration.feature", + "file": "v2/okta-integration/update-okta-account-returns-ok-response.json", + "scenario": "Update Okta account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/create-on-call-escalation-policy-returns-created-response.json", + "scenario": "Create On-Call escalation policy returns \"Created\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/create-on-call-schedule-returns-created-response.json", + "scenario": "Create On-Call schedule returns \"Created\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/create-an-on-call-notification-channel-for-a-user-returns-created-response.json", + "scenario": "Create an On-Call notification channel for a user returns \"Created\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/create-an-on-call-notification-rule-for-a-user-returns-created-response.json", + "scenario": "Create an On-Call notification rule for a user returns \"Created\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/delete-on-call-escalation-policy-returns-no-content-response.json", + "scenario": "Delete On-Call escalation policy returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/delete-on-call-schedule-returns-no-content-response.json", + "scenario": "Delete On-Call schedule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/delete-an-on-call-notification-channel-for-a-user-returns-no-content-response.json", + "scenario": "Delete an On-Call notification channel for a user returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/delete-an-on-call-notification-rule-for-a-user-returns-no-content-response.json", + "scenario": "Delete an On-Call notification rule for a user returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/get-on-call-escalation-policy-returns-ok-response.json", + "scenario": "Get On-Call escalation policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/get-on-call-schedule-returns-ok-response.json", + "scenario": "Get On-Call schedule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/get-an-on-call-notification-channel-for-a-user-returns-ok-response.json", + "scenario": "Get an On-Call notification channel for a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/get-an-on-call-notification-rule-for-a-user-returns-ok-response.json", + "scenario": "Get an On-Call notification rule for a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/get-on-call-responders-for-a-schedule-returns-ok-response.json", + "scenario": "Get on-call responders for a schedule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/get-scheduled-on-call-user-returns-ok-response.json", + "scenario": "Get scheduled on-call user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/get-team-on-call-users-returns-ok-response.json", + "scenario": "Get team on-call users returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/list-on-call-notification-channels-for-a-user-returns-ok-response.json", + "scenario": "List On-Call notification channels for a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/list-on-call-notification-rules-for-a-user-returns-ok-response.json", + "scenario": "List On-Call notification rules for a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/set-on-call-team-routing-rules-returns-ok-response.json", + "scenario": "Set On-Call team routing rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/update-on-call-escalation-policy-returns-ok-response.json", + "scenario": "Update On-Call escalation policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/update-on-call-schedule-returns-ok-response.json", + "scenario": "Update On-Call schedule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "feature_file": "features/v2/on-call.feature", + "file": "v2/on-call/update-an-on-call-notification-rule-for-a-user-returns-ok-response.json", + "scenario": "Update an On-Call notification rule for a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "feature_file": "features/v2/opsgenie_integration.feature", + "file": "v2/opsgenie-integration/create-a-new-service-object-returns-created-response.json", + "scenario": "Create a new service object returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "feature_file": "features/v2/opsgenie_integration.feature", + "file": "v2/opsgenie-integration/delete-a-single-service-object-returns-ok-response.json", + "scenario": "Delete a single service object returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "feature_file": "features/v2/opsgenie_integration.feature", + "file": "v2/opsgenie-integration/get-a-single-service-object-returns-ok-response.json", + "scenario": "Get a single service object returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "feature_file": "features/v2/opsgenie_integration.feature", + "file": "v2/opsgenie-integration/get-all-service-objects-returns-ok-response.json", + "scenario": "Get all service objects returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "feature_file": "features/v2/opsgenie_integration.feature", + "file": "v2/opsgenie-integration/update-a-single-service-object-returns-ok-response.json", + "scenario": "Update a single service object returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/create-org-connection-returns-bad-request-response.json", + "scenario": "Create Org Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/create-org-connection-returns-conflict-response.json", + "scenario": "Create Org Connection returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/create-org-connection-returns-not-found-response.json", + "scenario": "Create Org Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/create-org-connection-returns-ok-response.json", + "scenario": "Create Org Connection returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/delete-org-connection-returns-bad-request-response.json", + "scenario": "Delete Org Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/delete-org-connection-returns-not-found-response.json", + "scenario": "Delete Org Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/delete-org-connection-returns-ok-response.json", + "scenario": "Delete Org Connection returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/list-org-connections-returns-ok-response.json", + "scenario": "List Org Connections returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/update-org-connection-returns-bad-request-response.json", + "scenario": "Update Org Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/update-org-connection-returns-not-found-response.json", + "scenario": "Update Org Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "feature_file": "features/v2/org_connections.feature", + "file": "v2/org-connections/update-org-connection-returns-ok-response.json", + "scenario": "Update Org Connection returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "feature_file": "features/v2/organizations.feature", + "file": "v2/organizations/get-a-specific-org-config-value-returns-not-found-response.json", + "scenario": "Get a specific Org Config value returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "feature_file": "features/v2/organizations.feature", + "file": "v2/organizations/get-a-specific-org-config-value-returns-ok-response.json", + "scenario": "Get a specific Org Config value returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "feature_file": "features/v2/organizations.feature", + "file": "v2/organizations/list-org-configs-returns-ok-response.json", + "scenario": "List Org Configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "feature_file": "features/v2/organizations.feature", + "file": "v2/organizations/update-a-specific-org-config-returns-bad-request-response.json", + "scenario": "Update a specific Org Config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "feature_file": "features/v2/organizations.feature", + "file": "v2/organizations/update-a-specific-org-config-returns-not-found-response.json", + "scenario": "Update a specific Org Config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "feature_file": "features/v2/organizations.feature", + "file": "v2/organizations/update-a-specific-org-config-returns-ok-response.json", + "scenario": "Update a specific Org Config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "feature_file": "features/v2/organizations.feature", + "file": "v2/organizations/upload-idp-metadata-returns-bad-request-caused-by-either-malformed-xml-or-invalid-saml-idp-metadata-response.json", + "scenario": "Upload IdP metadata returns \"Bad Request - caused by either malformed XML or invalid SAML IdP metadata\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/create-a-new-powerpack-returns-bad-request-response.json", + "scenario": "Create a new powerpack returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/create-a-new-powerpack-returns-ok-response.json", + "scenario": "Create a new powerpack returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/delete-a-powerpack-returns-ok-response.json", + "scenario": "Delete a powerpack returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/delete-a-powerpack-returns-powerpack-not-found-response.json", + "scenario": "Delete a powerpack returns \"Powerpack Not Found\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/get-a-powerpack-returns-ok-response.json", + "scenario": "Get a Powerpack returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/get-a-powerpack-returns-powerpack-not-found-response.json", + "scenario": "Get a Powerpack returns \"Powerpack Not Found.\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/get-all-powerpacks-returns-ok-response.json", + "scenario": "Get all powerpacks returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/get-all-powerpacks-returns-ok-response-with-pagination.json", + "scenario": "Get all powerpacks returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/update-a-powerpack-returns-bad-request-response.json", + "scenario": "Update a powerpack returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/update-a-powerpack-returns-ok-response.json", + "scenario": "Update a powerpack returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "feature_file": "features/v2/powerpack.feature", + "file": "v2/powerpack/update-a-powerpack-returns-powerpack-not-found-response.json", + "scenario": "Update a powerpack returns \"Powerpack Not Found\" response", + "version": "v2" + }, + { + "feature": "Processes", + "feature_file": "features/v2/processes.feature", + "file": "v2/processes/get-all-processes-returns-ok-response.json", + "scenario": "Get all processes returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Processes", + "feature_file": "features/v2/processes.feature", + "file": "v2/processes/get-all-processes-returns-ok-response-with-pagination.json", + "scenario": "Get all processes returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Reference Tables", + "feature_file": "features/v2/reference_tables.feature", + "file": "v2/reference-tables/create-reference-table-without-upload-or-access-details-returns-bad-request-response.json", + "scenario": "Create reference table without upload or access details returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Reference Tables", + "feature_file": "features/v2/reference_tables.feature", + "file": "v2/reference-tables/list-reference-table-rows-returns-bad-request-response-for-invalid-limit.json", + "scenario": "List reference table rows returns \"Bad Request\" response for invalid limit", + "version": "v2" + }, + { + "feature": "Reference Tables", + "feature_file": "features/v2/reference_tables.feature", + "file": "v2/reference-tables/list-reference-table-rows-returns-not-found-response.json", + "scenario": "List reference table rows returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "feature_file": "features/v2/restriction_policies.feature", + "file": "v2/restriction-policies/delete-a-restriction-policy-returns-bad-request-response.json", + "scenario": "Delete a restriction policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "feature_file": "features/v2/restriction_policies.feature", + "file": "v2/restriction-policies/delete-a-restriction-policy-returns-no-content-response.json", + "scenario": "Delete a restriction policy returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "feature_file": "features/v2/restriction_policies.feature", + "file": "v2/restriction-policies/get-a-restriction-policy-returns-bad-request-response.json", + "scenario": "Get a restriction policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "feature_file": "features/v2/restriction_policies.feature", + "file": "v2/restriction-policies/get-a-restriction-policy-returns-ok-response.json", + "scenario": "Get a restriction policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "feature_file": "features/v2/restriction_policies.feature", + "file": "v2/restriction-policies/update-a-restriction-policy-returns-bad-request-response.json", + "scenario": "Update a restriction policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "feature_file": "features/v2/restriction_policies.feature", + "file": "v2/restriction-policies/update-a-restriction-policy-returns-ok-response.json", + "scenario": "Update a restriction policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/add-a-user-to-a-role-returns-ok-response.json", + "scenario": "Add a user to a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-bad-request-response.json", + "scenario": "Create a new role by cloning an existing role returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-conflict-response.json", + "scenario": "Create a new role by cloning an existing role returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-ok-response.json", + "scenario": "Create a new role by cloning an existing role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/create-role-with-a-permission-returns-ok-response.json", + "scenario": "Create role with a permission returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/delete-role-returns-ok-response.json", + "scenario": "Delete role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/get-a-role-returns-ok-response.json", + "scenario": "Get a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/get-all-users-of-a-role-returns-ok-response.json", + "scenario": "Get all users of a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/grant-permission-to-a-role-returns-ok-response.json", + "scenario": "Grant permission to a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/list-permissions-for-a-role-returns-ok-response.json", + "scenario": "List permissions for a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/list-permissions-returns-ok-response.json", + "scenario": "List permissions returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/list-roles-returns-ok-response.json", + "scenario": "List roles returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/remove-a-user-from-a-role-returns-ok-response.json", + "scenario": "Remove a user from a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/revoke-permission-returns-bad-request-response.json", + "scenario": "Revoke permission returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/revoke-permission-returns-not-found-response.json", + "scenario": "Revoke permission returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/revoke-permission-returns-ok-response.json", + "scenario": "Revoke permission returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/update-a-role-returns-bad-request-response.json", + "scenario": "Update a role returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/update-a-role-returns-bad-role-id-response.json", + "scenario": "Update a role returns \"Bad Role ID\" response", + "version": "v2" + }, + { + "feature": "Roles", + "feature_file": "features/v2/roles.feature", + "file": "v2/roles/update-a-role-returns-not-found-response.json", + "scenario": "Update a role returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/aggregate-rum-events-returns-ok-response.json", + "scenario": "Aggregate RUM events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/create-a-new-rum-application-returns-ok-response.json", + "scenario": "Create a new RUM application returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/create-a-new-rum-application-with-product-scales-returns-ok-response.json", + "scenario": "Create a new RUM application with Product Scales returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/delete-a-rum-application-returns-no-content-response.json", + "scenario": "Delete a RUM application returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/delete-a-rum-application-returns-not-found-response.json", + "scenario": "Delete a RUM application returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/get-a-rum-application-returns-not-found-response.json", + "scenario": "Get a RUM application returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/get-a-rum-application-returns-ok-response.json", + "scenario": "Get a RUM application returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/get-a-list-of-rum-events-returns-ok-response.json", + "scenario": "Get a list of RUM events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/get-a-list-of-rum-events-returns-ok-response-with-pagination.json", + "scenario": "Get a list of RUM events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/list-all-the-rum-applications-returns-ok-response.json", + "scenario": "List all the RUM applications returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/search-rum-events-returns-ok-response.json", + "scenario": "Search RUM events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/search-rum-events-returns-ok-response-with-pagination.json", + "scenario": "Search RUM events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/update-a-rum-application-returns-ok-response.json", + "scenario": "Update a RUM application returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/update-a-rum-application-returns-unprocessable-entity-response.json", + "scenario": "Update a RUM application returns \"Unprocessable Entity.\" response", + "version": "v2" + }, + { + "feature": "RUM", + "feature_file": "features/v2/rum.feature", + "file": "v2/rum/update-a-rum-application-with-product-scales-returns-ok-response.json", + "scenario": "Update a RUM application with Product Scales returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/create-a-rum-based-metric-returns-bad-request-response.json", + "scenario": "Create a RUM-based metric returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/create-a-rum-based-metric-returns-conflict-response.json", + "scenario": "Create a RUM-based metric returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/create-a-rum-based-metric-returns-created-response.json", + "scenario": "Create a RUM-based metric returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/delete-a-rum-based-metric-returns-no-content-response.json", + "scenario": "Delete a RUM-based metric returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/delete-a-rum-based-metric-returns-not-found-response.json", + "scenario": "Delete a RUM-based metric returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/get-a-rum-based-metric-returns-not-found-response.json", + "scenario": "Get a RUM-based metric returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/get-a-rum-based-metric-returns-ok-response.json", + "scenario": "Get a RUM-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/get-all-rum-based-metrics-returns-ok-response.json", + "scenario": "Get all RUM-based metrics returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/update-a-rum-based-metric-returns-bad-request-response.json", + "scenario": "Update a RUM-based metric returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/update-a-rum-based-metric-returns-conflict-response.json", + "scenario": "Update a RUM-based metric returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/update-a-rum-based-metric-returns-not-found-response.json", + "scenario": "Update a RUM-based metric returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "feature_file": "features/v2/rum_metrics.feature", + "file": "v2/rum-metrics/update-a-rum-based-metric-returns-ok-response.json", + "scenario": "Update a RUM-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM Remote Config", + "feature_file": "features/v2/rum_remote_config.feature", + "file": "v2/rum-remote-config/get-a-rum-sdk-configuration-returns-forbidden-response.json", + "scenario": "Get a RUM SDK configuration returns \"Forbidden\" response", + "version": "v2" + }, + { + "feature": "RUM Remote Config", + "feature_file": "features/v2/rum_remote_config.feature", + "file": "v2/rum-remote-config/update-a-rum-sdk-configuration-returns-forbidden-response.json", + "scenario": "Update a RUM SDK configuration returns \"Forbidden\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/create-a-rum-retention-filter-returns-bad-request-response.json", + "scenario": "Create a RUM retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/create-a-rum-retention-filter-returns-created-response.json", + "scenario": "Create a RUM retention filter returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/delete-a-rum-retention-filter-returns-no-content-response.json", + "scenario": "Delete a RUM retention filter returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/delete-a-rum-retention-filter-returns-not-found-response.json", + "scenario": "Delete a RUM retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/get-a-rum-retention-filter-returns-not-found-response.json", + "scenario": "Get a RUM retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/get-a-rum-retention-filter-returns-ok-response.json", + "scenario": "Get a RUM retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/get-all-rum-retention-filters-returns-ok-response.json", + "scenario": "Get all RUM retention filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/order-rum-retention-filters-returns-bad-request-response.json", + "scenario": "Order RUM retention filters returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/order-rum-retention-filters-returns-ordered-response.json", + "scenario": "Order RUM retention filters returns \"Ordered\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/update-a-rum-retention-filter-returns-bad-request-response.json", + "scenario": "Update a RUM retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/update-a-rum-retention-filter-returns-not-found-response.json", + "scenario": "Update a RUM retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "feature_file": "features/v2/rum_retention_filters.feature", + "file": "v2/rum-retention-filters/update-a-rum-retention-filter-returns-updated-response.json", + "scenario": "Update a RUM retention filter returns \"Updated\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/create-a-new-rule-returns-bad-request-response.json", + "scenario": "Create a new rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/create-a-new-rule-returns-created-response.json", + "scenario": "Create a new rule returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/create-outcomes-batch-returns-bad-request-response.json", + "scenario": "Create outcomes batch returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/create-outcomes-batch-returns-ok-response.json", + "scenario": "Create outcomes batch returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/delete-a-rule-returns-not-found-response.json", + "scenario": "Delete a rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/delete-a-rule-returns-ok-response.json", + "scenario": "Delete a rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/list-all-rule-outcomes-returns-ok-response.json", + "scenario": "List all rule outcomes returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/list-all-rule-outcomes-returns-ok-response-with-pagination.json", + "scenario": "List all rule outcomes returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/list-all-rules-returns-ok-response.json", + "scenario": "List all rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/list-all-rules-returns-ok-response-with-pagination.json", + "scenario": "List all rules returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/update-scorecard-outcomes-asynchronously-returns-accepted-response.json", + "scenario": "Update Scorecard outcomes asynchronously returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/update-scorecard-outcomes-asynchronously-returns-bad-request-response.json", + "scenario": "Update Scorecard outcomes asynchronously returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/update-scorecard-outcomes-asynchronously-returns-conflict-response.json", + "scenario": "Update Scorecard outcomes asynchronously returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/update-an-existing-rule-returns-rule-updated-successfully-response.json", + "scenario": "Update an existing rule returns \"Rule updated successfully\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/update-an-existing-scorecard-rule-returns-bad-request-response.json", + "scenario": "Update an existing scorecard rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "feature_file": "features/v2/scorecards.feature", + "file": "v2/scorecards/update-an-existing-scorecard-rule-returns-not-found-response.json", + "scenario": "Update an existing scorecard rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Seats", + "feature_file": "features/v2/seats.feature", + "file": "v2/seats/assign-seats-to-users-returns-unprocessable-entity-response.json", + "scenario": "Assign seats to users returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Seats", + "feature_file": "features/v2/seats.feature", + "file": "v2/seats/assign-seats-to-users-returns-unprocessable-entity-response-when-product-code-is-empty.json", + "scenario": "Assign seats to users returns \"Unprocessable Entity\" response when product_code is empty", + "version": "v2" + }, + { + "feature": "Seats", + "feature_file": "features/v2/seats.feature", + "file": "v2/seats/assign-seats-to-users-returns-unprocessable-entity-response-when-user-uuids-is-empty.json", + "scenario": "Assign seats to users returns \"Unprocessable Entity\" response when user_uuids is empty", + "version": "v2" + }, + { + "feature": "Seats", + "feature_file": "features/v2/seats.feature", + "file": "v2/seats/get-users-with-seats-returns-ok-response.json", + "scenario": "Get users with seats returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Seats", + "feature_file": "features/v2/seats.feature", + "file": "v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response.json", + "scenario": "Unassign seats from users returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Seats", + "feature_file": "features/v2/seats.feature", + "file": "v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response-when-product-code-is-empty.json", + "scenario": "Unassign seats from users returns \"Unprocessable Entity\" response when product_code is empty", + "version": "v2" + }, + { + "feature": "Seats", + "feature_file": "features/v2/seats.feature", + "file": "v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response-when-user-uuids-is-empty.json", + "scenario": "Unassign seats from users returns \"Unprocessable Entity\" response when user_uuids is empty", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/attach-security-finding-to-a-jira-issue-returns-ok-response.json", + "scenario": "Attach security finding to a Jira issue returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/attach-security-finding-to-a-case-returns-ok-response.json", + "scenario": "Attach security finding to a case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-bad-request-response.json", + "scenario": "Attach security findings to a Jira issue returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-not-found-response.json", + "scenario": "Attach security findings to a Jira issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-ok-response.json", + "scenario": "Attach security findings to a Jira issue returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/attach-security-findings-to-a-case-returns-bad-request-response.json", + "scenario": "Attach security findings to a case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/attach-security-findings-to-a-case-returns-not-found-response.json", + "scenario": "Attach security findings to a case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/attach-security-findings-to-a-case-returns-ok-response.json", + "scenario": "Attach security findings to a case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/bulk-export-security-monitoring-rules-returns-ok-response.json", + "scenario": "Bulk export security monitoring rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/cancel-a-historical-job-returns-bad-request-response.json", + "scenario": "Cancel a historical job returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/cancel-a-historical-job-returns-not-found-response.json", + "scenario": "Cancel a historical job returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/cancel-a-historical-job-returns-ok-response.json", + "scenario": "Cancel a historical job returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/change-the-related-incidents-of-a-security-signal-returns-ok-response.json", + "scenario": "Change the related incidents of a security signal returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/change-the-triage-state-of-a-security-signal-returns-ok-response.json", + "scenario": "Change the triage state of a security signal returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/convert-a-job-result-to-a-signal-returns-bad-request-response.json", + "scenario": "Convert a job result to a signal returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/convert-a-rule-from-json-to-terraform-returns-ok-response.json", + "scenario": "Convert a rule from JSON to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/convert-an-existing-rule-from-json-to-terraform-returns-ok-response.json", + "scenario": "Convert an existing rule from JSON to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/convert-security-monitoring-resource-to-terraform-returns-ok-response.json", + "scenario": "Convert security monitoring resource to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-jira-issue-for-security-finding-returns-created-response.json", + "scenario": "Create Jira issue for security finding returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-jira-issue-for-security-findings-returns-created-response.json", + "scenario": "Create Jira issue for security findings returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-jira-issues-for-security-findings-returns-bad-request-response.json", + "scenario": "Create Jira issues for security findings returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-jira-issues-for-security-findings-returns-created-response.json", + "scenario": "Create Jira issues for security findings returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-jira-issues-for-security-findings-returns-not-found-response.json", + "scenario": "Create Jira issues for security findings returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-cloud-configuration-rule-returns-ok-response.json", + "scenario": "Create a cloud_configuration rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-critical-asset-returns-ok-response.json", + "scenario": "Create a critical asset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-custom-framework-returns-bad-request-response.json", + "scenario": "Create a custom framework returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-custom-framework-returns-conflict-response.json", + "scenario": "Create a custom framework returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-custom-framework-returns-ok-response.json", + "scenario": "Create a custom framework returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-returns-ok-response.json", + "scenario": "Create a detection rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-with-detection-method-anomaly-detection-returns-ok-response.json", + "scenario": "Create a detection rule with detection method 'anomaly_detection' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-with-detection-method-anomaly-detection-with-enabled-feature-instantaneousbaseline-returns-ok-response.json", + "scenario": "Create a detection rule with detection method 'anomaly_detection' with enabled feature 'instantaneousBaseline' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-with-detection-method-sequence-detection-returns-ok-response.json", + "scenario": "Create a detection rule with detection method 'sequence_detection' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-with-detection-method-third-party-returns-ok-response.json", + "scenario": "Create a detection rule with detection method 'third_party' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-with-type-application-security-returns-ok-response.json", + "scenario": "Create a detection rule with type 'application_security 'returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-with-type-impossible-travel-and-baselineuserlocationsduration-returns-ok-response.json", + "scenario": "Create a detection rule with type 'impossible_travel' and baselineUserLocationsDuration returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-with-type-impossible-travel-returns-ok-response.json", + "scenario": "Create a detection rule with type 'impossible_travel' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-with-type-signal-correlation-returns-ok-response.json", + "scenario": "Create a detection rule with type 'signal_correlation' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-detection-rule-with-type-workload-security-returns-ok-response.json", + "scenario": "Create a detection rule with type 'workload_security' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-due-date-rule-returns-successfully-created-the-due-date-rule-response.json", + "scenario": "Create a due date rule returns \"Successfully created the due date rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-mute-rule-returns-successfully-created-the-mute-rule-response.json", + "scenario": "Create a mute rule returns \"Successfully created the mute rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-new-signal-based-notification-rule-returns-successfully-created-the-notification-rule-response.json", + "scenario": "Create a new signal-based notification rule returns \"Successfully created the notification rule.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-new-vulnerability-based-notification-rule-returns-successfully-created-the-notification-rule-response.json", + "scenario": "Create a new vulnerability-based notification rule returns \"Successfully created the notification rule.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-new-vulnerability-based-notification-rule-with-sast-and-secret-rule-types-returns-successfully-created-the-notification-rule-response.json", + "scenario": "Create a new vulnerability-based notification rule with sast and secret rule types returns \"Successfully created the notification rule.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-scheduled-detection-rule-returns-ok-response.json", + "scenario": "Create a scheduled detection rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-scheduled-rule-without-rrule-returns-bad-request-response.json", + "scenario": "Create a scheduled rule without rrule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-security-filter-returns-ok-response.json", + "scenario": "Create a security filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-suppression-rule-returns-ok-response.json", + "scenario": "Create a suppression rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-suppression-rule-with-an-exclusion-query-returns-ok-response.json", + "scenario": "Create a suppression rule with an exclusion query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-a-ticket-creation-rule-returns-successfully-created-the-ticket-creation-rule-response.json", + "scenario": "Create a ticket creation rule returns \"Successfully created the ticket creation rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-case-for-security-finding-returns-created-response.json", + "scenario": "Create case for security finding returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-case-for-security-findings-returns-created-response.json", + "scenario": "Create case for security findings returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-cases-for-security-findings-returns-bad-request-response.json", + "scenario": "Create cases for security findings returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-cases-for-security-findings-returns-created-response.json", + "scenario": "Create cases for security findings returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-cases-for-security-findings-returns-not-found-response.json", + "scenario": "Create cases for security findings returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-or-update-an-indicator-triage-state-returns-bad-request-response.json", + "scenario": "Create or update an indicator triage state returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/create-or-update-an-indicator-triage-state-returns-created-response.json", + "scenario": "Create or update an indicator triage state returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-critical-asset-returns-not-found-response.json", + "scenario": "Delete a critical asset returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-critical-asset-returns-ok-response.json", + "scenario": "Delete a critical asset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-custom-framework-returns-bad-request-response.json", + "scenario": "Delete a custom framework returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-custom-framework-returns-ok-response.json", + "scenario": "Delete a custom framework returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-due-date-rule-returns-rule-successfully-deleted-response.json", + "scenario": "Delete a due date rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-mute-rule-returns-rule-successfully-deleted-response.json", + "scenario": "Delete a mute rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-security-filter-returns-no-content-response.json", + "scenario": "Delete a security filter returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-signal-based-notification-rule-returns-not-found-response.json", + "scenario": "Delete a signal-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-signal-based-notification-rule-returns-rule-successfully-deleted-response.json", + "scenario": "Delete a signal-based notification rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-suppression-rule-returns-ok-response.json", + "scenario": "Delete a suppression rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-ticket-creation-rule-returns-rule-successfully-deleted-response.json", + "scenario": "Delete a ticket creation rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-vulnerability-based-notification-rule-returns-not-found-response.json", + "scenario": "Delete a vulnerability-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-a-vulnerability-based-notification-rule-returns-rule-successfully-deleted-response.json", + "scenario": "Delete a vulnerability-based notification rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-an-existing-job-returns-bad-request-response.json", + "scenario": "Delete an existing job returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-an-existing-job-returns-not-found-response.json", + "scenario": "Delete an existing job returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/delete-an-existing-rule-returns-ok-response.json", + "scenario": "Delete an existing rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/detach-security-findings-from-their-case-returns-bad-request-response.json", + "scenario": "Detach security findings from their case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/detach-security-findings-from-their-case-returns-no-content-response.json", + "scenario": "Detach security findings from their case returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/detach-security-findings-from-their-case-returns-not-found-response.json", + "scenario": "Detach security findings from their case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/export-security-monitoring-resource-to-terraform-returns-ok-response.json", + "scenario": "Export security monitoring resource to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/export-security-monitoring-resources-to-terraform-returns-ok-response.json", + "scenario": "Export security monitoring resources to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-sbom-returns-not-found-asset-not-found-response.json", + "scenario": "Get SBOM returns \"Not found: asset not found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-cloud-configuration-rule-s-details-returns-ok-response.json", + "scenario": "Get a cloud configuration rule's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-critical-asset-returns-not-found-response.json", + "scenario": "Get a critical asset returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-critical-asset-returns-ok-response.json", + "scenario": "Get a critical asset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-custom-framework-returns-bad-request-response.json", + "scenario": "Get a custom framework returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-custom-framework-returns-ok-response.json", + "scenario": "Get a custom framework returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-due-date-rule-returns-successfully-retrieved-the-due-date-rule-response.json", + "scenario": "Get a due date rule returns \"Successfully retrieved the due date rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-finding-returns-ok-response.json", + "scenario": "Get a finding returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-job-s-details-returns-bad-request-response.json", + "scenario": "Get a job's details returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-job-s-details-returns-not-found-response.json", + "scenario": "Get a job's details returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-job-s-details-returns-ok-response.json", + "scenario": "Get a job's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-list-of-security-signals-returns-ok-response-with-pagination.json", + "scenario": "Get a list of security signals returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-mute-rule-returns-successfully-retrieved-the-mute-rule-response.json", + "scenario": "Get a mute rule returns \"Successfully retrieved the mute rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-quick-list-of-security-signals-returns-ok-response-with-pagination.json", + "scenario": "Get a quick list of security signals returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-rule-s-details-returns-not-found-response.json", + "scenario": "Get a rule's details returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-rule-s-details-returns-ok-response.json", + "scenario": "Get a rule's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-security-filter-returns-ok-response.json", + "scenario": "Get a security filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-signal-s-details-returns-not-found-response.json", + "scenario": "Get a signal's details returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-signal-s-details-returns-ok-response.json", + "scenario": "Get a signal's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-suppression-rule-returns-not-found-response.json", + "scenario": "Get a suppression rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-suppression-rule-returns-ok-response.json", + "scenario": "Get a suppression rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-suppression-s-version-history-returns-not-found-response.json", + "scenario": "Get a suppression's version history returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-suppression-s-version-history-returns-ok-response.json", + "scenario": "Get a suppression's version history returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-a-ticket-creation-rule-returns-successfully-retrieved-the-ticket-creation-rule-response.json", + "scenario": "Get a ticket creation rule returns \"Successfully retrieved the ticket creation rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-all-critical-assets-returns-ok-response.json", + "scenario": "Get all critical assets returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-all-due-date-rules-returns-successfully-retrieved-the-list-of-due-date-rules-response.json", + "scenario": "Get all due date rules returns \"Successfully retrieved the list of due date rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-all-mute-rules-returns-successfully-retrieved-the-list-of-mute-rules-response.json", + "scenario": "Get all mute rules returns \"Successfully retrieved the list of mute rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-all-security-filters-returns-ok-response.json", + "scenario": "Get all security filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-pagination.json", + "scenario": "Get all suppression rules returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-sort-ascending.json", + "scenario": "Get all suppression rules returns \"OK\" response with sort ascending", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-sort-descending.json", + "scenario": "Get all suppression rules returns \"OK\" response with sort descending", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-all-ticket-creation-rules-returns-successfully-retrieved-the-list-of-ticket-creation-rules-response.json", + "scenario": "Get all ticket creation rules returns \"Successfully retrieved the list of ticket creation rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-an-indicator-of-compromise-returns-not-found-response.json", + "scenario": "Get an indicator of compromise returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-an-indicator-of-compromise-returns-ok-response.json", + "scenario": "Get an indicator of compromise returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-critical-assets-affecting-a-specific-rule-returns-ok-response.json", + "scenario": "Get critical assets affecting a specific rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-details-of-a-signal-based-notification-rule-returns-not-found-response.json", + "scenario": "Get details of a signal-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-details-of-a-signal-based-notification-rule-returns-notification-rule-details-response.json", + "scenario": "Get details of a signal-based notification rule returns \"Notification rule details.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-details-of-a-vulnerability-notification-rule-returns-not-found-response.json", + "scenario": "Get details of a vulnerability notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-details-of-a-vulnerability-notification-rule-returns-notification-rule-details-response.json", + "scenario": "Get details of a vulnerability notification rule returns \"Notification rule details.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-rule-version-history-returns-ok-response.json", + "scenario": "Get rule version history returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-suppressions-affecting-a-specific-rule-returns-not-found-response.json", + "scenario": "Get suppressions affecting a specific rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-suppressions-affecting-a-specific-rule-returns-ok-response.json", + "scenario": "Get suppressions affecting a specific rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-suppressions-affecting-future-rule-returns-bad-request-response.json", + "scenario": "Get suppressions affecting future rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-suppressions-affecting-future-rule-returns-ok-response.json", + "scenario": "Get suppressions affecting future rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-the-list-of-signal-based-notification-rules-returns-the-list-of-notification-rules-response.json", + "scenario": "Get the list of signal-based notification rules returns \"The list of notification rules.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/get-the-list-of-vulnerability-notification-rules-returns-the-list-of-notification-rules-response.json", + "scenario": "Get the list of vulnerability notification rules returns \"The list of notification rules.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-assets-sboms-returns-bad-request-invalid-pagination-token-response.json", + "scenario": "List assets SBOMs returns \"Bad request: Invalid pagination token.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-assets-sboms-returns-ok-response.json", + "scenario": "List assets SBOMs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-findings-returns-ok-response.json", + "scenario": "List findings returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-findings-returns-ok-response-with-details.json", + "scenario": "List findings returns \"OK\" response with details", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-findings-with-detection-type-query-param-returns-ok-response.json", + "scenario": "List findings with detection_type query param returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-indicators-of-compromise-returns-bad-request-response.json", + "scenario": "List indicators of compromise returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-indicators-of-compromise-returns-ok-response.json", + "scenario": "List indicators of compromise returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-resource-filters-returns-bad-request-response.json", + "scenario": "List resource filters returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-resource-filters-returns-ok-response.json", + "scenario": "List resource filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-rules-returns-ok-response.json", + "scenario": "List rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-scanned-assets-metadata-returns-bad-request-invalid-pagination-token-response.json", + "scenario": "List scanned assets metadata returns \"Bad request: Invalid Pagination Token\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-scanned-assets-metadata-returns-ok-response.json", + "scenario": "List scanned assets metadata returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-security-findings-returns-bad-request-response.json", + "scenario": "List security findings returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-security-findings-returns-ok-response.json", + "scenario": "List security findings returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-security-findings-returns-ok-response-with-pagination.json", + "scenario": "List security findings returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-vulnerabilities-returns-bad-request-invalid-pagination-token-response.json", + "scenario": "List vulnerabilities returns \"Bad request: Invalid pagination token.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-vulnerabilities-returns-ok-response.json", + "scenario": "List vulnerabilities returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-vulnerable-assets-returns-bad-request-invalid-pagination-token-response.json", + "scenario": "List vulnerable assets returns \"Bad request: Invalid Pagination Token\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/list-vulnerable-assets-returns-ok-response.json", + "scenario": "List vulnerable assets returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/modify-the-triage-assignee-of-a-security-signal-returns-ok-response.json", + "scenario": "Modify the triage assignee of a security signal returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/mute-security-findings-returns-accepted-response.json", + "scenario": "Mute security findings returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/mute-security-findings-returns-not-found-response.json", + "scenario": "Mute security findings returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/mute-security-findings-returns-unprocessable-entity-response.json", + "scenario": "Mute security findings returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/patch-a-signal-based-notification-rule-returns-bad-request-response.json", + "scenario": "Patch a signal-based notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/patch-a-signal-based-notification-rule-returns-not-found-response.json", + "scenario": "Patch a signal-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/patch-a-signal-based-notification-rule-returns-notification-rule-successfully-patched-response.json", + "scenario": "Patch a signal-based notification rule returns \"Notification rule successfully patched.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-bad-request-response.json", + "scenario": "Patch a vulnerability-based notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-not-found-response.json", + "scenario": "Patch a vulnerability-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-notification-rule-successfully-patched-response.json", + "scenario": "Patch a vulnerability-based notification rule returns \"Notification rule successfully patched.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/reorder-due-date-rules-returns-successfully-reordered-the-due-date-rules-response.json", + "scenario": "Reorder due date rules returns \"Successfully reordered the due date rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/reorder-mute-rules-returns-successfully-reordered-the-mute-rules-response.json", + "scenario": "Reorder mute rules returns \"Successfully reordered the mute rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/reorder-ticket-creation-rules-returns-successfully-reordered-the-ticket-creation-rules-response.json", + "scenario": "Reorder ticket creation rules returns \"Successfully reordered the ticket creation rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-conflict-response.json", + "scenario": "Restore a rule to a historical version returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-not-found-response.json", + "scenario": "Restore a rule to a historical version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-ok-response.json", + "scenario": "Restore a rule to a historical version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/run-a-historical-job-returns-bad-request-response.json", + "scenario": "Run a historical job returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/run-a-historical-job-returns-not-found-response.json", + "scenario": "Run a historical job returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/run-a-historical-job-returns-status-created-response.json", + "scenario": "Run a historical job returns \"Status created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/search-security-findings-returns-bad-request-response.json", + "scenario": "Search security findings returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/search-security-findings-returns-ok-response.json", + "scenario": "Search security findings returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/search-security-findings-returns-ok-response-with-pagination.json", + "scenario": "Search security findings returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/test-a-notification-rule-returns-ok-response.json", + "scenario": "Test a notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/test-a-rule-returns-ok-response.json", + "scenario": "Test a rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/unmute-security-findings-returns-accepted-response.json", + "scenario": "Unmute security findings returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/unmute-security-findings-returns-not-found-response.json", + "scenario": "Unmute security findings returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/unmute-security-findings-returns-unprocessable-entity-response.json", + "scenario": "Unmute security findings returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-cloud-configuration-rule-s-details-returns-ok-response.json", + "scenario": "Update a cloud configuration rule's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-critical-asset-returns-not-found-response.json", + "scenario": "Update a critical asset returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-critical-asset-returns-ok-response.json", + "scenario": "Update a critical asset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-custom-framework-returns-bad-request-response.json", + "scenario": "Update a custom framework returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-custom-framework-returns-ok-response.json", + "scenario": "Update a custom framework returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-due-date-rule-returns-successfully-updated-the-due-date-rule-response.json", + "scenario": "Update a due date rule returns \"Successfully updated the due date rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-mute-rule-returns-successfully-updated-the-mute-rule-response.json", + "scenario": "Update a mute rule returns \"Successfully updated the mute rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-security-filter-returns-ok-response.json", + "scenario": "Update a security filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-suppression-rule-returns-ok-response.json", + "scenario": "Update a suppression rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-a-ticket-creation-rule-returns-successfully-updated-the-ticket-creation-rule-response.json", + "scenario": "Update a ticket creation rule returns \"Successfully updated the ticket creation rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-an-existing-rule-returns-bad-request-response.json", + "scenario": "Update an existing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-an-existing-rule-returns-not-found-response.json", + "scenario": "Update an existing rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-an-existing-rule-returns-ok-response.json", + "scenario": "Update an existing rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-resource-filters-returns-bad-request-response.json", + "scenario": "Update resource filters returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/update-resource-filters-returns-ok-response.json", + "scenario": "Update resource filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/validate-a-detection-rule-returns-bad-request-response.json", + "scenario": "Validate a detection rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/validate-a-detection-rule-returns-ok-response.json", + "scenario": "Validate a detection rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/validate-a-detection-rule-with-detection-method-new-value-with-enabled-feature-instantaneousbaseline-returns-ok-response.json", + "scenario": "Validate a detection rule with detection method 'new_value' with enabled feature 'instantaneousBaseline' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/validate-a-detection-rule-with-detection-method-sequence-detection-returns-ok-response.json", + "scenario": "Validate a detection rule with detection method 'sequence_detection' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/validate-a-suppression-rule-returns-bad-request-response.json", + "scenario": "Validate a suppression rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "feature_file": "features/v2/security_monitoring.feature", + "file": "v2/security-monitoring/validate-a-suppression-rule-returns-ok-response.json", + "scenario": "Validate a suppression rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/create-scanning-group-returns-ok-response.json", + "scenario": "Create Scanning Group returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/create-scanning-rule-returns-bad-request-response.json", + "scenario": "Create Scanning Rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/create-scanning-rule-returns-ok-response.json", + "scenario": "Create Scanning Rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/create-scanning-rule-with-should-save-match-returns-ok-response.json", + "scenario": "Create Scanning Rule with should_save_match returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/delete-scanning-group-returns-ok-response.json", + "scenario": "Delete Scanning Group returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/delete-scanning-rule-returns-ok-response.json", + "scenario": "Delete Scanning Rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/list-scanning-groups-returns-ok-response.json", + "scenario": "List Scanning Groups returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/reorder-groups-returns-bad-request-response.json", + "scenario": "Reorder Groups returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/reorder-groups-returns-ok-response.json", + "scenario": "Reorder Groups returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/update-scanning-group-returns-ok-response.json", + "scenario": "Update Scanning Group returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/update-scanning-rule-returns-bad-request-response.json", + "scenario": "Update Scanning Rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "feature_file": "features/v2/sensitive_data_scanner.feature", + "file": "v2/sensitive-data-scanner/update-scanning-rule-returns-ok-response.json", + "scenario": "Update Scanning Rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/create-a-service-account-returns-ok-response.json", + "scenario": "Create a service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/create-an-access-token-for-a-service-account-returns-created-response.json", + "scenario": "Create an access token for a service account returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/create-an-application-key-for-this-service-account-returns-created-response.json", + "scenario": "Create an application key for this service account returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/create-an-application-key-with-scopes-for-this-service-account-returns-created-response.json", + "scenario": "Create an application key with scopes for this service account returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/delete-an-application-key-for-this-service-account-returns-no-content-response.json", + "scenario": "Delete an application key for this service account returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/edit-an-application-key-for-this-service-account-returns-ok-response.json", + "scenario": "Edit an application key for this service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/get-an-access-token-for-a-service-account-returns-ok-response.json", + "scenario": "Get an access token for a service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/get-one-application-key-for-this-service-account-returns-ok-response.json", + "scenario": "Get one application key for this service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/list-access-tokens-for-a-service-account-returns-ok-response.json", + "scenario": "List access tokens for a service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/list-application-keys-for-this-service-account-returns-ok-response.json", + "scenario": "List application keys for this service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/revoke-an-access-token-for-a-service-account-returns-no-content-response.json", + "scenario": "Revoke an access token for a service account returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "feature_file": "features/v2/service_accounts.feature", + "file": "v2/service-accounts/update-an-access-token-for-a-service-account-returns-ok-response.json", + "scenario": "Update an access token for a service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "feature_file": "features/v2/service_definition.feature", + "file": "v2/service-definition/create-or-update-service-definition-using-schema-v2-returns-created-response.json", + "scenario": "Create or update service definition using schema v2 returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "feature_file": "features/v2/service_definition.feature", + "file": "v2/service-definition/create-or-update-service-definition-using-schema-v2-1-returns-created-response.json", + "scenario": "Create or update service definition using schema v2-1 returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "feature_file": "features/v2/service_definition.feature", + "file": "v2/service-definition/create-or-update-service-definition-using-schema-v2-2-returns-created-response.json", + "scenario": "Create or update service definition using schema v2-2 returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "feature_file": "features/v2/service_definition.feature", + "file": "v2/service-definition/delete-a-single-service-definition-returns-not-found-response.json", + "scenario": "Delete a single service definition returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "feature_file": "features/v2/service_definition.feature", + "file": "v2/service-definition/delete-a-single-service-definition-returns-ok-response.json", + "scenario": "Delete a single service definition returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "feature_file": "features/v2/service_definition.feature", + "file": "v2/service-definition/get-a-single-service-definition-returns-not-found-response.json", + "scenario": "Get a single service definition returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "feature_file": "features/v2/service_definition.feature", + "file": "v2/service-definition/get-a-single-service-definition-returns-ok-response.json", + "scenario": "Get a single service definition returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "feature_file": "features/v2/service_definition.feature", + "file": "v2/service-definition/get-all-service-definitions-returns-ok-response.json", + "scenario": "Get all service definitions returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "feature_file": "features/v2/service_definition.feature", + "file": "v2/service-definition/get-all-service-definitions-returns-ok-response-with-pagination.json", + "scenario": "Get all service definitions returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v2/service_level_objectives.feature", + "file": "v2/service-level-objectives/create-a-new-slo-report-returns-bad-request-response.json", + "scenario": "Create a new SLO report returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v2/service_level_objectives.feature", + "file": "v2/service-level-objectives/create-a-new-slo-report-returns-ok-response.json", + "scenario": "Create a new SLO report returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v2/service_level_objectives.feature", + "file": "v2/service-level-objectives/get-slo-report-returns-bad-request-response.json", + "scenario": "Get SLO report returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v2/service_level_objectives.feature", + "file": "v2/service-level-objectives/get-slo-report-returns-not-found-response.json", + "scenario": "Get SLO report returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v2/service_level_objectives.feature", + "file": "v2/service-level-objectives/get-slo-report-status-returns-bad-request-response.json", + "scenario": "Get SLO report status returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v2/service_level_objectives.feature", + "file": "v2/service-level-objectives/get-slo-report-status-returns-not-found-response.json", + "scenario": "Get SLO report status returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "feature_file": "features/v2/service_level_objectives.feature", + "file": "v2/service-level-objectives/get-slo-report-status-returns-ok-response.json", + "scenario": "Get SLO report status returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Software Catalog", + "feature_file": "features/v2/software_catalog.feature", + "file": "v2/software-catalog/create-or-update-software-catalog-entity-using-schema-v3-returns-accepted-response.json", + "scenario": "Create or update software catalog entity using schema v3 returns \"ACCEPTED\" response", + "version": "v2" + }, + { + "feature": "Software Catalog", + "feature_file": "features/v2/software_catalog.feature", + "file": "v2/software-catalog/get-a-list-of-entities-returns-ok-response.json", + "scenario": "Get a list of entities returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Software Catalog", + "feature_file": "features/v2/software_catalog.feature", + "file": "v2/software-catalog/get-a-list-of-entity-relations-returns-ok-response.json", + "scenario": "Get a list of entity relations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Software Catalog", + "feature_file": "features/v2/software_catalog.feature", + "file": "v2/software-catalog/get-a-list-of-entity-relations-returns-ok-response-with-pagination.json", + "scenario": "Get a list of entity relations returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Spans", + "feature_file": "features/v2/spans.feature", + "file": "v2/spans/aggregate-spans-returns-ok-response.json", + "scenario": "Aggregate spans returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans", + "feature_file": "features/v2/spans.feature", + "file": "v2/spans/get-a-list-of-spans-returns-ok-response.json", + "scenario": "Get a list of spans returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans", + "feature_file": "features/v2/spans.feature", + "file": "v2/spans/get-a-list-of-spans-returns-ok-response-with-pagination.json", + "scenario": "Get a list of spans returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Spans", + "feature_file": "features/v2/spans.feature", + "file": "v2/spans/get-a-list-of-spans-returns-unprocessable-entity-response.json", + "scenario": "Get a list of spans returns \"Unprocessable Entity.\" response", + "version": "v2" + }, + { + "feature": "Spans", + "feature_file": "features/v2/spans.feature", + "file": "v2/spans/search-spans-returns-ok-response.json", + "scenario": "Search spans returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans", + "feature_file": "features/v2/spans.feature", + "file": "v2/spans/search-spans-returns-ok-response-with-pagination.json", + "scenario": "Search spans returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Spans", + "feature_file": "features/v2/spans.feature", + "file": "v2/spans/search-spans-returns-unprocessable-entity-response.json", + "scenario": "Search spans returns \"Unprocessable Entity.\" response", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "feature_file": "features/v2/spans_metrics.feature", + "file": "v2/spans-metrics/create-a-span-based-metric-returns-ok-response.json", + "scenario": "Create a span-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "feature_file": "features/v2/spans_metrics.feature", + "file": "v2/spans-metrics/delete-a-span-based-metric-returns-ok-response.json", + "scenario": "Delete a span-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "feature_file": "features/v2/spans_metrics.feature", + "file": "v2/spans-metrics/get-a-span-based-metric-returns-ok-response.json", + "scenario": "Get a span-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "feature_file": "features/v2/spans_metrics.feature", + "file": "v2/spans-metrics/get-all-span-based-metrics-returns-ok-response.json", + "scenario": "Get all span-based metrics returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "feature_file": "features/v2/spans_metrics.feature", + "file": "v2/spans-metrics/update-a-span-based-metric-returns-ok-response.json", + "scenario": "Update a span-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/create-backfilled-degradation-returns-created-response.json", + "scenario": "Create backfilled degradation returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/create-backfilled-maintenance-returns-created-response.json", + "scenario": "Create backfilled maintenance returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/create-component-returns-created-response.json", + "scenario": "Create component returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/create-degradation-returns-created-response.json", + "scenario": "Create degradation returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/create-maintenance-returns-created-response.json", + "scenario": "Create maintenance returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/create-status-page-returns-created-response.json", + "scenario": "Create status page returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/delete-component-returns-no-content-response.json", + "scenario": "Delete component returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/delete-degradation-returns-no-content-response.json", + "scenario": "Delete degradation returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/delete-status-page-returns-no-content-response.json", + "scenario": "Delete status page returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/get-component-returns-ok-response.json", + "scenario": "Get component returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/get-degradation-returns-ok-response.json", + "scenario": "Get degradation returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/get-maintenance-returns-ok-response.json", + "scenario": "Get maintenance returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/get-status-page-returns-ok-response.json", + "scenario": "Get status page returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/list-components-returns-ok-response.json", + "scenario": "List components returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/list-degradations-returns-ok-response.json", + "scenario": "List degradations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/list-maintenances-returns-ok-response.json", + "scenario": "List maintenances returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/list-status-pages-returns-ok-response.json", + "scenario": "List status pages returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/publish-status-page-returns-no-content-response.json", + "scenario": "Publish status page returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/update-component-returns-ok-response.json", + "scenario": "Update component returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/update-degradation-returns-ok-response.json", + "scenario": "Update degradation returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/update-maintenance-returns-ok-response.json", + "scenario": "Update maintenance returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "feature_file": "features/v2/status_pages.feature", + "file": "v2/status-pages/update-status-page-returns-ok-response.json", + "scenario": "Update status page returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "feature_file": "features/v2/synthetics.feature", + "file": "v2/synthetics/create-a-network-path-test-returns-ok-response.json", + "scenario": "Create a Network Path test returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "feature_file": "features/v2/synthetics.feature", + "file": "v2/synthetics/create-a-test-suite-returns-ok-response.json", + "scenario": "Create a test suite returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "feature_file": "features/v2/synthetics.feature", + "file": "v2/synthetics/get-a-network-path-test-returns-ok-response.json", + "scenario": "Get a Network Path test returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "feature_file": "features/v2/synthetics.feature", + "file": "v2/synthetics/get-the-on-demand-concurrency-cap-returns-ok-response.json", + "scenario": "Get the on-demand concurrency cap returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "feature_file": "features/v2/synthetics.feature", + "file": "v2/synthetics/save-new-value-for-on-demand-concurrency-cap-returns-ok-response.json", + "scenario": "Save new value for on-demand concurrency cap returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "feature_file": "features/v2/synthetics.feature", + "file": "v2/synthetics/search-synthetics-suites-returns-ok-response.json", + "scenario": "Search Synthetics suites returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/add-a-user-to-a-team-returns-api-error-response-response.json", + "scenario": "Add a user to a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/add-a-user-to-a-team-returns-represents-a-user-s-association-to-a-team-response.json", + "scenario": "Add a user to a team returns \"Represents a user's association to a team\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-a-team-hierarchy-link-returns-conflict-response.json", + "scenario": "Create a team hierarchy link returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-a-team-hierarchy-link-returns-ok-response.json", + "scenario": "Create a team hierarchy link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-a-team-link-returns-api-error-response-response.json", + "scenario": "Create a team link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-a-team-link-returns-ok-response.json", + "scenario": "Create a team link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-a-team-returns-api-error-response-response.json", + "scenario": "Create a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-a-team-returns-created-response.json", + "scenario": "Create a team returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-a-team-with-v2-fields-returns-created-response.json", + "scenario": "Create a team with V2 fields returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-team-connections-returns-bad-request-response.json", + "scenario": "Create team connections returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-team-connections-returns-conflict-response.json", + "scenario": "Create team connections returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-team-connections-returns-created-response.json", + "scenario": "Create team connections returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-team-notification-rule-returns-api-error-response-response.json", + "scenario": "Create team notification rule returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/create-team-notification-rule-returns-ok-response.json", + "scenario": "Create team notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/delete-team-connections-returns-bad-request-response.json", + "scenario": "Delete team connections returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/delete-team-connections-returns-no-content-response.json", + "scenario": "Delete team connections returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/delete-team-notification-rule-returns-api-error-response-response.json", + "scenario": "Delete team notification rule returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/delete-team-notification-rule-returns-no-content-response.json", + "scenario": "Delete team notification rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-a-team-hierarchy-link-returns-api-error-response-response.json", + "scenario": "Get a team hierarchy link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-a-team-hierarchy-link-returns-ok-response.json", + "scenario": "Get a team hierarchy link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-a-team-link-returns-api-error-response-response.json", + "scenario": "Get a team link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-a-team-link-returns-ok-response.json", + "scenario": "Get a team link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-a-team-returns-api-error-response-response.json", + "scenario": "Get a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-a-team-returns-ok-response.json", + "scenario": "Get a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-all-teams-returns-ok-response.json", + "scenario": "Get all teams returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-all-teams-returns-ok-response-with-pagination.json", + "scenario": "Get all teams returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-all-teams-with-fields-team-parameter-returns-ok-response.json", + "scenario": "Get all teams with fields_team parameter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-links-for-a-team-returns-api-error-response-response.json", + "scenario": "Get links for a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-links-for-a-team-returns-ok-response.json", + "scenario": "Get links for a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-permission-settings-for-a-team-returns-api-error-response-response.json", + "scenario": "Get permission settings for a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-permission-settings-for-a-team-returns-ok-response.json", + "scenario": "Get permission settings for a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-team-hierarchy-links-returns-ok-response.json", + "scenario": "Get team hierarchy links returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-team-memberships-returns-api-error-response-response.json", + "scenario": "Get team memberships returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-team-memberships-returns-represents-a-user-s-association-to-a-team-response.json", + "scenario": "Get team memberships returns \"Represents a user's association to a team\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-team-memberships-returns-represents-a-user-s-association-to-a-team-response-with-pagination.json", + "scenario": "Get team memberships returns \"Represents a user's association to a team\" response with pagination", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-team-notification-rule-returns-api-error-response-response.json", + "scenario": "Get team notification rule returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-team-notification-rule-returns-ok-response.json", + "scenario": "Get team notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-team-notification-rules-returns-ok-response.json", + "scenario": "Get team notification rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-team-sync-configurations-returns-ok-response.json", + "scenario": "Get team sync configurations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/get-user-memberships-returns-represents-a-user-s-association-to-a-team-response.json", + "scenario": "Get user memberships returns \"Represents a user's association to a team\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/link-teams-with-github-teams-returns-no-content-response.json", + "scenario": "Link Teams with GitHub Teams returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/list-team-connections-returns-ok-response.json", + "scenario": "List team connections returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/list-team-connections-with-filters-returns-ok-response.json", + "scenario": "List team connections with filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/remove-a-team-hierarchy-link-returns-api-error-response-response.json", + "scenario": "Remove a team hierarchy link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/remove-a-team-hierarchy-link-returns-no-content-response.json", + "scenario": "Remove a team hierarchy link returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/remove-a-team-link-returns-api-error-response-response.json", + "scenario": "Remove a team link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/remove-a-team-link-returns-no-content-response.json", + "scenario": "Remove a team link returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/remove-a-team-returns-api-error-response-response.json", + "scenario": "Remove a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/remove-a-team-returns-no-content-response.json", + "scenario": "Remove a team returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/remove-a-user-from-a-team-returns-api-error-response-response.json", + "scenario": "Remove a user from a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/remove-a-user-from-a-team-returns-no-content-response.json", + "scenario": "Remove a user from a team returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-a-team-link-returns-api-error-response-response.json", + "scenario": "Update a team link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-a-team-link-returns-ok-response.json", + "scenario": "Update a team link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-a-team-returns-ok-response.json", + "scenario": "Update a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-a-team-with-partial-update-returns-ok-response.json", + "scenario": "Update a team with partial update returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-a-user-s-membership-attributes-on-a-team-returns-api-error-response-response.json", + "scenario": "Update a user's membership attributes on a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-a-user-s-membership-attributes-on-a-team-returns-ok-response.json", + "scenario": "Update a user's membership attributes on a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-a-user-s-membership-attributes-on-a-team-with-invalid-role-returns-api-error-response-response.json", + "scenario": "Update a user's membership attributes on a team with invalid role returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-permission-setting-for-team-returns-api-error-response-response.json", + "scenario": "Update permission setting for team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-permission-setting-for-team-returns-ok-response.json", + "scenario": "Update permission setting for team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-team-notification-rule-returns-api-error-response-response.json", + "scenario": "Update team notification rule returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "feature_file": "features/v2/teams.feature", + "file": "v2/teams/update-team-notification-rule-returns-ok-response.json", + "scenario": "Update team notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-monthly-cost-attribution-returns-bad-request-response.json", + "scenario": "Get Monthly Cost Attribution returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-monthly-cost-attribution-returns-ok-response.json", + "scenario": "Get Monthly Cost Attribution returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-active-billing-dimensions-for-cost-attribution-returns-ok-response.json", + "scenario": "Get active billing dimensions for cost attribution returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-available-fields-for-usage-summary-returns-bad-request-response.json", + "scenario": "Get available fields for usage summary returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-billing-dimension-mapping-for-usage-endpoints-returns-bad-request-response.json", + "scenario": "Get billing dimension mapping for usage endpoints returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-cost-across-multi-org-account-returns-ok-response.json", + "scenario": "Get cost across multi-org account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-historical-cost-across-your-account-returns-ok-response.json", + "scenario": "Get historical cost across your account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-hourly-usage-by-product-family-returns-bad-request-response.json", + "scenario": "Get hourly usage by product family returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-hourly-usage-by-product-family-returns-ok-response.json", + "scenario": "Get hourly usage by product family returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-hourly-usage-for-application-security-returns-bad-request-response.json", + "scenario": "Get hourly usage for Application Security returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-hourly-usage-for-lambda-traced-invocations-returns-bad-request-response.json", + "scenario": "Get hourly usage for Lambda traced invocations returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-hourly-usage-for-lambda-traced-invocations-returns-ok-response.json", + "scenario": "Get hourly usage for Lambda traced invocations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-hourly-usage-for-observability-pipelines-returns-bad-request-response.json", + "scenario": "Get hourly usage for Observability Pipelines returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-hourly-usage-for-application-security-returns-ok-response.json", + "scenario": "Get hourly usage for application security returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-hourly-usage-for-observability-pipelines-returns-ok-response.json", + "scenario": "Get hourly usage for observability pipelines returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/get-projected-cost-across-your-account-returns-ok-response.json", + "scenario": "Get projected cost across your account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/getestimatedcostbyorg-with-both-start-month-and-start-date-returns-bad-request-response.json", + "scenario": "GetEstimatedCostByOrg with both start_month and start_date returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "feature_file": "features/v2/usage_metering.feature", + "file": "v2/usage-metering/getestimatedcostbyorg-with-start-month-returns-ok-response.json", + "scenario": "GetEstimatedCostByOrg with start_month returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/create-a-user-returns-ok-response.json", + "scenario": "Create a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/disable-a-user-returns-ok-response.json", + "scenario": "Disable a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/get-a-user-invitation-returns-ok-response.json", + "scenario": "Get a user invitation returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/get-a-user-permissions-returns-ok-response.json", + "scenario": "Get a user permissions returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/get-user-details-returns-ok-response.json", + "scenario": "Get user details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/list-all-users-returns-ok-response.json", + "scenario": "List all users returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/list-all-users-returns-ok-response-with-pagination.json", + "scenario": "List all users returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/send-invitation-emails-returns-ok-response.json", + "scenario": "Send invitation emails returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/update-a-user-returns-bad-user-id-in-request-response.json", + "scenario": "Update a user returns \"Bad User ID in Request\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/update-a-user-returns-not-found-response.json", + "scenario": "Update a user returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Users", + "feature_file": "features/v2/users.feature", + "file": "v2/users/update-a-user-returns-ok-response.json", + "scenario": "Update a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/cancel-a-workflow-instance-returns-bad-request-response.json", + "scenario": "Cancel a workflow instance returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/cancel-a-workflow-instance-returns-not-found-response.json", + "scenario": "Cancel a workflow instance returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/cancel-a-workflow-instance-returns-ok-response.json", + "scenario": "Cancel a workflow instance returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/create-a-workflow-returns-bad-request-response.json", + "scenario": "Create a Workflow returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/create-a-workflow-returns-successfully-created-a-workflow-response.json", + "scenario": "Create a Workflow returns \"Successfully created a workflow.\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/delete-an-existing-workflow-returns-not-found-response.json", + "scenario": "Delete an existing Workflow returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/delete-an-existing-workflow-returns-successfully-deleted-a-workflow-response.json", + "scenario": "Delete an existing Workflow returns \"Successfully deleted a workflow.\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/execute-a-workflow-returns-bad-request-response.json", + "scenario": "Execute a workflow returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/execute-a-workflow-returns-created-response.json", + "scenario": "Execute a workflow returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/get-a-workflow-instance-returns-bad-request-response.json", + "scenario": "Get a workflow instance returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/get-a-workflow-instance-returns-not-found-response.json", + "scenario": "Get a workflow instance returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/get-a-workflow-instance-returns-ok-response.json", + "scenario": "Get a workflow instance returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/get-an-existing-workflow-returns-bad-request-response.json", + "scenario": "Get an existing Workflow returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/get-an-existing-workflow-returns-not-found-response.json", + "scenario": "Get an existing Workflow returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/get-an-existing-workflow-returns-successfully-got-a-workflow-response.json", + "scenario": "Get an existing Workflow returns \"Successfully got a workflow.\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/list-workflow-instances-returns-bad-request-response.json", + "scenario": "List workflow instances returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/list-workflow-instances-returns-ok-response.json", + "scenario": "List workflow instances returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/list-workflows-returns-ok-response.json", + "scenario": "List workflows returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/list-workflows-returns-ok-response-with-pagination.json", + "scenario": "List workflows returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/update-an-existing-workflow-returns-bad-request-response.json", + "scenario": "Update an existing Workflow returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/update-an-existing-workflow-returns-not-found-response.json", + "scenario": "Update an existing Workflow returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "feature_file": "features/v2/workflow_automation.feature", + "file": "v2/workflow-automation/update-an-existing-workflow-returns-successfully-updated-a-workflow-response.json", + "scenario": "Update an existing Workflow returns \"Successfully updated a workflow.\" response", + "version": "v2" + } + ], + "schema_version": 1 +} diff --git a/test-runner-data/v1/authentication/validate-api-key-returns-forbidden-response.json b/test-runner-data/v1/authentication/validate-api-key-returns-forbidden-response.json new file mode 100644 index 0000000000..99131c834b --- /dev/null +++ b/test-runner-data/v1/authentication/validate-api-key-returns-forbidden-response.json @@ -0,0 +1,18 @@ +{ + "api": "Authentication", + "expected_status": 403, + "feature": "Authentication", + "id": "v1/Authentication/Validate API key returns \"Forbidden\" response", + "operation_id": "Validate", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/validate" + }, + "scenario": "Validate API key returns \"Forbidden\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/authentication/validate-api-key-returns-ok-response.json b/test-runner-data/v1/authentication/validate-api-key-returns-ok-response.json new file mode 100644 index 0000000000..30d391b456 --- /dev/null +++ b/test-runner-data/v1/authentication/validate-api-key-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Authentication", + "expected_status": 200, + "feature": "Authentication", + "id": "v1/Authentication/Validate API key returns \"OK\" response", + "operation_id": "Validate", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/validate" + }, + "scenario": "Validate API key returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/aws-integration/create-an-aws-integration-returns-ok-response.json b/test-runner-data/v1/aws-integration/create-an-aws-integration-returns-ok-response.json new file mode 100644 index 0000000000..bbff2a69ec --- /dev/null +++ b/test-runner-data/v1/aws-integration/create-an-aws-integration-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v1/AWS Integration/Create an AWS integration returns \"OK\" response", + "operation_id": "CreateAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccount", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"account_id\": \"{{ timestamp(\"now\") }}00\", \"account_specific_namespace_rules\": {\"auto_scaling\": false}, \"cspm_resource_collection_enabled\": true, \"excluded_regions\": [\"us-east-1\", \"us-west-2\"], \"extended_resource_collection_enabled\": true, \"filter_tags\": [\"$KEY:$VALUE\"], \"host_tags\": [\"$KEY:$VALUE\"], \"metrics_collection_enabled\": false, \"role_name\": \"DatadogAWSIntegrationRole\"}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/aws" + }, + "scenario": "Create an AWS integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/aws-integration/delete-an-aws-integration-returns-ok-response.json b/test-runner-data/v1/aws-integration/delete-an-aws-integration-returns-ok-response.json new file mode 100644 index 0000000000..2f8e3f368b --- /dev/null +++ b/test-runner-data/v1/aws-integration/delete-an-aws-integration-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v1/AWS Integration/Delete an AWS integration returns \"OK\" response", + "operation_id": "DeleteAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccountDeleteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"account_id\": \"{{ timestamp(\"now\") }}00\", \"role_name\": \"DatadogAWSIntegrationRole\"}" + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/aws" + }, + "scenario": "Delete an AWS integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/aws-integration/update-an-aws-integration-returns-ok-response.json b/test-runner-data/v1/aws-integration/update-an-aws-integration-returns-ok-response.json new file mode 100644 index 0000000000..e4fd323405 --- /dev/null +++ b/test-runner-data/v1/aws-integration/update-an-aws-integration-returns-ok-response.json @@ -0,0 +1,63 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v1/AWS Integration/Update an AWS integration returns \"OK\" response", + "operation_id": "UpdateAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccount", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"account_id\": \"{{ timestamp(\"now\") }}00\", \"account_specific_namespace_rules\": {\"auto_scaling\": false}, \"cspm_resource_collection_enabled\": false, \"excluded_regions\": [\"us-east-1\", \"us-west-2\"], \"extended_resource_collection_enabled\": true, \"filter_tags\": [\"$KEY:$VALUE\"], \"host_tags\": [\"$KEY:$VALUE\"], \"metrics_collection_enabled\": true, \"role_name\": \"DatadogAWSIntegrationRole\"}" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "account_id", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": { + "$openapi_transformer_template": "\"{{ timestamp(\"now\") }}00\"" + } + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "role_name", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "DatadogAWSIntegrationRole" + }, + "style": null + } + ], + "path": "/api/v1/integration/aws" + }, + "scenario": "Update an AWS integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/azure-integration/create-an-azure-integration-returns-ok-response.json b/test-runner-data/v1/azure-integration/create-an-azure-integration-returns-ok-response.json new file mode 100644 index 0000000000..60deed7f0d --- /dev/null +++ b/test-runner-data/v1/azure-integration/create-an-azure-integration-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "AzureIntegration", + "expected_status": 200, + "feature": "Azure Integration", + "id": "v1/Azure Integration/Create an Azure integration returns \"OK\" response", + "operation_id": "CreateAzureIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AzureAccount", + "type": "object" + }, + "source": "inline", + "value": { + "app_service_plan_filters": "key:value,filter:example", + "automute": true, + "client_id": "{{ uuid }}", + "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", + "container_app_filters": "key:value,filter:example", + "cspm_enabled": true, + "custom_metrics_enabled": true, + "errors": [ + "*" + ], + "host_filters": "key:value,filter:example", + "new_client_id": "{{ uuid }}", + "new_tenant_name": "{{ uuid }}", + "resource_collection_enabled": true, + "tenant_name": "{{ uuid }}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/azure" + }, + "scenario": "Create an Azure integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/azure-integration/delete-an-azure-integration-returns-ok-response.json b/test-runner-data/v1/azure-integration/delete-an-azure-integration-returns-ok-response.json new file mode 100644 index 0000000000..160744d288 --- /dev/null +++ b/test-runner-data/v1/azure-integration/delete-an-azure-integration-returns-ok-response.json @@ -0,0 +1,29 @@ +{ + "api": "AzureIntegration", + "expected_status": 200, + "feature": "Azure Integration", + "id": "v1/Azure Integration/Delete an Azure integration returns \"OK\" response", + "operation_id": "DeleteAzureIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AzureAccount", + "type": "object" + }, + "source": "inline", + "value": { + "client_id": "{{ uuid }}", + "tenant_name": "{{ uuid }}" + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/azure" + }, + "scenario": "Delete an Azure integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/azure-integration/update-an-azure-integration-returns-ok-response.json b/test-runner-data/v1/azure-integration/update-an-azure-integration-returns-ok-response.json new file mode 100644 index 0000000000..8635742a5a --- /dev/null +++ b/test-runner-data/v1/azure-integration/update-an-azure-integration-returns-ok-response.json @@ -0,0 +1,43 @@ +{ + "api": "AzureIntegration", + "expected_status": 200, + "feature": "Azure Integration", + "id": "v1/Azure Integration/Update an Azure integration returns \"OK\" response", + "operation_id": "UpdateAzureIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AzureAccount", + "type": "object" + }, + "source": "inline", + "value": { + "app_service_plan_filters": "key:value,filter:example", + "automute": true, + "client_id": "{{ uuid }}", + "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", + "container_app_filters": "key:value,filter:example", + "cspm_enabled": true, + "custom_metrics_enabled": true, + "errors": [ + "*" + ], + "host_filters": "key:value,filter:example", + "new_client_id": "{{ uuid }}", + "new_tenant_name": "{{ uuid }}", + "resource_collection_enabled": true, + "secretless_auth_enabled": true, + "tenant_name": "{{ uuid }}" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/azure" + }, + "scenario": "Update an Azure integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboard-lists/create-a-dashboard-list-returns-ok-response.json b/test-runner-data/v1/dashboard-lists/create-a-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..a4bb999bc9 --- /dev/null +++ b/test-runner-data/v1/dashboard-lists/create-a-dashboard-list-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v1/Dashboard Lists/Create a dashboard list returns \"OK\" response", + "operation_id": "CreateDashboardList", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardList", + "type": "object" + }, + "source": "inline", + "value": { + "name": "{{ unique }}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard/lists/manual" + }, + "scenario": "Create a dashboard list returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboard-lists/delete-a-dashboard-list-returns-not-found-response.json b/test-runner-data/v1/dashboard-lists/delete-a-dashboard-list-returns-not-found-response.json new file mode 100644 index 0000000000..7e7a0d2e31 --- /dev/null +++ b/test-runner-data/v1/dashboard-lists/delete-a-dashboard-list-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "DashboardLists", + "expected_status": 404, + "feature": "Dashboard Lists", + "id": "v1/Dashboard Lists/Delete a dashboard list returns \"Not Found\" response", + "operation_id": "DeleteDashboardList", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v1/dashboard/lists/manual/{list_id}" + }, + "scenario": "Delete a dashboard list returns \"Not Found\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboard-lists/delete-a-dashboard-list-returns-ok-response.json b/test-runner-data/v1/dashboard-lists/delete-a-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..3a8c25c5dc --- /dev/null +++ b/test-runner-data/v1/dashboard-lists/delete-a-dashboard-list-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v1/Dashboard Lists/Delete a dashboard list returns \"OK\" response", + "operation_id": "DeleteDashboardList", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "dashboard_list.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/lists/manual/{list_id}" + }, + "scenario": "Delete a dashboard list returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboard-lists/get-a-dashboard-list-returns-not-found-response.json b/test-runner-data/v1/dashboard-lists/get-a-dashboard-list-returns-not-found-response.json new file mode 100644 index 0000000000..280ad48169 --- /dev/null +++ b/test-runner-data/v1/dashboard-lists/get-a-dashboard-list-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "DashboardLists", + "expected_status": 404, + "feature": "Dashboard Lists", + "id": "v1/Dashboard Lists/Get a dashboard list returns \"Not Found\" response", + "operation_id": "GetDashboardList", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v1/dashboard/lists/manual/{list_id}" + }, + "scenario": "Get a dashboard list returns \"Not Found\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboard-lists/get-a-dashboard-list-returns-ok-response.json b/test-runner-data/v1/dashboard-lists/get-a-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..f0bf53a5d6 --- /dev/null +++ b/test-runner-data/v1/dashboard-lists/get-a-dashboard-list-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v1/Dashboard Lists/Get a dashboard list returns \"OK\" response", + "operation_id": "GetDashboardList", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "dashboard_list.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/lists/manual/{list_id}" + }, + "scenario": "Get a dashboard list returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboard-lists/get-all-dashboard-lists-returns-ok-response.json b/test-runner-data/v1/dashboard-lists/get-all-dashboard-lists-returns-ok-response.json new file mode 100644 index 0000000000..7258e6eddb --- /dev/null +++ b/test-runner-data/v1/dashboard-lists/get-all-dashboard-lists-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v1/Dashboard Lists/Get all dashboard lists returns \"OK\" response", + "operation_id": "ListDashboardLists", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard/lists/manual" + }, + "scenario": "Get all dashboard lists returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboard-lists/update-a-dashboard-list-returns-not-found-response.json b/test-runner-data/v1/dashboard-lists/update-a-dashboard-list-returns-not-found-response.json new file mode 100644 index 0000000000..66c11fa72c --- /dev/null +++ b/test-runner-data/v1/dashboard-lists/update-a-dashboard-list-returns-not-found-response.json @@ -0,0 +1,45 @@ +{ + "api": "DashboardLists", + "expected_status": 404, + "feature": "Dashboard Lists", + "id": "v1/Dashboard Lists/Update a dashboard list returns \"Not Found\" response", + "operation_id": "UpdateDashboardList", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardList", + "type": "object" + }, + "source": "inline", + "value": { + "name": "Not found" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v1/dashboard/lists/manual/{list_id}" + }, + "scenario": "Update a dashboard list returns \"Not Found\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboard-lists/update-a-dashboard-list-returns-ok-response.json b/test-runner-data/v1/dashboard-lists/update-a-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..686bfc7c78 --- /dev/null +++ b/test-runner-data/v1/dashboard-lists/update-a-dashboard-list-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v1/Dashboard Lists/Update a dashboard list returns \"OK\" response", + "operation_id": "UpdateDashboardList", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardList", + "type": "object" + }, + "source": "inline", + "value": { + "name": "updated {{unique}}" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "dashboard_list.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/lists/manual/{list_id}" + }, + "scenario": "Update a dashboard list returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/clients-deserialize-a-dashboard-with-a-empty-time-object.json b/test-runner-data/v1/dashboards/clients-deserialize-a-dashboard-with-a-empty-time-object.json new file mode 100644 index 0000000000..22a361073e --- /dev/null +++ b/test-runner-data/v1/dashboards/clients-deserialize-a-dashboard-with-a-empty-time-object.json @@ -0,0 +1,63 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Clients deserialize a dashboard with a empty time object", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "bars", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "cloud_cost", + "name": "query1", + "query": "sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "time": {}, + "title": "Example Cloud Cost Query", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Clients deserialize a dashboard with a empty time object", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-apm-stats-query.json b/test-runner-data/v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-apm-stats-query.json new file mode 100644 index 0000000000..80b29628da --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-apm-stats-query.json @@ -0,0 +1,80 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a distribution widget using a histogram request containing a formulas and functions APM Stats query", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "", + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "apm_resource_stats", + "env": "staging", + "group_by": [ + "resource_name" + ], + "name": "query1", + "operation_name": "universal.http.client", + "primary_tag_name": "datacenter", + "primary_tag_value": "*", + "service": "azure-bill-import", + "stat": "latency_distribution" + }, + "request_type": "histogram", + "style": { + "palette": "dog_classic" + } + } + ], + "show_legend": false, + "title": "APM Stats - Request latency HOP", + "title_align": "left", + "title_size": "16", + "type": "distribution", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 2, + "width": 4, + "x": 8, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a distribution widget using a histogram request containing a formulas and functions APM Stats query", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-events-query.json b/test-runner-data/v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-events-query.json new file mode 100644 index 0000000000..0eb5fb2d00 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-events-query.json @@ -0,0 +1,78 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a distribution widget using a histogram request containing a formulas and functions events query", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "{{ unique }}", + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "compute": { + "aggregation": "min", + "metric": "@duration" + }, + "data_source": "events", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + }, + "request_type": "histogram" + } + ], + "show_legend": false, + "title": "Events Platform - Request latency HOP", + "title_align": "left", + "title_size": "16", + "type": "distribution", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a distribution widget using a histogram request containing a formulas and functions events query", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-metrics-query.json b/test-runner-data/v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-metrics-query.json new file mode 100644 index 0000000000..13f7ba2282 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-distribution-widget-using-a-histogram-request-containing-a-formulas-and-functions-metrics-query.json @@ -0,0 +1,77 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a distribution widget using a histogram request containing a formulas and functions metrics query", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "custom_links": [ + { + "label": "Example", + "link": "https://example.org/" + } + ], + "requests": [ + { + "query": { + "data_source": "metrics", + "name": "query1", + "query": "histogram:trace.Load{*}" + }, + "request_type": "histogram", + "style": { + "palette": "dog_classic" + } + } + ], + "show_legend": false, + "title": "Metrics HOP", + "title_align": "left", + "title_size": "16", + "type": "distribution", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a distribution widget using a histogram request containing a formulas and functions metrics query", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-geomap-widget-using-an-event-list-request.json b/test-runner-data/v1/dashboards/create-a-geomap-widget-using-an-event-list-request.json new file mode 100644 index 0000000000..839e18bfaf --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-geomap-widget-using-an-event-list-request.json @@ -0,0 +1,93 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a geomap widget using an event_list request", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "{{ unique }}", + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed", + "tags": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "@network.client.geoip.location.latitude", + "width": "auto" + }, + { + "field": "@network.client.geoip.location.longitude", + "width": "auto" + }, + { + "field": "@network.client.geoip.country.iso_code", + "width": "auto" + }, + { + "field": "@network.client.geoip.subdivision.name", + "width": "auto" + }, + { + "field": "classic", + "width": "auto" + }, + { + "field": "", + "width": "auto" + } + ], + "query": { + "data_source": "logs_stream", + "indexes": [], + "query_string": "" + }, + "response_format": "event_list" + } + ], + "style": { + "palette": "hostmap_blues", + "palette_flip": false + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "geomap", + "view": { + "focus": "WORLD" + } + }, + "layout": { + "height": 6, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a geomap widget using an event_list request", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-geomap-widget-with-conditional-formats-and-text-formats.json b/test-runner-data/v1/dashboards/create-a-geomap-widget-with-conditional-formats-and-text-formats.json new file mode 100644 index 0000000000..93074cffe3 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-geomap-widget-with-conditional-formats-and-text-formats.json @@ -0,0 +1,136 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a geomap widget with conditional formats and text formats", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "{{ unique }}", + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed", + "tags": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "palette": "white_on_green", + "value": 1000 + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "@type:session" + } + } + ], + "response_format": "scalar", + "sort": { + "count": 250, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + }, + { + "columns": [ + { + "field": "@network.client.geoip.location.latitude", + "width": "auto" + }, + { + "field": "@network.client.geoip.location.longitude", + "width": "auto" + }, + { + "field": "@network.client.geoip.country.iso_code", + "width": "auto" + }, + { + "field": "@network.client.geoip.subdivision.name", + "width": "auto" + } + ], + "query": { + "data_source": "logs_stream", + "indexes": [], + "query_string": "", + "storage": "hot" + }, + "response_format": "event_list", + "style": { + "color_by": "status" + }, + "text_formats": [ + { + "match": { + "type": "is", + "value": "error" + }, + "palette": "white_on_red" + } + ] + } + ], + "style": { + "palette": "hostmap_blues", + "palette_flip": false + }, + "title": "Log Count by Service and Source", + "type": "geomap", + "view": { + "focus": "NORTH_AMERICA" + } + }, + "layout": { + "height": 6, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a geomap widget with conditional formats and text formats", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-returns-ok-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-returns-ok-response.json new file mode 100644 index 0000000000..5dad32133b --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-returns-ok-response.json @@ -0,0 +1,60 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard returns \"OK\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboard_payload.json", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-bar-chart-widget-with-stacked-type-and-no-legend-specified.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-bar-chart-widget-with-stacked-type-and-no-legend-specified.json new file mode 100644 index 0000000000..42c87b3fa9 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-bar-chart-widget-with-stacked-type-and-no-legend-specified.json @@ -0,0 +1,84 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a bar_chart widget with stacked type and no legend specified", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "name": "service", + "order": "asc", + "type": "group" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "bar_chart" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a bar_chart widget with stacked type and no legend specified", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-change-widget-using-formulas-and-functions-slo-query.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-change-widget-using-formulas-and-functions-slo-query.json new file mode 100644 index 0000000000..387ca2e7ef --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-change-widget-using-formulas-and-functions-slo-query.json @@ -0,0 +1,74 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a change widget using formulas and functions slo query", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "change_type": "absolute", + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "increase_good": true, + "order_by": "change", + "order_dir": "asc", + "queries": [ + { + "additional_query_filters": "*", + "data_source": "slo", + "group_mode": "overall", + "measure": "slo_status", + "name": "query1", + "slo_id": "{{ slo.data[0].id }}", + "slo_query_type": "metric" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "change" + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a change widget using formulas and functions slo query", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-formulas-and-functions-change-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-formulas-and-functions-change-widget.json new file mode 100644 index 0000000000..bd687be2c2 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-formulas-and-functions-change-widget.json @@ -0,0 +1,79 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a formulas and functions change widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "change_type": "absolute", + "compare_to": "hour_before", + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "increase_good": true, + "order_by": "change", + "order_dir": "desc", + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "change" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a formulas and functions change widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-formulas-and-functions-treemap-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-formulas-and-functions-treemap-widget.json new file mode 100644 index 0000000000..db3c6e7598 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-formulas-and-functions-treemap-widget.json @@ -0,0 +1,71 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a formulas and functions treemap widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar" + } + ], + "title": "", + "type": "treemap" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a formulas and functions treemap widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-live-default-timeframe-returns-ok-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-live-default-timeframe-returns-ok-response.json new file mode 100644 index 0000000000..248d03f24e --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-live-default-timeframe-returns-ok-response.json @@ -0,0 +1,48 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a live default_timeframe returns \"OK\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "default_timeframe": { + "type": "live", + "unit": "hour", + "value": 4 + }, + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "background_color": "white", + "content": "test", + "font_size": "14", + "show_tick": false, + "text_align": "left", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a live default_timeframe returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-containing-a-description.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-containing-a-description.json new file mode 100644 index 0000000000..ae45460ec1 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-containing-a-description.json @@ -0,0 +1,65 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a query_value widget containing a description", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/query_value_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "autoscale": true, + "description": "Example widget description", + "precision": 2, + "requests": [ + { + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a query_value widget containing a description", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-using-the-percentile-aggregator.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-using-the-percentile-aggregator.json new file mode 100644 index 0000000000..01a25f26f4 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-using-the-percentile-aggregator.json @@ -0,0 +1,66 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a query value widget using the percentile aggregator", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with QVW Percentile Aggregator", + "widgets": [ + { + "definition": { + "autoscale": true, + "precision": 2, + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "percentile", + "data_source": "metrics", + "name": "query1", + "query": "p90:dist.dd.dogweb.latency{*}" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "layout": { + "height": 2, + "width": 2, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a query value widget using the percentile aggregator", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-using-timeseries-background.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-using-timeseries-background.json new file mode 100644 index 0000000000..9222bc14c0 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-query-value-widget-using-timeseries-background.json @@ -0,0 +1,72 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a query value widget using timeseries background", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with QVW Timeseries Background", + "widgets": [ + { + "definition": { + "autoscale": true, + "precision": 2, + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "percentile", + "data_source": "metrics", + "name": "query1", + "query": "sum:my.cool.count.metric{*}" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "timeseries_background": { + "type": "area", + "yaxis": { + "include_zero": true + } + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "layout": { + "height": 2, + "width": 2, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a query value widget using timeseries background", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-and-an-overlay-request.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-and-an-overlay-request.json new file mode 100644 index 0000000000..cc6fca0fdd --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-and-an-overlay-request.json @@ -0,0 +1,66 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a timeseries widget and an overlay request", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "on_right_yaxis": false, + "queries": [ + { + "data_source": "metrics", + "name": "mymetric", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries" + }, + { + "display_type": "overlay", + "queries": [ + { + "data_source": "metrics", + "name": "mymetricoverlay", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "purple" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a timeseries widget and an overlay request", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-cloud-cost-query.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-cloud-cost-query.json new file mode 100644 index 0000000000..73ceeda542 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-cloud-cost-query.json @@ -0,0 +1,65 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a timeseries widget using formulas and functions cloud cost query", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "bars", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "cloud_cost", + "name": "query1", + "query": "sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "time": { + "live_span": "week_to_date" + }, + "title": "Example Cloud Cost Query", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a timeseries widget using formulas and functions cloud cost query", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-metrics-query-with-combined-semantic-mode.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-metrics-query-with-combined-semantic-mode.json new file mode 100644 index 0000000000..9e966013ab --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-metrics-query-with-combined-semantic-mode.json @@ -0,0 +1,55 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a timeseries widget using formulas and functions metrics query with combined semantic_mode", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with combined semantic_mode", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}", + "semantic_mode": "combined" + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a timeseries widget using formulas and functions metrics query with combined semantic_mode", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-metrics-query-with-native-semantic-mode.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-metrics-query-with-native-semantic-mode.json new file mode 100644 index 0000000000..16b2f10014 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-timeseries-widget-using-formulas-and-functions-metrics-query-with-native-semantic-mode.json @@ -0,0 +1,55 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a timeseries widget using formulas and functions metrics query with native semantic_mode", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with native semantic_mode", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}", + "semantic_mode": "native" + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a timeseries widget using formulas and functions metrics query with native semantic_mode", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-toplist-widget-sorted-by-group.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-toplist-widget-sorted-by-group.json new file mode 100644 index 0000000000..01e7b5d7d6 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-toplist-widget-sorted-by-group.json @@ -0,0 +1,85 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a toplist widget sorted by group", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "name": "service", + "order": "asc", + "type": "group" + } + ] + } + } + ], + "style": { + "display": { + "legend": "inline", + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "toplist" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a toplist widget sorted by group", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-toplist-widget-with-stacked-type-and-no-legend-specified.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-toplist-widget-with-stacked-type-and-no-legend-specified.json new file mode 100644 index 0000000000..2688cb06f6 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-a-toplist-widget-with-stacked-type-and-no-legend-specified.json @@ -0,0 +1,84 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with a toplist widget with stacked type and no legend specified", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "name": "service", + "order": "asc", + "type": "group" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "toplist" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with a toplist widget with stacked type and no legend specified", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-alert-graph-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-alert-graph-widget.json new file mode 100644 index 0000000000..54cfa3ec1d --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-alert-graph-widget.json @@ -0,0 +1,51 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with alert_graph widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/alert_graph_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "alert_id": "{{ monitor.id }}", + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "alert_graph", + "viz_type": "timeseries" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with alert_graph widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-alert-value-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-alert-value-widget.json new file mode 100644 index 0000000000..bf6965165c --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-alert-value-widget.json @@ -0,0 +1,52 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with alert_value widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/alert_value_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "alert_id": "{{ monitor.id }}", + "precision": 2, + "text_align": "left", + "title": "", + "title_align": "left", + "title_size": "16", + "type": "alert_value", + "unit": "auto" + }, + "layout": { + "height": 8, + "width": 15, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with alert_value widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-an-audit-logs-query.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-an-audit-logs-query.json new file mode 100644 index 0000000000..7b9bf5b07f --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-an-audit-logs-query.json @@ -0,0 +1,62 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with an audit logs query", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with Audit Logs Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "audit", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + }, + "layout": { + "height": 2, + "width": 4, + "x": 2, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with an audit logs query", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-dependency-stats-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-dependency-stats-widget.json new file mode 100644 index 0000000000..c956033e86 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-dependency-stats-widget.json @@ -0,0 +1,63 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with apm dependency stats widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "data_source": "apm_dependency_stats", + "env": "ci", + "name": "query1", + "operation_name": "cassandra.query", + "primary_tag_name": "datacenter", + "primary_tag_value": "edge-eu1.prod.dog", + "resource_name": "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?", + "service": "cassandra", + "stat": "avg_duration" + } + ], + "response_format": "scalar" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with apm dependency stats widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-issue-stream-list-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-issue-stream-list-stream-widget.json new file mode 100644 index 0000000000..7df9cb05f6 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-issue-stream-list-stream-widget.json @@ -0,0 +1,51 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with apm_issue_stream list_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "apm_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with apm_issue_stream list_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-metrics-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-metrics-widget.json new file mode 100644 index 0000000000..711c1102b3 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-metrics-widget.json @@ -0,0 +1,62 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with apm metrics widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "data_source": "apm_metrics", + "group_by": [ + "resource_name" + ], + "name": "query1", + "query_filter": "env:prod", + "service": "web-store", + "stat": "hits" + } + ], + "response_format": "scalar" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with apm metrics widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-resource-stats-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-resource-stats-widget.json new file mode 100644 index 0000000000..3ef35ac1b4 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-apm-resource-stats-widget.json @@ -0,0 +1,65 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with apm resource stats widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "data_source": "apm_resource_stats", + "env": "ci", + "group_by": [ + "resource_name" + ], + "name": "query1", + "operation_name": "cassandra.query", + "primary_tag_name": "datacenter", + "primary_tag_value": "edge-eu1.prod.dog", + "service": "cassandra", + "stat": "hits" + } + ], + "response_format": "scalar" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with apm resource stats widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-bar-chart-widget-sorted-by-group.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-bar-chart-widget-sorted-by-group.json new file mode 100644 index 0000000000..55fedaa574 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-bar-chart-widget-sorted-by-group.json @@ -0,0 +1,85 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with bar_chart widget sorted by group", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "name": "service", + "order": "asc", + "type": "group" + } + ] + } + } + ], + "style": { + "display": { + "legend": "inline", + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "bar_chart" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with bar_chart widget sorted by group", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-bar-chart-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-bar-chart-widget.json new file mode 100644 index 0000000000..fb2fe28ddd --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-bar-chart-widget.json @@ -0,0 +1,85 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with bar_chart widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/bar_chart_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "style": { + "display": { + "legend": "inline", + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "bar_chart" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with bar_chart widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-check-status-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-check-status-widget.json new file mode 100644 index 0000000000..0bfe0c0133 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-check-status-widget.json @@ -0,0 +1,52 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with check_status widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/check_status_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "check": "datadog.agent.up", + "grouping": "check", + "tags": [ + "*" + ], + "title_align": "left", + "title_size": "16", + "type": "check_status" + }, + "layout": { + "height": 8, + "width": 15, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with check_status widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-ci-test-stream-list-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-ci-test-stream-list-stream-widget.json new file mode 100644 index 0000000000..e6d6be2564 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-ci-test-stream-list-stream-widget.json @@ -0,0 +1,51 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with ci_test_stream list_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "ci_test_stream", + "query_string": "test_level:suite" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with ci_test_stream list_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-distribution-widget-and-apm-stats-data.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-distribution-widget-and-apm-stats-data.json new file mode 100644 index 0000000000..c46f445b7f --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-distribution-widget-and-apm-stats-data.json @@ -0,0 +1,56 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with distribution widget and apm stats data", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "apm_stats_query": { + "env": "prod", + "name": "cassandra.query", + "primary_tag": "datacenter:dc1", + "row_type": "service", + "service": "cassandra" + } + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "distribution" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with distribution widget and apm stats data", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-distribution-widget-with-markers-and-num-buckets.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-distribution-widget-with-markers-and-num-buckets.json new file mode 100644 index 0000000000..842dae979b --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-distribution-widget-with-markers-and-num-buckets.json @@ -0,0 +1,85 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with distribution widget with markers and num_buckets", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "markers": [ + { + "display_type": "percentile", + "value": "50" + }, + { + "display_type": "percentile", + "value": "99" + }, + { + "display_type": "percentile", + "value": "90" + } + ], + "requests": [ + { + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "distribution", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "num_buckets": 55, + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with distribution widget with markers and num_buckets", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-event-stream-list-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-event-stream-list-stream-widget.json new file mode 100644 index 0000000000..26bd8f1545 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-event-stream-list-stream-widget.json @@ -0,0 +1,52 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with event_stream list_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "event_stream", + "event_size": "l", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with event_stream list_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-event-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-event-stream-widget.json new file mode 100644 index 0000000000..00af92d1fe --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-event-stream-widget.json @@ -0,0 +1,51 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with event_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/event_stream_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "event_size": "s", + "query": "example-query", + "tags_execution": "and", + "title": "", + "title_align": "left", + "title_size": "16", + "type": "event_stream" + }, + "layout": { + "height": 38, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with event_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-event-timeline-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-event-timeline-widget.json new file mode 100644 index 0000000000..24cbc15216 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-event-timeline-widget.json @@ -0,0 +1,50 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with event_timeline widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/event_timeline_widget.json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "query": "status:error priority:all", + "tags_execution": "and", + "title": "", + "title_align": "left", + "title_size": "16", + "type": "event_timeline" + }, + "layout": { + "height": 9, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with event_timeline widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formula-and-function-distribution-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formula-and-function-distribution-widget.json new file mode 100644 index 0000000000..3a52a91ed0 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formula-and-function-distribution-widget.json @@ -0,0 +1,80 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with formula and function distribution widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "compute": { + "aggregation": "avg", + "metric": "@duration" + }, + "data_source": "logs", + "group_by": [ + { + "facet": "service", + "limit": 1000, + "sort": { + "aggregation": "count", + "order": "desc" + } + } + ], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + }, + "storage": "hot" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "distribution" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with formula and function distribution widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formula-and-function-heatmap-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formula-and-function-heatmap-widget.json new file mode 100644 index 0000000000..3508d264b0 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formula-and-function-heatmap-widget.json @@ -0,0 +1,68 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with formula and function heatmap widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries", + "style": { + "palette": "dog_classic" + } + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "heatmap" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with formula and function heatmap widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-events-query-using-facet-group-by.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-events-query-using-facet-group-by.json new file mode 100644 index 0000000000..21b6920217 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-events-query-using-facet-group-by.json @@ -0,0 +1,65 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with formulas and functions events query using facet group by", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with events facet group_by", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "events", + "group_by": [ + { + "facet": "service", + "limit": 10 + } + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with formulas and functions events query using facet group by", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-events-query-using-flat-group-by-fields.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-events-query-using-flat-group-by-fields.json new file mode 100644 index 0000000000..5c711b99b1 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-events-query-using-flat-group-by-fields.json @@ -0,0 +1,66 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with formulas and functions events query using flat group by fields", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with events flat group_by fields", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "events", + "group_by": { + "fields": [ + "service", + "host" + ], + "limit": 10 + }, + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with formulas and functions events query using flat group by fields", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-scatterplot-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-scatterplot-widget.json new file mode 100644 index 0000000000..e4cf87f7df --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-formulas-and-functions-scatterplot-widget.json @@ -0,0 +1,77 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with formulas and functions scatterplot widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": { + "table": { + "formulas": [ + { + "alias": "my-query1", + "dimension": "x", + "formula": "query1" + }, + { + "alias": "my-query2", + "dimension": "y", + "formula": "query2" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query2", + "query": "avg:system.mem.used{*} by {service}" + } + ], + "response_format": "scalar" + } + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "scatterplot" + }, + "id": 5346764334358972, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with formulas and functions scatterplot widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-free-text-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-free-text-widget.json new file mode 100644 index 0000000000..2119a789ff --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-free-text-widget.json @@ -0,0 +1,49 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with free_text widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/free_text_widget.json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "color": "#4d4d4d", + "font_size": "auto", + "text": "Example free text", + "text_align": "left", + "type": "free_text" + }, + "layout": { + "height": 6, + "width": 24, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with free_text widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-funnel-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-funnel-widget.json new file mode 100644 index 0000000000..2b21ac3156 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-funnel-widget.json @@ -0,0 +1,46 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with funnel widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with funnel widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "rum", + "query_string": "", + "steps": [] + }, + "request_type": "funnel" + } + ], + "type": "funnel" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with funnel widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-geomap-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-geomap-widget.json new file mode 100644 index 0000000000..90254a0575 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-geomap-widget.json @@ -0,0 +1,101 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with geomap widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/geomap_widget.json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "group_by": [ + { + "facet": "@geo.country_iso_code", + "limit": 250, + "sort": { + "aggregation": "count", + "order": "desc" + } + } + ], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar", + "sort": { + "count": 250, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "style": { + "palette": "hostmap_blues", + "palette_flip": false + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "geomap", + "view": { + "focus": "WORLD" + } + }, + "layout": { + "height": 30, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with geomap widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-heatmap-widget-with-markers-and-num-buckets.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-heatmap-widget-with-markers-and-num-buckets.json new file mode 100644 index 0000000000..1f7f186a88 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-heatmap-widget-with-markers-and-num-buckets.json @@ -0,0 +1,74 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with heatmap widget with markers and num_buckets", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "markers": [ + { + "display_type": "percentile", + "value": "50" + }, + { + "display_type": "percentile", + "value": "99" + } + ], + "requests": [ + { + "query": { + "data_source": "metrics", + "name": "query1", + "query": "histogram:trace.servlet.request{*}" + }, + "request_type": "histogram" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "heatmap", + "xaxis": { + "num_buckets": 75 + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with heatmap widget with markers and num_buckets", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-heatmap-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-heatmap-widget.json new file mode 100644 index 0000000000..0c3dc68df2 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-heatmap-widget.json @@ -0,0 +1,57 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with heatmap widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/heatmap_widget.json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "q": "avg:system.cpu.user{*} by {service}", + "style": { + "palette": "dog_classic" + } + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "heatmap" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with heatmap widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-hostmap-ddsql-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-hostmap-ddsql-widget.json new file mode 100644 index 0000000000..ae2a275eb4 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-hostmap-ddsql-widget.json @@ -0,0 +1,78 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with hostmap DDSQL widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/hostmap_ddsql_widget.json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": { + "limit": 1000, + "projection": { + "dimensions": [ + { + "column": "entity_id", + "dimension": "node" + }, + { + "column": "parent_id", + "dimension": "group" + }, + { + "column": "cpu_usage", + "dimension": "fill" + } + ], + "type": "hostmap" + }, + "query": { + "data_source": "dataset", + "dataset_id": "abc-123-def", + "dataset_provider": "ddsql_query" + }, + "request_type": "data_projection", + "style": { + "palette": "green_to_orange", + "palette_flip": false + } + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "hostmap" + }, + "layout": { + "height": 22, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with hostmap DDSQL widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-hostmap-infra-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-hostmap-infra-widget.json new file mode 100644 index 0000000000..9e2b5542f5 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-hostmap-infra-widget.json @@ -0,0 +1,81 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with hostmap infra widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/hostmap_infra_widget.json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": { + "enrichments": [ + { + "formulas": [ + { + "dimension": "fill", + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {host}" + } + ], + "response_format": "scalar" + } + ], + "filter": "env:prod", + "group_by": [ + { + "column": "tags", + "key": "service" + } + ], + "node_type": "host", + "request_type": "infrastructure_hostmap", + "style": { + "palette": "green_to_orange", + "palette_flip": false + } + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "hostmap" + }, + "layout": { + "height": 22, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with hostmap infra widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-hostmap-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-hostmap-widget.json new file mode 100644 index 0000000000..d43a3f9038 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-hostmap-widget.json @@ -0,0 +1,60 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with hostmap widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/hostmap_widget.json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "no_group_hosts": true, + "no_metric_hosts": true, + "node_type": "host", + "requests": { + "fill": { + "q": "avg:system.cpu.user{*} by {host}" + } + }, + "style": { + "palette": "green_to_orange", + "palette_flip": false + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "hostmap" + }, + "layout": { + "height": 22, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with hostmap widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-iframe-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-iframe-widget.json new file mode 100644 index 0000000000..bb3e883a80 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-iframe-widget.json @@ -0,0 +1,46 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with iframe widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/iframe_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "type": "iframe", + "url": "https://docs.datadoghq.com/api/latest/" + }, + "layout": { + "height": 12, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with iframe widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-image-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-image-widget.json new file mode 100644 index 0000000000..335eb7a46f --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-image-widget.json @@ -0,0 +1,47 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with image widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/image_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "sizing": "cover", + "type": "image", + "url": "https://example.com/image.png" + }, + "layout": { + "height": 12, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with image widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-invalid-team-tags-returns-bad-request-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-invalid-team-tags-returns-bad-request-response.json new file mode 100644 index 0000000000..919fd4cdc0 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-invalid-team-tags-returns-bad-request-response.json @@ -0,0 +1,82 @@ +{ + "api": "Dashboards", + "expected_status": 400, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with invalid team tags returns \"Bad Request\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "tags": [ + "tm:foobar" + ], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "change_type": "absolute", + "compare_to": "hour_before", + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "increase_good": true, + "order_by": "change", + "order_dir": "desc", + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "change" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with invalid team tags returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-list-stream-widget-with-a-valid-sort-parameter-asc.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-list-stream-widget-with-a-valid-sort-parameter-asc.json new file mode 100644 index 0000000000..9f5c3b827b --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-list-stream-widget-with-a-valid-sort-parameter-asc.json @@ -0,0 +1,56 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with list_stream widget with a valid sort parameter ASC", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "event_stream", + "event_size": "l", + "query_string": "", + "sort": { + "column": "timestamp", + "order": "asc" + } + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with list_stream widget with a valid sort parameter ASC", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-list-stream-widget-with-a-valid-sort-parameter-desc.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-list-stream-widget-with-a-valid-sort-parameter-desc.json new file mode 100644 index 0000000000..551be2fa3f --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-list-stream-widget-with-a-valid-sort-parameter-desc.json @@ -0,0 +1,56 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with list_stream widget with a valid sort parameter DESC", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "event_stream", + "event_size": "l", + "query_string": "", + "sort": { + "column": "timestamp", + "order": "desc" + } + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with list_stream widget with a valid sort parameter DESC", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-list-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-list-stream-widget.json new file mode 100644 index 0000000000..f2fac36b70 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-list-stream-widget.json @@ -0,0 +1,51 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with list_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "apm_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with list_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-llm-observability-stream-list-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-llm-observability-stream-list-stream-widget.json new file mode 100644 index 0000000000..b59d59d2be --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-llm-observability-stream-list-stream-widget.json @@ -0,0 +1,84 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with llm_observability_stream list_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "@status", + "width": "compact" + }, + { + "field": "@content.prompt", + "width": "auto" + }, + { + "field": "@content.response.content", + "width": "auto" + }, + { + "field": "timestamp", + "width": "auto" + }, + { + "field": "@ml_app", + "width": "auto" + }, + { + "field": "service", + "width": "auto" + }, + { + "field": "@meta.evaluations.quality", + "width": "auto" + }, + { + "field": "@meta.evaluations.security", + "width": "auto" + }, + { + "field": "@duration", + "width": "auto" + } + ], + "query": { + "data_source": "llm_observability_stream", + "indexes": [], + "query_string": "@event_type:span @parent_id:undefined" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with llm_observability_stream list_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-log-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-log-stream-widget.json new file mode 100644 index 0000000000..e76482e842 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-log-stream-widget.json @@ -0,0 +1,63 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with log_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/log_stream_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "columns": [ + "host", + "service" + ], + "indexes": [ + "main" + ], + "message_display": "expanded-md", + "query": "", + "show_date_column": true, + "show_message_column": true, + "sort": { + "column": "time", + "order": "desc" + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "log_stream" + }, + "layout": { + "height": 36, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with log_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-pattern-stream-list-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-pattern-stream-list-stream-widget.json new file mode 100644 index 0000000000..0f6cb7c3fe --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-pattern-stream-list-stream-widget.json @@ -0,0 +1,61 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with logs_pattern_stream list_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + }, + { + "field": "message", + "width": "auto" + } + ], + "query": { + "clustering_pattern_field_path": "message", + "data_source": "logs_pattern_stream", + "group_by": [ + { + "facet": "service" + } + ], + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with logs_pattern_stream list_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-query-table-widget-and-storage-parameter.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-query-table-widget-and-storage-parameter.json new file mode 100644 index 0000000000..9fc80a57a4 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-query-table-widget-and-storage-parameter.json @@ -0,0 +1,74 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with logs query table widget and storage parameter", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with query table widget and storage parameter", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "cell_display_mode": "bar", + "conditional_formats": [], + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + }, + "storage": "online_archives" + } + ], + "response_format": "scalar", + "sort": { + "count": 50, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "type": "query_table" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with logs query table widget and storage parameter", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-stream-list-stream-widget-and-storage-parameter.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-stream-list-stream-widget-and-storage-parameter.json new file mode 100644 index 0000000000..ea15cb9f65 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-stream-list-stream-widget-and-storage-parameter.json @@ -0,0 +1,52 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with logs_stream list_stream widget and storage parameter", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "logs_stream", + "query_string": "", + "storage": "hot" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with logs_stream list_stream widget and storage parameter", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-transaction-stream-list-stream-widget-and-version.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-transaction-stream-list-stream-widget-and-version.json new file mode 100644 index 0000000000..f1246e9976 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-transaction-stream-list-stream-widget-and-version.json @@ -0,0 +1,63 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with logs_transaction_stream list_stream widget and version", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "compute": [ + { + "aggregation": "count", + "facet": "service" + } + ], + "data_source": "logs_transaction_stream", + "group_by": [ + { + "facet": "service" + } + ], + "query_string": "", + "version": "sequential_query" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with logs_transaction_stream list_stream widget and version", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-transaction-stream-list-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-transaction-stream-list-stream-widget.json new file mode 100644 index 0000000000..5cc2407bed --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-logs-transaction-stream-list-stream-widget.json @@ -0,0 +1,62 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with logs_transaction_stream list_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "compute": [ + { + "aggregation": "count", + "facet": "service" + } + ], + "data_source": "logs_transaction_stream", + "group_by": [ + { + "facet": "service" + } + ], + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with logs_transaction_stream list_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-manage-status-widget-and-show-priority-parameter.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-manage-status-widget-and-show-priority-parameter.json new file mode 100644 index 0000000000..dcf9565692 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-manage-status-widget-and-show-priority-parameter.json @@ -0,0 +1,55 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with manage_status widget and show_priority parameter", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/manage_status_widget_priority_sort.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "color_preference": "text", + "count": 50, + "display_format": "countsAndList", + "hide_zero_counts": true, + "query": "", + "show_last_triggered": false, + "show_priority": false, + "sort": "priority,asc", + "start": 0, + "summary_type": "monitors", + "type": "manage_status" + }, + "layout": { + "height": 25, + "width": 50, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with manage_status widget and show_priority parameter", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-manage-status-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-manage-status-widget.json new file mode 100644 index 0000000000..5381946cad --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-manage-status-widget.json @@ -0,0 +1,54 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with manage_status widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/manage_status_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "color_preference": "text", + "count": 50, + "display_format": "countsAndList", + "hide_zero_counts": true, + "query": "", + "show_last_triggered": false, + "sort": "status,asc", + "start": 0, + "summary_type": "monitors", + "type": "manage_status" + }, + "layout": { + "height": 25, + "width": 50, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with manage_status widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-note-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-note-widget.json new file mode 100644 index 0000000000..f6e03ef751 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-note-widget.json @@ -0,0 +1,46 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with note widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/note_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "content": "# Example Note", + "type": "note" + }, + "layout": { + "height": 24, + "width": 18, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with note widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-point-plot-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-point-plot-widget.json new file mode 100644 index 0000000000..f1449268f5 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-point-plot-widget.json @@ -0,0 +1,61 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with point_plot widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/point_plot_widget.json", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "projection": { + "dimensions": [ + { + "column": "host", + "dimension": "group" + }, + { + "column": "@duration", + "dimension": "y" + } + ], + "type": "point_plot" + }, + "query": { + "data_source": "logs", + "query_string": "service:web-store" + }, + "request_type": "data_projection" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "point_plot" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with point_plot widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-powerpack-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-powerpack-widget.json new file mode 100644 index 0000000000..1f1e5a3209 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-powerpack-widget.json @@ -0,0 +1,59 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with powerpack widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/powerpack_widget.json", + "value": { + "description": "description", + "layout_type": "ordered", + "title": "{{ unique }} with powerpack widget", + "widgets": [ + { + "definition": { + "powerpack_id": "{{ powerpack.data.id }}", + "template_variables": { + "controlled_by_powerpack": [ + { + "name": "foo", + "prefix": "bar", + "values": [ + "baz", + "qux", + "quuz" + ] + } + ], + "controlled_externally": [] + }, + "type": "powerpack" + }, + "layout": { + "height": 2, + "is_column_break": false, + "width": 2, + "x": 1, + "y": 1 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with powerpack widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-table-widget-and-cell-display-mode-is-trend.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-table-widget-and-cell-display-mode-is-trend.json new file mode 100644 index 0000000000..7b51b18c99 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-table-widget-and-cell-display-mode-is-trend.json @@ -0,0 +1,84 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with query_table widget and cell_display_mode is trend", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/query_table_widget_cell_display_mode_trend.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "has_search_bar": "auto", + "requests": [ + { + "formulas": [ + { + "cell_display_mode": "trend", + "cell_display_mode_options": { + "trend_type": "line", + "y_scale": "shared" + }, + "conditional_formats": [], + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {host}" + } + ], + "response_format": "scalar", + "sort": { + "count": 500, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 32, + "width": 54, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with query_table widget and cell_display_mode is trend", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-table-widget-and-text-formatting.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-table-widget-and-text-formatting.json new file mode 100644 index 0000000000..e4cd6ce416 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-table-widget-and-text-formatting.json @@ -0,0 +1,170 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with query_table widget and text formatting", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/query_table_widget_text_formatting.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "has_search_bar": "never", + "requests": [ + { + "formulas": [], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:aws.stream.globalaccelerator.processed_bytes_in{*} by {aws_account,acceleratoripaddress}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query2", + "query": "avg:aws.stream.globalaccelerator.processed_bytes_out{*} by {aws_account,acceleratoripaddress}" + } + ], + "response_format": "scalar", + "text_formats": [ + [ + { + "match": { + "type": "is", + "value": "fruit" + }, + "palette": "white_on_red", + "replace": { + "type": "all", + "with": "vegetable" + } + }, + { + "custom_bg_color": "#632ca6", + "match": { + "type": "is", + "value": "animal" + }, + "palette": "custom_bg" + }, + { + "match": { + "type": "is", + "value": "robot" + }, + "palette": "red_on_white" + }, + { + "match": { + "type": "is", + "value": "ai" + }, + "palette": "yellow_on_white" + } + ], + [ + { + "match": { + "type": "is_not", + "value": "xyz" + }, + "palette": "white_on_yellow" + } + ], + [ + { + "match": { + "type": "contains", + "value": "test" + }, + "palette": "white_on_green", + "replace": { + "type": "all", + "with": "vegetable" + } + } + ], + [ + { + "match": { + "type": "does_not_contain", + "value": "blah" + }, + "palette": "black_on_light_red" + } + ], + [ + { + "match": { + "type": "starts_with", + "value": "abc" + }, + "palette": "black_on_light_yellow" + } + ], + [ + { + "match": { + "type": "ends_with", + "value": "xyz" + }, + "palette": "black_on_light_green" + }, + { + "match": { + "type": "ends_with", + "value": "zzz" + }, + "palette": "green_on_white" + }, + { + "custom_fg_color": "#632ca6", + "match": { + "type": "is", + "value": "animal" + }, + "palette": "custom_text" + } + ] + ] + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with query_table widget and text formatting", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-table-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-table-widget.json new file mode 100644 index 0000000000..75e53ef2bd --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-table-widget.json @@ -0,0 +1,80 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with query_table widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/query_table_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "has_search_bar": "auto", + "requests": [ + { + "formulas": [ + { + "cell_display_mode": "bar", + "conditional_formats": [], + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {host}" + } + ], + "response_format": "scalar", + "sort": { + "count": 500, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 32, + "width": 54, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with query_table widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-value-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-value-widget.json new file mode 100644 index 0000000000..003a80cbee --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-query-value-widget.json @@ -0,0 +1,65 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with query_value widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/query_value_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "autoscale": true, + "description": "Example widget description", + "precision": 2, + "requests": [ + { + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with query_value widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-rum-issue-stream-list-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-rum-issue-stream-list-stream-widget.json new file mode 100644 index 0000000000..2cd97096c0 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-rum-issue-stream-list-stream-widget.json @@ -0,0 +1,51 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with rum_issue_stream list_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "rum_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with rum_issue_stream list_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-run-workflow-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-run-workflow-widget.json new file mode 100644 index 0000000000..4e3110e26a --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-run-workflow-widget.json @@ -0,0 +1,56 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with run-workflow widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/run_workflow_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "inputs": [ + { + "name": "environment", + "value": "$env.value" + } + ], + "time": {}, + "title": "Run workflow title", + "title_align": "left", + "title_size": "16", + "type": "run_workflow", + "workflow_id": "2e055f16-8b6a-4cdd-b452-17a34c44b160" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with run-workflow widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-network-data-source.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-network-data-source.json new file mode 100644 index 0000000000..944caed3c5 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-network-data-source.json @@ -0,0 +1,62 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with sankey widget and network data source", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/sankey_network_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "network", + "group_by": [ + "source", + "destination" + ], + "limit": 100, + "query_string": "*" + }, + "request_type": "netflow_sankey" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "sankey" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with sankey widget and network data source", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-product-analytics-data-source.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-product-analytics-data-source.json new file mode 100644 index 0000000000..c55bcf6308 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-product-analytics-data-source.json @@ -0,0 +1,58 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with sankey widget and product analytics data source", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/sankey_product_analytics_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "product_analytics", + "mode": "source", + "query_string": "@type:session" + }, + "request_type": "sankey" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "sankey" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with sankey widget and product analytics data source", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-rum-data-source.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-rum-data-source.json new file mode 100644 index 0000000000..9d60146535 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sankey-widget-and-rum-data-source.json @@ -0,0 +1,58 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with sankey widget and RUM data source", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/sankey_rum_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "rum", + "mode": "source", + "query_string": "@type:view" + }, + "request_type": "sankey" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "sankey" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with sankey widget and RUM data source", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-scatterplot-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-scatterplot-widget.json new file mode 100644 index 0000000000..1f6bf8c8d4 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-scatterplot-widget.json @@ -0,0 +1,93 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with scatterplot widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/scatterplot_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "color_by_groups": [], + "requests": { + "table": { + "formulas": [ + { + "alias": "", + "dimension": "x", + "formula": "query1" + }, + { + "alias": "", + "dimension": "y", + "formula": "query2" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query2", + "query": "avg:system.mem.used{*} by {service}" + } + ], + "response_format": "scalar" + } + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "scatterplot", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with scatterplot widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-servicemap-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-servicemap-widget.json new file mode 100644 index 0000000000..6d544381cb --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-servicemap-widget.json @@ -0,0 +1,53 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with servicemap widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/servicemap_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "filters": [ + "env:none", + "environment:*" + ], + "service": "", + "title": "", + "title_align": "left", + "title_size": "16", + "type": "servicemap" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with servicemap widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-slo-list-widget-with-sort.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-slo-list-widget-with-sort.json new file mode 100644 index 0000000000..a4fe85d862 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-slo-list-widget-with-sort.json @@ -0,0 +1,62 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with slo list widget with sort", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/slo_list_widget_with_sort.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "limit": 75, + "query_string": "env:prod AND service:my-app", + "sort": [ + { + "column": "status.sli", + "order": "asc" + } + ] + }, + "request_type": "slo_list" + } + ], + "title_align": "left", + "title_size": "16", + "type": "slo_list" + }, + "layout": { + "height": 21, + "width": 60, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with slo list widget with sort", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-slo-list-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-slo-list-widget.json new file mode 100644 index 0000000000..b5f9a80924 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-slo-list-widget.json @@ -0,0 +1,56 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with slo list widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/slo_list_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "limit": 75, + "query_string": "env:prod AND service:my-app" + }, + "request_type": "slo_list" + } + ], + "title_align": "left", + "title_size": "16", + "type": "slo_list" + }, + "layout": { + "height": 21, + "width": 60, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with slo list widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-slo-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-slo-widget.json new file mode 100644 index 0000000000..22d0724084 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-slo-widget.json @@ -0,0 +1,56 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with slo widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/slo_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "additional_query_filters": "!host:excluded_host", + "global_time_target": "0", + "show_error_budget": true, + "slo_id": "{{ slo.data[0].id }}", + "time_windows": [ + "7d" + ], + "title_align": "left", + "title_size": "16", + "type": "slo", + "view_mode": "overall", + "view_type": "detail" + }, + "layout": { + "height": 21, + "width": 60, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with slo widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-split-graph-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-split-graph-widget.json new file mode 100644 index 0000000000..ce15fc67f5 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-split-graph-widget.json @@ -0,0 +1,109 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with split graph widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/split_graph_widget.json", + "value": { + "description": "", + "layout_type": "ordered", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "has_uniform_y_axes": true, + "size": "md", + "source_widget_definition": { + "requests": [ + { + "display_type": "line", + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "split_config": { + "limit": 24, + "sort": { + "compute": { + "aggregation": "sum", + "metric": "system.cpu.user" + }, + "order": "desc" + }, + "split_dimensions": [ + { + "one_graph_per": "service" + } + ], + "static_splits": [ + [ + { + "tag_key": "service", + "tag_values": [ + "cassandra" + ] + }, + { + "tag_key": "datacenter", + "tag_values": [] + } + ], + [ + { + "tag_key": "demo", + "tag_values": [ + "env" + ] + } + ] + ] + }, + "title": "", + "type": "split_group" + }, + "layout": { + "height": 8, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with split graph widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sunburst-widget-and-metrics-data.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sunburst-widget-and-metrics-data.json new file mode 100644 index 0000000000..64e5cee878 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-sunburst-widget-and-metrics-data.json @@ -0,0 +1,66 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with sunburst widget and metrics data", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "sum", + "data_source": "metrics", + "name": "query1", + "query": "sum:system.mem.used{*} by {service}" + } + ], + "response_format": "scalar", + "style": { + "palette": "dog_classic" + } + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "sunburst" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with sunburst widget and metrics data", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-team-tags-returns-ok-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-team-tags-returns-ok-response.json new file mode 100644 index 0000000000..7a7d35938a --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-team-tags-returns-ok-response.json @@ -0,0 +1,82 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with team tags returns \"OK\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "tags": [ + "team:foobar" + ], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "change_type": "absolute", + "compare_to": "hour_before", + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "increase_good": true, + "order_by": "change", + "order_dir": "desc", + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "change" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with team tags returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-and-default-returns-bad-request-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-and-default-returns-bad-request-response.json new file mode 100644 index 0000000000..d2adcd3e48 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-and-default-returns-bad-request-response.json @@ -0,0 +1,60 @@ +{ + "api": "Dashboards", + "expected_status": 400, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with template variable defaults and default returns \"Bad Request\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "default": "my-host", + "defaults": [ + "my-host" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with template variable defaults and default returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-returns-ok-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-returns-ok-response.json new file mode 100644 index 0000000000..2254ca1540 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-returns-ok-response.json @@ -0,0 +1,59 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with template variable defaults returns \"OK\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "defaults": [ + "my-host" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with template variable defaults returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-whose-value-has-no-length-returns-bad-request-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-whose-value-has-no-length-returns-bad-request-response.json new file mode 100644 index 0000000000..9684d3c171 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-defaults-whose-value-has-no-length-returns-bad-request-response.json @@ -0,0 +1,59 @@ +{ + "api": "Dashboards", + "expected_status": 400, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with template variable defaults whose value has no length returns \"Bad Request\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "defaults": [ + "" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with template variable defaults whose value has no length returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-presets-using-values-and-value-returns-bad-request-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-presets-using-values-and-value-returns-bad-request-response.json new file mode 100644 index 0000000000..8e71537b17 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-presets-using-values-and-value-returns-bad-request-response.json @@ -0,0 +1,73 @@ +{ + "api": "Dashboards", + "expected_status": 400, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with template variable presets using values and value returns \"Bad Request\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variable_presets": [ + { + "name": "my saved view", + "template_variables": [ + { + "name": "datacenter", + "value": "*", + "values": [ + "*" + ] + } + ] + } + ], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "defaults": [ + "my-host" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with template variable presets using values and value returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-presets-using-values-returns-ok-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-presets-using-values-returns-ok-response.json new file mode 100644 index 0000000000..a96655010b --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-presets-using-values-returns-ok-response.json @@ -0,0 +1,73 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with template variable presets using values returns \"OK\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variable_presets": [ + { + "name": "my saved view", + "template_variables": [ + { + "name": "datacenter", + "values": [ + "*", + "my-host" + ] + } + ] + } + ], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "defaults": [ + "my-host" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with template variable presets using values returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-type-field-returns-ok-response.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-type-field-returns-ok-response.json new file mode 100644 index 0000000000..f8b9bde951 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-template-variable-type-field-returns-ok-response.json @@ -0,0 +1,60 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with template variable type field returns \"OK\" response", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variables": [ + { + "available_values": [ + "service", + "datacenter", + "env" + ], + "defaults": [ + "service", + "datacenter" + ], + "name": "group_by_var", + "type": "group" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with template variable type field returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-and-formula-style-attributes.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-and-formula-style-attributes.json new file mode 100644 index 0000000000..6c400d6771 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-and-formula-style-attributes.json @@ -0,0 +1,75 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with timeseries widget and formula style attributes", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "{{ unique }} with formula style", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1", + "style": { + "palette": "classic", + "palette_index": 4 + } + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "styled timeseries", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with timeseries widget and formula style attributes", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-containing-style-attributes.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-containing-style-attributes.json new file mode 100644 index 0000000000..5f1ff6037b --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-containing-style-attributes.json @@ -0,0 +1,48 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with timeseries widget containing style attributes", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with timeseries widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "bars", + "on_right_yaxis": false, + "q": "sum:trace.test.errors{env:prod,service:datadog-api-spec} by {resource_name}.as_count()", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "warm" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with timeseries widget containing style attributes", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-has-value-labels.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-has-value-labels.json new file mode 100644 index 0000000000..edf32b33bf --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-has-value-labels.json @@ -0,0 +1,48 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with timeseries widget using has_value_labels", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with has_value_labels", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.cpu.user{*} by {host}", + "style": { + "has_value_labels": true, + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with timeseries widget using has_value_labels", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-order-by-tags.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-order-by-tags.json new file mode 100644 index 0000000000..6c834f1f46 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-order-by-tags.json @@ -0,0 +1,46 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with timeseries widget using order_by tags", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with order_by tags", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.cpu.user{*} by {host}", + "style": { + "order_by": "tags", + "palette": "dog_classic" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with timeseries widget using order_by tags", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-order-by-values.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-order-by-values.json new file mode 100644 index 0000000000..e62355b2b4 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-using-order-by-values.json @@ -0,0 +1,46 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with timeseries widget using order_by values", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with order_by values", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.cpu.user{*} by {host}", + "style": { + "order_by": "values", + "palette": "warm" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with timeseries widget using order_by values", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-with-custom-unit.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-with-custom-unit.json new file mode 100644 index 0000000000..c2929fec6c --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-with-custom-unit.json @@ -0,0 +1,81 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with timeseries widget with custom_unit", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/timeseries_widget_with_custom_unit.json", + "value": { + "description": "", + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed", + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "description": "Example widget description", + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1", + "number_format": { + "unit": { + "type": "canonical_unit", + "unit_name": "fraction" + }, + "unit_scale": { + "type": "canonical_unit", + "unit_name": "apdex" + } + } + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries" + } + ], + "show_legend": true, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "layout": { + "height": 5, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with timeseries widget with custom_unit", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-without-order-by-for-backward-compatibility.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-without-order-by-for-backward-compatibility.json new file mode 100644 index 0000000000..248d3a120f --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-timeseries-widget-without-order-by-for-backward-compatibility.json @@ -0,0 +1,47 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with timeseries widget without order_by for backward compatibility", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} without order_by", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.cpu.user{*} by {host}", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with timeseries widget without order_by for backward compatibility", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-toplist-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-toplist-widget.json new file mode 100644 index 0000000000..0798efdbb4 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-toplist-widget.json @@ -0,0 +1,85 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with toplist widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/toplist_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "style": { + "display": { + "legend": "inline", + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "toplist" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with toplist widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-topology-map-data-streams-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-topology-map-data-streams-widget.json new file mode 100644 index 0000000000..a714c8d0ba --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-topology-map-data-streams-widget.json @@ -0,0 +1,61 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with topology_map data_streams widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/topology_map_widget_data_streams.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "data_streams", + "filters": [ + "env:prod" + ], + "query_string": "service:myservice", + "service": "" + }, + "request_type": "topology" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "topology_map" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with topology_map data_streams widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-topology-map-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-topology-map-widget.json new file mode 100644 index 0000000000..0909007e20 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-topology-map-widget.json @@ -0,0 +1,61 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with topology_map widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/topology_map_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "service_map", + "filters": [ + "env:none", + "environment:*" + ], + "service": "" + }, + "request_type": "topology" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "topology_map" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with topology_map widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-trace-service-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-trace-service-widget.json new file mode 100644 index 0000000000..822dee18a3 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-trace-service-widget.json @@ -0,0 +1,58 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with trace_service widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "dashboards_json_payload/trace_service_widget.json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "{{ unique }}", + "widgets": [ + { + "definition": { + "display_format": "two_column", + "env": "none", + "service": "", + "show_breakdown": true, + "show_distribution": true, + "show_errors": true, + "show_hits": true, + "show_latency": true, + "show_resource_list": false, + "size_format": "medium", + "span_name": "", + "time": {}, + "title": "Service Summary", + "type": "trace_service" + }, + "layout": { + "height": 72, + "width": 72, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with trace_service widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-dashboard-with-trace-stream-widget.json b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-trace-stream-widget.json new file mode 100644 index 0000000000..8ee0020929 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-dashboard-with-trace-stream-widget.json @@ -0,0 +1,55 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new dashboard with trace_stream widget", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + }, + { + "field": "service", + "width": "auto" + } + ], + "query": { + "data_source": "trace_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new dashboard with trace_stream widget", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-ci-pipelines-data-source.json b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-ci-pipelines-data-source.json new file mode 100644 index 0000000000..f7fa30a0b3 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-ci-pipelines-data-source.json @@ -0,0 +1,80 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new timeseries widget with ci_pipelines data source", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "{{ unique }} with ci_pipelines datasource", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count", + "metric": "@ci.queue_time" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "ci_level:job" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new timeseries widget with ci_pipelines data source", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-ci-tests-data-source.json b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-ci-tests-data-source.json new file mode 100644 index 0000000000..b03ef3b5fb --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-ci-tests-data-source.json @@ -0,0 +1,79 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new timeseries widget with ci_tests data source", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "{{ unique }} with ci_tests datasource", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_tests", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "test_level:test" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new timeseries widget with ci_tests data source", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-incident-analytics-data-source.json b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-incident-analytics-data-source.json new file mode 100644 index 0000000000..20378314a8 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-incident-analytics-data-source.json @@ -0,0 +1,79 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new timeseries widget with incident_analytics data source", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "{{ unique }} with incident_analytics datasource", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "incident_analytics", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "test_level:test" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new timeseries widget with incident_analytics data source", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-legacy-live-span-time-format.json b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-legacy-live-span-time-format.json new file mode 100644 index 0000000000..ca7ea42fda --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-legacy-live-span-time-format.json @@ -0,0 +1,83 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new timeseries widget with legacy live span time format", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "{{ unique }} with legacy live span time", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count", + "metric": "@ci.queue_time" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "ci_level:job" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": { + "hide_incomplete_cost_data": true, + "live_span": "5m" + }, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new timeseries widget with legacy live span time format", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-new-fixed-span-time-format.json b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-new-fixed-span-time-format.json new file mode 100644 index 0000000000..31ad804a8f --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-new-fixed-span-time-format.json @@ -0,0 +1,85 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new timeseries widget with new fixed span time format", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "{{ unique }} with new fixed span time", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count", + "metric": "@ci.queue_time" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "ci_level:job" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": { + "from": 1712080128, + "hide_incomplete_cost_data": true, + "to": 1712083128, + "type": "fixed" + }, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new timeseries widget with new fixed span time format", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-new-live-span-time-format.json b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-new-live-span-time-format.json new file mode 100644 index 0000000000..494dc2b7b9 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-new-live-span-time-format.json @@ -0,0 +1,85 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new timeseries widget with new live span time format", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "{{ unique }} with new live span time", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count", + "metric": "@ci.queue_time" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "ci_level:job" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": { + "hide_incomplete_cost_data": true, + "type": "live", + "unit": "minute", + "value": 8 + }, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new timeseries widget with new live span time format", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-product-analytics-data-source.json b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-product-analytics-data-source.json new file mode 100644 index 0000000000..024668cb55 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-new-timeseries-widget-with-product-analytics-data-source.json @@ -0,0 +1,79 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a new timeseries widget with product_analytics data source", + "operation_id": "CreateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "{{ unique }} with product_analytics datasource", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "product_analytics", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "test_level:test" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Create a new timeseries widget with product_analytics data source", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-shared-dashboard-returns-dashboard-not-found-response.json b/test-runner-data/v1/dashboards/create-a-shared-dashboard-returns-dashboard-not-found-response.json new file mode 100644 index 0000000000..d9312eebee --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-shared-dashboard-returns-dashboard-not-found-response.json @@ -0,0 +1,33 @@ +{ + "api": "Dashboards", + "expected_status": 404, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a shared dashboard returns \"Dashboard Not Found\" response", + "operation_id": "CreatePublicDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SharedDashboard", + "type": "object" + }, + "source": "inline", + "value": { + "dashboard_id": "abc-123-def", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard/public" + }, + "scenario": "Create a shared dashboard returns \"Dashboard Not Found\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-shared-dashboard-returns-ok-response.json b/test-runner-data/v1/dashboards/create-a-shared-dashboard-returns-ok-response.json new file mode 100644 index 0000000000..528ea28464 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-shared-dashboard-returns-ok-response.json @@ -0,0 +1,33 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a shared dashboard returns \"OK\" response", + "operation_id": "CreatePublicDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SharedDashboard", + "type": "object" + }, + "source": "inline", + "value": { + "dashboard_id": "{{dashboard.id}}", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard/public" + }, + "scenario": "Create a shared dashboard returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/create-a-shared-dashboard-with-a-group-template-variable-returns-ok-response.json b/test-runner-data/v1/dashboards/create-a-shared-dashboard-with-a-group-template-variable-returns-ok-response.json new file mode 100644 index 0000000000..d6968b9aa4 --- /dev/null +++ b/test-runner-data/v1/dashboards/create-a-shared-dashboard-with-a-group-template-variable-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Create a shared dashboard with a group template variable returns \"OK\" response", + "operation_id": "CreatePublicDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SharedDashboard", + "type": "object" + }, + "source": "inline", + "value": { + "dashboard_id": "{{dashboard.id}}", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "selectable_template_vars": [ + { + "default_value": "*", + "name": "group_by_var", + "type": "group", + "visible_tags": [ + "selectableValue1", + "selectableValue2" + ] + } + ], + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard/public" + }, + "scenario": "Create a shared dashboard with a group template variable returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/delete-a-dashboard-returns-ok-response.json b/test-runner-data/v1/dashboards/delete-a-dashboard-returns-ok-response.json new file mode 100644 index 0000000000..35592008eb --- /dev/null +++ b/test-runner-data/v1/dashboards/delete-a-dashboard-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Delete a dashboard returns \"OK\" response", + "operation_id": "DeleteDashboard", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dashboard.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/{dashboard_id}" + }, + "scenario": "Delete a dashboard returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/delete-dashboards-returns-no-content-response.json b/test-runner-data/v1/dashboards/delete-dashboards-returns-no-content-response.json new file mode 100644 index 0000000000..88f9ba03e8 --- /dev/null +++ b/test-runner-data/v1/dashboards/delete-dashboards-returns-no-content-response.json @@ -0,0 +1,33 @@ +{ + "api": "Dashboards", + "expected_status": 204, + "feature": "Dashboards", + "id": "v1/Dashboards/Delete dashboards returns \"No Content\" response", + "operation_id": "DeleteDashboards", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardBulkDeleteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "{{ dashboard.id }}", + "type": "dashboard" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Delete dashboards returns \"No Content\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/get-a-dashboard-returns-author-name.json b/test-runner-data/v1/dashboards/get-a-dashboard-returns-author-name.json new file mode 100644 index 0000000000..8194160fff --- /dev/null +++ b/test-runner-data/v1/dashboards/get-a-dashboard-returns-author-name.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Get a dashboard returns 'author_name'", + "operation_id": "GetDashboard", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dashboard.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/{dashboard_id}" + }, + "scenario": "Get a dashboard returns 'author_name'", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/get-a-dashboard-returns-ok-response.json b/test-runner-data/v1/dashboards/get-a-dashboard-returns-ok-response.json new file mode 100644 index 0000000000..6f2c8b2f17 --- /dev/null +++ b/test-runner-data/v1/dashboards/get-a-dashboard-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Get a dashboard returns \"OK\" response", + "operation_id": "GetDashboard", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dashboard.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/{dashboard_id}" + }, + "scenario": "Get a dashboard returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/get-a-shared-dashboard-returns-ok-response.json b/test-runner-data/v1/dashboards/get-a-shared-dashboard-returns-ok-response.json new file mode 100644 index 0000000000..6ad9e1e570 --- /dev/null +++ b/test-runner-data/v1/dashboards/get-a-shared-dashboard-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Get a shared dashboard returns \"OK\" response", + "operation_id": "GetPublicDashboard", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "token", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "shared_dashboard.token", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/public/{token}" + }, + "scenario": "Get a shared dashboard returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/get-all-dashboards-returns-ok-response-with-pagination.json b/test-runner-data/v1/dashboards/get-all-dashboards-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..fc8fa53f3c --- /dev/null +++ b/test-runner-data/v1/dashboards/get-all-dashboards-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Get all dashboards returns \"OK\" response with pagination", + "operation_id": "ListDashboards", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "count", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v1/dashboard" + }, + "scenario": "Get all dashboards returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/get-all-dashboards-returns-ok-response.json b/test-runner-data/v1/dashboards/get-all-dashboards-returns-ok-response.json new file mode 100644 index 0000000000..24ac224cba --- /dev/null +++ b/test-runner-data/v1/dashboards/get-all-dashboards-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Get all dashboards returns \"OK\" response", + "operation_id": "ListDashboards", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[shared]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": false + }, + "style": null + } + ], + "path": "/api/v1/dashboard" + }, + "scenario": "Get all dashboards returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/get-all-invitations-for-a-shared-dashboard-returns-ok-response.json b/test-runner-data/v1/dashboards/get-all-invitations-for-a-shared-dashboard-returns-ok-response.json new file mode 100644 index 0000000000..5b26e5a596 --- /dev/null +++ b/test-runner-data/v1/dashboards/get-all-invitations-for-a-shared-dashboard-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Get all invitations for a shared dashboard returns \"OK\" response", + "operation_id": "GetPublicDashboardInvitations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "token", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "shared_dashboard.token", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/public/{token}/invitation" + }, + "scenario": "Get all invitations for a shared dashboard returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/get-deleted-dashboards-returns-ok-response.json b/test-runner-data/v1/dashboards/get-deleted-dashboards-returns-ok-response.json new file mode 100644 index 0000000000..ea0399ec5e --- /dev/null +++ b/test-runner-data/v1/dashboards/get-deleted-dashboards-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Get deleted dashboards returns \"OK\" response", + "operation_id": "ListDashboards", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[deleted]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v1/dashboard" + }, + "scenario": "Get deleted dashboards returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/restore-deleted-dashboards-returns-no-content-response.json b/test-runner-data/v1/dashboards/restore-deleted-dashboards-returns-no-content-response.json new file mode 100644 index 0000000000..e92691dd72 --- /dev/null +++ b/test-runner-data/v1/dashboards/restore-deleted-dashboards-returns-no-content-response.json @@ -0,0 +1,33 @@ +{ + "api": "Dashboards", + "expected_status": 204, + "feature": "Dashboards", + "id": "v1/Dashboards/Restore deleted dashboards returns \"No Content\" response", + "operation_id": "RestoreDashboards", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardRestoreRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "{{ dashboard.id }}", + "type": "dashboard" + } + ] + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v1/dashboard" + }, + "scenario": "Restore deleted dashboards returns \"No Content\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/send-shared-dashboard-invitation-email-returns-ok.json b/test-runner-data/v1/dashboards/send-shared-dashboard-invitation-email-returns-ok.json new file mode 100644 index 0000000000..4bc0cecee0 --- /dev/null +++ b/test-runner-data/v1/dashboards/send-shared-dashboard-invitation-email-returns-ok.json @@ -0,0 +1,50 @@ +{ + "api": "Dashboards", + "expected_status": 201, + "feature": "Dashboards", + "id": "v1/Dashboards/Send shared dashboard invitation email returns OK", + "operation_id": "SendPublicDashboardInvitation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SharedDashboardInvites", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "email": "{{unique_lower_alnum}}@datadoghq.com" + }, + "type": "public_dashboard_invitation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "token", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "shared_dashboard.token", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/public/{token}/invitation" + }, + "scenario": "Send shared dashboard invitation email returns OK", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/update-a-dashboard-returns-ok-response.json b/test-runner-data/v1/dashboards/update-a-dashboard-returns-ok-response.json new file mode 100644 index 0000000000..b3fd27823b --- /dev/null +++ b/test-runner-data/v1/dashboards/update-a-dashboard-returns-ok-response.json @@ -0,0 +1,69 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Update a dashboard returns \"OK\" response", + "operation_id": "UpdateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "Updated description", + "layout_type": "ordered", + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "apm_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dashboard.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/{dashboard_id}" + }, + "scenario": "Update a dashboard returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/update-a-dashboard-with-tags-returns-ok-response.json b/test-runner-data/v1/dashboards/update-a-dashboard-with-tags-returns-ok-response.json new file mode 100644 index 0000000000..890d924023 --- /dev/null +++ b/test-runner-data/v1/dashboards/update-a-dashboard-with-tags-returns-ok-response.json @@ -0,0 +1,73 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Update a dashboard with tags returns \"OK\" response", + "operation_id": "UpdateDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Dashboard", + "type": "object" + }, + "source": "inline", + "value": { + "description": "Updated description", + "layout_type": "ordered", + "tags": [ + "team:foo", + "team:bar" + ], + "title": "{{ unique }} with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "apm_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dashboard.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/{dashboard_id}" + }, + "scenario": "Update a dashboard with tags returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/update-a-shared-dashboard-returns-ok-response.json b/test-runner-data/v1/dashboards/update-a-shared-dashboard-returns-ok-response.json new file mode 100644 index 0000000000..c7f79ad616 --- /dev/null +++ b/test-runner-data/v1/dashboards/update-a-shared-dashboard-returns-ok-response.json @@ -0,0 +1,49 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Update a shared dashboard returns \"OK\" response", + "operation_id": "UpdatePublicDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SharedDashboardUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "global_time": { + "live_span": "15m" + }, + "share_list": [], + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "token", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "shared_dashboard.token", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/public/{token}" + }, + "scenario": "Update a shared dashboard returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/dashboards/update-a-shared-dashboard-with-selectable-template-vars-returns-ok-response.json b/test-runner-data/v1/dashboards/update-a-shared-dashboard-with-selectable-template-vars-returns-ok-response.json new file mode 100644 index 0000000000..2403dbcfb2 --- /dev/null +++ b/test-runner-data/v1/dashboards/update-a-shared-dashboard-with-selectable-template-vars-returns-ok-response.json @@ -0,0 +1,60 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v1/Dashboards/Update a shared dashboard with selectable_template_vars returns \"OK\" response", + "operation_id": "UpdatePublicDashboard", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SharedDashboardUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "global_time": { + "live_span": "15m" + }, + "selectable_template_vars": [ + { + "default_value": "*", + "name": "group_by_var", + "type": "group", + "visible_tags": [ + "selectableValue1", + "selectableValue2" + ] + } + ], + "share_list": [], + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "token", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "shared_dashboard.token", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/dashboard/public/{token}" + }, + "scenario": "Update a shared dashboard with selectable_template_vars returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/cancel-a-downtime-returns-downtime-not-found-response.json b/test-runner-data/v1/downtimes/cancel-a-downtime-returns-downtime-not-found-response.json new file mode 100644 index 0000000000..1e020ec0fe --- /dev/null +++ b/test-runner-data/v1/downtimes/cancel-a-downtime-returns-downtime-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 404, + "feature": "Downtimes", + "id": "v1/Downtimes/Cancel a downtime returns \"Downtime not found\" response", + "operation_id": "CancelDowntime", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v1/downtime/{downtime_id}" + }, + "scenario": "Cancel a downtime returns \"Downtime not found\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/cancel-a-downtime-returns-ok-response.json b/test-runner-data/v1/downtimes/cancel-a-downtime-returns-ok-response.json new file mode 100644 index 0000000000..47d9e775dc --- /dev/null +++ b/test-runner-data/v1/downtimes/cancel-a-downtime-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 204, + "feature": "Downtimes", + "id": "v1/Downtimes/Cancel a downtime returns \"OK\" response", + "operation_id": "CancelDowntime", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "downtime.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/downtime/{downtime_id}" + }, + "scenario": "Cancel a downtime returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/cancel-downtimes-by-scope-returns-downtimes-not-found-response.json b/test-runner-data/v1/downtimes/cancel-downtimes-by-scope-returns-downtimes-not-found-response.json new file mode 100644 index 0000000000..1ee7d7a765 --- /dev/null +++ b/test-runner-data/v1/downtimes/cancel-downtimes-by-scope-returns-downtimes-not-found-response.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 404, + "feature": "Downtimes", + "id": "v1/Downtimes/Cancel downtimes by scope returns \"Downtimes not found\" response", + "operation_id": "CancelDowntimesByScope", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CancelDowntimesByScopeRequest", + "type": "object" + }, + "source": "inline", + "value": { + "scope": "test:{{ unique_lower_alnum }}_invalid" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime/cancel/by_scope" + }, + "scenario": "Cancel downtimes by scope returns \"Downtimes not found\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/cancel-downtimes-by-scope-returns-ok-response.json b/test-runner-data/v1/downtimes/cancel-downtimes-by-scope-returns-ok-response.json new file mode 100644 index 0000000000..9058810e37 --- /dev/null +++ b/test-runner-data/v1/downtimes/cancel-downtimes-by-scope-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v1/Downtimes/Cancel downtimes by scope returns \"OK\" response", + "operation_id": "CancelDowntimesByScope", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CancelDowntimesByScopeRequest", + "type": "object" + }, + "source": "inline", + "value": { + "scope": "{{ downtime.scope[0] }}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime/cancel/by_scope" + }, + "scenario": "Cancel downtimes by scope returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/get-a-downtime-returns-downtime-not-found-response.json b/test-runner-data/v1/downtimes/get-a-downtime-returns-downtime-not-found-response.json new file mode 100644 index 0000000000..1ae92293ed --- /dev/null +++ b/test-runner-data/v1/downtimes/get-a-downtime-returns-downtime-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 404, + "feature": "Downtimes", + "id": "v1/Downtimes/Get a downtime returns \"Downtime not found\" response", + "operation_id": "GetDowntime", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v1/downtime/{downtime_id}" + }, + "scenario": "Get a downtime returns \"Downtime not found\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/get-a-downtime-returns-ok-response.json b/test-runner-data/v1/downtimes/get-a-downtime-returns-ok-response.json new file mode 100644 index 0000000000..514b5b3249 --- /dev/null +++ b/test-runner-data/v1/downtimes/get-a-downtime-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v1/Downtimes/Get a downtime returns \"OK\" response", + "operation_id": "GetDowntime", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "downtime.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/downtime/{downtime_id}" + }, + "scenario": "Get a downtime returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/get-all-downtimes-returns-ok-response.json b/test-runner-data/v1/downtimes/get-all-downtimes-returns-ok-response.json new file mode 100644 index 0000000000..7f12db4931 --- /dev/null +++ b/test-runner-data/v1/downtimes/get-all-downtimes-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v1/Downtimes/Get all downtimes returns \"OK\" response", + "operation_id": "ListDowntimes", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "with_creator", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v1/downtime" + }, + "scenario": "Get all downtimes returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/schedule-a-downtime-once-a-year.json b/test-runner-data/v1/downtimes/schedule-a-downtime-once-a-year.json new file mode 100644 index 0000000000..86a09544d6 --- /dev/null +++ b/test-runner-data/v1/downtimes/schedule-a-downtime-once-a-year.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v1/Downtimes/Schedule a downtime once a year", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "downtime_recurrence_payload_once_a_year.json", + "value": { + "$openapi_transformer_template": "{\n \"message\": \"{{ unique }}\",\n \"recurrence\": {\n \"period\": 1,\n \"type\": \"years\"\n },\n \"scope\": [\"*\"],\n \"start\": {{ timestamp(\"now\") }},\n \"end\": {{ timestamp(\"now + 1h\") }},\n \"timezone\": \"Etc/UTC\",\n \"mute_first_recovery_notification\": true,\n \"monitor_tags\": [\n \"tag0\"\n ],\n \"notify_end_states\": [\n \"alert\",\n \"warn\"\n ],\n \"notify_end_types\": [\n \"expired\"\n ]\n}\n" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime" + }, + "scenario": "Schedule a downtime once a year", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/schedule-a-downtime-returns-bad-request-response.json b/test-runner-data/v1/downtimes/schedule-a-downtime-returns-bad-request-response.json new file mode 100644 index 0000000000..fcd8475948 --- /dev/null +++ b/test-runner-data/v1/downtimes/schedule-a-downtime-returns-bad-request-response.json @@ -0,0 +1,79 @@ +{ + "api": "Downtimes", + "expected_status": 400, + "feature": "Downtimes", + "id": "v1/Downtimes/Schedule a downtime returns \"Bad Request\" response", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "downtime_with_many_tags_payload.json", + "value": { + "monitor_tags": [ + "tag0", + "tag1", + "tag2", + "tag3", + "tag4", + "tag5", + "tag6", + "tag7", + "tag8", + "tag9", + "tag10", + "tag11", + "tag12", + "tag13", + "tag14", + "tag15", + "tag16", + "tag17", + "tag18", + "tag19", + "tag20", + "tag21", + "tag22", + "tag23", + "tag24", + "tag25", + "tag26", + "tag27", + "tag28", + "tag29", + "tag30", + "tag31", + "tag32", + "tag33", + "tag34", + "tag35", + "tag36", + "tag37", + "tag38", + "tag39", + "tag40", + "tag41", + "tag42", + "tag43", + "tag44", + "tag45", + "tag46", + "tag47", + "tag48", + "tag49" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime" + }, + "scenario": "Schedule a downtime returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/schedule-a-downtime-returns-ok-response.json b/test-runner-data/v1/downtimes/schedule-a-downtime-returns-ok-response.json new file mode 100644 index 0000000000..77e137f952 --- /dev/null +++ b/test-runner-data/v1/downtimes/schedule-a-downtime-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v1/Downtimes/Schedule a downtime returns \"OK\" response", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"message\": \"{{ unique }}\", \"start\": {{ timestamp(\"now\") }}, \"end\": {{ timestamp(\"now + 1h\") }}, \"timezone\": \"Etc/UTC\", \"scope\": [\"test:{{ unique_lower_alnum }}\"], \"recurrence\": {\"type\": \"weeks\", \"period\": 1, \"week_days\": [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\"], \"until_date\": {{ timestamp(\"now + 21d\")}} }, \"notify_end_states\": [\"alert\", \"no data\", \"warn\"], \"notify_end_types\": [\"canceled\", \"expired\"]}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime" + }, + "scenario": "Schedule a downtime returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/schedule-a-downtime-until-date.json b/test-runner-data/v1/downtimes/schedule-a-downtime-until-date.json new file mode 100644 index 0000000000..d90ccd6617 --- /dev/null +++ b/test-runner-data/v1/downtimes/schedule-a-downtime-until-date.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v1/Downtimes/Schedule a downtime until date", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "downtime_recurrence_payload_until_date.json", + "value": { + "$openapi_transformer_template": "{\n \"message\": \"{{ unique }}\",\n \"recurrence\": {\n \"period\": 1,\n \"type\": \"weeks\",\n \"until_date\": {{ timestamp(\"now + 21d\") }},\n \"week_days\": [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\"]\n },\n \"scope\": [\"*\"],\n \"start\": {{ timestamp(\"now\") }},\n \"end\": {{ timestamp(\"now + 1h\") }},\n \"timezone\": \"Etc/UTC\",\n \"mute_first_recovery_notification\": true,\n \"monitor_tags\": [\n \"tag0\"\n ],\n \"notify_end_states\": [\n \"alert\"\n ],\n \"notify_end_types\": [\n \"canceled\"\n ]\n}\n" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime" + }, + "scenario": "Schedule a downtime until date", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/schedule-a-downtime-with-invalid-type-hours.json b/test-runner-data/v1/downtimes/schedule-a-downtime-with-invalid-type-hours.json new file mode 100644 index 0000000000..e7ab926fae --- /dev/null +++ b/test-runner-data/v1/downtimes/schedule-a-downtime-with-invalid-type-hours.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 400, + "feature": "Downtimes", + "id": "v1/Downtimes/Schedule a downtime with invalid type hours", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "downtime_recurrence_payload_invalid_type_hours.json", + "value": { + "$openapi_transformer_template": "{\n \"message\": \"{{ unique }}\",\n \"recurrence\": {\n \"period\": 1,\n \"type\": \"hours\"\n },\n \"scope\": [\"*\"],\n \"start\": {{ timestamp(\"now\") }},\n \"end\": {{ timestamp(\"now + 1h\") }},\n \"timezone\": \"Etc/UTC\",\n \"monitor_tags\": [\n \"tag0\"\n ]\n}\n" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime" + }, + "scenario": "Schedule a downtime with invalid type hours", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/schedule-a-downtime-with-invalid-weekdays.json b/test-runner-data/v1/downtimes/schedule-a-downtime-with-invalid-weekdays.json new file mode 100644 index 0000000000..c7abe75963 --- /dev/null +++ b/test-runner-data/v1/downtimes/schedule-a-downtime-with-invalid-weekdays.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 400, + "feature": "Downtimes", + "id": "v1/Downtimes/Schedule a downtime with invalid weekdays", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "downtime_recurrence_payload_invalid_weekdays.json", + "value": { + "$openapi_transformer_template": "{\n \"message\": \"{{ unique }}\",\n \"recurrence\": {\n \"period\": 1,\n \"type\":\"weeks\",\n \"week_days\": [\"mon\", \"tue\"]\n },\n \"scope\": [\"*\"],\n \"start\": {{ timestamp(\"now\") }},\n \"end\": {{ timestamp(\"now + 1h\") }},\n \"timezone\": \"Etc/UTC\",\n \"monitor_tags\": [\n \"tag0\"\n ]\n}\n" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime" + }, + "scenario": "Schedule a downtime with invalid weekdays", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/schedule-a-downtime-with-mutually-exclusive-until-occurrences-and-until-date-properties.json b/test-runner-data/v1/downtimes/schedule-a-downtime-with-mutually-exclusive-until-occurrences-and-until-date-properties.json new file mode 100644 index 0000000000..f474428a35 --- /dev/null +++ b/test-runner-data/v1/downtimes/schedule-a-downtime-with-mutually-exclusive-until-occurrences-and-until-date-properties.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 400, + "feature": "Downtimes", + "id": "v1/Downtimes/Schedule a downtime with mutually exclusive until occurrences and until date properties", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "downtime_recurrence_payload_until_occurrences_and_until_date_are_mutually_exclusive.json", + "value": { + "$openapi_transformer_template": "{\n \"message\": \"{{ unique }}\",\n \"recurrence\": {\n \"period\": 1,\n \"type\": \"weeks\",\n \"until_date\": {{ timestamp(\"now + 21d\") }},\n \"until_occurrences\": 3,\n \"week_days\": [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\"]\n },\n \"scope\": [\"*\"],\n \"start\": {{ timestamp(\"now\") }},\n \"end\": {{ timestamp(\"now + 1h\") }},\n \"timezone\": \"Etc/UTC\",\n \"monitor_tags\": [\n \"tag0\"\n ]\n}\n" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime" + }, + "scenario": "Schedule a downtime with mutually exclusive until occurrences and until date properties", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/schedule-a-downtime-with-until-occurrences.json b/test-runner-data/v1/downtimes/schedule-a-downtime-with-until-occurrences.json new file mode 100644 index 0000000000..8b3c8871e3 --- /dev/null +++ b/test-runner-data/v1/downtimes/schedule-a-downtime-with-until-occurrences.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v1/Downtimes/Schedule a downtime with until occurrences", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "downtime_recurrence_payload_until_occurrences.json", + "value": { + "$openapi_transformer_template": "{\n \"message\": \"{{ unique }}\",\n \"recurrence\": {\n \"period\": 1,\n \"type\": \"weeks\",\n \"until_occurrences\": 3,\n \"week_days\": [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\"]\n },\n \"scope\": [\"*\"],\n \"start\": {{ timestamp(\"now\") }},\n \"end\": {{ timestamp(\"now + 1h\") }},\n \"timezone\": \"Etc/UTC\",\n \"monitor_tags\": [\n \"tag0\"\n ]\n}\n" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime" + }, + "scenario": "Schedule a downtime with until occurrences", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/schedule-a-monitor-downtime-returns-ok-response.json b/test-runner-data/v1/downtimes/schedule-a-monitor-downtime-returns-ok-response.json new file mode 100644 index 0000000000..44752feffc --- /dev/null +++ b/test-runner-data/v1/downtimes/schedule-a-monitor-downtime-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v1/Downtimes/Schedule a monitor downtime returns \"OK\" response", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"message\": \"{{ unique }}\", \"start\": {{ timestamp(\"now\") }}, \"timezone\": \"Etc/UTC\", \"scope\": [\"test:{{ unique_lower_alnum }}\"], \"monitor_id\": {{ monitor.id }}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/downtime" + }, + "scenario": "Schedule a monitor downtime returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/downtimes/update-a-downtime-returns-ok-response.json b/test-runner-data/v1/downtimes/update-a-downtime-returns-ok-response.json new file mode 100644 index 0000000000..831479e5ae --- /dev/null +++ b/test-runner-data/v1/downtimes/update-a-downtime-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v1/Downtimes/Update a downtime returns \"OK\" response", + "operation_id": "UpdateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Downtime", + "type": "object" + }, + "source": "inline", + "value": { + "message": "{{ unique}}-updated", + "mute_first_recovery_notification": true, + "notify_end_states": [ + "alert", + "no data", + "warn" + ], + "notify_end_types": [ + "canceled", + "expired" + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "downtime.id", + "type": "fixture" + }, + "style": "simple" + } + ], + "path": "/api/v1/downtime/{downtime_id}" + }, + "scenario": "Update a downtime returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/events/post-an-event-in-the-past-returns-bad-request-response.json b/test-runner-data/v1/events/post-an-event-in-the-past-returns-bad-request-response.json new file mode 100644 index 0000000000..db251eb567 --- /dev/null +++ b/test-runner-data/v1/events/post-an-event-in-the-past-returns-bad-request-response.json @@ -0,0 +1,33 @@ +{ + "api": "Events", + "expected_status": 400, + "feature": "Events", + "id": "v1/Events/Post an event in the past returns \"Bad Request\" response", + "operation_id": "CreateEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EventCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "date_happened": 1, + "tags": [ + "test:{{ unique_alnum }}" + ], + "text": "A text message.", + "title": "{{ unique }}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/events" + }, + "scenario": "Post an event in the past returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/events/post-an-event-returns-ok-response.json b/test-runner-data/v1/events/post-an-event-returns-ok-response.json new file mode 100644 index 0000000000..db71633766 --- /dev/null +++ b/test-runner-data/v1/events/post-an-event-returns-ok-response.json @@ -0,0 +1,32 @@ +{ + "api": "Events", + "expected_status": 202, + "feature": "Events", + "id": "v1/Events/Post an event returns \"OK\" response", + "operation_id": "CreateEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EventCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "tags": [ + "test:{{ unique_alnum }}" + ], + "text": "A text message.", + "title": "{{ unique }}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/events" + }, + "scenario": "Post an event returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/events/post-an-event-with-a-long-title-returns-ok-response.json b/test-runner-data/v1/events/post-an-event-with-a-long-title-returns-ok-response.json new file mode 100644 index 0000000000..6417994c95 --- /dev/null +++ b/test-runner-data/v1/events/post-an-event-with-a-long-title-returns-ok-response.json @@ -0,0 +1,32 @@ +{ + "api": "Events", + "expected_status": 202, + "feature": "Events", + "id": "v1/Events/Post an event with a long title returns \"OK\" response", + "operation_id": "CreateEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EventCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "tags": [ + "test:{{ unique_alnum }}" + ], + "text": "A text message.", + "title": "{{ unique }} very very very looooooooong looooooooooooong loooooooooooooooooooooong looooooooooooooooooooooooooong title with 100+ characters" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/events" + }, + "scenario": "Post an event with a long title returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/gcp-integration/create-a-gcp-integration-returns-ok-response.json b/test-runner-data/v1/gcp-integration/create-a-gcp-integration-returns-ok-response.json new file mode 100644 index 0000000000..f42438b14f --- /dev/null +++ b/test-runner-data/v1/gcp-integration/create-a-gcp-integration-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "GCPIntegration", + "expected_status": 200, + "feature": "GCP Integration", + "id": "v1/GCP Integration/Create a GCP integration returns \"OK\" response", + "operation_id": "CreateGCPIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPAccount", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\", \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\", \"client_email\": \"{{unique_hash}}@example.com\", \"client_id\": \"{{ timestamp(\"now\") }}{{ timestamp(\"now\") }}0\", \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL\", \"host_filters\": \"key:value,filter:example\", \"cloud_run_revision_filters\": [\"dr:dre\"], \"is_cspm_enabled\": true, \"is_security_command_center_enabled\": true, \"is_resource_change_collection_enabled\": true, \"private_key\": \"private_key\", \"private_key_id\": \"123456789abcdefghi123456789abcdefghijklm\", \"project_id\": \"datadog-apitest\", \"resource_collection_enabled\": true, \"token_uri\": \"https://accounts.google.com/o/oauth2/token\", \"type\": \"service_account\"}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/gcp" + }, + "scenario": "Create a GCP integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/gcp-integration/delete-a-gcp-integration-returns-ok-response.json b/test-runner-data/v1/gcp-integration/delete-a-gcp-integration-returns-ok-response.json new file mode 100644 index 0000000000..6130407d53 --- /dev/null +++ b/test-runner-data/v1/gcp-integration/delete-a-gcp-integration-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "GCPIntegration", + "expected_status": 200, + "feature": "GCP Integration", + "id": "v1/GCP Integration/Delete a GCP integration returns \"OK\" response", + "operation_id": "DeleteGCPIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPAccount", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"client_email\": \"{{unique_hash}}@example.com\", \"client_id\": \"{{ timestamp(\"now\") }}{{ timestamp(\"now\") }}0\", \"project_id\": \"datadog-apitest\"}" + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/gcp" + }, + "scenario": "Delete a GCP integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/gcp-integration/list-all-gcp-integrations-returns-ok-response.json b/test-runner-data/v1/gcp-integration/list-all-gcp-integrations-returns-ok-response.json new file mode 100644 index 0000000000..0eec08e65f --- /dev/null +++ b/test-runner-data/v1/gcp-integration/list-all-gcp-integrations-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "GCPIntegration", + "expected_status": 200, + "feature": "GCP Integration", + "id": "v1/GCP Integration/List all GCP integrations returns \"OK\" response", + "operation_id": "ListGCPIntegration", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/gcp" + }, + "scenario": "List all GCP integrations returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/gcp-integration/update-a-gcp-integration-cloud-run-revision-filters-returns-ok-response.json b/test-runner-data/v1/gcp-integration/update-a-gcp-integration-cloud-run-revision-filters-returns-ok-response.json new file mode 100644 index 0000000000..a5fe721ce7 --- /dev/null +++ b/test-runner-data/v1/gcp-integration/update-a-gcp-integration-cloud-run-revision-filters-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "GCPIntegration", + "expected_status": 200, + "feature": "GCP Integration", + "id": "v1/GCP Integration/Update a GCP integration cloud run revision filters returns \"OK\" response", + "operation_id": "UpdateGCPIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPAccount", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\", \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\", \"client_email\": \"{{unique_hash}}@example.com\", \"client_id\": \"{{ timestamp(\"now\") }}{{ timestamp(\"now\") }}0\", \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL\", \"host_filters\": \"key:value,filter:example\", \"cloud_run_revision_filters\": [\"merp:derp\"], \"is_cspm_enabled\": true, \"is_security_command_center_enabled\": true, \"is_resource_change_collection_enabled\": true, \"private_key\": \"private_key\", \"private_key_id\": \"123456789abcdefghi123456789abcdefghijklm\", \"project_id\": \"datadog-apitest\", \"resource_collection_enabled\": true, \"token_uri\": \"https://accounts.google.com/o/oauth2/token\", \"type\": \"service_account\"}" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/gcp" + }, + "scenario": "Update a GCP integration cloud run revision filters returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/gcp-integration/update-a-gcp-integration-returns-ok-response.json b/test-runner-data/v1/gcp-integration/update-a-gcp-integration-returns-ok-response.json new file mode 100644 index 0000000000..7247b8d9d3 --- /dev/null +++ b/test-runner-data/v1/gcp-integration/update-a-gcp-integration-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "GCPIntegration", + "expected_status": 200, + "feature": "GCP Integration", + "id": "v1/GCP Integration/Update a GCP integration returns \"OK\" response", + "operation_id": "UpdateGCPIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPAccount", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\", \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\", \"client_email\": \"{{unique_hash}}@example.com\", \"client_id\": \"{{ timestamp(\"now\") }}{{ timestamp(\"now\") }}0\", \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL\", \"host_filters\": \"key:value,filter:example\", \"is_cspm_enabled\": true, \"is_security_command_center_enabled\": true, \"is_resource_change_collection_enabled\": true, \"private_key\": \"private_key\", \"private_key_id\": \"123456789abcdefghi123456789abcdefghijklm\", \"project_id\": \"datadog-apitest\", \"resource_collection_enabled\": true, \"token_uri\": \"https://accounts.google.com/o/oauth2/token\", \"type\": \"service_account\"}" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/gcp" + }, + "scenario": "Update a GCP integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/hosts/get-all-hosts-with-metadata-deserializes-successfully.json b/test-runner-data/v1/hosts/get-all-hosts-with-metadata-deserializes-successfully.json new file mode 100644 index 0000000000..5bd7efcf20 --- /dev/null +++ b/test-runner-data/v1/hosts/get-all-hosts-with-metadata-deserializes-successfully.json @@ -0,0 +1,35 @@ +{ + "api": "Hosts", + "expected_status": 200, + "feature": "Hosts", + "id": "v1/Hosts/Get all hosts with metadata deserializes successfully", + "operation_id": "ListHosts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "include_hosts_metadata", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v1/hosts" + }, + "scenario": "Get all hosts with metadata deserializes successfully", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/hosts/get-all-hosts-with-metadata-for-your-organization-returns-ok-response.json b/test-runner-data/v1/hosts/get-all-hosts-with-metadata-for-your-organization-returns-ok-response.json new file mode 100644 index 0000000000..a925af00e8 --- /dev/null +++ b/test-runner-data/v1/hosts/get-all-hosts-with-metadata-for-your-organization-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Hosts", + "expected_status": 200, + "feature": "Hosts", + "id": "v1/Hosts/Get all hosts with metadata for your organization returns \"OK\" response", + "operation_id": "ListHosts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "include_hosts_metadata", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v1/hosts" + }, + "scenario": "Get all hosts with metadata for your organization returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/ip-ranges/list-ip-ranges-returns-ok-response.json b/test-runner-data/v1/ip-ranges/list-ip-ranges-returns-ok-response.json new file mode 100644 index 0000000000..dd95c0ca19 --- /dev/null +++ b/test-runner-data/v1/ip-ranges/list-ip-ranges-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "IPRanges", + "expected_status": 200, + "feature": "IP Ranges", + "id": "v1/IP Ranges/List IP Ranges returns \"OK\" response", + "operation_id": "GetIPRanges", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/" + }, + "scenario": "List IP Ranges returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-returns-ok-response.json new file mode 100644 index 0000000000..e7c2be3743 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-returns-ok-response.json @@ -0,0 +1,57 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Map Processor returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayMap", + "processors": [ + { + "is_enabled": true, + "name": "map items", + "preserve_source": true, + "processors": [ + { + "preserve_source": true, + "sources": [ + "$sourceElem.id" + ], + "target": "$targetElem.uid", + "type": "attribute-remapper" + }, + { + "target": "$targetElem.label", + "template": "item-%{$sourceElem.id}", + "type": "string-builder-processor" + } + ], + "source": "items", + "target": "out", + "type": "array-map-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Map Processor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-using-arithmetic-sub-processor-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-using-arithmetic-sub-processor-returns-ok-response.json new file mode 100644 index 0000000000..6231661871 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-using-arithmetic-sub-processor-returns-ok-response.json @@ -0,0 +1,48 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Map Processor using arithmetic sub-processor returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayMapArithmetic", + "processors": [ + { + "is_enabled": true, + "name": "double counts", + "processors": [ + { + "expression": "$sourceElem.count * 2", + "target": "$targetElem.doubled", + "type": "arithmetic-processor" + } + ], + "source": "items", + "target": "out", + "type": "array-map-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Map Processor using arithmetic sub-processor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-using-category-sub-processor-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-using-category-sub-processor-returns-ok-response.json new file mode 100644 index 0000000000..d5a0afc3f6 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-using-category-sub-processor-returns-ok-response.json @@ -0,0 +1,61 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Map Processor using category sub-processor returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayMapCategory", + "processors": [ + { + "is_enabled": true, + "name": "categorize items", + "processors": [ + { + "categories": [ + { + "filter": { + "query": "@$sourceElem.status:error" + }, + "name": "error" + }, + { + "filter": { + "query": "*" + }, + "name": "info" + } + ], + "target": "$targetElem.level", + "type": "category-processor" + } + ], + "source": "items", + "target": "out", + "type": "array-map-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Map Processor using category sub-processor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-with-preserve-source-false-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-with-preserve-source-false-returns-ok-response.json new file mode 100644 index 0000000000..2c22b06681 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-map-processor-with-preserve-source-false-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Map Processor with preserve_source false returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayMapNoPreserve", + "processors": [ + { + "is_enabled": true, + "name": "map and remove source", + "preserve_source": false, + "processors": [ + { + "sources": [ + "$sourceElem.id" + ], + "target": "$targetElem.uid", + "type": "attribute-remapper" + } + ], + "source": "items", + "target": "out", + "type": "array-map-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Map Processor with preserve_source false returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-returns-ok-response.json new file mode 100644 index 0000000000..2ee9ad3a5f --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Processor Append Operation returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayAppend", + "processors": [ + { + "is_enabled": true, + "name": "append_ip_to_array", + "operation": { + "source": "network.client.ip", + "target": "sourceIps", + "type": "append" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Processor Append Operation returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-with-preserve-source-false-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-with-preserve-source-false-returns-ok-response.json new file mode 100644 index 0000000000..52fbc26247 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-with-preserve-source-false-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Processor Append Operation with preserve_source false returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayAppendNoPreserve", + "processors": [ + { + "is_enabled": true, + "name": "append_ip_and_remove_source", + "operation": { + "preserve_source": false, + "source": "network.client.ip", + "target": "sourceIps", + "type": "append" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Processor Append Operation with preserve_source false returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-with-preserve-source-true-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-with-preserve-source-true-returns-ok-response.json new file mode 100644 index 0000000000..708afb49e1 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-append-operation-with-preserve-source-true-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Processor Append Operation with preserve_source true returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayAppendPreserve", + "processors": [ + { + "is_enabled": true, + "name": "append_ip_and_keep_source", + "operation": { + "preserve_source": true, + "source": "network.client.ip", + "target": "sourceIps", + "type": "append" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Processor Append Operation with preserve_source true returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-key-value-operation-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-key-value-operation-returns-ok-response.json new file mode 100644 index 0000000000..e8f1d71b0c --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-key-value-operation-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Processor Key Value Operation returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayKeyValue", + "processors": [ + { + "is_enabled": true, + "name": "extract_kv", + "operation": { + "key_to_extract": "name", + "source": "tags", + "type": "key-value", + "value_to_extract": "value" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Processor Key Value Operation returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-key-value-operation-with-target-and-override-on-conflict-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-key-value-operation-with-target-and-override-on-conflict-returns-ok-response.json new file mode 100644 index 0000000000..bde4399e94 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-key-value-operation-with-target-and-override-on-conflict-returns-ok-response.json @@ -0,0 +1,47 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Processor Key Value Operation with target and override_on_conflict returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayKeyValueTarget", + "processors": [ + { + "is_enabled": true, + "name": "extract_kv_to_target", + "operation": { + "key_to_extract": "name", + "override_on_conflict": true, + "source": "tags", + "target": "extracted", + "type": "key-value", + "value_to_extract": "value" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Processor Key Value Operation with target and override_on_conflict returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-length-operation-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-length-operation-returns-ok-response.json new file mode 100644 index 0000000000..4677effa21 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-length-operation-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Processor Length Operation returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayLength", + "processors": [ + { + "is_enabled": true, + "name": "count_tags", + "operation": { + "source": "tags", + "target": "tagCount", + "type": "length" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Processor Length Operation returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-select-operation-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-select-operation-returns-ok-response.json new file mode 100644 index 0000000000..a609595620 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-array-processor-select-operation-returns-ok-response.json @@ -0,0 +1,46 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Array Processor Select Operation returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArraySelect", + "processors": [ + { + "is_enabled": true, + "name": "extract_referrer", + "operation": { + "filter": "name:Referrer", + "source": "httpRequest.headers", + "target": "referrer", + "type": "select", + "value_to_extract": "value" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Array Processor Select Operation returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-decoder-processor-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-decoder-processor-returns-ok-response.json new file mode 100644 index 0000000000..683fc9f034 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-decoder-processor-returns-ok-response.json @@ -0,0 +1,43 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Decoder Processor returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testDecoderProcessor", + "processors": [ + { + "binary_to_text_encoding": "base16", + "input_representation": "utf_8", + "is_enabled": true, + "name": "test_decoder", + "source": "encoded.field", + "target": "decoded.field", + "type": "decoder-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Decoder Processor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-nested-pipeline-processor-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-nested-pipeline-processor-returns-ok-response.json new file mode 100644 index 0000000000..f2070f1cff --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-nested-pipeline-processor-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with nested pipeline processor returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "description": "Pipeline containing nested processor with tags and description", + "filter": { + "query": "source:python" + }, + "name": "testPipelineWithNested", + "processors": [ + { + "description": "This is a nested pipeline for production logs", + "filter": { + "query": "env:production" + }, + "is_enabled": true, + "name": "nested_pipeline_with_metadata", + "tags": [ + "env:prod", + "type:nested" + ], + "type": "pipeline" + } + ], + "tags": [ + "team:test" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with nested pipeline processor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-schema-processor-and-preserve-source-false-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-schema-processor-and-preserve-source-false-returns-ok-response.json new file mode 100644 index 0000000000..a3938ab2c5 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-schema-processor-and-preserve-source-false-returns-ok-response.json @@ -0,0 +1,268 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Schema Processor and preserve_source false returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testSchemaProcessor", + "processors": [ + { + "is_enabled": true, + "mappers": [ + { + "categories": [ + { + "filter": { + "query": "@eventName:(*Create*)" + }, + "id": 1, + "name": "Create" + }, + { + "filter": { + "query": "@eventName:(ChangePassword OR PasswordUpdated)" + }, + "id": 3, + "name": "Password Change" + }, + { + "filter": { + "query": "@eventName:(*Attach*)" + }, + "id": 7, + "name": "Attach Policy" + }, + { + "filter": { + "query": "@eventName:(*Detach* OR *Remove*)" + }, + "id": 8, + "name": "Detach Policy" + }, + { + "filter": { + "query": "@eventName:(*Delete*)" + }, + "id": 6, + "name": "Delete" + }, + { + "filter": { + "query": "@eventName:*" + }, + "id": 99, + "name": "Other" + } + ], + "fallback": { + "sources": { + "ocsf.activity_name": [ + "eventName" + ] + }, + "values": { + "ocsf.activity_id": "99", + "ocsf.activity_name": "Other" + } + }, + "name": "activity_id and activity_name", + "targets": { + "id": "ocsf.activity_id", + "name": "ocsf.activity_name" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "-@errorCode:*" + }, + "id": 1, + "name": "Success" + }, + { + "filter": { + "query": "@errorCode:*" + }, + "id": 2, + "name": "Failure" + } + ], + "name": "status", + "targets": { + "id": "ocsf.status_id", + "name": "ocsf.status" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "@eventName:*" + }, + "id": 1, + "name": "Informational" + } + ], + "name": "Set default severity", + "targets": { + "id": "ocsf.severity_id", + "name": "ocsf.severity" + }, + "type": "schema-category-mapper" + }, + { + "name": "Map userIdentity to ocsf.user.uid", + "preserve_source": false, + "sources": [ + "userIdentity.principalId", + "responseElements.role.roleId", + "responseElements.user.userId" + ], + "target": "ocsf.user.uid", + "type": "schema-remapper" + }, + { + "name": "Map userName to ocsf.user.name", + "preserve_source": false, + "sources": [ + "requestParameters.userName", + "responseElements.role.roleName", + "requestParameters.roleName", + "responseElements.user.userName" + ], + "target": "ocsf.user.name", + "type": "schema-remapper" + }, + { + "name": "Map api to ocsf.api", + "preserve_source": false, + "sources": [ + "api" + ], + "target": "ocsf.api", + "type": "schema-remapper" + }, + { + "name": "Map user to ocsf.user", + "preserve_source": false, + "sources": [ + "user" + ], + "target": "ocsf.user", + "type": "schema-remapper" + }, + { + "name": "Map actor to ocsf.actor", + "preserve_source": false, + "sources": [ + "actor" + ], + "target": "ocsf.actor", + "type": "schema-remapper" + }, + { + "name": "Map cloud to ocsf.cloud", + "preserve_source": false, + "sources": [ + "cloud" + ], + "target": "ocsf.cloud", + "type": "schema-remapper" + }, + { + "name": "Map http_request to ocsf.http_request", + "preserve_source": false, + "sources": [ + "http_request" + ], + "target": "ocsf.http_request", + "type": "schema-remapper" + }, + { + "name": "Map metadata to ocsf.metadata", + "preserve_source": false, + "sources": [ + "metadata" + ], + "target": "ocsf.metadata", + "type": "schema-remapper" + }, + { + "name": "Map time to ocsf.time", + "preserve_source": false, + "sources": [ + "time" + ], + "target": "ocsf.time", + "type": "schema-remapper" + }, + { + "name": "Map src_endpoint to ocsf.src_endpoint", + "preserve_source": false, + "sources": [ + "src_endpoint" + ], + "target": "ocsf.src_endpoint", + "type": "schema-remapper" + }, + { + "name": "Map severity to ocsf.severity", + "preserve_source": false, + "sources": [ + "severity" + ], + "target": "ocsf.severity", + "type": "schema-remapper" + }, + { + "name": "Map severity_id to ocsf.severity_id", + "preserve_source": false, + "sources": [ + "severity_id" + ], + "target": "ocsf.severity_id", + "type": "schema-remapper" + } + ], + "name": "Apply OCSF schema for 3001", + "schema": { + "class_name": "Account Change", + "class_uid": 3001, + "profiles": [ + "cloud", + "datetime" + ], + "schema_type": "ocsf", + "version": "1.5.0" + }, + "type": "schema-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Schema Processor and preserve_source false returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-schema-processor-and-preserve-source-true-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-schema-processor-and-preserve-source-true-returns-ok-response.json new file mode 100644 index 0000000000..a74eda73c8 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-schema-processor-and-preserve-source-true-returns-ok-response.json @@ -0,0 +1,268 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Schema Processor and preserve_source true returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testSchemaProcessor", + "processors": [ + { + "is_enabled": true, + "mappers": [ + { + "categories": [ + { + "filter": { + "query": "@eventName:(*Create*)" + }, + "id": 1, + "name": "Create" + }, + { + "filter": { + "query": "@eventName:(ChangePassword OR PasswordUpdated)" + }, + "id": 3, + "name": "Password Change" + }, + { + "filter": { + "query": "@eventName:(*Attach*)" + }, + "id": 7, + "name": "Attach Policy" + }, + { + "filter": { + "query": "@eventName:(*Detach* OR *Remove*)" + }, + "id": 8, + "name": "Detach Policy" + }, + { + "filter": { + "query": "@eventName:(*Delete*)" + }, + "id": 6, + "name": "Delete" + }, + { + "filter": { + "query": "@eventName:*" + }, + "id": 99, + "name": "Other" + } + ], + "fallback": { + "sources": { + "ocsf.activity_name": [ + "eventName" + ] + }, + "values": { + "ocsf.activity_id": "99", + "ocsf.activity_name": "Other" + } + }, + "name": "activity_id and activity_name", + "targets": { + "id": "ocsf.activity_id", + "name": "ocsf.activity_name" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "-@errorCode:*" + }, + "id": 1, + "name": "Success" + }, + { + "filter": { + "query": "@errorCode:*" + }, + "id": 2, + "name": "Failure" + } + ], + "name": "status", + "targets": { + "id": "ocsf.status_id", + "name": "ocsf.status" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "@eventName:*" + }, + "id": 1, + "name": "Informational" + } + ], + "name": "Set default severity", + "targets": { + "id": "ocsf.severity_id", + "name": "ocsf.severity" + }, + "type": "schema-category-mapper" + }, + { + "name": "Map userIdentity to ocsf.user.uid", + "preserve_source": true, + "sources": [ + "userIdentity.principalId", + "responseElements.role.roleId", + "responseElements.user.userId" + ], + "target": "ocsf.user.uid", + "type": "schema-remapper" + }, + { + "name": "Map userName to ocsf.user.name", + "preserve_source": true, + "sources": [ + "requestParameters.userName", + "responseElements.role.roleName", + "requestParameters.roleName", + "responseElements.user.userName" + ], + "target": "ocsf.user.name", + "type": "schema-remapper" + }, + { + "name": "Map api to ocsf.api", + "preserve_source": true, + "sources": [ + "api" + ], + "target": "ocsf.api", + "type": "schema-remapper" + }, + { + "name": "Map user to ocsf.user", + "preserve_source": true, + "sources": [ + "user" + ], + "target": "ocsf.user", + "type": "schema-remapper" + }, + { + "name": "Map actor to ocsf.actor", + "preserve_source": true, + "sources": [ + "actor" + ], + "target": "ocsf.actor", + "type": "schema-remapper" + }, + { + "name": "Map cloud to ocsf.cloud", + "preserve_source": true, + "sources": [ + "cloud" + ], + "target": "ocsf.cloud", + "type": "schema-remapper" + }, + { + "name": "Map http_request to ocsf.http_request", + "preserve_source": true, + "sources": [ + "http_request" + ], + "target": "ocsf.http_request", + "type": "schema-remapper" + }, + { + "name": "Map metadata to ocsf.metadata", + "preserve_source": true, + "sources": [ + "metadata" + ], + "target": "ocsf.metadata", + "type": "schema-remapper" + }, + { + "name": "Map time to ocsf.time", + "preserve_source": true, + "sources": [ + "time" + ], + "target": "ocsf.time", + "type": "schema-remapper" + }, + { + "name": "Map src_endpoint to ocsf.src_endpoint", + "preserve_source": true, + "sources": [ + "src_endpoint" + ], + "target": "ocsf.src_endpoint", + "type": "schema-remapper" + }, + { + "name": "Map severity to ocsf.severity", + "preserve_source": true, + "sources": [ + "severity" + ], + "target": "ocsf.severity", + "type": "schema-remapper" + }, + { + "name": "Map severity_id to ocsf.severity_id", + "preserve_source": true, + "sources": [ + "severity_id" + ], + "target": "ocsf.severity_id", + "type": "schema-remapper" + } + ], + "name": "Apply OCSF schema for 3001", + "schema": { + "class_name": "Account Change", + "class_uid": 3001, + "profiles": [ + "cloud", + "datetime" + ], + "schema_type": "ocsf", + "version": "1.5.0" + }, + "type": "schema-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Schema Processor and preserve_source true returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-schema-processor.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-schema-processor.json new file mode 100644 index 0000000000..e5e341449f --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-schema-processor.json @@ -0,0 +1,256 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with schema processor", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testSchemaProcessor", + "processors": [ + { + "is_enabled": true, + "mappers": [ + { + "categories": [ + { + "filter": { + "query": "@eventName:(*Create*)" + }, + "id": 1, + "name": "Create" + }, + { + "filter": { + "query": "@eventName:(ChangePassword OR PasswordUpdated)" + }, + "id": 3, + "name": "Password Change" + }, + { + "filter": { + "query": "@eventName:(*Attach*)" + }, + "id": 7, + "name": "Attach Policy" + }, + { + "filter": { + "query": "@eventName:(*Detach* OR *Remove*)" + }, + "id": 8, + "name": "Detach Policy" + }, + { + "filter": { + "query": "@eventName:(*Delete*)" + }, + "id": 6, + "name": "Delete" + }, + { + "filter": { + "query": "@eventName:*" + }, + "id": 99, + "name": "Other" + } + ], + "fallback": { + "sources": { + "ocsf.activity_name": [ + "eventName" + ] + }, + "values": { + "ocsf.activity_id": "99", + "ocsf.activity_name": "Other" + } + }, + "name": "activity_id and activity_name", + "targets": { + "id": "ocsf.activity_id", + "name": "ocsf.activity_name" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "-@errorCode:*" + }, + "id": 1, + "name": "Success" + }, + { + "filter": { + "query": "@errorCode:*" + }, + "id": 2, + "name": "Failure" + } + ], + "name": "status", + "targets": { + "id": "ocsf.status_id", + "name": "ocsf.status" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "@eventName:*" + }, + "id": 1, + "name": "Informational" + } + ], + "name": "Set default severity", + "targets": { + "id": "ocsf.severity_id", + "name": "ocsf.severity" + }, + "type": "schema-category-mapper" + }, + { + "name": "Map userIdentity to ocsf.user.uid", + "sources": [ + "userIdentity.principalId", + "responseElements.role.roleId", + "responseElements.user.userId" + ], + "target": "ocsf.user.uid", + "type": "schema-remapper" + }, + { + "name": "Map userName to ocsf.user.name", + "sources": [ + "requestParameters.userName", + "responseElements.role.roleName", + "requestParameters.roleName", + "responseElements.user.userName" + ], + "target": "ocsf.user.name", + "type": "schema-remapper" + }, + { + "name": "Map api to ocsf.api", + "sources": [ + "api" + ], + "target": "ocsf.api", + "type": "schema-remapper" + }, + { + "name": "Map user to ocsf.user", + "sources": [ + "user" + ], + "target": "ocsf.user", + "type": "schema-remapper" + }, + { + "name": "Map actor to ocsf.actor", + "sources": [ + "actor" + ], + "target": "ocsf.actor", + "type": "schema-remapper" + }, + { + "name": "Map cloud to ocsf.cloud", + "sources": [ + "cloud" + ], + "target": "ocsf.cloud", + "type": "schema-remapper" + }, + { + "name": "Map http_request to ocsf.http_request", + "sources": [ + "http_request" + ], + "target": "ocsf.http_request", + "type": "schema-remapper" + }, + { + "name": "Map metadata to ocsf.metadata", + "sources": [ + "metadata" + ], + "target": "ocsf.metadata", + "type": "schema-remapper" + }, + { + "name": "Map time to ocsf.time", + "sources": [ + "time" + ], + "target": "ocsf.time", + "type": "schema-remapper" + }, + { + "name": "Map src_endpoint to ocsf.src_endpoint", + "sources": [ + "src_endpoint" + ], + "target": "ocsf.src_endpoint", + "type": "schema-remapper" + }, + { + "name": "Map severity to ocsf.severity", + "sources": [ + "severity" + ], + "target": "ocsf.severity", + "type": "schema-remapper" + }, + { + "name": "Map severity_id to ocsf.severity_id", + "sources": [ + "severity_id" + ], + "target": "ocsf.severity_id", + "type": "schema-remapper" + } + ], + "name": "Apply OCSF schema for 3001", + "schema": { + "class_name": "Account Change", + "class_uid": 3001, + "profiles": [ + "cloud", + "datetime" + ], + "schema_type": "ocsf", + "version": "1.5.0" + }, + "type": "schema-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with schema processor", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-span-id-remapper-returns-ok-response.json b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-span-id-remapper-returns-ok-response.json new file mode 100644 index 0000000000..97c8124182 --- /dev/null +++ b/test-runner-data/v1/logs-pipelines/create-a-pipeline-with-span-id-remapper-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "LogsPipelines", + "expected_status": 200, + "feature": "Logs Pipelines", + "id": "v1/Logs Pipelines/Create a pipeline with Span Id Remapper returns \"OK\" response", + "operation_id": "CreateLogsPipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipeline", + "processors": [ + { + "is_enabled": true, + "name": "test_filter", + "sources": [ + "dd.span_id" + ], + "type": "span-id-remapper" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs/config/pipelines" + }, + "scenario": "Create a pipeline with Span Id Remapper returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs/search-test-logs-returns-ok-response.json b/test-runner-data/v1/logs/search-test-logs-returns-ok-response.json new file mode 100644 index 0000000000..caa687e6d1 --- /dev/null +++ b/test-runner-data/v1/logs/search-test-logs-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Logs", + "expected_status": 200, + "feature": "Logs", + "id": "v1/Logs/Search test logs returns \"OK\" response", + "operation_id": "ListLogs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"index\": \"main\", \"query\": \"host:Test*\", \"sort\": \"asc\", \"time\": {\"from\": \"{{ timeISO(\"now - 1h\") }}\", \"timezone\": \"Europe/Paris\", \"to\": \"{{ timeISO(\"now\") }}\" }}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/logs-queries/list" + }, + "scenario": "Search test logs returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/logs/send-logs-returns-response-from-server-always-200-empty-json-response.json b/test-runner-data/v1/logs/send-logs-returns-response-from-server-always-200-empty-json-response.json new file mode 100644 index 0000000000..ef45fb23f6 --- /dev/null +++ b/test-runner-data/v1/logs/send-logs-returns-response-from-server-always-200-empty-json-response.json @@ -0,0 +1,36 @@ +{ + "api": "Logs", + "expected_status": 200, + "feature": "Logs", + "id": "v1/Logs/Send logs returns \"Response from server (always 200 empty JSON).\" response", + "operation_id": "SubmitLog", + "request": { + "body": { + "schema": { + "format": null, + "items": { + "format": null, + "ref": "HTTPLogItem", + "type": "object" + }, + "ref": "HTTPLog", + "type": "array" + }, + "source": "inline", + "value": [ + { + "ddtags": "host:{{ unique_alnum }}", + "message": "{{ unique }}" + } + ] + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/v1/input" + }, + "scenario": "Send logs returns \"Response from server (always 200 empty JSON).\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/metrics/query-timeseries-points-returns-ok-response.json b/test-runner-data/v1/metrics/query-timeseries-points-returns-ok-response.json new file mode 100644 index 0000000000..0ab043f1ef --- /dev/null +++ b/test-runner-data/v1/metrics/query-timeseries-points-returns-ok-response.json @@ -0,0 +1,71 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v1/Metrics/Query timeseries points returns \"OK\" response", + "operation_id": "QueryMetrics", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "from", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": { + "$openapi_transformer_template": "{{ timestamp(\"now - 1d\") }}" + } + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "to", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": { + "$openapi_transformer_template": "{{ timestamp(\"now\") }}" + } + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "query", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "system.cpu.idle{*}" + }, + "style": null + } + ], + "path": "/api/v1/query" + }, + "scenario": "Query timeseries points returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/metrics/submit-metrics-returns-payload-accepted-response.json b/test-runner-data/v1/metrics/submit-metrics-returns-payload-accepted-response.json new file mode 100644 index 0000000000..4be81fe6ef --- /dev/null +++ b/test-runner-data/v1/metrics/submit-metrics-returns-payload-accepted-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 202, + "feature": "Metrics", + "id": "v1/Metrics/Submit metrics returns \"Payload accepted\" response", + "operation_id": "SubmitMetrics", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MetricsPayload", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"series\": [{\"metric\": \"system.load.1\", \"type\": \"gauge\", \"points\": [[{{ timestamp(\"now\") }}, 1.1]], \"tags\": [\"test:{{ unique_alnum }}\"]}]}" + } + }, + "content_type": "text/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/series" + }, + "scenario": "Submit metrics returns \"Payload accepted\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/check-if-a-monitor-can-be-deleted-returns-ok-response.json b/test-runner-data/v1/monitors/check-if-a-monitor-can-be-deleted-returns-ok-response.json new file mode 100644 index 0000000000..855507fd12 --- /dev/null +++ b/test-runner-data/v1/monitors/check-if-a-monitor-can-be-deleted-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Check if a monitor can be deleted returns \"OK\" response", + "operation_id": "CheckCanDeleteMonitor", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": false, + "in": "query", + "name": "monitor_ids", + "required": true, + "schema": { + "format": null, + "items": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "ref": null, + "type": "array" + }, + "source": { + "type": "literal", + "value": { + "$openapi_transformer_template": "[{{monitor.id}}]" + } + }, + "style": "form" + } + ], + "path": "/api/v1/monitor/can_delete" + }, + "scenario": "Check if a monitor can be deleted returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-ci-pipelines-formula-and-functions-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-ci-pipelines-formula-and-functions-monitor-returns-ok-response.json new file mode 100644 index 0000000000..cc5d847b68 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-ci-pipelines-formula-and-functions-monitor-returns-ok-response.json @@ -0,0 +1,71 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a ci-pipelines formula and functions monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical": 0.8 + }, + "variables": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_pipelines", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "@ci.status:error" + } + }, + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_pipelines", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query2", + "search": { + "query": "" + } + } + ] + }, + "priority": 3, + "query": "formula(\"query1 / query2 * 100\").last(\"15m\") >= 0.8", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "ci-pipelines alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a ci-pipelines formula and functions monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-ci-pipelines-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-ci-pipelines-monitor-returns-ok-response.json new file mode 100644 index 0000000000..3d9409026f --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-ci-pipelines-monitor-returns-ok-response.json @@ -0,0 +1,41 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a ci-pipelines monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical": 1 + } + }, + "priority": 3, + "query": "ci-pipelines(\"ci_level:pipeline @git.branch:staging* @ci.status:error\").rollup(\"count\").by(\"@git.branch,@ci.pipeline.name\").last(\"5m\") >= 1", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "ci-pipelines alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a ci-pipelines monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-ci-tests-formula-and-functions-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-ci-tests-formula-and-functions-monitor-returns-ok-response.json new file mode 100644 index 0000000000..bbef200ead --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-ci-tests-formula-and-functions-monitor-returns-ok-response.json @@ -0,0 +1,71 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a ci-tests formula and functions monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical": 0.8 + }, + "variables": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_tests", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "@test.status:fail" + } + }, + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_tests", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query2", + "search": { + "query": "" + } + } + ] + }, + "priority": 3, + "query": "formula(\"query1 / query2 * 100\").last(\"15m\") >= 0.8", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "ci-tests alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a ci-tests formula and functions monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-ci-tests-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-ci-tests-monitor-returns-ok-response.json new file mode 100644 index 0000000000..60be00fb0b --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-ci-tests-monitor-returns-ok-response.json @@ -0,0 +1,41 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a ci-tests monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical": 1 + } + }, + "priority": 3, + "query": "ci-tests(\"type:test @git.branch:staging* @test.status:fail\").rollup(\"count\").by(\"@test.name\").last(\"5m\") >= 1", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "ci-tests alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a ci-tests monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-cost-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-cost-monitor-returns-ok-response.json new file mode 100644 index 0000000000..9153793264 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-cost-monitor-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a Cost Monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Example Monitor", + "options": { + "include_tags": true, + "thresholds": { + "critical": 5, + "warning": 3 + }, + "variables": [ + { + "aggregator": "sum", + "data_source": "cloud_cost", + "name": "query1", + "query": "sum:aws.cost.net.amortized.shared.resources.allocated{aws_product IN (amplify ,athena, backup, bedrock ) } by {aws_product}.rollup(sum, 86400)" + } + ] + }, + "priority": 3, + "query": "formula(\"exclude_null(query1)\").last(\"7d\").anomaly(direction=\"above\", threshold=10) >= 5", + "tags": [ + "test:examplemonitor", + "env:ci" + ], + "type": "cost alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a Cost Monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-data-jobs-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-data-jobs-monitor-returns-ok-response.json new file mode 100644 index 0000000000..5a62e19021 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-data-jobs-monitor-returns-ok-response.json @@ -0,0 +1,48 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a Data Jobs monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "Data jobs alert triggered", + "name": "{{ unique }}", + "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:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "data-jobs alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a Data Jobs monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-data-quality-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-data-quality-monitor-returns-ok-response.json new file mode 100644 index 0000000000..785589efa8 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-data-quality-monitor-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a Data Quality monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "Data quality alert triggered", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical": 100 + }, + "variables": [ + { + "data_source": "data_quality_metrics", + "filter": "search for column where `database:production AND table:users`", + "group_by": [ + "entity_id" + ], + "measure": "row_count", + "name": "query1" + } + ] + }, + "priority": 3, + "query": "formula(\"query1\").last(\"5m\") > 100", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "data-quality alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a Data Quality monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-data-quality-monitor-with-sensitivity-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-data-quality-monitor-with-sensitivity-returns-ok-response.json new file mode 100644 index 0000000000..bbdc827a12 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-data-quality-monitor-with-sensitivity-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a Data Quality monitor with sensitivity returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "Data quality alert triggered", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical": 100 + }, + "variables": [ + { + "data_source": "data_quality_metrics", + "filter": "search for column where `database:production AND table:users`", + "group_by": [ + "entity_id" + ], + "measure": "row_count", + "monitor_options": { + "sensitivity": 2.5 + }, + "name": "query1" + } + ] + }, + "priority": 3, + "query": "formula(\"query1\").last(\"5m\") > 100", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "data-quality alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a Data Quality monitor with sensitivity returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-metric-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-metric-monitor-returns-ok-response.json new file mode 100644 index 0000000000..67ed2c77fe --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-metric-monitor-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a metric monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "scheduling_options": { + "evaluation_window": { + "day_starts": "04:00", + "month_starts": 1 + } + }, + "thresholds": { + "critical": 0.5 + } + }, + "query": "avg(current_1mo):avg:system.load.5{*} > 0.5", + "type": "metric alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a metric monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-metric-monitor-with-a-custom-schedule-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-metric-monitor-with-a-custom-schedule-returns-ok-response.json new file mode 100644 index 0000000000..c35a0f1cd6 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-metric-monitor-with-a-custom-schedule-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a metric monitor with a custom schedule returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "draft_status": "published", + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "include_tags": false, + "notify_audit": false, + "on_missing_data": "default", + "scheduling_options": { + "custom_schedule": { + "recurrences": [ + { + "rrule": "FREQ=DAILY;INTERVAL=1", + "start": "2024-10-26T09:13:00", + "timezone": "America/Los_Angeles" + } + ] + }, + "evaluation_window": { + "day_starts": "04:00", + "month_starts": 1 + } + }, + "thresholds": { + "critical": 0.5 + } + }, + "query": "avg(current_1mo):avg:system.load.5{*} > 0.5", + "tags": [], + "type": "query alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a metric monitor with a custom schedule returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-monitor-returns-bad-request-response.json b/test-runner-data/v1/monitors/create-a-monitor-returns-bad-request-response.json new file mode 100644 index 0000000000..74334f7f50 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-monitor-returns-bad-request-response.json @@ -0,0 +1,29 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v1/Monitors/Create a monitor returns \"Bad Request\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "query": "query", + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a monitor returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-monitor-returns-ok-response.json new file mode 100644 index 0000000000..297651d23e --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-monitor-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "restricted_roles": [ + "{{ role.data.id }}" + ], + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-monitor-with-aggregate-augmented-query-variables-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-monitor-with-aggregate-augmented-query-variables-returns-ok-response.json new file mode 100644 index 0000000000..942373776f --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-monitor-with-aggregate-augmented-query-variables-returns-ok-response.json @@ -0,0 +1,79 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a monitor with aggregate augmented query variables returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "test message", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical": 124 + }, + "variables": [ + { + "augment_query": { + "columns": [ + { + "name": "org_id" + }, + { + "name": "name" + } + ], + "data_source": "reference_table", + "name": "filter_query", + "table_name": "test_table" + }, + "base_query": { + "data_source": "metrics", + "name": "query1", + "query": "avg:dd{*} by {org_id}.as_count()" + }, + "compute": [ + { + "aggregation": "max", + "name": "compute_result" + } + ], + "data_source": "aggregate_augmented_query", + "group_by": [ + { + "facet": "org_id" + }, + { + "facet": "name" + } + ], + "join_condition": { + "augment_attribute": "org_id", + "base_attribute": "org_id", + "join_type": "inner" + }, + "name": "query1" + } + ] + }, + "query": "formula(\"query1\").rollup(\"sum\").last(\"5m\") > 124", + "type": "query alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a monitor with aggregate augmented query variables returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-monitor-with-aggregate-filtered-query-variables-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-monitor-with-aggregate-filtered-query-variables-returns-ok-response.json new file mode 100644 index 0000000000..1dd3ab6f25 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-monitor-with-aggregate-filtered-query-variables-returns-ok-response.json @@ -0,0 +1,63 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a monitor with aggregate filtered query variables returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "test message", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical": 100 + }, + "variables": [ + { + "base_query": { + "data_source": "metrics", + "name": "query1", + "query": "max:container.cpu.usage{*} by {kube_cluster_name}.rollup(max)" + }, + "data_source": "aggregate_filtered_query", + "filter_query": { + "columns": [ + { + "name": "cluster_name" + } + ], + "data_source": "reference_table", + "name": "filter_query", + "table_name": "test_table" + }, + "filters": [ + { + "base_attribute": "kube_cluster_name", + "filter_attribute": "cluster_name" + } + ], + "name": "query1" + } + ] + }, + "query": "formula(\"query1\").rollup(\"sum\").last(\"5m\") > 100", + "type": "query alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a monitor with aggregate filtered query variables returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-monitor-with-assets-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-monitor-with-assets-returns-ok-response.json new file mode 100644 index 0000000000..9963da4d76 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-monitor-with-assets-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a monitor with assets returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "assets": [ + { + "category": "runbook", + "name": "Monitor Runbook", + "resource_key": "12345", + "resource_type": "notebook", + "url": "/notebooks/12345" + } + ], + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "scheduling_options": { + "evaluation_window": { + "day_starts": "04:00", + "month_starts": 1 + } + }, + "thresholds": { + "critical": 0.5 + } + }, + "query": "avg(current_1mo):avg:system.load.5{*} > 0.5", + "type": "metric alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a monitor with assets returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-a-rum-formula-and-functions-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-a-rum-formula-and-functions-monitor-returns-ok-response.json new file mode 100644 index 0000000000..d573b854e1 --- /dev/null +++ b/test-runner-data/v1/monitors/create-a-rum-formula-and-functions-monitor-returns-ok-response.json @@ -0,0 +1,71 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create a RUM formula and functions monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "thresholds": { + "critical": 0.8 + }, + "variables": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query2", + "search": { + "query": "" + } + }, + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "status:error" + } + } + ] + }, + "priority": 3, + "query": "formula(\"query2 / query1 * 100\").last(\"15m\") >= 0.8", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "rum alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create a RUM formula and functions monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-an-error-tracking-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-an-error-tracking-monitor-returns-ok-response.json new file mode 100644 index 0000000000..b64012bc30 --- /dev/null +++ b/test-runner-data/v1/monitors/create-an-error-tracking-monitor-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create an Error Tracking monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "monitor_error_tracking_alert_payload.json", + "value": { + "draft_status": "draft", + "message": "some message", + "name": "{{ unique}}", + "options": { + "thresholds": { + "critical": 1 + } + }, + "priority": 3, + "query": "error-tracking-rum(\"service:foo AND @error.source:source\").rollup(\"count\").by(\"@issue.id\").last(\"1h\") >= 1", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "error-tracking alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create an Error Tracking monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/create-an-llm-observability-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/create-an-llm-observability-monitor-returns-ok-response.json new file mode 100644 index 0000000000..87afea8ab6 --- /dev/null +++ b/test-runner-data/v1/monitors/create-an-llm-observability-monitor-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Create an LLM Observability monitor returns \"OK\" response", + "operation_id": "CreateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "message": "LLM observability alert triggered", + "name": "{{ unique }}", + "options": { + "include_tags": true, + "notify_audit": false, + "thresholds": { + "critical": 0 + } + }, + "query": "llm-observability(\"*\").rollup(\"count\").last(\"2h\") > 0", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "llm-observability alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor" + }, + "scenario": "Create an LLM Observability monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/delete-a-monitor-returns-item-not-found-error-response.json b/test-runner-data/v1/monitors/delete-a-monitor-returns-item-not-found-error-response.json new file mode 100644 index 0000000000..94ecc64b59 --- /dev/null +++ b/test-runner-data/v1/monitors/delete-a-monitor-returns-item-not-found-error-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v1/Monitors/Delete a monitor returns \"Item not found error\" response", + "operation_id": "DeleteMonitor", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}" + }, + "scenario": "Delete a monitor returns \"Item not found error\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/delete-a-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/delete-a-monitor-returns-ok-response.json new file mode 100644 index 0000000000..c455b0f953 --- /dev/null +++ b/test-runner-data/v1/monitors/delete-a-monitor-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Delete a monitor returns \"OK\" response", + "operation_id": "DeleteMonitor", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "monitor.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}" + }, + "scenario": "Delete a monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/edit-a-monitor-returns-monitor-not-found-error-response.json b/test-runner-data/v1/monitors/edit-a-monitor-returns-monitor-not-found-error-response.json new file mode 100644 index 0000000000..588b46032c --- /dev/null +++ b/test-runner-data/v1/monitors/edit-a-monitor-returns-monitor-not-found-error-response.json @@ -0,0 +1,56 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v1/Monitors/Edit a monitor returns \"Monitor Not Found error\" response", + "operation_id": "UpdateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "name": "updated", + "options": { + "evaluation_delay": null, + "new_group_delay": 600, + "new_host_delay": null, + "renotify_interval": null, + "thresholds": { + "critical": 2, + "warning": null + }, + "timeout_h": null + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}" + }, + "scenario": "Edit a monitor returns \"Monitor Not Found error\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/edit-a-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/edit-a-monitor-returns-ok-response.json new file mode 100644 index 0000000000..c40b607c0d --- /dev/null +++ b/test-runner-data/v1/monitors/edit-a-monitor-returns-ok-response.json @@ -0,0 +1,57 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Edit a monitor returns \"OK\" response", + "operation_id": "UpdateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "name": "{{ monitor.name }}-updated", + "options": { + "evaluation_delay": null, + "new_group_delay": 600, + "new_host_delay": null, + "renotify_interval": null, + "thresholds": { + "critical": 2, + "warning": null + }, + "timeout_h": null + }, + "priority": null + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "monitor.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}" + }, + "scenario": "Edit a monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/get-a-monitor-s-details-returns-monitor-not-found-error-response.json b/test-runner-data/v1/monitors/get-a-monitor-s-details-returns-monitor-not-found-error-response.json new file mode 100644 index 0000000000..6fd6627b2d --- /dev/null +++ b/test-runner-data/v1/monitors/get-a-monitor-s-details-returns-monitor-not-found-error-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v1/Monitors/Get a monitor's details returns \"Monitor Not Found error\" response", + "operation_id": "GetMonitor", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 12345 + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}" + }, + "scenario": "Get a monitor's details returns \"Monitor Not Found error\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/get-a-monitor-s-details-returns-ok-response.json b/test-runner-data/v1/monitors/get-a-monitor-s-details-returns-ok-response.json new file mode 100644 index 0000000000..9c96a0e503 --- /dev/null +++ b/test-runner-data/v1/monitors/get-a-monitor-s-details-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Get a monitor's details returns \"OK\" response", + "operation_id": "GetMonitor", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "monitor.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "with_downtimes", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}" + }, + "scenario": "Get a monitor's details returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/get-a-monitor-s-details-with-downtime-returns-ok-response.json b/test-runner-data/v1/monitors/get-a-monitor-s-details-with-downtime-returns-ok-response.json new file mode 100644 index 0000000000..18f3dc2cd0 --- /dev/null +++ b/test-runner-data/v1/monitors/get-a-monitor-s-details-with-downtime-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Get a monitor's details with downtime returns \"OK\" response", + "operation_id": "GetMonitor", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "monitor.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "with_downtimes", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}" + }, + "scenario": "Get a monitor's details with downtime returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/get-a-synthetics-monitor-s-details.json b/test-runner-data/v1/monitors/get-a-synthetics-monitor-s-details.json new file mode 100644 index 0000000000..51d1c16252 --- /dev/null +++ b/test-runner-data/v1/monitors/get-a-synthetics-monitor-s-details.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Get a synthetics monitor's details", + "operation_id": "GetMonitor", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "synthetics_api_test.monitor_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}" + }, + "scenario": "Get a synthetics monitor's details", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/get-all-monitors-returns-bad-request-response.json b/test-runner-data/v1/monitors/get-all-monitors-returns-bad-request-response.json new file mode 100644 index 0000000000..f1c9ff5715 --- /dev/null +++ b/test-runner-data/v1/monitors/get-all-monitors-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v1/Monitors/Get all monitors returns \"Bad Request\" response", + "operation_id": "ListMonitors", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "group_states", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "notagroupstate" + }, + "style": null + } + ], + "path": "/api/v1/monitor" + }, + "scenario": "Get all monitors returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/get-all-monitors-returns-ok-response-with-pagination.json b/test-runner-data/v1/monitors/get-all-monitors-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..06aef53d31 --- /dev/null +++ b/test-runner-data/v1/monitors/get-all-monitors-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Get all monitors returns \"OK\" response with pagination", + "operation_id": "ListMonitors", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page_size", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v1/monitor" + }, + "scenario": "Get all monitors returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/monitors-group-search-returns-bad-request-response.json b/test-runner-data/v1/monitors/monitors-group-search-returns-bad-request-response.json new file mode 100644 index 0000000000..1052d3b59e --- /dev/null +++ b/test-runner-data/v1/monitors/monitors-group-search-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v1/Monitors/Monitors group search returns \"Bad Request\" response", + "operation_id": "SearchMonitorGroups", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "query", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "status:notastatus" + }, + "style": null + } + ], + "path": "/api/v1/monitor/groups/search" + }, + "scenario": "Monitors group search returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/monitors-group-search-returns-ok-response.json b/test-runner-data/v1/monitors/monitors-group-search-returns-ok-response.json new file mode 100644 index 0000000000..b8af0d595d --- /dev/null +++ b/test-runner-data/v1/monitors/monitors-group-search-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Monitors group search returns \"OK\" response", + "operation_id": "SearchMonitorGroups", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor/groups/search" + }, + "scenario": "Monitors group search returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/monitors-search-returns-bad-request-response.json b/test-runner-data/v1/monitors/monitors-search-returns-bad-request-response.json new file mode 100644 index 0000000000..dc0bfea072 --- /dev/null +++ b/test-runner-data/v1/monitors/monitors-search-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v1/Monitors/Monitors search returns \"Bad Request\" response", + "operation_id": "SearchMonitors", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "query", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "status:notastatus" + }, + "style": null + } + ], + "path": "/api/v1/monitor/search" + }, + "scenario": "Monitors search returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/monitors-search-returns-ok-response.json b/test-runner-data/v1/monitors/monitors-search-returns-ok-response.json new file mode 100644 index 0000000000..13e3495297 --- /dev/null +++ b/test-runner-data/v1/monitors/monitors-search-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Monitors search returns \"OK\" response", + "operation_id": "SearchMonitors", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor/search" + }, + "scenario": "Monitors search returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/validate-a-monitor-returns-invalid-json-response.json b/test-runner-data/v1/monitors/validate-a-monitor-returns-invalid-json-response.json new file mode 100644 index 0000000000..41c44aa58b --- /dev/null +++ b/test-runner-data/v1/monitors/validate-a-monitor-returns-invalid-json-response.json @@ -0,0 +1,29 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v1/Monitors/Validate a monitor returns \"Invalid JSON\" response", + "operation_id": "ValidateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "query": "query", + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor/validate" + }, + "scenario": "Validate a monitor returns \"Invalid JSON\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/validate-a-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/validate-a-monitor-returns-ok-response.json new file mode 100644 index 0000000000..fcef0f3f6d --- /dev/null +++ b/test-runner-data/v1/monitors/validate-a-monitor-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Validate a monitor returns \"OK\" response", + "operation_id": "ValidateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "monitor_payload.json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor/validate" + }, + "scenario": "Validate a monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/validate-a-multi-alert-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/validate-a-multi-alert-monitor-returns-ok-response.json new file mode 100644 index 0000000000..07fdcbb84e --- /dev/null +++ b/test-runner-data/v1/monitors/validate-a-multi-alert-monitor-returns-ok-response.json @@ -0,0 +1,59 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Validate a multi-alert monitor returns \"OK\" response", + "operation_id": "ValidateMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "multi_alert_monitor_payload.json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "group_retention_duration": "2d", + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notify_audit": false, + "notify_by": [ + "status" + ], + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source,status\").last(\"5m\") > 2", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/monitor/validate" + }, + "scenario": "Validate a multi-alert monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/validate-an-existing-monitor-returns-invalid-json-response.json b/test-runner-data/v1/monitors/validate-an-existing-monitor-returns-invalid-json-response.json new file mode 100644 index 0000000000..7bcda7cbdc --- /dev/null +++ b/test-runner-data/v1/monitors/validate-an-existing-monitor-returns-invalid-json-response.json @@ -0,0 +1,46 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v1/Monitors/Validate an existing monitor returns \"Invalid JSON\" response", + "operation_id": "ValidateExistingMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "inline", + "value": { + "query": "query", + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "monitor.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}/validate" + }, + "scenario": "Validate an existing monitor returns \"Invalid JSON\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/monitors/validate-an-existing-monitor-returns-ok-response.json b/test-runner-data/v1/monitors/validate-an-existing-monitor-returns-ok-response.json new file mode 100644 index 0000000000..11a663cd34 --- /dev/null +++ b/test-runner-data/v1/monitors/validate-an-existing-monitor-returns-ok-response.json @@ -0,0 +1,73 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v1/Monitors/Validate an existing monitor returns \"OK\" response", + "operation_id": "ValidateExistingMonitor", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Monitor", + "type": "object" + }, + "source": "monitor_payload.json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "{{ unique }}", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:{{ unique_lower_alnum }}", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "monitor.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/monitor/{monitor_id}/validate" + }, + "scenario": "Validate an existing monitor returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/notebooks/create-a-notebook-returns-ok-response.json b/test-runner-data/v1/notebooks/create-a-notebook-returns-ok-response.json new file mode 100644 index 0000000000..a50037cf3b --- /dev/null +++ b/test-runner-data/v1/notebooks/create-a-notebook-returns-ok-response.json @@ -0,0 +1,77 @@ +{ + "api": "Notebooks", + "expected_status": 200, + "feature": "Notebooks", + "id": "v1/Notebooks/Create a notebook returns \"OK\" response", + "operation_id": "CreateNotebook", + "request": { + "body": { + "schema": { + "format": null, + "ref": "NotebookCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "cells": [ + { + "attributes": { + "definition": { + "text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", + "type": "markdown" + } + }, + "type": "notebook_cells" + }, + { + "attributes": { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.load.1{*}", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "type": "timeseries", + "yaxis": { + "scale": "linear" + } + }, + "graph_size": "m", + "split_by": { + "keys": [], + "tags": [] + }, + "time": null + }, + "type": "notebook_cells" + } + ], + "name": "{{ unique }}", + "status": "published", + "time": { + "live_span": "1h" + } + }, + "type": "notebooks" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/notebooks" + }, + "scenario": "Create a notebook returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/notebooks/delete-a-notebook-returns-not-found-response.json b/test-runner-data/v1/notebooks/delete-a-notebook-returns-not-found-response.json new file mode 100644 index 0000000000..78b5df2b81 --- /dev/null +++ b/test-runner-data/v1/notebooks/delete-a-notebook-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Notebooks", + "expected_status": 404, + "feature": "Notebooks", + "id": "v1/Notebooks/Delete a notebook returns \"Not Found\" response", + "operation_id": "DeleteNotebook", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "notebook_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v1/notebooks/{notebook_id}" + }, + "scenario": "Delete a notebook returns \"Not Found\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/notebooks/delete-a-notebook-returns-ok-response.json b/test-runner-data/v1/notebooks/delete-a-notebook-returns-ok-response.json new file mode 100644 index 0000000000..d4635ab3f5 --- /dev/null +++ b/test-runner-data/v1/notebooks/delete-a-notebook-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Notebooks", + "expected_status": 204, + "feature": "Notebooks", + "id": "v1/Notebooks/Delete a notebook returns \"OK\" response", + "operation_id": "DeleteNotebook", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "notebook_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "notebook.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/notebooks/{notebook_id}" + }, + "scenario": "Delete a notebook returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/notebooks/get-a-notebook-returns-ok-response.json b/test-runner-data/v1/notebooks/get-a-notebook-returns-ok-response.json new file mode 100644 index 0000000000..b75f607cd0 --- /dev/null +++ b/test-runner-data/v1/notebooks/get-a-notebook-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Notebooks", + "expected_status": 200, + "feature": "Notebooks", + "id": "v1/Notebooks/Get a notebook returns \"OK\" response", + "operation_id": "GetNotebook", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "notebook_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "notebook.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/notebooks/{notebook_id}" + }, + "scenario": "Get a notebook returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/notebooks/get-all-notebooks-returns-ok-response-with-pagination.json b/test-runner-data/v1/notebooks/get-all-notebooks-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..e659e6bffa --- /dev/null +++ b/test-runner-data/v1/notebooks/get-all-notebooks-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Notebooks", + "expected_status": 200, + "feature": "Notebooks", + "id": "v1/Notebooks/Get all notebooks returns \"OK\" response with pagination", + "operation_id": "ListNotebooks", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "count", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": "form" + } + ], + "path": "/api/v1/notebooks" + }, + "scenario": "Get all notebooks returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/notebooks/get-all-notebooks-returns-ok-response.json b/test-runner-data/v1/notebooks/get-all-notebooks-returns-ok-response.json new file mode 100644 index 0000000000..0307ba2ab5 --- /dev/null +++ b/test-runner-data/v1/notebooks/get-all-notebooks-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Notebooks", + "expected_status": 200, + "feature": "Notebooks", + "id": "v1/Notebooks/Get all notebooks returns \"OK\" response", + "operation_id": "ListNotebooks", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/notebooks" + }, + "scenario": "Get all notebooks returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/notebooks/update-a-notebook-returns-ok-response.json b/test-runner-data/v1/notebooks/update-a-notebook-returns-ok-response.json new file mode 100644 index 0000000000..69d40d02f7 --- /dev/null +++ b/test-runner-data/v1/notebooks/update-a-notebook-returns-ok-response.json @@ -0,0 +1,94 @@ +{ + "api": "Notebooks", + "expected_status": 200, + "feature": "Notebooks", + "id": "v1/Notebooks/Update a notebook returns \"OK\" response", + "operation_id": "UpdateNotebook", + "request": { + "body": { + "schema": { + "format": null, + "ref": "NotebookUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "cells": [ + { + "attributes": { + "definition": { + "text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", + "type": "markdown" + } + }, + "type": "notebook_cells" + }, + { + "attributes": { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.load.1{*}", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "type": "timeseries", + "yaxis": { + "scale": "linear" + } + }, + "graph_size": "m", + "split_by": { + "keys": [], + "tags": [] + }, + "time": null + }, + "type": "notebook_cells" + } + ], + "name": "{{ unique }}-updated", + "status": "published", + "time": { + "live_span": "1h" + } + }, + "type": "notebooks" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "notebook_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "notebook.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/notebooks/{notebook_id}" + }, + "scenario": "Update a notebook returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/security-monitoring/add-a-security-signal-to-an-incident-returns-ok-response.json b/test-runner-data/v1/security-monitoring/add-a-security-signal-to-an-incident-returns-ok-response.json new file mode 100644 index 0000000000..f12ecaa9aa --- /dev/null +++ b/test-runner-data/v1/security-monitoring/add-a-security-signal-to-an-incident-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v1/Security Monitoring/Add a security signal to an incident returns \"OK\" response", + "operation_id": "AddSecurityMonitoringSignalToIncident", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AddSignalToIncidentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "incident_id": 2609 + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "signal_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "AQAAAYDiB_Ol8PbzFAAAAABBWURpQl9PbEFBQU0yeXhGTG9ZV2JnQUE" + }, + "style": null + } + ], + "path": "/api/v1/security_analytics/signals/{signal_id}/add_to_incident" + }, + "scenario": "Add a security signal to an incident returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/security-monitoring/change-the-triage-state-of-a-security-signal-returns-ok-response.json b/test-runner-data/v1/security-monitoring/change-the-triage-state-of-a-security-signal-returns-ok-response.json new file mode 100644 index 0000000000..4381556573 --- /dev/null +++ b/test-runner-data/v1/security-monitoring/change-the-triage-state-of-a-security-signal-returns-ok-response.json @@ -0,0 +1,46 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v1/Security Monitoring/Change the triage state of a security signal returns \"OK\" response", + "operation_id": "EditSecurityMonitoringSignalState", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SignalStateUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "archiveReason": "none", + "state": "open" + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "signal_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "AQAAAYDiB_Ol8PbzFAAAAABBWURpQl9PbEFBQU0yeXhGTG9ZV2JnQUE" + }, + "style": null + } + ], + "path": "/api/v1/security_analytics/signals/{signal_id}/state" + }, + "scenario": "Change the triage state of a security signal returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/security-monitoring/modify-the-triage-assignee-of-a-security-signal-returns-ok-response.json b/test-runner-data/v1/security-monitoring/modify-the-triage-assignee-of-a-security-signal-returns-ok-response.json new file mode 100644 index 0000000000..d0e82412c9 --- /dev/null +++ b/test-runner-data/v1/security-monitoring/modify-the-triage-assignee-of-a-security-signal-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v1/Security Monitoring/Modify the triage assignee of a security signal returns \"OK\" response", + "operation_id": "EditSecurityMonitoringSignalAssignee", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SignalAssigneeUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "assignee": "773b045d-ccf8-4808-bd3b-955ef6a8c940" + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "signal_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "AQAAAYDiB_Ol8PbzFAAAAABBWURpQl9PbEFBQU0yeXhGTG9ZV2JnQUE" + }, + "style": null + } + ], + "path": "/api/v1/security_analytics/signals/{signal_id}/assignee" + }, + "scenario": "Modify the triage assignee of a security signal returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-checks/submit-a-service-check-returns-payload-accepted-response.json b/test-runner-data/v1/service-checks/submit-a-service-check-returns-payload-accepted-response.json new file mode 100644 index 0000000000..fd4658b955 --- /dev/null +++ b/test-runner-data/v1/service-checks/submit-a-service-check-returns-payload-accepted-response.json @@ -0,0 +1,40 @@ +{ + "api": "ServiceChecks", + "expected_status": 202, + "feature": "Service Checks", + "id": "v1/Service Checks/Submit a Service Check returns \"Payload accepted\" response", + "operation_id": "SubmitServiceCheck", + "request": { + "body": { + "schema": { + "format": null, + "items": { + "format": null, + "ref": "ServiceCheck", + "type": "object" + }, + "ref": "ServiceChecks", + "type": "array" + }, + "source": "inline", + "value": [ + { + "check": "app.ok", + "host_name": "host", + "status": 0, + "tags": [ + "test:{{ unique_alnum }}" + ] + } + ] + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/check_run" + }, + "scenario": "Submit a Service Check returns \"Payload accepted\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objective-corrections/create-an-slo-correction-returns-ok-response.json b/test-runner-data/v1/service-level-objective-corrections/create-an-slo-correction-returns-ok-response.json new file mode 100644 index 0000000000..9db1d52d5c --- /dev/null +++ b/test-runner-data/v1/service-level-objective-corrections/create-an-slo-correction-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "ServiceLevelObjectiveCorrections", + "expected_status": 200, + "feature": "Service Level Objective Corrections", + "id": "v1/Service Level Objective Corrections/Create an SLO correction returns \"OK\" response", + "operation_id": "CreateSLOCorrection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SLOCorrectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"category\": \"Scheduled Maintenance\", \"description\": \"{{ unique }}\", \"end\": {{ timestamp(\"now + 1h\") }}, \"slo_id\": \"{{ slo.data[0].id }}\", \"start\": {{ timestamp(\"now\") }}, \"timezone\": \"UTC\"}, \"type\": \"correction\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/slo/correction" + }, + "scenario": "Create an SLO correction returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objective-corrections/create-an-slo-correction-with-rrule-returns-ok-response.json b/test-runner-data/v1/service-level-objective-corrections/create-an-slo-correction-with-rrule-returns-ok-response.json new file mode 100644 index 0000000000..5fca034ea5 --- /dev/null +++ b/test-runner-data/v1/service-level-objective-corrections/create-an-slo-correction-with-rrule-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "ServiceLevelObjectiveCorrections", + "expected_status": 200, + "feature": "Service Level Objective Corrections", + "id": "v1/Service Level Objective Corrections/Create an SLO correction with rrule returns \"OK\" response", + "operation_id": "CreateSLOCorrection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SLOCorrectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"category\": \"Scheduled Maintenance\", \"description\": \"{{ unique }}\", \"slo_id\": \"{{ slo.data[0].id }}\", \"start\": {{ timestamp(\"now\") }}, \"duration\": 3600, \"rrule\": \"FREQ=DAILY;INTERVAL=10;COUNT=5\", \"timezone\": \"UTC\"}, \"type\": \"correction\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/slo/correction" + }, + "scenario": "Create an SLO correction with rrule returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objective-corrections/create-an-slo-correction-with-slo-query-returns-ok-response.json b/test-runner-data/v1/service-level-objective-corrections/create-an-slo-correction-with-slo-query-returns-ok-response.json new file mode 100644 index 0000000000..3c8eb2c4a2 --- /dev/null +++ b/test-runner-data/v1/service-level-objective-corrections/create-an-slo-correction-with-slo-query-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "ServiceLevelObjectiveCorrections", + "expected_status": 200, + "feature": "Service Level Objective Corrections", + "id": "v1/Service Level Objective Corrections/Create an SLO correction with slo_query returns \"OK\" response", + "operation_id": "CreateSLOCorrection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SLOCorrectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"category\": \"Scheduled Maintenance\", \"description\": \"{{ unique }}\", \"end\": {{ timestamp(\"now + 1h\") }}, \"slo_query\": \"env:prod service:checkout\", \"start\": {{ timestamp(\"now\") }}, \"timezone\": \"UTC\"}, \"type\": \"correction\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/slo/correction" + }, + "scenario": "Create an SLO correction with slo_query returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objective-corrections/get-all-slo-corrections-returns-ok-response-with-pagination.json b/test-runner-data/v1/service-level-objective-corrections/get-all-slo-corrections-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..950ce3f3b4 --- /dev/null +++ b/test-runner-data/v1/service-level-objective-corrections/get-all-slo-corrections-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectiveCorrections", + "expected_status": 200, + "feature": "Service Level Objective Corrections", + "id": "v1/Service Level Objective Corrections/Get all SLO corrections returns \"OK\" response with pagination", + "operation_id": "ListSLOCorrection", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v1/slo/correction" + }, + "scenario": "Get all SLO corrections returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objective-corrections/get-all-slo-corrections-returns-ok-response.json b/test-runner-data/v1/service-level-objective-corrections/get-all-slo-corrections-returns-ok-response.json new file mode 100644 index 0000000000..7c4815f831 --- /dev/null +++ b/test-runner-data/v1/service-level-objective-corrections/get-all-slo-corrections-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "ServiceLevelObjectiveCorrections", + "expected_status": 200, + "feature": "Service Level Objective Corrections", + "id": "v1/Service Level Objective Corrections/Get all SLO corrections returns \"OK\" response", + "operation_id": "ListSLOCorrection", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "offset", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + } + ], + "path": "/api/v1/slo/correction" + }, + "scenario": "Get all SLO corrections returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objective-corrections/get-an-slo-correction-for-an-slo-returns-ok-response.json b/test-runner-data/v1/service-level-objective-corrections/get-an-slo-correction-for-an-slo-returns-ok-response.json new file mode 100644 index 0000000000..8d3d966670 --- /dev/null +++ b/test-runner-data/v1/service-level-objective-corrections/get-an-slo-correction-for-an-slo-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectiveCorrections", + "expected_status": 200, + "feature": "Service Level Objective Corrections", + "id": "v1/Service Level Objective Corrections/Get an SLO correction for an SLO returns \"OK\" response", + "operation_id": "GetSLOCorrection", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_correction_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "correction.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/slo/correction/{slo_correction_id}" + }, + "scenario": "Get an SLO correction for an SLO returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objective-corrections/update-an-slo-correction-returns-ok-response.json b/test-runner-data/v1/service-level-objective-corrections/update-an-slo-correction-returns-ok-response.json new file mode 100644 index 0000000000..2817a4d155 --- /dev/null +++ b/test-runner-data/v1/service-level-objective-corrections/update-an-slo-correction-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "ServiceLevelObjectiveCorrections", + "expected_status": 200, + "feature": "Service Level Objective Corrections", + "id": "v1/Service Level Objective Corrections/Update an SLO correction returns \"OK\" response", + "operation_id": "UpdateSLOCorrection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SLOCorrectionUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"category\": \"Deployment\", \"description\": \"{{ unique }}\", \"end\": {{ timestamp(\"now + 1h\") }}, \"start\": {{ timestamp(\"now\") }}, \"timezone\": \"UTC\"}, \"type\": \"correction\"}}" + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_correction_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "correction.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/slo/correction/{slo_correction_id}" + }, + "scenario": "Update an SLO correction returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objective-corrections/update-an-slo-correction-with-slo-query-returns-ok-response.json b/test-runner-data/v1/service-level-objective-corrections/update-an-slo-correction-with-slo-query-returns-ok-response.json new file mode 100644 index 0000000000..a2d8334820 --- /dev/null +++ b/test-runner-data/v1/service-level-objective-corrections/update-an-slo-correction-with-slo-query-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "ServiceLevelObjectiveCorrections", + "expected_status": 200, + "feature": "Service Level Objective Corrections", + "id": "v1/Service Level Objective Corrections/Update an SLO correction with slo_query returns \"OK\" response", + "operation_id": "UpdateSLOCorrection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SLOCorrectionUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"category\": \"Scheduled Maintenance\", \"description\": \"{{ unique }}\", \"end\": {{ timestamp(\"now + 1h\") }}, \"slo_query\": \"env:staging service:checkout\", \"start\": {{ timestamp(\"now\") }}, \"timezone\": \"UTC\"}, \"type\": \"correction\"}}" + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_correction_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "correction_with_query.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/slo/correction/{slo_correction_id}" + }, + "scenario": "Update an SLO correction with slo_query returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/create-a-new-metric-slo-object-using-bad-events-formula-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/create-a-new-metric-slo-object-using-bad-events-formula-returns-ok-response.json new file mode 100644 index 0000000000..b53726f63d --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/create-a-new-metric-slo-object-using-bad-events-formula-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Create a new metric SLO object using bad events formula returns \"OK\" response", + "operation_id": "CreateSLO", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceLevelObjectiveRequest", + "type": "object" + }, + "source": "inline", + "value": { + "description": "Metric SLO using sli_specification", + "name": "{{ unique }}", + "sli_specification": { + "count": { + "bad_events_formula": { + "formula": "query2" + }, + "good_events_formula": { + "formula": "query1 - query2" + }, + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:httpservice.hits{*}.as_count()" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "sum:httpservice.errors{*}.as_count()" + } + ] + } + }, + "tags": [ + "env:prod", + "type:count" + ], + "target_threshold": 99.0, + "thresholds": [ + { + "target": 99.0, + "target_display": "99.0", + "timeframe": "7d", + "warning": 99.5, + "warning_display": "99.5" + } + ], + "timeframe": "7d", + "type": "metric", + "warning_threshold": 99.5 + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/slo" + }, + "scenario": "Create a new metric SLO object using bad events formula returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/create-a-new-metric-slo-object-using-sli-specification-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/create-a-new-metric-slo-object-using-sli-specification-returns-ok-response.json new file mode 100644 index 0000000000..6ad67dce87 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/create-a-new-metric-slo-object-using-sli-specification-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Create a new metric SLO object using sli_specification returns \"OK\" response", + "operation_id": "CreateSLO", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceLevelObjectiveRequest", + "type": "object" + }, + "source": "inline", + "value": { + "description": "Metric SLO using sli_specification", + "name": "{{ unique }}", + "sli_specification": { + "count": { + "good_events_formula": { + "formula": "query1 - query2" + }, + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:httpservice.hits{*}.as_count()" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "sum:httpservice.errors{*}.as_count()" + } + ], + "total_events_formula": { + "formula": "query1" + } + } + }, + "tags": [ + "env:prod", + "type:count" + ], + "target_threshold": 99.0, + "thresholds": [ + { + "target": 99.0, + "target_display": "99.0", + "timeframe": "7d", + "warning": 99.5, + "warning_display": "99.5" + } + ], + "timeframe": "7d", + "type": "metric", + "warning_threshold": 99.5 + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/slo" + }, + "scenario": "Create a new metric SLO object using sli_specification returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/create-a-time-slice-slo-object-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/create-a-time-slice-slo-object-returns-ok-response.json new file mode 100644 index 0000000000..4cfb2f9f1f --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/create-a-time-slice-slo-object-returns-ok-response.json @@ -0,0 +1,65 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Create a time-slice SLO object returns \"OK\" response", + "operation_id": "CreateSLO", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceLevelObjectiveRequest", + "type": "object" + }, + "source": "inline", + "value": { + "description": "string", + "name": "{{ unique }}", + "sli_specification": { + "time_slice": { + "comparator": ">", + "query": { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "trace.servlet.request{env:prod}" + } + ] + }, + "threshold": 5 + } + }, + "tags": [ + "env:prod" + ], + "target_threshold": 97.0, + "thresholds": [ + { + "target": 97.0, + "target_display": "97.0", + "timeframe": "7d", + "warning": 98, + "warning_display": "98.0" + } + ], + "timeframe": "7d", + "type": "time_slice", + "warning_threshold": 98 + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/slo" + }, + "scenario": "Create a time-slice SLO object returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/create-an-slo-object-returns-bad-request-response.json b/test-runner-data/v1/service-level-objectives/create-an-slo-object-returns-bad-request-response.json new file mode 100644 index 0000000000..3d6c12d2a3 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/create-an-slo-object-returns-bad-request-response.json @@ -0,0 +1,38 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 400, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Create an SLO object returns \"Bad Request\" response", + "operation_id": "CreateSLO", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceLevelObjectiveRequest", + "type": "object" + }, + "source": "inline", + "value": { + "name": "{{ unique }}", + "thresholds": [ + { + "target": 95.0, + "target_display": "95.0", + "timeframe": "7d", + "warning": 98, + "warning_display": "98.0" + } + ], + "type": "monitor" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/slo" + }, + "scenario": "Create an SLO object returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/create-an-slo-object-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/create-an-slo-object-returns-ok-response.json new file mode 100644 index 0000000000..d351463520 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/create-an-slo-object-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Create an SLO object returns \"OK\" response", + "operation_id": "CreateSLO", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceLevelObjectiveRequest", + "type": "object" + }, + "source": "inline", + "value": { + "description": "string", + "groups": [ + "env:test", + "role:mysql" + ], + "monitor_ids": [], + "name": "{{ unique }}", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "tags": [ + "env:prod", + "app:core" + ], + "target_threshold": 97.0, + "thresholds": [ + { + "target": 97.0, + "target_display": "97.0", + "timeframe": "7d", + "warning": 98, + "warning_display": "98.0" + } + ], + "timeframe": "7d", + "type": "metric", + "warning_threshold": 98 + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/slo" + }, + "scenario": "Create an SLO object returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/delete-an-slo-returns-not-found-response.json b/test-runner-data/v1/service-level-objectives/delete-an-slo-returns-not-found-response.json new file mode 100644 index 0000000000..76966a2ba1 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/delete-an-slo-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 404, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Delete an SLO returns \"Not found\" response", + "operation_id": "DeleteSLO", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique_lower_alnum }}" + }, + "style": null + } + ], + "path": "/api/v1/slo/{slo_id}" + }, + "scenario": "Delete an SLO returns \"Not found\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/delete-an-slo-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/delete-an-slo-returns-ok-response.json new file mode 100644 index 0000000000..42151a903a --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/delete-an-slo-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Delete an SLO returns \"OK\" response", + "operation_id": "DeleteSLO", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "slo.data[0].id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/slo/{slo_id}" + }, + "scenario": "Delete an SLO returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/get-all-slos-returns-ok-response-with-pagination.json b/test-runner-data/v1/service-level-objectives/get-all-slos-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..bc26cdbdf5 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/get-all-slos-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Get all SLOs returns \"OK\" response with pagination", + "operation_id": "ListSLOs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v1/slo" + }, + "scenario": "Get all SLOs returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/get-all-slos-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/get-all-slos-returns-ok-response.json new file mode 100644 index 0000000000..8976c772c0 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/get-all-slos-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Get all SLOs returns \"OK\" response", + "operation_id": "ListSLOs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "ids", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "slo.data[0].id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/slo" + }, + "scenario": "Get all SLOs returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/get-an-slo-s-details-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/get-an-slo-s-details-returns-ok-response.json new file mode 100644 index 0000000000..d691f92341 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/get-an-slo-s-details-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Get an SLO's details returns \"OK\" response", + "operation_id": "GetSLO", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "slo.data[0].id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/slo/{slo_id}" + }, + "scenario": "Get an SLO's details returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/get-an-slo-s-history-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/get-an-slo-s-history-returns-ok-response.json new file mode 100644 index 0000000000..8107c984e0 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/get-an-slo-s-history-returns-ok-response.json @@ -0,0 +1,71 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Get an SLO's history returns \"OK\" response", + "operation_id": "GetSLOHistory", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "slo.data[0].id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "from_ts", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": { + "$openapi_transformer_template": "{{ timestamp(\"now - 1d\") }}" + } + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "to_ts", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": { + "$openapi_transformer_template": "{{ timestamp(\"now\") }}" + } + }, + "style": null + } + ], + "path": "/api/v1/slo/{slo_id}/history" + }, + "scenario": "Get an SLO's history returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/get-corrections-for-an-slo-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/get-corrections-for-an-slo-returns-ok-response.json new file mode 100644 index 0000000000..ce4819dde9 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/get-corrections-for-an-slo-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Get Corrections For an SLO returns \"OK\" response", + "operation_id": "GetSLOCorrections", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "slo.data[0].id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/slo/{slo_id}/corrections" + }, + "scenario": "Get Corrections For an SLO returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/search-for-slos-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/search-for-slos-returns-ok-response.json new file mode 100644 index 0000000000..a0a0bf392d --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/search-for-slos-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Search for SLOs returns \"OK\" response", + "operation_id": "SearchSLO", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "query", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "slo.data[0].name", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 20 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[number]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v1/slo/search" + }, + "scenario": "Search for SLOs returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/update-an-slo-returns-bad-request-response.json b/test-runner-data/v1/service-level-objectives/update-an-slo-returns-bad-request-response.json new file mode 100644 index 0000000000..ed51de9cf0 --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/update-an-slo-returns-bad-request-response.json @@ -0,0 +1,55 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 400, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Update an SLO returns \"Bad Request\" response", + "operation_id": "UpdateSLO", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceLevelObjective", + "type": "object" + }, + "source": "inline", + "value": { + "name": "{{ unique }}", + "thresholds": [ + { + "target": 95.0, + "target_display": "95.0", + "timeframe": "7d", + "warning": 98, + "warning_display": "98.0" + } + ], + "type": "monitor" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "slo.data[0].id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/slo/{slo_id}" + }, + "scenario": "Update an SLO returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/service-level-objectives/update-an-slo-returns-ok-response.json b/test-runner-data/v1/service-level-objectives/update-an-slo-returns-ok-response.json new file mode 100644 index 0000000000..ed0127c56e --- /dev/null +++ b/test-runner-data/v1/service-level-objectives/update-an-slo-returns-ok-response.json @@ -0,0 +1,60 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v1/Service Level Objectives/Update an SLO returns \"OK\" response", + "operation_id": "UpdateSLO", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceLevelObjective", + "type": "object" + }, + "source": "inline", + "value": { + "name": "{{ slo.data[0].name }}", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "target_threshold": 97.0, + "thresholds": [ + { + "target": 97.0, + "timeframe": "7d", + "warning": 98.0 + } + ], + "timeframe": "7d", + "type": "metric", + "warning_threshold": 98 + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "slo.data[0].id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/slo/{slo_id}" + }, + "scenario": "Update an SLO returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/client-is-resilient-to-enum-and-oneof-deserialization-errors.json b/test-runner-data/v1/synthetics/client-is-resilient-to-enum-and-oneof-deserialization-errors.json new file mode 100644 index 0000000000..5fffcde2d8 --- /dev/null +++ b/test-runner-data/v1/synthetics/client-is-resilient-to-enum-and-oneof-deserialization-errors.json @@ -0,0 +1,18 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Client is resilient to enum and oneOf deserialization errors", + "operation_id": "ListTests", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests" + }, + "scenario": "Client is resilient to enum and oneOf deserialization errors", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-browser-test-returns-ok-returns-saved-rumsettings-response.json b/test-runner-data/v1/synthetics/create-a-browser-test-returns-ok-returns-saved-rumsettings-response.json new file mode 100644 index 0000000000..2fa8ddf34b --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-browser-test-returns-ok-returns-saved-rumsettings-response.json @@ -0,0 +1,92 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a browser test returns \"OK - Returns saved rumSettings.\" response", + "operation_id": "CreateSyntheticsBrowserTest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsBrowserTest", + "type": "object" + }, + "source": "synthetics_browser_test_payload_with_rum_settings.json", + "value": { + "config": { + "assertions": [], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "certificateDomains": [ + "https://datadoghq.com" + ], + "method": "GET", + "url": "https://datadoghq.com" + }, + "setCookie": "name:test" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "Test message", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "ci": { + "executionRule": "skipped" + }, + "device_ids": [ + "tablet" + ], + "disableCors": true, + "disableCsp": true, + "follow_redirects": true, + "ignoreServerCertificateError": true, + "initialNavigationTimeout": 200, + "min_failure_duration": 10, + "min_location_failed": 1, + "noScreenshot": true, + "retry": { + "count": 2, + "interval": 10 + }, + "rumSettings": { + "applicationId": "mockApplicationId", + "clientTokenId": 12345, + "isEnabled": true + }, + "tick_every": 300 + }, + "steps": [ + { + "allowFailure": false, + "isCritical": true, + "name": "Refresh page", + "params": {}, + "type": "refresh" + } + ], + "tags": [ + "testing:browser" + ], + "type": "browser" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/browser" + }, + "scenario": "Create a browser test returns \"OK - Returns saved rumSettings.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-browser-test-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-a-browser-test-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..e1aa6b92e0 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-browser-test-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,92 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a browser test returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsBrowserTest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsBrowserTest", + "type": "object" + }, + "source": "synthetics_browser_test_payload.json", + "value": { + "config": { + "assertions": [], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "secure": true, + "type": "text" + } + ], + "request": { + "method": "GET", + "url": "https://datadoghq.com" + }, + "setCookie": "name:test", + "variables": [ + { + "example": "secret", + "name": "TEST_VARIABLE", + "pattern": "secret", + "secure": true, + "type": "text" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "Test message", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "device_ids": [ + "chrome.laptop_large" + ], + "disableCors": true, + "enableProfiling": true, + "enableSecurityTesting": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "noScreenshot": true, + "retry": { + "count": 2, + "interval": 10 + }, + "tick_every": 300 + }, + "steps": [ + { + "allowFailure": false, + "alwaysExecute": true, + "exitIfSucceed": true, + "isCritical": true, + "name": "Refresh page", + "params": {}, + "type": "refresh" + } + ], + "tags": [ + "testing:browser" + ], + "type": "browser" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/browser" + }, + "scenario": "Create a browser test returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-browser-test-with-advanced-scheduling-options-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-a-browser-test-with-advanced-scheduling-options-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..60f3387b1d --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-browser-test-with-advanced-scheduling-options-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,93 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a browser test with advanced scheduling options returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsBrowserTest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsBrowserTest", + "type": "object" + }, + "source": "synthetics_browser_test_payload_with_advanced_scheduling.json", + "value": { + "config": { + "assertions": [], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "method": "GET", + "url": "https://datadoghq.com" + }, + "setCookie": "name:test" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "Test message", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "device_ids": [ + "tablet" + ], + "disableCors": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "noScreenshot": true, + "retry": { + "count": 2, + "interval": 10 + }, + "scheduling": { + "timeframes": [ + { + "day": 1, + "from": "07:00", + "to": "16:00" + }, + { + "day": 3, + "from": "07:00", + "to": "16:00" + } + ], + "timezone": "America/New_York" + }, + "tick_every": 300 + }, + "steps": [ + { + "allowFailure": false, + "isCritical": true, + "name": "Refresh page", + "params": {}, + "type": "refresh" + } + ], + "tags": [ + "testing:browser" + ], + "type": "browser" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/browser" + }, + "scenario": "Create a browser test with advanced scheduling options returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-fido-global-variable-returns-ok-response.json b/test-runner-data/v1/synthetics/create-a-fido-global-variable-returns-ok-response.json new file mode 100644 index 0000000000..0ce340cb77 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-fido-global-variable-returns-ok-response.json @@ -0,0 +1,31 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a FIDO global variable returns \"OK\" response", + "operation_id": "CreateGlobalVariable", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsGlobalVariableRequest", + "type": "object" + }, + "source": "synthetics_global_variable_fido_payload.json", + "value": { + "description": "", + "is_fido": true, + "name": "GLOBAL_VARIABLE_FIDO_PAYLOAD_{{ unique_upper_alnum }}", + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/variables" + }, + "scenario": "Create a FIDO global variable returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-global-variable-from-test-returns-ok-response.json b/test-runner-data/v1/synthetics/create-a-global-variable-from-test-returns-ok-response.json new file mode 100644 index 0000000000..ad8794a704 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-global-variable-from-test-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a global variable from test returns \"OK\" response", + "operation_id": "CreateGlobalVariable", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsGlobalVariableRequest", + "type": "object" + }, + "source": "synthetics_global_variable_from_test_payload.json", + "value": { + "description": "", + "name": "GLOBAL_VARIABLE_FROM_TEST_PAYLOAD_{{ unique_upper_alnum }}", + "parse_test_options": { + "localVariableName": "EXTRACTED_VALUE", + "type": "local_variable" + }, + "parse_test_public_id": "{{ synthetics_api_test_multi_step.public_id }}", + "tags": [], + "value": { + "secure": false, + "value": "" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/variables" + }, + "scenario": "Create a global variable from test returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-mobile-test-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-a-mobile-test-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..7e9513e82c --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-mobile-test-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,46 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a mobile test returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsMobileTest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsMobileTest", + "type": "object" + }, + "source": "synthetics_mobile_test_payload.json", + "value": { + "config": { + "variables": [] + }, + "message": "", + "name": "{{ unique }}", + "options": { + "device_ids": [ + "synthetics:mobile:device:iphone_15_ios_17" + ], + "mobileApplication": { + "applicationId": "ab0e0aed-536d-411a-9a99-5428c27d8f8e", + "referenceId": "6115922a-5f5d-455e-bc7e-7955a57f3815", + "referenceType": "version" + }, + "tick_every": 3600 + }, + "status": "paused", + "steps": [], + "type": "mobile" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/mobile" + }, + "scenario": "Create a mobile test returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-multi-step-api-test-with-every-type-of-basicauth-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-a-multi-step-api-test-with-every-type-of-basicauth-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..b220d2d6c7 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-multi-step-api-test-with-every-type-of-basicauth-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,182 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a multi-step api test with every type of basicAuth returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_test_multi_step_with_every_type_of_basic_auth.json", + "value": { + "config": { + "steps": [ + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "password": "password", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "password": "password", + "type": "web", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "accessKey": "accessKey", + "secretKey": "secretKey", + "type": "sigv4" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "type": "ntlm" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "password": "password", + "type": "digest", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "accessTokenUrl": "accessTokenUrl", + "clientId": "clientId", + "clientSecret": "clientSecret", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "accessTokenUrl": "accessTokenUrl", + "password": "password", + "tokenApiAuthentication": "header", + "type": "oauth-rop", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_with_every_type_of_basic_auth.json", + "name": "{{ unique }}", + "options": { + "tick_every": 60 + }, + "subtype": "multi", + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create a multi-step api test with every type of basicAuth returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-multistep-test-with-subtest-returns-ok-response.json b/test-runner-data/v1/synthetics/create-a-multistep-test-with-subtest-returns-ok-response.json new file mode 100644 index 0000000000..43724088aa --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-multistep-test-with-subtest-returns-ok-response.json @@ -0,0 +1,65 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a multistep test with subtest returns \"OK\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_test_multi_step_with_subtest.json", + "value": { + "config": { + "steps": [ + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "password": "password", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "name": "subtest step", + "subtestPublicId": "{{ synthetics_api_test.public_id }}", + "subtype": "playSubTest" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_with_subtest.json", + "name": "{{ unique }}", + "options": { + "tick_every": 60 + }, + "subtype": "multi", + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create a multistep test with subtest returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-private-location-returns-ok-response.json b/test-runner-data/v1/synthetics/create-a-private-location-returns-ok-response.json new file mode 100644 index 0000000000..b83d3a9466 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-private-location-returns-ok-response.json @@ -0,0 +1,37 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a private location returns \"OK\" response", + "operation_id": "CreatePrivateLocation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsPrivateLocation", + "type": "object" + }, + "source": "inline", + "value": { + "description": "Test {{ unique }} description", + "metadata": { + "restricted_roles": [ + "{{ role.data.id }}" + ] + }, + "name": "{{ unique }}", + "tags": [ + "test:{{ unique_lower_alnum }}" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/private-locations" + }, + "scenario": "Create a private location returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-a-totp-global-variable-returns-ok-response.json b/test-runner-data/v1/synthetics/create-a-totp-global-variable-returns-ok-response.json new file mode 100644 index 0000000000..f62c0761c5 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-a-totp-global-variable-returns-ok-response.json @@ -0,0 +1,41 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create a TOTP global variable returns \"OK\" response", + "operation_id": "CreateGlobalVariable", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsGlobalVariableRequest", + "type": "object" + }, + "source": "synthetics_global_variable_totp_payload.json", + "value": { + "description": "", + "is_totp": true, + "name": "GLOBAL_VARIABLE_TOTP_PAYLOAD_{{ unique_upper_alnum }}", + "tags": [], + "value": { + "options": { + "totp_parameters": { + "digits": 6, + "refresh_interval": 30 + } + }, + "secure": false, + "value": "" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/variables" + }, + "scenario": "Create a TOTP global variable returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-grpc-test-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-an-api-grpc-test-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..80f8bcbd59 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-grpc-test-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,74 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API GRPC test returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_grpc_test_payload.json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "target": 1, + "type": "grpcHealthcheckStatus" + }, + { + "operator": "is", + "target": "proto target", + "type": "grpcProto" + }, + { + "operator": "is", + "property": "property", + "target": "123", + "type": "grpcMetadata" + } + ], + "request": { + "host": "localhost", + "message": "", + "metadata": {}, + "method": "GET", + "port": 50051, + "service": "Hello" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_grpc_test_payload.json", + "name": "{{ unique }}", + "options": { + "min_failure_duration": 0, + "min_location_failed": 1, + "monitor_name": "{{ unique }}", + "monitor_options": { + "renotify_interval": 0 + }, + "tick_every": 60 + }, + "subtype": "grpc", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API GRPC test returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-http-test-has-bodyhash-filled-out.json b/test-runner-data/v1/synthetics/create-an-api-http-test-has-bodyhash-filled-out.json new file mode 100644 index 0000000000..95220211db --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-http-test-has-bodyhash-filled-out.json @@ -0,0 +1,157 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API HTTP test has bodyHash filled out", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_http_test_payload.json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ '{{ PROPERTY }}' }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONPath", + "target": { + "elementsOperator": "atLeastOneElementMatches", + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + }, + { + "operator": "md5", + "target": "a", + "type": "bodyHash" + }, + { + "code": "const hello = 'world';", + "type": "javascript" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "{{ unique_lower_alnum }}" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + }, + "variablesFromScript": "dd.variable.set(\"FOO\", \"foo\")" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "{{ unique }}", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API HTTP test has bodyHash filled out", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-http-test-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-an-api-http-test-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..e2e38aaf70 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-http-test-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,157 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API HTTP test returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_http_test_payload.json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ '{{ PROPERTY }}' }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONPath", + "target": { + "elementsOperator": "atLeastOneElementMatches", + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + }, + { + "operator": "md5", + "target": "a", + "type": "bodyHash" + }, + { + "code": "const hello = 'world';", + "type": "javascript" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "{{ unique_lower_alnum }}" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + }, + "variablesFromScript": "dd.variable.set(\"FOO\", \"foo\")" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "{{ unique }}", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API HTTP test returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-http-with-oauth-rop-test-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-an-api-http-with-oauth-rop-test-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..5c034bffd9 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-http-with-oauth-rop-test-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,136 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API HTTP with oauth-rop test returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_http_test_oauth_rop_payload.json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ '{{ PROPERTY }}' }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "password": "oauth-password", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "body", + "type": "oauth-rop", + "username": "oauth-usermame" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "{{ unique_lower_alnum }}" + }, + "method": "GET", + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "{{ unique }}", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API HTTP with oauth-rop test returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-ssl-test-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-an-api-ssl-test-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..ddaa6d81da --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-ssl-test-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,57 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API SSL test returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_ssl_test_payload.json", + "value": { + "config": { + "assertions": [ + { + "operator": "isInMoreThan", + "target": 10, + "type": "certificate" + } + ], + "request": { + "host": "datadoghq.com", + "port": "{{ '{{ DATADOG_PORT }}' }}" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_ssl_test_payload.json", + "name": "{{ unique }}", + "options": { + "accept_self_signed": true, + "checkCertificateRevocation": true, + "disableAiaIntermediateFetching": true, + "ignore_certificate_validation": true, + "tick_every": 60 + }, + "subtype": "ssl", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API SSL test returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-test-with-a-file-payload-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-an-api-test-with-a-file-payload-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..a9147ecc3c --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-test-with-a-file-payload-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,139 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API test with a file payload returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_http_test_with_file_payload.json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ '{{ PROPERTY }}' }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "bodyType": "application/octet-stream", + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "files": [ + { + "content": "file content", + "encoding": "base64", + "name": "file name", + "originalFileName": "image.png", + "type": "file type" + } + ], + "headers": { + "unique": "{{ unique_lower_alnum }}" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "{{ unique }}", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API test with a file payload returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-test-with-mcp-steps-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-an-api-test-with-mcp-steps-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..d6d29da061 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-test-with-mcp-steps-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,166 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API test with MCP steps returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_test_mcp_payload.json", + "value": { + "config": { + "steps": [ + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + }, + { + "type": "mcpRespectsSpecification" + }, + { + "operator": "contains", + "target": [ + "tools" + ], + "type": "mcpServerCapabilities" + } + ], + "isCritical": true, + "name": "Initialize MCP session", + "request": { + "callType": "init", + "headers": { + "DD-API-KEY": "", + "DD-APPLICATION-KEY": "" + }, + "mcpProtocolVersion": "2025-06-18", + "url": "https://example.org/mcp" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "mcp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + }, + { + "operator": "moreThan", + "target": 0, + "type": "mcpToolCount" + }, + { + "operator": "lessThan", + "target": 64, + "type": "mcpToolNameLength" + }, + { + "type": "mcpRespectsSpecification" + } + ], + "isCritical": true, + "name": "List MCP tools", + "request": { + "callType": "tool_list", + "headers": { + "DD-API-KEY": "", + "DD-APPLICATION-KEY": "" + }, + "mcpProtocolVersion": "2025-06-18", + "url": "https://example.org/mcp" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "mcp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + }, + { + "operator": "lessThan", + "target": 5000, + "type": "responseTime" + }, + { + "type": "mcpRespectsSpecification" + } + ], + "isCritical": true, + "name": "Call MCP search tool", + "request": { + "callType": "tool_call", + "headers": { + "DD-API-KEY": "", + "DD-APPLICATION-KEY": "" + }, + "mcpProtocolVersion": "2025-06-18", + "toolArgs": { + "limit": 5, + "query": "datadog synthetics" + }, + "toolName": "search", + "url": "https://example.org/mcp" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "mcp" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_mcp_payload.json", + "name": "{{ unique }}", + "options": { + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "{{ unique }}", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 1000 + }, + "tick_every": 900 + }, + "subtype": "multi", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API test with MCP steps returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-test-with-multi-subtype-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-an-api-test-with-multi-subtype-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..fe5efd75f5 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-test-with-multi-subtype-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,275 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API test with multi subtype returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_test_multi_step_payload.json", + "value": { + "config": { + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "steps": [ + { + "allowFailure": true, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "exitIfSucceed": true, + "extractedValues": [ + { + "field": "server", + "name": "EXTRACTED_VALUE", + "parser": { + "type": "raw" + }, + "secure": true, + "type": "http_header" + } + ], + "extractedValuesFromScript": "dd.variable.set('STATUS_CODE', dd.response.statusCode);", + "isCritical": true, + "name": "request is sent", + "request": { + "httpVersion": "http2", + "method": "GET", + "timeout": 10, + "url": "https://datadoghq.com" + }, + "retry": { + "count": 5, + "interval": 1000 + }, + "subtype": "http" + }, + { + "name": "Wait", + "subtype": "wait", + "value": 1 + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "extractedValues": [], + "isCritical": true, + "name": "GRPC CALL", + "request": { + "callType": "unary", + "compressedJsonDescriptor": "eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==", + "host": "grpcbin.test.k6.io", + "message": "{}", + "metadata": {}, + "method": "Index", + "port": 9000, + "service": "grpcbin.GRPCBin" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "grpc" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "isInMoreThan", + "target": 10, + "type": "certificate" + } + ], + "isCritical": true, + "name": "SSL step", + "request": { + "checkCertificateRevocation": true, + "disableAiaIntermediateFetching": true, + "host": "example.org", + "port": 443 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "ssl" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "DNS step", + "request": { + "dnsServer": "8.8.8.8", + "dnsServerPort": "53", + "host": "troisdizaines.com" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "dns" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "TCP step", + "request": { + "host": "34.95.79.70", + "port": 80, + "shouldTrackHops": true, + "timeout": 32 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "tcp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 0, + "type": "packetLossPercentage" + } + ], + "isCritical": true, + "name": "ICMP step", + "request": { + "host": "34.95.79.70", + "numberOfPackets": 4, + "shouldTrackHops": true, + "timeout": 38 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "icmp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "Websocket step", + "request": { + "basicAuth": { + "password": "password", + "type": "web", + "username": "user" + }, + "headers": { + "f": "g" + }, + "isMessageBase64Encoded": true, + "message": "My message", + "url": "ws://34.95.79.70/web-socket" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "websocket" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "UDP step", + "request": { + "host": "8.8.8.8", + "message": "A image.google.com", + "port": 53 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "udp" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_payload.json", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "{{ unique }}", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 1000 + }, + "tick_every": 60 + }, + "subtype": "multi", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API test with multi subtype returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-test-with-udp-subtype-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-an-api-test-with-udp-subtype-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..e94d2ecbf3 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-test-with-udp-subtype-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,71 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API test with UDP subtype returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_test_udp_payload.json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "target": "message", + "type": "receivedMessage" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + } + ], + "configVariables": [], + "request": { + "host": "https://datadoghq.com", + "message": "message", + "port": 443 + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_udp_payload.json", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "{{ unique }}", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "udp", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API test with UDP subtype returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/create-an-api-test-with-websocket-subtype-returns-ok-returns-the-created-test-details-response.json b/test-runner-data/v1/synthetics/create-an-api-test-with-websocket-subtype-returns-ok-returns-the-created-test-details-response.json new file mode 100644 index 0000000000..5e81af0512 --- /dev/null +++ b/test-runner-data/v1/synthetics/create-an-api-test-with-websocket-subtype-returns-ok-returns-the-created-test-details-response.json @@ -0,0 +1,70 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Create an API test with WEBSOCKET subtype returns \"OK - Returns the created test details.\" response", + "operation_id": "CreateSyntheticsAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_test_websocket_payload.json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "target": "message", + "type": "receivedMessage" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + } + ], + "configVariables": [], + "request": { + "message": "message", + "url": "ws://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_websocket_payload.json", + "name": "{{ unique }}", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "{{ unique }}", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "websocket", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/api" + }, + "scenario": "Create an API test with WEBSOCKET subtype returns \"OK - Returns the created test details.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/edit-a-mobile-test-returns-ok-response.json b/test-runner-data/v1/synthetics/edit-a-mobile-test-returns-ok-response.json new file mode 100644 index 0000000000..099c510e73 --- /dev/null +++ b/test-runner-data/v1/synthetics/edit-a-mobile-test-returns-ok-response.json @@ -0,0 +1,63 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Edit a Mobile test returns \"OK\" response", + "operation_id": "UpdateMobileTest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsMobileTest", + "type": "object" + }, + "source": "synthetics_mobile_test_update_payload.json", + "value": { + "config": { + "variables": [] + }, + "message": "", + "name": "{{ unique }}-updated", + "options": { + "device_ids": [ + "synthetics:mobile:device:iphone_15_ios_17" + ], + "mobileApplication": { + "applicationId": "ab0e0aed-536d-411a-9a99-5428c27d8f8e", + "referenceId": "6115922a-5f5d-455e-bc7e-7955a57f3815", + "referenceType": "version" + }, + "tick_every": 3600 + }, + "status": "paused", + "steps": [], + "type": "mobile" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "synthetics_mobile_test.public_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests/mobile/{public_id}" + }, + "scenario": "Edit a Mobile test returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/edit-an-api-test-returns-ok-response.json b/test-runner-data/v1/synthetics/edit-an-api-test-returns-ok-response.json new file mode 100644 index 0000000000..7f96224214 --- /dev/null +++ b/test-runner-data/v1/synthetics/edit-an-api-test-returns-ok-response.json @@ -0,0 +1,127 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Edit an API test returns \"OK\" response", + "operation_id": "UpdateAPITest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsAPITest", + "type": "object" + }, + "source": "synthetics_api_test_update_payload.json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ '{{ PROPERTY }}' }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "certificate": { + "cert": { + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "{{ unique_lower_alnum }}" + }, + "method": "GET", + "timeout": 10, + "url": "https://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_payload.json", + "name": "{{ unique }}-updated", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-TestSyntheticsAPITestLifecycle-1623076664", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "status": "live", + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "synthetics_api_test.public_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests/api/{public_id}" + }, + "scenario": "Edit an API test returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/fetch-uptime-for-multiple-tests-returns-json-format-is-wrong-response.json b/test-runner-data/v1/synthetics/fetch-uptime-for-multiple-tests-returns-json-format-is-wrong-response.json new file mode 100644 index 0000000000..671f801a23 --- /dev/null +++ b/test-runner-data/v1/synthetics/fetch-uptime-for-multiple-tests-returns-json-format-is-wrong-response.json @@ -0,0 +1,30 @@ +{ + "api": "Synthetics", + "expected_status": 400, + "feature": "Synthetics", + "id": "v1/Synthetics/Fetch uptime for multiple tests returns \"- JSON format is wrong\" response", + "operation_id": "FetchUptimes", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsFetchUptimesPayload", + "type": "object" + }, + "source": "inline", + "value": { + "from_ts": 0, + "public_ids": [], + "to_ts": 0 + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/uptimes" + }, + "scenario": "Fetch uptime for multiple tests returns \"- JSON format is wrong\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/fetch-uptime-for-multiple-tests-returns-ok-response.json b/test-runner-data/v1/synthetics/fetch-uptime-for-multiple-tests-returns-ok-response.json new file mode 100644 index 0000000000..49e19a480a --- /dev/null +++ b/test-runner-data/v1/synthetics/fetch-uptime-for-multiple-tests-returns-ok-response.json @@ -0,0 +1,32 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Fetch uptime for multiple tests returns \"OK.\" response", + "operation_id": "FetchUptimes", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsFetchUptimesPayload", + "type": "object" + }, + "source": "inline", + "value": { + "from_ts": 1726041488, + "public_ids": [ + "p8m-9gw-nte" + ], + "to_ts": 1726055954 + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/uptimes" + }, + "scenario": "Fetch uptime for multiple tests returns \"OK.\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/get-a-browser-test-result-returns-ok-response.json b/test-runner-data/v1/synthetics/get-a-browser-test-result-returns-ok-response.json new file mode 100644 index 0000000000..4a6d7a93b9 --- /dev/null +++ b/test-runner-data/v1/synthetics/get-a-browser-test-result-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Get a browser test result returns \"OK\" response", + "operation_id": "GetBrowserTestResult", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2yy-sem-mjh" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "result_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "5671719892074090418" + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests/browser/{public_id}/results/{result_id}" + }, + "scenario": "Get a browser test result returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/get-a-browser-test-s-latest-results-summaries-returns-ok-response.json b/test-runner-data/v1/synthetics/get-a-browser-test-s-latest-results-summaries-returns-ok-response.json new file mode 100644 index 0000000000..b04b060373 --- /dev/null +++ b/test-runner-data/v1/synthetics/get-a-browser-test-s-latest-results-summaries-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Get a browser test's latest results summaries returns \"OK\" response", + "operation_id": "GetBrowserTestLatestResults", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2yy-sem-mjh" + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests/browser/{public_id}/results" + }, + "scenario": "Get a browser test's latest results summaries returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/get-a-mobile-test-returns-ok-response.json b/test-runner-data/v1/synthetics/get-a-mobile-test-returns-ok-response.json new file mode 100644 index 0000000000..6427f0093d --- /dev/null +++ b/test-runner-data/v1/synthetics/get-a-mobile-test-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Get a Mobile test returns \"OK\" response", + "operation_id": "GetMobileTest", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "synthetics_mobile_test.public_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests/mobile/{public_id}" + }, + "scenario": "Get a Mobile test returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/get-an-api-test-result-returns-ok-response.json b/test-runner-data/v1/synthetics/get-an-api-test-result-returns-ok-response.json new file mode 100644 index 0000000000..a92717e431 --- /dev/null +++ b/test-runner-data/v1/synthetics/get-an-api-test-result-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Get an API test result returns \"OK\" response", + "operation_id": "GetAPITestResult", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "hwb-332-3xe" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "result_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "3420446318379485707" + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests/{public_id}/results/{result_id}" + }, + "scenario": "Get an API test result returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/get-an-api-test-result-returns-result-with-failure-object.json b/test-runner-data/v1/synthetics/get-an-api-test-result-returns-result-with-failure-object.json new file mode 100644 index 0000000000..f194b928ce --- /dev/null +++ b/test-runner-data/v1/synthetics/get-an-api-test-result-returns-result-with-failure-object.json @@ -0,0 +1,51 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Get an API test result returns result with failure object", + "operation_id": "GetAPITestResult", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "synthetics_api_test_with_wrong_dns.public_id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "result_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "synthetics_api_test_with_wrong_dns_result.results[0].result_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests/{public_id}/results/{result_id}" + }, + "scenario": "Get an API test result returns result with failure object", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/get-an-api-test-s-latest-results-summaries-returns-ok-response.json b/test-runner-data/v1/synthetics/get-an-api-test-s-latest-results-summaries-returns-ok-response.json new file mode 100644 index 0000000000..a0cbcb51f9 --- /dev/null +++ b/test-runner-data/v1/synthetics/get-an-api-test-s-latest-results-summaries-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Get an API test's latest results summaries returns \"OK\" response", + "operation_id": "GetAPITestLatestResults", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "hwb-332-3xe" + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests/{public_id}/results" + }, + "scenario": "Get an API test's latest results summaries returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/get-the-list-of-all-synthetic-tests-returns-ok-returns-the-list-of-all-synthetic-tests-response-with-pagination.json b/test-runner-data/v1/synthetics/get-the-list-of-all-synthetic-tests-returns-ok-returns-the-list-of-all-synthetic-tests-response-with-pagination.json new file mode 100644 index 0000000000..8aedde42b1 --- /dev/null +++ b/test-runner-data/v1/synthetics/get-the-list-of-all-synthetic-tests-returns-ok-returns-the-list-of-all-synthetic-tests-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Get the list of all Synthetic tests returns \"OK - Returns the list of all Synthetic tests.\" response with pagination", + "operation_id": "ListTests", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page_size", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests" + }, + "scenario": "Get the list of all Synthetic tests returns \"OK - Returns the list of all Synthetic tests.\" response with pagination", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/get-the-list-of-default-locations-returns-ok-response.json b/test-runner-data/v1/synthetics/get-the-list-of-default-locations-returns-ok-response.json new file mode 100644 index 0000000000..1b95ab928f --- /dev/null +++ b/test-runner-data/v1/synthetics/get-the-list-of-default-locations-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Get the list of default locations returns \"OK\" response", + "operation_id": "GetSyntheticsDefaultLocations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/settings/default_locations" + }, + "scenario": "Get the list of default locations returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/patch-a-synthetic-test-returns-ok-response.json b/test-runner-data/v1/synthetics/patch-a-synthetic-test-returns-ok-response.json new file mode 100644 index 0000000000..7196945096 --- /dev/null +++ b/test-runner-data/v1/synthetics/patch-a-synthetic-test-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Patch a Synthetic test returns \"OK\" response", + "operation_id": "PatchTest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsPatchTestBody", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "op": "replace", + "path": "/name", + "value": "New test name" + }, + { + "op": "remove", + "path": "/config/assertions/0" + } + ] + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "synthetics_api_test.public_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/synthetics/tests/{public_id}" + }, + "scenario": "Patch a Synthetic test returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/synthetics/trigger-synthetic-tests-returns-ok-response.json b/test-runner-data/v1/synthetics/trigger-synthetic-tests-returns-ok-response.json new file mode 100644 index 0000000000..9e1ab22a2e --- /dev/null +++ b/test-runner-data/v1/synthetics/trigger-synthetic-tests-returns-ok-response.json @@ -0,0 +1,32 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v1/Synthetics/Trigger Synthetic tests returns \"OK\" response", + "operation_id": "TriggerTests", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsTriggerBody", + "type": "object" + }, + "source": "inline", + "value": { + "tests": [ + { + "public_id": "{{ synthetics_api_test.public_id }}" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/synthetics/tests/trigger" + }, + "scenario": "Trigger Synthetic tests returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/usage-metering/get-all-custom-metrics-by-hourly-average-returns-bad-request-response.json b/test-runner-data/v1/usage-metering/get-all-custom-metrics-by-hourly-average-returns-bad-request-response.json new file mode 100644 index 0000000000..16356db656 --- /dev/null +++ b/test-runner-data/v1/usage-metering/get-all-custom-metrics-by-hourly-average-returns-bad-request-response.json @@ -0,0 +1,18 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v1/Usage Metering/Get all custom metrics by hourly average returns \"Bad Request\" response", + "operation_id": "GetUsageTopAvgMetrics", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v1/usage/top_avg_metrics" + }, + "scenario": "Get all custom metrics by hourly average returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/usage-metering/get-all-custom-metrics-by-hourly-average-returns-ok-response.json b/test-runner-data/v1/usage-metering/get-all-custom-metrics-by-hourly-average-returns-ok-response.json new file mode 100644 index 0000000000..fa2a430305 --- /dev/null +++ b/test-runner-data/v1/usage-metering/get-all-custom-metrics-by-hourly-average-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v1/Usage Metering/Get all custom metrics by hourly average returns \"OK\" response", + "operation_id": "GetUsageTopAvgMetrics", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "day", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + } + ], + "path": "/api/v1/usage/top_avg_metrics" + }, + "scenario": "Get all custom metrics by hourly average returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/usage-metering/get-hourly-usage-attribution-returns-ok-response.json b/test-runner-data/v1/usage-metering/get-hourly-usage-attribution-returns-ok-response.json new file mode 100644 index 0000000000..6ede593d14 --- /dev/null +++ b/test-runner-data/v1/usage-metering/get-hourly-usage-attribution-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v1/Usage Metering/Get hourly usage attribution returns \"OK\" response", + "operation_id": "GetHourlyUsageAttribution", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_hr", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "usage_type", + "required": true, + "schema": { + "format": null, + "ref": "HourlyUsageAttributionUsageType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "infra_host_usage" + }, + "style": null + } + ], + "path": "/api/v1/usage/hourly-attribution" + }, + "scenario": "Get hourly usage attribution returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/usage-metering/get-hourly-usage-for-logs-by-index-returns-bad-request-response.json b/test-runner-data/v1/usage-metering/get-hourly-usage-for-logs-by-index-returns-bad-request-response.json new file mode 100644 index 0000000000..14bd8f9bd8 --- /dev/null +++ b/test-runner-data/v1/usage-metering/get-hourly-usage-for-logs-by-index-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v1/Usage Metering/Get hourly usage for Logs by Index returns \"Bad Request\" response", + "operation_id": "GetUsageLogsByIndex", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_hr", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_hr", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + } + ], + "path": "/api/v1/usage/logs_by_index" + }, + "scenario": "Get hourly usage for Logs by Index returns \"Bad Request\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/usage-metering/get-hourly-usage-for-logs-by-index-returns-ok-response.json b/test-runner-data/v1/usage-metering/get-hourly-usage-for-logs-by-index-returns-ok-response.json new file mode 100644 index 0000000000..590b7646fb --- /dev/null +++ b/test-runner-data/v1/usage-metering/get-hourly-usage-for-logs-by-index-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v1/Usage Metering/Get hourly usage for Logs by Index returns \"OK\" response", + "operation_id": "GetUsageLogsByIndex", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_hr", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_hr", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + } + ], + "path": "/api/v1/usage/logs_by_index" + }, + "scenario": "Get hourly usage for Logs by Index returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/usage-metering/get-monthly-usage-attribution-returns-ok-response.json b/test-runner-data/v1/usage-metering/get-monthly-usage-attribution-returns-ok-response.json new file mode 100644 index 0000000000..6674e5a0eb --- /dev/null +++ b/test-runner-data/v1/usage-metering/get-monthly-usage-attribution-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v1/Usage Metering/Get monthly usage attribution returns \"OK\" response", + "operation_id": "GetMonthlyUsageAttribution", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_month", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "fields", + "required": true, + "schema": { + "format": null, + "ref": "MonthlyUsageAttributionSupportedMetrics", + "type": "string" + }, + "source": { + "type": "literal", + "value": "infra_host_usage" + }, + "style": null + } + ], + "path": "/api/v1/usage/monthly-attribution" + }, + "scenario": "Get monthly usage attribution returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/usage-metering/get-specified-daily-custom-reports-returns-ok-response.json b/test-runner-data/v1/usage-metering/get-specified-daily-custom-reports-returns-ok-response.json new file mode 100644 index 0000000000..d7016d24ec --- /dev/null +++ b/test-runner-data/v1/usage-metering/get-specified-daily-custom-reports-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v1/Usage Metering/Get specified daily custom reports returns \"OK\" response", + "operation_id": "GetSpecifiedDailyCustomReports", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "report_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2022-03-20" + }, + "style": null + } + ], + "path": "/api/v1/daily_custom_reports/{report_id}" + }, + "scenario": "Get specified daily custom reports returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/usage-metering/get-specified-monthly-custom-reports-returns-ok-response.json b/test-runner-data/v1/usage-metering/get-specified-monthly-custom-reports-returns-ok-response.json new file mode 100644 index 0000000000..4df2ff37f0 --- /dev/null +++ b/test-runner-data/v1/usage-metering/get-specified-monthly-custom-reports-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v1/Usage Metering/Get specified monthly custom reports returns \"OK\" response", + "operation_id": "GetSpecifiedMonthlyCustomReports", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "report_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2021-05-01" + }, + "style": null + } + ], + "path": "/api/v1/monthly_custom_reports/{report_id}" + }, + "scenario": "Get specified monthly custom reports returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/users/create-a-user-returns-null-access-role.json b/test-runner-data/v1/users/create-a-user-returns-null-access-role.json new file mode 100644 index 0000000000..152e35ae04 --- /dev/null +++ b/test-runner-data/v1/users/create-a-user-returns-null-access-role.json @@ -0,0 +1,32 @@ +{ + "api": "Users", + "expected_status": 200, + "feature": "Users", + "id": "v1/Users/Create a user returns null access role", + "operation_id": "CreateUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "User", + "type": "object" + }, + "source": "inline", + "value": { + "access_role": null, + "disabled": false, + "email": "test@datadoghq.com", + "handle": "test@datadoghq.com", + "name": "test user" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/user" + }, + "scenario": "Create a user returns null access role", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/webhooks-integration/create-a-custom-variable-returns-ok-response.json b/test-runner-data/v1/webhooks-integration/create-a-custom-variable-returns-ok-response.json new file mode 100644 index 0000000000..99fc28a37f --- /dev/null +++ b/test-runner-data/v1/webhooks-integration/create-a-custom-variable-returns-ok-response.json @@ -0,0 +1,30 @@ +{ + "api": "WebhooksIntegration", + "expected_status": 201, + "feature": "Webhooks Integration", + "id": "v1/Webhooks Integration/Create a custom variable returns \"OK\" response", + "operation_id": "CreateWebhooksIntegrationCustomVariable", + "request": { + "body": { + "schema": { + "format": null, + "ref": "WebhooksIntegrationCustomVariable", + "type": "object" + }, + "source": "inline", + "value": { + "is_secret": true, + "name": "{{ unique_upper_alnum }}", + "value": "CUSTOM_VARIABLE_VALUE" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/webhooks/configuration/custom-variables" + }, + "scenario": "Create a custom variable returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/webhooks-integration/create-a-webhooks-integration-returns-ok-response.json b/test-runner-data/v1/webhooks-integration/create-a-webhooks-integration-returns-ok-response.json new file mode 100644 index 0000000000..65af44ee93 --- /dev/null +++ b/test-runner-data/v1/webhooks-integration/create-a-webhooks-integration-returns-ok-response.json @@ -0,0 +1,29 @@ +{ + "api": "WebhooksIntegration", + "expected_status": 201, + "feature": "Webhooks Integration", + "id": "v1/Webhooks Integration/Create a webhooks integration returns \"OK\" response", + "operation_id": "CreateWebhooksIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "WebhooksIntegration", + "type": "object" + }, + "source": "inline", + "value": { + "name": "{{ unique }}", + "url": "https://example.com/webhook" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v1/integration/webhooks/configuration/webhooks" + }, + "scenario": "Create a webhooks integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/webhooks-integration/delete-a-custom-variable-returns-ok-response.json b/test-runner-data/v1/webhooks-integration/delete-a-custom-variable-returns-ok-response.json new file mode 100644 index 0000000000..992854d128 --- /dev/null +++ b/test-runner-data/v1/webhooks-integration/delete-a-custom-variable-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "WebhooksIntegration", + "expected_status": 200, + "feature": "Webhooks Integration", + "id": "v1/Webhooks Integration/Delete a custom variable returns \"OK\" response", + "operation_id": "DeleteWebhooksIntegrationCustomVariable", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_variable_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "webhook_custom_variable.name", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/integration/webhooks/configuration/custom-variables/{custom_variable_name}" + }, + "scenario": "Delete a custom variable returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/webhooks-integration/delete-a-webhook-returns-ok-response.json b/test-runner-data/v1/webhooks-integration/delete-a-webhook-returns-ok-response.json new file mode 100644 index 0000000000..0466d60ca6 --- /dev/null +++ b/test-runner-data/v1/webhooks-integration/delete-a-webhook-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "WebhooksIntegration", + "expected_status": 200, + "feature": "Webhooks Integration", + "id": "v1/Webhooks Integration/Delete a webhook returns \"OK\" response", + "operation_id": "DeleteWebhooksIntegration", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "webhook_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "webhook.name", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/integration/webhooks/configuration/webhooks/{webhook_name}" + }, + "scenario": "Delete a webhook returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/webhooks-integration/get-a-webhook-integration-returns-ok-response.json b/test-runner-data/v1/webhooks-integration/get-a-webhook-integration-returns-ok-response.json new file mode 100644 index 0000000000..842729a7ba --- /dev/null +++ b/test-runner-data/v1/webhooks-integration/get-a-webhook-integration-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "WebhooksIntegration", + "expected_status": 200, + "feature": "Webhooks Integration", + "id": "v1/Webhooks Integration/Get a webhook integration returns \"OK\" response", + "operation_id": "GetWebhooksIntegration", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "webhook_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "webhook.name", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/integration/webhooks/configuration/webhooks/{webhook_name}" + }, + "scenario": "Get a webhook integration returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/webhooks-integration/update-a-custom-variable-returns-ok-response.json b/test-runner-data/v1/webhooks-integration/update-a-custom-variable-returns-ok-response.json new file mode 100644 index 0000000000..e861398f0a --- /dev/null +++ b/test-runner-data/v1/webhooks-integration/update-a-custom-variable-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "WebhooksIntegration", + "expected_status": 200, + "feature": "Webhooks Integration", + "id": "v1/Webhooks Integration/Update a custom variable returns \"OK\" response", + "operation_id": "UpdateWebhooksIntegrationCustomVariable", + "request": { + "body": { + "schema": { + "format": null, + "ref": "WebhooksIntegrationCustomVariableUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "value": "variable-updated" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_variable_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "webhook_custom_variable.name", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/integration/webhooks/configuration/custom-variables/{custom_variable_name}" + }, + "scenario": "Update a custom variable returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v1/webhooks-integration/update-a-webhook-returns-ok-response.json b/test-runner-data/v1/webhooks-integration/update-a-webhook-returns-ok-response.json new file mode 100644 index 0000000000..b2b5913070 --- /dev/null +++ b/test-runner-data/v1/webhooks-integration/update-a-webhook-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "WebhooksIntegration", + "expected_status": 200, + "feature": "Webhooks Integration", + "id": "v1/Webhooks Integration/Update a webhook returns \"OK\" response", + "operation_id": "UpdateWebhooksIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "WebhooksIntegrationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "url": "https://example.com/webhook-updated" + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "webhook_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "webhook.name", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v1/integration/webhooks/configuration/webhooks/{webhook_name}" + }, + "scenario": "Update a webhook returns \"OK\" response", + "schema_version": 1, + "version": "v1" +} diff --git a/test-runner-data/v2/action-connection/create-a-new-action-connection-returns-bad-request-response.json b/test-runner-data/v2/action-connection/create-a-new-action-connection-returns-bad-request-response.json new file mode 100644 index 0000000000..9d62192fa8 --- /dev/null +++ b/test-runner-data/v2/action-connection/create-a-new-action-connection-returns-bad-request-response.json @@ -0,0 +1,41 @@ +{ + "api": "ActionConnection", + "expected_status": 400, + "feature": "Action Connection", + "id": "v2/Action Connection/Create a new Action Connection returns \"Bad Request\" response", + "operation_id": "CreateActionConnection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateActionConnectionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "1", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/actions/connections" + }, + "scenario": "Create a new Action Connection returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/create-a-new-action-connection-returns-successfully-created-action-connection-response.json b/test-runner-data/v2/action-connection/create-a-new-action-connection-returns-successfully-created-action-connection-response.json new file mode 100644 index 0000000000..74b0385b6f --- /dev/null +++ b/test-runner-data/v2/action-connection/create-a-new-action-connection-returns-successfully-created-action-connection-response.json @@ -0,0 +1,41 @@ +{ + "api": "ActionConnection", + "expected_status": 201, + "feature": "Action Connection", + "id": "v2/Action Connection/Create a new Action Connection returns \"Successfully created Action Connection\" response", + "operation_id": "CreateActionConnection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateActionConnectionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "123456789123", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection {{ unique_lower_alnum }}" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/actions/connections" + }, + "scenario": "Create a new Action Connection returns \"Successfully created Action Connection\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/delete-an-existing-action-connection-returns-not-found-response.json b/test-runner-data/v2/action-connection/delete-an-existing-action-connection-returns-not-found-response.json new file mode 100644 index 0000000000..29656175b7 --- /dev/null +++ b/test-runner-data/v2/action-connection/delete-an-existing-action-connection-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 404, + "feature": "Action Connection", + "id": "v2/Action Connection/Delete an existing Action Connection returns \"Not Found\" response", + "operation_id": "DeleteActionConnection", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + }, + "style": null + } + ], + "path": "/api/v2/actions/connections/{connection_id}" + }, + "scenario": "Delete an existing Action Connection returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/delete-an-existing-action-connection-returns-the-resource-was-deleted-successfully-response.json b/test-runner-data/v2/action-connection/delete-an-existing-action-connection-returns-the-resource-was-deleted-successfully-response.json new file mode 100644 index 0000000000..1276794c2c --- /dev/null +++ b/test-runner-data/v2/action-connection/delete-an-existing-action-connection-returns-the-resource-was-deleted-successfully-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 204, + "feature": "Action Connection", + "id": "v2/Action Connection/Delete an existing Action Connection returns \"The resource was deleted successfully.\" response", + "operation_id": "DeleteActionConnection", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "action_connection.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions/connections/{connection_id}" + }, + "scenario": "Delete an existing Action Connection returns \"The resource was deleted successfully.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/get-an-existing-action-connection-returns-bad-request-response.json b/test-runner-data/v2/action-connection/get-an-existing-action-connection-returns-bad-request-response.json new file mode 100644 index 0000000000..ff094a8e19 --- /dev/null +++ b/test-runner-data/v2/action-connection/get-an-existing-action-connection-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 400, + "feature": "Action Connection", + "id": "v2/Action Connection/Get an existing Action Connection returns \"Bad Request\" response", + "operation_id": "GetActionConnection", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "bad-format" + }, + "style": null + } + ], + "path": "/api/v2/actions/connections/{connection_id}" + }, + "scenario": "Get an existing Action Connection returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/get-an-existing-action-connection-returns-not-found-response.json b/test-runner-data/v2/action-connection/get-an-existing-action-connection-returns-not-found-response.json new file mode 100644 index 0000000000..4def5a63cc --- /dev/null +++ b/test-runner-data/v2/action-connection/get-an-existing-action-connection-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 404, + "feature": "Action Connection", + "id": "v2/Action Connection/Get an existing Action Connection returns \"Not Found\" response", + "operation_id": "GetActionConnection", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + }, + "style": null + } + ], + "path": "/api/v2/actions/connections/{connection_id}" + }, + "scenario": "Get an existing Action Connection returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/get-an-existing-action-connection-returns-successfully-get-action-connection-response.json b/test-runner-data/v2/action-connection/get-an-existing-action-connection-returns-successfully-get-action-connection-response.json new file mode 100644 index 0000000000..92aaeab984 --- /dev/null +++ b/test-runner-data/v2/action-connection/get-an-existing-action-connection-returns-successfully-get-action-connection-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 200, + "feature": "Action Connection", + "id": "v2/Action Connection/Get an existing Action Connection returns \"Successfully get Action Connection\" response", + "operation_id": "GetActionConnection", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "cb460d51-3c88-4e87-adac-d47131d0423d" + }, + "style": null + } + ], + "path": "/api/v2/actions/connections/{connection_id}" + }, + "scenario": "Get an existing Action Connection returns \"Successfully get Action Connection\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/get-an-existing-app-key-registration-returns-bad-request-response.json b/test-runner-data/v2/action-connection/get-an-existing-app-key-registration-returns-bad-request-response.json new file mode 100644 index 0000000000..be74f5a774 --- /dev/null +++ b/test-runner-data/v2/action-connection/get-an-existing-app-key-registration-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 400, + "feature": "Action Connection", + "id": "v2/Action Connection/Get an existing App Key Registration returns \"Bad request\" response", + "operation_id": "GetAppKeyRegistration", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not_valid_app_key_id" + }, + "style": null + } + ], + "path": "/api/v2/actions/app_key_registrations/{app_key_id}" + }, + "scenario": "Get an existing App Key Registration returns \"Bad request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/get-an-existing-app-key-registration-returns-not-found-response.json b/test-runner-data/v2/action-connection/get-an-existing-app-key-registration-returns-not-found-response.json new file mode 100644 index 0000000000..996f0833d3 --- /dev/null +++ b/test-runner-data/v2/action-connection/get-an-existing-app-key-registration-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 404, + "feature": "Action Connection", + "id": "v2/Action Connection/Get an existing App Key Registration returns \"Not found\" response", + "operation_id": "GetAppKeyRegistration", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + }, + "style": null + } + ], + "path": "/api/v2/actions/app_key_registrations/{app_key_id}" + }, + "scenario": "Get an existing App Key Registration returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/get-an-existing-app-key-registration-returns-ok-response.json b/test-runner-data/v2/action-connection/get-an-existing-app-key-registration-returns-ok-response.json new file mode 100644 index 0000000000..b8b2fbc531 --- /dev/null +++ b/test-runner-data/v2/action-connection/get-an-existing-app-key-registration-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 200, + "feature": "Action Connection", + "id": "v2/Action Connection/Get an existing App Key Registration returns \"OK\" response", + "operation_id": "GetAppKeyRegistration", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "b7feea52-994e-4714-a100-1bd9eff5aee1" + }, + "style": null + } + ], + "path": "/api/v2/actions/app_key_registrations/{app_key_id}" + }, + "scenario": "Get an existing App Key Registration returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/list-app-key-registrations-returns-ok-response.json b/test-runner-data/v2/action-connection/list-app-key-registrations-returns-ok-response.json new file mode 100644 index 0000000000..772a8798f0 --- /dev/null +++ b/test-runner-data/v2/action-connection/list-app-key-registrations-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ActionConnection", + "expected_status": 200, + "feature": "Action Connection", + "id": "v2/Action Connection/List App Key Registrations returns \"OK\" response", + "operation_id": "ListAppKeyRegistrations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/actions/app_key_registrations" + }, + "scenario": "List App Key Registrations returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/register-a-new-app-key-returns-bad-request-response.json b/test-runner-data/v2/action-connection/register-a-new-app-key-returns-bad-request-response.json new file mode 100644 index 0000000000..33cf232d0d --- /dev/null +++ b/test-runner-data/v2/action-connection/register-a-new-app-key-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 400, + "feature": "Action Connection", + "id": "v2/Action Connection/Register a new App Key returns \"Bad request\" response", + "operation_id": "RegisterAppKey", + "request": { + "body": null, + "content_type": null, + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not_valid_app_key_id" + }, + "style": null + } + ], + "path": "/api/v2/actions/app_key_registrations/{app_key_id}" + }, + "scenario": "Register a new App Key returns \"Bad request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/register-a-new-app-key-returns-created-response.json b/test-runner-data/v2/action-connection/register-a-new-app-key-returns-created-response.json new file mode 100644 index 0000000000..4be57ec995 --- /dev/null +++ b/test-runner-data/v2/action-connection/register-a-new-app-key-returns-created-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 201, + "feature": "Action Connection", + "id": "v2/Action Connection/Register a new App Key returns \"Created\" response", + "operation_id": "RegisterAppKey", + "request": { + "body": null, + "content_type": null, + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "b7feea52-994e-4714-a100-1bd9eff5aee1" + }, + "style": null + } + ], + "path": "/api/v2/actions/app_key_registrations/{app_key_id}" + }, + "scenario": "Register a new App Key returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/unregister-an-app-key-returns-bad-request-response.json b/test-runner-data/v2/action-connection/unregister-an-app-key-returns-bad-request-response.json new file mode 100644 index 0000000000..b448a70068 --- /dev/null +++ b/test-runner-data/v2/action-connection/unregister-an-app-key-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 400, + "feature": "Action Connection", + "id": "v2/Action Connection/Unregister an App Key returns \"Bad request\" response", + "operation_id": "UnregisterAppKey", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not_valid_app_key_id" + }, + "style": null + } + ], + "path": "/api/v2/actions/app_key_registrations/{app_key_id}" + }, + "scenario": "Unregister an App Key returns \"Bad request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/unregister-an-app-key-returns-not-found-response.json b/test-runner-data/v2/action-connection/unregister-an-app-key-returns-not-found-response.json new file mode 100644 index 0000000000..b8a0c8ec9f --- /dev/null +++ b/test-runner-data/v2/action-connection/unregister-an-app-key-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionConnection", + "expected_status": 404, + "feature": "Action Connection", + "id": "v2/Action Connection/Unregister an App Key returns \"Not found\" response", + "operation_id": "UnregisterAppKey", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "57cc69ae-9214-4ecc-8df8-43ecc1d92d99" + }, + "style": null + } + ], + "path": "/api/v2/actions/app_key_registrations/{app_key_id}" + }, + "scenario": "Unregister an App Key returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/update-an-existing-action-connection-returns-bad-request-response.json b/test-runner-data/v2/action-connection/update-an-existing-action-connection-returns-bad-request-response.json new file mode 100644 index 0000000000..e3c31d39c5 --- /dev/null +++ b/test-runner-data/v2/action-connection/update-an-existing-action-connection-returns-bad-request-response.json @@ -0,0 +1,58 @@ +{ + "api": "ActionConnection", + "expected_status": 400, + "feature": "Action Connection", + "id": "v2/Action Connection/Update an existing Action Connection returns \"Bad Request\" response", + "operation_id": "UpdateActionConnection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateActionConnectionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "1", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "cb460d51-3c88-4e87-adac-d47131d0423d" + }, + "style": null + } + ], + "path": "/api/v2/actions/connections/{connection_id}" + }, + "scenario": "Update an existing Action Connection returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/update-an-existing-action-connection-returns-not-found-response.json b/test-runner-data/v2/action-connection/update-an-existing-action-connection-returns-not-found-response.json new file mode 100644 index 0000000000..aef82776c0 --- /dev/null +++ b/test-runner-data/v2/action-connection/update-an-existing-action-connection-returns-not-found-response.json @@ -0,0 +1,58 @@ +{ + "api": "ActionConnection", + "expected_status": 404, + "feature": "Action Connection", + "id": "v2/Action Connection/Update an existing Action Connection returns \"Not Found\" response", + "operation_id": "UpdateActionConnection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateActionConnectionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "123456789123", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + }, + "style": null + } + ], + "path": "/api/v2/actions/connections/{connection_id}" + }, + "scenario": "Update an existing Action Connection returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/action-connection/update-an-existing-action-connection-returns-successfully-updated-action-connection-response.json b/test-runner-data/v2/action-connection/update-an-existing-action-connection-returns-successfully-updated-action-connection-response.json new file mode 100644 index 0000000000..063e5ff3e1 --- /dev/null +++ b/test-runner-data/v2/action-connection/update-an-existing-action-connection-returns-successfully-updated-action-connection-response.json @@ -0,0 +1,58 @@ +{ + "api": "ActionConnection", + "expected_status": 200, + "feature": "Action Connection", + "id": "v2/Action Connection/Update an existing Action Connection returns \"Successfully updated Action Connection\" response", + "operation_id": "UpdateActionConnection", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateActionConnectionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "123456789123", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "cb460d51-3c88-4e87-adac-d47131d0423d" + }, + "style": null + } + ], + "path": "/api/v2/actions/connections/{connection_id}" + }, + "scenario": "Update an existing Action Connection returns \"Successfully updated Action Connection\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/bulk-delete-datastore-items-returns-bad-request-response.json b/test-runner-data/v2/actions-datastores/bulk-delete-datastore-items-returns-bad-request-response.json new file mode 100644 index 0000000000..391ef2f096 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/bulk-delete-datastore-items-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "ActionsDatastores", + "expected_status": 400, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Bulk delete datastore items returns \"Bad Request\" response", + "operation_id": "BulkDeleteDatastoreItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "BulkDeleteAppsDatastoreItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "item_keys": [] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items/bulk" + }, + "scenario": "Bulk delete datastore items returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/bulk-delete-datastore-items-returns-not-found-response.json b/test-runner-data/v2/actions-datastores/bulk-delete-datastore-items-returns-not-found-response.json new file mode 100644 index 0000000000..64a8729e1c --- /dev/null +++ b/test-runner-data/v2/actions-datastores/bulk-delete-datastore-items-returns-not-found-response.json @@ -0,0 +1,52 @@ +{ + "api": "ActionsDatastores", + "expected_status": 404, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Bulk delete datastore items returns \"Not Found\" response", + "operation_id": "BulkDeleteDatastoreItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "BulkDeleteAppsDatastoreItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "item_keys": [ + "nonexistent" + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "c1eb5bb8-726a-4e59-9a61-ccbb26f95329" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items/bulk" + }, + "scenario": "Bulk delete datastore items returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/bulk-delete-datastore-items-returns-ok-response.json b/test-runner-data/v2/actions-datastores/bulk-delete-datastore-items-returns-ok-response.json new file mode 100644 index 0000000000..64e3f2fe52 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/bulk-delete-datastore-items-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Bulk delete datastore items returns \"OK\" response", + "operation_id": "BulkDeleteDatastoreItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "BulkDeleteAppsDatastoreItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "item_keys": [ + "test-key" + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items/bulk" + }, + "scenario": "Bulk delete datastore items returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/bulk-write-datastore-items-returns-bad-request-response.json b/test-runner-data/v2/actions-datastores/bulk-write-datastore-items-returns-bad-request-response.json new file mode 100644 index 0000000000..7303824672 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/bulk-write-datastore-items-returns-bad-request-response.json @@ -0,0 +1,59 @@ +{ + "api": "ActionsDatastores", + "expected_status": 400, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Bulk write datastore items returns \"Bad Request\" response", + "operation_id": "BulkWriteDatastoreItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "BulkPutAppsDatastoreItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "values": [ + { + "id": "cust_3141", + "name": "Johnathan" + }, + { + "badPrimaryKey": "key2", + "name": "Johnathan" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items/bulk" + }, + "scenario": "Bulk write datastore items returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/bulk-write-datastore-items-returns-not-found-response.json b/test-runner-data/v2/actions-datastores/bulk-write-datastore-items-returns-not-found-response.json new file mode 100644 index 0000000000..18ea66d56d --- /dev/null +++ b/test-runner-data/v2/actions-datastores/bulk-write-datastore-items-returns-not-found-response.json @@ -0,0 +1,59 @@ +{ + "api": "ActionsDatastores", + "expected_status": 404, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Bulk write datastore items returns \"Not Found\" response", + "operation_id": "BulkWriteDatastoreItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "BulkPutAppsDatastoreItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "values": [ + { + "id": "cust_3141", + "name": "Johnathan" + }, + { + "id": "cust_3142", + "name": "Mary" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "70b87c26-886f-497a-bd9d-09f53bc9b40c" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items/bulk" + }, + "scenario": "Bulk write datastore items returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/bulk-write-datastore-items-returns-ok-response.json b/test-runner-data/v2/actions-datastores/bulk-write-datastore-items-returns-ok-response.json new file mode 100644 index 0000000000..88e7973eb9 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/bulk-write-datastore-items-returns-ok-response.json @@ -0,0 +1,59 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Bulk write datastore items returns \"OK\" response", + "operation_id": "BulkWriteDatastoreItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "BulkPutAppsDatastoreItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "values": [ + { + "id": "cust_3141", + "name": "Johnathan" + }, + { + "id": "cust_3142", + "name": "Mary" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items/bulk" + }, + "scenario": "Bulk write datastore items returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/create-datastore-returns-bad-request-response.json b/test-runner-data/v2/actions-datastores/create-datastore-returns-bad-request-response.json new file mode 100644 index 0000000000..a41849b4dc --- /dev/null +++ b/test-runner-data/v2/actions-datastores/create-datastore-returns-bad-request-response.json @@ -0,0 +1,34 @@ +{ + "api": "ActionsDatastores", + "expected_status": 400, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Create datastore returns \"Bad Request\" response", + "operation_id": "CreateDatastore", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateAppsDatastoreRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "datastore-name", + "primary_column_name": "0invalid_key" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/actions-datastores" + }, + "scenario": "Create datastore returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/create-datastore-returns-ok-response.json b/test-runner-data/v2/actions-datastores/create-datastore-returns-ok-response.json new file mode 100644 index 0000000000..1d83889f11 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/create-datastore-returns-ok-response.json @@ -0,0 +1,34 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Create datastore returns \"OK\" response", + "operation_id": "CreateDatastore", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateAppsDatastoreRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "datastore-name", + "primary_column_name": "primaryKey" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/actions-datastores" + }, + "scenario": "Create datastore returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/delete-datastore-item-returns-bad-request-response.json b/test-runner-data/v2/actions-datastores/delete-datastore-item-returns-bad-request-response.json new file mode 100644 index 0000000000..cdacbc64c2 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/delete-datastore-item-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "ActionsDatastores", + "expected_status": 400, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Delete datastore item returns \"Bad Request\" response", + "operation_id": "DeleteDatastoreItem", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DeleteAppsDatastoreItemRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "item_key": "primaryKey" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items" + }, + "scenario": "Delete datastore item returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/delete-datastore-item-returns-not-found-response.json b/test-runner-data/v2/actions-datastores/delete-datastore-item-returns-not-found-response.json new file mode 100644 index 0000000000..22490c5037 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/delete-datastore-item-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "ActionsDatastores", + "expected_status": 404, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Delete datastore item returns \"Not Found\" response", + "operation_id": "DeleteDatastoreItem", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DeleteAppsDatastoreItemRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "item_key": "primaryKey" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "70b87c26-886f-497a-bd9d-09f53bc9b40c" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items" + }, + "scenario": "Delete datastore item returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/delete-datastore-item-returns-ok-response.json b/test-runner-data/v2/actions-datastores/delete-datastore-item-returns-ok-response.json new file mode 100644 index 0000000000..8eef2d2198 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/delete-datastore-item-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Delete datastore item returns \"OK\" response", + "operation_id": "DeleteDatastoreItem", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DeleteAppsDatastoreItemRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "item_key": "test-key" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items" + }, + "scenario": "Delete datastore item returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/delete-datastore-returns-bad-request-response.json b/test-runner-data/v2/actions-datastores/delete-datastore-returns-bad-request-response.json new file mode 100644 index 0000000000..6e2fc460a7 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/delete-datastore-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionsDatastores", + "expected_status": 400, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Delete datastore returns \"Bad Request\" response", + "operation_id": "DeleteDatastore", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}" + }, + "scenario": "Delete datastore returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/delete-datastore-returns-ok-response.json b/test-runner-data/v2/actions-datastores/delete-datastore-returns-ok-response.json new file mode 100644 index 0000000000..2771616730 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/delete-datastore-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Delete datastore returns \"OK\" response", + "operation_id": "DeleteDatastore", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}" + }, + "scenario": "Delete datastore returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/get-datastore-returns-bad-request-response.json b/test-runner-data/v2/actions-datastores/get-datastore-returns-bad-request-response.json new file mode 100644 index 0000000000..3c3e0d3b53 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/get-datastore-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionsDatastores", + "expected_status": 400, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Get datastore returns \"Bad Request\" response", + "operation_id": "GetDatastore", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}" + }, + "scenario": "Get datastore returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/get-datastore-returns-not-found-response.json b/test-runner-data/v2/actions-datastores/get-datastore-returns-not-found-response.json new file mode 100644 index 0000000000..47cfd11cfe --- /dev/null +++ b/test-runner-data/v2/actions-datastores/get-datastore-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionsDatastores", + "expected_status": 404, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Get datastore returns \"Not Found\" response", + "operation_id": "GetDatastore", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "5bf53b3f-b230-4b35-ab1a-b39f2633eb22" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}" + }, + "scenario": "Get datastore returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/get-datastore-returns-ok-response.json b/test-runner-data/v2/actions-datastores/get-datastore-returns-ok-response.json new file mode 100644 index 0000000000..30840b7bd4 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/get-datastore-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Get datastore returns \"OK\" response", + "operation_id": "GetDatastore", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}" + }, + "scenario": "Get datastore returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/list-datastore-items-returns-bad-request-response.json b/test-runner-data/v2/actions-datastores/list-datastore-items-returns-bad-request-response.json new file mode 100644 index 0000000000..5562a07f9c --- /dev/null +++ b/test-runner-data/v2/actions-datastores/list-datastore-items-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionsDatastores", + "expected_status": 400, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/List datastore items returns \"Bad Request\" response", + "operation_id": "ListDatastoreItems", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items" + }, + "scenario": "List datastore items returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/list-datastore-items-returns-not-found-response.json b/test-runner-data/v2/actions-datastores/list-datastore-items-returns-not-found-response.json new file mode 100644 index 0000000000..c600b2878d --- /dev/null +++ b/test-runner-data/v2/actions-datastores/list-datastore-items-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionsDatastores", + "expected_status": 404, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/List datastore items returns \"Not Found\" response", + "operation_id": "ListDatastoreItems", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "3cfdd0b8-c490-4969-8d51-69add64a70ea" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items" + }, + "scenario": "List datastore items returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/list-datastore-items-returns-ok-response.json b/test-runner-data/v2/actions-datastores/list-datastore-items-returns-ok-response.json new file mode 100644 index 0000000000..e09913fee1 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/list-datastore-items-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/List datastore items returns \"OK\" response", + "operation_id": "ListDatastoreItems", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items" + }, + "scenario": "List datastore items returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/list-datastores-returns-ok-response.json b/test-runner-data/v2/actions-datastores/list-datastores-returns-ok-response.json new file mode 100644 index 0000000000..97d297e1be --- /dev/null +++ b/test-runner-data/v2/actions-datastores/list-datastores-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/List datastores returns \"OK\" response", + "operation_id": "ListDatastores", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/actions-datastores" + }, + "scenario": "List datastores returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/update-datastore-item-returns-bad-request-response.json b/test-runner-data/v2/actions-datastores/update-datastore-item-returns-bad-request-response.json new file mode 100644 index 0000000000..891737d64e --- /dev/null +++ b/test-runner-data/v2/actions-datastores/update-datastore-item-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "ActionsDatastores", + "expected_status": 400, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Update datastore item returns \"Bad Request\" response", + "operation_id": "UpdateDatastoreItem", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppsDatastoreItemRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "item_changes": {}, + "item_key": "" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items" + }, + "scenario": "Update datastore item returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/update-datastore-item-returns-not-found-response.json b/test-runner-data/v2/actions-datastores/update-datastore-item-returns-not-found-response.json new file mode 100644 index 0000000000..5b1d35e966 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/update-datastore-item-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "ActionsDatastores", + "expected_status": 404, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Update datastore item returns \"Not Found\" response", + "operation_id": "UpdateDatastoreItem", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppsDatastoreItemRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "item_changes": {}, + "item_key": "itemKey" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "3cfdd0b8-c490-4969-8d51-69add64a70ea" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items" + }, + "scenario": "Update datastore item returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/update-datastore-item-returns-ok-response.json b/test-runner-data/v2/actions-datastores/update-datastore-item-returns-ok-response.json new file mode 100644 index 0000000000..cc3be06244 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/update-datastore-item-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Update datastore item returns \"OK\" response", + "operation_id": "UpdateDatastoreItem", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppsDatastoreItemRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "item_changes": {}, + "item_key": "test-key" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}/items" + }, + "scenario": "Update datastore item returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/update-datastore-returns-bad-request-response.json b/test-runner-data/v2/actions-datastores/update-datastore-returns-bad-request-response.json new file mode 100644 index 0000000000..a14c87e654 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/update-datastore-returns-bad-request-response.json @@ -0,0 +1,49 @@ +{ + "api": "ActionsDatastores", + "expected_status": 400, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Update datastore returns \"Bad Request\" response", + "operation_id": "UpdateDatastore", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppsDatastoreRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": {}, + "id": "invalid-uuid", + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}" + }, + "scenario": "Update datastore returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/update-datastore-returns-not-found-response.json b/test-runner-data/v2/actions-datastores/update-datastore-returns-not-found-response.json new file mode 100644 index 0000000000..effbe88318 --- /dev/null +++ b/test-runner-data/v2/actions-datastores/update-datastore-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "ActionsDatastores", + "expected_status": 404, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Update datastore returns \"Not Found\" response", + "operation_id": "UpdateDatastore", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppsDatastoreRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "updated name" + }, + "id": "c1eb5bb8-726a-4e59-9a61-ccbb26f95329", + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "c1eb5bb8-726a-4e59-9a61-ccbb26f95329" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}" + }, + "scenario": "Update datastore returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/actions-datastores/update-datastore-returns-ok-response.json b/test-runner-data/v2/actions-datastores/update-datastore-returns-ok-response.json new file mode 100644 index 0000000000..b6b06d275f --- /dev/null +++ b/test-runner-data/v2/actions-datastores/update-datastore-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "ActionsDatastores", + "expected_status": 200, + "feature": "Actions Datastores", + "id": "v2/Actions Datastores/Update datastore returns \"OK\" response", + "operation_id": "UpdateDatastore", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppsDatastoreRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "updated name" + }, + "id": "{{datastore.data.id}}", + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "datastore_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "datastore.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/actions-datastores/{datastore_id}" + }, + "scenario": "Update datastore returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/create-aws-on-demand-task-returns-aws-on-demand-task-created-successfully-response.json b/test-runner-data/v2/agentless-scanning/create-aws-on-demand-task-returns-aws-on-demand-task-created-successfully-response.json new file mode 100644 index 0000000000..aa6789e027 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/create-aws-on-demand-task-returns-aws-on-demand-task-created-successfully-response.json @@ -0,0 +1,33 @@ +{ + "api": "AgentlessScanning", + "expected_status": 201, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Create AWS on demand task returns \"AWS on demand task created successfully.\" response", + "operation_id": "CreateAwsOnDemandTask", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsOnDemandCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "arn": "arn:aws:lambda:us-west-2:123456789012:function:my-function" + }, + "type": "aws_resource" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/ondemand/aws" + }, + "scenario": "Create AWS on demand task returns \"AWS on demand task created successfully.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/create-aws-on-demand-task-returns-bad-request-response.json b/test-runner-data/v2/agentless-scanning/create-aws-on-demand-task-returns-bad-request-response.json new file mode 100644 index 0000000000..c75c4a1c69 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/create-aws-on-demand-task-returns-bad-request-response.json @@ -0,0 +1,33 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Create AWS on demand task returns \"Bad Request\" response", + "operation_id": "CreateAwsOnDemandTask", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsOnDemandCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "arn": "invalid-arn" + }, + "type": "aws_resource" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/ondemand/aws" + }, + "scenario": "Create AWS on demand task returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/create-aws-scan-options-returns-bad-request-response.json b/test-runner-data/v2/agentless-scanning/create-aws-scan-options-returns-bad-request-response.json new file mode 100644 index 0000000000..24b4daa8a5 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/create-aws-scan-options-returns-bad-request-response.json @@ -0,0 +1,38 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Create AWS scan options returns \"Bad Request\" response", + "operation_id": "CreateAwsScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsScanOptionsCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compliance_host": true, + "lambda": true, + "sensitive_data": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "123", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/accounts/aws" + }, + "scenario": "Create AWS scan options returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/create-aws-scan-options-returns-conflict-response.json b/test-runner-data/v2/agentless-scanning/create-aws-scan-options-returns-conflict-response.json new file mode 100644 index 0000000000..73bb1e0953 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/create-aws-scan-options-returns-conflict-response.json @@ -0,0 +1,38 @@ +{ + "api": "AgentlessScanning", + "expected_status": 409, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Create AWS scan options returns \"Conflict\" response", + "operation_id": "CreateAwsScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsScanOptionsCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compliance_host": true, + "lambda": false, + "sensitive_data": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000002", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/accounts/aws" + }, + "scenario": "Create AWS scan options returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/create-azure-scan-options-returns-created-response.json b/test-runner-data/v2/agentless-scanning/create-azure-scan-options-returns-created-response.json new file mode 100644 index 0000000000..9aaeadea8d --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/create-azure-scan-options-returns-created-response.json @@ -0,0 +1,36 @@ +{ + "api": "AgentlessScanning", + "expected_status": 201, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Create Azure scan options returns \"Created\" response", + "operation_id": "CreateAzureScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AzureScanOptions", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "function": true, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "12345678-90ab-cdef-1234-567890abcdef", + "type": "azure_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/accounts/azure" + }, + "scenario": "Create Azure scan options returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/create-gcp-scan-options-returns-agentless-scan-options-enabled-successfully-response.json b/test-runner-data/v2/agentless-scanning/create-gcp-scan-options-returns-agentless-scan-options-enabled-successfully-response.json new file mode 100644 index 0000000000..e2401bfcfd --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/create-gcp-scan-options-returns-agentless-scan-options-enabled-successfully-response.json @@ -0,0 +1,36 @@ +{ + "api": "AgentlessScanning", + "expected_status": 201, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Create GCP scan options returns \"Agentless scan options enabled successfully.\" response", + "operation_id": "CreateGcpScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GcpScanOptions", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "cloud_function": true, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "new-project", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/accounts/gcp" + }, + "scenario": "Create GCP scan options returns \"Agentless scan options enabled successfully.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/create-gcp-scan-options-returns-bad-request-response.json b/test-runner-data/v2/agentless-scanning/create-gcp-scan-options-returns-bad-request-response.json new file mode 100644 index 0000000000..fdadcb79bf --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/create-gcp-scan-options-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Create GCP scan options returns \"Bad Request\" response", + "operation_id": "CreateGcpScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GcpScanOptions", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "no", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/accounts/gcp" + }, + "scenario": "Create GCP scan options returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/create-gcp-scan-options-returns-conflict-response.json b/test-runner-data/v2/agentless-scanning/create-gcp-scan-options-returns-conflict-response.json new file mode 100644 index 0000000000..d9a7436504 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/create-gcp-scan-options-returns-conflict-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 409, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Create GCP scan options returns \"Conflict\" response", + "operation_id": "CreateGcpScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GcpScanOptions", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "api-spec-test", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/accounts/gcp" + }, + "scenario": "Create GCP scan options returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/delete-aws-scan-options-returns-bad-request-response.json b/test-runner-data/v2/agentless-scanning/delete-aws-scan-options-returns-bad-request-response.json new file mode 100644 index 0000000000..deae0b020e --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/delete-aws-scan-options-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Delete AWS scan options returns \"Bad Request\" response", + "operation_id": "DeleteAwsScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "incorrectId" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/aws/{account_id}" + }, + "scenario": "Delete AWS scan options returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/delete-aws-scan-options-returns-not-found-response.json b/test-runner-data/v2/agentless-scanning/delete-aws-scan-options-returns-not-found-response.json new file mode 100644 index 0000000000..e05b305c2e --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/delete-aws-scan-options-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 404, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Delete AWS scan options returns \"Not Found\" response", + "operation_id": "DeleteAwsScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000000000005" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/aws/{account_id}" + }, + "scenario": "Delete AWS scan options returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/delete-gcp-scan-options-returns-bad-request-response.json b/test-runner-data/v2/agentless-scanning/delete-gcp-scan-options-returns-bad-request-response.json new file mode 100644 index 0000000000..abb7e3c3d7 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/delete-gcp-scan-options-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Delete GCP scan options returns \"Bad Request\" response", + "operation_id": "DeleteGcpScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "no" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}" + }, + "scenario": "Delete GCP scan options returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/delete-gcp-scan-options-returns-not-found-response.json b/test-runner-data/v2/agentless-scanning/delete-gcp-scan-options-returns-not-found-response.json new file mode 100644 index 0000000000..4ae8166ede --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/delete-gcp-scan-options-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 404, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Delete GCP scan options returns \"Not Found\" response", + "operation_id": "DeleteGcpScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "nonexistent-project-id" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}" + }, + "scenario": "Delete GCP scan options returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-aws-on-demand-task-returns-bad-request-response.json b/test-runner-data/v2/agentless-scanning/get-aws-on-demand-task-returns-bad-request-response.json new file mode 100644 index 0000000000..954eff6374 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-aws-on-demand-task-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get AWS on demand task returns \"Bad Request\" response", + "operation_id": "GetAwsOnDemandTask", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/ondemand/aws/{task_id}" + }, + "scenario": "Get AWS on demand task returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-aws-on-demand-task-returns-not-found-response.json b/test-runner-data/v2/agentless-scanning/get-aws-on-demand-task-returns-not-found-response.json new file mode 100644 index 0000000000..acdc4cf4f7 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-aws-on-demand-task-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 404, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get AWS on demand task returns \"Not Found\" response", + "operation_id": "GetAwsOnDemandTask", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-824a-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/ondemand/aws/{task_id}" + }, + "scenario": "Get AWS on demand task returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-aws-on-demand-task-returns-ok-response.json b/test-runner-data/v2/agentless-scanning/get-aws-on-demand-task-returns-ok-response.json new file mode 100644 index 0000000000..32a875e465 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-aws-on-demand-task-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 200, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get AWS on demand task returns \"OK.\" response", + "operation_id": "GetAwsOnDemandTask", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "task_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "63d6b4f5-e5d0-4d90-824a-9580f05f026a" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/ondemand/aws/{task_id}" + }, + "scenario": "Get AWS on demand task returns \"OK.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-aws-scan-options-returns-bad-request-response.json b/test-runner-data/v2/agentless-scanning/get-aws-scan-options-returns-bad-request-response.json new file mode 100644 index 0000000000..976cf7527e --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-aws-scan-options-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get AWS scan options returns \"Bad Request\" response", + "operation_id": "GetAwsScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-an-account-id" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/aws/{account_id}" + }, + "scenario": "Get AWS scan options returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-aws-scan-options-returns-not-found-response.json b/test-runner-data/v2/agentless-scanning/get-aws-scan-options-returns-not-found-response.json new file mode 100644 index 0000000000..83b2f3a001 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-aws-scan-options-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 404, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get AWS scan options returns \"Not Found\" response", + "operation_id": "GetAwsScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "404404404404" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/aws/{account_id}" + }, + "scenario": "Get AWS scan options returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-aws-scan-options-returns-ok-response.json b/test-runner-data/v2/agentless-scanning/get-aws-scan-options-returns-ok-response.json new file mode 100644 index 0000000000..28f5c580c4 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-aws-scan-options-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 200, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get AWS scan options returns \"OK\" response", + "operation_id": "GetAwsScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ aws_scan_options.id }}" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/aws/{account_id}" + }, + "scenario": "Get AWS scan options returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-azure-scan-options-returns-not-found-response.json b/test-runner-data/v2/agentless-scanning/get-azure-scan-options-returns-not-found-response.json new file mode 100644 index 0000000000..955a725bdf --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-azure-scan-options-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 404, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get Azure scan options returns \"Not Found\" response", + "operation_id": "GetAzureScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "subscription_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/azure/{subscription_id}" + }, + "scenario": "Get Azure scan options returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-gcp-scan-options-returns-bad-request-response.json b/test-runner-data/v2/agentless-scanning/get-gcp-scan-options-returns-bad-request-response.json new file mode 100644 index 0000000000..47ec6721ad --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-gcp-scan-options-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get GCP scan options returns \"Bad Request\" response", + "operation_id": "GetGcpScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "no" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}" + }, + "scenario": "Get GCP scan options returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-gcp-scan-options-returns-not-found-response.json b/test-runner-data/v2/agentless-scanning/get-gcp-scan-options-returns-not-found-response.json new file mode 100644 index 0000000000..f8952f20b0 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-gcp-scan-options-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 404, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get GCP scan options returns \"Not Found\" response", + "operation_id": "GetGcpScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "nonexistent-project-id" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}" + }, + "scenario": "Get GCP scan options returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/get-gcp-scan-options-returns-ok-response.json b/test-runner-data/v2/agentless-scanning/get-gcp-scan-options-returns-ok-response.json new file mode 100644 index 0000000000..20b8fa2b7d --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/get-gcp-scan-options-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AgentlessScanning", + "expected_status": 200, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Get GCP scan options returns \"OK\" response", + "operation_id": "GetGcpScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "api-spec-test" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}" + }, + "scenario": "Get GCP scan options returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/list-aws-on-demand-tasks-returns-ok-response.json b/test-runner-data/v2/agentless-scanning/list-aws-on-demand-tasks-returns-ok-response.json new file mode 100644 index 0000000000..05907aa2ef --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/list-aws-on-demand-tasks-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "AgentlessScanning", + "expected_status": 200, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/List AWS on demand tasks returns \"OK\" response", + "operation_id": "ListAwsOnDemandTasks", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/ondemand/aws" + }, + "scenario": "List AWS on demand tasks returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/list-aws-scan-options-returns-ok-response.json b/test-runner-data/v2/agentless-scanning/list-aws-scan-options-returns-ok-response.json new file mode 100644 index 0000000000..72c51af1d5 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/list-aws-scan-options-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "AgentlessScanning", + "expected_status": 200, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/List AWS scan options returns \"OK\" response", + "operation_id": "ListAwsScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/accounts/aws" + }, + "scenario": "List AWS scan options returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/list-azure-scan-options-returns-ok-response.json b/test-runner-data/v2/agentless-scanning/list-azure-scan-options-returns-ok-response.json new file mode 100644 index 0000000000..f652415027 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/list-azure-scan-options-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "AgentlessScanning", + "expected_status": 200, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/List Azure scan options returns \"OK\" response", + "operation_id": "ListAzureScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/accounts/azure" + }, + "scenario": "List Azure scan options returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/list-gcp-scan-options-returns-ok-response.json b/test-runner-data/v2/agentless-scanning/list-gcp-scan-options-returns-ok-response.json new file mode 100644 index 0000000000..a948dfaaec --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/list-gcp-scan-options-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "AgentlessScanning", + "expected_status": 200, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/List GCP scan options returns \"OK\" response", + "operation_id": "ListGcpScanOptions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/agentless_scanning/accounts/gcp" + }, + "scenario": "List GCP scan options returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/update-aws-scan-options-returns-bad-request-response-2.json b/test-runner-data/v2/agentless-scanning/update-aws-scan-options-returns-bad-request-response-2.json new file mode 100644 index 0000000000..04765515ca --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/update-aws-scan-options-returns-bad-request-response-2.json @@ -0,0 +1,52 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Update AWS scan options returns \"Bad Request\" response 2", + "operation_id": "UpdateAwsScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsScanOptionsUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000005", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000000000003" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/aws/{account_id}" + }, + "scenario": "Update AWS scan options returns \"Bad Request\" response 2", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/update-aws-scan-options-returns-no-content-response.json b/test-runner-data/v2/agentless-scanning/update-aws-scan-options-returns-no-content-response.json new file mode 100644 index 0000000000..57fbbcd9a6 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/update-aws-scan-options-returns-no-content-response.json @@ -0,0 +1,53 @@ +{ + "api": "AgentlessScanning", + "expected_status": 204, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Update AWS scan options returns \"No Content\" response", + "operation_id": "UpdateAwsScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsScanOptionsUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "lambda": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000002", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000000000002" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/aws/{account_id}" + }, + "scenario": "Update AWS scan options returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/update-aws-scan-options-returns-not-found-response.json b/test-runner-data/v2/agentless-scanning/update-aws-scan-options-returns-not-found-response.json new file mode 100644 index 0000000000..faef4571b9 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/update-aws-scan-options-returns-not-found-response.json @@ -0,0 +1,52 @@ +{ + "api": "AgentlessScanning", + "expected_status": 404, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Update AWS scan options returns \"Not Found\" response", + "operation_id": "UpdateAwsScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsScanOptionsUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000005", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000000000005" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/aws/{account_id}" + }, + "scenario": "Update AWS scan options returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/update-gcp-scan-options-returns-bad-request-response.json b/test-runner-data/v2/agentless-scanning/update-gcp-scan-options-returns-bad-request-response.json new file mode 100644 index 0000000000..4b8e8b48c0 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/update-gcp-scan-options-returns-bad-request-response.json @@ -0,0 +1,48 @@ +{ + "api": "AgentlessScanning", + "expected_status": 400, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Update GCP scan options returns \"Bad Request\" response", + "operation_id": "UpdateGcpScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GcpScanOptionsInputUpdate", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "different-project-id", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "no" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}" + }, + "scenario": "Update GCP scan options returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/update-gcp-scan-options-returns-not-found-response.json b/test-runner-data/v2/agentless-scanning/update-gcp-scan-options-returns-not-found-response.json new file mode 100644 index 0000000000..4b0a10bb16 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/update-gcp-scan-options-returns-not-found-response.json @@ -0,0 +1,52 @@ +{ + "api": "AgentlessScanning", + "expected_status": 404, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Update GCP scan options returns \"Not Found\" response", + "operation_id": "UpdateGcpScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GcpScanOptionsInputUpdate", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "nonexistent-project-id", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "nonexistent-project-id" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}" + }, + "scenario": "Update GCP scan options returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/agentless-scanning/update-gcp-scan-options-returns-ok-response.json b/test-runner-data/v2/agentless-scanning/update-gcp-scan-options-returns-ok-response.json new file mode 100644 index 0000000000..77d51f1b27 --- /dev/null +++ b/test-runner-data/v2/agentless-scanning/update-gcp-scan-options-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "AgentlessScanning", + "expected_status": 200, + "feature": "Agentless Scanning", + "id": "v2/Agentless Scanning/Update GCP scan options returns \"OK\" response", + "operation_id": "UpdateGcpScanOptions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GcpScanOptionsInputUpdate", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "cloud_function": true, + "vuln_containers_os": false + }, + "id": "api-spec-test", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "api-spec-test" + }, + "style": null + } + ], + "path": "/api/v2/agentless_scanning/accounts/gcp/{project_id}" + }, + "scenario": "Update GCP scan options returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/annotations/create-an-annotation-returns-ok-response.json b/test-runner-data/v2/annotations/create-an-annotation-returns-ok-response.json new file mode 100644 index 0000000000..be55695c50 --- /dev/null +++ b/test-runner-data/v2/annotations/create-an-annotation-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "Annotations", + "expected_status": 200, + "feature": "Annotations", + "id": "v2/Annotations/Create an annotation returns \"OK\" response", + "operation_id": "CreateAnnotation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AnnotationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "color": "blue", + "description": "Deployed v2.3.1 to production.", + "page_id": "dashboard:abc-def-xyz", + "start_time": 1704067200000, + "type": "pointInTime", + "widget_ids": [ + "1234567890" + ] + }, + "type": "annotation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/annotation" + }, + "scenario": "Create an annotation returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/annotations/delete-an-annotation-returns-no-content-response.json b/test-runner-data/v2/annotations/delete-an-annotation-returns-no-content-response.json new file mode 100644 index 0000000000..ee8768e8ec --- /dev/null +++ b/test-runner-data/v2/annotations/delete-an-annotation-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "Annotations", + "expected_status": 204, + "feature": "Annotations", + "id": "v2/Annotations/Delete an annotation returns \"No Content\" response", + "operation_id": "DeleteAnnotation", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "annotation.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/annotation/{annotation_id}" + }, + "scenario": "Delete an annotation returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/annotations/get-annotations-for-a-page-returns-ok-response.json b/test-runner-data/v2/annotations/get-annotations-for-a-page-returns-ok-response.json new file mode 100644 index 0000000000..92cbc2803e --- /dev/null +++ b/test-runner-data/v2/annotations/get-annotations-for-a-page-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "Annotations", + "expected_status": 200, + "feature": "Annotations", + "id": "v2/Annotations/Get annotations for a page returns \"OK\" response", + "operation_id": "GetPageAnnotations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "annotation.data.attributes.page_id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "start_time", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1704067200000 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_time", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1704153600000 + }, + "style": null + } + ], + "path": "/api/v2/annotation/page/{page_id}" + }, + "scenario": "Get annotations for a page returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/annotations/list-annotations-returns-ok-response.json b/test-runner-data/v2/annotations/list-annotations-returns-ok-response.json new file mode 100644 index 0000000000..f8ae41ae17 --- /dev/null +++ b/test-runner-data/v2/annotations/list-annotations-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "Annotations", + "expected_status": 200, + "feature": "Annotations", + "id": "v2/Annotations/List annotations returns \"OK\" response", + "operation_id": "ListAnnotations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "annotation.data.attributes.page_id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "start_time", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1704067200000 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_time", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1704153600000 + }, + "style": null + } + ], + "path": "/api/v2/annotation" + }, + "scenario": "List annotations returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/annotations/update-an-annotation-returns-ok-response.json b/test-runner-data/v2/annotations/update-an-annotation-returns-ok-response.json new file mode 100644 index 0000000000..fc74092086 --- /dev/null +++ b/test-runner-data/v2/annotations/update-an-annotation-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "Annotations", + "expected_status": 200, + "feature": "Annotations", + "id": "v2/Annotations/Update an annotation returns \"OK\" response", + "operation_id": "UpdateAnnotation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AnnotationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "color": "green", + "description": "Updated annotation.", + "page_id": "dashboard:abc-def-xyz", + "start_time": 1704067200000, + "type": "pointInTime" + }, + "type": "annotation" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "annotation_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "annotation.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/annotation/{annotation_id}" + }, + "scenario": "Update an annotation returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/create-a-default-retention-filter-returns-bad-request-response.json b/test-runner-data/v2/apm-retention-filters/create-a-default-retention-filter-returns-bad-request-response.json new file mode 100644 index 0000000000..055bf012fa --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/create-a-default-retention-filter-returns-bad-request-response.json @@ -0,0 +1,39 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 400, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Create a default retention filter returns \"Bad Request\" response", + "operation_id": "CreateApmRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RetentionFilterCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "filter_type": "spans-errors-sampling-processor", + "name": "my retention filter", + "rate": 1.0 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/apm/config/retention-filters" + }, + "scenario": "Create a default retention filter returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/create-a-retention-filter-returns-bad-request-response.json b/test-runner-data/v2/apm-retention-filters/create-a-retention-filter-returns-bad-request-response.json new file mode 100644 index 0000000000..4ade7e6ffa --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/create-a-retention-filter-returns-bad-request-response.json @@ -0,0 +1,39 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 400, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Create a retention filter returns \"Bad Request\" response", + "operation_id": "CreateApmRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RetentionFilterCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "filter_type": "spans-sampling-processor", + "name": "my retention filter", + "rate": 2.0 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/apm/config/retention-filters" + }, + "scenario": "Create a retention filter returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/create-a-retention-filter-returns-ok-response.json b/test-runner-data/v2/apm-retention-filters/create-a-retention-filter-returns-ok-response.json new file mode 100644 index 0000000000..ac7887a7d0 --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/create-a-retention-filter-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 200, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Create a retention filter returns \"OK\" response", + "operation_id": "CreateApmRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RetentionFilterCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "filter_type": "spans-sampling-processor", + "name": "my retention filter", + "rate": 1.0 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/apm/config/retention-filters" + }, + "scenario": "Create a retention filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/create-a-retention-filter-with-trace-rate-returns-ok-response.json b/test-runner-data/v2/apm-retention-filters/create-a-retention-filter-with-trace-rate-returns-ok-response.json new file mode 100644 index 0000000000..6915cd482b --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/create-a-retention-filter-with-trace-rate-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 200, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Create a retention filter with trace rate returns \"OK\" response", + "operation_id": "CreateApmRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RetentionFilterCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "filter_type": "spans-sampling-processor", + "name": "my retention filter", + "rate": 1.0, + "trace_rate": 1.0 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/apm/config/retention-filters" + }, + "scenario": "Create a retention filter with trace rate returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/delete-a-retention-filter-returns-not-found-response.json b/test-runner-data/v2/apm-retention-filters/delete-a-retention-filter-returns-not-found-response.json new file mode 100644 index 0000000000..09c0610b58 --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/delete-a-retention-filter-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 404, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Delete a retention filter returns \"Not Found\" response", + "operation_id": "DeleteApmRetentionFilter", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not_found" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/retention-filters/{filter_id}" + }, + "scenario": "Delete a retention filter returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/delete-a-retention-filter-returns-ok-response.json b/test-runner-data/v2/apm-retention-filters/delete-a-retention-filter-returns-ok-response.json new file mode 100644 index 0000000000..e76068b386 --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/delete-a-retention-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 200, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Delete a retention filter returns \"OK\" response", + "operation_id": "DeleteApmRetentionFilter", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "retention_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/retention-filters/{filter_id}" + }, + "scenario": "Delete a retention filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/get-a-given-apm-retention-filter-returns-not-found-response.json b/test-runner-data/v2/apm-retention-filters/get-a-given-apm-retention-filter-returns-not-found-response.json new file mode 100644 index 0000000000..529383bb66 --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/get-a-given-apm-retention-filter-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 404, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Get a given APM retention filter returns \"Not Found\" response", + "operation_id": "GetApmRetentionFilter", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/retention-filters/{filter_id}" + }, + "scenario": "Get a given APM retention filter returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/get-a-given-apm-retention-filter-returns-ok-response.json b/test-runner-data/v2/apm-retention-filters/get-a-given-apm-retention-filter-returns-ok-response.json new file mode 100644 index 0000000000..6e752021d7 --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/get-a-given-apm-retention-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 200, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Get a given APM retention filter returns \"OK\" response", + "operation_id": "GetApmRetentionFilter", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "retention_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/retention-filters/{filter_id}" + }, + "scenario": "Get a given APM retention filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/list-all-apm-retention-filters-returns-ok-response.json b/test-runner-data/v2/apm-retention-filters/list-all-apm-retention-filters-returns-ok-response.json new file mode 100644 index 0000000000..c83a5c2199 --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/list-all-apm-retention-filters-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 200, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/List all APM retention filters returns \"OK\" response", + "operation_id": "ListApmRetentionFilters", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/apm/config/retention-filters" + }, + "scenario": "List all APM retention filters returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/re-order-retention-filters-returns-ok-response.json b/test-runner-data/v2/apm-retention-filters/re-order-retention-filters-returns-ok-response.json new file mode 100644 index 0000000000..c610113b92 --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/re-order-retention-filters-returns-ok-response.json @@ -0,0 +1,37 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 200, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Re-order retention filters returns \"OK\" response", + "operation_id": "ReorderApmRetentionFilters", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ReorderRetentionFiltersRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "jdZrilSJQLqzb6Cu7aub9Q", + "type": "apm_retention_filter" + }, + { + "id": "7RBOb7dLSYWI01yc3pIH8w", + "type": "apm_retention_filter" + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [], + "path": "/api/v2/apm/config/retention-filters-execution-order" + }, + "scenario": "Re-order retention filters returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-returns-bad-request-response.json b/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-returns-bad-request-response.json new file mode 100644 index 0000000000..ec1a0c1c71 --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-returns-bad-request-response.json @@ -0,0 +1,57 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 400, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Update a retention filter returns \"Bad Request\" response", + "operation_id": "UpdateApmRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RetentionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 1.9 + }, + "id": "test-id", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "retention_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/retention-filters/{filter_id}" + }, + "scenario": "Update a retention filter returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-returns-not-found-response.json b/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-returns-not-found-response.json new file mode 100644 index 0000000000..01d10afe8c --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-returns-not-found-response.json @@ -0,0 +1,57 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 404, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Update a retention filter returns \"Not Found\" response", + "operation_id": "UpdateApmRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RetentionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 0.9 + }, + "id": "not_found", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not_found" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/retention-filters/{filter_id}" + }, + "scenario": "Update a retention filter returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-returns-ok-response.json b/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-returns-ok-response.json new file mode 100644 index 0000000000..f3fe8dc85d --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-returns-ok-response.json @@ -0,0 +1,57 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 200, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Update a retention filter returns \"OK\" response", + "operation_id": "UpdateApmRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RetentionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 0.9 + }, + "id": "test-id", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "retention_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/retention-filters/{filter_id}" + }, + "scenario": "Update a retention filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-with-trace-rate-returns-ok-response.json b/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-with-trace-rate-returns-ok-response.json new file mode 100644 index 0000000000..0f671e37fd --- /dev/null +++ b/test-runner-data/v2/apm-retention-filters/update-a-retention-filter-with-trace-rate-returns-ok-response.json @@ -0,0 +1,58 @@ +{ + "api": "APMRetentionFilters", + "expected_status": 200, + "feature": "APM Retention Filters", + "id": "v2/APM Retention Filters/Update a retention filter with trace rate returns \"OK\" response", + "operation_id": "UpdateApmRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RetentionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 0.9, + "trace_rate": 1.0 + }, + "id": "test-id", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "retention_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/retention-filters/{filter_id}" + }, + "scenario": "Update a retention filter with trace rate returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/create-app-returns-bad-request-response.json b/test-runner-data/v2/app-builder/create-app-returns-bad-request-response.json new file mode 100644 index 0000000000..dd77faa4f1 --- /dev/null +++ b/test-runner-data/v2/app-builder/create-app-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 400, + "feature": "App Builder", + "id": "v2/App Builder/Create App returns \"Bad Request\" response", + "operation_id": "CreateApp", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateAppRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "This is a bad example app", + "queries": [], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/app-builder/apps" + }, + "scenario": "Create App returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/create-app-returns-created-response.json b/test-runner-data/v2/app-builder/create-app-returns-created-response.json new file mode 100644 index 0000000000..7c014bc9cc --- /dev/null +++ b/test-runner-data/v2/app-builder/create-app-returns-created-response.json @@ -0,0 +1,295 @@ +{ + "api": "AppBuilder", + "expected_status": 201, + "feature": "App Builder", + "id": "v2/App Builder/Create App returns \"Created\" response", + "operation_id": "CreateApp", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateAppRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/app-builder/apps" + }, + "scenario": "Create App returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/create-publish-request-returns-not-found-response.json b/test-runner-data/v2/app-builder/create-publish-request-returns-not-found-response.json new file mode 100644 index 0000000000..9a326c219a --- /dev/null +++ b/test-runner-data/v2/app-builder/create-publish-request-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Create Publish Request returns \"Not Found\" response", + "operation_id": "CreatePublishRequest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreatePublishRequestRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Adds new dashboard widgets and a few bug fixes.", + "title": "Release v1.2 to production" + }, + "type": "publishRequest" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/publish-request" + }, + "scenario": "Create Publish Request returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/delete-app-returns-not-found-response.json b/test-runner-data/v2/app-builder/delete-app-returns-not-found-response.json new file mode 100644 index 0000000000..7b9dfe95f9 --- /dev/null +++ b/test-runner-data/v2/app-builder/delete-app-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Delete App returns \"Not Found\" response", + "operation_id": "DeleteApp", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}" + }, + "scenario": "Delete App returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/delete-app-returns-ok-response.json b/test-runner-data/v2/app-builder/delete-app-returns-ok-response.json new file mode 100644 index 0000000000..525fb875c4 --- /dev/null +++ b/test-runner-data/v2/app-builder/delete-app-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/Delete App returns \"OK\" response", + "operation_id": "DeleteApp", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}" + }, + "scenario": "Delete App returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/delete-multiple-apps-returns-not-found-response.json b/test-runner-data/v2/app-builder/delete-multiple-apps-returns-not-found-response.json new file mode 100644 index 0000000000..4f312c708b --- /dev/null +++ b/test-runner-data/v2/app-builder/delete-multiple-apps-returns-not-found-response.json @@ -0,0 +1,41 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Delete Multiple Apps returns \"Not Found\" response", + "operation_id": "DeleteApps", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DeleteAppsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "aea2ed17-b45f-40d0-ba59-c86b7972c901", + "type": "appDefinitions" + }, + { + "id": "f69bb8be-6168-4fe7-a30d-370256b6504a", + "type": "appDefinitions" + }, + { + "id": "ab1ed73e-13ad-4426-b0df-a0ff8876a088", + "type": "appDefinitions" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/app-builder/apps" + }, + "scenario": "Delete Multiple Apps returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/delete-multiple-apps-returns-ok-response.json b/test-runner-data/v2/app-builder/delete-multiple-apps-returns-ok-response.json new file mode 100644 index 0000000000..49b4b543e7 --- /dev/null +++ b/test-runner-data/v2/app-builder/delete-multiple-apps-returns-ok-response.json @@ -0,0 +1,33 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/Delete Multiple Apps returns \"OK\" response", + "operation_id": "DeleteApps", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DeleteAppsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "{{ app.data.id }}", + "type": "appDefinitions" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/app-builder/apps" + }, + "scenario": "Delete Multiple Apps returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/get-app-returns-not-found-response.json b/test-runner-data/v2/app-builder/get-app-returns-not-found-response.json new file mode 100644 index 0000000000..a0768a277e --- /dev/null +++ b/test-runner-data/v2/app-builder/get-app-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Get App returns \"Not Found\" response", + "operation_id": "GetApp", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}" + }, + "scenario": "Get App returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/get-app-returns-ok-response.json b/test-runner-data/v2/app-builder/get-app-returns-ok-response.json new file mode 100644 index 0000000000..3486575ae5 --- /dev/null +++ b/test-runner-data/v2/app-builder/get-app-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/Get App returns \"OK\" response", + "operation_id": "GetApp", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}" + }, + "scenario": "Get App returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/get-blueprint-returns-not-found-response.json b/test-runner-data/v2/app-builder/get-blueprint-returns-not-found-response.json new file mode 100644 index 0000000000..4a25f2f081 --- /dev/null +++ b/test-runner-data/v2/app-builder/get-blueprint-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Get Blueprint returns \"Not Found\" response", + "operation_id": "GetBlueprint", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "blueprint_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/blueprint/{blueprint_id}" + }, + "scenario": "Get Blueprint returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/get-blueprints-by-integration-id-returns-ok-response.json b/test-runner-data/v2/app-builder/get-blueprints-by-integration-id-returns-ok-response.json new file mode 100644 index 0000000000..83500d6a83 --- /dev/null +++ b/test-runner-data/v2/app-builder/get-blueprints-by-integration-id-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/Get Blueprints by Integration ID returns \"OK\" response", + "operation_id": "GetBlueprintsByIntegrationId", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "integration_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aws" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/blueprints/integration-id/{integration_id}" + }, + "scenario": "Get Blueprints by Integration ID returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/get-blueprints-by-slugs-returns-ok-response.json b/test-runner-data/v2/app-builder/get-blueprints-by-slugs-returns-ok-response.json new file mode 100644 index 0000000000..1750c1c9b8 --- /dev/null +++ b/test-runner-data/v2/app-builder/get-blueprints-by-slugs-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/Get Blueprints by Slugs returns \"OK\" response", + "operation_id": "GetBlueprintsBySlugs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "slugs", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aws-service-manager" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/blueprints/slugs/{slugs}" + }, + "scenario": "Get Blueprints by Slugs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/list-app-versions-returns-not-found-response.json b/test-runner-data/v2/app-builder/list-app-versions-returns-not-found-response.json new file mode 100644 index 0000000000..68a22bc334 --- /dev/null +++ b/test-runner-data/v2/app-builder/list-app-versions-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/List App Versions returns \"Not Found\" response", + "operation_id": "ListAppVersions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/versions" + }, + "scenario": "List App Versions returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/list-app-versions-returns-ok-response.json b/test-runner-data/v2/app-builder/list-app-versions-returns-ok-response.json new file mode 100644 index 0000000000..acf0c6c86b --- /dev/null +++ b/test-runner-data/v2/app-builder/list-app-versions-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/List App Versions returns \"OK\" response", + "operation_id": "ListAppVersions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/versions" + }, + "scenario": "List App Versions returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/list-apps-returns-ok-response.json b/test-runner-data/v2/app-builder/list-apps-returns-ok-response.json new file mode 100644 index 0000000000..577188cc4e --- /dev/null +++ b/test-runner-data/v2/app-builder/list-apps-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/List Apps returns \"OK\" response", + "operation_id": "ListApps", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/app-builder/apps" + }, + "scenario": "List Apps returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/list-blueprints-returns-ok-response.json b/test-runner-data/v2/app-builder/list-blueprints-returns-ok-response.json new file mode 100644 index 0000000000..9283827a5a --- /dev/null +++ b/test-runner-data/v2/app-builder/list-blueprints-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/List Blueprints returns \"OK\" response", + "operation_id": "ListBlueprints", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/app-builder/blueprints" + }, + "scenario": "List Blueprints returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/list-tags-returns-ok-response.json b/test-runner-data/v2/app-builder/list-tags-returns-ok-response.json new file mode 100644 index 0000000000..453df8a9f6 --- /dev/null +++ b/test-runner-data/v2/app-builder/list-tags-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/List Tags returns \"OK\" response", + "operation_id": "ListTags", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/app-builder/tags" + }, + "scenario": "List Tags returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/name-app-version-returns-no-content-response.json b/test-runner-data/v2/app-builder/name-app-version-returns-no-content-response.json new file mode 100644 index 0000000000..176dc08016 --- /dev/null +++ b/test-runner-data/v2/app-builder/name-app-version-returns-no-content-response.json @@ -0,0 +1,66 @@ +{ + "api": "AppBuilder", + "expected_status": 204, + "feature": "App Builder", + "id": "v2/App Builder/Name App Version returns \"No Content\" response", + "operation_id": "UpdateAppVersionName", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppVersionNameRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "v1.2.0 - bug fix release" + }, + "type": "versionNames" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "version", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "latest" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/version-name" + }, + "scenario": "Name App Version returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/name-app-version-returns-not-found-response.json b/test-runner-data/v2/app-builder/name-app-version-returns-not-found-response.json new file mode 100644 index 0000000000..d14f4d5693 --- /dev/null +++ b/test-runner-data/v2/app-builder/name-app-version-returns-not-found-response.json @@ -0,0 +1,66 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Name App Version returns \"Not Found\" response", + "operation_id": "UpdateAppVersionName", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppVersionNameRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "v1.2.0 - bug fix release" + }, + "type": "versionNames" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "version", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "latest" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/version-name" + }, + "scenario": "Name App Version returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/publish-app-returns-created-response.json b/test-runner-data/v2/app-builder/publish-app-returns-created-response.json new file mode 100644 index 0000000000..04cbe2f42e --- /dev/null +++ b/test-runner-data/v2/app-builder/publish-app-returns-created-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 201, + "feature": "App Builder", + "id": "v2/App Builder/Publish App returns \"Created\" response", + "operation_id": "PublishApp", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/deployment" + }, + "scenario": "Publish App returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/publish-app-returns-not-found-response.json b/test-runner-data/v2/app-builder/publish-app-returns-not-found-response.json new file mode 100644 index 0000000000..d8ac1a8550 --- /dev/null +++ b/test-runner-data/v2/app-builder/publish-app-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Publish App returns \"Not Found\" response", + "operation_id": "PublishApp", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/deployment" + }, + "scenario": "Publish App returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/revert-app-returns-not-found-response.json b/test-runner-data/v2/app-builder/revert-app-returns-not-found-response.json new file mode 100644 index 0000000000..3f13bc619d --- /dev/null +++ b/test-runner-data/v2/app-builder/revert-app-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Revert App returns \"Not Found\" response", + "operation_id": "RevertApp", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "version", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "1" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/revert" + }, + "scenario": "Revert App returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/unpublish-app-returns-not-found-response.json b/test-runner-data/v2/app-builder/unpublish-app-returns-not-found-response.json new file mode 100644 index 0000000000..3d86494323 --- /dev/null +++ b/test-runner-data/v2/app-builder/unpublish-app-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Unpublish App returns \"Not Found\" response", + "operation_id": "UnpublishApp", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/deployment" + }, + "scenario": "Unpublish App returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/unpublish-app-returns-ok-response.json b/test-runner-data/v2/app-builder/unpublish-app-returns-ok-response.json new file mode 100644 index 0000000000..c9ff1806bf --- /dev/null +++ b/test-runner-data/v2/app-builder/unpublish-app-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/Unpublish App returns \"OK\" response", + "operation_id": "UnpublishApp", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/deployment" + }, + "scenario": "Unpublish App returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-favorite-status-returns-no-content-response.json b/test-runner-data/v2/app-builder/update-app-favorite-status-returns-no-content-response.json new file mode 100644 index 0000000000..afa697e318 --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-favorite-status-returns-no-content-response.json @@ -0,0 +1,50 @@ +{ + "api": "AppBuilder", + "expected_status": 204, + "feature": "App Builder", + "id": "v2/App Builder/Update App Favorite Status returns \"No Content\" response", + "operation_id": "UpdateAppFavorite", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppFavoriteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "favorite": true + }, + "type": "favorites" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/favorite" + }, + "scenario": "Update App Favorite Status returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-favorite-status-returns-not-found-response.json b/test-runner-data/v2/app-builder/update-app-favorite-status-returns-not-found-response.json new file mode 100644 index 0000000000..5bcc4eb12d --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-favorite-status-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Update App Favorite Status returns \"Not Found\" response", + "operation_id": "UpdateAppFavorite", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppFavoriteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "favorite": true + }, + "type": "favorites" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/favorite" + }, + "scenario": "Update App Favorite Status returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-protection-level-returns-not-found-response.json b/test-runner-data/v2/app-builder/update-app-protection-level-returns-not-found-response.json new file mode 100644 index 0000000000..ba965e1091 --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-protection-level-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Update App Protection Level returns \"Not Found\" response", + "operation_id": "UpdateProtectionLevel", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppProtectionLevelRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "protectionLevel": "approval_required" + }, + "type": "protectionLevel" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/protection-level" + }, + "scenario": "Update App Protection Level returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-protection-level-returns-ok-response.json b/test-runner-data/v2/app-builder/update-app-protection-level-returns-ok-response.json new file mode 100644 index 0000000000..5688ad7304 --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-protection-level-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/Update App Protection Level returns \"OK\" response", + "operation_id": "UpdateProtectionLevel", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppProtectionLevelRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "protectionLevel": "approval_required" + }, + "type": "protectionLevel" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/protection-level" + }, + "scenario": "Update App Protection Level returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-returns-bad-request-response.json b/test-runner-data/v2/app-builder/update-app-returns-bad-request-response.json new file mode 100644 index 0000000000..11dde6bd8e --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "AppBuilder", + "expected_status": 400, + "feature": "App Builder", + "id": "v2/App Builder/Update App returns \"Bad Request\" response", + "operation_id": "UpdateApp", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "rootInstanceName": "" + }, + "id": "{{ app.data.id }}", + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}" + }, + "scenario": "Update App returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-returns-ok-response.json b/test-runner-data/v2/app-builder/update-app-returns-ok-response.json new file mode 100644 index 0000000000..7a76651ebf --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "AppBuilder", + "expected_status": 200, + "feature": "App Builder", + "id": "v2/App Builder/Update App returns \"OK\" response", + "operation_id": "UpdateApp", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Updated Name", + "rootInstanceName": "grid0" + }, + "id": "{{ app.data.id }}", + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}" + }, + "scenario": "Update App returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-self-service-status-returns-no-content-response.json b/test-runner-data/v2/app-builder/update-app-self-service-status-returns-no-content-response.json new file mode 100644 index 0000000000..fae21f3854 --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-self-service-status-returns-no-content-response.json @@ -0,0 +1,50 @@ +{ + "api": "AppBuilder", + "expected_status": 204, + "feature": "App Builder", + "id": "v2/App Builder/Update App Self-Service Status returns \"No Content\" response", + "operation_id": "UpdateAppSelfService", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppSelfServiceRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "selfService": true + }, + "type": "selfService" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/self-service" + }, + "scenario": "Update App Self-Service Status returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-self-service-status-returns-not-found-response.json b/test-runner-data/v2/app-builder/update-app-self-service-status-returns-not-found-response.json new file mode 100644 index 0000000000..f1c61194d8 --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-self-service-status-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Update App Self-Service Status returns \"Not Found\" response", + "operation_id": "UpdateAppSelfService", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppSelfServiceRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "selfService": true + }, + "type": "selfService" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/self-service" + }, + "scenario": "Update App Self-Service Status returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-tags-returns-no-content-response.json b/test-runner-data/v2/app-builder/update-app-tags-returns-no-content-response.json new file mode 100644 index 0000000000..003f48b9fe --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-tags-returns-no-content-response.json @@ -0,0 +1,53 @@ +{ + "api": "AppBuilder", + "expected_status": 204, + "feature": "App Builder", + "id": "v2/App Builder/Update App Tags returns \"No Content\" response", + "operation_id": "UpdateAppTags", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppTagsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "tags": [ + "team:platform", + "service:ops" + ] + }, + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "app.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/tags" + }, + "scenario": "Update App Tags returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/app-builder/update-app-tags-returns-not-found-response.json b/test-runner-data/v2/app-builder/update-app-tags-returns-not-found-response.json new file mode 100644 index 0000000000..8be9fe2303 --- /dev/null +++ b/test-runner-data/v2/app-builder/update-app-tags-returns-not-found-response.json @@ -0,0 +1,53 @@ +{ + "api": "AppBuilder", + "expected_status": 404, + "feature": "App Builder", + "id": "v2/App Builder/Update App Tags returns \"Not Found\" response", + "operation_id": "UpdateAppTags", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateAppTagsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "tags": [ + "team:platform", + "service:ops" + ] + }, + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7addb29b-f935-472c-ae79-d1963979a23e" + }, + "style": null + } + ], + "path": "/api/v2/app-builder/apps/{app_id}/tags" + }, + "scenario": "Update App Tags returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/create-a-legacy-waf-exclusion-filter-returns-bad-request-response.json b/test-runner-data/v2/application-security/create-a-legacy-waf-exclusion-filter-returns-bad-request-response.json new file mode 100644 index 0000000000..15fa6b8c96 --- /dev/null +++ b/test-runner-data/v2/application-security/create-a-legacy-waf-exclusion-filter-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 400, + "feature": "Application Security", + "id": "v2/Application Security/Create a legacy WAF exclusion filter returns \"Bad Request\" response", + "operation_id": "CreateApplicationSecurityWafExclusionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationSecurityWafExclusionFilterCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": true, + "event_query": "test:1" + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters" + }, + "scenario": "Create a legacy WAF exclusion filter returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/create-a-waf-exclusion-filter-returns-ok-response.json b/test-runner-data/v2/application-security/create-a-waf-exclusion-filter-returns-ok-response.json new file mode 100644 index 0000000000..6128af79a2 --- /dev/null +++ b/test-runner-data/v2/application-security/create-a-waf-exclusion-filter-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 200, + "feature": "Application Security", + "id": "v2/Application Security/Create a WAF exclusion filter returns \"OK\" response", + "operation_id": "CreateApplicationSecurityWafExclusionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationSecurityWafExclusionFilterCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": true, + "parameters": [ + "list.search.query" + ], + "path_glob": "/accounts/*", + "rules_target": [ + { + "tags": { + "category": "attack_attempt", + "type": "lfi" + } + } + ], + "scope": [ + { + "env": "www", + "service": "prod" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters" + }, + "scenario": "Create a WAF exclusion filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/create-a-waf-policy-returns-created-response.json b/test-runner-data/v2/application-security/create-a-waf-policy-returns-created-response.json new file mode 100644 index 0000000000..4bd6dbaedb --- /dev/null +++ b/test-runner-data/v2/application-security/create-a-waf-policy-returns-created-response.json @@ -0,0 +1,53 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 201, + "feature": "Application Security", + "id": "v2/Application Security/Create a WAF Policy returns \"Created\" response", + "operation_id": "CreateApplicationSecurityWafPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationSecurityPolicyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "basedOn": "recommended", + "description": "Policy applied to internal web applications.", + "isDefault": false, + "name": "Internal Network Policy", + "protectionPresets": [ + "attack-tools" + ], + "rules": [ + { + "blocking": false, + "enabled": true, + "id": "rasp-001-002" + } + ], + "scope": [ + { + "env": "prod", + "service": "billing-service" + } + ], + "version": 0 + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/asm/waf/policies" + }, + "scenario": "Create a WAF Policy returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/delete-a-waf-exclusion-filter-returns-not-found-response.json b/test-runner-data/v2/application-security/delete-a-waf-exclusion-filter-returns-not-found-response.json new file mode 100644 index 0000000000..afe54bdaa9 --- /dev/null +++ b/test-runner-data/v2/application-security/delete-a-waf-exclusion-filter-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 404, + "feature": "Application Security", + "id": "v2/Application Security/Delete a WAF exclusion filter returns \"Not Found\" response", + "operation_id": "DeleteApplicationSecurityWafExclusionFilter", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "exclusion_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}" + }, + "scenario": "Delete a WAF exclusion filter returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/delete-a-waf-exclusion-filter-returns-ok-response.json b/test-runner-data/v2/application-security/delete-a-waf-exclusion-filter-returns-ok-response.json new file mode 100644 index 0000000000..e6bc165643 --- /dev/null +++ b/test-runner-data/v2/application-security/delete-a-waf-exclusion-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 204, + "feature": "Application Security", + "id": "v2/Application Security/Delete a WAF exclusion filter returns \"OK\" response", + "operation_id": "DeleteApplicationSecurityWafExclusionFilter", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "exclusion_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "exclusion_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}" + }, + "scenario": "Delete a WAF exclusion filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/get-a-waf-exclusion-filter-returns-ok-response.json b/test-runner-data/v2/application-security/get-a-waf-exclusion-filter-returns-ok-response.json new file mode 100644 index 0000000000..c049aba2c9 --- /dev/null +++ b/test-runner-data/v2/application-security/get-a-waf-exclusion-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 200, + "feature": "Application Security", + "id": "v2/Application Security/Get a WAF exclusion filter returns \"OK\" response", + "operation_id": "GetApplicationSecurityWafExclusionFilter", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "exclusion_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "exclusion_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}" + }, + "scenario": "Get a WAF exclusion filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/get-a-waf-policy-returns-ok-response.json b/test-runner-data/v2/application-security/get-a-waf-policy-returns-ok-response.json new file mode 100644 index 0000000000..ce60970ece --- /dev/null +++ b/test-runner-data/v2/application-security/get-a-waf-policy-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 200, + "feature": "Application Security", + "id": "v2/Application Security/Get a WAF Policy returns \"OK\" response", + "operation_id": "GetApplicationSecurityWafPolicy", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/policies/{policy_id}" + }, + "scenario": "Get a WAF Policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/list-all-waf-custom-rules-returns-ok-response.json b/test-runner-data/v2/application-security/list-all-waf-custom-rules-returns-ok-response.json new file mode 100644 index 0000000000..436ab45430 --- /dev/null +++ b/test-runner-data/v2/application-security/list-all-waf-custom-rules-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 200, + "feature": "Application Security", + "id": "v2/Application Security/List all WAF custom rules returns \"OK\" response", + "operation_id": "ListApplicationSecurityWAFCustomRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/asm/waf/custom_rules" + }, + "scenario": "List all WAF custom rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/list-all-waf-exclusion-filters-returns-ok-response.json b/test-runner-data/v2/application-security/list-all-waf-exclusion-filters-returns-ok-response.json new file mode 100644 index 0000000000..f23c830b02 --- /dev/null +++ b/test-runner-data/v2/application-security/list-all-waf-exclusion-filters-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 200, + "feature": "Application Security", + "id": "v2/Application Security/List all WAF exclusion filters returns \"OK\" response", + "operation_id": "ListApplicationSecurityWafExclusionFilters", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters" + }, + "scenario": "List all WAF exclusion filters returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/list-all-waf-policies-returns-ok-response.json b/test-runner-data/v2/application-security/list-all-waf-policies-returns-ok-response.json new file mode 100644 index 0000000000..9ba8bbf85f --- /dev/null +++ b/test-runner-data/v2/application-security/list-all-waf-policies-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 200, + "feature": "Application Security", + "id": "v2/Application Security/List all WAF policies returns \"OK\" response", + "operation_id": "ListApplicationSecurityWAFPolicies", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/asm/waf/policies" + }, + "scenario": "List all WAF policies returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/update-a-legacy-waf-exclusion-filter-returns-bad-request-response.json b/test-runner-data/v2/application-security/update-a-legacy-waf-exclusion-filter-returns-bad-request-response.json new file mode 100644 index 0000000000..7facb0f81f --- /dev/null +++ b/test-runner-data/v2/application-security/update-a-legacy-waf-exclusion-filter-returns-bad-request-response.json @@ -0,0 +1,52 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 400, + "feature": "Application Security", + "id": "v2/Application Security/Update a legacy WAF exclusion filter returns \"Bad Request\" response", + "operation_id": "UpdateApplicationSecurityWafExclusionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationSecurityWafExclusionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": true, + "event_query": "test:1" + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "exclusion_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "exclusion_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}" + }, + "scenario": "Update a legacy WAF exclusion filter returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/update-a-waf-custom-rule-returns-bad-request-response.json b/test-runner-data/v2/application-security/update-a-waf-custom-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..43c8ea4e12 --- /dev/null +++ b/test-runner-data/v2/application-security/update-a-waf-custom-rule-returns-bad-request-response.json @@ -0,0 +1,79 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 400, + "feature": "Application Security", + "id": "v2/Application Security/Update a WAF Custom Rule returns \"Bad Request\" response", + "operation_id": "UpdateApplicationSecurityWafCustomRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationSecurityWafCustomRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "blocking": false, + "conditions": [ + { + "operator": "match_regex", + "parameters": { + "inputs": [ + { + "address": "server.request.query", + "key_path": [ + "id" + ] + } + ], + "regex": "\\" + } + } + ], + "enabled": false, + "name": "test", + "path_glob": "/test", + "scope": [ + { + "env": "test", + "service": "test" + } + ], + "tags": { + "category": "attack_attempt", + "type": "test" + } + }, + "type": "custom_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/custom_rules/{custom_rule_id}" + }, + "scenario": "Update a WAF Custom Rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/update-a-waf-custom-rule-returns-ok-response.json b/test-runner-data/v2/application-security/update-a-waf-custom-rule-returns-ok-response.json new file mode 100644 index 0000000000..a0054f8fea --- /dev/null +++ b/test-runner-data/v2/application-security/update-a-waf-custom-rule-returns-ok-response.json @@ -0,0 +1,79 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 200, + "feature": "Application Security", + "id": "v2/Application Security/Update a WAF Custom Rule returns \"OK\" response", + "operation_id": "UpdateApplicationSecurityWafCustomRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationSecurityWafCustomRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "blocking": false, + "conditions": [ + { + "operator": "match_regex", + "parameters": { + "inputs": [ + { + "address": "server.request.query", + "key_path": [ + "id" + ] + } + ], + "regex": "badactor" + } + } + ], + "enabled": false, + "name": "test", + "path_glob": "/test", + "scope": [ + { + "env": "test", + "service": "test" + } + ], + "tags": { + "category": "attack_attempt", + "type": "test" + } + }, + "type": "custom_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/custom_rules/{custom_rule_id}" + }, + "scenario": "Update a WAF Custom Rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/update-a-waf-exclusion-filter-returns-bad-request-response.json b/test-runner-data/v2/application-security/update-a-waf-exclusion-filter-returns-bad-request-response.json new file mode 100644 index 0000000000..c1c0697c29 --- /dev/null +++ b/test-runner-data/v2/application-security/update-a-waf-exclusion-filter-returns-bad-request-response.json @@ -0,0 +1,74 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 400, + "feature": "Application Security", + "id": "v2/Application Security/Update a WAF exclusion filter returns \"Bad Request\" response", + "operation_id": "UpdateApplicationSecurityWafExclusionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationSecurityWafExclusionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": false, + "ip_list": [ + "198.51.100.72" + ], + "on_match": "monitor", + "parameters": [ + "list.search.query" + ], + "path_glob": "/accounts/*", + "rules_target": [ + { + "rule_id": "dog-913-009", + "tags": { + "category": "attack_attempt", + "type": "lfi" + } + } + ], + "scope": [ + { + "env": "www", + "service": "prod" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "exclusion_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}" + }, + "scenario": "Update a WAF exclusion filter returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/update-a-waf-exclusion-filter-returns-not-found-response.json b/test-runner-data/v2/application-security/update-a-waf-exclusion-filter-returns-not-found-response.json new file mode 100644 index 0000000000..b951b1e7f2 --- /dev/null +++ b/test-runner-data/v2/application-security/update-a-waf-exclusion-filter-returns-not-found-response.json @@ -0,0 +1,70 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 404, + "feature": "Application Security", + "id": "v2/Application Security/Update a WAF exclusion filter returns \"Not Found\" response", + "operation_id": "UpdateApplicationSecurityWafExclusionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationSecurityWafExclusionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": true, + "parameters": [ + "list.search.query" + ], + "path_glob": "/accounts/*", + "rules_target": [ + { + "rule_id": "dog-913-009", + "tags": { + "category": "attack_attempt", + "type": "lfi" + } + } + ], + "scope": [ + { + "env": "www", + "service": "prod" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "exclusion_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}" + }, + "scenario": "Update a WAF exclusion filter returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/application-security/update-a-waf-exclusion-filter-returns-ok-response.json b/test-runner-data/v2/application-security/update-a-waf-exclusion-filter-returns-ok-response.json new file mode 100644 index 0000000000..235ab7e96f --- /dev/null +++ b/test-runner-data/v2/application-security/update-a-waf-exclusion-filter-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "ApplicationSecurity", + "expected_status": 200, + "feature": "Application Security", + "id": "v2/Application Security/Update a WAF exclusion filter returns \"OK\" response", + "operation_id": "UpdateApplicationSecurityWafExclusionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationSecurityWafExclusionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": false, + "ip_list": [ + "198.51.100.72" + ], + "on_match": "monitor" + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "exclusion_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "exclusion_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/{exclusion_filter_id}" + }, + "scenario": "Update a WAF exclusion filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/audit/get-a-list-of-audit-logs-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/audit/get-a-list-of-audit-logs-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..4bba31d68c --- /dev/null +++ b/test-runner-data/v2/audit/get-a-list-of-audit-logs-events-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Audit", + "expected_status": 200, + "feature": "Audit", + "id": "v2/Audit/Get a list of Audit Logs events returns \"OK\" response with pagination", + "operation_id": "ListAuditLogs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/audit/events" + }, + "scenario": "Get a list of Audit Logs events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/audit/get-a-list-of-audit-logs-events-returns-ok-response.json b/test-runner-data/v2/audit/get-a-list-of-audit-logs-events-returns-ok-response.json new file mode 100644 index 0000000000..da716d9b93 --- /dev/null +++ b/test-runner-data/v2/audit/get-a-list-of-audit-logs-events-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Audit", + "expected_status": 200, + "feature": "Audit", + "id": "v2/Audit/Get a list of Audit Logs events returns \"OK\" response", + "operation_id": "ListAuditLogs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/audit/events" + }, + "scenario": "Get a list of Audit Logs events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/audit/search-audit-logs-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/audit/search-audit-logs-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..1ab792f8e5 --- /dev/null +++ b/test-runner-data/v2/audit/search-audit-logs-events-returns-ok-response-with-pagination.json @@ -0,0 +1,38 @@ +{ + "api": "Audit", + "expected_status": 200, + "feature": "Audit", + "id": "v2/Audit/Search Audit Logs events returns \"OK\" response with pagination", + "operation_id": "SearchAuditLogs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AuditLogsSearchEventsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": true, + "parameters": [], + "path": "/api/v2/audit/events/search" + }, + "scenario": "Search Audit Logs events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/audit/search-audit-logs-events-returns-ok-response.json b/test-runner-data/v2/audit/search-audit-logs-events-returns-ok-response.json new file mode 100644 index 0000000000..5f7d07cbaa --- /dev/null +++ b/test-runner-data/v2/audit/search-audit-logs-events-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "Audit", + "expected_status": 200, + "feature": "Audit", + "id": "v2/Audit/Search Audit Logs events returns \"OK\" response", + "operation_id": "SearchAuditLogs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AuditLogsSearchEventsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "query": "@type:session AND @session.type:user", + "to": "now" + }, + "options": { + "time_offset": 0, + "timezone": "GMT" + }, + "page": { + "limit": 25 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/audit/events/search" + }, + "scenario": "Search Audit Logs events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/authn-mappings/create-an-authn-mapping-returns-ok-response.json b/test-runner-data/v2/authn-mappings/create-an-authn-mapping-returns-ok-response.json new file mode 100644 index 0000000000..ad6c261d7d --- /dev/null +++ b/test-runner-data/v2/authn-mappings/create-an-authn-mapping-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "AuthNMappings", + "expected_status": 200, + "feature": "AuthN Mappings", + "id": "v2/AuthN Mappings/Create an AuthN Mapping returns \"OK\" response", + "operation_id": "CreateAuthNMapping", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AuthNMappingCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "attribute_key": "{{ unique_lower_alnum }}", + "attribute_value": "{{ unique }}" + }, + "relationships": { + "role": { + "data": { + "id": "{{ role.data.id }}", + "type": "roles" + } + } + }, + "type": "authn_mappings" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/authn_mappings" + }, + "scenario": "Create an AuthN Mapping returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/authn-mappings/delete-an-authn-mapping-returns-ok-response.json b/test-runner-data/v2/authn-mappings/delete-an-authn-mapping-returns-ok-response.json new file mode 100644 index 0000000000..7b57b5371e --- /dev/null +++ b/test-runner-data/v2/authn-mappings/delete-an-authn-mapping-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AuthNMappings", + "expected_status": 204, + "feature": "AuthN Mappings", + "id": "v2/AuthN Mappings/Delete an AuthN Mapping returns \"OK\" response", + "operation_id": "DeleteAuthNMapping", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "authn_mapping_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "authn_mapping.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/authn_mappings/{authn_mapping_id}" + }, + "scenario": "Delete an AuthN Mapping returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/authn-mappings/edit-an-authn-mapping-returns-ok-response.json b/test-runner-data/v2/authn-mappings/edit-an-authn-mapping-returns-ok-response.json new file mode 100644 index 0000000000..acb4595138 --- /dev/null +++ b/test-runner-data/v2/authn-mappings/edit-an-authn-mapping-returns-ok-response.json @@ -0,0 +1,60 @@ +{ + "api": "AuthNMappings", + "expected_status": 200, + "feature": "AuthN Mappings", + "id": "v2/AuthN Mappings/Edit an AuthN Mapping returns \"OK\" response", + "operation_id": "UpdateAuthNMapping", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AuthNMappingUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "attribute_key": "member-of", + "attribute_value": "Development" + }, + "id": "{{ authn_mapping.data.id }}", + "relationships": { + "role": { + "data": { + "id": "{{ role.data.id }}", + "type": "roles" + } + } + }, + "type": "authn_mappings" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "authn_mapping_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "authn_mapping.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/authn_mappings/{authn_mapping_id}" + }, + "scenario": "Edit an AuthN Mapping returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/authn-mappings/get-an-authn-mapping-by-uuid-returns-ok-response.json b/test-runner-data/v2/authn-mappings/get-an-authn-mapping-by-uuid-returns-ok-response.json new file mode 100644 index 0000000000..797c4637cd --- /dev/null +++ b/test-runner-data/v2/authn-mappings/get-an-authn-mapping-by-uuid-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "AuthNMappings", + "expected_status": 200, + "feature": "AuthN Mappings", + "id": "v2/AuthN Mappings/Get an AuthN Mapping by UUID returns \"OK\" response", + "operation_id": "GetAuthNMapping", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "authn_mapping_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "authn_mapping.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/authn_mappings/{authn_mapping_id}" + }, + "scenario": "Get an AuthN Mapping by UUID returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/authn-mappings/list-all-authn-mappings-returns-ok-response.json b/test-runner-data/v2/authn-mappings/list-all-authn-mappings-returns-ok-response.json new file mode 100644 index 0000000000..0cc6e72578 --- /dev/null +++ b/test-runner-data/v2/authn-mappings/list-all-authn-mappings-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "AuthNMappings", + "expected_status": 200, + "feature": "AuthN Mappings", + "id": "v2/AuthN Mappings/List all AuthN Mappings returns \"OK\" response", + "operation_id": "ListAuthNMappings", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/authn_mappings" + }, + "scenario": "List all AuthN Mappings returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/create-an-aws-account-returns-aws-account-object-response.json b/test-runner-data/v2/aws-integration/create-an-aws-account-returns-aws-account-object-response.json new file mode 100644 index 0000000000..ddaf0f044e --- /dev/null +++ b/test-runner-data/v2/aws-integration/create-an-aws-account-returns-aws-account-object-response.json @@ -0,0 +1,79 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Create an AWS account returns \"AWS Account object\" response", + "operation_id": "CreateAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/accounts" + }, + "scenario": "Create an AWS account returns \"AWS Account object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/create-an-aws-integration-returns-aws-account-object-response.json b/test-runner-data/v2/aws-integration/create-an-aws-integration-returns-aws-account-object-response.json new file mode 100644 index 0000000000..d0c6096077 --- /dev/null +++ b/test-runner-data/v2/aws-integration/create-an-aws-integration-returns-aws-account-object-response.json @@ -0,0 +1,80 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Create an AWS integration returns \"AWS Account object\" response", + "operation_id": "CreateAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "access_key_id": "AKIAIOSFODNN7EXAMPLE", + "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/accounts" + }, + "scenario": "Create an AWS integration returns \"AWS Account object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/create-an-aws-integration-returns-bad-request-response.json b/test-runner-data/v2/aws-integration/create-an-aws-integration-returns-bad-request-response.json new file mode 100644 index 0000000000..94ebdc145a --- /dev/null +++ b/test-runner-data/v2/aws-integration/create-an-aws-integration-returns-bad-request-response.json @@ -0,0 +1,79 @@ +{ + "api": "AWSIntegration", + "expected_status": 400, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Create an AWS integration returns \"Bad Request\" response", + "operation_id": "CreateAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws-invalid", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/accounts" + }, + "scenario": "Create an AWS integration returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/create-an-aws-integration-returns-conflict-response.json b/test-runner-data/v2/aws-integration/create-an-aws-integration-returns-conflict-response.json new file mode 100644 index 0000000000..477f0e17ef --- /dev/null +++ b/test-runner-data/v2/aws-integration/create-an-aws-integration-returns-conflict-response.json @@ -0,0 +1,79 @@ +{ + "api": "AWSIntegration", + "expected_status": 409, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Create an AWS integration returns \"Conflict\" response", + "operation_id": "CreateAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/accounts" + }, + "scenario": "Create an AWS integration returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/delete-an-aws-integration-returns-bad-request-response.json b/test-runner-data/v2/aws-integration/delete-an-aws-integration-returns-bad-request-response.json new file mode 100644 index 0000000000..9804e955d1 --- /dev/null +++ b/test-runner-data/v2/aws-integration/delete-an-aws-integration-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "AWSIntegration", + "expected_status": 400, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Delete an AWS integration returns \"Bad Request\" response", + "operation_id": "DeleteAWSAccount", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "aws_account_config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-a-uuid" + }, + "style": null + } + ], + "path": "/api/v2/integration/aws/accounts/{aws_account_config_id}" + }, + "scenario": "Delete an AWS integration returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/delete-an-aws-integration-returns-no-content-response.json b/test-runner-data/v2/aws-integration/delete-an-aws-integration-returns-no-content-response.json new file mode 100644 index 0000000000..53d26c5a1d --- /dev/null +++ b/test-runner-data/v2/aws-integration/delete-an-aws-integration-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "AWSIntegration", + "expected_status": 204, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Delete an AWS integration returns \"No Content\" response", + "operation_id": "DeleteAWSAccount", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "aws_account_config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "aws_account_v2.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/aws/accounts/{aws_account_config_id}" + }, + "scenario": "Delete an AWS integration returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/delete-an-aws-integration-returns-not-found-response.json b/test-runner-data/v2/aws-integration/delete-an-aws-integration-returns-not-found-response.json new file mode 100644 index 0000000000..b1ae2cbb9a --- /dev/null +++ b/test-runner-data/v2/aws-integration/delete-an-aws-integration-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AWSIntegration", + "expected_status": 404, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Delete an AWS integration returns \"Not Found\" response", + "operation_id": "DeleteAWSAccount", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "aws_account_config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "448169a8-251c-4344-abee-1c4edef39f7a" + }, + "style": null + } + ], + "path": "/api/v2/integration/aws/accounts/{aws_account_config_id}" + }, + "scenario": "Delete an AWS integration returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/generate-a-new-external-id-returns-aws-external-id-object-response.json b/test-runner-data/v2/aws-integration/generate-a-new-external-id-returns-aws-external-id-object-response.json new file mode 100644 index 0000000000..be912461bb --- /dev/null +++ b/test-runner-data/v2/aws-integration/generate-a-new-external-id-returns-aws-external-id-object-response.json @@ -0,0 +1,18 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Generate a new external ID returns \"AWS External ID object\" response", + "operation_id": "CreateNewAWSExternalID", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/generate_new_external_id" + }, + "scenario": "Generate a new external ID returns \"AWS External ID object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/generate-new-external-id-returns-aws-external-id-object-response.json b/test-runner-data/v2/aws-integration/generate-new-external-id-returns-aws-external-id-object-response.json new file mode 100644 index 0000000000..6dc337b938 --- /dev/null +++ b/test-runner-data/v2/aws-integration/generate-new-external-id-returns-aws-external-id-object-response.json @@ -0,0 +1,18 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Generate new external ID returns \"AWS External ID object\" response", + "operation_id": "CreateNewAWSExternalID", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/generate_new_external_id" + }, + "scenario": "Generate new external ID returns \"AWS External ID object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/get-an-aws-integration-by-config-id-returns-aws-account-object-response.json b/test-runner-data/v2/aws-integration/get-an-aws-integration-by-config-id-returns-aws-account-object-response.json new file mode 100644 index 0000000000..8b727d18bb --- /dev/null +++ b/test-runner-data/v2/aws-integration/get-an-aws-integration-by-config-id-returns-aws-account-object-response.json @@ -0,0 +1,35 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Get an AWS integration by config ID returns \"AWS Account object\" response", + "operation_id": "GetAWSAccount", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "aws_account_config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "aws_account_v2.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/aws/accounts/{aws_account_config_id}" + }, + "scenario": "Get an AWS integration by config ID returns \"AWS Account object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/get-an-aws-integration-by-config-id-returns-bad-request-response.json b/test-runner-data/v2/aws-integration/get-an-aws-integration-by-config-id-returns-bad-request-response.json new file mode 100644 index 0000000000..005092b38d --- /dev/null +++ b/test-runner-data/v2/aws-integration/get-an-aws-integration-by-config-id-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "AWSIntegration", + "expected_status": 400, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Get an AWS integration by config ID returns \"Bad Request\" response", + "operation_id": "GetAWSAccount", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "aws_account_config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-a-uuid" + }, + "style": null + } + ], + "path": "/api/v2/integration/aws/accounts/{aws_account_config_id}" + }, + "scenario": "Get an AWS integration by config ID returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/get-an-aws-integration-by-config-id-returns-not-found-response.json b/test-runner-data/v2/aws-integration/get-an-aws-integration-by-config-id-returns-not-found-response.json new file mode 100644 index 0000000000..c94227848a --- /dev/null +++ b/test-runner-data/v2/aws-integration/get-an-aws-integration-by-config-id-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "AWSIntegration", + "expected_status": 404, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Get an AWS integration by config ID returns \"Not Found\" response", + "operation_id": "GetAWSAccount", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "aws_account_config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "448169a8-251c-4344-abee-1c4edef39f7a" + }, + "style": null + } + ], + "path": "/api/v2/integration/aws/accounts/{aws_account_config_id}" + }, + "scenario": "Get an AWS integration by config ID returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/get-aws-integration-standard-iam-permissions-returns-aws-iam-permissions-object-response.json b/test-runner-data/v2/aws-integration/get-aws-integration-standard-iam-permissions-returns-aws-iam-permissions-object-response.json new file mode 100644 index 0000000000..6fe0b6a01f --- /dev/null +++ b/test-runner-data/v2/aws-integration/get-aws-integration-standard-iam-permissions-returns-aws-iam-permissions-object-response.json @@ -0,0 +1,18 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Get AWS integration standard IAM permissions returns \"AWS IAM Permissions object\" response", + "operation_id": "GetAWSIntegrationIAMPermissionsStandard", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/iam_permissions/standard" + }, + "scenario": "Get AWS integration standard IAM permissions returns \"AWS IAM Permissions object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/get-resource-collection-iam-permissions-returns-aws-iam-permissions-object-response.json b/test-runner-data/v2/aws-integration/get-resource-collection-iam-permissions-returns-aws-iam-permissions-object-response.json new file mode 100644 index 0000000000..0ea56d7488 --- /dev/null +++ b/test-runner-data/v2/aws-integration/get-resource-collection-iam-permissions-returns-aws-iam-permissions-object-response.json @@ -0,0 +1,18 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Get resource collection IAM permissions returns \"AWS IAM Permissions object\" response", + "operation_id": "GetAWSIntegrationIAMPermissionsResourceCollection", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/iam_permissions/resource_collection" + }, + "scenario": "Get resource collection IAM permissions returns \"AWS IAM Permissions object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/list-all-aws-integrations-returns-aws-accounts-list-object-response.json b/test-runner-data/v2/aws-integration/list-all-aws-integrations-returns-aws-accounts-list-object-response.json new file mode 100644 index 0000000000..117f0db2c3 --- /dev/null +++ b/test-runner-data/v2/aws-integration/list-all-aws-integrations-returns-aws-accounts-list-object-response.json @@ -0,0 +1,18 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/List all AWS integrations returns \"AWS Accounts List object\" response", + "operation_id": "ListAWSAccounts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/accounts" + }, + "scenario": "List all AWS integrations returns \"AWS Accounts List object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/list-available-namespaces-returns-aws-namespaces-list-object-response.json b/test-runner-data/v2/aws-integration/list-available-namespaces-returns-aws-namespaces-list-object-response.json new file mode 100644 index 0000000000..9bf169d01b --- /dev/null +++ b/test-runner-data/v2/aws-integration/list-available-namespaces-returns-aws-namespaces-list-object-response.json @@ -0,0 +1,18 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/List available namespaces returns \"AWS Namespaces List object\" response", + "operation_id": "ListAWSNamespaces", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/available_namespaces" + }, + "scenario": "List available namespaces returns \"AWS Namespaces List object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/list-namespaces-returns-aws-namespaces-list-object-response.json b/test-runner-data/v2/aws-integration/list-namespaces-returns-aws-namespaces-list-object-response.json new file mode 100644 index 0000000000..350ab09cb7 --- /dev/null +++ b/test-runner-data/v2/aws-integration/list-namespaces-returns-aws-namespaces-list-object-response.json @@ -0,0 +1,18 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/List namespaces returns \"AWS Namespaces List object\" response", + "operation_id": "ListAWSNamespaces", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/available_namespaces" + }, + "scenario": "List namespaces returns \"AWS Namespaces List object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/update-an-aws-integration-returns-aws-account-object-response.json b/test-runner-data/v2/aws-integration/update-an-aws-integration-returns-aws-account-object-response.json new file mode 100644 index 0000000000..702d8a5f9a --- /dev/null +++ b/test-runner-data/v2/aws-integration/update-an-aws-integration-returns-aws-account-object-response.json @@ -0,0 +1,96 @@ +{ + "api": "AWSIntegration", + "expected_status": 200, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Update an AWS integration returns \"AWS Account object\" response", + "operation_id": "UpdateAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "aws_account_config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "aws_account_v2.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/aws/accounts/{aws_account_config_id}" + }, + "scenario": "Update an AWS integration returns \"AWS Account object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/update-an-aws-integration-returns-bad-request-response.json b/test-runner-data/v2/aws-integration/update-an-aws-integration-returns-bad-request-response.json new file mode 100644 index 0000000000..aaa8118c1d --- /dev/null +++ b/test-runner-data/v2/aws-integration/update-an-aws-integration-returns-bad-request-response.json @@ -0,0 +1,97 @@ +{ + "api": "AWSIntegration", + "expected_status": 400, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Update an AWS integration returns \"Bad Request\" response", + "operation_id": "UpdateAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "access_key_id": "AKIAIOSFODNN7EXAMPLE", + "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "aws_account_config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "aws_account_v2.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/aws/accounts/{aws_account_config_id}" + }, + "scenario": "Update an AWS integration returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-integration/update-an-aws-integration-returns-not-found-response.json b/test-runner-data/v2/aws-integration/update-an-aws-integration-returns-not-found-response.json new file mode 100644 index 0000000000..3535fd049d --- /dev/null +++ b/test-runner-data/v2/aws-integration/update-an-aws-integration-returns-not-found-response.json @@ -0,0 +1,96 @@ +{ + "api": "AWSIntegration", + "expected_status": 404, + "feature": "AWS Integration", + "id": "v2/AWS Integration/Update an AWS integration returns \"Not Found\" response", + "operation_id": "UpdateAWSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AWSAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "aws_account_config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "448169a8-251c-4344-abee-1c4edef39f7a" + }, + "style": null + } + ], + "path": "/api/v2/integration/aws/accounts/{aws_account_config_id}" + }, + "scenario": "Update an AWS integration returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/aws-logs-integration/get-list-of-aws-log-ready-services-returns-aws-logs-services-list-object-response.json b/test-runner-data/v2/aws-logs-integration/get-list-of-aws-log-ready-services-returns-aws-logs-services-list-object-response.json new file mode 100644 index 0000000000..139f1308ff --- /dev/null +++ b/test-runner-data/v2/aws-logs-integration/get-list-of-aws-log-ready-services-returns-aws-logs-services-list-object-response.json @@ -0,0 +1,18 @@ +{ + "api": "AWSLogsIntegration", + "expected_status": 200, + "feature": "AWS Logs Integration", + "id": "v2/AWS Logs Integration/Get list of AWS log ready services returns \"AWS Logs Services List object\" response", + "operation_id": "ListAWSLogsServices", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/aws/logs/services" + }, + "scenario": "Get list of AWS log ready services returns \"AWS Logs Services List object\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-bad-request-response.json b/test-runner-data/v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-bad-request-response.json new file mode 100644 index 0000000000..f921684585 --- /dev/null +++ b/test-runner-data/v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-bad-request-response.json @@ -0,0 +1,53 @@ +{ + "api": "CaseManagementAttribute", + "expected_status": 400, + "feature": "Case Management Attribute", + "id": "v2/Case Management Attribute/Create custom attribute config for a case type returns \"Bad Request\" response", + "operation_id": "CreateCustomAttributeConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomAttributeConfigCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "display_name": "AWS Region {{uuid}}", + "is_multi": true, + "key": "region_{{unique_hash}}", + "type": "FLOAT" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_type_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case_type.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/types/{case_type_id}/custom_attributes" + }, + "scenario": "Create custom attribute config for a case type returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-created-response.json b/test-runner-data/v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-created-response.json new file mode 100644 index 0000000000..328d2a9d05 --- /dev/null +++ b/test-runner-data/v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-created-response.json @@ -0,0 +1,53 @@ +{ + "api": "CaseManagementAttribute", + "expected_status": 201, + "feature": "Case Management Attribute", + "id": "v2/Case Management Attribute/Create custom attribute config for a case type returns \"CREATED\" response", + "operation_id": "CreateCustomAttributeConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomAttributeConfigCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "display_name": "AWS Region {{uuid}}", + "is_multi": true, + "key": "region_{{unique_hash}}", + "type": "NUMBER" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_type_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case_type.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/types/{case_type_id}/custom_attributes" + }, + "scenario": "Create custom attribute config for a case type returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-not-found-response.json b/test-runner-data/v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-not-found-response.json new file mode 100644 index 0000000000..025feb0323 --- /dev/null +++ b/test-runner-data/v2/case-management-attribute/create-custom-attribute-config-for-a-case-type-returns-not-found-response.json @@ -0,0 +1,53 @@ +{ + "api": "CaseManagementAttribute", + "expected_status": 404, + "feature": "Case Management Attribute", + "id": "v2/Case Management Attribute/Create custom attribute config for a case type returns \"Not Found\" response", + "operation_id": "CreateCustomAttributeConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomAttributeConfigCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "display_name": "AWS Region {{unique_hash}}", + "is_multi": true, + "key": "region_{{unique_hash}}", + "type": "NUMBER" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_type_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "9fd476d7-a955-454a-851d-980c655c02d3" + }, + "style": null + } + ], + "path": "/api/v2/cases/types/{case_type_id}/custom_attributes" + }, + "scenario": "Create custom attribute config for a case type returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-attribute/delete-custom-attributes-config-returns-bad-request-response.json b/test-runner-data/v2/case-management-attribute/delete-custom-attributes-config-returns-bad-request-response.json new file mode 100644 index 0000000000..a228745b33 --- /dev/null +++ b/test-runner-data/v2/case-management-attribute/delete-custom-attributes-config-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "CaseManagementAttribute", + "expected_status": 400, + "feature": "Case Management Attribute", + "id": "v2/Case Management Attribute/Delete custom attributes config returns \"Bad Request\" response", + "operation_id": "DeleteCustomAttributeConfig", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_type_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case_type.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "custom_attribute_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-an-uuid" + }, + "style": null + } + ], + "path": "/api/v2/cases/types/{case_type_id}/custom_attributes/{custom_attribute_id}" + }, + "scenario": "Delete custom attributes config returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-attribute/get-all-custom-attributes-config-of-case-type-returns-ok-response.json b/test-runner-data/v2/case-management-attribute/get-all-custom-attributes-config-of-case-type-returns-ok-response.json new file mode 100644 index 0000000000..d23863f8f1 --- /dev/null +++ b/test-runner-data/v2/case-management-attribute/get-all-custom-attributes-config-of-case-type-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CaseManagementAttribute", + "expected_status": 200, + "feature": "Case Management Attribute", + "id": "v2/Case Management Attribute/Get all custom attributes config of case type returns \"OK\" response", + "operation_id": "GetAllCustomAttributeConfigsByCaseType", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_type_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case_type.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/types/{case_type_id}/custom_attributes" + }, + "scenario": "Get all custom attributes config of case type returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-attribute/get-all-custom-attributes-returns-ok-response.json b/test-runner-data/v2/case-management-attribute/get-all-custom-attributes-returns-ok-response.json new file mode 100644 index 0000000000..b83f8c7b32 --- /dev/null +++ b/test-runner-data/v2/case-management-attribute/get-all-custom-attributes-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CaseManagementAttribute", + "expected_status": 200, + "feature": "Case Management Attribute", + "id": "v2/Case Management Attribute/Get all custom attributes returns \"OK\" response", + "operation_id": "GetAllCustomAttributes", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cases/types/custom_attributes" + }, + "scenario": "Get all custom attributes returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-type/create-a-case-type-returns-bad-request-response.json b/test-runner-data/v2/case-management-type/create-a-case-type-returns-bad-request-response.json new file mode 100644 index 0000000000..93b2fbd033 --- /dev/null +++ b/test-runner-data/v2/case-management-type/create-a-case-type-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "CaseManagementType", + "expected_status": 400, + "feature": "Case Management Type", + "id": "v2/Case Management Type/Create a case type returns \"Bad Request\" response", + "operation_id": "CreateCaseType", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseTypeCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Investigations done in case management", + "emoji": "notanemoji", + "name": "Investigation" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cases/types" + }, + "scenario": "Create a case type returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-type/create-a-case-type-returns-created-response.json b/test-runner-data/v2/case-management-type/create-a-case-type-returns-created-response.json new file mode 100644 index 0000000000..e676fb6083 --- /dev/null +++ b/test-runner-data/v2/case-management-type/create-a-case-type-returns-created-response.json @@ -0,0 +1,35 @@ +{ + "api": "CaseManagementType", + "expected_status": 201, + "feature": "Case Management Type", + "id": "v2/Case Management Type/Create a case type returns \"CREATED\" response", + "operation_id": "CreateCaseType", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseTypeCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Investigations done in case management", + "emoji": "\ud83d\udc51", + "name": "Investigation" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cases/types" + }, + "scenario": "Create a case type returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-type/delete-a-case-type-returns-notcontent-response.json b/test-runner-data/v2/case-management-type/delete-a-case-type-returns-notcontent-response.json new file mode 100644 index 0000000000..9f56132d2a --- /dev/null +++ b/test-runner-data/v2/case-management-type/delete-a-case-type-returns-notcontent-response.json @@ -0,0 +1,35 @@ +{ + "api": "CaseManagementType", + "expected_status": 204, + "feature": "Case Management Type", + "id": "v2/Case Management Type/Delete a case type returns \"NotContent\" response", + "operation_id": "DeleteCaseType", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_type_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case_type.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/types/{case_type_id}" + }, + "scenario": "Delete a case type returns \"NotContent\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management-type/get-all-case-types-returns-ok-response.json b/test-runner-data/v2/case-management-type/get-all-case-types-returns-ok-response.json new file mode 100644 index 0000000000..9fa81054ac --- /dev/null +++ b/test-runner-data/v2/case-management-type/get-all-case-types-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CaseManagementType", + "expected_status": 200, + "feature": "Case Management Type", + "id": "v2/Case Management Type/Get all case types returns \"OK\" response", + "operation_id": "GetAllCaseTypes", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cases/types" + }, + "scenario": "Get all case types returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/archive-case-returns-bad-request-response.json b/test-runner-data/v2/case-management/archive-case-returns-bad-request-response.json new file mode 100644 index 0000000000..2ccea58d7c --- /dev/null +++ b/test-runner-data/v2/case-management/archive-case-returns-bad-request-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Archive case returns \"Bad Request\" response", + "operation_id": "ArchiveCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseEmptyRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/archive" + }, + "scenario": "Archive case returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/archive-case-returns-not-found-response.json b/test-runner-data/v2/case-management/archive-case-returns-not-found-response.json new file mode 100644 index 0000000000..67dd30d248 --- /dev/null +++ b/test-runner-data/v2/case-management/archive-case-returns-not-found-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Archive case returns \"Not Found\" response", + "operation_id": "ArchiveCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseEmptyRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/archive" + }, + "scenario": "Archive case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/archive-case-returns-ok-response.json b/test-runner-data/v2/case-management/archive-case-returns-ok-response.json new file mode 100644 index 0000000000..23771fac5e --- /dev/null +++ b/test-runner-data/v2/case-management/archive-case-returns-ok-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Archive case returns \"OK\" response", + "operation_id": "ArchiveCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseEmptyRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/archive" + }, + "scenario": "Archive case returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/assign-case-returns-bad-request-response.json b/test-runner-data/v2/case-management/assign-case-returns-bad-request-response.json new file mode 100644 index 0000000000..39a452a823 --- /dev/null +++ b/test-runner-data/v2/case-management/assign-case-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Assign case returns \"Bad Request\" response", + "operation_id": "AssignCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseAssignRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "assignee_id": "invalid-uuid" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/assign" + }, + "scenario": "Assign case returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/assign-case-returns-not-found-response.json b/test-runner-data/v2/case-management/assign-case-returns-not-found-response.json new file mode 100644 index 0000000000..15910b5489 --- /dev/null +++ b/test-runner-data/v2/case-management/assign-case-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Assign case returns \"Not Found\" response", + "operation_id": "AssignCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseAssignRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "assignee_id": "{{user.data.id}}" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/assign" + }, + "scenario": "Assign case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/assign-case-returns-ok-response.json b/test-runner-data/v2/case-management/assign-case-returns-ok-response.json new file mode 100644 index 0000000000..5651635c22 --- /dev/null +++ b/test-runner-data/v2/case-management/assign-case-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Assign case returns \"OK\" response", + "operation_id": "AssignCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseAssignRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "assignee_id": "{{user.data.id}}" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/assign" + }, + "scenario": "Assign case returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/comment-case-returns-bad-request-response.json b/test-runner-data/v2/case-management/comment-case-returns-bad-request-response.json new file mode 100644 index 0000000000..fddd168970 --- /dev/null +++ b/test-runner-data/v2/case-management/comment-case-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Comment case returns \"Bad Request\" response", + "operation_id": "CommentCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseCommentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "comment": "" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/comment" + }, + "scenario": "Comment case returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/comment-case-returns-not-found-response.json b/test-runner-data/v2/case-management/comment-case-returns-not-found-response.json new file mode 100644 index 0000000000..549b5a1ba2 --- /dev/null +++ b/test-runner-data/v2/case-management/comment-case-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Comment case returns \"Not Found\" response", + "operation_id": "CommentCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseCommentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "comment": "Hello world !" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/comment" + }, + "scenario": "Comment case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/comment-case-returns-ok-response.json b/test-runner-data/v2/case-management/comment-case-returns-ok-response.json new file mode 100644 index 0000000000..841b05528c --- /dev/null +++ b/test-runner-data/v2/case-management/comment-case-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Comment case returns \"OK\" response", + "operation_id": "CommentCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseCommentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "comment": "Hello World !" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/comment" + }, + "scenario": "Comment case returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/create-a-case-returns-bad-request-response.json b/test-runner-data/v2/case-management/create-a-case-returns-bad-request-response.json new file mode 100644 index 0000000000..209dc4b441 --- /dev/null +++ b/test-runner-data/v2/case-management/create-a-case-returns-bad-request-response.json @@ -0,0 +1,49 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Create a case returns \"Bad Request\" response", + "operation_id": "CreateCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "priority": "NOT_DEFINED", + "title": "Security breach investigation", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "assignee": { + "data": { + "id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", + "type": "userx" + } + }, + "project": { + "data": { + "id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cases" + }, + "scenario": "Create a case returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/create-a-case-returns-created-response.json b/test-runner-data/v2/case-management/create-a-case-returns-created-response.json new file mode 100644 index 0000000000..221061b3cc --- /dev/null +++ b/test-runner-data/v2/case-management/create-a-case-returns-created-response.json @@ -0,0 +1,49 @@ +{ + "api": "CaseManagement", + "expected_status": 201, + "feature": "Case Management", + "id": "v2/Case Management/Create a case returns \"CREATED\" response", + "operation_id": "CreateCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "priority": "NOT_DEFINED", + "title": "Security breach investigation in {{ unique_hash }}", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "assignee": { + "data": { + "id": "{{user.data.id}}", + "type": "user" + } + }, + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cases" + }, + "scenario": "Create a case returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/create-a-case-returns-not-found-response.json b/test-runner-data/v2/case-management/create-a-case-returns-not-found-response.json new file mode 100644 index 0000000000..b770144e31 --- /dev/null +++ b/test-runner-data/v2/case-management/create-a-case-returns-not-found-response.json @@ -0,0 +1,49 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Create a case returns \"Not Found\" response", + "operation_id": "CreateCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "priority": "NOT_DEFINED", + "title": "Security breach investigation", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "assignee": { + "data": { + "id": "721074c8-63df-4d8f-a43d-ab41dd24ec35", + "type": "user" + } + }, + "project": { + "data": { + "id": "721074c8-63df-4d8f-a43d-ab41dd24ec35", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cases" + }, + "scenario": "Create a case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/delete-case-comment-returns-not-found-response.json b/test-runner-data/v2/case-management/delete-case-comment-returns-not-found-response.json new file mode 100644 index 0000000000..944a374b7d --- /dev/null +++ b/test-runner-data/v2/case-management/delete-case-comment-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Delete case comment returns \"Not Found\" response", + "operation_id": "DeleteCaseComment", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "cell_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "23fca2aa-4967-4936-bdd7-9157d9e456d7" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/comment/{cell_id}" + }, + "scenario": "Delete case comment returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/delete-custom-attribute-from-case-returns-not-found-response.json b/test-runner-data/v2/case-management/delete-custom-attribute-from-case-returns-not-found-response.json new file mode 100644 index 0000000000..d43be99072 --- /dev/null +++ b/test-runner-data/v2/case-management/delete-custom-attribute-from-case-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Delete custom attribute from case returns \"Not Found\" response", + "operation_id": "DeleteCaseCustomAttribute", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "custom_attribute_key", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid_key" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/custom_attributes/{custom_attribute_key}" + }, + "scenario": "Delete custom attribute from case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/get-the-details-of-a-case-returns-not-found-response.json b/test-runner-data/v2/case-management/get-the-details-of-a-case-returns-not-found-response.json new file mode 100644 index 0000000000..d18ab3f983 --- /dev/null +++ b/test-runner-data/v2/case-management/get-the-details-of-a-case-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Get the details of a case returns \"Not Found\" response", + "operation_id": "GetCase", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}" + }, + "scenario": "Get the details of a case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/get-the-details-of-a-case-returns-ok-response.json b/test-runner-data/v2/case-management/get-the-details-of-a-case-returns-ok-response.json new file mode 100644 index 0000000000..5296b042e3 --- /dev/null +++ b/test-runner-data/v2/case-management/get-the-details-of-a-case-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Get the details of a case returns \"OK\" response", + "operation_id": "GetCase", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}" + }, + "scenario": "Get the details of a case returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/search-cases-returns-ok-response-with-pagination.json b/test-runner-data/v2/case-management/search-cases-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..4d4ce6a280 --- /dev/null +++ b/test-runner-data/v2/case-management/search-cases-returns-ok-response-with-pagination.json @@ -0,0 +1,51 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Search cases returns \"OK\" response with pagination", + "operation_id": "SearchCases", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "status:closed" + }, + "style": null + } + ], + "path": "/api/v2/cases" + }, + "scenario": "Search cases returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/unarchive-case-returns-bad-request-response.json b/test-runner-data/v2/case-management/unarchive-case-returns-bad-request-response.json new file mode 100644 index 0000000000..c7f80df339 --- /dev/null +++ b/test-runner-data/v2/case-management/unarchive-case-returns-bad-request-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Unarchive case returns \"Bad Request\" response", + "operation_id": "UnarchiveCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseEmptyRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/unarchive" + }, + "scenario": "Unarchive case returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/unarchive-case-returns-not-found-response.json b/test-runner-data/v2/case-management/unarchive-case-returns-not-found-response.json new file mode 100644 index 0000000000..a2871a87e0 --- /dev/null +++ b/test-runner-data/v2/case-management/unarchive-case-returns-not-found-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Unarchive case returns \"Not Found\" response", + "operation_id": "UnarchiveCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseEmptyRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/unarchive" + }, + "scenario": "Unarchive case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/unarchive-case-returns-ok-response.json b/test-runner-data/v2/case-management/unarchive-case-returns-ok-response.json new file mode 100644 index 0000000000..b4f4d97322 --- /dev/null +++ b/test-runner-data/v2/case-management/unarchive-case-returns-ok-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Unarchive case returns \"OK\" response", + "operation_id": "UnarchiveCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseEmptyRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/unarchive" + }, + "scenario": "Unarchive case returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/unassign-case-returns-bad-request-response.json b/test-runner-data/v2/case-management/unassign-case-returns-bad-request-response.json new file mode 100644 index 0000000000..ef9bf958e3 --- /dev/null +++ b/test-runner-data/v2/case-management/unassign-case-returns-bad-request-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Unassign case returns \"Bad Request\" response", + "operation_id": "UnassignCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseEmptyRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/unassign" + }, + "scenario": "Unassign case returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/unassign-case-returns-not-found-response.json b/test-runner-data/v2/case-management/unassign-case-returns-not-found-response.json new file mode 100644 index 0000000000..43abc29cb4 --- /dev/null +++ b/test-runner-data/v2/case-management/unassign-case-returns-not-found-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Unassign case returns \"Not Found\" response", + "operation_id": "UnassignCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseEmptyRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/unassign" + }, + "scenario": "Unassign case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/unassign-case-returns-ok-response.json b/test-runner-data/v2/case-management/unassign-case-returns-ok-response.json new file mode 100644 index 0000000000..ea72e8e987 --- /dev/null +++ b/test-runner-data/v2/case-management/unassign-case-returns-ok-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Unassign case returns \"OK\" response", + "operation_id": "UnassignCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseEmptyRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/unassign" + }, + "scenario": "Unassign case returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-a-project-returns-bad-request-response.json b/test-runner-data/v2/case-management/update-a-project-returns-bad-request-response.json new file mode 100644 index 0000000000..f7ee57db24 --- /dev/null +++ b/test-runner-data/v2/case-management/update-a-project-returns-bad-request-response.json @@ -0,0 +1,47 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Update a project returns \"Bad Request\" response", + "operation_id": "UpdateProject", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ProjectUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "d4bbe1af-f36e-42f1-87c1-493ca35c320e" + }, + "style": null + } + ], + "path": "/api/v2/cases/projects/{project_id}" + }, + "scenario": "Update a project returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-a-project-returns-not-found-response.json b/test-runner-data/v2/case-management/update-a-project-returns-not-found-response.json new file mode 100644 index 0000000000..bebfc376f9 --- /dev/null +++ b/test-runner-data/v2/case-management/update-a-project-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Update a project returns \"Not Found\" response", + "operation_id": "UpdateProject", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ProjectUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Updated Project Name" + }, + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/projects/{project_id}" + }, + "scenario": "Update a project returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-a-project-returns-ok-response.json b/test-runner-data/v2/case-management/update-a-project-returns-ok-response.json new file mode 100644 index 0000000000..682f3206bc --- /dev/null +++ b/test-runner-data/v2/case-management/update-a-project-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Update a project returns \"OK\" response", + "operation_id": "UpdateProject", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ProjectUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Updated Project Name {{ unique }}" + }, + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "d4bbe1af-f36e-42f1-87c1-493ca35c320e" + }, + "style": null + } + ], + "path": "/api/v2/cases/projects/{project_id}" + }, + "scenario": "Update a project returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-attributes-returns-not-found-response.json b/test-runner-data/v2/case-management/update-case-attributes-returns-not-found-response.json new file mode 100644 index 0000000000..5b8bcdc79a --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-attributes-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Update case attributes returns \"Not Found\" response", + "operation_id": "UpdateAttributes", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateAttributesRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "attributes": {} + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/attributes" + }, + "scenario": "Update case attributes returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-attributes-returns-ok-response.json b/test-runner-data/v2/case-management/update-case-attributes-returns-ok-response.json new file mode 100644 index 0000000000..7295852f3b --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-attributes-returns-ok-response.json @@ -0,0 +1,61 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Update case attributes returns \"OK\" response", + "operation_id": "UpdateAttributes", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateAttributesRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "attributes": { + "env": [ + "test" + ], + "service": [ + "web-store", + "web-api" + ], + "team": [ + "engineer" + ] + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/attributes" + }, + "scenario": "Update case attributes returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-custom-attribute-returns-not-found-response.json b/test-runner-data/v2/case-management/update-case-custom-attribute-returns-not-found-response.json new file mode 100644 index 0000000000..b6e25eff56 --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-custom-attribute-returns-not-found-response.json @@ -0,0 +1,71 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Update case custom attribute returns \"Not Found\" response", + "operation_id": "UpdateCaseCustomAttribute", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateCustomAttributeRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_multi": true, + "type": "TEXT", + "value": [ + "Abba", + "The Cure" + ] + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "custom_attribute_key", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid_key" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/custom_attributes/{custom_attribute_key}" + }, + "scenario": "Update case custom attribute returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-description-returns-not-found-response.json b/test-runner-data/v2/case-management/update-case-description-returns-not-found-response.json new file mode 100644 index 0000000000..63351f067c --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-description-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Update case description returns \"Not Found\" response", + "operation_id": "UpdateCaseDescription", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateDescriptionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Seeing some weird memory increase... We shouldn't ignore this" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "0198c6b0-2a0a-7bea-87ff-3876f119aebb" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/description" + }, + "scenario": "Update case description returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-description-returns-ok-response.json b/test-runner-data/v2/case-management/update-case-description-returns-ok-response.json new file mode 100644 index 0000000000..936a95a91a --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-description-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Update case description returns \"OK\" response", + "operation_id": "UpdateCaseDescription", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateDescriptionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Seeing some weird memory increase... Updating the description" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/description" + }, + "scenario": "Update case description returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-priority-returns-bad-request-response.json b/test-runner-data/v2/case-management/update-case-priority-returns-bad-request-response.json new file mode 100644 index 0000000000..f23ac817d4 --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-priority-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Update case priority returns \"Bad Request\" response", + "operation_id": "UpdatePriority", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdatePriorityRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "priority": "P1234" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/priority" + }, + "scenario": "Update case priority returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-priority-returns-not-found-response.json b/test-runner-data/v2/case-management/update-case-priority-returns-not-found-response.json new file mode 100644 index 0000000000..6dd66cfc75 --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-priority-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Update case priority returns \"Not Found\" response", + "operation_id": "UpdatePriority", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdatePriorityRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "priority": "P3" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/priority" + }, + "scenario": "Update case priority returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-priority-returns-ok-response.json b/test-runner-data/v2/case-management/update-case-priority-returns-ok-response.json new file mode 100644 index 0000000000..b9c9ebe742 --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-priority-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Update case priority returns \"OK\" response", + "operation_id": "UpdatePriority", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdatePriorityRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "priority": "P3" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/priority" + }, + "scenario": "Update case priority returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-status-returns-bad-request-response.json b/test-runner-data/v2/case-management/update-case-status-returns-bad-request-response.json new file mode 100644 index 0000000000..a2ec7890b5 --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-status-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Update case status returns \"Bad Request\" response", + "operation_id": "UpdateStatus", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateStatusRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "status": "OPENED" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/status" + }, + "scenario": "Update case status returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-status-returns-not-found-response.json b/test-runner-data/v2/case-management/update-case-status-returns-not-found-response.json new file mode 100644 index 0000000000..8ab5c87f0d --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-status-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Update case status returns \"Not Found\" response", + "operation_id": "UpdateStatus", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateStatusRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "status": "OPEN" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/status" + }, + "scenario": "Update case status returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-status-returns-ok-response.json b/test-runner-data/v2/case-management/update-case-status-returns-ok-response.json new file mode 100644 index 0000000000..b070dd6746 --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-status-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Update case status returns \"OK\" response", + "operation_id": "UpdateStatus", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateStatusRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "status": "IN_PROGRESS" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/status" + }, + "scenario": "Update case status returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-title-returns-bad-request-response.json b/test-runner-data/v2/case-management/update-case-title-returns-bad-request-response.json new file mode 100644 index 0000000000..260cad5266 --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-title-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 400, + "feature": "Case Management", + "id": "v2/Case Management/Update case title returns \"Bad Request\" response", + "operation_id": "UpdateCaseTitle", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateTitleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "title": "" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/title" + }, + "scenario": "Update case title returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-title-returns-not-found-response.json b/test-runner-data/v2/case-management/update-case-title-returns-not-found-response.json new file mode 100644 index 0000000000..ccc706d06f --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-title-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 404, + "feature": "Case Management", + "id": "v2/Case Management/Update case title returns \"Not Found\" response", + "operation_id": "UpdateCaseTitle", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateTitleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "title": "Memory leak investigation on API" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "0198c6b8-b08f-7c08-978a-d95217f2eeac" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/title" + }, + "scenario": "Update case title returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/case-management/update-case-title-returns-ok-response.json b/test-runner-data/v2/case-management/update-case-title-returns-ok-response.json new file mode 100644 index 0000000000..485b666fa9 --- /dev/null +++ b/test-runner-data/v2/case-management/update-case-title-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CaseManagement", + "expected_status": 200, + "feature": "Case Management", + "id": "v2/Case Management/Update case title returns \"OK\" response", + "operation_id": "UpdateCaseTitle", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CaseUpdateTitleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "title": "[UPDATED] Memory leak investigation on API" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "case.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/cases/{case_id}/title" + }, + "scenario": "Update case title returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/aggregate-pipelines-events-returns-ok-response.json b/test-runner-data/v2/ci-visibility-pipelines/aggregate-pipelines-events-returns-ok-response.json new file mode 100644 index 0000000000..dd53f0c3d4 --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/aggregate-pipelines-events-returns-ok-response.json @@ -0,0 +1,49 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 200, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Aggregate pipelines events returns \"OK\" response", + "operation_id": "AggregateCIAppPipelineEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppPipelinesAggregateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "compute": [ + { + "aggregation": "pc90", + "metric": "@duration", + "type": "total" + } + ], + "filter": { + "from": "now-15m", + "query": "@ci.provider.name:(gitlab OR github)", + "to": "now" + }, + "group_by": [ + { + "facet": "@ci.status", + "limit": 10, + "total": false + } + ], + "options": { + "timezone": "GMT" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/ci/pipelines/analytics/aggregate" + }, + "scenario": "Aggregate pipelines events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/get-a-list-of-pipelines-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/ci-visibility-pipelines/get-a-list-of-pipelines-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..6ecc603e50 --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/get-a-list-of-pipelines-events-returns-ok-response-with-pagination.json @@ -0,0 +1,67 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 200, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Get a list of pipelines events returns \"OK\" response with pagination", + "operation_id": "ListCIAppPipelineEvents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[from]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 30s') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[to]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/ci/pipelines/events" + }, + "scenario": "Get a list of pipelines events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/get-a-list-of-pipelines-events-returns-ok-response.json b/test-runner-data/v2/ci-visibility-pipelines/get-a-list-of-pipelines-events-returns-ok-response.json new file mode 100644 index 0000000000..29de407a44 --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/get-a-list-of-pipelines-events-returns-ok-response.json @@ -0,0 +1,83 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 200, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Get a list of pipelines events returns \"OK\" response", + "operation_id": "ListCIAppPipelineEvents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[query]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "@ci.provider.name:circleci" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[from]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 30m') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[to]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 5 + }, + "style": null + } + ], + "path": "/api/v2/ci/pipelines/events" + }, + "scenario": "Get a list of pipelines events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/search-pipelines-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/ci-visibility-pipelines/search-pipelines-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..1516c4d32e --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/search-pipelines-events-returns-ok-response-with-pagination.json @@ -0,0 +1,38 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 200, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Search pipelines events returns \"OK\" response with pagination", + "operation_id": "SearchCIAppPipelineEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppPipelineEventsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-30s", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": true, + "parameters": [], + "path": "/api/v2/ci/pipelines/events/search" + }, + "scenario": "Search pipelines events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/search-pipelines-events-returns-ok-response.json b/test-runner-data/v2/ci-visibility-pipelines/search-pipelines-events-returns-ok-response.json new file mode 100644 index 0000000000..f8748af4cd --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/search-pipelines-events-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 200, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Search pipelines events returns \"OK\" response", + "operation_id": "SearchCIAppPipelineEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppPipelineEventsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "query": "@ci.provider.name:github AND @ci.status:error", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 5 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/ci/pipelines/events/search" + }, + "scenario": "Search pipelines events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/send-pipeline-event-returns-request-accepted-for-processing-response.json b/test-runner-data/v2/ci-visibility-pipelines/send-pipeline-event-returns-request-accepted-for-processing-response.json new file mode 100644 index 0000000000..2e441c7aab --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/send-pipeline-event-returns-request-accepted-for-processing-response.json @@ -0,0 +1,47 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 202, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Send pipeline event returns \"Request accepted for processing\" response", + "operation_id": "CreateCIAppPipelineEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppCreatePipelineEventRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "resource": { + "end": "{{ timeISO('now - 30s') }}", + "git": { + "author_email": "john.doe@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "7f263865994b76066c4612fd1965215e7dcb4cd2" + }, + "level": "pipeline", + "name": "Deploy to AWS", + "partial_retry": false, + "start": "{{ timeISO('now - 120s') }}", + "status": "success", + "unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1" + } + }, + "type": "cipipeline_resource_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/ci/pipeline" + }, + "scenario": "Send pipeline event returns \"Request accepted for processing\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/send-pipeline-event-with-custom-provider-returns-request-accepted-for-processing-response.json b/test-runner-data/v2/ci-visibility-pipelines/send-pipeline-event-with-custom-provider-returns-request-accepted-for-processing-response.json new file mode 100644 index 0000000000..3701f64321 --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/send-pipeline-event-with-custom-provider-returns-request-accepted-for-processing-response.json @@ -0,0 +1,48 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 202, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Send pipeline event with custom provider returns \"Request accepted for processing\" response", + "operation_id": "CreateCIAppPipelineEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppCreatePipelineEventRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "provider_name": "example-provider", + "resource": { + "end": "{{ timeISO('now - 30s') }}", + "git": { + "author_email": "john.doe@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "7f263865994b76066c4612fd1965215e7dcb4cd2" + }, + "level": "pipeline", + "name": "Deploy to AWS", + "partial_retry": false, + "start": "{{ timeISO('now - 120s') }}", + "status": "success", + "unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1" + } + }, + "type": "cipipeline_resource_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/ci/pipeline" + }, + "scenario": "Send pipeline event with custom provider returns \"Request accepted for processing\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/send-running-job-event-returns-request-accepted-for-processing-response.json b/test-runner-data/v2/ci-visibility-pipelines/send-running-job-event-returns-request-accepted-for-processing-response.json new file mode 100644 index 0000000000..665f32907e --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/send-running-job-event-returns-request-accepted-for-processing-response.json @@ -0,0 +1,42 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 202, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Send running job event returns \"Request accepted for processing\" response", + "operation_id": "CreateCIAppPipelineEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppCreatePipelineEventRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "resource": { + "id": "cf9456de-8b9e-4c27-aa79-27b1e78c1a33", + "level": "job", + "name": "Build image", + "pipeline_name": "Deploy to AWS", + "pipeline_unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "start": "{{ timeISO('now - 120s') }}", + "status": "running", + "url": "https://my-ci-provider.example/jobs/my-jobs/run/1" + } + }, + "type": "cipipeline_resource_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/ci/pipeline" + }, + "scenario": "Send running job event returns \"Request accepted for processing\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/send-running-pipeline-event-returns-request-accepted-for-processing-response.json b/test-runner-data/v2/ci-visibility-pipelines/send-running-pipeline-event-returns-request-accepted-for-processing-response.json new file mode 100644 index 0000000000..5eb7365df3 --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/send-running-pipeline-event-returns-request-accepted-for-processing-response.json @@ -0,0 +1,46 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 202, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Send running pipeline event returns \"Request accepted for processing\" response", + "operation_id": "CreateCIAppPipelineEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppCreatePipelineEventRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "resource": { + "git": { + "author_email": "john.doe@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "7f263865994b76066c4612fd1965215e7dcb4cd2" + }, + "level": "pipeline", + "name": "Deploy to AWS", + "partial_retry": false, + "start": "{{ timeISO('now - 120s') }}", + "status": "running", + "unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1" + } + }, + "type": "cipipeline_resource_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/ci/pipeline" + }, + "scenario": "Send running pipeline event returns \"Request accepted for processing\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-pipelines/send-several-pipeline-events-returns-request-accepted-for-processing-response.json b/test-runner-data/v2/ci-visibility-pipelines/send-several-pipeline-events-returns-request-accepted-for-processing-response.json new file mode 100644 index 0000000000..d24282b877 --- /dev/null +++ b/test-runner-data/v2/ci-visibility-pipelines/send-several-pipeline-events-returns-request-accepted-for-processing-response.json @@ -0,0 +1,71 @@ +{ + "api": "CIVisibilityPipelines", + "expected_status": 202, + "feature": "CI Visibility Pipelines", + "id": "v2/CI Visibility Pipelines/Send several pipeline events returns \"Request accepted for processing\" response", + "operation_id": "CreateCIAppPipelineEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppCreatePipelineEventRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "provider_name": "example-provider", + "resource": { + "end": "{{ timeISO('now - 30s') }}", + "git": { + "author_email": "john.doe@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "7f263865994b76066c4612fd1965215e7dcb4cd2" + }, + "level": "pipeline", + "name": "Deploy to AWS", + "partial_retry": false, + "start": "{{ timeISO('now - 120s') }}", + "status": "success", + "unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1" + } + }, + "type": "cipipeline_resource_request" + }, + { + "attributes": { + "provider_name": "example-provider", + "resource": { + "end": "{{ timeISO('now - 45s') }}", + "git": { + "author_email": "jane.smith@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "9a4f7c28b3e5d12f8e6c9b2a5d8f3e1c7b4a6d9e" + }, + "level": "pipeline", + "name": "Deploy to Production", + "partial_retry": false, + "start": "{{ timeISO('now - 180s') }}", + "status": "success", + "unique_id": "7b2c8f9e-aa15-4d22-9c7d-83f4e065138b", + "url": "https://my-ci-provider.example/pipelines/prod-pipeline/run/2" + } + }, + "type": "cipipeline_resource_request" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/ci/pipeline" + }, + "scenario": "Send several pipeline events returns \"Request accepted for processing\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-tests/aggregate-tests-events-returns-ok-response.json b/test-runner-data/v2/ci-visibility-tests/aggregate-tests-events-returns-ok-response.json new file mode 100644 index 0000000000..bfcae68ed8 --- /dev/null +++ b/test-runner-data/v2/ci-visibility-tests/aggregate-tests-events-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "CIVisibilityTests", + "expected_status": 200, + "feature": "CI Visibility Tests", + "id": "v2/CI Visibility Tests/Aggregate tests events returns \"OK\" response", + "operation_id": "AggregateCIAppTestEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppTestsAggregateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "compute": [ + { + "aggregation": "count", + "metric": "@test.is_flaky", + "type": "total" + } + ], + "filter": { + "from": "now-15m", + "query": "@language:(python OR go)", + "to": "now" + }, + "group_by": [ + { + "facet": "@git.branch", + "limit": 10, + "sort": { + "order": "asc" + }, + "total": false + } + ], + "options": { + "timezone": "GMT" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/ci/tests/analytics/aggregate" + }, + "scenario": "Aggregate tests events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-tests/get-a-list-of-tests-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/ci-visibility-tests/get-a-list-of-tests-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..2644a8b623 --- /dev/null +++ b/test-runner-data/v2/ci-visibility-tests/get-a-list-of-tests-events-returns-ok-response-with-pagination.json @@ -0,0 +1,67 @@ +{ + "api": "CIVisibilityTests", + "expected_status": 200, + "feature": "CI Visibility Tests", + "id": "v2/CI Visibility Tests/Get a list of tests events returns \"OK\" response with pagination", + "operation_id": "ListCIAppTestEvents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[from]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 30s') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[to]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/ci/tests/events" + }, + "scenario": "Get a list of tests events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-tests/get-a-list-of-tests-events-returns-ok-response.json b/test-runner-data/v2/ci-visibility-tests/get-a-list-of-tests-events-returns-ok-response.json new file mode 100644 index 0000000000..5d9a698daa --- /dev/null +++ b/test-runner-data/v2/ci-visibility-tests/get-a-list-of-tests-events-returns-ok-response.json @@ -0,0 +1,83 @@ +{ + "api": "CIVisibilityTests", + "expected_status": 200, + "feature": "CI Visibility Tests", + "id": "v2/CI Visibility Tests/Get a list of tests events returns \"OK\" response", + "operation_id": "ListCIAppTestEvents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[query]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "@test.service:web-ui-tests" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[from]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 30s') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[to]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 5 + }, + "style": null + } + ], + "path": "/api/v2/ci/tests/events" + }, + "scenario": "Get a list of tests events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-tests/search-tests-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/ci-visibility-tests/search-tests-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..a83b63da8f --- /dev/null +++ b/test-runner-data/v2/ci-visibility-tests/search-tests-events-returns-ok-response-with-pagination.json @@ -0,0 +1,36 @@ +{ + "api": "CIVisibilityTests", + "expected_status": 200, + "feature": "CI Visibility Tests", + "id": "v2/CI Visibility Tests/Search tests events returns \"OK\" response with pagination", + "operation_id": "SearchCIAppTestEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppTestEventsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "query": "@test.status:pass AND -@language:python", + "to": "now" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": true, + "parameters": [], + "path": "/api/v2/ci/tests/events/search" + }, + "scenario": "Search tests events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ci-visibility-tests/search-tests-events-returns-ok-response.json b/test-runner-data/v2/ci-visibility-tests/search-tests-events-returns-ok-response.json new file mode 100644 index 0000000000..428ea2d80e --- /dev/null +++ b/test-runner-data/v2/ci-visibility-tests/search-tests-events-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "CIVisibilityTests", + "expected_status": 200, + "feature": "CI Visibility Tests", + "id": "v2/CI Visibility Tests/Search tests events returns \"OK\" response", + "operation_id": "SearchCIAppTestEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CIAppTestEventsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "query": "@test.service:web-ui-tests AND @test.status:skip", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 25 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/ci/tests/events/search" + }, + "scenario": "Search tests events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/create-cloud-cost-management-aws-cur-config-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/create-cloud-cost-management-aws-cur-config-returns-ok-response.json new file mode 100644 index 0000000000..bdf32370b1 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/create-cloud-cost-management-aws-cur-config-returns-ok-response.json @@ -0,0 +1,37 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Create Cloud Cost Management AWS CUR config returns \"OK\" response", + "operation_id": "CreateCostAWSCURConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsCURConfigPostRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_id": "123456789123", + "bucket_name": "dd-cost-bucket", + "bucket_region": "us-east-1", + "report_name": "dd-report-name", + "report_prefix": "dd-report-prefix" + }, + "type": "aws_cur_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/aws_cur_config" + }, + "scenario": "Create Cloud Cost Management AWS CUR config returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/create-cloud-cost-management-azure-configs-returns-bad-request-response.json b/test-runner-data/v2/cloud-cost-management/create-cloud-cost-management-azure-configs-returns-bad-request-response.json new file mode 100644 index 0000000000..c1367bc228 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/create-cloud-cost-management-azure-configs-returns-bad-request-response.json @@ -0,0 +1,47 @@ +{ + "api": "CloudCostManagement", + "expected_status": 400, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Create Cloud Cost Management Azure configs returns \"Bad Request\" response", + "operation_id": "CreateCostAzureUCConfigs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AzureUCConfigPostRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_id": "1234abcd-1234-abcd-1234-1234abcd1234", + "actual_bill_config": { + "export_name": "dd-actual-export", + "export_path": "dd-export-path", + "storage_account": "dd-storage-account", + "storage_container": "dd-storage-container" + }, + "amortized_bill_config": { + "export_name": "dd-actual-export", + "export_path": "dd-export-path", + "storage_account": "dd-storage-account", + "storage_container": "dd-storage-container" + }, + "client_id": "1234abcd-1234-abcd-1234-1234abcd1234", + "scope": "this_is_an_invalid_scope" + }, + "type": "azure_uc_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/azure_uc_config" + }, + "scenario": "Create Cloud Cost Management Azure configs returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/create-cloud-cost-management-azure-configs-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/create-cloud-cost-management-azure-configs-returns-ok-response.json new file mode 100644 index 0000000000..825170b04d --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/create-cloud-cost-management-azure-configs-returns-ok-response.json @@ -0,0 +1,47 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Create Cloud Cost Management Azure configs returns \"OK\" response", + "operation_id": "CreateCostAzureUCConfigs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AzureUCConfigPostRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_id": "1234abcd-1234-abcd-1234-1234abcd1234", + "actual_bill_config": { + "export_name": "dd-actual-export", + "export_path": "dd-export-path", + "storage_account": "dd-storage-account", + "storage_container": "dd-storage-container" + }, + "amortized_bill_config": { + "export_name": "dd-actual-export", + "export_path": "dd-export-path", + "storage_account": "dd-storage-account", + "storage_container": "dd-storage-container" + }, + "client_id": "1234abcd-1234-abcd-1234-1234abcd1234", + "scope": "subscriptions/1234abcd-1234-abcd-1234-1234abcd1234" + }, + "type": "azure_uc_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/azure_uc_config" + }, + "scenario": "Create Cloud Cost Management Azure configs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/create-custom-allocation-rule-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/create-custom-allocation-rule-returns-ok-response.json new file mode 100644 index 0000000000..2ea49dd3fc --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/create-custom-allocation-rule-returns-ok-response.json @@ -0,0 +1,80 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Create custom allocation rule returns \"OK\" response", + "operation_id": "CreateCustomAllocationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ArbitraryCostUpsertRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "costs_to_allocate": [ + { + "condition": "is", + "tag": "account_id", + "value": "123456789" + }, + { + "condition": "in", + "tag": "environment", + "value": "", + "values": [ + "production", + "staging" + ] + } + ], + "enabled": true, + "order_id": 1, + "provider": [ + "aws", + "gcp" + ], + "rule_name": "example-arbitrary-cost-rule", + "strategy": { + "allocated_by_tag_keys": [ + "team", + "environment" + ], + "based_on_costs": [ + { + "condition": "is", + "tag": "service", + "value": "web-api" + }, + { + "condition": "not in", + "tag": "team", + "value": "", + "values": [ + "legacy", + "deprecated" + ] + } + ], + "granularity": "daily", + "method": "proportional" + }, + "type": "shared" + }, + "type": "upsert_arbitrary_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/arbitrary_rule" + }, + "scenario": "Create custom allocation rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/create-google-cloud-usage-cost-config-returns-bad-request-response.json b/test-runner-data/v2/cloud-cost-management/create-google-cloud-usage-cost-config-returns-bad-request-response.json new file mode 100644 index 0000000000..df6cd27497 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/create-google-cloud-usage-cost-config-returns-bad-request-response.json @@ -0,0 +1,38 @@ +{ + "api": "CloudCostManagement", + "expected_status": 400, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Create Google Cloud Usage Cost config returns \"Bad Request\" response", + "operation_id": "CreateCostGCPUsageCostConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPUsageCostConfigPostRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "billing_account_id": "123456_A123BC_12AB34", + "bucket_name": "dd-cost-bucket", + "export_dataset_name": "billing", + "export_prefix": "datadog_cloud_cost_usage_export", + "export_project_name": "dd-cloud-cost-report", + "service_account": "InvalidServiceAccount" + }, + "type": "gcp_uc_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/gcp_uc_config" + }, + "scenario": "Create Google Cloud Usage Cost config returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/create-google-cloud-usage-cost-config-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/create-google-cloud-usage-cost-config-returns-ok-response.json new file mode 100644 index 0000000000..09aad62d00 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/create-google-cloud-usage-cost-config-returns-ok-response.json @@ -0,0 +1,38 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Create Google Cloud Usage Cost config returns \"OK\" response", + "operation_id": "CreateCostGCPUsageCostConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPUsageCostConfigPostRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "billing_account_id": "123456_A123BC_12AB34", + "bucket_name": "dd-cost-bucket", + "export_dataset_name": "billing", + "export_prefix": "datadog_cloud_cost_usage_export", + "export_project_name": "dd-cloud-cost-report", + "service_account": "dd-ccm-gcp-integration@my-environment.iam.gserviceaccount.com" + }, + "type": "gcp_uc_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/gcp_uc_config" + }, + "scenario": "Create Google Cloud Usage Cost config returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/create-tag-pipeline-ruleset-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/create-tag-pipeline-ruleset-returns-ok-response.json new file mode 100644 index 0000000000..767b7e873d --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/create-tag-pipeline-ruleset-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Create tag pipeline ruleset returns \"OK\" response", + "operation_id": "CreateTagPipelinesRuleset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateRulesetRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "rules": [ + { + "enabled": true, + "mapping": null, + "name": "Add Cost Center Tag", + "query": { + "addition": { + "key": "cost_center", + "value": "engineering" + }, + "case_insensitivity": false, + "if_not_exists": true, + "query": "account_id:\"123456789\" AND service:\"web-api\"" + }, + "reference_table": null + } + ] + }, + "id": "New Ruleset", + "type": "create_ruleset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/tags/enrichment" + }, + "scenario": "Create tag pipeline ruleset returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/create-tag-pipeline-ruleset-with-if-tag-exists-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/create-tag-pipeline-ruleset-with-if-tag-exists-returns-ok-response.json new file mode 100644 index 0000000000..52de26fed6 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/create-tag-pipeline-ruleset-with-if-tag-exists-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Create tag pipeline ruleset with if_tag_exists returns \"OK\" response", + "operation_id": "CreateTagPipelinesRuleset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateRulesetRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "rules": [ + { + "enabled": true, + "mapping": null, + "name": "Add Cost Center Tag", + "query": { + "addition": { + "key": "cost_center", + "value": "engineering" + }, + "case_insensitivity": false, + "if_tag_exists": "replace", + "query": "account_id:\"123456789\" AND service:\"web-api\"" + }, + "reference_table": null + } + ] + }, + "id": "New Ruleset", + "type": "create_ruleset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/tags/enrichment" + }, + "scenario": "Create tag pipeline ruleset with if_tag_exists returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-a-budget-returns-bad-request-response.json b/test-runner-data/v2/cloud-cost-management/delete-a-budget-returns-bad-request-response.json new file mode 100644 index 0000000000..b8cf245cd2 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-a-budget-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 400, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete a budget returns \"Bad Request\" response", + "operation_id": "DeleteBudget", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "budget_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "1" + }, + "style": null + } + ], + "path": "/api/v2/cost/budget/{budget_id}" + }, + "scenario": "Delete a budget returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-aws-cur-config-returns-no-content-response.json b/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-aws-cur-config-returns-no-content-response.json new file mode 100644 index 0000000000..5e386c775b --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-aws-cur-config-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 204, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete Cloud Cost Management AWS CUR config returns \"No Content\" response", + "operation_id": "DeleteCostAWSCURConfig", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 100 + }, + "style": null + } + ], + "path": "/api/v2/cost/aws_cur_config/{cloud_account_id}" + }, + "scenario": "Delete Cloud Cost Management AWS CUR config returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-aws-cur-config-returns-not-found-response.json b/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-aws-cur-config-returns-not-found-response.json new file mode 100644 index 0000000000..d5a869c8de --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-aws-cur-config-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 404, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete Cloud Cost Management AWS CUR config returns \"Not Found\" response", + "operation_id": "DeleteCostAWSCURConfig", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v2/cost/aws_cur_config/{cloud_account_id}" + }, + "scenario": "Delete Cloud Cost Management AWS CUR config returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-azure-config-returns-no-content-response.json b/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-azure-config-returns-no-content-response.json new file mode 100644 index 0000000000..3e381ff8e5 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-azure-config-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 204, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete Cloud Cost Management Azure config returns \"No Content\" response", + "operation_id": "DeleteCostAzureUCConfig", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 100 + }, + "style": null + } + ], + "path": "/api/v2/cost/azure_uc_config/{cloud_account_id}" + }, + "scenario": "Delete Cloud Cost Management Azure config returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-azure-config-returns-not-found-response.json b/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-azure-config-returns-not-found-response.json new file mode 100644 index 0000000000..3c2cbd9340 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-cloud-cost-management-azure-config-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 404, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete Cloud Cost Management Azure config returns \"Not Found\" response", + "operation_id": "DeleteCostAzureUCConfig", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v2/cost/azure_uc_config/{cloud_account_id}" + }, + "scenario": "Delete Cloud Cost Management Azure config returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-custom-allocation-rule-returns-no-content-response.json b/test-runner-data/v2/cloud-cost-management/delete-custom-allocation-rule-returns-no-content-response.json new file mode 100644 index 0000000000..df6fa13598 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-custom-allocation-rule-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 204, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete custom allocation rule returns \"No Content\" response", + "operation_id": "DeleteCustomAllocationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 683 + }, + "style": null + } + ], + "path": "/api/v2/cost/arbitrary_rule/{rule_id}" + }, + "scenario": "Delete custom allocation rule returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-custom-costs-file-returns-no-content-response.json b/test-runner-data/v2/cloud-cost-management/delete-custom-costs-file-returns-no-content-response.json new file mode 100644 index 0000000000..91b8199b3b --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-custom-costs-file-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 204, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete Custom Costs File returns \"No Content\" response", + "operation_id": "DeleteCustomCostsFile", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "file_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "9d055d22-a838-4e9f-bc34-a4f9ab66280c" + }, + "style": null + } + ], + "path": "/api/v2/cost/custom_costs/{file_id}" + }, + "scenario": "Delete Custom Costs File returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-custom-costs-file-returns-not-found-response.json b/test-runner-data/v2/cloud-cost-management/delete-custom-costs-file-returns-not-found-response.json new file mode 100644 index 0000000000..61f9cb5b56 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-custom-costs-file-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 404, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete Custom Costs file returns \"Not Found\" response", + "operation_id": "DeleteCustomCostsFile", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "file_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/cost/custom_costs/{file_id}" + }, + "scenario": "Delete Custom Costs file returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-google-cloud-usage-cost-config-returns-no-content-response.json b/test-runner-data/v2/cloud-cost-management/delete-google-cloud-usage-cost-config-returns-no-content-response.json new file mode 100644 index 0000000000..98cd5c6b69 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-google-cloud-usage-cost-config-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 204, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete Google Cloud Usage Cost config returns \"No Content\" response", + "operation_id": "DeleteCostGCPUsageCostConfig", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 100 + }, + "style": null + } + ], + "path": "/api/v2/cost/gcp_uc_config/{cloud_account_id}" + }, + "scenario": "Delete Google Cloud Usage Cost config returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-google-cloud-usage-cost-config-returns-not-found-response.json b/test-runner-data/v2/cloud-cost-management/delete-google-cloud-usage-cost-config-returns-not-found-response.json new file mode 100644 index 0000000000..fd69cba71b --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-google-cloud-usage-cost-config-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 404, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete Google Cloud Usage Cost config returns \"Not Found\" response", + "operation_id": "DeleteCostGCPUsageCostConfig", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v2/cost/gcp_uc_config/{cloud_account_id}" + }, + "scenario": "Delete Google Cloud Usage Cost config returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/delete-tag-pipeline-ruleset-returns-no-content-response.json b/test-runner-data/v2/cloud-cost-management/delete-tag-pipeline-ruleset-returns-no-content-response.json new file mode 100644 index 0000000000..51cf9653f3 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/delete-tag-pipeline-ruleset-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 204, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Delete tag pipeline ruleset returns \"No Content\" response", + "operation_id": "DeleteTagPipelinesRuleset", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "ruleset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "ee10c3ff-312f-464c-b4f6-46adaa6d00a1" + }, + "style": null + } + ], + "path": "/api/v2/tags/enrichment/{ruleset_id}" + }, + "scenario": "Delete tag pipeline ruleset returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/get-a-budget-returns-not-found-response.json b/test-runner-data/v2/cloud-cost-management/get-a-budget-returns-not-found-response.json new file mode 100644 index 0000000000..9553884608 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/get-a-budget-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 404, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Get a budget returns \"Not Found\" response", + "operation_id": "GetBudget", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "budget_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "9d055d22-0a0a-0a0a-aaa0-00000000000a" + }, + "style": null + } + ], + "path": "/api/v2/cost/budget/{budget_id}" + }, + "scenario": "Get a budget returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/get-a-tag-pipeline-ruleset-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/get-a-tag-pipeline-ruleset-returns-ok-response.json new file mode 100644 index 0000000000..da44e35453 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/get-a-tag-pipeline-ruleset-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Get a tag pipeline ruleset returns \"OK\" response", + "operation_id": "GetTagPipelinesRuleset", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "ruleset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a1e9de9b-b88e-41c6-a0cd-cc0ebd7092de" + }, + "style": null + } + ], + "path": "/api/v2/tags/enrichment/{ruleset_id}" + }, + "scenario": "Get a tag pipeline ruleset returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/get-cost-aws-cur-config-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/get-cost-aws-cur-config-returns-ok-response.json new file mode 100644 index 0000000000..9c05997e42 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/get-cost-aws-cur-config-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Get cost AWS CUR config returns \"OK\" response", + "operation_id": "GetCostAWSCURConfig", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v2/cost/aws_cur_config/{cloud_account_id}" + }, + "scenario": "Get cost AWS CUR config returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/get-cost-azure-uc-config-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/get-cost-azure-uc-config-returns-ok-response.json new file mode 100644 index 0000000000..6af322f82e --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/get-cost-azure-uc-config-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Get cost Azure UC config returns \"OK\" response", + "operation_id": "GetCostAzureUCConfig", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v2/cost/azure_uc_config/{cloud_account_id}" + }, + "scenario": "Get cost Azure UC config returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/get-custom-allocation-rule-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/get-custom-allocation-rule-returns-ok-response.json new file mode 100644 index 0000000000..78079c2566 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/get-custom-allocation-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Get custom allocation rule returns \"OK\" response", + "operation_id": "GetCustomAllocationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 683 + }, + "style": null + } + ], + "path": "/api/v2/cost/arbitrary_rule/{rule_id}" + }, + "scenario": "Get custom allocation rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/get-custom-costs-file-returns-not-found-response.json b/test-runner-data/v2/cloud-cost-management/get-custom-costs-file-returns-not-found-response.json new file mode 100644 index 0000000000..521fb7612b --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/get-custom-costs-file-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 404, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Get Custom Costs file returns \"Not Found\" response", + "operation_id": "GetCustomCostsFile", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "file_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/cost/custom_costs/{file_id}" + }, + "scenario": "Get Custom Costs file returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/get-custom-costs-file-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/get-custom-costs-file-returns-ok-response.json new file mode 100644 index 0000000000..e29126d6b1 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/get-custom-costs-file-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Get Custom Costs File returns \"OK\" response", + "operation_id": "GetCustomCostsFile", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "file_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "9d055d22-a838-4e9f-bc34-a4f9ab66280c" + }, + "style": null + } + ], + "path": "/api/v2/cost/custom_costs/{file_id}" + }, + "scenario": "Get Custom Costs File returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/get-google-cloud-usage-cost-config-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/get-google-cloud-usage-cost-config-returns-ok-response.json new file mode 100644 index 0000000000..92237cf8b6 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/get-google-cloud-usage-cost-config-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Get Google Cloud Usage Cost config returns \"OK\" response", + "operation_id": "GetCostGCPUsageCostConfig", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v2/cost/gcp_uc_config/{cloud_account_id}" + }, + "scenario": "Get Google Cloud Usage Cost config returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/list-budgets-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/list-budgets-returns-ok-response.json new file mode 100644 index 0000000000..c69eb5e975 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/list-budgets-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List budgets returns \"OK\" response", + "operation_id": "ListBudgets", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/budgets" + }, + "scenario": "List budgets returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-aws-cur-configs-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-aws-cur-configs-returns-ok-response.json new file mode 100644 index 0000000000..51c8eb90e5 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-aws-cur-configs-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Cloud Cost Management AWS CUR configs returns \"OK\" response", + "operation_id": "ListCostAWSCURConfigs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/aws_cur_config" + }, + "scenario": "List Cloud Cost Management AWS CUR configs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-azure-configs-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-azure-configs-returns-ok-response.json new file mode 100644 index 0000000000..b82ff30635 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/list-cloud-cost-management-azure-configs-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Cloud Cost Management Azure configs returns \"OK\" response", + "operation_id": "ListCostAzureUCConfigs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/azure_uc_config" + }, + "scenario": "List Cloud Cost Management Azure configs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/list-custom-allocation-rules-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/list-custom-allocation-rules-returns-ok-response.json new file mode 100644 index 0000000000..10ad91fcd2 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/list-custom-allocation-rules-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List custom allocation rules returns \"OK\" response", + "operation_id": "ListCustomAllocationRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/arbitrary_rule" + }, + "scenario": "List custom allocation rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/list-custom-costs-files-returns-bad-request-response.json b/test-runner-data/v2/cloud-cost-management/list-custom-costs-files-returns-bad-request-response.json new file mode 100644 index 0000000000..76f3b62ece --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/list-custom-costs-files-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudCostManagement", + "expected_status": 400, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Custom Costs files returns \"Bad Request\" response", + "operation_id": "ListCustomCostsFiles", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[status]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid_file_status" + }, + "style": null + } + ], + "path": "/api/v2/cost/custom_costs" + }, + "scenario": "List Custom Costs files returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/list-custom-costs-files-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/list-custom-costs-files-returns-ok-response.json new file mode 100644 index 0000000000..00b51838da --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/list-custom-costs-files-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Custom Costs Files returns \"OK\" response", + "operation_id": "ListCustomCostsFiles", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/custom_costs" + }, + "scenario": "List Custom Costs Files returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/list-google-cloud-usage-cost-configs-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/list-google-cloud-usage-cost-configs-returns-ok-response.json new file mode 100644 index 0000000000..80921d8068 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/list-google-cloud-usage-cost-configs-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List Google Cloud Usage Cost configs returns \"OK\" response", + "operation_id": "ListCostGCPUsageCostConfigs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/gcp_uc_config" + }, + "scenario": "List Google Cloud Usage Cost configs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/list-tag-pipeline-rulesets-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/list-tag-pipeline-rulesets-returns-ok-response.json new file mode 100644 index 0000000000..9dee371e9d --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/list-tag-pipeline-rulesets-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/List tag pipeline rulesets returns \"OK\" response", + "operation_id": "ListTagPipelinesRulesets", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/tags/enrichment" + }, + "scenario": "List tag pipeline rulesets returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-aws-cur-config-returns-not-found-response.json b/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-aws-cur-config-returns-not-found-response.json new file mode 100644 index 0000000000..d54cd5a2e8 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-aws-cur-config-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CloudCostManagement", + "expected_status": 404, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Update Cloud Cost Management AWS CUR config returns \"Not Found\" response", + "operation_id": "UpdateCostAWSCURConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsCURConfigPatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "aws_cur_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v2/cost/aws_cur_config/{cloud_account_id}" + }, + "scenario": "Update Cloud Cost Management AWS CUR config returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-aws-cur-config-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-aws-cur-config-returns-ok-response.json new file mode 100644 index 0000000000..f4bb66370f --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-aws-cur-config-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Update Cloud Cost Management AWS CUR config returns \"OK\" response", + "operation_id": "UpdateCostAWSCURConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AwsCURConfigPatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "aws_cur_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 100 + }, + "style": null + } + ], + "path": "/api/v2/cost/aws_cur_config/{cloud_account_id}" + }, + "scenario": "Update Cloud Cost Management AWS CUR config returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-azure-config-returns-not-found-response.json b/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-azure-config-returns-not-found-response.json new file mode 100644 index 0000000000..5f7c6ebe69 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-azure-config-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CloudCostManagement", + "expected_status": 404, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Update Cloud Cost Management Azure config returns \"Not Found\" response", + "operation_id": "UpdateCostAzureUCConfigs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AzureUCConfigPatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "azure_uc_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v2/cost/azure_uc_config/{cloud_account_id}" + }, + "scenario": "Update Cloud Cost Management Azure config returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-azure-config-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-azure-config-returns-ok-response.json new file mode 100644 index 0000000000..fa282458d5 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/update-cloud-cost-management-azure-config-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Update Cloud Cost Management Azure config returns \"OK\" response", + "operation_id": "UpdateCostAzureUCConfigs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AzureUCConfigPatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "azure_uc_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 100 + }, + "style": null + } + ], + "path": "/api/v2/cost/azure_uc_config/{cloud_account_id}" + }, + "scenario": "Update Cloud Cost Management Azure config returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/update-custom-allocation-rule-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/update-custom-allocation-rule-returns-ok-response.json new file mode 100644 index 0000000000..c0bdb0a1d5 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/update-custom-allocation-rule-returns-ok-response.json @@ -0,0 +1,99 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Update custom allocation rule returns \"OK\" response", + "operation_id": "UpdateCustomAllocationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ArbitraryCostUpsertRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "costs_to_allocate": [ + { + "condition": "is", + "tag": "account_id", + "value": "123456789", + "values": [] + }, + { + "condition": "in", + "tag": "environment", + "value": "", + "values": [ + "production", + "staging" + ] + } + ], + "enabled": true, + "order_id": 1, + "provider": [ + "aws", + "gcp" + ], + "rule_name": "example-arbitrary-cost-rule", + "strategy": { + "allocated_by_tag_keys": [ + "team", + "environment" + ], + "based_on_costs": [ + { + "condition": "is", + "tag": "service", + "value": "web-api", + "values": [] + }, + { + "condition": "not in", + "tag": "team", + "value": "", + "values": [ + "legacy", + "deprecated" + ] + } + ], + "granularity": "daily", + "method": "proportional" + }, + "type": "shared" + }, + "type": "upsert_arbitrary_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 683 + }, + "style": null + } + ], + "path": "/api/v2/cost/arbitrary_rule/{rule_id}" + }, + "scenario": "Update custom allocation rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/update-google-cloud-usage-cost-config-returns-not-found-response.json b/test-runner-data/v2/cloud-cost-management/update-google-cloud-usage-cost-config-returns-not-found-response.json new file mode 100644 index 0000000000..9a365d4639 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/update-google-cloud-usage-cost-config-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "CloudCostManagement", + "expected_status": 404, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Update Google Cloud Usage Cost config returns \"Not Found\" response", + "operation_id": "UpdateCostGCPUsageCostConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPUsageCostConfigPatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "gcp_uc_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 123456 + }, + "style": null + } + ], + "path": "/api/v2/cost/gcp_uc_config/{cloud_account_id}" + }, + "scenario": "Update Google Cloud Usage Cost config returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/update-google-cloud-usage-cost-config-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/update-google-cloud-usage-cost-config-returns-ok-response.json new file mode 100644 index 0000000000..d17bbfcd19 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/update-google-cloud-usage-cost-config-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Update Google Cloud Usage Cost config returns \"OK\" response", + "operation_id": "UpdateCostGCPUsageCostConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPUsageCostConfigPatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "gcp_uc_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "cloud_account_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 100 + }, + "style": null + } + ], + "path": "/api/v2/cost/gcp_uc_config/{cloud_account_id}" + }, + "scenario": "Update Google Cloud Usage Cost config returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/update-tag-pipeline-ruleset-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/update-tag-pipeline-ruleset-returns-ok-response.json new file mode 100644 index 0000000000..c95be03dc1 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/update-tag-pipeline-ruleset-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Update tag pipeline ruleset returns \"OK\" response", + "operation_id": "UpdateTagPipelinesRuleset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateRulesetRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "last_version": 3611102, + "rules": [ + { + "enabled": true, + "mapping": { + "destination_key": "team_owner", + "if_not_exists": true, + "source_keys": [ + "account_name", + "account_id" + ] + }, + "name": "Account Name Mapping", + "query": null, + "reference_table": null + } + ] + }, + "id": "New Ruleset", + "type": "update_ruleset" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "ruleset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "ee10c3ff-312f-464c-b4f6-46adaa6d00a1" + }, + "style": null + } + ], + "path": "/api/v2/tags/enrichment/{ruleset_id}" + }, + "scenario": "Update tag pipeline ruleset returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/update-tag-pipeline-ruleset-with-if-tag-exists-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/update-tag-pipeline-ruleset-with-if-tag-exists-returns-ok-response.json new file mode 100644 index 0000000000..338d2a6c24 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/update-tag-pipeline-ruleset-with-if-tag-exists-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Update tag pipeline ruleset with if_tag_exists returns \"OK\" response", + "operation_id": "UpdateTagPipelinesRuleset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateRulesetRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "last_version": 3611102, + "rules": [ + { + "enabled": true, + "mapping": { + "destination_key": "team_owner", + "if_tag_exists": "replace", + "source_keys": [ + "account_name", + "account_id" + ] + }, + "name": "Account Name Mapping", + "query": null, + "reference_table": null + } + ] + }, + "id": "New Ruleset", + "type": "update_ruleset" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "ruleset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "ee10c3ff-312f-464c-b4f6-46adaa6d00a1" + }, + "style": null + } + ], + "path": "/api/v2/tags/enrichment/{ruleset_id}" + }, + "scenario": "Update tag pipeline ruleset with if_tag_exists returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-returns-accepted-response.json b/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-returns-accepted-response.json new file mode 100644 index 0000000000..e4fd713662 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-returns-accepted-response.json @@ -0,0 +1,43 @@ +{ + "api": "CloudCostManagement", + "expected_status": 202, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Upload Custom Costs File returns \"Accepted\" response", + "operation_id": "UploadCustomCostsFile", + "request": { + "body": { + "schema": { + "format": null, + "items": { + "format": null, + "ref": "CustomCostsFileLineItem", + "type": "object" + }, + "ref": "CustomCostsFileUploadRequest", + "type": "array" + }, + "source": "inline", + "value": [ + { + "BilledCost": 250, + "BillingCurrency": "USD", + "ChargeDescription": "my_description", + "ChargePeriodEnd": "2023-06-06", + "ChargePeriodStart": "2023-05-06", + "ProviderName": "my_provider", + "Tags": { + "key": "value" + } + } + ] + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/custom_costs" + }, + "scenario": "Upload Custom Costs File returns \"Accepted\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-returns-bad-request-response.json b/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-returns-bad-request-response.json new file mode 100644 index 0000000000..d633765ca1 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/upload-custom-costs-file-returns-bad-request-response.json @@ -0,0 +1,39 @@ +{ + "api": "CloudCostManagement", + "expected_status": 400, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Upload Custom Costs file returns \"Bad Request\" response", + "operation_id": "UploadCustomCostsFile", + "request": { + "body": { + "schema": { + "format": null, + "items": { + "format": null, + "ref": "CustomCostsFileLineItem", + "type": "object" + }, + "ref": "CustomCostsFileUploadRequest", + "type": "array" + }, + "source": "inline", + "value": [ + { + "BilledCost": 100.5, + "BillingCurrency": "USD", + "ChargeDescription": "Monthly usage charge for my service", + "ChargePeriodEnd": "2023-02-28", + "ChargePeriodStart": "2023-02-01" + } + ] + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost/custom_costs" + }, + "scenario": "Upload Custom Costs file returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-cost-management/validate-query-returns-ok-response.json b/test-runner-data/v2/cloud-cost-management/validate-query-returns-ok-response.json new file mode 100644 index 0000000000..bf5c346867 --- /dev/null +++ b/test-runner-data/v2/cloud-cost-management/validate-query-returns-ok-response.json @@ -0,0 +1,33 @@ +{ + "api": "CloudCostManagement", + "expected_status": 200, + "feature": "Cloud Cost Management", + "id": "v2/Cloud Cost Management/Validate query returns \"OK\" response", + "operation_id": "ValidateQuery", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RulesValidateQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "Query": "example:query AND test:true" + }, + "type": "validate_query" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/tags/enrichment/validate-query" + }, + "scenario": "Validate query returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-network-monitoring/get-aggregated-connections-returns-ok-response.json b/test-runner-data/v2/cloud-network-monitoring/get-aggregated-connections-returns-ok-response.json new file mode 100644 index 0000000000..e5e76b42e0 --- /dev/null +++ b/test-runner-data/v2/cloud-network-monitoring/get-aggregated-connections-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudNetworkMonitoring", + "expected_status": 200, + "feature": "Cloud Network Monitoring", + "id": "v2/Cloud Network Monitoring/Get aggregated connections returns \"OK\" response", + "operation_id": "GetAggregatedConnections", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/network/connections/aggregate" + }, + "scenario": "Get aggregated connections returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-network-monitoring/get-all-aggregated-connections-returns-bad-request-response.json b/test-runner-data/v2/cloud-network-monitoring/get-all-aggregated-connections-returns-bad-request-response.json new file mode 100644 index 0000000000..4165b42318 --- /dev/null +++ b/test-runner-data/v2/cloud-network-monitoring/get-all-aggregated-connections-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudNetworkMonitoring", + "expected_status": 400, + "feature": "Cloud Network Monitoring", + "id": "v2/Cloud Network Monitoring/Get all aggregated connections returns \"Bad Request\" response", + "operation_id": "GetAggregatedConnections", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 8000 + }, + "style": null + } + ], + "path": "/api/v2/network/connections/aggregate" + }, + "scenario": "Get all aggregated connections returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-network-monitoring/get-all-aggregated-dns-traffic-returns-bad-request-response.json b/test-runner-data/v2/cloud-network-monitoring/get-all-aggregated-dns-traffic-returns-bad-request-response.json new file mode 100644 index 0000000000..b5bdb5bc57 --- /dev/null +++ b/test-runner-data/v2/cloud-network-monitoring/get-all-aggregated-dns-traffic-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudNetworkMonitoring", + "expected_status": 400, + "feature": "Cloud Network Monitoring", + "id": "v2/Cloud Network Monitoring/Get all aggregated DNS traffic returns \"Bad Request\" response", + "operation_id": "GetAggregatedDns", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "group_by", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "server_ungrouped,server_service" + }, + "style": null + } + ], + "path": "/api/v2/network/dns/aggregate" + }, + "scenario": "Get all aggregated DNS traffic returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloud-network-monitoring/get-all-aggregated-dns-traffic-returns-ok-response.json b/test-runner-data/v2/cloud-network-monitoring/get-all-aggregated-dns-traffic-returns-ok-response.json new file mode 100644 index 0000000000..a185a96c3b --- /dev/null +++ b/test-runner-data/v2/cloud-network-monitoring/get-all-aggregated-dns-traffic-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudNetworkMonitoring", + "expected_status": 200, + "feature": "Cloud Network Monitoring", + "id": "v2/Cloud Network Monitoring/Get all aggregated DNS traffic returns \"OK\" response", + "operation_id": "GetAggregatedDns", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/network/dns/aggregate" + }, + "scenario": "Get all aggregated DNS traffic returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloudflare-integration/add-cloudflare-account-returns-bad-request-response-due-to-missing-email.json b/test-runner-data/v2/cloudflare-integration/add-cloudflare-account-returns-bad-request-response-due-to-missing-email.json new file mode 100644 index 0000000000..1b76010302 --- /dev/null +++ b/test-runner-data/v2/cloudflare-integration/add-cloudflare-account-returns-bad-request-response-due-to-missing-email.json @@ -0,0 +1,34 @@ +{ + "api": "CloudflareIntegration", + "expected_status": 400, + "feature": "Cloudflare Integration", + "id": "v2/Cloudflare Integration/Add Cloudflare account returns \"Bad Request\" response due to missing email", + "operation_id": "CreateCloudflareAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudflareAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "name": "{{ unique_lower_alnum }}" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations/cloudflare/accounts" + }, + "scenario": "Add Cloudflare account returns \"Bad Request\" response due to missing email", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloudflare-integration/add-cloudflare-account-returns-bad-request-response-using-invalid-auth-key.json b/test-runner-data/v2/cloudflare-integration/add-cloudflare-account-returns-bad-request-response-using-invalid-auth-key.json new file mode 100644 index 0000000000..4ec41495db --- /dev/null +++ b/test-runner-data/v2/cloudflare-integration/add-cloudflare-account-returns-bad-request-response-using-invalid-auth-key.json @@ -0,0 +1,34 @@ +{ + "api": "CloudflareIntegration", + "expected_status": 400, + "feature": "Cloudflare Integration", + "id": "v2/Cloudflare Integration/Add Cloudflare account returns \"Bad Request\" response using invalid auth key", + "operation_id": "CreateCloudflareAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudflareAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "api_key": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "{{ unique_lower_alnum }}" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations/cloudflare/accounts" + }, + "scenario": "Add Cloudflare account returns \"Bad Request\" response using invalid auth key", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloudflare-integration/add-cloudflare-account-returns-created-response.json b/test-runner-data/v2/cloudflare-integration/add-cloudflare-account-returns-created-response.json new file mode 100644 index 0000000000..98b28b7d5a --- /dev/null +++ b/test-runner-data/v2/cloudflare-integration/add-cloudflare-account-returns-created-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudflareIntegration", + "expected_status": 201, + "feature": "Cloudflare Integration", + "id": "v2/Cloudflare Integration/Add Cloudflare account returns \"CREATED\" response", + "operation_id": "CreateCloudflareAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudflareAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "dev@datadoghq.com", + "name": "{{ unique_lower_alnum }}" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations/cloudflare/accounts" + }, + "scenario": "Add Cloudflare account returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloudflare-integration/get-cloudflare-account-returns-ok-response.json b/test-runner-data/v2/cloudflare-integration/get-cloudflare-account-returns-ok-response.json new file mode 100644 index 0000000000..3bd5100391 --- /dev/null +++ b/test-runner-data/v2/cloudflare-integration/get-cloudflare-account-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CloudflareIntegration", + "expected_status": 200, + "feature": "Cloudflare Integration", + "id": "v2/Cloudflare Integration/Get Cloudflare account returns \"OK\" response", + "operation_id": "GetCloudflareAccount", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "cloudflare_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/cloudflare/accounts/{account_id}" + }, + "scenario": "Get Cloudflare account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloudflare-integration/list-cloudflare-accounts-returns-ok-response.json b/test-runner-data/v2/cloudflare-integration/list-cloudflare-accounts-returns-ok-response.json new file mode 100644 index 0000000000..e76318c381 --- /dev/null +++ b/test-runner-data/v2/cloudflare-integration/list-cloudflare-accounts-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CloudflareIntegration", + "expected_status": 200, + "feature": "Cloudflare Integration", + "id": "v2/Cloudflare Integration/List Cloudflare accounts returns \"OK\" response", + "operation_id": "ListCloudflareAccounts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations/cloudflare/accounts" + }, + "scenario": "List Cloudflare accounts returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloudflare-integration/update-cloudflare-account-returns-bad-request-response-due-to-invalid-api-key.json b/test-runner-data/v2/cloudflare-integration/update-cloudflare-account-returns-bad-request-response-due-to-invalid-api-key.json new file mode 100644 index 0000000000..cbe8833b72 --- /dev/null +++ b/test-runner-data/v2/cloudflare-integration/update-cloudflare-account-returns-bad-request-response-due-to-invalid-api-key.json @@ -0,0 +1,50 @@ +{ + "api": "CloudflareIntegration", + "expected_status": 400, + "feature": "Cloudflare Integration", + "id": "v2/Cloudflare Integration/Update Cloudflare account returns \"Bad Request\" response due to invalid api key", + "operation_id": "UpdateCloudflareAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudflareAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "api_key": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "cloudflare_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/cloudflare/accounts/{account_id}" + }, + "scenario": "Update Cloudflare account returns \"Bad Request\" response due to invalid api key", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloudflare-integration/update-cloudflare-account-returns-bad-request-response-due-to-missing-required-email.json b/test-runner-data/v2/cloudflare-integration/update-cloudflare-account-returns-bad-request-response-due-to-missing-required-email.json new file mode 100644 index 0000000000..598432e01a --- /dev/null +++ b/test-runner-data/v2/cloudflare-integration/update-cloudflare-account-returns-bad-request-response-due-to-missing-required-email.json @@ -0,0 +1,50 @@ +{ + "api": "CloudflareIntegration", + "expected_status": 400, + "feature": "Cloudflare Integration", + "id": "v2/Cloudflare Integration/Update Cloudflare account returns \"Bad Request\" response due to missing required email", + "operation_id": "UpdateCloudflareAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudflareAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "api_key": "fakekey" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "cloudflare_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/cloudflare/accounts/{account_id}" + }, + "scenario": "Update Cloudflare account returns \"Bad Request\" response due to missing required email", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/cloudflare-integration/update-cloudflare-account-returns-ok-response.json b/test-runner-data/v2/cloudflare-integration/update-cloudflare-account-returns-ok-response.json new file mode 100644 index 0000000000..a2cf6b409f --- /dev/null +++ b/test-runner-data/v2/cloudflare-integration/update-cloudflare-account-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "CloudflareIntegration", + "expected_status": 200, + "feature": "Cloudflare Integration", + "id": "v2/Cloudflare Integration/Update Cloudflare account returns \"OK\" response", + "operation_id": "UpdateCloudflareAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudflareAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "dev@datadoghq.com", + "zones": [ + "zone-id-3" + ] + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "cloudflare_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/cloudflare/accounts/{account_id}" + }, + "scenario": "Update Cloudflare account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/confluent-cloud/add-resource-to-confluent-account-returns-ok-response.json b/test-runner-data/v2/confluent-cloud/add-resource-to-confluent-account-returns-ok-response.json new file mode 100644 index 0000000000..ec8d755859 --- /dev/null +++ b/test-runner-data/v2/confluent-cloud/add-resource-to-confluent-account-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "ConfluentCloud", + "expected_status": 201, + "feature": "Confluent Cloud", + "id": "v2/Confluent Cloud/Add resource to Confluent account returns \"OK\" response", + "operation_id": "CreateConfluentResource", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ConfluentResourceRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enable_custom_metrics": false, + "resource_type": "kafka", + "tags": [ + "myTag", + "myTag2:myValue" + ] + }, + "id": "{{ unique_lower_alnum }}", + "type": "confluent-cloud-resources" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "confluent_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}/resources" + }, + "scenario": "Add resource to Confluent account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/confluent-cloud/delete-confluent-account-returns-ok-response.json b/test-runner-data/v2/confluent-cloud/delete-confluent-account-returns-ok-response.json new file mode 100644 index 0000000000..2302cb523b --- /dev/null +++ b/test-runner-data/v2/confluent-cloud/delete-confluent-account-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ConfluentCloud", + "expected_status": 204, + "feature": "Confluent Cloud", + "id": "v2/Confluent Cloud/Delete Confluent account returns \"OK\" response", + "operation_id": "DeleteConfluentAccount", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "confluent_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}" + }, + "scenario": "Delete Confluent account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/confluent-cloud/get-confluent-account-returns-ok-response.json b/test-runner-data/v2/confluent-cloud/get-confluent-account-returns-ok-response.json new file mode 100644 index 0000000000..d3e0960712 --- /dev/null +++ b/test-runner-data/v2/confluent-cloud/get-confluent-account-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ConfluentCloud", + "expected_status": 200, + "feature": "Confluent Cloud", + "id": "v2/Confluent Cloud/Get Confluent account returns \"OK\" response", + "operation_id": "GetConfluentAccount", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "confluent_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}" + }, + "scenario": "Get Confluent account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/confluent-cloud/list-confluent-accounts-returns-ok-response.json b/test-runner-data/v2/confluent-cloud/list-confluent-accounts-returns-ok-response.json new file mode 100644 index 0000000000..fc600ae8cc --- /dev/null +++ b/test-runner-data/v2/confluent-cloud/list-confluent-accounts-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ConfluentCloud", + "expected_status": 200, + "feature": "Confluent Cloud", + "id": "v2/Confluent Cloud/List Confluent accounts returns \"OK\" response", + "operation_id": "ListConfluentAccount", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations/confluent-cloud/accounts" + }, + "scenario": "List Confluent accounts returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/confluent-cloud/update-confluent-account-returns-ok-response.json b/test-runner-data/v2/confluent-cloud/update-confluent-account-returns-ok-response.json new file mode 100644 index 0000000000..42d3d06925 --- /dev/null +++ b/test-runner-data/v2/confluent-cloud/update-confluent-account-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "ConfluentCloud", + "expected_status": 200, + "feature": "Confluent Cloud", + "id": "v2/Confluent Cloud/Update Confluent account returns \"OK\" response", + "operation_id": "UpdateConfluentAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ConfluentAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "api_key": "{{confluent_account.data.attributes.api_key}}", + "api_secret": "update-secret", + "tags": [ + "updated_tag:val" + ] + }, + "type": "confluent-cloud-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "confluent_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/confluent-cloud/accounts/{account_id}" + }, + "scenario": "Update Confluent account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/container-images/get-all-container-image-groups-returns-ok-response.json b/test-runner-data/v2/container-images/get-all-container-image-groups-returns-ok-response.json new file mode 100644 index 0000000000..a7a0d5747c --- /dev/null +++ b/test-runner-data/v2/container-images/get-all-container-image-groups-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ContainerImages", + "expected_status": 200, + "feature": "Container Images", + "id": "v2/Container Images/Get all Container Image groups returns \"OK\" response", + "operation_id": "ListContainerImages", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "group_by", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "short_image" + }, + "style": null + } + ], + "path": "/api/v2/container_images" + }, + "scenario": "Get all Container Image groups returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/container-images/get-all-container-images-returns-ok-response-with-pagination.json b/test-runner-data/v2/container-images/get-all-container-images-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..5f867c99f2 --- /dev/null +++ b/test-runner-data/v2/container-images/get-all-container-images-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "ContainerImages", + "expected_status": 200, + "feature": "Container Images", + "id": "v2/Container Images/Get all Container Images returns \"OK\" response with pagination", + "operation_id": "ListContainerImages", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/container_images" + }, + "scenario": "Get all Container Images returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/container-images/get-all-container-images-returns-ok-response.json b/test-runner-data/v2/container-images/get-all-container-images-returns-ok-response.json new file mode 100644 index 0000000000..47746bacc0 --- /dev/null +++ b/test-runner-data/v2/container-images/get-all-container-images-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ContainerImages", + "expected_status": 200, + "feature": "Container Images", + "id": "v2/Container Images/Get all Container Images returns \"OK\" response", + "operation_id": "ListContainerImages", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/container_images" + }, + "scenario": "Get all Container Images returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/containers/get-all-container-groups-returns-ok-response.json b/test-runner-data/v2/containers/get-all-container-groups-returns-ok-response.json new file mode 100644 index 0000000000..f677960fe0 --- /dev/null +++ b/test-runner-data/v2/containers/get-all-container-groups-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Containers", + "expected_status": 200, + "feature": "Containers", + "id": "v2/Containers/Get All Container groups returns \"OK\" response", + "operation_id": "ListContainers", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "group_by", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "short_image" + }, + "style": null + } + ], + "path": "/api/v2/containers" + }, + "scenario": "Get All Container groups returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/containers/get-all-containers-returns-ok-response-with-pagination.json b/test-runner-data/v2/containers/get-all-containers-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..07f27889ff --- /dev/null +++ b/test-runner-data/v2/containers/get-all-containers-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Containers", + "expected_status": 200, + "feature": "Containers", + "id": "v2/Containers/Get All Containers returns \"OK\" response with pagination", + "operation_id": "ListContainers", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/containers" + }, + "scenario": "Get All Containers returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/containers/get-all-containers-returns-ok-response.json b/test-runner-data/v2/containers/get-all-containers-returns-ok-response.json new file mode 100644 index 0000000000..49b89b7ad7 --- /dev/null +++ b/test-runner-data/v2/containers/get-all-containers-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Containers", + "expected_status": 200, + "feature": "Containers", + "id": "v2/Containers/Get All Containers returns \"OK\" response", + "operation_id": "ListContainers", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/containers" + }, + "scenario": "Get All Containers returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-agents/get-all-csm-agents-returns-ok-response.json b/test-runner-data/v2/csm-agents/get-all-csm-agents-returns-ok-response.json new file mode 100644 index 0000000000..9cd8f5186a --- /dev/null +++ b/test-runner-data/v2/csm-agents/get-all-csm-agents-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMAgents", + "expected_status": 200, + "feature": "CSM Agents", + "id": "v2/CSM Agents/Get all CSM Agents returns \"OK\" response", + "operation_id": "ListAllCSMAgents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/csm/onboarding/agents" + }, + "scenario": "Get all CSM Agents returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-agents/get-all-csm-serverless-agents-returns-ok-response.json b/test-runner-data/v2/csm-agents/get-all-csm-serverless-agents-returns-ok-response.json new file mode 100644 index 0000000000..8dd625d04a --- /dev/null +++ b/test-runner-data/v2/csm-agents/get-all-csm-serverless-agents-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMAgents", + "expected_status": 200, + "feature": "CSM Agents", + "id": "v2/CSM Agents/Get all CSM Serverless Agents returns \"OK\" response", + "operation_id": "ListAllCSMServerlessAgents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/csm/onboarding/serverless/agents" + }, + "scenario": "Get all CSM Serverless Agents returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-coverage-analysis/get-the-csm-cloud-accounts-coverage-analysis-returns-ok-response.json b/test-runner-data/v2/csm-coverage-analysis/get-the-csm-cloud-accounts-coverage-analysis-returns-ok-response.json new file mode 100644 index 0000000000..c37e0c39d3 --- /dev/null +++ b/test-runner-data/v2/csm-coverage-analysis/get-the-csm-cloud-accounts-coverage-analysis-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMCoverageAnalysis", + "expected_status": 200, + "feature": "CSM Coverage Analysis", + "id": "v2/CSM Coverage Analysis/Get the CSM Cloud Accounts Coverage Analysis returns \"OK\" response", + "operation_id": "GetCSMCloudAccountsCoverageAnalysis", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/csm/onboarding/coverage_analysis/cloud_accounts" + }, + "scenario": "Get the CSM Cloud Accounts Coverage Analysis returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-coverage-analysis/get-the-csm-hosts-and-containers-coverage-analysis-returns-ok-response.json b/test-runner-data/v2/csm-coverage-analysis/get-the-csm-hosts-and-containers-coverage-analysis-returns-ok-response.json new file mode 100644 index 0000000000..944648ef3e --- /dev/null +++ b/test-runner-data/v2/csm-coverage-analysis/get-the-csm-hosts-and-containers-coverage-analysis-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMCoverageAnalysis", + "expected_status": 200, + "feature": "CSM Coverage Analysis", + "id": "v2/CSM Coverage Analysis/Get the CSM Hosts and Containers Coverage Analysis returns \"OK\" response", + "operation_id": "GetCSMHostsAndContainersCoverageAnalysis", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/csm/onboarding/coverage_analysis/hosts_and_containers" + }, + "scenario": "Get the CSM Hosts and Containers Coverage Analysis returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-coverage-analysis/get-the-csm-serverless-coverage-analysis-returns-ok-response.json b/test-runner-data/v2/csm-coverage-analysis/get-the-csm-serverless-coverage-analysis-returns-ok-response.json new file mode 100644 index 0000000000..cea291328a --- /dev/null +++ b/test-runner-data/v2/csm-coverage-analysis/get-the-csm-serverless-coverage-analysis-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMCoverageAnalysis", + "expected_status": 200, + "feature": "CSM Coverage Analysis", + "id": "v2/CSM Coverage Analysis/Get the CSM Serverless Coverage Analysis returns \"OK\" response", + "operation_id": "GetCSMServerlessCoverageAnalysis", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/csm/onboarding/coverage_analysis/serverless" + }, + "scenario": "Get the CSM Serverless Coverage Analysis returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-returns-bad-request-response.json b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..5b9cef00a4 --- /dev/null +++ b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-returns-bad-request-response.json @@ -0,0 +1,39 @@ +{ + "api": "CSMThreats", + "expected_status": 400, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Create a Workload Protection agent rule returns \"Bad Request\" response", + "operation_id": "CreateCSMThreatsAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name", + "filters": [], + "name": "my_agent_rule", + "policy_id": "{{ policy.data.id }}", + "product_tags": [] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/cws/agent_rules" + }, + "scenario": "Create a Workload Protection agent rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-returns-ok-response.json b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-returns-ok-response.json new file mode 100644 index 0000000000..98b8d457ed --- /dev/null +++ b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Create a Workload Protection agent rule returns \"OK\" response", + "operation_id": "CreateCSMThreatsAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "agent_version": "> 7.60", + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "filters": [], + "name": "{{ unique_lower_alnum }}", + "policy_id": "{{ policy.data.id }}", + "product_tags": [] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/cws/agent_rules" + }, + "scenario": "Create a Workload Protection agent rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-us1-fed-returns-bad-request-response.json b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-us1-fed-returns-bad-request-response.json new file mode 100644 index 0000000000..b4b70d5396 --- /dev/null +++ b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-us1-fed-returns-bad-request-response.json @@ -0,0 +1,37 @@ +{ + "api": "CSMThreats", + "expected_status": 400, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Create a Workload Protection agent rule (US1-FED) returns \"Bad Request\" response", + "operation_id": "CreateCloudWorkloadSecurityAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name", + "filters": [], + "name": "my_agent_rule" + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules" + }, + "scenario": "Create a Workload Protection agent rule (US1-FED) returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json new file mode 100644 index 0000000000..c7e6001f23 --- /dev/null +++ b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json @@ -0,0 +1,37 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Create a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "operation_id": "CreateCloudWorkloadSecurityAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "filters": [], + "name": "{{ unique_lower_alnum }}" + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules" + }, + "scenario": "Create a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-with-set-action-returns-ok-response.json b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-with-set-action-returns-ok-response.json new file mode 100644 index 0000000000..c280a19ec5 --- /dev/null +++ b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-with-set-action-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Create a Workload Protection agent rule with set action returns \"OK\" response", + "operation_id": "CreateCSMThreatsAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "actions": [ + { + "set": { + "inherited": true, + "name": "test_set", + "scope": "process", + "value": "test_value" + } + }, + { + "hash": { + "field": "exec.file" + } + } + ], + "description": "My Agent rule with set action", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "filters": [], + "name": "{{ unique_lower_alnum }}", + "policy_id": "{{ policy.data.id }}", + "product_tags": [] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/cws/agent_rules" + }, + "scenario": "Create a Workload Protection agent rule with set action returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-with-set-action-with-expression-returns-ok-response.json b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-with-set-action-with-expression-returns-ok-response.json new file mode 100644 index 0000000000..7657074c0d --- /dev/null +++ b/test-runner-data/v2/csm-threats/create-a-workload-protection-agent-rule-with-set-action-with-expression-returns-ok-response.json @@ -0,0 +1,49 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Create a Workload Protection agent rule with set action with expression returns \"OK\" response", + "operation_id": "CreateCSMThreatsAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "actions": [ + { + "set": { + "default_value": "/dev/null", + "expression": "exec.file.path", + "name": "test_set", + "scope": "process" + } + } + ], + "description": "My Agent rule with set action with expression", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "filters": [], + "name": "{{ unique_lower_alnum }}", + "policy_id": "{{ policy.data.id }}", + "product_tags": [] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/cws/agent_rules" + }, + "scenario": "Create a Workload Protection agent rule with set action with expression returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/create-a-workload-protection-policy-returns-bad-request-response.json b/test-runner-data/v2/csm-threats/create-a-workload-protection-policy-returns-bad-request-response.json new file mode 100644 index 0000000000..b0422a86f6 --- /dev/null +++ b/test-runner-data/v2/csm-threats/create-a-workload-protection-policy-returns-bad-request-response.json @@ -0,0 +1,37 @@ +{ + "api": "CSMThreats", + "expected_status": 400, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Create a Workload Protection policy returns \"Bad Request\" response", + "operation_id": "CreateCSMThreatsAgentPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentPolicyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [], + "hostTagsLists": [], + "name": "test" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/cws/policy" + }, + "scenario": "Create a Workload Protection policy returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/create-a-workload-protection-policy-returns-ok-response.json b/test-runner-data/v2/csm-threats/create-a-workload-protection-policy-returns-ok-response.json new file mode 100644 index 0000000000..8b05b28aa2 --- /dev/null +++ b/test-runner-data/v2/csm-threats/create-a-workload-protection-policy-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Create a Workload Protection policy returns \"OK\" response", + "operation_id": "CreateCSMThreatsAgentPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentPolicyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTagsLists": [ + [ + "env:test" + ] + ], + "name": "my_agent_policy_2" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/cws/policy" + }, + "scenario": "Create a Workload Protection policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-returns-not-found-response.json b/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-returns-not-found-response.json new file mode 100644 index 0000000000..5ebb82b597 --- /dev/null +++ b/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 404, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Delete a Workload Protection agent rule returns \"Not Found\" response", + "operation_id": "DeleteCSMThreatsAgentRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "non-existent-rule-id" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/agent_rules/{agent_rule_id}" + }, + "scenario": "Delete a Workload Protection agent rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-returns-ok-response.json b/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-returns-ok-response.json new file mode 100644 index 0000000000..12ac1ebd0c --- /dev/null +++ b/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "CSMThreats", + "expected_status": 204, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Delete a Workload Protection agent rule returns \"OK\" response", + "operation_id": "DeleteCSMThreatsAgentRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "agent_rule.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "policy_id", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/agent_rules/{agent_rule_id}" + }, + "scenario": "Delete a Workload Protection agent rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json b/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json new file mode 100644 index 0000000000..962e6bb7cd --- /dev/null +++ b/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 404, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Delete a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "operation_id": "DeleteCloudWorkloadSecurityAgentRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "non-existent-rule-id" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}" + }, + "scenario": "Delete a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json b/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json new file mode 100644 index 0000000000..f3a04e63c4 --- /dev/null +++ b/test-runner-data/v2/csm-threats/delete-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 204, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Delete a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "operation_id": "DeleteCloudWorkloadSecurityAgentRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "agent_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}" + }, + "scenario": "Delete a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/delete-a-workload-protection-policy-returns-not-found-response.json b/test-runner-data/v2/csm-threats/delete-a-workload-protection-policy-returns-not-found-response.json new file mode 100644 index 0000000000..af328cabe5 --- /dev/null +++ b/test-runner-data/v2/csm-threats/delete-a-workload-protection-policy-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 404, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Delete a Workload Protection policy returns \"Not Found\" response", + "operation_id": "DeleteCSMThreatsAgentPolicy", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "non-existent-policy-id" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/policy/{policy_id}" + }, + "scenario": "Delete a Workload Protection policy returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/delete-a-workload-protection-policy-returns-ok-response.json b/test-runner-data/v2/csm-threats/delete-a-workload-protection-policy-returns-ok-response.json new file mode 100644 index 0000000000..0e14e879ba --- /dev/null +++ b/test-runner-data/v2/csm-threats/delete-a-workload-protection-policy-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 204, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Delete a Workload Protection policy returns \"OK\" response", + "operation_id": "DeleteCSMThreatsAgentPolicy", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/policy/{policy_id}" + }, + "scenario": "Delete a Workload Protection policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/download-the-workload-protection-policy-returns-ok-response.json b/test-runner-data/v2/csm-threats/download-the-workload-protection-policy-returns-ok-response.json new file mode 100644 index 0000000000..6fa0218af1 --- /dev/null +++ b/test-runner-data/v2/csm-threats/download-the-workload-protection-policy-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Download the Workload Protection policy returns \"OK\" response", + "operation_id": "DownloadCSMThreatsPolicy", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/cws/policy/download" + }, + "scenario": "Download the Workload Protection policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/download-the-workload-protection-policy-us1-fed-returns-ok-response.json b/test-runner-data/v2/csm-threats/download-the-workload-protection-policy-us1-fed-returns-ok-response.json new file mode 100644 index 0000000000..3201758695 --- /dev/null +++ b/test-runner-data/v2/csm-threats/download-the-workload-protection-policy-us1-fed-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Download the Workload Protection policy (US1-FED) returns \"OK\" response", + "operation_id": "DownloadCloudWorkloadPolicyFile", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/cloud_workload/policy/download" + }, + "scenario": "Download the Workload Protection policy (US1-FED) returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-returns-not-found-response.json b/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-returns-not-found-response.json new file mode 100644 index 0000000000..81560e69c6 --- /dev/null +++ b/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 404, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Get a Workload Protection agent rule returns \"Not Found\" response", + "operation_id": "GetCSMThreatsAgentRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "abc-def-ghi" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/agent_rules/{agent_rule_id}" + }, + "scenario": "Get a Workload Protection agent rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-returns-ok-response.json b/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-returns-ok-response.json new file mode 100644 index 0000000000..a4aa77a3b5 --- /dev/null +++ b/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Get a Workload Protection agent rule returns \"OK\" response", + "operation_id": "GetCSMThreatsAgentRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "agent_rule.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "policy_id", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/agent_rules/{agent_rule_id}" + }, + "scenario": "Get a Workload Protection agent rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json b/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json new file mode 100644 index 0000000000..f1a2593196 --- /dev/null +++ b/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 404, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Get a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "operation_id": "GetCloudWorkloadSecurityAgentRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "abc-def-ghi" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}" + }, + "scenario": "Get a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json b/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json new file mode 100644 index 0000000000..a267c13c74 --- /dev/null +++ b/test-runner-data/v2/csm-threats/get-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Get a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "operation_id": "GetCloudWorkloadSecurityAgentRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "agent_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}" + }, + "scenario": "Get a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/get-a-workload-protection-policy-returns-not-found-response.json b/test-runner-data/v2/csm-threats/get-a-workload-protection-policy-returns-not-found-response.json new file mode 100644 index 0000000000..623385299a --- /dev/null +++ b/test-runner-data/v2/csm-threats/get-a-workload-protection-policy-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 404, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Get a Workload Protection policy returns \"Not Found\" response", + "operation_id": "GetCSMThreatsAgentPolicy", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "non-existent-policy-id" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/policy/{policy_id}" + }, + "scenario": "Get a Workload Protection policy returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/get-a-workload-protection-policy-returns-ok-response.json b/test-runner-data/v2/csm-threats/get-a-workload-protection-policy-returns-ok-response.json new file mode 100644 index 0000000000..e34f618e50 --- /dev/null +++ b/test-runner-data/v2/csm-threats/get-a-workload-protection-policy-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Get a Workload Protection policy returns \"OK\" response", + "operation_id": "GetCSMThreatsAgentPolicy", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/policy/{policy_id}" + }, + "scenario": "Get a Workload Protection policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/get-all-workload-protection-agent-rules-returns-ok-response.json b/test-runner-data/v2/csm-threats/get-all-workload-protection-agent-rules-returns-ok-response.json new file mode 100644 index 0000000000..aa2701bfdf --- /dev/null +++ b/test-runner-data/v2/csm-threats/get-all-workload-protection-agent-rules-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Get all Workload Protection agent rules returns \"OK\" response", + "operation_id": "ListCSMThreatsAgentRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/cws/agent_rules" + }, + "scenario": "Get all Workload Protection agent rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/get-all-workload-protection-agent-rules-us1-fed-returns-ok-response.json b/test-runner-data/v2/csm-threats/get-all-workload-protection-agent-rules-us1-fed-returns-ok-response.json new file mode 100644 index 0000000000..6c81699891 --- /dev/null +++ b/test-runner-data/v2/csm-threats/get-all-workload-protection-agent-rules-us1-fed-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Get all Workload Protection agent rules (US1-FED) returns \"OK\" response", + "operation_id": "ListCloudWorkloadSecurityAgentRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules" + }, + "scenario": "Get all Workload Protection agent rules (US1-FED) returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/get-all-workload-protection-policies-returns-ok-response.json b/test-runner-data/v2/csm-threats/get-all-workload-protection-policies-returns-ok-response.json new file mode 100644 index 0000000000..b6b349c4fe --- /dev/null +++ b/test-runner-data/v2/csm-threats/get-all-workload-protection-policies-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Get all Workload Protection policies returns \"OK\" response", + "operation_id": "ListCSMThreatsAgentPolicies", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/remote_config/products/cws/policy" + }, + "scenario": "Get all Workload Protection policies returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-returns-bad-request-response.json b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..74873f0f1e --- /dev/null +++ b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-returns-bad-request-response.json @@ -0,0 +1,55 @@ +{ + "api": "CSMThreats", + "expected_status": 400, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Update a Workload Protection agent rule returns \"Bad Request\" response", + "operation_id": "UpdateCSMThreatsAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "policy_id": "{{ policy.data.id }}", + "product_tags": [] + }, + "id": "invalid-agent-rule-id", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "agent_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/agent_rules/{agent_rule_id}" + }, + "scenario": "Update a Workload Protection agent rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-returns-not-found-response.json b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-returns-not-found-response.json new file mode 100644 index 0000000000..f590fa79f9 --- /dev/null +++ b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-returns-not-found-response.json @@ -0,0 +1,55 @@ +{ + "api": "CSMThreats", + "expected_status": 404, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Update a Workload Protection agent rule returns \"Not Found\" response", + "operation_id": "UpdateCSMThreatsAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "policy_id": "{{ policy.data.id }}", + "product_tags": [] + }, + "id": "non-existent-rule-id", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "non-existent-rule-id" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/agent_rules/{agent_rule_id}" + }, + "scenario": "Update a Workload Protection agent rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-bad-request-response.json b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-bad-request-response.json new file mode 100644 index 0000000000..0b1d469366 --- /dev/null +++ b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-bad-request-response.json @@ -0,0 +1,53 @@ +{ + "api": "CSMThreats", + "expected_status": 400, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Update a Workload Protection agent rule (US1-FED) returns \"Bad Request\" response", + "operation_id": "UpdateCloudWorkloadSecurityAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name" + }, + "id": "{{ agent_rule.data.id }}", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "agent_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}" + }, + "scenario": "Update a Workload Protection agent rule (US1-FED) returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json new file mode 100644 index 0000000000..dae0861333 --- /dev/null +++ b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-not-found-response.json @@ -0,0 +1,53 @@ +{ + "api": "CSMThreats", + "expected_status": 404, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Update a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "operation_id": "UpdateCloudWorkloadSecurityAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"" + }, + "id": "invalid-agent-rule-id", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "non-existent-rule-id" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}" + }, + "scenario": "Update a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json new file mode 100644 index 0000000000..7d24620cc3 --- /dev/null +++ b/test-runner-data/v2/csm-threats/update-a-workload-protection-agent-rule-us1-fed-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Update a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "operation_id": "UpdateCloudWorkloadSecurityAgentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Updated Agent rule", + "expression": "exec.file.name == \"sh\"" + }, + "id": "{{ agent_rule.data.id }}", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "agent_rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "agent_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/{agent_rule_id}" + }, + "scenario": "Update a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/update-a-workload-protection-policy-returns-bad-request-response.json b/test-runner-data/v2/csm-threats/update-a-workload-protection-policy-returns-bad-request-response.json new file mode 100644 index 0000000000..e27c6021e8 --- /dev/null +++ b/test-runner-data/v2/csm-threats/update-a-workload-protection-policy-returns-bad-request-response.json @@ -0,0 +1,61 @@ +{ + "api": "CSMThreats", + "expected_status": 400, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Update a Workload Protection policy returns \"Bad Request\" response", + "operation_id": "UpdateCSMThreatsAgentPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentPolicyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:test" + ], + "hostTagsLists": [ + [ + "env:test" + ] + ], + "name": "" + }, + "id": "{{ policy.data.id }}", + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/policy/{policy_id}" + }, + "scenario": "Update a Workload Protection policy returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/update-a-workload-protection-policy-returns-not-found-response.json b/test-runner-data/v2/csm-threats/update-a-workload-protection-policy-returns-not-found-response.json new file mode 100644 index 0000000000..b9b31d4fde --- /dev/null +++ b/test-runner-data/v2/csm-threats/update-a-workload-protection-policy-returns-not-found-response.json @@ -0,0 +1,54 @@ +{ + "api": "CSMThreats", + "expected_status": 404, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Update a Workload Protection policy returns \"Not Found\" response", + "operation_id": "UpdateCSMThreatsAgentPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentPolicyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [], + "name": "my_agent_policy" + }, + "id": "non-existent-policy-id", + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "non-existent-policy-id" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/policy/{policy_id}" + }, + "scenario": "Update a Workload Protection policy returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/csm-threats/update-a-workload-protection-policy-returns-ok-response.json b/test-runner-data/v2/csm-threats/update-a-workload-protection-policy-returns-ok-response.json new file mode 100644 index 0000000000..b3eed49662 --- /dev/null +++ b/test-runner-data/v2/csm-threats/update-a-workload-protection-policy-returns-ok-response.json @@ -0,0 +1,58 @@ +{ + "api": "CSMThreats", + "expected_status": 200, + "feature": "CSM Threats", + "id": "v2/CSM Threats/Update a Workload Protection policy returns \"OK\" response", + "operation_id": "UpdateCSMThreatsAgentPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloudWorkloadSecurityAgentPolicyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Updated agent policy", + "enabled": true, + "hostTagsLists": [ + [ + "env:test" + ] + ], + "name": "updated_agent_policy" + }, + "id": "{{ policy.data.id }}", + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/cws/policy/{policy_id}" + }, + "scenario": "Update a Workload Protection policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboard-lists/add-custom-screenboard-dashboard-to-an-existing-dashboard-list-returns-ok-response.json b/test-runner-data/v2/dashboard-lists/add-custom-screenboard-dashboard-to-an-existing-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..264756abde --- /dev/null +++ b/test-runner-data/v2/dashboard-lists/add-custom-screenboard-dashboard-to-an-existing-dashboard-list-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v2/Dashboard Lists/Add custom screenboard dashboard to an existing dashboard list returns \"OK\" response", + "operation_id": "CreateDashboardListItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardListAddItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "dashboards": [ + { + "id": "{{ screenboard_dashboard.id }}", + "type": "custom_screenboard" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "dashboard_list.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards" + }, + "scenario": "Add custom screenboard dashboard to an existing dashboard list returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboard-lists/add-custom-timeboard-dashboard-to-an-existing-dashboard-list-returns-ok-response.json b/test-runner-data/v2/dashboard-lists/add-custom-timeboard-dashboard-to-an-existing-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..c6530d55fa --- /dev/null +++ b/test-runner-data/v2/dashboard-lists/add-custom-timeboard-dashboard-to-an-existing-dashboard-list-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v2/Dashboard Lists/Add custom timeboard dashboard to an existing dashboard list returns \"OK\" response", + "operation_id": "CreateDashboardListItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardListAddItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "dashboards": [ + { + "id": "{{ dashboard.id }}", + "type": "custom_timeboard" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "dashboard_list.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards" + }, + "scenario": "Add custom timeboard dashboard to an existing dashboard list returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboard-lists/delete-custom-screenboard-dashboard-from-an-existing-dashboard-list-returns-ok-response.json b/test-runner-data/v2/dashboard-lists/delete-custom-screenboard-dashboard-from-an-existing-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..580634fbb5 --- /dev/null +++ b/test-runner-data/v2/dashboard-lists/delete-custom-screenboard-dashboard-from-an-existing-dashboard-list-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v2/Dashboard Lists/Delete custom screenboard dashboard from an existing dashboard list returns \"OK\" response", + "operation_id": "DeleteDashboardListItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardListDeleteItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "dashboards": [ + { + "id": "{{ screenboard_dashboard.id }}", + "type": "custom_screenboard" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "dashboard_list.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards" + }, + "scenario": "Delete custom screenboard dashboard from an existing dashboard list returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboard-lists/delete-custom-timeboard-dashboard-from-an-existing-dashboard-list-returns-ok-response.json b/test-runner-data/v2/dashboard-lists/delete-custom-timeboard-dashboard-from-an-existing-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..c901c92209 --- /dev/null +++ b/test-runner-data/v2/dashboard-lists/delete-custom-timeboard-dashboard-from-an-existing-dashboard-list-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v2/Dashboard Lists/Delete custom timeboard dashboard from an existing dashboard list returns \"OK\" response", + "operation_id": "DeleteDashboardListItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardListDeleteItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "dashboards": [ + { + "id": "{{ dashboard.id }}", + "type": "custom_timeboard" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "dashboard_list.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards" + }, + "scenario": "Delete custom timeboard dashboard from an existing dashboard list returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboard-lists/get-items-of-a-dashboard-list-returns-ok-response.json b/test-runner-data/v2/dashboard-lists/get-items-of-a-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..500da44c88 --- /dev/null +++ b/test-runner-data/v2/dashboard-lists/get-items-of-a-dashboard-list-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v2/Dashboard Lists/Get items of a Dashboard List returns \"OK\" response", + "operation_id": "GetDashboardListItems", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "dashboard_list.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards" + }, + "scenario": "Get items of a Dashboard List returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboard-lists/update-items-of-a-dashboard-list-returns-ok-response.json b/test-runner-data/v2/dashboard-lists/update-items-of-a-dashboard-list-returns-ok-response.json new file mode 100644 index 0000000000..4d527dbfeb --- /dev/null +++ b/test-runner-data/v2/dashboard-lists/update-items-of-a-dashboard-list-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "DashboardLists", + "expected_status": 200, + "feature": "Dashboard Lists", + "id": "v2/Dashboard Lists/Update items of a dashboard list returns \"OK\" response", + "operation_id": "UpdateDashboardListItems", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DashboardListUpdateItemsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "dashboards": [ + { + "id": "{{ screenboard_dashboard.id }}", + "type": "custom_screenboard" + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_list_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "dashboard_list.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/dashboard/lists/manual/{dashboard_list_id}/dashboards" + }, + "scenario": "Update items of a dashboard list returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboards/get-usage-stats-for-a-dashboard-returns-not-found-response.json b/test-runner-data/v2/dashboards/get-usage-stats-for-a-dashboard-returns-not-found-response.json new file mode 100644 index 0000000000..66b1550ad7 --- /dev/null +++ b/test-runner-data/v2/dashboards/get-usage-stats-for-a-dashboard-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 404, + "feature": "Dashboards", + "id": "v2/Dashboards/Get usage stats for a dashboard returns \"Not Found\" response", + "operation_id": "GetDashboardUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "xxx-xxx-xxx" + }, + "style": null + } + ], + "path": "/api/v2/dashboards/{dashboard_id}/usage" + }, + "scenario": "Get usage stats for a dashboard returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboards/get-usage-stats-for-a-dashboard-returns-ok-response.json b/test-runner-data/v2/dashboards/get-usage-stats-for-a-dashboard-returns-ok-response.json new file mode 100644 index 0000000000..7fe3fcb966 --- /dev/null +++ b/test-runner-data/v2/dashboards/get-usage-stats-for-a-dashboard-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v2/Dashboards/Get usage stats for a dashboard returns \"OK\" response", + "operation_id": "GetDashboardUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dashboard_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dashboard.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/dashboards/{dashboard_id}/usage" + }, + "scenario": "Get usage stats for a dashboard returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-returns-bad-request-response.json b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-returns-bad-request-response.json new file mode 100644 index 0000000000..1f012fe7ae --- /dev/null +++ b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 400, + "feature": "Dashboards", + "id": "v2/Dashboards/Get usage stats for all dashboards returns \"Bad Request\" response", + "operation_id": "ListDashboardsUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 10000 + }, + "style": null + } + ], + "path": "/api/v2/dashboards/usage" + }, + "scenario": "Get usage stats for all dashboards returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-returns-ok-response-with-pagination.json b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..59fa3dcf7c --- /dev/null +++ b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v2/Dashboards/Get usage stats for all dashboards returns \"OK\" response with pagination", + "operation_id": "ListDashboardsUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 500 + }, + "style": null + } + ], + "path": "/api/v2/dashboards/usage" + }, + "scenario": "Get usage stats for all dashboards returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-returns-ok-response.json b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-returns-ok-response.json new file mode 100644 index 0000000000..3d496f8893 --- /dev/null +++ b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v2/Dashboards/Get usage stats for all dashboards returns \"OK\" response", + "operation_id": "ListDashboardsUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/dashboards/usage" + }, + "scenario": "Get usage stats for all dashboards returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-with-both-filters-returns-ok-response.json b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-with-both-filters-returns-ok-response.json new file mode 100644 index 0000000000..b43158848a --- /dev/null +++ b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-with-both-filters-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v2/Dashboards/Get usage stats for all dashboards with both filters returns \"OK\" response", + "operation_id": "ListDashboardsUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[edited_before]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2025-04-26T00:00:00Z" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[viewed_before]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2025-04-26T00:00:00Z" + }, + "style": null + } + ], + "path": "/api/v2/dashboards/usage" + }, + "scenario": "Get usage stats for all dashboards with both filters returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-with-edited-before-filter-returns-ok-response.json b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-with-edited-before-filter-returns-ok-response.json new file mode 100644 index 0000000000..2dd2ececbd --- /dev/null +++ b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-with-edited-before-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v2/Dashboards/Get usage stats for all dashboards with edited_before filter returns \"OK\" response", + "operation_id": "ListDashboardsUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[edited_before]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2025-04-26T00:00:00Z" + }, + "style": null + } + ], + "path": "/api/v2/dashboards/usage" + }, + "scenario": "Get usage stats for all dashboards with edited_before filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-with-viewed-before-filter-returns-ok-response.json b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-with-viewed-before-filter-returns-ok-response.json new file mode 100644 index 0000000000..817006fce3 --- /dev/null +++ b/test-runner-data/v2/dashboards/get-usage-stats-for-all-dashboards-with-viewed-before-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Dashboards", + "expected_status": 200, + "feature": "Dashboards", + "id": "v2/Dashboards/Get usage stats for all dashboards with viewed_before filter returns \"OK\" response", + "operation_id": "ListDashboardsUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[viewed_before]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2025-04-26T00:00:00Z" + }, + "style": null + } + ], + "path": "/api/v2/dashboards/usage" + }, + "scenario": "Get usage stats for all dashboards with viewed_before filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/data-deletion/cancels-a-data-deletion-request-returns-bad-request-response.json b/test-runner-data/v2/data-deletion/cancels-a-data-deletion-request-returns-bad-request-response.json new file mode 100644 index 0000000000..28d3bb0d28 --- /dev/null +++ b/test-runner-data/v2/data-deletion/cancels-a-data-deletion-request-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "DataDeletion", + "expected_status": 400, + "feature": "Data Deletion", + "id": "v2/Data Deletion/Cancels a data deletion request returns \"Bad Request\" response", + "operation_id": "CancelDataDeletionRequest", + "request": { + "body": null, + "content_type": null, + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "id-1" + }, + "style": null + } + ], + "path": "/api/v2/deletion/requests/{id}/cancel" + }, + "scenario": "Cancels a data deletion request returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/data-deletion/cancels-a-data-deletion-request-returns-ok-response.json b/test-runner-data/v2/data-deletion/cancels-a-data-deletion-request-returns-ok-response.json new file mode 100644 index 0000000000..e7c98c4fab --- /dev/null +++ b/test-runner-data/v2/data-deletion/cancels-a-data-deletion-request-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "DataDeletion", + "expected_status": 200, + "feature": "Data Deletion", + "id": "v2/Data Deletion/Cancels a data deletion request returns \"OK\" response", + "operation_id": "CancelDataDeletionRequest", + "request": { + "body": null, + "content_type": null, + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deletion_request.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deletion/requests/{id}/cancel" + }, + "scenario": "Cancels a data deletion request returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/data-deletion/cancels-a-data-deletion-request-returns-precondition-failed-error-response.json b/test-runner-data/v2/data-deletion/cancels-a-data-deletion-request-returns-precondition-failed-error-response.json new file mode 100644 index 0000000000..d62d84b1d9 --- /dev/null +++ b/test-runner-data/v2/data-deletion/cancels-a-data-deletion-request-returns-precondition-failed-error-response.json @@ -0,0 +1,35 @@ +{ + "api": "DataDeletion", + "expected_status": 412, + "feature": "Data Deletion", + "id": "v2/Data Deletion/Cancels a data deletion request returns \"Precondition failed error\" response", + "operation_id": "CancelDataDeletionRequest", + "request": { + "body": null, + "content_type": null, + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "-1" + }, + "style": null + } + ], + "path": "/api/v2/deletion/requests/{id}/cancel" + }, + "scenario": "Cancels a data deletion request returns \"Precondition failed error\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/data-deletion/creates-a-data-deletion-request-returns-ok-response.json b/test-runner-data/v2/data-deletion/creates-a-data-deletion-request-returns-ok-response.json new file mode 100644 index 0000000000..464f6d6742 --- /dev/null +++ b/test-runner-data/v2/data-deletion/creates-a-data-deletion-request-returns-ok-response.json @@ -0,0 +1,59 @@ +{ + "api": "DataDeletion", + "expected_status": 200, + "feature": "Data Deletion", + "id": "v2/Data Deletion/Creates a data deletion request returns \"OK\" response", + "operation_id": "CreateDataDeletionRequest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateDataDeletionRequestBody", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "from": 1672527600000, + "indexes": [ + "test-index", + "test-index-2" + ], + "query": { + "host": "abc", + "service": "xyz" + }, + "to": 1704063600000 + }, + "type": "create_deletion_req" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "product", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "logs" + }, + "style": null + } + ], + "path": "/api/v2/deletion/data/{product}" + }, + "scenario": "Creates a data deletion request returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/data-deletion/creates-a-data-deletion-request-returns-precondition-failed-error-response.json b/test-runner-data/v2/data-deletion/creates-a-data-deletion-request-returns-precondition-failed-error-response.json new file mode 100644 index 0000000000..cbef3b3a37 --- /dev/null +++ b/test-runner-data/v2/data-deletion/creates-a-data-deletion-request-returns-precondition-failed-error-response.json @@ -0,0 +1,56 @@ +{ + "api": "DataDeletion", + "expected_status": 412, + "feature": "Data Deletion", + "id": "v2/Data Deletion/Creates a data deletion request returns \"Precondition failed error\" response", + "operation_id": "CreateDataDeletionRequest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateDataDeletionRequestBody", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "from": 1672527600000, + "indexes": [ + "test-index", + "test-index-2" + ], + "query": {}, + "to": 1704063600000 + }, + "type": "create_deletion_req" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "product", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "logs" + }, + "style": null + } + ], + "path": "/api/v2/deletion/data/{product}" + }, + "scenario": "Creates a data deletion request returns \"Precondition failed error\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/data-deletion/gets-a-list-of-data-deletion-requests-returns-ok-response.json b/test-runner-data/v2/data-deletion/gets-a-list-of-data-deletion-requests-returns-ok-response.json new file mode 100644 index 0000000000..ff8789e216 --- /dev/null +++ b/test-runner-data/v2/data-deletion/gets-a-list-of-data-deletion-requests-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "DataDeletion", + "expected_status": 200, + "feature": "Data Deletion", + "id": "v2/Data Deletion/Gets a list of data deletion requests returns \"OK\" response", + "operation_id": "GetDataDeletionRequests", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/deletion/requests" + }, + "scenario": "Gets a list of data deletion requests returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/create-a-dataset-returns-bad-request-response.json b/test-runner-data/v2/datasets/create-a-dataset-returns-bad-request-response.json new file mode 100644 index 0000000000..6496b3a1b4 --- /dev/null +++ b/test-runner-data/v2/datasets/create-a-dataset-returns-bad-request-response.json @@ -0,0 +1,28 @@ +{ + "api": "Datasets", + "expected_status": 400, + "feature": "Datasets", + "id": "v2/Datasets/Create a dataset returns \"Bad Request\" response", + "operation_id": "CreateDataset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DatasetCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "test": "bad_request" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/datasets" + }, + "scenario": "Create a dataset returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/create-a-dataset-returns-conflict-response.json b/test-runner-data/v2/datasets/create-a-dataset-returns-conflict-response.json new file mode 100644 index 0000000000..b0d99bf6b1 --- /dev/null +++ b/test-runner-data/v2/datasets/create-a-dataset-returns-conflict-response.json @@ -0,0 +1,44 @@ +{ + "api": "Datasets", + "expected_status": 409, + "feature": "Datasets", + "id": "v2/Datasets/Create a dataset returns \"Conflict\" response", + "operation_id": "CreateDataset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DatasetCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:ABCD" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/datasets" + }, + "scenario": "Create a dataset returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/create-a-dataset-returns-ok-response.json b/test-runner-data/v2/datasets/create-a-dataset-returns-ok-response.json new file mode 100644 index 0000000000..583f5522b3 --- /dev/null +++ b/test-runner-data/v2/datasets/create-a-dataset-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "Datasets", + "expected_status": 200, + "feature": "Datasets", + "id": "v2/Datasets/Create a dataset returns \"OK\" response", + "operation_id": "CreateDataset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DatasetCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:ABCD" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/datasets" + }, + "scenario": "Create a dataset returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/delete-a-dataset-returns-bad-request-response.json b/test-runner-data/v2/datasets/delete-a-dataset-returns-bad-request-response.json new file mode 100644 index 0000000000..6de2888780 --- /dev/null +++ b/test-runner-data/v2/datasets/delete-a-dataset-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Datasets", + "expected_status": 400, + "feature": "Datasets", + "id": "v2/Datasets/Delete a dataset returns \"Bad Request\" response", + "operation_id": "DeleteDataset", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dataset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/datasets/{dataset_id}" + }, + "scenario": "Delete a dataset returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/delete-a-dataset-returns-no-content-response.json b/test-runner-data/v2/datasets/delete-a-dataset-returns-no-content-response.json new file mode 100644 index 0000000000..35e7e1ce87 --- /dev/null +++ b/test-runner-data/v2/datasets/delete-a-dataset-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "Datasets", + "expected_status": 204, + "feature": "Datasets", + "id": "v2/Datasets/Delete a dataset returns \"No Content\" response", + "operation_id": "DeleteDataset", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dataset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dataset.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/datasets/{dataset_id}" + }, + "scenario": "Delete a dataset returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/delete-a-dataset-returns-not-found-response.json b/test-runner-data/v2/datasets/delete-a-dataset-returns-not-found-response.json new file mode 100644 index 0000000000..4ce8352d96 --- /dev/null +++ b/test-runner-data/v2/datasets/delete-a-dataset-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Datasets", + "expected_status": 404, + "feature": "Datasets", + "id": "v2/Datasets/Delete a dataset returns \"Not Found\" response", + "operation_id": "DeleteDataset", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dataset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/datasets/{dataset_id}" + }, + "scenario": "Delete a dataset returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/edit-a-dataset-returns-bad-request-response.json b/test-runner-data/v2/datasets/edit-a-dataset-returns-bad-request-response.json new file mode 100644 index 0000000000..c9761c2722 --- /dev/null +++ b/test-runner-data/v2/datasets/edit-a-dataset-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Datasets", + "expected_status": 400, + "feature": "Datasets", + "id": "v2/Datasets/Edit a dataset returns \"Bad Request\" response", + "operation_id": "UpdateDataset", + "request": { + "body": null, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dataset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/datasets/{dataset_id}" + }, + "scenario": "Edit a dataset returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/edit-a-dataset-returns-ok-response.json b/test-runner-data/v2/datasets/edit-a-dataset-returns-ok-response.json new file mode 100644 index 0000000000..4db55b7817 --- /dev/null +++ b/test-runner-data/v2/datasets/edit-a-dataset-returns-ok-response.json @@ -0,0 +1,61 @@ +{ + "api": "Datasets", + "expected_status": 200, + "feature": "Datasets", + "id": "v2/Datasets/Edit a dataset returns \"OK\" response", + "operation_id": "UpdateDataset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DatasetUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:1234" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dataset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dataset.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/datasets/{dataset_id}" + }, + "scenario": "Edit a dataset returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/get-a-single-dataset-by-id-returns-bad-request-response.json b/test-runner-data/v2/datasets/get-a-single-dataset-by-id-returns-bad-request-response.json new file mode 100644 index 0000000000..c75da35990 --- /dev/null +++ b/test-runner-data/v2/datasets/get-a-single-dataset-by-id-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Datasets", + "expected_status": 400, + "feature": "Datasets", + "id": "v2/Datasets/Get a single dataset by ID returns \"Bad Request\" response", + "operation_id": "GetDataset", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dataset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/datasets/{dataset_id}" + }, + "scenario": "Get a single dataset by ID returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/get-a-single-dataset-by-id-returns-ok-response.json b/test-runner-data/v2/datasets/get-a-single-dataset-by-id-returns-ok-response.json new file mode 100644 index 0000000000..bb6e805624 --- /dev/null +++ b/test-runner-data/v2/datasets/get-a-single-dataset-by-id-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Datasets", + "expected_status": 200, + "feature": "Datasets", + "id": "v2/Datasets/Get a single dataset by ID returns \"OK\" response", + "operation_id": "GetDataset", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "dataset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dataset.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/datasets/{dataset_id}" + }, + "scenario": "Get a single dataset by ID returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/datasets/get-all-datasets-returns-ok-response.json b/test-runner-data/v2/datasets/get-all-datasets-returns-ok-response.json new file mode 100644 index 0000000000..1bb6234952 --- /dev/null +++ b/test-runner-data/v2/datasets/get-all-datasets-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Datasets", + "expected_status": 200, + "feature": "Datasets", + "id": "v2/Datasets/Get all datasets returns \"OK\" response", + "operation_id": "GetAllDatasets", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/datasets" + }, + "scenario": "Get all datasets returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/create-deployment-gate-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/create-deployment-gate-returns-bad-request-response.json new file mode 100644 index 0000000000..639a2464a1 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/create-deployment-gate-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Create deployment gate returns \"Bad Request\" response", + "operation_id": "CreateDeploymentGate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateDeploymentGateParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "env": "", + "identifier": "my-gate", + "service": "test-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/deployment_gates" + }, + "scenario": "Create deployment gate returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/create-deployment-gate-returns-ok-response.json b/test-runner-data/v2/deployment-gates/create-deployment-gate-returns-ok-response.json new file mode 100644 index 0000000000..088d372aed --- /dev/null +++ b/test-runner-data/v2/deployment-gates/create-deployment-gate-returns-ok-response.json @@ -0,0 +1,36 @@ +{ + "api": "DeploymentGates", + "expected_status": 200, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Create deployment gate returns \"OK\" response", + "operation_id": "CreateDeploymentGate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateDeploymentGateParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-1", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/deployment_gates" + }, + "scenario": "Create deployment gate returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/create-deployment-rule-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/create-deployment-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..9c8c165fdb --- /dev/null +++ b/test-runner-data/v2/deployment-gates/create-deployment-rule-returns-bad-request-response.json @@ -0,0 +1,55 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Create deployment rule returns \"Bad Request\" response", + "operation_id": "CreateDeploymentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateDeploymentRuleParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "test", + "options": { + "excluded_resources": [] + }, + "type": "fdd" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gate.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules" + }, + "scenario": "Create deployment rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/create-deployment-rule-returns-ok-response.json b/test-runner-data/v2/deployment-gates/create-deployment-rule-returns-ok-response.json new file mode 100644 index 0000000000..d44a989730 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/create-deployment-rule-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "DeploymentGates", + "expected_status": 200, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Create deployment rule returns \"OK\" response", + "operation_id": "CreateDeploymentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateDeploymentRuleParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "excluded_resources": [] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gate.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules" + }, + "scenario": "Create deployment rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/delete-deployment-gate-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/delete-deployment-gate-returns-bad-request-response.json new file mode 100644 index 0000000000..3645fe4c82 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/delete-deployment-gate-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Delete deployment gate returns \"Bad Request\" response", + "operation_id": "DeleteDeploymentGate", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-gate-id" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{id}" + }, + "scenario": "Delete deployment gate returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/delete-deployment-gate-returns-deployment-gate-not-found-response.json b/test-runner-data/v2/deployment-gates/delete-deployment-gate-returns-deployment-gate-not-found-response.json new file mode 100644 index 0000000000..9aefc5f6bb --- /dev/null +++ b/test-runner-data/v2/deployment-gates/delete-deployment-gate-returns-deployment-gate-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 404, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Delete deployment gate returns \"Deployment gate not found.\" response", + "operation_id": "DeleteDeploymentGate", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{id}" + }, + "scenario": "Delete deployment gate returns \"Deployment gate not found.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/delete-deployment-gate-returns-no-content-response.json b/test-runner-data/v2/deployment-gates/delete-deployment-gate-returns-no-content-response.json new file mode 100644 index 0000000000..c3457a43f5 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/delete-deployment-gate-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 204, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Delete deployment gate returns \"No Content\" response", + "operation_id": "DeleteDeploymentGate", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gate.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{id}" + }, + "scenario": "Delete deployment gate returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/delete-deployment-rule-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/delete-deployment-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..ac271151d6 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/delete-deployment-rule-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Delete deployment rule returns \"Bad Request\" response", + "operation_id": "DeleteDeploymentRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-gate-id" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-rule-id" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules/{id}" + }, + "scenario": "Delete deployment rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/delete-deployment-rule-returns-deployment-gate-not-found-response.json b/test-runner-data/v2/deployment-gates/delete-deployment-rule-returns-deployment-gate-not-found-response.json new file mode 100644 index 0000000000..b3dcbdf220 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/delete-deployment-rule-returns-deployment-gate-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "DeploymentGates", + "expected_status": 404, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Delete deployment rule returns \"Deployment gate not found.\" response", + "operation_id": "DeleteDeploymentRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules/{id}" + }, + "scenario": "Delete deployment rule returns \"Deployment gate not found.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/delete-deployment-rule-returns-no-content-response.json b/test-runner-data/v2/deployment-gates/delete-deployment-rule-returns-no-content-response.json new file mode 100644 index 0000000000..f829854467 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/delete-deployment-rule-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "DeploymentGates", + "expected_status": 204, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Delete deployment rule returns \"No Content\" response", + "operation_id": "DeleteDeploymentRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gate.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules/{id}" + }, + "scenario": "Delete deployment rule returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-a-deployment-gates-evaluation-result-returns-deployment-gate-not-found-response.json b/test-runner-data/v2/deployment-gates/get-a-deployment-gates-evaluation-result-returns-deployment-gate-not-found-response.json new file mode 100644 index 0000000000..a4e00daebc --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-a-deployment-gates-evaluation-result-returns-deployment-gate-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 404, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get a deployment gates evaluation result returns \"Deployment gate not found.\" response", + "operation_id": "GetDeploymentGatesEvaluationResult", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/deployments/gates/evaluation/{id}" + }, + "scenario": "Get a deployment gates evaluation result returns \"Deployment gate not found.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-a-deployment-gates-evaluation-result-returns-ok-response.json b/test-runner-data/v2/deployment-gates/get-a-deployment-gates-evaluation-result-returns-ok-response.json new file mode 100644 index 0000000000..eee6a0c6df --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-a-deployment-gates-evaluation-result-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 200, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get a deployment gates evaluation result returns \"OK\" response", + "operation_id": "GetDeploymentGatesEvaluationResult", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gates_evaluation.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployments/gates/evaluation/{id}" + }, + "scenario": "Get a deployment gates evaluation result returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-deployment-gate-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/get-deployment-gate-returns-bad-request-response.json new file mode 100644 index 0000000000..1ee64161fc --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-deployment-gate-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get deployment gate returns \"Bad Request\" response", + "operation_id": "GetDeploymentGate", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-gate-id" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{id}" + }, + "scenario": "Get deployment gate returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-deployment-gate-returns-deployment-gate-not-found-response.json b/test-runner-data/v2/deployment-gates/get-deployment-gate-returns-deployment-gate-not-found-response.json new file mode 100644 index 0000000000..6262c8d2f1 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-deployment-gate-returns-deployment-gate-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 404, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get deployment gate returns \"Deployment gate not found.\" response", + "operation_id": "GetDeploymentGate", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{id}" + }, + "scenario": "Get deployment gate returns \"Deployment gate not found.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-deployment-gate-returns-ok-response.json b/test-runner-data/v2/deployment-gates/get-deployment-gate-returns-ok-response.json new file mode 100644 index 0000000000..1a339358ff --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-deployment-gate-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 200, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get deployment gate returns \"OK\" response", + "operation_id": "GetDeploymentGate", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gate.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{id}" + }, + "scenario": "Get deployment gate returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-deployment-rule-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/get-deployment-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..f8494dd0a9 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-deployment-rule-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get deployment rule returns \"Bad Request\" response", + "operation_id": "GetDeploymentRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-gate-id" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-rule-id" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules/{id}" + }, + "scenario": "Get deployment rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-deployment-rule-returns-deployment-rule-not-found-response.json b/test-runner-data/v2/deployment-gates/get-deployment-rule-returns-deployment-rule-not-found-response.json new file mode 100644 index 0000000000..3279bd688b --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-deployment-rule-returns-deployment-rule-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "DeploymentGates", + "expected_status": 404, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get deployment rule returns \"Deployment rule not found.\" response", + "operation_id": "GetDeploymentRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules/{id}" + }, + "scenario": "Get deployment rule returns \"Deployment rule not found.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-deployment-rule-returns-ok-response.json b/test-runner-data/v2/deployment-gates/get-deployment-rule-returns-ok-response.json new file mode 100644 index 0000000000..d2985977b1 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-deployment-rule-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "DeploymentGates", + "expected_status": 200, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get deployment rule returns \"OK\" response", + "operation_id": "GetDeploymentRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gate.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules/{id}" + }, + "scenario": "Get deployment rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-rules-for-a-deployment-gate-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/get-rules-for-a-deployment-gate-returns-bad-request-response.json new file mode 100644 index 0000000000..420a6d48df --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-rules-for-a-deployment-gate-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get rules for a deployment gate returns \"Bad request.\" response", + "operation_id": "GetDeploymentGateRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-a-valid-id" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules" + }, + "scenario": "Get rules for a deployment gate returns \"Bad request.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/get-rules-for-a-deployment-gate-returns-ok-response.json b/test-runner-data/v2/deployment-gates/get-rules-for-a-deployment-gate-returns-ok-response.json new file mode 100644 index 0000000000..666c6b8b5a --- /dev/null +++ b/test-runner-data/v2/deployment-gates/get-rules-for-a-deployment-gate-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 200, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Get rules for a deployment gate returns \"OK\" response", + "operation_id": "GetDeploymentGateRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gate.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules" + }, + "scenario": "Get rules for a deployment gate returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-accepted-response.json b/test-runner-data/v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-accepted-response.json new file mode 100644 index 0000000000..86d3c808ad --- /dev/null +++ b/test-runner-data/v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-accepted-response.json @@ -0,0 +1,35 @@ +{ + "api": "DeploymentGates", + "expected_status": 202, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Trigger a deployment gates evaluation returns \"Accepted\" response", + "operation_id": "TriggerDeploymentGatesEvaluation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DeploymentGatesEvaluationRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "env": "production", + "identifier": "{{ deployment_gate.data.attributes.identifier }}", + "service": "my-service" + }, + "type": "deployment_gates_evaluation_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/deployments/gates/evaluation" + }, + "scenario": "Trigger a deployment gates evaluation returns \"Accepted\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-bad-request-response.json new file mode 100644 index 0000000000..7714729758 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-bad-request-response.json @@ -0,0 +1,34 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Trigger a deployment gates evaluation returns \"Bad request.\" response", + "operation_id": "TriggerDeploymentGatesEvaluation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DeploymentGatesEvaluationRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "env": "", + "service": "my-service" + }, + "type": "deployment_gates_evaluation_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/deployments/gates/evaluation" + }, + "scenario": "Trigger a deployment gates evaluation returns \"Bad request.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-deployment-gate-not-found-response.json b/test-runner-data/v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-deployment-gate-not-found-response.json new file mode 100644 index 0000000000..83591e838f --- /dev/null +++ b/test-runner-data/v2/deployment-gates/trigger-a-deployment-gates-evaluation-returns-deployment-gate-not-found-response.json @@ -0,0 +1,34 @@ +{ + "api": "DeploymentGates", + "expected_status": 404, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Trigger a deployment gates evaluation returns \"Deployment gate not found.\" response", + "operation_id": "TriggerDeploymentGatesEvaluation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DeploymentGatesEvaluationRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "env": "staging", + "service": "non-existent-service-xyz" + }, + "type": "deployment_gates_evaluation_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/deployments/gates/evaluation" + }, + "scenario": "Trigger a deployment gates evaluation returns \"Deployment gate not found.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/update-deployment-gate-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/update-deployment-gate-returns-bad-request-response.json new file mode 100644 index 0000000000..4eaf8bef1a --- /dev/null +++ b/test-runner-data/v2/deployment-gates/update-deployment-gate-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Update deployment gate returns \"Bad Request\" response", + "operation_id": "UpdateDeploymentGate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateDeploymentGateParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "dry_run": true + }, + "id": "invalid-gate-id", + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-gate-id" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{id}" + }, + "scenario": "Update deployment gate returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/update-deployment-gate-returns-deployment-gate-not-found-response.json b/test-runner-data/v2/deployment-gates/update-deployment-gate-returns-deployment-gate-not-found-response.json new file mode 100644 index 0000000000..a4bd5f3ec1 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/update-deployment-gate-returns-deployment-gate-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "DeploymentGates", + "expected_status": 404, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Update deployment gate returns \"Deployment gate not found.\" response", + "operation_id": "UpdateDeploymentGate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateDeploymentGateParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "dry_run": false + }, + "id": "12345678-1234-1234-1234-123456789012", + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{id}" + }, + "scenario": "Update deployment gate returns \"Deployment gate not found.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/update-deployment-gate-returns-ok-response.json b/test-runner-data/v2/deployment-gates/update-deployment-gate-returns-ok-response.json new file mode 100644 index 0000000000..41a9b3f8a9 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/update-deployment-gate-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "DeploymentGates", + "expected_status": 200, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Update deployment gate returns \"OK\" response", + "operation_id": "UpdateDeploymentGate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateDeploymentGateParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "dry_run": false + }, + "id": "12345678-1234-1234-1234-123456789012", + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gate.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{id}" + }, + "scenario": "Update deployment gate returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/update-deployment-rule-returns-bad-request-response.json b/test-runner-data/v2/deployment-gates/update-deployment-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..09363564b9 --- /dev/null +++ b/test-runner-data/v2/deployment-gates/update-deployment-rule-returns-bad-request-response.json @@ -0,0 +1,70 @@ +{ + "api": "DeploymentGates", + "expected_status": 400, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Update deployment rule returns \"Bad Request\" response", + "operation_id": "UpdateDeploymentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateDeploymentRuleParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "Updated deployment rule", + "options": { + "excluded_resources": [] + } + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-gate-id" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-rule-id" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules/{id}" + }, + "scenario": "Update deployment rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/update-deployment-rule-returns-deployment-rule-not-found-response.json b/test-runner-data/v2/deployment-gates/update-deployment-rule-returns-deployment-rule-not-found-response.json new file mode 100644 index 0000000000..68a188392b --- /dev/null +++ b/test-runner-data/v2/deployment-gates/update-deployment-rule-returns-deployment-rule-not-found-response.json @@ -0,0 +1,74 @@ +{ + "api": "DeploymentGates", + "expected_status": 404, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Update deployment rule returns \"Deployment rule not found.\" response", + "operation_id": "UpdateDeploymentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateDeploymentRuleParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "Updated deployment rule", + "options": { + "duration": 3600, + "excluded_resources": [ + "resource1", + "resource2" + ] + } + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules/{id}" + }, + "scenario": "Update deployment rule returns \"Deployment rule not found.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/deployment-gates/update-deployment-rule-returns-ok-response.json b/test-runner-data/v2/deployment-gates/update-deployment-rule-returns-ok-response.json new file mode 100644 index 0000000000..5f94ca8d3a --- /dev/null +++ b/test-runner-data/v2/deployment-gates/update-deployment-rule-returns-ok-response.json @@ -0,0 +1,70 @@ +{ + "api": "DeploymentGates", + "expected_status": 200, + "feature": "Deployment Gates", + "id": "v2/Deployment Gates/Update deployment rule returns \"OK\" response", + "operation_id": "UpdateDeploymentRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateDeploymentRuleParams", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "Updated deployment rule", + "options": { + "excluded_resources": [] + } + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "gate_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_gate.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "deployment_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/deployment_gates/{gate_id}/rules/{id}" + }, + "scenario": "Update deployment rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/domain-allowlist/get-domain-allowlist-returns-ok-response.json b/test-runner-data/v2/domain-allowlist/get-domain-allowlist-returns-ok-response.json new file mode 100644 index 0000000000..9583e641dd --- /dev/null +++ b/test-runner-data/v2/domain-allowlist/get-domain-allowlist-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "DomainAllowlist", + "expected_status": 200, + "feature": "Domain Allowlist", + "id": "v2/Domain Allowlist/Get Domain Allowlist returns \"OK\" response", + "operation_id": "GetDomainAllowlist", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/domain_allowlist" + }, + "scenario": "Get Domain Allowlist returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/domain-allowlist/sets-domain-allowlist-returns-ok-response.json b/test-runner-data/v2/domain-allowlist/sets-domain-allowlist-returns-ok-response.json new file mode 100644 index 0000000000..afd3138769 --- /dev/null +++ b/test-runner-data/v2/domain-allowlist/sets-domain-allowlist-returns-ok-response.json @@ -0,0 +1,36 @@ +{ + "api": "DomainAllowlist", + "expected_status": 200, + "feature": "Domain Allowlist", + "id": "v2/Domain Allowlist/Sets Domain Allowlist returns \"OK\" response", + "operation_id": "PatchDomainAllowlist", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DomainAllowlistRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "domains": [ + "@static-test-domain.test" + ], + "enabled": false + }, + "type": "domain_allowlist" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/domain_allowlist" + }, + "scenario": "Sets Domain Allowlist returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dora-metrics/get-a-list-of-deployment-events-returns-bad-request-response.json b/test-runner-data/v2/dora-metrics/get-a-list-of-deployment-events-returns-bad-request-response.json new file mode 100644 index 0000000000..1b2e4eeb03 --- /dev/null +++ b/test-runner-data/v2/dora-metrics/get-a-list-of-deployment-events-returns-bad-request-response.json @@ -0,0 +1,32 @@ +{ + "api": "DORAMetrics", + "expected_status": 400, + "feature": "DORA Metrics", + "id": "v2/DORA Metrics/Get a list of deployment events returns \"Bad Request\" response", + "operation_id": "ListDORADeployments", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DORAListDeploymentsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "limit": 10 + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/dora/deployments" + }, + "scenario": "Get a list of deployment events returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dora-metrics/get-a-list-of-deployment-events-returns-deployments-with-date-time-timestamps.json b/test-runner-data/v2/dora-metrics/get-a-list-of-deployment-events-returns-deployments-with-date-time-timestamps.json new file mode 100644 index 0000000000..62d6ab5a24 --- /dev/null +++ b/test-runner-data/v2/dora-metrics/get-a-list-of-deployment-events-returns-deployments-with-date-time-timestamps.json @@ -0,0 +1,34 @@ +{ + "api": "DORAMetrics", + "expected_status": 200, + "feature": "DORA Metrics", + "id": "v2/DORA Metrics/Get a list of deployment events returns deployments with date-time timestamps", + "operation_id": "ListDORADeployments", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DORAListDeploymentsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "from": "2023-08-31T00:00:00Z", + "to": "2023-09-01T00:00:00Z" + }, + "type": "dora_deployments_list_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/dora/deployments" + }, + "scenario": "Get a list of deployment events returns deployments with date-time timestamps", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dora-metrics/get-a-list-of-failure-events-returns-bad-request-response.json b/test-runner-data/v2/dora-metrics/get-a-list-of-failure-events-returns-bad-request-response.json new file mode 100644 index 0000000000..f58b5af944 --- /dev/null +++ b/test-runner-data/v2/dora-metrics/get-a-list-of-failure-events-returns-bad-request-response.json @@ -0,0 +1,32 @@ +{ + "api": "DORAMetrics", + "expected_status": 400, + "feature": "DORA Metrics", + "id": "v2/DORA Metrics/Get a list of failure events returns \"Bad Request\" response", + "operation_id": "ListDORAFailures", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DORAListFailuresRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "limit": 10 + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/dora/failures" + }, + "scenario": "Get a list of failure events returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dora-metrics/send-a-deployment-event-returns-ok-response.json b/test-runner-data/v2/dora-metrics/send-a-deployment-event-returns-ok-response.json new file mode 100644 index 0000000000..7df3bd0230 --- /dev/null +++ b/test-runner-data/v2/dora-metrics/send-a-deployment-event-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "DORAMetrics", + "expected_status": 200, + "feature": "DORA Metrics", + "id": "v2/DORA Metrics/Send a deployment event returns \"OK\" response", + "operation_id": "CreateDORADeployment", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DORADeploymentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "finished_at": 1693491984000000000, + "git": { + "commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", + "repository_url": "https://github.com/organization/example-repository" + }, + "service": "shopist", + "started_at": 1693491974000000000, + "version": "v1.12.07" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/dora/deployment" + }, + "scenario": "Send a deployment event returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/dora-metrics/send-a-failure-event-returns-ok-response.json b/test-runner-data/v2/dora-metrics/send-a-failure-event-returns-ok-response.json new file mode 100644 index 0000000000..afc6d20a9b --- /dev/null +++ b/test-runner-data/v2/dora-metrics/send-a-failure-event-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "DORAMetrics", + "expected_status": 200, + "feature": "DORA Metrics", + "id": "v2/DORA Metrics/Send a failure event returns \"OK\" response", + "operation_id": "CreateDORAIncident", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DORAFailureRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "finished_at": 1707842944600000000, + "git": { + "commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", + "repository_url": "https://github.com/organization/example-repository" + }, + "name": "Webserver is down failing all requests", + "services": [ + "shopist" + ], + "severity": "High", + "started_at": 1707842944500000000, + "team": "backend", + "version": "v1.12.07" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/dora/incident" + }, + "scenario": "Send a failure event returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/cancel-a-downtime-returns-downtime-not-found-response.json b/test-runner-data/v2/downtimes/cancel-a-downtime-returns-downtime-not-found-response.json new file mode 100644 index 0000000000..1c4b1352fd --- /dev/null +++ b/test-runner-data/v2/downtimes/cancel-a-downtime-returns-downtime-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 404, + "feature": "Downtimes", + "id": "v2/Downtimes/Cancel a downtime returns \"Downtime not found\" response", + "operation_id": "CancelDowntime", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/downtime/{downtime_id}" + }, + "scenario": "Cancel a downtime returns \"Downtime not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/cancel-a-downtime-returns-ok-response.json b/test-runner-data/v2/downtimes/cancel-a-downtime-returns-ok-response.json new file mode 100644 index 0000000000..89ab72d73c --- /dev/null +++ b/test-runner-data/v2/downtimes/cancel-a-downtime-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 204, + "feature": "Downtimes", + "id": "v2/Downtimes/Cancel a downtime returns \"OK\" response", + "operation_id": "CancelDowntime", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "downtime_v2.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/downtime/{downtime_id}" + }, + "scenario": "Cancel a downtime returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/get-a-downtime-returns-bad-request-response.json b/test-runner-data/v2/downtimes/get-a-downtime-returns-bad-request-response.json new file mode 100644 index 0000000000..0793f93f8b --- /dev/null +++ b/test-runner-data/v2/downtimes/get-a-downtime-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 400, + "feature": "Downtimes", + "id": "v2/Downtimes/Get a downtime returns \"Bad Request\" response", + "operation_id": "GetDowntime", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "INVALID_UUID_LENGTH" + }, + "style": null + } + ], + "path": "/api/v2/downtime/{downtime_id}" + }, + "scenario": "Get a downtime returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/get-a-downtime-returns-not-found-response.json b/test-runner-data/v2/downtimes/get-a-downtime-returns-not-found-response.json new file mode 100644 index 0000000000..01039625a2 --- /dev/null +++ b/test-runner-data/v2/downtimes/get-a-downtime-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 404, + "feature": "Downtimes", + "id": "v2/Downtimes/Get a downtime returns \"Not Found\" response", + "operation_id": "GetDowntime", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/downtime/{downtime_id}" + }, + "scenario": "Get a downtime returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/get-a-downtime-returns-ok-response.json b/test-runner-data/v2/downtimes/get-a-downtime-returns-ok-response.json new file mode 100644 index 0000000000..1046d8c414 --- /dev/null +++ b/test-runner-data/v2/downtimes/get-a-downtime-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v2/Downtimes/Get a downtime returns \"OK\" response", + "operation_id": "GetDowntime", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "downtime_v2.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/downtime/{downtime_id}" + }, + "scenario": "Get a downtime returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/get-active-downtimes-for-a-monitor-returns-ok-response.json b/test-runner-data/v2/downtimes/get-active-downtimes-for-a-monitor-returns-ok-response.json new file mode 100644 index 0000000000..ee71ee4768 --- /dev/null +++ b/test-runner-data/v2/downtimes/get-active-downtimes-for-a-monitor-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v2/Downtimes/Get active downtimes for a monitor returns \"OK\" response", + "operation_id": "ListMonitorDowntimes", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 35534610 + }, + "style": null + } + ], + "path": "/api/v2/monitor/{monitor_id}/downtime_matches" + }, + "scenario": "Get active downtimes for a monitor returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/get-all-downtimes-for-a-monitor-returns-monitor-not-found-error-response.json b/test-runner-data/v2/downtimes/get-all-downtimes-for-a-monitor-returns-monitor-not-found-error-response.json new file mode 100644 index 0000000000..ce72b16bfd --- /dev/null +++ b/test-runner-data/v2/downtimes/get-all-downtimes-for-a-monitor-returns-monitor-not-found-error-response.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 404, + "feature": "Downtimes", + "id": "v2/Downtimes/Get all downtimes for a monitor returns \"Monitor Not Found error\" response", + "operation_id": "ListMonitorDowntimes", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "monitor_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v2/monitor/{monitor_id}/downtime_matches" + }, + "scenario": "Get all downtimes for a monitor returns \"Monitor Not Found error\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/get-all-downtimes-returns-ok-response-with-pagination.json b/test-runner-data/v2/downtimes/get-all-downtimes-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..73730883b2 --- /dev/null +++ b/test-runner-data/v2/downtimes/get-all-downtimes-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v2/Downtimes/Get all downtimes returns \"OK\" response with pagination", + "operation_id": "ListDowntimes", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/downtime" + }, + "scenario": "Get all downtimes returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/get-all-downtimes-returns-ok-response.json b/test-runner-data/v2/downtimes/get-all-downtimes-returns-ok-response.json new file mode 100644 index 0000000000..806c029ee7 --- /dev/null +++ b/test-runner-data/v2/downtimes/get-all-downtimes-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v2/Downtimes/Get all downtimes returns \"OK\" response", + "operation_id": "ListDowntimes", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/downtime" + }, + "scenario": "Get all downtimes returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/schedule-a-downtime-returns-bad-request-response.json b/test-runner-data/v2/downtimes/schedule-a-downtime-returns-bad-request-response.json new file mode 100644 index 0000000000..32468a296d --- /dev/null +++ b/test-runner-data/v2/downtimes/schedule-a-downtime-returns-bad-request-response.json @@ -0,0 +1,41 @@ +{ + "api": "Downtimes", + "expected_status": 400, + "feature": "Downtimes", + "id": "v2/Downtimes/Schedule a downtime returns \"Bad Request\" response", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DowntimeCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "monitor_identifier": { + "monitor_tags": [ + "cat:hat" + ] + }, + "schedule": { + "start": null + }, + "scope": "BAD_SCOPE_MISSING_KEY_VALUE_FORMAT" + }, + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/downtime" + }, + "scenario": "Schedule a downtime returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/schedule-a-downtime-returns-ok-response.json b/test-runner-data/v2/downtimes/schedule-a-downtime-returns-ok-response.json new file mode 100644 index 0000000000..a71ad80892 --- /dev/null +++ b/test-runner-data/v2/downtimes/schedule-a-downtime-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v2/Downtimes/Schedule a downtime returns \"OK\" response", + "operation_id": "CreateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DowntimeCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "message": "dark forest", + "monitor_identifier": { + "monitor_tags": [ + "cat:hat" + ] + }, + "schedule": { + "start": null + }, + "scope": "test:{{ unique_lower_alnum }}" + }, + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/downtime" + }, + "scenario": "Schedule a downtime returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/update-a-downtime-returns-bad-request-response.json b/test-runner-data/v2/downtimes/update-a-downtime-returns-bad-request-response.json new file mode 100644 index 0000000000..8b6618959d --- /dev/null +++ b/test-runner-data/v2/downtimes/update-a-downtime-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "Downtimes", + "expected_status": 400, + "feature": "Downtimes", + "id": "v2/Downtimes/Update a downtime returns \"Bad Request\" response", + "operation_id": "UpdateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DowntimeUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "invalid_field": "sophon" + }, + "id": "{{ downtime_v2.data.id }}", + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "downtime_v2.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/downtime/{downtime_id}" + }, + "scenario": "Update a downtime returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/update-a-downtime-returns-downtime-not-found-response.json b/test-runner-data/v2/downtimes/update-a-downtime-returns-downtime-not-found-response.json new file mode 100644 index 0000000000..126ee9dfa6 --- /dev/null +++ b/test-runner-data/v2/downtimes/update-a-downtime-returns-downtime-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "Downtimes", + "expected_status": 404, + "feature": "Downtimes", + "id": "v2/Downtimes/Update a downtime returns \"Downtime not found\" response", + "operation_id": "UpdateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DowntimeUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "message": "test msg" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/downtime/{downtime_id}" + }, + "scenario": "Update a downtime returns \"Downtime not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/downtimes/update-a-downtime-returns-ok-response.json b/test-runner-data/v2/downtimes/update-a-downtime-returns-ok-response.json new file mode 100644 index 0000000000..22b079ec9b --- /dev/null +++ b/test-runner-data/v2/downtimes/update-a-downtime-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Downtimes", + "expected_status": 200, + "feature": "Downtimes", + "id": "v2/Downtimes/Update a downtime returns \"OK\" response", + "operation_id": "UpdateDowntime", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DowntimeUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "message": "light speed" + }, + "id": "{{ downtime_v2.data.id }}", + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "downtime_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "downtime_v2.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/downtime/{downtime_id}" + }, + "scenario": "Update a downtime returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-bad-request-response.json b/test-runner-data/v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-bad-request-response.json new file mode 100644 index 0000000000..c18b569182 --- /dev/null +++ b/test-runner-data/v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ErrorTracking", + "expected_status": 400, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Get the details of an error tracking issue returns \"Bad Request\" response", + "operation_id": "GetIssue", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-issue-id" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}" + }, + "scenario": "Get the details of an error tracking issue returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-not-found-response.json b/test-runner-data/v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-not-found-response.json new file mode 100644 index 0000000000..e97cf94d91 --- /dev/null +++ b/test-runner-data/v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ErrorTracking", + "expected_status": 404, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Get the details of an error tracking issue returns \"Not Found\" response", + "operation_id": "GetIssue", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}" + }, + "scenario": "Get the details of an error tracking issue returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-ok-response.json b/test-runner-data/v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-ok-response.json new file mode 100644 index 0000000000..22021bf0b6 --- /dev/null +++ b/test-runner-data/v2/error-tracking/get-the-details-of-an-error-tracking-issue-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ErrorTracking", + "expected_status": 200, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Get the details of an error tracking issue returns \"OK\" response", + "operation_id": "GetIssue", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "issue.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}" + }, + "scenario": "Get the details of an error tracking issue returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/remove-the-assignee-of-an-issue-returns-no-content-response.json b/test-runner-data/v2/error-tracking/remove-the-assignee-of-an-issue-returns-no-content-response.json new file mode 100644 index 0000000000..7a17c7a283 --- /dev/null +++ b/test-runner-data/v2/error-tracking/remove-the-assignee-of-an-issue-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "ErrorTracking", + "expected_status": 204, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Remove the assignee of an issue returns \"No Content\" response", + "operation_id": "DeleteIssueAssignee", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "issue.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}/assignee" + }, + "scenario": "Remove the assignee of an issue returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/remove-the-assignee-of-an-issue-returns-not-found-response.json b/test-runner-data/v2/error-tracking/remove-the-assignee-of-an-issue-returns-not-found-response.json new file mode 100644 index 0000000000..86b0e18528 --- /dev/null +++ b/test-runner-data/v2/error-tracking/remove-the-assignee-of-an-issue-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ErrorTracking", + "expected_status": 404, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Remove the assignee of an issue returns \"Not Found\" response", + "operation_id": "DeleteIssueAssignee", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}/assignee" + }, + "scenario": "Remove the assignee of an issue returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/search-error-tracking-issues-returns-bad-request-response.json b/test-runner-data/v2/error-tracking/search-error-tracking-issues-returns-bad-request-response.json new file mode 100644 index 0000000000..11eab5790c --- /dev/null +++ b/test-runner-data/v2/error-tracking/search-error-tracking-issues-returns-bad-request-response.json @@ -0,0 +1,36 @@ +{ + "api": "ErrorTracking", + "expected_status": 400, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Search error tracking issues returns \"Bad Request\" response", + "operation_id": "SearchIssues", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IssuesSearchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "from": 1671612804000, + "query": "service:orders-* AND @language:go", + "to": 1671620004000, + "track": "invalid-track" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/error-tracking/issues/search" + }, + "scenario": "Search error tracking issues returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/search-error-tracking-issues-returns-ok-response.json b/test-runner-data/v2/error-tracking/search-error-tracking-issues-returns-ok-response.json new file mode 100644 index 0000000000..2dcc3ad148 --- /dev/null +++ b/test-runner-data/v2/error-tracking/search-error-tracking-issues-returns-ok-response.json @@ -0,0 +1,36 @@ +{ + "api": "ErrorTracking", + "expected_status": 200, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Search error tracking issues returns \"OK\" response", + "operation_id": "SearchIssues", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IssuesSearchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "from": 1671612804000, + "query": "service:orders-* AND @language:go", + "to": 1671620004000, + "track": "trace" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/error-tracking/issues/search" + }, + "scenario": "Search error tracking issues returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/update-the-assignee-of-an-issue-returns-bad-request-response.json b/test-runner-data/v2/error-tracking/update-the-assignee-of-an-issue-returns-bad-request-response.json new file mode 100644 index 0000000000..a558c643d8 --- /dev/null +++ b/test-runner-data/v2/error-tracking/update-the-assignee-of-an-issue-returns-bad-request-response.json @@ -0,0 +1,48 @@ +{ + "api": "ErrorTracking", + "expected_status": 400, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Update the assignee of an issue returns \"Bad Request\" response", + "operation_id": "UpdateIssueAssignee", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IssueUpdateAssigneeRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "invalid-id", + "type": "assignee" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "issue.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}/assignee" + }, + "scenario": "Update the assignee of an issue returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/update-the-assignee-of-an-issue-returns-not-found-response.json b/test-runner-data/v2/error-tracking/update-the-assignee-of-an-issue-returns-not-found-response.json new file mode 100644 index 0000000000..95a8f51756 --- /dev/null +++ b/test-runner-data/v2/error-tracking/update-the-assignee-of-an-issue-returns-not-found-response.json @@ -0,0 +1,48 @@ +{ + "api": "ErrorTracking", + "expected_status": 404, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Update the assignee of an issue returns \"Not Found\" response", + "operation_id": "UpdateIssueAssignee", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IssueUpdateAssigneeRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "87cb11a0-278c-440a-99fe-701223c80296", + "type": "assignee" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}/assignee" + }, + "scenario": "Update the assignee of an issue returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/update-the-assignee-of-an-issue-returns-ok-response.json b/test-runner-data/v2/error-tracking/update-the-assignee-of-an-issue-returns-ok-response.json new file mode 100644 index 0000000000..e0c7ab5572 --- /dev/null +++ b/test-runner-data/v2/error-tracking/update-the-assignee-of-an-issue-returns-ok-response.json @@ -0,0 +1,48 @@ +{ + "api": "ErrorTracking", + "expected_status": 200, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Update the assignee of an issue returns \"OK\" response", + "operation_id": "UpdateIssueAssignee", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IssueUpdateAssigneeRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "87cb11a0-278c-440a-99fe-701223c80296", + "type": "assignee" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "issue.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}/assignee" + }, + "scenario": "Update the assignee of an issue returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/update-the-state-of-an-issue-returns-bad-request-response.json b/test-runner-data/v2/error-tracking/update-the-state-of-an-issue-returns-bad-request-response.json new file mode 100644 index 0000000000..dcdb06dcec --- /dev/null +++ b/test-runner-data/v2/error-tracking/update-the-state-of-an-issue-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "ErrorTracking", + "expected_status": 400, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Update the state of an issue returns \"Bad Request\" response", + "operation_id": "UpdateIssueState", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IssueUpdateStateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "state": "invalid-state" + }, + "id": "{{ issue.id }}", + "type": "error_tracking_issue" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "issue.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}/state" + }, + "scenario": "Update the state of an issue returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/update-the-state-of-an-issue-returns-not-found-response.json b/test-runner-data/v2/error-tracking/update-the-state-of-an-issue-returns-not-found-response.json new file mode 100644 index 0000000000..fcbcc79687 --- /dev/null +++ b/test-runner-data/v2/error-tracking/update-the-state-of-an-issue-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "ErrorTracking", + "expected_status": 404, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Update the state of an issue returns \"Not Found\" response", + "operation_id": "UpdateIssueState", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IssueUpdateStateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "state": "resolved" + }, + "id": "67d80aa3-36ff-44b9-a694-c501a7591737", + "type": "error_tracking_issue" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "67d80aa3-36ff-44b9-a694-c501a7591737" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}/state" + }, + "scenario": "Update the state of an issue returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/error-tracking/update-the-state-of-an-issue-returns-ok-response.json b/test-runner-data/v2/error-tracking/update-the-state-of-an-issue-returns-ok-response.json new file mode 100644 index 0000000000..273973f21f --- /dev/null +++ b/test-runner-data/v2/error-tracking/update-the-state-of-an-issue-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "ErrorTracking", + "expected_status": 200, + "feature": "Error Tracking", + "id": "v2/Error Tracking/Update the state of an issue returns \"OK\" response", + "operation_id": "UpdateIssueState", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IssueUpdateStateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "state": "RESOLVED" + }, + "id": "{{ issue.id }}", + "type": "error_tracking_issue" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "issue_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "issue.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/error-tracking/issues/{issue_id}/state" + }, + "scenario": "Update the state of an issue returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/events/get-a-list-of-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/events/get-a-list-of-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..000569089a --- /dev/null +++ b/test-runner-data/v2/events/get-a-list-of-events-returns-ok-response-with-pagination.json @@ -0,0 +1,67 @@ +{ + "api": "Events", + "expected_status": 200, + "feature": "Events", + "id": "v2/Events/Get a list of events returns \"OK\" response with pagination", + "operation_id": "ListEvents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[from]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "now-15m" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[to]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "now" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/events" + }, + "scenario": "Get a list of events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/events/get-a-list-of-events-returns-ok-response.json b/test-runner-data/v2/events/get-a-list-of-events-returns-ok-response.json new file mode 100644 index 0000000000..965350babd --- /dev/null +++ b/test-runner-data/v2/events/get-a-list-of-events-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Events", + "expected_status": 200, + "feature": "Events", + "id": "v2/Events/Get a list of events returns \"OK\" response", + "operation_id": "ListEvents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/events" + }, + "scenario": "Get a list of events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/events/get-a-quick-list-of-events-returns-ok-response.json b/test-runner-data/v2/events/get-a-quick-list-of-events-returns-ok-response.json new file mode 100644 index 0000000000..3a3c892534 --- /dev/null +++ b/test-runner-data/v2/events/get-a-quick-list-of-events-returns-ok-response.json @@ -0,0 +1,83 @@ +{ + "api": "Events", + "expected_status": 200, + "feature": "Events", + "id": "v2/Events/Get a quick list of events returns \"OK\" response", + "operation_id": "ListEvents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[query]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "datadog-agent" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[from]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2020-09-17T11:48:36+01:00" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[to]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2020-09-17T12:48:36+01:00" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 5 + }, + "style": null + } + ], + "path": "/api/v2/events" + }, + "scenario": "Get a quick list of events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/events/post-an-event-returns-bad-request-response.json b/test-runner-data/v2/events/post-an-event-returns-bad-request-response.json new file mode 100644 index 0000000000..a831b1659d --- /dev/null +++ b/test-runner-data/v2/events/post-an-event-returns-bad-request-response.json @@ -0,0 +1,80 @@ +{ + "api": "Events", + "expected_status": 400, + "feature": "Events", + "id": "v2/Events/Post an event returns \"Bad request\" response", + "operation_id": "CreateEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EventCreateRequestPayload", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "aggregation_key": "aggregation_key_123", + "attributes": { + "author": { + "name": "example@datadog.com", + "type": "user" + }, + "change_metadata": { + "dd": { + "team": "datadog_team", + "user_email": "datadog@datadog.com", + "user_id": "datadog_user_id", + "user_name": "datadog_username" + }, + "resource_link": "datadog.com/feature/fallback_payments_test" + }, + "changed_resource": { + "name": "fallback_payments_test", + "type": "feature_flag" + }, + "impacted_resources": [ + { + "name": "payments_api", + "type": "service" + } + ], + "new_value": { + "enabled": true, + "percentage": "50%", + "rule": { + "datacenter": "devcycle.us1.prod" + } + }, + "prev_value": { + "enabled": true, + "percentage": "10%", + "rule": { + "datacenter": "devcycle.us1.prod" + } + } + }, + "category": "invalid", + "host": "test-host", + "integration_id": "custom-events", + "message": "payment_processed feature flag has been enabled", + "tags": [ + "env:api_client_test" + ], + "title": "payment_processed feature flag updated" + }, + "type": "event" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/events" + }, + "scenario": "Post an event returns \"Bad request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/events/post-an-event-returns-ok-response.json b/test-runner-data/v2/events/post-an-event-returns-ok-response.json new file mode 100644 index 0000000000..0f3fd716b3 --- /dev/null +++ b/test-runner-data/v2/events/post-an-event-returns-ok-response.json @@ -0,0 +1,80 @@ +{ + "api": "Events", + "expected_status": 202, + "feature": "Events", + "id": "v2/Events/Post an event returns \"OK\" response", + "operation_id": "CreateEvent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EventCreateRequestPayload", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "aggregation_key": "aggregation_key_123", + "attributes": { + "author": { + "name": "example@datadog.com", + "type": "user" + }, + "change_metadata": { + "dd": { + "team": "datadog_team", + "user_email": "datadog@datadog.com", + "user_id": "datadog_user_id", + "user_name": "datadog_username" + }, + "resource_link": "datadog.com/feature/fallback_payments_test" + }, + "changed_resource": { + "name": "fallback_payments_test", + "type": "feature_flag" + }, + "impacted_resources": [ + { + "name": "payments_api", + "type": "service" + } + ], + "new_value": { + "enabled": true, + "percentage": "50%", + "rule": { + "datacenter": "devcycle.us1.prod" + } + }, + "prev_value": { + "enabled": true, + "percentage": "10%", + "rule": { + "datacenter": "devcycle.us1.prod" + } + } + }, + "category": "change", + "host": "test-host", + "integration_id": "custom-events", + "message": "payment_processed feature flag has been enabled", + "tags": [ + "env:api_client_test" + ], + "title": "payment_processed feature flag updated" + }, + "type": "event" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/events" + }, + "scenario": "Post an event returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/events/search-events-returns-bad-request-response.json b/test-runner-data/v2/events/search-events-returns-bad-request-response.json new file mode 100644 index 0000000000..5b475f7980 --- /dev/null +++ b/test-runner-data/v2/events/search-events-returns-bad-request-response.json @@ -0,0 +1,40 @@ +{ + "api": "Events", + "expected_status": 400, + "feature": "Events", + "id": "v2/Events/Search events returns \"Bad Request\" response", + "operation_id": "SearchEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EventsListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "query": "service:web* AND @http.status_code:[200 TO 299]", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", + "limit": 25 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/events/search" + }, + "scenario": "Search events returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/events/search-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/events/search-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..9e359daeeb --- /dev/null +++ b/test-runner-data/v2/events/search-events-returns-ok-response-with-pagination.json @@ -0,0 +1,38 @@ +{ + "api": "Events", + "expected_status": 200, + "feature": "Events", + "id": "v2/Events/Search events returns \"OK\" response with pagination", + "operation_id": "SearchEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EventsListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": true, + "parameters": [], + "path": "/api/v2/events/search" + }, + "scenario": "Search events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/events/search-events-returns-ok-response.json b/test-runner-data/v2/events/search-events-returns-ok-response.json new file mode 100644 index 0000000000..5cf7ddbcd5 --- /dev/null +++ b/test-runner-data/v2/events/search-events-returns-ok-response.json @@ -0,0 +1,36 @@ +{ + "api": "Events", + "expected_status": 200, + "feature": "Events", + "id": "v2/Events/Search events returns \"OK\" response", + "operation_id": "SearchEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EventsListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "2020-09-17T11:48:36+01:00", + "query": "datadog-agent", + "to": "2020-09-17T12:48:36+01:00" + }, + "page": { + "limit": 5 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/events/search" + }, + "scenario": "Search events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/fastly-integration/add-fastly-account-returns-created-response.json b/test-runner-data/v2/fastly-integration/add-fastly-account-returns-created-response.json new file mode 100644 index 0000000000..fbbb62dfc3 --- /dev/null +++ b/test-runner-data/v2/fastly-integration/add-fastly-account-returns-created-response.json @@ -0,0 +1,35 @@ +{ + "api": "FastlyIntegration", + "expected_status": 201, + "feature": "Fastly Integration", + "id": "v2/Fastly Integration/Add Fastly account returns \"CREATED\" response", + "operation_id": "CreateFastlyAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "FastlyAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "api_key": "{{ unique_alnum }}", + "name": "{{ unique }}", + "services": [] + }, + "type": "fastly-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations/fastly/accounts" + }, + "scenario": "Add Fastly account returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/fastly-integration/get-fastly-account-returns-ok-response.json b/test-runner-data/v2/fastly-integration/get-fastly-account-returns-ok-response.json new file mode 100644 index 0000000000..d8cd8abaeb --- /dev/null +++ b/test-runner-data/v2/fastly-integration/get-fastly-account-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "FastlyIntegration", + "expected_status": 200, + "feature": "Fastly Integration", + "id": "v2/Fastly Integration/Get Fastly account returns \"OK\" response", + "operation_id": "GetFastlyAccount", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "fastly_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/fastly/accounts/{account_id}" + }, + "scenario": "Get Fastly account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/fastly-integration/list-fastly-accounts-returns-ok-response.json b/test-runner-data/v2/fastly-integration/list-fastly-accounts-returns-ok-response.json new file mode 100644 index 0000000000..7493e704c2 --- /dev/null +++ b/test-runner-data/v2/fastly-integration/list-fastly-accounts-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "FastlyIntegration", + "expected_status": 200, + "feature": "Fastly Integration", + "id": "v2/Fastly Integration/List Fastly accounts returns \"OK\" response", + "operation_id": "ListFastlyAccounts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations/fastly/accounts" + }, + "scenario": "List Fastly accounts returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/fastly-integration/update-fastly-account-returns-ok-response.json b/test-runner-data/v2/fastly-integration/update-fastly-account-returns-ok-response.json new file mode 100644 index 0000000000..253b9cadc1 --- /dev/null +++ b/test-runner-data/v2/fastly-integration/update-fastly-account-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "FastlyIntegration", + "expected_status": 200, + "feature": "Fastly Integration", + "id": "v2/Fastly Integration/Update Fastly account returns \"OK\" response", + "operation_id": "UpdateFastlyAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "FastlyAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "api_key": "update-secret" + }, + "type": "fastly-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "fastly_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/fastly/accounts/{account_id}" + }, + "scenario": "Update Fastly account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/feature-flags/archive-a-feature-flag-returns-ok-response.json b/test-runner-data/v2/feature-flags/archive-a-feature-flag-returns-ok-response.json new file mode 100644 index 0000000000..0a813d5b49 --- /dev/null +++ b/test-runner-data/v2/feature-flags/archive-a-feature-flag-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "FeatureFlags", + "expected_status": 200, + "feature": "Feature Flags", + "id": "v2/Feature Flags/Archive a feature flag returns \"OK\" response", + "operation_id": "ArchiveFeatureFlag", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "feature_flag_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "feature_flag.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/feature-flags/{feature_flag_id}/archive" + }, + "scenario": "Archive a feature flag returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/feature-flags/create-a-feature-flag-returns-created-response.json b/test-runner-data/v2/feature-flags/create-a-feature-flag-returns-created-response.json new file mode 100644 index 0000000000..02776fdc81 --- /dev/null +++ b/test-runner-data/v2/feature-flags/create-a-feature-flag-returns-created-response.json @@ -0,0 +1,49 @@ +{ + "api": "FeatureFlags", + "expected_status": 201, + "feature": "Feature Flags", + "id": "v2/Feature Flags/Create a feature flag returns \"Created\" response", + "operation_id": "CreateFeatureFlag", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateFeatureFlagRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "default_variant_key": "variant-{{ unique }}-1", + "description": "Test feature flag for BDD scenarios", + "key": "test-feature-flag-{{ unique }}", + "name": "Test Feature Flag {{ unique }}", + "value_type": "BOOLEAN", + "variants": [ + { + "key": "variant-{{ unique }}-1", + "name": "Variant {{ unique }} A", + "value": "true" + }, + { + "key": "variant-{{ unique }}-2", + "name": "Variant {{ unique }} B", + "value": "false" + } + ] + }, + "type": "feature-flags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/feature-flags" + }, + "scenario": "Create a feature flag returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/feature-flags/create-allocation-for-a-flag-in-an-environment-returns-created-response.json b/test-runner-data/v2/feature-flags/create-allocation-for-a-flag-in-an-environment-returns-created-response.json new file mode 100644 index 0000000000..3264d012e8 --- /dev/null +++ b/test-runner-data/v2/feature-flags/create-allocation-for-a-flag-in-an-environment-returns-created-response.json @@ -0,0 +1,76 @@ +{ + "api": "FeatureFlags", + "expected_status": 201, + "feature": "Feature Flags", + "id": "v2/Feature Flags/Create allocation for a flag in an environment returns \"Created\" response", + "operation_id": "CreateAllocationsForFeatureFlagInEnvironment", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateAllocationsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "guardrail_metrics": [], + "key": "new-targeting-rule-{{ unique_lower }}", + "name": "New targeting rule {{ unique }}", + "targeting_rules": [], + "type": "CANARY", + "variant_weights": [ + { + "value": 100, + "variant_id": "{{ feature_flag.data.attributes.variants[0].id }}" + } + ] + }, + "type": "allocations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "feature_flag_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "feature_flag.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "environment_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "environment.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/feature-flags/{feature_flag_id}/environments/{environment_id}/allocations" + }, + "scenario": "Create allocation for a flag in an environment returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/feature-flags/create-an-environment-returns-created-response.json b/test-runner-data/v2/feature-flags/create-an-environment-returns-created-response.json new file mode 100644 index 0000000000..97ab49088d --- /dev/null +++ b/test-runner-data/v2/feature-flags/create-an-environment-returns-created-response.json @@ -0,0 +1,37 @@ +{ + "api": "FeatureFlags", + "expected_status": 201, + "feature": "Feature Flags", + "id": "v2/Feature Flags/Create an environment returns \"Created\" response", + "operation_id": "CreateFeatureFlagsEnvironment", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateEnvironmentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Test Environment {{ unique }}", + "queries": [ + "test-{{ unique }}", + "env-{{ unique }}" + ] + }, + "type": "environments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/feature-flags/environments" + }, + "scenario": "Create an environment returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/feature-flags/get-a-feature-flag-returns-ok-response.json b/test-runner-data/v2/feature-flags/get-a-feature-flag-returns-ok-response.json new file mode 100644 index 0000000000..f4697658ab --- /dev/null +++ b/test-runner-data/v2/feature-flags/get-a-feature-flag-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "FeatureFlags", + "expected_status": 200, + "feature": "Feature Flags", + "id": "v2/Feature Flags/Get a feature flag returns \"OK\" response", + "operation_id": "GetFeatureFlag", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "feature_flag_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "feature_flag.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/feature-flags/{feature_flag_id}" + }, + "scenario": "Get a feature flag returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/feature-flags/list-feature-flags-returns-ok-response.json b/test-runner-data/v2/feature-flags/list-feature-flags-returns-ok-response.json new file mode 100644 index 0000000000..9a05765506 --- /dev/null +++ b/test-runner-data/v2/feature-flags/list-feature-flags-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "FeatureFlags", + "expected_status": 200, + "feature": "Feature Flags", + "id": "v2/Feature Flags/List feature flags returns \"OK\" response", + "operation_id": "ListFeatureFlags", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 10 + }, + "style": null + } + ], + "path": "/api/v2/feature-flags" + }, + "scenario": "List feature flags returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/feature-flags/update-a-feature-flag-returns-ok-response.json b/test-runner-data/v2/feature-flags/update-a-feature-flag-returns-ok-response.json new file mode 100644 index 0000000000..31ffebc4c6 --- /dev/null +++ b/test-runner-data/v2/feature-flags/update-a-feature-flag-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "FeatureFlags", + "expected_status": 200, + "feature": "Feature Flags", + "id": "v2/Feature Flags/Update a feature flag returns \"OK\" response", + "operation_id": "UpdateFeatureFlag", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateFeatureFlagRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Updated description for the feature flag", + "name": "Updated Test Feature Flag {{ unique }}" + }, + "type": "feature-flags" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "feature_flag_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "feature_flag.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/feature-flags/{feature_flag_id}" + }, + "scenario": "Update a feature flag returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/feature-flags/update-targeting-rules-for-a-flag-in-an-environment-returns-ok-response.json b/test-runner-data/v2/feature-flags/update-targeting-rules-for-a-flag-in-an-environment-returns-ok-response.json new file mode 100644 index 0000000000..79a0aac5e3 --- /dev/null +++ b/test-runner-data/v2/feature-flags/update-targeting-rules-for-a-flag-in-an-environment-returns-ok-response.json @@ -0,0 +1,105 @@ +{ + "api": "FeatureFlags", + "expected_status": 200, + "feature": "Feature Flags", + "id": "v2/Feature Flags/Update targeting rules for a flag in an environment returns \"OK\" response", + "operation_id": "UpdateAllocationsForFeatureFlagInEnvironment", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OverwriteAllocationsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "exposure_schedule": { + "rollout_options": { + "autostart": false, + "selection_interval_ms": 86400000, + "strategy": "UNIFORM_INTERVALS" + }, + "rollout_steps": [ + { + "exposure_ratio": 0.05, + "grouped_step_index": 0, + "interval_ms": null, + "is_pause_record": false + }, + { + "exposure_ratio": 0.25, + "grouped_step_index": 1, + "interval_ms": null, + "is_pause_record": false + }, + { + "exposure_ratio": 1, + "grouped_step_index": 2, + "interval_ms": null, + "is_pause_record": false + } + ] + }, + "guardrail_metrics": [], + "key": "overwrite-allocation-{{ unique_lower }}", + "name": "New targeting rule {{ unique }}", + "targeting_rules": [], + "type": "CANARY", + "variant_weights": [ + { + "value": 100, + "variant_id": "{{ feature_flag.data.attributes.variants[0].id }}" + } + ] + }, + "type": "allocations" + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "feature_flag_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "feature_flag.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "environment_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "environment.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/feature-flags/{feature_flag_id}/environments/{environment_id}/allocations" + }, + "scenario": "Update targeting rules for a flag in an environment returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/clone-a-form-returns-not-found-response.json b/test-runner-data/v2/forms/clone-a-form-returns-not-found-response.json new file mode 100644 index 0000000000..65cda9eea9 --- /dev/null +++ b/test-runner-data/v2/forms/clone-a-form-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "Forms", + "expected_status": 404, + "feature": "Forms", + "id": "v2/Forms/Clone a form returns \"Not Found\" response", + "operation_id": "CloneForm", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CloneFormRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Copy of My Form" + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}/clone" + }, + "scenario": "Clone a form returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/create-a-form-returns-ok-response.json b/test-runner-data/v2/forms/create-a-form-returns-ok-response.json new file mode 100644 index 0000000000..365a6c6e25 --- /dev/null +++ b/test-runner-data/v2/forms/create-a-form-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "Forms", + "expected_status": 200, + "feature": "Forms", + "id": "v2/Forms/Create a form returns \"OK\" response", + "operation_id": "CreateForm", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateFormRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A form to collect user feedback.", + "idp_survey": false, + "name": "User Feedback Form", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/forms" + }, + "scenario": "Create a form returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/create-and-publish-a-form-returns-ok-response.json b/test-runner-data/v2/forms/create-and-publish-a-form-returns-ok-response.json new file mode 100644 index 0000000000..61ba721c91 --- /dev/null +++ b/test-runner-data/v2/forms/create-and-publish-a-form-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "Forms", + "expected_status": 200, + "feature": "Forms", + "id": "v2/Forms/Create and publish a form returns \"OK\" response", + "operation_id": "CreateAndPublishForm", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateFormRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A form to collect user feedback.", + "idp_survey": false, + "name": "User Feedback Form", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/forms/create_and_publish" + }, + "scenario": "Create and publish a form returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/create-or-update-a-form-version-returns-not-found-response.json b/test-runner-data/v2/forms/create-or-update-a-form-version-returns-not-found-response.json new file mode 100644 index 0000000000..6f045d0f6d --- /dev/null +++ b/test-runner-data/v2/forms/create-or-update-a-form-version-returns-not-found-response.json @@ -0,0 +1,67 @@ +{ + "api": "Forms", + "expected_status": 404, + "feature": "Forms", + "id": "v2/Forms/Create or update a form version returns \"Not Found\" response", + "operation_id": "UpsertFormVersion", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpsertFormVersionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "data_definition": { + "description": "Welcome to the Engineering Experience Survey.", + "required": [], + "title": "Developer Experience Survey", + "type": "object" + }, + "state": "frozen", + "ui_definition": { + "ui:order": [], + "ui:theme": { + "primaryColor": "gray" + } + }, + "upsert_params": { + "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d", + "insert_only": false, + "match_policy": "none" + } + }, + "type": "form_versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}/versions" + }, + "scenario": "Create or update a form version returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/create-or-update-a-form-version-returns-ok-response.json b/test-runner-data/v2/forms/create-or-update-a-form-version-returns-ok-response.json new file mode 100644 index 0000000000..1c4c1b8dac --- /dev/null +++ b/test-runner-data/v2/forms/create-or-update-a-form-version-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "Forms", + "expected_status": 200, + "feature": "Forms", + "id": "v2/Forms/Create or update a form version returns \"OK\" response", + "operation_id": "UpsertFormVersion", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpsertFormVersionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "data_definition": { + "description": "Welcome to the Engineering Experience Survey.", + "required": [], + "title": "Developer Experience Survey", + "type": "object" + }, + "state": "frozen", + "ui_definition": { + "ui:order": [], + "ui:theme": { + "primaryColor": "gray" + } + }, + "upsert_params": { + "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d", + "insert_only": false, + "match_policy": "none" + } + }, + "type": "form_versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "form.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}/versions" + }, + "scenario": "Create or update a form version returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/delete-a-form-returns-ok-response.json b/test-runner-data/v2/forms/delete-a-form-returns-ok-response.json new file mode 100644 index 0000000000..c4902944e4 --- /dev/null +++ b/test-runner-data/v2/forms/delete-a-form-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Forms", + "expected_status": 200, + "feature": "Forms", + "id": "v2/Forms/Delete a form returns \"OK\" response", + "operation_id": "DeleteForm", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "form.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}" + }, + "scenario": "Delete a form returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/get-a-form-returns-not-found-response.json b/test-runner-data/v2/forms/get-a-form-returns-not-found-response.json new file mode 100644 index 0000000000..095f54fcab --- /dev/null +++ b/test-runner-data/v2/forms/get-a-form-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Forms", + "expected_status": 404, + "feature": "Forms", + "id": "v2/Forms/Get a form returns \"Not Found\" response", + "operation_id": "GetForm", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}" + }, + "scenario": "Get a form returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/get-a-form-returns-ok-response.json b/test-runner-data/v2/forms/get-a-form-returns-ok-response.json new file mode 100644 index 0000000000..1a53168cf1 --- /dev/null +++ b/test-runner-data/v2/forms/get-a-form-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Forms", + "expected_status": 200, + "feature": "Forms", + "id": "v2/Forms/Get a form returns \"OK\" response", + "operation_id": "GetForm", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "form.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}" + }, + "scenario": "Get a form returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/list-forms-returns-ok-response.json b/test-runner-data/v2/forms/list-forms-returns-ok-response.json new file mode 100644 index 0000000000..e813c7c2bc --- /dev/null +++ b/test-runner-data/v2/forms/list-forms-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Forms", + "expected_status": 200, + "feature": "Forms", + "id": "v2/Forms/List forms returns \"OK\" response", + "operation_id": "ListForms", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/forms" + }, + "scenario": "List forms returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/publish-a-form-version-returns-not-found-response.json b/test-runner-data/v2/forms/publish-a-form-version-returns-not-found-response.json new file mode 100644 index 0000000000..8f0cb0121d --- /dev/null +++ b/test-runner-data/v2/forms/publish-a-form-version-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "Forms", + "expected_status": 404, + "feature": "Forms", + "id": "v2/Forms/Publish a form version returns \"Not Found\" response", + "operation_id": "PublishForm", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PublishFormRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "version": 1 + }, + "type": "form_publications" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}/publish" + }, + "scenario": "Publish a form version returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/publish-a-form-version-returns-ok-response.json b/test-runner-data/v2/forms/publish-a-form-version-returns-ok-response.json new file mode 100644 index 0000000000..d91dc80d05 --- /dev/null +++ b/test-runner-data/v2/forms/publish-a-form-version-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "Forms", + "expected_status": 200, + "feature": "Forms", + "id": "v2/Forms/Publish a form version returns \"OK\" response", + "operation_id": "PublishForm", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PublishFormRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "version": 1 + }, + "type": "form_publications" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "form.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}/publish" + }, + "scenario": "Publish a form version returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/update-a-form-returns-not-found-response.json b/test-runner-data/v2/forms/update-a-form-returns-not-found-response.json new file mode 100644 index 0000000000..0e119751a0 --- /dev/null +++ b/test-runner-data/v2/forms/update-a-form-returns-not-found-response.json @@ -0,0 +1,59 @@ +{ + "api": "Forms", + "expected_status": 404, + "feature": "Forms", + "id": "v2/Forms/Update a form returns \"Not Found\" response", + "operation_id": "UpdateForm", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateFormRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "form_update": { + "datastore_config": { + "datastore_id": "5108ea24-dd83-4696-9caa-f069f73d0fad", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "description": "An updated description.", + "name": "Updated Form Name" + } + }, + "id": "22f6006a-2302-4926-9396-d2dfcf7b0b34", + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}" + }, + "scenario": "Update a form returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/update-a-form-returns-ok-response.json b/test-runner-data/v2/forms/update-a-form-returns-ok-response.json new file mode 100644 index 0000000000..cac7deb1f7 --- /dev/null +++ b/test-runner-data/v2/forms/update-a-form-returns-ok-response.json @@ -0,0 +1,59 @@ +{ + "api": "Forms", + "expected_status": 200, + "feature": "Forms", + "id": "v2/Forms/Update a form returns \"OK\" response", + "operation_id": "UpdateForm", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateFormRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "form_update": { + "datastore_config": { + "datastore_id": "5108ea24-dd83-4696-9caa-f069f73d0fad", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "description": "An updated description.", + "name": "Updated Form Name" + } + }, + "id": "22f6006a-2302-4926-9396-d2dfcf7b0b34", + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "form.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}" + }, + "scenario": "Update a form returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/upsert-and-publish-a-form-version-returns-not-found-response.json b/test-runner-data/v2/forms/upsert-and-publish-a-form-version-returns-not-found-response.json new file mode 100644 index 0000000000..cdd9dfcb90 --- /dev/null +++ b/test-runner-data/v2/forms/upsert-and-publish-a-form-version-returns-not-found-response.json @@ -0,0 +1,64 @@ +{ + "api": "Forms", + "expected_status": 404, + "feature": "Forms", + "id": "v2/Forms/Upsert and publish a form version returns \"Not Found\" response", + "operation_id": "UpsertAndPublishFormVersion", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpsertAndPublishFormVersionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "data_definition": { + "description": "Welcome to the Engineering Experience Survey.", + "required": [], + "title": "Developer Experience Survey", + "type": "object" + }, + "ui_definition": { + "ui:order": [], + "ui:theme": { + "primaryColor": "gray" + } + }, + "upsert_params": { + "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d" + } + }, + "type": "form_versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}/versions/upsert_and_publish" + }, + "scenario": "Upsert and publish a form version returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/forms/upsert-and-publish-a-form-version-returns-ok-response.json b/test-runner-data/v2/forms/upsert-and-publish-a-form-version-returns-ok-response.json new file mode 100644 index 0000000000..341321f403 --- /dev/null +++ b/test-runner-data/v2/forms/upsert-and-publish-a-form-version-returns-ok-response.json @@ -0,0 +1,64 @@ +{ + "api": "Forms", + "expected_status": 200, + "feature": "Forms", + "id": "v2/Forms/Upsert and publish a form version returns \"OK\" response", + "operation_id": "UpsertAndPublishFormVersion", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpsertAndPublishFormVersionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "data_definition": { + "description": "Welcome to the Engineering Experience Survey.", + "required": [], + "title": "Developer Experience Survey", + "type": "object" + }, + "ui_definition": { + "ui:order": [], + "ui:theme": { + "primaryColor": "gray" + } + }, + "upsert_params": { + "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d" + } + }, + "type": "form_versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "form_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "form.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/forms/{form_id}/versions/upsert_and_publish" + }, + "scenario": "Upsert and publish a form version returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/create-a-datadog-gcp-principal-returns-ok-response.json b/test-runner-data/v2/gcp-integration/create-a-datadog-gcp-principal-returns-ok-response.json new file mode 100644 index 0000000000..3e33c90143 --- /dev/null +++ b/test-runner-data/v2/gcp-integration/create-a-datadog-gcp-principal-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "GCPIntegration", + "expected_status": 200, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Create a Datadog GCP principal returns \"OK\" response", + "operation_id": "MakeGCPSTSDelegate", + "request": { + "body": null, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/sts_delegate" + }, + "scenario": "Create a Datadog GCP principal returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/create-a-datadog-gcp-principal-with-empty-body-returns-ok-response.json b/test-runner-data/v2/gcp-integration/create-a-datadog-gcp-principal-with-empty-body-returns-ok-response.json new file mode 100644 index 0000000000..77ba773151 --- /dev/null +++ b/test-runner-data/v2/gcp-integration/create-a-datadog-gcp-principal-with-empty-body-returns-ok-response.json @@ -0,0 +1,26 @@ +{ + "api": "GCPIntegration", + "expected_status": 200, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Create a Datadog GCP principal with empty body returns \"OK\" response", + "operation_id": "MakeGCPSTSDelegate", + "request": { + "body": { + "schema": { + "format": null, + "ref": null, + "type": "object" + }, + "source": "inline", + "value": {} + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/sts_delegate" + }, + "scenario": "Create a Datadog GCP principal with empty body returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-returns-ok-response.json b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-returns-ok-response.json new file mode 100644 index 0000000000..8589e1987f --- /dev/null +++ b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-returns-ok-response.json @@ -0,0 +1,34 @@ +{ + "api": "GCPIntegration", + "expected_status": 201, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Create a new entry for your service account returns \"OK\" response", + "operation_id": "CreateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/accounts" + }, + "scenario": "Create a new entry for your service account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-account-tags-returns-ok-response.json b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-account-tags-returns-ok-response.json new file mode 100644 index 0000000000..1714bfda7c --- /dev/null +++ b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-account-tags-returns-ok-response.json @@ -0,0 +1,38 @@ +{ + "api": "GCPIntegration", + "expected_status": 201, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Create a new entry for your service account with account_tags returns \"OK\" response", + "operation_id": "CreateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "account_tags": [ + "lorem", + "ipsum" + ], + "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/accounts" + }, + "scenario": "Create a new entry for your service account with account_tags returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-cloud-run-revision-filters-enabled-returns-ok-response.json b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-cloud-run-revision-filters-enabled-returns-ok-response.json new file mode 100644 index 0000000000..747c6b019f --- /dev/null +++ b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-cloud-run-revision-filters-enabled-returns-ok-response.json @@ -0,0 +1,37 @@ +{ + "api": "GCPIntegration", + "expected_status": 201, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Create a new entry for your service account with cloud run revision filters enabled returns \"OK\" response", + "operation_id": "CreateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", + "cloud_run_revision_filters": [ + "meh:bleh" + ], + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/accounts" + }, + "scenario": "Create a new entry for your service account with cloud run revision filters enabled returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-cspm-enabled-returns-ok-response.json b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-cspm-enabled-returns-ok-response.json new file mode 100644 index 0000000000..3f74ed3a5f --- /dev/null +++ b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-cspm-enabled-returns-ok-response.json @@ -0,0 +1,36 @@ +{ + "api": "GCPIntegration", + "expected_status": 201, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Create a new entry for your service account with cspm enabled returns \"OK\" response", + "operation_id": "CreateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", + "host_filters": [], + "is_cspm_enabled": true, + "resource_collection_enabled": true + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/accounts" + }, + "scenario": "Create a new entry for your service account with cspm enabled returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-resource-collection-enabled-disabled-and-cspm-enabled-returns-bad-request-response.json b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-resource-collection-enabled-disabled-and-cspm-enabled-returns-bad-request-response.json new file mode 100644 index 0000000000..3ba818ba97 --- /dev/null +++ b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-resource-collection-enabled-disabled-and-cspm-enabled-returns-bad-request-response.json @@ -0,0 +1,36 @@ +{ + "api": "GCPIntegration", + "expected_status": 400, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Create a new entry for your service account with resource collection enabled disabled and cspm enabled returns \"Bad Request\" response", + "operation_id": "CreateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", + "host_filters": [], + "is_cspm_enabled": true, + "resource_collection_enabled": false + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/accounts" + }, + "scenario": "Create a new entry for your service account with resource collection enabled disabled and cspm enabled returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-resource-collection-enabled-returns-ok-response.json b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-resource-collection-enabled-returns-ok-response.json new file mode 100644 index 0000000000..16ceaabb6c --- /dev/null +++ b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-resource-collection-enabled-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "GCPIntegration", + "expected_status": 201, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Create a new entry for your service account with resource collection enabled returns \"OK\" response", + "operation_id": "CreateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", + "host_filters": [], + "resource_collection_enabled": true + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/accounts" + }, + "scenario": "Create a new entry for your service account with resource collection enabled returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-security-command-center-enabled-returns-ok-response.json b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-security-command-center-enabled-returns-ok-response.json new file mode 100644 index 0000000000..bc58c3fb33 --- /dev/null +++ b/test-runner-data/v2/gcp-integration/create-a-new-entry-for-your-service-account-with-security-command-center-enabled-returns-ok-response.json @@ -0,0 +1,36 @@ +{ + "api": "GCPIntegration", + "expected_status": 201, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Create a new entry for your service account with security command center enabled returns \"OK\" response", + "operation_id": "CreateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "client_email": "Test-{{ unique_hash }}@test-project.iam.gserviceaccount.com", + "host_filters": [], + "is_resource_change_collection_enabled": true, + "is_security_command_center_enabled": true + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/accounts" + }, + "scenario": "Create a new entry for your service account with security command center enabled returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/list-all-gcp-sts-enabled-service-accounts-returns-ok-response.json b/test-runner-data/v2/gcp-integration/list-all-gcp-sts-enabled-service-accounts-returns-ok-response.json new file mode 100644 index 0000000000..00d18dde75 --- /dev/null +++ b/test-runner-data/v2/gcp-integration/list-all-gcp-sts-enabled-service-accounts-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "GCPIntegration", + "expected_status": 200, + "feature": "GCP Integration", + "id": "v2/GCP Integration/List all GCP STS-enabled service accounts returns \"OK\" response", + "operation_id": "ListGCPSTSAccounts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/accounts" + }, + "scenario": "List all GCP STS-enabled service accounts returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/list-delegate-account-returns-ok-response.json b/test-runner-data/v2/gcp-integration/list-delegate-account-returns-ok-response.json new file mode 100644 index 0000000000..b612cd4e4f --- /dev/null +++ b/test-runner-data/v2/gcp-integration/list-delegate-account-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "GCPIntegration", + "expected_status": 200, + "feature": "GCP Integration", + "id": "v2/GCP Integration/List delegate account returns \"OK\" response", + "operation_id": "GetGCPSTSDelegate", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/gcp/sts_delegate" + }, + "scenario": "List delegate account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/update-sts-service-account-returns-ok-response-with-cloud-run-revision-filters.json b/test-runner-data/v2/gcp-integration/update-sts-service-account-returns-ok-response-with-cloud-run-revision-filters.json new file mode 100644 index 0000000000..68504068b5 --- /dev/null +++ b/test-runner-data/v2/gcp-integration/update-sts-service-account-returns-ok-response-with-cloud-run-revision-filters.json @@ -0,0 +1,54 @@ +{ + "api": "GCPIntegration", + "expected_status": 201, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Update STS Service Account returns \"OK\" response with cloud run revision filters", + "operation_id": "UpdateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "client_email": "Test-{{ unique_hash }}@example.com", + "cloud_run_revision_filters": [ + "merp:derp" + ] + }, + "id": "{{ gcp_sts_account.data.id }}", + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "gcp_sts_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/gcp/accounts/{account_id}" + }, + "scenario": "Update STS Service Account returns \"OK\" response with cloud run revision filters", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/update-sts-service-account-returns-ok-response-with-enable-resource-collection-turned-on.json b/test-runner-data/v2/gcp-integration/update-sts-service-account-returns-ok-response-with-enable-resource-collection-turned-on.json new file mode 100644 index 0000000000..89ec4d522b --- /dev/null +++ b/test-runner-data/v2/gcp-integration/update-sts-service-account-returns-ok-response-with-enable-resource-collection-turned-on.json @@ -0,0 +1,52 @@ +{ + "api": "GCPIntegration", + "expected_status": 201, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Update STS Service Account returns \"OK\" response with enable resource collection turned on", + "operation_id": "UpdateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "client_email": "Test-{{ unique_hash }}@example.com", + "resource_collection_enabled": true + }, + "id": "{{ gcp_sts_account.data.id }}", + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "gcp_sts_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/gcp/accounts/{account_id}" + }, + "scenario": "Update STS Service Account returns \"OK\" response with enable resource collection turned on", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/gcp-integration/update-sts-service-account-returns-ok-response.json b/test-runner-data/v2/gcp-integration/update-sts-service-account-returns-ok-response.json new file mode 100644 index 0000000000..58f5b4b4fc --- /dev/null +++ b/test-runner-data/v2/gcp-integration/update-sts-service-account-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "GCPIntegration", + "expected_status": 201, + "feature": "GCP Integration", + "id": "v2/GCP Integration/Update STS Service Account returns \"OK\" response", + "operation_id": "UpdateGCPSTSAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GCPSTSServiceAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "client_email": "Test-{{ unique_hash }}@example.com", + "host_filters": [ + "foo:bar" + ] + }, + "id": "{{ gcp_sts_account.data.id }}", + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "gcp_sts_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/gcp/accounts/{account_id}" + }, + "scenario": "Update STS Service Account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/google-chat-integration/create-organization-handle-returns-created-response.json b/test-runner-data/v2/google-chat-integration/create-organization-handle-returns-created-response.json new file mode 100644 index 0000000000..a4d7416cac --- /dev/null +++ b/test-runner-data/v2/google-chat-integration/create-organization-handle-returns-created-response.json @@ -0,0 +1,51 @@ +{ + "api": "GoogleChatIntegration", + "expected_status": 201, + "feature": "Google Chat Integration", + "id": "v2/Google Chat Integration/Create organization handle returns \"CREATED\" response", + "operation_id": "CreateOrganizationHandle", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GoogleChatCreateOrganizationHandleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{unique}}", + "space_resource_name": "spaces/AAQA-zFIks8" + } + }, + "type": "google-chat-organization-handle" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "organization_binding_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "e54cb570-c674-529c-769d-84b312288ed7" + }, + "style": null + } + ], + "path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles" + }, + "scenario": "Create organization handle returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/google-chat-integration/delete-organization-handle-returns-ok-response.json b/test-runner-data/v2/google-chat-integration/delete-organization-handle-returns-ok-response.json new file mode 100644 index 0000000000..9637e5b752 --- /dev/null +++ b/test-runner-data/v2/google-chat-integration/delete-organization-handle-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "GoogleChatIntegration", + "expected_status": 204, + "feature": "Google Chat Integration", + "id": "v2/Google Chat Integration/Delete organization handle returns \"OK\" response", + "operation_id": "DeleteOrganizationHandle", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "organization_binding_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "e54cb570-c674-529c-769d-84b312288ed7" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "handle_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "organization_handle.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles/{handle_id}" + }, + "scenario": "Delete organization handle returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/google-chat-integration/get-all-organization-handles-returns-ok-response.json b/test-runner-data/v2/google-chat-integration/get-all-organization-handles-returns-ok-response.json new file mode 100644 index 0000000000..71b35ff535 --- /dev/null +++ b/test-runner-data/v2/google-chat-integration/get-all-organization-handles-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "GoogleChatIntegration", + "expected_status": 200, + "feature": "Google Chat Integration", + "id": "v2/Google Chat Integration/Get all organization handles returns \"OK\" response", + "operation_id": "ListOrganizationHandles", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "organization_binding_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "e54cb570-c674-529c-769d-84b312288ed7" + }, + "style": null + } + ], + "path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles" + }, + "scenario": "Get all organization handles returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/google-chat-integration/get-organization-handle-returns-ok-response.json b/test-runner-data/v2/google-chat-integration/get-organization-handle-returns-ok-response.json new file mode 100644 index 0000000000..e3ff052780 --- /dev/null +++ b/test-runner-data/v2/google-chat-integration/get-organization-handle-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "GoogleChatIntegration", + "expected_status": 200, + "feature": "Google Chat Integration", + "id": "v2/Google Chat Integration/Get organization handle returns \"OK\" response", + "operation_id": "GetOrganizationHandle", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "organization_binding_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "e54cb570-c674-529c-769d-84b312288ed7" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "handle_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "organization_handle.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles/{handle_id}" + }, + "scenario": "Get organization handle returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/google-chat-integration/get-space-information-by-display-name-returns-ok-response.json b/test-runner-data/v2/google-chat-integration/get-space-information-by-display-name-returns-ok-response.json new file mode 100644 index 0000000000..1fe4696938 --- /dev/null +++ b/test-runner-data/v2/google-chat-integration/get-space-information-by-display-name-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "GoogleChatIntegration", + "expected_status": 200, + "feature": "Google Chat Integration", + "id": "v2/Google Chat Integration/Get space information by display name returns \"OK\" response", + "operation_id": "GetSpaceByDisplayName", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "domain_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "datadog.ninja" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "space_display_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "api-test-space" + }, + "style": null + } + ], + "path": "/api/v2/integration/google-chat/organizations/app/named-spaces/{domain_name}/{space_display_name}" + }, + "scenario": "Get space information by display name returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/google-chat-integration/update-organization-handle-returns-ok-response.json b/test-runner-data/v2/google-chat-integration/update-organization-handle-returns-ok-response.json new file mode 100644 index 0000000000..d0ec429f21 --- /dev/null +++ b/test-runner-data/v2/google-chat-integration/update-organization-handle-returns-ok-response.json @@ -0,0 +1,66 @@ +{ + "api": "GoogleChatIntegration", + "expected_status": 200, + "feature": "Google Chat Integration", + "id": "v2/Google Chat Integration/Update organization handle returns \"OK\" response", + "operation_id": "UpdateOrganizationHandle", + "request": { + "body": { + "schema": { + "format": null, + "ref": "GoogleChatUpdateOrganizationHandleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{organization_handle.data.attributes.name}}--updated" + } + }, + "type": "google-chat-organization-handle" + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "organization_binding_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "e54cb570-c674-529c-769d-84b312288ed7" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "handle_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "organization_handle.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/google-chat/organizations/{organization_binding_id}/organization-handles/{handle_id}" + }, + "scenario": "Update organization handle returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/add-commander-to-an-incident-returns-ok-response.json b/test-runner-data/v2/incidents/add-commander-to-an-incident-returns-ok-response.json new file mode 100644 index 0000000000..938df57f1f --- /dev/null +++ b/test-runner-data/v2/incidents/add-commander-to-an-incident-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Add commander to an incident returns \"OK\" response", + "operation_id": "UpdateIncident", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{incident.data.id}}", + "relationships": { + "commander_user": { + "data": { + "id": "{{user.data.id}}", + "type": "users" + } + } + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}" + }, + "scenario": "Add commander to an incident returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-an-incident-integration-metadata-returns-created-response.json b/test-runner-data/v2/incidents/create-an-incident-integration-metadata-returns-created-response.json new file mode 100644 index 0000000000..4662f4ba8f --- /dev/null +++ b/test-runner-data/v2/incidents/create-an-incident-integration-metadata-returns-created-response.json @@ -0,0 +1,61 @@ +{ + "api": "Incidents", + "expected_status": 201, + "feature": "Incidents", + "id": "v2/Incidents/Create an incident integration metadata returns \"CREATED\" response", + "operation_id": "CreateIncidentIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentIntegrationMetadataCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "incident_id": "{{ incident.data.id }}", + "integration_type": 1, + "metadata": { + "channels": [ + { + "channel_id": "C0123456789", + "channel_name": "#new-channel", + "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567", + "team_id": "T01234567" + } + ] + } + }, + "type": "incident_integrations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/integrations" + }, + "scenario": "Create an incident integration metadata returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-an-incident-returns-created-response.json b/test-runner-data/v2/incidents/create-an-incident-returns-created-response.json new file mode 100644 index 0000000000..62a801b1d9 --- /dev/null +++ b/test-runner-data/v2/incidents/create-an-incident-returns-created-response.json @@ -0,0 +1,48 @@ +{ + "api": "Incidents", + "expected_status": 201, + "feature": "Incidents", + "id": "v2/Incidents/Create an incident returns \"CREATED\" response", + "operation_id": "CreateIncident", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "fields": { + "state": { + "type": "dropdown", + "value": "resolved" + } + }, + "title": "{{unique}}" + }, + "relationships": { + "commander_user": { + "data": { + "id": "{{ user.data.id }}", + "type": "{{ user.data.type }}" + } + } + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents" + }, + "scenario": "Create an incident returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-an-incident-todo-returns-created-response.json b/test-runner-data/v2/incidents/create-an-incident-todo-returns-created-response.json new file mode 100644 index 0000000000..64c9cf3320 --- /dev/null +++ b/test-runner-data/v2/incidents/create-an-incident-todo-returns-created-response.json @@ -0,0 +1,53 @@ +{ + "api": "Incidents", + "expected_status": 201, + "feature": "Incidents", + "id": "v2/Incidents/Create an incident todo returns \"CREATED\" response", + "operation_id": "CreateIncidentTodo", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentTodoCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "assignees": [ + "@test.user@test.com" + ], + "content": "Restore lost data." + }, + "type": "incident_todos" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/todos" + }, + "scenario": "Create an incident todo returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-an-incident-type-returns-created-response.json b/test-runner-data/v2/incidents/create-an-incident-type-returns-created-response.json new file mode 100644 index 0000000000..72ec9f6509 --- /dev/null +++ b/test-runner-data/v2/incidents/create-an-incident-type-returns-created-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 201, + "feature": "Incidents", + "id": "v2/Incidents/Create an incident type returns \"CREATED\" response", + "operation_id": "CreateIncidentType", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentTypeCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents/config/types" + }, + "scenario": "Create an incident type returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-incident-attachment-returns-created-response.json b/test-runner-data/v2/incidents/create-incident-attachment-returns-created-response.json new file mode 100644 index 0000000000..d787e2f21c --- /dev/null +++ b/test-runner-data/v2/incidents/create-incident-attachment-returns-created-response.json @@ -0,0 +1,54 @@ +{ + "api": "Incidents", + "expected_status": 201, + "feature": "Incidents", + "id": "v2/Incidents/Create incident attachment returns \"Created\" response", + "operation_id": "CreateIncidentAttachment", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateAttachmentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/{{ unique_alnum }}/{{ unique }}", + "title": "{{ unique }}" + }, + "attachment_type": "postmortem" + }, + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/attachments" + }, + "scenario": "Create incident attachment returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-incident-notification-rule-returns-bad-request-response.json b/test-runner-data/v2/incidents/create-incident-notification-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..15e531950e --- /dev/null +++ b/test-runner-data/v2/incidents/create-incident-notification-rule-returns-bad-request-response.json @@ -0,0 +1,55 @@ +{ + "api": "Incidents", + "expected_status": 400, + "feature": "Incidents", + "id": "v2/Incidents/Create incident notification rule returns \"Bad Request\" response", + "operation_id": "CreateIncidentNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateIncidentNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents/config/notification-rules" + }, + "scenario": "Create incident notification rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-incident-notification-rule-returns-created-response.json b/test-runner-data/v2/incidents/create-incident-notification-rule-returns-created-response.json new file mode 100644 index 0000000000..ae2c871d10 --- /dev/null +++ b/test-runner-data/v2/incidents/create-incident-notification-rule-returns-created-response.json @@ -0,0 +1,55 @@ +{ + "api": "Incidents", + "expected_status": 201, + "feature": "Incidents", + "id": "v2/Incidents/Create incident notification rule returns \"Created\" response", + "operation_id": "CreateIncidentNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateIncidentNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "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": "{{ incident_type.data.id }}", + "type": "incident_types" + } + } + }, + "type": "incident_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents/config/notification-rules" + }, + "scenario": "Create incident notification rule returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-incident-notification-template-returns-bad-request-response.json b/test-runner-data/v2/incidents/create-incident-notification-template-returns-bad-request-response.json new file mode 100644 index 0000000000..79d10490c0 --- /dev/null +++ b/test-runner-data/v2/incidents/create-incident-notification-template-returns-bad-request-response.json @@ -0,0 +1,36 @@ +{ + "api": "Incidents", + "expected_status": 400, + "feature": "Incidents", + "id": "v2/Incidents/Create incident notification template returns \"Bad Request\" response", + "operation_id": "CreateIncidentNotificationTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateIncidentNotificationTemplateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "category": "alert", + "content": "An incident has been declared. Please join the incident channel for updates.", + "name": "Test Template", + "subject": "Incident Alert" + }, + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents/config/notification-templates" + }, + "scenario": "Create incident notification template returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-incident-notification-template-returns-created-response.json b/test-runner-data/v2/incidents/create-incident-notification-template-returns-created-response.json new file mode 100644 index 0000000000..8d61319966 --- /dev/null +++ b/test-runner-data/v2/incidents/create-incident-notification-template-returns-created-response.json @@ -0,0 +1,44 @@ +{ + "api": "Incidents", + "expected_status": 201, + "feature": "Incidents", + "id": "v2/Incidents/Create incident notification template returns \"Created\" response", + "operation_id": "CreateIncidentNotificationTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateIncidentNotificationTemplateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "category": "alert", + "content": "An incident has been declared.\n\nTitle: Sample Incident Title\nSeverity: SEV-2\nAffected Services: web-service, database-service\nStatus: active\n\nPlease join the incident channel for updates.", + "name": "{{ unique }}", + "subject": "SEV-2 Incident: Sample Incident Title" + }, + "relationships": { + "incident_type": { + "data": { + "id": "{{ incident_type.data.id }}", + "type": "incident_types" + } + } + }, + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents/config/notification-templates" + }, + "scenario": "Create incident notification template returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/create-incident-notification-template-returns-not-found-response.json b/test-runner-data/v2/incidents/create-incident-notification-template-returns-not-found-response.json new file mode 100644 index 0000000000..cc123d8dda --- /dev/null +++ b/test-runner-data/v2/incidents/create-incident-notification-template-returns-not-found-response.json @@ -0,0 +1,44 @@ +{ + "api": "Incidents", + "expected_status": 404, + "feature": "Incidents", + "id": "v2/Incidents/Create incident notification template returns \"Not Found\" response", + "operation_id": "CreateIncidentNotificationTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateIncidentNotificationTemplateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "category": "alert", + "content": "An incident has been declared. Please join the incident channel for updates.", + "name": "Incident Alert Template", + "subject": "Incident Alert" + }, + "relationships": { + "incident_type": { + "data": { + "id": "00000000-1111-2222-3333-444444444444", + "type": "incident_types" + } + } + }, + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents/config/notification-templates" + }, + "scenario": "Create incident notification template returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/delete-an-existing-incident-returns-ok-response.json b/test-runner-data/v2/incidents/delete-an-existing-incident-returns-ok-response.json new file mode 100644 index 0000000000..81abd3c80d --- /dev/null +++ b/test-runner-data/v2/incidents/delete-an-existing-incident-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 204, + "feature": "Incidents", + "id": "v2/Incidents/Delete an existing incident returns \"OK\" response", + "operation_id": "DeleteIncident", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}" + }, + "scenario": "Delete an existing incident returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/delete-an-incident-integration-metadata-returns-ok-response.json b/test-runner-data/v2/incidents/delete-an-incident-integration-metadata-returns-ok-response.json new file mode 100644 index 0000000000..c6e349f4a5 --- /dev/null +++ b/test-runner-data/v2/incidents/delete-an-incident-integration-metadata-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Incidents", + "expected_status": 204, + "feature": "Incidents", + "id": "v2/Incidents/Delete an incident integration metadata returns \"OK\" response", + "operation_id": "DeleteIncidentIntegration", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "integration_metadata_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident_integration_metadata.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/integrations/{integration_metadata_id}" + }, + "scenario": "Delete an incident integration metadata returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/delete-an-incident-todo-returns-ok-response.json b/test-runner-data/v2/incidents/delete-an-incident-todo-returns-ok-response.json new file mode 100644 index 0000000000..2d6584a64d --- /dev/null +++ b/test-runner-data/v2/incidents/delete-an-incident-todo-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Incidents", + "expected_status": 204, + "feature": "Incidents", + "id": "v2/Incidents/Delete an incident todo returns \"OK\" response", + "operation_id": "DeleteIncidentTodo", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "todo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident_todo.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/todos/{todo_id}" + }, + "scenario": "Delete an incident todo returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/delete-an-incident-type-returns-ok-response.json b/test-runner-data/v2/incidents/delete-an-incident-type-returns-ok-response.json new file mode 100644 index 0000000000..6e30a79df6 --- /dev/null +++ b/test-runner-data/v2/incidents/delete-an-incident-type-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 204, + "feature": "Incidents", + "id": "v2/Incidents/Delete an incident type returns \"OK\" response", + "operation_id": "DeleteIncidentType", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_type_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident_type.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/types/{incident_type_id}" + }, + "scenario": "Delete an incident type returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/delete-incident-attachment-returns-not-found-response.json b/test-runner-data/v2/incidents/delete-incident-attachment-returns-not-found-response.json new file mode 100644 index 0000000000..a8b7e8003f --- /dev/null +++ b/test-runner-data/v2/incidents/delete-incident-attachment-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "Incidents", + "expected_status": 404, + "feature": "Incidents", + "id": "v2/Incidents/Delete incident attachment returns \"Not Found\" response", + "operation_id": "DeleteIncidentAttachment", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "attachment_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/attachments/{attachment_id}" + }, + "scenario": "Delete incident attachment returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/delete-incident-notification-rule-returns-no-content-response.json b/test-runner-data/v2/incidents/delete-incident-notification-rule-returns-no-content-response.json new file mode 100644 index 0000000000..70eade0246 --- /dev/null +++ b/test-runner-data/v2/incidents/delete-incident-notification-rule-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 204, + "feature": "Incidents", + "id": "v2/Incidents/Delete incident notification rule returns \"No Content\" response", + "operation_id": "DeleteIncidentNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-rules/{id}" + }, + "scenario": "Delete incident notification rule returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/delete-incident-notification-rule-returns-not-found-response.json b/test-runner-data/v2/incidents/delete-incident-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..c5069625a7 --- /dev/null +++ b/test-runner-data/v2/incidents/delete-incident-notification-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 404, + "feature": "Incidents", + "id": "v2/Incidents/Delete incident notification rule returns \"Not Found\" response", + "operation_id": "DeleteIncidentNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-rules/{id}" + }, + "scenario": "Delete incident notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/delete-incident-notification-template-returns-no-content-response.json b/test-runner-data/v2/incidents/delete-incident-notification-template-returns-no-content-response.json new file mode 100644 index 0000000000..fb815dc1f8 --- /dev/null +++ b/test-runner-data/v2/incidents/delete-incident-notification-template-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 204, + "feature": "Incidents", + "id": "v2/Incidents/Delete incident notification template returns \"No Content\" response", + "operation_id": "DeleteIncidentNotificationTemplate", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "notification_template.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-templates/{id}" + }, + "scenario": "Delete incident notification template returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-a-list-of-an-incident-s-integration-metadata-returns-ok-response.json b/test-runner-data/v2/incidents/get-a-list-of-an-incident-s-integration-metadata-returns-ok-response.json new file mode 100644 index 0000000000..1d38536733 --- /dev/null +++ b/test-runner-data/v2/incidents/get-a-list-of-an-incident-s-integration-metadata-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Get a list of an incident's integration metadata returns \"OK\" response", + "operation_id": "ListIncidentIntegrations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/integrations" + }, + "scenario": "Get a list of an incident's integration metadata returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-a-list-of-an-incident-s-todos-returns-ok-response.json b/test-runner-data/v2/incidents/get-a-list-of-an-incident-s-todos-returns-ok-response.json new file mode 100644 index 0000000000..4c3fdbcd9d --- /dev/null +++ b/test-runner-data/v2/incidents/get-a-list-of-an-incident-s-todos-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Get a list of an incident's todos returns \"OK\" response", + "operation_id": "ListIncidentTodos", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/todos" + }, + "scenario": "Get a list of an incident's todos returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-a-list-of-incidents-returns-ok-response-with-pagination.json b/test-runner-data/v2/incidents/get-a-list-of-incidents-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..967612589c --- /dev/null +++ b/test-runner-data/v2/incidents/get-a-list-of-incidents-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Get a list of incidents returns \"OK\" response with pagination", + "operation_id": "ListIncidents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/incidents" + }, + "scenario": "Get a list of incidents returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-a-list-of-incidents-returns-ok-response.json b/test-runner-data/v2/incidents/get-a-list-of-incidents-returns-ok-response.json new file mode 100644 index 0000000000..8cf38b5cd1 --- /dev/null +++ b/test-runner-data/v2/incidents/get-a-list-of-incidents-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Get a list of incidents returns \"OK\" response", + "operation_id": "ListIncidents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents" + }, + "scenario": "Get a list of incidents returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-incident-integration-metadata-details-returns-ok-response.json b/test-runner-data/v2/incidents/get-incident-integration-metadata-details-returns-ok-response.json new file mode 100644 index 0000000000..3766b37573 --- /dev/null +++ b/test-runner-data/v2/incidents/get-incident-integration-metadata-details-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Get incident integration metadata details returns \"OK\" response", + "operation_id": "GetIncidentIntegration", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "integration_metadata_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident_integration_metadata.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/integrations/{integration_metadata_id}" + }, + "scenario": "Get incident integration metadata details returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-incident-notification-rule-returns-not-found-response.json b/test-runner-data/v2/incidents/get-incident-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..edbc632776 --- /dev/null +++ b/test-runner-data/v2/incidents/get-incident-notification-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 404, + "feature": "Incidents", + "id": "v2/Incidents/Get incident notification rule returns \"Not Found\" response", + "operation_id": "GetIncidentNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-rules/{id}" + }, + "scenario": "Get incident notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-incident-notification-rule-returns-ok-response.json b/test-runner-data/v2/incidents/get-incident-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..0b12a5f5eb --- /dev/null +++ b/test-runner-data/v2/incidents/get-incident-notification-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Get incident notification rule returns \"OK\" response", + "operation_id": "GetIncidentNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-rules/{id}" + }, + "scenario": "Get incident notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-incident-notification-template-returns-ok-response.json b/test-runner-data/v2/incidents/get-incident-notification-template-returns-ok-response.json new file mode 100644 index 0000000000..1d49ac82b1 --- /dev/null +++ b/test-runner-data/v2/incidents/get-incident-notification-template-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Get incident notification template returns \"OK\" response", + "operation_id": "GetIncidentNotificationTemplate", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "notification_template.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-templates/{id}" + }, + "scenario": "Get incident notification template returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-incident-todo-details-returns-ok-response.json b/test-runner-data/v2/incidents/get-incident-todo-details-returns-ok-response.json new file mode 100644 index 0000000000..2052a74ba0 --- /dev/null +++ b/test-runner-data/v2/incidents/get-incident-todo-details-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Get incident todo details returns \"OK\" response", + "operation_id": "GetIncidentTodo", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "todo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident_todo.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/todos/{todo_id}" + }, + "scenario": "Get incident todo details returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/get-the-details-of-an-incident-returns-ok-response.json b/test-runner-data/v2/incidents/get-the-details-of-an-incident-returns-ok-response.json new file mode 100644 index 0000000000..c5baf728ee --- /dev/null +++ b/test-runner-data/v2/incidents/get-the-details-of-an-incident-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Get the details of an incident returns \"OK\" response", + "operation_id": "GetIncident", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}" + }, + "scenario": "Get the details of an incident returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/import-an-incident-returns-created-response.json b/test-runner-data/v2/incidents/import-an-incident-returns-created-response.json new file mode 100644 index 0000000000..7a8f70767c --- /dev/null +++ b/test-runner-data/v2/incidents/import-an-incident-returns-created-response.json @@ -0,0 +1,34 @@ +{ + "api": "Incidents", + "expected_status": 201, + "feature": "Incidents", + "id": "v2/Incidents/Import an incident returns \"CREATED\" response", + "operation_id": "ImportIncident", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentImportRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "title": "{{unique}}", + "visibility": "organization" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents/import" + }, + "scenario": "Import an incident returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/list-incident-attachments-returns-ok-response.json b/test-runner-data/v2/incidents/list-incident-attachments-returns-ok-response.json new file mode 100644 index 0000000000..e1b3fe85bb --- /dev/null +++ b/test-runner-data/v2/incidents/list-incident-attachments-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/List incident attachments returns \"OK\" response", + "operation_id": "ListIncidentAttachments", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/attachments" + }, + "scenario": "List incident attachments returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/list-incident-notification-rules-returns-ok-response.json b/test-runner-data/v2/incidents/list-incident-notification-rules-returns-ok-response.json new file mode 100644 index 0000000000..bd8fee249b --- /dev/null +++ b/test-runner-data/v2/incidents/list-incident-notification-rules-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/List incident notification rules returns \"OK\" response", + "operation_id": "ListIncidentNotificationRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents/config/notification-rules" + }, + "scenario": "List incident notification rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/list-incident-notification-templates-returns-ok-response.json b/test-runner-data/v2/incidents/list-incident-notification-templates-returns-ok-response.json new file mode 100644 index 0000000000..954d773b0c --- /dev/null +++ b/test-runner-data/v2/incidents/list-incident-notification-templates-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/List incident notification templates returns \"OK\" response", + "operation_id": "ListIncidentNotificationTemplates", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/incidents/config/notification-templates" + }, + "scenario": "List incident notification templates returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/remove-commander-from-an-incident-returns-ok-response.json b/test-runner-data/v2/incidents/remove-commander-from-an-incident-returns-ok-response.json new file mode 100644 index 0000000000..ef21d028ec --- /dev/null +++ b/test-runner-data/v2/incidents/remove-commander-from-an-incident-returns-ok-response.json @@ -0,0 +1,53 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Remove commander from an incident returns \"OK\" response", + "operation_id": "UpdateIncident", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{incident.data.id}}", + "relationships": { + "commander_user": { + "data": null + } + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}" + }, + "scenario": "Remove commander from an incident returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/search-for-incidents-returns-ok-response-with-pagination.json b/test-runner-data/v2/incidents/search-for-incidents-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..28554dc369 --- /dev/null +++ b/test-runner-data/v2/incidents/search-for-incidents-returns-ok-response-with-pagination.json @@ -0,0 +1,51 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Search for incidents returns \"OK\" response with pagination", + "operation_id": "SearchIncidents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": false, + "in": "query", + "name": "query", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "state:(active OR stable OR resolved)" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/incidents/search" + }, + "scenario": "Search for incidents returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/search-for-incidents-returns-ok-response.json b/test-runner-data/v2/incidents/search-for-incidents-returns-ok-response.json new file mode 100644 index 0000000000..8a91248a83 --- /dev/null +++ b/test-runner-data/v2/incidents/search-for-incidents-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Search for incidents returns \"OK\" response", + "operation_id": "SearchIncidents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": false, + "in": "query", + "name": "query", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "state:(active OR stable OR resolved)" + }, + "style": null + } + ], + "path": "/api/v2/incidents/search" + }, + "scenario": "Search for incidents returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-an-existing-incident-integration-metadata-returns-ok-response.json b/test-runner-data/v2/incidents/update-an-existing-incident-integration-metadata-returns-ok-response.json new file mode 100644 index 0000000000..bedd6a256b --- /dev/null +++ b/test-runner-data/v2/incidents/update-an-existing-incident-integration-metadata-returns-ok-response.json @@ -0,0 +1,77 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Update an existing incident integration metadata returns \"OK\" response", + "operation_id": "UpdateIncidentIntegration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentIntegrationMetadataPatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "incident_id": "{{ incident.data.id }}", + "integration_type": 1, + "metadata": { + "channels": [ + { + "channel_id": "C0123456789", + "channel_name": "#updated-channel-name", + "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567", + "team_id": "T01234567" + } + ] + } + }, + "type": "incident_integrations" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "integration_metadata_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident_integration_metadata.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/integrations/{integration_metadata_id}" + }, + "scenario": "Update an existing incident integration metadata returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-an-existing-incident-returns-ok-response.json b/test-runner-data/v2/incidents/update-an-existing-incident-returns-ok-response.json new file mode 100644 index 0000000000..2db37375bc --- /dev/null +++ b/test-runner-data/v2/incidents/update-an-existing-incident-returns-ok-response.json @@ -0,0 +1,57 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Update an existing incident returns \"OK\" response", + "operation_id": "UpdateIncident", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "fields": { + "state": { + "type": "dropdown", + "value": "resolved" + } + }, + "title": "{{ incident.data.attributes.title }}-updated" + }, + "id": "{{incident.data.id}}", + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}" + }, + "scenario": "Update an existing incident returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-an-incident-todo-returns-ok-response.json b/test-runner-data/v2/incidents/update-an-incident-todo-returns-ok-response.json new file mode 100644 index 0000000000..3183b91a80 --- /dev/null +++ b/test-runner-data/v2/incidents/update-an-incident-todo-returns-ok-response.json @@ -0,0 +1,71 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Update an incident todo returns \"OK\" response", + "operation_id": "UpdateIncidentTodo", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentTodoPatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "assignees": [ + "@test.user@test.com" + ], + "completed": "2023-03-06T22:00:00.000000+00:00", + "content": "Restore lost data.", + "due_date": "2023-07-10T05:00:00.000000+00:00" + }, + "type": "incident_todos" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "todo_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident_todo.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/relationships/todos/{todo_id}" + }, + "scenario": "Update an incident todo returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-an-incident-type-returns-ok-response.json b/test-runner-data/v2/incidents/update-an-incident-type-returns-ok-response.json new file mode 100644 index 0000000000..cb080d90a3 --- /dev/null +++ b/test-runner-data/v2/incidents/update-an-incident-type-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Update an incident type returns \"OK\" response", + "operation_id": "UpdateIncidentType", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IncidentTypePatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{incident_type.data.attributes.name}}-updated" + }, + "id": "{{incident_type.data.id}}", + "type": "incident_types" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_type_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident_type.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/types/{incident_type_id}" + }, + "scenario": "Update an incident type returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-incident-attachment-returns-not-found-response.json b/test-runner-data/v2/incidents/update-incident-attachment-returns-not-found-response.json new file mode 100644 index 0000000000..1797a9d7e8 --- /dev/null +++ b/test-runner-data/v2/incidents/update-incident-attachment-returns-not-found-response.json @@ -0,0 +1,70 @@ +{ + "api": "Incidents", + "expected_status": 404, + "feature": "Incidents", + "id": "v2/Incidents/Update incident attachment returns \"Not Found\" response", + "operation_id": "UpdateIncidentAttachment", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchAttachmentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/124/Postmortem-IR-124", + "title": "Postmortem-IR-124" + } + }, + "id": "00000000-abcd-0002-0000-000000000000", + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "attachment_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/attachments/{attachment_id}" + }, + "scenario": "Update incident attachment returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-incident-attachment-returns-ok-response.json b/test-runner-data/v2/incidents/update-incident-attachment-returns-ok-response.json new file mode 100644 index 0000000000..57de5d46ae --- /dev/null +++ b/test-runner-data/v2/incidents/update-incident-attachment-returns-ok-response.json @@ -0,0 +1,70 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Update incident attachment returns \"OK\" response", + "operation_id": "UpdateIncidentAttachment", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchAttachmentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/124/{{ unique }}", + "title": "{{ unique }}" + } + }, + "id": "{{ incident_attachment.data.id }}", + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "incident_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "attachment_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "incident_attachment.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/{incident_id}/attachments/{attachment_id}" + }, + "scenario": "Update incident attachment returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-incident-notification-rule-returns-bad-request-response.json b/test-runner-data/v2/incidents/update-incident-notification-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..a8ec82c46b --- /dev/null +++ b/test-runner-data/v2/incidents/update-incident-notification-rule-returns-bad-request-response.json @@ -0,0 +1,73 @@ +{ + "api": "Incidents", + "expected_status": 400, + "feature": "Incidents", + "id": "v2/Incidents/Update incident notification rule returns \"Bad Request\" response", + "operation_id": "UpdateIncidentNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PutIncidentNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-rules/{id}" + }, + "scenario": "Update incident notification rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-incident-notification-rule-returns-not-found-response.json b/test-runner-data/v2/incidents/update-incident-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..bd820e3de6 --- /dev/null +++ b/test-runner-data/v2/incidents/update-incident-notification-rule-returns-not-found-response.json @@ -0,0 +1,71 @@ +{ + "api": "Incidents", + "expected_status": 404, + "feature": "Incidents", + "id": "v2/Incidents/Update incident notification rule returns \"Not Found\" response", + "operation_id": "UpdateIncidentNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PutIncidentNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-rules/{id}" + }, + "scenario": "Update incident notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-incident-notification-rule-returns-ok-response.json b/test-runner-data/v2/incidents/update-incident-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..7856586e37 --- /dev/null +++ b/test-runner-data/v2/incidents/update-incident-notification-rule-returns-ok-response.json @@ -0,0 +1,72 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Update incident notification rule returns \"OK\" response", + "operation_id": "UpdateIncidentNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PutIncidentNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "conditions": [ + { + "field": "severity", + "values": [ + "SEV-1" + ] + } + ], + "enabled": false, + "handles": [ + "@updated-team-email@company.com" + ], + "trigger": "incident_modified_trigger", + "visibility": "private" + }, + "id": "{{ notification_rule.data.id }}", + "relationships": { + "incident_type": { + "data": { + "id": "{{ incident_type.data.id }}", + "type": "incident_types" + } + } + }, + "type": "incident_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-rules/{id}" + }, + "scenario": "Update incident notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-incident-notification-template-returns-bad-request-response.json b/test-runner-data/v2/incidents/update-incident-notification-template-returns-bad-request-response.json new file mode 100644 index 0000000000..e01b5e3318 --- /dev/null +++ b/test-runner-data/v2/incidents/update-incident-notification-template-returns-bad-request-response.json @@ -0,0 +1,54 @@ +{ + "api": "Incidents", + "expected_status": 400, + "feature": "Incidents", + "id": "v2/Incidents/Update incident notification template returns \"Bad Request\" response", + "operation_id": "UpdateIncidentNotificationTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchIncidentNotificationTemplateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "category": "update", + "content": "Incident Status Update: For more details, visit the incident page.", + "name": "Update Template", + "subject": "Incident Update" + }, + "id": "00000000-0000-0000-0000-000000000001", + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-1111-2222-3333-444444444444" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-templates/{id}" + }, + "scenario": "Update incident notification template returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-incident-notification-template-returns-not-found-response.json b/test-runner-data/v2/incidents/update-incident-notification-template-returns-not-found-response.json new file mode 100644 index 0000000000..fb0140a7e1 --- /dev/null +++ b/test-runner-data/v2/incidents/update-incident-notification-template-returns-not-found-response.json @@ -0,0 +1,54 @@ +{ + "api": "Incidents", + "expected_status": 404, + "feature": "Incidents", + "id": "v2/Incidents/Update incident notification template returns \"Not Found\" response", + "operation_id": "UpdateIncidentNotificationTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchIncidentNotificationTemplateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "category": "update", + "content": "Incident Status Update: For more details, visit the incident page.", + "name": "Updated Template Name", + "subject": "Incident Update" + }, + "id": "00000000-1111-2222-3333-444444444444", + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-1111-2222-3333-444444444444" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-templates/{id}" + }, + "scenario": "Update incident notification template returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/incidents/update-incident-notification-template-returns-ok-response.json b/test-runner-data/v2/incidents/update-incident-notification-template-returns-ok-response.json new file mode 100644 index 0000000000..6a9b79e2fc --- /dev/null +++ b/test-runner-data/v2/incidents/update-incident-notification-template-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "Incidents", + "expected_status": 200, + "feature": "Incidents", + "id": "v2/Incidents/Update incident notification template returns \"OK\" response", + "operation_id": "UpdateIncidentNotificationTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchIncidentNotificationTemplateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "category": "update", + "content": "Incident Status Update:\n\nTitle: Sample Incident Title\nNew Status: resolved\nSeverity: SEV-2\nServices: web-service, database-service\nCommander: John Doe\n\nFor more details, visit the incident page.", + "name": "{{ unique }}", + "subject": "Incident Update: Sample Incident Title - resolved" + }, + "id": "{{ notification_template.data.id }}", + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "notification_template.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/incidents/config/notification-templates/{id}" + }, + "scenario": "Update incident notification template returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/integrations/list-integrations-returns-successful-response-response.json b/test-runner-data/v2/integrations/list-integrations-returns-successful-response-response.json new file mode 100644 index 0000000000..b87f1c8ca6 --- /dev/null +++ b/test-runner-data/v2/integrations/list-integrations-returns-successful-response-response.json @@ -0,0 +1,18 @@ +{ + "api": "Integrations", + "expected_status": 200, + "feature": "Integrations", + "id": "v2/Integrations/List Integrations returns \"Successful Response.\" response", + "operation_id": "ListIntegrations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations" + }, + "scenario": "List Integrations returns \"Successful Response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ip-allowlist/get-ip-allowlist-returns-ok-response.json b/test-runner-data/v2/ip-allowlist/get-ip-allowlist-returns-ok-response.json new file mode 100644 index 0000000000..8c443602f5 --- /dev/null +++ b/test-runner-data/v2/ip-allowlist/get-ip-allowlist-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "IPAllowlist", + "expected_status": 200, + "feature": "IP Allowlist", + "id": "v2/IP Allowlist/Get IP Allowlist returns \"OK\" response", + "operation_id": "GetIPAllowlist", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/ip_allowlist" + }, + "scenario": "Get IP Allowlist returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ip-allowlist/update-ip-allowlist-returns-bad-request-response.json b/test-runner-data/v2/ip-allowlist/update-ip-allowlist-returns-bad-request-response.json new file mode 100644 index 0000000000..94b0e6c726 --- /dev/null +++ b/test-runner-data/v2/ip-allowlist/update-ip-allowlist-returns-bad-request-response.json @@ -0,0 +1,34 @@ +{ + "api": "IPAllowlist", + "expected_status": 400, + "feature": "IP Allowlist", + "id": "v2/IP Allowlist/Update IP Allowlist returns \"Bad Request\" response", + "operation_id": "UpdateIPAllowlist", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IPAllowlistUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "entries": [] + }, + "type": "ip_allowlist" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/ip_allowlist" + }, + "scenario": "Update IP Allowlist returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/ip-allowlist/update-ip-allowlist-returns-ok-response.json b/test-runner-data/v2/ip-allowlist/update-ip-allowlist-returns-ok-response.json new file mode 100644 index 0000000000..79d3bdf6d7 --- /dev/null +++ b/test-runner-data/v2/ip-allowlist/update-ip-allowlist-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "IPAllowlist", + "expected_status": 200, + "feature": "IP Allowlist", + "id": "v2/IP Allowlist/Update IP Allowlist returns \"OK\" response", + "operation_id": "UpdateIPAllowlist", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IPAllowlistUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "entries": [ + { + "data": { + "attributes": { + "cidr_block": "127.0.0.1", + "note": "{{ unique }}" + }, + "type": "ip_allowlist_entry" + } + } + ] + }, + "type": "ip_allowlist" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/ip_allowlist" + }, + "scenario": "Update IP Allowlist returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/create-a-personal-access-token-returns-created-response.json b/test-runner-data/v2/key-management/create-a-personal-access-token-returns-created-response.json new file mode 100644 index 0000000000..4246194b98 --- /dev/null +++ b/test-runner-data/v2/key-management/create-a-personal-access-token-returns-created-response.json @@ -0,0 +1,37 @@ +{ + "api": "KeyManagement", + "expected_status": 201, + "feature": "Key Management", + "id": "v2/Key Management/Create a personal access token returns \"Created\" response", + "operation_id": "CreatePersonalAccessToken", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PersonalAccessTokenCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "expires_at": "{{ timeISO('now+365d') }}", + "name": "{{ unique }}", + "scopes": [ + "dashboards_read" + ] + }, + "type": "personal_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/personal_access_tokens" + }, + "scenario": "Create a personal access token returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/create-an-api-key-returns-created-response.json b/test-runner-data/v2/key-management/create-an-api-key-returns-created-response.json new file mode 100644 index 0000000000..06e8f008e8 --- /dev/null +++ b/test-runner-data/v2/key-management/create-an-api-key-returns-created-response.json @@ -0,0 +1,33 @@ +{ + "api": "KeyManagement", + "expected_status": 201, + "feature": "Key Management", + "id": "v2/Key Management/Create an API key returns \"Created\" response", + "operation_id": "CreateAPIKey", + "request": { + "body": { + "schema": { + "format": null, + "ref": "APIKeyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}" + }, + "type": "api_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/api_keys" + }, + "scenario": "Create an API key returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/create-an-application-key-for-current-user-returns-created-response.json b/test-runner-data/v2/key-management/create-an-application-key-for-current-user-returns-created-response.json new file mode 100644 index 0000000000..1df5d5ca3e --- /dev/null +++ b/test-runner-data/v2/key-management/create-an-application-key-for-current-user-returns-created-response.json @@ -0,0 +1,33 @@ +{ + "api": "KeyManagement", + "expected_status": 201, + "feature": "Key Management", + "id": "v2/Key Management/Create an application key for current user returns \"Created\" response", + "operation_id": "CreateCurrentUserApplicationKey", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationKeyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/current_user/application_keys" + }, + "scenario": "Create an application key for current user returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/create-an-application-key-with-scopes-for-current-user-returns-created-response.json b/test-runner-data/v2/key-management/create-an-application-key-with-scopes-for-current-user-returns-created-response.json new file mode 100644 index 0000000000..2775374923 --- /dev/null +++ b/test-runner-data/v2/key-management/create-an-application-key-with-scopes-for-current-user-returns-created-response.json @@ -0,0 +1,38 @@ +{ + "api": "KeyManagement", + "expected_status": 201, + "feature": "Key Management", + "id": "v2/Key Management/Create an Application key with scopes for current user returns \"Created\" response", + "operation_id": "CreateCurrentUserApplicationKey", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationKeyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}", + "scopes": [ + "dashboards_read", + "dashboards_write", + "dashboards_public_share" + ] + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/current_user/application_keys" + }, + "scenario": "Create an Application key with scopes for current user returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/delete-an-api-key-returns-no-content-response.json b/test-runner-data/v2/key-management/delete-an-api-key-returns-no-content-response.json new file mode 100644 index 0000000000..68feac7069 --- /dev/null +++ b/test-runner-data/v2/key-management/delete-an-api-key-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 204, + "feature": "Key Management", + "id": "v2/Key Management/Delete an API key returns \"No Content\" response", + "operation_id": "DeleteAPIKey", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "api_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "api_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/api_keys/{api_key_id}" + }, + "scenario": "Delete an API key returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/delete-an-application-key-owned-by-current-user-returns-no-content-response.json b/test-runner-data/v2/key-management/delete-an-application-key-owned-by-current-user-returns-no-content-response.json new file mode 100644 index 0000000000..0307d95199 --- /dev/null +++ b/test-runner-data/v2/key-management/delete-an-application-key-owned-by-current-user-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 204, + "feature": "Key Management", + "id": "v2/Key Management/Delete an application key owned by current user returns \"No Content\" response", + "operation_id": "DeleteCurrentUserApplicationKey", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "application_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/current_user/application_keys/{app_key_id}" + }, + "scenario": "Delete an application key owned by current user returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/delete-an-application-key-returns-no-content-response.json b/test-runner-data/v2/key-management/delete-an-application-key-returns-no-content-response.json new file mode 100644 index 0000000000..84e3944b6b --- /dev/null +++ b/test-runner-data/v2/key-management/delete-an-application-key-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 204, + "feature": "Key Management", + "id": "v2/Key Management/Delete an application key returns \"No Content\" response", + "operation_id": "DeleteApplicationKey", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "application_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/application_keys/{app_key_id}" + }, + "scenario": "Delete an application key returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/edit-an-api-key-returns-ok-response.json b/test-runner-data/v2/key-management/edit-an-api-key-returns-ok-response.json new file mode 100644 index 0000000000..58c77a7465 --- /dev/null +++ b/test-runner-data/v2/key-management/edit-an-api-key-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Edit an API key returns \"OK\" response", + "operation_id": "UpdateAPIKey", + "request": { + "body": { + "schema": { + "format": null, + "ref": "APIKeyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}" + }, + "id": "{{ api_key.data.id }}", + "type": "api_keys" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "api_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "api_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/api_keys/{api_key_id}" + }, + "scenario": "Edit an API key returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/edit-an-application-key-owned-by-current-user-returns-ok-response.json b/test-runner-data/v2/key-management/edit-an-application-key-owned-by-current-user-returns-ok-response.json new file mode 100644 index 0000000000..35110205e5 --- /dev/null +++ b/test-runner-data/v2/key-management/edit-an-application-key-owned-by-current-user-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Edit an application key owned by current user returns \"OK\" response", + "operation_id": "UpdateCurrentUserApplicationKey", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationKeyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ application_key.data.attributes.name }}-updated" + }, + "id": "{{ application_key.data.id }}", + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "application_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/current_user/application_keys/{app_key_id}" + }, + "scenario": "Edit an application key owned by current user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/edit-an-application-key-returns-ok-response.json b/test-runner-data/v2/key-management/edit-an-application-key-returns-ok-response.json new file mode 100644 index 0000000000..26774f2934 --- /dev/null +++ b/test-runner-data/v2/key-management/edit-an-application-key-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Edit an application key returns \"OK\" response", + "operation_id": "UpdateApplicationKey", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationKeyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ application_key.data.attributes.name }}-updated" + }, + "id": "{{ application_key.data.id }}", + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "application_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/application_keys/{app_key_id}" + }, + "scenario": "Edit an application key returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-a-personal-access-token-returns-ok-response.json b/test-runner-data/v2/key-management/get-a-personal-access-token-returns-ok-response.json new file mode 100644 index 0000000000..932b5801e1 --- /dev/null +++ b/test-runner-data/v2/key-management/get-a-personal-access-token-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Get a personal access token returns \"OK\" response", + "operation_id": "GetPersonalAccessToken", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "token_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "personal_access_token.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/personal_access_tokens/{token_id}" + }, + "scenario": "Get a personal access token returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-all-api-keys-returns-ok-response.json b/test-runner-data/v2/key-management/get-all-api-keys-returns-ok-response.json new file mode 100644 index 0000000000..283dfb6222 --- /dev/null +++ b/test-runner-data/v2/key-management/get-all-api-keys-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Get all API keys returns \"OK\" response", + "operation_id": "ListAPIKeys", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "api_key.data.attributes.name", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/api_keys" + }, + "scenario": "Get all API keys returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-all-application-keys-owned-by-current-user-returns-ok-response.json b/test-runner-data/v2/key-management/get-all-application-keys-owned-by-current-user-returns-ok-response.json new file mode 100644 index 0000000000..8536586c35 --- /dev/null +++ b/test-runner-data/v2/key-management/get-all-application-keys-owned-by-current-user-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Get all application keys owned by current user returns \"OK\" response", + "operation_id": "ListCurrentUserApplicationKeys", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/current_user/application_keys" + }, + "scenario": "Get all application keys owned by current user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-all-application-keys-returns-ok-response.json b/test-runner-data/v2/key-management/get-all-application-keys-returns-ok-response.json new file mode 100644 index 0000000000..47f49f6da7 --- /dev/null +++ b/test-runner-data/v2/key-management/get-all-application-keys-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Get all application keys returns \"OK\" response", + "operation_id": "ListApplicationKeys", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/application_keys" + }, + "scenario": "Get all application keys returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-all-personal-access-tokens-returns-ok-response.json b/test-runner-data/v2/key-management/get-all-personal-access-tokens-returns-ok-response.json new file mode 100644 index 0000000000..5d9b36c024 --- /dev/null +++ b/test-runner-data/v2/key-management/get-all-personal-access-tokens-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Get all personal access tokens returns \"OK\" response", + "operation_id": "ListPersonalAccessTokens", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/personal_access_tokens" + }, + "scenario": "Get all personal access tokens returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-an-application-key-returns-not-found-response.json b/test-runner-data/v2/key-management/get-an-application-key-returns-not-found-response.json new file mode 100644 index 0000000000..d9b6362c27 --- /dev/null +++ b/test-runner-data/v2/key-management/get-an-application-key-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 404, + "feature": "Key Management", + "id": "v2/Key Management/Get an application key returns \"Not Found\" response", + "operation_id": "GetApplicationKey", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalidId" + }, + "style": null + } + ], + "path": "/api/v2/application_keys/{app_key_id}" + }, + "scenario": "Get an application key returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-an-application-key-returns-ok-response.json b/test-runner-data/v2/key-management/get-an-application-key-returns-ok-response.json new file mode 100644 index 0000000000..60ef32b4f6 --- /dev/null +++ b/test-runner-data/v2/key-management/get-an-application-key-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Get an application key returns \"OK\" response", + "operation_id": "GetApplicationKey", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "application_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/application_keys/{app_key_id}" + }, + "scenario": "Get an application key returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-api-key-returns-not-found-response.json b/test-runner-data/v2/key-management/get-api-key-returns-not-found-response.json new file mode 100644 index 0000000000..82cf6fa1b2 --- /dev/null +++ b/test-runner-data/v2/key-management/get-api-key-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 404, + "feature": "Key Management", + "id": "v2/Key Management/Get API key returns \"Not Found\" response", + "operation_id": "GetAPIKey", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "api_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalidId" + }, + "style": null + } + ], + "path": "/api/v2/api_keys/{api_key_id}" + }, + "scenario": "Get API key returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-api-key-returns-ok-response.json b/test-runner-data/v2/key-management/get-api-key-returns-ok-response.json new file mode 100644 index 0000000000..879e71cd35 --- /dev/null +++ b/test-runner-data/v2/key-management/get-api-key-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Get API key returns \"OK\" response", + "operation_id": "GetAPIKey", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "api_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "api_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/api_keys/{api_key_id}" + }, + "scenario": "Get API key returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-one-application-key-owned-by-current-user-returns-not-found-response.json b/test-runner-data/v2/key-management/get-one-application-key-owned-by-current-user-returns-not-found-response.json new file mode 100644 index 0000000000..34a8f42d09 --- /dev/null +++ b/test-runner-data/v2/key-management/get-one-application-key-owned-by-current-user-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 404, + "feature": "Key Management", + "id": "v2/Key Management/Get one application key owned by current user returns \"Not Found\" response", + "operation_id": "GetCurrentUserApplicationKey", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "incorrectId" + }, + "style": null + } + ], + "path": "/api/v2/current_user/application_keys/{app_key_id}" + }, + "scenario": "Get one application key owned by current user returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/get-one-application-key-owned-by-current-user-returns-ok-response.json b/test-runner-data/v2/key-management/get-one-application-key-owned-by-current-user-returns-ok-response.json new file mode 100644 index 0000000000..6f794dd36a --- /dev/null +++ b/test-runner-data/v2/key-management/get-one-application-key-owned-by-current-user-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Get one application key owned by current user returns \"OK\" response", + "operation_id": "GetCurrentUserApplicationKey", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "application_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/current_user/application_keys/{app_key_id}" + }, + "scenario": "Get one application key owned by current user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/revoke-a-personal-access-token-returns-no-content-response.json b/test-runner-data/v2/key-management/revoke-a-personal-access-token-returns-no-content-response.json new file mode 100644 index 0000000000..46e4775ce5 --- /dev/null +++ b/test-runner-data/v2/key-management/revoke-a-personal-access-token-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "KeyManagement", + "expected_status": 204, + "feature": "Key Management", + "id": "v2/Key Management/Revoke a personal access token returns \"No Content\" response", + "operation_id": "RevokePersonalAccessToken", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "token_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "personal_access_token.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/personal_access_tokens/{token_id}" + }, + "scenario": "Revoke a personal access token returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/key-management/update-a-personal-access-token-returns-ok-response.json b/test-runner-data/v2/key-management/update-a-personal-access-token-returns-ok-response.json new file mode 100644 index 0000000000..081ed1147c --- /dev/null +++ b/test-runner-data/v2/key-management/update-a-personal-access-token-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "KeyManagement", + "expected_status": 200, + "feature": "Key Management", + "id": "v2/Key Management/Update a personal access token returns \"OK\" response", + "operation_id": "UpdatePersonalAccessToken", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PersonalAccessTokenUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}-updated" + }, + "id": "{{ personal_access_token.data.id }}", + "type": "personal_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "token_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "personal_access_token.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/personal_access_tokens/{token_id}" + }, + "scenario": "Update a personal access token returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-bad-request-response.json b/test-runner-data/v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-bad-request-response.json new file mode 100644 index 0000000000..65929251dd --- /dev/null +++ b/test-runner-data/v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "LLMObservability", + "expected_status": 400, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Create a new LLM Observability prompt version returns \"Bad Request\" response", + "operation_id": "CreateLLMObsPromptVersion", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsCreatePromptVersionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "template": " " + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions" + }, + "scenario": "Create a new LLM Observability prompt version returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-not-found-response.json b/test-runner-data/v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-not-found-response.json new file mode 100644 index 0000000000..ad4bf8d9f7 --- /dev/null +++ b/test-runner-data/v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-not-found-response.json @@ -0,0 +1,57 @@ +{ + "api": "LLMObservability", + "expected_status": 404, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Create a new LLM Observability prompt version returns \"Not Found\" response", + "operation_id": "CreateLLMObsPromptVersion", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsCreatePromptVersionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "env_ids": [], + "labels": [], + "template": [ + { + "content": "Hello v2", + "role": "user" + } + ] + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "nonexistent-prompt" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions" + }, + "scenario": "Create a new LLM Observability prompt version returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-ok-response.json b/test-runner-data/v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-ok-response.json new file mode 100644 index 0000000000..c6ef8f2200 --- /dev/null +++ b/test-runner-data/v2/llm-observability/create-a-new-llm-observability-prompt-version-returns-ok-response.json @@ -0,0 +1,59 @@ +{ + "api": "LLMObservability", + "expected_status": 200, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Create a new LLM Observability prompt version returns \"OK\" response", + "operation_id": "CreateLLMObsPromptVersion", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsCreatePromptVersionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "template": [ + { + "content": "You are a concise customer support assistant for {{ '{{company_name}}' }}.", + "role": "system" + }, + { + "content": "Answer {{ '{{customer_name}}' }}'s question: {{ '{{question}}' }}", + "role": "user" + } + ] + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions" + }, + "scenario": "Create a new LLM Observability prompt version returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/create-an-llm-observability-prompt-returns-bad-request-response.json b/test-runner-data/v2/llm-observability/create-an-llm-observability-prompt-returns-bad-request-response.json new file mode 100644 index 0000000000..df5731e579 --- /dev/null +++ b/test-runner-data/v2/llm-observability/create-an-llm-observability-prompt-returns-bad-request-response.json @@ -0,0 +1,34 @@ +{ + "api": "LLMObservability", + "expected_status": 400, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Create an LLM Observability prompt returns \"Bad Request\" response", + "operation_id": "CreateLLMObsPrompt", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsCreatePromptRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "prompt_id": "{{ unique }}", + "template": " " + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/llm-obs/v1/prompts" + }, + "scenario": "Create an LLM Observability prompt returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/create-an-llm-observability-prompt-returns-conflict-response.json b/test-runner-data/v2/llm-observability/create-an-llm-observability-prompt-returns-conflict-response.json new file mode 100644 index 0000000000..b840eeafa5 --- /dev/null +++ b/test-runner-data/v2/llm-observability/create-an-llm-observability-prompt-returns-conflict-response.json @@ -0,0 +1,41 @@ +{ + "api": "LLMObservability", + "expected_status": 409, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Create an LLM Observability prompt returns \"Conflict\" response", + "operation_id": "CreateLLMObsPrompt", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsCreatePromptRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "env_ids": [], + "labels": [], + "prompt_id": "{{ prompt.data.attributes.prompt_id }}", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/llm-obs/v1/prompts" + }, + "scenario": "Create an LLM Observability prompt returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/create-an-llm-observability-prompt-returns-ok-response.json b/test-runner-data/v2/llm-observability/create-an-llm-observability-prompt-returns-ok-response.json new file mode 100644 index 0000000000..c0b21409bd --- /dev/null +++ b/test-runner-data/v2/llm-observability/create-an-llm-observability-prompt-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "LLMObservability", + "expected_status": 200, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Create an LLM Observability prompt returns \"OK\" response", + "operation_id": "CreateLLMObsPrompt", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsCreatePromptRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "prompt_id": "{{ unique }}", + "template": [ + { + "content": "You are a helpful customer support assistant for {{ '{{company_name}}' }}.", + "role": "system" + }, + { + "content": "Help {{ '{{customer_name}}' }} with this question: {{ '{{question}}' }}", + "role": "user" + } + ], + "title": "Customer Support Assistant" + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/llm-obs/v1/prompts" + }, + "scenario": "Create an LLM Observability prompt returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/delete-an-llm-observability-prompt-returns-not-found-response.json b/test-runner-data/v2/llm-observability/delete-an-llm-observability-prompt-returns-not-found-response.json new file mode 100644 index 0000000000..743ed23354 --- /dev/null +++ b/test-runner-data/v2/llm-observability/delete-an-llm-observability-prompt-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "LLMObservability", + "expected_status": 404, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Delete an LLM Observability prompt returns \"Not Found\" response", + "operation_id": "DeleteLLMObsPrompt", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "nonexistent-prompt" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}" + }, + "scenario": "Delete an LLM Observability prompt returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/delete-an-llm-observability-prompt-returns-ok-response.json b/test-runner-data/v2/llm-observability/delete-an-llm-observability-prompt-returns-ok-response.json new file mode 100644 index 0000000000..110b0d02fb --- /dev/null +++ b/test-runner-data/v2/llm-observability/delete-an-llm-observability-prompt-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LLMObservability", + "expected_status": 200, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Delete an LLM Observability prompt returns \"OK\" response", + "operation_id": "DeleteLLMObsPrompt", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}" + }, + "scenario": "Delete an LLM Observability prompt returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/get-a-specific-llm-observability-prompt-version-returns-not-found-response.json b/test-runner-data/v2/llm-observability/get-a-specific-llm-observability-prompt-version-returns-not-found-response.json new file mode 100644 index 0000000000..08da415a6c --- /dev/null +++ b/test-runner-data/v2/llm-observability/get-a-specific-llm-observability-prompt-version-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "LLMObservability", + "expected_status": 404, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Get a specific LLM Observability prompt version returns \"Not Found\" response", + "operation_id": "GetLLMObsPromptVersion", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "nonexistent-prompt" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions/{version}" + }, + "scenario": "Get a specific LLM Observability prompt version returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/get-a-specific-llm-observability-prompt-version-returns-ok-response.json b/test-runner-data/v2/llm-observability/get-a-specific-llm-observability-prompt-version-returns-ok-response.json new file mode 100644 index 0000000000..87d861d12b --- /dev/null +++ b/test-runner-data/v2/llm-observability/get-a-specific-llm-observability-prompt-version-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "LLMObservability", + "expected_status": 200, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Get a specific LLM Observability prompt version returns \"OK\" response", + "operation_id": "GetLLMObsPromptVersion", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "prompt_version.data.attributes.version", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions/{version}" + }, + "scenario": "Get a specific LLM Observability prompt version returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/get-an-llm-observability-prompt-returns-not-found-response.json b/test-runner-data/v2/llm-observability/get-an-llm-observability-prompt-returns-not-found-response.json new file mode 100644 index 0000000000..c7cbbe4ad6 --- /dev/null +++ b/test-runner-data/v2/llm-observability/get-an-llm-observability-prompt-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "LLMObservability", + "expected_status": 404, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Get an LLM Observability prompt returns \"Not Found\" response", + "operation_id": "GetLLMObsPrompt", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "nonexistent-prompt" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}" + }, + "scenario": "Get an LLM Observability prompt returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/get-an-llm-observability-prompt-returns-ok-response.json b/test-runner-data/v2/llm-observability/get-an-llm-observability-prompt-returns-ok-response.json new file mode 100644 index 0000000000..05b2719652 --- /dev/null +++ b/test-runner-data/v2/llm-observability/get-an-llm-observability-prompt-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LLMObservability", + "expected_status": 200, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Get an LLM Observability prompt returns \"OK\" response", + "operation_id": "GetLLMObsPrompt", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}" + }, + "scenario": "Get an LLM Observability prompt returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/list-llm-observability-prompts-returns-ok-response.json b/test-runner-data/v2/llm-observability/list-llm-observability-prompts-returns-ok-response.json new file mode 100644 index 0000000000..60268602b4 --- /dev/null +++ b/test-runner-data/v2/llm-observability/list-llm-observability-prompts-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LLMObservability", + "expected_status": 200, + "feature": "LLM Observability", + "id": "v2/LLM Observability/List LLM Observability prompts returns \"OK\" response", + "operation_id": "ListLLMObsPrompts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[prompt_id]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts" + }, + "scenario": "List LLM Observability prompts returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/list-versions-of-an-llm-observability-prompt-returns-ok-response.json b/test-runner-data/v2/llm-observability/list-versions-of-an-llm-observability-prompt-returns-ok-response.json new file mode 100644 index 0000000000..bc4fe3c62d --- /dev/null +++ b/test-runner-data/v2/llm-observability/list-versions-of-an-llm-observability-prompt-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LLMObservability", + "expected_status": 200, + "feature": "LLM Observability", + "id": "v2/LLM Observability/List versions of an LLM Observability prompt returns \"OK\" response", + "operation_id": "ListLLMObsPromptVersions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions" + }, + "scenario": "List versions of an LLM Observability prompt returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/update-a-specific-llm-observability-prompt-version-returns-not-found-response.json b/test-runner-data/v2/llm-observability/update-a-specific-llm-observability-prompt-version-returns-not-found-response.json new file mode 100644 index 0000000000..0fc3e751ba --- /dev/null +++ b/test-runner-data/v2/llm-observability/update-a-specific-llm-observability-prompt-version-returns-not-found-response.json @@ -0,0 +1,67 @@ +{ + "api": "LLMObservability", + "expected_status": 404, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Update a specific LLM Observability prompt version returns \"Not Found\" response", + "operation_id": "UpdateLLMObsPromptVersion", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsUpdatePromptVersionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "env_ids": [], + "labels": [] + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "nonexistent-prompt" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions/{version}" + }, + "scenario": "Update a specific LLM Observability prompt version returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/update-a-specific-llm-observability-prompt-version-returns-ok-response.json b/test-runner-data/v2/llm-observability/update-a-specific-llm-observability-prompt-version-returns-ok-response.json new file mode 100644 index 0000000000..861e8da8a0 --- /dev/null +++ b/test-runner-data/v2/llm-observability/update-a-specific-llm-observability-prompt-version-returns-ok-response.json @@ -0,0 +1,66 @@ +{ + "api": "LLMObservability", + "expected_status": 200, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Update a specific LLM Observability prompt version returns \"OK\" response", + "operation_id": "UpdateLLMObsPromptVersion", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsUpdatePromptVersionRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Give concise answers and cite relevant help-center articles." + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "path": "prompt_version.data.attributes.version", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}/versions/{version}" + }, + "scenario": "Update a specific LLM Observability prompt version returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/update-an-llm-observability-prompt-returns-bad-request-response.json b/test-runner-data/v2/llm-observability/update-an-llm-observability-prompt-returns-bad-request-response.json new file mode 100644 index 0000000000..2299dae0e6 --- /dev/null +++ b/test-runner-data/v2/llm-observability/update-an-llm-observability-prompt-returns-bad-request-response.json @@ -0,0 +1,48 @@ +{ + "api": "LLMObservability", + "expected_status": 400, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Update an LLM Observability prompt returns \"Bad Request\" response", + "operation_id": "UpdateLLMObsPrompt", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsUpdatePromptRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": {}, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}" + }, + "scenario": "Update an LLM Observability prompt returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/update-an-llm-observability-prompt-returns-not-found-response.json b/test-runner-data/v2/llm-observability/update-an-llm-observability-prompt-returns-not-found-response.json new file mode 100644 index 0000000000..5c63acb058 --- /dev/null +++ b/test-runner-data/v2/llm-observability/update-an-llm-observability-prompt-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "LLMObservability", + "expected_status": 404, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Update an LLM Observability prompt returns \"Not Found\" response", + "operation_id": "UpdateLLMObsPrompt", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsUpdatePromptRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "title": "New title" + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "nonexistent-prompt" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}" + }, + "scenario": "Update an LLM Observability prompt returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/llm-observability/update-an-llm-observability-prompt-returns-ok-response.json b/test-runner-data/v2/llm-observability/update-an-llm-observability-prompt-returns-ok-response.json new file mode 100644 index 0000000000..43684364ba --- /dev/null +++ b/test-runner-data/v2/llm-observability/update-an-llm-observability-prompt-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "LLMObservability", + "expected_status": 200, + "feature": "LLM Observability", + "id": "v2/LLM Observability/Update an LLM Observability prompt returns \"OK\" response", + "operation_id": "UpdateLLMObsPrompt", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LLMObsUpdatePromptRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "title": "Customer Support Assistant" + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "prompt_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "prompt.data.attributes.prompt_id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/llm-obs/v1/prompts/{prompt_id}" + }, + "scenario": "Update an LLM Observability prompt returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-a-basic-http-custom-destination-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/create-a-basic-http-custom-destination-returns-ok-response.json new file mode 100644 index 0000000000..d037b6593f --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-a-basic-http-custom-destination-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create a Basic HTTP custom destination returns \"OK\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "auth": { + "password": "datadog-custom-destination-password", + "type": "basic", + "username": "datadog-custom-destination-username" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create a Basic HTTP custom destination returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-a-custom-destination-returns-bad-request-response.json b/test-runner-data/v2/logs-custom-destinations/create-a-custom-destination-returns-bad-request-response.json new file mode 100644 index 0000000000..fa079ca9bb --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-a-custom-destination-returns-bad-request-response.json @@ -0,0 +1,33 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 400, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create a custom destination returns \"Bad Request\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Nginx logs" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create a custom destination returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-a-custom-header-http-custom-destination-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/create-a-custom-header-http-custom-destination-returns-ok-response.json new file mode 100644 index 0000000000..6905e4a155 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-a-custom-header-http-custom-destination-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create a Custom Header HTTP custom destination returns \"OK\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "auth": { + "header_name": "MY-AUTHENTICATION-HEADER", + "header_value": "my-secret", + "type": "custom_header" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create a Custom Header HTTP custom destination returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-a-microsoft-sentinel-custom-destination-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/create-a-microsoft-sentinel-custom-destination-returns-ok-response.json new file mode 100644 index 0000000000..7b394c6263 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-a-microsoft-sentinel-custom-destination-returns-ok-response.json @@ -0,0 +1,49 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create a Microsoft Sentinel custom destination returns \"OK\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "client_id": "9a2f4d83-2b5e-429e-a35a-2b3c4182db71", + "data_collection_endpoint": "https://my-dce-5kyl.eastus-1.ingest.monitor.azure.com", + "data_collection_rule_id": "dcr-000a00a000a00000a000000aa000a0aa", + "stream_name": "Custom-MyTable", + "tenant_id": "f3c9a8a1-4c2e-4d2e-b911-9f3c28c3c8b2", + "type": "microsoft_sentinel" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create a Microsoft Sentinel custom destination returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-returns-ok-response.json new file mode 100644 index 0000000000..b0b7229974 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-returns-ok-response.json @@ -0,0 +1,46 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create a Splunk custom destination returns \"OK\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create a Splunk custom destination returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-with-a-null-sourcetype-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-with-a-null-sourcetype-returns-ok-response.json new file mode 100644 index 0000000000..cd4c54bb49 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-with-a-null-sourcetype-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create a Splunk custom destination with a null sourcetype returns \"OK\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": null, + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create a Splunk custom destination with a null sourcetype returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-with-a-sourcetype-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-with-a-sourcetype-returns-ok-response.json new file mode 100644 index 0000000000..1b0a1b7c40 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-with-a-sourcetype-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create a Splunk custom destination with a sourcetype returns \"OK\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": "my-sourcetype", + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create a Splunk custom destination with a sourcetype returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-with-an-empty-string-sourcetype-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-with-an-empty-string-sourcetype-returns-ok-response.json new file mode 100644 index 0000000000..d5301fa379 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-with-an-empty-string-sourcetype-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create a Splunk custom destination with an empty string sourcetype returns \"OK\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": "", + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create a Splunk custom destination with an empty string sourcetype returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-without-a-sourcetype-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-without-a-sourcetype-returns-ok-response.json new file mode 100644 index 0000000000..eb20000c9a --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-a-splunk-custom-destination-without-a-sourcetype-returns-ok-response.json @@ -0,0 +1,41 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create a Splunk custom destination without a sourcetype returns \"OK\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create a Splunk custom destination without a sourcetype returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/create-an-elasticsearch-custom-destination-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/create-an-elasticsearch-custom-destination-returns-ok-response.json new file mode 100644 index 0000000000..ab256d1a09 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/create-an-elasticsearch-custom-destination-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Create an Elasticsearch custom destination returns \"OK\" response", + "operation_id": "CreateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "auth": { + "password": "my-password", + "username": "my-username" + }, + "endpoint": "https://example.com", + "index_name": "nginx-logs", + "index_rotation": "yyyy-MM-dd", + "type": "elasticsearch" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Create an Elasticsearch custom destination returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/delete-a-custom-destination-returns-not-found-response.json b/test-runner-data/v2/logs-custom-destinations/delete-a-custom-destination-returns-not-found-response.json new file mode 100644 index 0000000000..2cff249f3f --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/delete-a-custom-destination-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 404, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Delete a custom destination returns \"Not Found\" response", + "operation_id": "DeleteLogsCustomDestination", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "does-not-exist" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Delete a custom destination returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/delete-a-custom-destination-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/delete-a-custom-destination-returns-ok-response.json new file mode 100644 index 0000000000..f95dbc291f --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/delete-a-custom-destination-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 204, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Delete a custom destination returns \"OK\" response", + "operation_id": "DeleteLogsCustomDestination", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_destination.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Delete a custom destination returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/get-a-custom-destination-returns-not-found-response.json b/test-runner-data/v2/logs-custom-destinations/get-a-custom-destination-returns-not-found-response.json new file mode 100644 index 0000000000..98d32c31ab --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/get-a-custom-destination-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 404, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Get a custom destination returns \"Not Found\" response", + "operation_id": "GetLogsCustomDestination", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "does-not-exist" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Get a custom destination returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/get-a-custom-destination-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/get-a-custom-destination-returns-ok-response.json new file mode 100644 index 0000000000..c1bfd5a297 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/get-a-custom-destination-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Get a custom destination returns \"OK\" response", + "operation_id": "GetLogsCustomDestination", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_destination.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Get a custom destination returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/get-all-custom-destinations-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/get-all-custom-destinations-returns-ok-response.json new file mode 100644 index 0000000000..43fc5b28df --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/get-all-custom-destinations-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Get all custom destinations returns \"OK\" response", + "operation_id": "ListLogsCustomDestinations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/custom-destinations" + }, + "scenario": "Get all custom destinations returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/update-a-custom-destination-returns-bad-request-response.json b/test-runner-data/v2/logs-custom-destinations/update-a-custom-destination-returns-bad-request-response.json new file mode 100644 index 0000000000..a44157a672 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/update-a-custom-destination-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 400, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Update a custom destination returns \"Bad Request\" response", + "operation_id": "UpdateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "forward_tags_restriction_list_type": "this_list_type_does_not_exist" + }, + "id": "{{ custom_destination.data.id }}", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_destination.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Update a custom destination returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/update-a-custom-destination-returns-not-found-response.json b/test-runner-data/v2/logs-custom-destinations/update-a-custom-destination-returns-not-found-response.json new file mode 100644 index 0000000000..042bdae1ec --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/update-a-custom-destination-returns-not-found-response.json @@ -0,0 +1,68 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 404, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Update a custom destination returns \"Not Found\" response", + "operation_id": "UpdateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "auth": { + "password": "datadog-custom-destination-password", + "type": "basic", + "username": "datadog-custom-destination-username" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "id": "id-from-non-existing-custom-destination", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "id-from-non-existing-custom-destination" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Update a custom destination returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/update-a-custom-destination-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/update-a-custom-destination-returns-ok-response.json new file mode 100644 index 0000000000..40a5f6caa3 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/update-a-custom-destination-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Update a custom destination returns \"OK\" response", + "operation_id": "UpdateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list_type": "BLOCK_LIST", + "name": "Nginx logs (Updated)", + "query": "source:nginx" + }, + "id": "{{ custom_destination.data.id }}", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_destination.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Update a custom destination returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-s-attributes-preserves-the-absent-sourcetype-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-s-attributes-preserves-the-absent-sourcetype-returns-ok-response.json new file mode 100644 index 0000000000..45dee73786 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-s-attributes-preserves-the-absent-sourcetype-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Update a Splunk custom destination's attributes preserves the absent sourcetype returns \"OK\" response", + "operation_id": "UpdateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Nginx logs (Updated)" + }, + "id": "{{ custom_destination_splunk.data.id }}", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_destination_splunk.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Update a Splunk custom destination's attributes preserves the absent sourcetype returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-s-destination-preserves-the-null-sourcetype-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-s-destination-preserves-the-null-sourcetype-returns-ok-response.json new file mode 100644 index 0000000000..89ae540748 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-s-destination-preserves-the-null-sourcetype-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Update a Splunk custom destination's destination preserves the null sourcetype returns \"OK\" response", + "operation_id": "UpdateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://updated-example.com", + "type": "splunk_hec" + } + }, + "id": "{{ custom_destination_splunk_with_null_sourcetype.data.id }}", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_destination_splunk_with_null_sourcetype.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Update a Splunk custom destination's destination preserves the null sourcetype returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-s-destination-preserves-the-sourcetype-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-s-destination-preserves-the-sourcetype-returns-ok-response.json new file mode 100644 index 0000000000..f8d836e4cd --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-s-destination-preserves-the-sourcetype-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Update a Splunk custom destination's destination preserves the sourcetype returns \"OK\" response", + "operation_id": "UpdateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://updated-example.com", + "type": "splunk_hec" + } + }, + "id": "{{ custom_destination_splunk_with_sourcetype.data.id }}", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_destination_splunk_with_sourcetype.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Update a Splunk custom destination's destination preserves the sourcetype returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-with-a-null-sourcetype-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-with-a-null-sourcetype-returns-ok-response.json new file mode 100644 index 0000000000..37b7778ca7 --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-with-a-null-sourcetype-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Update a Splunk custom destination with a null sourcetype returns \"OK\" response", + "operation_id": "UpdateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": null, + "type": "splunk_hec" + } + }, + "id": "{{ custom_destination_splunk_with_sourcetype.data.id }}", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_destination_splunk_with_sourcetype.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Update a Splunk custom destination with a null sourcetype returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-with-a-sourcetype-returns-ok-response.json b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-with-a-sourcetype-returns-ok-response.json new file mode 100644 index 0000000000..19e7afdb6f --- /dev/null +++ b/test-runner-data/v2/logs-custom-destinations/update-a-splunk-custom-destination-with-a-sourcetype-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "LogsCustomDestinations", + "expected_status": 200, + "feature": "Logs Custom Destinations", + "id": "v2/Logs Custom Destinations/Update a Splunk custom destination with a sourcetype returns \"OK\" response", + "operation_id": "UpdateLogsCustomDestination", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CustomDestinationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": "new-sourcetype", + "type": "splunk_hec" + } + }, + "id": "{{ custom_destination_splunk.data.id }}", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "custom_destination_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "custom_destination_splunk.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/custom-destinations/{custom_destination_id}" + }, + "scenario": "Update a Splunk custom destination with a sourcetype returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-metrics/create-a-log-based-metric-returns-ok-response.json b/test-runner-data/v2/logs-metrics/create-a-log-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..65278081b7 --- /dev/null +++ b/test-runner-data/v2/logs-metrics/create-a-log-based-metric-returns-ok-response.json @@ -0,0 +1,38 @@ +{ + "api": "LogsMetrics", + "expected_status": 200, + "feature": "Logs Metrics", + "id": "v2/Logs Metrics/Create a log-based metric returns \"OK\" response", + "operation_id": "CreateLogsMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsMetricCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + } + }, + "id": "{{ unique_alnum }}", + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/metrics" + }, + "scenario": "Create a log-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-metrics/delete-a-log-based-metric-returns-ok-response.json b/test-runner-data/v2/logs-metrics/delete-a-log-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..72775b1e3d --- /dev/null +++ b/test-runner-data/v2/logs-metrics/delete-a-log-based-metric-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsMetrics", + "expected_status": 204, + "feature": "Logs Metrics", + "id": "v2/Logs Metrics/Delete a log-based metric returns \"OK\" response", + "operation_id": "DeleteLogsMetric", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "logs_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/metrics/{metric_id}" + }, + "scenario": "Delete a log-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-metrics/get-a-log-based-metric-returns-ok-response.json b/test-runner-data/v2/logs-metrics/get-a-log-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..768dff006c --- /dev/null +++ b/test-runner-data/v2/logs-metrics/get-a-log-based-metric-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsMetrics", + "expected_status": 200, + "feature": "Logs Metrics", + "id": "v2/Logs Metrics/Get a log-based metric returns \"OK\" response", + "operation_id": "GetLogsMetric", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "logs_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/metrics/{metric_id}" + }, + "scenario": "Get a log-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-metrics/get-all-log-based-metrics-returns-ok-response.json b/test-runner-data/v2/logs-metrics/get-all-log-based-metrics-returns-ok-response.json new file mode 100644 index 0000000000..8bae030c47 --- /dev/null +++ b/test-runner-data/v2/logs-metrics/get-all-log-based-metrics-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "LogsMetrics", + "expected_status": 200, + "feature": "Logs Metrics", + "id": "v2/Logs Metrics/Get all log-based metrics returns \"OK\" response", + "operation_id": "ListLogsMetrics", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/metrics" + }, + "scenario": "Get all log-based metrics returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-metrics/update-a-log-based-metric-returns-ok-response.json b/test-runner-data/v2/logs-metrics/update-a-log-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..5805842d2d --- /dev/null +++ b/test-runner-data/v2/logs-metrics/update-a-log-based-metric-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "LogsMetrics", + "expected_status": 200, + "feature": "Logs Metrics", + "id": "v2/Logs Metrics/Update a log-based metric returns \"OK\" response", + "operation_id": "UpdateLogsMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsMetricUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "query": "{{ logs_metric.data.attributes.filter.query }}-updated" + } + }, + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "logs_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/metrics/{metric_id}" + }, + "scenario": "Update a log-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-metrics/update-a-log-based-metric-with-include-percentiles-field-returns-ok-response.json b/test-runner-data/v2/logs-metrics/update-a-log-based-metric-with-include-percentiles-field-returns-ok-response.json new file mode 100644 index 0000000000..b241febab3 --- /dev/null +++ b/test-runner-data/v2/logs-metrics/update-a-log-based-metric-with-include-percentiles-field-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "LogsMetrics", + "expected_status": 200, + "feature": "Logs Metrics", + "id": "v2/Logs Metrics/Update a log-based metric with include_percentiles field returns \"OK\" response", + "operation_id": "UpdateLogsMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsMetricUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": false + } + }, + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "logs_metric_percentile.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/metrics/{metric_id}" + }, + "scenario": "Update a log-based metric with include_percentiles field returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/create-a-restriction-query-returns-bad-request-response.json b/test-runner-data/v2/logs-restriction-queries/create-a-restriction-query-returns-bad-request-response.json new file mode 100644 index 0000000000..58cf0121fd --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/create-a-restriction-query-returns-bad-request-response.json @@ -0,0 +1,28 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 400, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Create a restriction query returns \"Bad Request\" response", + "operation_id": "CreateRestrictionQuery", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RestrictionQueryCreatePayload", + "type": "object" + }, + "source": "inline", + "value": { + "test": "bad_request" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/restriction_queries" + }, + "scenario": "Create a restriction query returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/create-a-restriction-query-returns-ok-response.json b/test-runner-data/v2/logs-restriction-queries/create-a-restriction-query-returns-ok-response.json new file mode 100644 index 0000000000..b2a470f225 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/create-a-restriction-query-returns-ok-response.json @@ -0,0 +1,33 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 200, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Create a restriction query returns \"OK\" response", + "operation_id": "CreateRestrictionQuery", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RestrictionQueryCreatePayload", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "restriction_query": "env:sandbox" + }, + "type": "logs_restriction_queries" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/restriction_queries" + }, + "scenario": "Create a restriction query returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/delete-a-restriction-query-returns-bad-request-response.json b/test-runner-data/v2/logs-restriction-queries/delete-a-restriction-query-returns-bad-request-response.json new file mode 100644 index 0000000000..6fd8982636 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/delete-a-restriction-query-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 400, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Delete a restriction query returns \"Bad Request\" response", + "operation_id": "DeleteRestrictionQuery", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}" + }, + "scenario": "Delete a restriction query returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/delete-a-restriction-query-returns-not-found-response.json b/test-runner-data/v2/logs-restriction-queries/delete-a-restriction-query-returns-not-found-response.json new file mode 100644 index 0000000000..c2f37360b5 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/delete-a-restriction-query-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 404, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Delete a restriction query returns \"Not found\" response", + "operation_id": "DeleteRestrictionQuery", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}" + }, + "scenario": "Delete a restriction query returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/delete-a-restriction-query-returns-ok-response.json b/test-runner-data/v2/logs-restriction-queries/delete-a-restriction-query-returns-ok-response.json new file mode 100644 index 0000000000..d63399d170 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/delete-a-restriction-query-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 204, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Delete a restriction query returns \"OK\" response", + "operation_id": "DeleteRestrictionQuery", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "restriction_query.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}" + }, + "scenario": "Delete a restriction query returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/get-a-restriction-query-returns-bad-request-response.json b/test-runner-data/v2/logs-restriction-queries/get-a-restriction-query-returns-bad-request-response.json new file mode 100644 index 0000000000..2167051fee --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/get-a-restriction-query-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 400, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Get a restriction query returns \"Bad Request\" response", + "operation_id": "GetRestrictionQuery", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}" + }, + "scenario": "Get a restriction query returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/get-a-restriction-query-returns-not-found-response.json b/test-runner-data/v2/logs-restriction-queries/get-a-restriction-query-returns-not-found-response.json new file mode 100644 index 0000000000..5a3b41481c --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/get-a-restriction-query-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 404, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Get a restriction query returns \"Not found\" response", + "operation_id": "GetRestrictionQuery", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}" + }, + "scenario": "Get a restriction query returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/get-a-restriction-query-returns-ok-response.json b/test-runner-data/v2/logs-restriction-queries/get-a-restriction-query-returns-ok-response.json new file mode 100644 index 0000000000..8c3fef2558 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/get-a-restriction-query-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 200, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Get a restriction query returns \"OK\" response", + "operation_id": "GetRestrictionQuery", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "restriction_query.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}" + }, + "scenario": "Get a restriction query returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/get-all-restriction-queries-for-a-given-user-returns-bad-request-response.json b/test-runner-data/v2/logs-restriction-queries/get-all-restriction-queries-for-a-given-user-returns-bad-request-response.json new file mode 100644 index 0000000000..53df14f3df --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/get-all-restriction-queries-for-a-given-user-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 400, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Get all restriction queries for a given user returns \"Bad Request\" response", + "operation_id": "ListUserRestrictionQueries", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/user/{user_id}" + }, + "scenario": "Get all restriction queries for a given user returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/get-all-restriction-queries-for-a-given-user-returns-not-found-response.json b/test-runner-data/v2/logs-restriction-queries/get-all-restriction-queries-for-a-given-user-returns-not-found-response.json new file mode 100644 index 0000000000..f7e2f31440 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/get-all-restriction-queries-for-a-given-user-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 400, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Get all restriction queries for a given user returns \"Not found\" response", + "operation_id": "ListUserRestrictionQueries", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/user/{user_id}" + }, + "scenario": "Get all restriction queries for a given user returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-bad-request-response.json b/test-runner-data/v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-bad-request-response.json new file mode 100644 index 0000000000..1653e31546 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 400, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Get restriction query for a given role returns \"Bad Request\" response", + "operation_id": "GetRoleRestrictionQuery", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/role/{role_id}" + }, + "scenario": "Get restriction query for a given role returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-not-found-response.json b/test-runner-data/v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-not-found-response.json new file mode 100644 index 0000000000..c031419044 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 400, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Get restriction query for a given role returns \"Not found\" response", + "operation_id": "GetRoleRestrictionQuery", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/role/{role_id}" + }, + "scenario": "Get restriction query for a given role returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-ok-response.json b/test-runner-data/v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-ok-response.json new file mode 100644 index 0000000000..279ec88a2c --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/get-restriction-query-for-a-given-role-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 200, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Get restriction query for a given role returns \"OK\" response", + "operation_id": "GetRoleRestrictionQuery", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/role/{role_id}" + }, + "scenario": "Get restriction query for a given role returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-bad-request-response.json b/test-runner-data/v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-bad-request-response.json new file mode 100644 index 0000000000..191936fa0e --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-bad-request-response.json @@ -0,0 +1,48 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 404, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Grant role to a restriction query returns \"Bad Request\" response", + "operation_id": "AddRoleToRestrictionQuery", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RelationshipToRole", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}/roles" + }, + "scenario": "Grant role to a restriction query returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-not-found-response.json b/test-runner-data/v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-not-found-response.json new file mode 100644 index 0000000000..2b0be071e1 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-not-found-response.json @@ -0,0 +1,48 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 404, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Grant role to a restriction query returns \"Not found\" response", + "operation_id": "AddRoleToRestrictionQuery", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RelationshipToRole", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}/roles" + }, + "scenario": "Grant role to a restriction query returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-ok-response.json b/test-runner-data/v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-ok-response.json new file mode 100644 index 0000000000..7ff0a3eb01 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/grant-role-to-a-restriction-query-returns-ok-response.json @@ -0,0 +1,48 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 204, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/Grant role to a restriction query returns \"OK\" response", + "operation_id": "AddRoleToRestrictionQuery", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RelationshipToRole", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{ role.data.id }}", + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "restriction_query.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}/roles" + }, + "scenario": "Grant role to a restriction query returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/list-restriction-queries-returns-ok-response.json b/test-runner-data/v2/logs-restriction-queries/list-restriction-queries-returns-ok-response.json new file mode 100644 index 0000000000..5884da0164 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/list-restriction-queries-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 200, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/List restriction queries returns \"OK\" response", + "operation_id": "ListRestrictionQueries", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/config/restriction_queries" + }, + "scenario": "List restriction queries returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-bad-request-response.json b/test-runner-data/v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-bad-request-response.json new file mode 100644 index 0000000000..98a114ea6f --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 400, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/List roles for a restriction query returns \"Bad Request\" response", + "operation_id": "ListRestrictionQueryRoles", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}/roles" + }, + "scenario": "List roles for a restriction query returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-not-found-response.json b/test-runner-data/v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-not-found-response.json new file mode 100644 index 0000000000..5fa3956192 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 404, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/List roles for a restriction query returns \"Not found\" response", + "operation_id": "ListRestrictionQueryRoles", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}/roles" + }, + "scenario": "List roles for a restriction query returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-ok-response.json b/test-runner-data/v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-ok-response.json new file mode 100644 index 0000000000..8988ac7fa0 --- /dev/null +++ b/test-runner-data/v2/logs-restriction-queries/list-roles-for-a-restriction-query-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "LogsRestrictionQueries", + "expected_status": 200, + "feature": "Logs Restriction Queries", + "id": "v2/Logs Restriction Queries/List roles for a restriction query returns \"OK\" response", + "operation_id": "ListRestrictionQueryRoles", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "restriction_query_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "restriction_query.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/logs/config/restriction_queries/{restriction_query_id}/roles" + }, + "scenario": "List roles for a restriction query returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs/aggregate-compute-events-returns-ok-response.json b/test-runner-data/v2/logs/aggregate-compute-events-returns-ok-response.json new file mode 100644 index 0000000000..fd663f23e6 --- /dev/null +++ b/test-runner-data/v2/logs/aggregate-compute-events-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "Logs", + "expected_status": 200, + "feature": "Logs", + "id": "v2/Logs/Aggregate compute events returns \"OK\" response", + "operation_id": "AggregateLogs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsAggregateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "compute": [ + { + "aggregation": "count", + "interval": "5m", + "type": "timeseries" + } + ], + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "query": "*", + "to": "now" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/analytics/aggregate" + }, + "scenario": "Aggregate compute events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs/aggregate-compute-events-with-group-by-returns-ok-response.json b/test-runner-data/v2/logs/aggregate-compute-events-with-group-by-returns-ok-response.json new file mode 100644 index 0000000000..e2203f434d --- /dev/null +++ b/test-runner-data/v2/logs/aggregate-compute-events-with-group-by-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "Logs", + "expected_status": 200, + "feature": "Logs", + "id": "v2/Logs/Aggregate compute events with group by returns \"OK\" response", + "operation_id": "AggregateLogs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsAggregateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "compute": [ + { + "aggregation": "count", + "interval": "5m", + "type": "timeseries" + } + ], + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "query": "*", + "to": "now" + }, + "group_by": [ + { + "facet": "host", + "missing": "miss", + "sort": { + "aggregation": "pc90", + "metric": "@duration", + "order": "asc", + "type": "measure" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/analytics/aggregate" + }, + "scenario": "Aggregate compute events with group by returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs/aggregate-events-returns-ok-response.json b/test-runner-data/v2/logs/aggregate-events-returns-ok-response.json new file mode 100644 index 0000000000..d80e39743f --- /dev/null +++ b/test-runner-data/v2/logs/aggregate-events-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Logs", + "expected_status": 200, + "feature": "Logs", + "id": "v2/Logs/Aggregate events returns \"OK\" response", + "operation_id": "AggregateLogs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsAggregateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "query": "*", + "to": "now" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/analytics/aggregate" + }, + "scenario": "Aggregate events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs/get-a-list-of-logs-returns-ok-response-with-pagination.json b/test-runner-data/v2/logs/get-a-list-of-logs-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..b78c1f1d56 --- /dev/null +++ b/test-runner-data/v2/logs/get-a-list-of-logs-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Logs", + "expected_status": 200, + "feature": "Logs", + "id": "v2/Logs/Get a list of logs returns \"OK\" response with pagination", + "operation_id": "ListLogsGet", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/logs/events" + }, + "scenario": "Get a list of logs returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs/get-a-quick-list-of-logs-returns-ok-response.json b/test-runner-data/v2/logs/get-a-quick-list-of-logs-returns-ok-response.json new file mode 100644 index 0000000000..a632b2a9f6 --- /dev/null +++ b/test-runner-data/v2/logs/get-a-quick-list-of-logs-returns-ok-response.json @@ -0,0 +1,106 @@ +{ + "api": "Logs", + "expected_status": 200, + "feature": "Logs", + "id": "v2/Logs/Get a quick list of logs returns \"OK\" response", + "operation_id": "ListLogsGet", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[query]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "datadog-agent" + }, + "style": null + }, + { + "explode": false, + "in": "query", + "name": "filter[indexes]", + "required": false, + "schema": { + "format": null, + "items": { + "format": null, + "ref": null, + "type": "string" + }, + "ref": null, + "type": "array" + }, + "source": { + "type": "literal", + "value": [ + "main" + ] + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[from]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2020-09-17T11:48:36+01:00" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[to]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2020-09-17T12:48:36+01:00" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 5 + }, + "style": null + } + ], + "path": "/api/v2/logs/events" + }, + "scenario": "Get a quick list of logs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs/search-logs-returns-ok-response-with-pagination.json b/test-runner-data/v2/logs/search-logs-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..2f6bc9ecf3 --- /dev/null +++ b/test-runner-data/v2/logs/search-logs-returns-ok-response-with-pagination.json @@ -0,0 +1,41 @@ +{ + "api": "Logs", + "expected_status": 200, + "feature": "Logs", + "id": "v2/Logs/Search logs returns \"OK\" response with pagination", + "operation_id": "ListLogs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": true, + "parameters": [], + "path": "/api/v2/logs/events/search" + }, + "scenario": "Search logs returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs/search-logs-returns-ok-response.json b/test-runner-data/v2/logs/search-logs-returns-ok-response.json new file mode 100644 index 0000000000..3a428b69bb --- /dev/null +++ b/test-runner-data/v2/logs/search-logs-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "Logs", + "expected_status": 200, + "feature": "Logs", + "id": "v2/Logs/Search logs returns \"OK\" response", + "operation_id": "ListLogs", + "request": { + "body": { + "schema": { + "format": null, + "ref": "LogsListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "2020-09-17T11:48:36+01:00", + "indexes": [ + "main" + ], + "query": "datadog-agent", + "to": "2020-09-17T12:48:36+01:00" + }, + "page": { + "limit": 5 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs/events/search" + }, + "scenario": "Search logs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/logs/send-logs-returns-request-accepted-for-processing-always-202-empty-json-response.json b/test-runner-data/v2/logs/send-logs-returns-request-accepted-for-processing-always-202-empty-json-response.json new file mode 100644 index 0000000000..8d745b280b --- /dev/null +++ b/test-runner-data/v2/logs/send-logs-returns-request-accepted-for-processing-always-202-empty-json-response.json @@ -0,0 +1,40 @@ +{ + "api": "Logs", + "expected_status": 202, + "feature": "Logs", + "id": "v2/Logs/Send logs returns \"Request accepted for processing (always 202 empty JSON).\" response", + "operation_id": "SubmitLog", + "request": { + "body": { + "schema": { + "format": null, + "items": { + "format": null, + "ref": "HTTPLogItem", + "type": "object" + }, + "ref": "HTTPLog", + "type": "array" + }, + "source": "inline", + "value": [ + { + "ddsource": "nginx", + "ddtags": "env:staging,version:5.1", + "hostname": "i-012345678", + "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", + "service": "payment", + "status": "info" + } + ] + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/logs" + }, + "scenario": "Send logs returns \"Request accepted for processing (always 202 empty JSON).\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/configure-tags-for-multiple-metrics-returns-accepted-response.json b/test-runner-data/v2/metrics/configure-tags-for-multiple-metrics-returns-accepted-response.json new file mode 100644 index 0000000000..b35d60b6a5 --- /dev/null +++ b/test-runner-data/v2/metrics/configure-tags-for-multiple-metrics-returns-accepted-response.json @@ -0,0 +1,40 @@ +{ + "api": "Metrics", + "expected_status": 202, + "feature": "Metrics", + "id": "v2/Metrics/Configure tags for multiple metrics returns \"Accepted\" response", + "operation_id": "CreateBulkTagsMetricsConfiguration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MetricBulkTagConfigCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "emails": [ + "{{ user.data.attributes.email }}" + ], + "tags": [ + "test", + "{{ unique_lower_alnum }}" + ] + }, + "id": "system.load.1", + "type": "metric_bulk_configure_tags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/config/bulk-tags" + }, + "scenario": "Configure tags for multiple metrics returns \"Accepted\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/create-a-tag-configuration-returns-created-response.json b/test-runner-data/v2/metrics/create-a-tag-configuration-returns-created-response.json new file mode 100644 index 0000000000..350e9bf461 --- /dev/null +++ b/test-runner-data/v2/metrics/create-a-tag-configuration-returns-created-response.json @@ -0,0 +1,55 @@ +{ + "api": "Metrics", + "expected_status": 201, + "feature": "Metrics", + "id": "v2/Metrics/Create a tag configuration returns \"Created\" response", + "operation_id": "CreateTagConfiguration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MetricTagConfigurationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "metric_type": "gauge", + "tags": [ + "app", + "datacenter" + ] + }, + "id": "{{ unique_alnum }}", + "type": "manage_tags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique_alnum }}" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/tags" + }, + "scenario": "Create a tag configuration returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/create-a-tag-indexing-rule-returns-bad-request-response.json b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..3b92004166 --- /dev/null +++ b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-returns-bad-request-response.json @@ -0,0 +1,43 @@ +{ + "api": "Metrics", + "expected_status": 400, + "feature": "Metrics", + "id": "v2/Metrics/Create a tag indexing rule returns \"Bad Request\" response", + "operation_id": "CreateTagIndexingRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "metric_name_matches": [ + "dd.test.*" + ], + "name": "test", + "options": { + "data": { + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 99 + } + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/tag-indexing-rules" + }, + "scenario": "Create a tag indexing rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/create-a-tag-indexing-rule-returns-created-response.json b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-returns-created-response.json new file mode 100644 index 0000000000..16a7cfeac6 --- /dev/null +++ b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-returns-created-response.json @@ -0,0 +1,56 @@ +{ + "api": "Metrics", + "expected_status": 201, + "feature": "Metrics", + "id": "v2/Metrics/Create a tag indexing rule returns \"Created\" response", + "operation_id": "CreateTagIndexingRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": false, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "queried_tags_window_seconds": 3600, + "related_asset_tags": false + }, + "manage_preexisting_metrics": true, + "metric_match": { + "queried_window_seconds": 3600 + }, + "override_previous_rules": false + }, + "version": 1 + }, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/tag-indexing-rules" + }, + "scenario": "Create a tag indexing rule returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/create-a-tag-indexing-rule-with-exclude-mode-tag-usage-fields-returns-created-response.json b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-with-exclude-mode-tag-usage-fields-returns-created-response.json new file mode 100644 index 0000000000..27b9dc0429 --- /dev/null +++ b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-with-exclude-mode-tag-usage-fields-returns-created-response.json @@ -0,0 +1,53 @@ +{ + "api": "Metrics", + "expected_status": 201, + "feature": "Metrics", + "id": "v2/Metrics/Create a tag indexing rule with exclude-mode tag usage fields returns \"Created\" response", + "operation_id": "CreateTagIndexingRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": true, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "exclude_not_queried_window_seconds": 3600, + "exclude_not_used_in_assets": true + }, + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 1 + }, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/tag-indexing-rules" + }, + "scenario": "Create a tag indexing rule with exclude-mode tag usage fields returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/create-a-tag-indexing-rule-with-exclude-not-queried-window-seconds-and-exclude-tags-mode-false-returns-bad-request-response.json b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-with-exclude-not-queried-window-seconds-and-exclude-tags-mode-false-returns-bad-request-response.json new file mode 100644 index 0000000000..21b0d3ad86 --- /dev/null +++ b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-with-exclude-not-queried-window-seconds-and-exclude-tags-mode-false-returns-bad-request-response.json @@ -0,0 +1,52 @@ +{ + "api": "Metrics", + "expected_status": 400, + "feature": "Metrics", + "id": "v2/Metrics/Create a tag indexing rule with exclude_not_queried_window_seconds and exclude_tags_mode false returns \"Bad Request\" response", + "operation_id": "CreateTagIndexingRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": false, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "exclude_not_queried_window_seconds": 3600 + }, + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 1 + }, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/tag-indexing-rules" + }, + "scenario": "Create a tag indexing rule with exclude_not_queried_window_seconds and exclude_tags_mode false returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/create-a-tag-indexing-rule-with-exclude-not-used-in-assets-and-exclude-tags-mode-false-returns-bad-request-response.json b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-with-exclude-not-used-in-assets-and-exclude-tags-mode-false-returns-bad-request-response.json new file mode 100644 index 0000000000..c190e78425 --- /dev/null +++ b/test-runner-data/v2/metrics/create-a-tag-indexing-rule-with-exclude-not-used-in-assets-and-exclude-tags-mode-false-returns-bad-request-response.json @@ -0,0 +1,52 @@ +{ + "api": "Metrics", + "expected_status": 400, + "feature": "Metrics", + "id": "v2/Metrics/Create a tag indexing rule with exclude_not_used_in_assets and exclude_tags_mode false returns \"Bad Request\" response", + "operation_id": "CreateTagIndexingRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": false, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "exclude_not_used_in_assets": true + }, + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 1 + }, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/tag-indexing-rules" + }, + "scenario": "Create a tag indexing rule with exclude_not_used_in_assets and exclude_tags_mode false returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/delete-a-tag-configuration-returns-no-content-response.json b/test-runner-data/v2/metrics/delete-a-tag-configuration-returns-no-content-response.json new file mode 100644 index 0000000000..e6232727be --- /dev/null +++ b/test-runner-data/v2/metrics/delete-a-tag-configuration-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 204, + "feature": "Metrics", + "id": "v2/Metrics/Delete a tag configuration returns \"No Content\" response", + "operation_id": "DeleteTagConfiguration", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique_alnum }}" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/tags" + }, + "scenario": "Delete a tag configuration returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/delete-a-tag-indexing-rule-returns-bad-request-response.json b/test-runner-data/v2/metrics/delete-a-tag-indexing-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..59c55b4f62 --- /dev/null +++ b/test-runner-data/v2/metrics/delete-a-tag-indexing-rule-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 400, + "feature": "Metrics", + "id": "v2/Metrics/Delete a tag indexing rule returns \"Bad Request\" response", + "operation_id": "DeleteTagIndexingRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-a-valid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/metrics/tag-indexing-rules/{id}" + }, + "scenario": "Delete a tag indexing rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/delete-a-tag-indexing-rule-returns-no-content-response.json b/test-runner-data/v2/metrics/delete-a-tag-indexing-rule-returns-no-content-response.json new file mode 100644 index 0000000000..321387934f --- /dev/null +++ b/test-runner-data/v2/metrics/delete-a-tag-indexing-rule-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 204, + "feature": "Metrics", + "id": "v2/Metrics/Delete a tag indexing rule returns \"No Content\" response", + "operation_id": "DeleteTagIndexingRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "tag_indexing_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/metrics/tag-indexing-rules/{id}" + }, + "scenario": "Delete a tag indexing rule returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/get-a-list-of-metrics-returns-success-response-with-pagination.json b/test-runner-data/v2/metrics/get-a-list-of-metrics-returns-success-response-with-pagination.json new file mode 100644 index 0000000000..4c3c96c307 --- /dev/null +++ b/test-runner-data/v2/metrics/get-a-list-of-metrics-returns-success-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Get a list of metrics returns \"Success\" response with pagination", + "operation_id": "ListTagConfigurations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/metrics" + }, + "scenario": "Get a list of metrics returns \"Success\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/get-a-list-of-metrics-with-a-tag-filter-returns-success-response.json b/test-runner-data/v2/metrics/get-a-list-of-metrics-with-a-tag-filter-returns-success-response.json new file mode 100644 index 0000000000..b097769124 --- /dev/null +++ b/test-runner-data/v2/metrics/get-a-list-of-metrics-with-a-tag-filter-returns-success-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Get a list of metrics with a tag filter returns \"Success\" response", + "operation_id": "ListTagConfigurations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[tags]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique_alnum }}" + }, + "style": null + } + ], + "path": "/api/v2/metrics" + }, + "scenario": "Get a list of metrics with a tag filter returns \"Success\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/get-a-list-of-metrics-with-configured-filter-returns-success-response.json b/test-runner-data/v2/metrics/get-a-list-of-metrics-with-configured-filter-returns-success-response.json new file mode 100644 index 0000000000..c35f3ac707 --- /dev/null +++ b/test-runner-data/v2/metrics/get-a-list-of-metrics-with-configured-filter-returns-success-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Get a list of metrics with configured filter returns \"Success\" response", + "operation_id": "ListTagConfigurations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[configured]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v2/metrics" + }, + "scenario": "Get a list of metrics with configured filter returns \"Success\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/get-a-tag-indexing-rule-returns-bad-request-response.json b/test-runner-data/v2/metrics/get-a-tag-indexing-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..b11c0e3f7b --- /dev/null +++ b/test-runner-data/v2/metrics/get-a-tag-indexing-rule-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 400, + "feature": "Metrics", + "id": "v2/Metrics/Get a tag indexing rule returns \"Bad Request\" response", + "operation_id": "GetTagIndexingRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-a-valid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/metrics/tag-indexing-rules/{id}" + }, + "scenario": "Get a tag indexing rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/get-a-tag-indexing-rule-returns-not-found-response.json b/test-runner-data/v2/metrics/get-a-tag-indexing-rule-returns-not-found-response.json new file mode 100644 index 0000000000..364cc55a3c --- /dev/null +++ b/test-runner-data/v2/metrics/get-a-tag-indexing-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 404, + "feature": "Metrics", + "id": "v2/Metrics/Get a tag indexing rule returns \"Not Found\" response", + "operation_id": "GetTagIndexingRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/metrics/tag-indexing-rules/{id}" + }, + "scenario": "Get a tag indexing rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/get-a-tag-indexing-rule-returns-ok-response.json b/test-runner-data/v2/metrics/get-a-tag-indexing-rule-returns-ok-response.json new file mode 100644 index 0000000000..ce9902fd66 --- /dev/null +++ b/test-runner-data/v2/metrics/get-a-tag-indexing-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Get a tag indexing rule returns \"OK\" response", + "operation_id": "GetTagIndexingRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "tag_indexing_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/metrics/tag-indexing-rules/{id}" + }, + "scenario": "Get a tag indexing rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/list-active-tags-and-aggregations-returns-success-response.json b/test-runner-data/v2/metrics/list-active-tags-and-aggregations-returns-success-response.json new file mode 100644 index 0000000000..28e2738a97 --- /dev/null +++ b/test-runner-data/v2/metrics/list-active-tags-and-aggregations-returns-success-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/List active tags and aggregations returns \"Success\" response", + "operation_id": "ListActiveMetricConfigurations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "static_test_metric_donotdelete" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/active-configurations" + }, + "scenario": "List active tags and aggregations returns \"Success\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/list-distinct-metric-volumes-by-metric-name-returns-success-response.json b/test-runner-data/v2/metrics/list-distinct-metric-volumes-by-metric-name-returns-success-response.json new file mode 100644 index 0000000000..5579d852cf --- /dev/null +++ b/test-runner-data/v2/metrics/list-distinct-metric-volumes-by-metric-name-returns-success-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/List distinct metric volumes by metric name returns \"Success\" response", + "operation_id": "ListVolumesByMetricName", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "static_test_metric_donotdelete" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/volumes" + }, + "scenario": "List distinct metric volumes by metric name returns \"Success\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/list-tag-configuration-by-name-returns-success-response.json b/test-runner-data/v2/metrics/list-tag-configuration-by-name-returns-success-response.json new file mode 100644 index 0000000000..57cf1c19c0 --- /dev/null +++ b/test-runner-data/v2/metrics/list-tag-configuration-by-name-returns-success-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/List tag configuration by name returns \"Success\" response", + "operation_id": "ListTagConfigurationByName", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "metric_tag_configuration.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/tags" + }, + "scenario": "List tag configuration by name returns \"Success\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/list-tag-indexing-rules-for-a-metric-returns-bad-request-response.json b/test-runner-data/v2/metrics/list-tag-indexing-rules-for-a-metric-returns-bad-request-response.json new file mode 100644 index 0000000000..b5cd651c68 --- /dev/null +++ b/test-runner-data/v2/metrics/list-tag-indexing-rules-for-a-metric-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 400, + "feature": "Metrics", + "id": "v2/Metrics/List tag indexing rules for a metric returns \"Bad Request\" response", + "operation_id": "ListTagIndexingRulesForMetric", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "1invalid" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/tag-indexing-rules" + }, + "scenario": "List tag indexing rules for a metric returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/list-tag-indexing-rules-for-a-metric-returns-ok-response.json b/test-runner-data/v2/metrics/list-tag-indexing-rules-for-a-metric-returns-ok-response.json new file mode 100644 index 0000000000..b06b596299 --- /dev/null +++ b/test-runner-data/v2/metrics/list-tag-indexing-rules-for-a-metric-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/List tag indexing rules for a metric returns \"OK\" response", + "operation_id": "ListTagIndexingRulesForMetric", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique_alnum }}" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/tag-indexing-rules" + }, + "scenario": "List tag indexing rules for a metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/list-tag-indexing-rules-returns-ok-response.json b/test-runner-data/v2/metrics/list-tag-indexing-rules-returns-ok-response.json new file mode 100644 index 0000000000..97fa15fbb3 --- /dev/null +++ b/test-runner-data/v2/metrics/list-tag-indexing-rules-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/List tag indexing rules returns \"OK\" response", + "operation_id": "ListTagIndexingRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/tag-indexing-rules" + }, + "scenario": "List tag indexing rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/list-tags-by-metric-name-returns-success-response.json b/test-runner-data/v2/metrics/list-tags-by-metric-name-returns-success-response.json new file mode 100644 index 0000000000..5d99b013e3 --- /dev/null +++ b/test-runner-data/v2/metrics/list-tags-by-metric-name-returns-success-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/List tags by metric name returns \"Success\" response", + "operation_id": "ListTagsByMetricName", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "metric_tag_configuration.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/all-tags" + }, + "scenario": "List tags by metric name returns \"Success\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/related-assets-to-a-metric-returns-success-response.json b/test-runner-data/v2/metrics/related-assets-to-a-metric-returns-success-response.json new file mode 100644 index 0000000000..80d8359e88 --- /dev/null +++ b/test-runner-data/v2/metrics/related-assets-to-a-metric-returns-success-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Related Assets to a Metric returns \"Success\" response", + "operation_id": "ListMetricAssets", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "system.cpu.user" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/assets" + }, + "scenario": "Related Assets to a Metric returns \"Success\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/reorder-tag-indexing-rules-returns-bad-request-response.json b/test-runner-data/v2/metrics/reorder-tag-indexing-rules-returns-bad-request-response.json new file mode 100644 index 0000000000..bd78197722 --- /dev/null +++ b/test-runner-data/v2/metrics/reorder-tag-indexing-rules-returns-bad-request-response.json @@ -0,0 +1,33 @@ +{ + "api": "Metrics", + "expected_status": 400, + "feature": "Metrics", + "id": "v2/Metrics/Reorder tag indexing rules returns \"Bad Request\" response", + "operation_id": "ReorderTagIndexingRules", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleOrderRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "rule_ids": [] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/tag-indexing-rules/order" + }, + "scenario": "Reorder tag indexing rules returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/reorder-tag-indexing-rules-returns-no-content-response.json b/test-runner-data/v2/metrics/reorder-tag-indexing-rules-returns-no-content-response.json new file mode 100644 index 0000000000..b4f2bbfabc --- /dev/null +++ b/test-runner-data/v2/metrics/reorder-tag-indexing-rules-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "Metrics", + "expected_status": 204, + "feature": "Metrics", + "id": "v2/Metrics/Reorder tag indexing rules returns \"No Content\" response", + "operation_id": "ReorderTagIndexingRules", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleOrderRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "rule_ids": [ + "{{ tag_indexing_rule.data.id }}" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/tag-indexing-rules/order" + }, + "scenario": "Reorder tag indexing rules returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/reorder-tag-indexing-rules-returns-not-found-response.json b/test-runner-data/v2/metrics/reorder-tag-indexing-rules-returns-not-found-response.json new file mode 100644 index 0000000000..69a58c286d --- /dev/null +++ b/test-runner-data/v2/metrics/reorder-tag-indexing-rules-returns-not-found-response.json @@ -0,0 +1,36 @@ +{ + "api": "Metrics", + "expected_status": 404, + "feature": "Metrics", + "id": "v2/Metrics/Reorder tag indexing rules returns \"Not Found\" response", + "operation_id": "ReorderTagIndexingRules", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleOrderRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "rule_ids": [ + "00000000-0000-0000-0000-000000000001", + "00000000-0000-0000-0000-000000000002" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/metrics/tag-indexing-rules/order" + }, + "scenario": "Reorder tag indexing rules returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-returns-bad-request-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-returns-bad-request-response.json new file mode 100644 index 0000000000..879f8744a1 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "Metrics", + "expected_status": 400, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query returns \"Bad Request\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a+b", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1568899800000, + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "a", + "query": "avg:system.cpu.user{*}" + } + ], + "to": 1568923200000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-returns-ok-response.json new file mode 100644 index 0000000000..3bacdf7736 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"aggregator\": \"avg\", \"data_source\": \"metrics\", \"query\": \"avg:system.cpu.user{*}\", \"name\": \"a\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-dependency-stats-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-dependency-stats-data-source-returns-ok-response.json new file mode 100644 index 0000000000..2b90488929 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-dependency-stats-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with apm_dependency_stats data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"apm_dependency_stats\", \"name\": \"a\", \"env\": \"ci\", \"service\": \"cassandra\", \"stat\": \"avg_duration\", \"operation_name\": \"cassandra.query\", \"resource_name\": \"DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?\", \"primary_tag_name\": \"datacenter\", \"primary_tag_value\": \"edge-eu1.prod.dog\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with apm_dependency_stats data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-metrics-data-source-and-span-kind-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-metrics-data-source-and-span-kind-returns-ok-response.json new file mode 100644 index 0000000000..f06d2baa5a --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-metrics-data-source-and-span-kind-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with apm_metrics data source and span_kind returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"apm_metrics\", \"name\": \"a\", \"stat\": \"hits\", \"service\": \"web-store\", \"query_filter\": \"env:prod\", \"span_kind\": \"server\", \"group_by\": [\"resource_name\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with apm_metrics data source and span_kind returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-metrics-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-metrics-data-source-returns-ok-response.json new file mode 100644 index 0000000000..1fad7c8399 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-metrics-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with apm_metrics data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"apm_metrics\", \"name\": \"a\", \"stat\": \"hits\", \"service\": \"web-store\", \"query_filter\": \"env:prod\", \"group_by\": [\"resource_name\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with apm_metrics data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-resource-stats-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-resource-stats-data-source-returns-ok-response.json new file mode 100644 index 0000000000..94d878e977 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-apm-resource-stats-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with apm_resource_stats data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"apm_resource_stats\", \"name\": \"a\", \"env\": \"staging\", \"service\": \"azure-bill-import\", \"stat\": \"hits\", \"operation_name\": \"cassandra.query\", \"group_by\": [\"resource_name\"], \"primary_tag_name\": \"datacenter\", \"primary_tag_value\": \"*\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with apm_resource_stats data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-audit-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-audit-data-source-returns-ok-response.json new file mode 100644 index 0000000000..39f5c93b84 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-audit-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with audit data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"audit\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with audit data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-ci-pipelines-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-ci-pipelines-data-source-returns-ok-response.json new file mode 100644 index 0000000000..1a60fc4e9c --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-ci-pipelines-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with ci_pipelines data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"ci_pipelines\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with ci_pipelines data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-ci-tests-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-ci-tests-data-source-returns-ok-response.json new file mode 100644 index 0000000000..17c841472c --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-ci-tests-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with ci_tests data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"ci_tests\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with ci_tests data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-container-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-container-data-source-returns-ok-response.json new file mode 100644 index 0000000000..7aa78caa2d --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-container-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with container data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"container\", \"name\": \"a\", \"metric\": \"process.stat.container.cpu.system_pct\", \"aggregator\": \"avg\", \"tag_filters\": [], \"limit\": 10, \"sort\": \"desc\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with container data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-events-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-events-data-source-returns-ok-response.json new file mode 100644 index 0000000000..34fc268814 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-events-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with events data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"events\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with events data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-logs-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-logs-data-source-returns-ok-response.json new file mode 100644 index 0000000000..a470faf24e --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-logs-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with logs data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"logs\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with logs data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-network-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-network-data-source-returns-ok-response.json new file mode 100644 index 0000000000..46996c18c2 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-network-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with network data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"network\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with network data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-on-call-events-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-on-call-events-data-source-returns-ok-response.json new file mode 100644 index 0000000000..1d7549a5a5 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-on-call-events-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with on_call_events data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"on_call_events\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with on_call_events data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-process-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-process-data-source-returns-ok-response.json new file mode 100644 index 0000000000..c142fa2060 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-process-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with process data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"process\", \"name\": \"a\", \"metric\": \"process.stat.cpu.total_pct\", \"aggregator\": \"avg\", \"text_filter\": \"\", \"tag_filters\": [], \"limit\": 10, \"sort\": \"desc\", \"is_normalized_cpu\": false}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with process data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-product-analytics-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-product-analytics-data-source-returns-ok-response.json new file mode 100644 index 0000000000..d609494e72 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-product-analytics-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with product_analytics data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"product_analytics\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with product_analytics data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-profiles-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-profiles-data-source-returns-ok-response.json new file mode 100644 index 0000000000..2110165896 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-profiles-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with profiles data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"profiles\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with profiles data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-rum-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-rum-data-source-returns-ok-response.json new file mode 100644 index 0000000000..4ee28a35ae --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-rum-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with RUM data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"rum\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with RUM data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-security-signals-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-security-signals-data-source-returns-ok-response.json new file mode 100644 index 0000000000..b47786a39f --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-security-signals-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with security_signals data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"security_signals\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with security_signals data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-slo-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-slo-data-source-returns-ok-response.json new file mode 100644 index 0000000000..29b7e8b5ab --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-slo-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with slo data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"slo\", \"name\": \"a\", \"slo_id\": \"12345678910\", \"measure\": \"slo_status\", \"slo_query_type\": \"metric\", \"group_mode\": \"overall\", \"additional_query_filters\": \"*\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with slo data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/scalar-cross-product-query-with-spans-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/scalar-cross-product-query-with-spans-data-source-returns-ok-response.json new file mode 100644 index 0000000000..b697d30829 --- /dev/null +++ b/test-runner-data/v2/metrics/scalar-cross-product-query-with-spans-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Scalar cross product query with spans data source returns \"OK\" response", + "operation_id": "QueryScalarData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScalarFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"queries\": [{\"data_source\": \"spans\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"scalar_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/scalar" + }, + "scenario": "Scalar cross product query with spans data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/submit-metrics-returns-payload-accepted-response.json b/test-runner-data/v2/metrics/submit-metrics-returns-payload-accepted-response.json new file mode 100644 index 0000000000..3920a78f3a --- /dev/null +++ b/test-runner-data/v2/metrics/submit-metrics-returns-payload-accepted-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 202, + "feature": "Metrics", + "id": "v2/Metrics/Submit metrics returns \"Payload accepted\" response", + "operation_id": "SubmitMetrics", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MetricPayload", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"series\": [{\"metric\": \"system.load.1\", \"type\": 0, \"points\": [{\"timestamp\": {{ timestamp('now') }}, \"value\": 0.7}], \"resources\": [{\"name\": \"dummyhost\", \"type\": \"host\"}]}]}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/series" + }, + "scenario": "Submit metrics returns \"Payload accepted\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/tag-configuration-cardinality-estimator-returns-success-response.json b/test-runner-data/v2/metrics/tag-configuration-cardinality-estimator-returns-success-response.json new file mode 100644 index 0000000000..b3b821a834 --- /dev/null +++ b/test-runner-data/v2/metrics/tag-configuration-cardinality-estimator-returns-success-response.json @@ -0,0 +1,67 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Tag Configuration Cardinality Estimator returns \"Success\" response", + "operation_id": "EstimateMetricsOutputSeries", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "system.cpu.idle" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[groups]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "app,host" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[num_aggregations]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 4 + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/estimate" + }, + "scenario": "Tag Configuration Cardinality Estimator returns \"Success\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-returns-ok-response.json new file mode 100644 index 0000000000..f43220086d --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"metrics\", \"query\": \"avg:datadog.estimated_usage.metrics.custom{*}\", \"name\": \"a\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-dependency-stats-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-dependency-stats-data-source-returns-ok-response.json new file mode 100644 index 0000000000..a8d05206da --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-dependency-stats-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with apm_dependency_stats data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"apm_dependency_stats\", \"name\": \"a\", \"env\": \"ci\", \"service\": \"cassandra\", \"stat\": \"avg_duration\", \"operation_name\": \"cassandra.query\", \"resource_name\": \"DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?\", \"primary_tag_name\": \"datacenter\", \"primary_tag_value\": \"edge-eu1.prod.dog\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with apm_dependency_stats data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-metrics-data-source-and-span-kind-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-metrics-data-source-and-span-kind-returns-ok-response.json new file mode 100644 index 0000000000..fe15845eff --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-metrics-data-source-and-span-kind-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with apm_metrics data source and span_kind returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"apm_metrics\", \"name\": \"a\", \"stat\": \"hits\", \"service\": \"web-store\", \"query_filter\": \"env:prod\", \"span_kind\": \"server\", \"group_by\": [\"resource_name\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with apm_metrics data source and span_kind returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-metrics-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-metrics-data-source-returns-ok-response.json new file mode 100644 index 0000000000..6004408051 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-metrics-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with apm_metrics data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"apm_metrics\", \"name\": \"a\", \"stat\": \"hits\", \"service\": \"web-store\", \"query_filter\": \"env:prod\", \"group_by\": [\"resource_name\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with apm_metrics data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-resource-stats-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-resource-stats-data-source-returns-ok-response.json new file mode 100644 index 0000000000..66e7b19b84 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-apm-resource-stats-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with apm_resource_stats data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"apm_resource_stats\", \"name\": \"a\", \"env\": \"staging\", \"service\": \"azure-bill-import\", \"stat\": \"hits\", \"operation_name\": \"cassandra.query\", \"group_by\": [\"resource_name\"], \"primary_tag_name\": \"datacenter\", \"primary_tag_value\": \"*\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with apm_resource_stats data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-audit-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-audit-data-source-returns-ok-response.json new file mode 100644 index 0000000000..36b67e4950 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-audit-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with audit data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"audit\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with audit data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-ci-pipelines-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-ci-pipelines-data-source-returns-ok-response.json new file mode 100644 index 0000000000..fdf3801b14 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-ci-pipelines-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with ci_pipelines data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"ci_pipelines\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with ci_pipelines data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-ci-tests-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-ci-tests-data-source-returns-ok-response.json new file mode 100644 index 0000000000..6d9d457b35 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-ci-tests-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with ci_tests data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"ci_tests\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with ci_tests data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-container-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-container-data-source-returns-ok-response.json new file mode 100644 index 0000000000..28f0c0ecb8 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-container-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with container data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"container\", \"name\": \"a\", \"metric\": \"process.stat.container.cpu.system_pct\", \"tag_filters\": [], \"limit\": 10, \"sort\": \"desc\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with container data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-events-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-events-data-source-returns-ok-response.json new file mode 100644 index 0000000000..16161a9162 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-events-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with events data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"events\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with events data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-logs-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-logs-data-source-returns-ok-response.json new file mode 100644 index 0000000000..ee9465136b --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-logs-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with logs data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"logs\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with logs data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-network-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-network-data-source-returns-ok-response.json new file mode 100644 index 0000000000..4d1bb8bf54 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-network-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with network data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"network\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with network data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-on-call-events-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-on-call-events-data-source-returns-ok-response.json new file mode 100644 index 0000000000..3edfb21398 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-on-call-events-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with on_call_events data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"on_call_events\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with on_call_events data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-process-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-process-data-source-returns-ok-response.json new file mode 100644 index 0000000000..b392431114 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-process-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with process data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"process\", \"name\": \"a\", \"metric\": \"process.stat.cpu.total_pct\", \"text_filter\": \"\", \"tag_filters\": [], \"limit\": 10, \"sort\": \"desc\", \"is_normalized_cpu\": false}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with process data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-product-analytics-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-product-analytics-data-source-returns-ok-response.json new file mode 100644 index 0000000000..1e755e58f3 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-product-analytics-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with product_analytics data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"product_analytics\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with product_analytics data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-profiles-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-profiles-data-source-returns-ok-response.json new file mode 100644 index 0000000000..e40989d086 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-profiles-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with profiles data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"profiles\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with profiles data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-rum-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-rum-data-source-returns-ok-response.json new file mode 100644 index 0000000000..bccca31041 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-rum-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with RUM data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"rum\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with RUM data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-security-signals-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-security-signals-data-source-returns-ok-response.json new file mode 100644 index 0000000000..835a0d2b60 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-security-signals-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with security_signals data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"security_signals\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with security_signals data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-slo-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-slo-data-source-returns-ok-response.json new file mode 100644 index 0000000000..2537087a14 --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-slo-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with slo data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"slo\", \"name\": \"a\", \"slo_id\": \"12345678910\", \"measure\": \"slo_status\", \"slo_query_type\": \"metric\", \"group_mode\": \"overall\", \"additional_query_filters\": \"*\"}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with slo data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/timeseries-cross-product-query-with-spans-data-source-returns-ok-response.json b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-spans-data-source-returns-ok-response.json new file mode 100644 index 0000000000..217e2acf9b --- /dev/null +++ b/test-runner-data/v2/metrics/timeseries-cross-product-query-with-spans-data-source-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Timeseries cross product query with spans data source returns \"OK\" response", + "operation_id": "QueryTimeseriesData", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TimeseriesFormulaQueryRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"formulas\": [{\"formula\": \"a\", \"limit\": {\"count\": 10, \"order\": \"desc\"}}], \"from\": {{ timestamp('now - 1h') }}000, \"interval\": 5000, \"queries\": [{\"data_source\": \"spans\", \"name\": \"a\", \"compute\": {\"aggregation\": \"count\"}, \"search\": {\"query\": \"*\"}, \"indexes\": [\"*\"]}], \"to\": {{ timestamp('now') }}000}, \"type\": \"timeseries_request\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/query/timeseries" + }, + "scenario": "Timeseries cross product query with spans data source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/update-a-tag-configuration-returns-ok-response.json b/test-runner-data/v2/metrics/update-a-tag-configuration-returns-ok-response.json new file mode 100644 index 0000000000..1de0580d90 --- /dev/null +++ b/test-runner-data/v2/metrics/update-a-tag-configuration-returns-ok-response.json @@ -0,0 +1,53 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Update a tag configuration returns \"OK\" response", + "operation_id": "UpdateTagConfiguration", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MetricTagConfigurationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "tags": [ + "app" + ] + }, + "id": "{{ metric_tag_configuration.data.id }}", + "type": "manage_tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "metric_tag_configuration.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/metrics/{metric_name}/tags" + }, + "scenario": "Update a tag configuration returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/update-a-tag-indexing-rule-returns-bad-request-response.json b/test-runner-data/v2/metrics/update-a-tag-indexing-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..3f00808260 --- /dev/null +++ b/test-runner-data/v2/metrics/update-a-tag-indexing-rule-returns-bad-request-response.json @@ -0,0 +1,73 @@ +{ + "api": "Metrics", + "expected_status": 400, + "feature": "Metrics", + "id": "v2/Metrics/Update a tag indexing rule returns \"Bad Request\" response", + "operation_id": "UpdateTagIndexingRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "queried_tags_window_seconds": 3600, + "related_asset_tags": false + }, + "manage_preexisting_metrics": true, + "metric_match": { + "queried_window_seconds": 3600 + }, + "override_previous_rules": false + }, + "version": 1 + }, + "rule_order": 2, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-a-valid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/metrics/tag-indexing-rules/{id}" + }, + "scenario": "Update a tag indexing rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/update-a-tag-indexing-rule-returns-not-found-response.json b/test-runner-data/v2/metrics/update-a-tag-indexing-rule-returns-not-found-response.json new file mode 100644 index 0000000000..212adf131a --- /dev/null +++ b/test-runner-data/v2/metrics/update-a-tag-indexing-rule-returns-not-found-response.json @@ -0,0 +1,73 @@ +{ + "api": "Metrics", + "expected_status": 404, + "feature": "Metrics", + "id": "v2/Metrics/Update a tag indexing rule returns \"Not Found\" response", + "operation_id": "UpdateTagIndexingRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "queried_tags_window_seconds": 3600, + "related_asset_tags": false + }, + "manage_preexisting_metrics": true, + "metric_match": { + "queried_window_seconds": 3600 + }, + "override_previous_rules": false + }, + "version": 1 + }, + "rule_order": 2, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/metrics/tag-indexing-rules/{id}" + }, + "scenario": "Update a tag indexing rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/update-a-tag-indexing-rule-returns-ok-response.json b/test-runner-data/v2/metrics/update-a-tag-indexing-rule-returns-ok-response.json new file mode 100644 index 0000000000..2aa4203e1c --- /dev/null +++ b/test-runner-data/v2/metrics/update-a-tag-indexing-rule-returns-ok-response.json @@ -0,0 +1,73 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Update a tag indexing rule returns \"OK\" response", + "operation_id": "UpdateTagIndexingRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "queried_tags_window_seconds": 3600, + "related_asset_tags": false + }, + "manage_preexisting_metrics": true, + "metric_match": { + "queried_window_seconds": 3600 + }, + "override_previous_rules": false + }, + "version": 1 + }, + "rule_order": 2, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "tag_indexing_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/metrics/tag-indexing-rules/{id}" + }, + "scenario": "Update a tag indexing rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/metrics/update-a-tag-indexing-rule-with-exclude-mode-tag-usage-fields-returns-ok-response.json b/test-runner-data/v2/metrics/update-a-tag-indexing-rule-with-exclude-mode-tag-usage-fields-returns-ok-response.json new file mode 100644 index 0000000000..22a26b035d --- /dev/null +++ b/test-runner-data/v2/metrics/update-a-tag-indexing-rule-with-exclude-mode-tag-usage-fields-returns-ok-response.json @@ -0,0 +1,71 @@ +{ + "api": "Metrics", + "expected_status": 200, + "feature": "Metrics", + "id": "v2/Metrics/Update a tag indexing rule with exclude-mode tag usage fields returns \"OK\" response", + "operation_id": "UpdateTagIndexingRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TagIndexingRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": true, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "exclude_not_queried_window_seconds": 7200, + "exclude_not_used_in_assets": true + }, + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 1 + }, + "rule_order": 2, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "tag_indexing_rule_exclude_mode.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/metrics/tag-indexing-rules/{id}" + }, + "scenario": "Update a tag indexing rule with exclude-mode tag usage fields returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/microsoft-teams-integration/create-workflow-webhook-handle-returns-created-response.json b/test-runner-data/v2/microsoft-teams-integration/create-workflow-webhook-handle-returns-created-response.json new file mode 100644 index 0000000000..ce29605657 --- /dev/null +++ b/test-runner-data/v2/microsoft-teams-integration/create-workflow-webhook-handle-returns-created-response.json @@ -0,0 +1,34 @@ +{ + "api": "MicrosoftTeamsIntegration", + "expected_status": 201, + "feature": "Microsoft Teams Integration", + "id": "v2/Microsoft Teams Integration/Create workflow webhook handle returns \"CREATED\" response", + "operation_id": "CreateWorkflowsWebhookHandle", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MicrosoftTeamsCreateWorkflowsWebhookHandleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{unique}}", + "url": "https://example.logic.azure.com/workflows/123" + }, + "type": "workflows-webhook-handle" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles" + }, + "scenario": "Create workflow webhook handle returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/microsoft-teams-integration/delete-workflow-webhook-handle-returns-ok-response.json b/test-runner-data/v2/microsoft-teams-integration/delete-workflow-webhook-handle-returns-ok-response.json new file mode 100644 index 0000000000..0c14a65193 --- /dev/null +++ b/test-runner-data/v2/microsoft-teams-integration/delete-workflow-webhook-handle-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "MicrosoftTeamsIntegration", + "expected_status": 204, + "feature": "Microsoft Teams Integration", + "id": "v2/Microsoft Teams Integration/Delete workflow webhook handle returns \"OK\" response", + "operation_id": "DeleteWorkflowsWebhookHandle", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "handle_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "workflows_webhook_handle.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/{handle_id}" + }, + "scenario": "Delete workflow webhook handle returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/microsoft-teams-integration/get-all-workflow-webhook-handles-returns-ok-response.json b/test-runner-data/v2/microsoft-teams-integration/get-all-workflow-webhook-handles-returns-ok-response.json new file mode 100644 index 0000000000..9402f0acda --- /dev/null +++ b/test-runner-data/v2/microsoft-teams-integration/get-all-workflow-webhook-handles-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "MicrosoftTeamsIntegration", + "expected_status": 200, + "feature": "Microsoft Teams Integration", + "id": "v2/Microsoft Teams Integration/Get all workflow webhook handles returns \"OK\" response", + "operation_id": "ListWorkflowsWebhookHandles", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles" + }, + "scenario": "Get all workflow webhook handles returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/microsoft-teams-integration/get-workflow-webhook-handle-information-returns-ok-response.json b/test-runner-data/v2/microsoft-teams-integration/get-workflow-webhook-handle-information-returns-ok-response.json new file mode 100644 index 0000000000..ac52c53f20 --- /dev/null +++ b/test-runner-data/v2/microsoft-teams-integration/get-workflow-webhook-handle-information-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "MicrosoftTeamsIntegration", + "expected_status": 200, + "feature": "Microsoft Teams Integration", + "id": "v2/Microsoft Teams Integration/Get workflow webhook handle information returns \"OK\" response", + "operation_id": "GetWorkflowsWebhookHandle", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "handle_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "workflows_webhook_handle.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/{handle_id}" + }, + "scenario": "Get workflow webhook handle information returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/microsoft-teams-integration/update-workflow-webhook-handle-returns-ok-response.json b/test-runner-data/v2/microsoft-teams-integration/update-workflow-webhook-handle-returns-ok-response.json new file mode 100644 index 0000000000..fb0cfeda7b --- /dev/null +++ b/test-runner-data/v2/microsoft-teams-integration/update-workflow-webhook-handle-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "MicrosoftTeamsIntegration", + "expected_status": 200, + "feature": "Microsoft Teams Integration", + "id": "v2/Microsoft Teams Integration/Update workflow webhook handle returns \"OK\" response", + "operation_id": "UpdateWorkflowsWebhookHandle", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MicrosoftTeamsUpdateWorkflowsWebhookHandleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{workflows_webhook_handle.data.attributes.name}}--updated" + }, + "type": "workflows-webhook-handle" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "handle_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "workflows_webhook_handle.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/{handle_id}" + }, + "scenario": "Update workflow webhook handle returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/delete-a-model-lab-run-returns-no-content-response.json b/test-runner-data/v2/model-lab-api/delete-a-model-lab-run-returns-no-content-response.json new file mode 100644 index 0000000000..60c62604a7 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/delete-a-model-lab-run-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 204, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Delete a Model Lab run returns \"No Content\" response", + "operation_id": "DeleteModelLabRun", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "run_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 70158 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/runs/{run_id}" + }, + "scenario": "Delete a Model Lab run returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/delete-a-model-lab-run-returns-not-found-response.json b/test-runner-data/v2/model-lab-api/delete-a-model-lab-run-returns-not-found-response.json new file mode 100644 index 0000000000..e085b4d54d --- /dev/null +++ b/test-runner-data/v2/model-lab-api/delete-a-model-lab-run-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 404, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Delete a Model Lab run returns \"Not Found\" response", + "operation_id": "DeleteModelLabRun", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "run_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 999999 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/runs/{run_id}" + }, + "scenario": "Delete a Model Lab run returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/download-artifact-content-returns-ok-response.json b/test-runner-data/v2/model-lab-api/download-artifact-content-returns-ok-response.json new file mode 100644 index 0000000000..ba09f394b4 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/download-artifact-content-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Download artifact content returns \"OK\" response", + "operation_id": "GetModelLabArtifactContent", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "project_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2387" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "artifact_path", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/adapter_config.json" + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/artifacts/content" + }, + "scenario": "Download artifact content returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/get-a-model-lab-project-returns-not-found-response.json b/test-runner-data/v2/model-lab-api/get-a-model-lab-project-returns-not-found-response.json new file mode 100644 index 0000000000..9f396c09ce --- /dev/null +++ b/test-runner-data/v2/model-lab-api/get-a-model-lab-project-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 404, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Get a Model Lab project returns \"Not Found\" response", + "operation_id": "GetModelLabProject", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 999999 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/projects/{project_id}" + }, + "scenario": "Get a Model Lab project returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/get-a-model-lab-project-returns-ok-response.json b/test-runner-data/v2/model-lab-api/get-a-model-lab-project-returns-ok-response.json new file mode 100644 index 0000000000..51954936f5 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/get-a-model-lab-project-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Get a Model Lab project returns \"OK\" response", + "operation_id": "GetModelLabProject", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2387 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/projects/{project_id}" + }, + "scenario": "Get a Model Lab project returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/get-a-model-lab-run-returns-not-found-response.json b/test-runner-data/v2/model-lab-api/get-a-model-lab-run-returns-not-found-response.json new file mode 100644 index 0000000000..f386634dab --- /dev/null +++ b/test-runner-data/v2/model-lab-api/get-a-model-lab-run-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 404, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Get a Model Lab run returns \"Not Found\" response", + "operation_id": "GetModelLabRun", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "run_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 999999 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/runs/{run_id}" + }, + "scenario": "Get a Model Lab run returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/get-a-model-lab-run-returns-ok-response.json b/test-runner-data/v2/model-lab-api/get-a-model-lab-run-returns-ok-response.json new file mode 100644 index 0000000000..f391d08e26 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/get-a-model-lab-run-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Get a Model Lab run returns \"OK\" response", + "operation_id": "GetModelLabRun", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "run_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 70158 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/runs/{run_id}" + }, + "scenario": "Get a Model Lab run returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/list-model-lab-project-artifacts-returns-ok-response.json b/test-runner-data/v2/model-lab-api/list-model-lab-project-artifacts-returns-ok-response.json new file mode 100644 index 0000000000..e107da98fb --- /dev/null +++ b/test-runner-data/v2/model-lab-api/list-model-lab-project-artifacts-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/List Model Lab project artifacts returns \"OK\" response", + "operation_id": "ListModelLabProjectArtifacts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2387 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/projects/{project_id}/artifacts" + }, + "scenario": "List Model Lab project artifacts returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/list-model-lab-project-facet-keys-returns-ok-response.json b/test-runner-data/v2/model-lab-api/list-model-lab-project-facet-keys-returns-ok-response.json new file mode 100644 index 0000000000..c07dd07559 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/list-model-lab-project-facet-keys-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/List Model Lab project facet keys returns \"OK\" response", + "operation_id": "ListModelLabProjectFacetKeys", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/model-lab-api/project-facet-keys" + }, + "scenario": "List Model Lab project facet keys returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/list-model-lab-project-facet-values-returns-ok-response.json b/test-runner-data/v2/model-lab-api/list-model-lab-project-facet-values-returns-ok-response.json new file mode 100644 index 0000000000..43731f11ed --- /dev/null +++ b/test-runner-data/v2/model-lab-api/list-model-lab-project-facet-values-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/List Model Lab project facet values returns \"OK\" response", + "operation_id": "ListModelLabProjectFacetValues", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "facet_type", + "required": true, + "schema": { + "format": null, + "ref": "ModelLabProjectFacetType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "tag" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "facet_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "model" + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/project-facet-values" + }, + "scenario": "List Model Lab project facet values returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/list-model-lab-projects-returns-ok-response.json b/test-runner-data/v2/model-lab-api/list-model-lab-projects-returns-ok-response.json new file mode 100644 index 0000000000..a2738c814d --- /dev/null +++ b/test-runner-data/v2/model-lab-api/list-model-lab-projects-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/List Model Lab projects returns \"OK\" response", + "operation_id": "ListModelLabProjects", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/model-lab-api/projects" + }, + "scenario": "List Model Lab projects returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/list-model-lab-run-artifacts-returns-ok-response.json b/test-runner-data/v2/model-lab-api/list-model-lab-run-artifacts-returns-ok-response.json new file mode 100644 index 0000000000..4b88dcb7be --- /dev/null +++ b/test-runner-data/v2/model-lab-api/list-model-lab-run-artifacts-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/List Model Lab run artifacts returns \"OK\" response", + "operation_id": "ListModelLabRunArtifacts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "run_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 70158 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/runs/{run_id}/artifacts" + }, + "scenario": "List Model Lab run artifacts returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/list-model-lab-run-facet-keys-returns-ok-response.json b/test-runner-data/v2/model-lab-api/list-model-lab-run-facet-keys-returns-ok-response.json new file mode 100644 index 0000000000..3eb75765fd --- /dev/null +++ b/test-runner-data/v2/model-lab-api/list-model-lab-run-facet-keys-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/List Model Lab run facet keys returns \"OK\" response", + "operation_id": "ListModelLabRunFacetKeys", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[project_id]", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2387 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/facet-keys" + }, + "scenario": "List Model Lab run facet keys returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/list-model-lab-run-facet-values-returns-ok-response.json b/test-runner-data/v2/model-lab-api/list-model-lab-run-facet-values-returns-ok-response.json new file mode 100644 index 0000000000..da8b474392 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/list-model-lab-run-facet-values-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/List Model Lab run facet values returns \"OK\" response", + "operation_id": "ListModelLabRunFacetValues", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[project_id]", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2387 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "facet_type", + "required": true, + "schema": { + "format": null, + "ref": "ModelLabFacetType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "tag" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "facet_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "model" + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/facet-values" + }, + "scenario": "List Model Lab run facet values returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/list-model-lab-runs-returns-ok-response.json b/test-runner-data/v2/model-lab-api/list-model-lab-runs-returns-ok-response.json new file mode 100644 index 0000000000..7a53d06634 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/list-model-lab-runs-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ModelLabAPI", + "expected_status": 200, + "feature": "Model Lab API", + "id": "v2/Model Lab API/List Model Lab runs returns \"OK\" response", + "operation_id": "ListModelLabRuns", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/model-lab-api/runs" + }, + "scenario": "List Model Lab runs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/pin-a-model-lab-run-returns-no-content-response.json b/test-runner-data/v2/model-lab-api/pin-a-model-lab-run-returns-no-content-response.json new file mode 100644 index 0000000000..272fa04459 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/pin-a-model-lab-run-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 204, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Pin a Model Lab run returns \"No Content\" response", + "operation_id": "PinModelLabRun", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "run_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 70158 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/runs/{run_id}/pin" + }, + "scenario": "Pin a Model Lab run returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/pin-a-model-lab-run-returns-not-found-response.json b/test-runner-data/v2/model-lab-api/pin-a-model-lab-run-returns-not-found-response.json new file mode 100644 index 0000000000..ba886de3df --- /dev/null +++ b/test-runner-data/v2/model-lab-api/pin-a-model-lab-run-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 404, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Pin a Model Lab run returns \"Not Found\" response", + "operation_id": "PinModelLabRun", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "run_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 999999 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/runs/{run_id}/pin" + }, + "scenario": "Pin a Model Lab run returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/star-a-model-lab-project-returns-no-content-response.json b/test-runner-data/v2/model-lab-api/star-a-model-lab-project-returns-no-content-response.json new file mode 100644 index 0000000000..a1b165ff67 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/star-a-model-lab-project-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 204, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Star a Model Lab project returns \"No Content\" response", + "operation_id": "StarModelLabProject", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2387 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/projects/{project_id}/star" + }, + "scenario": "Star a Model Lab project returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/star-a-model-lab-project-returns-not-found-response.json b/test-runner-data/v2/model-lab-api/star-a-model-lab-project-returns-not-found-response.json new file mode 100644 index 0000000000..7afe8066e5 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/star-a-model-lab-project-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 404, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Star a Model Lab project returns \"Not Found\" response", + "operation_id": "StarModelLabProject", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 999999 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/projects/{project_id}/star" + }, + "scenario": "Star a Model Lab project returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/unpin-a-model-lab-run-returns-no-content-response.json b/test-runner-data/v2/model-lab-api/unpin-a-model-lab-run-returns-no-content-response.json new file mode 100644 index 0000000000..8c5b2170b1 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/unpin-a-model-lab-run-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 204, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Unpin a Model Lab run returns \"No Content\" response", + "operation_id": "UnpinModelLabRun", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "run_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 70158 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/runs/{run_id}/pin" + }, + "scenario": "Unpin a Model Lab run returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/model-lab-api/unstar-a-model-lab-project-returns-no-content-response.json b/test-runner-data/v2/model-lab-api/unstar-a-model-lab-project-returns-no-content-response.json new file mode 100644 index 0000000000..1b0bb46d70 --- /dev/null +++ b/test-runner-data/v2/model-lab-api/unstar-a-model-lab-project-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "ModelLabAPI", + "expected_status": 204, + "feature": "Model Lab API", + "id": "v2/Model Lab API/Unstar a Model Lab project returns \"No Content\" response", + "operation_id": "UnstarModelLabProject", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "project_id", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2387 + }, + "style": null + } + ], + "path": "/api/v2/model-lab-api/projects/{project_id}/star" + }, + "scenario": "Unstar a Model Lab project returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/create-a-monitor-configuration-policy-returns-bad-request-response.json b/test-runner-data/v2/monitors/create-a-monitor-configuration-policy-returns-bad-request-response.json new file mode 100644 index 0000000000..318b94f558 --- /dev/null +++ b/test-runner-data/v2/monitors/create-a-monitor-configuration-policy-returns-bad-request-response.json @@ -0,0 +1,41 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v2/Monitors/Create a monitor configuration policy returns \"Bad Request\" response", + "operation_id": "CreateMonitorConfigPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorConfigPolicyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "datacenter", + "tag_key_required": true, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "INVALID" + }, + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/policy" + }, + "scenario": "Create a monitor configuration policy returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/create-a-monitor-configuration-policy-returns-ok-response.json b/test-runner-data/v2/monitors/create-a-monitor-configuration-policy-returns-ok-response.json new file mode 100644 index 0000000000..cc30af37d3 --- /dev/null +++ b/test-runner-data/v2/monitors/create-a-monitor-configuration-policy-returns-ok-response.json @@ -0,0 +1,41 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Create a monitor configuration policy returns \"OK\" response", + "operation_id": "CreateMonitorConfigPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorConfigPolicyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "{{ unique_lower_alnum }}", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/policy" + }, + "scenario": "Create a monitor configuration policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/create-a-monitor-notification-rule-returns-bad-request-response.json b/test-runner-data/v2/monitors/create-a-monitor-notification-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..ba84e8d46f --- /dev/null +++ b/test-runner-data/v2/monitors/create-a-monitor-notification-rule-returns-bad-request-response.json @@ -0,0 +1,43 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v2/Monitors/Create a monitor notification rule returns \"Bad Request\" response", + "operation_id": "CreateMonitorNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorNotificationRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:{{ unique_lower }}", + "host:abc" + ] + }, + "name": "test rule", + "recipients": [ + "@slack-test-channel", + "@jira-test" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/notification_rule" + }, + "scenario": "Create a monitor notification rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/create-a-monitor-notification-rule-returns-ok-response.json b/test-runner-data/v2/monitors/create-a-monitor-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..b6d8b89bd3 --- /dev/null +++ b/test-runner-data/v2/monitors/create-a-monitor-notification-rule-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Create a monitor notification rule returns \"OK\" response", + "operation_id": "CreateMonitorNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorNotificationRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:{{ unique_lower }}" + ] + }, + "name": "test rule", + "recipients": [ + "slack-test-channel", + "jira-test" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/notification_rule" + }, + "scenario": "Create a monitor notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/create-a-monitor-notification-rule-with-conditional-recipients-returns-ok-response.json b/test-runner-data/v2/monitors/create-a-monitor-notification-rule-with-conditional-recipients-returns-ok-response.json new file mode 100644 index 0000000000..b9acf1de97 --- /dev/null +++ b/test-runner-data/v2/monitors/create-a-monitor-notification-rule-with-conditional-recipients-returns-ok-response.json @@ -0,0 +1,49 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Create a monitor notification rule with conditional recipients returns \"OK\" response", + "operation_id": "CreateMonitorNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorNotificationRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "conditional_recipients": { + "conditions": [ + { + "recipients": [ + "slack-test-channel", + "jira-test" + ], + "scope": "transition_type:is_alert" + } + ] + }, + "filter": { + "tags": [ + "test:{{ unique_lower }}" + ] + }, + "name": "test rule" + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/notification_rule" + }, + "scenario": "Create a monitor notification rule with conditional recipients returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/create-a-monitor-notification-rule-with-scope-returns-ok-response.json b/test-runner-data/v2/monitors/create-a-monitor-notification-rule-with-scope-returns-ok-response.json new file mode 100644 index 0000000000..054ee3a11b --- /dev/null +++ b/test-runner-data/v2/monitors/create-a-monitor-notification-rule-with-scope-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Create a monitor notification rule with scope returns \"OK\" response", + "operation_id": "CreateMonitorNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorNotificationRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "scope": "test:{{ unique_lower }}" + }, + "name": "test rule", + "recipients": [ + "slack-test-channel", + "jira-test" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/notification_rule" + }, + "scenario": "Create a monitor notification rule with scope returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/create-a-monitor-user-template-returns-bad-request-response.json b/test-runner-data/v2/monitors/create-a-monitor-user-template-returns-bad-request-response.json new file mode 100644 index 0000000000..9758a30be6 --- /dev/null +++ b/test-runner-data/v2/monitors/create-a-monitor-user-template-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v2/Monitors/Create a monitor user template returns \"Bad Request\" response", + "operation_id": "CreateMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": {}, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/template" + }, + "scenario": "Create a monitor user template returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/create-a-monitor-user-template-returns-ok-response.json b/test-runner-data/v2/monitors/create-a-monitor-user-template-returns-ok-response.json new file mode 100644 index 0000000000..12879ee781 --- /dev/null +++ b/test-runner-data/v2/monitors/create-a-monitor-user-template-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Create a monitor user template returns \"OK\" response", + "operation_id": "CreateMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name {{ unique_lower }}", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/template" + }, + "scenario": "Create a monitor user template returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/delete-a-monitor-configuration-policy-returns-bad-request-response.json b/test-runner-data/v2/monitors/delete-a-monitor-configuration-policy-returns-bad-request-response.json new file mode 100644 index 0000000000..cc446fece4 --- /dev/null +++ b/test-runner-data/v2/monitors/delete-a-monitor-configuration-policy-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v2/Monitors/Delete a monitor configuration policy returns \"Bad Request\" response", + "operation_id": "DeleteMonitorConfigPolicy", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "INVALID_UUID" + }, + "style": null + } + ], + "path": "/api/v2/monitor/policy/{policy_id}" + }, + "scenario": "Delete a monitor configuration policy returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/delete-a-monitor-configuration-policy-returns-not-found-response.json b/test-runner-data/v2/monitors/delete-a-monitor-configuration-policy-returns-not-found-response.json new file mode 100644 index 0000000000..5dc407cc27 --- /dev/null +++ b/test-runner-data/v2/monitors/delete-a-monitor-configuration-policy-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Delete a monitor configuration policy returns \"Not Found\" response", + "operation_id": "DeleteMonitorConfigPolicy", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/policy/{policy_id}" + }, + "scenario": "Delete a monitor configuration policy returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/delete-a-monitor-configuration-policy-returns-ok-response.json b/test-runner-data/v2/monitors/delete-a-monitor-configuration-policy-returns-ok-response.json new file mode 100644 index 0000000000..4fb10f4883 --- /dev/null +++ b/test-runner-data/v2/monitors/delete-a-monitor-configuration-policy-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 204, + "feature": "Monitors", + "id": "v2/Monitors/Delete a monitor configuration policy returns \"OK\" response", + "operation_id": "DeleteMonitorConfigPolicy", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_configuration_policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/policy/{policy_id}" + }, + "scenario": "Delete a monitor configuration policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/delete-a-monitor-notification-rule-returns-not-found-response.json b/test-runner-data/v2/monitors/delete-a-monitor-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..a48f09f4ab --- /dev/null +++ b/test-runner-data/v2/monitors/delete-a-monitor-notification-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Delete a monitor notification rule returns \"Not Found\" response", + "operation_id": "DeleteMonitorNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/notification_rule/{rule_id}" + }, + "scenario": "Delete a monitor notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/delete-a-monitor-notification-rule-returns-ok-response.json b/test-runner-data/v2/monitors/delete-a-monitor-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..0157b444df --- /dev/null +++ b/test-runner-data/v2/monitors/delete-a-monitor-notification-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 204, + "feature": "Monitors", + "id": "v2/Monitors/Delete a monitor notification rule returns \"OK\" response", + "operation_id": "DeleteMonitorNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/notification_rule/{rule_id}" + }, + "scenario": "Delete a monitor notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/delete-a-monitor-user-template-returns-not-found-response.json b/test-runner-data/v2/monitors/delete-a-monitor-user-template-returns-not-found-response.json new file mode 100644 index 0000000000..bcecc46365 --- /dev/null +++ b/test-runner-data/v2/monitors/delete-a-monitor-user-template-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Delete a monitor user template returns \"Not Found\" response", + "operation_id": "DeleteMonitorUserTemplate", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/template/{template_id}" + }, + "scenario": "Delete a monitor user template returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/edit-a-monitor-configuration-policy-returns-not-found-response.json b/test-runner-data/v2/monitors/edit-a-monitor-configuration-policy-returns-not-found-response.json new file mode 100644 index 0000000000..a2650da601 --- /dev/null +++ b/test-runner-data/v2/monitors/edit-a-monitor-configuration-policy-returns-not-found-response.json @@ -0,0 +1,59 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Edit a monitor configuration policy returns \"Not Found\" response", + "operation_id": "UpdateMonitorConfigPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorConfigPolicyEditRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "datacenter", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/policy/{policy_id}" + }, + "scenario": "Edit a monitor configuration policy returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/edit-a-monitor-configuration-policy-returns-ok-response.json b/test-runner-data/v2/monitors/edit-a-monitor-configuration-policy-returns-ok-response.json new file mode 100644 index 0000000000..daf121d372 --- /dev/null +++ b/test-runner-data/v2/monitors/edit-a-monitor-configuration-policy-returns-ok-response.json @@ -0,0 +1,59 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Edit a monitor configuration policy returns \"OK\" response", + "operation_id": "UpdateMonitorConfigPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorConfigPolicyEditRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "{{ unique_lower_alnum }}", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "id": "{{ monitor_configuration_policy.data.id }}", + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_configuration_policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/policy/{policy_id}" + }, + "scenario": "Edit a monitor configuration policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/edit-a-monitor-configuration-policy-returns-unprocessable-entity-response.json b/test-runner-data/v2/monitors/edit-a-monitor-configuration-policy-returns-unprocessable-entity-response.json new file mode 100644 index 0000000000..19db0025a2 --- /dev/null +++ b/test-runner-data/v2/monitors/edit-a-monitor-configuration-policy-returns-unprocessable-entity-response.json @@ -0,0 +1,59 @@ +{ + "api": "Monitors", + "expected_status": 422, + "feature": "Monitors", + "id": "v2/Monitors/Edit a monitor configuration policy returns \"Unprocessable Entity\" response", + "operation_id": "UpdateMonitorConfigPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorConfigPolicyEditRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "{{ unique_lower_alnum }}", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_configuration_policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/policy/{policy_id}" + }, + "scenario": "Edit a monitor configuration policy returns \"Unprocessable Entity\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/get-a-monitor-configuration-policy-returns-not-found-response.json b/test-runner-data/v2/monitors/get-a-monitor-configuration-policy-returns-not-found-response.json new file mode 100644 index 0000000000..835c8176d8 --- /dev/null +++ b/test-runner-data/v2/monitors/get-a-monitor-configuration-policy-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Get a monitor configuration policy returns \"Not Found\" response", + "operation_id": "GetMonitorConfigPolicy", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "12340000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/policy/{policy_id}" + }, + "scenario": "Get a monitor configuration policy returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/get-a-monitor-configuration-policy-returns-ok-response.json b/test-runner-data/v2/monitors/get-a-monitor-configuration-policy-returns-ok-response.json new file mode 100644 index 0000000000..e6e848d21d --- /dev/null +++ b/test-runner-data/v2/monitors/get-a-monitor-configuration-policy-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Get a monitor configuration policy returns \"OK\" response", + "operation_id": "GetMonitorConfigPolicy", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_configuration_policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/policy/{policy_id}" + }, + "scenario": "Get a monitor configuration policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/get-a-monitor-notification-rule-returns-not-found-response.json b/test-runner-data/v2/monitors/get-a-monitor-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..1637950a87 --- /dev/null +++ b/test-runner-data/v2/monitors/get-a-monitor-notification-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Get a monitor notification rule returns \"Not Found\" response", + "operation_id": "GetMonitorNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/notification_rule/{rule_id}" + }, + "scenario": "Get a monitor notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/get-a-monitor-notification-rule-returns-ok-response.json b/test-runner-data/v2/monitors/get-a-monitor-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..71b1bed75f --- /dev/null +++ b/test-runner-data/v2/monitors/get-a-monitor-notification-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Get a monitor notification rule returns \"OK\" response", + "operation_id": "GetMonitorNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/notification_rule/{rule_id}" + }, + "scenario": "Get a monitor notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/get-a-monitor-user-template-returns-not-found-response.json b/test-runner-data/v2/monitors/get-a-monitor-user-template-returns-not-found-response.json new file mode 100644 index 0000000000..a3a5bf5719 --- /dev/null +++ b/test-runner-data/v2/monitors/get-a-monitor-user-template-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Get a monitor user template returns \"Not Found\" response", + "operation_id": "GetMonitorUserTemplate", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/template/{template_id}" + }, + "scenario": "Get a monitor user template returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/get-a-monitor-user-template-returns-ok-response.json b/test-runner-data/v2/monitors/get-a-monitor-user-template-returns-ok-response.json new file mode 100644 index 0000000000..1a5dd324e4 --- /dev/null +++ b/test-runner-data/v2/monitors/get-a-monitor-user-template-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Get a monitor user template returns \"OK\" response", + "operation_id": "GetMonitorUserTemplate", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_user_template.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/template/{template_id}" + }, + "scenario": "Get a monitor user template returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/get-all-monitor-configuration-policies-returns-ok-response.json b/test-runner-data/v2/monitors/get-all-monitor-configuration-policies-returns-ok-response.json new file mode 100644 index 0000000000..c1ac80463f --- /dev/null +++ b/test-runner-data/v2/monitors/get-all-monitor-configuration-policies-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Get all monitor configuration policies returns \"OK\" response", + "operation_id": "ListMonitorConfigPolicies", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/policy" + }, + "scenario": "Get all monitor configuration policies returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/get-all-monitor-notification-rules-returns-ok-response.json b/test-runner-data/v2/monitors/get-all-monitor-notification-rules-returns-ok-response.json new file mode 100644 index 0000000000..5c6b00946d --- /dev/null +++ b/test-runner-data/v2/monitors/get-all-monitor-notification-rules-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Get all monitor notification rules returns \"OK\" response", + "operation_id": "GetMonitorNotificationRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/notification_rule" + }, + "scenario": "Get all monitor notification rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/get-all-monitor-user-templates-returns-ok-response.json b/test-runner-data/v2/monitors/get-all-monitor-user-templates-returns-ok-response.json new file mode 100644 index 0000000000..12777b70ec --- /dev/null +++ b/test-runner-data/v2/monitors/get-all-monitor-user-templates-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Get all monitor user templates returns \"OK\" response", + "operation_id": "ListMonitorUserTemplates", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/template" + }, + "scenario": "Get all monitor user templates returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/update-a-monitor-notification-rule-returns-bad-request-response.json b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..6d0f841b10 --- /dev/null +++ b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-returns-bad-request-response.json @@ -0,0 +1,60 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v2/Monitors/Update a monitor notification rule returns \"Bad Request\" response", + "operation_id": "UpdateMonitorNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorNotificationRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:{{ unique_lower }}", + "host:abc" + ] + }, + "name": "updated rule", + "recipients": [ + "@slack-test-channel" + ] + }, + "id": "{{ monitor_notification_rule.data.id }}", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/notification_rule/{rule_id}" + }, + "scenario": "Update a monitor notification rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/update-a-monitor-notification-rule-returns-not-found-response.json b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..3b0c21a5b8 --- /dev/null +++ b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-returns-not-found-response.json @@ -0,0 +1,61 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Update a monitor notification rule returns \"Not Found\" response", + "operation_id": "UpdateMonitorNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorNotificationRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:{{ unique_lower }}", + "host:abc" + ] + }, + "name": "updated rule", + "recipients": [ + "slack-test-channel", + "jira-test" + ] + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/notification_rule/{rule_id}" + }, + "scenario": "Update a monitor notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/update-a-monitor-notification-rule-returns-ok-response.json b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..1ca9781f46 --- /dev/null +++ b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-returns-ok-response.json @@ -0,0 +1,60 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Update a monitor notification rule returns \"OK\" response", + "operation_id": "UpdateMonitorNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorNotificationRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:{{ unique_lower }}", + "host:abc" + ] + }, + "name": "updated rule", + "recipients": [ + "slack-test-channel" + ] + }, + "id": "{{ monitor_notification_rule.data.id }}", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/notification_rule/{rule_id}" + }, + "scenario": "Update a monitor notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/update-a-monitor-notification-rule-with-conditional-recipients-returns-ok-response.json b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-with-conditional-recipients-returns-ok-response.json new file mode 100644 index 0000000000..0a55308524 --- /dev/null +++ b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-with-conditional-recipients-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Update a monitor notification rule with conditional_recipients returns \"OK\" response", + "operation_id": "UpdateMonitorNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorNotificationRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "conditional_recipients": { + "conditions": [ + { + "recipients": [ + "slack-test-channel", + "jira-test" + ], + "scope": "transition_type:is_alert" + } + ] + }, + "filter": { + "tags": [ + "test:{{ unique_lower }}", + "host:abc" + ] + }, + "name": "updated rule" + }, + "id": "{{ monitor_notification_rule.data.id }}", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/notification_rule/{rule_id}" + }, + "scenario": "Update a monitor notification rule with conditional_recipients returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/update-a-monitor-notification-rule-with-scope-returns-ok-response.json b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-with-scope-returns-ok-response.json new file mode 100644 index 0000000000..698691d088 --- /dev/null +++ b/test-runner-data/v2/monitors/update-a-monitor-notification-rule-with-scope-returns-ok-response.json @@ -0,0 +1,57 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Update a monitor notification rule with scope returns \"OK\" response", + "operation_id": "UpdateMonitorNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorNotificationRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "scope": "test:{{ unique_lower }}" + }, + "name": "updated rule", + "recipients": [ + "slack-test-channel" + ] + }, + "id": "{{ monitor_notification_rule.data.id }}", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/notification_rule/{rule_id}" + }, + "scenario": "Update a monitor notification rule with scope returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-bad-request-response.json b/test-runner-data/v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-bad-request-response.json new file mode 100644 index 0000000000..afeb22a42b --- /dev/null +++ b/test-runner-data/v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-bad-request-response.json @@ -0,0 +1,69 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v2/Monitors/Update a monitor user template to a new version returns \"Bad Request\" response", + "operation_id": "UpdateMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": {}, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_user_template.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/template/{template_id}" + }, + "scenario": "Update a monitor user template to a new version returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-not-found-response.json b/test-runner-data/v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-not-found-response.json new file mode 100644 index 0000000000..882caca12c --- /dev/null +++ b/test-runner-data/v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-not-found-response.json @@ -0,0 +1,74 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Update a monitor user template to a new version returns \"Not Found\" response", + "operation_id": "UpdateMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name {{ unique_lower }}", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/template/{template_id}" + }, + "scenario": "Update a monitor user template to a new version returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-ok-response.json b/test-runner-data/v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-ok-response.json new file mode 100644 index 0000000000..9c1942795d --- /dev/null +++ b/test-runner-data/v2/monitors/update-a-monitor-user-template-to-a-new-version-returns-ok-response.json @@ -0,0 +1,74 @@ +{ + "api": "Monitors", + "expected_status": 200, + "feature": "Monitors", + "id": "v2/Monitors/Update a monitor user template to a new version returns \"OK\" response", + "operation_id": "UpdateMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name {{ unique_lower }}", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_user_template.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/template/{template_id}" + }, + "scenario": "Update a monitor user template to a new version returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/validate-a-monitor-user-template-returns-bad-request-response.json b/test-runner-data/v2/monitors/validate-a-monitor-user-template-returns-bad-request-response.json new file mode 100644 index 0000000000..aac2cbed73 --- /dev/null +++ b/test-runner-data/v2/monitors/validate-a-monitor-user-template-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v2/Monitors/Validate a monitor user template returns \"Bad Request\" response", + "operation_id": "ValidateMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": {}, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/template/validate" + }, + "scenario": "Validate a monitor user template returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/validate-a-monitor-user-template-returns-ok-response.json b/test-runner-data/v2/monitors/validate-a-monitor-user-template-returns-ok-response.json new file mode 100644 index 0000000000..a3e718c437 --- /dev/null +++ b/test-runner-data/v2/monitors/validate-a-monitor-user-template-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "Monitors", + "expected_status": 204, + "feature": "Monitors", + "id": "v2/Monitors/Validate a monitor user template returns \"OK\" response", + "operation_id": "ValidateMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name {{ unique_lower }}", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/monitor/template/validate" + }, + "scenario": "Validate a monitor user template returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/validate-an-existing-monitor-user-template-returns-bad-request-response.json b/test-runner-data/v2/monitors/validate-an-existing-monitor-user-template-returns-bad-request-response.json new file mode 100644 index 0000000000..3ddb42db40 --- /dev/null +++ b/test-runner-data/v2/monitors/validate-an-existing-monitor-user-template-returns-bad-request-response.json @@ -0,0 +1,69 @@ +{ + "api": "Monitors", + "expected_status": 400, + "feature": "Monitors", + "id": "v2/Monitors/Validate an existing monitor user template returns \"Bad Request\" response", + "operation_id": "ValidateExistingMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": {}, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_user_template.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/template/{template_id}/validate" + }, + "scenario": "Validate an existing monitor user template returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/validate-an-existing-monitor-user-template-returns-not-found-response.json b/test-runner-data/v2/monitors/validate-an-existing-monitor-user-template-returns-not-found-response.json new file mode 100644 index 0000000000..216a2f71fc --- /dev/null +++ b/test-runner-data/v2/monitors/validate-an-existing-monitor-user-template-returns-not-found-response.json @@ -0,0 +1,74 @@ +{ + "api": "Monitors", + "expected_status": 404, + "feature": "Monitors", + "id": "v2/Monitors/Validate an existing monitor user template returns \"Not Found\" response", + "operation_id": "ValidateExistingMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name {{ unique_lower }}", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-1234-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/monitor/template/{template_id}/validate" + }, + "scenario": "Validate an existing monitor user template returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/monitors/validate-an-existing-monitor-user-template-returns-ok-response.json b/test-runner-data/v2/monitors/validate-an-existing-monitor-user-template-returns-ok-response.json new file mode 100644 index 0000000000..e63bbfbd3d --- /dev/null +++ b/test-runner-data/v2/monitors/validate-an-existing-monitor-user-template-returns-ok-response.json @@ -0,0 +1,74 @@ +{ + "api": "Monitors", + "expected_status": 204, + "feature": "Monitors", + "id": "v2/Monitors/Validate an existing monitor user template returns \"OK\" response", + "operation_id": "ValidateExistingMonitorUserTemplate", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MonitorUserTemplateUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name {{ unique_lower }}", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB {{ unique_lower }}" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "template_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "monitor_user_template.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/monitor/template/{template_id}/validate" + }, + "scenario": "Validate an existing monitor user template returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/get-the-device-details-returns-not-found-response.json b/test-runner-data/v2/network-device-monitoring/get-the-device-details-returns-not-found-response.json new file mode 100644 index 0000000000..f6058ab063 --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/get-the-device-details-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 404, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Get the device details returns \"Not Found\" response", + "operation_id": "GetDevice", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "device_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown_device_id" + }, + "style": null + } + ], + "path": "/api/v2/ndm/devices/{device_id}" + }, + "scenario": "Get the device details returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/get-the-device-details-returns-ok-response.json b/test-runner-data/v2/network-device-monitoring/get-the-device-details-returns-ok-response.json new file mode 100644 index 0000000000..b5771d9bfa --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/get-the-device-details-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 200, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Get the device details returns \"OK\" response", + "operation_id": "GetDevice", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "device_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "default_device" + }, + "style": null + } + ], + "path": "/api/v2/ndm/devices/{device_id}" + }, + "scenario": "Get the device details returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/get-the-list-of-devices-returns-bad-request-response.json b/test-runner-data/v2/network-device-monitoring/get-the-list-of-devices-returns-bad-request-response.json new file mode 100644 index 0000000000..ef2ea7d68c --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/get-the-list-of-devices-returns-bad-request-response.json @@ -0,0 +1,18 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 400, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Get the list of devices returns \"Bad Request\" response", + "operation_id": "ListDevices", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/ndm/devices" + }, + "scenario": "Get the list of devices returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/get-the-list-of-devices-returns-ok-response.json b/test-runner-data/v2/network-device-monitoring/get-the-list-of-devices-returns-ok-response.json new file mode 100644 index 0000000000..5cc21137b0 --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/get-the-list-of-devices-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 200, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Get the list of devices returns \"OK\" response", + "operation_id": "ListDevices", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[number]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[tag]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "device_namespace:default" + }, + "style": null + } + ], + "path": "/api/v2/ndm/devices" + }, + "scenario": "Get the list of devices returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/get-the-list-of-interfaces-of-the-device-returns-ok-response.json b/test-runner-data/v2/network-device-monitoring/get-the-list-of-interfaces-of-the-device-returns-ok-response.json new file mode 100644 index 0000000000..95f858951a --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/get-the-list-of-interfaces-of-the-device-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 200, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Get the list of interfaces of the device returns \"OK\" response", + "operation_id": "GetInterfaces", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "device_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "default:1.2.3.4" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "get_ip_addresses", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v2/ndm/interfaces" + }, + "scenario": "Get the list of interfaces of the device returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/get-the-list-of-tags-for-a-device-returns-not-found-response.json b/test-runner-data/v2/network-device-monitoring/get-the-list-of-tags-for-a-device-returns-not-found-response.json new file mode 100644 index 0000000000..d782eef9f1 --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/get-the-list-of-tags-for-a-device-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 404, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Get the list of tags for a device returns \"Not Found\" response", + "operation_id": "ListDeviceUserTags", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "device_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown_device_id" + }, + "style": null + } + ], + "path": "/api/v2/ndm/tags/devices/{device_id}" + }, + "scenario": "Get the list of tags for a device returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/get-the-list-of-tags-for-a-device-returns-ok-response.json b/test-runner-data/v2/network-device-monitoring/get-the-list-of-tags-for-a-device-returns-ok-response.json new file mode 100644 index 0000000000..8c39cef7b3 --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/get-the-list-of-tags-for-a-device-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 200, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Get the list of tags for a device returns \"OK\" response", + "operation_id": "ListDeviceUserTags", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "device_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "default_device" + }, + "style": null + } + ], + "path": "/api/v2/ndm/tags/devices/{device_id}" + }, + "scenario": "Get the list of tags for a device returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/list-tags-for-an-interface-returns-not-found-response.json b/test-runner-data/v2/network-device-monitoring/list-tags-for-an-interface-returns-not-found-response.json new file mode 100644 index 0000000000..5b39a87ee5 --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/list-tags-for-an-interface-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 404, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/List tags for an interface returns \"Not Found\" response", + "operation_id": "ListInterfaceUserTags", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "interface_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown_interface_id" + }, + "style": null + } + ], + "path": "/api/v2/ndm/tags/interfaces/{interface_id}" + }, + "scenario": "List tags for an interface returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/list-tags-for-an-interface-returns-ok-response.json b/test-runner-data/v2/network-device-monitoring/list-tags-for-an-interface-returns-ok-response.json new file mode 100644 index 0000000000..2163e3a7c3 --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/list-tags-for-an-interface-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 200, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/List tags for an interface returns \"OK\" response", + "operation_id": "ListInterfaceUserTags", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "interface_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "example:1.2.3.4:1" + }, + "style": null + } + ], + "path": "/api/v2/ndm/tags/interfaces/{interface_id}" + }, + "scenario": "List tags for an interface returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/update-the-tags-for-a-device-returns-not-found-response.json b/test-runner-data/v2/network-device-monitoring/update-the-tags-for-a-device-returns-not-found-response.json new file mode 100644 index 0000000000..c5d18c3bef --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/update-the-tags-for-a-device-returns-not-found-response.json @@ -0,0 +1,54 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 404, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Update the tags for a device returns \"Not Found\" response", + "operation_id": "UpdateDeviceUserTags", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ListTagsResponse", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "tags": [ + "tag:test", + "tag:testbis" + ] + }, + "id": "unknown_device_id", + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "device_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown_device_id" + }, + "style": null + } + ], + "path": "/api/v2/ndm/tags/devices/{device_id}" + }, + "scenario": "Update the tags for a device returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/update-the-tags-for-a-device-returns-ok-response.json b/test-runner-data/v2/network-device-monitoring/update-the-tags-for-a-device-returns-ok-response.json new file mode 100644 index 0000000000..b45f54e845 --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/update-the-tags-for-a-device-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 200, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Update the tags for a device returns \"OK\" response", + "operation_id": "UpdateDeviceUserTags", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ListTagsResponse", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "tags": [ + "tag:test", + "tag:testbis" + ] + }, + "id": "default_device", + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "device_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "default_device" + }, + "style": null + } + ], + "path": "/api/v2/ndm/tags/devices/{device_id}" + }, + "scenario": "Update the tags for a device returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/update-the-tags-for-an-interface-returns-not-found-response.json b/test-runner-data/v2/network-device-monitoring/update-the-tags-for-an-interface-returns-not-found-response.json new file mode 100644 index 0000000000..4276c682e0 --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/update-the-tags-for-an-interface-returns-not-found-response.json @@ -0,0 +1,54 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 404, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Update the tags for an interface returns \"Not Found\" response", + "operation_id": "UpdateInterfaceUserTags", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ListInterfaceTagsResponse", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "tags": [ + "tag:test", + "tag:testbis" + ] + }, + "id": "unknown_interface_id", + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "interface_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown_interface_id" + }, + "style": null + } + ], + "path": "/api/v2/ndm/tags/interfaces/{interface_id}" + }, + "scenario": "Update the tags for an interface returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/network-device-monitoring/update-the-tags-for-an-interface-returns-ok-response.json b/test-runner-data/v2/network-device-monitoring/update-the-tags-for-an-interface-returns-ok-response.json new file mode 100644 index 0000000000..de23dc8453 --- /dev/null +++ b/test-runner-data/v2/network-device-monitoring/update-the-tags-for-an-interface-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "NetworkDeviceMonitoring", + "expected_status": 200, + "feature": "Network Device Monitoring", + "id": "v2/Network Device Monitoring/Update the tags for an interface returns \"OK\" response", + "operation_id": "UpdateInterfaceUserTags", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ListInterfaceTagsResponse", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "tags": [ + "tag:test", + "tag:testbis" + ] + }, + "id": "example:1.2.3.4:1", + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "interface_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "example:1.2.3.4:1" + }, + "style": null + } + ], + "path": "/api/v2/ndm/tags/interfaces/{interface_id}" + }, + "scenario": "Update the tags for an interface returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/create-a-new-pipeline-returns-bad-request-response.json b/test-runner-data/v2/observability-pipelines/create-a-new-pipeline-returns-bad-request-response.json new file mode 100644 index 0000000000..07d06d315d --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/create-a-new-pipeline-returns-bad-request-response.json @@ -0,0 +1,68 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 400, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Create a new pipeline returns \"Bad Request\" response", + "operation_id": "CreatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "unknown-processor", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines" + }, + "scenario": "Create a new pipeline returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/create-a-new-pipeline-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/create-a-new-pipeline-returns-ok-response.json new file mode 100644 index 0000000000..904dc739e5 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/create-a-new-pipeline-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 201, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Create a new pipeline returns \"OK\" response", + "operation_id": "CreatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines" + }, + "scenario": "Create a new pipeline returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/create-a-pipeline-with-dedupe-processor-with-cache-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/create-a-pipeline-with-dedupe-processor-with-cache-returns-ok-response.json new file mode 100644 index 0000000000..11b64fb693 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/create-a-pipeline-with-dedupe-processor-with-cache-returns-ok-response.json @@ -0,0 +1,75 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 201, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Create a pipeline with dedupe processor with cache returns \"OK\" response", + "operation_id": "CreatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "cache": { + "num_events": 5000 + }, + "enabled": true, + "fields": [ + "message" + ], + "id": "dedupe-processor", + "include": "service:my-service", + "mode": "match", + "type": "dedupe" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Dedupe Cache" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines" + }, + "scenario": "Create a pipeline with dedupe processor with cache returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/create-a-pipeline-with-dedupe-processor-without-cache-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/create-a-pipeline-with-dedupe-processor-without-cache-returns-ok-response.json new file mode 100644 index 0000000000..4e11b50ea7 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/create-a-pipeline-with-dedupe-processor-without-cache-returns-ok-response.json @@ -0,0 +1,72 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 201, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Create a pipeline with dedupe processor without cache returns \"OK\" response", + "operation_id": "CreatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "fields": [ + "message" + ], + "id": "dedupe-processor", + "include": "service:my-service", + "mode": "match", + "type": "dedupe" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Dedupe No Cache" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines" + }, + "scenario": "Create a pipeline with dedupe processor without cache returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/delete-a-pipeline-returns-not-found-response.json b/test-runner-data/v2/observability-pipelines/delete-a-pipeline-returns-not-found-response.json new file mode 100644 index 0000000000..837fa291a2 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/delete-a-pipeline-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 404, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Delete a pipeline returns \"Not Found\" response", + "operation_id": "DeletePipeline", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "pipeline_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "3fa85f64-5717-4562-b3fc-2c963f66afa6" + }, + "style": null + } + ], + "path": "/api/v2/obs-pipelines/pipelines/{pipeline_id}" + }, + "scenario": "Delete a pipeline returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/delete-a-pipeline-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/delete-a-pipeline-returns-ok-response.json new file mode 100644 index 0000000000..586c45845b --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/delete-a-pipeline-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 204, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Delete a pipeline returns \"OK\" response", + "operation_id": "DeletePipeline", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "pipeline_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "pipeline.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/obs-pipelines/pipelines/{pipeline_id}" + }, + "scenario": "Delete a pipeline returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/get-a-specific-pipeline-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/get-a-specific-pipeline-returns-ok-response.json new file mode 100644 index 0000000000..1a35a05e3c --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/get-a-specific-pipeline-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Get a specific pipeline returns \"OK\" response", + "operation_id": "GetPipeline", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "pipeline_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "pipeline.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/obs-pipelines/pipelines/{pipeline_id}" + }, + "scenario": "Get a specific pipeline returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/list-pipelines-returns-bad-request-response.json b/test-runner-data/v2/observability-pipelines/list-pipelines-returns-bad-request-response.json new file mode 100644 index 0000000000..4c1b019212 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/list-pipelines-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 400, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/List pipelines returns \"Bad Request\" response", + "operation_id": "ListPipelines", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + } + ], + "path": "/api/v2/obs-pipelines/pipelines" + }, + "scenario": "List pipelines returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/list-pipelines-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/list-pipelines-returns-ok-response.json new file mode 100644 index 0000000000..eb09ded87d --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/list-pipelines-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/List pipelines returns \"OK\" response", + "operation_id": "ListPipelines", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines" + }, + "scenario": "List pipelines returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/update-a-pipeline-returns-bad-request-response.json b/test-runner-data/v2/observability-pipelines/update-a-pipeline-returns-bad-request-response.json new file mode 100644 index 0000000000..1da94af30c --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/update-a-pipeline-returns-bad-request-response.json @@ -0,0 +1,86 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 400, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Update a pipeline returns \"Bad Request\" response", + "operation_id": "UpdatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "unknown-processor", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "pipeline_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "pipeline.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/obs-pipelines/pipelines/{pipeline_id}" + }, + "scenario": "Update a pipeline returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/update-a-pipeline-returns-not-found-response.json b/test-runner-data/v2/observability-pipelines/update-a-pipeline-returns-not-found-response.json new file mode 100644 index 0000000000..1a70767beb --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/update-a-pipeline-returns-not-found-response.json @@ -0,0 +1,86 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 404, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Update a pipeline returns \"Not Found\" response", + "operation_id": "UpdatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "pipeline_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "3fa85f64-5717-4562-b3fc-2c963f66afa6" + }, + "style": null + } + ], + "path": "/api/v2/obs-pipelines/pipelines/{pipeline_id}" + }, + "scenario": "Update a pipeline returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/update-a-pipeline-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/update-a-pipeline-returns-ok-response.json new file mode 100644 index 0000000000..6418727908 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/update-a-pipeline-returns-ok-response.json @@ -0,0 +1,86 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Update a pipeline returns \"OK\" response", + "operation_id": "UpdatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipeline", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "updated-datadog-logs-destination-id", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Updated Pipeline Name" + }, + "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "pipeline_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "pipeline.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/obs-pipelines/pipelines/{pipeline_id}" + }, + "scenario": "Update a pipeline returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-a-metrics-pipeline-with-opentelemetry-source-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-a-metrics-pipeline-with-opentelemetry-source-returns-ok-response.json new file mode 100644 index 0000000000..818263fd61 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-a-metrics-pipeline-with-opentelemetry-source-returns-ok-response.json @@ -0,0 +1,69 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate a metrics pipeline with opentelemetry source returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-metrics-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_metrics" + } + ], + "pipeline_type": "metrics", + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "*", + "inputs": [ + "opentelemetry-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "env:production", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "opentelemetry-source", + "type": "opentelemetry" + } + ] + }, + "name": "Metrics OTel Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate a metrics pipeline with opentelemetry source returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-returns-bad-request-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-returns-bad-request-response.json new file mode 100644 index 0000000000..142f10d9b5 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-returns-bad-request-response.json @@ -0,0 +1,67 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 400, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline returns \"Bad Request\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-returns-ok-response.json new file mode 100644 index 0000000000..d4ecccfe43 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-amazon-s3-source-compression-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-amazon-s3-source-compression-returns-ok-response.json new file mode 100644 index 0000000000..a96f4a8999 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-amazon-s3-source-compression-returns-ok-response.json @@ -0,0 +1,70 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with amazon S3 source compression returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "amazon-s3-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "service:my-service", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "compression": "gzip", + "id": "amazon-s3-source", + "region": "us-east-1", + "type": "amazon_s3" + } + ] + }, + "name": "Pipeline with S3 Source Compression" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with amazon S3 source compression returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-arrow-stream-format-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-arrow-stream-format-returns-ok-response.json new file mode 100644 index 0000000000..c4fe62a84a --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-arrow-stream-format-returns-ok-response.json @@ -0,0 +1,85 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with ClickHouse destination arrow_stream format returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "auth": { + "password_key": "CLICKHOUSE_PASSWORD", + "strategy": "basic", + "username_key": "CLICKHOUSE_USERNAME" + }, + "batch": { + "max_events": 1000, + "timeout_secs": 1 + }, + "batch_encoding": { + "allow_nullable_fields": false, + "codec": "arrow_stream" + }, + "compression": "gzip", + "database": "my_database", + "format": "arrow_stream", + "id": "clickhouse-destination", + "inputs": [ + "my-processor-group" + ], + "table": "application_logs", + "type": "clickhouse" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with ClickHouse Destination Arrow Stream" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with ClickHouse destination arrow_stream format returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-returns-ok-response.json new file mode 100644 index 0000000000..c20ed52f9c --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-returns-ok-response.json @@ -0,0 +1,80 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with ClickHouse destination returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "auth": { + "password_key": "CLICKHOUSE_PASSWORD", + "strategy": "basic", + "username_key": "CLICKHOUSE_USERNAME" + }, + "batch": { + "max_events": 1000, + "timeout_secs": 1 + }, + "compression": "gzip", + "database": "my_database", + "id": "clickhouse-destination", + "inputs": [ + "my-processor-group" + ], + "table": "application_logs", + "type": "clickhouse" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with ClickHouse Destination" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with ClickHouse destination returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-with-all-fields-set-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-with-all-fields-set-returns-ok-response.json new file mode 100644 index 0000000000..68d06d6e5f --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-clickhouse-destination-with-all-fields-set-returns-ok-response.json @@ -0,0 +1,102 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with ClickHouse destination with all fields set returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "auth": { + "password_key": "CLICKHOUSE_PASSWORD", + "strategy": "basic", + "username_key": "CLICKHOUSE_USERNAME" + }, + "batch": { + "max_events": 1000, + "timeout_secs": 1 + }, + "batch_encoding": { + "allow_nullable_fields": true, + "codec": "arrow_stream" + }, + "buffer": { + "max_events": 500, + "type": "memory", + "when_full": "block" + }, + "compression": { + "algorithm": "gzip", + "level": 6 + }, + "database": "my_database", + "date_time_best_effort": true, + "endpoint_url_key": "CLICKHOUSE_ENDPOINT_URL", + "format": "arrow_stream", + "id": "clickhouse-destination", + "inputs": [ + "my-processor-group" + ], + "skip_unknown_fields": true, + "table": "application_logs", + "tls": { + "ca_file": "/path/to/ca.crt", + "crt_file": "/path/to/cert.crt", + "key_file": "/path/to/key.key", + "key_pass_key": "TLS_KEY_PASSPHRASE" + }, + "type": "clickhouse" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with ClickHouse Destination All Fields" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with ClickHouse destination with all fields set returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-destination-secret-key-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-destination-secret-key-returns-ok-response.json new file mode 100644 index 0000000000..9d411065ee --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-destination-secret-key-returns-ok-response.json @@ -0,0 +1,69 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with destination secret key returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "endpoint_url_key": "SUMO_LOGIC_ENDPOINT_URL", + "id": "sumo-logic-destination", + "inputs": [ + "my-processor-group" + ], + "type": "sumo_logic" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Secret Key" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with destination secret key returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-enrichment-table-secret-field-lookup-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-enrichment-table-secret-field-lookup-returns-ok-response.json new file mode 100644 index 0000000000..9c803d6af4 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-enrichment-table-secret-field-lookup-returns-ok-response.json @@ -0,0 +1,92 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with enrichment table secret field lookup returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "file": { + "encoding": { + "delimiter": ",", + "includes_headers": true, + "type": "csv" + }, + "key": [ + { + "column": "user_id", + "comparison": "equals", + "field": { + "secret": "LOOKUP_KEY_SECRET" + } + } + ], + "path": "/etc/enrichment/lookup.csv", + "schema": [ + { + "column": "user_id", + "type": "string" + } + ] + }, + "id": "enrichment-processor", + "include": "*", + "target": "enriched", + "type": "enrichment_table" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Enrichment Table Secret Field Lookup" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with enrichment table secret field lookup returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-http-server-source-valid-tokens-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-http-server-source-valid-tokens-returns-ok-response.json new file mode 100644 index 0000000000..66ad03b874 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-http-server-source-valid-tokens-returns-ok-response.json @@ -0,0 +1,88 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with HTTP server source valid_tokens returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "http-server-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "auth_strategy": "none", + "decoding": "json", + "id": "http-server-source", + "type": "http_server", + "valid_tokens": [ + { + "enabled": true, + "field_to_add": { + "key": "token_name", + "value": "primary_token" + }, + "path_to_token": { + "header": "X-Token" + }, + "token_key": "HTTP_SERVER_TOKEN" + }, + { + "enabled": true, + "path_to_token": "path", + "token_key": "HTTP_SERVER_TOKEN_BACKUP" + } + ] + } + ] + }, + "name": "Pipeline with HTTP server valid_tokens" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with HTTP server source valid_tokens returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-custom-mapping-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-custom-mapping-returns-ok-response.json new file mode 100644 index 0000000000..efc713ed6c --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-custom-mapping-returns-ok-response.json @@ -0,0 +1,108 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with OCSF mapper custom mapping returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "ocsf-mapper-processor", + "include": "service:my-service", + "mappings": [ + { + "include": "source:custom", + "mapping": { + "mapping": [ + { + "default": "", + "dest": "time", + "source": "timestamp" + }, + { + "default": "", + "dest": "severity", + "source": "level" + }, + { + "default": "", + "dest": "device.type", + "lookup": { + "table": [ + { + "contains": "Desktop", + "value": "desktop" + } + ] + }, + "source": "host.type" + } + ], + "metadata": { + "class": "Device Inventory Info", + "profiles": [ + "container" + ], + "version": "1.3.0" + }, + "version": 1 + } + } + ], + "type": "ocsf_mapper" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "OCSF Custom Mapper Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with OCSF mapper custom mapping returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-invalid-custom-mapping-returns-bad-request-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-invalid-custom-mapping-returns-bad-request-response.json new file mode 100644 index 0000000000..6cdf475edf --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-invalid-custom-mapping-returns-bad-request-response.json @@ -0,0 +1,89 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 400, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with OCSF mapper invalid custom mapping returns \"Bad Request\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "ocsf-mapper-processor", + "include": "service:my-service", + "mappings": [ + { + "include": "source:custom", + "mapping": { + "mapping": [ + { + "dest": "time", + "source": "timestamp" + } + ], + "metadata": { + "class": "Invalid Class", + "profiles": [ + "container" + ], + "version": "1.3.0" + }, + "version": 0 + } + } + ], + "type": "ocsf_mapper" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "OCSF Invalid Mapper Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with OCSF mapper invalid custom mapping returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-keep-unmatched-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-keep-unmatched-returns-ok-response.json new file mode 100644 index 0000000000..9d1c396ca9 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-keep-unmatched-returns-ok-response.json @@ -0,0 +1,75 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with OCSF mapper keep_unmatched returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "ocsf-mapper-processor", + "include": "service:my-service", + "keep_unmatched": true, + "mappings": [ + { + "include": "source:cloudtrail", + "mapping": "CloudTrail Account Change" + } + ], + "type": "ocsf_mapper" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "OCSF Mapper Keep Unmatched Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with OCSF mapper keep_unmatched returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-library-mapping-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-library-mapping-returns-ok-response.json new file mode 100644 index 0000000000..4a1f27f4e5 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-ocsf-mapper-library-mapping-returns-ok-response.json @@ -0,0 +1,74 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with OCSF mapper library mapping returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "ocsf-mapper-processor", + "include": "service:my-service", + "mappings": [ + { + "include": "source:cloudtrail", + "mapping": "CloudTrail Account Change" + } + ], + "type": "ocsf_mapper" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "OCSF Mapper Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with OCSF mapper library mapping returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-parse-grok-processor-include-rules-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-parse-grok-processor-include-rules-returns-ok-response.json new file mode 100644 index 0000000000..ec678b7264 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-parse-grok-processor-include-rules-returns-ok-response.json @@ -0,0 +1,80 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with parse grok processor include rules returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "field": "content", + "id": "parse-grok-processor", + "include": "*", + "rules": [ + { + "include": "service:foo", + "match_rules": [ + { + "name": "MyParsingRule", + "rule": "%{word:user}" + } + ] + } + ], + "type": "parse_grok" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Parse Grok Include Rules" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with parse grok processor include rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-parse-grok-processor-source-rules-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-parse-grok-processor-source-rules-returns-ok-response.json new file mode 100644 index 0000000000..3e42003469 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-parse-grok-processor-source-rules-returns-ok-response.json @@ -0,0 +1,79 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with parse grok processor source rules returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "parse-grok-processor", + "include": "*", + "rules": [ + { + "match_rules": [ + { + "name": "MyParsingRule", + "rule": "%{word:user}" + } + ], + "source": "message" + } + ], + "type": "parse_grok" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Parse Grok Source Rules" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with parse grok processor source rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-source-secret-key-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-source-secret-key-returns-ok-response.json new file mode 100644 index 0000000000..dce8bb856c --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-source-secret-key-returns-ok-response.json @@ -0,0 +1,73 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with source secret key returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "http-client-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "auth_strategy": "bearer", + "decoding": "bytes", + "id": "http-client-source", + "scrape_interval_secs": 15, + "scrape_timeout_secs": 5, + "token_key": "HTTP_CLIENT_TOKEN", + "type": "http_client" + } + ] + }, + "name": "Pipeline with Source Secret" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with source secret key returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-destination-token-strategy-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-destination-token-strategy-returns-ok-response.json new file mode 100644 index 0000000000..7cf4a1f3b2 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-destination-token-strategy-returns-ok-response.json @@ -0,0 +1,70 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with Splunk HEC destination token_strategy returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "splunk-hec-destination", + "inputs": [ + "my-processor-group" + ], + "token_key": "SPLUNK_HEC_TOKEN", + "token_strategy": "custom", + "type": "splunk_hec" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Splunk HEC token_strategy" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with Splunk HEC destination token_strategy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-source-store-hec-token-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-source-store-hec-token-returns-ok-response.json new file mode 100644 index 0000000000..9632d0ca23 --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-source-store-hec-token-returns-ok-response.json @@ -0,0 +1,69 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with Splunk HEC source store_hec_token returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "splunk-hec-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "splunk-hec-source", + "store_hec_token": true, + "type": "splunk_hec" + } + ] + }, + "name": "Pipeline with Splunk HEC store_hec_token" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with Splunk HEC source store_hec_token returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-source-valid-tokens-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-source-valid-tokens-returns-ok-response.json new file mode 100644 index 0000000000..57d417f0cb --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-splunk-hec-source-valid-tokens-returns-ok-response.json @@ -0,0 +1,82 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with Splunk HEC source valid_tokens returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "splunk-hec-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "splunk-hec-source", + "type": "splunk_hec", + "valid_tokens": [ + { + "enabled": true, + "field_to_add": { + "key": "token_name", + "value": "primary_token" + }, + "token_key": "SPLUNK_HEC_TOKEN" + }, + { + "enabled": false, + "token_key": "SPLUNK_HEC_TOKEN_BACKUP" + } + ] + } + ] + }, + "name": "Pipeline with Splunk HEC valid_tokens" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with Splunk HEC source valid_tokens returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-websocket-source-bearer-auth-returns-ok-response.json b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-websocket-source-bearer-auth-returns-ok-response.json new file mode 100644 index 0000000000..3ac4e4550f --- /dev/null +++ b/test-runner-data/v2/observability-pipelines/validate-an-observability-pipeline-with-websocket-source-bearer-auth-returns-ok-response.json @@ -0,0 +1,75 @@ +{ + "api": "ObservabilityPipelines", + "expected_status": 200, + "feature": "Observability Pipelines", + "id": "v2/Observability Pipelines/Validate an observability pipeline with websocket source bearer auth returns \"OK\" response", + "operation_id": "ValidatePipeline", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ObservabilityPipelineSpec", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "websocket-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "auth_strategy": "bearer", + "decoding": "json", + "id": "websocket-source", + "tls": { + "mode": "enabled" + }, + "token_key": "WS_BEARER_TOKEN", + "type": "websocket", + "uri_key": "WS_URI" + } + ] + }, + "name": "Pipeline with WebSocket Source" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/obs-pipelines/pipelines/validate" + }, + "scenario": "Validate an observability pipeline with websocket source bearer auth returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/okta-integration/add-okta-account-returns-ok-response.json b/test-runner-data/v2/okta-integration/add-okta-account-returns-ok-response.json new file mode 100644 index 0000000000..322b87e34f --- /dev/null +++ b/test-runner-data/v2/okta-integration/add-okta-account-returns-ok-response.json @@ -0,0 +1,38 @@ +{ + "api": "OktaIntegration", + "expected_status": 201, + "feature": "Okta Integration", + "id": "v2/Okta Integration/Add Okta account returns \"OK\" response", + "operation_id": "CreateOktaAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OktaAccountRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "auth_method": "oauth", + "client_id": "client_id", + "client_secret": "client_secret", + "domain": "https://example.okta.com/", + "name": "{{ unique_lower_alnum }}" + }, + "id": "f749daaf-682e-4208-a38d-c9b43162c609", + "type": "okta-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations/okta/accounts" + }, + "scenario": "Add Okta account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/okta-integration/get-okta-account-returns-ok-response.json b/test-runner-data/v2/okta-integration/get-okta-account-returns-ok-response.json new file mode 100644 index 0000000000..35fc264d77 --- /dev/null +++ b/test-runner-data/v2/okta-integration/get-okta-account-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "OktaIntegration", + "expected_status": 200, + "feature": "Okta Integration", + "id": "v2/Okta Integration/Get Okta account returns \"OK\" response", + "operation_id": "GetOktaAccount", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "okta_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/okta/accounts/{account_id}" + }, + "scenario": "Get Okta account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/okta-integration/list-okta-accounts-returns-ok-response.json b/test-runner-data/v2/okta-integration/list-okta-accounts-returns-ok-response.json new file mode 100644 index 0000000000..99479e527f --- /dev/null +++ b/test-runner-data/v2/okta-integration/list-okta-accounts-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "OktaIntegration", + "expected_status": 200, + "feature": "Okta Integration", + "id": "v2/Okta Integration/List Okta accounts returns \"OK\" response", + "operation_id": "ListOktaAccounts", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integrations/okta/accounts" + }, + "scenario": "List Okta accounts returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/okta-integration/update-okta-account-returns-ok-response.json b/test-runner-data/v2/okta-integration/update-okta-account-returns-ok-response.json new file mode 100644 index 0000000000..a8bc68fbb0 --- /dev/null +++ b/test-runner-data/v2/okta-integration/update-okta-account-returns-ok-response.json @@ -0,0 +1,53 @@ +{ + "api": "OktaIntegration", + "expected_status": 200, + "feature": "Okta Integration", + "id": "v2/Okta Integration/Update Okta account returns \"OK\" response", + "operation_id": "UpdateOktaAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OktaAccountUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "auth_method": "oauth", + "client_id": "client_id", + "client_secret": "client_secret", + "domain": "https://example.okta.com/" + }, + "type": "okta-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "okta_account.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integrations/okta/accounts/{account_id}" + }, + "scenario": "Update Okta account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/create-an-on-call-notification-channel-for-a-user-returns-created-response.json b/test-runner-data/v2/on-call/create-an-on-call-notification-channel-for-a-user-returns-created-response.json new file mode 100644 index 0000000000..70da3795c9 --- /dev/null +++ b/test-runner-data/v2/on-call/create-an-on-call-notification-channel-for-a-user-returns-created-response.json @@ -0,0 +1,56 @@ +{ + "api": "On-Call", + "expected_status": 201, + "feature": "On-Call", + "id": "v2/On-Call/Create an On-Call notification channel for a user returns \"Created\" response", + "operation_id": "CreateUserNotificationChannel", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateUserNotificationChannelRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "address": "foo@bar.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/users/{user_id}/notification-channels" + }, + "scenario": "Create an On-Call notification channel for a user returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/create-an-on-call-notification-rule-for-a-user-returns-created-response.json b/test-runner-data/v2/on-call/create-an-on-call-notification-rule-for-a-user-returns-created-response.json new file mode 100644 index 0000000000..980bca462b --- /dev/null +++ b/test-runner-data/v2/on-call/create-an-on-call-notification-rule-for-a-user-returns-created-response.json @@ -0,0 +1,59 @@ +{ + "api": "On-Call", + "expected_status": 201, + "feature": "On-Call", + "id": "v2/On-Call/Create an On-Call notification rule for a user returns \"Created\" response", + "operation_id": "CreateUserNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateOnCallNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "category": "high_urgency", + "delay_minutes": 0 + }, + "relationships": { + "channel": { + "data": { + "id": "{{ oncall_email_notification_channel.data.id }}", + "type": "notification_channels" + } + } + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/users/{user_id}/notification-rules" + }, + "scenario": "Create an On-Call notification rule for a user returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/create-on-call-escalation-policy-returns-created-response.json b/test-runner-data/v2/on-call/create-on-call-escalation-policy-returns-created-response.json new file mode 100644 index 0000000000..7a20dada5e --- /dev/null +++ b/test-runner-data/v2/on-call/create-on-call-escalation-policy-returns-created-response.json @@ -0,0 +1,101 @@ +{ + "api": "On-Call", + "expected_status": 201, + "feature": "On-Call", + "id": "v2/On-Call/Create On-Call escalation policy returns \"Created\" response", + "operation_id": "CreateOnCallEscalationPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EscalationPolicyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}", + "resolve_page_on_policy_end": true, + "retries": 2, + "steps": [ + { + "assignment": "default", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "{{ user.data.id }}", + "type": "users" + }, + { + "id": "{{ schedule.data.id }}", + "type": "schedules" + }, + { + "config": { + "schedule": { + "position": "previous" + } + }, + "id": "{{ schedule.data.id }}", + "type": "schedules" + }, + { + "id": "{{ dd_team.data.id }}", + "type": "teams" + } + ] + }, + { + "assignment": "round-robin", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "{{ dd_team.data.id }}", + "type": "teams" + } + ] + } + ] + }, + "relationships": { + "teams": { + "data": [ + { + "id": "{{ dd_team.data.id }}", + "type": "teams" + } + ] + } + }, + "type": "policies" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "include", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "steps.targets" + }, + "style": null + } + ], + "path": "/api/v2/on-call/escalation-policies" + }, + "scenario": "Create On-Call escalation policy returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/create-on-call-schedule-returns-created-response.json b/test-runner-data/v2/on-call/create-on-call-schedule-returns-created-response.json new file mode 100644 index 0000000000..96862ade34 --- /dev/null +++ b/test-runner-data/v2/on-call/create-on-call-schedule-returns-created-response.json @@ -0,0 +1,70 @@ +{ + "api": "On-Call", + "expected_status": 201, + "feature": "On-Call", + "id": "v2/On-Call/Create On-Call schedule returns \"Created\" response", + "operation_id": "CreateOnCallSchedule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScheduleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "{{ timeISO('now - 10d') }}", + "end_date": "{{ timeISO('now + 10d') }}", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "{{user.data.id}}" + } + } + ], + "name": "Layer 1", + "restrictions": [ + { + "end_day": "friday", + "end_time": "17:00:00", + "start_day": "monday", + "start_time": "09:00:00" + } + ], + "rotation_start": "{{ timeISO('now - 5d') }}" + } + ], + "name": "{{ unique }}", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "{{dd_team.data.id}}", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/on-call/schedules" + }, + "scenario": "Create On-Call schedule returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/delete-an-on-call-notification-channel-for-a-user-returns-no-content-response.json b/test-runner-data/v2/on-call/delete-an-on-call-notification-channel-for-a-user-returns-no-content-response.json new file mode 100644 index 0000000000..ed9fd50172 --- /dev/null +++ b/test-runner-data/v2/on-call/delete-an-on-call-notification-channel-for-a-user-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "On-Call", + "expected_status": 204, + "feature": "On-Call", + "id": "v2/On-Call/Delete an On-Call notification channel for a user returns \"No Content\" response", + "operation_id": "DeleteUserNotificationChannel", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "channel_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "oncall_email_notification_channel.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/users/{user_id}/notification-channels/{channel_id}" + }, + "scenario": "Delete an On-Call notification channel for a user returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/delete-an-on-call-notification-rule-for-a-user-returns-no-content-response.json b/test-runner-data/v2/on-call/delete-an-on-call-notification-rule-for-a-user-returns-no-content-response.json new file mode 100644 index 0000000000..2d48ed838f --- /dev/null +++ b/test-runner-data/v2/on-call/delete-an-on-call-notification-rule-for-a-user-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "On-Call", + "expected_status": 204, + "feature": "On-Call", + "id": "v2/On-Call/Delete an On-Call notification rule for a user returns \"No Content\" response", + "operation_id": "DeleteUserNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "oncall_email_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/users/{user_id}/notification-rules/{rule_id}" + }, + "scenario": "Delete an On-Call notification rule for a user returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/delete-on-call-escalation-policy-returns-no-content-response.json b/test-runner-data/v2/on-call/delete-on-call-escalation-policy-returns-no-content-response.json new file mode 100644 index 0000000000..e09bd468b0 --- /dev/null +++ b/test-runner-data/v2/on-call/delete-on-call-escalation-policy-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "On-Call", + "expected_status": 204, + "feature": "On-Call", + "id": "v2/On-Call/Delete On-Call escalation policy returns \"No Content\" response", + "operation_id": "DeleteOnCallEscalationPolicy", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "escalation_policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/escalation-policies/{policy_id}" + }, + "scenario": "Delete On-Call escalation policy returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/delete-on-call-schedule-returns-no-content-response.json b/test-runner-data/v2/on-call/delete-on-call-schedule-returns-no-content-response.json new file mode 100644 index 0000000000..d7c1b60746 --- /dev/null +++ b/test-runner-data/v2/on-call/delete-on-call-schedule-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "On-Call", + "expected_status": 204, + "feature": "On-Call", + "id": "v2/On-Call/Delete On-Call schedule returns \"No Content\" response", + "operation_id": "DeleteOnCallSchedule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "schedule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "schedule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/schedules/{schedule_id}" + }, + "scenario": "Delete On-Call schedule returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/get-an-on-call-notification-channel-for-a-user-returns-ok-response.json b/test-runner-data/v2/on-call/get-an-on-call-notification-channel-for-a-user-returns-ok-response.json new file mode 100644 index 0000000000..3fdaa45a6e --- /dev/null +++ b/test-runner-data/v2/on-call/get-an-on-call-notification-channel-for-a-user-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Get an On-Call notification channel for a user returns \"OK\" response", + "operation_id": "GetUserNotificationChannel", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "channel_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "oncall_email_notification_channel.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/users/{user_id}/notification-channels/{channel_id}" + }, + "scenario": "Get an On-Call notification channel for a user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/get-an-on-call-notification-rule-for-a-user-returns-ok-response.json b/test-runner-data/v2/on-call/get-an-on-call-notification-rule-for-a-user-returns-ok-response.json new file mode 100644 index 0000000000..d11fdf7db5 --- /dev/null +++ b/test-runner-data/v2/on-call/get-an-on-call-notification-rule-for-a-user-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Get an On-Call notification rule for a user returns \"OK\" response", + "operation_id": "GetUserNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "oncall_email_notification_rule.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "include", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "channel" + }, + "style": null + } + ], + "path": "/api/v2/on-call/users/{user_id}/notification-rules/{rule_id}" + }, + "scenario": "Get an On-Call notification rule for a user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/get-on-call-escalation-policy-returns-ok-response.json b/test-runner-data/v2/on-call/get-on-call-escalation-policy-returns-ok-response.json new file mode 100644 index 0000000000..cc32f0e514 --- /dev/null +++ b/test-runner-data/v2/on-call/get-on-call-escalation-policy-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Get On-Call escalation policy returns \"OK\" response", + "operation_id": "GetOnCallEscalationPolicy", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "escalation_policy.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "include", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "steps.targets" + }, + "style": null + } + ], + "path": "/api/v2/on-call/escalation-policies/{policy_id}" + }, + "scenario": "Get On-Call escalation policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/get-on-call-responders-for-a-schedule-returns-ok-response.json b/test-runner-data/v2/on-call/get-on-call-responders-for-a-schedule-returns-ok-response.json new file mode 100644 index 0000000000..adf8fa4382 --- /dev/null +++ b/test-runner-data/v2/on-call/get-on-call-responders-for-a-schedule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Get on-call responders for a schedule returns \"OK\" response", + "operation_id": "GetScheduleOnCallResponders", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "schedule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "schedule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/schedules/{schedule_id}/responders" + }, + "scenario": "Get on-call responders for a schedule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/get-on-call-schedule-returns-ok-response.json b/test-runner-data/v2/on-call/get-on-call-schedule-returns-ok-response.json new file mode 100644 index 0000000000..7474f51db4 --- /dev/null +++ b/test-runner-data/v2/on-call/get-on-call-schedule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Get On-Call schedule returns \"OK\" response", + "operation_id": "GetOnCallSchedule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "schedule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "schedule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/schedules/{schedule_id}" + }, + "scenario": "Get On-Call schedule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/get-scheduled-on-call-user-returns-ok-response.json b/test-runner-data/v2/on-call/get-scheduled-on-call-user-returns-ok-response.json new file mode 100644 index 0000000000..a7e4eca71e --- /dev/null +++ b/test-runner-data/v2/on-call/get-scheduled-on-call-user-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Get scheduled on-call user returns \"OK\" response", + "operation_id": "GetScheduleOnCallUser", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "schedule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "schedule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/schedules/{schedule_id}/on-call" + }, + "scenario": "Get scheduled on-call user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/get-team-on-call-users-returns-ok-response.json b/test-runner-data/v2/on-call/get-team-on-call-users-returns-ok-response.json new file mode 100644 index 0000000000..a53b90db6b --- /dev/null +++ b/test-runner-data/v2/on-call/get-team-on-call-users-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Get team on-call users returns \"OK\" response", + "operation_id": "GetTeamOnCallUsers", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "routing_rules.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "include", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "responders,escalations.responders" + }, + "style": null + } + ], + "path": "/api/v2/on-call/teams/{team_id}/on-call" + }, + "scenario": "Get team on-call users returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/list-on-call-notification-channels-for-a-user-returns-ok-response.json b/test-runner-data/v2/on-call/list-on-call-notification-channels-for-a-user-returns-ok-response.json new file mode 100644 index 0000000000..9b63a41004 --- /dev/null +++ b/test-runner-data/v2/on-call/list-on-call-notification-channels-for-a-user-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/List On-Call notification channels for a user returns \"OK\" response", + "operation_id": "ListUserNotificationChannels", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/users/{user_id}/notification-channels" + }, + "scenario": "List On-Call notification channels for a user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/list-on-call-notification-rules-for-a-user-returns-ok-response.json b/test-runner-data/v2/on-call/list-on-call-notification-rules-for-a-user-returns-ok-response.json new file mode 100644 index 0000000000..87316e451f --- /dev/null +++ b/test-runner-data/v2/on-call/list-on-call-notification-rules-for-a-user-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/List On-Call notification rules for a user returns \"OK\" response", + "operation_id": "ListUserNotificationRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "include", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "channel" + }, + "style": null + } + ], + "path": "/api/v2/on-call/users/{user_id}/notification-rules" + }, + "scenario": "List On-Call notification rules for a user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/set-on-call-team-routing-rules-returns-ok-response.json b/test-runner-data/v2/on-call/set-on-call-team-routing-rules-returns-ok-response.json new file mode 100644 index 0000000000..76104582f3 --- /dev/null +++ b/test-runner-data/v2/on-call/set-on-call-team-routing-rules-returns-ok-response.json @@ -0,0 +1,138 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Set On-Call team routing rules returns \"OK\" response", + "operation_id": "SetOnCallTeamRoutingRules", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamRoutingRulesRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "rules": [ + { + "actions": [ + { + "policy_id": "{{ escalation_policy.data.id }}", + "type": "escalation_policy", + "urgency": "low" + } + ], + "query": "tags.service:time_restrictions", + "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" + } + }, + { + "actions": [ + { + "ack_timeout_minutes": 30, + "policy_id": "{{ escalation_policy.data.id }}", + "support_hours": { + "restrictions": [ + { + "end_day": "wednesday", + "end_time": "17:00:00", + "start_day": "wednesday", + "start_time": "09:00:00" + }, + { + "end_day": "thursday", + "end_time": "17:00:00", + "start_day": "thursday", + "start_time": "09:00:00" + } + ], + "time_zone": "Europe/Paris" + }, + "type": "escalation_policy", + "urgency": "low" + } + ], + "query": "tags.service:support_hours_and_acknowledgment_timeout" + }, + { + "policy_id": "{{ escalation_policy.data.id }}", + "query": "tags.service:legacy_policy_definition", + "urgency": "low" + }, + { + "actions": [ + { + "policy_id": "{{ escalation_policy.data.id }}", + "type": "escalation_policy", + "urgency": "low" + } + ], + "query": "" + } + ] + }, + "id": "{{ dd_team.data.id }}", + "type": "team_routing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "include", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "rules" + }, + "style": null + } + ], + "path": "/api/v2/on-call/teams/{team_id}/routing-rules" + }, + "scenario": "Set On-Call team routing rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/update-an-on-call-notification-rule-for-a-user-returns-ok-response.json b/test-runner-data/v2/on-call/update-an-on-call-notification-rule-for-a-user-returns-ok-response.json new file mode 100644 index 0000000000..995f02bf6d --- /dev/null +++ b/test-runner-data/v2/on-call/update-an-on-call-notification-rule-for-a-user-returns-ok-response.json @@ -0,0 +1,92 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Update an On-Call notification rule for a user returns \"OK\" response", + "operation_id": "UpdateUserNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateOnCallNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "category": "high_urgency", + "delay_minutes": 1 + }, + "id": "{{ oncall_email_notification_rule.data.id }}", + "relationships": { + "channel": { + "data": { + "id": "{{ oncall_email_notification_channel.data.id }}", + "type": "notification_channels" + } + } + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "oncall_email_notification_rule.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "include", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "channel" + }, + "style": null + } + ], + "path": "/api/v2/on-call/users/{user_id}/notification-rules/{rule_id}" + }, + "scenario": "Update an On-Call notification rule for a user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/update-on-call-escalation-policy-returns-ok-response.json b/test-runner-data/v2/on-call/update-on-call-escalation-policy-returns-ok-response.json new file mode 100644 index 0000000000..ecfbec2d97 --- /dev/null +++ b/test-runner-data/v2/on-call/update-on-call-escalation-policy-returns-ok-response.json @@ -0,0 +1,76 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Update On-Call escalation policy returns \"OK\" response", + "operation_id": "UpdateOnCallEscalationPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "EscalationPolicyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}-updated", + "resolve_page_on_policy_end": false, + "retries": 0, + "steps": [ + { + "assignment": "default", + "escalate_after_seconds": 3600, + "id": "{{ escalation_policy.data.relationships.steps.data[0].id }}", + "targets": [ + { + "id": "{{ user.data.id }}", + "type": "users" + } + ] + } + ] + }, + "id": "{{ escalation_policy.data.id }}", + "relationships": { + "teams": { + "data": [ + { + "id": "{{ dd_team.data.id }}", + "type": "teams" + } + ] + } + }, + "type": "policies" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "policy_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "escalation_policy.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/escalation-policies/{policy_id}" + }, + "scenario": "Update On-Call escalation policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/on-call/update-on-call-schedule-returns-ok-response.json b/test-runner-data/v2/on-call/update-on-call-schedule-returns-ok-response.json new file mode 100644 index 0000000000..442e2c1f57 --- /dev/null +++ b/test-runner-data/v2/on-call/update-on-call-schedule-returns-ok-response.json @@ -0,0 +1,89 @@ +{ + "api": "On-Call", + "expected_status": 200, + "feature": "On-Call", + "id": "v2/On-Call/Update On-Call schedule returns \"OK\" response", + "operation_id": "UpdateOnCallSchedule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ScheduleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "{{ timeISO('now - 10d') }}", + "end_date": "{{ timeISO('now + 10d') }}", + "id": "{{ schedule.data.relationships.layers.data[0].id }}", + "interval": { + "seconds": 3600 + }, + "members": [ + { + "user": { + "id": "{{user.data.id}}" + } + } + ], + "name": "Layer 1", + "restrictions": [ + { + "end_day": "friday", + "end_time": "17:00:00", + "start_day": "monday", + "start_time": "09:00:00" + } + ], + "rotation_start": "{{ timeISO('now - 5d') }}" + } + ], + "name": "{{ unique }}", + "time_zone": "America/New_York" + }, + "id": "{{ schedule.data.id }}", + "relationships": { + "teams": { + "data": [ + { + "id": "{{dd_team.data.id}}", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "schedule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "schedule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/on-call/schedules/{schedule_id}" + }, + "scenario": "Update On-Call schedule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/opsgenie-integration/create-a-new-service-object-returns-created-response.json b/test-runner-data/v2/opsgenie-integration/create-a-new-service-object-returns-created-response.json new file mode 100644 index 0000000000..6505930ee3 --- /dev/null +++ b/test-runner-data/v2/opsgenie-integration/create-a-new-service-object-returns-created-response.json @@ -0,0 +1,35 @@ +{ + "api": "OpsgenieIntegration", + "expected_status": 201, + "feature": "Opsgenie Integration", + "id": "v2/Opsgenie Integration/Create a new service object returns \"CREATED\" response", + "operation_id": "CreateOpsgenieService", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OpsgenieServiceCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{unique}}", + "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", + "region": "us" + }, + "type": "opsgenie-service" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/opsgenie/services" + }, + "scenario": "Create a new service object returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/opsgenie-integration/delete-a-single-service-object-returns-ok-response.json b/test-runner-data/v2/opsgenie-integration/delete-a-single-service-object-returns-ok-response.json new file mode 100644 index 0000000000..d85ab0d0f2 --- /dev/null +++ b/test-runner-data/v2/opsgenie-integration/delete-a-single-service-object-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "OpsgenieIntegration", + "expected_status": 204, + "feature": "Opsgenie Integration", + "id": "v2/Opsgenie Integration/Delete a single service object returns \"OK\" response", + "operation_id": "DeleteOpsgenieService", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "integration_service_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "opsgenie_service.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/opsgenie/services/{integration_service_id}" + }, + "scenario": "Delete a single service object returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/opsgenie-integration/get-a-single-service-object-returns-ok-response.json b/test-runner-data/v2/opsgenie-integration/get-a-single-service-object-returns-ok-response.json new file mode 100644 index 0000000000..22f3e7c6ff --- /dev/null +++ b/test-runner-data/v2/opsgenie-integration/get-a-single-service-object-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "OpsgenieIntegration", + "expected_status": 200, + "feature": "Opsgenie Integration", + "id": "v2/Opsgenie Integration/Get a single service object returns \"OK\" response", + "operation_id": "GetOpsgenieService", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "integration_service_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "opsgenie_service.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/opsgenie/services/{integration_service_id}" + }, + "scenario": "Get a single service object returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/opsgenie-integration/get-all-service-objects-returns-ok-response.json b/test-runner-data/v2/opsgenie-integration/get-all-service-objects-returns-ok-response.json new file mode 100644 index 0000000000..437312c05a --- /dev/null +++ b/test-runner-data/v2/opsgenie-integration/get-all-service-objects-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "OpsgenieIntegration", + "expected_status": 200, + "feature": "Opsgenie Integration", + "id": "v2/Opsgenie Integration/Get all service objects returns \"OK\" response", + "operation_id": "ListOpsgenieServices", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/integration/opsgenie/services" + }, + "scenario": "Get all service objects returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/opsgenie-integration/update-a-single-service-object-returns-ok-response.json b/test-runner-data/v2/opsgenie-integration/update-a-single-service-object-returns-ok-response.json new file mode 100644 index 0000000000..e5fa39cd8a --- /dev/null +++ b/test-runner-data/v2/opsgenie-integration/update-a-single-service-object-returns-ok-response.json @@ -0,0 +1,53 @@ +{ + "api": "OpsgenieIntegration", + "expected_status": 200, + "feature": "Opsgenie Integration", + "id": "v2/Opsgenie Integration/Update a single service object returns \"OK\" response", + "operation_id": "UpdateOpsgenieService", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OpsgenieServiceUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ opsgenie_service.data.attributes.name }}--updated", + "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", + "region": "eu" + }, + "id": "{{opsgenie_service.data.id}}", + "type": "opsgenie-service" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "integration_service_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "opsgenie_service.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/integration/opsgenie/services/{integration_service_id}" + }, + "scenario": "Update a single service object returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/create-org-connection-returns-bad-request-response.json b/test-runner-data/v2/org-connections/create-org-connection-returns-bad-request-response.json new file mode 100644 index 0000000000..a381610c4c --- /dev/null +++ b/test-runner-data/v2/org-connections/create-org-connection-returns-bad-request-response.json @@ -0,0 +1,44 @@ +{ + "api": "OrgConnections", + "expected_status": 400, + "feature": "Org Connections", + "id": "v2/Org Connections/Create Org Connection returns \"Bad Request\" response", + "operation_id": "CreateOrgConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConnectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs", + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/org_connections" + }, + "scenario": "Create Org Connection returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/create-org-connection-returns-conflict-response.json b/test-runner-data/v2/org-connections/create-org-connection-returns-conflict-response.json new file mode 100644 index 0000000000..017b46899b --- /dev/null +++ b/test-runner-data/v2/org-connections/create-org-connection-returns-conflict-response.json @@ -0,0 +1,43 @@ +{ + "api": "OrgConnections", + "expected_status": 409, + "feature": "Org Connections", + "id": "v2/Org Connections/Create Org Connection returns \"Conflict\" response", + "operation_id": "CreateOrgConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConnectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/org_connections" + }, + "scenario": "Create Org Connection returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/create-org-connection-returns-not-found-response.json b/test-runner-data/v2/org-connections/create-org-connection-returns-not-found-response.json new file mode 100644 index 0000000000..e55f260590 --- /dev/null +++ b/test-runner-data/v2/org-connections/create-org-connection-returns-not-found-response.json @@ -0,0 +1,43 @@ +{ + "api": "OrgConnections", + "expected_status": 404, + "feature": "Org Connections", + "id": "v2/Org Connections/Create Org Connection returns \"Not Found\" response", + "operation_id": "CreateOrgConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConnectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "nonexistent-org-id", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/org_connections" + }, + "scenario": "Create Org Connection returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/create-org-connection-returns-ok-response.json b/test-runner-data/v2/org-connections/create-org-connection-returns-ok-response.json new file mode 100644 index 0000000000..f21e026885 --- /dev/null +++ b/test-runner-data/v2/org-connections/create-org-connection-returns-ok-response.json @@ -0,0 +1,43 @@ +{ + "api": "OrgConnections", + "expected_status": 200, + "feature": "Org Connections", + "id": "v2/Org Connections/Create Org Connection returns \"OK\" response", + "operation_id": "CreateOrgConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConnectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/org_connections" + }, + "scenario": "Create Org Connection returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/delete-org-connection-returns-bad-request-response.json b/test-runner-data/v2/org-connections/delete-org-connection-returns-bad-request-response.json new file mode 100644 index 0000000000..1ea192a418 --- /dev/null +++ b/test-runner-data/v2/org-connections/delete-org-connection-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "OrgConnections", + "expected_status": 400, + "feature": "Org Connections", + "id": "v2/Org Connections/Delete Org Connection returns \"Bad Request\" response", + "operation_id": "DeleteOrgConnections", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed_id" + }, + "style": null + } + ], + "path": "/api/v2/org_connections/{connection_id}" + }, + "scenario": "Delete Org Connection returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/delete-org-connection-returns-not-found-response.json b/test-runner-data/v2/org-connections/delete-org-connection-returns-not-found-response.json new file mode 100644 index 0000000000..0f24d80f39 --- /dev/null +++ b/test-runner-data/v2/org-connections/delete-org-connection-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "OrgConnections", + "expected_status": 404, + "feature": "Org Connections", + "id": "v2/Org Connections/Delete Org Connection returns \"Not Found\" response", + "operation_id": "DeleteOrgConnections", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/org_connections/{connection_id}" + }, + "scenario": "Delete Org Connection returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/delete-org-connection-returns-ok-response.json b/test-runner-data/v2/org-connections/delete-org-connection-returns-ok-response.json new file mode 100644 index 0000000000..8aaf318a41 --- /dev/null +++ b/test-runner-data/v2/org-connections/delete-org-connection-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "OrgConnections", + "expected_status": 200, + "feature": "Org Connections", + "id": "v2/Org Connections/Delete Org Connection returns \"OK\" response", + "operation_id": "DeleteOrgConnections", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "org_connection.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/org_connections/{connection_id}" + }, + "scenario": "Delete Org Connection returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/list-org-connections-returns-ok-response.json b/test-runner-data/v2/org-connections/list-org-connections-returns-ok-response.json new file mode 100644 index 0000000000..276919feb9 --- /dev/null +++ b/test-runner-data/v2/org-connections/list-org-connections-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "OrgConnections", + "expected_status": 200, + "feature": "Org Connections", + "id": "v2/Org Connections/List Org Connections returns \"OK\" response", + "operation_id": "ListOrgConnections", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/org_connections" + }, + "scenario": "List Org Connections returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/update-org-connection-returns-bad-request-response.json b/test-runner-data/v2/org-connections/update-org-connection-returns-bad-request-response.json new file mode 100644 index 0000000000..a0625aa6be --- /dev/null +++ b/test-runner-data/v2/org-connections/update-org-connection-returns-bad-request-response.json @@ -0,0 +1,54 @@ +{ + "api": "OrgConnections", + "expected_status": 400, + "feature": "Org Connections", + "id": "v2/Org Connections/Update Org Connection returns \"Bad Request\" response", + "operation_id": "UpdateOrgConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConnectionUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs", + "logs" + ] + }, + "id": "{{ org_connection.data.id }}", + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "org_connection.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/org_connections/{connection_id}" + }, + "scenario": "Update Org Connection returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/update-org-connection-returns-not-found-response.json b/test-runner-data/v2/org-connections/update-org-connection-returns-not-found-response.json new file mode 100644 index 0000000000..de46d544ac --- /dev/null +++ b/test-runner-data/v2/org-connections/update-org-connection-returns-not-found-response.json @@ -0,0 +1,54 @@ +{ + "api": "OrgConnections", + "expected_status": 404, + "feature": "Org Connections", + "id": "v2/Org Connections/Update Org Connection returns \"Not Found\" response", + "operation_id": "UpdateOrgConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConnectionUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs", + "metrics" + ] + }, + "id": "00000000-0000-0000-0000-000000000000", + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/org_connections/{connection_id}" + }, + "scenario": "Update Org Connection returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/org-connections/update-org-connection-returns-ok-response.json b/test-runner-data/v2/org-connections/update-org-connection-returns-ok-response.json new file mode 100644 index 0000000000..ce82589751 --- /dev/null +++ b/test-runner-data/v2/org-connections/update-org-connection-returns-ok-response.json @@ -0,0 +1,54 @@ +{ + "api": "OrgConnections", + "expected_status": 200, + "feature": "Org Connections", + "id": "v2/Org Connections/Update Org Connection returns \"OK\" response", + "operation_id": "UpdateOrgConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConnectionUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs", + "metrics" + ] + }, + "id": "{{ org_connection.data.id }}", + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "connection_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "org_connection.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/org_connections/{connection_id}" + }, + "scenario": "Update Org Connection returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/organizations/get-a-specific-org-config-value-returns-not-found-response.json b/test-runner-data/v2/organizations/get-a-specific-org-config-value-returns-not-found-response.json new file mode 100644 index 0000000000..e32e446bfb --- /dev/null +++ b/test-runner-data/v2/organizations/get-a-specific-org-config-value-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Organizations", + "expected_status": 404, + "feature": "Organizations", + "id": "v2/Organizations/Get a specific Org Config value returns \"Not Found\" response", + "operation_id": "GetOrgConfig", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "org_config_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "i_dont_exist" + }, + "style": null + } + ], + "path": "/api/v2/org_configs/{org_config_name}" + }, + "scenario": "Get a specific Org Config value returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/organizations/get-a-specific-org-config-value-returns-ok-response.json b/test-runner-data/v2/organizations/get-a-specific-org-config-value-returns-ok-response.json new file mode 100644 index 0000000000..1ee1f190c8 --- /dev/null +++ b/test-runner-data/v2/organizations/get-a-specific-org-config-value-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Organizations", + "expected_status": 200, + "feature": "Organizations", + "id": "v2/Organizations/Get a specific Org Config value returns \"OK\" response", + "operation_id": "GetOrgConfig", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "org_config_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "custom_roles" + }, + "style": null + } + ], + "path": "/api/v2/org_configs/{org_config_name}" + }, + "scenario": "Get a specific Org Config value returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/organizations/list-org-configs-returns-ok-response.json b/test-runner-data/v2/organizations/list-org-configs-returns-ok-response.json new file mode 100644 index 0000000000..1b8da4cebf --- /dev/null +++ b/test-runner-data/v2/organizations/list-org-configs-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Organizations", + "expected_status": 200, + "feature": "Organizations", + "id": "v2/Organizations/List Org Configs returns \"OK\" response", + "operation_id": "ListOrgConfigs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/org_configs" + }, + "scenario": "List Org Configs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/organizations/update-a-specific-org-config-returns-bad-request-response.json b/test-runner-data/v2/organizations/update-a-specific-org-config-returns-bad-request-response.json new file mode 100644 index 0000000000..c877085417 --- /dev/null +++ b/test-runner-data/v2/organizations/update-a-specific-org-config-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "Organizations", + "expected_status": 400, + "feature": "Organizations", + "id": "v2/Organizations/Update a specific Org Config returns \"Bad Request\" response", + "operation_id": "UpdateOrgConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConfigWriteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "value": "not-a-boolean" + }, + "type": "org_configs" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "org_config_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "custom_roles" + }, + "style": null + } + ], + "path": "/api/v2/org_configs/{org_config_name}" + }, + "scenario": "Update a specific Org Config returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/organizations/update-a-specific-org-config-returns-not-found-response.json b/test-runner-data/v2/organizations/update-a-specific-org-config-returns-not-found-response.json new file mode 100644 index 0000000000..47b3741e6a --- /dev/null +++ b/test-runner-data/v2/organizations/update-a-specific-org-config-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "Organizations", + "expected_status": 404, + "feature": "Organizations", + "id": "v2/Organizations/Update a specific Org Config returns \"Not Found\" response", + "operation_id": "UpdateOrgConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConfigWriteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "value": [] + }, + "type": "org_configs" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "org_config_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "i_dont_exist" + }, + "style": null + } + ], + "path": "/api/v2/org_configs/{org_config_name}" + }, + "scenario": "Update a specific Org Config returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/organizations/update-a-specific-org-config-returns-ok-response.json b/test-runner-data/v2/organizations/update-a-specific-org-config-returns-ok-response.json new file mode 100644 index 0000000000..b2fbf55c40 --- /dev/null +++ b/test-runner-data/v2/organizations/update-a-specific-org-config-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "Organizations", + "expected_status": 200, + "feature": "Organizations", + "id": "v2/Organizations/Update a specific Org Config returns \"OK\" response", + "operation_id": "UpdateOrgConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OrgConfigWriteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "value": "UTC" + }, + "type": "org_configs" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "org_config_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "monitor_timezone" + }, + "style": null + } + ], + "path": "/api/v2/org_configs/{org_config_name}" + }, + "scenario": "Update a specific Org Config returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/organizations/upload-idp-metadata-returns-bad-request-caused-by-either-malformed-xml-or-invalid-saml-idp-metadata-response.json b/test-runner-data/v2/organizations/upload-idp-metadata-returns-bad-request-caused-by-either-malformed-xml-or-invalid-saml-idp-metadata-response.json new file mode 100644 index 0000000000..a90eb74cf7 --- /dev/null +++ b/test-runner-data/v2/organizations/upload-idp-metadata-returns-bad-request-caused-by-either-malformed-xml-or-invalid-saml-idp-metadata-response.json @@ -0,0 +1,29 @@ +{ + "api": "Organizations", + "expected_status": 400, + "feature": "Organizations", + "id": "v2/Organizations/Upload IdP metadata returns \"Bad Request - caused by either malformed XML or invalid SAML IdP metadata\" response", + "operation_id": "UploadIdPMetadata", + "request": { + "body": null, + "content_type": "multipart/form-data", + "method": "POST", + "pagination": false, + "parameters": [ + { + "in": "unknown", + "name": "idp_file", + "required": null, + "schema": null, + "source": { + "type": "literal", + "value": "fixtures/organizations/saml_configurations/invalid_idp_metadata.xml" + } + } + ], + "path": "/api/v2/saml_configurations/idp_metadata" + }, + "scenario": "Upload IdP metadata returns \"Bad Request - caused by either malformed XML or invalid SAML IdP metadata\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/create-a-new-powerpack-returns-bad-request-response.json b/test-runner-data/v2/powerpack/create-a-new-powerpack-returns-bad-request-response.json new file mode 100644 index 0000000000..d0c5042ff1 --- /dev/null +++ b/test-runner-data/v2/powerpack/create-a-new-powerpack-returns-bad-request-response.json @@ -0,0 +1,52 @@ +{ + "api": "Powerpack", + "expected_status": 400, + "feature": "Powerpack", + "id": "v2/Powerpack/Create a new powerpack returns \"Bad Request\" response", + "operation_id": "CreatePowerpack", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Powerpack", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Powerpack for ABC", + "group_widget": { + "definition": { + "layout_type": "ordered", + "type": "group1", + "widgets": [] + } + }, + "name": "Sample Powerpack", + "tags": [ + "tag:foo1" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "test" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/powerpacks" + }, + "scenario": "Create a new powerpack returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/create-a-new-powerpack-returns-ok-response.json b/test-runner-data/v2/powerpack/create-a-new-powerpack-returns-ok-response.json new file mode 100644 index 0000000000..475a872abb --- /dev/null +++ b/test-runner-data/v2/powerpack/create-a-new-powerpack-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "Powerpack", + "expected_status": 200, + "feature": "Powerpack", + "id": "v2/Powerpack/Create a new powerpack returns \"OK\" response", + "operation_id": "CreatePowerpack", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Powerpack", + "type": "object" + }, + "source": "powerpack_payload.json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "{{ unique }}", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/powerpacks" + }, + "scenario": "Create a new powerpack returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/delete-a-powerpack-returns-ok-response.json b/test-runner-data/v2/powerpack/delete-a-powerpack-returns-ok-response.json new file mode 100644 index 0000000000..3b7dbb14f5 --- /dev/null +++ b/test-runner-data/v2/powerpack/delete-a-powerpack-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Powerpack", + "expected_status": 204, + "feature": "Powerpack", + "id": "v2/Powerpack/Delete a powerpack returns \"OK\" response", + "operation_id": "DeletePowerpack", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "powerpack_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "powerpack.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/powerpacks/{powerpack_id}" + }, + "scenario": "Delete a powerpack returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/delete-a-powerpack-returns-powerpack-not-found-response.json b/test-runner-data/v2/powerpack/delete-a-powerpack-returns-powerpack-not-found-response.json new file mode 100644 index 0000000000..0faa418ade --- /dev/null +++ b/test-runner-data/v2/powerpack/delete-a-powerpack-returns-powerpack-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Powerpack", + "expected_status": 404, + "feature": "Powerpack", + "id": "v2/Powerpack/Delete a powerpack returns \"Powerpack Not Found\" response", + "operation_id": "DeletePowerpack", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "powerpack_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "made-up-id" + }, + "style": null + } + ], + "path": "/api/v2/powerpacks/{powerpack_id}" + }, + "scenario": "Delete a powerpack returns \"Powerpack Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/get-a-powerpack-returns-ok-response.json b/test-runner-data/v2/powerpack/get-a-powerpack-returns-ok-response.json new file mode 100644 index 0000000000..847bdf5e8d --- /dev/null +++ b/test-runner-data/v2/powerpack/get-a-powerpack-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Powerpack", + "expected_status": 200, + "feature": "Powerpack", + "id": "v2/Powerpack/Get a Powerpack returns \"OK\" response", + "operation_id": "GetPowerpack", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "powerpack_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "powerpack.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/powerpacks/{powerpack_id}" + }, + "scenario": "Get a Powerpack returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/get-a-powerpack-returns-powerpack-not-found-response.json b/test-runner-data/v2/powerpack/get-a-powerpack-returns-powerpack-not-found-response.json new file mode 100644 index 0000000000..7493e6fff1 --- /dev/null +++ b/test-runner-data/v2/powerpack/get-a-powerpack-returns-powerpack-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Powerpack", + "expected_status": 404, + "feature": "Powerpack", + "id": "v2/Powerpack/Get a Powerpack returns \"Powerpack Not Found.\" response", + "operation_id": "GetPowerpack", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "powerpack_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "made-up-id" + }, + "style": null + } + ], + "path": "/api/v2/powerpacks/{powerpack_id}" + }, + "scenario": "Get a Powerpack returns \"Powerpack Not Found.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/get-all-powerpacks-returns-ok-response-with-pagination.json b/test-runner-data/v2/powerpack/get-all-powerpacks-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..acc159469a --- /dev/null +++ b/test-runner-data/v2/powerpack/get-all-powerpacks-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Powerpack", + "expected_status": 200, + "feature": "Powerpack", + "id": "v2/Powerpack/Get all powerpacks returns \"OK\" response with pagination", + "operation_id": "ListPowerpacks", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/powerpacks" + }, + "scenario": "Get all powerpacks returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/get-all-powerpacks-returns-ok-response.json b/test-runner-data/v2/powerpack/get-all-powerpacks-returns-ok-response.json new file mode 100644 index 0000000000..cf406e7efb --- /dev/null +++ b/test-runner-data/v2/powerpack/get-all-powerpacks-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Powerpack", + "expected_status": 200, + "feature": "Powerpack", + "id": "v2/Powerpack/Get all powerpacks returns \"OK\" response", + "operation_id": "ListPowerpacks", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1000 + }, + "style": null + } + ], + "path": "/api/v2/powerpacks" + }, + "scenario": "Get all powerpacks returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/update-a-powerpack-returns-bad-request-response.json b/test-runner-data/v2/powerpack/update-a-powerpack-returns-bad-request-response.json new file mode 100644 index 0000000000..68b809da6a --- /dev/null +++ b/test-runner-data/v2/powerpack/update-a-powerpack-returns-bad-request-response.json @@ -0,0 +1,69 @@ +{ + "api": "Powerpack", + "expected_status": 400, + "feature": "Powerpack", + "id": "v2/Powerpack/Update a powerpack returns \"Bad Request\" response", + "operation_id": "UpdatePowerpack", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Powerpack", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "type": "group1", + "widgets": [] + } + }, + "name": "Sample Powerpack", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "powerpack_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "powerpack.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/powerpacks/{powerpack_id}" + }, + "scenario": "Update a powerpack returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/update-a-powerpack-returns-ok-response.json b/test-runner-data/v2/powerpack/update-a-powerpack-returns-ok-response.json new file mode 100644 index 0000000000..178ff3db86 --- /dev/null +++ b/test-runner-data/v2/powerpack/update-a-powerpack-returns-ok-response.json @@ -0,0 +1,85 @@ +{ + "api": "Powerpack", + "expected_status": 200, + "feature": "Powerpack", + "id": "v2/Powerpack/Update a powerpack returns \"OK\" response", + "operation_id": "UpdatePowerpack", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Powerpack", + "type": "object" + }, + "source": "powerpack_payload.json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "{{ unique }}", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "powerpack_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "powerpack.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/powerpacks/{powerpack_id}" + }, + "scenario": "Update a powerpack returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/powerpack/update-a-powerpack-returns-powerpack-not-found-response.json b/test-runner-data/v2/powerpack/update-a-powerpack-returns-powerpack-not-found-response.json new file mode 100644 index 0000000000..604c267583 --- /dev/null +++ b/test-runner-data/v2/powerpack/update-a-powerpack-returns-powerpack-not-found-response.json @@ -0,0 +1,85 @@ +{ + "api": "Powerpack", + "expected_status": 404, + "feature": "Powerpack", + "id": "v2/Powerpack/Update a powerpack returns \"Powerpack Not Found\" response", + "operation_id": "UpdatePowerpack", + "request": { + "body": { + "schema": { + "format": null, + "ref": "Powerpack", + "type": "object" + }, + "source": "powerpack_payload.json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "{{ unique }}", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "powerpack_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "made-up-id" + }, + "style": null + } + ], + "path": "/api/v2/powerpacks/{powerpack_id}" + }, + "scenario": "Update a powerpack returns \"Powerpack Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/processes/get-all-processes-returns-ok-response-with-pagination.json b/test-runner-data/v2/processes/get-all-processes-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..719c9adf5a --- /dev/null +++ b/test-runner-data/v2/processes/get-all-processes-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Processes", + "expected_status": 200, + "feature": "Processes", + "id": "v2/Processes/Get all processes returns \"OK\" response with pagination", + "operation_id": "ListProcesses", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/processes" + }, + "scenario": "Get all processes returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/processes/get-all-processes-returns-ok-response.json b/test-runner-data/v2/processes/get-all-processes-returns-ok-response.json new file mode 100644 index 0000000000..f90bfc95f9 --- /dev/null +++ b/test-runner-data/v2/processes/get-all-processes-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "Processes", + "expected_status": 200, + "feature": "Processes", + "id": "v2/Processes/Get all processes returns \"OK\" response", + "operation_id": "ListProcesses", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "search", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "process-agent" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "tags", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "testing:true" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/processes" + }, + "scenario": "Get all processes returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/reference-tables/create-reference-table-without-upload-or-access-details-returns-bad-request-response.json b/test-runner-data/v2/reference-tables/create-reference-table-without-upload-or-access-details-returns-bad-request-response.json new file mode 100644 index 0000000000..fc273b3062 --- /dev/null +++ b/test-runner-data/v2/reference-tables/create-reference-table-without-upload-or-access-details-returns-bad-request-response.json @@ -0,0 +1,49 @@ +{ + "api": "ReferenceTables", + "expected_status": 400, + "feature": "Reference Tables", + "id": "v2/Reference Tables/Create reference table without upload or access details returns \"Bad Request\" response", + "operation_id": "CreateReferenceTable", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateTableRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Test reference table without upload or access details", + "schema": { + "fields": [ + { + "name": "id", + "type": "STRING" + } + ], + "primary_keys": [ + "id" + ] + }, + "source": "LOCAL_FILE", + "table_name": "test_invalid_table_{{ unique }}", + "tags": [ + "test_tag" + ] + }, + "type": "reference_table" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/reference-tables/tables" + }, + "scenario": "Create reference table without upload or access details returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/reference-tables/list-reference-table-rows-returns-bad-request-response-for-invalid-limit.json b/test-runner-data/v2/reference-tables/list-reference-table-rows-returns-bad-request-response-for-invalid-limit.json new file mode 100644 index 0000000000..b6be59a13a --- /dev/null +++ b/test-runner-data/v2/reference-tables/list-reference-table-rows-returns-bad-request-response-for-invalid-limit.json @@ -0,0 +1,35 @@ +{ + "api": "ReferenceTables", + "expected_status": 400, + "feature": "Reference Tables", + "id": "v2/Reference Tables/List reference table rows returns \"Bad Request\" response for invalid limit", + "operation_id": "ListReferenceTableRows", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-a-valid-uuid" + }, + "style": null + } + ], + "path": "/api/v2/reference-tables/tables/{id}/rows/list" + }, + "scenario": "List reference table rows returns \"Bad Request\" response for invalid limit", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/reference-tables/list-reference-table-rows-returns-not-found-response.json b/test-runner-data/v2/reference-tables/list-reference-table-rows-returns-not-found-response.json new file mode 100644 index 0000000000..5baa3c3158 --- /dev/null +++ b/test-runner-data/v2/reference-tables/list-reference-table-rows-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ReferenceTables", + "expected_status": 404, + "feature": "Reference Tables", + "id": "v2/Reference Tables/List reference table rows returns \"Not Found\" response", + "operation_id": "ListReferenceTableRows", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/reference-tables/tables/{id}/rows/list" + }, + "scenario": "List reference table rows returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/restriction-policies/delete-a-restriction-policy-returns-bad-request-response.json b/test-runner-data/v2/restriction-policies/delete-a-restriction-policy-returns-bad-request-response.json new file mode 100644 index 0000000000..c2ff341847 --- /dev/null +++ b/test-runner-data/v2/restriction-policies/delete-a-restriction-policy-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "RestrictionPolicies", + "expected_status": 400, + "feature": "Restriction Policies", + "id": "v2/Restriction Policies/Delete a restriction policy returns \"Bad Request\" response", + "operation_id": "DeleteRestrictionPolicy", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed" + }, + "style": null + } + ], + "path": "/api/v2/restriction_policy/{resource_id}" + }, + "scenario": "Delete a restriction policy returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/restriction-policies/delete-a-restriction-policy-returns-no-content-response.json b/test-runner-data/v2/restriction-policies/delete-a-restriction-policy-returns-no-content-response.json new file mode 100644 index 0000000000..65bdc3c2c2 --- /dev/null +++ b/test-runner-data/v2/restriction-policies/delete-a-restriction-policy-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "RestrictionPolicies", + "expected_status": 204, + "feature": "Restriction Policies", + "id": "v2/Restriction Policies/Delete a restriction policy returns \"No Content\" response", + "operation_id": "DeleteRestrictionPolicy", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "dashboard:test-delete" + }, + "style": null + } + ], + "path": "/api/v2/restriction_policy/{resource_id}" + }, + "scenario": "Delete a restriction policy returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/restriction-policies/get-a-restriction-policy-returns-bad-request-response.json b/test-runner-data/v2/restriction-policies/get-a-restriction-policy-returns-bad-request-response.json new file mode 100644 index 0000000000..9f979ffab1 --- /dev/null +++ b/test-runner-data/v2/restriction-policies/get-a-restriction-policy-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "RestrictionPolicies", + "expected_status": 400, + "feature": "Restriction Policies", + "id": "v2/Restriction Policies/Get a restriction policy returns \"Bad Request\" response", + "operation_id": "GetRestrictionPolicy", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed" + }, + "style": null + } + ], + "path": "/api/v2/restriction_policy/{resource_id}" + }, + "scenario": "Get a restriction policy returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/restriction-policies/get-a-restriction-policy-returns-ok-response.json b/test-runner-data/v2/restriction-policies/get-a-restriction-policy-returns-ok-response.json new file mode 100644 index 0000000000..d3e0f515a7 --- /dev/null +++ b/test-runner-data/v2/restriction-policies/get-a-restriction-policy-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "RestrictionPolicies", + "expected_status": 200, + "feature": "Restriction Policies", + "id": "v2/Restriction Policies/Get a restriction policy returns \"OK\" response", + "operation_id": "GetRestrictionPolicy", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "dashboard:test-get" + }, + "style": null + } + ], + "path": "/api/v2/restriction_policy/{resource_id}" + }, + "scenario": "Get a restriction policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/restriction-policies/update-a-restriction-policy-returns-bad-request-response.json b/test-runner-data/v2/restriction-policies/update-a-restriction-policy-returns-bad-request-response.json new file mode 100644 index 0000000000..ab3bbb8a07 --- /dev/null +++ b/test-runner-data/v2/restriction-policies/update-a-restriction-policy-returns-bad-request-response.json @@ -0,0 +1,58 @@ +{ + "api": "RestrictionPolicies", + "expected_status": 400, + "feature": "Restriction Policies", + "id": "v2/Restriction Policies/Update a restriction policy returns \"Bad Request\" response", + "operation_id": "UpdateRestrictionPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RestrictionPolicyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "bindings": [ + { + "principals": [ + "org:{{ user.data.relationships.org.data.id }}" + ], + "relation": "editor" + } + ] + }, + "id": "dashboard:abc-def-ghi", + "type": "restriction_policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed" + }, + "style": null + } + ], + "path": "/api/v2/restriction_policy/{resource_id}" + }, + "scenario": "Update a restriction policy returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/restriction-policies/update-a-restriction-policy-returns-ok-response.json b/test-runner-data/v2/restriction-policies/update-a-restriction-policy-returns-ok-response.json new file mode 100644 index 0000000000..0c7aea409f --- /dev/null +++ b/test-runner-data/v2/restriction-policies/update-a-restriction-policy-returns-ok-response.json @@ -0,0 +1,58 @@ +{ + "api": "RestrictionPolicies", + "expected_status": 200, + "feature": "Restriction Policies", + "id": "v2/Restriction Policies/Update a restriction policy returns \"OK\" response", + "operation_id": "UpdateRestrictionPolicy", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RestrictionPolicyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "bindings": [ + { + "principals": [ + "org:{{ user.data.relationships.org.data.id }}" + ], + "relation": "editor" + } + ] + }, + "id": "dashboard:test-update", + "type": "restriction_policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "dashboard:test-update" + }, + "style": null + } + ], + "path": "/api/v2/restriction_policy/{resource_id}" + }, + "scenario": "Update a restriction policy returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/add-a-user-to-a-role-returns-ok-response.json b/test-runner-data/v2/roles/add-a-user-to-a-role-returns-ok-response.json new file mode 100644 index 0000000000..895903174a --- /dev/null +++ b/test-runner-data/v2/roles/add-a-user-to-a-role-returns-ok-response.json @@ -0,0 +1,48 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/Add a user to a role returns \"OK\" response", + "operation_id": "AddUserToRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RelationshipToUser", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{ user.data.id}}", + "type": "{{ user.data.type }}" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/users" + }, + "scenario": "Add a user to a role returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-bad-request-response.json b/test-runner-data/v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-bad-request-response.json new file mode 100644 index 0000000000..8acbf7c191 --- /dev/null +++ b/test-runner-data/v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "Roles", + "expected_status": 400, + "feature": "Roles", + "id": "v2/Roles/Create a new role by cloning an existing role returns \"Bad Request\" response", + "operation_id": "CloneRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RoleCloneRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": " " + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/clone" + }, + "scenario": "Create a new role by cloning an existing role returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-conflict-response.json b/test-runner-data/v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-conflict-response.json new file mode 100644 index 0000000000..a4c5087fc4 --- /dev/null +++ b/test-runner-data/v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-conflict-response.json @@ -0,0 +1,50 @@ +{ + "api": "Roles", + "expected_status": 409, + "feature": "Roles", + "id": "v2/Roles/Create a new role by cloning an existing role returns \"Conflict\" response", + "operation_id": "CloneRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RoleCloneRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ role.data.attributes.name }}" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/clone" + }, + "scenario": "Create a new role by cloning an existing role returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-ok-response.json b/test-runner-data/v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-ok-response.json new file mode 100644 index 0000000000..40b0094d2d --- /dev/null +++ b/test-runner-data/v2/roles/create-a-new-role-by-cloning-an-existing-role-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/Create a new role by cloning an existing role returns \"OK\" response", + "operation_id": "CloneRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RoleCloneRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }} clone" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/clone" + }, + "scenario": "Create a new role by cloning an existing role returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/create-role-with-a-permission-returns-ok-response.json b/test-runner-data/v2/roles/create-role-with-a-permission-returns-ok-response.json new file mode 100644 index 0000000000..65b4bfb91e --- /dev/null +++ b/test-runner-data/v2/roles/create-role-with-a-permission-returns-ok-response.json @@ -0,0 +1,43 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/Create role with a permission returns \"OK\" response", + "operation_id": "CreateRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RoleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}" + }, + "relationships": { + "permissions": { + "data": [ + { + "id": "{{ permission.id }}", + "type": "{{ permission.type }}" + } + ] + } + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/roles" + }, + "scenario": "Create role with a permission returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/delete-role-returns-ok-response.json b/test-runner-data/v2/roles/delete-role-returns-ok-response.json new file mode 100644 index 0000000000..52e683df69 --- /dev/null +++ b/test-runner-data/v2/roles/delete-role-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Roles", + "expected_status": 204, + "feature": "Roles", + "id": "v2/Roles/Delete role returns \"OK\" response", + "operation_id": "DeleteRole", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}" + }, + "scenario": "Delete role returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/get-a-role-returns-ok-response.json b/test-runner-data/v2/roles/get-a-role-returns-ok-response.json new file mode 100644 index 0000000000..53e70f2c6c --- /dev/null +++ b/test-runner-data/v2/roles/get-a-role-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/Get a role returns \"OK\" response", + "operation_id": "GetRole", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}" + }, + "scenario": "Get a role returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/get-all-users-of-a-role-returns-ok-response.json b/test-runner-data/v2/roles/get-all-users-of-a-role-returns-ok-response.json new file mode 100644 index 0000000000..16e9fccd56 --- /dev/null +++ b/test-runner-data/v2/roles/get-all-users-of-a-role-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/Get all users of a role returns \"OK\" response", + "operation_id": "ListRoleUsers", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/users" + }, + "scenario": "Get all users of a role returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/grant-permission-to-a-role-returns-ok-response.json b/test-runner-data/v2/roles/grant-permission-to-a-role-returns-ok-response.json new file mode 100644 index 0000000000..0a3b6b3874 --- /dev/null +++ b/test-runner-data/v2/roles/grant-permission-to-a-role-returns-ok-response.json @@ -0,0 +1,48 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/Grant permission to a role returns \"OK\" response", + "operation_id": "AddPermissionToRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RelationshipToPermission", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{ permission.id }}", + "type": "{{ permission.type }}" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/permissions" + }, + "scenario": "Grant permission to a role returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/list-permissions-for-a-role-returns-ok-response.json b/test-runner-data/v2/roles/list-permissions-for-a-role-returns-ok-response.json new file mode 100644 index 0000000000..ffd5535be8 --- /dev/null +++ b/test-runner-data/v2/roles/list-permissions-for-a-role-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/List permissions for a role returns \"OK\" response", + "operation_id": "ListRolePermissions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/permissions" + }, + "scenario": "List permissions for a role returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/list-permissions-returns-ok-response.json b/test-runner-data/v2/roles/list-permissions-returns-ok-response.json new file mode 100644 index 0000000000..938ddbca8c --- /dev/null +++ b/test-runner-data/v2/roles/list-permissions-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/List permissions returns \"OK\" response", + "operation_id": "ListPermissions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/permissions" + }, + "scenario": "List permissions returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/list-roles-returns-ok-response.json b/test-runner-data/v2/roles/list-roles-returns-ok-response.json new file mode 100644 index 0000000000..b3de6b2d69 --- /dev/null +++ b/test-runner-data/v2/roles/list-roles-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/List roles returns \"OK\" response", + "operation_id": "ListRoles", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.attributes.name", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles" + }, + "scenario": "List roles returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/remove-a-user-from-a-role-returns-ok-response.json b/test-runner-data/v2/roles/remove-a-user-from-a-role-returns-ok-response.json new file mode 100644 index 0000000000..e3ee3ab434 --- /dev/null +++ b/test-runner-data/v2/roles/remove-a-user-from-a-role-returns-ok-response.json @@ -0,0 +1,48 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/Remove a user from a role returns \"OK\" response", + "operation_id": "RemoveUserFromRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RelationshipToUser", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{ user.data.id}}", + "type": "{{ user.data.type }}" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/users" + }, + "scenario": "Remove a user from a role returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/revoke-permission-returns-bad-request-response.json b/test-runner-data/v2/roles/revoke-permission-returns-bad-request-response.json new file mode 100644 index 0000000000..92d0b00fb1 --- /dev/null +++ b/test-runner-data/v2/roles/revoke-permission-returns-bad-request-response.json @@ -0,0 +1,48 @@ +{ + "api": "Roles", + "expected_status": 400, + "feature": "Roles", + "id": "v2/Roles/Revoke permission returns \"Bad Request\" response", + "operation_id": "RemovePermissionFromRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RelationshipToPermission", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "11111111-dead-beef-dead-ffffffffffff", + "type": "bad_permission_type" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/permissions" + }, + "scenario": "Revoke permission returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/revoke-permission-returns-not-found-response.json b/test-runner-data/v2/roles/revoke-permission-returns-not-found-response.json new file mode 100644 index 0000000000..1401c48785 --- /dev/null +++ b/test-runner-data/v2/roles/revoke-permission-returns-not-found-response.json @@ -0,0 +1,48 @@ +{ + "api": "Roles", + "expected_status": 404, + "feature": "Roles", + "id": "v2/Roles/Revoke permission returns \"Not found\" response", + "operation_id": "RemovePermissionFromRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RelationshipToPermission", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{ permission.id }}", + "type": "{{ permission.type }}" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-dead-beef-dead-ffffffffffff" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/permissions" + }, + "scenario": "Revoke permission returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/revoke-permission-returns-ok-response.json b/test-runner-data/v2/roles/revoke-permission-returns-ok-response.json new file mode 100644 index 0000000000..149e919744 --- /dev/null +++ b/test-runner-data/v2/roles/revoke-permission-returns-ok-response.json @@ -0,0 +1,48 @@ +{ + "api": "Roles", + "expected_status": 200, + "feature": "Roles", + "id": "v2/Roles/Revoke permission returns \"OK\" response", + "operation_id": "RemovePermissionFromRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RelationshipToPermission", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{ permission.id }}", + "type": "{{ permission.type }}" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}/permissions" + }, + "scenario": "Revoke permission returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/update-a-role-returns-bad-request-response.json b/test-runner-data/v2/roles/update-a-role-returns-bad-request-response.json new file mode 100644 index 0000000000..949f72e1a7 --- /dev/null +++ b/test-runner-data/v2/roles/update-a-role-returns-bad-request-response.json @@ -0,0 +1,61 @@ +{ + "api": "Roles", + "expected_status": 400, + "feature": "Roles", + "id": "v2/Roles/Update a role returns \"Bad Request\" response", + "operation_id": "UpdateRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RoleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ role.data.attributes.name }}-updated" + }, + "id": "{{ role.data.id }}", + "relationships": { + "permissions": { + "data": [ + { + "id": "11111111-dead-beef-dead-ffffffffffff", + "type": "{{ permission.type }}" + } + ] + } + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}" + }, + "scenario": "Update a role returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/update-a-role-returns-bad-role-id-response.json b/test-runner-data/v2/roles/update-a-role-returns-bad-role-id-response.json new file mode 100644 index 0000000000..ba09065bba --- /dev/null +++ b/test-runner-data/v2/roles/update-a-role-returns-bad-role-id-response.json @@ -0,0 +1,61 @@ +{ + "api": "Roles", + "expected_status": 422, + "feature": "Roles", + "id": "v2/Roles/Update a role returns \"Bad Role ID\" response", + "operation_id": "UpdateRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RoleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ role.data.attributes.name }}-updated" + }, + "id": "00000000-dead-beef-dead-ffffffffffff", + "relationships": { + "permissions": { + "data": [ + { + "id": "{{ permission.id }}", + "type": "{{ permission.type }}" + } + ] + } + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "role.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}" + }, + "scenario": "Update a role returns \"Bad Role ID\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/roles/update-a-role-returns-not-found-response.json b/test-runner-data/v2/roles/update-a-role-returns-not-found-response.json new file mode 100644 index 0000000000..fcc71954d5 --- /dev/null +++ b/test-runner-data/v2/roles/update-a-role-returns-not-found-response.json @@ -0,0 +1,61 @@ +{ + "api": "Roles", + "expected_status": 404, + "feature": "Roles", + "id": "v2/Roles/Update a role returns \"Not found\" response", + "operation_id": "UpdateRole", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RoleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "updated" + }, + "id": "00000000-dead-beef-dead-ffffffffffff", + "relationships": { + "permissions": { + "data": [ + { + "id": "{{ permission.id }}", + "type": "{{ permission.type }}" + } + ] + } + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "role_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-dead-beef-dead-ffffffffffff" + }, + "style": null + } + ], + "path": "/api/v2/roles/{role_id}" + }, + "scenario": "Update a role returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/create-a-rum-based-metric-returns-bad-request-response.json b/test-runner-data/v2/rum-metrics/create-a-rum-based-metric-returns-bad-request-response.json new file mode 100644 index 0000000000..9898b5f412 --- /dev/null +++ b/test-runner-data/v2/rum-metrics/create-a-rum-based-metric-returns-bad-request-response.json @@ -0,0 +1,40 @@ +{ + "api": "RumMetrics", + "expected_status": 400, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Create a RUM-based metric returns \"Bad Request\" response", + "operation_id": "CreateRumMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumMetricCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "count" + }, + "event_type": "action", + "uniqueness": { + "when": "match" + } + }, + "id": "rum.actions.invalid", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/config/metrics" + }, + "scenario": "Create a RUM-based metric returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/create-a-rum-based-metric-returns-conflict-response.json b/test-runner-data/v2/rum-metrics/create-a-rum-based-metric-returns-conflict-response.json new file mode 100644 index 0000000000..b09df34846 --- /dev/null +++ b/test-runner-data/v2/rum-metrics/create-a-rum-based-metric-returns-conflict-response.json @@ -0,0 +1,37 @@ +{ + "api": "RumMetrics", + "expected_status": 409, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Create a RUM-based metric returns \"Conflict\" response", + "operation_id": "CreateRumMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumMetricCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "count" + }, + "event_type": "action" + }, + "id": "{{ rum_metric.data.id }}", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/config/metrics" + }, + "scenario": "Create a RUM-based metric returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/create-a-rum-based-metric-returns-created-response.json b/test-runner-data/v2/rum-metrics/create-a-rum-based-metric-returns-created-response.json new file mode 100644 index 0000000000..4f4e7c377b --- /dev/null +++ b/test-runner-data/v2/rum-metrics/create-a-rum-based-metric-returns-created-response.json @@ -0,0 +1,51 @@ +{ + "api": "RumMetrics", + "expected_status": 201, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Create a RUM-based metric returns \"Created\" response", + "operation_id": "CreateRumMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumMetricCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "event_type": "session", + "filter": { + "query": "@service:web-ui" + }, + "group_by": [ + { + "path": "@browser.name", + "tag_name": "browser_name" + } + ], + "uniqueness": { + "when": "match" + } + }, + "id": "{{ unique_lower_alnum }}", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/config/metrics" + }, + "scenario": "Create a RUM-based metric returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/delete-a-rum-based-metric-returns-no-content-response.json b/test-runner-data/v2/rum-metrics/delete-a-rum-based-metric-returns-no-content-response.json new file mode 100644 index 0000000000..68db5b2665 --- /dev/null +++ b/test-runner-data/v2/rum-metrics/delete-a-rum-based-metric-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "RumMetrics", + "expected_status": 204, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Delete a RUM-based metric returns \"No Content\" response", + "operation_id": "DeleteRumMetric", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/config/metrics/{metric_id}" + }, + "scenario": "Delete a RUM-based metric returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/delete-a-rum-based-metric-returns-not-found-response.json b/test-runner-data/v2/rum-metrics/delete-a-rum-based-metric-returns-not-found-response.json new file mode 100644 index 0000000000..2b68b82b5a --- /dev/null +++ b/test-runner-data/v2/rum-metrics/delete-a-rum-based-metric-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "RumMetrics", + "expected_status": 404, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Delete a RUM-based metric returns \"Not Found\" response", + "operation_id": "DeleteRumMetric", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique }}" + }, + "style": null + } + ], + "path": "/api/v2/rum/config/metrics/{metric_id}" + }, + "scenario": "Delete a RUM-based metric returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/get-a-rum-based-metric-returns-not-found-response.json b/test-runner-data/v2/rum-metrics/get-a-rum-based-metric-returns-not-found-response.json new file mode 100644 index 0000000000..edd8d8197d --- /dev/null +++ b/test-runner-data/v2/rum-metrics/get-a-rum-based-metric-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "RumMetrics", + "expected_status": 404, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Get a RUM-based metric returns \"Not Found\" response", + "operation_id": "GetRumMetric", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique }}" + }, + "style": null + } + ], + "path": "/api/v2/rum/config/metrics/{metric_id}" + }, + "scenario": "Get a RUM-based metric returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/get-a-rum-based-metric-returns-ok-response.json b/test-runner-data/v2/rum-metrics/get-a-rum-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..669dc835c1 --- /dev/null +++ b/test-runner-data/v2/rum-metrics/get-a-rum-based-metric-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "RumMetrics", + "expected_status": 200, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Get a RUM-based metric returns \"OK\" response", + "operation_id": "GetRumMetric", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/config/metrics/{metric_id}" + }, + "scenario": "Get a RUM-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/get-all-rum-based-metrics-returns-ok-response.json b/test-runner-data/v2/rum-metrics/get-all-rum-based-metrics-returns-ok-response.json new file mode 100644 index 0000000000..3942c2a589 --- /dev/null +++ b/test-runner-data/v2/rum-metrics/get-all-rum-based-metrics-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "RumMetrics", + "expected_status": 200, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Get all RUM-based metrics returns \"OK\" response", + "operation_id": "ListRumMetrics", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/config/metrics" + }, + "scenario": "Get all RUM-based metrics returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-bad-request-response.json b/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-bad-request-response.json new file mode 100644 index 0000000000..1ecb572978 --- /dev/null +++ b/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-bad-request-response.json @@ -0,0 +1,53 @@ +{ + "api": "RumMetrics", + "expected_status": 400, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Update a RUM-based metric returns \"Bad Request\" response", + "operation_id": "UpdateRumMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumMetricUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": true + } + }, + "id": "rum.sessions.webui.count", + "type": "unknown_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/config/metrics/{metric_id}" + }, + "scenario": "Update a RUM-based metric returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-conflict-response.json b/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-conflict-response.json new file mode 100644 index 0000000000..f81c5d565c --- /dev/null +++ b/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-conflict-response.json @@ -0,0 +1,53 @@ +{ + "api": "RumMetrics", + "expected_status": 409, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Update a RUM-based metric returns \"Conflict\" response", + "operation_id": "UpdateRumMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumMetricUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": true + } + }, + "id": "conflicting.id", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/config/metrics/{metric_id}" + }, + "scenario": "Update a RUM-based metric returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-not-found-response.json b/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-not-found-response.json new file mode 100644 index 0000000000..f238056613 --- /dev/null +++ b/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-not-found-response.json @@ -0,0 +1,53 @@ +{ + "api": "RumMetrics", + "expected_status": 404, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Update a RUM-based metric returns \"Not Found\" response", + "operation_id": "UpdateRumMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumMetricUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": true + } + }, + "id": "8fc991bf-967e-4652-8a5b-0711a985abe3", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "8fc991bf-967e-4652-8a5b-0711a985abe3" + }, + "style": null + } + ], + "path": "/api/v2/rum/config/metrics/{metric_id}" + }, + "scenario": "Update a RUM-based metric returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-ok-response.json b/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..f14e26aff4 --- /dev/null +++ b/test-runner-data/v2/rum-metrics/update-a-rum-based-metric-returns-ok-response.json @@ -0,0 +1,62 @@ +{ + "api": "RumMetrics", + "expected_status": 200, + "feature": "Rum Metrics", + "id": "v2/Rum Metrics/Update a RUM-based metric returns \"OK\" response", + "operation_id": "UpdateRumMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumMetricUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": false + }, + "filter": { + "query": "@service:rum-config" + }, + "group_by": [ + { + "path": "@browser.version", + "tag_name": "browser_version" + } + ] + }, + "id": "{{ rum_metric.data.id }}", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/config/metrics/{metric_id}" + }, + "scenario": "Update a RUM-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-remote-config/get-a-rum-sdk-configuration-returns-forbidden-response.json b/test-runner-data/v2/rum-remote-config/get-a-rum-sdk-configuration-returns-forbidden-response.json new file mode 100644 index 0000000000..977f4f1a52 --- /dev/null +++ b/test-runner-data/v2/rum-remote-config/get-a-rum-sdk-configuration-returns-forbidden-response.json @@ -0,0 +1,35 @@ +{ + "api": "RUMRemoteConfig", + "expected_status": 403, + "feature": "RUM Remote Config", + "id": "v2/RUM Remote Config/Get a RUM SDK configuration returns \"Forbidden\" response", + "operation_id": "GetRumSdkConfig", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/rum/configs/{config_id}" + }, + "scenario": "Get a RUM SDK configuration returns \"Forbidden\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-remote-config/update-a-rum-sdk-configuration-returns-forbidden-response.json b/test-runner-data/v2/rum-remote-config/update-a-rum-sdk-configuration-returns-forbidden-response.json new file mode 100644 index 0000000000..f83a292dff --- /dev/null +++ b/test-runner-data/v2/rum-remote-config/update-a-rum-sdk-configuration-returns-forbidden-response.json @@ -0,0 +1,56 @@ +{ + "api": "RUMRemoteConfig", + "expected_status": 403, + "feature": "RUM Remote Config", + "id": "v2/RUM Remote Config/Update a RUM SDK configuration returns \"Forbidden\" response", + "operation_id": "UpdateRumSdkConfig", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumSdkConfigUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "rum": { + "default_privacy_level": "mask", + "enable_privacy_for_action_name": true, + "session_replay_sample_rate": 20, + "session_sample_rate": 75 + } + }, + "id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "type": "rum_sdk_config" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "config_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + }, + "style": null + } + ], + "path": "/api/v2/remote_config/products/rum/configs/{config_id}" + }, + "scenario": "Update a RUM SDK configuration returns \"Forbidden\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/create-a-rum-retention-filter-returns-bad-request-response.json b/test-runner-data/v2/rum-retention-filters/create-a-rum-retention-filter-returns-bad-request-response.json new file mode 100644 index 0000000000..c8b175f5c4 --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/create-a-rum-retention-filter-returns-bad-request-response.json @@ -0,0 +1,54 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 400, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Create a RUM retention filter returns \"Bad Request\" response", + "operation_id": "CreateRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumRetentionFilterCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "session", + "name": "Test creating retention filter", + "query": "", + "sample_rate": 25 + }, + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters" + }, + "scenario": "Create a RUM retention filter returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/create-a-rum-retention-filter-returns-created-response.json b/test-runner-data/v2/rum-retention-filters/create-a-rum-retention-filter-returns-created-response.json new file mode 100644 index 0000000000..6b0d0a5baf --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/create-a-rum-retention-filter-returns-created-response.json @@ -0,0 +1,54 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 201, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Create a RUM retention filter returns \"Created\" response", + "operation_id": "CreateRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumRetentionFilterCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "session", + "name": "Test creating retention filter", + "query": "custom_query", + "sample_rate": 50 + }, + "type": "retention_filters" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters" + }, + "scenario": "Create a RUM retention filter returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/delete-a-rum-retention-filter-returns-no-content-response.json b/test-runner-data/v2/rum-retention-filters/delete-a-rum-retention-filter-returns-no-content-response.json new file mode 100644 index 0000000000..0d4003de76 --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/delete-a-rum-retention-filter-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 204, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Delete a RUM retention filter returns \"No Content\" response", + "operation_id": "DeleteRetentionFilter", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rf_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "fe34ee09-14cf-4976-9362-08044c0dea80" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}" + }, + "scenario": "Delete a RUM retention filter returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/delete-a-rum-retention-filter-returns-not-found-response.json b/test-runner-data/v2/rum-retention-filters/delete-a-rum-retention-filter-returns-not-found-response.json new file mode 100644 index 0000000000..13d01e5fa8 --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/delete-a-rum-retention-filter-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 404, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Delete a RUM retention filter returns \"Not Found\" response", + "operation_id": "DeleteRetentionFilter", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rf_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique }}" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}" + }, + "scenario": "Delete a RUM retention filter returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/get-a-rum-retention-filter-returns-not-found-response.json b/test-runner-data/v2/rum-retention-filters/get-a-rum-retention-filter-returns-not-found-response.json new file mode 100644 index 0000000000..cf401b6d09 --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/get-a-rum-retention-filter-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 404, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Get a RUM retention filter returns \"Not Found\" response", + "operation_id": "GetRetentionFilter", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rf_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique }}" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}" + }, + "scenario": "Get a RUM retention filter returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/get-a-rum-retention-filter-returns-ok-response.json b/test-runner-data/v2/rum-retention-filters/get-a-rum-retention-filter-returns-ok-response.json new file mode 100644 index 0000000000..d8f82462e5 --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/get-a-rum-retention-filter-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 200, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Get a RUM retention filter returns \"OK\" response", + "operation_id": "GetRetentionFilter", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rf_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "4b95d361-f65d-4515-9824-c9aaeba5ac2a" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}" + }, + "scenario": "Get a RUM retention filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/get-all-rum-retention-filters-returns-ok-response.json b/test-runner-data/v2/rum-retention-filters/get-all-rum-retention-filters-returns-ok-response.json new file mode 100644 index 0000000000..1f787ecbde --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/get-all-rum-retention-filters-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 200, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Get all RUM retention filters returns \"OK\" response", + "operation_id": "ListRetentionFilters", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "1d4b9c34-7ac4-423a-91cf-9902d926e9b3" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters" + }, + "scenario": "Get all RUM retention filters returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/order-rum-retention-filters-returns-bad-request-response.json b/test-runner-data/v2/rum-retention-filters/order-rum-retention-filters-returns-bad-request-response.json new file mode 100644 index 0000000000..95d36491c0 --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/order-rum-retention-filters-returns-bad-request-response.json @@ -0,0 +1,50 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 400, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Order RUM retention filters returns \"Bad Request\" response", + "operation_id": "OrderRetentionFilters", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumRetentionFiltersOrderRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "325631eb-94c9-49c0-93f9-ab7e4fd24529", + "type": "retention_filters" + } + ] + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "1d4b9c34-7ac4-423a-91cf-9902d926e9b3" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/relationships/retention_filters" + }, + "scenario": "Order RUM retention filters returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/order-rum-retention-filters-returns-ordered-response.json b/test-runner-data/v2/rum-retention-filters/order-rum-retention-filters-returns-ordered-response.json new file mode 100644 index 0000000000..6935033e6a --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/order-rum-retention-filters-returns-ordered-response.json @@ -0,0 +1,58 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 200, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Order RUM retention filters returns \"Ordered\" response", + "operation_id": "OrderRetentionFilters", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumRetentionFiltersOrderRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "325631eb-94c9-49c0-93f9-ab7e4fd24529", + "type": "retention_filters" + }, + { + "id": "42d89430-5b80-426e-a44b-ba3b417ece25", + "type": "retention_filters" + }, + { + "id": "bff0bc34-99e9-4c16-adce-f47e71948c23", + "type": "retention_filters" + } + ] + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "1d4b9c34-7ac4-423a-91cf-9902d926e9b3" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/relationships/retention_filters" + }, + "scenario": "Order RUM retention filters returns \"Ordered\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/update-a-rum-retention-filter-returns-bad-request-response.json b/test-runner-data/v2/rum-retention-filters/update-a-rum-retention-filter-returns-bad-request-response.json new file mode 100644 index 0000000000..701be3adc7 --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/update-a-rum-retention-filter-returns-bad-request-response.json @@ -0,0 +1,71 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 400, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Update a RUM retention filter returns \"Bad Request\" response", + "operation_id": "UpdateRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumRetentionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "view", + "name": "Test updating retention filter", + "query": "", + "sample_rate": 100 + }, + "id": "{{ unique }}", + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rf_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique }}" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}" + }, + "scenario": "Update a RUM retention filter returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/update-a-rum-retention-filter-returns-not-found-response.json b/test-runner-data/v2/rum-retention-filters/update-a-rum-retention-filter-returns-not-found-response.json new file mode 100644 index 0000000000..f700192786 --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/update-a-rum-retention-filter-returns-not-found-response.json @@ -0,0 +1,71 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 404, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Update a RUM retention filter returns \"Not Found\" response", + "operation_id": "UpdateRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumRetentionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "view", + "name": "Test updating retention filter", + "query": "", + "sample_rate": 100 + }, + "id": "{{ unique }}", + "type": "retention_filters" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rf_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique }}" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}" + }, + "scenario": "Update a RUM retention filter returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum-retention-filters/update-a-rum-retention-filter-returns-updated-response.json b/test-runner-data/v2/rum-retention-filters/update-a-rum-retention-filter-returns-updated-response.json new file mode 100644 index 0000000000..74d909ce7c --- /dev/null +++ b/test-runner-data/v2/rum-retention-filters/update-a-rum-retention-filter-returns-updated-response.json @@ -0,0 +1,71 @@ +{ + "api": "RumRetentionFilters", + "expected_status": 200, + "feature": "Rum Retention Filters", + "id": "v2/Rum Retention Filters/Update a RUM retention filter returns \"Updated\" response", + "operation_id": "UpdateRetentionFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RumRetentionFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "view", + "name": "Test updating retention filter", + "query": "view_query", + "sample_rate": 100 + }, + "id": "4b95d361-f65d-4515-9824-c9aaeba5ac2a", + "type": "retention_filters" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "app_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "a33671aa-24fd-4dcd-ba4b-5bbdbafe7690" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rf_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "4b95d361-f65d-4515-9824-c9aaeba5ac2a" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{app_id}/retention_filters/{rf_id}" + }, + "scenario": "Update a RUM retention filter returns \"Updated\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/aggregate-rum-events-returns-ok-response.json b/test-runner-data/v2/rum/aggregate-rum-events-returns-ok-response.json new file mode 100644 index 0000000000..3b1e6ef5a5 --- /dev/null +++ b/test-runner-data/v2/rum/aggregate-rum-events-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Aggregate RUM events returns \"OK\" response", + "operation_id": "AggregateRUMEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RUMAggregateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "compute": [ + { + "aggregation": "pc90", + "metric": "@view.time_spent", + "type": "total" + } + ], + "filter": { + "from": "now-15m", + "query": "@type:view AND @session.type:user", + "to": "now" + }, + "group_by": [ + { + "facet": "@view.time_spent", + "limit": 10, + "total": false + } + ], + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 25 + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/analytics/aggregate" + }, + "scenario": "Aggregate RUM events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/create-a-new-rum-application-returns-ok-response.json b/test-runner-data/v2/rum/create-a-new-rum-application-returns-ok-response.json new file mode 100644 index 0000000000..5ff1c4d91a --- /dev/null +++ b/test-runner-data/v2/rum/create-a-new-rum-application-returns-ok-response.json @@ -0,0 +1,34 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Create a new RUM application returns \"OK\" response", + "operation_id": "CreateRUMApplication", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RUMApplicationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "test-rum-{{ unique_hash }}", + "type": "ios" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/applications" + }, + "scenario": "Create a new RUM application returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/create-a-new-rum-application-with-product-scales-returns-ok-response.json b/test-runner-data/v2/rum/create-a-new-rum-application-with-product-scales-returns-ok-response.json new file mode 100644 index 0000000000..1305b0e709 --- /dev/null +++ b/test-runner-data/v2/rum/create-a-new-rum-application-with-product-scales-returns-ok-response.json @@ -0,0 +1,36 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Create a new RUM application with Product Scales returns \"OK\" response", + "operation_id": "CreateRUMApplication", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RUMApplicationCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "test-rum-with-product-scales-{{ unique_hash }}", + "product_analytics_retention_state": "NONE", + "rum_event_processing_state": "ERROR_FOCUSED_MODE", + "type": "browser" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/applications" + }, + "scenario": "Create a new RUM application with Product Scales returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/delete-a-rum-application-returns-no-content-response.json b/test-runner-data/v2/rum/delete-a-rum-application-returns-no-content-response.json new file mode 100644 index 0000000000..40c6672b27 --- /dev/null +++ b/test-runner-data/v2/rum/delete-a-rum-application-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "RUM", + "expected_status": 204, + "feature": "RUM", + "id": "v2/RUM/Delete a RUM application returns \"No Content\" response", + "operation_id": "DeleteRUMApplication", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_application.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{id}" + }, + "scenario": "Delete a RUM application returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/delete-a-rum-application-returns-not-found-response.json b/test-runner-data/v2/rum/delete-a-rum-application-returns-not-found-response.json new file mode 100644 index 0000000000..9696e7ca11 --- /dev/null +++ b/test-runner-data/v2/rum/delete-a-rum-application-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "RUM", + "expected_status": 404, + "feature": "RUM", + "id": "v2/RUM/Delete a RUM application returns \"Not Found\" response", + "operation_id": "DeleteRUMApplication", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "abcde-12345" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{id}" + }, + "scenario": "Delete a RUM application returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/get-a-list-of-rum-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/rum/get-a-list-of-rum-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..4b9815365e --- /dev/null +++ b/test-runner-data/v2/rum/get-a-list-of-rum-events-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Get a list of RUM events returns \"OK\" response with pagination", + "operation_id": "ListRUMEvents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/rum/events" + }, + "scenario": "Get a list of RUM events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/get-a-list-of-rum-events-returns-ok-response.json b/test-runner-data/v2/rum/get-a-list-of-rum-events-returns-ok-response.json new file mode 100644 index 0000000000..1e0b81a6c3 --- /dev/null +++ b/test-runner-data/v2/rum/get-a-list-of-rum-events-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Get a list of RUM events returns \"OK\" response", + "operation_id": "ListRUMEvents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/events" + }, + "scenario": "Get a list of RUM events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/get-a-rum-application-returns-not-found-response.json b/test-runner-data/v2/rum/get-a-rum-application-returns-not-found-response.json new file mode 100644 index 0000000000..c784559181 --- /dev/null +++ b/test-runner-data/v2/rum/get-a-rum-application-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "RUM", + "expected_status": 404, + "feature": "RUM", + "id": "v2/RUM/Get a RUM application returns \"Not Found\" response", + "operation_id": "GetRUMApplication", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "abcd1234-0000-0000-abcd-1234abcd5678" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{id}" + }, + "scenario": "Get a RUM application returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/get-a-rum-application-returns-ok-response.json b/test-runner-data/v2/rum/get-a-rum-application-returns-ok-response.json new file mode 100644 index 0000000000..a11a1efe14 --- /dev/null +++ b/test-runner-data/v2/rum/get-a-rum-application-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Get a RUM application returns \"OK\" response", + "operation_id": "GetRUMApplication", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_application.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{id}" + }, + "scenario": "Get a RUM application returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/list-all-the-rum-applications-returns-ok-response.json b/test-runner-data/v2/rum/list-all-the-rum-applications-returns-ok-response.json new file mode 100644 index 0000000000..eed0ce84a6 --- /dev/null +++ b/test-runner-data/v2/rum/list-all-the-rum-applications-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/List all the RUM applications returns \"OK\" response", + "operation_id": "GetRUMApplications", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/applications" + }, + "scenario": "List all the RUM applications returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/search-rum-events-returns-ok-response-with-pagination.json b/test-runner-data/v2/rum/search-rum-events-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..215f362101 --- /dev/null +++ b/test-runner-data/v2/rum/search-rum-events-returns-ok-response-with-pagination.json @@ -0,0 +1,40 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Search RUM events returns \"OK\" response with pagination", + "operation_id": "SearchRUMEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RUMSearchEventsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "query": "@type:session AND @session.type:user", + "to": "now" + }, + "options": { + "time_offset": 0, + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": true, + "parameters": [], + "path": "/api/v2/rum/events/search" + }, + "scenario": "Search RUM events returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/search-rum-events-returns-ok-response.json b/test-runner-data/v2/rum/search-rum-events-returns-ok-response.json new file mode 100644 index 0000000000..ece86cc4f9 --- /dev/null +++ b/test-runner-data/v2/rum/search-rum-events-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Search RUM events returns \"OK\" response", + "operation_id": "SearchRUMEvents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RUMSearchEventsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "filter": { + "from": "now-15m", + "query": "@type:session AND @session.type:user", + "to": "now" + }, + "options": { + "time_offset": 0, + "timezone": "GMT" + }, + "page": { + "limit": 25 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/rum/events/search" + }, + "scenario": "Search RUM events returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/update-a-rum-application-returns-ok-response.json b/test-runner-data/v2/rum/update-a-rum-application-returns-ok-response.json new file mode 100644 index 0000000000..e50e87a3b2 --- /dev/null +++ b/test-runner-data/v2/rum/update-a-rum-application-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Update a RUM application returns \"OK\" response", + "operation_id": "UpdateRUMApplication", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RUMApplicationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "updated_name_for_my_existing_rum_application", + "type": "browser" + }, + "id": "{{ rum_application.data.id }}", + "type": "rum_application_update" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_application.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{id}" + }, + "scenario": "Update a RUM application returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/update-a-rum-application-returns-unprocessable-entity-response.json b/test-runner-data/v2/rum/update-a-rum-application-returns-unprocessable-entity-response.json new file mode 100644 index 0000000000..90fa358449 --- /dev/null +++ b/test-runner-data/v2/rum/update-a-rum-application-returns-unprocessable-entity-response.json @@ -0,0 +1,48 @@ +{ + "api": "RUM", + "expected_status": 422, + "feature": "RUM", + "id": "v2/RUM/Update a RUM application returns \"Unprocessable Entity.\" response", + "operation_id": "UpdateRUMApplication", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RUMApplicationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "this_id_will_not_match", + "type": "rum_application_update" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_application.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{id}" + }, + "scenario": "Update a RUM application returns \"Unprocessable Entity.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/rum/update-a-rum-application-with-product-scales-returns-ok-response.json b/test-runner-data/v2/rum/update-a-rum-application-with-product-scales-returns-ok-response.json new file mode 100644 index 0000000000..a335b9a684 --- /dev/null +++ b/test-runner-data/v2/rum/update-a-rum-application-with-product-scales-returns-ok-response.json @@ -0,0 +1,53 @@ +{ + "api": "RUM", + "expected_status": 200, + "feature": "RUM", + "id": "v2/RUM/Update a RUM application with Product Scales returns \"OK\" response", + "operation_id": "UpdateRUMApplication", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RUMApplicationUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "updated_rum_with_product_scales", + "product_analytics_retention_state": "MAX", + "rum_event_processing_state": "ALL" + }, + "id": "{{ rum_application.data.id }}", + "type": "rum_application_update" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rum_application.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/rum/applications/{id}" + }, + "scenario": "Update a RUM application with Product Scales returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/create-a-new-rule-returns-bad-request-response.json b/test-runner-data/v2/scorecards/create-a-new-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..370408483d --- /dev/null +++ b/test-runner-data/v2/scorecards/create-a-new-rule-returns-bad-request-response.json @@ -0,0 +1,36 @@ +{ + "api": "Scorecards", + "expected_status": 400, + "feature": "Scorecards", + "id": "v2/Scorecards/Create a new rule returns \"Bad Request\" response", + "operation_id": "CreateScorecardRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "level": 2, + "name": "Team Defined", + "scorecard_id": "NOT.FOUND" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/scorecard/rules" + }, + "scenario": "Create a new rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/create-a-new-rule-returns-created-response.json b/test-runner-data/v2/scorecards/create-a-new-rule-returns-created-response.json new file mode 100644 index 0000000000..ffeeac455a --- /dev/null +++ b/test-runner-data/v2/scorecards/create-a-new-rule-returns-created-response.json @@ -0,0 +1,35 @@ +{ + "api": "Scorecards", + "expected_status": 201, + "feature": "Scorecards", + "id": "v2/Scorecards/Create a new rule returns \"Created\" response", + "operation_id": "CreateScorecardRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "{{unique}}", + "scorecard_name": "Observability Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/scorecard/rules" + }, + "scenario": "Create a new rule returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/create-outcomes-batch-returns-bad-request-response.json b/test-runner-data/v2/scorecards/create-outcomes-batch-returns-bad-request-response.json new file mode 100644 index 0000000000..285f0b71c8 --- /dev/null +++ b/test-runner-data/v2/scorecards/create-outcomes-batch-returns-bad-request-response.json @@ -0,0 +1,40 @@ +{ + "api": "Scorecards", + "expected_status": 400, + "feature": "Scorecards", + "id": "v2/Scorecards/Create outcomes batch returns \"Bad Request\" response", + "operation_id": "CreateScorecardOutcomesBatch", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OutcomesBatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "results": [ + { + "remarks": "See: Services", + "rule_id": "{{ create_scorecard_rule.data.id }}", + "service_name": "", + "state": "pass" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/scorecard/outcomes/batch" + }, + "scenario": "Create outcomes batch returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/create-outcomes-batch-returns-ok-response.json b/test-runner-data/v2/scorecards/create-outcomes-batch-returns-ok-response.json new file mode 100644 index 0000000000..52da62d539 --- /dev/null +++ b/test-runner-data/v2/scorecards/create-outcomes-batch-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "Scorecards", + "expected_status": 200, + "feature": "Scorecards", + "id": "v2/Scorecards/Create outcomes batch returns \"OK\" response", + "operation_id": "CreateScorecardOutcomesBatch", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OutcomesBatchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "results": [ + { + "remarks": "See: Services", + "rule_id": "{{ create_scorecard_rule.data.id }}", + "service_name": "my-service", + "state": "pass" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/scorecard/outcomes/batch" + }, + "scenario": "Create outcomes batch returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/delete-a-rule-returns-not-found-response.json b/test-runner-data/v2/scorecards/delete-a-rule-returns-not-found-response.json new file mode 100644 index 0000000000..79c55843ff --- /dev/null +++ b/test-runner-data/v2/scorecards/delete-a-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "Scorecards", + "expected_status": 404, + "feature": "Scorecards", + "id": "v2/Scorecards/Delete a rule returns \"Not Found\" response", + "operation_id": "DeleteScorecardRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2a4f524e-168a-429d-bb75-7b1ffeab0cbb" + }, + "style": null + } + ], + "path": "/api/v2/scorecard/rules/{rule_id}" + }, + "scenario": "Delete a rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/delete-a-rule-returns-ok-response.json b/test-runner-data/v2/scorecards/delete-a-rule-returns-ok-response.json new file mode 100644 index 0000000000..78c183c6a2 --- /dev/null +++ b/test-runner-data/v2/scorecards/delete-a-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Scorecards", + "expected_status": 204, + "feature": "Scorecards", + "id": "v2/Scorecards/Delete a rule returns \"OK\" response", + "operation_id": "DeleteScorecardRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "create_scorecard_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/scorecard/rules/{rule_id}" + }, + "scenario": "Delete a rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/list-all-rule-outcomes-returns-ok-response-with-pagination.json b/test-runner-data/v2/scorecards/list-all-rule-outcomes-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..483250222e --- /dev/null +++ b/test-runner-data/v2/scorecards/list-all-rule-outcomes-returns-ok-response-with-pagination.json @@ -0,0 +1,67 @@ +{ + "api": "Scorecards", + "expected_status": 200, + "feature": "Scorecards", + "id": "v2/Scorecards/List all rule outcomes returns \"OK\" response with pagination", + "operation_id": "ListScorecardOutcomes", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "fields[outcome]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "state" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[outcome][service_name]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "my-service" + }, + "style": null + } + ], + "path": "/api/v2/scorecard/outcomes" + }, + "scenario": "List all rule outcomes returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/list-all-rule-outcomes-returns-ok-response.json b/test-runner-data/v2/scorecards/list-all-rule-outcomes-returns-ok-response.json new file mode 100644 index 0000000000..af826fac3c --- /dev/null +++ b/test-runner-data/v2/scorecards/list-all-rule-outcomes-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Scorecards", + "expected_status": 200, + "feature": "Scorecards", + "id": "v2/Scorecards/List all rule outcomes returns \"OK\" response", + "operation_id": "ListScorecardOutcomes", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/scorecard/outcomes" + }, + "scenario": "List all rule outcomes returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/list-all-rules-returns-ok-response-with-pagination.json b/test-runner-data/v2/scorecards/list-all-rules-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..abe06f5550 --- /dev/null +++ b/test-runner-data/v2/scorecards/list-all-rules-returns-ok-response-with-pagination.json @@ -0,0 +1,67 @@ +{ + "api": "Scorecards", + "expected_status": 200, + "feature": "Scorecards", + "id": "v2/Scorecards/List all rules returns \"OK\" response with pagination", + "operation_id": "ListScorecardRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "fields[rule]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "name" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[rule][custom]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v2/scorecard/rules" + }, + "scenario": "List all rules returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/list-all-rules-returns-ok-response.json b/test-runner-data/v2/scorecards/list-all-rules-returns-ok-response.json new file mode 100644 index 0000000000..77f32d6345 --- /dev/null +++ b/test-runner-data/v2/scorecards/list-all-rules-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Scorecards", + "expected_status": 200, + "feature": "Scorecards", + "id": "v2/Scorecards/List all rules returns \"OK\" response", + "operation_id": "ListScorecardRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/scorecard/rules" + }, + "scenario": "List all rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/update-an-existing-rule-returns-rule-updated-successfully-response.json b/test-runner-data/v2/scorecards/update-an-existing-rule-returns-rule-updated-successfully-response.json new file mode 100644 index 0000000000..d654116222 --- /dev/null +++ b/test-runner-data/v2/scorecards/update-an-existing-rule-returns-rule-updated-successfully-response.json @@ -0,0 +1,53 @@ +{ + "api": "Scorecards", + "expected_status": 200, + "feature": "Scorecards", + "id": "v2/Scorecards/Update an existing rule returns \"Rule updated successfully\" response", + "operation_id": "UpdateScorecardRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "Updated description via test", + "enabled": true, + "name": "{{create_scorecard_rule.data.attributes.name}}", + "scorecard_name": "{{create_scorecard_rule.data.attributes.scorecard_name}}" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "create_scorecard_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/scorecard/rules/{rule_id}" + }, + "scenario": "Update an existing rule returns \"Rule updated successfully\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/update-an-existing-scorecard-rule-returns-bad-request-response.json b/test-runner-data/v2/scorecards/update-an-existing-scorecard-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..1d48086eca --- /dev/null +++ b/test-runner-data/v2/scorecards/update-an-existing-scorecard-rule-returns-bad-request-response.json @@ -0,0 +1,53 @@ +{ + "api": "Scorecards", + "expected_status": 400, + "feature": "Scorecards", + "id": "v2/Scorecards/Update an existing scorecard rule returns \"Bad Request\" response", + "operation_id": "UpdateScorecardRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "level": 2, + "name": "Team Defined", + "scorecard_id": "NOT.FOUND" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "create_scorecard_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/scorecard/rules/{rule_id}" + }, + "scenario": "Update an existing scorecard rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/update-an-existing-scorecard-rule-returns-not-found-response.json b/test-runner-data/v2/scorecards/update-an-existing-scorecard-rule-returns-not-found-response.json new file mode 100644 index 0000000000..8ea4ffb47d --- /dev/null +++ b/test-runner-data/v2/scorecards/update-an-existing-scorecard-rule-returns-not-found-response.json @@ -0,0 +1,53 @@ +{ + "api": "Scorecards", + "expected_status": 404, + "feature": "Scorecards", + "id": "v2/Scorecards/Update an existing scorecard rule returns \"Not Found\" response", + "operation_id": "UpdateScorecardRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "level": 2, + "name": "Team Defined", + "scorecard_name": "Deployments automated via Deployment Trains" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/scorecard/rules/{rule_id}" + }, + "scenario": "Update an existing scorecard rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/update-scorecard-outcomes-asynchronously-returns-accepted-response.json b/test-runner-data/v2/scorecards/update-scorecard-outcomes-asynchronously-returns-accepted-response.json new file mode 100644 index 0000000000..6a9c79cfe1 --- /dev/null +++ b/test-runner-data/v2/scorecards/update-scorecard-outcomes-asynchronously-returns-accepted-response.json @@ -0,0 +1,40 @@ +{ + "api": "Scorecards", + "expected_status": 202, + "feature": "Scorecards", + "id": "v2/Scorecards/Update Scorecard outcomes asynchronously returns \"Accepted\" response", + "operation_id": "UpdateScorecardOutcomes", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateOutcomesAsyncRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "results": [ + { + "entity_reference": "service:my-service", + "remarks": "See: Services", + "rule_id": "{{create_scorecard_rule.data.id}}", + "state": "pass" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/scorecard/outcomes" + }, + "scenario": "Update Scorecard outcomes asynchronously returns \"Accepted\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/update-scorecard-outcomes-asynchronously-returns-bad-request-response.json b/test-runner-data/v2/scorecards/update-scorecard-outcomes-asynchronously-returns-bad-request-response.json new file mode 100644 index 0000000000..f9f89538fc --- /dev/null +++ b/test-runner-data/v2/scorecards/update-scorecard-outcomes-asynchronously-returns-bad-request-response.json @@ -0,0 +1,39 @@ +{ + "api": "Scorecards", + "expected_status": 400, + "feature": "Scorecards", + "id": "v2/Scorecards/Update Scorecard outcomes asynchronously returns \"Bad Request\" response", + "operation_id": "UpdateScorecardOutcomes", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateOutcomesAsyncRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "results": [ + { + "entity_reference": "service:my-service", + "rule_id": "{{create_scorecard_rule.data.id}}", + "state": "INVALID" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/scorecard/outcomes" + }, + "scenario": "Update Scorecard outcomes asynchronously returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/scorecards/update-scorecard-outcomes-asynchronously-returns-conflict-response.json b/test-runner-data/v2/scorecards/update-scorecard-outcomes-asynchronously-returns-conflict-response.json new file mode 100644 index 0000000000..bf83f9aa9b --- /dev/null +++ b/test-runner-data/v2/scorecards/update-scorecard-outcomes-asynchronously-returns-conflict-response.json @@ -0,0 +1,40 @@ +{ + "api": "Scorecards", + "expected_status": 409, + "feature": "Scorecards", + "id": "v2/Scorecards/Update Scorecard outcomes asynchronously returns \"Conflict\" response", + "operation_id": "UpdateScorecardOutcomes", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateOutcomesAsyncRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "results": [ + { + "entity_reference": "service:my-service", + "remarks": "See: Services", + "rule_id": "INVALID.RULE_ID", + "state": "pass" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/scorecard/outcomes" + }, + "scenario": "Update Scorecard outcomes asynchronously returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/seats/assign-seats-to-users-returns-unprocessable-entity-response-when-product-code-is-empty.json b/test-runner-data/v2/seats/assign-seats-to-users-returns-unprocessable-entity-response-when-product-code-is-empty.json new file mode 100644 index 0000000000..171f893667 --- /dev/null +++ b/test-runner-data/v2/seats/assign-seats-to-users-returns-unprocessable-entity-response-when-product-code-is-empty.json @@ -0,0 +1,36 @@ +{ + "api": "Seats", + "expected_status": 422, + "feature": "Seats", + "id": "v2/Seats/Assign seats to users returns \"Unprocessable Entity\" response when product_code is empty", + "operation_id": "AssignSeatsUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AssignSeatsUserRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "product_code": "", + "user_uuids": [ + "{{ user.data.id }}" + ] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/seats/users" + }, + "scenario": "Assign seats to users returns \"Unprocessable Entity\" response when product_code is empty", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/seats/assign-seats-to-users-returns-unprocessable-entity-response-when-user-uuids-is-empty.json b/test-runner-data/v2/seats/assign-seats-to-users-returns-unprocessable-entity-response-when-user-uuids-is-empty.json new file mode 100644 index 0000000000..156e27acdd --- /dev/null +++ b/test-runner-data/v2/seats/assign-seats-to-users-returns-unprocessable-entity-response-when-user-uuids-is-empty.json @@ -0,0 +1,34 @@ +{ + "api": "Seats", + "expected_status": 422, + "feature": "Seats", + "id": "v2/Seats/Assign seats to users returns \"Unprocessable Entity\" response when user_uuids is empty", + "operation_id": "AssignSeatsUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AssignSeatsUserRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "product_code": "incident_response", + "user_uuids": [] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/seats/users" + }, + "scenario": "Assign seats to users returns \"Unprocessable Entity\" response when user_uuids is empty", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/seats/assign-seats-to-users-returns-unprocessable-entity-response.json b/test-runner-data/v2/seats/assign-seats-to-users-returns-unprocessable-entity-response.json new file mode 100644 index 0000000000..b98cdfa460 --- /dev/null +++ b/test-runner-data/v2/seats/assign-seats-to-users-returns-unprocessable-entity-response.json @@ -0,0 +1,36 @@ +{ + "api": "Seats", + "expected_status": 422, + "feature": "Seats", + "id": "v2/Seats/Assign seats to users returns \"Unprocessable Entity\" response", + "operation_id": "AssignSeatsUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AssignSeatsUserRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "product_code": "", + "user_uuids": [ + "" + ] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/seats/users" + }, + "scenario": "Assign seats to users returns \"Unprocessable Entity\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/seats/get-users-with-seats-returns-ok-response.json b/test-runner-data/v2/seats/get-users-with-seats-returns-ok-response.json new file mode 100644 index 0000000000..0c8da29b25 --- /dev/null +++ b/test-runner-data/v2/seats/get-users-with-seats-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Seats", + "expected_status": 200, + "feature": "Seats", + "id": "v2/Seats/Get users with seats returns \"OK\" response", + "operation_id": "GetSeatsUsers", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "product_code", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "incident_response" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 100 + }, + "style": null + } + ], + "path": "/api/v2/seats/users" + }, + "scenario": "Get users with seats returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response-when-product-code-is-empty.json b/test-runner-data/v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response-when-product-code-is-empty.json new file mode 100644 index 0000000000..843236bff0 --- /dev/null +++ b/test-runner-data/v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response-when-product-code-is-empty.json @@ -0,0 +1,36 @@ +{ + "api": "Seats", + "expected_status": 422, + "feature": "Seats", + "id": "v2/Seats/Unassign seats from users returns \"Unprocessable Entity\" response when product_code is empty", + "operation_id": "UnassignSeatsUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UnassignSeatsUserRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "product_code": "", + "user_uuids": [ + "{{ user.data.id }}" + ] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/seats/users" + }, + "scenario": "Unassign seats from users returns \"Unprocessable Entity\" response when product_code is empty", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response-when-user-uuids-is-empty.json b/test-runner-data/v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response-when-user-uuids-is-empty.json new file mode 100644 index 0000000000..c93a08854f --- /dev/null +++ b/test-runner-data/v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response-when-user-uuids-is-empty.json @@ -0,0 +1,34 @@ +{ + "api": "Seats", + "expected_status": 422, + "feature": "Seats", + "id": "v2/Seats/Unassign seats from users returns \"Unprocessable Entity\" response when user_uuids is empty", + "operation_id": "UnassignSeatsUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UnassignSeatsUserRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "product_code": "incident_response", + "user_uuids": [] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/seats/users" + }, + "scenario": "Unassign seats from users returns \"Unprocessable Entity\" response when user_uuids is empty", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response.json b/test-runner-data/v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response.json new file mode 100644 index 0000000000..24ae6a61f1 --- /dev/null +++ b/test-runner-data/v2/seats/unassign-seats-from-users-returns-unprocessable-entity-response.json @@ -0,0 +1,36 @@ +{ + "api": "Seats", + "expected_status": 422, + "feature": "Seats", + "id": "v2/Seats/Unassign seats from users returns \"Unprocessable Entity\" response", + "operation_id": "UnassignSeatsUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UnassignSeatsUserRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "product_code": "", + "user_uuids": [ + "" + ] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/seats/users" + }, + "scenario": "Unassign seats from users returns \"Unprocessable Entity\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/attach-security-finding-to-a-case-returns-ok-response.json b/test-runner-data/v2/security-monitoring/attach-security-finding-to-a-case-returns-ok-response.json new file mode 100644 index 0000000000..36e42b6c56 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/attach-security-finding-to-a-case-returns-ok-response.json @@ -0,0 +1,58 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Attach security finding to a case returns \"OK\" response", + "operation_id": "AttachCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AttachCaseRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "7d16945b-baf8-411e-ab2a-20fe43af1ea3", + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7d16945b-baf8-411e-ab2a-20fe43af1ea3" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/cases/{case_id}" + }, + "scenario": "Attach security finding to a case returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/attach-security-finding-to-a-jira-issue-returns-ok-response.json b/test-runner-data/v2/security-monitoring/attach-security-finding-to-a-jira-issue-returns-ok-response.json new file mode 100644 index 0000000000..3895beefaf --- /dev/null +++ b/test-runner-data/v2/security-monitoring/attach-security-finding-to-a-jira-issue-returns-ok-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Attach security finding to a Jira issue returns \"OK\" response", + "operation_id": "AttachJiraIssue", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AttachJiraIssueRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/jira_issues" + }, + "scenario": "Attach security finding to a Jira issue returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-case-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-case-returns-bad-request-response.json new file mode 100644 index 0000000000..bef629250f --- /dev/null +++ b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-case-returns-bad-request-response.json @@ -0,0 +1,53 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Attach security findings to a case returns \"Bad Request\" response", + "operation_id": "AttachCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AttachCaseRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "7d16945b-baf8-411e-ab2a-20fe43af1ea3", + "relationships": { + "findings": { + "data": [] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7d16945b-baf8-411e-ab2a-20fe43af1ea3" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/cases/{case_id}" + }, + "scenario": "Attach security findings to a case returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-case-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-case-returns-not-found-response.json new file mode 100644 index 0000000000..c53bd4db22 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-case-returns-not-found-response.json @@ -0,0 +1,58 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Attach security findings to a case returns \"Not Found\" response", + "operation_id": "AttachCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AttachCaseRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "wrong-case-id", + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "wrong-case-id" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/cases/{case_id}" + }, + "scenario": "Attach security findings to a case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-case-returns-ok-response.json b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-case-returns-ok-response.json new file mode 100644 index 0000000000..69abf88391 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-case-returns-ok-response.json @@ -0,0 +1,62 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Attach security findings to a case returns \"OK\" response", + "operation_id": "AttachCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AttachCaseRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "7d16945b-baf8-411e-ab2a-20fe43af1ea3", + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + }, + { + "id": "MmUzMzZkODQ2YTI3NDU0OTk4NDk3NzhkOTY5YjU2Zjh-YWJjZGI1ODI4OTYzNWM3ZmUwZTBlOWRkYTRiMGUyOGQ=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "case_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "7d16945b-baf8-411e-ab2a-20fe43af1ea3" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/cases/{case_id}" + }, + "scenario": "Attach security findings to a case returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-bad-request-response.json new file mode 100644 index 0000000000..05c1cb25ba --- /dev/null +++ b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-bad-request-response.json @@ -0,0 +1,44 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Attach security findings to a Jira issue returns \"Bad Request\" response", + "operation_id": "AttachJiraIssue", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AttachJiraIssueRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + }, + "relationships": { + "findings": { + "data": [] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/jira_issues" + }, + "scenario": "Attach security findings to a Jira issue returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-not-found-response.json new file mode 100644 index 0000000000..e767c1692f --- /dev/null +++ b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-not-found-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Attach security findings to a Jira issue returns \"Not Found\" response", + "operation_id": "AttachJiraIssue", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AttachJiraIssueRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "wrong-finding-id", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/jira_issues" + }, + "scenario": "Attach security findings to a Jira issue returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-ok-response.json b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-ok-response.json new file mode 100644 index 0000000000..7bfe17025a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/attach-security-findings-to-a-jira-issue-returns-ok-response.json @@ -0,0 +1,53 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Attach security findings to a Jira issue returns \"OK\" response", + "operation_id": "AttachJiraIssue", + "request": { + "body": { + "schema": { + "format": null, + "ref": "AttachJiraIssueRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=", + "type": "findings" + }, + { + "id": "MTNjN2ZmYWMzMDIxYmU1ZDFiZDRjNWUwN2I1NzVmY2F-YTA3MzllMTUzNWM3NmEyZjdiNzEzOWM5YmViZTMzOGM=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/jira_issues" + }, + "scenario": "Attach security findings to a Jira issue returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/bulk-export-security-monitoring-rules-returns-ok-response.json b/test-runner-data/v2/security-monitoring/bulk-export-security-monitoring-rules-returns-ok-response.json new file mode 100644 index 0000000000..6f5595fffc --- /dev/null +++ b/test-runner-data/v2/security-monitoring/bulk-export-security-monitoring-rules-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Bulk export security monitoring rules returns \"OK\" response", + "operation_id": "BulkExportSecurityMonitoringRules", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleBulkExportPayload", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "ruleIds": [ + "{{ security_rule.id }}" + ] + }, + "type": "security_monitoring_rules_bulk_export" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules/bulk_export" + }, + "scenario": "Bulk export security monitoring rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/cancel-a-historical-job-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/cancel-a-historical-job-returns-bad-request-response.json new file mode 100644 index 0000000000..56b1d5a25a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/cancel-a-historical-job-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Cancel a historical job returns \"Bad Request\" response", + "operation_id": "CancelHistoricalJob", + "request": { + "body": null, + "content_type": null, + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "inva-lid" + }, + "style": null + } + ], + "path": "/api/v2/siem-historical-detections/jobs/{job_id}/cancel" + }, + "scenario": "Cancel a historical job returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/cancel-a-historical-job-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/cancel-a-historical-job-returns-not-found-response.json new file mode 100644 index 0000000000..8d57bdbff2 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/cancel-a-historical-job-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Cancel a historical job returns \"Not Found\" response", + "operation_id": "CancelHistoricalJob", + "request": { + "body": null, + "content_type": null, + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93" + }, + "style": null + } + ], + "path": "/api/v2/siem-historical-detections/jobs/{job_id}/cancel" + }, + "scenario": "Cancel a historical job returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/cancel-a-historical-job-returns-ok-response.json b/test-runner-data/v2/security-monitoring/cancel-a-historical-job-returns-ok-response.json new file mode 100644 index 0000000000..4b186273dd --- /dev/null +++ b/test-runner-data/v2/security-monitoring/cancel-a-historical-job-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Cancel a historical job returns \"OK\" response", + "operation_id": "CancelHistoricalJob", + "request": { + "body": null, + "content_type": null, + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "historical_job.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/siem-historical-detections/jobs/{job_id}/cancel" + }, + "scenario": "Cancel a historical job returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/change-the-related-incidents-of-a-security-signal-returns-ok-response.json b/test-runner-data/v2/security-monitoring/change-the-related-incidents-of-a-security-signal-returns-ok-response.json new file mode 100644 index 0000000000..b44185b2b5 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/change-the-related-incidents-of-a-security-signal-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Change the related incidents of a security signal returns \"OK\" response", + "operation_id": "EditSecurityMonitoringSignalIncidents", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringSignalIncidentsUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "incident_ids": [ + 2066 + ] + } + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "signal_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/signals/{signal_id}/incidents" + }, + "scenario": "Change the related incidents of a security signal returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/change-the-triage-state-of-a-security-signal-returns-ok-response.json b/test-runner-data/v2/security-monitoring/change-the-triage-state-of-a-security-signal-returns-ok-response.json new file mode 100644 index 0000000000..bae4175fd9 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/change-the-triage-state-of-a-security-signal-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Change the triage state of a security signal returns \"OK\" response", + "operation_id": "EditSecurityMonitoringSignalState", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringSignalStateUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "archive_reason": "none", + "state": "open" + } + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "signal_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/signals/{signal_id}/state" + }, + "scenario": "Change the triage state of a security signal returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/convert-a-job-result-to-a-signal-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/convert-a-job-result-to-a-signal-returns-bad-request-response.json new file mode 100644 index 0000000000..cd4a56438f --- /dev/null +++ b/test-runner-data/v2/security-monitoring/convert-a-job-result-to-a-signal-returns-bad-request-response.json @@ -0,0 +1,40 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Convert a job result to a signal returns \"Bad Request\" response", + "operation_id": "ConvertJobResultToSignal", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ConvertJobResultsToSignalsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "jobResultIds": [ + "" + ], + "notifications": [ + "" + ], + "signalMessage": "A large number of failed login attempts.", + "signalSeverity": "critical" + }, + "type": "historicalDetectionsJobResultSignalConversion" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/siem-historical-detections/jobs/signal_convert" + }, + "scenario": "Convert a job result to a signal returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/convert-a-rule-from-json-to-terraform-returns-ok-response.json b/test-runner-data/v2/security-monitoring/convert-a-rule-from-json-to-terraform-returns-ok-response.json new file mode 100644 index 0000000000..135bd5d575 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/convert-a-rule-from-json-to-terraform-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Convert a rule from JSON to Terraform returns \"OK\" response", + "operation_id": "ConvertSecurityMonitoringRuleFromJSONToTerraform", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleConvertPayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "_{{ unique_hash }}", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metric": "", + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules/convert" + }, + "scenario": "Convert a rule from JSON to Terraform returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/convert-an-existing-rule-from-json-to-terraform-returns-ok-response.json b/test-runner-data/v2/security-monitoring/convert-an-existing-rule-from-json-to-terraform-returns-ok-response.json new file mode 100644 index 0000000000..2acdca5ba8 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/convert-an-existing-rule-from-json-to-terraform-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Convert an existing rule from JSON to Terraform returns \"OK\" response", + "operation_id": "ConvertExistingSecurityMonitoringRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule_hash.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}/convert" + }, + "scenario": "Convert an existing rule from JSON to Terraform returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/convert-security-monitoring-resource-to-terraform-returns-ok-response.json b/test-runner-data/v2/security-monitoring/convert-security-monitoring-resource-to-terraform-returns-ok-response.json new file mode 100644 index 0000000000..fc4ecedbad --- /dev/null +++ b/test-runner-data/v2/security-monitoring/convert-security-monitoring-resource-to-terraform-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Convert security monitoring resource to Terraform returns \"OK\" response", + "operation_id": "ConvertSecurityMonitoringTerraformResource", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringTerraformConvertRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "resource_json": { + "enabled": true, + "name": "Example-Security-Monitoring", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test" + } + }, + "id": "abc-123", + "type": "convert_resource" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "resource_type", + "required": true, + "schema": { + "format": null, + "ref": "SecurityMonitoringTerraformResourceType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "suppressions" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/terraform/{resource_type}/convert" + }, + "scenario": "Convert security monitoring resource to Terraform returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-cloud-configuration-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-cloud-configuration-rule-returns-ok-response.json new file mode 100644 index 0000000000..75ef325b7a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-cloud-configuration-rule-returns-ok-response.json @@ -0,0 +1,70 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a cloud_configuration rule returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "notifications": [ + "channel" + ], + "status": "info" + } + ], + "complianceSignalOptions": { + "userActivationStatus": true, + "userGroupByFields": [ + "@account_id" + ] + }, + "filters": [ + { + "action": "require", + "query": "resource_id:helo*" + }, + { + "action": "suppress", + "query": "control:helo*" + } + ], + "isEnabled": false, + "message": "ddd", + "name": "{{ unique }}_cloud", + "options": { + "complianceRuleOptions": { + "complexRule": false, + "regoRule": { + "policy": "package datadog\n\nimport data.datadog.output as dd_output\n\nimport future.keywords.contains\nimport future.keywords.if\nimport future.keywords.in\n\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\n\neval(iam_service_account_key) = \"skip\" if {\n\tiam_service_account_key.disabled\n} else = \"pass\" if {\n\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\n} else = \"fail\"\n\n# This part remains unchanged for all rules\nresults contains result if {\n\tsome resource in input.resources[input.main_resource_type]\n\tresult := dd_output.format(resource, eval(resource))\n}\n", + "resourceTypes": [ + "gcp_compute_disk" + ] + }, + "resourceType": "gcp_compute_disk" + } + }, + "tags": [ + "my:tag" + ], + "type": "cloud_configuration" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a cloud_configuration rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-critical-asset-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-critical-asset-returns-ok-response.json new file mode 100644 index 0000000000..ce1621fdbc --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-critical-asset-returns-ok-response.json @@ -0,0 +1,39 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a critical asset returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringCriticalAsset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringCriticalAssetCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "query": "host:{{ unique_lower_alnum }}", + "rule_query": "type:(log_detection OR signal_correlation OR workload_security OR application_security) source:cloudtrail", + "severity": "decrease", + "tags": [ + "team:security", + "env:test" + ] + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/critical_assets" + }, + "scenario": "Create a critical asset returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-custom-framework-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/create-a-custom-framework-returns-bad-request-response.json new file mode 100644 index 0000000000..e566e1f0e2 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-custom-framework-returns-bad-request-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a custom framework returns \"Bad Request\" response", + "operation_id": "CreateCustomFramework", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateCustomFrameworkRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "handle": "", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cloud_security_management/custom_frameworks" + }, + "scenario": "Create a custom framework returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-custom-framework-returns-conflict-response.json b/test-runner-data/v2/security-monitoring/create-a-custom-framework-returns-conflict-response.json new file mode 100644 index 0000000000..ca5b5f0d94 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-custom-framework-returns-conflict-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 409, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a custom framework returns \"Conflict\" response", + "operation_id": "CreateCustomFramework", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateCustomFrameworkRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cloud_security_management/custom_frameworks" + }, + "scenario": "Create a custom framework returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-custom-framework-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-custom-framework-returns-ok-response.json new file mode 100644 index 0000000000..91801a1d5c --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-custom-framework-returns-ok-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a custom framework returns \"OK\" response", + "operation_id": "CreateCustomFramework", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateCustomFrameworkRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/cloud_security_management/custom_frameworks" + }, + "scenario": "Create a custom framework returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-returns-ok-response.json new file mode 100644 index 0000000000..9207a098a0 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-returns-ok-response.json @@ -0,0 +1,64 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "{{ unique }}", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metric": "", + "query": "@test:true" + } + ], + "referenceTables": [ + { + "checkPresence": true, + "columnName": "value", + "logFieldPath": "testtag", + "ruleQueryName": "a", + "tableName": "synthetics_test_reference_table_dont_delete" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-anomaly-detection-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-anomaly-detection-returns-ok-response.json new file mode 100644 index 0000000000..fb8cd294f6 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-anomaly-detection-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule with detection method 'anomaly_detection' returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0.995", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "An anomaly detection rule", + "name": "{{ unique }}", + "options": { + "anomalyDetectionOptions": { + "bucketDuration": 300, + "detectionTolerance": 3, + "learningDuration": 24, + "learningPeriodBaseline": 10 + }, + "detectionMethod": "anomaly_detection", + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [ + "@usr.email", + "@network.client.ip" + ], + "hasOptionalGroupByFields": false, + "name": "", + "query": "service:app status:error" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule with detection method 'anomaly_detection' returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-anomaly-detection-with-enabled-feature-instantaneousbaseline-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-anomaly-detection-with-enabled-feature-instantaneousbaseline-returns-ok-response.json new file mode 100644 index 0000000000..bed3758a87 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-anomaly-detection-with-enabled-feature-instantaneousbaseline-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule with detection method 'anomaly_detection' with enabled feature 'instantaneousBaseline' returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0.995", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "An anomaly detection rule", + "name": "{{ unique }}", + "options": { + "anomalyDetectionOptions": { + "bucketDuration": 300, + "detectionTolerance": 3, + "instantaneousBaseline": true, + "learningDuration": 24 + }, + "detectionMethod": "anomaly_detection", + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [ + "@usr.email", + "@network.client.ip" + ], + "hasOptionalGroupByFields": false, + "name": "", + "query": "service:app status:error" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule with detection method 'anomaly_detection' with enabled feature 'instantaneousBaseline' returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-sequence-detection-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-sequence-detection-returns-ok-response.json new file mode 100644 index 0000000000..361d53bbf8 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-sequence-detection-returns-ok-response.json @@ -0,0 +1,87 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule with detection method 'sequence_detection' returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "step_b > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "isEnabled": true, + "message": "Logs and signals asdf", + "name": "{{ unique }}", + "options": { + "detectionMethod": "sequence_detection", + "evaluationWindow": 0, + "keepAlive": 300, + "maxSignalDuration": 600, + "sequenceDetectionOptions": { + "stepTransitions": [ + { + "child": "step_b", + "evaluationWindow": 900, + "parent": "step_a" + } + ], + "steps": [ + { + "condition": "a > 0", + "evaluationWindow": 60, + "name": "step_a" + }, + { + "condition": "b > 0", + "evaluationWindow": 60, + "name": "step_b" + } + ] + } + }, + "queries": [ + { + "aggregation": "count", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [], + "hasOptionalGroupByFields": false, + "name": "", + "query": "service:logs-rule-reducer source:paul test2" + }, + { + "aggregation": "count", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [], + "hasOptionalGroupByFields": false, + "name": "", + "query": "service:logs-rule-reducer source:paul test1" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule with detection method 'sequence_detection' returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-third-party-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-third-party-returns-ok-response.json new file mode 100644 index 0000000000..64a8c0e199 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-detection-method-third-party-returns-ok-response.json @@ -0,0 +1,65 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule with detection method 'third_party' returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [], + "isEnabled": true, + "message": "This is a third party rule", + "name": "{{ unique }}", + "options": { + "detectionMethod": "third_party", + "keepAlive": 0, + "maxSignalDuration": 600, + "thirdPartyRuleOptions": { + "defaultStatus": "info", + "rootQueries": [ + { + "groupByFields": [ + "instance-id" + ], + "query": "source:guardduty @details.alertType:*EC2*" + }, + { + "groupByFields": [], + "query": "source:guardduty" + } + ] + } + }, + "queries": [], + "thirdPartyCases": [ + { + "name": "high", + "query": "status:error", + "status": "high" + }, + { + "name": "low", + "query": "status:info", + "status": "low" + } + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule with detection method 'third_party' returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-application-security-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-application-security-returns-ok-response.json new file mode 100644 index 0000000000..a30f86c883 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-application-security-returns-ok-response.json @@ -0,0 +1,81 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule with type 'application_security 'returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "actions": [ + { + "options": { + "duration": 900 + }, + "type": "block_ip" + }, + { + "options": { + "userBehaviorName": "behavior" + }, + "type": "user_behavior" + }, + { + "options": { + "flaggedIPType": "FLAGGED" + }, + "type": "flag_ip" + } + ], + "condition": "a > 100000", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "groupSignalsBy": [ + "service" + ], + "isEnabled": true, + "message": "Test rule", + "name": "{{unique}}_appsec_rule", + "options": { + "detectionMethod": "threshold", + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "service", + "@http.client_ip" + ], + "query": "@appsec.security_activity:business_logic.users.login.failure" + } + ], + "tags": [], + "type": "application_security" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule with type 'application_security 'returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-impossible-travel-and-baselineuserlocationsduration-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-impossible-travel-and-baselineuserlocationsduration-returns-ok-response.json new file mode 100644 index 0000000000..d53323b9ac --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-impossible-travel-and-baselineuserlocationsduration-returns-ok-response.json @@ -0,0 +1,62 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule with type 'impossible_travel' and baselineUserLocationsDuration returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "test", + "name": "{{ unique }}", + "options": { + "detectionMethod": "impossible_travel", + "evaluationWindow": 900, + "impossibleTravelOptions": { + "baselineUserLocations": true, + "baselineUserLocationsDuration": 7 + }, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "geo_data", + "distinctFields": [], + "groupByFields": [ + "@usr.id" + ], + "metric": "@network.client.geoip", + "query": "*" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule with type 'impossible_travel' and baselineUserLocationsDuration returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-impossible-travel-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-impossible-travel-returns-ok-response.json new file mode 100644 index 0000000000..5a8bf0669a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-impossible-travel-returns-ok-response.json @@ -0,0 +1,61 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule with type 'impossible_travel' returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "test", + "name": "{{ unique }}", + "options": { + "detectionMethod": "impossible_travel", + "evaluationWindow": 900, + "impossibleTravelOptions": { + "baselineUserLocations": false + }, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "geo_data", + "distinctFields": [], + "groupByFields": [ + "@usr.id" + ], + "metric": "@network.client.geoip", + "query": "*" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule with type 'impossible_travel' returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-signal-correlation-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-signal-correlation-returns-ok-response.json new file mode 100644 index 0000000000..becea3819c --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-signal-correlation-returns-ok-response.json @@ -0,0 +1,63 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule with type 'signal_correlation' returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0 && b > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test signal correlation rule", + "name": "{{ unique }}_signal_rule", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "event_count", + "correlatedByFields": [ + "host" + ], + "correlatedQueryIndex": 1, + "ruleId": "{{ security_rule.id }}" + }, + { + "aggregation": "event_count", + "correlatedByFields": [ + "host" + ], + "ruleId": "{{ security_rule_bis.id }}" + } + ], + "tags": [], + "type": "signal_correlation" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule with type 'signal_correlation' returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-workload-security-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-workload-security-returns-ok-response.json new file mode 100644 index 0000000000..0763e41c59 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-detection-rule-with-type-workload-security-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a detection rule with type 'workload_security' returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "{{ unique }}", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metric": "", + "query": "@test:true" + } + ], + "tags": [], + "type": "workload_security" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a detection rule with type 'workload_security' returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-due-date-rule-returns-successfully-created-the-due-date-rule-response.json b/test-runner-data/v2/security-monitoring/create-a-due-date-rule-returns-successfully-created-the-due-date-rule-response.json new file mode 100644 index 0000000000..fe97f7bd51 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-due-date-rule-returns-successfully-created-the-due-date-rule-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a due date rule returns \"Successfully created the due date rule\" response", + "operation_id": "CreateSecurityFindingsAutomationDueDateRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DueDateRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "action": { + "due_days_per_severity": [ + { + "due_in_days": 7, + "severity": "critical" + } + ], + "due_from": "first_seen" + }, + "enabled": true, + "name": "{{ unique }}", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "due_date_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/automation/due_date_rules" + }, + "scenario": "Create a due date rule returns \"Successfully created the due date rule\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-mute-rule-returns-successfully-created-the-mute-rule-response.json b/test-runner-data/v2/security-monitoring/create-a-mute-rule-returns-successfully-created-the-mute-rule-response.json new file mode 100644 index 0000000000..d69f08663d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-mute-rule-returns-successfully-created-the-mute-rule-response.json @@ -0,0 +1,43 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a mute rule returns \"Successfully created the mute rule\" response", + "operation_id": "CreateSecurityFindingsAutomationMuteRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MuteRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "action": { + "reason": "risk_accepted" + }, + "enabled": true, + "name": "{{ unique }}", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "mute_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/automation/mute_rules" + }, + "scenario": "Create a mute rule returns \"Successfully created the mute rule\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-new-signal-based-notification-rule-returns-successfully-created-the-notification-rule-response.json b/test-runner-data/v2/security-monitoring/create-a-new-signal-based-notification-rule-returns-successfully-created-the-notification-rule-response.json new file mode 100644 index 0000000000..9d075f973f --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-new-signal-based-notification-rule-returns-successfully-created-the-notification-rule-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a new signal-based notification rule returns \"Successfully created the notification rule.\" response", + "operation_id": "CreateSignalNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/signals/notification_rules" + }, + "scenario": "Create a new signal-based notification rule returns \"Successfully created the notification rule.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-new-vulnerability-based-notification-rule-returns-successfully-created-the-notification-rule-response.json b/test-runner-data/v2/security-monitoring/create-a-new-vulnerability-based-notification-rule-returns-successfully-created-the-notification-rule-response.json new file mode 100644 index 0000000000..0857dc423e --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-new-vulnerability-based-notification-rule-returns-successfully-created-the-notification-rule-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a new vulnerability-based notification rule returns \"Successfully created the notification rule.\" response", + "operation_id": "CreateVulnerabilityNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/vulnerabilities/notification_rules" + }, + "scenario": "Create a new vulnerability-based notification rule returns \"Successfully created the notification rule.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-new-vulnerability-based-notification-rule-with-sast-and-secret-rule-types-returns-successfully-created-the-notification-rule-response.json b/test-runner-data/v2/security-monitoring/create-a-new-vulnerability-based-notification-rule-with-sast-and-secret-rule-types-returns-successfully-created-the-notification-rule-response.json new file mode 100644 index 0000000000..3f18681d56 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-new-vulnerability-based-notification-rule-with-sast-and-secret-rule-types-returns-successfully-created-the-notification-rule-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a new vulnerability-based notification rule with sast and secret rule types returns \"Successfully created the notification rule.\" response", + "operation_id": "CreateVulnerabilityNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "{{ unique }}", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "sast_vulnerability", + "secret_vulnerability" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/vulnerabilities/notification_rules" + }, + "scenario": "Create a new vulnerability-based notification rule with sast and secret rule types returns \"Successfully created the notification rule.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-scheduled-detection-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-scheduled-detection-rule-returns-ok-response.json new file mode 100644 index 0000000000..38c08f2a48 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-scheduled-detection-rule-returns-ok-response.json @@ -0,0 +1,62 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a scheduled detection rule returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "{{ unique }}", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "indexes": [ + "main" + ], + "query": "@test:true" + } + ], + "schedulingOptions": { + "rrule": "FREQ=HOURLY;INTERVAL=2;", + "start": "2025-06-18T12:00:00", + "timezone": "Europe/Paris" + }, + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a scheduled detection rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-scheduled-rule-without-rrule-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/create-a-scheduled-rule-without-rrule-returns-bad-request-response.json new file mode 100644 index 0000000000..301198fdb3 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-scheduled-rule-without-rrule-returns-bad-request-response.json @@ -0,0 +1,61 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a scheduled rule without rrule returns \"Bad Request\" response", + "operation_id": "CreateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "{{ unique }}", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "indexes": [ + "main" + ], + "query": "@test:true" + } + ], + "schedulingOptions": { + "start": "2025-06-18T12:00:00", + "timezone": "Europe/Paris" + }, + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "Create a scheduled rule without rrule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-security-filter-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-security-filter-returns-ok-response.json new file mode 100644 index 0000000000..e6417cbcaa --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-security-filter-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a security filter returns \"OK\" response", + "operation_id": "CreateSecurityFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityFilterCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "exclusion_filters": [ + { + "name": "Exclude staging", + "query": "source:staging" + } + ], + "filtered_data_type": "logs", + "is_enabled": true, + "name": "{{ unique }}", + "query": "service:{{ unique_alnum }}" + }, + "type": "security_filters" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/security_filters" + }, + "scenario": "Create a security filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-suppression-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-suppression-rule-returns-ok-response.json new file mode 100644 index 0000000000..6992d9c6e5 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-suppression-rule-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a suppression rule returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringSuppression", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringSuppressionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"description\": \"This rule suppresses low-severity signals in staging environments.\", \"enabled\": true, \"start_date\": {{ timestamp('now + 10d') }}000, \"expiration_date\": {{ timestamp('now + 21d') }}000, \"name\": \"{{ unique }}\", \"rule_query\": \"type:log_detection source:cloudtrail\", \"suppression_query\": \"env:staging status:low\", \"tags\": [\"technique:T1110-brute-force\", \"source:cloudtrail\"]}, \"type\": \"suppressions\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/suppressions" + }, + "scenario": "Create a suppression rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-suppression-rule-with-an-exclusion-query-returns-ok-response.json b/test-runner-data/v2/security-monitoring/create-a-suppression-rule-with-an-exclusion-query-returns-ok-response.json new file mode 100644 index 0000000000..e3a7868766 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-suppression-rule-with-an-exclusion-query-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a suppression rule with an exclusion query returns \"OK\" response", + "operation_id": "CreateSecurityMonitoringSuppression", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringSuppressionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"description\": \"This rule suppresses low-severity signals in staging environments.\", \"enabled\": true, \"start_date\": {{ timestamp('now + 10d') }}000, \"expiration_date\": {{ timestamp('now + 21d') }}000, \"name\": \"{{ unique }}\", \"rule_query\": \"type:log_detection source:cloudtrail\", \"data_exclusion_query\": \"account_id:12345\"}, \"type\": \"suppressions\"}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/suppressions" + }, + "scenario": "Create a suppression rule with an exclusion query returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-a-ticket-creation-rule-returns-successfully-created-the-ticket-creation-rule-response.json b/test-runner-data/v2/security-monitoring/create-a-ticket-creation-rule-returns-successfully-created-the-ticket-creation-rule-response.json new file mode 100644 index 0000000000..64bb997797 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-a-ticket-creation-rule-returns-successfully-created-the-ticket-creation-rule-response.json @@ -0,0 +1,45 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create a ticket creation rule returns \"Successfully created the ticket creation rule\" response", + "operation_id": "CreateSecurityFindingsAutomationTicketCreationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TicketCreationRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "action": { + "max_tickets_per_day": 10, + "project_id": "11111111-1111-1111-1111-111111111111", + "target": "jira" + }, + "enabled": true, + "name": "{{ unique }}", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "ticket_creation_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/automation/ticket_creation_rules" + }, + "scenario": "Create a ticket creation rule returns \"Successfully created the ticket creation rule\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-case-for-security-finding-returns-created-response.json b/test-runner-data/v2/security-monitoring/create-case-for-security-finding-returns-created-response.json new file mode 100644 index 0000000000..d2bb95e959 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-case-for-security-finding-returns-created-response.json @@ -0,0 +1,52 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create case for security finding returns \"Created\" response", + "operation_id": "CreateCases", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateCaseRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/cases" + }, + "scenario": "Create case for security finding returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-case-for-security-findings-returns-created-response.json b/test-runner-data/v2/security-monitoring/create-case-for-security-findings-returns-created-response.json new file mode 100644 index 0000000000..2a312673af --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-case-for-security-findings-returns-created-response.json @@ -0,0 +1,56 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create case for security findings returns \"Created\" response", + "operation_id": "CreateCases", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateCaseRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZTd5LWNuYi1seWV-aS0wMjI2NGZjZjRmZWQ5ODMyMg==", + "type": "findings" + }, + { + "id": "c2FuLXhyaS1kZnN-aS0wODM3MjVhMTM2MDExNzNkOQ==", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/cases" + }, + "scenario": "Create case for security findings returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-cases-for-security-findings-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/create-cases-for-security-findings-returns-bad-request-response.json new file mode 100644 index 0000000000..adf90cd219 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-cases-for-security-findings-returns-bad-request-response.json @@ -0,0 +1,44 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create cases for security findings returns \"Bad Request\" response", + "operation_id": "CreateCases", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateCaseRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": {}, + "relationships": { + "findings": { + "data": [] + }, + "project": { + "data": { + "id": "7f198869-c7ef-4afc-97cf-da5cdc13b5c3", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/cases" + }, + "scenario": "Create cases for security findings returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-cases-for-security-findings-returns-created-response.json b/test-runner-data/v2/security-monitoring/create-cases-for-security-findings-returns-created-response.json new file mode 100644 index 0000000000..1c24f4286d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-cases-for-security-findings-returns-created-response.json @@ -0,0 +1,75 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create cases for security findings returns \"Created\" response", + "operation_id": "CreateCases", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateCaseRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "cases" + }, + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "OGRlMDIwYzk4MjFmZTZiNTQwMzk2ZjUxNzg0MDc0NjR-MTk3Yjk4MDI4ZDQ4YzI2ZGZiMWJmMTNhNDEwZGZkYWI=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/cases" + }, + "scenario": "Create cases for security findings returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-cases-for-security-findings-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/create-cases-for-security-findings-returns-not-found-response.json new file mode 100644 index 0000000000..38a54afdfe --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-cases-for-security-findings-returns-not-found-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create cases for security findings returns \"Not Found\" response", + "operation_id": "CreateCases", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateCaseRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": {}, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "00000000-0000-0000-0000-000000000000", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/cases" + }, + "scenario": "Create cases for security findings returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-jira-issue-for-security-finding-returns-created-response.json b/test-runner-data/v2/security-monitoring/create-jira-issue-for-security-finding-returns-created-response.json new file mode 100644 index 0000000000..0497ed8aa5 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-jira-issue-for-security-finding-returns-created-response.json @@ -0,0 +1,52 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create Jira issue for security finding returns \"Created\" response", + "operation_id": "CreateJiraIssues", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateJiraIssueRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "YmNlZmJhYTcyMDU5ZDk0ZDhiNjRmNGI0NDk4MDdiNzN-MDJlMjg0NzNmYzJiODY2MzJkNjU0OTI4NmVhZTUyY2U=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/jira_issues" + }, + "scenario": "Create Jira issue for security finding returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-jira-issue-for-security-findings-returns-created-response.json b/test-runner-data/v2/security-monitoring/create-jira-issue-for-security-findings-returns-created-response.json new file mode 100644 index 0000000000..f3f7fb2380 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-jira-issue-for-security-findings-returns-created-response.json @@ -0,0 +1,56 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create Jira issue for security findings returns \"Created\" response", + "operation_id": "CreateJiraIssues", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateJiraIssueRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==", + "type": "findings" + }, + { + "id": "eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/jira_issues" + }, + "scenario": "Create Jira issue for security findings returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-jira-issues-for-security-findings-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/create-jira-issues-for-security-findings-returns-bad-request-response.json new file mode 100644 index 0000000000..ac5e71473d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-jira-issues-for-security-findings-returns-bad-request-response.json @@ -0,0 +1,44 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create Jira issues for security findings returns \"Bad Request\" response", + "operation_id": "CreateJiraIssues", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateJiraIssueRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": {}, + "relationships": { + "findings": { + "data": [] + }, + "project": { + "data": { + "id": "7f198869-c7ef-4afc-97cf-da5cdc13b5c3", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/jira_issues" + }, + "scenario": "Create Jira issues for security findings returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-jira-issues-for-security-findings-returns-created-response.json b/test-runner-data/v2/security-monitoring/create-jira-issues-for-security-findings-returns-created-response.json new file mode 100644 index 0000000000..d03e37e0e9 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-jira-issues-for-security-findings-returns-created-response.json @@ -0,0 +1,75 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create Jira issues for security findings returns \"Created\" response", + "operation_id": "CreateJiraIssues", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateJiraIssueRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + }, + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/jira_issues" + }, + "scenario": "Create Jira issues for security findings returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-jira-issues-for-security-findings-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/create-jira-issues-for-security-findings-returns-not-found-response.json new file mode 100644 index 0000000000..c46e02cba0 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-jira-issues-for-security-findings-returns-not-found-response.json @@ -0,0 +1,49 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create Jira issues for security findings returns \"Not Found\" response", + "operation_id": "CreateJiraIssues", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateJiraIssueRequestArray", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": {}, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "00000000-0000-0000-0000-000000000000", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/jira_issues" + }, + "scenario": "Create Jira issues for security findings returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-or-update-an-indicator-triage-state-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/create-or-update-an-indicator-triage-state-returns-bad-request-response.json new file mode 100644 index 0000000000..9c4da5e3e4 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-or-update-an-indicator-triage-state-returns-bad-request-response.json @@ -0,0 +1,34 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create or update an indicator triage state returns \"Bad Request\" response", + "operation_id": "CreateIoCTriageState", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IoCTriageWriteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "indicator": "192.0.2.1", + "triage_state": "invalid_state" + }, + "type": "ioc_triage_state" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/siem/ioc-explorer/triage" + }, + "scenario": "Create or update an indicator triage state returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/create-or-update-an-indicator-triage-state-returns-created-response.json b/test-runner-data/v2/security-monitoring/create-or-update-an-indicator-triage-state-returns-created-response.json new file mode 100644 index 0000000000..4d19b39a55 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/create-or-update-an-indicator-triage-state-returns-created-response.json @@ -0,0 +1,34 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Create or update an indicator triage state returns \"Created\" response", + "operation_id": "CreateIoCTriageState", + "request": { + "body": { + "schema": { + "format": null, + "ref": "IoCTriageWriteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "indicator": "192.0.2.1", + "triage_state": "reviewed" + }, + "type": "ioc_triage_state" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/siem/ioc-explorer/triage" + }, + "scenario": "Create or update an indicator triage state returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-critical-asset-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/delete-a-critical-asset-returns-not-found-response.json new file mode 100644 index 0000000000..13e0845fee --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-critical-asset-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a critical asset returns \"Not Found\" response", + "operation_id": "DeleteSecurityMonitoringCriticalAsset", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "critical_asset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/critical_assets/{critical_asset_id}" + }, + "scenario": "Delete a critical asset returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-critical-asset-returns-ok-response.json b/test-runner-data/v2/security-monitoring/delete-a-critical-asset-returns-ok-response.json new file mode 100644 index 0000000000..a067e2bd51 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-critical-asset-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a critical asset returns \"OK\" response", + "operation_id": "DeleteSecurityMonitoringCriticalAsset", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "critical_asset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "critical_asset.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/critical_assets/{critical_asset_id}" + }, + "scenario": "Delete a critical asset returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-custom-framework-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/delete-a-custom-framework-returns-bad-request-response.json new file mode 100644 index 0000000000..9b2ed63de1 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-custom-framework-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a custom framework returns \"Bad Request\" response", + "operation_id": "DeleteCustomFramework", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "handle", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "handle-does-not-exist" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "version-does-not-exist" + }, + "style": null + } + ], + "path": "/api/v2/cloud_security_management/custom_frameworks/{handle}/{version}" + }, + "scenario": "Delete a custom framework returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-custom-framework-returns-ok-response.json b/test-runner-data/v2/security-monitoring/delete-a-custom-framework-returns-ok-response.json new file mode 100644 index 0000000000..ad671f1dda --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-custom-framework-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a custom framework returns \"OK\" response", + "operation_id": "DeleteCustomFramework", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "handle", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "create-framework-new" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "10" + }, + "style": null + } + ], + "path": "/api/v2/cloud_security_management/custom_frameworks/{handle}/{version}" + }, + "scenario": "Delete a custom framework returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-due-date-rule-returns-rule-successfully-deleted-response.json b/test-runner-data/v2/security-monitoring/delete-a-due-date-rule-returns-rule-successfully-deleted-response.json new file mode 100644 index 0000000000..21c2253b07 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-due-date-rule-returns-rule-successfully-deleted-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a due date rule returns \"Rule successfully deleted.\" response", + "operation_id": "DeleteSecurityFindingsAutomationDueDateRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_due_date_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/automation/due_date_rules/{rule_id}" + }, + "scenario": "Delete a due date rule returns \"Rule successfully deleted.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-mute-rule-returns-rule-successfully-deleted-response.json b/test-runner-data/v2/security-monitoring/delete-a-mute-rule-returns-rule-successfully-deleted-response.json new file mode 100644 index 0000000000..215da168be --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-mute-rule-returns-rule-successfully-deleted-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a mute rule returns \"Rule successfully deleted.\" response", + "operation_id": "DeleteSecurityFindingsAutomationMuteRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_mute_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/automation/mute_rules/{rule_id}" + }, + "scenario": "Delete a mute rule returns \"Rule successfully deleted.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-security-filter-returns-no-content-response.json b/test-runner-data/v2/security-monitoring/delete-a-security-filter-returns-no-content-response.json new file mode 100644 index 0000000000..603891a95a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-security-filter-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a security filter returns \"No Content\" response", + "operation_id": "DeleteSecurityFilter", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "security_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/security_filters/{security_filter_id}" + }, + "scenario": "Delete a security filter returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-signal-based-notification-rule-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/delete-a-signal-based-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..39e747fba1 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-signal-based-notification-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a signal-based notification rule returns \"Not Found\" response", + "operation_id": "DeleteSignalNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000-000-000" + }, + "style": null + } + ], + "path": "/api/v2/security/signals/notification_rules/{id}" + }, + "scenario": "Delete a signal-based notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-signal-based-notification-rule-returns-rule-successfully-deleted-response.json b/test-runner-data/v2/security-monitoring/delete-a-signal-based-notification-rule-returns-rule-successfully-deleted-response.json new file mode 100644 index 0000000000..99e92f5614 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-signal-based-notification-rule-returns-rule-successfully-deleted-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a signal-based notification rule returns \"Rule successfully deleted.\" response", + "operation_id": "DeleteSignalNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_signal_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/signals/notification_rules/{id}" + }, + "scenario": "Delete a signal-based notification rule returns \"Rule successfully deleted.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-suppression-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/delete-a-suppression-rule-returns-ok-response.json new file mode 100644 index 0000000000..9abd28653a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-suppression-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a suppression rule returns \"OK\" response", + "operation_id": "DeleteSecurityMonitoringSuppression", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "suppression_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "suppression.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}" + }, + "scenario": "Delete a suppression rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-ticket-creation-rule-returns-rule-successfully-deleted-response.json b/test-runner-data/v2/security-monitoring/delete-a-ticket-creation-rule-returns-rule-successfully-deleted-response.json new file mode 100644 index 0000000000..f34cbe39af --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-ticket-creation-rule-returns-rule-successfully-deleted-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a ticket creation rule returns \"Rule successfully deleted.\" response", + "operation_id": "DeleteSecurityFindingsAutomationTicketCreationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_ticket_creation_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/automation/ticket_creation_rules/{rule_id}" + }, + "scenario": "Delete a ticket creation rule returns \"Rule successfully deleted.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-vulnerability-based-notification-rule-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/delete-a-vulnerability-based-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..9e4d9fc6e6 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-vulnerability-based-notification-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a vulnerability-based notification rule returns \"Not Found\" response", + "operation_id": "DeleteVulnerabilityNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000-000-000" + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerabilities/notification_rules/{id}" + }, + "scenario": "Delete a vulnerability-based notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-a-vulnerability-based-notification-rule-returns-rule-successfully-deleted-response.json b/test-runner-data/v2/security-monitoring/delete-a-vulnerability-based-notification-rule-returns-rule-successfully-deleted-response.json new file mode 100644 index 0000000000..ac432bd011 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-a-vulnerability-based-notification-rule-returns-rule-successfully-deleted-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete a vulnerability-based notification rule returns \"Rule successfully deleted.\" response", + "operation_id": "DeleteVulnerabilityNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_vulnerability_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerabilities/notification_rules/{id}" + }, + "scenario": "Delete a vulnerability-based notification rule returns \"Rule successfully deleted.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-an-existing-job-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/delete-an-existing-job-returns-bad-request-response.json new file mode 100644 index 0000000000..d806f8802f --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-an-existing-job-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete an existing job returns \"Bad Request\" response", + "operation_id": "DeleteHistoricalJob", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "inva-lid" + }, + "style": null + } + ], + "path": "/api/v2/siem-historical-detections/jobs/{job_id}" + }, + "scenario": "Delete an existing job returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-an-existing-job-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/delete-an-existing-job-returns-not-found-response.json new file mode 100644 index 0000000000..f8e9e63b15 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-an-existing-job-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete an existing job returns \"Not Found\" response", + "operation_id": "DeleteHistoricalJob", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93" + }, + "style": null + } + ], + "path": "/api/v2/siem-historical-detections/jobs/{job_id}" + }, + "scenario": "Delete an existing job returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/delete-an-existing-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/delete-an-existing-rule-returns-ok-response.json new file mode 100644 index 0000000000..1e02828e68 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/delete-an-existing-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Delete an existing rule returns \"OK\" response", + "operation_id": "DeleteSecurityMonitoringRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}" + }, + "scenario": "Delete an existing rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/detach-security-findings-from-their-case-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/detach-security-findings-from-their-case-returns-bad-request-response.json new file mode 100644 index 0000000000..5919304953 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/detach-security-findings-from-their-case-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Detach security findings from their case returns \"Bad Request\" response", + "operation_id": "DetachCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DetachCaseRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "relationships": { + "findings": { + "data": [] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/cases" + }, + "scenario": "Detach security findings from their case returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/detach-security-findings-from-their-case-returns-no-content-response.json b/test-runner-data/v2/security-monitoring/detach-security-findings-from-their-case-returns-no-content-response.json new file mode 100644 index 0000000000..27b86755a7 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/detach-security-findings-from-their-case-returns-no-content-response.json @@ -0,0 +1,40 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Detach security findings from their case returns \"No Content\" response", + "operation_id": "DetachCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DetachCaseRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "YzM2MTFjYzcyNmY0Zjg4MTAxZmRlNjQ1MWU1ZGQwYzR-YzI5NzE5Y2Y4MzU4ZjliNzhkNjYxNTY0ODIzZDQ2YTM=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/cases" + }, + "scenario": "Detach security findings from their case returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/detach-security-findings-from-their-case-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/detach-security-findings-from-their-case-returns-not-found-response.json new file mode 100644 index 0000000000..a86c080124 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/detach-security-findings-from-their-case-returns-not-found-response.json @@ -0,0 +1,40 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Detach security findings from their case returns \"Not Found\" response", + "operation_id": "DetachCase", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DetachCaseRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "wrong-finding-id", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/cases" + }, + "scenario": "Detach security findings from their case returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/export-security-monitoring-resource-to-terraform-returns-ok-response.json b/test-runner-data/v2/security-monitoring/export-security-monitoring-resource-to-terraform-returns-ok-response.json new file mode 100644 index 0000000000..f07af32b9b --- /dev/null +++ b/test-runner-data/v2/security-monitoring/export-security-monitoring-resource-to-terraform-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Export security monitoring resource to Terraform returns \"OK\" response", + "operation_id": "ExportSecurityMonitoringTerraformResource", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "resource_type", + "required": true, + "schema": { + "format": null, + "ref": "SecurityMonitoringTerraformResourceType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "suppressions" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "resource_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "suppression.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/terraform/{resource_type}/{resource_id}" + }, + "scenario": "Export security monitoring resource to Terraform returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/export-security-monitoring-resources-to-terraform-returns-ok-response.json b/test-runner-data/v2/security-monitoring/export-security-monitoring-resources-to-terraform-returns-ok-response.json new file mode 100644 index 0000000000..a2c5db65e4 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/export-security-monitoring-resources-to-terraform-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Export security monitoring resources to Terraform returns \"OK\" response", + "operation_id": "BulkExportSecurityMonitoringTerraformResources", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringTerraformBulkExportRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "resource_ids": [ + "{{ suppression.data.id }}" + ] + }, + "type": "bulk_export_resources" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "resource_type", + "required": true, + "schema": { + "format": null, + "ref": "SecurityMonitoringTerraformResourceType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "suppressions" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/terraform/{resource_type}/bulk" + }, + "scenario": "Export security monitoring resources to Terraform returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-cloud-configuration-rule-s-details-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-cloud-configuration-rule-s-details-returns-ok-response.json new file mode 100644 index 0000000000..c1c582cf78 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-cloud-configuration-rule-s-details-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a cloud configuration rule's details returns \"OK\" response", + "operation_id": "GetSecurityMonitoringRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "cloud_configuration_rule.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}" + }, + "scenario": "Get a cloud configuration rule's details returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-critical-asset-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-a-critical-asset-returns-not-found-response.json new file mode 100644 index 0000000000..7c5332cba5 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-critical-asset-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a critical asset returns \"Not Found\" response", + "operation_id": "GetSecurityMonitoringCriticalAsset", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "critical_asset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/critical_assets/{critical_asset_id}" + }, + "scenario": "Get a critical asset returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-critical-asset-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-critical-asset-returns-ok-response.json new file mode 100644 index 0000000000..b5b3f55f7d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-critical-asset-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a critical asset returns \"OK\" response", + "operation_id": "GetSecurityMonitoringCriticalAsset", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "critical_asset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "critical_asset.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/critical_assets/{critical_asset_id}" + }, + "scenario": "Get a critical asset returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-custom-framework-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/get-a-custom-framework-returns-bad-request-response.json new file mode 100644 index 0000000000..7a72fcda64 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-custom-framework-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a custom framework returns \"Bad Request\" response", + "operation_id": "GetCustomFramework", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "handle", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "frame-does-not-exist" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "frame-does-not-exist" + }, + "style": null + } + ], + "path": "/api/v2/cloud_security_management/custom_frameworks/{handle}/{version}" + }, + "scenario": "Get a custom framework returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-custom-framework-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-custom-framework-returns-ok-response.json new file mode 100644 index 0000000000..866194ef0b --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-custom-framework-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a custom framework returns \"OK\" response", + "operation_id": "GetCustomFramework", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "handle", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "create-framework-new" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "10" + }, + "style": null + } + ], + "path": "/api/v2/cloud_security_management/custom_frameworks/{handle}/{version}" + }, + "scenario": "Get a custom framework returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-due-date-rule-returns-successfully-retrieved-the-due-date-rule-response.json b/test-runner-data/v2/security-monitoring/get-a-due-date-rule-returns-successfully-retrieved-the-due-date-rule-response.json new file mode 100644 index 0000000000..feb3ebe463 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-due-date-rule-returns-successfully-retrieved-the-due-date-rule-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a due date rule returns \"Successfully retrieved the due date rule\" response", + "operation_id": "GetSecurityFindingsAutomationDueDateRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_due_date_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/automation/due_date_rules/{rule_id}" + }, + "scenario": "Get a due date rule returns \"Successfully retrieved the due date rule\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-finding-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-finding-returns-ok-response.json new file mode 100644 index 0000000000..15349b1b1a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-finding-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a finding returns \"OK\" response", + "operation_id": "GetFinding", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "finding_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "AgAAAYd59gjghzF52gAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFCRTRvV1lFeEo4SlFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz" + }, + "style": null + } + ], + "path": "/api/v2/posture_management/findings/{finding_id}" + }, + "scenario": "Get a finding returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-job-s-details-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/get-a-job-s-details-returns-bad-request-response.json new file mode 100644 index 0000000000..168b14adcc --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-job-s-details-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a job's details returns \"Bad Request\" response", + "operation_id": "GetHistoricalJob", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "inva-lid" + }, + "style": null + } + ], + "path": "/api/v2/siem-historical-detections/jobs/{job_id}" + }, + "scenario": "Get a job's details returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-job-s-details-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-a-job-s-details-returns-not-found-response.json new file mode 100644 index 0000000000..54a1446cd0 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-job-s-details-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a job's details returns \"Not Found\" response", + "operation_id": "GetHistoricalJob", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93" + }, + "style": null + } + ], + "path": "/api/v2/siem-historical-detections/jobs/{job_id}" + }, + "scenario": "Get a job's details returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-job-s-details-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-job-s-details-returns-ok-response.json new file mode 100644 index 0000000000..ba9e016ec1 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-job-s-details-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a job's details returns \"OK\" response", + "operation_id": "GetHistoricalJob", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "job_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "historical_job.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/siem-historical-detections/jobs/{job_id}" + }, + "scenario": "Get a job's details returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-list-of-security-signals-returns-ok-response-with-pagination.json b/test-runner-data/v2/security-monitoring/get-a-list-of-security-signals-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..31702c9e93 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-list-of-security-signals-returns-ok-response-with-pagination.json @@ -0,0 +1,28 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a list of security signals returns \"OK\" response with pagination", + "operation_id": "SearchSecurityMonitoringSignals", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringSignalListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"filter\": {\"from\": \"{{ timeISO(\"now-15m\") }}\", \"query\": \"security:attack status:high\", \"to\": \"{{ timeISO(\"now\") }}\"}, \"page\": {\"limit\": 2}, \"sort\": \"timestamp\"}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": true, + "parameters": [], + "path": "/api/v2/security_monitoring/signals/search" + }, + "scenario": "Get a list of security signals returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-mute-rule-returns-successfully-retrieved-the-mute-rule-response.json b/test-runner-data/v2/security-monitoring/get-a-mute-rule-returns-successfully-retrieved-the-mute-rule-response.json new file mode 100644 index 0000000000..7302377055 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-mute-rule-returns-successfully-retrieved-the-mute-rule-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a mute rule returns \"Successfully retrieved the mute rule\" response", + "operation_id": "GetSecurityFindingsAutomationMuteRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_mute_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/automation/mute_rules/{rule_id}" + }, + "scenario": "Get a mute rule returns \"Successfully retrieved the mute rule\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-quick-list-of-security-signals-returns-ok-response-with-pagination.json b/test-runner-data/v2/security-monitoring/get-a-quick-list-of-security-signals-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..6d778b54d7 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-quick-list-of-security-signals-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a quick list of security signals returns \"OK\" response with pagination", + "operation_id": "ListSecurityMonitoringSignals", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/signals" + }, + "scenario": "Get a quick list of security signals returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-rule-s-details-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-a-rule-s-details-returns-not-found-response.json new file mode 100644 index 0000000000..0ef2d74c09 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-rule-s-details-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a rule's details returns \"Not Found\" response", + "operation_id": "GetSecurityMonitoringRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "abcde-12345" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}" + }, + "scenario": "Get a rule's details returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-rule-s-details-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-rule-s-details-returns-ok-response.json new file mode 100644 index 0000000000..12ce0ba377 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-rule-s-details-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a rule's details returns \"OK\" response", + "operation_id": "GetSecurityMonitoringRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}" + }, + "scenario": "Get a rule's details returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-security-filter-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-security-filter-returns-ok-response.json new file mode 100644 index 0000000000..54dbc9a545 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-security-filter-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a security filter returns \"OK\" response", + "operation_id": "GetSecurityFilter", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "security_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/security_filters/{security_filter_id}" + }, + "scenario": "Get a security filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-signal-s-details-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-a-signal-s-details-returns-not-found-response.json new file mode 100644 index 0000000000..f275b5071d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-signal-s-details-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a signal's details returns \"Not Found\" response", + "operation_id": "GetSecurityMonitoringSignal", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "signal_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "AQAAAYNqUBVU4-rffwAAAABBWU5xVUJWVUFBQjJBd3ptCL3QUEm3nt2" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/signals/{signal_id}" + }, + "scenario": "Get a signal's details returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-signal-s-details-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-signal-s-details-returns-ok-response.json new file mode 100644 index 0000000000..6a1d0a3ebf --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-signal-s-details-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a signal's details returns \"OK\" response", + "operation_id": "GetSecurityMonitoringSignal", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "signal_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "AQAAAYNqUBVU4-rffwAAAABBWU5xVUJWVUFBQjJBd3ptMDdQUnF3QUE" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/signals/{signal_id}" + }, + "scenario": "Get a signal's details returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-suppression-rule-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-a-suppression-rule-returns-not-found-response.json new file mode 100644 index 0000000000..32f8eadbc6 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-suppression-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a suppression rule returns \"Not Found\" response", + "operation_id": "GetSecurityMonitoringSuppression", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "suppression_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "this-does-not-exist" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}" + }, + "scenario": "Get a suppression rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-suppression-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-suppression-rule-returns-ok-response.json new file mode 100644 index 0000000000..eea45a4c89 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-suppression-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a suppression rule returns \"OK\" response", + "operation_id": "GetSecurityMonitoringSuppression", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "suppression_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "suppression.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}" + }, + "scenario": "Get a suppression rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-suppression-s-version-history-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-a-suppression-s-version-history-returns-not-found-response.json new file mode 100644 index 0000000000..0d45f2f5d0 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-suppression-s-version-history-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a suppression's version history returns \"Not Found\" response", + "operation_id": "GetSuppressionVersionHistory", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "suppression_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "this-does-not-exist" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}/version_history" + }, + "scenario": "Get a suppression's version history returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-suppression-s-version-history-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-a-suppression-s-version-history-returns-ok-response.json new file mode 100644 index 0000000000..d911e9850d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-suppression-s-version-history-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a suppression's version history returns \"OK\" response", + "operation_id": "GetSuppressionVersionHistory", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "suppression_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "suppression.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}/version_history" + }, + "scenario": "Get a suppression's version history returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-a-ticket-creation-rule-returns-successfully-retrieved-the-ticket-creation-rule-response.json b/test-runner-data/v2/security-monitoring/get-a-ticket-creation-rule-returns-successfully-retrieved-the-ticket-creation-rule-response.json new file mode 100644 index 0000000000..717a987c11 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-a-ticket-creation-rule-returns-successfully-retrieved-the-ticket-creation-rule-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get a ticket creation rule returns \"Successfully retrieved the ticket creation rule\" response", + "operation_id": "GetSecurityFindingsAutomationTicketCreationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_ticket_creation_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/automation/ticket_creation_rules/{rule_id}" + }, + "scenario": "Get a ticket creation rule returns \"Successfully retrieved the ticket creation rule\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-all-critical-assets-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-all-critical-assets-returns-ok-response.json new file mode 100644 index 0000000000..8d6a3f8c1d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-all-critical-assets-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get all critical assets returns \"OK\" response", + "operation_id": "ListSecurityMonitoringCriticalAssets", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/critical_assets" + }, + "scenario": "Get all critical assets returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-all-due-date-rules-returns-successfully-retrieved-the-list-of-due-date-rules-response.json b/test-runner-data/v2/security-monitoring/get-all-due-date-rules-returns-successfully-retrieved-the-list-of-due-date-rules-response.json new file mode 100644 index 0000000000..45b58b5253 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-all-due-date-rules-returns-successfully-retrieved-the-list-of-due-date-rules-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get all due date rules returns \"Successfully retrieved the list of due date rules\" response", + "operation_id": "ListSecurityFindingsAutomationDueDateRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/automation/due_date_rules" + }, + "scenario": "Get all due date rules returns \"Successfully retrieved the list of due date rules\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-all-mute-rules-returns-successfully-retrieved-the-list-of-mute-rules-response.json b/test-runner-data/v2/security-monitoring/get-all-mute-rules-returns-successfully-retrieved-the-list-of-mute-rules-response.json new file mode 100644 index 0000000000..f6aa66f8b1 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-all-mute-rules-returns-successfully-retrieved-the-list-of-mute-rules-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get all mute rules returns \"Successfully retrieved the list of mute rules\" response", + "operation_id": "ListSecurityFindingsAutomationMuteRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/automation/mute_rules" + }, + "scenario": "Get all mute rules returns \"Successfully retrieved the list of mute rules\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-all-security-filters-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-all-security-filters-returns-ok-response.json new file mode 100644 index 0000000000..fbd58285e9 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-all-security-filters-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get all security filters returns \"OK\" response", + "operation_id": "ListSecurityFilters", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/security_filters" + }, + "scenario": "Get all security filters returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-pagination.json b/test-runner-data/v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..fd3226f8a1 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-pagination.json @@ -0,0 +1,67 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get all suppression rules returns \"OK\" response with pagination", + "operation_id": "ListSecurityMonitoringSuppressions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[number]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "query", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "id:{{ suppression.data.id }} OR id:{{ suppression2.data.id }}" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions" + }, + "scenario": "Get all suppression rules returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-sort-ascending.json b/test-runner-data/v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-sort-ascending.json new file mode 100644 index 0000000000..34732770b7 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-sort-ascending.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get all suppression rules returns \"OK\" response with sort ascending", + "operation_id": "ListSecurityMonitoringSuppressions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "sort", + "required": false, + "schema": { + "format": null, + "ref": "SecurityMonitoringSuppressionSort", + "type": "string" + }, + "source": { + "type": "literal", + "value": "name" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "query", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "id:{{ suppression.data.id }} OR id:{{ suppression2.data.id }}" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions" + }, + "scenario": "Get all suppression rules returns \"OK\" response with sort ascending", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-sort-descending.json b/test-runner-data/v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-sort-descending.json new file mode 100644 index 0000000000..bb96d1bf3e --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-all-suppression-rules-returns-ok-response-with-sort-descending.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get all suppression rules returns \"OK\" response with sort descending", + "operation_id": "ListSecurityMonitoringSuppressions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "sort", + "required": false, + "schema": { + "format": null, + "ref": "SecurityMonitoringSuppressionSort", + "type": "string" + }, + "source": { + "type": "literal", + "value": "-name" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "query", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "id:{{ suppression.data.id }} OR id:{{ suppression2.data.id }}" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions" + }, + "scenario": "Get all suppression rules returns \"OK\" response with sort descending", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-all-ticket-creation-rules-returns-successfully-retrieved-the-list-of-ticket-creation-rules-response.json b/test-runner-data/v2/security-monitoring/get-all-ticket-creation-rules-returns-successfully-retrieved-the-list-of-ticket-creation-rules-response.json new file mode 100644 index 0000000000..bad06fcc16 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-all-ticket-creation-rules-returns-successfully-retrieved-the-list-of-ticket-creation-rules-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get all ticket creation rules returns \"Successfully retrieved the list of ticket creation rules\" response", + "operation_id": "ListSecurityFindingsAutomationTicketCreationRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/automation/ticket_creation_rules" + }, + "scenario": "Get all ticket creation rules returns \"Successfully retrieved the list of ticket creation rules\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-an-indicator-of-compromise-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-an-indicator-of-compromise-returns-not-found-response.json new file mode 100644 index 0000000000..7d5ea69414 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-an-indicator-of-compromise-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get an indicator of compromise returns \"Not Found\" response", + "operation_id": "GetIndicatorOfCompromise", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "indicator", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "this-indicator-does-not-exist.invalid" + }, + "style": null + } + ], + "path": "/api/v2/security/siem/ioc-explorer/indicator" + }, + "scenario": "Get an indicator of compromise returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-an-indicator-of-compromise-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-an-indicator-of-compromise-returns-ok-response.json new file mode 100644 index 0000000000..157d0b6eed --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-an-indicator-of-compromise-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get an indicator of compromise returns \"OK\" response", + "operation_id": "GetIndicatorOfCompromise", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "indicator", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "192.0.2.1" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "include_triage_history", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v2/security/siem/ioc-explorer/indicator" + }, + "scenario": "Get an indicator of compromise returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-critical-assets-affecting-a-specific-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-critical-assets-affecting-a-specific-rule-returns-ok-response.json new file mode 100644 index 0000000000..742ca7ee01 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-critical-assets-affecting-a-specific-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get critical assets affecting a specific rule returns \"OK\" response", + "operation_id": "GetCriticalAssetsAffectingRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/critical_assets/rules/{rule_id}" + }, + "scenario": "Get critical assets affecting a specific rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-details-of-a-signal-based-notification-rule-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-details-of-a-signal-based-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..691ff6a574 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-details-of-a-signal-based-notification-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get details of a signal-based notification rule returns \"Not Found\" response", + "operation_id": "GetSignalNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000-000-000" + }, + "style": null + } + ], + "path": "/api/v2/security/signals/notification_rules/{id}" + }, + "scenario": "Get details of a signal-based notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-details-of-a-signal-based-notification-rule-returns-notification-rule-details-response.json b/test-runner-data/v2/security-monitoring/get-details-of-a-signal-based-notification-rule-returns-notification-rule-details-response.json new file mode 100644 index 0000000000..b124c4061a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-details-of-a-signal-based-notification-rule-returns-notification-rule-details-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get details of a signal-based notification rule returns \"Notification rule details.\" response", + "operation_id": "GetSignalNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_signal_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/signals/notification_rules/{id}" + }, + "scenario": "Get details of a signal-based notification rule returns \"Notification rule details.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-details-of-a-vulnerability-notification-rule-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-details-of-a-vulnerability-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..efc68f7ea2 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-details-of-a-vulnerability-notification-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get details of a vulnerability notification rule returns \"Not Found\" response", + "operation_id": "GetVulnerabilityNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000-000-000" + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerabilities/notification_rules/{id}" + }, + "scenario": "Get details of a vulnerability notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-details-of-a-vulnerability-notification-rule-returns-notification-rule-details-response.json b/test-runner-data/v2/security-monitoring/get-details-of-a-vulnerability-notification-rule-returns-notification-rule-details-response.json new file mode 100644 index 0000000000..b7807270b8 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-details-of-a-vulnerability-notification-rule-returns-notification-rule-details-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get details of a vulnerability notification rule returns \"Notification rule details.\" response", + "operation_id": "GetVulnerabilityNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_vulnerability_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerabilities/notification_rules/{id}" + }, + "scenario": "Get details of a vulnerability notification rule returns \"Notification rule details.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-rule-version-history-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-rule-version-history-returns-ok-response.json new file mode 100644 index 0000000000..f2fc7bee88 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-rule-version-history-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get rule version history returns \"OK\" response", + "operation_id": "GetRuleVersionHistory", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}/version_history" + }, + "scenario": "Get rule version history returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-sbom-returns-not-found-asset-not-found-response.json b/test-runner-data/v2/security-monitoring/get-sbom-returns-not-found-asset-not-found-response.json new file mode 100644 index 0000000000..38046eeb0c --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-sbom-returns-not-found-asset-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get SBOM returns \"Not found: asset not found\" response", + "operation_id": "GetSBOM", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "asset_type", + "required": true, + "schema": { + "format": null, + "ref": "AssetType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "Host" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[asset_name]", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown-host" + }, + "style": null + } + ], + "path": "/api/v2/security/sboms/{asset_type}" + }, + "scenario": "Get SBOM returns \"Not found: asset not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-suppressions-affecting-a-specific-rule-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/get-suppressions-affecting-a-specific-rule-returns-not-found-response.json new file mode 100644 index 0000000000..f79cd08b12 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-suppressions-affecting-a-specific-rule-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get suppressions affecting a specific rule returns \"Not Found\" response", + "operation_id": "GetSuppressionsAffectingRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa-bbb-ccc-ddd" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions/rules/{rule_id}" + }, + "scenario": "Get suppressions affecting a specific rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-suppressions-affecting-a-specific-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-suppressions-affecting-a-specific-rule-returns-ok-response.json new file mode 100644 index 0000000000..2d3f2d9de0 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-suppressions-affecting-a-specific-rule-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get suppressions affecting a specific rule returns \"OK\" response", + "operation_id": "GetSuppressionsAffectingRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions/rules/{rule_id}" + }, + "scenario": "Get suppressions affecting a specific rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-suppressions-affecting-future-rule-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/get-suppressions-affecting-future-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..eada0d093b --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-suppressions-affecting-future-rule-returns-bad-request-response.json @@ -0,0 +1,28 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get suppressions affecting future rule returns \"Bad Request\" response", + "operation_id": "GetSuppressionsAffectingFutureRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "inline", + "value": { + "invalid_key": "invalid_value" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/suppressions/rules" + }, + "scenario": "Get suppressions affecting future rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-suppressions-affecting-future-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/get-suppressions-affecting-future-rule-returns-ok-response.json new file mode 100644 index 0000000000..50f3062403 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-suppressions-affecting-future-rule-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get suppressions affecting future rule returns \"OK\" response", + "operation_id": "GetSuppressionsAffectingFutureRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleCreatePayload", + "type": null + }, + "source": "security_monitoring_future_rule_suppression_payload.json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "{{ unique }}", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/suppressions/rules" + }, + "scenario": "Get suppressions affecting future rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-the-list-of-signal-based-notification-rules-returns-the-list-of-notification-rules-response.json b/test-runner-data/v2/security-monitoring/get-the-list-of-signal-based-notification-rules-returns-the-list-of-notification-rules-response.json new file mode 100644 index 0000000000..969c4885aa --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-the-list-of-signal-based-notification-rules-returns-the-list-of-notification-rules-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get the list of signal-based notification rules returns \"The list of notification rules.\" response", + "operation_id": "GetSignalNotificationRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/signals/notification_rules" + }, + "scenario": "Get the list of signal-based notification rules returns \"The list of notification rules.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/get-the-list-of-vulnerability-notification-rules-returns-the-list-of-notification-rules-response.json b/test-runner-data/v2/security-monitoring/get-the-list-of-vulnerability-notification-rules-returns-the-list-of-notification-rules-response.json new file mode 100644 index 0000000000..b74531c0ad --- /dev/null +++ b/test-runner-data/v2/security-monitoring/get-the-list-of-vulnerability-notification-rules-returns-the-list-of-notification-rules-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Get the list of vulnerability notification rules returns \"The list of notification rules.\" response", + "operation_id": "GetVulnerabilityNotificationRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/vulnerabilities/notification_rules" + }, + "scenario": "Get the list of vulnerability notification rules returns \"The list of notification rules.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-assets-sboms-returns-bad-request-invalid-pagination-token-response.json b/test-runner-data/v2/security-monitoring/list-assets-sboms-returns-bad-request-invalid-pagination-token-response.json new file mode 100644 index 0000000000..a9e86f0fa8 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-assets-sboms-returns-bad-request-invalid-pagination-token-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List assets SBOMs returns \"Bad request: Invalid pagination token.\" response", + "operation_id": "ListAssetsSBOMs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[token]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "SERVICE:unknown" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[number]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + } + ], + "path": "/api/v2/security/sboms" + }, + "scenario": "List assets SBOMs returns \"Bad request: Invalid pagination token.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-assets-sboms-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-assets-sboms-returns-ok-response.json new file mode 100644 index 0000000000..7eadc7968c --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-assets-sboms-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List assets SBOMs returns \"OK\" response", + "operation_id": "ListAssetsSBOMs", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[package_name]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "pandas" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[asset_type]", + "required": false, + "schema": { + "format": null, + "ref": "AssetType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "Service" + }, + "style": null + } + ], + "path": "/api/v2/security/sboms" + }, + "scenario": "List assets SBOMs returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-findings-returns-ok-response-with-details.json b/test-runner-data/v2/security-monitoring/list-findings-returns-ok-response-with-details.json new file mode 100644 index 0000000000..be6706e41c --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-findings-returns-ok-response-with-details.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List findings returns \"OK\" response with details", + "operation_id": "ListFindings", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "detailed_findings", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v2/posture_management/findings" + }, + "scenario": "List findings returns \"OK\" response with details", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-findings-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-findings-returns-ok-response.json new file mode 100644 index 0000000000..7b5987a3fb --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-findings-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List findings returns \"OK\" response", + "operation_id": "ListFindings", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/posture_management/findings" + }, + "scenario": "List findings returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-findings-with-detection-type-query-param-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-findings-with-detection-type-query-param-returns-ok-response.json new file mode 100644 index 0000000000..af7be4b151 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-findings-with-detection-type-query-param-returns-ok-response.json @@ -0,0 +1,43 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List findings with detection_type query param returns \"OK\" response", + "operation_id": "ListFindings", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": true, + "in": "query", + "name": "filter[vulnerability_type]", + "required": false, + "schema": { + "format": null, + "items": { + "format": null, + "ref": "FindingVulnerabilityType", + "type": "string" + }, + "ref": null, + "type": "array" + }, + "source": { + "type": "literal", + "value": [ + "misconfiguration", + "attack_path" + ] + }, + "style": null + } + ], + "path": "/api/v2/posture_management/findings" + }, + "scenario": "List findings with detection_type query param returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-indicators-of-compromise-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/list-indicators-of-compromise-returns-bad-request-response.json new file mode 100644 index 0000000000..139c20ae2f --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-indicators-of-compromise-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List indicators of compromise returns \"Bad Request\" response", + "operation_id": "ListIndicatorsOfCompromise", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "query", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid:::query" + }, + "style": null + } + ], + "path": "/api/v2/security/siem/ioc-explorer" + }, + "scenario": "List indicators of compromise returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-indicators-of-compromise-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-indicators-of-compromise-returns-ok-response.json new file mode 100644 index 0000000000..d2558c263e --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-indicators-of-compromise-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List indicators of compromise returns \"OK\" response", + "operation_id": "ListIndicatorsOfCompromise", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + } + ], + "path": "/api/v2/security/siem/ioc-explorer" + }, + "scenario": "List indicators of compromise returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-resource-filters-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/list-resource-filters-returns-bad-request-response.json new file mode 100644 index 0000000000..b4b8ef2ff8 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-resource-filters-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List resource filters returns \"Bad Request\" response", + "operation_id": "GetResourceEvaluationFilters", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "account_id", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "123456789" + }, + "style": null + } + ], + "path": "/api/v2/cloud_security_management/resource_filters" + }, + "scenario": "List resource filters returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-resource-filters-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-resource-filters-returns-ok-response.json new file mode 100644 index 0000000000..8173e5ce6a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-resource-filters-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List resource filters returns \"OK\" response", + "operation_id": "GetResourceEvaluationFilters", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "cloud_provider", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aws" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "account_id", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "123456789" + }, + "style": null + } + ], + "path": "/api/v2/cloud_security_management/resource_filters" + }, + "scenario": "List resource filters returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-rules-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-rules-returns-ok-response.json new file mode 100644 index 0000000000..0f8aa67d64 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-rules-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List rules returns \"OK\" response", + "operation_id": "ListSecurityMonitoringRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules" + }, + "scenario": "List rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-scanned-assets-metadata-returns-bad-request-invalid-pagination-token-response.json b/test-runner-data/v2/security-monitoring/list-scanned-assets-metadata-returns-bad-request-invalid-pagination-token-response.json new file mode 100644 index 0000000000..45bc1ae449 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-scanned-assets-metadata-returns-bad-request-invalid-pagination-token-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List scanned assets metadata returns \"Bad request: Invalid Pagination Token\" response", + "operation_id": "ListScannedAssetsMetadata", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[token]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[number]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + } + ], + "path": "/api/v2/security/scanned-assets-metadata" + }, + "scenario": "List scanned assets metadata returns \"Bad request: Invalid Pagination Token\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-scanned-assets-metadata-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-scanned-assets-metadata-returns-ok-response.json new file mode 100644 index 0000000000..19cb443957 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-scanned-assets-metadata-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List scanned assets metadata returns \"OK\" response", + "operation_id": "ListScannedAssetsMetadata", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/scanned-assets-metadata" + }, + "scenario": "List scanned assets metadata returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-security-findings-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/list-security-findings-returns-bad-request-response.json new file mode 100644 index 0000000000..44d49ed55d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-security-findings-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List security findings returns \"Bad Request\" response", + "operation_id": "ListSecurityFindings", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[cursor]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid_cursor" + }, + "style": null + } + ], + "path": "/api/v2/security/findings" + }, + "scenario": "List security findings returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-security-findings-returns-ok-response-with-pagination.json b/test-runner-data/v2/security-monitoring/list-security-findings-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..600434a2a2 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-security-findings-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List security findings returns \"OK\" response with pagination", + "operation_id": "ListSecurityFindings", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 5 + }, + "style": null + } + ], + "path": "/api/v2/security/findings" + }, + "scenario": "List security findings returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-security-findings-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-security-findings-returns-ok-response.json new file mode 100644 index 0000000000..9624b4c62e --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-security-findings-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List security findings returns \"OK\" response", + "operation_id": "ListSecurityFindings", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings" + }, + "scenario": "List security findings returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-vulnerabilities-returns-bad-request-invalid-pagination-token-response.json b/test-runner-data/v2/security-monitoring/list-vulnerabilities-returns-bad-request-invalid-pagination-token-response.json new file mode 100644 index 0000000000..344a5957ec --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-vulnerabilities-returns-bad-request-invalid-pagination-token-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List vulnerabilities returns \"Bad request: Invalid pagination token.\" response", + "operation_id": "ListVulnerabilities", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[token]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[number]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerabilities" + }, + "scenario": "List vulnerabilities returns \"Bad request: Invalid pagination token.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-vulnerabilities-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-vulnerabilities-returns-ok-response.json new file mode 100644 index 0000000000..4087a2cc21 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-vulnerabilities-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List vulnerabilities returns \"OK\" response", + "operation_id": "ListVulnerabilities", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[cvss.base.severity]", + "required": false, + "schema": { + "format": null, + "ref": "VulnerabilitySeverity", + "type": "string" + }, + "source": { + "type": "literal", + "value": "High" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[asset.type]", + "required": false, + "schema": { + "format": null, + "ref": "AssetType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "Service" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[tool]", + "required": false, + "schema": { + "format": null, + "ref": "VulnerabilityTool", + "type": "string" + }, + "source": { + "type": "literal", + "value": "Infra" + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerabilities" + }, + "scenario": "List vulnerabilities returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-vulnerable-assets-returns-bad-request-invalid-pagination-token-response.json b/test-runner-data/v2/security-monitoring/list-vulnerable-assets-returns-bad-request-invalid-pagination-token-response.json new file mode 100644 index 0000000000..948fa8b274 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-vulnerable-assets-returns-bad-request-invalid-pagination-token-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List vulnerable assets returns \"Bad request: Invalid Pagination Token\" response", + "operation_id": "ListVulnerableAssets", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[token]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "unknown" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[number]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerable-assets" + }, + "scenario": "List vulnerable assets returns \"Bad request: Invalid Pagination Token\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/list-vulnerable-assets-returns-ok-response.json b/test-runner-data/v2/security-monitoring/list-vulnerable-assets-returns-ok-response.json new file mode 100644 index 0000000000..601d723655 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/list-vulnerable-assets-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/List vulnerable assets returns \"OK\" response", + "operation_id": "ListVulnerableAssets", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[type]", + "required": false, + "schema": { + "format": null, + "ref": "AssetType", + "type": "string" + }, + "source": { + "type": "literal", + "value": "Host" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[repository_url]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "github.com/datadog/dd-go" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[risks.in_production]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "boolean" + }, + "source": { + "type": "literal", + "value": true + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerable-assets" + }, + "scenario": "List vulnerable assets returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/modify-the-triage-assignee-of-a-security-signal-returns-ok-response.json b/test-runner-data/v2/security-monitoring/modify-the-triage-assignee-of-a-security-signal-returns-ok-response.json new file mode 100644 index 0000000000..74e350220a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/modify-the-triage-assignee-of-a-security-signal-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Modify the triage assignee of a security signal returns \"OK\" response", + "operation_id": "EditSecurityMonitoringSignalAssignee", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringSignalAssigneeUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "assignee": { + "uuid": "" + } + } + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "signal_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/signals/{signal_id}/assignee" + }, + "scenario": "Modify the triage assignee of a security signal returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/mute-security-findings-returns-accepted-response.json b/test-runner-data/v2/security-monitoring/mute-security-findings-returns-accepted-response.json new file mode 100644 index 0000000000..6d32a39c6c --- /dev/null +++ b/test-runner-data/v2/security-monitoring/mute-security-findings-returns-accepted-response.json @@ -0,0 +1,48 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 202, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Mute security findings returns \"Accepted\" response", + "operation_id": "MuteSecurityFindings", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MuteFindingsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "mute": { + "description": "To be resolved later.", + "expire_at": 1778721573794, + "is_muted": true, + "reason": "RISK_ACCEPTED" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwMC0wYmd-MDE4NjcyMDJkMzE4MDE5ODY5MGE4ZmQ2MmFlMjg0Y2M=", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/mute" + }, + "scenario": "Mute security findings returns \"Accepted\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/mute-security-findings-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/mute-security-findings-returns-not-found-response.json new file mode 100644 index 0000000000..5500e4fe7f --- /dev/null +++ b/test-runner-data/v2/security-monitoring/mute-security-findings-returns-not-found-response.json @@ -0,0 +1,48 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Mute security findings returns \"Not Found\" response", + "operation_id": "MuteSecurityFindings", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MuteFindingsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "mute": { + "description": "To be resolved later.", + "expire_at": 1778721573794, + "is_muted": true, + "reason": "RISK_ACCEPTED" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/mute" + }, + "scenario": "Mute security findings returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/mute-security-findings-returns-unprocessable-entity-response.json b/test-runner-data/v2/security-monitoring/mute-security-findings-returns-unprocessable-entity-response.json new file mode 100644 index 0000000000..5f01df8a19 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/mute-security-findings-returns-unprocessable-entity-response.json @@ -0,0 +1,48 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 422, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Mute security findings returns \"Unprocessable Entity\" response", + "operation_id": "MuteSecurityFindings", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MuteFindingsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "mute": { + "description": "To be resolved later.", + "expire_at": 1, + "is_muted": true, + "reason": "RISK_ACCEPTED" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/mute" + }, + "scenario": "Mute security findings returns \"Unprocessable Entity\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/patch-a-signal-based-notification-rule-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/patch-a-signal-based-notification-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..a0da73bbbc --- /dev/null +++ b/test-runner-data/v2/security-monitoring/patch-a-signal-based-notification-rule-returns-bad-request-response.json @@ -0,0 +1,67 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Patch a signal-based notification rule returns \"Bad Request\" response", + "operation_id": "PatchSignalNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_signal_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/signals/notification_rules/{id}" + }, + "scenario": "Patch a signal-based notification rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/patch-a-signal-based-notification-rule-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/patch-a-signal-based-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..e280f4b63d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/patch-a-signal-based-notification-rule-returns-not-found-response.json @@ -0,0 +1,68 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Patch a signal-based notification rule returns \"Not Found\" response", + "operation_id": "PatchSignalNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400, + "version": 1 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000-000-000" + }, + "style": null + } + ], + "path": "/api/v2/security/signals/notification_rules/{id}" + }, + "scenario": "Patch a signal-based notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/patch-a-signal-based-notification-rule-returns-notification-rule-successfully-patched-response.json b/test-runner-data/v2/security-monitoring/patch-a-signal-based-notification-rule-returns-notification-rule-successfully-patched-response.json new file mode 100644 index 0000000000..7da4658711 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/patch-a-signal-based-notification-rule-returns-notification-rule-successfully-patched-response.json @@ -0,0 +1,68 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Patch a signal-based notification rule returns \"Notification rule successfully patched.\" response", + "operation_id": "PatchSignalNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400, + "version": 1 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_signal_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/signals/notification_rules/{id}" + }, + "scenario": "Patch a signal-based notification rule returns \"Notification rule successfully patched.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..023b6bb848 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-bad-request-response.json @@ -0,0 +1,67 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Patch a vulnerability-based notification rule returns \"Bad Request\" response", + "operation_id": "PatchVulnerabilityNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_vulnerability_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerabilities/notification_rules/{id}" + }, + "scenario": "Patch a vulnerability-based notification rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-not-found-response.json new file mode 100644 index 0000000000..9657786601 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-not-found-response.json @@ -0,0 +1,68 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Patch a vulnerability-based notification rule returns \"Not Found\" response", + "operation_id": "PatchVulnerabilityNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400, + "version": 1 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "000-000-000" + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerabilities/notification_rules/{id}" + }, + "scenario": "Patch a vulnerability-based notification rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-notification-rule-successfully-patched-response.json b/test-runner-data/v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-notification-rule-successfully-patched-response.json new file mode 100644 index 0000000000..dee2838794 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/patch-a-vulnerability-based-notification-rule-returns-notification-rule-successfully-patched-response.json @@ -0,0 +1,68 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Patch a vulnerability-based notification rule returns \"Notification rule successfully patched.\" response", + "operation_id": "PatchVulnerabilityNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400, + "version": 1 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_vulnerability_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/vulnerabilities/notification_rules/{id}" + }, + "scenario": "Patch a vulnerability-based notification rule returns \"Notification rule successfully patched.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/reorder-due-date-rules-returns-successfully-reordered-the-due-date-rules-response.json b/test-runner-data/v2/security-monitoring/reorder-due-date-rules-returns-successfully-reordered-the-due-date-rules-response.json new file mode 100644 index 0000000000..a53e5497e1 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/reorder-due-date-rules-returns-successfully-reordered-the-due-date-rules-response.json @@ -0,0 +1,33 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Reorder due date rules returns \"Successfully reordered the due date rules\" response", + "operation_id": "ReorderSecurityFindingsAutomationDueDateRules", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DueDateRuleReorderRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "{{ valid_due_date_rule.data.id }}", + "type": "due_date_rules" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/automation/due_date_rules/reorder" + }, + "scenario": "Reorder due date rules returns \"Successfully reordered the due date rules\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/reorder-mute-rules-returns-successfully-reordered-the-mute-rules-response.json b/test-runner-data/v2/security-monitoring/reorder-mute-rules-returns-successfully-reordered-the-mute-rules-response.json new file mode 100644 index 0000000000..fe0c6802eb --- /dev/null +++ b/test-runner-data/v2/security-monitoring/reorder-mute-rules-returns-successfully-reordered-the-mute-rules-response.json @@ -0,0 +1,33 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Reorder mute rules returns \"Successfully reordered the mute rules\" response", + "operation_id": "ReorderSecurityFindingsAutomationMuteRules", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MuteRuleReorderRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "{{ valid_mute_rule.data.id }}", + "type": "mute_rules" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/automation/mute_rules/reorder" + }, + "scenario": "Reorder mute rules returns \"Successfully reordered the mute rules\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/reorder-ticket-creation-rules-returns-successfully-reordered-the-ticket-creation-rules-response.json b/test-runner-data/v2/security-monitoring/reorder-ticket-creation-rules-returns-successfully-reordered-the-ticket-creation-rules-response.json new file mode 100644 index 0000000000..f18d9af120 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/reorder-ticket-creation-rules-returns-successfully-reordered-the-ticket-creation-rules-response.json @@ -0,0 +1,33 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Reorder ticket creation rules returns \"Successfully reordered the ticket creation rules\" response", + "operation_id": "ReorderSecurityFindingsAutomationTicketCreationRules", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TicketCreationRuleReorderRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "{{ valid_ticket_creation_rule.data.id }}", + "type": "ticket_creation_rules" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/automation/ticket_creation_rules/reorder" + }, + "scenario": "Reorder ticket creation rules returns \"Successfully reordered the ticket creation rules\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-conflict-response.json b/test-runner-data/v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-conflict-response.json new file mode 100644 index 0000000000..ccfef10c18 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-conflict-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 409, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Restore a rule to a historical version returns \"Conflict\" response", + "operation_id": "RestoreSecurityMonitoringRule", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}/restore/{version}" + }, + "scenario": "Restore a rule to a historical version returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-not-found-response.json new file mode 100644 index 0000000000..3bdb8db2a9 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Restore a rule to a historical version returns \"Not Found\" response", + "operation_id": "RestoreSecurityMonitoringRule", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 9999 + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}/restore/{version}" + }, + "scenario": "Restore a rule to a historical version returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-ok-response.json b/test-runner-data/v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-ok-response.json new file mode 100644 index 0000000000..0c40d3fddf --- /dev/null +++ b/test-runner-data/v2/security-monitoring/restore-a-rule-to-a-historical-version-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Restore a rule to a historical version returns \"OK\" response", + "operation_id": "RestoreSecurityMonitoringRule", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 1 + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}/restore/{version}" + }, + "scenario": "Restore a rule to a historical version returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/run-a-historical-job-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/run-a-historical-job-returns-bad-request-response.json new file mode 100644 index 0000000000..b7ff8830a3 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/run-a-historical-job-returns-bad-request-response.json @@ -0,0 +1,62 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Run a historical job returns \"Bad Request\" response", + "operation_id": "RunHistoricalJob", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RunHistoricalJobRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "jobDefinition": { + "cases": [ + { + "condition": "a > 1", + "name": "Condition 1", + "notifications": [], + "status": "info" + } + ], + "from": 1730387522611, + "index": "non_existing_index", + "message": "A large number of failed login attempts.", + "name": "Excessive number of failed attempts.", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "query": "source:non_existing_src_weekend" + } + ], + "tags": [], + "to": 1730391122611, + "type": "log_detection" + } + }, + "type": "historicalDetectionsJobCreate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/siem-historical-detections/jobs" + }, + "scenario": "Run a historical job returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/run-a-historical-job-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/run-a-historical-job-returns-not-found-response.json new file mode 100644 index 0000000000..3b5e5ab0c2 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/run-a-historical-job-returns-not-found-response.json @@ -0,0 +1,39 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Run a historical job returns \"Not Found\" response", + "operation_id": "RunHistoricalJob", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RunHistoricalJobRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "fromRule": { + "from": 1730201035064, + "id": "non-existng", + "index": "main", + "notifications": [], + "to": 1730204635115 + } + }, + "type": "historicalDetectionsJobCreate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/siem-historical-detections/jobs" + }, + "scenario": "Run a historical job returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/run-a-historical-job-returns-status-created-response.json b/test-runner-data/v2/security-monitoring/run-a-historical-job-returns-status-created-response.json new file mode 100644 index 0000000000..87729d09fa --- /dev/null +++ b/test-runner-data/v2/security-monitoring/run-a-historical-job-returns-status-created-response.json @@ -0,0 +1,62 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Run a historical job returns \"Status created\" response", + "operation_id": "RunHistoricalJob", + "request": { + "body": { + "schema": { + "format": null, + "ref": "RunHistoricalJobRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "jobDefinition": { + "cases": [ + { + "condition": "a > 1", + "name": "Condition 1", + "notifications": [], + "status": "info" + } + ], + "from": 1730387522611, + "index": "main", + "message": "A large number of failed login attempts.", + "name": "Excessive number of failed attempts.", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "query": "source:non_existing_src_weekend" + } + ], + "tags": [], + "to": 1730387532611, + "type": "log_detection" + } + }, + "type": "historicalDetectionsJobCreate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/siem-historical-detections/jobs" + }, + "scenario": "Run a historical job returns \"Status created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/search-security-findings-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/search-security-findings-returns-bad-request-response.json new file mode 100644 index 0000000000..71605bccda --- /dev/null +++ b/test-runner-data/v2/security-monitoring/search-security-findings-returns-bad-request-response.json @@ -0,0 +1,30 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Search security findings returns \"Bad Request\" response", + "operation_id": "SearchSecurityFindings", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityFindingsSearchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "page": { + "cursor": "invalid_cursor" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/search" + }, + "scenario": "Search security findings returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/search-security-findings-returns-ok-response-with-pagination.json b/test-runner-data/v2/security-monitoring/search-security-findings-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..091d0b6ac8 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/search-security-findings-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Search security findings returns \"OK\" response with pagination", + "operation_id": "SearchSecurityFindings", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityFindingsSearchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": "@severity:(critical OR high)", + "page": { + "limit": 1 + } + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/search" + }, + "scenario": "Search security findings returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/search-security-findings-returns-ok-response.json b/test-runner-data/v2/security-monitoring/search-security-findings-returns-ok-response.json new file mode 100644 index 0000000000..fdae15fb72 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/search-security-findings-returns-ok-response.json @@ -0,0 +1,32 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Search security findings returns \"OK\" response", + "operation_id": "SearchSecurityFindings", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityFindingsSearchRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": "@severity:(critical OR high)" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/search" + }, + "scenario": "Search security findings returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/test-a-notification-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/test-a-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..2d8943ca1c --- /dev/null +++ b/test-runner-data/v2/security-monitoring/test-a-notification-rule-returns-ok-response.json @@ -0,0 +1,47 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Test a notification rule returns \"OK\" response", + "operation_id": "SendSecurityMonitoringNotificationPreview", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateNotificationRuleParameters", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "env:prod", + "rule_types": [ + "log_detection" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_signals" + }, + "targets": [ + "@john.doe@email.com" + ] + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/notification_rules/send_notification_preview" + }, + "scenario": "Test a notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/test-a-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/test-a-rule-returns-ok-response.json new file mode 100644 index 0000000000..d6a50f4287 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/test-a-rule-returns-ok-response.json @@ -0,0 +1,80 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Test a rule returns \"OK\" response", + "operation_id": "TestSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleTestRequest", + "type": "object" + }, + "source": "inline", + "value": { + "rule": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule message.", + "name": "My security monitoring rule.", + "options": { + "decreaseCriticalityBasedOnEnv": false, + "detectionMethod": "threshold", + "evaluationWindow": 0, + "keepAlive": 0, + "maxSignalDuration": 0 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "name": "", + "query": "source:source_here" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + }, + "ruleQueryPayloads": [ + { + "expectedResult": true, + "index": 0, + "payload": { + "ddsource": "source_here", + "ddtags": "env:staging,version:5.1", + "hostname": "i-012345678", + "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", + "service": "payment", + "userIdentity": { + "assumed_role": "fake assumed_role" + } + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules/test" + }, + "scenario": "Test a rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/unmute-security-findings-returns-accepted-response.json b/test-runner-data/v2/security-monitoring/unmute-security-findings-returns-accepted-response.json new file mode 100644 index 0000000000..d0751cedb5 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/unmute-security-findings-returns-accepted-response.json @@ -0,0 +1,47 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 202, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Unmute security findings returns \"Accepted\" response", + "operation_id": "MuteSecurityFindings", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MuteFindingsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "mute": { + "description": "Resolved.", + "is_muted": false, + "reason": "NO_PENDING_FIX" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwMC0wYmd-MDE4NjcyMDJkMzE4MDE5ODY5MGE4ZmQ2MmFlMjg0Y2M=", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/mute" + }, + "scenario": "Unmute security findings returns \"Accepted\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/unmute-security-findings-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/unmute-security-findings-returns-not-found-response.json new file mode 100644 index 0000000000..3926cc14aa --- /dev/null +++ b/test-runner-data/v2/security-monitoring/unmute-security-findings-returns-not-found-response.json @@ -0,0 +1,47 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Unmute security findings returns \"Not Found\" response", + "operation_id": "MuteSecurityFindings", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MuteFindingsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "mute": { + "description": "Resolved.", + "is_muted": false, + "reason": "NO_PENDING_FIX" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/mute" + }, + "scenario": "Unmute security findings returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/unmute-security-findings-returns-unprocessable-entity-response.json b/test-runner-data/v2/security-monitoring/unmute-security-findings-returns-unprocessable-entity-response.json new file mode 100644 index 0000000000..eb65d0bd06 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/unmute-security-findings-returns-unprocessable-entity-response.json @@ -0,0 +1,47 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 422, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Unmute security findings returns \"Unprocessable Entity\" response", + "operation_id": "MuteSecurityFindings", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MuteFindingsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "mute": { + "description": "Resolved.", + "is_muted": false, + "reason": "RISK_ACCEPTED" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/security/findings/mute" + }, + "scenario": "Unmute security findings returns \"Unprocessable Entity\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-cloud-configuration-rule-s-details-returns-ok-response.json b/test-runner-data/v2/security-monitoring/update-a-cloud-configuration-rule-s-details-returns-ok-response.json new file mode 100644 index 0000000000..4c71830b44 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-cloud-configuration-rule-s-details-returns-ok-response.json @@ -0,0 +1,69 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a cloud configuration rule's details returns \"OK\" response", + "operation_id": "UpdateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleUpdatePayload", + "type": "object" + }, + "source": "inline", + "value": { + "cases": [ + { + "notifications": [], + "status": "info" + } + ], + "complianceSignalOptions": { + "userActivationStatus": false, + "userGroupByFields": [] + }, + "isEnabled": false, + "message": "ddd", + "name": "{{ unique }}_cloud_updated", + "options": { + "complianceRuleOptions": { + "regoRule": { + "policy": "package datadog\n\nimport data.datadog.output as dd_output\n\nimport future.keywords.contains\nimport future.keywords.if\nimport future.keywords.in\n\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\n\neval(iam_service_account_key) = \"skip\" if {\n\tiam_service_account_key.disabled\n} else = \"pass\" if {\n\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\n} else = \"fail\"\n\n# This part remains unchanged for all rules\nresults contains result if {\n\tsome resource in input.resources[input.main_resource_type]\n\tresult := dd_output.format(resource, eval(resource))\n}\n", + "resourceTypes": [ + "gcp_compute_disk" + ] + }, + "resourceType": "gcp_compute_disk" + } + }, + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "cloud_configuration_rule.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}" + }, + "scenario": "Update a cloud configuration rule's details returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-critical-asset-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/update-a-critical-asset-returns-not-found-response.json new file mode 100644 index 0000000000..e250aae92d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-critical-asset-returns-not-found-response.json @@ -0,0 +1,50 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a critical asset returns \"Not Found\" response", + "operation_id": "UpdateSecurityMonitoringCriticalAsset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringCriticalAssetUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "severity": "high" + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "critical_asset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-0000-0000-000000000001" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/critical_assets/{critical_asset_id}" + }, + "scenario": "Update a critical asset returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-critical-asset-returns-ok-response.json b/test-runner-data/v2/security-monitoring/update-a-critical-asset-returns-ok-response.json new file mode 100644 index 0000000000..8f0ecfcab5 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-critical-asset-returns-ok-response.json @@ -0,0 +1,57 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a critical asset returns \"OK\" response", + "operation_id": "UpdateSecurityMonitoringCriticalAsset", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringCriticalAssetUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "enabled": false, + "query": "no:alert", + "rule_query": "type:(log_detection OR signal_correlation OR workload_security OR application_security) ruleId:djg-ktx-ipq", + "severity": "decrease", + "tags": [ + "env:production" + ], + "version": 1 + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "critical_asset_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "critical_asset.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/critical_assets/{critical_asset_id}" + }, + "scenario": "Update a critical asset returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-custom-framework-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/update-a-custom-framework-returns-bad-request-response.json new file mode 100644 index 0000000000..565a6e8a22 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-custom-framework-returns-bad-request-response.json @@ -0,0 +1,81 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a custom framework returns \"Bad Request\" response", + "operation_id": "UpdateCustomFramework", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateCustomFrameworkRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "handle": "", + "name": "", + "requirements": [ + { + "controls": [ + { + "name": "", + "rules_id": [ + "" + ] + } + ], + "name": "" + } + ], + "version": "" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "handle", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "create-framework-new" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "10" + }, + "style": null + } + ], + "path": "/api/v2/cloud_security_management/custom_frameworks/{handle}/{version}" + }, + "scenario": "Update a custom framework returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-custom-framework-returns-ok-response.json b/test-runner-data/v2/security-monitoring/update-a-custom-framework-returns-ok-response.json new file mode 100644 index 0000000000..7bcb8f98cf --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-custom-framework-returns-ok-response.json @@ -0,0 +1,82 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a custom framework returns \"OK\" response", + "operation_id": "UpdateCustomFramework", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateCustomFrameworkRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "handle", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "create-framework-new" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "version", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "10" + }, + "style": null + } + ], + "path": "/api/v2/cloud_security_management/custom_frameworks/{handle}/{version}" + }, + "scenario": "Update a custom framework returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-due-date-rule-returns-successfully-updated-the-due-date-rule-response.json b/test-runner-data/v2/security-monitoring/update-a-due-date-rule-returns-successfully-updated-the-due-date-rule-response.json new file mode 100644 index 0000000000..46ce5b101a --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-due-date-rule-returns-successfully-updated-the-due-date-rule-response.json @@ -0,0 +1,66 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a due date rule returns \"Successfully updated the due date rule\" response", + "operation_id": "UpdateSecurityFindingsAutomationDueDateRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "DueDateRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "action": { + "due_days_per_severity": [ + { + "due_in_days": 14, + "severity": "critical" + } + ], + "due_from": "first_seen" + }, + "enabled": false, + "name": "{{ unique }}", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "due_date_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_due_date_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/automation/due_date_rules/{rule_id}" + }, + "scenario": "Update a due date rule returns \"Successfully updated the due date rule\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-mute-rule-returns-successfully-updated-the-mute-rule-response.json b/test-runner-data/v2/security-monitoring/update-a-mute-rule-returns-successfully-updated-the-mute-rule-response.json new file mode 100644 index 0000000000..3c363125e9 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-mute-rule-returns-successfully-updated-the-mute-rule-response.json @@ -0,0 +1,60 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a mute rule returns \"Successfully updated the mute rule\" response", + "operation_id": "UpdateSecurityFindingsAutomationMuteRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "MuteRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "action": { + "reason": "false_positive" + }, + "enabled": false, + "name": "{{ unique }}", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "mute_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_mute_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/automation/mute_rules/{rule_id}" + }, + "scenario": "Update a mute rule returns \"Successfully updated the mute rule\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-security-filter-returns-ok-response.json b/test-runner-data/v2/security-monitoring/update-a-security-filter-returns-ok-response.json new file mode 100644 index 0000000000..3242861ef5 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-security-filter-returns-ok-response.json @@ -0,0 +1,55 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a security filter returns \"OK\" response", + "operation_id": "UpdateSecurityFilter", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityFilterUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "exclusion_filters": [], + "filtered_data_type": "logs", + "is_enabled": true, + "name": "{{ unique }}", + "query": "service:{{ unique_alnum }}", + "version": 1 + }, + "type": "security_filters" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "security_filter_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_filter.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/security_filters/{security_filter_id}" + }, + "scenario": "Update a security filter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-suppression-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/update-a-suppression-rule-returns-ok-response.json new file mode 100644 index 0000000000..1e9d148015 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-suppression-rule-returns-ok-response.json @@ -0,0 +1,50 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a suppression rule returns \"OK\" response", + "operation_id": "UpdateSecurityMonitoringSuppression", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringSuppressionUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "suppression_query": "env:staging status:low" + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "suppression_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "suppression.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/configuration/suppressions/{suppression_id}" + }, + "scenario": "Update a suppression rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-a-ticket-creation-rule-returns-successfully-updated-the-ticket-creation-rule-response.json b/test-runner-data/v2/security-monitoring/update-a-ticket-creation-rule-returns-successfully-updated-the-ticket-creation-rule-response.json new file mode 100644 index 0000000000..e5ab343959 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-a-ticket-creation-rule-returns-successfully-updated-the-ticket-creation-rule-response.json @@ -0,0 +1,62 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update a ticket creation rule returns \"Successfully updated the ticket creation rule\" response", + "operation_id": "UpdateSecurityFindingsAutomationTicketCreationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TicketCreationRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "action": { + "max_tickets_per_day": 5, + "project_id": "11111111-1111-1111-1111-111111111111", + "target": "jira" + }, + "enabled": false, + "name": "{{ unique }}", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "ticket_creation_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "valid_ticket_creation_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security/findings/automation/ticket_creation_rules/{rule_id}" + }, + "scenario": "Update a ticket creation rule returns \"Successfully updated the ticket creation rule\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-an-existing-rule-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/update-an-existing-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..6eded3be41 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-an-existing-rule-returns-bad-request-response.json @@ -0,0 +1,59 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update an existing rule returns \"Bad Request\" response", + "operation_id": "UpdateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleUpdatePayload", + "type": "object" + }, + "source": "inline", + "value": { + "cases": [ + { + "status": "info" + } + ], + "isEnabled": true, + "message": "Test rule Bad", + "name": "{{ unique }}", + "options": {}, + "queries": [ + { + "query": "" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}" + }, + "scenario": "Update an existing rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-an-existing-rule-returns-not-found-response.json b/test-runner-data/v2/security-monitoring/update-an-existing-rule-returns-not-found-response.json new file mode 100644 index 0000000000..cd499973aa --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-an-existing-rule-returns-not-found-response.json @@ -0,0 +1,71 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 404, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update an existing rule returns \"Not Found\" response", + "operation_id": "UpdateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleUpdatePayload", + "type": "object" + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "{{ unique }}-NotFound", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "abcde-12345" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}" + }, + "scenario": "Update an existing rule returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-an-existing-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/update-an-existing-rule-returns-ok-response.json new file mode 100644 index 0000000000..aba3a561bf --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-an-existing-rule-returns-ok-response.json @@ -0,0 +1,71 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 200, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update an existing rule returns \"OK\" response", + "operation_id": "UpdateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleUpdatePayload", + "type": "object" + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "{{ unique }}-Updated", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "security_rule.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/security_monitoring/rules/{rule_id}" + }, + "scenario": "Update an existing rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-resource-filters-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/update-resource-filters-returns-bad-request-response.json new file mode 100644 index 0000000000..7e510e41e2 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-resource-filters-returns-bad-request-response.json @@ -0,0 +1,40 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update resource filters returns \"Bad Request\" response", + "operation_id": "UpdateResourceEvaluationFilters", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateResourceEvaluationFiltersRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "cloud_provider": { + "invalid": { + "aws_account_id": [ + "tag1:v1" + ] + } + } + }, + "id": "csm_resource_filter", + "type": "csm_resource_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [], + "path": "/api/v2/cloud_security_management/resource_filters" + }, + "scenario": "Update resource filters returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/update-resource-filters-returns-ok-response.json b/test-runner-data/v2/security-monitoring/update-resource-filters-returns-ok-response.json new file mode 100644 index 0000000000..905451911f --- /dev/null +++ b/test-runner-data/v2/security-monitoring/update-resource-filters-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 201, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Update resource filters returns \"OK\" response", + "operation_id": "UpdateResourceEvaluationFilters", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateResourceEvaluationFiltersRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "cloud_provider": { + "aws": { + "aws_account_id": [ + "tag1:v1" + ] + } + } + }, + "id": "csm_resource_filter", + "type": "csm_resource_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [], + "path": "/api/v2/cloud_security_management/resource_filters" + }, + "scenario": "Update resource filters returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/validate-a-detection-rule-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/validate-a-detection-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..a29fd7dee6 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/validate-a-detection-rule-returns-bad-request-response.json @@ -0,0 +1,61 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Validate a detection rule returns \"Bad Request\" response", + "operation_id": "ValidateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleValidatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule", + "name": "My security monitoring rule", + "options": { + "detectionMethod": "threshold", + "evaluationWindow": 1800, + "keepAlive": 999999, + "maxSignalDuration": 1800 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "name": "", + "query": "source:source_here" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules/validation" + }, + "scenario": "Validate a detection rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/validate-a-detection-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/validate-a-detection-rule-returns-ok-response.json new file mode 100644 index 0000000000..9cf3e5989d --- /dev/null +++ b/test-runner-data/v2/security-monitoring/validate-a-detection-rule-returns-ok-response.json @@ -0,0 +1,61 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Validate a detection rule returns \"OK\" response", + "operation_id": "ValidateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleValidatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule", + "name": "My security monitoring rule", + "options": { + "detectionMethod": "threshold", + "evaluationWindow": 1800, + "keepAlive": 1800, + "maxSignalDuration": 1800 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "name": "", + "query": "source:source_here" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules/validation" + }, + "scenario": "Validate a detection rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/validate-a-detection-rule-with-detection-method-new-value-with-enabled-feature-instantaneousbaseline-returns-ok-response.json b/test-runner-data/v2/security-monitoring/validate-a-detection-rule-with-detection-method-new-value-with-enabled-feature-instantaneousbaseline-returns-ok-response.json new file mode 100644 index 0000000000..bfd25e9e79 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/validate-a-detection-rule-with-detection-method-new-value-with-enabled-feature-instantaneousbaseline-returns-ok-response.json @@ -0,0 +1,72 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Validate a detection rule with detection method 'new_value' with enabled feature 'instantaneousBaseline' returns \"OK\" response", + "operation_id": "ValidateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleValidatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule", + "name": "My security monitoring rule", + "options": { + "detectionMethod": "new_value", + "evaluationWindow": 0, + "keepAlive": 300, + "maxSignalDuration": 600, + "newValueOptions": { + "forgetAfter": 7, + "instantaneousBaseline": true, + "learningDuration": 1, + "learningMethod": "duration", + "learningThreshold": 0 + } + }, + "queries": [ + { + "aggregation": "new_value", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "metric": "name", + "metrics": [ + "name" + ], + "name": "", + "query": "source:source_here" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules/validation" + }, + "scenario": "Validate a detection rule with detection method 'new_value' with enabled feature 'instantaneousBaseline' returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/validate-a-detection-rule-with-detection-method-sequence-detection-returns-ok-response.json b/test-runner-data/v2/security-monitoring/validate-a-detection-rule-with-detection-method-sequence-detection-returns-ok-response.json new file mode 100644 index 0000000000..32dc8adf6e --- /dev/null +++ b/test-runner-data/v2/security-monitoring/validate-a-detection-rule-with-detection-method-sequence-detection-returns-ok-response.json @@ -0,0 +1,89 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Validate a detection rule with detection method 'sequence_detection' returns \"OK\" response", + "operation_id": "ValidateSecurityMonitoringRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringRuleValidatePayload", + "type": null + }, + "source": "inline", + "value": { + "cases": [ + { + "condition": "step_b > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule", + "name": "My security monitoring rule", + "options": { + "detectionMethod": "sequence_detection", + "evaluationWindow": 0, + "keepAlive": 300, + "maxSignalDuration": 600, + "sequenceDetectionOptions": { + "stepTransitions": [ + { + "child": "step_b", + "evaluationWindow": 900, + "parent": "step_a" + } + ], + "steps": [ + { + "condition": "a > 0", + "evaluationWindow": 60, + "name": "step_a" + }, + { + "condition": "b > 0", + "evaluationWindow": 60, + "name": "step_b" + } + ] + } + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "name": "", + "query": "source:source_here" + }, + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "name": "", + "query": "source:source_here2" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/rules/validation" + }, + "scenario": "Validate a detection rule with detection method 'sequence_detection' returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/validate-a-suppression-rule-returns-bad-request-response.json b/test-runner-data/v2/security-monitoring/validate-a-suppression-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..e633491dc4 --- /dev/null +++ b/test-runner-data/v2/security-monitoring/validate-a-suppression-rule-returns-bad-request-response.json @@ -0,0 +1,36 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 400, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Validate a suppression rule returns \"Bad Request\" response", + "operation_id": "ValidateSecurityMonitoringSuppression", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringSuppressionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "data_exclusion_query": "not enough attributes", + "enabled": false, + "name": "cold_harbour", + "rule_query": "rule:[A-Invalid" + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/suppressions/validation" + }, + "scenario": "Validate a suppression rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/security-monitoring/validate-a-suppression-rule-returns-ok-response.json b/test-runner-data/v2/security-monitoring/validate-a-suppression-rule-returns-ok-response.json new file mode 100644 index 0000000000..3c5332242b --- /dev/null +++ b/test-runner-data/v2/security-monitoring/validate-a-suppression-rule-returns-ok-response.json @@ -0,0 +1,37 @@ +{ + "api": "SecurityMonitoring", + "expected_status": 204, + "feature": "Security Monitoring", + "id": "v2/Security Monitoring/Validate a suppression rule returns \"OK\" response", + "operation_id": "ValidateSecurityMonitoringSuppression", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SecurityMonitoringSuppressionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "data_exclusion_query": "source:cloudtrail account_id:12345", + "description": "This rule suppresses low-severity signals in staging environments.", + "enabled": true, + "name": "Custom suppression", + "rule_query": "type:log_detection source:cloudtrail" + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/security_monitoring/configuration/suppressions/validation" + }, + "scenario": "Validate a suppression rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/create-scanning-group-returns-ok-response.json b/test-runner-data/v2/sensitive-data-scanner/create-scanning-group-returns-ok-response.json new file mode 100644 index 0000000000..cf697785b7 --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/create-scanning-group-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 201, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Create Scanning Group returns \"OK\" response", + "operation_id": "CreateScanningGroup", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerGroupCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "{{ unique }}", + "product_list": [ + "logs" + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "{{ configuration.data.id }}", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/sensitive-data-scanner/config/groups" + }, + "scenario": "Create Scanning Group returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/create-scanning-rule-returns-bad-request-response.json b/test-runner-data/v2/sensitive-data-scanner/create-scanning-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..a2d98fa6cc --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/create-scanning-rule-returns-bad-request-response.json @@ -0,0 +1,49 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 400, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Create Scanning Rule returns \"Bad Request\" response", + "operation_id": "CreateScanningRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_enabled": true, + "pattern": "pattern", + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "relationships": { + "group": { + "data": { + "id": "{{ group.data.id }}", + "type": "{{ group.data.type }}" + } + } + }, + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/sensitive-data-scanner/config/rules" + }, + "scenario": "Create Scanning Rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/create-scanning-rule-returns-ok-response.json b/test-runner-data/v2/sensitive-data-scanner/create-scanning-rule-returns-ok-response.json new file mode 100644 index 0000000000..e3a4e32f67 --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/create-scanning-rule-returns-ok-response.json @@ -0,0 +1,63 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 201, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Create Scanning Rule returns \"OK\" response", + "operation_id": "CreateScanningRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "excluded_namespaces": [ + "admin.name" + ], + "included_keyword_configuration": { + "character_count": 35, + "keywords": [ + "credit card" + ] + }, + "is_enabled": true, + "name": "{{ unique }}", + "namespaces": [ + "admin" + ], + "pattern": "pattern", + "priority": 1, + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "relationships": { + "group": { + "data": { + "id": "{{ group.data.id }}", + "type": "{{ group.data.type }}" + } + } + }, + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/sensitive-data-scanner/config/rules" + }, + "scenario": "Create Scanning Rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/create-scanning-rule-with-should-save-match-returns-ok-response.json b/test-runner-data/v2/sensitive-data-scanner/create-scanning-rule-with-should-save-match-returns-ok-response.json new file mode 100644 index 0000000000..17f11666b0 --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/create-scanning-rule-with-should-save-match-returns-ok-response.json @@ -0,0 +1,53 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 201, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Create Scanning Rule with should_save_match returns \"OK\" response", + "operation_id": "CreateScanningRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerRuleCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_enabled": true, + "name": "{{ unique }}", + "pattern": "pattern", + "priority": 1, + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "replacement_string": "REDACTED", + "should_save_match": true, + "type": "replacement_string" + } + }, + "relationships": { + "group": { + "data": { + "id": "{{ group.data.id }}", + "type": "{{ group.data.type }}" + } + } + }, + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/sensitive-data-scanner/config/rules" + }, + "scenario": "Create Scanning Rule with should_save_match returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/delete-scanning-group-returns-ok-response.json b/test-runner-data/v2/sensitive-data-scanner/delete-scanning-group-returns-ok-response.json new file mode 100644 index 0000000000..57a6a74f92 --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/delete-scanning-group-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 200, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Delete Scanning Group returns \"OK\" response", + "operation_id": "DeleteScanningGroup", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerGroupDeleteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "group.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/sensitive-data-scanner/config/groups/{group_id}" + }, + "scenario": "Delete Scanning Group returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/delete-scanning-rule-returns-ok-response.json b/test-runner-data/v2/sensitive-data-scanner/delete-scanning-rule-returns-ok-response.json new file mode 100644 index 0000000000..74453a4920 --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/delete-scanning-rule-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 200, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Delete Scanning Rule returns \"OK\" response", + "operation_id": "DeleteScanningRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerRuleDeleteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/sensitive-data-scanner/config/rules/{rule_id}" + }, + "scenario": "Delete Scanning Rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/list-scanning-groups-returns-ok-response.json b/test-runner-data/v2/sensitive-data-scanner/list-scanning-groups-returns-ok-response.json new file mode 100644 index 0000000000..499f60f97b --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/list-scanning-groups-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 200, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/List Scanning Groups returns \"OK\" response", + "operation_id": "ListScanningGroups", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/sensitive-data-scanner/config" + }, + "scenario": "List Scanning Groups returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/reorder-groups-returns-bad-request-response.json b/test-runner-data/v2/sensitive-data-scanner/reorder-groups-returns-bad-request-response.json new file mode 100644 index 0000000000..4e7d5ee213 --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/reorder-groups-returns-bad-request-response.json @@ -0,0 +1,42 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 400, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Reorder Groups returns \"Bad Request\" response", + "operation_id": "ReorderScanningGroups", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerConfigRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{ configuration.data.id }}", + "relationships": { + "groups": { + "data": [ + { + "id": "{{ unique }}", + "type": "sensitive_data_scanner_group" + } + ] + } + }, + "type": "sensitive_data_scanner_configuration" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/sensitive-data-scanner/config" + }, + "scenario": "Reorder Groups returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/reorder-groups-returns-ok-response.json b/test-runner-data/v2/sensitive-data-scanner/reorder-groups-returns-ok-response.json new file mode 100644 index 0000000000..fb3c76e482 --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/reorder-groups-returns-ok-response.json @@ -0,0 +1,42 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 200, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Reorder Groups returns \"OK\" response", + "operation_id": "ReorderScanningGroups", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerConfigRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "id": "{{ configuration.data.id }}", + "relationships": { + "groups": { + "data": [ + { + "id": "{{ group.data.id }}", + "type": "sensitive_data_scanner_group" + } + ] + } + }, + "type": "sensitive_data_scanner_configuration" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [], + "path": "/api/v2/sensitive-data-scanner/config" + }, + "scenario": "Reorder Groups returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/update-scanning-group-returns-ok-response.json b/test-runner-data/v2/sensitive-data-scanner/update-scanning-group-returns-ok-response.json new file mode 100644 index 0000000000..ac6d75b4f4 --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/update-scanning-group-returns-ok-response.json @@ -0,0 +1,70 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 200, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Update Scanning Group returns \"OK\" response", + "operation_id": "UpdateScanningGroup", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerGroupUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "{{ unique }}", + "product_list": [ + "logs" + ] + }, + "id": "{{ group.data.id }}", + "relationships": { + "configuration": { + "data": { + "id": "{{ configuration.data.id }}", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "group_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "group.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/sensitive-data-scanner/config/groups/{group_id}" + }, + "scenario": "Update Scanning Group returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/update-scanning-rule-returns-bad-request-response.json b/test-runner-data/v2/sensitive-data-scanner/update-scanning-rule-returns-bad-request-response.json new file mode 100644 index 0000000000..86761fee86 --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/update-scanning-rule-returns-bad-request-response.json @@ -0,0 +1,66 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 400, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Update Scanning Rule returns \"Bad Request\" response", + "operation_id": "UpdateScanningRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "is_enabled": true, + "name": "{{ unique }}", + "pattern": "pattern", + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "relationships": { + "group": { + "data": { + "id": "{{ group.data.id }}", + "type": "{{ group.data.type }}" + } + } + } + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/sensitive-data-scanner/config/rules/{rule_id}" + }, + "scenario": "Update Scanning Rule returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/sensitive-data-scanner/update-scanning-rule-returns-ok-response.json b/test-runner-data/v2/sensitive-data-scanner/update-scanning-rule-returns-ok-response.json new file mode 100644 index 0000000000..28223c285a --- /dev/null +++ b/test-runner-data/v2/sensitive-data-scanner/update-scanning-rule-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "SensitiveDataScanner", + "expected_status": 200, + "feature": "Sensitive Data Scanner", + "id": "v2/Sensitive Data Scanner/Update Scanning Rule returns \"OK\" response", + "operation_id": "UpdateScanningRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SensitiveDataScannerRuleUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "included_keyword_configuration": { + "character_count": 35, + "keywords": [ + "credit card", + "cc" + ] + }, + "is_enabled": true, + "name": "{{ unique }}", + "pattern": "pattern", + "priority": 5, + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "id": "{{ rule.data.id }}", + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/sensitive-data-scanner/config/rules/{rule_id}" + }, + "scenario": "Update Scanning Rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/create-a-service-account-returns-ok-response.json b/test-runner-data/v2/service-accounts/create-a-service-account-returns-ok-response.json new file mode 100644 index 0000000000..3b89ae01a5 --- /dev/null +++ b/test-runner-data/v2/service-accounts/create-a-service-account-returns-ok-response.json @@ -0,0 +1,45 @@ +{ + "api": "ServiceAccounts", + "expected_status": 201, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Create a service account returns \"OK\" response", + "operation_id": "CreateServiceAccount", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceAccountCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "email": "{{ unique }}@datadoghq.com", + "name": "Test API Client", + "service_account": true + }, + "relationships": { + "roles": { + "data": [ + { + "id": "{{ role.data.id }}", + "type": "roles" + } + ] + } + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/service_accounts" + }, + "scenario": "Create a service account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/create-an-access-token-for-a-service-account-returns-created-response.json b/test-runner-data/v2/service-accounts/create-an-access-token-for-a-service-account-returns-created-response.json new file mode 100644 index 0000000000..30c07c09bf --- /dev/null +++ b/test-runner-data/v2/service-accounts/create-an-access-token-for-a-service-account-returns-created-response.json @@ -0,0 +1,53 @@ +{ + "api": "ServiceAccounts", + "expected_status": 201, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Create an access token for a service account returns \"Created\" response", + "operation_id": "CreateServiceAccountAccessToken", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceAccountAccessTokenCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}", + "scopes": [ + "dashboards_read" + ] + }, + "type": "service_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/access_tokens" + }, + "scenario": "Create an access token for a service account returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/create-an-application-key-for-this-service-account-returns-created-response.json b/test-runner-data/v2/service-accounts/create-an-application-key-for-this-service-account-returns-created-response.json new file mode 100644 index 0000000000..03d3a00c01 --- /dev/null +++ b/test-runner-data/v2/service-accounts/create-an-application-key-for-this-service-account-returns-created-response.json @@ -0,0 +1,50 @@ +{ + "api": "ServiceAccounts", + "expected_status": 201, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Create an application key for this service account returns \"Created\" response", + "operation_id": "CreateServiceAccountApplicationKey", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationKeyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/application_keys" + }, + "scenario": "Create an application key for this service account returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/create-an-application-key-with-scopes-for-this-service-account-returns-created-response.json b/test-runner-data/v2/service-accounts/create-an-application-key-with-scopes-for-this-service-account-returns-created-response.json new file mode 100644 index 0000000000..f3767db7e3 --- /dev/null +++ b/test-runner-data/v2/service-accounts/create-an-application-key-with-scopes-for-this-service-account-returns-created-response.json @@ -0,0 +1,55 @@ +{ + "api": "ServiceAccounts", + "expected_status": 201, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Create an application key with scopes for this service account returns \"Created\" response", + "operation_id": "CreateServiceAccountApplicationKey", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationKeyCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ unique }}", + "scopes": [ + "dashboards_read", + "dashboards_write", + "dashboards_public_share" + ] + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/application_keys" + }, + "scenario": "Create an application key with scopes for this service account returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/delete-an-application-key-for-this-service-account-returns-no-content-response.json b/test-runner-data/v2/service-accounts/delete-an-application-key-for-this-service-account-returns-no-content-response.json new file mode 100644 index 0000000000..129d8a591b --- /dev/null +++ b/test-runner-data/v2/service-accounts/delete-an-application-key-for-this-service-account-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "ServiceAccounts", + "expected_status": 204, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Delete an application key for this service account returns \"No Content\" response", + "operation_id": "DeleteServiceAccountApplicationKey", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_application_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/application_keys/{app_key_id}" + }, + "scenario": "Delete an application key for this service account returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/edit-an-application-key-for-this-service-account-returns-ok-response.json b/test-runner-data/v2/service-accounts/edit-an-application-key-for-this-service-account-returns-ok-response.json new file mode 100644 index 0000000000..81f2375c60 --- /dev/null +++ b/test-runner-data/v2/service-accounts/edit-an-application-key-for-this-service-account-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "ServiceAccounts", + "expected_status": 200, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Edit an application key for this service account returns \"OK\" response", + "operation_id": "UpdateServiceAccountApplicationKey", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ApplicationKeyUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ service_account_application_key.data.attributes.name }}-updated" + }, + "id": "{{ service_account_application_key.data.id }}", + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_application_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/application_keys/{app_key_id}" + }, + "scenario": "Edit an application key for this service account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/get-an-access-token-for-a-service-account-returns-ok-response.json b/test-runner-data/v2/service-accounts/get-an-access-token-for-a-service-account-returns-ok-response.json new file mode 100644 index 0000000000..360ba37eda --- /dev/null +++ b/test-runner-data/v2/service-accounts/get-an-access-token-for-a-service-account-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "ServiceAccounts", + "expected_status": 200, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Get an access token for a service account returns \"OK\" response", + "operation_id": "GetServiceAccountAccessToken", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "token_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_access_token.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/access_tokens/{token_id}" + }, + "scenario": "Get an access token for a service account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/get-one-application-key-for-this-service-account-returns-ok-response.json b/test-runner-data/v2/service-accounts/get-one-application-key-for-this-service-account-returns-ok-response.json new file mode 100644 index 0000000000..639875896e --- /dev/null +++ b/test-runner-data/v2/service-accounts/get-one-application-key-for-this-service-account-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "ServiceAccounts", + "expected_status": 200, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Get one application key for this service account returns \"OK\" response", + "operation_id": "GetServiceAccountApplicationKey", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "app_key_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_application_key.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/application_keys/{app_key_id}" + }, + "scenario": "Get one application key for this service account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/list-access-tokens-for-a-service-account-returns-ok-response.json b/test-runner-data/v2/service-accounts/list-access-tokens-for-a-service-account-returns-ok-response.json new file mode 100644 index 0000000000..4454c6411b --- /dev/null +++ b/test-runner-data/v2/service-accounts/list-access-tokens-for-a-service-account-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceAccounts", + "expected_status": 200, + "feature": "Service Accounts", + "id": "v2/Service Accounts/List access tokens for a service account returns \"OK\" response", + "operation_id": "ListServiceAccountAccessTokens", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/access_tokens" + }, + "scenario": "List access tokens for a service account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/list-application-keys-for-this-service-account-returns-ok-response.json b/test-runner-data/v2/service-accounts/list-application-keys-for-this-service-account-returns-ok-response.json new file mode 100644 index 0000000000..fea2f01ebd --- /dev/null +++ b/test-runner-data/v2/service-accounts/list-application-keys-for-this-service-account-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceAccounts", + "expected_status": 200, + "feature": "Service Accounts", + "id": "v2/Service Accounts/List application keys for this service account returns \"OK\" response", + "operation_id": "ListServiceAccountApplicationKeys", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/application_keys" + }, + "scenario": "List application keys for this service account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/revoke-an-access-token-for-a-service-account-returns-no-content-response.json b/test-runner-data/v2/service-accounts/revoke-an-access-token-for-a-service-account-returns-no-content-response.json new file mode 100644 index 0000000000..9f6c00054e --- /dev/null +++ b/test-runner-data/v2/service-accounts/revoke-an-access-token-for-a-service-account-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "ServiceAccounts", + "expected_status": 204, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Revoke an access token for a service account returns \"No Content\" response", + "operation_id": "RevokeServiceAccountAccessToken", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "token_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_access_token.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/access_tokens/{token_id}" + }, + "scenario": "Revoke an access token for a service account returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-accounts/update-an-access-token-for-a-service-account-returns-ok-response.json b/test-runner-data/v2/service-accounts/update-an-access-token-for-a-service-account-returns-ok-response.json new file mode 100644 index 0000000000..d1d13e0d3c --- /dev/null +++ b/test-runner-data/v2/service-accounts/update-an-access-token-for-a-service-account-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "ServiceAccounts", + "expected_status": 200, + "feature": "Service Accounts", + "id": "v2/Service Accounts/Update an access token for a service account returns \"OK\" response", + "operation_id": "UpdateServiceAccountAccessToken", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceAccountAccessTokenUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "{{ service_account_access_token.data.attributes.name }}-updated" + }, + "id": "{{ service_account_access_token.data.id }}", + "type": "service_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_account_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_user.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "token_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "service_account_access_token.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/service_accounts/{service_account_id}/access_tokens/{token_id}" + }, + "scenario": "Update an access token for a service account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-definition/create-or-update-service-definition-using-schema-v2-1-returns-created-response.json b/test-runner-data/v2/service-definition/create-or-update-service-definition-using-schema-v2-1-returns-created-response.json new file mode 100644 index 0000000000..a00d4d8a13 --- /dev/null +++ b/test-runner-data/v2/service-definition/create-or-update-service-definition-using-schema-v2-1-returns-created-response.json @@ -0,0 +1,72 @@ +{ + "api": "ServiceDefinition", + "expected_status": 200, + "feature": "Service Definition", + "id": "v2/Service Definition/Create or update service definition using schema v2-1 returns \"CREATED\" response", + "operation_id": "CreateOrUpdateServiceDefinitions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceDefinitionsCreateRequest", + "type": null + }, + "source": "inline", + "value": { + "contacts": [ + { + "contact": "contact@datadoghq.com", + "name": "Team Email", + "type": "email" + } + ], + "dd-service": "service-{{ unique_lower_alnum }}", + "extensions": { + "myorgextension": "extensionvalue" + }, + "integrations": { + "opsgenie": { + "region": "US", + "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000" + }, + "pagerduty": { + "service-url": "https://my-org.pagerduty.com/service-directory/PMyService" + } + }, + "links": [ + { + "name": "Runbook", + "type": "runbook", + "url": "https://my-runbook" + }, + { + "name": "Source Code", + "provider": "GitHub", + "type": "repo", + "url": "https://github.com/DataDog/schema" + }, + { + "name": "Architecture", + "provider": "Gigoogle drivetHub", + "type": "doc", + "url": "https://my-runbook" + } + ], + "schema-version": "v2.1", + "tags": [ + "my:tag", + "service:tag" + ], + "team": "my-team" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/services/definitions" + }, + "scenario": "Create or update service definition using schema v2-1 returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-definition/create-or-update-service-definition-using-schema-v2-2-returns-created-response.json b/test-runner-data/v2/service-definition/create-or-update-service-definition-using-schema-v2-2-returns-created-response.json new file mode 100644 index 0000000000..1ea38eb9ec --- /dev/null +++ b/test-runner-data/v2/service-definition/create-or-update-service-definition-using-schema-v2-2-returns-created-response.json @@ -0,0 +1,72 @@ +{ + "api": "ServiceDefinition", + "expected_status": 200, + "feature": "Service Definition", + "id": "v2/Service Definition/Create or update service definition using schema v2-2 returns \"CREATED\" response", + "operation_id": "CreateOrUpdateServiceDefinitions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceDefinitionsCreateRequest", + "type": null + }, + "source": "inline", + "value": { + "contacts": [ + { + "contact": "contact@datadoghq.com", + "name": "Team Email", + "type": "email" + } + ], + "dd-service": "service-{{ unique_lower_alnum }}", + "extensions": { + "myorgextension": "extensionvalue" + }, + "integrations": { + "opsgenie": { + "region": "US", + "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000" + }, + "pagerduty": { + "service-url": "https://my-org.pagerduty.com/service-directory/PMyService" + } + }, + "links": [ + { + "name": "Runbook", + "type": "runbook", + "url": "https://my-runbook" + }, + { + "name": "Source Code", + "provider": "GitHub", + "type": "repo", + "url": "https://github.com/DataDog/schema" + }, + { + "name": "Architecture", + "provider": "Gigoogle drivetHub", + "type": "doc", + "url": "https://my-runbook" + } + ], + "schema-version": "v2.2", + "tags": [ + "my:tag", + "service:tag" + ], + "team": "my-team" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/services/definitions" + }, + "scenario": "Create or update service definition using schema v2-2 returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-definition/create-or-update-service-definition-using-schema-v2-returns-created-response.json b/test-runner-data/v2/service-definition/create-or-update-service-definition-using-schema-v2-returns-created-response.json new file mode 100644 index 0000000000..745312cbef --- /dev/null +++ b/test-runner-data/v2/service-definition/create-or-update-service-definition-using-schema-v2-returns-created-response.json @@ -0,0 +1,73 @@ +{ + "api": "ServiceDefinition", + "expected_status": 200, + "feature": "Service Definition", + "id": "v2/Service Definition/Create or update service definition using schema v2 returns \"CREATED\" response", + "operation_id": "CreateOrUpdateServiceDefinitions", + "request": { + "body": { + "schema": { + "format": null, + "ref": "ServiceDefinitionsCreateRequest", + "type": null + }, + "source": "inline", + "value": { + "contacts": [ + { + "contact": "contact@datadoghq.com", + "name": "Team Email", + "type": "email" + } + ], + "dd-service": "service-{{ unique_lower_alnum }}", + "dd-team": "my-team", + "docs": [ + { + "name": "Architecture", + "provider": "google drive", + "url": "https://gdrive/mydoc" + } + ], + "extensions": { + "myorgextension": "extensionvalue" + }, + "integrations": { + "opsgenie": { + "region": "US", + "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000" + }, + "pagerduty": "https://my-org.pagerduty.com/service-directory/PMyService" + }, + "links": [ + { + "name": "Runbook", + "type": "runbook", + "url": "https://my-runbook" + } + ], + "repos": [ + { + "name": "Source Code", + "provider": "GitHub", + "url": "https://github.com/DataDog/schema" + } + ], + "schema-version": "v2", + "tags": [ + "my:tag", + "service:tag" + ], + "team": "my-team" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/services/definitions" + }, + "scenario": "Create or update service definition using schema v2 returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-definition/delete-a-single-service-definition-returns-not-found-response.json b/test-runner-data/v2/service-definition/delete-a-single-service-definition-returns-not-found-response.json new file mode 100644 index 0000000000..3f2fb3cebe --- /dev/null +++ b/test-runner-data/v2/service-definition/delete-a-single-service-definition-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceDefinition", + "expected_status": 404, + "feature": "Service Definition", + "id": "v2/Service Definition/Delete a single service definition returns \"Not Found\" response", + "operation_id": "DeleteServiceDefinition", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-a-service" + }, + "style": null + } + ], + "path": "/api/v2/services/definitions/{service_name}" + }, + "scenario": "Delete a single service definition returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-definition/delete-a-single-service-definition-returns-ok-response.json b/test-runner-data/v2/service-definition/delete-a-single-service-definition-returns-ok-response.json new file mode 100644 index 0000000000..a7a9a25601 --- /dev/null +++ b/test-runner-data/v2/service-definition/delete-a-single-service-definition-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceDefinition", + "expected_status": 204, + "feature": "Service Definition", + "id": "v2/Service Definition/Delete a single service definition returns \"OK\" response", + "operation_id": "DeleteServiceDefinition", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "service-definition-test" + }, + "style": null + } + ], + "path": "/api/v2/services/definitions/{service_name}" + }, + "scenario": "Delete a single service definition returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-definition/get-a-single-service-definition-returns-not-found-response.json b/test-runner-data/v2/service-definition/get-a-single-service-definition-returns-not-found-response.json new file mode 100644 index 0000000000..57df6d6501 --- /dev/null +++ b/test-runner-data/v2/service-definition/get-a-single-service-definition-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceDefinition", + "expected_status": 404, + "feature": "Service Definition", + "id": "v2/Service Definition/Get a single service definition returns \"Not Found\" response", + "operation_id": "GetServiceDefinition", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not-a-service" + }, + "style": null + } + ], + "path": "/api/v2/services/definitions/{service_name}" + }, + "scenario": "Get a single service definition returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-definition/get-a-single-service-definition-returns-ok-response.json b/test-runner-data/v2/service-definition/get-a-single-service-definition-returns-ok-response.json new file mode 100644 index 0000000000..38a328e4d3 --- /dev/null +++ b/test-runner-data/v2/service-definition/get-a-single-service-definition-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "ServiceDefinition", + "expected_status": 200, + "feature": "Service Definition", + "id": "v2/Service Definition/Get a single service definition returns \"OK\" response", + "operation_id": "GetServiceDefinition", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "service_name", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "service-definition-test" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "schema_version", + "required": false, + "schema": { + "format": null, + "ref": "ServiceDefinitionSchemaVersions", + "type": "string" + }, + "source": { + "type": "literal", + "value": "v2.1" + }, + "style": null + } + ], + "path": "/api/v2/services/definitions/{service_name}" + }, + "scenario": "Get a single service definition returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-definition/get-all-service-definitions-returns-ok-response-with-pagination.json b/test-runner-data/v2/service-definition/get-all-service-definitions-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..7706a7fab1 --- /dev/null +++ b/test-runner-data/v2/service-definition/get-all-service-definitions-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceDefinition", + "expected_status": 200, + "feature": "Service Definition", + "id": "v2/Service Definition/Get all service definitions returns \"OK\" response with pagination", + "operation_id": "ListServiceDefinitions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/services/definitions" + }, + "scenario": "Get all service definitions returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-definition/get-all-service-definitions-returns-ok-response.json b/test-runner-data/v2/service-definition/get-all-service-definitions-returns-ok-response.json new file mode 100644 index 0000000000..7e042c9b51 --- /dev/null +++ b/test-runner-data/v2/service-definition/get-all-service-definitions-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceDefinition", + "expected_status": 200, + "feature": "Service Definition", + "id": "v2/Service Definition/Get all service definitions returns \"OK\" response", + "operation_id": "ListServiceDefinitions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "schema_version", + "required": false, + "schema": { + "format": null, + "ref": "ServiceDefinitionSchemaVersions", + "type": "string" + }, + "source": { + "type": "literal", + "value": "v2.1" + }, + "style": null + } + ], + "path": "/api/v2/services/definitions" + }, + "scenario": "Get all service definitions returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-level-objectives/create-a-new-slo-report-returns-bad-request-response.json b/test-runner-data/v2/service-level-objectives/create-a-new-slo-report-returns-bad-request-response.json new file mode 100644 index 0000000000..9e0bce4d2c --- /dev/null +++ b/test-runner-data/v2/service-level-objectives/create-a-new-slo-report-returns-bad-request-response.json @@ -0,0 +1,28 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 400, + "feature": "Service Level Objectives", + "id": "v2/Service Level Objectives/Create a new SLO report returns \"Bad Request\" response", + "operation_id": "CreateSLOReportJob", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SloReportCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"from_ts\": {{ timestamp('now - 40d') }}, \"to_ts\": {{ timestamp('now') }}, \"query\": \"slo_type:metric \\\"SLO Reporting Test\\\"\", \"interval\": \"bad-interval\"}}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/slo/report" + }, + "scenario": "Create a new SLO report returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-level-objectives/create-a-new-slo-report-returns-ok-response.json b/test-runner-data/v2/service-level-objectives/create-a-new-slo-report-returns-ok-response.json new file mode 100644 index 0000000000..bd7ba0fdd9 --- /dev/null +++ b/test-runner-data/v2/service-level-objectives/create-a-new-slo-report-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v2/Service Level Objectives/Create a new SLO report returns \"OK\" response", + "operation_id": "CreateSLOReportJob", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SloReportCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "$openapi_transformer_template": "{\"data\": {\"attributes\": {\"from_ts\": {{ timestamp('now - 40d') }}, \"to_ts\": {{ timestamp('now') }}, \"query\": \"slo_type:metric \\\"SLO Reporting Test\\\"\", \"interval\": \"monthly\", \"timezone\": \"America/New_York\"}}}" + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/slo/report" + }, + "scenario": "Create a new SLO report returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-level-objectives/get-slo-report-returns-bad-request-response.json b/test-runner-data/v2/service-level-objectives/get-slo-report-returns-bad-request-response.json new file mode 100644 index 0000000000..2b9039d2e1 --- /dev/null +++ b/test-runner-data/v2/service-level-objectives/get-slo-report-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 400, + "feature": "Service Level Objectives", + "id": "v2/Service Level Objectives/Get SLO report returns \"Bad Request\" response", + "operation_id": "GetSLOReport", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "report_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-report-id" + }, + "style": null + } + ], + "path": "/api/v2/slo/report/{report_id}/download" + }, + "scenario": "Get SLO report returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-level-objectives/get-slo-report-returns-not-found-response.json b/test-runner-data/v2/service-level-objectives/get-slo-report-returns-not-found-response.json new file mode 100644 index 0000000000..6e5c88af52 --- /dev/null +++ b/test-runner-data/v2/service-level-objectives/get-slo-report-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 404, + "feature": "Service Level Objectives", + "id": "v2/Service Level Objectives/Get SLO report returns \"Not Found\" response", + "operation_id": "GetSLOReport", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "report_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2b468c54-f2a7-11ee-b0b4-ffe56bb6ad43" + }, + "style": null + } + ], + "path": "/api/v2/slo/report/{report_id}/download" + }, + "scenario": "Get SLO report returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-level-objectives/get-slo-report-status-returns-bad-request-response.json b/test-runner-data/v2/service-level-objectives/get-slo-report-status-returns-bad-request-response.json new file mode 100644 index 0000000000..e46f62154e --- /dev/null +++ b/test-runner-data/v2/service-level-objectives/get-slo-report-status-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 400, + "feature": "Service Level Objectives", + "id": "v2/Service Level Objectives/Get SLO report status returns \"Bad Request\" response", + "operation_id": "GetSLOReportJobStatus", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "report_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "invalid-report-id" + }, + "style": null + } + ], + "path": "/api/v2/slo/report/{report_id}/status" + }, + "scenario": "Get SLO report status returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-level-objectives/get-slo-report-status-returns-not-found-response.json b/test-runner-data/v2/service-level-objectives/get-slo-report-status-returns-not-found-response.json new file mode 100644 index 0000000000..cd5025b772 --- /dev/null +++ b/test-runner-data/v2/service-level-objectives/get-slo-report-status-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 404, + "feature": "Service Level Objectives", + "id": "v2/Service Level Objectives/Get SLO report status returns \"Not Found\" response", + "operation_id": "GetSLOReportJobStatus", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "report_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2b468c54-f2a7-11ee-b0b4-ffe56bb6ad43" + }, + "style": null + } + ], + "path": "/api/v2/slo/report/{report_id}/status" + }, + "scenario": "Get SLO report status returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/service-level-objectives/get-slo-report-status-returns-ok-response.json b/test-runner-data/v2/service-level-objectives/get-slo-report-status-returns-ok-response.json new file mode 100644 index 0000000000..ff7b14802f --- /dev/null +++ b/test-runner-data/v2/service-level-objectives/get-slo-report-status-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "ServiceLevelObjectives", + "expected_status": 200, + "feature": "Service Level Objectives", + "id": "v2/Service Level Objectives/Get SLO report status returns \"OK\" response", + "operation_id": "GetSLOReportJobStatus", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "report_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "report.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/slo/report/{report_id}/status" + }, + "scenario": "Get SLO report status returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/software-catalog/create-or-update-software-catalog-entity-using-schema-v3-returns-accepted-response.json b/test-runner-data/v2/software-catalog/create-or-update-software-catalog-entity-using-schema-v3-returns-accepted-response.json new file mode 100644 index 0000000000..62fb23d2bb --- /dev/null +++ b/test-runner-data/v2/software-catalog/create-or-update-software-catalog-entity-using-schema-v3-returns-accepted-response.json @@ -0,0 +1,83 @@ +{ + "api": "SoftwareCatalog", + "expected_status": 202, + "feature": "Software Catalog", + "id": "v2/Software Catalog/Create or update software catalog entity using schema v3 returns \"ACCEPTED\" response", + "operation_id": "UpsertCatalogEntity", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpsertCatalogEntityRequest", + "type": null + }, + "source": "inline", + "value": { + "apiVersion": "v3", + "datadog": { + "codeLocations": [ + { + "paths": [] + } + ], + "events": [ + {} + ], + "logs": [ + {} + ], + "performanceData": { + "tags": [] + }, + "pipelines": { + "fingerprints": [] + } + }, + "integrations": { + "opsgenie": { + "serviceURL": "https://www.opsgenie.com/service/shopping-cart" + }, + "pagerduty": { + "serviceURL": "https://www.pagerduty.com/service-directory/Pshopping-cart" + } + }, + "kind": "service", + "metadata": { + "additionalOwners": [], + "contacts": [ + { + "contact": "https://slack/", + "type": "slack" + } + ], + "id": "4b163705-23c0-4573-b2fb-f6cea2163fcb", + "inheritFrom": "application:default/myapp", + "links": [ + { + "name": "mylink", + "type": "link", + "url": "https://mylink" + } + ], + "name": "service-{{ unique_lower_alnum }}", + "tags": [ + "this:tag", + "that:tag" + ] + }, + "spec": { + "dependsOn": [], + "languages": [] + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/catalog/entity" + }, + "scenario": "Create or update software catalog entity using schema v3 returns \"ACCEPTED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/software-catalog/get-a-list-of-entities-returns-ok-response.json b/test-runner-data/v2/software-catalog/get-a-list-of-entities-returns-ok-response.json new file mode 100644 index 0000000000..a6fc4aac0b --- /dev/null +++ b/test-runner-data/v2/software-catalog/get-a-list-of-entities-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SoftwareCatalog", + "expected_status": 200, + "feature": "Software Catalog", + "id": "v2/Software Catalog/Get a list of entities returns \"OK\" response", + "operation_id": "ListCatalogEntity", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/catalog/entity" + }, + "scenario": "Get a list of entities returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/software-catalog/get-a-list-of-entity-relations-returns-ok-response-with-pagination.json b/test-runner-data/v2/software-catalog/get-a-list-of-entity-relations-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..8706c24582 --- /dev/null +++ b/test-runner-data/v2/software-catalog/get-a-list-of-entity-relations-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "SoftwareCatalog", + "expected_status": 200, + "feature": "Software Catalog", + "id": "v2/Software Catalog/Get a list of entity relations returns \"OK\" response with pagination", + "operation_id": "ListCatalogRelation", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 20 + }, + "style": null + } + ], + "path": "/api/v2/catalog/relation" + }, + "scenario": "Get a list of entity relations returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/software-catalog/get-a-list-of-entity-relations-returns-ok-response.json b/test-runner-data/v2/software-catalog/get-a-list-of-entity-relations-returns-ok-response.json new file mode 100644 index 0000000000..459c928ffd --- /dev/null +++ b/test-runner-data/v2/software-catalog/get-a-list-of-entity-relations-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SoftwareCatalog", + "expected_status": 200, + "feature": "Software Catalog", + "id": "v2/Software Catalog/Get a list of entity relations returns \"OK\" response", + "operation_id": "ListCatalogRelation", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/catalog/relation" + }, + "scenario": "Get a list of entity relations returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans-metrics/create-a-span-based-metric-returns-ok-response.json b/test-runner-data/v2/spans-metrics/create-a-span-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..6a2e8efce7 --- /dev/null +++ b/test-runner-data/v2/spans-metrics/create-a-span-based-metric-returns-ok-response.json @@ -0,0 +1,47 @@ +{ + "api": "SpansMetrics", + "expected_status": 200, + "feature": "Spans Metrics", + "id": "v2/Spans Metrics/Create a span-based metric returns \"OK\" response", + "operation_id": "CreateSpansMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SpansMetricCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": false, + "path": "@duration" + }, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "group_by": [ + { + "path": "resource_name", + "tag_name": "resource_name" + } + ] + }, + "id": "{{ unique_alnum }}", + "type": "spans_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/apm/config/metrics" + }, + "scenario": "Create a span-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans-metrics/delete-a-span-based-metric-returns-ok-response.json b/test-runner-data/v2/spans-metrics/delete-a-span-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..07fb89a70e --- /dev/null +++ b/test-runner-data/v2/spans-metrics/delete-a-span-based-metric-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SpansMetrics", + "expected_status": 204, + "feature": "Spans Metrics", + "id": "v2/Spans Metrics/Delete a span-based metric returns \"OK\" response", + "operation_id": "DeleteSpansMetric", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "spans_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/metrics/{metric_id}" + }, + "scenario": "Delete a span-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans-metrics/get-a-span-based-metric-returns-ok-response.json b/test-runner-data/v2/spans-metrics/get-a-span-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..44384ed9f1 --- /dev/null +++ b/test-runner-data/v2/spans-metrics/get-a-span-based-metric-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "SpansMetrics", + "expected_status": 200, + "feature": "Spans Metrics", + "id": "v2/Spans Metrics/Get a span-based metric returns \"OK\" response", + "operation_id": "GetSpansMetric", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "spans_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/metrics/{metric_id}" + }, + "scenario": "Get a span-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans-metrics/get-all-span-based-metrics-returns-ok-response.json b/test-runner-data/v2/spans-metrics/get-all-span-based-metrics-returns-ok-response.json new file mode 100644 index 0000000000..eb8060cfde --- /dev/null +++ b/test-runner-data/v2/spans-metrics/get-all-span-based-metrics-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "SpansMetrics", + "expected_status": 200, + "feature": "Spans Metrics", + "id": "v2/Spans Metrics/Get all span-based metrics returns \"OK\" response", + "operation_id": "ListSpansMetrics", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/apm/config/metrics" + }, + "scenario": "Get all span-based metrics returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans-metrics/update-a-span-based-metric-returns-ok-response.json b/test-runner-data/v2/spans-metrics/update-a-span-based-metric-returns-ok-response.json new file mode 100644 index 0000000000..e54608f9f7 --- /dev/null +++ b/test-runner-data/v2/spans-metrics/update-a-span-based-metric-returns-ok-response.json @@ -0,0 +1,61 @@ +{ + "api": "SpansMetrics", + "expected_status": 200, + "feature": "Spans Metrics", + "id": "v2/Spans Metrics/Update a span-based metric returns \"OK\" response", + "operation_id": "UpdateSpansMetric", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SpansMetricUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": false + }, + "filter": { + "query": "{{ spans_metric.data.attributes.filter.query }}-updated" + }, + "group_by": [ + { + "path": "resource_name", + "tag_name": "resource_name" + } + ] + }, + "type": "spans_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "metric_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "spans_metric.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/apm/config/metrics/{metric_id}" + }, + "scenario": "Update a span-based metric returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans/aggregate-spans-returns-ok-response.json b/test-runner-data/v2/spans/aggregate-spans-returns-ok-response.json new file mode 100644 index 0000000000..5c271f9c2c --- /dev/null +++ b/test-runner-data/v2/spans/aggregate-spans-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "Spans", + "expected_status": 200, + "feature": "Spans", + "id": "v2/Spans/Aggregate spans returns \"OK\" response", + "operation_id": "AggregateSpans", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SpansAggregateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "compute": [ + { + "aggregation": "count", + "interval": "5m", + "type": "timeseries" + } + ], + "filter": { + "from": "now-15m", + "query": "*", + "to": "now" + } + }, + "type": "aggregate_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/spans/analytics/aggregate" + }, + "scenario": "Aggregate spans returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans/get-a-list-of-spans-returns-ok-response-with-pagination.json b/test-runner-data/v2/spans/get-a-list-of-spans-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..3a092cfa4e --- /dev/null +++ b/test-runner-data/v2/spans/get-a-list-of-spans-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Spans", + "expected_status": 200, + "feature": "Spans", + "id": "v2/Spans/Get a list of spans returns \"OK\" response with pagination", + "operation_id": "ListSpansGet", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[limit]", + "required": false, + "schema": { + "format": "int32", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/spans/events" + }, + "scenario": "Get a list of spans returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans/get-a-list-of-spans-returns-ok-response.json b/test-runner-data/v2/spans/get-a-list-of-spans-returns-ok-response.json new file mode 100644 index 0000000000..5cace8db23 --- /dev/null +++ b/test-runner-data/v2/spans/get-a-list-of-spans-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Spans", + "expected_status": 200, + "feature": "Spans", + "id": "v2/Spans/Get a list of spans returns \"OK\" response", + "operation_id": "ListSpansGet", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/spans/events" + }, + "scenario": "Get a list of spans returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans/get-a-list-of-spans-returns-unprocessable-entity-response.json b/test-runner-data/v2/spans/get-a-list-of-spans-returns-unprocessable-entity-response.json new file mode 100644 index 0000000000..d4759bd0f6 --- /dev/null +++ b/test-runner-data/v2/spans/get-a-list-of-spans-returns-unprocessable-entity-response.json @@ -0,0 +1,51 @@ +{ + "api": "Spans", + "expected_status": 422, + "feature": "Spans", + "id": "v2/Spans/Get a list of spans returns \"Unprocessable Entity.\" response", + "operation_id": "ListSpansGet", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[from]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "now" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[to]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "now-1m" + }, + "style": null + } + ], + "path": "/api/v2/spans/events" + }, + "scenario": "Get a list of spans returns \"Unprocessable Entity.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans/search-spans-returns-ok-response-with-pagination.json b/test-runner-data/v2/spans/search-spans-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..6ef377cf0c --- /dev/null +++ b/test-runner-data/v2/spans/search-spans-returns-ok-response-with-pagination.json @@ -0,0 +1,44 @@ +{ + "api": "Spans", + "expected_status": 200, + "feature": "Spans", + "id": "v2/Spans/Search spans returns \"OK\" response with pagination", + "operation_id": "ListSpans", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SpansListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "from": "now-15m", + "query": "service:python*", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": true, + "parameters": [], + "path": "/api/v2/spans/events/search" + }, + "scenario": "Search spans returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans/search-spans-returns-ok-response.json b/test-runner-data/v2/spans/search-spans-returns-ok-response.json new file mode 100644 index 0000000000..807707e6a0 --- /dev/null +++ b/test-runner-data/v2/spans/search-spans-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "Spans", + "expected_status": 200, + "feature": "Spans", + "id": "v2/Spans/Search spans returns \"OK\" response", + "operation_id": "ListSpans", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SpansListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "from": "now-15m", + "query": "*", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 25 + }, + "sort": "timestamp" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/spans/events/search" + }, + "scenario": "Search spans returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/spans/search-spans-returns-unprocessable-entity-response.json b/test-runner-data/v2/spans/search-spans-returns-unprocessable-entity-response.json new file mode 100644 index 0000000000..b778f612da --- /dev/null +++ b/test-runner-data/v2/spans/search-spans-returns-unprocessable-entity-response.json @@ -0,0 +1,44 @@ +{ + "api": "Spans", + "expected_status": 422, + "feature": "Spans", + "id": "v2/Spans/Search spans returns \"Unprocessable Entity.\" response", + "operation_id": "ListSpans", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SpansListRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "filter": { + "from": "now", + "query": "service:web* AND @http.status_code:[200 TO 299]", + "to": "now-15m" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 10 + }, + "sort": "timestamp" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/spans/events/search" + }, + "scenario": "Search spans returns \"Unprocessable Entity.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/create-backfilled-degradation-returns-created-response.json b/test-runner-data/v2/status-pages/create-backfilled-degradation-returns-created-response.json new file mode 100644 index 0000000000..6ac04e0768 --- /dev/null +++ b/test-runner-data/v2/status-pages/create-backfilled-degradation-returns-created-response.json @@ -0,0 +1,85 @@ +{ + "api": "StatusPages", + "expected_status": 201, + "feature": "Status Pages", + "id": "v2/Status Pages/Create backfilled degradation returns \"Created\" response", + "operation_id": "CreateBackfilledDegradation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateBackfilledDegradationRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "title": "Past API Outage", + "updates": [ + { + "components_affected": [ + { + "id": "{{ status_page.data.attributes.components[0].components[0].id }}", + "status": "degraded" + } + ], + "description": "We detected elevated error rates in the API.", + "started_at": "{{ timeISO('now - 1h') }}", + "status": "investigating" + }, + { + "components_affected": [ + { + "id": "{{ status_page.data.attributes.components[0].components[0].id }}", + "status": "degraded" + } + ], + "description": "Root cause identified as a misconfigured deployment.", + "started_at": "{{ timeISO('now - 30m') }}", + "status": "identified" + }, + { + "components_affected": [ + { + "id": "{{ status_page.data.attributes.components[0].components[0].id }}", + "status": "operational" + } + ], + "description": "The issue has been resolved and API is operating normally.", + "started_at": "{{ timeISO('now') }}", + "status": "resolved" + } + ] + }, + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/degradations/backfill" + }, + "scenario": "Create backfilled degradation returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/create-backfilled-maintenance-returns-created-response.json b/test-runner-data/v2/status-pages/create-backfilled-maintenance-returns-created-response.json new file mode 100644 index 0000000000..75c1568a4f --- /dev/null +++ b/test-runner-data/v2/status-pages/create-backfilled-maintenance-returns-created-response.json @@ -0,0 +1,74 @@ +{ + "api": "StatusPages", + "expected_status": 201, + "feature": "Status Pages", + "id": "v2/Status Pages/Create backfilled maintenance returns \"Created\" response", + "operation_id": "CreateBackfilledMaintenance", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateBackfilledMaintenanceRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "title": "Past Database Maintenance", + "updates": [ + { + "components_affected": [ + { + "id": "{{ status_page.data.attributes.components[0].components[0].id }}", + "status": "maintenance" + } + ], + "description": "Database maintenance is in progress.", + "started_at": "{{ timeISO('now - 1h') }}", + "status": "in_progress" + }, + { + "components_affected": [ + { + "id": "{{ status_page.data.attributes.components[0].components[0].id }}", + "status": "operational" + } + ], + "description": "Database maintenance has been completed successfully.", + "started_at": "{{ timeISO('now') }}", + "status": "completed" + } + ] + }, + "type": "maintenances" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/maintenances/backfill" + }, + "scenario": "Create backfilled maintenance returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/create-component-returns-created-response.json b/test-runner-data/v2/status-pages/create-component-returns-created-response.json new file mode 100644 index 0000000000..6f6910a05e --- /dev/null +++ b/test-runner-data/v2/status-pages/create-component-returns-created-response.json @@ -0,0 +1,52 @@ +{ + "api": "StatusPages", + "expected_status": 201, + "feature": "Status Pages", + "id": "v2/Status Pages/Create component returns \"Created\" response", + "operation_id": "CreateComponent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateComponentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Logs", + "position": 0, + "type": "component" + }, + "type": "components" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/components" + }, + "scenario": "Create component returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/create-degradation-returns-created-response.json b/test-runner-data/v2/status-pages/create-degradation-returns-created-response.json new file mode 100644 index 0000000000..dc0970513c --- /dev/null +++ b/test-runner-data/v2/status-pages/create-degradation-returns-created-response.json @@ -0,0 +1,58 @@ +{ + "api": "StatusPages", + "expected_status": 201, + "feature": "Status Pages", + "id": "v2/Status Pages/Create degradation returns \"Created\" response", + "operation_id": "CreateDegradation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateDegradationRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "components_affected": [ + { + "id": "{{ status_page.data.attributes.components[0].components[0].id }}", + "status": "major_outage" + } + ], + "description": "Our API is experiencing elevated latency. We are investigating the issue.", + "status": "investigating", + "title": "Elevated API Latency" + }, + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/degradations" + }, + "scenario": "Create degradation returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/create-maintenance-returns-created-response.json b/test-runner-data/v2/status-pages/create-maintenance-returns-created-response.json new file mode 100644 index 0000000000..828044fd5a --- /dev/null +++ b/test-runner-data/v2/status-pages/create-maintenance-returns-created-response.json @@ -0,0 +1,61 @@ +{ + "api": "StatusPages", + "expected_status": 201, + "feature": "Status Pages", + "id": "v2/Status Pages/Create maintenance returns \"Created\" response", + "operation_id": "CreateMaintenance", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateMaintenanceRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "completed_date": "{{ timeISO('now + 2h') }}", + "completed_description": "We have completed maintenance on the API to improve performance.", + "components_affected": [ + { + "id": "{{ status_page.data.attributes.components[0].components[0].id }}", + "status": "operational" + } + ], + "in_progress_description": "We are currently performing maintenance on the API to improve performance.", + "scheduled_description": "We will be performing maintenance on the API to improve performance.", + "start_date": "{{ timeISO('now + 1h') }}", + "title": "API Maintenance" + }, + "type": "maintenances" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/maintenances" + }, + "scenario": "Create maintenance returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/create-status-page-returns-created-response.json b/test-runner-data/v2/status-pages/create-status-page-returns-created-response.json new file mode 100644 index 0000000000..cbbaa713f3 --- /dev/null +++ b/test-runner-data/v2/status-pages/create-status-page-returns-created-response.json @@ -0,0 +1,48 @@ +{ + "api": "StatusPages", + "expected_status": 201, + "feature": "Status Pages", + "id": "v2/Status Pages/Create status page returns \"Created\" response", + "operation_id": "CreateStatusPage", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateStatusPageRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "domain_prefix": "{{ unique_hash }}", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/statuspages" + }, + "scenario": "Create status page returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/delete-component-returns-no-content-response.json b/test-runner-data/v2/status-pages/delete-component-returns-no-content-response.json new file mode 100644 index 0000000000..2179913d2e --- /dev/null +++ b/test-runner-data/v2/status-pages/delete-component-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "StatusPages", + "expected_status": 204, + "feature": "Status Pages", + "id": "v2/Status Pages/Delete component returns \"No Content\" response", + "operation_id": "DeleteComponent", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "component_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.attributes.components[0].id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/components/{component_id}" + }, + "scenario": "Delete component returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/delete-degradation-returns-no-content-response.json b/test-runner-data/v2/status-pages/delete-degradation-returns-no-content-response.json new file mode 100644 index 0000000000..a19ec58437 --- /dev/null +++ b/test-runner-data/v2/status-pages/delete-degradation-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "StatusPages", + "expected_status": 204, + "feature": "Status Pages", + "id": "v2/Status Pages/Delete degradation returns \"No Content\" response", + "operation_id": "DeleteDegradation", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "degradation_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "degradation.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/degradations/{degradation_id}" + }, + "scenario": "Delete degradation returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/delete-status-page-returns-no-content-response.json b/test-runner-data/v2/status-pages/delete-status-page-returns-no-content-response.json new file mode 100644 index 0000000000..8d20b7068a --- /dev/null +++ b/test-runner-data/v2/status-pages/delete-status-page-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "StatusPages", + "expected_status": 204, + "feature": "Status Pages", + "id": "v2/Status Pages/Delete status page returns \"No Content\" response", + "operation_id": "DeleteStatusPage", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}" + }, + "scenario": "Delete status page returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/get-component-returns-ok-response.json b/test-runner-data/v2/status-pages/get-component-returns-ok-response.json new file mode 100644 index 0000000000..cdf4359197 --- /dev/null +++ b/test-runner-data/v2/status-pages/get-component-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/Get component returns \"OK\" response", + "operation_id": "GetComponent", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "component_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.attributes.components[0].id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/components/{component_id}" + }, + "scenario": "Get component returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/get-degradation-returns-ok-response.json b/test-runner-data/v2/status-pages/get-degradation-returns-ok-response.json new file mode 100644 index 0000000000..35258e1540 --- /dev/null +++ b/test-runner-data/v2/status-pages/get-degradation-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/Get degradation returns \"OK\" response", + "operation_id": "GetDegradation", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "degradation_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "degradation.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/degradations/{degradation_id}" + }, + "scenario": "Get degradation returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/get-maintenance-returns-ok-response.json b/test-runner-data/v2/status-pages/get-maintenance-returns-ok-response.json new file mode 100644 index 0000000000..3a1bf4b23a --- /dev/null +++ b/test-runner-data/v2/status-pages/get-maintenance-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/Get maintenance returns \"OK\" response", + "operation_id": "GetMaintenance", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "maintenance_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "maintenance.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/maintenances/{maintenance_id}" + }, + "scenario": "Get maintenance returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/get-status-page-returns-ok-response.json b/test-runner-data/v2/status-pages/get-status-page-returns-ok-response.json new file mode 100644 index 0000000000..b8a84a4336 --- /dev/null +++ b/test-runner-data/v2/status-pages/get-status-page-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/Get status page returns \"OK\" response", + "operation_id": "GetStatusPage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}" + }, + "scenario": "Get status page returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/list-components-returns-ok-response.json b/test-runner-data/v2/status-pages/list-components-returns-ok-response.json new file mode 100644 index 0000000000..a2f64f1952 --- /dev/null +++ b/test-runner-data/v2/status-pages/list-components-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/List components returns \"OK\" response", + "operation_id": "ListComponents", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/components" + }, + "scenario": "List components returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/list-degradations-returns-ok-response.json b/test-runner-data/v2/status-pages/list-degradations-returns-ok-response.json new file mode 100644 index 0000000000..77e152898a --- /dev/null +++ b/test-runner-data/v2/status-pages/list-degradations-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/List degradations returns \"OK\" response", + "operation_id": "ListDegradations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/statuspages/degradations" + }, + "scenario": "List degradations returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/list-maintenances-returns-ok-response.json b/test-runner-data/v2/status-pages/list-maintenances-returns-ok-response.json new file mode 100644 index 0000000000..edbc6e3352 --- /dev/null +++ b/test-runner-data/v2/status-pages/list-maintenances-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/List maintenances returns \"OK\" response", + "operation_id": "ListMaintenances", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/statuspages/maintenances" + }, + "scenario": "List maintenances returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/list-status-pages-returns-ok-response.json b/test-runner-data/v2/status-pages/list-status-pages-returns-ok-response.json new file mode 100644 index 0000000000..3f90a3a207 --- /dev/null +++ b/test-runner-data/v2/status-pages/list-status-pages-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/List status pages returns \"OK\" response", + "operation_id": "ListStatusPages", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/statuspages" + }, + "scenario": "List status pages returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/publish-status-page-returns-no-content-response.json b/test-runner-data/v2/status-pages/publish-status-page-returns-no-content-response.json new file mode 100644 index 0000000000..5d3d924c1a --- /dev/null +++ b/test-runner-data/v2/status-pages/publish-status-page-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "StatusPages", + "expected_status": 204, + "feature": "Status Pages", + "id": "v2/Status Pages/Publish status page returns \"No Content\" response", + "operation_id": "PublishStatusPage", + "request": { + "body": null, + "content_type": null, + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/publish" + }, + "scenario": "Publish status page returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/update-component-returns-ok-response.json b/test-runner-data/v2/status-pages/update-component-returns-ok-response.json new file mode 100644 index 0000000000..d41ef44074 --- /dev/null +++ b/test-runner-data/v2/status-pages/update-component-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/Update component returns \"OK\" response", + "operation_id": "UpdateComponent", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchComponentRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "Logs Indexing" + }, + "id": "{{ status_page.data.attributes.components[0].id }}", + "type": "components" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "component_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.attributes.components[0].id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/components/{component_id}" + }, + "scenario": "Update component returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/update-degradation-returns-ok-response.json b/test-runner-data/v2/status-pages/update-degradation-returns-ok-response.json new file mode 100644 index 0000000000..a3eb16610f --- /dev/null +++ b/test-runner-data/v2/status-pages/update-degradation-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/Update degradation returns \"OK\" response", + "operation_id": "UpdateDegradation", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchDegradationRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "title": "Elevated API Latency in US1" + }, + "id": "{{ degradation.data.id }}", + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "degradation_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "degradation.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/degradations/{degradation_id}" + }, + "scenario": "Update degradation returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/update-maintenance-returns-ok-response.json b/test-runner-data/v2/status-pages/update-maintenance-returns-ok-response.json new file mode 100644 index 0000000000..0be884d63e --- /dev/null +++ b/test-runner-data/v2/status-pages/update-maintenance-returns-ok-response.json @@ -0,0 +1,68 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/Update maintenance returns \"OK\" response", + "operation_id": "UpdateMaintenance", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchMaintenanceRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "in_progress_description": "We are currently performing maintenance on the API to improve performance for 40 minutes.", + "scheduled_description": "We will be performing maintenance on the API to improve performance for 40 minutes." + }, + "id": "{{ maintenance.data.id }}", + "type": "maintenances" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "maintenance_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "maintenance.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}/maintenances/{maintenance_id}" + }, + "scenario": "Update maintenance returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/status-pages/update-status-page-returns-ok-response.json b/test-runner-data/v2/status-pages/update-status-page-returns-ok-response.json new file mode 100644 index 0000000000..e69667dad0 --- /dev/null +++ b/test-runner-data/v2/status-pages/update-status-page-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "StatusPages", + "expected_status": 200, + "feature": "Status Pages", + "id": "v2/Status Pages/Update status page returns \"OK\" response", + "operation_id": "UpdateStatusPage", + "request": { + "body": { + "schema": { + "format": null, + "ref": "PatchStatusPageRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "name": "A Status Page in US1" + }, + "id": "{{ status_page.data.id }}", + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "page_id", + "required": true, + "schema": { + "format": "uuid", + "ref": null, + "type": "string" + }, + "source": { + "path": "status_page.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/statuspages/{page_id}" + }, + "scenario": "Update status page returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/synthetics/create-a-network-path-test-returns-ok-response.json b/test-runner-data/v2/synthetics/create-a-network-path-test-returns-ok-response.json new file mode 100644 index 0000000000..0877e51e07 --- /dev/null +++ b/test-runner-data/v2/synthetics/create-a-network-path-test-returns-ok-response.json @@ -0,0 +1,65 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v2/Synthetics/Create a Network Path test returns \"OK\" response", + "operation_id": "CreateSyntheticsNetworkTest", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SyntheticsNetworkTestEditRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "config": { + "assertions": [ + { + "operator": "lessThan", + "property": "avg", + "target": 500, + "type": "latency" + } + ], + "request": { + "e2e_queries": 50, + "host": "example.com", + "max_ttl": 30, + "port": 443, + "tcp_method": "prefer_sack", + "traceroute_queries": 3 + } + }, + "locations": [ + "aws:us-east-1", + "agent:my-agent-name" + ], + "message": "Network Path test notification", + "name": "Example Network Path test", + "options": { + "tick_every": 60 + }, + "status": "live", + "subtype": "tcp", + "tags": [ + "env:production" + ], + "type": "network" + }, + "type": "network" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/synthetics/tests/network" + }, + "scenario": "Create a Network Path test returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/synthetics/create-a-test-suite-returns-ok-response.json b/test-runner-data/v2/synthetics/create-a-test-suite-returns-ok-response.json new file mode 100644 index 0000000000..13b4c50b9d --- /dev/null +++ b/test-runner-data/v2/synthetics/create-a-test-suite-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v2/Synthetics/Create a test suite returns \"OK\" response", + "operation_id": "CreateSyntheticsSuite", + "request": { + "body": { + "schema": { + "format": null, + "ref": "SuiteCreateEditRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "message": "Notification message", + "name": "Example suite name", + "options": {}, + "tags": [ + "env:production" + ], + "tests": [], + "type": "suite" + }, + "type": "suites" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/synthetics/suites" + }, + "scenario": "Create a test suite returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/synthetics/get-a-network-path-test-returns-ok-response.json b/test-runner-data/v2/synthetics/get-a-network-path-test-returns-ok-response.json new file mode 100644 index 0000000000..54f12698a4 --- /dev/null +++ b/test-runner-data/v2/synthetics/get-a-network-path-test-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v2/Synthetics/Get a Network Path test returns \"OK\" response", + "operation_id": "GetSyntheticsNetworkTest", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "public_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "c7a-uwa-wn2" + }, + "style": null + } + ], + "path": "/api/v2/synthetics/tests/network/{public_id}" + }, + "scenario": "Get a Network Path test returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/synthetics/get-the-on-demand-concurrency-cap-returns-ok-response.json b/test-runner-data/v2/synthetics/get-the-on-demand-concurrency-cap-returns-ok-response.json new file mode 100644 index 0000000000..565c5ec497 --- /dev/null +++ b/test-runner-data/v2/synthetics/get-the-on-demand-concurrency-cap-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v2/Synthetics/Get the on-demand concurrency cap returns \"OK\" response", + "operation_id": "GetOnDemandConcurrencyCap", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/synthetics/settings/on_demand_concurrency_cap" + }, + "scenario": "Get the on-demand concurrency cap returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/synthetics/save-new-value-for-on-demand-concurrency-cap-returns-ok-response.json b/test-runner-data/v2/synthetics/save-new-value-for-on-demand-concurrency-cap-returns-ok-response.json new file mode 100644 index 0000000000..819a70e1af --- /dev/null +++ b/test-runner-data/v2/synthetics/save-new-value-for-on-demand-concurrency-cap-returns-ok-response.json @@ -0,0 +1,28 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v2/Synthetics/Save new value for on-demand concurrency cap returns \"OK\" response", + "operation_id": "SetOnDemandConcurrencyCap", + "request": { + "body": { + "schema": { + "format": null, + "ref": "OnDemandConcurrencyCapAttributes", + "type": "object" + }, + "source": "inline", + "value": { + "on_demand_concurrency_cap": 20 + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/synthetics/settings/on_demand_concurrency_cap" + }, + "scenario": "Save new value for on-demand concurrency cap returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/synthetics/search-synthetics-suites-returns-ok-response.json b/test-runner-data/v2/synthetics/search-synthetics-suites-returns-ok-response.json new file mode 100644 index 0000000000..2a826a9658 --- /dev/null +++ b/test-runner-data/v2/synthetics/search-synthetics-suites-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Synthetics", + "expected_status": 200, + "feature": "Synthetics", + "id": "v2/Synthetics/Search Synthetics suites returns \"OK\" response", + "operation_id": "SearchSuites", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/synthetics/suites/search" + }, + "scenario": "Search Synthetics suites returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/add-a-user-to-a-team-returns-api-error-response-response.json b/test-runner-data/v2/teams/add-a-user-to-a-team-returns-api-error-response-response.json new file mode 100644 index 0000000000..e0814e9a8c --- /dev/null +++ b/test-runner-data/v2/teams/add-a-user-to-a-team-returns-api-error-response-response.json @@ -0,0 +1,58 @@ +{ + "api": "Teams", + "expected_status": 409, + "feature": "Teams", + "id": "v2/Teams/Add a user to a team returns \"API error response.\" response", + "operation_id": "CreateTeamMembership", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserTeamRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "relationships": { + "user": { + "data": { + "id": "{{user.data.id}}", + "type": "users" + } + } + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships" + }, + "scenario": "Add a user to a team returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/add-a-user-to-a-team-returns-represents-a-user-s-association-to-a-team-response.json b/test-runner-data/v2/teams/add-a-user-to-a-team-returns-represents-a-user-s-association-to-a-team-response.json new file mode 100644 index 0000000000..d47f720b7e --- /dev/null +++ b/test-runner-data/v2/teams/add-a-user-to-a-team-returns-represents-a-user-s-association-to-a-team-response.json @@ -0,0 +1,58 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Add a user to a team returns \"Represents a user's association to a team\" response", + "operation_id": "CreateTeamMembership", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserTeamRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "relationships": { + "user": { + "data": { + "id": "{{user.data.id}}", + "type": "users" + } + } + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships" + }, + "scenario": "Add a user to a team returns \"Represents a user's association to a team\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-a-team-hierarchy-link-returns-conflict-response.json b/test-runner-data/v2/teams/create-a-team-hierarchy-link-returns-conflict-response.json new file mode 100644 index 0000000000..bb0a156469 --- /dev/null +++ b/test-runner-data/v2/teams/create-a-team-hierarchy-link-returns-conflict-response.json @@ -0,0 +1,44 @@ +{ + "api": "Teams", + "expected_status": 409, + "feature": "Teams", + "id": "v2/Teams/Create a team hierarchy link returns \"Conflict\" response", + "operation_id": "AddTeamHierarchyLink", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamHierarchyLinkCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "{{team_hierarchy_link.data.relationships.parent_team.data.id}}", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "{{team_hierarchy_link.data.relationships.sub_team.data.id}}", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/team-hierarchy-links" + }, + "scenario": "Create a team hierarchy link returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-a-team-hierarchy-link-returns-ok-response.json b/test-runner-data/v2/teams/create-a-team-hierarchy-link-returns-ok-response.json new file mode 100644 index 0000000000..4d9169d840 --- /dev/null +++ b/test-runner-data/v2/teams/create-a-team-hierarchy-link-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Create a team hierarchy link returns \"OK\" response", + "operation_id": "AddTeamHierarchyLink", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamHierarchyLinkCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "{{dd_team.data.id}}", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "{{dd_team_2.data.id}}", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/team-hierarchy-links" + }, + "scenario": "Create a team hierarchy link returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-a-team-link-returns-api-error-response-response.json b/test-runner-data/v2/teams/create-a-team-link-returns-api-error-response-response.json new file mode 100644 index 0000000000..99813ab5ba --- /dev/null +++ b/test-runner-data/v2/teams/create-a-team-link-returns-api-error-response-response.json @@ -0,0 +1,52 @@ +{ + "api": "Teams", + "expected_status": 422, + "feature": "Teams", + "id": "v2/Teams/Create a team link returns \"API error response.\" response", + "operation_id": "CreateTeamLink", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamLinkCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "label": "", + "position": 0, + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links" + }, + "scenario": "Create a team link returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-a-team-link-returns-ok-response.json b/test-runner-data/v2/teams/create-a-team-link-returns-ok-response.json new file mode 100644 index 0000000000..31b52b3cab --- /dev/null +++ b/test-runner-data/v2/teams/create-a-team-link-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Create a team link returns \"OK\" response", + "operation_id": "CreateTeamLink", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamLinkCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "label": "Link label", + "position": 0, + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links" + }, + "scenario": "Create a team link returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-a-team-returns-api-error-response-response.json b/test-runner-data/v2/teams/create-a-team-returns-api-error-response-response.json new file mode 100644 index 0000000000..9b83dc641d --- /dev/null +++ b/test-runner-data/v2/teams/create-a-team-returns-api-error-response-response.json @@ -0,0 +1,39 @@ +{ + "api": "Teams", + "expected_status": 409, + "feature": "Teams", + "id": "v2/Teams/Create a team returns \"API error response.\" response", + "operation_id": "CreateTeam", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "handle": "{{dd_team.data.attributes.handle}}", + "name": "Example Team" + }, + "relationships": { + "users": { + "data": [] + } + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/team" + }, + "scenario": "Create a team returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-a-team-returns-created-response.json b/test-runner-data/v2/teams/create-a-team-returns-created-response.json new file mode 100644 index 0000000000..945bc34061 --- /dev/null +++ b/test-runner-data/v2/teams/create-a-team-returns-created-response.json @@ -0,0 +1,39 @@ +{ + "api": "Teams", + "expected_status": 201, + "feature": "Teams", + "id": "v2/Teams/Create a team returns \"CREATED\" response", + "operation_id": "CreateTeam", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "handle": "test-handle-{{ unique_hash }}", + "name": "test-name-{{ unique_hash }}" + }, + "relationships": { + "users": { + "data": [] + } + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/team" + }, + "scenario": "Create a team returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-a-team-with-v2-fields-returns-created-response.json b/test-runner-data/v2/teams/create-a-team-with-v2-fields-returns-created-response.json new file mode 100644 index 0000000000..d52116277f --- /dev/null +++ b/test-runner-data/v2/teams/create-a-team-with-v2-fields-returns-created-response.json @@ -0,0 +1,43 @@ +{ + "api": "Teams", + "expected_status": 201, + "feature": "Teams", + "id": "v2/Teams/Create a team with V2 fields returns \"CREATED\" response", + "operation_id": "CreateTeam", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "avatar": "\ud83e\udd51", + "banner": 7, + "handle": "test-handle-{{ unique_hash }}", + "hidden_modules": [ + "m3" + ], + "name": "test-name-{{ unique_hash }}", + "visible_modules": [ + "m1", + "m2" + ] + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/team" + }, + "scenario": "Create a team with V2 fields returns \"CREATED\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-team-connections-returns-bad-request-response.json b/test-runner-data/v2/teams/create-team-connections-returns-bad-request-response.json new file mode 100644 index 0000000000..1d1aab5f0d --- /dev/null +++ b/test-runner-data/v2/teams/create-team-connections-returns-bad-request-response.json @@ -0,0 +1,28 @@ +{ + "api": "Teams", + "expected_status": 400, + "feature": "Teams", + "id": "v2/Teams/Create team connections returns \"Bad Request\" response", + "operation_id": "CreateTeamConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamConnectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/team/connections" + }, + "scenario": "Create team connections returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-team-connections-returns-conflict-response.json b/test-runner-data/v2/teams/create-team-connections-returns-conflict-response.json new file mode 100644 index 0000000000..73a2c4e22e --- /dev/null +++ b/test-runner-data/v2/teams/create-team-connections-returns-conflict-response.json @@ -0,0 +1,50 @@ +{ + "api": "Teams", + "expected_status": 409, + "feature": "Teams", + "id": "v2/Teams/Create team connections returns \"Conflict\" response", + "operation_id": "CreateTeamConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamConnectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "managed_by": "datadog", + "source": "github" + }, + "relationships": { + "connected_team": { + "data": { + "id": "{{ team_connection.relationships.connected_team.data.id }}", + "type": "github_team" + } + }, + "team": { + "data": { + "id": "{{ dd_team.data.id }}", + "type": "team" + } + } + }, + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/team/connections" + }, + "scenario": "Create team connections returns \"Conflict\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-team-connections-returns-created-response.json b/test-runner-data/v2/teams/create-team-connections-returns-created-response.json new file mode 100644 index 0000000000..ef5de8ac30 --- /dev/null +++ b/test-runner-data/v2/teams/create-team-connections-returns-created-response.json @@ -0,0 +1,50 @@ +{ + "api": "Teams", + "expected_status": 201, + "feature": "Teams", + "id": "v2/Teams/Create team connections returns \"Created\" response", + "operation_id": "CreateTeamConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamConnectionCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "attributes": { + "managed_by": "datadog", + "source": "github" + }, + "relationships": { + "connected_team": { + "data": { + "id": "@MyGitHubAccount/my-team-name", + "type": "github_team" + } + }, + "team": { + "data": { + "id": "{{ dd_team.data.id }}", + "type": "team" + } + } + }, + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/team/connections" + }, + "scenario": "Create team connections returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-team-notification-rule-returns-api-error-response-response.json b/test-runner-data/v2/teams/create-team-notification-rule-returns-api-error-response-response.json new file mode 100644 index 0000000000..e56232882e --- /dev/null +++ b/test-runner-data/v2/teams/create-team-notification-rule-returns-api-error-response-response.json @@ -0,0 +1,56 @@ +{ + "api": "Teams", + "expected_status": 409, + "feature": "Teams", + "id": "v2/Teams/Create team notification rule returns \"API error response.\" response", + "operation_id": "CreateTeamNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/notification-rules" + }, + "scenario": "Create team notification rule returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/create-team-notification-rule-returns-ok-response.json b/test-runner-data/v2/teams/create-team-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..7483ac68fa --- /dev/null +++ b/test-runner-data/v2/teams/create-team-notification-rule-returns-ok-response.json @@ -0,0 +1,56 @@ +{ + "api": "Teams", + "expected_status": 201, + "feature": "Teams", + "id": "v2/Teams/Create team notification rule returns \"OK\" response", + "operation_id": "CreateTeamNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/notification-rules" + }, + "scenario": "Create team notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/delete-team-connections-returns-bad-request-response.json b/test-runner-data/v2/teams/delete-team-connections-returns-bad-request-response.json new file mode 100644 index 0000000000..12eaa31f69 --- /dev/null +++ b/test-runner-data/v2/teams/delete-team-connections-returns-bad-request-response.json @@ -0,0 +1,33 @@ +{ + "api": "Teams", + "expected_status": 400, + "feature": "Teams", + "id": "v2/Teams/Delete team connections returns \"Bad Request\" response", + "operation_id": "DeleteTeamConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamConnectionDeleteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "", + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/team/connections" + }, + "scenario": "Delete team connections returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/delete-team-connections-returns-no-content-response.json b/test-runner-data/v2/teams/delete-team-connections-returns-no-content-response.json new file mode 100644 index 0000000000..df0c5a047d --- /dev/null +++ b/test-runner-data/v2/teams/delete-team-connections-returns-no-content-response.json @@ -0,0 +1,33 @@ +{ + "api": "Teams", + "expected_status": 204, + "feature": "Teams", + "id": "v2/Teams/Delete team connections returns \"No Content\" response", + "operation_id": "DeleteTeamConnections", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamConnectionDeleteRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "id": "{{ team_connection.id }}", + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "pagination": false, + "parameters": [], + "path": "/api/v2/team/connections" + }, + "scenario": "Delete team connections returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/delete-team-notification-rule-returns-api-error-response-response.json b/test-runner-data/v2/teams/delete-team-notification-rule-returns-api-error-response-response.json new file mode 100644 index 0000000000..3b5e31f44b --- /dev/null +++ b/test-runner-data/v2/teams/delete-team-notification-rule-returns-api-error-response-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Delete team notification rule returns \"API error response.\" response", + "operation_id": "DeleteTeamNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "3d031bb2-e1da-4d34-a670-1b5557b032c9" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/notification-rules/{rule_id}" + }, + "scenario": "Delete team notification rule returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/delete-team-notification-rule-returns-no-content-response.json b/test-runner-data/v2/teams/delete-team-notification-rule-returns-no-content-response.json new file mode 100644 index 0000000000..6eea91f470 --- /dev/null +++ b/test-runner-data/v2/teams/delete-team-notification-rule-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 204, + "feature": "Teams", + "id": "v2/Teams/Delete team notification rule returns \"No Content\" response", + "operation_id": "DeleteTeamNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/notification-rules/{rule_id}" + }, + "scenario": "Delete team notification rule returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-a-team-hierarchy-link-returns-api-error-response-response.json b/test-runner-data/v2/teams/get-a-team-hierarchy-link-returns-api-error-response-response.json new file mode 100644 index 0000000000..15740e209c --- /dev/null +++ b/test-runner-data/v2/teams/get-a-team-hierarchy-link-returns-api-error-response-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Get a team hierarchy link returns \"API error response.\" response", + "operation_id": "GetTeamHierarchyLink", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + }, + "style": null + } + ], + "path": "/api/v2/team-hierarchy-links/{link_id}" + }, + "scenario": "Get a team hierarchy link returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-a-team-hierarchy-link-returns-ok-response.json b/test-runner-data/v2/teams/get-a-team-hierarchy-link-returns-ok-response.json new file mode 100644 index 0000000000..b0eb3e7fe9 --- /dev/null +++ b/test-runner-data/v2/teams/get-a-team-hierarchy-link-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get a team hierarchy link returns \"OK\" response", + "operation_id": "GetTeamHierarchyLink", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_hierarchy_link.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team-hierarchy-links/{link_id}" + }, + "scenario": "Get a team hierarchy link returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-a-team-link-returns-api-error-response-response.json b/test-runner-data/v2/teams/get-a-team-link-returns-api-error-response-response.json new file mode 100644 index 0000000000..b4ced0648d --- /dev/null +++ b/test-runner-data/v2/teams/get-a-team-link-returns-api-error-response-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Get a team link returns \"API error response.\" response", + "operation_id": "GetTeamLink", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links/{link_id}" + }, + "scenario": "Get a team link returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-a-team-link-returns-ok-response.json b/test-runner-data/v2/teams/get-a-team-link-returns-ok-response.json new file mode 100644 index 0000000000..6f8d6e249a --- /dev/null +++ b/test-runner-data/v2/teams/get-a-team-link-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get a team link returns \"OK\" response", + "operation_id": "GetTeamLink", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_link.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links/{link_id}" + }, + "scenario": "Get a team link returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-a-team-returns-api-error-response-response.json b/test-runner-data/v2/teams/get-a-team-returns-api-error-response-response.json new file mode 100644 index 0000000000..b02bb2e2ba --- /dev/null +++ b/test-runner-data/v2/teams/get-a-team-returns-api-error-response-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Get a team returns \"API error response.\" response", + "operation_id": "GetTeam", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}" + }, + "scenario": "Get a team returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-a-team-returns-ok-response.json b/test-runner-data/v2/teams/get-a-team-returns-ok-response.json new file mode 100644 index 0000000000..b86f1e93cd --- /dev/null +++ b/test-runner-data/v2/teams/get-a-team-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get a team returns \"OK\" response", + "operation_id": "GetTeam", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}" + }, + "scenario": "Get a team returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-all-teams-returns-ok-response-with-pagination.json b/test-runner-data/v2/teams/get-all-teams-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..8ecb5b4ecd --- /dev/null +++ b/test-runner-data/v2/teams/get-all-teams-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get all teams returns \"OK\" response with pagination", + "operation_id": "ListTeams", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/team" + }, + "scenario": "Get all teams returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-all-teams-returns-ok-response.json b/test-runner-data/v2/teams/get-all-teams-returns-ok-response.json new file mode 100644 index 0000000000..1f2e26e904 --- /dev/null +++ b/test-runner-data/v2/teams/get-all-teams-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get all teams returns \"OK\" response", + "operation_id": "ListTeams", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/team" + }, + "scenario": "Get all teams returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-all-teams-with-fields-team-parameter-returns-ok-response.json b/test-runner-data/v2/teams/get-all-teams-with-fields-team-parameter-returns-ok-response.json new file mode 100644 index 0000000000..c223c9a8a1 --- /dev/null +++ b/test-runner-data/v2/teams/get-all-teams-with-fields-team-parameter-returns-ok-response.json @@ -0,0 +1,44 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get all teams with fields_team parameter returns \"OK\" response", + "operation_id": "ListTeams", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": false, + "in": "query", + "name": "fields[team]", + "required": false, + "schema": { + "format": null, + "items": { + "format": null, + "ref": "TeamsField", + "type": "string" + }, + "ref": null, + "type": "array" + }, + "source": { + "type": "literal", + "value": [ + "id", + "name", + "handle" + ] + }, + "style": null + } + ], + "path": "/api/v2/team" + }, + "scenario": "Get all teams with fields_team parameter returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-links-for-a-team-returns-api-error-response-response.json b/test-runner-data/v2/teams/get-links-for-a-team-returns-api-error-response-response.json new file mode 100644 index 0000000000..8fc3d6e9be --- /dev/null +++ b/test-runner-data/v2/teams/get-links-for-a-team-returns-api-error-response-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Get links for a team returns \"API error response.\" response", + "operation_id": "GetTeamLinks", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links" + }, + "scenario": "Get links for a team returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-links-for-a-team-returns-ok-response.json b/test-runner-data/v2/teams/get-links-for-a-team-returns-ok-response.json new file mode 100644 index 0000000000..399472d80e --- /dev/null +++ b/test-runner-data/v2/teams/get-links-for-a-team-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get links for a team returns \"OK\" response", + "operation_id": "GetTeamLinks", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links" + }, + "scenario": "Get links for a team returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-permission-settings-for-a-team-returns-api-error-response-response.json b/test-runner-data/v2/teams/get-permission-settings-for-a-team-returns-api-error-response-response.json new file mode 100644 index 0000000000..c3f9f5a09e --- /dev/null +++ b/test-runner-data/v2/teams/get-permission-settings-for-a-team-returns-api-error-response-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Get permission settings for a team returns \"API error response.\" response", + "operation_id": "GetTeamPermissionSettings", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/permission-settings" + }, + "scenario": "Get permission settings for a team returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-permission-settings-for-a-team-returns-ok-response.json b/test-runner-data/v2/teams/get-permission-settings-for-a-team-returns-ok-response.json new file mode 100644 index 0000000000..327552ecb3 --- /dev/null +++ b/test-runner-data/v2/teams/get-permission-settings-for-a-team-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get permission settings for a team returns \"OK\" response", + "operation_id": "GetTeamPermissionSettings", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/permission-settings" + }, + "scenario": "Get permission settings for a team returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-team-hierarchy-links-returns-ok-response.json b/test-runner-data/v2/teams/get-team-hierarchy-links-returns-ok-response.json new file mode 100644 index 0000000000..3ec7151b60 --- /dev/null +++ b/test-runner-data/v2/teams/get-team-hierarchy-links-returns-ok-response.json @@ -0,0 +1,83 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get team hierarchy links returns \"OK\" response", + "operation_id": "ListTeamHierarchyLinks", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[parent_team]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_hierarchy_link.data.relationships.parent_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[sub_team]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_hierarchy_link.data.relationships.sub_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[number]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 0 + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 100 + }, + "style": null + } + ], + "path": "/api/v2/team-hierarchy-links" + }, + "scenario": "Get team hierarchy links returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-team-memberships-returns-api-error-response-response.json b/test-runner-data/v2/teams/get-team-memberships-returns-api-error-response-response.json new file mode 100644 index 0000000000..701b554445 --- /dev/null +++ b/test-runner-data/v2/teams/get-team-memberships-returns-api-error-response-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Get team memberships returns \"API error response.\" response", + "operation_id": "GetTeamMemberships", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships" + }, + "scenario": "Get team memberships returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-team-memberships-returns-represents-a-user-s-association-to-a-team-response-with-pagination.json b/test-runner-data/v2/teams/get-team-memberships-returns-represents-a-user-s-association-to-a-team-response-with-pagination.json new file mode 100644 index 0000000000..b4e0b26de3 --- /dev/null +++ b/test-runner-data/v2/teams/get-team-memberships-returns-represents-a-user-s-association-to-a-team-response-with-pagination.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get team memberships returns \"Represents a user's association to a team\" response with pagination", + "operation_id": "GetTeamMemberships", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "2e06bf2c-193b-41d4-b3c2-afccc080458f" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships" + }, + "scenario": "Get team memberships returns \"Represents a user's association to a team\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-team-memberships-returns-represents-a-user-s-association-to-a-team-response.json b/test-runner-data/v2/teams/get-team-memberships-returns-represents-a-user-s-association-to-a-team-response.json new file mode 100644 index 0000000000..a645f9fd13 --- /dev/null +++ b/test-runner-data/v2/teams/get-team-memberships-returns-represents-a-user-s-association-to-a-team-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get team memberships returns \"Represents a user's association to a team\" response", + "operation_id": "GetTeamMemberships", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships" + }, + "scenario": "Get team memberships returns \"Represents a user's association to a team\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-team-notification-rule-returns-api-error-response-response.json b/test-runner-data/v2/teams/get-team-notification-rule-returns-api-error-response-response.json new file mode 100644 index 0000000000..0c86f51263 --- /dev/null +++ b/test-runner-data/v2/teams/get-team-notification-rule-returns-api-error-response-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Get team notification rule returns \"API error response.\" response", + "operation_id": "GetTeamNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/notification-rules/{rule_id}" + }, + "scenario": "Get team notification rule returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-team-notification-rule-returns-ok-response.json b/test-runner-data/v2/teams/get-team-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..d6495ffc2e --- /dev/null +++ b/test-runner-data/v2/teams/get-team-notification-rule-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get team notification rule returns \"OK\" response", + "operation_id": "GetTeamNotificationRule", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/notification-rules/{rule_id}" + }, + "scenario": "Get team notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-team-notification-rules-returns-ok-response.json b/test-runner-data/v2/teams/get-team-notification-rules-returns-ok-response.json new file mode 100644 index 0000000000..b3acf5297b --- /dev/null +++ b/test-runner-data/v2/teams/get-team-notification-rules-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get team notification rules returns \"OK\" response", + "operation_id": "GetTeamNotificationRules", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/notification-rules" + }, + "scenario": "Get team notification rules returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-team-sync-configurations-returns-ok-response.json b/test-runner-data/v2/teams/get-team-sync-configurations-returns-ok-response.json new file mode 100644 index 0000000000..704655f8cb --- /dev/null +++ b/test-runner-data/v2/teams/get-team-sync-configurations-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get team sync configurations returns \"OK\" response", + "operation_id": "GetTeamSync", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[source]", + "required": true, + "schema": { + "format": null, + "ref": "TeamSyncAttributesSource", + "type": "string" + }, + "source": { + "type": "literal", + "value": "github" + }, + "style": null + } + ], + "path": "/api/v2/team/sync" + }, + "scenario": "Get team sync configurations returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/get-user-memberships-returns-represents-a-user-s-association-to-a-team-response.json b/test-runner-data/v2/teams/get-user-memberships-returns-represents-a-user-s-association-to-a-team-response.json new file mode 100644 index 0000000000..3645fe4c24 --- /dev/null +++ b/test-runner-data/v2/teams/get-user-memberships-returns-represents-a-user-s-association-to-a-team-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Get user memberships returns \"Represents a user's association to a team\" response", + "operation_id": "GetUserMemberships", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_uuid", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/users/{user_uuid}/memberships" + }, + "scenario": "Get user memberships returns \"Represents a user's association to a team\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/link-teams-with-github-teams-returns-no-content-response.json b/test-runner-data/v2/teams/link-teams-with-github-teams-returns-no-content-response.json new file mode 100644 index 0000000000..64602cb4e0 --- /dev/null +++ b/test-runner-data/v2/teams/link-teams-with-github-teams-returns-no-content-response.json @@ -0,0 +1,42 @@ +{ + "api": "Teams", + "expected_status": 204, + "feature": "Teams", + "id": "v2/Teams/Link Teams with GitHub Teams returns \"No Content\" response", + "operation_id": "SyncTeams", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamSyncRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "selection_state": [ + { + "external_id": { + "type": "organization", + "value": "1" + } + } + ], + "source": "github", + "type": "link" + }, + "type": "team_sync_bulk" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/team/sync" + }, + "scenario": "Link Teams with GitHub Teams returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/list-team-connections-returns-ok-response.json b/test-runner-data/v2/teams/list-team-connections-returns-ok-response.json new file mode 100644 index 0000000000..0deee32cfc --- /dev/null +++ b/test-runner-data/v2/teams/list-team-connections-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/List team connections returns \"OK\" response", + "operation_id": "ListTeamConnections", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 10 + }, + "style": null + } + ], + "path": "/api/v2/team/connections" + }, + "scenario": "List team connections returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/list-team-connections-with-filters-returns-ok-response.json b/test-runner-data/v2/teams/list-team-connections-with-filters-returns-ok-response.json new file mode 100644 index 0000000000..4f27a5f935 --- /dev/null +++ b/test-runner-data/v2/teams/list-team-connections-with-filters-returns-ok-response.json @@ -0,0 +1,58 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/List team connections with filters returns \"OK\" response", + "operation_id": "ListTeamConnections", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": false, + "in": "query", + "name": "filter[sources]", + "required": false, + "schema": { + "format": null, + "items": { + "format": null, + "ref": null, + "type": "string" + }, + "ref": null, + "type": "array" + }, + "source": { + "type": "literal", + "value": [ + "github" + ] + }, + "style": "form" + }, + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 10 + }, + "style": null + } + ], + "path": "/api/v2/team/connections" + }, + "scenario": "List team connections with filters returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/remove-a-team-hierarchy-link-returns-api-error-response-response.json b/test-runner-data/v2/teams/remove-a-team-hierarchy-link-returns-api-error-response-response.json new file mode 100644 index 0000000000..0f3a37f39c --- /dev/null +++ b/test-runner-data/v2/teams/remove-a-team-hierarchy-link-returns-api-error-response-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Remove a team hierarchy link returns \"API error response.\" response", + "operation_id": "RemoveTeamHierarchyLink", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + }, + "style": null + } + ], + "path": "/api/v2/team-hierarchy-links/{link_id}" + }, + "scenario": "Remove a team hierarchy link returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/remove-a-team-hierarchy-link-returns-no-content-response.json b/test-runner-data/v2/teams/remove-a-team-hierarchy-link-returns-no-content-response.json new file mode 100644 index 0000000000..0c45856d8e --- /dev/null +++ b/test-runner-data/v2/teams/remove-a-team-hierarchy-link-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 204, + "feature": "Teams", + "id": "v2/Teams/Remove a team hierarchy link returns \"No Content\" response", + "operation_id": "RemoveTeamHierarchyLink", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_hierarchy_link.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team-hierarchy-links/{link_id}" + }, + "scenario": "Remove a team hierarchy link returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/remove-a-team-link-returns-api-error-response-response.json b/test-runner-data/v2/teams/remove-a-team-link-returns-api-error-response-response.json new file mode 100644 index 0000000000..3c15b5a4a5 --- /dev/null +++ b/test-runner-data/v2/teams/remove-a-team-link-returns-api-error-response-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Remove a team link returns \"API error response.\" response", + "operation_id": "DeleteTeamLink", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links/{link_id}" + }, + "scenario": "Remove a team link returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/remove-a-team-link-returns-no-content-response.json b/test-runner-data/v2/teams/remove-a-team-link-returns-no-content-response.json new file mode 100644 index 0000000000..7294f85b3d --- /dev/null +++ b/test-runner-data/v2/teams/remove-a-team-link-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 204, + "feature": "Teams", + "id": "v2/Teams/Remove a team link returns \"No Content\" response", + "operation_id": "DeleteTeamLink", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_link.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links/{link_id}" + }, + "scenario": "Remove a team link returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/remove-a-team-returns-api-error-response-response.json b/test-runner-data/v2/teams/remove-a-team-returns-api-error-response-response.json new file mode 100644 index 0000000000..d5e6ac656a --- /dev/null +++ b/test-runner-data/v2/teams/remove-a-team-returns-api-error-response-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Remove a team returns \"API error response.\" response", + "operation_id": "DeleteTeam", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}" + }, + "scenario": "Remove a team returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/remove-a-team-returns-no-content-response.json b/test-runner-data/v2/teams/remove-a-team-returns-no-content-response.json new file mode 100644 index 0000000000..e31b7d804c --- /dev/null +++ b/test-runner-data/v2/teams/remove-a-team-returns-no-content-response.json @@ -0,0 +1,35 @@ +{ + "api": "Teams", + "expected_status": 204, + "feature": "Teams", + "id": "v2/Teams/Remove a team returns \"No Content\" response", + "operation_id": "DeleteTeam", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}" + }, + "scenario": "Remove a team returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/remove-a-user-from-a-team-returns-api-error-response-response.json b/test-runner-data/v2/teams/remove-a-user-from-a-team-returns-api-error-response-response.json new file mode 100644 index 0000000000..061ec03fed --- /dev/null +++ b/test-runner-data/v2/teams/remove-a-user-from-a-team-returns-api-error-response-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Remove a user from a team returns \"API error response.\" response", + "operation_id": "DeleteTeamMembership", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships/{user_id}" + }, + "scenario": "Remove a user from a team returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/remove-a-user-from-a-team-returns-no-content-response.json b/test-runner-data/v2/teams/remove-a-user-from-a-team-returns-no-content-response.json new file mode 100644 index 0000000000..95f2243036 --- /dev/null +++ b/test-runner-data/v2/teams/remove-a-user-from-a-team-returns-no-content-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 204, + "feature": "Teams", + "id": "v2/Teams/Remove a user from a team returns \"No Content\" response", + "operation_id": "DeleteTeamMembership", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships/{user_id}" + }, + "scenario": "Remove a user from a team returns \"No Content\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-a-team-link-returns-api-error-response-response.json b/test-runner-data/v2/teams/update-a-team-link-returns-api-error-response-response.json new file mode 100644 index 0000000000..b3d138d7ce --- /dev/null +++ b/test-runner-data/v2/teams/update-a-team-link-returns-api-error-response-response.json @@ -0,0 +1,67 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Update a team link returns \"API error response.\" response", + "operation_id": "UpdateTeamLink", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamLinkCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "label": "Link label", + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links/{link_id}" + }, + "scenario": "Update a team link returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-a-team-link-returns-ok-response.json b/test-runner-data/v2/teams/update-a-team-link-returns-ok-response.json new file mode 100644 index 0000000000..fcd697d870 --- /dev/null +++ b/test-runner-data/v2/teams/update-a-team-link-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Update a team link returns \"OK\" response", + "operation_id": "UpdateTeamLink", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamLinkCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "label": "New Label", + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "link_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_link.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/links/{link_id}" + }, + "scenario": "Update a team link returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-a-team-returns-ok-response.json b/test-runner-data/v2/teams/update-a-team-returns-ok-response.json new file mode 100644 index 0000000000..106950197a --- /dev/null +++ b/test-runner-data/v2/teams/update-a-team-returns-ok-response.json @@ -0,0 +1,60 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Update a team returns \"OK\" response", + "operation_id": "UpdateTeam", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "avatar": "\ud83e\udd51", + "banner": 7, + "handle": "{{dd_team.data.attributes.handle}}", + "hidden_modules": [ + "m3" + ], + "name": "{{dd_team.data.attributes.name}} updated", + "visible_modules": [ + "m1", + "m2" + ] + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}" + }, + "scenario": "Update a team returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-a-team-with-partial-update-returns-ok-response.json b/test-runner-data/v2/teams/update-a-team-with-partial-update-returns-ok-response.json new file mode 100644 index 0000000000..b08ad7ac1a --- /dev/null +++ b/test-runner-data/v2/teams/update-a-team-with-partial-update-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Update a team with partial update returns \"OK\" response", + "operation_id": "UpdateTeam", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "handle": "{{dd_team.data.attributes.handle}}", + "name": "{{dd_team.data.attributes.name}} updated" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}" + }, + "scenario": "Update a team with partial update returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-a-user-s-membership-attributes-on-a-team-returns-api-error-response-response.json b/test-runner-data/v2/teams/update-a-user-s-membership-attributes-on-a-team-returns-api-error-response-response.json new file mode 100644 index 0000000000..ad32bffe96 --- /dev/null +++ b/test-runner-data/v2/teams/update-a-user-s-membership-attributes-on-a-team-returns-api-error-response-response.json @@ -0,0 +1,66 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Update a user's membership attributes on a team returns \"API error response.\" response", + "operation_id": "UpdateTeamMembership", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserTeamUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-0000-dead-beef-000000000000" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships/{user_id}" + }, + "scenario": "Update a user's membership attributes on a team returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-a-user-s-membership-attributes-on-a-team-returns-ok-response.json b/test-runner-data/v2/teams/update-a-user-s-membership-attributes-on-a-team-returns-ok-response.json new file mode 100644 index 0000000000..b795efee0f --- /dev/null +++ b/test-runner-data/v2/teams/update-a-user-s-membership-attributes-on-a-team-returns-ok-response.json @@ -0,0 +1,66 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Update a user's membership attributes on a team returns \"OK\" response", + "operation_id": "UpdateTeamMembership", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserTeamUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships/{user_id}" + }, + "scenario": "Update a user's membership attributes on a team returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-a-user-s-membership-attributes-on-a-team-with-invalid-role-returns-api-error-response-response.json b/test-runner-data/v2/teams/update-a-user-s-membership-attributes-on-a-team-with-invalid-role-returns-api-error-response-response.json new file mode 100644 index 0000000000..ab401767d0 --- /dev/null +++ b/test-runner-data/v2/teams/update-a-user-s-membership-attributes-on-a-team-with-invalid-role-returns-api-error-response-response.json @@ -0,0 +1,66 @@ +{ + "api": "Teams", + "expected_status": 400, + "feature": "Teams", + "id": "v2/Teams/Update a user's membership attributes on a team with invalid role returns \"API error response.\" response", + "operation_id": "UpdateTeamMembership", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserTeamUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "role": "member" + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/memberships/{user_id}" + }, + "scenario": "Update a user's membership attributes on a team with invalid role returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-permission-setting-for-team-returns-api-error-response-response.json b/test-runner-data/v2/teams/update-permission-setting-for-team-returns-api-error-response-response.json new file mode 100644 index 0000000000..9ab713f9d8 --- /dev/null +++ b/test-runner-data/v2/teams/update-permission-setting-for-team-returns-api-error-response-response.json @@ -0,0 +1,66 @@ +{ + "api": "Teams", + "expected_status": 404, + "feature": "Teams", + "id": "v2/Teams/Update permission setting for team returns \"API error response.\" response", + "operation_id": "UpdateTeamPermissionSetting", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamPermissionSettingUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "value": "admins" + }, + "type": "team_permission_settings" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "action", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "REPLACE.ME" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/permission-settings/{action}" + }, + "scenario": "Update permission setting for team returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-permission-setting-for-team-returns-ok-response.json b/test-runner-data/v2/teams/update-permission-setting-for-team-returns-ok-response.json new file mode 100644 index 0000000000..9796e0afbc --- /dev/null +++ b/test-runner-data/v2/teams/update-permission-setting-for-team-returns-ok-response.json @@ -0,0 +1,66 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Update permission setting for team returns \"OK\" response", + "operation_id": "UpdateTeamPermissionSetting", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamPermissionSettingUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "value": "admins" + }, + "type": "team_permission_settings" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "action", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "manage_membership" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/permission-settings/{action}" + }, + "scenario": "Update permission setting for team returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-team-notification-rule-returns-api-error-response-response.json b/test-runner-data/v2/teams/update-team-notification-rule-returns-api-error-response-response.json new file mode 100644 index 0000000000..0d0ac82d60 --- /dev/null +++ b/test-runner-data/v2/teams/update-team-notification-rule-returns-api-error-response-response.json @@ -0,0 +1,73 @@ +{ + "api": "Teams", + "expected_status": 409, + "feature": "Teams", + "id": "v2/Teams/Update team notification rule returns \"API error response.\" response", + "operation_id": "UpdateTeamNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "pagerduty": { + "service_name": "Datadog-prod" + }, + "slack": { + "channel": "aaa-governance-ops", + "workspace": "Datadog" + } + }, + "id": "{{dd_team.data.id}}", + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "3d031bb2-e1da-4d34-a670-1b5557b032c9" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/notification-rules/{rule_id}" + }, + "scenario": "Update team notification rule returns \"API error response.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/teams/update-team-notification-rule-returns-ok-response.json b/test-runner-data/v2/teams/update-team-notification-rule-returns-ok-response.json new file mode 100644 index 0000000000..8104fd3ca9 --- /dev/null +++ b/test-runner-data/v2/teams/update-team-notification-rule-returns-ok-response.json @@ -0,0 +1,73 @@ +{ + "api": "Teams", + "expected_status": 200, + "feature": "Teams", + "id": "v2/Teams/Update team notification rule returns \"OK\" response", + "operation_id": "UpdateTeamNotificationRule", + "request": { + "body": { + "schema": { + "format": null, + "ref": "TeamNotificationRuleRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "pagerduty": { + "service_name": "Datadog-prod" + }, + "slack": { + "channel": "aaa-governance-ops", + "workspace": "Datadog" + } + }, + "id": "{{team_notification_rule.data.id}}", + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "team_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "dd_team.data.id", + "type": "fixture" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "rule_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "team_notification_rule.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/team/{team_id}/notification-rules/{rule_id}" + }, + "scenario": "Update team notification rule returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-active-billing-dimensions-for-cost-attribution-returns-ok-response.json b/test-runner-data/v2/usage-metering/get-active-billing-dimensions-for-cost-attribution-returns-ok-response.json new file mode 100644 index 0000000000..5d66ff29e0 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-active-billing-dimensions-for-cost-attribution-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get active billing dimensions for cost attribution returns \"OK\" response", + "operation_id": "GetActiveBillingDimensions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/cost_by_tag/active_billing_dimensions" + }, + "scenario": "Get active billing dimensions for cost attribution returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-available-fields-for-usage-summary-returns-bad-request-response.json b/test-runner-data/v2/usage-metering/get-available-fields-for-usage-summary-returns-bad-request-response.json new file mode 100644 index 0000000000..d12acc00b1 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-available-fields-for-usage-summary-returns-bad-request-response.json @@ -0,0 +1,18 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get available fields for usage summary returns \"Bad Request\" response", + "operation_id": "GetUsageSummaryAvailableFields", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/usage/summary/available_fields" + }, + "scenario": "Get available fields for usage summary returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-billing-dimension-mapping-for-usage-endpoints-returns-bad-request-response.json b/test-runner-data/v2/usage-metering/get-billing-dimension-mapping-for-usage-endpoints-returns-bad-request-response.json new file mode 100644 index 0000000000..20ab97889f --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-billing-dimension-mapping-for-usage-endpoints-returns-bad-request-response.json @@ -0,0 +1,18 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get billing dimension mapping for usage endpoints returns \"Bad Request\" response", + "operation_id": "GetBillingDimensionMapping", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/usage/billing_dimension_mapping" + }, + "scenario": "Get billing dimension mapping for usage endpoints returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-cost-across-multi-org-account-returns-ok-response.json b/test-runner-data/v2/usage-metering/get-cost-across-multi-org-account-returns-ok-response.json new file mode 100644 index 0000000000..fcce9c8274 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-cost-across-multi-org-account-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get cost across multi-org account returns \"OK\" response", + "operation_id": "GetCostByOrg", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_month", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/cost_by_org" + }, + "scenario": "Get cost across multi-org account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-historical-cost-across-your-account-returns-ok-response.json b/test-runner-data/v2/usage-metering/get-historical-cost-across-your-account-returns-ok-response.json new file mode 100644 index 0000000000..21e157e554 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-historical-cost-across-your-account-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get historical cost across your account returns \"OK\" response", + "operation_id": "GetHistoricalCostByOrg", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_month", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 2M') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "view", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "sub-org" + }, + "style": null + } + ], + "path": "/api/v2/usage/historical_cost" + }, + "scenario": "Get historical cost across your account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-hourly-usage-by-product-family-returns-bad-request-response.json b/test-runner-data/v2/usage-metering/get-hourly-usage-by-product-family-returns-bad-request-response.json new file mode 100644 index 0000000000..ddf1d9877e --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-hourly-usage-by-product-family-returns-bad-request-response.json @@ -0,0 +1,67 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get hourly usage by product family returns \"Bad Request\" response", + "operation_id": "GetHourlyUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[timestamp][start]", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[product_families]", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "infra_hosts" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[timestamp][end]", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/hourly_usage" + }, + "scenario": "Get hourly usage by product family returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-hourly-usage-by-product-family-returns-ok-response.json b/test-runner-data/v2/usage-metering/get-hourly-usage-by-product-family-returns-ok-response.json new file mode 100644 index 0000000000..392046ae76 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-hourly-usage-by-product-family-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get hourly usage by product family returns \"OK\" response", + "operation_id": "GetHourlyUsage", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[timestamp][start]", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "filter[product_families]", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "infra_hosts" + }, + "style": null + } + ], + "path": "/api/v2/usage/hourly_usage" + }, + "scenario": "Get hourly usage by product family returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-hourly-usage-for-application-security-returns-bad-request-response.json b/test-runner-data/v2/usage-metering/get-hourly-usage-for-application-security-returns-bad-request-response.json new file mode 100644 index 0000000000..781b0ccd66 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-hourly-usage-for-application-security-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get hourly usage for Application Security returns \"Bad Request\" response", + "operation_id": "GetUsageApplicationSecurityMonitoring", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_hr", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_hr", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/application_security" + }, + "scenario": "Get hourly usage for Application Security returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-hourly-usage-for-application-security-returns-ok-response.json b/test-runner-data/v2/usage-metering/get-hourly-usage-for-application-security-returns-ok-response.json new file mode 100644 index 0000000000..18d5991e8e --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-hourly-usage-for-application-security-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get hourly usage for application security returns \"OK\" response", + "operation_id": "GetUsageApplicationSecurityMonitoring", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_hr", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_hr", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/application_security" + }, + "scenario": "Get hourly usage for application security returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-hourly-usage-for-lambda-traced-invocations-returns-bad-request-response.json b/test-runner-data/v2/usage-metering/get-hourly-usage-for-lambda-traced-invocations-returns-bad-request-response.json new file mode 100644 index 0000000000..51ccc8ef5e --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-hourly-usage-for-lambda-traced-invocations-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get hourly usage for Lambda traced invocations returns \"Bad Request\" response", + "operation_id": "GetUsageLambdaTracedInvocations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_hr", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_hr", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/lambda_traced_invocations" + }, + "scenario": "Get hourly usage for Lambda traced invocations returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-hourly-usage-for-lambda-traced-invocations-returns-ok-response.json b/test-runner-data/v2/usage-metering/get-hourly-usage-for-lambda-traced-invocations-returns-ok-response.json new file mode 100644 index 0000000000..bab1f200bc --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-hourly-usage-for-lambda-traced-invocations-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get hourly usage for Lambda traced invocations returns \"OK\" response", + "operation_id": "GetUsageLambdaTracedInvocations", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_hr", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_hr", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/lambda_traced_invocations" + }, + "scenario": "Get hourly usage for Lambda traced invocations returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-hourly-usage-for-observability-pipelines-returns-bad-request-response.json b/test-runner-data/v2/usage-metering/get-hourly-usage-for-observability-pipelines-returns-bad-request-response.json new file mode 100644 index 0000000000..1df4205055 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-hourly-usage-for-observability-pipelines-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get hourly usage for Observability Pipelines returns \"Bad Request\" response", + "operation_id": "GetUsageObservabilityPipelines", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_hr", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_hr", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/observability_pipelines" + }, + "scenario": "Get hourly usage for Observability Pipelines returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-hourly-usage-for-observability-pipelines-returns-ok-response.json b/test-runner-data/v2/usage-metering/get-hourly-usage-for-observability-pipelines-returns-ok-response.json new file mode 100644 index 0000000000..999137fbad --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-hourly-usage-for-observability-pipelines-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get hourly usage for observability pipelines returns \"OK\" response", + "operation_id": "GetUsageObservabilityPipelines", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_hr", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_hr", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/observability_pipelines" + }, + "scenario": "Get hourly usage for observability pipelines returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-monthly-cost-attribution-returns-bad-request-response.json b/test-runner-data/v2/usage-metering/get-monthly-cost-attribution-returns-bad-request-response.json new file mode 100644 index 0000000000..98d2b5d181 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-monthly-cost-attribution-returns-bad-request-response.json @@ -0,0 +1,67 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get Monthly Cost Attribution returns \"Bad Request\" response", + "operation_id": "GetMonthlyCostAttribution", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_month", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "fields", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "not_a_product" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_month", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + } + ], + "path": "/api/v2/cost_by_tag/monthly_cost_attribution" + }, + "scenario": "Get Monthly Cost Attribution returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-monthly-cost-attribution-returns-ok-response.json b/test-runner-data/v2/usage-metering/get-monthly-cost-attribution-returns-ok-response.json new file mode 100644 index 0000000000..fdeffe17c7 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-monthly-cost-attribution-returns-ok-response.json @@ -0,0 +1,67 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get Monthly Cost Attribution returns \"OK\" response", + "operation_id": "GetMonthlyCostAttribution", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "start_month", + "required": true, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 5d') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "fields", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "infra_host_total_cost" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "end_month", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + } + ], + "path": "/api/v2/cost_by_tag/monthly_cost_attribution" + }, + "scenario": "Get Monthly Cost Attribution returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/get-projected-cost-across-your-account-returns-ok-response.json b/test-runner-data/v2/usage-metering/get-projected-cost-across-your-account-returns-ok-response.json new file mode 100644 index 0000000000..be48d9fc70 --- /dev/null +++ b/test-runner-data/v2/usage-metering/get-projected-cost-across-your-account-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/Get projected cost across your account returns \"OK\" response", + "operation_id": "GetProjectedCost", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "view", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "sub-org" + }, + "style": null + } + ], + "path": "/api/v2/usage/projected_cost" + }, + "scenario": "Get projected cost across your account returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/getestimatedcostbyorg-with-both-start-month-and-start-date-returns-bad-request-response.json b/test-runner-data/v2/usage-metering/getestimatedcostbyorg-with-both-start-month-and-start-date-returns-bad-request-response.json new file mode 100644 index 0000000000..9a811283c1 --- /dev/null +++ b/test-runner-data/v2/usage-metering/getestimatedcostbyorg-with-both-start-month-and-start-date-returns-bad-request-response.json @@ -0,0 +1,67 @@ +{ + "api": "UsageMetering", + "expected_status": 400, + "feature": "Usage Metering", + "id": "v2/Usage Metering/GetEstimatedCostByOrg with both start_month and start_date returns \"Bad Request\" response", + "operation_id": "GetEstimatedCostByOrg", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "view", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "sub-org" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "start_month", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now') }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "start_date", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now - 3d') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/estimated_cost" + }, + "scenario": "GetEstimatedCostByOrg with both start_month and start_date returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/usage-metering/getestimatedcostbyorg-with-start-month-returns-ok-response.json b/test-runner-data/v2/usage-metering/getestimatedcostbyorg-with-start-month-returns-ok-response.json new file mode 100644 index 0000000000..0d2e8d3b41 --- /dev/null +++ b/test-runner-data/v2/usage-metering/getestimatedcostbyorg-with-start-month-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "UsageMetering", + "expected_status": 200, + "feature": "Usage Metering", + "id": "v2/Usage Metering/GetEstimatedCostByOrg with start_month returns \"OK\" response", + "operation_id": "GetEstimatedCostByOrg", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "view", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "sub-org" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "start_month", + "required": false, + "schema": { + "format": "date-time", + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ timeISO('now') }}" + }, + "style": null + } + ], + "path": "/api/v2/usage/estimated_cost" + }, + "scenario": "GetEstimatedCostByOrg with start_month returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/create-a-user-returns-ok-response.json b/test-runner-data/v2/users/create-a-user-returns-ok-response.json new file mode 100644 index 0000000000..4225ddd7ab --- /dev/null +++ b/test-runner-data/v2/users/create-a-user-returns-ok-response.json @@ -0,0 +1,34 @@ +{ + "api": "Users", + "expected_status": 201, + "feature": "Users", + "id": "v2/Users/Create a user returns \"OK\" response", + "operation_id": "CreateUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "email": "{{ unique }}@datadoghq.com", + "name": "Datadog API Client Python" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/users" + }, + "scenario": "Create a user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/disable-a-user-returns-ok-response.json b/test-runner-data/v2/users/disable-a-user-returns-ok-response.json new file mode 100644 index 0000000000..cfce8f2903 --- /dev/null +++ b/test-runner-data/v2/users/disable-a-user-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Users", + "expected_status": 204, + "feature": "Users", + "id": "v2/Users/Disable a user returns \"OK\" response", + "operation_id": "DisableUser", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/users/{user_id}" + }, + "scenario": "Disable a user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/get-a-user-invitation-returns-ok-response.json b/test-runner-data/v2/users/get-a-user-invitation-returns-ok-response.json new file mode 100644 index 0000000000..8268c3ec0b --- /dev/null +++ b/test-runner-data/v2/users/get-a-user-invitation-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Users", + "expected_status": 200, + "feature": "Users", + "id": "v2/Users/Get a user invitation returns \"OK\" response", + "operation_id": "GetInvitation", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_invitation_uuid", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user_invitation.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/user_invitations/{user_invitation_uuid}" + }, + "scenario": "Get a user invitation returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/get-a-user-permissions-returns-ok-response.json b/test-runner-data/v2/users/get-a-user-permissions-returns-ok-response.json new file mode 100644 index 0000000000..bc7d523131 --- /dev/null +++ b/test-runner-data/v2/users/get-a-user-permissions-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Users", + "expected_status": 200, + "feature": "Users", + "id": "v2/Users/Get a user permissions returns \"OK\" response", + "operation_id": "ListUserPermissions", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/users/{user_id}/permissions" + }, + "scenario": "Get a user permissions returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/get-user-details-returns-ok-response.json b/test-runner-data/v2/users/get-user-details-returns-ok-response.json new file mode 100644 index 0000000000..c9486602ed --- /dev/null +++ b/test-runner-data/v2/users/get-user-details-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Users", + "expected_status": 200, + "feature": "Users", + "id": "v2/Users/Get user details returns \"OK\" response", + "operation_id": "GetUser", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/users/{user_id}" + }, + "scenario": "Get user details returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/list-all-users-returns-ok-response-with-pagination.json b/test-runner-data/v2/users/list-all-users-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..8668b14039 --- /dev/null +++ b/test-runner-data/v2/users/list-all-users-returns-ok-response-with-pagination.json @@ -0,0 +1,35 @@ +{ + "api": "Users", + "expected_status": 200, + "feature": "Users", + "id": "v2/Users/List all users returns \"OK\" response with pagination", + "operation_id": "ListUsers", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "page[size]", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/users" + }, + "scenario": "List all users returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/list-all-users-returns-ok-response.json b/test-runner-data/v2/users/list-all-users-returns-ok-response.json new file mode 100644 index 0000000000..d6529e45ad --- /dev/null +++ b/test-runner-data/v2/users/list-all-users-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "Users", + "expected_status": 200, + "feature": "Users", + "id": "v2/Users/List all users returns \"OK\" response", + "operation_id": "ListUsers", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.attributes.email", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/users" + }, + "scenario": "List all users returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/send-invitation-emails-returns-ok-response.json b/test-runner-data/v2/users/send-invitation-emails-returns-ok-response.json new file mode 100644 index 0000000000..544f17f3f5 --- /dev/null +++ b/test-runner-data/v2/users/send-invitation-emails-returns-ok-response.json @@ -0,0 +1,40 @@ +{ + "api": "Users", + "expected_status": 201, + "feature": "Users", + "id": "v2/Users/Send invitation emails returns \"OK\" response", + "operation_id": "SendInvitations", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserInvitationsRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": [ + { + "relationships": { + "user": { + "data": { + "id": "{{ user.data.id }}", + "type": "{{ user.data.type }}" + } + } + }, + "type": "user_invitations" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/user_invitations" + }, + "scenario": "Send invitation emails returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/update-a-user-returns-bad-user-id-in-request-response.json b/test-runner-data/v2/users/update-a-user-returns-bad-user-id-in-request-response.json new file mode 100644 index 0000000000..ae8b18be2a --- /dev/null +++ b/test-runner-data/v2/users/update-a-user-returns-bad-user-id-in-request-response.json @@ -0,0 +1,52 @@ +{ + "api": "Users", + "expected_status": 422, + "feature": "Users", + "id": "v2/Users/Update a user returns \"Bad User ID in Request\" response", + "operation_id": "UpdateUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "disabled": true, + "name": "updated" + }, + "id": "00000000-mismatch-body-id-ffffffffffff", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/users/{user_id}" + }, + "scenario": "Update a user returns \"Bad User ID in Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/update-a-user-returns-not-found-response.json b/test-runner-data/v2/users/update-a-user-returns-not-found-response.json new file mode 100644 index 0000000000..acedd7e43e --- /dev/null +++ b/test-runner-data/v2/users/update-a-user-returns-not-found-response.json @@ -0,0 +1,52 @@ +{ + "api": "Users", + "expected_status": 404, + "feature": "Users", + "id": "v2/Users/Update a user returns \"Not found\" response", + "operation_id": "UpdateUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "disabled": true, + "name": "updated" + }, + "id": "00000000-dead-beef-dead-ffffffffffff", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "00000000-dead-beef-dead-ffffffffffff" + }, + "style": null + } + ], + "path": "/api/v2/users/{user_id}" + }, + "scenario": "Update a user returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/users/update-a-user-returns-ok-response.json b/test-runner-data/v2/users/update-a-user-returns-ok-response.json new file mode 100644 index 0000000000..1986ac7bbd --- /dev/null +++ b/test-runner-data/v2/users/update-a-user-returns-ok-response.json @@ -0,0 +1,52 @@ +{ + "api": "Users", + "expected_status": 200, + "feature": "Users", + "id": "v2/Users/Update a user returns \"OK\" response", + "operation_id": "UpdateUser", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UserUpdateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "disabled": true, + "name": "updated" + }, + "id": "{{ user.data.id }}", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "user_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "user.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/users/{user_id}" + }, + "scenario": "Update a user returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/cancel-a-workflow-instance-returns-bad-request-response.json b/test-runner-data/v2/workflow-automation/cancel-a-workflow-instance-returns-bad-request-response.json new file mode 100644 index 0000000000..704d66d8d4 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/cancel-a-workflow-instance-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 400, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Cancel a workflow instance returns \"Bad Request\" response", + "operation_id": "CancelWorkflowInstance", + "request": { + "body": null, + "content_type": null, + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "instance_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances/{instance_id}/cancel" + }, + "scenario": "Cancel a workflow instance returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/cancel-a-workflow-instance-returns-not-found-response.json b/test-runner-data/v2/workflow-automation/cancel-a-workflow-instance-returns-not-found-response.json new file mode 100644 index 0000000000..0cec3c3310 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/cancel-a-workflow-instance-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 404, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Cancel a workflow instance returns \"Not Found\" response", + "operation_id": "CancelWorkflowInstance", + "request": { + "body": null, + "content_type": null, + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "0233a3b7-b7ba-425e-a8cc-375ca2020b5b" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "instance_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "e0c64dc8-f946-4ae8-8d79-54569031ce67" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances/{instance_id}/cancel" + }, + "scenario": "Cancel a workflow instance returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/cancel-a-workflow-instance-returns-ok-response.json b/test-runner-data/v2/workflow-automation/cancel-a-workflow-instance-returns-ok-response.json new file mode 100644 index 0000000000..a105c28726 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/cancel-a-workflow-instance-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 200, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Cancel a workflow instance returns \"OK\" response", + "operation_id": "CancelWorkflowInstance", + "request": { + "body": null, + "content_type": null, + "method": "PUT", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "ccf73164-1998-4785-a7a3-8d06c7e5f558" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "instance_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "305a472b-71ab-4ce8-8f8d-75db635627b5" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances/{instance_id}/cancel" + }, + "scenario": "Cancel a workflow instance returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/create-a-workflow-returns-bad-request-response.json b/test-runner-data/v2/workflow-automation/create-a-workflow-returns-bad-request-response.json new file mode 100644 index 0000000000..dbcad8e57e --- /dev/null +++ b/test-runner-data/v2/workflow-automation/create-a-workflow-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 400, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Create a Workflow returns \"Bad request\" response", + "operation_id": "CreateWorkflow", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateWorkflowRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "Too many characters in description", + "spec": {} + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/workflows" + }, + "scenario": "Create a Workflow returns \"Bad request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/create-a-workflow-returns-successfully-created-a-workflow-response.json b/test-runner-data/v2/workflow-automation/create-a-workflow-returns-successfully-created-a-workflow-response.json new file mode 100644 index 0000000000..e97bb7ba80 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/create-a-workflow-returns-successfully-created-a-workflow-response.json @@ -0,0 +1,113 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 201, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Create a Workflow returns \"Successfully created a workflow.\" response", + "operation_id": "CreateWorkflow", + "request": { + "body": { + "schema": { + "format": null, + "ref": "CreateWorkflowRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A sample workflow.", + "name": "Example Workflow", + "published": true, + "spec": { + "connectionEnvs": [ + { + "connections": [ + { + "connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", + "label": "INTEGRATION_DATADOG" + } + ], + "env": "default" + } + ], + "inputSchema": { + "parameters": [ + { + "defaultValue": "default", + "name": "input", + "type": "STRING" + } + ] + }, + "outputSchema": { + "parameters": [ + { + "name": "output", + "type": "ARRAY_OBJECT", + "value": "outputValue" + } + ] + }, + "steps": [ + { + "actionId": "com.datadoghq.dd.monitor.listMonitors", + "connectionLabel": "INTEGRATION_DATADOG", + "name": "Step1", + "outboundEdges": [ + { + "branchName": "main", + "nextStepName": "Step2" + } + ], + "parameters": [ + { + "name": "tags", + "value": "service:monitoring" + } + ] + }, + { + "actionId": "com.datadoghq.core.noop", + "name": "Step2" + } + ], + "triggers": [ + { + "monitorTrigger": { + "rateLimit": { + "count": 1, + "interval": "3600s" + } + }, + "startStepNames": [ + "Step1" + ] + }, + { + "githubWebhookTrigger": {}, + "startStepNames": [ + "Step1" + ] + } + ] + }, + "tags": [ + "team:infra", + "service:monitoring", + "foo:bar" + ] + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [], + "path": "/api/v2/workflows" + }, + "scenario": "Create a Workflow returns \"Successfully created a workflow.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/delete-an-existing-workflow-returns-not-found-response.json b/test-runner-data/v2/workflow-automation/delete-an-existing-workflow-returns-not-found-response.json new file mode 100644 index 0000000000..dd57000b43 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/delete-an-existing-workflow-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 404, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Delete an existing Workflow returns \"Not found\" response", + "operation_id": "DeleteWorkflow", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}" + }, + "scenario": "Delete an existing Workflow returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/delete-an-existing-workflow-returns-successfully-deleted-a-workflow-response.json b/test-runner-data/v2/workflow-automation/delete-an-existing-workflow-returns-successfully-deleted-a-workflow-response.json new file mode 100644 index 0000000000..dad4d2aab6 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/delete-an-existing-workflow-returns-successfully-deleted-a-workflow-response.json @@ -0,0 +1,35 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 204, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Delete an existing Workflow returns \"Successfully deleted a workflow.\" response", + "operation_id": "DeleteWorkflow", + "request": { + "body": null, + "content_type": null, + "method": "DELETE", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "workflow.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}" + }, + "scenario": "Delete an existing Workflow returns \"Successfully deleted a workflow.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/execute-a-workflow-returns-bad-request-response.json b/test-runner-data/v2/workflow-automation/execute-a-workflow-returns-bad-request-response.json new file mode 100644 index 0000000000..a83e62f685 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/execute-a-workflow-returns-bad-request-response.json @@ -0,0 +1,49 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 400, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Execute a workflow returns \"Bad Request\" response", + "operation_id": "CreateWorkflowInstance", + "request": { + "body": { + "schema": { + "format": null, + "ref": "WorkflowInstanceCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "meta": { + "payload": { + "input": "value" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances" + }, + "scenario": "Execute a workflow returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/execute-a-workflow-returns-created-response.json b/test-runner-data/v2/workflow-automation/execute-a-workflow-returns-created-response.json new file mode 100644 index 0000000000..2d10134b47 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/execute-a-workflow-returns-created-response.json @@ -0,0 +1,49 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 200, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Execute a workflow returns \"Created\" response", + "operation_id": "CreateWorkflowInstance", + "request": { + "body": { + "schema": { + "format": null, + "ref": "WorkflowInstanceCreateRequest", + "type": "object" + }, + "source": "inline", + "value": { + "meta": { + "payload": { + "input": "value" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "ccf73164-1998-4785-a7a3-8d06c7e5f558" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances" + }, + "scenario": "Execute a workflow returns \"Created\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/get-a-workflow-instance-returns-bad-request-response.json b/test-runner-data/v2/workflow-automation/get-a-workflow-instance-returns-bad-request-response.json new file mode 100644 index 0000000000..0b272c925a --- /dev/null +++ b/test-runner-data/v2/workflow-automation/get-a-workflow-instance-returns-bad-request-response.json @@ -0,0 +1,51 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 400, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Get a workflow instance returns \"Bad Request\" response", + "operation_id": "GetWorkflowInstance", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "instance_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances/{instance_id}" + }, + "scenario": "Get a workflow instance returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/get-a-workflow-instance-returns-not-found-response.json b/test-runner-data/v2/workflow-automation/get-a-workflow-instance-returns-not-found-response.json new file mode 100644 index 0000000000..dc85afb0cf --- /dev/null +++ b/test-runner-data/v2/workflow-automation/get-a-workflow-instance-returns-not-found-response.json @@ -0,0 +1,51 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 404, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Get a workflow instance returns \"Not Found\" response", + "operation_id": "GetWorkflowInstance", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "0233a3b7-b7ba-425e-a8cc-375ca2020b5b" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "instance_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "e0c64dc8-f946-4ae8-8d79-54569031ce67" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances/{instance_id}" + }, + "scenario": "Get a workflow instance returns \"Not Found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/get-a-workflow-instance-returns-ok-response.json b/test-runner-data/v2/workflow-automation/get-a-workflow-instance-returns-ok-response.json new file mode 100644 index 0000000000..9f407383b9 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/get-a-workflow-instance-returns-ok-response.json @@ -0,0 +1,51 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 200, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Get a workflow instance returns \"OK\" response", + "operation_id": "GetWorkflowInstance", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "ccf73164-1998-4785-a7a3-8d06c7e5f558" + }, + "style": null + }, + { + "explode": null, + "in": "path", + "name": "instance_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "305a472b-71ab-4ce8-8f8d-75db635627b5" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances/{instance_id}" + }, + "scenario": "Get a workflow instance returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/get-an-existing-workflow-returns-bad-request-response.json b/test-runner-data/v2/workflow-automation/get-an-existing-workflow-returns-bad-request-response.json new file mode 100644 index 0000000000..36d37be97b --- /dev/null +++ b/test-runner-data/v2/workflow-automation/get-an-existing-workflow-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 400, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Get an existing Workflow returns \"Bad request\" response", + "operation_id": "GetWorkflow", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "bad-format" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}" + }, + "scenario": "Get an existing Workflow returns \"Bad request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/get-an-existing-workflow-returns-not-found-response.json b/test-runner-data/v2/workflow-automation/get-an-existing-workflow-returns-not-found-response.json new file mode 100644 index 0000000000..44bb3a370f --- /dev/null +++ b/test-runner-data/v2/workflow-automation/get-an-existing-workflow-returns-not-found-response.json @@ -0,0 +1,35 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 404, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Get an existing Workflow returns \"Not found\" response", + "operation_id": "GetWorkflow", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}" + }, + "scenario": "Get an existing Workflow returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/get-an-existing-workflow-returns-successfully-got-a-workflow-response.json b/test-runner-data/v2/workflow-automation/get-an-existing-workflow-returns-successfully-got-a-workflow-response.json new file mode 100644 index 0000000000..8c1dd6177e --- /dev/null +++ b/test-runner-data/v2/workflow-automation/get-an-existing-workflow-returns-successfully-got-a-workflow-response.json @@ -0,0 +1,35 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 200, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Get an existing Workflow returns \"Successfully got a workflow.\" response", + "operation_id": "GetWorkflow", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "workflow.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}" + }, + "scenario": "Get an existing Workflow returns \"Successfully got a workflow.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/list-workflow-instances-returns-bad-request-response.json b/test-runner-data/v2/workflow-automation/list-workflow-instances-returns-bad-request-response.json new file mode 100644 index 0000000000..15f6d6e71f --- /dev/null +++ b/test-runner-data/v2/workflow-automation/list-workflow-instances-returns-bad-request-response.json @@ -0,0 +1,35 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 400, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/List workflow instances returns \"Bad Request\" response", + "operation_id": "ListWorkflowInstances", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "malformed" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances" + }, + "scenario": "List workflow instances returns \"Bad Request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/list-workflow-instances-returns-ok-response.json b/test-runner-data/v2/workflow-automation/list-workflow-instances-returns-ok-response.json new file mode 100644 index 0000000000..23ab41acfb --- /dev/null +++ b/test-runner-data/v2/workflow-automation/list-workflow-instances-returns-ok-response.json @@ -0,0 +1,35 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 200, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/List workflow instances returns \"OK\" response", + "operation_id": "ListWorkflowInstances", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "ccf73164-1998-4785-a7a3-8d06c7e5f558" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}/instances" + }, + "scenario": "List workflow instances returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/list-workflows-returns-ok-response-with-pagination.json b/test-runner-data/v2/workflow-automation/list-workflows-returns-ok-response-with-pagination.json new file mode 100644 index 0000000000..2230b11456 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/list-workflows-returns-ok-response-with-pagination.json @@ -0,0 +1,51 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 200, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/List workflows returns \"OK\" response with pagination", + "operation_id": "ListWorkflows", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": true, + "parameters": [ + { + "explode": null, + "in": "query", + "name": "filter[query]", + "required": false, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "{{ unique }}" + }, + "style": null + }, + { + "explode": null, + "in": "query", + "name": "limit", + "required": false, + "schema": { + "format": "int64", + "ref": null, + "type": "integer" + }, + "source": { + "type": "literal", + "value": 2 + }, + "style": null + } + ], + "path": "/api/v2/workflows" + }, + "scenario": "List workflows returns \"OK\" response with pagination", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/list-workflows-returns-ok-response.json b/test-runner-data/v2/workflow-automation/list-workflows-returns-ok-response.json new file mode 100644 index 0000000000..5279c941f4 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/list-workflows-returns-ok-response.json @@ -0,0 +1,18 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 200, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/List workflows returns \"OK\" response", + "operation_id": "ListWorkflows", + "request": { + "body": null, + "content_type": null, + "method": "GET", + "pagination": false, + "parameters": [], + "path": "/api/v2/workflows" + }, + "scenario": "List workflows returns \"OK\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/update-an-existing-workflow-returns-bad-request-response.json b/test-runner-data/v2/workflow-automation/update-an-existing-workflow-returns-bad-request-response.json new file mode 100644 index 0000000000..ede7a995fc --- /dev/null +++ b/test-runner-data/v2/workflow-automation/update-an-existing-workflow-returns-bad-request-response.json @@ -0,0 +1,53 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 400, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Update an existing Workflow returns \"Bad request\" response", + "operation_id": "UpdateWorkflow", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateWorkflowRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "Too many characters in description", + "spec": {} + }, + "id": "22222222-2222-2222-2222-222222222222", + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "workflow.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}" + }, + "scenario": "Update an existing Workflow returns \"Bad request\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/update-an-existing-workflow-returns-not-found-response.json b/test-runner-data/v2/workflow-automation/update-an-existing-workflow-returns-not-found-response.json new file mode 100644 index 0000000000..a2d8ae6ce5 --- /dev/null +++ b/test-runner-data/v2/workflow-automation/update-an-existing-workflow-returns-not-found-response.json @@ -0,0 +1,131 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 404, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Update an existing Workflow returns \"Not found\" response", + "operation_id": "UpdateWorkflow", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateWorkflowRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A sample workflow.", + "name": "Example Workflow", + "published": true, + "spec": { + "connectionEnvs": [ + { + "connections": [ + { + "connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", + "label": "INTEGRATION_DATADOG" + } + ], + "env": "default" + } + ], + "inputSchema": { + "parameters": [ + { + "defaultValue": "default", + "name": "input", + "type": "STRING" + } + ] + }, + "outputSchema": { + "parameters": [ + { + "name": "output", + "type": "ARRAY_OBJECT", + "value": "outputValue" + } + ] + }, + "steps": [ + { + "actionId": "com.datadoghq.dd.monitor.listMonitors", + "connectionLabel": "INTEGRATION_DATADOG", + "name": "Step1", + "outboundEdges": [ + { + "branchName": "main", + "nextStepName": "Step2" + } + ], + "parameters": [ + { + "name": "tags", + "value": "service:monitoring" + } + ] + }, + { + "actionId": "com.datadoghq.core.noop", + "name": "Step2" + } + ], + "triggers": [ + { + "monitorTrigger": { + "rateLimit": { + "count": 1, + "interval": "3600s" + } + }, + "startStepNames": [ + "Step1" + ] + }, + { + "githubWebhookTrigger": {}, + "startStepNames": [ + "Step1" + ] + } + ] + }, + "tags": [ + "team:infra", + "service:monitoring", + "foo:bar" + ] + }, + "id": "22222222-2222-2222-2222-222222222222", + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "type": "literal", + "value": "aaa11111-aa11-aa11-aaaa-aaaaaa111111" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}" + }, + "scenario": "Update an existing Workflow returns \"Not found\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-runner-data/v2/workflow-automation/update-an-existing-workflow-returns-successfully-updated-a-workflow-response.json b/test-runner-data/v2/workflow-automation/update-an-existing-workflow-returns-successfully-updated-a-workflow-response.json new file mode 100644 index 0000000000..b568c553de --- /dev/null +++ b/test-runner-data/v2/workflow-automation/update-an-existing-workflow-returns-successfully-updated-a-workflow-response.json @@ -0,0 +1,131 @@ +{ + "api": "WorkflowAutomation", + "expected_status": 200, + "feature": "Workflow Automation", + "id": "v2/Workflow Automation/Update an existing Workflow returns \"Successfully updated a workflow.\" response", + "operation_id": "UpdateWorkflow", + "request": { + "body": { + "schema": { + "format": null, + "ref": "UpdateWorkflowRequest", + "type": "object" + }, + "source": "inline", + "value": { + "data": { + "attributes": { + "description": "A sample workflow.", + "name": "Example Workflow", + "published": true, + "spec": { + "connectionEnvs": [ + { + "connections": [ + { + "connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", + "label": "INTEGRATION_DATADOG" + } + ], + "env": "default" + } + ], + "inputSchema": { + "parameters": [ + { + "defaultValue": "default", + "name": "input", + "type": "STRING" + } + ] + }, + "outputSchema": { + "parameters": [ + { + "name": "output", + "type": "ARRAY_OBJECT", + "value": "outputValue" + } + ] + }, + "steps": [ + { + "actionId": "com.datadoghq.dd.monitor.listMonitors", + "connectionLabel": "INTEGRATION_DATADOG", + "name": "Step1", + "outboundEdges": [ + { + "branchName": "main", + "nextStepName": "Step2" + } + ], + "parameters": [ + { + "name": "tags", + "value": "service:monitoring" + } + ] + }, + { + "actionId": "com.datadoghq.core.noop", + "name": "Step2" + } + ], + "triggers": [ + { + "monitorTrigger": { + "rateLimit": { + "count": 1, + "interval": "3600s" + } + }, + "startStepNames": [ + "Step1" + ] + }, + { + "githubWebhookTrigger": {}, + "startStepNames": [ + "Step1" + ] + } + ] + }, + "tags": [ + "team:infra", + "service:monitoring", + "foo:bar" + ] + }, + "id": "22222222-2222-2222-2222-222222222222", + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "pagination": false, + "parameters": [ + { + "explode": null, + "in": "path", + "name": "workflow_id", + "required": true, + "schema": { + "format": null, + "ref": null, + "type": "string" + }, + "source": { + "path": "workflow.data.id", + "type": "fixture" + }, + "style": null + } + ], + "path": "/api/v2/workflows/{workflow_id}" + }, + "scenario": "Update an existing Workflow returns \"Successfully updated a workflow.\" response", + "schema_version": 1, + "version": "v2" +} diff --git a/test-server b/test-server new file mode 100755 index 0000000000..4abc7c65e4 --- /dev/null +++ b/test-server @@ -0,0 +1,437 @@ +#!/usr/bin/env python3 +# ruff: noqa: A002, BLE001, EM101, EM102, S310, T201, TRY003 +"""Standalone OpenAPI BDD recording replay and capture server. + +This file is copied verbatim by ``openapi-transformer generate test-server``. +It deliberately uses only the Python standard library. +""" + +from __future__ import annotations + +import argparse +import base64 +import json +import os +import re +import tempfile +import threading +import uuid +from datetime import datetime, timezone +from http import HTTPStatus +from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path +from typing import Any +from urllib.error import HTTPError +from urllib.parse import parse_qsl, urlsplit +from urllib.request import Request, urlopen + +CONTROL_ROOT = "/__openapi_transformer__" +SESSION_HEADER = "x-openapi-test-session" +SCHEMA_VERSION = 1 +HOP_BY_HOP_HEADERS = { + "connection", + "keep-alive", + "proxy-authenticate", + "proxy-authorization", + "te", + "trailers", + "transfer-encoding", + "upgrade", +} +SAFE_BROWSER_HEADERS = { + "content-security-policy": "default-src 'none'; sandbox", + "x-content-type-options": "nosniff", +} + + +class RecordingDatabase: + def __init__(self, root: Path) -> None: + self.root = root + self.lock = threading.RLock() + self.shards: dict[tuple[str, str], dict[str, Any]] = {} + self.shard_paths: dict[tuple[str, str], Path] = {} + self.sessions: dict[str, dict[str, Any]] = {} + self.fallback_consumed: set[tuple[str, str, str, int]] = set() + self._load() + + def _load(self) -> None: + manifest_path = self.root / "manifest.json" + if not manifest_path.exists(): + raise RuntimeError(f"Database manifest not found: {manifest_path}") + manifest = _read_json(manifest_path) + if manifest.get("schema_version") != SCHEMA_VERSION: + raise RuntimeError(f"Unsupported database schema: {manifest.get('schema_version')}") + for item in manifest.get("features", []): + path = self.root / item["file"] + shard = _read_json(path) + key = (shard["version"], shard["feature"]) + self.shards[key] = shard + self.shard_paths[key] = path + + def start(self, version: str, feature: str, scenario: str, mode: str) -> dict[str, Any]: + with self.lock: + key = (version, feature) + shard = self.shards.get(key) + recording = None + if shard is not None: + recording = next( + (item for item in shard["recordings"] if item["scenario"] == scenario), + None, + ) + if mode == "replay" and recording is None: + raise LookupError(f"Recording not found: {version}/{feature}/{scenario}") + + frozen_at = recording["frozen_at"] if recording is not None else _now_iso() + session_id = uuid.uuid4().hex + self.sessions[session_id] = { + "id": session_id, + "mode": mode, + "key": key, + "scenario": scenario, + "recording": recording, + "cursor": 0, + "captures": [], + "frozen_at": frozen_at, + } + return {"session": session_id, "frozen_at": frozen_at} + + def replay(self, session_id: str | None, actual: dict[str, Any]) -> dict[str, Any]: + with self.lock: + if session_id: + session = self.sessions.get(session_id) + if session is None: + raise LookupError(f"Unknown session: {session_id}") + recording = session["recording"] + cursor = session["cursor"] + interactions = recording["interactions"] + if cursor >= len(interactions): + raise LookupError(f"Recording has no interaction #{cursor + 1}") + expected = interactions[cursor] + if expected["request"] != actual: + raise RequestMismatchError(expected["request"], actual, cursor) + session["cursor"] += 1 + return expected["response"] + + for (version, feature), shard in sorted(self.shards.items()): + for recording in shard["recordings"]: + for index, interaction in enumerate(recording["interactions"]): + consumed_key = (version, feature, recording["scenario"], index) + if consumed_key not in self.fallback_consumed and interaction["request"] == actual: + self.fallback_consumed.add(consumed_key) + return interaction["response"] + raise LookupError("No unconsumed interaction matches this request") + + def capture( + self, + session_id: str | None, + request: dict[str, Any], + response: dict[str, Any], + ) -> None: + if not session_id: + raise LookupError("Capture requests require the x-openapi-test-session header") + with self.lock: + session = self.sessions.get(session_id) + if session is None: + raise LookupError(f"Unknown session: {session_id}") + session["captures"].append({"request": request, "response": response}) + + def stop(self, session_id: str) -> dict[str, Any]: + with self.lock: + session = self.sessions.pop(session_id, None) + if session is None: + raise LookupError(f"Unknown session: {session_id}") + if session["mode"] == "replay": + expected = len(session["recording"]["interactions"]) + consumed = session["cursor"] + return { + "interactions": consumed, + "total_interactions": expected, + "complete": consumed == expected, + } + + key = session["key"] + shard = self.shards.get(key) + if shard is None: + shard = { + "schema_version": SCHEMA_VERSION, + "version": key[0], + "feature": key[1], + "recordings": [], + } + self.shards[key] = shard + version_dir = self.root / key[0] + version_dir.mkdir(parents=True, exist_ok=True) + self.shard_paths[key] = version_dir / f"{_slug(key[1])}.json" + self._add_manifest_entry(key, self.shard_paths[key]) + + recording = { + "feature": key[1], + "scenario": session["scenario"], + "version": key[0], + "frozen_at": session["frozen_at"], + "interactions": session["captures"], + } + shard["recordings"] = [item for item in shard["recordings"] if item["scenario"] != session["scenario"]] + shard["recordings"].append(recording) + shard["recordings"].sort(key=lambda item: item["scenario"]) + _write_json_atomic(self.shard_paths[key], shard) + return {"interactions": len(session["captures"]), "file": str(self.shard_paths[key])} + + def _add_manifest_entry(self, key: tuple[str, str], shard_path: Path) -> None: + manifest_path = self.root / "manifest.json" + manifest = _read_json(manifest_path) + relative = str(shard_path.relative_to(self.root)) + manifest["features"] = [item for item in manifest["features"] if (item["version"], item["feature"]) != key] + manifest["features"].append({"version": key[0], "feature": key[1], "file": relative}) + manifest["features"].sort(key=lambda item: (item["version"], item["feature"])) + _write_json_atomic(manifest_path, manifest) + + +class RequestMismatchError(Exception): + def __init__(self, expected: dict[str, Any], actual: dict[str, Any], index: int) -> None: + super().__init__(f"Request does not match interaction #{index + 1}") + self.expected = expected + self.actual = actual + self.index = index + + +class TestServer(ThreadingHTTPServer): + daemon_threads = True + + def __init__(self, address: tuple[str, int], database: RecordingDatabase, mode: str, upstream: str | None): + super().__init__(address, TestRequestHandler) + self.database = database + self.mode = mode + self.upstream = upstream.rstrip("/") if upstream else None + + +class TestRequestHandler(BaseHTTPRequestHandler): + server: TestServer + protocol_version = "HTTP/1.1" + + def do_GET(self) -> None: + self._handle() + + def do_POST(self) -> None: + self._handle() + + def do_PUT(self) -> None: + self._handle() + + def do_PATCH(self) -> None: + self._handle() + + def do_DELETE(self) -> None: + self._handle() + + def do_HEAD(self) -> None: + self._handle() + + def do_OPTIONS(self) -> None: + self._handle() + + def log_message(self, format: str, *args: Any) -> None: + print(f"{self.address_string()} - {format % args}", flush=True) + + def _handle(self) -> None: + try: + if self.path == f"{CONTROL_ROOT}/health": + self._send_json(HTTPStatus.OK, {"status": "ok", "mode": self.server.mode}) + return + if self.path == f"{CONTROL_ROOT}/sessions" and self.command == "POST": + self._start_session() + return + stop_match = re.fullmatch(rf"{re.escape(CONTROL_ROOT)}/sessions/([a-f0-9]+)/stop", self.path) + if stop_match and self.command == "POST": + result = self.server.database.stop(stop_match.group(1)) + self._send_json(HTTPStatus.OK, result) + return + self._handle_api_request() + except RequestMismatchError as error: + self._send_json( + HTTPStatus.CONFLICT, + { + "error": str(error), + "interaction": error.index + 1, + "expected": error.expected, + "actual": error.actual, + }, + error="request-mismatch", + ) + except (LookupError, ValueError) as error: + self._send_json(HTTPStatus.NOT_FOUND, {"error": str(error)}, error="recording-not-found") + except Exception as error: + self._send_json(HTTPStatus.INTERNAL_SERVER_ERROR, {"error": str(error)}, error="internal-error") + + def _start_session(self) -> None: + payload = json.loads(self._read_body().decode("utf-8")) + result = self.server.database.start( + version=payload["version"], + feature=payload["feature"], + scenario=payload["scenario"], + mode=self.server.mode, + ) + self._send_json(HTTPStatus.CREATED, result) + + def _handle_api_request(self) -> None: + body = self._read_body() + actual = _normalise_request(self.command, self.path, self.headers.get("content-type", ""), body) + session_id = self.headers.get(SESSION_HEADER) + if self.server.mode == "replay": + response = self.server.database.replay(session_id, actual) + else: + response = self._forward(body) + self.server.database.capture(session_id, actual, response) + self._send_recorded_response(response) + + def _forward(self, body: bytes) -> dict[str, Any]: + if not self.server.upstream: + raise ValueError("Capture mode requires --upstream") + target = self.server.upstream + self.path + headers = { + key: value + for key, value in self.headers.items() + if key.lower() not in HOP_BY_HOP_HEADERS | {"host", "content-length", SESSION_HEADER} + } + request = Request(target, data=body or None, headers=headers, method=self.command) + try: + remote = urlopen(request) + except HTTPError as error: + remote = error + try: + response_body = remote.read() + response_headers = { + key.lower(): value + for key, value in remote.headers.items() + if key.lower() not in HOP_BY_HOP_HEADERS | {"content-length"} + } + return { + "status": remote.status, + "reason": remote.reason, + "headers": response_headers, + "body": {"encoding": "base64", "value": base64.b64encode(response_body).decode("ascii")}, + } + finally: + remote.close() + + def _read_body(self) -> bytes: + length = int(self.headers.get("content-length", "0")) + return self.rfile.read(length) if length else b"" + + def _send_recorded_response(self, response: dict[str, Any]) -> None: + body_data = response.get("body", {}) + if body_data.get("encoding") == "base64": + body = base64.b64decode(body_data.get("value", "")) + else: + body = body_data.get("value", "").encode("utf-8") + self.send_response(response["status"], response.get("reason")) + for key, value in response.get("headers", {}).items(): + if key.lower() not in HOP_BY_HOP_HEADERS | {"content-length"} | SAFE_BROWSER_HEADERS.keys(): + self.send_header(key, value) + for key, value in SAFE_BROWSER_HEADERS.items(): + self.send_header(key, value) + self.send_header("content-length", str(len(body))) + self.end_headers() + if self.command != "HEAD": + self.wfile.write(body) + + def _send_json(self, status: HTTPStatus, value: dict[str, Any], *, error: str | None = None) -> None: + body = (json.dumps(value, indent=2, sort_keys=True) + "\n").encode("utf-8") + self.send_response(status) + self.send_header("content-type", "application/json") + if error: + self.send_header("x-openapi-test-error", error) + self.send_header("content-length", str(len(body))) + self.end_headers() + if self.command != "HEAD": + self.wfile.write(body) + + +def _normalise_request(method: str, raw_path: str, content_type: str, body: bytes) -> dict[str, Any]: + parsed = urlsplit(raw_path) + return { + "method": method.upper(), + "path": parsed.path or "/", + "query": sorted([list(pair) for pair in parse_qsl(parsed.query, keep_blank_values=True)]), + "content_type": _media_type(content_type), + "body": _normalise_body(body, content_type), + } + + +def _normalise_body(body: bytes, content_type: str) -> dict[str, Any]: + if not body: + return {"type": "empty", "value": None} + media_type = _media_type(content_type) + text = body.decode("utf-8", errors="surrogateescape") + if media_type.endswith("json"): + try: + return {"type": "json", "value": json.loads(text)} + except json.JSONDecodeError: + pass + if media_type == "multipart/form-data": + boundary_match = re.search(r"boundary=([^;]+)", content_type, re.IGNORECASE) + if boundary_match: + text = text.replace(boundary_match.group(1).strip('"'), "x" * 70) + return {"type": "text", "value": text} + + +def _media_type(value: str) -> str: + return value.partition(";")[0].strip().lower() + + +def _slug(value: str) -> str: + return re.sub(r"[^a-z0-9]+", "-", value.lower()).strip("-") or "feature" + + +def _now_iso() -> str: + return datetime.now(timezone.utc).isoformat().replace("+00:00", "Z") + + +def _read_json(path: Path) -> dict[str, Any]: + return json.loads(path.read_text(encoding="utf-8")) + + +def _write_json_atomic(path: Path, value: dict[str, Any]) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + descriptor, temporary = tempfile.mkstemp(prefix=f".{path.name}.", dir=path.parent) + try: + with os.fdopen(descriptor, "w", encoding="utf-8") as file: + json.dump(value, file, indent=2, sort_keys=True) + file.write("\n") + os.replace(temporary, path) + finally: + if os.path.exists(temporary): + os.unlink(temporary) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--database", + type=Path, + default=Path(__file__).resolve().with_name("test-server-data"), + help="Generated recording database directory (default: beside this executable).", + ) + parser.add_argument("--host", default="127.0.0.1") + parser.add_argument("--port", type=int, default=8080) + parser.add_argument("--mode", choices=("replay", "capture"), default="replay") + parser.add_argument("--upstream", help="Real API base URL; required in capture mode.") + args = parser.parse_args() + if args.mode == "capture" and not args.upstream: + parser.error("--upstream is required in capture mode") + + database = RecordingDatabase(args.database) + server = TestServer((args.host, args.port), database, args.mode, args.upstream) + host = str(server.server_address[0]) + port = int(server.server_address[1]) + print(f"Listening on http://{host}:{port} ({args.mode})", flush=True) + try: + server.serve_forever() + except KeyboardInterrupt: + pass + finally: + server.server_close() + + +if __name__ == "__main__": + main() diff --git a/test-server-data/manifest.json b/test-server-data/manifest.json new file mode 100644 index 0000000000..4753d2521e --- /dev/null +++ b/test-server-data/manifest.json @@ -0,0 +1,550 @@ +{ + "features": [ + { + "feature": "AWS Integration", + "file": "v1/aws-integration.json", + "version": "v1" + }, + { + "feature": "Authentication", + "file": "v1/authentication.json", + "version": "v1" + }, + { + "feature": "Azure Integration", + "file": "v1/azure-integration.json", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "file": "v1/dashboard-lists.json", + "version": "v1" + }, + { + "feature": "Dashboards", + "file": "v1/dashboards.json", + "version": "v1" + }, + { + "feature": "Downtimes", + "file": "v1/downtimes.json", + "version": "v1" + }, + { + "feature": "Events", + "file": "v1/events.json", + "version": "v1" + }, + { + "feature": "GCP Integration", + "file": "v1/gcp-integration.json", + "version": "v1" + }, + { + "feature": "Hosts", + "file": "v1/hosts.json", + "version": "v1" + }, + { + "feature": "IP Ranges", + "file": "v1/ip-ranges.json", + "version": "v1" + }, + { + "feature": "Logs", + "file": "v1/logs.json", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "file": "v1/logs-pipelines.json", + "version": "v1" + }, + { + "feature": "Metrics", + "file": "v1/metrics.json", + "version": "v1" + }, + { + "feature": "Monitors", + "file": "v1/monitors.json", + "version": "v1" + }, + { + "feature": "Notebooks", + "file": "v1/notebooks.json", + "version": "v1" + }, + { + "feature": "Security Monitoring", + "file": "v1/security-monitoring.json", + "version": "v1" + }, + { + "feature": "Service Checks", + "file": "v1/service-checks.json", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "file": "v1/service-level-objective-corrections.json", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "file": "v1/service-level-objectives.json", + "version": "v1" + }, + { + "feature": "Synthetics", + "file": "v1/synthetics.json", + "version": "v1" + }, + { + "feature": "Usage Metering", + "file": "v1/usage-metering.json", + "version": "v1" + }, + { + "feature": "Users", + "file": "v1/users.json", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "file": "v1/webhooks-integration.json", + "version": "v1" + }, + { + "feature": "APM Retention Filters", + "file": "v2/apm-retention-filters.json", + "version": "v2" + }, + { + "feature": "AWS Integration", + "file": "v2/aws-integration.json", + "version": "v2" + }, + { + "feature": "AWS Logs Integration", + "file": "v2/aws-logs-integration.json", + "version": "v2" + }, + { + "feature": "Action Connection", + "file": "v2/action-connection.json", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "file": "v2/actions-datastores.json", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "file": "v2/agentless-scanning.json", + "version": "v2" + }, + { + "feature": "Annotations", + "file": "v2/annotations.json", + "version": "v2" + }, + { + "feature": "App Builder", + "file": "v2/app-builder.json", + "version": "v2" + }, + { + "feature": "Application Security", + "file": "v2/application-security.json", + "version": "v2" + }, + { + "feature": "Audit", + "file": "v2/audit.json", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "file": "v2/authn-mappings.json", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "file": "v2/ci-visibility-pipelines.json", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "file": "v2/ci-visibility-tests.json", + "version": "v2" + }, + { + "feature": "CSM Agents", + "file": "v2/csm-agents.json", + "version": "v2" + }, + { + "feature": "CSM Coverage Analysis", + "file": "v2/csm-coverage-analysis.json", + "version": "v2" + }, + { + "feature": "CSM Threats", + "file": "v2/csm-threats.json", + "version": "v2" + }, + { + "feature": "Case Management", + "file": "v2/case-management.json", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "file": "v2/case-management-attribute.json", + "version": "v2" + }, + { + "feature": "Case Management Type", + "file": "v2/case-management-type.json", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "file": "v2/cloud-cost-management.json", + "version": "v2" + }, + { + "feature": "Cloud Network Monitoring", + "file": "v2/cloud-network-monitoring.json", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "file": "v2/cloudflare-integration.json", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "file": "v2/confluent-cloud.json", + "version": "v2" + }, + { + "feature": "Container Images", + "file": "v2/container-images.json", + "version": "v2" + }, + { + "feature": "Containers", + "file": "v2/containers.json", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "file": "v2/dora-metrics.json", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "file": "v2/dashboard-lists.json", + "version": "v2" + }, + { + "feature": "Dashboards", + "file": "v2/dashboards.json", + "version": "v2" + }, + { + "feature": "Data Deletion", + "file": "v2/data-deletion.json", + "version": "v2" + }, + { + "feature": "Datasets", + "file": "v2/datasets.json", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "file": "v2/deployment-gates.json", + "version": "v2" + }, + { + "feature": "Domain Allowlist", + "file": "v2/domain-allowlist.json", + "version": "v2" + }, + { + "feature": "Downtimes", + "file": "v2/downtimes.json", + "version": "v2" + }, + { + "feature": "Error Tracking", + "file": "v2/error-tracking.json", + "version": "v2" + }, + { + "feature": "Events", + "file": "v2/events.json", + "version": "v2" + }, + { + "feature": "Fastly Integration", + "file": "v2/fastly-integration.json", + "version": "v2" + }, + { + "feature": "Feature Flags", + "file": "v2/feature-flags.json", + "version": "v2" + }, + { + "feature": "Forms", + "file": "v2/forms.json", + "version": "v2" + }, + { + "feature": "GCP Integration", + "file": "v2/gcp-integration.json", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "file": "v2/google-chat-integration.json", + "version": "v2" + }, + { + "feature": "IP Allowlist", + "file": "v2/ip-allowlist.json", + "version": "v2" + }, + { + "feature": "Incidents", + "file": "v2/incidents.json", + "version": "v2" + }, + { + "feature": "Integrations", + "file": "v2/integrations.json", + "version": "v2" + }, + { + "feature": "Key Management", + "file": "v2/key-management.json", + "version": "v2" + }, + { + "feature": "LLM Observability", + "file": "v2/llm-observability.json", + "version": "v2" + }, + { + "feature": "Logs", + "file": "v2/logs.json", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "file": "v2/logs-custom-destinations.json", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "file": "v2/logs-metrics.json", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "file": "v2/logs-restriction-queries.json", + "version": "v2" + }, + { + "feature": "Metrics", + "file": "v2/metrics.json", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "file": "v2/microsoft-teams-integration.json", + "version": "v2" + }, + { + "feature": "Model Lab API", + "file": "v2/model-lab-api.json", + "version": "v2" + }, + { + "feature": "Monitors", + "file": "v2/monitors.json", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "file": "v2/network-device-monitoring.json", + "version": "v2" + }, + { + "feature": "OAuth2 Client Public", + "file": "v2/oauth2-client-public.json", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "file": "v2/observability-pipelines.json", + "version": "v2" + }, + { + "feature": "Okta Integration", + "file": "v2/okta-integration.json", + "version": "v2" + }, + { + "feature": "On-Call", + "file": "v2/on-call.json", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "file": "v2/opsgenie-integration.json", + "version": "v2" + }, + { + "feature": "Org Connections", + "file": "v2/org-connections.json", + "version": "v2" + }, + { + "feature": "Organizations", + "file": "v2/organizations.json", + "version": "v2" + }, + { + "feature": "Powerpack", + "file": "v2/powerpack.json", + "version": "v2" + }, + { + "feature": "Processes", + "file": "v2/processes.json", + "version": "v2" + }, + { + "feature": "RUM", + "file": "v2/rum.json", + "version": "v2" + }, + { + "feature": "RUM Remote Config", + "file": "v2/rum-remote-config.json", + "version": "v2" + }, + { + "feature": "Reference Tables", + "file": "v2/reference-tables.json", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "file": "v2/restriction-policies.json", + "version": "v2" + }, + { + "feature": "Roles", + "file": "v2/roles.json", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "file": "v2/rum-metrics.json", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "file": "v2/rum-retention-filters.json", + "version": "v2" + }, + { + "feature": "Scorecards", + "file": "v2/scorecards.json", + "version": "v2" + }, + { + "feature": "Seats", + "file": "v2/seats.json", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "file": "v2/security-monitoring.json", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "file": "v2/sensitive-data-scanner.json", + "version": "v2" + }, + { + "feature": "Service Accounts", + "file": "v2/service-accounts.json", + "version": "v2" + }, + { + "feature": "Service Definition", + "file": "v2/service-definition.json", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "file": "v2/service-level-objectives.json", + "version": "v2" + }, + { + "feature": "Software Catalog", + "file": "v2/software-catalog.json", + "version": "v2" + }, + { + "feature": "Spans", + "file": "v2/spans.json", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "file": "v2/spans-metrics.json", + "version": "v2" + }, + { + "feature": "Status Pages", + "file": "v2/status-pages.json", + "version": "v2" + }, + { + "feature": "Synthetics", + "file": "v2/synthetics.json", + "version": "v2" + }, + { + "feature": "Teams", + "file": "v2/teams.json", + "version": "v2" + }, + { + "feature": "Usage Metering", + "file": "v2/usage-metering.json", + "version": "v2" + }, + { + "feature": "Users", + "file": "v2/users.json", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "file": "v2/workflow-automation.json", + "version": "v2" + } + ], + "schema_version": 1 +} diff --git a/test-server-data/v1/authentication.json b/test-server-data/v1/authentication.json new file mode 100644 index 0000000000..0cf883a8a4 --- /dev/null +++ b/test-server-data/v1/authentication.json @@ -0,0 +1,69 @@ +{ + "feature": "Authentication", + "recordings": [ + { + "feature": "Authentication", + "frozen_at": "2022-01-06T00:50:20.672Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"API key required\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Forbidden", + "status": 403 + } + } + ], + "scenario": "Validate API key returns \"Forbidden\" response", + "version": "v1" + }, + { + "feature": "Authentication", + "frozen_at": "2022-01-06T00:50:20.920Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"valid\":true}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate API key returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/aws-integration.json b/test-server-data/v1/aws-integration.json new file mode 100644 index 0000000000..b21bad7652 --- /dev/null +++ b/test-server-data/v1/aws-integration.json @@ -0,0 +1,312 @@ +{ + "feature": "AWS Integration", + "recordings": [ + { + "feature": "AWS Integration", + "frozen_at": "2024-04-05T18:30:30.891Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "account_id": "171234183000", + "account_specific_namespace_rules": { + "auto_scaling": false + }, + "cspm_resource_collection_enabled": true, + "excluded_regions": [ + "us-east-1", + "us-west-2" + ], + "extended_resource_collection_enabled": true, + "filter_tags": [ + "$KEY:$VALUE" + ], + "host_tags": [ + "$KEY:$VALUE" + ], + "metrics_collection_enabled": false, + "role_name": "DatadogAWSIntegrationRole" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"external_id\":\"acb8f6b8a844443dbb726d07dcb1a870\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "account_id": "171234183000", + "role_name": "DatadogAWSIntegrationRole" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an AWS integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-04-05T18:30:32.594Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "account_id": "171234183200", + "account_specific_namespace_rules": { + "auto_scaling": false + }, + "cspm_resource_collection_enabled": true, + "excluded_regions": [ + "us-east-1", + "us-west-2" + ], + "extended_resource_collection_enabled": true, + "filter_tags": [ + "$KEY:$VALUE" + ], + "host_tags": [ + "$KEY:$VALUE" + ], + "metrics_collection_enabled": false, + "role_name": "DatadogAWSIntegrationRole" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"external_id\":\"6aa1bf95e5dc4c9985593e94169bd2f6\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "account_id": "171234183200", + "role_name": "DatadogAWSIntegrationRole" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "account_id": "171234183200", + "role_name": "DatadogAWSIntegrationRole" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"AWS account 171234183200 does not exist in integration\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete an AWS integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-04-05T18:30:34.377Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "account_id": "171234183400", + "account_specific_namespace_rules": { + "auto_scaling": false + }, + "cspm_resource_collection_enabled": true, + "excluded_regions": [ + "us-east-1", + "us-west-2" + ], + "extended_resource_collection_enabled": true, + "filter_tags": [ + "$KEY:$VALUE" + ], + "host_tags": [ + "$KEY:$VALUE" + ], + "metrics_collection_enabled": false, + "role_name": "DatadogAWSIntegrationRole" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"external_id\":\"c8ceedec95fc472fb6156f3104d425c9\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "account_id": "171234183400", + "account_specific_namespace_rules": { + "auto_scaling": false + }, + "cspm_resource_collection_enabled": false, + "excluded_regions": [ + "us-east-1", + "us-west-2" + ], + "extended_resource_collection_enabled": true, + "filter_tags": [ + "$KEY:$VALUE" + ], + "host_tags": [ + "$KEY:$VALUE" + ], + "metrics_collection_enabled": true, + "role_name": "DatadogAWSIntegrationRole" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/integration/aws", + "query": [ + [ + "account_id", + "171234183400" + ], + [ + "role_name", + "DatadogAWSIntegrationRole" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "account_id": "171234183400", + "role_name": "DatadogAWSIntegrationRole" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update an AWS integration returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/azure-integration.json b/test-server-data/v1/azure-integration.json new file mode 100644 index 0000000000..56bdb2fa27 --- /dev/null +++ b/test-server-data/v1/azure-integration.json @@ -0,0 +1,320 @@ +{ + "feature": "Azure Integration", + "recordings": [ + { + "feature": "Azure Integration", + "frozen_at": "2024-07-25T18:47:35.049Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "app_service_plan_filters": "key:value,filter:example", + "automute": true, + "client_id": "17219332-0000-0000-0000-172193325500", + "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", + "container_app_filters": "key:value,filter:example", + "cspm_enabled": true, + "custom_metrics_enabled": true, + "errors": [ + "*" + ], + "host_filters": "key:value,filter:example", + "new_client_id": "17219332-0000-0000-0000-172193325500", + "new_tenant_name": "17219332-0000-0000-0000-172193325500", + "resource_collection_enabled": true, + "tenant_name": "17219332-0000-0000-0000-172193325500" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "client_id": "17219332-0000-0000-0000-172193325500", + "tenant_name": "17219332-0000-0000-0000-172193325500" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an Azure integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Azure Integration", + "frozen_at": "2026-05-04T13:56:51.846Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "app_service_plan_filters": "key:value,filter:example", + "automute": true, + "client_id": "17779030-0000-0000-0000-177790301100", + "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", + "container_app_filters": "key:value,filter:example", + "cspm_enabled": true, + "custom_metrics_enabled": true, + "errors": [ + "*" + ], + "host_filters": "key:value,filter:example", + "metrics_enabled": true, + "metrics_enabled_default": true, + "new_client_id": "17779030-0000-0000-0000-177790301100", + "new_tenant_name": "17779030-0000-0000-0000-177790301100", + "resource_collection_enabled": true, + "resource_provider_configs": [ + { + "metrics_enabled": false, + "namespace": "Microsoft.Compute" + }, + { + "metrics_enabled": false, + "namespace": "Microsoft.Web" + } + ], + "secretless_auth_enabled": false, + "tenant_name": "17779030-0000-0000-0000-177790301100", + "usage_metrics_enabled": true + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "client_id": "17779030-0000-0000-0000-177790301100", + "tenant_name": "17779030-0000-0000-0000-177790301100" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "client_id": "17779030-0000-0000-0000-177790301100", + "tenant_name": "17779030-0000-0000-0000-177790301100" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Delete an Azure integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Azure Integration", + "frozen_at": "2026-05-04T13:56:52.686Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "app_service_plan_filters": "key:value,filter:example", + "automute": true, + "client_id": "17779030-0000-0000-0000-177790301200", + "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", + "container_app_filters": "key:value,filter:example", + "cspm_enabled": true, + "custom_metrics_enabled": true, + "errors": [ + "*" + ], + "host_filters": "key:value,filter:example", + "metrics_enabled": true, + "metrics_enabled_default": true, + "new_client_id": "17779030-0000-0000-0000-177790301200", + "new_tenant_name": "17779030-0000-0000-0000-177790301200", + "resource_collection_enabled": true, + "resource_provider_configs": [ + { + "metrics_enabled": false, + "namespace": "Microsoft.Compute" + }, + { + "metrics_enabled": false, + "namespace": "Microsoft.Web" + } + ], + "secretless_auth_enabled": false, + "tenant_name": "17779030-0000-0000-0000-177790301200", + "usage_metrics_enabled": true + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "app_service_plan_filters": "key:value,filter:example", + "automute": true, + "client_id": "17779030-0000-0000-0000-177790301200", + "client_secret": "TestingRh2nx664kUy5dIApvM54T4AtO", + "container_app_filters": "key:value,filter:example", + "cspm_enabled": true, + "custom_metrics_enabled": true, + "errors": [ + "*" + ], + "host_filters": "key:value,filter:example", + "new_client_id": "17779030-0000-0000-0000-177790301200", + "new_tenant_name": "17779030-0000-0000-0000-177790301200", + "resource_collection_enabled": true, + "secretless_auth_enabled": true, + "tenant_name": "17779030-0000-0000-0000-177790301200" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/integration/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "client_id": "17779030-0000-0000-0000-177790301200", + "tenant_name": "17779030-0000-0000-0000-177790301200" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update an Azure integration returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/dashboard-lists.json b/test-server-data/v1/dashboard-lists.json new file mode 100644 index 0000000000..52e5cb87a1 --- /dev/null +++ b/test-server-data/v1/dashboard-lists.json @@ -0,0 +1,476 @@ +{ + "feature": "Dashboard Lists", + "recordings": [ + { + "feature": "Dashboard Lists", + "frozen_at": "2022-01-06T00:50:21.238Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Create_a_dashboard_list_returns_OK_response-1641430221" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Create_a_dashboard_list_returns_OK_response-1641430221\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-01-06T00:50:21.382205+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-01-06T00:50:21.382231+00:00\",\"id\":269879}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/269879", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":269879}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a dashboard list returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-01-06T00:50:21.689Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Manual Dashboard List with id 0 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a dashboard list returns \"Not Found\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-01-06T00:50:21.880Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Delete_a_dashboard_list_returns_OK_response-1641430221" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Delete_a_dashboard_list_returns_OK_response-1641430221\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-01-06T00:50:22.024122+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-01-06T00:50:22.024147+00:00\",\"id\":269880}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/269880", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":269880}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/269880", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Manual Dashboard List with id 269880 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a dashboard list returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-01-06T00:50:22.463Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard/lists/manual/0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Manual Dashboard List with id 0 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a dashboard list returns \"Not Found\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-01-06T00:50:22.654Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_a_dashboard_list_returns_OK_response-1641430222" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Get_a_dashboard_list_returns_OK_response-1641430222\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-01-06T00:50:22.806263+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-01-06T00:50:22.806287+00:00\",\"id\":269881}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard/lists/manual/269881", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Get_a_dashboard_list_returns_OK_response-1641430222\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-01-06T00:50:22.806263+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-01-06T00:50:22.806287+00:00\",\"id\":269881}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/269881", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":269881}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a dashboard list returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2023-02-16T21:10:17.049Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_all_dashboard_lists_returns_OK_response-1676581817" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\"},\"created\":\"2023-02-16T21:10:17.185865+00:00\",\"dashboards\":null,\"dashboard_count\":0,\"id\":364491,\"is_favorite\":false,\"modified\":\"2023-02-16T21:10:17.185872+00:00\",\"name\":\"Test-Get_all_dashboard_lists_returns_OK_response-1676581817\",\"type\":\"manual_dashboard_list\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"dashboard_lists\":[{\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\"},\"created\":\"2023-02-16T21:10:17.185865+00:00\",\"dashboards\":null,\"dashboard_count\":0,\"id\":364491,\"is_favorite\":false,\"modified\":\"2023-02-16T21:10:17.185872+00:00\",\"name\":\"Test-Get_all_dashboard_lists_returns_OK_response-1676581817\",\"type\":\"manual_dashboard_list\"},{\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\"},\"created\":\"2022-12-09T15:04:28.806069+00:00\",\"dashboards\":null,\"dashboard_count\":1,\"id\":348463,\"is_favorite\":false,\"modified\":\"2022-12-09T15:04:29.985883+00:00\",\"name\":\"Test-Go-TestDashboardListItemCRUD-1670598268\",\"type\":\"manual_dashboard_list\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/364491", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":364491}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all dashboard lists returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-01-06T00:50:23.525Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Not found" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/dashboard/lists/manual/0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Manual Dashboard List with id 0 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a dashboard list returns \"Not Found\" response", + "version": "v1" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-01-06T00:50:23.727Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Update_a_dashboard_list_returns_OK_response-1641430223" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Update_a_dashboard_list_returns_OK_response-1641430223\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-01-06T00:50:23.876774+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-01-06T00:50:23.876799+00:00\",\"id\":269882}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "name": "updated Test-Update_a_dashboard_list_returns_OK_response-1641430223" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/dashboard/lists/manual/269882", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"updated Test-Update_a_dashboard_list_returns_OK_response-1641430223\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-01-06T00:50:23.876774+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-01-06T00:50:24.060886+00:00\",\"id\":269882}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/269882", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":269882}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a dashboard list returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/dashboards.json b/test-server-data/v1/dashboards.json new file mode 100644 index 0000000000..db1ac17166 --- /dev/null +++ b/test-server-data/v1/dashboards.json @@ -0,0 +1,13807 @@ +{ + "feature": "Dashboards", + "recordings": [ + { + "feature": "Dashboards", + "frozen_at": "2024-09-24T19:19:31.807Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Clients_deserialize_a_dashboard_with_a_empty_time_object-1727205571", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "bars", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "cloud_cost", + "name": "query1", + "query": "sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "time": {}, + "title": "Example Cloud Cost Query", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"han-5zg-c32\",\"title\":\"Test-Clients_deserialize_a_dashboard_with_a_empty_time_object-1727205571\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/han-5zg-c32/test-clientsdeserializeadashboardwithaemptytimeobject-1727205571\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"bars\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"data_source\":\"cloud_cost\",\"name\":\"query1\",\"query\":\"sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)\"}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"time\":{},\"title\":\"Example Cloud Cost Query\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"timeseries\"},\"id\":4274057372149908}],\"notify_list\":null,\"created_at\":\"2024-09-24T19:19:32.071328+00:00\",\"modified_at\":\"2024-09-24T19:19:32.071328+00:00\",\"experience_type\":\"default\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/han-5zg-c32", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"han-5zg-c32\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Clients deserialize a dashboard with a empty time object", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:26.867Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "ordered", + "title": "Test-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_APM_Stats-1731699146", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "apm_resource_stats", + "env": "staging", + "group_by": [ + "resource_name" + ], + "name": "query1", + "operation_name": "universal.http.client", + "primary_tag_name": "datacenter", + "primary_tag_value": "*", + "service": "azure-bill-import", + "stat": "latency_distribution" + }, + "request_type": "histogram", + "style": { + "palette": "dog_classic" + } + } + ], + "show_legend": false, + "title": "APM Stats - Request latency HOP", + "title_align": "left", + "title_size": "16", + "type": "distribution", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 2, + "width": 4, + "x": 8, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"cp9-wz6-rpj\",\"title\":\"Test-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_APM_Stats-1731699146\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/cp9-wz6-rpj/test-createadistributionwidgetusingahistogramrequestcontainingaformulasandfuncti\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"data_source\":\"apm_resource_stats\",\"env\":\"staging\",\"group_by\":[\"resource_name\"],\"name\":\"query1\",\"operation_name\":\"universal.http.client\",\"primary_tag_name\":\"datacenter\",\"primary_tag_value\":\"*\",\"service\":\"azure-bill-import\",\"stat\":\"latency_distribution\"},\"request_type\":\"histogram\",\"style\":{\"palette\":\"dog_classic\"}}],\"show_legend\":false,\"title\":\"APM Stats - Request latency HOP\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"distribution\",\"xaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"},\"yaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"}},\"layout\":{\"height\":2,\"width\":4,\"x\":8,\"y\":0},\"id\":4972373445820650}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:27.081537+00:00\",\"modified_at\":\"2024-11-15T19:32:27.081537+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/cp9-wz6-rpj", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"cp9-wz6-rpj\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a distribution widget using a histogram request containing a formulas and functions APM Stats query", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:30:42.729Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "Test-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_events_qu-1772451042", + "layout_type": "ordered", + "title": "Test-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_events_qu-1772451042", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "compute": { + "aggregation": "min", + "metric": "@duration" + }, + "data_source": "events", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + }, + "request_type": "histogram" + } + ], + "show_legend": false, + "title": "Events Platform - Request latency HOP", + "title_align": "left", + "title_size": "16", + "type": "distribution", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"gz8-vqv-w54\",\"title\":\"Test-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_events_qu-1772451042\",\"description\":\"Test-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_events_qu-1772451042\",\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/gz8-vqv-w54/test-createadistributionwidgetusingahistogramrequestcontainingaformulasandfuncti\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"compute\":{\"aggregation\":\"min\",\"metric\":\"@duration\"},\"data_source\":\"events\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"\"}},\"request_type\":\"histogram\"}],\"show_legend\":false,\"title\":\"Events Platform - Request latency HOP\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"distribution\",\"xaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"},\"yaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"}},\"layout\":{\"height\":2,\"width\":4,\"x\":0,\"y\":0},\"id\":4552786651040889}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:30:42.857797+00:00\",\"modified_at\":\"2026-03-02T11:30:42.857797+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/gz8-vqv-w54", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"gz8-vqv-w54\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a distribution widget using a histogram request containing a formulas and functions events query", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:27.923Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_metrics_q-1731699147", + "widgets": [ + { + "definition": { + "custom_links": [ + { + "label": "Example", + "link": "https://example.org/" + } + ], + "requests": [ + { + "query": { + "data_source": "metrics", + "name": "query1", + "query": "histogram:trace.Load{*}" + }, + "request_type": "histogram", + "style": { + "palette": "dog_classic" + } + } + ], + "show_legend": false, + "title": "Metrics HOP", + "title_align": "left", + "title_size": "16", + "type": "distribution", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ydy-5hn-vib\",\"title\":\"Test-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_metrics_q-1731699147\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/ydy-5hn-vib/test-createadistributionwidgetusingahistogramrequestcontainingaformulasandfuncti\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"custom_links\":[{\"label\":\"Example\",\"link\":\"https://example.org/\"}],\"requests\":[{\"query\":{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"histogram:trace.Load{*}\"},\"request_type\":\"histogram\",\"style\":{\"palette\":\"dog_classic\"}}],\"show_legend\":false,\"title\":\"Metrics HOP\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"distribution\",\"xaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"},\"yaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"}},\"layout\":{\"height\":2,\"width\":4,\"x\":0,\"y\":0},\"id\":4914950205969851}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:28.073069+00:00\",\"modified_at\":\"2024-11-15T19:32:28.073069+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ydy-5hn-vib", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ydy-5hn-vib\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a distribution widget using a histogram request containing a formulas and functions metrics query", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:28.361Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "Test-Create_a_geomap_widget_using_an_event_list_request-1731699148", + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed", + "tags": [], + "template_variables": [], + "title": "Test-Create_a_geomap_widget_using_an_event_list_request-1731699148", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "@network.client.geoip.location.latitude", + "width": "auto" + }, + { + "field": "@network.client.geoip.location.longitude", + "width": "auto" + }, + { + "field": "@network.client.geoip.country.iso_code", + "width": "auto" + }, + { + "field": "@network.client.geoip.subdivision.name", + "width": "auto" + }, + { + "field": "classic", + "width": "auto" + }, + { + "field": "", + "width": "auto" + } + ], + "query": { + "data_source": "logs_stream", + "indexes": [], + "query_string": "" + }, + "response_format": "event_list" + } + ], + "style": { + "palette": "hostmap_blues", + "palette_flip": false + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "geomap", + "view": { + "focus": "WORLD" + } + }, + "layout": { + "height": 6, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"85y-teg-6gs\",\"title\":\"Test-Create_a_geomap_widget_using_an_event_list_request-1731699148\",\"description\":\"Test-Create_a_geomap_widget_using_an_event_list_request-1731699148\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/85y-teg-6gs/test-createageomapwidgetusinganeventlistrequest-1731699148\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"@network.client.geoip.location.latitude\",\"width\":\"auto\"},{\"field\":\"@network.client.geoip.location.longitude\",\"width\":\"auto\"},{\"field\":\"@network.client.geoip.country.iso_code\",\"width\":\"auto\"},{\"field\":\"@network.client.geoip.subdivision.name\",\"width\":\"auto\"},{\"field\":\"classic\",\"width\":\"auto\"},{\"field\":\"\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"logs_stream\",\"indexes\":[],\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"style\":{\"palette\":\"hostmap_blues\",\"palette_flip\":false},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"geomap\",\"view\":{\"focus\":\"WORLD\"}},\"layout\":{\"height\":6,\"width\":12,\"x\":0,\"y\":0},\"id\":303965122186527}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:28.542191+00:00\",\"modified_at\":\"2024-11-15T19:32:28.542191+00:00\",\"reflow_type\":\"fixed\",\"tags\":[],\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/85y-teg-6gs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"85y-teg-6gs\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a geomap widget using an event_list request", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:30:56.185Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "Test-Create_a_geomap_widget_with_conditional_formats_and_text_formats-1772451056", + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed", + "tags": [], + "template_variables": [], + "title": "Test-Create_a_geomap_widget_with_conditional_formats_and_text_formats-1772451056", + "widgets": [ + { + "definition": { + "requests": [ + { + "conditional_formats": [ + { + "comparator": ">", + "palette": "white_on_green", + "value": 1000 + } + ], + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "@type:session" + } + } + ], + "response_format": "scalar", + "sort": { + "count": 250, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + }, + { + "columns": [ + { + "field": "@network.client.geoip.location.latitude", + "width": "auto" + }, + { + "field": "@network.client.geoip.location.longitude", + "width": "auto" + }, + { + "field": "@network.client.geoip.country.iso_code", + "width": "auto" + }, + { + "field": "@network.client.geoip.subdivision.name", + "width": "auto" + } + ], + "query": { + "data_source": "logs_stream", + "indexes": [], + "query_string": "", + "storage": "hot" + }, + "response_format": "event_list", + "style": { + "color_by": "status" + }, + "text_formats": [ + { + "match": { + "type": "is", + "value": "error" + }, + "palette": "white_on_red" + } + ] + } + ], + "style": { + "palette": "hostmap_blues", + "palette_flip": false + }, + "title": "Log Count by Service and Source", + "type": "geomap", + "view": { + "focus": "NORTH_AMERICA" + } + }, + "layout": { + "height": 6, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"bgt-jqb-knw\",\"title\":\"Test-Create_a_geomap_widget_with_conditional_formats_and_text_formats-1772451056\",\"description\":\"Test-Create_a_geomap_widget_with_conditional_formats_and_text_formats-1772451056\",\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/bgt-jqb-knw/test-createageomapwidgetwithconditionalformatsandtextformats-1772451056\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"conditional_formats\":[{\"comparator\":\">\",\"palette\":\"white_on_green\",\"value\":1000}],\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"rum\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"@type:session\"}}],\"response_format\":\"scalar\",\"sort\":{\"count\":250,\"order_by\":[{\"index\":0,\"order\":\"desc\",\"type\":\"formula\"}]}},{\"columns\":[{\"field\":\"@network.client.geoip.location.latitude\",\"width\":\"auto\"},{\"field\":\"@network.client.geoip.location.longitude\",\"width\":\"auto\"},{\"field\":\"@network.client.geoip.country.iso_code\",\"width\":\"auto\"},{\"field\":\"@network.client.geoip.subdivision.name\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"logs_stream\",\"indexes\":[],\"query_string\":\"\",\"storage\":\"hot\"},\"response_format\":\"event_list\",\"style\":{\"color_by\":\"status\"},\"text_formats\":[{\"match\":{\"type\":\"is\",\"value\":\"error\"},\"palette\":\"white_on_red\"}]}],\"style\":{\"palette\":\"hostmap_blues\",\"palette_flip\":false},\"title\":\"Log Count by Service and Source\",\"type\":\"geomap\",\"view\":{\"focus\":\"NORTH_AMERICA\"}},\"layout\":{\"height\":6,\"width\":12,\"x\":0,\"y\":0},\"id\":5839657916661505}],\"notify_list\":[],\"created_at\":\"2026-03-02T11:30:56.347840+00:00\",\"modified_at\":\"2026-03-02T11:30:56.347840+00:00\",\"reflow_type\":\"fixed\",\"tags\":[],\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/bgt-jqb-knw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"bgt-jqb-knw\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a geomap widget with conditional formats and text formats", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:29.001Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_returns_OK_response-1731699149 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"8a5-8x9-spj\",\"title\":\"Test-Create_a_new_dashboard_returns_OK_response-1731699149 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/8a5-8x9-spj/test-createanewdashboardreturnsokresponse-1731699149-with-profile-metrics-query\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":4674703282750231}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:29.171735+00:00\",\"modified_at\":\"2024-11-15T19:32:29.171735+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/8a5-8x9-spj", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"8a5-8x9-spj\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-12-15T21:25:35.069Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_a_bar_chart_widget_with_stacked_type_and_no_legend_specified-1765833935", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "name": "service", + "order": "asc", + "type": "group" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "bar_chart" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"6yv-ayr-nyv\",\"title\":\"Test-Create_a_new_dashboard_with_a_bar_chart_widget_with_stacked_type_and_no_legend_specified-1765833935\",\"description\":\"\",\"author_handle\":\"jessica.sylvester@datadoghq.com\",\"author_name\":\"Jessica Sylvester\",\"layout_type\":\"free\",\"url\":\"/dashboard/6yv-ayr-nyv/test-createanewdashboardwithabarchartwidgetwithstackedtypeandnolegendspecified-1\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {service}\"}],\"response_format\":\"scalar\",\"sort\":{\"count\":10,\"order_by\":[{\"name\":\"service\",\"order\":\"asc\",\"type\":\"group\"}]}}],\"style\":{\"display\":{\"type\":\"stacked\"},\"palette\":\"dog_classic\",\"scaling\":\"relative\"},\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"bar_chart\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":747608743840054}],\"notify_list\":[],\"created_at\":\"2025-12-15T21:25:35.211465+00:00\",\"modified_at\":\"2025-12-15T21:25:35.211465+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/6yv-ayr-nyv", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"6yv-ayr-nyv\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a bar_chart widget with stacked type and no legend specified", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:29.446Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Create_a_new_dashboard_with_a_change_widget_using_formulas_and_functions_slo_query-1731699149", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"425d71bc3445599f92d7c3848731d220\",\"name\":\"Test-Create_a_new_dashboard_with_a_change_widget_using_formulas_and_functions_slo_query-1731699149\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1731699149,\"modified_at\":1731699149}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_change_widget_using_formulas_and_functions_slo_query-1731699149", + "widgets": [ + { + "definition": { + "requests": [ + { + "change_type": "absolute", + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "increase_good": true, + "order_by": "change", + "order_dir": "asc", + "queries": [ + { + "additional_query_filters": "*", + "data_source": "slo", + "group_mode": "overall", + "measure": "slo_status", + "name": "query1", + "slo_id": "425d71bc3445599f92d7c3848731d220", + "slo_query_type": "metric" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "change" + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"49z-5ib-fcx\",\"title\":\"Test-Create_a_new_dashboard_with_a_change_widget_using_formulas_and_functions_slo_query-1731699149\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/49z-5ib-fcx/test-createanewdashboardwithachangewidgetusingformulasandfunctionssloquery-17316\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"change_type\":\"absolute\",\"formulas\":[{\"formula\":\"hour_before(query1)\"},{\"formula\":\"query1\"}],\"increase_good\":true,\"order_by\":\"change\",\"order_dir\":\"asc\",\"queries\":[{\"additional_query_filters\":\"*\",\"data_source\":\"slo\",\"group_mode\":\"overall\",\"measure\":\"slo_status\",\"name\":\"query1\",\"slo_id\":\"425d71bc3445599f92d7c3848731d220\",\"slo_query_type\":\"metric\"}],\"response_format\":\"scalar\"}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"change\"},\"layout\":{\"height\":2,\"width\":4,\"x\":0,\"y\":0},\"id\":6718329595147214}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:29.774299+00:00\",\"modified_at\":\"2024-11-15T19:32:29.774299+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/49z-5ib-fcx", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"49z-5ib-fcx\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/425d71bc3445599f92d7c3848731d220", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"425d71bc3445599f92d7c3848731d220\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a change widget using formulas and functions slo query", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:31:04.295Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_formulas_and_functions_change_widget-1772451064", + "widgets": [ + { + "definition": { + "requests": [ + { + "change_type": "absolute", + "compare_to": "hour_before", + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "increase_good": true, + "order_by": "change", + "order_dir": "desc", + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "change" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"tnn-avt-a8u\",\"title\":\"Test-Create_a_new_dashboard_with_a_formulas_and_functions_change_widget-1772451064\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/tnn-avt-a8u/test-createanewdashboardwithaformulasandfunctionschangewidget-1772451064\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"change_type\":\"absolute\",\"compare_to\":\"hour_before\",\"formulas\":[{\"formula\":\"hour_before(query1)\"},{\"formula\":\"query1\"}],\"increase_good\":true,\"order_by\":\"change\",\"order_dir\":\"desc\",\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"logs\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"\"}}],\"response_format\":\"scalar\"}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"change\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":8404351906051529}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:31:04.419166+00:00\",\"modified_at\":\"2026-03-02T11:31:04.419166+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/tnn-avt-a8u", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"tnn-avt-a8u\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a formulas and functions change widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:31:11.876Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_formulas_and_functions_treemap_widget-1772451071", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar" + } + ], + "title": "", + "type": "treemap" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ci5-4gc-khj\",\"title\":\"Test-Create_a_new_dashboard_with_a_formulas_and_functions_treemap_widget-1772451071\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/ci5-4gc-khj/test-createanewdashboardwithaformulasandfunctionstreemapwidget-1772451071\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"hour_before(query1)\"},{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"logs\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"\"}}],\"response_format\":\"scalar\"}],\"title\":\"\",\"type\":\"treemap\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":3482978988980758}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:31:12.018143+00:00\",\"modified_at\":\"2026-03-02T11:31:12.018143+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ci5-4gc-khj", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ci5-4gc-khj\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a formulas and functions treemap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-06-22T17:48:02.651Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "default_timeframe": { + "type": "live", + "unit": "hour", + "value": 4 + }, + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_live_default_timeframe_returns_OK_response-1782150482", + "widgets": [ + { + "definition": { + "background_color": "white", + "content": "test", + "font_size": "14", + "show_tick": false, + "text_align": "left", + "tick_edge": "left", + "tick_pos": "50%", + "type": "note" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"3v2-z74-apr\",\"title\":\"Test-Create_a_new_dashboard_with_a_live_default_timeframe_returns_OK_response-1782150482\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/3v2-z74-apr/test-createanewdashboardwithalivedefaulttimeframereturnsokresponse-1782150482\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"background_color\":\"white\",\"content\":\"test\",\"font_size\":\"14\",\"show_tick\":false,\"text_align\":\"left\",\"tick_edge\":\"left\",\"tick_pos\":\"50%\",\"type\":\"note\"},\"id\":2716227217953845}],\"notify_list\":null,\"created_at\":\"2026-06-22T17:48:02.860491+00:00\",\"modified_at\":\"2026-06-22T17:48:02.860491+00:00\",\"default_timeframe\":{\"type\":\"live\",\"unit\":\"hour\",\"value\":4},\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/3v2-z74-apr", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"3v2-z74-apr\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a live default_timeframe returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:31.326Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_query_value_widget_using_the_percentile_aggregator-1731699151 with QVW Percentile Aggregator", + "widgets": [ + { + "definition": { + "autoscale": true, + "precision": 2, + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "percentile", + "data_source": "metrics", + "name": "query1", + "query": "p90:dist.dd.dogweb.latency{*}" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "layout": { + "height": 2, + "width": 2, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"u3x-4y8-hiy\",\"title\":\"Test-Create_a_new_dashboard_with_a_query_value_widget_using_the_percentile_aggregator-1731699151 with QVW Percentile Aggregator\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/u3x-4y8-hiy/test-createanewdashboardwithaqueryvaluewidgetusingthepercentileaggregator-173169\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"autoscale\":true,\"precision\":2,\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"percentile\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"p90:dist.dd.dogweb.latency{*}\"}],\"response_format\":\"scalar\"}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_value\"},\"layout\":{\"height\":2,\"width\":2,\"x\":0,\"y\":0},\"id\":662978730586709}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:31.492216+00:00\",\"modified_at\":\"2024-11-15T19:32:31.492216+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/u3x-4y8-hiy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"u3x-4y8-hiy\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a query value widget using the percentile aggregator", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:31.758Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_query_value_widget_using_timeseries_background-1731699151 with QVW Timeseries Background", + "widgets": [ + { + "definition": { + "autoscale": true, + "precision": 2, + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "percentile", + "data_source": "metrics", + "name": "query1", + "query": "sum:my.cool.count.metric{*}" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "timeseries_background": { + "type": "area", + "yaxis": { + "include_zero": true + } + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "layout": { + "height": 2, + "width": 2, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"t7h-dt9-gt6\",\"title\":\"Test-Create_a_new_dashboard_with_a_query_value_widget_using_timeseries_background-1731699151 with QVW Timeseries Background\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/t7h-dt9-gt6/test-createanewdashboardwithaqueryvaluewidgetusingtimeseriesbackground-173169915\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"autoscale\":true,\"precision\":2,\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"percentile\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"sum:my.cool.count.metric{*}\"}],\"response_format\":\"scalar\"}],\"time\":{},\"timeseries_background\":{\"type\":\"area\",\"yaxis\":{\"include_zero\":true}},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_value\"},\"layout\":{\"height\":2,\"width\":2,\"x\":0,\"y\":0},\"id\":4861182812642966}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:31.929842+00:00\",\"modified_at\":\"2024-11-15T19:32:31.929842+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/t7h-dt9-gt6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"t7h-dt9-gt6\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a query value widget using timeseries background", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-23T18:59:41.240Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_a_query_value_widget_containing_a_description-1774292381", + "widgets": [ + { + "definition": { + "autoscale": true, + "description": "Example widget description", + "precision": 2, + "requests": [ + { + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ptd-zwh-jnu\",\"title\":\"Test-Create_a_new_dashboard_with_a_query_value_widget_containing_a_description-1774292381\",\"description\":\"\",\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"free\",\"url\":\"/dashboard/ptd-zwh-jnu/test-createanewdashboardwithaqueryvaluewidgetcontainingadescription-1774292381\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"autoscale\":true,\"description\":\"Example widget description\",\"precision\":2,\"requests\":[{\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*}\"}],\"response_format\":\"scalar\"}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_value\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":1071717599065959}],\"notify_list\":[],\"created_at\":\"2026-03-23T18:59:41.534095+00:00\",\"modified_at\":\"2026-03-23T18:59:41.534095+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ptd-zwh-jnu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ptd-zwh-jnu\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a query_value widget containing a description", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:32.218Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_timeseries_widget_and_an_overlay_request-1731699152", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "on_right_yaxis": false, + "queries": [ + { + "data_source": "metrics", + "name": "mymetric", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries" + }, + { + "display_type": "overlay", + "queries": [ + { + "data_source": "metrics", + "name": "mymetricoverlay", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "purple" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"9kn-skt-493\",\"title\":\"Test-Create_a_new_dashboard_with_a_timeseries_widget_and_an_overlay_request-1731699152\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/9kn-skt-493/test-createanewdashboardwithatimeserieswidgetandanoverlayrequest-1731699152\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"on_right_yaxis\":false,\"queries\":[{\"data_source\":\"metrics\",\"name\":\"mymetric\",\"query\":\"avg:system.cpu.user{*}\"}],\"response_format\":\"timeseries\"},{\"display_type\":\"overlay\",\"queries\":[{\"data_source\":\"metrics\",\"name\":\"mymetricoverlay\",\"query\":\"avg:system.cpu.user{*}\"}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"purple\"}}],\"type\":\"timeseries\"},\"id\":8425606312270690}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:32.390240+00:00\",\"modified_at\":\"2024-11-15T19:32:32.390240+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/9kn-skt-493", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"9kn-skt-493\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a timeseries widget and an overlay request", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:32.665Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_timeseries_widget_using_formulas_and_functions_cloud_cost_query-1731699152", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "bars", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "cloud_cost", + "name": "query1", + "query": "sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "time": { + "live_span": "week_to_date" + }, + "title": "Example Cloud Cost Query", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"vyw-yjx-s93\",\"title\":\"Test-Create_a_new_dashboard_with_a_timeseries_widget_using_formulas_and_functions_cloud_cost_query-1731699152\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/vyw-yjx-s93/test-createanewdashboardwithatimeserieswidgetusingformulasandfunctionscloudcostq\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"bars\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"data_source\":\"cloud_cost\",\"name\":\"query1\",\"query\":\"sum:aws.cost.amortized{*} by {aws_product}.rollup(sum, monthly)\"}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"time\":{\"live_span\":\"week_to_date\"},\"title\":\"Example Cloud Cost Query\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"timeseries\"},\"id\":2217465194290585}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:32.857554+00:00\",\"modified_at\":\"2024-11-15T19:32:32.857554+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/vyw-yjx-s93", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"vyw-yjx-s93\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a timeseries widget using formulas and functions cloud cost query", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-12-08T18:40:10.047Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_timeseries_widget_using_formulas_and_functions_metrics_query_with_comb-1765219210 with combined semantic_mode", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}", + "semantic_mode": "combined" + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"bpt-wdw-b9x\",\"title\":\"Test-Create_a_new_dashboard_with_a_timeseries_widget_using_formulas_and_functions_metrics_query_with_comb-1765219210 with combined semantic_mode\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/bpt-wdw-b9x/test-createanewdashboardwithatimeserieswidgetusingformulasandfunctionsmetricsque\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*}\",\"semantic_mode\":\"combined\"}],\"response_format\":\"timeseries\"}],\"type\":\"timeseries\"},\"id\":7196642548461969}],\"notify_list\":null,\"created_at\":\"2025-12-08T18:40:10.214467+00:00\",\"modified_at\":\"2025-12-08T18:40:10.214467+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/bpt-wdw-b9x", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"bpt-wdw-b9x\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a timeseries widget using formulas and functions metrics query with combined semantic_mode", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-12-08T18:32:38.191Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_a_timeseries_widget_using_formulas_and_functions_metrics_query_with_nati-1765218758 with native semantic_mode", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}", + "semantic_mode": "native" + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ptr-h98-jx4\",\"title\":\"Test-Create_a_new_dashboard_with_a_timeseries_widget_using_formulas_and_functions_metrics_query_with_nati-1765218758 with native semantic_mode\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/ptr-h98-jx4/test-createanewdashboardwithatimeserieswidgetusingformulasandfunctionsmetricsque\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*}\",\"semantic_mode\":\"native\"}],\"response_format\":\"timeseries\"}],\"type\":\"timeseries\"},\"id\":7543625669678795}],\"notify_list\":null,\"created_at\":\"2025-12-08T18:32:38.359385+00:00\",\"modified_at\":\"2025-12-08T18:32:38.359385+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ptr-h98-jx4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ptr-h98-jx4\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a timeseries widget using formulas and functions metrics query with native semantic_mode", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:33.159Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_a_toplist_widget_sorted_by_group-1731699153", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "name": "service", + "order": "asc", + "type": "group" + } + ] + } + } + ], + "style": { + "display": { + "legend": "inline", + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "toplist" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"w98-fwu-ra3\",\"title\":\"Test-Create_a_new_dashboard_with_a_toplist_widget_sorted_by_group-1731699153\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/w98-fwu-ra3/test-createanewdashboardwithatoplistwidgetsortedbygroup-1731699153\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {service}\"}],\"response_format\":\"scalar\",\"sort\":{\"count\":10,\"order_by\":[{\"name\":\"service\",\"order\":\"asc\",\"type\":\"group\"}]}}],\"style\":{\"display\":{\"legend\":\"inline\",\"type\":\"stacked\"},\"palette\":\"dog_classic\",\"scaling\":\"relative\"},\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"toplist\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":6367571628619554}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:33.336831+00:00\",\"modified_at\":\"2024-11-15T19:32:33.336831+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/w98-fwu-ra3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"w98-fwu-ra3\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a toplist widget sorted by group", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:33.591Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_a_toplist_widget_with_stacked_type_and_no_legend_specified-1731699153", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "name": "service", + "order": "asc", + "type": "group" + } + ] + } + } + ], + "style": { + "display": { + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "toplist" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"r8v-q4n-f95\",\"title\":\"Test-Create_a_new_dashboard_with_a_toplist_widget_with_stacked_type_and_no_legend_specified-1731699153\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/r8v-q4n-f95/test-createanewdashboardwithatoplistwidgetwithstackedtypeandnolegendspecified-17\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {service}\"}],\"response_format\":\"scalar\",\"sort\":{\"count\":10,\"order_by\":[{\"name\":\"service\",\"order\":\"asc\",\"type\":\"group\"}]}}],\"style\":{\"display\":{\"type\":\"stacked\"},\"palette\":\"dog_classic\",\"scaling\":\"relative\"},\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"toplist\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":4235118472410793}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:33.756567+00:00\",\"modified_at\":\"2024-11-15T19:32:33.756567+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/r8v-q4n-f95", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"r8v-q4n-f95\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with a toplist widget with stacked type and no legend specified", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:34.239Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_new_dashboard_with_alert_graph_widget-1731699154", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testcreateanewdashboardwithalertgraphwidget1731699154", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":158348339,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Create_a_new_dashboard_with_alert_graph_widget-1731699154\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testcreateanewdashboardwithalertgraphwidget1731699154\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1731699154000,\"created\":\"2024-11-15T19:32:34.396432+00:00\",\"modified\":\"2024-11-15T19:32:34.396432+00:00\",\"deleted\":null,\"priority\":3,\"restricted_roles\":null,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_alert_graph_widget-1731699154", + "widgets": [ + { + "definition": { + "alert_id": "158348339", + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "alert_graph", + "viz_type": "timeseries" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"4jv-jai-fe2\",\"title\":\"Test-Create_a_new_dashboard_with_alert_graph_widget-1731699154\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/4jv-jai-fe2/test-createanewdashboardwithalertgraphwidget-1731699154\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"alert_id\":\"158348339\",\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"alert_graph\",\"viz_type\":\"timeseries\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":2987598208176646}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:34.601305+00:00\",\"modified_at\":\"2024-11-15T19:32:34.601305+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/4jv-jai-fe2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"4jv-jai-fe2\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/158348339", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":158348339}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with alert_graph widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:35.090Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_new_dashboard_with_alert_value_widget-1731699155", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testcreateanewdashboardwithalertvaluewidget1731699155", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":158348341,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Create_a_new_dashboard_with_alert_value_widget-1731699155\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testcreateanewdashboardwithalertvaluewidget1731699155\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1731699155000,\"created\":\"2024-11-15T19:32:35.343261+00:00\",\"modified\":\"2024-11-15T19:32:35.343261+00:00\",\"deleted\":null,\"priority\":3,\"restricted_roles\":null,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_alert_value_widget-1731699155", + "widgets": [ + { + "definition": { + "alert_id": "158348341", + "precision": 2, + "text_align": "left", + "title": "", + "title_align": "left", + "title_size": "16", + "type": "alert_value", + "unit": "auto" + }, + "layout": { + "height": 8, + "width": 15, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"vi5-rq9-zfq\",\"title\":\"Test-Create_a_new_dashboard_with_alert_value_widget-1731699155\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/vi5-rq9-zfq/test-createanewdashboardwithalertvaluewidget-1731699155\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"alert_id\":\"158348341\",\"precision\":2,\"text_align\":\"left\",\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"alert_value\",\"unit\":\"auto\"},\"layout\":{\"height\":8,\"width\":15,\"x\":0,\"y\":0},\"id\":1173877496665142}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:35.523350+00:00\",\"modified_at\":\"2024-11-15T19:32:35.523350+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/vi5-rq9-zfq", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"vi5-rq9-zfq\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/158348341", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":158348341}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with alert_value widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:31:19.426Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_an_audit_logs_query-1772451079 with Audit Logs Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "audit", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + }, + "layout": { + "height": 2, + "width": 4, + "x": 2, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"u8e-wje-ac7\",\"title\":\"Test-Create_a_new_dashboard_with_an_audit_logs_query-1772451079 with Audit Logs Query\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/u8e-wje-ac7/test-createanewdashboardwithanauditlogsquery-1772451079-with-audit-logs-query\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"audit\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"\"}}],\"response_format\":\"timeseries\"}],\"type\":\"timeseries\"},\"layout\":{\"height\":2,\"width\":4,\"x\":2,\"y\":0},\"id\":3153401975327610}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:31:19.790638+00:00\",\"modified_at\":\"2026-03-02T11:31:19.790638+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/u8e-wje-ac7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"u8e-wje-ac7\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with an audit logs query", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:36.471Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_apm_dependency_stats_widget-1731699156", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "data_source": "apm_dependency_stats", + "env": "ci", + "name": "query1", + "operation_name": "cassandra.query", + "primary_tag_name": "datacenter", + "primary_tag_value": "edge-eu1.prod.dog", + "resource_name": "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?", + "service": "cassandra", + "stat": "avg_duration" + } + ], + "response_format": "scalar" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"vz4-7gw-y6a\",\"title\":\"Test-Create_a_new_dashboard_with_apm_dependency_stats_widget-1731699156\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/vz4-7gw-y6a/test-createanewdashboardwithapmdependencystatswidget-1731699156\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"queries\":[{\"data_source\":\"apm_dependency_stats\",\"env\":\"ci\",\"name\":\"query1\",\"operation_name\":\"cassandra.query\",\"primary_tag_name\":\"datacenter\",\"primary_tag_value\":\"edge-eu1.prod.dog\",\"resource_name\":\"DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?\",\"service\":\"cassandra\",\"stat\":\"avg_duration\"}],\"response_format\":\"scalar\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_table\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":8028533185092499}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:36.632468+00:00\",\"modified_at\":\"2024-11-15T19:32:36.632468+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/vz4-7gw-y6a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"vz4-7gw-y6a\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with apm dependency stats widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-02-20T10:00:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_apm_metrics_widget-1740045600", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "data_source": "apm_metrics", + "group_by": [ + "resource_name" + ], + "name": "query1", + "query_filter": "env:prod", + "service": "web-store", + "stat": "hits" + } + ], + "response_format": "scalar" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"apm-met-ric\",\"title\":\"Test-Create_a_new_dashboard_with_apm_metrics_widget-1740045600\",\"description\":null,\"author_handle\":\"test@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/apm-met-ric/testcreateanewdashboardwithapmmetricswidget1740045600\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"queries\":[{\"data_source\":\"apm_metrics\",\"group_by\":[\"resource_name\"],\"name\":\"query1\",\"query_filter\":\"env:prod\",\"service\":\"web-store\",\"stat\":\"hits\"}],\"response_format\":\"scalar\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_table\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":1234567890123456}],\"notify_list\":null,\"created_at\":\"2025-02-20T10:00:01.000000+00:00\",\"modified_at\":\"2025-02-20T10:00:01.000000+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/apm-met-ric", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"apm-met-ric\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with apm metrics widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:36.906Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_apm_resource_stats_widget-1731699156", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "data_source": "apm_resource_stats", + "env": "ci", + "group_by": [ + "resource_name" + ], + "name": "query1", + "operation_name": "cassandra.query", + "primary_tag_name": "datacenter", + "primary_tag_value": "edge-eu1.prod.dog", + "service": "cassandra", + "stat": "hits" + } + ], + "response_format": "scalar" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"29d-cad-9rf\",\"title\":\"Test-Create_a_new_dashboard_with_apm_resource_stats_widget-1731699156\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/29d-cad-9rf/test-createanewdashboardwithapmresourcestatswidget-1731699156\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"queries\":[{\"data_source\":\"apm_resource_stats\",\"env\":\"ci\",\"group_by\":[\"resource_name\"],\"name\":\"query1\",\"operation_name\":\"cassandra.query\",\"primary_tag_name\":\"datacenter\",\"primary_tag_value\":\"edge-eu1.prod.dog\",\"service\":\"cassandra\",\"stat\":\"hits\"}],\"response_format\":\"scalar\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_table\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":150814161312733}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:37.062973+00:00\",\"modified_at\":\"2024-11-15T19:32:37.062973+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/29d-cad-9rf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"29d-cad-9rf\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with apm resource stats widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:37.303Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_apm_issue_stream_list_stream_widget-1731699157 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "apm_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"tak-bfc-f2k\",\"title\":\"Test-Create_a_new_dashboard_with_apm_issue_stream_list_stream_widget-1731699157 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/tak-bfc-f2k/test-createanewdashboardwithapmissuestreamliststreamwidget-1731699157-with-lists\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"apm_issue_stream\",\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":6801970282056588}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:37.429394+00:00\",\"modified_at\":\"2024-11-15T19:32:37.429394+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/tak-bfc-f2k", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"tak-bfc-f2k\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with apm_issue_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-12-15T21:26:18.139Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_bar_chart_widget-1765833978", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "style": { + "display": { + "legend": "inline", + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "bar_chart" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"jnt-fik-esx\",\"title\":\"Test-Create_a_new_dashboard_with_bar_chart_widget-1765833978\",\"description\":\"\",\"author_handle\":\"jessica.sylvester@datadoghq.com\",\"author_name\":\"Jessica Sylvester\",\"layout_type\":\"free\",\"url\":\"/dashboard/jnt-fik-esx/test-createanewdashboardwithbarchartwidget-1765833978\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {service}\"}],\"response_format\":\"scalar\",\"sort\":{\"count\":10,\"order_by\":[{\"index\":0,\"order\":\"desc\",\"type\":\"formula\"}]}}],\"style\":{\"display\":{\"legend\":\"inline\",\"type\":\"stacked\"},\"palette\":\"dog_classic\",\"scaling\":\"relative\"},\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"bar_chart\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":4318878693632821}],\"notify_list\":[],\"created_at\":\"2025-12-15T21:26:18.283708+00:00\",\"modified_at\":\"2025-12-15T21:26:18.283708+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/jnt-fik-esx", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"jnt-fik-esx\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with bar_chart widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-12-15T21:26:29.455Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_bar_chart_widget_sorted_by_group-1765833989", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "name": "service", + "order": "asc", + "type": "group" + } + ] + } + } + ], + "style": { + "display": { + "legend": "inline", + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "bar_chart" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"d7t-dfe-vuh\",\"title\":\"Test-Create_a_new_dashboard_with_bar_chart_widget_sorted_by_group-1765833989\",\"description\":\"\",\"author_handle\":\"jessica.sylvester@datadoghq.com\",\"author_name\":\"Jessica Sylvester\",\"layout_type\":\"free\",\"url\":\"/dashboard/d7t-dfe-vuh/test-createanewdashboardwithbarchartwidgetsortedbygroup-1765833989\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {service}\"}],\"response_format\":\"scalar\",\"sort\":{\"count\":10,\"order_by\":[{\"name\":\"service\",\"order\":\"asc\",\"type\":\"group\"}]}}],\"style\":{\"display\":{\"legend\":\"inline\",\"type\":\"stacked\"},\"palette\":\"dog_classic\",\"scaling\":\"relative\"},\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"bar_chart\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":3540992741229512}],\"notify_list\":[],\"created_at\":\"2025-12-15T21:26:29.666161+00:00\",\"modified_at\":\"2025-12-15T21:26:29.666161+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/d7t-dfe-vuh", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"d7t-dfe-vuh\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with bar_chart widget sorted by group", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:37.699Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_check_status_widget-1731699157", + "widgets": [ + { + "definition": { + "check": "datadog.agent.up", + "grouping": "check", + "tags": [ + "*" + ], + "title_align": "left", + "title_size": "16", + "type": "check_status" + }, + "layout": { + "height": 8, + "width": 15, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"h4u-ixe-ptt\",\"title\":\"Test-Create_a_new_dashboard_with_check_status_widget-1731699157\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/h4u-ixe-ptt/test-createanewdashboardwithcheckstatuswidget-1731699157\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"check\":\"datadog.agent.up\",\"grouping\":\"check\",\"tags\":[\"*\"],\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"check_status\"},\"layout\":{\"height\":8,\"width\":15,\"x\":0,\"y\":0},\"id\":3317310368131706}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:37.813499+00:00\",\"modified_at\":\"2024-11-15T19:32:37.813499+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/h4u-ixe-ptt", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"h4u-ixe-ptt\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with check_status widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:38.067Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_ci_test_stream_list_stream_widget-1731699158 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "ci_test_stream", + "query_string": "test_level:suite" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"as4-cys-wwb\",\"title\":\"Test-Create_a_new_dashboard_with_ci_test_stream_list_stream_widget-1731699158 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/as4-cys-wwb/test-createanewdashboardwithciteststreamliststreamwidget-1731699158-with-liststr\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"ci_test_stream\",\"query_string\":\"test_level:suite\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":723670979268214}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:38.213091+00:00\",\"modified_at\":\"2024-11-15T19:32:38.213091+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/as4-cys-wwb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"as4-cys-wwb\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with ci_test_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:38.489Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_distribution_widget_and_apm_stats_data-1731699158", + "widgets": [ + { + "definition": { + "requests": [ + { + "apm_stats_query": { + "env": "prod", + "name": "cassandra.query", + "primary_tag": "datacenter:dc1", + "row_type": "service", + "service": "cassandra" + } + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "distribution" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"jbq-s5a-g9h\",\"title\":\"Test-Create_a_new_dashboard_with_distribution_widget_and_apm_stats_data-1731699158\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/jbq-s5a-g9h/test-createanewdashboardwithdistributionwidgetandapmstatsdata-1731699158\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"apm_stats_query\":{\"env\":\"prod\",\"name\":\"cassandra.query\",\"primary_tag\":\"datacenter:dc1\",\"row_type\":\"service\",\"service\":\"cassandra\"}}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"distribution\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":1068260925995159}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:38.651425+00:00\",\"modified_at\":\"2024-11-15T19:32:38.651425+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/jbq-s5a-g9h", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"jbq-s5a-g9h\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with distribution widget and apm stats data", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-12-04T23:08:04.708Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_distribution_widget_with_markers_and_num_buckets-1764889684", + "widgets": [ + { + "definition": { + "markers": [ + { + "display_type": "percentile", + "value": "50" + }, + { + "display_type": "percentile", + "value": "99" + }, + { + "display_type": "percentile", + "value": "90" + } + ], + "requests": [ + { + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "distribution", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "num_buckets": 55, + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ved-atm-2g5\",\"title\":\"Test-Create_a_new_dashboard_with_distribution_widget_with_markers_and_num_buckets-1764889684\",\"description\":null,\"author_handle\":\"shishi.liu@datadoghq.com\",\"author_name\":\"Shishi Liu\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/ved-atm-2g5/test-createanewdashboardwithdistributionwidgetwithmarkersandnumbuckets-176488968\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"markers\":[{\"display_type\":\"percentile\",\"value\":\"50\"},{\"display_type\":\"percentile\",\"value\":\"99\"},{\"display_type\":\"percentile\",\"value\":\"90\"}],\"requests\":[{\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {service}\"}],\"response_format\":\"scalar\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"distribution\",\"xaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"num_buckets\":55,\"scale\":\"linear\"},\"yaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"}},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":984443192078703}],\"notify_list\":null,\"created_at\":\"2025-12-04T23:08:05.111437+00:00\",\"modified_at\":\"2025-12-04T23:08:05.111437+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ved-atm-2g5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ved-atm-2g5\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with distribution widget with markers and num_buckets", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:38.933Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_event_stream_list_stream_widget-1731699158 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "event_stream", + "event_size": "l", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"vw4-by2-54m\",\"title\":\"Test-Create_a_new_dashboard_with_event_stream_list_stream_widget-1731699158 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/vw4-by2-54m/test-createanewdashboardwitheventstreamliststreamwidget-1731699158-with-liststre\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"event_stream\",\"event_size\":\"l\",\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":7618408090059389}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:39.054775+00:00\",\"modified_at\":\"2024-11-15T19:32:39.054775+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/vw4-by2-54m", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"vw4-by2-54m\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with event_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:39.304Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_event_stream_widget-1731699159", + "widgets": [ + { + "definition": { + "event_size": "s", + "query": "example-query", + "tags_execution": "and", + "title": "", + "title_align": "left", + "title_size": "16", + "type": "event_stream" + }, + "layout": { + "height": 38, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"uki-9bd-4fm\",\"title\":\"Test-Create_a_new_dashboard_with_event_stream_widget-1731699159\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/uki-9bd-4fm/test-createanewdashboardwitheventstreamwidget-1731699159\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"event_size\":\"s\",\"query\":\"example-query\",\"tags_execution\":\"and\",\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"event_stream\"},\"layout\":{\"height\":38,\"width\":47,\"x\":0,\"y\":0},\"id\":7158238942702313}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:39.414884+00:00\",\"modified_at\":\"2024-11-15T19:32:39.414884+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/uki-9bd-4fm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"uki-9bd-4fm\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with event_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:39.893Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_event_timeline_widget-1731699159", + "widgets": [ + { + "definition": { + "query": "status:error priority:all", + "tags_execution": "and", + "title": "", + "title_align": "left", + "title_size": "16", + "type": "event_timeline" + }, + "layout": { + "height": 9, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"y4s-pyq-y6k\",\"title\":\"Test-Create_a_new_dashboard_with_event_timeline_widget-1731699159\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/y4s-pyq-y6k/test-createanewdashboardwitheventtimelinewidget-1731699159\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"query\":\"status:error priority:all\",\"tags_execution\":\"and\",\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"event_timeline\"},\"layout\":{\"height\":9,\"width\":47,\"x\":0,\"y\":0},\"id\":1248560916532440}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:39.998921+00:00\",\"modified_at\":\"2024-11-15T19:32:39.998921+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/y4s-pyq-y6k", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"y4s-pyq-y6k\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with event_timeline widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-12-15T17:03:52.164Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_formula_and_function_distribution_widget-1765818232", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "compute": { + "aggregation": "avg", + "metric": "@duration" + }, + "data_source": "logs", + "group_by": [ + { + "facet": "service", + "limit": 1000, + "sort": { + "aggregation": "count", + "order": "desc" + } + } + ], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + }, + "storage": "hot" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "distribution" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ii3-z6t-p8x\",\"title\":\"Test-Create_a_new_dashboard_with_formula_and_function_distribution_widget-1765818232\",\"description\":null,\"author_handle\":\"shishi.liu@datadoghq.com\",\"author_name\":\"Shishi Liu\",\"layout_type\":\"free\",\"url\":\"/dashboard/ii3-z6t-p8x/test-createanewdashboardwithformulaandfunctiondistributionwidget-1765818232\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"queries\":[{\"compute\":{\"aggregation\":\"avg\",\"metric\":\"@duration\"},\"data_source\":\"logs\",\"group_by\":[{\"facet\":\"service\",\"limit\":1000,\"sort\":{\"aggregation\":\"count\",\"order\":\"desc\"}}],\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"\"},\"storage\":\"hot\"}],\"response_format\":\"scalar\"}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"distribution\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":1822470106302094}],\"notify_list\":[],\"created_at\":\"2025-12-15T17:03:52.607823+00:00\",\"modified_at\":\"2025-12-15T17:03:52.607823+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ii3-z6t-p8x", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ii3-z6t-p8x\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with formula and function distribution widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:40.241Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_formula_and_function_heatmap_widget-1731699160", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries", + "style": { + "palette": "dog_classic" + } + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "heatmap" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"g5w-g59-qaw\",\"title\":\"Test-Create_a_new_dashboard_with_formula_and_function_heatmap_widget-1731699160\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/g5w-g59-qaw/test-createanewdashboardwithformulaandfunctionheatmapwidget-1731699160\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*}\"}],\"response_format\":\"timeseries\",\"style\":{\"palette\":\"dog_classic\"}}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"heatmap\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":7260882193896439}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:40.397908+00:00\",\"modified_at\":\"2024-11-15T19:32:40.397908+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/g5w-g59-qaw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"g5w-g59-qaw\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with formula and function heatmap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:31:55.658Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_formulas_and_functions_events_query_using_facet_group_by-1772451115 with events facet group_by", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "events", + "group_by": [ + { + "facet": "service", + "limit": 10 + } + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ju2-xz8-5m5\",\"title\":\"Test-Create_a_new_dashboard_with_formulas_and_functions_events_query_using_facet_group_by-1772451115 with events facet group_by\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/ju2-xz8-5m5/test-createanewdashboardwithformulasandfunctionseventsqueryusingfacetgroupby-177\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"events\",\"group_by\":[{\"facet\":\"service\",\"limit\":10}],\"name\":\"query1\",\"search\":{\"query\":\"\"}}],\"response_format\":\"timeseries\"}],\"type\":\"timeseries\"},\"layout\":{\"height\":2,\"width\":4,\"x\":0,\"y\":0},\"id\":810193426998809}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:31:55.791459+00:00\",\"modified_at\":\"2026-03-02T11:31:55.791459+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ju2-xz8-5m5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ju2-xz8-5m5\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with formulas and functions events query using facet group by", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:32:08.470Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_formulas_and_functions_events_query_using_flat_group_by_fields-1772451128 with events flat group_by fields", + "widgets": [ + { + "definition": { + "requests": [ + { + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "events", + "group_by": { + "fields": [ + "service", + "host" + ], + "limit": 10 + }, + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "timeseries" + } + ], + "type": "timeseries" + }, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"fr8-fsd-e2q\",\"title\":\"Test-Create_a_new_dashboard_with_formulas_and_functions_events_query_using_flat_group_by_fields-1772451128 with events flat group_by fields\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/fr8-fsd-e2q/test-createanewdashboardwithformulasandfunctionseventsqueryusingflatgroupbyfield\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"events\",\"group_by\":{\"fields\":[\"service\",\"host\"],\"limit\":10},\"name\":\"query1\",\"search\":{\"query\":\"\"}}],\"response_format\":\"timeseries\"}],\"type\":\"timeseries\"},\"layout\":{\"height\":2,\"width\":4,\"x\":0,\"y\":0},\"id\":1614310387548006}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:32:08.617154+00:00\",\"modified_at\":\"2026-03-02T11:32:08.617154+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/fr8-fsd-e2q", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"fr8-fsd-e2q\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with formulas and functions events query using flat group by fields", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:40.658Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_formulas_and_functions_scatterplot_widget-1731699160", + "widgets": [ + { + "definition": { + "requests": { + "table": { + "formulas": [ + { + "alias": "my-query1", + "dimension": "x", + "formula": "query1" + }, + { + "alias": "my-query2", + "dimension": "y", + "formula": "query2" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query2", + "query": "avg:system.mem.used{*} by {service}" + } + ], + "response_format": "scalar" + } + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "scatterplot" + }, + "id": 5346764334358972, + "layout": { + "height": 2, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"s22-z4c-t53\",\"title\":\"Test-Create_a_new_dashboard_with_formulas_and_functions_scatterplot_widget-1731699160\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/s22-z4c-t53/test-createanewdashboardwithformulasandfunctionsscatterplotwidget-1731699160\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":{\"table\":{\"formulas\":[{\"alias\":\"my-query1\",\"dimension\":\"x\",\"formula\":\"query1\"},{\"alias\":\"my-query2\",\"dimension\":\"y\",\"formula\":\"query2\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {service}\"},{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query2\",\"query\":\"avg:system.mem.used{*} by {service}\"}],\"response_format\":\"scalar\"}},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"scatterplot\"},\"id\":5346764334358972,\"layout\":{\"height\":2,\"width\":4,\"x\":0,\"y\":0}}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:40.879414+00:00\",\"modified_at\":\"2024-11-15T19:32:40.879414+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/s22-z4c-t53", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"s22-z4c-t53\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with formulas and functions scatterplot widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:41.138Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_free_text_widget-1731699161", + "widgets": [ + { + "definition": { + "color": "#4d4d4d", + "font_size": "auto", + "text": "Example free text", + "text_align": "left", + "type": "free_text" + }, + "layout": { + "height": 6, + "width": 24, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"gdm-q83-k4r\",\"title\":\"Test-Create_a_new_dashboard_with_free_text_widget-1731699161\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/gdm-q83-k4r/test-createanewdashboardwithfreetextwidget-1731699161\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"color\":\"#4d4d4d\",\"font_size\":\"auto\",\"text\":\"Example free text\",\"text_align\":\"left\",\"type\":\"free_text\"},\"layout\":{\"height\":6,\"width\":24,\"x\":0,\"y\":0},\"id\":3522001567186870}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:41.254783+00:00\",\"modified_at\":\"2024-11-15T19:32:41.254783+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/gdm-q83-k4r", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"gdm-q83-k4r\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with free_text widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:41.517Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_funnel_widget-1731699161 with funnel widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "rum", + "query_string": "", + "steps": [] + }, + "request_type": "funnel" + } + ], + "type": "funnel" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"xfs-csi-vjh\",\"title\":\"Test-Create_a_new_dashboard_with_funnel_widget-1731699161 with funnel widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/xfs-csi-vjh/test-createanewdashboardwithfunnelwidget-1731699161-with-funnel-widget\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"data_source\":\"rum\",\"query_string\":\"\",\"steps\":[]},\"request_type\":\"funnel\"}],\"type\":\"funnel\"},\"id\":4755008273116868}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:41.625961+00:00\",\"modified_at\":\"2024-11-15T19:32:41.625961+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/xfs-csi-vjh", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"xfs-csi-vjh\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with funnel widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:41.892Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_geomap_widget-1731699161", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "group_by": [ + { + "facet": "@geo.country_iso_code", + "limit": 250, + "sort": { + "aggregation": "count", + "order": "desc" + } + } + ], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar", + "sort": { + "count": 250, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "style": { + "palette": "hostmap_blues", + "palette_flip": false + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "geomap", + "view": { + "focus": "WORLD" + } + }, + "layout": { + "height": 30, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ccn-3vg-8fw\",\"title\":\"Test-Create_a_new_dashboard_with_geomap_widget-1731699161\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/ccn-3vg-8fw/test-createanewdashboardwithgeomapwidget-1731699161\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"rum\",\"group_by\":[{\"facet\":\"@geo.country_iso_code\",\"limit\":250,\"sort\":{\"aggregation\":\"count\",\"order\":\"desc\"}}],\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"\"}}],\"response_format\":\"scalar\",\"sort\":{\"count\":250,\"order_by\":[{\"index\":0,\"order\":\"desc\",\"type\":\"formula\"}]}}],\"style\":{\"palette\":\"hostmap_blues\",\"palette_flip\":false},\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"geomap\",\"view\":{\"focus\":\"WORLD\"}},\"layout\":{\"height\":30,\"width\":47,\"x\":0,\"y\":0},\"id\":8863325267448971}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:42.087668+00:00\",\"modified_at\":\"2024-11-15T19:32:42.087668+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ccn-3vg-8fw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ccn-3vg-8fw\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with geomap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:42.369Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_heatmap_widget-1731699162", + "widgets": [ + { + "definition": { + "requests": [ + { + "q": "avg:system.cpu.user{*} by {service}", + "style": { + "palette": "dog_classic" + } + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "heatmap" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"2vd-tnh-iwh\",\"title\":\"Test-Create_a_new_dashboard_with_heatmap_widget-1731699162\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/2vd-tnh-iwh/test-createanewdashboardwithheatmapwidget-1731699162\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"q\":\"avg:system.cpu.user{*} by {service}\",\"style\":{\"palette\":\"dog_classic\"}}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"heatmap\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":3378279846394032}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:42.534303+00:00\",\"modified_at\":\"2024-11-15T19:32:42.534303+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/2vd-tnh-iwh", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"2vd-tnh-iwh\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with heatmap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-12-15T17:39:03.378Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_heatmap_widget_with_markers_and_num_buckets-1765820343", + "widgets": [ + { + "definition": { + "markers": [ + { + "display_type": "percentile", + "value": "50" + }, + { + "display_type": "percentile", + "value": "99" + } + ], + "requests": [ + { + "query": { + "data_source": "metrics", + "name": "query1", + "query": "histogram:trace.servlet.request{*}" + }, + "request_type": "histogram" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "heatmap", + "xaxis": { + "num_buckets": 75 + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"r3p-kik-ven\",\"title\":\"Test-Create_a_new_dashboard_with_heatmap_widget_with_markers_and_num_buckets-1765820343\",\"description\":null,\"author_handle\":\"shishi.liu@datadoghq.com\",\"author_name\":\"Shishi Liu\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/r3p-kik-ven/test-createanewdashboardwithheatmapwidgetwithmarkersandnumbuckets-1765820343\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"markers\":[{\"display_type\":\"percentile\",\"value\":\"50\"},{\"display_type\":\"percentile\",\"value\":\"99\"}],\"requests\":[{\"query\":{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"histogram:trace.servlet.request{*}\"},\"request_type\":\"histogram\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"heatmap\",\"xaxis\":{\"num_buckets\":75},\"yaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"}},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":4627813855695599}],\"notify_list\":null,\"created_at\":\"2025-12-15T17:39:03.852775+00:00\",\"modified_at\":\"2025-12-15T17:39:03.852775+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/r3p-kik-ven", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"r3p-kik-ven\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with heatmap widget with markers and num_buckets", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-07-08T15:57:41.949Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_hostmap_DDSQL_widget-1783526261", + "widgets": [ + { + "definition": { + "requests": { + "limit": 1000, + "projection": { + "dimensions": [ + { + "column": "entity_id", + "dimension": "node" + }, + { + "column": "parent_id", + "dimension": "group" + }, + { + "column": "cpu_usage", + "dimension": "fill" + } + ], + "type": "hostmap" + }, + "query": { + "data_source": "dataset", + "dataset_id": "abc-123-def", + "dataset_provider": "ddsql_query" + }, + "request_type": "data_projection", + "style": { + "palette": "green_to_orange", + "palette_flip": false + } + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "hostmap" + }, + "layout": { + "height": 22, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ei8-bm4-cy2\",\"title\":\"Test-Create_a_new_dashboard_with_hostmap_DDSQL_widget-1783526261\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"free\",\"url\":\"/dashboard/ei8-bm4-cy2/test-createanewdashboardwithhostmapddsqlwidget-1783526261\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":{\"limit\":1000,\"projection\":{\"dimensions\":[{\"column\":\"entity_id\",\"dimension\":\"node\"},{\"column\":\"parent_id\",\"dimension\":\"group\"},{\"column\":\"cpu_usage\",\"dimension\":\"fill\"}],\"type\":\"hostmap\"},\"query\":{\"data_source\":\"dataset\",\"dataset_id\":\"abc-123-def\",\"dataset_provider\":\"ddsql_query\"},\"request_type\":\"data_projection\",\"style\":{\"palette\":\"green_to_orange\",\"palette_flip\":false}},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"hostmap\"},\"layout\":{\"height\":22,\"width\":47,\"x\":0,\"y\":0},\"id\":2962556261296626}],\"notify_list\":[],\"created_at\":\"2026-07-08T15:57:42.209375+00:00\",\"modified_at\":\"2026-07-08T15:57:42.209375+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ei8-bm4-cy2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ei8-bm4-cy2\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with hostmap DDSQL widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-05-28T19:18:07.925Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_hostmap_infra_widget-1779995887", + "widgets": [ + { + "definition": { + "requests": { + "enrichments": [ + { + "formulas": [ + { + "dimension": "fill", + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {host}" + } + ], + "response_format": "scalar" + } + ], + "filter": "env:prod", + "group_by": [ + { + "column": "tags", + "key": "service" + } + ], + "node_type": "host", + "request_type": "infrastructure_hostmap", + "style": { + "palette": "green_to_orange", + "palette_flip": false + } + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "hostmap" + }, + "layout": { + "height": 22, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ca3-5na-ti2\",\"title\":\"Test-Create_a_new_dashboard_with_hostmap_infra_widget-1779995887\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"free\",\"url\":\"/dashboard/ca3-5na-ti2/test-createanewdashboardwithhostmapinfrawidget-1779995887\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":{\"enrichments\":[{\"formulas\":[{\"dimension\":\"fill\",\"formula\":\"query1\"}],\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {host}\"}],\"response_format\":\"scalar\"}],\"filter\":\"env:prod\",\"group_by\":[{\"column\":\"tags\",\"key\":\"service\"}],\"node_type\":\"host\",\"request_type\":\"infrastructure_hostmap\",\"style\":{\"palette\":\"green_to_orange\",\"palette_flip\":false}},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"hostmap\"},\"layout\":{\"height\":22,\"width\":47,\"x\":0,\"y\":0},\"id\":7949207519561974}],\"notify_list\":[],\"created_at\":\"2026-05-28T19:18:08.023029+00:00\",\"modified_at\":\"2026-05-28T19:18:08.023029+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ca3-5na-ti2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ca3-5na-ti2\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with hostmap infra widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:42.832Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_hostmap_widget-1731699162", + "widgets": [ + { + "definition": { + "no_group_hosts": true, + "no_metric_hosts": true, + "node_type": "host", + "requests": { + "fill": { + "q": "avg:system.cpu.user{*} by {host}" + } + }, + "style": { + "palette": "green_to_orange", + "palette_flip": false + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "hostmap" + }, + "layout": { + "height": 22, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"cny-7s9-9di\",\"title\":\"Test-Create_a_new_dashboard_with_hostmap_widget-1731699162\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/cny-7s9-9di/test-createanewdashboardwithhostmapwidget-1731699162\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"no_group_hosts\":true,\"no_metric_hosts\":true,\"node_type\":\"host\",\"requests\":{\"fill\":{\"q\":\"avg:system.cpu.user{*} by {host}\"}},\"style\":{\"palette\":\"green_to_orange\",\"palette_flip\":false},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"hostmap\"},\"layout\":{\"height\":22,\"width\":47,\"x\":0,\"y\":0},\"id\":4242019856060698}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:43.028167+00:00\",\"modified_at\":\"2024-11-15T19:32:43.028167+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/cny-7s9-9di", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"cny-7s9-9di\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with hostmap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:43.296Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_iframe_widget-1731699163", + "widgets": [ + { + "definition": { + "type": "iframe", + "url": "https://docs.datadoghq.com/api/latest/" + }, + "layout": { + "height": 12, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"y65-35v-xh5\",\"title\":\"Test-Create_a_new_dashboard_with_iframe_widget-1731699163\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/y65-35v-xh5/test-createanewdashboardwithiframewidget-1731699163\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"type\":\"iframe\",\"url\":\"https://docs.datadoghq.com/api/latest/\"},\"layout\":{\"height\":12,\"width\":12,\"x\":0,\"y\":0},\"id\":1537588948372026}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:43.415569+00:00\",\"modified_at\":\"2024-11-15T19:32:43.415569+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/y65-35v-xh5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"y65-35v-xh5\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with iframe widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:43.681Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_image_widget-1731699163", + "widgets": [ + { + "definition": { + "sizing": "cover", + "type": "image", + "url": "https://example.com/image.png" + }, + "layout": { + "height": 12, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"pep-4f2-6my\",\"title\":\"Test-Create_a_new_dashboard_with_image_widget-1731699163\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/pep-4f2-6my/test-createanewdashboardwithimagewidget-1731699163\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"sizing\":\"cover\",\"type\":\"image\",\"url\":\"https://example.com/image.png\"},\"layout\":{\"height\":12,\"width\":12,\"x\":0,\"y\":0},\"id\":560642460565424}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:43.805437+00:00\",\"modified_at\":\"2024-11-15T19:32:43.805437+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/pep-4f2-6my", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"pep-4f2-6my\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with image widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:31:32.400Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "tags": [ + "tm:foobar" + ], + "title": "Test-Create_a_new_dashboard_with_invalid_team_tags_returns_Bad_Request_response-1772451092", + "widgets": [ + { + "definition": { + "requests": [ + { + "change_type": "absolute", + "compare_to": "hour_before", + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "increase_good": true, + "order_by": "change", + "order_dir": "desc", + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "change" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid tag format. Valid tag keys are: team.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new dashboard with invalid team tags returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:44.164Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_list_stream_widget-1731699164 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "apm_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"p6y-umd-i2r\",\"title\":\"Test-Create_a_new_dashboard_with_list_stream_widget-1731699164 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/p6y-umd-i2r/test-createanewdashboardwithliststreamwidget-1731699164-with-liststream-widget\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"apm_issue_stream\",\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":8526780473770766}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:44.310733+00:00\",\"modified_at\":\"2024-11-15T19:32:44.310733+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/p6y-umd-i2r", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"p6y-umd-i2r\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:44.573Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_list_stream_widget_with_a_valid_sort_parameter_ASC-1731699164 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "event_stream", + "event_size": "l", + "query_string": "", + "sort": { + "column": "timestamp", + "order": "asc" + } + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"hmc-wyw-pru\",\"title\":\"Test-Create_a_new_dashboard_with_list_stream_widget_with_a_valid_sort_parameter_ASC-1731699164 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/hmc-wyw-pru/test-createanewdashboardwithliststreamwidgetwithavalidsortparameterasc-173169916\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"event_stream\",\"event_size\":\"l\",\"query_string\":\"\",\"sort\":{\"column\":\"timestamp\",\"order\":\"asc\"}},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":7981858941071295}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:44.713178+00:00\",\"modified_at\":\"2024-11-15T19:32:44.713178+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/hmc-wyw-pru", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"hmc-wyw-pru\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with list_stream widget with a valid sort parameter ASC", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:44.969Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_list_stream_widget_with_a_valid_sort_parameter_DESC-1731699164 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "event_stream", + "event_size": "l", + "query_string": "", + "sort": { + "column": "timestamp", + "order": "desc" + } + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"8er-jb3-ctv\",\"title\":\"Test-Create_a_new_dashboard_with_list_stream_widget_with_a_valid_sort_parameter_DESC-1731699164 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/8er-jb3-ctv/test-createanewdashboardwithliststreamwidgetwithavalidsortparameterdesc-17316991\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"event_stream\",\"event_size\":\"l\",\"query_string\":\"\",\"sort\":{\"column\":\"timestamp\",\"order\":\"desc\"}},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":6906120015083123}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:45.108245+00:00\",\"modified_at\":\"2024-11-15T19:32:45.108245+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/8er-jb3-ctv", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"8er-jb3-ctv\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with list_stream widget with a valid sort parameter DESC", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:45.388Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_llm_observability_stream_list_stream_widget-1731699165 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "@status", + "width": "compact" + }, + { + "field": "@content.prompt", + "width": "auto" + }, + { + "field": "@content.response.content", + "width": "auto" + }, + { + "field": "timestamp", + "width": "auto" + }, + { + "field": "@ml_app", + "width": "auto" + }, + { + "field": "service", + "width": "auto" + }, + { + "field": "@meta.evaluations.quality", + "width": "auto" + }, + { + "field": "@meta.evaluations.security", + "width": "auto" + }, + { + "field": "@duration", + "width": "auto" + } + ], + "query": { + "data_source": "llm_observability_stream", + "indexes": [], + "query_string": "@event_type:span @parent_id:undefined" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"m3z-v96-834\",\"title\":\"Test-Create_a_new_dashboard_with_llm_observability_stream_list_stream_widget-1731699165 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/m3z-v96-834/test-createanewdashboardwithllmobservabilitystreamliststreamwidget-1731699165-wi\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"@status\",\"width\":\"compact\"},{\"field\":\"@content.prompt\",\"width\":\"auto\"},{\"field\":\"@content.response.content\",\"width\":\"auto\"},{\"field\":\"timestamp\",\"width\":\"auto\"},{\"field\":\"@ml_app\",\"width\":\"auto\"},{\"field\":\"service\",\"width\":\"auto\"},{\"field\":\"@meta.evaluations.quality\",\"width\":\"auto\"},{\"field\":\"@meta.evaluations.security\",\"width\":\"auto\"},{\"field\":\"@duration\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"llm_observability_stream\",\"indexes\":[],\"query_string\":\"@event_type:span @parent_id:undefined\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":618569487157814}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:45.538148+00:00\",\"modified_at\":\"2024-11-15T19:32:45.538148+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/m3z-v96-834", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"m3z-v96-834\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with llm_observability_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:45.816Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_log_stream_widget-1731699165", + "widgets": [ + { + "definition": { + "columns": [ + "host", + "service" + ], + "indexes": [ + "main" + ], + "message_display": "expanded-md", + "query": "", + "show_date_column": true, + "show_message_column": true, + "sort": { + "column": "time", + "order": "desc" + }, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "log_stream" + }, + "layout": { + "height": 36, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"eb9-ta5-d6g\",\"title\":\"Test-Create_a_new_dashboard_with_log_stream_widget-1731699165\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/eb9-ta5-d6g/test-createanewdashboardwithlogstreamwidget-1731699165\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"columns\":[\"host\",\"service\"],\"indexes\":[\"main\"],\"message_display\":\"expanded-md\",\"query\":\"\",\"show_date_column\":true,\"show_message_column\":true,\"sort\":{\"column\":\"time\",\"order\":\"desc\"},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"log_stream\"},\"layout\":{\"height\":36,\"width\":47,\"x\":0,\"y\":0},\"id\":2405546418579587}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:45.939890+00:00\",\"modified_at\":\"2024-11-15T19:32:45.939890+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/eb9-ta5-d6g", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"eb9-ta5-d6g\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with log_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:31:40.100Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_logs_query_table_widget_and_storage_parameter-1772451100 with query table widget and storage parameter", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "cell_display_mode": "bar", + "conditional_formats": [], + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + }, + "storage": "online_archives" + } + ], + "response_format": "scalar", + "sort": { + "count": 50, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "type": "query_table" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"w66-sbc-bdb\",\"title\":\"Test-Create_a_new_dashboard_with_logs_query_table_widget_and_storage_parameter-1772451100 with query table widget and storage parameter\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/w66-sbc-bdb/test-createanewdashboardwithlogsquerytablewidgetandstorageparameter-1772451100-w\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"cell_display_mode\":\"bar\",\"conditional_formats\":[],\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"logs\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"\"},\"storage\":\"online_archives\"}],\"response_format\":\"scalar\",\"sort\":{\"count\":50,\"order_by\":[{\"index\":0,\"order\":\"desc\",\"type\":\"formula\"}]}}],\"type\":\"query_table\"},\"id\":3019646668045057}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:31:40.238249+00:00\",\"modified_at\":\"2026-03-02T11:31:40.238249+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/w66-sbc-bdb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"w66-sbc-bdb\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with logs query table widget and storage parameter", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-12-11T19:18:02.796Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_logs_pattern_stream_list_stream_widget-1733944682 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + }, + { + "field": "message", + "width": "auto" + } + ], + "query": { + "clustering_pattern_field_path": "message", + "data_source": "logs_pattern_stream", + "group_by": [ + { + "facet": "service" + } + ], + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"fue-7tr-ubw\",\"title\":\"Test-Create_a_new_dashboard_with_logs_pattern_stream_list_stream_widget-1733944682 with list_stream widget\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/fue-7tr-ubw/test-createanewdashboardwithlogspatternstreamliststreamwidget-1733944682-with-li\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"},{\"field\":\"message\",\"width\":\"auto\"}],\"query\":{\"clustering_pattern_field_path\":\"message\",\"data_source\":\"logs_pattern_stream\",\"group_by\":[{\"facet\":\"service\"}],\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":4674889262305585}],\"notify_list\":null,\"created_at\":\"2024-12-11T19:18:03.039937+00:00\",\"modified_at\":\"2024-12-11T19:18:03.039937+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/fue-7tr-ubw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"fue-7tr-ubw\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with logs_pattern_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:47.028Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_logs_stream_list_stream_widget_and_storage_parameter-1731699167 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "logs_stream", + "query_string": "", + "storage": "hot" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"dbj-z8f-jps\",\"title\":\"Test-Create_a_new_dashboard_with_logs_stream_list_stream_widget_and_storage_parameter-1731699167 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/dbj-z8f-jps/test-createanewdashboardwithlogsstreamliststreamwidgetandstorageparameter-173169\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"logs_stream\",\"query_string\":\"\",\"storage\":\"hot\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":4149027757234322}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:47.158374+00:00\",\"modified_at\":\"2024-11-15T19:32:47.158374+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/dbj-z8f-jps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"dbj-z8f-jps\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with logs_stream list_stream widget and storage parameter", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:47.436Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_logs_transaction_stream_list_stream_widget-1731699167 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "compute": [ + { + "aggregation": "count", + "facet": "service" + } + ], + "data_source": "logs_transaction_stream", + "group_by": [ + { + "facet": "service" + } + ], + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"6dq-36y-p59\",\"title\":\"Test-Create_a_new_dashboard_with_logs_transaction_stream_list_stream_widget-1731699167 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/6dq-36y-p59/test-createanewdashboardwithlogstransactionstreamliststreamwidget-1731699167-wit\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"compute\":[{\"aggregation\":\"count\",\"facet\":\"service\"}],\"data_source\":\"logs_transaction_stream\",\"group_by\":[{\"facet\":\"service\"}],\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":2144413846825527}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:47.601494+00:00\",\"modified_at\":\"2024-11-15T19:32:47.601494+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/6dq-36y-p59", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"6dq-36y-p59\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with logs_transaction_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-06-30T18:19:26.621Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_logs_transaction_stream_list_stream_widget_and_version-1782843566 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "compute": [ + { + "aggregation": "count", + "facet": "service" + } + ], + "data_source": "logs_transaction_stream", + "group_by": [ + { + "facet": "service" + } + ], + "query_string": "", + "version": "sequential_query" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"72a-q2p-zau\",\"title\":\"Test-Create_a_new_dashboard_with_logs_transaction_stream_list_stream_widget_and_version-1782843566 with list_stream widget\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/72a-q2p-zau/test-createanewdashboardwithlogstransactionstreamliststreamwidgetandversion-1782\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"compute\":[{\"aggregation\":\"count\",\"facet\":\"service\"}],\"data_source\":\"logs_transaction_stream\",\"group_by\":[{\"facet\":\"service\"}],\"query_string\":\"\",\"version\":\"sequential_query\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":7740630869906828}],\"notify_list\":null,\"created_at\":\"2026-06-30T18:19:26.794909+00:00\",\"modified_at\":\"2026-06-30T18:19:26.794909+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/72a-q2p-zau", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"72a-q2p-zau\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with logs_transaction_stream list_stream widget and version", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:47.864Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_manage_status_widget-1731699167", + "widgets": [ + { + "definition": { + "color_preference": "text", + "count": 50, + "display_format": "countsAndList", + "hide_zero_counts": true, + "query": "", + "show_last_triggered": false, + "sort": "status,asc", + "start": 0, + "summary_type": "monitors", + "type": "manage_status" + }, + "layout": { + "height": 25, + "width": 50, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"5qz-2zt-tj6\",\"title\":\"Test-Create_a_new_dashboard_with_manage_status_widget-1731699167\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/5qz-2zt-tj6/test-createanewdashboardwithmanagestatuswidget-1731699167\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"color_preference\":\"text\",\"count\":50,\"display_format\":\"countsAndList\",\"hide_zero_counts\":true,\"query\":\"\",\"show_last_triggered\":false,\"sort\":\"status,asc\",\"start\":0,\"summary_type\":\"monitors\",\"type\":\"manage_status\"},\"layout\":{\"height\":25,\"width\":50,\"x\":0,\"y\":0},\"id\":7923339019354632}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:47.979194+00:00\",\"modified_at\":\"2024-11-15T19:32:47.979194+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/5qz-2zt-tj6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"5qz-2zt-tj6\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with manage_status widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:48.241Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_manage_status_widget_and_show_priority_parameter-1731699168", + "widgets": [ + { + "definition": { + "color_preference": "text", + "count": 50, + "display_format": "countsAndList", + "hide_zero_counts": true, + "query": "", + "show_last_triggered": false, + "show_priority": false, + "sort": "priority,asc", + "start": 0, + "summary_type": "monitors", + "type": "manage_status" + }, + "layout": { + "height": 25, + "width": 50, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"u5w-9hp-tch\",\"title\":\"Test-Create_a_new_dashboard_with_manage_status_widget_and_show_priority_parameter-1731699168\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/u5w-9hp-tch/test-createanewdashboardwithmanagestatuswidgetandshowpriorityparameter-173169916\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"color_preference\":\"text\",\"count\":50,\"display_format\":\"countsAndList\",\"hide_zero_counts\":true,\"query\":\"\",\"show_last_triggered\":false,\"show_priority\":false,\"sort\":\"priority,asc\",\"start\":0,\"summary_type\":\"monitors\",\"type\":\"manage_status\"},\"layout\":{\"height\":25,\"width\":50,\"x\":0,\"y\":0},\"id\":2266858598981736}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:48.341884+00:00\",\"modified_at\":\"2024-11-15T19:32:48.341884+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/u5w-9hp-tch", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"u5w-9hp-tch\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with manage_status widget and show_priority parameter", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:48.573Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_note_widget-1731699168", + "widgets": [ + { + "definition": { + "content": "# Example Note", + "type": "note" + }, + "layout": { + "height": 24, + "width": 18, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"9e4-auv-jbr\",\"title\":\"Test-Create_a_new_dashboard_with_note_widget-1731699168\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/9e4-auv-jbr/test-createanewdashboardwithnotewidget-1731699168\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"content\":\"# Example Note\",\"type\":\"note\"},\"layout\":{\"height\":24,\"width\":18,\"x\":0,\"y\":0},\"id\":2240709340551044}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:48.693496+00:00\",\"modified_at\":\"2024-11-15T19:32:48.693496+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/9e4-auv-jbr", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"9e4-auv-jbr\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with note widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-04-30T15:58:43.378Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_point_plot_widget-1777564723", + "widgets": [ + { + "definition": { + "requests": [ + { + "projection": { + "dimensions": [ + { + "column": "host", + "dimension": "group" + }, + { + "column": "@duration", + "dimension": "y" + } + ], + "type": "point_plot" + }, + "query": { + "data_source": "logs", + "query_string": "service:web-store" + }, + "request_type": "data_projection" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "point_plot" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"w8g-9wi-uav\",\"title\":\"Test-Create_a_new_dashboard_with_point_plot_widget-1777564723\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/w8g-9wi-uav/test-createanewdashboardwithpointplotwidget-1777564723\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"projection\":{\"dimensions\":[{\"column\":\"host\",\"dimension\":\"group\"},{\"column\":\"@duration\",\"dimension\":\"y\"}],\"type\":\"point_plot\"},\"query\":{\"data_source\":\"logs\",\"query_string\":\"service:web-store\"},\"request_type\":\"data_projection\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"point_plot\"},\"id\":1386353259406476}],\"notify_list\":null,\"created_at\":\"2026-04-30T15:58:43.645158+00:00\",\"modified_at\":\"2026-04-30T15:58:43.645158+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/w8g-9wi-uav", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"w8g-9wi-uav\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with point_plot widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:48.941Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "Test-Create_a_new_dashboard_with_powerpack_widget-1731699168", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/powerpacks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"powerpack\",\"id\":\"65c564d0-a388-11ef-a7cd-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_new_dashboard_with_powerpack_widget-1731699168\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":5420081943814583}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"email\":\"frog@datadoghq.com\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "description", + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_powerpack_widget-1731699168 with powerpack widget", + "widgets": [ + { + "definition": { + "powerpack_id": "65c564d0-a388-11ef-a7cd-da7ad0900002", + "template_variables": { + "controlled_by_powerpack": [ + { + "name": "foo", + "prefix": "bar", + "values": [ + "baz", + "qux", + "quuz" + ] + } + ], + "controlled_externally": [] + }, + "type": "powerpack" + }, + "layout": { + "height": 2, + "is_column_break": false, + "width": 2, + "x": 1, + "y": 1 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"zb2-4ez-tuk\",\"title\":\"Test-Create_a_new_dashboard_with_powerpack_widget-1731699168 with powerpack widget\",\"description\":\"description\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/zb2-4ez-tuk/test-createanewdashboardwithpowerpackwidget-1731699168-with-powerpack-widget\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"powerpack_id\":\"65c564d0-a388-11ef-a7cd-da7ad0900002\",\"template_variables\":{\"controlled_by_powerpack\":[{\"name\":\"foo\",\"prefix\":\"bar\",\"values\":[\"baz\",\"qux\",\"quuz\"]}],\"controlled_externally\":[]},\"type\":\"powerpack\"},\"layout\":{\"height\":2,\"is_column_break\":false,\"width\":2,\"x\":1,\"y\":1},\"id\":648463768842724}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:49.465110+00:00\",\"modified_at\":\"2024-11-15T19:32:49.465110+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/zb2-4ez-tuk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"zb2-4ez-tuk\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/powerpacks/65c564d0-a388-11ef-a7cd-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new dashboard with powerpack widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:50.050Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_query_table_widget-1731699170", + "widgets": [ + { + "definition": { + "has_search_bar": "auto", + "requests": [ + { + "formulas": [ + { + "cell_display_mode": "bar", + "conditional_formats": [], + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {host}" + } + ], + "response_format": "scalar", + "sort": { + "count": 500, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 32, + "width": 54, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"7q6-h26-j3u\",\"title\":\"Test-Create_a_new_dashboard_with_query_table_widget-1731699170\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/7q6-h26-j3u/test-createanewdashboardwithquerytablewidget-1731699170\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"has_search_bar\":\"auto\",\"requests\":[{\"formulas\":[{\"cell_display_mode\":\"bar\",\"conditional_formats\":[],\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {host}\"}],\"response_format\":\"scalar\",\"sort\":{\"count\":500,\"order_by\":[{\"index\":0,\"order\":\"desc\",\"type\":\"formula\"}]}}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_table\"},\"layout\":{\"height\":32,\"width\":54,\"x\":0,\"y\":0},\"id\":6518783990420616}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:50.203807+00:00\",\"modified_at\":\"2024-11-15T19:32:50.203807+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/7q6-h26-j3u", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"7q6-h26-j3u\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with query_table widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-02-14T13:36:57.006Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_query_table_widget_and_cell_display_mode_is_trend-1739540217", + "widgets": [ + { + "definition": { + "has_search_bar": "auto", + "requests": [ + { + "formulas": [ + { + "cell_display_mode": "trend", + "cell_display_mode_options": { + "trend_type": "line", + "y_scale": "shared" + }, + "conditional_formats": [], + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {host}" + } + ], + "response_format": "scalar", + "sort": { + "count": 500, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 32, + "width": 54, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"qw6-574-sem\",\"title\":\"Test-Create_a_new_dashboard_with_query_table_widget_and_cell_display_mode_is_trend-1739540217\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"free\",\"url\":\"/dashboard/qw6-574-sem/test-createanewdashboardwithquerytablewidgetandcelldisplaymodeistrend-1739540217\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"has_search_bar\":\"auto\",\"requests\":[{\"formulas\":[{\"cell_display_mode\":\"trend\",\"cell_display_mode_options\":{\"trend_type\":\"line\",\"y_scale\":\"shared\"},\"conditional_formats\":[],\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {host}\"}],\"response_format\":\"scalar\",\"sort\":{\"count\":500,\"order_by\":[{\"index\":0,\"order\":\"desc\",\"type\":\"formula\"}]}}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_table\"},\"layout\":{\"height\":32,\"width\":54,\"x\":0,\"y\":0},\"id\":6048610427342909}],\"notify_list\":[],\"created_at\":\"2025-02-14T13:36:57.493950+00:00\",\"modified_at\":\"2025-02-14T13:36:57.493950+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/qw6-574-sem", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"qw6-574-sem\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with query_table widget and cell_display_mode is trend", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:50.487Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_query_table_widget_and_text_formatting-1731699170", + "widgets": [ + { + "definition": { + "has_search_bar": "never", + "requests": [ + { + "formulas": [], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:aws.stream.globalaccelerator.processed_bytes_in{*} by {aws_account,acceleratoripaddress}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query2", + "query": "avg:aws.stream.globalaccelerator.processed_bytes_out{*} by {aws_account,acceleratoripaddress}" + } + ], + "response_format": "scalar", + "text_formats": [ + [ + { + "match": { + "type": "is", + "value": "fruit" + }, + "palette": "white_on_red", + "replace": { + "type": "all", + "with": "vegetable" + } + }, + { + "custom_bg_color": "#632ca6", + "match": { + "type": "is", + "value": "animal" + }, + "palette": "custom_bg" + }, + { + "match": { + "type": "is", + "value": "robot" + }, + "palette": "red_on_white" + }, + { + "match": { + "type": "is", + "value": "ai" + }, + "palette": "yellow_on_white" + } + ], + [ + { + "match": { + "type": "is_not", + "value": "xyz" + }, + "palette": "white_on_yellow" + } + ], + [ + { + "match": { + "type": "contains", + "value": "test" + }, + "palette": "white_on_green", + "replace": { + "type": "all", + "with": "vegetable" + } + } + ], + [ + { + "match": { + "type": "does_not_contain", + "value": "blah" + }, + "palette": "black_on_light_red" + } + ], + [ + { + "match": { + "type": "starts_with", + "value": "abc" + }, + "palette": "black_on_light_yellow" + } + ], + [ + { + "match": { + "type": "ends_with", + "value": "xyz" + }, + "palette": "black_on_light_green" + }, + { + "match": { + "type": "ends_with", + "value": "zzz" + }, + "palette": "green_on_white" + }, + { + "custom_fg_color": "#632ca6", + "match": { + "type": "is", + "value": "animal" + }, + "palette": "custom_text" + } + ] + ] + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_table" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"aj4-ak4-dgu\",\"title\":\"Test-Create_a_new_dashboard_with_query_table_widget_and_text_formatting-1731699170\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/aj4-ak4-dgu/test-createanewdashboardwithquerytablewidgetandtextformatting-1731699170\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"has_search_bar\":\"never\",\"requests\":[{\"formulas\":[],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:aws.stream.globalaccelerator.processed_bytes_in{*} by {aws_account,acceleratoripaddress}\"},{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query2\",\"query\":\"avg:aws.stream.globalaccelerator.processed_bytes_out{*} by {aws_account,acceleratoripaddress}\"}],\"response_format\":\"scalar\",\"text_formats\":[[{\"match\":{\"type\":\"is\",\"value\":\"fruit\"},\"palette\":\"white_on_red\",\"replace\":{\"type\":\"all\",\"with\":\"vegetable\"}},{\"custom_bg_color\":\"#632ca6\",\"match\":{\"type\":\"is\",\"value\":\"animal\"},\"palette\":\"custom_bg\"},{\"match\":{\"type\":\"is\",\"value\":\"robot\"},\"palette\":\"red_on_white\"},{\"match\":{\"type\":\"is\",\"value\":\"ai\"},\"palette\":\"yellow_on_white\"}],[{\"match\":{\"type\":\"is_not\",\"value\":\"xyz\"},\"palette\":\"white_on_yellow\"}],[{\"match\":{\"type\":\"contains\",\"value\":\"test\"},\"palette\":\"white_on_green\",\"replace\":{\"type\":\"all\",\"with\":\"vegetable\"}}],[{\"match\":{\"type\":\"does_not_contain\",\"value\":\"blah\"},\"palette\":\"black_on_light_red\"}],[{\"match\":{\"type\":\"starts_with\",\"value\":\"abc\"},\"palette\":\"black_on_light_yellow\"}],[{\"match\":{\"type\":\"ends_with\",\"value\":\"xyz\"},\"palette\":\"black_on_light_green\"},{\"match\":{\"type\":\"ends_with\",\"value\":\"zzz\"},\"palette\":\"green_on_white\"},{\"custom_fg_color\":\"#632ca6\",\"match\":{\"type\":\"is\",\"value\":\"animal\"},\"palette\":\"custom_text\"}]]}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_table\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":2029648185914619}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:50.640850+00:00\",\"modified_at\":\"2024-11-15T19:32:50.640850+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/aj4-ak4-dgu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"aj4-ak4-dgu\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with query_table widget and text formatting", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-23T18:59:42.079Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_query_value_widget-1774292382", + "widgets": [ + { + "definition": { + "autoscale": true, + "description": "Example widget description", + "precision": 2, + "requests": [ + { + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "query_value" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"uqx-8vk-iqr\",\"title\":\"Test-Create_a_new_dashboard_with_query_value_widget-1774292382\",\"description\":\"\",\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"free\",\"url\":\"/dashboard/uqx-8vk-iqr/test-createanewdashboardwithqueryvaluewidget-1774292382\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"autoscale\":true,\"description\":\"Example widget description\",\"precision\":2,\"requests\":[{\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*}\"}],\"response_format\":\"scalar\"}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"query_value\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":4377270537334340}],\"notify_list\":[],\"created_at\":\"2026-03-23T18:59:42.225807+00:00\",\"modified_at\":\"2026-03-23T18:59:42.225807+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/uqx-8vk-iqr", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"uqx-8vk-iqr\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with query_value widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:51.468Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_rum_issue_stream_list_stream_widget-1731699171 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "rum_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ce9-y6g-66s\",\"title\":\"Test-Create_a_new_dashboard_with_rum_issue_stream_list_stream_widget-1731699171 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/ce9-y6g-66s/test-createanewdashboardwithrumissuestreamliststreamwidget-1731699171-with-lists\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"rum_issue_stream\",\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":6059436646329395}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:51.588133+00:00\",\"modified_at\":\"2024-11-15T19:32:51.588133+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ce9-y6g-66s", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ce9-y6g-66s\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with rum_issue_stream list_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:51.836Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_run_workflow_widget-1731699171", + "widgets": [ + { + "definition": { + "inputs": [ + { + "name": "environment", + "value": "$env.value" + } + ], + "time": {}, + "title": "Run workflow title", + "title_align": "left", + "title_size": "16", + "type": "run_workflow", + "workflow_id": "2e055f16-8b6a-4cdd-b452-17a34c44b160" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"iis-hmn-pzf\",\"title\":\"Test-Create_a_new_dashboard_with_run_workflow_widget-1731699171\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/iis-hmn-pzf/test-createanewdashboardwithrunworkflowwidget-1731699171\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"inputs\":[{\"name\":\"environment\",\"value\":\"$env.value\"}],\"time\":{},\"title\":\"Run workflow title\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"run_workflow\",\"workflow_id\":\"2e055f16-8b6a-4cdd-b452-17a34c44b160\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":5837412826936459}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:51.982136+00:00\",\"modified_at\":\"2024-11-15T19:32:51.982136+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/iis-hmn-pzf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"iis-hmn-pzf\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with run-workflow widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-06-02T12:32:21.161Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_sankey_widget_and_RUM_data_source-1780403541", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "rum", + "mode": "source", + "query_string": "@type:view" + }, + "request_type": "sankey" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "sankey" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"js9-hx8-hsy\",\"title\":\"Test-Create_a_new_dashboard_with_sankey_widget_and_RUM_data_source-1780403541\",\"description\":\"\",\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"free\",\"url\":\"/dashboard/js9-hx8-hsy/test-createanewdashboardwithsankeywidgetandrumdatasource-1780403541\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"data_source\":\"rum\",\"mode\":\"source\",\"query_string\":\"@type:view\"},\"request_type\":\"sankey\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"sankey\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":8566545221037666}],\"notify_list\":[],\"created_at\":\"2026-06-02T12:32:21.497655+00:00\",\"modified_at\":\"2026-06-02T12:32:21.497655+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/js9-hx8-hsy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"js9-hx8-hsy\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with sankey widget and RUM data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-01-02T15:26:45.908Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_sankey_widget_and_network_data_source-1767367605", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "network", + "group_by": [ + "source", + "destination" + ], + "limit": 100, + "query_string": "*" + }, + "request_type": "netflow_sankey" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "sankey" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ngh-vn6-nqq\",\"title\":\"Test-Create_a_new_dashboard_with_sankey_widget_and_network_data_source-1767367605\",\"description\":\"\",\"author_handle\":\"sophie.cao@datadoghq.com\",\"author_name\":\"Sophie Cao\",\"layout_type\":\"free\",\"url\":\"/dashboard/ngh-vn6-nqq/test-createanewdashboardwithsankeywidgetandnetworkdatasource-1767367605\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"data_source\":\"network\",\"group_by\":[\"source\",\"destination\"],\"limit\":100,\"query_string\":\"*\"},\"request_type\":\"netflow_sankey\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"sankey\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":4009219214466684}],\"notify_list\":[],\"created_at\":\"2026-01-02T15:26:46.118136+00:00\",\"modified_at\":\"2026-01-02T15:26:46.118136+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ngh-vn6-nqq", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ngh-vn6-nqq\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with sankey widget and network data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-01-02T15:27:06.013Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_sankey_widget_and_product_analytics_data_source-1767367626", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "product_analytics", + "mode": "source", + "query_string": "@type:session" + }, + "request_type": "sankey" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "sankey" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"y6u-yab-bdi\",\"title\":\"Test-Create_a_new_dashboard_with_sankey_widget_and_product_analytics_data_source-1767367626\",\"description\":\"\",\"author_handle\":\"sophie.cao@datadoghq.com\",\"author_name\":\"Sophie Cao\",\"layout_type\":\"free\",\"url\":\"/dashboard/y6u-yab-bdi/test-createanewdashboardwithsankeywidgetandproductanalyticsdatasource-1767367626\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"data_source\":\"product_analytics\",\"mode\":\"source\",\"query_string\":\"@type:session\"},\"request_type\":\"sankey\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"sankey\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":7919851856522238}],\"notify_list\":[],\"created_at\":\"2026-01-02T15:27:06.177915+00:00\",\"modified_at\":\"2026-01-02T15:27:06.177915+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/y6u-yab-bdi", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"y6u-yab-bdi\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with sankey widget and product analytics data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:52.260Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_scatterplot_widget-1731699172", + "widgets": [ + { + "definition": { + "color_by_groups": [], + "requests": { + "table": { + "formulas": [ + { + "alias": "", + "dimension": "x", + "formula": "query1" + }, + { + "alias": "", + "dimension": "y", + "formula": "query2" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + }, + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query2", + "query": "avg:system.mem.used{*} by {service}" + } + ], + "response_format": "scalar" + } + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "scatterplot", + "xaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + }, + "yaxis": { + "include_zero": true, + "max": "auto", + "min": "auto", + "scale": "linear" + } + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"s39-kcu-kcv\",\"title\":\"Test-Create_a_new_dashboard_with_scatterplot_widget-1731699172\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/s39-kcu-kcv/test-createanewdashboardwithscatterplotwidget-1731699172\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"color_by_groups\":[],\"requests\":{\"table\":{\"formulas\":[{\"alias\":\"\",\"dimension\":\"x\",\"formula\":\"query1\"},{\"alias\":\"\",\"dimension\":\"y\",\"formula\":\"query2\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {service}\"},{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query2\",\"query\":\"avg:system.mem.used{*} by {service}\"}],\"response_format\":\"scalar\"}},\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"scatterplot\",\"xaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"},\"yaxis\":{\"include_zero\":true,\"max\":\"auto\",\"min\":\"auto\",\"scale\":\"linear\"}},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":6421549335837738}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:52.488297+00:00\",\"modified_at\":\"2024-11-15T19:32:52.488297+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/s39-kcu-kcv", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"s39-kcu-kcv\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with scatterplot widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:52.734Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_servicemap_widget-1731699172", + "widgets": [ + { + "definition": { + "filters": [ + "env:none", + "environment:*" + ], + "service": "", + "title": "", + "title_align": "left", + "title_size": "16", + "type": "servicemap" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"npz-y6x-z4g\",\"title\":\"Test-Create_a_new_dashboard_with_servicemap_widget-1731699172\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/npz-y6x-z4g/test-createanewdashboardwithservicemapwidget-1731699172\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"filters\":[\"env:none\",\"environment:*\"],\"service\":\"\",\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"servicemap\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":4704608837901441}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:52.841936+00:00\",\"modified_at\":\"2024-11-15T19:32:52.841936+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/npz-y6x-z4g", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"npz-y6x-z4g\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with servicemap widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:53.101Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Create_a_new_dashboard_with_slo_list_widget-1731699173", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"89fa8ea5e6045df7b43f58ab5a9887cc\",\"name\":\"Test-Create_a_new_dashboard_with_slo_list_widget-1731699173\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1731699173,\"modified_at\":1731699173}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_slo_list_widget-1731699173", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "limit": 75, + "query_string": "env:prod AND service:my-app" + }, + "request_type": "slo_list" + } + ], + "title_align": "left", + "title_size": "16", + "type": "slo_list" + }, + "layout": { + "height": 21, + "width": 60, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"rnh-pf5-uu6\",\"title\":\"Test-Create_a_new_dashboard_with_slo_list_widget-1731699173\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/rnh-pf5-uu6/test-createanewdashboardwithslolistwidget-1731699173\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"limit\":75,\"query_string\":\"env:prod AND service:my-app\"},\"request_type\":\"slo_list\"}],\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"slo_list\"},\"layout\":{\"height\":21,\"width\":60,\"x\":0,\"y\":0},\"id\":8288298613606134}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:53.410595+00:00\",\"modified_at\":\"2024-11-15T19:32:53.410595+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/rnh-pf5-uu6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"rnh-pf5-uu6\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/89fa8ea5e6045df7b43f58ab5a9887cc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"89fa8ea5e6045df7b43f58ab5a9887cc\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with slo list widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:53.875Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Create_a_new_dashboard_with_slo_list_widget_with_sort-1731699173", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"7ae31bf46704510e973d8bf6a1c37430\",\"name\":\"Test-Create_a_new_dashboard_with_slo_list_widget_with_sort-1731699173\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1731699174,\"modified_at\":1731699174}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_slo_list_widget_with_sort-1731699173", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "limit": 75, + "query_string": "env:prod AND service:my-app", + "sort": [ + { + "column": "status.sli", + "order": "asc" + } + ] + }, + "request_type": "slo_list" + } + ], + "title_align": "left", + "title_size": "16", + "type": "slo_list" + }, + "layout": { + "height": 21, + "width": 60, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"s9d-ebt-cfz\",\"title\":\"Test-Create_a_new_dashboard_with_slo_list_widget_with_sort-1731699173\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/s9d-ebt-cfz/test-createanewdashboardwithslolistwidgetwithsort-1731699173\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"limit\":75,\"query_string\":\"env:prod AND service:my-app\",\"sort\":[{\"column\":\"status.sli\",\"order\":\"asc\"}]},\"request_type\":\"slo_list\"}],\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"slo_list\"},\"layout\":{\"height\":21,\"width\":60,\"x\":0,\"y\":0},\"id\":2594196925720924}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:54.206516+00:00\",\"modified_at\":\"2024-11-15T19:32:54.206516+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/s9d-ebt-cfz", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"s9d-ebt-cfz\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/7ae31bf46704510e973d8bf6a1c37430", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"7ae31bf46704510e973d8bf6a1c37430\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with slo list widget with sort", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:54.721Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Create_a_new_dashboard_with_slo_widget-1731699174", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"ff0d47f8ee755a4abc061fe92e9978f5\",\"name\":\"Test-Create_a_new_dashboard_with_slo_widget-1731699174\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1731699174,\"modified_at\":1731699174}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_slo_widget-1731699174", + "widgets": [ + { + "definition": { + "additional_query_filters": "!host:excluded_host", + "global_time_target": "0", + "show_error_budget": true, + "slo_id": "ff0d47f8ee755a4abc061fe92e9978f5", + "time_windows": [ + "7d" + ], + "title_align": "left", + "title_size": "16", + "type": "slo", + "view_mode": "overall", + "view_type": "detail" + }, + "layout": { + "height": 21, + "width": 60, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"87d-8cv-ee8\",\"title\":\"Test-Create_a_new_dashboard_with_slo_widget-1731699174\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/87d-8cv-ee8/test-createanewdashboardwithslowidget-1731699174\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"additional_query_filters\":\"!host:excluded_host\",\"global_time_target\":\"0\",\"show_error_budget\":true,\"slo_id\":\"ff0d47f8ee755a4abc061fe92e9978f5\",\"time_windows\":[\"7d\"],\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"slo\",\"view_mode\":\"overall\",\"view_type\":\"detail\"},\"layout\":{\"height\":21,\"width\":60,\"x\":0,\"y\":0},\"id\":7311206439565839}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:54.989103+00:00\",\"modified_at\":\"2024-11-15T19:32:54.989103+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/87d-8cv-ee8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"87d-8cv-ee8\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/ff0d47f8ee755a4abc061fe92e9978f5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"ff0d47f8ee755a4abc061fe92e9978f5\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with slo widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:55.621Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "ordered", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_split_graph_widget-1731699175", + "widgets": [ + { + "definition": { + "has_uniform_y_axes": true, + "size": "md", + "source_widget_definition": { + "requests": [ + { + "display_type": "line", + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "split_config": { + "limit": 24, + "sort": { + "compute": { + "aggregation": "sum", + "metric": "system.cpu.user" + }, + "order": "desc" + }, + "split_dimensions": [ + { + "one_graph_per": "service" + } + ], + "static_splits": [ + [ + { + "tag_key": "service", + "tag_values": [ + "cassandra" + ] + }, + { + "tag_key": "datacenter", + "tag_values": [] + } + ], + [ + { + "tag_key": "demo", + "tag_values": [ + "env" + ] + } + ] + ] + }, + "title": "", + "type": "split_group" + }, + "layout": { + "height": 8, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"xcs-593-5gu\",\"title\":\"Test-Create_a_new_dashboard_with_split_graph_widget-1731699175\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/xcs-593-5gu/test-createanewdashboardwithsplitgraphwidget-1731699175\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"has_uniform_y_axes\":true,\"size\":\"md\",\"source_widget_definition\":{\"requests\":[{\"display_type\":\"line\",\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*}\"}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"timeseries\"},\"split_config\":{\"limit\":24,\"sort\":{\"compute\":{\"aggregation\":\"sum\",\"metric\":\"system.cpu.user\"},\"order\":\"desc\"},\"split_dimensions\":[{\"one_graph_per\":\"service\"}],\"static_splits\":[[{\"tag_key\":\"service\",\"tag_values\":[\"cassandra\"]},{\"tag_key\":\"datacenter\",\"tag_values\":[]}],[{\"tag_key\":\"demo\",\"tag_values\":[\"env\"]}]]},\"title\":\"\",\"type\":\"split_group\"},\"layout\":{\"height\":8,\"width\":12,\"x\":0,\"y\":0},\"id\":8349230773327441}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:56.317258+00:00\",\"modified_at\":\"2024-11-15T19:32:56.317258+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/xcs-593-5gu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"xcs-593-5gu\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with split graph widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:56.605Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_sunburst_widget_and_metrics_data-1731699176", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "sum", + "data_source": "metrics", + "name": "query1", + "query": "sum:system.mem.used{*} by {service}" + } + ], + "response_format": "scalar", + "style": { + "palette": "dog_classic" + } + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "sunburst" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"qfx-a3h-kme\",\"title\":\"Test-Create_a_new_dashboard_with_sunburst_widget_and_metrics_data-1731699176\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/qfx-a3h-kme/test-createanewdashboardwithsunburstwidgetandmetricsdata-1731699176\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"sum\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"sum:system.mem.used{*} by {service}\"}],\"response_format\":\"scalar\",\"style\":{\"palette\":\"dog_classic\"}}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"sunburst\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":7225852611844225}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:56.779070+00:00\",\"modified_at\":\"2024-11-15T19:32:56.779070+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/qfx-a3h-kme", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"qfx-a3h-kme\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with sunburst widget and metrics data", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:31:48.054Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "tags": [ + "team:foobar" + ], + "title": "Test-Create_a_new_dashboard_with_team_tags_returns_OK_response-1772451108", + "widgets": [ + { + "definition": { + "requests": [ + { + "change_type": "absolute", + "compare_to": "hour_before", + "formulas": [ + { + "formula": "hour_before(query1)" + }, + { + "formula": "query1" + } + ], + "increase_good": true, + "order_by": "change", + "order_dir": "desc", + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "" + } + } + ], + "response_format": "scalar" + } + ], + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "change" + }, + "layout": { + "height": 4, + "width": 4, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"9y6-h2y-3cw\",\"title\":\"Test-Create_a_new_dashboard_with_team_tags_returns_OK_response-1772451108\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/9y6-h2y-3cw/test-createanewdashboardwithteamtagsreturnsokresponse-1772451108\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"change_type\":\"absolute\",\"compare_to\":\"hour_before\",\"formulas\":[{\"formula\":\"hour_before(query1)\"},{\"formula\":\"query1\"}],\"increase_good\":true,\"order_by\":\"change\",\"order_dir\":\"desc\",\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"logs\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"\"}}],\"response_format\":\"scalar\"}],\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"change\"},\"layout\":{\"height\":4,\"width\":4,\"x\":0,\"y\":0},\"id\":3025185757829094}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:31:48.191609+00:00\",\"modified_at\":\"2026-03-02T11:31:48.191609+00:00\",\"tags\":[\"team:foobar\"],\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/9y6-h2y-3cw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"9y6-h2y-3cw\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with team tags returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:57.452Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "default": "my-host", + "defaults": [ + "my-host" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"'template_variables' is invalid\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new dashboard with template variable defaults and default returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:57.541Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "defaults": [ + "my-host" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"49a-9qv-6v9\",\"title\":\"\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/49a-9qv-6v9/\",\"is_read_only\":false,\"template_variables\":[{\"available_values\":[\"my-host\",\"host1\",\"host2\"],\"defaults\":[\"my-host\"],\"name\":\"host1\",\"prefix\":\"host\"}],\"widgets\":[{\"definition\":{\"requests\":{\"fill\":{\"q\":\"avg:system.cpu.user{*}\"}},\"type\":\"hostmap\"},\"id\":6949738169108876}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:57.743500+00:00\",\"modified_at\":\"2024-11-15T19:32:57.743500+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/49a-9qv-6v9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"49a-9qv-6v9\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with template variable defaults returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:57.985Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "defaults": [ + "" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Minimum length of parameter 'defaults' should be 1\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new dashboard with template variable defaults whose value has no length returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:58.080Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variable_presets": [ + { + "name": "my saved view", + "template_variables": [ + { + "name": "datacenter", + "value": "*", + "values": [ + "*" + ] + } + ] + } + ], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "defaults": [ + "my-host" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"'template_variables' value '{'name': 'datacenter', 'value': '*', 'values': ['*']}' is invalid\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new dashboard with template variable presets using values and value returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:58.168Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variable_presets": [ + { + "name": "my saved view", + "template_variables": [ + { + "name": "datacenter", + "values": [ + "*", + "my-host" + ] + } + ] + } + ], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "defaults": [ + "my-host" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"87t-neh-qip\",\"title\":\"\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/87t-neh-qip/\",\"is_read_only\":false,\"template_variables\":[{\"available_values\":[\"my-host\",\"host1\",\"host2\"],\"defaults\":[\"my-host\"],\"name\":\"host1\",\"prefix\":\"host\"}],\"widgets\":[{\"definition\":{\"requests\":{\"fill\":{\"q\":\"avg:system.cpu.user{*}\"}},\"type\":\"hostmap\"},\"id\":8760637497021649}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:58.513090+00:00\",\"modified_at\":\"2024-11-15T19:32:58.513090+00:00\",\"template_variable_presets\":[{\"name\":\"my saved view\",\"template_variables\":[{\"name\":\"datacenter\",\"values\":[\"*\",\"my-host\"]}]}],\"reflow_type\":\"auto\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/87t-neh-qip", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"87t-neh-qip\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with template variable presets using values returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2022-09-14T16:53:46.508Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "is_read_only": false, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variable_presets": [ + { + "name": "my saved view", + "template_variables": [ + { + "name": "datacenter", + "values": [] + } + ] + } + ], + "template_variables": [ + { + "available_values": [ + "my-host", + "host1", + "host2" + ], + "defaults": [ + "my-host" + ], + "name": "host1", + "prefix": "host" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Minimum number of elements in parameter 'values' should be 1\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new dashboard with template variable presets using values with no length returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-06-30T15:47:16.966Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": null, + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "auto", + "restricted_roles": [], + "template_variables": [ + { + "available_values": [ + "service", + "datacenter", + "env" + ], + "defaults": [ + "service", + "datacenter" + ], + "name": "group_by_var", + "type": "group" + } + ], + "title": "", + "widgets": [ + { + "definition": { + "requests": { + "fill": { + "q": "avg:system.cpu.user{*}" + } + }, + "type": "hostmap" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"zb6-rsj-zej\",\"title\":\"\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/zb6-rsj-zej/\",\"template_variables\":[{\"available_values\":[\"service\",\"datacenter\",\"env\"],\"defaults\":[\"service\",\"datacenter\"],\"name\":\"group_by_var\",\"type\":\"group\"}],\"widgets\":[{\"definition\":{\"requests\":{\"fill\":{\"q\":\"avg:system.cpu.user{*}\"}},\"type\":\"hostmap\"},\"id\":2230877325217406}],\"notify_list\":[],\"created_at\":\"2025-06-30T15:47:17.444093+00:00\",\"modified_at\":\"2025-06-30T15:47:17.444093+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/zb6-rsj-zej", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"zb6-rsj-zej\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with template variable type field returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:58.884Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "Test-Create_a_new_dashboard_with_timeseries_widget_and_formula_style_attributes-1731699178 with formula style", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1", + "style": { + "palette": "classic", + "palette_index": 4 + } + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "styled timeseries", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"z42-55x-nbm\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_and_formula_style_attributes-1731699178 with formula style\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/z42-55x-nbm/test-createanewdashboardwithtimeserieswidgetandformulastyleattributes-1731699178\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\",\"style\":{\"palette\":\"classic\",\"palette_index\":4}}],\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*}\"}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{},\"title\":\"styled timeseries\",\"type\":\"timeseries\"},\"id\":5160122298563606}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:59.036995+00:00\",\"modified_at\":\"2024-11-15T19:32:59.036995+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/z42-55x-nbm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"z42-55x-nbm\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with timeseries widget and formula style attributes", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:59.286Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_timeseries_widget_containing_style_attributes-1731699179 with timeseries widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "bars", + "on_right_yaxis": false, + "q": "sum:trace.test.errors{env:prod,service:datadog-api-spec} by {resource_name}.as_count()", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "warm" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"3g2-7q5-mxv\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_containing_style_attributes-1731699179 with timeseries widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/3g2-7q5-mxv/test-createanewdashboardwithtimeserieswidgetcontainingstyleattributes-1731699179\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"bars\",\"on_right_yaxis\":false,\"q\":\"sum:trace.test.errors{env:prod,service:datadog-api-spec} by {resource_name}.as_count()\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"warm\"}}],\"type\":\"timeseries\"},\"id\":6683223163247608}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:32:59.447813+00:00\",\"modified_at\":\"2024-11-15T19:32:59.447813+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/3g2-7q5-mxv", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"3g2-7q5-mxv\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with timeseries widget containing style attributes", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T17:38:31.339Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_timeseries_widget_using_has_value_labels-1772473111 with has_value_labels", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.cpu.user{*} by {host}", + "style": { + "has_value_labels": true, + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ue9-kuc-ix2\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_has_value_labels-1772473111 with has_value_labels\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/ue9-kuc-ix2/test-createanewdashboardwithtimeserieswidgetusinghasvaluelabels-1772473111-with\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"has_value_labels\":true,\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"},\"id\":3800027122356131}],\"notify_list\":null,\"created_at\":\"2026-03-02T17:38:31.488630+00:00\",\"modified_at\":\"2026-03-02T17:38:31.488630+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ue9-kuc-ix2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ue9-kuc-ix2\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with timeseries widget using has_value_labels", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-01-20T23:39:22.864Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags-1768952362 with order_by tags", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.cpu.user{*} by {host}", + "style": { + "order_by": "tags", + "palette": "dog_classic" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"2r3-a4g-ubz\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_tags-1768952362 with order_by tags\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/2r3-a4g-ubz/test-createanewdashboardwithtimeserieswidgetusingorderbytags-1768952362-with-ord\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"tags\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"},\"id\":8704189893014651}],\"notify_list\":null,\"created_at\":\"2026-01-20T23:39:22.992533+00:00\",\"modified_at\":\"2026-01-20T23:39:22.992533+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/2r3-a4g-ubz", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"2r3-a4g-ubz\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with timeseries widget using order_by tags", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-01-20T23:39:50.889Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_values-1768952390 with order_by values", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.cpu.user{*} by {host}", + "style": { + "order_by": "values", + "palette": "warm" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"5ee-dqv-ruw\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_using_order_by_values-1768952390 with order_by values\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/5ee-dqv-ruw/test-createanewdashboardwithtimeserieswidgetusingorderbyvalues-1768952390-with-o\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"order_by\":\"values\",\"palette\":\"warm\"}}],\"type\":\"timeseries\"},\"id\":8314193502199768}],\"notify_list\":null,\"created_at\":\"2026-01-20T23:39:51.018015+00:00\",\"modified_at\":\"2026-01-20T23:39:51.018015+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/5ee-dqv-ruw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"5ee-dqv-ruw\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with timeseries widget using order_by values", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-23T18:59:42.707Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "ordered", + "notify_list": [], + "reflow_type": "fixed", + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_timeseries_widget_with_custom_unit-1774292382", + "widgets": [ + { + "definition": { + "description": "Example widget description", + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1", + "number_format": { + "unit": { + "type": "canonical_unit", + "unit_name": "fraction" + }, + "unit_scale": { + "type": "canonical_unit", + "unit_name": "apdex" + } + } + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*}" + } + ], + "response_format": "timeseries" + } + ], + "show_legend": true, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "timeseries" + }, + "layout": { + "height": 5, + "width": 12, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"wuf-exp-9k5\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_with_custom_unit-1774292382\",\"description\":\"\",\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/wuf-exp-9k5/test-createanewdashboardwithtimeserieswidgetwithcustomunit-1774292382\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"description\":\"Example widget description\",\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\",\"number_format\":{\"unit\":{\"type\":\"canonical_unit\",\"unit_name\":\"fraction\"},\"unit_scale\":{\"type\":\"canonical_unit\",\"unit_name\":\"apdex\"}}}],\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*}\"}],\"response_format\":\"timeseries\"}],\"show_legend\":true,\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"timeseries\"},\"layout\":{\"height\":5,\"width\":12,\"x\":0,\"y\":0},\"id\":8254572000035554}],\"notify_list\":[],\"created_at\":\"2026-03-23T18:59:42.872221+00:00\",\"modified_at\":\"2026-03-23T18:59:42.872221+00:00\",\"reflow_type\":\"fixed\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/wuf-exp-9k5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"wuf-exp-9k5\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with timeseries widget with custom_unit", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-01-20T23:40:15.566Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility-1768952415 without order_by", + "widgets": [ + { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.cpu.user{*} by {host}", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"6bg-rgq-fxc\",\"title\":\"Test-Create_a_new_dashboard_with_timeseries_widget_without_order_by_for_backward_compatibility-1768952415 without order_by\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/6bg-rgq-fxc/test-createanewdashboardwithtimeserieswidgetwithoutorderbyforbackwardcompatibili\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.cpu.user{*} by {host}\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"type\":\"timeseries\"},\"id\":2503785343641105}],\"notify_list\":null,\"created_at\":\"2026-01-20T23:40:15.937647+00:00\",\"modified_at\":\"2026-01-20T23:40:15.937647+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/6bg-rgq-fxc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"6bg-rgq-fxc\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with timeseries widget without order_by for backward compatibility", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:32:59.704Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_toplist_widget-1731699179", + "widgets": [ + { + "definition": { + "requests": [ + { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "query1", + "query": "avg:system.cpu.user{*} by {service}" + } + ], + "response_format": "scalar", + "sort": { + "count": 10, + "order_by": [ + { + "index": 0, + "order": "desc", + "type": "formula" + } + ] + } + } + ], + "style": { + "display": { + "legend": "inline", + "type": "stacked" + }, + "palette": "dog_classic", + "scaling": "relative" + }, + "time": {}, + "title": "", + "title_align": "left", + "title_size": "16", + "type": "toplist" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"jwf-ikb-jaw\",\"title\":\"Test-Create_a_new_dashboard_with_toplist_widget-1731699179\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/jwf-ikb-jaw/test-createanewdashboardwithtoplistwidget-1731699179\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"aggregator\":\"avg\",\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{*} by {service}\"}],\"response_format\":\"scalar\",\"sort\":{\"count\":10,\"order_by\":[{\"index\":0,\"order\":\"desc\",\"type\":\"formula\"}]}}],\"style\":{\"display\":{\"legend\":\"inline\",\"type\":\"stacked\"},\"palette\":\"dog_classic\",\"scaling\":\"relative\"},\"time\":{},\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"toplist\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":8328791355254092}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:32:59.881856+00:00\",\"modified_at\":\"2024-11-15T19:32:59.881856+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/jwf-ikb-jaw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"jwf-ikb-jaw\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with toplist widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-20T18:16:51.929Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_topology_map_data_streams_widget-1774030611", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "data_streams", + "filters": [ + "env:prod" + ], + "query_string": "service:myservice", + "service": "" + }, + "request_type": "topology" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "topology_map" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"whr-253-7we\",\"title\":\"Test-Create_a_new_dashboard_with_topology_map_data_streams_widget-1774030611\",\"description\":\"\",\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"free\",\"url\":\"/dashboard/whr-253-7we/test-createanewdashboardwithtopologymapdatastreamswidget-1774030611\",\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"data_source\":\"data_streams\",\"filters\":[\"env:prod\"],\"query_string\":\"service:myservice\",\"service\":\"\"},\"request_type\":\"topology\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"topology_map\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":1843670487553482}],\"notify_list\":[],\"created_at\":\"2026-03-20T18:16:52.209473+00:00\",\"modified_at\":\"2026-03-20T18:16:52.209473+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/whr-253-7we", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"whr-253-7we\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with topology_map data_streams widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:00.134Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_topology_map_widget-1731699180", + "widgets": [ + { + "definition": { + "requests": [ + { + "query": { + "data_source": "service_map", + "filters": [ + "env:none", + "environment:*" + ], + "service": "" + }, + "request_type": "topology" + } + ], + "title": "", + "title_align": "left", + "title_size": "16", + "type": "topology_map" + }, + "layout": { + "height": 15, + "width": 47, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"9fp-eg8-uae\",\"title\":\"Test-Create_a_new_dashboard_with_topology_map_widget-1731699180\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/9fp-eg8-uae/test-createanewdashboardwithtopologymapwidget-1731699180\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"requests\":[{\"query\":{\"data_source\":\"service_map\",\"filters\":[\"env:none\",\"environment:*\"],\"service\":\"\"},\"request_type\":\"topology\"}],\"title\":\"\",\"title_align\":\"left\",\"title_size\":\"16\",\"type\":\"topology_map\"},\"layout\":{\"height\":15,\"width\":47,\"x\":0,\"y\":0},\"id\":606036044054377}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:33:00.244891+00:00\",\"modified_at\":\"2024-11-15T19:33:00.244891+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/9fp-eg8-uae", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"9fp-eg8-uae\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with topology_map widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:00.514Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "layout_type": "free", + "notify_list": [], + "template_variables": [], + "title": "Test-Create_a_new_dashboard_with_trace_service_widget-1731699180", + "widgets": [ + { + "definition": { + "display_format": "two_column", + "env": "none", + "service": "", + "show_breakdown": true, + "show_distribution": true, + "show_errors": true, + "show_hits": true, + "show_latency": true, + "show_resource_list": false, + "size_format": "medium", + "span_name": "", + "time": {}, + "title": "Service Summary", + "type": "trace_service" + }, + "layout": { + "height": 72, + "width": 72, + "x": 0, + "y": 0 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"8rp-yjv-2c7\",\"title\":\"Test-Create_a_new_dashboard_with_trace_service_widget-1731699180\",\"description\":\"\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"free\",\"url\":\"/dashboard/8rp-yjv-2c7/test-createanewdashboardwithtraceservicewidget-1731699180\",\"is_read_only\":false,\"template_variables\":[],\"widgets\":[{\"definition\":{\"display_format\":\"two_column\",\"env\":\"none\",\"service\":\"\",\"show_breakdown\":true,\"show_distribution\":true,\"show_errors\":true,\"show_hits\":true,\"show_latency\":true,\"show_resource_list\":false,\"size_format\":\"medium\",\"span_name\":\"\",\"time\":{},\"title\":\"Service Summary\",\"type\":\"trace_service\"},\"layout\":{\"height\":72,\"width\":72,\"x\":0,\"y\":0},\"id\":1971574953690767}],\"notify_list\":[],\"created_at\":\"2024-11-15T19:33:00.618626+00:00\",\"modified_at\":\"2024-11-15T19:33:00.618626+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/8rp-yjv-2c7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"8rp-yjv-2c7\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with trace_service widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:00.871Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_new_dashboard_with_trace_stream_widget-1731699180 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + }, + { + "field": "service", + "width": "auto" + } + ], + "query": { + "data_source": "trace_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"8hi-5bw-sya\",\"title\":\"Test-Create_a_new_dashboard_with_trace_stream_widget-1731699180 with list_stream widget\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/8hi-5bw-sya/test-createanewdashboardwithtracestreamwidget-1731699180-with-liststream-widget\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"},{\"field\":\"service\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"trace_stream\",\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":4795393510685480}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:01.001890+00:00\",\"modified_at\":\"2024-11-15T19:33:01.001890+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/8hi-5bw-sya", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"8hi-5bw-sya\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new dashboard with trace_stream widget", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:32:16.355Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "Test-Create_a_new_timeseries_widget_with_ci_pipelines_data_source-1772451136 with ci_pipelines datasource", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count", + "metric": "@ci.queue_time" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "ci_level:job" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ikx-wys-byr\",\"title\":\"Test-Create_a_new_timeseries_widget_with_ci_pipelines_data_source-1772451136 with ci_pipelines datasource\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/ikx-wys-byr/test-createanewtimeserieswidgetwithcipipelinesdatasource-1772451136-with-cipipel\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\",\"metric\":\"@ci.queue_time\"},\"data_source\":\"ci_pipelines\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"ci_level:job\"}}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{},\"title\":\"\",\"type\":\"timeseries\"},\"id\":8543991818867248}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:32:16.504264+00:00\",\"modified_at\":\"2026-03-02T11:32:16.504264+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ikx-wys-byr", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ikx-wys-byr\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new timeseries widget with ci_pipelines data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:32:24.328Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "Test-Create_a_new_timeseries_widget_with_ci_tests_data_source-1772451144 with ci_tests datasource", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_tests", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "test_level:test" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"f66-zye-xua\",\"title\":\"Test-Create_a_new_timeseries_widget_with_ci_tests_data_source-1772451144 with ci_tests datasource\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/f66-zye-xua/test-createanewtimeserieswidgetwithcitestsdatasource-1772451144-with-citests-dat\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"ci_tests\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"test_level:test\"}}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{},\"title\":\"\",\"type\":\"timeseries\"},\"id\":385385549859535}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:32:24.462023+00:00\",\"modified_at\":\"2026-03-02T11:32:24.462023+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/f66-zye-xua", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"f66-zye-xua\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new timeseries widget with ci_tests data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:32:32.300Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "Test-Create_a_new_timeseries_widget_with_incident_analytics_data_source-1772451152 with incident_analytics datasource", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "incident_analytics", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "test_level:test" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"2er-mww-6yj\",\"title\":\"Test-Create_a_new_timeseries_widget_with_incident_analytics_data_source-1772451152 with incident_analytics datasource\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/2er-mww-6yj/test-createanewtimeserieswidgetwithincidentanalyticsdatasource-1772451152-with-i\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"incident_analytics\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"test_level:test\"}}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{},\"title\":\"\",\"type\":\"timeseries\"},\"id\":2433009372435309}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:32:32.438274+00:00\",\"modified_at\":\"2026-03-02T11:32:32.438274+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/2er-mww-6yj", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"2er-mww-6yj\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new timeseries widget with incident_analytics data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:32:44.844Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "Test-Create_a_new_timeseries_widget_with_legacy_live_span_time_format-1772451164 with legacy live span time", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count", + "metric": "@ci.queue_time" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "ci_level:job" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": { + "hide_incomplete_cost_data": true, + "live_span": "5m" + }, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"vk5-d2n-u64\",\"title\":\"Test-Create_a_new_timeseries_widget_with_legacy_live_span_time_format-1772451164 with legacy live span time\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/vk5-d2n-u64/test-createanewtimeserieswidgetwithlegacylivespantimeformat-1772451164-with-lega\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\",\"metric\":\"@ci.queue_time\"},\"data_source\":\"ci_pipelines\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"ci_level:job\"}}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{\"hide_incomplete_cost_data\":true,\"live_span\":\"5m\"},\"title\":\"\",\"type\":\"timeseries\"},\"id\":6488713900601904}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:32:44.975524+00:00\",\"modified_at\":\"2026-03-02T11:32:44.975524+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/vk5-d2n-u64", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"vk5-d2n-u64\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new timeseries widget with legacy live span time format", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:32:52.742Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "Test-Create_a_new_timeseries_widget_with_new_fixed_span_time_format-1772451172 with new fixed span time", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count", + "metric": "@ci.queue_time" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "ci_level:job" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": { + "from": 1712080128, + "hide_incomplete_cost_data": true, + "to": 1712083128, + "type": "fixed" + }, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"tyc-7bs-dg2\",\"title\":\"Test-Create_a_new_timeseries_widget_with_new_fixed_span_time_format-1772451172 with new fixed span time\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/tyc-7bs-dg2/test-createanewtimeserieswidgetwithnewfixedspantimeformat-1772451172-with-new-fi\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\",\"metric\":\"@ci.queue_time\"},\"data_source\":\"ci_pipelines\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"ci_level:job\"}}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{\"from\":1712080128,\"hide_incomplete_cost_data\":true,\"to\":1712083128,\"type\":\"fixed\"},\"title\":\"\",\"type\":\"timeseries\"},\"id\":3025372441855102}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:32:53.112506+00:00\",\"modified_at\":\"2026-03-02T11:32:53.112506+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/tyc-7bs-dg2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"tyc-7bs-dg2\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new timeseries widget with new fixed span time format", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:33:01.159Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "Test-Create_a_new_timeseries_widget_with_new_live_span_time_format-1772451181 with new live span time", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count", + "metric": "@ci.queue_time" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "ci_level:job" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": { + "hide_incomplete_cost_data": true, + "type": "live", + "unit": "minute", + "value": 8 + }, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"j9i-er8-3fp\",\"title\":\"Test-Create_a_new_timeseries_widget_with_new_live_span_time_format-1772451181 with new live span time\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/j9i-er8-3fp/test-createanewtimeserieswidgetwithnewlivespantimeformat-1772451181-with-new-liv\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\",\"metric\":\"@ci.queue_time\"},\"data_source\":\"ci_pipelines\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"ci_level:job\"}}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{\"hide_incomplete_cost_data\":true,\"type\":\"live\",\"unit\":\"minute\",\"value\":8},\"title\":\"\",\"type\":\"timeseries\"},\"id\":6064667163154272}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:33:01.307731+00:00\",\"modified_at\":\"2026-03-02T11:33:01.307731+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/j9i-er8-3fp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"j9i-er8-3fp\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new timeseries widget with new live span time format", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-02T11:33:08.812Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "reflow_type": "auto", + "title": "Test-Create_a_new_timeseries_widget_with_product_analytics_data_source-1772451188 with product_analytics datasource", + "widgets": [ + { + "definition": { + "legend_columns": [ + "avg", + "min", + "max", + "value", + "sum" + ], + "legend_layout": "auto", + "requests": [ + { + "display_type": "line", + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "product_analytics", + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "test_level:test" + } + } + ], + "response_format": "timeseries", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "time": {}, + "title": "", + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"i2r-t4n-8wa\",\"title\":\"Test-Create_a_new_timeseries_widget_with_product_analytics_data_source-1772451188 with product_analytics datasource\",\"description\":null,\"author_handle\":\"archana.asokan@datadoghq.com\",\"author_name\":\"Archana Asokan\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/i2r-t4n-8wa/test-createanewtimeserieswidgetwithproductanalyticsdatasource-1772451188-with-pr\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"legend_columns\":[\"avg\",\"min\",\"max\",\"value\",\"sum\"],\"legend_layout\":\"auto\",\"requests\":[{\"display_type\":\"line\",\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"product_analytics\",\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"test_level:test\"}}],\"response_format\":\"timeseries\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"time\":{},\"title\":\"\",\"type\":\"timeseries\"},\"id\":2831258963755573}],\"notify_list\":null,\"created_at\":\"2026-03-02T11:33:08.943469+00:00\",\"modified_at\":\"2026-03-02T11:33:08.943469+00:00\",\"reflow_type\":\"auto\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/i2r-t4n-8wa", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"i2r-t4n-8wa\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new timeseries widget with product_analytics data source", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:03.867Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "abc-123-def", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"custom_timeboard abc-123-def not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create a shared dashboard returns \"Dashboard Not Found\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:03.971Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_shared_dashboard_returns_OK_response-1731699183 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"g3v-56r-qqm\",\"title\":\"Test-Create_a_shared_dashboard_returns_OK_response-1731699183 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/g3v-56r-qqm/test-createashareddashboardreturnsokresponse-1731699183-with-profile-metrics-que\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":7951506467220611}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:04.124805+00:00\",\"modified_at\":\"2024-11-15T19:33:04.124805+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "g3v-56r-qqm", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"dashboard_id\":\"g3v-56r-qqm\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Create_a_shared_dashboard_returns_OK_response-1731699183 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-4893b23e8e8483063cfae1c21abb8de1\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-4893b23e8e8483063cfae1c21abb8de1\",\"created\":\"2024-11-15T19:33:04.453114+00:00\",\"share_type\":\"open\",\"share_list\":null,\"session_duration_in_days\":null,\"invitees\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-4893b23e8e8483063cfae1c21abb8de1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_public_dashboard_token\":\"fasjyydbcgwwc2uc-4893b23e8e8483063cfae1c21abb8de1\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/g3v-56r-qqm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"g3v-56r-qqm\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a shared dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-06-30T15:47:18.224Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Create_a_shared_dashboard_with_a_group_template_variable_returns_OK_response-1751298438 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"73x-8zb-5cq\",\"title\":\"Test-Create_a_shared_dashboard_with_a_group_template_variable_returns_OK_response-1751298438 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/73x-8zb-5cq/test-createashareddashboardwithagrouptemplatevariablereturnsokresponse-175129843\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":81881431996576}],\"notify_list\":null,\"created_at\":\"2025-06-30T15:47:18.625228+00:00\",\"modified_at\":\"2025-06-30T15:47:18.625228+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "73x-8zb-5cq", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "selectable_template_vars": [ + { + "default_value": "*", + "name": "group_by_var", + "type": "group", + "visible_tags": [ + "selectableValue1", + "selectableValue2" + ] + } + ], + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"dashboard_id\":\"73x-8zb-5cq\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Create_a_shared_dashboard_with_a_group_template_variable_returns_OK_response-1751298438 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":[{\"default_value\":\"*\",\"name\":\"group_by_var\",\"type\":\"group\",\"visible_tags\":[\"selectableValue1\",\"selectableValue2\"]}],\"token\":\"fasjyydbcgwwc2uc-546a27681750cfe1aa43a9930683c116\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-546a27681750cfe1aa43a9930683c116\",\"created\":\"2025-06-30T15:47:19.275023+00:00\",\"share_type\":\"open\",\"share_list\":null,\"session_duration_in_days\":null,\"invitees\":[],\"embeddable_domains\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-546a27681750cfe1aa43a9930683c116", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_public_dashboard_token\":\"fasjyydbcgwwc2uc-546a27681750cfe1aa43a9930683c116\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/73x-8zb-5cq", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"73x-8zb-5cq\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a shared dashboard with a group template variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:04.960Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Delete_a_dashboard_returns_OK_response-1731699184 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"hai-uhn-87g\",\"title\":\"Test-Delete_a_dashboard_returns_OK_response-1731699184 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/hai-uhn-87g/test-deleteadashboardreturnsokresponse-1731699184-with-profile-metrics-query\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":1882306032459411}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:05.172609+00:00\",\"modified_at\":\"2024-11-15T19:33:05.172609+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/hai-uhn-87g", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"hai-uhn-87g\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/hai-uhn-87g", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Dashboard with ID hai-uhn-87g not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:05.518Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Delete_dashboards_returns_No_Content_response-1731699185 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"jp2-chp-z7f\",\"title\":\"Test-Delete_dashboards_returns_No_Content_response-1731699185 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/jp2-chp-z7f/test-deletedashboardsreturnsnocontentresponse-1731699185-with-profile-metrics-qu\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":7971677393607038}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:05.683192+00:00\",\"modified_at\":\"2024-11-15T19:33:05.683192+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "jp2-chp-z7f", + "type": "dashboard" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/jp2-chp-z7f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Dashboard with ID jp2-chp-z7f not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete dashboards returns \"No Content\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:06.052Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Get_a_dashboard_returns_OK_response-1731699186 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"448-ktj-ezs\",\"title\":\"Test-Get_a_dashboard_returns_OK_response-1731699186 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/448-ktj-ezs/test-getadashboardreturnsokresponse-1731699186-with-profile-metrics-query\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":7381515167611300}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:06.217022+00:00\",\"modified_at\":\"2024-11-15T19:33:06.217022+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard/448-ktj-ezs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"448-ktj-ezs\",\"title\":\"Test-Get_a_dashboard_returns_OK_response-1731699186 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/448-ktj-ezs/test-getadashboardreturnsokresponse-1731699186-with-profile-metrics-query\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":7381515167611300}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:06.217022+00:00\",\"modified_at\":\"2024-11-15T19:33:06.217022+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/448-ktj-ezs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"448-ktj-ezs\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2022-01-10T16:34:42.739Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Get_a_dashboard_returns_author_name_-1641832482 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":\"Frog Account\",\"template_variables\":null,\"is_read_only\":false,\"id\":\"mv9-uwu-9q8\",\"title\":\"Test-Get_a_dashboard_returns_author_name_-1641832482 with Profile Metrics Query\",\"url\":\"/dashboard/mv9-uwu-9q8/test-getadashboardreturnsauthorname-1641832482-with-profile-metrics-query\",\"created_at\":\"2022-01-10T16:34:43.398343+00:00\",\"modified_at\":\"2022-01-10T16:34:43.398343+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"id\":6229693273676339}],\"layout_type\":\"ordered\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard/mv9-uwu-9q8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":\"Frog Account\",\"template_variables\":null,\"is_read_only\":false,\"id\":\"mv9-uwu-9q8\",\"title\":\"Test-Get_a_dashboard_returns_author_name_-1641832482 with Profile Metrics Query\",\"url\":\"/dashboard/mv9-uwu-9q8/test-getadashboardreturnsauthorname-1641832482-with-profile-metrics-query\",\"created_at\":\"2022-01-10T16:34:43.398343+00:00\",\"modified_at\":\"2022-01-10T16:34:43.398343+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"id\":6229693273676339}],\"layout_type\":\"ordered\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/mv9-uwu-9q8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"mv9-uwu-9q8\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a dashboard returns 'author_name'", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:06.595Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Get_a_shared_dashboard_returns_OK_response-1731699186 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"8ev-xtr-upp\",\"title\":\"Test-Get_a_shared_dashboard_returns_OK_response-1731699186 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/8ev-xtr-upp/test-getashareddashboardreturnsokresponse-1731699186-with-profile-metrics-query\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":80087833264827}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:06.747717+00:00\",\"modified_at\":\"2024-11-15T19:33:06.747717+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "8ev-xtr-upp", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_list": [ + "testgetashareddashboardreturnsokresponse1731699186@datadoghq.com" + ], + "share_type": "invite" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"dashboard_id\":\"8ev-xtr-upp\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Get_a_shared_dashboard_returns_OK_response-1731699186 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-a0de932128a4590dd2936030efe4536f\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-a0de932128a4590dd2936030efe4536f\",\"created\":\"2024-11-15T19:33:07.079213+00:00\",\"share_type\":\"invite\",\"share_list\":[\"testgetashareddashboardreturnsokresponse1731699186@datadoghq.com\"],\"session_duration_in_days\":30,\"invitees\":[{\"email\":\"testgetashareddashboardreturnsokresponse1731699186@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2024-11-15T19:33:07.104751+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-a0de932128a4590dd2936030efe4536f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"dashboard_id\":\"8ev-xtr-upp\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Get_a_shared_dashboard_returns_OK_response-1731699186 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-a0de932128a4590dd2936030efe4536f\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-a0de932128a4590dd2936030efe4536f\",\"created\":\"2024-11-15T19:33:07.079213+00:00\",\"share_type\":\"invite\",\"share_list\":[\"testgetashareddashboardreturnsokresponse1731699186@datadoghq.com\"],\"session_duration_in_days\":30,\"invitees\":[{\"email\":\"testgetashareddashboardreturnsokresponse1731699186@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2024-11-15T19:33:07.104751+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-a0de932128a4590dd2936030efe4536f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_public_dashboard_token\":\"fasjyydbcgwwc2uc-a0de932128a4590dd2936030efe4536f\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/8ev-xtr-upp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"8ev-xtr-upp\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a shared dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2023-02-16T21:47:50.042Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Get_all_dashboards_returns_OK_response-1676584070 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"npw-6di-usv\",\"title\":\"Test-Get_all_dashboards_returns_OK_response-1676584070 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/npw-6di-usv/test-getalldashboardsreturnsokresponse-1676584070-with-profile-metrics-query\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":687274237501398}],\"notify_list\":null,\"created_at\":\"2023-02-16T21:47:50.216943+00:00\",\"modified_at\":\"2023-02-16T21:47:50.216943+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard", + "query": [ + [ + "filter[shared]", + "false" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"dashboards\":[{\"id\":\"npw-6di-usv\",\"title\":\"Test-Get_all_dashboards_returns_OK_response-1676584070 with Profile Metrics Query\",\"description\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/npw-6di-usv/test-getalldashboardsreturnsokresponse-1676584070-with-profile-metrics-query\",\"is_read_only\":false,\"created_at\":\"2023-02-16T21:47:50.216943+00:00\",\"modified_at\":\"2023-02-16T21:47:50.216943+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"deleted_at\":null}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/npw-6di-usv", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"npw-6di-usv\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all dashboards returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2023-09-04T12:26:51.389Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard", + "query": [ + [ + "count", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"dashboards\":[{\"id\":\"5vp-fxm-s4j\",\"title\":\"PCF Testing\",\"description\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/5vp-fxm-s4j/pcf-testing\",\"is_read_only\":false,\"created_at\":\"2022-06-08T10:40:29.941695+00:00\",\"modified_at\":\"2023-07-27T12:26:28.359080+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"deleted_at\":null},{\"id\":\"ubf-m9i-gms\",\"title\":\"OpenStack Controller Overview\",\"description\":\"## OpenStack Controller - Overview\\n\\nPreset dashboard for the OpenStack Controller integration. Used for OpenStack deployments v13 and higher. \\n\\n[See integration docs for more details](https://docs.datadoghq.com/integrations/openstack_controller/)\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/ubf-m9i-gms/openstack-controller-overview\",\"is_read_only\":false,\"created_at\":\"2023-04-28T19:16:35.964720+00:00\",\"modified_at\":\"2023-08-07T13:53:31.924789+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"deleted_at\":null}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard", + "query": [ + [ + "count", + "2" + ], + [ + "start", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"dashboards\":[{\"id\":\"ja7-nhx-7zs\",\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"description\":\"## OpenStack Controller - Overview\\n\\nPreset dashboard for the OpenStack Controller integration. Used for OpenStack deployments v13 and higher. \\n\\n[See integration docs for more details](https://docs.datadoghq.com/integrations/openstack_controller/)\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/ja7-nhx-7zs/openstack-controller-overview-default-microversion\",\"is_read_only\":false,\"created_at\":\"2023-08-29T19:56:15.999851+00:00\",\"modified_at\":\"2023-08-29T20:12:33.385536+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"deleted_at\":null}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all dashboards returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:07.625Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1731699187 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"qnh-gkv-jbc\",\"title\":\"Test-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1731699187 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/qnh-gkv-jbc/test-getallinvitationsforashareddashboardreturnsokresponse-1731699187-with-profi\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":6861880551996269}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:07.779258+00:00\",\"modified_at\":\"2024-11-15T19:33:07.779258+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "qnh-gkv-jbc", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_list": [ + "testgetallinvitationsforashareddashboardreturnsokresponse1731699187@datadoghq.com" + ], + "share_type": "invite" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"dashboard_id\":\"qnh-gkv-jbc\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1731699187 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-d7c9444d4bf13c445437741538d0ad29\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-d7c9444d4bf13c445437741538d0ad29\",\"created\":\"2024-11-15T19:33:08.095976+00:00\",\"share_type\":\"invite\",\"share_list\":[\"testgetallinvitationsforashareddashboardreturnsokresponse1731699187@datadoghq.com\"],\"session_duration_in_days\":30,\"invitees\":[{\"email\":\"testgetallinvitationsforashareddashboardreturnsokresponse1731699187@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2024-11-15T19:33:08.120637+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-d7c9444d4bf13c445437741538d0ad29/invitation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"total_count\":0}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-d7c9444d4bf13c445437741538d0ad29", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_public_dashboard_token\":\"fasjyydbcgwwc2uc-d7c9444d4bf13c445437741538d0ad29\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/qnh-gkv-jbc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"qnh-gkv-jbc\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all invitations for a shared dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2022-01-17T17:43:33.193Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Get_deleted_dashboards_returns_OK_response-1642441413 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":null,\"template_variables\":null,\"is_read_only\":false,\"id\":\"ssn-gb2-k7k\",\"title\":\"Test-Get_deleted_dashboards_returns_OK_response-1642441413 with Profile Metrics Query\",\"url\":\"/dashboard/ssn-gb2-k7k/test-getdeleteddashboardsreturnsokresponse-1642441413-with-profile-metrics-query\",\"created_at\":\"2022-01-17T17:43:33.361797+00:00\",\"modified_at\":\"2022-01-17T17:43:33.361797+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"id\":748946470803570}],\"layout_type\":\"ordered\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ssn-gb2-k7k", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ssn-gb2-k7k\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/dashboard", + "query": [ + [ + "filter[deleted]", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"dashboards\":[{\"created_at\":\"2022-01-17T17:43:33.361797+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"is_read_only\":false,\"description\":null,\"title\":\"Test-Get_deleted_dashboards_returns_OK_response-1642441413 with Profile Metrics Query\",\"url\":\"/dashboard/ssn-gb2-k7k/test-getdeleteddashboardsreturnsokresponse-1642441413-with-profile-metrics-query\",\"layout_type\":\"ordered\",\"deleted_at\":\"2022-01-17T17:43:33.502200+00:00\",\"modified_at\":\"2022-01-17T17:43:33.361797+00:00\",\"id\":\"ssn-gb2-k7k\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ssn-gb2-k7k", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Dashboard with ID ssn-gb2-k7k not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get deleted dashboards returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:08.646Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Restore_deleted_dashboards_returns_No_Content_response-1731699188 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"xsv-pnb-qcn\",\"title\":\"Test-Restore_deleted_dashboards_returns_No_Content_response-1731699188 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/xsv-pnb-qcn/test-restoredeleteddashboardsreturnsnocontentresponse-1731699188-with-profile-me\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":5612613024221520}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:08.803192+00:00\",\"modified_at\":\"2024-11-15T19:33:08.803192+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/xsv-pnb-qcn", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"xsv-pnb-qcn\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "xsv-pnb-qcn", + "type": "dashboard" + } + ] + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/xsv-pnb-qcn", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"xsv-pnb-qcn\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Restore deleted dashboards returns \"No Content\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-18T20:27:29.628Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Send_shared_dashboard_invitation_email_returns_OK_-1773865649 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"uy7-jdc-khf\",\"title\":\"Test-Send_shared_dashboard_invitation_email_returns_OK_-1773865649 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/uy7-jdc-khf/test-sendshareddashboardinvitationemailreturnsok-1773865649-with-profile-metrics\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":3763196530100152}],\"notify_list\":null,\"created_at\":\"2026-03-18T20:27:29.720762+00:00\",\"modified_at\":\"2026-03-18T20:27:29.720762+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "uy7-jdc-khf", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_list": [ + "testsendshareddashboardinvitationemailreturnsok1773865649@datadoghq.com" + ], + "share_type": "invite" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"dashboard_id\":\"uy7-jdc-khf\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Send_shared_dashboard_invitation_email_returns_OK_-1773865649 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-4801190966e7cf88b180c12b876eca65\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-4801190966e7cf88b180c12b876eca65\",\"created\":\"2026-03-18T20:27:30.223874+00:00\",\"share_type\":\"invite\",\"share_list\":[\"team-intg-tools-libs-spam@datadoghq.com\",\"testsendshareddashboardinvitationemailreturnsok1773865649@datadoghq.com\"],\"session_duration_in_days\":30,\"invitees\":[{\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2026-03-18T20:27:30.248539+00:00\"},{\"email\":\"testsendshareddashboardinvitationemailreturnsok1773865649@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2026-03-18T20:27:30.248539+00:00\"}],\"embeddable_domains\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "testsendshareddashboardinvitationemailreturnsok1773865649@datadoghq.com" + }, + "type": "public_dashboard_invitation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-4801190966e7cf88b180c12b876eca65/invitation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"public_dashboard_invitation\",\"attributes\":{\"email\":\"testsendshareddashboardinvitationemailreturnsok1773865649@datadoghq.com\",\"share_token\":\"fasjyydbcgwwc2uc-4801190966e7cf88b180c12b876eca65\",\"created_at\":\"2026-03-18T20:27:30.426144+00:00\",\"invitation_expiry\":\"2026-03-18T21:27:30.435235+00:00\",\"has_session\":false,\"session_expiry\":null}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "testsendshareddashboardinvitationemailreturnsok1773865649@datadoghq.com" + }, + "type": "public_dashboard_invitation" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-4801190966e7cf88b180c12b876eca65/invitation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-4801190966e7cf88b180c12b876eca65", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_public_dashboard_token\":\"fasjyydbcgwwc2uc-4801190966e7cf88b180c12b876eca65\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/uy7-jdc-khf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"uy7-jdc-khf\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Send shared dashboard invitation email returns \"OK\"", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:09.343Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Send_shared_dashboard_invitation_email_returns_OK_response-1731699189 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"yri-q6w-8gq\",\"title\":\"Test-Send_shared_dashboard_invitation_email_returns_OK_response-1731699189 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/yri-q6w-8gq/test-sendshareddashboardinvitationemailreturnsokresponse-1731699189-with-profile\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":4582147876316754}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:09.509544+00:00\",\"modified_at\":\"2024-11-15T19:33:09.509544+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "yri-q6w-8gq", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_list": [ + "testsendshareddashboardinvitationemailreturnsokresponse1731699189@datadoghq.com" + ], + "share_type": "invite" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"dashboard_id\":\"yri-q6w-8gq\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Send_shared_dashboard_invitation_email_returns_OK_response-1731699189 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-6b737747459631d184ade0ca119a8c2b\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-6b737747459631d184ade0ca119a8c2b\",\"created\":\"2024-11-15T19:33:09.910074+00:00\",\"share_type\":\"invite\",\"share_list\":[\"testsendshareddashboardinvitationemailreturnsokresponse1731699189@datadoghq.com\"],\"session_duration_in_days\":30,\"invitees\":[{\"email\":\"testsendshareddashboardinvitationemailreturnsokresponse1731699189@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2024-11-15T19:33:09.933255+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "testsendshareddashboardinvitationemailreturnsokresponse1731699189@datadoghq.com" + }, + "type": "public_dashboard_invitation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-6b737747459631d184ade0ca119a8c2b/invitation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"public_dashboard_invitation\",\"attributes\":{\"email\":\"testsendshareddashboardinvitationemailreturnsokresponse1731699189@datadoghq.com\",\"share_token\":\"fasjyydbcgwwc2uc-6b737747459631d184ade0ca119a8c2b\",\"created_at\":\"2024-11-15T19:33:10.103186+00:00\",\"invitation_expiry\":\"2024-11-15T20:33:10.101261+00:00\",\"has_session\":false,\"session_expiry\":null}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "testsendshareddashboardinvitationemailreturnsokresponse1731699189@datadoghq.com" + }, + "type": "public_dashboard_invitation" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-6b737747459631d184ade0ca119a8c2b/invitation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-6b737747459631d184ade0ca119a8c2b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_public_dashboard_token\":\"fasjyydbcgwwc2uc-6b737747459631d184ade0ca119a8c2b\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/yri-q6w-8gq", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"yri-q6w-8gq\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Send shared dashboard invitation email returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-03-19T17:48:57.466Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Send_shared_dashboard_invitation_email_returns_OK-1773942537 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"i2s-n9z-69c\",\"title\":\"Test-Send_shared_dashboard_invitation_email_returns_OK-1773942537 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/i2s-n9z-69c/test-sendshareddashboardinvitationemailreturnsok-1773942537-with-profile-metrics\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":3342606346172255}],\"notify_list\":null,\"created_at\":\"2026-03-19T17:48:57.600536+00:00\",\"modified_at\":\"2026-03-19T17:48:57.600536+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "i2s-n9z-69c", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_list": [ + "testsendshareddashboardinvitationemailreturnsok1773942537@datadoghq.com" + ], + "share_type": "invite" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"dashboard_id\":\"i2s-n9z-69c\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Send_shared_dashboard_invitation_email_returns_OK-1773942537 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-3dde636009128a6f937e880f67a0ad04\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-3dde636009128a6f937e880f67a0ad04\",\"created\":\"2026-03-19T17:48:58.113567+00:00\",\"share_type\":\"invite\",\"share_list\":[\"team-intg-tools-libs-spam@datadoghq.com\",\"testsendshareddashboardinvitationemailreturnsok1773942537@datadoghq.com\"],\"session_duration_in_days\":30,\"invitees\":[{\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2026-03-19T17:48:58.132469+00:00\"},{\"email\":\"testsendshareddashboardinvitationemailreturnsok1773942537@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2026-03-19T17:48:58.132469+00:00\"}],\"embeddable_domains\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "testsendshareddashboardinvitationemailreturnsok1773942537@datadoghq.com" + }, + "type": "public_dashboard_invitation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-3dde636009128a6f937e880f67a0ad04/invitation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"public_dashboard_invitation\",\"attributes\":{\"email\":\"testsendshareddashboardinvitationemailreturnsok1773942537@datadoghq.com\",\"share_token\":\"fasjyydbcgwwc2uc-3dde636009128a6f937e880f67a0ad04\",\"created_at\":\"2026-03-19T17:48:58.452715+00:00\",\"invitation_expiry\":\"2026-03-19T18:48:58.463251+00:00\",\"has_session\":false,\"session_expiry\":null}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "testsendshareddashboardinvitationemailreturnsok1773942537@datadoghq.com" + }, + "type": "public_dashboard_invitation" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-3dde636009128a6f937e880f67a0ad04/invitation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-3dde636009128a6f937e880f67a0ad04", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_public_dashboard_token\":\"fasjyydbcgwwc2uc-3dde636009128a6f937e880f67a0ad04\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/i2s-n9z-69c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"i2s-n9z-69c\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Send shared dashboard invitation email returns OK", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:10.845Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Update_a_dashboard_returns_OK_response-1731699190 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"p63-b2n-sjg\",\"title\":\"Test-Update_a_dashboard_returns_OK_response-1731699190 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/p63-b2n-sjg/test-updateadashboardreturnsokresponse-1731699190-with-profile-metrics-query\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":5657970793131714}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:11.001823+00:00\",\"modified_at\":\"2024-11-15T19:33:11.001823+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "Updated description", + "layout_type": "ordered", + "title": "Test-Update_a_dashboard_returns_OK_response-1731699190 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "apm_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/dashboard/p63-b2n-sjg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"p63-b2n-sjg\",\"title\":\"Test-Update_a_dashboard_returns_OK_response-1731699190 with list_stream widget\",\"description\":\"Updated description\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/p63-b2n-sjg/test-updateadashboardreturnsokresponse-1731699190-with-liststream-widget\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"apm_issue_stream\",\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":2673972776725197}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:11.001823+00:00\",\"modified_at\":\"2024-11-15T19:33:11.244365+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/p63-b2n-sjg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"p63-b2n-sjg\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:11.536Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Update_a_dashboard_with_tags_returns_OK_response-1731699191 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"dpm-665-j6y\",\"title\":\"Test-Update_a_dashboard_with_tags_returns_OK_response-1731699191 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/dpm-665-j6y/test-updateadashboardwithtagsreturnsokresponse-1731699191-with-profile-metrics-q\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":7755905539203163}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:11.685174+00:00\",\"modified_at\":\"2024-11-15T19:33:11.685174+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "Updated description", + "layout_type": "ordered", + "tags": [ + "team:foo", + "team:bar" + ], + "title": "Test-Update_a_dashboard_with_tags_returns_OK_response-1731699191 with list_stream widget", + "widgets": [ + { + "definition": { + "requests": [ + { + "columns": [ + { + "field": "timestamp", + "width": "auto" + } + ], + "query": { + "data_source": "apm_issue_stream", + "query_string": "" + }, + "response_format": "event_list" + } + ], + "type": "list_stream" + } + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/dashboard/dpm-665-j6y", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"dpm-665-j6y\",\"title\":\"Test-Update_a_dashboard_with_tags_returns_OK_response-1731699191 with list_stream widget\",\"description\":\"Updated description\",\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/dpm-665-j6y/test-updateadashboardwithtagsreturnsokresponse-1731699191-with-liststream-widget\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"columns\":[{\"field\":\"timestamp\",\"width\":\"auto\"}],\"query\":{\"data_source\":\"apm_issue_stream\",\"query_string\":\"\"},\"response_format\":\"event_list\"}],\"type\":\"list_stream\"},\"id\":4561855444879229}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:11.685174+00:00\",\"modified_at\":\"2024-11-15T19:33:11.905971+00:00\",\"tags\":[\"team:foo\",\"team:bar\"],\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/dpm-665-j6y", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"dpm-665-j6y\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a dashboard with tags returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2024-11-15T19:33:12.179Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Update_a_shared_dashboard_returns_OK_response-1731699192 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"7gy-n9j-kdz\",\"title\":\"Test-Update_a_shared_dashboard_returns_OK_response-1731699192 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":null,\"layout_type\":\"ordered\",\"url\":\"/dashboard/7gy-n9j-kdz/test-updateashareddashboardreturnsokresponse-1731699192-with-profile-metrics-que\",\"is_read_only\":false,\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":1917183550061512}],\"notify_list\":null,\"created_at\":\"2024-11-15T19:33:12.333485+00:00\",\"modified_at\":\"2024-11-15T19:33:12.333485+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "7gy-n9j-kdz", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_list": [ + "testupdateashareddashboardreturnsokresponse1731699192@datadoghq.com" + ], + "share_type": "invite" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"dashboard_id\":\"7gy-n9j-kdz\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Update_a_shared_dashboard_returns_OK_response-1731699192 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-601fe99239741e02ee84c1852ce59a37\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-601fe99239741e02ee84c1852ce59a37\",\"created\":\"2024-11-15T19:33:12.669592+00:00\",\"share_type\":\"invite\",\"share_list\":[\"testupdateashareddashboardreturnsokresponse1731699192@datadoghq.com\"],\"session_duration_in_days\":30,\"invitees\":[{\"email\":\"testupdateashareddashboardreturnsokresponse1731699192@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2024-11-15T19:33:12.692355+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "global_time": { + "live_span": "15m" + }, + "share_list": [], + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-601fe99239741e02ee84c1852ce59a37", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"dashboard_id\":\"7gy-n9j-kdz\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Update_a_shared_dashboard_returns_OK_response-1731699192 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"15m\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-601fe99239741e02ee84c1852ce59a37\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-601fe99239741e02ee84c1852ce59a37\",\"created\":\"2024-11-15T19:33:12.669592+00:00\",\"share_type\":\"open\",\"share_list\":[],\"session_duration_in_days\":null,\"invitees\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-601fe99239741e02ee84c1852ce59a37", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_public_dashboard_token\":\"fasjyydbcgwwc2uc-601fe99239741e02ee84c1852ce59a37\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/7gy-n9j-kdz", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"7gy-n9j-kdz\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a shared dashboard returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Dashboards", + "frozen_at": "2025-06-30T15:47:20.325Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1751298440 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"u77-2y3-a8u\",\"title\":\"Test-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1751298440 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"author_name\":\"CI Account\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/u77-2y3-a8u/test-updateashareddashboardwithselectabletemplatevarsreturnsokresponse-175129844\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":1909539592049195}],\"notify_list\":null,\"created_at\":\"2025-06-30T15:47:20.724680+00:00\",\"modified_at\":\"2025-06-30T15:47:20.724680+00:00\",\"restricted_roles\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboard_id": "u77-2y3-a8u", + "dashboard_type": "custom_timeboard", + "global_time": { + "live_span": "1h" + }, + "share_list": [ + "testupdateashareddashboardwithselectabletemplatevarsreturnsokresponse1751298440@datadoghq.com" + ], + "share_type": "invite" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/public", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"dashboard_id\":\"u77-2y3-a8u\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1751298440 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"1h\"},\"selectable_template_vars\":null,\"token\":\"fasjyydbcgwwc2uc-e45981fc09294b85d655016fc6109985\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-e45981fc09294b85d655016fc6109985\",\"created\":\"2025-06-30T15:47:21.395152+00:00\",\"share_type\":\"invite\",\"share_list\":[\"testupdateashareddashboardwithselectabletemplatevarsreturnsokresponse1751298440@datadoghq.com\"],\"session_duration_in_days\":30,\"invitees\":[{\"email\":\"testupdateashareddashboardwithselectabletemplatevarsreturnsokresponse1751298440@datadoghq.com\",\"access_expiration\":null,\"last_accessed\":null,\"created_at\":\"2025-06-30T15:47:21.429277+00:00\"}],\"embeddable_domains\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "global_time": { + "live_span": "15m" + }, + "selectable_template_vars": [ + { + "default_value": "*", + "name": "group_by_var", + "type": "group", + "visible_tags": [ + "selectableValue1", + "selectableValue2" + ] + } + ], + "share_list": [], + "share_type": "open" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-e45981fc09294b85d655016fc6109985", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"author\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"dashboard_id\":\"u77-2y3-a8u\",\"dashboard_type\":\"custom_timeboard\",\"status\":\"active\",\"title\":\"Test-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1751298440 with Profile Metrics Query\",\"viewing_preferences\":{},\"expiration\":null,\"last_accessed\":null,\"global_time_selectable_enabled\":false,\"global_time\":{\"live_span\":\"15m\"},\"selectable_template_vars\":[{\"default_value\":\"*\",\"name\":\"group_by_var\",\"type\":\"group\",\"visible_tags\":[\"selectableValue1\",\"selectableValue2\"]}],\"token\":\"fasjyydbcgwwc2uc-e45981fc09294b85d655016fc6109985\",\"public_url\":\"https://p.datadoghq.com/sb/fasjyydbcgwwc2uc-e45981fc09294b85d655016fc6109985\",\"created\":\"2025-06-30T15:47:21.395152+00:00\",\"share_type\":\"open\",\"share_list\":[],\"session_duration_in_days\":30,\"invitees\":[],\"embeddable_domains\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/public/fasjyydbcgwwc2uc-e45981fc09294b85d655016fc6109985", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_public_dashboard_token\":\"fasjyydbcgwwc2uc-e45981fc09294b85d655016fc6109985\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/u77-2y3-a8u", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"u77-2y3-a8u\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a shared dashboard with selectable_template_vars returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/downtimes.json b/test-server-data/v1/downtimes.json new file mode 100644 index 0000000000..b717bac39d --- /dev/null +++ b/test-server-data/v1/downtimes.json @@ -0,0 +1,1232 @@ +{ + "feature": "Downtimes", + "recordings": [ + { + "feature": "Downtimes", + "frozen_at": "2022-05-12T09:49:53.281Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Downtime 0 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Cancel a downtime returns \"Downtime not found\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-22T14:29:16.526Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1684769356, + "message": "Test-Cancel_a_downtime_returns_OK_response-1684765756", + "recurrence": { + "period": 1, + "type": "weeks", + "until_date": 1686580156, + "week_days": [ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri" + ] + }, + "scope": [ + "test:testcanceladowntimereturnsokresponse1684765756" + ], + "start": 1684765756, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2941964683,\"monitor_id\":null,\"org_id\":321813,\"start\":1684765756,\"end\":1684769356,\"canceled\":null,\"created\":1684765756,\"modified\":1684765756,\"message\":\"Test-Cancel_a_downtime_returns_OK_response-1684765756\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1686580156},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"08391596-f8ad-11ed-a637-da7ad0900002\",\"scope\":[\"test:testcanceladowntimereturnsokresponse1684765756\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2941964683", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2941964683", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Cancel a downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2022-01-06T00:50:45.924Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "scope": "test:testcanceldowntimesbyscopereturnsdowntimesnotfoundresponse1641430245_invalid" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime/cancel/by_scope", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"No downtimes found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Cancel downtimes by scope returns \"Downtimes not found\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-22T14:29:42.993Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1684769382, + "message": "Test-Cancel_downtimes_by_scope_returns_OK_response-1684765782", + "recurrence": { + "period": 1, + "type": "weeks", + "until_date": 1686580182, + "week_days": [ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri" + ] + }, + "scope": [ + "test:testcanceldowntimesbyscopereturnsokresponse1684765782" + ], + "start": 1684765782, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2941965647,\"monitor_id\":null,\"org_id\":321813,\"start\":1684765782,\"end\":1684769382,\"canceled\":null,\"created\":1684765783,\"modified\":1684765783,\"message\":\"Test-Cancel_downtimes_by_scope_returns_OK_response-1684765782\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1686580182},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"17fac312-f8ad-11ed-9ae8-da7ad0900002\",\"scope\":[\"test:testcanceldowntimesbyscopereturnsokresponse1684765782\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "scope": "test:testcanceldowntimesbyscopereturnsokresponse1684765782" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime/cancel/by_scope", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"cancelled_ids\":[2941965647]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2941965647", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Cancel downtimes by scope returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2022-01-06T00:50:46.651Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/downtime/0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Downtime not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a downtime returns \"Downtime not found\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-22T14:30:10.537Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1684769410, + "message": "Test-Get_a_downtime_returns_OK_response-1684765810", + "recurrence": { + "period": 1, + "type": "weeks", + "until_date": 1686580210, + "week_days": [ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri" + ] + }, + "scope": [ + "test:testgetadowntimereturnsokresponse1684765810" + ], + "start": 1684765810, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2941966869,\"monitor_id\":null,\"org_id\":321813,\"start\":1684765810,\"end\":1684769410,\"canceled\":null,\"created\":1684765810,\"modified\":1684765810,\"message\":\"Test-Get_a_downtime_returns_OK_response-1684765810\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1686580210},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"286629f8-f8ad-11ed-9901-da7ad0900002\",\"scope\":[\"test:testgetadowntimereturnsokresponse1684765810\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/downtime/2941966869", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2941966869,\"monitor_id\":null,\"org_id\":321813,\"start\":1684765810,\"end\":1684769410,\"canceled\":null,\"created\":1684765810,\"modified\":1684765810,\"message\":\"Test-Get_a_downtime_returns_OK_response-1684765810\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1686580210},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"286629f8-f8ad-11ed-9901-da7ad0900002\",\"scope\":[\"test:testgetadowntimereturnsokresponse1684765810\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2941966869", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-03-22T17:28:50.909Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/downtime", + "query": [ + [ + "with_creator", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "[{\"id\":1529094018,\"monitor_id\":null,\"org_id\":321813,\"start\":1635430672,\"end\":null,\"canceled\":null,\"created\":1635430672,\"modified\":1635430672,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1d9e7eee-b23a-11ed-a0dc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635430672\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1529121935,\"monitor_id\":null,\"org_id\":321813,\"start\":1635431628,\"end\":null,\"canceled\":null,\"created\":1635431628,\"modified\":1635431628,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1d9ec3cc-b23a-11ed-a0ea-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635431628\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1529146913,\"monitor_id\":null,\"org_id\":321813,\"start\":1635432530,\"end\":null,\"canceled\":null,\"created\":1635432530,\"modified\":1635432530,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1da042ec-b23a-11ed-a16b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635432530\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1529163389,\"monitor_id\":null,\"org_id\":321813,\"start\":1635432982,\"end\":null,\"canceled\":null,\"created\":1635432982,\"modified\":1635432982,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1da0495e-b23a-11ed-a16c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635432982\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1529202437,\"monitor_id\":null,\"org_id\":321813,\"start\":1635434214,\"end\":null,\"canceled\":null,\"created\":1635434214,\"modified\":1635434214,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1da06d30-b23a-11ed-a178-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635434214\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1529294591,\"monitor_id\":null,\"org_id\":321813,\"start\":1635437311,\"end\":null,\"canceled\":null,\"created\":1635437311,\"modified\":1635437311,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1da0eabc-b23a-11ed-a193-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635437311\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1530384499,\"monitor_id\":null,\"org_id\":321813,\"start\":1635477074,\"end\":null,\"canceled\":null,\"created\":1635477074,\"modified\":1635477074,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1da8e726-b23a-11ed-a3ab-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635477074\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1530800029,\"monitor_id\":null,\"org_id\":321813,\"start\":1635494828,\"end\":null,\"canceled\":null,\"created\":1635494828,\"modified\":1635494828,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1db7e4f6-b23a-11ed-a86e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635494828\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1530853487,\"monitor_id\":null,\"org_id\":321813,\"start\":1635496863,\"end\":null,\"canceled\":null,\"created\":1635496863,\"modified\":1635496863,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1db8d8ac-b23a-11ed-a879-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635496863\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1531712870,\"monitor_id\":null,\"org_id\":321813,\"start\":1635528083,\"end\":null,\"canceled\":null,\"created\":1635528083,\"modified\":1635528083,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1dc7e13a-b23a-11ed-ad75-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635528083\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1532588027,\"monitor_id\":null,\"org_id\":321813,\"start\":1635563467,\"end\":null,\"canceled\":null,\"created\":1635563467,\"modified\":1635563467,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1dcb33f8-b23a-11ed-ae77-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635563467\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1533480021,\"monitor_id\":null,\"org_id\":321813,\"start\":1635609970,\"end\":null,\"canceled\":null,\"created\":1635609970,\"modified\":1635609970,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1dcd0b9c-b23a-11ed-af06-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635609970\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1534139165,\"monitor_id\":null,\"org_id\":321813,\"start\":1635649871,\"end\":null,\"canceled\":null,\"created\":1635649871,\"modified\":1635649871,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1dce8d64-b23a-11ed-af88-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635649871\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1535667724,\"monitor_id\":null,\"org_id\":321813,\"start\":1635736119,\"end\":null,\"canceled\":null,\"created\":1635736119,\"modified\":1635736119,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1dd35b50-b23a-11ed-b0e9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635736119\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1537814729,\"monitor_id\":null,\"org_id\":321813,\"start\":1635822615,\"end\":null,\"canceled\":null,\"created\":1635822615,\"modified\":1635822615,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1de58d3e-b23a-11ed-b608-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635822615\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538329871,\"monitor_id\":null,\"org_id\":321813,\"start\":1635844828,\"end\":null,\"canceled\":null,\"created\":1635844828,\"modified\":1635844828,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1de8bb30-b23a-11ed-b6d9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635844828\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538351222,\"monitor_id\":null,\"org_id\":321813,\"start\":1635845693,\"end\":null,\"canceled\":null,\"created\":1635845693,\"modified\":1635845693,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1de8f14a-b23a-11ed-b6e7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635845693\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538371693,\"monitor_id\":null,\"org_id\":321813,\"start\":1635846494,\"end\":null,\"canceled\":null,\"created\":1635846494,\"modified\":1635846494,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1de919c2-b23a-11ed-b6f4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635846494\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538380758,\"monitor_id\":null,\"org_id\":321813,\"start\":1635846905,\"end\":null,\"canceled\":null,\"created\":1635846905,\"modified\":1635846905,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1de92250-b23a-11ed-b6f8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635846905\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538460083,\"monitor_id\":null,\"org_id\":321813,\"start\":1635849912,\"end\":null,\"canceled\":null,\"created\":1635849912,\"modified\":1635849912,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1de9870e-b23a-11ed-b70e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635849912\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538479979,\"monitor_id\":null,\"org_id\":321813,\"start\":1635850647,\"end\":null,\"canceled\":null,\"created\":1635850647,\"modified\":1635850647,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1de99172-b23a-11ed-b713-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635850647\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538496375,\"monitor_id\":null,\"org_id\":321813,\"start\":1635851235,\"end\":null,\"canceled\":null,\"created\":1635851235,\"modified\":1635851235,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1de9e398-b23a-11ed-b72e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635851234\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538507650,\"monitor_id\":null,\"org_id\":321813,\"start\":1635851716,\"end\":null,\"canceled\":null,\"created\":1635851716,\"modified\":1635851716,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1de9e5be-b23a-11ed-b72f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635851716\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538792096,\"monitor_id\":null,\"org_id\":321813,\"start\":1635862344,\"end\":null,\"canceled\":null,\"created\":1635862344,\"modified\":1635862344,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1deb279e-b23a-11ed-b784-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635862344\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538849921,\"monitor_id\":null,\"org_id\":321813,\"start\":1635864374,\"end\":null,\"canceled\":null,\"created\":1635864374,\"modified\":1635864374,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1deb73a2-b23a-11ed-b797-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635864374\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1538908288,\"monitor_id\":null,\"org_id\":321813,\"start\":1635866208,\"end\":null,\"canceled\":null,\"created\":1635866208,\"modified\":1635866208,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1debd126-b23a-11ed-b7b0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635866208\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1539261412,\"monitor_id\":null,\"org_id\":321813,\"start\":1635877715,\"end\":null,\"canceled\":null,\"created\":1635877715,\"modified\":1635877715,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1deefd9c-b23a-11ed-b8b8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635877715\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540108757,\"monitor_id\":null,\"org_id\":321813,\"start\":1635908885,\"end\":null,\"canceled\":null,\"created\":1635908885,\"modified\":1635908885,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df2a096-b23a-11ed-b9b4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635908885\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540572672,\"monitor_id\":null,\"org_id\":321813,\"start\":1635929887,\"end\":null,\"canceled\":null,\"created\":1635929887,\"modified\":1635929887,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df51538-b23a-11ed-ba64-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635929887\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540701346,\"monitor_id\":null,\"org_id\":321813,\"start\":1635935292,\"end\":null,\"canceled\":null,\"created\":1635935292,\"modified\":1635935292,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df5e13e-b23a-11ed-baa2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635935292\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540717743,\"monitor_id\":null,\"org_id\":321813,\"start\":1635935891,\"end\":null,\"canceled\":null,\"created\":1635935891,\"modified\":1635935891,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df5f5ac-b23a-11ed-baa8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635935891\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540730013,\"monitor_id\":null,\"org_id\":321813,\"start\":1635936393,\"end\":null,\"canceled\":null,\"created\":1635936393,\"modified\":1635936393,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df61a5a-b23a-11ed-baaf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635936393\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540757858,\"monitor_id\":null,\"org_id\":321813,\"start\":1635937485,\"end\":null,\"canceled\":null,\"created\":1635937485,\"modified\":1635937485,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df64746-b23a-11ed-babd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635937484\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540791105,\"monitor_id\":null,\"org_id\":321813,\"start\":1635938835,\"end\":null,\"canceled\":null,\"created\":1635938835,\"modified\":1635938835,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df69dd6-b23a-11ed-bace-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635938834\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540892330,\"monitor_id\":null,\"org_id\":321813,\"start\":1635942733,\"end\":null,\"canceled\":null,\"created\":1635942733,\"modified\":1635942733,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df72288-b23a-11ed-bae5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635942733\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540951301,\"monitor_id\":null,\"org_id\":321813,\"start\":1635944939,\"end\":null,\"canceled\":null,\"created\":1635944939,\"modified\":1635944939,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df74ac4-b23a-11ed-baf4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635944939\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1540976547,\"monitor_id\":null,\"org_id\":321813,\"start\":1635945803,\"end\":null,\"canceled\":null,\"created\":1635945803,\"modified\":1635945803,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df79e66-b23a-11ed-bb09-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635945803\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1541099168,\"monitor_id\":null,\"org_id\":321813,\"start\":1635950072,\"end\":null,\"canceled\":null,\"created\":1635950072,\"modified\":1635950072,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df85b58-b23a-11ed-bb32-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635950072\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1541123431,\"monitor_id\":null,\"org_id\":321813,\"start\":1635950917,\"end\":null,\"canceled\":null,\"created\":1635950917,\"modified\":1635950917,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df86774-b23a-11ed-bb37-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635950916\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1541166920,\"monitor_id\":null,\"org_id\":321813,\"start\":1635952148,\"end\":null,\"canceled\":null,\"created\":1635952148,\"modified\":1635952148,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df89e56-b23a-11ed-bb3d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635952148\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1541168955,\"monitor_id\":null,\"org_id\":321813,\"start\":1635952225,\"end\":null,\"canceled\":null,\"created\":1635952225,\"modified\":1635952225,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1df8a5ea-b23a-11ed-bb3e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635952225\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1541447539,\"monitor_id\":null,\"org_id\":321813,\"start\":1635961142,\"end\":null,\"canceled\":null,\"created\":1635961142,\"modified\":1635961142,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1dfb6406-b23a-11ed-bc18-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635961142\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1542414385,\"monitor_id\":null,\"org_id\":321813,\"start\":1635995531,\"end\":null,\"canceled\":null,\"created\":1635995531,\"modified\":1635995531,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e0138ae-b23a-11ed-bda2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1635995531\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1542865854,\"monitor_id\":null,\"org_id\":321813,\"start\":1636016271,\"end\":null,\"canceled\":null,\"created\":1636016271,\"modified\":1636016271,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e04f28c-b23a-11ed-be82-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636016271\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1542975384,\"monitor_id\":null,\"org_id\":321813,\"start\":1636021061,\"end\":null,\"canceled\":null,\"created\":1636021061,\"modified\":1636021061,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e058ab2-b23a-11ed-beb0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636021061\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543014508,\"monitor_id\":null,\"org_id\":321813,\"start\":1636022565,\"end\":null,\"canceled\":null,\"created\":1636022565,\"modified\":1636022565,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e059c32-b23a-11ed-beb5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636022565\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543037329,\"monitor_id\":null,\"org_id\":321813,\"start\":1636023533,\"end\":null,\"canceled\":null,\"created\":1636023533,\"modified\":1636023533,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e05cf5e-b23a-11ed-bec4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636023533\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543197308,\"monitor_id\":null,\"org_id\":321813,\"start\":1636029863,\"end\":null,\"canceled\":null,\"created\":1636029863,\"modified\":1636029863,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e06d994-b23a-11ed-bf0d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636029863\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543198026,\"monitor_id\":null,\"org_id\":321813,\"start\":1636029889,\"end\":null,\"canceled\":null,\"created\":1636029889,\"modified\":1636029889,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e06dbe2-b23a-11ed-bf0e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636029889\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543220645,\"monitor_id\":null,\"org_id\":321813,\"start\":1636030846,\"end\":null,\"canceled\":null,\"created\":1636030846,\"modified\":1636030846,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e06f122-b23a-11ed-bf15-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636030845\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543236690,\"monitor_id\":null,\"org_id\":321813,\"start\":1636031392,\"end\":null,\"canceled\":null,\"created\":1636031392,\"modified\":1636031392,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e0704dc-b23a-11ed-bf1c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636031391\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543268079,\"monitor_id\":null,\"org_id\":321813,\"start\":1636032593,\"end\":null,\"canceled\":null,\"created\":1636032593,\"modified\":1636032593,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e071a3a-b23a-11ed-bf24-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636032593\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543295301,\"monitor_id\":null,\"org_id\":321813,\"start\":1636033603,\"end\":null,\"canceled\":null,\"created\":1636033603,\"modified\":1636033603,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e074244-b23a-11ed-bf2e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636033603\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543306677,\"monitor_id\":null,\"org_id\":321813,\"start\":1636033942,\"end\":null,\"canceled\":null,\"created\":1636033942,\"modified\":1636033942,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e074f46-b23a-11ed-bf31-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636033942\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543316846,\"monitor_id\":null,\"org_id\":321813,\"start\":1636034371,\"end\":null,\"canceled\":null,\"created\":1636034371,\"modified\":1636034371,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e07613e-b23a-11ed-bf35-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636034371\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543334710,\"monitor_id\":null,\"org_id\":321813,\"start\":1636034965,\"end\":null,\"canceled\":null,\"created\":1636034965,\"modified\":1636034965,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e077200-b23a-11ed-bf3b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636034965\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543360999,\"monitor_id\":null,\"org_id\":321813,\"start\":1636035958,\"end\":null,\"canceled\":null,\"created\":1636035958,\"modified\":1636035958,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e079050-b23a-11ed-bf45-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636035957\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543366772,\"monitor_id\":null,\"org_id\":321813,\"start\":1636036106,\"end\":null,\"canceled\":null,\"created\":1636036106,\"modified\":1636036106,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e07964a-b23a-11ed-bf46-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636036106\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543370103,\"monitor_id\":null,\"org_id\":321813,\"start\":1636036246,\"end\":null,\"canceled\":null,\"created\":1636036246,\"modified\":1636036246,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e07a072-b23a-11ed-bf49-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636036246\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543384605,\"monitor_id\":null,\"org_id\":321813,\"start\":1636036728,\"end\":null,\"canceled\":null,\"created\":1636036728,\"modified\":1636036728,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e07a950-b23a-11ed-bf4d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636036728\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543386109,\"monitor_id\":null,\"org_id\":321813,\"start\":1636036795,\"end\":null,\"canceled\":null,\"created\":1636036795,\"modified\":1636036795,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e07ab30-b23a-11ed-bf4e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636036794\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543528599,\"monitor_id\":null,\"org_id\":321813,\"start\":1636041454,\"end\":null,\"canceled\":null,\"created\":1636041454,\"modified\":1636041454,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e092a78-b23a-11ed-bfa2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636041453\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543563646,\"monitor_id\":null,\"org_id\":321813,\"start\":1636042490,\"end\":null,\"canceled\":null,\"created\":1636042490,\"modified\":1636042490,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e0961be-b23a-11ed-bfaf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636042490\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543588609,\"monitor_id\":null,\"org_id\":321813,\"start\":1636043282,\"end\":null,\"canceled\":null,\"created\":1636043282,\"modified\":1636043282,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e097636-b23a-11ed-bfb5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636043282\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543590218,\"monitor_id\":null,\"org_id\":321813,\"start\":1636043353,\"end\":null,\"canceled\":null,\"created\":1636043353,\"modified\":1636043353,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e097848-b23a-11ed-bfb6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636043353\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543592624,\"monitor_id\":null,\"org_id\":321813,\"start\":1636043431,\"end\":null,\"canceled\":null,\"created\":1636043431,\"modified\":1636043431,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e097af0-b23a-11ed-bfb7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636043430\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543614250,\"monitor_id\":null,\"org_id\":321813,\"start\":1636044143,\"end\":null,\"canceled\":null,\"created\":1636044143,\"modified\":1636044143,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e09ff0c-b23a-11ed-bfdc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636044143\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543718086,\"monitor_id\":null,\"org_id\":321813,\"start\":1636047506,\"end\":null,\"canceled\":null,\"created\":1636047506,\"modified\":1636047506,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e0b7cf6-b23a-11ed-b872-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636047506\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543954331,\"monitor_id\":null,\"org_id\":321813,\"start\":1636055691,\"end\":null,\"canceled\":null,\"created\":1636055691,\"modified\":1636055691,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e0cb544-b23a-11ed-b8ba-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636055691\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1543978955,\"monitor_id\":null,\"org_id\":321813,\"start\":1636056444,\"end\":null,\"canceled\":null,\"created\":1636056444,\"modified\":1636056444,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e0cc66a-b23a-11ed-b8bf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636056444\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1544323766,\"monitor_id\":null,\"org_id\":321813,\"start\":1636068854,\"end\":null,\"canceled\":null,\"created\":1636068854,\"modified\":1636068854,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e0e8cb6-b23a-11ed-b949-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636068853\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1544637035,\"monitor_id\":null,\"org_id\":321813,\"start\":1636081707,\"end\":null,\"canceled\":null,\"created\":1636081707,\"modified\":1636081707,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e10b676-b23a-11ed-b9ec-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636081707\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1545074705,\"monitor_id\":null,\"org_id\":321813,\"start\":1636102507,\"end\":null,\"canceled\":null,\"created\":1636102508,\"modified\":1636102508,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e141d8e-b23a-11ed-ba85-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636102507\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1545506366,\"monitor_id\":null,\"org_id\":321813,\"start\":1636119861,\"end\":null,\"canceled\":null,\"created\":1636119861,\"modified\":1636119861,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e16098c-b23a-11ed-baec-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636119860\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1545513768,\"monitor_id\":null,\"org_id\":321813,\"start\":1636120143,\"end\":null,\"canceled\":null,\"created\":1636120143,\"modified\":1636120143,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e161274-b23a-11ed-baee-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636120143\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1545544977,\"monitor_id\":null,\"org_id\":321813,\"start\":1636121275,\"end\":null,\"canceled\":null,\"created\":1636121275,\"modified\":1636121275,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e163b96-b23a-11ed-baf6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636121275\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1545556983,\"monitor_id\":null,\"org_id\":321813,\"start\":1636121760,\"end\":null,\"canceled\":null,\"created\":1636121760,\"modified\":1636121760,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e1655cc-b23a-11ed-baf9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636121760\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1545653998,\"monitor_id\":null,\"org_id\":321813,\"start\":1636125192,\"end\":null,\"canceled\":null,\"created\":1636125192,\"modified\":1636125192,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e16a266-b23a-11ed-bb13-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636125191\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1545686746,\"monitor_id\":null,\"org_id\":321813,\"start\":1636126319,\"end\":null,\"canceled\":null,\"created\":1636126319,\"modified\":1636126319,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e174216-b23a-11ed-bb3d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636126319\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1546768479,\"monitor_id\":null,\"org_id\":321813,\"start\":1636168340,\"end\":null,\"canceled\":null,\"created\":1636168340,\"modified\":1636168340,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e1d61d2-b23a-11ed-bcfa-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636168340\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1548254480,\"monitor_id\":null,\"org_id\":321813,\"start\":1636254661,\"end\":null,\"canceled\":null,\"created\":1636254661,\"modified\":1636254661,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e210602-b23a-11ed-bde4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636254661\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1549706527,\"monitor_id\":null,\"org_id\":321813,\"start\":1636341037,\"end\":null,\"canceled\":null,\"created\":1636341037,\"modified\":1636341037,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e2508f6-b23a-11ed-bee2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636341037\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1550303673,\"monitor_id\":null,\"org_id\":321813,\"start\":1636369554,\"end\":null,\"canceled\":null,\"created\":1636369554,\"modified\":1636369554,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e297198-b23a-11ed-847a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636369554\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1550303957,\"monitor_id\":null,\"org_id\":321813,\"start\":1636369563,\"end\":null,\"canceled\":null,\"created\":1636369563,\"modified\":1636369563,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e297418-b23a-11ed-847b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636369563\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1550353324,\"monitor_id\":null,\"org_id\":321813,\"start\":1636371813,\"end\":null,\"canceled\":null,\"created\":1636371813,\"modified\":1636371813,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e2988ea-b23a-11ed-8483-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636371813\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1550578765,\"monitor_id\":null,\"org_id\":321813,\"start\":1636381158,\"end\":null,\"canceled\":null,\"created\":1636381158,\"modified\":1636381158,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e2ae226-b23a-11ed-84dd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636381158\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1550617965,\"monitor_id\":null,\"org_id\":321813,\"start\":1636382669,\"end\":null,\"canceled\":null,\"created\":1636382669,\"modified\":1636382669,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e2b3b90-b23a-11ed-84ff-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636382669\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1550785063,\"monitor_id\":null,\"org_id\":321813,\"start\":1636388323,\"end\":null,\"canceled\":null,\"created\":1636388323,\"modified\":1636388323,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e2c17ae-b23a-11ed-8542-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636388321\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1551242813,\"monitor_id\":null,\"org_id\":321813,\"start\":1636404048,\"end\":null,\"canceled\":null,\"created\":1636404048,\"modified\":1636404048,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e2df4a2-b23a-11ed-85b8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636404048\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1551385999,\"monitor_id\":null,\"org_id\":321813,\"start\":1636409106,\"end\":null,\"canceled\":null,\"created\":1636409106,\"modified\":1636409106,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e2eabf4-b23a-11ed-85eb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636409106\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1551512055,\"monitor_id\":null,\"org_id\":321813,\"start\":1636413624,\"end\":null,\"canceled\":null,\"created\":1636413624,\"modified\":1636413624,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e2f22b4-b23a-11ed-8610-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636413624\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1551873185,\"monitor_id\":null,\"org_id\":321813,\"start\":1636427372,\"end\":null,\"canceled\":null,\"created\":1636427372,\"modified\":1636427372,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e33ca8a-b23a-11ed-878a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636427372\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1552307336,\"monitor_id\":null,\"org_id\":321813,\"start\":1636446453,\"end\":null,\"canceled\":null,\"created\":1636446453,\"modified\":1636446453,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e3a8474-b23a-11ed-897e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636446453\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1552364901,\"monitor_id\":null,\"org_id\":321813,\"start\":1636448748,\"end\":null,\"canceled\":null,\"created\":1636448748,\"modified\":1636448748,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e3ace3e-b23a-11ed-898e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636448748\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1552382015,\"monitor_id\":null,\"org_id\":321813,\"start\":1636449492,\"end\":null,\"canceled\":null,\"created\":1636449492,\"modified\":1636449492,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e3afc56-b23a-11ed-899b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636449492\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1552410601,\"monitor_id\":null,\"org_id\":321813,\"start\":1636450646,\"end\":null,\"canceled\":null,\"created\":1636450646,\"modified\":1636450646,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e3b07fa-b23a-11ed-89a0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636450646\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1552414865,\"monitor_id\":null,\"org_id\":321813,\"start\":1636450833,\"end\":null,\"canceled\":null,\"created\":1636450833,\"modified\":1636450833,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e3b09f8-b23a-11ed-89a1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636450833\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1552525745,\"monitor_id\":null,\"org_id\":321813,\"start\":1636455108,\"end\":null,\"canceled\":null,\"created\":1636455108,\"modified\":1636455108,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e3e3e5c-b23a-11ed-8a92-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636455108\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1552777641,\"monitor_id\":null,\"org_id\":321813,\"start\":1636465328,\"end\":null,\"canceled\":null,\"created\":1636465328,\"modified\":1636465328,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e408b26-b23a-11ed-8b43-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636465328\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1552961636,\"monitor_id\":null,\"org_id\":321813,\"start\":1636471797,\"end\":null,\"canceled\":null,\"created\":1636471797,\"modified\":1636471797,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e416e9c-b23a-11ed-8b84-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636471796\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1553004070,\"monitor_id\":null,\"org_id\":321813,\"start\":1636473336,\"end\":null,\"canceled\":null,\"created\":1636473336,\"modified\":1636473336,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e41af38-b23a-11ed-8b97-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636473336\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1554186612,\"monitor_id\":null,\"org_id\":321813,\"start\":1636513793,\"end\":null,\"canceled\":null,\"created\":1636513793,\"modified\":1636513793,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e49a56c-b23a-11ed-8d7f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636513793\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1554857461,\"monitor_id\":null,\"org_id\":321813,\"start\":1636539562,\"end\":null,\"canceled\":null,\"created\":1636539562,\"modified\":1636539562,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e4d480c-b23a-11ed-8e87-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636539562\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1554940740,\"monitor_id\":null,\"org_id\":321813,\"start\":1636542691,\"end\":null,\"canceled\":null,\"created\":1636542691,\"modified\":1636542691,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e4dda6a-b23a-11ed-8ebc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636542691\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1555319238,\"monitor_id\":null,\"org_id\":321813,\"start\":1636556504,\"end\":null,\"canceled\":null,\"created\":1636556504,\"modified\":1636556504,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e4fdde2-b23a-11ed-8f4b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636556504\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1555332502,\"monitor_id\":null,\"org_id\":321813,\"start\":1636556894,\"end\":null,\"canceled\":null,\"created\":1636556894,\"modified\":1636556894,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e4ffb10-b23a-11ed-8f55-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636556894\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1556584204,\"monitor_id\":null,\"org_id\":321813,\"start\":1636600248,\"end\":null,\"canceled\":null,\"created\":1636600248,\"modified\":1636600248,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e58a328-b23a-11ed-91d5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636600248\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557086035,\"monitor_id\":null,\"org_id\":321813,\"start\":1636621227,\"end\":null,\"canceled\":null,\"created\":1636621227,\"modified\":1636621227,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5cedd4-b23a-11ed-9303-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636621227\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557107796,\"monitor_id\":null,\"org_id\":321813,\"start\":1636622137,\"end\":null,\"canceled\":null,\"created\":1636622137,\"modified\":1636622137,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5d03dc-b23a-11ed-9309-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636622137\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557134293,\"monitor_id\":null,\"org_id\":321813,\"start\":1636623133,\"end\":null,\"canceled\":null,\"created\":1636623133,\"modified\":1636623133,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5d0dc8-b23a-11ed-930d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636623133\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557150751,\"monitor_id\":null,\"org_id\":321813,\"start\":1636623839,\"end\":null,\"canceled\":null,\"created\":1636623839,\"modified\":1636623839,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5d1e9e-b23a-11ed-9313-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636623839\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557303882,\"monitor_id\":null,\"org_id\":321813,\"start\":1636629970,\"end\":null,\"canceled\":null,\"created\":1636629970,\"modified\":1636629970,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5dbade-b23a-11ed-933e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636629970\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557337181,\"monitor_id\":null,\"org_id\":321813,\"start\":1636631354,\"end\":null,\"canceled\":null,\"created\":1636631354,\"modified\":1636631354,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5dd97e-b23a-11ed-9348-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636631354\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557349692,\"monitor_id\":null,\"org_id\":321813,\"start\":1636631913,\"end\":null,\"canceled\":null,\"created\":1636631913,\"modified\":1636631913,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5deb08-b23a-11ed-934c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636631913\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557506569,\"monitor_id\":null,\"org_id\":321813,\"start\":1636638473,\"end\":null,\"canceled\":null,\"created\":1636638473,\"modified\":1636638473,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5ec992-b23a-11ed-9384-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636638473\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557529070,\"monitor_id\":null,\"org_id\":321813,\"start\":1636639274,\"end\":null,\"canceled\":null,\"created\":1636639274,\"modified\":1636639274,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5eea76-b23a-11ed-938b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636639273\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557532673,\"monitor_id\":null,\"org_id\":321813,\"start\":1636639401,\"end\":null,\"canceled\":null,\"created\":1636639401,\"modified\":1636639401,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5eec88-b23a-11ed-938c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636639401\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557539506,\"monitor_id\":null,\"org_id\":321813,\"start\":1636639696,\"end\":null,\"canceled\":null,\"created\":1636639696,\"modified\":1636639696,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5f0380-b23a-11ed-938f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636639696\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557563406,\"monitor_id\":null,\"org_id\":321813,\"start\":1636640636,\"end\":null,\"canceled\":null,\"created\":1636640636,\"modified\":1636640636,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5f2040-b23a-11ed-939a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636640636\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557614661,\"monitor_id\":null,\"org_id\":321813,\"start\":1636642577,\"end\":null,\"canceled\":null,\"created\":1636642577,\"modified\":1636642577,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5f4354-b23a-11ed-93a5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636642576\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557643177,\"monitor_id\":null,\"org_id\":321813,\"start\":1636643711,\"end\":null,\"canceled\":null,\"created\":1636643711,\"modified\":1636643711,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5f865c-b23a-11ed-93b8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636643711\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1557648230,\"monitor_id\":null,\"org_id\":321813,\"start\":1636643874,\"end\":null,\"canceled\":null,\"created\":1636643874,\"modified\":1636643874,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e5f8b34-b23a-11ed-93ba-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636643874\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1558226796,\"monitor_id\":null,\"org_id\":321813,\"start\":1636664851,\"end\":null,\"canceled\":null,\"created\":1636664851,\"modified\":1636664851,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e6488be-b23a-11ed-94dc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636664850\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1558760915,\"monitor_id\":null,\"org_id\":321813,\"start\":1636686417,\"end\":null,\"canceled\":null,\"created\":1636686417,\"modified\":1636686417,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e6bc0f2-b23a-11ed-95dc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636686416\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559415436,\"monitor_id\":null,\"org_id\":321813,\"start\":1636715477,\"end\":null,\"canceled\":null,\"created\":1636715477,\"modified\":1636715477,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e714b94-b23a-11ed-9720-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636715477\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559462609,\"monitor_id\":null,\"org_id\":321813,\"start\":1636717420,\"end\":null,\"canceled\":null,\"created\":1636717420,\"modified\":1636717420,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e71b912-b23a-11ed-973c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636717420\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559670848,\"monitor_id\":null,\"org_id\":321813,\"start\":1636726076,\"end\":null,\"canceled\":null,\"created\":1636726076,\"modified\":1636726076,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e731d34-b23a-11ed-97a0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636726075\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559671165,\"monitor_id\":null,\"org_id\":321813,\"start\":1636726087,\"end\":null,\"canceled\":null,\"created\":1636726087,\"modified\":1636726087,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e731faa-b23a-11ed-97a1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636726086\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559720274,\"monitor_id\":null,\"org_id\":321813,\"start\":1636728009,\"end\":null,\"canceled\":null,\"created\":1636728009,\"modified\":1636728009,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e740410-b23a-11ed-97cd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636728009\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559727267,\"monitor_id\":null,\"org_id\":321813,\"start\":1636728288,\"end\":null,\"canceled\":null,\"created\":1636728288,\"modified\":1636728288,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e740afa-b23a-11ed-97ce-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636728288\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559764457,\"monitor_id\":null,\"org_id\":321813,\"start\":1636729554,\"end\":null,\"canceled\":null,\"created\":1636729554,\"modified\":1636729554,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e7487a0-b23a-11ed-97e9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636729554\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559774273,\"monitor_id\":null,\"org_id\":321813,\"start\":1636729903,\"end\":null,\"canceled\":null,\"created\":1636729903,\"modified\":1636729903,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e749254-b23a-11ed-97ed-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636729903\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559786345,\"monitor_id\":null,\"org_id\":321813,\"start\":1636730358,\"end\":null,\"canceled\":null,\"created\":1636730358,\"modified\":1636730358,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e74a334-b23a-11ed-97f1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636730358\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559924835,\"monitor_id\":null,\"org_id\":321813,\"start\":1636735261,\"end\":null,\"canceled\":null,\"created\":1636735261,\"modified\":1636735261,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e7606f2-b23a-11ed-9851-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636735261\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559952598,\"monitor_id\":null,\"org_id\":321813,\"start\":1636736236,\"end\":null,\"canceled\":null,\"created\":1636736236,\"modified\":1636736236,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e763384-b23a-11ed-985f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636736236\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559959372,\"monitor_id\":null,\"org_id\":321813,\"start\":1636736493,\"end\":null,\"canceled\":null,\"created\":1636736493,\"modified\":1636736493,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e7639d8-b23a-11ed-9862-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636736493\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1559984096,\"monitor_id\":null,\"org_id\":321813,\"start\":1636737317,\"end\":null,\"canceled\":null,\"created\":1636737317,\"modified\":1636737317,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e765184-b23a-11ed-9868-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636737317\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1560047092,\"monitor_id\":null,\"org_id\":321813,\"start\":1636739618,\"end\":null,\"canceled\":null,\"created\":1636739618,\"modified\":1636739618,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e769cf2-b23a-11ed-987c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636739618\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1560896094,\"monitor_id\":null,\"org_id\":321813,\"start\":1636773339,\"end\":null,\"canceled\":null,\"created\":1636773339,\"modified\":1636773339,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e7c0642-b23a-11ed-99e4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636773339\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1562320015,\"monitor_id\":null,\"org_id\":321813,\"start\":1636859642,\"end\":null,\"canceled\":null,\"created\":1636859642,\"modified\":1636859642,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e7fb5a8-b23a-11ed-9adf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636859642\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1563729162,\"monitor_id\":null,\"org_id\":321813,\"start\":1636945706,\"end\":null,\"canceled\":null,\"created\":1636945706,\"modified\":1636945706,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e85012a-b23a-11ed-9c47-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636945706\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1564229999,\"monitor_id\":null,\"org_id\":321813,\"start\":1636969914,\"end\":null,\"canceled\":null,\"created\":1636969914,\"modified\":1636969914,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e88db42-b23a-11ed-9d3a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636969914\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1564235471,\"monitor_id\":null,\"org_id\":321813,\"start\":1636970196,\"end\":null,\"canceled\":null,\"created\":1636970196,\"modified\":1636970196,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e88e5ec-b23a-11ed-9d3c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636970196\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1564319029,\"monitor_id\":null,\"org_id\":321813,\"start\":1636973554,\"end\":null,\"canceled\":null,\"created\":1636973554,\"modified\":1636973554,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e89cc0a-b23a-11ed-9d54-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636973554\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1564606484,\"monitor_id\":null,\"org_id\":321813,\"start\":1636985187,\"end\":null,\"canceled\":null,\"created\":1636985187,\"modified\":1636985187,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e8ae7d4-b23a-11ed-9d97-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636985187\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1564993818,\"monitor_id\":null,\"org_id\":321813,\"start\":1636999245,\"end\":null,\"canceled\":null,\"created\":1636999245,\"modified\":1636999245,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e8ef9aa-b23a-11ed-9e82-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1636999245\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1565026130,\"monitor_id\":null,\"org_id\":321813,\"start\":1637000309,\"end\":null,\"canceled\":null,\"created\":1637000309,\"modified\":1637000309,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e8f5d0a-b23a-11ed-9e98-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637000309\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1565064977,\"monitor_id\":null,\"org_id\":321813,\"start\":1637001623,\"end\":null,\"canceled\":null,\"created\":1637001623,\"modified\":1637001623,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e8f7d8a-b23a-11ed-9e9f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637001623\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1565912978,\"monitor_id\":null,\"org_id\":321813,\"start\":1637032060,\"end\":null,\"canceled\":null,\"created\":1637032060,\"modified\":1637032060,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e97913c-b23a-11ed-a0a2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637032060\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1566475235,\"monitor_id\":null,\"org_id\":321813,\"start\":1637055423,\"end\":null,\"canceled\":null,\"created\":1637055423,\"modified\":1637055423,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e9eecde-b23a-11ed-a276-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637055422\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1566483584,\"monitor_id\":null,\"org_id\":321813,\"start\":1637055781,\"end\":null,\"canceled\":null,\"created\":1637055781,\"modified\":1637055781,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1e9ef51c-b23a-11ed-a279-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637055781\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1566851694,\"monitor_id\":null,\"org_id\":321813,\"start\":1637069901,\"end\":null,\"canceled\":null,\"created\":1637069901,\"modified\":1637069901,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ea16d06-b23a-11ed-a309-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637069901\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1566900886,\"monitor_id\":null,\"org_id\":321813,\"start\":1637071571,\"end\":null,\"canceled\":null,\"created\":1637071571,\"modified\":1637071571,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ea1df66-b23a-11ed-a321-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637071571\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1566980541,\"monitor_id\":null,\"org_id\":321813,\"start\":1637074225,\"end\":null,\"canceled\":null,\"created\":1637074225,\"modified\":1637074225,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ea215b2-b23a-11ed-a331-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637074225\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1567454334,\"monitor_id\":null,\"org_id\":321813,\"start\":1637089336,\"end\":null,\"canceled\":null,\"created\":1637089336,\"modified\":1637089336,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ea6277e-b23a-11ed-a420-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637089336\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1568272984,\"monitor_id\":null,\"org_id\":321813,\"start\":1637118504,\"end\":null,\"canceled\":null,\"created\":1637118504,\"modified\":1637118504,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1eac032e-b23a-11ed-a57b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637118503\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1569311302,\"monitor_id\":null,\"org_id\":321813,\"start\":1637160870,\"end\":null,\"canceled\":null,\"created\":1637160870,\"modified\":1637160870,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1eb8037c-b23a-11ed-a83b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637160870\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1569938866,\"monitor_id\":null,\"org_id\":321813,\"start\":1637183353,\"end\":null,\"canceled\":null,\"created\":1637183353,\"modified\":1637183353,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ebcc754-b23a-11ed-a938-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637183353\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1570506999,\"monitor_id\":null,\"org_id\":321813,\"start\":1637205028,\"end\":null,\"canceled\":null,\"created\":1637205028,\"modified\":1637205028,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec1396a-b23a-11ed-aa51-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637205028\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1571062567,\"monitor_id\":null,\"org_id\":321813,\"start\":1637228323,\"end\":null,\"canceled\":null,\"created\":1637228323,\"modified\":1637228323,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec48192-b23a-11ed-ab44-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637228323\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1571173585,\"monitor_id\":null,\"org_id\":321813,\"start\":1637231013,\"end\":null,\"canceled\":null,\"created\":1637231013,\"modified\":1637231013,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec4b784-b23a-11ed-ab54-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637231013\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1571270620,\"monitor_id\":null,\"org_id\":321813,\"start\":1637234854,\"end\":null,\"canceled\":null,\"created\":1637234854,\"modified\":1637234854,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec50d38-b23a-11ed-ab6a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637234854\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1571669479,\"monitor_id\":null,\"org_id\":321813,\"start\":1637250297,\"end\":null,\"canceled\":null,\"created\":1637250297,\"modified\":1637250299,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1379828,\"updater_id\":1379828,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"monitor:tag\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec7229e-b23a-11ed-abfe-da7ad0900002\",\"scope\":[\"foo:baz\"],\"creator\":{\"id\":1379828,\"email\":\"hippolyte.henry@datadoghq.com\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"name\":\"Hippolyte Henry\"}},{\"id\":1571817917,\"monitor_id\":null,\"org_id\":321813,\"start\":1637255504,\"end\":null,\"canceled\":null,\"created\":1637255504,\"modified\":1637255504,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec88e18-b23a-11ed-ac5c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637255504\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1571831335,\"monitor_id\":null,\"org_id\":321813,\"start\":1637255943,\"end\":null,\"canceled\":null,\"created\":1637255943,\"modified\":1637255943,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec8a560-b23a-11ed-ac62-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637255943\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1571837557,\"monitor_id\":null,\"org_id\":321813,\"start\":1637256160,\"end\":null,\"canceled\":null,\"created\":1637256160,\"modified\":1637256160,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec8b0fa-b23a-11ed-ac65-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637256160\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1571909354,\"monitor_id\":null,\"org_id\":321813,\"start\":1637258859,\"end\":null,\"canceled\":null,\"created\":1637258859,\"modified\":1637258859,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec9c7e2-b23a-11ed-ac99-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637258859\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1571914418,\"monitor_id\":null,\"org_id\":321813,\"start\":1637259065,\"end\":null,\"canceled\":null,\"created\":1637259065,\"modified\":1637259065,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ec9d020-b23a-11ed-ac9a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637259065\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1572154342,\"monitor_id\":null,\"org_id\":321813,\"start\":1637267828,\"end\":null,\"canceled\":null,\"created\":1637267828,\"modified\":1637267828,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ecc0d4a-b23a-11ed-ad19-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637267828\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1572186666,\"monitor_id\":null,\"org_id\":321813,\"start\":1637269062,\"end\":null,\"canceled\":null,\"created\":1637269062,\"modified\":1637269062,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ecc6ed4-b23a-11ed-ad30-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637269062\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1572767984,\"monitor_id\":null,\"org_id\":321813,\"start\":1637291438,\"end\":null,\"canceled\":null,\"created\":1637291438,\"modified\":1637291438,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ed08334-b23a-11ed-ae38-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637291438\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1573180543,\"monitor_id\":null,\"org_id\":321813,\"start\":1637309866,\"end\":null,\"canceled\":null,\"created\":1637309866,\"modified\":1637309866,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ed3113a-b23a-11ed-aede-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637309865\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1573261418,\"monitor_id\":null,\"org_id\":321813,\"start\":1637313501,\"end\":null,\"canceled\":null,\"created\":1637313501,\"modified\":1637313501,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1ed38598-b23a-11ed-aefb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637313501\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1574927736,\"monitor_id\":null,\"org_id\":321813,\"start\":1637377839,\"end\":null,\"canceled\":null,\"created\":1637377839,\"modified\":1637377839,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"242b7afa-b23a-11ed-b21e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637377839\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1576489994,\"monitor_id\":null,\"org_id\":321813,\"start\":1637464341,\"end\":null,\"canceled\":null,\"created\":1637464341,\"modified\":1637464341,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"242f1cbe-b23a-11ed-b36b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637464341\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1577970828,\"monitor_id\":null,\"org_id\":321813,\"start\":1637550665,\"end\":null,\"canceled\":null,\"created\":1637550665,\"modified\":1637550665,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2435845a-b23a-11ed-b5d0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637550665\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1578310448,\"monitor_id\":null,\"org_id\":321813,\"start\":1637568050,\"end\":null,\"canceled\":null,\"created\":1637568050,\"modified\":1637568050,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24379380-b23a-11ed-b686-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637568050\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1578541387,\"monitor_id\":null,\"org_id\":321813,\"start\":1637578427,\"end\":null,\"canceled\":null,\"created\":1637578427,\"modified\":1637578427,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2439206a-b23a-11ed-b70c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637578427\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1578869288,\"monitor_id\":null,\"org_id\":321813,\"start\":1637590495,\"end\":null,\"canceled\":null,\"created\":1637590495,\"modified\":1637590495,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"243ab790-b23a-11ed-b790-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637590495\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1580044259,\"monitor_id\":null,\"org_id\":321813,\"start\":1637637079,\"end\":null,\"canceled\":null,\"created\":1637637079,\"modified\":1637637079,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"244c2034-b23a-11ed-bdcd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637637079\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1580564506,\"monitor_id\":null,\"org_id\":321813,\"start\":1637660954,\"end\":null,\"canceled\":null,\"created\":1637660954,\"modified\":1637660954,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"244ef5c0-b23a-11ed-bec0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637660954\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1580650044,\"monitor_id\":null,\"org_id\":321813,\"start\":1637664725,\"end\":null,\"canceled\":null,\"created\":1637664725,\"modified\":1637664725,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"244f4052-b23a-11ed-beda-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637664725\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1581163930,\"monitor_id\":null,\"org_id\":321813,\"start\":1637683881,\"end\":null,\"canceled\":null,\"created\":1637683881,\"modified\":1637683881,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24518e66-b23a-11ed-bfa1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637683881\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1581269152,\"monitor_id\":null,\"org_id\":321813,\"start\":1637687792,\"end\":null,\"canceled\":null,\"created\":1637687792,\"modified\":1637687792,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2452065c-b23a-11ed-bfc4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637687791\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1581397542,\"monitor_id\":null,\"org_id\":321813,\"start\":1637692814,\"end\":null,\"canceled\":null,\"created\":1637692814,\"modified\":1637692814,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2452b390-b23a-11ed-bc45-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637692814\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1581533230,\"monitor_id\":null,\"org_id\":321813,\"start\":1637698344,\"end\":null,\"canceled\":null,\"created\":1637698344,\"modified\":1637698344,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24537a50-b23a-11ed-bc85-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637698344\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1582134179,\"monitor_id\":null,\"org_id\":321813,\"start\":1637723332,\"end\":null,\"canceled\":null,\"created\":1637723332,\"modified\":1637723332,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2455df8e-b23a-11ed-bd4b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637723332\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1582572113,\"monitor_id\":null,\"org_id\":321813,\"start\":1637743540,\"end\":null,\"canceled\":null,\"created\":1637743540,\"modified\":1637743540,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2462b362-b23a-11ed-be67-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637743540\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1583112663,\"monitor_id\":null,\"org_id\":321813,\"start\":1637765237,\"end\":null,\"canceled\":null,\"created\":1637765237,\"modified\":1637765237,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"246e4b6e-b23a-11ed-bf4f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637765236\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1583263181,\"monitor_id\":null,\"org_id\":321813,\"start\":1637771029,\"end\":null,\"canceled\":null,\"created\":1637771029,\"modified\":1637771029,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2470a350-b23a-11ed-bf8a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637771029\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1583524636,\"monitor_id\":null,\"org_id\":321813,\"start\":1637781836,\"end\":null,\"canceled\":null,\"created\":1637781836,\"modified\":1637781836,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2474d5ce-b23a-11ed-82f0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637781836\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1584164394,\"monitor_id\":null,\"org_id\":321813,\"start\":1637810000,\"end\":null,\"canceled\":null,\"created\":1637810000,\"modified\":1637810000,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"247a8348-b23a-11ed-83ad-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637810000\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1584607380,\"monitor_id\":null,\"org_id\":321813,\"start\":1637830893,\"end\":null,\"canceled\":null,\"created\":1637830893,\"modified\":1637830893,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"247e2552-b23a-11ed-8432-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637830893\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1584625872,\"monitor_id\":null,\"org_id\":321813,\"start\":1637831713,\"end\":null,\"canceled\":null,\"created\":1637831713,\"modified\":1637831713,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"247e53ce-b23a-11ed-8438-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637831713\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1584669836,\"monitor_id\":null,\"org_id\":321813,\"start\":1637833600,\"end\":null,\"canceled\":null,\"created\":1637833600,\"modified\":1637833600,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"247fcbe6-b23a-11ed-8466-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637833600\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1584678497,\"monitor_id\":null,\"org_id\":321813,\"start\":1637834002,\"end\":null,\"canceled\":null,\"created\":1637834002,\"modified\":1637834002,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"247fd46a-b23a-11ed-8467-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637834002\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1584696612,\"monitor_id\":null,\"org_id\":321813,\"start\":1637834839,\"end\":null,\"canceled\":null,\"created\":1637834839,\"modified\":1637834839,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24800e30-b23a-11ed-846f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637834839\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1584712523,\"monitor_id\":null,\"org_id\":321813,\"start\":1637835503,\"end\":null,\"canceled\":null,\"created\":1637835503,\"modified\":1637835503,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2480910c-b23a-11ed-8480-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637835503\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1584908512,\"monitor_id\":null,\"org_id\":321813,\"start\":1637842300,\"end\":null,\"canceled\":null,\"created\":1637842300,\"modified\":1637842300,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2481eaac-b23a-11ed-84ae-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637842300\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1584967851,\"monitor_id\":null,\"org_id\":321813,\"start\":1637844860,\"end\":null,\"canceled\":null,\"created\":1637844860,\"modified\":1637844860,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2482bf68-b23a-11ed-84ca-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637844860\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1585035076,\"monitor_id\":null,\"org_id\":321813,\"start\":1637847821,\"end\":null,\"canceled\":null,\"created\":1637847821,\"modified\":1637847821,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2483d93e-b23a-11ed-84ed-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637847821\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1585047389,\"monitor_id\":null,\"org_id\":321813,\"start\":1637848341,\"end\":null,\"canceled\":null,\"created\":1637848341,\"modified\":1637848341,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"248419d0-b23a-11ed-84f8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637848340\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1585076871,\"monitor_id\":null,\"org_id\":321813,\"start\":1637849642,\"end\":null,\"canceled\":null,\"created\":1637849642,\"modified\":1637849642,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2484508a-b23a-11ed-84fe-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637849642\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1585097875,\"monitor_id\":null,\"org_id\":321813,\"start\":1637850553,\"end\":null,\"canceled\":null,\"created\":1637850553,\"modified\":1637850553,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2484d7ee-b23a-11ed-8511-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637850552\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1585123121,\"monitor_id\":null,\"org_id\":321813,\"start\":1637851750,\"end\":null,\"canceled\":null,\"created\":1637851750,\"modified\":1637851750,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"248530e0-b23a-11ed-851f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637851750\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1586000944,\"monitor_id\":null,\"org_id\":321813,\"start\":1637896328,\"end\":null,\"canceled\":null,\"created\":1637896328,\"modified\":1637896328,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"248a886a-b23a-11ed-85f1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637896328\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1586374430,\"monitor_id\":null,\"org_id\":321813,\"start\":1637915810,\"end\":null,\"canceled\":null,\"created\":1637915810,\"modified\":1637915810,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"248db2e2-b23a-11ed-8663-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637915810\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1586523233,\"monitor_id\":null,\"org_id\":321813,\"start\":1637922820,\"end\":null,\"canceled\":null,\"created\":1637922820,\"modified\":1637922820,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"248ee266-b23a-11ed-868c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637922820\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1586754645,\"monitor_id\":null,\"org_id\":321813,\"start\":1637931544,\"end\":null,\"canceled\":null,\"created\":1637931544,\"modified\":1637931544,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2490a2cc-b23a-11ed-86d7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637931544\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1586802398,\"monitor_id\":null,\"org_id\":321813,\"start\":1637933692,\"end\":null,\"canceled\":null,\"created\":1637933692,\"modified\":1637933692,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24915ed8-b23a-11ed-86f4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637933692\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1587037076,\"monitor_id\":null,\"org_id\":321813,\"start\":1637944507,\"end\":null,\"canceled\":null,\"created\":1637944507,\"modified\":1637944507,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"249396f8-b23a-11ed-8757-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637944507\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1587142767,\"monitor_id\":null,\"org_id\":321813,\"start\":1637949602,\"end\":null,\"canceled\":null,\"created\":1637949602,\"modified\":1637949602,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24945b7e-b23a-11ed-8777-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637949602\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1587752268,\"monitor_id\":null,\"org_id\":321813,\"start\":1637982779,\"end\":null,\"canceled\":null,\"created\":1637982779,\"modified\":1637982779,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24972804-b23a-11ed-87ec-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1637982778\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1589252913,\"monitor_id\":null,\"org_id\":321813,\"start\":1638069403,\"end\":null,\"canceled\":null,\"created\":1638069403,\"modified\":1638069403,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"249c4532-b23a-11ed-88d2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638069403\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1590554584,\"monitor_id\":null,\"org_id\":321813,\"start\":1638144981,\"end\":null,\"canceled\":null,\"created\":1638144981,\"modified\":1638144981,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24aa5eec-b23a-11ed-898e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638144980\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1590750873,\"monitor_id\":null,\"org_id\":321813,\"start\":1638155522,\"end\":null,\"canceled\":null,\"created\":1638155522,\"modified\":1638155522,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24ab5f4a-b23a-11ed-89b8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638155522\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1591099102,\"monitor_id\":null,\"org_id\":321813,\"start\":1638172780,\"end\":null,\"canceled\":null,\"created\":1638172780,\"modified\":1638172780,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24ae4926-b23a-11ed-8a2c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638172780\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1591338008,\"monitor_id\":null,\"org_id\":321813,\"start\":1638183038,\"end\":null,\"canceled\":null,\"created\":1638183038,\"modified\":1638183038,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24b0482a-b23a-11ed-8a7b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638183038\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1591622560,\"monitor_id\":null,\"org_id\":321813,\"start\":1638193303,\"end\":null,\"canceled\":null,\"created\":1638193303,\"modified\":1638193303,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24b21ad8-b23a-11ed-8ac3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638193303\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1591766182,\"monitor_id\":null,\"org_id\":321813,\"start\":1638198767,\"end\":null,\"canceled\":null,\"created\":1638198767,\"modified\":1638198767,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24b482a0-b23a-11ed-8b25-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638198767\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1591992163,\"monitor_id\":null,\"org_id\":321813,\"start\":1638207220,\"end\":null,\"canceled\":null,\"created\":1638207220,\"modified\":1638207220,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24b675ce-b23a-11ed-8b70-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638207220\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1592443041,\"monitor_id\":null,\"org_id\":321813,\"start\":1638224647,\"end\":null,\"canceled\":null,\"created\":1638224647,\"modified\":1638224647,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24bb56ac-b23a-11ed-8c34-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638224647\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1592459794,\"monitor_id\":null,\"org_id\":321813,\"start\":1638225205,\"end\":null,\"canceled\":null,\"created\":1638225205,\"modified\":1638225205,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24bb64da-b23a-11ed-8c37-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638225204\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1592474329,\"monitor_id\":null,\"org_id\":321813,\"start\":1638225787,\"end\":null,\"canceled\":null,\"created\":1638225787,\"modified\":1638225787,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24bb7718-b23a-11ed-8c3b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638225787\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1592536909,\"monitor_id\":null,\"org_id\":321813,\"start\":1638228199,\"end\":null,\"canceled\":null,\"created\":1638228199,\"modified\":1638228199,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24bbbb74-b23a-11ed-8c49-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638228199\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1592873593,\"monitor_id\":null,\"org_id\":321813,\"start\":1638241807,\"end\":null,\"canceled\":null,\"created\":1638241807,\"modified\":1638241807,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24bec710-b23a-11ed-8cd1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638241807\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1593492007,\"monitor_id\":null,\"org_id\":321813,\"start\":1638268377,\"end\":null,\"canceled\":null,\"created\":1638268377,\"modified\":1638268377,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24c5c52e-b23a-11ed-8e03-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638268377\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1593521140,\"monitor_id\":null,\"org_id\":321813,\"start\":1638269641,\"end\":null,\"canceled\":null,\"created\":1638269641,\"modified\":1638269641,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24c5e9aa-b23a-11ed-8e0b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638269641\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1593544154,\"monitor_id\":null,\"org_id\":321813,\"start\":1638270563,\"end\":null,\"canceled\":null,\"created\":1638270563,\"modified\":1638270563,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24c601e2-b23a-11ed-8e0e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638270563\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1593807371,\"monitor_id\":null,\"org_id\":321813,\"start\":1638279673,\"end\":null,\"canceled\":null,\"created\":1638279673,\"modified\":1638279673,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24c89b6e-b23a-11ed-8e79-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638279673\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1593818495,\"monitor_id\":null,\"org_id\":321813,\"start\":1638280178,\"end\":null,\"canceled\":null,\"created\":1638280178,\"modified\":1638280178,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24c90b80-b23a-11ed-8e85-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638280178\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1593880271,\"monitor_id\":null,\"org_id\":321813,\"start\":1638282631,\"end\":null,\"canceled\":null,\"created\":1638282631,\"modified\":1638282631,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24c98ede-b23a-11ed-8e9c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638282630\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1593936726,\"monitor_id\":null,\"org_id\":321813,\"start\":1638284588,\"end\":null,\"canceled\":null,\"created\":1638284588,\"modified\":1638284588,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24c9eed8-b23a-11ed-8ead-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638284587\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1594095175,\"monitor_id\":null,\"org_id\":321813,\"start\":1638290554,\"end\":null,\"canceled\":null,\"created\":1638290554,\"modified\":1638290554,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24cbba7e-b23a-11ed-8ef5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638290553\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1594629959,\"monitor_id\":null,\"org_id\":321813,\"start\":1638310632,\"end\":null,\"canceled\":null,\"created\":1638310632,\"modified\":1638310632,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24d22760-b23a-11ed-9016-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638310632\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1594843926,\"monitor_id\":null,\"org_id\":321813,\"start\":1638318723,\"end\":null,\"canceled\":null,\"created\":1638318723,\"modified\":1638318723,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24d3b878-b23a-11ed-9062-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638318723\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1595093335,\"monitor_id\":null,\"org_id\":321813,\"start\":1638328385,\"end\":null,\"canceled\":null,\"created\":1638328385,\"modified\":1638328385,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24d50a66-b23a-11ed-909b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638328384\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1595670399,\"monitor_id\":null,\"org_id\":321813,\"start\":1638353391,\"end\":null,\"canceled\":null,\"created\":1638353391,\"modified\":1638353391,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24da6c68-b23a-11ed-9162-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638353391\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1595829752,\"monitor_id\":null,\"org_id\":321813,\"start\":1638360115,\"end\":null,\"canceled\":null,\"created\":1638360115,\"modified\":1638360115,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24db91c4-b23a-11ed-9191-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638360115\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1596237831,\"monitor_id\":null,\"org_id\":321813,\"start\":1638374462,\"end\":null,\"canceled\":null,\"created\":1638374462,\"modified\":1638374462,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24e2b5e4-b23a-11ed-92e2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638374462\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1596411827,\"monitor_id\":null,\"org_id\":321813,\"start\":1638380946,\"end\":null,\"canceled\":null,\"created\":1638380946,\"modified\":1638380946,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24e5d06c-b23a-11ed-9385-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638380946\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1596696599,\"monitor_id\":null,\"org_id\":321813,\"start\":1638391588,\"end\":null,\"canceled\":null,\"created\":1638391588,\"modified\":1638391588,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24ea50b0-b23a-11ed-9460-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638391588\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1597310543,\"monitor_id\":null,\"org_id\":321813,\"start\":1638414653,\"end\":null,\"canceled\":null,\"created\":1638414653,\"modified\":1638414653,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24f06f40-b23a-11ed-95a0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638414653\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1597832219,\"monitor_id\":null,\"org_id\":321813,\"start\":1638436663,\"end\":null,\"canceled\":null,\"created\":1638436663,\"modified\":1638436663,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24f53160-b23a-11ed-96a8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638436663\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1597850977,\"monitor_id\":null,\"org_id\":321813,\"start\":1638437325,\"end\":null,\"canceled\":null,\"created\":1638437325,\"modified\":1638437325,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24f53ade-b23a-11ed-96ab-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638437325\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1598301428,\"monitor_id\":null,\"org_id\":321813,\"start\":1638453944,\"end\":null,\"canceled\":null,\"created\":1638453944,\"modified\":1638453944,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24f8c316-b23a-11ed-974c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638453944\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1598374055,\"monitor_id\":null,\"org_id\":321813,\"start\":1638456761,\"end\":null,\"canceled\":null,\"created\":1638456761,\"modified\":1638456761,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24f98f6c-b23a-11ed-976f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638456761\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1598639974,\"monitor_id\":null,\"org_id\":321813,\"start\":1638466692,\"end\":null,\"canceled\":null,\"created\":1638466692,\"modified\":1638466692,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24fc952c-b23a-11ed-9819-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638466692\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1598771026,\"monitor_id\":null,\"org_id\":321813,\"start\":1638471457,\"end\":null,\"canceled\":null,\"created\":1638471457,\"modified\":1638471457,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24fe018c-b23a-11ed-9852-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638471456\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1599554155,\"monitor_id\":null,\"org_id\":321813,\"start\":1638501009,\"end\":null,\"canceled\":null,\"created\":1638501009,\"modified\":1638501009,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2504631a-b23a-11ed-99b2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638501009\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600143925,\"monitor_id\":null,\"org_id\":321813,\"start\":1638526899,\"end\":null,\"canceled\":null,\"created\":1638526899,\"modified\":1638526899,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25098908-b23a-11ed-9ad0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638526899\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600271521,\"monitor_id\":null,\"org_id\":321813,\"start\":1638532347,\"end\":null,\"canceled\":null,\"created\":1638532347,\"modified\":1638532347,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2509eb1e-b23a-11ed-9ae5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638532347\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600281709,\"monitor_id\":null,\"org_id\":321813,\"start\":1638532840,\"end\":null,\"canceled\":null,\"created\":1638532840,\"modified\":1638532840,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2509f3c0-b23a-11ed-9ae7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638532840\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600902250,\"monitor_id\":null,\"org_id\":321813,\"start\":1638555718,\"end\":null,\"canceled\":null,\"created\":1638555718,\"modified\":1638555718,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"250f25c0-b23a-11ed-9c03-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638555718\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600905230,\"monitor_id\":null,\"org_id\":321813,\"start\":1638555816,\"end\":null,\"canceled\":null,\"created\":1638555816,\"modified\":1638555816,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"250f29ee-b23a-11ed-9c04-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638555816\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600926224,\"monitor_id\":null,\"org_id\":321813,\"start\":1638556552,\"end\":null,\"canceled\":null,\"created\":1638556552,\"modified\":1638556552,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"250f3c68-b23a-11ed-9c08-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638556552\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600927193,\"monitor_id\":null,\"org_id\":321813,\"start\":1638556601,\"end\":null,\"canceled\":null,\"created\":1638556601,\"modified\":1638556601,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"250f479e-b23a-11ed-9c0a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638556600\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600938433,\"monitor_id\":null,\"org_id\":321813,\"start\":1638556986,\"end\":null,\"canceled\":null,\"created\":1638556986,\"modified\":1638556986,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"250f56da-b23a-11ed-9c0e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638556986\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600948452,\"monitor_id\":null,\"org_id\":321813,\"start\":1638557410,\"end\":null,\"canceled\":null,\"created\":1638557410,\"modified\":1638557410,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"250f75ac-b23a-11ed-9c12-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638557410\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1600994635,\"monitor_id\":null,\"org_id\":321813,\"start\":1638559145,\"end\":null,\"canceled\":null,\"created\":1638559145,\"modified\":1638559145,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"250fd678-b23a-11ed-9c1d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638559145\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1601680069,\"monitor_id\":null,\"org_id\":321813,\"start\":1638587266,\"end\":null,\"canceled\":null,\"created\":1638587266,\"modified\":1638587266,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2512c0c2-b23a-11ed-9ccb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638587266\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1603240248,\"monitor_id\":null,\"org_id\":321813,\"start\":1638673984,\"end\":null,\"canceled\":null,\"created\":1638673984,\"modified\":1638673984,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"251867f2-b23a-11ed-9e2e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638673984\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1604792041,\"monitor_id\":null,\"org_id\":321813,\"start\":1638760257,\"end\":null,\"canceled\":null,\"created\":1638760257,\"modified\":1638760257,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"251e8a2e-b23a-11ed-9f99-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638760257\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1607009711,\"monitor_id\":null,\"org_id\":321813,\"start\":1638846605,\"end\":null,\"canceled\":null,\"created\":1638846605,\"modified\":1638846605,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"252f7a14-b23a-11ed-a368-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638846604\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1608019752,\"monitor_id\":null,\"org_id\":321813,\"start\":1638887255,\"end\":null,\"canceled\":null,\"created\":1638887255,\"modified\":1638887255,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"253cd89e-b23a-11ed-a632-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638887255\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1608061115,\"monitor_id\":null,\"org_id\":321813,\"start\":1638888300,\"end\":null,\"canceled\":null,\"created\":1638888300,\"modified\":1638888300,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"253d4c8e-b23a-11ed-a64e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638888299\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1608076740,\"monitor_id\":null,\"org_id\":321813,\"start\":1638888763,\"end\":null,\"canceled\":null,\"created\":1638888763,\"modified\":1638888763,\"message\":\"java-cancelDowntimesByScopeTest-local-1638888763-3\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"253d7bfa-b23a-11ed-a655-da7ad0900002\",\"scope\":[\"env:stage\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1608076762,\"monitor_id\":null,\"org_id\":321813,\"start\":1638888764,\"end\":null,\"canceled\":null,\"created\":1638888764,\"modified\":1638888764,\"message\":\"java-cancelDowntimesByScopeTest-local-1638888763-3\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"253d7eca-b23a-11ed-a656-da7ad0900002\",\"scope\":[\"env:stage\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1608077285,\"monitor_id\":null,\"org_id\":321813,\"start\":1638888789,\"end\":null,\"canceled\":null,\"created\":1638888789,\"modified\":1638888789,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"253d84ba-b23a-11ed-a657-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638888789\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1608135434,\"monitor_id\":null,\"org_id\":321813,\"start\":1638890121,\"end\":null,\"canceled\":null,\"created\":1638890121,\"modified\":1638890121,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"253dd726-b23a-11ed-a668-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638890120\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1608149153,\"monitor_id\":null,\"org_id\":321813,\"start\":1638890565,\"end\":null,\"canceled\":null,\"created\":1638890565,\"modified\":1638890565,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"253deb58-b23a-11ed-a66b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638890565\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1609043089,\"monitor_id\":null,\"org_id\":321813,\"start\":1638933140,\"end\":null,\"canceled\":null,\"created\":1638933140,\"modified\":1638933140,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"254e4732-b23a-11ed-aa68-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1638933140\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1611377681,\"monitor_id\":null,\"org_id\":321813,\"start\":1639019360,\"end\":null,\"canceled\":null,\"created\":1639019360,\"modified\":1639019360,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"256286c0-b23a-11ed-af36-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639019360\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1611858967,\"monitor_id\":null,\"org_id\":321813,\"start\":1639039090,\"end\":null,\"canceled\":null,\"created\":1639039090,\"modified\":1639039090,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2565f65c-b23a-11ed-b000-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639039090\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1612013252,\"monitor_id\":null,\"org_id\":321813,\"start\":1639045076,\"end\":null,\"canceled\":null,\"created\":1639045076,\"modified\":1639045076,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25670826-b23a-11ed-b041-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639045076\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1612040533,\"monitor_id\":null,\"org_id\":321813,\"start\":1639046120,\"end\":null,\"canceled\":null,\"created\":1639046120,\"modified\":1639046120,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25679584-b23a-11ed-b061-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639046120\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1612042473,\"monitor_id\":null,\"org_id\":321813,\"start\":1639046199,\"end\":null,\"canceled\":null,\"created\":1639046199,\"modified\":1639046199,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2567a0ec-b23a-11ed-b063-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639046198\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1612387908,\"monitor_id\":null,\"org_id\":321813,\"start\":1639059519,\"end\":null,\"canceled\":null,\"created\":1639059519,\"modified\":1639059519,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"256c3968-b23a-11ed-b12b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639059519\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1612718228,\"monitor_id\":null,\"org_id\":321813,\"start\":1639070105,\"end\":null,\"canceled\":null,\"created\":1639070105,\"modified\":1639070105,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"256f7c68-b23a-11ed-b20f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639070105\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1613697170,\"monitor_id\":null,\"org_id\":321813,\"start\":1639105733,\"end\":null,\"canceled\":null,\"created\":1639105733,\"modified\":1639105733,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2578c58e-b23a-11ed-b46b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639105732\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614261294,\"monitor_id\":null,\"org_id\":321813,\"start\":1639129392,\"end\":null,\"canceled\":null,\"created\":1639129392,\"modified\":1639129392,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257c3ad4-b23a-11ed-b55a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639129392\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614265735,\"monitor_id\":null,\"org_id\":321813,\"start\":1639129606,\"end\":null,\"canceled\":null,\"created\":1639129606,\"modified\":1639129606,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257c4c5e-b23a-11ed-b560-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639129606\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614312588,\"monitor_id\":null,\"org_id\":321813,\"start\":1639131518,\"end\":null,\"canceled\":null,\"created\":1639131518,\"modified\":1639131518,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257c6d42-b23a-11ed-b569-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639131518\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614314241,\"monitor_id\":null,\"org_id\":321813,\"start\":1639131573,\"end\":null,\"canceled\":null,\"created\":1639131573,\"modified\":1639131573,\"message\":\"java-cancelDowntimesByScopeTest-local-1639131573-3\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257c75ee-b23a-11ed-b56a-da7ad0900002\",\"scope\":[\"env:stage\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614314306,\"monitor_id\":null,\"org_id\":321813,\"start\":1639131575,\"end\":null,\"canceled\":null,\"created\":1639131575,\"modified\":1639131575,\"message\":\"java-cancelDowntimesByScopeTest-local-1639131575-3\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257c7878-b23a-11ed-b56b-da7ad0900002\",\"scope\":[\"env:stage\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614362536,\"monitor_id\":null,\"org_id\":321813,\"start\":1639133522,\"end\":null,\"canceled\":null,\"created\":1639133522,\"modified\":1639133522,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257cc9ae-b23a-11ed-b57e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639133521\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614473226,\"monitor_id\":null,\"org_id\":321813,\"start\":1639138145,\"end\":null,\"canceled\":null,\"created\":1639138145,\"modified\":1639138145,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257db3c8-b23a-11ed-b5ba-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639138145\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614595356,\"monitor_id\":null,\"org_id\":321813,\"start\":1639143225,\"end\":null,\"canceled\":null,\"created\":1639143225,\"modified\":1639143225,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257e1be2-b23a-11ed-b5d1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639143225\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614614143,\"monitor_id\":null,\"org_id\":321813,\"start\":1639144017,\"end\":null,\"canceled\":null,\"created\":1639144017,\"modified\":1639144017,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257e3b9a-b23a-11ed-b5d9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639144017\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614639003,\"monitor_id\":null,\"org_id\":321813,\"start\":1639144849,\"end\":null,\"canceled\":null,\"created\":1639144849,\"modified\":1639144849,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257e51ca-b23a-11ed-b5e1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639144848\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614655057,\"monitor_id\":null,\"org_id\":321813,\"start\":1639145477,\"end\":null,\"canceled\":null,\"created\":1639145477,\"modified\":1639145477,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257e6912-b23a-11ed-b5e2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639145477\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614657426,\"monitor_id\":null,\"org_id\":321813,\"start\":1639145572,\"end\":null,\"canceled\":null,\"created\":1639145572,\"modified\":1639145572,\"message\":\"java-cancelDowntimesByScopeTest-local-1639145572-3\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257e72cc-b23a-11ed-b5e4-da7ad0900002\",\"scope\":[\"env:stage\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614657459,\"monitor_id\":null,\"org_id\":321813,\"start\":1639145574,\"end\":null,\"canceled\":null,\"created\":1639145574,\"modified\":1639145574,\"message\":\"java-cancelDowntimesByScopeTest-local-1639145574-3\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257e7722-b23a-11ed-b5e5-da7ad0900002\",\"scope\":[\"env:stage\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614695601,\"monitor_id\":null,\"org_id\":321813,\"start\":1639146967,\"end\":null,\"canceled\":null,\"created\":1639146967,\"modified\":1639146967,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257ee342-b23a-11ed-b603-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639146967\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614823304,\"monitor_id\":null,\"org_id\":321813,\"start\":1639150802,\"end\":null,\"canceled\":null,\"created\":1639150802,\"modified\":1639150802,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257f5f98-b23a-11ed-b621-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639150802\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614903496,\"monitor_id\":null,\"org_id\":321813,\"start\":1639153012,\"end\":null,\"canceled\":null,\"created\":1639153012,\"modified\":1639153012,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257fa9bc-b23a-11ed-b633-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639153012\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614948050,\"monitor_id\":null,\"org_id\":321813,\"start\":1639154514,\"end\":null,\"canceled\":null,\"created\":1639154514,\"modified\":1639154514,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257fc046-b23a-11ed-b63b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639154514\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614963817,\"monitor_id\":null,\"org_id\":321813,\"start\":1639155120,\"end\":null,\"canceled\":null,\"created\":1639155120,\"modified\":1639155120,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257fc7e4-b23a-11ed-b63e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639155120\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614969241,\"monitor_id\":null,\"org_id\":321813,\"start\":1639155342,\"end\":null,\"canceled\":null,\"created\":1639155342,\"modified\":1639155342,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"257ff084-b23a-11ed-b64a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639155342\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1614992116,\"monitor_id\":null,\"org_id\":321813,\"start\":1639156110,\"end\":null,\"canceled\":null,\"created\":1639156110,\"modified\":1639156110,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25801096-b23a-11ed-b64f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639156110\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1615000084,\"monitor_id\":null,\"org_id\":321813,\"start\":1639156370,\"end\":null,\"canceled\":null,\"created\":1639156370,\"modified\":1639156370,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"258020d6-b23a-11ed-b651-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639156370\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1615105566,\"monitor_id\":null,\"org_id\":321813,\"start\":1639160379,\"end\":null,\"canceled\":null,\"created\":1639160379,\"modified\":1639160379,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2580cf5e-b23a-11ed-b680-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639160379\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1615113697,\"monitor_id\":null,\"org_id\":321813,\"start\":1639160690,\"end\":null,\"canceled\":null,\"created\":1639160690,\"modified\":1639160690,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2580d990-b23a-11ed-b684-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639160690\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1615202151,\"monitor_id\":null,\"org_id\":321813,\"start\":1639164074,\"end\":null,\"canceled\":null,\"created\":1639164074,\"modified\":1639164074,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"258171d4-b23a-11ed-b6ac-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639164074\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1615472151,\"monitor_id\":null,\"org_id\":321813,\"start\":1639173820,\"end\":null,\"canceled\":null,\"created\":1639173820,\"modified\":1639173820,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25831732-b23a-11ed-b711-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639173820\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1615481540,\"monitor_id\":null,\"org_id\":321813,\"start\":1639174155,\"end\":null,\"canceled\":null,\"created\":1639174155,\"modified\":1639174155,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25837be6-b23a-11ed-b719-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639174155\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1615502160,\"monitor_id\":null,\"org_id\":321813,\"start\":1639174815,\"end\":null,\"canceled\":null,\"created\":1639174815,\"modified\":1639174815,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2583b868-b23a-11ed-b72c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639174815\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1615546278,\"monitor_id\":null,\"org_id\":321813,\"start\":1639176409,\"end\":null,\"canceled\":null,\"created\":1639176409,\"modified\":1639176409,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25840034-b23a-11ed-b73c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639176409\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1615931969,\"monitor_id\":null,\"org_id\":321813,\"start\":1639192157,\"end\":null,\"canceled\":null,\"created\":1639192157,\"modified\":1639192157,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25853364-b23a-11ed-b796-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639192157\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1616665820,\"monitor_id\":null,\"org_id\":321813,\"start\":1639230299,\"end\":null,\"canceled\":null,\"created\":1639230300,\"modified\":1639230300,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"258718fa-b23a-11ed-b827-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639230299\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1617504631,\"monitor_id\":null,\"org_id\":321813,\"start\":1639278552,\"end\":null,\"canceled\":null,\"created\":1639278552,\"modified\":1639278552,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2589071e-b23a-11ed-b8b5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639278552\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1619067521,\"monitor_id\":null,\"org_id\":321813,\"start\":1639365074,\"end\":null,\"canceled\":null,\"created\":1639365074,\"modified\":1639365074,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"258e5c64-b23a-11ed-ba12-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639365073\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1619461149,\"monitor_id\":null,\"org_id\":321813,\"start\":1639382356,\"end\":null,\"canceled\":null,\"created\":1639382356,\"modified\":1639382356,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2591598c-b23a-11ed-badc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639382356\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1619484810,\"monitor_id\":null,\"org_id\":321813,\"start\":1639383448,\"end\":null,\"canceled\":null,\"created\":1639383448,\"modified\":1639383448,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2591a68a-b23a-11ed-baf6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639383448\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1619581092,\"monitor_id\":null,\"org_id\":321813,\"start\":1639387725,\"end\":null,\"canceled\":null,\"created\":1639387725,\"modified\":1639387725,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25922e2a-b23a-11ed-bb14-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639387725\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1619610004,\"monitor_id\":null,\"org_id\":321813,\"start\":1639389029,\"end\":null,\"canceled\":null,\"created\":1639389029,\"modified\":1639389029,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25924504-b23a-11ed-bb1b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639389029\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1620370388,\"monitor_id\":null,\"org_id\":321813,\"start\":1639415685,\"end\":null,\"canceled\":null,\"created\":1639415685,\"modified\":1639415685,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25996672-b23a-11ed-bd3c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639415684\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1620770255,\"monitor_id\":null,\"org_id\":321813,\"start\":1639429639,\"end\":null,\"canceled\":null,\"created\":1639429639,\"modified\":1639429639,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"259cc204-b23a-11ed-be30-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639429639\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1620809177,\"monitor_id\":null,\"org_id\":321813,\"start\":1639431034,\"end\":null,\"canceled\":null,\"created\":1639431034,\"modified\":1639431034,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"259cea2c-b23a-11ed-be3a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639431034\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1621365885,\"monitor_id\":null,\"org_id\":321813,\"start\":1639451240,\"end\":null,\"canceled\":null,\"created\":1639451240,\"modified\":1639451240,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25a6df14-b23a-11ed-b036-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639451240\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1621692149,\"monitor_id\":null,\"org_id\":321813,\"start\":1639464373,\"end\":null,\"canceled\":null,\"created\":1639464373,\"modified\":1639464373,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25a8e570-b23a-11ed-b0ce-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639464373\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622000734,\"monitor_id\":null,\"org_id\":321813,\"start\":1639477211,\"end\":null,\"canceled\":null,\"created\":1639477211,\"modified\":1639477211,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ab7998-b23a-11ed-b171-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639477211\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622153650,\"monitor_id\":null,\"org_id\":321813,\"start\":1639482482,\"end\":null,\"canceled\":null,\"created\":1639482482,\"modified\":1639482482,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ac08c2-b23a-11ed-b197-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639482482\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622168948,\"monitor_id\":null,\"org_id\":321813,\"start\":1639483142,\"end\":null,\"canceled\":null,\"created\":1639483142,\"modified\":1639483142,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ac1812-b23a-11ed-b19b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639483142\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622328315,\"monitor_id\":null,\"org_id\":321813,\"start\":1639489128,\"end\":null,\"canceled\":null,\"created\":1639489128,\"modified\":1639489128,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ac94fe-b23a-11ed-b1bd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639489128\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622361804,\"monitor_id\":null,\"org_id\":321813,\"start\":1639490281,\"end\":null,\"canceled\":null,\"created\":1639490281,\"modified\":1639490281,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25acd158-b23a-11ed-b1cf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639490281\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622417624,\"monitor_id\":null,\"org_id\":321813,\"start\":1639492221,\"end\":null,\"canceled\":null,\"created\":1639492221,\"modified\":1639492221,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ad34a4-b23a-11ed-b1f1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639492221\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622582580,\"monitor_id\":null,\"org_id\":321813,\"start\":1639498216,\"end\":null,\"canceled\":null,\"created\":1639498216,\"modified\":1639498216,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ae28e6-b23a-11ed-b23c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639498215\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622728228,\"monitor_id\":null,\"org_id\":321813,\"start\":1639502139,\"end\":null,\"canceled\":null,\"created\":1639502139,\"modified\":1639502139,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25aeda02-b23a-11ed-b271-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639502139\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622734618,\"monitor_id\":null,\"org_id\":321813,\"start\":1639502370,\"end\":null,\"canceled\":null,\"created\":1639502370,\"modified\":1639502370,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25aee1b4-b23a-11ed-b274-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639502369\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622740019,\"monitor_id\":null,\"org_id\":321813,\"start\":1639502568,\"end\":null,\"canceled\":null,\"created\":1639502568,\"modified\":1639502568,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25aeece0-b23a-11ed-b277-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639502568\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1622766192,\"monitor_id\":null,\"org_id\":321813,\"start\":1639503555,\"end\":null,\"canceled\":null,\"created\":1639503555,\"modified\":1639503555,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25aefe9c-b23a-11ed-b27b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639503555\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1623750058,\"monitor_id\":null,\"org_id\":321813,\"start\":1639537832,\"end\":null,\"canceled\":null,\"created\":1639537832,\"modified\":1639537832,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25b51840-b23a-11ed-b400-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639537832\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1624387376,\"monitor_id\":null,\"org_id\":321813,\"start\":1639564927,\"end\":null,\"canceled\":null,\"created\":1639564927,\"modified\":1639564927,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ba2038-b23a-11ed-b56c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639564927\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1624392318,\"monitor_id\":null,\"org_id\":321813,\"start\":1639565108,\"end\":null,\"canceled\":null,\"created\":1639565108,\"modified\":1639565108,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ba2fb0-b23a-11ed-b56f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639565108\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1624800914,\"monitor_id\":null,\"org_id\":321813,\"start\":1639580899,\"end\":null,\"canceled\":null,\"created\":1639580899,\"modified\":1639580899,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25bdf870-b23a-11ed-b691-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639580899\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1624813214,\"monitor_id\":null,\"org_id\":321813,\"start\":1639581359,\"end\":null,\"canceled\":null,\"created\":1639581359,\"modified\":1639581359,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25be11b6-b23a-11ed-b69b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639581359\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1624940552,\"monitor_id\":null,\"org_id\":321813,\"start\":1639585461,\"end\":null,\"canceled\":null,\"created\":1639585461,\"modified\":1639585461,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25bf6160-b23a-11ed-b6e0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639585460\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1625123813,\"monitor_id\":null,\"org_id\":321813,\"start\":1639590434,\"end\":null,\"canceled\":null,\"created\":1639590434,\"modified\":1639590434,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25c0bc22-b23a-11ed-b73b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639590434\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1625156436,\"monitor_id\":null,\"org_id\":321813,\"start\":1639591611,\"end\":null,\"canceled\":null,\"created\":1639591611,\"modified\":1639591611,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25c10240-b23a-11ed-b74d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639591611\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1625367284,\"monitor_id\":null,\"org_id\":321813,\"start\":1639598890,\"end\":null,\"canceled\":null,\"created\":1639598890,\"modified\":1639598890,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25c21f22-b23a-11ed-b792-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639598890\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1626081135,\"monitor_id\":null,\"org_id\":321813,\"start\":1639624064,\"end\":null,\"canceled\":null,\"created\":1639624064,\"modified\":1639624064,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25c6ffb0-b23a-11ed-b8d9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639624064\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1626652078,\"monitor_id\":null,\"org_id\":321813,\"start\":1639647512,\"end\":null,\"canceled\":null,\"created\":1639647512,\"modified\":1639647512,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25cda586-b23a-11ed-bab8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639647512\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1626665572,\"monitor_id\":null,\"org_id\":321813,\"start\":1639648165,\"end\":null,\"canceled\":null,\"created\":1639648165,\"modified\":1639648165,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25cdaafe-b23a-11ed-baba-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639648165\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1626770282,\"monitor_id\":null,\"org_id\":321813,\"start\":1639652200,\"end\":null,\"canceled\":null,\"created\":1639652200,\"modified\":1639652200,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ce8870-b23a-11ed-bb03-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639652200\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627086846,\"monitor_id\":null,\"org_id\":321813,\"start\":1639664080,\"end\":null,\"canceled\":null,\"created\":1639664080,\"modified\":1639664080,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d090de-b23a-11ed-bb98-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639664080\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627105697,\"monitor_id\":null,\"org_id\":321813,\"start\":1639664780,\"end\":null,\"canceled\":null,\"created\":1639664780,\"modified\":1639664780,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d09c1e-b23a-11ed-bb9c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639664780\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627121580,\"monitor_id\":null,\"org_id\":321813,\"start\":1639665315,\"end\":null,\"canceled\":null,\"created\":1639665315,\"modified\":1639665315,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d0ad62-b23a-11ed-bba1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639665314\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627198809,\"monitor_id\":null,\"org_id\":321813,\"start\":1639668046,\"end\":null,\"canceled\":null,\"created\":1639668046,\"modified\":1639668046,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d0fe3e-b23a-11ed-bbb9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639668046\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627228324,\"monitor_id\":null,\"org_id\":321813,\"start\":1639669044,\"end\":null,\"canceled\":null,\"created\":1639669044,\"modified\":1639669044,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d11e82-b23a-11ed-bbc0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639669043\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627253307,\"monitor_id\":null,\"org_id\":321813,\"start\":1639669946,\"end\":null,\"canceled\":null,\"created\":1639669946,\"modified\":1639669946,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d13ac0-b23a-11ed-bbc9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639669946\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627255866,\"monitor_id\":null,\"org_id\":321813,\"start\":1639670056,\"end\":null,\"canceled\":null,\"created\":1639670056,\"modified\":1639670056,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d13d4a-b23a-11ed-bbca-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639670056\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627287838,\"monitor_id\":null,\"org_id\":321813,\"start\":1639671056,\"end\":null,\"canceled\":null,\"created\":1639671056,\"modified\":1639671056,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d175e4-b23a-11ed-bbde-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639671056\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627290441,\"monitor_id\":null,\"org_id\":321813,\"start\":1639671124,\"end\":null,\"canceled\":null,\"created\":1639671124,\"modified\":1639671124,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d17882-b23a-11ed-bbdf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639671124\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627310036,\"monitor_id\":null,\"org_id\":321813,\"start\":1639671786,\"end\":null,\"canceled\":null,\"created\":1639671786,\"modified\":1639671786,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d18d86-b23a-11ed-bbe6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639671786\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627388723,\"monitor_id\":null,\"org_id\":321813,\"start\":1639673905,\"end\":null,\"canceled\":null,\"created\":1639673905,\"modified\":1639673905,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d23722-b23a-11ed-bc12-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639673905\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1627401710,\"monitor_id\":null,\"org_id\":321813,\"start\":1639674334,\"end\":null,\"canceled\":null,\"created\":1639674334,\"modified\":1639674334,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25d242d0-b23a-11ed-bc16-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639674334\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1628514017,\"monitor_id\":null,\"org_id\":321813,\"start\":1639710445,\"end\":null,\"canceled\":null,\"created\":1639710445,\"modified\":1639710445,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25e7c65a-b23a-11ed-bcd0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639710444\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1628625988,\"monitor_id\":null,\"org_id\":321813,\"start\":1639715081,\"end\":null,\"canceled\":null,\"created\":1639715081,\"modified\":1639715081,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25e8ec88-b23a-11ed-bd1e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639715081\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1628749988,\"monitor_id\":null,\"org_id\":321813,\"start\":1639720581,\"end\":null,\"canceled\":null,\"created\":1639720581,\"modified\":1639720581,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25e99926-b23a-11ed-bd4f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639720581\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629192171,\"monitor_id\":null,\"org_id\":321813,\"start\":1639739751,\"end\":null,\"canceled\":null,\"created\":1639739751,\"modified\":1639739751,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ec7b8c-b23a-11ed-be3a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639739751\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629222341,\"monitor_id\":null,\"org_id\":321813,\"start\":1639740961,\"end\":null,\"canceled\":null,\"created\":1639740961,\"modified\":1639740961,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ec9c5c-b23a-11ed-be41-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639740961\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629282598,\"monitor_id\":null,\"org_id\":321813,\"start\":1639743536,\"end\":null,\"canceled\":null,\"created\":1639743536,\"modified\":1639743536,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ecb9bc-b23a-11ed-be4c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639743536\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629283229,\"monitor_id\":null,\"org_id\":321813,\"start\":1639743564,\"end\":null,\"canceled\":null,\"created\":1639743564,\"modified\":1639743564,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ecbc3c-b23a-11ed-be4d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639743564\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629388680,\"monitor_id\":null,\"org_id\":321813,\"start\":1639747790,\"end\":null,\"canceled\":null,\"created\":1639747790,\"modified\":1639747790,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ecffee-b23a-11ed-be5e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639747790\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629391375,\"monitor_id\":null,\"org_id\":321813,\"start\":1639747869,\"end\":null,\"canceled\":null,\"created\":1639747869,\"modified\":1639747869,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ed02b4-b23a-11ed-be5f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639747869\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629409601,\"monitor_id\":null,\"org_id\":321813,\"start\":1639748641,\"end\":null,\"canceled\":null,\"created\":1639748641,\"modified\":1639748641,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ed23c0-b23a-11ed-be6a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639748641\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629775609,\"monitor_id\":null,\"org_id\":321813,\"start\":1639761380,\"end\":null,\"canceled\":null,\"created\":1639761380,\"modified\":1639761380,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25eee93a-b23a-11ed-bee8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639761379\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629837263,\"monitor_id\":null,\"org_id\":321813,\"start\":1639763231,\"end\":null,\"canceled\":null,\"created\":1639763231,\"modified\":1639763231,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ef0898-b23a-11ed-bef3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639763231\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629839973,\"monitor_id\":null,\"org_id\":321813,\"start\":1639763342,\"end\":null,\"canceled\":null,\"created\":1639763342,\"modified\":1639763342,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ef26f2-b23a-11ed-beff-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639763341\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1629970583,\"monitor_id\":null,\"org_id\":321813,\"start\":1639767403,\"end\":null,\"canceled\":null,\"created\":1639767403,\"modified\":1639767403,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25f034ac-b23a-11ed-bf57-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639767403\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1630232797,\"monitor_id\":null,\"org_id\":321813,\"start\":1639776767,\"end\":null,\"canceled\":null,\"created\":1639776767,\"modified\":1639776767,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25f1a3b4-b23a-11ed-bfc0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639776767\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1630337986,\"monitor_id\":null,\"org_id\":321813,\"start\":1639780936,\"end\":null,\"canceled\":null,\"created\":1639780936,\"modified\":1639780936,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25f20354-b23a-11ed-bfdc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639780936\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1630723839,\"monitor_id\":null,\"org_id\":321813,\"start\":1639796887,\"end\":null,\"canceled\":null,\"created\":1639796887,\"modified\":1639796887,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25fe2fb2-b23a-11ed-835d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639796887\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1631531963,\"monitor_id\":null,\"org_id\":321813,\"start\":1639839063,\"end\":null,\"canceled\":null,\"created\":1639839063,\"modified\":1639839063,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ff865a-b23a-11ed-83be-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639839063\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1631761044,\"monitor_id\":null,\"org_id\":321813,\"start\":1639850744,\"end\":null,\"canceled\":null,\"created\":1639850744,\"modified\":1639850744,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ffd63c-b23a-11ed-83d5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639850744\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1631862384,\"monitor_id\":null,\"org_id\":321813,\"start\":1639857365,\"end\":null,\"canceled\":null,\"created\":1639857365,\"modified\":1639857365,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25ffece4-b23a-11ed-83dc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639857365\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1631956671,\"monitor_id\":null,\"org_id\":321813,\"start\":1639862926,\"end\":null,\"canceled\":null,\"created\":1639862926,\"modified\":1639862926,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26000b34-b23a-11ed-83e6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639862925\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1632321068,\"monitor_id\":null,\"org_id\":321813,\"start\":1639883716,\"end\":null,\"canceled\":null,\"created\":1639883716,\"modified\":1639883716,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"260065ca-b23a-11ed-8402-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639883716\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1632817060,\"monitor_id\":null,\"org_id\":321813,\"start\":1639911417,\"end\":null,\"canceled\":null,\"created\":1639911417,\"modified\":1639911417,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26017334-b23a-11ed-844c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639911417\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1632850532,\"monitor_id\":null,\"org_id\":321813,\"start\":1639913273,\"end\":null,\"canceled\":null,\"created\":1639913273,\"modified\":1639913273,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"260178ca-b23a-11ed-844e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639913272\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1632864126,\"monitor_id\":null,\"org_id\":321813,\"start\":1639914080,\"end\":null,\"canceled\":null,\"created\":1639914080,\"modified\":1639914080,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26019300-b23a-11ed-8458-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639914080\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1632931360,\"monitor_id\":null,\"org_id\":321813,\"start\":1639917988,\"end\":null,\"canceled\":null,\"created\":1639917988,\"modified\":1639917988,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2601b312-b23a-11ed-8464-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639917988\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1633851553,\"monitor_id\":null,\"org_id\":321813,\"start\":1639969879,\"end\":null,\"canceled\":null,\"created\":1639969879,\"modified\":1639969879,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2603cc88-b23a-11ed-8502-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639969879\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1634214343,\"monitor_id\":null,\"org_id\":321813,\"start\":1639988072,\"end\":null,\"canceled\":null,\"created\":1639988072,\"modified\":1639988072,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2606053e-b23a-11ed-85b4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639988072\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1634289989,\"monitor_id\":null,\"org_id\":321813,\"start\":1639991598,\"end\":null,\"canceled\":null,\"created\":1639991598,\"modified\":1639991598,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2606352c-b23a-11ed-85c0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639991598\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1634318571,\"monitor_id\":null,\"org_id\":321813,\"start\":1639992864,\"end\":null,\"canceled\":null,\"created\":1639992864,\"modified\":1639992864,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"260681c6-b23a-11ed-85d4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639992863\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1634401227,\"monitor_id\":null,\"org_id\":321813,\"start\":1639996655,\"end\":null,\"canceled\":null,\"created\":1639996655,\"modified\":1639996655,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2606ceec-b23a-11ed-85e9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1639996655\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1635947048,\"monitor_id\":null,\"org_id\":321813,\"start\":1640056444,\"end\":null,\"canceled\":null,\"created\":1640056444,\"modified\":1640056444,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"260e8ad8-b23a-11ed-881f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640056444\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1636482234,\"monitor_id\":null,\"org_id\":321813,\"start\":1640079823,\"end\":null,\"canceled\":null,\"created\":1640079823,\"modified\":1640079823,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2613c836-b23a-11ed-897d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640079823\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1636522835,\"monitor_id\":null,\"org_id\":321813,\"start\":1640081693,\"end\":null,\"canceled\":null,\"created\":1640081693,\"modified\":1640081693,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2613edac-b23a-11ed-8987-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640081693\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1636533109,\"monitor_id\":null,\"org_id\":321813,\"start\":1640082069,\"end\":null,\"canceled\":null,\"created\":1640082069,\"modified\":1640082069,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2613fbee-b23a-11ed-898a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640082068\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1636580714,\"monitor_id\":null,\"org_id\":321813,\"start\":1640084275,\"end\":null,\"canceled\":null,\"created\":1640084275,\"modified\":1640084275,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"261437b2-b23a-11ed-899c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640084275\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1637328889,\"monitor_id\":null,\"org_id\":321813,\"start\":1640112151,\"end\":null,\"canceled\":null,\"created\":1640112151,\"modified\":1640112151,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2617b914-b23a-11ed-8a91-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640112151\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1638100453,\"monitor_id\":null,\"org_id\":321813,\"start\":1640142489,\"end\":null,\"canceled\":null,\"created\":1640142489,\"modified\":1640142489,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"261b7ed2-b23a-11ed-8bac-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640142489\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1640240196,\"monitor_id\":null,\"org_id\":321813,\"start\":1640229118,\"end\":null,\"canceled\":null,\"created\":1640229118,\"modified\":1640229118,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"262bf8a2-b23a-11ed-9046-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640229118\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1642201887,\"monitor_id\":null,\"org_id\":321813,\"start\":1640315567,\"end\":null,\"canceled\":null,\"created\":1640315567,\"modified\":1640315567,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26364aa0-b23a-11ed-9330-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640315567\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1643888459,\"monitor_id\":null,\"org_id\":321813,\"start\":1640401930,\"end\":null,\"canceled\":null,\"created\":1640401930,\"modified\":1640401930,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"263ca18e-b23a-11ed-94fe-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640401930\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1645349861,\"monitor_id\":null,\"org_id\":321813,\"start\":1640488518,\"end\":null,\"canceled\":null,\"created\":1640488518,\"modified\":1640488518,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"263f263e-b23a-11ed-95a2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640488518\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1646825150,\"monitor_id\":null,\"org_id\":321813,\"start\":1640575292,\"end\":null,\"canceled\":null,\"created\":1640575292,\"modified\":1640575292,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2641f71a-b23a-11ed-9656-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640575292\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1648518816,\"monitor_id\":null,\"org_id\":321813,\"start\":1640661085,\"end\":null,\"canceled\":null,\"created\":1640661085,\"modified\":1640661085,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"264cfac0-b23a-11ed-9996-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640661085\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1650234564,\"monitor_id\":null,\"org_id\":321813,\"start\":1640747637,\"end\":null,\"canceled\":null,\"created\":1640747637,\"modified\":1640747637,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"265459be-b23a-11ed-9bad-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640747636\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1651944158,\"monitor_id\":null,\"org_id\":321813,\"start\":1640833679,\"end\":null,\"canceled\":null,\"created\":1640833679,\"modified\":1640833679,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"265ce94e-b23a-11ed-9e57-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640833678\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1653645261,\"monitor_id\":null,\"org_id\":321813,\"start\":1640920246,\"end\":null,\"canceled\":null,\"created\":1640920246,\"modified\":1640920246,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2664206a-b23a-11ed-a0c9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1640920246\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1655241332,\"monitor_id\":null,\"org_id\":321813,\"start\":1641007167,\"end\":null,\"canceled\":null,\"created\":1641007167,\"modified\":1641007167,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"266a0908-b23a-11ed-a291-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641007167\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1656671629,\"monitor_id\":null,\"org_id\":321813,\"start\":1641093291,\"end\":null,\"canceled\":null,\"created\":1641093291,\"modified\":1641093291,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"266da130-b23a-11ed-a3b8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641093291\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1658141310,\"monitor_id\":null,\"org_id\":321813,\"start\":1641179565,\"end\":null,\"canceled\":null,\"created\":1641179565,\"modified\":1641179565,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2673e2de-b23a-11ed-a5d3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641179565\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1660007013,\"monitor_id\":null,\"org_id\":321813,\"start\":1641265850,\"end\":null,\"canceled\":null,\"created\":1641265850,\"modified\":1641265850,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2680b1b2-b23a-11ed-a9c0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641265850\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1662092297,\"monitor_id\":null,\"org_id\":321813,\"start\":1641352066,\"end\":null,\"canceled\":null,\"created\":1641352066,\"modified\":1641352066,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"268e3986-b23a-11ed-ad4c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641352065\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1664277957,\"monitor_id\":null,\"org_id\":321813,\"start\":1641438613,\"end\":null,\"canceled\":null,\"created\":1641438613,\"modified\":1641438613,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"269af50e-b23a-11ed-b119-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641438613\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1666505884,\"monitor_id\":null,\"org_id\":321813,\"start\":1641525266,\"end\":null,\"canceled\":null,\"created\":1641525266,\"modified\":1641525266,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26a7c7f2-b23a-11ed-b4f7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641525266\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1668649522,\"monitor_id\":null,\"org_id\":321813,\"start\":1641611520,\"end\":null,\"canceled\":null,\"created\":1641611520,\"modified\":1641611520,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26b41fb6-b23a-11ed-b8f8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641611520\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1670195513,\"monitor_id\":null,\"org_id\":321813,\"start\":1641697752,\"end\":null,\"canceled\":null,\"created\":1641697752,\"modified\":1641697752,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26b94432-b23a-11ed-ba89-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641697752\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1671741450,\"monitor_id\":null,\"org_id\":321813,\"start\":1641784138,\"end\":null,\"canceled\":null,\"created\":1641784138,\"modified\":1641784138,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26bef3aa-b23a-11ed-bc4f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641784138\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1673924915,\"monitor_id\":null,\"org_id\":321813,\"start\":1641870544,\"end\":null,\"canceled\":null,\"created\":1641870544,\"modified\":1641870544,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26cc3b32-b23a-11ed-a3cb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641870544\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1676224729,\"monitor_id\":null,\"org_id\":321813,\"start\":1641956959,\"end\":null,\"canceled\":null,\"created\":1641956959,\"modified\":1641956959,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26dcfb34-b23a-11ed-a877-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1641956959\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1677666738,\"monitor_id\":null,\"org_id\":321813,\"start\":1642012121,\"end\":null,\"canceled\":null,\"created\":1642012121,\"modified\":1642012121,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26eacd68-b23a-11ed-ac25-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642012121\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1678587077,\"monitor_id\":null,\"org_id\":321813,\"start\":1642043401,\"end\":null,\"canceled\":null,\"created\":1642043401,\"modified\":1642043401,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26f0ab34-b23a-11ed-add8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642043401\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1680949487,\"monitor_id\":null,\"org_id\":321813,\"start\":1642129689,\"end\":null,\"canceled\":null,\"created\":1642129689,\"modified\":1642129689,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26fe3fba-b23a-11ed-b1b9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642129688\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1683185163,\"monitor_id\":null,\"org_id\":321813,\"start\":1642216747,\"end\":null,\"canceled\":null,\"created\":1642216747,\"modified\":1642216747,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"270df7d4-b23a-11ed-b5f1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642216747\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1684768252,\"monitor_id\":null,\"org_id\":321813,\"start\":1642302665,\"end\":null,\"canceled\":null,\"created\":1642302665,\"modified\":1642302665,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27124d20-b23a-11ed-b747-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642302665\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1686328689,\"monitor_id\":null,\"org_id\":321813,\"start\":1642389268,\"end\":null,\"canceled\":null,\"created\":1642389268,\"modified\":1642389268,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2717ff2c-b23a-11ed-b907-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642389268\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1688275916,\"monitor_id\":null,\"org_id\":321813,\"start\":1642475273,\"end\":null,\"canceled\":null,\"created\":1642475273,\"modified\":1642475273,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2728d6ee-b23a-11ed-bdd5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642475272\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1689016370,\"monitor_id\":null,\"org_id\":321813,\"start\":1642507886,\"end\":null,\"canceled\":null,\"created\":1642507886,\"modified\":1642507886,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"272d67ae-b23a-11ed-bf09-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642507886\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1690565091,\"monitor_id\":null,\"org_id\":321813,\"start\":1642561743,\"end\":null,\"canceled\":null,\"created\":1642561743,\"modified\":1642561743,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"273864ec-b23a-11ed-89b5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642561742\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1692909274,\"monitor_id\":null,\"org_id\":321813,\"start\":1642648071,\"end\":null,\"canceled\":null,\"created\":1642648071,\"modified\":1642648071,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2748b338-b23a-11ed-8edf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642648071\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1695251632,\"monitor_id\":null,\"org_id\":321813,\"start\":1642734932,\"end\":null,\"canceled\":null,\"created\":1642734932,\"modified\":1642734932,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27994cd0-b23a-11ed-a94c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642734932\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1697478492,\"monitor_id\":null,\"org_id\":321813,\"start\":1642820863,\"end\":null,\"canceled\":null,\"created\":1642820863,\"modified\":1642820863,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27a3fe96-b23a-11ed-ac45-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642820863\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1699116451,\"monitor_id\":null,\"org_id\":321813,\"start\":1642907357,\"end\":null,\"canceled\":null,\"created\":1642907357,\"modified\":1642907357,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27a74ab0-b23a-11ed-ad44-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642907357\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1700744995,\"monitor_id\":null,\"org_id\":321813,\"start\":1642993788,\"end\":null,\"canceled\":null,\"created\":1642993788,\"modified\":1642993788,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27aaebfc-b23a-11ed-ae68-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1642993788\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1703016436,\"monitor_id\":null,\"org_id\":321813,\"start\":1643080145,\"end\":null,\"canceled\":null,\"created\":1643080145,\"modified\":1643080145,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27b54886-b23a-11ed-b1ab-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643080145\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1705444324,\"monitor_id\":null,\"org_id\":321813,\"start\":1643166892,\"end\":null,\"canceled\":null,\"created\":1643166892,\"modified\":1643166892,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27c1ad56-b23a-11ed-b5d5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643166892\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1707839104,\"monitor_id\":null,\"org_id\":321813,\"start\":1643252880,\"end\":null,\"canceled\":null,\"created\":1643252880,\"modified\":1643252880,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27ce63e8-b23a-11ed-b97b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643252879\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1710342923,\"monitor_id\":null,\"org_id\":321813,\"start\":1643339520,\"end\":null,\"canceled\":null,\"created\":1643339520,\"modified\":1643339520,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27e0100c-b23a-11ed-bead-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643339520\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1712645429,\"monitor_id\":null,\"org_id\":321813,\"start\":1643425630,\"end\":null,\"canceled\":null,\"created\":1643425630,\"modified\":1643425630,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27ee2c00-b23a-11ed-8a20-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643425630\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1714333265,\"monitor_id\":null,\"org_id\":321813,\"start\":1643512440,\"end\":null,\"canceled\":null,\"created\":1643512440,\"modified\":1643512440,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27f58266-b23a-11ed-8c2a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643512440\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1715997189,\"monitor_id\":null,\"org_id\":321813,\"start\":1643598527,\"end\":null,\"canceled\":null,\"created\":1643598527,\"modified\":1643598527,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27fd48ac-b23a-11ed-8e83-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643598527\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1716549277,\"monitor_id\":null,\"org_id\":321813,\"start\":1643621871,\"end\":null,\"canceled\":null,\"created\":1643621871,\"modified\":1643621871,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28003b0c-b23a-11ed-8f61-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643621871\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1717011251,\"monitor_id\":null,\"org_id\":321813,\"start\":1643639864,\"end\":null,\"canceled\":null,\"created\":1643639864,\"modified\":1643639864,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28031264-b23a-11ed-9037-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643639864\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1718301512,\"monitor_id\":null,\"org_id\":321813,\"start\":1643685322,\"end\":null,\"canceled\":null,\"created\":1643685322,\"modified\":1643685322,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"281063ba-b23a-11ed-93d1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643685322\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1720691685,\"monitor_id\":null,\"org_id\":321813,\"start\":1643771604,\"end\":null,\"canceled\":null,\"created\":1643771604,\"modified\":1643771604,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2820dbf0-b23a-11ed-98db-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643771603\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1723064406,\"monitor_id\":null,\"org_id\":321813,\"start\":1643857635,\"end\":null,\"canceled\":null,\"created\":1643857635,\"modified\":1643857635,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2833ceea-b23a-11ed-9eb2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643857635\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1725487374,\"monitor_id\":null,\"org_id\":321813,\"start\":1643944563,\"end\":null,\"canceled\":null,\"created\":1643944563,\"modified\":1643944563,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28447fd8-b23a-11ed-a437-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643944563\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1726548530,\"monitor_id\":null,\"org_id\":321813,\"start\":1643986937,\"end\":null,\"canceled\":null,\"created\":1643986937,\"modified\":1643986937,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"284ae3a0-b23a-11ed-a65f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1643986937\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1727745044,\"monitor_id\":null,\"org_id\":321813,\"start\":1644030627,\"end\":null,\"canceled\":null,\"created\":1644030627,\"modified\":1644030627,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2850502e-b23a-11ed-a81a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644030627\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1729521637,\"monitor_id\":null,\"org_id\":321813,\"start\":1644117362,\"end\":null,\"canceled\":null,\"created\":1644117362,\"modified\":1644117362,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28556b68-b23a-11ed-a9b8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644117362\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1731306399,\"monitor_id\":null,\"org_id\":321813,\"start\":1644203372,\"end\":null,\"canceled\":null,\"created\":1644203372,\"modified\":1644203372,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"285b54f6-b23a-11ed-ab93-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644203372\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1733766531,\"monitor_id\":null,\"org_id\":321813,\"start\":1644290006,\"end\":null,\"canceled\":null,\"created\":1644290006,\"modified\":1644290006,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"286e38aa-b23a-11ed-b181-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644290006\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1736378285,\"monitor_id\":null,\"org_id\":321813,\"start\":1644376521,\"end\":null,\"canceled\":null,\"created\":1644376521,\"modified\":1644376521,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28802e48-b23a-11ed-b6cf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644376521\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1738838057,\"monitor_id\":null,\"org_id\":321813,\"start\":1644462477,\"end\":null,\"canceled\":null,\"created\":1644462477,\"modified\":1644462477,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2893a630-b23a-11ed-bc47-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644462477\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1741269413,\"monitor_id\":null,\"org_id\":321813,\"start\":1644549455,\"end\":null,\"canceled\":null,\"created\":1644549455,\"modified\":1644549455,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28a4a340-b23a-11ed-9fc0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644549455\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1743536969,\"monitor_id\":null,\"org_id\":321813,\"start\":1644635922,\"end\":null,\"canceled\":null,\"created\":1644635922,\"modified\":1644635922,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28b6d2ea-b23a-11ed-a60a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644635922\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1745112857,\"monitor_id\":null,\"org_id\":321813,\"start\":1644721692,\"end\":null,\"canceled\":null,\"created\":1644721692,\"modified\":1644721692,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28bcf08a-b23a-11ed-a813-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644721692\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1746738563,\"monitor_id\":null,\"org_id\":321813,\"start\":1644808881,\"end\":null,\"canceled\":null,\"created\":1644808881,\"modified\":1644808881,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28c33e7c-b23a-11ed-a9ec-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644808880\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1749056659,\"monitor_id\":null,\"org_id\":321813,\"start\":1644894575,\"end\":null,\"canceled\":null,\"created\":1644894575,\"modified\":1644894575,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28d5ec20-b23a-11ed-af25-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644894575\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1751502909,\"monitor_id\":null,\"org_id\":321813,\"start\":1644981427,\"end\":null,\"canceled\":null,\"created\":1644981427,\"modified\":1644981427,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28ecd6d8-b23a-11ed-b58d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1644981426\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1753923935,\"monitor_id\":null,\"org_id\":321813,\"start\":1645067951,\"end\":null,\"canceled\":null,\"created\":1645067951,\"modified\":1645067951,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29004740-b23a-11ed-bad6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645067951\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1756296396,\"monitor_id\":null,\"org_id\":321813,\"start\":1645154069,\"end\":null,\"canceled\":null,\"created\":1645154069,\"modified\":1645154069,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2914d052-b23a-11ed-9fd3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645154069\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1758537216,\"monitor_id\":null,\"org_id\":321813,\"start\":1645240135,\"end\":null,\"canceled\":null,\"created\":1645240135,\"modified\":1645240135,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29278d1e-b23a-11ed-a6c1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645240135\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1760164024,\"monitor_id\":null,\"org_id\":321813,\"start\":1645326472,\"end\":null,\"canceled\":null,\"created\":1645326472,\"modified\":1645326472,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"292fecf2-b23a-11ed-aa04-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645326472\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1761781571,\"monitor_id\":null,\"org_id\":321813,\"start\":1645412860,\"end\":null,\"canceled\":null,\"created\":1645412860,\"modified\":1645412860,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"293c86ec-b23a-11ed-ae1f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645412860\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1763791717,\"monitor_id\":null,\"org_id\":321813,\"start\":1645499242,\"end\":null,\"canceled\":null,\"created\":1645499242,\"modified\":1645499242,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"295eafec-b23a-11ed-b3e1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645499241\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1766071128,\"monitor_id\":null,\"org_id\":321813,\"start\":1645585999,\"end\":null,\"canceled\":null,\"created\":1645585999,\"modified\":1645585999,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2977e750-b23a-11ed-b98d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645585999\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1768417284,\"monitor_id\":null,\"org_id\":321813,\"start\":1645672633,\"end\":null,\"canceled\":null,\"created\":1645672633,\"modified\":1645672633,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29892646-b23a-11ed-bdcc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645672633\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1770826743,\"monitor_id\":null,\"org_id\":321813,\"start\":1645758830,\"end\":null,\"canceled\":null,\"created\":1645758830,\"modified\":1645758830,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"299a9070-b23a-11ed-8ede-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645758830\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1773084467,\"monitor_id\":null,\"org_id\":321813,\"start\":1645845241,\"end\":null,\"canceled\":null,\"created\":1645845241,\"modified\":1645845241,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29b17dee-b23a-11ed-95be-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645845241\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1774663724,\"monitor_id\":null,\"org_id\":321813,\"start\":1645932075,\"end\":null,\"canceled\":null,\"created\":1645932075,\"modified\":1645932075,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29b6e040-b23a-11ed-975a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1645932074\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1776192639,\"monitor_id\":null,\"org_id\":321813,\"start\":1646017628,\"end\":null,\"canceled\":null,\"created\":1646017628,\"modified\":1646017628,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29be3fd4-b23a-11ed-998a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646017627\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1778389013,\"monitor_id\":null,\"org_id\":321813,\"start\":1646104673,\"end\":null,\"canceled\":null,\"created\":1646104673,\"modified\":1646104673,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29cea3f6-b23a-11ed-9e5f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646104673\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1780658435,\"monitor_id\":null,\"org_id\":321813,\"start\":1646190522,\"end\":null,\"canceled\":null,\"created\":1646190522,\"modified\":1646190522,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29dc643c-b23a-11ed-a25e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646190522\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1782994705,\"monitor_id\":null,\"org_id\":321813,\"start\":1646277088,\"end\":null,\"canceled\":null,\"created\":1646277088,\"modified\":1646277088,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29f1fff4-b23a-11ed-a939-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646277087\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1785296242,\"monitor_id\":null,\"org_id\":321813,\"start\":1646363375,\"end\":null,\"canceled\":null,\"created\":1646363375,\"modified\":1646363375,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a022668-b23a-11ed-ae37-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646363375\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1787522336,\"monitor_id\":null,\"org_id\":321813,\"start\":1646449788,\"end\":null,\"canceled\":null,\"created\":1646449788,\"modified\":1646449788,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a10db68-b23a-11ed-b2bb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646449788\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1789147103,\"monitor_id\":null,\"org_id\":321813,\"start\":1646536084,\"end\":null,\"canceled\":null,\"created\":1646536084,\"modified\":1646536084,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a177c3e-b23a-11ed-b4c6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646536084\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1790773223,\"monitor_id\":null,\"org_id\":321813,\"start\":1646622875,\"end\":null,\"canceled\":null,\"created\":1646622875,\"modified\":1646622875,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a1e5766-b23a-11ed-b6ee-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646622874\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1793050032,\"monitor_id\":null,\"org_id\":321813,\"start\":1646709390,\"end\":null,\"canceled\":null,\"created\":1646709390,\"modified\":1646709390,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a319af6-b23a-11ed-bce9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646709390\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1794190145,\"monitor_id\":null,\"org_id\":321813,\"start\":1646753030,\"end\":null,\"canceled\":null,\"created\":1646753030,\"modified\":1646753030,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a3aa1e6-b23a-11ed-bfc4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646753030\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1795396373,\"monitor_id\":null,\"org_id\":321813,\"start\":1646795633,\"end\":null,\"canceled\":null,\"created\":1646795633,\"modified\":1646795633,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a45c72e-b23a-11ed-b7b9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646795632\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1797781020,\"monitor_id\":null,\"org_id\":321813,\"start\":1646881843,\"end\":null,\"canceled\":null,\"created\":1646881843,\"modified\":1646881843,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a55b580-b23a-11ed-bd1b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646881843\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1798442580,\"monitor_id\":null,\"org_id\":321813,\"start\":1646908081,\"end\":null,\"canceled\":null,\"created\":1646908081,\"modified\":1646908081,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a5d4d86-b23a-11ed-bfaf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646908081\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1800175469,\"monitor_id\":null,\"org_id\":321813,\"start\":1646968550,\"end\":null,\"canceled\":null,\"created\":1646968550,\"modified\":1646968550,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a7bb88e-b23a-11ed-a6e3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1646968550\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1802387879,\"monitor_id\":null,\"org_id\":321813,\"start\":1647054678,\"end\":null,\"canceled\":null,\"created\":1647054678,\"modified\":1647054678,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a91f162-b23a-11ed-ae3f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647054678\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1804017517,\"monitor_id\":null,\"org_id\":321813,\"start\":1647140998,\"end\":null,\"canceled\":null,\"created\":1647140998,\"modified\":1647140998,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a97c0f6-b23a-11ed-b039-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647140998\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1805657409,\"monitor_id\":null,\"org_id\":321813,\"start\":1647227677,\"end\":null,\"canceled\":null,\"created\":1647227677,\"modified\":1647227677,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2a9d7cbc-b23a-11ed-b24e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647227677\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1807970043,\"monitor_id\":null,\"org_id\":321813,\"start\":1647314104,\"end\":null,\"canceled\":null,\"created\":1647314104,\"modified\":1647314104,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2ab2af88-b23a-11ed-b9c1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647314104\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1810345454,\"monitor_id\":null,\"org_id\":321813,\"start\":1647400236,\"end\":null,\"canceled\":null,\"created\":1647400236,\"modified\":1647400236,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2ac73d0e-b23a-11ed-b1bb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647400236\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1811718568,\"monitor_id\":null,\"org_id\":321813,\"start\":1647451031,\"end\":null,\"canceled\":null,\"created\":1647451031,\"modified\":1647451031,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2adb8a2a-b23a-11ed-b8f7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647451031\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":1811806028,\"monitor_id\":null,\"org_id\":321813,\"start\":1647453902,\"end\":null,\"canceled\":null,\"created\":1647453902,\"modified\":1647453902,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2adc1fa8-b23a-11ed-b927-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647453901\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":1811903156,\"monitor_id\":null,\"org_id\":321813,\"start\":1647457119,\"end\":null,\"canceled\":null,\"created\":1647457119,\"modified\":1647457119,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2adcc67e-b23a-11ed-b967-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647457119\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":1812761787,\"monitor_id\":null,\"org_id\":321813,\"start\":1647486857,\"end\":null,\"canceled\":null,\"created\":1647486857,\"modified\":1647486857,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2ae25634-b23a-11ed-bb79-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647486857\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1815255560,\"monitor_id\":null,\"org_id\":321813,\"start\":1647573353,\"end\":null,\"canceled\":null,\"created\":1647573353,\"modified\":1647573353,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2af7cf1e-b23a-11ed-a2d9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647573353\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1817847031,\"monitor_id\":null,\"org_id\":321813,\"start\":1647659700,\"end\":null,\"canceled\":null,\"created\":1647659700,\"modified\":1647659700,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2b0a5dc8-b23a-11ed-a9c1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647659700\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1819547361,\"monitor_id\":null,\"org_id\":321813,\"start\":1647746077,\"end\":null,\"canceled\":null,\"created\":1647746077,\"modified\":1647746077,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2b142efc-b23a-11ed-ad67-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647746077\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1821225168,\"monitor_id\":null,\"org_id\":321813,\"start\":1647832868,\"end\":null,\"canceled\":null,\"created\":1647832868,\"modified\":1647832868,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2b1dd7c2-b23a-11ed-b137-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647832868\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1823541491,\"monitor_id\":null,\"org_id\":321813,\"start\":1647918899,\"end\":null,\"canceled\":null,\"created\":1647918899,\"modified\":1647918899,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2b2edce8-b23a-11ed-b73c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1647918899\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1826018056,\"monitor_id\":null,\"org_id\":321813,\"start\":1648005425,\"end\":null,\"canceled\":null,\"created\":1648005425,\"modified\":1648005425,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2b54064e-b23a-11ed-9ab6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648005425\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1828488795,\"monitor_id\":null,\"org_id\":321813,\"start\":1648092065,\"end\":null,\"canceled\":null,\"created\":1648092065,\"modified\":1648092065,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2b6d0d9c-b23a-11ed-a3f3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648092065\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1830950805,\"monitor_id\":null,\"org_id\":321813,\"start\":1648177836,\"end\":null,\"canceled\":null,\"created\":1648177836,\"modified\":1648177836,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2b8792d4-b23a-11ed-acfc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648177836\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1833326968,\"monitor_id\":null,\"org_id\":321813,\"start\":1648264326,\"end\":null,\"canceled\":null,\"created\":1648264326,\"modified\":1648264326,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2b99071c-b23a-11ed-b360-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648264326\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1835027464,\"monitor_id\":null,\"org_id\":321813,\"start\":1648351630,\"end\":null,\"canceled\":null,\"created\":1648351630,\"modified\":1648351630,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2b9db050-b23a-11ed-b529-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648351630\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1836725870,\"monitor_id\":null,\"org_id\":321813,\"start\":1648438576,\"end\":null,\"canceled\":null,\"created\":1648438576,\"modified\":1648438576,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2ba267da-b23a-11ed-b6e9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648438576\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1839144600,\"monitor_id\":null,\"org_id\":321813,\"start\":1648523975,\"end\":null,\"canceled\":null,\"created\":1648523975,\"modified\":1648523975,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2bbaec56-b23a-11ed-badf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648523975\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1841904928,\"monitor_id\":null,\"org_id\":321813,\"start\":1648610323,\"end\":null,\"canceled\":null,\"created\":1648610323,\"modified\":1648610323,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2bdae48e-b23a-11ed-883f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648610323\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1844782983,\"monitor_id\":null,\"org_id\":321813,\"start\":1648696593,\"end\":null,\"canceled\":null,\"created\":1648696593,\"modified\":1648696593,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2becfda4-b23a-11ed-8efd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648696593\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1847404717,\"monitor_id\":null,\"org_id\":321813,\"start\":1648784218,\"end\":null,\"canceled\":null,\"created\":1648784218,\"modified\":1648784218,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2c074efc-b23a-11ed-990d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648784218\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1849816602,\"monitor_id\":null,\"org_id\":321813,\"start\":1648869851,\"end\":null,\"canceled\":null,\"created\":1648869851,\"modified\":1648869851,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2c1f4908-b23a-11ed-a243-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648869851\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1851645100,\"monitor_id\":null,\"org_id\":321813,\"start\":1648955757,\"end\":null,\"canceled\":null,\"created\":1648955757,\"modified\":1648955757,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2c23d02c-b23a-11ed-a406-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1648955757\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1853502539,\"monitor_id\":null,\"org_id\":321813,\"start\":1649042537,\"end\":null,\"canceled\":null,\"created\":1649042537,\"modified\":1649042537,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2c294fb6-b23a-11ed-a610-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649042537\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1856000213,\"monitor_id\":null,\"org_id\":321813,\"start\":1649129055,\"end\":null,\"canceled\":null,\"created\":1649129055,\"modified\":1649129055,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2c41a304-b23a-11ed-af07-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649129055\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1858572715,\"monitor_id\":null,\"org_id\":321813,\"start\":1649215547,\"end\":null,\"canceled\":null,\"created\":1649215547,\"modified\":1649215547,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2c5f728a-b23a-11ed-b9d2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649215547\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1861169007,\"monitor_id\":null,\"org_id\":321813,\"start\":1649302917,\"end\":null,\"canceled\":null,\"created\":1649302917,\"modified\":1649302917,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2c825cbe-b23a-11ed-9814-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649302917\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1863692277,\"monitor_id\":null,\"org_id\":321813,\"start\":1649388097,\"end\":null,\"canceled\":null,\"created\":1649388097,\"modified\":1649388097,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2c9342f4-b23a-11ed-9e7a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649388097\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1866148286,\"monitor_id\":null,\"org_id\":321813,\"start\":1649474015,\"end\":null,\"canceled\":null,\"created\":1649474015,\"modified\":1649474015,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2c9f5ed6-b23a-11ed-a33a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649474015\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1867958278,\"monitor_id\":null,\"org_id\":321813,\"start\":1649561140,\"end\":null,\"canceled\":null,\"created\":1649561140,\"modified\":1649561140,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2ca3a608-b23a-11ed-a4c2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649561140\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1869810857,\"monitor_id\":null,\"org_id\":321813,\"start\":1649647541,\"end\":null,\"canceled\":null,\"created\":1649647541,\"modified\":1649647541,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2caae512-b23a-11ed-a759-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649647541\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1872399707,\"monitor_id\":null,\"org_id\":321813,\"start\":1649734394,\"end\":null,\"canceled\":null,\"created\":1649734394,\"modified\":1649734394,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2ccad05c-b23a-11ed-b300-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649734394\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1873057087,\"monitor_id\":null,\"org_id\":321813,\"start\":1649757287,\"end\":null,\"canceled\":null,\"created\":1649757287,\"modified\":1649757287,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2cd40582-b23a-11ed-b68d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649757287\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1873627858,\"monitor_id\":null,\"org_id\":321813,\"start\":1649774235,\"end\":null,\"canceled\":null,\"created\":1649774235,\"modified\":1649774235,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2cdae28a-b23a-11ed-b92f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649774235\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1875165373,\"monitor_id\":null,\"org_id\":321813,\"start\":1649820147,\"end\":null,\"canceled\":null,\"created\":1649820147,\"modified\":1649820147,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2cf47fba-b23a-11ed-a032-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649820147\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1876852632,\"monitor_id\":null,\"org_id\":321813,\"start\":1649874368,\"end\":null,\"canceled\":null,\"created\":1649874368,\"modified\":1649874368,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d026a62-b23a-11ed-a526-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649874368\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1877911839,\"monitor_id\":null,\"org_id\":321813,\"start\":1649907229,\"end\":null,\"canceled\":null,\"created\":1649907229,\"modified\":1649907229,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d0806e8-b23a-11ed-a72c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649907229\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1878944141,\"monitor_id\":null,\"org_id\":321813,\"start\":1649943428,\"end\":null,\"canceled\":null,\"created\":1649943428,\"modified\":1649943428,\"message\":\"tf-TestAccDatadogDowntime_DiffStart-local-1649943427\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d0fd01c-b23a-11ed-aa19-da7ad0900002\",\"scope\":[\"somescope\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1878953883,\"monitor_id\":null,\"org_id\":321813,\"start\":1649943744,\"end\":null,\"canceled\":null,\"created\":1649943744,\"modified\":1649943744,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d0ff538-b23a-11ed-aa25-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649943743\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1878953886,\"monitor_id\":null,\"org_id\":321813,\"start\":1649943744,\"end\":null,\"canceled\":null,\"created\":1649943744,\"modified\":1649943744,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d0ffc2c-b23a-11ed-aa26-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649943743\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1878953952,\"monitor_id\":null,\"org_id\":321813,\"start\":1649943746,\"end\":null,\"canceled\":null,\"created\":1649943746,\"modified\":1649943746,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d100014-b23a-11ed-aa28-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649943746\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1879387022,\"monitor_id\":null,\"org_id\":321813,\"start\":1649956645,\"end\":null,\"canceled\":null,\"created\":1649956645,\"modified\":1649956645,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d12adf0-b23a-11ed-ab15-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649956645\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1880547169,\"monitor_id\":null,\"org_id\":321813,\"start\":1649993712,\"end\":null,\"canceled\":null,\"created\":1649993712,\"modified\":1649993712,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d1916b8-b23a-11ed-ad80-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1649993711\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1882920998,\"monitor_id\":null,\"org_id\":321813,\"start\":1650079507,\"end\":null,\"canceled\":null,\"created\":1650079507,\"modified\":1650079507,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d2273d4-b23a-11ed-b0dd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650079507\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1884841351,\"monitor_id\":null,\"org_id\":321813,\"start\":1650165507,\"end\":null,\"canceled\":null,\"created\":1650165507,\"modified\":1650165507,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d2ceaf8-b23a-11ed-b2e5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650165507\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1886732782,\"monitor_id\":null,\"org_id\":321813,\"start\":1650253028,\"end\":null,\"canceled\":null,\"created\":1650253028,\"modified\":1650253028,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d3512f0-b23a-11ed-b4c3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650253028\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1888164232,\"monitor_id\":null,\"org_id\":321813,\"start\":1650306909,\"end\":null,\"canceled\":null,\"created\":1650306909,\"modified\":1650306909,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d447dc6-b23a-11ed-b89c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650306909\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1888194637,\"monitor_id\":null,\"org_id\":321813,\"start\":1650307986,\"end\":null,\"canceled\":null,\"created\":1650307986,\"modified\":1650307986,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d44d7b2-b23a-11ed-b8b7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650307986\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1889160023,\"monitor_id\":null,\"org_id\":321813,\"start\":1650339374,\"end\":null,\"canceled\":null,\"created\":1650339375,\"modified\":1650339375,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d527c14-b23a-11ed-ba1d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650339374\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1890441165,\"monitor_id\":null,\"org_id\":321813,\"start\":1650382329,\"end\":null,\"canceled\":null,\"created\":1650382329,\"modified\":1650382329,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d6bbf26-b23a-11ed-bf5c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650382329\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1890673629,\"monitor_id\":null,\"org_id\":321813,\"start\":1650388715,\"end\":null,\"canceled\":null,\"created\":1650388715,\"modified\":1650388715,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d708c40-b23a-11ed-aa37-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650388714\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1890840822,\"monitor_id\":null,\"org_id\":321813,\"start\":1650393407,\"end\":null,\"canceled\":null,\"created\":1650393407,\"modified\":1650393407,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d7b5580-b23a-11ed-adb9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650393407\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":1891905689,\"monitor_id\":null,\"org_id\":321813,\"start\":1650426526,\"end\":null,\"canceled\":null,\"created\":1650426526,\"modified\":1650426526,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d853a1e-b23a-11ed-b0f0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650426525\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1894556061,\"monitor_id\":null,\"org_id\":321813,\"start\":1650512147,\"end\":null,\"canceled\":null,\"created\":1650512147,\"modified\":1650512147,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2db54b82-b23a-11ed-86e9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650512147\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1897275489,\"monitor_id\":null,\"org_id\":321813,\"start\":1650599140,\"end\":null,\"canceled\":null,\"created\":1650599140,\"modified\":1650599140,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2dcfe154-b23a-11ed-9003-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650599140\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1899755254,\"monitor_id\":null,\"org_id\":321813,\"start\":1650684524,\"end\":null,\"canceled\":null,\"created\":1650684524,\"modified\":1650684524,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2ddfa5f8-b23a-11ed-958f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650684524\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1901561064,\"monitor_id\":null,\"org_id\":321813,\"start\":1650770749,\"end\":null,\"canceled\":null,\"created\":1650770750,\"modified\":1650770750,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2de56a1a-b23a-11ed-97a9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650770749\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1903377730,\"monitor_id\":null,\"org_id\":321813,\"start\":1650857221,\"end\":null,\"canceled\":null,\"created\":1650857221,\"modified\":1650857221,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2deccd32-b23a-11ed-9a5d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650857221\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1905926570,\"monitor_id\":null,\"org_id\":321813,\"start\":1650944020,\"end\":null,\"canceled\":null,\"created\":1650944020,\"modified\":1650944020,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2e078adc-b23a-11ed-a3d2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1650944020\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1908631871,\"monitor_id\":null,\"org_id\":321813,\"start\":1651031119,\"end\":null,\"canceled\":null,\"created\":1651031119,\"modified\":1651031119,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2e335658-b23a-11ed-b395-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651031119\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1911348786,\"monitor_id\":null,\"org_id\":321813,\"start\":1651118158,\"end\":null,\"canceled\":null,\"created\":1651118158,\"modified\":1651118158,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2e5b18b4-b23a-11ed-9c82-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651118158\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1914020798,\"monitor_id\":null,\"org_id\":321813,\"start\":1651203865,\"end\":null,\"canceled\":null,\"created\":1651203866,\"modified\":1651203866,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2e7eedca-b23a-11ed-a960-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651203865\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1916537527,\"monitor_id\":null,\"org_id\":321813,\"start\":1651289341,\"end\":null,\"canceled\":null,\"created\":1651289341,\"modified\":1651289341,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2e8e3866-b23a-11ed-ae8c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651289341\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1918496216,\"monitor_id\":null,\"org_id\":321813,\"start\":1651376282,\"end\":null,\"canceled\":null,\"created\":1651376282,\"modified\":1651376282,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2e939e82-b23a-11ed-b05e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651376282\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1920583932,\"monitor_id\":null,\"org_id\":321813,\"start\":1651463712,\"end\":null,\"canceled\":null,\"created\":1651463712,\"modified\":1651463712,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2e99f37c-b23a-11ed-b27a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651463712\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1923248573,\"monitor_id\":null,\"org_id\":321813,\"start\":1651549366,\"end\":null,\"canceled\":null,\"created\":1651549366,\"modified\":1651549366,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2eacf954-b23a-11ed-b93d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651549366\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1925932099,\"monitor_id\":null,\"org_id\":321813,\"start\":1651635993,\"end\":null,\"canceled\":null,\"created\":1651635993,\"modified\":1651635993,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2eeb5ae6-b23a-11ed-ba74-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651635993\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1928451926,\"monitor_id\":null,\"org_id\":321813,\"start\":1651721713,\"end\":null,\"canceled\":null,\"created\":1651721713,\"modified\":1651721713,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2f17e048-b23a-11ed-adb6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651721713\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1930803301,\"monitor_id\":null,\"org_id\":321813,\"start\":1651807515,\"end\":null,\"canceled\":null,\"created\":1651807515,\"modified\":1651807515,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2f61e03a-b23a-11ed-a4ce-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651807514\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1933032032,\"monitor_id\":null,\"org_id\":321813,\"start\":1651894175,\"end\":null,\"canceled\":null,\"created\":1651894176,\"modified\":1651894176,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2f71e8a4-b23a-11ed-aa51-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651894175\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1934702265,\"monitor_id\":null,\"org_id\":321813,\"start\":1651980865,\"end\":null,\"canceled\":null,\"created\":1651980865,\"modified\":1651980865,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2f764e94-b23a-11ed-abe6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1651980865\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1936346370,\"monitor_id\":null,\"org_id\":321813,\"start\":1652067190,\"end\":null,\"canceled\":null,\"created\":1652067190,\"modified\":1652067190,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2f7c62fc-b23a-11ed-ae0d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652067190\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1938625794,\"monitor_id\":null,\"org_id\":321813,\"start\":1652153029,\"end\":null,\"canceled\":null,\"created\":1652153029,\"modified\":1652153029,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2f97e7d4-b23a-11ed-b803-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652153029\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1941102520,\"monitor_id\":null,\"org_id\":321813,\"start\":1652239954,\"end\":null,\"canceled\":null,\"created\":1652239954,\"modified\":1652239954,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2fce30a0-b23a-11ed-95c5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652239954\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1943556517,\"monitor_id\":null,\"org_id\":321813,\"start\":1652326042,\"end\":null,\"canceled\":null,\"created\":1652326042,\"modified\":1652326042,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2fe486c0-b23a-11ed-9d98-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652326042\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1946061531,\"monitor_id\":null,\"org_id\":321813,\"start\":1652413936,\"end\":null,\"canceled\":null,\"created\":1652413936,\"modified\":1652413936,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2ffdc2ac-b23a-11ed-a692-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652413936\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1948398117,\"monitor_id\":null,\"org_id\":321813,\"start\":1652500712,\"end\":null,\"canceled\":null,\"created\":1652500712,\"modified\":1652500712,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"300adbfe-b23a-11ed-aaf0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652500712\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1950048204,\"monitor_id\":null,\"org_id\":321813,\"start\":1652585208,\"end\":null,\"canceled\":null,\"created\":1652585208,\"modified\":1652585208,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"300f9090-b23a-11ed-ac68-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652585208\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1951739249,\"monitor_id\":null,\"org_id\":321813,\"start\":1652671421,\"end\":null,\"canceled\":null,\"created\":1652671421,\"modified\":1652671421,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30157c6c-b23a-11ed-ae89-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652671420\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1954128026,\"monitor_id\":null,\"org_id\":321813,\"start\":1652758527,\"end\":null,\"canceled\":null,\"created\":1652758527,\"modified\":1652758527,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"302ff4ca-b23a-11ed-b719-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652758527\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1956618919,\"monitor_id\":null,\"org_id\":321813,\"start\":1652844725,\"end\":null,\"canceled\":null,\"created\":1652844725,\"modified\":1652844725,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"305521fa-b23a-11ed-8b20-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652844724\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1959130623,\"monitor_id\":null,\"org_id\":321813,\"start\":1652932019,\"end\":null,\"canceled\":null,\"created\":1652932019,\"modified\":1652932019,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30719ea2-b23a-11ed-92c9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1652932019\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1961599126,\"monitor_id\":null,\"org_id\":321813,\"start\":1653018103,\"end\":null,\"canceled\":null,\"created\":1653018103,\"modified\":1653018103,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3087734e-b23a-11ed-991f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653018103\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1964066213,\"monitor_id\":null,\"org_id\":321813,\"start\":1653103350,\"end\":null,\"canceled\":null,\"created\":1653103350,\"modified\":1653103350,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30be748e-b23a-11ed-abeb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653103349\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965809561,\"monitor_id\":null,\"org_id\":321813,\"start\":1653177887,\"end\":null,\"canceled\":null,\"created\":1653177887,\"modified\":1653177887,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c32326-b23a-11ed-ad9a-da7ad0900002\",\"scope\":[\"host:Test-Go-TestHostsMuteErrors-1653177887\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965809564,\"monitor_id\":null,\"org_id\":321813,\"start\":1653177887,\"end\":null,\"canceled\":null,\"created\":1653177887,\"modified\":1653177887,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c32862-b23a-11ed-ad9b-da7ad0900002\",\"scope\":[\"host:Test-Go-TestHostsMuteErrors-1653177887\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965848046,\"monitor_id\":null,\"org_id\":321813,\"start\":1653179647,\"end\":null,\"canceled\":null,\"created\":1653179647,\"modified\":1653179647,\"message\":\"tf-TestAccDatadogDowntime_DiffStart-local-1653179644\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c356a2-b23a-11ed-adac-da7ad0900002\",\"scope\":[\"somescope\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1966046698,\"monitor_id\":null,\"org_id\":321813,\"start\":1653190004,\"end\":null,\"canceled\":null,\"created\":1653190004,\"modified\":1653190004,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c43388-b23a-11ed-ae04-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653190004\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1967961798,\"monitor_id\":null,\"org_id\":321813,\"start\":1653276835,\"end\":null,\"canceled\":null,\"created\":1653276835,\"modified\":1653276835,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30caf204-b23a-11ed-b05b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653276834\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1970330006,\"monitor_id\":null,\"org_id\":321813,\"start\":1653363786,\"end\":null,\"canceled\":null,\"created\":1653363786,\"modified\":1653363786,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30dedc1a-b23a-11ed-b727-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653363786\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1972834786,\"monitor_id\":null,\"org_id\":321813,\"start\":1653450075,\"end\":null,\"canceled\":null,\"created\":1653450075,\"modified\":1653450075,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"311c180a-b23a-11ed-9771-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653450075\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1975356907,\"monitor_id\":null,\"org_id\":321813,\"start\":1653536216,\"end\":null,\"canceled\":null,\"created\":1653536216,\"modified\":1653536216,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"315569e8-b23a-11ed-a67b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653536216\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1977773761,\"monitor_id\":null,\"org_id\":321813,\"start\":1653622489,\"end\":null,\"canceled\":null,\"created\":1653622489,\"modified\":1653622489,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"316c2f16-b23a-11ed-ad2f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653622489\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1980010861,\"monitor_id\":null,\"org_id\":321813,\"start\":1653708972,\"end\":null,\"canceled\":null,\"created\":1653708972,\"modified\":1653708972,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3181e3d8-b23a-11ed-b3a7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653708972\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1981706299,\"monitor_id\":null,\"org_id\":321813,\"start\":1653795235,\"end\":null,\"canceled\":null,\"created\":1653795235,\"modified\":1653795235,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"318b8122-b23a-11ed-b6d6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653795235\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1983400557,\"monitor_id\":null,\"org_id\":321813,\"start\":1653882321,\"end\":null,\"canceled\":null,\"created\":1653882321,\"modified\":1653882321,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"319436b4-b23a-11ed-b997-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653882321\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1985427216,\"monitor_id\":null,\"org_id\":321813,\"start\":1653968019,\"end\":null,\"canceled\":null,\"created\":1653968019,\"modified\":1653968019,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"31a9b142-b23a-11ed-b90d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1653968019\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1987876700,\"monitor_id\":null,\"org_id\":321813,\"start\":1654055613,\"end\":null,\"canceled\":null,\"created\":1654055613,\"modified\":1654055613,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"31c18308-b23a-11ed-bd47-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654055612\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1990388312,\"monitor_id\":null,\"org_id\":321813,\"start\":1654141799,\"end\":null,\"canceled\":null,\"created\":1654141799,\"modified\":1654141799,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"31d5a2f2-b23a-11ed-9176-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654141799\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1992880517,\"monitor_id\":null,\"org_id\":321813,\"start\":1654226878,\"end\":null,\"canceled\":null,\"created\":1654226878,\"modified\":1654226878,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"32044c42-b23a-11ed-a1d2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654226878\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1995175305,\"monitor_id\":null,\"org_id\":321813,\"start\":1654313642,\"end\":null,\"canceled\":null,\"created\":1654313642,\"modified\":1654313642,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"32199930-b23a-11ed-a93d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654313642\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1996852382,\"monitor_id\":null,\"org_id\":321813,\"start\":1654399406,\"end\":null,\"canceled\":null,\"created\":1654399406,\"modified\":1654399406,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"321e705e-b23a-11ed-aae5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654399406\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1998552066,\"monitor_id\":null,\"org_id\":321813,\"start\":1654486786,\"end\":null,\"canceled\":null,\"created\":1654486786,\"modified\":1654486786,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3223face-b23a-11ed-acc4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654486786\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2000940330,\"monitor_id\":null,\"org_id\":321813,\"start\":1654572773,\"end\":null,\"canceled\":null,\"created\":1654572773,\"modified\":1654572773,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3237955c-b23a-11ed-b30b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654572773\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2003530666,\"monitor_id\":null,\"org_id\":321813,\"start\":1654659885,\"end\":null,\"canceled\":null,\"created\":1654659885,\"modified\":1654659885,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3290260e-b23a-11ed-bb4a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654659885\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2006085000,\"monitor_id\":null,\"org_id\":321813,\"start\":1654746282,\"end\":null,\"canceled\":null,\"created\":1654746282,\"modified\":1654746282,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"33110a4e-b23a-11ed-b379-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654746282\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2008561555,\"monitor_id\":null,\"org_id\":321813,\"start\":1654831920,\"end\":null,\"canceled\":null,\"created\":1654831920,\"modified\":1654831920,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"33519762-b23a-11ed-bb45-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654831920\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2010956552,\"monitor_id\":null,\"org_id\":321813,\"start\":1654918830,\"end\":null,\"canceled\":null,\"created\":1654918830,\"modified\":1654918830,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"33c25c72-b23a-11ed-ac93-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1654918830\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2012669779,\"monitor_id\":null,\"org_id\":321813,\"start\":1655005529,\"end\":null,\"canceled\":null,\"created\":1655005529,\"modified\":1655005529,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"33cb6718-b23a-11ed-ae39-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655005529\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2014370670,\"monitor_id\":null,\"org_id\":321813,\"start\":1655091412,\"end\":null,\"canceled\":null,\"created\":1655091412,\"modified\":1655091412,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"33dc959c-b23a-11ed-b11a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655091411\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2016851947,\"monitor_id\":null,\"org_id\":321813,\"start\":1655179062,\"end\":null,\"canceled\":null,\"created\":1655179062,\"modified\":1655179062,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3435aae2-b23a-11ed-bf9c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655179062\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2019442476,\"monitor_id\":null,\"org_id\":321813,\"start\":1655265024,\"end\":null,\"canceled\":null,\"created\":1655265024,\"modified\":1655265024,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"348a09ac-b23a-11ed-b460-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655265024\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2022007927,\"monitor_id\":null,\"org_id\":321813,\"start\":1655351140,\"end\":null,\"canceled\":null,\"created\":1655351140,\"modified\":1655351140,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"34cfbf9c-b23a-11ed-8b14-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655351140\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2024518312,\"monitor_id\":null,\"org_id\":321813,\"start\":1655437386,\"end\":null,\"canceled\":null,\"created\":1655437386,\"modified\":1655437386,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"34f7f1ce-b23a-11ed-910e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655437386\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2026846369,\"monitor_id\":null,\"org_id\":321813,\"start\":1655523096,\"end\":null,\"canceled\":null,\"created\":1655523096,\"modified\":1655523096,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"351c9aec-b23a-11ed-9678-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655523096\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2028607521,\"monitor_id\":null,\"org_id\":321813,\"start\":1655610345,\"end\":null,\"canceled\":null,\"created\":1655610345,\"modified\":1655610345,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3525e9c6-b23a-11ed-97ff-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655610344\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2030369415,\"monitor_id\":null,\"org_id\":321813,\"start\":1655696430,\"end\":null,\"canceled\":null,\"created\":1655696430,\"modified\":1655696430,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"353135d8-b23a-11ed-9a02-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655696430\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2032609325,\"monitor_id\":null,\"org_id\":321813,\"start\":1655783534,\"end\":null,\"canceled\":null,\"created\":1655783534,\"modified\":1655783534,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3555ae5e-b23a-11ed-a073-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655783534\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2033422930,\"monitor_id\":null,\"org_id\":321813,\"start\":1655813940,\"end\":null,\"canceled\":null,\"created\":1655813940,\"modified\":1655813940,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3567f956-b23a-11ed-a39d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655813939\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2033525207,\"monitor_id\":null,\"org_id\":321813,\"start\":1655817083,\"end\":null,\"canceled\":null,\"created\":1655817083,\"modified\":1655817083,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3568bb66-b23a-11ed-a3be-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655817083\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2035099862,\"monitor_id\":null,\"org_id\":321813,\"start\":1655869855,\"end\":null,\"canceled\":null,\"created\":1655869855,\"modified\":1655869855,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"357f33fa-b23a-11ed-a793-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655869855\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2035717606,\"monitor_id\":null,\"org_id\":321813,\"start\":1655893119,\"end\":null,\"canceled\":null,\"created\":1655893119,\"modified\":1655893119,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"358994da-b23a-11ed-a972-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655893119\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2036107945,\"monitor_id\":null,\"org_id\":321813,\"start\":1655905625,\"end\":null,\"canceled\":null,\"created\":1655905625,\"modified\":1655905625,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"358e65f0-b23a-11ed-aa3f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655905625\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2037613610,\"monitor_id\":null,\"org_id\":321813,\"start\":1655955340,\"end\":null,\"canceled\":null,\"created\":1655955340,\"modified\":1655955340,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"35af98ba-b23a-11ed-b09c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1655955339\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2040183241,\"monitor_id\":null,\"org_id\":321813,\"start\":1656042299,\"end\":null,\"canceled\":null,\"created\":1656042299,\"modified\":1656042299,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"35f5402c-b23a-11ed-bd67-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656042299\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2042531074,\"monitor_id\":null,\"org_id\":321813,\"start\":1656128094,\"end\":null,\"canceled\":null,\"created\":1656128094,\"modified\":1656128094,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"36214cb2-b23a-11ed-bf4c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656128094\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2044271223,\"monitor_id\":null,\"org_id\":321813,\"start\":1656215137,\"end\":null,\"canceled\":null,\"created\":1656215137,\"modified\":1656215137,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"362e6e10-b23a-11ed-b77f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656215137\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2046002092,\"monitor_id\":null,\"org_id\":321813,\"start\":1656301418,\"end\":null,\"canceled\":null,\"created\":1656301418,\"modified\":1656301418,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3649b53a-b23a-11ed-babf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656301418\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2048492487,\"monitor_id\":null,\"org_id\":321813,\"start\":1656388167,\"end\":null,\"canceled\":null,\"created\":1656388167,\"modified\":1656388167,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"36847602-b23a-11ed-932b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656388166\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2051041841,\"monitor_id\":null,\"org_id\":321813,\"start\":1656474047,\"end\":null,\"canceled\":null,\"created\":1656474047,\"modified\":1656474047,\"message\":\"java-cancelDowntimesByScopeTest-local-1656474047-3\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"36d42b02-b23a-11ed-a0bf-da7ad0900002\",\"scope\":[\"env:stage\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2051041857,\"monitor_id\":null,\"org_id\":321813,\"start\":1656474048,\"end\":null,\"canceled\":null,\"created\":1656474048,\"modified\":1656474048,\"message\":\"java-cancelDowntimesByScopeTest-local-1656474047-3\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"36d42e4a-b23a-11ed-a0c0-da7ad0900002\",\"scope\":[\"env:stage\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2051042331,\"monitor_id\":null,\"org_id\":321813,\"start\":1656474062,\"end\":null,\"canceled\":null,\"created\":1656474062,\"modified\":1656474062,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"36d430ca-b23a-11ed-a0c1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656474062\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2053609024,\"monitor_id\":null,\"org_id\":321813,\"start\":1656561024,\"end\":null,\"canceled\":null,\"created\":1656561024,\"modified\":1656561024,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"37159f1a-b23a-11ed-aac5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656561023\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2056141373,\"monitor_id\":null,\"org_id\":321813,\"start\":1656647304,\"end\":null,\"canceled\":null,\"created\":1656647304,\"modified\":1656647304,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"37609fd8-b23a-11ed-ba31-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656647303\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2058136091,\"monitor_id\":null,\"org_id\":321813,\"start\":1656720395,\"end\":null,\"canceled\":null,\"created\":1656720395,\"modified\":1656720395,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"37792ddc-b23a-11ed-bebc-da7ad0900002\",\"scope\":[\"host:Test-Go-TestHostsMuteErrors-1656720395\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2058449850,\"monitor_id\":null,\"org_id\":321813,\"start\":1656733648,\"end\":null,\"canceled\":null,\"created\":1656733648,\"modified\":1656733648,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"377a8dda-b23a-11ed-befe-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656733648\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2060162875,\"monitor_id\":null,\"org_id\":321813,\"start\":1656819921,\"end\":null,\"canceled\":null,\"created\":1656819921,\"modified\":1656819921,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3789577a-b23a-11ed-a373-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656819920\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2061908156,\"monitor_id\":null,\"org_id\":321813,\"start\":1656906587,\"end\":null,\"canceled\":null,\"created\":1656906587,\"modified\":1656906587,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3794b16a-b23a-11ed-a58a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656906587\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2062205101,\"monitor_id\":null,\"org_id\":321813,\"start\":1656919616,\"end\":null,\"canceled\":null,\"created\":1656919616,\"modified\":1656919616,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"379bc3ec-b23a-11ed-a6d3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656919616\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2063965397,\"monitor_id\":null,\"org_id\":321813,\"start\":1656992412,\"end\":null,\"canceled\":null,\"created\":1656992412,\"modified\":1656992412,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"37be1cf8-b23a-11ed-abbc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1656992412\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2066405139,\"monitor_id\":null,\"org_id\":321813,\"start\":1657078916,\"end\":null,\"canceled\":null,\"created\":1657078916,\"modified\":1657078916,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"37e3f554-b23a-11ed-b306-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657078916\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2069019270,\"monitor_id\":null,\"org_id\":321813,\"start\":1657166232,\"end\":null,\"canceled\":null,\"created\":1657166232,\"modified\":1657166232,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"38345df0-b23a-11ed-861e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657166232\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2070082830,\"monitor_id\":null,\"org_id\":321813,\"start\":1657203632,\"end\":null,\"canceled\":null,\"created\":1657203632,\"modified\":1657203632,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"38442f46-b23a-11ed-89e1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657203632\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2070223920,\"monitor_id\":null,\"org_id\":321813,\"start\":1657207853,\"end\":null,\"canceled\":null,\"created\":1657207853,\"modified\":1657207853,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"38461a36-b23a-11ed-8a4d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657207853\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2071586909,\"monitor_id\":null,\"org_id\":321813,\"start\":1657251392,\"end\":null,\"canceled\":null,\"created\":1657251392,\"modified\":1657251392,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"38aee066-b23a-11ed-a656-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657251392\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2074010742,\"monitor_id\":null,\"org_id\":321813,\"start\":1657337345,\"end\":null,\"canceled\":null,\"created\":1657337345,\"modified\":1657337345,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"38c59658-b23a-11ed-ac10-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657337345\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2075848375,\"monitor_id\":null,\"org_id\":321813,\"start\":1657424190,\"end\":null,\"canceled\":null,\"created\":1657424190,\"modified\":1657424190,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"38cd8bec-b23a-11ed-ae0f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657424190\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2077644444,\"monitor_id\":null,\"org_id\":321813,\"start\":1657510562,\"end\":null,\"canceled\":null,\"created\":1657510562,\"modified\":1657510562,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"38d72d3c-b23a-11ed-b090-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657510561\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2080110938,\"monitor_id\":null,\"org_id\":321813,\"start\":1657597739,\"end\":null,\"canceled\":null,\"created\":1657597739,\"modified\":1657597739,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"38f7c920-b23a-11ed-b877-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657597739\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2082694266,\"monitor_id\":null,\"org_id\":321813,\"start\":1657684013,\"end\":null,\"canceled\":null,\"created\":1657684013,\"modified\":1657684013,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3928f0a4-b23a-11ed-a3fe-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657684013\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2085275388,\"monitor_id\":null,\"org_id\":321813,\"start\":1657770108,\"end\":null,\"canceled\":null,\"created\":1657770108,\"modified\":1657770108,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3965bd22-b23a-11ed-b0b0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657770108\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2087886766,\"monitor_id\":null,\"org_id\":321813,\"start\":1657857344,\"end\":null,\"canceled\":null,\"created\":1657857344,\"modified\":1657857344,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3987b0b2-b23a-11ed-b97d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657857344\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2090307199,\"monitor_id\":null,\"org_id\":321813,\"start\":1657942946,\"end\":null,\"canceled\":null,\"created\":1657942946,\"modified\":1657942946,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"39aba36e-b23a-11ed-9e9c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1657942946\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2092070892,\"monitor_id\":null,\"org_id\":321813,\"start\":1658029015,\"end\":null,\"canceled\":null,\"created\":1658029015,\"modified\":1658029015,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"39c02aa0-b23a-11ed-a43f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658029015\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2093891415,\"monitor_id\":null,\"org_id\":321813,\"start\":1658115646,\"end\":null,\"canceled\":null,\"created\":1658115646,\"modified\":1658115646,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"39d6044c-b23a-11ed-aa06-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658115646\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2096477439,\"monitor_id\":null,\"org_id\":321813,\"start\":1658202682,\"end\":null,\"canceled\":null,\"created\":1658202682,\"modified\":1658202682,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3a006a2a-b23a-11ed-b49a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658202682\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2098089652,\"monitor_id\":null,\"org_id\":321813,\"start\":1658254921,\"end\":null,\"canceled\":null,\"created\":1658254921,\"modified\":1658254921,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3a186c7e-b23a-11ed-badc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658254921\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2099162945,\"monitor_id\":null,\"org_id\":321813,\"start\":1658288209,\"end\":null,\"canceled\":null,\"created\":1658288209,\"modified\":1658288209,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3a220f86-b23a-11ed-bd41-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658288209\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2101960140,\"monitor_id\":null,\"org_id\":321813,\"start\":1658375293,\"end\":null,\"canceled\":null,\"created\":1658375293,\"modified\":1658375293,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3a7e764a-b23a-11ed-bb11-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658375293\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2104652729,\"monitor_id\":null,\"org_id\":321813,\"start\":1658461872,\"end\":null,\"canceled\":null,\"created\":1658461872,\"modified\":1658461872,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3a9e300c-b23a-11ed-b199-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658461872\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2107140574,\"monitor_id\":null,\"org_id\":321813,\"start\":1658547329,\"end\":null,\"canceled\":null,\"created\":1658547329,\"modified\":1658547329,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3abf3ebe-b23a-11ed-b9db-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658547329\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2109012258,\"monitor_id\":null,\"org_id\":321813,\"start\":1658633864,\"end\":null,\"canceled\":null,\"created\":1658633864,\"modified\":1658633864,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3ac6a320-b23a-11ed-bb88-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658633864\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2110877434,\"monitor_id\":null,\"org_id\":321813,\"start\":1658720370,\"end\":null,\"canceled\":null,\"created\":1658720370,\"modified\":1658720370,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3ad030b6-b23a-11ed-bddb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658720370\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2113486899,\"monitor_id\":null,\"org_id\":321813,\"start\":1658808223,\"end\":null,\"canceled\":null,\"created\":1658808223,\"modified\":1658808223,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3af38444-b23a-11ed-8db7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658808223\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2116172500,\"monitor_id\":null,\"org_id\":321813,\"start\":1658893432,\"end\":null,\"canceled\":null,\"created\":1658893432,\"modified\":1658893432,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3b17e5f0-b23a-11ed-96b6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658893432\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2118885477,\"monitor_id\":null,\"org_id\":321813,\"start\":1658979408,\"end\":null,\"canceled\":null,\"created\":1658979408,\"modified\":1658979408,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3b55d57c-b23a-11ed-a6d2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1658979408\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2121736852,\"monitor_id\":null,\"org_id\":321813,\"start\":1659066831,\"end\":null,\"canceled\":null,\"created\":1659066831,\"modified\":1659066831,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3b75a460-b23a-11ed-ada6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659066831\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2124236402,\"monitor_id\":null,\"org_id\":321813,\"start\":1659153315,\"end\":null,\"canceled\":null,\"created\":1659153315,\"modified\":1659153315,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3b90f36e-b23a-11ed-b374-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659153314\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2126109655,\"monitor_id\":null,\"org_id\":321813,\"start\":1659238726,\"end\":null,\"canceled\":null,\"created\":1659238726,\"modified\":1659238726,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3b9aa35a-b23a-11ed-b598-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659238726\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2128035455,\"monitor_id\":null,\"org_id\":321813,\"start\":1659325960,\"end\":null,\"canceled\":null,\"created\":1659325960,\"modified\":1659325960,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3bb336f4-b23a-11ed-ba43-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659325960\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2130662436,\"monitor_id\":null,\"org_id\":321813,\"start\":1659412389,\"end\":null,\"canceled\":null,\"created\":1659412389,\"modified\":1659412389,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3bcea5c4-b23a-11ed-b2e1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659412389\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2133443831,\"monitor_id\":null,\"org_id\":321813,\"start\":1659498805,\"end\":null,\"canceled\":null,\"created\":1659498805,\"modified\":1659498805,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3bf835f6-b23a-11ed-bc1e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659498805\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2136180597,\"monitor_id\":null,\"org_id\":321813,\"start\":1659584912,\"end\":null,\"canceled\":null,\"created\":1659584912,\"modified\":1659584912,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3c1987ba-b23a-11ed-a861-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659584912\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2138896167,\"monitor_id\":null,\"org_id\":321813,\"start\":1659670639,\"end\":null,\"canceled\":null,\"created\":1659670639,\"modified\":1659670639,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3c3878aa-b23a-11ed-ae86-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659670639\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2141426593,\"monitor_id\":null,\"org_id\":321813,\"start\":1659757100,\"end\":null,\"canceled\":null,\"created\":1659757100,\"modified\":1659757100,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3c593c48-b23a-11ed-b631-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659757099\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2143288576,\"monitor_id\":null,\"org_id\":321813,\"start\":1659843138,\"end\":null,\"canceled\":null,\"created\":1659843138,\"modified\":1659843138,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3c7b781c-b23a-11ed-bf06-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659843138\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2145162240,\"monitor_id\":null,\"org_id\":321813,\"start\":1659929812,\"end\":null,\"canceled\":null,\"created\":1659929812,\"modified\":1659929812,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3c9cc396-b23a-11ed-a00f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1659929812\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2147940741,\"monitor_id\":null,\"org_id\":321813,\"start\":1660017026,\"end\":null,\"canceled\":null,\"created\":1660017026,\"modified\":1660017026,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3cf813fe-b23a-11ed-b11b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660017026\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2150566252,\"monitor_id\":null,\"org_id\":321813,\"start\":1660102520,\"end\":null,\"canceled\":null,\"created\":1660102520,\"modified\":1660102520,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3d3606e6-b23a-11ed-bd5b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660102520\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2153326613,\"monitor_id\":null,\"org_id\":321813,\"start\":1660189316,\"end\":null,\"canceled\":null,\"created\":1660189316,\"modified\":1660189316,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3d5e6ac8-b23a-11ed-b4bf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660189316\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2156099522,\"monitor_id\":null,\"org_id\":321813,\"start\":1660275418,\"end\":null,\"canceled\":null,\"created\":1660275418,\"modified\":1660275418,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3d8aee9a-b23a-11ed-bf87-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660275418\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2158676446,\"monitor_id\":null,\"org_id\":321813,\"start\":1660361545,\"end\":null,\"canceled\":null,\"created\":1660361545,\"modified\":1660361545,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3db858e4-b23a-11ed-9faa-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660361545\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2160604530,\"monitor_id\":null,\"org_id\":321813,\"start\":1660448577,\"end\":null,\"canceled\":null,\"created\":1660448577,\"modified\":1660448577,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3ddc396c-b23a-11ed-a993-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660448577\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2162627761,\"monitor_id\":null,\"org_id\":321813,\"start\":1660535294,\"end\":null,\"canceled\":null,\"created\":1660535294,\"modified\":1660535294,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3dfdbe66-b23a-11ed-b30e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660535294\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2165244957,\"monitor_id\":null,\"org_id\":321813,\"start\":1660621593,\"end\":null,\"canceled\":null,\"created\":1660621593,\"modified\":1660621593,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3e2da78e-b23a-11ed-bffc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660621593\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2168028076,\"monitor_id\":null,\"org_id\":321813,\"start\":1660708824,\"end\":null,\"canceled\":null,\"created\":1660708824,\"modified\":1660708824,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3e6e3a2e-b23a-11ed-a52e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660708824\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2170765298,\"monitor_id\":null,\"org_id\":321813,\"start\":1660794675,\"end\":null,\"canceled\":null,\"created\":1660794675,\"modified\":1660794675,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3e919ed8-b23a-11ed-ae5d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660794675\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2173527812,\"monitor_id\":null,\"org_id\":321813,\"start\":1660880541,\"end\":null,\"canceled\":null,\"created\":1660880541,\"modified\":1660880541,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3ead0c4a-b23a-11ed-b564-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660880541\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2176186201,\"monitor_id\":null,\"org_id\":321813,\"start\":1660966602,\"end\":null,\"canceled\":null,\"created\":1660966602,\"modified\":1660966602,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3ec737c8-b23a-11ed-bc40-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1660966602\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2178207968,\"monitor_id\":null,\"org_id\":321813,\"start\":1661052986,\"end\":null,\"canceled\":null,\"created\":1661052986,\"modified\":1661052986,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3ed176c0-b23a-11ed-bf0c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661052986\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2180269880,\"monitor_id\":null,\"org_id\":321813,\"start\":1661140146,\"end\":null,\"canceled\":null,\"created\":1661140146,\"modified\":1661140146,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3edc7e9e-b23a-11ed-98c5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661140146\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2183023483,\"monitor_id\":null,\"org_id\":321813,\"start\":1661226790,\"end\":null,\"canceled\":null,\"created\":1661226790,\"modified\":1661226790,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3f0156e2-b23a-11ed-a2c6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661226790\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2185819277,\"monitor_id\":null,\"org_id\":321813,\"start\":1661313248,\"end\":null,\"canceled\":null,\"created\":1661313248,\"modified\":1661313248,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3f2bbb44-b23a-11ed-ae1b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661313248\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2188684748,\"monitor_id\":null,\"org_id\":321813,\"start\":1661400349,\"end\":null,\"canceled\":null,\"created\":1661400349,\"modified\":1661400349,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3f59f23e-b23a-11ed-bac0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661400348\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2191502979,\"monitor_id\":null,\"org_id\":321813,\"start\":1661486309,\"end\":null,\"canceled\":null,\"created\":1661486309,\"modified\":1661486309,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3f7d1250-b23a-11ed-965b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661486308\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2194167640,\"monitor_id\":null,\"org_id\":321813,\"start\":1661572254,\"end\":null,\"canceled\":null,\"created\":1661572254,\"modified\":1661572254,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3f9970c6-b23a-11ed-9df7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661572254\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2196171659,\"monitor_id\":null,\"org_id\":321813,\"start\":1661658484,\"end\":null,\"canceled\":null,\"created\":1661658484,\"modified\":1661658484,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3fa7c00e-b23a-11ed-a22d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661658484\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2198223965,\"monitor_id\":null,\"org_id\":321813,\"start\":1661745690,\"end\":null,\"canceled\":null,\"created\":1661745690,\"modified\":1661745690,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3fb4e464-b23a-11ed-a5d8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661745690\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2199337762,\"monitor_id\":null,\"org_id\":321813,\"start\":1661781638,\"end\":null,\"canceled\":null,\"created\":1661781638,\"modified\":1661781638,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3fc09318-b23a-11ed-a92f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661781638\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2199467687,\"monitor_id\":null,\"org_id\":321813,\"start\":1661785310,\"end\":null,\"canceled\":null,\"created\":1661785310,\"modified\":1661785310,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3fc2b738-b23a-11ed-a9c9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661785310\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2199549508,\"monitor_id\":null,\"org_id\":321813,\"start\":1661787495,\"end\":null,\"canceled\":null,\"created\":1661787495,\"modified\":1661787495,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3fc39a04-b23a-11ed-aa01-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661787495\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2201116986,\"monitor_id\":null,\"org_id\":321813,\"start\":1661832395,\"end\":null,\"canceled\":null,\"created\":1661832395,\"modified\":1661832395,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3fd1b04e-b23a-11ed-adcd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661832395\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2204178688,\"monitor_id\":null,\"org_id\":321813,\"start\":1661919561,\"end\":null,\"canceled\":null,\"created\":1661919561,\"modified\":1661919561,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3ff41008-b23a-11ed-b724-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1661919561\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2207109916,\"monitor_id\":null,\"org_id\":321813,\"start\":1662004914,\"end\":null,\"canceled\":null,\"created\":1662004914,\"modified\":1662004914,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"401d69f8-b23a-11ed-99c8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662004914\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2210125430,\"monitor_id\":null,\"org_id\":321813,\"start\":1662090878,\"end\":null,\"canceled\":null,\"created\":1662090878,\"modified\":1662090878,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"403c0d90-b23a-11ed-a228-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662090877\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2213013771,\"monitor_id\":null,\"org_id\":321813,\"start\":1662177610,\"end\":null,\"canceled\":null,\"created\":1662177610,\"modified\":1662177610,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"40582958-b23a-11ed-a9c6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662177610\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2215236973,\"monitor_id\":null,\"org_id\":321813,\"start\":1662264281,\"end\":null,\"canceled\":null,\"created\":1662264281,\"modified\":1662264281,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4060e9f8-b23a-11ed-ac27-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662264280\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2217499184,\"monitor_id\":null,\"org_id\":321813,\"start\":1662351158,\"end\":null,\"canceled\":null,\"created\":1662351158,\"modified\":1662351158,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4071e668-b23a-11ed-b0ee-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662351158\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2220145928,\"monitor_id\":null,\"org_id\":321813,\"start\":1662437613,\"end\":null,\"canceled\":null,\"created\":1662437613,\"modified\":1662437613,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"40889be2-b23a-11ed-b759-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662437613\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2223283337,\"monitor_id\":null,\"org_id\":321813,\"start\":1662523858,\"end\":null,\"canceled\":null,\"created\":1662523858,\"modified\":1662523858,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"40aba7cc-b23a-11ed-bfa7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662523858\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2226554828,\"monitor_id\":null,\"org_id\":321813,\"start\":1662609824,\"end\":null,\"canceled\":null,\"created\":1662609824,\"modified\":1662609824,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"40cff8e8-b23a-11ed-a69e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662609823\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2229730654,\"monitor_id\":null,\"org_id\":321813,\"start\":1662695502,\"end\":null,\"canceled\":null,\"created\":1662695502,\"modified\":1662695502,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"40eea95a-b23a-11ed-adb2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662695502\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2232819205,\"monitor_id\":null,\"org_id\":321813,\"start\":1662782906,\"end\":null,\"canceled\":null,\"created\":1662782906,\"modified\":1662782906,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"410e0bd8-b23a-11ed-b576-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662782906\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2235144457,\"monitor_id\":null,\"org_id\":321813,\"start\":1662868256,\"end\":null,\"canceled\":null,\"created\":1662868256,\"modified\":1662868256,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"411e38b4-b23a-11ed-b806-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662868256\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2237546356,\"monitor_id\":null,\"org_id\":321813,\"start\":1662955934,\"end\":null,\"canceled\":null,\"created\":1662955934,\"modified\":1662955934,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4132443a-b23a-11ed-bc3e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1662955934\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2240629571,\"monitor_id\":null,\"org_id\":321813,\"start\":1663041486,\"end\":null,\"canceled\":null,\"created\":1663041486,\"modified\":1663041486,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"415ba9a6-b23a-11ed-b884-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663041485\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2243954759,\"monitor_id\":null,\"org_id\":321813,\"start\":1663128391,\"end\":null,\"canceled\":null,\"created\":1663128391,\"modified\":1663128391,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"418d0b5e-b23a-11ed-a34c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663128391\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2245036721,\"monitor_id\":null,\"org_id\":321813,\"start\":1663158458,\"end\":null,\"canceled\":null,\"created\":1663158458,\"modified\":1663158458,\"message\":\"tf-TestAccDatadogDowntime_DiffStart-local-1663158457\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"41a4a2dc-b23a-11ed-a80b-da7ad0900002\",\"scope\":[\"somescope\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2247205460,\"monitor_id\":null,\"org_id\":321813,\"start\":1663214945,\"end\":null,\"canceled\":null,\"created\":1663214945,\"modified\":1663214945,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"41c2850e-b23a-11ed-ae1d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663214945\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2250485716,\"monitor_id\":null,\"org_id\":321813,\"start\":1663300931,\"end\":null,\"canceled\":null,\"created\":1663300931,\"modified\":1663300931,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"41f65636-b23a-11ed-b8a9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663300931\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2253604073,\"monitor_id\":null,\"org_id\":321813,\"start\":1663386537,\"end\":null,\"canceled\":null,\"created\":1663386537,\"modified\":1663386537,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"42215584-b23a-11ed-8d2c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663386537\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2256088642,\"monitor_id\":null,\"org_id\":321813,\"start\":1663473474,\"end\":null,\"canceled\":null,\"created\":1663473474,\"modified\":1663473474,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4243ffe4-b23a-11ed-91a7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663473474\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2258619478,\"monitor_id\":null,\"org_id\":321813,\"start\":1663560715,\"end\":null,\"canceled\":null,\"created\":1663560715,\"modified\":1663560715,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"426807ae-b23a-11ed-985e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663560715\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2261718241,\"monitor_id\":null,\"org_id\":321813,\"start\":1663646132,\"end\":null,\"canceled\":null,\"created\":1663646132,\"modified\":1663646132,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"42bb4388-b23a-11ed-ae3b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663646132\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2265503552,\"monitor_id\":null,\"org_id\":321813,\"start\":1663732909,\"end\":null,\"canceled\":null,\"created\":1663732910,\"modified\":1663732910,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"42f245cc-b23a-11ed-bbd2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663732909\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2277650400,\"monitor_id\":null,\"org_id\":321813,\"start\":1663818984,\"end\":null,\"canceled\":null,\"created\":1663818984,\"modified\":1663818984,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"431c37f6-b23a-11ed-ba09-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663818983\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2281083611,\"monitor_id\":null,\"org_id\":321813,\"start\":1663906071,\"end\":null,\"canceled\":null,\"created\":1663906071,\"modified\":1663906071,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"43523e32-b23a-11ed-a811-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663906071\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2284237993,\"monitor_id\":null,\"org_id\":321813,\"start\":1663993085,\"end\":null,\"canceled\":null,\"created\":1663993085,\"modified\":1663993085,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"43840a0c-b23a-11ed-b37a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1663993085\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2286679181,\"monitor_id\":null,\"org_id\":321813,\"start\":1664078470,\"end\":null,\"canceled\":null,\"created\":1664078470,\"modified\":1664078470,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"43a306aa-b23a-11ed-baa6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664078470\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2289159543,\"monitor_id\":null,\"org_id\":321813,\"start\":1664165346,\"end\":null,\"canceled\":null,\"created\":1664165346,\"modified\":1664165346,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"43c43a82-b23a-11ed-aefb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664165346\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2292423458,\"monitor_id\":null,\"org_id\":321813,\"start\":1664252509,\"end\":null,\"canceled\":null,\"created\":1664252509,\"modified\":1664252509,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"43f1c86c-b23a-11ed-ba48-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664252509\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2295733460,\"monitor_id\":null,\"org_id\":321813,\"start\":1664338000,\"end\":null,\"canceled\":null,\"created\":1664338000,\"modified\":1664338000,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"441e45fe-b23a-11ed-ad21-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664337999\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2299164287,\"monitor_id\":null,\"org_id\":321813,\"start\":1664425715,\"end\":null,\"canceled\":null,\"created\":1664425715,\"modified\":1664425715,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"44640da0-b23a-11ed-be32-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664425715\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2301993647,\"monitor_id\":null,\"org_id\":321813,\"start\":1664496737,\"end\":null,\"canceled\":null,\"created\":1664496737,\"modified\":1664496737,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"449f45fa-b23a-11ed-be70-da7ad0900002\",\"scope\":[\"host:Test-Go-TestHostsMuteErrors-1664496737\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2301993650,\"monitor_id\":null,\"org_id\":321813,\"start\":1664496737,\"end\":null,\"canceled\":null,\"created\":1664496737,\"modified\":1664496737,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"449f4ac8-b23a-11ed-be71-da7ad0900002\",\"scope\":[\"host:Test-Go-TestHostsMuteErrors-1664496737\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2302503942,\"monitor_id\":null,\"org_id\":321813,\"start\":1664510639,\"end\":null,\"canceled\":null,\"created\":1664510639,\"modified\":1664510639,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"44a527ae-b23a-11ed-bffe-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664510638\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2303614396,\"monitor_id\":null,\"org_id\":321813,\"start\":1664542729,\"end\":null,\"canceled\":null,\"created\":1664542729,\"modified\":1664542729,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"44b3f2ac-b23a-11ed-a380-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664542729\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2305816069,\"monitor_id\":null,\"org_id\":321813,\"start\":1664598900,\"end\":null,\"canceled\":null,\"created\":1664598900,\"modified\":1664598900,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"44d74748-b23a-11ed-acea-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664598899\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2308263058,\"monitor_id\":null,\"org_id\":321813,\"start\":1664683580,\"end\":null,\"canceled\":null,\"created\":1664683580,\"modified\":1664683580,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"44f9280e-b23a-11ed-b5ae-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664683580\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2310724773,\"monitor_id\":null,\"org_id\":321813,\"start\":1664768547,\"end\":null,\"canceled\":null,\"created\":1664768547,\"modified\":1664768547,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4527d244-b23a-11ed-9938-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664768547\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2311751018,\"monitor_id\":null,\"org_id\":321813,\"start\":1664798717,\"end\":null,\"canceled\":null,\"created\":1664798717,\"modified\":1664798717,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"453eeef2-b23a-11ed-9e5e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664798717\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2311853437,\"monitor_id\":null,\"org_id\":321813,\"start\":1664801314,\"end\":null,\"canceled\":null,\"created\":1664801314,\"modified\":1664801314,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"45420ac4-b23a-11ed-9ecf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664801313\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2314053141,\"monitor_id\":null,\"org_id\":321813,\"start\":1664855215,\"end\":null,\"canceled\":null,\"created\":1664855215,\"modified\":1664855215,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"456a525e-b23a-11ed-a875-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664855215\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2317462447,\"monitor_id\":null,\"org_id\":321813,\"start\":1664941149,\"end\":null,\"canceled\":null,\"created\":1664941149,\"modified\":1664941149,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"45a4f616-b23a-11ed-b63c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1664941149\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2320920699,\"monitor_id\":null,\"org_id\":321813,\"start\":1665028211,\"end\":null,\"canceled\":null,\"created\":1665028211,\"modified\":1665028211,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"45db20d8-b23a-11ed-a5a1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665028211\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2324463653,\"monitor_id\":null,\"org_id\":321813,\"start\":1665114659,\"end\":null,\"canceled\":null,\"created\":1665114659,\"modified\":1665114659,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4612a79c-b23a-11ed-b2fa-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665114659\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2327861896,\"monitor_id\":null,\"org_id\":321813,\"start\":1665200731,\"end\":null,\"canceled\":null,\"created\":1665200731,\"modified\":1665200731,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"464786e2-b23a-11ed-beca-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665200731\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2330490748,\"monitor_id\":null,\"org_id\":321813,\"start\":1665288449,\"end\":null,\"canceled\":null,\"created\":1665288449,\"modified\":1665288449,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"46964fca-b23a-11ed-afc6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665288449\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2333064683,\"monitor_id\":null,\"org_id\":321813,\"start\":1665374034,\"end\":null,\"canceled\":null,\"created\":1665374034,\"modified\":1665374034,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"46cbbde0-b23a-11ed-b727-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665374034\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2336305403,\"monitor_id\":null,\"org_id\":321813,\"start\":1665460375,\"end\":null,\"canceled\":null,\"created\":1665460375,\"modified\":1665460375,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"472de5f6-b23a-11ed-a149-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665460375\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2339858010,\"monitor_id\":null,\"org_id\":321813,\"start\":1665547646,\"end\":null,\"canceled\":null,\"created\":1665547646,\"modified\":1665547646,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"47cb0818-b23a-11ed-b168-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665547646\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2343370119,\"monitor_id\":null,\"org_id\":321813,\"start\":1665633476,\"end\":null,\"canceled\":null,\"created\":1665633476,\"modified\":1665633476,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"486bfcdc-b23a-11ed-92d8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665633476\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2347009518,\"monitor_id\":null,\"org_id\":321813,\"start\":1665720804,\"end\":null,\"canceled\":null,\"created\":1665720804,\"modified\":1665720804,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"48ea0474-b23a-11ed-a459-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665720804\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2350435984,\"monitor_id\":null,\"org_id\":321813,\"start\":1665806934,\"end\":null,\"canceled\":null,\"created\":1665806934,\"modified\":1665806934,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"49706f00-b23a-11ed-b2f1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665806934\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2353123675,\"monitor_id\":null,\"org_id\":321813,\"start\":1665892719,\"end\":null,\"canceled\":null,\"created\":1665892719,\"modified\":1665892719,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"49b6358a-b23a-11ed-ba64-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665892719\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2355874041,\"monitor_id\":null,\"org_id\":321813,\"start\":1665980424,\"end\":null,\"canceled\":null,\"created\":1665980424,\"modified\":1665980424,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"49fd2878-b23a-11ed-a500-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1665980423\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2359464876,\"monitor_id\":null,\"org_id\":321813,\"start\":1666066360,\"end\":null,\"canceled\":null,\"created\":1666066360,\"modified\":1666066360,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4a8339ae-b23a-11ed-b38f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666066360\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2363166481,\"monitor_id\":null,\"org_id\":321813,\"start\":1666151799,\"end\":null,\"canceled\":null,\"created\":1666151799,\"modified\":1666151799,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4b0d051c-b23a-11ed-9a2d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666151799\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2366832505,\"monitor_id\":null,\"org_id\":321813,\"start\":1666237831,\"end\":null,\"canceled\":null,\"created\":1666237831,\"modified\":1666237831,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4b897d54-b23a-11ed-a8bf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666237831\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2370651012,\"monitor_id\":null,\"org_id\":321813,\"start\":1666324226,\"end\":null,\"canceled\":null,\"created\":1666324226,\"modified\":1666324226,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4c0003fc-b23a-11ed-b6a8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666324226\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2373891845,\"monitor_id\":null,\"org_id\":321813,\"start\":1666410633,\"end\":null,\"canceled\":null,\"created\":1666410633,\"modified\":1666410633,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4c968458-b23a-11ed-b1a7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666410633\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2375820314,\"monitor_id\":null,\"org_id\":321813,\"start\":1666497723,\"end\":null,\"canceled\":null,\"created\":1666497723,\"modified\":1666497723,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4ccfac7e-b23a-11ed-b94b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666497723\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2377807884,\"monitor_id\":null,\"org_id\":321813,\"start\":1666585186,\"end\":null,\"canceled\":null,\"created\":1666585186,\"modified\":1666585186,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4d0596ae-b23a-11ed-95c9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666585186\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2380634964,\"monitor_id\":null,\"org_id\":321813,\"start\":1666671429,\"end\":null,\"canceled\":null,\"created\":1666671429,\"modified\":1666671429,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4d6c0e3e-b23a-11ed-a488-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666671429\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2383551848,\"monitor_id\":null,\"org_id\":321813,\"start\":1666756451,\"end\":null,\"canceled\":null,\"created\":1666756451,\"modified\":1666756451,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4de0811a-b23a-11ed-b509-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666756451\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2386485139,\"monitor_id\":null,\"org_id\":321813,\"start\":1666842706,\"end\":null,\"canceled\":null,\"created\":1666842706,\"modified\":1666842706,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4e6c0f46-b23a-11ed-afa9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666842706\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2389361533,\"monitor_id\":null,\"org_id\":321813,\"start\":1666928402,\"end\":null,\"canceled\":null,\"created\":1666928402,\"modified\":1666928402,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4eee5a5a-b23a-11ed-9a31-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1666928402\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2391663198,\"monitor_id\":null,\"org_id\":321813,\"start\":1666998730,\"end\":null,\"canceled\":null,\"created\":1666998730,\"modified\":1666998730,\"message\":\"Example-Cancel_a_downtime_returns_OK_response_1666998730\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1668813130},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4f526a36-b23a-11ed-a8aa-da7ad0900002\",\"scope\":[\"test:examplecanceladowntimereturnsokresponse1666998730\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2392184244,\"monitor_id\":null,\"org_id\":321813,\"start\":1667015400,\"end\":null,\"canceled\":null,\"created\":1667015400,\"modified\":1667015400,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4f5d8f7e-b23a-11ed-aa60-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667015400\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2394213744,\"monitor_id\":null,\"org_id\":321813,\"start\":1667101533,\"end\":null,\"canceled\":null,\"created\":1667101533,\"modified\":1667101533,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4f99564e-b23a-11ed-b522-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667101533\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2396247420,\"monitor_id\":null,\"org_id\":321813,\"start\":1667188255,\"end\":null,\"canceled\":null,\"created\":1667188255,\"modified\":1667188255,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4fcc2d30-b23a-11ed-be26-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667188255\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2399087501,\"monitor_id\":null,\"org_id\":321813,\"start\":1667274852,\"end\":null,\"canceled\":null,\"created\":1667274852,\"modified\":1667274852,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"503ad3a2-b23a-11ed-8bd8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667274852\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2401845581,\"monitor_id\":null,\"org_id\":321813,\"start\":1667360911,\"end\":null,\"canceled\":null,\"created\":1667360911,\"modified\":1667360911,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"50a80530-b23a-11ed-9c19-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667360911\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2404743169,\"monitor_id\":null,\"org_id\":321813,\"start\":1667447257,\"end\":null,\"canceled\":null,\"created\":1667447257,\"modified\":1667447257,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5125180e-b23a-11ed-b28a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667447257\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2407616643,\"monitor_id\":null,\"org_id\":321813,\"start\":1667533120,\"end\":null,\"canceled\":null,\"created\":1667533120,\"modified\":1667533120,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"519bdc78-b23a-11ed-beb6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667533119\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2410256321,\"monitor_id\":null,\"org_id\":321813,\"start\":1667619810,\"end\":null,\"canceled\":null,\"created\":1667619810,\"modified\":1667619810,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"51dc2a6c-b23a-11ed-b1d4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667619809\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2412137040,\"monitor_id\":null,\"org_id\":321813,\"start\":1667705648,\"end\":null,\"canceled\":null,\"created\":1667705648,\"modified\":1667705648,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"51fd2730-b23a-11ed-b805-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667705648\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2414032041,\"monitor_id\":null,\"org_id\":321813,\"start\":1667792099,\"end\":null,\"canceled\":null,\"created\":1667792099,\"modified\":1667792099,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5223efb4-b23a-11ed-bf9a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667792099\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2416850995,\"monitor_id\":null,\"org_id\":321813,\"start\":1667878541,\"end\":null,\"canceled\":null,\"created\":1667878541,\"modified\":1667878541,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"526975e8-b23a-11ed-9134-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667878541\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2419746011,\"monitor_id\":null,\"org_id\":321813,\"start\":1667965599,\"end\":null,\"canceled\":null,\"created\":1667965599,\"modified\":1667965599,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"52bd636a-b23a-11ed-a012-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1667965599\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2422684390,\"monitor_id\":null,\"org_id\":321813,\"start\":1668051921,\"end\":null,\"canceled\":null,\"created\":1668051921,\"modified\":1668051921,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5314f814-b23a-11ed-b1eb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668051921\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2425602831,\"monitor_id\":null,\"org_id\":321813,\"start\":1668138530,\"end\":null,\"canceled\":null,\"created\":1668138530,\"modified\":1668138530,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"536f3a04-b23a-11ed-8675-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668138530\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2428165936,\"monitor_id\":null,\"org_id\":321813,\"start\":1668224948,\"end\":null,\"canceled\":null,\"created\":1668224948,\"modified\":1668224948,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"53a8cc92-b23a-11ed-9489-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668224947\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2430079787,\"monitor_id\":null,\"org_id\":321813,\"start\":1668311134,\"end\":null,\"canceled\":null,\"created\":1668311134,\"modified\":1668311134,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"53cb6810-b23a-11ed-9d35-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668311133\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2432023952,\"monitor_id\":null,\"org_id\":321813,\"start\":1668398012,\"end\":null,\"canceled\":null,\"created\":1668398012,\"modified\":1668398012,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"53f8ffbe-b23a-11ed-a71c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668398012\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2434867196,\"monitor_id\":null,\"org_id\":321813,\"start\":1668483680,\"end\":null,\"canceled\":null,\"created\":1668483680,\"modified\":1668483680,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5456ab0a-b23a-11ed-b7ca-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668483680\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2437934009,\"monitor_id\":null,\"org_id\":321813,\"start\":1668569448,\"end\":null,\"canceled\":null,\"created\":1668569448,\"modified\":1668569448,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"54d1b908-b23a-11ed-bc98-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668569448\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2440980215,\"monitor_id\":null,\"org_id\":321813,\"start\":1668656285,\"end\":null,\"canceled\":null,\"created\":1668656285,\"modified\":1668656285,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"553618e4-b23a-11ed-9d51-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668656284\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2443990260,\"monitor_id\":null,\"org_id\":321813,\"start\":1668742655,\"end\":null,\"canceled\":null,\"created\":1668742655,\"modified\":1668742655,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"55859d2e-b23a-11ed-ae50-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668742655\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2446775868,\"monitor_id\":null,\"org_id\":321813,\"start\":1668829056,\"end\":null,\"canceled\":null,\"created\":1668829056,\"modified\":1668829056,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"55c76b82-b23a-11ed-bc45-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668829056\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2448754897,\"monitor_id\":null,\"org_id\":321813,\"start\":1668915702,\"end\":null,\"canceled\":null,\"created\":1668915702,\"modified\":1668915702,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"55e8ef64-b23a-11ed-8743-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1668915702\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2450712748,\"monitor_id\":null,\"org_id\":321813,\"start\":1669001414,\"end\":null,\"canceled\":null,\"created\":1669001414,\"modified\":1669001414,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5610f342-b23a-11ed-8f6c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669001414\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2453550027,\"monitor_id\":null,\"org_id\":321813,\"start\":1669088360,\"end\":null,\"canceled\":null,\"created\":1669088360,\"modified\":1669088360,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"564af178-b23a-11ed-9cfb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669088360\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2456372360,\"monitor_id\":null,\"org_id\":321813,\"start\":1669174451,\"end\":null,\"canceled\":null,\"created\":1669174451,\"modified\":1669174451,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"569e5368-b23a-11ed-af05-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669174451\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2459015896,\"monitor_id\":null,\"org_id\":321813,\"start\":1669259755,\"end\":null,\"canceled\":null,\"created\":1669259755,\"modified\":1669259755,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"56fcdfa0-b23a-11ed-bea9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669259755\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2461421566,\"monitor_id\":null,\"org_id\":321813,\"start\":1669347462,\"end\":null,\"canceled\":null,\"created\":1669347462,\"modified\":1669347462,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5739ab24-b23a-11ed-a9c6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669347462\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2463652138,\"monitor_id\":null,\"org_id\":321813,\"start\":1669432382,\"end\":null,\"canceled\":null,\"created\":1669432382,\"modified\":1669432382,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"576ec908-b23a-11ed-b42e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669432382\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2465532171,\"monitor_id\":null,\"org_id\":321813,\"start\":1669519459,\"end\":null,\"canceled\":null,\"created\":1669519459,\"modified\":1669519459,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"57900abe-b23a-11ed-ba7c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669519459\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2467453245,\"monitor_id\":null,\"org_id\":321813,\"start\":1669606066,\"end\":null,\"canceled\":null,\"created\":1669606066,\"modified\":1669606066,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"57b463fa-b23a-11ed-9e48-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669606066\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2470167503,\"monitor_id\":null,\"org_id\":321813,\"start\":1669692510,\"end\":null,\"canceled\":null,\"created\":1669692510,\"modified\":1669692510,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"57f2c2ee-b23a-11ed-ac35-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669692510\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2473090961,\"monitor_id\":null,\"org_id\":321813,\"start\":1669778936,\"end\":null,\"canceled\":null,\"created\":1669778936,\"modified\":1669778936,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"583a4c36-b23a-11ed-bb1d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669778936\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2476000033,\"monitor_id\":null,\"org_id\":321813,\"start\":1669865073,\"end\":null,\"canceled\":null,\"created\":1669865073,\"modified\":1669865073,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"588a6586-b23a-11ed-99a2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669865073\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2479105710,\"monitor_id\":null,\"org_id\":321813,\"start\":1669951601,\"end\":null,\"canceled\":null,\"created\":1669951601,\"modified\":1669951601,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"58dec252-b23a-11ed-a8b2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1669951601\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2481860968,\"monitor_id\":null,\"org_id\":321813,\"start\":1670036988,\"end\":null,\"canceled\":null,\"created\":1670036988,\"modified\":1670036988,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"59287096-b23a-11ed-b680-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670036988\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2483920956,\"monitor_id\":null,\"org_id\":321813,\"start\":1670123328,\"end\":null,\"canceled\":null,\"created\":1670123328,\"modified\":1670123328,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5953a9c8-b23a-11ed-bff4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670123328\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2485945042,\"monitor_id\":null,\"org_id\":321813,\"start\":1670209634,\"end\":null,\"canceled\":null,\"created\":1670209634,\"modified\":1670209634,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"59891b62-b23a-11ed-b63e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670209634\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2488855057,\"monitor_id\":null,\"org_id\":321813,\"start\":1670297020,\"end\":null,\"canceled\":null,\"created\":1670297020,\"modified\":1670297020,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"59e4bdb4-b23a-11ed-a0d2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670297020\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2491781849,\"monitor_id\":null,\"org_id\":321813,\"start\":1670382737,\"end\":null,\"canceled\":null,\"created\":1670382737,\"modified\":1670382737,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5a480112-b23a-11ed-b58b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670382737\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2494648826,\"monitor_id\":null,\"org_id\":321813,\"start\":1670469092,\"end\":null,\"canceled\":null,\"created\":1670469092,\"modified\":1670469092,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5aaf27ac-b23a-11ed-9c39-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670469092\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2497564303,\"monitor_id\":null,\"org_id\":321813,\"start\":1670556287,\"end\":null,\"canceled\":null,\"created\":1670556287,\"modified\":1670556287,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5b029568-b23a-11ed-aef6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670556287\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2500332362,\"monitor_id\":null,\"org_id\":321813,\"start\":1670642536,\"end\":null,\"canceled\":null,\"created\":1670642536,\"modified\":1670642536,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5b4f83c8-b23a-11ed-bd36-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670642535\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2502312199,\"monitor_id\":null,\"org_id\":321813,\"start\":1670729290,\"end\":null,\"canceled\":null,\"created\":1670729290,\"modified\":1670729290,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5b8533d8-b23a-11ed-be50-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670729289\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2504226029,\"monitor_id\":null,\"org_id\":321813,\"start\":1670814711,\"end\":null,\"canceled\":null,\"created\":1670814711,\"modified\":1670814711,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5bcc4a52-b23a-11ed-8bad-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670814711\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2507088594,\"monitor_id\":null,\"org_id\":321813,\"start\":1670902159,\"end\":null,\"canceled\":null,\"created\":1670902159,\"modified\":1670902159,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5c27848a-b23a-11ed-9bba-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670902159\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2510122339,\"monitor_id\":null,\"org_id\":321813,\"start\":1670988375,\"end\":null,\"canceled\":null,\"created\":1670988375,\"modified\":1670988375,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5c984bb6-b23a-11ed-b178-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1670988375\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2513143092,\"monitor_id\":null,\"org_id\":321813,\"start\":1671073824,\"end\":null,\"canceled\":null,\"created\":1671073824,\"modified\":1671073824,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5cfff540-b23a-11ed-8ac4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671073824\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2516092056,\"monitor_id\":null,\"org_id\":321813,\"start\":1671160088,\"end\":null,\"canceled\":null,\"created\":1671160088,\"modified\":1671160088,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5d6becb4-b23a-11ed-9b32-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671160088\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2518847271,\"monitor_id\":null,\"org_id\":321813,\"start\":1671246425,\"end\":null,\"canceled\":null,\"created\":1671246425,\"modified\":1671246425,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5dbba6dc-b23a-11ed-a824-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671246425\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2520885813,\"monitor_id\":null,\"org_id\":321813,\"start\":1671332896,\"end\":null,\"canceled\":null,\"created\":1671332896,\"modified\":1671332896,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5de39b24-b23a-11ed-aed5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671332896\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2522901816,\"monitor_id\":null,\"org_id\":321813,\"start\":1671419306,\"end\":null,\"canceled\":null,\"created\":1671419306,\"modified\":1671419306,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5e0caa5a-b23a-11ed-b5ed-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671419306\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2525599143,\"monitor_id\":null,\"org_id\":321813,\"start\":1671505743,\"end\":null,\"canceled\":null,\"created\":1671505743,\"modified\":1671505743,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5e635aee-b23a-11ed-afce-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671505743\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2528402773,\"monitor_id\":null,\"org_id\":321813,\"start\":1671592750,\"end\":null,\"canceled\":null,\"created\":1671592750,\"modified\":1671592750,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5ec6c55c-b23a-11ed-bf28-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671592750\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2531139209,\"monitor_id\":null,\"org_id\":321813,\"start\":1671679401,\"end\":null,\"canceled\":null,\"created\":1671679401,\"modified\":1671679401,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5f16a48c-b23a-11ed-bec5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671679401\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2533715069,\"monitor_id\":null,\"org_id\":321813,\"start\":1671765903,\"end\":null,\"canceled\":null,\"created\":1671765903,\"modified\":1671765903,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5f783094-b23a-11ed-9ecf-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671765903\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2536026538,\"monitor_id\":null,\"org_id\":321813,\"start\":1671851289,\"end\":null,\"canceled\":null,\"created\":1671851289,\"modified\":1671851289,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5fbec716-b23a-11ed-ab40-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671851289\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2537944423,\"monitor_id\":null,\"org_id\":321813,\"start\":1671938544,\"end\":null,\"canceled\":null,\"created\":1671938544,\"modified\":1671938544,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5fe86c10-b23a-11ed-b296-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1671938544\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2539834901,\"monitor_id\":null,\"org_id\":321813,\"start\":1672025026,\"end\":null,\"canceled\":null,\"created\":1672025026,\"modified\":1672025026,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6015f644-b23a-11ed-b970-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672025026\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2541931987,\"monitor_id\":null,\"org_id\":321813,\"start\":1672110543,\"end\":null,\"canceled\":null,\"created\":1672110543,\"modified\":1672110543,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6049d2b6-b23a-11ed-b68a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672110543\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2544196687,\"monitor_id\":null,\"org_id\":321813,\"start\":1672196848,\"end\":null,\"canceled\":null,\"created\":1672196848,\"modified\":1672196848,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6085d306-b23a-11ed-befb-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672196848\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2546563378,\"monitor_id\":null,\"org_id\":321813,\"start\":1672284134,\"end\":null,\"canceled\":null,\"created\":1672284134,\"modified\":1672284134,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"60cd9b96-b23a-11ed-9c0d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672284134\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2548844907,\"monitor_id\":null,\"org_id\":321813,\"start\":1672370478,\"end\":null,\"canceled\":null,\"created\":1672370478,\"modified\":1672370478,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6106731c-b23a-11ed-a61c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672370478\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2550894571,\"monitor_id\":null,\"org_id\":321813,\"start\":1672450879,\"end\":null,\"canceled\":null,\"created\":1672450880,\"modified\":1672450880,\"message\":\"Test-Python-Schedule_a_downtime_returns_OK_response-1672450879\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1674265279},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"61402620-b23a-11ed-af5c-da7ad0900002\",\"scope\":[\"test:testpythonscheduleadowntimereturnsokresponse1672450879\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2551049490,\"monitor_id\":null,\"org_id\":321813,\"start\":1672457080,\"end\":null,\"canceled\":null,\"created\":1672457080,\"modified\":1672457080,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"61433072-b23a-11ed-afd9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672457079\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2552957917,\"monitor_id\":null,\"org_id\":321813,\"start\":1672543636,\"end\":null,\"canceled\":null,\"created\":1672543636,\"modified\":1672543636,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"616ef554-b23a-11ed-b5df-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672543636\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2554846933,\"monitor_id\":null,\"org_id\":321813,\"start\":1672628828,\"end\":null,\"canceled\":null,\"created\":1672628828,\"modified\":1672628828,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6198f25a-b23a-11ed-bbb1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672628828\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2557042043,\"monitor_id\":null,\"org_id\":321813,\"start\":1672715466,\"end\":null,\"canceled\":null,\"created\":1672715466,\"modified\":1672715466,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"61cedc44-b23a-11ed-a8d1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672715466\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2559718474,\"monitor_id\":null,\"org_id\":321813,\"start\":1672802648,\"end\":null,\"canceled\":null,\"created\":1672802648,\"modified\":1672802648,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"621bd1a2-b23a-11ed-b595-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672802648\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2562469384,\"monitor_id\":null,\"org_id\":321813,\"start\":1672888040,\"end\":null,\"canceled\":null,\"created\":1672888040,\"modified\":1672888040,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6276b748-b23a-11ed-a4a1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672888040\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2565260369,\"monitor_id\":null,\"org_id\":321813,\"start\":1672975635,\"end\":null,\"canceled\":null,\"created\":1672975635,\"modified\":1672975635,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"62ebeb80-b23a-11ed-b3a5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1672975635\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2567876166,\"monitor_id\":null,\"org_id\":321813,\"start\":1673061908,\"end\":null,\"canceled\":null,\"created\":1673061908,\"modified\":1673061908,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"634648d2-b23a-11ed-b99b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673061908\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2569874434,\"monitor_id\":null,\"org_id\":321813,\"start\":1673148340,\"end\":null,\"canceled\":null,\"created\":1673148340,\"modified\":1673148340,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6379147e-b23a-11ed-9d18-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673148340\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2571846356,\"monitor_id\":null,\"org_id\":321813,\"start\":1673233671,\"end\":null,\"canceled\":null,\"created\":1673233671,\"modified\":1673233671,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"63ace5ce-b23a-11ed-a483-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673233670\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2574631850,\"monitor_id\":null,\"org_id\":321813,\"start\":1673320808,\"end\":null,\"canceled\":null,\"created\":1673320808,\"modified\":1673320808,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"64138df6-b23a-11ed-b607-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673320808\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2577551876,\"monitor_id\":null,\"org_id\":321813,\"start\":1673406486,\"end\":null,\"canceled\":null,\"created\":1673406486,\"modified\":1673406486,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6481c406-b23a-11ed-9b2f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673406486\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2580588818,\"monitor_id\":null,\"org_id\":321813,\"start\":1673493909,\"end\":null,\"canceled\":null,\"created\":1673493909,\"modified\":1673493909,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"65125b7e-b23a-11ed-ade3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673493909\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2583632569,\"monitor_id\":null,\"org_id\":321813,\"start\":1673579292,\"end\":null,\"canceled\":null,\"created\":1673579292,\"modified\":1673579292,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"657f385c-b23a-11ed-be68-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673579292\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2586588083,\"monitor_id\":null,\"org_id\":321813,\"start\":1673666478,\"end\":null,\"canceled\":null,\"created\":1673666478,\"modified\":1673666478,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"661bc88e-b23a-11ed-b68f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673666478\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2588714306,\"monitor_id\":null,\"org_id\":321813,\"start\":1673752026,\"end\":null,\"canceled\":null,\"created\":1673752026,\"modified\":1673752026,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6655622e-b23a-11ed-bdda-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673752026\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2590863616,\"monitor_id\":null,\"org_id\":321813,\"start\":1673838421,\"end\":null,\"canceled\":null,\"created\":1673838421,\"modified\":1673838421,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"668f095c-b23a-11ed-ad7a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673838420\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2593482058,\"monitor_id\":null,\"org_id\":321813,\"start\":1673924797,\"end\":null,\"canceled\":null,\"created\":1673924797,\"modified\":1673924797,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"66eadd04-b23a-11ed-ba3e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1673924797\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2596552193,\"monitor_id\":null,\"org_id\":321813,\"start\":1674011390,\"end\":null,\"canceled\":null,\"created\":1674011390,\"modified\":1674011390,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6765c4f6-b23a-11ed-94f0-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674011389\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2599777565,\"monitor_id\":null,\"org_id\":321813,\"start\":1674097737,\"end\":null,\"canceled\":null,\"created\":1674097737,\"modified\":1674097737,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"67dabfd6-b23a-11ed-a4ba-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674097737\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2600758418,\"monitor_id\":null,\"org_id\":321813,\"start\":1674126729,\"end\":null,\"canceled\":null,\"created\":1674126731,\"modified\":1674126731,\"message\":\"Test-Typescript-Cancel_a_downtime_returns_OK_response-1674126729\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1675941129},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"67fcfeb6-b23a-11ed-a8e2-da7ad0900002\",\"scope\":[\"test:testtypescriptcanceladowntimereturnsokresponse1674126729\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2603031576,\"monitor_id\":null,\"org_id\":321813,\"start\":1674185040,\"end\":null,\"canceled\":null,\"created\":1674185040,\"modified\":1674185040,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"685bb08c-b23a-11ed-b59c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674185040\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2606086439,\"monitor_id\":null,\"org_id\":321813,\"start\":1674271210,\"end\":null,\"canceled\":null,\"created\":1674271210,\"modified\":1674271210,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"68bf1636-b23a-11ed-bfb9-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674271210\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2608313999,\"monitor_id\":null,\"org_id\":321813,\"start\":1674356985,\"end\":null,\"canceled\":null,\"created\":1674356985,\"modified\":1674356985,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"68f8a1b2-b23a-11ed-a034-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674356985\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2610560603,\"monitor_id\":null,\"org_id\":321813,\"start\":1674444122,\"end\":null,\"canceled\":null,\"created\":1674444122,\"modified\":1674444122,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6938ae7e-b23a-11ed-a931-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674444122\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2613613034,\"monitor_id\":null,\"org_id\":321813,\"start\":1674530851,\"end\":null,\"canceled\":null,\"created\":1674530851,\"modified\":1674530851,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"69ba5b5e-b23a-11ed-bd81-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674530851\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2616779806,\"monitor_id\":null,\"org_id\":321813,\"start\":1674617139,\"end\":null,\"canceled\":null,\"created\":1674617139,\"modified\":1674617139,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6a542eaa-b23a-11ed-8cc6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674617138\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2619964524,\"monitor_id\":null,\"org_id\":321813,\"start\":1674702441,\"end\":null,\"canceled\":null,\"created\":1674702441,\"modified\":1674702441,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6b7f5246-b23a-11ed-bc5e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674702441\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2623114089,\"monitor_id\":null,\"org_id\":321813,\"start\":1674789736,\"end\":null,\"canceled\":null,\"created\":1674789736,\"modified\":1674789736,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6c272660-b23a-11ed-b0ce-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674789736\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2626156777,\"monitor_id\":null,\"org_id\":321813,\"start\":1674875289,\"end\":null,\"canceled\":null,\"created\":1674875289,\"modified\":1674875289,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6ca4f798-b23a-11ed-a1f2-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674875289\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2628406510,\"monitor_id\":null,\"org_id\":321813,\"start\":1674961773,\"end\":null,\"canceled\":null,\"created\":1674961773,\"modified\":1674961773,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6ce8a560-b23a-11ed-afa4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1674961772\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2630635049,\"monitor_id\":null,\"org_id\":321813,\"start\":1675049129,\"end\":null,\"canceled\":null,\"created\":1675049129,\"modified\":1675049129,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6d237ed8-b23a-11ed-b9fa-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675049129\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2633681612,\"monitor_id\":null,\"org_id\":321813,\"start\":1675134518,\"end\":null,\"canceled\":null,\"created\":1675134518,\"modified\":1675134518,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6db67ea4-b23a-11ed-9aae-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675134518\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2637043417,\"monitor_id\":null,\"org_id\":321813,\"start\":1675222344,\"end\":null,\"canceled\":null,\"created\":1675222344,\"modified\":1675222344,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6e4270f8-b23a-11ed-b3de-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675222344\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2640471834,\"monitor_id\":null,\"org_id\":321813,\"start\":1675308429,\"end\":null,\"canceled\":null,\"created\":1675308429,\"modified\":1675308429,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6eef73f2-b23a-11ed-a097-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675308429\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2643895350,\"monitor_id\":null,\"org_id\":321813,\"start\":1675394935,\"end\":null,\"canceled\":null,\"created\":1675394935,\"modified\":1675394935,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6f525fc6-b23a-11ed-b5fd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675394935\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2647042185,\"monitor_id\":null,\"org_id\":321813,\"start\":1675481082,\"end\":null,\"canceled\":null,\"created\":1675481082,\"modified\":1675481082,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6faf60f4-b23a-11ed-929a-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675481081\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2649308596,\"monitor_id\":null,\"org_id\":321813,\"start\":1675567859,\"end\":null,\"canceled\":null,\"created\":1675567859,\"modified\":1675567859,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6fe1332c-b23a-11ed-9de4-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675567859\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2651511859,\"monitor_id\":null,\"org_id\":321813,\"start\":1675653560,\"end\":null,\"canceled\":null,\"created\":1675653560,\"modified\":1675653560,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"700f6c60-b23a-11ed-a6a6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675653560\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2654605183,\"monitor_id\":null,\"org_id\":321813,\"start\":1675739218,\"end\":null,\"canceled\":null,\"created\":1675739218,\"modified\":1675739218,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"7086b9d2-b23a-11ed-bb6d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675739218\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2657838252,\"monitor_id\":null,\"org_id\":321813,\"start\":1675825978,\"end\":null,\"canceled\":null,\"created\":1675825978,\"modified\":1675825978,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"7ce7b618-a75e-11ed-b822-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675825977\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2661127229,\"monitor_id\":null,\"org_id\":321813,\"start\":1675912277,\"end\":null,\"canceled\":null,\"created\":1675912277,\"modified\":1675912277,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6b77c570-a827-11ed-a960-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675912277\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2664387719,\"monitor_id\":null,\"org_id\":321813,\"start\":1675998991,\"end\":null,\"canceled\":null,\"created\":1675998991,\"modified\":1675998991,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"51182ee8-a8f1-11ed-a6d8-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1675998991\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2667462242,\"monitor_id\":null,\"org_id\":321813,\"start\":1676084840,\"end\":null,\"canceled\":null,\"created\":1676084840,\"modified\":1676084840,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"32c98266-a9b9-11ed-937e-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1676084840\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2669738508,\"monitor_id\":null,\"org_id\":321813,\"start\":1676171532,\"end\":null,\"canceled\":null,\"created\":1676171532,\"modified\":1676171532,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"0b4383fc-aa83-11ed-a5f1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1676171532\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2671961482,\"monitor_id\":null,\"org_id\":321813,\"start\":1676258048,\"end\":null,\"canceled\":null,\"created\":1676258048,\"modified\":1676258048,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"7b1bc4e0-ab4c-11ed-babc-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1676258048\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2675049958,\"monitor_id\":null,\"org_id\":321813,\"start\":1676345094,\"end\":null,\"canceled\":null,\"created\":1676345094,\"modified\":1676345094,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2681f32a-ac17-11ed-ad86-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1676345094\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2678184740,\"monitor_id\":null,\"org_id\":321813,\"start\":1676431536,\"end\":null,\"canceled\":null,\"created\":1676431536,\"modified\":1676431536,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"69f94076-ace0-11ed-997b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1676431536\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2686826575,\"monitor_id\":null,\"org_id\":321813,\"start\":1676690805,\"end\":null,\"canceled\":null,\"created\":1676690805,\"modified\":1676690805,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"121f709c-af3c-11ed-8e55-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1676690805\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2690694581,\"monitor_id\":null,\"org_id\":321813,\"start\":1676863797,\"end\":null,\"canceled\":null,\"created\":1676863797,\"modified\":1676863797,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"d93b9db6-b0ce-11ed-952d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1676863797\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2693119909,\"monitor_id\":null,\"org_id\":321813,\"start\":1676949968,\"end\":null,\"canceled\":null,\"created\":1676949968,\"modified\":1676949968,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"7b82a592-b197-11ed-a6d6-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1676949968\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2695915919,\"monitor_id\":null,\"org_id\":321813,\"start\":1677035416,\"end\":null,\"canceled\":null,\"created\":1677035416,\"modified\":1677035416,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6e2217da-b25e-11ed-ae42-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677035416\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2698832031,\"monitor_id\":null,\"org_id\":321813,\"start\":1677122753,\"end\":null,\"canceled\":null,\"created\":1677122753,\"modified\":1677122753,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c6fed67e-b329-11ed-b36d-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677122753\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2701668737,\"monitor_id\":null,\"org_id\":321813,\"start\":1677208162,\"end\":null,\"canceled\":null,\"created\":1677208162,\"modified\":1677208162,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"a2b09bf0-b3f0-11ed-93c1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677208162\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2704456221,\"monitor_id\":null,\"org_id\":321813,\"start\":1677294747,\"end\":null,\"canceled\":null,\"created\":1677294747,\"modified\":1677294747,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3b977090-b4ba-11ed-ba51-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677294747\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2706388177,\"monitor_id\":null,\"org_id\":321813,\"start\":1677381498,\"end\":null,\"canceled\":null,\"created\":1677381498,\"modified\":1677381498,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3755f946-b584-11ed-af53-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677381498\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2708284382,\"monitor_id\":null,\"org_id\":321813,\"start\":1677467616,\"end\":null,\"canceled\":null,\"created\":1677467616,\"modified\":1677467616,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"b9c6cf40-b64c-11ed-8cf7-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677467616\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2711154521,\"monitor_id\":null,\"org_id\":321813,\"start\":1677554700,\"end\":null,\"canceled\":null,\"created\":1677554700,\"modified\":1677554700,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"7bc9dd06-b717-11ed-b2fa-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677554700\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2714153386,\"monitor_id\":null,\"org_id\":321813,\"start\":1677641816,\"end\":null,\"canceled\":null,\"created\":1677641816,\"modified\":1677641816,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"509f1cc4-b7e2-11ed-820f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677641815\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2717090681,\"monitor_id\":null,\"org_id\":321813,\"start\":1677728071,\"end\":null,\"canceled\":null,\"created\":1677728071,\"modified\":1677728071,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24dd3476-b8ab-11ed-a470-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677728071\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2720110441,\"monitor_id\":null,\"org_id\":321813,\"start\":1677817030,\"end\":null,\"canceled\":null,\"created\":1677817030,\"modified\":1677817030,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4438f6aa-b97a-11ed-b783-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677817029\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2721264920,\"monitor_id\":null,\"org_id\":321813,\"start\":1677856379,\"end\":null,\"canceled\":null,\"created\":1677856379,\"modified\":1677856379,\"message\":\"Test-Cancel_a_downtime_returns_OK_response-1677856379\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670779},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e28aa10e-b9d5-11ed-b17f-da7ad0900002\",\"scope\":[\"test:testcanceladowntimereturnsokresponse1677856379\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2721264932,\"monitor_id\":null,\"org_id\":321813,\"start\":1677856380,\"end\":null,\"canceled\":null,\"created\":1677856380,\"modified\":1677856380,\"message\":\"Test-Cancel_downtimes_by_scope_returns_OK_response-1677856380\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670780},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e30f994a-b9d5-11ed-8eda-da7ad0900002\",\"scope\":[\"test:testcanceldowntimesbyscopereturnsokresponse1677856380\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2721264942,\"monitor_id\":null,\"org_id\":321813,\"start\":1677856381,\"end\":null,\"canceled\":null,\"created\":1677856381,\"modified\":1677856381,\"message\":\"Test-Get_a_downtime_returns_OK_response-1677856381\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670781},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e394449c-b9d5-11ed-b3b6-da7ad0900002\",\"scope\":[\"test:testgetadowntimereturnsokresponse1677856381\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2721265067,\"monitor_id\":null,\"org_id\":321813,\"start\":1677856382,\"end\":null,\"canceled\":null,\"created\":1677856382,\"modified\":1677856382,\"message\":\"Test-Schedule_a_downtime_returns_OK_response-1677856382\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670782},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e45aa52e-b9d5-11ed-a784-da7ad0900002\",\"scope\":[\"test:testscheduleadowntimereturnsokresponse1677856382\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2721265130,\"monitor_id\":null,\"org_id\":321813,\"start\":1677856385,\"end\":null,\"canceled\":null,\"created\":1677856385,\"modified\":1677856385,\"message\":\"Test-Update_a_downtime_returns_OK_response-1677856385\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670785},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e6276450-b9d5-11ed-8ac6-da7ad0900002\",\"scope\":[\"test:testupdateadowntimereturnsokresponse1677856385\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2721265226,\"monitor_id\":null,\"org_id\":321813,\"start\":1677856391,\"end\":null,\"canceled\":null,\"created\":1677856391,\"modified\":1677856391,\"message\":\"Test-TestScopedDowntime-1677856391\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e991eb38-b9d5-11ed-93e6-da7ad0900002\",\"scope\":[\"test:client-TestScopedDowntime-1677856391554437000\",\"test:go-TestScopedDowntime-1677856391554437000\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2721273075,\"monitor_id\":null,\"org_id\":321813,\"start\":1677856631,\"end\":null,\"canceled\":null,\"created\":1677856631,\"modified\":1677856631,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"78454db6-b9d6-11ed-93a4-da7ad0900002\",\"scope\":[\"host:Test-TestHostsMuteErrors-1677856630\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2722701604,\"monitor_id\":null,\"org_id\":321813,\"start\":1677899298,\"end\":null,\"canceled\":null,\"created\":1677899298,\"modified\":1677899298,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"cfd485d4-ba39-11ed-9104-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677899297\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2724671796,\"monitor_id\":null,\"org_id\":321813,\"start\":1677986443,\"end\":null,\"canceled\":null,\"created\":1677986443,\"modified\":1677986443,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"b6679c64-bb04-11ed-934b-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1677986443\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2726606375,\"monitor_id\":null,\"org_id\":321813,\"start\":1678073416,\"end\":null,\"canceled\":null,\"created\":1678073416,\"modified\":1678073416,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3691e474-bbcf-11ed-89d5-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678073416\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2729396507,\"monitor_id\":null,\"org_id\":321813,\"start\":1678159094,\"end\":null,\"canceled\":null,\"created\":1678159094,\"modified\":1678159094,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"b2b48eae-bc96-11ed-997c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678159094\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2732366148,\"monitor_id\":null,\"org_id\":321813,\"start\":1678246145,\"end\":null,\"canceled\":null,\"created\":1678246145,\"modified\":1678246145,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"6118481c-bd61-11ed-bd6f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678246145\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2734798898,\"monitor_id\":null,\"org_id\":321813,\"start\":1678332523,\"end\":null,\"canceled\":null,\"created\":1678332523,\"modified\":1678332523,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"7e47effe-be2a-11ed-80cd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678332523\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2736093674,\"monitor_id\":105701177,\"org_id\":321813,\"start\":1678373827,\"end\":1688373727,\"canceled\":null,\"created\":1678373795,\"modified\":1678458742,\"message\":\"This one\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"America/New_York\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"968d8bd6-be8a-11ed-992b-da7ad0900002\",\"scope\":[\"animal:foo3\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2737791387,\"monitor_id\":null,\"org_id\":321813,\"start\":1678419048,\"end\":null,\"canceled\":null,\"created\":1678419048,\"modified\":1678419048,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"f3398a24-bef3-11ed-9652-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678419048\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2740561826,\"monitor_id\":null,\"org_id\":321813,\"start\":1678504255,\"end\":null,\"canceled\":null,\"created\":1678504255,\"modified\":1678504255,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"56595758-bfba-11ed-b4fa-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678504255\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2742533345,\"monitor_id\":null,\"org_id\":321813,\"start\":1678591465,\"end\":null,\"canceled\":null,\"created\":1678591465,\"modified\":1678591465,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"637b2daa-c085-11ed-afde-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678591464\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2744464259,\"monitor_id\":null,\"org_id\":321813,\"start\":1678677871,\"end\":null,\"canceled\":null,\"created\":1678677871,\"modified\":1678677871,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"91f6362e-c14e-11ed-adfd-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678677871\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2747305970,\"monitor_id\":null,\"org_id\":321813,\"start\":1678763407,\"end\":null,\"canceled\":null,\"created\":1678763407,\"modified\":1678763407,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"b93dc18a-c215-11ed-8912-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678763407\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2750352650,\"monitor_id\":null,\"org_id\":321813,\"start\":1678850827,\"end\":null,\"canceled\":null,\"created\":1678850827,\"modified\":1678850827,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"4362d4ce-c2e1-11ed-b32f-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678850827\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2753392718,\"monitor_id\":null,\"org_id\":321813,\"start\":1678937089,\"end\":null,\"canceled\":null,\"created\":1678937089,\"modified\":1678937089,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1b6f6aa8-c3aa-11ed-a17c-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1678937088\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2756384366,\"monitor_id\":null,\"org_id\":321813,\"start\":1679023438,\"end\":null,\"canceled\":null,\"created\":1679023438,\"modified\":1679023438,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27abcec8-c473-11ed-abd1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1679023438\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2759184839,\"monitor_id\":null,\"org_id\":321813,\"start\":1679110073,\"end\":null,\"canceled\":null,\"created\":1679110073,\"modified\":1679110073,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"de7c4cc6-c53c-11ed-a206-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1679110073\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2761121698,\"monitor_id\":null,\"org_id\":321813,\"start\":1679195444,\"end\":null,\"canceled\":null,\"created\":1679195444,\"modified\":1679195444,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"a37c72b4-c603-11ed-b124-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1679195444\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2763030552,\"monitor_id\":null,\"org_id\":321813,\"start\":1679281598,\"end\":null,\"canceled\":null,\"created\":1679281598,\"modified\":1679281598,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3ae13306-c6cc-11ed-bd74-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1679281597\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2765932390,\"monitor_id\":null,\"org_id\":321813,\"start\":1679369074,\"end\":null,\"canceled\":null,\"created\":1679369074,\"modified\":1679369074,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e6c71cd2-c797-11ed-aad1-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1679369074\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2768950414,\"monitor_id\":null,\"org_id\":321813,\"start\":1679454428,\"end\":null,\"canceled\":null,\"created\":1679454428,\"modified\":1679454428,\"message\":null,\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"a1decf80-c85e-11ed-a0e3-da7ad0900002\",\"scope\":[\"host:java-hostsMuteErrorsTest-local-1679454428\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769430775,\"monitor_id\":null,\"org_id\":321813,\"start\":1679470403,\"end\":1679474003,\"canceled\":1679470404,\"created\":1679470404,\"modified\":1679470404,\"message\":\"Example-Schedule_a_downtime_once_a_year_1679470403\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"years\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"d40dc73e-c883-11ed-8997-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769430920,\"monitor_id\":null,\"org_id\":321813,\"start\":1679470410,\"end\":1679474010,\"canceled\":1679470411,\"created\":1679470410,\"modified\":1679470411,\"message\":\"Example-Schedule_a_downtime_until_date_1679470410\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681284810},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"d7e8320e-c883-11ed-9b3d-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769430970,\"monitor_id\":null,\"org_id\":321813,\"start\":1679470412,\"end\":1679474012,\"canceled\":1679470412,\"created\":1679470412,\"modified\":1679470412,\"message\":\"Example-Schedule_a_downtime_with_until_occurrences_1679470412\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":3,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"d8fb8330-c883-11ed-a9ac-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769570391,\"monitor_id\":null,\"org_id\":321813,\"start\":1679475239,\"end\":null,\"canceled\":1679475241,\"created\":1679475240,\"modified\":1679475241,\"message\":\"Example-Get_a_downtime_returns_OK_response_1679475239\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681289639},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"168d9c5a-c88f-11ed-b22a-da7ad0900002\",\"scope\":[\"test:examplegetadowntimereturnsokresponse1679475239\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769570429,\"monitor_id\":null,\"org_id\":321813,\"start\":1679475242,\"end\":null,\"canceled\":1679475243,\"created\":1679475243,\"modified\":1679475243,\"message\":\"Example-Schedule_a_downtime_returns_OK_response_1679475242\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681289642},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"18479b86-c88f-11ed-ac93-da7ad0900002\",\"scope\":[\"test:examplescheduleadowntimereturnsokresponse1679475242\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769570422,\"monitor_id\":null,\"org_id\":321813,\"start\":1679475242,\"end\":null,\"canceled\":1679475243,\"created\":1679475242,\"modified\":1679475243,\"message\":\"Example-Update_a_downtime_returns_OK_response_1679475242-updated\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681289642},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"17e4619c-c88f-11ed-be88-da7ad0900002\",\"scope\":[\"test:exampleupdateadowntimereturnsokresponse1679475242\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769570484,\"monitor_id\":null,\"org_id\":321813,\"start\":1679475245,\"end\":null,\"canceled\":1679475246,\"created\":1679475245,\"modified\":1679475246,\"message\":\"Example-Cancel_a_downtime_returns_OK_response_1679475245\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681289645},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"19f10346-c88f-11ed-b49e-da7ad0900002\",\"scope\":[\"test:examplecanceladowntimereturnsokresponse1679475245\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769570699,\"monitor_id\":null,\"org_id\":321813,\"start\":1679475248,\"end\":null,\"canceled\":1679475250,\"created\":1679475249,\"modified\":1679475250,\"message\":\"Example-Cancel_downtimes_by_scope_returns_OK_response_1679475248\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681289648},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"1bd88e18-c88f-11ed-8c3e-da7ad0900002\",\"scope\":[\"test:examplecanceldowntimesbyscopereturnsokresponse1679475248\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769580952,\"monitor_id\":114364578,\"org_id\":321813,\"start\":1679475612,\"end\":null,\"canceled\":1679475614,\"created\":1679475613,\"modified\":1679475614,\"message\":\"Example-Schedule_a_monitor_downtime_returns_OK_response_1679475612\",\"active\":false,\"disabled\":true,\"recurrence\":null,\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"f5481bd2-c88f-11ed-8423-da7ad0900002\",\"scope\":[\"test:examplescheduleamonitordowntimereturnsokresponse1679475612\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769833430,\"monitor_id\":null,\"org_id\":321813,\"start\":1679483686,\"end\":null,\"canceled\":1679483690,\"created\":1679483688,\"modified\":1679483690,\"message\":\"Test-Typescript-Cancel_a_downtime_returns_OK_response-1679483686\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681298086},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c25d9ef0-c8a2-11ed-b67f-da7ad0900002\",\"scope\":[\"test:testtypescriptcanceladowntimereturnsokresponse1679483686\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769833558,\"monitor_id\":null,\"org_id\":321813,\"start\":1679483692,\"end\":null,\"canceled\":1679483696,\"created\":1679483695,\"modified\":1679483696,\"message\":\"Test-Typescript-Cancel_downtimes_by_scope_returns_OK_response-1679483692\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681298092},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c60c4fc4-c8a2-11ed-9eab-da7ad0900002\",\"scope\":[\"test:testtypescriptcanceldowntimesbyscopereturnsokresponse1679483692\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769833691,\"monitor_id\":null,\"org_id\":321813,\"start\":1679483698,\"end\":null,\"canceled\":1679483701,\"created\":1679483700,\"modified\":1679483701,\"message\":\"Test-Typescript-Get_a_downtime_returns_OK_response-1679483698\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681298098},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c9815726-c8a2-11ed-b302-da7ad0900002\",\"scope\":[\"test:testtypescriptgetadowntimereturnsokresponse1679483698\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769833809,\"monitor_id\":null,\"org_id\":321813,\"start\":1679483701,\"end\":1679487301,\"canceled\":1679483704,\"created\":1679483704,\"modified\":1679483704,\"message\":\"Test-Typescript-Schedule_a_downtime_once_a_year-1679483701\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"years\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"cb81e00e-c8a2-11ed-8147-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769833984,\"monitor_id\":null,\"org_id\":321813,\"start\":1679483707,\"end\":null,\"canceled\":1679483710,\"created\":1679483709,\"modified\":1679483710,\"message\":\"Test-Typescript-Schedule_a_downtime_returns_OK_response-1679483707\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681298107},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"cedc3290-c8a2-11ed-879b-da7ad0900002\",\"scope\":[\"test:testtypescriptscheduleadowntimereturnsokresponse1679483707\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769834091,\"monitor_id\":null,\"org_id\":321813,\"start\":1679483710,\"end\":1679487310,\"canceled\":1679483714,\"created\":1679483713,\"modified\":1679483714,\"message\":\"Test-Typescript-Schedule_a_downtime_until_date-1679483710\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681298110},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"d12d815c-c8a2-11ed-9eef-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769834394,\"monitor_id\":null,\"org_id\":321813,\"start\":1679483721,\"end\":1679487321,\"canceled\":1679483724,\"created\":1679483724,\"modified\":1679483724,\"message\":\"Test-Typescript-Schedule_a_downtime_with_until_occurrences-1679483721\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":3,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"d759916a-c8a2-11ed-8ddc-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769834572,\"monitor_id\":114371609,\"org_id\":321813,\"start\":1679483724,\"end\":null,\"canceled\":1679483728,\"created\":1679483727,\"modified\":1679483728,\"message\":\"Test-Typescript-Schedule_a_monitor_downtime_returns_OK_response-1679483724\",\"active\":false,\"disabled\":true,\"recurrence\":null,\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"d96d9366-c8a2-11ed-ba18-da7ad0900002\",\"scope\":[\"test:testtypescriptscheduleamonitordowntimereturnsokresponse1679483724\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769834782,\"monitor_id\":null,\"org_id\":321813,\"start\":1679483728,\"end\":null,\"canceled\":1679483732,\"created\":1679483731,\"modified\":1679483732,\"message\":\"Test-Typescript-Update_a_downtime_returns_OK_response-1679483728-updated\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681298128},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"db90fb7e-c8a2-11ed-a509-da7ad0900002\",\"scope\":[\"test:testtypescriptupdateadowntimereturnsokresponse1679483728\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769867564,\"monitor_id\":null,\"org_id\":321813,\"start\":1679484803,\"end\":1679488403,\"canceled\":1679484804,\"created\":1679484804,\"modified\":1679484804,\"message\":\"Example-Schedule_a_downtime_once_a_year_1679484803\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"years\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5b3442a8-c8a5-11ed-bcee-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769867674,\"monitor_id\":null,\"org_id\":321813,\"start\":1679484809,\"end\":1679488409,\"canceled\":1679484810,\"created\":1679484810,\"modified\":1679484810,\"message\":\"Example-Schedule_a_downtime_until_date_1679484809\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681299209},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5ea676c2-c8a5-11ed-9a59-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769867692,\"monitor_id\":null,\"org_id\":321813,\"start\":1679484810,\"end\":1679488410,\"canceled\":1679484811,\"created\":1679484811,\"modified\":1679484811,\"message\":\"Example-Schedule_a_downtime_with_until_occurrences_1679484810\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":3,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5f4e81be-c8a5-11ed-8fd3-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769961924,\"monitor_id\":null,\"org_id\":321813,\"start\":1679487556,\"end\":null,\"canceled\":1679487558,\"created\":1679487556,\"modified\":1679487558,\"message\":\"tf-TestAccDatadogDowntime_DiffStart-local-1679487555\",\"active\":false,\"disabled\":true,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c3be0754-c8ab-11ed-a3e1-da7ad0900002\",\"scope\":[\"new:somescope\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2770030155,\"monitor_id\":null,\"org_id\":321813,\"start\":1679489639,\"end\":null,\"canceled\":1679489641,\"created\":1679489640,\"modified\":1679489641,\"message\":\"Example-Get_a_downtime_returns_OK_response_1679489639\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681304039},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"9d9da26e-c8b0-11ed-a360-da7ad0900002\",\"scope\":[\"test:examplegetadowntimereturnsokresponse1679489639\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770030204,\"monitor_id\":null,\"org_id\":321813,\"start\":1679489641,\"end\":null,\"canceled\":1679489642,\"created\":1679489642,\"modified\":1679489642,\"message\":\"Example-Update_a_downtime_returns_OK_response_1679489641-updated\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681304041},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"9eadbe1e-c8b0-11ed-bb15-da7ad0900002\",\"scope\":[\"test:exampleupdateadowntimereturnsokresponse1679489641\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770030219,\"monitor_id\":null,\"org_id\":321813,\"start\":1679489643,\"end\":null,\"canceled\":1679489643,\"created\":1679489643,\"modified\":1679489643,\"message\":\"Example-Schedule_a_downtime_returns_OK_response_1679489643\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681304043},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"9f82b998-c8b0-11ed-9e59-da7ad0900002\",\"scope\":[\"test:examplescheduleadowntimereturnsokresponse1679489643\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770030355,\"monitor_id\":null,\"org_id\":321813,\"start\":1679489645,\"end\":null,\"canceled\":1679489646,\"created\":1679489645,\"modified\":1679489646,\"message\":\"Example-Cancel_a_downtime_returns_OK_response_1679489645\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681304045},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"a0dca952-c8b0-11ed-bb5c-da7ad0900002\",\"scope\":[\"test:examplecanceladowntimereturnsokresponse1679489645\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770030525,\"monitor_id\":null,\"org_id\":321813,\"start\":1679489648,\"end\":null,\"canceled\":1679489650,\"created\":1679489649,\"modified\":1679489650,\"message\":\"Example-Cancel_downtimes_by_scope_returns_OK_response_1679489648\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681304048},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"a2ea6284-c8b0-11ed-b322-da7ad0900002\",\"scope\":[\"test:examplecanceldowntimesbyscopereturnsokresponse1679489648\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770041810,\"monitor_id\":114376213,\"org_id\":321813,\"start\":1679490012,\"end\":null,\"canceled\":1679490014,\"created\":1679490013,\"modified\":1679490014,\"message\":\"Example-Schedule_a_monitor_downtime_returns_OK_response_1679490012\",\"active\":false,\"disabled\":true,\"recurrence\":null,\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"7c4c7b70-c8b1-11ed-9833-da7ad0900002\",\"scope\":[\"test:examplescheduleamonitordowntimereturnsokresponse1679490012\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2767070611,\"monitor_id\":110212070,\"org_id\":321813,\"start\":1679492045,\"end\":1679492075,\"canceled\":null,\"created\":1679405692,\"modified\":1679492092,\"message\":\"This one\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"America/New_York\",\"parent_id\":2764091228,\"child_id\":2770113401,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"ended\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"28ae1830-c7ed-11ed-a6b4-da7ad0900002\",\"scope\":[\"animal:foo4\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2769936028,\"monitor_id\":null,\"org_id\":321813,\"start\":1679497621,\"end\":1679501221,\"canceled\":1679486825,\"created\":1679486823,\"modified\":1679486825,\"message\":\"tf-TestAccDatadogDowntime_BasicWithMonitorTags-local-1679486821\",\"active\":false,\"disabled\":true,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"app:webserver\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"0ed848a0-c8aa-11ed-9eef-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769936339,\"monitor_id\":114374093,\"org_id\":321813,\"start\":1679497624,\"end\":1679501224,\"canceled\":1679486829,\"created\":1679486826,\"modified\":1679486829,\"message\":\"tf-TestAccDatadogDowntime_BasicWithMonitor-local-1679486824\",\"active\":false,\"disabled\":true,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"10a0259a-c8aa-11ed-8de9-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2767447260,\"monitor_id\":null,\"org_id\":321813,\"start\":1679497983,\"end\":1679501583,\"canceled\":null,\"created\":1679415232,\"modified\":1679501633,\"message\":\"Test-Schedule_a_downtime_until_date-1677856383\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670783},\"timezone\":\"Etc/UTC\",\"parent_id\":2764446794,\"child_id\":2770482668,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"ended\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5ef05974-c803-11ed-a19b-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2767447261,\"monitor_id\":null,\"org_id\":321813,\"start\":1679497990,\"end\":1679501590,\"canceled\":null,\"created\":1679415232,\"modified\":1679501633,\"message\":\"Test-TestDowntimeLifecycle-1677856390\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670790},\"timezone\":\"Etc/UTC\",\"parent_id\":2764446795,\"child_id\":2770482670,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"ended\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5ef0691e-c803-11ed-a19c-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2767447262,\"monitor_id\":null,\"org_id\":321813,\"start\":1679497991,\"end\":1679501591,\"canceled\":null,\"created\":1679415232,\"modified\":1679501633,\"message\":\"Test-TestDowntimeRecurrence_until_date-1677856392; until date\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670791},\"timezone\":\"Etc/UTC\",\"parent_id\":2764446796,\"child_id\":2770482669,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"ended\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"5ef0715c-c803-11ed-a19d-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770385514,\"monitor_id\":null,\"org_id\":321813,\"start\":1679499203,\"end\":1679502803,\"canceled\":1679499204,\"created\":1679499204,\"modified\":1679499204,\"message\":\"Example-Schedule_a_downtime_once_a_year_1679499203\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"years\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e234f808-c8c6-11ed-87e1-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770385766,\"monitor_id\":null,\"org_id\":321813,\"start\":1679499210,\"end\":1679502810,\"canceled\":1679499211,\"created\":1679499210,\"modified\":1679499211,\"message\":\"Example-Schedule_a_downtime_until_date_1679499210\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681313610},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e5f7ca38-c8c6-11ed-abd5-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770385809,\"monitor_id\":null,\"org_id\":321813,\"start\":1679499211,\"end\":1679502811,\"canceled\":1679499212,\"created\":1679499211,\"modified\":1679499212,\"message\":\"Example-Schedule_a_downtime_with_until_occurrences_1679499211\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":3,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"e6a0de20-c8c6-11ed-ac07-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770578108,\"monitor_id\":null,\"org_id\":321813,\"start\":1679504039,\"end\":null,\"canceled\":1679504041,\"created\":1679504040,\"modified\":1679504041,\"message\":\"Example-Get_a_downtime_returns_OK_response_1679504039\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681318439},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"24b27b96-c8d2-11ed-8949-da7ad0900002\",\"scope\":[\"test:examplegetadowntimereturnsokresponse1679504039\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770578168,\"monitor_id\":null,\"org_id\":321813,\"start\":1679504041,\"end\":null,\"canceled\":1679504042,\"created\":1679504042,\"modified\":1679504042,\"message\":\"Example-Update_a_downtime_returns_OK_response_1679504041-updated\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681318441},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25c2bf50-c8d2-11ed-be23-da7ad0900002\",\"scope\":[\"test:exampleupdateadowntimereturnsokresponse1679504041\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770578292,\"monitor_id\":null,\"org_id\":321813,\"start\":1679504043,\"end\":null,\"canceled\":1679504044,\"created\":1679504043,\"modified\":1679504044,\"message\":\"Example-Schedule_a_downtime_returns_OK_response_1679504043\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681318443},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"26d6b284-c8d2-11ed-abf2-da7ad0900002\",\"scope\":[\"test:examplescheduleadowntimereturnsokresponse1679504043\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770578325,\"monitor_id\":null,\"org_id\":321813,\"start\":1679504045,\"end\":null,\"canceled\":1679504046,\"created\":1679504045,\"modified\":1679504046,\"message\":\"Example-Cancel_a_downtime_returns_OK_response_1679504045\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681318445},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"27ea7e4e-c8d2-11ed-865b-da7ad0900002\",\"scope\":[\"test:examplecanceladowntimereturnsokresponse1679504045\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770578384,\"monitor_id\":null,\"org_id\":321813,\"start\":1679504048,\"end\":null,\"canceled\":1679504050,\"created\":1679504049,\"modified\":1679504050,\"message\":\"Example-Cancel_downtimes_by_scope_returns_OK_response_1679504048\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1681318448},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"29ffe11a-c8d2-11ed-b57c-da7ad0900002\",\"scope\":[\"test:examplecanceldowntimesbyscopereturnsokresponse1679504048\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770593586,\"monitor_id\":114400169,\"org_id\":321813,\"start\":1679504412,\"end\":null,\"canceled\":1679504414,\"created\":1679504413,\"modified\":1679504414,\"message\":\"Example-Schedule_a_monitor_downtime_returns_OK_response_1679504412\",\"active\":false,\"disabled\":true,\"recurrence\":null,\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"035d396c-c8d3-11ed-9a03-da7ad0900002\",\"scope\":[\"test:examplescheduleamonitordowntimereturnsokresponse1679504412\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2768714875,\"monitor_id\":null,\"org_id\":321813,\"start\":1679529850,\"end\":1679533450,\"canceled\":null,\"created\":1679447092,\"modified\":1679447092,\"message\":\"Test-Go-TestDowntimeRecurrence_until_date-1677715451; until date\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679529850},\"timezone\":\"Etc/UTC\",\"parent_id\":2765676300,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"8d176d20-c84d-11ed-8a63-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2770113401,\"monitor_id\":110212070,\"org_id\":321813,\"start\":1679578445,\"end\":1679578475,\"canceled\":null,\"created\":1679492092,\"modified\":1679492092,\"message\":\"This one\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"America/New_York\",\"parent_id\":2767070611,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"53803b1e-c8b6-11ed-9b7d-da7ad0900002\",\"scope\":[\"animal:foo4\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770482668,\"monitor_id\":null,\"org_id\":321813,\"start\":1679584383,\"end\":1679587983,\"canceled\":null,\"created\":1679501633,\"modified\":1679501633,\"message\":\"Test-Schedule_a_downtime_until_date-1677856383\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670783},\"timezone\":\"Etc/UTC\",\"parent_id\":2767447260,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"89f5598e-c8cc-11ed-9df0-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770482670,\"monitor_id\":null,\"org_id\":321813,\"start\":1679584390,\"end\":1679587990,\"canceled\":null,\"created\":1679501633,\"modified\":1679501633,\"message\":\"Test-TestDowntimeLifecycle-1677856390\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670790},\"timezone\":\"Etc/UTC\",\"parent_id\":2767447261,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"89f5679e-c8cc-11ed-9df2-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2770482669,\"monitor_id\":null,\"org_id\":321813,\"start\":1679584391,\"end\":1679587991,\"canceled\":null,\"created\":1679501633,\"modified\":1679501633,\"message\":\"Test-TestDowntimeRecurrence_until_date-1677856392; until date\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1679670791},\"timezone\":\"Etc/UTC\",\"parent_id\":2767447262,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"89f56528-c8cc-11ed-9df1-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2565005611,\"monitor_id\":null,\"org_id\":321813,\"start\":1704499563,\"end\":1704503163,\"canceled\":null,\"created\":1672967185,\"modified\":1672967185,\"message\":\"Test-Go-Schedule_a_downtime_once_a_year-1672963563\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"years\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":2564876174,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"62e3a8da-b23a-11ed-b25e-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2721390105,\"monitor_id\":null,\"org_id\":321813,\"start\":1709478781,\"end\":1709482381,\"canceled\":null,\"created\":1677860032,\"modified\":1677860032,\"message\":\"Test-Schedule_a_downtime_once_a_year-1677856381\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"years\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":2721264952,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"639c9ac4-b9de-11ed-ba84-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":2721390104,\"monitor_id\":null,\"org_id\":321813,\"start\":1709478791,\"end\":1709482391,\"canceled\":null,\"created\":1677860032,\"modified\":1677860032,\"message\":\"Test-TestDowntimeRecurrence_once_a_year-1677856394; once a year\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"years\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":2721265651,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"639c81ba-b9de-11ed-ba83-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":1445416,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":null}},{\"id\":1878944397,\"monitor_id\":null,\"org_id\":321813,\"start\":1735646400,\"end\":1735732799,\"canceled\":null,\"created\":1649943433,\"modified\":1649943433,\"message\":\"tf-TestAccDatadogDowntime_RRule-local-1649943431\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"rrule\",\"rrule\":\"FREQ=MONTHLY;BYSETPOS=3;BYDAY=WE;INTERVAL=1\"},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"2d0fd2d8-b23a-11ed-aa1a-da7ad0900002\",\"scope\":[\"RRuleRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965848156,\"monitor_id\":null,\"org_id\":321813,\"start\":1735646400,\"end\":1735732799,\"canceled\":null,\"created\":1653179652,\"modified\":1653179652,\"message\":\"tf-TestAccDatadogDowntime_RRule-local-1653179650\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"rrule\",\"rrule\":\"FREQ=MONTHLY;BYSETPOS=3;BYDAY=WE;INTERVAL=1\"},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c35d3c-b23a-11ed-adaf-da7ad0900002\",\"scope\":[\"RRuleRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965848173,\"monitor_id\":null,\"org_id\":321813,\"start\":1735646400,\"end\":1735732799,\"canceled\":null,\"created\":1653179653,\"modified\":1653179653,\"message\":\"tf-TestAccDatadogDowntime_WeekDayRecurring-local-1653179650\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Sat\",\"Sun\"],\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c3630e-b23a-11ed-adb0-da7ad0900002\",\"scope\":[\"WeekDaysRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2597640957,\"monitor_id\":null,\"org_id\":321813,\"start\":1735646400,\"end\":1735732799,\"canceled\":null,\"created\":1674043991,\"modified\":1674043991,\"message\":\"tf-TestAccDatadogDowntime_WeekDayRecurring-local-1674043990\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Sat\",\"Sun\"],\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"67891b7c-b23a-11ed-9ab5-da7ad0900002\",\"scope\":[\"WeekDaysRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769962029,\"monitor_id\":null,\"org_id\":321813,\"start\":1735646400,\"end\":1735732799,\"canceled\":1679487563,\"created\":1679487561,\"modified\":1679487563,\"message\":\"tf-TestAccDatadogDowntime_RRule-local-1679487559\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"rrule\",\"rrule\":\"FREQ=MONTHLY;BYSETPOS=3;BYDAY=WE;INTERVAL=1\"},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c6ba1a2e-c8ab-11ed-905f-da7ad0900002\",\"scope\":[\"scope:RRuleRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769962078,\"monitor_id\":null,\"org_id\":321813,\"start\":1735646400,\"end\":1735732799,\"canceled\":1679487566,\"created\":1679487565,\"modified\":1679487566,\"message\":\"tf-TestAccDatadogDowntime_WeekDayRecurring-local-1679487563\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Sat\",\"Sun\"],\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c8d8bec8-c8ab-11ed-bfdf-da7ad0900002\",\"scope\":[\"scope:WeekDaysRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965848064,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":null,\"created\":1653179649,\"modified\":1653179649,\"message\":\"tf-TestAccDatadogDowntime_TrimWhitespace-local-1653179647\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c358aa-b23a-11ed-adad-da7ad0900002\",\"scope\":[\"host:Whitespace\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965848072,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":null,\"created\":1653179650,\"modified\":1653179650,\"message\":\"tf-TestAccDatadogDowntime_Updated-local-1653179648\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"app:webserver\",\"service\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c35b34-b23a-11ed-adae-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965848231,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":null,\"created\":1653179657,\"modified\":1653179657,\"message\":\"tf-TestAccDatadogDowntime_BasicNoRecurrence-local-1653179655\",\"active\":false,\"disabled\":false,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c36516-b23a-11ed-adb1-da7ad0900002\",\"scope\":[\"host:NoRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965848233,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":null,\"created\":1653179658,\"modified\":1653179658,\"message\":\"tf-TestAccDatadogDowntime_BasicMultiScope-local-1653179656\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":2,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c367fa-b23a-11ed-adb2-da7ad0900002\",\"scope\":[\"host:A\",\"host:B\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2245041146,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":null,\"created\":1663158585,\"modified\":1663158585,\"message\":\"tf-TestAccDatadogDowntime_BasicUntilOccurrencesRecurrence-local-1663158584\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":5,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":1,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"41a4b5d8-b23a-11ed-a80f-da7ad0900002\",\"scope\":[\"host:UntilOccurrencesRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769935690,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":1679486814,\"created\":1679486812,\"modified\":1679486814,\"message\":\"tf-TestAccDatadogDowntime_BasicUntilOccurrencesRecurrence-local-1679486810\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":5,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":1,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"0827bb80-c8aa-11ed-879e-da7ad0900002\",\"scope\":[\"host:UntilOccurrencesRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769935803,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":1679486817,\"created\":1679486815,\"modified\":1679486817,\"message\":\"tf-TestAccDatadogDowntime_BasicUntilDateRecurrence-local-1679486814\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":1736226000},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":1,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"0a36e702-c8aa-11ed-a28e-da7ad0900002\",\"scope\":[\"host:UntilDateRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769935899,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":1679486820,\"created\":1679486819,\"modified\":1679486820,\"message\":\"tf-TestAccDatadogDowntime_BasicNoRecurrence-local-1679486817\",\"active\":false,\"disabled\":true,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":1,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"0c38769c-c8aa-11ed-8dcb-da7ad0900002\",\"scope\":[\"host:NoRecurrence\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769936000,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":1679486824,\"created\":1679486822,\"modified\":1679486824,\"message\":\"tf-TestAccDatadogDowntime_BasicMultiScope-local-1679486820\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"0e3193f2-c8aa-11ed-aa3d-da7ad0900002\",\"scope\":[\"host:A\",\"host:B\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769936356,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":1679486829,\"created\":1679486827,\"modified\":1679486829,\"message\":\"tf-TestAccDatadogDowntime_Basic-local-1679486826\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"app:webserver\",\"service\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"11381580-c8aa-11ed-a88a-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769961950,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":1679487559,\"created\":1679487558,\"modified\":1679487559,\"message\":\"tf-TestAccDatadogDowntime_TrimWhitespace-local-1679487556\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":1,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c495fdb2-c8ab-11ed-87ac-da7ad0900002\",\"scope\":[\"host:Whitespace\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769962082,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":1679487567,\"created\":1679487565,\"modified\":1679487567,\"message\":\"Example Datadog downtime message.\",\"active\":false,\"disabled\":true,\"recurrence\":null,\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"foo:bar\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c9303e00-c8ab-11ed-8a05-da7ad0900002\",\"scope\":[\"host:X\",\"host:Y\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769962022,\"monitor_id\":null,\"org_id\":321813,\"start\":1735707600,\"end\":1735765200,\"canceled\":1679487563,\"created\":1679487560,\"modified\":1679487563,\"message\":\"tf-TestAccDatadogDowntime_Updated-local-1679487558\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"days\",\"period\":3,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":2,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c5e6c1ba-c8ab-11ed-8d95-da7ad0900002\",\"scope\":[\"scope:Updated\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":1965848033,\"monitor_id\":null,\"org_id\":321813,\"start\":4097124660,\"end\":4097160000,\"canceled\":null,\"created\":1653179646,\"modified\":1653179646,\"message\":\"tf-TestAccDatadogDowntimeDates-local-1653179644\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"30c353aa-b23a-11ed-adab-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2054437499,\"monitor_id\":null,\"org_id\":321813,\"start\":4097124660,\"end\":4097160000,\"canceled\":null,\"created\":1656591274,\"modified\":1656591274,\"message\":\"tf-TestAccDatadogDowntimeDates-local-1656591273\",\"active\":false,\"disabled\":false,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":null,\"downtime_type\":0,\"status\":\"scheduled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"3727526e-b23a-11ed-aedf-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":2769961903,\"monitor_id\":null,\"org_id\":321813,\"start\":4097124660,\"end\":4097160000,\"canceled\":1679487556,\"created\":1679487554,\"modified\":1679487556,\"message\":\"tf-TestAccDatadogDowntimeDates-local-1679487552\",\"active\":false,\"disabled\":true,\"recurrence\":{\"type\":\"days\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":2320499,\"updater_id\":2320499,\"downtime_type\":0,\"status\":\"canceled\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"c280e320-c8ab-11ed-bde0-da7ad0900002\",\"scope\":[\"*\"],\"creator\":{\"id\":2320499,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all downtimes returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-04T18:17:37.941Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1683227857, + "message": "Test-Schedule_a_downtime_once_a_year-1683224257", + "monitor_tags": [ + "tag0" + ], + "mute_first_recovery_notification": true, + "notify_end_states": [ + "alert", + "warn" + ], + "notify_end_types": [ + "expired" + ], + "recurrence": { + "period": 1, + "type": "years" + }, + "scope": [ + "*" + ], + "start": 1683224257, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2890657808,\"monitor_id\":null,\"org_id\":321813,\"start\":1683224257,\"end\":1683227857,\"canceled\":null,\"created\":1683224258,\"modified\":1683224258,\"message\":\"Test-Schedule_a_downtime_once_a_year-1683224257\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"years\",\"period\":1,\"week_days\":null,\"until_occurrences\":null,\"until_date\":null},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"active\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"warn\"],\"uuid\":\"f3d207ba-eaa7-11ed-8667-da7ad0900002\",\"scope\":[\"*\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2890657808", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Schedule a downtime once a year", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2022-01-06T00:50:47.749Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "monitor_tags": [ + "tag0", + "tag1", + "tag2", + "tag3", + "tag4", + "tag5", + "tag6", + "tag7", + "tag8", + "tag9", + "tag10", + "tag11", + "tag12", + "tag13", + "tag14", + "tag15", + "tag16", + "tag17", + "tag18", + "tag19", + "tag20", + "tag21", + "tag22", + "tag23", + "tag24", + "tag25", + "tag26", + "tag27", + "tag28", + "tag29", + "tag30", + "tag31", + "tag32", + "tag33", + "tag34", + "tag35", + "tag36", + "tag37", + "tag38", + "tag39", + "tag40", + "tag41", + "tag42", + "tag43", + "tag44", + "tag45", + "tag46", + "tag47", + "tag48", + "tag49" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid scope parameter\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Schedule a downtime returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-22T14:34:57.936Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1684769697, + "message": "Test-Schedule_a_downtime_returns_OK_response-1684766097", + "notify_end_states": [ + "alert", + "no data", + "warn" + ], + "notify_end_types": [ + "canceled", + "expired" + ], + "recurrence": { + "period": 1, + "type": "weeks", + "until_date": 1686580497, + "week_days": [ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri" + ] + }, + "scope": [ + "test:testscheduleadowntimereturnsokresponse1684766097" + ], + "start": 1684766097, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2941976753,\"monitor_id\":null,\"org_id\":321813,\"start\":1684766097,\"end\":1684769697,\"canceled\":null,\"created\":1684766098,\"modified\":1684766098,\"message\":\"Test-Schedule_a_downtime_returns_OK_response-1684766097\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1686580497},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"canceled\",\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"d3b49b1e-f8ad-11ed-a3ce-da7ad0900002\",\"scope\":[\"test:testscheduleadowntimereturnsokresponse1684766097\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2941976753", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Schedule a downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-04T18:17:39.364Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1683227859, + "message": "Test-Schedule_a_downtime_until_date-1683224259", + "monitor_tags": [ + "tag0" + ], + "mute_first_recovery_notification": true, + "notify_end_states": [ + "alert" + ], + "notify_end_types": [ + "canceled" + ], + "recurrence": { + "period": 1, + "type": "weeks", + "until_date": 1685038659, + "week_days": [ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri" + ] + }, + "scope": [ + "*" + ], + "start": 1683224259, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2890657859,\"monitor_id\":null,\"org_id\":321813,\"start\":1683224259,\"end\":1683227859,\"canceled\":null,\"created\":1683224259,\"modified\":1683224259,\"message\":\"Test-Schedule_a_downtime_until_date-1683224259\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1685038659},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":0,\"status\":\"active\",\"monitor_tags\":[\"tag0\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"canceled\"],\"notify_end_states\":[\"alert\"],\"uuid\":\"f441cca8-eaa7-11ed-8c83-da7ad0900002\",\"scope\":[\"*\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2890657859", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Schedule a downtime until date", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2022-07-12T22:07:46.126Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1657667266, + "message": "Test-Schedule_a_downtime_with_invalid_type_hours-1657663666", + "monitor_tags": [ + "tag0" + ], + "recurrence": { + "period": 1, + "type": "hours" + }, + "scope": [ + "*" + ], + "start": 1657663666, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Invalid recurrence type\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Schedule a downtime with invalid type hours", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2022-07-12T22:07:46.506Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1657667266, + "message": "Test-Schedule_a_downtime_with_invalid_weekdays-1657663666", + "monitor_tags": [ + "tag0" + ], + "recurrence": { + "period": 1, + "type": "weeks", + "week_days": [ + "mon", + "tue" + ] + }, + "scope": [ + "*" + ], + "start": 1657663666, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Invalid set of days in week_days. Be sure that the first letter is capitalized.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Schedule a downtime with invalid weekdays", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2022-07-12T22:07:46.899Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1657667266, + "message": "Test-Schedule_a_downtime_with_mutually_exclusive_until_occurrences_and_until_date_properties-1657663666", + "monitor_tags": [ + "tag0" + ], + "recurrence": { + "period": 1, + "type": "weeks", + "until_date": 1659478066, + "until_occurrences": 3, + "week_days": [ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri" + ] + }, + "scope": [ + "*" + ], + "start": 1657663666, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"You must provide only provide one of (until_occurrences, until_date)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Schedule a downtime with mutually exclusive until occurrences and until date properties", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2022-07-12T22:07:47.296Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1657667267, + "message": "Test-Schedule_a_downtime_with_until_occurrences-1657663667", + "monitor_tags": [ + "tag0" + ], + "recurrence": { + "period": 1, + "type": "weeks", + "until_occurrences": 3, + "week_days": [ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri" + ] + }, + "scope": [ + "*" + ], + "start": 1657663667, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"recurrence\":{\"until_date\":null,\"until_occurrences\":3,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"type\":\"weeks\",\"period\":1},\"end\":1657667267,\"monitor_tags\":[\"tag0\"],\"child_id\":null,\"canceled\":null,\"monitor_id\":null,\"mute_first_recovery_notification\":false,\"created\":1657663667,\"org_id\":321813,\"modified\":1657663667,\"disabled\":false,\"start\":1657663667,\"creator_id\":1445416,\"parent_id\":null,\"timezone\":\"Etc/UTC\",\"active\":true,\"scope\":[\"*\"],\"message\":\"Test-Schedule_a_downtime_with_until_occurrences-1657663667\",\"downtime_type\":0,\"id\":2082107712,\"updater_id\":null}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2082107712", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Schedule a downtime with until occurrences", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2024-10-10T16:44:49.394Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Schedule_a_monitor_downtime_returns_OK_response-1728578689", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testscheduleamonitordowntimereturnsokresponse1728578689", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":155845546,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Schedule_a_monitor_downtime_returns_OK_response-1728578689\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testscheduleamonitordowntimereturnsokresponse1728578689\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1728578689000,\"created\":\"2024-10-10T16:44:49.674472+00:00\",\"modified\":\"2024-10-10T16:44:49.674472+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":3,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "message": "Test-Schedule_a_monitor_downtime_returns_OK_response-1728578689", + "monitor_id": 155845546, + "scope": [ + "test:testscheduleamonitordowntimereturnsokresponse1728578689" + ], + "start": 1728578689, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":4432145271,\"monitor_id\":155845546,\"org_id\":321813,\"start\":1728578689,\"end\":null,\"canceled\":null,\"created\":1728578689,\"modified\":1728578689,\"message\":\"Test-Schedule_a_monitor_downtime_returns_OK_response-1728578689\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"dd3ff47a-1de6-45eb-9993-a1fd7e8e537c\",\"scope\":[\"test:testscheduleamonitordowntimereturnsokresponse1728578689\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/4432145271", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/155845546", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":155845546}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Schedule a monitor downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-22T14:37:14.692Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1684769834, + "message": "Test-Update_a_downtime_returns_OK_response-1684766234", + "recurrence": { + "period": 1, + "type": "weeks", + "until_date": 1686580634, + "week_days": [ + "Mon", + "Tue", + "Wed", + "Thu", + "Fri" + ] + }, + "scope": [ + "test:testupdateadowntimereturnsokresponse1684766234" + ], + "start": 1684766234, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2941982639,\"monitor_id\":null,\"org_id\":321813,\"start\":1684766234,\"end\":1684769834,\"canceled\":null,\"created\":1684766235,\"modified\":1684766235,\"message\":\"Test-Update_a_downtime_returns_OK_response-1684766234\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1686580634},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":null,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":\"25399c6e-f8ae-11ed-b261-da7ad0900002\",\"scope\":[\"test:testupdateadowntimereturnsokresponse1684766234\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "message": "Test-Update_a_downtime_returns_OK_response-1684766234-updated", + "mute_first_recovery_notification": true, + "notify_end_states": [ + "alert", + "no data", + "warn" + ], + "notify_end_types": [ + "canceled", + "expired" + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/downtime/2941982639", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2941982639,\"monitor_id\":null,\"org_id\":321813,\"start\":1684766234,\"end\":1684769834,\"canceled\":null,\"created\":1684766235,\"modified\":1684766235,\"message\":\"Test-Update_a_downtime_returns_OK_response-1684766234-updated\",\"active\":true,\"disabled\":false,\"recurrence\":{\"type\":\"weeks\",\"period\":1,\"week_days\":[\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\"],\"until_occurrences\":null,\"until_date\":1686580634},\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":1445416,\"updater_id\":1445416,\"downtime_type\":2,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"canceled\",\"expired\"],\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"uuid\":null,\"scope\":[\"test:testupdateadowntimereturnsokresponse1684766234\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2941982639", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a downtime returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/events.json b/test-server-data/v1/events.json new file mode 100644 index 0000000000..4b1bbabb3b --- /dev/null +++ b/test-server-data/v1/events.json @@ -0,0 +1,119 @@ +{ + "feature": "Events", + "recordings": [ + { + "feature": "Events", + "frozen_at": "2022-01-06T00:50:51.738Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "date_happened": 1, + "tags": [ + "test:TestPostaneventinthepastreturnsBadRequestresponse1641430251" + ], + "text": "A text message.", + "title": "Test-Post_an_event_in_the_past_returns_Bad_Request_response-1641430251" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/events", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Event too far in the past\"]}" + }, + "headers": { + "content-type": "text/plain; charset=utf-8" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Post an event in the past returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Events", + "frozen_at": "2022-01-06T00:50:51.866Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "tags": [ + "test:TestPostaneventreturnsOKresponse1641430251" + ], + "text": "A text message.", + "title": "Test-Post_an_event_returns_OK_response-1641430251" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/events", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"ok\",\"event\":{\"id\":6327818702635911000,\"id_str\":\"6327818702635911562\",\"title\":\"Test-Post_an_event_returns_OK_response-1641430251\",\"text\":\"A text message.\",\"date_happened\":1641430251,\"handle\":null,\"priority\":null,\"related_event_id\":null,\"tags\":[\"test:TestPostaneventreturnsOKresponse1641430251\"],\"url\":\"https://app.datadoghq.com/event/event?id=6327818702635911562\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Post an event returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Events", + "frozen_at": "2022-01-06T00:50:51.994Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "tags": [ + "test:TestPostaneventwithalongtitlereturnsOKresponse1641430251" + ], + "text": "A text message.", + "title": "Test-Post_an_event_with_a_long_title_returns_OK_response-1641430251 very very very looooooooong looooooooooooong loooooooooooooooooooooong looooooooooooooooooooooooooong title with 100+ characters" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/events", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"ok\",\"event\":{\"id\":6327818704671040000,\"id_str\":\"6327818704671039975\",\"title\":\"Test-Post_an_event_with_a_long_title_returns_OK_response-1641430251 very very very looooooooong looooooooooooong loooooooooooooooooooooong looooooooooooooooooooooooooong title with 100+ characters\",\"text\":\"A text message.\",\"date_happened\":1641430252,\"handle\":null,\"priority\":null,\"related_event_id\":null,\"tags\":[\"test:TestPostaneventwithalongtitlereturnsOKresponse1641430251\"],\"url\":\"https://app.datadoghq.com/event/event?id=6327818704671039975\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Post an event with a long title returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/gcp-integration.json b/test-server-data/v1/gcp-integration.json new file mode 100644 index 0000000000..889405c916 --- /dev/null +++ b/test-server-data/v1/gcp-integration.json @@ -0,0 +1,445 @@ +{ + "feature": "GCP Integration", + "recordings": [ + { + "feature": "GCP Integration", + "frozen_at": "2024-10-07T20:24:57.651Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "client_email": "f28619c1be385271@example.com", + "client_id": "172833269717283326970", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", + "cloud_run_revision_filters": [ + "dr:dre" + ], + "host_filters": "key:value,filter:example", + "is_cspm_enabled": true, + "is_resource_change_collection_enabled": true, + "is_security_command_center_enabled": true, + "private_key": "private_key", + "private_key_id": "123456789abcdefghi123456789abcdefghijklm", + "project_id": "datadog-apitest", + "resource_collection_enabled": true, + "token_uri": "https://accounts.google.com/o/oauth2/token", + "type": "service_account" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "client_email": "f28619c1be385271@example.com", + "client_id": "172833269717283326970", + "project_id": "datadog-apitest" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a GCP integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-10-07T20:30:09.400Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "client_email": "8c747ddd32fcd610@example.com", + "client_id": "172833300917283330090", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", + "host_filters": "key:value,filter:example", + "is_cspm_enabled": true, + "is_resource_change_collection_enabled": true, + "is_security_command_center_enabled": true, + "private_key": "private_key", + "private_key_id": "123456789abcdefghi123456789abcdefghijklm", + "project_id": "datadog-apitest", + "resource_collection_enabled": true, + "token_uri": "https://accounts.google.com/o/oauth2/token", + "type": "service_account" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "client_email": "8c747ddd32fcd610@example.com", + "client_id": "172833300917283330090", + "project_id": "datadog-apitest" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "client_email": "8c747ddd32fcd610@example.com", + "client_id": "172833300917283330090", + "project_id": "datadog-apitest" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Delete a GCP integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "GCP Integration", + "frozen_at": "2023-12-20T13:44:06.411Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "[{\"project_id\":\"\",\"client_email\":\"00981e1c3e8e97a1@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"02c9828017e15aa5@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"097c90af04124b05@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"0f08d4423223120b@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"1085f36962d101c9@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"10e47d352952f506@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"11f4e1b9c5ec0832@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"14a023b819befe53@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"1662faf86d58e1b7@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"18bae0a9a8846c9e@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"1c5b52e7576334d2@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"1e4805f564fa2ac9@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"1fad1b27edb5bcf2@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"208ee5ed66d71133@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"219d10ddeed283a3@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"23a5556b778915be@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"24e9015e320313f8@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"277a44a2d4070df0@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"28dcbaecc6090d7e@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"2b826cc0d80181ba@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"2e67a657a5e9e7c0@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"2e9d423e7aa1f482@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"2fa0809e16b17119@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"3084fcf0ee31eb0c@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"363b41762d905e45@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"3731304188d2cf16@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"3da4c7006b369ab8@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"3ecc38b6941b8636@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"4480243013d4e5f2@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"46fe7f297cbf4352@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"4d16a20f9531ae34@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"4f72cf81bddbbdce@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"4f9c2129311f67c8@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"4fd2c5373c504d3d@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"54e6214d4e37c221@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"558219f266cb5661@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"567f48bf35496e63@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"59fd6255ff318598@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"5f67543f83a9f8fe@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"5fcbbd9fd2b05a98@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"6287c3a6f90577f5@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"6310e1f5179a6f81@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"7468db1f938c7a5b@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"792047232a0ee446@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"79fd7f289d3e203c@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"7e829bef04cabf05@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"7f0d1446a2b36412@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"800d8f61bc1b1f11@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"80c76870b798470e@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"856a341306f76135@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"85eec49aa13601a0@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"86fffdf0a2f9c120@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"8b77145ab254af0e@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"900221429a54e8c9@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"9090d908de5494b0@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"9152c07ea52b6ebf@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"92357e402dc93e16@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"936c176ea8d149f5@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"96942532bb1c698b@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"977541a023419b38@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"9822a7b951c1749b@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"99d25eaedaa0b964@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"9af8703db57f8adc@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"9b15d9c0b38905fc@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"9c20e39790e74a9a@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"a2920570daa112f1@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"a75bd581627e2019@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"a8045bf0668414a0@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"a8c4c1d81bd7f901@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"a8cd678d02a877ef@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"a951ac716618bc39@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"aaf327e22d3addd3@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"ac1de3dc0c8bd5db@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"ad33d7633503bf99@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"ad427d0e856cbbd6@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"b10d6276ad2a39ce@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"b15d65667f94645a@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"b1faa95226c9e32f@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"b402406faf436ec7@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"b425753d70134965@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"b5c318c34c295312@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"b79dded205ad0ca0@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"b9e7fdcb3de4199e@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"c5758874111f033d@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"c5bb8a766c0da9b1@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"c65984c4759a8081@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"c765735adb6c4448@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"cb871a85cdddf23d@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"cc34eb2339b0758e@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"cea03370bad43fa8@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"d2aee02f16a95eb6@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"d497d8ae666e8c67@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"d5545b6ffc57e4c1@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"d6fe27adfb2c76ef@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"daeaffdee8f68e43@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"dc167bde560cc8ec@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"dc51b5741de8e6ea@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"df3af5ae9cb794e2@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"e307c0141d0b0056@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"e518c87ea9f81132@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"e541c487131dcfac@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"e86657afbbcc662e@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"eab76a9567596ffc@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"edbc8f8058581958@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"ededfe06c277b8b4@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"f4a3cca553ea085e@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"f938e794b0925958@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"fb67d7b98cd68c2d@example.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"fbde34a142d42679@test-project.iam.gserviceaccount.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"\",\"client_email\":\"service-account@iam-service-google.com\",\"host_filters\":\"\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"tf-TestAccDatadogIntegrationGCP-local-1699099608\",\"client_email\":\"tf-TestAccDatadogIntegrationGCP-local-1699099608@awesome-project-id.iam.gserviceaccount.com\",\"host_filters\":\"foo:bar,buzz:lightyear\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"tf-TestAccDatadogIntegrationGCP-local-1699101380\",\"client_email\":\"tf-TestAccDatadogIntegrationGCP-local-1699101380@awesome-project-id.iam.gserviceaccount.com\",\"host_filters\":\"foo:bar,buzz:lightyear\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"tf-TestAccDatadogIntegrationGCP-local-1699101466\",\"client_email\":\"tf-TestAccDatadogIntegrationGCP-local-1699101466@awesome-project-id.iam.gserviceaccount.com\",\"host_filters\":\"foo:bar,buzz:lightyear\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"tf-TestAccDatadogIntegrationGCP-local-1699143227\",\"client_email\":\"tf-TestAccDatadogIntegrationGCP-local-1699143227@awesome-project-id.iam.gserviceaccount.com\",\"host_filters\":\"foo:bar,buzz:lightyear\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"tf-TestAccDatadogIntegrationGCP-local-1699144985\",\"client_email\":\"tf-TestAccDatadogIntegrationGCP-local-1699144985@awesome-project-id.iam.gserviceaccount.com\",\"host_filters\":\"foo:bar,buzz:lightyear\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"tf-TestAccDatadogIntegrationGCP-local-1699145097\",\"client_email\":\"tf-TestAccDatadogIntegrationGCP-local-1699145097@awesome-project-id.iam.gserviceaccount.com\",\"host_filters\":\"foo:bar,buzz:lightyear\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"tf-TestAccDatadogIntegrationGCP-local-1699186355\",\"client_email\":\"tf-TestAccDatadogIntegrationGCP-local-1699186355@awesome-project-id.iam.gserviceaccount.com\",\"host_filters\":\"foo:bar,buzz:lightyear\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"tf-TestAccDatadogIntegrationGCP-local-1699187247\",\"client_email\":\"tf-TestAccDatadogIntegrationGCP-local-1699187247@awesome-project-id.iam.gserviceaccount.com\",\"host_filters\":\"foo:bar,buzz:lightyear\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]},{\"project_id\":\"tf-TestAccDatadogIntegrationGCP-local-1699187275\",\"client_email\":\"tf-TestAccDatadogIntegrationGCP-local-1699187275@awesome-project-id.iam.gserviceaccount.com\",\"host_filters\":\"foo:bar,buzz:lightyear\",\"automute\":false,\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"errors\":[]}]\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all GCP integrations returns \"OK\" response", + "version": "v1" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-10-07T20:30:10.415Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "client_email": "0a9b348679053531@example.com", + "client_id": "172833301017283330100", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", + "host_filters": "key:value,filter:example", + "is_cspm_enabled": true, + "is_resource_change_collection_enabled": true, + "is_security_command_center_enabled": true, + "private_key": "private_key", + "private_key_id": "123456789abcdefghi123456789abcdefghijklm", + "project_id": "datadog-apitest", + "resource_collection_enabled": true, + "token_uri": "https://accounts.google.com/o/oauth2/token", + "type": "service_account" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "client_email": "0a9b348679053531@example.com", + "client_id": "172833301017283330100", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", + "cloud_run_revision_filters": [ + "merp:derp" + ], + "host_filters": "key:value,filter:example", + "is_cspm_enabled": true, + "is_resource_change_collection_enabled": true, + "is_security_command_center_enabled": true, + "private_key": "private_key", + "private_key_id": "123456789abcdefghi123456789abcdefghijklm", + "project_id": "datadog-apitest", + "resource_collection_enabled": true, + "token_uri": "https://accounts.google.com/o/oauth2/token", + "type": "service_account" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "client_email": "0a9b348679053531@example.com", + "client_id": "172833301017283330100", + "project_id": "datadog-apitest" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a GCP integration cloud run revision filters returns \"OK\" response", + "version": "v1" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-10-07T20:30:11.373Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "client_email": "b4b2a84c6669b5d4@example.com", + "client_id": "172833301117283330110", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", + "host_filters": "key:value,filter:example", + "is_cspm_enabled": true, + "is_resource_change_collection_enabled": true, + "is_security_command_center_enabled": true, + "private_key": "private_key", + "private_key_id": "123456789abcdefghi123456789abcdefghijklm", + "project_id": "datadog-apitest", + "resource_collection_enabled": true, + "token_uri": "https://accounts.google.com/o/oauth2/token", + "type": "service_account" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "client_email": "b4b2a84c6669b5d4@example.com", + "client_id": "172833301117283330110", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/$CLIENT_EMAIL", + "host_filters": "key:value,filter:example", + "is_cspm_enabled": true, + "is_resource_change_collection_enabled": true, + "is_security_command_center_enabled": true, + "private_key": "private_key", + "private_key_id": "123456789abcdefghi123456789abcdefghijklm", + "project_id": "datadog-apitest", + "resource_collection_enabled": true, + "token_uri": "https://accounts.google.com/o/oauth2/token", + "type": "service_account" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "client_email": "b4b2a84c6669b5d4@example.com", + "client_id": "172833301117283330110", + "project_id": "datadog-apitest" + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v1/integration/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a GCP integration returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/hosts.json b/test-server-data/v1/hosts.json new file mode 100644 index 0000000000..14d8fcc424 --- /dev/null +++ b/test-server-data/v1/hosts.json @@ -0,0 +1,79 @@ +{ + "feature": "Hosts", + "recordings": [ + { + "feature": "Hosts", + "frozen_at": "2022-01-11T13:57:49.824Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/hosts", + "query": [ + [ + "include_hosts_metadata", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"exact_total_matching\":true,\"total_returned\":1,\"host_list\":[{\"last_reported_time\":1640288946,\"name\":\"vagrant\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"host:vagrant\"]},\"up\":true,\"metrics\":{\"load\":0.031666666,\"iowait\":0.0434962,\"cpu\":0.6632819},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"vagrant\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"pythonV\":\"3.8.11\",\"macV\":[\"\",\"\",\"\"],\"cpuCores\":1,\"agent_flavor\":\"agent\",\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[null,null,null],\"machine\":\"amd64\",\"install_method\":{\"tool\":\"install_script\",\"installer_version\":\"install_script-1.7.1\",\"tool_version\":\"install_script\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"8192 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"1\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2711.998\\\",\\\"model\\\":\\\"142\\\",\\\"model_name\\\":\\\"Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz\\\",\\\"stepping\\\":\\\"10\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"3966892\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"udev\\\"},{\\\"kb_size\\\":\\\"797396\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"64800356\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/mapper/vagrant--vg-root\\\"},{\\\"kb_size\\\":\\\"3986968\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"3986968\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"488245288\\\",\\\"mounted_on\\\":\\\"/vagrant\\\",\\\"name\\\":\\\"/vagrant\\\"},{\\\"kb_size\\\":\\\"797392\\\",\\\"mounted_on\\\":\\\"/run/user/1000\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"1003516kB\\\",\\\"total\\\":\\\"7973940kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.2.15\\\",\\\"ipv4-network\\\":\\\"10.0.2.0/24\\\",\\\"ipv6\\\":\\\"fe80::a00:27ff:fec2:be11\\\",\\\"ipv6-network\\\":\\\"fe80::/64\\\",\\\"macaddress\\\":\\\"08:00:27:c2:be:11\\\",\\\"name\\\":\\\"eth0\\\"},{\\\"ipv4\\\":\\\"192.168.122.1\\\",\\\"ipv4-network\\\":\\\"192.168.122.0/24\\\",\\\"macaddress\\\":\\\"52:54:00:6f:1c:bf\\\",\\\"name\\\":\\\"virbr0\\\"}],\\\"ipaddress\\\":\\\"10.0.2.15\\\",\\\"ipaddressv6\\\":\\\"fe80::a00:27ff:fec2:be11\\\",\\\"macaddress\\\":\\\"08:00:27:c2:be:11\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"vagrant\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-29-generic\\\",\\\"kernel_version\\\":\\\"#31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.15rc1\\\"}}\",\"network\":null,\"logs_agent\":{\"transport\":\"\"},\"host_id\":1036078308,\"agent_version\":\"7.32.3\",\"processor\":\"Intel(R) Core(TM) i7-8559U CPU @ 2.70GHz\",\"socket-fqdn\":\"vagrant.vm.\",\"agent_checks\":[[\"ntp\",\"ntp\",\"ntp:d884b5186b651429\",\"OK\",\"\",\"\"]]},\"host_name\":\"vagrant\",\"id\":1036078308,\"aliases\":[\"vagrant\"]}],\"total_matching\":1}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all hosts with metadata deserializes successfully", + "version": "v1" + }, + { + "feature": "Hosts", + "frozen_at": "2022-01-11T13:45:52.883Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/hosts", + "query": [ + [ + "include_hosts_metadata", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"exact_total_matching\":true,\"total_returned\":41,\"host_list\":[{\"last_reported_time\":1641906477,\"name\":\"control-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"agent\",\"ntp\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.4\",\"bosh_az:us-central1-a\",\"bosh_deployment:cf-58f7c74c619c33d63485\",\"bosh_id:1984d49c-04b6-470c-a770-218e716c027e\",\"bosh_index:0\",\"bosh_ip:10.0.40.4\",\"bosh_job:control\",\"bosh_name:control\",\"cf-58f7c74c619c33d63485\",\"cf-58f7c74c619c33d63485-control\",\"cloudfoundry\",\"control\",\"created_at:2021-12-16t02:44:39z\",\"deployment:cf-58f7c74c619c33d63485\",\"director:p-bosh\",\"id:1984d49c-04b6-470c-a770-218e716c027e\",\"index:0\",\"index:1984d49c-04b6-470c-a770-218e716c027e\",\"instance-id:1676922833778186514\",\"instance-type:custom-4-16384\",\"instance_group:control\",\"internal-hostname:vm-52009774-7863-4c6a-5a13-51cfdd1609cf.c.datadog-integrations-lab.internal\",\"ip:10.0.40.4\",\"job:control\",\"name:control/1984d49c-04b6-470c-a770-218e716c027e\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-cf-58f7c74c619c33d63485\",\"p-bosh-cf-58f7c74c619c33d63485-control\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-52009774-7863-4c6a-5a13-51cfdd1609cf_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:control-0\"]},\"up\":true,\"metrics\":{\"load\":0.32003334,\"iowait\":0.079276726,\"cpu\":29.41709},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"e4a8a521-2d74-4c03-9980-bca34bdee413\",\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"cpuCores\":1,\"agent_checks\":[[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:cc_uploader:3d0678a999833fc0\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-syslog-binding-cache:537aa574e5e28491\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:log-cache-gateway:13c09b3739262153\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:reverse_log_proxy_gateway:e3885cefc03bf408\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bbs:64dbd323e48fcaf4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:uaa:5aa254682e603228\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:auctioneer:87697cbe3dbdfd44\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:ccng_monit_http_healthcheck:d88a3600db2ba759\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:cloud_controller_ng:24632bd497253aa9\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:statsd_injector:7379fca29fe3a4ff\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:route_registrar:c92935beabfd476c\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-udp-forwarder:830b62ee1bfd88a3\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-agent:87c0340b0df2f04\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:cloud_controller_clock:c8672a23d35e7cd4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:log-cache-cf-auth-proxy:7943ecf77b9a79e\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-syslog-agent:6308a74718cdb30\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:file_server:deedc3d04c4cb5bd\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggregator_agent:e70c7141fe641fd4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:service-discovery-controller:e543394ee449c99c\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:tps_watcher:4fc274ad3daedfe2\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:cc_deployment_updater:480dc6fd3a2bc04b\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:cloud_controller_worker_local_1:8aabe8cbcba89058\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metric_registrar_log_worker:92eda95c3f060e8d\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:reverse_log_proxy:868098ec0db42a59\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:locket:3b88945d4fb7dd5b\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-system-metric-scraper:2ed7e2886f6053c0\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:cloud_controller_worker_1:3084bb618408430f\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:policy-server-internal:f4fbef8344963995\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metric_registrar_orchestrator:b2723a5cf003fb60\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:cloud_controller_worker_local_2:1308451a6cd30c7e\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:routing-api:d5400ef919ea406\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:policy-server:39205d55df6fd807\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:ssh_proxy:96d831050c719d90\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:nginx_cc:c851861b3b7dac00\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggregator_trafficcontroller:f293fcdbeb39ae4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:log-cache-nozzle:8417a7dfc876e5c9\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-system-metrics-forwarder:dec520770c84eb74\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-discovery-registrar:2499640bb2b8b315\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:log-cache:d1c6af5f1bd3f240\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:leadership-election:ef70b8234e7c6fb8\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:prom_scraper:728ea58b02a2d668\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-forwarder-agent:dfd03904f3c38951\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metric_registrar_endpoint_worker:9199a3a6ad069794\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:silk-controller:44ee7f9fe3bf2d15\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:credhub:6566835bbed7c86e\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:doppler:4f1a37333ded2c21\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"]],\"platform\":\"linux\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"34.121.144.12\"},\"agent_flavor\":\"agent\",\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"pythonV\":\"3.8.11\",\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.4\\\",\\\"ipv4-network\\\":\\\"10.0.40.4/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:04\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.4\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:04\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"e4a8a521-2d74-4c03-9980-bca34bdee413\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"host_id\":1588212437,\"agent_version\":\"7.32.4\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"logs_agent\":{\"transport\":\"\"}},\"host_name\":\"control-0\",\"id\":1588212437,\"aliases\":[\"vm-52009774-7863-4c6a-5a13-51cfdd1609cf.datadog-integrations-lab\",\"vm-52009774-7863-4c6a-5a13-51cfdd1609cf.c.datadog-integrations-lab.internal\",\"control-0\",\"1984d49c-04b6-470c-a770-218e716c027e\"]},{\"last_reported_time\":1641908074,\"name\":\"3be59ad0-f9bc-4c6c-60ec-2e44\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:14aa46da-2357-40d9-988d-2c6f3660680d\",\"application_name:hello-datadog-cf-ruby-test\",\"cf_instance_ip:10.0.40.5\",\"instance_index:0\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-test.apps.integrations-lab.devenv.dog\",\"host:3be59ad0-f9bc-4c6c-60ec-2e44\"]},\"up\":true,\"metrics\":{\"load\":0.26465,\"iowait\":0.11494715,\"cpu\":14.255855},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"3be59ad0-f9bc-4c6c-60ec-2e44\",\"macV\":[\"\",\"\",\"\"],\"cpuCores\":1,\"pythonV\":\"n/a\",\"logs_agent\":{\"transport\":\"\"},\"agent_checks\":[[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:b4579e02d1981c12\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"]],\"platform\":\"linux\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"agent_flavor\":\"iot_agent\",\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1048576\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"3be59ad0-f9bc-4c6c-60ec-2e44\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"host_id\":6306937692,\"fbsdV\":[\"\",\"\",\"\"],\"agent_version\":\"7.32.2\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"3be59ad0-f9bc-4c6c-60ec-2e44\",\"network\":null},\"host_name\":\"3be59ad0-f9bc-4c6c-60ec-2e44\",\"id\":6306937692,\"aliases\":[\"3be59ad0-f9bc-4c6c-60ec-2e44\"]},{\"last_reported_time\":1641908071,\"name\":\"compute-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"network\",\"cloudfoundry\",\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.5\",\"bosh_az:us-central1-a\",\"bosh_deployment:cf-58f7c74c619c33d63485\",\"bosh_id:0b7e0c80-c2a0-449c-9bf0-d8b886607fc3\",\"bosh_index:0\",\"bosh_ip:10.0.40.5\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-58f7c74c619c33d63485\",\"cf-58f7c74c619c33d63485-compute\",\"cloudfoundry\",\"compute\",\"created_at:2021-12-16t02:57:44z\",\"deployment:cf-58f7c74c619c33d63485\",\"director:p-bosh\",\"id:0b7e0c80-c2a0-449c-9bf0-d8b886607fc3\",\"index:0\",\"index:0b7e0c80-c2a0-449c-9bf0-d8b886607fc3\",\"instance-id:6741335140059256318\",\"instance-type:custom-4-16384\",\"instance_group:compute\",\"internal-hostname:vm-aef6415e-c7dd-489c-6ba8-be35dbec92df.c.datadog-integrations-lab.internal\",\"ip:10.0.40.5\",\"job:compute\",\"name:compute/0b7e0c80-c2a0-449c-9bf0-d8b886607fc3\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-cf-58f7c74c619c33d63485\",\"p-bosh-cf-58f7c74c619c33d63485-compute\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-aef6415e-c7dd-489c-6ba8-be35dbec92df_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:compute-0\"]},\"up\":true,\"metrics\":{\"load\":0.28273648,\"iowait\":0.09214352,\"cpu\":14.062636},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"db5182f4-724a-4fcc-b552-ca274d09c566\",\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"pythonV\":\"3.8.11\",\"platform\":\"linux\",\"agent_checks\":[[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:route_emitter:28b85ccdd7bcca89\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:silk-daemon:42bd0967a0a2a419\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-adapter:2aad5dbd684d67e1\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-discovery-registrar:2499640bb2b8b315\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggregator_agent:e70c7141fe641fd4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:prom_scraper:728ea58b02a2d668\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:garden:5103b5aa45b0a808\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-agent:87c0340b0df2f04\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:netmon:5a4d96913933a354\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:rep:72fcf04e2248dc5e\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:nfsv3driver:d35677bcfeaf03b7\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-forwarder-agent:dfd03904f3c38951\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:smbdriver:db0efad94879b577\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:vxlan-policy-agent:9a79744e56be760b\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-syslog-agent:6308a74718cdb30\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:iptables-logger:53134b433f0040ba\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"]],\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"100178588\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/grootfs/store/unprivileged\\\",\\\"name\\\":\\\"/dev/loop0\\\"},{\\\"kb_size\\\":\\\"100178588\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/grootfs/store/privileged\\\",\\\"name\\\":\\\"/dev/loop1\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/rep/shared/garden/instance_identity\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:09\\\",\\\"name\\\":\\\"s-010255178009\\\"},{\\\"ipv4\\\":\\\"10.0.40.5\\\",\\\"ipv4-network\\\":\\\"10.0.40.5/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:05\\\",\\\"name\\\":\\\"eth0\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:0a\\\",\\\"name\\\":\\\"s-010255178010\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:0b\\\",\\\"name\\\":\\\"s-010255178011\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:0d\\\",\\\"name\\\":\\\"s-010255178013\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:0e\\\",\\\"name\\\":\\\"s-010255178014\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:0f\\\",\\\"name\\\":\\\"s-010255178015\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:10\\\",\\\"name\\\":\\\"s-010255178016\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:11\\\",\\\"name\\\":\\\"s-010255178017\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:12\\\",\\\"name\\\":\\\"s-010255178018\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:13\\\",\\\"name\\\":\\\"s-010255178019\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:14\\\",\\\"name\\\":\\\"s-010255178020\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:15\\\",\\\"name\\\":\\\"s-010255178021\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:16\\\",\\\"name\\\":\\\"s-010255178022\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:17\\\",\\\"name\\\":\\\"s-010255178023\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:18\\\",\\\"name\\\":\\\"s-010255178024\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:19\\\",\\\"name\\\":\\\"s-010255178025\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:1a\\\",\\\"name\\\":\\\"s-010255178026\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:1b\\\",\\\"name\\\":\\\"s-010255178027\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:1d\\\",\\\"name\\\":\\\"s-010255178029\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:1e\\\",\\\"name\\\":\\\"s-010255178030\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:20\\\",\\\"name\\\":\\\"s-010255178032\\\"},{\\\"ipv4\\\":\\\"10.255.178.0\\\",\\\"ipv4-network\\\":\\\"10.255.0.0/16\\\",\\\"macaddress\\\":\\\"ee:ee:0a:ff:b2:00\\\",\\\"name\\\":\\\"silk-vtep\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:04\\\",\\\"name\\\":\\\"s-010255178004\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:05\\\",\\\"name\\\":\\\"s-010255178005\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:06\\\",\\\"name\\\":\\\"s-010255178006\\\"}],\\\"ipaddress\\\":\\\"169.254.0.1\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:b2:09\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"db5182f4-724a-4fcc-b552-ca274d09c566\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"34.134.81.43\"},\"agent_flavor\":\"agent\",\"host_id\":1885388434,\"agent_version\":\"7.32.4\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"logs_agent\":{\"transport\":\"\"}},\"host_name\":\"compute-0\",\"id\":1885388434,\"aliases\":[\"vm-aef6415e-c7dd-489c-6ba8-be35dbec92df.datadog-integrations-lab\",\"vm-aef6415e-c7dd-489c-6ba8-be35dbec92df.c.datadog-integrations-lab.internal\",\"compute-0\",\"0b7e0c80-c2a0-449c-9bf0-d8b886607fc3\"]},{\"last_reported_time\":1641906445,\"name\":\"00d23ea2-2de3-4017-68cd-9244\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:14aa46da-2357-40d9-988d-2c6f3660680d\",\"application_name:hello-datadog-cf-ruby-test\",\"cf_instance_ip:10.0.40.5\",\"instance_index:1\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-test.apps.integrations-lab.devenv.dog\",\"host:00d23ea2-2de3-4017-68cd-9244\"]},\"up\":true,\"metrics\":{\"load\":0.22518334,\"iowait\":0.12053162,\"cpu\":13.935913},\"sources\":[\"agent\"],\"meta\":{\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"agent_checks\":[[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:b4579e02d1981c12\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"]],\"logs_agent\":{\"transport\":\"\"},\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"agent_version\":\"7.32.2\",\"machine\":\"amd64\",\"platform\":\"linux\",\"agent_flavor\":\"iot_agent\",\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1048576\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"00d23ea2-2de3-4017-68cd-9244\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"host_id\":6306937090,\"fbsdV\":[\"\",\"\",\"\"],\"pythonV\":\"n/a\",\"socket-hostname\":\"00d23ea2-2de3-4017-68cd-9244\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"00d23ea2-2de3-4017-68cd-9244\",\"network\":null},\"host_name\":\"00d23ea2-2de3-4017-68cd-9244\",\"id\":6306937090,\"aliases\":[\"00d23ea2-2de3-4017-68cd-9244\"]},{\"last_reported_time\":1641906487,\"name\":\"pks-db-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"agent\",\"ntp\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.20\",\"bosh_az:us-central1-a\",\"bosh_deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"bosh_id:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"bosh_index:0\",\"bosh_ip:10.0.40.20\",\"bosh_job:pks-db\",\"bosh_name:pks-db\",\"cloudfoundry\",\"created_at:2021-02-04t11:51:58z\",\"deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"director:p-bosh\",\"id:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"index:0\",\"index:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"instance-id:3455194630398042407\",\"instance-type:custom-2-8192\",\"instance_group:pks-db\",\"internal-hostname:vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873.c.datadog-integrations-lab.internal\",\"ip:10.0.40.20\",\"job:pks-db\",\"name:pks-db/bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac-pks-db\",\"pcf-vms\",\"pivotal-container-service-2db99f13c503d2c4afac\",\"pivotal-container-service-2db99f13c503d2c4afac-pks-db\",\"pks-db\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:pks-db-0\"]},\"up\":true,\"metrics\":{\"load\":0.1393,\"iowait\":0.2804128,\"cpu\":13.608116},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"0739b63a-96d0-4afa-b8a6-a6e1e05c65e2\",\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"cpuCores\":1,\"pythonV\":\"3.8.11\",\"agent_checks\":[[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:proxy:463c705e43d0fe75\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:galera-agent:7d61834d95e8a9f\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:cluster-health-logger:510a88480112002f\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:gra-log-purger:8327c97cdd4831de\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:galera-init:a00f33c5b6290c8f\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"]],\"agent_flavor\":\"agent\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"2\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2200.000\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"4069080\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"4084040\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"4084040\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"4084040\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"58028260\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"10188088\\\",\\\"mounted_on\\\":\\\"/var/vcap/store\\\",\\\"name\\\":\\\"/dev/sdb1\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"8168080kB\\\",\\\"total\\\":\\\"8168084kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.20\\\",\\\"ipv4-network\\\":\\\"10.0.40.20/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:14\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.20\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:14\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"0739b63a-96d0-4afa-b8a6-a6e1e05c65e2\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"104.155.174.157\"},\"fbsdV\":[\"\",\"\",\"\"],\"platform\":\"linux\",\"host_id\":4154624049,\"logs_agent\":{\"transport\":\"\"},\"macV\":[\"\",\"\",\"\"],\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"agent_version\":\"7.32.2\"},\"host_name\":\"pks-db-0\",\"id\":4154624049,\"aliases\":[\"vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873.datadog-integrations-lab\",\"vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873.c.datadog-integrations-lab.internal\",\"pks-db-0\",\"bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\"]},{\"last_reported_time\":1641907073,\"name\":\"9905e5cf-024c-4eb5-7246-39c0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\",\"ntp\"],\"tags_by_source\":{\"Datadog\":[\"application_id:14aa46da-2357-40d9-988d-2c6f3660680d\",\"application_name:hello-datadog-cf-ruby-test\",\"cf_instance_ip:10.0.40.5\",\"instance_index:2\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-test.apps.integrations-lab.devenv.dog\",\"host:9905e5cf-024c-4eb5-7246-39c0\"]},\"up\":true,\"metrics\":{\"load\":0.20908333,\"iowait\":0.15201081,\"cpu\":13.586387},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"9905e5cf-024c-4eb5-7246-39c0\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"network\":null,\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"agent_version\":\"7.32.2\",\"machine\":\"amd64\",\"platform\":\"linux\",\"socket-fqdn\":\"9905e5cf-024c-4eb5-7246-39c0\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1048576\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"9905e5cf-024c-4eb5-7246-39c0\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"logs_agent\":{\"transport\":\"\"},\"host_id\":6306938945,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"agent_flavor\":\"iot_agent\",\"agent_checks\":[[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:b4579e02d1981c12\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"]]},\"host_name\":\"9905e5cf-024c-4eb5-7246-39c0\",\"id\":6306938945,\"aliases\":[\"9905e5cf-024c-4eb5-7246-39c0\"]},{\"last_reported_time\":1641907128,\"name\":\"55472e59-1622-4edb-5612-8a22\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\",\"ntp\"],\"tags_by_source\":{\"Datadog\":[\"application_id:c7186718-9fb1-4a0a-9818-e2b29781ed60\",\"application_name:test-stdout\",\"cf_instance_ip:10.0.40.5\",\"instance_index:0\",\"space_name:system\",\"test_apm_billing\",\"uri:test-stdout.apps.integrations-lab.devenv.dog\",\"host:55472e59-1622-4edb-5612-8a22\"]},\"up\":true,\"metrics\":{\"load\":0.25035,\"iowait\":0.0972689,\"cpu\":13.13656},\"sources\":[\"agent\"],\"meta\":{\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"macV\":[\"\",\"\",\"\"],\"logs_agent\":{\"transport\":\"HTTP\"},\"cpuCores\":1,\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"agent_version\":\"7.27.0\",\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"55472e59-1622-4edb-5612-8a22\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"agent_flavor\":\"iot_agent\",\"host_id\":6306942373,\"pythonV\":\"n/a\",\"socket-hostname\":\"55472e59-1622-4edb-5612-8a22\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"55472e59-1622-4edb-5612-8a22\",\"agent_checks\":[[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:b4579e02d1981c12\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"]]},\"host_name\":\"55472e59-1622-4edb-5612-8a22\",\"id\":6306942373,\"aliases\":[\"55472e59-1622-4edb-5612-8a22\"]},{\"last_reported_time\":1641908079,\"name\":\"master-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"etcd\",\"kube_scheduler\",\"ntp\",\"agent\",\"kube_apiserver\",\"kube_controller_manager\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:4626db8f-c3cb-4bbe-bd00-3465525631b8.master.services.service-instance-f6138a1a-496f-4e66-8424-2de713841a51.bosh\",\"bosh_az:us-central1-a\",\"bosh_deployment:service-instance_f6138a1a-496f-4e66-8424-2de713841a51\",\"bosh_id:4626db8f-c3cb-4bbe-bd00-3465525631b8\",\"bosh_index:0\",\"bosh_ip:10.0.40.130\",\"bosh_job:master\",\"bosh_name:master\",\"cloudfoundry\",\"created_at:2021-02-08t11:45:31z\",\"deployment:service-instance_f6138a1a-496f-4e66-8424-2de713841a51\",\"director:p-bosh\",\"id:4626db8f-c3cb-4bbe-bd00-3465525631b8\",\"index:0\",\"index:4626db8f-c3cb-4bbe-bd00-3465525631b8\",\"instance-id:7548018590529395371\",\"instance-type:custom-2-4096\",\"instance_group:master\",\"internal-hostname:vm-5e19d58a-a4b6-45f1-7041-c82bba0635f6.c.datadog-integrations-lab.internal\",\"ip:10.0.40.130\",\"job:master\",\"master\",\"name:master/4626db8f-c3cb-4bbe-bd00-3465525631b8\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-service-instance-f6138a1a-496f-4e66-8424-2de713841a51\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"service-instance-f6138a1a-496f-4e66-8424-2de713841a51\",\"service-instance-f6138a1a-496f-4e66-8424-2de713841a51-master\",\"user_data:_server_:_name_:_vm-5e19d58a-a4b6-45f1-7041-c82bba0635f6_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:master-0\"]},\"up\":true,\"metrics\":{\"load\":0.14919999,\"iowait\":0.24663304,\"cpu\":13.076977},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"a388684f-2f94-4cda-9a28-8852a35d3a20\",\"macV\":[\"\",\"\",\"\"],\"pythonV\":\"3.8.11\",\"cpuCores\":1,\"agent_flavor\":\"agent\",\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"2\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2200.000\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"2004700\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"2019660\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2019660\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2019660\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"29064176\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"10188088\\\",\\\"mounted_on\\\":\\\"/var/vcap/store\\\",\\\"name\\\":\\\"/dev/sdb1\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"4039320kB\\\",\\\"total\\\":\\\"4039324kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.130\\\",\\\"ipv4-network\\\":\\\"10.0.40.130/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:82\\\",\\\"name\\\":\\\"eth0\\\"},{\\\"ipv4\\\":\\\"10.200.95.0\\\",\\\"ipv4-network\\\":\\\"10.200.95.0/32\\\",\\\"macaddress\\\":\\\"5a:74:a8:9d:52:cf\\\",\\\"name\\\":\\\"flannel.1\\\"}],\\\"ipaddress\\\":\\\"10.0.40.130\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:82\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"a388684f-2f94-4cda-9a28-8852a35d3a20\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"platform\":\"linux\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"35.184.114.75\"},\"host_id\":3735337047,\"logs_agent\":{\"transport\":\"\"},\"agent_checks\":[[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"etcd\",\"etcd\",\"etcd:8817cef03662b9a7\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:kube-controller-manager:2f59ca6cec654503\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:kube-scheduler:62183cf888b1af0e\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:kube-apiserver:68590183bc555d88\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:etcd:82804e4f8ddf95cb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:flanneld:a7df16b1b11344ab\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:blackbox:a853635f1d25c9f2\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"kube_scheduler\",\"kube_scheduler\",\"kube_scheduler:fcf7e29c2a938f61\",\"OK\",\"\",\"\"],[\"kube_controller_manager\",\"kube_controller_manager\",\"kube_controller_manager:4e92a44f44f751da\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"kube_apiserver_metrics\",\"kube_apiserver_metrics\",\"kube_apiserver_metrics:6a8a51818374f367\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"]],\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"agent_version\":\"7.32.2\"},\"host_name\":\"master-0\",\"id\":3735337047,\"aliases\":[\"vm-5e19d58a-a4b6-45f1-7041-c82bba0635f6.datadog-integrations-lab\",\"vm-5e19d58a-a4b6-45f1-7041-c82bba0635f6.c.datadog-integrations-lab.internal\",\"master-0\",\"4626db8f-c3cb-4bbe-bd00-3465525631b8\"]},{\"last_reported_time\":1641908079,\"name\":\"compute-1\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"network\",\"cloudfoundry\",\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.11\",\"bosh_az:us-central1-b\",\"bosh_deployment:cf-58f7c74c619c33d63485\",\"bosh_id:e7910b19-d01d-411b-9e4a-8e4dcdd74bfd\",\"bosh_index:1\",\"bosh_ip:10.0.40.11\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-58f7c74c619c33d63485\",\"cf-58f7c74c619c33d63485-compute\",\"cloudfoundry\",\"compute\",\"created_at:2021-12-16t03:04:03z\",\"deployment:cf-58f7c74c619c33d63485\",\"director:p-bosh\",\"id:e7910b19-d01d-411b-9e4a-8e4dcdd74bfd\",\"index:1\",\"index:e7910b19-d01d-411b-9e4a-8e4dcdd74bfd\",\"instance-id:2118155544334635619\",\"instance-type:custom-4-16384\",\"instance_group:compute\",\"internal-hostname:vm-c63c98cd-c697-45db-5fa0-1141302eb447.c.datadog-integrations-lab.internal\",\"ip:10.0.40.11\",\"job:compute\",\"name:compute/e7910b19-d01d-411b-9e4a-8e4dcdd74bfd\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-cf-58f7c74c619c33d63485\",\"p-bosh-cf-58f7c74c619c33d63485-compute\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-c63c98cd-c697-45db-5fa0-1141302eb447_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-b\",\"host:compute-1\"]},\"up\":true,\"metrics\":{\"load\":0.055883333,\"iowait\":0.06967267,\"cpu\":5.8552155},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"0d658567-f4ca-4b9e-b350-dbf55d0fa228\",\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"cpuCores\":1,\"agent_checks\":[[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:prom_scraper:728ea58b02a2d668\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:rep:72fcf04e2248dc5e\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-agent:87c0340b0df2f04\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-discovery-registrar:2499640bb2b8b315\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-forwarder-agent:dfd03904f3c38951\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:nfsv3driver:d35677bcfeaf03b7\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:silk-daemon:42bd0967a0a2a419\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:netmon:5a4d96913933a354\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-syslog-agent:6308a74718cdb30\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:vxlan-policy-agent:9a79744e56be760b\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:smbdriver:db0efad94879b577\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-adapter:2aad5dbd684d67e1\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:route_emitter:28b85ccdd7bcca89\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggregator_agent:e70c7141fe641fd4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:garden:5103b5aa45b0a808\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:iptables-logger:53134b433f0040ba\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"]],\"platform\":\"linux\",\"logs_agent\":{\"transport\":\"\"},\"agent_flavor\":\"agent\",\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"46080 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2299.998\\\",\\\"model\\\":\\\"63\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.30GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"100178588\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/grootfs/store/unprivileged\\\",\\\"name\\\":\\\"/dev/loop0\\\"},{\\\"kb_size\\\":\\\"100178588\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/grootfs/store/privileged\\\",\\\"name\\\":\\\"/dev/loop1\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/rep/shared/garden/instance_identity\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.255.84.0\\\",\\\"ipv4-network\\\":\\\"10.255.0.0/16\\\",\\\"macaddress\\\":\\\"ee:ee:0a:ff:54:00\\\",\\\"name\\\":\\\"silk-vtep\\\"},{\\\"ipv4\\\":\\\"10.0.40.11\\\",\\\"ipv4-network\\\":\\\"10.0.40.11/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:0b\\\",\\\"name\\\":\\\"eth0\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:54:04\\\",\\\"name\\\":\\\"s-010255084004\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:54:05\\\",\\\"name\\\":\\\"s-010255084005\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:54:06\\\",\\\"name\\\":\\\"s-010255084006\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:54:07\\\",\\\"name\\\":\\\"s-010255084007\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:54:08\\\",\\\"name\\\":\\\"s-010255084008\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:54:0a\\\",\\\"name\\\":\\\"s-010255084010\\\"},{\\\"ipv4\\\":\\\"169.254.0.1\\\",\\\"ipv4-network\\\":\\\"169.254.0.1/32\\\",\\\"macaddress\\\":\\\"aa:aa:0a:ff:54:0b\\\",\\\"name\\\":\\\"s-010255084011\\\"}],\\\"ipaddress\\\":\\\"10.255.84.0\\\",\\\"macaddress\\\":\\\"ee:ee:0a:ff:54:00\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"0d658567-f4ca-4b9e-b350-dbf55d0fa228\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"35.225.89.123\"},\"host_id\":1885402268,\"pythonV\":\"3.8.11\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.30GHz\",\"socket-fqdn\":\"localhost\",\"agent_version\":\"7.32.4\"},\"host_name\":\"compute-1\",\"id\":1885402268,\"aliases\":[\"vm-c63c98cd-c697-45db-5fa0-1141302eb447.datadog-integrations-lab\",\"vm-c63c98cd-c697-45db-5fa0-1141302eb447.c.datadog-integrations-lab.internal\",\"e7910b19-d01d-411b-9e4a-8e4dcdd74bfd\",\"compute-1\"]},{\"last_reported_time\":1641907704,\"name\":\"database-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.2\",\"bosh_az:us-central1-a\",\"bosh_deployment:cf-58f7c74c619c33d63485\",\"bosh_id:13661a2d-4556-41a1-9b18-b2d6f6f59e40\",\"bosh_index:0\",\"bosh_ip:10.0.40.2\",\"bosh_job:database\",\"bosh_name:database\",\"cf-58f7c74c619c33d63485\",\"cf-58f7c74c619c33d63485-database\",\"cloudfoundry\",\"created_at:2021-12-16t02:35:05z\",\"database\",\"deployment:cf-58f7c74c619c33d63485\",\"director:p-bosh\",\"id:13661a2d-4556-41a1-9b18-b2d6f6f59e40\",\"index:0\",\"index:13661a2d-4556-41a1-9b18-b2d6f6f59e40\",\"instance-id:737885842904128301\",\"instance-type:custom-2-8192\",\"instance_group:database\",\"internal-hostname:vm-4741858b-f6a5-4146-5a1f-3b8a9146b47e.c.datadog-integrations-lab.internal\",\"ip:10.0.40.2\",\"job:database\",\"name:database/13661a2d-4556-41a1-9b18-b2d6f6f59e40\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-cf-58f7c74c619c33d63485\",\"p-bosh-cf-58f7c74c619c33d63485-database\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-4741858b-f6a5-4146-5a1f-3b8a9146b47e_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:database-0\"]},\"up\":true,\"metrics\":{\"load\":0.048833333,\"iowait\":0.15970942,\"cpu\":3.2675683},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"11c941b7-d46d-4e77-bfc4-7e13e707a9cf\",\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"logs_agent\":{\"transport\":\"\"},\"agent_flavor\":\"agent\",\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"agent_version\":\"7.32.4\",\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"2\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"4069080\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"4084040\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"4084040\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"4084040\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"58028260\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"103079200\\\",\\\"mounted_on\\\":\\\"/var/vcap/store\\\",\\\"name\\\":\\\"/dev/sdb1\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"8168080kB\\\",\\\"total\\\":\\\"8168084kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.2\\\",\\\"ipv4-network\\\":\\\"10.0.40.2/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:02\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.2\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:02\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"11c941b7-d46d-4e77-bfc4-7e13e707a9cf\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"34.70.177.99\"},\"host_id\":1588196000,\"pythonV\":\"3.8.11\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"agent_checks\":[[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:proxy:463c705e43d0fe75\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-syslog-agent:6308a74718cdb30\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-agent:87c0340b0df2f04\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggregator_agent:e70c7141fe641fd4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:mysql-metrics:ec498f37251e0309\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:nats:460b88e3034138c1\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-discovery-registrar:2499640bb2b8b315\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:cluster-health-logger:510a88480112002f\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:mysql-diag-agent:b530874fb34025b1\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-forwarder-agent:dfd03904f3c38951\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:nats-tls:9a1f3bfcae8fb7d\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:gra-log-purger:8327c97cdd4831de\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:route_registrar:c92935beabfd476c\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:galera-init:a00f33c5b6290c8f\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:galera-agent:7d61834d95e8a9f\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:prom_scraper:728ea58b02a2d668\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"]]},\"host_name\":\"database-0\",\"id\":1588196000,\"aliases\":[\"vm-4741858b-f6a5-4146-5a1f-3b8a9146b47e.datadog-integrations-lab\",\"vm-4741858b-f6a5-4146-5a1f-3b8a9146b47e.c.datadog-integrations-lab.internal\",\"database-0\",\"13661a2d-4556-41a1-9b18-b2d6f6f59e40\"]},{\"last_reported_time\":1641906712,\"name\":\"pivotal-container-service-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.21\",\"bosh_az:us-central1-a\",\"bosh_deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"bosh_id:0dd74035-0251-4aa6-8546-4d42e738f904\",\"bosh_index:0\",\"bosh_ip:10.0.40.21\",\"bosh_job:pivotal-container-service\",\"bosh_name:pivotal-container-service\",\"cloudfoundry\",\"created_at:2021-02-04t13:58:20z\",\"deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"director:p-bosh\",\"id:0dd74035-0251-4aa6-8546-4d42e738f904\",\"index:0\",\"index:0dd74035-0251-4aa6-8546-4d42e738f904\",\"instance-id:1407569049339446148\",\"instance-type:custom-2-8192\",\"instance_group:pivotal-container-service\",\"internal-hostname:vm-094c6015-d72a-485d-6cad-1ba6dfaa2884.c.datadog-integrations-lab.internal\",\"ip:10.0.40.21\",\"job:pivotal-container-service\",\"name:pivotal-container-service/0dd74035-0251-4aa6-8546-4d42e738f904\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac-pivotal\",\"pcf-vms\",\"pivotal-container-service\",\"pivotal-container-service-2db99f13c503d2c4afac\",\"pivotal-container-service-2db99f13c503d2c4afac-pivotal-contai\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-094c6015-d72a-485d-6cad-1ba6dfaa2884_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:pivotal-container-service-0\"]},\"up\":true,\"metrics\":{\"load\":0.031466667,\"iowait\":0.10300331,\"cpu\":2.9478202},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"8ddc0c80-afff-4424-bb70-64984a5590af\",\"macV\":[\"\",\"\",\"\"],\"cpuCores\":1,\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"agent_checks\":[[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:telemetry-server:a92123b45f99574e\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:uaa:5aa254682e603228\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:broker:31b416ab3601f73e\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:pks-api:de142d1421dafe94\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:vrli-fluentd:73f5d0ab0d7a262f\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"]],\"agent_flavor\":\"agent\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"agent_version\":\"7.32.2\",\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"2\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2200.000\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"4069080\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"4084040\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"4084040\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"4084040\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"58028260\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"10188088\\\",\\\"mounted_on\\\":\\\"/var/vcap/store\\\",\\\"name\\\":\\\"/dev/sdb1\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"8168080kB\\\",\\\"total\\\":\\\"8168084kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.21\\\",\\\"ipv4-network\\\":\\\"10.0.40.21/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:15\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.21\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:15\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"8ddc0c80-afff-4424-bb70-64984a5590af\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"logs_agent\":{\"transport\":\"\"},\"host_id\":3735172582,\"pythonV\":\"3.8.11\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"35.232.17.52\"}},\"host_name\":\"pivotal-container-service-0\",\"id\":3735172582,\"aliases\":[\"vm-094c6015-d72a-485d-6cad-1ba6dfaa2884.datadog-integrations-lab\",\"vm-094c6015-d72a-485d-6cad-1ba6dfaa2884.c.datadog-integrations-lab.internal\",\"pivotal-container-service-0\",\"0dd74035-0251-4aa6-8546-4d42e738f904\"]},{\"last_reported_time\":1641907470,\"name\":\"backup-restore-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"agent\",\"ntp\"],\"tags_by_source\":{\"Datadog\":[\"backup-restore\",\"bosh_address:10.0.40.6\",\"bosh_az:us-central1-a\",\"bosh_deployment:cf-58f7c74c619c33d63485\",\"bosh_id:382f3056-20a5-460a-9044-45390453d4b8\",\"bosh_index:0\",\"bosh_ip:10.0.40.6\",\"bosh_job:backup_restore\",\"bosh_name:backup_restore\",\"cf-58f7c74c619c33d63485\",\"cf-58f7c74c619c33d63485-backup-restore\",\"cloudfoundry\",\"created_at:2021-12-16t03:08:03z\",\"deployment:cf-58f7c74c619c33d63485\",\"director:p-bosh\",\"id:382f3056-20a5-460a-9044-45390453d4b8\",\"index:0\",\"index:382f3056-20a5-460a-9044-45390453d4b8\",\"instance-id:5684640517998449555\",\"instance-type:custom-1-1024\",\"instance_group:backup_restore\",\"internal-hostname:vm-256fbd16-5ef5-4c12-674a-79dbb208c829.c.datadog-integrations-lab.internal\",\"ip:10.0.40.6\",\"job:backup_restore\",\"name:backup_restore/382f3056-20a5-460a-9044-45390453d4b8\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-cf-58f7c74c619c33d63485\",\"p-bosh-cf-58f7c74c619c33d63485-backup-restore\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-256fbd16-5ef5-4c12-674a-79dbb208c829_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:backup-restore-0\"]},\"up\":true,\"metrics\":{\"load\":0.0032666666,\"iowait\":0.28001064,\"cpu\":2.5573363},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"61334b56-01c8-4b54-991b-8e43fa80b4f8\",\"macV\":[\"\",\"\",\"\"],\"logs_agent\":{\"transport\":\"\"},\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"34.68.184.121\"},\"cpuCores\":1,\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"agent_version\":\"7.32.4\",\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"1\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"489480\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"7276144\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"206291640\\\",\\\"mounted_on\\\":\\\"/var/vcap/store\\\",\\\"name\\\":\\\"/dev/sdb1\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"1008876kB\\\",\\\"total\\\":\\\"1008880kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.6\\\",\\\"ipv4-network\\\":\\\"10.0.40.6/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:06\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.6\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:06\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"61334b56-01c8-4b54-991b-8e43fa80b4f8\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"agent_flavor\":\"agent\",\"host_id\":1885408165,\"pythonV\":\"3.8.11\",\"winV\":[\"\",\"\",\"\"],\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"agent_checks\":[[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-forwarder-agent:dfd03904f3c38951\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-syslog-agent:6308a74718cdb30\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:prom_scraper:728ea58b02a2d668\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-discovery-registrar:2499640bb2b8b315\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggregator_agent:e70c7141fe641fd4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-agent:87c0340b0df2f04\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"]]},\"host_name\":\"backup-restore-0\",\"id\":1885408165,\"aliases\":[\"vm-256fbd16-5ef5-4c12-674a-79dbb208c829.datadog-integrations-lab\",\"vm-256fbd16-5ef5-4c12-674a-79dbb208c829.c.datadog-integrations-lab.internal\",\"backup-restore-0\",\"382f3056-20a5-460a-9044-45390453d4b8\"]},{\"last_reported_time\":1641906718,\"name\":\"blobstore-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"blobstore\",\"bosh_address:10.0.40.3\",\"bosh_az:us-central1-a\",\"bosh_deployment:cf-58f7c74c619c33d63485\",\"bosh_id:10cc8fea-3e39-4537-91a1-4b0d6abb626a\",\"bosh_index:0\",\"bosh_ip:10.0.40.3\",\"bosh_job:blobstore\",\"bosh_name:blobstore\",\"cf-58f7c74c619c33d63485\",\"cf-58f7c74c619c33d63485-blobstore\",\"cloudfoundry\",\"created_at:2021-12-16t02:39:36z\",\"deployment:cf-58f7c74c619c33d63485\",\"director:p-bosh\",\"id:10cc8fea-3e39-4537-91a1-4b0d6abb626a\",\"index:0\",\"index:10cc8fea-3e39-4537-91a1-4b0d6abb626a\",\"instance-id:5283912973995677757\",\"instance-type:custom-2-4096\",\"instance_group:blobstore\",\"internal-hostname:vm-1f66600c-00ff-4849-41cf-ea7f834080f7.c.datadog-integrations-lab.internal\",\"ip:10.0.40.3\",\"job:blobstore\",\"name:blobstore/10cc8fea-3e39-4537-91a1-4b0d6abb626a\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-cf-58f7c74c619c33d63485\",\"p-bosh-cf-58f7c74c619c33d63485-blobstore\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-1f66600c-00ff-4849-41cf-ea7f834080f7_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:blobstore-0\"]},\"up\":true,\"metrics\":{\"load\":0.0737,\"iowait\":0.115527004,\"cpu\":2.5147898},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"8e08fd47-ec68-414e-860d-1aca02cf68fd\",\"macV\":[\"\",\"\",\"\"],\"cpuCores\":1,\"logs_agent\":{\"transport\":\"\"},\"platform\":\"linux\",\"agent_checks\":[[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-forwarder-agent:dfd03904f3c38951\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-discovery-registrar:2499640bb2b8b315\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:route_registrar:c92935beabfd476c\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:blobstore_nginx:5016f2ab5273512a\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:blobstore_url_signer:26fe8c418da745dc\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:prom_scraper:728ea58b02a2d668\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-syslog-agent:6308a74718cdb30\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-agent:87c0340b0df2f04\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggregator_agent:e70c7141fe641fd4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"]],\"agent_flavor\":\"agent\",\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"pythonV\":\"3.8.11\",\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"2\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"2004696\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"2019656\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2019656\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2019656\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"4293664\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"103079200\\\",\\\"mounted_on\\\":\\\"/var/vcap/store\\\",\\\"name\\\":\\\"/dev/sdb1\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"4039312kB\\\",\\\"total\\\":\\\"4039316kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.3\\\",\\\"ipv4-network\\\":\\\"10.0.40.3/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:03\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.3\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:03\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"8e08fd47-ec68-414e-860d-1aca02cf68fd\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"host_id\":1588200517,\"agent_version\":\"7.32.4\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"35.225.64.86\"}},\"host_name\":\"blobstore-0\",\"id\":1588200517,\"aliases\":[\"vm-1f66600c-00ff-4849-41cf-ea7f834080f7.datadog-integrations-lab\",\"vm-1f66600c-00ff-4849-41cf-ea7f834080f7.c.datadog-integrations-lab.internal\",\"blobstore-0\",\"10cc8fea-3e39-4537-91a1-4b0d6abb626a\"]},{\"last_reported_time\":1641908072,\"name\":\"mysql-monitor-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.8\",\"bosh_az:us-central1-a\",\"bosh_deployment:cf-58f7c74c619c33d63485\",\"bosh_id:d584a232-8129-40f9-b50a-0aecb3ee5600\",\"bosh_index:0\",\"bosh_ip:10.0.40.8\",\"bosh_job:mysql_monitor\",\"bosh_name:mysql_monitor\",\"cf-58f7c74c619c33d63485\",\"cf-58f7c74c619c33d63485-mysql-monitor\",\"cloudfoundry\",\"created_at:2021-12-16t03:14:34z\",\"deployment:cf-58f7c74c619c33d63485\",\"director:p-bosh\",\"id:d584a232-8129-40f9-b50a-0aecb3ee5600\",\"index:0\",\"index:d584a232-8129-40f9-b50a-0aecb3ee5600\",\"instance-id:982254273567330795\",\"instance-type:custom-1-1024\",\"instance_group:mysql_monitor\",\"internal-hostname:vm-339a8035-cd97-417e-72de-f28ef188bfcf.c.datadog-integrations-lab.internal\",\"ip:10.0.40.8\",\"job:mysql_monitor\",\"mysql-monitor\",\"name:mysql_monitor/d584a232-8129-40f9-b50a-0aecb3ee5600\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-cf-58f7c74c619c33d63485\",\"p-bosh-cf-58f7c74c619c33d63485-mysql-monitor\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-339a8035-cd97-417e-72de-f28ef188bfcf_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:mysql-monitor-0\"]},\"up\":true,\"metrics\":{\"load\":0,\"iowait\":0.3918568,\"cpu\":2.2060554},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"9a206887-e2ba-4ae4-8170-0d7adc9f9d73\",\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"cpuCores\":1,\"agent_checks\":[[\"process\",\"process\",\"process:prom_scraper:728ea58b02a2d668\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggregator_agent:e70c7141fe641fd4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:replication-canary:40f25da0d1ff8818\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-syslog-agent:6308a74718cdb30\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-agent:87c0340b0df2f04\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-forwarder-agent:dfd03904f3c38951\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-discovery-registrar:2499640bb2b8b315\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"]],\"logs_agent\":{\"transport\":\"\"},\"agent_flavor\":\"agent\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"1\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"489480\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"7276144\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"1008876kB\\\",\\\"total\\\":\\\"1008880kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.8\\\",\\\"ipv4-network\\\":\\\"10.0.40.8/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:08\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.8\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:08\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"9a206887-e2ba-4ae4-8170-0d7adc9f9d73\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"34.122.249.40\"},\"host_id\":1885420676,\"pythonV\":\"3.8.11\",\"macV\":[\"\",\"\",\"\"],\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"agent_version\":\"7.32.4\"},\"host_name\":\"mysql-monitor-0\",\"id\":1885420676,\"aliases\":[\"vm-339a8035-cd97-417e-72de-f28ef188bfcf.datadog-integrations-lab\",\"vm-339a8035-cd97-417e-72de-f28ef188bfcf.c.datadog-integrations-lab.internal\",\"mysql-monitor-0\",\"d584a232-8129-40f9-b50a-0aecb3ee5600\"]},{\"last_reported_time\":1641907263,\"name\":\"router-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"agent\",\"ntp\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.7\",\"bosh_az:us-central1-a\",\"bosh_deployment:cf-58f7c74c619c33d63485\",\"bosh_id:48777395-f525-4d18-806f-87208386460c\",\"bosh_index:0\",\"bosh_ip:10.0.40.7\",\"bosh_job:router\",\"bosh_name:router\",\"cf-58f7c74c619c33d63485\",\"cf-58f7c74c619c33d63485-router\",\"cloudfoundry\",\"created_at:2021-12-16t03:11:35z\",\"deployment:cf-58f7c74c619c33d63485\",\"director:p-bosh\",\"id:48777395-f525-4d18-806f-87208386460c\",\"index:0\",\"index:48777395-f525-4d18-806f-87208386460c\",\"instance-id:1202390331242778786\",\"instance-type:custom-2-2048\",\"instance_group:router\",\"internal-hostname:vm-b838faf6-4e30-49cc-4978-1602d8e701e9.c.datadog-integrations-lab.internal\",\"ip:10.0.40.7\",\"job:router\",\"name:router/48777395-f525-4d18-806f-87208386460c\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-cf-58f7c74c619c33d63485\",\"p-bosh-cf-58f7c74c619c33d63485-router\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"router\",\"user_data:_server_:_name_:_vm-b838faf6-4e30-49cc-4978-1602d8e701e9_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:router-0\"]},\"up\":true,\"metrics\":{\"load\":0.038933333,\"iowait\":0.097419195,\"cpu\":1.8743246},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"a2ba9e90-ee22-48b4-9fa7-b6934c207d4d\",\"macV\":[\"\",\"\",\"\"],\"pythonV\":\"3.8.11\",\"agent_checks\":[[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-agent:87c0340b0df2f04\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-forwarder-agent:dfd03904f3c38951\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-syslog-agent:6308a74718cdb30\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggregator_agent:e70c7141fe641fd4\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:gorouter:84800af52712818\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:metrics-discovery-registrar:2499640bb2b8b315\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:loggr-udp-forwarder:830b62ee1bfd88a3\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:prom_scraper:728ea58b02a2d668\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"]],\"cpuCores\":1,\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"agent_version\":\"7.32.4\",\"machine\":\"amd64\",\"platform\":\"linux\",\"socket-fqdn\":\"localhost\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"2\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1005484\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"1020444\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"1020444\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"1020444\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"6260040\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"2040888kB\\\",\\\"total\\\":\\\"2040892kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.7\\\",\\\"ipv4-network\\\":\\\"10.0.40.7/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:07\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.7\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:07\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"a2ba9e90-ee22-48b4-9fa7-b6934c207d4d\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"host_id\":1885414402,\"logs_agent\":{\"transport\":\"\"},\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"agent_flavor\":\"agent\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"104.154.225.52\"}},\"host_name\":\"router-0\",\"id\":1885414402,\"aliases\":[\"vm-b838faf6-4e30-49cc-4978-1602d8e701e9.datadog-integrations-lab\",\"vm-b838faf6-4e30-49cc-4978-1602d8e701e9.c.datadog-integrations-lab.internal\",\"router-0\",\"48777395-f525-4d18-806f-87208386460c\"]},{\"last_reported_time\":1641907937,\"name\":\"datadog-firehose-nozzle-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"ntp\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.10\",\"bosh_az:us-central1-a\",\"bosh_deployment:datadog-a7a9321940224f86c5e0\",\"bosh_id:7c485e5a-eee9-4586-a444-dd5acdbd408a\",\"bosh_index:0\",\"bosh_ip:10.0.40.10\",\"bosh_job:datadog-firehose-nozzle\",\"bosh_name:datadog-firehose-nozzle\",\"cloudfoundry\",\"created_at:2021-12-23t10:00:41z\",\"datadog-a7a9321940224f86c5e0\",\"datadog-a7a9321940224f86c5e0-datadog-firehose-nozzle\",\"datadog-firehose-nozzle\",\"deployment:datadog-a7a9321940224f86c5e0\",\"director:p-bosh\",\"id:7c485e5a-eee9-4586-a444-dd5acdbd408a\",\"index:0\",\"index:7c485e5a-eee9-4586-a444-dd5acdbd408a\",\"instance-id:654236089190053469\",\"instance-type:custom-1-1024\",\"instance_group:datadog-firehose-nozzle\",\"internal-hostname:vm-7af2f1a7-1902-4091-4681-f8e88ba52c66.c.datadog-integrations-lab.internal\",\"ip:10.0.40.10\",\"job:datadog-firehose-nozzle\",\"name:datadog-firehose-nozzle/7c485e5a-eee9-4586-a444-dd5acdbd408a\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-datadog-a7a9321940224f86c5e0\",\"p-bosh-datadog-a7a9321940224f86c5e0-datadog-firehose-nozzle\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-7af2f1a7-1902-4091-4681-f8e88ba52c66_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:datadog-firehose-nozzle-0\"]},\"up\":true,\"metrics\":{\"load\":0.0004,\"iowait\":0.27631813,\"cpu\":1.1650944},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"9aa34e82-00de-4aad-8f89-6fca4950693a\",\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"cpuCores\":1,\"agent_checks\":[[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:datadog-firehose-nozzle:577206d379c137c8\",\"WARNING\",[\"No matching process 'datadog-firehose-nozzle' was found\"],\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"]],\"platform\":\"linux\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"34.132.186.250\"},\"agent_flavor\":\"agent\",\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"pythonV\":\"3.8.11\",\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"1\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"489480\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"7276144\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"1008876kB\\\",\\\"total\\\":\\\"1008880kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.10\\\",\\\"ipv4-network\\\":\\\"10.0.40.10/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:0a\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.10\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:0a\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"9aa34e82-00de-4aad-8f89-6fca4950693a\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"host_id\":1558906327,\"logs_agent\":{\"transport\":\"\"},\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"agent_version\":\"7.32.4\"},\"host_name\":\"datadog-firehose-nozzle-0\",\"id\":1558906327,\"aliases\":[\"vm-7af2f1a7-1902-4091-4681-f8e88ba52c66.datadog-integrations-lab\",\"vm-7af2f1a7-1902-4091-4681-f8e88ba52c66.c.datadog-integrations-lab.internal\",\"datadog-firehose-nozzle-0\",\"7c485e5a-eee9-4586-a444-dd5acdbd408a\"]},{\"last_reported_time\":1641906463,\"name\":\"datadog-cluster-agent-0\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"cloudfoundry\",\"agent\",\"ntp\"],\"tags_by_source\":{\"Datadog\":[\"bosh_address:10.0.40.13\",\"bosh_az:us-central1-a\",\"bosh_deployment:datadog-a7a9321940224f86c5e0\",\"bosh_id:013b46b2-12f1-4d1d-b3a3-57d79f220197\",\"bosh_index:0\",\"bosh_ip:10.0.40.13\",\"bosh_job:datadog-cluster-agent\",\"bosh_name:datadog-cluster-agent\",\"cloudfoundry\",\"created_at:2021-12-23t10:00:41z\",\"datadog-a7a9321940224f86c5e0\",\"datadog-a7a9321940224f86c5e0-datadog-cluster-agent\",\"datadog-cluster-agent\",\"deployment:datadog-a7a9321940224f86c5e0\",\"director:p-bosh\",\"id:013b46b2-12f1-4d1d-b3a3-57d79f220197\",\"index:0\",\"index:013b46b2-12f1-4d1d-b3a3-57d79f220197\",\"instance-id:4147831164283516509\",\"instance-type:custom-1-1024\",\"instance_group:datadog-cluster-agent\",\"internal-hostname:vm-6eb749d6-425d-4e9a-5ea7-980fc8c0a9ee.c.datadog-integrations-lab.internal\",\"ip:10.0.40.13\",\"job:datadog-cluster-agent\",\"name:datadog-cluster-agent/013b46b2-12f1-4d1d-b3a3-57d79f220197\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-datadog-a7a9321940224f86c5e0\",\"p-bosh-datadog-a7a9321940224f86c5e0-datadog-cluster-agent\",\"pcf-vms\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-6eb749d6-425d-4e9a-5ea7-980fc8c0a9ee_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:datadog-cluster-agent-0\"]},\"up\":true,\"metrics\":{\"load\":0,\"iowait\":0.20022501,\"cpu\":0.6767538},\"sources\":[\"agent\"],\"meta\":{\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"macV\":[\"\",\"\",\"\"],\"pythonV\":\"3.8.11\",\"network\":{\"network-id\":\"projects/116803814856/networks/datadog-integrations-lab-us-central1\",\"public-ipv4\":\"35.223.48.16\"},\"cpuCores\":1,\"nixV\":[\"ubuntu\",\"16.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"platform\":\"linux\",\"socket-hostname\":\"4a05e6f2-e3f4-44d7-ae87-21181a367e30\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"1\\\",\\\"cpu_logical_processors\\\":\\\"1\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"489480\\\",\\\"mounted_on\\\":\\\"/dev\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/run\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"5120\\\",\\\"mounted_on\\\":\\\"/run/lock\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"504440\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2886304\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"/dev/sda1\\\"},{\\\"kb_size\\\":\\\"7276144\\\",\\\"mounted_on\\\":\\\"/var/vcap/data\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"1024\\\",\\\"mounted_on\\\":\\\"/var/vcap/data/sys/run\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"1008876kB\\\",\\\"total\\\":\\\"1008880kB\\\"},\\\"network\\\":{\\\"interfaces\\\":[{\\\"ipv4\\\":\\\"10.0.40.13\\\",\\\"ipv4-network\\\":\\\"10.0.40.13/32\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:0d\\\",\\\"name\\\":\\\"eth0\\\"}],\\\"ipaddress\\\":\\\"10.0.40.13\\\",\\\"macaddress\\\":\\\"42:01:0a:00:28:0d\\\"},\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"4a05e6f2-e3f4-44d7-ae87-21181a367e30\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"3.8.11\\\"}}\",\"agent_flavor\":\"agent\",\"host_id\":2525100650,\"agent_version\":\"7.32.4\",\"agent_checks\":[[\"disk\",\"disk\",\"disk:17d8571dea6d7adf\",\"OK\",\"\",\"\"],[\"load\",\"load\",\"load\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:system-metrics-agent:f96e75f57c4f9874\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-agent:9348d9bcc210f773\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:sshd:342db389f880a7cf\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns-healthcheck:43786f001c4a3099\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:bosh-dns:bb15cf7e4add3789\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:monit:ba1b4f0db0e68cdb\",\"OK\",\"\",\"\"],[\"process\",\"process\",\"process:datadog-cluster-agent:df40e8bdc7dc8a06\",\"WARNING\",[\"No matching process 'datadog-cluster-agent' was found\"],\"\"],[\"process\",\"process\",\"process:bosh-dns-resolvconf:557485c838539c37\",\"OK\",\"\",\"\"],[\"io\",\"io\",\"io\",\"OK\",\"\",\"\"],[\"uptime\",\"uptime\",\"uptime\",\"OK\",\"\",\"\"],[\"memory\",\"memory\",\"memory\",\"OK\",\"\",\"\"],[\"ntp\",\"ntp\",\"ntp:abc4dd01ed069179\",\"OK\",\"\",\"\"],[\"file_handle\",\"file_handle\",\"file_handle\",\"OK\",\"\",\"\"],[\"network\",\"network\",\"network:4568a8c8c4d5d3d5\",\"OK\",\"\",\"\"],[\"cpu\",\"cpu\",\"cpu\",\"OK\",\"\",\"\"]],\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"localhost\",\"logs_agent\":{\"transport\":\"\"}},\"host_name\":\"datadog-cluster-agent-0\",\"id\":2525100650,\"aliases\":[\"vm-6eb749d6-425d-4e9a-5ea7-980fc8c0a9ee.datadog-integrations-lab\",\"vm-6eb749d6-425d-4e9a-5ea7-980fc8c0a9ee.c.datadog-integrations-lab.internal\",\"datadog-cluster-agent-0\",\"013b46b2-12f1-4d1d-b3a3-57d79f220197\"]},{\"last_reported_time\":1641906719,\"name\":\"1bbe3f6f-138a-4df9-7106-d28b\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"trace\",\"page\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:9f43dcdd-9322-4555-ba67-02a9439fd925\",\"application_name:hello-datadog-cf-ruby-blue\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:1\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-blue.apps.integrations-lab.devenv.dog\",\"host:1bbe3f6f-138a-4df9-7106-d28b\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"1bbe3f6f-138a-4df9-7106-d28b\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"network\":null,\"agent_flavor\":\"iot_agent\",\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"1bbe3f6f-138a-4df9-7106-d28b\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"logs_agent\":{\"transport\":\"TCP\"},\"host_id\":6306940257,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"1bbe3f6f-138a-4df9-7106-d28b\",\"agent_version\":\"7.31.0\"},\"host_name\":\"1bbe3f6f-138a-4df9-7106-d28b\",\"id\":6306940257,\"aliases\":[\"1bbe3f6f-138a-4df9-7106-d28b\"]},{\"last_reported_time\":1641906332,\"name\":\"45d792c2-1da6-4719-7a44-aa3d\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:e6186b8d-1fa5-4907-89e3-bb035298cdc9\",\"application_name:hello-datadog-cf-ruby-pink\",\"cf_instance_ip:10.0.40.5\",\"instance_index:1\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-pink.apps.integrations-lab.devenv.dog\",\"host:45d792c2-1da6-4719-7a44-aa3d\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"45d792c2-1da6-4719-7a44-aa3d\",\"macV\":[\"\",\"\",\"\"],\"logs_agent\":{\"transport\":\"\"},\"network\":null,\"cpuCores\":1,\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1048576\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"45d792c2-1da6-4719-7a44-aa3d\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"agent_flavor\":\"dogstatsd\",\"host_id\":6306939018,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"45d792c2-1da6-4719-7a44-aa3d\",\"agent_version\":\"7.32.2\"},\"host_name\":\"45d792c2-1da6-4719-7a44-aa3d\",\"id\":6306939018,\"aliases\":[\"45d792c2-1da6-4719-7a44-aa3d\"]},{\"last_reported_time\":1641905937,\"name\":\"1dd5e5e9-e3e4-4baa-5205-26c5\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"page\",\"trace\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:dc22d0b9-d6a2-4389-84a6-76029121ebe4\",\"application_name:autodiscovery-http\",\"cf_instance_ip:10.0.40.11\",\"env:integrations-lab\",\"instance_index:2\",\"space_name:system\",\"uri:autodiscovery-http.apps.integrations-lab.devenv.dog\",\"host:1dd5e5e9-e3e4-4baa-5205-26c5\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"1dd5e5e9-e3e4-4baa-5205-26c5\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"pythonV\":\"n/a\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"logs_agent\":{\"transport\":\"HTTP\"},\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"46080 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2299.998\\\",\\\"model\\\":\\\"63\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.30GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"1dd5e5e9-e3e4-4baa-5205-26c5\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"agent_flavor\":\"iot_agent\",\"host_id\":6306993744,\"agent_version\":\"7.30.0\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.30GHz\",\"socket-fqdn\":\"1dd5e5e9-e3e4-4baa-5205-26c5\",\"network\":null},\"host_name\":\"1dd5e5e9-e3e4-4baa-5205-26c5\",\"id\":6306993744,\"aliases\":[\"1dd5e5e9-e3e4-4baa-5205-26c5\"]},{\"last_reported_time\":1641907582,\"name\":\"e4327c72-e8ff-4fcf-472d-fc37\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"trace\",\"page\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:a7bebd67-1991-4e9e-8d44-399acf2f13e8\",\"application_name:logs-backend-demo\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:1\",\"space_name:system\",\"uri:logs-backend-demo.apps.integrations-lab.devenv.dog\",\"host:e4327c72-e8ff-4fcf-472d-fc37\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"e4327c72-e8ff-4fcf-472d-fc37\",\"macV\":[\"\",\"\",\"\"],\"cpuCores\":1,\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"logs_agent\":{\"transport\":\"HTTP\"},\"agent_flavor\":\"iot_agent\",\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"e4327c72-e8ff-4fcf-472d-fc37\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"host_id\":6306942664,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"e4327c72-e8ff-4fcf-472d-fc37\",\"agent_version\":\"7.31.0\"},\"host_name\":\"e4327c72-e8ff-4fcf-472d-fc37\",\"id\":6306942664,\"aliases\":[\"e4327c72-e8ff-4fcf-472d-fc37\"]},{\"last_reported_time\":1641906718,\"name\":\"c463a2a9-9604-45a5-52bc-362d\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:06ed9382-26b8-42f3-9790-b0bf9f7c7fd9\",\"application_name:test-apm-service-4\",\"cf_instance_ip:10.0.40.11\",\"container_id:c463a2a9-9604-45a5-52bc-362d\",\"env:non-prod\",\"instance_index:0\",\"space_name:system\",\"test-apm-env\",\"uri:test-apm-service-4.apps.integrations-lab.devenv.dog\",\"host:c463a2a9-9604-45a5-52bc-362d\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"c463a2a9-9604-45a5-52bc-362d\",\"macV\":[\"\",\"\",\"\"],\"pythonV\":\"n/a\",\"network\":null,\"cpuCores\":1,\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"46080 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2299.998\\\",\\\"model\\\":\\\"63\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.30GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"c463a2a9-9604-45a5-52bc-362d\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"agent_flavor\":\"iot_agent\",\"host_id\":6306991190,\"logs_agent\":{\"transport\":\"HTTP\"},\"processor\":\"Intel(R) Xeon(R) CPU @ 2.30GHz\",\"socket-fqdn\":\"c463a2a9-9604-45a5-52bc-362d\",\"agent_version\":\"7.27.0\"},\"host_name\":\"c463a2a9-9604-45a5-52bc-362d\",\"id\":6306991190,\"aliases\":[\"c463a2a9-9604-45a5-52bc-362d\"]},{\"last_reported_time\":1641908071,\"name\":\"7a9c4beb-2317-4849-78c1-0404\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:4bdf4890-1237-4f3f-a564-5bdda65e80c9\",\"application_name:test-apm-service-3\",\"cf_instance_ip:10.0.40.11\",\"container_id:7a9c4beb-2317-4849-78c1-0404\",\"env:non-prod\",\"instance_index:1\",\"space_name:system\",\"test-apm-env\",\"uri:test-apm-service-3.apps.integrations-lab.devenv.dog\",\"host:7a9c4beb-2317-4849-78c1-0404\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"7a9c4beb-2317-4849-78c1-0404\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"cpuCores\":1,\"agent_flavor\":\"iot_agent\",\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"agent_version\":\"7.27.0\",\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"46080 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2299.998\\\",\\\"model\\\":\\\"63\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.30GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"7a9c4beb-2317-4849-78c1-0404\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"host_id\":6306991358,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.30GHz\",\"socket-fqdn\":\"7a9c4beb-2317-4849-78c1-0404\",\"logs_agent\":{\"transport\":\"HTTP\"}},\"host_name\":\"7a9c4beb-2317-4849-78c1-0404\",\"id\":6306991358,\"aliases\":[\"7a9c4beb-2317-4849-78c1-0404\"]},{\"last_reported_time\":1641908083,\"name\":\"c3cdc63f-2739-4bdd-7564-ed2e\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:4bdf4890-1237-4f3f-a564-5bdda65e80c9\",\"application_name:test-apm-service-3\",\"cf_instance_ip:10.0.40.5\",\"container_id:c3cdc63f-2739-4bdd-7564-ed2e\",\"env:non-prod\",\"instance_index:0\",\"space_name:system\",\"test-apm-env\",\"uri:test-apm-service-3.apps.integrations-lab.devenv.dog\",\"host:c3cdc63f-2739-4bdd-7564-ed2e\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"c3cdc63f-2739-4bdd-7564-ed2e\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"logs_agent\":{\"transport\":\"HTTP\"},\"network\":null,\"cpuCores\":1,\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"agent_flavor\":\"iot_agent\",\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"c3cdc63f-2739-4bdd-7564-ed2e\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"host_id\":6306990856,\"fbsdV\":[\"\",\"\",\"\"],\"pythonV\":\"n/a\",\"macV\":[\"\",\"\",\"\"],\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"c3cdc63f-2739-4bdd-7564-ed2e\",\"agent_version\":\"7.27.0\"},\"host_name\":\"c3cdc63f-2739-4bdd-7564-ed2e\",\"id\":6306990856,\"aliases\":[\"c3cdc63f-2739-4bdd-7564-ed2e\"]},{\"last_reported_time\":1641907938,\"name\":\"c1afee2e-adae-4c51-46d4-9051\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"trace\",\"page\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:a7bebd67-1991-4e9e-8d44-399acf2f13e8\",\"application_name:logs-backend-demo\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:0\",\"space_name:system\",\"uri:logs-backend-demo.apps.integrations-lab.devenv.dog\",\"host:c1afee2e-adae-4c51-46d4-9051\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"c1afee2e-adae-4c51-46d4-9051\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"macV\":[\"\",\"\",\"\"],\"logs_agent\":{\"transport\":\"HTTP\"},\"agent_flavor\":\"iot_agent\",\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"agent_version\":\"7.31.0\",\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"c1afee2e-adae-4c51-46d4-9051\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"host_id\":6306937347,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"c1afee2e-adae-4c51-46d4-9051\",\"cpuCores\":1},\"host_name\":\"c1afee2e-adae-4c51-46d4-9051\",\"id\":6306937347,\"aliases\":[\"c1afee2e-adae-4c51-46d4-9051\"]},{\"last_reported_time\":1641906340,\"name\":\"31794400-62ca-44e2-7ab2-0397\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:ead4c7fd-f21c-48b8-9f23-421f15a57cfc\",\"application_name:hello-datadog-cf-ruby-yellow\",\"cf_instance_ip:10.0.40.5\",\"instance_index:0\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-yellow.apps.integrations-lab.devenv.dog\",\"host:31794400-62ca-44e2-7ab2-0397\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"31794400-62ca-44e2-7ab2-0397\",\"macV\":[\"\",\"\",\"\"],\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"platform\":\"linux\",\"logs_agent\":{\"transport\":\"\"},\"cpuCores\":1,\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"network\":null,\"socket-fqdn\":\"31794400-62ca-44e2-7ab2-0397\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1048576\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"31794400-62ca-44e2-7ab2-0397\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"host_id\":6306942613,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"agent_flavor\":\"dogstatsd\",\"agent_version\":\"7.32.2\"},\"host_name\":\"31794400-62ca-44e2-7ab2-0397\",\"id\":6306942613,\"aliases\":[\"31794400-62ca-44e2-7ab2-0397\"]},{\"last_reported_time\":1641908082,\"name\":\"133dc113-0354-4a60-67d8-5cf6\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"page\",\"trace\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:41256269-671b-4d79-91d5-3bf848376425\",\"application_name:test-space-org-cc\",\"cf_instance_ip:10.0.40.11\",\"env:integrations-lab\",\"instance_index:2\",\"space_name:datadog-application-monitoring-space\",\"uri:test-space-org-cc.apps.integrations-lab.devenv.dog\",\"host:133dc113-0354-4a60-67d8-5cf6\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"133dc113-0354-4a60-67d8-5cf6\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"pythonV\":\"n/a\",\"macV\":[\"\",\"\",\"\"],\"network\":null,\"agent_flavor\":\"iot_agent\",\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"cpuCores\":1,\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"46080 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2299.998\\\",\\\"model\\\":\\\"63\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.30GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"133dc113-0354-4a60-67d8-5cf6\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"host_id\":6307044606,\"logs_agent\":{\"transport\":\"HTTP\"},\"processor\":\"Intel(R) Xeon(R) CPU @ 2.30GHz\",\"socket-fqdn\":\"133dc113-0354-4a60-67d8-5cf6\",\"agent_version\":\"7.30.0\"},\"host_name\":\"133dc113-0354-4a60-67d8-5cf6\",\"id\":6307044606,\"aliases\":[\"133dc113-0354-4a60-67d8-5cf6\"]},{\"last_reported_time\":1641906449,\"name\":\"91afb75a-2d81-423f-4179-621f\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:e6186b8d-1fa5-4907-89e3-bb035298cdc9\",\"application_name:hello-datadog-cf-ruby-pink\",\"cf_instance_ip:10.0.40.5\",\"instance_index:0\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-pink.apps.integrations-lab.devenv.dog\",\"host:91afb75a-2d81-423f-4179-621f\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"91afb75a-2d81-423f-4179-621f\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"platform\":\"linux\",\"logs_agent\":{\"transport\":\"\"},\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1048576\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"91afb75a-2d81-423f-4179-621f\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"agent_flavor\":\"dogstatsd\",\"host_id\":6306936543,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"91afb75a-2d81-423f-4179-621f\",\"agent_version\":\"7.32.2\"},\"host_name\":\"91afb75a-2d81-423f-4179-621f\",\"id\":6306936543,\"aliases\":[\"91afb75a-2d81-423f-4179-621f\"]},{\"last_reported_time\":1641906715,\"name\":\"50ecdfa4-428d-4b38-742a-7113\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"trace\",\"page\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:dc22d0b9-d6a2-4389-84a6-76029121ebe4\",\"application_name:autodiscovery-http\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:1\",\"space_name:system\",\"uri:autodiscovery-http.apps.integrations-lab.devenv.dog\",\"host:50ecdfa4-428d-4b38-742a-7113\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"50ecdfa4-428d-4b38-742a-7113\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"logs_agent\":{\"transport\":\"HTTP\"},\"agent_flavor\":\"iot_agent\",\"cpuCores\":1,\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"50ecdfa4-428d-4b38-742a-7113\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"host_id\":6306937330,\"pythonV\":\"n/a\",\"macV\":[\"\",\"\",\"\"],\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"50ecdfa4-428d-4b38-742a-7113\",\"agent_version\":\"7.30.0\"},\"host_name\":\"50ecdfa4-428d-4b38-742a-7113\",\"id\":6306937330,\"aliases\":[\"50ecdfa4-428d-4b38-742a-7113\"]},{\"last_reported_time\":1641907935,\"name\":\"4c7b0ee1-4725-4e74-5298-c33f\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:ead4c7fd-f21c-48b8-9f23-421f15a57cfc\",\"application_name:hello-datadog-cf-ruby-yellow\",\"cf_instance_ip:10.0.40.5\",\"instance_index:1\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-yellow.apps.integrations-lab.devenv.dog\",\"host:4c7b0ee1-4725-4e74-5298-c33f\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"4c7b0ee1-4725-4e74-5298-c33f\",\"macV\":[\"\",\"\",\"\"],\"pythonV\":\"n/a\",\"network\":null,\"cpuCores\":1,\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1048576\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.16.7\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"4c7b0ee1-4725-4e74-5298-c33f\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"platform\":\"linux\",\"agent_flavor\":\"dogstatsd\",\"host_id\":6306937106,\"logs_agent\":{\"transport\":\"\"},\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"4c7b0ee1-4725-4e74-5298-c33f\",\"agent_version\":\"7.32.2\"},\"host_name\":\"4c7b0ee1-4725-4e74-5298-c33f\",\"id\":6306937106,\"aliases\":[\"4c7b0ee1-4725-4e74-5298-c33f\"]},{\"last_reported_time\":1641906010,\"name\":\"990fc01b-7e33-4935-75ee-6980\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"page\",\"trace\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:9f43dcdd-9322-4555-ba67-02a9439fd925\",\"application_name:hello-datadog-cf-ruby-blue\",\"cf_instance_ip:10.0.40.11\",\"env:integrations-lab\",\"instance_index:2\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-blue.apps.integrations-lab.devenv.dog\",\"host:990fc01b-7e33-4935-75ee-6980\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"990fc01b-7e33-4935-75ee-6980\",\"macV\":[\"\",\"\",\"\"],\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"logs_agent\":{\"transport\":\"HTTP\"},\"cpuCores\":1,\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"46080 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2299.998\\\",\\\"model\\\":\\\"63\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.30GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"990fc01b-7e33-4935-75ee-6980\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"agent_flavor\":\"iot_agent\",\"host_id\":6306978800,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.30GHz\",\"socket-fqdn\":\"990fc01b-7e33-4935-75ee-6980\",\"agent_version\":\"7.31.0\"},\"host_name\":\"990fc01b-7e33-4935-75ee-6980\",\"id\":6306978800,\"aliases\":[\"990fc01b-7e33-4935-75ee-6980\"]},{\"last_reported_time\":1641906333,\"name\":\"403b7153-e5e1-420a-5a20-d803\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"page\",\"trace\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:41256269-671b-4d79-91d5-3bf848376425\",\"application_name:test-space-org-cc\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:0\",\"space_name:datadog-application-monitoring-space\",\"uri:test-space-org-cc.apps.integrations-lab.devenv.dog\",\"host:403b7153-e5e1-420a-5a20-d803\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"403b7153-e5e1-420a-5a20-d803\",\"macV\":[\"\",\"\",\"\"],\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"logs_agent\":{\"transport\":\"HTTP\"},\"cpuCores\":1,\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"403b7153-e5e1-420a-5a20-d803\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"agent_flavor\":\"iot_agent\",\"host_id\":6306938360,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"403b7153-e5e1-420a-5a20-d803\",\"agent_version\":\"7.30.0\"},\"host_name\":\"403b7153-e5e1-420a-5a20-d803\",\"id\":6306938360,\"aliases\":[\"403b7153-e5e1-420a-5a20-d803\"]},{\"last_reported_time\":1641906872,\"name\":\"3259ef0c-3cb7-4769-4735-dbee\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:1f283863-86b2-47ba-8700-c4d71c6edea9\",\"application_name:test-apm-service-5\",\"cf_instance_ip:10.0.40.11\",\"container_id:3259ef0c-3cb7-4769-4735-dbee\",\"env:non-prod-auto-81\",\"instance_index:1\",\"space_name:system\",\"test-apm-env\",\"uri:test-apm-service-5.apps.integrations-lab.devenv.dog\",\"host:3259ef0c-3cb7-4769-4735-dbee\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"3259ef0c-3cb7-4769-4735-dbee\",\"macV\":[\"\",\"\",\"\"],\"logs_agent\":{\"transport\":\"HTTP\"},\"network\":null,\"cpuCores\":1,\"platform\":\"linux\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"46080 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2299.998\\\",\\\"model\\\":\\\"63\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.30GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"3259ef0c-3cb7-4769-4735-dbee\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"agent_flavor\":\"iot_agent\",\"host_id\":6306991191,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.30GHz\",\"socket-fqdn\":\"3259ef0c-3cb7-4769-4735-dbee\",\"agent_version\":\"7.27.0\"},\"host_name\":\"3259ef0c-3cb7-4769-4735-dbee\",\"id\":6306991191,\"aliases\":[\"3259ef0c-3cb7-4769-4735-dbee\"]},{\"last_reported_time\":1641906600,\"name\":\"f549fedb-85e4-4106-5d1e-3bfa\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:9d519c2b-261e-4553-9db3-c79c8a9857f5\",\"application_name:test_log_redirect\",\"cf_instance_ip:10.0.40.5\",\"instance_index:0\",\"space_name:system\",\"test-log-redirection-socket-closed\",\"uri:testlogredirect.apps.integrations-lab.devenv.dog\",\"host:f549fedb-85e4-4106-5d1e-3bfa\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"f549fedb-85e4-4106-5d1e-3bfa\",\"macV\":[\"\",\"\",\"\"],\"cpuCores\":1,\"pythonV\":\"n/a\",\"platform\":\"linux\",\"logs_agent\":{\"transport\":\"HTTP\"},\"agent_flavor\":\"iot_agent\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"f549fedb-85e4-4106-5d1e-3bfa\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"host_id\":6306938941,\"agent_version\":\"7.27.0\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"f549fedb-85e4-4106-5d1e-3bfa\",\"network\":null},\"host_name\":\"f549fedb-85e4-4106-5d1e-3bfa\",\"id\":6306938941,\"aliases\":[\"f549fedb-85e4-4106-5d1e-3bfa\"]},{\"last_reported_time\":1641906447,\"name\":\"ace8a960-ae96-48af-5a55-cb0d\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"trace\",\"page\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:9f43dcdd-9322-4555-ba67-02a9439fd925\",\"application_name:hello-datadog-cf-ruby-blue\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:0\",\"space_name:system\",\"uri:hello-datadog-cf-ruby-blue.apps.integrations-lab.devenv.dog\",\"host:ace8a960-ae96-48af-5a55-cb0d\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"ace8a960-ae96-48af-5a55-cb0d\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"platform\":\"linux\",\"logs_agent\":{\"transport\":\"HTTP\"},\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"ace8a960-ae96-48af-5a55-cb0d\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"agent_flavor\":\"iot_agent\",\"host_id\":6306942281,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"ace8a960-ae96-48af-5a55-cb0d\",\"agent_version\":\"7.31.0\"},\"host_name\":\"ace8a960-ae96-48af-5a55-cb0d\",\"id\":6306942281,\"aliases\":[\"ace8a960-ae96-48af-5a55-cb0d\"]},{\"last_reported_time\":1641906713,\"name\":\"d34b4ecc-86eb-4b16-7f9c-9a2c\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:06ed9382-26b8-42f3-9790-b0bf9f7c7fd9\",\"application_name:test-apm-service-4\",\"cf_instance_ip:10.0.40.5\",\"container_id:d34b4ecc-86eb-4b16-7f9c-9a2c\",\"env:non-prod\",\"instance_index:1\",\"space_name:system\",\"test-apm-env\",\"uri:test-apm-service-4.apps.integrations-lab.devenv.dog\",\"host:d34b4ecc-86eb-4b16-7f9c-9a2c\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"d34b4ecc-86eb-4b16-7f9c-9a2c\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"logs_agent\":{\"transport\":\"HTTP\"},\"network\":null,\"cpuCores\":1,\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"d34b4ecc-86eb-4b16-7f9c-9a2c\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"agent_flavor\":\"iot_agent\",\"host_id\":6306937036,\"pythonV\":\"n/a\",\"macV\":[\"\",\"\",\"\"],\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"d34b4ecc-86eb-4b16-7f9c-9a2c\",\"agent_version\":\"7.27.0\"},\"host_name\":\"d34b4ecc-86eb-4b16-7f9c-9a2c\",\"id\":6306937036,\"aliases\":[\"d34b4ecc-86eb-4b16-7f9c-9a2c\"]},{\"last_reported_time\":1641907512,\"name\":\"07cac129-6989-463b-48f8-2fea\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:1f283863-86b2-47ba-8700-c4d71c6edea9\",\"application_name:test-apm-service-5\",\"cf_instance_ip:10.0.40.5\",\"container_id:07cac129-6989-463b-48f8-2fea\",\"env:non-prod-auto-81\",\"instance_index:0\",\"space_name:system\",\"test-apm-env\",\"uri:test-apm-service-5.apps.integrations-lab.devenv.dog\",\"host:07cac129-6989-463b-48f8-2fea\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"07cac129-6989-463b-48f8-2fea\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"pythonV\":\"n/a\",\"platform\":\"linux\",\"logs_agent\":{\"transport\":\"HTTP\"},\"agent_flavor\":\"iot_agent\",\"macV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"07cac129-6989-463b-48f8-2fea\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"fbsdV\":[\"\",\"\",\"\"],\"socket-fqdn\":\"07cac129-6989-463b-48f8-2fea\",\"host_id\":6306937802,\"agent_version\":\"7.27.0\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"network\":null,\"cpuCores\":1},\"host_name\":\"07cac129-6989-463b-48f8-2fea\",\"id\":6306937802,\"aliases\":[\"07cac129-6989-463b-48f8-2fea\"]},{\"last_reported_time\":1641907773,\"name\":\"b6b09ba1-8412-458e-6288-304f\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"page\",\"trace\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:dc22d0b9-d6a2-4389-84a6-76029121ebe4\",\"application_name:autodiscovery-http\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:0\",\"space_name:system\",\"uri:autodiscovery-http.apps.integrations-lab.devenv.dog\",\"host:b6b09ba1-8412-458e-6288-304f\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"b6b09ba1-8412-458e-6288-304f\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"logs_agent\":{\"transport\":\"HTTP\"},\"agent_flavor\":\"iot_agent\",\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"b6b09ba1-8412-458e-6288-304f\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"network\":null,\"host_id\":6306937316,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"b6b09ba1-8412-458e-6288-304f\",\"agent_version\":\"7.30.0\"},\"host_name\":\"b6b09ba1-8412-458e-6288-304f\",\"id\":6306937316,\"aliases\":[\"b6b09ba1-8412-458e-6288-304f\"]},{\"last_reported_time\":1641906717,\"name\":\"9299f226-6c03-45b6-5d43-5d8a\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:8957b9a0-4132-4754-acc5-e3b959b5c77a\",\"application_name:test-apm-service\",\"cf_instance_ip:10.0.40.11\",\"container_id:9299f226-6c03-45b6-5d43-5d8a\",\"env:non-prod\",\"instance_index:0\",\"space_name:system\",\"test-apm-env\",\"uri:test-apm-service.apps.integrations-lab.devenv.dog\",\"host:9299f226-6c03-45b6-5d43-5d8a\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"9299f226-6c03-45b6-5d43-5d8a\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"cpuCores\":1,\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"logs_agent\":{\"transport\":\"HTTP\"},\"agent_flavor\":\"iot_agent\",\"macV\":[\"\",\"\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"processor\":\"Intel(R) Xeon(R) CPU @ 2.30GHz\",\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"46080 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2299.998\\\",\\\"model\\\":\\\"63\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.30GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"9299f226-6c03-45b6-5d43-5d8a\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"host_id\":6307039546,\"pythonV\":\"n/a\",\"socket-fqdn\":\"9299f226-6c03-45b6-5d43-5d8a\",\"network\":null,\"agent_version\":\"7.27.0\"},\"host_name\":\"9299f226-6c03-45b6-5d43-5d8a\",\"id\":6307039546,\"aliases\":[\"9299f226-6c03-45b6-5d43-5d8a\"]},{\"last_reported_time\":1641907935,\"name\":\"4f1da5be-4454-4238-6d5f-8fd4\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"page\",\"trace\",\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:41256269-671b-4d79-91d5-3bf848376425\",\"application_name:test-space-org-cc\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:1\",\"space_name:datadog-application-monitoring-space\",\"uri:test-space-org-cc.apps.integrations-lab.devenv.dog\",\"host:4f1da5be-4454-4238-6d5f-8fd4\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"4f1da5be-4454-4238-6d5f-8fd4\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"cpuCores\":1,\"macV\":[\"\",\"\",\"\"],\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"logs_agent\":{\"transport\":\"HTTP\"},\"agent_flavor\":\"iot_agent\",\"platform\":\"linux\",\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"machine\":\"amd64\",\"network\":null,\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.15.13\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"4f1da5be-4454-4238-6d5f-8fd4\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"host_id\":6306942318,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"4f1da5be-4454-4238-6d5f-8fd4\",\"agent_version\":\"7.30.0\"},\"host_name\":\"4f1da5be-4454-4238-6d5f-8fd4\",\"id\":6306942318,\"aliases\":[\"4f1da5be-4454-4238-6d5f-8fd4\"]},{\"last_reported_time\":1641906715,\"name\":\"a2af6476-390b-4f1f-6b18-a9bf\",\"is_muted\":false,\"mute_timeout\":null,\"apps\":[\"agent\"],\"tags_by_source\":{\"Datadog\":[\"application_id:0ba38e35-614c-4576-862a-92a1b60c53db\",\"application_name:test-apm-service-2\",\"cf_instance_ip:10.0.40.5\",\"container_id:a2af6476-390b-4f1f-6b18-a9bf\",\"env:non-prod\",\"instance_index:0\",\"space_name:system\",\"test-apm-env\",\"uri:test-apm-service-2.apps.integrations-lab.devenv.dog\",\"host:a2af6476-390b-4f1f-6b18-a9bf\"]},\"up\":true,\"metrics\":{\"load\":null,\"iowait\":null,\"cpu\":null},\"sources\":[\"agent\"],\"meta\":{\"socket-hostname\":\"a2af6476-390b-4f1f-6b18-a9bf\",\"macV\":[\"\",\"\",\"\"],\"install_method\":{\"tool\":null,\"installer_version\":null,\"tool_version\":\"undefined\"},\"cpuCores\":1,\"agent_flavor\":\"iot_agent\",\"nixV\":[\"ubuntu\",\"18.04\",\"\"],\"timezones\":[\"UTC\"],\"winV\":[\"\",\"\",\"\"],\"agent_version\":\"7.27.0\",\"machine\":\"amd64\",\"platform\":\"linux\",\"fbsdV\":[\"\",\"\",\"\"],\"gohai\":\"{\\\"cpu\\\":{\\\"cache_size\\\":\\\"56320 KB\\\",\\\"cpu_cores\\\":\\\"2\\\",\\\"cpu_logical_processors\\\":\\\"4\\\",\\\"family\\\":\\\"6\\\",\\\"mhz\\\":\\\"2199.998\\\",\\\"model\\\":\\\"79\\\",\\\"model_name\\\":\\\"Intel(R) Xeon(R) CPU @ 2.20GHz\\\",\\\"stepping\\\":\\\"0\\\",\\\"vendor_id\\\":\\\"GenuineIntel\\\"},\\\"filesystem\\\":[{\\\"kb_size\\\":\\\"1024000\\\",\\\"mounted_on\\\":\\\"/\\\",\\\"name\\\":\\\"overlay\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/dev/shm\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"115956164\\\",\\\"mounted_on\\\":\\\"/tmp/garden-init\\\",\\\"name\\\":\\\"/dev/sda3\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/fs/cgroup\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"2796\\\",\\\"mounted_on\\\":\\\"/etc/cf-instance-credentials\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8197672\\\",\\\"mounted_on\\\":\\\"/dev/tty\\\",\\\"name\\\":\\\"devtmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/proc/scsi\\\",\\\"name\\\":\\\"tmpfs\\\"},{\\\"kb_size\\\":\\\"8212632\\\",\\\"mounted_on\\\":\\\"/sys/firmware\\\",\\\"name\\\":\\\"tmpfs\\\"}],\\\"memory\\\":{\\\"swap_total\\\":\\\"16425264kB\\\",\\\"total\\\":\\\"16425268kB\\\"},\\\"network\\\":null,\\\"platform\\\":{\\\"GOOARCH\\\":\\\"amd64\\\",\\\"GOOS\\\":\\\"linux\\\",\\\"goV\\\":\\\"1.14.12\\\",\\\"hardware_platform\\\":\\\"x86_64\\\",\\\"hostname\\\":\\\"a2af6476-390b-4f1f-6b18-a9bf\\\",\\\"kernel_name\\\":\\\"Linux\\\",\\\"kernel_release\\\":\\\"4.15.0-132-generic\\\",\\\"kernel_version\\\":\\\"#136~16.04.1-Ubuntu SMP Tue Jan 12 18:22:20 UTC 2021\\\",\\\"machine\\\":\\\"x86_64\\\",\\\"os\\\":\\\"GNU/Linux\\\",\\\"processor\\\":\\\"x86_64\\\",\\\"pythonV\\\":\\\"2.7.17\\\"}}\",\"logs_agent\":{\"transport\":\"HTTP\"},\"host_id\":6306937724,\"pythonV\":\"n/a\",\"processor\":\"Intel(R) Xeon(R) CPU @ 2.20GHz\",\"socket-fqdn\":\"a2af6476-390b-4f1f-6b18-a9bf\",\"network\":null},\"host_name\":\"a2af6476-390b-4f1f-6b18-a9bf\",\"id\":6306937724,\"aliases\":[\"a2af6476-390b-4f1f-6b18-a9bf\"]}],\"total_matching\":41}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all hosts with metadata for your organization returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/ip-ranges.json b/test-server-data/v1/ip-ranges.json new file mode 100644 index 0000000000..1ac63f50ae --- /dev/null +++ b/test-server-data/v1/ip-ranges.json @@ -0,0 +1,38 @@ +{ + "feature": "IP Ranges", + "recordings": [ + { + "feature": "IP Ranges", + "frozen_at": "2022-03-09T10:24:17.021Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\n \"version\": 47,\n \"modified\": \"2022-01-25-20-00-00\",\n \"agents\": {\n \"prefixes_ipv4\": [\n \"3.233.144.0/20\"\n ],\n \"prefixes_ipv6\": [\n \"2600:1f18:24e6:b900::/56\"\n ]\n },\n \"api\": {\n \"prefixes_ipv4\": [\n \"3.233.144.0/20\"\n ],\n \"prefixes_ipv6\": [\n \"2600:1f18:24e6:b900::/56\"\n ]\n },\n \"apm\": {\n \"prefixes_ipv4\": [\n \"3.233.144.0/20\"\n ],\n \"prefixes_ipv6\": [\n \"2600:1f18:24e6:b900::/56\"\n ]\n },\n \"global\": {\n \"prefixes_ipv4\": [\n \"3.233.144.0/20\"\n ],\n \"prefixes_ipv6\": [\n \"2600:1f18:24e6:b900::/56\"\n ]\n },\n \"logs\": {\n \"prefixes_ipv4\": [\n \"3.233.144.0/20\"\n ],\n \"prefixes_ipv6\": [\n \"2600:1f18:24e6:b900::/56\"\n ]\n },\n \"orchestrator\": {\n \"prefixes_ipv4\": [\n \"3.233.144.0/20\"\n ],\n \"prefixes_ipv6\": [\n \"2600:1f18:24e6:b900::/56\"\n ]\n },\n \"process\": {\n \"prefixes_ipv4\": [\n \"3.233.144.0/20\"\n ],\n \"prefixes_ipv6\": [\n \"2600:1f18:24e6:b900::/56\"\n ]\n },\n \"synthetics\": {\n \"prefixes_ipv4\": [\n \"13.114.211.96/32\",\n \"13.115.46.213/32\",\n \"13.126.169.175/32\",\n \"13.209.118.42/32\",\n \"13.209.230.111/32\",\n \"13.234.54.8/32\",\n \"13.236.246.161/32\",\n \"13.238.14.57/32\",\n \"13.48.150.244/32\",\n \"13.48.239.118/32\",\n \"13.48.254.37/32\",\n \"13.54.169.48/32\",\n \"15.188.202.64/32\",\n \"15.188.240.172/32\",\n \"15.188.243.248/32\",\n \"18.130.113.168/32\",\n \"18.139.52.173/32\",\n \"18.195.155.52/32\",\n \"18.200.120.237/32\",\n \"18.229.28.50/32\",\n \"18.229.36.120/32\",\n \"20.62.248.141/32\",\n \"20.83.144.189/32\",\n \"3.1.219.207/32\",\n \"3.1.36.99/32\",\n \"3.120.223.25/32\",\n \"3.121.24.234/32\",\n \"3.18.172.189/32\",\n \"3.18.188.104/32\",\n \"3.18.197.0/32\",\n \"3.36.177.119/32\",\n \"3.96.7.126/32\",\n \"34.208.32.189/32\",\n \"35.154.93.182/32\",\n \"35.176.195.46/32\",\n \"35.177.43.250/32\",\n \"40.76.107.170/32\",\n \"52.192.175.207/32\",\n \"52.35.61.232/32\",\n \"52.60.189.53/32\",\n \"52.67.95.251/32\",\n \"52.89.221.151/32\",\n \"52.9.13.199/32\",\n \"52.9.139.134/32\",\n \"54.177.155.33/32\",\n \"63.34.100.178/32\",\n \"63.35.33.198/32\",\n \"99.79.87.237/32\"\n ],\n \"prefixes_ipv6\": [],\n \"prefixes_ipv4_by_location\": {\n \"aws:ap-northeast-1\": [\n \"13.114.211.96/32\",\n \"52.192.175.207/32\",\n \"13.115.46.213/32\"\n ],\n \"aws:ap-northeast-2\": [\n \"13.209.118.42/32\",\n \"3.36.177.119/32\",\n \"13.209.230.111/32\"\n ],\n \"aws:ap-south-1\": [\n \"35.154.93.182/32\",\n \"13.126.169.175/32\",\n \"13.234.54.8/32\"\n ],\n \"aws:ap-southeast-1\": [\n \"3.1.36.99/32\",\n \"18.139.52.173/32\",\n \"3.1.219.207/32\"\n ],\n \"aws:ap-southeast-2\": [\n \"13.236.246.161/32\",\n \"13.54.169.48/32\",\n \"13.238.14.57/32\"\n ],\n \"aws:ca-central-1\": [\n \"3.96.7.126/32\",\n \"52.60.189.53/32\",\n \"99.79.87.237/32\"\n ],\n \"aws:eu-central-1\": [\n \"3.120.223.25/32\",\n \"18.195.155.52/32\",\n \"3.121.24.234/32\"\n ],\n \"aws:eu-north-1\": [\n \"13.48.150.244/32\",\n \"13.48.254.37/32\",\n \"13.48.239.118/32\"\n ],\n \"aws:eu-west-1\": [\n \"63.35.33.198/32\",\n \"18.200.120.237/32\",\n \"63.34.100.178/32\"\n ],\n \"aws:eu-west-2\": [\n \"18.130.113.168/32\",\n \"35.177.43.250/32\",\n \"35.176.195.46/32\"\n ],\n \"aws:eu-west-3\": [\n \"15.188.243.248/32\",\n \"15.188.202.64/32\",\n \"15.188.240.172/32\"\n ],\n \"aws:sa-east-1\": [\n \"18.229.36.120/32\",\n \"52.67.95.251/32\",\n \"18.229.28.50/32\"\n ],\n \"aws:us-east-2\": [\n \"3.18.188.104/32\",\n \"3.18.197.0/32\",\n \"3.18.172.189/32\"\n ],\n \"aws:us-west-1\": [\n \"54.177.155.33/32\",\n \"52.9.13.199/32\",\n \"52.9.139.134/32\"\n ],\n \"aws:us-west-2\": [\n \"52.35.61.232/32\",\n \"34.208.32.189/32\",\n \"52.89.221.151/32\"\n ],\n \"azure:eastus\": [\n \"40.76.107.170/32\",\n \"20.62.248.141/32\",\n \"20.83.144.189/32\"\n ]\n },\n \"prefixes_ipv6_by_location\": {}\n },\n \"webhooks\": {\n \"prefixes_ipv4\": [\n \"23.20.198.65/32\",\n \"23.23.216.60/32\",\n \"3.220.254.141/32\",\n \"3.229.86.174/32\",\n \"3.85.68.181/32\",\n \"34.192.254.186/32\",\n \"34.203.1.9/32\",\n \"34.204.102.208/32\",\n \"34.204.83.4/32\",\n \"35.172.176.208/32\",\n \"44.192.28.0/25\",\n \"52.1.61.69/32\",\n \"52.20.96.17/32\",\n \"52.71.149.79/32\",\n \"52.73.176.69/32\",\n \"54.157.132.187/32\",\n \"54.157.36.5/32\",\n \"54.164.178.25/32\",\n \"54.92.248.81/32\"\n ],\n \"prefixes_ipv6\": []\n }\n}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List IP Ranges returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/logs-pipelines.json b/test-server-data/v1/logs-pipelines.json new file mode 100644 index 0000000000..d2395d1e90 --- /dev/null +++ b/test-server-data/v1/logs-pipelines.json @@ -0,0 +1,1943 @@ +{ + "feature": "Logs Pipelines", + "recordings": [ + { + "feature": "Logs Pipelines", + "frozen_at": "2026-06-23T13:26:57.908Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayMap", + "processors": [ + { + "is_enabled": true, + "name": "map items", + "preserve_source": true, + "processors": [ + { + "preserve_source": true, + "sources": [ + "$sourceElem.id" + ], + "target": "$targetElem.uid", + "type": "attribute-remapper" + }, + { + "target": "$targetElem.label", + "template": "item-%{$sourceElem.id}", + "type": "string-builder-processor" + } + ], + "source": "items", + "target": "out", + "type": "array-map-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"9R-fEK0LRyWg0HzDbM-gOg\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayMap\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"map items\",\"is_enabled\":true,\"source\":\"items\",\"target\":\"out\",\"processors\":[{\"sources\":[\"$sourceElem.id\"],\"target\":\"$targetElem.uid\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"attribute-remapper\"},{\"template\":\"item-%{$sourceElem.id}\",\"target\":\"$targetElem.label\",\"is_replace_missing\":false,\"type\":\"string-builder-processor\"}],\"preserve_source\":true,\"type\":\"array-map-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/9R-fEK0LRyWg0HzDbM-gOg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Map Processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2026-06-23T13:27:34.721Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayMapArithmetic", + "processors": [ + { + "is_enabled": true, + "name": "double counts", + "processors": [ + { + "expression": "$sourceElem.count * 2", + "target": "$targetElem.doubled", + "type": "arithmetic-processor" + } + ], + "source": "items", + "target": "out", + "type": "array-map-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"PxfujWHYRaGCWVqVCVrBAg\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayMapArithmetic\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"double counts\",\"is_enabled\":true,\"source\":\"items\",\"target\":\"out\",\"processors\":[{\"expression\":\"$sourceElem.count * 2\",\"target\":\"$targetElem.doubled\",\"is_replace_missing\":false,\"type\":\"arithmetic-processor\"}],\"preserve_source\":true,\"type\":\"array-map-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/PxfujWHYRaGCWVqVCVrBAg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Map Processor using arithmetic sub-processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2026-06-23T13:27:55.552Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayMapCategory", + "processors": [ + { + "is_enabled": true, + "name": "categorize items", + "processors": [ + { + "categories": [ + { + "filter": { + "query": "@$sourceElem.status:error" + }, + "name": "error" + }, + { + "filter": { + "query": "*" + }, + "name": "info" + } + ], + "target": "$targetElem.level", + "type": "category-processor" + } + ], + "source": "items", + "target": "out", + "type": "array-map-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"NW1Ws0rnRwWbxKdNUlBFOQ\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayMapCategory\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"categorize items\",\"is_enabled\":true,\"source\":\"items\",\"target\":\"out\",\"processors\":[{\"categories\":[{\"filter\":{\"query\":\"@$sourceElem.status:error\"},\"name\":\"error\"},{\"filter\":{\"query\":\"*\"},\"name\":\"info\"}],\"target\":\"$targetElem.level\",\"type\":\"category-processor\"}],\"preserve_source\":true,\"type\":\"array-map-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/NW1Ws0rnRwWbxKdNUlBFOQ", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Map Processor using category sub-processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2026-06-23T13:28:15.444Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayMapNoPreserve", + "processors": [ + { + "is_enabled": true, + "name": "map and remove source", + "preserve_source": false, + "processors": [ + { + "sources": [ + "$sourceElem.id" + ], + "target": "$targetElem.uid", + "type": "attribute-remapper" + } + ], + "source": "items", + "target": "out", + "type": "array-map-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"hJXlpnp0RD68QPplvOMAcQ\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayMapNoPreserve\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"map and remove source\",\"is_enabled\":true,\"source\":\"items\",\"target\":\"out\",\"processors\":[{\"sources\":[\"$sourceElem.id\"],\"target\":\"$targetElem.uid\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"attribute-remapper\"}],\"preserve_source\":false,\"type\":\"array-map-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/hJXlpnp0RD68QPplvOMAcQ", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Map Processor with preserve_source false returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-06-30T15:45:40.994Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayAppend", + "processors": [ + { + "is_enabled": true, + "name": "append_ip_to_array", + "operation": { + "source": "network.client.ip", + "target": "sourceIps", + "type": "append" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"s_cPqdnkQVaU6PwbPPt2ZQ\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayAppend\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"append_ip_to_array\",\"is_enabled\":true,\"operation\":{\"source\":\"network.client.ip\",\"target\":\"sourceIps\",\"preserve_source\":true,\"type\":\"append\"},\"type\":\"array-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/s_cPqdnkQVaU6PwbPPt2ZQ", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Processor Append Operation returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-06-30T15:45:41.844Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayAppendNoPreserve", + "processors": [ + { + "is_enabled": true, + "name": "append_ip_and_remove_source", + "operation": { + "preserve_source": false, + "source": "network.client.ip", + "target": "sourceIps", + "type": "append" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"B91fO94kQnCeZ4bOoZQOWg\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayAppendNoPreserve\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"append_ip_and_remove_source\",\"is_enabled\":true,\"operation\":{\"source\":\"network.client.ip\",\"target\":\"sourceIps\",\"preserve_source\":false,\"type\":\"append\"},\"type\":\"array-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/B91fO94kQnCeZ4bOoZQOWg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Processor Append Operation with preserve_source false returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-06-30T15:45:42.655Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayAppendPreserve", + "processors": [ + { + "is_enabled": true, + "name": "append_ip_and_keep_source", + "operation": { + "preserve_source": true, + "source": "network.client.ip", + "target": "sourceIps", + "type": "append" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"VX29vifpTjOKtlFWDp2-gA\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayAppendPreserve\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"append_ip_and_keep_source\",\"is_enabled\":true,\"operation\":{\"source\":\"network.client.ip\",\"target\":\"sourceIps\",\"preserve_source\":true,\"type\":\"append\"},\"type\":\"array-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/VX29vifpTjOKtlFWDp2-gA", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Processor Append Operation with preserve_source true returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2026-07-22T18:27:14.576Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayKeyValue", + "processors": [ + { + "is_enabled": true, + "name": "extract_kv", + "operation": { + "key_to_extract": "name", + "source": "tags", + "type": "key-value", + "value_to_extract": "value" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"KLmRE95XSCKQcsktzgs9eQ\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayKeyValue\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"extract_kv\",\"is_enabled\":true,\"operation\":{\"source\":\"tags\",\"key_to_extract\":\"name\",\"value_to_extract\":\"value\",\"override_on_conflict\":false,\"type\":\"key-value\"},\"type\":\"array-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/KLmRE95XSCKQcsktzgs9eQ", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Processor Key Value Operation returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2026-07-22T18:27:15.202Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayKeyValueTarget", + "processors": [ + { + "is_enabled": true, + "name": "extract_kv_to_target", + "operation": { + "key_to_extract": "name", + "override_on_conflict": true, + "source": "tags", + "target": "extracted", + "type": "key-value", + "value_to_extract": "value" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"LsxyDpcbTL6KztluS2oBYA\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayKeyValueTarget\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"extract_kv_to_target\",\"is_enabled\":true,\"operation\":{\"source\":\"tags\",\"target\":\"extracted\",\"key_to_extract\":\"name\",\"value_to_extract\":\"value\",\"override_on_conflict\":true,\"type\":\"key-value\"},\"type\":\"array-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/LsxyDpcbTL6KztluS2oBYA", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Processor Key Value Operation with target and override_on_conflict returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-06-30T15:45:43.474Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArrayLength", + "processors": [ + { + "is_enabled": true, + "name": "count_tags", + "operation": { + "source": "tags", + "target": "tagCount", + "type": "length" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"MB-HZA9rRlKRHb-2LpYBxw\",\"type\":\"pipeline\",\"name\":\"testPipelineArrayLength\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"count_tags\",\"is_enabled\":true,\"operation\":{\"source\":\"tags\",\"target\":\"tagCount\",\"type\":\"length\"},\"type\":\"array-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/MB-HZA9rRlKRHb-2LpYBxw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Processor Length Operation returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-06-30T15:45:44.240Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipelineArraySelect", + "processors": [ + { + "is_enabled": true, + "name": "extract_referrer", + "operation": { + "filter": "name:Referrer", + "source": "httpRequest.headers", + "target": "referrer", + "type": "select", + "value_to_extract": "value" + }, + "type": "array-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"e3TVPUCYQ7a37CTTJB1HcA\",\"type\":\"pipeline\",\"name\":\"testPipelineArraySelect\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"extract_referrer\",\"is_enabled\":true,\"operation\":{\"source\":\"httpRequest.headers\",\"target\":\"referrer\",\"filter\":\"name:Referrer\",\"value_to_extract\":\"value\",\"type\":\"select\"},\"type\":\"array-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/e3TVPUCYQ7a37CTTJB1HcA", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Array Processor Select Operation returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-07-22T13:27:59.975Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testDecoderProcessor", + "processors": [ + { + "binary_to_text_encoding": "base16", + "input_representation": "utf_8", + "is_enabled": true, + "name": "test_decoder", + "source": "encoded.field", + "target": "decoded.field", + "type": "decoder-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"BEg5CcvmSfyIGoMi9PWyTQ\",\"type\":\"pipeline\",\"name\":\"testDecoderProcessor\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"test_decoder\",\"is_enabled\":true,\"source\":\"encoded.field\",\"target\":\"decoded.field\",\"binary_to_text_encoding\":\"base16\",\"input_representation\":\"utf_8\",\"type\":\"decoder-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/BEg5CcvmSfyIGoMi9PWyTQ", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Decoder Processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-10-22T19:11:58.774Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testSchemaProcessor", + "processors": [ + { + "is_enabled": true, + "mappers": [ + { + "categories": [ + { + "filter": { + "query": "@eventName:(*Create*)" + }, + "id": 1, + "name": "Create" + }, + { + "filter": { + "query": "@eventName:(ChangePassword OR PasswordUpdated)" + }, + "id": 3, + "name": "Password Change" + }, + { + "filter": { + "query": "@eventName:(*Attach*)" + }, + "id": 7, + "name": "Attach Policy" + }, + { + "filter": { + "query": "@eventName:(*Detach* OR *Remove*)" + }, + "id": 8, + "name": "Detach Policy" + }, + { + "filter": { + "query": "@eventName:(*Delete*)" + }, + "id": 6, + "name": "Delete" + }, + { + "filter": { + "query": "@eventName:*" + }, + "id": 99, + "name": "Other" + } + ], + "fallback": { + "sources": { + "ocsf.activity_name": [ + "eventName" + ] + }, + "values": { + "ocsf.activity_id": "99", + "ocsf.activity_name": "Other" + } + }, + "name": "activity_id and activity_name", + "targets": { + "id": "ocsf.activity_id", + "name": "ocsf.activity_name" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "-@errorCode:*" + }, + "id": 1, + "name": "Success" + }, + { + "filter": { + "query": "@errorCode:*" + }, + "id": 2, + "name": "Failure" + } + ], + "name": "status", + "targets": { + "id": "ocsf.status_id", + "name": "ocsf.status" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "@eventName:*" + }, + "id": 1, + "name": "Informational" + } + ], + "name": "Set default severity", + "targets": { + "id": "ocsf.severity_id", + "name": "ocsf.severity" + }, + "type": "schema-category-mapper" + }, + { + "name": "Map userIdentity to ocsf.user.uid", + "preserve_source": false, + "sources": [ + "userIdentity.principalId", + "responseElements.role.roleId", + "responseElements.user.userId" + ], + "target": "ocsf.user.uid", + "type": "schema-remapper" + }, + { + "name": "Map userName to ocsf.user.name", + "preserve_source": false, + "sources": [ + "requestParameters.userName", + "responseElements.role.roleName", + "requestParameters.roleName", + "responseElements.user.userName" + ], + "target": "ocsf.user.name", + "type": "schema-remapper" + }, + { + "name": "Map api to ocsf.api", + "preserve_source": false, + "sources": [ + "api" + ], + "target": "ocsf.api", + "type": "schema-remapper" + }, + { + "name": "Map user to ocsf.user", + "preserve_source": false, + "sources": [ + "user" + ], + "target": "ocsf.user", + "type": "schema-remapper" + }, + { + "name": "Map actor to ocsf.actor", + "preserve_source": false, + "sources": [ + "actor" + ], + "target": "ocsf.actor", + "type": "schema-remapper" + }, + { + "name": "Map cloud to ocsf.cloud", + "preserve_source": false, + "sources": [ + "cloud" + ], + "target": "ocsf.cloud", + "type": "schema-remapper" + }, + { + "name": "Map http_request to ocsf.http_request", + "preserve_source": false, + "sources": [ + "http_request" + ], + "target": "ocsf.http_request", + "type": "schema-remapper" + }, + { + "name": "Map metadata to ocsf.metadata", + "preserve_source": false, + "sources": [ + "metadata" + ], + "target": "ocsf.metadata", + "type": "schema-remapper" + }, + { + "name": "Map time to ocsf.time", + "preserve_source": false, + "sources": [ + "time" + ], + "target": "ocsf.time", + "type": "schema-remapper" + }, + { + "name": "Map src_endpoint to ocsf.src_endpoint", + "preserve_source": false, + "sources": [ + "src_endpoint" + ], + "target": "ocsf.src_endpoint", + "type": "schema-remapper" + }, + { + "name": "Map severity to ocsf.severity", + "preserve_source": false, + "sources": [ + "severity" + ], + "target": "ocsf.severity", + "type": "schema-remapper" + }, + { + "name": "Map severity_id to ocsf.severity_id", + "preserve_source": false, + "sources": [ + "severity_id" + ], + "target": "ocsf.severity_id", + "type": "schema-remapper" + } + ], + "name": "Apply OCSF schema for 3001", + "schema": { + "class_name": "Account Change", + "class_uid": 3001, + "profiles": [ + "cloud", + "datetime" + ], + "schema_type": "ocsf", + "version": "1.5.0" + }, + "type": "schema-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"-qkKiJPYTne-113i8XJ_Nw\",\"type\":\"pipeline\",\"name\":\"testSchemaProcessor\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"Apply OCSF schema for 3001\",\"is_enabled\":true,\"mappers\":[{\"name\":\"activity_id and activity_name\",\"categories\":[{\"filter\":{\"query\":\"@eventName:(*Create*)\"},\"name\":\"Create\",\"id\":1},{\"filter\":{\"query\":\"@eventName:(ChangePassword OR PasswordUpdated)\"},\"name\":\"Password Change\",\"id\":3},{\"filter\":{\"query\":\"@eventName:(*Attach*)\"},\"name\":\"Attach Policy\",\"id\":7},{\"filter\":{\"query\":\"@eventName:(*Detach* OR *Remove*)\"},\"name\":\"Detach Policy\",\"id\":8},{\"filter\":{\"query\":\"@eventName:(*Delete*)\"},\"name\":\"Delete\",\"id\":6},{\"filter\":{\"query\":\"@eventName:*\"},\"name\":\"Other\",\"id\":99}],\"targets\":{\"name\":\"ocsf.activity_name\",\"id\":\"ocsf.activity_id\"},\"fallback\":{\"values\":{\"ocsf.activity_id\":\"99\",\"ocsf.activity_name\":\"Other\"},\"sources\":{\"ocsf.activity_name\":[\"eventName\"]}},\"type\":\"schema-category-mapper\"},{\"name\":\"status\",\"categories\":[{\"filter\":{\"query\":\"-@errorCode:*\"},\"name\":\"Success\",\"id\":1},{\"filter\":{\"query\":\"@errorCode:*\"},\"name\":\"Failure\",\"id\":2}],\"targets\":{\"name\":\"ocsf.status\",\"id\":\"ocsf.status_id\"},\"fallback\":{\"values\":{},\"sources\":{}},\"type\":\"schema-category-mapper\"},{\"name\":\"Set default severity\",\"categories\":[{\"filter\":{\"query\":\"@eventName:*\"},\"name\":\"Informational\",\"id\":1}],\"targets\":{\"name\":\"ocsf.severity\",\"id\":\"ocsf.severity_id\"},\"fallback\":{\"values\":{},\"sources\":{}},\"type\":\"schema-category-mapper\"},{\"name\":\"Map userIdentity to ocsf.user.uid\",\"sources\":[\"userIdentity.principalId\",\"responseElements.role.roleId\",\"responseElements.user.userId\"],\"target\":\"ocsf.user.uid\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map userName to ocsf.user.name\",\"sources\":[\"requestParameters.userName\",\"responseElements.role.roleName\",\"requestParameters.roleName\",\"responseElements.user.userName\"],\"target\":\"ocsf.user.name\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map api to ocsf.api\",\"sources\":[\"api\"],\"target\":\"ocsf.api\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map user to ocsf.user\",\"sources\":[\"user\"],\"target\":\"ocsf.user\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map actor to ocsf.actor\",\"sources\":[\"actor\"],\"target\":\"ocsf.actor\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map cloud to ocsf.cloud\",\"sources\":[\"cloud\"],\"target\":\"ocsf.cloud\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map http_request to ocsf.http_request\",\"sources\":[\"http_request\"],\"target\":\"ocsf.http_request\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map metadata to ocsf.metadata\",\"sources\":[\"metadata\"],\"target\":\"ocsf.metadata\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map time to ocsf.time\",\"sources\":[\"time\"],\"target\":\"ocsf.time\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map src_endpoint to ocsf.src_endpoint\",\"sources\":[\"src_endpoint\"],\"target\":\"ocsf.src_endpoint\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map severity to ocsf.severity\",\"sources\":[\"severity\"],\"target\":\"ocsf.severity\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map severity_id to ocsf.severity_id\",\"sources\":[\"severity_id\"],\"target\":\"ocsf.severity_id\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"}],\"schema\":{\"schema_type\":\"ocsf\",\"version\":\"1.5.0\",\"class_name\":\"Account Change\",\"class_uid\":3001,\"extensions\":[],\"profiles\":[\"cloud\",\"datetime\"]},\"type\":\"schema-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/-qkKiJPYTne-113i8XJ_Nw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Schema Processor and preserve_source false returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-10-22T19:11:59.195Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testSchemaProcessor", + "processors": [ + { + "is_enabled": true, + "mappers": [ + { + "categories": [ + { + "filter": { + "query": "@eventName:(*Create*)" + }, + "id": 1, + "name": "Create" + }, + { + "filter": { + "query": "@eventName:(ChangePassword OR PasswordUpdated)" + }, + "id": 3, + "name": "Password Change" + }, + { + "filter": { + "query": "@eventName:(*Attach*)" + }, + "id": 7, + "name": "Attach Policy" + }, + { + "filter": { + "query": "@eventName:(*Detach* OR *Remove*)" + }, + "id": 8, + "name": "Detach Policy" + }, + { + "filter": { + "query": "@eventName:(*Delete*)" + }, + "id": 6, + "name": "Delete" + }, + { + "filter": { + "query": "@eventName:*" + }, + "id": 99, + "name": "Other" + } + ], + "fallback": { + "sources": { + "ocsf.activity_name": [ + "eventName" + ] + }, + "values": { + "ocsf.activity_id": "99", + "ocsf.activity_name": "Other" + } + }, + "name": "activity_id and activity_name", + "targets": { + "id": "ocsf.activity_id", + "name": "ocsf.activity_name" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "-@errorCode:*" + }, + "id": 1, + "name": "Success" + }, + { + "filter": { + "query": "@errorCode:*" + }, + "id": 2, + "name": "Failure" + } + ], + "name": "status", + "targets": { + "id": "ocsf.status_id", + "name": "ocsf.status" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "@eventName:*" + }, + "id": 1, + "name": "Informational" + } + ], + "name": "Set default severity", + "targets": { + "id": "ocsf.severity_id", + "name": "ocsf.severity" + }, + "type": "schema-category-mapper" + }, + { + "name": "Map userIdentity to ocsf.user.uid", + "preserve_source": true, + "sources": [ + "userIdentity.principalId", + "responseElements.role.roleId", + "responseElements.user.userId" + ], + "target": "ocsf.user.uid", + "type": "schema-remapper" + }, + { + "name": "Map userName to ocsf.user.name", + "preserve_source": true, + "sources": [ + "requestParameters.userName", + "responseElements.role.roleName", + "requestParameters.roleName", + "responseElements.user.userName" + ], + "target": "ocsf.user.name", + "type": "schema-remapper" + }, + { + "name": "Map api to ocsf.api", + "preserve_source": true, + "sources": [ + "api" + ], + "target": "ocsf.api", + "type": "schema-remapper" + }, + { + "name": "Map user to ocsf.user", + "preserve_source": true, + "sources": [ + "user" + ], + "target": "ocsf.user", + "type": "schema-remapper" + }, + { + "name": "Map actor to ocsf.actor", + "preserve_source": true, + "sources": [ + "actor" + ], + "target": "ocsf.actor", + "type": "schema-remapper" + }, + { + "name": "Map cloud to ocsf.cloud", + "preserve_source": true, + "sources": [ + "cloud" + ], + "target": "ocsf.cloud", + "type": "schema-remapper" + }, + { + "name": "Map http_request to ocsf.http_request", + "preserve_source": true, + "sources": [ + "http_request" + ], + "target": "ocsf.http_request", + "type": "schema-remapper" + }, + { + "name": "Map metadata to ocsf.metadata", + "preserve_source": true, + "sources": [ + "metadata" + ], + "target": "ocsf.metadata", + "type": "schema-remapper" + }, + { + "name": "Map time to ocsf.time", + "preserve_source": true, + "sources": [ + "time" + ], + "target": "ocsf.time", + "type": "schema-remapper" + }, + { + "name": "Map src_endpoint to ocsf.src_endpoint", + "preserve_source": true, + "sources": [ + "src_endpoint" + ], + "target": "ocsf.src_endpoint", + "type": "schema-remapper" + }, + { + "name": "Map severity to ocsf.severity", + "preserve_source": true, + "sources": [ + "severity" + ], + "target": "ocsf.severity", + "type": "schema-remapper" + }, + { + "name": "Map severity_id to ocsf.severity_id", + "preserve_source": true, + "sources": [ + "severity_id" + ], + "target": "ocsf.severity_id", + "type": "schema-remapper" + } + ], + "name": "Apply OCSF schema for 3001", + "schema": { + "class_name": "Account Change", + "class_uid": 3001, + "profiles": [ + "cloud", + "datetime" + ], + "schema_type": "ocsf", + "version": "1.5.0" + }, + "type": "schema-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"ReEWRVSbQ-ersoCn0Ibo6g\",\"type\":\"pipeline\",\"name\":\"testSchemaProcessor\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"Apply OCSF schema for 3001\",\"is_enabled\":true,\"mappers\":[{\"name\":\"activity_id and activity_name\",\"categories\":[{\"filter\":{\"query\":\"@eventName:(*Create*)\"},\"name\":\"Create\",\"id\":1},{\"filter\":{\"query\":\"@eventName:(ChangePassword OR PasswordUpdated)\"},\"name\":\"Password Change\",\"id\":3},{\"filter\":{\"query\":\"@eventName:(*Attach*)\"},\"name\":\"Attach Policy\",\"id\":7},{\"filter\":{\"query\":\"@eventName:(*Detach* OR *Remove*)\"},\"name\":\"Detach Policy\",\"id\":8},{\"filter\":{\"query\":\"@eventName:(*Delete*)\"},\"name\":\"Delete\",\"id\":6},{\"filter\":{\"query\":\"@eventName:*\"},\"name\":\"Other\",\"id\":99}],\"targets\":{\"name\":\"ocsf.activity_name\",\"id\":\"ocsf.activity_id\"},\"fallback\":{\"values\":{\"ocsf.activity_id\":\"99\",\"ocsf.activity_name\":\"Other\"},\"sources\":{\"ocsf.activity_name\":[\"eventName\"]}},\"type\":\"schema-category-mapper\"},{\"name\":\"status\",\"categories\":[{\"filter\":{\"query\":\"-@errorCode:*\"},\"name\":\"Success\",\"id\":1},{\"filter\":{\"query\":\"@errorCode:*\"},\"name\":\"Failure\",\"id\":2}],\"targets\":{\"name\":\"ocsf.status\",\"id\":\"ocsf.status_id\"},\"fallback\":{\"values\":{},\"sources\":{}},\"type\":\"schema-category-mapper\"},{\"name\":\"Set default severity\",\"categories\":[{\"filter\":{\"query\":\"@eventName:*\"},\"name\":\"Informational\",\"id\":1}],\"targets\":{\"name\":\"ocsf.severity\",\"id\":\"ocsf.severity_id\"},\"fallback\":{\"values\":{},\"sources\":{}},\"type\":\"schema-category-mapper\"},{\"name\":\"Map userIdentity to ocsf.user.uid\",\"sources\":[\"userIdentity.principalId\",\"responseElements.role.roleId\",\"responseElements.user.userId\"],\"target\":\"ocsf.user.uid\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map userName to ocsf.user.name\",\"sources\":[\"requestParameters.userName\",\"responseElements.role.roleName\",\"requestParameters.roleName\",\"responseElements.user.userName\"],\"target\":\"ocsf.user.name\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map api to ocsf.api\",\"sources\":[\"api\"],\"target\":\"ocsf.api\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map user to ocsf.user\",\"sources\":[\"user\"],\"target\":\"ocsf.user\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map actor to ocsf.actor\",\"sources\":[\"actor\"],\"target\":\"ocsf.actor\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map cloud to ocsf.cloud\",\"sources\":[\"cloud\"],\"target\":\"ocsf.cloud\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map http_request to ocsf.http_request\",\"sources\":[\"http_request\"],\"target\":\"ocsf.http_request\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map metadata to ocsf.metadata\",\"sources\":[\"metadata\"],\"target\":\"ocsf.metadata\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map time to ocsf.time\",\"sources\":[\"time\"],\"target\":\"ocsf.time\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map src_endpoint to ocsf.src_endpoint\",\"sources\":[\"src_endpoint\"],\"target\":\"ocsf.src_endpoint\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map severity to ocsf.severity\",\"sources\":[\"severity\"],\"target\":\"ocsf.severity\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map severity_id to ocsf.severity_id\",\"sources\":[\"severity_id\"],\"target\":\"ocsf.severity_id\",\"preserve_source\":true,\"override_on_conflict\":false,\"type\":\"schema-remapper\"}],\"schema\":{\"schema_type\":\"ocsf\",\"version\":\"1.5.0\",\"class_name\":\"Account Change\",\"class_uid\":3001,\"extensions\":[],\"profiles\":[\"cloud\",\"datetime\"]},\"type\":\"schema-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/ReEWRVSbQ-ersoCn0Ibo6g", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Schema Processor and preserve_source true returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-02-20T15:44:02.905Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testPipeline", + "processors": [ + { + "is_enabled": true, + "name": "test_filter", + "sources": [ + "dd.span_id" + ], + "type": "span-id-remapper" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"duWU4bc3ROq5nz7GVi5TzA\",\"type\":\"pipeline\",\"name\":\"testPipeline\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"test_filter\",\"is_enabled\":true,\"sources\":[\"dd.span_id\"],\"type\":\"span-id-remapper\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/duWU4bc3ROq5nz7GVi5TzA", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with Span Id Remapper returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2026-03-18T17:10:40.108Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "Pipeline containing nested processor with tags and description", + "filter": { + "query": "source:python" + }, + "name": "testPipelineWithNested", + "processors": [ + { + "description": "This is a nested pipeline for production logs", + "filter": { + "query": "env:production" + }, + "is_enabled": true, + "name": "nested_pipeline_with_metadata", + "tags": [ + "env:prod", + "type:nested" + ], + "type": "pipeline" + } + ], + "tags": [ + "team:test" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"GyYNpCrVQtOB3KhqJSpOOA\",\"type\":\"pipeline\",\"name\":\"testPipelineWithNested\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"type\":\"pipeline\",\"name\":\"nested_pipeline_with_metadata\",\"is_enabled\":true,\"filter\":{\"query\":\"env:production\"},\"processors\":[],\"tags\":[\"env:prod\",\"type:nested\"],\"description\":\"This is a nested pipeline for production logs\"}],\"tags\":[\"team:test\"],\"description\":\"Pipeline containing nested processor with tags and description\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/GyYNpCrVQtOB3KhqJSpOOA", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with nested pipeline processor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs Pipelines", + "frozen_at": "2025-10-22T19:12:00.030Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "query": "source:python" + }, + "name": "testSchemaProcessor", + "processors": [ + { + "is_enabled": true, + "mappers": [ + { + "categories": [ + { + "filter": { + "query": "@eventName:(*Create*)" + }, + "id": 1, + "name": "Create" + }, + { + "filter": { + "query": "@eventName:(ChangePassword OR PasswordUpdated)" + }, + "id": 3, + "name": "Password Change" + }, + { + "filter": { + "query": "@eventName:(*Attach*)" + }, + "id": 7, + "name": "Attach Policy" + }, + { + "filter": { + "query": "@eventName:(*Detach* OR *Remove*)" + }, + "id": 8, + "name": "Detach Policy" + }, + { + "filter": { + "query": "@eventName:(*Delete*)" + }, + "id": 6, + "name": "Delete" + }, + { + "filter": { + "query": "@eventName:*" + }, + "id": 99, + "name": "Other" + } + ], + "fallback": { + "sources": { + "ocsf.activity_name": [ + "eventName" + ] + }, + "values": { + "ocsf.activity_id": "99", + "ocsf.activity_name": "Other" + } + }, + "name": "activity_id and activity_name", + "targets": { + "id": "ocsf.activity_id", + "name": "ocsf.activity_name" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "-@errorCode:*" + }, + "id": 1, + "name": "Success" + }, + { + "filter": { + "query": "@errorCode:*" + }, + "id": 2, + "name": "Failure" + } + ], + "name": "status", + "targets": { + "id": "ocsf.status_id", + "name": "ocsf.status" + }, + "type": "schema-category-mapper" + }, + { + "categories": [ + { + "filter": { + "query": "@eventName:*" + }, + "id": 1, + "name": "Informational" + } + ], + "name": "Set default severity", + "targets": { + "id": "ocsf.severity_id", + "name": "ocsf.severity" + }, + "type": "schema-category-mapper" + }, + { + "name": "Map userIdentity to ocsf.user.uid", + "sources": [ + "userIdentity.principalId", + "responseElements.role.roleId", + "responseElements.user.userId" + ], + "target": "ocsf.user.uid", + "type": "schema-remapper" + }, + { + "name": "Map userName to ocsf.user.name", + "sources": [ + "requestParameters.userName", + "responseElements.role.roleName", + "requestParameters.roleName", + "responseElements.user.userName" + ], + "target": "ocsf.user.name", + "type": "schema-remapper" + }, + { + "name": "Map api to ocsf.api", + "sources": [ + "api" + ], + "target": "ocsf.api", + "type": "schema-remapper" + }, + { + "name": "Map user to ocsf.user", + "sources": [ + "user" + ], + "target": "ocsf.user", + "type": "schema-remapper" + }, + { + "name": "Map actor to ocsf.actor", + "sources": [ + "actor" + ], + "target": "ocsf.actor", + "type": "schema-remapper" + }, + { + "name": "Map cloud to ocsf.cloud", + "sources": [ + "cloud" + ], + "target": "ocsf.cloud", + "type": "schema-remapper" + }, + { + "name": "Map http_request to ocsf.http_request", + "sources": [ + "http_request" + ], + "target": "ocsf.http_request", + "type": "schema-remapper" + }, + { + "name": "Map metadata to ocsf.metadata", + "sources": [ + "metadata" + ], + "target": "ocsf.metadata", + "type": "schema-remapper" + }, + { + "name": "Map time to ocsf.time", + "sources": [ + "time" + ], + "target": "ocsf.time", + "type": "schema-remapper" + }, + { + "name": "Map src_endpoint to ocsf.src_endpoint", + "sources": [ + "src_endpoint" + ], + "target": "ocsf.src_endpoint", + "type": "schema-remapper" + }, + { + "name": "Map severity to ocsf.severity", + "sources": [ + "severity" + ], + "target": "ocsf.severity", + "type": "schema-remapper" + }, + { + "name": "Map severity_id to ocsf.severity_id", + "sources": [ + "severity_id" + ], + "target": "ocsf.severity_id", + "type": "schema-remapper" + } + ], + "name": "Apply OCSF schema for 3001", + "schema": { + "class_name": "Account Change", + "class_uid": 3001, + "profiles": [ + "cloud", + "datetime" + ], + "schema_type": "ocsf", + "version": "1.5.0" + }, + "type": "schema-processor" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"1unf0vMNQKSSwzsg6BuWMw\",\"type\":\"pipeline\",\"name\":\"testSchemaProcessor\",\"is_enabled\":false,\"is_read_only\":false,\"filter\":{\"query\":\"source:python\"},\"processors\":[{\"name\":\"Apply OCSF schema for 3001\",\"is_enabled\":true,\"mappers\":[{\"name\":\"activity_id and activity_name\",\"categories\":[{\"filter\":{\"query\":\"@eventName:(*Create*)\"},\"name\":\"Create\",\"id\":1},{\"filter\":{\"query\":\"@eventName:(ChangePassword OR PasswordUpdated)\"},\"name\":\"Password Change\",\"id\":3},{\"filter\":{\"query\":\"@eventName:(*Attach*)\"},\"name\":\"Attach Policy\",\"id\":7},{\"filter\":{\"query\":\"@eventName:(*Detach* OR *Remove*)\"},\"name\":\"Detach Policy\",\"id\":8},{\"filter\":{\"query\":\"@eventName:(*Delete*)\"},\"name\":\"Delete\",\"id\":6},{\"filter\":{\"query\":\"@eventName:*\"},\"name\":\"Other\",\"id\":99}],\"targets\":{\"name\":\"ocsf.activity_name\",\"id\":\"ocsf.activity_id\"},\"fallback\":{\"values\":{\"ocsf.activity_id\":\"99\",\"ocsf.activity_name\":\"Other\"},\"sources\":{\"ocsf.activity_name\":[\"eventName\"]}},\"type\":\"schema-category-mapper\"},{\"name\":\"status\",\"categories\":[{\"filter\":{\"query\":\"-@errorCode:*\"},\"name\":\"Success\",\"id\":1},{\"filter\":{\"query\":\"@errorCode:*\"},\"name\":\"Failure\",\"id\":2}],\"targets\":{\"name\":\"ocsf.status\",\"id\":\"ocsf.status_id\"},\"fallback\":{\"values\":{},\"sources\":{}},\"type\":\"schema-category-mapper\"},{\"name\":\"Set default severity\",\"categories\":[{\"filter\":{\"query\":\"@eventName:*\"},\"name\":\"Informational\",\"id\":1}],\"targets\":{\"name\":\"ocsf.severity\",\"id\":\"ocsf.severity_id\"},\"fallback\":{\"values\":{},\"sources\":{}},\"type\":\"schema-category-mapper\"},{\"name\":\"Map userIdentity to ocsf.user.uid\",\"sources\":[\"userIdentity.principalId\",\"responseElements.role.roleId\",\"responseElements.user.userId\"],\"target\":\"ocsf.user.uid\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map userName to ocsf.user.name\",\"sources\":[\"requestParameters.userName\",\"responseElements.role.roleName\",\"requestParameters.roleName\",\"responseElements.user.userName\"],\"target\":\"ocsf.user.name\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map api to ocsf.api\",\"sources\":[\"api\"],\"target\":\"ocsf.api\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map user to ocsf.user\",\"sources\":[\"user\"],\"target\":\"ocsf.user\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map actor to ocsf.actor\",\"sources\":[\"actor\"],\"target\":\"ocsf.actor\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map cloud to ocsf.cloud\",\"sources\":[\"cloud\"],\"target\":\"ocsf.cloud\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map http_request to ocsf.http_request\",\"sources\":[\"http_request\"],\"target\":\"ocsf.http_request\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map metadata to ocsf.metadata\",\"sources\":[\"metadata\"],\"target\":\"ocsf.metadata\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map time to ocsf.time\",\"sources\":[\"time\"],\"target\":\"ocsf.time\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map src_endpoint to ocsf.src_endpoint\",\"sources\":[\"src_endpoint\"],\"target\":\"ocsf.src_endpoint\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map severity to ocsf.severity\",\"sources\":[\"severity\"],\"target\":\"ocsf.severity\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"},{\"name\":\"Map severity_id to ocsf.severity_id\",\"sources\":[\"severity_id\"],\"target\":\"ocsf.severity_id\",\"preserve_source\":false,\"override_on_conflict\":false,\"type\":\"schema-remapper\"}],\"schema\":{\"schema_type\":\"ocsf\",\"version\":\"1.5.0\",\"class_name\":\"Account Change\",\"class_uid\":3001,\"extensions\":[],\"profiles\":[\"cloud\",\"datetime\"]},\"type\":\"schema-processor\"}],\"tags\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/1unf0vMNQKSSwzsg6BuWMw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a pipeline with schema processor", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/logs.json b/test-server-data/v1/logs.json new file mode 100644 index 0000000000..3ade4a2a92 --- /dev/null +++ b/test-server-data/v1/logs.json @@ -0,0 +1,83 @@ +{ + "feature": "Logs", + "recordings": [ + { + "feature": "Logs", + "frozen_at": "2022-04-12T14:46:01.054Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "index": "main", + "query": "host:Test*", + "sort": "asc", + "time": { + "from": "2022-04-12T13:46:01.054Z", + "timezone": "Europe/Paris", + "to": "2022-04-12T14:46:01.054Z" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/logs-queries/list", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"done\",\"nextLogId\":\"AQAAAYAeNzBYpo9uwQAAAABBWUFlTnphX0FBQ3ZDWWkzMEhwV3lnQUE\",\"logs\":[{\"content\":{\"attributes\":{\"timestamp\":1649772129000,\"hostname\":\"Test-Go-TestLogsList-1649773129\"},\"host\":\"Test-Go-TestLogsList-1649773129\",\"tags\":[\"source:go-client-test-test-go-testlogslist-1649773129\",\"source:go-client-test-test-go-testlogslist-1649773129\",\"test\",\"go\",\"list\"],\"message\":\"test-log-list-1 Test-Go-TestLogsList-1649773129\",\"timestamp\":\"2022-04-12T14:02:09.000Z\"},\"id\":\"AQAAAYAeFOro88x3gAAAAABBWUFlSkRBTUFBQTYxd2RPZWdXdkVRQUE\"},{\"content\":{\"attributes\":{\"timestamp\":1649772161000,\"hostname\":\"Test-Go-TestLogsListGet-1649773161\"},\"host\":\"Test-Go-TestLogsListGet-1649773161\",\"tags\":[\"source:go-client-test-test-go-testlogslistget-1649773161\",\"test\",\"go\",\"list\",\"source:go-client-test-test-go-testlogslistget-1649773161\"],\"message\":\"test-log-list-1 Test-Go-TestLogsListGet-1649773161\",\"timestamp\":\"2022-04-12T14:02:41.000Z\"},\"id\":\"AQAAAYAeFWfoHAiocAAAAABBWUFlSkt1ZEFBQXVPblNhLTVqU2xnQUE\"},{\"content\":{\"attributes\":{\"timestamp\":1649773128000,\"hostname\":\"Test-Go-TestLogsList-1649773129\"},\"host\":\"Test-Go-TestLogsList-1649773129\",\"tags\":[\"source:go-client-test-test-go-testlogslist-1649773129\",\"source:go-client-test-test-go-testlogslist-1649773129\",\"test\",\"go\",\"list\"],\"message\":\"test-log-list-2 Test-Go-TestLogsList-1649773129\",\"timestamp\":\"2022-04-12T14:18:48.000Z\"},\"id\":\"AQAAAYAeJClARmc41AAAAABBWUFlSkRCY0FBQnhWWklPUUhyckd3QUE\"},{\"content\":{\"attributes\":{\"timestamp\":1649773160000,\"hostname\":\"Test-Go-TestLogsListGet-1649773161\"},\"host\":\"Test-Go-TestLogsListGet-1649773161\",\"tags\":[\"source:go-client-test-test-go-testlogslistget-1649773161\",\"test\",\"go\",\"list\",\"source:go-client-test-test-go-testlogslistget-1649773161\"],\"message\":\"test-log-list-2 Test-Go-TestLogsListGet-1649773161\",\"timestamp\":\"2022-04-12T14:19:20.000Z\"},\"id\":\"AQAAAYAeJKZAhvnyzgAAAABBWUFlSkt2b0FBQVI1Q0EtS2JyRnJRQUE\"},{\"content\":{\"attributes\":{\"timestamp\":1649773195000,\"hostname\":\"Test-Go-TestLogsList-1649774195\"},\"host\":\"Test-Go-TestLogsList-1649774195\",\"tags\":[\"source:go-client-test-test-go-testlogslist-1649774195\",\"test\",\"go\",\"list\",\"source:go-client-test-test-go-testlogslist-1649774195\"],\"message\":\"test-log-list-1 Test-Go-TestLogsList-1649774195\",\"timestamp\":\"2022-04-12T14:19:55.000Z\"},\"id\":\"AQAAAYAeJS745UJvLwAAAABBWUFlTkhOWUFBQmtWQk8zVXkwTDN3QUE\"},{\"content\":{\"attributes\":{\"timestamp\":1649773317000,\"hostname\":\"Test-Go-TestLogsList-1649773318\"},\"host\":\"Test-Go-TestLogsList-1649773318\",\"tags\":[\"source:go-client-test-1649773318743602624\",\"test\",\"go\",\"list\",\"source:go-client-test-1649773318743602624\"],\"message\":\"test-log-list-1649773318743602624\",\"timestamp\":\"2022-04-12T14:21:57.000Z\"},\"id\":\"AQAAAYAeJwuIithnHAAAAABBWUFlSnhMcUFBQnkzcFE3ZlVPOGVRQUE\"},{\"content\":{\"attributes\":{\"timestamp\":1649773318000,\"hostname\":\"Test-Go-TestLogsList-1649773318\"},\"host\":\"Test-Go-TestLogsList-1649773318\",\"tags\":[\"source:go-client-test-1649773318743602624\",\"test\",\"go\",\"list\",\"source:go-client-test-1649773318743602624\"],\"message\":\"second-test-log-list-1649773318743602624\",\"timestamp\":\"2022-04-12T14:21:58.000Z\"},\"id\":\"AQAAAYAeJw9w5m-WVwAAAABBWUFlSnhOMkFBQU1DVVRPSzJMVDlBQUE\"},{\"content\":{\"attributes\":{\"timestamp\":1649773376000,\"hostname\":\"Test-Go-TestLogsList-1649774376\"},\"host\":\"Test-Go-TestLogsList-1649774376\",\"tags\":[\"source:go-client-test-test-go-testlogslist-1649774376\",\"test\",\"go\",\"source:go-client-test-test-go-testlogslist-1649774376\",\"list\"],\"message\":\"test-log-list-1 Test-Go-TestLogsList-1649774376\",\"timestamp\":\"2022-04-12T14:22:56.000Z\"},\"id\":\"AQAAAYAeJ_IAoerAgAAAAABBWUFlTnpZWUFBQ29QaE5GdHgxcjJnQUE\"},{\"content\":{\"attributes\":{\"timestamp\":1649773408000,\"hostname\":\"Test-Go-TestLogsListGet-1649774408\"},\"host\":\"Test-Go-TestLogsListGet-1649774408\",\"tags\":[\"source:go-client-test-test-go-testlogslistget-1649774408\",\"test\",\"go\",\"list\",\"source:go-client-test-test-go-testlogslistget-1649774408\"],\"message\":\"test-log-list-1 Test-Go-TestLogsListGet-1649774408\",\"timestamp\":\"2022-04-12T14:23:28.000Z\"},\"id\":\"AQAAAYAeKG8Ao6McCAAAAABBWUFlTjdLZEFBRHFMTW9ZX2RTdzdnQUE\"},{\"content\":{\"attributes\":{\"timestamp\":1649774194000,\"hostname\":\"Test-Go-TestLogsList-1649774195\"},\"host\":\"Test-Go-TestLogsList-1649774195\",\"tags\":[\"source:go-client-test-test-go-testlogslist-1649774195\",\"test\",\"go\",\"list\",\"source:go-client-test-test-go-testlogslist-1649774195\"],\"message\":\"test-log-list-2 Test-Go-TestLogsList-1649774195\",\"timestamp\":\"2022-04-12T14:36:34.000Z\"},\"id\":\"AQAAAYAeNG1Q5fBvLwAAAABBWUFlTkhQakFBQmtWQk8zVXkwTXNnQUE\"}],\"requestId\":\"pddv1ChZ0T0JqMzFnX1FQaWdGd21BTU1hckl3IiwKHC8XTMg_fLTUGsRepyDllkNF3vCLTnkHA-t3jZYSDMSnnSl0VC9gKVQz5Q\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search test logs returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Logs", + "frozen_at": "2022-04-12T14:46:46.337Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": [ + { + "ddtags": "host:TestSendlogsreturnsResponsefromserveralways200emptyJSONresponse1649774806", + "message": "Test-Send_logs_returns_Response_from_server_always_200_empty_JSON_response-1649774806" + } + ] + }, + "content_type": "application/json", + "method": "POST", + "path": "/v1/input", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Send logs returns \"Response from server (always 200 empty JSON).\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/metrics.json b/test-server-data/v1/metrics.json new file mode 100644 index 0000000000..d72f5282c1 --- /dev/null +++ b/test-server-data/v1/metrics.json @@ -0,0 +1,98 @@ +{ + "feature": "Metrics", + "recordings": [ + { + "feature": "Metrics", + "frozen_at": "2022-01-06T00:50:52.650Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/query", + "query": [ + [ + "from", + "1641343852" + ], + [ + "query", + "system.cpu.idle{*}" + ], + [ + "to", + "1641430252" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"ok\",\"resp_version\":1,\"series\":[{\"end\":1641430499000,\"attributes\":{},\"metric\":\"system.cpu.idle\",\"interval\":300,\"tag_set\":[],\"start\":1641344100000,\"length\":288,\"query_index\":0,\"aggr\":null,\"scope\":\"*\",\"pointlist\":[[1641344100000,91.4583840476142],[1641344400000,91.5041914039484],[1641344700000,91.5031727472941],[1641345000000,91.39889285551104],[1641345300000,91.47619551653302],[1641345600000,91.64146314991845],[1641345900000,91.64735362264845],[1641346200000,91.55526781082153],[1641346500000,91.6371850013733],[1641346800000,91.68250057962206],[1641347100000,91.60082637998792],[1641347400000,91.4950697009124],[1641347700000,91.64827139017969],[1641348000000,91.64833300908407],[1641348300000,91.60905449845818],[1641348600000,91.56596363323361],[1641348900000,91.63685929510328],[1641349200000,91.64933202519764],[1641349500000,91.6107414714451],[1641349800000,91.40454476409488],[1641350100000,91.59469479454889],[1641350400000,91.67022712495591],[1641350700000,91.604996670617],[1641351000000,91.47990549405417],[1641351300000,91.69391924540201],[1641351600000,91.62421916590796],[1641351900000,91.5023226434174],[1641352200000,91.5819918030467],[1641352500000,91.32184710237715],[1641352800000,91.61898436016507],[1641353100000,91.45793066131935],[1641353400000,91.47088284438915],[1641353700000,91.54457744855559],[1641354000000,91.45134286960187],[1641354300000,91.29632735651964],[1641354600000,91.58744257537413],[1641354900000,91.57655964692434],[1641355200000,91.57526417838203],[1641355500000,91.49192513889737],[1641355800000,91.70287729774773],[1641356100000,91.6411153263516],[1641356400000,91.62927407977962],[1641356700000,91.46810295846727],[1641357000000,91.60543678071764],[1641357300000,91.82811136352284],[1641357600000,91.64562135802375],[1641357900000,91.62629457967859],[1641358200000,91.83713339699639],[1641358500000,91.8269237306383],[1641358800000,91.51536819372285],[1641359100000,91.8249406920539],[1641359400000,91.78771849738227],[1641359700000,91.76375472212636],[1641360000000,91.63237387869093],[1641360300000,91.88244188096789],[1641360600000,91.79242520862155],[1641360900000,91.93073253525036],[1641361200000,91.67918115191989],[1641361500000,91.79578322938035],[1641361800000,91.83651844130623],[1641362100000,91.71130581961738],[1641362400000,91.75250519381629],[1641362700000,91.8158536169264],[1641363000000,91.81006436612871],[1641363300000,91.59950379265679],[1641363600000,91.83079908688863],[1641363900000,91.87493492762248],[1641364200000,91.82101196712918],[1641364500000,91.64744385660694],[1641364800000,91.83770509295994],[1641365100000,91.9685140838198],[1641365400000,91.7531249417199],[1641365700000,91.67300949949126],[1641366000000,91.79345592127906],[1641366300000,91.73485231929355],[1641366600000,91.55070868598091],[1641366900000,91.55139268650098],[1641367200000,91.78447139528063],[1641367500000,91.80046057171292],[1641367800000,91.5173837767707],[1641368100000,91.61783748732672],[1641368400000,91.54000244565661],[1641368700000,91.63637002838982],[1641369000000,91.41091106732686],[1641369300000,91.66854822702248],[1641369600000,91.61027587254843],[1641369900000,91.8198676082675],[1641370200000,91.48600738578372],[1641370500000,91.65683332901428],[1641370800000,91.58071227555864],[1641371100000,91.75540946981761],[1641371400000,91.40112875302633],[1641371700000,91.64639356815616],[1641372000000,91.61510000814938],[1641372300000,91.72173411051432],[1641372600000,91.62555447684394],[1641372900000,91.79817406958041],[1641373200000,91.74562991725074],[1641373500000,91.86465620458796],[1641373800000,91.24777637248238],[1641374100000,91.28208885478476],[1641374400000,91.72878638108571],[1641374700000,91.80307694541084],[1641375000000,91.70750335057576],[1641375300000,91.61170747426635],[1641375600000,91.72786082956526],[1641375900000,91.69985788228125],[1641376200000,91.70830994711982],[1641376500000,91.42228098445469],[1641376800000,91.53042177624172],[1641377100000,91.45339036920217],[1641377400000,91.4914351346433],[1641377700000,91.49156963800391],[1641378000000,91.1925335463199],[1641378300000,91.5098435515512],[1641378600000,91.44923543930054],[1641378900000,91.38144797153687],[1641379200000,91.37314377970702],[1641379500000,91.07517932380378],[1641379800000,91.38893212153259],[1641380100000,91.48836210038927],[1641380400000,91.35306127866109],[1641380700000,91.41644689771864],[1641381000000,90.70442303137646],[1641381300000,90.5452809771209],[1641381600000,90.44131157826112],[1641381900000,90.40943036905179],[1641382200000,90.44440485959252],[1641382500000,90.56780553381476],[1641382800000,90.48764892874493],[1641383100000,90.43074540868402],[1641383400000,90.5824447657499],[1641383700000,90.75651845816108],[1641384000000,91.19129668341742],[1641384300000,91.30137800504376],[1641384600000,91.46162503560384],[1641384900000,91.52540822558933],[1641385200000,91.52876079347399],[1641385500000,91.37858486175537],[1641385800000,91.46291462315453],[1641386100000,91.6234224548553],[1641386400000,91.51284049881829],[1641386700000,91.34657513300577],[1641387000000,91.42922646506538],[1641387300000,91.48473983208338],[1641387600000,91.28626111762391],[1641387900000,91.35474940248662],[1641388200000,91.17215468039116],[1641388500000,91.25213211476803],[1641388800000,91.25759713401398],[1641389100000,91.35257386300299],[1641389400000,91.02812589252933],[1641389700000,91.41853598842408],[1641390000000,91.45897751119402],[1641390300000,91.62772102196124],[1641390600000,92.20752756860522],[1641390900000,92.29176454703901],[1641391200000,92.58568714596228],[1641391500000,92.64857687950135],[1641391800000,91.60252126235535],[1641392100000,92.07325382232666],[1641392400000,92.56517137951322],[1641392700000,92.6158628010883],[1641393000000,92.5046836535136],[1641393300000,92.47737197875976],[1641393600000,92.51129247097487],[1641393900000,92.55673711564806],[1641394200000,92.4507606877221],[1641394500000,92.44528956943088],[1641394800000,92.44404655328675],[1641395100000,92.43119719315644],[1641395400000,92.30592030169917],[1641395700000,92.04047742731431],[1641396000000,92.18200544774885],[1641396300000,92.25607670054717],[1641396600000,91.95815483729045],[1641396900000,92.20461293226163],[1641397200000,92.25607823764577],[1641397500000,92.19817066192627],[1641397800000,91.98498399678398],[1641398100000,91.95959983739783],[1641398400000,91.947825273554],[1641398700000,92.10948289702921],[1641399000000,92.04185757076038],[1641399300000,91.99625027673484],[1641399600000,92.1873156643478],[1641399900000,92.06891627592199],[1641400200000,92.17572241951437],[1641400500000,91.928531702827],[1641400800000,91.89875818420859],[1641401100000,92.02493725944967],[1641401400000,92.05820066304435],[1641401700000,91.9271954985226],[1641402000000,92.21116073879264],[1641402300000,92.11612153333776],[1641402600000,92.07739142810597],[1641402900000,91.63052563695513],[1641403200000,91.95567397510304],[1641403500000,91.87723540137796],[1641403800000,91.80574440114638],[1641404100000,91.37614344428567],[1641404400000,91.52692311755298],[1641404700000,91.58393126442319],[1641405000000,91.55885541791747],[1641405300000,91.63297178605023],[1641405600000,91.85666959425983],[1641405900000,91.84757611330818],[1641406200000,91.82785610872156],[1641406500000,91.6926298085381],[1641406800000,91.80897698682897],[1641407100000,91.81487545406117],[1641407400000,91.71996014258441],[1641407700000,91.63284342387725],[1641408000000,91.92274656856762],[1641408300000,91.913872831008],[1641408600000,91.91599021799423],[1641408900000,91.81734533029444],[1641409200000,91.90980803545783],[1641409500000,91.9293529959286],[1641409800000,91.99156124171088],[1641410100000,91.71573756855621],[1641410400000,91.9281431422514],[1641410700000,92.04222091787001],[1641411000000,91.9644570237786],[1641411300000,91.7861502198612],[1641411600000,91.96730526194852],[1641411900000,92.00860683216769],[1641412200000,92.20460202708047],[1641412500000,91.79860701841467],[1641412800000,91.95550877066219],[1641413100000,92.0970712886137],[1641413400000,92.0148691962747],[1641413700000,91.72668684900334],[1641414000000,91.96204021958744],[1641414300000,91.96983540058136],[1641414600000,92.03032063309257],[1641414900000,92.10227399152868],[1641415200000,91.90314974264409],[1641415500000,92.18463599261115],[1641415800000,92.18319775508],[1641416100000,92.2249844382791],[1641416400000,91.9113616438473],[1641416700000,92.12212062162511],[1641417000000,92.08930573378794],[1641417300000,92.14093544342938],[1641417600000,91.99144462136661],[1641417900000,92.34971699434168],[1641418200000,92.21405573202524],[1641418500000,92.2182962810292],[1641418800000,92.11484740481657],[1641419100000,92.27965920392205],[1641419400000,92.27074483983657],[1641419700000,92.33734947125588],[1641420000000,91.9694701419157],[1641420300000,92.29670916164622],[1641420600000,92.16346239202163],[1641420900000,92.12477345747106],[1641421200000,91.96223023980856],[1641421500000,92.33720078748816],[1641421800000,92.25890328898232],[1641422100000,92.5078399251904],[1641422400000,92.05760524399888],[1641422700000,92.10845380421927],[1641423000000,91.96173074691606],[1641423300000,92.17273982459977],[1641423600000,92.17949648885165],[1641423900000,92.03903611595109],[1641424200000,92.1200080647188],[1641424500000,92.17361622978659],[1641424800000,92.22343405555276],[1641425100000,92.09595156837912],[1641425400000,92.2483305426205],[1641425700000,92.29114520129035],[1641426000000,92.26668053795309],[1641426300000,92.0330425022605],[1641426600000,92.2522668726304],[1641426900000,92.32077056660371],[1641427200000,92.19796084796681],[1641427500000,91.91657638831957],[1641427800000,92.21110992656696],[1641428100000,92.22914677788229],[1641428400000,92.17648312624763],[1641428700000,91.87432740983509],[1641429000000,92.17954061592326],[1641429300000,92.28655851347156],[1641429600000,92.26399639354032],[1641429900000,92.05671568477855],[1641430200000,92.57754687873684]],\"expression\":\"system.cpu.idle{*}\",\"unit\":[{\"family\":\"percentage\",\"scale_factor\":1,\"name\":\"percent\",\"short_name\":\"%\",\"plural\":\"percent\",\"id\":17},null],\"display_name\":\"system.cpu.idle\"}],\"to_date\":1641430252000,\"query\":\"system.cpu.idle{*}\",\"message\":\"\",\"res_type\":\"time_series\",\"times\":[],\"from_date\":1641343852000,\"group_by\":[],\"values\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Query timeseries points returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Metrics", + "frozen_at": "2022-05-12T09:50:05.237Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "series": [ + { + "metric": "system.load.1", + "points": [ + [ + 1652349005, + 1.1 + ] + ], + "tags": [ + "test:TestSubmitmetricsreturnsPayloadacceptedresponse1652349005" + ], + "type": "gauge" + } + ] + } + }, + "content_type": "text/json", + "method": "POST", + "path": "/api/v1/series", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\": \"ok\"}" + }, + "headers": { + "content-type": "text/json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Submit metrics returns \"Payload accepted\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/monitors.json b/test-server-data/v1/monitors.json new file mode 100644 index 0000000000..4e5239cc94 --- /dev/null +++ b/test-server-data/v1/monitors.json @@ -0,0 +1,3075 @@ +{ + "feature": "Monitors", + "recordings": [ + { + "feature": "Monitors", + "frozen_at": "2025-11-21T18:03:25.715Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Check_if_a_monitor_can_be_deleted_returns_OK_response-1763748205", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testcheckifamonitorcanbedeletedreturnsokresponse1763748205", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":238669218,\"org_id\":197728,\"type\":\"log alert\",\"name\":\"Test-Check_if_a_monitor_can_be_deleted_returns_OK_response-1763748205\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testcheckifamonitorcanbedeletedreturnsokresponse1763748205\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1763748206000,\"created\":\"2025-11-21T18:03:26.123200+00:00\",\"modified\":\"2025-11-21T18:03:26.123200+00:00\",\"deleted\":null,\"priority\":3,\"restricted_roles\":null,\"restriction_policy\":null,\"draft_status\":\"published\",\"assets\":[],\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":\"Kevin Pombo\",\"handle\":\"kevin.pombo@datadoghq.com\",\"email\":\"kevin.pombo@datadoghq.com\",\"id\":25712273}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor/can_delete", + "query": [ + [ + "monitor_ids", + "238669218" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"ok\":[238669218]},\"errors\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/238669218", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":238669218}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Check if a monitor can be deleted returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2025-01-17T11:21:26.452Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Example Monitor", + "options": { + "include_tags": true, + "thresholds": { + "critical": 5, + "warning": 3 + }, + "variables": [ + { + "aggregator": "sum", + "data_source": "cloud_cost", + "name": "query1", + "query": "sum:aws.cost.net.amortized.shared.resources.allocated{aws_product IN (amplify ,athena, backup, bedrock ) } by {aws_product}.rollup(sum, 86400)" + } + ] + }, + "priority": 3, + "query": "formula(\"exclude_null(query1)\").last(\"7d\").anomaly(direction=\"above\", threshold=10) >= 5", + "tags": [ + "test:examplemonitor", + "env:ci" + ], + "type": "cost alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":162921056,\"org_id\":321813,\"type\":\"cost alert\",\"name\":\"Example Monitor\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:examplemonitor\",\"env:ci\"],\"query\":\"formula(\\\"exclude_null(query1)\\\").last(\\\"7d\\\").anomaly(direction=\\\"above\\\", threshold=10) >= 5\",\"options\":{\"include_tags\":true,\"thresholds\":{\"critical\":5.0,\"warning\":3.0},\"variables\":[{\"aggregator\":\"sum\",\"data_source\":\"cloud_cost\",\"name\":\"query1\",\"query\":\"sum:aws.cost.net.amortized.shared.resources.allocated{aws_product IN (amplify ,athena, backup, bedrock ) } by {aws_product}.rollup(sum, 86400)\"}],\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"silenced\":{}},\"multi\":false,\"created_at\":1737112886000,\"created\":\"2025-01-17T11:21:26.560275+00:00\",\"modified\":\"2025-01-17T11:21:26.560275+00:00\",\"deleted\":null,\"priority\":3,\"restricted_roles\":null,\"restriction_policy\":null,\"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}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/162921056", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":162921056}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a Cost Monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2026-05-14T10:58:54.153Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"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}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/283063470", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":283063470}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a Data Jobs monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2026-01-12T17:23:49.629Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "Data quality alert triggered", + "name": "Test-Create_a_Data_Quality_monitor_returns_OK_response-1768238629", + "options": { + "thresholds": { + "critical": 100 + }, + "variables": [ + { + "data_source": "data_quality_metrics", + "filter": "search for column where `database:production AND table:users`", + "group_by": [ + "entity_id" + ], + "measure": "row_count", + "name": "query1" + } + ] + }, + "priority": 3, + "query": "formula(\"query1\").last(\"5m\") > 100", + "tags": [ + "test:testcreateadataqualitymonitorreturnsokresponse1768238629", + "env:ci" + ], + "type": "data-quality alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":250323411,\"org_id\":321813,\"type\":\"data-quality alert\",\"name\":\"Test-Create_a_Data_Quality_monitor_returns_OK_response-1768238629\",\"message\":\"Data quality alert triggered\",\"tags\":[\"test:testcreateadataqualitymonitorreturnsokresponse1768238629\",\"env:ci\"],\"query\":\"formula(\\\"query1\\\").last(\\\"5m\\\") > 100\",\"options\":{\"thresholds\":{\"critical\":100.0},\"variables\":[{\"data_source\":\"data_quality_metrics\",\"filter\":\"search for column where `database:production AND table:users`\",\"group_by\":[\"entity_id\"],\"measure\":\"row_count\",\"name\":\"query1\"}],\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"silenced\":{}},\"multi\":false,\"created_at\":1768238629000,\"created\":\"2026-01-12T17:23:49.782143+00:00\",\"modified\":\"2026-01-12T17:23:49.782143+00:00\",\"deleted\":null,\"priority\":3,\"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}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/250323411", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":250323411}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a Data Quality monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2026-07-31T16:36:50.561Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "Data quality alert triggered", + "name": "Test-Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response-1785515810", + "options": { + "thresholds": { + "critical": 100 + }, + "variables": [ + { + "data_source": "data_quality_metrics", + "filter": "search for column where `database:production AND table:users`", + "group_by": [ + "entity_id" + ], + "measure": "row_count", + "monitor_options": { + "sensitivity": 2.5 + }, + "name": "query1" + } + ] + }, + "priority": 3, + "query": "formula(\"query1\").last(\"5m\") > 100", + "tags": [ + "test:testcreateadataqualitymonitorwithsensitivityreturnsokresponse1785515810", + "env:ci" + ], + "type": "data-quality alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":310055951,\"org_id\":321813,\"type\":\"data-quality alert\",\"name\":\"Test-Create_a_Data_Quality_monitor_with_sensitivity_returns_OK_response-1785515810\",\"message\":\"Data quality alert triggered\",\"tags\":[\"test:testcreateadataqualitymonitorwithsensitivityreturnsokresponse1785515810\",\"env:ci\"],\"query\":\"formula(\\\"query1\\\").last(\\\"5m\\\") > 100\",\"options\":{\"thresholds\":{\"critical\":100.0},\"variables\":[{\"data_source\":\"data_quality_metrics\",\"filter\":\"search for column where `database:production AND table:users`\",\"group_by\":[\"entity_id\"],\"measure\":\"row_count\",\"monitor_options\":{\"sensitivity\":2.5},\"name\":\"query1\"}],\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"silenced\":{}},\"multi\":false,\"created_at\":1785515810000,\"created\":\"2026-07-31T16:36:50.914551+00:00\",\"modified\":\"2026-07-31T16:36:50.914551+00:00\",\"deleted\":null,\"priority\":3,\"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}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/310055951", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":310055951}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a Data Quality monitor with sensitivity returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-14T22:27:13.829Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_RUM_formula_and_functions_monitor_returns_OK_response-1747261633", + "options": { + "thresholds": { + "critical": 0.8 + }, + "variables": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query2", + "search": { + "query": "" + } + }, + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "status:error" + } + } + ] + }, + "priority": 3, + "query": "formula(\"query2 / query1 * 100\").last(\"15m\") >= 0.8", + "tags": [ + "test:testcreatearumformulaandfunctionsmonitorreturnsokresponse1747261633", + "env:ci" + ], + "type": "rum alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":172140181,\"org_id\":2,\"type\":\"rum alert\",\"name\":\"Test-Create_a_RUM_formula_and_functions_monitor_returns_OK_response-1747261633\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testcreatearumformulaandfunctionsmonitorreturnsokresponse1747261633\",\"env:ci\"],\"query\":\"formula(\\\"query2 / query1 * 100\\\").last(\\\"15m\\\") >= 0.8\",\"options\":{\"thresholds\":{\"critical\":0.8},\"variables\":[{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"rum\",\"group_by\":[],\"indexes\":[\"*\"],\"name\":\"query2\",\"search\":{\"query\":\"\"}},{\"compute\":{\"aggregation\":\"count\"},\"data_source\":\"rum\",\"group_by\":[],\"indexes\":[\"*\"],\"name\":\"query1\",\"search\":{\"query\":\"status:error\"}}],\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"groupby_simple_monitor\":false,\"silenced\":{},\"avalanche_window\":20},\"multi\":false,\"created_at\":1747261634000,\"created\":\"2025-05-14T22:27:14.329045+00:00\",\"modified\":\"2025-05-14T22:27:14.329045+00:00\",\"deleted\":null,\"priority\":3,\"draft_status\":\"published\",\"restricted_roles\":null,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":\"Carl Martensen\",\"handle\":\"carl.martensen@datadoghq.com\",\"email\":\"carl.martensen@datadoghq.com\",\"id\":638339},\"run_as\":null,\"restricted\":true}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/172140181", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":172140181}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a RUM formula and functions monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-03-22T14:54:22.903Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_ci_pipelines_formula_and_functions_monitor_returns_OK_response-1647960862", + "options": { + "thresholds": { + "critical": 0.8 + }, + "variables": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_pipelines", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "@ci.status:error" + } + }, + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_pipelines", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query2", + "search": { + "query": "" + } + } + ] + }, + "priority": 3, + "query": "formula(\"query1 / query2 * 100\").last(\"15m\") >= 0.8", + "tags": [ + "test:testcreateacipipelinesformulaandfunctionsmonitorreturnsokresponse1647960862", + "env:ci" + ], + "type": "ci-pipelines alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"restricted_roles\":null,\"tags\":[\"test:testcreateacipipelinesformulaandfunctionsmonitorreturnsokresponse1647960862\",\"env:ci\"],\"deleted\":null,\"query\":\"formula(\\\"query1 / query2 * 100\\\").last(\\\"15m\\\") >= 0.8\",\"message\":\"some message Notify: @hipchat-channel\",\"id\":66627974,\"multi\":false,\"name\":\"Test-Create_a_ci_pipelines_formula_and_functions_monitor_returns_OK_response-1647960862\",\"created\":\"2022-03-22T14:54:23.352659+00:00\",\"created_at\":1647960863000,\"creator\":{\"id\":1445416,\"handle\":\"frog@datadoghq.com\",\"name\":null,\"email\":\"frog@datadoghq.com\"},\"org_id\":321813,\"modified\":\"2022-03-22T14:54:23.352659+00:00\",\"priority\":3,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"type\":\"ci-pipelines alert\",\"options\":{\"notify_audit\":false,\"silenced\":{},\"include_tags\":true,\"thresholds\":{\"critical\":0.8},\"new_host_delay\":300,\"notify_no_data\":false,\"groupby_simple_monitor\":false,\"variables\":[{\"search\":{\"query\":\"@ci.status:error\"},\"data_source\":\"ci_pipelines\",\"compute\":{\"aggregation\":\"count\"},\"name\":\"query1\",\"indexes\":[\"*\"],\"group_by\":[]},{\"search\":{\"query\":\"\"},\"data_source\":\"ci_pipelines\",\"compute\":{\"aggregation\":\"count\"},\"name\":\"query2\",\"indexes\":[\"*\"],\"group_by\":[]}]}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/66627974", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":66627974}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a ci-pipelines formula and functions monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:50:53.849Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_ci_pipelines_monitor_returns_OK_response-1641430253", + "options": { + "thresholds": { + "critical": 1 + } + }, + "priority": 3, + "query": "ci-pipelines(\"ci_level:pipeline @git.branch:staging* @ci.status:error\").rollup(\"count\").by(\"@git.branch,@ci.pipeline.name\").last(\"5m\") >= 1", + "tags": [ + "test:testcreateacipipelinesmonitorreturnsokresponse1641430253", + "env:ci" + ], + "type": "ci-pipelines alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"restricted_roles\":null,\"tags\":[\"test:testcreateacipipelinesmonitorreturnsokresponse1641430253\",\"env:ci\"],\"deleted\":null,\"query\":\"ci-pipelines(\\\"ci_level:pipeline @git.branch:staging* @ci.status:error\\\").rollup(\\\"count\\\").by(\\\"@git.branch,@ci.pipeline.name\\\").last(\\\"5m\\\") >= 1\",\"message\":\"some message Notify: @hipchat-channel\",\"id\":59800609,\"multi\":true,\"name\":\"Test-Create_a_ci_pipelines_monitor_returns_OK_response-1641430253\",\"created\":\"2022-01-06T00:50:54.050585+00:00\",\"created_at\":1641430254000,\"creator\":{\"id\":1445416,\"handle\":\"frog@datadoghq.com\",\"name\":null,\"email\":\"frog@datadoghq.com\"},\"org_id\":321813,\"modified\":\"2022-01-06T00:50:54.050585+00:00\",\"priority\":3,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"type\":\"ci-pipelines alert\",\"options\":{\"notify_audit\":false,\"locked\":false,\"silenced\":{},\"include_tags\":true,\"thresholds\":{\"critical\":1},\"new_host_delay\":300,\"notify_no_data\":false,\"groupby_simple_monitor\":false}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/59800609", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":59800609}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a ci-pipelines monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-05-13T10:40:35.052Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_ci_tests_formula_and_functions_monitor_returns_OK_response-1652438435", + "options": { + "thresholds": { + "critical": 0.8 + }, + "variables": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_tests", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query1", + "search": { + "query": "@test.status:fail" + } + }, + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_tests", + "group_by": [], + "indexes": [ + "*" + ], + "name": "query2", + "search": { + "query": "" + } + } + ] + }, + "priority": 3, + "query": "formula(\"query1 / query2 * 100\").last(\"15m\") >= 0.8", + "tags": [ + "test:testcreateacitestsformulaandfunctionsmonitorreturnsokresponse1652438435", + "env:ci" + ], + "type": "ci-tests alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"restricted_roles\":null,\"tags\":[\"test:testcreateacitestsformulaandfunctionsmonitorreturnsokresponse1652438435\",\"env:ci\"],\"deleted\":null,\"query\":\"formula(\\\"query1 / query2 * 100\\\").last(\\\"15m\\\") >= 0.8\",\"message\":\"some message Notify: @hipchat-channel\",\"id\":71427772,\"multi\":false,\"name\":\"Test-Create_a_ci_tests_formula_and_functions_monitor_returns_OK_response-1652438435\",\"created\":\"2022-05-13T10:40:35.341131+00:00\",\"created_at\":1652438435000,\"creator\":{\"id\":1445416,\"handle\":\"frog@datadoghq.com\",\"name\":null,\"email\":\"frog@datadoghq.com\"},\"org_id\":321813,\"modified\":\"2022-05-13T10:40:35.341131+00:00\",\"priority\":3,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"type\":\"ci-tests alert\",\"options\":{\"notify_audit\":false,\"silenced\":{},\"include_tags\":true,\"thresholds\":{\"critical\":0.8},\"new_host_delay\":300,\"notify_no_data\":false,\"groupby_simple_monitor\":false,\"variables\":[{\"search\":{\"query\":\"@test.status:fail\"},\"data_source\":\"ci_tests\",\"compute\":{\"aggregation\":\"count\"},\"name\":\"query1\",\"indexes\":[\"*\"],\"group_by\":[]},{\"search\":{\"query\":\"\"},\"data_source\":\"ci_tests\",\"compute\":{\"aggregation\":\"count\"},\"name\":\"query2\",\"indexes\":[\"*\"],\"group_by\":[]}]}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/71427772", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":71427772}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a ci-tests formula and functions monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-05-17T15:10:28.775Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_ci_tests_monitor_returns_OK_response-1652800228", + "options": { + "thresholds": { + "critical": 1 + } + }, + "priority": 3, + "query": "ci-tests(\"type:test @git.branch:staging* @test.status:fail\").rollup(\"count\").by(\"@test.name\").last(\"5m\") >= 1", + "tags": [ + "test:testcreateacitestsmonitorreturnsokresponse1652800228", + "env:ci" + ], + "type": "ci-tests alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"restricted_roles\":null,\"tags\":[\"test:testcreateacitestsmonitorreturnsokresponse1652800228\",\"env:ci\"],\"deleted\":null,\"query\":\"ci-tests(\\\"type:test @git.branch:staging* @test.status:fail\\\").rollup(\\\"count\\\").by(\\\"@test.name\\\").last(\\\"5m\\\") >= 1\",\"message\":\"some message Notify: @hipchat-channel\",\"id\":71774917,\"multi\":true,\"name\":\"Test-Create_a_ci_tests_monitor_returns_OK_response-1652800228\",\"created\":\"2022-05-17T15:10:29.357369+00:00\",\"created_at\":1652800229000,\"creator\":{\"id\":1445416,\"handle\":\"frog@datadoghq.com\",\"name\":null,\"email\":\"frog@datadoghq.com\"},\"org_id\":321813,\"modified\":\"2022-05-17T15:10:29.357369+00:00\",\"priority\":3,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"type\":\"ci-tests alert\",\"options\":{\"notify_audit\":false,\"silenced\":{},\"include_tags\":true,\"thresholds\":{\"critical\":1.0},\"new_host_delay\":300,\"notify_no_data\":false,\"groupby_simple_monitor\":false}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/71774917", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":71774917}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a ci-tests monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2023-01-09T10:07:16.112Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_metric_monitor_returns_OK_response-1673258836", + "options": { + "scheduling_options": { + "evaluation_window": { + "day_starts": "04:00", + "month_starts": 1 + } + }, + "thresholds": { + "critical": 0.5 + } + }, + "query": "avg(current_1mo):avg:system.load.5{*} > 0.5", + "type": "metric alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":107235710,\"org_id\":321813,\"type\":\"query alert\",\"name\":\"Test-Create_a_metric_monitor_returns_OK_response-1673258836\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[],\"query\":\"avg(current_1mo):avg:system.load.5{*} > 0.5\",\"options\":{\"scheduling_options\":{\"evaluation_window\":{\"day_starts\":\"04:00\",\"month_starts\":1}},\"thresholds\":{\"critical\":0.5},\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"silenced\":{}},\"multi\":false,\"created_at\":1673258836000,\"created\":\"2023-01-09T10:07:16.513455+00:00\",\"modified\":\"2023-01-09T10:07:16.513455+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/107235710", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":107235710}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a metric monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-14T22:28:29.992Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "draft_status": "published", + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_metric_monitor_with_a_custom_schedule_returns_OK_response-1747261709", + "options": { + "include_tags": false, + "notify_audit": false, + "on_missing_data": "default", + "scheduling_options": { + "custom_schedule": { + "recurrences": [ + { + "rrule": "FREQ=DAILY;INTERVAL=1", + "start": "2024-10-26T09:13:00", + "timezone": "America/Los_Angeles" + } + ] + }, + "evaluation_window": { + "day_starts": "04:00", + "month_starts": 1 + } + }, + "thresholds": { + "critical": 0.5 + } + }, + "query": "avg(current_1mo):avg:system.load.5{*} > 0.5", + "tags": [], + "type": "query alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":172140210,\"org_id\":2,\"type\":\"query alert\",\"name\":\"Test-Create_a_metric_monitor_with_a_custom_schedule_returns_OK_response-1747261709\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[],\"query\":\"avg(current_1mo):avg:system.load.5{*} > 0.5\",\"options\":{\"include_tags\":false,\"notify_audit\":false,\"scheduling_options\":{\"custom_schedule\":{\"recurrences\":[{\"rrule\":\"FREQ=DAILY;INTERVAL=1\",\"start\":\"2024-10-26T09:13:00\",\"timezone\":\"America/Los_Angeles\"}]},\"evaluation_window\":{\"day_starts\":\"04:00\",\"month_starts\":1}},\"thresholds\":{\"critical\":0.5},\"new_host_delay\":300,\"silenced\":{},\"avalanche_window\":20},\"multi\":false,\"created_at\":1747261710000,\"created\":\"2025-05-14T22:28:30.512529+00:00\",\"modified\":\"2025-05-14T22:28:30.512529+00:00\",\"deleted\":null,\"priority\":null,\"draft_status\":\"published\",\"restricted_roles\":null,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":\"Carl Martensen\",\"handle\":\"carl.martensen@datadoghq.com\",\"email\":\"carl.martensen@datadoghq.com\",\"id\":638339},\"run_as\":null,\"restricted\":true}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/172140210", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":172140210}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a metric monitor with a custom schedule returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:50:54.336Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "query": "query", + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"The value provided for parameter 'query' is invalid: invalid operator specified: \"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a monitor returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-05-12T09:46:20.878Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_a_monitor_returns_OK_response-1652348780" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"61162af2-d1d8-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_monitor_returns_OK_response-1652348780\",\"created_at\":\"2022-05-12T09:46:21.361812+00:00\",\"modified_at\":\"2022-05-12T09:46:21.408035+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_monitor_returns_OK_response-1652348780", + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "restricted_roles": [ + "61162af2-d1d8-11ec-ad3d-da7ad0900002" + ], + "tags": [ + "test:testcreateamonitorreturnsokresponse1652348780", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"restricted_roles\":[\"61162af2-d1d8-11ec-ad3d-da7ad0900002\"],\"tags\":[\"test:testcreateamonitorreturnsokresponse1652348780\",\"env:ci\"],\"deleted\":null,\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"message\":\"some message Notify: @hipchat-channel\",\"id\":71310040,\"multi\":true,\"name\":\"Test-Create_a_monitor_returns_OK_response-1652348780\",\"created\":\"2022-05-12T09:46:21.924878+00:00\",\"created_at\":1652348781000,\"creator\":{\"id\":1445416,\"handle\":\"frog@datadoghq.com\",\"name\":null,\"email\":\"frog@datadoghq.com\"},\"org_id\":321813,\"modified\":\"2022-05-12T09:46:21.924878+00:00\",\"priority\":3,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"type\":\"log alert\",\"options\":{\"notify_audit\":false,\"silenced\":{},\"include_tags\":true,\"new_host_delay\":300,\"notify_no_data\":false,\"groupby_simple_monitor\":false}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/71310040", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":71310040}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/61162af2-d1d8-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2026-03-04T20:59:52.837Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "test message", + "name": "Test-Create_a_monitor_with_aggregate_augmented_query_variables_returns_OK_response-1772657992", + "options": { + "thresholds": { + "critical": 124 + }, + "variables": [ + { + "augment_query": { + "columns": [ + { + "name": "org_id" + }, + { + "name": "name" + } + ], + "data_source": "reference_table", + "name": "filter_query", + "table_name": "test_table" + }, + "base_query": { + "data_source": "metrics", + "name": "query1", + "query": "avg:dd{*} by {org_id}.as_count()" + }, + "compute": [ + { + "aggregation": "max", + "name": "compute_result" + } + ], + "data_source": "aggregate_augmented_query", + "group_by": [ + { + "facet": "org_id" + }, + { + "facet": "name" + } + ], + "join_condition": { + "augment_attribute": "org_id", + "base_attribute": "org_id", + "join_type": "inner" + }, + "name": "query1" + } + ] + }, + "query": "formula(\"query1\").rollup(\"sum\").last(\"5m\") > 124", + "type": "query alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":263469923,\"org_id\":321813,\"type\":\"metric alert\",\"name\":\"Test-Create_a_monitor_with_aggregate_augmented_query_variables_returns_OK_response-1772657992\",\"message\":\"test message\",\"tags\":[],\"query\":\"formula(\\\"query1\\\").rollup(\\\"sum\\\").last(\\\"5m\\\") > 124\",\"options\":{\"thresholds\":{\"critical\":124.0},\"variables\":[{\"augment_query\":{\"columns\":[{\"name\":\"org_id\"},{\"name\":\"name\"}],\"data_source\":\"reference_table\",\"name\":\"filter_query\",\"table_name\":\"test_table\"},\"base_query\":{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:dd{*} by {org_id}.as_count()\"},\"compute\":[{\"aggregation\":\"max\",\"name\":\"compute_result\"}],\"data_source\":\"aggregate_augmented_query\",\"group_by\":[{\"facet\":\"org_id\"},{\"facet\":\"name\"}],\"join_condition\":{\"augment_attribute\":\"org_id\",\"base_attribute\":\"org_id\",\"join_type\":\"inner\"},\"name\":\"query1\"}],\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"silenced\":{}},\"multi\":false,\"created_at\":1772657993000,\"created\":\"2026-03-04T20:59:53.048028+00:00\",\"modified\":\"2026-03-04T20:59:53.048028+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\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/263469923", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":263469923}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a monitor with aggregate augmented query variables returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2026-03-03T19:33:24.886Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "test message", + "name": "Test-Create_a_monitor_with_aggregate_filtered_query_variables_returns_OK_response-1772566404", + "options": { + "thresholds": { + "critical": 100 + }, + "variables": [ + { + "base_query": { + "data_source": "metrics", + "name": "query1", + "query": "max:container.cpu.usage{*} by {kube_cluster_name}.rollup(max)" + }, + "data_source": "aggregate_filtered_query", + "filter_query": { + "columns": [ + { + "name": "cluster_name" + } + ], + "data_source": "reference_table", + "name": "filter_query", + "table_name": "test_table" + }, + "filters": [ + { + "base_attribute": "kube_cluster_name", + "filter_attribute": "cluster_name" + } + ], + "name": "query1" + } + ] + }, + "query": "formula(\"query1\").rollup(\"sum\").last(\"5m\") > 100", + "type": "query alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":263171329,\"org_id\":321813,\"type\":\"metric alert\",\"name\":\"Test-Create_a_monitor_with_aggregate_filtered_query_variables_returns_OK_response-1772566404\",\"message\":\"test message\",\"tags\":[],\"query\":\"formula(\\\"query1\\\").rollup(\\\"sum\\\").last(\\\"5m\\\") > 100\",\"options\":{\"thresholds\":{\"critical\":100.0},\"variables\":[{\"base_query\":{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"max:container.cpu.usage{*} by {kube_cluster_name}.rollup(max)\"},\"data_source\":\"aggregate_filtered_query\",\"filter_query\":{\"columns\":[{\"name\":\"cluster_name\"}],\"data_source\":\"reference_table\",\"name\":\"filter_query\",\"table_name\":\"test_table\"},\"filters\":[{\"base_attribute\":\"kube_cluster_name\",\"filter_attribute\":\"cluster_name\"}],\"name\":\"query1\"}],\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"silenced\":{}},\"multi\":false,\"created_at\":1772566405000,\"created\":\"2026-03-03T19:33:25.076678+00:00\",\"modified\":\"2026-03-03T19:33:25.076678+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\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/263171329", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":263171329}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a monitor with aggregate filtered query variables returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2025-11-21T19:04:55.769Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "assets": [ + { + "category": "runbook", + "name": "Monitor Runbook", + "resource_key": "12345", + "resource_type": "notebook", + "url": "/notebooks/12345" + } + ], + "message": "some message Notify: @hipchat-channel", + "name": "Test-Create_a_monitor_with_assets_returns_OK_response-1763751895", + "options": { + "scheduling_options": { + "evaluation_window": { + "day_starts": "04:00", + "month_starts": 1 + } + }, + "thresholds": { + "critical": 0.5 + } + }, + "query": "avg(current_1mo):avg:system.load.5{*} > 0.5", + "type": "metric alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":238681257,\"org_id\":321813,\"type\":\"query alert\",\"name\":\"Test-Create_a_monitor_with_assets_returns_OK_response-1763751895\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[],\"query\":\"avg(current_1mo):avg:system.load.5{*} > 0.5\",\"options\":{\"scheduling_options\":{\"evaluation_window\":{\"day_starts\":\"04:00\",\"month_starts\":1}},\"thresholds\":{\"critical\":0.5},\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"silenced\":{}},\"multi\":false,\"created_at\":1763751896000,\"created\":\"2025-11-21T19:04:56.060346+00:00\",\"modified\":\"2025-11-21T19:04:56.060346+00:00\",\"deleted\":null,\"priority\":null,\"restricted_roles\":null,\"restriction_policy\":null,\"draft_status\":\"published\",\"assets\":[{\"monitor_id\":238681257,\"name\":\"Monitor Runbook\",\"category\":\"runbook\",\"url\":\"/notebooks/12345\",\"template_variables\":{},\"options\":{},\"resource_key\":\"12345\",\"resource_type\":\"notebook\"}],\"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}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/238681257", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":238681257}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a monitor with assets returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-14T22:17:22.560Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "draft_status": "draft", + "message": "some message", + "name": "Test-Create_an_Error_Tracking_monitor_returns_OK_response-1747261042", + "options": { + "thresholds": { + "critical": 1 + } + }, + "priority": 3, + "query": "error-tracking-rum(\"service:foo AND @error.source:source\").rollup(\"count\").by(\"@issue.id\").last(\"1h\") >= 1", + "tags": [ + "test:testcreateanerrortrackingmonitorreturnsokresponse1747261042", + "env:ci" + ], + "type": "error-tracking alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":172139812,\"org_id\":2,\"type\":\"error-tracking alert\",\"name\":\"Test-Create_an_Error_Tracking_monitor_returns_OK_response-1747261042\",\"message\":\"some message\",\"tags\":[\"test:testcreateanerrortrackingmonitorreturnsokresponse1747261042\",\"env:ci\"],\"query\":\"error-tracking-rum(\\\"service:foo AND @error.source:source\\\").rollup(\\\"count\\\").by(\\\"@issue.id\\\").last(\\\"1h\\\") >= 1\",\"options\":{\"thresholds\":{\"critical\":1.0},\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"groupby_simple_monitor\":false,\"silenced\":{},\"avalanche_window\":20},\"multi\":true,\"created_at\":1747261042000,\"created\":\"2025-05-14T22:17:22.989000+00:00\",\"modified\":\"2025-05-14T22:17:22.989000+00:00\",\"deleted\":null,\"priority\":3,\"draft_status\":\"draft\",\"restricted_roles\":null,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":\"Carl Martensen\",\"handle\":\"carl.martensen@datadoghq.com\",\"email\":\"carl.martensen@datadoghq.com\",\"id\":638339},\"run_as\":null,\"restricted\":true}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/172139812", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":172139812}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an Error Tracking monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2026-08-11T15:01:12.326Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "LLM observability alert triggered", + "name": "Test-Create_an_LLM_Observability_monitor_returns_OK_response-1786460472", + "options": { + "include_tags": true, + "notify_audit": false, + "thresholds": { + "critical": 0 + } + }, + "query": "llm-observability(\"*\").rollup(\"count\").last(\"2h\") > 0", + "tags": [ + "test:testcreateanllmobservabilitymonitorreturnsokresponse1786460472", + "env:ci" + ], + "type": "llm-observability alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":312833678,\"org_id\":321813,\"type\":\"llm-observability alert\",\"name\":\"Test-Create_an_LLM_Observability_monitor_returns_OK_response-1786460472\",\"message\":\"LLM observability alert triggered\",\"tags\":[\"test:testcreateanllmobservabilitymonitorreturnsokresponse1786460472\",\"env:ci\"],\"query\":\"llm-observability(\\\"*\\\").rollup(\\\"count\\\").last(\\\"2h\\\") > 0\",\"options\":{\"include_tags\":true,\"notify_audit\":false,\"thresholds\":{\"critical\":0.0},\"notify_no_data\":false,\"new_host_delay\":300,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":false,\"created_at\":1786460473000,\"created\":\"2026-08-11T15:01:13.078330+00:00\",\"modified\":\"2026-08-11T15:01:13.078330+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\":\"Francesco Pighi\",\"handle\":\"francesco.pighi@datadoghq.com\",\"email\":\"francesco.pighi@datadoghq.com\",\"id\":21235577}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/312833678", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":312833678}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an LLM Observability monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:50:55.834Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a monitor returns \"Item not found error\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2024-10-10T16:40:30.250Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Delete_a_monitor_returns_OK_response-1728578430", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testdeleteamonitorreturnsokresponse1728578430", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":155845206,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Delete_a_monitor_returns_OK_response-1728578430\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testdeleteamonitorreturnsokresponse1728578430\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1728578430000,\"created\":\"2024-10-10T16:40:30.574547+00:00\",\"modified\":\"2024-10-10T16:40:30.574547+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":3,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/155845206", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":155845206}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/155845206", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:50:56.710Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "updated", + "options": { + "evaluation_delay": null, + "new_group_delay": 600, + "new_host_delay": null, + "renotify_interval": null, + "thresholds": { + "critical": 2, + "warning": null + }, + "timeout_h": null + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/monitor/0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Edit a monitor returns \"Monitor Not Found error\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2024-10-10T16:40:19.400Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Edit_a_monitor_returns_OK_response-1728578419", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testeditamonitorreturnsokresponse1728578419", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":155845150,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Edit_a_monitor_returns_OK_response-1728578419\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testeditamonitorreturnsokresponse1728578419\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1728578419000,\"created\":\"2024-10-10T16:40:19.663079+00:00\",\"modified\":\"2024-10-10T16:40:19.663079+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":3,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Edit_a_monitor_returns_OK_response-1728578419-updated", + "options": { + "evaluation_delay": null, + "new_group_delay": 600, + "new_host_delay": null, + "renotify_interval": null, + "thresholds": { + "critical": 2, + "warning": null + }, + "timeout_h": null + }, + "priority": null + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/monitor/155845150", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":155845150,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Edit_a_monitor_returns_OK_response-1728578419-updated\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testeditamonitorreturnsokresponse1728578419\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"evaluation_delay\":null,\"new_group_delay\":600,\"new_host_delay\":null,\"renotify_interval\":null,\"thresholds\":{\"critical\":2.0},\"timeout_h\":null,\"notify_no_data\":false,\"notify_audit\":false,\"include_tags\":true,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1728578419000,\"created\":\"2024-10-10T16:40:19.663079+00:00\",\"modified\":\"2024-10-10T16:40:20.001481+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":null,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/155845150", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":155845150}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Edit a monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:50:57.741Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor/12345", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a monitor's details returns \"Monitor Not Found error\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2024-10-10T16:38:59.821Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Get_a_monitor_s_details_returns_OK_response-1728578339", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testgetamonitorsdetailsreturnsokresponse1728578339", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":155844758,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Get_a_monitor_s_details_returns_OK_response-1728578339\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testgetamonitorsdetailsreturnsokresponse1728578339\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1728578340000,\"created\":\"2024-10-10T16:39:00.138359+00:00\",\"modified\":\"2024-10-10T16:39:00.138359+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":3,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor/155844758", + "query": [ + [ + "with_downtimes", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":155844758,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Get_a_monitor_s_details_returns_OK_response-1728578339\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testgetamonitorsdetailsreturnsokresponse1728578339\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1728578340000,\"created\":\"2024-10-10T16:39:00.138359+00:00\",\"modified\":\"2024-10-10T16:39:00.138359+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":3,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"id\":1445416},\"matching_downtimes\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/155844758", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":155844758}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a monitor's details returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2023-05-22T21:15:19.763Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Get_a_monitor_s_details_with_downtime_returns_OK_response-1684790119", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testgetamonitorsdetailswithdowntimereturnsokresponse1684790119", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":119766008,\"org_id\":717122,\"type\":\"log alert\",\"name\":\"Test-Get_a_monitor_s_details_with_downtime_returns_OK_response-1684790119\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testgetamonitorsdetailswithdowntimereturnsokresponse1684790119\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"silenced\":{}},\"multi\":true,\"created_at\":1684790119000,\"created\":\"2023-05-22T21:15:19.942502+00:00\",\"modified\":\"2023-05-22T21:15:19.942502+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":3,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":\"Kevin Zou\",\"handle\":\"kevin.zou@datadoghq.com\",\"email\":\"kevin.zou@datadoghq.com\",\"id\":4351227}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "end": 1685394919, + "message": "Test-Get_a_monitor_s_details_with_downtime_returns_OK_response-1684790119", + "monitor_id": 119766008, + "mute_first_recovery_notification": true, + "notify_end_states": [ + "alert" + ], + "notify_end_types": [ + "canceled" + ], + "scope": [ + "*" + ], + "start": 1684790119, + "timezone": "Etc/UTC" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":2942947856,\"monitor_id\":119766008,\"org_id\":717122,\"start\":1684790119,\"end\":1685394919,\"canceled\":null,\"created\":1684790120,\"modified\":1684790120,\"message\":\"Test-Get_a_monitor_s_details_with_downtime_returns_OK_response-1684790119\",\"active\":true,\"disabled\":false,\"recurrence\":null,\"timezone\":\"Etc/UTC\",\"parent_id\":null,\"child_id\":null,\"creator_id\":4351227,\"updater_id\":null,\"downtime_type\":0,\"status\":\"active\",\"monitor_tags\":[\"*\"],\"mute_first_recovery_notification\":true,\"notify_end_types\":[\"canceled\"],\"notify_end_states\":[\"alert\"],\"uuid\":\"c1ddf27c-f8e5-11ed-8c5a-da7ad0900002\",\"scope\":[\"*\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor/119766008", + "query": [ + [ + "with_downtimes", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":119766008,\"org_id\":717122,\"type\":\"log alert\",\"name\":\"Test-Get_a_monitor_s_details_with_downtime_returns_OK_response-1684790119\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testgetamonitorsdetailswithdowntimereturnsokresponse1684790119\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"silenced\":{\"*\":1685394919}},\"multi\":true,\"created_at\":1684790119000,\"created\":\"2023-05-22T21:15:19.942502+00:00\",\"modified\":\"2023-05-22T21:15:19.942502+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":3,\"overall_state_modified\":\"2023-05-22T21:15:22+00:00\",\"overall_state\":\"No Data\",\"creator\":{\"name\":\"Kevin Zou\",\"handle\":\"kevin.zou@datadoghq.com\",\"email\":\"kevin.zou@datadoghq.com\",\"id\":4351227},\"matching_downtimes\":[{\"id\":2942947856,\"active\":true,\"monitor_id\":119766008,\"start\":1684790119,\"end\":1685394919,\"scope\":[\"*\"],\"groups\":[\"total\"]}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/downtime/2942947856", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/119766008", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":119766008}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a monitor's details with downtime returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2024-08-06T12:03:16.833Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONPath", + "target": { + "elementsOperator": "atLeastOneElementMatches", + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + }, + { + "operator": "md5", + "target": "a", + "type": "bodyHash" + }, + { + "code": "const hello = 'world';", + "type": "javascript" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testgetasyntheticsmonitorsdetails1722945796" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + }, + "variablesFromScript": "dd.variable.set(\"FOO\", \"foo\")" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Get_a_synthetics_monitor_s_details-1722945796", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Get_a_synthetics_monitor_s_details-1722945796", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"4c7-n7j-xbv\",\"name\":\"Test-Get_a_synthetics_monitor_s_details-1722945796\",\"status\":\"live\",\"type\":\"api\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-08-06T12:03:17.509325+00:00\",\"modified_at\":\"2024-08-06T12:03:17.509325+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"timingsScope\":\"withoutDNS\",\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"elementsOperator\":\"atLeastOneElementMatches\",\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"},{\"operator\":\"md5\",\"target\":\"a\",\"type\":\"bodyHash\"},{\"code\":\"const hello = 'world';\",\"type\":\"javascript\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testgetasyntheticsmonitorsdetails1722945796\"},\"method\":\"GET\",\"persistCookies\":true,\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"variablesFromScript\":\"dd.variable.set(\\\"FOO\\\", \\\"foo\\\")\"},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"httpVersion\":\"http2\",\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Get_a_synthetics_monitor_s_details-1722945796\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"subtype\":\"http\",\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":150677868,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor/150677868", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":150677868,\"org_id\":321813,\"type\":\"synthetics alert\",\"name\":\"Test-Get_a_synthetics_monitor_s_details-1722945796\",\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"tags\":[\"testing:api\",\"probe_dc:aws:us-east-2\",\"check_type:api\",\"check_status:live\",\"ci_execution_rule:blocking\"],\"query\":\"no_query\",\"options\":{\"on_missing_data\":\"show_no_data\",\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true,\"synthetics_check_id\":\"4c7-n7j-xbv\",\"silenced\":{}},\"multi\":false,\"created_at\":1722945797000,\"created\":\"2024-08-06T12:03:17.451148+00:00\",\"modified\":\"2024-08-06T12:03:17.451148+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":5,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "4c7-n7j-xbv" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"4c7-n7j-xbv\",\"deleted_at\":\"2024-08-06T12:03:18.946796+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a synthetics monitor's details", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:50:59.690Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor", + "query": [ + [ + "group_states", + "notagroupstate" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid group_state filters.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get all monitors returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2023-08-28T07:51:42.436Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor", + "query": [ + [ + "page", + "0" + ], + [ + "page_size", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "[{\"id\":34822915,\"org_id\":321813,\"type\":\"query alert\",\"name\":\"SLO Monitor: aws_alb_latency_p95 for splunk\",\"message\":\"Latency SLO violation for splunk load balancer(s)\",\"tags\":[\"environment:test\",\"generator:slops\",\"release:e6a2686\",\"sli:latency\",\"slotype:alb\",\"systemid:splunk\",\"team:developer_insights\"],\"query\":\"avg(last_1m):avg:aws.applicationelb.target_response_time.p95{systemid:splunk,aws_account_type:production} by {region} > 0.2\",\"options\":{\"notify_audit\":false,\"locked\":false,\"include_tags\":true,\"thresholds\":{\"critical\":0.2},\"new_host_delay\":300,\"require_full_window\":true,\"notify_no_data\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1620047024000,\"created\":\"2021-05-03T13:03:44.905085+00:00\",\"modified\":\"2021-05-03T13:03:44.905085+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":null,\"overall_state_modified\":\"2021-05-03T13:06:23+00:00\",\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416},\"matching_downtimes\":[]},{\"id\":34822916,\"org_id\":321813,\"type\":\"query alert\",\"name\":\"SLO Monitor: aws_classic_elb_latency_p99 for splunk\",\"message\":\"Latency SLO violation for splunk load balancer(s)\",\"tags\":[\"environment:test\",\"generator:slops\",\"release:e6a2686\",\"sli:latency\",\"slotype:elb\",\"systemid:splunk\",\"team:developer_insights\"],\"query\":\"avg(last_1m):avg:aws.elb.latency.p99{systemid:splunk,aws_account_type:production} by {region} > 0.2\",\"options\":{\"notify_audit\":false,\"locked\":false,\"include_tags\":true,\"thresholds\":{\"critical\":0.2},\"new_host_delay\":300,\"require_full_window\":true,\"notify_no_data\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1620047024000,\"created\":\"2021-05-03T13:03:44.909928+00:00\",\"modified\":\"2021-05-03T13:03:44.909928+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":null,\"overall_state_modified\":\"2021-05-03T13:06:18+00:00\",\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416},\"matching_downtimes\":[]}]\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor", + "query": [ + [ + "page", + "1" + ], + [ + "page_size", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "[{\"id\":34822917,\"org_id\":321813,\"type\":\"query alert\",\"name\":\"SLO Monitor: aws_alb_latency_p50 for splunk\",\"message\":\"Latency SLO violation for splunk load balancer(s)\",\"tags\":[\"environment:test\",\"generator:slops\",\"release:e6a2686\",\"sli:latency\",\"slotype:alb\",\"systemid:splunk\",\"team:developer_insights\"],\"query\":\"avg(last_1m):avg:aws.applicationelb.target_response_time.p50{systemid:splunk,aws_account_type:production} by {region} > 0.2\",\"options\":{\"notify_audit\":false,\"locked\":false,\"include_tags\":true,\"thresholds\":{\"critical\":0.2},\"new_host_delay\":300,\"require_full_window\":true,\"notify_no_data\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1620047024000,\"created\":\"2021-05-03T13:03:44.920644+00:00\",\"modified\":\"2021-05-03T13:03:44.920644+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":null,\"overall_state_modified\":\"2021-05-03T13:06:37+00:00\",\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416},\"matching_downtimes\":[]}]\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all monitors returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:50:59.989Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor/groups/search", + "query": [ + [ + "query", + "status:notastatus" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Query parsing error: 'notastatus' is not a valid monitor status\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Monitors group search returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:51:00.195Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor/groups/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"counts\":{\"status\":[{\"count\":196,\"name\":\"Alert\"},{\"count\":123,\"name\":\"OK\"}],\"muted\":[{\"count\":319,\"name\":false}],\"tag\":[{\"count\":195,\"name\":\"check_status:live\"},{\"count\":192,\"name\":\"probe_dc:aws:us-east-2\"},{\"count\":192,\"name\":\"testing:api\"},{\"count\":114,\"name\":\"check_type:api\"},{\"count\":27,\"name\":\"check_type:api-udp\"},{\"count\":27,\"name\":\"check_type:api-websocket\"},{\"count\":24,\"name\":\"check_type:api-multi\"},{\"count\":22,\"name\":\"env:ci\"},{\"count\":3,\"name\":\"check_type:api-icmp\"},{\"count\":3,\"name\":\"client:go\"},{\"count\":3,\"name\":\"probe_dc:aws:ap-northeast-1\"},{\"count\":3,\"name\":\"test\"},{\"count\":1,\"name\":\"log\"},{\"count\":1,\"name\":\"terraform\"},{\"count\":1,\"name\":\"test:examplecheckifamonitorcanbedeletedreturnsokresponse1637578686\"},{\"count\":1,\"name\":\"test:examplecheckifamonitorcanbedeletedreturnsokresponse1637578811\"},{\"count\":1,\"name\":\"test:examplecheckifamonitorcanbedeletedreturnsokresponse1637578841\"},{\"count\":1,\"name\":\"test:examplegetamonitorsdetailsreturnsokresponse1640441498\"},{\"count\":1,\"name\":\"test:examplescheduleamonitordowntimereturnsokresponse1640441496\"},{\"count\":1,\"name\":\"test:testcreateanewdashboardwithalertvaluewidget1641382634\"},{\"count\":1,\"name\":\"test:testgocheckifamonitorcanbedeletedreturnsokresponse1639045979\"},{\"count\":1,\"name\":\"test:testgoeditamonitorreturnsokresponse1639046265\"},{\"count\":1,\"name\":\"test:testgogetamonitorsdetailsreturnsokresponse1639046265\"},{\"count\":1,\"name\":\"test:testgoscheduleamonitordowntimereturnsokresponse1639045977\"},{\"count\":1,\"name\":\"test:testpythoncheckifamonitorcanbedeletedreturnsokresponse1638987034\"},{\"count\":1,\"name\":\"test:testpythoncheckifamonitorcanbedeletedreturnsokresponse1639137875\"},{\"count\":1,\"name\":\"test:testpythondeleteamonitorreturnsokresponse1638987038\"},{\"count\":1,\"name\":\"test:testpythoneditamonitorreturnsokresponse1638926914\"},{\"count\":1,\"name\":\"test:testpythoneditamonitorreturnsokresponse1638987036\"},{\"count\":1,\"name\":\"test:testpythongetamonitorsdetailsreturnsokresponse1638987027\"},{\"count\":1,\"name\":\"test:testpythonscheduleamonitordowntimereturnsokresponse1638987043\"},{\"count\":1,\"name\":\"test:testscheduleamonitordowntimereturnsokresponse1640112907\"},{\"count\":1,\"name\":\"test:testtypescripteditamonitorreturnsokresponse1639138007\"},{\"count\":1,\"name\":\"test:testtypescriptgetamonitorsdetailsreturnsokresponse1639138007\"},{\"count\":1,\"name\":\"test:testtypescriptscheduleamonitordowntimereturnsokresponse1640111492\"},{\"count\":1,\"name\":\"test:testtypescriptscheduleamonitordowntimereturnsokresponse1640112725\"}],\"type\":[{\"count\":195,\"name\":\"synthetics\"},{\"count\":54,\"name\":\"custom\"},{\"count\":39,\"name\":\"metric\"},{\"count\":31,\"name\":\"log\"}]},\"groups\":[{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Create_an_API_test_returns_OK_Returns_the_created_test_details_response_1641339729\",\"team_tags\":[],\"last_triggered_ts\":1641339795,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":59586255,\"priority\":5,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Create_an_API_test_returns_OK_Returns_the_created_test_details_response_1641339729\",\"team_tags\":[],\"last_triggered_ts\":1641339795,\"group\":\"aws:us-east-2\",\"downtimes\":[],\"monitor_id\":59586255,\"priority\":5,\"muted\":false,\"group_tags\":[\"aws:us-east-2\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Create_an_API_test_returns_OK_Returns_the_created_test_details_response_1641339729\",\"team_tags\":[],\"last_triggered_ts\":1641339795,\"group\":\"@SYNTHETICS_OVERALL@\",\"downtimes\":[],\"monitor_id\":59586255,\"priority\":5,\"muted\":false,\"group_tags\":[\"@SYNTHETICS_OVERALL@\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Trigger_Synthetics_tests_returns_OK_response_1641339731\",\"team_tags\":[],\"last_triggered_ts\":1641339824,\"group\":\"aws:us-east-2\",\"downtimes\":[],\"monitor_id\":59586284,\"priority\":5,\"muted\":false,\"group_tags\":[\"aws:us-east-2\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Trigger_Synthetics_tests_returns_OK_response_1641339731\",\"team_tags\":[],\"last_triggered_ts\":1641339824,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":59586284,\"priority\":5,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"OK\",\"last_nodata_ts\":0,\"env_tags\":[\"ci\"],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"test:testpythoneditamonitorreturnsokresponse1638926914\",\"env:ci\"],\"monitor_name\":\"Test-Python-Edit_a_monitor_returns_OK_response-1638926914\",\"team_tags\":[],\"last_triggered_ts\":0,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":56889922,\"priority\":3,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"OK\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[],\"monitor_name\":\"[Synthetic Private Locations] {{location_id.name}} is underprovisioned\",\"team_tags\":[],\"last_triggered_ts\":0,\"group\":\"location_id:pl:gcp-integrations-lab-527d63de5764c9fdad65fd1a5ac64a8e\",\"downtimes\":[],\"monitor_id\":52529358,\"priority\":null,\"muted\":false,\"group_tags\":[\"location_id:pl:gcp-integrations-lab-527d63de5764c9fdad65fd1a5ac64a8e\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Trigger_Synthetics_tests_returns_OK_response_1641339731\",\"team_tags\":[],\"last_triggered_ts\":1641339824,\"group\":\"@SYNTHETICS_OVERALL@\",\"downtimes\":[],\"monitor_id\":59586284,\"priority\":5,\"muted\":false,\"group_tags\":[\"@SYNTHETICS_OVERALL@\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Create_an_API_test_returns_OK_Returns_the_created_test_details_response_1641411729\",\"team_tags\":[],\"last_triggered_ts\":1641411818,\"group\":\"aws:us-east-2\",\"downtimes\":[],\"monitor_id\":59701958,\"priority\":5,\"muted\":false,\"group_tags\":[\"aws:us-east-2\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Create_an_API_test_returns_OK_Returns_the_created_test_details_response_1641411729\",\"team_tags\":[],\"last_triggered_ts\":1641411818,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":59701958,\"priority\":5,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Create_an_API_test_returns_OK_Returns_the_created_test_details_response_1641411729\",\"team_tags\":[],\"last_triggered_ts\":1641411818,\"group\":\"@SYNTHETICS_OVERALL@\",\"downtimes\":[],\"monitor_id\":59701958,\"priority\":5,\"muted\":false,\"group_tags\":[\"@SYNTHETICS_OVERALL@\"]},{\"status\":\"OK\",\"last_nodata_ts\":0,\"env_tags\":[\"ci\"],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"test:testtypescripteditamonitorreturnsokresponse1639138007\",\"env:ci\"],\"monitor_name\":\"Test-Typescript-Edit_a_monitor_returns_OK_response-1639138007\",\"team_tags\":[],\"last_triggered_ts\":0,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":57134512,\"priority\":3,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"OK\",\"last_nodata_ts\":0,\"env_tags\":[\"ci\"],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"test:testpythonscheduleamonitordowntimereturnsokresponse1638987043\",\"env:ci\"],\"monitor_name\":\"Test-Python-Schedule_a_monitor_downtime_returns_OK_response-1638987043\",\"team_tags\":[],\"last_triggered_ts\":0,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":56957481,\"priority\":3,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"OK\",\"last_nodata_ts\":0,\"env_tags\":[\"ci\"],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"env:ci\",\"test:examplecheckifamonitorcanbedeletedreturnsokresponse1637578811\"],\"monitor_name\":\"Example-Check_if_a_monitor_can_be_deleted_returns_OK_response_1637578811\",\"team_tags\":[],\"last_triggered_ts\":0,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":55356159,\"priority\":3,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Get_a_synthetics_monitor_s_details_1641339731\",\"team_tags\":[],\"last_triggered_ts\":1641339820,\"group\":\"aws:us-east-2\",\"downtimes\":[],\"monitor_id\":59586280,\"priority\":5,\"muted\":false,\"group_tags\":[\"aws:us-east-2\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Get_a_synthetics_monitor_s_details_1641339731\",\"team_tags\":[],\"last_triggered_ts\":1641339820,\"group\":\"@SYNTHETICS_OVERALL@\",\"downtimes\":[],\"monitor_id\":59586280,\"priority\":5,\"muted\":false,\"group_tags\":[\"@SYNTHETICS_OVERALL@\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Get_a_synthetics_monitor_s_details_1641339731\",\"team_tags\":[],\"last_triggered_ts\":1641339820,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":59586280,\"priority\":5,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Get_a_synthetics_monitor_s_details_1641426133\",\"team_tags\":[],\"last_triggered_ts\":1641426225,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":59771265,\"priority\":5,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Get_a_synthetics_monitor_s_details_1641426133\",\"team_tags\":[],\"last_triggered_ts\":1641426225,\"group\":\"@SYNTHETICS_OVERALL@\",\"downtimes\":[],\"monitor_id\":59771265,\"priority\":5,\"muted\":false,\"group_tags\":[\"@SYNTHETICS_OVERALL@\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Get_a_synthetics_monitor_s_details_1641426133\",\"team_tags\":[],\"last_triggered_ts\":1641426225,\"group\":\"aws:us-east-2\",\"downtimes\":[],\"monitor_id\":59771265,\"priority\":5,\"muted\":false,\"group_tags\":[\"aws:us-east-2\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api-websocket\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Create_an_API_test_with_WEBSOCKET_subtype_returns_OK_Returns_the_created_test_details_response_1641310927\",\"team_tags\":[],\"last_triggered_ts\":1641311003,\"group\":\"@SYNTHETICS_OVERALL@\",\"downtimes\":[],\"monitor_id\":59417123,\"priority\":5,\"muted\":false,\"group_tags\":[\"@SYNTHETICS_OVERALL@\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api-websocket\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Create_an_API_test_with_WEBSOCKET_subtype_returns_OK_Returns_the_created_test_details_response_1641310927\",\"team_tags\":[],\"last_triggered_ts\":1641311003,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":59417123,\"priority\":5,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api-websocket\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Example-Create_an_API_test_with_WEBSOCKET_subtype_returns_OK_Returns_the_created_test_details_response_1641310927\",\"team_tags\":[],\"last_triggered_ts\":1641311003,\"group\":\"aws:us-east-2\",\"downtimes\":[],\"monitor_id\":59417123,\"priority\":5,\"muted\":false,\"group_tags\":[\"aws:us-east-2\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Test-Edit_an_API_test_returns_OK_response-1641382542\",\"team_tags\":[],\"last_triggered_ts\":1641382576,\"group\":\"total\",\"downtimes\":[],\"monitor_id\":59653156,\"priority\":5,\"muted\":false,\"group_tags\":[\"total\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Test-Edit_an_API_test_returns_OK_response-1641382542\",\"team_tags\":[],\"last_triggered_ts\":1641382576,\"group\":\"@SYNTHETICS_OVERALL@\",\"downtimes\":[],\"monitor_id\":59653156,\"priority\":5,\"muted\":false,\"group_tags\":[\"@SYNTHETICS_OVERALL@\"]},{\"status\":\"Alert\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"monitor_name\":\"Test-Edit_an_API_test_returns_OK_response-1641382542\",\"team_tags\":[],\"last_triggered_ts\":1641382576,\"group\":\"aws:us-east-2\",\"downtimes\":[],\"monitor_id\":59653156,\"priority\":5,\"muted\":false,\"group_tags\":[\"aws:us-east-2\"]},{\"status\":\"OK\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[],\"monitor_name\":\"tf-TestAccDatadogMonitorJSONBasic-83207-1638923106\",\"team_tags\":[],\"last_triggered_ts\":0,\"group\":\"host:compute-0\",\"downtimes\":[],\"monitor_id\":56886190,\"priority\":null,\"muted\":false,\"group_tags\":[\"host:compute-0\"]},{\"status\":\"OK\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[],\"monitor_name\":\"tf-TestAccDatadogMonitorJSONBasic-83207-1638923106\",\"team_tags\":[],\"last_triggered_ts\":0,\"group\":\"host:master-0\",\"downtimes\":[],\"monitor_id\":56886190,\"priority\":null,\"muted\":false,\"group_tags\":[\"host:master-0\"]},{\"status\":\"OK\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[],\"monitor_name\":\"tf-TestAccDatadogMonitorJSONBasic-83207-1638923106\",\"team_tags\":[],\"last_triggered_ts\":0,\"group\":\"host:backup-restore-0\",\"downtimes\":[],\"monitor_id\":56886190,\"priority\":null,\"muted\":false,\"group_tags\":[\"host:backup-restore-0\"]},{\"status\":\"OK\",\"last_nodata_ts\":0,\"env_tags\":[],\"muted_remaining\":null,\"muted_until_ts\":null,\"all_tags\":[],\"monitor_name\":\"tf-TestAccDatadogMonitorJSONBasic-83207-1638923106\",\"team_tags\":[],\"last_triggered_ts\":0,\"group\":\"host:pks-db-0\",\"downtimes\":[],\"monitor_id\":56886190,\"priority\":null,\"muted\":false,\"group_tags\":[\"host:pks-db-0\"]}],\"metadata\":{\"total_count\":319,\"page_count\":11,\"page\":0,\"per_page\":30}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Monitors group search returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:51:00.486Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor/search", + "query": [ + [ + "query", + "status:notastatus" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Query parsing error: 'notastatus' is not a valid monitor status\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Monitors search returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:51:00.670Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monitor/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"counts\":{\"status\":[{\"count\":96,\"name\":\"No Data\"},{\"count\":65,\"name\":\"Alert\"},{\"count\":38,\"name\":\"OK\"}],\"muted\":[{\"count\":182,\"name\":false},{\"count\":17,\"name\":true}],\"tag\":[{\"count\":88,\"name\":\"probe_dc:aws:us-east-2\"},{\"count\":77,\"name\":\"check_status:live\"},{\"count\":73,\"name\":\"testing:api\"},{\"count\":50,\"name\":\"check_type:api\"},{\"count\":46,\"name\":\"env:ci\"},{\"count\":17,\"name\":\"check_status:paused\"},{\"count\":13,\"name\":\"check_type:browser\"},{\"count\":13,\"name\":\"testing:browser\"},{\"count\":11,\"name\":\"foo:bar\"},{\"count\":9,\"name\":\"check_type:api-multi\"},{\"count\":9,\"name\":\"check_type:api-udp\"},{\"count\":9,\"name\":\"check_type:api-websocket\"},{\"count\":6,\"name\":\"app:webserver\"},{\"count\":6,\"name\":\"baz\"},{\"count\":6,\"name\":\"frontend\"},{\"count\":6,\"name\":\"probe_dc:aws:eu-central-1\"},{\"count\":4,\"name\":\"environment:test\"},{\"count\":4,\"name\":\"generator:slops\"},{\"count\":4,\"name\":\"release:e6a2686\"},{\"count\":4,\"name\":\"sli:latency\"},{\"count\":4,\"name\":\"systemid:splunk\"},{\"count\":4,\"name\":\"team:developer_insights\"},{\"count\":3,\"name\":\"client:go\"},{\"count\":3,\"name\":\"env:test\"},{\"count\":3,\"name\":\"foo\"},{\"count\":3,\"name\":\"slotype:alb\"},{\"count\":3,\"name\":\"test\"},{\"count\":3,\"name\":\"test:examplecreateacipipelinesmonitorreturnsokresponse\"},{\"count\":2,\"name\":\"bar:baz\"},{\"count\":2,\"name\":\"check_type:api-tcp\"},{\"count\":2,\"name\":\"testing:api-tcp\"},{\"count\":1,\"name\":\"check_type:api-dns\"},{\"count\":1,\"name\":\"check_type:api-ssl\"},{\"count\":1,\"name\":\"log\"},{\"count\":1,\"name\":\"multistep\"},{\"count\":1,\"name\":\"slotype:elb\"},{\"count\":1,\"name\":\"terraform\"},{\"count\":1,\"name\":\"test:examplecheckifamonitorcanbedeletedreturnsokresponse1637578686\"},{\"count\":1,\"name\":\"test:examplecheckifamonitorcanbedeletedreturnsokresponse1637578811\"},{\"count\":1,\"name\":\"test:examplecheckifamonitorcanbedeletedreturnsokresponse1637578841\"},{\"count\":1,\"name\":\"test:examplecreateamonitorreturnsokresponse\"},{\"count\":1,\"name\":\"test:examplegetamonitorsdetailsreturnsokresponse1640441498\"},{\"count\":1,\"name\":\"test:examplescheduleamonitordowntimereturnsokresponse1640441496\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640105320\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114122\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114223\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114238\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114278\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114289\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114357\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114432\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114509\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114535\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640114567\"},{\"count\":1,\"name\":\"test:testcreateacipipelinesmonitorreturnsokresponse1640115169\"},{\"count\":1,\"name\":\"test:testcreateamonitorreturnsokresponse1639067826\"},{\"count\":1,\"name\":\"test:testcreateamonitorreturnsokresponse1639072243\"},{\"count\":1,\"name\":\"test:testcreateamonitorreturnsokresponse1640112911\"},{\"count\":1,\"name\":\"test:testcreateanewdashboardwithalertvaluewidget1641382634\"},{\"count\":1,\"name\":\"test:testgocheckifamonitorcanbedeletedreturnsokresponse1639045979\"},{\"count\":1,\"name\":\"test:testgocreateamonitorreturnsokresponse1639045979\"},{\"count\":1,\"name\":\"test:testgoeditamonitorreturnsokresponse1639046265\"},{\"count\":1,\"name\":\"test:testgogetamonitorsdetailsreturnsokresponse1639046265\"},{\"count\":1,\"name\":\"test:testgoscheduleamonitordowntimereturnsokresponse1639045977\"},{\"count\":1,\"name\":\"test:testpythoncheckifamonitorcanbedeletedreturnsokresponse1638987034\"},{\"count\":1,\"name\":\"test:testpythoncheckifamonitorcanbedeletedreturnsokresponse1639137875\"},{\"count\":1,\"name\":\"test:testpythoncreateamonitorreturnsokresponse1639137882\"},{\"count\":1,\"name\":\"test:testpythondeleteamonitorreturnsokresponse1638987038\"},{\"count\":1,\"name\":\"test:testpythoneditamonitorreturnsokresponse1638926914\"},{\"count\":1,\"name\":\"test:testpythoneditamonitorreturnsokresponse1638987036\"},{\"count\":1,\"name\":\"test:testpythongetamonitorsdetailsreturnsokresponse1638987027\"},{\"count\":1,\"name\":\"test:testpythonscheduleamonitordowntimereturnsokresponse1638987043\"},{\"count\":1,\"name\":\"test:testscheduleamonitordowntimereturnsokresponse1640112907\"},{\"count\":1,\"name\":\"test:testtypescriptcreateamonitorreturnsokresponse1638875400\"},{\"count\":1,\"name\":\"test:testtypescriptcreateamonitorreturnsokresponse1640111495\"},{\"count\":1,\"name\":\"test:testtypescriptcreateamonitorreturnsokresponse1640112727\"},{\"count\":1,\"name\":\"test:testtypescripteditamonitorreturnsokresponse1639138007\"},{\"count\":1,\"name\":\"test:testtypescriptgetamonitorsdetailsreturnsokresponse1639138007\"},{\"count\":1,\"name\":\"test:testtypescriptscheduleamonitordowntimereturnsokresponse1640111492\"},{\"count\":1,\"name\":\"test:testtypescriptscheduleamonitordowntimereturnsokresponse1640112725\"}],\"type\":[{\"count\":94,\"name\":\"synthetics\"},{\"count\":40,\"name\":\"log\"},{\"count\":28,\"name\":\"metric\"},{\"count\":16,\"name\":\"integration\"},{\"count\":15,\"name\":\"ci-pipelines\"},{\"count\":4,\"name\":\"custom\"},{\"count\":1,\"name\":\"anomaly\"},{\"count\":1,\"name\":\"composite\"}]},\"monitors\":[{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"slavek.kabrda@datadoghq.com\",\"id\":1379826,\"name\":\"Slavek Kabrda\"},\"metrics\":[],\"notifications\":[{\"handle\":\"pagerduty\",\"name\":\"Pagerduty\"}],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":25641098,\"last_triggered_ts\":null,\"name\":\"[Synthetics] tf-TestAccDatadogSyntheticsSSLTest_Updated-31891-1605197692-updated\",\"tags\":[\"foo:bar\",\"env:test\",\"check_type:api-ssl\",\"check_status:live\",\"probe_dc:aws:eu-central-1\",\"foo\"],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":null,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"No Data\",\"scopes\":[\"host:host0\"],\"classification\":\"metric\",\"creator\":{\"handle\":\"nicholas.muesch@datadoghq.com\",\"id\":1379811,\"name\":\"Nicholas Muesch\"},\"metrics\":[\"system.net.bytes_rcvd\"],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"id\":20332095,\"last_triggered_ts\":null,\"name\":\"java-listMonitorsTest-20205-1595411987-2\",\"tags\":[],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":null,\"restricted_roles\":[],\"type\":\"metric alert\"},{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"nicholas.muesch@datadoghq.com\",\"id\":1379811,\"name\":\"Nicholas Muesch\"},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":20314950,\"last_triggered_ts\":null,\"name\":\"[Synthetics] java-testSyntheticsMultipleTestsOperations-20175-1595364791-api\",\"tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":null,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"Alert\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59701958,\"last_triggered_ts\":1641411818,\"name\":\"Example-Create_an_API_test_returns_OK_Returns_the_created_test_details_response_1641411729\",\"tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":5,\"overall_state_modified\":1641411819,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"Alert\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59586255,\"last_triggered_ts\":1641339795,\"name\":\"Example-Create_an_API_test_returns_OK_Returns_the_created_test_details_response_1641339729\",\"tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":5,\"overall_state_modified\":1641383895,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"OK\",\"scopes\":[],\"classification\":\"log\",\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"id\":2320499,\"name\":\"CI Account\"},\"metrics\":[],\"notifications\":[{\"handle\":\"hipchat-channel\",\"name\":\"hipchat-channel\"}],\"muted_until_ts\":null,\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"id\":56889922,\"last_triggered_ts\":null,\"name\":\"Test-Python-Edit_a_monitor_returns_OK_response-1638926914\",\"tags\":[\"test:testpythoneditamonitorreturnsokresponse1638926914\",\"env:ci\"],\"org_id\":321813,\"priority\":3,\"overall_state_modified\":1638927063,\"restricted_roles\":[],\"type\":\"log alert\"},{\"status\":\"OK\",\"scopes\":[\"*\"],\"classification\":\"metric\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[\"synthetics.pl.worker.remaining_slots\"],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"avg(last_30m):avg:synthetics.pl.worker.remaining_slots{*} by {location_id} < 1.5\",\"id\":52529358,\"last_triggered_ts\":null,\"name\":\"[Synthetic Private Locations] {{location_id.name}} is underprovisioned\",\"tags\":[],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":1635848008,\"restricted_roles\":[],\"type\":\"metric alert\"},{\"status\":\"No Data\",\"scopes\":[\"host:foo\",\"environment:foo\"],\"classification\":\"integration\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[\"aws.ec2.cpu\"],\"notifications\":[{\"handle\":\"hipchat-channel\",\"name\":\"hipchat-channel\"}],\"muted_until_ts\":null,\"query\":\"avg(last_1h):avg:aws.ec2.cpu{environment:foo,host:foo} by {host} > 4\",\"id\":35679537,\"last_triggered_ts\":null,\"name\":\"Name for monitor foo\",\"tags\":[\"foo:bar\",\"baz\"],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":1621426290,\"restricted_roles\":[],\"type\":\"query alert\"},{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"id\":2320499,\"name\":\"CI Account\"},\"metrics\":[],\"notifications\":[{\"handle\":\"datadog.user\",\"name\":\"datadog.user\"}],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59417761,\"last_triggered_ts\":null,\"name\":\"[Synthetics] tf-TestAccDatadogSyntheticsDNSTest_Basic-85865-1641311522\",\"tags\":[\"check_status:paused\",\"check_type:api-dns\",\"foo:bar\",\"baz\",\"probe_dc:aws:eu-central-1\"],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":1641311582,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"No Data\",\"scopes\":[\"host:host0\"],\"classification\":\"metric\",\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"id\":2320499,\"name\":\"CI Account\"},\"metrics\":[\"system.net.bytes_rcvd\"],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"id\":35686767,\"last_triggered_ts\":null,\"name\":\"`avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100`\",\"tags\":[],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":1621436815,\"restricted_roles\":[],\"type\":\"query alert\"},{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"ci-pipelines\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[{\"handle\":\"hipchat-channel\",\"name\":\"hipchat-channel\"}],\"muted_until_ts\":null,\"query\":\"ci-pipelines(\\\"ci_level:pipeline @git.branch:staging* @ci.status:error\\\").rollup(\\\"count\\\").by(\\\"@git.branch,@ci.pipeline.name\\\").last(\\\"5m\\\") >= 1\",\"id\":59136642,\"last_triggered_ts\":null,\"name\":\"Example-Create_a_ci_pipelines_monitor_returns_OK_response\",\"tags\":[\"env:ci\",\"test:examplecreateacipipelinesmonitorreturnsokresponse\"],\"org_id\":321813,\"priority\":3,\"overall_state_modified\":1641203402,\"restricted_roles\":[],\"type\":\"ci-pipelines alert\"},{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"log\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[{\"handle\":\"hipchat-channel\",\"name\":\"hipchat-channel\"}],\"muted_until_ts\":null,\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"id\":57056222,\"last_triggered_ts\":null,\"name\":\"Test-Create_a_monitor_returns_OK_response-1639067826\",\"tags\":[\"env:ci\",\"test:testcreateamonitorreturnsokresponse1639067826\"],\"org_id\":321813,\"priority\":3,\"overall_state_modified\":1639067987,\"restricted_roles\":[],\"type\":\"log alert\"},{\"status\":\"Alert\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59586284,\"last_triggered_ts\":1641339824,\"name\":\"Example-Trigger_Synthetics_tests_returns_OK_response_1641339731\",\"tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":5,\"overall_state_modified\":1641383924,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59702023,\"last_triggered_ts\":null,\"name\":\"[Synthetics] Example-Create_a_browser_test_returns_OK_Returns_the_created_test_details_response_1641411734\",\"tags\":[\"check_status:paused\",\"probe_dc:aws:us-east-2\",\"testing:browser\",\"check_type:browser\"],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":1641411825,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"OK\",\"scopes\":[],\"classification\":\"log\",\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"id\":2320499,\"name\":\"CI Account\"},\"metrics\":[],\"notifications\":[{\"handle\":\"hipchat-channel\",\"name\":\"hipchat-channel\"}],\"muted_until_ts\":null,\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"id\":56957481,\"last_triggered_ts\":null,\"name\":\"Test-Python-Schedule_a_monitor_downtime_returns_OK_response-1638987043\",\"tags\":[\"test:testpythonscheduleamonitordowntimereturnsokresponse1638987043\",\"env:ci\"],\"org_id\":321813,\"priority\":3,\"overall_state_modified\":1638987188,\"restricted_roles\":[],\"type\":\"log alert\"},{\"status\":\"OK\",\"scopes\":[],\"classification\":\"log\",\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"id\":2320499,\"name\":\"CI Account\"},\"metrics\":[],\"notifications\":[{\"handle\":\"hipchat-channel\",\"name\":\"hipchat-channel\"}],\"muted_until_ts\":null,\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"id\":57134512,\"last_triggered_ts\":null,\"name\":\"Test-Typescript-Edit_a_monitor_returns_OK_response-1639138007\",\"tags\":[\"test:testtypescripteditamonitorreturnsokresponse1639138007\",\"env:ci\"],\"org_id\":321813,\"priority\":3,\"overall_state_modified\":1639138183,\"restricted_roles\":[],\"type\":\"log alert\"},{\"status\":\"OK\",\"scopes\":[],\"classification\":\"log\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[{\"handle\":\"hipchat-channel\",\"name\":\"hipchat-channel\"}],\"muted_until_ts\":null,\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"id\":55356159,\"last_triggered_ts\":null,\"name\":\"Example-Check_if_a_monitor_can_be_deleted_returns_OK_response_1637578811\",\"tags\":[\"env:ci\",\"test:examplecheckifamonitorcanbedeletedreturnsokresponse1637578811\"],\"org_id\":321813,\"priority\":3,\"overall_state_modified\":1637579006,\"restricted_roles\":[],\"type\":\"log alert\"},{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"ci-pipelines\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[{\"handle\":\"hipchat-channel\",\"name\":\"hipchat-channel\"}],\"muted_until_ts\":null,\"query\":\"ci-pipelines(\\\"ci_level:pipeline @git.branch:staging* @ci.status:error\\\").rollup(\\\"count\\\").by(\\\"@git.branch,@ci.pipeline.name\\\").last(\\\"5m\\\") >= 1\",\"id\":58631108,\"last_triggered_ts\":null,\"name\":\"Test-Create_a_ci_pipelines_monitor_returns_OK_response-1640114238\",\"tags\":[\"test:testcreateacipipelinesmonitorreturnsokresponse1640114238\",\"env:ci\"],\"org_id\":321813,\"priority\":3,\"overall_state_modified\":1640114311,\"restricted_roles\":[],\"type\":\"ci-pipelines alert\"},{\"status\":\"Alert\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59586280,\"last_triggered_ts\":1641339820,\"name\":\"Example-Get_a_synthetics_monitor_s_details_1641339731\",\"tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":5,\"overall_state_modified\":1641383921,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"Alert\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59771265,\"last_triggered_ts\":1641426225,\"name\":\"Example-Get_a_synthetics_monitor_s_details_1641426133\",\"tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":5,\"overall_state_modified\":1641426226,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"nicholas.muesch@datadoghq.com\",\"id\":1379811,\"name\":\"Nicholas Muesch\"},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":25721938,\"last_triggered_ts\":null,\"name\":\"[Synthetics] java-testSyntheticsMultipleTestsOperations-32166-1605317563-browser\",\"tags\":[\"check_status:paused\",\"probe_dc:aws:us-east-2\",\"testing:browser\",\"check_type:browser\"],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":null,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"Alert\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59640593,\"last_triggered_ts\":1641368633,\"name\":\"Test-TestSyntheticsAPITestLifecycle-1623076664\",\"tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":5,\"overall_state_modified\":1641383933,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"Alert\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59417123,\"last_triggered_ts\":1641311003,\"name\":\"Example-Create_an_API_test_with_WEBSOCKET_subtype_returns_OK_Returns_the_created_test_details_response_1641310927\",\"tags\":[\"testing:api\",\"check_type:api-websocket\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":5,\"overall_state_modified\":1641383903,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"Alert\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59653156,\"last_triggered_ts\":1641382576,\"name\":\"Test-Edit_an_API_test_returns_OK_response-1641382542\",\"tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":5,\"overall_state_modified\":1641383896,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"OK\",\"scopes\":[\"*\"],\"classification\":\"custom\",\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"id\":2320499,\"name\":\"CI Account\"},\"metrics\":[\"ntp.in_sync\"],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"\\\"ntp.in_sync\\\".over(\\\"*\\\").last(2).count_by_status()\",\"id\":56886190,\"last_triggered_ts\":null,\"name\":\"tf-TestAccDatadogMonitorJSONBasic-83207-1638923106\",\"tags\":[],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":1641318730,\"restricted_roles\":[],\"type\":\"service check\"},{\"status\":\"OK\",\"scopes\":[],\"classification\":\"log\",\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"id\":2320499,\"name\":\"CI Account\"},\"metrics\":[],\"notifications\":[{\"handle\":\"hipchat-channel\",\"name\":\"hipchat-channel\"}],\"muted_until_ts\":null,\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"id\":57134518,\"last_triggered_ts\":null,\"name\":\"Test-Typescript-Get_a_monitor_s_details_returns_OK_response-1639138007\",\"tags\":[\"env:ci\",\"test:testtypescriptgetamonitorsdetailsreturnsokresponse1639138007\"],\"org_id\":321813,\"priority\":3,\"overall_state_modified\":1639138176,\"restricted_roles\":[],\"type\":\"log alert\"},{\"status\":\"No Data\",\"scopes\":[\"host:host0\"],\"classification\":\"metric\",\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"id\":2320499,\"name\":\"CI Account\"},\"metrics\":[\"system.net.bytes_rcvd\"],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"id\":35325185,\"last_triggered_ts\":null,\"name\":\"java-monitorGetErrorsTest-local-1620843966\",\"tags\":[\"frontend\",\"app:webserver\"],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":1620844096,\"restricted_roles\":[],\"type\":\"metric alert\"},{\"status\":\"No Data\",\"scopes\":[\"host:host0\"],\"classification\":\"metric\",\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"id\":2320499,\"name\":\"CI Account\"},\"metrics\":[\"system.net.bytes_rcvd\"],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"id\":35676553,\"last_triggered_ts\":null,\"name\":\"java-historyGetSLOErrorsTest-64695-1621420747\",\"tags\":[],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":1621420773,\"restricted_roles\":[],\"type\":\"metric alert\"},{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"nicholas.muesch@datadoghq.com\",\"id\":1379811,\"name\":\"Nicholas Muesch\"},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":25720412,\"last_triggered_ts\":null,\"name\":\"[Synthetics] go-TestMonitorSyntheticsGet-32164-1605312658\",\"tags\":[\"testing:api\",\"check_type:api\",\"probe_dc:aws:us-east-2\",\"check_status:live\"],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":null,\"restricted_roles\":[],\"type\":\"synthetics alert\"},{\"status\":\"No Data\",\"scopes\":[],\"classification\":\"synthetics\",\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog@datadoghq.com\",\"id\":{\"handle\":\"frog@datadoghq.com\",\"id\":1445416,\"name\":null}},\"metrics\":[],\"notifications\":[],\"muted_until_ts\":null,\"query\":\"no_query\",\"id\":59653374,\"last_triggered_ts\":null,\"name\":\"[Synthetics] Example-Create_a_browser_test_returns_OK_Returns_the_created_test_details_response_1641382929\",\"tags\":[\"check_status:paused\",\"probe_dc:aws:us-east-2\",\"testing:browser\",\"check_type:browser\"],\"org_id\":321813,\"priority\":null,\"overall_state_modified\":1641383035,\"restricted_roles\":[],\"type\":\"synthetics alert\"}],\"metadata\":{\"total_count\":199,\"page_count\":7,\"page\":0,\"per_page\":30}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Monitors search returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2022-01-06T00:51:01.006Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "query": "query", + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"The value provided for parameter 'query' is invalid: invalid operator specified: \"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Validate a monitor returns \"Invalid JSON\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2024-10-09T14:54:54.858Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Validate_a_monitor_returns_OK_response-1728485694", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testvalidateamonitorreturnsokresponse1728485694", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate a monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2024-10-09T14:54:55.290Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Validate_a_multi_alert_monitor_returns_OK_response-1728485695", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "group_retention_duration": "2d", + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notify_audit": false, + "notify_by": [ + "status" + ], + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source,status\").last(\"5m\") > 2", + "tags": [ + "test:testvalidateamultialertmonitorreturnsokresponse1728485695", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate a multi-alert monitor returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2024-10-10T16:38:33.273Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Validate_an_existing_monitor_returns_Invalid_JSON_response-1728578313", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testvalidateanexistingmonitorreturnsinvalidjsonresponse1728578313", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":155844640,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Validate_an_existing_monitor_returns_Invalid_JSON_response-1728578313\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testvalidateanexistingmonitorreturnsinvalidjsonresponse1728578313\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1728578313000,\"created\":\"2024-10-10T16:38:33.508239+00:00\",\"modified\":\"2024-10-10T16:38:33.508239+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":3,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "query": "query", + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor/155844640/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"The value provided for parameter 'query' is invalid: invalid operator specified: \"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/155844640", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":155844640}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an existing monitor returns \"Invalid JSON\" response", + "version": "v1" + }, + { + "feature": "Monitors", + "frozen_at": "2024-10-10T16:37:50.222Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Validate_an_existing_monitor_returns_OK_response-1728578270", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testvalidateanexistingmonitorreturnsokresponse1728578270", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":155844413,\"org_id\":321813,\"type\":\"log alert\",\"name\":\"Test-Validate_an_existing_monitor_returns_OK_response-1728578270\",\"message\":\"some message Notify: @hipchat-channel\",\"tags\":[\"test:testvalidateanexistingmonitorreturnsokresponse1728578270\",\"env:ci\"],\"query\":\"logs(\\\"service:foo AND type:error\\\").index(\\\"main\\\").rollup(\\\"count\\\").by(\\\"source\\\").last(\\\"5m\\\") > 2\",\"options\":{\"enable_logs_sample\":true,\"escalation_message\":\"the situation has escalated\",\"evaluation_delay\":700,\"include_tags\":true,\"locked\":false,\"new_host_delay\":600,\"no_data_timeframe\":null,\"notification_preset_name\":\"hide_handles\",\"notify_audit\":false,\"notify_no_data\":false,\"on_missing_data\":\"show_and_notify_no_data\",\"renotify_interval\":60,\"require_full_window\":true,\"thresholds\":{\"critical\":2.0,\"warning\":1.0},\"timeout_h\":24,\"groupby_simple_monitor\":false,\"silenced\":{}},\"multi\":true,\"created_at\":1728578270000,\"created\":\"2024-10-10T16:37:50.488360+00:00\",\"modified\":\"2024-10-10T16:37:50.488360+00:00\",\"deleted\":null,\"restricted_roles\":null,\"priority\":3,\"restriction_policy\":null,\"overall_state_modified\":null,\"overall_state\":\"No Data\",\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"id\":1445416}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "message": "some message Notify: @hipchat-channel", + "name": "Test-Validate_an_existing_monitor_returns_OK_response-1728578270", + "options": { + "enable_logs_sample": true, + "escalation_message": "the situation has escalated", + "evaluation_delay": 700, + "include_tags": true, + "locked": false, + "new_host_delay": 600, + "no_data_timeframe": null, + "notification_preset_name": "hide_handles", + "notify_audit": false, + "notify_no_data": false, + "on_missing_data": "show_and_notify_no_data", + "renotify_interval": 60, + "require_full_window": true, + "thresholds": { + "critical": 2, + "warning": 1 + }, + "timeout_h": 24 + }, + "priority": 3, + "query": "logs(\"service:foo AND type:error\").index(\"main\").rollup(\"count\").by(\"source\").last(\"5m\") > 2", + "tags": [ + "test:testvalidateanexistingmonitorreturnsokresponse1728578270", + "env:ci" + ], + "type": "log alert" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/monitor/155844413/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/monitor/155844413", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_monitor_id\":155844413}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an existing monitor returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/notebooks.json b/test-server-data/v1/notebooks.json new file mode 100644 index 0000000000..49c29663e5 --- /dev/null +++ b/test-server-data/v1/notebooks.json @@ -0,0 +1,581 @@ +{ + "feature": "Notebooks", + "recordings": [ + { + "feature": "Notebooks", + "frozen_at": "2025-10-03T14:49:56.873Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "cells": [ + { + "attributes": { + "definition": { + "text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", + "type": "markdown" + } + }, + "type": "notebook_cells" + }, + { + "attributes": { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.load.1{*}", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "type": "timeseries", + "yaxis": { + "scale": "linear" + } + }, + "graph_size": "m", + "split_by": { + "keys": [], + "tags": [] + }, + "time": null + }, + "type": "notebook_cells" + } + ], + "name": "Test-Create_a_notebook_returns_OK_response-1759502996", + "status": "published", + "time": { + "live_span": "1h" + } + }, + "type": "notebooks" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/notebooks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"notebooks\",\"id\":13244449,\"attributes\":{\"name\":\"Test-Create_a_notebook_returns_OK_response-1759502996\",\"cells\":[{\"type\":\"notebook_cells\",\"id\":\"p2ywawtx\",\"attributes\":{\"definition\":{\"type\":\"markdown\",\"text\":\"## Some test markdown\\n\\n```\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\"}}},{\"type\":\"notebook_cells\",\"attributes\":{\"time\":null,\"split_by\":{\"keys\":[],\"tags\":[]},\"definition\":{\"type\":\"timeseries\",\"requests\":[{\"display_type\":\"line\",\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_type\":\"solid\",\"line_width\":\"normal\",\"palette\":\"dog_classic\"}}],\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\"},\"id\":\"g9sa14n1\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"take_snapshots\":false,\"is_template\":false,\"is_favorite\":false,\"type\":null},\"template_variables\":[],\"status\":\"published\",\"modified\":\"2025-10-03T14:49:57.096812+00:00\",\"created\":\"2025-10-03T14:49:57.096812+00:00\",\"deleted\":null,\"tags\":null,\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2020-12-29T22:58:44.733921+00:00\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/notebooks/13244449", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a notebook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "frozen_at": "2022-05-12T09:50:06.695Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/notebooks/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Notebook not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a notebook returns \"Not Found\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "frozen_at": "2022-05-12T09:50:07.168Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "cells": [ + { + "attributes": { + "definition": { + "text": "# Test-Delete_a_notebook_returns_OK_response-1652349007 notebook text", + "type": "markdown" + } + }, + "type": "notebook_cells" + } + ], + "name": "Test-Delete_a_notebook_returns_OK_response-1652349007", + "time": { + "live_span": "1h" + } + }, + "type": "notebooks" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/notebooks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"notebooks\",\"id\":2466032,\"attributes\":{\"name\":\"Test-Delete_a_notebook_returns_OK_response-1652349007\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Delete_a_notebook_returns_OK_response-1652349007 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"t6d9lkvx\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_favorite\":false,\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":[],\"status\":\"published\",\"modified\":\"2022-05-12T09:50:07.586654+00:00\",\"created\":\"2022-05-12T09:50:07.586654+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/notebooks/2466032", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/notebooks/2466032", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Notebook not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a notebook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "frozen_at": "2022-05-12T09:50:08.596Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "cells": [ + { + "attributes": { + "definition": { + "text": "# Test-Get_a_notebook_returns_OK_response-1652349008 notebook text", + "type": "markdown" + } + }, + "type": "notebook_cells" + } + ], + "name": "Test-Get_a_notebook_returns_OK_response-1652349008", + "time": { + "live_span": "1h" + } + }, + "type": "notebooks" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/notebooks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"notebooks\",\"id\":2466033,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1652349008\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1652349008 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"hzy6fag9\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_favorite\":false,\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":[],\"status\":\"published\",\"modified\":\"2022-05-12T09:50:08.997931+00:00\",\"created\":\"2022-05-12T09:50:08.997931+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/notebooks/2466033", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"notebooks\",\"id\":2466033,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1652349008\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1652349008 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"hzy6fag9\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_favorite\":false,\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":[],\"status\":\"published\",\"modified\":\"2022-05-12T09:50:08.997931+00:00\",\"created\":\"2022-05-12T09:50:08.997931+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/notebooks/2466033", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a notebook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "frozen_at": "2022-01-06T00:51:03.825Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/notebooks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_filtered_count\":50,\"total_count\":465}},\"data\":[{\"type\":\"notebooks\",\"id\":1529861,\"attributes\":{\"name\":\"Example Notebook\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"zct6hr09\"},{\"attributes\":{\"definition\":{\"show_legend\":true,\"type\":\"timeseries\",\"requests\":[{\"formulas\":[{\"formula\":\"query1\"}],\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"bars\",\"response_format\":\"timeseries\",\"queries\":[{\"query\":\"avg:trace.cucumber.test.errors{*}.as_count()\",\"data_source\":\"metrics\",\"name\":\"query1\"}]}],\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"8afnyf7d\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":\"investigation\",\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2022-01-05T07:32:54.047760+00:00\",\"created\":\"2021-11-05T18:10:43.257960+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1721318,\"attributes\":{\"name\":\"Test-Create_a_notebook_returns_OK_response-1640112913\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"ssrxoyo8\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"ht2o911k\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-12-21T18:55:13.305467+00:00\",\"created\":\"2021-12-21T18:55:13.305467+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1721294,\"attributes\":{\"name\":\"Test-Typescript-Create_a_notebook_returns_OK_response-1640112735\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"f8lj84u0\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"6s6dslvh\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-12-21T18:52:15.181874+00:00\",\"created\":\"2021-12-21T18:52:15.181874+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1717873,\"attributes\":{\"name\":\"Test-Typescript-Get_a_notebook_returns_OK_response-1640081721\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Typescript-Get_a_notebook_returns_OK_response-1640081721 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"601ph050\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-12-21T10:15:21.688698+00:00\",\"created\":\"2021-12-21T10:15:21.688698+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1717870,\"attributes\":{\"name\":\"Test-Go-Update_a_notebook_returns_OK_response-1640081635-updated\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"vjydpvyz\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"ho2ivxv5\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-12-21T10:13:56.435016+00:00\",\"created\":\"2021-12-21T10:13:55.278107+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1660165,\"attributes\":{\"name\":\"Test-Python-Update_a_notebook_returns_OK_response-1638987033\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Python-Update_a_notebook_returns_OK_response-1638987033 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"7i7fz8oc\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-12-08T18:10:34.034069+00:00\",\"created\":\"2021-12-08T18:10:34.034069+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1660164,\"attributes\":{\"name\":\"Test-Python-Delete_a_notebook_returns_OK_response-1638987029\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Python-Delete_a_notebook_returns_OK_response-1638987029 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"hovq46bn\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-12-08T18:10:29.987110+00:00\",\"created\":\"2021-12-08T18:10:29.987110+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1660163,\"attributes\":{\"name\":\"Test-Python-Create_a_notebook_returns_OK_response-1638987028\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"sawtra8c\"},{\"attributes\":{\"definition\":{\"show_legend\":true,\"type\":\"timeseries\",\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"dkgafplg\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-12-08T18:10:28.682328+00:00\",\"created\":\"2021-12-08T18:10:28.682328+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1660160,\"attributes\":{\"name\":\"Test-Python-Get_a_notebook_returns_OK_response-1638987026\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Python-Get_a_notebook_returns_OK_response-1638987026 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"sccraa38\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-12-08T18:10:26.143019+00:00\",\"created\":\"2021-12-08T18:10:26.143019+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1600250,\"attributes\":{\"name\":\"Test-Typescript-Update_a_notebook_returns_OK_response-1637674398-updated\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"aq3anjcd\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"ao2ygn9x\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-23T13:33:19.334585+00:00\",\"created\":\"2021-11-23T13:33:18.812190+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1600249,\"attributes\":{\"name\":\"Test-Typescript-Get_a_notebook_returns_OK_response-1637674397\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Typescript-Get_a_notebook_returns_OK_response-1637674397 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"ti8ab3m4\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-23T13:33:17.638758+00:00\",\"created\":\"2021-11-23T13:33:17.638758+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1574187,\"attributes\":{\"name\":\"Test-Update_a_notebook_returns_OK_response-1637141144-updated\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"ci6mikrb\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"rmkegmjz\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-17T09:25:47.020254+00:00\",\"created\":\"2021-11-17T09:25:46.597716+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1574186,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1637141142\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1637141142 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"aub7w0cd\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-17T09:25:45.101074+00:00\",\"created\":\"2021-11-17T09:25:45.101074+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1574184,\"attributes\":{\"name\":\"Test-Create_a_notebook_returns_OK_response-1637141140\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"jc56b7v8\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"l6ihwsra\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-17T09:25:43.344897+00:00\",\"created\":\"2021-11-17T09:25:43.344897+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1574162,\"attributes\":{\"name\":\"Test-Update_a_notebook_returns_OK_response-1620731122-updated\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"36qwo0wh\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"w6zcrkko\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-17T09:20:53.326430+00:00\",\"created\":\"2021-11-17T09:20:52.910209+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1574161,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1620726175\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1620726175 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"ilm74x9l\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-17T09:20:51.992959+00:00\",\"created\":\"2021-11-17T09:20:51.992959+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1570535,\"attributes\":{\"name\":\"Test-Update_a_notebook_returns_OK_response-1637078414-updated\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"8ka89nl6\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"mc08fjru\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T16:00:15.696963+00:00\",\"created\":\"2021-11-16T16:00:15.257941+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1570534,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1637078413\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1637078413 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"eq2bd466\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T16:00:13.605803+00:00\",\"created\":\"2021-11-16T16:00:13.605803+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1570532,\"attributes\":{\"name\":\"Test-Create_a_notebook_returns_OK_response-1637078411\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"3gyz0zdc\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"3tfpg3l8\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T16:00:11.681983+00:00\",\"created\":\"2021-11-16T16:00:11.681983+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1570471,\"attributes\":{\"name\":\"Test-Update_a_notebook_returns_OK_response-1637077898-updated\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"29p7kj9c\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"1z0mvh1v\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T15:51:39.708117+00:00\",\"created\":\"2021-11-16T15:51:39.299674+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1570470,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1637077897\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1637077897 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"4kg8btjd\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T15:51:37.765488+00:00\",\"created\":\"2021-11-16T15:51:37.765488+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1570468,\"attributes\":{\"name\":\"Test-Create_a_notebook_returns_OK_response-1637077895\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"v37ns0tl\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"0lw3tmkw\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T15:51:35.908376+00:00\",\"created\":\"2021-11-16T15:51:35.908376+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1569695,\"attributes\":{\"name\":\"Test-Update_a_notebook_returns_OK_response-1637070460-updated\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"2de8iz16\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"u1e1o76n\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T13:47:43.446141+00:00\",\"created\":\"2021-11-16T13:47:43.038481+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1569694,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1637070459\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1637070459 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"sl6lb02h\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T13:47:41.775053+00:00\",\"created\":\"2021-11-16T13:47:41.775053+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1569692,\"attributes\":{\"name\":\"Test-Create_a_notebook_returns_OK_response-1637070457\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"3ama8gjf\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"6lf5x85x\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T13:47:39.930386+00:00\",\"created\":\"2021-11-16T13:47:39.930386+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1569591,\"attributes\":{\"name\":\"Test-Update_a_notebook_returns_OK_response-1637063291-updated\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"piecd7x6\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"8dgl8kh9\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T13:23:41.944589+00:00\",\"created\":\"2021-11-16T13:23:41.494508+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1569590,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1637063290\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1637063290 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"yqsx4b0w\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T13:23:40.575604+00:00\",\"created\":\"2021-11-16T13:23:40.575604+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1569288,\"attributes\":{\"name\":\"Test-Create_a_notebook_returns_OK_response-1637063289\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"zwe4jdl3\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"ez5uyknb\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-11-16T11:48:12.010803+00:00\",\"created\":\"2021-11-16T11:48:12.010803+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1418594,\"attributes\":{\"name\":\"Test-Go-Update_a_notebook_returns_OK_response-1634040178\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Update_a_notebook_returns_OK_response-1634040178 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"6xayew1l\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T12:02:58.725181+00:00\",\"created\":\"2021-10-12T12:02:58.725181+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1418592,\"attributes\":{\"name\":\"Test-Go-Get_a_notebook_returns_OK_response-1634040178\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Get_a_notebook_returns_OK_response-1634040178 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"6yvq7ri3\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T12:02:58.470375+00:00\",\"created\":\"2021-10-12T12:02:58.470375+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1418591,\"attributes\":{\"name\":\"Test-Go-Delete_a_notebook_returns_OK_response-1634040178\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Delete_a_notebook_returns_OK_response-1634040178 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"vbdf1bqq\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T12:02:58.357131+00:00\",\"created\":\"2021-10-12T12:02:58.357131+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1418589,\"attributes\":{\"name\":\"Test-Go-Create_a_notebook_returns_OK_response-1634040177\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"h39tcfex\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"o86tlsk2\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T12:02:58.118960+00:00\",\"created\":\"2021-10-12T12:02:58.118960+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417726,\"attributes\":{\"name\":\"Test-Go-Get_a_notebook_returns_OK_response-1634031528\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Get_a_notebook_returns_OK_response-1634031528 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"4t0fln2y\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:38:49.341316+00:00\",\"created\":\"2021-10-12T09:38:49.341316+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417686,\"attributes\":{\"name\":\"Test-Go-Get_a_notebook_returns_OK_response-1634031244\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Get_a_notebook_returns_OK_response-1634031244 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"80mbfpqo\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:34:05.404374+00:00\",\"created\":\"2021-10-12T09:34:05.404374+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417682,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1634031040\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1634031040 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"ypci83fo\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:30:41.261694+00:00\",\"created\":\"2021-10-12T09:30:41.261694+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417680,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1634030875\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1634030875 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"ebhtk48j\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:27:56.164598+00:00\",\"created\":\"2021-10-12T09:27:56.164598+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417658,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1634030685\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1634030685 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"p3qij47b\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:24:45.871488+00:00\",\"created\":\"2021-10-12T09:24:45.871488+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417657,\"attributes\":{\"name\":\"Test-Update_a_notebook_returns_OK_response-1634030660\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Update_a_notebook_returns_OK_response-1634030660 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"b4ahc8jj\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:24:20.560706+00:00\",\"created\":\"2021-10-12T09:24:20.560706+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417656,\"attributes\":{\"name\":\"Test-Get_a_notebook_returns_OK_response-1634030659\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Get_a_notebook_returns_OK_response-1634030659 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"rt3nwhxw\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:24:20.010537+00:00\",\"created\":\"2021-10-12T09:24:20.010537+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417655,\"attributes\":{\"name\":\"Test-Delete_a_notebook_returns_OK_response-1634030659\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Delete_a_notebook_returns_OK_response-1634030659 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"egelq2we\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:24:19.830533+00:00\",\"created\":\"2021-10-12T09:24:19.830533+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417654,\"attributes\":{\"name\":\"Test-Create_a_notebook_returns_OK_response-1634030658\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"ohd6d678\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"7skxov27\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:24:19.391987+00:00\",\"created\":\"2021-10-12T09:24:19.391987+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417653,\"attributes\":{\"name\":\"Test-Go-Update_a_notebook_returns_OK_response-1634030642\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Update_a_notebook_returns_OK_response-1634030642 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"8s5ulvhq\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:24:02.654610+00:00\",\"created\":\"2021-10-12T09:24:02.654610+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417652,\"attributes\":{\"name\":\"Test-Go-Get_a_notebook_returns_OK_response-1634030641\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Get_a_notebook_returns_OK_response-1634030641 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"vi55dq1j\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:24:02.145423+00:00\",\"created\":\"2021-10-12T09:24:02.145423+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417651,\"attributes\":{\"name\":\"Test-Go-Delete_a_notebook_returns_OK_response-1634030641\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Delete_a_notebook_returns_OK_response-1634030641 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"pxnwygyc\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:24:01.807898+00:00\",\"created\":\"2021-10-12T09:24:01.807898+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417650,\"attributes\":{\"name\":\"Test-Go-Create_a_notebook_returns_OK_response-1634030640\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"a736lr9n\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"0xihqmlh\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:24:01.072040+00:00\",\"created\":\"2021-10-12T09:24:01.072040+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417506,\"attributes\":{\"name\":\"Test-Go-Update_a_notebook_returns_OK_response-1634029580\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Update_a_notebook_returns_OK_response-1634029580 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"otl9pb05\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:06:20.634221+00:00\",\"created\":\"2021-10-12T09:06:20.634221+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417505,\"attributes\":{\"name\":\"Test-Go-Get_a_notebook_returns_OK_response-1634029580\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Get_a_notebook_returns_OK_response-1634029580 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"oxi4qcrq\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:06:20.320499+00:00\",\"created\":\"2021-10-12T09:06:20.320499+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417504,\"attributes\":{\"name\":\"Test-Go-Delete_a_notebook_returns_OK_response-1634029580\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Delete_a_notebook_returns_OK_response-1634029580 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"7q3cyslm\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:06:20.171326+00:00\",\"created\":\"2021-10-12T09:06:20.171326+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417503,\"attributes\":{\"name\":\"Test-Go-Create_a_notebook_returns_OK_response-1634029579\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```js\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"jpagyh9r\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"3kjc6flm\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T09:06:19.932821+00:00\",\"created\":\"2021-10-12T09:06:19.932821+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":1417072,\"attributes\":{\"name\":\"Test-Go-Update_a_notebook_returns_OK_response-1634026036\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Go-Update_a_notebook_returns_OK_response-1634026036 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"d0hr7ys1\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":null,\"status\":\"published\",\"modified\":\"2021-10-12T08:07:16.752590+00:00\",\"created\":\"2021-10-12T08:07:16.752590+00:00\",\"author\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all notebooks returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Notebooks", + "frozen_at": "2023-08-31T09:47:14.068Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/notebooks", + "query": [ + [ + "count", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"notebooks\",\"id\":4758632,\"attributes\":{\"name\":\"PCF Container Usage Attribution\",\"cells\":[{\"type\":\"notebook_cells\",\"id\":\"jod8dstf\",\"attributes\":{\"split_by\":{\"tags\":[],\"keys\":[]},\"definition\":{\"title\":\"Count of containers\",\"type\":\"query_table\",\"requests\":[{\"response_format\":\"scalar\",\"formulas\":[{\"alias\":\"containers\",\"formula\":\"query1\",\"limit\":{\"count\":10000,\"order\":\"desc\"}}],\"queries\":[{\"name\":\"query1\",\"data_source\":\"metrics\",\"query\":\"avg:cloudfoundry.nozzle.app.instances{$container_deployement_guid,$troux_uuid} by {app_name,bosh_id}\",\"aggregator\":\"avg\"}]}]},\"graph_size\":\"m\",\"time\":null}},{\"type\":\"notebook_cells\",\"id\":\"0t3xetbt\",\"attributes\":{\"definition\":{\"type\":\"markdown\",\"text\":\"This displays the count of containers per `troux_uuid` (`bosh_id`) and `container_deployment_guid` (`app_name`)\"}}},{\"type\":\"notebook_cells\",\"id\":\"7lxv9snf\",\"attributes\":{\"definition\":{\"title\":\"Percentage breakdown of containers on VMs\",\"requests\":[{\"response_format\":\"scalar\",\"formulas\":[{\"formula\":\"query1\",\"limit\":{\"order\":\"desc\"}}],\"queries\":[{\"query\":\"avg:cloudfoundry.nozzle.app.instances{$troux_uuid,$container_deployement_guid} by {app_name,bosh_id}.rollup(avg, 3600)\",\"data_source\":\"metrics\",\"name\":\"query1\",\"aggregator\":\"sum\"}],\"style\":{\"palette\":\"datadog16\"}}],\"type\":\"sunburst\",\"legend\":{\"type\":\"automatic\"}},\"time\":null}},{\"type\":\"notebook_cells\",\"id\":\"uhwq9m18\",\"attributes\":{\"definition\":{\"type\":\"markdown\",\"text\":\"This displays the count of containers per\\u00a0`troux_uuid` (`bosh_id`)\\u00a0and\\u00a0`container_deployment_guid` (`app_name`) as percentages of total containers\\n\"}}},{\"type\":\"notebook_cells\",\"id\":\"fcid5x88\",\"attributes\":{\"split_by\":{\"tags\":[],\"keys\":[]},\"definition\":{\"title\":\"Number of VMs per container_deployment_guid\",\"type\":\"query_value\",\"requests\":[{\"response_format\":\"scalar\",\"queries\":[{\"name\":\"query1\",\"data_source\":\"metrics\",\"query\":\"avg:cloudfoundry.nozzle.app.instances{$troux_uuid,$container_deployement_guid}\",\"aggregator\":\"avg\"}],\"formulas\":[{\"formula\":\"count_nonzero(query1)\",\"alias\":\"VMs\"}]}],\"autoscale\":true,\"precision\":2},\"graph_size\":\"xs\",\"time\":null}},{\"type\":\"notebook_cells\",\"id\":\"7qmg68gc\",\"attributes\":{\"definition\":{\"type\":\"markdown\",\"text\":\"When filtering by the template variable `container_deployment_guid`, this value represents the number of VMs (or `troux_uuid`s) that `container_deployment_guid` runs on \"}}},{\"type\":\"notebook_cells\",\"id\":\"h75xo4j5\",\"attributes\":{\"split_by\":{\"tags\":[],\"keys\":[]},\"definition\":{\"type\":\"query_table\",\"requests\":[{\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"avg:system.cpu.user{$troux_uuid,$container_deployement_guid} by {bosh_id,application_name}.rollup(avg, 3600)\",\"aggregator\":\"avg\"}],\"formulas\":[{\"conditional_formats\":[],\"cell_display_mode\":\"bar\",\"formula\":\"query1\",\"limit\":{\"count\":500,\"order\":\"desc\"}}],\"response_format\":\"scalar\"}],\"has_search_bar\":\"auto\"},\"time\":null}}],\"time\":{\"live_span\":\"2d\"},\"metadata\":{\"take_snapshots\":false,\"is_template\":false,\"is_favorite\":false,\"type\":null},\"template_variables\":[{\"name\":\"container_deployement_guid\",\"prefix\":\"app_name\",\"available_values\":[],\"default\":\"*\"},{\"name\":\"troux_uuid\",\"prefix\":\"bosh_id\",\"available_values\":[],\"default\":\"*\"}],\"status\":\"published\",\"modified\":\"2023-02-27T17:53:59.623647+00:00\",\"created\":\"2023-02-15T18:12:35.189588+00:00\",\"author\":{\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"email\":\"sarah.witt@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/7f710a0bcefa8df8d47bfcba79f69a40?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}},{\"type\":\"notebooks\",\"id\":4823614,\"attributes\":{\"name\":\"Sarah Feb 22 2023 11:04\",\"cells\":[{\"type\":\"notebook_cells\",\"id\":\"dnulkt1p\",\"attributes\":{\"split_by\":{\"tags\":[],\"keys\":[]},\"definition\":{\"show_legend\":true,\"type\":\"timeseries\",\"requests\":[{\"response_format\":\"timeseries\",\"queries\":[{\"name\":\"query1\",\"data_source\":\"metrics\",\"query\":\"avg:system.cpu.user{*}\"}],\"style\":{\"palette\":\"dog_classic\",\"line_type\":\"solid\",\"line_width\":\"normal\"},\"display_type\":\"line\"}]},\"time\":null}}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"take_snapshots\":false,\"is_template\":false,\"is_favorite\":false,\"type\":null},\"template_variables\":[],\"status\":\"published\",\"modified\":\"2023-02-22T16:04:51.449049+00:00\",\"created\":\"2023-02-22T16:04:51.449049+00:00\",\"author\":{\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"email\":\"sarah.witt@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/7f710a0bcefa8df8d47bfcba79f69a40?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}}],\"meta\":{\"page\":{\"total_count\":158,\"total_filtered_count\":2}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/notebooks", + "query": [ + [ + "count", + "2" + ], + [ + "start", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"notebooks\",\"id\":4745953,\"attributes\":{\"name\":\"PCF Container Usage Attribution\",\"cells\":[{\"type\":\"notebook_cells\",\"id\":\"bqyp7v5p\",\"attributes\":{\"definition\":{\"title\":\"Count of containers\",\"type\":\"query_table\",\"requests\":[{\"response_format\":\"scalar\",\"formulas\":[{\"alias\":\"containers\",\"formula\":\"query1\",\"limit\":{\"count\":500,\"order\":\"desc\"}}],\"queries\":[{\"name\":\"query1\",\"data_source\":\"metrics\",\"query\":\"avg:cloudfoundry.nozzle.app.instances{$troux_uuid,$container_deployment_guid} by {app_name,bosh_id}.rollup(avg, 3600)\",\"aggregator\":\"sum\"}]}]},\"time\":null,\"split_by\":{\"keys\":[],\"tags\":[]},\"graph_size\":\"m\"}},{\"type\":\"notebook_cells\",\"id\":\"svgafvhk\",\"attributes\":{\"definition\":{\"type\":\"markdown\",\"text\":\"This displays the count of containers per `troux_uuid` (`bosh_id`) and `container_deployment_guid` (`app_name`)\"}}},{\"type\":\"notebook_cells\",\"id\":\"vq0zsiia\",\"attributes\":{\"definition\":{\"title\":\"Percentage breakdown of containers on VMs\",\"requests\":[{\"response_format\":\"scalar\",\"formulas\":[{\"formula\":\"query1\",\"limit\":{\"order\":\"desc\"}}],\"queries\":[{\"query\":\"avg:cloudfoundry.nozzle.app.instances{$troux_uuid,$container_deployment_guid} by {app_name,bosh_id}.rollup(avg, 3600)\",\"data_source\":\"metrics\",\"name\":\"query1\",\"aggregator\":\"sum\"}],\"style\":{\"palette\":\"datadog16\"}}],\"type\":\"sunburst\",\"legend\":{\"type\":\"automatic\"}},\"time\":null}},{\"type\":\"notebook_cells\",\"id\":\"oldqd75v\",\"attributes\":{\"definition\":{\"type\":\"markdown\",\"text\":\"This displays the count of containers per\\u00a0`troux_uuid` (`bosh_id`)\\u00a0and\\u00a0`container_deployment_guid` (`app_name`) as percentages of total containers\\n\"}}},{\"type\":\"notebook_cells\",\"id\":\"m2dcz3jo\",\"attributes\":{\"definition\":{\"title\":\"Number of VMs per container_deployment_guid\",\"type\":\"query_value\",\"requests\":[{\"response_format\":\"scalar\",\"queries\":[{\"name\":\"query1\",\"data_source\":\"metrics\",\"query\":\"avg:cloudfoundry.nozzle.app.instances{$troux_uuid,$container_deployment_guid}\",\"aggregator\":\"avg\"}],\"formulas\":[{\"formula\":\"count_nonzero(query1)\",\"alias\":\"VMs\"}]}],\"autoscale\":true,\"precision\":2},\"time\":null,\"split_by\":{\"keys\":[],\"tags\":[]},\"graph_size\":\"xs\"}},{\"type\":\"notebook_cells\",\"id\":\"39crgjxd\",\"attributes\":{\"definition\":{\"type\":\"markdown\",\"text\":\"When filtering by the template variable `container_deployment_guid`, this value represents the number of VMs (or `troux_uuid`s) that `container_deployment_guid` runs on \"}}}],\"time\":{\"live_span\":\"2d\"},\"metadata\":{\"take_snapshots\":false,\"is_template\":false,\"is_favorite\":false,\"type\":null},\"template_variables\":[{\"name\":\"container_deployment_guid\",\"prefix\":\"app_name\",\"available_values\":[],\"default\":\"*\"},{\"name\":\"troux_uuid\",\"prefix\":\"bosh_id\",\"available_values\":[],\"default\":\"*\"}],\"status\":\"published\",\"modified\":\"2023-02-16T17:32:46.774359+00:00\",\"created\":\"2023-02-14T20:04:16.789408+00:00\",\"author\":{\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"email\":\"sarah.witt@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/7f710a0bcefa8df8d47bfcba79f69a40?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}}],\"meta\":{\"page\":{\"total_count\":158,\"total_filtered_count\":2}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all notebooks returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Notebooks", + "frozen_at": "2022-05-12T09:50:10.009Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "cells": [ + { + "attributes": { + "definition": { + "text": "# Test-Update_a_notebook_returns_OK_response-1652349010 notebook text", + "type": "markdown" + } + }, + "type": "notebook_cells" + } + ], + "name": "Test-Update_a_notebook_returns_OK_response-1652349010", + "time": { + "live_span": "1h" + } + }, + "type": "notebooks" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/notebooks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"notebooks\",\"id\":2466034,\"attributes\":{\"name\":\"Test-Update_a_notebook_returns_OK_response-1652349010\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"# Test-Update_a_notebook_returns_OK_response-1652349010 notebook text\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"ous795rr\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_favorite\":false,\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":[],\"status\":\"published\",\"modified\":\"2022-05-12T09:50:10.418530+00:00\",\"created\":\"2022-05-12T09:50:10.418530+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "cells": [ + { + "attributes": { + "definition": { + "text": "## Some test markdown\n\n```\nvar x, y;\nx = 5;\ny = 6;\n```", + "type": "markdown" + } + }, + "type": "notebook_cells" + }, + { + "attributes": { + "definition": { + "requests": [ + { + "display_type": "line", + "q": "avg:system.load.1{*}", + "style": { + "line_type": "solid", + "line_width": "normal", + "palette": "dog_classic" + } + } + ], + "show_legend": true, + "type": "timeseries", + "yaxis": { + "scale": "linear" + } + }, + "graph_size": "m", + "split_by": { + "keys": [], + "tags": [] + }, + "time": null + }, + "type": "notebook_cells" + } + ], + "name": "Test-Update_a_notebook_returns_OK_response-1652349010-updated", + "status": "published", + "time": { + "live_span": "1h" + } + }, + "type": "notebooks" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/notebooks/2466034", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"notebooks\",\"id\":2466034,\"attributes\":{\"name\":\"Test-Update_a_notebook_returns_OK_response-1652349010-updated\",\"cells\":[{\"attributes\":{\"definition\":{\"text\":\"## Some test markdown\\n\\n```\\nvar x, y;\\nx = 5;\\ny = 6;\\n```\",\"type\":\"markdown\"}},\"type\":\"notebook_cells\",\"id\":\"7th9aiq2\"},{\"attributes\":{\"definition\":{\"requests\":[{\"q\":\"avg:system.load.1{*}\",\"style\":{\"line_width\":\"normal\",\"palette\":\"dog_classic\",\"line_type\":\"solid\"},\"display_type\":\"line\"}],\"type\":\"timeseries\",\"show_legend\":true,\"yaxis\":{\"scale\":\"linear\"}},\"graph_size\":\"m\",\"split_by\":{\"keys\":[],\"tags\":[]},\"time\":null},\"type\":\"notebook_cells\",\"id\":\"dvsx205s\"}],\"time\":{\"live_span\":\"1h\"},\"metadata\":{\"is_favorite\":false,\"is_template\":false,\"type\":null,\"take_snapshots\":false},\"template_variables\":[],\"status\":\"published\",\"modified\":\"2022-05-12T09:50:10.903600+00:00\",\"created\":\"2022-05-12T09:50:10.418530+00:00\",\"author\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"disabled\":false,\"status\":\"Active\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/notebooks/2466034", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a notebook returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/security-monitoring.json b/test-server-data/v1/security-monitoring.json new file mode 100644 index 0000000000..e605fc3d86 --- /dev/null +++ b/test-server-data/v1/security-monitoring.json @@ -0,0 +1,107 @@ +{ + "feature": "Security Monitoring", + "recordings": [ + { + "feature": "Security Monitoring", + "frozen_at": "2022-05-20T15:17:51.394Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "incident_id": 2609 + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v1/security_analytics/signals/AQAAAYDiB_Ol8PbzFAAAAABBWURpQl9PbEFBQU0yeXhGTG9ZV2JnQUE/add_to_incident", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"done\",\"elapsed\":4,\"hitCount\":1,\"type\":\"status\",\"requestId\":\"pddv1ChZVSG9rS0xiLVROR0UzaExkSVRnaTZBIisKG6tMRhR9fRc0eaDfripyLqgONwbpcw5WGKATXBIMaeO6PoTCinH6lG0J\"}" + }, + "headers": { + "content-type": "application/json;charset=utf-8" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Add a security signal to an incident returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2022-05-20T15:18:37.837Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "archiveReason": "none", + "state": "open" + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v1/security_analytics/signals/AQAAAYDiB_Ol8PbzFAAAAABBWURpQl9PbEFBQU0yeXhGTG9ZV2JnQUE/state", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"done\",\"elapsed\":6,\"hitCount\":1,\"type\":\"status\",\"requestId\":\"pddv1ChZsZTVoQTlZUlRCMmZIaVp6QmtSb1FRIi0KHTZc_OyWqjtN77Y9KyBimz5OCepk1bY1rIo4vE37Egx-rD3hrV23n4SU9ds\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Change the triage state of a security signal returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2022-05-20T15:18:23.150Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "assignee": "773b045d-ccf8-4808-bd3b-955ef6a8c940" + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v1/security_analytics/signals/AQAAAYDiB_Ol8PbzFAAAAABBWURpQl9PbEFBQU0yeXhGTG9ZV2JnQUE/assignee", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"done\",\"elapsed\":4,\"hitCount\":1,\"type\":\"status\",\"requestId\":\"pddv1ChZSZEFGOVVCR1NEMmk4V2xsUnlsLVdBIiwKHO4N7zMgBuJVPFh9vBniHGgyfw7UoOk5ULtgX2cSDMZkxtW2dY1nP5am-Q\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Modify the triage assignee of a security signal returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/service-checks.json b/test-server-data/v1/service-checks.json new file mode 100644 index 0000000000..6c9f109805 --- /dev/null +++ b/test-server-data/v1/service-checks.json @@ -0,0 +1,47 @@ +{ + "feature": "Service Checks", + "recordings": [ + { + "feature": "Service Checks", + "frozen_at": "2022-05-12T09:50:11.594Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": [ + { + "check": "app.ok", + "host_name": "host", + "status": 0, + "tags": [ + "test:TestSubmitaServiceCheckreturnsPayloadacceptedresponse1652349011" + ] + } + ] + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/check_run", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\": \"ok\"}" + }, + "headers": { + "content-type": "text/json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Submit a Service Check returns \"Payload accepted\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/service-level-objective-corrections.json b/test-server-data/v1/service-level-objective-corrections.json new file mode 100644 index 0000000000..6951f47d66 --- /dev/null +++ b/test-server-data/v1/service-level-objective-corrections.json @@ -0,0 +1,954 @@ +{ + "feature": "Service Level Objective Corrections", + "recordings": [ + { + "feature": "Service Level Objective Corrections", + "frozen_at": "2022-05-12T09:50:11.949Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Create_an_SLO_correction_returns_OK_response-1652349011", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"description\":\"\",\"monitor_tags\":[],\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":null,\"email\":\"frog@datadoghq.com\"},\"thresholds\":[{\"warning\":98.0,\"warning_display\":\"98.\",\"target\":95.0,\"target_display\":\"95.\",\"timeframe\":\"7d\"}],\"type_id\":1,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"id\":\"26d1f492d25b598fb6ef1a0405faa153\",\"name\":\"Test-Create_an_SLO_correction_returns_OK_response-1652349011\",\"created_at\":1652349012,\"tags\":[],\"modified_at\":1652349012,\"type\":\"metric\"}],\"error\":null}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Scheduled Maintenance", + "description": "Test-Create_an_SLO_correction_returns_OK_response-1652349011", + "end": 1652352611, + "slo_id": "26d1f492d25b598fb6ef1a0405faa153", + "start": 1652349011, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo/correction", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"eb223538-d1d8-11ec-8dd2-da7ad0902002\",\"attributes\":{\"slo_id\":\"26d1f492d25b598fb6ef1a0405faa153\",\"start\":1652349011,\"end\":1652352611,\"description\":\"Test-Create_an_SLO_correction_returns_OK_response-1652349011\",\"category\":\"Scheduled Maintenance\",\"timezone\":\"UTC\",\"created_at\":null,\"modified_at\":null,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":null}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/correction/eb223538-d1d8-11ec-8dd2-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/26d1f492d25b598fb6ef1a0405faa153", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"26d1f492d25b598fb6ef1a0405faa153\"],\"error\":null}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an SLO correction returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "frozen_at": "2022-05-12T09:50:14.117Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Create_an_SLO_correction_with_rrule_returns_OK_response-1652349014", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"description\":\"\",\"monitor_tags\":[],\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":null,\"email\":\"frog@datadoghq.com\"},\"thresholds\":[{\"warning\":98.0,\"warning_display\":\"98.\",\"target\":95.0,\"target_display\":\"95.\",\"timeframe\":\"7d\"}],\"type_id\":1,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"id\":\"24892d3875ee57e7a9e1320ebffa3916\",\"name\":\"Test-Create_an_SLO_correction_with_rrule_returns_OK_response-1652349014\",\"created_at\":1652349014,\"tags\":[],\"modified_at\":1652349014,\"type\":\"metric\"}],\"error\":null}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Scheduled Maintenance", + "description": "Test-Create_an_SLO_correction_with_rrule_returns_OK_response-1652349014", + "duration": 3600, + "rrule": "FREQ=DAILY;INTERVAL=10;COUNT=5", + "slo_id": "24892d3875ee57e7a9e1320ebffa3916", + "start": 1652349014, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo/correction", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"ec8f9488-d1d8-11ec-bc64-da7ad0902002\",\"attributes\":{\"slo_id\":\"24892d3875ee57e7a9e1320ebffa3916\",\"start\":1652349014,\"end\":null,\"description\":\"Test-Create_an_SLO_correction_with_rrule_returns_OK_response-1652349014\",\"category\":\"Scheduled Maintenance\",\"timezone\":\"UTC\",\"created_at\":null,\"modified_at\":null,\"rrule\":\"FREQ=DAILY;INTERVAL=10;COUNT=5\",\"duration\":3600,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":null}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/correction/ec8f9488-d1d8-11ec-bc64-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/24892d3875ee57e7a9e1320ebffa3916", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"24892d3875ee57e7a9e1320ebffa3916\"],\"error\":null}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an SLO correction with rrule returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "frozen_at": "2026-05-27T20:45:22.423Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Scheduled Maintenance", + "description": "Test-Create_an_SLO_correction_with_slo_query_returns_OK_response-1779914722", + "end": 1779918322, + "slo_query": "env:prod service:checkout", + "start": 1779914722, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo/correction", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"fb3a5c0a-5a0c-11f1-8207-da7ad0902002\",\"attributes\":{\"slo_id\":null,\"start\":1779914722,\"end\":1779918322,\"description\":\"Test-Create_an_SLO_correction_with_slo_query_returns_OK_response-1779914722\",\"category\":\"Scheduled Maintenance\",\"timezone\":\"UTC\",\"created_at\":null,\"modified_at\":null,\"rrule\":null,\"duration\":null,\"slo_query\":\"env:prod service:checkout\",\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"780cfef8-1736-4a4e-a826-b875b1cadcec\",\"attributes\":{\"uuid\":\"780cfef8-1736-4a4e-a826-b875b1cadcec\",\"handle\":\"blaise.vonohlen@datadoghq.com\",\"email\":\"blaise.vonohlen@datadoghq.com\",\"name\":\"Blaise von Ohlen\",\"icon\":\"https://secure.gravatar.com/avatar/c78d8282d57321884e8f77172229634f?s=48&d=retro\"}}},\"modifier\":null}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/correction/fb3a5c0a-5a0c-11f1-8207-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an SLO correction with slo_query returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "frozen_at": "2022-11-17T16:38:19.644Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_all_SLO_corrections_returns_OK_response-1668703099", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"60569193a09054f6bc6fa6e87fb43031\",\"name\":\"Test-Get_all_SLO_corrections_returns_OK_response-1668703099\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1668703100,\"modified_at\":1668703100}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Other", + "description": "Test Correction", + "end": 1668706699, + "slo_id": "60569193a09054f6bc6fa6e87fb43031", + "start": 1668703099, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo/correction", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"3ecd96c6-6696-11ed-9c21-da7ad0902002\",\"attributes\":{\"slo_id\":\"60569193a09054f6bc6fa6e87fb43031\",\"start\":1668703099,\"end\":1668706699,\"description\":\"Test Correction\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":null,\"modified_at\":null,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":null}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo/correction", + "query": [ + [ + "limit", + "1" + ], + [ + "offset", + "1" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"correction\",\"id\":\"3ecd96c6-6696-11ed-9c21-da7ad0902002\",\"attributes\":{\"slo_id\":\"60569193a09054f6bc6fa6e87fb43031\",\"start\":1668703099,\"end\":1668706699,\"description\":\"Test Correction\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":1668703100,\"modified_at\":1668703100,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":null}}],\"meta\":{\"page\":{\"total_count\":2,\"total_filtered_count\":1}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/correction/3ecd96c6-6696-11ed-9c21-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/60569193a09054f6bc6fa6e87fb43031", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"60569193a09054f6bc6fa6e87fb43031\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all SLO corrections returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "frozen_at": "2023-08-25T11:50:34.970Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo/correction", + "query": [ + [ + "limit", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"correction\",\"id\":\"fb76e0fa-bf7b-11ed-ba7e-da7ad0902002\",\"attributes\":{\"slo_id\":\"a17acfd48b7c55d19192e3a697cc1d01\",\"start\":1678255200,\"end\":1678355280,\"description\":\"\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":1678477473,\"modified_at\":1678477473,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"35c75d43-eba0-11e9-a77a-2b3585ff5dfb\",\"attributes\":{\"uuid\":\"35c75d43-eba0-11e9-a77a-2b3585ff5dfb\",\"handle\":\"support-nickautotestingorg\",\"email\":\"support-user-prod@datadoghq.com\",\"name\":\"Datadog Support\",\"icon\":\"https://secure.gravatar.com/avatar/e6952b5f29fe2d996cf4e63f40db9e71?s=48&d=retro\"}}},\"modifier\":null}},{\"type\":\"correction\",\"id\":\"2d16c2ee-bf70-11ed-895f-da7ad0902002\",\"attributes\":{\"slo_id\":\"70e82706f4ae56ff8bdd7f02e767f97c\",\"start\":1678255200,\"end\":1678339140,\"description\":\"\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":1678472403,\"modified_at\":1678472403,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"35c75d43-eba0-11e9-a77a-2b3585ff5dfb\",\"attributes\":{\"uuid\":\"35c75d43-eba0-11e9-a77a-2b3585ff5dfb\",\"handle\":\"support-nickautotestingorg\",\"email\":\"support-user-prod@datadoghq.com\",\"name\":\"Datadog Support\",\"icon\":\"https://secure.gravatar.com/avatar/e6952b5f29fe2d996cf4e63f40db9e71?s=48&d=retro\"}}},\"modifier\":null}}],\"meta\":{\"page\":{\"total_count\":3,\"total_filtered_count\":2}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo/correction", + "query": [ + [ + "limit", + "2" + ], + [ + "offset", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"correction\",\"id\":\"cc2316d2-bf6e-11ed-82f2-da7ad0902002\",\"attributes\":{\"slo_id\":\"955ab6301fa656e7b061de4a05ad4774\",\"start\":1678255200,\"end\":1678339140,\"description\":\"\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":1678471811,\"modified_at\":1678471811,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"35c75d43-eba0-11e9-a77a-2b3585ff5dfb\",\"attributes\":{\"uuid\":\"35c75d43-eba0-11e9-a77a-2b3585ff5dfb\",\"handle\":\"support-nickautotestingorg\",\"email\":\"support-user-prod@datadoghq.com\",\"name\":\"Datadog Support\",\"icon\":\"https://secure.gravatar.com/avatar/e6952b5f29fe2d996cf4e63f40db9e71?s=48&d=retro\"}}},\"modifier\":null}}],\"meta\":{\"page\":{\"total_count\":3,\"total_filtered_count\":1}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all SLO corrections returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "frozen_at": "2022-05-12T09:50:19.508Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_an_SLO_correction_for_an_SLO_returns_OK_response-1652349019", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"description\":\"\",\"monitor_tags\":[],\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":null,\"email\":\"frog@datadoghq.com\"},\"thresholds\":[{\"warning\":98.0,\"warning_display\":\"98.\",\"target\":95.0,\"target_display\":\"95.\",\"timeframe\":\"7d\"}],\"type_id\":1,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"id\":\"b7e8543aac97516ebb61e8743d1a10a1\",\"name\":\"Test-Get_an_SLO_correction_for_an_SLO_returns_OK_response-1652349019\",\"created_at\":1652349019,\"tags\":[],\"modified_at\":1652349019,\"type\":\"metric\"}],\"error\":null}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Other", + "description": "Test Correction", + "end": 1652352619, + "slo_id": "b7e8543aac97516ebb61e8743d1a10a1", + "start": 1652349019, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo/correction", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"efa6f9ea-d1d8-11ec-9495-da7ad0902002\",\"attributes\":{\"slo_id\":\"b7e8543aac97516ebb61e8743d1a10a1\",\"start\":1652349019,\"end\":1652352619,\"description\":\"Test Correction\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":null,\"modified_at\":null,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":null}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo/correction/efa6f9ea-d1d8-11ec-9495-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"efa6f9ea-d1d8-11ec-9495-da7ad0902002\",\"attributes\":{\"slo_id\":\"b7e8543aac97516ebb61e8743d1a10a1\",\"start\":1652349019,\"end\":1652352619,\"description\":\"Test Correction\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":1652349020,\"modified_at\":1652349020,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":null}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/correction/efa6f9ea-d1d8-11ec-9495-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/b7e8543aac97516ebb61e8743d1a10a1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"b7e8543aac97516ebb61e8743d1a10a1\"],\"error\":null}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an SLO correction for an SLO returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "frozen_at": "2022-05-12T09:50:22.032Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Update_an_SLO_correction_returns_OK_response-1652349022", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"description\":\"\",\"monitor_tags\":[],\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":null,\"email\":\"frog@datadoghq.com\"},\"thresholds\":[{\"warning\":98.0,\"warning_display\":\"98.\",\"target\":95.0,\"target_display\":\"95.\",\"timeframe\":\"7d\"}],\"type_id\":1,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"id\":\"c20f6845962c5776b1440ed8d324d6fe\",\"name\":\"Test-Update_an_SLO_correction_returns_OK_response-1652349022\",\"created_at\":1652349022,\"tags\":[],\"modified_at\":1652349022,\"type\":\"metric\"}],\"error\":null}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Other", + "description": "Test Correction", + "end": 1652352622, + "slo_id": "c20f6845962c5776b1440ed8d324d6fe", + "start": 1652349022, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo/correction", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"f12e44e4-d1d8-11ec-9dc0-da7ad0902002\",\"attributes\":{\"slo_id\":\"c20f6845962c5776b1440ed8d324d6fe\",\"start\":1652349022,\"end\":1652352622,\"description\":\"Test Correction\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":null,\"modified_at\":null,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":null}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Deployment", + "description": "Test-Update_an_SLO_correction_returns_OK_response-1652349022", + "end": 1652352622, + "start": 1652349022, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v1/slo/correction/f12e44e4-d1d8-11ec-9dc0-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"f12e44e4-d1d8-11ec-9dc0-da7ad0902002\",\"attributes\":{\"slo_id\":\"c20f6845962c5776b1440ed8d324d6fe\",\"start\":1652349022,\"end\":1652352622,\"description\":\"Test-Update_an_SLO_correction_returns_OK_response-1652349022\",\"category\":\"Deployment\",\"timezone\":\"UTC\",\"created_at\":1652349023,\"modified_at\":1652349023,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/correction/f12e44e4-d1d8-11ec-9dc0-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/c20f6845962c5776b1440ed8d324d6fe", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"c20f6845962c5776b1440ed8d324d6fe\"],\"error\":null}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update an SLO correction returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objective Corrections", + "frozen_at": "2026-06-03T15:43:01.600Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Other", + "description": "Test Correction", + "end": 1780504981, + "slo_query": "env:prod service:checkout", + "start": 1780501381, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo/correction", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"e74cc4de-5f62-11f1-a69d-da7ad0902002\",\"attributes\":{\"slo_id\":null,\"start\":1780501381,\"end\":1780504981,\"description\":\"Test Correction\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":null,\"modified_at\":null,\"rrule\":null,\"duration\":null,\"slo_query\":\"env:prod service:checkout\",\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"780cfef8-1736-4a4e-a826-b875b1cadcec\",\"attributes\":{\"uuid\":\"780cfef8-1736-4a4e-a826-b875b1cadcec\",\"handle\":\"blaise.vonohlen@datadoghq.com\",\"email\":\"blaise.vonohlen@datadoghq.com\",\"name\":\"Blaise von Ohlen\",\"icon\":\"https://secure.gravatar.com/avatar/c78d8282d57321884e8f77172229634f?s=48&d=retro\"}}},\"modifier\":null}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Scheduled Maintenance", + "description": "Test-Update_an_SLO_correction_with_slo_query_returns_OK_response-1780501381", + "end": 1780504981, + "slo_query": "env:staging service:checkout", + "start": 1780501381, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v1/slo/correction/e74cc4de-5f62-11f1-a69d-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"e74cc4de-5f62-11f1-a69d-da7ad0902002\",\"attributes\":{\"slo_id\":null,\"start\":1780501381,\"end\":1780504981,\"description\":\"Test-Update_an_SLO_correction_with_slo_query_returns_OK_response-1780501381\",\"category\":\"Scheduled Maintenance\",\"timezone\":\"UTC\",\"created_at\":1780501381,\"modified_at\":1780501381,\"rrule\":null,\"duration\":null,\"slo_query\":\"env:staging service:checkout\",\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"780cfef8-1736-4a4e-a826-b875b1cadcec\",\"attributes\":{\"uuid\":\"780cfef8-1736-4a4e-a826-b875b1cadcec\",\"handle\":\"blaise.vonohlen@datadoghq.com\",\"email\":\"blaise.vonohlen@datadoghq.com\",\"name\":\"Blaise von Ohlen\",\"icon\":\"https://secure.gravatar.com/avatar/c78d8282d57321884e8f77172229634f?s=48&d=retro\"}}},\"modifier\":{\"data\":{\"type\":\"users\",\"id\":\"780cfef8-1736-4a4e-a826-b875b1cadcec\",\"attributes\":{\"uuid\":\"780cfef8-1736-4a4e-a826-b875b1cadcec\",\"handle\":\"blaise.vonohlen@datadoghq.com\",\"email\":\"blaise.vonohlen@datadoghq.com\",\"name\":\"Blaise von Ohlen\",\"icon\":\"https://secure.gravatar.com/avatar/c78d8282d57321884e8f77172229634f?s=48&d=retro\"}}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/correction/e74cc4de-5f62-11f1-a69d-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an SLO correction with slo_query returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/service-level-objectives.json b/test-server-data/v1/service-level-objectives.json new file mode 100644 index 0000000000..5046924e71 --- /dev/null +++ b/test-server-data/v1/service-level-objectives.json @@ -0,0 +1,1359 @@ +{ + "feature": "Service Level Objectives", + "recordings": [ + { + "feature": "Service Level Objectives", + "frozen_at": "2026-02-25T17:45:38.518Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "Metric SLO using sli_specification", + "name": "Test-Create_a_new_metric_SLO_object_using_bad_events_formula_returns_OK_response-1772041538", + "sli_specification": { + "count": { + "bad_events_formula": { + "formula": "query2" + }, + "good_events_formula": { + "formula": "query1 - query2" + }, + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:httpservice.hits{*}.as_count()" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "sum:httpservice.errors{*}.as_count()" + } + ] + } + }, + "tags": [ + "env:prod", + "type:count" + ], + "target_threshold": 99, + "thresholds": [ + { + "target": 99, + "target_display": "99.0", + "timeframe": "7d", + "warning": 99.5, + "warning_display": "99.5" + } + ], + "timeframe": "7d", + "type": "metric", + "warning_threshold": 99.5 + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"7309ff3752fd519f80f65a2ed3247dbb\",\"name\":\"Test-Create_a_new_metric_SLO_object_using_bad_events_formula_returns_OK_response-1772041538\",\"tags\":[\"env:prod\",\"type:count\"],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":99.0,\"target_display\":\"99.\",\"warning\":99.5,\"warning_display\":\"99.5\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"Metric SLO using sli_specification\",\"timeframe\":\"7d\",\"warning_threshold\":99.5,\"target_threshold\":99,\"query\":{\"numerator\":\"sum:httpservice.hits{*}.as_count() - sum:httpservice.errors{*}.as_count()\",\"denominator\":\"(sum:httpservice.hits{*}.as_count() - sum:httpservice.errors{*}.as_count()) + (sum:httpservice.errors{*}.as_count())\"},\"creator\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"created_at\":1772041538,\"modified_at\":1772041538,\"sli_specification\":{\"count\":{\"bad_events_formula\":{\"formula\":\"query2\"},\"good_events_formula\":{\"formula\":\"query1 - query2\"},\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"sum:httpservice.hits{*}.as_count()\"},{\"data_source\":\"metrics\",\"name\":\"query2\",\"query\":\"sum:httpservice.errors{*}.as_count()\"}]}}}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/7309ff3752fd519f80f65a2ed3247dbb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"7309ff3752fd519f80f65a2ed3247dbb\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new metric SLO object using bad events formula returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2026-02-05T20:07:38.100Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "Metric SLO using sli_specification", + "name": "Test-Create_a_new_metric_SLO_object_using_sli_specification_returns_OK_response-1770322058", + "sli_specification": { + "count": { + "good_events_formula": { + "formula": "query1 - query2" + }, + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "sum:httpservice.hits{*}.as_count()" + }, + { + "data_source": "metrics", + "name": "query2", + "query": "sum:httpservice.errors{*}.as_count()" + } + ], + "total_events_formula": { + "formula": "query1" + } + } + }, + "tags": [ + "env:prod", + "type:count" + ], + "target_threshold": 99, + "thresholds": [ + { + "target": 99, + "target_display": "99.0", + "timeframe": "7d", + "warning": 99.5, + "warning_display": "99.5" + } + ], + "timeframe": "7d", + "type": "metric", + "warning_threshold": 99.5 + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"6e49f8aa9883507dbc719f00eede5a5d\",\"name\":\"Test-Create_a_new_metric_SLO_object_using_sli_specification_returns_OK_response-1770322058\",\"tags\":[\"env:prod\",\"type:count\"],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":99.0,\"target_display\":\"99.\",\"warning\":99.5,\"warning_display\":\"99.5\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"Metric SLO using sli_specification\",\"timeframe\":\"7d\",\"warning_threshold\":99.5,\"target_threshold\":99,\"query\":{\"numerator\":\"sum:httpservice.hits{*}.as_count() - sum:httpservice.errors{*}.as_count()\",\"denominator\":\"sum:httpservice.hits{*}.as_count()\"},\"creator\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"created_at\":1770322058,\"modified_at\":1770322058,\"sli_specification\":{\"count\":{\"good_events_formula\":{\"formula\":\"query1 - query2\"},\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"sum:httpservice.hits{*}.as_count()\"},{\"data_source\":\"metrics\",\"name\":\"query2\",\"query\":\"sum:httpservice.errors{*}.as_count()\"}],\"total_events_formula\":{\"formula\":\"query1\"}}}}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/6e49f8aa9883507dbc719f00eede5a5d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"6e49f8aa9883507dbc719f00eede5a5d\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new metric SLO object using sli_specification returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:44.816Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "string", + "name": "Test-Create_a_time_slice_SLO_object_returns_OK_response-1704322484", + "sli_specification": { + "time_slice": { + "comparator": ">", + "query": { + "formulas": [ + { + "formula": "query1" + } + ], + "queries": [ + { + "data_source": "metrics", + "name": "query1", + "query": "trace.servlet.request{env:prod}" + } + ] + }, + "threshold": 5 + } + }, + "tags": [ + "env:prod" + ], + "target_threshold": 97, + "thresholds": [ + { + "target": 97, + "target_display": "97.0", + "timeframe": "7d", + "warning": 98, + "warning_display": "98.0" + } + ], + "timeframe": "7d", + "type": "time_slice", + "warning_threshold": 98 + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"776b80141eda520bbfae33e897849f61\",\"name\":\"Test-Create_a_time_slice_SLO_object_returns_OK_response-1704322484\",\"tags\":[\"env:prod\"],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":97.0,\"target_display\":\"97.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"time_slice\",\"type_id\":2,\"description\":\"string\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":97,\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322485,\"modified_at\":1704322485,\"sli_specification\":{\"time_slice\":{\"comparator\":\">\",\"query\":{\"formulas\":[{\"formula\":\"query1\"}],\"queries\":[{\"data_source\":\"metrics\",\"name\":\"query1\",\"query\":\"trace.servlet.request{env:prod}\"}]},\"threshold\":5,\"query_interval_seconds\":300}}}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/776b80141eda520bbfae33e897849f61", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"776b80141eda520bbfae33e897849f61\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a time-slice SLO object returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:45.312Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Create_an_SLO_object_returns_Bad_Request_response-1704322485", + "thresholds": [ + { + "target": 95, + "target_display": "95.0", + "timeframe": "7d", + "warning": 98, + "warning_display": "98.0" + } + ], + "type": "monitor" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid payload: must specify monitor_ids\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create an SLO object returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:45.425Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "description": "string", + "groups": [ + "env:test", + "role:mysql" + ], + "monitor_ids": [], + "name": "Test-Create_an_SLO_object_returns_OK_response-1704322485", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "tags": [ + "env:prod", + "app:core" + ], + "target_threshold": 97, + "thresholds": [ + { + "target": 97, + "target_display": "97.0", + "timeframe": "7d", + "warning": 98, + "warning_display": "98.0" + } + ], + "timeframe": "7d", + "type": "metric", + "warning_threshold": 98 + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"6a3ffb99fc285f4f947ccf83d888558b\",\"name\":\"Test-Create_an_SLO_object_returns_OK_response-1704322485\",\"tags\":[\"app:core\",\"env:prod\"],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":97.0,\"target_display\":\"97.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"string\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":97,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322485,\"modified_at\":1704322485,\"groups\":[\"env:test\",\"role:mysql\"]}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/6a3ffb99fc285f4f947ccf83d888558b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"6a3ffb99fc285f4f947ccf83d888558b\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an SLO object returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:45.952Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/testdeleteansloreturnsnotfoundresponse1704322485", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"SLO not found: testdeleteansloreturnsnotfoundresponse1704322485 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an SLO returns \"Not found\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:46.108Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Delete_an_SLO_returns_OK_response-1704322486", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"6065f42541b856f3abaf255e6a61de79\",\"name\":\"Test-Delete_an_SLO_returns_OK_response-1704322486\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322486,\"modified_at\":1704322486}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/6065f42541b856f3abaf255e6a61de79", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"6065f42541b856f3abaf255e6a61de79\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/6065f42541b856f3abaf255e6a61de79", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"SLO not found: 6065f42541b856f3abaf255e6a61de79 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an SLO returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:46.662Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_Corrections_For_an_SLO_returns_OK_response-1704322486", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"029b3b619a6255eb899c46681dd7038f\",\"name\":\"Test-Get_Corrections_For_an_SLO_returns_OK_response-1704322486\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322486,\"modified_at\":1704322486}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "Other", + "description": "Test Correction", + "end": 1704326086, + "slo_id": "029b3b619a6255eb899c46681dd7038f", + "start": 1704322486, + "timezone": "UTC" + }, + "type": "correction" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo/correction", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"correction\",\"id\":\"17b61420-aa8b-11ee-97f2-da7ad0902002\",\"attributes\":{\"slo_id\":\"029b3b619a6255eb899c46681dd7038f\",\"start\":1704322486,\"end\":1704326086,\"description\":\"Test Correction\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":null,\"modified_at\":null,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":null}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo/029b3b619a6255eb899c46681dd7038f/corrections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"correction\",\"id\":\"17b61420-aa8b-11ee-97f2-da7ad0902002\",\"attributes\":{\"slo_id\":\"029b3b619a6255eb899c46681dd7038f\",\"start\":1704322486,\"end\":1704326086,\"description\":\"Test Correction\",\"category\":\"Other\",\"timezone\":\"UTC\",\"created_at\":1704322487,\"modified_at\":1704322487,\"rrule\":null,\"duration\":null,\"creator\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"modifier\":null}}],\"meta\":{\"pagination\":{\"offset\":0,\"first_offset\":0,\"prev_offset\":0,\"next_offset\":10,\"last_offset\":0,\"limit\":10,\"type\":\"offset_limit\",\"total\":1}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v1/slo/029b3b619a6255eb899c46681dd7038f/corrections\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v1/slo/029b3b619a6255eb899c46681dd7038f/corrections?page[offset]=10&page[limit]=10\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v1/slo/029b3b619a6255eb899c46681dd7038f/corrections?page[offset]=0&page[limit]=10\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/correction/17b61420-aa8b-11ee-97f2-da7ad0902002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/029b3b619a6255eb899c46681dd7038f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"029b3b619a6255eb899c46681dd7038f\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get Corrections For an SLO returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:47.632Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_all_SLOs_returns_OK_response-1704322487", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"c2ce7fb6030c5c0b8035d1ce94dec12c\",\"name\":\"Test-Get_all_SLOs_returns_OK_response-1704322487\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322487,\"modified_at\":1704322487}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo", + "query": [ + [ + "ids", + "c2ce7fb6030c5c0b8035d1ce94dec12c" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"c2ce7fb6030c5c0b8035d1ce94dec12c\",\"name\":\"Test-Get_all_SLOs_returns_OK_response-1704322487\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98.0,\"target_threshold\":95.0,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322487,\"modified_at\":1704322487}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/c2ce7fb6030c5c0b8035d1ce94dec12c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"c2ce7fb6030c5c0b8035d1ce94dec12c\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all SLOs returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2023-08-25T12:33:42.432Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo", + "query": [ + [ + "limit", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"70e82706f4ae56ff8bdd7f02e767f97c\",\"name\":\"test SLO 1668426861\",\"tags\":[\"type:test\"],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":90.0,\"target_display\":\"90.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"target_threshold\":90.0,\"query\":{\"denominator\":\"sum:my.custom.metric{!type:ignored}.as_count()\",\"numerator\":\"sum:my.custom.metric{type:good,!type:ignored}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1668426862,\"modified_at\":1668426862},{\"id\":\"955ab6301fa656e7b061de4a05ad4774\",\"name\":\"tf-TestAccDatadogServiceLevelObjective_Basic-local-1673543942-updated\",\"tags\":[\"foo:bar\",\"baz\"],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":99.5,\"target_display\":\"99.5\",\"warning\":99.8,\"warning_display\":\"99.8\"},{\"timeframe\":\"30d\",\"target\":98.0,\"target_display\":\"98.\",\"warning\":99.0,\"warning_display\":\"99.\"},{\"timeframe\":\"90d\",\"target\":99.9,\"target_display\":\"99.9\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"some updated description about foo SLO\",\"timeframe\":\"7d\",\"warning_threshold\":99.8,\"target_threshold\":99.5,\"query\":{\"denominator\":\"sum:my.metric{type:good}.as_count() + sum:my.metric{type:bad}.as_count()\",\"numerator\":\"sum:my.metric{type:good}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1673543944,\"modified_at\":1673543945}],\"error\":null,\"metadata\":{\"page\":{\"total_count\":3,\"total_filtered_count\":2}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo", + "query": [ + [ + "limit", + "2" + ], + [ + "offset", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"a17acfd48b7c55d19192e3a697cc1d01\",\"name\":\"test SLO 1677686870\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":90.0,\"target_display\":\"90.\"}],\"type\":\"monitor\",\"type_id\":0,\"description\":\"\",\"timeframe\":\"7d\",\"target_threshold\":90.0,\"monitor_ids\":[112445445],\"creator\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"created_at\":1677686871,\"modified_at\":1677686871}],\"error\":null,\"metadata\":{\"page\":{\"total_count\":3,\"total_filtered_count\":2}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all SLOs returns \"OK\" response with pagination", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:48.137Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_an_SLO_s_details_returns_OK_response-1704322488", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"ebf2e048f49a5134b61a586438c66505\",\"name\":\"Test-Get_an_SLO_s_details_returns_OK_response-1704322488\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322488,\"modified_at\":1704322488}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo/ebf2e048f49a5134b61a586438c66505", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ebf2e048f49a5134b61a586438c66505\",\"name\":\"Test-Get_an_SLO_s_details_returns_OK_response-1704322488\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98.0,\"target_threshold\":95.0,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322488,\"modified_at\":1704322488},\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/ebf2e048f49a5134b61a586438c66505", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"ebf2e048f49a5134b61a586438c66505\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an SLO's details returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:48.654Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_an_SLO_s_history_returns_OK_response-1704322488", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"627a3ccd24af50beb8eacbd36c5962f9\",\"name\":\"Test-Get_an_SLO_s_history_returns_OK_response-1704322488\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322488,\"modified_at\":1704322488}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo/627a3ccd24af50beb8eacbd36c5962f9/history", + "query": [ + [ + "from_ts", + "1704236088" + ], + [ + "to_ts", + "1704322488" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"thresholds\":{\"7d\":{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}},\"from_ts\":1704236088,\"to_ts\":1704322488,\"type\":\"metric\",\"type_id\":1,\"slo\":{\"id\":\"627a3ccd24af50beb8eacbd36c5962f9\",\"name\":\"Test-Get_an_SLO_s_history_returns_OK_response-1704322488\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98.0,\"target_threshold\":95.0,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322488,\"modified_at\":1704322488},\"group_by\":[],\"series\":{\"timing\":\"0.02146005630493164\",\"res_type\":\"time_series\",\"resp_version\":2,\"query\":\"default_zero(sum:httpservice.hits{code:2xx}.as_count()), default_zero(sum:httpservice.hits{!code:3xx}.as_count())\",\"from_date\":1704236088000,\"to_date\":1704322488000,\"message\":\"\",\"interval\":7200,\"times\":[1704235800000.0,1704240000000.0,1704247200000.0,1704254400000.0,1704261600000.0,1704268800000.0,1704276000000.0,1704283200000.0,1704290400000.0,1704297600000.0,1704304800000.0,1704312000000.0,1704319200000.0],\"numerator\":{\"values\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],\"metadata\":{\"unit\":null,\"query_index\":0,\"aggr\":\"sum\",\"metric\":\"default_zero(httpservice.hits)\",\"tag_set\":[],\"expression\":\"default_zero(sum:httpservice.hits{code:2xx}.as_count())\",\"scope\":\"code:2xx\"},\"sum\":0.0,\"count\":13},\"denominator\":{\"values\":[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0],\"metadata\":{\"unit\":null,\"query_index\":1,\"aggr\":\"sum\",\"metric\":\"default_zero(httpservice.hits)\",\"tag_set\":[],\"expression\":\"default_zero(sum:httpservice.hits{!code:3xx}.as_count())\",\"scope\":\"!code:3xx\"},\"sum\":0.0,\"count\":13},\"numerator_query\":\"default_zero(sum:httpservice.hits{code:2xx}.as_count())\",\"denominator_query\":\"default_zero(sum:httpservice.hits{!code:3xx}.as_count())\",\"bad_series_query\":\"default_zero(sum:httpservice.hits{!code:3xx}.as_count()) - default_zero(sum:httpservice.hits{code:2xx}.as_count())\",\"graph_query\":\"default_zero(sum:httpservice.hits{code:2xx}.as_count()), default_zero(sum:httpservice.hits{!code:3xx}.as_count()) - default_zero(sum:httpservice.hits{code:2xx}.as_count())\"},\"overall\":{\"errors\":[{\"error_message\":\"The denominator is zero valued\",\"error_type\":\"ZERO_VALUED_DENOMINATOR\"}],\"sli_value\":null,\"span_precision\":2,\"precision\":{\"7d\":0},\"uptime\":null,\"corrections\":[],\"state\":\"no_data\"}},\"errors\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/627a3ccd24af50beb8eacbd36c5962f9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"627a3ccd24af50beb8eacbd36c5962f9\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an SLO's history returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2023-02-14T21:35:39.636Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Search_for_SLOs_returns_OK_response-1676410539", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"34c97838f5c5578ebe812e5d068977a9\",\"name\":\"Test-Search_for_SLOs_returns_OK_response-1676410539\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1676410539,\"modified_at\":1676410539}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/slo/search", + "query": [ + [ + "page[number]", + "0" + ], + [ + "page[size]", + "20" + ], + [ + "query", + "Test-Search_for_SLOs_returns_OK_response-1676410539" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"service_level_objective_search_results\",\"attributes\":{\"slos\":[{\"data\":{\"type\":\"slo\",\"attributes\":{\"monitor_ids\":null,\"all_tags\":[],\"thresholds\":[{\"warning_display\":\"95\",\"target_display\":\"95\",\"target\":95.0,\"warning\":98.0,\"timeframe\":\"7d\"}],\"env_tags\":[],\"groups\":null,\"timeframe\":\"7d\",\"overall_status\":[{\"error_budget_remaining\":null,\"raw_error_budget_remaining\":null,\"indexed_at\":1676409980,\"status\":null,\"span_precision\":null,\"error\":\"The denominator is zero valued\",\"target\":95.0,\"state\":\"no_data\",\"timeframe\":\"7d\"}],\"query\":{\"metrics\":null,\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\",\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\"},\"warning_threshold\":98.0,\"slo_type\":\"metric\",\"name\":\"Test-Search_for_SLOs_returns_OK_response-1676410539\",\"service_tags\":[],\"status\":{\"error_budget_remaining\":null,\"raw_error_budget_remaining\":null,\"indexed_at\":1676409980,\"span_precision\":null,\"state\":\"no_data\",\"sli\":null,\"calculation_error\":\"The denominator is zero valued\"},\"creator\":{\"name\":null,\"id\":1445416,\"email\":\"frog@datadoghq.com\"},\"created_at\":1676364842,\"modified_at\":1676364842,\"description\":null,\"team_tags\":[],\"target_threshold\":95.0},\"id\":\"18101ab6982f547faba6c9bdc6de9413\"}}]}},\"meta\":{\"pagination\":{\"number\":0,\"first_number\":0,\"prev_number\":0,\"next_number\":1,\"last_number\":0,\"size\":20,\"type\":\"number_size\",\"total\":1}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v1/slo/search?query=Test-Search_for_SLOs_returns_OK_response-1676410539&page%5Bsize%5D=20&page%5Bnumber%5D=0\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v1/slo/search?query=Test-Search_for_SLOs_returns_OK_response-1676410539&page[number]=1&page[size]=20\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v1/slo/search?query=Test-Search_for_SLOs_returns_OK_response-1676410539&page[number]=0&page[size]=20\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/34c97838f5c5578ebe812e5d068977a9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"34c97838f5c5578ebe812e5d068977a9\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search for SLOs returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:49.226Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Update_an_SLO_returns_Bad_Request_response-1704322489", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"9000070725e15b55a16fa1b2bcd1909c\",\"name\":\"Test-Update_an_SLO_returns_Bad_Request_response-1704322489\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322489,\"modified_at\":1704322489}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Update_an_SLO_returns_Bad_Request_response-1704322489", + "thresholds": [ + { + "target": 95, + "target_display": "95.0", + "timeframe": "7d", + "warning": 98, + "warning_display": "98.0" + } + ], + "type": "monitor" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/slo/9000070725e15b55a16fa1b2bcd1909c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid payload: must specify the query for count types\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/9000070725e15b55a16fa1b2bcd1909c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"9000070725e15b55a16fa1b2bcd1909c\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update an SLO returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-01-03T22:54:49.748Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Update_an_SLO_returns_OK_response-1704322489", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "thresholds": [ + { + "target": 95, + "timeframe": "7d", + "warning": 98 + } + ], + "type": "metric" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/slo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"f38441f875995acc9682503ee2d1901e\",\"name\":\"Test-Update_an_SLO_returns_OK_response-1704322489\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":95.0,\"target_display\":\"95.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":95,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322489,\"modified_at\":1704322489}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Update_an_SLO_returns_OK_response-1704322489", + "query": { + "denominator": "sum:httpservice.hits{!code:3xx}.as_count()", + "numerator": "sum:httpservice.hits{code:2xx}.as_count()" + }, + "target_threshold": 97, + "thresholds": [ + { + "target": 97, + "timeframe": "7d", + "warning": 98 + } + ], + "timeframe": "7d", + "type": "metric", + "warning_threshold": 98 + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/slo/f38441f875995acc9682503ee2d1901e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"f38441f875995acc9682503ee2d1901e\",\"name\":\"Test-Update_an_SLO_returns_OK_response-1704322489\",\"tags\":[],\"monitor_tags\":[],\"thresholds\":[{\"timeframe\":\"7d\",\"target\":97.0,\"target_display\":\"97.\",\"warning\":98.0,\"warning_display\":\"98.\"}],\"type\":\"metric\",\"type_id\":1,\"description\":\"\",\"timeframe\":\"7d\",\"warning_threshold\":98,\"target_threshold\":97,\"query\":{\"denominator\":\"sum:httpservice.hits{!code:3xx}.as_count()\",\"numerator\":\"sum:httpservice.hits{code:2xx}.as_count()\"},\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"created_at\":1704322489,\"modified_at\":1704322490}],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/slo/f38441f875995acc9682503ee2d1901e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[\"f38441f875995acc9682503ee2d1901e\"],\"error\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update an SLO returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/synthetics.json b/test-server-data/v1/synthetics.json new file mode 100644 index 0000000000..8af3fec1b8 --- /dev/null +++ b/test-server-data/v1/synthetics.json @@ -0,0 +1,5899 @@ +{ + "feature": "Synthetics", + "recordings": [ + { + "feature": "Synthetics", + "frozen_at": "2022-01-10T16:38:49.816Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"tests\":[{\"status\":\"paused\",\"public_id\":\"jv7-wfd-kvt\",\"tags\":[],\"locations\":[\"pl:pl-kevin-y-6382df0d72d4588e1817f090b131541f\"],\"message\":\"\",\"name\":\"Test on www.example.com\",\"monitor_id\":28558768,\"type\":\"api\",\"created_at\":\"2021-01-12T10:11:40.802074+00:00\",\"modified_at\":\"2021-01-22T16:42:10.520384+00:00\",\"subtype\":\"http\",\"config\":{\"request\":{\"url\":\"https://www.example.com\",\"method\":\"GET\",\"timeout\":30},\"assertions\":[{\"operator\":\"lessThan\",\"type\":\"responseTime\",\"target\":1000},{\"operator\":\"is\",\"type\":\"statusCode\",\"target\":200},{\"operator\":\"A non existent operator\",\"type\":\"body\",\"target\":{\"xPath\":\"//html/head/title\",\"operator\":\"contains\",\"targetValue\":\"Example\"}}],\"configVariables\":[]},\"options\":{\"monitor_options\":{\"notify_audit\":false,\"locked\":false,\"include_tags\":true,\"new_host_delay\":300,\"notify_no_data\":false,\"renotify_interval\":0},\"retry\":{\"count\":0,\"interval\":300},\"min_location_failed\":1,\"min_failure_duration\":0,\"tick_every\":60}},{\"status\":\"paused\",\"public_id\":\"jv7-wfd-kvt\",\"tags\":[],\"locations\":[\"pl:pl-kevin-y-6382df0d72d4588e1817f090b131541f\"],\"message\":\"\",\"name\":\"Test on www.example.com\",\"monitor_id\":28558768,\"type\":\"api\",\"created_at\":\"2021-01-12T10:11:40.802074+00:00\",\"modified_at\":\"2021-01-22T16:42:10.520384+00:00\",\"subtype\":\"http\",\"config\":{\"request\":{\"url\":\"https://www.example.com\",\"method\":\"GET\",\"timeout\":30},\"assertions\":[{\"operator\":\"lessThan\",\"type\":\"responseTime\",\"target\":1000},{\"operator\":\"is\",\"type\":\"A non existent assertion type\",\"target\":200}],\"configVariables\":[]},\"options\":{\"monitor_options\":{\"notify_audit\":false,\"locked\":false,\"include_tags\":true,\"new_host_delay\":300,\"notify_no_data\":false,\"renotify_interval\":0},\"retry\":{\"count\":0,\"interval\":300},\"min_location_failed\":1,\"min_failure_duration\":0,\"tick_every\":60}},{\"status\":\"live\",\"public_id\":\"2fx-64b-fb8\",\"tags\":[\"mini-website\",\"team:synthetics\",\"firefox\",\"synthetics-ci-browser\",\"edge\",\"chrome\"],\"locations\":[\"aws:ap-northeast-1\",\"aws:eu-north-1\",\"aws:eu-west-3\",\"aws:eu-central-1\"],\"message\":\"This mini-website check failed, please investigate why. @slack-synthetics-ops-worker\",\"name\":\"Mini Website - Click Trap\",\"monitor_id\":7647262,\"type\":\"browser\",\"created_at\":\"2018-12-20T13:19:23.734004+00:00\",\"modified_at\":\"2021-06-30T15:46:49.387631+00:00\",\"config\":{\"variables\":[],\"setCookie\":\"\",\"request\":{\"url\":\"http://34.95.79.70/click-trap\",\"headers\":{},\"method\":\"GET\"},\"assertions\":[],\"configVariables\":[]},\"options\":{\"ci\":{\"executionRule\":\"blocking\"},\"retry\":{\"count\":1,\"interval\":1000},\"min_location_failed\":1,\"min_failure_duration\":0,\"noScreenshot\":false,\"tick_every\":300,\"forwardProxy\":false,\"disableCors\":false,\"device_ids\":[\"chrome.laptop_large\",\"firefox.laptop_large\",\"A non existent device ID\"],\"monitor_options\":{\"renotify_interval\":360},\"ignoreServerCertificateError\":true}},{\"status\":\"live\",\"public_id\":\"g6d-gcm-pdq\",\"tags\":[],\"locations\":[\"aws:eu-central-1\",\"aws:ap-northeast-1\"],\"message\":\"\",\"name\":\"Check on www.10.0.0.1.xip.io\",\"monitor_id\":7464050,\"type\":\"A non existent test type\",\"created_at\":\"2018-12-07T17:30:49.785089+00:00\",\"modified_at\":\"2019-09-04T17:01:09.921070+00:00\",\"subtype\":\"http\",\"config\":{\"request\":{\"url\":\"https://www.10.0.0.1.xip.io\",\"method\":\"GET\",\"timeout\":30},\"assertions\":[{\"operator\":\"is\",\"type\":\"statusCode\",\"target\":200}]},\"options\":{\"tick_every\":60}},{\"status\":\"live\",\"public_id\":\"g6d-gcm-pdq\",\"tags\":[],\"locations\":[\"aws:eu-central-1\",\"aws:ap-northeast-1\"],\"message\":\"\",\"name\":\"Check on www.10.0.0.1.xip.io\",\"monitor_id\":7464050,\"type\":\"api\",\"created_at\":\"2018-12-07T17:30:49.785089+00:00\",\"modified_at\":\"2019-09-04T17:01:09.921070+00:00\",\"subtype\":\"http\",\"config\":{\"request\":{\"url\":\"https://www.10.0.0.1.xip.io\",\"method\":\"A non existent method\",\"timeout\":30},\"assertions\":[{\"operator\":\"is\",\"type\":\"statusCode\",\"target\":200}]},\"options\":{\"tick_every\":60}},{\"status\":\"live\",\"public_id\":\"g6d-gcm-pdq\",\"tags\":[],\"locations\":[\"aws:eu-central-1\",\"aws:ap-northeast-1\"],\"message\":\"A fully valid test\",\"name\":\"Check on www.10.0.0.1.xip.io\",\"monitor_id\":7464050,\"type\":\"api\",\"created_at\":\"2018-12-07T17:30:49.785089+00:00\",\"modified_at\":\"2019-09-04T17:01:09.921070+00:00\",\"subtype\":\"http\",\"config\":{\"request\":{\"url\":\"https://www.10.0.0.1.xip.io\",\"method\":\"GET\",\"timeout\":30},\"assertions\":[{\"operator\":\"is\",\"type\":\"statusCode\",\"target\":200}]},\"options\":{\"tick_every\":60}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Client is resilient to enum and oneOf deserialization errors", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2025-07-11T17:23:47.597Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "steps": [ + { + "allowFailure": true, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "exitIfSucceed": true, + "extractedValues": [ + { + "field": "server", + "name": "EXTRACTED_VALUE", + "parser": { + "type": "raw" + }, + "secure": true, + "type": "http_header" + } + ], + "extractedValuesFromScript": "dd.variable.set('STATUS_CODE', dd.response.statusCode);", + "isCritical": true, + "name": "request is sent", + "request": { + "httpVersion": "http2", + "method": "GET", + "timeout": 10, + "url": "https://datadoghq.com" + }, + "retry": { + "count": 5, + "interval": 1000 + }, + "subtype": "http" + }, + { + "name": "Wait", + "subtype": "wait", + "value": 1 + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "extractedValues": [], + "isCritical": true, + "name": "GRPC CALL", + "request": { + "callType": "unary", + "compressedJsonDescriptor": "eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==", + "host": "grpcbin.test.k6.io", + "message": "{}", + "metadata": {}, + "method": "Index", + "port": 9000, + "service": "grpcbin.GRPCBin" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "grpc" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "isInMoreThan", + "target": 10, + "type": "certificate" + } + ], + "isCritical": true, + "name": "SSL step", + "request": { + "checkCertificateRevocation": true, + "disableAiaIntermediateFetching": true, + "host": "example.org", + "port": 443 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "ssl" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "DNS step", + "request": { + "dnsServer": "8.8.8.8", + "dnsServerPort": "53", + "host": "troisdizaines.com" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "dns" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "TCP step", + "request": { + "host": "34.95.79.70", + "port": 80, + "shouldTrackHops": true, + "timeout": 32 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "tcp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 0, + "type": "packetLossPercentage" + } + ], + "isCritical": true, + "name": "ICMP step", + "request": { + "host": "34.95.79.70", + "numberOfPackets": 4, + "shouldTrackHops": true, + "timeout": 38 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "icmp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "Websocket step", + "request": { + "basicAuth": { + "password": "password", + "type": "web", + "username": "user" + }, + "headers": { + "f": "g" + }, + "isMessageBase64Encoded": true, + "message": "My message", + "url": "ws://34.95.79.70/web-socket" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "websocket" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "UDP step", + "request": { + "host": "8.8.8.8", + "message": "A image.google.com", + "port": 53 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "udp" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_payload.json", + "name": "Test-Create_a_FIDO_global_variable_returns_OK_response-1752254627", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_a_FIDO_global_variable_returns_OK_response-1752254627", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 1000 + }, + "tick_every": 60 + }, + "subtype": "multi", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"n7v-ha9-ks4\",\"name\":\"Test-Create_a_FIDO_global_variable_returns_OK_response-1752254627\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"multi\",\"tags\":[\"testing:api\"],\"created_at\":\"2025-07-11T17:23:48.243288+00:00\",\"modified_at\":\"2025-07-11T17:23:48.243288+00:00\",\"config\":{\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"steps\":[{\"allowFailure\":true,\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"exitIfSucceed\":true,\"extractedValues\":[{\"field\":\"server\",\"name\":\"EXTRACTED_VALUE\",\"parser\":{\"type\":\"raw\"},\"secure\":true,\"type\":\"http_header\"}],\"extractedValuesFromScript\":\"dd.variable.set('STATUS_CODE', dd.response.statusCode);\",\"isCritical\":true,\"name\":\"request is sent\",\"request\":{\"httpVersion\":\"http2\",\"method\":\"GET\",\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"retry\":{\"count\":5,\"interval\":1000},\"subtype\":\"http\",\"id\":\"682-5gj-2cn\"},{\"name\":\"Wait\",\"subtype\":\"wait\",\"value\":1,\"id\":\"sr3-7vs-arm\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"extractedValues\":[],\"isCritical\":true,\"name\":\"GRPC CALL\",\"request\":{\"callType\":\"unary\",\"compressedJsonDescriptor\":\"eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==\",\"host\":\"grpcbin.test.k6.io\",\"message\":\"{}\",\"metadata\":{},\"method\":\"Index\",\"port\":9000,\"service\":\"grpcbin.GRPCBin\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"grpc\",\"id\":\"h8s-juc-298\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"isInMoreThan\",\"target\":10,\"type\":\"certificate\"}],\"isCritical\":true,\"name\":\"SSL step\",\"request\":{\"checkCertificateRevocation\":true,\"disableAiaIntermediateFetching\":true,\"host\":\"example.org\",\"port\":443},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"ssl\",\"id\":\"sh8-ms8-hsk\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"DNS step\",\"request\":{\"dnsServer\":\"8.8.8.8\",\"dnsServerPort\":\"53\",\"host\":\"troisdizaines.com\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"dns\",\"id\":\"y5d-it6-htm\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"TCP step\",\"request\":{\"host\":\"34.95.79.70\",\"port\":80,\"shouldTrackHops\":true,\"timeout\":32},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"tcp\",\"id\":\"fbk-tpg-ytp\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"is\",\"target\":0,\"type\":\"packetLossPercentage\"}],\"isCritical\":true,\"name\":\"ICMP step\",\"request\":{\"host\":\"34.95.79.70\",\"numberOfPackets\":4,\"shouldTrackHops\":true,\"timeout\":38},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"icmp\",\"id\":\"ncp-gug-wiu\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"Websocket step\",\"request\":{\"basicAuth\":{\"password\":\"password\",\"type\":\"web\",\"username\":\"user\"},\"headers\":{\"f\":\"g\"},\"isMessageBase64Encoded\":true,\"message\":\"My message\",\"url\":\"ws://34.95.79.70/web-socket\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"websocket\",\"id\":\"rct-rzx-hgc\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"UDP step\",\"request\":{\"host\":\"8.8.8.8\",\"message\":\"A image.google.com\",\"port\":53},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"udp\",\"id\":\"x4y-uam-yjr\"}]},\"message\":\"BDD test payload: synthetics_api_test_multi_step_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_a_FIDO_global_variable_returns_OK_response-1752254627\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":1000},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":177655272,\"org_id\":321813,\"modified_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "is_fido": true, + "name": "GLOBAL_VARIABLE_FIDO_PAYLOAD_TESTCREATEAFIDOGLOBALVARIABLERETURNSOKRESPONSE1752254627", + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/variables", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"5ac7f334-cb78-4ab4-94a4-3490e25f1479\",\"name\":\"GLOBAL_VARIABLE_FIDO_PAYLOAD_TESTCREATEAFIDOGLOBALVARIABLERETURNSOKRESPONSE1752254627\",\"description\":\"\",\"type\":\"variable\",\"tags\":[],\"last_error\":null,\"is_fido\":true,\"value\":{\"secure\":true}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/synthetics/variables/5ac7f334-cb78-4ab4-94a4-3490e25f1479", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "n7v-ha9-ks4" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"n7v-ha9-ks4\",\"deleted_at\":\"2025-07-11T17:23:50.605892+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a FIDO global variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2025-07-11T17:23:50.849Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "steps": [ + { + "allowFailure": true, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "exitIfSucceed": true, + "extractedValues": [ + { + "field": "server", + "name": "EXTRACTED_VALUE", + "parser": { + "type": "raw" + }, + "secure": true, + "type": "http_header" + } + ], + "extractedValuesFromScript": "dd.variable.set('STATUS_CODE', dd.response.statusCode);", + "isCritical": true, + "name": "request is sent", + "request": { + "httpVersion": "http2", + "method": "GET", + "timeout": 10, + "url": "https://datadoghq.com" + }, + "retry": { + "count": 5, + "interval": 1000 + }, + "subtype": "http" + }, + { + "name": "Wait", + "subtype": "wait", + "value": 1 + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "extractedValues": [], + "isCritical": true, + "name": "GRPC CALL", + "request": { + "callType": "unary", + "compressedJsonDescriptor": "eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==", + "host": "grpcbin.test.k6.io", + "message": "{}", + "metadata": {}, + "method": "Index", + "port": 9000, + "service": "grpcbin.GRPCBin" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "grpc" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "isInMoreThan", + "target": 10, + "type": "certificate" + } + ], + "isCritical": true, + "name": "SSL step", + "request": { + "checkCertificateRevocation": true, + "disableAiaIntermediateFetching": true, + "host": "example.org", + "port": 443 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "ssl" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "DNS step", + "request": { + "dnsServer": "8.8.8.8", + "dnsServerPort": "53", + "host": "troisdizaines.com" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "dns" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "TCP step", + "request": { + "host": "34.95.79.70", + "port": 80, + "shouldTrackHops": true, + "timeout": 32 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "tcp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 0, + "type": "packetLossPercentage" + } + ], + "isCritical": true, + "name": "ICMP step", + "request": { + "host": "34.95.79.70", + "numberOfPackets": 4, + "shouldTrackHops": true, + "timeout": 38 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "icmp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "Websocket step", + "request": { + "basicAuth": { + "password": "password", + "type": "web", + "username": "user" + }, + "headers": { + "f": "g" + }, + "isMessageBase64Encoded": true, + "message": "My message", + "url": "ws://34.95.79.70/web-socket" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "websocket" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "UDP step", + "request": { + "host": "8.8.8.8", + "message": "A image.google.com", + "port": 53 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "udp" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_payload.json", + "name": "Test-Create_a_TOTP_global_variable_returns_OK_response-1752254630", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_a_TOTP_global_variable_returns_OK_response-1752254630", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 1000 + }, + "tick_every": 60 + }, + "subtype": "multi", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"kgr-bme-8nw\",\"name\":\"Test-Create_a_TOTP_global_variable_returns_OK_response-1752254630\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"multi\",\"tags\":[\"testing:api\"],\"created_at\":\"2025-07-11T17:23:51.482505+00:00\",\"modified_at\":\"2025-07-11T17:23:51.482505+00:00\",\"config\":{\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"steps\":[{\"allowFailure\":true,\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"exitIfSucceed\":true,\"extractedValues\":[{\"field\":\"server\",\"name\":\"EXTRACTED_VALUE\",\"parser\":{\"type\":\"raw\"},\"secure\":true,\"type\":\"http_header\"}],\"extractedValuesFromScript\":\"dd.variable.set('STATUS_CODE', dd.response.statusCode);\",\"isCritical\":true,\"name\":\"request is sent\",\"request\":{\"httpVersion\":\"http2\",\"method\":\"GET\",\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"retry\":{\"count\":5,\"interval\":1000},\"subtype\":\"http\",\"id\":\"ax6-gjc-umh\"},{\"name\":\"Wait\",\"subtype\":\"wait\",\"value\":1,\"id\":\"nb6-pxs-szd\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"extractedValues\":[],\"isCritical\":true,\"name\":\"GRPC CALL\",\"request\":{\"callType\":\"unary\",\"compressedJsonDescriptor\":\"eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==\",\"host\":\"grpcbin.test.k6.io\",\"message\":\"{}\",\"metadata\":{},\"method\":\"Index\",\"port\":9000,\"service\":\"grpcbin.GRPCBin\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"grpc\",\"id\":\"cci-erz-d88\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"isInMoreThan\",\"target\":10,\"type\":\"certificate\"}],\"isCritical\":true,\"name\":\"SSL step\",\"request\":{\"checkCertificateRevocation\":true,\"disableAiaIntermediateFetching\":true,\"host\":\"example.org\",\"port\":443},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"ssl\",\"id\":\"pjf-u4m-6mp\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"DNS step\",\"request\":{\"dnsServer\":\"8.8.8.8\",\"dnsServerPort\":\"53\",\"host\":\"troisdizaines.com\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"dns\",\"id\":\"szs-xdz-ihc\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"TCP step\",\"request\":{\"host\":\"34.95.79.70\",\"port\":80,\"shouldTrackHops\":true,\"timeout\":32},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"tcp\",\"id\":\"2jx-6jc-whu\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"is\",\"target\":0,\"type\":\"packetLossPercentage\"}],\"isCritical\":true,\"name\":\"ICMP step\",\"request\":{\"host\":\"34.95.79.70\",\"numberOfPackets\":4,\"shouldTrackHops\":true,\"timeout\":38},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"icmp\",\"id\":\"xki-eh9-p23\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"Websocket step\",\"request\":{\"basicAuth\":{\"password\":\"password\",\"type\":\"web\",\"username\":\"user\"},\"headers\":{\"f\":\"g\"},\"isMessageBase64Encoded\":true,\"message\":\"My message\",\"url\":\"ws://34.95.79.70/web-socket\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"websocket\",\"id\":\"jqm-ban-zt8\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"UDP step\",\"request\":{\"host\":\"8.8.8.8\",\"message\":\"A image.google.com\",\"port\":53},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"udp\",\"id\":\"jue-djv-56k\"}]},\"message\":\"BDD test payload: synthetics_api_test_multi_step_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_a_TOTP_global_variable_returns_OK_response-1752254630\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":1000},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":177655276,\"org_id\":321813,\"modified_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "is_totp": true, + "name": "GLOBAL_VARIABLE_TOTP_PAYLOAD_TESTCREATEATOTPGLOBALVARIABLERETURNSOKRESPONSE1752254630", + "tags": [], + "value": { + "options": { + "totp_parameters": { + "digits": 6, + "refresh_interval": 30 + } + }, + "secure": false, + "value": "" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/variables", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"93c47222-ce0c-47d8-ac31-50b3cca2d4a4\",\"name\":\"GLOBAL_VARIABLE_TOTP_PAYLOAD_TESTCREATEATOTPGLOBALVARIABLERETURNSOKRESPONSE1752254630\",\"description\":\"\",\"type\":\"variable\",\"tags\":[],\"last_error\":null,\"is_totp\":true,\"value\":{\"options\":{\"totp_parameters\":{\"digits\":6,\"refresh_interval\":30}},\"secure\":false,\"value\":\"\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/synthetics/variables/93c47222-ce0c-47d8-ac31-50b3cca2d4a4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "kgr-bme-8nw" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"kgr-bme-8nw\",\"deleted_at\":\"2025-07-11T17:23:54.049562+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a TOTP global variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-23T09:47:16.115Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "certificateDomains": [ + "https://datadoghq.com" + ], + "method": "GET", + "url": "https://datadoghq.com" + }, + "setCookie": "name:test" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "Test message", + "name": "Test-Create_a_browser_test_returns_OK_Returns_saved_rumSettings_response-1734947236", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "ci": { + "executionRule": "skipped" + }, + "device_ids": [ + "tablet" + ], + "disableCors": true, + "disableCsp": true, + "follow_redirects": true, + "ignoreServerCertificateError": true, + "initialNavigationTimeout": 200, + "min_failure_duration": 10, + "min_location_failed": 1, + "noScreenshot": true, + "retry": { + "count": 2, + "interval": 10 + }, + "rumSettings": { + "applicationId": "mockApplicationId", + "clientTokenId": 12345, + "isEnabled": true + }, + "tick_every": 300 + }, + "steps": [ + { + "allowFailure": false, + "isCritical": true, + "name": "Refresh page", + "params": {}, + "type": "refresh" + } + ], + "tags": [ + "testing:browser" + ], + "type": "browser" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/browser", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"2pq-h6b-phj\",\"name\":\"Test-Create_a_browser_test_returns_OK_Returns_saved_rumSettings_response-1734947236\",\"status\":\"paused\",\"type\":\"browser\",\"tags\":[\"testing:browser\"],\"created_at\":\"2024-12-23T09:47:16.924773+00:00\",\"modified_at\":\"2024-12-23T09:47:16.924773+00:00\",\"config\":{\"assertions\":[],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"certificateDomains\":[\"https://datadoghq.com\"],\"method\":\"GET\",\"url\":\"https://datadoghq.com\"},\"setCookie\":\"name:test\"},\"message\":\"Test message\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"ci\":{\"executionRule\":\"skipped\"},\"device_ids\":[\"tablet\"],\"disableCors\":true,\"disableCsp\":true,\"follow_redirects\":true,\"ignoreServerCertificateError\":true,\"initialNavigationTimeout\":200,\"min_failure_duration\":10,\"min_location_failed\":1,\"noScreenshot\":true,\"retry\":{\"count\":2,\"interval\":10},\"rumSettings\":{\"applicationId\":\"mockApplicationId\",\"clientTokenId\":12345,\"isEnabled\":true},\"tick_every\":300},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":161011666,\"org_id\":321813,\"modified_by\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"steps\":[{\"name\":\"Refresh page\",\"params\":{},\"type\":\"refresh\",\"public_id\":\"uwt-8ia-g4p\",\"allowFailure\":false,\"isCritical\":true}],\"stepCount\":{\"assertions\":0,\"subtests\":0,\"total\":1}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "2pq-h6b-phj" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"2pq-h6b-phj\",\"deleted_at\":\"2024-12-23T09:47:17.898440+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a browser test returns \"OK - Returns saved rumSettings.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2025-06-30T13:20:04.184Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "secure": true, + "type": "text" + } + ], + "request": { + "method": "GET", + "url": "https://datadoghq.com" + }, + "setCookie": "name:test", + "variables": [ + { + "example": "secret", + "name": "TEST_VARIABLE", + "pattern": "secret", + "secure": true, + "type": "text" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "Test message", + "name": "Test-Create_a_browser_test_returns_OK_Returns_the_created_test_details_response-1751289604", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "device_ids": [ + "chrome.laptop_large" + ], + "disableCors": true, + "enableProfiling": true, + "enableSecurityTesting": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "noScreenshot": true, + "retry": { + "count": 2, + "interval": 10 + }, + "tick_every": 300 + }, + "steps": [ + { + "allowFailure": false, + "alwaysExecute": true, + "exitIfSucceed": true, + "isCritical": true, + "name": "Refresh page", + "params": {}, + "type": "refresh" + } + ], + "tags": [ + "testing:browser" + ], + "type": "browser" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/browser", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"yyg-vy3-ii9\",\"name\":\"Test-Create_a_browser_test_returns_OK_Returns_the_created_test_details_response-1751289604\",\"status\":\"paused\",\"type\":\"browser\",\"tags\":[\"testing:browser\"],\"created_at\":\"2025-06-30T13:20:04.867493+00:00\",\"modified_at\":\"2025-06-30T13:20:04.867493+00:00\",\"config\":{\"assertions\":[],\"configVariables\":[{\"name\":\"PROPERTY\",\"secure\":true,\"type\":\"text\"}],\"request\":{\"method\":\"GET\",\"url\":\"https://datadoghq.com\"},\"setCookie\":\"name:test\",\"variables\":[{\"name\":\"TEST_VARIABLE\",\"secure\":true,\"type\":\"text\"}]},\"message\":\"Test message\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"device_ids\":[\"chrome.laptop_large\"],\"disableCors\":true,\"enableProfiling\":true,\"enableSecurityTesting\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"noScreenshot\":true,\"retry\":{\"count\":2,\"interval\":10},\"tick_every\":300},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":176509426,\"org_id\":321813,\"modified_by\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"steps\":[{\"name\":\"Refresh page\",\"params\":{},\"type\":\"refresh\",\"public_id\":\"kbc-j4p-uxx\",\"allowFailure\":false,\"isCritical\":true,\"exitIfSucceed\":true,\"alwaysExecute\":true}],\"stepCount\":{\"assertions\":0,\"subtests\":0,\"total\":1}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "yyg-vy3-ii9" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"yyg-vy3-ii9\",\"deleted_at\":\"2025-06-30T13:20:05.692513+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a browser test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:17:47.388Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "method": "GET", + "url": "https://datadoghq.com" + }, + "setCookie": "name:test" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "Test message", + "name": "Test-Create_a_browser_test_with_advanced_scheduling_options_returns_OK_Returns_the_created_test_details_r-1733743067", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "device_ids": [ + "tablet" + ], + "disableCors": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "noScreenshot": true, + "retry": { + "count": 2, + "interval": 10 + }, + "scheduling": { + "timeframes": [ + { + "day": 1, + "from": "07:00", + "to": "16:00" + }, + { + "day": 3, + "from": "07:00", + "to": "16:00" + } + ], + "timezone": "America/New_York" + }, + "tick_every": 300 + }, + "steps": [ + { + "allowFailure": false, + "isCritical": true, + "name": "Refresh page", + "params": {}, + "type": "refresh" + } + ], + "tags": [ + "testing:browser" + ], + "type": "browser" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/browser", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"69t-ekt-ux5\",\"name\":\"Test-Create_a_browser_test_with_advanced_scheduling_options_returns_OK_Returns_the_created_test_details_r-1733743067\",\"status\":\"paused\",\"type\":\"browser\",\"tags\":[\"testing:browser\"],\"created_at\":\"2024-12-09T11:17:48.054851+00:00\",\"modified_at\":\"2024-12-09T11:17:48.054851+00:00\",\"config\":{\"assertions\":[],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"method\":\"GET\",\"url\":\"https://datadoghq.com\"},\"setCookie\":\"name:test\"},\"message\":\"Test message\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"device_ids\":[\"tablet\"],\"disableCors\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"noScreenshot\":true,\"retry\":{\"count\":2,\"interval\":10},\"scheduling\":{\"timeframes\":[{\"day\":1,\"from\":\"07:00\",\"to\":\"16:00\"},{\"day\":3,\"from\":\"07:00\",\"to\":\"16:00\"}],\"timezone\":\"America/New_York\"},\"tick_every\":300},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881003,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"steps\":[{\"name\":\"Refresh page\",\"params\":{},\"type\":\"refresh\",\"public_id\":\"6dc-pew-xs2\",\"allowFailure\":false,\"isCritical\":true}],\"stepCount\":{\"assertions\":0,\"subtests\":0,\"total\":1}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "69t-ekt-ux5" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"69t-ekt-ux5\",\"deleted_at\":\"2024-12-09T11:17:49.083032+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a browser test with advanced scheduling options returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2025-07-11T17:23:54.276Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "steps": [ + { + "allowFailure": true, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "exitIfSucceed": true, + "extractedValues": [ + { + "field": "server", + "name": "EXTRACTED_VALUE", + "parser": { + "type": "raw" + }, + "secure": true, + "type": "http_header" + } + ], + "extractedValuesFromScript": "dd.variable.set('STATUS_CODE', dd.response.statusCode);", + "isCritical": true, + "name": "request is sent", + "request": { + "httpVersion": "http2", + "method": "GET", + "timeout": 10, + "url": "https://datadoghq.com" + }, + "retry": { + "count": 5, + "interval": 1000 + }, + "subtype": "http" + }, + { + "name": "Wait", + "subtype": "wait", + "value": 1 + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "extractedValues": [], + "isCritical": true, + "name": "GRPC CALL", + "request": { + "callType": "unary", + "compressedJsonDescriptor": "eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==", + "host": "grpcbin.test.k6.io", + "message": "{}", + "metadata": {}, + "method": "Index", + "port": 9000, + "service": "grpcbin.GRPCBin" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "grpc" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "isInMoreThan", + "target": 10, + "type": "certificate" + } + ], + "isCritical": true, + "name": "SSL step", + "request": { + "checkCertificateRevocation": true, + "disableAiaIntermediateFetching": true, + "host": "example.org", + "port": 443 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "ssl" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "DNS step", + "request": { + "dnsServer": "8.8.8.8", + "dnsServerPort": "53", + "host": "troisdizaines.com" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "dns" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "TCP step", + "request": { + "host": "34.95.79.70", + "port": 80, + "shouldTrackHops": true, + "timeout": 32 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "tcp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 0, + "type": "packetLossPercentage" + } + ], + "isCritical": true, + "name": "ICMP step", + "request": { + "host": "34.95.79.70", + "numberOfPackets": 4, + "shouldTrackHops": true, + "timeout": 38 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "icmp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "Websocket step", + "request": { + "basicAuth": { + "password": "password", + "type": "web", + "username": "user" + }, + "headers": { + "f": "g" + }, + "isMessageBase64Encoded": true, + "message": "My message", + "url": "ws://34.95.79.70/web-socket" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "websocket" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "UDP step", + "request": { + "host": "8.8.8.8", + "message": "A image.google.com", + "port": 53 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "udp" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_payload.json", + "name": "Test-Create_a_global_variable_from_test_returns_OK_response-1752254634", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_a_global_variable_from_test_returns_OK_response-1752254634", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 1000 + }, + "tick_every": 60 + }, + "subtype": "multi", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"kpq-ja8-3rg\",\"name\":\"Test-Create_a_global_variable_from_test_returns_OK_response-1752254634\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"multi\",\"tags\":[\"testing:api\"],\"created_at\":\"2025-07-11T17:23:54.934621+00:00\",\"modified_at\":\"2025-07-11T17:23:54.934621+00:00\",\"config\":{\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"steps\":[{\"allowFailure\":true,\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"exitIfSucceed\":true,\"extractedValues\":[{\"field\":\"server\",\"name\":\"EXTRACTED_VALUE\",\"parser\":{\"type\":\"raw\"},\"secure\":true,\"type\":\"http_header\"}],\"extractedValuesFromScript\":\"dd.variable.set('STATUS_CODE', dd.response.statusCode);\",\"isCritical\":true,\"name\":\"request is sent\",\"request\":{\"httpVersion\":\"http2\",\"method\":\"GET\",\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"retry\":{\"count\":5,\"interval\":1000},\"subtype\":\"http\",\"id\":\"vts-q3p-hvn\"},{\"name\":\"Wait\",\"subtype\":\"wait\",\"value\":1,\"id\":\"tu6-xnu-s9n\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"extractedValues\":[],\"isCritical\":true,\"name\":\"GRPC CALL\",\"request\":{\"callType\":\"unary\",\"compressedJsonDescriptor\":\"eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==\",\"host\":\"grpcbin.test.k6.io\",\"message\":\"{}\",\"metadata\":{},\"method\":\"Index\",\"port\":9000,\"service\":\"grpcbin.GRPCBin\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"grpc\",\"id\":\"tjm-9ys-w9y\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"isInMoreThan\",\"target\":10,\"type\":\"certificate\"}],\"isCritical\":true,\"name\":\"SSL step\",\"request\":{\"checkCertificateRevocation\":true,\"disableAiaIntermediateFetching\":true,\"host\":\"example.org\",\"port\":443},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"ssl\",\"id\":\"5i3-4gv-9fp\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"DNS step\",\"request\":{\"dnsServer\":\"8.8.8.8\",\"dnsServerPort\":\"53\",\"host\":\"troisdizaines.com\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"dns\",\"id\":\"hrb-y7g-dwi\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"TCP step\",\"request\":{\"host\":\"34.95.79.70\",\"port\":80,\"shouldTrackHops\":true,\"timeout\":32},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"tcp\",\"id\":\"tsn-dwe-i4a\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"is\",\"target\":0,\"type\":\"packetLossPercentage\"}],\"isCritical\":true,\"name\":\"ICMP step\",\"request\":{\"host\":\"34.95.79.70\",\"numberOfPackets\":4,\"shouldTrackHops\":true,\"timeout\":38},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"icmp\",\"id\":\"j8m-x8g-74w\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"Websocket step\",\"request\":{\"basicAuth\":{\"password\":\"password\",\"type\":\"web\",\"username\":\"user\"},\"headers\":{\"f\":\"g\"},\"isMessageBase64Encoded\":true,\"message\":\"My message\",\"url\":\"ws://34.95.79.70/web-socket\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"websocket\",\"id\":\"wvv-u47-d3p\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"UDP step\",\"request\":{\"host\":\"8.8.8.8\",\"message\":\"A image.google.com\",\"port\":53},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"udp\",\"id\":\"ds6-vnn-2mc\"}]},\"message\":\"BDD test payload: synthetics_api_test_multi_step_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_a_global_variable_from_test_returns_OK_response-1752254634\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":1000},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":177655286,\"org_id\":321813,\"modified_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "name": "GLOBAL_VARIABLE_FROM_TEST_PAYLOAD_TESTCREATEAGLOBALVARIABLEFROMTESTRETURNSOKRESPONSE1752254634", + "parse_test_options": { + "localVariableName": "EXTRACTED_VALUE", + "type": "local_variable" + }, + "parse_test_public_id": "kpq-ja8-3rg", + "tags": [], + "value": { + "secure": false, + "value": "" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/variables", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"9e7cddea-3a17-4c1f-a73e-73f5bde41812\",\"name\":\"GLOBAL_VARIABLE_FROM_TEST_PAYLOAD_TESTCREATEAGLOBALVARIABLEFROMTESTRETURNSOKRESPONSE1752254634\",\"description\":\"\",\"type\":\"variable\",\"tags\":[],\"last_error\":null,\"value\":{\"secure\":false,\"value\":\"\"},\"parse_test_public_id\":\"kpq-ja8-3rg\",\"parse_test_name\":null,\"parse_test_options\":{\"localVariableName\":\"EXTRACTED_VALUE\",\"type\":\"local_variable\"},\"parse_test_extracted_at\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/synthetics/variables/9e7cddea-3a17-4c1f-a73e-73f5bde41812", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "kpq-ja8-3rg" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"kpq-ja8-3rg\",\"deleted_at\":\"2025-07-11T17:23:57.293335+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a global variable from test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-07-17T14:14:31.128Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "steps": [ + { + "allowFailure": true, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "extractedValues": [ + { + "field": "server", + "name": "EXTRACTED_VALUE", + "parser": { + "type": "raw" + }, + "secure": true, + "type": "http_header" + } + ], + "isCritical": true, + "name": "request is sent", + "request": { + "httpVersion": "http2", + "method": "GET", + "timeout": 10, + "url": "https://datadoghq.com" + }, + "retry": { + "count": 5, + "interval": 1000 + }, + "subtype": "http" + }, + { + "name": "Wait", + "subtype": "wait", + "value": 1 + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "extractedValues": [], + "isCritical": true, + "name": "GRPC CALL", + "request": { + "callType": "unary", + "compressedJsonDescriptor": "eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==", + "host": "grpcbin.test.k6.io", + "message": "{}", + "metadata": {}, + "method": "Index", + "port": 9000, + "service": "grpcbin.GRPCBin" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "grpc" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_payload.json", + "name": "Test-Create_a_global_variable_returns_OK_response-1721225671", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_a_global_variable_returns_OK_response-1721225671", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 1000 + }, + "tick_every": 60 + }, + "subtype": "multi", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"6ha-935-dj6\",\"name\":\"Test-Create_a_global_variable_returns_OK_response-1721225671\",\"status\":\"live\",\"type\":\"api\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-07-17T14:14:31.733698+00:00\",\"modified_at\":\"2024-07-17T14:14:31.733698+00:00\",\"config\":{\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"steps\":[{\"allowFailure\":true,\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"extractedValues\":[{\"field\":\"server\",\"name\":\"EXTRACTED_VALUE\",\"parser\":{\"type\":\"raw\"},\"secure\":true,\"type\":\"http_header\"}],\"isCritical\":true,\"name\":\"request is sent\",\"request\":{\"httpVersion\":\"http2\",\"method\":\"GET\",\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"retry\":{\"count\":5,\"interval\":1000},\"subtype\":\"http\",\"id\":\"uf6-x35-nyf\"},{\"name\":\"Wait\",\"subtype\":\"wait\",\"value\":1,\"id\":\"sna-i2d-ag9\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"extractedValues\":[],\"isCritical\":true,\"name\":\"GRPC CALL\",\"request\":{\"callType\":\"unary\",\"compressedJsonDescriptor\":\"eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==\",\"host\":\"grpcbin.test.k6.io\",\"message\":\"{}\",\"metadata\":{},\"method\":\"Index\",\"port\":9000,\"service\":\"grpcbin.GRPCBin\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"grpc\",\"id\":\"mzj-ekf-jxv\"}]},\"message\":\"BDD test payload: synthetics_api_test_multi_step_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_a_global_variable_returns_OK_response-1721225671\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":1000},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"subtype\":\"multi\",\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":149461336,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "", + "name": "GLOBAL_VARIABLE_PAYLOAD_TESTCREATEAGLOBALVARIABLERETURNSOKRESPONSE1721225671", + "tags": [], + "value": { + "secure": false, + "value": "" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/variables", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"288ffd6c-6322-43c4-b18b-3bf30db834ab\",\"name\":\"GLOBAL_VARIABLE_PAYLOAD_TESTCREATEAGLOBALVARIABLERETURNSOKRESPONSE1721225671\",\"description\":\"\",\"type\":\"variable\",\"tags\":[],\"parse_test_public_id\":null,\"parse_test_name\":null,\"parse_test_options\":null,\"parse_test_extracted_at\":null,\"is_totp\":null,\"is_fido\":null,\"last_error\":null,\"value\":{\"secure\":false,\"value\":\"\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/synthetics/variables/288ffd6c-6322-43c4-b18b-3bf30db834ab", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "6ha-935-dj6" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"6ha-935-dj6\",\"deleted_at\":\"2024-07-17T14:14:34.062860+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a global variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:17:52.007Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "variables": [] + }, + "message": "", + "name": "Test-Create_a_mobile_test_returns_OK_Returns_the_created_test_details_response-1733743072", + "options": { + "device_ids": [ + "synthetics:mobile:device:iphone_15_ios_17" + ], + "mobileApplication": { + "applicationId": "ab0e0aed-536d-411a-9a99-5428c27d8f8e", + "referenceId": "6115922a-5f5d-455e-bc7e-7955a57f3815", + "referenceType": "version" + }, + "tick_every": 3600 + }, + "status": "paused", + "steps": [], + "type": "mobile" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/mobile", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"gcc-5su-udk\",\"name\":\"Test-Create_a_mobile_test_returns_OK_Returns_the_created_test_details_response-1733743072\",\"status\":\"paused\",\"type\":\"mobile\",\"tags\":[],\"created_at\":\"2024-12-09T11:17:52.575311+00:00\",\"modified_at\":\"2024-12-09T11:17:52.575311+00:00\",\"config\":{\"variables\":[]},\"message\":\"\",\"options\":{\"device_ids\":[\"synthetics:mobile:device:iphone_15_ios_17\"],\"mobileApplication\":{\"applicationId\":\"ab0e0aed-536d-411a-9a99-5428c27d8f8e\",\"referenceId\":\"6115922a-5f5d-455e-bc7e-7955a57f3815\",\"referenceType\":\"version\"},\"tick_every\":3600},\"locations\":[\"aws:us-west-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881009,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"stepCount\":{\"assertions\":0,\"subtests\":0,\"total\":0}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "gcc-5su-udk" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"gcc-5su-udk\",\"deleted_at\":\"2024-12-09T11:17:53.488575+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a mobile test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:17:53.705Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "steps": [ + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "password": "password", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "password": "password", + "type": "web", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "accessKey": "accessKey", + "secretKey": "secretKey", + "type": "sigv4" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "type": "ntlm" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "password": "password", + "type": "digest", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "accessTokenUrl": "accessTokenUrl", + "clientId": "clientId", + "clientSecret": "clientSecret", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "accessTokenUrl": "accessTokenUrl", + "password": "password", + "tokenApiAuthentication": "header", + "type": "oauth-rop", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_with_every_type_of_basic_auth.json", + "name": "Test-Create_a_multi_step_api_test_with_every_type_of_basicAuth_returns_OK_Returns_the_created_test_detail-1733743073", + "options": { + "tick_every": 60 + }, + "subtype": "multi", + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"vj7-th4-9tj\",\"name\":\"Test-Create_a_multi_step_api_test_with_every_type_of_basicAuth_returns_OK_Returns_the_created_test_detail-1733743073\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"multi\",\"tags\":[],\"created_at\":\"2024-12-09T11:17:54.468090+00:00\",\"modified_at\":\"2024-12-09T11:17:54.468090+00:00\",\"config\":{\"steps\":[{\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"name\":\"request is sent\",\"request\":{\"basicAuth\":{\"password\":\"password\",\"username\":\"username\"},\"method\":\"GET\",\"url\":\"https://httpbin.org/status/200\"},\"subtype\":\"http\",\"id\":\"shf-2ia-8rc\"},{\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"name\":\"request is sent\",\"request\":{\"basicAuth\":{\"password\":\"password\",\"type\":\"web\",\"username\":\"username\"},\"method\":\"GET\",\"url\":\"https://httpbin.org/status/200\"},\"subtype\":\"http\",\"id\":\"84i-7we-vez\"},{\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"name\":\"request is sent\",\"request\":{\"basicAuth\":{\"accessKey\":\"accessKey\",\"secretKey\":\"secretKey\",\"type\":\"sigv4\"},\"method\":\"GET\",\"url\":\"https://httpbin.org/status/200\"},\"subtype\":\"http\",\"id\":\"vrk-cs3-x5e\"},{\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"name\":\"request is sent\",\"request\":{\"basicAuth\":{\"type\":\"ntlm\"},\"method\":\"GET\",\"url\":\"https://httpbin.org/status/200\"},\"subtype\":\"http\",\"id\":\"d4c-wgh-3fi\"},{\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"name\":\"request is sent\",\"request\":{\"basicAuth\":{\"password\":\"password\",\"type\":\"digest\",\"username\":\"username\"},\"method\":\"GET\",\"url\":\"https://httpbin.org/status/200\"},\"subtype\":\"http\",\"id\":\"snv-v99-s62\"},{\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"name\":\"request is sent\",\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"accessTokenUrl\",\"clientId\":\"clientId\",\"clientSecret\":\"clientSecret\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"method\":\"GET\",\"url\":\"https://httpbin.org/status/200\"},\"subtype\":\"http\",\"id\":\"7r8-zy4-hp7\"},{\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"name\":\"request is sent\",\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"accessTokenUrl\",\"password\":\"password\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-rop\",\"username\":\"username\"},\"method\":\"GET\",\"url\":\"https://httpbin.org/status/200\"},\"subtype\":\"http\",\"id\":\"t4z-8yu-srs\"}]},\"message\":\"BDD test payload: synthetics_api_test_multi_step_with_every_type_of_basic_auth.json\",\"options\":{\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881013,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "vj7-th4-9tj" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"vj7-th4-9tj\",\"deleted_at\":\"2024-12-09T11:17:55.365266+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a multi-step api test with every type of basicAuth returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2025-12-26T15:22:45.114Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONPath", + "target": { + "elementsOperator": "atLeastOneElementMatches", + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + }, + { + "operator": "md5", + "target": "a", + "type": "bodyHash" + }, + { + "code": "const hello = 'world';", + "type": "javascript" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testcreateamultisteptestwithsubtestreturnsokresponse1766762565" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + }, + "variablesFromScript": "dd.variable.set(\"FOO\", \"foo\")" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Create_a_multistep_test_with_subtest_returns_OK_response-1766762565", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_a_multistep_test_with_subtest_returns_OK_response-1766762565", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"f8v-zk3-x5h\",\"name\":\"Test-Create_a_multistep_test_with_subtest_returns_OK_response-1766762565\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"http\",\"tags\":[\"testing:api\"],\"created_at\":\"2025-12-26T15:22:45.449340+00:00\",\"modified_at\":\"2025-12-26T15:22:45.449340+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"timingsScope\":\"withoutDNS\",\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"elementsOperator\":\"atLeastOneElementMatches\",\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"},{\"operator\":\"md5\",\"target\":\"a\",\"type\":\"bodyHash\"},{\"code\":\"const hello = 'world';\",\"type\":\"javascript\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testcreateamultisteptestwithsubtestreturnsokresponse1766762565\"},\"method\":\"GET\",\"persistCookies\":true,\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"variablesFromScript\":\"dd.variable.set(\\\"FOO\\\", \\\"foo\\\")\"},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"httpVersion\":\"http2\",\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_a_multistep_test_with_subtest_returns_OK_response-1766762565\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":246774114,\"org_id\":321813,\"modified_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "steps": [ + { + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "name": "request is sent", + "request": { + "basicAuth": { + "password": "password", + "username": "username" + }, + "method": "GET", + "url": "https://httpbin.org/status/200" + }, + "subtype": "http" + }, + { + "name": "subtest step", + "subtestPublicId": "f8v-zk3-x5h", + "subtype": "playSubTest" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_with_subtest.json", + "name": "Test-Create_a_multistep_test_with_subtest_returns_OK_response-1766762565", + "options": { + "tick_every": 60 + }, + "subtype": "multi", + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"5kg-4fz-eh9\",\"name\":\"Test-Create_a_multistep_test_with_subtest_returns_OK_response-1766762565\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"multi\",\"tags\":[],\"created_at\":\"2025-12-26T15:22:45.980687+00:00\",\"modified_at\":\"2025-12-26T15:22:45.980687+00:00\",\"config\":{\"steps\":[{\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"name\":\"request is sent\",\"request\":{\"basicAuth\":{\"password\":\"password\",\"username\":\"username\"},\"method\":\"GET\",\"url\":\"https://httpbin.org/status/200\"},\"subtype\":\"http\",\"id\":\"cyy-kz8-9b6\"},{\"name\":\"subtest step\",\"subtestPublicId\":\"f8v-zk3-x5h\",\"subtype\":\"playSubTest\",\"id\":\"se7-rsj-k3p\"}]},\"message\":\"BDD test payload: synthetics_api_test_multi_step_with_subtest.json\",\"options\":{\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":246774122,\"org_id\":321813,\"modified_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "5kg-4fz-eh9" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"5kg-4fz-eh9\",\"deleted_at\":\"2025-12-26T15:22:46.386306+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "f8v-zk3-x5h" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"f8v-zk3-x5h\",\"deleted_at\":\"2025-12-26T15:22:46.982158+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a multistep test with subtest returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-01-26T10:20:29.865Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_a_private_location_returns_OK_response-1706264429" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"88260ec6-bc34-11ee-aae0-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_private_location_returns_OK_response-1706264429\",\"created_at\":\"2024-01-26T10:20:30.357389+00:00\",\"modified_at\":\"2024-01-26T10:20:30.420608+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "description": "Test Test-Create_a_private_location_returns_OK_response-1706264429 description", + "metadata": { + "restricted_roles": [ + "88260ec6-bc34-11ee-aae0-da7ad0900002" + ] + }, + "name": "Test-Create_a_private_location_returns_OK_response-1706264429", + "tags": [ + "test:testcreateaprivatelocationreturnsokresponse1706264429" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/private-locations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"private_location\":{\"createdAt\":\"2024-01-26T10:20:35.103428+00:00\",\"modifiedAt\":\"2024-01-26T10:20:35.103428+00:00\",\"description\":\"Test Test-Create_a_private_location_returns_OK_response-1706264429 description\",\"tags\":[\"test:testcreateaprivatelocationreturnsokresponse1706264429\"],\"name\":\"Test-Create_a_private_location_returns_OK_response-1706264429\",\"metadata\":{\"restricted_roles\":[\"88260ec6-bc34-11ee-aae0-da7ad0900002\"]},\"id\":\"pl:test-create_a_private_location_returns_ok_response-1706264429-142add9a13d5e67404ac364c8b25d1dc\",\"createdBy\":\"frog@datadoghq.com\",\"secrets\":{\"config_decryption\":{\"key\":\"-----BEGIN RSA PRIVATE KEY-----\\nMIIJKAIBAAKCAgEAzDBoEOFNX0T+HBIjE4ltWD2xjhzEd2rmnVXzkeq+3rzwRd9d\\nBrEjEih/dHlxhNsd6Z0w5N8hqr2LR74ke6OdTEVgQEuL94rK73OpIdIjYyYmXu2b\\nZWNea2gUJQlZlTNOD5Wbts8mHjyw5MLCf23XsWqrKFNbrGomuZuODZWCn7OjQoWy\\n1NFw7osMbr2FjYJrCJc88ZpARlFtpVuRy2BXUdePnpvA1OFlqstRGN8EIrTqIOxq\\noB7shoidI7AjyzJAnXvN26DFsvwj2N5Fizfr2VuFmw2ewOCUQggLA0Nnh/XjO8qi\\nRAfgDxMQtClMO9WiXmHUrvH7PC/dH2aPhNl1n/UgKfRz2bwlRQuP7z7827N/clVz\\nCuiO7/QDyWKjD+qvmPtKN5LswffYM32hjq8aGtgw9AEp70r5Ng6bbUDRidRlgXPC\\ngAqzV667NHunyHzmk6OdFlgbAHwRJkqg5E5RdlLZTFAnoPF1FfQAJFWxeIqotb32\\nMCHLVWh2jcD3ndPxU9kfA3tsyGBDy1VH5DRNnICBeGePUmqu7J1p0S8G1GGW4l0k\\n0AmS6nFOf/LWXIDUGWi2kcaaWi5mzJivIqZ1NNNPNfYaaZp7AFy+mpVlIuni+wc2\\nzo1EN3c7+Wg0jZAT5OaURJRvDxV6hrKt16e74Cxhth6VN9G/S11ZPlKrfiMCAwEA\\nAQKCAgAcOXi5FJugVqYVdUBZ+/4cW3LGpR1XMHSuPOpNOjimC1HfJq/yM9wYL3bm\\nv768UZmB6FOQ33ME6extv0/Fs2kT2OckHA0963Z/wOoZHbX8h5J4PrnjOugbSqi2\\nMeOrJwtcRh7fFyU6usLs7Cr8eE9/W7JLAbLDU20E7QamxArpTmh70oVUu5qzro7K\\nY/IpDGUFK/qlnt/RmIHigJTXmvqW+ogEsZznED0AbdhI6tLkhUNzx5o5hezF7+5g\\nt4FLHigmXK2o9UE+q3G9EYRlaRZ11hvSwgA2wxRbSEdVbSTLe2aspibl5nzHOKhv\\nbuH1x2MJTtaaVCKZQDh9layy/Wgvs9ge51+TiX+ugHA7M8JJVd6VjG0k7ypwoFL8\\nqPlNshml5QDISC/kw7XT8j873MoJC/jawwdH5Oy8cRg+ERQeNWphlXRAYTX2ntUh\\nCpNk3Q8uP4bKVau6Jdjo8QpsjfDYg4j9OQKM2HfgAF7AaIFV5o3aEv/mVHo5FNoB\\nEuxfp8iteLIRCiGYYRH6Cl3SaunlPVKFHjzR27sQ5nXmn56V0+iCRynNAh1PxXq9\\n0ugjiyiWNtKntRzfanLr4l2SYc2MkNFKh1EpQPBEFYAWOhIORv9bYfD4xvlzXTdh\\nsCpx5U2IZ8lSFONnZww9a+n6b7rN0H9dfEKYE9/uA9WbRwBEkQKCAQEA9AQ3znx8\\npTGmEyvmSB1x4Pc+8zdzdwN+Y0HKTSV0vbMl6yIE8k2h4ZY2P9xnh0LX7z3Qt+0v\\nf13W0H+LeaLHY2U8OSss06O7RcoTCGRpD3YS/WAvz0fTRT7v2FNy2iyFIJB23JEV\\nF2V+Fc8JQUHpU3VaAqStBMa2kLatl3XzCjQUBW92Xwn9IVNno28TGTADbOTbbVm6\\n05RpCHzlpqE33C2EdR2mOoWH7ECfQifA5bu6hkdbOlikPZ0pOxhPEgTOFS/B/p5H\\ntgVVFqIcdXOKQkMdhh5i4+60+yn0yFNP4jcEGtyym8prneBHCM+IHkPEAj9PMYHJ\\nluLobuBBl/Ss+wKCAQEA1jd6Owi3oUYxvr/jNdlADQfkZiQnjn/ysDihAp1SgouV\\nGNd7QSD6SY9JribewUNNBstUAhuTOYuthn1X5HQ2ZuyS48iV5Mntt6adYAjdI8t1\\nzl1nC1L4RLkYomrmk+V1jTyTfp2WQCtUmqjKKqBhPbUM3VCgdsgohPnWW7Xfr064\\nbTPlgAKHWTXDOrXIEgkbEA7TC0eXLdcZFhNZpOeQErntsskSsfbsCOzkAaVMPuG8\\nL02ZEOOQfPGWVHoQ1c31BG+O2jBadumPMNsGGoKOXe9RwRBuYDiXSvaNhluocxJT\\nESEfO6kCsBpOWp5LMX3UzTaNJKGX0G/C4M5Mbm1a+QKCAQEAmuBCe3BPvJmyiuCG\\nHKdzrBHBhqVfR96TzXPobuajHfQi0QaalR/o60Fn1UiS/SrT2ykk3FhSmUh6G4OY\\nhu9mFhQfETnyDbISHs2PHvh8JjAPBXqTXcB8u6qimG7+qrMvG+gVSRFcjakBSd5K\\nRX0MFsiZBKx4lFt7bIZFz6gxRfyf6INCYjf4zboeQYEyYf4zbl4jV1hoV/oOYDDF\\noekZh0nslFjpNKOkDbNGYbrRl/56+Nc5c+Lm+6RQkw1uwkUCeDgDrRPQ+BqSUvc5\\nkOJwknX+uy12Hq1XeUK79pnKTg4VMOd7BZ6Ih3/eFh2Ci5L/SV3dadKynG4QkK8N\\ncuD9GQKCAQBwGRHuiI5HZ8sqTZHhoPFCoGmmBa9pg40FKG0hSCBgThjUqhZGq7Iu\\nAjyFVLPmoIhTUN2CSNnPGEfTBA6Vbzb0v0HSzymZUw4Bt7/M/HZ0f8kDF5+Prnha\\nxh2dCKHmrQHJyfRJIr/4jnQ0hrVcfxbDytWTjtiZr/58L5072r3WKDSceLbVOP2I\\n8nhaZbvvrDIsQgWwdmMnStNG2RNlFwQuuHspvsz4sgUsWoKqVczDby8h9dJuoxb+\\nOxH23PWoXKGmE5bGmN0OMwSKhWL5Rm6nu0+l3ypTUeniAYln0NkidmlfolyMxNGy\\nQ+HSy9j/aiCMzsonbCRcn890AqC+fJ1JAoIBAFklhivnh6N09aCFspe12fjVONib\\nSKS7ZSur1i1HRj2CX65BYOKc7doX6AZ4kPmxttMXXTFvQQewbIVOZ4uK19pz2Nh+\\naorWQ2nnLmrevZ8obVfbe5sw+6yjsH+XQS0kFsejZW56iDBoc7hDOWTe2Mjmn9+E\\nDChrY6CA3f0wTvOaT5WX/33g3ZLWsGKLJjJRoWLfTVYJ6rkFBYFDyVdk8PxBJK8g\\nX2jSDIogUwS23pRoeanycxMJ4AAtuY3wHj9rRkvwJSf1petdA1YoCXRou3GWL1Fv\\nYzArN8mDRlWGDFbdzUO+5dmoRI32f3oOmZolNQEkJJd4M5EMkAHLuwiKzWw=\\n-----END RSA PRIVATE KEY-----\",\"id\":\"2b9d4d02c47cd3be78f6eb3170cc1eb8\"},\"authentication\":{\"key\":\"88b31857c9c5fa03c7a01d9c99e6d0adedd60a1f8049f69743ab78843537bc9b\",\"id\":\"e8f9aa489993922fba0f7c72569125c4\"}},\"config\":{\"site\":\"datadoghq.com\"}},\"result_encryption\":{\"id\":\"sha256$base64$GA8WCOyWvWP6GJAGhywibAf0NuEeFgqJKZVjrCogbqU=\",\"key\":\"-----BEGIN PUBLIC KEY-----\\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0yCGWhamEUB1Xyp8a0lI\\nXIJX9xEGS4Os467tfjMXF8SJj2+47EqZNNB0SPbesethiTH/3zVvsFhzCtXOfuKG\\nNZIN+6IWVEIsecgiFGYPnCdnOawzKTPHzE+sD/ipbJCkINvbbcgmxYE5Hw1Ju26n\\nneFv25fKTAI/JHETBMQGxFbcJ4QU2IdJrQ6Er7mT6s1BT/HO7X7WAWs34FBGDPtg\\nlM6erRoY5CSCP5/5x++xDzw4gfWOkawMBgS9GfBnfp3FWy9H33GwvPhBelRbxzOC\\n3FMKx5dwngWRFJYekIdwFBEJt088EwyTS9MqYGyt+5AiJVEQ7LV6Hz6HH89sbyQB\\n0QxrFQlQ38qeReA8QV6o4SVNa+JmvyHWHExX9Mnb2w1n86iYYinu1DcA+kuXvsG0\\njGeym0Uz9l/ufZrhLmFDFOMpN1J6/FK8mHGtXz2weupflNNwWWgyD1jKPn9U1ZQP\\ndYXjdBhTHU7H9beoUQ40eYpF4JGBQEu8ARgKYBGSwCsiu0zIykd9zAFndouakFSj\\nqSq1h8kNY1Yp/1NZjPbvMTXt+hNPgBBKJ+aV3Z4tl+DB7HLKrWirAX6RNeFqH6Ys\\n/CZk1xH3wTGuvBKsdEL93o8EoxhZxh0O4o7936aPYtpDucExXcqaao8jdXprs0q0\\nqvDZkEI3/aUB3LclvfXjavMCAwEAAQ==\\n-----END PUBLIC KEY-----\\n\"},\"config\":{\"id\":\"pl:test-create_a_private_location_returns_ok_response-1706264429-142add9a13d5e67404ac364c8b25d1dc\",\"site\":\"datadoghq.com\",\"accessKey\":\"e8f9aa489993922fba0f7c72569125c4\",\"secretAccessKey\":\"88b31857c9c5fa03c7a01d9c99e6d0adedd60a1f8049f69743ab78843537bc9b\",\"privateKey\":\"-----BEGIN RSA PRIVATE KEY-----\\nMIIJKAIBAAKCAgEAzDBoEOFNX0T+HBIjE4ltWD2xjhzEd2rmnVXzkeq+3rzwRd9d\\nBrEjEih/dHlxhNsd6Z0w5N8hqr2LR74ke6OdTEVgQEuL94rK73OpIdIjYyYmXu2b\\nZWNea2gUJQlZlTNOD5Wbts8mHjyw5MLCf23XsWqrKFNbrGomuZuODZWCn7OjQoWy\\n1NFw7osMbr2FjYJrCJc88ZpARlFtpVuRy2BXUdePnpvA1OFlqstRGN8EIrTqIOxq\\noB7shoidI7AjyzJAnXvN26DFsvwj2N5Fizfr2VuFmw2ewOCUQggLA0Nnh/XjO8qi\\nRAfgDxMQtClMO9WiXmHUrvH7PC/dH2aPhNl1n/UgKfRz2bwlRQuP7z7827N/clVz\\nCuiO7/QDyWKjD+qvmPtKN5LswffYM32hjq8aGtgw9AEp70r5Ng6bbUDRidRlgXPC\\ngAqzV667NHunyHzmk6OdFlgbAHwRJkqg5E5RdlLZTFAnoPF1FfQAJFWxeIqotb32\\nMCHLVWh2jcD3ndPxU9kfA3tsyGBDy1VH5DRNnICBeGePUmqu7J1p0S8G1GGW4l0k\\n0AmS6nFOf/LWXIDUGWi2kcaaWi5mzJivIqZ1NNNPNfYaaZp7AFy+mpVlIuni+wc2\\nzo1EN3c7+Wg0jZAT5OaURJRvDxV6hrKt16e74Cxhth6VN9G/S11ZPlKrfiMCAwEA\\nAQKCAgAcOXi5FJugVqYVdUBZ+/4cW3LGpR1XMHSuPOpNOjimC1HfJq/yM9wYL3bm\\nv768UZmB6FOQ33ME6extv0/Fs2kT2OckHA0963Z/wOoZHbX8h5J4PrnjOugbSqi2\\nMeOrJwtcRh7fFyU6usLs7Cr8eE9/W7JLAbLDU20E7QamxArpTmh70oVUu5qzro7K\\nY/IpDGUFK/qlnt/RmIHigJTXmvqW+ogEsZznED0AbdhI6tLkhUNzx5o5hezF7+5g\\nt4FLHigmXK2o9UE+q3G9EYRlaRZ11hvSwgA2wxRbSEdVbSTLe2aspibl5nzHOKhv\\nbuH1x2MJTtaaVCKZQDh9layy/Wgvs9ge51+TiX+ugHA7M8JJVd6VjG0k7ypwoFL8\\nqPlNshml5QDISC/kw7XT8j873MoJC/jawwdH5Oy8cRg+ERQeNWphlXRAYTX2ntUh\\nCpNk3Q8uP4bKVau6Jdjo8QpsjfDYg4j9OQKM2HfgAF7AaIFV5o3aEv/mVHo5FNoB\\nEuxfp8iteLIRCiGYYRH6Cl3SaunlPVKFHjzR27sQ5nXmn56V0+iCRynNAh1PxXq9\\n0ugjiyiWNtKntRzfanLr4l2SYc2MkNFKh1EpQPBEFYAWOhIORv9bYfD4xvlzXTdh\\nsCpx5U2IZ8lSFONnZww9a+n6b7rN0H9dfEKYE9/uA9WbRwBEkQKCAQEA9AQ3znx8\\npTGmEyvmSB1x4Pc+8zdzdwN+Y0HKTSV0vbMl6yIE8k2h4ZY2P9xnh0LX7z3Qt+0v\\nf13W0H+LeaLHY2U8OSss06O7RcoTCGRpD3YS/WAvz0fTRT7v2FNy2iyFIJB23JEV\\nF2V+Fc8JQUHpU3VaAqStBMa2kLatl3XzCjQUBW92Xwn9IVNno28TGTADbOTbbVm6\\n05RpCHzlpqE33C2EdR2mOoWH7ECfQifA5bu6hkdbOlikPZ0pOxhPEgTOFS/B/p5H\\ntgVVFqIcdXOKQkMdhh5i4+60+yn0yFNP4jcEGtyym8prneBHCM+IHkPEAj9PMYHJ\\nluLobuBBl/Ss+wKCAQEA1jd6Owi3oUYxvr/jNdlADQfkZiQnjn/ysDihAp1SgouV\\nGNd7QSD6SY9JribewUNNBstUAhuTOYuthn1X5HQ2ZuyS48iV5Mntt6adYAjdI8t1\\nzl1nC1L4RLkYomrmk+V1jTyTfp2WQCtUmqjKKqBhPbUM3VCgdsgohPnWW7Xfr064\\nbTPlgAKHWTXDOrXIEgkbEA7TC0eXLdcZFhNZpOeQErntsskSsfbsCOzkAaVMPuG8\\nL02ZEOOQfPGWVHoQ1c31BG+O2jBadumPMNsGGoKOXe9RwRBuYDiXSvaNhluocxJT\\nESEfO6kCsBpOWp5LMX3UzTaNJKGX0G/C4M5Mbm1a+QKCAQEAmuBCe3BPvJmyiuCG\\nHKdzrBHBhqVfR96TzXPobuajHfQi0QaalR/o60Fn1UiS/SrT2ykk3FhSmUh6G4OY\\nhu9mFhQfETnyDbISHs2PHvh8JjAPBXqTXcB8u6qimG7+qrMvG+gVSRFcjakBSd5K\\nRX0MFsiZBKx4lFt7bIZFz6gxRfyf6INCYjf4zboeQYEyYf4zbl4jV1hoV/oOYDDF\\noekZh0nslFjpNKOkDbNGYbrRl/56+Nc5c+Lm+6RQkw1uwkUCeDgDrRPQ+BqSUvc5\\nkOJwknX+uy12Hq1XeUK79pnKTg4VMOd7BZ6Ih3/eFh2Ci5L/SV3dadKynG4QkK8N\\ncuD9GQKCAQBwGRHuiI5HZ8sqTZHhoPFCoGmmBa9pg40FKG0hSCBgThjUqhZGq7Iu\\nAjyFVLPmoIhTUN2CSNnPGEfTBA6Vbzb0v0HSzymZUw4Bt7/M/HZ0f8kDF5+Prnha\\nxh2dCKHmrQHJyfRJIr/4jnQ0hrVcfxbDytWTjtiZr/58L5072r3WKDSceLbVOP2I\\n8nhaZbvvrDIsQgWwdmMnStNG2RNlFwQuuHspvsz4sgUsWoKqVczDby8h9dJuoxb+\\nOxH23PWoXKGmE5bGmN0OMwSKhWL5Rm6nu0+l3ypTUeniAYln0NkidmlfolyMxNGy\\nQ+HSy9j/aiCMzsonbCRcn890AqC+fJ1JAoIBAFklhivnh6N09aCFspe12fjVONib\\nSKS7ZSur1i1HRj2CX65BYOKc7doX6AZ4kPmxttMXXTFvQQewbIVOZ4uK19pz2Nh+\\naorWQ2nnLmrevZ8obVfbe5sw+6yjsH+XQS0kFsejZW56iDBoc7hDOWTe2Mjmn9+E\\nDChrY6CA3f0wTvOaT5WX/33g3ZLWsGKLJjJRoWLfTVYJ6rkFBYFDyVdk8PxBJK8g\\nX2jSDIogUwS23pRoeanycxMJ4AAtuY3wHj9rRkvwJSf1petdA1YoCXRou3GWL1Fv\\nYzArN8mDRlWGDFbdzUO+5dmoRI32f3oOmZolNQEkJJd4M5EMkAHLuwiKzWw=\\n-----END RSA PRIVATE KEY-----\",\"publicKey\":{\"pem\":\"-----BEGIN PUBLIC KEY-----\\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0yCGWhamEUB1Xyp8a0lI\\nXIJX9xEGS4Os467tfjMXF8SJj2+47EqZNNB0SPbesethiTH/3zVvsFhzCtXOfuKG\\nNZIN+6IWVEIsecgiFGYPnCdnOawzKTPHzE+sD/ipbJCkINvbbcgmxYE5Hw1Ju26n\\nneFv25fKTAI/JHETBMQGxFbcJ4QU2IdJrQ6Er7mT6s1BT/HO7X7WAWs34FBGDPtg\\nlM6erRoY5CSCP5/5x++xDzw4gfWOkawMBgS9GfBnfp3FWy9H33GwvPhBelRbxzOC\\n3FMKx5dwngWRFJYekIdwFBEJt088EwyTS9MqYGyt+5AiJVEQ7LV6Hz6HH89sbyQB\\n0QxrFQlQ38qeReA8QV6o4SVNa+JmvyHWHExX9Mnb2w1n86iYYinu1DcA+kuXvsG0\\njGeym0Uz9l/ufZrhLmFDFOMpN1J6/FK8mHGtXz2weupflNNwWWgyD1jKPn9U1ZQP\\ndYXjdBhTHU7H9beoUQ40eYpF4JGBQEu8ARgKYBGSwCsiu0zIykd9zAFndouakFSj\\nqSq1h8kNY1Yp/1NZjPbvMTXt+hNPgBBKJ+aV3Z4tl+DB7HLKrWirAX6RNeFqH6Ys\\n/CZk1xH3wTGuvBKsdEL93o8EoxhZxh0O4o7936aPYtpDucExXcqaao8jdXprs0q0\\nqvDZkEI3/aUB3LclvfXjavMCAwEAAQ==\\n-----END PUBLIC KEY-----\\n\",\"fingerprint\":\"sha256$base64$GA8WCOyWvWP6GJAGhywibAf0NuEeFgqJKZVjrCogbqU=\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/synthetics/private-locations/pl%3Atest-create_a_private_location_returns_ok_response-1706264429-142add9a13d5e67404ac364c8b25d1dc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/88260ec6-bc34-11ee-aae0-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a private location returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:17:55.531Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "target": 1, + "type": "grpcHealthcheckStatus" + }, + { + "operator": "is", + "target": "proto target", + "type": "grpcProto" + }, + { + "operator": "is", + "property": "property", + "target": "123", + "type": "grpcMetadata" + } + ], + "request": { + "host": "localhost", + "message": "", + "metadata": {}, + "method": "GET", + "port": 50051, + "service": "Hello" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_grpc_test_payload.json", + "name": "Test-Create_an_API_GRPC_test_returns_OK_Returns_the_created_test_details_response-1733743075", + "options": { + "min_failure_duration": 0, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_GRPC_test_returns_OK_Returns_the_created_test_details_response-1733743075", + "monitor_options": { + "renotify_interval": 0 + }, + "tick_every": 60 + }, + "subtype": "grpc", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"ysc-nuq-x8y\",\"name\":\"Test-Create_an_API_GRPC_test_returns_OK_Returns_the_created_test_details_response-1733743075\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"grpc\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-12-09T11:17:56.335947+00:00\",\"modified_at\":\"2024-12-09T11:17:56.335947+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"target\":1,\"type\":\"grpcHealthcheckStatus\"},{\"operator\":\"is\",\"target\":\"proto target\",\"type\":\"grpcProto\"},{\"operator\":\"is\",\"property\":\"property\",\"target\":\"123\",\"type\":\"grpcMetadata\"}],\"request\":{\"host\":\"localhost\",\"message\":\"\",\"metadata\":{},\"method\":\"GET\",\"port\":50051,\"service\":\"Hello\"}},\"message\":\"BDD test payload: synthetics_api_grpc_test_payload.json\",\"options\":{\"min_failure_duration\":0,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_an_API_GRPC_test_returns_OK_Returns_the_created_test_details_response-1733743075\",\"monitor_options\":{\"renotify_interval\":0,\"on_missing_data\":\"show_no_data\",\"notify_audit\":false,\"new_host_delay\":300,\"include_tags\":true},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881016,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "ysc-nuq-x8y" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"ysc-nuq-x8y\",\"deleted_at\":\"2024-12-09T11:17:57.225249+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API GRPC test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:17:57.432Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONPath", + "target": { + "elementsOperator": "atLeastOneElementMatches", + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + }, + { + "operator": "md5", + "target": "a", + "type": "bodyHash" + }, + { + "code": "const hello = 'world';", + "type": "javascript" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testcreateanapihttptesthasbodyhashfilledout1733743077" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + }, + "variablesFromScript": "dd.variable.set(\"FOO\", \"foo\")" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Create_an_API_HTTP_test_has_bodyHash_filled_out-1733743077", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_HTTP_test_has_bodyHash_filled_out-1733743077", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"xej-vs3-2kp\",\"name\":\"Test-Create_an_API_HTTP_test_has_bodyHash_filled_out-1733743077\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"http\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-12-09T11:17:58.096533+00:00\",\"modified_at\":\"2024-12-09T11:17:58.096533+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"timingsScope\":\"withoutDNS\",\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"elementsOperator\":\"atLeastOneElementMatches\",\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"},{\"operator\":\"md5\",\"target\":\"a\",\"type\":\"bodyHash\"},{\"code\":\"const hello = 'world';\",\"type\":\"javascript\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testcreateanapihttptesthasbodyhashfilledout1733743077\"},\"method\":\"GET\",\"persistCookies\":true,\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"variablesFromScript\":\"dd.variable.set(\\\"FOO\\\", \\\"foo\\\")\"},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"httpVersion\":\"http2\",\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_an_API_HTTP_test_has_bodyHash_filled_out-1733743077\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881021,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "xej-vs3-2kp" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"xej-vs3-2kp\",\"deleted_at\":\"2024-12-09T11:17:58.901241+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API HTTP test has bodyHash filled out", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:17:59.159Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONPath", + "target": { + "elementsOperator": "atLeastOneElementMatches", + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + }, + { + "operator": "md5", + "target": "a", + "type": "bodyHash" + }, + { + "code": "const hello = 'world';", + "type": "javascript" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testcreateanapihttptestreturnsokreturnsthecreatedtestdetailsresponse1733743079" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + }, + "variablesFromScript": "dd.variable.set(\"FOO\", \"foo\")" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Create_an_API_HTTP_test_returns_OK_Returns_the_created_test_details_response-1733743079", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_HTTP_test_returns_OK_Returns_the_created_test_details_response-1733743079", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"j29-yg3-jd3\",\"name\":\"Test-Create_an_API_HTTP_test_returns_OK_Returns_the_created_test_details_response-1733743079\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"http\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-12-09T11:17:59.805698+00:00\",\"modified_at\":\"2024-12-09T11:17:59.805698+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"timingsScope\":\"withoutDNS\",\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"elementsOperator\":\"atLeastOneElementMatches\",\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"},{\"operator\":\"md5\",\"target\":\"a\",\"type\":\"bodyHash\"},{\"code\":\"const hello = 'world';\",\"type\":\"javascript\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testcreateanapihttptestreturnsokreturnsthecreatedtestdetailsresponse1733743079\"},\"method\":\"GET\",\"persistCookies\":true,\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"variablesFromScript\":\"dd.variable.set(\\\"FOO\\\", \\\"foo\\\")\"},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"httpVersion\":\"http2\",\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_an_API_HTTP_test_returns_OK_Returns_the_created_test_details_response-1733743079\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881024,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "j29-yg3-jd3" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"j29-yg3-jd3\",\"deleted_at\":\"2024-12-09T11:18:00.789317+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API HTTP test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-06-14T13:50:31.020Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [], + "request": { + "method": "GET", + "url": "https://example.com" + } + }, + "locations": [ + "aws:eu-west-3" + ], + "message": "Notification message", + "name": "Example test name", + "options": { + "ci": { + "executionRule": "blocking" + }, + "device_ids": [ + "chrome.laptop_large" + ], + "httpVersion": "http1", + "monitor_options": {}, + "restricted_roles": [ + "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + ], + "retry": {}, + "rumSettings": { + "applicationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "clientTokenId": 12345, + "isEnabled": true + }, + "scheduling": { + "timeframes": [ + { + "day": 1, + "from": "07:00", + "to": "16:00" + }, + { + "day": 3, + "from": "07:00", + "to": "16:00" + } + ], + "timezone": "America/New_York" + } + }, + "status": "live", + "subtype": "http", + "tags": [ + "env:production" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Minimum number of elements in parameter 'assertions' should be 1\\nRequired parameter 'tick_every' is missing\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create an API HTTP test with jsonPath assertion succeeds", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:18:01.041Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "password": "oauth-password", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "body", + "type": "oauth-rop", + "username": "oauth-usermame" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testcreateanapihttpwithoauthroptestreturnsokreturnsthecreatedtestdetailsresponse1733743081" + }, + "method": "GET", + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Create_an_API_HTTP_with_oauth_rop_test_returns_OK_Returns_the_created_test_details_response-1733743081", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_HTTP_with_oauth_rop_test_returns_OK_Returns_the_created_test_details_response-1733743081", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"yjp-h74-mx8\",\"name\":\"Test-Create_an_API_HTTP_with_oauth_rop_test_returns_OK_Returns_the_created_test_details_response-1733743081\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"http\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-12-09T11:18:01.665819+00:00\",\"modified_at\":\"2024-12-09T11:18:01.665819+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"password\":\"oauth-password\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"body\",\"type\":\"oauth-rop\",\"username\":\"oauth-usermame\"},\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testcreateanapihttpwithoauthroptestreturnsokreturnsthecreatedtestdetailsresponse1733743081\"},\"method\":\"GET\",\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"}},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_an_API_HTTP_with_oauth_rop_test_returns_OK_Returns_the_created_test_details_response-1733743081\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881029,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "yjp-h74-mx8" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"yjp-h74-mx8\",\"deleted_at\":\"2024-12-09T11:18:02.636143+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API HTTP with oauth-rop test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2026-07-10T09:46:57.309Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "isInMoreThan", + "target": 10, + "type": "certificate" + } + ], + "request": { + "host": "datadoghq.com", + "port": "{{ DATADOG_PORT }}" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_ssl_test_payload.json", + "name": "Test-Create_an_API_SSL_test_returns_OK_Returns_the_created_test_details_response-1783676817", + "options": { + "accept_self_signed": true, + "checkCertificateRevocation": true, + "disableAiaIntermediateFetching": true, + "ignore_certificate_validation": true, + "tick_every": 60 + }, + "subtype": "ssl", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"qv3-9py-53q\",\"name\":\"Test-Create_an_API_SSL_test_returns_OK_Returns_the_created_test_details_response-1783676817\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"ssl\",\"tags\":[\"testing:api\"],\"created_at\":\"2026-07-10T09:46:58.299268+00:00\",\"modified_at\":\"2026-07-10T09:46:58.299268+00:00\",\"config\":{\"assertions\":[{\"operator\":\"isInMoreThan\",\"target\":10,\"type\":\"certificate\"}],\"request\":{\"host\":\"datadoghq.com\",\"port\":\"{{ DATADOG_PORT }}\"},\"configVariables\":[{\"id\":\"7865d47f-47df-43b5-a612-e2dea9ed40e8\",\"name\":\"DATADOG_PORT\",\"type\":\"global\"}]},\"message\":\"BDD test payload: synthetics_api_ssl_test_payload.json\",\"options\":{\"accept_self_signed\":true,\"checkCertificateRevocation\":true,\"disableAiaIntermediateFetching\":true,\"ignore_certificate_validation\":true,\"tick_every\":60,\"bits_ai_auto_investigate\":false},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":304244708,\"org_id\":321813,\"modified_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "qv3-9py-53q" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"qv3-9py-53q\",\"deleted_at\":\"2026-07-10T09:46:59.194132+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API SSL test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2022-02-10T12:24:11.728Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testcreateanapitestreturnsokreturnsthecreatedtestdetailsresponse1644495851" + }, + "method": "GET", + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_payload.json", + "name": "Test-Create_an_API_test_returns_OK_Returns_the_created_test_details_response-1644495851", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_test_returns_OK_Returns_the_created_test_details_response-1644495851", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"live\",\"public_id\":\"x87-4ez-4xz\",\"tags\":[\"testing:api\"],\"org_id\":321813,\"locations\":[\"aws:us-east-2\"],\"message\":\"BDD test payload: synthetics_api_test_payload.json\",\"deleted_at\":null,\"name\":\"Test-Create_an_API_test_returns_OK_Returns_the_created_test_details_response-1644495851\",\"monitor_id\":63812387,\"type\":\"api\",\"created_at\":\"2022-02-10T12:24:12.489088+00:00\",\"modified_at\":\"2022-02-10T12:24:12.489088+00:00\",\"subtype\":\"http\",\"config\":{\"request\":{\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"url\":\"https://datadoghq.com\",\"headers\":{\"unique\":\"testcreateanapitestreturnsokreturnsthecreatedtestdetailsresponse1644495851\"},\"proxy\":{\"url\":\"https://datadoghq.com\",\"headers\":{}},\"timeout\":10,\"method\":\"GET\"},\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"type\":\"header\",\"target\":\"text/html\"},{\"operator\":\"lessThan\",\"type\":\"responseTime\",\"target\":2000},{\"operator\":\"validatesJSONPath\",\"type\":\"body\",\"target\":{\"operator\":\"isNot\",\"targetValue\":\"0\",\"jsonPath\":\"topKey\"}}],\"configVariables\":[{\"pattern\":\"content-type\",\"type\":\"text\",\"example\":\"content-type\",\"name\":\"PROPERTY\"}]},\"options\":{\"accept_self_signed\":false,\"retry\":{\"count\":3,\"interval\":10},\"min_location_failed\":1,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"monitor_priority\":5,\"monitor_name\":\"Test-Create_an_API_test_returns_OK_Returns_the_created_test_details_response-1644495851\",\"tick_every\":60}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "x87-4ez-4xz" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"deleted_at\":\"2022-02-10T12:24:13.010432+00:00\",\"public_id\":\"x87-4ez-4xz\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API test returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2026-05-19T16:45:21.251Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "steps": [ + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + }, + { + "type": "mcpRespectsSpecification" + }, + { + "operator": "contains", + "target": [ + "tools" + ], + "type": "mcpServerCapabilities" + } + ], + "isCritical": true, + "name": "Initialize MCP session", + "request": { + "callType": "init", + "headers": { + "DD-API-KEY": "", + "DD-APPLICATION-KEY": "" + }, + "mcpProtocolVersion": "2025-06-18", + "url": "https://example.org/mcp" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "mcp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + }, + { + "operator": "moreThan", + "target": 0, + "type": "mcpToolCount" + }, + { + "operator": "lessThan", + "target": 64, + "type": "mcpToolNameLength" + }, + { + "type": "mcpRespectsSpecification" + } + ], + "isCritical": true, + "name": "List MCP tools", + "request": { + "callType": "tool_list", + "headers": { + "DD-API-KEY": "", + "DD-APPLICATION-KEY": "" + }, + "mcpProtocolVersion": "2025-06-18", + "url": "https://example.org/mcp" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "mcp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + }, + { + "operator": "lessThan", + "target": 5000, + "type": "responseTime" + }, + { + "type": "mcpRespectsSpecification" + } + ], + "isCritical": true, + "name": "Call MCP search tool", + "request": { + "callType": "tool_call", + "headers": { + "DD-API-KEY": "", + "DD-APPLICATION-KEY": "" + }, + "mcpProtocolVersion": "2025-06-18", + "toolArgs": { + "limit": 5, + "query": "datadog synthetics" + }, + "toolName": "search", + "url": "https://example.org/mcp" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "mcp" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_mcp_payload.json", + "name": "Test-Create_an_API_test_with_MCP_steps_returns_OK_Returns_the_created_test_details_response-1779209121", + "options": { + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_test_with_MCP_steps_returns_OK_Returns_the_created_test_details_response-1779209121", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 1000 + }, + "tick_every": 900 + }, + "subtype": "multi", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"htz-sbz-vuw\",\"name\":\"Test-Create_an_API_test_with_MCP_steps_returns_OK_Returns_the_created_test_details_response-1779209121\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"multi\",\"tags\":[\"testing:api\"],\"created_at\":\"2026-05-19T16:45:22.077574+00:00\",\"modified_at\":\"2026-05-19T16:45:22.077574+00:00\",\"config\":{\"steps\":[{\"allowFailure\":false,\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"},{\"type\":\"mcpRespectsSpecification\"},{\"operator\":\"contains\",\"target\":[\"tools\"],\"type\":\"mcpServerCapabilities\"}],\"isCritical\":true,\"name\":\"Initialize MCP session\",\"request\":{\"callType\":\"init\",\"headers\":{\"DD-API-KEY\":\"\",\"DD-APPLICATION-KEY\":\"\"},\"mcpProtocolVersion\":\"2025-06-18\",\"url\":\"https://example.org/mcp\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"mcp\",\"id\":\"3qn-99h-nhn\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"},{\"operator\":\"moreThan\",\"target\":0,\"type\":\"mcpToolCount\"},{\"operator\":\"lessThan\",\"target\":64,\"type\":\"mcpToolNameLength\"},{\"type\":\"mcpRespectsSpecification\"}],\"isCritical\":true,\"name\":\"List MCP tools\",\"request\":{\"callType\":\"tool_list\",\"headers\":{\"DD-API-KEY\":\"\",\"DD-APPLICATION-KEY\":\"\"},\"mcpProtocolVersion\":\"2025-06-18\",\"url\":\"https://example.org/mcp\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"mcp\",\"id\":\"4xh-7i6-xda\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"},{\"operator\":\"lessThan\",\"target\":5000,\"type\":\"responseTime\"},{\"type\":\"mcpRespectsSpecification\"}],\"isCritical\":true,\"name\":\"Call MCP search tool\",\"request\":{\"callType\":\"tool_call\",\"headers\":{\"DD-API-KEY\":\"\",\"DD-APPLICATION-KEY\":\"\"},\"mcpProtocolVersion\":\"2025-06-18\",\"toolArgs\":{\"limit\":5,\"query\":\"datadog synthetics\"},\"toolName\":\"search\",\"url\":\"https://example.org/mcp\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"mcp\",\"id\":\"38v-zrk-3th\"}]},\"message\":\"BDD test payload: synthetics_api_test_mcp_payload.json\",\"options\":{\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_an_API_test_with_MCP_steps_returns_OK_Returns_the_created_test_details_response-1779209121\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":1000},\"tick_every\":900,\"bits_ai_auto_investigate\":false},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":284930680,\"org_id\":321813,\"modified_by\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "htz-sbz-vuw" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"htz-sbz-vuw\",\"deleted_at\":\"2026-05-19T16:45:22.518455+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API test with MCP steps returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:18:04.592Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "target": "message", + "type": "receivedMessage" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + } + ], + "configVariables": [], + "request": { + "host": "https://datadoghq.com", + "message": "message", + "port": 443 + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_udp_payload.json", + "name": "Test-Create_an_API_test_with_UDP_subtype_returns_OK_Returns_the_created_test_details_response-1733743084", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_test_with_UDP_subtype_returns_OK_Returns_the_created_test_details_response-1733743084", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "udp", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"dxe-93y-pxq\",\"name\":\"Test-Create_an_API_test_with_UDP_subtype_returns_OK_Returns_the_created_test_details_response-1733743084\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"udp\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-12-09T11:18:05.244429+00:00\",\"modified_at\":\"2024-12-09T11:18:05.244429+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"target\":\"message\",\"type\":\"receivedMessage\"},{\"operator\":\"lessThan\",\"target\":2000,\"type\":\"responseTime\"}],\"configVariables\":[],\"request\":{\"host\":\"https://datadoghq.com\",\"message\":\"message\",\"port\":443}},\"message\":\"BDD test payload: synthetics_api_test_udp_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_an_API_test_with_UDP_subtype_returns_OK_Returns_the_created_test_details_response-1733743084\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881036,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "dxe-93y-pxq" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"dxe-93y-pxq\",\"deleted_at\":\"2024-12-09T11:18:06.180879+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API test with UDP subtype returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:18:06.385Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "target": "message", + "type": "receivedMessage" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + } + ], + "configVariables": [], + "request": { + "message": "message", + "url": "ws://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_websocket_payload.json", + "name": "Test-Create_an_API_test_with_WEBSOCKET_subtype_returns_OK_Returns_the_created_test_details_response-1733743086", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_test_with_WEBSOCKET_subtype_returns_OK_Returns_the_created_test_details_response-1733743086", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "websocket", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"bae-2wv-3kh\",\"name\":\"Test-Create_an_API_test_with_WEBSOCKET_subtype_returns_OK_Returns_the_created_test_details_response-1733743086\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"websocket\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-12-09T11:18:07.007154+00:00\",\"modified_at\":\"2024-12-09T11:18:07.007154+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"target\":\"message\",\"type\":\"receivedMessage\"},{\"operator\":\"lessThan\",\"target\":2000,\"type\":\"responseTime\"}],\"configVariables\":[],\"request\":{\"message\":\"message\",\"url\":\"ws://datadoghq.com\"}},\"message\":\"BDD test payload: synthetics_api_test_websocket_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_an_API_test_with_WEBSOCKET_subtype_returns_OK_Returns_the_created_test_details_response-1733743086\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881039,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "bae-2wv-3kh" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"bae-2wv-3kh\",\"deleted_at\":\"2024-12-09T11:18:07.908849+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API test with WEBSOCKET subtype returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2026-03-03T11:12:53.062Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "bodyType": "application/octet-stream", + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "files": [ + { + "content": "file content", + "encoding": "base64", + "name": "file name", + "originalFileName": "image.png", + "type": "file type" + } + ], + "headers": { + "unique": "testcreateanapitestwithafilepayloadreturnsokreturnsthecreatedtestdetailsresponse1772536373" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Create_an_API_test_with_a_file_payload_returns_OK_Returns_the_created_test_details_response-1772536373", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_test_with_a_file_payload_returns_OK_Returns_the_created_test_details_response-1772536373", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"x96-ukc-pvk\",\"name\":\"Test-Create_an_API_test_with_a_file_payload_returns_OK_Returns_the_created_test_details_response-1772536373\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"http\",\"tags\":[\"testing:api\"],\"created_at\":\"2026-03-03T11:12:53.933929+00:00\",\"modified_at\":\"2026-03-03T11:12:53.933929+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"timingsScope\":\"withoutDNS\",\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"bodyType\":\"application/octet-stream\",\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"files\":[{\"encoding\":\"base64\",\"name\":\"file name\",\"originalFileName\":\"image.png\",\"type\":\"file type\",\"bucketKey\":\"api-upload-file/x96-ukc-pvk/2026-03-03T11:12:53.730968_6541a914-12d5-43ca-8dc6-387726057eb6.json\"}],\"headers\":{\"unique\":\"testcreateanapitestwithafilepayloadreturnsokreturnsthecreatedtestdetailsresponse1772536373\"},\"method\":\"GET\",\"persistCookies\":true,\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"}},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"httpVersion\":\"http2\",\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_an_API_test_with_a_file_payload_returns_OK_Returns_the_created_test_details_response-1772536373\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":263059097,\"org_id\":321813,\"modified_by\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "x96-ukc-pvk" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"x96-ukc-pvk\",\"deleted_at\":\"2026-03-03T11:12:54.336119+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API test with a file payload returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2025-07-11T17:23:59.790Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "steps": [ + { + "allowFailure": true, + "assertions": [ + { + "operator": "is", + "target": 200, + "type": "statusCode" + } + ], + "exitIfSucceed": true, + "extractedValues": [ + { + "field": "server", + "name": "EXTRACTED_VALUE", + "parser": { + "type": "raw" + }, + "secure": true, + "type": "http_header" + } + ], + "extractedValuesFromScript": "dd.variable.set('STATUS_CODE', dd.response.statusCode);", + "isCritical": true, + "name": "request is sent", + "request": { + "httpVersion": "http2", + "method": "GET", + "timeout": 10, + "url": "https://datadoghq.com" + }, + "retry": { + "count": 5, + "interval": 1000 + }, + "subtype": "http" + }, + { + "name": "Wait", + "subtype": "wait", + "value": 1 + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "extractedValues": [], + "isCritical": true, + "name": "GRPC CALL", + "request": { + "callType": "unary", + "compressedJsonDescriptor": "eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==", + "host": "grpcbin.test.k6.io", + "message": "{}", + "metadata": {}, + "method": "Index", + "port": 9000, + "service": "grpcbin.GRPCBin" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "grpc" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "isInMoreThan", + "target": 10, + "type": "certificate" + } + ], + "isCritical": true, + "name": "SSL step", + "request": { + "checkCertificateRevocation": true, + "disableAiaIntermediateFetching": true, + "host": "example.org", + "port": 443 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "ssl" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "DNS step", + "request": { + "dnsServer": "8.8.8.8", + "dnsServerPort": "53", + "host": "troisdizaines.com" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "dns" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "TCP step", + "request": { + "host": "34.95.79.70", + "port": 80, + "shouldTrackHops": true, + "timeout": 32 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "tcp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "is", + "target": 0, + "type": "packetLossPercentage" + } + ], + "isCritical": true, + "name": "ICMP step", + "request": { + "host": "34.95.79.70", + "numberOfPackets": 4, + "shouldTrackHops": true, + "timeout": 38 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "icmp" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "Websocket step", + "request": { + "basicAuth": { + "password": "password", + "type": "web", + "username": "user" + }, + "headers": { + "f": "g" + }, + "isMessageBase64Encoded": true, + "message": "My message", + "url": "ws://34.95.79.70/web-socket" + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "websocket" + }, + { + "allowFailure": false, + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "isCritical": true, + "name": "UDP step", + "request": { + "host": "8.8.8.8", + "message": "A image.google.com", + "port": 53 + }, + "retry": { + "count": 0, + "interval": 300 + }, + "subtype": "udp" + } + ] + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_multi_step_payload.json", + "name": "Test-Create_an_API_test_with_multi_subtype_returns_OK_Returns_the_created_test_details_response-1752254639", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Create_an_API_test_with_multi_subtype_returns_OK_Returns_the_created_test_details_response-1752254639", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 1000 + }, + "tick_every": 60 + }, + "subtype": "multi", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"rv5-fh5-qxi\",\"name\":\"Test-Create_an_API_test_with_multi_subtype_returns_OK_Returns_the_created_test_details_response-1752254639\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"multi\",\"tags\":[\"testing:api\"],\"created_at\":\"2025-07-11T17:24:00.435072+00:00\",\"modified_at\":\"2025-07-11T17:24:00.435072+00:00\",\"config\":{\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"steps\":[{\"allowFailure\":true,\"assertions\":[{\"operator\":\"is\",\"target\":200,\"type\":\"statusCode\"}],\"exitIfSucceed\":true,\"extractedValues\":[{\"field\":\"server\",\"name\":\"EXTRACTED_VALUE\",\"parser\":{\"type\":\"raw\"},\"secure\":true,\"type\":\"http_header\"}],\"extractedValuesFromScript\":\"dd.variable.set('STATUS_CODE', dd.response.statusCode);\",\"isCritical\":true,\"name\":\"request is sent\",\"request\":{\"httpVersion\":\"http2\",\"method\":\"GET\",\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"retry\":{\"count\":5,\"interval\":1000},\"subtype\":\"http\",\"id\":\"8gd-rh5-ct5\"},{\"name\":\"Wait\",\"subtype\":\"wait\",\"value\":1,\"id\":\"utc-mhc-6ws\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"extractedValues\":[],\"isCritical\":true,\"name\":\"GRPC CALL\",\"request\":{\"callType\":\"unary\",\"compressedJsonDescriptor\":\"eJy1lU1z2yAQhv+Lzj74I3ETH506bQ7OZOSm1w4Wa4epBARQppqM/3v5koCJJdvtxCdW77vPssCO3zMKUgHOFu/ZXvBiS6hZho/f8qe7pftYgXphWJrlA8XwxywEvNba+6PhkC2yVcVVswYp0R6ykRYlZ1SCV21SDrxsssPIeS9FJKqGfK2rqnmmSBwhWa2XlKgtaQPiDcRGCUDVfwGD2sKUqKEtc1cSoOrsMlaMOec1sySYCCgUYRSVLv2zSva2u+FQkB0pVkIw8bFuIudOOn3pOaKYVT3Iy97Pd0AYhOx5QcMsnxvRHlnuLf8ETDd3CNtrv2nejkDpRnANCmGkkFn/hsYzpBKE7jVbufgnKnV9HRM9zRPDDKPttYT61n0TdWkAAjggk9AhuxIeaXd69CYTcsGw7cBTakLVbNpRzGEgyWjkSOpMbZXkhGL6oX30R49qt3GoHrap7i0XdD41WQ+2icCNm5p1hmFqnHNlcla0riKmDZ183crDxChjbnurtxHPRE784sVhWvDfGP+SsTKibU3o5NtWHuZFGZOxP6P5VXqIOvaOSec4eYohyd7NslHuJbd1bewds85xYrNxkr2d+5IhFWF3NvaO684xjE2S5ulY+tu64Pna0fCPJgzw6vF5/WucLcYjt5xoq19O3UDptOg/OamJQRaCcPPnMTQ2QDFn+uhPvUfnCrMc99upyQY4Ui9Dlc/YoG3R/v4Cs9YE+g==\",\"host\":\"grpcbin.test.k6.io\",\"message\":\"{}\",\"metadata\":{},\"method\":\"Index\",\"port\":9000,\"service\":\"grpcbin.GRPCBin\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"grpc\",\"id\":\"jyc-fup-qhy\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"isInMoreThan\",\"target\":10,\"type\":\"certificate\"}],\"isCritical\":true,\"name\":\"SSL step\",\"request\":{\"checkCertificateRevocation\":true,\"disableAiaIntermediateFetching\":true,\"host\":\"example.org\",\"port\":443},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"ssl\",\"id\":\"jds-pqx-eb3\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"DNS step\",\"request\":{\"dnsServer\":\"8.8.8.8\",\"dnsServerPort\":\"53\",\"host\":\"troisdizaines.com\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"dns\",\"id\":\"68v-9mb-3e8\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"TCP step\",\"request\":{\"host\":\"34.95.79.70\",\"port\":80,\"shouldTrackHops\":true,\"timeout\":32},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"tcp\",\"id\":\"upy-nkf-vjp\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"is\",\"target\":0,\"type\":\"packetLossPercentage\"}],\"isCritical\":true,\"name\":\"ICMP step\",\"request\":{\"host\":\"34.95.79.70\",\"numberOfPackets\":4,\"shouldTrackHops\":true,\"timeout\":38},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"icmp\",\"id\":\"2j5-s8z-4kj\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"Websocket step\",\"request\":{\"basicAuth\":{\"password\":\"password\",\"type\":\"web\",\"username\":\"user\"},\"headers\":{\"f\":\"g\"},\"isMessageBase64Encoded\":true,\"message\":\"My message\",\"url\":\"ws://34.95.79.70/web-socket\"},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"websocket\",\"id\":\"fn6-q68-fhi\"},{\"allowFailure\":false,\"assertions\":[{\"operator\":\"lessThan\",\"target\":1000,\"type\":\"responseTime\"}],\"isCritical\":true,\"name\":\"UDP step\",\"request\":{\"host\":\"8.8.8.8\",\"message\":\"A image.google.com\",\"port\":53},\"retry\":{\"count\":0,\"interval\":300},\"subtype\":\"udp\",\"id\":\"hk5-uyh-i3x\"}]},\"message\":\"BDD test payload: synthetics_api_test_multi_step_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Create_an_API_test_with_multi_subtype_returns_OK_Returns_the_created_test_details_response-1752254639\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":1000},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":177655297,\"org_id\":321813,\"modified_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "rv5-fh5-qxi" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"rv5-fh5-qxi\",\"deleted_at\":\"2025-07-11T17:24:01.919137+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an API test with multi subtype returns \"OK - Returns the created test details.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:18:11.906Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "variables": [] + }, + "message": "", + "name": "Test-Edit_a_Mobile_test_returns_OK_response-1733743091", + "options": { + "device_ids": [ + "synthetics:mobile:device:iphone_15_ios_17" + ], + "mobileApplication": { + "applicationId": "ab0e0aed-536d-411a-9a99-5428c27d8f8e", + "referenceId": "6115922a-5f5d-455e-bc7e-7955a57f3815", + "referenceType": "version" + }, + "tick_every": 3600 + }, + "status": "paused", + "steps": [], + "type": "mobile" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/mobile", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"cxt-jqd-x42\",\"name\":\"Test-Edit_a_Mobile_test_returns_OK_response-1733743091\",\"status\":\"paused\",\"type\":\"mobile\",\"tags\":[],\"created_at\":\"2024-12-09T11:18:12.507076+00:00\",\"modified_at\":\"2024-12-09T11:18:12.507076+00:00\",\"config\":{\"variables\":[]},\"message\":\"\",\"options\":{\"device_ids\":[\"synthetics:mobile:device:iphone_15_ios_17\"],\"mobileApplication\":{\"applicationId\":\"ab0e0aed-536d-411a-9a99-5428c27d8f8e\",\"referenceId\":\"6115922a-5f5d-455e-bc7e-7955a57f3815\",\"referenceType\":\"version\"},\"tick_every\":3600},\"locations\":[\"aws:us-west-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881046,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"stepCount\":{\"assertions\":0,\"subtests\":0,\"total\":0}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "variables": [] + }, + "message": "", + "name": "Test-Edit_a_Mobile_test_returns_OK_response-1733743091-updated", + "options": { + "device_ids": [ + "synthetics:mobile:device:iphone_15_ios_17" + ], + "mobileApplication": { + "applicationId": "ab0e0aed-536d-411a-9a99-5428c27d8f8e", + "referenceId": "6115922a-5f5d-455e-bc7e-7955a57f3815", + "referenceType": "version" + }, + "tick_every": 3600 + }, + "status": "paused", + "steps": [], + "type": "mobile" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/synthetics/tests/mobile/cxt-jqd-x42", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"org_id\":321813,\"public_id\":\"cxt-jqd-x42\",\"name\":\"Test-Edit_a_Mobile_test_returns_OK_response-1733743091-updated\",\"status\":\"paused\",\"type\":\"mobile\",\"tags\":[],\"message\":\"\",\"options\":{\"device_ids\":[\"synthetics:mobile:device:iphone_15_ios_17\"],\"mobileApplication\":{\"applicationId\":\"ab0e0aed-536d-411a-9a99-5428c27d8f8e\",\"referenceId\":\"6115922a-5f5d-455e-bc7e-7955a57f3815\",\"referenceType\":\"version\"},\"tick_every\":3600},\"locations\":[\"aws:us-west-2\"],\"created_at\":\"2024-12-09T11:18:12.507076+00:00\",\"modified_at\":\"2024-12-09T11:18:13.194537+00:00\",\"config\":{\"variables\":[]},\"overall_state_modified\":null,\"monitor_id\":159881046,\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"stepCount\":{\"assertions\":0,\"subtests\":0,\"total\":0}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "cxt-jqd-x42" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"cxt-jqd-x42\",\"deleted_at\":\"2024-12-09T11:18:14.310915+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Edit a Mobile test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:18:14.541Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONPath", + "target": { + "elementsOperator": "atLeastOneElementMatches", + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + }, + { + "operator": "md5", + "target": "a", + "type": "bodyHash" + }, + { + "code": "const hello = 'world';", + "type": "javascript" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testeditanapitestreturnsokresponse1733743094" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + }, + "variablesFromScript": "dd.variable.set(\"FOO\", \"foo\")" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Edit_an_API_test_returns_OK_response-1733743094", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Edit_an_API_test_returns_OK_response-1733743094", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"ep3-5gs-3ra\",\"name\":\"Test-Edit_an_API_test_returns_OK_response-1733743094\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"http\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-12-09T11:18:15.055623+00:00\",\"modified_at\":\"2024-12-09T11:18:15.055623+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"timingsScope\":\"withoutDNS\",\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"elementsOperator\":\"atLeastOneElementMatches\",\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"},{\"operator\":\"md5\",\"target\":\"a\",\"type\":\"bodyHash\"},{\"code\":\"const hello = 'world';\",\"type\":\"javascript\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testeditanapitestreturnsokresponse1733743094\"},\"method\":\"GET\",\"persistCookies\":true,\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"variablesFromScript\":\"dd.variable.set(\\\"FOO\\\", \\\"foo\\\")\"},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"httpVersion\":\"http2\",\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Edit_an_API_test_returns_OK_response-1733743094\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881049,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "certificate": { + "cert": { + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testeditanapitestreturnsokresponse1733743094" + }, + "method": "GET", + "timeout": 10, + "url": "https://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_test_payload.json", + "name": "Test-Edit_an_API_test_returns_OK_response-1733743094-updated", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-TestSyntheticsAPITestLifecycle-1623076664", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "status": "live", + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/synthetics/tests/api/ep3-5gs-3ra", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"org_id\":321813,\"public_id\":\"ep3-5gs-3ra\",\"name\":\"Test-Edit_an_API_test_returns_OK_response-1733743094-updated\",\"status\":\"live\",\"type\":\"api\",\"tags\":[\"testing:api\"],\"message\":\"BDD test payload: synthetics_api_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-TestSyntheticsAPITestLifecycle-1623076664\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_at\":\"2024-12-09T11:18:15.055623+00:00\",\"modified_at\":\"2024-12-09T11:18:15.752292+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"certificate\":{\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testeditanapitestreturnsokresponse1733743094\"},\"method\":\"GET\",\"timeout\":10,\"url\":\"https://datadoghq.com\"}},\"overall_state_modified\":null,\"subtype\":\"http\",\"monitor_id\":159881049,\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "ep3-5gs-3ra" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"ep3-5gs-3ra\",\"deleted_at\":\"2024-12-09T11:18:16.764751+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Edit an API test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:18:16.958Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "from_ts": 0, + "public_ids": [], + "to_ts": 0 + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/uptimes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Minimum number of elements in parameter 'public_ids' should be 1\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Fetch uptime for multiple tests returns \"- JSON format is wrong\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-09-11T13:09:28.349Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "from_ts": 1726041488, + "public_ids": [ + "p8m-9gw-nte" + ], + "to_ts": 1726055954 + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/uptimes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "[{\"from_ts\":1726041488,\"to_ts\":1726055954,\"overall\":{\"name\":\"[Synthetics] Synthetics test\",\"preview\":false,\"monitor_type\":\"synthetics alert\",\"monitor_modified\":1726060063,\"errors\":null,\"span_precision\":0,\"history\":[[1726004543,0],[1726053503,1]],\"uptime\":83.05682373046875},\"public_id\":\"p8m-9gw-nte\",\"groups\":[]}]\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Fetch uptime for multiple tests returns \"OK.\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:18:17.360Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "variables": [] + }, + "message": "", + "name": "Test-Get_a_Mobile_test_returns_OK_response-1733743097", + "options": { + "device_ids": [ + "synthetics:mobile:device:iphone_15_ios_17" + ], + "mobileApplication": { + "applicationId": "ab0e0aed-536d-411a-9a99-5428c27d8f8e", + "referenceId": "6115922a-5f5d-455e-bc7e-7955a57f3815", + "referenceType": "version" + }, + "tick_every": 3600 + }, + "status": "paused", + "steps": [], + "type": "mobile" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/mobile", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"n3k-v7t-7xq\",\"name\":\"Test-Get_a_Mobile_test_returns_OK_response-1733743097\",\"status\":\"paused\",\"type\":\"mobile\",\"tags\":[],\"created_at\":\"2024-12-09T11:18:17.937883+00:00\",\"modified_at\":\"2024-12-09T11:18:17.937883+00:00\",\"config\":{\"variables\":[]},\"message\":\"\",\"options\":{\"device_ids\":[\"synthetics:mobile:device:iphone_15_ios_17\"],\"mobileApplication\":{\"applicationId\":\"ab0e0aed-536d-411a-9a99-5428c27d8f8e\",\"referenceId\":\"6115922a-5f5d-455e-bc7e-7955a57f3815\",\"referenceType\":\"version\"},\"tick_every\":3600},\"locations\":[\"aws:us-west-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881055,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"stepCount\":{\"assertions\":0,\"subtests\":0,\"total\":0}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests/mobile/n3k-v7t-7xq", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"n3k-v7t-7xq\",\"name\":\"Test-Get_a_Mobile_test_returns_OK_response-1733743097\",\"status\":\"paused\",\"type\":\"mobile\",\"tags\":[],\"created_at\":\"2024-12-09T11:18:17.937883+00:00\",\"modified_at\":\"2024-12-09T11:18:17.937883+00:00\",\"config\":{\"variables\":[]},\"message\":\"\",\"options\":{\"device_ids\":[\"synthetics:mobile:device:iphone_15_ios_17\"],\"mobileApplication\":{\"applicationId\":\"ab0e0aed-536d-411a-9a99-5428c27d8f8e\",\"referenceId\":\"6115922a-5f5d-455e-bc7e-7955a57f3815\",\"referenceType\":\"version\"},\"tick_every\":3600},\"locations\":[\"aws:us-west-2\"],\"monitor_id\":159881055,\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "n3k-v7t-7xq" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"n3k-v7t-7xq\",\"deleted_at\":\"2024-12-09T11:18:19.255423+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a Mobile test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2022-07-14T19:05:28.528Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests/browser/2yy-sem-mjh/results/5671719892074090418", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":0,\"run_type\":0,\"check_time\":1657823117511,\"check_version\":2,\"result\":{\"runType\":0,\"browserType\":\"edge\",\"eventType\":\"finished\",\"stepDetails\":[{\"browserErrors\":[],\"vitalsMetrics\":[{\"url\":\"https://docs.datadoghq.com/\",\"lcp\":805.599,\"cls\":0.001}],\"skipped\":false,\"description\":\"Navigate to start URL\",\"warnings\":[],\"url\":\"about:blank\",\"snapshotBucketKey\":false,\"value\":\"https://docs.datadoghq.com/\",\"rumContext\":{\"sessionId\":\"058f89c5-df45-4ecd-ada4-3cebd80ded90\",\"applicationId\":\"737d835c-601a-46c1-853a-1af59907cff5\",\"viewId\":\"8eaade39-8793-436f-b7fb-2e74858e0583\"},\"duration\":2254,\"emailMessageBucketKeys\":false,\"allowFailure\":false,\"screenshotBucketKey\":true,\"isCritical\":false,\"type\":\"goToUrlAndMeasureTti\",\"stepId\":-1},{\"browserErrors\":[],\"vitalsMetrics\":[],\"skipped\":false,\"publicId\":\"s9n-dfr-cfw\",\"description\":\"Type text on input \\\"s\\\"\",\"emailMessageBucketKeys\":false,\"url\":\"https://docs.datadoghq.com/\",\"snapshotBucketKey\":false,\"value\":\"api\",\"rumContext\":{\"sessionId\":\"058f89c5-df45-4ecd-ada4-3cebd80ded90\",\"applicationId\":\"737d835c-601a-46c1-853a-1af59907cff5\",\"viewId\":\"8eaade39-8793-436f-b7fb-2e74858e0583\"},\"duration\":814,\"allowFailure\":false,\"screenshotBucketKey\":true,\"isCritical\":true,\"type\":\"typeText\",\"stepId\":11943140},{\"browserErrors\":[],\"vitalsMetrics\":[{\"url\":\"https://docs.datadoghq.com/search/?s=api\",\"lcp\":474.8}],\"skipped\":false,\"publicId\":\"tzz-gum-7rc\",\"description\":\"Press key 'Enter'\",\"emailMessageBucketKeys\":false,\"url\":\"https://docs.datadoghq.com/\",\"snapshotBucketKey\":false,\"value\":\"Enter\",\"rumContext\":{\"sessionId\":\"058f89c5-df45-4ecd-ada4-3cebd80ded90\",\"applicationId\":\"737d835c-601a-46c1-853a-1af59907cff5\",\"viewId\":\"2d5db8da-8605-4ca8-b001-c53b418f4cf0\"},\"duration\":1973,\"allowFailure\":false,\"screenshotBucketKey\":true,\"isCritical\":true,\"type\":\"pressKey\",\"stepId\":11943141},{\"browserErrors\":[],\"vitalsMetrics\":[{\"url\":\"https://docs.datadoghq.com/api/latest/scopes/\",\"lcp\":434.4,\"cls\":0.001}],\"skipped\":false,\"publicId\":\"waa-yji-ffq\",\"description\":\"Click on link \\\"API\\\"\",\"emailMessageBucketKeys\":false,\"url\":\"https://docs.datadoghq.com/search/?s=api\",\"snapshotBucketKey\":false,\"rumContext\":{\"sessionId\":\"058f89c5-df45-4ecd-ada4-3cebd80ded90\",\"applicationId\":\"737d835c-601a-46c1-853a-1af59907cff5\",\"viewId\":\"18bd7286-d1a6-4218-896b-33c9af642aa9\"},\"duration\":2090,\"allowFailure\":false,\"screenshotBucketKey\":true,\"isCritical\":true,\"type\":\"click\",\"stepId\":11943142}],\"browserVersion\":\"101.0.1210.32\",\"mainDC\":\"us1.prod\",\"timeToInteractive\":1596.800000011921,\"subtype\":null,\"device\":{\"name\":\"Laptop Large\",\"height\":1100,\"width\":1440,\"userAgent\":\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/101.0.1210.32 DatadogSynthetics\",\"id\":\"edge.laptop_large\",\"isMobile\":false,\"browser\":\"edge\"},\"hasArtifacts\":true,\"passed\":true,\"duration\":7131,\"startUrl\":\"https://docs.datadoghq.com/\"},\"probe_dc\":\"aws:ca-central-1\",\"result_id\":\"5671719892074090418\",\"check\":{\"type\":\"browser\",\"config\":{\"variables\":[],\"setCookie\":\"\",\"request\":{\"url\":\"https://docs.datadoghq.com/\",\"headers\":{},\"method\":\"GET\"},\"assertions\":[],\"configVariables\":[]},\"options\":{\"rumSettings\":{\"isEnabled\":true,\"applicationId\":\"737d835c-601a-46c1-853a-1af59907cff5\",\"clientTokenId\":94668},\"retry\":{\"count\":1,\"interval\":300},\"min_location_failed\":1,\"monitor_options\":{\"include_tags\":true,\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"renotify_interval\":0},\"noScreenshot\":false,\"tick_every\":3600,\"disableCsp\":false,\"disableCors\":false,\"device_ids\":[\"chrome.laptop_large\",\"firefox.laptop_large\",\"edge.laptop_large\"],\"min_failure_duration\":600,\"ignoreServerCertificateError\":false}},\"device_id\":\"edge.laptop_large\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a browser test result returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2022-07-14T18:28:01.484Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests/browser/2yy-sem-mjh/results", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"last_timestamp_fetched\":1652639281000,\"results\":[{\"status\":0,\"check_time\":1657823117511,\"check_version\":2,\"result\":{\"runType\":0,\"tunnel\":false,\"errorMessage\":null,\"timings\":null,\"stepCountTotal\":4,\"stepCountCompleted\":4,\"duration\":7131,\"deviceId\":\"edge.laptop_large\",\"passed\":true,\"device\":{\"name\":\"Laptop Large\",\"height\":1100,\"width\":1440,\"userAgent\":\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/101.0.1210.32 DatadogSynthetics\",\"id\":\"edge.laptop_large\",\"isMobile\":false,\"browser\":\"edge\"},\"errorCount\":0},\"probe_dc\":\"aws:ca-central-1\",\"result_id\":\"5671719892074090418\",\"device_id\":\"edge.laptop_large\"},{\"status\":0,\"check_time\":1657823117502,\"check_version\":2,\"result\":{\"runType\":0,\"tunnel\":false,\"errorMessage\":null,\"timings\":null,\"stepCountTotal\":4,\"stepCountCompleted\":4,\"duration\":4777,\"deviceId\":\"chrome.laptop_large\",\"passed\":true,\"device\":{\"name\":\"Laptop Large\",\"height\":1100,\"width\":1440,\"userAgent\":\"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36 DatadogSynthetics\",\"id\":\"chrome.laptop_large\",\"isMobile\":false,\"browser\":\"chrome\"},\"errorCount\":1},\"probe_dc\":\"aws:ca-central-1\",\"result_id\":\"4818974208458839907\",\"device_id\":\"chrome.laptop_large\"},{\"status\":0,\"check_time\":1657823117502,\"check_version\":2,\"result\":{\"runType\":0,\"tunnel\":false,\"errorMessage\":null,\"timings\":null,\"stepCountTotal\":4,\"stepCountCompleted\":4,\"duration\":5838,\"deviceId\":\"firefox.laptop_large\",\"passed\":true,\"device\":{\"name\":\"Laptop Large\",\"height\":1100,\"width\":1440,\"userAgent\":\"Mozilla/5.0 (X11; Linux x86_64) Gecko/20100101 Firefox/98.0.2 DatadogSynthetics\",\"id\":\"firefox.laptop_large\",\"isMobile\":false,\"browser\":\"firefox\"},\"errorCount\":0},\"probe_dc\":\"aws:ca-central-1\",\"result_id\":\"5020771801584744095\",\"device_id\":\"firefox.laptop_large\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a browser test's latest results summaries returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2022-07-14T18:46:34.950Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests/hwb-332-3xe/results/3420446318379485707", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":0,\"run_type\":0,\"check_time\":1657824307023,\"check_version\":1,\"result\":{\"dnsServer\":\"8.8.4.4\",\"eventType\":\"finished\",\"resolutionAttempts\":[],\"timings\":{\"firstByte\":21.2,\"tcp\":2.4,\"ssl\":18,\"dns\":10.9,\"download\":0.2,\"total\":52.7},\"subtype\":\"http\",\"mainDC\":\"us1.prod\",\"passed\":true,\"resolvedIp\":\"142.250.189.238\",\"runType\":0,\"httpStatusCode\":301,\"assertionResults\":[{\"expected\":\"2000\",\"operator\":\"lessThan\",\"valid\":true,\"actual\":52.7,\"type\":\"responseTime\"},{\"expected\":\"301\",\"operator\":\"is\",\"valid\":true,\"actual\":301,\"type\":\"statusCode\"},{\"actual\":\"text/html; charset=UTF-8\",\"expected\":\"text/html; charset=UTF-8\",\"valid\":true,\"operator\":\"is\",\"property\":\"content-type\",\"type\":\"header\"}],\"responseSize\":220},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3420446318379485707\",\"check\":{\"type\":\"api\",\"config\":{\"request\":{\"url\":\"https://google.com\",\"method\":\"GET\"},\"assertions\":[{\"operator\":\"lessThan\",\"type\":\"responseTime\",\"target\":2000},{\"operator\":\"is\",\"type\":\"statusCode\",\"target\":301},{\"operator\":\"is\",\"property\":\"content-type\",\"type\":\"header\",\"target\":\"text/html; charset=UTF-8\"}]},\"options\":{\"min_location_failed\":1,\"monitor_options\":{\"include_tags\":true,\"notify_no_data\":false,\"notify_audit\":false,\"new_host_delay\":300,\"renotify_interval\":0},\"tick_every\":60,\"monitor_name\":\"Tesst\",\"min_failure_duration\":0,\"httpVersion\":\"http1\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an API test result returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2022-02-10T12:24:18.666Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "lessThan", + "target": 1000, + "type": "responseTime" + } + ], + "request": { + "method": "GET", + "url": "https://app.datadfoghq.com" + } + }, + "locations": [ + "aws:eu-west-3" + ], + "message": "Testing wrong DNS error", + "name": "Test-Get_an_API_test_result_returns_result_with_failure_object-1644495858", + "options": { + "min_failure_duration": 0, + "min_location_failed": 1, + "monitor_options": { + "renotify_interval": 0 + }, + "tick_every": 86400 + }, + "subtype": "http", + "tags": [], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"live\",\"public_id\":\"ive-g7h-dgu\",\"tags\":[],\"org_id\":321813,\"locations\":[\"aws:eu-west-3\"],\"message\":\"Testing wrong DNS error\",\"deleted_at\":null,\"name\":\"Test-Get_an_API_test_result_returns_result_with_failure_object-1644495858\",\"monitor_id\":63812392,\"type\":\"api\",\"created_at\":\"2022-02-10T12:24:19.316262+00:00\",\"modified_at\":\"2022-02-10T12:24:19.316262+00:00\",\"subtype\":\"http\",\"config\":{\"request\":{\"url\":\"https://app.datadfoghq.com\",\"method\":\"GET\"},\"assertions\":[{\"operator\":\"lessThan\",\"type\":\"responseTime\",\"target\":1000}]},\"options\":{\"monitor_options\":{\"notify_audit\":false,\"locked\":false,\"include_tags\":true,\"new_host_delay\":300,\"notify_no_data\":false,\"renotify_interval\":0},\"tick_every\":86400,\"min_failure_duration\":0,\"min_location_failed\":1}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "tests": [ + { + "public_id": "ive-g7h-dgu" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/trigger", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"batch_id\":null,\"results\":[{\"result_id\":\"990211588540730529\",\"public_id\":\"ive-g7h-dgu\",\"location\":32153}],\"triggered_check_ids\":[\"ive-g7h-dgu\"],\"locations\":[{\"display_name\":\"Paris (AWS)\",\"name\":\"aws:eu-west-3\",\"region\":\"Europe\",\"is_active\":true,\"is_public\":true,\"id\":32153}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests/ive-g7h-dgu/results/990211588540730529", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":1,\"run_type\":3,\"check_time\":1644495859933,\"check_version\":1,\"result\":{\"subtype\":\"http\",\"eventType\":\"finished\",\"timings\":{\"total\":45.8,\"dns\":14.5},\"failure\":{\"message\":\"Error during DNS resolution of hostname app.datadfoghq.com (ENOTFOUND).\",\"code\":\"DNS\"},\"mainDC\":\"us1.prod\",\"passed\":false,\"error\":\"Error during DNS resolution (ENOTFOUND).\",\"runType\":3,\"enrichment\":{}},\"probe_dc\":\"aws:eu-west-3\",\"result_id\":\"990211588540730529\",\"check\":{\"type\":\"api\",\"config\":{\"request\":{\"url\":\"https://app.datadfoghq.com\",\"method\":\"GET\"},\"assertions\":[{\"operator\":\"lessThan\",\"type\":\"responseTime\",\"target\":1000}]},\"options\":{\"monitor_options\":{\"notify_audit\":false,\"locked\":false,\"include_tags\":true,\"new_host_delay\":300,\"notify_no_data\":false,\"renotify_interval\":0},\"tick_every\":86400,\"min_failure_duration\":0,\"min_location_failed\":1}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "ive-g7h-dgu" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"deleted_at\":\"2022-02-10T12:24:21.045390+00:00\",\"public_id\":\"ive-g7h-dgu\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an API test result returns result with failure object", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2022-07-14T18:37:24.177Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests/hwb-332-3xe/results", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"last_timestamp_fetched\":1657814887000,\"results\":[{\"status\":0,\"check_time\":1657823827021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.9,\"tcp\":2.2,\"ssl\":16.6,\"dns\":43.6,\"download\":0.2,\"total\":84.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2147451725290613856\"},{\"status\":0,\"check_time\":1657823767022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.1,\"tcp\":2.4,\"ssl\":17.3,\"dns\":2.7,\"download\":0.2,\"total\":43.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2736918053597593363\"},{\"status\":0,\"check_time\":1657823707022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.3,\"tcp\":1.9,\"ssl\":17.6,\"dns\":10.6,\"download\":0.2,\"total\":49.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5899589886945153316\"},{\"status\":0,\"check_time\":1657823647064,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.6,\"tcp\":2,\"ssl\":16.4,\"dns\":10.8,\"download\":0.2,\"total\":52},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3136878677884618026\"},{\"status\":0,\"check_time\":1657823587049,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.3,\"tcp\":2.1,\"ssl\":16.4,\"dns\":2.5,\"download\":0.2,\"total\":41.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7030222077614277750\"},{\"status\":0,\"check_time\":1657823527022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.1,\"tcp\":2.1,\"ssl\":16.6,\"dns\":2.2,\"download\":0.2,\"total\":40.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3940660120779028557\"},{\"status\":0,\"check_time\":1657823467021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.2,\"tcp\":2.3,\"ssl\":16.9,\"dns\":6.7,\"download\":0.2,\"total\":49.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7648732563321764711\"},{\"status\":0,\"check_time\":1657823407027,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.9,\"tcp\":2.4,\"ssl\":17.2,\"dns\":2.8,\"download\":0.2,\"total\":45.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4703460869145734705\"},{\"status\":0,\"check_time\":1657823347028,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.3,\"tcp\":2.5,\"ssl\":17.8,\"dns\":2.8,\"download\":0.2,\"total\":44.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3933274257899992839\"},{\"status\":0,\"check_time\":1657823287024,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20,\"tcp\":2.1,\"ssl\":16.7,\"dns\":4.7,\"download\":0.3,\"total\":43.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7524092567975741345\"},{\"status\":0,\"check_time\":1657823227084,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.7,\"tcp\":2.3,\"ssl\":16.8,\"dns\":10.4,\"download\":0.2,\"total\":49.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2600036611950900880\"},{\"status\":0,\"check_time\":1657823167022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.5,\"tcp\":2.3,\"ssl\":16.2,\"dns\":2.6,\"download\":0.2,\"total\":40.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"335476697967636252\"},{\"status\":0,\"check_time\":1657823107022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.8,\"tcp\":2.1,\"ssl\":16.7,\"dns\":3.4,\"download\":0.2,\"total\":43.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6929008513886756680\"},{\"status\":0,\"check_time\":1657823047054,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.5,\"tcp\":2.3,\"ssl\":16.7,\"dns\":10.3,\"download\":0.2,\"total\":52},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5439559125971658253\"},{\"status\":0,\"check_time\":1657822987022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.9,\"tcp\":2.4,\"ssl\":18.9,\"dns\":3.2,\"download\":0.2,\"total\":45.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"355794928230704983\"},{\"status\":0,\"check_time\":1657822927021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.6,\"tcp\":2.3,\"ssl\":18.6,\"dns\":2.5,\"download\":0.2,\"total\":45.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"643336001610722367\"},{\"status\":0,\"check_time\":1657822867020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.2,\"tcp\":2.4,\"ssl\":17.3,\"dns\":18.6,\"download\":0.2,\"total\":58.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"21738872680101064\"},{\"status\":0,\"check_time\":1657822807021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":60.7,\"tcp\":2.2,\"ssl\":16.7,\"dns\":2.6,\"download\":0.2,\"total\":82.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6856078697840735389\"},{\"status\":0,\"check_time\":1657822747027,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.7,\"tcp\":2,\"ssl\":17.3,\"dns\":2.6,\"download\":0.3,\"total\":41.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4075204224785704431\"},{\"status\":0,\"check_time\":1657822687021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":24.1,\"tcp\":2.1,\"ssl\":16.8,\"dns\":10.1,\"download\":0.2,\"total\":53.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6209783554255170024\"},{\"status\":0,\"check_time\":1657822627040,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.2,\"tcp\":2.1,\"ssl\":16.7,\"dns\":2.6,\"download\":0.2,\"total\":41.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6903629827895866973\"},{\"status\":0,\"check_time\":1657822567021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.8,\"tcp\":2,\"ssl\":16.3,\"dns\":2.6,\"download\":0.2,\"total\":40.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2924796953366770835\"},{\"status\":0,\"check_time\":1657822507022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.1,\"tcp\":2.1,\"ssl\":16.8,\"dns\":19.7,\"download\":0.2,\"total\":57.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6379325368393251179\"},{\"status\":0,\"check_time\":1657822447020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.2,\"tcp\":2.2,\"ssl\":16.8,\"dns\":10.1,\"download\":0.2,\"total\":49.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2686055343750621487\"},{\"status\":0,\"check_time\":1657822387021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.2,\"tcp\":2,\"ssl\":17.4,\"dns\":2.5,\"download\":0.2,\"total\":44.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5543182747742243143\"},{\"status\":0,\"check_time\":1657822327021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20,\"tcp\":2.1,\"ssl\":17.6,\"dns\":18.2,\"download\":0.2,\"total\":58.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2269636868419356372\"},{\"status\":0,\"check_time\":1657822267022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.5,\"tcp\":2.1,\"ssl\":16.7,\"dns\":42.7,\"download\":0.2,\"total\":83.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5469474174303798711\"},{\"status\":0,\"check_time\":1657822207020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.3,\"tcp\":2.1,\"ssl\":17.7,\"dns\":10.2,\"download\":0.2,\"total\":49.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4586780187835008147\"},{\"status\":0,\"check_time\":1657822147036,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.5,\"tcp\":2.1,\"ssl\":17.5,\"dns\":11.4,\"download\":0.2,\"total\":51.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6258993996901260844\"},{\"status\":0,\"check_time\":1657822087023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21,\"tcp\":2.7,\"ssl\":17.3,\"dns\":2.8,\"download\":0.2,\"total\":44},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3646950137218922815\"},{\"status\":0,\"check_time\":1657822027020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.8,\"tcp\":2.5,\"ssl\":17.2,\"dns\":2.7,\"download\":0.2,\"total\":45.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4923985243964600124\"},{\"status\":0,\"check_time\":1657821967022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.9,\"tcp\":2.4,\"ssl\":17.5,\"dns\":2.8,\"download\":0.2,\"total\":44.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3453405071321888013\"},{\"status\":0,\"check_time\":1657821907027,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.5,\"tcp\":2.5,\"ssl\":19.1,\"dns\":10.5,\"download\":0.3,\"total\":53.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4860780408851125674\"},{\"status\":0,\"check_time\":1657821847023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":18.4,\"tcp\":2.3,\"ssl\":18.1,\"dns\":17.8,\"download\":0.2,\"total\":56.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3538453859314235769\"},{\"status\":0,\"check_time\":1657821787026,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.5,\"tcp\":2.4,\"ssl\":16.9,\"dns\":43.8,\"download\":0.4,\"total\":85},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5338646328588574108\"},{\"status\":0,\"check_time\":1657821727021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.8,\"tcp\":2.4,\"ssl\":18.4,\"dns\":19.9,\"download\":0.2,\"total\":62.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6815265324582998383\"},{\"status\":0,\"check_time\":1657821667021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.4,\"tcp\":2.5,\"ssl\":17.7,\"dns\":2.5,\"download\":0.2,\"total\":44.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2206194445304856139\"},{\"status\":0,\"check_time\":1657821607022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20,\"tcp\":2.2,\"ssl\":17.6,\"dns\":43.6,\"download\":0.2,\"total\":83.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3007569586343396469\"},{\"status\":0,\"check_time\":1657821547022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.3,\"tcp\":2.3,\"ssl\":17.5,\"dns\":10.1,\"download\":0.2,\"total\":52.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4061663753893569371\"},{\"status\":0,\"check_time\":1657821487027,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.9,\"tcp\":2,\"ssl\":17,\"dns\":2.3,\"download\":0.2,\"total\":42.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8612160026496241996\"},{\"status\":0,\"check_time\":1657821427048,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.3,\"tcp\":2.4,\"ssl\":18.7,\"dns\":11.2,\"download\":0.2,\"total\":53.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6313951986856470204\"},{\"status\":0,\"check_time\":1657821367042,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.1,\"tcp\":2.4,\"ssl\":17.7,\"dns\":2.9,\"download\":0.2,\"total\":44.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1601574064815468673\"},{\"status\":0,\"check_time\":1657821307022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.4,\"tcp\":1.9,\"ssl\":17.4,\"dns\":2.4,\"download\":0.2,\"total\":43.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2560914233719846030\"},{\"status\":0,\"check_time\":1657821247025,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.1,\"tcp\":2.5,\"ssl\":17.9,\"dns\":20.4,\"download\":0.3,\"total\":62.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7403136938724560421\"},{\"status\":0,\"check_time\":1657821187028,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.3,\"tcp\":2.1,\"ssl\":17.5,\"dns\":10.1,\"download\":0.2,\"total\":50.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1481356933037875147\"},{\"status\":0,\"check_time\":1657821127056,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.9,\"tcp\":2,\"ssl\":17.6,\"dns\":2.9,\"download\":0.2,\"total\":43.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5003900951412223560\"},{\"status\":0,\"check_time\":1657821067075,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.6,\"tcp\":2.4,\"ssl\":18.2,\"dns\":3,\"download\":0.2,\"total\":43.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"866067104085006359\"},{\"status\":0,\"check_time\":1657821007044,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.7,\"tcp\":2,\"ssl\":17.4,\"dns\":2.5,\"download\":0.2,\"total\":43.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"9031070472021706974\"},{\"status\":0,\"check_time\":1657820947022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.9,\"tcp\":2.5,\"ssl\":17.5,\"dns\":20.1,\"download\":0.2,\"total\":60.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7243890839725314447\"},{\"status\":0,\"check_time\":1657820887021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.9,\"tcp\":2.1,\"ssl\":17.4,\"dns\":2.3,\"download\":0.2,\"total\":42.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6316459410374609034\"},{\"status\":0,\"check_time\":1657820827087,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.6,\"tcp\":2.1,\"ssl\":17,\"dns\":2.3,\"download\":0.2,\"total\":41.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2391163560644233898\"},{\"status\":0,\"check_time\":1657820767025,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.4,\"tcp\":2.4,\"ssl\":17.1,\"dns\":2.6,\"download\":0.2,\"total\":42.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2704426115135797654\"},{\"status\":0,\"check_time\":1657820707022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.8,\"tcp\":2.2,\"ssl\":16.9,\"dns\":2.6,\"download\":0.2,\"total\":43.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6468922312261958149\"},{\"status\":0,\"check_time\":1657820647028,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.3,\"tcp\":2.4,\"ssl\":18,\"dns\":2.7,\"download\":0.2,\"total\":43.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5978059985719800109\"},{\"status\":0,\"check_time\":1657820587020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.4,\"tcp\":2.1,\"ssl\":17.3,\"dns\":9.9,\"download\":0.2,\"total\":48.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5475549957159652443\"},{\"status\":0,\"check_time\":1657820527023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.5,\"tcp\":2.1,\"ssl\":16.8,\"dns\":43.5,\"download\":0.3,\"total\":83.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5764338012453727680\"},{\"status\":0,\"check_time\":1657820467022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.3,\"tcp\":2.4,\"ssl\":17.9,\"dns\":10.2,\"download\":0.2,\"total\":50},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5851746037187590562\"},{\"status\":0,\"check_time\":1657820407027,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.3,\"tcp\":2.4,\"ssl\":16.1,\"dns\":2.5,\"download\":0.2,\"total\":42.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8566665391922084374\"},{\"status\":0,\"check_time\":1657820347025,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.3,\"tcp\":2.2,\"ssl\":17.5,\"dns\":11.5,\"download\":0.2,\"total\":51.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7775361401432180009\"},{\"status\":0,\"check_time\":1657820287024,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.4,\"tcp\":2.1,\"ssl\":16.9,\"dns\":2.7,\"download\":0.3,\"total\":43.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5468206518334142168\"},{\"status\":0,\"check_time\":1657820227029,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.6,\"tcp\":2.6,\"ssl\":18.3,\"dns\":5.7,\"download\":0.3,\"total\":49.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4230011094833517307\"},{\"status\":0,\"check_time\":1657820167023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.1,\"tcp\":2.1,\"ssl\":17.9,\"dns\":2.4,\"download\":0.3,\"total\":41.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7951105577637093894\"},{\"status\":0,\"check_time\":1657820107050,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.2,\"tcp\":2.4,\"ssl\":17.8,\"dns\":10,\"download\":0.2,\"total\":51.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5868124116451126981\"},{\"status\":0,\"check_time\":1657820047021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.8,\"tcp\":2.4,\"ssl\":16.9,\"dns\":2.6,\"download\":0.3,\"total\":43},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5677724996851842329\"},{\"status\":0,\"check_time\":1657819987022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.8,\"tcp\":2.5,\"ssl\":17.5,\"dns\":11.4,\"download\":0.2,\"total\":52.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2850933094908220447\"},{\"status\":0,\"check_time\":1657819927023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.5,\"tcp\":2.3,\"ssl\":17.6,\"dns\":2.6,\"download\":0.2,\"total\":43.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6454176558299049885\"},{\"status\":0,\"check_time\":1657819867020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19,\"tcp\":2.4,\"ssl\":18.1,\"dns\":10.4,\"download\":0.2,\"total\":50.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6009668996360218693\"},{\"status\":0,\"check_time\":1657819807023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.5,\"tcp\":2.4,\"ssl\":18.3,\"dns\":11.5,\"download\":0.2,\"total\":51.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6415494266530489047\"},{\"status\":0,\"check_time\":1657819747020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.3,\"tcp\":2.2,\"ssl\":18,\"dns\":2.6,\"download\":0.2,\"total\":44.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5864798097247325195\"},{\"status\":0,\"check_time\":1657819687022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.3,\"tcp\":2.2,\"ssl\":17.5,\"dns\":2.3,\"download\":0.2,\"total\":42.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"509181295089261130\"},{\"status\":0,\"check_time\":1657819627046,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.4,\"tcp\":2.4,\"ssl\":17.2,\"dns\":10.2,\"download\":0.2,\"total\":51.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1667150563071868315\"},{\"status\":0,\"check_time\":1657819567038,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.4,\"tcp\":2.3,\"ssl\":16.5,\"dns\":2.7,\"download\":0.2,\"total\":42.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"174495478946441012\"},{\"status\":0,\"check_time\":1657819507026,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.1,\"tcp\":2.1,\"ssl\":16.7,\"dns\":2.3,\"download\":0.2,\"total\":40.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4888866800783420329\"},{\"status\":0,\"check_time\":1657819447024,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.1,\"tcp\":2.4,\"ssl\":16.9,\"dns\":2.7,\"download\":0.2,\"total\":43.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6898902814159630987\"},{\"status\":0,\"check_time\":1657819387024,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.4,\"tcp\":2.4,\"ssl\":17.1,\"dns\":3.1,\"download\":0.2,\"total\":43.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5365518645050836616\"},{\"status\":0,\"check_time\":1657819327029,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.4,\"tcp\":2,\"ssl\":17.2,\"dns\":2.3,\"download\":0.2,\"total\":42.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3881839125364233987\"},{\"status\":0,\"check_time\":1657819267021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.7,\"tcp\":2.2,\"ssl\":15.8,\"dns\":17.9,\"download\":0.2,\"total\":57.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"9171121047299316715\"},{\"status\":0,\"check_time\":1657819207031,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.9,\"tcp\":2.2,\"ssl\":17.5,\"dns\":6.2,\"download\":0.3,\"total\":48.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6024257274088881438\"},{\"status\":0,\"check_time\":1657819147030,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.5,\"tcp\":2.3,\"ssl\":17.5,\"dns\":18,\"download\":0.2,\"total\":59.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7617748266279263162\"},{\"status\":0,\"check_time\":1657819087022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.3,\"tcp\":2.4,\"ssl\":18.5,\"dns\":3.2,\"download\":0.3,\"total\":45.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1919574935668889909\"},{\"status\":0,\"check_time\":1657819027023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.5,\"tcp\":2.4,\"ssl\":17.1,\"dns\":20.1,\"download\":0.2,\"total\":61.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5509798148210738487\"},{\"status\":0,\"check_time\":1657818967023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":18.9,\"tcp\":2.1,\"ssl\":16.4,\"dns\":2.6,\"download\":0.2,\"total\":40.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4189407303361700550\"},{\"status\":0,\"check_time\":1657818907025,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.6,\"tcp\":2.1,\"ssl\":16.6,\"dns\":3.5,\"download\":0.3,\"total\":43.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6086825031000349574\"},{\"status\":0,\"check_time\":1657818847022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.6,\"tcp\":2.2,\"ssl\":16.7,\"dns\":3.4,\"download\":0.2,\"total\":44.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8711840686840939707\"},{\"status\":0,\"check_time\":1657818787026,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.7,\"tcp\":2.4,\"ssl\":17.7,\"dns\":2.9,\"download\":0.2,\"total\":45.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7801820812346816155\"},{\"status\":0,\"check_time\":1657818727063,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.3,\"tcp\":2.3,\"ssl\":17.5,\"dns\":18.5,\"download\":0.2,\"total\":58.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1716152521360265500\"},{\"status\":0,\"check_time\":1657818667021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.5,\"tcp\":2.3,\"ssl\":23,\"dns\":17.4,\"download\":0.2,\"total\":63.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8877612450790845578\"},{\"status\":0,\"check_time\":1657818607024,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":18.8,\"tcp\":2.2,\"ssl\":17.7,\"dns\":17.3,\"download\":0.3,\"total\":56.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7357117475121264950\"},{\"status\":0,\"check_time\":1657818547021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.9,\"tcp\":2.3,\"ssl\":16.1,\"dns\":2.5,\"download\":0.2,\"total\":42},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7178414616121476040\"},{\"status\":0,\"check_time\":1657818487020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.9,\"tcp\":2.5,\"ssl\":17,\"dns\":43.9,\"download\":0.2,\"total\":85.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1406060691842611491\"},{\"status\":0,\"check_time\":1657818427021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.7,\"tcp\":2.3,\"ssl\":17.6,\"dns\":10.3,\"download\":0.2,\"total\":51.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2264363337220538735\"},{\"status\":0,\"check_time\":1657818367021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21,\"tcp\":2.4,\"ssl\":17.2,\"dns\":7.4,\"download\":0.2,\"total\":48.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2815123377588061307\"},{\"status\":0,\"check_time\":1657818307021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":26.8,\"tcp\":2,\"ssl\":16.8,\"dns\":10.5,\"download\":0.3,\"total\":56.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7281507116475070141\"},{\"status\":0,\"check_time\":1657818247022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.8,\"tcp\":2.2,\"ssl\":16.9,\"dns\":3.2,\"download\":0.2,\"total\":44.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3326299500350925576\"},{\"status\":0,\"check_time\":1657818187025,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.2,\"tcp\":2.5,\"ssl\":17.2,\"dns\":10.2,\"download\":0.2,\"total\":51.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5706412366415447498\"},{\"status\":0,\"check_time\":1657818127026,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.1,\"tcp\":2.6,\"ssl\":17.1,\"dns\":42.8,\"download\":0.1,\"total\":83.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6832957454398735582\"},{\"status\":0,\"check_time\":1657818067029,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.4,\"tcp\":2.1,\"ssl\":16.8,\"dns\":11,\"download\":0.2,\"total\":49.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"505332710896558965\"},{\"status\":0,\"check_time\":1657818007022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.9,\"tcp\":2.4,\"ssl\":18.7,\"dns\":2.4,\"download\":0.2,\"total\":43.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3717359232452441539\"},{\"status\":0,\"check_time\":1657817947041,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":19.2,\"tcp\":2.5,\"ssl\":16.5,\"dns\":2.7,\"download\":0.2,\"total\":41.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6059009955560454402\"},{\"status\":0,\"check_time\":1657817887023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.3,\"tcp\":2.2,\"ssl\":16.8,\"dns\":10.8,\"download\":0.3,\"total\":50.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4097087532848539935\"},{\"status\":0,\"check_time\":1657817827024,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22,\"tcp\":2.6,\"ssl\":17,\"dns\":2.5,\"download\":0.2,\"total\":44.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5570140122178196695\"},{\"status\":0,\"check_time\":1657817767024,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.2,\"tcp\":2.6,\"ssl\":16.5,\"dns\":42.6,\"download\":0.2,\"total\":82.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8807839761137175209\"},{\"status\":0,\"check_time\":1657817707021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":21.5,\"tcp\":2.3,\"ssl\":16.9,\"dns\":2.8,\"download\":0.2,\"total\":43.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4598135831107636130\"},{\"status\":0,\"check_time\":1657817647049,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":20.5,\"tcp\":2.2,\"ssl\":16.6,\"dns\":2.4,\"download\":0.2,\"total\":41.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8503974215646285521\"},{\"status\":0,\"check_time\":1657817587023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.1,\"tcp\":2.1,\"ssl\":16.6,\"dns\":2.5,\"download\":0.2,\"total\":44.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4810581563399265961\"},{\"status\":0,\"check_time\":1657817527031,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.4,\"tcp\":2.3,\"ssl\":16.3,\"dns\":9.9,\"download\":0.2,\"total\":51.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8662615886231808192\"},{\"status\":0,\"check_time\":1657817467033,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.7,\"tcp\":2.2,\"ssl\":16.8,\"dns\":10.1,\"download\":0.2,\"total\":53},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3787435357402421374\"},{\"status\":0,\"check_time\":1657817407156,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.6,\"tcp\":2,\"ssl\":17.4,\"dns\":2.8,\"download\":0.3,\"total\":46.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8224869029160376969\"},{\"status\":0,\"check_time\":1657817347023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.8,\"tcp\":2.4,\"ssl\":17,\"dns\":10.4,\"download\":0.2,\"total\":53.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4856507720487285799\"},{\"status\":0,\"check_time\":1657817287025,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.5,\"tcp\":2.8,\"ssl\":16.2,\"dns\":3.8,\"download\":0.2,\"total\":46.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1336679613266057038\"},{\"status\":0,\"check_time\":1657817227021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.6,\"tcp\":2.5,\"ssl\":17,\"dns\":19.9,\"download\":0.2,\"total\":62.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2161996301298808434\"},{\"status\":0,\"check_time\":1657817167022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.5,\"tcp\":2.6,\"ssl\":17,\"dns\":20.3,\"download\":0.3,\"total\":63.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6156028875392528350\"},{\"status\":0,\"check_time\":1657817107024,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.3,\"tcp\":2,\"ssl\":17.5,\"dns\":9.9,\"download\":0.2,\"total\":51.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4159341805401327590\"},{\"status\":0,\"check_time\":1657817047027,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.9,\"tcp\":2.1,\"ssl\":16.5,\"dns\":9.9,\"download\":0.2,\"total\":52.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6334755055293095810\"},{\"status\":0,\"check_time\":1657816987021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.6,\"tcp\":2.1,\"ssl\":16.4,\"dns\":2.2,\"download\":0.3,\"total\":44.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2680156533562131601\"},{\"status\":0,\"check_time\":1657816927032,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":24.2,\"tcp\":2.5,\"ssl\":16.9,\"dns\":2.8,\"download\":0.2,\"total\":46.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"806227860631968517\"},{\"status\":0,\"check_time\":1657816867022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23,\"tcp\":2.3,\"ssl\":18,\"dns\":10.4,\"download\":0.2,\"total\":53.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6225023771213676781\"},{\"status\":0,\"check_time\":1657816807022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.2,\"tcp\":2.4,\"ssl\":16.8,\"dns\":2.5,\"download\":0.2,\"total\":45.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4660246960847540887\"},{\"status\":0,\"check_time\":1657816747020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.1,\"tcp\":2.3,\"ssl\":16.4,\"dns\":9.9,\"download\":0.2,\"total\":51.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2730563290445354243\"},{\"status\":0,\"check_time\":1657816687022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":55.9,\"tcp\":2.4,\"ssl\":17.7,\"dns\":10.2,\"download\":0.3,\"total\":86.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3218939371040514195\"},{\"status\":0,\"check_time\":1657816627021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23,\"tcp\":2.3,\"ssl\":16.7,\"dns\":19.8,\"download\":0.2,\"total\":62},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2163128864459720479\"},{\"status\":0,\"check_time\":1657816567022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.3,\"tcp\":2.1,\"ssl\":16.4,\"dns\":11,\"download\":0.2,\"total\":52},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"9077489792251189297\"},{\"status\":0,\"check_time\":1657816507049,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":28.2,\"tcp\":2.3,\"ssl\":16.8,\"dns\":17.8,\"download\":0.2,\"total\":65.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1199544834513107706\"},{\"status\":0,\"check_time\":1657816447024,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.1,\"tcp\":2.4,\"ssl\":17,\"dns\":2.8,\"download\":0.2,\"total\":45.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5475519602143380768\"},{\"status\":0,\"check_time\":1657816387022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.2,\"tcp\":2.3,\"ssl\":17,\"dns\":16.2,\"download\":0.2,\"total\":58.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3322297213026331409\"},{\"status\":0,\"check_time\":1657816327020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23,\"tcp\":2.1,\"ssl\":16.7,\"dns\":2.2,\"download\":0.2,\"total\":44.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4454927692741030599\"},{\"status\":0,\"check_time\":1657816267021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":25,\"tcp\":2.1,\"ssl\":16.7,\"dns\":2.4,\"download\":0.2,\"total\":46.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5371309288811496964\"},{\"status\":0,\"check_time\":1657816207021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23,\"tcp\":2.3,\"ssl\":16.1,\"dns\":2.5,\"download\":0.2,\"total\":44.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4376648719392927012\"},{\"status\":0,\"check_time\":1657816147023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.5,\"tcp\":2.1,\"ssl\":16.5,\"dns\":17.3,\"download\":0.2,\"total\":58.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1127427600058908196\"},{\"status\":0,\"check_time\":1657816087022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.4,\"tcp\":2.4,\"ssl\":17.6,\"dns\":10.3,\"download\":0.2,\"total\":52.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4652809420321214711\"},{\"status\":0,\"check_time\":1657816027021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.8,\"tcp\":2.3,\"ssl\":17.2,\"dns\":3.3,\"download\":0.2,\"total\":46.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"1237780483267320221\"},{\"status\":0,\"check_time\":1657815967054,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.7,\"tcp\":2,\"ssl\":16.6,\"dns\":2.2,\"download\":0.2,\"total\":43.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6674705045105926123\"},{\"status\":0,\"check_time\":1657815907021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.7,\"tcp\":2.1,\"ssl\":17.3,\"dns\":11.3,\"download\":0.2,\"total\":53.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8676336293520815129\"},{\"status\":0,\"check_time\":1657815847020,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.4,\"tcp\":2.4,\"ssl\":17.1,\"dns\":3,\"download\":0.2,\"total\":46.1},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7308292714152753737\"},{\"status\":0,\"check_time\":1657815787019,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.3,\"tcp\":2.1,\"ssl\":17.1,\"dns\":11,\"download\":0.2,\"total\":53.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2100249415294414977\"},{\"status\":0,\"check_time\":1657815727027,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23,\"tcp\":2.6,\"ssl\":18.3,\"dns\":20.1,\"download\":0.3,\"total\":64.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"7662114915452963744\"},{\"status\":0,\"check_time\":1657815667075,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":25.2,\"tcp\":2.5,\"ssl\":17.2,\"dns\":2.5,\"download\":0.3,\"total\":47.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8478669664799606065\"},{\"status\":0,\"check_time\":1657815607023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.6,\"tcp\":2,\"ssl\":17.3,\"dns\":3.8,\"download\":0.2,\"total\":45.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3551473628167424908\"},{\"status\":0,\"check_time\":1657815547028,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.4,\"tcp\":2.5,\"ssl\":17.5,\"dns\":42.7,\"download\":0.3,\"total\":86.4},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"5136372600859209498\"},{\"status\":0,\"check_time\":1657815487021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.6,\"tcp\":2.4,\"ssl\":17.9,\"dns\":18.2,\"download\":0.2,\"total\":61.3},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"2688748499791518542\"},{\"status\":0,\"check_time\":1657815427041,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22,\"tcp\":2,\"ssl\":16.5,\"dns\":9.8,\"download\":0.2,\"total\":50.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4652508950470510558\"},{\"status\":0,\"check_time\":1657815367022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":24.6,\"tcp\":2.4,\"ssl\":16.8,\"dns\":2.5,\"download\":0.2,\"total\":46.5},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6844266696357171543\"},{\"status\":0,\"check_time\":1657815307023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":22.8,\"tcp\":2.5,\"ssl\":17.1,\"dns\":10.4,\"download\":0.2,\"total\":53},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3407365683554059063\"},{\"status\":0,\"check_time\":1657815247037,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.1,\"tcp\":2.4,\"ssl\":17.4,\"dns\":5.7,\"download\":0.2,\"total\":48.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"8145208580637225280\"},{\"status\":0,\"check_time\":1657815187022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.8,\"tcp\":2.5,\"ssl\":17.3,\"dns\":10.1,\"download\":0.2,\"total\":53.9},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"577296595087751042\"},{\"status\":0,\"check_time\":1657815127023,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":37.9,\"tcp\":2,\"ssl\":16.4,\"dns\":2.2,\"download\":0.2,\"total\":58.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"3860557533040322120\"},{\"status\":0,\"check_time\":1657815067025,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.1,\"tcp\":2.5,\"ssl\":16.2,\"dns\":17.8,\"download\":0.2,\"total\":59.8},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"6555482765793314735\"},{\"status\":0,\"check_time\":1657815007022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.1,\"tcp\":2.1,\"ssl\":16.6,\"dns\":2.2,\"download\":0.2,\"total\":44.2},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4608646129128827646\"},{\"status\":0,\"check_time\":1657814947022,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.8,\"tcp\":2.4,\"ssl\":17.7,\"dns\":11.6,\"download\":0.2,\"total\":55.7},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"647018035394677274\"},{\"status\":0,\"check_time\":1657814887021,\"check_version\":1,\"result\":{\"tunnel\":false,\"errorMessage\":null,\"timings\":{\"firstByte\":23.3,\"tcp\":2.1,\"ssl\":17.5,\"dns\":2.5,\"download\":0.2,\"total\":45.6},\"passed\":true,\"runType\":0},\"probe_dc\":\"aws:us-west-1\",\"result_id\":\"4422690840270934969\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an API test's latest results summaries returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2023-08-30T09:42:25.568Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests", + "query": [ + [ + "page_number", + "0" + ], + [ + "page_size", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"tests\":[{\"public_id\":\"888-nvp-kbw\",\"name\":\"tf-TestAccDatadogSyntheticsTestBrowserMML_Basic-local-1689951468-updated\",\"status\":\"paused\",\"type\":\"browser\",\"tags\":[\"foo:bar\",\"baz\"],\"created_at\":\"2023-07-21T14:57:51.688079+00:00\",\"modified_at\":\"2023-07-21T14:58:21.332326+00:00\",\"config\":{\"assertions\":[],\"configVariables\":[],\"request\":{\"method\":\"GET\",\"timeout\":60,\"url\":\"https://www.datadoghq.com\"},\"variables\":[]},\"message\":\"Notify @datadog.user\",\"options\":{\"device_ids\":[\"laptop_large\"],\"min_location_failed\":1,\"tick_every\":900},\"locations\":[\"aws:eu-central-1\"],\"monitor_id\":126283369,\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}},{\"public_id\":\"i9r-v4f-v3u\",\"name\":\"tf-TestAccDatadogSyntheticsBrowserTest_Updated_RumSettings-local-1689951491-updated-rumsettings\",\"status\":\"live\",\"type\":\"browser\",\"tags\":[\"foo:bar\",\"buz\"],\"created_at\":\"2023-07-21T14:58:17.635359+00:00\",\"modified_at\":\"2023-08-28T14:37:49.734465+00:00\",\"config\":{\"assertions\":[],\"configVariables\":[],\"request\":{\"method\":\"GET\",\"headers\":{\"Accept\":\"application/xml\",\"X-Datadog-Trace-ID\":\"987654321\"},\"url\":\"https://docs.datadoghq.com\"},\"setCookie\":\"\",\"variables\":[{\"example\":\"7956\",\"name\":\"MY_PATTERN_VAR\",\"pattern\":\"{{numeric(4)}}\",\"secure\":false,\"type\":\"text\"}]},\"message\":\"Notify @pagerduty\",\"options\":{\"device_ids\":[\"chrome.laptop_large\",\"chrome.tablet\"],\"ignoreServerCertificateError\":false,\"disableCors\":false,\"disableCsp\":false,\"noScreenshot\":false,\"tick_every\":1800,\"min_failure_duration\":10,\"min_location_failed\":1,\"retry\":{\"count\":3,\"interval\":500},\"monitor_options\":{\"renotify_interval\":120},\"ci\":{\"executionRule\":\"skipped\"},\"rumSettings\":{\"isEnabled\":false},\"enableProfiling\":false,\"enableSecurityTesting\":false},\"locations\":[\"aws:eu-central-1\"],\"monitor_id\":126283421,\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}],\"total\":3}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests", + "query": [ + [ + "page_number", + "1" + ], + [ + "page_size", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"tests\":[{\"public_id\":\"p34-3up-y6p\",\"name\":\"Example-Create_an_API_HTTP_test_returns_OK_Returns_the_created_test_details_response_1692944481\",\"status\":\"live\",\"type\":\"api\",\"tags\":[\"testing:api\"],\"created_at\":\"2023-08-25T06:21:21.640836+00:00\",\"modified_at\":\"2023-08-25T06:21:21.640836+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"xPath\":\"target-xpath\",\"targetValue\":\"0\",\"operator\":\"contains\"},\"type\":\"body\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"examplecreateanapihttptestreturnsokreturnsthecreatedtestdetailsresponse1692944481\"},\"method\":\"GET\",\"timeout\":10,\"url\":\"https://datadoghq.com\",\"proxy\":{\"url\":\"https://datadoghq.com\",\"headers\":{}},\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"persistCookies\":true}},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Example-Create_an_API_HTTP_test_returns_OK_Returns_the_created_test_details_response_1692944481\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60,\"httpVersion\":\"http2\"},\"locations\":[\"aws:us-east-2\"],\"subtype\":\"http\",\"monitor_id\":130283608,\"creator\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}],\"total\":3}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the list of all Synthetic tests returns \"OK - Returns the list of all Synthetic tests.\" response with pagination", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:18:19.444Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/settings/default_locations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "[\"aws:af-south-1\",\"aws:ap-east-1\",\"aws:ap-northeast-1\",\"aws:ap-northeast-2\",\"aws:ap-northeast-3\",\"aws:ap-south-1\",\"aws:ap-southeast-1\",\"aws:ap-southeast-2\",\"aws:ap-southeast-3\",\"aws:ca-central-1\",\"aws:eu-central-1\",\"aws:eu-north-1\",\"aws:eu-south-1\",\"aws:eu-west-1\",\"aws:eu-west-2\",\"aws:eu-west-3\",\"aws:me-south-1\",\"aws:sa-east-1\",\"aws:us-east-1\",\"aws:us-east-2\",\"aws:us-west-1\",\"aws:us-west-2\",\"azure:eastus\",\"pl:gcp-integrations-lab-527d63de5764c9fdad65fd1a5ac64a8e\"]\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the list of default locations returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2024-12-09T11:18:19.873Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONPath", + "target": { + "elementsOperator": "atLeastOneElementMatches", + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + }, + { + "operator": "md5", + "target": "a", + "type": "bodyHash" + }, + { + "code": "const hello = 'world';", + "type": "javascript" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testpatchasynthetictestreturnsokresponse1733743099" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + }, + "variablesFromScript": "dd.variable.set(\"FOO\", \"foo\")" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Patch_a_Synthetic_test_returns_OK_response-1733743099", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Patch_a_Synthetic_test_returns_OK_response-1733743099", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"sv2-vrq-d82\",\"name\":\"Test-Patch_a_Synthetic_test_returns_OK_response-1733743099\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"http\",\"tags\":[\"testing:api\"],\"created_at\":\"2024-12-09T11:18:20.560391+00:00\",\"modified_at\":\"2024-12-09T11:18:20.560391+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"timingsScope\":\"withoutDNS\",\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"elementsOperator\":\"atLeastOneElementMatches\",\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"},{\"operator\":\"md5\",\"target\":\"a\",\"type\":\"bodyHash\"},{\"code\":\"const hello = 'world';\",\"type\":\"javascript\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testpatchasynthetictestreturnsokresponse1733743099\"},\"method\":\"GET\",\"persistCookies\":true,\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"variablesFromScript\":\"dd.variable.set(\\\"FOO\\\", \\\"foo\\\")\"},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"httpVersion\":\"http2\",\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Patch_a_Synthetic_test_returns_OK_response-1733743099\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":159881059,\"org_id\":321813,\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "op": "replace", + "path": "/name", + "value": "New test name" + }, + { + "op": "remove", + "path": "/config/assertions/0" + } + ] + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v1/synthetics/tests/sv2-vrq-d82", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"org_id\":321813,\"public_id\":\"sv2-vrq-d82\",\"name\":\"New test name\",\"status\":\"live\",\"type\":\"api\",\"tags\":[\"testing:api\"],\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"httpVersion\":\"http2\",\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Patch_a_Synthetic_test_returns_OK_response-1733743099\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_at\":\"2024-12-09T11:18:20.560391+00:00\",\"modified_at\":\"2024-12-09T11:18:21.260693+00:00\",\"config\":{\"assertions\":[{\"operator\":\"lessThan\",\"target\":2000,\"timingsScope\":\"withoutDNS\",\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"elementsOperator\":\"atLeastOneElementMatches\",\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"},{\"operator\":\"md5\",\"target\":\"a\",\"type\":\"bodyHash\"},{\"code\":\"const hello = 'world';\",\"type\":\"javascript\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"certificate\":{\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testpatchasynthetictestreturnsokresponse1733743099\"},\"method\":\"GET\",\"persistCookies\":true,\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"variablesFromScript\":\"dd.variable.set(\\\"FOO\\\", \\\"foo\\\")\"},\"overall_state_modified\":null,\"subtype\":\"http\",\"monitor_id\":159881059,\"created_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"},\"modified_by\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "sv2-vrq-d82" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"sv2-vrq-d82\",\"deleted_at\":\"2024-12-09T11:18:22.380456+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Patch a Synthetic test returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2025-07-22T14:56:49.377Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/synthetics/tests/search", + "query": [ + [ + "count", + "5" + ], + [ + "facets_only", + "true" + ], + [ + "include_full_config", + "true" + ], + [ + "search_suites", + "true" + ], + [ + "sort", + "name,desc" + ], + [ + "start", + "10" + ], + [ + "text", + "tag:value" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"tests\":[],\"total\":0,\"facets\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search Synthetic tests with boolean query parameters", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2025-07-01T15:52:56.929Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "timingsScope": "withoutDNS", + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONPath", + "target": { + "elementsOperator": "atLeastOneElementMatches", + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesJSONSchema", + "target": { + "jsonSchema": "{\"type\": \"object\", \"properties\":{\"slideshow\":{\"type\":\"object\"}}}", + "metaSchema": "draft-07" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + }, + { + "operator": "md5", + "target": "a", + "type": "bodyHash" + }, + { + "code": "const hello = 'world';", + "type": "javascript" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testtriggersynthetictestsreturnsokresponse1751385176" + }, + "method": "GET", + "persistCookies": true, + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + }, + "variablesFromScript": "dd.variable.set(\"FOO\", \"foo\")" + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Trigger_Synthetic_tests_returns_OK_response-1751385176", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Trigger_Synthetic_tests_returns_OK_response-1751385176", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"public_id\":\"tau-wah-m7h\",\"name\":\"Test-Trigger_Synthetic_tests_returns_OK_response-1751385176\",\"status\":\"live\",\"type\":\"api\",\"subtype\":\"http\",\"tags\":[\"testing:api\"],\"created_at\":\"2025-07-01T15:52:57.254092+00:00\",\"modified_at\":\"2025-07-01T15:52:57.254092+00:00\",\"config\":{\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"target\":\"text/html\",\"type\":\"header\"},{\"operator\":\"lessThan\",\"target\":2000,\"timingsScope\":\"withoutDNS\",\"type\":\"responseTime\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONPath\",\"target\":{\"elementsOperator\":\"atLeastOneElementMatches\",\"jsonPath\":\"topKey\",\"operator\":\"isNot\",\"targetValue\":\"0\"},\"type\":\"body\"},{\"operator\":\"validatesJSONSchema\",\"target\":{\"jsonSchema\":\"{\\\"type\\\": \\\"object\\\", \\\"properties\\\":{\\\"slideshow\\\":{\\\"type\\\":\\\"object\\\"}}}\",\"metaSchema\":\"draft-07\"},\"type\":\"body\"},{\"operator\":\"validatesXPath\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"},\"type\":\"body\"},{\"operator\":\"md5\",\"target\":\"a\",\"type\":\"bodyHash\"},{\"code\":\"const hello = 'world';\",\"type\":\"javascript\"}],\"configVariables\":[{\"example\":\"content-type\",\"name\":\"PROPERTY\",\"pattern\":\"content-type\",\"type\":\"text\"}],\"request\":{\"basicAuth\":{\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"scope\":\"yoyo\",\"tokenApiAuthentication\":\"header\",\"type\":\"oauth-client\"},\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"headers\":{\"unique\":\"testtriggersynthetictestsreturnsokresponse1751385176\"},\"method\":\"GET\",\"persistCookies\":true,\"proxy\":{\"headers\":{},\"url\":\"https://datadoghq.com\"},\"timeout\":10,\"url\":\"https://datadoghq.com\"},\"variablesFromScript\":\"dd.variable.set(\\\"FOO\\\", \\\"foo\\\")\"},\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"options\":{\"accept_self_signed\":false,\"allow_insecure\":true,\"follow_redirects\":true,\"httpVersion\":\"http2\",\"min_failure_duration\":10,\"min_location_failed\":1,\"monitor_name\":\"Test-Trigger_Synthetic_tests_returns_OK_response-1751385176\",\"monitor_priority\":5,\"retry\":{\"count\":3,\"interval\":10},\"tick_every\":60},\"locations\":[\"aws:us-east-2\"],\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},\"deleted_at\":null,\"monitor_id\":176652841,\"org_id\":321813,\"modified_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "tests": [ + { + "public_id": "tau-wah-m7h" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/trigger", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"triggered_check_ids\":[\"tau-wah-m7h\"],\"results\":[{\"public_id\":\"tau-wah-m7h\",\"location\":30005,\"result_id\":\"6667089110128797476\"}],\"locations\":[{\"id\":30005,\"name\":\"aws:us-east-2\",\"display_name\":\"Ohio (AWS)\",\"region\":\"Americas\",\"is_active\":true,\"is_public\":true,\"metadata\":null}],\"batch_id\":null}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "tau-wah-m7h" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"public_id\":\"tau-wah-m7h\",\"deleted_at\":\"2025-07-01T15:52:58.035839+00:00\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Trigger Synthetic tests returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Synthetics", + "frozen_at": "2023-01-11T22:27:12.022Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "config": { + "assertions": [ + { + "operator": "is", + "property": "{{ PROPERTY }}", + "target": "text/html", + "type": "header" + }, + { + "operator": "lessThan", + "target": 2000, + "type": "responseTime" + }, + { + "operator": "validatesJSONPath", + "target": { + "jsonPath": "topKey", + "operator": "isNot", + "targetValue": "0" + }, + "type": "body" + }, + { + "operator": "validatesXPath", + "target": { + "operator": "contains", + "targetValue": "0", + "xPath": "target-xpath" + }, + "type": "body" + } + ], + "configVariables": [ + { + "example": "content-type", + "name": "PROPERTY", + "pattern": "content-type", + "type": "text" + } + ], + "request": { + "basicAuth": { + "accessTokenUrl": "https://datadog-token.com", + "audience": "audience", + "clientId": "client-id", + "clientSecret": "client-secret", + "resource": "resource", + "scope": "yoyo", + "tokenApiAuthentication": "header", + "type": "oauth-client" + }, + "certificate": { + "cert": { + "content": "cert-content", + "filename": "cert-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + }, + "key": { + "content": "key-content", + "filename": "key-filename", + "updatedAt": "2020-10-16T09:23:24.857Z" + } + }, + "headers": { + "unique": "testtriggersyntheticstestsreturnsokresponse1673476032" + }, + "method": "GET", + "proxy": { + "headers": {}, + "url": "https://datadoghq.com" + }, + "timeout": 10, + "url": "https://datadoghq.com" + } + }, + "locations": [ + "aws:us-east-2" + ], + "message": "BDD test payload: synthetics_api_http_test_payload.json", + "name": "Test-Trigger_Synthetics_tests_returns_OK_response-1673476032", + "options": { + "accept_self_signed": false, + "allow_insecure": true, + "follow_redirects": true, + "httpVersion": "http2", + "min_failure_duration": 10, + "min_location_failed": 1, + "monitor_name": "Test-Trigger_Synthetics_tests_returns_OK_response-1673476032", + "monitor_priority": 5, + "retry": { + "count": 3, + "interval": 10 + }, + "tick_every": 60 + }, + "subtype": "http", + "tags": [ + "testing:api" + ], + "type": "api" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/api", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\":\"live\",\"public_id\":\"rsj-jug-mjq\",\"tags\":[\"testing:api\"],\"org_id\":321813,\"locations\":[\"aws:us-east-2\"],\"message\":\"BDD test payload: synthetics_api_http_test_payload.json\",\"deleted_at\":null,\"name\":\"Test-Trigger_Synthetics_tests_returns_OK_response-1673476032\",\"monitor_id\":107572465,\"type\":\"api\",\"created_at\":\"2023-01-11T22:27:12.286447+00:00\",\"modified_at\":\"2023-01-11T22:27:12.286447+00:00\",\"subtype\":\"http\",\"config\":{\"request\":{\"certificate\":{\"cert\":{\"filename\":\"cert-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"},\"key\":{\"filename\":\"key-filename\",\"updatedAt\":\"2020-10-16T09:23:24.857Z\"}},\"url\":\"https://datadoghq.com\",\"basicAuth\":{\"clientSecret\":\"client-secret\",\"resource\":\"resource\",\"accessTokenUrl\":\"https://datadog-token.com\",\"audience\":\"audience\",\"clientId\":\"client-id\",\"scope\":\"yoyo\",\"type\":\"oauth-client\",\"tokenApiAuthentication\":\"header\"},\"headers\":{\"unique\":\"testtriggersyntheticstestsreturnsokresponse1673476032\"},\"proxy\":{\"url\":\"https://datadoghq.com\",\"headers\":{}},\"timeout\":10,\"method\":\"GET\"},\"assertions\":[{\"operator\":\"is\",\"property\":\"{{ PROPERTY }}\",\"type\":\"header\",\"target\":\"text/html\"},{\"operator\":\"lessThan\",\"type\":\"responseTime\",\"target\":2000},{\"operator\":\"validatesJSONPath\",\"type\":\"body\",\"target\":{\"operator\":\"isNot\",\"targetValue\":\"0\",\"jsonPath\":\"topKey\"}},{\"operator\":\"validatesXPath\",\"type\":\"body\",\"target\":{\"operator\":\"contains\",\"targetValue\":\"0\",\"xPath\":\"target-xpath\"}}],\"configVariables\":[{\"pattern\":\"content-type\",\"type\":\"text\",\"example\":\"content-type\",\"name\":\"PROPERTY\"}]},\"options\":{\"accept_self_signed\":false,\"retry\":{\"count\":3,\"interval\":10},\"min_location_failed\":1,\"allow_insecure\":true,\"follow_redirects\":true,\"min_failure_duration\":10,\"monitor_priority\":5,\"monitor_name\":\"Test-Trigger_Synthetics_tests_returns_OK_response-1673476032\",\"tick_every\":60,\"httpVersion\":\"http2\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "tests": [ + { + "public_id": "rsj-jug-mjq" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/trigger", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"batch_id\":null,\"results\":[{\"result_id\":\"8571118738293232737\",\"public_id\":\"rsj-jug-mjq\",\"location\":30005}],\"triggered_check_ids\":[\"rsj-jug-mjq\"],\"locations\":[{\"display_name\":\"Ohio (AWS)\",\"name\":\"aws:us-east-2\",\"region\":\"Americas\",\"is_active\":true,\"is_public\":true,\"id\":30005,\"metadata\":null}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "public_ids": [ + "rsj-jug-mjq" + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/synthetics/tests/delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_tests\":[{\"deleted_at\":\"2023-01-11T22:27:12.624532+00:00\",\"public_id\":\"rsj-jug-mjq\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Trigger Synthetics tests returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/usage-metering.json b/test-server-data/v1/usage-metering.json new file mode 100644 index 0000000000..6e8a37ab18 --- /dev/null +++ b/test-server-data/v1/usage-metering.json @@ -0,0 +1,2398 @@ +{ + "feature": "Usage Metering", + "recordings": [ + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:20.681Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/top_avg_metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"The parameter 'month/day' is required\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get all custom metrics by hourly average returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:20.876Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/top_avg_metrics", + "query": [ + [ + "day", + "2022-03-29T00:41:20.876Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"metric_category\":\"custom\",\"metric_name\":\"page.views\",\"max_metric_hour\":11,\"avg_metric_hour\":11},{\"metric_category\":\"custom\",\"metric_name\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1617189622.037749\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633000123\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagconfigurationswithconfiguredfilterreturnsSuccessresponse1648567994\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632849661\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632909874\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633006696\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestUpdateatagconfigurationreturnsOKresponse1648572624\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633007533\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632832883\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"foo\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632851109\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632820425\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"ruby_Create_a_log_based_metric_returns_OK_response_1617976084\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632836431\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632827387\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1640112763\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632846619\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633011091\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Create_a_log_based_metric_returns_OK_response_1637077938\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632844127\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632918172\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagsbymetricnamereturnsSuccessresponse1648571864\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632997303\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633015432\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Create_a_log_based_metric_returns_OK_response_1637078452\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"go.client.test.metric\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Go_TestMetrics_1648512356\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1614896593.355\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632817303\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632826421\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1614072176.745\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632888511\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1613675381.562\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632974958\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632844008\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632986079\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632849879\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632910728\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632328087\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagconfigurationswithconfiguredfilterreturnsSuccessresponse1648571107\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1607014407.161855\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1608595661.620162\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633003782\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632933825\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632921859\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestDeleteatagconfigurationreturnsNoContentresponse1648560475\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Create_a_log_based_metric_returns_OK_response_1637070501\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagsbymetricnamereturnsSuccessresponse1648572328\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632833151\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632839523\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"java.client.test.metric\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632904020\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Python_Create_a_log_based_metric_returns_OK_response_1638987055\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Create_a_log_based_metric_returns_OK_response_1618491718\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1617014547.984513\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Java_Create_a_log_based_metric_returns_OK_response_1618407299\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632913792\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Create_a_log_based_metric_returns_OK_response_1637141184\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1613674902.961\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632842468\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632907313\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagconfigurationswithconfiguredfilterreturnsSuccessresponse1648567875\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632848436\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632848876\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632841151\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestUpdateatagconfigurationreturnsOKresponse1648572582\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagsbymetricnamereturnsSuccessresponse1648572404\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632820224\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632843061\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagconfigurationswithconfiguredfilterreturnsSuccessresponse1648571244\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632919560\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632899187\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633011226\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1648563345\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632928242\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632828986\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1648563421\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1616149774.73\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagconfigurationswithconfiguredfilterreturnsSuccessresponse1648568220\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632848076\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632821487\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagconfigurationswithconfiguredfilterreturnsSuccessresponse1648566682\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Create_a_log_based_metric_returns_OK_response_1637063323\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Create_a_log_based_metric_returns_OK_response_1640112922\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632922194\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Create_a_log_based_metric_returns_OK_response_1618831542\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632908380\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632898971\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632989750\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633004062\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Go_Create_a_log_based_metric_returns_OK_response_1634316108\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632824835\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632839540\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1642756658\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632821189\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632919344\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632903468\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632839741\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632847587\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1617190464.536072\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"TestListtagsbymetricnamereturnsSuccessresponse1648572378\",\"max_metric_hour\":1,\"avg_metric_hour\":1},{\"metric_category\":\"custom\",\"metric_name\":\"java_metricsTests_local_1648524015\",\"max_metric_hour\":1,\"avg_metric_hour\":1}],\"metadata\":{\"pagination\":{\"next_record_id\":null,\"limit\":500,\"total_number_of_records\":null},\"day\":\"2022-03-29T00:00:00+00:00\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all custom metrics by hourly average returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:21.295Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/logs-by-retention", + "query": [ + [ + "end_hr", + "2022-03-27T00:41:21.295Z" + ], + [ + "start_hr", + "2022-03-29T00:41:21.295Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly logs usage by retention returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:21.397Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/logs-by-retention", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:21.397Z" + ], + [ + "start_hr", + "2022-03-27T00:41:21.397Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"retention\":\"15\",\"indexed_events_count\":11325,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T00:00:00+00:00\",\"live_indexed_events_count\":11325},{\"retention\":\"15\",\"indexed_events_count\":11262,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T01:00:00+00:00\",\"live_indexed_events_count\":11262},{\"retention\":\"15\",\"indexed_events_count\":11230,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T02:00:00+00:00\",\"live_indexed_events_count\":11230},{\"retention\":\"15\",\"indexed_events_count\":11237,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T03:00:00+00:00\",\"live_indexed_events_count\":11237},{\"retention\":\"15\",\"indexed_events_count\":11231,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T04:00:00+00:00\",\"live_indexed_events_count\":11231},{\"retention\":\"15\",\"indexed_events_count\":11169,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T05:00:00+00:00\",\"live_indexed_events_count\":11169},{\"retention\":\"15\",\"indexed_events_count\":11225,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T06:00:00+00:00\",\"live_indexed_events_count\":11225},{\"retention\":\"15\",\"indexed_events_count\":11256,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T07:00:00+00:00\",\"live_indexed_events_count\":11256},{\"retention\":\"15\",\"indexed_events_count\":11314,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T08:00:00+00:00\",\"live_indexed_events_count\":11314},{\"retention\":\"15\",\"indexed_events_count\":11257,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T09:00:00+00:00\",\"live_indexed_events_count\":11257},{\"retention\":\"15\",\"indexed_events_count\":11221,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T10:00:00+00:00\",\"live_indexed_events_count\":11221},{\"retention\":\"15\",\"indexed_events_count\":11168,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T11:00:00+00:00\",\"live_indexed_events_count\":11168},{\"retention\":\"15\",\"indexed_events_count\":11314,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T12:00:00+00:00\",\"live_indexed_events_count\":11314},{\"retention\":\"15\",\"indexed_events_count\":11257,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T13:00:00+00:00\",\"live_indexed_events_count\":11257},{\"retention\":\"15\",\"indexed_events_count\":11265,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T14:00:00+00:00\",\"live_indexed_events_count\":11265},{\"retention\":\"15\",\"indexed_events_count\":11232,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T15:00:00+00:00\",\"live_indexed_events_count\":11232},{\"retention\":\"15\",\"indexed_events_count\":11314,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T16:00:00+00:00\",\"live_indexed_events_count\":11314},{\"retention\":\"15\",\"indexed_events_count\":11113,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T17:00:00+00:00\",\"live_indexed_events_count\":11113},{\"retention\":\"15\",\"indexed_events_count\":11285,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T18:00:00+00:00\",\"live_indexed_events_count\":11285},{\"retention\":\"15\",\"indexed_events_count\":11256,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T19:00:00+00:00\",\"live_indexed_events_count\":11256},{\"retention\":\"15\",\"indexed_events_count\":11250,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T20:00:00+00:00\",\"live_indexed_events_count\":11250},{\"retention\":\"15\",\"indexed_events_count\":11257,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T21:00:00+00:00\",\"live_indexed_events_count\":11257},{\"retention\":\"15\",\"indexed_events_count\":11285,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T22:00:00+00:00\",\"live_indexed_events_count\":11285},{\"retention\":\"15\",\"indexed_events_count\":11196,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-27T23:00:00+00:00\",\"live_indexed_events_count\":11196},{\"retention\":\"15\",\"indexed_events_count\":11325,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T00:00:00+00:00\",\"live_indexed_events_count\":11325},{\"retention\":\"15\",\"indexed_events_count\":11202,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T01:00:00+00:00\",\"live_indexed_events_count\":11202},{\"retention\":\"15\",\"indexed_events_count\":11226,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T02:00:00+00:00\",\"live_indexed_events_count\":11226},{\"retention\":\"15\",\"indexed_events_count\":11261,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T03:00:00+00:00\",\"live_indexed_events_count\":11261},{\"retention\":\"15\",\"indexed_events_count\":11319,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T04:00:00+00:00\",\"live_indexed_events_count\":11319},{\"retention\":\"15\",\"indexed_events_count\":11197,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T05:00:00+00:00\",\"live_indexed_events_count\":11197},{\"retention\":\"15\",\"indexed_events_count\":11285,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T06:00:00+00:00\",\"live_indexed_events_count\":11285},{\"retention\":\"15\",\"indexed_events_count\":11256,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T07:00:00+00:00\",\"live_indexed_events_count\":11256},{\"retention\":\"15\",\"indexed_events_count\":11254,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T08:00:00+00:00\",\"live_indexed_events_count\":11254},{\"retention\":\"15\",\"indexed_events_count\":11203,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T09:00:00+00:00\",\"live_indexed_events_count\":11203},{\"retention\":\"15\",\"indexed_events_count\":11172,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T10:00:00+00:00\",\"live_indexed_events_count\":11172},{\"retention\":\"15\",\"indexed_events_count\":11285,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T11:00:00+00:00\",\"live_indexed_events_count\":11285},{\"retention\":\"15\",\"indexed_events_count\":11290,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T12:00:00+00:00\",\"live_indexed_events_count\":11290},{\"retention\":\"15\",\"indexed_events_count\":11257,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T13:00:00+00:00\",\"live_indexed_events_count\":11257},{\"retention\":\"15\",\"indexed_events_count\":11285,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T14:00:00+00:00\",\"live_indexed_events_count\":11285},{\"retention\":\"15\",\"indexed_events_count\":11232,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T15:00:00+00:00\",\"live_indexed_events_count\":11232},{\"retention\":\"15\",\"indexed_events_count\":11266,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T16:00:00+00:00\",\"live_indexed_events_count\":11266},{\"retention\":\"15\",\"indexed_events_count\":11257,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T17:00:00+00:00\",\"live_indexed_events_count\":11257},{\"retention\":\"15\",\"indexed_events_count\":11285,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T18:00:00+00:00\",\"live_indexed_events_count\":11285},{\"retention\":\"15\",\"indexed_events_count\":11172,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T19:00:00+00:00\",\"live_indexed_events_count\":11172},{\"retention\":\"15\",\"indexed_events_count\":11294,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T20:00:00+00:00\",\"live_indexed_events_count\":11294},{\"retention\":\"15\",\"indexed_events_count\":11180,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T21:00:00+00:00\",\"live_indexed_events_count\":11180},{\"retention\":\"15\",\"indexed_events_count\":11197,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T22:00:00+00:00\",\"live_indexed_events_count\":11197},{\"retention\":\"15\",\"indexed_events_count\":11208,\"rehydrated_indexed_events_count\":0,\"hour\":\"2022-03-28T23:00:00+00:00\",\"live_indexed_events_count\":11208}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly logs usage by retention returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-05-23T08:46:26.291Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/hourly-attribution", + "query": [ + [ + "start_hr", + "2022-05-20T08:46:26.291Z" + ], + [ + "usage_type", + "infra_host_usage" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T08:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T00\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T09:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T00\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T10:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T00\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T11:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T00\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T12:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T04\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T13:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T04\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T14:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T04\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T15:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T04\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T16:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T07\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T17:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T07\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T18:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T07\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T19:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T07\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T20:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T10\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T21:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T10\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T22:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T10\",\"usage_type\":\"infra_host_usage\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-20T23:00:00+00:00\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"total_usage_sum\":18,\"updated_at\":\"2022-05-21T10\",\"usage_type\":\"infra_host_usage\"}],\"metadata\":{\"pagination\":{\"next_record_id\":null}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage attribution returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2023-09-25T19:13:30.824Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/ci-app", + "query": [ + [ + "end_hr", + "2023-09-20T19:13:30.824Z" + ], + [ + "start_hr", + "2023-09-22T19:13:30.824Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for CI visibility returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2023-09-25T18:27:41.222Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/ci-app", + "query": [ + [ + "end_hr", + "2023-09-22T18:27:41.222Z" + ], + [ + "start_hr", + "2023-09-20T18:27:41.222Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"hour\":\"2023-09-20T18:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-20T19:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-20T20:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-20T21:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-20T22:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-20T23:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T00:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":4,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T01:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T02:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T03:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T04:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":4,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T05:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T06:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T07:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T08:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T09:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T10:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T11:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T12:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T13:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T14:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T15:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T16:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T17:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T18:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T19:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T20:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T21:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T22:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T23:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T00:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T01:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":4,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T02:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":4,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T03:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T04:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T05:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T06:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T07:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T08:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T09:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T10:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T11:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T12:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T13:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T14:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":2,\"ci_test_indexed_spans\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T15:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T16:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T17:00:00+00:00\",\"region\":\"us\",\"ci_visibility_itr_committers\":null,\"ci_visibility_pipeline_committers\":0,\"ci_visibility_test_committers\":0,\"ci_pipeline_indexed_spans\":null,\"ci_test_indexed_spans\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for CI visibility returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2023-09-20T21:11:12.476Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/cspm", + "query": [ + [ + "start_hr", + "2023-09-17T21:11:12.476Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"hour\":\"2023-09-17T21:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-17T22:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-17T23:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T00:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T01:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T02:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T03:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T04:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T05:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T06:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T07:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T08:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T09:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T10:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T11:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T12:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T13:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T14:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T15:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T16:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T17:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T18:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T19:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-18T20:00:00+00:00\",\"region\":\"us\",\"host_count\":null,\"container_count\":null,\"aas_host_count\":null,\"aws_host_count\":null,\"gcp_host_count\":null,\"azure_host_count\":null,\"compliance_host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for CSM Pro returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-21T12:03:20.978Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/cspm", + "query": [ + [ + "start_hr", + "2022-01-18T12:03:20.978Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T12:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T13:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T14:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T15:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T16:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T17:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T18:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T19:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T20:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T21:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T22:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-18T23:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T00:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T01:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T02:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T03:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T04:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T05:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T06:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T07:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T08:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T09:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T10:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"aas_host_count\":null,\"hour\":\"2022-01-19T11:00:00+00:00\",\"compliance_host_count\":null,\"azure_host_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for CSPM returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T15:43:36.948Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/dbm", + "query": [ + [ + "end_hr", + "2022-03-29T15:43:36.948Z" + ], + [ + "start_hr", + "2022-03-27T15:43:36.948Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"dbm_host_count\":null,\"dbm_queries_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T14:00:00+00:00\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Database Monitoring returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:23.099Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/fargate", + "query": [ + [ + "end_hr", + "2022-03-27T00:41:23.099Z" + ], + [ + "start_hr", + "2022-03-29T00:41:23.099Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Fargate returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:23.206Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/fargate", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:23.206Z" + ], + [ + "start_hr", + "2022-03-27T00:41:23.206Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T00:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T01:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T02:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T03:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T04:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T05:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T06:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T07:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T08:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T09:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T10:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T11:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T12:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T13:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T14:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\",\"avg_tasks_count\":null,\"tasks_count\":null,\"avg_profiled_fargate_tasks\":null}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Fargate returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:27.865Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/iot", + "query": [ + [ + "end_hr", + "2022-01-26T09:34:27.865Z" + ], + [ + "start_hr", + "2022-01-28T09:34:27.865Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for IoT returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:28.357Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/iot", + "query": [ + [ + "end_hr", + "2022-01-28T09:34:28.357Z" + ], + [ + "start_hr", + "2022-01-26T09:34:28.357Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"iot_device_count\":0,\"iot_device_tag\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T08:00:00+00:00\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for IoT returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:23.917Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/aws_lambda", + "query": [ + [ + "end_hr", + "2022-03-27T00:41:23.917Z" + ], + [ + "start_hr", + "2022-03-29T00:41:23.917Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Lambda returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:24.021Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/aws_lambda", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:24.021Z" + ], + [ + "start_hr", + "2022-03-27T00:41:24.021Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T00:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T01:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T02:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T03:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T04:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T05:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T06:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T07:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T08:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T09:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T10:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T11:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T12:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T13:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T14:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\",\"invocations_sum\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"func_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\",\"invocations_sum\":0}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Lambda returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T17:01:53.545Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/logs_by_index", + "query": [ + [ + "end_hr", + "2022-03-27T17:01:53.545Z" + ], + [ + "start_hr", + "2022-03-29T17:01:53.545Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Logs by Index returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T15:43:39.457Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/logs_by_index", + "query": [ + [ + "end_hr", + "2022-03-29T15:43:39.457Z" + ], + [ + "start_hr", + "2022-03-27T15:43:39.457Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"rehydrated_indexed\":0,\"hour\":\"2022-03-27T15:00:00+00:00\",\"event_count\":11232,\"org_id\":321813,\"live_index_indexed\":11232,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-27T16:00:00+00:00\",\"event_count\":11314,\"org_id\":321813,\"live_index_indexed\":11314,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-27T17:00:00+00:00\",\"event_count\":11113,\"org_id\":321813,\"live_index_indexed\":11113,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-27T18:00:00+00:00\",\"event_count\":11285,\"org_id\":321813,\"live_index_indexed\":11285,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-27T19:00:00+00:00\",\"event_count\":11256,\"org_id\":321813,\"live_index_indexed\":11256,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-27T20:00:00+00:00\",\"event_count\":11250,\"org_id\":321813,\"live_index_indexed\":11250,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-27T21:00:00+00:00\",\"event_count\":11257,\"org_id\":321813,\"live_index_indexed\":11257,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-27T22:00:00+00:00\",\"event_count\":11285,\"org_id\":321813,\"live_index_indexed\":11285,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-27T23:00:00+00:00\",\"event_count\":11196,\"org_id\":321813,\"live_index_indexed\":11196,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T00:00:00+00:00\",\"event_count\":11325,\"org_id\":321813,\"live_index_indexed\":11325,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T01:00:00+00:00\",\"event_count\":11202,\"org_id\":321813,\"live_index_indexed\":11202,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T02:00:00+00:00\",\"event_count\":11226,\"org_id\":321813,\"live_index_indexed\":11226,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T03:00:00+00:00\",\"event_count\":11261,\"org_id\":321813,\"live_index_indexed\":11261,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T04:00:00+00:00\",\"event_count\":11319,\"org_id\":321813,\"live_index_indexed\":11319,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T05:00:00+00:00\",\"event_count\":11197,\"org_id\":321813,\"live_index_indexed\":11197,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T06:00:00+00:00\",\"event_count\":11285,\"org_id\":321813,\"live_index_indexed\":11285,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T07:00:00+00:00\",\"event_count\":11256,\"org_id\":321813,\"live_index_indexed\":11256,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T08:00:00+00:00\",\"event_count\":11254,\"org_id\":321813,\"live_index_indexed\":11254,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T09:00:00+00:00\",\"event_count\":11203,\"org_id\":321813,\"live_index_indexed\":11203,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T10:00:00+00:00\",\"event_count\":11172,\"org_id\":321813,\"live_index_indexed\":11172,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T11:00:00+00:00\",\"event_count\":11285,\"org_id\":321813,\"live_index_indexed\":11285,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T12:00:00+00:00\",\"event_count\":11290,\"org_id\":321813,\"live_index_indexed\":11290,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T13:00:00+00:00\",\"event_count\":11257,\"org_id\":321813,\"live_index_indexed\":11257,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T14:00:00+00:00\",\"event_count\":11285,\"org_id\":321813,\"live_index_indexed\":11285,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T15:00:00+00:00\",\"event_count\":11232,\"org_id\":321813,\"live_index_indexed\":11232,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T16:00:00+00:00\",\"event_count\":11266,\"org_id\":321813,\"live_index_indexed\":11266,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T17:00:00+00:00\",\"event_count\":11257,\"org_id\":321813,\"live_index_indexed\":11257,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T18:00:00+00:00\",\"event_count\":11285,\"org_id\":321813,\"live_index_indexed\":11285,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T19:00:00+00:00\",\"event_count\":11172,\"org_id\":321813,\"live_index_indexed\":11172,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T20:00:00+00:00\",\"event_count\":11294,\"org_id\":321813,\"live_index_indexed\":11294,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T21:00:00+00:00\",\"event_count\":11180,\"org_id\":321813,\"live_index_indexed\":11180,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T22:00:00+00:00\",\"event_count\":11197,\"org_id\":321813,\"live_index_indexed\":11197,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-28T23:00:00+00:00\",\"event_count\":11208,\"org_id\":321813,\"live_index_indexed\":11208,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T00:00:00+00:00\",\"event_count\":11305,\"org_id\":321813,\"live_index_indexed\":11305,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T01:00:00+00:00\",\"event_count\":11262,\"org_id\":321813,\"live_index_indexed\":11262,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T02:00:00+00:00\",\"event_count\":11170,\"org_id\":321813,\"live_index_indexed\":11170,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T03:00:00+00:00\",\"event_count\":11113,\"org_id\":321813,\"live_index_indexed\":11113,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T04:00:00+00:00\",\"event_count\":11290,\"org_id\":321813,\"live_index_indexed\":11290,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T05:00:00+00:00\",\"event_count\":11286,\"org_id\":321813,\"live_index_indexed\":11286,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T06:00:00+00:00\",\"event_count\":11285,\"org_id\":321813,\"live_index_indexed\":11285,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T07:00:00+00:00\",\"event_count\":11256,\"org_id\":321813,\"live_index_indexed\":11256,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T08:00:00+00:00\",\"event_count\":11254,\"org_id\":321813,\"live_index_indexed\":11254,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T09:00:00+00:00\",\"event_count\":11193,\"org_id\":321813,\"live_index_indexed\":11193,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T10:00:00+00:00\",\"event_count\":11236,\"org_id\":321813,\"live_index_indexed\":11236,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T11:00:00+00:00\",\"event_count\":11261,\"org_id\":321813,\"live_index_indexed\":11261,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T12:00:00+00:00\",\"event_count\":11314,\"org_id\":321813,\"live_index_indexed\":11314,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T13:00:00+00:00\",\"event_count\":11233,\"org_id\":321813,\"live_index_indexed\":11233,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15},{\"rehydrated_indexed\":0,\"hour\":\"2022-03-29T14:00:00+00:00\",\"event_count\":11225,\"org_id\":321813,\"live_index_indexed\":11225,\"index_name\":\"main\",\"rate_limited\":false,\"filtered\":false,\"index_id\":\"33715\",\"retention\":15}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Logs by Index returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T15:43:39.812Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/logs", + "query": [ + [ + "end_hr", + "2022-03-27T15:43:39.812Z" + ], + [ + "start_hr", + "2022-03-29T15:43:39.812Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Logs returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T15:43:39.992Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/logs", + "query": [ + [ + "end_hr", + "2022-03-29T15:43:39.992Z" + ], + [ + "start_hr", + "2022-03-27T15:43:39.992Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-27T15:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11232,\"logs_live_indexed_count\":11232},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-27T16:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11314,\"logs_live_indexed_count\":11314},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-27T17:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11113,\"logs_live_indexed_count\":11113},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-27T18:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11285,\"logs_live_indexed_count\":11285},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-27T19:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11256,\"logs_live_indexed_count\":11256},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-27T20:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11250,\"logs_live_indexed_count\":11250},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-27T21:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11257,\"logs_live_indexed_count\":11257},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-27T22:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11285,\"logs_live_indexed_count\":11285},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-27T23:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11196,\"logs_live_indexed_count\":11196},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T00:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11325,\"logs_live_indexed_count\":11325},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T01:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11202,\"logs_live_indexed_count\":11202},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T02:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11226,\"logs_live_indexed_count\":11226},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T03:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11261,\"logs_live_indexed_count\":11261},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T04:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11319,\"logs_live_indexed_count\":11319},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T05:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11197,\"logs_live_indexed_count\":11197},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T06:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11285,\"logs_live_indexed_count\":11285},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T07:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11256,\"logs_live_indexed_count\":11256},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T08:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11254,\"logs_live_indexed_count\":11254},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T09:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11203,\"logs_live_indexed_count\":11203},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T10:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11172,\"logs_live_indexed_count\":11172},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T11:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11285,\"logs_live_indexed_count\":11285},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T12:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11290,\"logs_live_indexed_count\":11290},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T13:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11257,\"logs_live_indexed_count\":11257},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T14:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11285,\"logs_live_indexed_count\":11285},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T15:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11232,\"logs_live_indexed_count\":11232},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T16:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11266,\"logs_live_indexed_count\":11266},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T17:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11257,\"logs_live_indexed_count\":11257},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T18:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11285,\"logs_live_indexed_count\":11285},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T19:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11172,\"logs_live_indexed_count\":11172},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T20:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11294,\"logs_live_indexed_count\":11294},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T21:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11180,\"logs_live_indexed_count\":11180},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T22:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11197,\"logs_live_indexed_count\":11197},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-28T23:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11208,\"logs_live_indexed_count\":11208},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T00:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11305,\"logs_live_indexed_count\":11305},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T01:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11262,\"logs_live_indexed_count\":11262},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T02:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11170,\"logs_live_indexed_count\":11170},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T03:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11113,\"logs_live_indexed_count\":11113},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T04:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11290,\"logs_live_indexed_count\":11290},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T05:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11286,\"logs_live_indexed_count\":11286},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T06:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11285,\"logs_live_indexed_count\":11285},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T07:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11256,\"logs_live_indexed_count\":11256},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T08:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11254,\"logs_live_indexed_count\":11254},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T09:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11193,\"logs_live_indexed_count\":11193},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T10:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11236,\"logs_live_indexed_count\":11236},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T11:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11261,\"logs_live_indexed_count\":11261},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T12:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11314,\"logs_live_indexed_count\":11314},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T13:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11233,\"logs_live_indexed_count\":11233},{\"logs_live_ingested_bytes\":0,\"ingested_events_bytes\":0,\"hour\":\"2022-03-29T14:00:00+00:00\",\"logs_rehydrated_indexed_count\":0,\"logs_rehydrated_ingested_bytes\":0,\"billable_ingested_bytes\":0,\"indexed_events_count\":11225,\"logs_live_indexed_count\":11225}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Logs returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T15:43:40.233Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/network_flows", + "query": [ + [ + "end_hr", + "2022-03-27T15:43:40.233Z" + ], + [ + "start_hr", + "2022-03-29T15:43:40.233Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Network Flows returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T15:43:40.429Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/network_flows", + "query": [ + [ + "end_hr", + "2022-03-29T15:43:40.429Z" + ], + [ + "start_hr", + "2022-03-27T15:43:40.429Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-27T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-27T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-27T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-27T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-27T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-27T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-27T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-27T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-27T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-28T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-03-29T14:00:00+00:00\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Network Flows returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T17:01:55.545Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/network_hosts", + "query": [ + [ + "end_hr", + "2022-03-27T17:01:55.545Z" + ], + [ + "start_hr", + "2022-03-29T17:01:55.545Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Network Hosts returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T15:43:40.923Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/network_hosts", + "query": [ + [ + "end_hr", + "2022-03-29T15:43:40.923Z" + ], + [ + "start_hr", + "2022-03-27T15:43:40.923Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T00:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T01:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T02:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T03:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T04:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T05:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T06:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T07:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T08:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T09:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T10:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T11:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T12:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T13:00:00+00:00\"},{\"host_count\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T14:00:00+00:00\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Network Hosts returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-03-08T15:58:31.986Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/online-archive", + "query": [ + [ + "end_hr", + "2022-03-03T15:58:31.986Z" + ], + [ + "start_hr", + "2022-03-05T15:58:31.986Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Online Archive returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-03-08T15:58:32.586Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/online-archive", + "query": [ + [ + "end_hr", + "2022-03-05T15:58:32.586Z" + ], + [ + "start_hr", + "2022-03-03T15:58:32.586Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-03T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-03T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-03T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-03T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-03T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-03T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-03T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-03T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-03T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-04T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"online_archive_events_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-05T14:00:00+00:00\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Online Archive returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:26.836Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/rum_sessions", + "query": [ + [ + "end_hr", + "2022-03-27T00:41:26.836Z" + ], + [ + "start_hr", + "2022-03-29T00:41:26.836Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for RUM Sessions returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:26.958Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/rum_sessions", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:26.958Z" + ], + [ + "start_hr", + "2022-03-27T00:41:26.958Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T00:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T01:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T02:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T03:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T04:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T05:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T06:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T07:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T08:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T09:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T10:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T11:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T12:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T13:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T14:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\",\"indexed_events_count\":null,\"session_count\":null,\"replay_session_count\":0}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for RUM Sessions returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:27.572Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/rum", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:27.572Z" + ], + [ + "start_hr", + "2022-03-27T00:41:27.572Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T00:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T01:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T02:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T03:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T04:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T05:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T06:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T07:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T08:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T09:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T10:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T11:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T12:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T13:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T14:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T15:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T16:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T17:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T18:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T19:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T20:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T21:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T22:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-27T23:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T00:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T01:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T02:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T03:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T04:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T05:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T06:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T07:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T08:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T09:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T10:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T11:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T12:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T13:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T14:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T15:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T16:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T17:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T18:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T19:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T20:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T21:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T22:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_rum_units\":null,\"hour\":\"2022-03-28T23:00:00+00:00\",\"rum_units\":0,\"mobile_rum_units\":null,\"public_id\":\"fasjyydbcgwwc2uc\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for RUM Units returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:29.203Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/snmp", + "query": [ + [ + "end_hr", + "2022-01-26T09:34:29.203Z" + ], + [ + "start_hr", + "2022-01-28T09:34:29.203Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for SNMP devices returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:29.627Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/snmp", + "query": [ + [ + "end_hr", + "2022-01-28T09:34:29.627Z" + ], + [ + "start_hr", + "2022-01-26T09:34:29.627Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"snmp_devices\":0,\"hour\":\"2022-01-26T09:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T10:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T11:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T12:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T13:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T14:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T15:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T16:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T17:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T18:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T19:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T20:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T21:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T22:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-26T23:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T00:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T01:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T02:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T03:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T04:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T05:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T06:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T07:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T08:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T09:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T10:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T11:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T12:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T13:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T14:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T15:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T16:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T17:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T18:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T19:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T20:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T21:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T22:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-27T23:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-28T00:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-28T01:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-28T02:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-28T03:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-28T04:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-28T05:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-28T06:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-28T07:00:00+00:00\"},{\"snmp_devices\":0,\"hour\":\"2022-01-28T08:00:00+00:00\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for SNMP devices returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:27.888Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/sds", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:27.888Z" + ], + [ + "start_hr", + "2022-03-27T00:41:27.888Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T00:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T01:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T02:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T03:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T04:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T05:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T06:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T07:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T08:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T09:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T10:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T11:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T12:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T13:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T14:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\",\"logs_scanned_bytes\":0},{\"total_scanned_bytes\":0,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\",\"logs_scanned_bytes\":0}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Sensitive Data Scanner returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T15:43:44.039Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/synthetics_api", + "query": [ + [ + "end_hr", + "2022-03-27T15:43:44.039Z" + ], + [ + "start_hr", + "2022-03-29T15:43:44.039Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Synthetics API Checks returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T15:43:44.274Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/synthetics_api", + "query": [ + [ + "end_hr", + "2022-03-29T15:43:44.274Z" + ], + [ + "start_hr", + "2022-03-27T15:43:44.274Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\",\"check_calls_count\":1171},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\",\"check_calls_count\":1172},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\",\"check_calls_count\":1182},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\",\"check_calls_count\":1171},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\",\"check_calls_count\":1150},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\",\"check_calls_count\":1155},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\",\"check_calls_count\":1182},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\",\"check_calls_count\":1173},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\",\"check_calls_count\":1161},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\",\"check_calls_count\":1189},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\",\"check_calls_count\":1200},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\",\"check_calls_count\":1183},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\",\"check_calls_count\":1175},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\",\"check_calls_count\":1185},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\",\"check_calls_count\":1177},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\",\"check_calls_count\":1178},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\",\"check_calls_count\":1169},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\",\"check_calls_count\":1151},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\",\"check_calls_count\":1178},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\",\"check_calls_count\":1170},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\",\"check_calls_count\":1138},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\",\"check_calls_count\":1169},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\",\"check_calls_count\":1161},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\",\"check_calls_count\":1165},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\",\"check_calls_count\":1155},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\",\"check_calls_count\":1157},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\",\"check_calls_count\":1173},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\",\"check_calls_count\":567},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\",\"check_calls_count\":49},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T00:00:00+00:00\",\"check_calls_count\":21},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T01:00:00+00:00\",\"check_calls_count\":29},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T02:00:00+00:00\",\"check_calls_count\":15},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T03:00:00+00:00\",\"check_calls_count\":17},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T04:00:00+00:00\",\"check_calls_count\":13},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T05:00:00+00:00\",\"check_calls_count\":12},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T06:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T07:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T08:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T09:00:00+00:00\",\"check_calls_count\":13},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T10:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T11:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":8,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T12:00:00+00:00\",\"check_calls_count\":7},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T13:00:00+00:00\",\"check_calls_count\":17},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-29T14:00:00+00:00\",\"check_calls_count\":0}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Synthetics API Checks returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:28.391Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/synthetics_browser", + "query": [ + [ + "end_hr", + "2022-03-27T00:41:28.391Z" + ], + [ + "start_hr", + "2022-03-29T00:41:28.391Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Synthetics Browser Checks returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:28.503Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/synthetics_browser", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:28.503Z" + ], + [ + "start_hr", + "2022-03-27T00:41:28.503Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T00:00:00+00:00\",\"check_calls_count\":1181},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T01:00:00+00:00\",\"check_calls_count\":1190},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T02:00:00+00:00\",\"check_calls_count\":1180},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T03:00:00+00:00\",\"check_calls_count\":1197},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T04:00:00+00:00\",\"check_calls_count\":1178},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T05:00:00+00:00\",\"check_calls_count\":1180},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T06:00:00+00:00\",\"check_calls_count\":1174},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T07:00:00+00:00\",\"check_calls_count\":1163},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T08:00:00+00:00\",\"check_calls_count\":1167},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T09:00:00+00:00\",\"check_calls_count\":1182},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T10:00:00+00:00\",\"check_calls_count\":1195},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T11:00:00+00:00\",\"check_calls_count\":1178},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T12:00:00+00:00\",\"check_calls_count\":1170},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T13:00:00+00:00\",\"check_calls_count\":1192},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T14:00:00+00:00\",\"check_calls_count\":1170},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\",\"check_calls_count\":1171},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\",\"check_calls_count\":1172},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\",\"check_calls_count\":1182},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\",\"check_calls_count\":1171},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\",\"check_calls_count\":1150},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\",\"check_calls_count\":1155},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\",\"check_calls_count\":1182},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\",\"check_calls_count\":1173},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\",\"check_calls_count\":1161},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\",\"check_calls_count\":1189},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\",\"check_calls_count\":1200},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\",\"check_calls_count\":1183},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\",\"check_calls_count\":1175},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\",\"check_calls_count\":1185},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\",\"check_calls_count\":1177},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\",\"check_calls_count\":1178},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\",\"check_calls_count\":1169},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\",\"check_calls_count\":1151},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\",\"check_calls_count\":1178},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\",\"check_calls_count\":1170},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\",\"check_calls_count\":1138},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\",\"check_calls_count\":1169},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\",\"check_calls_count\":1161},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\",\"check_calls_count\":1165},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\",\"check_calls_count\":1155},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\",\"check_calls_count\":1157},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\",\"check_calls_count\":1173},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\",\"check_calls_count\":567},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\",\"check_calls_count\":49},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\",\"check_calls_count\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"browser_check_calls_count\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\",\"check_calls_count\":0}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Synthetics Browser Checks returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:30.286Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/analyzed_logs", + "query": [ + [ + "end_hr", + "2022-01-26T09:34:30.286Z" + ], + [ + "start_hr", + "2022-01-28T09:34:30.286Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for analyzed logs returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:30.705Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/analyzed_logs", + "query": [ + [ + "end_hr", + "2022-01-28T09:34:30.705Z" + ], + [ + "start_hr", + "2022-01-26T09:34:30.705Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"hour\":\"2022-01-26T09:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-26T10:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-26T11:00:00+00:00\",\"analyzed_logs\":412},{\"hour\":\"2022-01-26T12:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-26T13:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-26T14:00:00+00:00\",\"analyzed_logs\":1014},{\"hour\":\"2022-01-26T15:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-26T16:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-26T17:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-26T18:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-26T19:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-26T20:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-26T21:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-26T22:00:00+00:00\",\"analyzed_logs\":403786},{\"hour\":\"2022-01-26T23:00:00+00:00\",\"analyzed_logs\":1500564},{\"hour\":\"2022-01-27T00:00:00+00:00\",\"analyzed_logs\":2420},{\"hour\":\"2022-01-27T01:00:00+00:00\",\"analyzed_logs\":1217},{\"hour\":\"2022-01-27T02:00:00+00:00\",\"analyzed_logs\":978},{\"hour\":\"2022-01-27T03:00:00+00:00\",\"analyzed_logs\":1178},{\"hour\":\"2022-01-27T04:00:00+00:00\",\"analyzed_logs\":1014},{\"hour\":\"2022-01-27T05:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-27T06:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-27T07:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-27T08:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-27T09:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-27T10:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-27T11:00:00+00:00\",\"analyzed_logs\":412},{\"hour\":\"2022-01-27T12:00:00+00:00\",\"analyzed_logs\":194874},{\"hour\":\"2022-01-27T13:00:00+00:00\",\"analyzed_logs\":1742486},{\"hour\":\"2022-01-27T14:00:00+00:00\",\"analyzed_logs\":992448},{\"hour\":\"2022-01-27T15:00:00+00:00\",\"analyzed_logs\":8200},{\"hour\":\"2022-01-27T16:00:00+00:00\",\"analyzed_logs\":576000},{\"hour\":\"2022-01-27T17:00:00+00:00\",\"analyzed_logs\":576200},{\"hour\":\"2022-01-27T18:00:00+00:00\",\"analyzed_logs\":571200},{\"hour\":\"2022-01-27T19:00:00+00:00\",\"analyzed_logs\":576200},{\"hour\":\"2022-01-27T20:00:00+00:00\",\"analyzed_logs\":41600},{\"hour\":\"2022-01-27T21:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-27T22:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-27T23:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-28T00:00:00+00:00\",\"analyzed_logs\":2420},{\"hour\":\"2022-01-28T01:00:00+00:00\",\"analyzed_logs\":1217},{\"hour\":\"2022-01-28T02:00:00+00:00\",\"analyzed_logs\":978},{\"hour\":\"2022-01-28T03:00:00+00:00\",\"analyzed_logs\":1178},{\"hour\":\"2022-01-28T04:00:00+00:00\",\"analyzed_logs\":1014},{\"hour\":\"2022-01-28T05:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-28T06:00:00+00:00\",\"analyzed_logs\":0},{\"hour\":\"2022-01-28T07:00:00+00:00\",\"analyzed_logs\":200},{\"hour\":\"2022-01-28T08:00:00+00:00\",\"analyzed_logs\":0}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for analyzed logs returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:28.687Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/audit_logs", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:28.687Z" + ], + [ + "start_hr", + "2022-03-27T00:41:28.687Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T00:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T01:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T02:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T03:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T04:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T05:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T06:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T07:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T08:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T09:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T10:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T11:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T12:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T13:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T14:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\",\"lines_indexed\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\",\"lines_indexed\":0}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for audit logs returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2023-09-25T19:19:28.364Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/cws", + "query": [ + [ + "end_hr", + "2023-09-22T19:19:28.364Z" + ], + [ + "start_hr", + "2023-09-20T19:19:28.364Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"hour\":\"2023-09-20T19:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-20T20:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-20T21:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-20T22:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-20T23:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T00:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T01:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T02:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T03:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T04:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T05:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T06:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T07:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T08:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T09:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T10:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T11:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T12:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T13:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T14:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T15:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T16:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T17:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T18:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T19:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T20:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T21:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T22:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-21T23:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T00:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T01:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T02:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T03:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T04:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T05:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T06:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T07:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T08:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T09:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T10:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T11:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T12:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T13:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T14:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T15:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T16:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T17:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"},{\"hour\":\"2023-09-22T18:00:00+00:00\",\"region\":\"us\",\"cws_host_count\":null,\"cws_container_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for cloud workload security returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:29.079Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/timeseries", + "query": [ + [ + "end_hr", + "2022-03-27T00:41:29.079Z" + ], + [ + "start_hr", + "2022-03-29T00:41:29.079Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for custom metrics returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:29.168Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/timeseries", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:29.168Z" + ], + [ + "start_hr", + "2022-03-27T00:41:29.168Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":1,\"hour\":\"2022-03-27T00:00:00+00:00\",\"num_standard_timeseries\":36425,\"num_custom_output_timeseries\":83,\"num_custom_timeseries\":96,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T01:00:00+00:00\",\"num_standard_timeseries\":36424,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T02:00:00+00:00\",\"num_standard_timeseries\":36359,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T03:00:00+00:00\",\"num_standard_timeseries\":36368,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":95,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T04:00:00+00:00\",\"num_standard_timeseries\":36372,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T05:00:00+00:00\",\"num_standard_timeseries\":36372,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T06:00:00+00:00\",\"num_standard_timeseries\":36301,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T07:00:00+00:00\",\"num_standard_timeseries\":36308,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T08:00:00+00:00\",\"num_standard_timeseries\":36293,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T09:00:00+00:00\",\"num_standard_timeseries\":36365,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T10:00:00+00:00\",\"num_standard_timeseries\":36295,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T11:00:00+00:00\",\"num_standard_timeseries\":36304,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":87,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":1,\"hour\":\"2022-03-27T12:00:00+00:00\",\"num_standard_timeseries\":36363,\"num_custom_output_timeseries\":83,\"num_custom_timeseries\":94,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T13:00:00+00:00\",\"num_standard_timeseries\":36358,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T14:00:00+00:00\",\"num_standard_timeseries\":36298,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T15:00:00+00:00\",\"num_standard_timeseries\":36306,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T16:00:00+00:00\",\"num_standard_timeseries\":36295,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T17:00:00+00:00\",\"num_standard_timeseries\":36364,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T18:00:00+00:00\",\"num_standard_timeseries\":36300,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T19:00:00+00:00\",\"num_standard_timeseries\":36289,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T20:00:00+00:00\",\"num_standard_timeseries\":36294,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T21:00:00+00:00\",\"num_standard_timeseries\":36372,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T22:00:00+00:00\",\"num_standard_timeseries\":36327,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-27T23:00:00+00:00\",\"num_standard_timeseries\":36295,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":103,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":1,\"hour\":\"2022-03-28T00:00:00+00:00\",\"num_standard_timeseries\":36417,\"num_custom_output_timeseries\":83,\"num_custom_timeseries\":96,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T01:00:00+00:00\",\"num_standard_timeseries\":36427,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T02:00:00+00:00\",\"num_standard_timeseries\":36370,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T03:00:00+00:00\",\"num_standard_timeseries\":36366,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":95,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T04:00:00+00:00\",\"num_standard_timeseries\":36361,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T05:00:00+00:00\",\"num_standard_timeseries\":36371,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T06:00:00+00:00\",\"num_standard_timeseries\":36292,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T07:00:00+00:00\",\"num_standard_timeseries\":36304,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T08:00:00+00:00\",\"num_standard_timeseries\":36308,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T09:00:00+00:00\",\"num_standard_timeseries\":36378,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T10:00:00+00:00\",\"num_standard_timeseries\":36304,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T11:00:00+00:00\",\"num_standard_timeseries\":36307,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":1,\"hour\":\"2022-03-28T12:00:00+00:00\",\"num_standard_timeseries\":36363,\"num_custom_output_timeseries\":83,\"num_custom_timeseries\":94,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T13:00:00+00:00\",\"num_standard_timeseries\":36382,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":94,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T14:00:00+00:00\",\"num_standard_timeseries\":36293,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":94,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T15:00:00+00:00\",\"num_standard_timeseries\":36295,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T16:00:00+00:00\",\"num_standard_timeseries\":36299,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T17:00:00+00:00\",\"num_standard_timeseries\":36356,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":1,\"hour\":\"2022-03-28T18:00:00+00:00\",\"num_standard_timeseries\":36387,\"num_custom_output_timeseries\":87,\"num_custom_timeseries\":105,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T19:00:00+00:00\",\"num_standard_timeseries\":36083,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":2,\"hour\":\"2022-03-28T20:00:00+00:00\",\"num_standard_timeseries\":36082,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":101,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":93,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T21:00:00+00:00\",\"num_standard_timeseries\":36312,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T22:00:00+00:00\",\"num_standard_timeseries\":36073,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0},{\"org_name\":\"DD Integration Tests (321813)\",\"num_standard_output_timeseries\":77,\"public_id\":\"fasjyydbcgwwc2uc\",\"num_custom_input_timeseries\":0,\"hour\":\"2022-03-28T23:00:00+00:00\",\"num_standard_timeseries\":36078,\"num_custom_output_timeseries\":82,\"num_custom_timeseries\":93,\"num_standard_input_timeseries\":0}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for custom metrics returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:30.106Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/hosts", + "query": [ + [ + "end_hr", + "2022-03-27T00:41:30.106Z" + ], + [ + "start_hr", + "2022-03-29T00:41:30.106Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for hosts and containers returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:30.234Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/hosts", + "query": [ + [ + "end_hr", + "2022-03-29T00:41:30.234Z" + ], + [ + "start_hr", + "2022-03-27T00:41:30.234Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T00:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T01:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T02:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T03:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T04:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T05:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T06:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T07:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T08:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T09:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T10:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T11:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T12:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T13:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T14:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T15:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T16:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T17:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T18:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T19:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T20:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T21:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T22:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-27T23:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T00:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T01:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T02:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T03:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T04:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T05:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T06:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T07:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T08:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T09:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T10:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T11:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T12:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T13:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T14:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T15:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T16:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T17:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T18:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T19:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T20:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T21:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T22:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0},{\"host_count\":14,\"org_name\":\"DD Integration Tests (321813)\",\"container_count\":null,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-03-28T23:00:00+00:00\",\"alibaba_host_count\":0,\"agent_host_count\":14,\"apm_host_count\":8,\"org_id\":321813,\"apm_trace_count\":0,\"npm_host_count\":null,\"vsphere_host_count\":0,\"azure_host_count\":0,\"apm_azure_app_service_host_count\":0,\"gcp_host_count\":0,\"heroku_host_count\":0,\"infra_azure_app_service\":0,\"aws_host_count\":0,\"opentelemetry_host_count\":0,\"unbillable_host_count\":0}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for hosts and containers returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:31.364Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/incident-management", + "query": [ + [ + "end_hr", + "2022-01-26T09:34:31.364Z" + ], + [ + "start_hr", + "2022-01-28T09:34:31.364Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for incident management returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:31.797Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/incident-management", + "query": [ + [ + "end_hr", + "2022-01-28T09:34:31.797Z" + ], + [ + "start_hr", + "2022-01-26T09:34:31.797Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-26T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-27T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-28T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-28T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-28T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-28T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-28T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-28T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-28T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-28T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"monthly_active_users\":1,\"hour\":\"2022-01-28T08:00:00+00:00\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for incident management returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:32.316Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/indexed-spans", + "query": [ + [ + "end_hr", + "2022-01-26T09:34:32.316Z" + ], + [ + "start_hr", + "2022-01-28T09:34:32.316Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for indexed spans returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:32.749Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/indexed-spans", + "query": [ + [ + "end_hr", + "2022-01-28T09:34:32.749Z" + ], + [ + "start_hr", + "2022-01-26T09:34:32.749Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-26T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-27T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-28T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-28T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-28T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-28T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-28T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-28T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-28T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-28T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"indexed_events_count\":0,\"hour\":\"2022-01-28T08:00:00+00:00\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for indexed spans returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:33.304Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/ingested-spans", + "query": [ + [ + "end_hr", + "2022-01-26T09:34:33.304Z" + ], + [ + "start_hr", + "2022-01-28T09:34:33.304Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for ingested spans returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:33.739Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/ingested-spans", + "query": [ + [ + "end_hr", + "2022-01-28T09:34:33.739Z" + ], + [ + "start_hr", + "2022-01-26T09:34:33.739Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":569960,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":2118720,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T08:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T09:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T10:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T11:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":275263,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T12:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":2450015,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T13:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":1381529,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T14:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":10595,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T15:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":748763,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T16:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":748738,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T17:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":741902,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T18:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":748746,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T19:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":54279,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T20:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T21:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T22:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T23:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T00:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T01:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T02:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T03:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T04:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T05:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T06:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T07:00:00+00:00\"},{\"org_name\":\"DD Integration Tests (321813)\",\"ingested_events_bytes\":0,\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T08:00:00+00:00\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for ingested spans returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:34.396Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/profiling", + "query": [ + [ + "end_hr", + "2022-01-26T09:34:34.396Z" + ], + [ + "start_hr", + "2022-01-28T09:34:34.396Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for profiled hosts returns \"Bad Request\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-01-31T09:34:34.802Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/profiling", + "query": [ + [ + "end_hr", + "2022-01-28T09:34:34.802Z" + ], + [ + "start_hr", + "2022-01-26T09:34:34.802Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T09:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T10:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T11:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T12:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T13:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T14:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T15:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T16:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T17:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T18:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T19:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T20:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T21:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T22:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-26T23:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T00:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T01:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T02:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T03:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T04:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T05:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T06:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T07:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T08:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T09:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T10:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T11:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T12:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T13:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T14:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T15:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T16:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T17:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T18:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T19:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T20:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T21:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T22:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-27T23:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T00:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T01:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T02:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T03:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T04:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T05:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T06:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T07:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null},{\"host_count\":null,\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-01-28T08:00:00+00:00\",\"avg_container_agent_count\":null,\"avg_container_agentless_count\":null}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for profiled hosts returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-05-10T15:31:42.562Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/rum_sessions", + "query": [ + [ + "end_hr", + "2022-05-07T15:31:42.562Z" + ], + [ + "start_hr", + "2022-05-05T15:31:42.562Z" + ], + [ + "type", + "mobile" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-05T15:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-05T16:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-05T17:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-05T18:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-05T19:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-05T20:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-05T21:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-05T22:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-05T23:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T00:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T01:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T02:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T03:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T04:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T05:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T06:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T07:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T08:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T09:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T10:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T11:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T12:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T13:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T14:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T15:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T16:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T17:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T18:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T19:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T20:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T21:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T22:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-06T23:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T00:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T01:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T02:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T03:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T04:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T05:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T06:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T07:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T08:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T09:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T10:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T11:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T12:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T13:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null},{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"hour\":\"2022-05-07T14:00:00+00:00\",\"session_count_android\":null,\"session_count\":null,\"session_count_ios\":null,\"session_count_reactnative\":null}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get mobile hourly usage for RUM Sessions returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-05-23T08:46:27.028Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/monthly-attribution", + "query": [ + [ + "fields", + "infra_host_usage" + ], + [ + "start_month", + "2022-05-20T08:46:27.028Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"updated_at\":\"2022-05-22T09:05:00Z\",\"month\":\"2022-05-01T00:00:00+00:00\",\"values\":{\"infra_host_usage\":19}}],\"metadata\":{\"pagination\":{\"next_record_id\":null},\"aggregates\":[{\"field\":\"infra_host_usage\",\"value\":19.0,\"agg_type\":\"sum\"}]}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get monthly usage attribution returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-03-30T18:31:15.252Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/daily_custom_reports/2022-03-20", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_count\":1}},\"data\":{\"type\":\"reports\",\"id\":\"2022-03-20\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-20\",\"end_date\":\"2022-03-20\",\"size\":10247,\"computed_on\":\"2022-03-21T11:48:01+00:00\",\"location\":\"https://dd-michelada-custom-reporting-prod.s3.amazonaws.com/subscription_job_zipper/1.0/2022/03/20/1/550/daily_report_2022-03-20.zip?AWSAccessKeyId=ASIAWYLNJGWWCXCR4V7V&Signature=I7cpEqhY5%2BXEFlsYzxA57a%2BYnHk%3D&x-amz-security-token=IQoJb3JpZ2luX2VjEGsaCXVzLWVhc3QtMSJHMEUCIEXGsulBAsPHdZRek1V56QMDUifIBwCWlJLQbiXZtZeZAiEA7XmK8wJwFM9FYFTuWqXd%2FAZOgScwd2EElr%2FUMJU8EHYqtAII9P%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw0NjQ2MjI1MzIwMTIiDIBxf%2FLE%2F8pisemenyqIAvOZUzJItp6MlR%2BAasSF7mKWn8dqAbcSWsSIk26bBfnZnJKIapLNO87CNK5XY%2BRQGlQtiedFTeM70882IMR4yeTbHR2V%2F1IhNorCwuitJ9Bt3pfyEIA5wfFm30vPk%2F8TpTxh3kU9yDksIy3LKhh72zH%2BOE58W41Xsbe%2B1Up7EjH6MvwgGTnkdro%2BADAaC%2Bk2E7ziAzRTh8bVqDbyt6nFw38sCiAxISIzLyKUNSE2LF4V6R%2FoKM2OYjKkCAtcEyuaZlruLuyq64HDXOasTZPGdPEPnKn1HDYa95i4SDoJcRJeFNQFmG2xtueUx63zOg8dMRfEeCEwOhbS6y9pmcCsqYOMzcVDW8UNxDD1wZKSBjqdARNDm0Wuz7QRUfPFC9L4WZPg1POnUSKJ40XYyzWYbn9hKNocw0vyFUVx07mFUUBKZhPBJQHFTWhabDq%2FmVWCV%2FDQ73ruhCMjx7%2Bo0tnGUGuY3fTzBkDTSfoEsoAKYdWcMWXcFwnnItX3Q3Y8TwWUoy1hyB1QDc1zIVxid1PqnV5%2FBnTYYzGw8Z2zFaPR%2FMt%2FCJaLPwBEvc%2F7v6IrqUA%3D&Expires=1648665975\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get specified daily custom reports returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-03-30T18:31:15.717Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monthly_custom_reports/2021-05-01", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_count\":1}},\"data\":{\"type\":\"reports\",\"id\":\"2021-05-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-05-01\",\"end_date\":\"2021-06-01\",\"size\":12397,\"computed_on\":\"2021-06-01T18:47:43+00:00\",\"location\":\"https://dd-michelada-custom-reporting-prod.s3.amazonaws.com/org_month_custom_reporting/1.0/2021/05/0/550/monthly_report_2021-05.zip?AWSAccessKeyId=ASIAWYLNJGWWCXCR4V7V&Signature=izgOSTDQwRnELRSMM%2BF10Nlhq8A%3D&x-amz-security-token=IQoJb3JpZ2luX2VjEGsaCXVzLWVhc3QtMSJHMEUCIEXGsulBAsPHdZRek1V56QMDUifIBwCWlJLQbiXZtZeZAiEA7XmK8wJwFM9FYFTuWqXd%2FAZOgScwd2EElr%2FUMJU8EHYqtAII9P%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw0NjQ2MjI1MzIwMTIiDIBxf%2FLE%2F8pisemenyqIAvOZUzJItp6MlR%2BAasSF7mKWn8dqAbcSWsSIk26bBfnZnJKIapLNO87CNK5XY%2BRQGlQtiedFTeM70882IMR4yeTbHR2V%2F1IhNorCwuitJ9Bt3pfyEIA5wfFm30vPk%2F8TpTxh3kU9yDksIy3LKhh72zH%2BOE58W41Xsbe%2B1Up7EjH6MvwgGTnkdro%2BADAaC%2Bk2E7ziAzRTh8bVqDbyt6nFw38sCiAxISIzLyKUNSE2LF4V6R%2FoKM2OYjKkCAtcEyuaZlruLuyq64HDXOasTZPGdPEPnKn1HDYa95i4SDoJcRJeFNQFmG2xtueUx63zOg8dMRfEeCEwOhbS6y9pmcCsqYOMzcVDW8UNxDD1wZKSBjqdARNDm0Wuz7QRUfPFC9L4WZPg1POnUSKJ40XYyzWYbn9hKNocw0vyFUVx07mFUUBKZhPBJQHFTWhabDq%2FmVWCV%2FDQ73ruhCMjx7%2Bo0tnGUGuY3fTzBkDTSfoEsoAKYdWcMWXcFwnnItX3Q3Y8TwWUoy1hyB1QDc1zIVxid1PqnV5%2FBnTYYzGw8Z2zFaPR%2FMt%2FCJaLPwBEvc%2F7v6IrqUA%3D&Expires=1648665976\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get specified monthly custom reports returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:30.689Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/daily_custom_reports", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_count\":397}},\"data\":[{\"type\":\"reports\",\"id\":\"2022-03-30\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-30\",\"end_date\":\"2022-03-30\",\"size\":11887,\"computed_on\":\"2022-03-31T13:22:53+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-29\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-29\",\"end_date\":\"2022-03-29\",\"size\":11141,\"computed_on\":\"2022-03-30T19:59:17+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-28\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-28\",\"end_date\":\"2022-03-28\",\"size\":11088,\"computed_on\":\"2022-03-29T11:57:38+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-27\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-27\",\"end_date\":\"2022-03-27\",\"size\":11277,\"computed_on\":\"2022-03-28T12:39:05+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-26\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-26\",\"end_date\":\"2022-03-26\",\"size\":11277,\"computed_on\":\"2022-03-27T12:33:52+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-25\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-25\",\"end_date\":\"2022-03-25\",\"size\":11259,\"computed_on\":\"2022-03-26T11:33:26+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-24\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-24\",\"end_date\":\"2022-03-24\",\"size\":11253,\"computed_on\":\"2022-03-25T12:35:16+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-23\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-23\",\"end_date\":\"2022-03-23\",\"size\":10890,\"computed_on\":\"2022-03-24T11:40:57+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-22\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-22\",\"end_date\":\"2022-03-22\",\"size\":11134,\"computed_on\":\"2022-03-23T11:53:55+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-21\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-21\",\"end_date\":\"2022-03-21\",\"size\":10850,\"computed_on\":\"2022-03-22T11:45:29+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-20\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-20\",\"end_date\":\"2022-03-20\",\"size\":10247,\"computed_on\":\"2022-03-21T11:48:01+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-19\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-19\",\"end_date\":\"2022-03-19\",\"size\":10247,\"computed_on\":\"2022-03-20T12:35:11+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-18\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-18\",\"end_date\":\"2022-03-18\",\"size\":10970,\"computed_on\":\"2022-03-19T12:16:44+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-17\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-17\",\"end_date\":\"2022-03-17\",\"size\":11253,\"computed_on\":\"2022-03-18T15:36:07+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-16\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-16\",\"end_date\":\"2022-03-16\",\"size\":11257,\"computed_on\":\"2022-03-17T11:46:13+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-15\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-15\",\"end_date\":\"2022-03-15\",\"size\":11253,\"computed_on\":\"2022-03-16T12:02:15+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-14\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-14\",\"end_date\":\"2022-03-14\",\"size\":11257,\"computed_on\":\"2022-03-15T12:10:44+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-13\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-13\",\"end_date\":\"2022-03-13\",\"size\":11253,\"computed_on\":\"2022-03-31T18:56:21+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-12\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-12\",\"end_date\":\"2022-03-12\",\"size\":11253,\"computed_on\":\"2022-03-31T18:38:30+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-11\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-11\",\"end_date\":\"2022-03-11\",\"size\":11256,\"computed_on\":\"2022-03-31T18:20:09+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-10\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-10\",\"end_date\":\"2022-03-10\",\"size\":11253,\"computed_on\":\"2022-03-31T18:01:15+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-09\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-09\",\"end_date\":\"2022-03-09\",\"size\":11250,\"computed_on\":\"2022-03-31T17:43:15+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-08\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-08\",\"end_date\":\"2022-03-08\",\"size\":11067,\"computed_on\":\"2022-03-31T17:24:33+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-07\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-07\",\"end_date\":\"2022-03-07\",\"size\":11132,\"computed_on\":\"2022-03-31T17:05:58+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-06\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-06\",\"end_date\":\"2022-03-06\",\"size\":11253,\"computed_on\":\"2022-03-31T16:47:01+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-05\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-05\",\"end_date\":\"2022-03-05\",\"size\":11251,\"computed_on\":\"2022-03-31T16:29:16+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-04\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-04\",\"end_date\":\"2022-03-04\",\"size\":11021,\"computed_on\":\"2022-03-31T16:11:45+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-03\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-03\",\"end_date\":\"2022-03-03\",\"size\":10168,\"computed_on\":\"2022-03-31T15:54:47+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-02\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-02\",\"end_date\":\"2022-03-02\",\"size\":10295,\"computed_on\":\"2022-03-31T15:37:20+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-03-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-03-01\",\"end_date\":\"2022-03-01\",\"size\":10112,\"computed_on\":\"2022-03-31T15:20:26+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-28\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-28\",\"end_date\":\"2022-02-28\",\"size\":9623,\"computed_on\":\"2022-03-01T11:42:11+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-27\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-27\",\"end_date\":\"2022-02-27\",\"size\":9635,\"computed_on\":\"2022-02-28T11:31:54+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-26\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-26\",\"end_date\":\"2022-02-26\",\"size\":9635,\"computed_on\":\"2022-02-27T11:19:34+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-25\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-25\",\"end_date\":\"2022-02-25\",\"size\":10325,\"computed_on\":\"2022-02-26T11:31:41+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-24\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-24\",\"end_date\":\"2022-02-24\",\"size\":10162,\"computed_on\":\"2022-02-25T11:42:33+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-23\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-23\",\"end_date\":\"2022-02-23\",\"size\":11840,\"computed_on\":\"2022-02-24T11:52:42+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-22\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-22\",\"end_date\":\"2022-02-22\",\"size\":10201,\"computed_on\":\"2022-02-23T13:44:21+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-21\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-21\",\"end_date\":\"2022-02-21\",\"size\":10253,\"computed_on\":\"2022-02-22T12:54:00+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-20\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-20\",\"end_date\":\"2022-02-20\",\"size\":10253,\"computed_on\":\"2022-02-21T11:42:26+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-19\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-19\",\"end_date\":\"2022-02-19\",\"size\":10253,\"computed_on\":\"2022-02-20T11:59:36+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-18\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-18\",\"end_date\":\"2022-02-18\",\"size\":10253,\"computed_on\":\"2022-02-19T13:20:42+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-17\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-17\",\"end_date\":\"2022-02-17\",\"size\":10253,\"computed_on\":\"2022-02-18T13:19:10+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-16\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-16\",\"end_date\":\"2022-02-16\",\"size\":11200,\"computed_on\":\"2022-02-17T12:43:57+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-15\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-15\",\"end_date\":\"2022-02-15\",\"size\":11839,\"computed_on\":\"2022-02-16T11:40:11+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-14\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-14\",\"end_date\":\"2022-02-14\",\"size\":10488,\"computed_on\":\"2022-02-15T13:56:48+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-13\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-13\",\"end_date\":\"2022-02-13\",\"size\":9222,\"computed_on\":\"2022-02-14T11:18:48+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-12\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-12\",\"end_date\":\"2022-02-12\",\"size\":9219,\"computed_on\":\"2022-02-13T12:09:53+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-11\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-11\",\"end_date\":\"2022-02-11\",\"size\":15226,\"computed_on\":\"2022-02-12T11:29:42+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-10\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-10\",\"end_date\":\"2022-02-10\",\"size\":12803,\"computed_on\":\"2022-02-11T12:58:43+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-09\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-09\",\"end_date\":\"2022-02-09\",\"size\":9818,\"computed_on\":\"2022-02-10T13:23:20+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-08\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-08\",\"end_date\":\"2022-02-08\",\"size\":10105,\"computed_on\":\"2022-02-09T13:13:24+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-07\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-07\",\"end_date\":\"2022-02-07\",\"size\":10232,\"computed_on\":\"2022-02-08T13:00:00+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-06\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-06\",\"end_date\":\"2022-02-06\",\"size\":10229,\"computed_on\":\"2022-02-07T11:01:35+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-05\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-05\",\"end_date\":\"2022-02-05\",\"size\":10229,\"computed_on\":\"2022-02-06T11:52:57+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-04\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-04\",\"end_date\":\"2022-02-04\",\"size\":9855,\"computed_on\":\"2022-02-05T11:53:22+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-03\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-03\",\"end_date\":\"2022-02-03\",\"size\":11314,\"computed_on\":\"2022-02-04T12:26:10+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-02\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-02\",\"end_date\":\"2022-02-02\",\"size\":9535,\"computed_on\":\"2022-02-03T15:30:14+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-02-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-01\",\"end_date\":\"2022-02-01\",\"size\":9202,\"computed_on\":\"2022-02-02T12:30:57+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-01-31\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-01-31\",\"end_date\":\"2022-01-31\",\"size\":9277,\"computed_on\":\"2022-02-01T12:46:32+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-01-30\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-01-30\",\"end_date\":\"2022-01-30\",\"size\":9275,\"computed_on\":\"2022-01-31T12:27:45+00:00\"}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the list of available daily custom reports returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-01T00:41:31.006Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/monthly_custom_reports", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_count\":13}},\"data\":[{\"type\":\"reports\",\"id\":\"2022-02-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-02-01\",\"end_date\":\"2022-03-01\",\"size\":20340,\"computed_on\":\"2022-03-08T20:44:56+00:00\"}},{\"type\":\"reports\",\"id\":\"2022-01-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2022-01-01\",\"end_date\":\"2022-02-01\",\"size\":22697,\"computed_on\":\"2022-02-01T16:50:14+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-12-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-12-01\",\"end_date\":\"2022-01-01\",\"size\":29169,\"computed_on\":\"2022-01-01T15:54:13+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-11-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-11-01\",\"end_date\":\"2021-12-01\",\"size\":19416,\"computed_on\":\"2021-12-01T18:17:01+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-10-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-10-01\",\"end_date\":\"2021-11-01\",\"size\":27977,\"computed_on\":\"2021-11-01T15:14:43+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-09-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-09-01\",\"end_date\":\"2021-10-01\",\"size\":20126,\"computed_on\":\"2021-10-01T17:53:32+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-08-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-08-01\",\"end_date\":\"2021-09-01\",\"size\":21429,\"computed_on\":\"2021-09-01T18:05:42+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-07-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-07-01\",\"end_date\":\"2021-08-01\",\"size\":21226,\"computed_on\":\"2021-08-01T21:02:05+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-06-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-06-01\",\"end_date\":\"2021-07-01\",\"size\":19206,\"computed_on\":\"2021-07-02T01:10:11+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-05-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-05-01\",\"end_date\":\"2021-06-01\",\"size\":12397,\"computed_on\":\"2021-06-01T18:47:43+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-04-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-04-01\",\"end_date\":\"2021-05-01\",\"size\":24230,\"computed_on\":\"2021-05-01T20:21:29+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-03-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-03-01\",\"end_date\":\"2021-04-01\",\"size\":33516,\"computed_on\":\"2021-04-15T18:59:09+00:00\"}},{\"type\":\"reports\",\"id\":\"2021-02-01\",\"attributes\":{\"tags\":[\"project\"],\"start_date\":\"2021-02-01\",\"end_date\":\"2021-03-01\",\"size\":35757,\"computed_on\":\"2021-03-02T15:37:35+00:00\"}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the list of available monthly custom reports returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-05-23T08:46:27.749Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/attribution", + "query": [ + [ + "fields", + "*" + ], + [ + "limit", + "1" + ], + [ + "offset", + "0" + ], + [ + "start_month", + "2022-05-20T08:46:27.749Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":{\"project\":[]},\"updated_at\":\"2022-05-23T00\",\"month\":\"2022-05-01T00:00:00+00:00\",\"values\":{\"apm_host_usage\":12,\"api_usage\":97173,\"dbm_hosts_percentage\":0.0,\"custom_timeseries_percentage\":100.0,\"fargate_usage\":0.0,\"cws_containers_usage\":0.0,\"profiled_host_percentage\":0.0,\"cws_hosts_usage\":0,\"cspm_hosts_percentage\":0.0,\"cws_hosts_percentage\":0.0,\"lambda_invocations_percentage\":0.0,\"infra_host_usage\":1,\"infra_host_percentage\":5.26,\"cspm_hosts_usage\":0,\"container_percentage\":100.0,\"profiled_host_usage\":0,\"dbm_queries_usage\":0.0,\"browser_usage\":368,\"snmp_percentage\":0.0,\"profiled_container_usage\":1.45,\"lambda_functions_usage\":0.0,\"snmp_usage\":0,\"api_percentage\":100.0,\"dbm_hosts_usage\":0,\"container_usage\":1.0,\"cspm_containers_usage\":0.0,\"cspm_containers_percentage\":0.0,\"npm_host_usage\":0,\"apm_host_percentage\":100.0,\"lambda_functions_percentage\":0.0,\"dbm_queries_percentage\":0.0,\"profiled_container_percentage\":100.0,\"npm_host_percentage\":0.0,\"lambda_invocations_usage\":0,\"fargate_percentage\":0.0,\"browser_percentage\":100.0,\"cws_containers_percentage\":0.0,\"custom_timeseries_usage\":76.63}}],\"metadata\":{\"pagination\":{\"sort_direction\":\"DESC\",\"sort_name\":\"custom_timeseries_usage\",\"limit\":1,\"total_number_of_records\":3,\"offset\":0},\"aggregates\":[{\"field\":\"custom_timeseries_usage\",\"value\":76.63,\"agg_type\":\"sum\"},{\"field\":\"container_usage\",\"value\":1.0,\"agg_type\":\"sum\"},{\"field\":\"snmp_percentage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"apm_host_usage\",\"value\":12.0,\"agg_type\":\"sum\"},{\"field\":\"browser_usage\",\"value\":368.0,\"agg_type\":\"sum\"},{\"field\":\"npm_host_percentage\",\"value\":100.0,\"agg_type\":\"sum\"},{\"field\":\"infra_host_usage\",\"value\":19.0,\"agg_type\":\"sum\"},{\"field\":\"custom_timeseries_percentage\",\"value\":100.0,\"agg_type\":\"sum\"},{\"field\":\"container_percentage\",\"value\":100.0,\"agg_type\":\"sum\"},{\"field\":\"api_usage\",\"value\":97173.0,\"agg_type\":\"sum\"},{\"field\":\"apm_host_percentage\",\"value\":100.0,\"agg_type\":\"sum\"},{\"field\":\"infra_host_percentage\",\"value\":100.0,\"agg_type\":\"sum\"},{\"field\":\"snmp_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"browser_percentage\",\"value\":100.0,\"agg_type\":\"sum\"},{\"field\":\"api_percentage\",\"value\":100.0,\"agg_type\":\"sum\"},{\"field\":\"npm_host_usage\",\"value\":18.0,\"agg_type\":\"sum\"},{\"field\":\"lambda_functions_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"lambda_functions_percentage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"lambda_invocations_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"lambda_invocations_percentage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"fargate_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"fargate_percentage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"profiled_host_usage\",\"value\":3.0,\"agg_type\":\"sum\"},{\"field\":\"profiled_host_percentage\",\"value\":100.0,\"agg_type\":\"sum\"},{\"field\":\"profiled_container_usage\",\"value\":1.45,\"agg_type\":\"sum\"},{\"field\":\"profiled_container_percentage\",\"value\":100.0,\"agg_type\":\"sum\"},{\"field\":\"cws_hosts_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"cws_hosts_percentage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"cws_containers_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"cws_containers_percentage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"cspm_hosts_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"cspm_hosts_percentage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"cspm_containers_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"cspm_containers_percentage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"dbm_hosts_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"dbm_hosts_percentage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"dbm_queries_usage\",\"value\":0.0,\"agg_type\":\"sum\"},{\"field\":\"dbm_queries_percentage\",\"value\":0.0,\"agg_type\":\"sum\"}]}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get usage attribution returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-03-29T15:05:25.629Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/monthly-attribution", + "query": [ + [ + "fields", + "infra_host_usage" + ], + [ + "start_month", + "2022-03-26T15:05:25.629Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"tag_config_source\":\"DD Integration Tests (321813):::project\",\"tags\":null,\"updated_at\":\"2022-03-28T23:02:55Z\",\"month\":\"2022-03-01T00:00:00+00:00\",\"values\":{\"infra_host_usage\":15}}],\"metadata\":{\"pagination\":{\"next_record_id\":null},\"aggregates\":[{\"field\":\"infra_host_usage\",\"value\":15.0,\"agg_type\":\"sum\"}]}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/usage/monthly-attribution", + "query": [ + [ + "fields", + "infra_host_usage" + ], + [ + "next_record_id", + "null" + ], + [ + "start_month", + "2022-03-26T15:05:25.629Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"usage\":[],\"metadata\":{\"pagination\":{\"next_record_id\":null},\"aggregates\":[{\"field\":\"infra_host_usage\",\"value\":15.0,\"agg_type\":\"sum\"}]}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Paginate Monthly Usage Attribution", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/users.json b/test-server-data/v1/users.json new file mode 100644 index 0000000000..a3c7c5c315 --- /dev/null +++ b/test-server-data/v1/users.json @@ -0,0 +1,127 @@ +{ + "feature": "Users", + "recordings": [ + { + "feature": "Users", + "frozen_at": "2023-07-10T18:57:28.744Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "access_role": "st", + "disabled": false, + "email": "test@datadoghq.com", + "handle": "test@datadoghq.com", + "name": "test user" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/user", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"user\":{\"handle\":\"test@datadoghq.com\",\"name\":\"test user\",\"role\":null,\"title\":null,\"email\":\"test@datadoghq.com\",\"disabled\":false,\"access_role\":null,\"is_admin\":false,\"icon\":\"https://secure.gravatar.com/avatar/f979f58720feb88e09cc3d11ce3d15da?s=48&d=retro\",\"verified\":false}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/user/test%40datadoghq.com", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"message\":\"User test@datadoghq.com disabled\"}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a user returns \"User created\" response test", + "version": "v1" + }, + { + "feature": "Users", + "frozen_at": "2023-07-10T18:58:47.628Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "access_role": null, + "disabled": false, + "email": "test@datadoghq.com", + "handle": "test@datadoghq.com", + "name": "test user" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/user", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"user\":{\"handle\":\"test@datadoghq.com\",\"name\":\"test user\",\"role\":null,\"title\":null,\"email\":\"test@datadoghq.com\",\"disabled\":true,\"access_role\":null,\"is_admin\":false,\"icon\":\"https://secure.gravatar.com/avatar/f979f58720feb88e09cc3d11ce3d15da?s=48&d=retro\",\"verified\":false}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/user/test%40datadoghq.com", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"User is already disabled\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a user returns null access role", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v1/webhooks-integration.json b/test-server-data/v1/webhooks-integration.json new file mode 100644 index 0000000000..4b6552a7e4 --- /dev/null +++ b/test-server-data/v1/webhooks-integration.json @@ -0,0 +1,528 @@ +{ + "feature": "Webhooks Integration", + "recordings": [ + { + "feature": "Webhooks Integration", + "frozen_at": "2022-05-12T09:50:31.084Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "is_secret": true, + "name": "TESTCREATEACUSTOMVARIABLERETURNSOKRESPONSE1652349031", + "value": "CUSTOM_VARIABLE_VALUE" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/webhooks/configuration/custom-variables", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_secret\":true,\"name\":\"TESTCREATEACUSTOMVARIABLERETURNSOKRESPONSE1652349031\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/integration/webhooks/configuration/custom-variables/TESTCREATEACUSTOMVARIABLERETURNSOKRESPONSE1652349031", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a custom variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "frozen_at": "2022-05-12T09:50:37.160Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Create_a_webhooks_integration_returns_OK_response-1652349037", + "url": "https://example.com/webhook" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/webhooks/configuration/webhooks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"encode_as\":\"json\",\"url\":\"https://example.com/webhook\",\"custom_headers\":null,\"name\":\"Test-Create_a_webhooks_integration_returns_OK_response-1652349037\",\"payload\":\"{\\\"body\\\": \\\"$EVENT_MSG\\\", \\\"last_updated\\\": \\\"$LAST_UPDATED\\\", \\\"event_type\\\": \\\"$EVENT_TYPE\\\", \\\"title\\\": \\\"$EVENT_TITLE\\\", \\\"date\\\": \\\"$DATE\\\", \\\"org\\\": {\\\"id\\\": \\\"$ORG_ID\\\", \\\"name\\\": \\\"$ORG_NAME\\\"}, \\\"id\\\": \\\"$ID\\\"}\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/integration/webhooks/configuration/webhooks/Test-Create_a_webhooks_integration_returns_OK_response-1652349037", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a webhooks integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "frozen_at": "2022-05-12T09:50:41.873Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "is_secret": false, + "name": "TESTDELETEACUSTOMVARIABLERETURNSOKRESPONSE1652349041", + "value": "variable-value" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/webhooks/configuration/custom-variables", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_secret\":false,\"name\":\"TESTDELETEACUSTOMVARIABLERETURNSOKRESPONSE1652349041\",\"value\":\"variable-value\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/integration/webhooks/configuration/custom-variables/TESTDELETEACUSTOMVARIABLERETURNSOKRESPONSE1652349041", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/integration/webhooks/configuration/custom-variables/TESTDELETEACUSTOMVARIABLERETURNSOKRESPONSE1652349041", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Custom variable does not exist\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a custom variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "frozen_at": "2022-05-12T09:50:47.045Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Delete_a_webhook_returns_OK_response-1652349047", + "url": "http://example.com/webhook" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/webhooks/configuration/webhooks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"encode_as\":\"json\",\"url\":\"http://example.com/webhook\",\"custom_headers\":null,\"name\":\"Test-Delete_a_webhook_returns_OK_response-1652349047\",\"payload\":\"{\\\"body\\\": \\\"$EVENT_MSG\\\", \\\"last_updated\\\": \\\"$LAST_UPDATED\\\", \\\"event_type\\\": \\\"$EVENT_TYPE\\\", \\\"title\\\": \\\"$EVENT_TITLE\\\", \\\"date\\\": \\\"$DATE\\\", \\\"org\\\": {\\\"id\\\": \\\"$ORG_ID\\\", \\\"name\\\": \\\"$ORG_NAME\\\"}, \\\"id\\\": \\\"$ID\\\"}\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/integration/webhooks/configuration/webhooks/Test-Delete_a_webhook_returns_OK_response-1652349047", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/integration/webhooks/configuration/webhooks/Test-Delete_a_webhook_returns_OK_response-1652349047", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Webhook does not exist\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a webhook returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "frozen_at": "2022-05-12T09:50:51.672Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_a_webhook_integration_returns_OK_response-1652349051", + "url": "http://example.com/webhook" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/webhooks/configuration/webhooks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"encode_as\":\"json\",\"url\":\"http://example.com/webhook\",\"custom_headers\":null,\"name\":\"Test-Get_a_webhook_integration_returns_OK_response-1652349051\",\"payload\":\"{\\\"body\\\": \\\"$EVENT_MSG\\\", \\\"last_updated\\\": \\\"$LAST_UPDATED\\\", \\\"event_type\\\": \\\"$EVENT_TYPE\\\", \\\"title\\\": \\\"$EVENT_TITLE\\\", \\\"date\\\": \\\"$DATE\\\", \\\"org\\\": {\\\"id\\\": \\\"$ORG_ID\\\", \\\"name\\\": \\\"$ORG_NAME\\\"}, \\\"id\\\": \\\"$ID\\\"}\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v1/integration/webhooks/configuration/webhooks/Test-Get_a_webhook_integration_returns_OK_response-1652349051", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"encode_as\":\"json\",\"url\":\"http://example.com/webhook\",\"custom_headers\":null,\"name\":\"Test-Get_a_webhook_integration_returns_OK_response-1652349051\",\"payload\":\"{\\\"body\\\": \\\"$EVENT_MSG\\\", \\\"last_updated\\\": \\\"$LAST_UPDATED\\\", \\\"event_type\\\": \\\"$EVENT_TYPE\\\", \\\"title\\\": \\\"$EVENT_TITLE\\\", \\\"date\\\": \\\"$DATE\\\", \\\"org\\\": {\\\"id\\\": \\\"$ORG_ID\\\", \\\"name\\\": \\\"$ORG_NAME\\\"}, \\\"id\\\": \\\"$ID\\\"}\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/integration/webhooks/configuration/webhooks/Test-Get_a_webhook_integration_returns_OK_response-1652349051", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a webhook integration returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "frozen_at": "2022-05-12T09:50:56.898Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "is_secret": false, + "name": "TESTUPDATEACUSTOMVARIABLERETURNSOKRESPONSE1652349056", + "value": "variable-value" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/webhooks/configuration/custom-variables", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_secret\":false,\"name\":\"TESTUPDATEACUSTOMVARIABLERETURNSOKRESPONSE1652349056\",\"value\":\"variable-value\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "value": "variable-updated" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/integration/webhooks/configuration/custom-variables/TESTUPDATEACUSTOMVARIABLERETURNSOKRESPONSE1652349056", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_secret\":false,\"name\":\"TESTUPDATEACUSTOMVARIABLERETURNSOKRESPONSE1652349056\",\"value\":\"variable-updated\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/integration/webhooks/configuration/custom-variables/TESTUPDATEACUSTOMVARIABLERETURNSOKRESPONSE1652349056", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a custom variable returns \"OK\" response", + "version": "v1" + }, + { + "feature": "Webhooks Integration", + "frozen_at": "2022-05-12T09:51:02.011Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Update_a_webhook_returns_OK_response-1652349062", + "url": "http://example.com/webhook" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/integration/webhooks/configuration/webhooks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"encode_as\":\"json\",\"url\":\"http://example.com/webhook\",\"custom_headers\":null,\"name\":\"Test-Update_a_webhook_returns_OK_response-1652349062\",\"payload\":\"{\\\"body\\\": \\\"$EVENT_MSG\\\", \\\"last_updated\\\": \\\"$LAST_UPDATED\\\", \\\"event_type\\\": \\\"$EVENT_TYPE\\\", \\\"title\\\": \\\"$EVENT_TITLE\\\", \\\"date\\\": \\\"$DATE\\\", \\\"org\\\": {\\\"id\\\": \\\"$ORG_ID\\\", \\\"name\\\": \\\"$ORG_NAME\\\"}, \\\"id\\\": \\\"$ID\\\"}\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "url": "https://example.com/webhook-updated" + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v1/integration/webhooks/configuration/webhooks/Test-Update_a_webhook_returns_OK_response-1652349062", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"encode_as\":\"json\",\"url\":\"https://example.com/webhook-updated\",\"custom_headers\":null,\"name\":\"Test-Update_a_webhook_returns_OK_response-1652349062\",\"payload\":\"{\\\"body\\\": \\\"$EVENT_MSG\\\", \\\"last_updated\\\": \\\"$LAST_UPDATED\\\", \\\"event_type\\\": \\\"$EVENT_TYPE\\\", \\\"title\\\": \\\"$EVENT_TITLE\\\", \\\"date\\\": \\\"$DATE\\\", \\\"org\\\": {\\\"id\\\": \\\"$ORG_ID\\\", \\\"name\\\": \\\"$ORG_NAME\\\"}, \\\"id\\\": \\\"$ID\\\"}\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/integration/webhooks/configuration/webhooks/Test-Update_a_webhook_returns_OK_response-1652349062", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a webhook returns \"OK\" response", + "version": "v1" + } + ], + "schema_version": 1, + "version": "v1" +} diff --git a/test-server-data/v2/action-connection.json b/test-server-data/v2/action-connection.json new file mode 100644 index 0000000000..6eeb7706ab --- /dev/null +++ b/test-server-data/v2/action-connection.json @@ -0,0 +1,810 @@ +{ + "feature": "Action Connection", + "recordings": [ + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:24:59.622Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "1", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"error creating connection: rpc error: code = InvalidArgument desc = multiple errors: 1 error occurred:\\n\\t* [error_code=8]: invalid CreateCustomConnectionRequest.Data: embedded message failed validation | caused by: invalid CustomConnectionData.Aws: embedded message failed validation | caused by: invalid CustomConnectionData_AwsAuthData.AssumeRole: embedded message failed validation | caused by: invalid CustomConnectionData_AwsAuthData_AssumeRole.AccountId: value does not match regex pattern \\\"^\\\\\\\\d{12}$\\\"\\n\\n\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new Action Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:24:59.727Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "123456789123", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection testcreateanewactionconnectionreturnssuccessfullycreatedactionconnectionresponse1743020699" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"67aa2f61-266d-48d1-a1ee-cf7c3acc6b20\",\"type\":\"action_connection\",\"attributes\":{\"integration\":{\"credentials\":{\"account_id\":\"123456789123\",\"external_id\":\"70f4660c99684420821b0c13a67eb4d1\",\"principal_id\":\"464622532012\",\"role\":\"MyRoleUpdated\",\"type\":\"AWSAssumeRole\"},\"type\":\"AWS\"},\"name\":\"Cassette Connection testcreateanewactionconnectionreturnssuccessfullycreatedactionconnectionresponse1743020699\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions/connections/67aa2f61-266d-48d1-a1ee-cf7c3acc6b20", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new Action Connection returns \"Successfully created Action Connection\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:25:00.311Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions/connections/aaa11111-aa11-aa11-aaaa-aaaaaa111111", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"error deleting connection: rpc error: code = NotFound desc = connection not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an existing Action Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-01-06T22:02:36.636Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "123456789123", + "role": "MyRole", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection DELETE" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4b60345a-85b2-4417-94b2-72a9528b4060\",\"type\":\"action_connection\",\"attributes\":{\"integration\":{\"credentials\":{\"account_id\":\"123456789123\",\"role\":\"MyRole\",\"external_id\":\"3bceadebe70c4df7b8ec6abb789e08c0\",\"principal_id\":\"464622532012\",\"type\":\"AWSAssumeRole\"},\"type\":\"AWS\"},\"name\":\"Cassette Connection DELETE\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions/connections/4b60345a-85b2-4417-94b2-72a9528b4060", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions/connections/4b60345a-85b2-4417-94b2-72a9528b4060", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"error deleting connection: rpc error: code = NotFound desc = connection not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an existing Action Connection returns \"Successfully deleted Action Connection\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:25:00.458Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "123456789123", + "role": "MyRole", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection testdeleteanexistingactionconnectionreturnstheresourcewasdeletedsuccessfullyresponse1743020700" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c3c3d83b-c495-4c1b-bb1d-592825d21db0\",\"type\":\"action_connection\",\"attributes\":{\"integration\":{\"credentials\":{\"account_id\":\"123456789123\",\"external_id\":\"6183670d1ceb4278808cf2df9aa03a07\",\"principal_id\":\"464622532012\",\"role\":\"MyRole\",\"type\":\"AWSAssumeRole\"},\"type\":\"AWS\"},\"name\":\"Cassette Connection testdeleteanexistingactionconnectionreturnstheresourcewasdeletedsuccessfullyresponse1743020700\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions/connections/c3c3d83b-c495-4c1b-bb1d-592825d21db0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions/connections/c3c3d83b-c495-4c1b-bb1d-592825d21db0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"error deleting connection: rpc error: code = NotFound desc = connection not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an existing Action Connection returns \"The resource was deleted successfully.\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:25:01.150Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions/connections/bad-format", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"error connectionId not a valid UUID\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get an existing Action Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:25:01.247Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions/connections/aaa11111-aa11-aa11-aaaa-aaaaaa111111", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"error getting connection: rpc error: code = NotFound desc = connection not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get an existing Action Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:25:01.398Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions/connections/cb460d51-3c88-4e87-adac-d47131d0423d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cb460d51-3c88-4e87-adac-d47131d0423d\",\"type\":\"action_connection\",\"attributes\":{\"integration\":{\"credentials\":{\"account_id\":\"123456789123\",\"external_id\":\"909b33b1242748cfbef42f20011e2fa0\",\"principal_id\":\"464622532012\",\"role\":\"MyRoleUpdated\",\"type\":\"AWSAssumeRole\"},\"type\":\"AWS\"},\"name\":\"Cassette Connection\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an existing Action Connection returns \"Successfully get Action Connection\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-06-13T17:54:59.658Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions/app_key_registrations/not_valid_app_key_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"appKeyId\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get an existing App Key Registration returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-06-13T18:04:07.176Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions/app_key_registrations/aaa11111-aa11-aa11-aaaa-aaaaaa111111", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"detail\":\"app key not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get an existing App Key Registration returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-06-13T18:04:07.258Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions/app_key_registrations/b7feea52-994e-4714-a100-1bd9eff5aee1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b7feea52-994e-4714-a100-1bd9eff5aee1\",\"type\":\"app_key_registration\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an existing App Key Registration returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-06-13T18:04:07.439Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions/app_key_registrations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"b7feea52-994e-4714-a100-1bd9eff5aee1\",\"type\":\"app_key_registration\"}],\"meta\":{\"total\":1,\"total_filtered\":1}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List App Key Registrations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-06-13T17:55:00.012Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/actions/app_key_registrations/not_valid_app_key_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"appKeyId\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Register a new App Key returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-06-13T18:04:07.513Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/actions/app_key_registrations/b7feea52-994e-4714-a100-1bd9eff5aee1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b7feea52-994e-4714-a100-1bd9eff5aee1\",\"type\":\"app_key_registration\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + } + ], + "scenario": "Register a new App Key returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-06-13T17:55:00.202Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions/app_key_registrations/not_valid_app_key_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"appKeyId\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Unregister an App Key returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-06-13T18:04:07.614Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions/app_key_registrations/57cc69ae-9214-4ecc-8df8-43ecc1d92d99", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"detail\":\"app key not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Unregister an App Key returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:25:01.521Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "1", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/actions/connections/cb460d51-3c88-4e87-adac-d47131d0423d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"error creating connection: rpc error: code = InvalidArgument desc = multiple errors: 1 error occurred:\\n\\t* [error_code=8]: invalid UpdateCustomConnectionRequest.DataUpdate: embedded message failed validation | caused by: invalid CustomConnectionDataUpdate.Aws: embedded message failed validation | caused by: invalid CustomConnectionDataUpdate_AwsAuth.AssumeRole: embedded message failed validation | caused by: invalid CustomConnectionDataUpdate_AwsAuth_AssumeRole.AccountId: value does not match regex pattern \\\"^\\\\\\\\d{12}$\\\"\\n\\n\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update an existing Action Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:25:01.625Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "123456789123", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/actions/connections/aaa11111-aa11-aa11-aaaa-aaaaaa111111", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"error creating connection: rpc error: code = NotFound desc = connection not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update an existing Action Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Action Connection", + "frozen_at": "2025-03-26T20:25:01.719Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "integration": { + "credentials": { + "account_id": "123456789123", + "role": "MyRoleUpdated", + "type": "AWSAssumeRole" + }, + "type": "AWS" + }, + "name": "Cassette Connection" + }, + "type": "action_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/actions/connections/cb460d51-3c88-4e87-adac-d47131d0423d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cb460d51-3c88-4e87-adac-d47131d0423d\",\"type\":\"action_connection\",\"attributes\":{\"integration\":{\"credentials\":{\"account_id\":\"123456789123\",\"external_id\":\"909b33b1242748cfbef42f20011e2fa0\",\"principal_id\":\"464622532012\",\"role\":\"MyRoleUpdated\",\"type\":\"AWSAssumeRole\"},\"type\":\"AWS\"},\"name\":\"Cassette Connection\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update an existing Action Connection returns \"Successfully updated Action Connection\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/actions-datastores.json b/test-server-data/v2/actions-datastores.json new file mode 100644 index 0000000000..d46a436bbb --- /dev/null +++ b/test-server-data/v2/actions-datastores.json @@ -0,0 +1,1706 @@ +{ + "feature": "Actions Datastores", + "recordings": [ + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-29T19:31:22.205Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2b088869-d596-4103-9cff-038b5f81fc0c\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "item_keys": [] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/actions-datastores/2b088869-d596-4103-9cff-038b5f81fc0c/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"id\":\"61325aff-aaa7-4571-80e2-e87ed8ffb103\",\"title\":\"missing required field\",\"detail\":\"at least one item key is required\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/2b088869-d596-4103-9cff-038b5f81fc0c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2b088869-d596-4103-9cff-038b5f81fc0c\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Bulk delete datastore items returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-29T19:31:56.639Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "item_keys": [ + "nonexistent" + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/actions-datastores/c1eb5bb8-726a-4e59-9a61-ccbb26f95329/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"d53325f5-a7f3-4075-ace7-f8e22a25b72f\",\"title\":\"datastore not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Bulk delete datastore items returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-29T19:32:10.669Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c6bc5eee-04af-4d7e-97a5-57c9c4dc0b15\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "conflict_mode": "fail_on_conflict", + "values": [ + { + "data": "test-value", + "id": "test-key" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores/c6bc5eee-04af-4d7e-97a5-57c9c4dc0b15/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"8267c8c1-dfcd-4364-83e5-359c0ab302fc\",\"type\":\"items\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "item_keys": [ + "test-key" + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/actions-datastores/c6bc5eee-04af-4d7e-97a5-57c9c4dc0b15/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"8267c8c1-dfcd-4364-83e5-359c0ab302fc\",\"type\":\"items\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/c6bc5eee-04af-4d7e-97a5-57c9c4dc0b15", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c6bc5eee-04af-4d7e-97a5-57c9c4dc0b15\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Bulk delete datastore items returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-06T19:02:39.774Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"226df00a-c52e-41cd-9067-2b8c2b18649d\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "values": [ + { + "id": "cust_3141", + "name": "Johnathan" + }, + { + "badPrimaryKey": "key2", + "name": "Johnathan" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores/226df00a-c52e-41cd-9067-2b8c2b18649d/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"id\":\"b6f27ea4-0a0b-43fa-92ef-b023f8e06e2c\",\"title\":\"item key missing or invalid\",\"detail\":\"primary column \\\"id\\\" is missing\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/226df00a-c52e-41cd-9067-2b8c2b18649d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"226df00a-c52e-41cd-9067-2b8c2b18649d\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Bulk write datastore items returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-06T19:02:54.153Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "values": [ + { + "id": "cust_3141", + "name": "Johnathan" + }, + { + "id": "cust_3142", + "name": "Mary" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores/70b87c26-886f-497a-bd9d-09f53bc9b40c/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"b799bd68-cfb7-4c3d-8026-e0e00c27252f\",\"title\":\"datastore not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Bulk write datastore items returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:06.486Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6c0dbbfd-a905-4f79-9c2f-16cb4d9a56a7\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "values": [ + { + "id": "cust_3141", + "name": "Johnathan" + }, + { + "id": "cust_3142", + "name": "Mary" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores/6c0dbbfd-a905-4f79-9c2f-16cb4d9a56a7/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"8c6bba37-01d4-4b49-9d90-4ac909aa8c9f\",\"type\":\"items\"},{\"id\":\"285244c6-b07f-4502-928b-2444c1de31e7\",\"type\":\"items\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/6c0dbbfd-a905-4f79-9c2f-16cb4d9a56a7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6c0dbbfd-a905-4f79-9c2f-16cb4d9a56a7\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Bulk write datastore items returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:06.982Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "datastore-name", + "primary_column_name": "0invalid_key" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"id\":\"78cd887f-1a77-421f-915d-4bfebb3784c0\",\"title\":\"datastore configuration invalid\",\"detail\":\"column name '0invalid_key' does not start with a letter or an underscore\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create datastore returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:07.136Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "datastore-name", + "primary_column_name": "primaryKey" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"040e45f8-b354-4817-8c01-e5d2bb8aa55d\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/040e45f8-b354-4817-8c01-e5d2bb8aa55d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"040e45f8-b354-4817-8c01-e5d2bb8aa55d\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create datastore returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-06T19:03:07.134Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "item_key": "primaryKey" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/actions-datastores/invalid-uuid/items", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"id\":\"5adc82ee-f920-4fe9-aafc-10cabac28b68\",\"title\":\"invalid path parameter\",\"detail\":\"invalid datastoreId format in path\",\"source\":{\"parameter\":\"datastoreId\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete datastore item returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-06T19:03:18.396Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "item_key": "primaryKey" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/actions-datastores/70b87c26-886f-497a-bd9d-09f53bc9b40c/items", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"38b88198-bd74-4494-8571-f689b21cd216\",\"title\":\"datastore not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete datastore item returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:07.743Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ad9cc3b7-da9b-452d-8eab-a1e0a0a4e3d8\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "conflict_mode": "fail_on_conflict", + "values": [ + { + "data": "test-value", + "id": "test-key" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores/ad9cc3b7-da9b-452d-8eab-a1e0a0a4e3d8/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"8eee511f-e1bc-4a02-8805-1770bbdc4d2e\",\"type\":\"items\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "item_key": "test-key" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/actions-datastores/ad9cc3b7-da9b-452d-8eab-a1e0a0a4e3d8/items", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"8eee511f-e1bc-4a02-8805-1770bbdc4d2e\",\"type\":\"items\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/ad9cc3b7-da9b-452d-8eab-a1e0a0a4e3d8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ad9cc3b7-da9b-452d-8eab-a1e0a0a4e3d8\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Delete datastore item returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:08.448Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/invalid-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"id\":\"ee853859-fef5-4771-98bd-1af309286bc0\",\"title\":\"invalid path parameter\",\"detail\":\"invalid datastoreId format in path\",\"source\":{\"parameter\":\"datastoreId\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete datastore returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:08.615Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"8185f4a4-6cf6-4fde-a705-e248effe50fc\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/8185f4a4-6cf6-4fde-a705-e248effe50fc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"8185f4a4-6cf6-4fde-a705-e248effe50fc\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/8185f4a4-6cf6-4fde-a705-e248effe50fc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Delete datastore returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:09.096Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions-datastores/invalid-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"id\":\"51295683-ce69-48d6-8efb-4d877ff7e1b2\",\"title\":\"invalid path parameter\",\"detail\":\"invalid datastoreId format in path\",\"source\":{\"parameter\":\"datastoreId\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get datastore returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:09.218Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions-datastores/5bf53b3f-b230-4b35-ab1a-b39f2633eb22", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"d4aab06a-e0f9-4aff-9af4-bc99e2938ec3\",\"title\":\"datastore not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get datastore returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:09.394Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b06309e7-b4e9-4edb-a494-e5dd27d9525f\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions-datastores/b06309e7-b4e9-4edb-a494-e5dd27d9525f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b06309e7-b4e9-4edb-a494-e5dd27d9525f\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-09-05T22:54:09.545626Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-09-05T22:54:09.545626Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/b06309e7-b4e9-4edb-a494-e5dd27d9525f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b06309e7-b4e9-4edb-a494-e5dd27d9525f\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get datastore returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:09.863Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions-datastores/invalid-uuid/items", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"id\":\"d41a11e1-5db7-47bf-a542-b469768194dd\",\"title\":\"invalid path parameter\",\"detail\":\"invalid datastoreId format in path\",\"source\":{\"parameter\":\"datastoreId\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List datastore items returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:10.018Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions-datastores/3cfdd0b8-c490-4969-8d51-69add64a70ea/items", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"1fe0de3f-9e9c-475b-8cb4-6ea831aa167f\",\"title\":\"datastore not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "List datastore items returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:10.195Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"edfe7784-570c-4984-a4ae-883642b561d8\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "conflict_mode": "fail_on_conflict", + "values": [ + { + "data": "test-value", + "id": "test-key" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores/edfe7784-570c-4984-a4ae-883642b561d8/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"b20fe87b-f383-4afc-91ee-8fbc178942a2\",\"type\":\"items\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions-datastores/edfe7784-570c-4984-a4ae-883642b561d8/items", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"b20fe87b-f383-4afc-91ee-8fbc178942a2\",\"type\":\"items\",\"attributes\":{\"created_at\":\"2025-09-05T22:54:10.544424Z\",\"modified_at\":\"2025-09-05T22:54:10.544424Z\",\"org_id\":321813,\"primary_column_name\":\"id\",\"signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"voTcDho3mVIVzY8m98GyVfIib84TgbZoHSWzVQ09TFU=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1757112850,\\\\\\\"proof\\\\\\\":\\\\\\\"MGUCMDX1ijfjUxZK9hVzaMIxU+DociQUkZpkz7FD7tAiykeviU/66p2j1sDf4fYGK3agCwIxALarzvBhasIVGC46VgJuoC0MIkb5WyVWZKh50ist9OfVCQbbe4ZTKKvrW3pVQN34rg==\\\\\\\"}\\\",\\\"version\\\":1}\",\"store_id\":\"edfe7784-570c-4984-a4ae-883642b561d8\",\"value\":{\"data\":\"test-value\",\"id\":\"test-key\"}}}],\"meta\":{\"page\":{\"totalCount\":1,\"totalFilteredCount\":1,\"hasMore\":false},\"schema\":{\"primary_key\":\"id\",\"fields\":[{\"name\":\"id\",\"type\":\"STRING\"},{\"name\":\"data\",\"type\":\"JSON\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/edfe7784-570c-4984-a4ae-883642b561d8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"edfe7784-570c-4984-a4ae-883642b561d8\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List datastore items returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:10.870Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"0ff20856-6af3-4b8a-bfa6-26ffd7f61551\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:45:48.532915Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:45:48.532915Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"1c60feb8-f9ea-4b81-9f7d-b0ae97b10cc7\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-11T21:33:38.587401Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-11T21:33:38.587401Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"1d38b58d-d7ac-4a47-be37-6457cea49630\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T17:42:31.923013Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T17:42:31.923013Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"1d6f1853-eb64-43a3-a85b-b187853393c7\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:41:27.399846Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:41:27.399846Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"236e7736-44d9-40d0-985f-1ab73f25ad09\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T18:02:29.490155Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T18:02:29.490155Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"2b0704ce-1efd-4485-976b-f272ea39a9b9\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T14:02:11.360529Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T14:02:11.360529Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"2bccd24d-715d-473f-8771-eff9370d14b9\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-11T22:19:07.258146Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-11T22:19:07.258146Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"31af63e6-8363-45a4-ad6b-d92ec256b005\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T03:27:41.246238Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T03:27:41.246238Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"3d4f33dd-41af-4b4e-94e0-a142cd47f83d\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T17:58:55.363703Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T17:58:55.363703Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"44f23b41-3925-4620-b5ad-641c0cac57b9\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T17:30:39.520162Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T17:30:39.520162Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"457cae9c-32ad-4598-9ac0-489c7d4fc20b\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T03:07:54.05107Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T03:07:54.05107Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"55a92f3e-6804-4f45-9ecf-7c09cef155ed\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:33:42.534986Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:33:42.534987Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"5b3664f0-faaa-4f1b-b067-f521aa156516\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:35:02.776449Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:35:02.776449Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"7059cb1d-20f6-44e6-a5ee-8eeb19b799e2\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T17:24:03.907384Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T17:24:03.907384Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"7ef9ca96-be6d-435c-b452-9e562beedb4a\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T17:27:38.411129Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T17:27:38.411129Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"8204dff8-7335-4e33-a28b-8f8a0dd47ad0\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T14:08:19.382083Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T14:08:19.382083Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"84e4ca89-9266-4fb3-a552-e6da080abc3f\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T18:11:58.405584Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T18:11:58.405584Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"858032d2-1c2f-4ac1-a434-de5773fc14c2\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T02:55:43.831724Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T02:55:43.831724Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"89c95311-d63a-4535-be9d-92a3912ec074\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-11T21:24:28.298273Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-11T21:24:28.298273Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"8b0fb519-c55f-45d5-b532-1645bed41a92\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:54:02.27972Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:54:02.27972Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"99366571-d1de-4a6f-9213-5c77a5468de9\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:50:10.748216Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:50:10.748217Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"9d9d7162-cfd2-40f1-b413-d2df89a5eba9\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T03:28:50.178882Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T03:28:50.178882Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"a751bca4-54eb-4739-a4a3-4779650f9fad\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T03:45:28.881437Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T03:45:28.881437Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"a78fe3e0-4325-459f-aca4-69c084ab818d\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:22:37.043971Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:22:37.043972Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"aec831f3-cbc3-411f-8ef0-23fdb834d549\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T17:36:12.428171Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T17:36:12.428171Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"b55b6d33-da75-4432-85fc-e0f0a28b4826\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:38:13.641577Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:38:13.641578Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"bd5e4649-674b-444f-850c-74625b0be9ab\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T18:03:00.425892Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T18:03:00.425892Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"be6825fd-82d5-4d9d-8db5-cc674404b710\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T03:01:57.110842Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T03:01:57.110843Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"c412c4b3-7d3d-4ac3-ace6-99abfc0a8567\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T02:57:09.998039Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T02:57:09.998039Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"c698d221-5dc9-44d3-ae61-a6a422d204ab\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T03:18:11.876246Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T03:18:11.876246Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"cd915e84-87b1-495d-a868-9c24578696e3\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:36:53.994588Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:36:53.994588Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"cfadef50-963b-45fa-8334-f33094ca6d76\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T14:29:33.425183Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T14:29:33.425183Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"d018730c-26cb-47af-ba93-3604d8a8ad74\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T17:35:23.034496Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T17:35:23.034496Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"d14f84a9-9a26-4b0d-bd6d-f7baf8c9a9ae\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T17:30:07.452804Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T17:30:07.452804Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"d3dedf8d-6620-4dec-bb8b-b0fa53b19135\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:45:16.371907Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:45:16.371907Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"d8cdfbae-8ec9-4c50-8459-5d55a7b5a945\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T17:27:01.039091Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T17:27:01.039091Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"de765300-fca1-4ab2-a441-a6633cd7f976\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T14:11:34.405607Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T14:11:34.405607Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"e174ff20-eff7-40b9-a472-b8ce2a8492d8\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-11T20:40:08.137413Z\",\"creator_user_id\":2320499,\"creator_user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"description\":\"\",\"modified_at\":\"2025-08-11T20:40:08.137413Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"ea68e1d7-6e4d-40d2-a67f-f5c3c54aab2b\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T03:03:21.673996Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T03:03:21.673996Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"ee56b789-56b6-481c-851b-d0c14a7228d4\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T13:44:50.073893Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T13:44:50.073894Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}},{\"id\":\"f5a8ac6e-0cfb-44ad-b71d-28fd40a210a6\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-08-08T03:36:29.121686Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-08-08T03:36:29.121686Z\",\"name\":\"Test Datastore\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List datastores returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:11.057Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "item_changes": {}, + "item_key": "" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/actions-datastores/invalid-uuid/items", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"id\":\"f88d0b88-0d55-482b-9a90-3556ef7d6b4a\",\"title\":\"invalid path parameter\",\"detail\":\"invalid datastoreId format in path\",\"source\":{\"parameter\":\"datastoreId\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update datastore item returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:11.195Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "item_changes": {}, + "item_key": "itemKey" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/actions-datastores/3cfdd0b8-c490-4969-8d51-69add64a70ea/items", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"d0d6adeb-c5cf-4dce-98d9-532cbc386b09\",\"title\":\"datastore not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update datastore item returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:11.331Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6d5556c8-04d7-45dc-9a08-cd671c4e519a\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "conflict_mode": "fail_on_conflict", + "values": [ + { + "data": "test-value", + "id": "test-key" + } + ] + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores/6d5556c8-04d7-45dc-9a08-cd671c4e519a/items/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"94c791a3-9cc2-44be-857e-95c11eb1eefd\",\"type\":\"items\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "item_changes": {}, + "item_key": "test-key" + }, + "type": "items" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/actions-datastores/6d5556c8-04d7-45dc-9a08-cd671c4e519a/items", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"94c791a3-9cc2-44be-857e-95c11eb1eefd\",\"type\":\"items\",\"attributes\":{\"created_at\":\"2025-09-05T22:54:11.652289Z\",\"modified_at\":\"2025-09-05T22:54:11.793763Z\",\"org_id\":321813,\"primary_column_name\":\"id\",\"signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"voTcDho3mVIVzY8m98GyVfIib84TgbZoHSWzVQ09TFU=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1757112851,\\\\\\\"proof\\\\\\\":\\\\\\\"MGQCMGTEegXzPFeiOMj3tizwKvIXhJ2jLwzZW240N+HDLsvK2QIs1PD+6n/b15rdnABaigIwKYLG3PRtBKd8hV7eF4r9X5vM9fJvCyMPPi05K86m3lm22oxWEsDvLdgx0PxrojuT\\\\\\\"}\\\",\\\"version\\\":1}\",\"store_id\":\"6d5556c8-04d7-45dc-9a08-cd671c4e519a\",\"value\":{\"data\":\"test-value\",\"id\":\"test-key\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/6d5556c8-04d7-45dc-9a08-cd671c4e519a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6d5556c8-04d7-45dc-9a08-cd671c4e519a\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update datastore item returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:11.950Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": {}, + "id": "invalid-uuid", + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/actions-datastores/invalid-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"id\":\"22fc6f64-67c9-44ad-b6e0-094dd77c7690\",\"title\":\"invalid path parameter\",\"detail\":\"invalid datastoreId format in path\",\"source\":{\"parameter\":\"datastoreId\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update datastore returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:12.100Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "updated name" + }, + "id": "c1eb5bb8-726a-4e59-9a61-ccbb26f95329", + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/actions-datastores/c1eb5bb8-726a-4e59-9a61-ccbb26f95329", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"9738106a-d613-4be1-ad98-88760c9e0e9f\",\"title\":\"datastore not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update datastore returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Actions Datastores", + "frozen_at": "2025-09-05T22:54:12.245Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "", + "name": "Test Datastore", + "org_access": "contributor", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/actions-datastores", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"785f6031-19e8-4dda-8ccc-f4e700ae5c99\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "updated name" + }, + "id": "785f6031-19e8-4dda-8ccc-f4e700ae5c99", + "type": "datastores" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/actions-datastores/785f6031-19e8-4dda-8ccc-f4e700ae5c99", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"785f6031-19e8-4dda-8ccc-f4e700ae5c99\",\"type\":\"datastores\",\"attributes\":{\"created_at\":\"2025-09-05T22:54:12.386695Z\",\"creator_user_id\":1445416,\"creator_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"\",\"modified_at\":\"2025-09-05T22:54:12.575024Z\",\"name\":\"updated name\",\"org_id\":321813,\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/actions-datastores/785f6031-19e8-4dda-8ccc-f4e700ae5c99", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"785f6031-19e8-4dda-8ccc-f4e700ae5c99\",\"type\":\"datastores\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update datastore returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/agentless-scanning.json b/test-server-data/v2/agentless-scanning.json new file mode 100644 index 0000000000..203dcde0a5 --- /dev/null +++ b/test-server-data/v2/agentless-scanning.json @@ -0,0 +1,2103 @@ +{ + "feature": "Agentless Scanning", + "recordings": [ + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:53.448Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "arn": "arn:aws:lambda:us-west-2:123456789012:function:my-function" + }, + "type": "aws_resource" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/ondemand/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"438046ce-01cd-4ae5-b117-ff971e6fa449\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T22:21:53.957627Z\",\"status\":\"QUEUED\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + } + ], + "scenario": "Create AWS on demand task returns \"AWS on demand task created successfully.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:54.011Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "arn": "invalid-arn" + }, + "type": "aws_resource" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/ondemand/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid aws arn\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create AWS on demand task returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2026-04-28T07:51:17.007Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compliance_host": true, + "lambda": true, + "sensitive_data": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "123", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"the provided Aws account id is not valid\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create AWS scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2026-04-28T07:51:17.457Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compliance_host": true, + "lambda": false, + "sensitive_data": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000002", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"detail\":\"aws scan options already exist for account 000000000002\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + } + ], + "scenario": "Create AWS scan options returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2026-07-17T06:38:46.211Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "function": true, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "12345678-90ab-cdef-1234-567890abcdef", + "type": "azure_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"12345678-90ab-cdef-1234-567890abcdef\",\"type\":\"azure_scan_options\",\"attributes\":{\"compliance_host\":false,\"function\":true,\"vuln_containers_os\":true,\"vuln_host_os\":true}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/agentless_scanning/accounts/azure/12345678-90ab-cdef-1234-567890abcdef", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Azure scan options returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2026-07-17T06:38:47.064Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "cloud_function": true, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "new-project", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"new-project\",\"type\":\"gcp_scan_options\",\"attributes\":{\"cloud_function\":true,\"compliance_host\":false,\"vuln_containers_os\":true,\"vuln_host_os\":true}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/agentless_scanning/accounts/gcp/new-project", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create GCP scan options returns \"Agentless scan options enabled successfully.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:56.297Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "no", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"project id must be 6-30 characters, got 2\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create GCP scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:56.606Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "api-spec-test", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"detail\":\"gcp scan options already exist for project api-spec-test\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + } + ], + "scenario": "Create GCP scan options returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:56.904Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/agentless_scanning/accounts/aws/incorrectId", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid AWS account ID\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete AWS scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:57.229Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000005", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no aws scan options found for account 000000000005\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete AWS scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:57.548Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/agentless_scanning/accounts/gcp/no", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"project id must be 6-30 characters, got 2\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete GCP scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:57.904Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/agentless_scanning/accounts/gcp/nonexistent-project-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no gcp scan options found for project nonexistent-project-id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete GCP scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:48.900Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/ondemand/aws/invalid-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"missing or invalid url parameter 'taskId', expected uuid format '6d09294c-9ad9-42fd-a759-a0c1599b4843'\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get AWS On Demand task by id returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:49.356Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/ondemand/aws/00000000-0000-0000-824a-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no task found with id '00000000-0000-0000-824a-000000000000'\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get AWS On Demand task by id returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:49.868Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/ondemand/aws/63d6b4f5-e5d0-4d90-824a-9580f05f026a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"63d6b4f5-e5d0-4d90-824a-9580f05f026a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-03-05T14:24:46.915915Z\",\"status\":\"ABORTED\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get AWS On Demand task by id returns \"OK.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:50.346Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/ondemand/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"047477bd-108a-4967-9160-82fb7042483f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T14:43:13.789326Z\",\"status\":\"QUEUED\"}},{\"id\":\"0e8f3acf-ebe4-4595-9004-953d121974cd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T14:21:42.340934Z\",\"status\":\"QUEUED\"}},{\"id\":\"0712b553-2d37-443b-bee7-a444f020de96\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T13:31:42.821141Z\",\"status\":\"ABORTED\"}},{\"id\":\"58814b56-abdb-405d-bbbe-1a720c75eb8c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T10:21:42.334817Z\",\"status\":\"ABORTED\"}},{\"id\":\"d34c4736-eb2b-4a4c-88bb-8632073f1d04\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T06:21:42.276569Z\",\"status\":\"ABORTED\"}},{\"id\":\"e49638cc-d2e1-4b7a-abf2-2735fc5a1bce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T05:16:47.182188Z\",\"status\":\"ABORTED\"}},{\"id\":\"f491f902-f407-40a0-81f0-8dc6a56d9b57\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T04:14:15.928411Z\",\"status\":\"ABORTED\"}},{\"id\":\"45005dfd-ae63-4b26-8e33-570447d46140\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T03:26:02.73352Z\",\"status\":\"ABORTED\"}},{\"id\":\"4a1f4a02-8c7e-474d-a683-d513fcb2f848\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T02:21:42.300805Z\",\"status\":\"ABORTED\"}},{\"id\":\"1a0ec76b-4021-45ba-b669-03b17666be6b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T00:39:32.849567Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae51a692-26c4-4f0b-901c-976d46992e65\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T22:49:33.559208Z\",\"status\":\"ABORTED\"}},{\"id\":\"a55bbb58-b9e6-4f86-a1d6-92d99633a3f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T22:21:42.331721Z\",\"status\":\"ABORTED\"}},{\"id\":\"63683464-1e71-4268-bba2-fe29f8d49ecc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T18:21:42.293925Z\",\"status\":\"ABORTED\"}},{\"id\":\"a3134cbf-abf2-4dea-ab69-07e45e56ef3e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T14:21:42.282482Z\",\"status\":\"ABORTED\"}},{\"id\":\"bd94f9d0-2613-4c85-89ad-83ebc1899ac2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T10:21:42.281644Z\",\"status\":\"ABORTED\"}},{\"id\":\"41b58753-0d9e-4d50-9dd6-7247a514becb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T06:21:42.283559Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b6dcb9d-2f85-442a-908f-70f9a5cfb762\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T05:15:47.659307Z\",\"status\":\"ABORTED\"}},{\"id\":\"3926b302-f659-4966-9668-3c4e1673c57a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T04:16:10.888063Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6087a68-1ad6-491d-94c2-b75acbebfdda\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T03:19:13.945269Z\",\"status\":\"ABORTED\"}},{\"id\":\"5d0510e6-8f38-4d44-b4c3-0643be538270\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T02:21:42.275046Z\",\"status\":\"ABORTED\"}},{\"id\":\"0977a0e5-c191-4e42-82b9-b0f4fa5bd3b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T00:37:11.195715Z\",\"status\":\"ABORTED\"}},{\"id\":\"5c15f1f1-0fff-4ae5-955e-cd682ff67d7f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T22:21:42.296185Z\",\"status\":\"ABORTED\"}},{\"id\":\"04a4383c-f659-4d86-8133-0d0495ce0a58\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T18:21:42.266654Z\",\"status\":\"ABORTED\"}},{\"id\":\"bfa7fe81-a5a6-4c02-aa2e-059e653b53c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T14:21:42.353261Z\",\"status\":\"ABORTED\"}},{\"id\":\"e1403e3e-141a-410f-bc7c-f20b0d28b371\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T11:10:29.715947Z\",\"status\":\"ABORTED\"}},{\"id\":\"82bfeda3-be56-4375-a8fd-e63a9b0540f0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T10:21:42.397401Z\",\"status\":\"ABORTED\"}},{\"id\":\"1aa86a0f-ef7d-48ea-9c84-58b803e7dce4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T06:21:42.36379Z\",\"status\":\"ABORTED\"}},{\"id\":\"57c3ef42-13ed-4c9c-b85c-9e43c0121778\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T05:15:53.636735Z\",\"status\":\"ABORTED\"}},{\"id\":\"468591cd-eaad-4390-aada-721001b23d63\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T04:17:18.541616Z\",\"status\":\"ABORTED\"}},{\"id\":\"a42ce943-8bab-4228-a893-75940a4c06e6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T03:30:14.232095Z\",\"status\":\"ABORTED\"}},{\"id\":\"f210ae5c-144c-4dbc-b52d-8de637d8cd0a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T02:21:42.294626Z\",\"status\":\"ABORTED\"}},{\"id\":\"e95c136d-8ce5-4074-b5e5-48c9adf407c6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T00:37:28.720495Z\",\"status\":\"ABORTED\"}},{\"id\":\"b10b4b66-4fc5-486e-8ad3-a8241a1661fe\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T22:21:42.339903Z\",\"status\":\"ABORTED\"}},{\"id\":\"9700521c-c1d0-4b53-98f8-a502643703af\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T21:12:44.230761Z\",\"status\":\"ABORTED\"}},{\"id\":\"1420b9b1-7457-44b0-bfc9-499f43afc4b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T21:11:43.12124Z\",\"status\":\"ABORTED\"}},{\"id\":\"5cce0415-5b7f-4079-bedb-5616188ff5e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T21:10:35.817197Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd84e01b-d606-4803-b695-5d1935cc37ad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T21:00:46.996958Z\",\"status\":\"ABORTED\"}},{\"id\":\"9a38140a-af2a-4aa7-bacb-91e470b4b0f2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T20:46:24.913411Z\",\"status\":\"ABORTED\"}},{\"id\":\"935618b3-63dc-4d38-8f9c-6d9771a8c4bf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T20:43:36.662417Z\",\"status\":\"ABORTED\"}},{\"id\":\"65c7e219-8150-4af6-96aa-677265f00de1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T20:31:02.634034Z\",\"status\":\"ABORTED\"}},{\"id\":\"8b168004-8d36-4ba7-bac0-f1f77b4b77c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T20:29:23.985348Z\",\"status\":\"ABORTED\"}},{\"id\":\"3be186e9-6da1-466d-98aa-65b4c4a57877\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T19:48:15.916226Z\",\"status\":\"ABORTED\"}},{\"id\":\"ab24d6bd-c2fe-4721-8fbc-ed5a8edcabb0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T19:17:38.577955Z\",\"status\":\"ABORTED\"}},{\"id\":\"650a02de-e6d0-413f-8882-a800664cf832\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T18:21:42.319004Z\",\"status\":\"ABORTED\"}},{\"id\":\"504f2931-15c8-41eb-87c4-54082dba83cb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T14:21:42.326535Z\",\"status\":\"ABORTED\"}},{\"id\":\"96120a75-c08f-4785-b7b1-4757609a0b98\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T11:11:02.098602Z\",\"status\":\"ABORTED\"}},{\"id\":\"da07a4e7-387a-4e3d-b275-51f0c828d8fc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T10:21:42.26577Z\",\"status\":\"ABORTED\"}},{\"id\":\"957d15e6-41b0-4394-83b5-c6fbb71a9699\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T06:21:42.312275Z\",\"status\":\"ABORTED\"}},{\"id\":\"5f6f6a58-064a-485b-b897-5212c16436b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T05:16:05.920514Z\",\"status\":\"ABORTED\"}},{\"id\":\"229fcfc7-498e-4fd2-a977-7721e22ddc91\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T04:18:17.950942Z\",\"status\":\"ABORTED\"}},{\"id\":\"6f8a10ab-b695-410d-a115-bec04b13c8ca\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T03:21:48.493523Z\",\"status\":\"ABORTED\"}},{\"id\":\"0d4e7329-2899-48f1-9275-741cdfdf68c0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T02:21:42.270474Z\",\"status\":\"ABORTED\"}},{\"id\":\"65ec4764-32ab-4101-afe2-45e29c11d6bc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T00:36:48.431616Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2cf3620-1321-439b-89aa-475f91c25106\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T22:21:42.331863Z\",\"status\":\"ABORTED\"}},{\"id\":\"45d76f26-22dc-4378-afe0-5da036c18d3e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T18:21:42.284615Z\",\"status\":\"ABORTED\"}},{\"id\":\"d721ec4a-017a-4d7c-970b-c2f96ac37717\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T14:21:42.323244Z\",\"status\":\"ABORTED\"}},{\"id\":\"13c04992-87d6-4313-96ba-42864eae19bb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T11:11:40.88883Z\",\"status\":\"ABORTED\"}},{\"id\":\"ade4d9ba-dd90-4f59-8b62-0d35b0d00fea\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T10:21:42.3317Z\",\"status\":\"ABORTED\"}},{\"id\":\"11373edd-d764-4d63-8163-86b759ac3893\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T06:21:42.298908Z\",\"status\":\"ABORTED\"}},{\"id\":\"7422a667-2eba-45c5-93bd-c4395fc620c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T05:17:35.013582Z\",\"status\":\"ABORTED\"}},{\"id\":\"cfb03990-8300-4a85-9cc8-7a2da8cd704f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T04:15:35.611312Z\",\"status\":\"ABORTED\"}},{\"id\":\"68a92ef2-0d84-4967-9985-4d34173bbdf0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T03:25:25.918843Z\",\"status\":\"ABORTED\"}},{\"id\":\"7875e530-cd70-4c1c-81f9-3f38c5d1eb3f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T02:21:42.266337Z\",\"status\":\"ABORTED\"}},{\"id\":\"3ea33a15-2c67-416b-9249-17d8aa87060e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T00:37:23.336764Z\",\"status\":\"ABORTED\"}},{\"id\":\"10313224-1e36-4cd2-9132-394b3f3974f0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T22:21:42.275519Z\",\"status\":\"ABORTED\"}},{\"id\":\"cdd4846b-3958-4927-a06c-8595e975da30\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T18:21:42.268172Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b3a6241-6ab4-4861-8f97-1e72e4a9fd15\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T14:21:42.253591Z\",\"status\":\"ABORTED\"}},{\"id\":\"c072b7f3-1841-437f-989c-8e6c665d15b2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T11:10:01.640652Z\",\"status\":\"ABORTED\"}},{\"id\":\"71101481-02b9-4aa5-843c-a455387a8405\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T10:21:42.255284Z\",\"status\":\"ABORTED\"}},{\"id\":\"f75986c8-3e24-4e31-9a5d-60db20c3d4d6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T06:21:42.329067Z\",\"status\":\"ABORTED\"}},{\"id\":\"cfa9d08c-61a2-4016-9019-677cab84941f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T05:17:03.166017Z\",\"status\":\"ABORTED\"}},{\"id\":\"910777a7-c071-4613-b03d-9ee0c7edd1a5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T04:16:46.519653Z\",\"status\":\"ABORTED\"}},{\"id\":\"6f0b57df-5f4a-4c9e-87d4-f4bf856466d7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T03:26:21.974111Z\",\"status\":\"ABORTED\"}},{\"id\":\"037ff11c-979c-4572-9267-d59445b127f8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T02:21:42.331561Z\",\"status\":\"ABORTED\"}},{\"id\":\"83c07aa9-522f-4317-a3e2-6dd198eb9e51\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T00:37:14.390849Z\",\"status\":\"ABORTED\"}},{\"id\":\"dea9d5fd-cc63-42ef-8fc0-55a2527f5fe8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T22:21:43.376134Z\",\"status\":\"ABORTED\"}},{\"id\":\"130834af-a7cf-4b6e-ba19-f7c7e9162280\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T18:21:42.278826Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d623bc8-2d07-44ce-897b-45322a02a4fe\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T14:21:42.352883Z\",\"status\":\"ABORTED\"}},{\"id\":\"53321d44-e29c-4c14-8439-2ed40aab9976\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T11:09:56.933722Z\",\"status\":\"ABORTED\"}},{\"id\":\"d9b7e90c-1c9a-4d58-8030-0f019d589769\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T10:21:42.342815Z\",\"status\":\"ABORTED\"}},{\"id\":\"04976e4d-8bec-447a-b9b7-d4ca0215cfaf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T06:21:42.277354Z\",\"status\":\"ABORTED\"}},{\"id\":\"5ec1ea88-e395-4b91-95cf-751ee81e87ef\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T04:16:43.842527Z\",\"status\":\"ABORTED\"}},{\"id\":\"84ce07db-7158-4901-9089-a0ce0441ed0e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T03:25:27.843985Z\",\"status\":\"ABORTED\"}},{\"id\":\"c584771c-7631-40e9-9b57-50095ffd571c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T02:21:42.294447Z\",\"status\":\"ABORTED\"}},{\"id\":\"eb8f92a3-3f48-4c96-b785-537f5a1863f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T00:38:13.826105Z\",\"status\":\"ABORTED\"}},{\"id\":\"7f75e32c-0b96-4751-be2e-c324678ed22b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T22:21:42.279486Z\",\"status\":\"ABORTED\"}},{\"id\":\"dce37359-9d03-4b61-9a17-f14a4d7fa69c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T18:21:42.285174Z\",\"status\":\"ABORTED\"}},{\"id\":\"69e95b65-e28e-49a8-af6f-5587e364b955\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T14:21:42.269723Z\",\"status\":\"ABORTED\"}},{\"id\":\"1847829f-0bd4-4d08-a09e-019898ff1069\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T10:21:42.266885Z\",\"status\":\"ABORTED\"}},{\"id\":\"b749b0c3-0cdd-46bb-ba90-7f88a90ec231\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T06:21:42.292377Z\",\"status\":\"ABORTED\"}},{\"id\":\"14723d3f-765d-4ddf-9250-256cfc4beddc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T05:16:01.551969Z\",\"status\":\"ABORTED\"}},{\"id\":\"8ca12c32-17a4-4196-98f9-f13d1f7aabd0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T04:16:11.226328Z\",\"status\":\"ABORTED\"}},{\"id\":\"95545fe4-3905-48d9-9f77-b4f14c03a334\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T03:33:05.390474Z\",\"status\":\"ABORTED\"}},{\"id\":\"838468f1-1183-4825-ab89-8c9abc6ee69e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T02:21:42.272772Z\",\"status\":\"ABORTED\"}},{\"id\":\"b0efcfd2-694c-4cc5-a54f-40207d462dd6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T00:40:50.310568Z\",\"status\":\"ABORTED\"}},{\"id\":\"41c6b353-c794-402f-88e7-863797ca54d4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T22:21:42.286996Z\",\"status\":\"ABORTED\"}},{\"id\":\"a5f37849-6ca8-4319-a59c-7c873c87d964\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T18:21:42.282504Z\",\"status\":\"ABORTED\"}},{\"id\":\"15236908-f91a-4b46-923e-060204222221\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T14:21:42.281868Z\",\"status\":\"ABORTED\"}},{\"id\":\"0655b06f-db88-46ea-a74d-a638991460ab\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T10:21:42.277189Z\",\"status\":\"ABORTED\"}},{\"id\":\"cdcd60de-390c-4bcc-ba42-a00eecc1f20c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T06:21:42.262707Z\",\"status\":\"ABORTED\"}},{\"id\":\"b8182ce3-a245-44fc-af27-785d7284b9fc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T05:15:43.455521Z\",\"status\":\"ABORTED\"}},{\"id\":\"74f4d15d-158d-4af8-99e1-f33a01ec2d97\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T04:16:02.826912Z\",\"status\":\"ABORTED\"}},{\"id\":\"8f54d8b8-ce5a-4fde-a587-4a81c896e3b2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T03:14:23.978885Z\",\"status\":\"ABORTED\"}},{\"id\":\"1da3b164-19bb-420d-8555-6e0394b6fbbc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T02:21:42.268053Z\",\"status\":\"ABORTED\"}},{\"id\":\"90c661c1-9bb6-482e-8109-8b3f9e56d532\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T00:35:13.970175Z\",\"status\":\"ABORTED\"}},{\"id\":\"c950e04b-5134-4080-9a85-3827bc23a320\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T22:21:42.280547Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac17ed1b-9e24-4e17-9db9-ad0f911a6634\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T18:21:42.268974Z\",\"status\":\"ABORTED\"}},{\"id\":\"e21a426d-e9e8-4763-870c-9f6701afca42\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T14:21:42.277288Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a3a5d3f-d892-4c00-b4ff-3f4d75f6e8d0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T11:11:35.671506Z\",\"status\":\"ABORTED\"}},{\"id\":\"48410360-6bc3-42b1-8644-440723918a2a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T10:21:42.258764Z\",\"status\":\"ABORTED\"}},{\"id\":\"c2498bd2-8d99-4990-bc95-d7737474a08d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T06:21:42.280286Z\",\"status\":\"ABORTED\"}},{\"id\":\"1653bbd1-0fff-4ce6-8c81-03d7c08882d2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T05:15:37.589672Z\",\"status\":\"ABORTED\"}},{\"id\":\"798aa4e6-00e7-45c0-b150-158c138df4a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T04:15:20.185611Z\",\"status\":\"ABORTED\"}},{\"id\":\"4613b175-ad5a-4e09-b79c-e6456f28310e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T03:18:37.836335Z\",\"status\":\"ABORTED\"}},{\"id\":\"c3b03bc5-04ed-42e0-8af5-8ac62ae08bfb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T02:35:35.697282Z\",\"status\":\"ABORTED\"}},{\"id\":\"a7f2d2f0-4c42-42d3-a4de-b20a14e9c855\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T02:21:42.266961Z\",\"status\":\"ABORTED\"}},{\"id\":\"752938f3-0fe4-46ba-a6d5-66351b822b0e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T00:36:36.379336Z\",\"status\":\"ABORTED\"}},{\"id\":\"2e5357a1-0db0-4b73-adee-de52be44ee28\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T22:21:42.287618Z\",\"status\":\"ABORTED\"}},{\"id\":\"c795e794-3e75-470c-b6ee-41be18f4146d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T18:21:42.27259Z\",\"status\":\"ABORTED\"}},{\"id\":\"52610d8a-31ff-4295-95aa-2e91f8a57996\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T14:21:42.403194Z\",\"status\":\"ABORTED\"}},{\"id\":\"16c78104-c1d3-4c02-9962-aff50b5a9b92\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T11:11:14.805797Z\",\"status\":\"ABORTED\"}},{\"id\":\"91ad5823-91e8-462a-a0f0-05b56c19e5bb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T10:21:42.27853Z\",\"status\":\"ABORTED\"}},{\"id\":\"47bf1703-9489-4030-b048-f64499a4f6b6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T06:21:42.32967Z\",\"status\":\"ABORTED\"}},{\"id\":\"7d018d55-84cf-496f-91cb-b70143c1511b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T05:16:22.309364Z\",\"status\":\"ABORTED\"}},{\"id\":\"f40855a0-9353-48e7-ad0d-90ff61b391a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T04:14:42.884451Z\",\"status\":\"ABORTED\"}},{\"id\":\"c25be964-2f5c-40a6-96ec-556cbbba81b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T03:18:52.411674Z\",\"status\":\"ABORTED\"}},{\"id\":\"5625e2e8-6a24-49ae-8af9-36c52afa655b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T02:36:28.692247Z\",\"status\":\"ABORTED\"}},{\"id\":\"01428a17-2396-4be9-9634-0cdf2f47a4a2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T02:21:42.337641Z\",\"status\":\"ABORTED\"}},{\"id\":\"92491b09-129a-4cb4-ba4e-0c05483448c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T00:37:18.695311Z\",\"status\":\"ABORTED\"}},{\"id\":\"43a513de-88cc-4041-b5d1-71f00b19ace9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T22:21:42.690517Z\",\"status\":\"ABORTED\"}},{\"id\":\"c1f2ffa9-ef7d-4bf8-a1ad-41abb617329b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T18:21:42.358395Z\",\"status\":\"ABORTED\"}},{\"id\":\"c3e6af19-27cd-4b9e-b1d0-4604361a5b8e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T14:21:42.362704Z\",\"status\":\"ABORTED\"}},{\"id\":\"ed2a1821-ae7f-46ce-ad20-5923912e1711\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T11:10:02.410154Z\",\"status\":\"ABORTED\"}},{\"id\":\"63c42075-0795-412c-8897-18956809cf38\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T10:21:42.284744Z\",\"status\":\"ABORTED\"}},{\"id\":\"222c71a2-256f-48ff-b2d4-fce6b8c444f0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T06:21:42.416009Z\",\"status\":\"ABORTED\"}},{\"id\":\"7882ac3c-c5a3-4ae9-9a1c-3b48324b789c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T05:16:46.520614Z\",\"status\":\"ABORTED\"}},{\"id\":\"3301c6cb-fe11-4654-9351-4581943859c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T04:15:33.193187Z\",\"status\":\"ABORTED\"}},{\"id\":\"8d959d9e-bb9a-4207-b9ec-ed40dce38c10\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T03:30:37.124228Z\",\"status\":\"ABORTED\"}},{\"id\":\"47fea2f1-10b1-4e1f-9cbe-4b24a26d0c0b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T02:21:42.28341Z\",\"status\":\"ABORTED\"}},{\"id\":\"def0e511-b141-4d46-9dc4-8b8250202f1c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T00:42:07.129343Z\",\"status\":\"ABORTED\"}},{\"id\":\"864b2379-ef1c-4cde-9bf6-8c2562e5a173\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T22:21:42.506735Z\",\"status\":\"ABORTED\"}},{\"id\":\"3bc298b5-cf98-4538-9cb0-bc088f00e58a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T18:21:42.261424Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d4ebd6b-1fe1-4945-934f-7f8960511fd1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T14:21:42.302206Z\",\"status\":\"ABORTED\"}},{\"id\":\"33465196-a917-4d2c-96ab-e86764eb5470\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T11:09:51.935537Z\",\"status\":\"ABORTED\"}},{\"id\":\"226006ed-5142-45c0-81e4-03e9aa3fc24c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T10:21:42.437249Z\",\"status\":\"ABORTED\"}},{\"id\":\"65c5f1f4-5898-4e55-9c5e-8921de32d74c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T06:21:42.332942Z\",\"status\":\"ABORTED\"}},{\"id\":\"7b574e5d-16ea-4daa-9a33-85f40286b4c0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T05:16:27.551463Z\",\"status\":\"ABORTED\"}},{\"id\":\"ed2cbcc5-84b7-4b81-b56f-2fde0a21eb56\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T04:15:22.101512Z\",\"status\":\"ABORTED\"}},{\"id\":\"19163851-b252-4495-9113-d0b5f1e4fc94\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T03:31:23.948904Z\",\"status\":\"ABORTED\"}},{\"id\":\"e7872378-1c4f-4049-8a7d-fd0c0dc0b27c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T02:21:42.276416Z\",\"status\":\"ABORTED\"}},{\"id\":\"0e708aa9-d2c9-4d34-803e-c7adf22b0373\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T00:39:00.289035Z\",\"status\":\"ABORTED\"}},{\"id\":\"d62d5695-4a34-47c6-bca0-fc45a4963736\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T22:21:42.330779Z\",\"status\":\"ABORTED\"}},{\"id\":\"86faee9d-c784-401e-8870-bd0ba49be6c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T18:21:42.322634Z\",\"status\":\"ABORTED\"}},{\"id\":\"58966b71-5135-4830-a358-fa552f90c4a2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T14:21:42.362174Z\",\"status\":\"ABORTED\"}},{\"id\":\"84e28efc-839b-453e-80ac-8121cdf19b42\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T11:12:33.674913Z\",\"status\":\"ABORTED\"}},{\"id\":\"ec0e1a80-2576-4e59-a39f-11d1a36d3142\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T10:21:42.294706Z\",\"status\":\"ABORTED\"}},{\"id\":\"3379e584-92be-450d-8720-06da93c79a66\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T06:21:42.328789Z\",\"status\":\"ABORTED\"}},{\"id\":\"9fc4bcd5-5b77-49fc-9a5b-c7ac643a3361\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T05:16:46.175739Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd5df8fc-6bab-4a98-8f51-40a0b9d22f8f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T04:16:13.050919Z\",\"status\":\"ABORTED\"}},{\"id\":\"2fb00e56-9af6-4f47-a6dd-41a85c5d0430\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T03:23:48.875396Z\",\"status\":\"ABORTED\"}},{\"id\":\"9371fe0f-e55b-4616-9b21-e0a20e3e1c98\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T02:21:42.284005Z\",\"status\":\"ABORTED\"}},{\"id\":\"a6f121c2-5893-436b-b9a9-fd495f3fa0cb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T00:39:59.591289Z\",\"status\":\"ABORTED\"}},{\"id\":\"c2f02376-41cb-4784-ba66-c7e5a6aecc4d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T22:21:42.349413Z\",\"status\":\"ABORTED\"}},{\"id\":\"8207f97e-6243-438c-90d4-b5c94ddd47b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T18:21:42.307666Z\",\"status\":\"ABORTED\"}},{\"id\":\"a8efba13-348f-4045-aec8-149e1dca226a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T14:21:42.344396Z\",\"status\":\"ABORTED\"}},{\"id\":\"3eea0964-d9c9-44f5-9560-fea3da12cca5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T10:21:42.299175Z\",\"status\":\"ABORTED\"}},{\"id\":\"383d5951-57c7-48ad-9193-a687920812d6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T06:21:42.393946Z\",\"status\":\"ABORTED\"}},{\"id\":\"6ec59be3-506b-4b2f-a00e-b33347a9cd8b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T05:17:06.905892Z\",\"status\":\"ABORTED\"}},{\"id\":\"fa588665-d87a-458d-b885-0e9d0fe535d7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T04:16:06.097935Z\",\"status\":\"ABORTED\"}},{\"id\":\"4dad202b-b8df-4db8-83f9-d8628d1de115\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T03:35:15.223601Z\",\"status\":\"ABORTED\"}},{\"id\":\"9c201bdf-77eb-42eb-b832-f172af986e1b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T02:21:42.322133Z\",\"status\":\"ABORTED\"}},{\"id\":\"f23499d4-2dd6-4686-8cfe-7ce0ffca2bd0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T00:40:58.883206Z\",\"status\":\"ABORTED\"}},{\"id\":\"98aa91ff-bb4f-42d1-a5d3-784b22febe60\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T22:21:42.335748Z\",\"status\":\"ABORTED\"}},{\"id\":\"1c54fafe-3583-4496-8c0e-6904bc5a8bc7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T18:21:42.302016Z\",\"status\":\"ABORTED\"}},{\"id\":\"61f7a89f-29b1-45c5-9da6-a79224ffa4bb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T14:21:42.370957Z\",\"status\":\"ABORTED\"}},{\"id\":\"2f2f2ae4-4146-49bd-b4e8-49c973340f46\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T10:21:42.311385Z\",\"status\":\"ABORTED\"}},{\"id\":\"9e707b58-c07c-45c9-8ae0-cc3d8766b01c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T06:21:42.332089Z\",\"status\":\"ABORTED\"}},{\"id\":\"fc96ab0e-deda-48a0-9ab4-30bcb3a9add1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T05:15:31.387676Z\",\"status\":\"ABORTED\"}},{\"id\":\"bdbb1c91-62bb-4407-acb5-529c158dca3f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T04:15:26.458979Z\",\"status\":\"ABORTED\"}},{\"id\":\"93f934a3-2125-4674-9345-8e7c19ec16f8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T03:18:41.119112Z\",\"status\":\"ABORTED\"}},{\"id\":\"ce5bb876-83a1-45e9-9eb6-3c3720b4d215\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T02:21:42.298698Z\",\"status\":\"ABORTED\"}},{\"id\":\"58d74813-4178-4b20-9e00-9332abf5b819\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T00:37:07.836501Z\",\"status\":\"ABORTED\"}},{\"id\":\"cb390c17-a9ef-4544-9f2b-94749afd874b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T22:21:42.37683Z\",\"status\":\"ABORTED\"}},{\"id\":\"12c769f5-b19e-4bd0-b8b7-6449e6c992cd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T18:21:42.307302Z\",\"status\":\"ABORTED\"}},{\"id\":\"610badb0-44eb-4a76-bdcc-2a205f6536e9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T14:21:42.433268Z\",\"status\":\"ABORTED\"}},{\"id\":\"74dbb53e-df92-4718-8ccf-16820543c2b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T11:12:38.832773Z\",\"status\":\"ABORTED\"}},{\"id\":\"69a2e6a8-8d73-4a2d-8062-75e2ecdb70a2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T10:21:42.268537Z\",\"status\":\"ABORTED\"}},{\"id\":\"b841f589-8aad-4436-967b-69d63ecd9fb4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T06:21:42.37556Z\",\"status\":\"ABORTED\"}},{\"id\":\"aab0e54b-fb01-410c-a3f1-631f9a302c41\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T04:17:15.846193Z\",\"status\":\"ABORTED\"}},{\"id\":\"cad7da38-9002-4b90-82af-c83e3dd7c24c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T03:21:49.969774Z\",\"status\":\"ABORTED\"}},{\"id\":\"bac7d264-9a96-4658-ba3f-4d21cfac89c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T02:21:42.269294Z\",\"status\":\"ABORTED\"}},{\"id\":\"fb7d7d37-ad3f-4f02-ad71-4665f22102a2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T00:37:51.025968Z\",\"status\":\"ABORTED\"}},{\"id\":\"cd336ac6-a19d-4493-b75c-d316a131ad64\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T22:21:42.388623Z\",\"status\":\"ABORTED\"}},{\"id\":\"2cbcb462-8efe-4e27-a210-28bcabae14b9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T18:21:42.262268Z\",\"status\":\"ABORTED\"}},{\"id\":\"f27e8dff-ddd2-4a4e-a15e-135aa7515f73\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T14:21:42.328154Z\",\"status\":\"ABORTED\"}},{\"id\":\"bb140bbd-9eb4-430f-8b3e-3486b9cce5ee\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T11:10:12.093044Z\",\"status\":\"ABORTED\"}},{\"id\":\"d552345a-937a-4863-958a-9145127269ef\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T10:21:42.26634Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6902d58-2a3c-4f9c-886c-1f001b4db5a9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T06:21:42.261184Z\",\"status\":\"ABORTED\"}},{\"id\":\"a7bb2db6-4a0e-4542-b471-98365c22571d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T04:17:31.870854Z\",\"status\":\"ABORTED\"}},{\"id\":\"e009edf1-2ba1-4875-9362-a4cea36eb048\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T03:32:00.414004Z\",\"status\":\"ABORTED\"}},{\"id\":\"301fa3d4-907d-40de-850a-a6b205094cd8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T02:21:42.249252Z\",\"status\":\"ABORTED\"}},{\"id\":\"8d7f339f-692e-4b7c-852f-19d5c0aa7486\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T00:38:09.541084Z\",\"status\":\"ABORTED\"}},{\"id\":\"62cdf2d5-6d0c-41a0-9223-17c51308411e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T22:21:42.26615Z\",\"status\":\"ABORTED\"}},{\"id\":\"151867dd-ca65-4605-85c3-031b655fa8df\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T18:21:42.281006Z\",\"status\":\"ABORTED\"}},{\"id\":\"d1da5b14-f6b3-47f6-9032-80c9bc2d925a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T15:33:08.198831Z\",\"status\":\"ABORTED\"}},{\"id\":\"e373d032-9cef-409f-a604-2e2fecf1757b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T14:21:42.344992Z\",\"status\":\"ABORTED\"}},{\"id\":\"e79db9c9-b511-4b4d-9763-eecd21235205\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T11:09:54.030689Z\",\"status\":\"ABORTED\"}},{\"id\":\"3c538d6f-4f8e-498f-9c95-88d5d45c0ad0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T10:21:42.29064Z\",\"status\":\"ABORTED\"}},{\"id\":\"6633f382-a04f-4111-9bbb-6883c0f7c219\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T06:21:42.329335Z\",\"status\":\"ABORTED\"}},{\"id\":\"3119f410-ad30-4412-86c8-9b87031b2513\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T05:17:27.582885Z\",\"status\":\"ABORTED\"}},{\"id\":\"7d0997b9-2bd5-4ae9-8d95-d21d2bf5b6de\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T04:15:31.725667Z\",\"status\":\"ABORTED\"}},{\"id\":\"e95fe415-f652-4f05-a02b-3bad4fca23a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T03:22:01.808183Z\",\"status\":\"ABORTED\"}},{\"id\":\"ee80c19d-1c42-4f03-a889-f8a6735dd66b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T02:21:42.346664Z\",\"status\":\"ABORTED\"}},{\"id\":\"fcb39dbb-d4b3-4721-96a3-b1492712113c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T00:38:40.072831Z\",\"status\":\"ABORTED\"}},{\"id\":\"aa3a18d6-305a-473d-8f70-f70d1cc74346\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T22:21:42.340354Z\",\"status\":\"ABORTED\"}},{\"id\":\"9f24e7ea-cd0f-441d-9798-be5b26110194\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T18:21:42.37118Z\",\"status\":\"ABORTED\"}},{\"id\":\"d41e7c8c-1d99-4d79-b5a4-003afd38a2e1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T14:21:42.347595Z\",\"status\":\"ABORTED\"}},{\"id\":\"939b2bf0-5a3b-4ea2-aae5-48c3e2741a12\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T11:09:39.047408Z\",\"status\":\"ABORTED\"}},{\"id\":\"f92e3be5-7687-4e48-bd46-a5119c2f4c95\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T10:21:42.386632Z\",\"status\":\"ABORTED\"}},{\"id\":\"e1fd2e78-e20d-424c-847f-cfc1620903ce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T06:21:42.310978Z\",\"status\":\"ABORTED\"}},{\"id\":\"2206aa99-9654-4dc1-b3e6-a6112699d8a9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T05:17:39.896359Z\",\"status\":\"ABORTED\"}},{\"id\":\"b166fd84-26e8-41ca-8f80-a73d1f32e7b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T04:15:17.252684Z\",\"status\":\"ABORTED\"}},{\"id\":\"54d7ce9f-efef-4864-a519-54a687fd83c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T03:25:10.854931Z\",\"status\":\"ABORTED\"}},{\"id\":\"b9c7f4e3-ecb6-414a-b70a-b467971257ac\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T02:21:42.322824Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac24ffd7-2cc4-4ffb-a374-875b96fb6e47\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T00:37:45.362688Z\",\"status\":\"ABORTED\"}},{\"id\":\"f6534c11-2635-4eff-930e-8b11d9ae57d6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T22:21:42.332272Z\",\"status\":\"ABORTED\"}},{\"id\":\"0d080844-f3a1-4b38-81e9-22847f4cccdf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T18:21:42.303247Z\",\"status\":\"ABORTED\"}},{\"id\":\"e132c206-e8c9-47fa-9321-e5d5786e62dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T14:21:42.266446Z\",\"status\":\"ABORTED\"}},{\"id\":\"5a1ae1c0-a82d-49c6-9406-3a44df97ef6f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T11:09:36.619344Z\",\"status\":\"ABORTED\"}},{\"id\":\"5502c2f7-f76e-4c1f-b822-224ed67a2c0e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T10:21:42.391248Z\",\"status\":\"ABORTED\"}},{\"id\":\"f490b411-a2b6-4a8a-9a1a-39b659a18320\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T06:21:42.28415Z\",\"status\":\"ABORTED\"}},{\"id\":\"86f07132-e5b9-49b7-b64e-9a0c85881e25\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T04:15:18.566141Z\",\"status\":\"ABORTED\"}},{\"id\":\"362ff61a-62b3-47bc-b535-b2c376875e74\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T03:26:25.222165Z\",\"status\":\"ABORTED\"}},{\"id\":\"352db331-a001-498f-9b27-e7b07427e49c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T02:21:42.278939Z\",\"status\":\"ABORTED\"}},{\"id\":\"8b33f374-275d-40de-829f-7d87618bc9cc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T00:40:29.556963Z\",\"status\":\"ABORTED\"}},{\"id\":\"90576856-c3fb-4b26-993c-d85824f560ba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T22:21:42.278871Z\",\"status\":\"ABORTED\"}},{\"id\":\"8c503f6a-61d4-4b8f-af68-02b4d58a1750\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T18:21:42.300799Z\",\"status\":\"ABORTED\"}},{\"id\":\"59a9e617-b012-4c6e-a3e6-87df9d1430b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T14:21:42.289329Z\",\"status\":\"ABORTED\"}},{\"id\":\"fe8bc733-9963-4095-b5e9-642913fa0fb5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T10:21:42.286411Z\",\"status\":\"ABORTED\"}},{\"id\":\"f85ceecb-a8d5-49e6-806d-8e486ff4c8d1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T06:21:42.29713Z\",\"status\":\"ABORTED\"}},{\"id\":\"610a9f53-a90e-4064-9523-20d04a945a66\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T05:16:04.229573Z\",\"status\":\"ABORTED\"}},{\"id\":\"1f2231f0-acec-4e03-8eb3-3c718c7981e0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T04:15:59.829033Z\",\"status\":\"ABORTED\"}},{\"id\":\"5cf81a8c-8a38-425c-b13a-1ba4ada4e0e2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T03:29:22.165802Z\",\"status\":\"ABORTED\"}},{\"id\":\"5f273e83-8f86-4e2c-a8e7-3f739e36d600\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T02:21:42.475087Z\",\"status\":\"ABORTED\"}},{\"id\":\"4f1feffd-cec1-4f88-b64f-38c0ec6f002e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T00:40:48.973102Z\",\"status\":\"ABORTED\"}},{\"id\":\"2e002b93-1ed9-4a4b-ad6f-f8363c462d63\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T22:21:42.31516Z\",\"status\":\"ABORTED\"}},{\"id\":\"66ab0ddb-3e21-4c70-ba20-b5fffda5a1a7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T18:21:42.435583Z\",\"status\":\"ABORTED\"}},{\"id\":\"30587f75-4443-4827-98f7-747b15c38e6f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T14:21:42.327295Z\",\"status\":\"ABORTED\"}},{\"id\":\"7c30a874-12f4-4286-8098-50c688982e5b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T10:21:42.282644Z\",\"status\":\"ABORTED\"}},{\"id\":\"743bf6c4-c364-4d73-98fc-bdac2fc40017\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T06:21:42.28307Z\",\"status\":\"ABORTED\"}},{\"id\":\"c0209bbb-4318-4020-94f0-1b29d5ebe8c7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T05:16:38.674848Z\",\"status\":\"ABORTED\"}},{\"id\":\"68144c57-8260-431e-8dfc-a3b7e8416819\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T04:17:00.984507Z\",\"status\":\"ABORTED\"}},{\"id\":\"d8bd1255-e3e0-4d8e-8cf1-bfe60298cb2b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T03:27:52.465413Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d508740-492f-4331-b6b2-34919ac6cb12\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T02:21:42.289691Z\",\"status\":\"ABORTED\"}},{\"id\":\"7ae7b9bc-db14-4f3c-a8a6-7c8e57154500\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T00:36:28.703626Z\",\"status\":\"ABORTED\"}},{\"id\":\"95893ef6-5557-48cd-989c-fee7a4950ed0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T22:21:42.279324Z\",\"status\":\"ABORTED\"}},{\"id\":\"75bd7f66-7c49-4f09-9d54-b701da8aac06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T18:21:42.305724Z\",\"status\":\"ABORTED\"}},{\"id\":\"c6abf397-f3f2-4622-b472-19c591696f8e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T14:21:42.293315Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae83f197-2198-44a5-ad3a-233b213831a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T11:10:38.185558Z\",\"status\":\"ABORTED\"}},{\"id\":\"eb10aad6-c731-48fc-a017-52e814a433a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T10:21:42.288875Z\",\"status\":\"ABORTED\"}},{\"id\":\"1bc33d71-bafb-475c-9091-cc93674c863d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T06:21:42.290805Z\",\"status\":\"ABORTED\"}},{\"id\":\"38d09437-1729-4083-9bc3-5d3159fabd0d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T05:12:56.77461Z\",\"status\":\"ABORTED\"}},{\"id\":\"50059e20-2a45-4100-8555-3d01901e9861\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T04:19:30.571627Z\",\"status\":\"ABORTED\"}},{\"id\":\"6edfb74a-6839-4894-820b-66ebd7dd47c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T03:36:51.508553Z\",\"status\":\"ABORTED\"}},{\"id\":\"8d231829-f4e6-4a52-8bfc-81440bf06685\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T02:21:42.295513Z\",\"status\":\"ABORTED\"}},{\"id\":\"219967cd-366a-48c3-b18d-cfbcbdfbae13\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T00:11:55.334867Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd818df2-10b3-4594-8f94-fbd81f15c177\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T22:21:42.304788Z\",\"status\":\"ABORTED\"}},{\"id\":\"7a9fa327-ecf9-445c-b40b-0e24a4809eb6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T20:31:10.22325Z\",\"status\":\"ABORTED\"}},{\"id\":\"8fbc9661-5d97-4447-9906-100861e31720\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T19:28:58.887964Z\",\"status\":\"ABORTED\"}},{\"id\":\"855d2b5d-0893-4128-8f49-208fa5e8dc09\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T18:21:42.328494Z\",\"status\":\"ABORTED\"}},{\"id\":\"a6aa8c40-9bef-4617-af74-ff04ec5e2efd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T14:21:42.373385Z\",\"status\":\"ABORTED\"}},{\"id\":\"e5fc43da-aa70-4f93-bc78-473037f0ab91\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T11:12:30.104598Z\",\"status\":\"ABORTED\"}},{\"id\":\"63d735e7-298a-4856-a999-8430b9b0ce67\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T10:21:42.314172Z\",\"status\":\"ABORTED\"}},{\"id\":\"a1ce9d08-a670-4d62-8035-95f64a8e2da9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T06:21:42.389381Z\",\"status\":\"ABORTED\"}},{\"id\":\"85c793a9-ae49-4403-9d68-cd9cba725a24\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T05:12:49.406794Z\",\"status\":\"ABORTED\"}},{\"id\":\"e1f573e5-f8a0-4f35-8387-6c648308e7dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T04:17:56.03887Z\",\"status\":\"ABORTED\"}},{\"id\":\"4ef5f4e6-38e7-4973-b786-086b496f84f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T03:34:18.503236Z\",\"status\":\"ABORTED\"}},{\"id\":\"37245d13-aae5-492b-9f09-d5b00647bf07\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T02:32:31.221073Z\",\"status\":\"ABORTED\"}},{\"id\":\"73341a97-102a-4b38-92e5-848f9c3f1a99\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T02:21:42.385522Z\",\"status\":\"ABORTED\"}},{\"id\":\"74b15d06-a67e-42de-9a5a-a17514568479\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T00:12:02.436796Z\",\"status\":\"ABORTED\"}},{\"id\":\"aa9b4214-c3e5-45bd-8594-b0f80afc818d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T22:21:42.383971Z\",\"status\":\"ABORTED\"}},{\"id\":\"46430f1f-8479-4e5a-9242-adb448135749\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T18:21:42.38647Z\",\"status\":\"ABORTED\"}},{\"id\":\"2e41dc4e-bed2-4ff1-aa36-707204e8c075\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T14:21:42.339347Z\",\"status\":\"ABORTED\"}},{\"id\":\"345bac90-c241-43dc-96af-44b9a2ff8b94\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T11:10:02.652623Z\",\"status\":\"ABORTED\"}},{\"id\":\"62959f13-6db8-49d9-82d1-72a0a96481b1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T10:21:42.291447Z\",\"status\":\"ABORTED\"}},{\"id\":\"afd5bb5e-4046-406e-81e0-5c6021c61a94\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T06:21:42.324937Z\",\"status\":\"ABORTED\"}},{\"id\":\"98e96d7b-d118-47b1-9515-054c44d69fa7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T05:11:34.580058Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae1939e2-54f8-4299-a475-035c3a3494de\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T04:16:51.820585Z\",\"status\":\"ABORTED\"}},{\"id\":\"db61898c-de03-436f-95f9-de4f9cef23a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T03:34:01.403118Z\",\"status\":\"ABORTED\"}},{\"id\":\"754b0b9c-0b47-49f9-a243-d240fc45ef25\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T02:21:42.310923Z\",\"status\":\"ABORTED\"}},{\"id\":\"7183ed6b-3c8d-4025-b69d-b723b9ce5fa3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T00:12:02.150951Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6b3edc2-9ad6-4f3e-9e57-0f9f9e4a4624\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T22:21:42.316831Z\",\"status\":\"ABORTED\"}},{\"id\":\"9a133f55-dca0-47a6-a1c0-2f2eaaef31e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T18:21:42.312194Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e9ec175-440f-4093-a3ae-af3a8cd735eb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T14:21:42.323595Z\",\"status\":\"ABORTED\"}},{\"id\":\"162365dc-2a6c-460a-963b-d2e2ced1bdd3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T11:09:42.933275Z\",\"status\":\"ABORTED\"}},{\"id\":\"0083004d-fc4c-4668-8f9c-de7aa393c4cf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T10:21:42.277878Z\",\"status\":\"ABORTED\"}},{\"id\":\"bc1b6614-634d-4e75-b6e1-f9965aeb1a9f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T06:21:42.27391Z\",\"status\":\"ABORTED\"}},{\"id\":\"4dfa82ae-8d10-46d9-a6bd-aa33f8221c65\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T05:13:05.872299Z\",\"status\":\"ABORTED\"}},{\"id\":\"6a186727-1b29-4a43-958c-aa044cfac46f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T04:19:20.479074Z\",\"status\":\"ABORTED\"}},{\"id\":\"a0d55542-0daa-412b-8a93-831e7926143b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T03:29:19.152818Z\",\"status\":\"ABORTED\"}},{\"id\":\"58a3d072-726d-4e15-91cf-7e2ba51d1548\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T02:21:42.282319Z\",\"status\":\"ABORTED\"}},{\"id\":\"25620be4-82b1-47fe-a237-49c637d20b09\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T00:12:12.480898Z\",\"status\":\"ABORTED\"}},{\"id\":\"f4313d3e-612a-440f-bb4f-9e1e23a5ea56\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T22:21:42.271297Z\",\"status\":\"ABORTED\"}},{\"id\":\"2f198c32-c979-4942-b579-38e8fea86873\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T18:21:42.303575Z\",\"status\":\"ABORTED\"}},{\"id\":\"0807eb02-cd60-409a-ac67-954c5954801b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T14:21:42.316812Z\",\"status\":\"ABORTED\"}},{\"id\":\"5a5e700e-c2bf-4978-83e0-914783aac135\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T11:12:43.831408Z\",\"status\":\"ABORTED\"}},{\"id\":\"ba4328c5-06b9-4755-9924-12d14ed2572e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T10:21:42.317206Z\",\"status\":\"ABORTED\"}},{\"id\":\"08068a13-6c11-4fed-84b1-afa6648c51de\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T06:21:42.247978Z\",\"status\":\"ABORTED\"}},{\"id\":\"51afea0e-f2ff-4a5b-afdc-250cd1c4f1d5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T04:17:06.633021Z\",\"status\":\"ABORTED\"}},{\"id\":\"53ec11a7-a5d1-4cfb-a947-017c3511f65b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T03:35:10.303564Z\",\"status\":\"ABORTED\"}},{\"id\":\"08d30e20-8e4f-4a04-9553-9e46487aaa02\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T02:21:42.246294Z\",\"status\":\"ABORTED\"}},{\"id\":\"d49ccc85-c2f7-46bf-bb66-46888319a06b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T00:10:55.773075Z\",\"status\":\"ABORTED\"}},{\"id\":\"7fe07c0f-082b-45fa-aa10-ff138eef6c54\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T22:21:42.249201Z\",\"status\":\"ABORTED\"}},{\"id\":\"0da55834-e35d-46b4-9bf4-d10505b5feeb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T18:21:42.301469Z\",\"status\":\"ABORTED\"}},{\"id\":\"398db3a0-af65-44c5-b1a9-231c6012eb38\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T14:21:42.261576Z\",\"status\":\"ABORTED\"}},{\"id\":\"5eb8c36b-76c4-419d-9170-0848e7324f3d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T10:21:42.242911Z\",\"status\":\"ABORTED\"}},{\"id\":\"5e4488c9-83d5-454f-ac03-f1f17f1bc0b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T06:21:42.25108Z\",\"status\":\"ABORTED\"}},{\"id\":\"891a4b52-a2e3-4de1-a6a2-0383d7eced3f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T04:18:59.544034Z\",\"status\":\"ABORTED\"}},{\"id\":\"2fdcef51-f450-49ce-b2e5-900b61407e1b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T03:37:06.824042Z\",\"status\":\"ABORTED\"}},{\"id\":\"da0a402d-8190-47dc-aa86-851ef77a412e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T02:21:42.256989Z\",\"status\":\"ABORTED\"}},{\"id\":\"d5db7fdf-9560-43ec-8abb-d035561a248c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T00:11:59.049608Z\",\"status\":\"ABORTED\"}},{\"id\":\"1eeee78f-0ace-4016-912c-b5d9cb476a87\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T22:21:42.246073Z\",\"status\":\"ABORTED\"}},{\"id\":\"12d2e5bf-f241-4de5-b882-f1a44392ff71\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T18:21:42.257195Z\",\"status\":\"ABORTED\"}},{\"id\":\"15ed86fd-cbef-4354-b559-2a7ce90de5ed\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T14:21:42.260678Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2abe931-e788-41e7-b6a9-305be1a31a06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T10:21:42.262658Z\",\"status\":\"ABORTED\"}},{\"id\":\"eb3fe6a5-79aa-4d0c-8c3a-2b7abc08e257\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T06:21:42.246066Z\",\"status\":\"ABORTED\"}},{\"id\":\"bd4772c8-3cb0-41f2-a27c-3a66fa18e50e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T04:18:51.209619Z\",\"status\":\"ABORTED\"}},{\"id\":\"bc5f42b6-fd3b-49fb-ba67-ce89b51686f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T03:21:28.824717Z\",\"status\":\"ABORTED\"}},{\"id\":\"0a090134-12ae-44c3-a46a-4f420e5ea8e2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T02:21:42.242346Z\",\"status\":\"ABORTED\"}},{\"id\":\"b97b9ec4-a766-4fbb-9018-2eed14d3dd0c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T00:12:21.790415Z\",\"status\":\"ABORTED\"}},{\"id\":\"f02f9089-550e-4771-b401-b8b541572581\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T22:21:42.245435Z\",\"status\":\"ABORTED\"}},{\"id\":\"167c20e7-ee21-4b85-ac45-8e74e64a4c1e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T18:21:42.296357Z\",\"status\":\"ABORTED\"}},{\"id\":\"d870b2e0-2bcc-45c8-b008-8d05ef0af80f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T14:21:42.315818Z\",\"status\":\"ABORTED\"}},{\"id\":\"f83e8e13-3bb1-441f-b033-8eb003e2d00e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T11:11:14.884797Z\",\"status\":\"ABORTED\"}},{\"id\":\"659411f9-5a32-471d-ae33-a1a62b69c1ba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T10:21:42.416343Z\",\"status\":\"ABORTED\"}},{\"id\":\"9ddbf343-ae39-451a-8791-13e89a235e2c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T06:21:42.284399Z\",\"status\":\"ABORTED\"}},{\"id\":\"1c0d3614-6fa9-411e-a99e-252b7567aade\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T05:12:33.819803Z\",\"status\":\"ABORTED\"}},{\"id\":\"27f92f1e-d77e-43ee-9d37-5289901947f9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T04:19:15.529233Z\",\"status\":\"ABORTED\"}},{\"id\":\"34be7918-3aa0-4206-8afa-48b93242dad4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T03:23:28.967071Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a82cf49-f07b-4504-869e-f9200afa5149\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T02:21:42.303828Z\",\"status\":\"ABORTED\"}},{\"id\":\"394335f8-364d-4aea-a264-a281024e752e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T00:12:37.551645Z\",\"status\":\"ABORTED\"}},{\"id\":\"786dba8b-f2e8-4817-868c-bcbab05636f6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T22:21:42.280799Z\",\"status\":\"ABORTED\"}},{\"id\":\"4ea5b50e-8ba8-4153-8091-ab2e19f47b0d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T18:21:42.290473Z\",\"status\":\"ABORTED\"}},{\"id\":\"5df70a95-a98c-49d8-a423-8cf237da7cfa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T14:21:42.345983Z\",\"status\":\"ABORTED\"}},{\"id\":\"aebf2783-cacf-464d-a60f-bc88328c10fa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T11:11:50.805793Z\",\"status\":\"ABORTED\"}},{\"id\":\"e967ce78-a4c5-4dff-aec4-9bf53e0518c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T10:21:42.278194Z\",\"status\":\"ABORTED\"}},{\"id\":\"69c03200-7ddd-4b98-beae-0cd2cc8f05a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T06:21:42.322975Z\",\"status\":\"ABORTED\"}},{\"id\":\"e800a6cf-9145-48b9-8416-771dbad92c94\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T05:13:42.367967Z\",\"status\":\"ABORTED\"}},{\"id\":\"fae9005c-8bdc-4a32-9576-5e381c2ae83c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T04:17:18.953984Z\",\"status\":\"ABORTED\"}},{\"id\":\"cc486560-3357-4615-9079-d55540e08e19\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T03:27:19.478928Z\",\"status\":\"ABORTED\"}},{\"id\":\"ed8fd17b-2397-459a-a909-a44d7c1f6af7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T02:35:07.273284Z\",\"status\":\"ABORTED\"}},{\"id\":\"9508c4d9-9799-4ddf-b2a8-07cb9651a96b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T02:21:42.309946Z\",\"status\":\"ABORTED\"}},{\"id\":\"1688c1f1-175a-4e4c-ad14-f9c08de2608d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T00:11:36.369134Z\",\"status\":\"ABORTED\"}},{\"id\":\"83121a14-35a9-4748-9c5b-e2e883de5a13\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T22:21:42.272873Z\",\"status\":\"ABORTED\"}},{\"id\":\"255f9a9c-0596-4006-b629-1075c420de1e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T18:21:42.263715Z\",\"status\":\"ABORTED\"}},{\"id\":\"3a19f0f9-ba59-46ae-a442-1f4e7a711d29\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T14:21:42.307016Z\",\"status\":\"ABORTED\"}},{\"id\":\"510f85fa-3fee-4556-9aac-7d25fd8357d7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T11:12:02.457537Z\",\"status\":\"ABORTED\"}},{\"id\":\"e554db73-fada-440d-9f09-522ea8d23b4d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T10:21:42.723001Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d7c6389-0fbc-45dc-9bff-a3bdef7a5878\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T06:21:42.317924Z\",\"status\":\"ABORTED\"}},{\"id\":\"30beaea0-e190-4ef2-98cb-7dba77ad0b21\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T04:17:01.520283Z\",\"status\":\"ABORTED\"}},{\"id\":\"e3fb4ad0-b6a3-4409-92dd-6e1b03ff6e75\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T03:23:50.13543Z\",\"status\":\"ABORTED\"}},{\"id\":\"1d6b5653-2097-4d54-b811-d0e3c860cb2f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T02:34:43.70463Z\",\"status\":\"ABORTED\"}},{\"id\":\"6174ce11-7af9-4e75-a200-2424fc81b11e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T02:21:42.319619Z\",\"status\":\"ABORTED\"}},{\"id\":\"c01fba5c-1d15-467b-a030-6bdcb0519538\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T00:11:17.815673Z\",\"status\":\"ABORTED\"}},{\"id\":\"c819f089-11ae-47f7-abe5-f055ce9ebda8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T22:21:42.638923Z\",\"status\":\"ABORTED\"}},{\"id\":\"26ec0fbd-bc83-40a3-ba9d-0df828b0db8f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T18:21:42.250685Z\",\"status\":\"ABORTED\"}},{\"id\":\"a5ea4df1-0a15-42f5-8de9-c59523efabc4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T14:21:42.303Z\",\"status\":\"ABORTED\"}},{\"id\":\"fe87effd-01e8-4d00-847b-b7b638c15596\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T11:10:27.452673Z\",\"status\":\"ABORTED\"}},{\"id\":\"55405b98-cf52-4831-aadd-64b604bcfefd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T10:21:42.29991Z\",\"status\":\"ABORTED\"}},{\"id\":\"166fc0f2-599e-4374-bc1c-8f3e88375b12\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T06:21:42.303838Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6160fc7-26a8-410a-a7dd-1e87b1c338f2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T04:16:58.529082Z\",\"status\":\"ABORTED\"}},{\"id\":\"8cf87e95-aa2c-4b08-bfd1-fd7d738b9269\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T03:28:17.089969Z\",\"status\":\"ABORTED\"}},{\"id\":\"634ccc4a-1312-4138-ac5a-a6b4260309ca\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T02:34:55.648418Z\",\"status\":\"ABORTED\"}},{\"id\":\"7a29b6d7-a617-49fa-9980-45f89a5880f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T02:21:42.292638Z\",\"status\":\"ABORTED\"}},{\"id\":\"cdf59bff-f077-4e66-aaca-4a48b4f4c890\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T00:11:55.969717Z\",\"status\":\"ABORTED\"}},{\"id\":\"5713b05e-13da-41a7-9e55-5a3ea771bbaa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T22:21:42.289805Z\",\"status\":\"ABORTED\"}},{\"id\":\"4e60d6d3-5400-4128-8c64-9fb8328ed42c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T18:21:42.286348Z\",\"status\":\"ABORTED\"}},{\"id\":\"be5ee9af-a594-470a-b2f1-087c3b91775d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T14:21:42.306313Z\",\"status\":\"ABORTED\"}},{\"id\":\"07923534-437e-401f-a8be-0dd145c55dcf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T11:11:50.042723Z\",\"status\":\"ABORTED\"}},{\"id\":\"361554dc-f995-4998-b5e8-1ca1f1deea71\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T10:21:42.276231Z\",\"status\":\"ABORTED\"}},{\"id\":\"7c49b6bc-4e03-4b11-a4b5-90bec15b0deb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T06:21:42.292656Z\",\"status\":\"ABORTED\"}},{\"id\":\"cab0bfd2-230d-4d09-98ba-170fc643227f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T05:11:46.557173Z\",\"status\":\"ABORTED\"}},{\"id\":\"1ee835d1-be22-4fb7-9292-6f961a3821dc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T04:19:21.740106Z\",\"status\":\"ABORTED\"}},{\"id\":\"6bb46b3c-61e9-4dfe-b0f7-3f141e1109f6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T03:32:04.361782Z\",\"status\":\"ABORTED\"}},{\"id\":\"e6db354f-ebc4-4b72-9b12-c6c9a064313f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T02:21:42.281667Z\",\"status\":\"ABORTED\"}},{\"id\":\"036e8733-64fa-4426-aaca-d290c5e91d06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T00:10:38.438607Z\",\"status\":\"ABORTED\"}},{\"id\":\"d3ee67e8-41d9-48fb-bfbe-ae662dce4648\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T22:21:42.281627Z\",\"status\":\"ABORTED\"}},{\"id\":\"84b80df5-8467-446f-9f78-21f55ab9c097\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T18:21:42.278892Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6e6d319-de6b-4277-aba6-82cc4ad1b49b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T14:21:42.310492Z\",\"status\":\"ABORTED\"}},{\"id\":\"49e0d70b-74cb-4a03-998b-38b8b45fc34d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T10:21:42.278716Z\",\"status\":\"ABORTED\"}},{\"id\":\"4a30eb54-313c-4ed7-ab7b-1d8c41f4e81e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T06:21:42.277363Z\",\"status\":\"ABORTED\"}},{\"id\":\"94d8737b-de6c-4ad0-9c86-2cc07d41ee02\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T05:12:27.804337Z\",\"status\":\"ABORTED\"}},{\"id\":\"6e05fbea-f2c5-4bdc-b0f9-3ddb8fa25ba3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T04:16:26.541939Z\",\"status\":\"ABORTED\"}},{\"id\":\"de1152be-bf17-4da2-b72f-a616ec9fad9f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T03:28:52.997375Z\",\"status\":\"ABORTED\"}},{\"id\":\"37a7f30f-d621-4768-8baf-5aa83ba5f4e6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T02:21:42.281257Z\",\"status\":\"ABORTED\"}},{\"id\":\"56f147d4-d832-4dcb-92dd-c14c7d0d955c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T00:11:23.286982Z\",\"status\":\"ABORTED\"}},{\"id\":\"56f0a403-bb2e-4296-b818-c4ae152147b7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T22:21:42.361412Z\",\"status\":\"ABORTED\"}},{\"id\":\"e86b30b4-2aaf-4419-931b-60260bade45a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T18:21:42.421938Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b159c20-aa7a-4552-9ba0-99c746dbae8f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T14:21:42.279657Z\",\"status\":\"ABORTED\"}},{\"id\":\"798492f6-7f26-4fa2-9292-3f61e9a52491\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T10:21:42.273378Z\",\"status\":\"ABORTED\"}},{\"id\":\"09c310e8-2d73-461c-be00-b63c1752213d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T06:21:42.289923Z\",\"status\":\"ABORTED\"}},{\"id\":\"34d1a2f8-8d5b-45f7-b5d5-08dcd7516820\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T05:12:52.498512Z\",\"status\":\"ABORTED\"}},{\"id\":\"ce1abae3-85eb-4420-a644-5f81958ae4c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T04:16:17.127049Z\",\"status\":\"ABORTED\"}},{\"id\":\"4401d691-34d3-497d-a998-7b4b5caa3749\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T03:26:38.574728Z\",\"status\":\"ABORTED\"}},{\"id\":\"6e165f0d-8dbf-477a-a753-12a18d6b17e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T02:21:42.31275Z\",\"status\":\"ABORTED\"}},{\"id\":\"6b7024ec-929c-49cf-857b-d6fdc3959059\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T00:11:17.631778Z\",\"status\":\"ABORTED\"}},{\"id\":\"d0f23598-91c3-4d7b-8934-4782b05193b3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T22:21:42.286992Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2f55e5b-7c7f-45b8-aab6-1e8eed1fad15\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T18:21:42.277818Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6d74400-6e2c-43b1-9f2e-8aea51f6d9ef\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T14:21:42.29048Z\",\"status\":\"ABORTED\"}},{\"id\":\"7fc97360-646f-46f1-a04b-ed5fbfa272bc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T11:11:06.453112Z\",\"status\":\"ABORTED\"}},{\"id\":\"2847bf3c-3d96-486f-b774-38618fa0c2f8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T10:21:42.305605Z\",\"status\":\"ABORTED\"}},{\"id\":\"12168681-10ba-4f13-8529-ac1a802a6bd7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T06:21:42.276391Z\",\"status\":\"ABORTED\"}},{\"id\":\"71bf0803-e477-4366-8584-57670e99c8b6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T04:19:08.774541Z\",\"status\":\"ABORTED\"}},{\"id\":\"91ede90c-b734-42d8-88eb-970500852ea2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T03:36:14.940906Z\",\"status\":\"ABORTED\"}},{\"id\":\"292aa2a9-b2d9-4697-a1e5-a2a31e638ee3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T02:21:42.286433Z\",\"status\":\"ABORTED\"}},{\"id\":\"0c3c3107-fe7d-473f-9bac-ac91200efd29\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T00:11:24.781098Z\",\"status\":\"ABORTED\"}},{\"id\":\"ad4ff7b3-fc16-41cd-8f5a-864593798f51\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T22:21:42.275152Z\",\"status\":\"ABORTED\"}},{\"id\":\"adc40ff2-9a94-42f6-b410-922015422b36\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T18:21:42.293475Z\",\"status\":\"ABORTED\"}},{\"id\":\"f487f7b0-d857-4218-9dbc-0f156dd3e606\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T14:21:42.291982Z\",\"status\":\"ABORTED\"}},{\"id\":\"1fd8e3c5-9fff-44c4-985e-3c5a1dd31f92\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T11:10:54.591724Z\",\"status\":\"ABORTED\"}},{\"id\":\"9747c5ac-f81a-4b33-aa90-2400f00dea34\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T10:21:42.264988Z\",\"status\":\"ABORTED\"}},{\"id\":\"10ce6451-2666-4e7f-9171-9428071d92ff\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T06:21:42.357489Z\",\"status\":\"ABORTED\"}},{\"id\":\"0c57076c-0e6c-4587-92c7-45baa742cf8c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T05:10:27.520219Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2e99d78-da22-4605-ac0f-cf7e2c63db0b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T04:18:12.203601Z\",\"status\":\"ABORTED\"}},{\"id\":\"51e39a68-5533-4ef6-91ec-bfcbf4655c36\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T03:26:56.306061Z\",\"status\":\"ABORTED\"}},{\"id\":\"e9fcad21-4ea9-45f9-aeb6-9827335c7cf9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T02:31:40.85216Z\",\"status\":\"ABORTED\"}},{\"id\":\"ab3f2876-e5b7-4740-8048-c34230dd7923\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T02:21:42.36034Z\",\"status\":\"ABORTED\"}},{\"id\":\"f7a31633-f848-4df9-9701-702176225aee\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T00:11:30.696437Z\",\"status\":\"ABORTED\"}},{\"id\":\"6c78a97b-f007-4726-bf0c-5a178cf4951b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T22:21:42.374667Z\",\"status\":\"ABORTED\"}},{\"id\":\"35b23dad-8349-44ed-a55f-116424eb1fce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T18:21:42.369486Z\",\"status\":\"ABORTED\"}},{\"id\":\"3cdce071-d4dd-4831-9bbd-14267e222d44\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T14:21:42.336351Z\",\"status\":\"ABORTED\"}},{\"id\":\"0dd68154-d797-41a4-a2ed-4a4387403596\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T11:13:23.915943Z\",\"status\":\"ABORTED\"}},{\"id\":\"fa3c7401-e9d7-498c-aaed-5843d993f701\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T10:21:42.340715Z\",\"status\":\"ABORTED\"}},{\"id\":\"4e99a002-114f-44ba-b778-324f605f77f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T06:21:42.36713Z\",\"status\":\"ABORTED\"}},{\"id\":\"3c5818ee-0329-4230-a003-1caccc2a4173\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T05:11:53.184072Z\",\"status\":\"ABORTED\"}},{\"id\":\"8ca325bb-3975-4369-865e-24203eea6889\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T04:17:37.535814Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d67d21e-fc47-43a7-9671-57394639d0ae\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T03:20:55.681197Z\",\"status\":\"ABORTED\"}},{\"id\":\"d890c735-3d2a-424d-b877-925edf68b60c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T02:21:42.353169Z\",\"status\":\"ABORTED\"}},{\"id\":\"9766cb8f-a1f1-44d4-8ec7-b083c2977cb1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T00:11:37.217411Z\",\"status\":\"ABORTED\"}},{\"id\":\"f9d09155-8248-4504-a838-2c1cd949ba6f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T22:21:42.362462Z\",\"status\":\"ABORTED\"}},{\"id\":\"097785ce-b9d2-49ac-b12a-fe85e05c7df3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T18:21:42.378271Z\",\"status\":\"ABORTED\"}},{\"id\":\"a1013ad3-8722-4847-bf9f-8ae606a65cc2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T14:21:42.270879Z\",\"status\":\"ABORTED\"}},{\"id\":\"11f92135-fccf-4bdd-8b47-596d35c0dd07\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T11:09:45.19021Z\",\"status\":\"ABORTED\"}},{\"id\":\"ca75afe4-7046-424c-9ed2-4b4039f95778\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T10:21:42.267424Z\",\"status\":\"ABORTED\"}},{\"id\":\"01dc8bd7-ea2e-49b6-9e53-7b4c2f92fa12\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T06:21:42.249767Z\",\"status\":\"ABORTED\"}},{\"id\":\"88a51b27-2817-416f-a742-d5694233b028\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T05:12:44.287915Z\",\"status\":\"ABORTED\"}},{\"id\":\"3a3f2a3a-0ad9-48f3-a7b5-50c77ad89607\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T04:18:11.069942Z\",\"status\":\"ABORTED\"}},{\"id\":\"897e9ddc-0448-4198-9787-4ba8c7ca0262\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T03:34:48.416597Z\",\"status\":\"ABORTED\"}},{\"id\":\"30cc2fe2-2267-4e15-8979-b1cf33e9c1d3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T02:21:42.271784Z\",\"status\":\"ABORTED\"}},{\"id\":\"467efc38-b68c-4853-bcf0-c6b83f540d96\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T00:11:42.001893Z\",\"status\":\"ABORTED\"}},{\"id\":\"8baecd87-7c28-409f-a2ce-a6c3f2b0f6f3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T22:21:42.252582Z\",\"status\":\"ABORTED\"}},{\"id\":\"31c60f43-252f-4f8c-bc8f-2ffaeb1f684b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T18:21:42.304243Z\",\"status\":\"ABORTED\"}},{\"id\":\"64b3433c-0f6e-4071-ae29-300608f8ddcc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T14:21:42.356518Z\",\"status\":\"ABORTED\"}},{\"id\":\"44daffe9-c44a-4ad5-b923-e0cc703c6138\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T11:11:09.52704Z\",\"status\":\"ABORTED\"}},{\"id\":\"c4459698-c593-4bd1-b7b6-42cea2ef6cd3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T10:21:42.269664Z\",\"status\":\"ABORTED\"}},{\"id\":\"60af1bc9-4484-4c73-ac5a-51bd7b50f83a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T06:21:42.255141Z\",\"status\":\"ABORTED\"}},{\"id\":\"3379525f-9ba9-41a4-bbdb-e8f5f07d4843\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T05:11:45.149839Z\",\"status\":\"ABORTED\"}},{\"id\":\"1afe7b5f-d540-49db-a1d3-d3e20c7a24b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T04:23:52.725167Z\",\"status\":\"ABORTED\"}},{\"id\":\"160357c0-fd82-4f4d-a034-6c2b1819b641\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T03:40:48.177389Z\",\"status\":\"ABORTED\"}},{\"id\":\"cc9d9607-e3b9-45dd-86b0-ce700ba48415\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T02:21:42.279195Z\",\"status\":\"ABORTED\"}},{\"id\":\"f8577724-0baa-4465-8acb-e8a32334033b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T00:11:05.318603Z\",\"status\":\"ABORTED\"}},{\"id\":\"b058b3a1-0ffc-4f79-ac82-607839062bb3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T22:21:42.285283Z\",\"status\":\"ABORTED\"}},{\"id\":\"fa6e16e3-e58c-4b23-be70-da93f2d0e0b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T18:21:42.263206Z\",\"status\":\"ABORTED\"}},{\"id\":\"c0a98a69-8553-45e7-a84d-dfa1b45b9616\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T14:21:42.319265Z\",\"status\":\"ABORTED\"}},{\"id\":\"75c512b6-a86f-4100-8252-f88dc01867f5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T10:21:42.245361Z\",\"status\":\"ABORTED\"}},{\"id\":\"0eaad2e0-3cfe-4550-8ab1-21d6f20fc698\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T06:21:42.27644Z\",\"status\":\"ABORTED\"}},{\"id\":\"a5644e07-9949-4582-9753-546e59fc8e48\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T05:10:11.185229Z\",\"status\":\"ABORTED\"}},{\"id\":\"1fcf323a-f524-458a-abbf-b5897b3faa56\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T04:17:28.66468Z\",\"status\":\"ABORTED\"}},{\"id\":\"7f5f7b5b-71f8-4e33-a573-4acd0e86f445\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T03:33:19.656113Z\",\"status\":\"ABORTED\"}},{\"id\":\"6cb567cd-897e-46ff-816b-a268047c0311\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T02:21:42.324294Z\",\"status\":\"ABORTED\"}},{\"id\":\"35875134-88b5-49f7-bc75-ab62c5aaf4cb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T00:10:32.182856Z\",\"status\":\"ABORTED\"}},{\"id\":\"b01c1aaf-af76-40cb-8ccc-bb2fffd5a0dc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T22:21:42.257468Z\",\"status\":\"ABORTED\"}},{\"id\":\"77b4ff4c-9664-4668-ae8a-ed9b380e3ac7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T18:21:42.260073Z\",\"status\":\"ABORTED\"}},{\"id\":\"323fee91-3487-4a4d-9b73-233382b8937a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T14:21:42.266452Z\",\"status\":\"ABORTED\"}},{\"id\":\"2bd98a6a-8afd-4b61-8f25-05b5cbeb6437\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T10:21:42.260456Z\",\"status\":\"ABORTED\"}},{\"id\":\"e002397a-ea45-48fc-b46d-884681c38295\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T06:21:42.256391Z\",\"status\":\"ABORTED\"}},{\"id\":\"6caf219c-f245-49a7-bb9a-049d2d8fed8b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T05:10:29.25863Z\",\"status\":\"ABORTED\"}},{\"id\":\"c98d7ec9-ba2f-43a7-8b1a-a90e20d931f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T04:17:10.87458Z\",\"status\":\"ABORTED\"}},{\"id\":\"1c28a4d4-0db7-429b-ae00-e8ae6151fd05\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T03:23:29.49684Z\",\"status\":\"ABORTED\"}},{\"id\":\"c2e376c8-eabc-41ac-a286-b282635052b0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T02:21:42.257515Z\",\"status\":\"ABORTED\"}},{\"id\":\"c74b4eb8-3022-4b54-a95b-bc9438baab70\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T00:11:16.355391Z\",\"status\":\"ABORTED\"}},{\"id\":\"aa6510d3-c4db-4a79-98fd-81a32faa1760\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T22:21:42.355401Z\",\"status\":\"ABORTED\"}},{\"id\":\"60593d8a-7af7-458d-9162-396c4bb7cb1b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T18:21:42.284051Z\",\"status\":\"ABORTED\"}},{\"id\":\"e826663f-0a7e-4c63-9193-cf1b48dc82ec\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T14:21:42.349354Z\",\"status\":\"ABORTED\"}},{\"id\":\"48c064f7-d158-4539-a779-a7eec518da73\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T11:09:58.85342Z\",\"status\":\"ABORTED\"}},{\"id\":\"a1f7c6d4-e8be-44d5-b896-b2d4b1ca9ff5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T10:21:42.252792Z\",\"status\":\"ABORTED\"}},{\"id\":\"10880b6f-a834-40de-98f6-9b7b8554e5f2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T06:21:42.3003Z\",\"status\":\"ABORTED\"}},{\"id\":\"612c1ee2-e65f-4d32-bdbd-b4e005a608a5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T05:12:13.697405Z\",\"status\":\"ABORTED\"}},{\"id\":\"2389496c-e81f-4bac-801c-73a2cfeda5f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T04:17:05.448556Z\",\"status\":\"ABORTED\"}},{\"id\":\"76231f02-d3f9-4cfd-ba87-3bece9df99ad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T03:29:37.078286Z\",\"status\":\"ABORTED\"}},{\"id\":\"cf789fe0-4abe-46f0-87bb-f168c33bb2cc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T02:28:41.619352Z\",\"status\":\"ABORTED\"}},{\"id\":\"4148b845-6f6f-4253-b5c9-45f8ee8fd8db\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T02:21:42.276445Z\",\"status\":\"ABORTED\"}},{\"id\":\"ba820b48-cb23-40b5-b788-80afc06e8700\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T00:11:09.636298Z\",\"status\":\"ABORTED\"}},{\"id\":\"4cd4b904-ef77-48d3-a33f-ce36ecfe346b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T22:21:42.259457Z\",\"status\":\"ABORTED\"}},{\"id\":\"bdbf48a2-54b2-478e-a532-9fe86177549e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T18:21:42.333881Z\",\"status\":\"ABORTED\"}},{\"id\":\"4aef1fd2-2a87-43b6-b46c-f962b06f6602\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T14:21:42.269054Z\",\"status\":\"ABORTED\"}},{\"id\":\"451028b1-0576-477b-9e65-9beec6334720\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T11:09:53.244463Z\",\"status\":\"ABORTED\"}},{\"id\":\"ff62f6c5-d99f-4bb9-a3f4-5e56bce63b16\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T10:21:42.270075Z\",\"status\":\"ABORTED\"}},{\"id\":\"1aaaa451-9721-4530-91ca-8e71439f0925\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T06:21:42.329642Z\",\"status\":\"ABORTED\"}},{\"id\":\"7f94eaad-c08e-4e2f-9fc3-225df069c56b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T05:11:43.216478Z\",\"status\":\"ABORTED\"}},{\"id\":\"056269ec-2e97-4cc3-aa27-0bcf8eec9a4f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T04:18:02.626739Z\",\"status\":\"ABORTED\"}},{\"id\":\"8fc887cb-46ae-439f-a5ea-442661a2bfaa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T03:31:52.535757Z\",\"status\":\"ABORTED\"}},{\"id\":\"f1bd7baa-0051-4e1a-95e0-ab341ee221d1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T02:35:55.988292Z\",\"status\":\"ABORTED\"}},{\"id\":\"d09298e8-fbdf-4047-ab51-11ffb8cdbb02\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T02:21:42.321295Z\",\"status\":\"ABORTED\"}},{\"id\":\"57a51690-a527-4b8c-a0c4-7db540fd3ba1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T00:10:41.183212Z\",\"status\":\"ABORTED\"}},{\"id\":\"5968769d-c268-4b72-9ca5-9c0b1c77c9a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T22:21:42.346907Z\",\"status\":\"ABORTED\"}},{\"id\":\"6c8974f1-ceac-44bc-acb2-a47f713618c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T18:21:42.349945Z\",\"status\":\"ABORTED\"}},{\"id\":\"6e4b9797-5ee5-4e78-811e-c064333f243d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T14:21:42.259821Z\",\"status\":\"ABORTED\"}},{\"id\":\"e429ffb3-1601-4893-966c-d856bcb6afd5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T11:12:05.119234Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac993631-e113-4052-aaac-95a79f142b17\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T10:21:42.394693Z\",\"status\":\"ABORTED\"}},{\"id\":\"4710e09b-814b-4759-8767-1ddf2fcc1339\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T06:21:42.6098Z\",\"status\":\"ABORTED\"}},{\"id\":\"e41295fd-1ad2-4503-a58d-5aedeab9f920\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T05:11:47.814572Z\",\"status\":\"ABORTED\"}},{\"id\":\"07725e47-9b56-49ed-8237-919517a7312a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T04:16:40.149705Z\",\"status\":\"ABORTED\"}},{\"id\":\"d3dade70-f9a6-4851-b3be-9be9a49f14a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T03:30:01.060362Z\",\"status\":\"ABORTED\"}},{\"id\":\"6993c0c3-0e8e-4362-b9f8-0a69fddeb23b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T02:35:40.968819Z\",\"status\":\"ABORTED\"}},{\"id\":\"0702a4d8-fb36-4c93-aee2-9ec0fe43ce55\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T02:21:42.271052Z\",\"status\":\"ABORTED\"}},{\"id\":\"30048d57-abc9-49e5-804e-445e64eb9276\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T00:10:29.533686Z\",\"status\":\"ABORTED\"}},{\"id\":\"014c9d7a-22ec-48f7-a8e3-aac8ba151320\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T22:21:42.231595Z\",\"status\":\"ABORTED\"}},{\"id\":\"817d38ce-7ea8-4b86-b73f-ce6b4358ab16\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T20:57:49.427424Z\",\"status\":\"ABORTED\"}},{\"id\":\"b9994332-ffa4-4ee2-b87e-c5e12220828d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T20:43:35.830055Z\",\"status\":\"ABORTED\"}},{\"id\":\"19bf68b0-ea89-4972-b055-1bc92cdc5ed4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T18:21:42.384111Z\",\"status\":\"ABORTED\"}},{\"id\":\"baa71f2c-57c8-4504-a2c2-7a29b88e113c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T11:12:51.496815Z\",\"status\":\"ABORTED\"}},{\"id\":\"c860992b-d668-49c1-90c0-22b8eecfe4c0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T05:11:30.197627Z\",\"status\":\"ABORTED\"}},{\"id\":\"24455d5b-d51b-418e-8fe6-1c49104b8c57\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T04:19:19.613006Z\",\"status\":\"ABORTED\"}},{\"id\":\"3b1c597d-acae-4d0a-9153-fce7cb762644\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T03:35:46.915101Z\",\"status\":\"ABORTED\"}},{\"id\":\"ff580788-290b-47c3-8fda-12dd8502ab11\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T02:38:59.226207Z\",\"status\":\"ABORTED\"}},{\"id\":\"391df534-5a31-4516-8b81-2460c737712d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T00:11:09.585855Z\",\"status\":\"ABORTED\"}},{\"id\":\"20fa1c5c-0f03-4db7-b1d9-e360226bb786\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:41:51.043274Z\",\"status\":\"ABORTED\"}},{\"id\":\"6cd5e4d6-a41d-443e-bfff-f2e94adfc216\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:39:59.233053Z\",\"status\":\"ABORTED\"}},{\"id\":\"17a28bb9-b9cc-41f6-bb68-f2e140acf014\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:35:52.255699Z\",\"status\":\"ABORTED\"}},{\"id\":\"c6cdac4f-d0c7-41a5-a87d-55a39330357c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:33:02.120479Z\",\"status\":\"ABORTED\"}},{\"id\":\"07372c0d-ac71-4e7c-9bca-06cf5e49e142\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:30:10.937024Z\",\"status\":\"ABORTED\"}},{\"id\":\"c537cc94-e77a-4435-8c10-3278e13c8a16\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:59.843097Z\",\"status\":\"ABORTED\"}},{\"id\":\"a8aff0a8-5860-4f43-b4ef-aa9e1320f160\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:58.462499Z\",\"status\":\"ABORTED\"}},{\"id\":\"54310d09-39e7-4a74-af7d-23c8e3ca81bc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:57.076258Z\",\"status\":\"ABORTED\"}},{\"id\":\"fc8e7778-9627-4d6f-9243-30ece19aafe1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:55.660899Z\",\"status\":\"ABORTED\"}},{\"id\":\"f513899a-67a7-4e8a-bc26-6de95a029cc7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:54.255703Z\",\"status\":\"ABORTED\"}},{\"id\":\"f893761e-7dc9-47af-a7c4-de6713bb2cca\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:52.85838Z\",\"status\":\"ABORTED\"}},{\"id\":\"6b9d10de-235c-4240-aacb-ed0fce0728c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:45:00.043603Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b5b008a-f2b0-4e1e-9cad-ededc03f8aad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:58.645219Z\",\"status\":\"ABORTED\"}},{\"id\":\"c2c995d1-a9d1-415d-88ef-59a553170c44\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:57.232713Z\",\"status\":\"ABORTED\"}},{\"id\":\"32dc228a-6f7e-4ea4-9791-9bdf5a8bb3cf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:55.716955Z\",\"status\":\"ABORTED\"}},{\"id\":\"de1eff81-4ccd-4350-b18f-1bf9a9ae72d0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:54.259792Z\",\"status\":\"ABORTED\"}},{\"id\":\"a9106f9f-c929-4225-be58-af713ba2d9ed\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:52.859291Z\",\"status\":\"ABORTED\"}},{\"id\":\"df4eb78b-956c-4061-8ff7-694e162b8b10\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:59.826145Z\",\"status\":\"ABORTED\"}},{\"id\":\"c9a6c8bc-262e-41eb-95d4-8b3d083f8412\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:58.4405Z\",\"status\":\"ABORTED\"}},{\"id\":\"9cacf5d5-200a-4908-b078-c450c9e403d3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:57.046135Z\",\"status\":\"ABORTED\"}},{\"id\":\"410558ce-bc44-4ecd-bfdc-abfb626ca1be\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:55.650539Z\",\"status\":\"ABORTED\"}},{\"id\":\"77141aab-52de-4e41-8912-966a8fcbfadd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:54.255606Z\",\"status\":\"ABORTED\"}},{\"id\":\"c35e6d94-5a4f-4a73-968b-194b4d97cf8f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:52.859251Z\",\"status\":\"ABORTED\"}},{\"id\":\"b1be501a-0d19-47d3-ad90-b1b74281bac4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:45:00.09855Z\",\"status\":\"ABORTED\"}},{\"id\":\"c7818057-4f59-48a5-b390-cb1123974325\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:58.531386Z\",\"status\":\"ABORTED\"}},{\"id\":\"d7e91b35-3138-40ef-ae59-aded8ad9d627\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:57.141204Z\",\"status\":\"ABORTED\"}},{\"id\":\"25e8761d-dbbe-4de8-be6b-d76dc7032621\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:55.756112Z\",\"status\":\"ABORTED\"}},{\"id\":\"683bfc5c-ab17-4a2d-9193-d61f8b3eeac1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:54.350506Z\",\"status\":\"ABORTED\"}},{\"id\":\"dcc6487b-8e6f-4e6c-b866-964e624fab8e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:52.951777Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e1d7230-d6be-4200-8175-5c5d1eeb73e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:59.858875Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2b936e8-2385-48c3-8f27-80d381da0271\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:58.474037Z\",\"status\":\"ABORTED\"}},{\"id\":\"2b556840-9275-4b19-ae29-8d00fa3b166e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:57.094905Z\",\"status\":\"ABORTED\"}},{\"id\":\"5081f4c3-ac29-4821-b194-49f8f3119413\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:55.721993Z\",\"status\":\"ABORTED\"}},{\"id\":\"bf0c0039-24f9-497d-b791-14d8301584b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:54.3451Z\",\"status\":\"ABORTED\"}},{\"id\":\"3f877fe3-dbe1-4134-a83a-2f92eaf4dc09\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:52.946007Z\",\"status\":\"ABORTED\"}},{\"id\":\"fbc3cb4c-5f0f-4b31-bf81-278a601729f5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:59.954901Z\",\"status\":\"ABORTED\"}},{\"id\":\"e93f9e5a-6f3b-4f3e-a065-997339764f4d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:58.557499Z\",\"status\":\"ABORTED\"}},{\"id\":\"e6abfc33-3a26-4509-a56e-be020ffc5260\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:57.139772Z\",\"status\":\"ABORTED\"}},{\"id\":\"e1c36321-6d2d-4412-a722-e8d158d9e83b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:55.731385Z\",\"status\":\"ABORTED\"}},{\"id\":\"2d6a1339-40b6-47d8-8796-b19070fce06f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:54.343576Z\",\"status\":\"ABORTED\"}},{\"id\":\"053314d6-7df0-4b08-8657-afada123f894\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:52.939653Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e6673ef-cf61-4e94-beae-78ac4f21dda5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:45:00.053382Z\",\"status\":\"ABORTED\"}},{\"id\":\"3564a735-b2c9-4e44-8691-52509a09e842\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:58.652795Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a038c01-61b5-4d08-b8c9-97198ba2ad43\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:57.122799Z\",\"status\":\"ABORTED\"}},{\"id\":\"0b540407-b65e-4ddd-9bd5-fce9bf1337ad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:55.728145Z\",\"status\":\"ABORTED\"}},{\"id\":\"4855ffad-8e1d-413a-a7ec-2d880991b0c4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:54.33848Z\",\"status\":\"ABORTED\"}},{\"id\":\"9bfed82d-42c6-4116-98c7-49ce0158c5c4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:52.950437Z\",\"status\":\"ABORTED\"}},{\"id\":\"70d5e925-11fc-40e4-b352-0d8a00ba304e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:45:02.00361Z\",\"status\":\"ABORTED\"}},{\"id\":\"95f078d0-0d81-43fd-a078-71ba4f2145f0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:59.911559Z\",\"status\":\"ABORTED\"}},{\"id\":\"8ed87088-39cc-4de0-ba11-58c024d0eb99\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:58.520681Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2ce60f0-092b-4cd8-a127-c7b12ab4d8c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:57.126214Z\",\"status\":\"ABORTED\"}},{\"id\":\"148ae26d-a825-4037-b7ee-cf69b3e28093\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:55.749092Z\",\"status\":\"ABORTED\"}},{\"id\":\"cc2aba17-0d41-4c62-be36-3dd4b1848f99\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:54.336814Z\",\"status\":\"ABORTED\"}},{\"id\":\"dc19664d-d274-4eff-9207-999b009b515b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:52.955137Z\",\"status\":\"ABORTED\"}},{\"id\":\"cb7324b3-d558-4eae-8695-27d008f92890\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:45.997392Z\",\"status\":\"ABORTED\"}},{\"id\":\"76a03bb0-5431-4385-bf19-60bf6eca7dcb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T11:38:52.878099Z\",\"status\":\"ABORTED\"}},{\"id\":\"5281b4fd-90e8-418b-847e-b666026cb894\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T11:10:41.856305Z\",\"status\":\"ABORTED\"}},{\"id\":\"58f585fd-71c2-411d-b3cf-350504d2b81b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T07:38:53.131488Z\",\"status\":\"ABORTED\"}},{\"id\":\"e53c81f8-2d21-40f1-b225-217796e3c5a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T05:12:14.015538Z\",\"status\":\"ABORTED\"}},{\"id\":\"6cc0c0a5-da03-4877-bd75-02b04d8eaadc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T04:17:12.985397Z\",\"status\":\"ABORTED\"}},{\"id\":\"5c92d7f0-19b4-4f65-8e86-493eaa7e656c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T03:38:52.82661Z\",\"status\":\"ABORTED\"}},{\"id\":\"f22322ac-62c8-460b-9a85-50ce252adf8d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T03:31:20.551358Z\",\"status\":\"ABORTED\"}},{\"id\":\"aa52a972-66b8-430d-8072-ba555ff0093f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T00:12:00.159646Z\",\"status\":\"ABORTED\"}},{\"id\":\"7340ab9b-23ab-4d16-9ea3-87ae55b5fc5c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T23:38:52.837557Z\",\"status\":\"ABORTED\"}},{\"id\":\"42a816c6-658e-4a1f-9c75-1f672583861b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T19:38:52.84003Z\",\"status\":\"ABORTED\"}},{\"id\":\"a80b7c9c-163e-4c2a-806e-0c94e14c859a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T15:38:52.925562Z\",\"status\":\"ABORTED\"}},{\"id\":\"7a81982a-821b-436c-9e9a-8d5dac8adca9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T11:38:52.983767Z\",\"status\":\"ABORTED\"}},{\"id\":\"0651f227-4fcf-48fd-b377-113eef07dd27\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T11:12:17.689497Z\",\"status\":\"ABORTED\"}},{\"id\":\"c102d671-a07e-47e7-9659-6e0fed7010fb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T07:38:52.865516Z\",\"status\":\"ABORTED\"}},{\"id\":\"616f5331-75f1-44c4-8a79-0f1d435603c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T05:12:04.353092Z\",\"status\":\"ABORTED\"}},{\"id\":\"0add7d63-a828-4623-9498-ce5f4d4fd22e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T04:17:15.266209Z\",\"status\":\"ABORTED\"}},{\"id\":\"5ac7912f-52b3-4242-b846-f998d1bddf0e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T03:38:52.998354Z\",\"status\":\"ABORTED\"}},{\"id\":\"289aaca8-5c96-4a6f-8a5b-35bb13eacf24\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T03:34:18.111535Z\",\"status\":\"ABORTED\"}},{\"id\":\"02fd44f6-7148-4cb5-8faa-445d051d33e8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T00:11:23.956308Z\",\"status\":\"ABORTED\"}},{\"id\":\"0e9edd27-62e5-4b00-9bcf-a981e5861bee\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T23:38:52.869953Z\",\"status\":\"ABORTED\"}},{\"id\":\"987f2916-f651-4c5e-957f-35bc84dfc98b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T19:38:52.864727Z\",\"status\":\"ABORTED\"}},{\"id\":\"b5515f2b-3068-42f3-89b4-732ad4158140\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T15:38:52.839134Z\",\"status\":\"ABORTED\"}},{\"id\":\"f92b4e78-5e07-4301-9a5f-bb22d56469c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T11:38:52.895307Z\",\"status\":\"ABORTED\"}},{\"id\":\"237a1bcc-d5a0-47cd-9219-e6d9051eeb38\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T11:09:39.170606Z\",\"status\":\"ABORTED\"}},{\"id\":\"cce63c1b-75a8-4e84-894b-68136b020185\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T07:38:52.932058Z\",\"status\":\"ABORTED\"}},{\"id\":\"c3b139a2-3aeb-442f-a426-48057570cf19\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T05:12:08.080474Z\",\"status\":\"ABORTED\"}},{\"id\":\"03e15807-3bb5-4e0f-9642-0b4767ea7ffe\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T04:17:30.378287Z\",\"status\":\"ABORTED\"}},{\"id\":\"74b840d8-a9cb-43ce-8e67-9adc672c1052\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T03:38:52.939194Z\",\"status\":\"ABORTED\"}},{\"id\":\"148614f7-35a5-43ef-b17f-8efacf4480e5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T03:31:20.64503Z\",\"status\":\"ABORTED\"}},{\"id\":\"0612d6f8-4b2f-4237-97db-2081f589ab62\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T00:11:21.218622Z\",\"status\":\"ABORTED\"}},{\"id\":\"f5c7842e-ef41-41a3-a898-5da6b898c17f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T23:38:52.94456Z\",\"status\":\"ABORTED\"}},{\"id\":\"b447ed19-b4c5-45fe-95da-f94759a28c5b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T19:38:53.036002Z\",\"status\":\"ABORTED\"}},{\"id\":\"69559d6d-cb49-4ad1-a1ef-500809a5a659\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T15:38:52.916069Z\",\"status\":\"ABORTED\"}},{\"id\":\"91704114-c7cb-4c66-8252-135d3ac3f554\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T11:38:52.981362Z\",\"status\":\"ABORTED\"}},{\"id\":\"15ef8d61-4a5b-4056-bc91-2531060c640b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T11:10:13.072018Z\",\"status\":\"ABORTED\"}},{\"id\":\"9c308ce0-d5ca-47ca-85b4-a55a13cc1fe8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T07:38:52.841172Z\",\"status\":\"ABORTED\"}},{\"id\":\"336422cd-2de5-4a08-9626-8b7d8ac541da\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T05:13:25.293775Z\",\"status\":\"ABORTED\"}},{\"id\":\"dae632ff-8011-4089-bd56-58b1a0f224cf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T04:29:19.033517Z\",\"status\":\"ABORTED\"}},{\"id\":\"51ff33df-1c2e-4c42-88e7-7a86dbdebc80\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T03:43:14.281929Z\",\"status\":\"ABORTED\"}},{\"id\":\"beed9e5f-a935-4f37-a94f-f2ef769cd8ea\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T03:38:52.992665Z\",\"status\":\"ABORTED\"}},{\"id\":\"b821c7ca-0002-4aa8-a98c-e91aeb552d76\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T00:11:33.072672Z\",\"status\":\"ABORTED\"}},{\"id\":\"7aa7690a-ca81-42c0-aca0-eae6171c7e01\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T23:38:53.05324Z\",\"status\":\"ABORTED\"}},{\"id\":\"4383df62-e0b6-4b2f-9dd5-70ebd3f0dca8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T19:38:52.914513Z\",\"status\":\"ABORTED\"}},{\"id\":\"5eb75451-217b-4ced-8063-2022d1daf945\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T15:38:53.021468Z\",\"status\":\"ABORTED\"}},{\"id\":\"00efac79-d22b-4331-b78b-fd816535a2e7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T11:38:52.886361Z\",\"status\":\"ABORTED\"}},{\"id\":\"ca81848f-dec0-462b-9f0d-91ce7ff1ae08\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T07:38:52.892783Z\",\"status\":\"ABORTED\"}},{\"id\":\"9b367093-b21a-45b3-8b29-852edc29beca\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T05:13:24.179151Z\",\"status\":\"ABORTED\"}},{\"id\":\"a91d279c-bd9f-41ca-be42-6e9952c41f13\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T04:24:42.330218Z\",\"status\":\"ABORTED\"}},{\"id\":\"1799d55a-d960-4854-aa98-b180509d83d9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T03:46:47.061008Z\",\"status\":\"ABORTED\"}},{\"id\":\"47f60fc9-d3e9-4bb1-a136-79f0d36b4a22\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T03:38:53.023478Z\",\"status\":\"ABORTED\"}},{\"id\":\"005d101c-4200-4976-b2d8-4b53178f8283\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T00:10:41.334473Z\",\"status\":\"ABORTED\"}},{\"id\":\"7ec24f70-5b75-4712-9e05-770ceb31df9f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T23:38:52.907947Z\",\"status\":\"ABORTED\"}},{\"id\":\"209f41ea-bda2-4ffd-ad21-ea4b2d1e010b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T19:38:52.900887Z\",\"status\":\"ABORTED\"}},{\"id\":\"5a0c2e23-20ee-4ea6-b704-8818e0d089cd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T15:38:52.987363Z\",\"status\":\"ABORTED\"}},{\"id\":\"f9590984-b7c2-44ce-b623-03023f484163\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T11:38:52.889736Z\",\"status\":\"ABORTED\"}},{\"id\":\"cf82bb9c-2a64-49e4-bc50-9d94e4c0a0a0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T07:38:52.980444Z\",\"status\":\"ABORTED\"}},{\"id\":\"ce9c7bb4-f4b8-4a25-be18-934f1e61903d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T05:12:29.261298Z\",\"status\":\"ABORTED\"}},{\"id\":\"32d930e1-c9da-4b7b-9ada-0d89bd403879\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T04:20:52.348832Z\",\"status\":\"ABORTED\"}},{\"id\":\"e367f233-8b55-481f-b474-53e6835fb946\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T03:38:52.896196Z\",\"status\":\"ABORTED\"}},{\"id\":\"dd2caed9-4806-4a57-93d6-1d41a8aa73bc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T03:36:25.13469Z\",\"status\":\"ABORTED\"}},{\"id\":\"3ebadd86-bb13-4ff5-aed8-5f5b72c65f06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T02:38:27.482779Z\",\"status\":\"ABORTED\"}},{\"id\":\"7b9d54bc-8c65-48d1-a4f9-983621538163\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T00:11:19.397702Z\",\"status\":\"ABORTED\"}},{\"id\":\"c56145be-f781-4809-ad0f-0e543dcdd29f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T23:38:52.903618Z\",\"status\":\"ABORTED\"}},{\"id\":\"52e556f3-2219-4a1f-9047-af874f6498d9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T19:38:52.916223Z\",\"status\":\"ABORTED\"}},{\"id\":\"60b762f7-da3a-47f5-b338-4cabfdcd6c5e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T15:38:52.91564Z\",\"status\":\"ABORTED\"}},{\"id\":\"77b1872e-ccb2-4bd4-ac93-8162ef38ef5b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T11:38:53.047896Z\",\"status\":\"ABORTED\"}},{\"id\":\"dd42702a-7f99-4b54-b008-f4211ead3507\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T11:11:44.296106Z\",\"status\":\"ABORTED\"}},{\"id\":\"2ce9b47a-66ae-4c95-8037-d5733f14a8b9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T07:38:53.094475Z\",\"status\":\"ABORTED\"}},{\"id\":\"df70314c-2fa7-468a-b4ae-1556a0c2171f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T05:12:41.839816Z\",\"status\":\"ABORTED\"}},{\"id\":\"0a0614d6-feb1-4b9a-bc3f-c30759549e2f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T04:22:55.107918Z\",\"status\":\"ABORTED\"}},{\"id\":\"50b1e134-472a-4e7f-be54-845e86e3e7ef\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T03:42:03.19335Z\",\"status\":\"ABORTED\"}},{\"id\":\"6824fd1e-6871-421e-b69d-5357a1706d4f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T03:38:52.886256Z\",\"status\":\"ABORTED\"}},{\"id\":\"f1423463-069c-4443-b118-80e003396f7c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T00:11:15.811706Z\",\"status\":\"ABORTED\"}},{\"id\":\"0c878f10-9cde-4a37-bf5c-7868f6436b45\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T23:38:53.002797Z\",\"status\":\"ABORTED\"}},{\"id\":\"f072ce0d-e3b8-4e81-8178-e8fa05c4daa1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T19:38:52.905016Z\",\"status\":\"ABORTED\"}},{\"id\":\"135ad888-d453-4d04-a04e-81bc9aec0ffc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T15:38:52.935846Z\",\"status\":\"ABORTED\"}},{\"id\":\"eb74f0d0-3f24-4c6d-a53d-79a17836b016\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T11:38:53.209263Z\",\"status\":\"ABORTED\"}},{\"id\":\"e376cd90-7eac-4f03-94eb-d7ed54ce7ae5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T11:12:46.25449Z\",\"status\":\"ABORTED\"}},{\"id\":\"34bb5f36-e272-47b5-9a07-7cd52958976c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T07:38:52.832242Z\",\"status\":\"ABORTED\"}},{\"id\":\"4be79c0f-dae8-4ac1-ad7e-415718d2201c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T05:11:53.312232Z\",\"status\":\"ABORTED\"}},{\"id\":\"eab639a1-6250-4481-a7da-998615301068\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T04:25:10.202578Z\",\"status\":\"ABORTED\"}},{\"id\":\"e5ec8217-2b0d-427d-a6f6-b5305fd610f6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T03:42:57.658235Z\",\"status\":\"ABORTED\"}},{\"id\":\"858eded5-8023-4e97-b308-26ab2db910e6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T03:38:53.156809Z\",\"status\":\"ABORTED\"}},{\"id\":\"0ee039ff-de53-493b-9dbc-cd9ce5100ff1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T02:35:31.419269Z\",\"status\":\"ABORTED\"}},{\"id\":\"9210bb7f-59d4-4778-8b01-5d000c56b24d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T00:11:03.848765Z\",\"status\":\"ABORTED\"}},{\"id\":\"d522f343-2549-43a8-b15b-1a460c0a1922\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T23:38:52.957341Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd28d30d-dcb2-4853-a5d0-448775b32416\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T19:38:52.841747Z\",\"status\":\"ABORTED\"}},{\"id\":\"779dcf45-ec65-4592-b164-a9bf2ca33322\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T15:38:52.858691Z\",\"status\":\"ABORTED\"}},{\"id\":\"48a65e2c-57ca-42f7-b007-7a07b51d6431\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T11:38:52.828384Z\",\"status\":\"ABORTED\"}},{\"id\":\"1c8cd2e6-334e-4e39-a290-ee0a955512fa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T11:10:30.087896Z\",\"status\":\"ABORTED\"}},{\"id\":\"4a0633dc-f2e9-4521-811b-3ddfaabe682b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T07:38:52.93779Z\",\"status\":\"ABORTED\"}},{\"id\":\"c4061324-0949-47c3-9f5d-6c7a8bb13f0c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T05:12:39.992576Z\",\"status\":\"ABORTED\"}},{\"id\":\"acf14870-243c-4434-86bc-0e04d554d973\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T04:23:06.066161Z\",\"status\":\"ABORTED\"}},{\"id\":\"eebaebeb-4fce-4081-a971-24916d965cba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T03:38:52.947936Z\",\"status\":\"ABORTED\"}},{\"id\":\"9fc31f52-f409-429e-a423-feb8df7b1ae9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T03:38:22.635838Z\",\"status\":\"ABORTED\"}},{\"id\":\"10177842-daaf-4ba3-8fd2-e8178e8f45d3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T00:10:51.66017Z\",\"status\":\"ABORTED\"}},{\"id\":\"62bcd868-a550-4d57-9fad-fb173675186f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T23:38:52.940491Z\",\"status\":\"ABORTED\"}},{\"id\":\"8fbb3450-eaf8-4eb3-b424-e0cc9270a6c6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T19:38:52.976614Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e551bf8-0c7f-4ceb-9fcf-737fa3f88515\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T15:38:52.875256Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d08bc7b-d020-4f2d-acfb-4b2db268d9f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T11:38:53.101695Z\",\"status\":\"ABORTED\"}},{\"id\":\"194e41fa-e71c-41e2-a7f0-137040eb3b0c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T11:11:24.171435Z\",\"status\":\"ABORTED\"}},{\"id\":\"7f07a72f-631a-4bc5-b352-35db50ff811b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T07:38:52.902717Z\",\"status\":\"ABORTED\"}},{\"id\":\"c7e4ca3e-6749-426a-96ee-371b1ba57fb1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T05:11:52.851802Z\",\"status\":\"ABORTED\"}},{\"id\":\"b2fb98b4-43f9-4742-b83e-f3c6c08e0f28\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T04:22:49.028863Z\",\"status\":\"ABORTED\"}},{\"id\":\"db106dfe-f33e-4393-8c4d-c6a5260f3b8c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T03:40:24.170311Z\",\"status\":\"ABORTED\"}},{\"id\":\"ff3a7ca9-3e37-4f52-af05-caf22019e52e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T03:38:52.874605Z\",\"status\":\"ABORTED\"}},{\"id\":\"5651d782-15ef-4b64-87b3-833c0aa3273a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T00:11:25.031272Z\",\"status\":\"ABORTED\"}},{\"id\":\"baa32270-4b64-4111-b7f6-6330f47e427e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T23:38:52.879471Z\",\"status\":\"ABORTED\"}},{\"id\":\"86ab24c9-ccdd-487e-b350-2813511eac59\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T19:38:52.876019Z\",\"status\":\"ABORTED\"}},{\"id\":\"cc575bde-ad7c-4de8-af59-86aabf2bf99d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T15:38:52.908332Z\",\"status\":\"ABORTED\"}},{\"id\":\"956dcada-418a-4848-915a-73ed17c18014\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T11:38:52.842028Z\",\"status\":\"ABORTED\"}},{\"id\":\"ece5a408-8ba3-4ec1-8993-b6fce58d4c9e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T11:13:15.378998Z\",\"status\":\"ABORTED\"}},{\"id\":\"19da7fa4-13c3-403b-bc8d-288e94b4a92d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T07:38:52.886136Z\",\"status\":\"ABORTED\"}},{\"id\":\"65b42e70-5832-476c-8b23-f99c1af1f05b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T05:17:07.842523Z\",\"status\":\"ABORTED\"}},{\"id\":\"b8fac8c0-32d8-4fd6-b407-79ff82ce8793\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T04:34:52.303663Z\",\"status\":\"ABORTED\"}},{\"id\":\"82abf263-b2b7-4c56-b0c2-bae96b8b21f8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T03:48:18.485298Z\",\"status\":\"ABORTED\"}},{\"id\":\"83b3dd70-79f9-47de-a363-751ab87e4452\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T03:38:52.960151Z\",\"status\":\"ABORTED\"}},{\"id\":\"ab9f10e7-1364-4ddb-b0c0-e36070c3eaec\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T00:11:19.899142Z\",\"status\":\"ABORTED\"}},{\"id\":\"ceb8f67f-3613-4302-bac4-785d32f2ad7e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T23:38:52.881413Z\",\"status\":\"ABORTED\"}},{\"id\":\"4cd06d88-d296-4434-8eda-ced314514910\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T19:38:52.882566Z\",\"status\":\"ABORTED\"}},{\"id\":\"37851a1a-79ae-4374-9d9c-7bc638a5636c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T15:38:52.880439Z\",\"status\":\"ABORTED\"}},{\"id\":\"b86390e3-bdd6-4d31-905b-735c51223c69\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T11:38:52.892058Z\",\"status\":\"ABORTED\"}},{\"id\":\"48aea7f6-4466-4c4b-b325-96f4455c4381\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T07:38:52.872799Z\",\"status\":\"ABORTED\"}},{\"id\":\"0fe2f461-849c-4313-b3f2-64dff90ba1ea\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T05:15:09.887698Z\",\"status\":\"ABORTED\"}},{\"id\":\"85d4ecc0-1890-493e-8977-5ef2255ab168\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T04:32:16.510431Z\",\"status\":\"ABORTED\"}},{\"id\":\"f8efb554-0868-44c7-b97a-5475b7c5e733\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T03:45:02.22175Z\",\"status\":\"ABORTED\"}},{\"id\":\"bac4d418-3a08-4c65-85f6-88dd201f2219\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T03:38:52.882197Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd7924c9-5a5f-42d9-8180-6f71c8b02fc6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T00:11:06.793708Z\",\"status\":\"ABORTED\"}},{\"id\":\"5281550b-1bdb-46ed-9fe8-7c020cf85edd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T23:38:52.880767Z\",\"status\":\"ABORTED\"}},{\"id\":\"3130f614-405b-4f02-97f0-75f2d7577f13\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T19:38:52.878698Z\",\"status\":\"ABORTED\"}},{\"id\":\"932e20af-d2cd-449c-8e42-f1ce2fcbae33\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T15:38:52.877385Z\",\"status\":\"ABORTED\"}},{\"id\":\"75c20084-69c3-4169-8e1e-1825d5ab56e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T11:38:52.8859Z\",\"status\":\"ABORTED\"}},{\"id\":\"edb0feb5-edfc-4a73-b011-69bab35304c6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T07:38:52.882703Z\",\"status\":\"ABORTED\"}},{\"id\":\"5147a6f2-61f9-46ec-88b3-e5965592dd3c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T05:11:09.582883Z\",\"status\":\"ABORTED\"}},{\"id\":\"9500db12-c0f1-4639-ab06-e050da631bba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T04:22:24.114346Z\",\"status\":\"ABORTED\"}},{\"id\":\"ba229aa8-65c6-4e76-99a4-d6db986487ce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T03:38:52.880298Z\",\"status\":\"ABORTED\"}},{\"id\":\"d41c1abe-85a3-4a4f-9af5-d18bde5f1030\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T03:38:38.415604Z\",\"status\":\"ABORTED\"}},{\"id\":\"9de8375f-a7e5-412d-885a-1b9d9be7703a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T00:11:03.140128Z\",\"status\":\"ABORTED\"}},{\"id\":\"b197f50e-886f-4bf8-9fc8-2ed1344e6477\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T23:38:52.885258Z\",\"status\":\"ABORTED\"}},{\"id\":\"7cbdccb7-cce5-4ee7-8fcd-67cc602077b3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T19:38:52.886216Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae32cc94-364c-45bf-8b64-4e513ab401f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T15:38:52.87945Z\",\"status\":\"ABORTED\"}},{\"id\":\"29719d28-14cc-4dca-b77c-b731fdb0c9f1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T11:38:52.887505Z\",\"status\":\"ABORTED\"}},{\"id\":\"2692e50a-93e9-4c5b-9f7c-1284eaf84bba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T11:11:57.472162Z\",\"status\":\"ABORTED\"}},{\"id\":\"1a93b204-3595-4a3e-b5d3-343fed2c9e66\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T07:38:52.914979Z\",\"status\":\"ABORTED\"}},{\"id\":\"597e0897-ea8b-4d92-ad22-91b870c53cd6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T05:17:50.336698Z\",\"status\":\"ABORTED\"}},{\"id\":\"8878dc02-ab98-435c-95ae-007b3f4507ed\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T04:33:07.215329Z\",\"status\":\"ABORTED\"}},{\"id\":\"772c65f8-7786-481a-90fc-1d28ddc34bfc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T03:48:15.472981Z\",\"status\":\"ABORTED\"}},{\"id\":\"d1a89ae7-85fd-438b-854b-6f66e9de80db\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T03:38:52.884029Z\",\"status\":\"ABORTED\"}},{\"id\":\"77f65cef-1d7d-4f5a-8196-fcd1b4179977\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T02:48:52.267027Z\",\"status\":\"ABORTED\"}},{\"id\":\"851679a7-2ff3-4f47-8c47-8359a9564b8c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T00:10:19.405631Z\",\"status\":\"ABORTED\"}},{\"id\":\"f2b02838-5eb9-416f-8f7a-54eda9840898\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T23:38:53.053339Z\",\"status\":\"ABORTED\"}},{\"id\":\"04f12d07-a24e-46bb-a6cb-27ed86aa5f8b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T19:38:52.917169Z\",\"status\":\"ABORTED\"}},{\"id\":\"132d5118-5973-45c1-a1c5-34582f1d2703\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T15:38:53.09423Z\",\"status\":\"ABORTED\"}},{\"id\":\"64c2a1b4-b2da-4b1c-b0df-8c96252bda60\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T11:38:52.93292Z\",\"status\":\"ABORTED\"}},{\"id\":\"84df756f-7cc4-44e0-8771-6cb97012da77\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T11:10:52.565666Z\",\"status\":\"ABORTED\"}},{\"id\":\"4affc17d-f3d6-46fd-a0b3-c420a7bc77b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T07:38:52.950174Z\",\"status\":\"ABORTED\"}},{\"id\":\"fbeefaf1-0de6-436a-9d30-b2a495269e04\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T05:17:23.129504Z\",\"status\":\"ABORTED\"}},{\"id\":\"50399086-71a4-4bfe-93cd-95ec599a0ac4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T04:33:00.655002Z\",\"status\":\"ABORTED\"}},{\"id\":\"6522e461-d179-4308-9e29-b413b0b93f06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T03:46:27.000745Z\",\"status\":\"ABORTED\"}},{\"id\":\"388e2cc5-d09e-41e6-a97a-2972378b780c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T03:38:52.938627Z\",\"status\":\"ABORTED\"}},{\"id\":\"630cb16d-c28b-46c7-b5cc-5e16ac8d9533\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T00:12:20.210418Z\",\"status\":\"ABORTED\"}},{\"id\":\"6730010e-48df-476f-8aaa-6c2ca8961b11\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T23:38:52.928104Z\",\"status\":\"ABORTED\"}},{\"id\":\"384c1ea1-2932-459a-8bbf-8749cd674788\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T19:38:52.938839Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a2ba0f1-21c1-4891-b82e-2552a4833442\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T15:38:52.963905Z\",\"status\":\"ABORTED\"}},{\"id\":\"6f0d9eb1-9bf2-4f6a-a455-fa3ce81f8004\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T11:38:52.936303Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae44eedc-47aa-4343-830e-ed2ffaac2c3b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T11:10:37.166533Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b2192db-3731-41e3-8005-7ebfa0038bfd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T07:38:52.826351Z\",\"status\":\"ABORTED\"}},{\"id\":\"fbe14f51-38eb-4ad0-9558-8f4ec4f76fd5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T05:18:27.573128Z\",\"status\":\"ABORTED\"}},{\"id\":\"20d281ae-7b31-4cf0-99d4-4953a4dcf584\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T04:32:34.405335Z\",\"status\":\"ABORTED\"}},{\"id\":\"93ab76aa-4dab-4546-a961-2428561ab302\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T03:45:16.794125Z\",\"status\":\"ABORTED\"}},{\"id\":\"6c9e95c3-2fda-47cf-8121-7e52bd9eed33\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T03:38:53.060488Z\",\"status\":\"ABORTED\"}},{\"id\":\"367dfec7-61f7-4504-9fba-a0d577938126\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T02:46:58.049328Z\",\"status\":\"ABORTED\"}},{\"id\":\"28edded7-8f66-4658-a7a1-125595bf0f3c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T00:11:44.051002Z\",\"status\":\"ABORTED\"}},{\"id\":\"1cd0e5c4-1be2-40cb-b761-6af51ccfa858\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T23:38:53.00459Z\",\"status\":\"ABORTED\"}},{\"id\":\"af9d93ed-b5f3-4847-8a83-c6372ad49ae0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T19:38:52.849525Z\",\"status\":\"ABORTED\"}},{\"id\":\"e3a52075-4c99-4e51-b9ad-7d50cb5e3310\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T15:38:52.858748Z\",\"status\":\"ABORTED\"}},{\"id\":\"aeb3374b-122e-4aa4-a507-8db24ff25f63\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T11:38:53.003458Z\",\"status\":\"ABORTED\"}},{\"id\":\"310e53d0-8788-4b50-98b7-7715dc9ec7c7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T11:11:33.466236Z\",\"status\":\"ABORTED\"}},{\"id\":\"bb6bb471-03a2-4156-81de-7246a48afa4e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T07:38:52.836674Z\",\"status\":\"ABORTED\"}},{\"id\":\"4c7d9f12-10dc-4828-a0f6-6dc8b3721119\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T05:17:20.18435Z\",\"status\":\"ABORTED\"}},{\"id\":\"a5c22758-015d-4068-862d-d1a392237514\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T04:35:21.226526Z\",\"status\":\"ABORTED\"}},{\"id\":\"d449742f-9159-404d-8a02-2d3bf1b28f5d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T03:49:57.377439Z\",\"status\":\"ABORTED\"}},{\"id\":\"fba2d571-a0bb-4415-802a-76bf39247aa1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T03:38:53.159114Z\",\"status\":\"ABORTED\"}},{\"id\":\"16413e85-1051-40c2-838a-60c84402dbb8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T00:10:55.091815Z\",\"status\":\"ABORTED\"}},{\"id\":\"b7f4a2bd-debb-4847-93bb-e5a49aab1518\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T23:38:52.844686Z\",\"status\":\"ABORTED\"}},{\"id\":\"c3b22b01-d8d7-467b-a4df-10ff6a614e20\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T19:38:52.923518Z\",\"status\":\"ABORTED\"}},{\"id\":\"1d3f337f-cc77-4ecd-a26a-cf07ea170d89\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T15:38:52.842707Z\",\"status\":\"ABORTED\"}},{\"id\":\"3e53d9fe-7191-4c4e-86d5-19f23930a866\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T11:38:52.956584Z\",\"status\":\"ABORTED\"}},{\"id\":\"ce6afd74-0e5d-446b-be27-db2750d97515\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T11:11:20.866497Z\",\"status\":\"ABORTED\"}},{\"id\":\"5d3f46d9-b041-4e56-8101-225ee85f460b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T07:38:52.826425Z\",\"status\":\"ABORTED\"}},{\"id\":\"0d2d6dc4-4549-44a5-ad24-e713636bf79f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T05:22:32.889623Z\",\"status\":\"ABORTED\"}},{\"id\":\"e2df1843-312c-4bc7-a6bc-2a187f559d2b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T04:41:42.85244Z\",\"status\":\"ABORTED\"}},{\"id\":\"d053fd9f-13bb-41c9-8674-384eebb8f322\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T03:57:49.784594Z\",\"status\":\"ABORTED\"}},{\"id\":\"218c3199-1cb1-400d-afb6-be09b36ec503\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T03:38:52.846851Z\",\"status\":\"ABORTED\"}},{\"id\":\"f567a004-cf61-400d-9867-c8da865b2fb8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T02:48:52.937004Z\",\"status\":\"ABORTED\"}},{\"id\":\"d8d1322d-4580-495e-a0f5-7b93f8d9c059\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T00:11:08.89531Z\",\"status\":\"ABORTED\"}},{\"id\":\"354f8d89-facc-4129-b378-ac06dfe14707\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T23:38:53.265213Z\",\"status\":\"ABORTED\"}},{\"id\":\"73b0ba82-833f-4b50-91b8-c557bf25a36d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T19:38:52.996993Z\",\"status\":\"ABORTED\"}},{\"id\":\"7387765e-8601-4ff4-a525-d43f8fb7ba53\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T15:38:52.949402Z\",\"status\":\"ABORTED\"}},{\"id\":\"61ffbd83-cd3f-41a8-8397-450c0984e0d9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T11:38:52.874691Z\",\"status\":\"ABORTED\"}},{\"id\":\"f487af0e-fda2-44f3-b8ab-ae746ce08a6d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T07:38:52.990165Z\",\"status\":\"ABORTED\"}},{\"id\":\"f3a829cb-83ee-4587-b417-52fa01afe446\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T05:18:01.90293Z\",\"status\":\"ABORTED\"}},{\"id\":\"69b8f408-7f86-4bda-babc-7120843d13a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T04:37:29.624408Z\",\"status\":\"ABORTED\"}},{\"id\":\"d7c03f2d-0fb0-44ec-892f-c5e3673b64a5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T03:58:14.064936Z\",\"status\":\"ABORTED\"}},{\"id\":\"16553e25-885e-4d40-a1c5-b94dd07bbae3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T03:38:52.833699Z\",\"status\":\"ABORTED\"}},{\"id\":\"2f1d3bf7-d1bf-43b2-bdaf-1877e8e843f3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T00:11:48.672694Z\",\"status\":\"ABORTED\"}},{\"id\":\"21f329af-32a7-4096-a1fd-18d6762f57dc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T23:38:52.835057Z\",\"status\":\"ABORTED\"}},{\"id\":\"7df2158c-68e7-4690-8900-c1500b5e46c7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T19:38:52.961235Z\",\"status\":\"ABORTED\"}},{\"id\":\"d59b4dcc-1a6d-4c81-b08e-e7f8ccd9836c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T15:38:53.055134Z\",\"status\":\"ABORTED\"}},{\"id\":\"d87fcd55-54d6-4298-8d09-6dac9f85971a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T11:38:52.824979Z\",\"status\":\"ABORTED\"}},{\"id\":\"6070badd-e533-4256-bc61-67788cb29690\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T07:38:52.961402Z\",\"status\":\"ABORTED\"}},{\"id\":\"39e988d0-52de-4c33-9f5f-350422ea09c9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T05:14:20.022605Z\",\"status\":\"ABORTED\"}},{\"id\":\"c0fe30a9-4f16-48e7-bfce-4bf12834684a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T04:29:05.679177Z\",\"status\":\"ABORTED\"}},{\"id\":\"d1ff4925-fb5f-4b5d-9d76-7862d7e8effc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T03:46:19.82095Z\",\"status\":\"ABORTED\"}},{\"id\":\"a3f70364-9a55-42a2-80e4-dd76739522ff\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T03:38:53.033965Z\",\"status\":\"ABORTED\"}},{\"id\":\"e409f13b-6164-43c1-b557-b523b51d4a3e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T00:11:29.318593Z\",\"status\":\"ABORTED\"}},{\"id\":\"59526fad-e0b5-40ad-924f-8dd654ced18b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T23:38:52.951225Z\",\"status\":\"ABORTED\"}},{\"id\":\"c848383b-8a3b-4a56-932d-794683f89a75\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T19:38:52.834591Z\",\"status\":\"ABORTED\"}},{\"id\":\"a63337c5-55ef-42e2-8bbe-75cc96fc575d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T15:38:53.099516Z\",\"status\":\"ABORTED\"}},{\"id\":\"f18bc082-b5c1-4f76-8b7c-5bb216e299fb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T11:38:52.825986Z\",\"status\":\"ABORTED\"}},{\"id\":\"eadc0133-7d67-44a9-a2b5-2d97438e3ecc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T11:11:31.759131Z\",\"status\":\"ABORTED\"}},{\"id\":\"e41fa5d8-fd1d-43a5-b1ac-916438fadee8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T07:38:52.940422Z\",\"status\":\"ABORTED\"}},{\"id\":\"297c775d-65bd-4f43-84e1-4c68096d6875\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T05:19:52.978466Z\",\"status\":\"ABORTED\"}},{\"id\":\"f29cca0e-e321-42d9-a58d-ac0822024fc8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T04:40:30.454264Z\",\"status\":\"ABORTED\"}},{\"id\":\"5ef77f02-631d-4c0a-844d-215c182b7744\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T03:52:26.958087Z\",\"status\":\"ABORTED\"}},{\"id\":\"8cdb24f1-fcec-4026-b1fb-75ff99c71838\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T03:38:52.819319Z\",\"status\":\"ABORTED\"}},{\"id\":\"c4fa2994-86a9-4d6c-8aa4-09a2e3a56895\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T02:56:40.874587Z\",\"status\":\"ABORTED\"}},{\"id\":\"335c6337-d3c4-481f-9b1e-ff4eaea80f6a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T00:10:42.897679Z\",\"status\":\"ABORTED\"}},{\"id\":\"4610a956-7ae4-45f9-ba88-5c34cf1852a8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T23:38:52.934332Z\",\"status\":\"ABORTED\"}},{\"id\":\"0050f5a3-29bf-4142-a04e-b69435a66908\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T19:38:52.957165Z\",\"status\":\"ABORTED\"}},{\"id\":\"8b9ebb25-a224-4c36-9750-d54ccdd54d31\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T15:38:52.831183Z\",\"status\":\"ABORTED\"}},{\"id\":\"24e2f97e-fef1-4082-ba82-9c42fea6a0fe\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T11:38:52.949209Z\",\"status\":\"ABORTED\"}},{\"id\":\"b1ffc34b-6943-4572-a6b6-df556a46c47e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T11:10:23.074139Z\",\"status\":\"ABORTED\"}},{\"id\":\"4ac56395-7ad3-425b-8429-21b18fc2b247\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T07:38:52.966252Z\",\"status\":\"ABORTED\"}},{\"id\":\"47ca3468-15a8-43d8-887e-42795fefdf3d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T04:31:26.25435Z\",\"status\":\"ABORTED\"}},{\"id\":\"fcf5a796-a094-4b26-9243-877fc7589ed1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T03:47:52.561444Z\",\"status\":\"ABORTED\"}},{\"id\":\"1737d10d-fb36-4546-8435-82db683110af\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T03:38:52.860293Z\",\"status\":\"ABORTED\"}},{\"id\":\"f86b6c0a-9fba-4714-b97f-864b8c8f085b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T00:11:14.442056Z\",\"status\":\"ABORTED\"}},{\"id\":\"de7d0c2b-eec5-4ffc-b94e-b06be4a37a00\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T23:38:52.903345Z\",\"status\":\"ABORTED\"}},{\"id\":\"ff9afdcc-e175-44a9-ab30-f101bda9bbf6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T19:38:52.961158Z\",\"status\":\"ABORTED\"}},{\"id\":\"3c156319-e5e7-4102-acfc-feeeb64ad0dc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T15:38:52.912621Z\",\"status\":\"ABORTED\"}},{\"id\":\"b2543c91-df38-4210-8e86-2c6f091a8924\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T11:38:52.882981Z\",\"status\":\"ABORTED\"}},{\"id\":\"43411a01-48ca-4769-a8f6-250d137d02b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T11:10:52.329982Z\",\"status\":\"ABORTED\"}},{\"id\":\"26346634-b28e-48db-88cf-510142af69d4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T07:38:52.907878Z\",\"status\":\"ABORTED\"}},{\"id\":\"d9837896-c9b7-4196-932c-ad6b212f7016\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T05:17:53.107762Z\",\"status\":\"ABORTED\"}},{\"id\":\"e2869c09-069a-4e0a-87a7-8be521412695\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T04:33:32.710544Z\",\"status\":\"ABORTED\"}},{\"id\":\"cb18de02-866d-4308-9c11-2694e89a75bf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T03:50:02.688823Z\",\"status\":\"ABORTED\"}},{\"id\":\"e8eeb0e5-c5e9-4416-a0ce-4985fe827a68\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T03:38:52.87465Z\",\"status\":\"ABORTED\"}},{\"id\":\"7985e461-897c-45b9-8899-f227a6b28124\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T00:10:52.914248Z\",\"status\":\"ABORTED\"}},{\"id\":\"14dc86b8-a04d-458a-9e34-be31b33a58f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T23:38:52.98647Z\",\"status\":\"ABORTED\"}},{\"id\":\"bf7ebc3a-9adf-4ed5-bc76-35442d956790\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T19:38:52.882324Z\",\"status\":\"ABORTED\"}},{\"id\":\"f5e6387f-b2f4-414d-8391-537767fbc3f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T15:38:52.91297Z\",\"status\":\"ABORTED\"}},{\"id\":\"0c3b8d9a-451d-4b67-86fd-dff71dca923a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T11:38:53.017727Z\",\"status\":\"ABORTED\"}},{\"id\":\"a72efec4-4761-4cb8-a3f8-44d3485823e9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T11:11:11.245426Z\",\"status\":\"ABORTED\"}},{\"id\":\"513605f0-8d57-4d20-8656-bf590c60e0f5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T07:38:52.941006Z\",\"status\":\"ABORTED\"}},{\"id\":\"1073c6d5-578d-41d1-ad34-7e19e9e07269\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T05:17:43.165949Z\",\"status\":\"ABORTED\"}},{\"id\":\"d3dab8f4-f0bc-41e1-97ca-d16822589d82\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T04:34:29.972468Z\",\"status\":\"ABORTED\"}},{\"id\":\"8c79ec47-8bdd-44de-9312-221ce53c6847\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T03:47:02.046866Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac2d5603-020d-4a45-adc8-13ac65862586\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T03:38:53.151112Z\",\"status\":\"ABORTED\"}},{\"id\":\"6e48c814-6e00-440a-912f-4ade965e7ff4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T00:11:24.146109Z\",\"status\":\"ABORTED\"}},{\"id\":\"9cb60850-6e56-4d2b-81b5-3c7ad9917ec7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T23:38:52.904803Z\",\"status\":\"ABORTED\"}},{\"id\":\"87dec5eb-6957-4b32-bf84-0076233edf2e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T19:38:52.9668Z\",\"status\":\"ABORTED\"}},{\"id\":\"7fceecbd-6f32-4a1d-8735-5fc6e7742b93\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T15:38:52.91242Z\",\"status\":\"ABORTED\"}},{\"id\":\"5c2e0be6-6467-43cf-9092-1e8be926ea2a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T11:38:53.034871Z\",\"status\":\"ABORTED\"}},{\"id\":\"f938b69f-3fae-4955-9357-f89bf7b596db\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T11:10:58.976024Z\",\"status\":\"ABORTED\"}},{\"id\":\"dc1b2335-63e9-4c88-8df1-f9593069079d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T07:38:52.960512Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac8524fc-233f-4a5e-85c2-dc197b2089d1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T05:21:17.747262Z\",\"status\":\"ABORTED\"}},{\"id\":\"31b2a8f1-7a08-4aaf-8c59-bf684721a64f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T04:33:46.657198Z\",\"status\":\"ABORTED\"}},{\"id\":\"85cc33d1-9e14-4d61-9c55-92aa807aaeb3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T03:55:56.195764Z\",\"status\":\"ABORTED\"}},{\"id\":\"e160fe85-0430-445c-b829-7b97b5bc2e7c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T03:38:52.913548Z\",\"status\":\"ABORTED\"}},{\"id\":\"7bdd52f4-e424-4176-845f-7ad116aba629\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T00:11:18.939463Z\",\"status\":\"ABORTED\"}},{\"id\":\"dd46d824-7acf-4a76-a72d-332c736ae9dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T23:38:52.997598Z\",\"status\":\"ABORTED\"}},{\"id\":\"6f0f0b09-7151-40eb-a195-1f8ea59a3938\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T19:38:52.981501Z\",\"status\":\"ABORTED\"}},{\"id\":\"38ea3bea-0da6-4c6f-bce7-3c3fd8ad2314\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T15:38:52.898316Z\",\"status\":\"ABORTED\"}},{\"id\":\"ec2ee087-1798-4474-a766-4d203f35e778\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T11:38:52.951656Z\",\"status\":\"ABORTED\"}},{\"id\":\"343aa7fe-f8d6-4f5d-8388-a77e6340ee90\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T07:38:52.903313Z\",\"status\":\"ABORTED\"}},{\"id\":\"57128e29-9e19-4bbe-acf3-954ccc5d6ae7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T05:16:28.024387Z\",\"status\":\"ABORTED\"}},{\"id\":\"14784882-9d1e-4804-b9f7-2e633b2239a7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T04:32:01.713919Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e0b7071-d159-4346-ad0a-c6228076be9b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T03:50:33.273197Z\",\"status\":\"ABORTED\"}},{\"id\":\"de46bee4-099b-40cd-8190-1041b5d661e5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T03:38:52.995249Z\",\"status\":\"ABORTED\"}},{\"id\":\"2b01053b-1e08-411e-8d60-341ad04019dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T00:10:32.75409Z\",\"status\":\"ABORTED\"}},{\"id\":\"28d60653-a8ee-4b4e-bb7b-94ed4b050f92\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T23:38:52.902086Z\",\"status\":\"ABORTED\"}},{\"id\":\"b4e161dd-e6f5-4070-a605-bff2dab40001\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T19:38:52.919984Z\",\"status\":\"ABORTED\"}},{\"id\":\"257d7253-7f83-413a-981a-61f21caa8f46\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T15:38:52.965463Z\",\"status\":\"ABORTED\"}},{\"id\":\"3aebb814-20de-4629-ac72-e45ccd8d584b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T11:38:52.902093Z\",\"status\":\"ABORTED\"}},{\"id\":\"7c17e773-448f-489b-83c4-175f16e07254\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T07:38:53.15872Z\",\"status\":\"ABORTED\"}},{\"id\":\"6c513966-fdcf-473b-8abf-646554a029d4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T05:15:33.191478Z\",\"status\":\"ABORTED\"}},{\"id\":\"1402c640-9f0d-41ad-a6db-7f795e9b8d1a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T04:30:16.938466Z\",\"status\":\"ABORTED\"}},{\"id\":\"2a7d6066-3169-4ce6-9f9c-42f2a9379b1f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T03:46:54.442544Z\",\"status\":\"ABORTED\"}},{\"id\":\"a94039a7-9c86-4435-b8aa-5cae55e36ac7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T03:38:52.962351Z\",\"status\":\"ABORTED\"}},{\"id\":\"bb048a1a-6d9c-4078-adbc-6f64dd869bb5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T00:12:02.177226Z\",\"status\":\"ABORTED\"}},{\"id\":\"5d8110b1-3e13-492b-b13b-a096164f93ea\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T23:38:52.94951Z\",\"status\":\"ABORTED\"}},{\"id\":\"693343c7-3a9e-4286-b234-f30b038d835b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T19:38:52.992499Z\",\"status\":\"ABORTED\"}},{\"id\":\"77571588-a9b5-4def-8b7d-7f3118fbc4cf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T15:38:53.222599Z\",\"status\":\"ABORTED\"}},{\"id\":\"d06026e4-00a4-4be4-b22c-5a5aace6fbde\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T11:38:52.907266Z\",\"status\":\"ABORTED\"}},{\"id\":\"4584e28b-f540-4fbe-8ddf-3044d59b20ad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T11:11:13.237803Z\",\"status\":\"ABORTED\"}},{\"id\":\"d2084bf6-75f6-4e8b-bc70-c5c64b5713b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T07:38:52.883525Z\",\"status\":\"ABORTED\"}},{\"id\":\"0363c754-ee18-4591-a8a2-b59148716c49\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T05:18:55.894798Z\",\"status\":\"ABORTED\"}},{\"id\":\"2fd7f1ac-d871-4a98-bc2a-40c117e23267\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T04:30:06.643144Z\",\"status\":\"ABORTED\"}},{\"id\":\"8d80df24-9743-4296-b08a-2962ec6dfd54\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T03:53:08.896874Z\",\"status\":\"ABORTED\"}},{\"id\":\"2f7a8dc9-e4d6-43f2-8ec9-317d7a55b81d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T03:38:52.908838Z\",\"status\":\"ABORTED\"}},{\"id\":\"4bf8c07b-98c4-4e8e-8b75-8d9157f12b25\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T02:47:51.217926Z\",\"status\":\"ABORTED\"}},{\"id\":\"44be9948-421d-4a11-907f-0709a6051e2c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-25T00:11:12.946285Z\",\"status\":\"ABORTED\"}},{\"id\":\"afd0e020-a501-4653-937d-59810c66f757\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T23:38:52.939358Z\",\"status\":\"ABORTED\"}},{\"id\":\"d99de8a6-af51-4e9a-9e1a-39a11d8f83cf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T19:38:52.855759Z\",\"status\":\"ABORTED\"}},{\"id\":\"a3af2669-5839-41e5-aec1-5390853fe856\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T15:38:53.101618Z\",\"status\":\"ABORTED\"}},{\"id\":\"7e039b80-4bb8-432c-bfb0-1f98d334ef8f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T11:38:52.969012Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a605d36-68c1-4929-bd57-193381e4733f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T11:11:09.358598Z\",\"status\":\"ABORTED\"}},{\"id\":\"84c9e29b-36fa-4b61-a7c2-7129913ec8b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T07:38:52.975189Z\",\"status\":\"ABORTED\"}},{\"id\":\"73f68f2d-5ee5-4f49-a48a-3bd8c67708aa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T05:15:12.057982Z\",\"status\":\"ABORTED\"}},{\"id\":\"9a5ec066-5ca1-4e4d-a039-645a2e5fc274\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T04:30:05.366901Z\",\"status\":\"ABORTED\"}},{\"id\":\"6eadcf6e-bf76-4def-a4ad-1124ac6995d9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T03:47:27.577949Z\",\"status\":\"ABORTED\"}},{\"id\":\"561d4278-ddc0-403e-88dc-957f9d4e5293\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T03:38:53.253213Z\",\"status\":\"ABORTED\"}},{\"id\":\"0020c109-71b0-434f-a660-c50e0b0de9b1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-24T00:11:10.620962Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b126f4e-58f4-4eaf-9b4e-546a75e1d983\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T23:38:52.933233Z\",\"status\":\"ABORTED\"}},{\"id\":\"a79d8f7f-8e6e-4f1c-972b-1b94966756a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T19:38:52.887853Z\",\"status\":\"ABORTED\"}},{\"id\":\"feece3a6-615f-4151-9fc6-2b93cdc88c65\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T15:38:52.907075Z\",\"status\":\"ABORTED\"}},{\"id\":\"71873d54-036e-478b-850f-29a3c02cfead\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T11:38:52.966595Z\",\"status\":\"ABORTED\"}},{\"id\":\"57e1735c-fcb9-40c6-b305-754ea13e52ce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T11:10:37.095746Z\",\"status\":\"ABORTED\"}},{\"id\":\"08dc7a80-e6e4-4180-8328-a3593ddd170d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T07:38:53.421107Z\",\"status\":\"ABORTED\"}},{\"id\":\"a80f91c0-ce64-483a-8f92-4ece42a6bab9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T05:23:16.334514Z\",\"status\":\"ABORTED\"}},{\"id\":\"a491a913-418b-449b-80bc-64b647e17196\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T04:30:36.151123Z\",\"status\":\"ABORTED\"}},{\"id\":\"42cabf47-b35e-4f40-ae00-77c37000392c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T03:42:11.923793Z\",\"status\":\"ABORTED\"}},{\"id\":\"ed1ae7cd-cf1d-4617-bf37-41d58931ad36\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T03:38:52.933663Z\",\"status\":\"ABORTED\"}},{\"id\":\"03eb1475-9f17-46f3-8aaa-71e009808823\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-23T00:10:52.287318Z\",\"status\":\"ABORTED\"}},{\"id\":\"43b59d87-7603-4c95-a1e3-a84dd668aaa3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T23:38:52.933456Z\",\"status\":\"ABORTED\"}},{\"id\":\"c7e0e03e-a771-48ff-9f12-24dc83f7f583\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T19:38:52.936176Z\",\"status\":\"ABORTED\"}},{\"id\":\"63528ab6-ecff-4774-b4fa-f16afc8e1ade\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T15:38:53.420042Z\",\"status\":\"ABORTED\"}},{\"id\":\"a35b67af-9330-4b07-98fd-d0dd7c915e23\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T11:38:52.85819Z\",\"status\":\"ABORTED\"}},{\"id\":\"2ed80b47-749b-4353-9bdb-3f7915198975\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T11:13:16.989933Z\",\"status\":\"ABORTED\"}},{\"id\":\"406f5e56-f79b-4b91-85ec-c614fb65ed1e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T07:38:52.920863Z\",\"status\":\"ABORTED\"}},{\"id\":\"369b18ee-2a51-4ec4-92bc-3617f211e35c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T05:16:11.267395Z\",\"status\":\"ABORTED\"}},{\"id\":\"77a16d79-e9ea-4376-900e-fb7da2a4e72c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T04:29:28.882067Z\",\"status\":\"ABORTED\"}},{\"id\":\"92bc5cb3-c902-438e-a733-067636f66fa1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T03:42:14.309182Z\",\"status\":\"ABORTED\"}},{\"id\":\"d66ee8c1-f7aa-4bd4-92f6-a7063d9d9294\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T03:38:52.846472Z\",\"status\":\"ABORTED\"}},{\"id\":\"bbeb7e80-f171-4622-9ef8-a4d828f3ce5f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T02:47:38.931078Z\",\"status\":\"ABORTED\"}},{\"id\":\"87af38ca-d089-44db-a225-818e9fc04d0a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-22T00:10:11.191617Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd2766f8-26d3-4d73-8328-f0bbb3ac7f7b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T23:38:52.859294Z\",\"status\":\"ABORTED\"}},{\"id\":\"b013bd3d-5950-49cd-a945-516b9ee4c1d2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T19:38:52.841969Z\",\"status\":\"ABORTED\"}},{\"id\":\"7dadaf6f-0fb5-4a3b-ad1f-ca1ed9fe79ba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T15:38:52.9937Z\",\"status\":\"ABORTED\"}},{\"id\":\"40921c6d-7ac1-46c4-9410-30296cac9fcf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T11:38:52.929122Z\",\"status\":\"ABORTED\"}},{\"id\":\"ff73ab1e-a4ec-4e45-bb12-82405547e1cf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T11:11:12.88934Z\",\"status\":\"ABORTED\"}},{\"id\":\"dcbbbf37-3697-4a1e-9ec3-22fcf335a9c3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T09:47:10.548836Z\",\"status\":\"ABORTED\"}},{\"id\":\"cb033b11-785c-401e-a1b6-1d781b174716\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T07:38:52.876116Z\",\"status\":\"ABORTED\"}},{\"id\":\"7dcaec48-fc01-4a03-abad-ed5e87def321\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T05:16:47.486277Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2795b2a-9211-4b20-a99e-4f9d4c533bd1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T04:32:15.992549Z\",\"status\":\"ABORTED\"}},{\"id\":\"a8610891-e3bb-4291-9a95-7a112a1a9139\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T03:48:46.269012Z\",\"status\":\"ABORTED\"}},{\"id\":\"8e14c95b-96ef-4a91-8c78-0f8a9ac6a714\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T03:38:53.088646Z\",\"status\":\"ABORTED\"}},{\"id\":\"b2fd37b5-80e8-4deb-879f-e0aa052ed29b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-21T00:10:32.981286Z\",\"status\":\"ABORTED\"}},{\"id\":\"85668938-2194-48d6-8fc1-e1ab452f3e42\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T23:38:52.973388Z\",\"status\":\"ABORTED\"}},{\"id\":\"0642db8a-2344-462b-bc20-841a1bf5c9bd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T19:38:52.953856Z\",\"status\":\"ABORTED\"}},{\"id\":\"cf72c90f-116e-4baa-9c94-8700e2b99992\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T15:38:53.076695Z\",\"status\":\"ABORTED\"}},{\"id\":\"158b87e3-e1f0-40d7-a77b-c5fa0556c7a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T11:38:53.007278Z\",\"status\":\"ABORTED\"}},{\"id\":\"11e9a413-fb86-4138-a121-22ecfd6a0fa2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T07:38:52.891868Z\",\"status\":\"ABORTED\"}},{\"id\":\"12779523-e1eb-43ed-9683-83411650c254\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T05:15:33.424442Z\",\"status\":\"ABORTED\"}},{\"id\":\"fc06ed45-97e0-4340-8fab-25f233d635c0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T04:32:11.885627Z\",\"status\":\"ABORTED\"}},{\"id\":\"9f4b4e5f-2934-498f-9404-b16760ccfc80\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T03:49:35.340838Z\",\"status\":\"ABORTED\"}},{\"id\":\"2b84a98d-b1e0-4e61-8f63-436e22872734\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T03:38:52.877069Z\",\"status\":\"ABORTED\"}},{\"id\":\"86d4326a-0b13-4b44-971b-2efb83bab625\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-20T00:10:28.310305Z\",\"status\":\"ABORTED\"}},{\"id\":\"734d6cd2-595f-40c4-b967-bb2052a921e1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T23:38:52.911634Z\",\"status\":\"ABORTED\"}},{\"id\":\"71c24fdf-a48e-49e0-ad34-24be3584814c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T19:38:52.882052Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2b21ac9-70a6-4e91-98f6-f82b4b497630\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T15:38:52.901276Z\",\"status\":\"ABORTED\"}},{\"id\":\"1a9a8ed5-302a-43be-8f20-9415c1a206c9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T11:38:52.89183Z\",\"status\":\"ABORTED\"}},{\"id\":\"a23e81e2-a603-4539-849a-357fcd5dbd1c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T07:38:52.895117Z\",\"status\":\"ABORTED\"}},{\"id\":\"0fd8297e-d43e-49a9-9c98-fb9340e0e3cb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T05:14:33.130179Z\",\"status\":\"ABORTED\"}},{\"id\":\"001ddbf0-d0fd-4a36-9836-d6d94e19cb07\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T04:26:13.704848Z\",\"status\":\"ABORTED\"}},{\"id\":\"582275cd-1696-4324-ac4b-d8e6b1dce4ad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T03:44:15.367689Z\",\"status\":\"ABORTED\"}},{\"id\":\"aec49dcd-6500-4007-98c9-1c700a6c8f50\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T03:38:53.08498Z\",\"status\":\"ABORTED\"}},{\"id\":\"0abc7936-5a80-4257-b7e8-6e8b82477a79\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-19T00:11:58.510134Z\",\"status\":\"ABORTED\"}},{\"id\":\"39a9f6dd-efd5-44c4-9fbe-6ddb459289e2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T23:38:52.884417Z\",\"status\":\"ABORTED\"}},{\"id\":\"38bb5380-9f27-43d9-ba7c-c92007a401fe\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T19:38:52.892837Z\",\"status\":\"ABORTED\"}},{\"id\":\"5f656d5e-7ffd-4019-873b-6561cd21a486\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T15:38:52.909909Z\",\"status\":\"ABORTED\"}},{\"id\":\"60c0cafb-2f33-4dc0-8de1-6cf042041f87\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T11:38:52.975287Z\",\"status\":\"ABORTED\"}},{\"id\":\"d5da666d-773f-4f22-8677-809dd1d3fe97\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T11:10:36.790743Z\",\"status\":\"ABORTED\"}},{\"id\":\"8d0cdc00-402b-4ad3-8661-1fc726fd6736\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T07:38:53.002539Z\",\"status\":\"ABORTED\"}},{\"id\":\"01a54f67-6bb5-440c-8a78-f0280cb73e86\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T05:15:09.776236Z\",\"status\":\"ABORTED\"}},{\"id\":\"04cb7334-b129-45d7-84bb-43ce040ac461\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T04:30:06.626654Z\",\"status\":\"ABORTED\"}},{\"id\":\"a183045c-e56c-4920-ad59-bb0c59ce2ee2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T03:47:25.654857Z\",\"status\":\"ABORTED\"}},{\"id\":\"9e16864d-57d7-45a2-a8c2-e888a3ebae96\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T03:38:53.021541Z\",\"status\":\"ABORTED\"}},{\"id\":\"7b8338be-9374-4bda-84df-2a8c1d587745\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-18T00:10:53.205911Z\",\"status\":\"ABORTED\"}},{\"id\":\"825af5b0-6ddf-43dc-aa49-216a8d375c32\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T23:38:52.97092Z\",\"status\":\"ABORTED\"}},{\"id\":\"4bd833c7-ae5d-4ad8-8277-c9a96b90aee2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T19:38:52.988518Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b9c124a-579a-43c5-a4ad-97604af4e2dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T15:38:52.866835Z\",\"status\":\"ABORTED\"}},{\"id\":\"d9112f00-8b82-4efa-bcb1-f43fcbebb047\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T11:38:52.875386Z\",\"status\":\"ABORTED\"}},{\"id\":\"b5c91abc-9740-44ac-aac6-61ab738e9240\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T11:10:51.204401Z\",\"status\":\"ABORTED\"}},{\"id\":\"9e10bc52-fa93-4ccd-a422-ccbc1b1cb8f6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T07:38:52.858064Z\",\"status\":\"ABORTED\"}},{\"id\":\"6929e91b-bf43-4673-ba2f-9da7988e90d3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T05:16:03.659941Z\",\"status\":\"ABORTED\"}},{\"id\":\"825de75c-cee2-47a3-86e1-135a94ab8a64\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T04:28:51.701871Z\",\"status\":\"ABORTED\"}},{\"id\":\"94945c97-e949-4290-8452-078a68ccb0c9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T03:42:42.877166Z\",\"status\":\"ABORTED\"}},{\"id\":\"82c5c81f-70a4-43f1-a8e2-9e740c3e0d25\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T03:38:52.851676Z\",\"status\":\"ABORTED\"}},{\"id\":\"9da2b2b2-819c-4191-b6b6-5892637988ac\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-17T00:11:22.683246Z\",\"status\":\"ABORTED\"}},{\"id\":\"6933331b-9221-4f44-b31c-88e892cc80fc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T23:38:53.481893Z\",\"status\":\"ABORTED\"}},{\"id\":\"a33990d4-c67d-4de0-945f-a2c44b624320\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T19:38:53.137082Z\",\"status\":\"ABORTED\"}},{\"id\":\"31c8511f-90c5-453e-a6f1-91307ca70eae\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T15:38:52.949879Z\",\"status\":\"ABORTED\"}},{\"id\":\"8de36bf7-b88d-4ce1-8f02-014f1aaf8bb1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T11:38:53.01505Z\",\"status\":\"ABORTED\"}},{\"id\":\"236785c8-a33d-474b-8205-691ea82a6123\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T11:11:13.501046Z\",\"status\":\"ABORTED\"}},{\"id\":\"e9970156-06a8-4071-a034-aa3a22efdc88\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T07:38:52.891105Z\",\"status\":\"ABORTED\"}},{\"id\":\"2df1454d-c988-4b6c-b364-64ff9624f9d7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T05:14:53.115743Z\",\"status\":\"ABORTED\"}},{\"id\":\"7606e4fa-1c58-4dc5-aae5-8d0c698fc1a7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T04:31:22.62154Z\",\"status\":\"ABORTED\"}},{\"id\":\"e78690c8-9c62-4404-9657-e062008e3e41\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T03:48:33.751664Z\",\"status\":\"ABORTED\"}},{\"id\":\"01812e9a-403d-47ea-a0df-49f714ad6ca9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T03:38:53.026126Z\",\"status\":\"ABORTED\"}},{\"id\":\"76109b36-4c05-46d9-a7fc-2f927a49edf0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-16T00:10:51.78954Z\",\"status\":\"ABORTED\"}},{\"id\":\"d2673d2b-f6d4-4916-bd08-f5caa1bc8ccb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T23:38:53.581801Z\",\"status\":\"ABORTED\"}},{\"id\":\"18cb76ed-712e-4627-89a2-a01965b88672\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T19:38:52.87542Z\",\"status\":\"ABORTED\"}},{\"id\":\"ee95c389-6b99-4a25-a902-6ad2527a22b6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T15:38:52.882729Z\",\"status\":\"ABORTED\"}},{\"id\":\"8b287dc0-16b9-42b3-9b84-68d6e4d36349\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T11:38:52.839176Z\",\"status\":\"ABORTED\"}},{\"id\":\"a1dcf856-a9c0-40eb-ab8a-26baa37977da\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T11:11:26.716662Z\",\"status\":\"ABORTED\"}},{\"id\":\"b326879c-4bbb-4275-9e78-58fd58ffe2b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T07:38:52.886345Z\",\"status\":\"ABORTED\"}},{\"id\":\"86b4b194-1c77-4763-a338-eea6f2053976\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T05:15:40.866671Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6b64e46-2b68-42e2-b0f6-24b4e9800377\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T04:30:18.872828Z\",\"status\":\"ABORTED\"}},{\"id\":\"b2835d55-a0e2-44aa-9771-777a87221b47\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T03:44:49.986103Z\",\"status\":\"ABORTED\"}},{\"id\":\"556df8c9-277c-4bb0-8164-669220efada8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T03:38:52.881416Z\",\"status\":\"ABORTED\"}},{\"id\":\"a167d039-39d2-44ed-96b2-c0314b60f96f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-15T00:11:03.824261Z\",\"status\":\"ABORTED\"}},{\"id\":\"e664014a-693b-4501-85c1-1db5e9e70b50\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-14T23:38:52.885794Z\",\"status\":\"ABORTED\"}},{\"id\":\"90e8aa0a-cc76-4949-8f94-34e0c51af545\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-14T19:38:52.885778Z\",\"status\":\"ABORTED\"}},{\"id\":\"f0faf520-d7ec-41b1-b897-3f3cc8806343\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-14T15:38:52.865266Z\",\"status\":\"ABORTED\"}},{\"id\":\"dc6e0cf6-86a8-42dc-9bd5-d1186596fb19\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-14T11:38:52.972239Z\",\"status\":\"ABORTED\"}},{\"id\":\"589017c1-43f6-4c6e-b17c-5ecef19cce70\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-14T11:10:58.277638Z\",\"status\":\"ABORTED\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get AWS On Demand tasks returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:58.228Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/ondemand/aws/invalid-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"missing or invalid url parameter 'taskId', expected uuid format '6d09294c-9ad9-42fd-a759-a0c1599b4843'\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get AWS on demand task returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:58.547Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/ondemand/aws/00000000-0000-0000-824a-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no task found with id '00000000-0000-0000-824a-000000000000'\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get AWS on demand task returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:58.860Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/ondemand/aws/63d6b4f5-e5d0-4d90-824a-9580f05f026a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"63d6b4f5-e5d0-4d90-824a-9580f05f026a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-03-05T14:24:46.915915Z\",\"status\":\"ABORTED\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get AWS on demand task returns \"OK.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:51.242Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/aws/not-an-account-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"missing or invalid url parameter 'accountId', expected 12 digit format '123456789012'\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get AWS scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:51.695Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/aws/404404404404", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no aws scan options found for account 404404404404\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get AWS scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:52.143Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"000000000002\",\"type\":\"aws_scan_options\",\"attributes\":{\"lambda\":false,\"sensitive_data\":false,\"vuln_containers_os\":true,\"vuln_host_os\":true}},{\"id\":\"123456789012\",\"type\":\"aws_scan_options\",\"attributes\":{\"lambda\":true,\"sensitive_data\":true,\"vuln_containers_os\":true,\"vuln_host_os\":true}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"000000000002\",\"type\":\"aws_scan_options\",\"attributes\":{\"lambda\":false,\"sensitive_data\":false,\"vuln_containers_os\":true,\"vuln_host_os\":true}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get AWS scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T14:43:00.386Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/azure/invalid%20uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"missing or invalid url parameter 'subscriptionId', expected uuid format '12345678-90ab-cdef-1234-567890abcdef'\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get Azure scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:53.100Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/azure/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no azure scan options found for subscription 00000000-0000-0000-0000-000000000000\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get Azure scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:53.538Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/gcp/no", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"project_id 'no' is too short: must be at least 6 characters (current: 2)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get GCP scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:53.981Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/gcp/nonexistent-project-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no gcp scan options found for project nonexistent-project-id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get GCP scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:54.439Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"invalid/project/id\",\"type\":\"gcp_scan_options\",\"attributes\":{\"vuln_containers_os\":true,\"vuln_host_os\":true}},{\"id\":\"api-spec-test\",\"type\":\"gcp_scan_options\",\"attributes\":{\"vuln_containers_os\":false,\"vuln_host_os\":true}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/gcp/api-spec-test", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"api-spec-test\",\"type\":\"gcp_scan_options\",\"attributes\":{\"vuln_containers_os\":false,\"vuln_host_os\":true}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get GCP scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:59.176Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/ondemand/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"438046ce-01cd-4ae5-b117-ff971e6fa449\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T22:21:53.957627Z\",\"status\":\"QUEUED\"}},{\"id\":\"9a057905-00de-40c1-b645-1281f4eac18d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T22:21:42.362661Z\",\"status\":\"QUEUED\"}},{\"id\":\"d4e6bf98-7859-4fba-a01b-88650b810c95\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T21:42:30.997994Z\",\"status\":\"QUEUED\"}},{\"id\":\"c727a6d2-cef2-4682-8b04-d3f49545f7ba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T21:41:47.235325Z\",\"status\":\"QUEUED\"}},{\"id\":\"d05e4198-9a09-4a88-b434-e2df8ebd52f8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T18:21:42.342483Z\",\"status\":\"ABORTED\"}},{\"id\":\"1137128a-21fa-444d-a0e3-fec2603f65bf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T17:13:33.308082Z\",\"status\":\"ABORTED\"}},{\"id\":\"135d3831-d6ae-4363-853b-2b3eb439d7c9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T14:21:42.293335Z\",\"status\":\"ABORTED\"}},{\"id\":\"351fde97-201a-400a-ade9-17f970033b7c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T11:09:52.551702Z\",\"status\":\"ABORTED\"}},{\"id\":\"1adbd8f3-8889-43a2-8140-b7285eca215a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T10:21:42.303327Z\",\"status\":\"ABORTED\"}},{\"id\":\"a0b9dcef-cee3-4da5-b54d-b4d6d84a30f5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T06:21:42.32776Z\",\"status\":\"ABORTED\"}},{\"id\":\"e173647a-ff6e-45aa-97d0-cd10dbba4c08\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T05:15:49.565101Z\",\"status\":\"ABORTED\"}},{\"id\":\"320ed417-7d25-4ea4-816e-0bc9bc204bf5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T04:15:44.720995Z\",\"status\":\"ABORTED\"}},{\"id\":\"aacdf6ce-b232-49a3-a4ec-f4cfe60f8170\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T03:25:39.485935Z\",\"status\":\"ABORTED\"}},{\"id\":\"189b2444-f334-4b53-8cc8-94622404fc50\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T02:21:42.346673Z\",\"status\":\"ABORTED\"}},{\"id\":\"4402d590-58ac-4f28-aa28-6f988a70bf00\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-23T00:37:50.39428Z\",\"status\":\"ABORTED\"}},{\"id\":\"9ada34d8-acbf-43c4-a738-4612d040dac2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T22:21:42.334004Z\",\"status\":\"ABORTED\"}},{\"id\":\"d450a1bb-03c6-43c3-810b-0bc115690ad6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T18:21:42.333764Z\",\"status\":\"ABORTED\"}},{\"id\":\"f8111c17-04fe-45fc-915a-f16d4a7b6a10\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T14:21:42.307823Z\",\"status\":\"ABORTED\"}},{\"id\":\"b867db23-4b50-467f-8223-268307e4ad5e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T11:10:27.868878Z\",\"status\":\"ABORTED\"}},{\"id\":\"dc8e48b8-6463-4bb8-b111-ce84ab65cb01\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T10:21:42.275629Z\",\"status\":\"ABORTED\"}},{\"id\":\"9046129e-8624-4bae-94d4-13ea46ab94dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T06:21:42.291359Z\",\"status\":\"ABORTED\"}},{\"id\":\"711f1804-469a-4deb-b72c-a4c95a219b09\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T05:17:26.196198Z\",\"status\":\"ABORTED\"}},{\"id\":\"7e07f267-7579-46df-a120-77cd096f05a4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T04:17:23.790527Z\",\"status\":\"ABORTED\"}},{\"id\":\"26089a87-f950-41b6-8ab8-a4fb0dc4ddb4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T03:27:11.42391Z\",\"status\":\"ABORTED\"}},{\"id\":\"aaeaef9a-6649-45b6-aabe-42790fa3c634\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T02:21:42.287001Z\",\"status\":\"ABORTED\"}},{\"id\":\"3dd08559-cbb8-443f-8da6-c162dfd16d58\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-22T00:40:04.75492Z\",\"status\":\"ABORTED\"}},{\"id\":\"eeedcdba-7770-4a9e-807b-3fb083384740\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T22:21:42.291414Z\",\"status\":\"ABORTED\"}},{\"id\":\"03399efd-22a3-4549-9555-1ba8087879d7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T18:21:42.303908Z\",\"status\":\"ABORTED\"}},{\"id\":\"3e084827-0ff9-43e4-9126-6627257e05db\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T14:21:42.301492Z\",\"status\":\"ABORTED\"}},{\"id\":\"0de09ece-8430-4ca3-97ee-d01e560fcd1f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T11:11:33.272564Z\",\"status\":\"ABORTED\"}},{\"id\":\"bd7d8387-ec24-4e71-9247-f97870bb4413\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T10:21:42.324829Z\",\"status\":\"ABORTED\"}},{\"id\":\"21d6e1ed-495b-4361-9835-8f70787ab205\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T06:21:42.407406Z\",\"status\":\"ABORTED\"}},{\"id\":\"16f67fb0-04a1-4062-bd34-7c43d9450a77\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T05:16:44.590692Z\",\"status\":\"ABORTED\"}},{\"id\":\"1f1b7999-8d7d-46db-ba3e-2a2b469c4eec\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T04:18:08.358881Z\",\"status\":\"ABORTED\"}},{\"id\":\"82dd68ca-78eb-4478-9216-44765e6965f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T03:27:31.205708Z\",\"status\":\"ABORTED\"}},{\"id\":\"175dec5b-af9a-4721-9108-82a8e68556cc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T02:21:42.314922Z\",\"status\":\"ABORTED\"}},{\"id\":\"e6e04b5c-5f28-4910-8dc6-eaea17fa56cb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-21T00:39:21.145986Z\",\"status\":\"ABORTED\"}},{\"id\":\"0c54dc21-6f5f-414d-891d-6e525f260d83\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T22:21:42.30775Z\",\"status\":\"ABORTED\"}},{\"id\":\"1ff5a457-8562-491b-be8e-53e6027dbdb1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T18:21:42.300824Z\",\"status\":\"ABORTED\"}},{\"id\":\"8aa300fd-4765-45ca-a03c-8074e6dc7946\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T14:21:42.308382Z\",\"status\":\"ABORTED\"}},{\"id\":\"41ba21e0-a31a-47a5-8e3f-3d5951968bd7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T11:09:49.949609Z\",\"status\":\"ABORTED\"}},{\"id\":\"4b033097-4443-43b6-bbf7-580fd018630e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T10:21:42.310742Z\",\"status\":\"ABORTED\"}},{\"id\":\"3f0d663d-77e3-4466-888e-8e407a2de5b3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T06:21:42.316962Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2fd4d44-d62d-4c3e-af73-d38fd788fe16\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T05:16:14.650594Z\",\"status\":\"ABORTED\"}},{\"id\":\"61b4f8cb-2d88-4f51-8e7d-2e86ef1cb74c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T04:18:02.49587Z\",\"status\":\"ABORTED\"}},{\"id\":\"082d6a6e-64a8-480b-a4d8-8436b97fdf8d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T03:37:18.649262Z\",\"status\":\"ABORTED\"}},{\"id\":\"9e652ba5-4cb1-41ab-8a4f-3d98766db1d4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T02:21:42.31988Z\",\"status\":\"ABORTED\"}},{\"id\":\"4018730e-c0da-4ad2-96ff-70ba26a6df7b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-20T00:40:49.102204Z\",\"status\":\"ABORTED\"}},{\"id\":\"2206aed0-2b96-4824-8f91-f70ce535fdef\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T22:21:42.314008Z\",\"status\":\"ABORTED\"}},{\"id\":\"7df8af20-a2d5-4576-8ca9-cd662e8c83ea\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T18:21:42.320286Z\",\"status\":\"ABORTED\"}},{\"id\":\"0dbf7a33-f2db-4180-aae7-c361274e16be\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T14:21:42.311023Z\",\"status\":\"ABORTED\"}},{\"id\":\"da1f45f0-4db2-4f51-b2a1-822f55e0a537\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T10:21:42.312806Z\",\"status\":\"ABORTED\"}},{\"id\":\"19f27dd3-db78-4c07-8526-bcaac9fe8129\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T06:21:42.321706Z\",\"status\":\"ABORTED\"}},{\"id\":\"8ad7d6ea-68e6-48f8-80d2-25d0f54bfd67\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T05:17:20.502005Z\",\"status\":\"ABORTED\"}},{\"id\":\"cc85342d-fe4a-4b93-99b3-81f6f46d0a79\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T04:16:23.666829Z\",\"status\":\"ABORTED\"}},{\"id\":\"fc676365-3dd0-48f9-a747-e349be282613\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T03:31:41.678172Z\",\"status\":\"ABORTED\"}},{\"id\":\"2f8f2c64-a72f-4bae-8b3b-27574140092e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T02:21:42.325789Z\",\"status\":\"ABORTED\"}},{\"id\":\"16fb230a-913a-4d0b-b684-9d68d8378b6e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-19T00:41:28.013556Z\",\"status\":\"ABORTED\"}},{\"id\":\"e81e8188-097e-481a-8cce-e810d2354593\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T22:21:42.395197Z\",\"status\":\"ABORTED\"}},{\"id\":\"0aa3d9fe-96d0-45fc-8ab3-b0da6f79ec7a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T18:21:42.324905Z\",\"status\":\"ABORTED\"}},{\"id\":\"5093f03b-9197-4199-af29-97407b7013e6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T14:21:42.303273Z\",\"status\":\"ABORTED\"}},{\"id\":\"c10a7da2-1836-4c53-a935-4f4396b6a202\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T10:21:42.323079Z\",\"status\":\"ABORTED\"}},{\"id\":\"ea10bb4a-72c3-477b-b929-b099349ac97a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T06:21:42.327912Z\",\"status\":\"ABORTED\"}},{\"id\":\"66d8f9a1-a60f-4c10-82de-061a660ea27c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T05:16:22.439685Z\",\"status\":\"ABORTED\"}},{\"id\":\"afb5ca14-8afd-438a-8d06-213815a914cc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T04:15:46.201484Z\",\"status\":\"ABORTED\"}},{\"id\":\"376f4c4e-194c-4b4f-b5b9-fae9c13d9ebb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T03:25:26.916709Z\",\"status\":\"ABORTED\"}},{\"id\":\"9f183a85-81a1-4544-8aa9-361e5da6cf06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T02:35:29.955848Z\",\"status\":\"ABORTED\"}},{\"id\":\"d7075a31-e0a6-40b2-a74f-3418a4574388\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T02:21:42.323248Z\",\"status\":\"ABORTED\"}},{\"id\":\"72d76fe9-031d-461d-a463-2a81fed8a969\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-18T00:36:49.430636Z\",\"status\":\"ABORTED\"}},{\"id\":\"9fc4e124-1aba-41cf-9497-a73cb49ad94a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T22:21:42.308102Z\",\"status\":\"ABORTED\"}},{\"id\":\"4070c732-079c-43cc-a1fb-0d77ab5e4827\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T18:21:42.305536Z\",\"status\":\"ABORTED\"}},{\"id\":\"1ad5600a-8c05-45cd-bdfc-844ab4caf19f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T14:21:42.321092Z\",\"status\":\"ABORTED\"}},{\"id\":\"e01a9e46-d68b-4814-8341-d217836900ab\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T11:10:20.016853Z\",\"status\":\"ABORTED\"}},{\"id\":\"858ccf55-1e3c-48cd-99b3-86fa5ee2413a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T10:21:42.372982Z\",\"status\":\"ABORTED\"}},{\"id\":\"ee0a1f26-b744-47c3-b42a-02147f878c07\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T06:21:42.298991Z\",\"status\":\"ABORTED\"}},{\"id\":\"f6e815a1-b613-4e65-8cbc-a7d090e1bbc0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T05:15:26.268038Z\",\"status\":\"ABORTED\"}},{\"id\":\"cfb1a708-891a-4018-9afa-a27d9fd10f38\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T04:17:31.861576Z\",\"status\":\"ABORTED\"}},{\"id\":\"d919b97b-7882-4f14-b660-de7088e00a6c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T03:26:50.393376Z\",\"status\":\"ABORTED\"}},{\"id\":\"1aa7d77f-2793-49df-b44a-ac12e50467ce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T02:35:59.901222Z\",\"status\":\"ABORTED\"}},{\"id\":\"0b2d2195-c9a1-4a77-a50c-6a3e7f8d70b2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T02:21:42.304835Z\",\"status\":\"ABORTED\"}},{\"id\":\"09d68d93-97b3-4ada-9f4c-698a50e57c27\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-17T00:38:06.641998Z\",\"status\":\"ABORTED\"}},{\"id\":\"6ab79431-2f80-4fd3-9f77-b56c4d334175\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T22:21:42.311208Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a900a67-b75d-4494-b3f5-cb89ea095d77\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T18:21:42.309565Z\",\"status\":\"ABORTED\"}},{\"id\":\"f68ce8e8-c812-4c65-b4da-3f6e48779ec9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T14:21:42.285724Z\",\"status\":\"ABORTED\"}},{\"id\":\"9df4c794-1883-4297-ac4a-9ff5aea9bf92\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T11:11:43.846993Z\",\"status\":\"ABORTED\"}},{\"id\":\"60942f35-23e4-43f5-97ec-01c89f6f1af4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T10:21:42.284279Z\",\"status\":\"ABORTED\"}},{\"id\":\"d94acdf5-68ca-427e-8460-169ff0723693\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T06:21:42.273754Z\",\"status\":\"ABORTED\"}},{\"id\":\"749c924b-4993-4c02-ac0a-a03f0834fac3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T04:17:37.395285Z\",\"status\":\"ABORTED\"}},{\"id\":\"643d0275-1432-4bab-a9b0-ca95aeb795bd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T03:26:30.440464Z\",\"status\":\"ABORTED\"}},{\"id\":\"92af0ee6-d8ed-40bf-9dca-456b448cdcc5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T02:21:42.262656Z\",\"status\":\"ABORTED\"}},{\"id\":\"feff5d01-ae70-4185-8df8-1b541ead0b40\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-16T00:38:06.509182Z\",\"status\":\"ABORTED\"}},{\"id\":\"aa9e4ab6-b681-4102-93d9-f10fa148b5bf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T22:21:42.313081Z\",\"status\":\"ABORTED\"}},{\"id\":\"4be71fa5-9b5d-40ad-b31c-a2feff38be6e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T18:21:42.305935Z\",\"status\":\"ABORTED\"}},{\"id\":\"f8c503bb-3137-4456-9eaf-d66e3763e3ae\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T14:21:42.295506Z\",\"status\":\"ABORTED\"}},{\"id\":\"2dae8fab-8055-48fb-8903-63dc4f577320\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T11:10:23.917665Z\",\"status\":\"ABORTED\"}},{\"id\":\"37a69376-9fef-4be3-b57c-23baf8f7bac2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T10:21:42.279652Z\",\"status\":\"ABORTED\"}},{\"id\":\"0dec5644-6025-4cd2-8130-cc6e0741db9e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T06:21:42.383996Z\",\"status\":\"ABORTED\"}},{\"id\":\"598bc9a4-fbbc-44d3-8100-8af040744dca\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T05:16:31.889687Z\",\"status\":\"ABORTED\"}},{\"id\":\"b5124d3b-e26b-41db-80ad-9232f6ab9b66\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T04:17:13.792692Z\",\"status\":\"ABORTED\"}},{\"id\":\"fde9d738-7eb8-4369-92fc-1aff2974eae8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T03:24:14.338943Z\",\"status\":\"ABORTED\"}},{\"id\":\"7e3ce052-2a25-4e1d-97d1-1285b85115e9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T02:31:01.553354Z\",\"status\":\"ABORTED\"}},{\"id\":\"053dd8d2-c87f-4cc1-aae8-fa9533dd4533\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T02:21:42.486722Z\",\"status\":\"ABORTED\"}},{\"id\":\"6b25fa9c-1bbd-405a-a7db-c4375065bef3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-15T00:38:36.082907Z\",\"status\":\"ABORTED\"}},{\"id\":\"0407ab37-95ed-4d16-b983-0df3ad21dad4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T22:21:42.383692Z\",\"status\":\"ABORTED\"}},{\"id\":\"ec03a668-2d03-4940-b57d-9deb52cafb05\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T18:21:42.289338Z\",\"status\":\"ABORTED\"}},{\"id\":\"0e2acdd7-caca-4451-9ade-82f191c6a0e6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T14:21:42.327121Z\",\"status\":\"ABORTED\"}},{\"id\":\"de554175-e2dc-4b2c-8d81-16c21c45d517\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T11:09:44.791748Z\",\"status\":\"ABORTED\"}},{\"id\":\"2161f54d-aa17-40ee-868b-a7a37ce04d65\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T10:21:42.317468Z\",\"status\":\"ABORTED\"}},{\"id\":\"e1114c7c-281e-425c-966c-1cccf4da4fe0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T06:21:42.322869Z\",\"status\":\"ABORTED\"}},{\"id\":\"a1b74083-7e51-4ffc-9c20-448767ba98c9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T04:17:28.751167Z\",\"status\":\"ABORTED\"}},{\"id\":\"9fde9f51-37a0-44ad-b445-a22f9af68daa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T03:27:24.467707Z\",\"status\":\"ABORTED\"}},{\"id\":\"d9c075a5-3d1d-4bcc-a662-4c08f66802d3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T02:21:42.265353Z\",\"status\":\"ABORTED\"}},{\"id\":\"3e5f8d74-f5a9-446d-a9b0-b8ce1615c193\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-14T00:36:55.479013Z\",\"status\":\"ABORTED\"}},{\"id\":\"67655e0e-98f1-4538-b14b-a9893c6f8314\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T22:21:42.281807Z\",\"status\":\"ABORTED\"}},{\"id\":\"983d7e2e-5120-4f70-bdc8-f2f41c215ec0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T18:21:42.310953Z\",\"status\":\"ABORTED\"}},{\"id\":\"d1e1d668-8a97-4cfe-8128-714d5cec2936\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T14:21:42.368334Z\",\"status\":\"ABORTED\"}},{\"id\":\"9f0c43c3-14e8-4dad-afb8-ad1334203b0e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T11:09:52.327607Z\",\"status\":\"ABORTED\"}},{\"id\":\"a6b35879-33e4-4f73-8780-42fdf5e2b1a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T10:21:42.313998Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd8ca55a-b4cf-44cd-8572-f0df7553d98f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T06:21:42.270517Z\",\"status\":\"ABORTED\"}},{\"id\":\"139f899a-1e98-4574-bfd2-a35aa31ea5bd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T05:17:11.417837Z\",\"status\":\"ABORTED\"}},{\"id\":\"b63ff21a-691c-4e1a-9980-7a648daea5d0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T04:15:45.329926Z\",\"status\":\"ABORTED\"}},{\"id\":\"11f9700c-e448-43b1-a7cd-f6666859f11e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T03:26:39.32221Z\",\"status\":\"ABORTED\"}},{\"id\":\"c4175327-4409-4cfe-b197-40ed46682d05\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T02:21:42.290261Z\",\"status\":\"ABORTED\"}},{\"id\":\"0bb1d33f-4089-4324-a5a1-4aa78abb20fc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-13T00:40:49.501109Z\",\"status\":\"ABORTED\"}},{\"id\":\"ade4fe1c-cfb7-4150-8825-3cf192efd546\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T22:21:42.341593Z\",\"status\":\"ABORTED\"}},{\"id\":\"78018687-8776-4f83-b50f-52c0c8bc5e49\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T18:21:42.28571Z\",\"status\":\"ABORTED\"}},{\"id\":\"874b5481-1668-4af3-b536-007f85fcf64c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T15:50:03.035807Z\",\"status\":\"ABORTED\"}},{\"id\":\"047477bd-108a-4967-9160-82fb7042483f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T14:43:13.789326Z\",\"status\":\"ABORTED\"}},{\"id\":\"0e8f3acf-ebe4-4595-9004-953d121974cd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T14:21:42.340934Z\",\"status\":\"ABORTED\"}},{\"id\":\"0712b553-2d37-443b-bee7-a444f020de96\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T13:31:42.821141Z\",\"status\":\"ABORTED\"}},{\"id\":\"58814b56-abdb-405d-bbbe-1a720c75eb8c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T10:21:42.334817Z\",\"status\":\"ABORTED\"}},{\"id\":\"d34c4736-eb2b-4a4c-88bb-8632073f1d04\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T06:21:42.276569Z\",\"status\":\"ABORTED\"}},{\"id\":\"e49638cc-d2e1-4b7a-abf2-2735fc5a1bce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T05:16:47.182188Z\",\"status\":\"ABORTED\"}},{\"id\":\"f491f902-f407-40a0-81f0-8dc6a56d9b57\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T04:14:15.928411Z\",\"status\":\"ABORTED\"}},{\"id\":\"45005dfd-ae63-4b26-8e33-570447d46140\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T03:26:02.73352Z\",\"status\":\"ABORTED\"}},{\"id\":\"4a1f4a02-8c7e-474d-a683-d513fcb2f848\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T02:21:42.300805Z\",\"status\":\"ABORTED\"}},{\"id\":\"1a0ec76b-4021-45ba-b669-03b17666be6b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T00:39:32.849567Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae51a692-26c4-4f0b-901c-976d46992e65\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T22:49:33.559208Z\",\"status\":\"ABORTED\"}},{\"id\":\"a55bbb58-b9e6-4f86-a1d6-92d99633a3f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T22:21:42.331721Z\",\"status\":\"ABORTED\"}},{\"id\":\"63683464-1e71-4268-bba2-fe29f8d49ecc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T18:21:42.293925Z\",\"status\":\"ABORTED\"}},{\"id\":\"a3134cbf-abf2-4dea-ab69-07e45e56ef3e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T14:21:42.282482Z\",\"status\":\"ABORTED\"}},{\"id\":\"bd94f9d0-2613-4c85-89ad-83ebc1899ac2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T10:21:42.281644Z\",\"status\":\"ABORTED\"}},{\"id\":\"41b58753-0d9e-4d50-9dd6-7247a514becb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T06:21:42.283559Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b6dcb9d-2f85-442a-908f-70f9a5cfb762\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T05:15:47.659307Z\",\"status\":\"ABORTED\"}},{\"id\":\"3926b302-f659-4966-9668-3c4e1673c57a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T04:16:10.888063Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6087a68-1ad6-491d-94c2-b75acbebfdda\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T03:19:13.945269Z\",\"status\":\"ABORTED\"}},{\"id\":\"5d0510e6-8f38-4d44-b4c3-0643be538270\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T02:21:42.275046Z\",\"status\":\"ABORTED\"}},{\"id\":\"0977a0e5-c191-4e42-82b9-b0f4fa5bd3b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-11T00:37:11.195715Z\",\"status\":\"ABORTED\"}},{\"id\":\"5c15f1f1-0fff-4ae5-955e-cd682ff67d7f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T22:21:42.296185Z\",\"status\":\"ABORTED\"}},{\"id\":\"04a4383c-f659-4d86-8133-0d0495ce0a58\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T18:21:42.266654Z\",\"status\":\"ABORTED\"}},{\"id\":\"bfa7fe81-a5a6-4c02-aa2e-059e653b53c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T14:21:42.353261Z\",\"status\":\"ABORTED\"}},{\"id\":\"e1403e3e-141a-410f-bc7c-f20b0d28b371\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T11:10:29.715947Z\",\"status\":\"ABORTED\"}},{\"id\":\"82bfeda3-be56-4375-a8fd-e63a9b0540f0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T10:21:42.397401Z\",\"status\":\"ABORTED\"}},{\"id\":\"1aa86a0f-ef7d-48ea-9c84-58b803e7dce4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T06:21:42.36379Z\",\"status\":\"ABORTED\"}},{\"id\":\"57c3ef42-13ed-4c9c-b85c-9e43c0121778\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T05:15:53.636735Z\",\"status\":\"ABORTED\"}},{\"id\":\"468591cd-eaad-4390-aada-721001b23d63\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T04:17:18.541616Z\",\"status\":\"ABORTED\"}},{\"id\":\"a42ce943-8bab-4228-a893-75940a4c06e6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T03:30:14.232095Z\",\"status\":\"ABORTED\"}},{\"id\":\"f210ae5c-144c-4dbc-b52d-8de637d8cd0a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T02:21:42.294626Z\",\"status\":\"ABORTED\"}},{\"id\":\"e95c136d-8ce5-4074-b5e5-48c9adf407c6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-10T00:37:28.720495Z\",\"status\":\"ABORTED\"}},{\"id\":\"b10b4b66-4fc5-486e-8ad3-a8241a1661fe\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T22:21:42.339903Z\",\"status\":\"ABORTED\"}},{\"id\":\"9700521c-c1d0-4b53-98f8-a502643703af\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T21:12:44.230761Z\",\"status\":\"ABORTED\"}},{\"id\":\"1420b9b1-7457-44b0-bfc9-499f43afc4b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T21:11:43.12124Z\",\"status\":\"ABORTED\"}},{\"id\":\"5cce0415-5b7f-4079-bedb-5616188ff5e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T21:10:35.817197Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd84e01b-d606-4803-b695-5d1935cc37ad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T21:00:46.996958Z\",\"status\":\"ABORTED\"}},{\"id\":\"9a38140a-af2a-4aa7-bacb-91e470b4b0f2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T20:46:24.913411Z\",\"status\":\"ABORTED\"}},{\"id\":\"935618b3-63dc-4d38-8f9c-6d9771a8c4bf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T20:43:36.662417Z\",\"status\":\"ABORTED\"}},{\"id\":\"65c7e219-8150-4af6-96aa-677265f00de1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T20:31:02.634034Z\",\"status\":\"ABORTED\"}},{\"id\":\"8b168004-8d36-4ba7-bac0-f1f77b4b77c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T20:29:23.985348Z\",\"status\":\"ABORTED\"}},{\"id\":\"3be186e9-6da1-466d-98aa-65b4c4a57877\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T19:48:15.916226Z\",\"status\":\"ABORTED\"}},{\"id\":\"ab24d6bd-c2fe-4721-8fbc-ed5a8edcabb0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T19:17:38.577955Z\",\"status\":\"ABORTED\"}},{\"id\":\"650a02de-e6d0-413f-8882-a800664cf832\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T18:21:42.319004Z\",\"status\":\"ABORTED\"}},{\"id\":\"504f2931-15c8-41eb-87c4-54082dba83cb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T14:21:42.326535Z\",\"status\":\"ABORTED\"}},{\"id\":\"96120a75-c08f-4785-b7b1-4757609a0b98\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T11:11:02.098602Z\",\"status\":\"ABORTED\"}},{\"id\":\"da07a4e7-387a-4e3d-b275-51f0c828d8fc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T10:21:42.26577Z\",\"status\":\"ABORTED\"}},{\"id\":\"957d15e6-41b0-4394-83b5-c6fbb71a9699\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T06:21:42.312275Z\",\"status\":\"ABORTED\"}},{\"id\":\"5f6f6a58-064a-485b-b897-5212c16436b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T05:16:05.920514Z\",\"status\":\"ABORTED\"}},{\"id\":\"229fcfc7-498e-4fd2-a977-7721e22ddc91\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T04:18:17.950942Z\",\"status\":\"ABORTED\"}},{\"id\":\"6f8a10ab-b695-410d-a115-bec04b13c8ca\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T03:21:48.493523Z\",\"status\":\"ABORTED\"}},{\"id\":\"0d4e7329-2899-48f1-9275-741cdfdf68c0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T02:21:42.270474Z\",\"status\":\"ABORTED\"}},{\"id\":\"65ec4764-32ab-4101-afe2-45e29c11d6bc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-09T00:36:48.431616Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2cf3620-1321-439b-89aa-475f91c25106\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T22:21:42.331863Z\",\"status\":\"ABORTED\"}},{\"id\":\"45d76f26-22dc-4378-afe0-5da036c18d3e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T18:21:42.284615Z\",\"status\":\"ABORTED\"}},{\"id\":\"d721ec4a-017a-4d7c-970b-c2f96ac37717\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T14:21:42.323244Z\",\"status\":\"ABORTED\"}},{\"id\":\"13c04992-87d6-4313-96ba-42864eae19bb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T11:11:40.88883Z\",\"status\":\"ABORTED\"}},{\"id\":\"ade4d9ba-dd90-4f59-8b62-0d35b0d00fea\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T10:21:42.3317Z\",\"status\":\"ABORTED\"}},{\"id\":\"11373edd-d764-4d63-8163-86b759ac3893\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T06:21:42.298908Z\",\"status\":\"ABORTED\"}},{\"id\":\"7422a667-2eba-45c5-93bd-c4395fc620c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T05:17:35.013582Z\",\"status\":\"ABORTED\"}},{\"id\":\"cfb03990-8300-4a85-9cc8-7a2da8cd704f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T04:15:35.611312Z\",\"status\":\"ABORTED\"}},{\"id\":\"68a92ef2-0d84-4967-9985-4d34173bbdf0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T03:25:25.918843Z\",\"status\":\"ABORTED\"}},{\"id\":\"7875e530-cd70-4c1c-81f9-3f38c5d1eb3f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T02:21:42.266337Z\",\"status\":\"ABORTED\"}},{\"id\":\"3ea33a15-2c67-416b-9249-17d8aa87060e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-08T00:37:23.336764Z\",\"status\":\"ABORTED\"}},{\"id\":\"10313224-1e36-4cd2-9132-394b3f3974f0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T22:21:42.275519Z\",\"status\":\"ABORTED\"}},{\"id\":\"cdd4846b-3958-4927-a06c-8595e975da30\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T18:21:42.268172Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b3a6241-6ab4-4861-8f97-1e72e4a9fd15\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T14:21:42.253591Z\",\"status\":\"ABORTED\"}},{\"id\":\"c072b7f3-1841-437f-989c-8e6c665d15b2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T11:10:01.640652Z\",\"status\":\"ABORTED\"}},{\"id\":\"71101481-02b9-4aa5-843c-a455387a8405\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T10:21:42.255284Z\",\"status\":\"ABORTED\"}},{\"id\":\"f75986c8-3e24-4e31-9a5d-60db20c3d4d6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T06:21:42.329067Z\",\"status\":\"ABORTED\"}},{\"id\":\"cfa9d08c-61a2-4016-9019-677cab84941f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T05:17:03.166017Z\",\"status\":\"ABORTED\"}},{\"id\":\"910777a7-c071-4613-b03d-9ee0c7edd1a5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T04:16:46.519653Z\",\"status\":\"ABORTED\"}},{\"id\":\"6f0b57df-5f4a-4c9e-87d4-f4bf856466d7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T03:26:21.974111Z\",\"status\":\"ABORTED\"}},{\"id\":\"037ff11c-979c-4572-9267-d59445b127f8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T02:21:42.331561Z\",\"status\":\"ABORTED\"}},{\"id\":\"83c07aa9-522f-4317-a3e2-6dd198eb9e51\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-07T00:37:14.390849Z\",\"status\":\"ABORTED\"}},{\"id\":\"dea9d5fd-cc63-42ef-8fc0-55a2527f5fe8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T22:21:43.376134Z\",\"status\":\"ABORTED\"}},{\"id\":\"130834af-a7cf-4b6e-ba19-f7c7e9162280\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T18:21:42.278826Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d623bc8-2d07-44ce-897b-45322a02a4fe\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T14:21:42.352883Z\",\"status\":\"ABORTED\"}},{\"id\":\"53321d44-e29c-4c14-8439-2ed40aab9976\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T11:09:56.933722Z\",\"status\":\"ABORTED\"}},{\"id\":\"d9b7e90c-1c9a-4d58-8030-0f019d589769\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T10:21:42.342815Z\",\"status\":\"ABORTED\"}},{\"id\":\"04976e4d-8bec-447a-b9b7-d4ca0215cfaf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T06:21:42.277354Z\",\"status\":\"ABORTED\"}},{\"id\":\"5ec1ea88-e395-4b91-95cf-751ee81e87ef\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T04:16:43.842527Z\",\"status\":\"ABORTED\"}},{\"id\":\"84ce07db-7158-4901-9089-a0ce0441ed0e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T03:25:27.843985Z\",\"status\":\"ABORTED\"}},{\"id\":\"c584771c-7631-40e9-9b57-50095ffd571c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T02:21:42.294447Z\",\"status\":\"ABORTED\"}},{\"id\":\"eb8f92a3-3f48-4c96-b785-537f5a1863f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-06T00:38:13.826105Z\",\"status\":\"ABORTED\"}},{\"id\":\"7f75e32c-0b96-4751-be2e-c324678ed22b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T22:21:42.279486Z\",\"status\":\"ABORTED\"}},{\"id\":\"dce37359-9d03-4b61-9a17-f14a4d7fa69c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T18:21:42.285174Z\",\"status\":\"ABORTED\"}},{\"id\":\"69e95b65-e28e-49a8-af6f-5587e364b955\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T14:21:42.269723Z\",\"status\":\"ABORTED\"}},{\"id\":\"1847829f-0bd4-4d08-a09e-019898ff1069\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T10:21:42.266885Z\",\"status\":\"ABORTED\"}},{\"id\":\"b749b0c3-0cdd-46bb-ba90-7f88a90ec231\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T06:21:42.292377Z\",\"status\":\"ABORTED\"}},{\"id\":\"14723d3f-765d-4ddf-9250-256cfc4beddc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T05:16:01.551969Z\",\"status\":\"ABORTED\"}},{\"id\":\"8ca12c32-17a4-4196-98f9-f13d1f7aabd0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T04:16:11.226328Z\",\"status\":\"ABORTED\"}},{\"id\":\"95545fe4-3905-48d9-9f77-b4f14c03a334\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T03:33:05.390474Z\",\"status\":\"ABORTED\"}},{\"id\":\"838468f1-1183-4825-ab89-8c9abc6ee69e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T02:21:42.272772Z\",\"status\":\"ABORTED\"}},{\"id\":\"b0efcfd2-694c-4cc5-a54f-40207d462dd6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-05T00:40:50.310568Z\",\"status\":\"ABORTED\"}},{\"id\":\"41c6b353-c794-402f-88e7-863797ca54d4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T22:21:42.286996Z\",\"status\":\"ABORTED\"}},{\"id\":\"a5f37849-6ca8-4319-a59c-7c873c87d964\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T18:21:42.282504Z\",\"status\":\"ABORTED\"}},{\"id\":\"15236908-f91a-4b46-923e-060204222221\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T14:21:42.281868Z\",\"status\":\"ABORTED\"}},{\"id\":\"0655b06f-db88-46ea-a74d-a638991460ab\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T10:21:42.277189Z\",\"status\":\"ABORTED\"}},{\"id\":\"cdcd60de-390c-4bcc-ba42-a00eecc1f20c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T06:21:42.262707Z\",\"status\":\"ABORTED\"}},{\"id\":\"b8182ce3-a245-44fc-af27-785d7284b9fc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T05:15:43.455521Z\",\"status\":\"ABORTED\"}},{\"id\":\"74f4d15d-158d-4af8-99e1-f33a01ec2d97\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T04:16:02.826912Z\",\"status\":\"ABORTED\"}},{\"id\":\"8f54d8b8-ce5a-4fde-a587-4a81c896e3b2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T03:14:23.978885Z\",\"status\":\"ABORTED\"}},{\"id\":\"1da3b164-19bb-420d-8555-6e0394b6fbbc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T02:21:42.268053Z\",\"status\":\"ABORTED\"}},{\"id\":\"90c661c1-9bb6-482e-8109-8b3f9e56d532\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-04T00:35:13.970175Z\",\"status\":\"ABORTED\"}},{\"id\":\"c950e04b-5134-4080-9a85-3827bc23a320\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T22:21:42.280547Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac17ed1b-9e24-4e17-9db9-ad0f911a6634\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T18:21:42.268974Z\",\"status\":\"ABORTED\"}},{\"id\":\"e21a426d-e9e8-4763-870c-9f6701afca42\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T14:21:42.277288Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a3a5d3f-d892-4c00-b4ff-3f4d75f6e8d0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T11:11:35.671506Z\",\"status\":\"ABORTED\"}},{\"id\":\"48410360-6bc3-42b1-8644-440723918a2a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T10:21:42.258764Z\",\"status\":\"ABORTED\"}},{\"id\":\"c2498bd2-8d99-4990-bc95-d7737474a08d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T06:21:42.280286Z\",\"status\":\"ABORTED\"}},{\"id\":\"1653bbd1-0fff-4ce6-8c81-03d7c08882d2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T05:15:37.589672Z\",\"status\":\"ABORTED\"}},{\"id\":\"798aa4e6-00e7-45c0-b150-158c138df4a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T04:15:20.185611Z\",\"status\":\"ABORTED\"}},{\"id\":\"4613b175-ad5a-4e09-b79c-e6456f28310e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T03:18:37.836335Z\",\"status\":\"ABORTED\"}},{\"id\":\"c3b03bc5-04ed-42e0-8af5-8ac62ae08bfb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T02:35:35.697282Z\",\"status\":\"ABORTED\"}},{\"id\":\"a7f2d2f0-4c42-42d3-a4de-b20a14e9c855\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T02:21:42.266961Z\",\"status\":\"ABORTED\"}},{\"id\":\"752938f3-0fe4-46ba-a6d5-66351b822b0e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-03T00:36:36.379336Z\",\"status\":\"ABORTED\"}},{\"id\":\"2e5357a1-0db0-4b73-adee-de52be44ee28\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T22:21:42.287618Z\",\"status\":\"ABORTED\"}},{\"id\":\"c795e794-3e75-470c-b6ee-41be18f4146d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T18:21:42.27259Z\",\"status\":\"ABORTED\"}},{\"id\":\"52610d8a-31ff-4295-95aa-2e91f8a57996\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T14:21:42.403194Z\",\"status\":\"ABORTED\"}},{\"id\":\"16c78104-c1d3-4c02-9962-aff50b5a9b92\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T11:11:14.805797Z\",\"status\":\"ABORTED\"}},{\"id\":\"91ad5823-91e8-462a-a0f0-05b56c19e5bb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T10:21:42.27853Z\",\"status\":\"ABORTED\"}},{\"id\":\"47bf1703-9489-4030-b048-f64499a4f6b6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T06:21:42.32967Z\",\"status\":\"ABORTED\"}},{\"id\":\"7d018d55-84cf-496f-91cb-b70143c1511b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T05:16:22.309364Z\",\"status\":\"ABORTED\"}},{\"id\":\"f40855a0-9353-48e7-ad0d-90ff61b391a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T04:14:42.884451Z\",\"status\":\"ABORTED\"}},{\"id\":\"c25be964-2f5c-40a6-96ec-556cbbba81b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T03:18:52.411674Z\",\"status\":\"ABORTED\"}},{\"id\":\"5625e2e8-6a24-49ae-8af9-36c52afa655b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T02:36:28.692247Z\",\"status\":\"ABORTED\"}},{\"id\":\"01428a17-2396-4be9-9634-0cdf2f47a4a2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T02:21:42.337641Z\",\"status\":\"ABORTED\"}},{\"id\":\"92491b09-129a-4cb4-ba4e-0c05483448c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-02T00:37:18.695311Z\",\"status\":\"ABORTED\"}},{\"id\":\"43a513de-88cc-4041-b5d1-71f00b19ace9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T22:21:42.690517Z\",\"status\":\"ABORTED\"}},{\"id\":\"c1f2ffa9-ef7d-4bf8-a1ad-41abb617329b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T18:21:42.358395Z\",\"status\":\"ABORTED\"}},{\"id\":\"c3e6af19-27cd-4b9e-b1d0-4604361a5b8e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T14:21:42.362704Z\",\"status\":\"ABORTED\"}},{\"id\":\"ed2a1821-ae7f-46ce-ad20-5923912e1711\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T11:10:02.410154Z\",\"status\":\"ABORTED\"}},{\"id\":\"63c42075-0795-412c-8897-18956809cf38\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T10:21:42.284744Z\",\"status\":\"ABORTED\"}},{\"id\":\"222c71a2-256f-48ff-b2d4-fce6b8c444f0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T06:21:42.416009Z\",\"status\":\"ABORTED\"}},{\"id\":\"7882ac3c-c5a3-4ae9-9a1c-3b48324b789c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T05:16:46.520614Z\",\"status\":\"ABORTED\"}},{\"id\":\"3301c6cb-fe11-4654-9351-4581943859c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T04:15:33.193187Z\",\"status\":\"ABORTED\"}},{\"id\":\"8d959d9e-bb9a-4207-b9ec-ed40dce38c10\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T03:30:37.124228Z\",\"status\":\"ABORTED\"}},{\"id\":\"47fea2f1-10b1-4e1f-9cbe-4b24a26d0c0b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T02:21:42.28341Z\",\"status\":\"ABORTED\"}},{\"id\":\"def0e511-b141-4d46-9dc4-8b8250202f1c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-01T00:42:07.129343Z\",\"status\":\"ABORTED\"}},{\"id\":\"864b2379-ef1c-4cde-9bf6-8c2562e5a173\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T22:21:42.506735Z\",\"status\":\"ABORTED\"}},{\"id\":\"3bc298b5-cf98-4538-9cb0-bc088f00e58a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T18:21:42.261424Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d4ebd6b-1fe1-4945-934f-7f8960511fd1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T14:21:42.302206Z\",\"status\":\"ABORTED\"}},{\"id\":\"33465196-a917-4d2c-96ab-e86764eb5470\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T11:09:51.935537Z\",\"status\":\"ABORTED\"}},{\"id\":\"226006ed-5142-45c0-81e4-03e9aa3fc24c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T10:21:42.437249Z\",\"status\":\"ABORTED\"}},{\"id\":\"65c5f1f4-5898-4e55-9c5e-8921de32d74c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T06:21:42.332942Z\",\"status\":\"ABORTED\"}},{\"id\":\"7b574e5d-16ea-4daa-9a33-85f40286b4c0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T05:16:27.551463Z\",\"status\":\"ABORTED\"}},{\"id\":\"ed2cbcc5-84b7-4b81-b56f-2fde0a21eb56\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T04:15:22.101512Z\",\"status\":\"ABORTED\"}},{\"id\":\"19163851-b252-4495-9113-d0b5f1e4fc94\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T03:31:23.948904Z\",\"status\":\"ABORTED\"}},{\"id\":\"e7872378-1c4f-4049-8a7d-fd0c0dc0b27c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T02:21:42.276416Z\",\"status\":\"ABORTED\"}},{\"id\":\"0e708aa9-d2c9-4d34-803e-c7adf22b0373\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-30T00:39:00.289035Z\",\"status\":\"ABORTED\"}},{\"id\":\"d62d5695-4a34-47c6-bca0-fc45a4963736\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T22:21:42.330779Z\",\"status\":\"ABORTED\"}},{\"id\":\"86faee9d-c784-401e-8870-bd0ba49be6c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T18:21:42.322634Z\",\"status\":\"ABORTED\"}},{\"id\":\"58966b71-5135-4830-a358-fa552f90c4a2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T14:21:42.362174Z\",\"status\":\"ABORTED\"}},{\"id\":\"84e28efc-839b-453e-80ac-8121cdf19b42\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T11:12:33.674913Z\",\"status\":\"ABORTED\"}},{\"id\":\"ec0e1a80-2576-4e59-a39f-11d1a36d3142\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T10:21:42.294706Z\",\"status\":\"ABORTED\"}},{\"id\":\"3379e584-92be-450d-8720-06da93c79a66\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T06:21:42.328789Z\",\"status\":\"ABORTED\"}},{\"id\":\"9fc4bcd5-5b77-49fc-9a5b-c7ac643a3361\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T05:16:46.175739Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd5df8fc-6bab-4a98-8f51-40a0b9d22f8f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T04:16:13.050919Z\",\"status\":\"ABORTED\"}},{\"id\":\"2fb00e56-9af6-4f47-a6dd-41a85c5d0430\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T03:23:48.875396Z\",\"status\":\"ABORTED\"}},{\"id\":\"9371fe0f-e55b-4616-9b21-e0a20e3e1c98\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T02:21:42.284005Z\",\"status\":\"ABORTED\"}},{\"id\":\"a6f121c2-5893-436b-b9a9-fd495f3fa0cb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-29T00:39:59.591289Z\",\"status\":\"ABORTED\"}},{\"id\":\"c2f02376-41cb-4784-ba66-c7e5a6aecc4d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T22:21:42.349413Z\",\"status\":\"ABORTED\"}},{\"id\":\"8207f97e-6243-438c-90d4-b5c94ddd47b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T18:21:42.307666Z\",\"status\":\"ABORTED\"}},{\"id\":\"a8efba13-348f-4045-aec8-149e1dca226a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T14:21:42.344396Z\",\"status\":\"ABORTED\"}},{\"id\":\"3eea0964-d9c9-44f5-9560-fea3da12cca5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T10:21:42.299175Z\",\"status\":\"ABORTED\"}},{\"id\":\"383d5951-57c7-48ad-9193-a687920812d6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T06:21:42.393946Z\",\"status\":\"ABORTED\"}},{\"id\":\"6ec59be3-506b-4b2f-a00e-b33347a9cd8b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T05:17:06.905892Z\",\"status\":\"ABORTED\"}},{\"id\":\"fa588665-d87a-458d-b885-0e9d0fe535d7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T04:16:06.097935Z\",\"status\":\"ABORTED\"}},{\"id\":\"4dad202b-b8df-4db8-83f9-d8628d1de115\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T03:35:15.223601Z\",\"status\":\"ABORTED\"}},{\"id\":\"9c201bdf-77eb-42eb-b832-f172af986e1b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T02:21:42.322133Z\",\"status\":\"ABORTED\"}},{\"id\":\"f23499d4-2dd6-4686-8cfe-7ce0ffca2bd0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-28T00:40:58.883206Z\",\"status\":\"ABORTED\"}},{\"id\":\"98aa91ff-bb4f-42d1-a5d3-784b22febe60\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T22:21:42.335748Z\",\"status\":\"ABORTED\"}},{\"id\":\"1c54fafe-3583-4496-8c0e-6904bc5a8bc7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T18:21:42.302016Z\",\"status\":\"ABORTED\"}},{\"id\":\"61f7a89f-29b1-45c5-9da6-a79224ffa4bb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T14:21:42.370957Z\",\"status\":\"ABORTED\"}},{\"id\":\"2f2f2ae4-4146-49bd-b4e8-49c973340f46\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T10:21:42.311385Z\",\"status\":\"ABORTED\"}},{\"id\":\"9e707b58-c07c-45c9-8ae0-cc3d8766b01c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T06:21:42.332089Z\",\"status\":\"ABORTED\"}},{\"id\":\"fc96ab0e-deda-48a0-9ab4-30bcb3a9add1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T05:15:31.387676Z\",\"status\":\"ABORTED\"}},{\"id\":\"bdbb1c91-62bb-4407-acb5-529c158dca3f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T04:15:26.458979Z\",\"status\":\"ABORTED\"}},{\"id\":\"93f934a3-2125-4674-9345-8e7c19ec16f8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T03:18:41.119112Z\",\"status\":\"ABORTED\"}},{\"id\":\"ce5bb876-83a1-45e9-9eb6-3c3720b4d215\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T02:21:42.298698Z\",\"status\":\"ABORTED\"}},{\"id\":\"58d74813-4178-4b20-9e00-9332abf5b819\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-27T00:37:07.836501Z\",\"status\":\"ABORTED\"}},{\"id\":\"cb390c17-a9ef-4544-9f2b-94749afd874b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T22:21:42.37683Z\",\"status\":\"ABORTED\"}},{\"id\":\"12c769f5-b19e-4bd0-b8b7-6449e6c992cd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T18:21:42.307302Z\",\"status\":\"ABORTED\"}},{\"id\":\"610badb0-44eb-4a76-bdcc-2a205f6536e9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T14:21:42.433268Z\",\"status\":\"ABORTED\"}},{\"id\":\"74dbb53e-df92-4718-8ccf-16820543c2b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T11:12:38.832773Z\",\"status\":\"ABORTED\"}},{\"id\":\"69a2e6a8-8d73-4a2d-8062-75e2ecdb70a2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T10:21:42.268537Z\",\"status\":\"ABORTED\"}},{\"id\":\"b841f589-8aad-4436-967b-69d63ecd9fb4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T06:21:42.37556Z\",\"status\":\"ABORTED\"}},{\"id\":\"aab0e54b-fb01-410c-a3f1-631f9a302c41\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T04:17:15.846193Z\",\"status\":\"ABORTED\"}},{\"id\":\"cad7da38-9002-4b90-82af-c83e3dd7c24c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T03:21:49.969774Z\",\"status\":\"ABORTED\"}},{\"id\":\"bac7d264-9a96-4658-ba3f-4d21cfac89c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T02:21:42.269294Z\",\"status\":\"ABORTED\"}},{\"id\":\"fb7d7d37-ad3f-4f02-ad71-4665f22102a2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-26T00:37:51.025968Z\",\"status\":\"ABORTED\"}},{\"id\":\"cd336ac6-a19d-4493-b75c-d316a131ad64\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T22:21:42.388623Z\",\"status\":\"ABORTED\"}},{\"id\":\"2cbcb462-8efe-4e27-a210-28bcabae14b9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T18:21:42.262268Z\",\"status\":\"ABORTED\"}},{\"id\":\"f27e8dff-ddd2-4a4e-a15e-135aa7515f73\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T14:21:42.328154Z\",\"status\":\"ABORTED\"}},{\"id\":\"bb140bbd-9eb4-430f-8b3e-3486b9cce5ee\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T11:10:12.093044Z\",\"status\":\"ABORTED\"}},{\"id\":\"d552345a-937a-4863-958a-9145127269ef\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T10:21:42.26634Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6902d58-2a3c-4f9c-886c-1f001b4db5a9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T06:21:42.261184Z\",\"status\":\"ABORTED\"}},{\"id\":\"a7bb2db6-4a0e-4542-b471-98365c22571d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T04:17:31.870854Z\",\"status\":\"ABORTED\"}},{\"id\":\"e009edf1-2ba1-4875-9362-a4cea36eb048\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T03:32:00.414004Z\",\"status\":\"ABORTED\"}},{\"id\":\"301fa3d4-907d-40de-850a-a6b205094cd8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T02:21:42.249252Z\",\"status\":\"ABORTED\"}},{\"id\":\"8d7f339f-692e-4b7c-852f-19d5c0aa7486\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-25T00:38:09.541084Z\",\"status\":\"ABORTED\"}},{\"id\":\"62cdf2d5-6d0c-41a0-9223-17c51308411e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T22:21:42.26615Z\",\"status\":\"ABORTED\"}},{\"id\":\"151867dd-ca65-4605-85c3-031b655fa8df\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T18:21:42.281006Z\",\"status\":\"ABORTED\"}},{\"id\":\"d1da5b14-f6b3-47f6-9032-80c9bc2d925a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T15:33:08.198831Z\",\"status\":\"ABORTED\"}},{\"id\":\"e373d032-9cef-409f-a604-2e2fecf1757b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T14:21:42.344992Z\",\"status\":\"ABORTED\"}},{\"id\":\"e79db9c9-b511-4b4d-9763-eecd21235205\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T11:09:54.030689Z\",\"status\":\"ABORTED\"}},{\"id\":\"3c538d6f-4f8e-498f-9c95-88d5d45c0ad0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T10:21:42.29064Z\",\"status\":\"ABORTED\"}},{\"id\":\"6633f382-a04f-4111-9bbb-6883c0f7c219\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T06:21:42.329335Z\",\"status\":\"ABORTED\"}},{\"id\":\"3119f410-ad30-4412-86c8-9b87031b2513\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T05:17:27.582885Z\",\"status\":\"ABORTED\"}},{\"id\":\"7d0997b9-2bd5-4ae9-8d95-d21d2bf5b6de\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T04:15:31.725667Z\",\"status\":\"ABORTED\"}},{\"id\":\"e95fe415-f652-4f05-a02b-3bad4fca23a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T03:22:01.808183Z\",\"status\":\"ABORTED\"}},{\"id\":\"ee80c19d-1c42-4f03-a889-f8a6735dd66b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T02:21:42.346664Z\",\"status\":\"ABORTED\"}},{\"id\":\"fcb39dbb-d4b3-4721-96a3-b1492712113c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-24T00:38:40.072831Z\",\"status\":\"ABORTED\"}},{\"id\":\"aa3a18d6-305a-473d-8f70-f70d1cc74346\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T22:21:42.340354Z\",\"status\":\"ABORTED\"}},{\"id\":\"9f24e7ea-cd0f-441d-9798-be5b26110194\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T18:21:42.37118Z\",\"status\":\"ABORTED\"}},{\"id\":\"d41e7c8c-1d99-4d79-b5a4-003afd38a2e1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T14:21:42.347595Z\",\"status\":\"ABORTED\"}},{\"id\":\"939b2bf0-5a3b-4ea2-aae5-48c3e2741a12\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T11:09:39.047408Z\",\"status\":\"ABORTED\"}},{\"id\":\"f92e3be5-7687-4e48-bd46-a5119c2f4c95\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T10:21:42.386632Z\",\"status\":\"ABORTED\"}},{\"id\":\"e1fd2e78-e20d-424c-847f-cfc1620903ce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T06:21:42.310978Z\",\"status\":\"ABORTED\"}},{\"id\":\"2206aa99-9654-4dc1-b3e6-a6112699d8a9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T05:17:39.896359Z\",\"status\":\"ABORTED\"}},{\"id\":\"b166fd84-26e8-41ca-8f80-a73d1f32e7b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T04:15:17.252684Z\",\"status\":\"ABORTED\"}},{\"id\":\"54d7ce9f-efef-4864-a519-54a687fd83c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T03:25:10.854931Z\",\"status\":\"ABORTED\"}},{\"id\":\"b9c7f4e3-ecb6-414a-b70a-b467971257ac\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T02:21:42.322824Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac24ffd7-2cc4-4ffb-a374-875b96fb6e47\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-23T00:37:45.362688Z\",\"status\":\"ABORTED\"}},{\"id\":\"f6534c11-2635-4eff-930e-8b11d9ae57d6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T22:21:42.332272Z\",\"status\":\"ABORTED\"}},{\"id\":\"0d080844-f3a1-4b38-81e9-22847f4cccdf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T18:21:42.303247Z\",\"status\":\"ABORTED\"}},{\"id\":\"e132c206-e8c9-47fa-9321-e5d5786e62dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T14:21:42.266446Z\",\"status\":\"ABORTED\"}},{\"id\":\"5a1ae1c0-a82d-49c6-9406-3a44df97ef6f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T11:09:36.619344Z\",\"status\":\"ABORTED\"}},{\"id\":\"5502c2f7-f76e-4c1f-b822-224ed67a2c0e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T10:21:42.391248Z\",\"status\":\"ABORTED\"}},{\"id\":\"f490b411-a2b6-4a8a-9a1a-39b659a18320\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T06:21:42.28415Z\",\"status\":\"ABORTED\"}},{\"id\":\"86f07132-e5b9-49b7-b64e-9a0c85881e25\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T04:15:18.566141Z\",\"status\":\"ABORTED\"}},{\"id\":\"362ff61a-62b3-47bc-b535-b2c376875e74\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T03:26:25.222165Z\",\"status\":\"ABORTED\"}},{\"id\":\"352db331-a001-498f-9b27-e7b07427e49c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T02:21:42.278939Z\",\"status\":\"ABORTED\"}},{\"id\":\"8b33f374-275d-40de-829f-7d87618bc9cc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-22T00:40:29.556963Z\",\"status\":\"ABORTED\"}},{\"id\":\"90576856-c3fb-4b26-993c-d85824f560ba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T22:21:42.278871Z\",\"status\":\"ABORTED\"}},{\"id\":\"8c503f6a-61d4-4b8f-af68-02b4d58a1750\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T18:21:42.300799Z\",\"status\":\"ABORTED\"}},{\"id\":\"59a9e617-b012-4c6e-a3e6-87df9d1430b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T14:21:42.289329Z\",\"status\":\"ABORTED\"}},{\"id\":\"fe8bc733-9963-4095-b5e9-642913fa0fb5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T10:21:42.286411Z\",\"status\":\"ABORTED\"}},{\"id\":\"f85ceecb-a8d5-49e6-806d-8e486ff4c8d1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T06:21:42.29713Z\",\"status\":\"ABORTED\"}},{\"id\":\"610a9f53-a90e-4064-9523-20d04a945a66\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T05:16:04.229573Z\",\"status\":\"ABORTED\"}},{\"id\":\"1f2231f0-acec-4e03-8eb3-3c718c7981e0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T04:15:59.829033Z\",\"status\":\"ABORTED\"}},{\"id\":\"5cf81a8c-8a38-425c-b13a-1ba4ada4e0e2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T03:29:22.165802Z\",\"status\":\"ABORTED\"}},{\"id\":\"5f273e83-8f86-4e2c-a8e7-3f739e36d600\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T02:21:42.475087Z\",\"status\":\"ABORTED\"}},{\"id\":\"4f1feffd-cec1-4f88-b64f-38c0ec6f002e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-21T00:40:48.973102Z\",\"status\":\"ABORTED\"}},{\"id\":\"2e002b93-1ed9-4a4b-ad6f-f8363c462d63\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T22:21:42.31516Z\",\"status\":\"ABORTED\"}},{\"id\":\"66ab0ddb-3e21-4c70-ba20-b5fffda5a1a7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T18:21:42.435583Z\",\"status\":\"ABORTED\"}},{\"id\":\"30587f75-4443-4827-98f7-747b15c38e6f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T14:21:42.327295Z\",\"status\":\"ABORTED\"}},{\"id\":\"7c30a874-12f4-4286-8098-50c688982e5b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T10:21:42.282644Z\",\"status\":\"ABORTED\"}},{\"id\":\"743bf6c4-c364-4d73-98fc-bdac2fc40017\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T06:21:42.28307Z\",\"status\":\"ABORTED\"}},{\"id\":\"c0209bbb-4318-4020-94f0-1b29d5ebe8c7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T05:16:38.674848Z\",\"status\":\"ABORTED\"}},{\"id\":\"68144c57-8260-431e-8dfc-a3b7e8416819\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T04:17:00.984507Z\",\"status\":\"ABORTED\"}},{\"id\":\"d8bd1255-e3e0-4d8e-8cf1-bfe60298cb2b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T03:27:52.465413Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d508740-492f-4331-b6b2-34919ac6cb12\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T02:21:42.289691Z\",\"status\":\"ABORTED\"}},{\"id\":\"7ae7b9bc-db14-4f3c-a8a6-7c8e57154500\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-20T00:36:28.703626Z\",\"status\":\"ABORTED\"}},{\"id\":\"95893ef6-5557-48cd-989c-fee7a4950ed0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T22:21:42.279324Z\",\"status\":\"ABORTED\"}},{\"id\":\"75bd7f66-7c49-4f09-9d54-b701da8aac06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T18:21:42.305724Z\",\"status\":\"ABORTED\"}},{\"id\":\"c6abf397-f3f2-4622-b472-19c591696f8e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T14:21:42.293315Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae83f197-2198-44a5-ad3a-233b213831a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T11:10:38.185558Z\",\"status\":\"ABORTED\"}},{\"id\":\"eb10aad6-c731-48fc-a017-52e814a433a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T10:21:42.288875Z\",\"status\":\"ABORTED\"}},{\"id\":\"1bc33d71-bafb-475c-9091-cc93674c863d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T06:21:42.290805Z\",\"status\":\"ABORTED\"}},{\"id\":\"38d09437-1729-4083-9bc3-5d3159fabd0d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T05:12:56.77461Z\",\"status\":\"ABORTED\"}},{\"id\":\"50059e20-2a45-4100-8555-3d01901e9861\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T04:19:30.571627Z\",\"status\":\"ABORTED\"}},{\"id\":\"6edfb74a-6839-4894-820b-66ebd7dd47c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T03:36:51.508553Z\",\"status\":\"ABORTED\"}},{\"id\":\"8d231829-f4e6-4a52-8bfc-81440bf06685\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T02:21:42.295513Z\",\"status\":\"ABORTED\"}},{\"id\":\"219967cd-366a-48c3-b18d-cfbcbdfbae13\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-19T00:11:55.334867Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd818df2-10b3-4594-8f94-fbd81f15c177\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T22:21:42.304788Z\",\"status\":\"ABORTED\"}},{\"id\":\"7a9fa327-ecf9-445c-b40b-0e24a4809eb6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T20:31:10.22325Z\",\"status\":\"ABORTED\"}},{\"id\":\"8fbc9661-5d97-4447-9906-100861e31720\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T19:28:58.887964Z\",\"status\":\"ABORTED\"}},{\"id\":\"855d2b5d-0893-4128-8f49-208fa5e8dc09\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T18:21:42.328494Z\",\"status\":\"ABORTED\"}},{\"id\":\"a6aa8c40-9bef-4617-af74-ff04ec5e2efd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T14:21:42.373385Z\",\"status\":\"ABORTED\"}},{\"id\":\"e5fc43da-aa70-4f93-bc78-473037f0ab91\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T11:12:30.104598Z\",\"status\":\"ABORTED\"}},{\"id\":\"63d735e7-298a-4856-a999-8430b9b0ce67\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T10:21:42.314172Z\",\"status\":\"ABORTED\"}},{\"id\":\"a1ce9d08-a670-4d62-8035-95f64a8e2da9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T06:21:42.389381Z\",\"status\":\"ABORTED\"}},{\"id\":\"85c793a9-ae49-4403-9d68-cd9cba725a24\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T05:12:49.406794Z\",\"status\":\"ABORTED\"}},{\"id\":\"e1f573e5-f8a0-4f35-8387-6c648308e7dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T04:17:56.03887Z\",\"status\":\"ABORTED\"}},{\"id\":\"4ef5f4e6-38e7-4973-b786-086b496f84f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T03:34:18.503236Z\",\"status\":\"ABORTED\"}},{\"id\":\"37245d13-aae5-492b-9f09-d5b00647bf07\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T02:32:31.221073Z\",\"status\":\"ABORTED\"}},{\"id\":\"73341a97-102a-4b38-92e5-848f9c3f1a99\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T02:21:42.385522Z\",\"status\":\"ABORTED\"}},{\"id\":\"74b15d06-a67e-42de-9a5a-a17514568479\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-18T00:12:02.436796Z\",\"status\":\"ABORTED\"}},{\"id\":\"aa9b4214-c3e5-45bd-8594-b0f80afc818d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T22:21:42.383971Z\",\"status\":\"ABORTED\"}},{\"id\":\"46430f1f-8479-4e5a-9242-adb448135749\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T18:21:42.38647Z\",\"status\":\"ABORTED\"}},{\"id\":\"2e41dc4e-bed2-4ff1-aa36-707204e8c075\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T14:21:42.339347Z\",\"status\":\"ABORTED\"}},{\"id\":\"345bac90-c241-43dc-96af-44b9a2ff8b94\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T11:10:02.652623Z\",\"status\":\"ABORTED\"}},{\"id\":\"62959f13-6db8-49d9-82d1-72a0a96481b1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T10:21:42.291447Z\",\"status\":\"ABORTED\"}},{\"id\":\"afd5bb5e-4046-406e-81e0-5c6021c61a94\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T06:21:42.324937Z\",\"status\":\"ABORTED\"}},{\"id\":\"98e96d7b-d118-47b1-9515-054c44d69fa7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T05:11:34.580058Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae1939e2-54f8-4299-a475-035c3a3494de\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T04:16:51.820585Z\",\"status\":\"ABORTED\"}},{\"id\":\"db61898c-de03-436f-95f9-de4f9cef23a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T03:34:01.403118Z\",\"status\":\"ABORTED\"}},{\"id\":\"754b0b9c-0b47-49f9-a243-d240fc45ef25\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T02:21:42.310923Z\",\"status\":\"ABORTED\"}},{\"id\":\"7183ed6b-3c8d-4025-b69d-b723b9ce5fa3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-17T00:12:02.150951Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6b3edc2-9ad6-4f3e-9e57-0f9f9e4a4624\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T22:21:42.316831Z\",\"status\":\"ABORTED\"}},{\"id\":\"9a133f55-dca0-47a6-a1c0-2f2eaaef31e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T18:21:42.312194Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e9ec175-440f-4093-a3ae-af3a8cd735eb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T14:21:42.323595Z\",\"status\":\"ABORTED\"}},{\"id\":\"162365dc-2a6c-460a-963b-d2e2ced1bdd3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T11:09:42.933275Z\",\"status\":\"ABORTED\"}},{\"id\":\"0083004d-fc4c-4668-8f9c-de7aa393c4cf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T10:21:42.277878Z\",\"status\":\"ABORTED\"}},{\"id\":\"bc1b6614-634d-4e75-b6e1-f9965aeb1a9f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T06:21:42.27391Z\",\"status\":\"ABORTED\"}},{\"id\":\"4dfa82ae-8d10-46d9-a6bd-aa33f8221c65\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T05:13:05.872299Z\",\"status\":\"ABORTED\"}},{\"id\":\"6a186727-1b29-4a43-958c-aa044cfac46f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T04:19:20.479074Z\",\"status\":\"ABORTED\"}},{\"id\":\"a0d55542-0daa-412b-8a93-831e7926143b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T03:29:19.152818Z\",\"status\":\"ABORTED\"}},{\"id\":\"58a3d072-726d-4e15-91cf-7e2ba51d1548\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T02:21:42.282319Z\",\"status\":\"ABORTED\"}},{\"id\":\"25620be4-82b1-47fe-a237-49c637d20b09\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-16T00:12:12.480898Z\",\"status\":\"ABORTED\"}},{\"id\":\"f4313d3e-612a-440f-bb4f-9e1e23a5ea56\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T22:21:42.271297Z\",\"status\":\"ABORTED\"}},{\"id\":\"2f198c32-c979-4942-b579-38e8fea86873\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T18:21:42.303575Z\",\"status\":\"ABORTED\"}},{\"id\":\"0807eb02-cd60-409a-ac67-954c5954801b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T14:21:42.316812Z\",\"status\":\"ABORTED\"}},{\"id\":\"5a5e700e-c2bf-4978-83e0-914783aac135\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T11:12:43.831408Z\",\"status\":\"ABORTED\"}},{\"id\":\"ba4328c5-06b9-4755-9924-12d14ed2572e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T10:21:42.317206Z\",\"status\":\"ABORTED\"}},{\"id\":\"08068a13-6c11-4fed-84b1-afa6648c51de\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T06:21:42.247978Z\",\"status\":\"ABORTED\"}},{\"id\":\"51afea0e-f2ff-4a5b-afdc-250cd1c4f1d5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T04:17:06.633021Z\",\"status\":\"ABORTED\"}},{\"id\":\"53ec11a7-a5d1-4cfb-a947-017c3511f65b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T03:35:10.303564Z\",\"status\":\"ABORTED\"}},{\"id\":\"08d30e20-8e4f-4a04-9553-9e46487aaa02\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T02:21:42.246294Z\",\"status\":\"ABORTED\"}},{\"id\":\"d49ccc85-c2f7-46bf-bb66-46888319a06b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-15T00:10:55.773075Z\",\"status\":\"ABORTED\"}},{\"id\":\"7fe07c0f-082b-45fa-aa10-ff138eef6c54\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T22:21:42.249201Z\",\"status\":\"ABORTED\"}},{\"id\":\"0da55834-e35d-46b4-9bf4-d10505b5feeb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T18:21:42.301469Z\",\"status\":\"ABORTED\"}},{\"id\":\"398db3a0-af65-44c5-b1a9-231c6012eb38\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T14:21:42.261576Z\",\"status\":\"ABORTED\"}},{\"id\":\"5eb8c36b-76c4-419d-9170-0848e7324f3d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T10:21:42.242911Z\",\"status\":\"ABORTED\"}},{\"id\":\"5e4488c9-83d5-454f-ac03-f1f17f1bc0b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T06:21:42.25108Z\",\"status\":\"ABORTED\"}},{\"id\":\"891a4b52-a2e3-4de1-a6a2-0383d7eced3f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T04:18:59.544034Z\",\"status\":\"ABORTED\"}},{\"id\":\"2fdcef51-f450-49ce-b2e5-900b61407e1b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T03:37:06.824042Z\",\"status\":\"ABORTED\"}},{\"id\":\"da0a402d-8190-47dc-aa86-851ef77a412e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T02:21:42.256989Z\",\"status\":\"ABORTED\"}},{\"id\":\"d5db7fdf-9560-43ec-8abb-d035561a248c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-14T00:11:59.049608Z\",\"status\":\"ABORTED\"}},{\"id\":\"1eeee78f-0ace-4016-912c-b5d9cb476a87\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T22:21:42.246073Z\",\"status\":\"ABORTED\"}},{\"id\":\"12d2e5bf-f241-4de5-b882-f1a44392ff71\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T18:21:42.257195Z\",\"status\":\"ABORTED\"}},{\"id\":\"15ed86fd-cbef-4354-b559-2a7ce90de5ed\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T14:21:42.260678Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2abe931-e788-41e7-b6a9-305be1a31a06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T10:21:42.262658Z\",\"status\":\"ABORTED\"}},{\"id\":\"eb3fe6a5-79aa-4d0c-8c3a-2b7abc08e257\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T06:21:42.246066Z\",\"status\":\"ABORTED\"}},{\"id\":\"bd4772c8-3cb0-41f2-a27c-3a66fa18e50e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T04:18:51.209619Z\",\"status\":\"ABORTED\"}},{\"id\":\"bc5f42b6-fd3b-49fb-ba67-ce89b51686f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T03:21:28.824717Z\",\"status\":\"ABORTED\"}},{\"id\":\"0a090134-12ae-44c3-a46a-4f420e5ea8e2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T02:21:42.242346Z\",\"status\":\"ABORTED\"}},{\"id\":\"b97b9ec4-a766-4fbb-9018-2eed14d3dd0c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-13T00:12:21.790415Z\",\"status\":\"ABORTED\"}},{\"id\":\"f02f9089-550e-4771-b401-b8b541572581\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T22:21:42.245435Z\",\"status\":\"ABORTED\"}},{\"id\":\"167c20e7-ee21-4b85-ac45-8e74e64a4c1e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T18:21:42.296357Z\",\"status\":\"ABORTED\"}},{\"id\":\"d870b2e0-2bcc-45c8-b008-8d05ef0af80f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T14:21:42.315818Z\",\"status\":\"ABORTED\"}},{\"id\":\"f83e8e13-3bb1-441f-b033-8eb003e2d00e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T11:11:14.884797Z\",\"status\":\"ABORTED\"}},{\"id\":\"659411f9-5a32-471d-ae33-a1a62b69c1ba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T10:21:42.416343Z\",\"status\":\"ABORTED\"}},{\"id\":\"9ddbf343-ae39-451a-8791-13e89a235e2c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T06:21:42.284399Z\",\"status\":\"ABORTED\"}},{\"id\":\"1c0d3614-6fa9-411e-a99e-252b7567aade\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T05:12:33.819803Z\",\"status\":\"ABORTED\"}},{\"id\":\"27f92f1e-d77e-43ee-9d37-5289901947f9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T04:19:15.529233Z\",\"status\":\"ABORTED\"}},{\"id\":\"34be7918-3aa0-4206-8afa-48b93242dad4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T03:23:28.967071Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a82cf49-f07b-4504-869e-f9200afa5149\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T02:21:42.303828Z\",\"status\":\"ABORTED\"}},{\"id\":\"394335f8-364d-4aea-a264-a281024e752e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-12T00:12:37.551645Z\",\"status\":\"ABORTED\"}},{\"id\":\"786dba8b-f2e8-4817-868c-bcbab05636f6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T22:21:42.280799Z\",\"status\":\"ABORTED\"}},{\"id\":\"4ea5b50e-8ba8-4153-8091-ab2e19f47b0d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T18:21:42.290473Z\",\"status\":\"ABORTED\"}},{\"id\":\"5df70a95-a98c-49d8-a423-8cf237da7cfa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T14:21:42.345983Z\",\"status\":\"ABORTED\"}},{\"id\":\"aebf2783-cacf-464d-a60f-bc88328c10fa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T11:11:50.805793Z\",\"status\":\"ABORTED\"}},{\"id\":\"e967ce78-a4c5-4dff-aec4-9bf53e0518c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T10:21:42.278194Z\",\"status\":\"ABORTED\"}},{\"id\":\"69c03200-7ddd-4b98-beae-0cd2cc8f05a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T06:21:42.322975Z\",\"status\":\"ABORTED\"}},{\"id\":\"e800a6cf-9145-48b9-8416-771dbad92c94\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T05:13:42.367967Z\",\"status\":\"ABORTED\"}},{\"id\":\"fae9005c-8bdc-4a32-9576-5e381c2ae83c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T04:17:18.953984Z\",\"status\":\"ABORTED\"}},{\"id\":\"cc486560-3357-4615-9079-d55540e08e19\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T03:27:19.478928Z\",\"status\":\"ABORTED\"}},{\"id\":\"ed8fd17b-2397-459a-a909-a44d7c1f6af7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T02:35:07.273284Z\",\"status\":\"ABORTED\"}},{\"id\":\"9508c4d9-9799-4ddf-b2a8-07cb9651a96b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T02:21:42.309946Z\",\"status\":\"ABORTED\"}},{\"id\":\"1688c1f1-175a-4e4c-ad14-f9c08de2608d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-11T00:11:36.369134Z\",\"status\":\"ABORTED\"}},{\"id\":\"83121a14-35a9-4748-9c5b-e2e883de5a13\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T22:21:42.272873Z\",\"status\":\"ABORTED\"}},{\"id\":\"255f9a9c-0596-4006-b629-1075c420de1e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T18:21:42.263715Z\",\"status\":\"ABORTED\"}},{\"id\":\"3a19f0f9-ba59-46ae-a442-1f4e7a711d29\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T14:21:42.307016Z\",\"status\":\"ABORTED\"}},{\"id\":\"510f85fa-3fee-4556-9aac-7d25fd8357d7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T11:12:02.457537Z\",\"status\":\"ABORTED\"}},{\"id\":\"e554db73-fada-440d-9f09-522ea8d23b4d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T10:21:42.723001Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d7c6389-0fbc-45dc-9bff-a3bdef7a5878\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T06:21:42.317924Z\",\"status\":\"ABORTED\"}},{\"id\":\"30beaea0-e190-4ef2-98cb-7dba77ad0b21\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T04:17:01.520283Z\",\"status\":\"ABORTED\"}},{\"id\":\"e3fb4ad0-b6a3-4409-92dd-6e1b03ff6e75\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T03:23:50.13543Z\",\"status\":\"ABORTED\"}},{\"id\":\"1d6b5653-2097-4d54-b811-d0e3c860cb2f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T02:34:43.70463Z\",\"status\":\"ABORTED\"}},{\"id\":\"6174ce11-7af9-4e75-a200-2424fc81b11e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T02:21:42.319619Z\",\"status\":\"ABORTED\"}},{\"id\":\"c01fba5c-1d15-467b-a030-6bdcb0519538\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-10T00:11:17.815673Z\",\"status\":\"ABORTED\"}},{\"id\":\"c819f089-11ae-47f7-abe5-f055ce9ebda8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T22:21:42.638923Z\",\"status\":\"ABORTED\"}},{\"id\":\"26ec0fbd-bc83-40a3-ba9d-0df828b0db8f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T18:21:42.250685Z\",\"status\":\"ABORTED\"}},{\"id\":\"a5ea4df1-0a15-42f5-8de9-c59523efabc4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T14:21:42.303Z\",\"status\":\"ABORTED\"}},{\"id\":\"fe87effd-01e8-4d00-847b-b7b638c15596\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T11:10:27.452673Z\",\"status\":\"ABORTED\"}},{\"id\":\"55405b98-cf52-4831-aadd-64b604bcfefd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T10:21:42.29991Z\",\"status\":\"ABORTED\"}},{\"id\":\"166fc0f2-599e-4374-bc1c-8f3e88375b12\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T06:21:42.303838Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6160fc7-26a8-410a-a7dd-1e87b1c338f2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T04:16:58.529082Z\",\"status\":\"ABORTED\"}},{\"id\":\"8cf87e95-aa2c-4b08-bfd1-fd7d738b9269\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T03:28:17.089969Z\",\"status\":\"ABORTED\"}},{\"id\":\"634ccc4a-1312-4138-ac5a-a6b4260309ca\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T02:34:55.648418Z\",\"status\":\"ABORTED\"}},{\"id\":\"7a29b6d7-a617-49fa-9980-45f89a5880f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T02:21:42.292638Z\",\"status\":\"ABORTED\"}},{\"id\":\"cdf59bff-f077-4e66-aaca-4a48b4f4c890\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-09T00:11:55.969717Z\",\"status\":\"ABORTED\"}},{\"id\":\"5713b05e-13da-41a7-9e55-5a3ea771bbaa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T22:21:42.289805Z\",\"status\":\"ABORTED\"}},{\"id\":\"4e60d6d3-5400-4128-8c64-9fb8328ed42c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T18:21:42.286348Z\",\"status\":\"ABORTED\"}},{\"id\":\"be5ee9af-a594-470a-b2f1-087c3b91775d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T14:21:42.306313Z\",\"status\":\"ABORTED\"}},{\"id\":\"07923534-437e-401f-a8be-0dd145c55dcf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T11:11:50.042723Z\",\"status\":\"ABORTED\"}},{\"id\":\"361554dc-f995-4998-b5e8-1ca1f1deea71\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T10:21:42.276231Z\",\"status\":\"ABORTED\"}},{\"id\":\"7c49b6bc-4e03-4b11-a4b5-90bec15b0deb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T06:21:42.292656Z\",\"status\":\"ABORTED\"}},{\"id\":\"cab0bfd2-230d-4d09-98ba-170fc643227f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T05:11:46.557173Z\",\"status\":\"ABORTED\"}},{\"id\":\"1ee835d1-be22-4fb7-9292-6f961a3821dc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T04:19:21.740106Z\",\"status\":\"ABORTED\"}},{\"id\":\"6bb46b3c-61e9-4dfe-b0f7-3f141e1109f6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T03:32:04.361782Z\",\"status\":\"ABORTED\"}},{\"id\":\"e6db354f-ebc4-4b72-9b12-c6c9a064313f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T02:21:42.281667Z\",\"status\":\"ABORTED\"}},{\"id\":\"036e8733-64fa-4426-aaca-d290c5e91d06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-08T00:10:38.438607Z\",\"status\":\"ABORTED\"}},{\"id\":\"d3ee67e8-41d9-48fb-bfbe-ae662dce4648\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T22:21:42.281627Z\",\"status\":\"ABORTED\"}},{\"id\":\"84b80df5-8467-446f-9f78-21f55ab9c097\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T18:21:42.278892Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6e6d319-de6b-4277-aba6-82cc4ad1b49b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T14:21:42.310492Z\",\"status\":\"ABORTED\"}},{\"id\":\"49e0d70b-74cb-4a03-998b-38b8b45fc34d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T10:21:42.278716Z\",\"status\":\"ABORTED\"}},{\"id\":\"4a30eb54-313c-4ed7-ab7b-1d8c41f4e81e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T06:21:42.277363Z\",\"status\":\"ABORTED\"}},{\"id\":\"94d8737b-de6c-4ad0-9c86-2cc07d41ee02\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T05:12:27.804337Z\",\"status\":\"ABORTED\"}},{\"id\":\"6e05fbea-f2c5-4bdc-b0f9-3ddb8fa25ba3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T04:16:26.541939Z\",\"status\":\"ABORTED\"}},{\"id\":\"de1152be-bf17-4da2-b72f-a616ec9fad9f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T03:28:52.997375Z\",\"status\":\"ABORTED\"}},{\"id\":\"37a7f30f-d621-4768-8baf-5aa83ba5f4e6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T02:21:42.281257Z\",\"status\":\"ABORTED\"}},{\"id\":\"56f147d4-d832-4dcb-92dd-c14c7d0d955c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-07T00:11:23.286982Z\",\"status\":\"ABORTED\"}},{\"id\":\"56f0a403-bb2e-4296-b818-c4ae152147b7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T22:21:42.361412Z\",\"status\":\"ABORTED\"}},{\"id\":\"e86b30b4-2aaf-4419-931b-60260bade45a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T18:21:42.421938Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b159c20-aa7a-4552-9ba0-99c746dbae8f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T14:21:42.279657Z\",\"status\":\"ABORTED\"}},{\"id\":\"798492f6-7f26-4fa2-9292-3f61e9a52491\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T10:21:42.273378Z\",\"status\":\"ABORTED\"}},{\"id\":\"09c310e8-2d73-461c-be00-b63c1752213d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T06:21:42.289923Z\",\"status\":\"ABORTED\"}},{\"id\":\"34d1a2f8-8d5b-45f7-b5d5-08dcd7516820\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T05:12:52.498512Z\",\"status\":\"ABORTED\"}},{\"id\":\"ce1abae3-85eb-4420-a644-5f81958ae4c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T04:16:17.127049Z\",\"status\":\"ABORTED\"}},{\"id\":\"4401d691-34d3-497d-a998-7b4b5caa3749\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T03:26:38.574728Z\",\"status\":\"ABORTED\"}},{\"id\":\"6e165f0d-8dbf-477a-a753-12a18d6b17e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T02:21:42.31275Z\",\"status\":\"ABORTED\"}},{\"id\":\"6b7024ec-929c-49cf-857b-d6fdc3959059\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-06T00:11:17.631778Z\",\"status\":\"ABORTED\"}},{\"id\":\"d0f23598-91c3-4d7b-8934-4782b05193b3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T22:21:42.286992Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2f55e5b-7c7f-45b8-aab6-1e8eed1fad15\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T18:21:42.277818Z\",\"status\":\"ABORTED\"}},{\"id\":\"d6d74400-6e2c-43b1-9f2e-8aea51f6d9ef\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T14:21:42.29048Z\",\"status\":\"ABORTED\"}},{\"id\":\"7fc97360-646f-46f1-a04b-ed5fbfa272bc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T11:11:06.453112Z\",\"status\":\"ABORTED\"}},{\"id\":\"2847bf3c-3d96-486f-b774-38618fa0c2f8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T10:21:42.305605Z\",\"status\":\"ABORTED\"}},{\"id\":\"12168681-10ba-4f13-8529-ac1a802a6bd7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T06:21:42.276391Z\",\"status\":\"ABORTED\"}},{\"id\":\"71bf0803-e477-4366-8584-57670e99c8b6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T04:19:08.774541Z\",\"status\":\"ABORTED\"}},{\"id\":\"91ede90c-b734-42d8-88eb-970500852ea2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T03:36:14.940906Z\",\"status\":\"ABORTED\"}},{\"id\":\"292aa2a9-b2d9-4697-a1e5-a2a31e638ee3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T02:21:42.286433Z\",\"status\":\"ABORTED\"}},{\"id\":\"0c3c3107-fe7d-473f-9bac-ac91200efd29\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-05T00:11:24.781098Z\",\"status\":\"ABORTED\"}},{\"id\":\"ad4ff7b3-fc16-41cd-8f5a-864593798f51\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T22:21:42.275152Z\",\"status\":\"ABORTED\"}},{\"id\":\"adc40ff2-9a94-42f6-b410-922015422b36\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T18:21:42.293475Z\",\"status\":\"ABORTED\"}},{\"id\":\"f487f7b0-d857-4218-9dbc-0f156dd3e606\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T14:21:42.291982Z\",\"status\":\"ABORTED\"}},{\"id\":\"1fd8e3c5-9fff-44c4-985e-3c5a1dd31f92\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T11:10:54.591724Z\",\"status\":\"ABORTED\"}},{\"id\":\"9747c5ac-f81a-4b33-aa90-2400f00dea34\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T10:21:42.264988Z\",\"status\":\"ABORTED\"}},{\"id\":\"10ce6451-2666-4e7f-9171-9428071d92ff\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T06:21:42.357489Z\",\"status\":\"ABORTED\"}},{\"id\":\"0c57076c-0e6c-4587-92c7-45baa742cf8c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T05:10:27.520219Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2e99d78-da22-4605-ac0f-cf7e2c63db0b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T04:18:12.203601Z\",\"status\":\"ABORTED\"}},{\"id\":\"51e39a68-5533-4ef6-91ec-bfcbf4655c36\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T03:26:56.306061Z\",\"status\":\"ABORTED\"}},{\"id\":\"e9fcad21-4ea9-45f9-aeb6-9827335c7cf9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T02:31:40.85216Z\",\"status\":\"ABORTED\"}},{\"id\":\"ab3f2876-e5b7-4740-8048-c34230dd7923\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T02:21:42.36034Z\",\"status\":\"ABORTED\"}},{\"id\":\"f7a31633-f848-4df9-9701-702176225aee\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-04T00:11:30.696437Z\",\"status\":\"ABORTED\"}},{\"id\":\"6c78a97b-f007-4726-bf0c-5a178cf4951b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T22:21:42.374667Z\",\"status\":\"ABORTED\"}},{\"id\":\"35b23dad-8349-44ed-a55f-116424eb1fce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T18:21:42.369486Z\",\"status\":\"ABORTED\"}},{\"id\":\"3cdce071-d4dd-4831-9bbd-14267e222d44\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T14:21:42.336351Z\",\"status\":\"ABORTED\"}},{\"id\":\"0dd68154-d797-41a4-a2ed-4a4387403596\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T11:13:23.915943Z\",\"status\":\"ABORTED\"}},{\"id\":\"fa3c7401-e9d7-498c-aaed-5843d993f701\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T10:21:42.340715Z\",\"status\":\"ABORTED\"}},{\"id\":\"4e99a002-114f-44ba-b778-324f605f77f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T06:21:42.36713Z\",\"status\":\"ABORTED\"}},{\"id\":\"3c5818ee-0329-4230-a003-1caccc2a4173\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T05:11:53.184072Z\",\"status\":\"ABORTED\"}},{\"id\":\"8ca325bb-3975-4369-865e-24203eea6889\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T04:17:37.535814Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d67d21e-fc47-43a7-9671-57394639d0ae\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T03:20:55.681197Z\",\"status\":\"ABORTED\"}},{\"id\":\"d890c735-3d2a-424d-b877-925edf68b60c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T02:21:42.353169Z\",\"status\":\"ABORTED\"}},{\"id\":\"9766cb8f-a1f1-44d4-8ec7-b083c2977cb1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-03T00:11:37.217411Z\",\"status\":\"ABORTED\"}},{\"id\":\"f9d09155-8248-4504-a838-2c1cd949ba6f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T22:21:42.362462Z\",\"status\":\"ABORTED\"}},{\"id\":\"097785ce-b9d2-49ac-b12a-fe85e05c7df3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T18:21:42.378271Z\",\"status\":\"ABORTED\"}},{\"id\":\"a1013ad3-8722-4847-bf9f-8ae606a65cc2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T14:21:42.270879Z\",\"status\":\"ABORTED\"}},{\"id\":\"11f92135-fccf-4bdd-8b47-596d35c0dd07\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T11:09:45.19021Z\",\"status\":\"ABORTED\"}},{\"id\":\"ca75afe4-7046-424c-9ed2-4b4039f95778\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T10:21:42.267424Z\",\"status\":\"ABORTED\"}},{\"id\":\"01dc8bd7-ea2e-49b6-9e53-7b4c2f92fa12\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T06:21:42.249767Z\",\"status\":\"ABORTED\"}},{\"id\":\"88a51b27-2817-416f-a742-d5694233b028\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T05:12:44.287915Z\",\"status\":\"ABORTED\"}},{\"id\":\"3a3f2a3a-0ad9-48f3-a7b5-50c77ad89607\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T04:18:11.069942Z\",\"status\":\"ABORTED\"}},{\"id\":\"897e9ddc-0448-4198-9787-4ba8c7ca0262\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T03:34:48.416597Z\",\"status\":\"ABORTED\"}},{\"id\":\"30cc2fe2-2267-4e15-8979-b1cf33e9c1d3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T02:21:42.271784Z\",\"status\":\"ABORTED\"}},{\"id\":\"467efc38-b68c-4853-bcf0-c6b83f540d96\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-02T00:11:42.001893Z\",\"status\":\"ABORTED\"}},{\"id\":\"8baecd87-7c28-409f-a2ce-a6c3f2b0f6f3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T22:21:42.252582Z\",\"status\":\"ABORTED\"}},{\"id\":\"31c60f43-252f-4f8c-bc8f-2ffaeb1f684b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T18:21:42.304243Z\",\"status\":\"ABORTED\"}},{\"id\":\"64b3433c-0f6e-4071-ae29-300608f8ddcc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T14:21:42.356518Z\",\"status\":\"ABORTED\"}},{\"id\":\"44daffe9-c44a-4ad5-b923-e0cc703c6138\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T11:11:09.52704Z\",\"status\":\"ABORTED\"}},{\"id\":\"c4459698-c593-4bd1-b7b6-42cea2ef6cd3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T10:21:42.269664Z\",\"status\":\"ABORTED\"}},{\"id\":\"60af1bc9-4484-4c73-ac5a-51bd7b50f83a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T06:21:42.255141Z\",\"status\":\"ABORTED\"}},{\"id\":\"3379525f-9ba9-41a4-bbdb-e8f5f07d4843\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T05:11:45.149839Z\",\"status\":\"ABORTED\"}},{\"id\":\"1afe7b5f-d540-49db-a1d3-d3e20c7a24b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T04:23:52.725167Z\",\"status\":\"ABORTED\"}},{\"id\":\"160357c0-fd82-4f4d-a034-6c2b1819b641\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T03:40:48.177389Z\",\"status\":\"ABORTED\"}},{\"id\":\"cc9d9607-e3b9-45dd-86b0-ce700ba48415\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T02:21:42.279195Z\",\"status\":\"ABORTED\"}},{\"id\":\"f8577724-0baa-4465-8acb-e8a32334033b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-09-01T00:11:05.318603Z\",\"status\":\"ABORTED\"}},{\"id\":\"b058b3a1-0ffc-4f79-ac82-607839062bb3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T22:21:42.285283Z\",\"status\":\"ABORTED\"}},{\"id\":\"fa6e16e3-e58c-4b23-be70-da93f2d0e0b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T18:21:42.263206Z\",\"status\":\"ABORTED\"}},{\"id\":\"c0a98a69-8553-45e7-a84d-dfa1b45b9616\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T14:21:42.319265Z\",\"status\":\"ABORTED\"}},{\"id\":\"75c512b6-a86f-4100-8252-f88dc01867f5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T10:21:42.245361Z\",\"status\":\"ABORTED\"}},{\"id\":\"0eaad2e0-3cfe-4550-8ab1-21d6f20fc698\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T06:21:42.27644Z\",\"status\":\"ABORTED\"}},{\"id\":\"a5644e07-9949-4582-9753-546e59fc8e48\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T05:10:11.185229Z\",\"status\":\"ABORTED\"}},{\"id\":\"1fcf323a-f524-458a-abbf-b5897b3faa56\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T04:17:28.66468Z\",\"status\":\"ABORTED\"}},{\"id\":\"7f5f7b5b-71f8-4e33-a573-4acd0e86f445\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T03:33:19.656113Z\",\"status\":\"ABORTED\"}},{\"id\":\"6cb567cd-897e-46ff-816b-a268047c0311\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T02:21:42.324294Z\",\"status\":\"ABORTED\"}},{\"id\":\"35875134-88b5-49f7-bc75-ab62c5aaf4cb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-31T00:10:32.182856Z\",\"status\":\"ABORTED\"}},{\"id\":\"b01c1aaf-af76-40cb-8ccc-bb2fffd5a0dc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T22:21:42.257468Z\",\"status\":\"ABORTED\"}},{\"id\":\"77b4ff4c-9664-4668-ae8a-ed9b380e3ac7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T18:21:42.260073Z\",\"status\":\"ABORTED\"}},{\"id\":\"323fee91-3487-4a4d-9b73-233382b8937a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T14:21:42.266452Z\",\"status\":\"ABORTED\"}},{\"id\":\"2bd98a6a-8afd-4b61-8f25-05b5cbeb6437\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T10:21:42.260456Z\",\"status\":\"ABORTED\"}},{\"id\":\"e002397a-ea45-48fc-b46d-884681c38295\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T06:21:42.256391Z\",\"status\":\"ABORTED\"}},{\"id\":\"6caf219c-f245-49a7-bb9a-049d2d8fed8b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T05:10:29.25863Z\",\"status\":\"ABORTED\"}},{\"id\":\"c98d7ec9-ba2f-43a7-8b1a-a90e20d931f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T04:17:10.87458Z\",\"status\":\"ABORTED\"}},{\"id\":\"1c28a4d4-0db7-429b-ae00-e8ae6151fd05\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T03:23:29.49684Z\",\"status\":\"ABORTED\"}},{\"id\":\"c2e376c8-eabc-41ac-a286-b282635052b0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T02:21:42.257515Z\",\"status\":\"ABORTED\"}},{\"id\":\"c74b4eb8-3022-4b54-a95b-bc9438baab70\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-30T00:11:16.355391Z\",\"status\":\"ABORTED\"}},{\"id\":\"aa6510d3-c4db-4a79-98fd-81a32faa1760\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T22:21:42.355401Z\",\"status\":\"ABORTED\"}},{\"id\":\"60593d8a-7af7-458d-9162-396c4bb7cb1b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T18:21:42.284051Z\",\"status\":\"ABORTED\"}},{\"id\":\"e826663f-0a7e-4c63-9193-cf1b48dc82ec\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T14:21:42.349354Z\",\"status\":\"ABORTED\"}},{\"id\":\"48c064f7-d158-4539-a779-a7eec518da73\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T11:09:58.85342Z\",\"status\":\"ABORTED\"}},{\"id\":\"a1f7c6d4-e8be-44d5-b896-b2d4b1ca9ff5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T10:21:42.252792Z\",\"status\":\"ABORTED\"}},{\"id\":\"10880b6f-a834-40de-98f6-9b7b8554e5f2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T06:21:42.3003Z\",\"status\":\"ABORTED\"}},{\"id\":\"612c1ee2-e65f-4d32-bdbd-b4e005a608a5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T05:12:13.697405Z\",\"status\":\"ABORTED\"}},{\"id\":\"2389496c-e81f-4bac-801c-73a2cfeda5f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T04:17:05.448556Z\",\"status\":\"ABORTED\"}},{\"id\":\"76231f02-d3f9-4cfd-ba87-3bece9df99ad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T03:29:37.078286Z\",\"status\":\"ABORTED\"}},{\"id\":\"cf789fe0-4abe-46f0-87bb-f168c33bb2cc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T02:28:41.619352Z\",\"status\":\"ABORTED\"}},{\"id\":\"4148b845-6f6f-4253-b5c9-45f8ee8fd8db\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T02:21:42.276445Z\",\"status\":\"ABORTED\"}},{\"id\":\"ba820b48-cb23-40b5-b788-80afc06e8700\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-29T00:11:09.636298Z\",\"status\":\"ABORTED\"}},{\"id\":\"4cd4b904-ef77-48d3-a33f-ce36ecfe346b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T22:21:42.259457Z\",\"status\":\"ABORTED\"}},{\"id\":\"bdbf48a2-54b2-478e-a532-9fe86177549e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T18:21:42.333881Z\",\"status\":\"ABORTED\"}},{\"id\":\"4aef1fd2-2a87-43b6-b46c-f962b06f6602\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T14:21:42.269054Z\",\"status\":\"ABORTED\"}},{\"id\":\"451028b1-0576-477b-9e65-9beec6334720\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T11:09:53.244463Z\",\"status\":\"ABORTED\"}},{\"id\":\"ff62f6c5-d99f-4bb9-a3f4-5e56bce63b16\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T10:21:42.270075Z\",\"status\":\"ABORTED\"}},{\"id\":\"1aaaa451-9721-4530-91ca-8e71439f0925\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T06:21:42.329642Z\",\"status\":\"ABORTED\"}},{\"id\":\"7f94eaad-c08e-4e2f-9fc3-225df069c56b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T05:11:43.216478Z\",\"status\":\"ABORTED\"}},{\"id\":\"056269ec-2e97-4cc3-aa27-0bcf8eec9a4f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T04:18:02.626739Z\",\"status\":\"ABORTED\"}},{\"id\":\"8fc887cb-46ae-439f-a5ea-442661a2bfaa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T03:31:52.535757Z\",\"status\":\"ABORTED\"}},{\"id\":\"f1bd7baa-0051-4e1a-95e0-ab341ee221d1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T02:35:55.988292Z\",\"status\":\"ABORTED\"}},{\"id\":\"d09298e8-fbdf-4047-ab51-11ffb8cdbb02\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T02:21:42.321295Z\",\"status\":\"ABORTED\"}},{\"id\":\"57a51690-a527-4b8c-a0c4-7db540fd3ba1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-28T00:10:41.183212Z\",\"status\":\"ABORTED\"}},{\"id\":\"5968769d-c268-4b72-9ca5-9c0b1c77c9a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T22:21:42.346907Z\",\"status\":\"ABORTED\"}},{\"id\":\"6c8974f1-ceac-44bc-acb2-a47f713618c8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T18:21:42.349945Z\",\"status\":\"ABORTED\"}},{\"id\":\"6e4b9797-5ee5-4e78-811e-c064333f243d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T14:21:42.259821Z\",\"status\":\"ABORTED\"}},{\"id\":\"e429ffb3-1601-4893-966c-d856bcb6afd5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T11:12:05.119234Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac993631-e113-4052-aaac-95a79f142b17\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T10:21:42.394693Z\",\"status\":\"ABORTED\"}},{\"id\":\"4710e09b-814b-4759-8767-1ddf2fcc1339\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T06:21:42.6098Z\",\"status\":\"ABORTED\"}},{\"id\":\"e41295fd-1ad2-4503-a58d-5aedeab9f920\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T05:11:47.814572Z\",\"status\":\"ABORTED\"}},{\"id\":\"07725e47-9b56-49ed-8237-919517a7312a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T04:16:40.149705Z\",\"status\":\"ABORTED\"}},{\"id\":\"d3dade70-f9a6-4851-b3be-9be9a49f14a1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T03:30:01.060362Z\",\"status\":\"ABORTED\"}},{\"id\":\"6993c0c3-0e8e-4362-b9f8-0a69fddeb23b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T02:35:40.968819Z\",\"status\":\"ABORTED\"}},{\"id\":\"0702a4d8-fb36-4c93-aee2-9ec0fe43ce55\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T02:21:42.271052Z\",\"status\":\"ABORTED\"}},{\"id\":\"30048d57-abc9-49e5-804e-445e64eb9276\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-27T00:10:29.533686Z\",\"status\":\"ABORTED\"}},{\"id\":\"014c9d7a-22ec-48f7-a8e3-aac8ba151320\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T22:21:42.231595Z\",\"status\":\"ABORTED\"}},{\"id\":\"817d38ce-7ea8-4b86-b73f-ce6b4358ab16\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T20:57:49.427424Z\",\"status\":\"ABORTED\"}},{\"id\":\"b9994332-ffa4-4ee2-b87e-c5e12220828d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T20:43:35.830055Z\",\"status\":\"ABORTED\"}},{\"id\":\"19bf68b0-ea89-4972-b055-1bc92cdc5ed4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T18:21:42.384111Z\",\"status\":\"ABORTED\"}},{\"id\":\"baa71f2c-57c8-4504-a2c2-7a29b88e113c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T11:12:51.496815Z\",\"status\":\"ABORTED\"}},{\"id\":\"c860992b-d668-49c1-90c0-22b8eecfe4c0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T05:11:30.197627Z\",\"status\":\"ABORTED\"}},{\"id\":\"24455d5b-d51b-418e-8fe6-1c49104b8c57\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T04:19:19.613006Z\",\"status\":\"ABORTED\"}},{\"id\":\"3b1c597d-acae-4d0a-9153-fce7cb762644\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T03:35:46.915101Z\",\"status\":\"ABORTED\"}},{\"id\":\"ff580788-290b-47c3-8fda-12dd8502ab11\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T02:38:59.226207Z\",\"status\":\"ABORTED\"}},{\"id\":\"391df534-5a31-4516-8b81-2460c737712d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-26T00:11:09.585855Z\",\"status\":\"ABORTED\"}},{\"id\":\"20fa1c5c-0f03-4db7-b1d9-e360226bb786\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:41:51.043274Z\",\"status\":\"ABORTED\"}},{\"id\":\"6cd5e4d6-a41d-443e-bfff-f2e94adfc216\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:39:59.233053Z\",\"status\":\"ABORTED\"}},{\"id\":\"17a28bb9-b9cc-41f6-bb68-f2e140acf014\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:35:52.255699Z\",\"status\":\"ABORTED\"}},{\"id\":\"c6cdac4f-d0c7-41a5-a87d-55a39330357c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:33:02.120479Z\",\"status\":\"ABORTED\"}},{\"id\":\"07372c0d-ac71-4e7c-9bca-06cf5e49e142\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-08-24T22:30:10.937024Z\",\"status\":\"ABORTED\"}},{\"id\":\"c537cc94-e77a-4435-8c10-3278e13c8a16\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:59.843097Z\",\"status\":\"ABORTED\"}},{\"id\":\"a8aff0a8-5860-4f43-b4ef-aa9e1320f160\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:58.462499Z\",\"status\":\"ABORTED\"}},{\"id\":\"54310d09-39e7-4a74-af7d-23c8e3ca81bc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:57.076258Z\",\"status\":\"ABORTED\"}},{\"id\":\"fc8e7778-9627-4d6f-9243-30ece19aafe1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:55.660899Z\",\"status\":\"ABORTED\"}},{\"id\":\"f513899a-67a7-4e8a-bc26-6de95a029cc7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:54.255703Z\",\"status\":\"ABORTED\"}},{\"id\":\"f893761e-7dc9-47af-a7c4-de6713bb2cca\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T19:44:52.85838Z\",\"status\":\"ABORTED\"}},{\"id\":\"6b9d10de-235c-4240-aacb-ed0fce0728c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:45:00.043603Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b5b008a-f2b0-4e1e-9cad-ededc03f8aad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:58.645219Z\",\"status\":\"ABORTED\"}},{\"id\":\"c2c995d1-a9d1-415d-88ef-59a553170c44\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:57.232713Z\",\"status\":\"ABORTED\"}},{\"id\":\"32dc228a-6f7e-4ea4-9791-9bdf5a8bb3cf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:55.716955Z\",\"status\":\"ABORTED\"}},{\"id\":\"de1eff81-4ccd-4350-b18f-1bf9a9ae72d0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:54.259792Z\",\"status\":\"ABORTED\"}},{\"id\":\"a9106f9f-c929-4225-be58-af713ba2d9ed\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T15:44:52.859291Z\",\"status\":\"ABORTED\"}},{\"id\":\"df4eb78b-956c-4061-8ff7-694e162b8b10\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:59.826145Z\",\"status\":\"ABORTED\"}},{\"id\":\"c9a6c8bc-262e-41eb-95d4-8b3d083f8412\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:58.4405Z\",\"status\":\"ABORTED\"}},{\"id\":\"9cacf5d5-200a-4908-b078-c450c9e403d3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:57.046135Z\",\"status\":\"ABORTED\"}},{\"id\":\"410558ce-bc44-4ecd-bfdc-abfb626ca1be\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:55.650539Z\",\"status\":\"ABORTED\"}},{\"id\":\"77141aab-52de-4e41-8912-966a8fcbfadd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:54.255606Z\",\"status\":\"ABORTED\"}},{\"id\":\"c35e6d94-5a4f-4a73-968b-194b4d97cf8f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T11:44:52.859251Z\",\"status\":\"ABORTED\"}},{\"id\":\"b1be501a-0d19-47d3-ad90-b1b74281bac4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:45:00.09855Z\",\"status\":\"ABORTED\"}},{\"id\":\"c7818057-4f59-48a5-b390-cb1123974325\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:58.531386Z\",\"status\":\"ABORTED\"}},{\"id\":\"d7e91b35-3138-40ef-ae59-aded8ad9d627\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:57.141204Z\",\"status\":\"ABORTED\"}},{\"id\":\"25e8761d-dbbe-4de8-be6b-d76dc7032621\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:55.756112Z\",\"status\":\"ABORTED\"}},{\"id\":\"683bfc5c-ab17-4a2d-9193-d61f8b3eeac1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:54.350506Z\",\"status\":\"ABORTED\"}},{\"id\":\"dcc6487b-8e6f-4e6c-b866-964e624fab8e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T07:44:52.951777Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e1d7230-d6be-4200-8175-5c5d1eeb73e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:59.858875Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2b936e8-2385-48c3-8f27-80d381da0271\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:58.474037Z\",\"status\":\"ABORTED\"}},{\"id\":\"2b556840-9275-4b19-ae29-8d00fa3b166e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:57.094905Z\",\"status\":\"ABORTED\"}},{\"id\":\"5081f4c3-ac29-4821-b194-49f8f3119413\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:55.721993Z\",\"status\":\"ABORTED\"}},{\"id\":\"bf0c0039-24f9-497d-b791-14d8301584b5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:54.3451Z\",\"status\":\"ABORTED\"}},{\"id\":\"3f877fe3-dbe1-4134-a83a-2f92eaf4dc09\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-22T03:44:52.946007Z\",\"status\":\"ABORTED\"}},{\"id\":\"fbc3cb4c-5f0f-4b31-bf81-278a601729f5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:59.954901Z\",\"status\":\"ABORTED\"}},{\"id\":\"e93f9e5a-6f3b-4f3e-a065-997339764f4d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:58.557499Z\",\"status\":\"ABORTED\"}},{\"id\":\"e6abfc33-3a26-4509-a56e-be020ffc5260\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:57.139772Z\",\"status\":\"ABORTED\"}},{\"id\":\"e1c36321-6d2d-4412-a722-e8d158d9e83b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:55.731385Z\",\"status\":\"ABORTED\"}},{\"id\":\"2d6a1339-40b6-47d8-8796-b19070fce06f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:54.343576Z\",\"status\":\"ABORTED\"}},{\"id\":\"053314d6-7df0-4b08-8657-afada123f894\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T23:44:52.939653Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e6673ef-cf61-4e94-beae-78ac4f21dda5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:45:00.053382Z\",\"status\":\"ABORTED\"}},{\"id\":\"3564a735-b2c9-4e44-8691-52509a09e842\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:58.652795Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a038c01-61b5-4d08-b8c9-97198ba2ad43\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:57.122799Z\",\"status\":\"ABORTED\"}},{\"id\":\"0b540407-b65e-4ddd-9bd5-fce9bf1337ad\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:55.728145Z\",\"status\":\"ABORTED\"}},{\"id\":\"4855ffad-8e1d-413a-a7ec-2d880991b0c4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:54.33848Z\",\"status\":\"ABORTED\"}},{\"id\":\"9bfed82d-42c6-4116-98c7-49ce0158c5c4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T19:44:52.950437Z\",\"status\":\"ABORTED\"}},{\"id\":\"70d5e925-11fc-40e4-b352-0d8a00ba304e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:45:02.00361Z\",\"status\":\"ABORTED\"}},{\"id\":\"95f078d0-0d81-43fd-a078-71ba4f2145f0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:59.911559Z\",\"status\":\"ABORTED\"}},{\"id\":\"8ed87088-39cc-4de0-ba11-58c024d0eb99\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:58.520681Z\",\"status\":\"ABORTED\"}},{\"id\":\"a2ce60f0-092b-4cd8-a127-c7b12ab4d8c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:57.126214Z\",\"status\":\"ABORTED\"}},{\"id\":\"148ae26d-a825-4037-b7ee-cf69b3e28093\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:55.749092Z\",\"status\":\"ABORTED\"}},{\"id\":\"cc2aba17-0d41-4c62-be36-3dd4b1848f99\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:54.336814Z\",\"status\":\"ABORTED\"}},{\"id\":\"dc19664d-d274-4eff-9207-999b009b515b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:52.955137Z\",\"status\":\"ABORTED\"}},{\"id\":\"cb7324b3-d558-4eae-8695-27d008f92890\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:ec2:eu-central-1::image/ami-0666b96e95a195ff0\",\"created_at\":\"2025-08-21T15:44:45.997392Z\",\"status\":\"ABORTED\"}},{\"id\":\"76a03bb0-5431-4385-bf19-60bf6eca7dcb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T11:38:52.878099Z\",\"status\":\"ABORTED\"}},{\"id\":\"5281b4fd-90e8-418b-847e-b666026cb894\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T11:10:41.856305Z\",\"status\":\"ABORTED\"}},{\"id\":\"58f585fd-71c2-411d-b3cf-350504d2b81b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T07:38:53.131488Z\",\"status\":\"ABORTED\"}},{\"id\":\"e53c81f8-2d21-40f1-b225-217796e3c5a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T05:12:14.015538Z\",\"status\":\"ABORTED\"}},{\"id\":\"6cc0c0a5-da03-4877-bd75-02b04d8eaadc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T04:17:12.985397Z\",\"status\":\"ABORTED\"}},{\"id\":\"5c92d7f0-19b4-4f65-8e86-493eaa7e656c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T03:38:52.82661Z\",\"status\":\"ABORTED\"}},{\"id\":\"f22322ac-62c8-460b-9a85-50ce252adf8d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T03:31:20.551358Z\",\"status\":\"ABORTED\"}},{\"id\":\"aa52a972-66b8-430d-8072-ba555ff0093f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-21T00:12:00.159646Z\",\"status\":\"ABORTED\"}},{\"id\":\"7340ab9b-23ab-4d16-9ea3-87ae55b5fc5c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T23:38:52.837557Z\",\"status\":\"ABORTED\"}},{\"id\":\"42a816c6-658e-4a1f-9c75-1f672583861b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T19:38:52.84003Z\",\"status\":\"ABORTED\"}},{\"id\":\"a80b7c9c-163e-4c2a-806e-0c94e14c859a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T15:38:52.925562Z\",\"status\":\"ABORTED\"}},{\"id\":\"7a81982a-821b-436c-9e9a-8d5dac8adca9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T11:38:52.983767Z\",\"status\":\"ABORTED\"}},{\"id\":\"0651f227-4fcf-48fd-b377-113eef07dd27\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T11:12:17.689497Z\",\"status\":\"ABORTED\"}},{\"id\":\"c102d671-a07e-47e7-9659-6e0fed7010fb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T07:38:52.865516Z\",\"status\":\"ABORTED\"}},{\"id\":\"616f5331-75f1-44c4-8a79-0f1d435603c5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T05:12:04.353092Z\",\"status\":\"ABORTED\"}},{\"id\":\"0add7d63-a828-4623-9498-ce5f4d4fd22e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T04:17:15.266209Z\",\"status\":\"ABORTED\"}},{\"id\":\"5ac7912f-52b3-4242-b846-f998d1bddf0e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T03:38:52.998354Z\",\"status\":\"ABORTED\"}},{\"id\":\"289aaca8-5c96-4a6f-8a5b-35bb13eacf24\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T03:34:18.111535Z\",\"status\":\"ABORTED\"}},{\"id\":\"02fd44f6-7148-4cb5-8faa-445d051d33e8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-20T00:11:23.956308Z\",\"status\":\"ABORTED\"}},{\"id\":\"0e9edd27-62e5-4b00-9bcf-a981e5861bee\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T23:38:52.869953Z\",\"status\":\"ABORTED\"}},{\"id\":\"987f2916-f651-4c5e-957f-35bc84dfc98b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T19:38:52.864727Z\",\"status\":\"ABORTED\"}},{\"id\":\"b5515f2b-3068-42f3-89b4-732ad4158140\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T15:38:52.839134Z\",\"status\":\"ABORTED\"}},{\"id\":\"f92b4e78-5e07-4301-9a5f-bb22d56469c2\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T11:38:52.895307Z\",\"status\":\"ABORTED\"}},{\"id\":\"237a1bcc-d5a0-47cd-9219-e6d9051eeb38\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T11:09:39.170606Z\",\"status\":\"ABORTED\"}},{\"id\":\"cce63c1b-75a8-4e84-894b-68136b020185\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T07:38:52.932058Z\",\"status\":\"ABORTED\"}},{\"id\":\"c3b139a2-3aeb-442f-a426-48057570cf19\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T05:12:08.080474Z\",\"status\":\"ABORTED\"}},{\"id\":\"03e15807-3bb5-4e0f-9642-0b4767ea7ffe\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T04:17:30.378287Z\",\"status\":\"ABORTED\"}},{\"id\":\"74b840d8-a9cb-43ce-8e67-9adc672c1052\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T03:38:52.939194Z\",\"status\":\"ABORTED\"}},{\"id\":\"148614f7-35a5-43ef-b17f-8efacf4480e5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T03:31:20.64503Z\",\"status\":\"ABORTED\"}},{\"id\":\"0612d6f8-4b2f-4237-97db-2081f589ab62\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-19T00:11:21.218622Z\",\"status\":\"ABORTED\"}},{\"id\":\"f5c7842e-ef41-41a3-a898-5da6b898c17f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T23:38:52.94456Z\",\"status\":\"ABORTED\"}},{\"id\":\"b447ed19-b4c5-45fe-95da-f94759a28c5b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T19:38:53.036002Z\",\"status\":\"ABORTED\"}},{\"id\":\"69559d6d-cb49-4ad1-a1ef-500809a5a659\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T15:38:52.916069Z\",\"status\":\"ABORTED\"}},{\"id\":\"91704114-c7cb-4c66-8252-135d3ac3f554\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T11:38:52.981362Z\",\"status\":\"ABORTED\"}},{\"id\":\"15ef8d61-4a5b-4056-bc91-2531060c640b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T11:10:13.072018Z\",\"status\":\"ABORTED\"}},{\"id\":\"9c308ce0-d5ca-47ca-85b4-a55a13cc1fe8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T07:38:52.841172Z\",\"status\":\"ABORTED\"}},{\"id\":\"336422cd-2de5-4a08-9626-8b7d8ac541da\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T05:13:25.293775Z\",\"status\":\"ABORTED\"}},{\"id\":\"dae632ff-8011-4089-bd56-58b1a0f224cf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T04:29:19.033517Z\",\"status\":\"ABORTED\"}},{\"id\":\"51ff33df-1c2e-4c42-88e7-7a86dbdebc80\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T03:43:14.281929Z\",\"status\":\"ABORTED\"}},{\"id\":\"beed9e5f-a935-4f37-a94f-f2ef769cd8ea\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T03:38:52.992665Z\",\"status\":\"ABORTED\"}},{\"id\":\"b821c7ca-0002-4aa8-a98c-e91aeb552d76\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-18T00:11:33.072672Z\",\"status\":\"ABORTED\"}},{\"id\":\"7aa7690a-ca81-42c0-aca0-eae6171c7e01\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T23:38:53.05324Z\",\"status\":\"ABORTED\"}},{\"id\":\"4383df62-e0b6-4b2f-9dd5-70ebd3f0dca8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T19:38:52.914513Z\",\"status\":\"ABORTED\"}},{\"id\":\"5eb75451-217b-4ced-8063-2022d1daf945\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T15:38:53.021468Z\",\"status\":\"ABORTED\"}},{\"id\":\"00efac79-d22b-4331-b78b-fd816535a2e7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T11:38:52.886361Z\",\"status\":\"ABORTED\"}},{\"id\":\"ca81848f-dec0-462b-9f0d-91ce7ff1ae08\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T07:38:52.892783Z\",\"status\":\"ABORTED\"}},{\"id\":\"9b367093-b21a-45b3-8b29-852edc29beca\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T05:13:24.179151Z\",\"status\":\"ABORTED\"}},{\"id\":\"a91d279c-bd9f-41ca-be42-6e9952c41f13\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T04:24:42.330218Z\",\"status\":\"ABORTED\"}},{\"id\":\"1799d55a-d960-4854-aa98-b180509d83d9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T03:46:47.061008Z\",\"status\":\"ABORTED\"}},{\"id\":\"47f60fc9-d3e9-4bb1-a136-79f0d36b4a22\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T03:38:53.023478Z\",\"status\":\"ABORTED\"}},{\"id\":\"005d101c-4200-4976-b2d8-4b53178f8283\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-17T00:10:41.334473Z\",\"status\":\"ABORTED\"}},{\"id\":\"7ec24f70-5b75-4712-9e05-770ceb31df9f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T23:38:52.907947Z\",\"status\":\"ABORTED\"}},{\"id\":\"209f41ea-bda2-4ffd-ad21-ea4b2d1e010b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T19:38:52.900887Z\",\"status\":\"ABORTED\"}},{\"id\":\"5a0c2e23-20ee-4ea6-b704-8818e0d089cd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T15:38:52.987363Z\",\"status\":\"ABORTED\"}},{\"id\":\"f9590984-b7c2-44ce-b623-03023f484163\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T11:38:52.889736Z\",\"status\":\"ABORTED\"}},{\"id\":\"cf82bb9c-2a64-49e4-bc50-9d94e4c0a0a0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T07:38:52.980444Z\",\"status\":\"ABORTED\"}},{\"id\":\"ce9c7bb4-f4b8-4a25-be18-934f1e61903d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T05:12:29.261298Z\",\"status\":\"ABORTED\"}},{\"id\":\"32d930e1-c9da-4b7b-9ada-0d89bd403879\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T04:20:52.348832Z\",\"status\":\"ABORTED\"}},{\"id\":\"e367f233-8b55-481f-b474-53e6835fb946\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T03:38:52.896196Z\",\"status\":\"ABORTED\"}},{\"id\":\"dd2caed9-4806-4a57-93d6-1d41a8aa73bc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T03:36:25.13469Z\",\"status\":\"ABORTED\"}},{\"id\":\"3ebadd86-bb13-4ff5-aed8-5f5b72c65f06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T02:38:27.482779Z\",\"status\":\"ABORTED\"}},{\"id\":\"7b9d54bc-8c65-48d1-a4f9-983621538163\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-16T00:11:19.397702Z\",\"status\":\"ABORTED\"}},{\"id\":\"c56145be-f781-4809-ad0f-0e543dcdd29f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T23:38:52.903618Z\",\"status\":\"ABORTED\"}},{\"id\":\"52e556f3-2219-4a1f-9047-af874f6498d9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T19:38:52.916223Z\",\"status\":\"ABORTED\"}},{\"id\":\"60b762f7-da3a-47f5-b338-4cabfdcd6c5e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T15:38:52.91564Z\",\"status\":\"ABORTED\"}},{\"id\":\"77b1872e-ccb2-4bd4-ac93-8162ef38ef5b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T11:38:53.047896Z\",\"status\":\"ABORTED\"}},{\"id\":\"dd42702a-7f99-4b54-b008-f4211ead3507\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T11:11:44.296106Z\",\"status\":\"ABORTED\"}},{\"id\":\"2ce9b47a-66ae-4c95-8037-d5733f14a8b9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T07:38:53.094475Z\",\"status\":\"ABORTED\"}},{\"id\":\"df70314c-2fa7-468a-b4ae-1556a0c2171f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T05:12:41.839816Z\",\"status\":\"ABORTED\"}},{\"id\":\"0a0614d6-feb1-4b9a-bc3f-c30759549e2f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T04:22:55.107918Z\",\"status\":\"ABORTED\"}},{\"id\":\"50b1e134-472a-4e7f-be54-845e86e3e7ef\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T03:42:03.19335Z\",\"status\":\"ABORTED\"}},{\"id\":\"6824fd1e-6871-421e-b69d-5357a1706d4f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T03:38:52.886256Z\",\"status\":\"ABORTED\"}},{\"id\":\"f1423463-069c-4443-b118-80e003396f7c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-15T00:11:15.811706Z\",\"status\":\"ABORTED\"}},{\"id\":\"0c878f10-9cde-4a37-bf5c-7868f6436b45\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T23:38:53.002797Z\",\"status\":\"ABORTED\"}},{\"id\":\"f072ce0d-e3b8-4e81-8178-e8fa05c4daa1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T19:38:52.905016Z\",\"status\":\"ABORTED\"}},{\"id\":\"135ad888-d453-4d04-a04e-81bc9aec0ffc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T15:38:52.935846Z\",\"status\":\"ABORTED\"}},{\"id\":\"eb74f0d0-3f24-4c6d-a53d-79a17836b016\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T11:38:53.209263Z\",\"status\":\"ABORTED\"}},{\"id\":\"e376cd90-7eac-4f03-94eb-d7ed54ce7ae5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T11:12:46.25449Z\",\"status\":\"ABORTED\"}},{\"id\":\"34bb5f36-e272-47b5-9a07-7cd52958976c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T07:38:52.832242Z\",\"status\":\"ABORTED\"}},{\"id\":\"4be79c0f-dae8-4ac1-ad7e-415718d2201c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T05:11:53.312232Z\",\"status\":\"ABORTED\"}},{\"id\":\"eab639a1-6250-4481-a7da-998615301068\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T04:25:10.202578Z\",\"status\":\"ABORTED\"}},{\"id\":\"e5ec8217-2b0d-427d-a6f6-b5305fd610f6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T03:42:57.658235Z\",\"status\":\"ABORTED\"}},{\"id\":\"858eded5-8023-4e97-b308-26ab2db910e6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T03:38:53.156809Z\",\"status\":\"ABORTED\"}},{\"id\":\"0ee039ff-de53-493b-9dbc-cd9ce5100ff1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T02:35:31.419269Z\",\"status\":\"ABORTED\"}},{\"id\":\"9210bb7f-59d4-4778-8b01-5d000c56b24d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-14T00:11:03.848765Z\",\"status\":\"ABORTED\"}},{\"id\":\"d522f343-2549-43a8-b15b-1a460c0a1922\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T23:38:52.957341Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd28d30d-dcb2-4853-a5d0-448775b32416\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T19:38:52.841747Z\",\"status\":\"ABORTED\"}},{\"id\":\"779dcf45-ec65-4592-b164-a9bf2ca33322\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T15:38:52.858691Z\",\"status\":\"ABORTED\"}},{\"id\":\"48a65e2c-57ca-42f7-b007-7a07b51d6431\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T11:38:52.828384Z\",\"status\":\"ABORTED\"}},{\"id\":\"1c8cd2e6-334e-4e39-a290-ee0a955512fa\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T11:10:30.087896Z\",\"status\":\"ABORTED\"}},{\"id\":\"4a0633dc-f2e9-4521-811b-3ddfaabe682b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T07:38:52.93779Z\",\"status\":\"ABORTED\"}},{\"id\":\"c4061324-0949-47c3-9f5d-6c7a8bb13f0c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T05:12:39.992576Z\",\"status\":\"ABORTED\"}},{\"id\":\"acf14870-243c-4434-86bc-0e04d554d973\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T04:23:06.066161Z\",\"status\":\"ABORTED\"}},{\"id\":\"eebaebeb-4fce-4081-a971-24916d965cba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T03:38:52.947936Z\",\"status\":\"ABORTED\"}},{\"id\":\"9fc31f52-f409-429e-a423-feb8df7b1ae9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T03:38:22.635838Z\",\"status\":\"ABORTED\"}},{\"id\":\"10177842-daaf-4ba3-8fd2-e8178e8f45d3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-13T00:10:51.66017Z\",\"status\":\"ABORTED\"}},{\"id\":\"62bcd868-a550-4d57-9fad-fb173675186f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T23:38:52.940491Z\",\"status\":\"ABORTED\"}},{\"id\":\"8fbb3450-eaf8-4eb3-b424-e0cc9270a6c6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T19:38:52.976614Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e551bf8-0c7f-4ceb-9fcf-737fa3f88515\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T15:38:52.875256Z\",\"status\":\"ABORTED\"}},{\"id\":\"3d08bc7b-d020-4f2d-acfb-4b2db268d9f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T11:38:53.101695Z\",\"status\":\"ABORTED\"}},{\"id\":\"194e41fa-e71c-41e2-a7f0-137040eb3b0c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T11:11:24.171435Z\",\"status\":\"ABORTED\"}},{\"id\":\"7f07a72f-631a-4bc5-b352-35db50ff811b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T07:38:52.902717Z\",\"status\":\"ABORTED\"}},{\"id\":\"c7e4ca3e-6749-426a-96ee-371b1ba57fb1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T05:11:52.851802Z\",\"status\":\"ABORTED\"}},{\"id\":\"b2fb98b4-43f9-4742-b83e-f3c6c08e0f28\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T04:22:49.028863Z\",\"status\":\"ABORTED\"}},{\"id\":\"db106dfe-f33e-4393-8c4d-c6a5260f3b8c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T03:40:24.170311Z\",\"status\":\"ABORTED\"}},{\"id\":\"ff3a7ca9-3e37-4f52-af05-caf22019e52e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T03:38:52.874605Z\",\"status\":\"ABORTED\"}},{\"id\":\"5651d782-15ef-4b64-87b3-833c0aa3273a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-12T00:11:25.031272Z\",\"status\":\"ABORTED\"}},{\"id\":\"baa32270-4b64-4111-b7f6-6330f47e427e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T23:38:52.879471Z\",\"status\":\"ABORTED\"}},{\"id\":\"86ab24c9-ccdd-487e-b350-2813511eac59\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T19:38:52.876019Z\",\"status\":\"ABORTED\"}},{\"id\":\"cc575bde-ad7c-4de8-af59-86aabf2bf99d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T15:38:52.908332Z\",\"status\":\"ABORTED\"}},{\"id\":\"956dcada-418a-4848-915a-73ed17c18014\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T11:38:52.842028Z\",\"status\":\"ABORTED\"}},{\"id\":\"ece5a408-8ba3-4ec1-8993-b6fce58d4c9e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T11:13:15.378998Z\",\"status\":\"ABORTED\"}},{\"id\":\"19da7fa4-13c3-403b-bc8d-288e94b4a92d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T07:38:52.886136Z\",\"status\":\"ABORTED\"}},{\"id\":\"65b42e70-5832-476c-8b23-f99c1af1f05b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T05:17:07.842523Z\",\"status\":\"ABORTED\"}},{\"id\":\"b8fac8c0-32d8-4fd6-b407-79ff82ce8793\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T04:34:52.303663Z\",\"status\":\"ABORTED\"}},{\"id\":\"82abf263-b2b7-4c56-b0c2-bae96b8b21f8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T03:48:18.485298Z\",\"status\":\"ABORTED\"}},{\"id\":\"83b3dd70-79f9-47de-a363-751ab87e4452\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T03:38:52.960151Z\",\"status\":\"ABORTED\"}},{\"id\":\"ab9f10e7-1364-4ddb-b0c0-e36070c3eaec\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-11T00:11:19.899142Z\",\"status\":\"ABORTED\"}},{\"id\":\"ceb8f67f-3613-4302-bac4-785d32f2ad7e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T23:38:52.881413Z\",\"status\":\"ABORTED\"}},{\"id\":\"4cd06d88-d296-4434-8eda-ced314514910\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T19:38:52.882566Z\",\"status\":\"ABORTED\"}},{\"id\":\"37851a1a-79ae-4374-9d9c-7bc638a5636c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T15:38:52.880439Z\",\"status\":\"ABORTED\"}},{\"id\":\"b86390e3-bdd6-4d31-905b-735c51223c69\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T11:38:52.892058Z\",\"status\":\"ABORTED\"}},{\"id\":\"48aea7f6-4466-4c4b-b325-96f4455c4381\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T07:38:52.872799Z\",\"status\":\"ABORTED\"}},{\"id\":\"0fe2f461-849c-4313-b3f2-64dff90ba1ea\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T05:15:09.887698Z\",\"status\":\"ABORTED\"}},{\"id\":\"85d4ecc0-1890-493e-8977-5ef2255ab168\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T04:32:16.510431Z\",\"status\":\"ABORTED\"}},{\"id\":\"f8efb554-0868-44c7-b97a-5475b7c5e733\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T03:45:02.22175Z\",\"status\":\"ABORTED\"}},{\"id\":\"bac4d418-3a08-4c65-85f6-88dd201f2219\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T03:38:52.882197Z\",\"status\":\"ABORTED\"}},{\"id\":\"fd7924c9-5a5f-42d9-8180-6f71c8b02fc6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-10T00:11:06.793708Z\",\"status\":\"ABORTED\"}},{\"id\":\"5281550b-1bdb-46ed-9fe8-7c020cf85edd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T23:38:52.880767Z\",\"status\":\"ABORTED\"}},{\"id\":\"3130f614-405b-4f02-97f0-75f2d7577f13\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T19:38:52.878698Z\",\"status\":\"ABORTED\"}},{\"id\":\"932e20af-d2cd-449c-8e42-f1ce2fcbae33\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T15:38:52.877385Z\",\"status\":\"ABORTED\"}},{\"id\":\"75c20084-69c3-4169-8e1e-1825d5ab56e4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T11:38:52.8859Z\",\"status\":\"ABORTED\"}},{\"id\":\"edb0feb5-edfc-4a73-b011-69bab35304c6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T07:38:52.882703Z\",\"status\":\"ABORTED\"}},{\"id\":\"5147a6f2-61f9-46ec-88b3-e5965592dd3c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T05:11:09.582883Z\",\"status\":\"ABORTED\"}},{\"id\":\"9500db12-c0f1-4639-ab06-e050da631bba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T04:22:24.114346Z\",\"status\":\"ABORTED\"}},{\"id\":\"ba229aa8-65c6-4e76-99a4-d6db986487ce\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T03:38:52.880298Z\",\"status\":\"ABORTED\"}},{\"id\":\"d41c1abe-85a3-4a4f-9af5-d18bde5f1030\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T03:38:38.415604Z\",\"status\":\"ABORTED\"}},{\"id\":\"9de8375f-a7e5-412d-885a-1b9d9be7703a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-09T00:11:03.140128Z\",\"status\":\"ABORTED\"}},{\"id\":\"b197f50e-886f-4bf8-9fc8-2ed1344e6477\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T23:38:52.885258Z\",\"status\":\"ABORTED\"}},{\"id\":\"7cbdccb7-cce5-4ee7-8fcd-67cc602077b3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T19:38:52.886216Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae32cc94-364c-45bf-8b64-4e513ab401f4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T15:38:52.87945Z\",\"status\":\"ABORTED\"}},{\"id\":\"29719d28-14cc-4dca-b77c-b731fdb0c9f1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T11:38:52.887505Z\",\"status\":\"ABORTED\"}},{\"id\":\"2692e50a-93e9-4c5b-9f7c-1284eaf84bba\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T11:11:57.472162Z\",\"status\":\"ABORTED\"}},{\"id\":\"1a93b204-3595-4a3e-b5d3-343fed2c9e66\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T07:38:52.914979Z\",\"status\":\"ABORTED\"}},{\"id\":\"597e0897-ea8b-4d92-ad22-91b870c53cd6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T05:17:50.336698Z\",\"status\":\"ABORTED\"}},{\"id\":\"8878dc02-ab98-435c-95ae-007b3f4507ed\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T04:33:07.215329Z\",\"status\":\"ABORTED\"}},{\"id\":\"772c65f8-7786-481a-90fc-1d28ddc34bfc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T03:48:15.472981Z\",\"status\":\"ABORTED\"}},{\"id\":\"d1a89ae7-85fd-438b-854b-6f66e9de80db\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T03:38:52.884029Z\",\"status\":\"ABORTED\"}},{\"id\":\"77f65cef-1d7d-4f5a-8196-fcd1b4179977\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T02:48:52.267027Z\",\"status\":\"ABORTED\"}},{\"id\":\"851679a7-2ff3-4f47-8c47-8359a9564b8c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-08T00:10:19.405631Z\",\"status\":\"ABORTED\"}},{\"id\":\"f2b02838-5eb9-416f-8f7a-54eda9840898\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T23:38:53.053339Z\",\"status\":\"ABORTED\"}},{\"id\":\"04f12d07-a24e-46bb-a6cb-27ed86aa5f8b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T19:38:52.917169Z\",\"status\":\"ABORTED\"}},{\"id\":\"132d5118-5973-45c1-a1c5-34582f1d2703\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T15:38:53.09423Z\",\"status\":\"ABORTED\"}},{\"id\":\"64c2a1b4-b2da-4b1c-b0df-8c96252bda60\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T11:38:52.93292Z\",\"status\":\"ABORTED\"}},{\"id\":\"84df756f-7cc4-44e0-8771-6cb97012da77\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T11:10:52.565666Z\",\"status\":\"ABORTED\"}},{\"id\":\"4affc17d-f3d6-46fd-a0b3-c420a7bc77b4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T07:38:52.950174Z\",\"status\":\"ABORTED\"}},{\"id\":\"fbeefaf1-0de6-436a-9d30-b2a495269e04\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T05:17:23.129504Z\",\"status\":\"ABORTED\"}},{\"id\":\"50399086-71a4-4bfe-93cd-95ec599a0ac4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T04:33:00.655002Z\",\"status\":\"ABORTED\"}},{\"id\":\"6522e461-d179-4308-9e29-b413b0b93f06\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T03:46:27.000745Z\",\"status\":\"ABORTED\"}},{\"id\":\"388e2cc5-d09e-41e6-a97a-2972378b780c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T03:38:52.938627Z\",\"status\":\"ABORTED\"}},{\"id\":\"630cb16d-c28b-46c7-b5cc-5e16ac8d9533\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-07T00:12:20.210418Z\",\"status\":\"ABORTED\"}},{\"id\":\"6730010e-48df-476f-8aaa-6c2ca8961b11\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T23:38:52.928104Z\",\"status\":\"ABORTED\"}},{\"id\":\"384c1ea1-2932-459a-8bbf-8749cd674788\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T19:38:52.938839Z\",\"status\":\"ABORTED\"}},{\"id\":\"8a2ba0f1-21c1-4891-b82e-2552a4833442\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T15:38:52.963905Z\",\"status\":\"ABORTED\"}},{\"id\":\"6f0d9eb1-9bf2-4f6a-a455-fa3ce81f8004\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T11:38:52.936303Z\",\"status\":\"ABORTED\"}},{\"id\":\"ae44eedc-47aa-4343-830e-ed2ffaac2c3b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T11:10:37.166533Z\",\"status\":\"ABORTED\"}},{\"id\":\"5b2192db-3731-41e3-8005-7ebfa0038bfd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T07:38:52.826351Z\",\"status\":\"ABORTED\"}},{\"id\":\"fbe14f51-38eb-4ad0-9558-8f4ec4f76fd5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T05:18:27.573128Z\",\"status\":\"ABORTED\"}},{\"id\":\"20d281ae-7b31-4cf0-99d4-4953a4dcf584\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T04:32:34.405335Z\",\"status\":\"ABORTED\"}},{\"id\":\"93ab76aa-4dab-4546-a961-2428561ab302\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T03:45:16.794125Z\",\"status\":\"ABORTED\"}},{\"id\":\"6c9e95c3-2fda-47cf-8121-7e52bd9eed33\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T03:38:53.060488Z\",\"status\":\"ABORTED\"}},{\"id\":\"367dfec7-61f7-4504-9fba-a0d577938126\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T02:46:58.049328Z\",\"status\":\"ABORTED\"}},{\"id\":\"28edded7-8f66-4658-a7a1-125595bf0f3c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-06T00:11:44.051002Z\",\"status\":\"ABORTED\"}},{\"id\":\"1cd0e5c4-1be2-40cb-b761-6af51ccfa858\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T23:38:53.00459Z\",\"status\":\"ABORTED\"}},{\"id\":\"af9d93ed-b5f3-4847-8a83-c6372ad49ae0\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T19:38:52.849525Z\",\"status\":\"ABORTED\"}},{\"id\":\"e3a52075-4c99-4e51-b9ad-7d50cb5e3310\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T15:38:52.858748Z\",\"status\":\"ABORTED\"}},{\"id\":\"aeb3374b-122e-4aa4-a507-8db24ff25f63\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T11:38:53.003458Z\",\"status\":\"ABORTED\"}},{\"id\":\"310e53d0-8788-4b50-98b7-7715dc9ec7c7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T11:11:33.466236Z\",\"status\":\"ABORTED\"}},{\"id\":\"bb6bb471-03a2-4156-81de-7246a48afa4e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T07:38:52.836674Z\",\"status\":\"ABORTED\"}},{\"id\":\"4c7d9f12-10dc-4828-a0f6-6dc8b3721119\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T05:17:20.18435Z\",\"status\":\"ABORTED\"}},{\"id\":\"a5c22758-015d-4068-862d-d1a392237514\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T04:35:21.226526Z\",\"status\":\"ABORTED\"}},{\"id\":\"d449742f-9159-404d-8a02-2d3bf1b28f5d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T03:49:57.377439Z\",\"status\":\"ABORTED\"}},{\"id\":\"fba2d571-a0bb-4415-802a-76bf39247aa1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T03:38:53.159114Z\",\"status\":\"ABORTED\"}},{\"id\":\"16413e85-1051-40c2-838a-60c84402dbb8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-05T00:10:55.091815Z\",\"status\":\"ABORTED\"}},{\"id\":\"b7f4a2bd-debb-4847-93bb-e5a49aab1518\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T23:38:52.844686Z\",\"status\":\"ABORTED\"}},{\"id\":\"c3b22b01-d8d7-467b-a4df-10ff6a614e20\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T19:38:52.923518Z\",\"status\":\"ABORTED\"}},{\"id\":\"1d3f337f-cc77-4ecd-a26a-cf07ea170d89\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T15:38:52.842707Z\",\"status\":\"ABORTED\"}},{\"id\":\"3e53d9fe-7191-4c4e-86d5-19f23930a866\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T11:38:52.956584Z\",\"status\":\"ABORTED\"}},{\"id\":\"ce6afd74-0e5d-446b-be27-db2750d97515\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T11:11:20.866497Z\",\"status\":\"ABORTED\"}},{\"id\":\"5d3f46d9-b041-4e56-8101-225ee85f460b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T07:38:52.826425Z\",\"status\":\"ABORTED\"}},{\"id\":\"0d2d6dc4-4549-44a5-ad24-e713636bf79f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T05:22:32.889623Z\",\"status\":\"ABORTED\"}},{\"id\":\"e2df1843-312c-4bc7-a6bc-2a187f559d2b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T04:41:42.85244Z\",\"status\":\"ABORTED\"}},{\"id\":\"d053fd9f-13bb-41c9-8674-384eebb8f322\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T03:57:49.784594Z\",\"status\":\"ABORTED\"}},{\"id\":\"218c3199-1cb1-400d-afb6-be09b36ec503\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T03:38:52.846851Z\",\"status\":\"ABORTED\"}},{\"id\":\"f567a004-cf61-400d-9867-c8da865b2fb8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T02:48:52.937004Z\",\"status\":\"ABORTED\"}},{\"id\":\"d8d1322d-4580-495e-a0f5-7b93f8d9c059\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-04T00:11:08.89531Z\",\"status\":\"ABORTED\"}},{\"id\":\"354f8d89-facc-4129-b378-ac06dfe14707\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T23:38:53.265213Z\",\"status\":\"ABORTED\"}},{\"id\":\"73b0ba82-833f-4b50-91b8-c557bf25a36d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T19:38:52.996993Z\",\"status\":\"ABORTED\"}},{\"id\":\"7387765e-8601-4ff4-a525-d43f8fb7ba53\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T15:38:52.949402Z\",\"status\":\"ABORTED\"}},{\"id\":\"61ffbd83-cd3f-41a8-8397-450c0984e0d9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T11:38:52.874691Z\",\"status\":\"ABORTED\"}},{\"id\":\"f487af0e-fda2-44f3-b8ab-ae746ce08a6d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T07:38:52.990165Z\",\"status\":\"ABORTED\"}},{\"id\":\"f3a829cb-83ee-4587-b417-52fa01afe446\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T05:18:01.90293Z\",\"status\":\"ABORTED\"}},{\"id\":\"69b8f408-7f86-4bda-babc-7120843d13a3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T04:37:29.624408Z\",\"status\":\"ABORTED\"}},{\"id\":\"d7c03f2d-0fb0-44ec-892f-c5e3673b64a5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T03:58:14.064936Z\",\"status\":\"ABORTED\"}},{\"id\":\"16553e25-885e-4d40-a1c5-b94dd07bbae3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T03:38:52.833699Z\",\"status\":\"ABORTED\"}},{\"id\":\"2f1d3bf7-d1bf-43b2-bdaf-1877e8e843f3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-03T00:11:48.672694Z\",\"status\":\"ABORTED\"}},{\"id\":\"21f329af-32a7-4096-a1fd-18d6762f57dc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T23:38:52.835057Z\",\"status\":\"ABORTED\"}},{\"id\":\"7df2158c-68e7-4690-8900-c1500b5e46c7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T19:38:52.961235Z\",\"status\":\"ABORTED\"}},{\"id\":\"d59b4dcc-1a6d-4c81-b08e-e7f8ccd9836c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T15:38:53.055134Z\",\"status\":\"ABORTED\"}},{\"id\":\"d87fcd55-54d6-4298-8d09-6dac9f85971a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T11:38:52.824979Z\",\"status\":\"ABORTED\"}},{\"id\":\"6070badd-e533-4256-bc61-67788cb29690\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T07:38:52.961402Z\",\"status\":\"ABORTED\"}},{\"id\":\"39e988d0-52de-4c33-9f5f-350422ea09c9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T05:14:20.022605Z\",\"status\":\"ABORTED\"}},{\"id\":\"c0fe30a9-4f16-48e7-bfce-4bf12834684a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T04:29:05.679177Z\",\"status\":\"ABORTED\"}},{\"id\":\"d1ff4925-fb5f-4b5d-9d76-7862d7e8effc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T03:46:19.82095Z\",\"status\":\"ABORTED\"}},{\"id\":\"a3f70364-9a55-42a2-80e4-dd76739522ff\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T03:38:53.033965Z\",\"status\":\"ABORTED\"}},{\"id\":\"e409f13b-6164-43c1-b557-b523b51d4a3e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-02T00:11:29.318593Z\",\"status\":\"ABORTED\"}},{\"id\":\"59526fad-e0b5-40ad-924f-8dd654ced18b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T23:38:52.951225Z\",\"status\":\"ABORTED\"}},{\"id\":\"c848383b-8a3b-4a56-932d-794683f89a75\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T19:38:52.834591Z\",\"status\":\"ABORTED\"}},{\"id\":\"a63337c5-55ef-42e2-8bbe-75cc96fc575d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T15:38:53.099516Z\",\"status\":\"ABORTED\"}},{\"id\":\"f18bc082-b5c1-4f76-8b7c-5bb216e299fb\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T11:38:52.825986Z\",\"status\":\"ABORTED\"}},{\"id\":\"eadc0133-7d67-44a9-a2b5-2d97438e3ecc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T11:11:31.759131Z\",\"status\":\"ABORTED\"}},{\"id\":\"e41fa5d8-fd1d-43a5-b1ac-916438fadee8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T07:38:52.940422Z\",\"status\":\"ABORTED\"}},{\"id\":\"297c775d-65bd-4f43-84e1-4c68096d6875\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T05:19:52.978466Z\",\"status\":\"ABORTED\"}},{\"id\":\"f29cca0e-e321-42d9-a58d-ac0822024fc8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T04:40:30.454264Z\",\"status\":\"ABORTED\"}},{\"id\":\"5ef77f02-631d-4c0a-844d-215c182b7744\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T03:52:26.958087Z\",\"status\":\"ABORTED\"}},{\"id\":\"8cdb24f1-fcec-4026-b1fb-75ff99c71838\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T03:38:52.819319Z\",\"status\":\"ABORTED\"}},{\"id\":\"c4fa2994-86a9-4d6c-8aa4-09a2e3a56895\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T02:56:40.874587Z\",\"status\":\"ABORTED\"}},{\"id\":\"335c6337-d3c4-481f-9b1e-ff4eaea80f6a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-08-01T00:10:42.897679Z\",\"status\":\"ABORTED\"}},{\"id\":\"4610a956-7ae4-45f9-ba88-5c34cf1852a8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T23:38:52.934332Z\",\"status\":\"ABORTED\"}},{\"id\":\"0050f5a3-29bf-4142-a04e-b69435a66908\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T19:38:52.957165Z\",\"status\":\"ABORTED\"}},{\"id\":\"8b9ebb25-a224-4c36-9750-d54ccdd54d31\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T15:38:52.831183Z\",\"status\":\"ABORTED\"}},{\"id\":\"24e2f97e-fef1-4082-ba82-9c42fea6a0fe\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T11:38:52.949209Z\",\"status\":\"ABORTED\"}},{\"id\":\"b1ffc34b-6943-4572-a6b6-df556a46c47e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T11:10:23.074139Z\",\"status\":\"ABORTED\"}},{\"id\":\"4ac56395-7ad3-425b-8429-21b18fc2b247\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T07:38:52.966252Z\",\"status\":\"ABORTED\"}},{\"id\":\"47ca3468-15a8-43d8-887e-42795fefdf3d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T04:31:26.25435Z\",\"status\":\"ABORTED\"}},{\"id\":\"fcf5a796-a094-4b26-9243-877fc7589ed1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T03:47:52.561444Z\",\"status\":\"ABORTED\"}},{\"id\":\"1737d10d-fb36-4546-8435-82db683110af\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T03:38:52.860293Z\",\"status\":\"ABORTED\"}},{\"id\":\"f86b6c0a-9fba-4714-b97f-864b8c8f085b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-31T00:11:14.442056Z\",\"status\":\"ABORTED\"}},{\"id\":\"de7d0c2b-eec5-4ffc-b94e-b06be4a37a00\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T23:38:52.903345Z\",\"status\":\"ABORTED\"}},{\"id\":\"ff9afdcc-e175-44a9-ab30-f101bda9bbf6\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T19:38:52.961158Z\",\"status\":\"ABORTED\"}},{\"id\":\"3c156319-e5e7-4102-acfc-feeeb64ad0dc\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T15:38:52.912621Z\",\"status\":\"ABORTED\"}},{\"id\":\"b2543c91-df38-4210-8e86-2c6f091a8924\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T11:38:52.882981Z\",\"status\":\"ABORTED\"}},{\"id\":\"43411a01-48ca-4769-a8f6-250d137d02b8\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T11:10:52.329982Z\",\"status\":\"ABORTED\"}},{\"id\":\"26346634-b28e-48db-88cf-510142af69d4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T07:38:52.907878Z\",\"status\":\"ABORTED\"}},{\"id\":\"d9837896-c9b7-4196-932c-ad6b212f7016\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T05:17:53.107762Z\",\"status\":\"ABORTED\"}},{\"id\":\"e2869c09-069a-4e0a-87a7-8be521412695\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T04:33:32.710544Z\",\"status\":\"ABORTED\"}},{\"id\":\"cb18de02-866d-4308-9c11-2694e89a75bf\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T03:50:02.688823Z\",\"status\":\"ABORTED\"}},{\"id\":\"e8eeb0e5-c5e9-4416-a0ce-4985fe827a68\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T03:38:52.87465Z\",\"status\":\"ABORTED\"}},{\"id\":\"7985e461-897c-45b9-8899-f227a6b28124\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-30T00:10:52.914248Z\",\"status\":\"ABORTED\"}},{\"id\":\"14dc86b8-a04d-458a-9e34-be31b33a58f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T23:38:52.98647Z\",\"status\":\"ABORTED\"}},{\"id\":\"bf7ebc3a-9adf-4ed5-bc76-35442d956790\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T19:38:52.882324Z\",\"status\":\"ABORTED\"}},{\"id\":\"f5e6387f-b2f4-414d-8391-537767fbc3f7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T15:38:52.91297Z\",\"status\":\"ABORTED\"}},{\"id\":\"0c3b8d9a-451d-4b67-86fd-dff71dca923a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T11:38:53.017727Z\",\"status\":\"ABORTED\"}},{\"id\":\"a72efec4-4761-4cb8-a3f8-44d3485823e9\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T11:11:11.245426Z\",\"status\":\"ABORTED\"}},{\"id\":\"513605f0-8d57-4d20-8656-bf590c60e0f5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T07:38:52.941006Z\",\"status\":\"ABORTED\"}},{\"id\":\"1073c6d5-578d-41d1-ad34-7e19e9e07269\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T05:17:43.165949Z\",\"status\":\"ABORTED\"}},{\"id\":\"d3dab8f4-f0bc-41e1-97ca-d16822589d82\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T04:34:29.972468Z\",\"status\":\"ABORTED\"}},{\"id\":\"8c79ec47-8bdd-44de-9312-221ce53c6847\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T03:47:02.046866Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac2d5603-020d-4a45-adc8-13ac65862586\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T03:38:53.151112Z\",\"status\":\"ABORTED\"}},{\"id\":\"6e48c814-6e00-440a-912f-4ade965e7ff4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-29T00:11:24.146109Z\",\"status\":\"ABORTED\"}},{\"id\":\"9cb60850-6e56-4d2b-81b5-3c7ad9917ec7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T23:38:52.904803Z\",\"status\":\"ABORTED\"}},{\"id\":\"87dec5eb-6957-4b32-bf84-0076233edf2e\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T19:38:52.9668Z\",\"status\":\"ABORTED\"}},{\"id\":\"7fceecbd-6f32-4a1d-8735-5fc6e7742b93\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T15:38:52.91242Z\",\"status\":\"ABORTED\"}},{\"id\":\"5c2e0be6-6467-43cf-9092-1e8be926ea2a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T11:38:53.034871Z\",\"status\":\"ABORTED\"}},{\"id\":\"f938b69f-3fae-4955-9357-f89bf7b596db\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T11:10:58.976024Z\",\"status\":\"ABORTED\"}},{\"id\":\"dc1b2335-63e9-4c88-8df1-f9593069079d\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T07:38:52.960512Z\",\"status\":\"ABORTED\"}},{\"id\":\"ac8524fc-233f-4a5e-85c2-dc197b2089d1\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T05:21:17.747262Z\",\"status\":\"ABORTED\"}},{\"id\":\"31b2a8f1-7a08-4aaf-8c59-bf684721a64f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T04:33:46.657198Z\",\"status\":\"ABORTED\"}},{\"id\":\"85cc33d1-9e14-4d61-9c55-92aa807aaeb3\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T03:55:56.195764Z\",\"status\":\"ABORTED\"}},{\"id\":\"e160fe85-0430-445c-b829-7b97b5bc2e7c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T03:38:52.913548Z\",\"status\":\"ABORTED\"}},{\"id\":\"7bdd52f4-e424-4176-845f-7ad116aba629\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-28T00:11:18.939463Z\",\"status\":\"ABORTED\"}},{\"id\":\"dd46d824-7acf-4a76-a72d-332c736ae9dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T23:38:52.997598Z\",\"status\":\"ABORTED\"}},{\"id\":\"6f0f0b09-7151-40eb-a195-1f8ea59a3938\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T19:38:52.981501Z\",\"status\":\"ABORTED\"}},{\"id\":\"38ea3bea-0da6-4c6f-bce7-3c3fd8ad2314\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T15:38:52.898316Z\",\"status\":\"ABORTED\"}},{\"id\":\"ec2ee087-1798-4474-a766-4d203f35e778\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T11:38:52.951656Z\",\"status\":\"ABORTED\"}},{\"id\":\"343aa7fe-f8d6-4f5d-8388-a77e6340ee90\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T07:38:52.903313Z\",\"status\":\"ABORTED\"}},{\"id\":\"57128e29-9e19-4bbe-acf3-954ccc5d6ae7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T05:16:28.024387Z\",\"status\":\"ABORTED\"}},{\"id\":\"14784882-9d1e-4804-b9f7-2e633b2239a7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T04:32:01.713919Z\",\"status\":\"ABORTED\"}},{\"id\":\"1e0b7071-d159-4346-ad0a-c6228076be9b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T03:50:33.273197Z\",\"status\":\"ABORTED\"}},{\"id\":\"de46bee4-099b-40cd-8190-1041b5d661e5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T03:38:52.995249Z\",\"status\":\"ABORTED\"}},{\"id\":\"2b01053b-1e08-411e-8d60-341ad04019dd\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-27T00:10:32.75409Z\",\"status\":\"ABORTED\"}},{\"id\":\"28d60653-a8ee-4b4e-bb7b-94ed4b050f92\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T23:38:52.902086Z\",\"status\":\"ABORTED\"}},{\"id\":\"b4e161dd-e6f5-4070-a605-bff2dab40001\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T19:38:52.919984Z\",\"status\":\"ABORTED\"}},{\"id\":\"257d7253-7f83-413a-981a-61f21caa8f46\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T15:38:52.965463Z\",\"status\":\"ABORTED\"}},{\"id\":\"3aebb814-20de-4629-ac72-e45ccd8d584b\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T11:38:52.902093Z\",\"status\":\"ABORTED\"}},{\"id\":\"7c17e773-448f-489b-83c4-175f16e07254\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T07:38:53.15872Z\",\"status\":\"ABORTED\"}},{\"id\":\"6c513966-fdcf-473b-8abf-646554a029d4\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T05:15:33.191478Z\",\"status\":\"ABORTED\"}},{\"id\":\"1402c640-9f0d-41ad-a6db-7f795e9b8d1a\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T04:30:16.938466Z\",\"status\":\"ABORTED\"}},{\"id\":\"2a7d6066-3169-4ce6-9f9c-42f2a9379b1f\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T03:46:54.442544Z\",\"status\":\"ABORTED\"}},{\"id\":\"a94039a7-9c86-4435-b8aa-5cae55e36ac7\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T03:38:52.962351Z\",\"status\":\"ABORTED\"}},{\"id\":\"bb048a1a-6d9c-4078-adbc-6f64dd869bb5\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:eu-west-3:376334461865:function:This-Is-An-Api-Spec-Test\",\"created_at\":\"2025-07-26T00:12:02.177226Z\",\"status\":\"ABORTED\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List AWS on demand tasks returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:21:59.763Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"000000000002\",\"type\":\"aws_scan_options\",\"attributes\":{\"lambda\":false,\"sensitive_data\":false,\"vuln_containers_os\":true,\"vuln_host_os\":true}},{\"id\":\"123456789012\",\"type\":\"aws_scan_options\",\"attributes\":{\"lambda\":true,\"sensitive_data\":true,\"vuln_containers_os\":true,\"vuln_host_os\":true}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List AWS scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:22:00.061Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/azure", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Azure scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:22:00.388Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/agentless_scanning/accounts/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"invalid/project/id\",\"type\":\"gcp_scan_options\",\"attributes\":{\"vuln_containers_os\":true,\"vuln_host_os\":true}},{\"id\":\"api-spec-test\",\"type\":\"gcp_scan_options\",\"attributes\":{\"vuln_containers_os\":false,\"vuln_host_os\":true}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List GCP scan options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-03-01T19:45:09.823Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000003", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"unexpected end of JSON input\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Patch AWS Scan Options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:57.023Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000005", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000003", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"data id must be equal to the id provided in the url path\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Patch AWS Scan Options returns \"Bad Request\" response 2", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:57.495Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "lambda": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000002", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Patch AWS Scan Options returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:58.148Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000005", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000005", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no aws scan options found for account 000000000005\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Patch AWS Scan Options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-03-01T15:34:48.555Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "lambda": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000002", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Patch AWS Scan Options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:58.660Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "different-project-id", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/gcp/no", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"project_id 'no' is too short: must be at least 6 characters (current: 2)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Patch GCP Scan Options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:59.065Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "nonexistent-project-id", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/gcp/nonexistent-project-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no gcp scan options found for project nonexistent-project-id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Patch GCP Scan Options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:59.524Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": false + }, + "id": "api-spec-test", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/gcp/api-spec-test", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"api-spec-test\",\"type\":\"gcp_scan_options\",\"attributes\":{\"vuln_containers_os\":false,\"vuln_host_os\":true}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Patch GCP Scan Options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-03-01T15:19:57.464Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "lambda": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000003", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"000000000003\",\"type\":\"aws_scan_options\",\"attributes\":{\"lambda\":false,\"vuln_containers_os\":true,\"vuln_host_os\":true}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000003", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Post AWS Scan Options returns \"Agentless scan options enabled successfully.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:49:59.944Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "lambda": true, + "sensitive_data": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "123", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"the provided Aws account id is not valid\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Post AWS Scan Options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:50:00.395Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "lambda": false, + "sensitive_data": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000002", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"detail\":\"aws scan options already exist for account 000000000002\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + } + ], + "scenario": "Post AWS Scan Options returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-03-01T15:32:48.267Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "lambda": true, + "sensitive_data": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000003", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"000000000003\",\"type\":\"aws_scan_options\",\"attributes\":{\"lambda\":true,\"sensitive_data\":false,\"vuln_containers_os\":true,\"vuln_host_os\":true}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000003", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Post AWS Scan Options returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:50:00.847Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "new-project", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"new-project\",\"type\":\"gcp_scan_options\",\"attributes\":{\"vuln_containers_os\":true,\"vuln_host_os\":true}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/agentless_scanning/accounts/gcp/new-project", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Post GCP Scan Options returns \"Agentless scan options enabled successfully.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:50:01.746Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "no", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"project_id 'no' is too short: must be at least 6 characters (current: 2)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Post GCP Scan Options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:50:02.215Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "api-spec-test", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/accounts/gcp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"detail\":\"gcp scan options already exist for project api-spec-test\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + } + ], + "scenario": "Post GCP Scan Options returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:50:02.648Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "arn": "arn:aws:lambda:us-west-2:123456789012:function:my-function" + }, + "type": "aws_resource" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/ondemand/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"874b5481-1668-4af3-b536-007f85fcf64c\",\"type\":\"aws_resource\",\"attributes\":{\"arn\":\"arn:aws:lambda:us-west-2:123456789012:function:my-function\",\"created_at\":\"2025-10-12T15:50:03.035807Z\",\"status\":\"QUEUED\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + } + ], + "scenario": "Post an AWS on demand task returns \"AWS on demand task created successfully.\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-12T15:50:03.077Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "arn": "invalid-arn" + }, + "type": "aws_resource" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/agentless_scanning/ondemand/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid aws arn\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Post an AWS on demand task returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:22:00.698Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000005", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000003", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"data id must be equal to the id provided in the url path\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update AWS scan options returns \"Bad Request\" response 2", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:22:01.006Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "lambda": false, + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000002", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update AWS scan options returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:22:01.317Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "000000000005", + "type": "aws_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/aws/000000000005", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no aws scan options found for account 000000000005\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update AWS scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:22:01.628Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "different-project-id", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/gcp/no", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"project id must be 6-30 characters, got 2\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update GCP scan options returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2025-10-23T22:22:01.940Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "vuln_containers_os": true, + "vuln_host_os": true + }, + "id": "nonexistent-project-id", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/gcp/nonexistent-project-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"no gcp scan options found for project nonexistent-project-id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update GCP scan options returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Agentless Scanning", + "frozen_at": "2026-07-17T06:38:47.452Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "cloud_function": true, + "vuln_containers_os": false + }, + "id": "api-spec-test", + "type": "gcp_scan_options" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/agentless_scanning/accounts/gcp/api-spec-test", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"api-spec-test\",\"type\":\"gcp_scan_options\",\"attributes\":{\"cloud_function\":true,\"compliance_host\":false,\"vuln_containers_os\":false,\"vuln_host_os\":true}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update GCP scan options returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/annotations.json b/test-server-data/v2/annotations.json new file mode 100644 index 0000000000..a68ab91eb1 --- /dev/null +++ b/test-server-data/v2/annotations.json @@ -0,0 +1,448 @@ +{ + "feature": "Annotations", + "recordings": [ + { + "feature": "Annotations", + "frozen_at": "2026-05-27T20:28:17.108Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "color": "blue", + "description": "Deployed v2.3.1 to production.", + "page_id": "dashboard:abc-def-xyz", + "start_time": 1704067200000, + "type": "pointInTime", + "widget_ids": [ + "1234567890" + ] + }, + "type": "annotation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/annotation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2035c4df-a060-4466-93ec-9304a039bbed\",\"type\":\"annotation\",\"attributes\":{\"author_id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"color\":\"blue\",\"created_at\":1779913697490,\"description\":\"Deployed v2.3.1 to production.\",\"end_time\":null,\"modified_at\":1779913697490,\"page_id\":\"dashboard:abc-def-xyz\",\"start_time\":1704067200000,\"type\":\"pointInTime\",\"widget_ids\":[\"1234567890\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/annotation/2035c4df-a060-4466-93ec-9304a039bbed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an annotation returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Annotations", + "frozen_at": "2026-05-27T20:28:17.632Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "color": "blue", + "description": "Deployed v2.3.1 to production.", + "page_id": "dashboard:abc-def-xyz", + "start_time": 1704067200000, + "type": "pointInTime" + }, + "type": "annotation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/annotation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"152a2920-7598-4487-b185-b15931f92bc0\",\"type\":\"annotation\",\"attributes\":{\"author_id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"color\":\"blue\",\"created_at\":1779913697691,\"description\":\"Deployed v2.3.1 to production.\",\"end_time\":null,\"modified_at\":1779913697691,\"page_id\":\"dashboard:abc-def-xyz\",\"start_time\":1704067200000,\"type\":\"pointInTime\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/annotation/152a2920-7598-4487-b185-b15931f92bc0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/annotation/152a2920-7598-4487-b185-b15931f92bc0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete an annotation returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Annotations", + "frozen_at": "2026-05-27T20:28:17.883Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "color": "blue", + "description": "Deployed v2.3.1 to production.", + "page_id": "dashboard:abc-def-xyz", + "start_time": 1704067200000, + "type": "pointInTime" + }, + "type": "annotation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/annotation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"31d6c3c7-0519-49e3-bcdf-9b1c00530aea\",\"type\":\"annotation\",\"attributes\":{\"author_id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"color\":\"blue\",\"created_at\":1779913698075,\"description\":\"Deployed v2.3.1 to production.\",\"end_time\":null,\"modified_at\":1779913698075,\"page_id\":\"dashboard:abc-def-xyz\",\"start_time\":1704067200000,\"type\":\"pointInTime\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/annotation/page/dashboard%3Aabc-def-xyz", + "query": [ + [ + "end_time", + "1704153600000" + ], + [ + "start_time", + "1704067200000" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dashboard:abc-def-xyz\",\"type\":\"page_annotations\",\"attributes\":{\"annotations\":{\"31d6c3c7-0519-49e3-bcdf-9b1c00530aea\":{\"id\":\"31d6c3c7-0519-49e3-bcdf-9b1c00530aea\",\"page_id\":\"dashboard:abc-def-xyz\",\"description\":\"Deployed v2.3.1 to production.\",\"author_id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"pointInTime\",\"color\":\"blue\",\"start_time\":1704067200000,\"end_time\":null,\"created_at\":1779913698075,\"modified_at\":1779913698075}},\"global_annotations\":[\"31d6c3c7-0519-49e3-bcdf-9b1c00530aea\"],\"widget_mapping\":{}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/annotation/31d6c3c7-0519-49e3-bcdf-9b1c00530aea", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get annotations for a page returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Annotations", + "frozen_at": "2026-05-27T20:28:18.281Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "color": "blue", + "description": "Deployed v2.3.1 to production.", + "page_id": "dashboard:abc-def-xyz", + "start_time": 1704067200000, + "type": "pointInTime" + }, + "type": "annotation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/annotation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9db3699d-4361-4062-b095-a4da3227afe6\",\"type\":\"annotation\",\"attributes\":{\"author_id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"color\":\"blue\",\"created_at\":1779913698338,\"description\":\"Deployed v2.3.1 to production.\",\"end_time\":null,\"modified_at\":1779913698338,\"page_id\":\"dashboard:abc-def-xyz\",\"start_time\":1704067200000,\"type\":\"pointInTime\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/annotation", + "query": [ + [ + "end_time", + "1704153600000" + ], + [ + "page_id", + "dashboard:abc-def-xyz" + ], + [ + "start_time", + "1704067200000" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"9db3699d-4361-4062-b095-a4da3227afe6\",\"type\":\"annotation\",\"attributes\":{\"author_id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"color\":\"blue\",\"created_at\":1779913698338,\"description\":\"Deployed v2.3.1 to production.\",\"end_time\":null,\"modified_at\":1779913698338,\"page_id\":\"dashboard:abc-def-xyz\",\"start_time\":1704067200000,\"type\":\"pointInTime\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/annotation/9db3699d-4361-4062-b095-a4da3227afe6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List annotations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Annotations", + "frozen_at": "2026-05-27T20:28:18.537Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "color": "blue", + "description": "Deployed v2.3.1 to production.", + "page_id": "dashboard:abc-def-xyz", + "start_time": 1704067200000, + "type": "pointInTime" + }, + "type": "annotation" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/annotation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9f257ed0-87fb-42f8-9aaf-89397e766d15\",\"type\":\"annotation\",\"attributes\":{\"author_id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"color\":\"blue\",\"created_at\":1779913698596,\"description\":\"Deployed v2.3.1 to production.\",\"end_time\":null,\"modified_at\":1779913698596,\"page_id\":\"dashboard:abc-def-xyz\",\"start_time\":1704067200000,\"type\":\"pointInTime\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "color": "green", + "description": "Updated annotation.", + "page_id": "dashboard:abc-def-xyz", + "start_time": 1704067200000, + "type": "pointInTime" + }, + "type": "annotation" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/annotation/9f257ed0-87fb-42f8-9aaf-89397e766d15", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9f257ed0-87fb-42f8-9aaf-89397e766d15\",\"type\":\"annotation\",\"attributes\":{\"author_id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"color\":\"green\",\"created_at\":1779913698596,\"description\":\"Updated annotation.\",\"end_time\":null,\"modified_at\":1779913698699,\"page_id\":\"dashboard:abc-def-xyz\",\"start_time\":1704067200000,\"type\":\"pointInTime\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/annotation/9f257ed0-87fb-42f8-9aaf-89397e766d15", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an annotation returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/apm-retention-filters.json b/test-server-data/v2/apm-retention-filters.json new file mode 100644 index 0000000000..c66af24070 --- /dev/null +++ b/test-server-data/v2/apm-retention-filters.json @@ -0,0 +1,1215 @@ +{ + "feature": "APM Retention Filters", + "recordings": [ + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:44.101Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "filter_type": "spans-errors-sampling-processor", + "name": "my retention filter", + "rate": 1 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Field 'filter_type' is invalid, expected value is 'spans-sampling-processor'\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a default retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:44.623Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "filter_type": "spans-sampling-processor", + "name": "my retention filter", + "rate": 2 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid Pipeline\",\"'rate' must exist and be between 0 and 1\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:45.098Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "filter_type": "spans-sampling-processor", + "name": "my retention filter", + "rate": 1 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"x1aRVkAVQN2CBx1ghs4xDQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111965,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111965},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/x1aRVkAVQN2CBx1ghs4xDQ", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:46.074Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "filter_type": "spans-sampling-processor", + "name": "my retention filter", + "rate": 1, + "trace_rate": 1 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"QAtIbDKzQmCnHSvQde-VWw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":1.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111966,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111966},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/QAtIbDKzQmCnHSvQde-VWw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a retention filter with trace rate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:47.294Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/not_found", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"retention filter with id: 'not_found' not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:47.712Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "demo retention filter", + "rate": 0.9 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ZHyaGYKyQNO4nNxGqIxrdg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111968,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111968},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/ZHyaGYKyQNO4nNxGqIxrdg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/ZHyaGYKyQNO4nNxGqIxrdg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"retention filter with id: 'ZHyaGYKyQNO4nNxGqIxrdg' not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:49.382Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/apm/config/retention-filters/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"retention filter with id: 'REPLACE.ME' not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a given APM retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:49.792Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "demo retention filter", + "rate": 0.9 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"IbsDnxY0SC-Wuz4g82UZ2w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111970,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111970},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/apm/config/retention-filters/IbsDnxY0SC-Wuz4g82UZ2w", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"IbsDnxY0SC-Wuz4g82UZ2w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111970,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111970},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/IbsDnxY0SC-Wuz4g82UZ2w", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a given APM retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:51.485Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "demo retention filter", + "rate": 0.9 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"WvrVucoORM6ZPyIkbmOrCg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111971,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111971},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"P_fT95QaT1KDxkg8NfLC2w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":1,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743678740,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743678740},\"type\":\"apm_retention_filter\"},{\"id\":\"1BE1xji5QjiCZbuEWKexMg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":2,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743678739,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743678739},\"type\":\"apm_retention_filter\"},{\"id\":\"v5MO8NudQriN_5mG0LB2qg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":3,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743678738,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743678738},\"type\":\"apm_retention_filter\"},{\"id\":\"-qj0SpXDTBK89xWIl7cKAQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":4,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743678738,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743678738},\"type\":\"apm_retention_filter\"},{\"id\":\"vuMDFb7PTdydUshGbW6UGw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":5,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743678737,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743678737},\"type\":\"apm_retention_filter\"},{\"id\":\"-j_8rfcHRKqWz13BmEUTLg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":6,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743678736,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743678736},\"type\":\"apm_retention_filter\"},{\"id\":\"tQ00omKXRyS7Mhusp5iilA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":7,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743592252,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743592252},\"type\":\"apm_retention_filter\"},{\"id\":\"7Zz1ajjRSHS6BDkUUAsCmw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":8,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743592252,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743592252},\"type\":\"apm_retention_filter\"},{\"id\":\"ieWULQ3FTpO2PcizbunRog\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":9,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743592251,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743592251},\"type\":\"apm_retention_filter\"},{\"id\":\"3W51pxC5QAKCgaveTLfwdw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":10,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743592251,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743592251},\"type\":\"apm_retention_filter\"},{\"id\":\"NwA12YKXSVSvkh57q6nGTA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":11,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743592250,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743592250},\"type\":\"apm_retention_filter\"},{\"id\":\"oOQLdTvyShCLtQ7fO-2dkw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":12,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743592250,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743592250},\"type\":\"apm_retention_filter\"},{\"id\":\"MtYsn8x9SQaBeMZXKZVa5A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":13,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743505855,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743505855},\"type\":\"apm_retention_filter\"},{\"id\":\"_uqr-W04Tw6izPVN-udmpg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":14,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743505854,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743505854},\"type\":\"apm_retention_filter\"},{\"id\":\"p4r6jXMXQteWAHg8ly875w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":15,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743505854,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743505854},\"type\":\"apm_retention_filter\"},{\"id\":\"5s0lAdGLS6-d9qwCLatojg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":16,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743505853,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743505853},\"type\":\"apm_retention_filter\"},{\"id\":\"M5yMmc5WQXenDO8k3kX-hg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":17,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743505853,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743505853},\"type\":\"apm_retention_filter\"},{\"id\":\"_9_oJJtpQIODJjLsmTJRfQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":18,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743505852,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743505852},\"type\":\"apm_retention_filter\"},{\"id\":\"Wz4-JzhCRY60Zt2IzvE9Wg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":19,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742987401,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742987401},\"type\":\"apm_retention_filter\"},{\"id\":\"Y5TMqY79Rei2qhQ6zoowQQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":20,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742987401,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742987401},\"type\":\"apm_retention_filter\"},{\"id\":\"C4oLkqpoR_OJwYE9i6opVA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":21,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742987401,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742987401},\"type\":\"apm_retention_filter\"},{\"id\":\"xpUYRPRPRhKYIHUXno78SQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":22,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742987400,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742987400},\"type\":\"apm_retention_filter\"},{\"id\":\"XDCxX2YNSBaF1_MUyWl30Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":23,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742987400,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742987400},\"type\":\"apm_retention_filter\"},{\"id\":\"YDj_8NvHSs-Tf6S92fsFCA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":24,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742987399,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742987399},\"type\":\"apm_retention_filter\"},{\"id\":\"MxzXOXrQTQKnbbkLrJxSxQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":25,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742901055,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742901055},\"type\":\"apm_retention_filter\"},{\"id\":\"F5E4259ZTK-SgRcyafCJEw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":26,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742901055,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742901055},\"type\":\"apm_retention_filter\"},{\"id\":\"AxJrz0KsSX-HK2YUaGfZAw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":27,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742901054,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742901054},\"type\":\"apm_retention_filter\"},{\"id\":\"QKmuTPi2TzufeDqrd7-niQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":28,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742901054,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742901054},\"type\":\"apm_retention_filter\"},{\"id\":\"e9c0q8orSFyfU94k-_2g5A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":29,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742901053,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742901053},\"type\":\"apm_retention_filter\"},{\"id\":\"Upyiz55RR3SZ3jPcoR2oBA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":30,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742901053,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742901053},\"type\":\"apm_retention_filter\"},{\"id\":\"gW7QQD4cR4yA25GIGQgKmg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":31,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742555532,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742555532},\"type\":\"apm_retention_filter\"},{\"id\":\"_LKq6BbeQ6GxT0s-9-m9bw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":32,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742555532,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742555532},\"type\":\"apm_retention_filter\"},{\"id\":\"5JwYBayhRgeosetYW8jE_Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":33,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742555531,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742555531},\"type\":\"apm_retention_filter\"},{\"id\":\"-eJFYgBvQIaHsKA5qWS2Xw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":34,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742555531,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742555531},\"type\":\"apm_retention_filter\"},{\"id\":\"CP8Z0ME9RumL071zK3VwFg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":35,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742555530,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742555530},\"type\":\"apm_retention_filter\"},{\"id\":\"1ZFRLYIDQL-1Ewu5D6Wadw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":36,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742555529,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742555529},\"type\":\"apm_retention_filter\"},{\"id\":\"rKZniZg8S1OsR2fqYikcCw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":37,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742296173,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742296173},\"type\":\"apm_retention_filter\"},{\"id\":\"I9w8O-zMQxON5H1ST2QLmQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":38,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742296173,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742296173},\"type\":\"apm_retention_filter\"},{\"id\":\"7TIgZSKCTsO9M3a0r0aB_Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":39,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742296172,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742296172},\"type\":\"apm_retention_filter\"},{\"id\":\"TSfZHkxGQ567fqpUjzVRoA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":40,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742296172,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742296172},\"type\":\"apm_retention_filter\"},{\"id\":\"xvDUnfuOR_Kef6wyHJ-cUQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":41,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742296172,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742296172},\"type\":\"apm_retention_filter\"},{\"id\":\"QBPA1R0_TaSD2bCF-oKuog\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":42,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742296171,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742296171},\"type\":\"apm_retention_filter\"},{\"id\":\"Wz6Scwr4QxqO8PedTeBlAQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":43,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742209785,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742209785},\"type\":\"apm_retention_filter\"},{\"id\":\"2T3tEqlSSgq9czmiiN2GHg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":44,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742209784,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742209784},\"type\":\"apm_retention_filter\"},{\"id\":\"8zOf_icDSPyiIiNqSOmAVg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":45,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742209784,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742209784},\"type\":\"apm_retention_filter\"},{\"id\":\"bb81aXUsQpSqZKoq1ZdPog\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":46,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742209784,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742209784},\"type\":\"apm_retention_filter\"},{\"id\":\"C_79qlaXRQasfAJIdBqp2Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":47,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742209783,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742209783},\"type\":\"apm_retention_filter\"},{\"id\":\"a-7mluucRpuvDxfQ1JZMDA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":48,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742209783,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742209783},\"type\":\"apm_retention_filter\"},{\"id\":\"-WW0lQXjTIqdv_8vKbOPfg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":49,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741950585,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741950585},\"type\":\"apm_retention_filter\"},{\"id\":\"e4QYXXx2SgGbGUvBgoXmRQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":50,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741950584,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741950584},\"type\":\"apm_retention_filter\"},{\"id\":\"KqbWS8KvRaWu1qvj4s3Drw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":51,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741950584,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741950584},\"type\":\"apm_retention_filter\"},{\"id\":\"rjrA1Px3StOe2zpqCc26ng\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":52,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741950584,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741950584},\"type\":\"apm_retention_filter\"},{\"id\":\"8chRovohTGuOLnUhvqYp-w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":53,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741950583,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741950583},\"type\":\"apm_retention_filter\"},{\"id\":\"5F8w1jgIRJafAzD1tp2rUQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":54,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741950583,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741950583},\"type\":\"apm_retention_filter\"},{\"id\":\"q9wIpgv7S-SKR34c79kbAg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":55,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741345753,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741345753},\"type\":\"apm_retention_filter\"},{\"id\":\"wMTRaapaQzalOutpFvz8Dw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":56,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741345753,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741345753},\"type\":\"apm_retention_filter\"},{\"id\":\"OrsmTlppTsqxlKQ3GFRcxA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":57,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741345752,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741345752},\"type\":\"apm_retention_filter\"},{\"id\":\"8Qg1GtB8Q46Oh9xH0YyENw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":58,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741345752,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741345752},\"type\":\"apm_retention_filter\"},{\"id\":\"B8RVvKX6TJaYfjfDTv-IfA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":59,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741345752,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741345752},\"type\":\"apm_retention_filter\"},{\"id\":\"pvbEW9OMQpeKRyWHJTYSYw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":60,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741345752,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741345752},\"type\":\"apm_retention_filter\"},{\"id\":\"ZO6MKlCRQgSYPJQQXG6vzA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":61,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741259358,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741259358},\"type\":\"apm_retention_filter\"},{\"id\":\"8QntXYOOQ9qnsG8e5saKgw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":62,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741259358,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741259358},\"type\":\"apm_retention_filter\"},{\"id\":\"cAfktBXORXqsY1-8CfWSVA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":63,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741259357,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741259357},\"type\":\"apm_retention_filter\"},{\"id\":\"eh0rYKRaQ7Wr3vpMaeEtKA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":64,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741259357,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741259357},\"type\":\"apm_retention_filter\"},{\"id\":\"petRnWvLQqyxdXHz9IGgcg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":65,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741259357,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741259357},\"type\":\"apm_retention_filter\"},{\"id\":\"AdE-raywSXitjPcNgoEn-g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":66,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741259356,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741259356},\"type\":\"apm_retention_filter\"},{\"id\":\"2XCA46_rTAi4cue6Fe8x8A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":67,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741173111,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741173111},\"type\":\"apm_retention_filter\"},{\"id\":\"6CuizGK8RIiZzRWfa_0X3Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":68,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741173110,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741173110},\"type\":\"apm_retention_filter\"},{\"id\":\"Xu823rH4RpWo-3rRe-Ipvw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":69,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741173110,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741173110},\"type\":\"apm_retention_filter\"},{\"id\":\"RYkpGIaARACwqYih-b6jog\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":70,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741173109,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741173109},\"type\":\"apm_retention_filter\"},{\"id\":\"7cTxHyWsQmKOktN2TUR0wg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":71,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741173108,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741173108},\"type\":\"apm_retention_filter\"},{\"id\":\"qzCXMCMcRs-ctewrJWNlTA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":72,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741173107,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741173107},\"type\":\"apm_retention_filter\"},{\"id\":\"FVb-ZzCwT5SKTTZ5YipO7A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":73,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741086556,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741086556},\"type\":\"apm_retention_filter\"},{\"id\":\"-gSUJDS1QfidvP6ZP5WJHg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":74,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741086556,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741086556},\"type\":\"apm_retention_filter\"},{\"id\":\"Zv-Qnb27SNK4ZCaRaMHYYA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":75,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741086555,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741086555},\"type\":\"apm_retention_filter\"},{\"id\":\"H4UfvJp5Rz63QA7rLF6__g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":76,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741086555,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741086555},\"type\":\"apm_retention_filter\"},{\"id\":\"9WzFGQghQFOpi4bPAxsVIg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":77,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741086555,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741086555},\"type\":\"apm_retention_filter\"},{\"id\":\"d6qzKLQxTyqMhpAViBtFmA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":78,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741086554,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741086554},\"type\":\"apm_retention_filter\"},{\"id\":\"OG3rm1_bQAKO4zaFlCBHCQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":79,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741000174,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741000174},\"type\":\"apm_retention_filter\"},{\"id\":\"l5MxgIjKRPOf0NRgQZWsKw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":80,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741000174,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741000174},\"type\":\"apm_retention_filter\"},{\"id\":\"3r8N3rNrSA-94jP8oW9r3w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":81,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741000173,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741000173},\"type\":\"apm_retention_filter\"},{\"id\":\"ieUxTw1oQUeevjlH9TfA5g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":82,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741000173,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741000173},\"type\":\"apm_retention_filter\"},{\"id\":\"k4zAeyFTQeyrR-9FqDvi3A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":83,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741000173,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741000173},\"type\":\"apm_retention_filter\"},{\"id\":\"5sz8H81fSBGKTb7k-COh1Q\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":84,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741000172,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741000172},\"type\":\"apm_retention_filter\"},{\"id\":\"oLk6r4OcTRmzrAXUZ7PsQQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":85,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740802494,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740802494},\"type\":\"apm_retention_filter\"},{\"id\":\"8NH706CGR9OVuhVIZm_5fA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":86,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740741027,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740741027},\"type\":\"apm_retention_filter\"},{\"id\":\"mMXBvnHoRJugiWmYaivjJw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":87,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740741026,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740741026},\"type\":\"apm_retention_filter\"},{\"id\":\"tXffXKiDRf6xGdezdWOOmw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":88,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740741026,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740741026},\"type\":\"apm_retention_filter\"},{\"id\":\"bVhBHam_QVWLWpcRe-a8SQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":89,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740741026,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740741026},\"type\":\"apm_retention_filter\"},{\"id\":\"MkmQts7fQCS4vFp4rmC9ww\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":90,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740741025,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740741025},\"type\":\"apm_retention_filter\"},{\"id\":\"DKM9CrnpRReDHY7eFwgf3A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":91,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740741025,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740741025},\"type\":\"apm_retention_filter\"},{\"id\":\"IEoWRsPOSoyvd2ofi2D1Xg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":92,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740136289,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740136289},\"type\":\"apm_retention_filter\"},{\"id\":\"tqrl2TWFT2KnkCVbSzXH1A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":93,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740136288,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740136288},\"type\":\"apm_retention_filter\"},{\"id\":\"ulPXGo7aS5-5m3blMozFDg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":94,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740136288,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740136288},\"type\":\"apm_retention_filter\"},{\"id\":\"C6TcFJhMRaSdUHB9nIjLyQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":95,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740136288,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740136288},\"type\":\"apm_retention_filter\"},{\"id\":\"tHYEiwaiSeOSh3ydn1By5A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":96,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740136287,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740136287},\"type\":\"apm_retention_filter\"},{\"id\":\"Urqoj4kZSsi871AyajiZHg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":97,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740136286,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740136286},\"type\":\"apm_retention_filter\"},{\"id\":\"bwkkHR7NTwiFr_pPeMbcyg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":98,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739877010,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739877010},\"type\":\"apm_retention_filter\"},{\"id\":\"OyhRNGxXQWqBdoV1KgCrlg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":99,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739877010,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739877010},\"type\":\"apm_retention_filter\"},{\"id\":\"2Ywhck97QhWz07ouPWi3iw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":100,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739877009,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739877009},\"type\":\"apm_retention_filter\"},{\"id\":\"9ODmwCPDQs2sbbXMx1DLgw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":101,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739877009,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739877009},\"type\":\"apm_retention_filter\"},{\"id\":\"MsjKgusFRACFFmvoDTNtpg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":102,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739877008,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739877008},\"type\":\"apm_retention_filter\"},{\"id\":\"-4-HLpazRryFgXqizribCQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":103,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739877008,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739877008},\"type\":\"apm_retention_filter\"},{\"id\":\"MHcrXhVhS9uJ2wBH5Ai4VA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":104,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739790541,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739790541},\"type\":\"apm_retention_filter\"},{\"id\":\"MGqzKiXJRvSQOqXzks7xcA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":105,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739790541,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739790541},\"type\":\"apm_retention_filter\"},{\"id\":\"AUbVXkfrQ4-LO0y-cDf0kw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":106,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739790540,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739790540},\"type\":\"apm_retention_filter\"},{\"id\":\"E8r3v1Q8SgCzg6uM5vy21g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":107,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739790540,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739790540},\"type\":\"apm_retention_filter\"},{\"id\":\"aDCTwmtcRFiLiXkdcZNhWg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":108,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739790540,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739790540},\"type\":\"apm_retention_filter\"},{\"id\":\"z6jxoQyvRDaZIMsFb3oMbg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":109,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739790540,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739790540},\"type\":\"apm_retention_filter\"},{\"id\":\"LolOt_VzQpekLYafGADy1Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":110,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739531331,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739531331},\"type\":\"apm_retention_filter\"},{\"id\":\"ag6jtFfnQxu6T4QmhU8nDw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":111,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739531330,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739531330},\"type\":\"apm_retention_filter\"},{\"id\":\"JTxV-U10QGqV-RSMBX6JVA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":112,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739531330,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739531330},\"type\":\"apm_retention_filter\"},{\"id\":\"m2fg5g9QTLm7drUwiW7BEw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":113,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739531330,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739531330},\"type\":\"apm_retention_filter\"},{\"id\":\"gqbz1ra7SpeYhxz-SLvw_w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":114,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739531330,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739531330},\"type\":\"apm_retention_filter\"},{\"id\":\"5Tm27uuNQDKkwFAwIsjTuw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":115,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739531329,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739531329},\"type\":\"apm_retention_filter\"},{\"id\":\"AbfIjHYRSIug2Osj1q8q_A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":116,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739445057,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739445057},\"type\":\"apm_retention_filter\"},{\"id\":\"5gT2YTH3TbKs5DSp-EITmQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":117,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739445056,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739445056},\"type\":\"apm_retention_filter\"},{\"id\":\"pAghW4zLTRu_8Gy1_24kQg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":118,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739445056,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739445056},\"type\":\"apm_retention_filter\"},{\"id\":\"ue7VcvGEQMadYGlTDLhA-Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":119,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739445056,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739445056},\"type\":\"apm_retention_filter\"},{\"id\":\"q3TgtfCQTeeXfmS6hTmcBg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":120,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739445055,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739445055},\"type\":\"apm_retention_filter\"},{\"id\":\"Nb80PLkRR6mG7DVfT9i81Q\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":121,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739445054,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739445054},\"type\":\"apm_retention_filter\"},{\"id\":\"zw3GS-0AQX21S7Lf6e4L8Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":122,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739358582,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739358582},\"type\":\"apm_retention_filter\"},{\"id\":\"Q__MC7DgTlCCOq1rtK4tXw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":123,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739358582,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739358582},\"type\":\"apm_retention_filter\"},{\"id\":\"jtzX-JqwRyKknTCk1yZBpg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":124,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739358581,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739358581},\"type\":\"apm_retention_filter\"},{\"id\":\"agjTcAoiQ5CELTlxCw66LA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":125,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739358581,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739358581},\"type\":\"apm_retention_filter\"},{\"id\":\"tX8nFYnJT7qDCaevIUoMag\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":126,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739358581,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739358581},\"type\":\"apm_retention_filter\"},{\"id\":\"6ZjREI2fRgOP2INlHwqIJA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":127,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739358580,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739358580},\"type\":\"apm_retention_filter\"},{\"id\":\"6EgscP9CTJeXdqGuEhE5ig\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":128,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739272190,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739272190},\"type\":\"apm_retention_filter\"},{\"id\":\"fQxelwLLQ-OtsMGUdB5q6A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":129,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739272189,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739272189},\"type\":\"apm_retention_filter\"},{\"id\":\"-trW0Q09SlSrpNMNkWAHPQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":130,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739272189,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739272189},\"type\":\"apm_retention_filter\"},{\"id\":\"qBLyNzeXQ6q5e0hTYbBnrg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":131,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739272189,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739272189},\"type\":\"apm_retention_filter\"},{\"id\":\"bBMaQ5RmTvaZ3Z80t5bLcA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":132,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739272188,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739272188},\"type\":\"apm_retention_filter\"},{\"id\":\"UhzvvaVERU-jaZR00nUwoA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":133,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739272188,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739272188},\"type\":\"apm_retention_filter\"},{\"id\":\"JAt6eUPKSXel469Owqf3FQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":134,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739185756,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739185756},\"type\":\"apm_retention_filter\"},{\"id\":\"P_wqdn0fQDqOiKKciYvyBg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":135,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739185756,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739185756},\"type\":\"apm_retention_filter\"},{\"id\":\"BQWlH1V1TnidR-4hnw3ZlQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":136,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739185756,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739185756},\"type\":\"apm_retention_filter\"},{\"id\":\"EmpM2yNBRua2n4SFO1fAgw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":137,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739185756,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739185756},\"type\":\"apm_retention_filter\"},{\"id\":\"jC5pBFFLSsOjUOB81HsZMA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":138,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739185755,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739185755},\"type\":\"apm_retention_filter\"},{\"id\":\"XuRdxZ-_Trqvk0gMk8mU0g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":139,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739185755,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739185755},\"type\":\"apm_retention_filter\"},{\"id\":\"eiFt6ZJ1TVqo2TUD9sEHuw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":140,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738667370,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738667370},\"type\":\"apm_retention_filter\"},{\"id\":\"-BjcMNMIS8qnMsJfx7eMuA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":141,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738667370,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738667370},\"type\":\"apm_retention_filter\"},{\"id\":\"69JoQ4gjRzSN-AJo2KOthw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":142,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738667370,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738667370},\"type\":\"apm_retention_filter\"},{\"id\":\"x5OTPjDsRH6X_96-eAMxwA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":143,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738667369,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738667369},\"type\":\"apm_retention_filter\"},{\"id\":\"A0K_EKSWQzCpRx0se5LACA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":144,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738667369,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738667369},\"type\":\"apm_retention_filter\"},{\"id\":\"rnylImziQyCny1FECwZ7rg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":145,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738667369,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738667369},\"type\":\"apm_retention_filter\"},{\"id\":\"ZuJ_osymQOqhTpZVcQwJUA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":146,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738580968,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738580968},\"type\":\"apm_retention_filter\"},{\"id\":\"hCSxvQotTPqt2afyFVDeKQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":147,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738580968,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738580968},\"type\":\"apm_retention_filter\"},{\"id\":\"8xQ2PE_9RmeQdeG-aX615w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":148,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738580967,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738580967},\"type\":\"apm_retention_filter\"},{\"id\":\"V-I_JR7gTcSd3cIn9nYXDg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":149,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738580967,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738580967},\"type\":\"apm_retention_filter\"},{\"id\":\"isDLC3mzQwiE6JuOPZwg1Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":150,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738580967,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738580967},\"type\":\"apm_retention_filter\"},{\"id\":\"9xyL3D0CS2KAD80USeVyRA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":151,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738580966,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738580966},\"type\":\"apm_retention_filter\"},{\"id\":\"ypuDLkSlTqOqeKX5pxzXXA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":152,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738321776,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738321776},\"type\":\"apm_retention_filter\"},{\"id\":\"SMSE9Eo0TfO4s9ZgTlDU1A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":153,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738321775,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738321775},\"type\":\"apm_retention_filter\"},{\"id\":\"v4z8RqwgSuKyYSa1KmErIg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":154,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738321775,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738321775},\"type\":\"apm_retention_filter\"},{\"id\":\"U8XViXLqTbGV2R6A2b34JA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":155,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738321775,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738321775},\"type\":\"apm_retention_filter\"},{\"id\":\"hZeYGqylQ2uKVsEdQ1YjrQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":156,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738321774,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738321774},\"type\":\"apm_retention_filter\"},{\"id\":\"4AvoBn80TlqazeV1XCkYRA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":157,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738321774,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738321774},\"type\":\"apm_retention_filter\"},{\"id\":\"RyQ5mo5ZRo2hbjzSzQ3b5A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":158,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738235390,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738235390},\"type\":\"apm_retention_filter\"},{\"id\":\"oWjgxlGmTj2vUsQq4joLqQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":159,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738235390,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738235390},\"type\":\"apm_retention_filter\"},{\"id\":\"ZCytQXBKTNGVtfHQiibYog\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":160,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738235389,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738235389},\"type\":\"apm_retention_filter\"},{\"id\":\"b-6tv-RmT3m5xHIMP4BHiw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":161,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738235389,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738235389},\"type\":\"apm_retention_filter\"},{\"id\":\"IFFYVVbNQCuin4I3OIlLsA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":162,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738235389,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738235389},\"type\":\"apm_retention_filter\"},{\"id\":\"RcUBCZbMQFegEQTvXAW0_A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":163,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738235388,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738235388},\"type\":\"apm_retention_filter\"},{\"id\":\"Zewijx5NRYKSknqykx3o1A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":164,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738062531,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738062531},\"type\":\"apm_retention_filter\"},{\"id\":\"1ZVEwFChSOyiVhGI-M_XSw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":165,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738062531,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738062531},\"type\":\"apm_retention_filter\"},{\"id\":\"dkZMrf4lRJmRWlqK5fE8rg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":166,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738062531,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738062531},\"type\":\"apm_retention_filter\"},{\"id\":\"apA-z_EvQQKor9OP0UsPYA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":167,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738062531,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738062531},\"type\":\"apm_retention_filter\"},{\"id\":\"IBCJ9r14Su2NM8KAMxvRbA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":168,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738062530,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738062530},\"type\":\"apm_retention_filter\"},{\"id\":\"wQ1XTkOnRR-PwloDq30gIA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":169,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738062530,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738062530},\"type\":\"apm_retention_filter\"},{\"id\":\"wLP-6W1LTJydCNSbYOEUcA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":170,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737976154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737976154},\"type\":\"apm_retention_filter\"},{\"id\":\"djDWwN-STsmRQCuflmRDlg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":171,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737976154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737976154},\"type\":\"apm_retention_filter\"},{\"id\":\"neNyrWcSQ8-SkaTzx-SPlA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":172,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737976154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737976154},\"type\":\"apm_retention_filter\"},{\"id\":\"A-KcudqoRmeO9XRGn9SDhg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":173,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737976154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737976154},\"type\":\"apm_retention_filter\"},{\"id\":\"Lf0KGDsLS1KZvRizGKiP8w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":174,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737976153,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737976153},\"type\":\"apm_retention_filter\"},{\"id\":\"PZK84RS0RMOd6Qu1hn_2Ww\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":175,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737976153,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737976153},\"type\":\"apm_retention_filter\"},{\"id\":\"9oKo7TR7TleWo-e5SNVR2A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":176,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737371472,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737371472},\"type\":\"apm_retention_filter\"},{\"id\":\"ecD4s4TwSxa7yfmkXoYcyg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":177,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737371472,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737371472},\"type\":\"apm_retention_filter\"},{\"id\":\"LJOmBFgCTe2kGBolJHIBMw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":178,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737371471,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737371471},\"type\":\"apm_retention_filter\"},{\"id\":\"zlf-2Rw4RemlW3NwfJ3IpA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":179,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737371471,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737371471},\"type\":\"apm_retention_filter\"},{\"id\":\"3--KRQNbR9iQZDswiT_-cA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":180,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737371470,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737371470},\"type\":\"apm_retention_filter\"},{\"id\":\"qyj4rWYnS8uZW5QqnPRFMQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":181,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737371469,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737371469},\"type\":\"apm_retention_filter\"},{\"id\":\"r_PHy0KqSbisuVOtygHLwA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":182,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736766606,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736766606},\"type\":\"apm_retention_filter\"},{\"id\":\"rICAd6jOTUu6Sxr4VrliFw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":183,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736766605,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736766605},\"type\":\"apm_retention_filter\"},{\"id\":\"g2yl5z34T4SVGAPsqsYDJA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":184,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736766605,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736766605},\"type\":\"apm_retention_filter\"},{\"id\":\"nWzCWotcQrilkvGj0Ok-zw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":185,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736766605,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736766605},\"type\":\"apm_retention_filter\"},{\"id\":\"z0V2TooLSVW5MKkSBFYk_w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":186,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736766604,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736766604},\"type\":\"apm_retention_filter\"},{\"id\":\"PXeHqK1eSNKhN01x3vCOQg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":187,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736766603,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736766603},\"type\":\"apm_retention_filter\"},{\"id\":\"ofEP-caWSKOvPdXv2VaA1w\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":188,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1736763710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1736763709},\"type\":\"apm_retention_filter\"},{\"id\":\"cb67lmC-QDKDZVpaEG8SNg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":189,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736507402,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736507402},\"type\":\"apm_retention_filter\"},{\"id\":\"TRkbYXPPRO2WQmkz59MvjA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":190,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736507401,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736507401},\"type\":\"apm_retention_filter\"},{\"id\":\"9EBZnL4aQMa_Y-sJWW7d7g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":191,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736507401,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736507401},\"type\":\"apm_retention_filter\"},{\"id\":\"NnCTCk_oTLmmW520XUMkqg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":192,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736507401,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736507401},\"type\":\"apm_retention_filter\"},{\"id\":\"SStENFDGTbugRA1wOcb5Ng\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":193,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736507400,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736507400},\"type\":\"apm_retention_filter\"},{\"id\":\"Zs7RG2pMSHWqaIPOCThpGw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":194,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736507400,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736507400},\"type\":\"apm_retention_filter\"},{\"id\":\"jJoxDa4bTgiO0JfO6QW56w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":195,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736420959,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736420959},\"type\":\"apm_retention_filter\"},{\"id\":\"-QA7LFDwQjGyIcKAAILWlw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":196,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736420958,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736420958},\"type\":\"apm_retention_filter\"},{\"id\":\"_KAjhDOmQriU21xcJshCDw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":197,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736420958,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736420958},\"type\":\"apm_retention_filter\"},{\"id\":\"T33eHg63QPOnZn91ZNdrxw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":198,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736420958,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736420958},\"type\":\"apm_retention_filter\"},{\"id\":\"70kGtXKwTQO1EynH94-GTg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":199,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736420958,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736420958},\"type\":\"apm_retention_filter\"},{\"id\":\"zuQDBkvPR0io_JO9fsveBg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":200,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736420957,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736420957},\"type\":\"apm_retention_filter\"},{\"id\":\"_zAwyno6SGOoVQbddVglFg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":201,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1736389310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1736389309},\"type\":\"apm_retention_filter\"},{\"id\":\"cGJuz8D9RauPNHxjpSajdw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":202,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736334537,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736334537},\"type\":\"apm_retention_filter\"},{\"id\":\"Zwc7caDQSFGXk9UfhjHoEA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":203,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736334537,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736334537},\"type\":\"apm_retention_filter\"},{\"id\":\"FnipcYZJQiuURQ1yuOCQCA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":204,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736334536,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736334536},\"type\":\"apm_retention_filter\"},{\"id\":\"tK4s3WGhRL2QXuRXAPCSzw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":205,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736334536,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736334536},\"type\":\"apm_retention_filter\"},{\"id\":\"AHd8dgMUSaOEdwaxr4ET_g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":206,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736334536,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736334536},\"type\":\"apm_retention_filter\"},{\"id\":\"HgMDRpy5T6-5nc2dATyiLA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":207,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736334536,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736334536},\"type\":\"apm_retention_filter\"},{\"id\":\"0baqnUZRRNWnvZH_LbV12Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":208,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736248277,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736248277},\"type\":\"apm_retention_filter\"},{\"id\":\"wytIxhJ2QFOXAx0548Bl_Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":209,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736248276,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736248276},\"type\":\"apm_retention_filter\"},{\"id\":\"0rDREP5yTfuiImzam_NIMw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":210,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736248275,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736248275},\"type\":\"apm_retention_filter\"},{\"id\":\"If1sHTmoQYuZAIrY_3rMkg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":211,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736248275,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736248275},\"type\":\"apm_retention_filter\"},{\"id\":\"2adOUuTzRN-QDbeqNeL3PQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":212,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736248274,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736248274},\"type\":\"apm_retention_filter\"},{\"id\":\"s6IQoluwQtm8KYK1HpdtvA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":213,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736248273,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736248273},\"type\":\"apm_retention_filter\"},{\"id\":\"x7LVQe8gRaiBs6COQH38JA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":214,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735902517,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735902517},\"type\":\"apm_retention_filter\"},{\"id\":\"1OOCqvKCTy6a7AbtBmtn6Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":215,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735902516,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735902516},\"type\":\"apm_retention_filter\"},{\"id\":\"2MdZNa9mQg6Spp56uFceEQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":216,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735902516,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735902516},\"type\":\"apm_retention_filter\"},{\"id\":\"I6r10w-dQ-CjQy8wbNvLYw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":217,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735902516,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735902516},\"type\":\"apm_retention_filter\"},{\"id\":\"iFnvEmKiTqybhgHksTxwQA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":218,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735902516,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735902516},\"type\":\"apm_retention_filter\"},{\"id\":\"qrsCCQKKQx62uOZvbeU7Xw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":219,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735902515,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735902515},\"type\":\"apm_retention_filter\"},{\"id\":\"7L2NbPYIQCy7s3J3frG_uA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":220,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1735899710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1735899709},\"type\":\"apm_retention_filter\"},{\"id\":\"S4IIcYJlRQOIdolYzomeBA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":221,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1735842110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1735842109},\"type\":\"apm_retention_filter\"},{\"id\":\"fD8QmxL3TCurdhr93Ie_lg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":222,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1735770110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1735770110},\"type\":\"apm_retention_filter\"},{\"id\":\"Bn3rQCfnRBiFQyYIrGJxfw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":223,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1735683710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1735683709},\"type\":\"apm_retention_filter\"},{\"id\":\"TuwRBjIsSgijwxXb8IG0fw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":224,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1735669310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1735669309},\"type\":\"apm_retention_filter\"},{\"id\":\"6dt1jO74SW2x3LZjQjRd4w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":225,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735643482,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735643482},\"type\":\"apm_retention_filter\"},{\"id\":\"8_JXMOe9Qx6gziQuy8y2pg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":226,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735643482,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735643482},\"type\":\"apm_retention_filter\"},{\"id\":\"UDvMhyliShmd-wsCm5t-7g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":227,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735643481,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735643481},\"type\":\"apm_retention_filter\"},{\"id\":\"dR3icw3USk2R-S1RtkZxsQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":228,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735643481,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735643481},\"type\":\"apm_retention_filter\"},{\"id\":\"uArmNkZ6RoebGjtTgT-2Gg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":229,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735643481,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735643481},\"type\":\"apm_retention_filter\"},{\"id\":\"mhFV8xptQzuGJO96Rt341g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":230,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735643481,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735643481},\"type\":\"apm_retention_filter\"},{\"id\":\"QvBzPAeURFmZX9RuEjuYaw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":231,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735556990,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735556990},\"type\":\"apm_retention_filter\"},{\"id\":\"hqGj1fnqSH-_WWodbaFgBA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":232,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735556990,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735556990},\"type\":\"apm_retention_filter\"},{\"id\":\"ENm_SVW5QCaZ47XV_zzU8A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":233,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735556989,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735556989},\"type\":\"apm_retention_filter\"},{\"id\":\"6SO9lDjITxi3CbHZUVloaw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":234,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735556989,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735556989},\"type\":\"apm_retention_filter\"},{\"id\":\"8HUnDJ0kTleqiiHpdqnj8Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":235,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735556988,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735556988},\"type\":\"apm_retention_filter\"},{\"id\":\"PgInjCCKQjiOduxQDWX4ww\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":236,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735556988,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735556988},\"type\":\"apm_retention_filter\"},{\"id\":\"5muxbLJMSlKrCgrfdID22Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":237,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735297710,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735297710},\"type\":\"apm_retention_filter\"},{\"id\":\"qDQGe8uiQyyHt19Q9eh_6A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":238,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735297710,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735297710},\"type\":\"apm_retention_filter\"},{\"id\":\"4AgYmX1vTyyouB0KiegK1A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":239,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735297710,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735297710},\"type\":\"apm_retention_filter\"},{\"id\":\"fL6O-U0iRH2Mjlje1sFfxA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":240,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735297710,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735297710},\"type\":\"apm_retention_filter\"},{\"id\":\"XEYubcfNSV2Pbho3CGUbPw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":241,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735297710,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735297710},\"type\":\"apm_retention_filter\"},{\"id\":\"8GHsRfOZTl2_QmgYdKMgNw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":242,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735297709,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735297709},\"type\":\"apm_retention_filter\"},{\"id\":\"ZMniwzPrQOip27VQjfcBGQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":243,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735124970,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735124970},\"type\":\"apm_retention_filter\"},{\"id\":\"qewgL0RVRQqfnfyc4sc17w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":244,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735124970,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735124970},\"type\":\"apm_retention_filter\"},{\"id\":\"XlzwnoG0Si67ggJj5KJlfg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":245,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735124969,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735124969},\"type\":\"apm_retention_filter\"},{\"id\":\"aD487jxiS0SFRs8GjxVt6A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":246,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735124969,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735124969},\"type\":\"apm_retention_filter\"},{\"id\":\"0tzXv47gQSqk3TwfSdHVsA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":247,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735124969,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735124969},\"type\":\"apm_retention_filter\"},{\"id\":\"PSB6EmfQR_arZXxkW8ie9A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":248,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735124968,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735124968},\"type\":\"apm_retention_filter\"},{\"id\":\"187BlqflRtiw61sJ9Neu2Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":249,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734952123,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734952123},\"type\":\"apm_retention_filter\"},{\"id\":\"B8kHCD7bQ1S0c5Sb_TW2iw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":250,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734952123,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734952123},\"type\":\"apm_retention_filter\"},{\"id\":\"cSVHaVyHT46LhWImy3YXVw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":251,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734952123,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734952123},\"type\":\"apm_retention_filter\"},{\"id\":\"q5bbnyZVTxm4RqSHc0NGdA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":252,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734952122,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734952122},\"type\":\"apm_retention_filter\"},{\"id\":\"vjhs-14bRn6pTQ1zyhNBWg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":253,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734952122,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734952122},\"type\":\"apm_retention_filter\"},{\"id\":\"E4MGrUuTQ7KS-g_RbQmUPA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":254,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734952122,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734952122},\"type\":\"apm_retention_filter\"},{\"id\":\"Pn6wUnZQRqK9X8-HDQSFdw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":255,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734949310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734949309},\"type\":\"apm_retention_filter\"},{\"id\":\"Y23GYCw_Q3KD0g3X5PJYSA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":256,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734618110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734618110},\"type\":\"apm_retention_filter\"},{\"id\":\"OqxAQIxDSfKoLZZcvueCRg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":257,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734373310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734373309},\"type\":\"apm_retention_filter\"},{\"id\":\"j-xcn6NoSSO8Axded1Uwaw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":258,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734243710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734243709},\"type\":\"apm_retention_filter\"},{\"id\":\"p_uEfIflQBqtkRlhgfeBQw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":259,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734229310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734229309},\"type\":\"apm_retention_filter\"},{\"id\":\"ujvUwT8HRXCOtY70VSrK1A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":260,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734088163,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734088163},\"type\":\"apm_retention_filter\"},{\"id\":\"Ur1S94TQQI--1s9Vszs4vA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":261,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734088162,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734088162},\"type\":\"apm_retention_filter\"},{\"id\":\"rlZc1g63QoadAhrQa9dP7Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":262,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734088162,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734088162},\"type\":\"apm_retention_filter\"},{\"id\":\"_7x8vO_4R6GOgqpyj6jrjA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":263,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734088162,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734088162},\"type\":\"apm_retention_filter\"},{\"id\":\"o8Qn64H7Tl-7-_LqMl1czQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":264,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734088162,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734088162},\"type\":\"apm_retention_filter\"},{\"id\":\"kDiFuT1oRa-x3bwV3wIyyA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":265,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734088161,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734088161},\"type\":\"apm_retention_filter\"},{\"id\":\"7aDyTJzDSdalouBYvOS_Qw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":266,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734001878,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734001878},\"type\":\"apm_retention_filter\"},{\"id\":\"_0tZ3Xh7QYaymJTkiwhVqw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":267,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734001878,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734001878},\"type\":\"apm_retention_filter\"},{\"id\":\"6Syt_W2DSAir--lmElyj2A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":268,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734001877,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734001877},\"type\":\"apm_retention_filter\"},{\"id\":\"KwAON2o6TBiD6afIbLTrTQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":269,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734001877,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734001877},\"type\":\"apm_retention_filter\"},{\"id\":\"4H_gaB6fRrOH7SBdaidLkw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":270,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734001876,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734001876},\"type\":\"apm_retention_filter\"},{\"id\":\"dCxOHBh4QzmfiW1ae-3yhw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":271,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734001875,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734001875},\"type\":\"apm_retention_filter\"},{\"id\":\"XnrUbNLfQK2f18dIl80mpw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":272,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1733941310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1733941309},\"type\":\"apm_retention_filter\"},{\"id\":\"S4lqS7Q7QUe2mowK3VLhhg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":273,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1733926910,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1733926909},\"type\":\"apm_retention_filter\"},{\"id\":\"6kqOhOPWTXyOFJjQfgXtvg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":274,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733742529,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733742529},\"type\":\"apm_retention_filter\"},{\"id\":\"0o8rUya_QMaUwKK61nYI9A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":275,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733742529,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733742529},\"type\":\"apm_retention_filter\"},{\"id\":\"cVY0zsSTS867lf2zuvhFzg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":276,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733742529,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733742529},\"type\":\"apm_retention_filter\"},{\"id\":\"zDFQHfvITcKGGSf5F2TO5w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":277,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733742529,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733742529},\"type\":\"apm_retention_filter\"},{\"id\":\"XlOwKw5GQLSWxy9TNH4dDg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":278,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733742528,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733742528},\"type\":\"apm_retention_filter\"},{\"id\":\"IK-F-Om4TX2WwIJ1WCbU0Q\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":279,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733742528,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733742528},\"type\":\"apm_retention_filter\"},{\"id\":\"scnocbhKTq6fH2eUCzJdQA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":280,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1733710910,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1733710909},\"type\":\"apm_retention_filter\"},{\"id\":\"pLkfyl8_TCGBm3Mndr1x6Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":281,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733483463,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733483463},\"type\":\"apm_retention_filter\"},{\"id\":\"by1tVEX_S-iBjg3Rb8o_Fw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":282,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733483462,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733483462},\"type\":\"apm_retention_filter\"},{\"id\":\"wiO8VfbzQPiI2So8IAFKBQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":283,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733483462,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733483462},\"type\":\"apm_retention_filter\"},{\"id\":\"lURqJNx2Q9GDUQzhJi-NvQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":284,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733483461,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733483461},\"type\":\"apm_retention_filter\"},{\"id\":\"Y2AJzy0EQI23oQsmxn8qNQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":285,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733483461,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733483461},\"type\":\"apm_retention_filter\"},{\"id\":\"qagCIYPuRlOjeEtLXlDwdw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":286,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733483460,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733483460},\"type\":\"apm_retention_filter\"},{\"id\":\"IB5Om4iARFaujUX-sUpC3Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":287,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733310686,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733310686},\"type\":\"apm_retention_filter\"},{\"id\":\"HBAQ940UQei2ROFEXVxSnQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":288,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733310685,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733310685},\"type\":\"apm_retention_filter\"},{\"id\":\"9GbwfY5vSRCc_fnPKcsP8w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":289,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733310685,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733310685},\"type\":\"apm_retention_filter\"},{\"id\":\"Q5w9WwhiQBaBjT-xRl3mmQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":290,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733310684,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733310684},\"type\":\"apm_retention_filter\"},{\"id\":\"IB9zruvVQxaCnQcPLbj_pg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":291,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733310684,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733310684},\"type\":\"apm_retention_filter\"},{\"id\":\"pMKYfF5uRGC35lq6dKrf8g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":292,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733310683,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733310683},\"type\":\"apm_retention_filter\"},{\"id\":\"Mr5DCVKPRNWOQxBixfNMOA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":293,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733224118,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733224118},\"type\":\"apm_retention_filter\"},{\"id\":\"8SieNcmbR2i47qKilXs1Ew\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":294,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733224118,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733224118},\"type\":\"apm_retention_filter\"},{\"id\":\"BkVm0ukaTP6rOlTyqK5fIg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":295,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733224118,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733224118},\"type\":\"apm_retention_filter\"},{\"id\":\"HEcJrXe5RpuAxDzEU6GMCw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":296,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733224118,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733224118},\"type\":\"apm_retention_filter\"},{\"id\":\"T-c3WKulSZSIk-MSTS2pYg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":297,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733224117,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733224117},\"type\":\"apm_retention_filter\"},{\"id\":\"r1Tzt8fUQaCVxvqd_iNnmA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":298,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733224117,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733224117},\"type\":\"apm_retention_filter\"},{\"id\":\"4y3-T0QlQ_2Oj_5u39aBjw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":299,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733137879,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733137879},\"type\":\"apm_retention_filter\"},{\"id\":\"EkkXQRd_TiKL-cw6Zmn_ew\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":300,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733137878,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733137878},\"type\":\"apm_retention_filter\"},{\"id\":\"AqaCghhLRj2iy0L-lZASNw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":301,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733137878,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733137878},\"type\":\"apm_retention_filter\"},{\"id\":\"Stnpg9PgTbKqtOa3QzyHhQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":302,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733137877,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733137877},\"type\":\"apm_retention_filter\"},{\"id\":\"UpKC3ZE2TrySn-rrYTeWxw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":303,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733137877,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733137877},\"type\":\"apm_retention_filter\"},{\"id\":\"AyKTzeq3Q4ibxIhPnL3FWg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":304,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733137876,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733137876},\"type\":\"apm_retention_filter\"},{\"id\":\"9IMIDrhZQDudcvXP_wgVqQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":305,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1733120510,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1733120509},\"type\":\"apm_retention_filter\"},{\"id\":\"oolnL-FPQIKMRN6I_YW-lQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":306,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1733005310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1733005309},\"type\":\"apm_retention_filter\"},{\"id\":\"TI-hZQrbS9e03hz97NBj9w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":307,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732878569,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732878569},\"type\":\"apm_retention_filter\"},{\"id\":\"_gipCsKXShWviFS6o4xzPA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":308,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732878568,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732878568},\"type\":\"apm_retention_filter\"},{\"id\":\"DpSm3Z7kRbeFHCiqbQ8cYw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":309,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732878568,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732878568},\"type\":\"apm_retention_filter\"},{\"id\":\"3gPVuZ4sRaWH951_jlF9Kg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":310,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732878568,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732878568},\"type\":\"apm_retention_filter\"},{\"id\":\"pTcbxgzVSFKQEyMJAlNOLA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":311,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732878567,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732878567},\"type\":\"apm_retention_filter\"},{\"id\":\"dsiB6cYrSNiJw7l8RMtsRA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":312,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732878567,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732878567},\"type\":\"apm_retention_filter\"},{\"id\":\"3a1sRQobT7GWteAM9eR5Tw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":313,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732792155,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732792155},\"type\":\"apm_retention_filter\"},{\"id\":\"0P2IYiKEQN-NWSaAQMYxFA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":314,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732792155,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732792155},\"type\":\"apm_retention_filter\"},{\"id\":\"9vnQHtDqSZ6_dVnVSXFxpw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":315,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732792154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732792154},\"type\":\"apm_retention_filter\"},{\"id\":\"9r83dCPSS12w6-shW9U1sg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":316,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732792154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732792154},\"type\":\"apm_retention_filter\"},{\"id\":\"3BM6kygLRreGYMJFp9z8nQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":317,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732792154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732792154},\"type\":\"apm_retention_filter\"},{\"id\":\"hu5OEwDwSgitKOFPggfqfA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":318,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732792153,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732792153},\"type\":\"apm_retention_filter\"},{\"id\":\"dHDaS7uuQ1SRUMtFLYB4_g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":319,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732705742,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732705742},\"type\":\"apm_retention_filter\"},{\"id\":\"8wWpw_aORYqXU0Lc-Q1s8w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":320,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732705742,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732705742},\"type\":\"apm_retention_filter\"},{\"id\":\"pDYIfCHUTnC1Q-HqlaWNXA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":321,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732705741,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732705741},\"type\":\"apm_retention_filter\"},{\"id\":\"IhkEjUmiRom5EiOgWxJ0XQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":322,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732705741,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732705741},\"type\":\"apm_retention_filter\"},{\"id\":\"Dl7cOpsqRM-4JFzE3XG04A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":323,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732705741,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732705741},\"type\":\"apm_retention_filter\"},{\"id\":\"H7T-w4sYTOWzLWeH-CRnvw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":324,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732705741,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732705741},\"type\":\"apm_retention_filter\"},{\"id\":\"SXjVy7oNTcqDYt-_TyLIxw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":325,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732273878,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732273878},\"type\":\"apm_retention_filter\"},{\"id\":\"9moTc1g4SJKiuaJ84uS9ew\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":326,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732273877,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732273877},\"type\":\"apm_retention_filter\"},{\"id\":\"Ev_TVjUmQ8i1v58xSdZwCA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":327,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732273876,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732273876},\"type\":\"apm_retention_filter\"},{\"id\":\"GFk9xyeMQYWxv8tB3dpSjw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":328,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732273876,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732273876},\"type\":\"apm_retention_filter\"},{\"id\":\"F7Ku7AnlR0enVRnhz2D9kA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":329,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732273875,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732273875},\"type\":\"apm_retention_filter\"},{\"id\":\"VSLvZeTCS0uvAV12-kc2Eg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":330,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732273874,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732273874},\"type\":\"apm_retention_filter\"},{\"id\":\"AWc2T3pmRhWezow71YgJrA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":331,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732187376,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732187376},\"type\":\"apm_retention_filter\"},{\"id\":\"ef064ADaRfGCZTaex0TMIg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":332,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732187376,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732187376},\"type\":\"apm_retention_filter\"},{\"id\":\"SSDnrwMATtyye1Zj89zhAA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":333,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732187375,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732187375},\"type\":\"apm_retention_filter\"},{\"id\":\"Atopnu6jRiKeAlWLxz-3sQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":334,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732187375,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732187375},\"type\":\"apm_retention_filter\"},{\"id\":\"7SH73eKKTOiH-5QJupNBVw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":335,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732187375,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732187375},\"type\":\"apm_retention_filter\"},{\"id\":\"o8GeG4NeQYa8Ghcih5aSUA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":336,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732187374,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732187374},\"type\":\"apm_retention_filter\"},{\"id\":\"rKcy0BZcStG7i1vGstaZ1Q\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":337,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1732155710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1732155709},\"type\":\"apm_retention_filter\"},{\"id\":\"CW1oqD9WQBy5ZFe4ia6wFA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":338,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732100924,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732100924},\"type\":\"apm_retention_filter\"},{\"id\":\"obQ_3GnGRkGssjAK-f2v5A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":339,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732100924,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732100924},\"type\":\"apm_retention_filter\"},{\"id\":\"-2XJpil6SOuw0zQGB0OzAA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":340,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732100924,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732100924},\"type\":\"apm_retention_filter\"},{\"id\":\"LzML3rVyQ3KKk-5aVfXnCw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":341,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732100924,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732100924},\"type\":\"apm_retention_filter\"},{\"id\":\"qEPeKTSfRuKsePb4EXQUww\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":342,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732100923,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732100923},\"type\":\"apm_retention_filter\"},{\"id\":\"Src5n0TqS_yUTn96x6PNWA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":343,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732100923,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732100923},\"type\":\"apm_retention_filter\"},{\"id\":\"eP8Ti3jNQd2t08XyH2wQbA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":344,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732014650,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732014650},\"type\":\"apm_retention_filter\"},{\"id\":\"juwWfhvlSgOzAeyDqKWejw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":345,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732014649,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732014649},\"type\":\"apm_retention_filter\"},{\"id\":\"E8OZSJ3BT9-9si8gUvRtyA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":346,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732014649,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732014649},\"type\":\"apm_retention_filter\"},{\"id\":\"J6jJcUQeREiG50X-KDl9mw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":347,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732014649,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732014649},\"type\":\"apm_retention_filter\"},{\"id\":\"y4FVygLpQD-ZhZHE33p5mA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":348,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732014648,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732014648},\"type\":\"apm_retention_filter\"},{\"id\":\"YyuTEHlyR_2eRdz_ywQXyQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":349,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732014647,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732014647},\"type\":\"apm_retention_filter\"},{\"id\":\"K3qO2az1QRelak-g1PBPIg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":350,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1731709310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1731709310},\"type\":\"apm_retention_filter\"},{\"id\":\"FDnGITgPQn68S3e6nU1Z4Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":351,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731668917,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731668917},\"type\":\"apm_retention_filter\"},{\"id\":\"D2OU8iqaQWSTRGN2pQTpMg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":352,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731668917,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731668917},\"type\":\"apm_retention_filter\"},{\"id\":\"nJ8Odex7Qya2aZ0Xk9nKew\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":353,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731668917,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731668917},\"type\":\"apm_retention_filter\"},{\"id\":\"ILg9dUjCRlmuKWPX4hueRQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":354,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731668917,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731668917},\"type\":\"apm_retention_filter\"},{\"id\":\"bBxJ8fqbTa-bnMgQibG2yQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":355,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731668916,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731668916},\"type\":\"apm_retention_filter\"},{\"id\":\"JvMVOL2JR36seHjMPfYndg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":356,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731668916,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731668916},\"type\":\"apm_retention_filter\"},{\"id\":\"DEDH974ORpSqXZousrr-_g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":357,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731582557,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731582557},\"type\":\"apm_retention_filter\"},{\"id\":\"T3QDhAvWTLSQa4YSJqWwrg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":358,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731582556,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731582556},\"type\":\"apm_retention_filter\"},{\"id\":\"epqNhPjdQ1SUUbyjHyWOXg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":359,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731582556,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731582556},\"type\":\"apm_retention_filter\"},{\"id\":\"XdBn9sWbRlqwR4uUZvi6_g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":360,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731582556,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731582556},\"type\":\"apm_retention_filter\"},{\"id\":\"AhqdNcV6S1CGhVfaAxPevQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":361,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731582555,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731582555},\"type\":\"apm_retention_filter\"},{\"id\":\"kTfWg46JR0-yxz6_UHFktA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":362,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731582555,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731582555},\"type\":\"apm_retention_filter\"},{\"id\":\"UZYs0YdLTyGl9tz3X6I_zQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":363,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731496132,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731496132},\"type\":\"apm_retention_filter\"},{\"id\":\"vxAy-ZKBQwWWNtTT8B8jYA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":364,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731496132,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731496132},\"type\":\"apm_retention_filter\"},{\"id\":\"BdCvaFblR9K3Vjbq2ZeIYw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":365,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731496132,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731496132},\"type\":\"apm_retention_filter\"},{\"id\":\"8xV1EX2ARIaBEhlj8pYx9w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":366,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731496132,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731496132},\"type\":\"apm_retention_filter\"},{\"id\":\"yzqwzfHxQae0XnkqVV8InA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":367,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731496132,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731496132},\"type\":\"apm_retention_filter\"},{\"id\":\"zOeowOzTRfO5HHB-1vXhbw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":368,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731496131,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731496131},\"type\":\"apm_retention_filter\"},{\"id\":\"Qe55pgqqTI6tDrA1LSnljQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":369,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731064113,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731064113},\"type\":\"apm_retention_filter\"},{\"id\":\"5ejwUvLyTCWOMiPREhyHHw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":370,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731064113,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731064113},\"type\":\"apm_retention_filter\"},{\"id\":\"1bL_X5oFTTu7a07Lb2PVtQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":371,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731064113,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731064113},\"type\":\"apm_retention_filter\"},{\"id\":\"ElEUMpMRRK6YR8xkMTXD_Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":372,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731064112,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731064112},\"type\":\"apm_retention_filter\"},{\"id\":\"WFR_djUOTAqMpXq43bcAmQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":373,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731064112,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731064112},\"type\":\"apm_retention_filter\"},{\"id\":\"R-6V0arlQmq2ib7k9rXeEQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":374,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731064112,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731064112},\"type\":\"apm_retention_filter\"},{\"id\":\"6bLOyAaVT8iobWAwOTJSlA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":375,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730977864,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730977864},\"type\":\"apm_retention_filter\"},{\"id\":\"Bi_UBQ8nRWSjpn11gysleA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":376,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730977863,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730977863},\"type\":\"apm_retention_filter\"},{\"id\":\"2TSMBQffSLaBoYKk4kpt4w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":377,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730977862,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730977862},\"type\":\"apm_retention_filter\"},{\"id\":\"c_4O_084Rt-ZKS1bzQL7tA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":378,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730977862,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730977862},\"type\":\"apm_retention_filter\"},{\"id\":\"lDfIDsaMSkeedQhBZQShng\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":379,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730977861,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730977861},\"type\":\"apm_retention_filter\"},{\"id\":\"J-xLLZoOTAWOVIZPCTzTWQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":380,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730977861,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730977861},\"type\":\"apm_retention_filter\"},{\"id\":\"cMtAt7jwRAiLNmR9Maxa1A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":381,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730833982,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730833982},\"type\":\"apm_retention_filter\"},{\"id\":\"TfWJgJd9QzGoH4H6mCi5KA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":382,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730833981,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730833981},\"type\":\"apm_retention_filter\"},{\"id\":\"VjvxLgCiTu2FB1dU2NkMag\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":383,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730833981,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730833981},\"type\":\"apm_retention_filter\"},{\"id\":\"thzimT--Rmq_pRZF5WzfQg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":384,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730833980,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730833980},\"type\":\"apm_retention_filter\"},{\"id\":\"uAmW1UIRTSyOJ8QIGDRC3w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":385,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730833979,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730833979},\"type\":\"apm_retention_filter\"},{\"id\":\"1VcuOr5ESAim5yyniR080g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":386,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730833979,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730833979},\"type\":\"apm_retention_filter\"},{\"id\":\"cV6oNjFZSJyIknvunGEpsA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":387,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730830957,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730830957},\"type\":\"apm_retention_filter\"},{\"id\":\"tKi6s4__Rk2P819vs3VDsw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":388,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730830956,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730830956},\"type\":\"apm_retention_filter\"},{\"id\":\"38g1__25RL-Q29uqjVnRog\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":389,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730830955,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730830955},\"type\":\"apm_retention_filter\"},{\"id\":\"q_zy9W2tTgK-Vv5EXsetRw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":390,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730830955,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730830955},\"type\":\"apm_retention_filter\"},{\"id\":\"0iRuludIQT-QpcV5D64ECg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":391,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730830954,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730830954},\"type\":\"apm_retention_filter\"},{\"id\":\"fiZXu1-cT5aBsX_9szSI4g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":392,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730830953,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730830953},\"type\":\"apm_retention_filter\"},{\"id\":\"AdK_vTHgQYGRo0Ls1ZhdpQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":393,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730718576,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730718576},\"type\":\"apm_retention_filter\"},{\"id\":\"LUfESC3STB64Nodig5OwZw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":394,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730718576,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730718576},\"type\":\"apm_retention_filter\"},{\"id\":\"zxj18wFiRwKDujXuRqBODA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":395,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730718576,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730718576},\"type\":\"apm_retention_filter\"},{\"id\":\"zMRXB4DUSN-cP1t2b24VMQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":396,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730718575,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730718575},\"type\":\"apm_retention_filter\"},{\"id\":\"Uu-OXt7pTuyLjh28KmQgxg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":397,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730718575,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730718575},\"type\":\"apm_retention_filter\"},{\"id\":\"r-9MCmKDQFu7yoMeegZknQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":398,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730718575,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730718575},\"type\":\"apm_retention_filter\"},{\"id\":\"PkAT2sI8TN65FAW5SOJuKA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":399,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730286558,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730286558},\"type\":\"apm_retention_filter\"},{\"id\":\"cNrS0IDPROCil51Owfgp9Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":400,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730286558,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730286558},\"type\":\"apm_retention_filter\"},{\"id\":\"mnFI7cdMTz6TfEEL9_leyw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":401,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730286557,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730286557},\"type\":\"apm_retention_filter\"},{\"id\":\"ZehLHXZzTj-33uxQvJsEBA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":402,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730286557,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730286557},\"type\":\"apm_retention_filter\"},{\"id\":\"Io7AKoVlS3WJzOyzu1c0YA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":403,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730286557,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730286557},\"type\":\"apm_retention_filter\"},{\"id\":\"KWE_uTdwQjqMvUFwDOBAFg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":404,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730286556,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730286556},\"type\":\"apm_retention_filter\"},{\"id\":\"RDTXHYlJSKOHdBGm_GXh7Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":405,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730200122,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730200122},\"type\":\"apm_retention_filter\"},{\"id\":\"QpFPr4nES_aa_3F33t7aww\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":406,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730200122,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730200122},\"type\":\"apm_retention_filter\"},{\"id\":\"DkflQH-NQ7CbgUa-3sSySw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":407,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730200121,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730200121},\"type\":\"apm_retention_filter\"},{\"id\":\"SJwH_gHcSfqabVUzREjx_w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":408,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730200121,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730200121},\"type\":\"apm_retention_filter\"},{\"id\":\"fXB-HNnlTN2wWpO5zvUhXQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":409,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730200121,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730200121},\"type\":\"apm_retention_filter\"},{\"id\":\"0qcN1oT2SmSwNuBAQOXGcA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":410,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730200121,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730200121},\"type\":\"apm_retention_filter\"},{\"id\":\"Uell2i5eR0K7-hm_8cYzbA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":411,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730113765,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730113765},\"type\":\"apm_retention_filter\"},{\"id\":\"l-UZkjwFRXiNPtrjldNp1Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":412,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730113765,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730113765},\"type\":\"apm_retention_filter\"},{\"id\":\"QxZd9AP1QO-qayza9lMxlg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":413,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730113765,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730113765},\"type\":\"apm_retention_filter\"},{\"id\":\"cQceohAQSrS_6vlCaFRAuA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":414,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730113764,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730113764},\"type\":\"apm_retention_filter\"},{\"id\":\"9bjixebqR2SLRfgqC0V1jw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":415,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730113764,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730113764},\"type\":\"apm_retention_filter\"},{\"id\":\"VeBhNbD-TIuJMqADqSE1oA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":416,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730113764,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730113764},\"type\":\"apm_retention_filter\"},{\"id\":\"P0WxSLpVSvydy2gVr9NbTg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":417,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1729909310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1729909309},\"type\":\"apm_retention_filter\"},{\"id\":\"O6SfAMUyTQGsZlm7T0uv6Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":418,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729249838,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729249838},\"type\":\"apm_retention_filter\"},{\"id\":\"RJeya7ooTYObS0F4rNKp4w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":419,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729249838,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729249838},\"type\":\"apm_retention_filter\"},{\"id\":\"aHgGB0K5RNOHhuXEA5B0sw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":420,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729249837,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729249837},\"type\":\"apm_retention_filter\"},{\"id\":\"i22No2LJQkakqV0SWN5dFg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":421,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729249837,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729249837},\"type\":\"apm_retention_filter\"},{\"id\":\"5Y1l4dc0TquEikmurLYImA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":422,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729249837,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729249837},\"type\":\"apm_retention_filter\"},{\"id\":\"oWZZyH7cTWaqw4YgQXNaqQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":423,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729249836,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729249836},\"type\":\"apm_retention_filter\"},{\"id\":\"SQrHWB0pTH29nWE9bDtqqA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":424,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728040193,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728040193},\"type\":\"apm_retention_filter\"},{\"id\":\"hRQ5-wJSTuWHfEl6cnmrkQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":425,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728040193,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728040193},\"type\":\"apm_retention_filter\"},{\"id\":\"CiGrINzNSTaUM6Ss2YD5CQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":426,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728040193,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728040193},\"type\":\"apm_retention_filter\"},{\"id\":\"_NQYTSVpT32rC8oTT_hMzQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":427,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728040193,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728040193},\"type\":\"apm_retention_filter\"},{\"id\":\"mtawbPm7S0mVvkF-PoqACQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":428,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728040192,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728040192},\"type\":\"apm_retention_filter\"},{\"id\":\"7fYAQjyrQviC2s9Iq9igyA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":429,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728040192,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728040192},\"type\":\"apm_retention_filter\"},{\"id\":\"3JzE3bC7QiapORGke1Cong\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":430,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727953925,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727953925},\"type\":\"apm_retention_filter\"},{\"id\":\"_JqoPWamQYWyN_7WPRB21g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":431,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727953925,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727953925},\"type\":\"apm_retention_filter\"},{\"id\":\"17ggGod5QROZ_hQr9wEEjQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":432,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727953924,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727953924},\"type\":\"apm_retention_filter\"},{\"id\":\"CooR3IyBTo6a3slBObpuoQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":433,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727953924,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727953924},\"type\":\"apm_retention_filter\"},{\"id\":\"_-wA5SWgTLikAS8kMY3sAg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":434,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727953923,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727953923},\"type\":\"apm_retention_filter\"},{\"id\":\"DHIkdGXDQNSriwB5c4X03g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":435,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727953922,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727953922},\"type\":\"apm_retention_filter\"},{\"id\":\"cc7bWuThQoCh3SNXZHgS4A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":436,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727780978,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727780978},\"type\":\"apm_retention_filter\"},{\"id\":\"u5CNyPv7SImU7G85Y3l9Ew\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":437,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727780978,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727780978},\"type\":\"apm_retention_filter\"},{\"id\":\"3MfJ5Q9QS7qy-rJmNdY0xA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":438,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727780978,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727780978},\"type\":\"apm_retention_filter\"},{\"id\":\"qYF_YcaNQUuTxsFV--C_rQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":439,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727780977,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727780977},\"type\":\"apm_retention_filter\"},{\"id\":\"vBDJaoM1TLyBMh_MhnyCyw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":440,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727780977,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727780977},\"type\":\"apm_retention_filter\"},{\"id\":\"21V7M-AzS6GYPSio1AAFrA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":441,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727780977,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727780977},\"type\":\"apm_retention_filter\"},{\"id\":\"C3NVrZ1LSK2oTdKWFtMFFQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":442,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727694565,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727694565},\"type\":\"apm_retention_filter\"},{\"id\":\"_AczoqwJQ7-vUR7KCv7R6g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":443,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727694564,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727694564},\"type\":\"apm_retention_filter\"},{\"id\":\"ApUo7_kXSAqKdPBu72341g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":444,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727694564,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727694564},\"type\":\"apm_retention_filter\"},{\"id\":\"bMxsfvKDSL-bJIHVHOuUrg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":445,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727694564,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727694564},\"type\":\"apm_retention_filter\"},{\"id\":\"pKv0qS66QsyBGEDPC22XNw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":446,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727694564,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727694564},\"type\":\"apm_retention_filter\"},{\"id\":\"o9oQEANqR6ykZuFi6NOL0Q\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":447,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727694564,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727694564},\"type\":\"apm_retention_filter\"},{\"id\":\"pfqyUdwnQ9SRXJLkCHyYmg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":448,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727435508,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727435508},\"type\":\"apm_retention_filter\"},{\"id\":\"DpUW7VghQgGWp_Ubx33jlQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":449,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727435508,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727435508},\"type\":\"apm_retention_filter\"},{\"id\":\"fbNw2CI9T0WTJ5nuXggTuw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":450,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727435507,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727435507},\"type\":\"apm_retention_filter\"},{\"id\":\"TCIP2FXfTQi_hnoTsmp6BQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":451,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727435507,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727435507},\"type\":\"apm_retention_filter\"},{\"id\":\"PVaa-wj4Se2XyEkv9opYbg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":452,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727435506,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727435506},\"type\":\"apm_retention_filter\"},{\"id\":\"M-iMVqxJQiejxyXF_97Zhw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":453,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727435505,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727435505},\"type\":\"apm_retention_filter\"},{\"id\":\"xsWDQVMtTFuffO-Ljh_vRA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":454,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727349012,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727349012},\"type\":\"apm_retention_filter\"},{\"id\":\"Xq9ye-21TcK8PYpquA95iA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":455,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727349012,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727349012},\"type\":\"apm_retention_filter\"},{\"id\":\"4K6F0OYmRhKkJm8n4CxStw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":456,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727349012,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727349012},\"type\":\"apm_retention_filter\"},{\"id\":\"EYAazoWGS1Oe2NMOzabs4g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":457,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727349012,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727349012},\"type\":\"apm_retention_filter\"},{\"id\":\"Qbgd3R4BSjSNA0uWM3JH-Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":458,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727349011,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727349011},\"type\":\"apm_retention_filter\"},{\"id\":\"mDoJK_0WSpCoqbPDTTXB9A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":459,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727349011,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727349011},\"type\":\"apm_retention_filter\"},{\"id\":\"cHys58sCS2yEsNZz4X_XUA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":460,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727262578,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727262578},\"type\":\"apm_retention_filter\"},{\"id\":\"Uy_6Z9QqRpqbuAu6WZbrng\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":461,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727262578,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727262578},\"type\":\"apm_retention_filter\"},{\"id\":\"F_FxBoyUQb-zfbv5Ms5oSg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":462,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727262577,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727262577},\"type\":\"apm_retention_filter\"},{\"id\":\"Wxxkt5OXRn29HWWCcGPVPg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":463,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727262577,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727262577},\"type\":\"apm_retention_filter\"},{\"id\":\"gIjA3dKQTWG_zqsqpE5Dyw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":464,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727262577,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727262577},\"type\":\"apm_retention_filter\"},{\"id\":\"ebv37r4QS12S7M0pQl5X2w\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":465,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727262577,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727262577},\"type\":\"apm_retention_filter\"},{\"id\":\"t7ktaZ5FTwytMRthr-dq3A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":466,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727176157,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727176157},\"type\":\"apm_retention_filter\"},{\"id\":\"GV2H-7I7TDGx2-wVqZA1dw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":467,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727176157,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727176157},\"type\":\"apm_retention_filter\"},{\"id\":\"vSejha4QRe6t74syySZrCw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":468,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727176157,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727176157},\"type\":\"apm_retention_filter\"},{\"id\":\"67ZTDkvITh2B1PjAJ_g5Gg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":469,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727176156,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727176156},\"type\":\"apm_retention_filter\"},{\"id\":\"Q8sPlPiLQ-mdOSVeRseyIQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":470,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727176156,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727176156},\"type\":\"apm_retention_filter\"},{\"id\":\"4e4vaGT3Rxa3hxYI9pccFQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":471,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727176156,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727176156},\"type\":\"apm_retention_filter\"},{\"id\":\"NZ4GeH_lSuqRgw6kHS6AjA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":472,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727089852,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727089852},\"type\":\"apm_retention_filter\"},{\"id\":\"9xKBkPXoQN-KCWowe6k9WQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":473,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727089851,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727089851},\"type\":\"apm_retention_filter\"},{\"id\":\"VPUpTNd0QkuV2nFukMuMtQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":474,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727089851,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727089851},\"type\":\"apm_retention_filter\"},{\"id\":\"n7tb-eD7SvaLBARR35zemw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":475,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727089850,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727089850},\"type\":\"apm_retention_filter\"},{\"id\":\"XJFcFiwPSSO9DCsexCB_oA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":476,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727089849,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727089849},\"type\":\"apm_retention_filter\"},{\"id\":\"5A1Z-J1xS0CqZpQE8WsPaA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":477,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727089849,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727089849},\"type\":\"apm_retention_filter\"},{\"id\":\"3zSg9YxQRvyj8F4QLp-ryA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":478,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726225840,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726225840},\"type\":\"apm_retention_filter\"},{\"id\":\"X93B09yDQx-vVqxvGNzMMw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":479,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726225840,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726225840},\"type\":\"apm_retention_filter\"},{\"id\":\"1SasNZjVTpGTawn-38WgGg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":480,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726225840,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726225840},\"type\":\"apm_retention_filter\"},{\"id\":\"rbwlG_0TRBCrf-VgDrgJEw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":481,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726225839,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726225839},\"type\":\"apm_retention_filter\"},{\"id\":\"i7zfR7I6RrG1P9OmqBWQLw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":482,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726225839,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726225839},\"type\":\"apm_retention_filter\"},{\"id\":\"YXP8Y2JKSUCpJ6OXD6sHHw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":483,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726225839,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726225839},\"type\":\"apm_retention_filter\"},{\"id\":\"sz-fhWy4Tuutu99YOmdTIw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":484,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726139500,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726139500},\"type\":\"apm_retention_filter\"},{\"id\":\"JP1ijRbbRv6oIAvO7msJ7w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":485,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726139499,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726139499},\"type\":\"apm_retention_filter\"},{\"id\":\"_QV0CHe6SleiqEoz5nQ88g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":486,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726139499,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726139499},\"type\":\"apm_retention_filter\"},{\"id\":\"_joGdaJjR4emN2AIeHagPw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":487,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726139499,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726139499},\"type\":\"apm_retention_filter\"},{\"id\":\"xDrElOgtQOCc_9y8fNhsrg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":488,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726139498,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726139498},\"type\":\"apm_retention_filter\"},{\"id\":\"b1oKMpTXR8OOy2kHBPUTAA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":489,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726139497,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726139497},\"type\":\"apm_retention_filter\"},{\"id\":\"_dyeSL4BTbe31ZyvSrzcng\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":490,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1725632510,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1725632509},\"type\":\"apm_retention_filter\"},{\"id\":\"doC9dMNuTaWpy05FrakFUw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":491,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1724653310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1724653310},\"type\":\"apm_retention_filter\"},{\"id\":\"REJYhDdCS3mMViatHbFfHQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":492,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1723040510,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1723040509},\"type\":\"apm_retention_filter\"},{\"id\":\"OFxNTi37TlOggWwYr_5R5A\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":493,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1721312510,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1721312509},\"type\":\"apm_retention_filter\"},{\"id\":\"wsRNIF0cTee06TrZWZyqqg\",\"attributes\":{\"name\":\"ShowMeTheRent Home Page Load Time\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"total gibberish\"},\"editable\":true,\"execution_order\":494,\"modified_by\":\"hanting.zhang@datadoghq.com\",\"modified_at\":1721072136,\"created_by\":\"hanting.zhang@datadoghq.com\",\"created_at\":1720444954},\"type\":\"apm_retention_filter\"},{\"id\":\"NvdCD5J8Rqq5RU_3sbw9sw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":495,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720136411,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720136411},\"type\":\"apm_retention_filter\"},{\"id\":\"VlZJ-XlIQ1awUfXRk8TQPw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":496,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720136410,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720136410},\"type\":\"apm_retention_filter\"},{\"id\":\"mGTQJLKCS0eUcMZQYKhzGA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":497,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720136409,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720136409},\"type\":\"apm_retention_filter\"},{\"id\":\"AqhKBNYmSpW62tANzBd9lA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":498,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720136409,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720136409},\"type\":\"apm_retention_filter\"},{\"id\":\"11LzCo0gS2GXJBxq1Bfldg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":499,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720136408,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720136408},\"type\":\"apm_retention_filter\"},{\"id\":\"X6tZSIgJQXy_-gDr5ngGKQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":500,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720136407,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720136407},\"type\":\"apm_retention_filter\"},{\"id\":\"ttQov6-1TeywLOzD0_Wjvw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":501,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720135971,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720135971},\"type\":\"apm_retention_filter\"},{\"id\":\"d8AMO7eZTqWAoPcgKnUH5w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":502,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720135970,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720135970},\"type\":\"apm_retention_filter\"},{\"id\":\"9Es9-Nm5Q0qVMIWLJtJgvA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":503,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720135969,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720135969},\"type\":\"apm_retention_filter\"},{\"id\":\"tx6ZhDGzSDGcsv9O46Zerg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":504,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720135969,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720135969},\"type\":\"apm_retention_filter\"},{\"id\":\"PMCuJz-4QEOViYKBkrvPwA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":505,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720135968,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720135968},\"type\":\"apm_retention_filter\"},{\"id\":\"DBpvbarET32JXFI8sSKaaQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":506,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1720135967,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1720135967},\"type\":\"apm_retention_filter\"},{\"id\":\"o2PNHrCdTheosrLaMYrusA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":507,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1719224511,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1719224511},\"type\":\"apm_retention_filter\"},{\"id\":\"l7Jl37GRTTa1F2KtGOOzhg\",\"attributes\":{\"name\":\"ShowMeTheRent Home Page Load Time\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"service:showmetherent-express env:production @http.path_group:\\\"/\\\" @http.method:GET app:showmetherent @http.status_code:200 @duration:>600000000\"},\"editable\":true,\"execution_order\":508,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1718298977,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1718298977},\"type\":\"apm_retention_filter\"},{\"id\":\"uvvItgphQROje_8qDXIjsg\",\"attributes\":{\"name\":\"Synthetics Default\",\"rate\":1.0,\"trace_rate\":0,\"enabled\":false,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_dd.origin:(synthetics OR synthetics-browser)\"},\"editable\":true,\"execution_order\":509,\"modified_by\":\"\",\"modified_at\":0,\"created_by\":\"\",\"created_at\":0},\"type\":\"apm_retention_filter\"},{\"id\":\"cQ9X4t6OROuFAgx4pDlVjw\",\"attributes\":{\"name\":\"Dynamic Instrumentation Default\",\"rate\":1.0,\"trace_rate\":0,\"enabled\":false,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"operation_name:dd.dynamic.span\"},\"editable\":true,\"execution_order\":510,\"modified_by\":\"\",\"modified_at\":0,\"created_by\":\"\",\"created_at\":0},\"type\":\"apm_retention_filter\"},{\"id\":\"7RBOb7dLSYWI01yc3pIH8w\",\"attributes\":{\"name\":\"Error Default\",\"rate\":1.0,\"trace_rate\":0,\"enabled\":false,\"filter_type\":\"spans-errors-sampling-processor\",\"filter\":{\"query\":\"status:error\"},\"editable\":true,\"execution_order\":511,\"modified_by\":\"kevin.zou@datadoghq.com\",\"modified_at\":1699897925,\"created_by\":\"\",\"created_at\":0},\"type\":\"apm_retention_filter\"},{\"id\":\"jdZrilSJQLqzb6Cu7aub9Q\",\"attributes\":{\"name\":\"Application Security Monitoring Default\",\"rate\":1.0,\"trace_rate\":0,\"enabled\":true,\"filter_type\":\"spans-appsec-sampling-processor\",\"filter\":{\"query\":\"@appsec.event:true\"},\"editable\":true,\"execution_order\":512,\"modified_by\":\"\",\"modified_at\":0,\"created_by\":\"\",\"created_at\":0},\"type\":\"apm_retention_filter\"},{\"id\":\"t_EQ3YTUS1CM5G1ZGID_pw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":513,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1703426610,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1703426610},\"type\":\"apm_retention_filter\"},{\"id\":\"s9W4hIf9Qd-YfhjHjDsr1Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":514,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1710943411,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1710943411},\"type\":\"apm_retention_filter\"},{\"id\":\"UaE3f-hTSWOp5SHiKXUIgA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":515,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1716358911,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1716358911},\"type\":\"apm_retention_filter\"},{\"id\":\"z-LzwNBJSwqtX9sPXgjVVg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":516,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1718978884,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1718978884},\"type\":\"apm_retention_filter\"},{\"id\":\"-9N0hEp2StC4JF4dGUSxpQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":517,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1718978885,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1718978885},\"type\":\"apm_retention_filter\"},{\"id\":\"-4ixqG56SHuOZvCWv_QUdQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":518,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1718978886,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1718978886},\"type\":\"apm_retention_filter\"},{\"id\":\"saZJSmb7SxOh6WJZFolQPA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":519,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1718978887,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1718978887},\"type\":\"apm_retention_filter\"},{\"id\":\"0nwxoN3tT1i1gxZZGXYcnQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":520,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1718978887,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1718978887},\"type\":\"apm_retention_filter\"},{\"id\":\"OaMDf1vRSmqQ3oAkKpkLqw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":521,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1718978888,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1718978888},\"type\":\"apm_retention_filter\"},{\"id\":\"nyyb49KoQauKCd1eAM04Uw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":522,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1724048511,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1724048511},\"type\":\"apm_retention_filter\"},{\"id\":\"C53PR2sRRV2ga0TWdKh_Zw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":523,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1724243899,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1724243899},\"type\":\"apm_retention_filter\"},{\"id\":\"vZ-57FfaQZSoRGG2Qo6ghw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":524,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1724243900,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1724243900},\"type\":\"apm_retention_filter\"},{\"id\":\"fhGvdN2vT-ORvpEahluK0w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":525,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1724243900,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1724243900},\"type\":\"apm_retention_filter\"},{\"id\":\"AMv-0nsoQJO3Gxa-JCi-gw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":526,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1724243901,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1724243901},\"type\":\"apm_retention_filter\"},{\"id\":\"F60qOEHZT7eyx-XLCR-37Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":527,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1724243901,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1724243901},\"type\":\"apm_retention_filter\"},{\"id\":\"9jr2I7l-TEm6TS08SZvRxw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":528,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1724243902,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1724243902},\"type\":\"apm_retention_filter\"},{\"id\":\"Z_Ap-Kw2RGeq4-lABb7wrw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":529,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1726035710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1726035709},\"type\":\"apm_retention_filter\"},{\"id\":\"ZmaTf998RmuqY7_UJwqh9g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":530,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726052984,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726052984},\"type\":\"apm_retention_filter\"},{\"id\":\"sBQc_AatT6SqNx93LybeNw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":531,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726052985,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726052985},\"type\":\"apm_retention_filter\"},{\"id\":\"GxT4rQv2TkyMZNg_6Sj1dQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":532,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726052985,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726052985},\"type\":\"apm_retention_filter\"},{\"id\":\"_qaj3DsyQXyY_1oS1l07tw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":533,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726052985,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726052985},\"type\":\"apm_retention_filter\"},{\"id\":\"27tkQ3URTUeY7MPbdBRf_g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":534,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726052985,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726052985},\"type\":\"apm_retention_filter\"},{\"id\":\"G13wxrisSoex1IZo1tc1Tw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":535,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726052985,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726052985},\"type\":\"apm_retention_filter\"},{\"id\":\"kqsb8-5RQGiDtoR4R4WH9Q\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":536,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726484976,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726484976},\"type\":\"apm_retention_filter\"},{\"id\":\"lIBqPYIuREKj_I2zSP8TsQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":537,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726484976,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726484976},\"type\":\"apm_retention_filter\"},{\"id\":\"ndMsmK_QTPGOzETW0g23GQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":538,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726484976,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726484976},\"type\":\"apm_retention_filter\"},{\"id\":\"D2VJpOhiTI293GhyNvB4ig\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":539,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726484976,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726484976},\"type\":\"apm_retention_filter\"},{\"id\":\"fGl0sjeVQhyj5O5b_lcDAA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":540,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726484977,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726484977},\"type\":\"apm_retention_filter\"},{\"id\":\"zMNT8WFuSGmRksmO91o0LA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":541,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726484977,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726484977},\"type\":\"apm_retention_filter\"},{\"id\":\"QmFOgSO6T1SLAs6y1nA5gQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":542,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726571370,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726571370},\"type\":\"apm_retention_filter\"},{\"id\":\"jeqBPLgwT3WYnI-qs01whQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":543,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726571370,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726571370},\"type\":\"apm_retention_filter\"},{\"id\":\"Zeuzvga7Rhu7ezHR9oB1Ew\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":544,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726571370,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726571370},\"type\":\"apm_retention_filter\"},{\"id\":\"e2wqH-qvTy2vkxphRK1IKA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":545,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726571370,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726571370},\"type\":\"apm_retention_filter\"},{\"id\":\"CTMVAUlPRw6L2nZK2zjH5g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":546,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726571370,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726571370},\"type\":\"apm_retention_filter\"},{\"id\":\"wVWyl61gStuO2uyYs2aOiw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":547,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726571371,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726571371},\"type\":\"apm_retention_filter\"},{\"id\":\"QXUoGirNQsOJtTHpjqnlQQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":548,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726657810,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726657810},\"type\":\"apm_retention_filter\"},{\"id\":\"lEaQnhs9RH-XqpO5tSCV-w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":549,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726657811,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726657811},\"type\":\"apm_retention_filter\"},{\"id\":\"mdV8KsvvTPGspmXM_NkMnw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":550,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726657811,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726657811},\"type\":\"apm_retention_filter\"},{\"id\":\"Sths5jqBRg2gxC7x-qjBAA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":551,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726657811,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726657811},\"type\":\"apm_retention_filter\"},{\"id\":\"lCRNWHJlScaLP-TfV9IEJA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":552,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726657812,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726657812},\"type\":\"apm_retention_filter\"},{\"id\":\"3xCuat07TESbLXzPagAFjQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":553,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726657812,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726657812},\"type\":\"apm_retention_filter\"},{\"id\":\"zNW28tAASkuv2cWV0S8dfw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":554,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726744211,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726744211},\"type\":\"apm_retention_filter\"},{\"id\":\"z3Un7G9iTHmgzF1CzGi-pg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":555,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726744212,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726744212},\"type\":\"apm_retention_filter\"},{\"id\":\"Z0-McPmOQLqPZxihG6Qt7A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":556,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726744212,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726744212},\"type\":\"apm_retention_filter\"},{\"id\":\"0TBdygqQR7e5pHRHtAc5bQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":557,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726744213,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726744213},\"type\":\"apm_retention_filter\"},{\"id\":\"RkexurMASD-RelPY02bd1g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":558,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726744213,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726744213},\"type\":\"apm_retention_filter\"},{\"id\":\"kyxqbJr7R-KyTmZ1MVLzWA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":559,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726744213,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726744213},\"type\":\"apm_retention_filter\"},{\"id\":\"d1EWU7K9T6yCQngX-AnF2Q\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":560,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726830653,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726830653},\"type\":\"apm_retention_filter\"},{\"id\":\"-8CnAN_cTBGcWsEEtE7Y_A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":561,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726830654,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726830654},\"type\":\"apm_retention_filter\"},{\"id\":\"I638N4XHQ-WbG5Hj9QSU7w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":562,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726830655,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726830655},\"type\":\"apm_retention_filter\"},{\"id\":\"4lFa54ZHSZWeJSxVrbAd5w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":563,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726830655,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726830655},\"type\":\"apm_retention_filter\"},{\"id\":\"glhwgJyKTjqH0iPih-t4QQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":564,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726830655,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726830655},\"type\":\"apm_retention_filter\"},{\"id\":\"tdIFsDKVQlaOaYU1DBcdMA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":565,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1726830656,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1726830656},\"type\":\"apm_retention_filter\"},{\"id\":\"X_EbJrYRSYebOREnjp_7Wg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":566,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1727288510,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1727288509},\"type\":\"apm_retention_filter\"},{\"id\":\"i83RZ0TXQBaaYS6w9_hQFw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":567,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1727302910,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1727302909},\"type\":\"apm_retention_filter\"},{\"id\":\"L-rWctFKTtOA4iE4emL6Tw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":568,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1727547710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1727547709},\"type\":\"apm_retention_filter\"},{\"id\":\"GGssqxAvR7KjvtmOQw9D9g\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":569,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1727619710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1727619709},\"type\":\"apm_retention_filter\"},{\"id\":\"F64VDTYpT0G9UVtTO_ZhwQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":570,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1727850110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1727850110},\"type\":\"apm_retention_filter\"},{\"id\":\"ru-igIDoSLaMLO1apm78wg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":571,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727867500,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727867500},\"type\":\"apm_retention_filter\"},{\"id\":\"m3oAfkyhTiyLt-2ktDRThQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":572,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727867501,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727867501},\"type\":\"apm_retention_filter\"},{\"id\":\"viqNJPbsQc-PJATLjSfnpg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":573,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727867502,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727867502},\"type\":\"apm_retention_filter\"},{\"id\":\"jZF9Y609S3WXZAyFn237qQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":574,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727867502,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727867502},\"type\":\"apm_retention_filter\"},{\"id\":\"5bnEseWAQ5WPQuqKvS2e2g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":575,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727867503,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727867503},\"type\":\"apm_retention_filter\"},{\"id\":\"GJEx8k1mQZG3uA-oebOTqA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":576,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1727867503,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1727867503},\"type\":\"apm_retention_filter\"},{\"id\":\"CyQpwQDWSoOpF3lFJCkEBA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":577,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728299520,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728299520},\"type\":\"apm_retention_filter\"},{\"id\":\"WnRwKretQu2BfLw9A9e5Xg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":578,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728299520,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728299520},\"type\":\"apm_retention_filter\"},{\"id\":\"Z8lEdJ5YSy6yKPkZfGSjNA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":579,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728299521,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728299521},\"type\":\"apm_retention_filter\"},{\"id\":\"VXwRNM0vTJqzZI67hU0X4g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":580,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728299521,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728299521},\"type\":\"apm_retention_filter\"},{\"id\":\"5svoNDlPSlaqy2VS0Yoc4Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":581,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728299522,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728299522},\"type\":\"apm_retention_filter\"},{\"id\":\"x_aUfCUtRQeLgodLXL6zlw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":582,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728299522,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728299522},\"type\":\"apm_retention_filter\"},{\"id\":\"AqTPKb3LQwK9yIWwz8nLdg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":583,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728385835,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728385835},\"type\":\"apm_retention_filter\"},{\"id\":\"MOJ8puM_SSuVMo1alDRtIQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":584,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728385836,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728385836},\"type\":\"apm_retention_filter\"},{\"id\":\"h2lARJIpRVKJaZmtiJPNbQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":585,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728385836,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728385836},\"type\":\"apm_retention_filter\"},{\"id\":\"70j8QdrzTEifcLgEDIw4IA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":586,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728385836,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728385836},\"type\":\"apm_retention_filter\"},{\"id\":\"4mOpkCLkReO0-X98fb8UeQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":587,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728385837,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728385837},\"type\":\"apm_retention_filter\"},{\"id\":\"-PoUVvh-T5eHOVxS26_F2Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":588,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728385837,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728385837},\"type\":\"apm_retention_filter\"},{\"id\":\"zlQm7QImQgaEepwQYUxvJA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":589,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728472189,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728472189},\"type\":\"apm_retention_filter\"},{\"id\":\"TBgqg6pFSPGwTbDitrkXjg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":590,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728472189,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728472189},\"type\":\"apm_retention_filter\"},{\"id\":\"RmE1WOggQJ-C6hp6ngtRmg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":591,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728472190,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728472190},\"type\":\"apm_retention_filter\"},{\"id\":\"3qpBn8uzQKaXpzpo56zLaw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":592,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728472190,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728472190},\"type\":\"apm_retention_filter\"},{\"id\":\"JRy40EkhRWifw2OKw5YDuA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":593,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728472190,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728472190},\"type\":\"apm_retention_filter\"},{\"id\":\"fUQIhPRMT4eAiYFiL4FMSw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":594,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728472190,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728472190},\"type\":\"apm_retention_filter\"},{\"id\":\"I5zbTGUYQzOwDkpbEj5sYg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":595,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728558586,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728558586},\"type\":\"apm_retention_filter\"},{\"id\":\"9arIa8YJSRq_tHo0aaz-dw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":596,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728558586,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728558586},\"type\":\"apm_retention_filter\"},{\"id\":\"dZk1G7NoT0OEDDJAJgIQPw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":597,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728558587,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728558587},\"type\":\"apm_retention_filter\"},{\"id\":\"wUXlJ0uBQN2TBdWF39688g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":598,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728558587,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728558587},\"type\":\"apm_retention_filter\"},{\"id\":\"h-SOCgbRSkyP4H8EEYNdRQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":599,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728558587,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728558587},\"type\":\"apm_retention_filter\"},{\"id\":\"JxzMW7YnTVeDu5XhDN6I4g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":600,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728558587,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728558587},\"type\":\"apm_retention_filter\"},{\"id\":\"JKC5o9juT6COo7aMsZSKJw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":601,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728644961,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728644961},\"type\":\"apm_retention_filter\"},{\"id\":\"iK5vUEo4Su6EW3poh0ioqQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":602,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728644962,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728644962},\"type\":\"apm_retention_filter\"},{\"id\":\"JMnACBT5SFOHwYqHhNavQA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":603,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728644962,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728644962},\"type\":\"apm_retention_filter\"},{\"id\":\"wG6deZccRcWK3xhl4bjpkw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":604,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728644962,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728644962},\"type\":\"apm_retention_filter\"},{\"id\":\"mIKRn3fzQ8qQvN06LRc8SA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":605,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728644962,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728644962},\"type\":\"apm_retention_filter\"},{\"id\":\"P4rt8OuoTnu1Z3bRXCaVqQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":606,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728644962,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728644962},\"type\":\"apm_retention_filter\"},{\"id\":\"4Khj173qRjuPCkAZh0MMTA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":607,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1728771710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1728771709},\"type\":\"apm_retention_filter\"},{\"id\":\"GIpGF4mvTrqsGHlyVyQJHg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":608,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728904279,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728904279},\"type\":\"apm_retention_filter\"},{\"id\":\"RcXd5LibQvOV0ad1FIsEYg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":609,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728904280,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728904280},\"type\":\"apm_retention_filter\"},{\"id\":\"tMKgOQJ3S-W50NdnxpIDNw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":610,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728904280,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728904280},\"type\":\"apm_retention_filter\"},{\"id\":\"a-oofLb8SlqLOVrmSnuDpA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":611,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728904280,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728904280},\"type\":\"apm_retention_filter\"},{\"id\":\"K6f-TQp3RoasdeVuoNoJvA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":612,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728904281,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728904281},\"type\":\"apm_retention_filter\"},{\"id\":\"4XWr7AXERSyYX2MPQ4pjgA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":613,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728904281,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728904281},\"type\":\"apm_retention_filter\"},{\"id\":\"lsKlLKDvRyG8fWknX3Y1mw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":614,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728990723,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728990723},\"type\":\"apm_retention_filter\"},{\"id\":\"56ewcla1R06DGE0iaGbiuQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":615,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728990724,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728990724},\"type\":\"apm_retention_filter\"},{\"id\":\"rTjgaDdfQ9ystp3R91I_ZQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":616,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728990725,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728990725},\"type\":\"apm_retention_filter\"},{\"id\":\"TpIEw3-5SxOSvDMDbO_caQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":617,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728990725,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728990725},\"type\":\"apm_retention_filter\"},{\"id\":\"iWrUcSMhQjihx72X8c-6tg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":618,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728990726,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728990726},\"type\":\"apm_retention_filter\"},{\"id\":\"Uzb6cGriSR6WqJ4zlarq9w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":619,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1728990726,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1728990726},\"type\":\"apm_retention_filter\"},{\"id\":\"LdxlT7VfRbqb-A9QAK8Pkw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":620,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729077011,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729077011},\"type\":\"apm_retention_filter\"},{\"id\":\"soUcY77UR1aTIX5yqoft1A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":621,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729077011,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729077011},\"type\":\"apm_retention_filter\"},{\"id\":\"WUVPjiGwT5edDh7gLJ4yZg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":622,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729077012,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729077012},\"type\":\"apm_retention_filter\"},{\"id\":\"ZJ5NVWb9SR262I63wtjocw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":623,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729077012,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729077012},\"type\":\"apm_retention_filter\"},{\"id\":\"xPsYwotvRTWXCwUHpM6qAA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":624,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729077012,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729077012},\"type\":\"apm_retention_filter\"},{\"id\":\"go2WuT41RcGm583qNmnTYw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":625,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729077013,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729077013},\"type\":\"apm_retention_filter\"},{\"id\":\"L21b7C9cTgeD_tLdyN3ucg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":626,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729163352,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729163352},\"type\":\"apm_retention_filter\"},{\"id\":\"rYY3700nTi-F7pUPWqFW3Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":627,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729163352,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729163352},\"type\":\"apm_retention_filter\"},{\"id\":\"jUlwqh5xQQm_bqOuSLwd9g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":628,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729163352,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729163352},\"type\":\"apm_retention_filter\"},{\"id\":\"LaqPEgUFTt6p8YwiOTB7Vg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":629,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729163352,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729163352},\"type\":\"apm_retention_filter\"},{\"id\":\"Hhrg6MdOQAmTcs1xfjb0Mg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":630,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729163353,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729163353},\"type\":\"apm_retention_filter\"},{\"id\":\"J2LWmmoES82aVreAQp5oUA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":631,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729163353,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729163353},\"type\":\"apm_retention_filter\"},{\"id\":\"8-Jj2GDBToyEiTDwFpL26A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":632,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729509039,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729509039},\"type\":\"apm_retention_filter\"},{\"id\":\"5Qd8AJQtTRmaZfW5QTbQfg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":633,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729509039,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729509039},\"type\":\"apm_retention_filter\"},{\"id\":\"nTz0NMnIQ7mrXDp9GA9q_w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":634,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729509039,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729509039},\"type\":\"apm_retention_filter\"},{\"id\":\"kz-bCvjZRGiKLjRGHAsOTQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":635,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729509040,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729509040},\"type\":\"apm_retention_filter\"},{\"id\":\"NOMcXQBGRpa-qh3N_zQAMw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":636,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729509040,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729509040},\"type\":\"apm_retention_filter\"},{\"id\":\"YiQ_0TD0RzWjdtUdbyrj2Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":637,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729509040,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729509040},\"type\":\"apm_retention_filter\"},{\"id\":\"xy1476nzQRucOLIaeNvnEg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":638,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729595315,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729595315},\"type\":\"apm_retention_filter\"},{\"id\":\"iBu8W67vT8-vXIhK6nRJ6w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":639,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729595315,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729595315},\"type\":\"apm_retention_filter\"},{\"id\":\"0RxCsvYQQFSYqCph7_cbdw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":640,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729595316,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729595316},\"type\":\"apm_retention_filter\"},{\"id\":\"LdkkU7xLR9KlQF7x6kkIYw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":641,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729595316,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729595316},\"type\":\"apm_retention_filter\"},{\"id\":\"zR3LTWKcQfaqaEYI2RLVEA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":642,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729595316,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729595316},\"type\":\"apm_retention_filter\"},{\"id\":\"vgEZplYKS1KyggyucbBMgg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":643,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729595316,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729595316},\"type\":\"apm_retention_filter\"},{\"id\":\"jJfLqkheQIK06YypBmkqiA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":644,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729681751,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729681751},\"type\":\"apm_retention_filter\"},{\"id\":\"u4N_qngzQeKT_y2TFG-EZA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":645,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729681752,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729681752},\"type\":\"apm_retention_filter\"},{\"id\":\"vXD_sAjxQquJQJXVI85URA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":646,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729681752,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729681752},\"type\":\"apm_retention_filter\"},{\"id\":\"O_NDBu-0RySANbj3TdyfBA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":647,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729681752,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729681752},\"type\":\"apm_retention_filter\"},{\"id\":\"iL_NsauMQWeOx7Y3DtKTgQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":648,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729681752,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729681752},\"type\":\"apm_retention_filter\"},{\"id\":\"ajZVsbQYSZmEXfBfUuPQzw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":649,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729681753,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729681753},\"type\":\"apm_retention_filter\"},{\"id\":\"N0DocFtLQCmNnna9f4wo_A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":650,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729768107,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729768107},\"type\":\"apm_retention_filter\"},{\"id\":\"445mM231TYCPzFJfTkUVgA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":651,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729768107,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729768107},\"type\":\"apm_retention_filter\"},{\"id\":\"ilgu3zP-TMStvUiNswEvOA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":652,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729768107,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729768107},\"type\":\"apm_retention_filter\"},{\"id\":\"O6HvpjkfQFG6_DZCopXKlA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":653,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729768107,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729768107},\"type\":\"apm_retention_filter\"},{\"id\":\"f3Gml_xXRvSNyWVv8944EA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":654,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729768107,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729768107},\"type\":\"apm_retention_filter\"},{\"id\":\"_CTRyQqcTQ23EtpXNQ47ag\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":655,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1729768108,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1729768108},\"type\":\"apm_retention_filter\"},{\"id\":\"PiigZZv4Te-CiLk-zvdB_A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":656,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730372929,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730372929},\"type\":\"apm_retention_filter\"},{\"id\":\"crChq9-BQR-JzNrDdXflZA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":657,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730372929,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730372929},\"type\":\"apm_retention_filter\"},{\"id\":\"XRQNF_1HSfaaTqNv4QAjRQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":658,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730372929,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730372929},\"type\":\"apm_retention_filter\"},{\"id\":\"VuRGYTtbThqiH7MukPoXvw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":659,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730372930,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730372930},\"type\":\"apm_retention_filter\"},{\"id\":\"7Us42UEpR0S4gWabzvdtVg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":660,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730372930,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730372930},\"type\":\"apm_retention_filter\"},{\"id\":\"UGxf0gfUR56u0BnukpVS6g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":661,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730372930,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730372930},\"type\":\"apm_retention_filter\"},{\"id\":\"0P_uus1ASzylPgYGeUwkvQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":662,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730459338,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730459338},\"type\":\"apm_retention_filter\"},{\"id\":\"fNZmcns6Tbm0FTzP_Wrgig\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":663,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730459338,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730459338},\"type\":\"apm_retention_filter\"},{\"id\":\"t6UFRG7wRC-LFTxajrgwyw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":664,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730459338,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730459338},\"type\":\"apm_retention_filter\"},{\"id\":\"jLJY5tG3Q-anqXcbvDjIdA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":665,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730459338,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730459338},\"type\":\"apm_retention_filter\"},{\"id\":\"bPjdWRatQBODVSBo12fEdA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":666,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730459338,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730459338},\"type\":\"apm_retention_filter\"},{\"id\":\"q3MCC8L_RSKOprKy2cbr0Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":667,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730459339,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730459339},\"type\":\"apm_retention_filter\"},{\"id\":\"V7V9cHL6Qoyzbh2uYg3NRQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":668,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1730614911,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1730614911},\"type\":\"apm_retention_filter\"},{\"id\":\"gwrti3pRQYuDIK8ZAN1nUA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":669,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730804917,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730804917},\"type\":\"apm_retention_filter\"},{\"id\":\"fXDlbrafSgSriFFS7EkOOA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":670,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730804918,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730804918},\"type\":\"apm_retention_filter\"},{\"id\":\"lQWOBp6STn-9qyF_9Uw01w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":671,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730804918,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730804918},\"type\":\"apm_retention_filter\"},{\"id\":\"xrutLlusQoGe0BQzEcg1oA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":672,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730804918,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730804918},\"type\":\"apm_retention_filter\"},{\"id\":\"NJ8uve4EQkK6s-W5H5_CXw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":673,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730804919,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730804919},\"type\":\"apm_retention_filter\"},{\"id\":\"x6RuDRMERoyqHvPSmcOoUA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":674,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730804919,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730804919},\"type\":\"apm_retention_filter\"},{\"id\":\"7ArIZojRQIGrrO5aFk867Q\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":675,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730891317,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730891317},\"type\":\"apm_retention_filter\"},{\"id\":\"SjxklIYcRu2IOx2tFEzJwQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":676,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730891317,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730891317},\"type\":\"apm_retention_filter\"},{\"id\":\"4kgGjPCZQV6nodIatptQig\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":677,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730891318,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730891318},\"type\":\"apm_retention_filter\"},{\"id\":\"UsAJ0zX8RWy8m3GchPcciQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":678,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730891318,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730891318},\"type\":\"apm_retention_filter\"},{\"id\":\"zh8FnKNYSSGoDPk-tMGrYg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":679,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730891318,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730891318},\"type\":\"apm_retention_filter\"},{\"id\":\"qsI1vqUvRzOdwtDJDoeywQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":680,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1730891318,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1730891318},\"type\":\"apm_retention_filter\"},{\"id\":\"_wr8CcyYS8S2rm8oZxqkbw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":681,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1731219710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1731219709},\"type\":\"apm_retention_filter\"},{\"id\":\"YWlKgBVeTbqz1H4K-ip2Aw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":682,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731323321,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731323321},\"type\":\"apm_retention_filter\"},{\"id\":\"TfdsTaPeSxi_G_TVLWwa6A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":683,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731323321,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731323321},\"type\":\"apm_retention_filter\"},{\"id\":\"BkNw64UYQ-OQrfsY2SAHcg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":684,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731323321,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731323321},\"type\":\"apm_retention_filter\"},{\"id\":\"P8H9G34aStmWX8iUMFVV6A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":685,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731323321,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731323321},\"type\":\"apm_retention_filter\"},{\"id\":\"uD7ZvbWBROmZ_bL4bepa0g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":686,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731323321,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731323321},\"type\":\"apm_retention_filter\"},{\"id\":\"I_X-J3kASIWtHAVQC8Lvfw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":687,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731323322,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731323322},\"type\":\"apm_retention_filter\"},{\"id\":\"45PyzcGOQaePESvb0JB7ag\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":688,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731409850,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731409850},\"type\":\"apm_retention_filter\"},{\"id\":\"NvWmmh44QRedZ9YtDGmNlA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":689,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731409850,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731409850},\"type\":\"apm_retention_filter\"},{\"id\":\"oHRbLKlYRbqhu6nhgd6a-Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":690,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731409851,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731409851},\"type\":\"apm_retention_filter\"},{\"id\":\"5jzN-OAMQ8-n1YZPzZfoZw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":691,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731409852,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731409852},\"type\":\"apm_retention_filter\"},{\"id\":\"lHUPUhroRyqFNuvlWhsaJA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":692,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731409852,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731409852},\"type\":\"apm_retention_filter\"},{\"id\":\"jUtHieG1TAuWfpYmIqN8Zg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":693,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731409853,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731409853},\"type\":\"apm_retention_filter\"},{\"id\":\"p-PpzxxSQfmMpdhx4-Ufnw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":694,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1731738110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1731738110},\"type\":\"apm_retention_filter\"},{\"id\":\"NG7FiUQSRyKRDplTrBXdFQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":695,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731928180,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731928180},\"type\":\"apm_retention_filter\"},{\"id\":\"wA6blNB1QwSQl3abczjxvg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":696,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731928181,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731928181},\"type\":\"apm_retention_filter\"},{\"id\":\"jAX5ty7NSoWa7iM7vYmvlg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":697,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731928181,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731928181},\"type\":\"apm_retention_filter\"},{\"id\":\"JJhBqwz4S1uXbOVUy_lMNg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":698,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731928181,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731928181},\"type\":\"apm_retention_filter\"},{\"id\":\"gMZ1ANQxRyK04peTz_dIzA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":699,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731928182,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731928182},\"type\":\"apm_retention_filter\"},{\"id\":\"b0Er9GYCTJCba8JaYbAjYA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":700,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1731928182,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1731928182},\"type\":\"apm_retention_filter\"},{\"id\":\"KVonrm3rSWuSlJWumia6wQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":701,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1731968510,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1731968509},\"type\":\"apm_retention_filter\"},{\"id\":\"1Kj-03CHQlmXuKat6uddog\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":702,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1732458110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1732458110},\"type\":\"apm_retention_filter\"},{\"id\":\"XO5YpXkuSgiUONyLCKoZhQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":703,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1732486910,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1732486909},\"type\":\"apm_retention_filter\"},{\"id\":\"14rAOh4RSfKYqa8Je1fC4A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":704,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732532930,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732532930},\"type\":\"apm_retention_filter\"},{\"id\":\"jCfzKWuyRQmclhk0NBQDXA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":705,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732532931,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732532931},\"type\":\"apm_retention_filter\"},{\"id\":\"Udw0rxHHRHCCpcEYvyhqog\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":706,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732532931,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732532931},\"type\":\"apm_retention_filter\"},{\"id\":\"qa-J9FtKR7C-9tBNromK6g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":707,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732532931,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732532931},\"type\":\"apm_retention_filter\"},{\"id\":\"oZ3J5jRmRqurJ7Viuz5cmQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":708,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732532931,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732532931},\"type\":\"apm_retention_filter\"},{\"id\":\"Yf1CNMR6SlizYXSrXutRcQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":709,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732532932,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732532932},\"type\":\"apm_retention_filter\"},{\"id\":\"Vtb7t-QlSLeOklAjBZPGZQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":710,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732619472,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732619472},\"type\":\"apm_retention_filter\"},{\"id\":\"lRFK4pJ-RgKu0kh2DxfQ0A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":711,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732619473,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732619473},\"type\":\"apm_retention_filter\"},{\"id\":\"TZc2DaM3TRCVdjxbqI3g4Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":712,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732619474,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732619474},\"type\":\"apm_retention_filter\"},{\"id\":\"M-qskgP1QyaBXDIOIoA_pA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":713,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732619475,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732619475},\"type\":\"apm_retention_filter\"},{\"id\":\"fZ0z3F0lQ8-gfbVCZWojHw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":714,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732619475,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732619475},\"type\":\"apm_retention_filter\"},{\"id\":\"nFSDLgOaQamSyRPnWTLGIA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":715,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1732619476,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1732619476},\"type\":\"apm_retention_filter\"},{\"id\":\"kOniP5ZeT5SylQvEP4ly3Q\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":716,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1732746110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1732746109},\"type\":\"apm_retention_filter\"},{\"id\":\"u6fGjpRWTPmxESsXWecUsw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":717,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1733034110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1733034109},\"type\":\"apm_retention_filter\"},{\"id\":\"hjgT7K8FR-ycjd3ZVyst3w\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":718,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733397083,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733397083},\"type\":\"apm_retention_filter\"},{\"id\":\"xDSW6GkkTXiIPg9dYNX3Gw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":719,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733397084,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733397084},\"type\":\"apm_retention_filter\"},{\"id\":\"6mxg7ZpXQa6mIrlsl7XlQA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":720,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733397085,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733397085},\"type\":\"apm_retention_filter\"},{\"id\":\"1BDV5auVTEqnSXpw5ksf7g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":721,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733397085,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733397085},\"type\":\"apm_retention_filter\"},{\"id\":\"dstdsr-vTkaxRsTkYXt0Xw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":722,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733397086,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733397086},\"type\":\"apm_retention_filter\"},{\"id\":\"mBDvfJ47TyaY-UG1_NKLxA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":723,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733397086,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733397086},\"type\":\"apm_retention_filter\"},{\"id\":\"yNSirjRgStetC73iuTzFRw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":724,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1733581310,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1733581309},\"type\":\"apm_retention_filter\"},{\"id\":\"YydCqnvNSR6zJzXC_4hNnQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":725,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733828936,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733828936},\"type\":\"apm_retention_filter\"},{\"id\":\"gxIAeDoZQQWpzUVt_QEBHg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":726,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733828936,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733828936},\"type\":\"apm_retention_filter\"},{\"id\":\"g9V3CUR_Se2QF8KmBT-qCA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":727,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733828936,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733828936},\"type\":\"apm_retention_filter\"},{\"id\":\"75Z-w3GoR2K4ze2edeJhDA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":728,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733828936,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733828936},\"type\":\"apm_retention_filter\"},{\"id\":\"xjQxWUdSTByvU6wZl6Jt3w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":729,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733828937,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733828937},\"type\":\"apm_retention_filter\"},{\"id\":\"_32cs5PdQhy1skUZEFWxqQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":730,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733828937,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733828937},\"type\":\"apm_retention_filter\"},{\"id\":\"aH2QoMp8RtClSrvFn961AQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":731,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1733898110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1733898109},\"type\":\"apm_retention_filter\"},{\"id\":\"xPLeGADRTmm550NpOljp1w\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":732,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733915379,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733915379},\"type\":\"apm_retention_filter\"},{\"id\":\"NIEkY_6QTiijlb80wUM0Kg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":733,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733915380,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733915380},\"type\":\"apm_retention_filter\"},{\"id\":\"pLHdXqFlRB6MT83MSo4GDw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":734,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733915381,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733915381},\"type\":\"apm_retention_filter\"},{\"id\":\"QANIWaZTTQiTro7MMqGjmg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":735,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733915382,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733915382},\"type\":\"apm_retention_filter\"},{\"id\":\"xfEVLfu2QYObF7Zg41boFw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":736,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733915382,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733915382},\"type\":\"apm_retention_filter\"},{\"id\":\"2tdoi8n0RcazMnfW7FR7Pg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":737,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1733915382,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1733915382},\"type\":\"apm_retention_filter\"},{\"id\":\"433srqXbQJWDWlwz-5jJmg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":738,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734027710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734027709},\"type\":\"apm_retention_filter\"},{\"id\":\"CGhqgXkpRQmmMfm1_4YWHQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":739,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734042110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734042109},\"type\":\"apm_retention_filter\"},{\"id\":\"--cju5Q3QK2guN6akS_0Lg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":740,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734099710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734099709},\"type\":\"apm_retention_filter\"},{\"id\":\"WUp9sKGeSZmkRsMPM53oMA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":741,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734315710,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734315709},\"type\":\"apm_retention_filter\"},{\"id\":\"Z6rHoDGbQWSZm1o8H8F9rQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":742,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734347341,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734347341},\"type\":\"apm_retention_filter\"},{\"id\":\"4RQI9-ScRfGimSTkMtvDNA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":743,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734347342,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734347342},\"type\":\"apm_retention_filter\"},{\"id\":\"vzIcn_F2Shu4BWwyVLbiTQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":744,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734347342,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734347342},\"type\":\"apm_retention_filter\"},{\"id\":\"vaS6f4h2Qt2IiggBjRvkrg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":745,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734347342,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734347342},\"type\":\"apm_retention_filter\"},{\"id\":\"7GlMV6IITj2F8oxuqa5SXw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":746,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734347342,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734347342},\"type\":\"apm_retention_filter\"},{\"id\":\"CdjQOeVaRt-2aWi8g8EHhQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":747,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734347343,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734347343},\"type\":\"apm_retention_filter\"},{\"id\":\"PUKnyhGRRVCe_jAr-VBwHQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":748,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734433891,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734433891},\"type\":\"apm_retention_filter\"},{\"id\":\"2dJAnU2yRr6onE9VPCv3qQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":749,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734433892,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734433892},\"type\":\"apm_retention_filter\"},{\"id\":\"fHdvYLZVSuG-X5jQmyrwEw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":750,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734433893,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734433893},\"type\":\"apm_retention_filter\"},{\"id\":\"OqLrVMzTR9ahrnQZcgO3nQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":751,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734433893,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734433893},\"type\":\"apm_retention_filter\"},{\"id\":\"-JYUZ38jSo-foZlKrTerig\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":752,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734433893,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734433893},\"type\":\"apm_retention_filter\"},{\"id\":\"lo_Xj4EuTGW_LXHSn23Rkw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":753,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734433894,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734433894},\"type\":\"apm_retention_filter\"},{\"id\":\"I9y-BU3TQqSx_9Svhlg4DA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":754,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734520124,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734520124},\"type\":\"apm_retention_filter\"},{\"id\":\"w3rVAlIGTVa30REOZO2NBg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":755,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734520125,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734520125},\"type\":\"apm_retention_filter\"},{\"id\":\"9NCFhb5VTrKgDjkU60UtYQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":756,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734520125,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734520125},\"type\":\"apm_retention_filter\"},{\"id\":\"ldLJc1p8QouHSUUnqQndSQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":757,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734520125,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734520125},\"type\":\"apm_retention_filter\"},{\"id\":\"snJ2UZtlTNqwX9I_hyYkRQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":758,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734520125,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734520125},\"type\":\"apm_retention_filter\"},{\"id\":\"tBNGaw0vR_ux8KxHI9E9wg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":759,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734520126,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734520126},\"type\":\"apm_retention_filter\"},{\"id\":\"ik4k0YRQTNyQbt8fb-nhqg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":760,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734606677,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734606677},\"type\":\"apm_retention_filter\"},{\"id\":\"lHMhIfzRQneKtA3rNgcFTg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":761,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734606678,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734606678},\"type\":\"apm_retention_filter\"},{\"id\":\"TfR4B0IJSWWZdDT8NoXUeg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":762,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734606679,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734606679},\"type\":\"apm_retention_filter\"},{\"id\":\"cfikZJE6SICMnTY8iqwQ7g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":763,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734606679,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734606679},\"type\":\"apm_retention_filter\"},{\"id\":\"5kRYc6sITzGyrH4QzPROpg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":764,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734606679,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734606679},\"type\":\"apm_retention_filter\"},{\"id\":\"282MXA49S5uOvhLdoTOkYQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":765,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734606680,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734606680},\"type\":\"apm_retention_filter\"},{\"id\":\"FXwrrelZT-GXHQ8z0UZIhg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":766,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1734690110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1734690109},\"type\":\"apm_retention_filter\"},{\"id\":\"S9NdRaKdR8uPQdBww8Q-zQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":767,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734692935,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734692935},\"type\":\"apm_retention_filter\"},{\"id\":\"VNS42a-ZQdWNlef9F60IrA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":768,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734692935,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734692935},\"type\":\"apm_retention_filter\"},{\"id\":\"DbVmVtgBSjGy2ZXnRbQsYg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":769,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734692935,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734692935},\"type\":\"apm_retention_filter\"},{\"id\":\"gqVFqUUdTXO-dqaIKSHSZQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":770,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734692936,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734692936},\"type\":\"apm_retention_filter\"},{\"id\":\"pjGB_rk-RV2tUyPTtQte-A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":771,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734692936,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734692936},\"type\":\"apm_retention_filter\"},{\"id\":\"cGP6uIcxTiORLOOB-eLIlA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":772,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1734692936,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1734692936},\"type\":\"apm_retention_filter\"},{\"id\":\"d4Ysf7zWTjuzX8he2rFIhg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":773,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735038664,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735038664},\"type\":\"apm_retention_filter\"},{\"id\":\"r3dnACgmSxy90ByNxkqqPA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":774,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735038665,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735038665},\"type\":\"apm_retention_filter\"},{\"id\":\"Az4GNk_rRNGs5ubQq5uapA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":775,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735038666,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735038666},\"type\":\"apm_retention_filter\"},{\"id\":\"ii5oHmvwRh6DGD80KipbIw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":776,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735038666,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735038666},\"type\":\"apm_retention_filter\"},{\"id\":\"c_oERl-DRFaFa0fugAjbGA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":777,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735038667,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735038667},\"type\":\"apm_retention_filter\"},{\"id\":\"KCRcQZSmQ9ydg0MMZnQCOg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":778,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735038668,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735038668},\"type\":\"apm_retention_filter\"},{\"id\":\"rUfRKOd6RciI4v3v_JUMaA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":779,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1735078910,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1735078910},\"type\":\"apm_retention_filter\"},{\"id\":\"ZSquB4vgSyakZjUjJ4wIHg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":780,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735211389,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735211389},\"type\":\"apm_retention_filter\"},{\"id\":\"eVLqDmVGSO-DfFf4d0ItNQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":781,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735211389,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735211389},\"type\":\"apm_retention_filter\"},{\"id\":\"LzW4ZwD0SFyzkHYlSfE9rg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":782,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735211390,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735211390},\"type\":\"apm_retention_filter\"},{\"id\":\"d6yHTLyRScm4Y9lwGE8TmA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":783,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735211390,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735211390},\"type\":\"apm_retention_filter\"},{\"id\":\"9ZU_yfGISl2RYlzh-SiF4Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":784,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735211391,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735211391},\"type\":\"apm_retention_filter\"},{\"id\":\"hjwzlxKvRwij0Iwp-IeKPw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":785,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735211391,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735211391},\"type\":\"apm_retention_filter\"},{\"id\":\"WWQx1xWZTZyARctu_sPBsA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":786,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735729725,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735729725},\"type\":\"apm_retention_filter\"},{\"id\":\"0-ga5h7RSqmFJ4RMiK9FAw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":787,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735729726,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735729726},\"type\":\"apm_retention_filter\"},{\"id\":\"wipu2X_aRBehZ4GbQsxlCg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":788,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735729726,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735729726},\"type\":\"apm_retention_filter\"},{\"id\":\"8Mod21C7S9KZUUEbkYhoIQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":789,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735729726,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735729726},\"type\":\"apm_retention_filter\"},{\"id\":\"--Ox_NKhQ1CMxiDWx5Um1g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":790,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735729726,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735729726},\"type\":\"apm_retention_filter\"},{\"id\":\"8FS72Oh0SAqu99qqT1VWHw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":791,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735729727,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735729727},\"type\":\"apm_retention_filter\"},{\"id\":\"R-iSTEiuSAu7kVX4Z-7D-g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":792,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735816117,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735816117},\"type\":\"apm_retention_filter\"},{\"id\":\"VSfx3AbEQ7uyRbIaRitAHQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":793,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735816118,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735816118},\"type\":\"apm_retention_filter\"},{\"id\":\"9m5KEtzPTgCfFbIWbVymfg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":794,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735816118,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735816118},\"type\":\"apm_retention_filter\"},{\"id\":\"Oy-jUX59QyWoHVoRC-CaUw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":795,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735816118,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735816118},\"type\":\"apm_retention_filter\"},{\"id\":\"MUtx_3ohSRyXr-dO6fx-4A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":796,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735816118,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735816118},\"type\":\"apm_retention_filter\"},{\"id\":\"NCu2CR_RQUCRl6Olz02BiA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":797,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1735816119,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1735816119},\"type\":\"apm_retention_filter\"},{\"id\":\"8OHqgnTUTqS5eK-k19AURQ\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":798,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1735914110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1735914109},\"type\":\"apm_retention_filter\"},{\"id\":\"LT93C6KORrCFQNbvBVLI7A\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":799,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1736058110,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1736058109},\"type\":\"apm_retention_filter\"},{\"id\":\"wETLIa14TJWtLmQIYA8MWg\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":800,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1736072510,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1736072509},\"type\":\"apm_retention_filter\"},{\"id\":\"EKpDfqH5RfaZSHrOQ71Cuw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":801,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736161755,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736161755},\"type\":\"apm_retention_filter\"},{\"id\":\"Y3QiuVDtSTOMq58gY61gtA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":802,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736161755,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736161755},\"type\":\"apm_retention_filter\"},{\"id\":\"Mfeee3a7QQeyjHL5pUkYdA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":803,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736161756,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736161756},\"type\":\"apm_retention_filter\"},{\"id\":\"ggVxGqnuTdqphp_13mUktA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":804,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736161756,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736161756},\"type\":\"apm_retention_filter\"},{\"id\":\"JbXcyVmsR_-RaYOmqnNfuA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":805,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736161756,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736161756},\"type\":\"apm_retention_filter\"},{\"id\":\"cbqMfJp8RQGJ-BYESaoG7w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":806,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736161756,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736161756},\"type\":\"apm_retention_filter\"},{\"id\":\"t7olVtNyQCOO6p9FUVxmew\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":807,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1736288510,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1736288509},\"type\":\"apm_retention_filter\"},{\"id\":\"zX4HyccmQnS6khxTSLojiA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":808,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1736518910,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1736518909},\"type\":\"apm_retention_filter\"},{\"id\":\"2hYbZkplRQSbgMTI5RuQZw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":809,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736852918,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736852918},\"type\":\"apm_retention_filter\"},{\"id\":\"zkjd1QrXSr-IgCnnYnIzaQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":810,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736852918,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736852918},\"type\":\"apm_retention_filter\"},{\"id\":\"0o39SVpHRO6Ek6uUsNqTXg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":811,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736852918,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736852918},\"type\":\"apm_retention_filter\"},{\"id\":\"TXEkJH8jRzOEeigrUvnvzw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":812,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736852919,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736852919},\"type\":\"apm_retention_filter\"},{\"id\":\"o11MZ_PmR9CrHb_PiYpDng\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":813,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736852919,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736852919},\"type\":\"apm_retention_filter\"},{\"id\":\"0mGpd4csR7usxUoVwGwb6A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":814,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736852919,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736852919},\"type\":\"apm_retention_filter\"},{\"id\":\"tM3QsacfSKm3G9Q8pK_fcg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":815,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736939464,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736939464},\"type\":\"apm_retention_filter\"},{\"id\":\"EIfh5DP-S4-dXCWJT597pg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":816,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736939465,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736939465},\"type\":\"apm_retention_filter\"},{\"id\":\"7mMbJBkdS3qNPYKj-QAfiw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":817,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736939466,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736939466},\"type\":\"apm_retention_filter\"},{\"id\":\"UmTuZOLZQfap_NMs1u09Hw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":818,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736939467,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736939467},\"type\":\"apm_retention_filter\"},{\"id\":\"91e-CMkpSvWipb_gXes0iQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":819,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736939467,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736939467},\"type\":\"apm_retention_filter\"},{\"id\":\"7GpkoaLhRtudc4eM8MGVDw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":820,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1736939468,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1736939468},\"type\":\"apm_retention_filter\"},{\"id\":\"W3ZBmzZ3QGaK0olCs3GhWQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":821,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1737008931,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1737008931},\"type\":\"apm_retention_filter\"},{\"id\":\"0oeEuwBSQCORBJuaTRXQvg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":822,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737026061,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737026061},\"type\":\"apm_retention_filter\"},{\"id\":\"pz0w9N4QSyeuk0WJgfFAcg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":823,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737026062,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737026062},\"type\":\"apm_retention_filter\"},{\"id\":\"162aHmgnQiyFQG-xVJwfXA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":824,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737026063,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737026063},\"type\":\"apm_retention_filter\"},{\"id\":\"yWU0n2tGS9-8S-CpBf1O6A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":825,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737026063,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737026063},\"type\":\"apm_retention_filter\"},{\"id\":\"nYZ6emPBQ7-Hvhjhyqiksg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":826,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737026064,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737026064},\"type\":\"apm_retention_filter\"},{\"id\":\"F_tMenRGSVq8KWOV1k4dEg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":827,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737026065,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737026065},\"type\":\"apm_retention_filter\"},{\"id\":\"ZG1hCWB6QMWJVrFKByqz4w\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":828,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737112139,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737112139},\"type\":\"apm_retention_filter\"},{\"id\":\"c8a7e-YiQ4-F_oHccOM7jQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":829,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737112139,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737112139},\"type\":\"apm_retention_filter\"},{\"id\":\"UcLtFZ4jQXO1J1I1RlTsUQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":830,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737112140,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737112140},\"type\":\"apm_retention_filter\"},{\"id\":\"TsGZemdYTpuThZ6YqAeS3Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":831,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737112140,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737112140},\"type\":\"apm_retention_filter\"},{\"id\":\"InRAQuhBQ023hhUcbHUihQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":832,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737112140,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737112140},\"type\":\"apm_retention_filter\"},{\"id\":\"ukYZKf9xRL2UVCQGDTwgFg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":833,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737112140,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737112140},\"type\":\"apm_retention_filter\"},{\"id\":\"-LlTZ4BMS2y-_woxSWJG2g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":834,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737457888,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737457888},\"type\":\"apm_retention_filter\"},{\"id\":\"NaX-m7BpQUyncoDjLQ2Oow\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":835,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737457889,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737457889},\"type\":\"apm_retention_filter\"},{\"id\":\"LZS4voB-QEqN4uVrofMkkQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":836,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737457892,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737457892},\"type\":\"apm_retention_filter\"},{\"id\":\"gVCpnFjYQ7-IYh5t5K9VOA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":837,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737457893,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737457893},\"type\":\"apm_retention_filter\"},{\"id\":\"pVQE4zEcQrWCOssEuCJKJQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":838,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737457893,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737457893},\"type\":\"apm_retention_filter\"},{\"id\":\"qhchsOEDSw2txYlVuyeyyw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":839,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737457894,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737457894},\"type\":\"apm_retention_filter\"},{\"id\":\"UNkdMXNmQYSdhXBtZFi6ow\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":840,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737544153,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737544153},\"type\":\"apm_retention_filter\"},{\"id\":\"YmiQEFXdTce_9yTbZsRYRQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":841,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737544153,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737544153},\"type\":\"apm_retention_filter\"},{\"id\":\"wBVfTRFqRSic6o9fVOmIUw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":842,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737544154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737544154},\"type\":\"apm_retention_filter\"},{\"id\":\"j7OvR1LoQueq3vGhRZNqxA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":843,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737544154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737544154},\"type\":\"apm_retention_filter\"},{\"id\":\"TVQ4WpebT1GzfRxlHAeqdA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":844,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737544154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737544154},\"type\":\"apm_retention_filter\"},{\"id\":\"K2LfWHZQRGK7b1kb3m98fw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":845,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737544154,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737544154},\"type\":\"apm_retention_filter\"},{\"id\":\"Ao8N-HyqQ32-F9n7EZJL3Q\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":846,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737630627,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737630627},\"type\":\"apm_retention_filter\"},{\"id\":\"jW5sv46wTMaVl46UcATp9A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":847,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737630627,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737630627},\"type\":\"apm_retention_filter\"},{\"id\":\"uV99_o8wTkSKoEQYh2EM-Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":848,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737630628,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737630628},\"type\":\"apm_retention_filter\"},{\"id\":\"K_lhwmJhS6anC2gFEEhjZg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":849,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737630628,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737630628},\"type\":\"apm_retention_filter\"},{\"id\":\"OOZCM0ejQeGXRfLIVMzf2w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":850,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737630628,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737630628},\"type\":\"apm_retention_filter\"},{\"id\":\"Xoaef77URmO64baL22HXww\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":851,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737630629,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737630629},\"type\":\"apm_retention_filter\"},{\"id\":\"gNIWMruqRp2pQb8sPd1U2g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":852,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737716947,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737716947},\"type\":\"apm_retention_filter\"},{\"id\":\"8D-ciwvTSvSz68bVH56FXw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":853,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737716948,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737716948},\"type\":\"apm_retention_filter\"},{\"id\":\"BEXK9iG7Tfa0mmoPFap51w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":854,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737716949,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737716949},\"type\":\"apm_retention_filter\"},{\"id\":\"6PkmrZ1MS7a_49-WXPKO-w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":855,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737716949,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737716949},\"type\":\"apm_retention_filter\"},{\"id\":\"GG7O5tdUTYO-rDTfcxhRPA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":856,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737716949,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737716949},\"type\":\"apm_retention_filter\"},{\"id\":\"GKwIMFGkQw-FzwRy5rTIJw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":857,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1737716949,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1737716949},\"type\":\"apm_retention_filter\"},{\"id\":\"220qRE_zR1S5GqJv5GMW9w\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":858,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738148928,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738148928},\"type\":\"apm_retention_filter\"},{\"id\":\"t0PmqyNUTmWnSwwUWBI6Iw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":859,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738148930,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738148930},\"type\":\"apm_retention_filter\"},{\"id\":\"MLPamf1qSmKWqY2572G5hg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":860,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738148930,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738148930},\"type\":\"apm_retention_filter\"},{\"id\":\"Tc0JX5TEQym0pmh1xLLN6Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":861,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738148930,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738148930},\"type\":\"apm_retention_filter\"},{\"id\":\"jFgyKGbeROqDcjGM1TIT8Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":862,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738148930,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738148930},\"type\":\"apm_retention_filter\"},{\"id\":\"EI5SAP1fQQK_-h6AgaMN2A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":863,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738148931,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738148931},\"type\":\"apm_retention_filter\"},{\"id\":\"-Q72sgSjTeOdTPXAowVQ0g\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":864,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738753989,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738753989},\"type\":\"apm_retention_filter\"},{\"id\":\"YPdvFjbYQUaSSZYb61jFMg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":865,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738753989,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738753989},\"type\":\"apm_retention_filter\"},{\"id\":\"ZR452XwZQ3CHM6hYxl_V3g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":866,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738753990,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738753990},\"type\":\"apm_retention_filter\"},{\"id\":\"EgBWe8znQGuR3vf_eCEYaQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":867,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738753990,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738753990},\"type\":\"apm_retention_filter\"},{\"id\":\"yd47LC05ShG6PypAEufIjQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":868,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738753991,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738753991},\"type\":\"apm_retention_filter\"},{\"id\":\"XkY-mgcHRiidux9-iDZ8og\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":869,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738753991,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738753991},\"type\":\"apm_retention_filter\"},{\"id\":\"q2FMyNtYREOm-JWrP0Rmrw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":870,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738840120,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738840120},\"type\":\"apm_retention_filter\"},{\"id\":\"rEIhjWM_Su2UWiz-LO8R4A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":871,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738840120,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738840120},\"type\":\"apm_retention_filter\"},{\"id\":\"gY-QaBHrQ9m8VmBqLlndUA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":872,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738840121,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738840121},\"type\":\"apm_retention_filter\"},{\"id\":\"whVo4O1NSE-2sNNMflkiXQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":873,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738840121,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738840121},\"type\":\"apm_retention_filter\"},{\"id\":\"NLtZsKepQqqO9HynpEC_lA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":874,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738840121,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738840121},\"type\":\"apm_retention_filter\"},{\"id\":\"o3LNx8xpRh6cwvYdDBgE-Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":875,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738840121,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738840121},\"type\":\"apm_retention_filter\"},{\"id\":\"jFKx6EE6Q1iMYS_dCGbWFg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":876,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738926561,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738926561},\"type\":\"apm_retention_filter\"},{\"id\":\"mb73sMxKQousCCEGPmi6Pg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":877,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738926562,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738926562},\"type\":\"apm_retention_filter\"},{\"id\":\"n05c3y6qSP6MN7D1wFcloA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":878,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738926562,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738926562},\"type\":\"apm_retention_filter\"},{\"id\":\"vrfYIXZ0Smq9ekEHrg4mOQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":879,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738926562,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738926562},\"type\":\"apm_retention_filter\"},{\"id\":\"X9PKt3mbTseCfunSjdn9yQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":880,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738926563,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738926563},\"type\":\"apm_retention_filter\"},{\"id\":\"-vhIOzB0ThWwPGx1JwObUQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":881,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738926563,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738926563},\"type\":\"apm_retention_filter\"},{\"id\":\"DFWzXnnyRiG3JCA4D2CGEA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":882,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1738988095,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1738988094},\"type\":\"apm_retention_filter\"},{\"id\":\"v_uGcz9eSoOVzwmLXUfEmA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":883,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739938493,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739938493},\"type\":\"apm_retention_filter\"},{\"id\":\"-koGPu0qRRGDJ1KcbcsfjQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":884,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739963344,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739963344},\"type\":\"apm_retention_filter\"},{\"id\":\"TkO8krTbSymmLmyEK-1I2Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":885,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739963344,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739963344},\"type\":\"apm_retention_filter\"},{\"id\":\"EjG_NefCTAmx6HlSB_o1kw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":886,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739963345,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739963345},\"type\":\"apm_retention_filter\"},{\"id\":\"d5X5IE1UTe6jQ3KrjplpsQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":887,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739963345,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739963345},\"type\":\"apm_retention_filter\"},{\"id\":\"HACVfmnhRMqgDPqBv2yzvA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":888,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739963345,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739963345},\"type\":\"apm_retention_filter\"},{\"id\":\"V4HTKxZlSAWNcQdYYH8l3Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":889,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1739963345,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1739963345},\"type\":\"apm_retention_filter\"},{\"id\":\"gDMCsvc9Qq638GyYYvmUpA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":890,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740049752,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740049752},\"type\":\"apm_retention_filter\"},{\"id\":\"C2ke94e8QAee0zGRaOhOsQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":891,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740049753,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740049753},\"type\":\"apm_retention_filter\"},{\"id\":\"ebS38XbTSHC6BcBQkHMbuw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":892,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740049753,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740049753},\"type\":\"apm_retention_filter\"},{\"id\":\"u1gnRGKXT6eBNCtJriO4Qw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":893,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740049753,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740049753},\"type\":\"apm_retention_filter\"},{\"id\":\"uQFIjWsUQ2S8UOqFZ6S04A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":894,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740049753,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740049753},\"type\":\"apm_retention_filter\"},{\"id\":\"kCKliDLlSOW4yDTSrDowoQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":895,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740049754,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740049754},\"type\":\"apm_retention_filter\"},{\"id\":\"zLFJNA4nT_WC7kOVEtZHWA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":896,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740395390,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740395390},\"type\":\"apm_retention_filter\"},{\"id\":\"eX5hed0IRiODJf5R9m-yfQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":897,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740395390,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740395390},\"type\":\"apm_retention_filter\"},{\"id\":\"7q1rNf7UQ6GJ1WfczuAidA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":898,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740395391,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740395391},\"type\":\"apm_retention_filter\"},{\"id\":\"NJaTn3HLRs66VLCAZlRaBQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":899,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740395391,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740395391},\"type\":\"apm_retention_filter\"},{\"id\":\"lYDNnGIiT4uTWq3SP2OIEw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":900,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740395391,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740395391},\"type\":\"apm_retention_filter\"},{\"id\":\"L62F4veETWWwTnlT1eLyTA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":901,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740395392,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740395392},\"type\":\"apm_retention_filter\"},{\"id\":\"wC7hgd5OQN-NhzEMNEaKaQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":902,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740481868,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740481868},\"type\":\"apm_retention_filter\"},{\"id\":\"61kFVHxrRQaK4lBXkor_rQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":903,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740481869,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740481869},\"type\":\"apm_retention_filter\"},{\"id\":\"0delFn4GQIWt2CEooJD1iA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":904,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740481869,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740481869},\"type\":\"apm_retention_filter\"},{\"id\":\"1ICYrDmzQ9W5hCisDJ8w-Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":905,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740481870,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740481870},\"type\":\"apm_retention_filter\"},{\"id\":\"K4dt47qRRxyXnM0agOlIuA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":906,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740481870,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740481870},\"type\":\"apm_retention_filter\"},{\"id\":\"80cdL8ZxSvyQr1eNxuSIKA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":907,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740481871,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740481871},\"type\":\"apm_retention_filter\"},{\"id\":\"YTgcAmtkRcy1kHRDOIxpkQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":908,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740568174,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740568174},\"type\":\"apm_retention_filter\"},{\"id\":\"0XPiHBspTwW5kk_QcucXFg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":909,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740568174,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740568174},\"type\":\"apm_retention_filter\"},{\"id\":\"0Zuh7Dy9R1Gq5TMohJHvJg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":910,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740568174,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740568174},\"type\":\"apm_retention_filter\"},{\"id\":\"Jq53M3VdS3ufJC-3Ysr2-w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":911,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740568175,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740568175},\"type\":\"apm_retention_filter\"},{\"id\":\"z49dr4XPTjWmHApq9UHq1w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":912,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740568175,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740568175},\"type\":\"apm_retention_filter\"},{\"id\":\"Nb5HDx0ATLeII25tM8O_TA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":913,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740568175,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740568175},\"type\":\"apm_retention_filter\"},{\"id\":\"Tcar8dz_TRWIzvAj_dzD4A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":914,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740654562,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740654562},\"type\":\"apm_retention_filter\"},{\"id\":\"joZNtcF2QHyoPSfj22FrPA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":915,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740654563,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740654563},\"type\":\"apm_retention_filter\"},{\"id\":\"SDfcgHpbRKKUIUkm8bD_WQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":916,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740654563,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740654563},\"type\":\"apm_retention_filter\"},{\"id\":\"JaU-OskWTNqPTqirazdDvQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":917,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740654563,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740654563},\"type\":\"apm_retention_filter\"},{\"id\":\"pB8v4QpGQvGWmkGAJ8pOog\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":918,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740654563,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740654563},\"type\":\"apm_retention_filter\"},{\"id\":\"358gMjzRTlKWC-5o85e1ww\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":919,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1740654564,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1740654564},\"type\":\"apm_retention_filter\"},{\"id\":\"vmO4nnPYTH2XwMpctiIkXg\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":920,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741604936,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741604936},\"type\":\"apm_retention_filter\"},{\"id\":\"E-mz3aHOTyeUVR154Zj6zw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":921,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741604937,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741604937},\"type\":\"apm_retention_filter\"},{\"id\":\"O590oW6QRumVAYCTQypjAQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":922,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741604937,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741604937},\"type\":\"apm_retention_filter\"},{\"id\":\"1n4CrVOqSfqxJJy6D1EV5g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":923,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741604937,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741604937},\"type\":\"apm_retention_filter\"},{\"id\":\"ApkcpPmqT4WQuI2afjd2hA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":924,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741604937,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741604937},\"type\":\"apm_retention_filter\"},{\"id\":\"Hmh5cLdtS_KawoCSUoAPBA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":925,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741604938,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741604938},\"type\":\"apm_retention_filter\"},{\"id\":\"ystkMokQRHKgrWfm4-r6Jw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":926,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741691341,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741691341},\"type\":\"apm_retention_filter\"},{\"id\":\"MmzEibaxR-CNdlWDV6aM1Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":927,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741691341,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741691341},\"type\":\"apm_retention_filter\"},{\"id\":\"suBR_YUmQzyMPsrwsI9OfQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":928,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741691341,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741691341},\"type\":\"apm_retention_filter\"},{\"id\":\"psWYLZa_QLO5rn0q1QZwEw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":929,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741691341,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741691341},\"type\":\"apm_retention_filter\"},{\"id\":\"ITm-ne-WSMiopA5NNZmn6g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":930,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741691342,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741691342},\"type\":\"apm_retention_filter\"},{\"id\":\"plJtjt1_T-6fijENPvUX7w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":931,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741691342,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741691342},\"type\":\"apm_retention_filter\"},{\"id\":\"QUKMJDWWRbyUpNWYpttsDw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":932,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741778228,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741778228},\"type\":\"apm_retention_filter\"},{\"id\":\"lTSrQ7H2SBuwM-j5-u4lQw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":933,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741778229,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741778229},\"type\":\"apm_retention_filter\"},{\"id\":\"QhB_cPkySt-orbeOL8cPlA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":934,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741778230,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741778230},\"type\":\"apm_retention_filter\"},{\"id\":\"7-kifaL3TxiTLKVGWOGr3w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":935,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741778231,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741778231},\"type\":\"apm_retention_filter\"},{\"id\":\"6POnLMZNTdK3zox-liJx3g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":936,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741778231,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741778231},\"type\":\"apm_retention_filter\"},{\"id\":\"mrL4GytWR7q3f_1ZoIsnpA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":937,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741778232,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741778232},\"type\":\"apm_retention_filter\"},{\"id\":\"8JkeYYfuTXy4-Tf9y0NjtA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":938,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741864182,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741864182},\"type\":\"apm_retention_filter\"},{\"id\":\"SxYRkZssSFCzA-8Wimq6BA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":939,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741864182,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741864182},\"type\":\"apm_retention_filter\"},{\"id\":\"3CNiD_l2Qz2UhCRy1mSojw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":940,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741864183,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741864183},\"type\":\"apm_retention_filter\"},{\"id\":\"mTJW2X8ZQqGfu1aV8QLHZg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":941,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741864183,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741864183},\"type\":\"apm_retention_filter\"},{\"id\":\"O-llezEzTd22Y-WXKv22Gg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":942,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741864183,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741864183},\"type\":\"apm_retention_filter\"},{\"id\":\"zUXUnDtWTcGD0hMEnE3qOQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":943,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1741864184,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1741864184},\"type\":\"apm_retention_filter\"},{\"id\":\"KNrLoucYQvOl9nwTg1S1ew\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":944,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742382574,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742382574},\"type\":\"apm_retention_filter\"},{\"id\":\"a0wXSLIJSCuahtL5idPtXg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":945,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742382574,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742382574},\"type\":\"apm_retention_filter\"},{\"id\":\"nhVwyIghTbCz13xtp87GgQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":946,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742382575,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742382575},\"type\":\"apm_retention_filter\"},{\"id\":\"gVrDTytKRlqBzvqY2ZBpDA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":947,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742382575,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742382575},\"type\":\"apm_retention_filter\"},{\"id\":\"utnWrgQrR7WLlITLPfz4Fg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":948,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742382575,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742382575},\"type\":\"apm_retention_filter\"},{\"id\":\"bjfi4VCgS9u-P6Za6wbvng\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":949,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742382575,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742382575},\"type\":\"apm_retention_filter\"},{\"id\":\"RXW2LN1iSa6rxUeECegOHQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":950,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742469124,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742469124},\"type\":\"apm_retention_filter\"},{\"id\":\"QWmAxR25TCeJP7cpCrrMTg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":951,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742469125,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742469125},\"type\":\"apm_retention_filter\"},{\"id\":\"RwSth7hXRW-VVKVGDvMxMw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":952,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742469125,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742469125},\"type\":\"apm_retention_filter\"},{\"id\":\"LRPp1zVTREKXE4fGYvbRWQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":953,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742469126,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742469126},\"type\":\"apm_retention_filter\"},{\"id\":\"9Kw4Un2jSSW3tHilZHvuHw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":954,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742469126,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742469126},\"type\":\"apm_retention_filter\"},{\"id\":\"aQagRlDMSeCRJtJrn8mjAw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":955,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742469127,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742469127},\"type\":\"apm_retention_filter\"},{\"id\":\"EAbapz9iTjmWp1AVwV-VPA\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":956,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1742472992,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1742472992},\"type\":\"apm_retention_filter\"},{\"id\":\"6BR64ScaSxin6uqQBcUFVQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":957,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1742472993,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1742472993},\"type\":\"apm_retention_filter\"},{\"id\":\"nS7p8h_xQv-PhiV17ndQLQ\",\"attributes\":{\"name\":\"tf-TestAccApmRetentionFilter-local-1742473250\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"error_code:123\"},\"editable\":true,\"execution_order\":958,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742473256,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742473252},\"type\":\"apm_retention_filter\"},{\"id\":\"4H4BJJhwRkqVYuphuOkCTA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":959,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742814573,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742814573},\"type\":\"apm_retention_filter\"},{\"id\":\"fW_DcKc_TPCTGiJsSHl19g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":960,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742814573,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742814573},\"type\":\"apm_retention_filter\"},{\"id\":\"ZE19g_PlQc6cVtw03TKkDA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":961,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742814574,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742814574},\"type\":\"apm_retention_filter\"},{\"id\":\"v7O-lrCGQ_G71R4182dSaQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":962,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742814574,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742814574},\"type\":\"apm_retention_filter\"},{\"id\":\"FKhnOldTT0CHb1gisdsLdQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":963,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742814574,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742814574},\"type\":\"apm_retention_filter\"},{\"id\":\"jacxt2Q4TL685nBWPyeexg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":964,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1742814574,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1742814574},\"type\":\"apm_retention_filter\"},{\"id\":\"t8LuZLHYT9Su8W6jJ6X7PQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":965,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743074244,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743074244},\"type\":\"apm_retention_filter\"},{\"id\":\"LkNYU5lYRH2soG9J2zAeLw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":966,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743074244,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743074244},\"type\":\"apm_retention_filter\"},{\"id\":\"DJrGXPJbRqev3xRg1v9rNg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":967,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743074244,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743074244},\"type\":\"apm_retention_filter\"},{\"id\":\"dMBMod1BQd-IJNBxok7klQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":968,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743074245,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743074245},\"type\":\"apm_retention_filter\"},{\"id\":\"yQYIFBV-TQCCy6sLBcImcg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":969,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743074245,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743074245},\"type\":\"apm_retention_filter\"},{\"id\":\"c4xigG_2RFCA9Pq4JyQHkA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":970,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743074245,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743074245},\"type\":\"apm_retention_filter\"},{\"id\":\"XamF76GLShOaP_FivVxrgQ\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":971,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743160147,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743160147},\"type\":\"apm_retention_filter\"},{\"id\":\"x7eJd7oCQRu7FC9LmLd-ow\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":972,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743160147,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743160147},\"type\":\"apm_retention_filter\"},{\"id\":\"QeTk0KYmTB64Wi5Cn8rbhQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":973,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743160148,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743160148},\"type\":\"apm_retention_filter\"},{\"id\":\"we0QYndLTzSC96L5w1mbcQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":974,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743160148,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743160148},\"type\":\"apm_retention_filter\"},{\"id\":\"-sxwPrHgQVWPomIGu0yh9A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":975,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743160148,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743160148},\"type\":\"apm_retention_filter\"},{\"id\":\"nMOOTgeGSaqd1O208AUwdw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":976,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743160149,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743160149},\"type\":\"apm_retention_filter\"},{\"id\":\"CZDK9OikRhi1HM_tZoow2A\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":977,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743402879,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743402879},\"type\":\"apm_retention_filter\"},{\"id\":\"vKLN-5jiQteANBtp4_dVKw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":978,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743402880,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743402880},\"type\":\"apm_retention_filter\"},{\"id\":\"4EkscYqSTzOAHNK5wy2ARQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":979,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743402880,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743402880},\"type\":\"apm_retention_filter\"},{\"id\":\"0opf6VaDSQy2Pug9gpoxJw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":980,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743402880,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743402880},\"type\":\"apm_retention_filter\"},{\"id\":\"EZYgM0SCSO-U3T89224OXg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":981,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743402880,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743402880},\"type\":\"apm_retention_filter\"},{\"id\":\"8FCNgCjxSg6cHZWxvLj3Rw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":982,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743402881,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743402881},\"type\":\"apm_retention_filter\"},{\"id\":\"_My0Dc6GQ0WzDnf6bzwyjA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":983,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743419368,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743419368},\"type\":\"apm_retention_filter\"},{\"id\":\"an65UjlNQ4G5LP2Ag-7KNg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":984,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743419369,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743419369},\"type\":\"apm_retention_filter\"},{\"id\":\"EgL2zVrkT9uxp9ew7NCU8A\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":985,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743419369,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743419369},\"type\":\"apm_retention_filter\"},{\"id\":\"Mfu0uMbbRAuz5A06AfZ5LA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":986,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743419369,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743419369},\"type\":\"apm_retention_filter\"},{\"id\":\"p9ixBT7pTV-0cxJ-LA9_CQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":987,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743419369,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743419369},\"type\":\"apm_retention_filter\"},{\"id\":\"s9hK3SnsS-uBl_e9-Uqc9w\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":988,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743419370,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743419370},\"type\":\"apm_retention_filter\"},{\"id\":\"HFAhDLV5Q-Sr517-BH6ulw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":989,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743765139,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743765139},\"type\":\"apm_retention_filter\"},{\"id\":\"iGuXeU8mSsaDOzgTm2TAow\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":990,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743765140,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743765140},\"type\":\"apm_retention_filter\"},{\"id\":\"dgMQQIdwT4a4YL0vLnYIXA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":991,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743765141,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743765141},\"type\":\"apm_retention_filter\"},{\"id\":\"-D47XsNKRc-7lo5cIGINGA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":992,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743765141,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743765141},\"type\":\"apm_retention_filter\"},{\"id\":\"Frm14CEmRXK2TlLtLYJA8Q\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":993,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743765142,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743765142},\"type\":\"apm_retention_filter\"},{\"id\":\"s0t9GhJCTtCHjW6Eca9ttg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":994,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1743765143,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1743765143},\"type\":\"apm_retention_filter\"},{\"id\":\"tRGrwLiCSpqGlWEBwk0ZXw\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":995,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744024238,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744024238},\"type\":\"apm_retention_filter\"},{\"id\":\"cTxFMyBxSjWAnD6wUkMpPg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":996,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744024238,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744024238},\"type\":\"apm_retention_filter\"},{\"id\":\"5h4mAKnBSPC-6M5l0Envcw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":997,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744024239,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744024239},\"type\":\"apm_retention_filter\"},{\"id\":\"o5javrdwSNWJm8vEW6iIJA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":998,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744024241,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744024241},\"type\":\"apm_retention_filter\"},{\"id\":\"8BCULx4AQhum2baDWADp1g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":999,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744024241,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744024241},\"type\":\"apm_retention_filter\"},{\"id\":\"0rXSeZGfQQi3cyw--rUBtw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":1000,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744024242,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744024242},\"type\":\"apm_retention_filter\"},{\"id\":\"gAg0CuwSSI6Vk1RPh05UNA\",\"attributes\":{\"name\":\"my retention filter\",\"rate\":1.0,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"editable\":true,\"execution_order\":1001,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744110568,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744110568},\"type\":\"apm_retention_filter\"},{\"id\":\"TLF7-54_QMeGCbR_XPZIuQ\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":1002,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744110569,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744110569},\"type\":\"apm_retention_filter\"},{\"id\":\"zG_a20AKSN26I5rsKvQLKg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":1003,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744110569,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744110569},\"type\":\"apm_retention_filter\"},{\"id\":\"6N4JTrAcTxWpGf3aegpHIg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":1004,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744110569,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744110569},\"type\":\"apm_retention_filter\"},{\"id\":\"HITFDC_GQb6-0kUFh9kLEg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":1005,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744110569,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744110569},\"type\":\"apm_retention_filter\"},{\"id\":\"lg0kw2edTd6B9oVMQNEEcw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":1006,\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_at\":1744110570,\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":1744110570},\"type\":\"apm_retention_filter\"},{\"id\":\"WvrVucoORM6ZPyIkbmOrCg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"execution_order\":1007,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111971,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111971},\"type\":\"apm_retention_filter\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/WvrVucoORM6ZPyIkbmOrCg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all APM retention filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2023-09-25T11:39:25.400Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "jdZrilSJQLqzb6Cu7aub9Q", + "type": "apm_retention_filter" + }, + { + "id": "7RBOb7dLSYWI01yc3pIH8w", + "type": "apm_retention_filter" + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/apm/config/retention-filters-execution-order", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Re-order retention filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:53.767Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "demo retention filter", + "rate": 0.9 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"JL7QU9ejR-C6t9rXeyHrIg\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111974,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111974},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 1.9 + }, + "id": "test-id", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/apm/config/retention-filters/JL7QU9ejR-C6t9rXeyHrIg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid Pipeline\",\"'rate' must exist and be between 0 and 1\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/JL7QU9ejR-C6t9rXeyHrIg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:55.355Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 0.9 + }, + "id": "not_found", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/apm/config/retention-filters/not_found", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"retention filter with id: 'not_found' not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:55.772Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "demo retention filter", + "rate": 0.9 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9GCsJn-gSde5fIBpwk1P0g\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111976,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111976},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 0.9 + }, + "id": "test-id", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/apm/config/retention-filters/9GCsJn-gSde5fIBpwk1P0g", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9GCsJn-gSde5fIBpwk1P0g\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111976,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111976},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/9GCsJn-gSde5fIBpwk1P0g", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2025-04-08T11:32:57.533Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "demo retention filter", + "rate": 0.9 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"yf41wyfPQ0m1RWfI9mYMLw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"trace_rate\":0.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111977,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111977},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 0.9, + "trace_rate": 1 + }, + "id": "test-id", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/apm/config/retention-filters/yf41wyfPQ0m1RWfI9mYMLw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"yf41wyfPQ0m1RWfI9mYMLw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"trace_rate\":1.0,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"editable\":true,\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1744111978,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1744111977},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/yf41wyfPQ0m1RWfI9mYMLw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a retention filter with trace rate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2023-09-19T10:30:07.168Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "demo retention filter", + "rate": 0.9 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7-OGpPS-SvyZKxEt0p01kA\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1695119407,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1695119407,\"editable\":true},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 1.9 + }, + "id": "test-id", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/apm/config/retention-filters/7-OGpPS-SvyZKxEt0p01kA", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid Pipeline\",\"'rate' must exist and be between 0 and 1\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/7-OGpPS-SvyZKxEt0p01kA", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a retention filters returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2023-09-18T11:29:51.792Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 0.9 + }, + "id": "not_found", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/apm/config/retention-filters/not_found", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"retention filter with id: 'not_found' not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a retention filters returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "APM Retention Filters", + "frozen_at": "2023-09-19T10:11:36.764Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "demo retention filter", + "rate": 0.9 + }, + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/retention-filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"CDqOdN7wRGahYAPVsdAvfw\",\"attributes\":{\"name\":\"demo retention filter\",\"rate\":0.9,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1695118296,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1695118296,\"editable\":true},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "filter": { + "query": "@_top_level:1 test:service-demo" + }, + "filter_type": "spans-sampling-processor", + "name": "test", + "rate": 0.9 + }, + "id": "test-id", + "type": "apm_retention_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/apm/config/retention-filters/CDqOdN7wRGahYAPVsdAvfw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"CDqOdN7wRGahYAPVsdAvfw\",\"attributes\":{\"name\":\"test\",\"rate\":0.9,\"enabled\":true,\"filter_type\":\"spans-sampling-processor\",\"filter\":{\"query\":\"@_top_level:1 test:service-demo\"},\"modified_by\":\"frog@datadoghq.com\",\"modified_at\":1695118296,\"created_by\":\"frog@datadoghq.com\",\"created_at\":1695118296,\"editable\":true},\"type\":\"apm_retention_filter\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/retention-filters/CDqOdN7wRGahYAPVsdAvfw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a retention filters returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/app-builder.json b/test-server-data/v2/app-builder.json new file mode 100644 index 0000000000..1b6ceeb199 --- /dev/null +++ b/test-server-data/v2/app-builder.json @@ -0,0 +1,5938 @@ +{ + "feature": "App Builder", + "recordings": [ + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:00.619Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "This is a bad example app", + "queries": [], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"missing required field\",\"source\":{\"pointer\":\"/data/attributes/name\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create App returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:00.807Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b6becff0-4703-4724-b92a-1445df194b75\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/b6becff0-4703-4724-b92a-1445df194b75", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b6becff0-4703-4724-b92a-1445df194b75\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create App returns \"Created\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:51:47.462Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Adds new dashboard widgets and a few bug fixes.", + "title": "Release v1.2 to production" + }, + "type": "publishRequest" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/publish-request", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"c9247d40-2291-4860-90ac-9c2441ff23db\",\"title\":\"app not found\",\"detail\":\"app with id 7addb29b-f935-472c-ae79-d1963979a23e not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create Publish Request returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:01.264Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"app not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:01.358Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"de4f1fa8-bd84-4d67-a245-507a500f12e1\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/de4f1fa8-bd84-4d67-a245-507a500f12e1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"de4f1fa8-bd84-4d67-a245-507a500f12e1\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/de4f1fa8-bd84-4d67-a245-507a500f12e1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"app not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete App returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:01.993Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "aea2ed17-b45f-40d0-ba59-c86b7972c901", + "type": "appDefinitions" + }, + { + "id": "f69bb8be-6168-4fe7-a30d-370256b6504a", + "type": "appDefinitions" + }, + { + "id": "ab1ed73e-13ad-4426-b0df-a0ff8876a088", + "type": "appDefinitions" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"one or more apps not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Multiple Apps returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:02.105Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f33597bb-5c91-497c-ba26-68b7493905c0\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "f33597bb-5c91-497c-ba26-68b7493905c0", + "type": "appDefinitions" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"f33597bb-5c91-497c-ba26-68b7493905c0\",\"type\":\"appDefinitions\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/f33597bb-5c91-497c-ba26-68b7493905c0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"app not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Multiple Apps returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:02.544Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"84b262f9-ae08-4be9-9050-93ff89ccd474\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/apps/84b262f9-ae08-4be9-9050-93ff89ccd474", + "query": [ + [ + "version", + "31" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"app version not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Gone", + "status": 410 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/84b262f9-ae08-4be9-9050-93ff89ccd474", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"84b262f9-ae08-4be9-9050-93ff89ccd474\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get App returns \"Gone\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:03.071Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"app not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:03.186Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"55b4bd3f-a1e9-4595-95c8-ef3741481b97\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/apps/55b4bd3f-a1e9-4595-95c8-ef3741481b97", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"55b4bd3f-a1e9-4595-95c8-ef3741481b97\",\"type\":\"appDefinitions\",\"attributes\":{\"components\":[{\"events\":[],\"name\":\"grid0\",\"properties\":{\"backgroundColor\":\"default\",\"children\":[{\"events\":[],\"name\":\"gridCell0\",\"properties\":{\"children\":[{\"events\":[],\"name\":\"text0\",\"properties\":{\"content\":\"# Cat Facts\",\"contentType\":\"markdown\",\"isVisible\":true,\"textAlign\":\"left\",\"verticalAlign\":\"top\"},\"type\":\"text\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":5,\"width\":4,\"x\":0,\"y\":0}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell2\",\"properties\":{\"children\":[{\"events\":[],\"name\":\"table0\",\"properties\":{\"columns\":[{\"dataPath\":\"fact\",\"header\":\"fact\",\"id\":\"0ae2ae9e-0280-4389-83c6-1c5949f7e674\",\"isHidden\":false},{\"dataPath\":\"length\",\"header\":\"length\",\"id\":\"c9048611-0196-4a00-9366-1ef9e3ec0408\",\"isHidden\":true},{\"dataPath\":\"Due Date\",\"disableSortBy\":false,\"formatter\":{\"format\":\"LARGE_WITHOUT_TIME\",\"type\":\"formatted_time\"},\"header\":\"Unused Old Column\",\"id\":\"8fa9284b-7a58-4f13-9959-57b7d8a7fe8f\",\"isDeleted\":true}],\"data\":\"${fetchFacts?.outputs?.body?.data}\",\"globalFilter\":false,\"isLoading\":\"${fetchFacts?.isLoading}\",\"isScrollable\":\"vertical\",\"isSubRowsEnabled\":false,\"isVisible\":true,\"isWrappable\":false,\"pageSize\":\"${pageSize?.value}\",\"paginationType\":\"server_side\",\"rowButtons\":[],\"summary\":true,\"totalCount\":\"${fetchFacts?.outputs?.body?.total}\"},\"type\":\"table\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":96,\"width\":12,\"x\":0,\"y\":5}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell1\",\"properties\":{\"children\":[{\"events\":[],\"name\":\"text1\",\"properties\":{\"content\":\"## Random Fact\\n\\n${randomFact?.outputs?.fact}\",\"contentType\":\"markdown\",\"isVisible\":true,\"textAlign\":\"left\",\"verticalAlign\":\"top\"},\"type\":\"text\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":16,\"width\":12,\"x\":0,\"y\":101}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell3\",\"properties\":{\"children\":[{\"events\":[{\"name\":\"click\",\"type\":\"setStateVariableValue\",\"value\":\"${pageSize?.value + 1}\",\"variableName\":\"pageSize\"}],\"name\":\"button0\",\"properties\":{\"iconLeft\":\"angleUp\",\"iconRight\":\"\",\"isBorderless\":false,\"isDisabled\":false,\"isLoading\":false,\"isPrimary\":true,\"isVisible\":true,\"label\":\"Increase Page Size\",\"level\":\"default\"},\"type\":\"button\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":4,\"width\":2,\"x\":10,\"y\":134}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell4\",\"properties\":{\"children\":[{\"events\":[{\"name\":\"click\",\"type\":\"setStateVariableValue\",\"value\":\"${pageSize?.value - 1}\",\"variableName\":\"pageSize\"}],\"name\":\"button1\",\"properties\":{\"iconLeft\":\"angleDown\",\"iconRight\":\"\",\"isBorderless\":false,\"isDisabled\":false,\"isLoading\":false,\"isPrimary\":true,\"isVisible\":true,\"label\":\"Decrease Page Size\",\"level\":\"default\"},\"type\":\"button\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":4,\"width\":2,\"x\":10,\"y\":138}}},\"type\":\"gridCell\"}]},\"type\":\"grid\"}],\"description\":\"This is a slightly complicated example app that fetches and displays cat facts\",\"favorite\":false,\"name\":\"Example Cat Facts Viewer\",\"queries\":[{\"id\":\"92ff0bb8-553b-4f31-87c7-ef5bd16d47d5\",\"name\":\"fetchFacts\",\"type\":\"action\",\"properties\":{\"spec\":{\"connectionId\":\"5e63f4a8-4ce6-47de-ba11-f6617c1d54f3\",\"fqn\":\"com.datadoghq.http.request\",\"inputs\":{\"url\":\"https://catfact.ninja/facts\",\"urlParams\":[{\"key\":\"limit\",\"value\":\"${pageSize.value.toString()}\"},{\"key\":\"page\",\"value\":\"${(table0.pageIndex + 1).toString()}\"}],\"verb\":\"GET\"}}}},{\"id\":\"afd03c81-4075-4432-8618-ba09d52d2f2d\",\"name\":\"pageSize\",\"type\":\"stateVariable\",\"properties\":{\"defaultValue\":\"${20}\"}},{\"id\":\"0fb22859-47dc-4137-9e41-7b67d04c525c\",\"name\":\"randomFact\",\"type\":\"dataTransform\",\"properties\":{\"outputs\":\"${(() =\\u003e {const facts = fetchFacts.outputs.body.data\\nreturn facts[Math.floor(Math.random()*facts.length)]\\n})()}\"}}],\"rootInstanceName\":\"grid0\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":15479137,\"user_uuid\":\"b3f98453-b289-11ef-a4e9-d6d283f92d91\",\"user_name\":\"oliver.li@datadoghq.com\",\"version\":1,\"updated_since_deployment\":false,\"created_at\":\"2025-02-14T16:45:03.266046Z\",\"updated_at\":\"2025-02-14T16:45:03.266046Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/55b4bd3f-a1e9-4595-95c8-ef3741481b97", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"55b4bd3f-a1e9-4595-95c8-ef3741481b97\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get App returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T17:39:16.852Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/blueprint/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"75010b80-a44e-47bd-b903-e38f79efce20\",\"title\":\"blueprint not found\",\"detail\":\"blueprint with id 00000000-0000-0000-0000-000000000001 not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get Blueprint returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T17:39:17.553Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/blueprints/integration-id/aws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get Blueprints by Integration ID returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T17:39:18.076Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/blueprints/slugs/aws-service-manager", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get Blueprints by Slugs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:51:53.216Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"4dfd53b4-6987-4868-b330-af0535219c61\",\"title\":\"app not found\",\"detail\":\"app with id 7addb29b-f935-472c-ae79-d1963979a23e not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "List App Versions returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:51:53.386Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d928ecbc-acfe-4126-96f6-092fa0a01416\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/apps/d928ecbc-acfe-4126-96f6-092fa0a01416/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": [{\"id\": \"98cd3a5a-644d-41fd-8ffa-e58e21e8e21b\", \"type\": \"appVersions\", \"attributes\": {\"app_id\": \"d928ecbc-acfe-4126-96f6-092fa0a01416\", \"created_at\": \"2026-05-18T19:51:53.59976Z\", \"has_ever_been_published\": false, \"updated_at\": \"2026-05-18T19:51:53.59976Z\", \"user_id\": 1445416, \"user_name\": \"\", \"user_uuid\": \"3ad549bf-eba0-11e9-a77a-0705486660d0\", \"version\": 1}}], \"meta\": {\"page\": {\"totalCount\": 1, \"totalFilteredCount\": 0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/d928ecbc-acfe-4126-96f6-092fa0a01416", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": {\"id\": \"d928ecbc-acfe-4126-96f6-092fa0a01416\", \"type\": \"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List App Versions returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:03.738Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"b1c2bf4d-f987-4306-8dcd-a48bedecf19e\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-02-14T16:44:58.965378Z\",\"updated_at\":\"2025-02-14T16:44:58.965378Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}},{\"id\":\"31bfe961-ba29-4c43-85d8-f7d02afdb9a3\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-01-29T15:53:32.324305Z\",\"updated_at\":\"2025-01-29T15:53:32.324305Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}},{\"id\":\"2363c6a3-9077-4c58-a7e2-39f27ca42e02\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-01-23T00:18:13.328203Z\",\"updated_at\":\"2025-01-23T00:18:13.328203Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}},{\"id\":\"a5557ecf-17c6-43dc-b20f-6c77869777c1\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-01-22T17:17:39.807236Z\",\"updated_at\":\"2025-01-22T17:17:39.807236Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}},{\"id\":\"83ca3945-3c9f-4eb9-b46a-992a97f1acf3\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-01-22T13:16:57.34142Z\",\"updated_at\":\"2025-01-22T13:16:57.34142Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}},{\"id\":\"9e02b865-585b-4da0-b2c3-aab734317e93\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-01-22T10:47:57.329697Z\",\"updated_at\":\"2025-01-22T10:47:57.329697Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}},{\"id\":\"9ccf8f9b-d9ae-43ef-b1c6-c85e075a3ca7\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-01-21T23:30:39.902639Z\",\"updated_at\":\"2025-01-21T23:30:40.166756Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}},{\"id\":\"d21c6da5-cb04-4ee6-aa7d-3fe6b2fd0be3\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-01-21T22:36:50.399181Z\",\"updated_at\":\"2025-01-21T22:36:50.399181Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}},{\"id\":\"02343a47-9092-40a7-9464-aade9d617050\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-01-20T23:17:39.895098Z\",\"updated_at\":\"2025-01-20T23:17:40.19356Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}},{\"id\":\"be847238-5f04-4e50-9cce-facc0b8fbb09\",\"type\":\"appDefinitions\",\"attributes\":{\"description\":\"\",\"favorite\":false,\"name\":\"[synthetics] app name 0123456789\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":7571471,\"user_uuid\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"user_name\":\"01347f51-3fcd-11ef-95dd-a65df5ee2843\",\"version\":0,\"updated_since_deployment\":false,\"created_at\":\"2025-01-20T01:48:05.39422Z\",\"updated_at\":\"2025-01-20T01:48:05.39422Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}}],\"meta\":{\"page\":{\"totalCount\":30,\"totalFilteredCount\":30}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Apps returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T17:39:19.135Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/blueprints", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"faeef8bc-d9eb-43a1-b829-71782380279d\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-08-18T16:20:42.182618Z\",\"description\":\"Manage AWS Services from a single unified interface.\",\"name\":\"AWS Service Management Console\",\"slug\":\"aws_service_management_console\",\"tags\":[\"aws\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.organizations.listAccounts\",\"updated_at\":\"2026-05-18T17:02:03.016145Z\"}},{\"id\":\"b2ba39de-d111-4940-b600-df6bb52661dc\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-08-15T00:00:19.017104Z\",\"description\":\"Manage projects, merge requests, commits, pipelines, jobs, branches, and deployments all from a unified interface within Datadog.\",\"name\":\"GitLab Manager\",\"slug\":\"gitlab_manager\",\"tags\":[\"software_delivery\"],\"tile_background\":\"search-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.gitlab.projects.listProjects\",\"updated_at\":\"2026-05-18T17:01:20.81581Z\"}},{\"id\":\"398529ec-6c34-4e6d-bccf-5a34be7e6e1c\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-10-15T19:11:36.098607Z\",\"description\":\"Unifying Jira, Confluence, GitHub, and Datadog Incidents to highlight team and developer contribution with AI summaries.\",\"name\":\"Development Insights\",\"slug\":\"development-insights\",\"tags\":[\"datadog\",\"uses_ai\"],\"tile_background\":\"search-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.dd.apps_datastore.getDatastoreItem\",\"updated_at\":\"2026-05-18T17:02:03.557012Z\"}},{\"id\":\"1a9239ca-1d11-48c0-ad23-0f8ca00cd321\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-10-08T17:07:54.77105Z\",\"description\":\"Unified device visibility. Smarter investigations\",\"name\":\"Asset Investigation App\",\"slug\":\"asset-intel-app\",\"tags\":[\"datadog\",\"uses_ai\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.dd.apps_datastore.listDatastoreItems\",\"updated_at\":\"2026-05-18T17:02:03.371529Z\"}},{\"id\":\"d190e5cd-412c-4857-9993-6e98a478a64e\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-06-30T18:02:02.519433Z\",\"description\":\"Manage Okta users, groups, and roles directly from Datadog in a secure, unified interface.\",\"name\":\"Manage Okta Users, Groups, and Roles\",\"slug\":\"manage-okta-user-groups-roles\",\"tags\":[\"security\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.okta.add_user_to_group\",\"updated_at\":\"2026-05-18T17:02:15.156458Z\"}},{\"id\":\"11feb11b-85d9-4e89-9f5c-0c96c04da5bc\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-06-30T18:02:02.176559Z\",\"description\":\"Scaffolder app can be used for creating new software components from template repositories. It takes inputs from developers and generates a new repository or a PR based on the provided data and the template.\",\"name\":\"Scaffold New Project in GitHub\",\"slug\":\"scaffold-new-project-in-github\",\"tags\":[\"software_delivery\"],\"tile_background\":\"table-with-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.github.searchRepositories\",\"updated_at\":\"2026-05-18T17:02:09.340524Z\"}},{\"id\":\"6c5b24ef-c303-42ec-a305-351f5a1026cf\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:43.381741Z\",\"description\":\"Monitor Kubernetes resources, restart deployments, delete pods, and create tickets or incidents\",\"name\":\"Manage Kubernetes Deployments\",\"slug\":\"manage-kubernetes-deployments\",\"tags\":[\"kubernetes\",\"private_action\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.kubernetes.apps.listDeployment\",\"updated_at\":\"2026-05-18T17:01:26.003985Z\"}},{\"id\":\"dd0adb73-dd5f-4cb5-a22d-41946755958e\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-29T18:37:39.261927Z\",\"description\":\"Stop RDS clusters \\u0026 instances and reduce your cost\",\"name\":\"Manage RDS Clusters \\u0026 Instances\",\"slug\":\"rds_console\",\"tags\":[\"aws\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.rds.list_db_instances\",\"updated_at\":\"2026-05-18T17:02:04.353815Z\"}},{\"id\":\"8750a7cb-f076-474f-9f66-8d3f7c02ad3f\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-08T15:16:02.674864Z\",\"description\":\"Analyze your metrics in Datadog and create threshold alert monitors\",\"name\":\"Explore Metrics \\u0026 Create Monitors\",\"slug\":\"datadog_metrics_and_monitors\",\"tags\":[\"datadog\"],\"tile_background\":\"bento-box-table\",\"tile_icon_action_fqn\":\"com.datadoghq.dd.metrics.listMetrics\",\"updated_at\":\"2026-05-18T17:02:03.452603Z\"}},{\"id\":\"17127e2b-ea85-4c3a-ba3e-0f1dfa0c941a\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-30T21:11:28.731422Z\",\"description\":\"Fill out the form to generate the terraform for a new S3 bucket in Github\",\"name\":\"Create S3 Bucket with a Terraform PR\",\"slug\":\"create-new-s3-bucket-terraform-pr\",\"tags\":[\"software_delivery\"],\"tile_background\":\"table-with-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.github.searchRepositories\",\"updated_at\":\"2026-05-18T17:02:09.266218Z\"}},{\"id\":\"dc4075af-5e50-402f-abb2-6041db59d378\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-30T21:11:28.759103Z\",\"description\":\"View open pull requests from your team in a table with an AI-generated summary of the progress.\",\"name\":\"GitHub PR Summarizer\",\"slug\":\"github-pr-summarizer\",\"tags\":[\"uses_ai\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.github.searchRepositories\",\"updated_at\":\"2026-05-18T17:02:09.306954Z\"}},{\"id\":\"dc1bcad2-1eb7-456f-a32b-60e8ad7adf71\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-28T21:17:42.010916Z\",\"description\":\"Start, stop or reboot your AWS EC2 instances\",\"name\":\"Manage EC2 Instances\",\"slug\":\"ec2_instance_manager\",\"tags\":[\"aws\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.ec2.describe_ec2_instances\",\"updated_at\":\"2026-05-18T17:02:03.602628Z\"}},{\"id\":\"8d6b6284-10ba-42d0-829c-800e7c396a3b\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-30T08:38:29.623958Z\",\"description\":\"Peek, purge or redrive SQS queues\",\"name\":\"Manage SQS Queues\",\"slug\":\"sqs-queue-manager\",\"tags\":[\"aws\"],\"tile_background\":\"bento-box-table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.sqs.list_queues_with_attributes\",\"updated_at\":\"2026-05-18T17:02:02.47498Z\"}},{\"id\":\"be6d5e27-a5a8-406a-9b0c-b779f6a94728\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:46.237126Z\",\"description\":\"Create, view, or toggle on or off LaunchDarkly feature flags\",\"name\":\"LaunchDarkly Feature Flag Manager\",\"slug\":\"launchdarkly_feature_flag_manager\",\"tags\":[\"software_delivery\"],\"tile_background\":\"bento-box-table\",\"tile_icon_action_fqn\":\"com.datadoghq.launchdarkly.listProjects\",\"updated_at\":\"2026-05-18T17:01:49.464175Z\"}},{\"id\":\"7566d028-b111-47a8-8ee2-b42efbd95edb\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:43.058949Z\",\"description\":\"View, retry, or cancel deployments in Gitlab\",\"name\":\"Manage Gitlab Deployments\",\"slug\":\"gitlab-deployment-manager\",\"tags\":[\"software_delivery\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.gitlab.getProjectDeployments\",\"updated_at\":\"2026-05-18T17:01:20.761242Z\"}},{\"id\":\"dddf3b1a-47a4-400a-8485-321ad58f2779\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-30T08:38:30.229357Z\",\"description\":\"Create, view, and manage incidents in ServiceNow\",\"name\":\"Manage ServiceNow Incidents\",\"slug\":\"servicenow_incident_manager\",\"tags\":[\"paging\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.servicenow.listIncidents\",\"updated_at\":\"2026-05-18T17:02:17.797196Z\"}},{\"id\":\"df97f5ff-0ce8-4def-b1fb-151b427fc82d\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-09T16:50:07.302357Z\",\"description\":\"Personalized developer homepage to prioritize tasks across tools\",\"name\":\"Developer Homepage\",\"slug\":\"developer-homepage\",\"tags\":[\"datadog\",\"uses_ai\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.dd.service_catalog.getServicePagerdutyOncall\",\"updated_at\":\"2026-05-18T17:02:03.484343Z\"}},{\"id\":\"f290ac0f-ded8-4143-bb94-3dbe20f883d5\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-05T19:50:19.410003Z\",\"description\":\"Explore mobile user sessions, using Luciq's observability tools\",\"name\":\"Explore Luciq Sessions\",\"slug\":\"instabug-sessions-explorer\",\"tags\":[\"observability\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.http.request\",\"updated_at\":\"2026-05-18T17:01:48.606352Z\"}},{\"id\":\"a7041749-fb41-451b-880f-10eddcdbbe1c\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:48.306432Z\",\"description\":\"View incidents across pages, update them, follow past updates, and create new incidents on Statuspage \u2014 all directly from Datadog.\",\"name\":\"Manage Statuspage Incidents\",\"slug\":\"manage-statuspage-incidents\",\"tags\":[\"software_delivery\"],\"tile_background\":\"search-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.statuspage.updateComponentStatus\",\"updated_at\":\"2026-05-18T17:02:18.402711Z\"}},{\"id\":\"8839570e-1711-43e8-86f2-679f5ae0f8f9\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-30T21:11:28.769943Z\",\"description\":\"Complete the form to provision a new EKS Cluster using Terraform\",\"name\":\"Provision EKS Cluster\",\"slug\":\"provision-eks-cluster\",\"tags\":[\"software_delivery\"],\"tile_background\":\"table-with-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.github.createOrUpdateFile\",\"updated_at\":\"2026-05-18T17:02:09.329157Z\"}},{\"id\":\"7f3fb131-0ff5-48d9-a997-87f99ef8b364\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-30T21:11:28.764126Z\",\"description\":\"Select a service and trigger a restart in Github Workflows\",\"name\":\"Restart Service With Github Actions\",\"slug\":\"github_actions_restart_service\",\"tags\":[\"software_delivery\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.github.actions.triggerWorkflowRun\",\"updated_at\":\"2026-05-18T17:02:09.318622Z\"}},{\"id\":\"39ff9db2-aeed-4552-8080-d6a13fbfad74\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-29T18:37:39.278756Z\",\"description\":\"Create a new RDS DB instance from a form\",\"name\":\"Provision RDS Instance\",\"slug\":\"rds_provision_instance\",\"tags\":[\"aws\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.rds.createRdsDbInstance\",\"updated_at\":\"2026-05-18T17:02:04.37742Z\"}},{\"id\":\"0b110831-0834-4898-84dc-292153807df1\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-29T18:37:39.21136Z\",\"description\":\"View and manage Jira tickets by board, status, or sprint\",\"name\":\"Manage Jira Tickets\",\"slug\":\"jira-ticket-manager\",\"tags\":[\"software_delivery\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.jira.create_issue\",\"updated_at\":\"2026-05-18T17:02:04.247226Z\"}},{\"id\":\"111cc4d5-1fdf-47aa-8bb1-25cc8ac7dff2\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-29T18:37:39.286928Z\",\"description\":\"Explore S3 files and view their content\",\"name\":\"Explore S3 Files\",\"slug\":\"s3_file_explorer\",\"tags\":[\"aws\"],\"tile_background\":\"bento-box-table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.s3.list_s3_buckets\",\"updated_at\":\"2026-05-18T17:02:02.170177Z\"}},{\"id\":\"773fce74-eec7-4170-a222-53e24261f812\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-29T18:37:39.307523Z\",\"description\":\"Fill out the form to generate the terraform for new monitors for a service.\",\"name\":\"Create Monitors for New Service\",\"slug\":\"service-monitor-creation\",\"tags\":[\"datadog\"],\"tile_background\":\"table-with-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.dd.service_catalog.listServiceDefinitions\",\"updated_at\":\"2026-05-18T17:02:04.388154Z\"}},{\"id\":\"b899cebf-0b56-4e6e-89c8-01afdb19e781\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-30T21:11:28.742329Z\",\"description\":\"View opened, closed, and assigned pull requests to a specific user\",\"name\":\"Github PR Pipeline\",\"slug\":\"github-pr-dashboard\",\"tags\":[\"software_delivery\"],\"tile_background\":\"two-input-table\",\"tile_icon_action_fqn\":\"com.datadoghq.github.searchRepositories\",\"updated_at\":\"2026-05-18T17:02:09.287376Z\"}},{\"id\":\"635fc8c5-0330-40e6-a859-b8fc3d76e331\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:46.466284Z\",\"description\":\"Monitor the status of PagerDuty services and trigger incidents when needed\",\"name\":\"Manage PagerDuty Services\",\"slug\":\"pagerduty_service_manager\",\"tags\":[\"paging\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.pagerduty.listServices\",\"updated_at\":\"2026-05-18T17:02:15.911013Z\"}},{\"id\":\"8ada5164-b533-462e-80db-47e7d0fbed0d\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-28T21:17:42.02843Z\",\"description\":\"Select from your clusters and services, and easily scale tasks up or down\",\"name\":\"Manage ECS Tasks\",\"slug\":\"ecs_task_manager\",\"tags\":[\"aws\"],\"tile_background\":\"three-callout-prompt\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.ecs.listEcsClusters\",\"updated_at\":\"2026-05-18T17:02:00.300159Z\"}},{\"id\":\"e2f2ff93-709c-4eae-95ab-cbc0f2bc87f0\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-06-23T19:08:48.624684Z\",\"description\":\"List, explore details and re-run lambda functions\",\"name\":\"Manage Lambda Functions\",\"slug\":\"lambda-function-manager\",\"tags\":[\"aws\"],\"tile_background\":\"table-with-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.lambda.listAWSLambdaFunction\",\"updated_at\":\"2026-05-18T17:02:01.047167Z\"}},{\"id\":\"07f8536d-6342-4f30-8254-0c7b019707f0\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-30T08:38:30.332498Z\",\"description\":\"Manage and update Statuspage components across pages.\",\"name\":\"Manage Statuspage Components\",\"slug\":\"statuspage-component-manager\",\"tags\":[\"software_delivery\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.statuspage.listIncidents\",\"updated_at\":\"2026-05-18T17:02:18.425899Z\"}},{\"id\":\"53d32e20-034c-4d46-ad54-f71f83ae7850\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:47.563531Z\",\"description\":\"Manage, update or delete your AWS EKS clusters\",\"name\":\"Manage AWS EKS\",\"slug\":\"manage-aws-eks\",\"tags\":[\"aws\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.eks.updateClusterConfig\",\"updated_at\":\"2026-05-18T17:02:04.264646Z\"}},{\"id\":\"8b8aa818-4ed3-40f5-b6ca-dd891c75f317\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:46.449263Z\",\"description\":\"Trigger, acknowledge and resolve incidents from PagerDuty.\",\"name\":\"Manage PagerDuty Incidents\",\"slug\":\"pagerduty_incident_manager\",\"tags\":[\"paging\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.pagerduty.resolve_incident\",\"updated_at\":\"2026-05-18T17:02:15.703635Z\"}},{\"id\":\"d4eac482-3518-412b-8424-31935f6fc1b6\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-29T18:37:39.247502Z\",\"description\":\"Enter a prompt to find the most likely causes of your regression\",\"name\":\"Find PR Regressions\",\"slug\":\"pr_regression_finder\",\"tags\":[\"uses_ai\"],\"tile_background\":\"search-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.openai.generateText\",\"updated_at\":\"2026-05-18T17:02:04.329232Z\"}},{\"id\":\"5a617cdf-6d0c-4fc5-a26f-e123e37e1438\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:47.572068Z\",\"description\":\"List a Datastore in your app and manage its CRUD (Create, Read, Update, Delete) operations directly from App Builder.\",\"name\":\"Manage Datastore\",\"slug\":\"manage-datastore\",\"tags\":[\"datadog\"],\"tile_background\":\"search-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.dd.apps_datastore.bulkPutDatastoreItem\",\"updated_at\":\"2026-05-18T17:02:04.277122Z\"}},{\"id\":\"8caf15ac-f175-4b46-b867-dfbd73f5d1ba\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-29T18:37:39.237759Z\",\"description\":\"Track on-call engineers across different teams and services, and create incidents in OpsGenie\",\"name\":\"Manage OpsGenie On-call\",\"slug\":\"manage-ops-genie-on-call\",\"tags\":[\"paging\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.opsgenie.createIncident\",\"updated_at\":\"2026-05-18T17:02:04.302057Z\"}},{\"id\":\"88a2c35b-31f4-4420-b6a0-f3da6a1fd740\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-14T02:00:39.687547Z\",\"description\":\"Create new S3 buckets directly in AWS.\",\"name\":\"Create S3 Bucket\",\"slug\":\"create-new-s3-bucket\",\"tags\":[\"aws\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.s3.create_s3_bucket\",\"updated_at\":\"2026-05-18T17:02:02.159767Z\"}},{\"id\":\"eef5812e-45ef-47a4-9570-4c6b7a11bc4f\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:43.692089Z\",\"description\":\"Prompt OpenAI and get responses from a text inputs\",\"name\":\"Prompt OpenAI\",\"slug\":\"openai-prompter\",\"tags\":[\"uses_ai\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.openai.generateText\",\"updated_at\":\"2026-05-18T17:01:29.850296Z\"}},{\"id\":\"f333c674-1010-4bf6-9b7b-215f6c88f878\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:46.458292Z\",\"description\":\"Track on-call engineers across different teams and services\",\"name\":\"Manage PagerDuty On-call\",\"slug\":\"pagerduty_oncall_manager\",\"tags\":[\"paging\"],\"tile_background\":\"people-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.pagerduty.listServices\",\"updated_at\":\"2026-05-18T17:02:15.724318Z\"}},{\"id\":\"5761abf4-771d-42e6-9898-5eae6465e94c\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-29T18:37:39.317021Z\",\"description\":\"Manage, start, restart, and stop your Azure Web Apps\",\"name\":\"Manage Azure Web Apps\",\"slug\":\"manage-azure-web-apps\",\"tags\":[\"azure\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.azure.apps.restartWebApp\",\"updated_at\":\"2026-05-18T17:02:04.40436Z\"}},{\"id\":\"858a49c0-7781-46ef-b4e0-7fc7c96a311b\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-06-23T19:08:48.677682Z\",\"description\":\"View state machines and stop, start or pause their associated executions\",\"name\":\"Manage Step Functions\",\"slug\":\"step-functions-console\",\"tags\":[\"aws\"],\"tile_background\":\"table-with-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.stepfunctions.listStateMachines\",\"updated_at\":\"2026-05-18T17:02:02.699196Z\"}},{\"id\":\"4c19fab0-3269-46e4-a2dd-365ba5bb2619\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-28T21:17:42.057615Z\",\"description\":\"List, start, restart, power off and deallocate your VMs\",\"name\":\"Manage Azure Virtual Machines\",\"slug\":\"azure_vms_management_console\",\"tags\":[\"azure\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.azure.vm.listSubscriptionVirtualMachines\",\"updated_at\":\"2026-05-18T17:02:06.221711Z\"}},{\"id\":\"a276b5f5-c6c0-4329-af64-d630d25593dc\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-28T21:17:42.000627Z\",\"description\":\"View DynamoDB table status and perform CRUD operations\",\"name\":\"Manage DynamoDB\",\"slug\":\"dynamodb_console\",\"tags\":[\"aws\"],\"tile_background\":\"bento-box-table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.dynamodb.describe_table\",\"updated_at\":\"2026-05-18T17:02:00.038636Z\"}},{\"id\":\"cc9872f6-9a15-454e-8f02-beec66ce1bde\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-28T21:17:42.039633Z\",\"description\":\"Rebuild or restart Elastic Beanstalk applications\",\"name\":\"Manage Elastic Beanstalk Apps\",\"slug\":\"elastic_beanstalk_console\",\"tags\":[\"aws\"],\"tile_background\":\"search-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.elasticbeanstalk.listApplications\",\"updated_at\":\"2026-05-18T17:02:03.613799Z\"}},{\"id\":\"84c7ba6f-d69b-4e7c-aa0b-56ba9022ff50\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-05T19:50:21.700674Z\",\"description\":\"List, start or stop your Compute Engine instances\",\"name\":\"Manage Google Cloud Compute\",\"slug\":\"gcp-cloud-compute-management-console\",\"tags\":[\"gcp\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.gcp.compute.listInstances\",\"updated_at\":\"2026-05-18T17:02:11.166133Z\"}},{\"id\":\"e426403a-5d30-49d2-abed-d2372e8c7744\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:46.472898Z\",\"description\":\"Select a service \\u0026 trigger an incident\",\"name\":\"Trigger Incident in Pagerduty\",\"slug\":\"pagerduty_trigger_incident\",\"tags\":[\"paging\",\"datadog\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.pagerduty.trigger_incident\",\"updated_at\":\"2026-05-18T17:02:15.92158Z\"}},{\"id\":\"e6b74e1f-7f36-49b4-abfe-7c9ebf067ff2\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-08T20:09:58.363312Z\",\"description\":\"View autoscaling group capacity and trigger a change\",\"name\":\"Manage AWS Autoscaling Groups\",\"slug\":\"aws_autoscaling_groups\",\"tags\":[\"aws\"],\"tile_background\":\"three-callout-prompt\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.autoscaling.describe_auto_scaling_group\",\"updated_at\":\"2026-05-18T17:02:03.420659Z\"}},{\"id\":\"9913dec9-e949-45e6-908a-587ffb823a0c\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-05-02T20:27:47.592154Z\",\"description\":\"Renew, describe, delete and request private and public certificates\",\"name\":\"Manage AWS Certificates\",\"slug\":\"manage-aws-certificates\",\"tags\":[\"aws\"],\"tile_background\":\"one-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.aws.acm.requestPublicCertificate\",\"updated_at\":\"2026-05-18T17:02:04.316282Z\"}},{\"id\":\"d837c301-edcd-48fb-8250-a4e9fb9add11\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-04-29T18:37:39.200777Z\",\"description\":\"Create new tickets in Jira\",\"name\":\"Create Jira Ticket\",\"slug\":\"jira-ticket-creator\",\"tags\":[\"software_delivery\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.jira.create_issue\",\"updated_at\":\"2026-05-18T17:02:04.229225Z\"}},{\"id\":\"25bc3ad1-724c-4750-9bc2-112a59e76b6a\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-08-22T01:16:30.733428Z\",\"description\":\"Use this form to create a new entity definition YAML in Github.\",\"name\":\"Create Catalog Entity Definition\",\"slug\":\"create_catalog_entity_definition\",\"tags\":[\"datadog\",\"software_delivery\"],\"tile_background\":\"people-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.github.createOrUpdateFile\",\"updated_at\":\"2026-05-18T17:02:03.431113Z\"}},{\"id\":\"7d2e21d5-1e1f-4abc-aebb-880ef86882f5\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-07-21T00:43:24.42963Z\",\"description\":\"How to add bar charts to apps\",\"name\":\"How To: Bar Charts\",\"slug\":\"how_to__bar_charts\",\"tags\":[\"datadog\",\"howTo\"],\"tile_background\":\"table\",\"tile_icon_action_fqn\":\"com.datadoghq.dd.teams.listTeams\",\"updated_at\":\"2026-05-18T17:02:03.801347Z\"}},{\"id\":\"6bf5671b-3195-4ea5-b3fe-eba97d25b26a\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-07-02T16:43:02.148346Z\",\"description\":\"Scaffolder app is used to create new software components from template repositories. It takes inputs from developers and generates a new repository or a PR based on the provided data and the template.\",\"name\":\"Scaffold New Project in GitLab\",\"slug\":\"scaffold-new-project-in-gitlab\",\"tags\":[\"software_delivery\"],\"tile_background\":\"table-with-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.gitlab.getProjectDeployments\",\"updated_at\":\"2026-05-18T17:01:20.860684Z\"}},{\"id\":\"f5998cda-c054-48d9-9e88-ae37ab1990cb\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-07-18T16:51:32.667124Z\",\"description\":\"See how to make form fields dynamic and dependent on other fields.\",\"name\":\"How to: Form With Dynamic Fields\",\"slug\":\"how_to__form_with_dynamic_fields\",\"tags\":[\"howTo\"],\"tile_background\":\"people-modal\",\"tile_icon_action_fqn\":\"com.datadoghq.github.createOrUpdateFile\",\"updated_at\":\"2026-05-18T17:02:03.923635Z\"}},{\"id\":\"6e27f913-7170-4977-b2b1-243015b9fafd\",\"type\":\"blueprint\",\"attributes\":{\"created_at\":\"2025-07-17T23:29:17.423877Z\",\"description\":\"How to persist your app in a datastore using CRUD (Create, Read, Update, Delete) operations\",\"name\":\"How To: Persist Data in Datastore\",\"slug\":\"how_to__persist_data_in_datastore_using_crud\",\"tags\":[\"datadog\",\"howTo\"],\"tile_background\":\"search-callout-table\",\"tile_icon_action_fqn\":\"com.datadoghq.dd.apps_datastore.listDatastoreItems\",\"updated_at\":\"2026-05-18T17:02:04.018585Z\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Blueprints returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T17:39:19.668Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/app-builder/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Tags returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:51:55.262Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"850d5920-6bfb-4723-a3ff-91bfb2d898d8\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "v1.2.0 - bug fix release" + }, + "type": "versionNames" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/850d5920-6bfb-4723-a3ff-91bfb2d898d8/version-name", + "query": [ + [ + "version", + "latest" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/850d5920-6bfb-4723-a3ff-91bfb2d898d8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"850d5920-6bfb-4723-a3ff-91bfb2d898d8\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Name App Version returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:51:56.300Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "v1.2.0 - bug fix release" + }, + "type": "versionNames" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/version-name", + "query": [ + [ + "version", + "latest" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"16fc993f-2445-4b88-b1e7-c924feed5141\",\"title\":\"app not found\",\"detail\":\"app with id 7addb29b-f935-472c-ae79-d1963979a23e not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Name App Version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:03.857Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5677160c-03ea-41cf-b9cb-1dabc7904656\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/app-builder/apps/5677160c-03ea-41cf-b9cb-1dabc7904656/deployment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9f189b09-3c00-4922-9e01-66c76bf81519\",\"type\":\"deployment\",\"attributes\":{\"app_version_id\":\"8038b7ec-533a-4bb3-b6dd-4ac11cb45ff9\"},\"meta\":{\"created_at\":\"2025-02-14T16:45:04.203717Z\",\"user_id\":15479137,\"user_uuid\":\"b3f98453-b289-11ef-a4e9-d6d283f92d91\",\"user_name\":\"oliver.li@datadoghq.com\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/5677160c-03ea-41cf-b9cb-1dabc7904656", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5677160c-03ea-41cf-b9cb-1dabc7904656\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Publish App returns \"Created\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:04.549Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/deployment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"app not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Publish App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:51:58.197Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/revert", + "query": [ + [ + "version", + "1" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"09483925-ee8b-44c8-882a-35b53e209584\",\"title\":\"app not found\",\"detail\":\"app with id 7addb29b-f935-472c-ae79-d1963979a23e not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Revert App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:04.715Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/deployment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"app not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Unpublish App returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:04.816Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"24628726-cdf1-45e6-9e05-6e73d7612d3f\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/24628726-cdf1-45e6-9e05-6e73d7612d3f/deployment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"892fa942-bd01-4e75-9582-e1a5c7736b46\",\"type\":\"deployment\",\"attributes\":{\"app_version_id\":\"00000000-0000-0000-0000-000000000000\"},\"meta\":{\"created_at\":\"2025-02-14T16:45:05.155785Z\",\"user_id\":15479137,\"user_uuid\":\"b3f98453-b289-11ef-a4e9-d6d283f92d91\",\"user_name\":\"oliver.li@datadoghq.com\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/24628726-cdf1-45e6-9e05-6e73d7612d3f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"24628726-cdf1-45e6-9e05-6e73d7612d3f\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Unpublish App returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:51:59.539Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ff20368e-cb9a-4216-aa76-a61c11aef6d1\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "favorite": true + }, + "type": "favorites" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/ff20368e-cb9a-4216-aa76-a61c11aef6d1/favorite", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/ff20368e-cb9a-4216-aa76-a61c11aef6d1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ff20368e-cb9a-4216-aa76-a61c11aef6d1\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update App Favorite Status returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:52:01.652Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "favorite": true + }, + "type": "favorites" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/favorite", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"3711d641-f1a9-4a08-b8a2-f02b0c6d3cac\",\"title\":\"app not found\",\"detail\":\"app with id 7addb29b-f935-472c-ae79-d1963979a23e not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update App Favorite Status returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:52:01.865Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "protectionLevel": "approval_required" + }, + "type": "protectionLevel" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/protection-level", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"ac8e4f99-d059-43c6-b48a-2feb634c46b9\",\"title\":\"app not found\",\"detail\":\"app with id 7addb29b-f935-472c-ae79-d1963979a23e not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update App Protection Level returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:52:02.394Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7233c313-f027-46ba-b269-fbca3f75cbad\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "protectionLevel": "approval_required" + }, + "type": "protectionLevel" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/7233c313-f027-46ba-b269-fbca3f75cbad/protection-level", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7233c313-f027-46ba-b269-fbca3f75cbad\",\"type\":\"appDefinitions\",\"attributes\":{\"components\":[{\"events\":[],\"name\":\"grid0\",\"properties\":{\"backgroundColor\":\"default\",\"children\":[{\"events\":[],\"name\":\"gridCell0\",\"properties\":{\"children\":[{\"events\":[],\"name\":\"text0\",\"properties\":{\"content\":\"# Cat Facts\",\"contentType\":\"markdown\",\"isVisible\":true,\"textAlign\":\"left\",\"verticalAlign\":\"top\"},\"type\":\"text\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":5,\"width\":4,\"x\":0,\"y\":0}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell2\",\"properties\":{\"children\":[{\"events\":[],\"name\":\"table0\",\"properties\":{\"columns\":[{\"dataPath\":\"fact\",\"header\":\"fact\",\"id\":\"0ae2ae9e-0280-4389-83c6-1c5949f7e674\",\"isHidden\":false},{\"dataPath\":\"length\",\"header\":\"length\",\"id\":\"c9048611-0196-4a00-9366-1ef9e3ec0408\",\"isHidden\":true},{\"dataPath\":\"Due Date\",\"disableSortBy\":false,\"formatter\":{\"format\":\"LARGE_WITHOUT_TIME\",\"type\":\"formatted_time\"},\"header\":\"Unused Old Column\",\"id\":\"8fa9284b-7a58-4f13-9959-57b7d8a7fe8f\",\"isDeleted\":true}],\"data\":\"${fetchFacts?.outputs?.body?.data}\",\"globalFilter\":false,\"isLoading\":\"${fetchFacts?.isLoading}\",\"isScrollable\":\"vertical\",\"isSubRowsEnabled\":false,\"isVisible\":true,\"isWrappable\":false,\"pageSize\":\"${pageSize?.value}\",\"paginationType\":\"server_side\",\"rowButtons\":[],\"summary\":true,\"totalCount\":\"${fetchFacts?.outputs?.body?.total}\"},\"type\":\"table\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":96,\"width\":12,\"x\":0,\"y\":5}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell1\",\"properties\":{\"children\":[{\"events\":[],\"name\":\"text1\",\"properties\":{\"content\":\"## Random Fact\\n\\n${randomFact?.outputs?.fact}\",\"contentType\":\"markdown\",\"isVisible\":true,\"textAlign\":\"left\",\"verticalAlign\":\"top\"},\"type\":\"text\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":16,\"width\":12,\"x\":0,\"y\":101}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell3\",\"properties\":{\"children\":[{\"events\":[{\"name\":\"click\",\"type\":\"setStateVariableValue\",\"value\":\"${pageSize?.value + 1}\",\"variableName\":\"pageSize\"}],\"name\":\"button0\",\"properties\":{\"iconLeft\":\"angleUp\",\"iconRight\":\"\",\"isBorderless\":false,\"isDisabled\":false,\"isLoading\":false,\"isPrimary\":true,\"isVisible\":true,\"label\":\"Increase Page Size\",\"level\":\"default\"},\"type\":\"button\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":4,\"width\":2,\"x\":10,\"y\":134}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell4\",\"properties\":{\"children\":[{\"events\":[{\"name\":\"click\",\"type\":\"setStateVariableValue\",\"value\":\"${pageSize?.value - 1}\",\"variableName\":\"pageSize\"}],\"name\":\"button1\",\"properties\":{\"iconLeft\":\"angleDown\",\"iconRight\":\"\",\"isBorderless\":false,\"isDisabled\":false,\"isLoading\":false,\"isPrimary\":true,\"isVisible\":true,\"label\":\"Decrease Page Size\",\"level\":\"default\"},\"type\":\"button\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":4,\"width\":2,\"x\":10,\"y\":138}}},\"type\":\"gridCell\"}]},\"type\":\"grid\"}],\"description\":\"This is a slightly complicated example app that fetches and displays cat facts\",\"favorite\":false,\"name\":\"Example Cat Facts Viewer\",\"protectionLevel\":\"approval_required\",\"queries\":[{\"id\":\"92ff0bb8-553b-4f31-87c7-ef5bd16d47d5\",\"name\":\"fetchFacts\",\"type\":\"action\",\"properties\":{\"spec\":{\"connectionId\":\"5e63f4a8-4ce6-47de-ba11-f6617c1d54f3\",\"fqn\":\"com.datadoghq.http.request\",\"inputs\":{\"url\":\"https://catfact.ninja/facts\",\"urlParams\":[{\"key\":\"limit\",\"value\":\"${pageSize.value.toString()}\"},{\"key\":\"page\",\"value\":\"${(table0.pageIndex + 1).toString()}\"}],\"verb\":\"GET\"}}}},{\"id\":\"afd03c81-4075-4432-8618-ba09d52d2f2d\",\"name\":\"pageSize\",\"type\":\"stateVariable\",\"properties\":{\"defaultValue\":\"${20}\"}},{\"id\":\"0fb22859-47dc-4137-9e41-7b67d04c525c\",\"name\":\"randomFact\",\"type\":\"dataTransform\",\"properties\":{\"outputs\":\"${(() =\\u003e {const facts = fetchFacts.outputs.body.data\\nreturn facts[Math.floor(Math.random()*facts.length)]\\n})()}\"}}],\"rootInstanceName\":\"grid0\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":321813,\"user_id\":1445416,\"user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"user_name\":\"frog@datadoghq.com\",\"version\":1,\"version_id\":\"42a9e44d-6fd7-4dd6-8a72-17e570b9e46f\",\"updated_since_deployment\":false,\"created_at\":\"2026-05-18T19:52:02.806411Z\",\"updated_at\":\"2026-05-18T19:52:02.806411Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\",\"run_as_user\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/7233c313-f027-46ba-b269-fbca3f75cbad", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7233c313-f027-46ba-b269-fbca3f75cbad\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update App Protection Level returns \"OK\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:52:04.154Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f18f2a0e-bf9a-4b7a-b43d-31ca68aaf5f1\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "selfService": true + }, + "type": "selfService" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/f18f2a0e-bf9a-4b7a-b43d-31ca68aaf5f1/self-service", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/f18f2a0e-bf9a-4b7a-b43d-31ca68aaf5f1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f18f2a0e-bf9a-4b7a-b43d-31ca68aaf5f1\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update App Self-Service Status returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:52:06.076Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "selfService": true + }, + "type": "selfService" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/self-service", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"623c417b-ba6a-4952-8d3c-1d90edaf3166\",\"title\":\"app not found\",\"detail\":\"app with id 7addb29b-f935-472c-ae79-d1963979a23e not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update App Self-Service Status returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:52:06.248Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"57a1c1c9-edfb-47ea-ad74-e90c2e13d0f0\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "tags": [ + "team:platform", + "service:ops" + ] + }, + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/57a1c1c9-edfb-47ea-ad74-e90c2e13d0f0/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/57a1c1c9-edfb-47ea-ad74-e90c2e13d0f0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"57a1c1c9-edfb-47ea-ad74-e90c2e13d0f0\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update App Tags returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2026-05-18T19:52:07.233Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "tags": [ + "team:platform", + "service:ops" + ] + }, + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/7addb29b-f935-472c-ae79-d1963979a23e/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"26c91c86-51b3-4c5f-98b4-713698730b08\",\"title\":\"app not found\",\"detail\":\"app with id 7addb29b-f935-472c-ae79-d1963979a23e not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update App Tags returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:05.461Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"28f5b1d6-f416-46b5-8cc4-94ae094c97f4\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "rootInstanceName": "" + }, + "id": "28f5b1d6-f416-46b5-8cc4-94ae094c97f4", + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/28f5b1d6-f416-46b5-8cc4-94ae094c97f4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"missing required field\",\"source\":{\"pointer\":\"/data/attributes/rootInstanceName\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/28f5b1d6-f416-46b5-8cc4-94ae094c97f4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"28f5b1d6-f416-46b5-8cc4-94ae094c97f4\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update App returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "App Builder", + "frozen_at": "2025-02-14T16:45:05.966Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "events": [], + "name": "grid0", + "properties": { + "backgroundColor": "default", + "children": [ + { + "events": [], + "name": "gridCell0", + "properties": { + "children": [ + { + "events": [], + "name": "text0", + "properties": { + "content": "# Cat Facts", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 5, + "width": 4, + "x": 0, + "y": 0 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell2", + "properties": { + "children": [ + { + "events": [], + "name": "table0", + "properties": { + "columns": [ + { + "dataPath": "fact", + "header": "fact", + "id": "0ae2ae9e-0280-4389-83c6-1c5949f7e674", + "isHidden": false + }, + { + "dataPath": "length", + "header": "length", + "id": "c9048611-0196-4a00-9366-1ef9e3ec0408", + "isHidden": true + }, + { + "dataPath": "Due Date", + "disableSortBy": false, + "formatter": { + "format": "LARGE_WITHOUT_TIME", + "type": "formatted_time" + }, + "header": "Unused Old Column", + "id": "8fa9284b-7a58-4f13-9959-57b7d8a7fe8f", + "isDeleted": true + } + ], + "data": "${fetchFacts?.outputs?.body?.data}", + "globalFilter": false, + "isLoading": "${fetchFacts?.isLoading}", + "isScrollable": "vertical", + "isSubRowsEnabled": false, + "isVisible": true, + "isWrappable": false, + "pageSize": "${pageSize?.value}", + "paginationType": "server_side", + "rowButtons": [], + "summary": true, + "totalCount": "${fetchFacts?.outputs?.body?.total}" + }, + "type": "table" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 96, + "width": 12, + "x": 0, + "y": 5 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell1", + "properties": { + "children": [ + { + "events": [], + "name": "text1", + "properties": { + "content": "## Random Fact\n\n${randomFact?.outputs?.fact}", + "contentType": "markdown", + "isVisible": true, + "textAlign": "left", + "verticalAlign": "top" + }, + "type": "text" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 16, + "width": 12, + "x": 0, + "y": 101 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell3", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value + 1}", + "variableName": "pageSize" + } + ], + "name": "button0", + "properties": { + "iconLeft": "angleUp", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Increase Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 134 + } + } + }, + "type": "gridCell" + }, + { + "events": [], + "name": "gridCell4", + "properties": { + "children": [ + { + "events": [ + { + "name": "click", + "type": "setStateVariableValue", + "value": "${pageSize?.value - 1}", + "variableName": "pageSize" + } + ], + "name": "button1", + "properties": { + "iconLeft": "angleDown", + "iconRight": "", + "isBorderless": false, + "isDisabled": false, + "isLoading": false, + "isPrimary": true, + "isVisible": true, + "label": "Decrease Page Size", + "level": "default" + }, + "type": "button" + } + ], + "isVisible": "true", + "layout": { + "default": { + "height": 4, + "width": 2, + "x": 10, + "y": 138 + } + } + }, + "type": "gridCell" + } + ] + }, + "type": "grid" + } + ], + "description": "This is a slightly complicated example app that fetches and displays cat facts", + "name": "Example Cat Facts Viewer", + "queries": [ + { + "events": [], + "id": "92ff0bb8-553b-4f31-87c7-ef5bd16d47d5", + "name": "fetchFacts", + "properties": { + "spec": { + "connectionId": "5e63f4a8-4ce6-47de-ba11-f6617c1d54f3", + "fqn": "com.datadoghq.http.request", + "inputs": { + "url": "https://catfact.ninja/facts", + "urlParams": [ + { + "key": "limit", + "value": "${pageSize.value.toString()}" + }, + { + "key": "page", + "value": "${(table0.pageIndex + 1).toString()}" + } + ], + "verb": "GET" + } + } + }, + "type": "action" + }, + { + "id": "afd03c81-4075-4432-8618-ba09d52d2f2d", + "name": "pageSize", + "properties": { + "defaultValue": "${20}" + }, + "type": "stateVariable" + }, + { + "id": "0fb22859-47dc-4137-9e41-7b67d04c525c", + "name": "randomFact", + "properties": { + "outputs": "${(() => {const facts = fetchFacts.outputs.body.data\nreturn facts[Math.floor(Math.random()*facts.length)]\n})()}" + }, + "type": "dataTransform" + } + ], + "rootInstanceName": "grid0" + }, + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/app-builder/apps", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9f9a2053-6156-471b-aca8-2fa6ec87f797\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Updated Name", + "rootInstanceName": "grid0" + }, + "id": "9f9a2053-6156-471b-aca8-2fa6ec87f797", + "type": "appDefinitions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/app-builder/apps/9f9a2053-6156-471b-aca8-2fa6ec87f797", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9f9a2053-6156-471b-aca8-2fa6ec87f797\",\"type\":\"appDefinitions\",\"attributes\":{\"components\":[{\"events\":[],\"name\":\"grid0\",\"properties\":{\"backgroundColor\":\"default\",\"children\":[{\"events\":[],\"name\":\"gridCell0\",\"properties\":{\"children\":[{\"events\":[],\"name\":\"text0\",\"properties\":{\"content\":\"# Cat Facts\",\"contentType\":\"markdown\",\"isVisible\":true,\"textAlign\":\"left\",\"verticalAlign\":\"top\"},\"type\":\"text\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":5,\"width\":4,\"x\":0,\"y\":0}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell2\",\"properties\":{\"children\":[{\"events\":[],\"name\":\"table0\",\"properties\":{\"columns\":[{\"dataPath\":\"fact\",\"header\":\"fact\",\"id\":\"0ae2ae9e-0280-4389-83c6-1c5949f7e674\",\"isHidden\":false},{\"dataPath\":\"length\",\"header\":\"length\",\"id\":\"c9048611-0196-4a00-9366-1ef9e3ec0408\",\"isHidden\":true},{\"dataPath\":\"Due Date\",\"disableSortBy\":false,\"formatter\":{\"format\":\"LARGE_WITHOUT_TIME\",\"type\":\"formatted_time\"},\"header\":\"Unused Old Column\",\"id\":\"8fa9284b-7a58-4f13-9959-57b7d8a7fe8f\",\"isDeleted\":true}],\"data\":\"${fetchFacts?.outputs?.body?.data}\",\"globalFilter\":false,\"isLoading\":\"${fetchFacts?.isLoading}\",\"isScrollable\":\"vertical\",\"isSubRowsEnabled\":false,\"isVisible\":true,\"isWrappable\":false,\"pageSize\":\"${pageSize?.value}\",\"paginationType\":\"server_side\",\"rowButtons\":[],\"summary\":true,\"totalCount\":\"${fetchFacts?.outputs?.body?.total}\"},\"type\":\"table\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":96,\"width\":12,\"x\":0,\"y\":5}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell1\",\"properties\":{\"children\":[{\"events\":[],\"name\":\"text1\",\"properties\":{\"content\":\"## Random Fact\\n\\n${randomFact?.outputs?.fact}\",\"contentType\":\"markdown\",\"isVisible\":true,\"textAlign\":\"left\",\"verticalAlign\":\"top\"},\"type\":\"text\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":16,\"width\":12,\"x\":0,\"y\":101}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell3\",\"properties\":{\"children\":[{\"events\":[{\"name\":\"click\",\"type\":\"setStateVariableValue\",\"value\":\"${pageSize?.value + 1}\",\"variableName\":\"pageSize\"}],\"name\":\"button0\",\"properties\":{\"iconLeft\":\"angleUp\",\"iconRight\":\"\",\"isBorderless\":false,\"isDisabled\":false,\"isLoading\":false,\"isPrimary\":true,\"isVisible\":true,\"label\":\"Increase Page Size\",\"level\":\"default\"},\"type\":\"button\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":4,\"width\":2,\"x\":10,\"y\":134}}},\"type\":\"gridCell\"},{\"events\":[],\"name\":\"gridCell4\",\"properties\":{\"children\":[{\"events\":[{\"name\":\"click\",\"type\":\"setStateVariableValue\",\"value\":\"${pageSize?.value - 1}\",\"variableName\":\"pageSize\"}],\"name\":\"button1\",\"properties\":{\"iconLeft\":\"angleDown\",\"iconRight\":\"\",\"isBorderless\":false,\"isDisabled\":false,\"isLoading\":false,\"isPrimary\":true,\"isVisible\":true,\"label\":\"Decrease Page Size\",\"level\":\"default\"},\"type\":\"button\"}],\"isVisible\":\"true\",\"layout\":{\"default\":{\"height\":4,\"width\":2,\"x\":10,\"y\":138}}},\"type\":\"gridCell\"}]},\"type\":\"grid\"}],\"description\":\"This is a slightly complicated example app that fetches and displays cat facts\",\"favorite\":false,\"name\":\"Updated Name\",\"queries\":[{\"id\":\"92ff0bb8-553b-4f31-87c7-ef5bd16d47d5\",\"name\":\"fetchFacts\",\"type\":\"action\",\"properties\":{\"spec\":{\"connectionId\":\"5e63f4a8-4ce6-47de-ba11-f6617c1d54f3\",\"fqn\":\"com.datadoghq.http.request\",\"inputs\":{\"url\":\"https://catfact.ninja/facts\",\"urlParams\":[{\"key\":\"limit\",\"value\":\"${pageSize.value.toString()}\"},{\"key\":\"page\",\"value\":\"${(table0.pageIndex + 1).toString()}\"}],\"verb\":\"GET\"}}}},{\"id\":\"afd03c81-4075-4432-8618-ba09d52d2f2d\",\"name\":\"pageSize\",\"type\":\"stateVariable\",\"properties\":{\"defaultValue\":\"${20}\"}},{\"id\":\"0fb22859-47dc-4137-9e41-7b67d04c525c\",\"name\":\"randomFact\",\"type\":\"dataTransform\",\"properties\":{\"outputs\":\"${(() =\\u003e {const facts = fetchFacts.outputs.body.data\\nreturn facts[Math.floor(Math.random()*facts.length)]\\n})()}\"}}],\"rootInstanceName\":\"grid0\",\"selfService\":false,\"tags\":[]},\"meta\":{\"org_id\":1107852,\"user_id\":15479137,\"user_uuid\":\"b3f98453-b289-11ef-a4e9-d6d283f92d91\",\"user_name\":\"oliver.li@datadoghq.com\",\"version\":2,\"updated_since_deployment\":false,\"created_at\":\"2025-02-14T16:45:06.054293Z\",\"updated_at\":\"2025-02-14T16:45:06.268683Z\",\"deleted_at\":\"0001-01-01T00:00:00Z\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/app-builder/apps/9f9a2053-6156-471b-aca8-2fa6ec87f797", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9f9a2053-6156-471b-aca8-2fa6ec87f797\",\"type\":\"appDefinitions\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update App returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/application-security.json b/test-server-data/v2/application-security.json new file mode 100644 index 0000000000..d5fd568801 --- /dev/null +++ b/test-server-data/v2/application-security.json @@ -0,0 +1,1351 @@ +{ + "feature": "Application Security", + "recordings": [ + { + "feature": "Application Security", + "frozen_at": "2026-04-16T10:25:18.392Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "basedOn": "recommended", + "description": "Policy applied to internal web applications.", + "isDefault": false, + "name": "Internal Network Policy", + "protectionPresets": [ + "attack-tools" + ], + "rules": [ + { + "blocking": false, + "enabled": true, + "id": "rasp-001-002" + } + ], + "scope": [ + { + "env": "prod", + "service": "billing-service" + } + ], + "version": 0 + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/policies", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"841d53b4-4d73-4585-99cc-39dd10883f7c\",\"type\":\"policy\",\"attributes\":{\"description\":\"Policy applied to internal web applications.\",\"isDefault\":false,\"name\":\"Internal Network Policy\",\"protectionPresets\":[\"attack-tools\"],\"rules\":[{\"id\":\"rasp-001-002\",\"blocking\":false,\"enabled\":true}],\"rulesets\":[],\"scope\":[{\"env\":\"prod\",\"service\":\"billing-service\"}],\"version\":0},\"meta\":{\"added_at\":\"2026-04-16T10:25:18Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/policies/841d53b4-4d73-4585-99cc-39dd10883f7c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a WAF Policy returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T19:11:25.882Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": true, + "parameters": [ + "list.search.query" + ], + "path_glob": "/accounts/*", + "rules_target": [ + { + "tags": { + "category": "attack_attempt", + "type": "lfi" + } + } + ], + "scope": [ + { + "env": "www", + "service": "prod" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"662e28c3-e4fe-42c8-bc93-79b73cd04d48\",\"type\":\"exclusion_filter\",\"attributes\":{\"description\":\"Exclude false positives on a path\",\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T19:11:26Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"parameters\":[\"list.search.query\"],\"path_glob\":\"/accounts/*\",\"rules_target\":[{\"tags\":{\"category\":\"attack_attempt\",\"type\":\"lfi\"}}],\"scope\":[{\"env\":\"www\",\"service\":\"prod\"}],\"search_query\":\"(env:www AND service:prod) AND (@http.url_details.path:\\\\/accounts\\\\/* OR @rpc.grpc.full_method:\\\\/accounts\\\\/*) AND ((@appsec.triggers.rule_matches.parameters.address:server.request.query AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.body AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.path_params AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query))) AND (@appsec.category:attack_attempt AND @appsec.type:lfi)\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/662e28c3-e4fe-42c8-bc93-79b73cd04d48", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a WAF exclusion filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T19:11:28.040Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": true, + "event_query": "test:1" + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"legacy exclusion filters cannot be created anymore\",\"code\":\"400\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a legacy WAF exclusion filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T21:02:08.258Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/unknown", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"id not found\",\"code\":\"404\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a WAF exclusion filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T19:11:28.968Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Exclusion Filter", + "enabled": true, + "parameters": [ + "list.search.query" + ], + "path_glob": "*", + "rules_target": [ + { + "tags": { + "category": "attack_attempt", + "type": "xss" + } + } + ], + "scope": [ + { + "env": "staging", + "service": "event-query" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"da282618-ff1f-41ed-9f79-947817641a02\",\"type\":\"exclusion_filter\",\"attributes\":{\"description\":\"My Exclusion Filter\",\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T19:11:29Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"parameters\":[\"list.search.query\"],\"path_glob\":\"*\",\"rules_target\":[{\"tags\":{\"category\":\"attack_attempt\",\"type\":\"xss\"}}],\"scope\":[{\"env\":\"staging\",\"service\":\"event-query\"}],\"search_query\":\"(env:staging AND service:\\\"event-query\\\") AND ((@appsec.triggers.rule_matches.parameters.address:server.request.query AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.body AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.path_params AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query))) AND (@appsec.category:attack_attempt AND @appsec.type:xss)\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/da282618-ff1f-41ed-9f79-947817641a02", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/da282618-ff1f-41ed-9f79-947817641a02", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"id not found\",\"code\":\"404\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a WAF exclusion filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2026-04-16T10:25:20.216Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "basedOn": "recommended", + "description": "This is a test policy.", + "name": "Test policy" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/policies", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cc3e574d-9b5a-4310-b7f4-5560483f84b1\",\"type\":\"policy\",\"attributes\":{\"description\":\"This is a test policy.\",\"isDefault\":false,\"name\":\"Test policy\",\"rules\":[],\"rulesets\":[],\"scope\":[],\"version\":-1},\"meta\":{\"added_at\":\"2026-04-16T10:25:20Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/asm/waf/policies/cc3e574d-9b5a-4310-b7f4-5560483f84b1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cc3e574d-9b5a-4310-b7f4-5560483f84b1\",\"type\":\"policy\",\"attributes\":{\"description\":\"This is a test policy.\",\"isDefault\":false,\"name\":\"Test policy\",\"rules\":[],\"rulesets\":[],\"scope\":[],\"version\":-1},\"meta\":{\"added_at\":\"2026-04-16T10:25:20Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/policies/cc3e574d-9b5a-4310-b7f4-5560483f84b1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a WAF Policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T19:11:31.110Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Exclusion Filter", + "enabled": true, + "parameters": [ + "list.search.query" + ], + "path_glob": "*", + "rules_target": [ + { + "tags": { + "category": "attack_attempt", + "type": "xss" + } + } + ], + "scope": [ + { + "env": "staging", + "service": "event-query" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6f9d3e8a-b867-4d11-9164-48cd8eb517d3\",\"type\":\"exclusion_filter\",\"attributes\":{\"description\":\"My Exclusion Filter\",\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T19:11:31Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"parameters\":[\"list.search.query\"],\"path_glob\":\"*\",\"rules_target\":[{\"tags\":{\"category\":\"attack_attempt\",\"type\":\"xss\"}}],\"scope\":[{\"env\":\"staging\",\"service\":\"event-query\"}],\"search_query\":\"(env:staging AND service:\\\"event-query\\\") AND ((@appsec.triggers.rule_matches.parameters.address:server.request.query AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.body AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.path_params AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query))) AND (@appsec.category:attack_attempt AND @appsec.type:xss)\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/6f9d3e8a-b867-4d11-9164-48cd8eb517d3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6f9d3e8a-b867-4d11-9164-48cd8eb517d3\",\"type\":\"exclusion_filter\",\"attributes\":{\"description\":\"My Exclusion Filter\",\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T19:11:31Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"parameters\":[\"list.search.query\"],\"path_glob\":\"*\",\"rules_target\":[{\"tags\":{\"category\":\"attack_attempt\",\"type\":\"xss\"}}],\"scope\":[{\"env\":\"staging\",\"service\":\"event-query\"}],\"search_query\":\"(env:staging AND service:\\\"event-query\\\") AND ((@appsec.triggers.rule_matches.parameters.address:server.request.query AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.body AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.path_params AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query))) AND (@appsec.category:attack_attempt AND @appsec.type:xss)\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/6f9d3e8a-b867-4d11-9164-48cd8eb517d3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a WAF exclusion filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T19:11:33.301Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/asm/waf/custom_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"198b4219-243d-44a5-8bf3-e0cd27b6d16f\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T13:44:45Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"name\":\"test\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"test\":\"1\",\"type\":\"test\"}}},{\"id\":\"86c40038-02ea-4cfd-99f1-2099c9a5e4c8\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":false,\"metadata\":{\"modified_at\":\"2025-02-25T13:44:46Z\",\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_by_name\":\"CI Account\"},\"name\":\"test - 1\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"test\":\"1\",\"type\":\"test\"}}},{\"id\":\"bcebdf8d-7811-4d8d-801c-a54e13f9d96e\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T13:44:47Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"name\":\"test - 2\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"test\":\"1\",\"type\":\"test\"}}},{\"id\":\"3c7e4949-7376-4aea-9d02-5738d339022e\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T16:50:42Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"name\":\"test - 3\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"test\":\"1\",\"type\":\"test\"}}},{\"id\":\"51028dad-3f06-49e3-9226-1c4a4c0b9f5b\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":false,\"metadata\":{\"modified_at\":\"2025-02-25T16:50:43Z\",\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_by_name\":\"CI Account\"},\"name\":\"test - 4\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"test\":\"1\",\"type\":\"test\"}}},{\"id\":\"b154ea3d-f6c6-4a4e-8712-88f3055320fb\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T16:50:44Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"name\":\"test - 5\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"test\":\"1\",\"type\":\"test\"}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all WAF custom rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T19:11:33.698Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all WAF exclusion filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2026-04-16T12:51:11.613Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/asm/waf/policies", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"recommended\",\"type\":\"policy\",\"attributes\":{\"description\":\"Monitor security scanners and application attacks such as Server-Side-Request-Forgery (SSRF), SQL Injection, Log4Shell, and Cross-Site-Scripting (XSS).\",\"isDefault\":true,\"name\":\"Managed - Monitoring-only\",\"rules\":[],\"rulesets\":[],\"scope\":[],\"version\":0},\"meta\":{}},{\"id\":\"recommended-blocking\",\"type\":\"policy\",\"attributes\":{\"description\":\"Block known attack tools without impacting legitimate security scans.\\nBlock application attacks such as Server-Side-Request-Forgery (SSRF), SQL Injection, Log4Shell, and Cross-Site-Scripting (XSS). Rules are curated to reduce the risk of blocking legitimate traffic. Previously known as \\\"Datadog Recommended\\\".\",\"isDefault\":false,\"name\":\"Managed - Block attack tools \\u0026 application attacks\",\"protectionPresets\":[\"all-confidence-one\"],\"rules\":[],\"rulesets\":[],\"scope\":[],\"version\":0},\"meta\":{}},{\"id\":\"recommended-attack-tools\",\"type\":\"policy\",\"attributes\":{\"description\":\"Block known attack tools without impacting legitimate security scans.\\nMonitor application attacks such as Server-Side-Request-Forgery (SSRF), SQL Injection, Log4Shell, and Cross-Site-Scripting (XSS).\",\"isDefault\":false,\"name\":\"Managed - Block attack tools\",\"protectionPresets\":[\"attack-tools\"],\"rules\":[],\"rulesets\":[],\"scope\":[],\"version\":0},\"meta\":{}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all WAF policies returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-03-05T21:09:10.913Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "blocking": false, + "conditions": [ + { + "operator": "match_regex", + "parameters": { + "inputs": [ + { + "address": "server.request.query", + "key_path": [ + "id" + ] + } + ], + "regex": "badactor" + } + } + ], + "enabled": true, + "name": "test", + "path_glob": "/test", + "scope": [ + { + "env": "test", + "service": "test" + } + ], + "tags": { + "category": "attack_attempt", + "type": "test" + } + }, + "type": "custom_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/custom_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"23343b96-cbde-4029-aad6-09d0fcbf2067\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":true,\"metadata\":{\"added_at\":\"2025-03-05T21:09:11Z\",\"added_by\":\"frog@datadoghq.com\",\"added_by_name\":\"frog\"},\"name\":\"test - 12\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"type\":\"test\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "blocking": false, + "conditions": [ + { + "operator": "match_regex", + "parameters": { + "inputs": [ + { + "address": "server.request.query", + "key_path": [ + "id" + ] + } + ], + "regex": "\\" + } + } + ], + "enabled": false, + "name": "test", + "path_glob": "/test", + "scope": [ + { + "env": "test", + "service": "test" + } + ], + "tags": { + "category": "attack_attempt", + "type": "test" + } + }, + "type": "custom_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/remote_config/products/asm/waf/custom_rules/23343b96-cbde-4029-aad6-09d0fcbf2067", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"failed to decode request\",\"code\":\"400\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/custom_rules/23343b96-cbde-4029-aad6-09d0fcbf2067", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a WAF Custom Rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-03-05T21:09:11.945Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "blocking": false, + "conditions": [ + { + "operator": "match_regex", + "parameters": { + "inputs": [ + { + "address": "server.request.query", + "key_path": [ + "id" + ] + } + ], + "regex": "badactor" + } + } + ], + "enabled": true, + "name": "test", + "path_glob": "/test", + "scope": [ + { + "env": "test", + "service": "test" + } + ], + "tags": { + "category": "attack_attempt", + "type": "test" + } + }, + "type": "custom_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/custom_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cc8931e2-df6b-43ec-b132-ac2b7ed217e9\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":true,\"metadata\":{\"added_at\":\"2025-03-05T21:09:12Z\",\"added_by\":\"frog@datadoghq.com\",\"added_by_name\":\"frog\"},\"name\":\"test - 12\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"type\":\"test\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "blocking": false, + "conditions": [ + { + "operator": "match_regex", + "parameters": { + "inputs": [ + { + "address": "server.request.query", + "key_path": [ + "id" + ] + } + ], + "regex": "badactor" + } + } + ], + "enabled": false, + "name": "test", + "path_glob": "/test", + "scope": [ + { + "env": "test", + "service": "test" + } + ], + "tags": { + "category": "attack_attempt", + "type": "test" + } + }, + "type": "custom_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/remote_config/products/asm/waf/custom_rules/cc8931e2-df6b-43ec-b132-ac2b7ed217e9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cc8931e2-df6b-43ec-b132-ac2b7ed217e9\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":false,\"metadata\":{\"modified_at\":\"2025-03-05T21:09:12Z\",\"modified_by\":\"frog@datadoghq.com\",\"modified_by_name\":\"frog\"},\"name\":\"test - 12\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"type\":\"test\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/custom_rules/cc8931e2-df6b-43ec-b132-ac2b7ed217e9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a WAF Custom Rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-03-05T21:09:13.430Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "blocking": false, + "conditions": [ + { + "operator": "match_regex", + "parameters": { + "inputs": [ + { + "address": "server.request.query", + "key_path": [ + "id" + ] + } + ], + "regex": "badactor" + } + } + ], + "enabled": true, + "name": "test", + "path_glob": "/test", + "scope": [ + { + "env": "test", + "service": "test" + } + ], + "tags": { + "category": "attack_attempt", + "type": "test" + } + }, + "type": "custom_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/custom_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c72e76c1-ddf7-49bb-b7a2-0b178c16a987\",\"type\":\"custom_rule\",\"attributes\":{\"blocking\":false,\"conditions\":[{\"operator\":\"match_regex\",\"parameters\":{\"inputs\":[{\"address\":\"server.request.query\",\"key_path\":[\"id\"]}],\"regex\":\"badactor\",\"options\":{}}}],\"enabled\":true,\"metadata\":{\"added_at\":\"2025-03-05T21:09:13Z\",\"added_by\":\"frog@datadoghq.com\",\"added_by_name\":\"frog\"},\"name\":\"test - 12\",\"path_glob\":\"/test\",\"scope\":[{\"env\":\"test\",\"service\":\"test\"}],\"tags\":{\"category\":\"attack_attempt\",\"type\":\"test\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": false, + "ip_list": [ + "198.51.100.72" + ], + "on_match": "monitor", + "parameters": [ + "list.search.query" + ], + "path_glob": "/accounts/*", + "rules_target": [ + { + "rule_id": "dog-913-009", + "tags": { + "category": "attack_attempt", + "type": "lfi" + } + } + ], + "scope": [ + { + "env": "www", + "service": "prod" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/c72e76c1-ddf7-49bb-b7a2-0b178c16a987", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"only IPs are supported for monitored exclusion filters\",\"code\":\"400\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/custom_rules/c72e76c1-ddf7-49bb-b7a2-0b178c16a987", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a WAF exclusion filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T21:02:08.838Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": true, + "parameters": [ + "list.search.query" + ], + "path_glob": "/accounts/*", + "rules_target": [ + { + "rule_id": "dog-913-009", + "tags": { + "category": "attack_attempt", + "type": "lfi" + } + } + ], + "scope": [ + { + "env": "www", + "service": "prod" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/unknown", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"id not found\",\"code\":\"404\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a WAF exclusion filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T19:11:37.988Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Exclusion Filter", + "enabled": true, + "parameters": [ + "list.search.query" + ], + "path_glob": "*", + "rules_target": [ + { + "tags": { + "category": "attack_attempt", + "type": "xss" + } + } + ], + "scope": [ + { + "env": "staging", + "service": "event-query" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"05b2e632-332e-4c58-947c-40e5c9f22314\",\"type\":\"exclusion_filter\",\"attributes\":{\"description\":\"My Exclusion Filter\",\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T19:11:38Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"parameters\":[\"list.search.query\"],\"path_glob\":\"*\",\"rules_target\":[{\"tags\":{\"category\":\"attack_attempt\",\"type\":\"xss\"}}],\"scope\":[{\"env\":\"staging\",\"service\":\"event-query\"}],\"search_query\":\"(env:staging AND service:\\\"event-query\\\") AND ((@appsec.triggers.rule_matches.parameters.address:server.request.query AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.body AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.path_params AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query))) AND (@appsec.category:attack_attempt AND @appsec.type:xss)\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": false, + "ip_list": [ + "198.51.100.72" + ], + "on_match": "monitor" + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/05b2e632-332e-4c58-947c-40e5c9f22314", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"05b2e632-332e-4c58-947c-40e5c9f22314\",\"type\":\"exclusion_filter\",\"attributes\":{\"description\":\"Exclude false positives on a path\",\"enabled\":false,\"ip_list\":[\"198.51.100.72\"],\"metadata\":{\"added_at\":\"2025-02-25T19:11:38Z\",\"modified_at\":\"2025-02-25T19:11:39Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"modified_by_name\":\"CI Account\"},\"on_match\":\"monitor\",\"search_query\":\"@http.client_ip:198.51.100.72\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/05b2e632-332e-4c58-947c-40e5c9f22314", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a WAF exclusion filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Application Security", + "frozen_at": "2025-02-25T19:11:40.619Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Exclusion Filter", + "enabled": true, + "parameters": [ + "list.search.query" + ], + "path_glob": "*", + "rules_target": [ + { + "tags": { + "category": "attack_attempt", + "type": "xss" + } + } + ], + "scope": [ + { + "env": "staging", + "service": "event-query" + } + ] + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bd04e3ac-9f29-4a66-976f-2f409477a329\",\"type\":\"exclusion_filter\",\"attributes\":{\"description\":\"My Exclusion Filter\",\"enabled\":true,\"metadata\":{\"added_at\":\"2025-02-25T19:11:40Z\",\"added_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"added_by_name\":\"CI Account\"},\"parameters\":[\"list.search.query\"],\"path_glob\":\"*\",\"rules_target\":[{\"tags\":{\"category\":\"attack_attempt\",\"type\":\"xss\"}}],\"scope\":[{\"env\":\"staging\",\"service\":\"event-query\"}],\"search_query\":\"(env:staging AND service:\\\"event-query\\\") AND ((@appsec.triggers.rule_matches.parameters.address:server.request.query AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.body AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query)) OR (@appsec.triggers.rule_matches.parameters.address:server.request.path_params AND (@appsec.triggers.rule_matches.parameters.key:list.search.query OR @appsec.triggers.rule_matches.parameters.params.key:list.search.query))) AND (@appsec.category:attack_attempt AND @appsec.type:xss)\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Exclude false positives on a path", + "enabled": true, + "event_query": "test:1" + }, + "type": "exclusion_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/bd04e3ac-9f29-4a66-976f-2f409477a329", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"legacy exclusion filters cannot be created anymore\",\"code\":\"400\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/asm/waf/exclusion_filters/bd04e3ac-9f29-4a66-976f-2f409477a329", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a legacy WAF exclusion filter returns \"Bad Request\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/audit.json b/test-server-data/v2/audit.json new file mode 100644 index 0000000000..f74fdbe968 --- /dev/null +++ b/test-server-data/v2/audit.json @@ -0,0 +1,298 @@ +{ + "feature": "Audit", + "recordings": [ + { + "feature": "Audit", + "frozen_at": "2022-03-10T12:51:27.148Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/audit/events", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of Audit Logs events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Audit", + "frozen_at": "2022-04-13T09:30:15.478Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/audit/events", + "query": [ + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFpUWhuWTNTSHVVUUFBQUFCQldVRnBVV2h4UmtGQlEwczJhSGMyTWtoNGNuUjNRVUUifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"status\":\"info\",\"tags\":[\"agent_hostname:i-086c6dfaa6bd27468\",\"agent_version:7.35.0\",\"root_config_version:4\",\"old_snapshot_version:1419839\",\"last_snapshot_version:1419845\"],\"timestamp\":\"2022-04-13T09:29:59Z\",\"usr\":{\"id\":\"1ad9c690-ee90-4dca-80ad-034e916623ab\",\"email\":\"1ad9c690-ee90-4dca-80ad-034e916623ab\"},\"action\":\"update_config\",\"org\":{\"uuid\":\"8dee7c38-00cb-11ea-a77b-8b5a08d3b091\"},\"evt\":{\"actor\":{\"type\":\"Other\"}},\"auth_method\":\"API + App Key\"},\"message\":\"Agent configuration successfuly updated\",\"tags\":[\"source:audit\"],\"timestamp\":\"2022-04-13T09:29:59.000Z\"},\"type\":\"audit\",\"id\":\"AQAAAYAiQhnY3SfuUQAAAABBWUFpUWhxSEFBQ0s2aHc2Mkh4cnZRQUE\"},{\"attributes\":{\"attributes\":{\"status\":\"info\",\"tags\":[\"agent_hostname:i-0a31006532ef57785\",\"agent_version:7.35.0\",\"root_config_version:4\",\"old_snapshot_version:1419839\",\"last_snapshot_version:1419845\"],\"timestamp\":\"2022-04-13T09:29:59Z\",\"usr\":{\"id\":\"1ad9c690-ee90-4dca-80ad-034e916623ab\",\"email\":\"1ad9c690-ee90-4dca-80ad-034e916623ab\"},\"action\":\"update_config\",\"org\":{\"uuid\":\"8dee7c38-00cb-11ea-a77b-8b5a08d3b091\"},\"evt\":{\"actor\":{\"type\":\"Other\"}},\"auth_method\":\"API + App Key\"},\"message\":\"Agent configuration successfuly updated\",\"tags\":[\"source:audit\"],\"timestamp\":\"2022-04-13T09:29:59.000Z\"},\"type\":\"audit\",\"id\":\"AQAAAYAiQhnY3SHuUQAAAABBWUFpUWhxRkFBQ0s2aHc2Mkh4cnR3QUE\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/audit/events?page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFpUWhuWTNTSHVVUUFBQUFCQldVRnBVV2h4UmtGQlEwczJhSGMyTWtoNGNuUjNRVUUifQ&page%5Blimit%5D=2\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/audit/events", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFRQUFBWUFpUWhuWTNTSHVVUUFBQUFCQldVRnBVV2h4UmtGQlEwczJhSGMyTWtoNGNuUjNRVUUifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFpUWhuWTNRM3VVUUFBQUFCQldVRnBVV2h3YmtGQlEwczJhSGMyTWtoNGNtOTNRVUUifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"status\":\"info\",\"tags\":[\"agent_hostname:i-029aff430be77ea83\",\"agent_version:7.35.0\",\"root_config_version:4\",\"old_snapshot_version:1419839\",\"last_snapshot_version:1419845\"],\"timestamp\":\"2022-04-13T09:29:59Z\",\"usr\":{\"id\":\"1ad9c690-ee90-4dca-80ad-034e916623ab\",\"email\":\"1ad9c690-ee90-4dca-80ad-034e916623ab\"},\"action\":\"update_config\",\"org\":{\"uuid\":\"8dee7c38-00cb-11ea-a77b-8b5a08d3b091\"},\"evt\":{\"actor\":{\"type\":\"Other\"}},\"auth_method\":\"API + App Key\"},\"message\":\"Agent configuration successfuly updated\",\"tags\":[\"source:audit\"],\"timestamp\":\"2022-04-13T09:29:59.000Z\"},\"type\":\"audit\",\"id\":\"AQAAAYAiQhnY3RvuUQAAAABBWUFpUWhwekFBQ0s2aHc2Mkh4cnNRQUE\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/audit/events?page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFpUWhuWTNRM3VVUUFBQUFCQldVRnBVV2h3YmtGQlEwczJhSGMyTWtoNGNtOTNRVUUifQ&page%5Blimit%5D=2\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/audit/events", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFRQUFBWUFpUWhuWTNRM3VVUUFBQUFCQldVRnBVV2h3YmtGQlEwczJhSGMyTWtoNGNtOTNRVUUifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of Audit Logs events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Audit", + "frozen_at": "2022-03-10T12:51:27.702Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "@type:session AND @session.type:user", + "to": "now" + }, + "options": { + "time_offset": 0, + "timezone": "GMT" + }, + "page": { + "limit": 25 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/audit/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search Audit Logs events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Audit", + "frozen_at": "2022-04-13T09:36:13.252Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/audit/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFpT2hZV1JxeFgzUUFBQUFCQldVRnBUMmh2VFVGQlFrczVOa2wwVFZKVFYycEJRVUUifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"status\":\"info\",\"http\":{\"status_code\":\"200\",\"url_details\":{\"path\":\"/api/v1/synthetics/enforced_tags\",\"host\":\"us1.prod.dog\"},\"method\":\"GET\",\"useragent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36\"},\"network\":{\"bytes_read\":0,\"client\":{\"ip\":\"84.102.253.215\"},\"bytes_written\":104},\"timestamp\":\"2022-04-13T09:21:13.750599\",\"usr\":{\"email\":\"foo@example.com\",\"id\":\"foo@example.com\",\"uuid\":\"0ed5718a-10e0-11ec-8246-da7ad0900002\"},\"action\":\"accessed\",\"org\":{\"uuid\":\"8dee7c38-00cb-11ea-a77b-8b5a08d3b091\"},\"evt\":{\"name\":\"Request\",\"actor\":{\"type\":\"USER\"}},\"auth_method\":\"SESSION\"},\"message\":\"GET request made to /api/v1/synthetics/enforced_tags by foo@example.com with response 200\",\"tags\":[\"source:audit\"],\"timestamp\":\"2022-04-13T09:21:13.750Z\"},\"type\":\"audit\",\"id\":\"AQAAAYAiOhYWi7EZ-QAAAABBWUFpT2hvT0FBRGJLTGZoSU50TEVRQUE\"},{\"attributes\":{\"attributes\":{\"status\":\"info\",\"http\":{\"status_code\":\"200\",\"url_details\":{\"path\":\"/api/v2/query/timeseries\",\"host\":\"us1.prod.dog\"},\"method\":\"POST\",\"useragent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36\"},\"network\":{\"bytes_read\":494,\"client\":{\"ip\":\"149.14.155.42\"},\"bytes_written\":108896},\"timestamp\":\"2022-04-13T09:21:13.750249\",\"usr\":{\"email\":\"foo@example.com\",\"id\":\"foo@example.com\",\"uuid\":\"32e2d7b6-52e4-11ec-a7e4-da7ad0900002\"},\"action\":\"accessed\",\"org\":{\"uuid\":\"8dee7c38-00cb-11ea-a77b-8b5a08d3b091\"},\"evt\":{\"name\":\"Request\",\"actor\":{\"type\":\"USER\"}},\"auth_method\":\"SESSION\"},\"message\":\"POST request made to /api/v2/query/timeseries by foo@example.com with response 200\",\"tags\":[\"source:audit\"],\"timestamp\":\"2022-04-13T09:21:13.750Z\"},\"type\":\"audit\",\"id\":\"AQAAAYAiOhYWRqxX3QAAAABBWUFpT2hvTUFBQks5Nkl0TVJTV2pBQUE\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/audit/events?sort=timestamp&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFpT2hZV1JxeFgzUUFBQUFCQldVRnBUMmh2VFVGQlFrczVOa2wwVFZKVFYycEJRVUUifQ&page%5Blimit%5D=2&filter%5Bfrom%5D=now-15m\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFRQUFBWUFpT2hZV1JxeFgzUUFBQUFCQldVRnBUMmh2VFVGQlFrczVOa2wwVFZKVFYycEJRVUUifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/audit/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFpT2hnV2pkb1otUUFBQUFCQldVRnBUMmgzVFVGQlJHSkxUR1pvU1U1MFRrOW5RVUUifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"status\":\"info\",\"http\":{\"status_code\":\"200\",\"url_details\":{\"path\":\"/series/batch_query\",\"host\":\"us1.prod.dog\"},\"method\":\"POST\",\"useragent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15\"},\"network\":{\"bytes_read\":818,\"client\":{\"ip\":\"185.12.36.70\"},\"bytes_written\":60804},\"timestamp\":\"2022-04-13T09:21:14.260084\",\"usr\":{\"email\":\"foo@example.com\",\"id\":\"foo@example.com\",\"uuid\":\"a9c5deae-eb9f-11e9-a77a-a386b4bf357a\"},\"action\":\"accessed\",\"org\":{\"uuid\":\"8dee7c38-00cb-11ea-a77b-8b5a08d3b091\"},\"evt\":{\"name\":\"Request\",\"actor\":{\"type\":\"USER\"}},\"auth_method\":\"SESSION\"},\"message\":\"POST request made to /series/batch_query by foo@example.com with response 200\",\"tags\":[\"source:audit\"],\"timestamp\":\"2022-04-13T09:21:14.260Z\"},\"type\":\"audit\",\"id\":\"AQAAAYAiOhgURpZX3QAAAABBWUFpT2hudkFBQks5Nkl0TVJTV2RnQUE\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/audit/events?sort=timestamp&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFpT2hnV2pkb1otUUFBQUFCQldVRnBUMmgzVFVGQlJHSkxUR1pvU1U1MFRrOW5RVUUifQ&page%5Blimit%5D=2&filter%5Bfrom%5D=now-15m\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFRQUFBWUFpT2hnV2pkb1otUUFBQUFCQldVRnBUMmgzVFVGQlJHSkxUR1pvU1U1MFRrOW5RVUUifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/audit/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search Audit Logs events returns \"OK\" response with pagination", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/authn-mappings.json b/test-server-data/v2/authn-mappings.json new file mode 100644 index 0000000000..7f7899f7ca --- /dev/null +++ b/test-server-data/v2/authn-mappings.json @@ -0,0 +1,711 @@ +{ + "feature": "AuthN Mappings", + "recordings": [ + { + "feature": "AuthN Mappings", + "frozen_at": "2022-05-12T09:51:06.979Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_an_AuthN_Mapping_returns_OK_response-1652349066" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"0b9db2f6-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_an_AuthN_Mapping_returns_OK_response-1652349066\",\"created_at\":\"2022-05-12T09:51:07.463334+00:00\",\"modified_at\":\"2022-05-12T09:51:07.527219+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attribute_key": "testcreateanauthnmappingreturnsokresponse1652349066", + "attribute_value": "Test-Create_an_AuthN_Mapping_returns_OK_response-1652349066" + }, + "relationships": { + "role": { + "data": { + "id": "0b9db2f6-d1d9-11ec-ad3d-da7ad0900002", + "type": "roles" + } + } + }, + "type": "authn_mappings" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/authn_mappings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"included\":[{\"type\":\"roles\",\"id\":\"0b9db2f6-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_an_AuthN_Mapping_returns_OK_response-1652349066\",\"created_at\":\"2022-05-12T09:51:07.463334+00:00\",\"modified_at\":\"2022-05-12T09:51:07.527219+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}],\"data\":{\"type\":\"authn_mappings\",\"id\":\"0bf0acd6-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testcreateanauthnmappingreturnsokresponse1652349066\",\"attribute_value\":\"Test-Create_an_AuthN_Mapping_returns_OK_response-1652349066\",\"created_at\":\"2022-05-12T09:51:08.006161+00:00\",\"modified_at\":\"2022-05-12T09:51:08.006161+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"0b9db2f6-d1d9-11ec-ad3d-da7ad0900002\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/authn_mappings/0bf0acd6-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/0b9db2f6-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an AuthN Mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "frozen_at": "2022-05-12T09:51:09.012Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_an_AuthN_Mapping_returns_OK_response-1652349069" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"0cd38a56-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Delete_an_AuthN_Mapping_returns_OK_response-1652349069\",\"created_at\":\"2022-05-12T09:51:09.492974+00:00\",\"modified_at\":\"2022-05-12T09:51:09.537993+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attribute_key": "testdeleteanauthnmappingreturnsokresponse1652349069", + "attribute_value": "Test-Delete_an_AuthN_Mapping_returns_OK_response-1652349069" + }, + "relationships": { + "role": { + "data": { + "id": "0cd38a56-d1d9-11ec-ad3d-da7ad0900002", + "type": "roles" + } + } + }, + "type": "authn_mappings" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/authn_mappings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"included\":[{\"type\":\"roles\",\"id\":\"0cd38a56-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Delete_an_AuthN_Mapping_returns_OK_response-1652349069\",\"created_at\":\"2022-05-12T09:51:09.492974+00:00\",\"modified_at\":\"2022-05-12T09:51:09.537993+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}],\"data\":{\"type\":\"authn_mappings\",\"id\":\"0d2328cc-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testdeleteanauthnmappingreturnsokresponse1652349069\",\"attribute_value\":\"Test-Delete_an_AuthN_Mapping_returns_OK_response-1652349069\",\"created_at\":\"2022-05-12T09:51:10.015048+00:00\",\"modified_at\":\"2022-05-12T09:51:10.015048+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"0cd38a56-d1d9-11ec-ad3d-da7ad0900002\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/authn_mappings/0d2328cc-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/authn_mappings/0d2328cc-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Mapping with id 0d2328cc-d1d9-11ec-ad3d-da7ad0900002 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/0cd38a56-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete an AuthN Mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "frozen_at": "2022-05-12T09:51:11.760Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Edit_an_AuthN_Mapping_returns_OK_response-1652349071" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"0e6f2848-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Edit_an_AuthN_Mapping_returns_OK_response-1652349071\",\"created_at\":\"2022-05-12T09:51:12.191159+00:00\",\"modified_at\":\"2022-05-12T09:51:12.302936+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attribute_key": "testeditanauthnmappingreturnsokresponse1652349071", + "attribute_value": "Test-Edit_an_AuthN_Mapping_returns_OK_response-1652349071" + }, + "relationships": { + "role": { + "data": { + "id": "0e6f2848-d1d9-11ec-ad3d-da7ad0900002", + "type": "roles" + } + } + }, + "type": "authn_mappings" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/authn_mappings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"included\":[{\"type\":\"roles\",\"id\":\"0e6f2848-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Edit_an_AuthN_Mapping_returns_OK_response-1652349071\",\"created_at\":\"2022-05-12T09:51:12.191159+00:00\",\"modified_at\":\"2022-05-12T09:51:12.302936+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}],\"data\":{\"type\":\"authn_mappings\",\"id\":\"0ece1b8c-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testeditanauthnmappingreturnsokresponse1652349071\",\"attribute_value\":\"Test-Edit_an_AuthN_Mapping_returns_OK_response-1652349071\",\"created_at\":\"2022-05-12T09:51:12.813412+00:00\",\"modified_at\":\"2022-05-12T09:51:12.813412+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"0e6f2848-d1d9-11ec-ad3d-da7ad0900002\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attribute_key": "member-of", + "attribute_value": "Development" + }, + "id": "0ece1b8c-d1d9-11ec-ad3d-da7ad0900002", + "relationships": { + "role": { + "data": { + "id": "0e6f2848-d1d9-11ec-ad3d-da7ad0900002", + "type": "roles" + } + } + }, + "type": "authn_mappings" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/authn_mappings/0ece1b8c-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"included\":[{\"type\":\"roles\",\"id\":\"0e6f2848-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Edit_an_AuthN_Mapping_returns_OK_response-1652349071\",\"created_at\":\"2022-05-12T09:51:12.191159+00:00\",\"modified_at\":\"2022-05-12T09:51:12.302936+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}],\"data\":{\"type\":\"authn_mappings\",\"id\":\"0ece1b8c-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"attribute_key\":\"member-of\",\"attribute_value\":\"Development\",\"created_at\":\"2022-05-12T09:51:12.813412+00:00\",\"modified_at\":\"2022-05-12T09:51:13.311120+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"0e6f2848-d1d9-11ec-ad3d-da7ad0900002\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/authn_mappings/0ece1b8c-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/0e6f2848-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Edit an AuthN Mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "frozen_at": "2022-05-12T09:51:14.432Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_an_AuthN_Mapping_by_UUID_returns_OK_response-1652349074" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"100b029e-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_an_AuthN_Mapping_by_UUID_returns_OK_response-1652349074\",\"created_at\":\"2022-05-12T09:51:14.889838+00:00\",\"modified_at\":\"2022-05-12T09:51:14.940000+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attribute_key": "testgetanauthnmappingbyuuidreturnsokresponse1652349074", + "attribute_value": "Test-Get_an_AuthN_Mapping_by_UUID_returns_OK_response-1652349074" + }, + "relationships": { + "role": { + "data": { + "id": "100b029e-d1d9-11ec-ad3d-da7ad0900002", + "type": "roles" + } + } + }, + "type": "authn_mappings" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/authn_mappings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"included\":[{\"type\":\"roles\",\"id\":\"100b029e-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_an_AuthN_Mapping_by_UUID_returns_OK_response-1652349074\",\"created_at\":\"2022-05-12T09:51:14.889838+00:00\",\"modified_at\":\"2022-05-12T09:51:14.940000+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}],\"data\":{\"type\":\"authn_mappings\",\"id\":\"10da3f46-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testgetanauthnmappingbyuuidreturnsokresponse1652349074\",\"attribute_value\":\"Test-Get_an_AuthN_Mapping_by_UUID_returns_OK_response-1652349074\",\"created_at\":\"2022-05-12T09:51:16.248429+00:00\",\"modified_at\":\"2022-05-12T09:51:16.248429+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"100b029e-d1d9-11ec-ad3d-da7ad0900002\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/authn_mappings/10da3f46-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"included\":[{\"type\":\"roles\",\"id\":\"100b029e-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_an_AuthN_Mapping_by_UUID_returns_OK_response-1652349074\",\"created_at\":\"2022-05-12T09:51:14.889838+00:00\",\"modified_at\":\"2022-05-12T09:51:14.940000+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}],\"data\":{\"type\":\"authn_mappings\",\"id\":\"10da3f46-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testgetanauthnmappingbyuuidreturnsokresponse1652349074\",\"attribute_value\":\"Test-Get_an_AuthN_Mapping_by_UUID_returns_OK_response-1652349074\",\"created_at\":\"2022-05-12T09:51:16.248429+00:00\",\"modified_at\":\"2022-05-12T09:51:16.248429+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"100b029e-d1d9-11ec-ad3d-da7ad0900002\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/authn_mappings/10da3f46-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/100b029e-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get an AuthN Mapping by UUID returns \"OK\" response", + "version": "v2" + }, + { + "feature": "AuthN Mappings", + "frozen_at": "2022-05-12T09:51:17.796Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-List_all_AuthN_Mappings_returns_OK_response-1652349077" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"120a6d32-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-List_all_AuthN_Mappings_returns_OK_response-1652349077\",\"created_at\":\"2022-05-12T09:51:18.241483+00:00\",\"modified_at\":\"2022-05-12T09:51:18.302819+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attribute_key": "testlistallauthnmappingsreturnsokresponse1652349077", + "attribute_value": "Test-List_all_AuthN_Mappings_returns_OK_response-1652349077" + }, + "relationships": { + "role": { + "data": { + "id": "120a6d32-d1d9-11ec-ad3d-da7ad0900002", + "type": "roles" + } + } + }, + "type": "authn_mappings" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/authn_mappings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"included\":[{\"type\":\"roles\",\"id\":\"120a6d32-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-List_all_AuthN_Mappings_returns_OK_response-1652349077\",\"created_at\":\"2022-05-12T09:51:18.241483+00:00\",\"modified_at\":\"2022-05-12T09:51:18.302819+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}],\"data\":{\"type\":\"authn_mappings\",\"id\":\"125e0500-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testlistallauthnmappingsreturnsokresponse1652349077\",\"attribute_value\":\"Test-List_all_AuthN_Mappings_returns_OK_response-1652349077\",\"created_at\":\"2022-05-12T09:51:18.789402+00:00\",\"modified_at\":\"2022-05-12T09:51:18.789402+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"120a6d32-d1d9-11ec-ad3d-da7ad0900002\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/authn_mappings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"included\":[{\"type\":\"roles\",\"id\":\"61366ea5-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"name\":\"Test-Typescript-List_all_AuthN_Mappings_returns_OK_response-1651997882\",\"created_at\":\"2022-05-08T08:18:02.879216+00:00\",\"modified_at\":\"2022-05-08T08:18:02.926721+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}},{\"type\":\"roles\",\"id\":\"5f5e2acc-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"name\":\"Test-Typescript-Create_an_AuthN_Mapping_returns_OK_response-1651997879\",\"created_at\":\"2022-05-08T08:17:59.650779+00:00\",\"modified_at\":\"2022-05-08T08:17:59.709387+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}},{\"type\":\"roles\",\"id\":\"94172442-be03-11e9-a77a-3b7612558ac1\",\"attributes\":{\"name\":\"Datadog Admin Role\",\"created_at\":\"2019-08-13T19:50:19.022791+00:00\",\"modified_at\":\"2019-08-13T19:50:19.022791+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\"},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\"},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\"},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\"},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\"},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\"},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\"},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\"},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\"},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\"},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\"},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\"},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\"},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\"},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\"},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\"},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\"},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\"},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\"},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\"},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\"},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\"},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\"},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\"},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\"},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\"},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\"},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\"},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\"},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\"},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\"},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\"},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\"},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\"},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\"},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\"},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\"},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\"},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\"},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\"},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\"},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\"},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\"},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\"},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\"},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\"},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\"},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\"},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\"},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\"},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\"},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\"}]}}},{\"type\":\"roles\",\"id\":\"60d3ae04-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"name\":\"Test-Typescript-Get_an_AuthN_Mapping_by_UUID_returns_OK_response-1651997881\",\"created_at\":\"2022-05-08T08:18:02.097999+00:00\",\"modified_at\":\"2022-05-08T08:18:02.171730+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}},{\"type\":\"roles\",\"id\":\"5fcd43c6-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"name\":\"Test-Typescript-Delete_an_AuthN_Mapping_returns_OK_response-1651997879\",\"created_at\":\"2022-05-08T08:18:00.378768+00:00\",\"modified_at\":\"2022-05-08T08:18:00.426903+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}},{\"type\":\"roles\",\"id\":\"120a6d32-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-List_all_AuthN_Mappings_returns_OK_response-1652349077\",\"created_at\":\"2022-05-12T09:51:18.241483+00:00\",\"modified_at\":\"2022-05-12T09:51:18.302819+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}},{\"type\":\"roles\",\"id\":\"603dd82a-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"name\":\"Test-Typescript-Edit_an_AuthN_Mapping_returns_OK_response-1651997880\",\"created_at\":\"2022-05-08T08:18:01.115889+00:00\",\"modified_at\":\"2022-05-08T08:18:01.165616+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}],\"meta\":{\"page\":{\"total_filtered_count\":7,\"total_count\":7}},\"data\":[{\"type\":\"authn_mappings\",\"id\":\"08a60f02-c0b9-11ec-a8cb-da7ad0900002\",\"attributes\":{\"attribute_key\":\"groups\",\"attribute_value\":\"238cfe80-9215-11eb-9bd1-da7ad0900002\",\"created_at\":\"2022-04-20T14:49:08.822094+00:00\",\"modified_at\":\"2022-04-20T14:49:08.822094+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"94172442-be03-11e9-a77a-3b7612558ac1\"}}}},{\"type\":\"authn_mappings\",\"id\":\"5f8335ce-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testtypescriptcreateanauthnmappingreturnsokresponse1651997879\",\"attribute_value\":\"Test-Typescript-Create_an_AuthN_Mapping_returns_OK_response-1651997879\",\"created_at\":\"2022-05-08T08:17:59.892715+00:00\",\"modified_at\":\"2022-05-08T08:17:59.892715+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"5f5e2acc-cea7-11ec-ac89-da7ad0900002\"}}}},{\"type\":\"authn_mappings\",\"id\":\"5ff26c5a-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testtypescriptdeleteanauthnmappingreturnsokresponse1651997879\",\"attribute_value\":\"Test-Typescript-Delete_an_AuthN_Mapping_returns_OK_response-1651997879\",\"created_at\":\"2022-05-08T08:18:00.621583+00:00\",\"modified_at\":\"2022-05-08T08:18:00.621583+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"5fcd43c6-cea7-11ec-ac89-da7ad0900002\"}}}},{\"type\":\"authn_mappings\",\"id\":\"60654da6-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"attribute_key\":\"member-of\",\"attribute_value\":\"Development\",\"created_at\":\"2022-05-08T08:18:01.374568+00:00\",\"modified_at\":\"2022-05-08T08:18:01.582952+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"603dd82a-cea7-11ec-ac89-da7ad0900002\"}}}},{\"type\":\"authn_mappings\",\"id\":\"60fffd6a-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testtypescriptgetanauthnmappingbyuuidreturnsokresponse1651997881\",\"attribute_value\":\"Test-Typescript-Get_an_AuthN_Mapping_by_UUID_returns_OK_response-1651997881\",\"created_at\":\"2022-05-08T08:18:02.387900+00:00\",\"modified_at\":\"2022-05-08T08:18:02.387900+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"60d3ae04-cea7-11ec-ac89-da7ad0900002\"}}}},{\"type\":\"authn_mappings\",\"id\":\"6176c44a-cea7-11ec-ac89-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testtypescriptlistallauthnmappingsreturnsokresponse1651997882\",\"attribute_value\":\"Test-Typescript-List_all_AuthN_Mappings_returns_OK_response-1651997882\",\"created_at\":\"2022-05-08T08:18:03.167098+00:00\",\"modified_at\":\"2022-05-08T08:18:03.167098+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"61366ea5-cea7-11ec-ac89-da7ad0900002\"}}}},{\"type\":\"authn_mappings\",\"id\":\"125e0500-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"attribute_key\":\"testlistallauthnmappingsreturnsokresponse1652349077\",\"attribute_value\":\"Test-List_all_AuthN_Mappings_returns_OK_response-1652349077\",\"created_at\":\"2022-05-12T09:51:18.789402+00:00\",\"modified_at\":\"2022-05-12T09:51:18.789402+00:00\"},\"relationships\":{\"role\":{\"data\":{\"type\":\"roles\",\"id\":\"120a6d32-d1d9-11ec-ad3d-da7ad0900002\"}}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/authn_mappings/125e0500-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/120a6d32-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List all AuthN Mappings returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/aws-integration.json b/test-server-data/v2/aws-integration.json new file mode 100644 index 0000000000..251228d560 --- /dev/null +++ b/test-server-data/v2/aws-integration.json @@ -0,0 +1,3962 @@ +{ + "feature": "AWS Integration", + "recordings": [ + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:00.419Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"83eacdb0-09e6-4e72-bf2e-b2fbcdf438b7\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"2803c423184c499dbd123d346e5bd16f\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_all\":true},\"created_at\":\"2024-10-28T14:43:01.065460229Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/SQS\",\"AWS/ElasticMapReduce\"]}},\"modified_at\":\"2024-10-28T14:43:01.065463823Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/83eacdb0-09e6-4e72-bf2e-b2fbcdf438b7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "AWS Integration - Create account config returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:01.350Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws-invalid", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid partition: aws-invalid\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "AWS Integration - Create account config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:01.458Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "id": "00000000-abcd-0001-0000-000000000000", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fa9e70b4-5fbb-499d-ba36-b802512cbc83\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"7fca00b8e534405e990889d4960d23f6\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2024-10-28T14:43:02.014523417Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2024-10-28T14:43:02.014527511Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Account already exists\",\"detail\":\"AWS account with provided id already exists\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/fa9e70b4-5fbb-499d-ba36-b802512cbc83", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "AWS Integration - Create account config returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-08-09T18:59:51.401Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "aws_account": { + "account_tags": [], + "auth_config": { + "role_name": "test" + }, + "aws_account_id": "172322422800", + "aws_partition": "aws-test", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "namespace_filters": { + "exclude_only": [ + "AWS/EC2" + ], + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [] + } + ] + }, + "resources_config": {}, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + } + }, + "id": "172322422800", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid partition: aws-test\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "AWS Integration - Create account with invalid aws_partition returns 400 API error response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-08-09T18:59:51.926Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "aws_account": { + "account_tags": [], + "auth_config": { + "role_name": "test" + }, + "aws_account_id": "172322422800", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "namespace_filters": { + "exclude_only": [ + "AWS/EC2" + ], + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [] + } + ] + }, + "resources_config": {}, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + } + }, + "id": "172322422800", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create_account\",\"type\":\"account\",\"attributes\":{\"aws_account\":{\"account_tags\":null,\"aws_account_id\":\"172322422800\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"auth_config\":{\"role_name\":\"test\",\"external_id\":\"08df61ab19794766a0df51fa344ef31c\"},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":null}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"logs_config\":{\"lambda_forwarder\":{\"sources\":[\"s3\"]}},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}},\"resources_config\":{\"cloud_security_posture_management_collection\":false}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/172322422800", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "AWS Integration - Create account with valid config returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:02.940Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/not-a-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"aws_account_config_id\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "AWS Integration - Delete account config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:03.036Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "id": "00000000-abcd-0001-0000-000000000000", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ea195e91-95f9-4811-9161-cbcce608b8ed\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"cd09f429becf46babb7f30a4da51b5fb\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2024-10-28T14:43:03.638813736Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2024-10-28T14:43:03.638829687Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/ea195e91-95f9-4811-9161-cbcce608b8ed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/ea195e91-95f9-4811-9161-cbcce608b8ed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "AWS Integration - Delete account config returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:04.053Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "id": "00000000-abcd-0001-0000-000000000000", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"615cc571-774b-4e40-bc94-ad3f178cbfc8\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"b4966eed30af4b1ba9f62a4a3e841cb8\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2024-10-28T14:43:04.618588959Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2024-10-28T14:43:04.618593611Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/448169a8-251c-4344-abee-1c4edef39f7a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/615cc571-774b-4e40-bc94-ad3f178cbfc8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "AWS Integration - Delete account config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:05.063Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/integration/aws/generate_new_external_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"external_id\",\"type\":\"external_id\",\"attributes\":{\"external_id\":\"46c7ca9418564d478f52b94479b3aae2\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "AWS Integration - Generate new external ID returns \"AWS External ID object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:05.156Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "id": "00000000-abcd-0001-0000-000000000000", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"35ed0f5a-6a49-4fd7-bdf6-cc8edc410ea0\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"34c9dbc0f2934cebb5d7a0690f3f333f\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2024-10-28T14:43:05.736496681Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2024-10-28T14:43:05.736509432Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/accounts/35ed0f5a-6a49-4fd7-bdf6-cc8edc410ea0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"35ed0f5a-6a49-4fd7-bdf6-cc8edc410ea0\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"34c9dbc0f2934cebb5d7a0690f3f333f\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2024-10-28T14:43:05.736497Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2024-10-28T14:43:05.736509Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/35ed0f5a-6a49-4fd7-bdf6-cc8edc410ea0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "AWS Integration - Get account config returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:06.192Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/accounts/not-a-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"aws_account_config_id\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "AWS Integration - Get account config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:06.335Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/accounts/448169a8-251c-4344-abee-1c4edef39f7a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "AWS Integration - Get account config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:06.477Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"e6daa8c4-58b6-42e1-970e-44e6fa812ce0\",\"type\":\"account\",\"attributes\":{\"account_tags\":[],\"auth_config\":{\"access_key_id\":\"AKIA514950102505\"},\"aws_account_id\":\"514950102505\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_all\":true},\"created_at\":\"2024-09-06T00:18:12.382448Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:1234567890:function:datadog-forwarder-Forwarder\"],\"sources\":[]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[],\"namespace_filters\":{\"exclude_only\":[\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2024-09-06T00:18:17.536561Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"a0c7f96e-a471-488e-84be-c3336e7ab693\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"859ffc73702c40f589cc3b74c5967e27\"},\"aws_account_id\":\"172830950700\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2024-10-07T13:58:28.577522Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[]}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2024-10-07T13:58:28.577526Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"3a3d5b83-2ad8-41d8-b82e-a3ba972a9783\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"be10a93f33a64b0ea872da2f48348979\"},\"aws_account_id\":\"172704974400\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2024-09-23T00:02:26.306293Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[]}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2024-09-23T00:02:26.306297Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"89a9dae5-cbe3-4fba-b1b2-aae8775ed319\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"filter:one\",\"filtertwo\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"e31ada331546486f9099cd5c01eef257\"},\"aws_account_id\":\"001725901256\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-2\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2024-09-09T17:00:58.823444Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"testTag\",\"test:Tag2\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2024-10-16T14:55:17.947931Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"7e1d660d-1142-45b1-a795-dc3900b6bd17\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"f61b52d768394db6851aed2f887ac6f6\"},\"aws_account_id\":\"172830950701\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"me-south-1\"]},\"created_at\":\"2024-10-17T15:08:40.917209Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[]}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2024-10-18T20:19:53.960435Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"d52e151c-c608-4e14-9f29-dfeff876bb39\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"c2909403ca9949db82c36adf6e8cdcfa\"},\"aws_account_id\":\"172772261200\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2024-09-30T18:56:55.042771Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[]}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2024-09-30T18:56:55.042775Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"d7d74617-832d-4c4d-a8c3-1e69d509ea52\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"2b1dd9fd35b0440ca4bf98ff70ac2e63\"},\"aws_account_id\":\"172772275700\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2024-09-30T18:59:18.175722Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[]}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2024-09-30T18:59:18.175727Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"7e5acac6-3ac8-4762-8100-479f03ccffc8\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"04548a334583412aa4e6f5548f4e9989\"},\"aws_account_id\":\"172532181900\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2024-09-03T00:03:40.248176Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[]}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2024-09-03T00:03:40.24818Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "AWS Integration - Get all account configs returns \"AWS Accounts List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:06.671Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/available_namespaces", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"namespaces\",\"type\":\"namespaces\",\"attributes\":{\"namespaces\":[\"AWS/ApiGateway\",\"AWS/AppRunner\",\"AWS/AppStream\",\"AWS/AppSync\",\"AWS/ApplicationELB\",\"AWS/Athena\",\"AWS/AutoScaling\",\"AWS/Backup\",\"AWS/Bedrock\",\"AWS/Billing\",\"AWS/CertificateManager\",\"AWS/ELB\",\"AWS/CloudFront\",\"AWS/CloudHSM\",\"AWS/CloudSearch\",\"AWS/CodeBuild\",\"AWS/CodeWhisperer\",\"AWS/Cognito\",\"AWS/Config\",\"AWS/Connect\",\"AWS/DMS\",\"AWS/DX\",\"AWS/DocDB\",\"AWS/DynamoDB\",\"AWS/DAX\",\"AWS/EC2\",\"AWS/EC2/API\",\"AWS/EC2/InfrastructurePerformance\",\"AWS/EC2Spot\",\"AWS/ElasticMapReduce\",\"AWS/ElastiCache\",\"AWS/ElasticBeanstalk\",\"AWS/EBS\",\"AWS/ECR\",\"AWS/ECS\",\"AWS/EFS\",\"AWS/ElasticTranscoder\",\"AWS/MediaConnect\",\"AWS/MediaConvert\",\"AWS/MediaLive\",\"AWS/MediaPackage\",\"AWS/MediaStore\",\"AWS/MediaTailor\",\"AWS/Events\",\"AWS/FSx\",\"AWS/GameLift\",\"AWS/GlobalAccelerator\",\"Glue\",\"AWS/Inspector\",\"AWS/IoT\",\"AWS/KMS\",\"AWS/Cassandra\",\"AWS/Kinesis\",\"AWS/KinesisAnalytics\",\"AWS/Firehose\",\"AWS/Lambda\",\"AWS/Lex\",\"AWS/AmazonMQ\",\"AWS/ML\",\"AWS/Kafka\",\"AmazonMWAA\",\"AWS/MemoryDB\",\"AWS/NATGateway\",\"AWS/Neptune\",\"AWS/NetworkFirewall\",\"AWS/NetworkELB\",\"AWS/Network Manager\",\"AWS/NetworkMonitor\",\"AWS/ES\",\"AWS/AOSS\",\"AWS/OpsWorks\",\"AWS/Polly\",\"AWS/PrivateLinkEndpoints\",\"AWS/PrivateLinkServices\",\"AWS/RDS\",\"AWS/RDS/Proxy\",\"AWS/Redshift\",\"AWS/Rekognition\",\"AWS/Route53\",\"AWS/Route53Resolver\",\"AWS/S3\",\"AWS/S3/Storage-Lens\",\"AWS/SageMaker\",\"/aws/sagemaker/Endpoints\",\"AWS/Sagemaker/LabelingJobs\",\"AWS/Sagemaker/ModelBuildingPipeline\",\"/aws/sagemaker/ProcessingJobs\",\"/aws/sagemaker/TrainingJobs\",\"/aws/sagemaker/TransformJobs\",\"AWS/SageMaker/Workteam\",\"AWS/ServiceQuotas\",\"AWS/DDoSProtection\",\"AWS/SES\",\"AWS/SNS\",\"AWS/SQS\",\"AWS/SWF\",\"AWS/States\",\"AWS/StorageGateway\",\"AWS/Textract\",\"AWS/TransitGateway\",\"AWS/Translate\",\"AWS/TrustedAdvisor\",\"AWS/VPN\",\"WAF\",\"AWS/WAFV2\",\"AWS/WorkSpaces\",\"AWS/X-Ray\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "AWS Integration - List available namespaces returns \"AWS Namespaces List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:06.777Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/logs/services", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"logs_services\",\"type\":\"logs_services\",\"attributes\":{\"logs_services\":[\"apigw-access-logs\",\"apigw-execution-logs\",\"cloudfront\",\"elb\",\"elbv2\",\"lambda\",\"redshift\",\"s3\",\"states\",\"waf\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "AWS Integration - List log services returns \"AWS Logs Services List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:06.862Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/available_namespaces", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"namespaces\",\"type\":\"namespaces\",\"attributes\":{\"namespaces\":[\"AWS/ApiGateway\",\"AWS/AppRunner\",\"AWS/AppStream\",\"AWS/AppSync\",\"AWS/ApplicationELB\",\"AWS/Athena\",\"AWS/AutoScaling\",\"AWS/Backup\",\"AWS/Bedrock\",\"AWS/Billing\",\"AWS/CertificateManager\",\"AWS/ELB\",\"AWS/CloudFront\",\"AWS/CloudHSM\",\"AWS/CloudSearch\",\"AWS/CodeBuild\",\"AWS/CodeWhisperer\",\"AWS/Cognito\",\"AWS/Config\",\"AWS/Connect\",\"AWS/DMS\",\"AWS/DX\",\"AWS/DocDB\",\"AWS/DynamoDB\",\"AWS/DAX\",\"AWS/EC2\",\"AWS/EC2/API\",\"AWS/EC2/InfrastructurePerformance\",\"AWS/EC2Spot\",\"AWS/ElasticMapReduce\",\"AWS/ElastiCache\",\"AWS/ElasticBeanstalk\",\"AWS/EBS\",\"AWS/ECR\",\"AWS/ECS\",\"AWS/EFS\",\"AWS/ElasticTranscoder\",\"AWS/MediaConnect\",\"AWS/MediaConvert\",\"AWS/MediaLive\",\"AWS/MediaPackage\",\"AWS/MediaStore\",\"AWS/MediaTailor\",\"AWS/Events\",\"AWS/FSx\",\"AWS/GameLift\",\"AWS/GlobalAccelerator\",\"Glue\",\"AWS/Inspector\",\"AWS/IoT\",\"AWS/KMS\",\"AWS/Cassandra\",\"AWS/Kinesis\",\"AWS/KinesisAnalytics\",\"AWS/Firehose\",\"AWS/Lambda\",\"AWS/Lex\",\"AWS/AmazonMQ\",\"AWS/ML\",\"AWS/Kafka\",\"AmazonMWAA\",\"AWS/MemoryDB\",\"AWS/NATGateway\",\"AWS/Neptune\",\"AWS/NetworkFirewall\",\"AWS/NetworkELB\",\"AWS/Network Manager\",\"AWS/NetworkMonitor\",\"AWS/ES\",\"AWS/AOSS\",\"AWS/OpsWorks\",\"AWS/Polly\",\"AWS/PrivateLinkEndpoints\",\"AWS/PrivateLinkServices\",\"AWS/RDS\",\"AWS/RDS/Proxy\",\"AWS/Redshift\",\"AWS/Rekognition\",\"AWS/Route53\",\"AWS/Route53Resolver\",\"AWS/S3\",\"AWS/S3/Storage-Lens\",\"AWS/SageMaker\",\"/aws/sagemaker/Endpoints\",\"AWS/Sagemaker/LabelingJobs\",\"AWS/Sagemaker/ModelBuildingPipeline\",\"/aws/sagemaker/ProcessingJobs\",\"/aws/sagemaker/TrainingJobs\",\"/aws/sagemaker/TransformJobs\",\"AWS/SageMaker/Workteam\",\"AWS/ServiceQuotas\",\"AWS/DDoSProtection\",\"AWS/SES\",\"AWS/SNS\",\"AWS/SQS\",\"AWS/SWF\",\"AWS/States\",\"AWS/StorageGateway\",\"AWS/Textract\",\"AWS/TransitGateway\",\"AWS/Translate\",\"AWS/TrustedAdvisor\",\"AWS/VPN\",\"WAF\",\"AWS/WAFV2\",\"AWS/WorkSpaces\",\"AWS/X-Ray\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "AWS Integration - List namespaces returns \"AWS Namespaces List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-08-21T20:16:52.731Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "$KEY:$VALUE" + ], + "auth_config": { + "role_name": "DatadogAWSIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-2", + "us-west-1" + ] + }, + "logs_config": {}, + "metrics_config": { + "automute_enabled": true, + "enabled": false, + "namespace_filters": { + "exclude_only": [ + "AWS/AutoScaling", + "AWS/ElasticMapReduce", + "AWS/SQS" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "$KEY:$VALUE" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": true, + "extended_collection": true + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "id": "123456789012", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b5333e91-03e0-4a3f-9bd6-07e2d83cb85f\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"aa55eef398064c1ab1937f6f008b7184\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\"]},\"created_at\":\"2024-08-21T20:16:53.079170523Z\",\"logs_config\":{\"lambda_forwarder\":{}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2024-08-21T20:16:53.079176907Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [], + "auth_config": { + "role_name": "test" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws-test", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [] + } + ] + }, + "resources_config": {}, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "id": "123456789012", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/aws/accounts/123456789012", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid partition: aws-test\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/123456789012", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "AWS Integration - Patch account config returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:06.952Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "id": "00000000-abcd-0001-0000-000000000000", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"28a2004c-84b4-4f07-a2a4-01c9ab6a021e\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"a55061deb44b4bd28f751f150cabf912\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2024-10-28T14:43:07.521247459Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2024-10-28T14:43:07.521251841Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/aws/accounts/28a2004c-84b4-4f07-a2a4-01c9ab6a021e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"28a2004c-84b4-4f07-a2a4-01c9ab6a021e\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"a55061deb44b4bd28f751f150cabf912\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2024-10-28T14:43:07.521247Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2024-10-28T14:43:07.787129993Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/28a2004c-84b4-4f07-a2a4-01c9ab6a021e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "AWS Integration - Patch account config returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:08.012Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "id": "00000000-abcd-0001-0000-000000000000", + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"84a5a2e9-80f6-4740-a478-c885ae8d4117\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"8e44f2912a454f59824ddcb767a6f6da\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2024-10-28T14:43:08.585257799Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"]}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2024-10-28T14:43:08.585261311Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "access_key_id": "AKIAIOSFODNN7EXAMPLE", + "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/aws/accounts/84a5a2e9-80f6-4740-a478-c885ae8d4117", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"cannot switch between role and key based auth\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/84a5a2e9-80f6-4740-a478-c885ae8d4117", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "AWS Integration - Patch account config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-10-28T14:43:08.932Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/aws/accounts/448169a8-251c-4344-abee-1c4edef39f7a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "AWS Integration - Patch account config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2026-02-23T18:02:24.949Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/b2087a32-4d4f-45b1-9321-1a0a48e9d7cf/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ccm_config": { + "data_export_configs": [ + { + "bucket_name": "billing", + "bucket_region": "us-east-1", + "report_name": "cost-and-usage-report", + "report_prefix": "reports", + "report_type": "CUR2.0" + } + ] + } + }, + "type": "ccm_config" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts/b2087a32-4d4f-45b1-9321-1a0a48e9d7cf/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b2087a32-4d4f-45b1-9321-1a0a48e9d7cf\",\"type\":\"ccm_config\",\"attributes\":{\"data_export_configs\":[{\"report_name\":\"cost-and-usage-report\",\"report_prefix\":\"reports\",\"report_type\":\"CUR2.0\",\"bucket_name\":\"billing\",\"bucket_region\":\"us-east-1\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/%7Baws_account_config_id%7D/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"aws_account_config_id\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create AWS CCM config returns \"AWS CCM Config object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2026-02-23T18:02:25.275Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ccm_config": { + "data_export_configs": [ + { + "bucket_name": "billing", + "bucket_region": "us-east-1", + "report_name": "cost-and-usage-report", + "report_prefix": "reports", + "report_type": "CUR2.0" + } + ] + } + }, + "type": "ccm_config" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts/b2087a32-4d4f-45b1-9321-1a0a48e9d7cf/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Account already exists\",\"detail\":\"CCM config already exists for this account\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ccm_config": { + "data_export_configs": [ + { + "bucket_name": "billing", + "bucket_region": "us-east-1", + "report_name": "cost-and-usage-report", + "report_prefix": "reports", + "report_type": "CUR2.0" + } + ] + } + }, + "type": "ccm_config" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts/b2087a32-4d4f-45b1-9321-1a0a48e9d7cf/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Account already exists\",\"detail\":\"CCM config already exists for this account\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + } + ], + "scenario": "Create AWS CCM config returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2026-02-23T18:02:25.575Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ccm_config": { + "data_export_configs": [ + { + "bucket_name": "billing", + "bucket_region": "us-east-1", + "report_name": "cost-and-usage-report", + "report_prefix": "reports", + "report_type": "CUR2.0" + } + ] + } + }, + "type": "ccm_config" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts/00000000-0000-0000-0000-000000000000/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create AWS CCM config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:40.185Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4ee52a3f-d0e9-487b-bde9-cd1cbc0e4cb0\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"a4e4a6b4c2cf4638a58b1febc6b856e9\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_all\":true},\"created_at\":\"2025-08-06T17:41:41.111886478Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/SQS\",\"AWS/ElasticMapReduce\"]}},\"modified_at\":\"2025-08-06T17:41:41.111886478Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/4ee52a3f-d0e9-487b-bde9-cd1cbc0e4cb0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an AWS account returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:41.364Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "access_key_id": "AKIAIOSFODNN7EXAMPLE", + "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c80e30d5-b3f9-45b1-85fc-bad652af206b\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"access_key_id\":\"AKIAIOSFODNN7EXAMPLE\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_all\":true},\"created_at\":\"2025-08-06T17:41:41.445076718Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/SQS\",\"AWS/ElasticMapReduce\"]}},\"modified_at\":\"2025-08-06T17:41:41.445076718Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/c80e30d5-b3f9-45b1-85fc-bad652af206b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an AWS integration returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:41.716Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws-invalid", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"invalid value\",\"meta\":{\"aws_partition\":\"invalid partition: aws-invalid\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create an AWS integration returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:41.817Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9bb08fa5-18b0-49fd-a5d7-b74f930e52b0\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"ef76163b26b04aa2a4d4d6f7be1738f3\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:42.675508202Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:42.675508202Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Account already exists\",\"detail\":\"AWS account with provided id already exists\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/9bb08fa5-18b0-49fd-a5d7-b74f930e52b0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an AWS integration returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2026-02-23T18:02:25.766Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/b2087a32-4d4f-45b1-9321-1a0a48e9d7cf/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete AWS CCM config returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2026-02-23T18:02:25.891Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/00000000-0000-0000-0000-000000000000/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete AWS CCM config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:44.610Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/not-a-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"aws_account_config_id\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete an AWS integration returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:44.707Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f45e01d8-2cc4-45b6-af71-6b3d3bb18dd2\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"9ae7407fac894f8fb2d25bac85a55a89\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:45.592435491Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:45.592435491Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/f45e01d8-2cc4-45b6-af71-6b3d3bb18dd2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/f45e01d8-2cc4-45b6-af71-6b3d3bb18dd2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an AWS integration returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:46.023Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b995026f-036d-4303-b2b1-fe6003893f2e\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"707dcccdd8424fb999d08d39a108a593\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:46.926789123Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:46.926789123Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/448169a8-251c-4344-abee-1c4edef39f7a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/b995026f-036d-4303-b2b1-fe6003893f2e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete an AWS integration returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:47.356Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/integration/aws/generate_new_external_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b8dba3ff8a224e718da6eecb83f51d25\",\"type\":\"external_id\",\"attributes\":{\"external_id\":\"b8dba3ff8a224e718da6eecb83f51d25\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Generate a new external ID returns \"AWS External ID object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:47.870Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/integration/aws/generate_new_external_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b6ec0b8a9ddf478e98b0134747bab2c5\",\"type\":\"external_id\",\"attributes\":{\"external_id\":\"b6ec0b8a9ddf478e98b0134747bab2c5\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Generate new external ID returns \"AWS External ID object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2026-02-23T18:02:25.966Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/accounts/00000000-0000-0000-0000-000000000000/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get AWS CCM config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-09-17T18:27:22.560Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/iam_permissions/standard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"permissions\",\"type\":\"permissions\",\"attributes\":{\"permissions\":[\"account:GetAccountInformation\",\"airflow:GetEnvironment\",\"airflow:ListEnvironments\",\"apigateway:GET\",\"appsync:ListGraphqlApis\",\"autoscaling:Describe*\",\"backup:List*\",\"batch:DescribeJobDefinitions\",\"bcm-data-exports:GetExport\",\"bcm-data-exports:ListExports\",\"budgets:ViewBudget\",\"cloudfront:GetDistributionConfig\",\"cloudfront:ListDistributions\",\"cloudtrail:DescribeTrails\",\"cloudtrail:GetTrail\",\"cloudtrail:GetTrailStatus\",\"cloudtrail:ListTrails\",\"cloudtrail:LookupEvents\",\"cloudwatch:Describe*\",\"cloudwatch:Get*\",\"cloudwatch:List*\",\"codebuild:BatchGetProjects\",\"codebuild:ListProjects\",\"codedeploy:BatchGet*\",\"codedeploy:List*\",\"cur:DescribeReportDefinitions\",\"directconnect:Describe*\",\"dms:DescribeReplicationInstances\",\"dynamodb:Describe*\",\"dynamodb:List*\",\"ec2:Describe*\",\"ecs:Describe*\",\"ecs:List*\",\"eks:DescribeCluster\",\"eks:ListClusters\",\"elasticache:Describe*\",\"elasticache:List*\",\"elasticfilesystem:DescribeAccessPoints\",\"elasticfilesystem:DescribeFileSystems\",\"elasticfilesystem:DescribeTags\",\"elasticloadbalancing:Describe*\",\"elasticmapreduce:Describe*\",\"elasticmapreduce:List*\",\"es:DescribeElasticsearchDomains\",\"es:ListDomainNames\",\"es:ListTags\",\"events:CreateEventBus\",\"fsx:DescribeFileSystems\",\"fsx:ListTagsForResource\",\"health:DescribeAffectedEntities\",\"health:DescribeEventDetails\",\"health:DescribeEvents\",\"iam:ListAccountAliases\",\"kinesis:Describe*\",\"kinesis:List*\",\"lambda:List*\",\"logs:DeleteSubscriptionFilter\",\"logs:DescribeDeliveries\",\"logs:DescribeDeliverySources\",\"logs:DescribeLogGroups\",\"logs:DescribeLogStreams\",\"logs:DescribeSubscriptionFilters\",\"logs:FilterLogEvents\",\"logs:GetDeliveryDestination\",\"logs:PutSubscriptionFilter\",\"logs:TestMetricFilter\",\"network-firewall:DescribeLoggingConfiguration\",\"network-firewall:ListFirewalls\",\"oam:ListAttachedLinks\",\"oam:ListSinks\",\"organizations:Describe*\",\"organizations:List*\",\"rds:Describe*\",\"rds:List*\",\"redshift-serverless:ListNamespaces\",\"redshift:DescribeClusters\",\"redshift:DescribeLoggingStatus\",\"route53:List*\",\"route53resolver:ListResolverQueryLogConfigs\",\"s3:GetBucketLocation\",\"s3:GetBucketLogging\",\"s3:GetBucketNotification\",\"s3:GetBucketTagging\",\"s3:ListAllMyBuckets\",\"s3:PutBucketNotification\",\"ses:Get*\",\"ses:List*\",\"sns:GetSubscriptionAttributes\",\"sns:List*\",\"sns:Publish\",\"sqs:ListQueues\",\"ssm:GetServiceSetting\",\"ssm:ListCommands\",\"states:DescribeStateMachine\",\"states:ListStateMachines\",\"support:DescribeTrustedAdvisor*\",\"support:RefreshTrustedAdvisorCheck\",\"tag:GetResources\",\"tag:GetTagKeys\",\"tag:GetTagValues\",\"timestream:DescribeEndpoints\",\"wafv2:ListLoggingConfigurations\",\"xray:BatchGetTraces\",\"xray:GetTraceSummaries\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get AWS integration standard IAM permissions returns \"AWS IAM Permissions object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:49.517Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"957a9f7c-72ec-4946-baf4-42f00420f299\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"329146b44caa4f4fa7d0b6478f392c9e\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:50.383382183Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:50.383382183Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/accounts/957a9f7c-72ec-4946-baf4-42f00420f299", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"957a9f7c-72ec-4946-baf4-42f00420f299\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"329146b44caa4f4fa7d0b6478f392c9e\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:50.383382Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:50.383382Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/957a9f7c-72ec-4946-baf4-42f00420f299", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get an AWS integration by config ID returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:50.873Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/accounts/not-a-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"aws_account_config_id\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get an AWS integration by config ID returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:50.972Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/accounts/448169a8-251c-4344-abee-1c4edef39f7a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get an AWS integration by config ID returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-09-17T18:27:22.885Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/iam_permissions/resource_collection", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"permissions\",\"type\":\"permissions\",\"attributes\":{\"permissions\":[\"account:GetContactInformation\",\"amplify:ListApps\",\"amplify:ListArtifacts\",\"amplify:ListBackendEnvironments\",\"amplify:ListBranches\",\"amplify:ListDomainAssociations\",\"amplify:ListJobs\",\"amplify:ListWebhooks\",\"aoss:BatchGetCollection\",\"aoss:ListCollections\",\"app-integrations:GetApplication\",\"app-integrations:GetDataIntegration\",\"app-integrations:ListApplicationAssociations\",\"app-integrations:ListApplications\",\"app-integrations:ListDataIntegrationAssociations\",\"app-integrations:ListDataIntegrations\",\"app-integrations:ListEventIntegrationAssociations\",\"app-integrations:ListEventIntegrations\",\"appstream:DescribeAppBlockBuilders\",\"appstream:DescribeAppBlocks\",\"appstream:DescribeApplications\",\"appstream:DescribeFleets\",\"appstream:DescribeImageBuilders\",\"appstream:DescribeImages\",\"appstream:DescribeStacks\",\"appsync:GetGraphqlApi\",\"aps:DescribeRuleGroupsNamespace\",\"aps:DescribeScraper\",\"aps:DescribeWorkspace\",\"aps:ListRuleGroupsNamespaces\",\"aps:ListScrapers\",\"aps:ListWorkspaces\",\"athena:BatchGetNamedQuery\",\"athena:BatchGetPreparedStatement\",\"auditmanager:GetAssessment\",\"auditmanager:GetAssessmentFramework\",\"auditmanager:GetControl\",\"b2bi:GetCapability\",\"b2bi:GetPartnership\",\"b2bi:GetProfile\",\"b2bi:GetTransformer\",\"b2bi:ListCapabilities\",\"b2bi:ListPartnerships\",\"b2bi:ListProfiles\",\"b2bi:ListTransformers\",\"backup-gateway:GetGateway\",\"backup-gateway:GetHypervisor\",\"backup-gateway:GetVirtualMachine\",\"backup-gateway:ListGateways\",\"backup-gateway:ListHypervisors\",\"backup-gateway:ListVirtualMachines\",\"backup:DescribeFramework\",\"backup:GetLegalHold\",\"backup:ListBackupPlans\",\"backup:ListFrameworks\",\"backup:ListLegalHolds\",\"backup:ListProtectedResources\",\"backup:ListRecoveryPointsByBackupVault\",\"batch:DescribeJobQueues\",\"batch:DescribeSchedulingPolicies\",\"batch:ListSchedulingPolicies\",\"bedrock:GetAgent\",\"bedrock:GetAgentActionGroup\",\"bedrock:GetAsyncInvoke\",\"bedrock:GetBlueprint\",\"bedrock:GetDataSource\",\"bedrock:GetEvaluationJob\",\"bedrock:GetFlow\",\"bedrock:GetFlowVersion\",\"bedrock:GetGuardrail\",\"bedrock:GetKnowledgeBase\",\"bedrock:GetModelInvocationJob\",\"bedrock:GetPrompt\",\"bedrock:ListAgentCollaborators\",\"bedrock:ListAsyncInvokes\",\"bedrock:ListBlueprints\",\"bedrock:ListKnowledgeBaseDocuments\",\"cassandra:Select\",\"ce:DescribeCostCategoryDefinition\",\"ce:GetAnomalyMonitors\",\"ce:GetAnomalySubscriptions\",\"ce:GetCostCategories\",\"cloudformation:DescribeGeneratedTemplate\",\"cloudformation:DescribeResourceScan\",\"cloudformation:ListGeneratedTemplates\",\"cloudformation:ListResourceScans\",\"cloudformation:ListTypes\",\"cloudhsm:DescribeBackups\",\"cloudhsm:DescribeClusters\",\"codeartifact:DescribeDomain\",\"codeartifact:DescribePackageGroup\",\"codeartifact:DescribeRepository\",\"codeartifact:ListDomains\",\"codeartifact:ListPackageGroups\",\"codeartifact:ListPackages\",\"codeguru-profiler:ListFindingsReports\",\"codeguru-profiler:ListProfilingGroups\",\"codeguru-reviewer:ListCodeReviews\",\"codeguru-reviewer:ListRepositoryAssociations\",\"codeguru-security:GetFindings\",\"codeguru-security:GetScan\",\"codeguru-security:ListScans\",\"codepipeline:GetActionType\",\"codepipeline:ListActionTypes\",\"codepipeline:ListWebhooks\",\"connect:DescribeAgentStatus\",\"connect:DescribeAuthenticationProfile\",\"connect:DescribeContactFlow\",\"connect:DescribeContactFlowModule\",\"connect:DescribeHoursOfOperation\",\"connect:DescribeInstance\",\"connect:DescribeQueue\",\"connect:DescribeQuickConnect\",\"connect:DescribeRoutingProfile\",\"connect:DescribeSecurityProfile\",\"connect:DescribeUser\",\"connect:ListAgentStatuses\",\"connect:ListAuthenticationProfiles\",\"connect:ListContactFlowModules\",\"connect:ListContactFlows\",\"connect:ListHoursOfOperations\",\"connect:ListQueues\",\"connect:ListQuickConnects\",\"connect:ListRoutingProfiles\",\"connect:ListSecurityProfiles\",\"connect:ListUsers\",\"controltower:GetLandingZone\",\"controltower:ListEnabledBaselines\",\"controltower:ListEnabledControls\",\"controltower:ListLandingZones\",\"databrew:ListDatasets\",\"databrew:ListRecipes\",\"databrew:ListRulesets\",\"databrew:ListSchedules\",\"datazone:GetDomain\",\"datazone:ListDomains\",\"deadline:GetBudget\",\"deadline:GetLicenseEndpoint\",\"deadline:GetQueue\",\"deadline:ListBudgets\",\"deadline:ListFarms\",\"deadline:ListFleets\",\"deadline:ListLicenseEndpoints\",\"deadline:ListMonitors\",\"deadline:ListQueues\",\"deadline:ListWorkers\",\"devicefarm:ListDeviceInstances\",\"devicefarm:ListDevicePools\",\"devicefarm:ListDevices\",\"devicefarm:ListInstanceProfiles\",\"devicefarm:ListNetworkProfiles\",\"devicefarm:ListRemoteAccessSessions\",\"devicefarm:ListTestGridProjects\",\"devicefarm:ListTestGridSessions\",\"devicefarm:ListUploads\",\"devicefarm:ListVPCEConfigurations\",\"dlm:GetLifecyclePolicies\",\"dlm:GetLifecyclePolicy\",\"docdb-elastic:GetCluster\",\"docdb-elastic:GetClusterSnapshot\",\"docdb-elastic:ListClusterSnapshots\",\"drs:DescribeJobs\",\"drs:DescribeLaunchConfigurationTemplates\",\"drs:DescribeRecoveryInstances\",\"drs:DescribeReplicationConfigurationTemplates\",\"drs:DescribeSourceNetworks\",\"drs:DescribeSourceServers\",\"dsql:GetCluster\",\"dsql:ListClusters\",\"dynamodb:DescribeBackup\",\"dynamodb:DescribeStream\",\"ec2:GetAllowedImagesSettings\",\"ec2:GetEbsDefaultKmsKeyId\",\"ec2:GetInstanceMetadataDefaults\",\"ec2:GetSerialConsoleAccessStatus\",\"ec2:GetSnapshotBlockPublicAccessState\",\"ec2:GetVerifiedAccessEndpointPolicy\",\"ec2:GetVerifiedAccessEndpointTargets\",\"ec2:GetVerifiedAccessGroupPolicy\",\"eks:DescribeAccessEntry\",\"eks:DescribeAddon\",\"eks:DescribeIdentityProviderConfig\",\"eks:DescribeInsight\",\"eks:DescribePodIdentityAssociation\",\"eks:DescribeUpdate\",\"eks:ListAccessEntries\",\"eks:ListAddons\",\"eks:ListAssociatedAccessPolicies\",\"eks:ListEksAnywhereSubscriptions\",\"eks:ListIdentityProviderConfigs\",\"eks:ListInsights\",\"eks:ListPodIdentityAssociations\",\"elasticmapreduce:ListInstanceFleets\",\"elasticmapreduce:ListInstanceGroups\",\"emr-containers:ListManagedEndpoints\",\"emr-containers:ListSecurityConfigurations\",\"emr-containers:ListVirtualClusters\",\"frauddetector:DescribeDetector\",\"frauddetector:DescribeModelVersions\",\"frauddetector:GetBatchImportJobs\",\"frauddetector:GetBatchPredictionJobs\",\"frauddetector:GetDetectorVersion\",\"frauddetector:GetEntityTypes\",\"frauddetector:GetEventTypes\",\"frauddetector:GetExternalModels\",\"frauddetector:GetLabels\",\"frauddetector:GetListsMetadata\",\"frauddetector:GetModels\",\"frauddetector:GetOutcomes\",\"frauddetector:GetRules\",\"frauddetector:GetVariables\",\"gamelift:DescribeGameSessionQueues\",\"gamelift:DescribeMatchmakingConfigurations\",\"gamelift:DescribeMatchmakingRuleSets\",\"gamelift:ListAliases\",\"gamelift:ListContainerFleets\",\"gamelift:ListContainerGroupDefinitions\",\"gamelift:ListGameServerGroups\",\"gamelift:ListLocations\",\"gamelift:ListScripts\",\"geo:DescribeGeofenceCollection\",\"geo:DescribeKey\",\"geo:DescribeMap\",\"geo:DescribePlaceIndex\",\"geo:DescribeRouteCalculator\",\"geo:DescribeTracker\",\"geo:ListGeofenceCollections\",\"geo:ListKeys\",\"geo:ListPlaceIndexes\",\"geo:ListRouteCalculators\",\"geo:ListTrackers\",\"glacier:GetVaultNotifications\",\"glue:ListRegistries\",\"grafana:DescribeWorkspace\",\"greengrass:GetBulkDeploymentStatus\",\"greengrass:GetComponent\",\"greengrass:GetConnectivityInfo\",\"greengrass:GetCoreDevice\",\"greengrass:GetDeployment\",\"greengrass:GetGroup\",\"imagebuilder:GetContainerRecipe\",\"imagebuilder:GetDistributionConfiguration\",\"imagebuilder:GetImageRecipe\",\"imagebuilder:GetInfrastructureConfiguration\",\"imagebuilder:GetLifecyclePolicy\",\"imagebuilder:GetWorkflow\",\"imagebuilder:ListComponents\",\"imagebuilder:ListContainerRecipes\",\"imagebuilder:ListDistributionConfigurations\",\"imagebuilder:ListImagePipelines\",\"imagebuilder:ListImageRecipes\",\"imagebuilder:ListImages\",\"imagebuilder:ListInfrastructureConfigurations\",\"imagebuilder:ListLifecyclePolicies\",\"imagebuilder:ListWorkflows\",\"iotfleetwise:GetCampaign\",\"iotfleetwise:GetSignalCatalog\",\"iotfleetwise:GetStateTemplate\",\"iotfleetwise:GetVehicle\",\"iotfleetwise:ListCampaigns\",\"iotfleetwise:ListDecoderManifests\",\"iotfleetwise:ListFleets\",\"iotfleetwise:ListSignalCatalogs\",\"iotfleetwise:ListStateTemplates\",\"iotfleetwise:ListVehicles\",\"iotsitewise:DescribeAsset\",\"iotsitewise:DescribeAssetModel\",\"iotsitewise:DescribeDashboard\",\"iotsitewise:DescribeDataset\",\"iotsitewise:DescribePortal\",\"iotsitewise:DescribeProject\",\"iotsitewise:ListAssets\",\"iotsitewise:ListDashboards\",\"iotsitewise:ListDatasets\",\"iotsitewise:ListPortals\",\"iotsitewise:ListProjects\",\"iotsitewise:ListTimeSeries\",\"iottwinmaker:GetComponentType\",\"iottwinmaker:GetEntity\",\"iottwinmaker:GetScene\",\"iottwinmaker:GetWorkspace\",\"iottwinmaker:ListComponentTypes\",\"iottwinmaker:ListEntities\",\"iottwinmaker:ListScenes\",\"iotwireless:GetDeviceProfile\",\"iotwireless:GetMulticastGroup\",\"iotwireless:GetNetworkAnalyzerConfiguration\",\"iotwireless:GetServiceProfile\",\"iotwireless:GetWirelessDevice\",\"iotwireless:GetWirelessGateway\",\"iotwireless:ListDestinations\",\"iotwireless:ListDeviceProfiles\",\"iotwireless:ListMulticastGroups\",\"iotwireless:ListNetworkAnalyzerConfigurations\",\"iotwireless:ListServiceProfiles\",\"iotwireless:ListWirelessDevices\",\"iotwireless:ListWirelessGateways\",\"ivs:GetChannel\",\"ivs:GetComposition\",\"ivs:GetEncoderConfiguration\",\"ivs:GetIngestConfiguration\",\"ivs:GetPublicKey\",\"ivs:GetRecordingConfiguration\",\"ivs:GetStage\",\"ivs:ListChannels\",\"ivs:ListCompositions\",\"ivs:ListEncoderConfigurations\",\"ivs:ListIngestConfigurations\",\"ivs:ListPlaybackKeyPairs\",\"ivs:ListPlaybackRestrictionPolicies\",\"ivs:ListPublicKeys\",\"ivs:ListRecordingConfigurations\",\"ivs:ListStages\",\"ivs:ListStorageConfigurations\",\"ivs:ListStreamKeys\",\"ivschat:GetLoggingConfiguration\",\"ivschat:GetRoom\",\"ivschat:ListLoggingConfigurations\",\"ivschat:ListRooms\",\"lakeformation:GetDataLakeSettings\",\"lakeformation:ListPermissions\",\"lambda:GetFunction\",\"launchwizard:GetDeployment\",\"launchwizard:ListDeployments\",\"lightsail:GetAlarms\",\"lightsail:GetCertificates\",\"lightsail:GetDistributions\",\"lightsail:GetInstancePortStates\",\"lightsail:GetRelationalDatabaseParameters\",\"lightsail:GetRelationalDatabaseSnapshots\",\"lightsail:GetRelationalDatabases\",\"lightsail:GetStaticIps\",\"macie2:GetAllowList\",\"macie2:GetCustomDataIdentifier\",\"macie2:GetMacieSession\",\"macie2:ListAllowLists\",\"macie2:ListCustomDataIdentifiers\",\"macie2:ListMembers\",\"managedblockchain:GetAccessor\",\"managedblockchain:GetMember\",\"managedblockchain:GetNetwork\",\"managedblockchain:GetNode\",\"managedblockchain:GetProposal\",\"managedblockchain:ListAccessors\",\"managedblockchain:ListInvitations\",\"managedblockchain:ListMembers\",\"managedblockchain:ListNodes\",\"managedblockchain:ListProposals\",\"medialive:ListChannelPlacementGroups\",\"medialive:ListCloudWatchAlarmTemplateGroups\",\"medialive:ListCloudWatchAlarmTemplates\",\"medialive:ListClusters\",\"medialive:ListEventBridgeRuleTemplateGroups\",\"medialive:ListEventBridgeRuleTemplates\",\"medialive:ListInputDevices\",\"medialive:ListInputSecurityGroups\",\"medialive:ListInputs\",\"medialive:ListMultiplexes\",\"medialive:ListNetworks\",\"medialive:ListNodes\",\"medialive:ListOfferings\",\"medialive:ListReservations\",\"medialive:ListSdiSources\",\"medialive:ListSignalMaps\",\"mediapackage-vod:DescribeAsset\",\"mediapackage-vod:ListAssets\",\"mediapackage-vod:ListPackagingConfigurations\",\"mediapackage:ListChannels\",\"mediapackage:ListHarvestJobs\",\"mediapackagev2:GetChannel\",\"mediapackagev2:GetChannelGroup\",\"mediapackagev2:GetChannelPolicy\",\"mediapackagev2:GetOriginEndpoint\",\"mediapackagev2:GetOriginEndpointPolicy\",\"mediapackagev2:ListChannelGroups\",\"mediapackagev2:ListChannels\",\"mediapackagev2:ListHarvestJobs\",\"mediapackagev2:ListOriginEndpoints\",\"memorydb:DescribeAcls\",\"memorydb:DescribeMultiRegionClusters\",\"memorydb:DescribeParameterGroups\",\"memorydb:DescribeReservedNodes\",\"memorydb:DescribeSnapshots\",\"memorydb:DescribeSubnetGroups\",\"memorydb:DescribeUsers\",\"mobiletargeting:GetApps\",\"mobiletargeting:GetCampaigns\",\"mobiletargeting:GetChannels\",\"mobiletargeting:GetEventStream\",\"mobiletargeting:GetSegments\",\"mobiletargeting:ListJourneys\",\"mobiletargeting:ListTemplates\",\"network-firewall:DescribeTLSInspectionConfiguration\",\"network-firewall:DescribeVpcEndpointAssociation\",\"network-firewall:ListTLSInspectionConfigurations\",\"network-firewall:ListVpcEndpointAssociations\",\"networkmanager:GetConnectPeer\",\"networkmanager:GetConnections\",\"networkmanager:GetCoreNetwork\",\"networkmanager:GetDevices\",\"networkmanager:GetLinks\",\"networkmanager:GetSites\",\"networkmanager:ListAttachments\",\"networkmanager:ListConnectPeers\",\"networkmanager:ListCoreNetworks\",\"networkmanager:ListPeerings\",\"osis:GetPipeline\",\"osis:GetPipelineBlueprint\",\"osis:ListPipelineBlueprints\",\"osis:ListPipelines\",\"payment-cryptography:GetKey\",\"payment-cryptography:ListAliases\",\"payment-cryptography:ListKeys\",\"pca-connector-ad:ListConnectors\",\"pca-connector-ad:ListDirectoryRegistrations\",\"pca-connector-ad:ListTemplates\",\"pca-connector-scep:ListConnectors\",\"personalize:DescribeAlgorithm\",\"personalize:DescribeBatchInferenceJob\",\"personalize:DescribeBatchSegmentJob\",\"personalize:DescribeCampaign\",\"personalize:DescribeDataDeletionJob\",\"personalize:DescribeDataset\",\"personalize:DescribeDatasetExportJob\",\"personalize:DescribeDatasetImportJob\",\"personalize:DescribeEventTracker\",\"personalize:DescribeFeatureTransformation\",\"personalize:DescribeFilter\",\"personalize:DescribeMetricAttribution\",\"personalize:DescribeRecipe\",\"personalize:DescribeRecommender\",\"personalize:DescribeSchema\",\"personalize:DescribeSolution\",\"personalize:ListBatchInferenceJobs\",\"personalize:ListBatchSegmentJobs\",\"personalize:ListCampaigns\",\"personalize:ListDataDeletionJobs\",\"personalize:ListDatasetExportJobs\",\"personalize:ListDatasetImportJobs\",\"personalize:ListDatasets\",\"personalize:ListEventTrackers\",\"personalize:ListFilters\",\"personalize:ListMetricAttributions\",\"personalize:ListRecipes\",\"personalize:ListRecommenders\",\"personalize:ListSchemas\",\"personalize:ListSolutions\",\"pipes:ListPipes\",\"proton:GetComponent\",\"proton:GetDeployment\",\"proton:GetEnvironment\",\"proton:GetEnvironmentAccountConnection\",\"proton:GetEnvironmentTemplate\",\"proton:GetEnvironmentTemplateVersion\",\"proton:GetRepository\",\"proton:GetService\",\"proton:GetServiceInstance\",\"proton:GetServiceTemplate\",\"proton:GetServiceTemplateVersion\",\"proton:ListComponents\",\"proton:ListDeployments\",\"proton:ListEnvironmentAccountConnections\",\"proton:ListEnvironmentTemplateVersions\",\"proton:ListEnvironmentTemplates\",\"proton:ListEnvironments\",\"proton:ListRepositories\",\"proton:ListServiceInstances\",\"proton:ListServiceTemplateVersions\",\"proton:ListServiceTemplates\",\"proton:ListServices\",\"qbusiness:GetApplication\",\"qbusiness:GetDataAccessor\",\"qbusiness:GetDataSource\",\"qbusiness:GetIndex\",\"qbusiness:GetPlugin\",\"qbusiness:GetRetriever\",\"qbusiness:GetWebExperience\",\"qbusiness:ListDataAccessors\",\"ram:GetResourceShareInvitations\",\"rbin:GetRule\",\"rbin:ListRules\",\"redshift-serverless:GetSnapshot\",\"redshift-serverless:ListEndpointAccess\",\"redshift-serverless:ListManagedWorkgroups\",\"redshift-serverless:ListNamespaces\",\"redshift-serverless:ListRecoveryPoints\",\"redshift-serverless:ListSnapshots\",\"refactor-spaces:ListApplications\",\"refactor-spaces:ListEnvironments\",\"refactor-spaces:ListRoutes\",\"refactor-spaces:ListServices\",\"resiliencehub:DescribeApp\",\"resiliencehub:DescribeAppAssessment\",\"resiliencehub:ListAppAssessments\",\"resiliencehub:ListApps\",\"resiliencehub:ListResiliencyPolicies\",\"resource-explorer-2:GetIndex\",\"resource-explorer-2:GetManagedView\",\"resource-explorer-2:GetView\",\"resource-explorer-2:ListManagedViews\",\"resource-explorer-2:ListViews\",\"resource-groups:GetGroup\",\"resource-groups:ListGroups\",\"route53-recovery-readiness:ListCells\",\"route53-recovery-readiness:ListReadinessChecks\",\"route53-recovery-readiness:ListRecoveryGroups\",\"route53-recovery-readiness:ListResourceSets\",\"rum:GetAppMonitor\",\"rum:ListAppMonitors\",\"s3-outposts:ListRegionalBuckets\",\"savingsplans:DescribeSavingsPlanRates\",\"savingsplans:DescribeSavingsPlans\",\"scheduler:GetSchedule\",\"scheduler:ListScheduleGroups\",\"scheduler:ListSchedules\",\"securitylake:ListDataLakes\",\"securitylake:ListSubscribers\",\"servicecatalog:DescribePortfolio\",\"servicecatalog:DescribeProduct\",\"servicecatalog:GetApplication\",\"servicecatalog:GetAttributeGroup\",\"servicecatalog:ListApplications\",\"servicecatalog:ListAttributeGroups\",\"servicecatalog:ListPortfolios\",\"servicecatalog:SearchProducts\",\"servicediscovery:GetNamespace\",\"servicediscovery:GetService\",\"servicediscovery:ListNamespaces\",\"servicediscovery:ListServices\",\"ses:GetArchive\",\"ses:GetContactList\",\"ses:GetCustomVerificationEmailTemplate\",\"ses:GetDedicatedIpPool\",\"ses:GetIdentityMailFromDomainAttributes\",\"ses:GetIngressPoint\",\"ses:GetMultiRegionEndpoint\",\"ses:GetRelay\",\"ses:GetRuleSet\",\"ses:GetTemplate\",\"ses:GetTrafficPolicy\",\"ses:ListAddonInstances\",\"ses:ListAddonSubscriptions\",\"ses:ListAddressLists\",\"ses:ListArchives\",\"ses:ListContactLists\",\"ses:ListCustomVerificationEmailTemplates\",\"ses:ListIngressPoints\",\"ses:ListMultiRegionEndpoints\",\"ses:ListRelays\",\"ses:ListRuleSets\",\"ses:ListTemplates\",\"ses:ListTrafficPolicies\",\"signer:GetSigningProfile\",\"signer:ListSigningProfiles\",\"sms-voice:DescribeConfigurationSets\",\"sms-voice:DescribeOptOutLists\",\"sms-voice:DescribePhoneNumbers\",\"sms-voice:DescribePools\",\"sms-voice:DescribeProtectConfigurations\",\"sms-voice:DescribeRegistrationAttachments\",\"sms-voice:DescribeRegistrations\",\"sms-voice:DescribeSenderIds\",\"sms-voice:DescribeVerifiedDestinationNumbers\",\"snowball:DescribeCluster\",\"snowball:DescribeJob\",\"sns:ListEndpointsByPlatformApplication\",\"sns:ListPlatformApplications\",\"social-messaging:GetLinkedWhatsAppBusinessAccount\",\"social-messaging:ListLinkedWhatsAppBusinessAccounts\",\"sqs:GetQueueUrl\",\"ssm-incidents:GetIncidentRecord\",\"ssm-incidents:GetReplicationSet\",\"ssm-incidents:GetResponsePlan\",\"ssm-incidents:ListIncidentRecords\",\"ssm-incidents:ListReplicationSets\",\"ssm-incidents:ListResponsePlans\",\"ssm:GetMaintenanceWindow\",\"ssm:GetOpsItem\",\"ssm:GetPatchBaseline\",\"states:ListActivities\",\"states:ListExecutions\",\"states:ListMapRuns\",\"states:ListStateMachineAliases\",\"storagegateway:DescribeFileSystemAssociations\",\"storagegateway:DescribeSMBFileShares\",\"textract:GetAdapter\",\"textract:GetAdapterVersion\",\"textract:ListAdapterVersions\",\"textract:ListAdapters\",\"timestream:ListScheduledQueries\",\"timestream:ListTables\",\"transcribe:GetCallAnalyticsJob\",\"transcribe:GetMedicalScribeJob\",\"transcribe:GetMedicalTranscriptionJob\",\"transcribe:GetTranscriptionJob\",\"transcribe:ListMedicalScribeJobs\",\"translate:GetParallelData\",\"translate:GetTerminology\",\"verifiedpermissions:GetPolicyStore\",\"verifiedpermissions:ListIdentitySources\",\"verifiedpermissions:ListPolicies\",\"verifiedpermissions:ListPolicyStores\",\"verifiedpermissions:ListPolicyTemplates\",\"vpc-lattice:GetListener\",\"vpc-lattice:GetResourceConfiguration\",\"vpc-lattice:GetResourceGateway\",\"vpc-lattice:GetRule\",\"vpc-lattice:GetService\",\"vpc-lattice:GetServiceNetwork\",\"vpc-lattice:GetTargetGroup\",\"vpc-lattice:ListAccessLogSubscriptions\",\"vpc-lattice:ListListeners\",\"vpc-lattice:ListResourceConfigurations\",\"vpc-lattice:ListResourceEndpointAssociations\",\"vpc-lattice:ListResourceGateways\",\"vpc-lattice:ListRules\",\"vpc-lattice:ListServiceNetworkResourceAssociations\",\"vpc-lattice:ListServiceNetworkServiceAssociations\",\"vpc-lattice:ListServiceNetworkVpcAssociations\",\"vpc-lattice:ListServiceNetworks\",\"vpc-lattice:ListServices\",\"vpc-lattice:ListTargetGroups\",\"waf-regional:GetRule\",\"waf-regional:GetRuleGroup\",\"waf-regional:ListRuleGroups\",\"waf-regional:ListRules\",\"waf:GetRule\",\"waf:GetRuleGroup\",\"waf:ListRuleGroups\",\"waf:ListRules\",\"wafv2:GetIPSet\",\"wafv2:GetRegexPatternSet\",\"wafv2:GetRuleGroup\",\"workmail:DescribeOrganization\",\"workmail:ListOrganizations\",\"workspaces-web:GetBrowserSettings\",\"workspaces-web:GetDataProtectionSettings\",\"workspaces-web:GetIdentityProvider\",\"workspaces-web:GetIpAccessSettings\",\"workspaces-web:GetNetworkSettings\",\"workspaces-web:GetTrustStore\",\"workspaces-web:GetUserAccessLoggingSettings\",\"workspaces-web:GetUserSettings\",\"workspaces-web:ListBrowserSettings\",\"workspaces-web:ListDataProtectionSettings\",\"workspaces-web:ListIdentityProviders\",\"workspaces-web:ListIpAccessSettings\",\"workspaces-web:ListNetworkSettings\",\"workspaces-web:ListPortals\",\"workspaces-web:ListTrustStores\",\"workspaces-web:ListUserAccessLoggingSettings\",\"workspaces-web:ListUserSettings\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get resource collection IAM permissions returns \"AWS IAM Permissions object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:51.115Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"78f57c22-7baf-433d-b7aa-5fa13c559a13\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"526ec638f871448ca210d7faa3cbacb5\"},\"aws_account_id\":\"175440101400\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T13:36:57.316016Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T13:36:57.316016Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"272d07f7-dd99-4285-82ed-cb352012a9c1\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"82d6ad5d6cf647cca82ea19e06779b61\"},\"aws_account_id\":\"175440101500\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T13:36:56.938404Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T13:36:58.498196Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"6393ceb8-b607-46a0-b4e8-d43e151c05dd\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"218a5cdfa31e4021b72d1deb6a9fdd8a\"},\"aws_account_id\":\"175435781300\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T01:36:55.574106Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T01:36:55.574106Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"7b24df2e-e295-4711-a3aa-b61085567ca6\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"f44fb8ebedd54b548e9f1cab843b82ee\"},\"aws_account_id\":\"175435781500\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T01:36:57.118481Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T01:36:58.555123Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"49b8113c-910b-49b0-896b-bd4b30e00bd8\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"3d57463ae14c4a76b5e2bfdff19d2ced\"},\"aws_account_id\":\"175448737400\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T13:36:16.914586Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T13:36:16.914586Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"36f2cc66-b562-446a-b81a-d43b41e83a3c\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"3b273e1e1b8b4d93acd4839a0c6c3d24\"},\"aws_account_id\":\"175448737600\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T13:36:21.131146Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T13:36:22.656032Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"40edb96b-3558-4668-8c34-18fc1a23a226\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"224a55d50f0f4b3792c9e0f30be135dc\"},\"aws_account_id\":\"175444417500\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T01:36:16.94896Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T01:36:16.94896Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"4761d2b2-ab71-4f92-b6ab-2a274c230153\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"6186b8b5ca0d4b00a48b529fe499093f\"},\"aws_account_id\":\"175444417700\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T01:36:20.468056Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T01:36:22.030338Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"7207bad7-db91-422c-ad16-971c514b0f2d\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"4e322bbec436441c8d71026cf2949a90\"},\"aws_account_id\":\"175441537400\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T17:36:18.501132Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T17:36:18.501132Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"961bbdea-344b-4425-a4ec-5fcd976589cf\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"ce7d9af873a142779856a180344db385\"},\"aws_account_id\":\"175441537600\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T17:36:18.50113Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T17:36:19.998433Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"26dc378d-e1b6-4ab5-aa9e-674d71f6022a\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"05c9edc19c854068a91a4ac7e8f3dca4\"},\"aws_account_id\":\"175437221300\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T05:36:55.631391Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T05:36:55.631391Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"7c98648f-edde-4498-a6ca-a2e2de01ad7e\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"97c49aeec1b34450862037954cb89622\"},\"aws_account_id\":\"175437221500\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T05:36:57.448851Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T05:36:58.895277Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"ea72a9bb-6164-41e8-82af-8393c3a440f4\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"f441b908fae04fa1b02e18023b47b90d\"},\"aws_account_id\":\"175445857500\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T05:36:18.675872Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T05:36:18.675872Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"b85d4358-3e34-42b4-8646-9d8dd78a335e\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"d4f4dfa9dc8b45d19c5317d08d47e0be\"},\"aws_account_id\":\"175445857600\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T05:36:18.846399Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T05:36:20.289508Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"a04b14a5-ae10-4df0-8306-db6ba73f4478\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"6dbdee6283034de9898988fc8dd22bf0\"},\"aws_account_id\":\"175450177400\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T17:36:18.633345Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T17:36:18.633345Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"a763f78b-354b-4740-a260-3117b34c0ba0\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"6c7ce0507db145cf922c02fdbf5a62a8\"},\"aws_account_id\":\"175450177700\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T17:36:20.976467Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T17:36:22.835871Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"d0e31326-1f96-497f-9b91-be6d84511af9\",\"type\":\"account\",\"attributes\":{\"account_tags\":[],\"auth_config\":{\"role_name\":\"test\",\"external_id\":\"65f9a9d9982647bfa617d244b9c38eca\"},\"aws_account_id\":\"123123123123\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_all\":true},\"created_at\":\"2025-08-04T20:36:50.114957Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[],\"namespace_filters\":{\"exclude_only\":[\"AWS/SQS\",\"AWS/ElasticMapReduce\"]}},\"modified_at\":\"2025-08-04T20:36:50.114957Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"fde9c895-97e8-40cb-b76e-6f2608788699\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"018be2c0a33945b987febcdb89f9a2e4\"},\"aws_account_id\":\"175442977500\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T21:36:16.909802Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T21:36:16.909802Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"73dbc6a2-b3c2-47c2-a158-095bf6391537\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"67687702687746fa8722cbbc2d94c1c8\"},\"aws_account_id\":\"175442977600\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T21:36:18.768054Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T21:36:20.237807Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"f58f260d-d022-437f-9839-41d7555d75b2\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"5e5e9c7181b041bc8a5b6e46450ccad2\"},\"aws_account_id\":\"175438661300\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T09:36:57.90539Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T09:36:57.90539Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"2f673b6d-d2f5-431a-8a08-dee3ed9db083\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"a7eb1d7d9dbd4acaa017358c777188d9\"},\"aws_account_id\":\"175438661500\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-05T09:36:58.936128Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-05T09:37:00.429965Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"b1df002a-cc45-4e8e-b103-6d3eba63dc1f\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"122e2e156ef945c9af43f0e82b57469b\"},\"aws_account_id\":\"175434341300\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-04T21:36:55.595896Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-04T21:36:55.595896Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"ca07dc51-7916-46df-861f-4e537d8e25d8\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"1c1f1db807c54a8d97882b4fa22dd814\"},\"aws_account_id\":\"175434341500\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-04T21:36:57.48844Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-04T21:36:58.936282Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"668caf30-2a7e-4816-aa2f-af8e6575a65b\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"a77ca76425d74014bebf552c3289bafb\"},\"aws_account_id\":\"175447297700\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T09:36:19.052574Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T09:36:20.520405Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}},{\"id\":\"80403d93-2809-4a6a-94c2-7e8ab0459d8c\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"$KEY:$VALUE\"],\"auth_config\":{\"role_name\":\"DatadogAWSIntegrationRole\",\"external_id\":\"0d48676c772f4f4fb750e9ad98edffb7\"},\"aws_account_id\":\"175447297500\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-2\",\"us-west-1\",\"eu-west-1\",\"eu-central-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"sa-east-1\",\"ap-south-1\",\"ca-central-1\",\"eu-west-2\",\"eu-west-3\",\"eu-north-1\",\"af-south-1\",\"ap-east-1\",\"ap-south-2\",\"ap-southeast-3\",\"ap-southeast-4\",\"ap-southeast-5\",\"ca-west-1\",\"eu-central-2\",\"eu-south-1\",\"eu-south-2\",\"il-central-1\",\"me-central-1\",\"me-south-1\"]},\"created_at\":\"2025-08-06T09:36:18.476103Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[],\"sources\":[],\"log_source_config\":{\"tag_filters\":[]}}},\"metrics_config\":{\"enabled\":false,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"$KEY:$VALUE\"]}],\"namespace_filters\":{\"exclude_only\":[\"AWS/AutoScaling\",\"AWS/ElasticMapReduce\",\"AWS/SQS\"]}},\"modified_at\":\"2025-08-06T09:36:18.476103Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":true,\"extended_collection\":true},\"traces_config\":{\"xray_services\":{\"include_only\":[]}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all AWS integrations returns \"AWS Accounts List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:51.355Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/available_namespaces", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"namespaces\",\"type\":\"namespaces\",\"attributes\":{\"namespaces\":[\"AWS/ApiGateway\",\"AWS/AppRunner\",\"AWS/AppStream\",\"AWS/AppSync\",\"AWS/ApplicationELB\",\"AWS/Athena\",\"AWS/AutoScaling\",\"AWS/Backup\",\"AWS/Bedrock\",\"AWS/Billing\",\"AWS/Budgeting\",\"AWS/CertificateManager\",\"AWS/ELB\",\"AWS/CloudFront\",\"AWS/CloudHSM\",\"AWS/CloudSearch\",\"AWS/Logs\",\"AWS/CodeBuild\",\"AWS/CodeWhisperer\",\"AWS/Cognito\",\"AWS/Config\",\"AWS/Connect\",\"AWS/DMS\",\"AWS/DX\",\"AWS/DocDB\",\"AWS/DynamoDB\",\"AWS/DAX\",\"AWS/EC2\",\"AWS/EC2/API\",\"AWS/EC2/InfrastructurePerformance\",\"AWS/EC2Spot\",\"AWS/ElasticMapReduce\",\"AWS/ElastiCache\",\"AWS/ElasticBeanstalk\",\"AWS/EBS\",\"AWS/ECR\",\"AWS/ECS\",\"AWS/EFS\",\"AWS/ElasticInference\",\"AWS/ElasticTranscoder\",\"AWS/MediaConnect\",\"AWS/MediaConvert\",\"AWS/MediaLive\",\"AWS/MediaPackage\",\"AWS/MediaStore\",\"AWS/MediaTailor\",\"AWS/Events\",\"AWS/EventBridge/Pipes\",\"AWS/Scheduler\",\"AWS/FSx\",\"AWS/GameLift\",\"AWS/GlobalAccelerator\",\"Glue\",\"AWS/Inspector\",\"AWS/IoT\",\"AWS/KMS\",\"AWS/Cassandra\",\"AWS/Kinesis\",\"AWS/KinesisAnalytics\",\"AWS/Firehose\",\"AWS/Lambda\",\"AWS/Lex\",\"AWS/AmazonMQ\",\"AWS/ML\",\"AWS/Kafka\",\"AmazonMWAA\",\"AWS/MemoryDB\",\"AWS/NATGateway\",\"AWS/Neptune\",\"AWS/NetworkFirewall\",\"AWS/NetworkELB\",\"AWS/Network Manager\",\"AWS/NetworkMonitor\",\"AWS/ES\",\"AWS/AOSS\",\"AWS/OpsWorks\",\"AWS/PCS\",\"AWS/Polly\",\"AWS/PrivateLinkEndpoints\",\"AWS/PrivateLinkServices\",\"AWS/RDS\",\"AWS/RDS/Proxy\",\"AWS/Redshift\",\"AWS/Rekognition\",\"AWS/Route53\",\"AWS/Route53Resolver\",\"AWS/S3\",\"AWS/S3/Storage-Lens\",\"AWS/SageMaker\",\"/aws/sagemaker/Endpoints\",\"AWS/Sagemaker/LabelingJobs\",\"AWS/Sagemaker/ModelBuildingPipeline\",\"/aws/sagemaker/ProcessingJobs\",\"/aws/sagemaker/TrainingJobs\",\"/aws/sagemaker/TransformJobs\",\"AWS/SageMaker/Workteam\",\"AWS/ServiceQuotas\",\"AWS/DDoSProtection\",\"AWS/SES\",\"AWS/SNS\",\"AWS/SQS\",\"AWS/SWF\",\"AWS/States\",\"AWS/StorageGateway\",\"AWS/Textract\",\"AWS/TransitGateway\",\"AWS/Translate\",\"AWS/TrustedAdvisor\",\"AWS/Usage\",\"AWS/VPN\",\"WAF\",\"AWS/WAFV2\",\"AWS/WorkSpaces\",\"AWS/X-Ray\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List available namespaces returns \"AWS Namespaces List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2024-11-04T20:55:55.328Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/logs/services", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"logs_services\",\"type\":\"logs_services\",\"attributes\":{\"logs_services\":[\"apigw-access-logs\",\"apigw-execution-logs\",\"cloudfront\",\"elb\",\"elbv2\",\"lambda\",\"redshift\",\"s3\",\"states\",\"waf\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List log services returns \"AWS Logs Services List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:51.528Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/available_namespaces", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"namespaces\",\"type\":\"namespaces\",\"attributes\":{\"namespaces\":[\"AWS/ApiGateway\",\"AWS/AppRunner\",\"AWS/AppStream\",\"AWS/AppSync\",\"AWS/ApplicationELB\",\"AWS/Athena\",\"AWS/AutoScaling\",\"AWS/Backup\",\"AWS/Bedrock\",\"AWS/Billing\",\"AWS/Budgeting\",\"AWS/CertificateManager\",\"AWS/ELB\",\"AWS/CloudFront\",\"AWS/CloudHSM\",\"AWS/CloudSearch\",\"AWS/Logs\",\"AWS/CodeBuild\",\"AWS/CodeWhisperer\",\"AWS/Cognito\",\"AWS/Config\",\"AWS/Connect\",\"AWS/DMS\",\"AWS/DX\",\"AWS/DocDB\",\"AWS/DynamoDB\",\"AWS/DAX\",\"AWS/EC2\",\"AWS/EC2/API\",\"AWS/EC2/InfrastructurePerformance\",\"AWS/EC2Spot\",\"AWS/ElasticMapReduce\",\"AWS/ElastiCache\",\"AWS/ElasticBeanstalk\",\"AWS/EBS\",\"AWS/ECR\",\"AWS/ECS\",\"AWS/EFS\",\"AWS/ElasticInference\",\"AWS/ElasticTranscoder\",\"AWS/MediaConnect\",\"AWS/MediaConvert\",\"AWS/MediaLive\",\"AWS/MediaPackage\",\"AWS/MediaStore\",\"AWS/MediaTailor\",\"AWS/Events\",\"AWS/EventBridge/Pipes\",\"AWS/Scheduler\",\"AWS/FSx\",\"AWS/GameLift\",\"AWS/GlobalAccelerator\",\"Glue\",\"AWS/Inspector\",\"AWS/IoT\",\"AWS/KMS\",\"AWS/Cassandra\",\"AWS/Kinesis\",\"AWS/KinesisAnalytics\",\"AWS/Firehose\",\"AWS/Lambda\",\"AWS/Lex\",\"AWS/AmazonMQ\",\"AWS/ML\",\"AWS/Kafka\",\"AmazonMWAA\",\"AWS/MemoryDB\",\"AWS/NATGateway\",\"AWS/Neptune\",\"AWS/NetworkFirewall\",\"AWS/NetworkELB\",\"AWS/Network Manager\",\"AWS/NetworkMonitor\",\"AWS/ES\",\"AWS/AOSS\",\"AWS/OpsWorks\",\"AWS/PCS\",\"AWS/Polly\",\"AWS/PrivateLinkEndpoints\",\"AWS/PrivateLinkServices\",\"AWS/RDS\",\"AWS/RDS/Proxy\",\"AWS/Redshift\",\"AWS/Rekognition\",\"AWS/Route53\",\"AWS/Route53Resolver\",\"AWS/S3\",\"AWS/S3/Storage-Lens\",\"AWS/SageMaker\",\"/aws/sagemaker/Endpoints\",\"AWS/Sagemaker/LabelingJobs\",\"AWS/Sagemaker/ModelBuildingPipeline\",\"/aws/sagemaker/ProcessingJobs\",\"/aws/sagemaker/TrainingJobs\",\"/aws/sagemaker/TransformJobs\",\"AWS/SageMaker/Workteam\",\"AWS/ServiceQuotas\",\"AWS/DDoSProtection\",\"AWS/SES\",\"AWS/SNS\",\"AWS/SQS\",\"AWS/SWF\",\"AWS/States\",\"AWS/StorageGateway\",\"AWS/Textract\",\"AWS/TransitGateway\",\"AWS/Translate\",\"AWS/TrustedAdvisor\",\"AWS/Usage\",\"AWS/VPN\",\"WAF\",\"AWS/WAFV2\",\"AWS/WorkSpaces\",\"AWS/X-Ray\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List namespaces returns \"AWS Namespaces List object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2026-02-23T18:02:26.142Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ccm_config": { + "data_export_configs": [ + { + "bucket_name": "billing-updated", + "bucket_region": "us-west-2", + "report_name": "cost-report-updated", + "report_prefix": "reports-updated", + "report_type": "CUR2.0" + } + ] + } + }, + "type": "ccm_config" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/aws/accounts/b2087a32-4d4f-45b1-9321-1a0a48e9d7cf/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b2087a32-4d4f-45b1-9321-1a0a48e9d7cf\",\"type\":\"ccm_config\",\"attributes\":{\"data_export_configs\":[{\"report_name\":\"cost-report-updated\",\"report_prefix\":\"reports-updated\",\"report_type\":\"CUR2.0\",\"bucket_name\":\"billing-updated\",\"bucket_region\":\"us-west-2\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update AWS CCM config returns \"AWS CCM Config object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2026-02-23T18:02:26.253Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ccm_config": { + "data_export_configs": [ + { + "bucket_name": "billing", + "bucket_region": "us-east-1", + "report_name": "cost-and-usage-report", + "report_prefix": "reports", + "report_type": "CUR2.0" + } + ] + } + }, + "type": "ccm_config" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/aws/accounts/00000000-0000-0000-0000-000000000000/ccm_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update AWS CCM config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:51.622Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ab6528e3-5dab-4375-ae47-4ce93d1216e2\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"36416390710445e7be511e1622ee4149\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:52.510132689Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:52.510132689Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/aws/accounts/ab6528e3-5dab-4375-ae47-4ce93d1216e2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ab6528e3-5dab-4375-ae47-4ce93d1216e2\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"36416390710445e7be511e1622ee4149\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:52.510132Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":true,\"collect_cloudwatch_alarms\":true,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:52.717094345Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/ab6528e3-5dab-4375-ae47-4ce93d1216e2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an AWS integration returns \"AWS Account object\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:53.059Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "aws_regions": { + "include_only": [ + "us-east-1" + ] + }, + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": false, + "collect_custom_metrics": false, + "enabled": true, + "namespace_filters": { + "include_only": [ + "AWS/EC2" + ] + }, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": { + "xray_services": { + "include_only": [ + "AWS/AppSync" + ] + } + } + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/aws/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dff6d3ee-e90a-4df1-b0d7-6f4e1ed35acc\",\"type\":\"account\",\"attributes\":{\"account_tags\":[\"key:value\"],\"auth_config\":{\"role_name\":\"DatadogIntegrationRole\",\"external_id\":\"f3f5392d608c448ca4910d7adcefa849\"},\"aws_account_id\":\"123456789012\",\"aws_partition\":\"aws\",\"aws_regions\":{\"include_only\":[\"us-east-1\"]},\"created_at\":\"2025-08-06T17:41:54.148895503Z\",\"logs_config\":{\"lambda_forwarder\":{\"lambdas\":[\"arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder\"],\"sources\":[\"s3\"],\"log_source_config\":{\"tag_filters\":[{\"source\":\"s3\",\"tags\":[\"test:test\"]}]}}},\"metrics_config\":{\"enabled\":true,\"automute_enabled\":true,\"collect_custom_metrics\":false,\"collect_cloudwatch_alarms\":false,\"tag_filters\":[{\"namespace\":\"AWS/EC2\",\"tags\":[\"key:value\"]}],\"namespace_filters\":{\"include_only\":[\"AWS/EC2\"]}},\"modified_at\":\"2025-08-06T17:41:54.148895503Z\",\"resources_config\":{\"cloud_security_posture_management_collection\":false,\"extended_collection\":false},\"traces_config\":{\"xray_services\":{\"include_only\":[\"AWS/AppSync\"]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "access_key_id": "AKIAIOSFODNN7EXAMPLE", + "secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/aws/accounts/dff6d3ee-e90a-4df1-b0d7-6f4e1ed35acc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"cannot switch between role and key based auth\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/aws/accounts/dff6d3ee-e90a-4df1-b0d7-6f4e1ed35acc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an AWS integration returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "AWS Integration", + "frozen_at": "2025-08-06T17:41:54.735Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "key:value" + ], + "auth_config": { + "role_name": "DatadogIntegrationRole" + }, + "aws_account_id": "123456789012", + "aws_partition": "aws", + "logs_config": { + "lambda_forwarder": { + "lambdas": [ + "arn:aws:lambda:us-east-1:123456789012:function:DatadogLambdaLogForwarder" + ], + "log_source_config": { + "tag_filters": [ + { + "source": "s3", + "tags": [ + "test:test" + ] + } + ] + }, + "sources": [ + "s3" + ] + } + }, + "metrics_config": { + "automute_enabled": true, + "collect_cloudwatch_alarms": true, + "collect_custom_metrics": true, + "enabled": true, + "tag_filters": [ + { + "namespace": "AWS/EC2", + "tags": [ + "key:value" + ] + } + ] + }, + "resources_config": { + "cloud_security_posture_management_collection": false, + "extended_collection": false + }, + "traces_config": {} + }, + "type": "account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/aws/accounts/448169a8-251c-4344-abee-1c4edef39f7a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Account not found\",\"detail\":\"AWS account with provided id is not integrated\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update an AWS integration returns \"Not Found\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/aws-logs-integration.json b/test-server-data/v2/aws-logs-integration.json new file mode 100644 index 0000000000..31a0f688aa --- /dev/null +++ b/test-server-data/v2/aws-logs-integration.json @@ -0,0 +1,38 @@ +{ + "feature": "AWS Logs Integration", + "recordings": [ + { + "feature": "AWS Logs Integration", + "frozen_at": "2024-11-06T15:58:53.184Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/aws/logs/services", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"logs_services\",\"type\":\"logs_services\",\"attributes\":{\"logs_services\":[\"apigw-access-logs\",\"apigw-execution-logs\",\"cloudfront\",\"elb\",\"elbv2\",\"lambda\",\"redshift\",\"s3\",\"states\",\"waf\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get list of AWS log ready services returns \"AWS Logs Services List object\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/case-management-attribute.json b/test-server-data/v2/case-management-attribute.json new file mode 100644 index 0000000000..c2d5bfe223 --- /dev/null +++ b/test-server-data/v2/case-management-attribute.json @@ -0,0 +1,467 @@ +{ + "feature": "Case Management Attribute", + "recordings": [ + { + "feature": "Case Management Attribute", + "frozen_at": "2025-10-01T12:50:11.446Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a52ea7e5-7cdf-4414-a585-63e58d3dc7a0\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "display_name": "AWS Region 17593230-0000-0000-0000-175932301100", + "is_multi": true, + "key": "region_4fd8eeb20ad8f927", + "type": "FLOAT" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types/a52ea7e5-7cdf-4414-a585-63e58d3dc7a0/custom_attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create custom attribute config for a case type returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "frozen_at": "2025-10-01T12:50:12.380Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d6472e40-180e-4f7f-bdc0-9c8a749da7ee\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "display_name": "AWS Region 17593230-0000-0000-0000-175932301200", + "is_multi": true, + "key": "region_34a76e3ae14c4076", + "type": "NUMBER" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types/d6472e40-180e-4f7f-bdc0-9c8a749da7ee/custom_attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d57aff81-87df-478e-af85-9553e0a5d221\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"d6472e40-180e-4f7f-bdc0-9c8a749da7ee\",\"display_name\":\"AWS Region 17593230-0000-0000-0000-175932301200\",\"is_multi\":true,\"key\":\"region_34a76e3ae14c4076\",\"type\":\"NUMBER\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + } + ], + "scenario": "Create custom attribute config for a case type returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "frozen_at": "2025-10-01T12:50:12.967Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "display_name": "AWS Region 79eef6c4d883c2c5", + "is_multi": true, + "key": "region_79eef6c4d883c2c5", + "type": "NUMBER" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types/9fd476d7-a955-454a-851d-980c655c02d3/custom_attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case_type not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create custom attribute config for a case type returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "frozen_at": "2025-10-01T12:50:13.409Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3ffd2bc8-e360-40d4-8ed6-60f72161fd89\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/types/3ffd2bc8-e360-40d4-8ed6-60f72161fd89/custom_attributes/not-an-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"CustomAttributeId\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete custom attributes config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "frozen_at": "2025-08-21T12:41:46.533Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fdf93265-be3d-4a97-ae0d-540b049f7753\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"name\":\"World\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "And its brand new description", + "display_name": "Attribute 17557801-0000-0000-0000-175578010600", + "is_multi": true, + "key": "attribute_a058b510f096c932", + "type": "TEXT" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types/fdf93265-be3d-4a97-ae0d-540b049f7753/custom_attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7ce13520-94b7-4391-bb64-c45776011f05\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"fdf93265-be3d-4a97-ae0d-540b049f7753\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557801-0000-0000-0000-175578010600\",\"is_multi\":true,\"key\":\"attribute_a058b510f096c932\",\"type\":\"TEXT\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/types/fdf93265-be3d-4a97-ae0d-540b049f7753/custom_attributes/7ce13520-94b7-4391-bb64-c45776011f05", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/types/fdf93265-be3d-4a97-ae0d-540b049f7753", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete custom attributes config returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "frozen_at": "2025-10-01T12:50:14.270Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f91c5f4a-53c4-4f18-a21d-9f82fd7bd3e9\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cases/types/f91c5f4a-53c4-4f18-a21d-9f82fd7bd3e9/custom_attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all custom attributes config of case type returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management Attribute", + "frozen_at": "2025-10-01T12:50:15.131Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cases/types/custom_attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"3404866e-32d7-4f50-854c-a06e8f12e39a\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"02323717-20b8-4ecf-8c34-ef7dd1841f46\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556962-0000-0000-0000-175569621700\",\"is_multi\":true,\"key\":\"attribute_7d1796807c0cb52e\",\"type\":\"TEXT\"}},{\"id\":\"1458f000-f648-4f8a-910d-faf267187405\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"0295702b-41e6-4a9e-8681-a237d11b5843\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557769-0000-0000-0000-175577695300\",\"is_multi\":true,\"key\":\"attribute_fb1043dd816c6a32\",\"type\":\"TEXT\"}},{\"id\":\"a33fb20d-794d-465e-a46c-be7976a3eecc\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"0c16ab5a-ac15-49a0-ad03-aef57d4d42e8\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556952-0000-0000-0000-175569524900\",\"is_multi\":true,\"key\":\"attribute_178cc47942e4b613\",\"type\":\"TEXT\"}},{\"id\":\"d489ec89-c7d9-4777-ae78-94327a9761d7\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"1295370d-69c2-43d1-899f-71e9d67e5474\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557756-0000-0000-0000-175577566800\",\"is_multi\":true,\"key\":\"attribute_cea115a7c56274af\",\"type\":\"TEXT\"}},{\"id\":\"686b5832-2ea3-49a8-b56c-19209626b503\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"1387ec4d-f40a-4b31-8d0f-bc161326e588\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556956-0000-0000-0000-175569560200\",\"is_multi\":true,\"key\":\"attribute_30e2ba5485ed5459\",\"type\":\"TEXT\"}},{\"id\":\"1462324f-dc66-431f-a947-c9388be48a24\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"14b8f6a9-3bd9-4fad-b66e-68dac1bf547a\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556911-0000-0000-0000-175569114600\",\"is_multi\":true,\"key\":\"attribute_814788f737a0ef11\",\"type\":\"TEXT\"}},{\"id\":\"812ca37d-f3e8-4f12-9f38-a7f72321b7fc\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"1e036814-3134-4bc5-8e97-1f14ba77fac3\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557777-0000-0000-0000-175577776000\",\"is_multi\":true,\"key\":\"attribute_48ad4b2bdda0532c\",\"type\":\"TEXT\"}},{\"id\":\"0dc4a14f-f96b-4a27-893a-72341da7ce1d\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"1fab87e4-341d-4a79-a294-171b4e2c22f8\",\"display_name\":\"AWS Region 17569771-0000-0000-0000-175697711500\",\"is_multi\":true,\"key\":\"region_eaa423ff52828a39\",\"type\":\"NUMBER\"}},{\"id\":\"a7162904-b251-4be6-9122-7e7063f26cfa\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"21779b8e-c1e1-4886-94e9-1b5b18d21366\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557756-0000-0000-0000-175577565600\",\"is_multi\":true,\"key\":\"attribute_da8b014dc613e74e\",\"type\":\"TEXT\"}},{\"id\":\"a8822151-6c4b-45a5-9259-e881b235503f\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"220d930b-828d-4b57-a38f-f09ced11d439\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556965-0000-0000-0000-175569650100\",\"is_multi\":true,\"key\":\"attribute_1915854b20a2258d\",\"type\":\"TEXT\"}},{\"id\":\"97ffb8a9-75b7-40cb-a086-2e20954d0b00\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"2402c3fb-d0a2-4460-bd62-da434e3dff7c\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556967-0000-0000-0000-175569674500\",\"is_multi\":true,\"key\":\"attribute_5a41c02f06567fd0\",\"type\":\"TEXT\"}},{\"id\":\"b4524398-8030-4efb-8a62-b756bd5a805e\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"2cf3b0ea-aced-42f8-af92-252b294fb478\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556924-0000-0000-0000-175569241100\",\"is_multi\":true,\"key\":\"attribute_86c4dfcf527d6e57\",\"type\":\"TEXT\"}},{\"id\":\"48376b02-6ce2-4933-84cb-901f326acb3f\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"37ab3980-5401-4a6f-ae3d-f0f428310448\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556889-0000-0000-0000-175568897800\",\"is_multi\":true,\"key\":\"attribute_c34388c70e9fcf0d\",\"type\":\"TEXT\"}},{\"id\":\"cafa5687-2248-4f06-8d99-4afbcaa902c8\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"3879f548-5eec-4c3f-8d7b-b0b2671fd522\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556984-0000-0000-0000-175569844700\",\"is_multi\":true,\"key\":\"attribute_af26a7482e81c29e\",\"type\":\"TEXT\"}},{\"id\":\"9a9dfa93-5247-4b9c-8016-e941bf7b90be\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"387f5315-b404-40f6-9005-cccac8ef06fa\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556889-0000-0000-0000-175568897500\",\"is_multi\":true,\"key\":\"attribute_9ba0031081800ba4\",\"type\":\"TEXT\"}},{\"id\":\"c18c3669-9507-4293-ac56-08711b1e16a6\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"3dd78296-b989-466d-97ef-428517d851ee\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557789-0000-0000-0000-175577890200\",\"is_multi\":true,\"key\":\"attribute_08d279361f9bcdbb\",\"type\":\"TEXT\"}},{\"id\":\"9679710e-1710-4b81-9fdc-a8aefdc5181c\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"54997fa0-0c3f-43cb-9e84-39f5f5ce3f09\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557777-0000-0000-0000-175577775800\",\"is_multi\":true,\"key\":\"attribute_f6b3b818b9e7896f\",\"type\":\"TEXT\"}},{\"id\":\"f69cc9b7-d422-4b17-916d-d37702882a43\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"56855740-86fc-42c5-9ed3-82bed933cfa3\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557749-0000-0000-0000-175577496200\",\"is_multi\":true,\"key\":\"attribute_11aa72538cbc80b0\",\"type\":\"TEXT\"}},{\"id\":\"a9230c4e-044b-4484-906d-6fa58695a811\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"581c81f2-968c-4f23-bc35-e5a4f76246e6\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556924-0000-0000-0000-175569240200\",\"is_multi\":true,\"key\":\"attribute_8859075b7a20193b\",\"type\":\"TEXT\"}},{\"id\":\"481e660d-e54a-4431-9eb6-aa3eafbba793\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"5ee6243b-b005-4bd4-a5f2-fe8c4ff2ddfe\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556955-0000-0000-0000-175569559100\",\"is_multi\":true,\"key\":\"attribute_ce39a90e4dbff5b2\",\"type\":\"TEXT\"}},{\"id\":\"93911656-ee55-4269-a8a0-640cd2292eae\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"6010ef55-cf69-4e91-959d-a6f14a6384ee\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557766-0000-0000-0000-175577665200\",\"is_multi\":true,\"key\":\"attribute_d97d47c4d1519f5d\",\"type\":\"TEXT\"}},{\"id\":\"1fa53572-5ba9-441c-8280-c0e1421569ea\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"602b0512-58e4-4fa5-a004-dccd954b7ab8\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557769-0000-0000-0000-175577695100\",\"is_multi\":true,\"key\":\"attribute_7f2c794a40953354\",\"type\":\"TEXT\"}},{\"id\":\"f72172a1-50c2-404a-81cd-4b79c7dc6cfd\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"615f2510-83f5-46ba-b244-012ced51027a\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557766-0000-0000-0000-175577664900\",\"is_multi\":true,\"key\":\"attribute_87f0debab731bcf4\",\"type\":\"TEXT\"}},{\"id\":\"aa4bccbc-7e9b-4b07-8ca2-df7143363aa7\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"644f21a0-a650-410c-a8ec-c7ceadeaa28d\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556904-0000-0000-0000-175569040900\",\"is_multi\":true,\"key\":\"attribute_523da46ac3093bf6\",\"type\":\"TEXT\"}},{\"id\":\"3f8875d3-35bb-44ef-9fd0-fbab1df96f12\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"6c66be3b-c6d1-45b0-b1c4-473c04f3dc39\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556911-0000-0000-0000-175569115400\",\"is_multi\":true,\"key\":\"attribute_a98069ab218fcfe9\",\"type\":\"TEXT\"}},{\"id\":\"13f4bfa6-aa37-47c1-95c5-187f47944a3b\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"6e04d185-29aa-4770-b14d-fd2741f049cc\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556984-0000-0000-0000-175569845000\",\"is_multi\":true,\"key\":\"attribute_988ac85e509c81a6\",\"type\":\"TEXT\"}},{\"id\":\"71559a35-48cf-4bca-bc26-a58227513098\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"6fc2e97b-4d59-48ee-8a00-039b07f147e4\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556889-0000-0000-0000-175568896700\",\"is_multi\":true,\"key\":\"attribute_f083308d73cf8fb6\",\"type\":\"TEXT\"}},{\"id\":\"a7a2d485-b59a-48c2-a656-01118748e67a\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"70214597-0ebf-470d-a7c8-6c596d786ba2\",\"display_name\":\"AWS Region 17556949-0000-0000-0000-175569494400\",\"is_multi\":true,\"key\":\"region_b7851408833202a0\",\"type\":\"NUMBER\"}},{\"id\":\"5c06455e-72c8-422e-9ef8-3c2dcbd74bdb\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"7615e5a7-d95b-41b2-a082-47bf7ac815b9\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556962-0000-0000-0000-175569622800\",\"is_multi\":true,\"key\":\"attribute_a4e4d3ba3d31a1ef\",\"type\":\"TEXT\"}},{\"id\":\"ee11612f-2bc5-4d4b-8c6c-6ab3661ae7d6\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"7a256076-d73a-4581-a955-c036ca560fd3\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556964-0000-0000-0000-175569641900\",\"is_multi\":true,\"key\":\"attribute_7566d967ae17a843\",\"type\":\"TEXT\"}},{\"id\":\"6fc1b29c-338d-4ab1-bf7e-6a0467a32c76\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"7eb35cdb-4622-4a60-beb1-d292387b0314\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556967-0000-0000-0000-175569673400\",\"is_multi\":true,\"key\":\"attribute_6f914c880f7b16f5\",\"type\":\"TEXT\"}},{\"id\":\"d57330bb-2e36-4f85-a181-de5b407c0784\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"7f70d4a0-d06d-49f5-928f-c2ca73aeb862\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556955-0000-0000-0000-175569559900\",\"is_multi\":true,\"key\":\"attribute_5028395cf6855c3c\",\"type\":\"TEXT\"}},{\"id\":\"c9a3bb56-eb9e-4b4b-9283-db8f1dc68605\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"895b0b2c-98de-482b-b315-195ca654cfd0\",\"display_name\":\"AWS Region 17557048-0000-0000-0000-175570480500\",\"is_multi\":true,\"key\":\"region_0bc4f8f70481eb5f\",\"type\":\"NUMBER\"}},{\"id\":\"23ae2400-0dee-4f38-bb01-bef603a5a6ce\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"8ba67013-03d9-47e6-b0fc-746ce6587cef\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556962-0000-0000-0000-175569622600\",\"is_multi\":true,\"key\":\"attribute_749357e183774ae6\",\"type\":\"TEXT\"}},{\"id\":\"25e06f7e-2d3e-4ec0-8b27-7b4405a06bcd\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"9b42bc58-728f-4ea3-8ab9-d6194ef6e6a8\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556903-0000-0000-0000-175569039900\",\"is_multi\":true,\"key\":\"attribute_8378b7e8181b8c7e\",\"type\":\"TEXT\"}},{\"id\":\"1bdfa747-cf2e-4e0c-8b41-06d8d5d55c04\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"a080a4f4-8f02-47b0-854f-b96d06d137e8\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556964-0000-0000-0000-175569649800\",\"is_multi\":true,\"key\":\"attribute_77453b443abcee52\",\"type\":\"TEXT\"}},{\"id\":\"e2b302ff-22de-4c4b-a1e0-6c485e4d5475\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"a8f6af82-7364-4fa2-be63-f9d82d49f126\",\"display_name\":\"AWS Region 17556340-0000-0000-0000-175563402000\",\"is_multi\":true,\"key\":\"region_0ee45d926ae1e848\",\"type\":\"NUMBER\"}},{\"id\":\"f4a4bf9a-c1e0-4f10-8429-45754b878c21\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"a9a925b3-6198-4ad1-8fb7-1d6e2691ed4f\",\"display_name\":\"AWS Region 17557748-0000-0000-0000-175577488500\",\"is_multi\":true,\"key\":\"region_8264a16ae84e0888\",\"type\":\"NUMBER\"}},{\"id\":\"c4dbb6c6-5f3a-4d91-a105-58717ae692ba\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"b300e2b4-5084-443b-b8f2-d1d3611be8d6\",\"display_name\":\"AWS Region 17556983-0000-0000-0000-175569839300\",\"is_multi\":true,\"key\":\"region_fa9fe2cc487703c1\",\"type\":\"NUMBER\"}},{\"id\":\"49cb8cff-1ff0-4476-b0c9-042e08935cb9\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"b36e8af6-a952-43bb-b54b-d7b80fc1344e\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557789-0000-0000-0000-175577891000\",\"is_multi\":true,\"key\":\"attribute_1d2a4f8f9b39a284\",\"type\":\"TEXT\"}},{\"id\":\"b8472f11-c928-4600-bf66-57e4ef0ac2ac\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"b7b7e66e-e6a4-451f-95a1-ad427e83da19\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557766-0000-0000-0000-175577664100\",\"is_multi\":true,\"key\":\"attribute_b1e51c15e5eb4c95\",\"type\":\"TEXT\"}},{\"id\":\"00011772-5eb7-4ef7-a517-bbb81c349119\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"b93415ca-0644-47d6-9547-f1af159ebe69\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557749-0000-0000-0000-175577495000\",\"is_multi\":true,\"key\":\"attribute_84def13b217a3016\",\"type\":\"TEXT\"}},{\"id\":\"79120912-9860-42f0-9ba6-e42ee7aacaaf\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"b9e753b2-d41d-40d6-8c1c-3e8522b9cfd5\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556964-0000-0000-0000-175569640700\",\"is_multi\":true,\"key\":\"attribute_e265f65dbcb73e83\",\"type\":\"TEXT\"}},{\"id\":\"9763ab6a-4c89-403d-95d5-3fe4313f0d6b\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"ba86214d-a2f3-4067-b507-77d75ad9db7d\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556964-0000-0000-0000-175569641600\",\"is_multi\":true,\"key\":\"attribute_3964549f8b8f9c18\",\"type\":\"TEXT\"}},{\"id\":\"85c0c697-fe36-4118-9d0e-01fa549f42ca\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"bb399fc7-2ae4-4b9c-a645-b46f50b01347\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556967-0000-0000-0000-175569674300\",\"is_multi\":true,\"key\":\"attribute_db02e2104de4b2ff\",\"type\":\"TEXT\"}},{\"id\":\"df10a213-93aa-4406-98a7-f9a7c5dccefd\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"bf109065-175f-4d2f-848d-8f5232dfce1a\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557789-0000-0000-0000-175577891300\",\"is_multi\":true,\"key\":\"attribute_661efcf8a00203e4\",\"type\":\"TEXT\"}},{\"id\":\"65a48561-437a-4f26-9eab-69de97482927\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"bfa696f1-341e-4216-ba15-81ac431d6419\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557777-0000-0000-0000-175577775000\",\"is_multi\":true,\"key\":\"attribute_4b505c18f8fde726\",\"type\":\"TEXT\"}},{\"id\":\"63f3f34c-5ec2-4d90-ba8e-63431a6a7010\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"c19925d5-97c0-4e0e-a49e-fef562db5519\",\"display_name\":\"AWS Region 17557801-0000-0000-0000-175578010300\",\"is_multi\":true,\"key\":\"region_ba6c2c263864f56d\",\"type\":\"NUMBER\"}},{\"id\":\"688a583a-c76c-466a-97ef-835efb9411d6\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"c351af96-9af2-4847-a0c8-11b201b1ae5f\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556952-0000-0000-0000-175569524700\",\"is_multi\":true,\"key\":\"attribute_7d75ff84c4e2bc37\",\"type\":\"TEXT\"}},{\"id\":\"b69de08d-1bf5-40d5-9945-a2156baf85a4\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"c731cc10-0e89-436c-a9aa-4bd8a2e6ca31\",\"display_name\":\"AWS Region 17569762-0000-0000-0000-175697622500\",\"is_multi\":true,\"key\":\"region_397146208a8593df\",\"type\":\"NUMBER\"}},{\"id\":\"14cc89ac-6ce2-4f75-a761-bf724ef1fc4a\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"c8338d5b-1e0b-4d0e-a404-35ca2f47ff0d\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556984-0000-0000-0000-175569843800\",\"is_multi\":true,\"key\":\"attribute_5aa6271564fed657\",\"type\":\"TEXT\"}},{\"id\":\"599f166e-e3cc-4884-8bae-815313734aee\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"ca5baeb1-1abf-4983-8761-922382085818\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556964-0000-0000-0000-175569649000\",\"is_multi\":true,\"key\":\"attribute_60c26d0a25bc30d4\",\"type\":\"TEXT\"}},{\"id\":\"61982db9-3df8-4812-bb05-0e0653b9850c\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"cfbe7974-89c8-4198-ab82-8a184607d214\",\"display_name\":\"AWS Region 17556946-0000-0000-0000-175569462000\",\"is_multi\":true,\"key\":\"region_775cb03d363e3098\",\"type\":\"NUMBER\"}},{\"id\":\"59398b5f-7790-49ee-8788-7ff04cc6a9dc\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"d34c57fb-54a6-4f6c-a86e-3a73de621e2d\",\"display_name\":\"AWS Region 17556948-0000-0000-0000-175569483000\",\"is_multi\":true,\"key\":\"region_b52c3b58c2bf7600\",\"type\":\"NUMBER\"}},{\"id\":\"1333cfaf-56fd-4be3-83b0-5404920deb21\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"d3f2e924-efb4-4fea-858a-b0a104de58f1\",\"display_name\":\"AWS Region 17556346-0000-0000-0000-175563460700\",\"is_multi\":true,\"key\":\"region_77c0e57a87ea0c59\",\"type\":\"NUMBER\"}},{\"id\":\"3e191a3a-2ff3-413c-a90f-6209de01d780\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"d3f86d4c-876b-4ebd-9c71-050d5d60aacb\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556904-0000-0000-0000-175569040700\",\"is_multi\":true,\"key\":\"attribute_4a060a293658c6f4\",\"type\":\"TEXT\"}},{\"id\":\"d57aff81-87df-478e-af85-9553e0a5d221\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"d6472e40-180e-4f7f-bdc0-9c8a749da7ee\",\"display_name\":\"AWS Region 17593230-0000-0000-0000-175932301200\",\"is_multi\":true,\"key\":\"region_34a76e3ae14c4076\",\"type\":\"NUMBER\"}},{\"id\":\"bda504ee-c9d9-45d9-bb48-e08f41452e42\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"d9a99e7c-255c-4328-b29c-249bbbce55d5\",\"display_name\":\"AWS Region\",\"is_multi\":true,\"key\":\"aws_region\",\"type\":\"NUMBER\"}},{\"id\":\"6f9ac272-9f08-47d4-b6d9-e2213a8c67e9\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"dd9805ac-43e8-447d-a521-25bbddf47f8a\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557756-0000-0000-0000-175577566500\",\"is_multi\":true,\"key\":\"attribute_7d7558fef3d3f18a\",\"type\":\"TEXT\"}},{\"id\":\"39317cd6-883f-44d6-9bed-5483d0159755\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"e2d429a0-5dc2-4e7d-aafc-07588da368b2\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556924-0000-0000-0000-175569241300\",\"is_multi\":true,\"key\":\"attribute_a134bb4fb8e28721\",\"type\":\"TEXT\"}},{\"id\":\"680b2451-2eaa-445e-8a60-73c114e0e10a\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"e4641157-ebc4-4e6d-b785-84fc8f0347f3\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557769-0000-0000-0000-175577694200\",\"is_multi\":true,\"key\":\"attribute_f462946738b6f280\",\"type\":\"TEXT\"}},{\"id\":\"18c4708d-2e46-4632-8c3e-39ff21e7d6f4\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"e91f9e49-6352-4a49-89b1-2ecadbe47190\",\"display_name\":\"AWS Region 17593228-0000-0000-0000-175932285700\",\"is_multi\":true,\"key\":\"region_f9e15fd9e3128078\",\"type\":\"NUMBER\"}},{\"id\":\"72c3cc35-62ef-49e8-b6c6-0e92d379d824\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"e9e97b17-30cf-4068-8c5a-657b509b56bf\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557749-0000-0000-0000-175577495900\",\"is_multi\":true,\"key\":\"attribute_58502fb5f71ba03c\",\"type\":\"TEXT\"}},{\"id\":\"52605ddf-9fac-40fe-aed9-0dacb93d9faf\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"eefd1896-506b-4035-9b60-110ac28e1814\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556952-0000-0000-0000-175569523900\",\"is_multi\":true,\"key\":\"attribute_5c0b319faa816705\",\"type\":\"TEXT\"}},{\"id\":\"a1d3eb0e-c8c5-4fcc-bb7b-a9e630d9b394\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"f66b10ec-73f2-420c-8c2e-b2264cb5577a\",\"display_name\":\"AWS Region 17557050-0000-0000-0000-175570501300\",\"is_multi\":true,\"key\":\"region_63d115f6f026a1ba\",\"type\":\"NUMBER\"}},{\"id\":\"b2cd82c7-8be8-4463-8e8d-9401835f7522\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"fbd65d3f-0fd5-4898-958d-f1e4ded98164\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17556911-0000-0000-0000-175569115700\",\"is_multi\":true,\"key\":\"attribute_d46a2098b9ee266f\",\"type\":\"TEXT\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all custom attributes returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/case-management-type.json b/test-server-data/v2/case-management-type.json new file mode 100644 index 0000000000..552020d7e0 --- /dev/null +++ b/test-server-data/v2/case-management-type.json @@ -0,0 +1,261 @@ +{ + "feature": "Case Management Type", + "recordings": [ + { + "feature": "Case Management Type", + "frozen_at": "2025-10-01T12:50:35.054Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Investigations done in case management", + "emoji": "notanemoji", + "name": "Investigation" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a case type returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management Type", + "frozen_at": "2025-10-01T12:50:35.961Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Investigations done in case management", + "emoji": "\ud83d\udc51", + "name": "Investigation" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e3cb41d0-cd05-4c9d-8158-fc044587487f\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + } + ], + "scenario": "Create a case type returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Case Management Type", + "frozen_at": "2025-10-01T12:50:36.464Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f580bda9-aed7-49b6-ad70-5707d1c183fa\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/types/f580bda9-aed7-49b6-ad70-5707d1c183fa", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete a case type returns \"NotContent\" response", + "version": "v2" + }, + { + "feature": "Case Management Type", + "frozen_at": "2025-08-19T18:29:15.696Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"08c89b77-5c9d-4f4f-8d0f-fe6d36351539\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"name\":\"World\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/types/08c89b77-5c9d-4f4f-8d0f-fe6d36351539", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/types/08c89b77-5c9d-4f4f-8d0f-fe6d36351539", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete a case type returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management Type", + "frozen_at": "2025-10-01T12:50:38.593Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"00000000-0000-0000-0000-000000000001\",\"type\":\"case_type\",\"attributes\":{\"description\":\"General tasks and investigations\",\"emoji\":\"\",\"internal\":true,\"name\":\"Standard\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"00000000-0000-0000-0000-000000000002\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Triage and investigate correlated alerts and events\",\"emoji\":\"\",\"internal\":true,\"name\":\"Event Management\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"00000000-0000-0000-0000-000000000003\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Used By Datadog Security products and for general security workflows\",\"emoji\":\"\",\"internal\":true,\"name\":\"Security\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"00000000-0000-0000-0000-000000000004\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Request and track approvals\",\"emoji\":\"\",\"internal\":true,\"name\":\"Change Request\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"Pending Approval\"},{\"name\":\"Approved\"},{\"name\":\"Implementing\"}],\"default\":\"Pending Approval\"},\"closed\":{\"status_options\":[{\"name\":\"Completed\"},{\"name\":\"Cancelled\"},{\"name\":\"Declined\"}],\"default\":\"Completed\"}}}},{\"id\":\"00000000-0000-0000-0000-000000000005\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Triage and investigate errors\",\"emoji\":\"\",\"internal\":true,\"name\":\"Error Tracking\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"38d28f4f-7ce8-4fbd-ae42-326edf758eb8\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b2304cb7-a65c-4f71-bb17-0800b4badb16\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"95802802-1241-4825-835b-1c0322a7ef97\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1855fd31-e717-4af4-85d0-698c652ea0b6\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"0cab85fe-12ee-423e-a86e-2363d0e6f5ac\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"5755912a-fb4b-4597-b118-1b0b40f7bb85\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T09:09:06.196109Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"7ab3b17d-a929-465f-80fa-ada92a865000\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"7c4b1f31-e48a-49c3-bd41-4646baa16649\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T09:13:20.969149Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"09c05ec2-311a-4c36-a813-f72a4a85ec45\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"ecea0a37-7f91-4e88-9b16-6f25cd4bdef3\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T09:15:45.46212Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"5458e2b8-7362-4b38-85b3-1ab1ea73e08f\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"9daa0418-d01c-498a-96d2-7cfe1b2158d5\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T09:17:15.497537Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1e2c240d-168c-4b12-aa9b-92376f59f633\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T09:18:31.367268Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"af272a35-fa50-4619-b3df-1ee540b8586a\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T09:18:32.54125Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e7717df7-6d36-4cf0-9e07-e58a5fac1cde\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T09:22:35.514966Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"c0da0f83-128b-434c-a535-b1414efab20b\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T09:22:36.72Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"a6029ab5-177f-437c-97cb-764b2dc80cb6\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T18:24:37.254566Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"933b2876-4617-4674-8ac1-64fa9fa56b87\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T18:24:38.561424Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"20303a04-10d7-4a67-8afb-cecfb6783004\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T18:29:15.253583Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"08c89b77-5c9d-4f4f-8d0f-fe6d36351539\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T18:29:16.570705Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"0aec1cee-fa44-468c-86ff-3afab2292f30\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T18:34:51.437054Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"dd0ca022-0166-4012-8179-dab74b6e4946\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T18:34:52.380136Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"581f9946-2777-4ca2-98f5-839a8583507b\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:12:42.070634Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"d9a99e7c-255c-4328-b29c-249bbbce55d5\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:12:43.427514Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"05978c06-ac0e-480b-a7d5-e1a8f8fe8005\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:12:45.680688Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"ce6e2d21-6719-46d8-8639-f8a196f42678\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:25:30.303213Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3d9d8463-80fa-4434-a9e4-5dc4f3669c4e\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:25:31.642643Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"fa261a4c-91f2-4d06-972f-a35bee0543f3\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:25:33.792069Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1de6d896-26ac-4349-9b00-6acfe4879fda\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:37:44.971336Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f2578542-b2b9-4180-81cf-2eec21b94af1\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:37:46.300977Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e3c1d47a-e3ae-43ab-8181-334c3bba197e\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:37:48.496084Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3d603ba5-4391-425b-b12c-cb6dcecc44d6\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:43:19.932314Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"29174d43-f800-4e6f-8756-bf632cd6de41\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:43:22.335462Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f997d450-7912-4801-a26b-dde8e5ee077e\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:44:00.498935Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"94df43bd-6d07-4187-9a0a-0b8fdee7d1cc\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:44:02.704517Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b53a3523-4a91-4a29-8634-7d10457d7922\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:46:02.69294Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"2ce0cf3d-c48e-40a2-a3c1-bd5790617e48\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:46:04.026799Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f86f0afb-4e9d-4cd3-b72a-c62befbee6f1\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:46:05.838903Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3d86fef6-9e70-4167-b067-4136058dac19\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:49:07.463675Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"55be152c-d505-406f-b1b6-e3ea735cbf5b\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:49:08.784736Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b108c666-e8e9-4c4e-b912-2c12b00f4f32\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:49:10.569418Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"a706b5ab-f74e-4a11-b3a2-02eb6879241d\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:49:50.869037Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"921b1edd-bbd8-4130-8fb6-417d0be654bd\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:49:52.205117Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"27f02f54-745d-4398-a1a5-ca77708df7e1\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:49:53.955522Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1e002aff-0037-49f2-b266-4929032860be\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:52:04.296502Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"d9c649e3-92d5-4149-8f1b-e512c466a16d\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:52:05.632924Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"07eb5ad1-bac7-4eab-9341-8edb850f1b74\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:52:07.394803Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f15cae28-3df0-4c46-ba06-2bd1570a7f68\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:57:00.706851Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"4a252863-46c5-474a-acef-dfd42982ed68\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:57:02.039005Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"9e32b021-edaf-408e-8659-c2b850a1abf3\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:57:03.353195Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"c229eb1e-e333-4f9b-937e-5aeb78d9069f\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:58:47.224259Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"0f4d4aed-e1d3-4fec-88db-f932656653dd\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:58:48.558757Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"c5065726-f32f-4554-a819-de0362e5a773\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T19:58:50.336027Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e2018774-4cfa-4ad6-8bd0-366479b8de8e\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:03:19.632702Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"a46e33f1-d290-4aa8-a192-b4f58e063330\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:03:20.945982Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e935a49b-d4cf-45f3-a63d-5fc857237fbe\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:03:22.683799Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"cb091c10-d4b9-4d93-be90-3b8c1166c4e4\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:05:50.137825Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"12b06e26-8f8f-45d0-be5d-0a3c1046ebb8\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:05:51.471366Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"ada38cc4-4191-484d-bfea-604c921839f5\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:05:53.224893Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"ce15011e-b4ea-41e6-8628-4131f2773ae4\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:07:00.572959Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"a8f6af82-7364-4fa2-be63-f9d82d49f126\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:07:01.933445Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"2f08290c-c478-4c47-9f00-36973b7b021a\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:07:03.713436Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"6bdcc12d-4f8f-4b9f-b33a-645b1c1fac78\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:16:47.195594Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"d3f2e924-efb4-4fea-858a-b0a104de58f1\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:16:48.531005Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"6e204166-35d3-4150-85c9-2b3f1d6a85c5\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-19T20:16:50.266373Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3024568e-3252-40be-b2c5-ecc1898ad815\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T09:16:27.084779Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"2b8488a4-bdab-482c-8a9c-d2a571da65a9\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T09:17:37.421421Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f0e8ea33-8b30-47de-b9fe-f77b651381a7\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T09:20:12.422783Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"127dd6ad-3a98-4fc6-9e51-edb38b509385\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T09:20:13.955239Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e7773938-e80d-4bbc-874f-7c655daadee8\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T10:57:28.035038Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"c8e6f6e7-19e3-433e-bba9-73a013527105\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T10:57:35.415978Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3feeec2b-a582-42a2-a4a2-b6ea50dc5876\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T10:57:36.981262Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1c08bb63-9e9e-4a0d-bc5a-b90dabe3c95d\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:19:10.000286Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"fe1f962c-99bd-4de2-90c2-0d685a383ce1\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:19:17.329016Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"45efdca9-7cde-4363-888c-c6ffc37000fc\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:19:19.242715Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"6fc2e97b-4d59-48ee-8a00-039b07f147e4\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:22:49.696501Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"387f5315-b404-40f6-9005-cccac8ef06fa\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:22:57.691398Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"37ab3980-5401-4a6f-ae3d-f0f428310448\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:23:00.351616Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"9b42bc58-728f-4ea3-8ab9-d6194ef6e6a8\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:46:41.280003Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"d3f86d4c-876b-4ebd-9c71-050d5d60aacb\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:46:49.368221Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"644f21a0-a650-410c-a8ec-c7ceadeaa28d\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:46:51.227809Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"14b8f6a9-3bd9-4fad-b66e-68dac1bf547a\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:59:08.635193Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"6c66be3b-c6d1-45b0-b1c4-473c04f3dc39\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:59:16.615113Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"fbd65d3f-0fd5-4898-958d-f1e4ded98164\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T11:59:19.279382Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"581c81f2-968c-4f23-bc35-e5a4f76246e6\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T12:20:04.568041Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"2cf3b0ea-aced-42f8-af92-252b294fb478\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T12:20:12.864796Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e2d429a0-5dc2-4e7d-aafc-07588da368b2\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T12:20:15.558827Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"7a657b5f-8683-451e-a006-57ea6976073f\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T12:57:00.687594Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"cfbe7974-89c8-4198-ab82-8a184607d214\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"6915e7c1-3e5e-40fb-b7c8-6bc23b427d20\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T12:57:03.107095Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"71f640f9-7639-4531-93a7-de3fb2ca12a0\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"96dd3710-e051-49f3-b26a-e8dd9a51f87f\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T12:57:05.538619Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"4d130488-a5f8-4f0a-a738-91dbf1fbf3a6\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:00:30.252878Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"d34c57fb-54a6-4f6c-a86e-3a73de621e2d\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"184c9894-a9a3-49cf-a6cc-489e6842a3dd\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:00:32.655453Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"032f775d-3a79-426c-bcb7-6b42d3be7ac7\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"fb17bf17-f0bb-4722-b4e5-32445e7f5527\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:00:35.022904Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"7f184906-a942-4917-a4e0-e8e2fa74b990\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:02:24.873029Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"70214597-0ebf-470d-a7c8-6c596d786ba2\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:02:26.060226Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e7b57afc-4e28-4c57-9d17-42b1c48eebd9\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:02:27.638116Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"289574f3-de0e-47f0-81c7-06ae80937f31\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:02:29.214104Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"897c1c2e-5f52-46be-9abd-e7a01d3420f4\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:02:30.403304Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"eefd1896-506b-4035-9b60-110ac28e1814\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:07:20.994716Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"c351af96-9af2-4847-a0c8-11b201b1ae5f\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:07:29.127227Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"0c16ab5a-ac15-49a0-ad03-aef57d4d42e8\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:07:31.878967Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"5ee6243b-b005-4bd4-a5f2-fe8c4ff2ddfe\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:13:13.116651Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"7f70d4a0-d06d-49f5-928f-c2ca73aeb862\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:13:21.344841Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1387ec4d-f40a-4b31-8d0f-bc161326e588\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:13:24.125802Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"02323717-20b8-4ecf-8c34-ef7dd1841f46\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:23:39.707537Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"8ba67013-03d9-47e6-b0fc-746ce6587cef\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:23:48.028828Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"7615e5a7-d95b-41b2-a082-47bf7ac815b9\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:23:50.74861Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b9e753b2-d41d-40d6-8c1c-3e8522b9cfd5\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:26:49.560438Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"ba86214d-a2f3-4067-b507-77d75ad9db7d\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:26:58.639584Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"7a256076-d73a-4581-a955-c036ca560fd3\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:27:01.335547Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"ca5baeb1-1abf-4983-8761-922382085818\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:28:12.129245Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"a080a4f4-8f02-47b0-854f-b96d06d137e8\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:28:20.260597Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"220d930b-828d-4b57-a38f-f09ced11d439\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:28:23.005866Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"7eb35cdb-4622-4a60-beb1-d292387b0314\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:32:16.836893Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"bb399fc7-2ae4-4b9c-a645-b46f50b01347\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:32:24.852829Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"2402c3fb-d0a2-4460-bd62-da434e3dff7c\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:32:27.626252Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"14c085b7-3e9b-4dfd-9dc0-3adc9e2aaef8\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:59:31.577893Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"ebfc643b-bf3e-4dab-bff0-8c297d1773f3\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:59:32.398071Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"dc882f3b-36c2-4488-bb32-60367b473df2\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:59:53.449498Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b300e2b4-5084-443b-b8f2-d1d3611be8d6\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:59:54.609448Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"adc74163-422f-4667-a3a6-9c361863333e\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:59:56.196341Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"25acc483-052f-412f-92a5-00ef2c22fbbb\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:59:57.745023Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"ffa14c93-06d0-4cc2-bcce-f41901be46df\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T13:59:58.908354Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"c8338d5b-1e0b-4d0e-a404-35ca2f47ff0d\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T14:00:40.051477Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3879f548-5eec-4c3f-8d7b-b0b2671fd522\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T14:00:49.182953Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"6e04d185-29aa-4770-b14d-fd2741f049cc\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T14:00:52.010409Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"02f6995d-1ce3-4890-b797-e00b3761eafc\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:46:45.09765Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"895b0b2c-98de-482b-b315-195ca654cfd0\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:46:46.298225Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1debd831-4fa0-40af-b9ca-58e1a718ecb3\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:46:47.832594Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"fe5f13b0-63d5-4a2a-8396-08a2a4e831ab\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:46:49.386532Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"34c76089-ee0c-4f48-bf98-6b9d4e792544\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:46:50.530716Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"a7168617-45a8-4fa1-9657-b6c18f4b4a1b\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:47:09.132674Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b7459998-1c94-4840-a0ab-3d030f5d582b\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:47:09.896859Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"9adc531f-1c5f-4140-b833-32f35e8dbee2\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:50:13.125537Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f66b10ec-73f2-420c-8c2e-b2264cb5577a\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:50:14.31455Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"da768aba-f8c0-473c-bd1c-e4ea9d9f682b\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:50:15.939157Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"4937b115-31fa-4b14-b03b-774a978cbe86\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:50:17.533068Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"887f07b4-8b57-4949-880d-12fb460c9b37\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-20T15:50:18.74212Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"559cfd8c-3fb3-4a1c-b0f1-bb36cde9634a\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:14:45.824907Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"a9a925b3-6198-4ad1-8fb7-1d6e2691ed4f\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:14:46.984977Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e5e19e07-79a9-42d1-b8b7-72d4290648eb\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:14:48.524998Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1ceaf193-152c-481f-8eb0-08e9470f6d8b\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:14:50.414457Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"6cef1f4c-7201-4e60-b7a1-7843a82835d2\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:14:51.834989Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"6d142c7f-6ab3-4d54-8cdf-f600ddb40ea2\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:15:15.232477Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"d6cc97e5-830f-467f-9d7e-d44fe9376cb2\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:15:16.048802Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b93415ca-0644-47d6-9547-f1af159ebe69\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:15:52.950749Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e9e97b17-30cf-4068-8c5a-657b509b56bf\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:16:01.620133Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"56855740-86fc-42c5-9ed3-82bed933cfa3\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:16:04.310919Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"21779b8e-c1e1-4886-94e9-1b5b18d21366\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:27:38.520987Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"dd9805ac-43e8-447d-a521-25bbddf47f8a\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:27:47.342964Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1295370d-69c2-43d1-899f-71e9d67e5474\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:27:50.106242Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b7b7e66e-e6a4-451f-95a1-ad427e83da19\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:44:03.293497Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"615f2510-83f5-46ba-b244-012ced51027a\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:44:11.483169Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"6010ef55-cf69-4e91-959d-a6f14a6384ee\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:44:14.154381Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e4641157-ebc4-4e6d-b785-84fc8f0347f3\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:49:04.540305Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"602b0512-58e4-4fa5-a004-dccd954b7ab8\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:49:12.994315Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"0295702b-41e6-4a9e-8681-a237d11b5843\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T11:49:15.713764Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"bfa696f1-341e-4216-ba15-81ac431d6419\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:02:32.063175Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"54997fa0-0c3f-43cb-9e84-39f5f5ce3f09\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:02:40.160052Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1e036814-3134-4bc5-8e97-1f14ba77fac3\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:02:42.899008Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3dd78296-b989-466d-97ef-428517d851ee\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:21:44.554387Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b36e8af6-a952-43bb-b54b-d7b80fc1344e\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:21:52.745427Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"bf109065-175f-4d2f-848d-8f5232dfce1a\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:21:55.422802Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"869f4c88-f545-4aa1-a03f-152bb52186bf\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:41:43.69428Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"c19925d5-97c0-4e0e-a49e-fef562db5519\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:41:44.899197Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1f787bd5-127a-4005-85df-6d24eb8955c1\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:41:46.505589Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"fdf93265-be3d-4a97-ae0d-540b049f7753\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:41:48.1106Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f69a1398-c8b2-47bf-a624-4374634b4cf6\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:41:49.337557Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"5ec976bf-2f12-43c4-be20-542518b5906e\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:42:17.873694Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"c0bff0de-fe8f-4edd-83c5-b07e1480ca5f\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-08-21T12:42:18.644537Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"cd55412c-1231-4a0f-bc15-ea9b18d3a725\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T08:57:05.266866Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"c731cc10-0e89-436c-a9aa-4bd8a2e6ca31\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T08:57:06.551977Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"80c93fe7-a888-4e9d-abb1-abd31f5df031\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T08:57:08.15913Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"38619645-ccb4-4787-9755-6d3881fa5c3e\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T08:57:09.311993Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f1e661ad-1076-4f84-8165-254304c10a2a\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T08:57:28.016602Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"a2cbb86a-010d-4dae-8d90-f97207c3ce63\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T08:57:28.845895Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"00000000-0000-0000-0000-000000000007\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Triage and investigate logs optimization insights\",\"emoji\":\"\",\"internal\":true,\"name\":\"Logs Optimization Insights\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"658965cb-30af-417a-b83d-4ea61d7ad995\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:04:13.717815Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"baa64ec8-924d-4d8e-bc41-819fe61d6e22\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:04:14.541556Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"b13fcd85-8d58-4539-9100-2b7d811a1fb4\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:05:19.972962Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3e9ee917-5e9d-405b-a9e7-433092714e91\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:05:20.810533Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"fd1c8062-ecc0-4b79-b466-3ab057b54018\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:10:58.297595Z\",\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3e4616fc-83a9-4321-a026-a710a71d082b\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:10:59.098774Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"cd95d1a3-d547-4fd6-99ee-af1c7cc5e4c5\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:11:55.879801Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"1fab87e4-341d-4a79-a294-171b4e2c22f8\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:11:57.084868Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"8fa9005a-76e7-4742-ab6c-b68b1b9f036b\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:11:58.678865Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"cf9dfa09-a302-428a-83c0-cd9a61ca3308\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-09-04T09:11:59.862839Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"be22d02b-fbd1-4bc8-919b-e81873b33f15\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e91f9e49-6352-4a49-89b1-2ecadbe47190\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"2bb990c4-2d35-412c-9d9f-c66980cbf830\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"416ecaad-9be8-423f-bd23-df5062de555e\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"a52ea7e5-7cdf-4414-a585-63e58d3dc7a0\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"d6472e40-180e-4f7f-bdc0-9c8a749da7ee\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"3ffd2bc8-e360-40d4-8ed6-60f72161fd89\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f91c5f4a-53c4-4f18-a21d-9f82fd7bd3e9\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"e3cb41d0-cd05-4c9d-8158-fc044587487f\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Investigations done in case management\",\"emoji\":\"\ud83d\udc51\",\"internal\":false,\"name\":\"Investigation\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}},{\"id\":\"f580bda9-aed7-49b6-ad70-5707d1c183fa\",\"type\":\"case_type\",\"attributes\":{\"deleted_at\":\"2025-10-01T12:50:38.54792Z\",\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"internal\":false,\"name\":\"World\",\"statuses_config\":{\"open\":{\"status_options\":[{\"name\":\"Open\"}],\"default\":\"Open\"},\"in_progress\":{\"status_options\":[{\"name\":\"In Progress\"}],\"default\":\"In Progress\"},\"closed\":{\"status_options\":[{\"name\":\"Closed\"}],\"default\":\"Closed\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all case types returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/case-management.json b/test-server-data/v2/case-management.json new file mode 100644 index 0000000000..b6adc9bdc2 --- /dev/null +++ b/test-server-data/v2/case-management.json @@ -0,0 +1,3460 @@ +{ + "feature": "Case Management", + "recordings": [ + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:44.747Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e3f011bc-8ae6-4ec2-b80d-3069e73bc6a1\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:45.033566Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"e3f011bc-8ae6-4ec2-b80d-3069e73bc6a1\",\"key\":\"DDFC-98805\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99261\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/e3f011bc-8ae6-4ec2-b80d-3069e73bc6a1/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"project\\\" expected one of \\\"case\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Archive case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:30.876Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/67d80aa3-36ff-44b9-a694-c501a7591737/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Archive case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:45.212Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"926e6b8a-4af6-43b2-8a29-33813af68594\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:45.269528Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"926e6b8a-4af6-43b2-8a29-33813af68594\",\"key\":\"DDFC-98806\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99262\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/926e6b8a-4af6-43b2-8a29-33813af68594/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"926e6b8a-4af6-43b2-8a29-33813af68594\",\"type\":\"case\",\"attributes\":{\"archived_at\":\"2025-12-30T13:49:45.40368576Z\",\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:45.269528Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"926e6b8a-4af6-43b2-8a29-33813af68594\",\"key\":\"DDFC-98806\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-12-30T13:49:45.403686Z\",\"priority\":\"P4\",\"public_id\":\"99262\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Archive case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:45.450Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b3cef7a0-9637-43fb-88cf-d9ac56310a7b\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:45.508531Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"b3cef7a0-9637-43fb-88cf-d9ac56310a7b\",\"key\":\"DDFC-98807\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99263\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignee_id": "invalid-uuid" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/b3cef7a0-9637-43fb-88cf-d9ac56310a7b/assign", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Assign case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:32.968Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Assign_case_returns_Not_Found_response-1759322792@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"a906fadf-9ec4-11f0-8e55-4666095c4509\",\"attributes\":{\"name\":null,\"handle\":\"test-assign_case_returns_not_found_response-1759322792@datadoghq.com\",\"created_at\":\"2025-10-01T12:46:33.507125+00:00\",\"modified_at\":\"2025-10-01T12:46:33.507125+00:00\",\"email\":\"test-assign_case_returns_not_found_response-1759322792@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/4d05db0354c1408750042bd62d0f0663?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignee_id": "a906fadf-9ec4-11f0-8e55-4666095c4509" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/67d80aa3-36ff-44b9-a694-c501a7591737/assign", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/a906fadf-9ec4-11f0-8e55-4666095c4509", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Assign case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:45.709Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0bb969fd-0864-46a1-8e6d-35434e677004\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:45.922467Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"0bb969fd-0864-46a1-8e6d-35434e677004\",\"key\":\"DDFC-98808\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99264\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Assign_case_returns_OK_response-1767102585@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"06fe1d45-8040-47eb-b161-837f416635e7\",\"attributes\":{\"name\":null,\"handle\":\"test-assign_case_returns_ok_response-1767102585@datadoghq.com\",\"created_at\":\"2025-12-30T13:49:46.123532+00:00\",\"modified_at\":\"2025-12-30T13:49:46.123532+00:00\",\"email\":\"test-assign_case_returns_ok_response-1767102585@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/7ef6584479871df45cdfa7868fcc1849?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignee_id": "06fe1d45-8040-47eb-b161-837f416635e7" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/0bb969fd-0864-46a1-8e6d-35434e677004/assign", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0bb969fd-0864-46a1-8e6d-35434e677004\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:45.922467Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"0bb969fd-0864-46a1-8e6d-35434e677004\",\"key\":\"DDFC-98808\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-12-30T13:49:46.211933Z\",\"priority\":\"P4\",\"public_id\":\"99264\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"assignee\":{\"data\":{\"id\":\"06fe1d45-8040-47eb-b161-837f416635e7\",\"type\":\"user\"}},\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":\"06fe1d45-8040-47eb-b161-837f416635e7\",\"type\":\"user\",\"attributes\":{\"active\":false,\"email\":\"test-assign_case_returns_ok_response-1767102585@datadoghq.com\",\"handle\":\"test-assign_case_returns_ok_response-1767102585@datadoghq.com\",\"name\":\"\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/06fe1d45-8040-47eb-b161-837f416635e7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Assign case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:46.568Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dabff9f7-18d4-40ac-acd5-50b2d311ff53\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:46.622659Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"dabff9f7-18d4-40ac-acd5-50b2d311ff53\",\"key\":\"DDFC-98809\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99265\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "comment": "" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/dabff9f7-18d4-40ac-acd5-50b2d311ff53/comment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Comment case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:37.749Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "comment": "Hello world !" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/67d80aa3-36ff-44b9-a694-c501a7591737/comment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Comment case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:46.777Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"84a0af3b-6609-442a-b4de-b082652354cf\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:46.840801Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"84a0af3b-6609-442a-b4de-b082652354cf\",\"key\":\"DDFC-98810\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99266\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "comment": "Hello World !" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/84a0af3b-6609-442a-b4de-b082652354cf/comment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"2df6429f-8148-440c-a959-e6503f42709b\",\"type\":\"timeline_cell\",\"attributes\":{\"author\":{\"type\":\"USER\",\"content\":{\"ID\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"active\":true}},\"cell_content\":{\"message\":\"Hello World !\"},\"content\":\"{\\\"message\\\":\\\"Hello World !\\\"}\",\"created_at\":\"2025-12-30T13:49:46.968106806Z\",\"type\":\"COMMENT\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Comment case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:39.097Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "NOT_DEFINED", + "title": "Security breach investigation", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "assignee": { + "data": { + "id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", + "type": "userx" + } + }, + "project": { + "data": { + "id": "e555e290-ed65-49bd-ae18-8acbfcf18db7", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"userx\\\" expected one of \\\"user\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:39.524Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_a_case_returns_CREATED_response-1759322799@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"ace4fe48-9ec4-11f0-988b-7627cf2efb1e\",\"attributes\":{\"name\":null,\"handle\":\"test-create_a_case_returns_created_response-1759322799@datadoghq.com\",\"created_at\":\"2025-10-01T12:46:39.995279+00:00\",\"modified_at\":\"2025-10-01T12:46:39.995279+00:00\",\"email\":\"test-create_a_case_returns_created_response-1759322799@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/a3dcdca0c5122ad399c31e6815d86aef?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "NOT_DEFINED", + "title": "Security breach investigation in 6667abc22c9b9dc7", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "assignee": { + "data": { + "id": "ace4fe48-9ec4-11f0-988b-7627cf2efb1e", + "type": "user" + } + }, + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"58b1c40f-26af-4aed-84bf-6008b6f16d91\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-10-01T12:46:40.526592Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"58b1c40f-26af-4aed-84bf-6008b6f16d91\",\"key\":\"DDFC-82974\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"NOT_DEFINED\",\"public_id\":\"83062\",\"status\":\"OPEN\",\"status_name\":\"Open\",\"title\":\"Security breach investigation in 6667abc22c9b9dc7\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"assignee\":{\"data\":{\"id\":\"ace4fe48-9ec4-11f0-988b-7627cf2efb1e\",\"type\":\"user\"}},\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}},{\"id\":\"ace4fe48-9ec4-11f0-988b-7627cf2efb1e\",\"type\":\"user\",\"attributes\":{\"active\":false,\"email\":\"test-create_a_case_returns_created_response-1759322799@datadoghq.com\",\"handle\":\"test-create_a_case_returns_created_response-1759322799@datadoghq.com\",\"name\":\"\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/ace4fe48-9ec4-11f0-988b-7627cf2efb1e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a case returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:41.174Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "NOT_DEFINED", + "title": "Security breach investigation", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "assignee": { + "data": { + "id": "721074c8-63df-4d8f-a43d-ab41dd24ec35", + "type": "user" + } + }, + "project": { + "data": { + "id": "721074c8-63df-4d8f-a43d-ab41dd24ec35", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"project not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create a case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-08-21T12:21:38.654Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b17ef97a-c38f-4b67-91a6-546a0a3da4d3\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-08-21T12:21:39.002325Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"b17ef97a-c38f-4b67-91a6-546a0a3da4d3\",\"key\":\"DDFC-77682\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"77765\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/b17ef97a-c38f-4b67-91a6-546a0a3da4d3/comment/not-an-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"CommentID\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete case comment returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-08-21T12:21:39.426Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ba3da7da-9df1-4b1d-82be-e7d3d8ee865f\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-08-21T12:21:39.790273Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"ba3da7da-9df1-4b1d-82be-e7d3d8ee865f\",\"key\":\"DDFC-77683\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"77766\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "comment": "This is my new comment !" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/ba3da7da-9df1-4b1d-82be-e7d3d8ee865f/comment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"bd8ee088-15bc-43a1-bc95-92e365b71459\",\"type\":\"timeline_cell\",\"attributes\":{\"author\":{\"type\":\"USER\",\"content\":{\"ID\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"active\":true}},\"cell_content\":{\"message\":\"This is my new comment !\"},\"content\":\"{\\\"message\\\":\\\"This is my new comment !\\\"}\",\"created_at\":\"2025-08-21T12:21:40.169700502Z\",\"type\":\"COMMENT\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/ba3da7da-9df1-4b1d-82be-e7d3d8ee865f/comment/bd8ee088-15bc-43a1-bc95-92e365b71459", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/ba3da7da-9df1-4b1d-82be-e7d3d8ee865f/comment/bd8ee088-15bc-43a1-bc95-92e365b71459", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"timeline cell not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete case comment returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:47.018Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e48aba34-ea79-45c7-a425-56d5b09c9fc4\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:47.073795Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"e48aba34-ea79-45c7-a425-56d5b09c9fc4\",\"key\":\"DDFC-98811\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99267\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/e48aba34-ea79-45c7-a425-56d5b09c9fc4/comment/23fca2aa-4967-4936-bdd7-9157d9e456d7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"failed to get timeline cell: timeline cell not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete case comment returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:47.272Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"83a5e059-3fde-48b5-b4d4-8bcc5227db32\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:47.318549Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"83a5e059-3fde-48b5-b4d4-8bcc5227db32\",\"key\":\"DDFC-98812\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99268\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/83a5e059-3fde-48b5-b4d4-8bcc5227db32/custom_attributes/invalid_key", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"failed to update batch: failed to apply command: failed to apply domain.RemoveCustomAttribute command: custom attribute configuration not found\",\"meta\":{\"key\":\"invalid_key\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete custom attribute from case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-08-21T12:21:42.721Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3dd78296-b989-466d-97ef-428517d851ee\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"name\":\"World\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "And its brand new description", + "display_name": "Attribute 17557789-0000-0000-0000-175577890200", + "is_multi": true, + "key": "attribute_08d279361f9bcdbb", + "type": "TEXT" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types/3dd78296-b989-466d-97ef-428517d851ee/custom_attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c18c3669-9507-4293-ac56-08711b1e16a6\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"3dd78296-b989-466d-97ef-428517d851ee\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557789-0000-0000-0000-175577890200\",\"is_multi\":true,\"key\":\"attribute_08d279361f9bcdbb\",\"type\":\"TEXT\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "3dd78296-b989-466d-97ef-428517d851ee" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"15f17d2e-4972-44d9-9f31-684f2d19a16c\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-08-21T12:21:43.791404Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"15f17d2e-4972-44d9-9f31-684f2d19a16c\",\"key\":\"DDFC-77686\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"77769\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"TUNKNOWN\",\"type_id\":\"3dd78296-b989-466d-97ef-428517d851ee\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/15f17d2e-4972-44d9-9f31-684f2d19a16c/custom_attributes/attribute_08d279361f9bcdbb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"15f17d2e-4972-44d9-9f31-684f2d19a16c\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-08-21T12:21:43.791404Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"15f17d2e-4972-44d9-9f31-684f2d19a16c\",\"key\":\"DDFC-77686\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"77769\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"TUNKNOWN\",\"type_id\":\"3dd78296-b989-466d-97ef-428517d851ee\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/types/3dd78296-b989-466d-97ef-428517d851ee", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete custom attribute from case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:43.569Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cases/67d80aa3-36ff-44b9-a694-c501a7591737", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get the details of a case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:47.488Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9daaa414-8843-46e2-8360-c36d3713285f\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:47.542749Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"9daaa414-8843-46e2-8360-c36d3713285f\",\"key\":\"DDFC-98813\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99269\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cases/9daaa414-8843-46e2-8360-c36d3713285f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9daaa414-8843-46e2-8360-c36d3713285f\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:47.542749Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"9daaa414-8843-46e2-8360-c36d3713285f\",\"key\":\"DDFC-98813\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99269\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the details of a case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2026-03-25T10:29:24.893Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cases", + "query": [ + [ + "filter", + "status:closed" + ], + [ + "page[number]", + "1" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"cd4abeaa-0a5b-4b83-b99c-5b6d1f912938\",\"type\":\"case\",\"attributes\":{\"attributes\":{\"service\":[\"synthetics-browser\"]},\"closed_at\":\"2026-01-24T00:47:45.477244496Z\",\"comment_count\":0,\"created_at\":\"2025-11-12T00:42:59.178125Z\",\"created_by_author\":{\"type\":\"USER\",\"content\":{\"ID\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"active\":true}},\"creation_source\":\"ERROR_TRACKING\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[{\"type\":\"ERROR_TRACKING\",\"ref\":\"/error-tracking?issueId=a5bb2896-a4d0-11f0-bd76-da7ad0900002\",\"resource_id\":\"a5bb2896-a4d0-11f0-bd76-da7ad0900002\"}],\"internal_id\":\"cd4abeaa-0a5b-4b83-b99c-5b6d1f912938\",\"key\":\"ET-3\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2026-02-05T03:58:14.876711989Z\",\"priority\":\"NOT_DEFINED\",\"public_id\":\"89979\",\"status\":\"CLOSED\",\"status_group\":\"SG_CLOSED\",\"status_name\":\"Closed\",\"title\":\"require-trusted-types-for: csp_violation: 'trusted-types-sink' blocked by 'require-trusted-types-for' directive\",\"type\":\"ERROR_TRACKING_ISSUE\",\"type_id\":\"00000000-0000-0000-0000-000000000005\"},\"relationships\":{\"assignee\":{\"data\":{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\"}},\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"384521ba-dc5f-481f-942d-15bd48428029\",\"type\":\"project\"}}}},{\"id\":\"7afc10c8-4096-4af1-9ccf-ec0df3a2f63b\",\"type\":\"case\",\"attributes\":{\"attributes\":{\"service\":[\"synthetics-browser\"]},\"comment_count\":0,\"created_at\":\"2025-09-02T13:56:48.031226Z\",\"created_by_author\":{\"type\":\"USER\",\"content\":{\"ID\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"active\":true}},\"creation_source\":\"ERROR_TRACKING\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[{\"type\":\"ERROR_TRACKING\",\"ref\":\"/error-tracking?issueId=d3ab59c6-84ee-11f0-87bb-da7ad0900002\",\"resource_id\":\"d3ab59c6-84ee-11f0-87bb-da7ad0900002\"}],\"internal_id\":\"7afc10c8-4096-4af1-9ccf-ec0df3a2f63b\",\"key\":\"ET-2\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2026-03-25T09:56:47.052997427Z\",\"priority\":\"NOT_DEFINED\",\"public_id\":\"79361\",\"status\":\"CLOSED\",\"status_group\":\"SG_CLOSED\",\"status_name\":\"Closed\",\"title\":\"Error: Expected unhandled error\",\"type\":\"ERROR_TRACKING_ISSUE\",\"type_id\":\"00000000-0000-0000-0000-000000000005\"},\"relationships\":{\"assignee\":{\"data\":{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\"}},\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"384521ba-dc5f-481f-942d-15bd48428029\",\"type\":\"project\"}}}}],\"meta\":{\"total_cases\":3,\"page\":{\"current\":1,\"size\":2,\"total\":2}},\"included\":[{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\",\"attributes\":{\"active\":false,\"email\":\"\",\"handle\":\"\",\"name\":\"\"}},{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}},{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cases", + "query": [ + [ + "filter", + "status:closed" + ], + [ + "page[number]", + "2" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"f1b32a47-621d-4c57-9642-045aeb83891e\",\"type\":\"case\",\"attributes\":{\"attributes\":{\"service\":[\"synthetics-browser\"]},\"closed_at\":\"2025-08-21T17:21:13.882830862Z\",\"comment_count\":0,\"created_at\":\"2025-08-21T17:20:22.807979Z\",\"created_by_author\":{\"type\":\"USER\",\"content\":{\"ID\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"active\":true}},\"creation_source\":\"ERROR_TRACKING\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[{\"type\":\"ERROR_TRACKING\",\"ref\":\"/error-tracking?issueId=5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"resource_id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\"}],\"internal_id\":\"f1b32a47-621d-4c57-9642-045aeb83891e\",\"key\":\"ET-1\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-08-21T17:21:13.882830862Z\",\"priority\":\"NOT_DEFINED\",\"public_id\":\"77795\",\"status\":\"CLOSED\",\"status_group\":\"SG_CLOSED\",\"status_name\":\"Closed\",\"title\":\"Error: HTTP error\",\"type\":\"ERROR_TRACKING_ISSUE\",\"type_id\":\"00000000-0000-0000-0000-000000000005\"},\"relationships\":{\"assignee\":{\"data\":{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\"}},\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"384521ba-dc5f-481f-942d-15bd48428029\",\"type\":\"project\"}}}}],\"meta\":{\"total_cases\":3,\"page\":{\"current\":2,\"size\":1,\"total\":2}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}},{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\",\"attributes\":{\"active\":false,\"email\":\"\",\"handle\":\"\",\"name\":\"\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search cases returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:47.735Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"21c1b181-cee4-4b72-bf96-38859d367da4\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:47.783537Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"21c1b181-cee4-4b72-bf96-38859d367da4\",\"key\":\"DDFC-98814\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99270\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/21c1b181-cee4-4b72-bf96-38859d367da4/unarchive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"project\\\" expected one of \\\"case\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Unarchive case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:45.896Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/67d80aa3-36ff-44b9-a694-c501a7591737/unarchive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Unarchive case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:47.992Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a02bcfe0-5678-49bb-a696-86544bde2bee\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:48.042966Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"a02bcfe0-5678-49bb-a696-86544bde2bee\",\"key\":\"DDFC-98815\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99271\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/a02bcfe0-5678-49bb-a696-86544bde2bee/unarchive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a02bcfe0-5678-49bb-a696-86544bde2bee\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:48.042966Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"a02bcfe0-5678-49bb-a696-86544bde2bee\",\"key\":\"DDFC-98815\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99271\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Unarchive case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:48.267Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5fa6cf48-aa31-40bc-9d17-f8f78eea95be\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:48.323172Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"5fa6cf48-aa31-40bc-9d17-f8f78eea95be\",\"key\":\"DDFC-98816\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99272\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/5fa6cf48-aa31-40bc-9d17-f8f78eea95be/unassign", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"project\\\" expected one of \\\"case\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Unassign case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:49.773Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/67d80aa3-36ff-44b9-a694-c501a7591737/unassign", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Unassign case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:48.487Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6491a991-9117-46dc-9762-ea2cc244e5b3\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:48.538223Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"6491a991-9117-46dc-9762-ea2cc244e5b3\",\"key\":\"DDFC-98817\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99273\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/6491a991-9117-46dc-9762-ea2cc244e5b3/unassign", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6491a991-9117-46dc-9762-ea2cc244e5b3\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:48.538223Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"6491a991-9117-46dc-9762-ea2cc244e5b3\",\"key\":\"DDFC-98817\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99273\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Unassign case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2026-01-28T12:51:16.724Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cases/projects/d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"invalid_type\\\" expected one of \\\"project\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update a project returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2026-01-28T12:51:17.270Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Updated Project Name" + }, + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cases/projects/67d80aa3-36ff-44b9-a694-c501a7591737", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"failed to get project: project not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a project returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2026-01-28T12:51:17.621Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Updated Project Name Test-Update_a_project_returns_OK_response-1769604677" + }, + "type": "project" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cases/projects/d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\",\"attributes\":{\"key\":\"DDFC\",\"name\":\"Updated Project Name Test-Update_a_project_returns_OK_response-1769604677\",\"restricted\":false,\"settings\":{\"notification\":{\"enabled\":true,\"destinations\":[1],\"notify_on_case_assignment\":true,\"notify_on_case_unassignment\":true,\"notify_on_case_closed\":true,\"notify_on_case_priority_change\":true,\"notify_on_case_comment\":true,\"notify_on_case_comment_mention\":true,\"notify_on_case_status_change\":true}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a project returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-07-21T08:23:41.749Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type": "STANDARD" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0fac8699-2b39-4acb-b290-05a0fd19eb95\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-07-21T08:23:42.090561Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"0fac8699-2b39-4acb-b290-05a0fd19eb95\",\"key\":\"DDFC-72247\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"72307\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attributes": { + "service": "web-store" + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/0fac8699-2b39-4acb-b290-05a0fd19eb95/attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"error decoding attribute \\\"attributes\\\": invalid type string\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update case attributes returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:52.080Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attributes": {} + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/67d80aa3-36ff-44b9-a694-c501a7591737/attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update case attributes returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:48.699Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"8c6346d6-448d-43a0-b957-b38773438c4f\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:48.757052Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"8c6346d6-448d-43a0-b957-b38773438c4f\",\"key\":\"DDFC-98818\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99274\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attributes": { + "env": [ + "test" + ], + "service": [ + "web-store", + "web-api" + ], + "team": [ + "engineer" + ] + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/8c6346d6-448d-43a0-b957-b38773438c4f/attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"8c6346d6-448d-43a0-b957-b38773438c4f\",\"type\":\"case\",\"attributes\":{\"attributes\":{\"env\":[\"test\"],\"service\":[\"web-store\",\"web-api\"],\"team\":[\"engineer\"]},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:48.757052Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"8c6346d6-448d-43a0-b957-b38773438c4f\",\"key\":\"DDFC-98818\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-12-30T13:49:48.927381Z\",\"priority\":\"P4\",\"public_id\":\"99274\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update case attributes returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-08-21T12:21:50.857Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b36e8af6-a952-43bb-b54b-d7b80fc1344e\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"name\":\"World\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "And its brand new description", + "display_name": "Attribute 17557789-0000-0000-0000-175577891000", + "is_multi": true, + "key": "attribute_1d2a4f8f9b39a284", + "type": "TEXT" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types/b36e8af6-a952-43bb-b54b-d7b80fc1344e/custom_attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"49cb8cff-1ff0-4476-b0c9-042e08935cb9\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"b36e8af6-a952-43bb-b54b-d7b80fc1344e\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557789-0000-0000-0000-175577891000\",\"is_multi\":true,\"key\":\"attribute_1d2a4f8f9b39a284\",\"type\":\"TEXT\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "b36e8af6-a952-43bb-b54b-d7b80fc1344e" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5ed64f4d-a8d0-4dc6-879c-9b5f10a25cdb\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-08-21T12:21:51.92835Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"5ed64f4d-a8d0-4dc6-879c-9b5f10a25cdb\",\"key\":\"DDFC-77693\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"77776\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"TUNKNOWN\",\"type_id\":\"b36e8af6-a952-43bb-b54b-d7b80fc1344e\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_multi": true, + "type": "FLOAT", + "value": [ + 1, + 2.4 + ] + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/5ed64f4d-a8d0-4dc6-879c-9b5f10a25cdb/custom_attributes/attribute_1d2a4f8f9b39a284", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/types/b36e8af6-a952-43bb-b54b-d7b80fc1344e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update case custom attribute returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:48.998Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6ace1538-7ef1-4a00-a0bd-67c8ed9a3cd3\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:49.048411Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"6ace1538-7ef1-4a00-a0bd-67c8ed9a3cd3\",\"key\":\"DDFC-98819\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99275\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_multi": true, + "type": "TEXT", + "value": [ + "Abba", + "The Cure" + ] + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/6ace1538-7ef1-4a00-a0bd-67c8ed9a3cd3/custom_attributes/invalid_key", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"failed to update batch: failed to apply command: failed to apply domain.UpdateCustomAttribute command: custom attribute configuration not found\",\"meta\":{\"key\":\"invalid_key\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update case custom attribute returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-08-21T12:21:53.550Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Worldwide case type", + "emoji": "\ud83c\udf0d", + "name": "World" + }, + "type": "case_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bf109065-175f-4d2f-848d-8f5232dfce1a\",\"type\":\"case_type\",\"attributes\":{\"description\":\"Worldwide case type\",\"emoji\":\"\ud83c\udf0d\",\"name\":\"World\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "And its brand new description", + "display_name": "Attribute 17557789-0000-0000-0000-175577891300", + "is_multi": true, + "key": "attribute_661efcf8a00203e4", + "type": "TEXT" + }, + "type": "custom_attribute" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/types/bf109065-175f-4d2f-848d-8f5232dfce1a/custom_attributes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"df10a213-93aa-4406-98a7-f9a7c5dccefd\",\"type\":\"custom_attribute\",\"attributes\":{\"case_type\":\"TUNKNOWN\",\"case_type_id\":\"bf109065-175f-4d2f-848d-8f5232dfce1a\",\"description\":\"And its brand new description\",\"display_name\":\"Attribute 17557789-0000-0000-0000-175577891300\",\"is_multi\":true,\"key\":\"attribute_661efcf8a00203e4\",\"type\":\"TEXT\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "bf109065-175f-4d2f-848d-8f5232dfce1a" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4e88fd93-7a35-46a1-881e-3ee48185afe4\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-08-21T12:21:54.635083Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"4e88fd93-7a35-46a1-881e-3ee48185afe4\",\"key\":\"DDFC-77695\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"77778\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"TUNKNOWN\",\"type_id\":\"bf109065-175f-4d2f-848d-8f5232dfce1a\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_multi": true, + "type": "TEXT", + "value": [ + "Abba", + "The Cure" + ] + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/4e88fd93-7a35-46a1-881e-3ee48185afe4/custom_attributes/attribute_661efcf8a00203e4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4e88fd93-7a35-46a1-881e-3ee48185afe4\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-08-21T12:21:54.635083Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{\"attribute_661efcf8a00203e4\":{\"type\":\"TEXT\",\"is_multi\":true,\"value\":[\"Abba\",\"The Cure\"]}},\"description\":\"\",\"insights\":[],\"internal_id\":\"4e88fd93-7a35-46a1-881e-3ee48185afe4\",\"key\":\"DDFC-77695\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-08-21T12:21:55.036815Z\",\"priority\":\"P4\",\"public_id\":\"77778\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"TUNKNOWN\",\"type_id\":\"bf109065-175f-4d2f-848d-8f5232dfce1a\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cases/types/bf109065-175f-4d2f-848d-8f5232dfce1a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update case custom attribute returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-08-20T11:23:00.312Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type": "STANDARD" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"efb715f8-47e6-4035-a8aa-2562ac8d46b1\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-08-20T11:23:00.725437Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"efb715f8-47e6-4035-a8aa-2562ac8d46b1\",\"key\":\"DDFC-77120\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"77187\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Seeing some weird memory increase... We shouldn't ignore this" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/efb715f8-47e6-4035-a8aa-2562ac8d46b1/description", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"efb715f8-47e6-4035-a8aa-2562ac8d46b1\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-08-20T11:23:00.725437Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"Seeing some weird memory increase... We shouldn't ignore this\",\"insights\":[],\"internal_id\":\"efb715f8-47e6-4035-a8aa-2562ac8d46b1\",\"key\":\"DDFC-77120\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-08-20T11:23:01.102685Z\",\"priority\":\"P4\",\"public_id\":\"77187\",\"status\":\"OPEN\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update case description returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:46:55.741Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Seeing some weird memory increase... We shouldn't ignore this" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/0198c6b0-2a0a-7bea-87ff-3876f119aebb/description", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update case description returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:49.217Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a4887f3f-c7a8-47d7-ae65-a1f7ce9687c5\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:49.259766Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"a4887f3f-c7a8-47d7-ae65-a1f7ce9687c5\",\"key\":\"DDFC-98820\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99276\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Seeing some weird memory increase... Updating the description" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/a4887f3f-c7a8-47d7-ae65-a1f7ce9687c5/description", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a4887f3f-c7a8-47d7-ae65-a1f7ce9687c5\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:49.259766Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"Seeing some weird memory increase... Updating the description\",\"insights\":[],\"internal_id\":\"a4887f3f-c7a8-47d7-ae65-a1f7ce9687c5\",\"key\":\"DDFC-98820\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-12-30T13:49:49.395812Z\",\"priority\":\"P4\",\"public_id\":\"99276\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update case description returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:49.426Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4ef03b27-6d40-455b-8dd8-3f3224a34a7a\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:49.483012Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"4ef03b27-6d40-455b-8dd8-3f3224a34a7a\",\"key\":\"DDFC-98821\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99277\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P1234" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/4ef03b27-6d40-455b-8dd8-3f3224a34a7a/priority", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid priority P1234. Must be one of P1, P2, P3, P4, P5, NOT_DEFINED\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update case priority returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:47:00.978Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P3" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/67d80aa3-36ff-44b9-a694-c501a7591737/priority", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update case priority returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:49.632Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"511f7667-3d80-4498-8118-416211a1a131\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:49.67893Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"511f7667-3d80-4498-8118-416211a1a131\",\"key\":\"DDFC-98822\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99278\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P3" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/511f7667-3d80-4498-8118-416211a1a131/priority", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"511f7667-3d80-4498-8118-416211a1a131\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:49.67893Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"511f7667-3d80-4498-8118-416211a1a131\",\"key\":\"DDFC-98822\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-12-30T13:49:49.835308Z\",\"priority\":\"P3\",\"public_id\":\"99278\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update case priority returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:49.865Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ae30545d-e705-493d-a672-7210315ccec2\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:49.916511Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"ae30545d-e705-493d-a672-7210315ccec2\",\"key\":\"DDFC-98823\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99279\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "status": "OPENED" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/ae30545d-e705-493d-a672-7210315ccec2/status", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid status OPENED. Must be one of NOT_STARTED, IN_PROGRESS, CLOSED, ACKNOWLEDGED, TRIGGERED, PENDING_APPROVAL, COMPLETED, CANCELLED, DECLINED, SUNKNOWN, OPEN, RESOLVED, APPROVED, IMPLEMENTING\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update case status returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:47:04.727Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "status": "OPEN" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/67d80aa3-36ff-44b9-a694-c501a7591737/status", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update case status returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:50.079Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d417f9be-d247-4ce8-b3e4-ae7a9283f3d6\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:50.123131Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"d417f9be-d247-4ce8-b3e4-ae7a9283f3d6\",\"key\":\"DDFC-98824\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99280\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "status": "IN_PROGRESS" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/d417f9be-d247-4ce8-b3e4-ae7a9283f3d6/status", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d417f9be-d247-4ce8-b3e4-ae7a9283f3d6\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:50.123131Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"d417f9be-d247-4ce8-b3e4-ae7a9283f3d6\",\"key\":\"DDFC-98824\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-12-30T13:49:50.289934Z\",\"priority\":\"P4\",\"public_id\":\"99280\",\"status\":\"IN_PROGRESS\",\"status_group\":\"SG_IN_PROGRESS\",\"status_name\":\"In Progress\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update case status returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:50.328Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"00a64fed-4338-458b-9af5-77ba6e6c9d7b\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:50.377668Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"00a64fed-4338-458b-9af5-77ba6e6c9d7b\",\"key\":\"DDFC-98825\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99281\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "title": "" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/00a64fed-4338-458b-9af5-77ba6e6c9d7b/title", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update case title returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-10-01T12:47:06.918Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "title": "Memory leak investigation on API" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/0198c6b8-b08f-7c08-978a-d95217f2eeac/title", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"resource_not_found\",\"title\":\"case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update case title returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Case Management", + "frozen_at": "2025-12-30T13:49:50.596Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "priority": "P4", + "title": "My new case", + "type_id": "00000000-0000-0000-0000-000000000001" + }, + "relationships": { + "project": { + "data": { + "id": "d4bbe1af-f36e-42f1-87c1-493ca35c320e", + "type": "project" + } + } + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"03ec656b-5d21-41c4-a655-ccb18b0aa990\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:50.642707Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"03ec656b-5d21-41c4-a655-ccb18b0aa990\",\"key\":\"DDFC-98826\",\"merge_status\":\"NOT_MERGED\",\"priority\":\"P4\",\"public_id\":\"99282\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"My new case\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "title": "[UPDATED] Memory leak investigation on API" + }, + "type": "case" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cases/03ec656b-5d21-41c4-a655-ccb18b0aa990/title", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"03ec656b-5d21-41c4-a655-ccb18b0aa990\",\"type\":\"case\",\"attributes\":{\"attributes\":{},\"comment_count\":0,\"created_at\":\"2025-12-30T13:49:50.642707Z\",\"creation_source\":\"MANUAL\",\"custom_attributes\":{},\"description\":\"\",\"insights\":[],\"internal_id\":\"03ec656b-5d21-41c4-a655-ccb18b0aa990\",\"key\":\"DDFC-98826\",\"merge_status\":\"NOT_MERGED\",\"modified_at\":\"2025-12-30T13:49:50.769335Z\",\"priority\":\"P4\",\"public_id\":\"99282\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"[UPDATED] Memory leak investigation on API\",\"type\":\"STANDARD\",\"type_id\":\"00000000-0000-0000-0000-000000000001\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"d4bbe1af-f36e-42f1-87c1-493ca35c320e\",\"type\":\"project\"}}}},\"included\":[{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"user\",\"attributes\":{\"active\":true,\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update case title returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/ci-visibility-pipelines.json b/test-server-data/v2/ci-visibility-pipelines.json new file mode 100644 index 0000000000..62b206ef0c --- /dev/null +++ b/test-server-data/v2/ci-visibility-pipelines.json @@ -0,0 +1,643 @@ +{ + "feature": "CI Visibility Pipelines", + "recordings": [ + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2024-11-25T20:08:40.375Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "compute": [ + { + "aggregation": "pc90", + "metric": "@duration", + "type": "total" + } + ], + "filter": { + "from": "now-15m", + "query": "@ci.provider.name:(gitlab OR github)", + "to": "now" + }, + "group_by": [ + { + "facet": "@ci.status", + "limit": 10, + "total": false + } + ], + "options": { + "timezone": "GMT" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipelines/analytics/aggregate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"elapsed\":90,\"request_id\":\"pddv1ChZiVnBUVTltRVJocUlzSWlyYkdkRHFRIi0KHQLKXxzUXfzSm-D5KYypc61Y_NGGMKnRbrtODJpWEgwQ-7lds-czCpOBaB4\",\"status\":\"done\"},\"data\":{\"buckets\":[]}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Aggregate pipelines events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2024-11-25T20:08:40.699Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ci/pipelines/events", + "query": [ + [ + "filter[from]", + "2024-11-25T19:38:40.699Z" + ], + [ + "filter[query]", + "@ci.provider.name:circleci" + ], + [ + "filter[to]", + "2024-11-25T20:08:40.699Z" + ], + [ + "page[limit]", + "5" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"elapsed\":24,\"request_id\":\"pddv1ChZWQVB6eTZTZlNqbUZVNm52YmpoX3ZnIi0KHc-jI3NiRHtRq6GL8JBczM6emoOFupT0-5U_puB2EgwHRoVgx7kIsJDWMYA\",\"status\":\"done\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of pipelines events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2022-10-21T08:45:13.365Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ci/pipelines/events", + "query": [ + [ + "filter[from]", + "2022-10-21T08:44:43.365Z" + ], + [ + "filter[to]", + "2022-10-21T08:45:13.365Z" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AgAAAYP5t3tYR3aQMAAAAAAAAAAYAAAAAEFZUDV0M3RZQUFBanF1YktfS2dXdjlOWQAAACQAAAAAMDE4M2Y5YjctN2I1OC00YjQwLWFmNjEtNjllYTUwYjA1YmI3\",\"type\":\"cipipeline\",\"attributes\":{\"attributes\":{\"duration\":4000000000,\"github\":{\"conclusion\":\"success\",\"node_group\":\"GitHub Actions\",\"html_url\":\"https://github.com/DataDog/repo8s-resources\",\"run_attempt\":\"1\",\"app_id\":\"128890\"},\"git\":{\"commit\":{\"sha\":\"ac96ab878db8812762c13c4364ec5aa0b14158ce\"},\"default_branch\":\"master\",\"repository_url\":\"https://github.com/DataDog/repo8s-resources.git\",\"repository\":{\"path\":\"/DataDog/repo8s-resources.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo8s-resources\",\"host\":\"github.com\",\"id\":\"github.com/DataDog/repo8s-resources\"},\"branch\":\"EDGEBE-4_dummy_test_env\"},\"ci\":{\"pipeline\":{\"name\":\"Labeler\",\"id\":\"3296044030-1\"},\"node\":{\"labels\":[\"ubuntu-latest\"]},\"provider\":{\"instance\":\"github-actions\",\"name\":\"github\"},\"job\":{\"name\":\"label\",\"id\":\"9025708592\",\"url\":\"https://github.com/DataDog/repo8s-resources/actions/runs/3296044030/jobs/5435245138\"},\"status\":\"success\"},\"start\":1666341891000000000},\"ci_level\":\"job\",\"tags\":[\"source:apm\",\"source:apm\"]}},{\"id\":\"AgAAAYP5t3dwEybABgAAAAAAAAAYAAAAAEFZUDV0M2R3QUFBbUM3YndwWmRTSnBQWAAAACQAAAAAMDE4M2Y5YjctN2I1OC00YjQwLWFmNjEtNjllYTUwYjA1YmI3\",\"type\":\"cipipeline\",\"attributes\":{\"attributes\":{\"duration\":2445000000000,\"github\":{\"conclusion\":\"success\",\"html_url\":\"https://github.com/DataDog/repo\",\"run_attempt\":\"1\",\"event\":\"workflow_dispatch\",\"app_id\":\"128890\"},\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-07T13:30:54Z\",\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date_timestamp\":1665149454000},\"author\":{\"name\":\"Joe\",\"email\":\"support@datadoghq.com\"},\"message\":\"Upgrade to go1.18.7 (#113)\",\"sha\":\"12dd44ae0c03bed08f7b790ff10e6cba0b887cd7\"},\"default_branch\":\"master\",\"repository_url\":\"https://github.com/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"github.com\",\"id\":\"github.com/DataDog/repo\"},\"branch\":\"master\"},\"ci\":{\"pipeline\":{\"number\":20646,\"name\":\"MacOS Agent tests\",\"id\":\"3295791228-1\",\"url\":\"https://github.com/DataDog/repo/actions/runs/3295791228/attempts/1\"},\"provider\":{\"instance\":\"github-actions\",\"name\":\"github\"},\"status\":\"success\"},\"_top_level\":1,\"start\":1666339449000000000},\"ci_level\":\"pipeline\",\"tags\":[\"source:apm\",\"source:apm\"]}}],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWVA1dDNkd0V5YkFCZ0FBQUFBQUFBQVlBQUFBQUVGWlVEVjBNMlIzUVVGQmJVTTNZbmR3V21SVFNuQlFXQUFBQUNRQUFBQUFNREU0TTJZNVlqY3ROMkkxT0MwMFlqUXdMV0ZtTmpFdE5qbGxZVFV3WWpBMVltSTMifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/pipelines/events?filter%5Bfrom%5D=2022-10-21T08%3A44%3A43.365Z&filter%5Bto%5D=2022-10-21T08%3A45%3A13.365Z&page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWVA1dDNkd0V5YkFCZ0FBQUFBQUFBQVlBQUFBQUVGWlVEVjBNMlIzUVVGQmJVTTNZbmR3V21SVFNuQlFXQUFBQUNRQUFBQUFNREU0TTJZNVlqY3ROMkkxT0MwMFlqUXdMV0ZtTmpFdE5qbGxZVFV3WWpBMVltSTMifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ci/pipelines/events", + "query": [ + [ + "filter[from]", + "2022-10-21T08:44:43.365Z" + ], + [ + "filter[to]", + "2022-10-21T08:45:13.365Z" + ], + [ + "page[cursor]", + "eyJhZnRlciI6IkFnQUFBWVA1dDNkd0V5YkFCZ0FBQUFBQUFBQVlBQUFBQUVGWlVEVjBNMlIzUVVGQmJVTTNZbmR3V21SVFNuQlFXQUFBQUNRQUFBQUFNREU0TTJZNVlqY3ROMkkxT0MwMFlqUXdMV0ZtTmpFdE5qbGxZVFV3WWpBMVltSTMifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWVA1dDNPSVIzYVFMZ0FBQUFBQUFBQVlBQUFBQUVGWlVEVjBNMDlKUVVGRVpGcEJWVEpEWjNZNU4yUk9XUUFBQUNRQUFBQUFNREU0TTJZNVlqY3ROMkkxT0MwMFlqUXdMV0ZtTmpFdE5qbGxZVFV3WWpBMVltSTMifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/pipelines/events?filter%5Bfrom%5D=2022-10-21T08%3A44%3A43.365Z&filter%5Bto%5D=2022-10-21T08%3A45%3A13.365Z&page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWVA1dDNPSVIzYVFMZ0FBQUFBQUFBQVlBQUFBQUVGWlVEVjBNMDlKUVVGRVpGcEJWVEpEWjNZNU4yUk9XUUFBQUNRQUFBQUFNREU0TTJZNVlqY3ROMkkxT0MwMFlqUXdMV0ZtTmpFdE5qbGxZVFV3WWpBMVltSTMifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of pipelines events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2024-11-25T20:08:40.877Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "@ci.provider.name:github AND @ci.status:error", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 5 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipelines/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"elapsed\":20,\"request_id\":\"pddv1ChZSTVpjd2Q0MlI2LVVBNjVTYlhFUThBIi0KHQuJgBOuQyr2rULJokHKzwf2zKDYmaOmEm5TrJuvEgyvH4LB-7WWiTQznlw\",\"status\":\"done\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search pipelines events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2022-10-21T09:06:23.153Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-30s", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipelines/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AgAAAYP5yrFQ-0eDTAAAAAAAAAAYAAAAAEFZUDV5ckZRQUFBLWxUZzA0Mm9yVVJJUwAAACQAAAAAMDE4M2Y5Y2EtYzhjMC00ZTVlLTk3ODktZTVlY2E0MzIyNmI3\",\"type\":\"cipipeline\",\"attributes\":{\"attributes\":{\"duration\":399000000000,\"github\":{\"conclusion\":\"success\",\"html_url\":\"https://github.com/DataDog/repo\",\"run_attempt\":\"1\",\"event\":\"pull_request\",\"app_id\":\"128890\"},\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T08:58:59Z\",\"name\":\"Joe\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666342739000},\"author\":{\"name\":\"Joe\",\"email\":\"support@datadoghq.com\"},\"message\":\"init\",\"sha\":\"811f4ca3a6dcfe7b232dd3868ec405e9e492bb66\"},\"default_branch\":\"prod\",\"repository_url\":\"https://github.com/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"github.com\",\"id\":\"github.com/DataDog/repo\"},\"branch\":\"erkang.zhang/SYM-390/cache-test-spec\"},\"ci\":{\"pipeline\":{\"number\":4218,\"name\":\"ESLint\",\"id\":\"3296133341-1\",\"url\":\"https://github.com/DataDog/repo/actions/runs/3296133341/attempts/1\"},\"provider\":{\"instance\":\"github-actions\",\"name\":\"github\"},\"status\":\"success\"},\"_top_level\":1,\"start\":1666342755000000000},\"ci_level\":\"pipeline\",\"tags\":[\"source:apm\",\"source:apm\"]}},{\"id\":\"AgAAAYP5yr0I0OC-XAAAAAAAAAAYAAAAAEFZUDV5cjBJQUFEekl2RnhRMGRpbFYyUwAAACQAAAAAMDE4M2Y5Y2EtYzhjMC00ZTVlLTk3ODktZTVlY2E0MzIyNmI3\",\"type\":\"cipipeline\",\"attributes\":{\"attributes\":{\"duration\":166000000000,\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T10:57:28+02:00\",\"date_timestamp\":1666342648000},\"author\":{\"name\":\"Joe\",\"email\":\"support@datadoghq.com\"},\"message\":\"Merge pull request #39486 from DataDog/repo/output-using-sketches\\n\\n[RUM] Output using sketches\",\"sha\":\"07cb4950a3a0250e0808516108a04e432a3dcec7\"},\"default_branch\":\"cireliability/do-not-change-default-branch\",\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"prod\"},\"ci\":{\"pipeline\":{\"name\":\"DataDog/repo\",\"downstream\":true,\"id\":\"10623021\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10623021\"},\"provider\":{\"instance\":\"gitlab-ci\",\"name\":\"gitlab\"},\"is_manual\":false,\"parameters\":[\"BASE_IMAGE_REPO:registry.site.io/logs-backend-base\",\"BASE_VERSION:71\",\"BAZEL_CI_IMAGE:registry.site.io/bazel:5@sha256:ec15d3a9e2131605d5e0fe486b9af09770b27c94a0671e5bc81a0052efc7eaac\",\"BUILD_ECR_ID:486234852809\",\"BUILD_IMAGE:486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/logs-backend/java-builder\",\"BUILD_IMAGE_TAG:48\",\"CURRENT_STAGING:staging-42\",\"DD_AGENT_HOST:\",\"DD_ENV_TESTS:ci\",\"DD_INTEGRATION_JUNIT_ENABLED:true\",\"DD_INTEGRATION_MONGO_ENABLED:false\",\"DD_INTEGRATION_OPENTRACING_ENABLED:true\",\"DD_POSTGRES_URL:jdbc:postgresql://postgres/dogdata\",\"DD_SERVICE:logs-backend-tests\",\"DD_TRACING_ENABLED:true\",\"DOCKER_IMAGE_VERSION:20.10.3\",\"DRE_BAZEL_RULE:\",\"DYNAMIC_BUILD_IMAGE_VERSION:dynamicbuilder-v3319810-6f683f57\",\"ENABLE_SNAPSHOTTED_CHARTS:true\",\"FDB_DEB_URL:https://github.com/apple/foundationdb/releases/download/6.2.30/foundationdb-clients_6.2.30-1_amd64.deb\",\"GIT_BASE_BRANCH:prod\",\"GIT_DEPTH:96\",\"GO_VERSION:1.15\",\"JAVA_VERSION:azul-17-34-19\",\"KUBERNETES_SERVICE_ACCOUNT_OVERWRITE:logs-backend\",\"MAVEN_CLI_OPTS:--settings .ci/settings.xml --batch-mode --errors --no-transfer-progress --show-version -DisCI=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss -Dsurefire.rerunFailingTestsCount=2\",\"MAVEN_ENV:-XX:MaxRAMPercentage=50 -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true\",\"MAVEN_OPTS:-Dmaven.repo.local=/.m2 -XX:MaxRAMPercentage=50 -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true\",\"S3_BUCKET:s3://dd-ci-artefacts-build-stable/logs-backend\",\"S3_BUCKET_PIPELINE_PATH:s3://dd-ci-artefacts-build-stable/logs-backend/10623014\",\"S3_DDBUILD_MIRROR:s3://binaries.site.io/logs-backend/mirror\",\"S3_DDBUILD_RELEASE:s3://binaries.site.io/logs-backend/release\",\"S3_OPTS:--region us-east-1 --sse AES256 --acl bucket-owner-full-control --only-show-errors\",\"SLACK_NOTIFIER_IMAGE:486234852809.dkr.ecr.us-east-1.amazonaws.com/slack-notifier@sha256:d35e229b35ee0c6cedcb79a908dbca6c964f8a7eeaf82f4367d7e77eb93b9b44\",\"TRACER_URL:https://repo1.maven.org/maven2/com/datadoghq/dd-java-agent/0.108.1/dd-java-agent-0.108.1.jar\",\"TRACER_VERSION:0.108.1\"],\"status\":\"success\"},\"_top_level\":1,\"start\":1666342991000000000,\"gitlab\":{\"pipeline_source\":\"parent_pipeline\",\"result\":\"passed\"},\"env\":\"prod\",\"user\":{\"name\":\"halil.sener\"}},\"ci_level\":\"pipeline\",\"tags\":[\"source:apm\",\"source:apm\"]}}],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWVA1eXIwSTBPQy1YQUFBQUFBQUFBQVlBQUFBQUVGWlVEVjVjakJKUVVGRWVrbDJSbmhSTUdScGJGWXlVd0FBQUNRQUFBQUFNREU0TTJZNVkyRXRZemhqTUMwMFpUVmxMVGszT0RrdFpUVmxZMkUwTXpJeU5tSTMifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/pipelines/events?filter%5Bfrom%5D=now-30s&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWVA1eXIwSTBPQy1YQUFBQUFBQUFBQVlBQUFBQUVGWlVEVjVjakJKUVVGRWVrbDJSbmhSTUdScGJGWXlVd0FBQUNRQUFBQUFNREU0TTJZNVkyRXRZemhqTUMwMFpUVmxMVGszT0RrdFpUVmxZMkUwTXpJeU5tSTMifQ&page%5Blimit%5D=2&sort=timestamp\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-30s", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFnQUFBWVA1eXIwSTBPQy1YQUFBQUFBQUFBQVlBQUFBQUVGWlVEVjVjakJKUVVGRWVrbDJSbmhSTUdScGJGWXlVd0FBQUNRQUFBQUFNREU0TTJZNVkyRXRZemhqTUMwMFpUVmxMVGszT0RrdFpUVmxZMkUwTXpJeU5tSTMifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipelines/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWVA1eXIwSTBPQy1YZ0FBQUFBQUFBQVlBQUFBQUVGWlVEVjVjakJKUVVGRVN6aHhYekY1VVVSVGFXd3lVd0FBQUNRQUFBQUFNREU0TTJZNVkyRXRZemhqTUMwMFpUVmxMVGszT0RrdFpUVmxZMkUwTXpJeU5tSTMifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/pipelines/events?filter%5Bfrom%5D=now-30s&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWVA1eXIwSTBPQy1YZ0FBQUFBQUFBQVlBQUFBQUVGWlVEVjVjakJKUVVGRVN6aHhYekY1VVVSVGFXd3lVd0FBQUNRQUFBQUFNREU0TTJZNVkyRXRZemhqTUMwMFpUVmxMVGszT0RrdFpUVmxZMkUwTXpJeU5tSTMifQ&page%5Blimit%5D=2&sort=timestamp\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search pipelines events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2024-11-25T20:08:41.018Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "resource": { + "end": "2024-11-25T20:08:11.018Z", + "git": { + "author_email": "john.doe@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "7f263865994b76066c4612fd1965215e7dcb4cd2" + }, + "level": "pipeline", + "name": "Deploy to AWS", + "partial_retry": false, + "start": "2024-11-25T20:06:41.018Z", + "status": "success", + "unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1" + } + }, + "type": "cipipeline_resource_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipeline", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":null}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Send pipeline event returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2025-01-08T08:57:29.599Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "provider_name": "example-provider", + "resource": { + "end": "2025-01-08T08:56:59.599Z", + "git": { + "author_email": "john.doe@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "7f263865994b76066c4612fd1965215e7dcb4cd2" + }, + "level": "pipeline", + "name": "Deploy to AWS", + "partial_retry": false, + "start": "2025-01-08T08:55:29.599Z", + "status": "success", + "unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1" + } + }, + "type": "cipipeline_resource_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipeline", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":null}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Send pipeline event with custom provider returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2024-11-25T20:08:41.167Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "resource": { + "end": "2024-11-25T20:08:11.167Z", + "id": "cf9456de-8b9e-4c27-aa79-27b1e78c1a33", + "level": "job", + "name": "Build image", + "pipeline_name": "Deploy to AWS", + "pipeline_unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "start": "2024-11-25T20:06:41.167Z", + "status": "error", + "url": "https://my-ci-provider.example/jobs/my-jobs/run/1" + } + }, + "type": "cipipeline_resource_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipeline", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":null}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Send pipeline job event returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2026-06-23T12:16:50.217Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "resource": { + "id": "cf9456de-8b9e-4c27-aa79-27b1e78c1a33", + "level": "job", + "name": "Build image", + "pipeline_name": "Deploy to AWS", + "pipeline_unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "start": "2026-06-23T12:14:50.217Z", + "status": "running", + "url": "https://my-ci-provider.example/jobs/my-jobs/run/1" + } + }, + "type": "cipipeline_resource_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipeline", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":null}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Send running job event returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2024-11-25T20:08:41.317Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "resource": { + "git": { + "author_email": "john.doe@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "7f263865994b76066c4612fd1965215e7dcb4cd2" + }, + "level": "pipeline", + "name": "Deploy to AWS", + "partial_retry": false, + "start": "2024-11-25T20:06:41.317Z", + "status": "running", + "unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1" + } + }, + "type": "cipipeline_resource_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipeline", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":null}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Send running pipeline event returns \"Request accepted for processing\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Pipelines", + "frozen_at": "2025-09-02T15:10:26.479Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "provider_name": "example-provider", + "resource": { + "end": "2025-09-02T15:09:56.479Z", + "git": { + "author_email": "john.doe@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "7f263865994b76066c4612fd1965215e7dcb4cd2" + }, + "level": "pipeline", + "name": "Deploy to AWS", + "partial_retry": false, + "start": "2025-09-02T15:08:26.479Z", + "status": "success", + "unique_id": "3eacb6f3-ff04-4e10-8a9c-46e6d054024a", + "url": "https://my-ci-provider.example/pipelines/my-pipeline/run/1" + } + }, + "type": "cipipeline_resource_request" + }, + { + "attributes": { + "provider_name": "example-provider", + "resource": { + "end": "2025-09-02T15:09:41.479Z", + "git": { + "author_email": "jane.smith@email.com", + "repository_url": "https://github.com/DataDog/datadog-agent", + "sha": "9a4f7c28b3e5d12f8e6c9b2a5d8f3e1c7b4a6d9e" + }, + "level": "pipeline", + "name": "Deploy to Production", + "partial_retry": false, + "start": "2025-09-02T15:07:26.479Z", + "status": "success", + "unique_id": "7b2c8f9e-aa15-4d22-9c7d-83f4e065138b", + "url": "https://my-ci-provider.example/pipelines/prod-pipeline/run/2" + } + }, + "type": "cipipeline_resource_request" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/pipeline", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":null}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Send several pipeline events returns \"Request accepted for processing\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/ci-visibility-tests.json b/test-server-data/v2/ci-visibility-tests.json new file mode 100644 index 0000000000..c2c15ccb0d --- /dev/null +++ b/test-server-data/v2/ci-visibility-tests.json @@ -0,0 +1,315 @@ +{ + "feature": "CI Visibility Tests", + "recordings": [ + { + "feature": "CI Visibility Tests", + "frozen_at": "2022-10-21T14:50:52.443Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "compute": [ + { + "aggregation": "count", + "metric": "@test.is_flaky", + "type": "total" + } + ], + "filter": { + "from": "now-15m", + "query": "@language:(python OR go)", + "to": "now" + }, + "group_by": [ + { + "facet": "@git.branch", + "limit": 10, + "sort": { + "order": "asc" + }, + "total": false + } + ], + "options": { + "timezone": "GMT" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/tests/analytics/aggregate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6eyJAZ2l0LmJyYW5jaCI6WyJDTElQLTM4MSIsImFsZWphbmRyby50b3JyZXMvbWlncmF0ZS10by1uZXctaG1zLWVuZHBvaW50IiwiYW1vbmdpbC9hZGQtcmF0ZS1saW1pdC1uYW1lLW1ldGFkYXRhLXRvLWFwaXZpZXdlciIsImFzYWQxMTIzL3Jlc3BvbmRlci10eXBlcy1xYS1maXhlcyIsImF3L2RleHN0ci10YWdzLWZvci1rZXkiLCJjcmVhdGVfaW52aXRlX29yZ19hcGkiLCJkYXZlLmhhbmR5L2ZpeC1uby1yZXNvdXJjZWlkIiwiZWRyZXZvL2dpdGRiLW1lbW9yeS1sZWFrIiwiZmlzaGVyL2FkZC1rOHMtbmFtZXNwYWNlcyIsImZsb3JlbnRjbGFycmV0L215cHktZXhjbHVkZSJdfX0\"},\"elapsed\":43,\"request_id\":\"pddv1ChZoVGp4aTdKV1FYQ1ZoM19LUF90eGx3IiwKHB0cQpJ-X_9gd5n7p8wRMAoRGyyFQlDJbjpK5SkSDEclibMc2UXCLboJqw\",\"status\":\"done\"},\"data\":{\"buckets\":[{\"by\":{\"@git.branch\":\"branch1\"},\"computes\":{\"c0\":345}},{\"by\":{\"@git.branch\":\"branch2\"},\"computes\":{\"c0\":309}},{\"by\":{\"@git.branch\":\"branch2\"},\"computes\":{\"c0\":30597}},{\"by\":{\"@git.branch\":\"branch3\"},\"computes\":{\"c0\":43457}},{\"by\":{\"@git.branch\":\"branch3\"},\"computes\":{\"c0\":96}},{\"by\":{\"@git.branch\":\"branch4\"},\"computes\":{\"c0\":382}},{\"by\":{\"@git.branch\":\"branch5\"},\"computes\":{\"c0\":16891}},{\"by\":{\"@git.branch\":\"branch6\"},\"computes\":{\"c0\":93}},{\"by\":{\"@git.branch\":\"branch7\"},\"computes\":{\"c0\":46490}},{\"by\":{\"@git.branch\":\"branch8\"},\"computes\":{\"c0\":370}}]}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Aggregate tests events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "frozen_at": "2022-10-21T14:59:21.171Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ci/tests/events", + "query": [ + [ + "filter[from]", + "2022-10-21T14:58:51.171Z" + ], + [ + "filter[query]", + "@test.service:web-ui-tests" + ], + [ + "filter[to]", + "2022-10-21T14:59:21.171Z" + ], + [ + "page[limit]", + "5" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AQAAAYP7DjkT1jtY0AAAAABBWVA3RGprVEFBQXFjVllsa2kwWm1LZGU\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"863929e666e072fd\"},\"test\":{\"framework_version\":\"0.0.2\",\"codeowners\":[\"@DataDog/repo\"],\"source\":{\"file\":\"javascript/datadog/organization-settings/components/sensitive-data-scanner/sensitive-data-scanner-validation.unit.ts\"},\"type\":\"test\",\"has_parameters\":false,\"jest\":{\"test_runner\":\"jest-circus\"},\"command\":\"jest --config jest.coverage.config.js --color --ci --silent --maxWorkers=7\",\"framework\":\"jest\",\"suite\":\"javascript/datadog/organization-settings/components/sensitive-data-scanner/sensitive-data-scanner-validation.unit.ts\",\"full_name\":\"javascript/datadog/organization-settings/components/sensitive-data-scanner/sensitive-data-scanner-validation.unit.ts.shouldDisplaySensitiveDataWarning it should not display a warning for an empty string: \\\"\\\"\",\"service\":\"web-ui-tests\",\"name\":\"shouldDisplaySensitiveDataWarning it should not display a warning for an empty string: \\\"\\\"\",\"fingerprint\":\"59d10d35bcee973b\",\"status\":\"pass\"},\"os\":{\"version\":\"5.15.0-1017-aws\",\"platform\":\"linux\",\"architecture\":\"x64\"},\"ci\":{\"pipeline\":{\"number\":479980,\"name\":\"DataDog/repo\",\"id\":\"10631816\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10631816\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"optional-jobs\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"unit-test-coverage\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184832404\"}},\"sampling\":{\"priority\":1},\"start\":1666364356883000320,\"runtime\":{\"name\":\"node\",\"version\":\"v16.3.0\"},\"language\":\"javascript\",\"env\":\"ci\",\"version\":\"0.0.2\",\"duration\":401123,\"test_session\":{\"fingerprint\":\"d0266bed689fa60c\"},\"library_version\":\"3.4.0\",\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T14:49:17+00:00\",\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date_timestamp\":1666363757000},\"author\":{\"date\":\"2022-10-21T14:49:17+00:00\",\"name\":\"Joe\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666363757000},\"message\":\"Remove suppression modal typo (#70411)\\n\\nCo-authored-by: r@datadoghq.com\",\"sha\":\"d04246da2ddbf9ceb599e7f4b5b5cbbca315bc0a\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"preprod\"},\"service\":\"web-ui-tests\",\"runtime-id\":\"8d4be021-f2f7-4e63-b3c3-93d62ba0d1fa\"},\"tags\":[\"source:apm\",\"source:apm\"]}},{\"id\":\"AQAAAYP7DjhlyuNS-QAAAABBWVA3RGpobEFBRHoyX3Nfd21QQktySkE\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"b50f2adbaf2118cd\"},\"test\":{\"framework_version\":\"0.0.2\",\"codeowners\":[\"@DataDog/repo\"],\"source\":{\"file\":\"javascript/datadog/workflow-automation/lib/shared/validation.unit.ts\"},\"type\":\"test\",\"has_parameters\":true,\"jest\":{\"test_runner\":\"jest-circus\"},\"command\":\"jest --config jest.browser.config.js --color --ci --silent --maxWorkers=7\",\"framework\":\"jest\",\"suite\":\"javascript/datadog/workflow-automation/lib/shared/validation.unit.ts\",\"full_name\":\"javascript/datadog/workflow-automation/lib/shared/validation.unit.ts.Validate XML Should identifies good and bad XML\",\"service\":\"web-ui-tests\",\"name\":\"Validate XML Should identifies good and bad XML\",\"fingerprint\":\"fe78dde37925d00d\",\"parameters\":\"{\\\"arguments\\\":[\\\"foo\\\",false],\\\"metadata\\\":{}}\",\"status\":\"pass\"},\"os\":{\"version\":\"5.15.0-1017-aws\",\"platform\":\"linux\",\"architecture\":\"x64\"},\"ci\":{\"pipeline\":{\"number\":479973,\"name\":\"DataDog/repo\",\"id\":\"10631599\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10631599\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"test\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"unit-test\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184829344\"}},\"sampling\":{\"priority\":1},\"start\":1666364356707000320,\"runtime\":{\"name\":\"node\",\"version\":\"v16.3.0\"},\"language\":\"javascript\",\"env\":\"ci\",\"version\":\"0.0.2\",\"duration\":2591797,\"test_session\":{\"fingerprint\":\"6bf54b12dc4341b8\"},\"library_version\":\"3.4.0\",\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T23:44:50+09:00\",\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date_timestamp\":1666363490000},\"author\":{\"date\":\"2022-10-21T23:44:50+09:00\",\"name\":\"Joe\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666363490000},\"message\":\"Merge branch 'preprod' into babbins/core-app-docs-landing-page\",\"sha\":\"dbd090f623d681a7b6a65acb826ccf3968bb5d91\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"babbins/core-app-docs-landing-page\"},\"service\":\"web-ui-tests\",\"runtime-id\":\"7020ff7c-a7f9-466d-9124-84720cdfd15c\"},\"tags\":[\"source:apm\",\"source:apm\"]}},{\"id\":\"AQAAAYP7DjhfyuNS4wAAAABBWVA3RGpoZkFBQXVhaUhDM2JqdXJrY1c\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"ea677b198d03d0f1\"},\"test\":{\"framework_version\":\"0.0.2\",\"codeowners\":[\"@DataDog/repo\"],\"source\":{\"file\":\"internal-apps/sdp/src/components/jira-template/TeamBoardCreator/__test__/TeamBoardCreator.unit.jsx\"},\"type\":\"test\",\"has_parameters\":false,\"jest\":{\"test_runner\":\"jest-circus\"},\"command\":\"jest --config jest.browser.config.js --color --testNamePattern=\\\\[flaky\\\\] --ci --silent --maxWorkers=7\",\"framework\":\"jest\",\"suite\":\"internal-apps/sdp/src/components/jira-template/TeamBoardCreator/__test__/TeamBoardCreator.unit.jsx\",\"full_name\":\"internal-apps/sdp/src/components/jira-template/TeamBoardCreator/__test__/TeamBoardCreator.unit.jsx.TeamBoardCreator Show Error Message for Bad Mutation found in Errors\",\"service\":\"web-ui-tests\",\"name\":\"TeamBoardCreator Show Error Message for Bad Mutation found in Errors\",\"fingerprint\":\"65589132d12f5a9\",\"status\":\"skip\"},\"os\":{\"version\":\"5.15.0-1017-aws\",\"platform\":\"linux\",\"architecture\":\"x64\"},\"ci\":{\"pipeline\":{\"number\":479992,\"name\":\"DataDog/repo\",\"id\":\"10632081\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10632081\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"optional-jobs\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"unit-test-flaky\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184836749\"}},\"sampling\":{\"priority\":1},\"start\":1666364356703001344,\"runtime\":{\"name\":\"node\",\"version\":\"v16.3.0\"},\"language\":\"javascript\",\"env\":\"ci\",\"version\":\"0.0.2\",\"duration\":14160,\"test_session\":{\"fingerprint\":\"6957ad04dea312d6\"},\"library_version\":\"3.4.0\",\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T10:55:42-04:00\",\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date_timestamp\":1666364142000},\"author\":{\"date\":\"2022-10-21T10:55:42-04:00\",\"name\":\"alpinet\",\"email\":\"46504578+alpinet@users.noreply.github.com\",\"date_timestamp\":1666364142000},\"message\":\"Merge branch 'preprod' into alpinet/stripe_tile\",\"sha\":\"00c36e494ce1db0ef34245024904ae09f995a382\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"alpinet/stripe_tile\"},\"service\":\"web-ui-tests\",\"runtime-id\":\"6e821bb2-2f25-4b80-9f0e-168ce1dc57e5\"},\"tags\":[\"source:apm\",\"source:apm\"]}}],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWVA3RGpoYWdVb3luQUFBQUFCQldWQTNSR3BvWVVGQlFVaFJSamR3TWtKRlRXWklOVEkifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/tests/events?filter%5Bfrom%5D=2022-10-21T14%3A58%3A51.171Z&filter%5Bquery%5D=%40test.service%3Aweb-ui-tests&filter%5Bto%5D=2022-10-21T14%3A59%3A21.171Z&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWVA3RGpoYWdVb3luQUFBQUFCQldWQTNSR3BvWVVGQlFVaFJSamR3TWtKRlRXWklOVEkifQ&page%5Blimit%5D=5\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of tests events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "frozen_at": "2022-10-21T14:44:11.511Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ci/tests/events", + "query": [ + [ + "filter[from]", + "2022-10-21T14:43:41.511Z" + ], + [ + "filter[to]", + "2022-10-21T14:44:11.511Z" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AQAAAYP7AGGfo7r-agAAAABBWVA3QUdHZkFBQlRMSUtLNkdvWHZNSUs\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"6c8995a36c21161e\"},\"test\":{\"framework_version\":\"0.0.2\",\"codeowners\":[\"@DataDog/repo\"],\"source\":{\"file\":\"javascript/datadog/dashboard/components/widgets/AlertGraph/alert-graph.utils.unit.ts\"},\"type\":\"test\",\"has_parameters\":false,\"jest\":{\"test_runner\":\"jest-circus\"},\"command\":\"jest --config jest.browser.config.js --color --ci --silent --maxWorkers=7\",\"framework\":\"jest\",\"suite\":\"javascript/datadog/dashboard/components/widgets/AlertGraph/alert-graph.utils.unit.ts\",\"full_name\":\"javascript/datadog/dashboard/components/widgets/AlertGraph/alert-graph.utils.unit.ts.Alert Graph utils getAlertPeriod should return the alert period\",\"service\":\"web-ui-tests\",\"name\":\"Alert Graph utils getAlertPeriod should return the alert period\",\"fingerprint\":\"cf1b658113e4fe46\",\"status\":\"pass\"},\"os\":{\"version\":\"5.15.0-1017-aws\",\"platform\":\"linux\",\"architecture\":\"x64\"},\"ci\":{\"pipeline\":{\"number\":479961,\"name\":\"DataDog/repo\",\"id\":\"10631454\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10631454\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"test\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"unit-test\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184825583\"}},\"sampling\":{\"priority\":1},\"start\":1666363449758001664,\"runtime\":{\"name\":\"node\",\"version\":\"v16.3.0\"},\"language\":\"javascript\",\"env\":\"ci\",\"version\":\"0.0.2\",\"duration\":1797119,\"test_session\":{\"fingerprint\":\"6bf54b12dc4341b8\"},\"library_version\":\"3.4.0\",\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T10:39:58-04:00\",\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date_timestamp\":1666363198000},\"author\":{\"date\":\"2022-10-21T10:39:58-04:00\",\"name\":\"Joe\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666363198000},\"message\":\"Merge branch 'preprod' into zach.anderson/sendgrid_last_login\",\"sha\":\"ddc2d8cf8a68ca7c67553ea12d41b0df5d069bf7\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"zach.anderson/sendgrid_last_login\"},\"service\":\"web-ui-tests\",\"runtime-id\":\"d3f4759f-5bda-4dab-a494-0736b2671798\"},\"tags\":[\"source:apm\",\"source:apm\"]}},{\"id\":\"AQAAAYP7AGE4o7r-XAAAAABBWVA3QUdFNEFBQ20wc3BXLWNYUDB5Z1M\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"18538434d1355cce\"},\"test\":{\"framework_version\":\"0.0.2\",\"codeowners\":[\"@DataDog/repo\"],\"source\":{\"file\":\"javascript/datadog/logs/components/UnifiedExplorer/export-csv.helpers.unit.ts\"},\"type\":\"test\",\"has_parameters\":false,\"jest\":{\"test_runner\":\"jest-circus\"},\"command\":\"jest --config jest.browser.config.js --color --ci --silent --maxWorkers=7\",\"framework\":\"jest\",\"suite\":\"javascript/datadog/logs/components/UnifiedExplorer/export-csv.helpers.unit.ts\",\"full_name\":\"javascript/datadog/logs/components/UnifiedExplorer/export-csv.helpers.unit.ts.sanitizeCell should add a single-quote at the beginning if necessary (cell='')\",\"service\":\"web-ui-tests\",\"name\":\"sanitizeCell should add a single-quote at the beginning if necessary (cell='')\",\"fingerprint\":\"e1234fc553a164\",\"status\":\"pass\"},\"os\":{\"version\":\"5.15.0-1017-aws\",\"platform\":\"linux\",\"architecture\":\"x64\"},\"ci\":{\"pipeline\":{\"number\":479954,\"name\":\"DataDog/repo\",\"id\":\"10631295\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10631295\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"test\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"unit-test\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184822096\"}},\"sampling\":{\"priority\":1},\"start\":1666363449656001024,\"runtime\":{\"name\":\"node\",\"version\":\"v16.3.0\"},\"language\":\"javascript\",\"env\":\"ci\",\"version\":\"0.0.2\",\"duration\":961670,\"test_session\":{\"fingerprint\":\"6bf54b12dc4341b8\"},\"library_version\":\"3.4.0\",\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T14:33:58+00:00\",\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date_timestamp\":1666362838000},\"author\":{\"date\":\"2022-10-21T14:33:58+00:00\",\"name\":\"temporal-github-worker-1[bot]\",\"email\":\"83676731+temporal-github-worker-1[bot]@users.noreply.github.com\",\"date_timestamp\":1666362838000},\"message\":\"{\\\"base_commit\\\":\\\"000e36971943d45210e6c019e1ed6f5fb3f182c5\\\",\\\"head_commit\\\":\\\"87bfaa65b1d93acae749a437b4265d1535e0bcdb\\\"}\\n\",\"sha\":\"0756e4459a560f921c497b5054e7406e812fba70\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"mq-working-branch-6edc20d\"},\"service\":\"web-ui-tests\",\"runtime-id\":\"9878210e-f42c-4786-b3e3-b2203dd4bfc1\"},\"tags\":[\"source:apm\",\"source:apm\"]}}],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWVA3QUdFNG83ci1YQUFBQUFCQldWQTNRVWRGTkVGQlEyMHdjM0JYTFdOWVVEQjVaMU0ifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/tests/events?filter%5Bfrom%5D=2022-10-21T14%3A43%3A41.511Z&filter%5Bto%5D=2022-10-21T14%3A44%3A11.511Z&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWVA3QUdFNG83ci1YQUFBQUFCQldWQTNRVWRGTkVGQlEyMHdjM0JYTFdOWVVEQjVaMU0ifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ci/tests/events", + "query": [ + [ + "filter[from]", + "2022-10-21T14:43:41.511Z" + ], + [ + "filter[to]", + "2022-10-21T14:44:11.511Z" + ], + [ + "page[cursor]", + "eyJhZnRlciI6IkFRQUFBWVA3QUdFNG83ci1YQUFBQUFCQldWQTNRVWRGTkVGQlEyMHdjM0JYTFdOWVVEQjVaMU0ifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWVA3QUdCdmxSc1pDd0FBQUFCQldWQTNRVWRDZGtGQlFtUlViV0ZTVVhKZmFFVXpiMWcifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/tests/events?filter%5Bfrom%5D=2022-10-21T14%3A43%3A41.511Z&filter%5Bto%5D=2022-10-21T14%3A44%3A11.511Z&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWVA3QUdCdmxSc1pDd0FBQUFCQldWQTNRVWRDZGtGQlFtUlViV0ZTVVhKZmFFVXpiMWcifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of tests events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "frozen_at": "2022-10-21T15:04:00.502Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "@test.service:web-ui-tests AND @test.status:skip", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 25 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/tests/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AQAAAYP7BNMIuIAxxAAAAABBWVA3Qk5NSUFBQ3dKNTJFSjhrZXlTZ0s\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"821da1fe0511456d\"},\"test\":{\"framework_version\":\"0.0.2\",\"codeowners\":[\"@DataDog/repo\"],\"source\":{\"file\":\"javascript/datadog/apps-sdk/internal/lib/managers/app-manager-with-controller/controller-manager.unit.ts\"},\"type\":\"test\",\"has_parameters\":false,\"jest\":{\"test_runner\":\"jest-circus\"},\"command\":\"jest --config jest.browser.config.js --color --testNamePattern=\\\\[flaky\\\\] --ci --silent --maxWorkers=7\",\"framework\":\"jest\",\"suite\":\"javascript/datadog/apps-sdk/internal/lib/managers/app-manager-with-controller/controller-manager.unit.ts\",\"full_name\":\"javascript/datadog/apps-sdk/internal/lib/managers/app-manager-with-controller/controller-manager.unit.ts.request() delegates to the main iframe controller request method\",\"service\":\"web-ui-tests\",\"name\":\"request() delegates to the main iframe controller request method\",\"fingerprint\":\"3dbce8739d2972f9\",\"status\":\"skip\"},\"os\":{\"version\":\"5.15.0-1017-aws\",\"platform\":\"linux\",\"architecture\":\"x64\"},\"ci\":{\"pipeline\":{\"number\":479973,\"name\":\"DataDog/repo\",\"id\":\"10631599\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10631599\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"optional-jobs\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"unit-test-flaky\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184829407\"}},\"sampling\":{\"priority\":1},\"start\":1666363740936000512,\"runtime\":{\"name\":\"node\",\"version\":\"v16.3.0\"},\"language\":\"javascript\",\"env\":\"ci\",\"version\":\"0.0.2\",\"duration\":18799,\"test_session\":{\"fingerprint\":\"6957ad04dea312d6\"},\"library_version\":\"3.4.0\",\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T23:44:50+09:00\",\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date_timestamp\":1666363490000},\"author\":{\"date\":\"2022-10-21T23:44:50+09:00\",\"name\":\"Joe\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666363490000},\"message\":\"Merge branch 'preprod' into babbins/core-app-docs-landing-page\",\"sha\":\"dbd090f623d681a7b6a65acb826ccf3968bb5d91\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"babbins/core-app-docs-landing-page\"},\"service\":\"web-ui-tests\",\"runtime-id\":\"1f3e8a86-145c-4856-9e13-5228bed9a30e\"},\"tags\":[\"source:apm\",\"source:apm\"]}},{\"id\":\"AQAAAYP7BNMIR5G-XgAAAABBWVA3Qk5NSUFBQ3BDUTR2ZlFfMDRQQUo\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"b3887a56ac7dce6b\"},\"test\":{\"framework_version\":\"0.0.2\",\"codeowners\":[\"@DataDog/repo\"],\"source\":{\"file\":\"javascript/datadog/trace/components/trace/SpanNetworks/span-networks.unit.tsx\"},\"type\":\"test\",\"has_parameters\":false,\"jest\":{\"test_runner\":\"jest-circus\"},\"command\":\"jest --config jest.browser.config.js --color --testNamePattern=\\\\[flaky\\\\] --ci --silent --maxWorkers=7\",\"framework\":\"jest\",\"suite\":\"javascript/datadog/trace/components/trace/SpanNetworks/span-networks.unit.tsx\",\"full_name\":\"javascript/datadog/trace/components/trace/SpanNetworks/span-networks.unit.tsx.getDefaultFilter() should return a container filter\",\"service\":\"web-ui-tests\",\"name\":\"getDefaultFilter() should return a container filter\",\"fingerprint\":\"133b6d44468c6022\",\"status\":\"skip\"},\"os\":{\"version\":\"5.15.0-1017-aws\",\"platform\":\"linux\",\"architecture\":\"x64\"},\"ci\":{\"pipeline\":{\"number\":479966,\"name\":\"DataDog/repo\",\"id\":\"10631485\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10631485\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"optional-jobs\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"unit-test-flaky\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184826196\"}},\"sampling\":{\"priority\":1},\"start\":1666363740936000768,\"runtime\":{\"name\":\"node\",\"version\":\"v16.3.0\"},\"language\":\"javascript\",\"env\":\"ci\",\"version\":\"0.0.2\",\"duration\":19287,\"test_session\":{\"fingerprint\":\"6957ad04dea312d6\"},\"library_version\":\"3.4.0\",\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T10:40:38-04:00\",\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date_timestamp\":1666363238000},\"author\":{\"date\":\"2022-10-21T10:40:38-04:00\",\"name\":\"Joe\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666363238000},\"message\":\"Merge branch 'preprod' into alpinet/github_api_endpoint_ticket\",\"sha\":\"c22e7de6ca6bcc4d58b960fce095ebdbc4fc693a\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"alpinet/github_api_endpoint_ticket\"},\"service\":\"web-ui-tests\",\"runtime-id\":\"afa6f593-d5f0-4627-97c9-8753e83fc1e9\"},\"tags\":[\"source:apm\",\"source:apm\"]}},{\"id\":\"AQAAAYP7BNMJzoQeRQAAAABBWVA3Qk5NSkFBQV9kTGg3U1RCSWpTY1Q\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"44abf7116df30562\"},\"test\":{\"framework_version\":\"0.0.2\",\"codeowners\":[\"@DataDog/repo\"],\"source\":{\"file\":\"javascript/datadog/dataviz/lib/stats/FrameTimer.unit.ts\"},\"type\":\"test\",\"has_parameters\":false,\"jest\":{\"test_runner\":\"jest-circus\"},\"command\":\"jest --config jest.browser.config.js --color --testNamePattern=\\\\[flaky\\\\] --ci --silent --maxWorkers=7\",\"framework\":\"jest\",\"suite\":\"javascript/datadog/dataviz/lib/stats/FrameTimer.unit.ts\",\"full_name\":\"javascript/datadog/dataviz/lib/stats/FrameTimer.unit.ts.FrameTimer should capture timings with a GPU timer\",\"service\":\"web-ui-tests\",\"name\":\"FrameTimer should capture timings with a GPU timer\",\"fingerprint\":\"99424c8cd4b1362b\",\"status\":\"skip\"},\"os\":{\"version\":\"5.15.0-1017-aws\",\"platform\":\"linux\",\"architecture\":\"x64\"},\"ci\":{\"pipeline\":{\"number\":479961,\"name\":\"DataDog/repo\",\"id\":\"10631454\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10631454\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"optional-jobs\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"unit-test-flaky\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184825642\"}},\"sampling\":{\"priority\":1},\"start\":1666363740937000448,\"runtime\":{\"name\":\"node\",\"version\":\"v16.3.0\"},\"language\":\"javascript\",\"env\":\"ci\",\"version\":\"0.0.2\",\"duration\":18799,\"test_session\":{\"fingerprint\":\"6957ad04dea312d6\"},\"library_version\":\"3.4.0\",\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T10:39:58-04:00\",\"name\":\"GitHub\",\"email\":\"noreply@github.com\",\"date_timestamp\":1666363198000},\"author\":{\"date\":\"2022-10-21T10:39:58-04:00\",\"name\":\"Joe\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666363198000},\"message\":\"Merge branch 'preprod' into zach.anderson/sendgrid_last_login\",\"sha\":\"ddc2d8cf8a68ca7c67553ea12d41b0df5d069bf7\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"zach.anderson/sendgrid_last_login\"},\"service\":\"web-ui-tests\",\"runtime-id\":\"7efabaf6-197f-4fcc-9a4d-6ca6c85d3ae4\"},\"tags\":[\"source:apm\",\"source:apm\"]}}],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWVA3Qk5OWGUtNGVVQUFBQUFCQldWQTNRazVPV0VGQlJGUnBVbkkxZVU5MWJXSnpiM2MifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/tests/events?filter%5Bfrom%5D=now-15m&filter%5Bquery%5D=%40test.service%3Aweb-ui-tests+AND+%40test.status%3Askip&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWVA3Qk5OWGUtNGVVQUFBQUFCQldWQTNRazVPV0VGQlJGUnBVbkkxZVU5MWJXSnpiM2MifQ&page%5Blimit%5D=25&sort=timestamp\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search tests events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CI Visibility Tests", + "frozen_at": "2022-10-21T14:47:17.126Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "@test.status:pass AND -@language:python", + "to": "now" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/tests/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AQAAAYP69YODhSYeRgAAAABBWVA2OVlPREFBQjB3THBpOVlKQXRhMEg\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"355d882863b0e6d8\"},\"test\":{\"suite\":\"github.com/DataDog/repo/apps/rocky/internal/catalog\",\"full_name\":\"github.com/DataDog/repo/apps/rocky/internal/catalog.TestOverscan\",\"codeowners\":[\"@DataDog/repo\"],\"service\":\"dd-go-metrics-retrieval\",\"name\":\"TestOverscan\",\"fingerprint\":\"f156dcaa592eb047\",\"type\":\"test\",\"has_parameters\":false,\"status\":\"pass\"},\"os\":{\"version\":\"bionic\"},\"ci\":{\"pipeline\":{\"number\":1669072,\"name\":\"DataDog/repo\",\"id\":\"10630527\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10630527\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"stage-1\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"test:go:race-bionic 1/2\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184817229\"}},\"start\":1666362737539000000,\"runtime\":{\"name\":\"go\",\"version\":\"1.19.2\"},\"language\":\"go\",\"env\":\"test\",\"duration\":0,\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T14:24:33+00:00\",\"name\":\"ci.dd-go\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666362273000},\"author\":{\"date\":\"2022-10-21T14:24:33+00:00\",\"name\":\"ci.dd-go\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666362273000},\"message\":\"Gitlab merged prod (c5fd9a72b75448ff60ba078960fe0ba5e23d7050) to staging-43\\n\\nGitlab merged prod (07bd1d762138e4b5bebc0f792cd26ef078c0d872) to staging-43\\n\\nGitlab merged prod (4ac1ba5d2b28caccc0640182d90e2d99a5234584) to staging-43\\n\\nGitlab merged prod (1c27b214276d2e70d502fdc7c840200faa3d80cf) to staging-43\\n\\nMerge branch 'ting.tu/scheduling' (06242fc) into staging-43\\n\\n pm_trace_id: 10629269\\n feature_branch_pipeline_id: 10629269\\n source: to-staging\\n\\n* commit '06242fcf113290ca0f273e23942d86f2fc803a6b':\\n update nits\\n Allow partial schedule\\n\",\"sha\":\"c34a29db1311b6945aaa644302a77f9bc30e2d7d\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"staging-43\"},\"service\":\"dd-go-metrics-retrieval\"},\"tags\":[\"source:apm\",\"source:apm\"]}},{\"id\":\"AQAAAYP69YODhSYeRwAAAABBWVA2OVlPREFBQmptZ3JJdUtpRmM0S3U\",\"type\":\"citest\",\"attributes\":{\"test_level\":\"test\",\"attributes\":{\"test_suite\":{\"fingerprint\":\"355d882863b0e6d8\"},\"test\":{\"suite\":\"github.com/DataDog/repo/apps/rocky/internal/catalog\",\"full_name\":\"github.com/DataDog/repo/apps/rocky/internal/catalog.TestHdqDebug\",\"codeowners\":[\"@DataDog/repo\"],\"service\":\"dd-go-metrics-retrieval\",\"name\":\"TestHdqDebug\",\"fingerprint\":\"7baf20ec99e08277\",\"type\":\"test\",\"has_parameters\":false,\"status\":\"pass\"},\"os\":{\"version\":\"bionic\"},\"ci\":{\"pipeline\":{\"number\":1669072,\"name\":\"DataDog/repo\",\"id\":\"10630527\",\"url\":\"https://gitlab.site.io/DataDog/repo/pipelines/10630527\"},\"workspace_path\":\"/go/src/github.com/DataDog/repo\",\"stage\":{\"name\":\"stage-1\"},\"provider\":{\"name\":\"gitlab\"},\"job\":{\"name\":\"test:go:race-bionic 1/2\",\"url\":\"https://gitlab.site.io/DataDog/repo/-/jobs/184817229\"}},\"start\":1666362737539000000,\"runtime\":{\"name\":\"go\",\"version\":\"1.19.2\"},\"language\":\"go\",\"env\":\"test\",\"duration\":0,\"git\":{\"commit\":{\"committer\":{\"date\":\"2022-10-21T14:24:33+00:00\",\"name\":\"ci.dd-go\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666362273000},\"author\":{\"date\":\"2022-10-21T14:24:33+00:00\",\"name\":\"ci.dd-go\",\"email\":\"support@datadoghq.com\",\"date_timestamp\":1666362273000},\"message\":\"Gitlab merged prod (c5fd9a72b75448ff60ba078960fe0ba5e23d7050) to staging-43\\n\\nGitlab merged prod (07bd1d762138e4b5bebc0f792cd26ef078c0d872) to staging-43\\n\\nGitlab merged prod (4ac1ba5d2b28caccc0640182d90e2d99a5234584) to staging-43\\n\\nGitlab merged prod (1c27b214276d2e70d502fdc7c840200faa3d80cf) to staging-43\\n\\nMerge branch 'ting.tu/scheduling' (06242fc) into staging-43\\n\\n pm_trace_id: 10629269\\n feature_branch_pipeline_id: 10629269\\n source: to-staging\\n\\n* commit '06242fcf113290ca0f273e23942d86f2fc803a6b':\\n update nits\\n Allow partial schedule\\n\",\"sha\":\"c34a29db1311b6945aaa644302a77f9bc30e2d7d\"},\"repository_url\":\"https://gitlab.site.io/DataDog/repo.git\",\"repository\":{\"path\":\"/DataDog/repo.git\",\"scheme\":\"https\",\"name\":\"DataDog/repo\",\"host\":\"gitlab.site.io\",\"id\":\"gitlab.site.io/DataDog/repo\"},\"branch\":\"staging-43\"},\"service\":\"dd-go-metrics-retrieval\"},\"tags\":[\"source:apm\",\"source:apm\"]}}],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWVA2OVlPRGhTWWVSd0FBQUFCQldWQTJPVmxQUkVGQlFtcHRaM0pKZFV0cFJtTTBTM1UifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/tests/events?filter%5Bfrom%5D=now-15m&filter%5Bquery%5D=%40test.status%3Apass+AND+-%40language%3Apython&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWVA2OVlPRGhTWWVSd0FBQUFCQldWQTJPVmxQUkVGQlFtcHRaM0pKZFV0cFJtTTBTM1UifQ&page%5Blimit%5D=2&sort=timestamp\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "@test.status:pass AND -@language:python", + "to": "now" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFRQUFBWVA2OVlPRGhTWWVSd0FBQUFCQldWQTJPVmxQUkVGQlFtcHRaM0pKZFV0cFJtTTBTM1UifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/ci/tests/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWVA2OVlVbW5sUEFhd0FBQUFCQldWQTJPVmxWYlVGQlJGWkNWbGw1VTJWdVFWaHZNRm8ifQ\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/ci/tests/events?filter%5Bfrom%5D=now-15m&filter%5Bquery%5D=%40test.status%3Apass+AND+-%40language%3Apython&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWVA2OVlVbW5sUEFhd0FBQUFCQldWQTJPVmxWYlVGQlJGWkNWbGw1VTJWdVFWaHZNRm8ifQ&page%5Blimit%5D=2&sort=timestamp\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search tests events returns \"OK\" response with pagination", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/cloud-cost-management.json b/test-server-data/v2/cloud-cost-management.json new file mode 100644 index 0000000000..ed00b46193 --- /dev/null +++ b/test-server-data/v2/cloud-cost-management.json @@ -0,0 +1,2076 @@ +{ + "feature": "Cloud Cost Management", + "recordings": [ + { + "feature": "Cloud Cost Management", + "frozen_at": "2023-12-12T14:24:29.702Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_id": "123456789123", + "bucket_name": "dd-cost-bucket", + "bucket_region": "us-east-1", + "report_name": "dd-report-name", + "report_prefix": "dd-report-prefix" + }, + "type": "aws_cur_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cost/aws_cur_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"aws_cur_config\",\"id\":\"177\",\"attributes\":{\"account_id\":\"123456789123\",\"bucket_name\":\"dd-cost-bucket\",\"bucket_region\":\"us-east-1\",\"report_prefix\":\"dd-report-prefix\",\"report_name\":\"dd-report-name\",\"months\":15,\"updated_at\":\"2023-12-12T14:24:30.907264\",\"created_at\":\"2023-12-12T14:24:30.907264\",\"status\":\"active\",\"status_updated_at\":\"2023-12-12T14:24:30.904602\",\"error_messages\":[]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Cloud Cost Management AWS CUR config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-08-13T21:37:53.830Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_id": "1234abcd-1234-abcd-1234-1234abcd1234", + "actual_bill_config": { + "export_name": "dd-actual-export", + "export_path": "dd-export-path", + "storage_account": "dd-storage-account", + "storage_container": "dd-storage-container" + }, + "amortized_bill_config": { + "export_name": "dd-actual-export", + "export_path": "dd-export-path", + "storage_account": "dd-storage-account", + "storage_container": "dd-storage-container" + }, + "client_id": "1234abcd-1234-abcd-1234-1234abcd1234", + "scope": "this_is_an_invalid_scope" + }, + "type": "azure_uc_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cost/azure_uc_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"scope\\\" does not match the required format\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create Cloud Cost Management Azure configs returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2023-12-12T17:11:52.024Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_id": "1234abcd-1234-abcd-1234-1234abcd1234", + "actual_bill_config": { + "export_name": "dd-actual-export", + "export_path": "dd-export-path", + "storage_account": "dd-storage-account", + "storage_container": "dd-storage-container" + }, + "amortized_bill_config": { + "export_name": "dd-actual-export", + "export_path": "dd-export-path", + "storage_account": "dd-storage-account", + "storage_container": "dd-storage-container" + }, + "client_id": "1234abcd-1234-abcd-1234-1234abcd1234", + "scope": "subscriptions/1234abcd-1234-abcd-1234-1234abcd1234" + }, + "type": "azure_uc_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cost/azure_uc_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": {\"type\": \"azure_uc_configs\", \"id\": \"1\", \"attributes\": {\"configs\": [{\"id\": \"1\", \"storage_container\": \"test_storage_container\", \"scope\": \"test_scope\", \"status\": \"active\", \"account_id\": \"1234abcd-1234-abcd-1234-1234abcd1234\", \"client_id\": \"test_client_id\", \"storage_account\": \"test_storage_account\", \"months\": 15, \"error_messages\": [], \"dataset_type\": \"actual\", \"status_updated_at\": \"2023-12-12T17:11:56.855669\", \"created_at\": \"2023-12-12T17:11:56.860554\", \"updated_at\": \"2023-12-12T17:11:56.860554\", \"export_name\": \"test_export_name\", \"export_path\": \"test_export_path\"}, {\"id\": \"1\", \"storage_container\": \"test_storage_container\", \"scope\": \"test_scope\", \"status\": \"active\", \"account_id\": \"test_account_id\", \"client_id\": \"test_client_id\", \"storage_account\": \"test_storage_account\", \"months\": 15, \"error_messages\": [], \"dataset_type\": \"amortized\", \"status_updated_at\": \"2023-12-12T17:11:56.855669\", \"created_at\": \"2023-12-12T17:11:56.861623\", \"updated_at\": \"2023-12-12T17:11:56.861623\", \"export_name\": \"test_export_name\", \"export_path\": \"test_export_path\"}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Cloud Cost Management Azure configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-06-23T13:03:22.482Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "billing_account_id": "123456_A123BC_12AB34", + "bucket_name": "dd-cost-bucket", + "export_dataset_name": "billing", + "export_prefix": "datadog_cloud_cost_usage_export", + "export_project_name": "dd-cloud-cost-report", + "service_account": "InvalidServiceAccount" + }, + "type": "gcp_uc_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cost/gcp_uc_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"not a valid service_account\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create Google Cloud Usage Cost config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-06-16T17:46:53.205Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "billing_account_id": "123456_A123BC_12AB34", + "bucket_name": "dd-cost-bucket", + "export_dataset_name": "billing", + "export_prefix": "datadog_cloud_cost_usage_export", + "export_project_name": "dd-cloud-cost-report", + "service_account": "dd-ccm-gcp-integration@my-environment.iam.gserviceaccount.com" + }, + "type": "gcp_uc_config_post_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cost/gcp_uc_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"gcp_uc_config\",\"attributes\":{\"account_id\":\"123456_A123BC_12AB34\",\"bucket_name\":\"dd-cost-bucket\",\"created_at\":\"2025-03-24T21:00:03.851717\",\"dataset\":\"billing\",\"error_messages\":null,\"export_prefix\":\"datadog_cloud_cost_usage_export\",\"export_project_name\":\"dd-cloud-cost-report\",\"months\":15,\"project_id\":\"\",\"service_account\":\"dd-ccm-gcp-integration@my-environment.iam.gserviceaccount.com\",\"status\":\"active\",\"status_updated_at\":\"2025-05-09T21:01:48.748281\",\"updated_at\":\"2025-03-24T21:00:03.851717\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Google Cloud Usage Cost config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T19:31:23.072Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "costs_to_allocate": [ + { + "condition": "is", + "tag": "account_id", + "value": "123456789" + }, + { + "condition": "in", + "tag": "environment", + "value": "", + "values": [ + "production", + "staging" + ] + } + ], + "enabled": true, + "order_id": 1, + "provider": [ + "aws", + "gcp" + ], + "rule_name": "example-arbitrary-cost-rule", + "strategy": { + "allocated_by_tag_keys": [ + "team", + "environment" + ], + "based_on_costs": [ + { + "condition": "is", + "tag": "service", + "value": "web-api" + }, + { + "condition": "not in", + "tag": "team", + "value": "", + "values": [ + "legacy", + "deprecated" + ] + } + ], + "granularity": "daily", + "method": "proportional" + }, + "type": "shared" + }, + "type": "upsert_arbitrary_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cost/arbitrary_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"683\",\"type\":\"arbitrary_rule\",\"attributes\":{\"costs_to_allocate\":[{\"tag\":\"account_id\",\"condition\":\"is\",\"value\":\"123456789\",\"values\":null},{\"tag\":\"environment\",\"condition\":\"in\",\"value\":\"\",\"values\":[\"production\",\"staging\"]}],\"created\":\"2025-10-08T19:31:23.246204745Z\",\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"order_id\":1,\"provider\":[\"aws\",\"gcp\"],\"rule_name\":\"example-arbitrary-cost-rule\",\"strategy\":{\"method\":\"proportional\",\"granularity\":\"daily\",\"based_on_costs\":[{\"tag\":\"service\",\"condition\":\"is\",\"value\":\"web-api\",\"values\":null},{\"tag\":\"team\",\"condition\":\"not in\",\"value\":\"\",\"values\":[\"legacy\",\"deprecated\"]}],\"allocated_by_tag_keys\":[\"team\",\"environment\"]},\"type\":\"shared\",\"updated\":\"2025-10-08T19:31:23.246204745Z\",\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create custom allocation rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T18:26:06.563Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "rules": [ + { + "enabled": true, + "mapping": null, + "name": "Add Cost Center Tag", + "query": { + "addition": { + "key": "cost_center", + "value": "engineering" + }, + "case_insensitivity": false, + "if_not_exists": true, + "query": "account_id:\"123456789\" AND service:\"web-api\"" + }, + "reference_table": null + } + ] + }, + "id": "New Ruleset", + "type": "create_ruleset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/tags/enrichment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ee10c3ff-312f-464c-b4f6-46adaa6d00a1\",\"type\":\"ruleset\",\"attributes\":{\"created\":{\"seconds\":1759947966,\"nanos\":679638000},\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":{\"seconds\":1759947966,\"nanos\":679638000},\"name\":\"New Ruleset\",\"position\":1,\"rules\":[{\"name\":\"Add Cost Center Tag\",\"enabled\":true,\"query\":{\"query\":\"account_id:\\\"123456789\\\" AND service:\\\"web-api\\\"\",\"addition\":{\"key\":\"cost_center\",\"value\":\"engineering\"},\"if_not_exists\":true,\"case_insensitivity\":false},\"mapping\":null,\"reference_table\":null,\"metadata\":null}],\"version\":3611102}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create tag pipeline ruleset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2026-02-04T16:26:04.110Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "rules": [ + { + "enabled": true, + "mapping": null, + "name": "Add Cost Center Tag", + "query": { + "addition": { + "key": "cost_center", + "value": "engineering" + }, + "case_insensitivity": false, + "if_tag_exists": "replace", + "query": "account_id:\"123456789\" AND service:\"web-api\"" + }, + "reference_table": null + } + ] + }, + "id": "New Ruleset", + "type": "create_ruleset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/tags/enrichment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ee10c3ff-312f-464c-b4f6-46adaa6d00a1\",\"type\":\"ruleset\",\"attributes\":{\"created\":{\"seconds\":1759947966,\"nanos\":679638000},\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":{\"seconds\":1759947966,\"nanos\":679638000},\"name\":\"New Ruleset\",\"position\":1,\"rules\":[{\"name\":\"Add Cost Center Tag\",\"enabled\":true,\"query\":{\"query\":\"account_id:\\\"123456789\\\" AND service:\\\"web-api\\\"\",\"addition\":{\"key\":\"cost_center\",\"value\":\"engineering\"},\"if_tag_exists\":\"replace\",\"case_insensitivity\":false},\"mapping\":null,\"reference_table\":null,\"metadata\":null}],\"version\":3611102}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create tag pipeline ruleset with if_tag_exists returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2023-12-12T14:24:02.091Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/aws_cur_config/100", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete Cloud Cost Management AWS CUR config returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-08-13T21:24:23.921Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/aws_cur_config/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Cloud Cost Management AWS CUR config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2023-12-12T16:00:55.255Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/azure_uc_config/100", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete Cloud Cost Management Azure config returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-08-13T21:21:25.379Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/azure_uc_config/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Cloud Cost Management Azure config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2024-07-22T12:40:43.508Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/custom_costs/9d055d22-a838-4e9f-bc34-a4f9ab66280c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete Custom Costs File returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-08-13T21:13:51.484Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/custom_costs/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Custom Costs file returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-06-13T20:58:16.900Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/gcp_uc_config/100", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"204\",\"title\":\"No Content\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete Google Cloud Usage Cost config returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-06-23T13:06:22.086Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/gcp_uc_config/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Google Cloud Usage Cost config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-04-28T11:45:34.874Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/budget/1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"invalid budgetId\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete a budget returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T19:35:19.003Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/arbitrary_rule/683", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete custom allocation rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T19:17:11.635Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/tags/enrichment/ee10c3ff-312f-464c-b4f6-46adaa6d00a1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete tag pipeline ruleset returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2024-07-22T12:06:05.860Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/custom_costs/9d055d22-a838-4e9f-bc34-a4f9ab66280c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9d055d22-a838-4e9f-bc34-a4f9ab66280c\",\"type\":\"cost_metadata\",\"attributes\":{\"billed_cost\":250,\"billing_currency\":\"USD\",\"charge_period\":{\"start\":1683331200000,\"end\":1686009600000},\"content\":[{\"BilledCost\":250,\"BillingCurrency\":\"USD\",\"ChargeDescription\":\"my_description\",\"Tags\":{\"key\":\"value\"},\"ProviderName\":\"my_provider\",\"ChargePeriodStart\":\"2023-05-06\",\"ChargePeriodEnd\":\"2023-06-06\"}],\"name\":\"data.json\",\"provider_names\":[\"my_provider\"],\"status\":\"ACTIVE\",\"uploaded_at\":1721322924169,\"uploaded_by\":{\"name\":\"Julien Hemery\",\"icon\":\"https://secure.gravatar.com/avatar/f12684c6ebe1bdd70c36789c5270aac0?d=retro\\u0026s=48\",\"email\":\"julien.hemery@datadoghq.com\"}}},\"meta\":{\"version\":\"1.0\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get Custom Costs File returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-08-13T20:50:39.857Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/custom_costs/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"metadata not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get Custom Costs file returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-09-11T20:19:23.847Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/gcp_uc_config/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"123456\",\"type\":\"gcp_uc_config\",\"attributes\":{\"account_id\":\"123456_ABCDEF_123ABC\",\"bucket_name\":\"test-bucket-name\",\"created_at\":\"2024-04-29T13:10:37.516579\",\"dataset\":\"test-dataset\",\"error_messages\":null,\"export_prefix\":\"datadog_cloud_cost_detailed_usage_export\",\"export_project_name\":\"test-export-project-name\",\"months\":15,\"project_id\":\"\",\"service_account\":\"dd-ccm-gcp-test-integration@some-test-project.iam.gserviceaccount.com\",\"status\":\"active\",\"status_updated_at\":\"2025-08-02T14:23:19.542138\",\"updated_at\":\"2024-04-29T13:10:37.516579\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get Google Cloud Usage Cost config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-04-28T11:45:35.263Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/budget/9d055d22-0a0a-0a0a-aaa0-00000000000a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a budget returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-14T20:06:56.512Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/tags/enrichment/a1e9de9b-b88e-41c6-a0cd-cc0ebd7092de", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a1e9de9b-b88e-41c6-a0cd-cc0ebd7092de\",\"type\":\"ruleset\",\"attributes\":{\"created\":{\"seconds\":1753803214,\"nanos\":75009000},\"enabled\":false,\"last_modified_user_uuid\":\"4acae75b-78ac-11ef-9c0d-e6936f49688e\",\"modified\":{\"seconds\":1753803214,\"nanos\":75009000},\"name\":\"EVP Cost Tags\",\"position\":1,\"processing_status\":\"done\",\"rules\":[{\"name\":\"EVP Cost Tags\",\"enabled\":true,\"query\":null,\"mapping\":null,\"reference_table\":{\"table_name\":\"evp_cost_tags\",\"source_keys\":[\"pod_name\"],\"field_pairs\":[{\"input_column\":\"cost_service\",\"output_key\":\"cost_service\"},{\"input_column\":\"cogs\",\"output_key\":\"cogs\"},{\"input_column\":\"cost_team\",\"output_key\":\"cost_team\"},{\"input_column\":\"cost_product\",\"output_key\":\"cost_product\"},{\"input_column\":\"subscription\",\"output_key\":\"subscription\"},{\"input_column\":\"cost_group\",\"output_key\":\"cost_group\"},{\"input_column\":\"cost_subservice\",\"output_key\":\"cost_subservice\"},{\"input_column\":\"cost_customer\",\"output_key\":\"cost_customer\"},{\"input_column\":\"cost_isolation_id\",\"output_key\":\"cost_isolation_id\"}],\"case_insensitivity\":false,\"if_not_exists\":false},\"metadata\":null},{\"name\":\"Load balancer runtimecosts-team\",\"enabled\":true,\"query\":{\"query\":\"dd-frontend-service:evp_* OR dd-frontend-service:logs_*\",\"addition\":{\"key\":\"runtimecosts-team\",\"value\":\"event-platform\"},\"if_not_exists\":true,\"case_insensitivity\":false},\"mapping\":null,\"reference_table\":null,\"metadata\":null}],\"version\":3588223}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a tag pipeline ruleset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-09-11T19:58:54.699Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/aws_cur_config/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"123456\",\"type\":\"aws_cur_config\",\"attributes\":{\"account_filters\":{\"include_new_accounts\":null},\"account_id\":\"123456123456\",\"bucket_name\":\"dd-bucket-name\",\"bucket_region\":\"us-east-1\",\"created_at\":\"2023-05-01T20:05:41.849823\",\"error_messages\":null,\"months\":15,\"report_name\":\"report-name-test\",\"report_prefix\":\"report-prefix-test\",\"status\":\"active\",\"status_updated_at\":\"2025-01-15T14:57:27.799558\",\"updated_at\":\"2023-05-01T20:05:41.849823\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get cost AWS CUR config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-09-11T20:06:45.013Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/azure_uc_config/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"123456\",\"type\":\"azure_uc_configs\",\"attributes\":{\"configs\":[{\"account_id\":\"1234abcd-1234-abcd-1234-abcd1234abcd\",\"client_id\":\"12345678-1234-5678-1234-567812345678\",\"status\":\"active\",\"status_updated_at\":\"2024-09-06T11:49:10.544706\",\"error_messages\":null,\"id\":\"123\",\"dataset_type\":\"amortized\",\"storage_account\":\"teststorageaccount\",\"storage_container\":\"teststoragecontainer\",\"export_name\":\"test-export-name\",\"export_path\":\"/test-export-path-amortized\",\"scope\":\"/subscriptions/abcdefgh-abcd-efgh-abcd-efghabcdefgh\",\"months\":15,\"created_at\":\"2023-06-14T20:42:08.792050\",\"updated_at\":\"2023-06-14T20:42:08.792050\"},{\"account_id\":\"87654321-8765-4321-8765-432187654321\",\"client_id\":\"aaaabbbb-cccc-dddd-eeee-ffffgggghhhh\",\"status\":\"active\",\"status_updated_at\":\"2024-09-06T11:49:10.544706\",\"error_messages\":null,\"id\":\"456\",\"dataset_type\":\"actual\",\"storage_account\":\"teststorageaccount\",\"storage_container\":\"teststoragecontainer\",\"export_name\":\"test-export-name\",\"export_path\":\"/test-export-path-actual\",\"scope\":\"/subscriptions/abcdefgh-abcd-efgh-abcd-efghabcdefgh\",\"months\":15,\"created_at\":\"2023-06-14T20:42:08.792050\",\"updated_at\":\"2023-06-14T20:42:08.792050\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get cost Azure UC config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T19:33:08.375Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/arbitrary_rule/683", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"683\",\"type\":\"arbitrary_rule\",\"attributes\":{\"costs_to_allocate\":[{\"tag\":\"account_id\",\"condition\":\"is\",\"value\":\"123456789\",\"values\":null},{\"tag\":\"environment\",\"condition\":\"in\",\"value\":\"\",\"values\":[\"production\",\"staging\"]}],\"created\":\"2025-10-08T19:31:23.246204Z\",\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"order_id\":1,\"processing_status\":\"error\",\"provider\":[\"aws\",\"gcp\"],\"rule_name\":\"example-arbitrary-cost-rule\",\"strategy\":{\"method\":\"proportional\",\"granularity\":\"daily\",\"based_on_costs\":[{\"tag\":\"service\",\"condition\":\"is\",\"value\":\"web-api\",\"values\":null},{\"tag\":\"team\",\"condition\":\"not in\",\"value\":\"\",\"values\":[\"legacy\",\"deprecated\"]}],\"allocated_by_tag_keys\":[\"team\",\"environment\"]},\"type\":\"shared\",\"updated\":\"2025-10-08T19:31:23.246204Z\",\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get custom allocation rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T18:38:56.657Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/tags/enrichment/ee10c3ff-312f-464c-b4f6-46adaa6d00a1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ee10c3ff-312f-464c-b4f6-46adaa6d00a1\",\"type\":\"ruleset\",\"attributes\":{\"created\":{\"seconds\":1759947966,\"nanos\":679638000},\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":{\"seconds\":1759947966,\"nanos\":679638000},\"name\":\"New Ruleset\",\"position\":1,\"processing_status\":\"error\",\"rules\":[{\"name\":\"Add Cost Center Tag\",\"enabled\":true,\"query\":{\"query\":\"account_id:\\\"123456789\\\" AND service:\\\"web-api\\\"\",\"addition\":{\"key\":\"cost_center\",\"value\":\"engineering\"},\"if_not_exists\":true,\"case_insensitivity\":false},\"mapping\":null,\"reference_table\":null,\"metadata\":null}],\"version\":3611102}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get tag pipeline ruleset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2023-12-12T13:33:48.031Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/aws_cur_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": [{\"type\": \"aws_cur_config\", \"id\": \"100\", \"attributes\": {\"account_id\": \"000000000000\", \"bucket_name\": \"test_bucket_name\", \"bucket_region\": \"us-east-1\", \"report_prefix\": \"cur-hourly\", \"report_name\": \"billing-conductor-cur\", \"months\": 15, \"updated_at\": \"2023-10-27T12:38:39.585408\", \"created_at\": \"2023-10-10T13:53:28.774143\", \"status\": \"active\", \"status_updated_at\": \"2023-11-21T17:07:24.778386\", \"error_messages\": []}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Cloud Cost Management AWS CUR configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2023-12-12T15:29:02.625Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/azure_uc_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": [{\"type\": \"azure_uc_configs\", \"id\": \"1\", \"attributes\": {\"configs\": [{\"id\": \"1\", \"export_name\": \"test_export_name\", \"scope\": \"test_scope\", \"created_at\": \"2023-06-29T12:43:36.569819\", \"storage_container\": \"test_storage_container\", \"status\": \"active\", \"updated_at\": \"2023-06-29T12:43:36.569819\", \"account_id\": \"test_account_id\", \"client_id\": \"test_client_id\", \"dataset_type\": \"actual\", \"status_updated_at\": \"2023-11-03T13:48:16.827724\", \"error_messages\": [], \"storage_account\": \"test_storage_account\", \"months\": 15, \"export_path\": \"test_export_path\"}, {\"id\": \"1\", \"export_name\": \"test_export_name\", \"scope\": \"test_scope\", \"created_at\": \"2023-06-29T12:43:36.569819\", \"storage_container\": \"test_storage_container\", \"status\": \"active\", \"updated_at\": \"2023-06-29T12:43:36.569819\", \"account_id\": \"test_account_id\", \"client_id\": \"test_client_id\", \"dataset_type\": \"amortized\", \"status_updated_at\": \"2023-11-03T13:48:16.827724\", \"error_messages\": [], \"storage_account\": \"test_storage_account\", \"months\": 15, \"export_path\": \"test_export_path\"}]}}, {\"type\": \"azure_uc_configs\", \"id\": \"1\", \"attributes\": {\"configs\": [{\"id\": \"1\", \"export_name\": \"test_export_name\", \"scope\": \"test_scope\", \"created_at\": \"2023-11-09T16:26:33.859447\", \"storage_container\": \"test_storage_container\", \"status\": \"active\", \"updated_at\": \"2023-11-09T16:26:33.859447\", \"account_id\": \"test_account_id\", \"client_id\": \"test_client_id\", \"dataset_type\": \"actual\", \"status_updated_at\": \"2023-11-09T16:26:33.849153\", \"storage_account\": \"test_storage_account\", \"months\": 15, \"export_path\": \"test_export_path\"}, {\"id\": \"1\", \"export_name\": \"test_export_name\", \"scope\": \"test_scope\", \"created_at\": \"2023-11-09T16:26:33.862026\", \"storage_container\": \"test_storage_container\", \"status\": \"active\", \"updated_at\": \"2023-11-09T16:26:33.862026\", \"account_id\": \"test_account_id\", \"client_id\": \"test_client_id\", \"dataset_type\": \"amortized\", \"status_updated_at\": \"2023-11-09T16:26:33.849153\", \"storage_account\": \"test_storage_account\", \"months\": 15, \"export_path\": \"test_export_path\"}]}}, {\"type\": \"azure_uc_configs\", \"id\": \"1\", \"attributes\": {\"configs\": [{\"id\": \"1\", \"export_name\": \"test_export_name\", \"scope\": \"test_scope\", \"created_at\": \"2023-11-09T20:20:35.959808\", \"storage_container\": \"test_storage_container\", \"status\": \"active\", \"updated_at\": \"2023-11-09T20:20:35.959808\", \"account_id\": \"test_account_id\", \"client_id\": \"test_client_id\", \"dataset_type\": \"actual\", \"status_updated_at\": \"2023-11-09T20:20:35.956202\", \"storage_account\": \"test_storage_account\", \"months\": 15, \"export_path\": \"test_export_path\"}, {\"id\": \"1\", \"export_name\": \"test_export_name\", \"scope\": \"test_scope\", \"created_at\": \"2023-11-09T20:20:35.960815\", \"storage_container\": \"test_storage_container\", \"status\": \"active\", \"updated_at\": \"2023-11-09T20:20:35.960815\", \"account_id\": \"test_account_id\", \"client_id\": \"test_client_id\", \"dataset_type\": \"amortized\", \"status_updated_at\": \"2023-11-09T20:20:35.956202\", \"storage_account\": \"test_storage_account\", \"months\": 15, \"export_path\": \"test_export_path\"}]}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Cloud Cost Management Azure configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2024-07-22T12:06:38.368Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/custom_costs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"9d055d22-a838-4e9f-bc34-a4f9ab66280c\",\"type\":\"cost_metadata\",\"attributes\":{\"billed_cost\":250,\"billing_currency\":\"USD\",\"charge_period\":{\"start\":1683331200000,\"end\":1686009600000},\"name\":\"data.json\",\"provider_names\":[\"my_provider\"],\"status\":\"ACTIVE\",\"uploaded_at\":1721322924169,\"uploaded_by\":{\"name\":\"Julien Hemery\",\"icon\":\"https://secure.gravatar.com/avatar/f12684c6ebe1bdd70c36789c5270aac0?d=retro\\u0026s=48\",\"email\":\"julien.hemery@datadoghq.com\"}}}],\"meta\":{\"version\":\"1.0\",\"total_filtered_count\":766}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Custom Costs Files returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-08-13T20:12:25.668Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/custom_costs", + "query": [ + [ + "filter[status]", + "invalid_file_status" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"unknown status, got invalid_file_status\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List Custom Costs files returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-06-23T13:07:11.537Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/gcp_uc_config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Google Cloud Usage Cost configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-04-28T11:45:35.577Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/budgets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"3fba18e7-0067-491a-9308-3f73c8e2c575\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745571497036,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745571497036,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"57238082-4cc2-45a6-9064-22043737ed7c\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745583730189,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745583730189,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"f916baf2-02a4-4160-82b6-db389e4b43be\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745574561009,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745574561009,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"851ed069-23ab-441a-b8f3-8a5773403b3e\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745577123330,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745577123330,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"59073cc2-2478-421a-82a1-d79a5da28dda\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745577169183,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745577169183,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"5f349d8d-d387-4e15-afff-4782431e15d7\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745577608689,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745577608689,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"15ab22ba-5518-4e0c-9e06-a7f7bf2678bd\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745577943069,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745577943069,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"b18dc99d-1a12-469d-bd32-6bd98a6e5acb\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745577421488,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745577421488,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"8f569dc8-aea1-485d-a1c3-abc157c99a93\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745579211960,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745579211960,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"f3994f9b-dd15-43ea-a841-728d531eb11b\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745579361284,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745579361284,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"cb9fb4a9-c0df-4e4d-9835-3d210363d0bb\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745577992084,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745577992084,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"ff79e81b-1e6f-4a98-9500-91700fec0c2b\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745579291324,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745579291324,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"891f1139-fd93-499e-bad9-00409f61c565\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745586407929,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745586407929,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"85731223-6603-4639-9e01-b973f1ec9a24\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745579613007,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745579613007,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"affbf979-ed21-422f-a2eb-f8edcab237ff\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745579759927,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745579759927,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"651e9d4a-87aa-43c2-83ce-ec256e5cfea4\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745579644284,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745579644284,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"4abf19e6-9e97-4a76-bc33-3fc3a12c802c\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745580084222,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745580084222,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"fdf6d71d-30b3-4e5e-a644-2045be260b56\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745580326048,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745580326048,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"1c232ea0-94a4-442f-b618-5340a066f629\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745581289211,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745581289211,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"fc600e23-ebd1-454c-b863-d4be67481c65\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745580744852,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745580744852,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List budgets returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T19:33:51.784Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost/arbitrary_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"683\",\"type\":\"arbitrary_rule\",\"attributes\":{\"costs_to_allocate\":[{\"tag\":\"account_id\",\"condition\":\"is\",\"value\":\"123456789\",\"values\":null},{\"tag\":\"environment\",\"condition\":\"in\",\"value\":\"\",\"values\":[\"production\",\"staging\"]}],\"created\":\"2025-10-08T19:31:23.246204Z\",\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"order_id\":1,\"processing_status\":\"error\",\"provider\":[\"aws\",\"gcp\"],\"rule_name\":\"example-arbitrary-cost-rule\",\"strategy\":{\"method\":\"proportional\",\"granularity\":\"daily\",\"based_on_costs\":[{\"tag\":\"service\",\"condition\":\"is\",\"value\":\"web-api\",\"values\":null},{\"tag\":\"team\",\"condition\":\"not in\",\"value\":\"\",\"values\":[\"legacy\",\"deprecated\"]}],\"allocated_by_tag_keys\":[\"team\",\"environment\"]},\"type\":\"shared\",\"updated\":\"2025-10-08T19:31:23.246204Z\",\"version\":1}}],\"meta\":{\"total_count\":1}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List custom allocation rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T18:35:31.385Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/tags/enrichment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"ee10c3ff-312f-464c-b4f6-46adaa6d00a1\",\"type\":\"ruleset\",\"attributes\":{\"created\":{\"seconds\":1759947966,\"nanos\":679638000},\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":{\"seconds\":1759947966,\"nanos\":679638000},\"name\":\"New Ruleset\",\"position\":1,\"processing_status\":\"error\",\"rules\":[{\"name\":\"Add Cost Center Tag\",\"enabled\":true,\"query\":{\"query\":\"account_id:\\\"123456789\\\" AND service:\\\"web-api\\\"\",\"addition\":{\"key\":\"cost_center\",\"value\":\"engineering\"},\"if_not_exists\":true,\"case_insensitivity\":false},\"mapping\":null,\"reference_table\":null,\"metadata\":null}],\"version\":3611102}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List tag pipeline rulesets returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-08-25T15:10:14.494Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "aws_cur_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cost/aws_cur_config/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Cloud account not found\",\"detail\":\"Cloud account with ID 123456 was not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update Cloud Cost Management AWS CUR config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2023-12-12T13:23:19.108Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "aws_cur_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cost/aws_cur_config/100", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": [{\"type\": \"aws_cur_config\", \"id\": \"100\", \"attributes\": {\"account_id\": \"000000000000\", \"bucket_name\": \"test_bucket_name\", \"bucket_region\": \"us-east-1\", \"report_prefix\": \"cur-report-hourly\", \"report_name\": \"cur-hourly\", \"months\": 15, \"updated_at\": \"2023-10-18T08:15:45.265597\", \"created_at\": \"2022-07-25T17:19:47.190482\", \"status\": \"active\", \"status_updated_at\": \"2023-11-08T22:47:55.372330\", \"error_messages\": []}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update Cloud Cost Management AWS CUR config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-08-25T15:10:28.926Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "azure_uc_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cost/azure_uc_config/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Cloud account not found\",\"detail\":\"Cloud account with ID 123456 was not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update Cloud Cost Management Azure config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2023-12-13T13:29:24.025Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "azure_uc_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cost/azure_uc_config/100", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": {\"type\": \"azure_uc_configs\", \"id\": \"100\", \"attributes\": {\"configs\": [{\"updated_at\": \"2023-06-29T12:43:36.569819\", \"export_path\": \"/amortized-cost\", \"status\": \"active\", \"id\": \"56\", \"account_id\": \"test_account_id\", \"client_id\": \"test_client_id\", \"dataset_type\": \"amortized\", \"created_at\": \"2023-06-29T12:43:36.569819\", \"export_name\": \"test_export_name\", \"scope\": \"test_scope\", \"storage_account\": \"test_storage_account\", \"storage_container\": \"test_storage_container\", \"status_updated_at\": \"2023-12-13T13:29:24.462039\", \"months\": 15}, {\"updated_at\": \"2023-06-29T12:43:36.569819\", \"export_path\": \"/actual-cost\", \"status\": \"active\", \"id\": \"55\", \"account_id\": \"test_account_id\", \"client_id\": \"test_client_id\", \"dataset_type\": \"actual\", \"created_at\": \"2023-06-29T12:43:36.569819\", \"export_name\": \"test_export_name\", \"scope\": \"test_scope\", \"storage_account\": \"test_storage_account\", \"storage_container\": \"test_storage_container\", \"status_updated_at\": \"2023-12-13T13:29:24.462039\", \"months\": 15}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update Cloud Cost Management Azure config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-06-23T12:09:03.300Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "gcp_uc_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cost/gcp_uc_config/InvalidValue", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"cloudAccountId\\\" in \\\"path\\\"; expected type \\\"int64\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update Cloud Cost Management GCP Usage Cost config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-06-23T12:09:42.232Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "gcp_uc_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cost/gcp_uc_config/123456", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rpc error: code = NotFound desc = cloud account '\ufffd' not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update Google Cloud Usage Cost config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-06-16T19:07:00.082Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true + }, + "type": "gcp_uc_config_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cost/gcp_uc_config/100", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"100\",\"type\":\"gcp_uc_config\",\"attributes\":{\"account_id\":\"123456_A123BC_12AB34\",\"bucket_name\":\"dd-cloud-cost-management\",\"created_at\":\"2024-04-29T13:10:37.514046\",\"dataset\":\"billing\",\"error_messages\":null,\"export_prefix\":\"datadog_cloud_cost\",\"export_project_name\":\"datadog-cloud-cost\",\"months\":15,\"project_id\":\"\",\"service_account\":\"test@datadoghq.com\",\"status\":\"active\",\"status_updated_at\":\"2025-06-14T00:50:28.556876\",\"updated_at\":\"2025-06-14T00:50:28.556873\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update Google Cloud Usage Cost config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T19:34:38.940Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "costs_to_allocate": [ + { + "condition": "is", + "tag": "account_id", + "value": "123456789", + "values": [] + }, + { + "condition": "in", + "tag": "environment", + "value": "", + "values": [ + "production", + "staging" + ] + } + ], + "enabled": true, + "order_id": 1, + "provider": [ + "aws", + "gcp" + ], + "rule_name": "example-arbitrary-cost-rule", + "strategy": { + "allocated_by_tag_keys": [ + "team", + "environment" + ], + "based_on_costs": [ + { + "condition": "is", + "tag": "service", + "value": "web-api", + "values": [] + }, + { + "condition": "not in", + "tag": "team", + "value": "", + "values": [ + "legacy", + "deprecated" + ] + } + ], + "granularity": "daily", + "method": "proportional" + }, + "type": "shared" + }, + "type": "upsert_arbitrary_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/cost/arbitrary_rule/683", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"683\",\"type\":\"arbitrary_rule\",\"attributes\":{\"costs_to_allocate\":[{\"tag\":\"account_id\",\"condition\":\"is\",\"value\":\"123456789\",\"values\":null},{\"tag\":\"environment\",\"condition\":\"in\",\"value\":\"\",\"values\":[\"production\",\"staging\"]}],\"created\":\"2025-10-08T19:31:23.246204Z\",\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"order_id\":1,\"provider\":[\"aws\",\"gcp\"],\"rule_name\":\"example-arbitrary-cost-rule\",\"strategy\":{\"method\":\"proportional\",\"granularity\":\"daily\",\"based_on_costs\":[{\"tag\":\"service\",\"condition\":\"is\",\"value\":\"web-api\",\"values\":null},{\"tag\":\"team\",\"condition\":\"not in\",\"value\":\"\",\"values\":[\"legacy\",\"deprecated\"]}],\"allocated_by_tag_keys\":[\"team\",\"environment\"]},\"type\":\"shared\",\"updated\":\"2025-10-08T19:34:39.054605Z\",\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update custom allocation rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-04-28T11:19:55.670Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": {} + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cost/budget", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"\\\" expected one of \\\"budget\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update if exists, or create a new budget returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-04-28T11:19:55.806Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "end_month": 202502, + "entries": [ + { + "amount": 500, + "month": 202501, + "tag_filters": [ + { + "tag_key": "service", + "tag_value": "ec2" + } + ] + }, + { + "amount": 500, + "month": 202502, + "tag_filters": [ + { + "tag_key": "service", + "tag_value": "ec2" + } + ] + } + ], + "metrics_query": "aws.cost.amortized{service:ec2} by {service}", + "name": "my budget", + "start_month": 202501, + "tags": [ + "service" + ] + }, + "id": "00000000-0a0a-0a0a-aaa0-00000000000a", + "type": "budget" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cost/budget", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"failed to upsert budget: budget not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update if exists, or create a new budget returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-04-28T11:19:56.204Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "end_month": 202502, + "entries": [ + { + "amount": 500, + "month": 202501, + "tag_filters": [ + { + "tag_key": "service", + "tag_value": "ec2" + } + ] + }, + { + "amount": 500, + "month": 202502, + "tag_filters": [ + { + "tag_key": "service", + "tag_value": "ec2" + } + ] + } + ], + "metrics_query": "aws.cost.amortized{service:ec2} by {service}", + "name": "my budget", + "start_month": 202501 + }, + "type": "budget" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cost/budget", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"041ec283-154d-4427-987b-113f806e73f0\",\"type\":\"budget\",\"attributes\":{\"created_at\":1745839196458,\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"end_month\":202502,\"entries\":[{\"month\":202501,\"amount\":500,\"tag_filters\":[{\"tag_key\":\"service\",\"tag_value\":\"ec2\"}]},{\"month\":202502,\"amount\":500,\"tag_filters\":[{\"tag_key\":\"service\",\"tag_value\":\"ec2\"}]}],\"metrics_query\":\"aws.cost.amortized{service:ec2} by {service}\",\"name\":\"my budget\",\"org_id\":321813,\"start_month\":202501,\"total_amount\":1000,\"updated_at\":1745839196458,\"updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cost/budget/041ec283-154d-4427-987b-113f806e73f0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update if exists, or create a new budget returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T19:15:10.916Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "last_version": 3611102, + "rules": [ + { + "enabled": true, + "mapping": { + "destination_key": "team_owner", + "if_not_exists": true, + "source_keys": [ + "account_name", + "account_id" + ] + }, + "name": "Account Name Mapping", + "query": null, + "reference_table": null + } + ] + }, + "id": "New Ruleset", + "type": "update_ruleset" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/tags/enrichment/ee10c3ff-312f-464c-b4f6-46adaa6d00a1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ee10c3ff-312f-464c-b4f6-46adaa6d00a1\",\"type\":\"ruleset\",\"attributes\":{\"created\":{\"seconds\":1759950911,\"nanos\":31873000},\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":{\"seconds\":1759950911,\"nanos\":31873000},\"name\":\"New Ruleset\",\"position\":1,\"rules\":[{\"name\":\"Account Name Mapping\",\"enabled\":true,\"query\":null,\"mapping\":{\"source_keys\":[\"account_name\",\"account_id\"],\"destination_key\":\"team_owner\",\"if_not_exists\":true},\"reference_table\":null,\"metadata\":null}],\"version\":3611113}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update tag pipeline ruleset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-10-08T19:15:10.916Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "last_version": 3611102, + "rules": [ + { + "enabled": true, + "mapping": { + "destination_key": "team_owner", + "if_tag_exists": "replace", + "source_keys": [ + "account_name", + "account_id" + ] + }, + "name": "Account Name Mapping", + "query": null, + "reference_table": null + } + ] + }, + "id": "New Ruleset", + "type": "update_ruleset" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/tags/enrichment/ee10c3ff-312f-464c-b4f6-46adaa6d00a1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ee10c3ff-312f-464c-b4f6-46adaa6d00a1\",\"type\":\"ruleset\",\"attributes\":{\"created\":{\"seconds\":1759950911,\"nanos\":31873000},\"enabled\":true,\"last_modified_user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":{\"seconds\":1759950911,\"nanos\":31873000},\"name\":\"New Ruleset\",\"position\":1,\"rules\":[{\"name\":\"Account Name Mapping\",\"enabled\":true,\"query\":null,\"mapping\":{\"source_keys\":[\"account_name\",\"account_id\"],\"destination_key\":\"team_owner\",\"if_tag_exists\":\"replace\"},\"reference_table\":null,\"metadata\":null}],\"version\":3611113}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update tag pipeline ruleset with if_tag_exists returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2024-07-18T17:15:23.344Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": [ + { + "BilledCost": 250, + "BillingCurrency": "USD", + "ChargeDescription": "my_description", + "ChargePeriodEnd": "2023-06-06", + "ChargePeriodStart": "2023-05-06", + "ProviderName": "my_provider", + "Tags": { + "key": "value" + } + } + ] + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cost/custom_costs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9d055d22-a838-4e9f-bc34-a4f9ab66280c\",\"type\":\"cost_metadata\",\"attributes\":{\"billed_cost\":250,\"billing_currency\":\"USD\",\"charge_period\":{\"start\":1683331200000,\"end\":1686009600000},\"name\":\"data.json\",\"provider_names\":[\"my_provider\"],\"status\":\"UPLOADING\",\"uploaded_at\":1721322923888,\"uploaded_by\":{\"name\":\"Julien Hemery\",\"icon\":\"https://secure.gravatar.com/avatar/f12684c6ebe1bdd70c36789c5270aac0?d=retro\\u0026s=48\",\"email\":\"julien.hemery@datadoghq.com\"}}},\"meta\":{\"version\":\"1.0\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Upload Custom Costs File returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-08-13T18:09:22.298Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": [ + { + "BilledCost": 100.5, + "BillingCurrency": "USD", + "ChargeDescription": "Monthly usage charge for my service", + "ChargePeriodEnd": "2023-02-28", + "ChargePeriodStart": "2023-02-01" + } + ] + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cost/custom_costs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"errors in object 0:\\nTags is a required field\\nProviderName is a required field\",\"meta\":{\"end\":167,\"obj\":0,\"start\":1}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Upload Custom Costs file returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Cost Management", + "frozen_at": "2025-09-11T19:06:38.613Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "Query": "example:query AND test:true" + }, + "type": "validate_query" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/tags/enrichment/validate-query", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6a2cddcf-8498-469f-8da1-7b8fb597868d\",\"type\":\"validate_response\",\"attributes\":{\"Canonical\":\"example:query AND test:true\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate query returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/cloud-network-monitoring.json b/test-server-data/v2/cloud-network-monitoring.json new file mode 100644 index 0000000000..b9e3352849 --- /dev/null +++ b/test-server-data/v2/cloud-network-monitoring.json @@ -0,0 +1,141 @@ +{ + "feature": "Cloud Network Monitoring", + "recordings": [ + { + "feature": "Cloud Network Monitoring", + "frozen_at": "2025-03-31T18:18:50.338Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/network/connections/aggregate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get aggregated connections returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Network Monitoring", + "frozen_at": "2025-07-25T20:54:53.474Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/network/dns/aggregate", + "query": [ + [ + "group_by", + "server_ungrouped,server_service" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Cannot combine server_ungrouped with other server groupings or network.dns_query\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get all aggregated DNS traffic returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Cloud Network Monitoring", + "frozen_at": "2025-07-25T20:54:53.819Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/network/dns/aggregate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all aggregated DNS traffic returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloud Network Monitoring", + "frozen_at": "2025-07-25T20:54:53.978Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/network/connections/aggregate", + "query": [ + [ + "limit", + "8000" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid limit\",\"detail\":\"Limit must meet requirements listed in https://docs.datadoghq.com/api/latest/cloud-network-monitoring/\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get all aggregated connections returns \"Bad Request\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/cloudflare-integration.json b/test-server-data/v2/cloudflare-integration.json new file mode 100644 index 0000000000..378b5d23ec --- /dev/null +++ b/test-server-data/v2/cloudflare-integration.json @@ -0,0 +1,691 @@ +{ + "feature": "Cloudflare Integration", + "recordings": [ + { + "feature": "Cloudflare Integration", + "frozen_at": "2024-01-04T18:40:40.939Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "name": "testaddcloudflareaccountreturnsbadrequestresponseduetomissingemail1704393640" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"{'_schema': ['Email address is required if providing an api key and not an api token.']}\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Add Cloudflare account returns \"Bad Request\" response due to missing email", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "frozen_at": "2024-01-04T18:40:41.099Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "testaddcloudflareaccountreturnsbadrequestresponseusinginvalidauthkey1704393641" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid account. Your Cloudflare configuration is invalid. Impossible to get zones for the account testaddcloudflareaccountreturnsbadrequestresponseusinginvalidauthkey1704393641: API key or email is unknown.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Add Cloudflare account returns \"Bad Request\" response using invalid auth key", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "frozen_at": "2024-01-04T18:40:41.520Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "dev@datadoghq.com", + "name": "testaddcloudflareaccountreturnscreatedresponse1704393641" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"cloudflare-accounts\",\"attributes\":{\"email\":\"dev@datadoghq.com\",\"name\":\"testaddcloudflareaccountreturnscreatedresponse1704393641\",\"resources\":[],\"zones\":[]},\"id\":\"baa2079200095466b080d75adfdb32fa\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/cloudflare/accounts/baa2079200095466b080d75adfdb32fa", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Add Cloudflare account returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "frozen_at": "2024-01-03T19:17:37.850Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "new@email", + "name": "testaddcloudflareaccountreturnscreatedresponsewithoptionalfilters1704309457", + "resources": [ + "lb", + "dns" + ], + "zones": [ + "zone-id-1", + "zone-id-2" + ] + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid account. Your Cloudflare configuration is invalid. Impossible to get zones for the account testaddcloudflareaccountreturnscreatedresponsewithoptionalfilters1704309457: API key or email is not in the correct format.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Add Cloudflare account returns \"CREATED\" response with optional filters", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "frozen_at": "2024-01-04T18:40:42.323Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "dev@datadog.com", + "name": "testgetcloudflareaccountreturnsokresponse1704393642", + "resources": [ + "web", + "dns" + ], + "zones": [ + "zone-id-1", + "zone-id-2" + ] + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"cloudflare-accounts\",\"attributes\":{\"name\":\"testgetcloudflareaccountreturnsokresponse1704393642\",\"email\":\"dev@datadog.com\",\"zones\":[\"zone-id-1\",\"zone-id-2\"],\"resources\":[\"web\",\"dns\"]},\"id\":\"88d65a60026254bfaf976a427606c061\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integrations/cloudflare/accounts/88d65a60026254bfaf976a427606c061", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"cloudflare-accounts\",\"attributes\":{\"zones\":[\"zone-id-1\",\"zone-id-2\"],\"email\":\"dev@datadog.com\",\"name\":\"testgetcloudflareaccountreturnsokresponse1704393642\",\"resources\":[\"web\",\"dns\"]},\"id\":\"88d65a60026254bfaf976a427606c061\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/cloudflare/accounts/88d65a60026254bfaf976a427606c061", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get Cloudflare account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "frozen_at": "2024-01-04T18:40:43.242Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "dev@datadog.com", + "name": "testlistcloudflareaccountsreturnsokresponse1704393643", + "resources": [ + "web", + "dns" + ], + "zones": [ + "zone-id-1", + "zone-id-2" + ] + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"cloudflare-accounts\",\"id\":\"032c2a7bec2890a18b9ff810ffbaf789\",\"attributes\":{\"resources\":[\"web\",\"dns\"],\"name\":\"testlistcloudflareaccountsreturnsokresponse1704393643\",\"email\":\"dev@datadog.com\",\"zones\":[\"zone-id-1\",\"zone-id-2\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"cloudflare-accounts\",\"attributes\":{\"resources\":[\"dns\",\"worker\"],\"email\":\"dev@datadoghq.com\",\"zones\":[\"57d151866f1b1d5e4e0057aed6b9f4cb\"],\"name\":\"testing\"},\"id\":\"ae2b1fca515949e5d54fb22b8ed95575\"},{\"type\":\"cloudflare-accounts\",\"attributes\":{\"resources\":[\"web\",\"dns\"],\"email\":\"dev@datadog.com\",\"zones\":[\"zone-id-1\",\"zone-id-2\"],\"name\":\"testlistcloudflareaccountsreturnsokresponse1704393643\"},\"id\":\"032c2a7bec2890a18b9ff810ffbaf789\"},{\"type\":\"cloudflare-accounts\",\"attributes\":{\"resources\":[],\"email\":\"\",\"zones\":[],\"name\":\"testing_2\"},\"id\":\"8222b3d5b803354416362560a64a1725\"},{\"type\":\"cloudflare-accounts\",\"attributes\":{\"resources\":[],\"email\":\"\",\"zones\":[],\"name\":\"cloudflare-test\"},\"id\":\"fe0a70a58b246c3836c665e956f56bab\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/cloudflare/accounts/032c2a7bec2890a18b9ff810ffbaf789", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List Cloudflare accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "frozen_at": "2024-01-04T18:40:44.099Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "dev@datadog.com", + "name": "testupdatecloudflareaccountreturnsbadrequestresponseduetoinvalidapikey1704393644", + "resources": [ + "web", + "dns" + ], + "zones": [ + "zone-id-1", + "zone-id-2" + ] + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"cloudflare-accounts\",\"attributes\":{\"email\":\"dev@datadog.com\",\"name\":\"testupdatecloudflareaccountreturnsbadrequestresponseduetoinvalidapikey1704393644\",\"resources\":[\"web\",\"dns\"],\"zones\":[\"zone-id-1\",\"zone-id-2\"]},\"id\":\"25336f9851edaf58647eec09ce3b636f\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integrations/cloudflare/accounts/25336f9851edaf58647eec09ce3b636f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid account. Your Cloudflare configuration is invalid. Impossible to get zones for the account testupdatecloudflareaccountreturnsbadrequestresponseduetoinvalidapikey1704393644: API key or email is unknown.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/cloudflare/accounts/25336f9851edaf58647eec09ce3b636f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update Cloudflare account returns \"Bad Request\" response due to invalid api key", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "frozen_at": "2024-01-04T18:40:46.262Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "dev@datadog.com", + "name": "testupdatecloudflareaccountreturnsbadrequestresponseduetomissingrequiredemail1704393646", + "resources": [ + "web", + "dns" + ], + "zones": [ + "zone-id-1", + "zone-id-2" + ] + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"cloudflare-accounts\",\"attributes\":{\"zones\":[\"zone-id-1\",\"zone-id-2\"],\"resources\":[\"web\",\"dns\"],\"name\":\"testupdatecloudflareaccountreturnsbadrequestresponseduetomissingrequiredemail1704393646\",\"email\":\"dev@datadog.com\"},\"id\":\"f1d4f10fbad4add4962f2bc1fcb18c36\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey" + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integrations/cloudflare/accounts/f1d4f10fbad4add4962f2bc1fcb18c36", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"{'_schema': ['Email address is required if providing an api key and not an api token.']}\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/cloudflare/accounts/f1d4f10fbad4add4962f2bc1fcb18c36", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update Cloudflare account returns \"Bad Request\" response due to missing required email", + "version": "v2" + }, + { + "feature": "Cloudflare Integration", + "frozen_at": "2024-01-04T18:40:47.476Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "dev@datadog.com", + "name": "testupdatecloudflareaccountreturnsokresponse1704393647", + "resources": [ + "web", + "dns" + ], + "zones": [ + "zone-id-1", + "zone-id-2" + ] + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/cloudflare/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"cloudflare-accounts\",\"attributes\":{\"zones\":[\"zone-id-1\",\"zone-id-2\"],\"resources\":[\"web\",\"dns\"],\"name\":\"testupdatecloudflareaccountreturnsokresponse1704393647\",\"email\":\"dev@datadog.com\"},\"id\":\"6956534375b31b062c809696f3c34ee8\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "fakekey", + "email": "dev@datadoghq.com", + "zones": [ + "zone-id-3" + ] + }, + "type": "cloudflare-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integrations/cloudflare/accounts/6956534375b31b062c809696f3c34ee8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"cloudflare-accounts\",\"attributes\":{\"resources\":[],\"email\":\"dev@datadoghq.com\",\"zones\":[\"zone-id-3\"],\"name\":\"testupdatecloudflareaccountreturnsokresponse1704393647\"},\"id\":\"6956534375b31b062c809696f3c34ee8\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/cloudflare/accounts/6956534375b31b062c809696f3c34ee8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update Cloudflare account returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/confluent-cloud.json b/test-server-data/v2/confluent-cloud.json new file mode 100644 index 0000000000..6b36287013 --- /dev/null +++ b/test-server-data/v2/confluent-cloud.json @@ -0,0 +1,526 @@ +{ + "feature": "Confluent Cloud", + "recordings": [ + { + "feature": "Confluent Cloud", + "frozen_at": "2023-07-03T14:38:40.799Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestAddresourcetoConfluentaccountreturnsOKresponse1688395120", + "api_secret": "test-api-secret", + "resources": [ + { + "id": "test-resource-id", + "resource_type": "kafka", + "tags": [ + "tag1", + "tag2:val2" + ] + } + ], + "tags": [ + "tag1", + "tag2:val2" + ] + }, + "type": "confluent-cloud-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/confluent-cloud/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"confluent-cloud-accounts\",\"attributes\":{\"tags\":[\"tag1\",\"tag2:val2\"],\"resources\":[{\"id\":\"test-resource-id\",\"enable_custom_metrics\":false,\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"api_key\":\"TestAddresourcetoConfluentaccountreturnsOKresponse1688395120\"},\"id\":\"ca66091df9181d4c62d17f0484461a0d\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enable_custom_metrics": false, + "resource_type": "kafka", + "tags": [ + "myTag", + "myTag2:myValue" + ] + }, + "id": "testaddresourcetoconfluentaccountreturnsokresponse1688395120", + "type": "confluent-cloud-resources" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/confluent-cloud/accounts/ca66091df9181d4c62d17f0484461a0d/resources", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"confluent-cloud-resources\",\"attributes\":{\"enable_custom_metrics\":false,\"tags\":[\"mytag\",\"mytag2:myvalue\"],\"resource_type\":\"kafka\"},\"id\":\"testaddresourcetoconfluentaccountreturnsokresponse1688395120\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/confluent-cloud/accounts/ca66091df9181d4c62d17f0484461a0d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Add resource to Confluent account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "frozen_at": "2023-10-16T13:02:15.749Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestDeleteConfluentaccountreturnsOKresponse1697461335", + "api_secret": "test-api-secret", + "resources": [ + { + "id": "test-resource-id", + "resource_type": "kafka", + "tags": [ + "tag1", + "tag2:val2" + ] + } + ], + "tags": [ + "tag1", + "tag2:val2" + ] + }, + "type": "confluent-cloud-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/confluent-cloud/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"confluent-cloud-accounts\",\"attributes\":{\"resources\":[{\"tags\":[\"tag1\",\"tag2:val2\"],\"id\":\"test-resource-id\",\"enable_custom_metrics\":false,\"resource_type\":\"kafka\"}],\"tags\":[\"tag1\",\"tag2:val2\"],\"api_key\":\"TestDeleteConfluentaccountreturnsOKresponse1697461335\"},\"id\":\"ed3f03aa36fdd7ba6b48381d54280e45\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/confluent-cloud/accounts/ed3f03aa36fdd7ba6b48381d54280e45", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/confluent-cloud/accounts/ed3f03aa36fdd7ba6b48381d54280e45", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Account not found not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Confluent account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "frozen_at": "2023-07-03T14:38:41.593Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestGetConfluentaccountreturnsOKresponse1688395121", + "api_secret": "test-api-secret", + "resources": [ + { + "id": "test-resource-id", + "resource_type": "kafka", + "tags": [ + "tag1", + "tag2:val2" + ] + } + ], + "tags": [ + "tag1", + "tag2:val2" + ] + }, + "type": "confluent-cloud-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/confluent-cloud/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"confluent-cloud-accounts\",\"id\":\"8a03a240e4d322d42edf6d4f4654a624\",\"attributes\":{\"resources\":[{\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"],\"enable_custom_metrics\":false,\"id\":\"test-resource-id\"}],\"api_key\":\"TestGetConfluentaccountreturnsOKresponse1688395121\",\"tags\":[\"tag1\",\"tag2:val2\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integrations/confluent-cloud/accounts/8a03a240e4d322d42edf6d4f4654a624", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"confluent-cloud-accounts\",\"attributes\":{\"resources\":[{\"enable_custom_metrics\":false,\"id\":\"test-resource-id\",\"tags\":[\"tag1\",\"tag2:val2\"],\"resource_type\":\"kafka\"}],\"api_key\":\"TestGetConfluentaccountreturnsOKresponse1688395121\",\"tags\":[\"tag1\",\"tag2:val2\"]},\"id\":\"8a03a240e4d322d42edf6d4f4654a624\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/confluent-cloud/accounts/8a03a240e4d322d42edf6d4f4654a624", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get Confluent account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "frozen_at": "2022-10-06T21:02:46.272Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestListConfluentaccountsreturnsOKresponse1665090166", + "api_secret": "test-api-secret", + "resources": [ + { + "id": "test-resource-id", + "resource_type": "kafka", + "tags": [ + "tag1", + "tag2:val2" + ] + } + ], + "tags": [ + "tag1", + "tag2:val2" + ] + }, + "type": "confluent-cloud-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/confluent-cloud/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1665090166\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"45iw6lb8j5\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integrations/confluent-cloud/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"attributes\":{\"api_key\":\"test-api-key3\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"iubtgfayp5\"},{\"attributes\":{\"api_key\":\"Test-List_Confluent_accounts_returns_OK_response-1663015727\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"83wqs4ztwc\"},{\"attributes\":{\"api_key\":\"update-key\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[]},\"type\":\"confluent-cloud-accounts\",\"id\":\"mrwhlq9oyn\"},{\"attributes\":{\"api_key\":\"Test-List_Confluent_accounts_returns_OK_response-1663017017\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"tuwcfwqe3a\"},{\"attributes\":{\"api_key\":\"Test-Update_Confluent_account_returns_OK_response-1663017018\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"bt2li4wmv5\"},{\"attributes\":{\"api_key\":\"Test-List_Confluent_accounts_returns_OK_response-1663017074\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"snrx0cusau\"},{\"attributes\":{\"api_key\":\"Test-Update_Confluent_account_returns_OK_response-1663017075\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"3r136fz38z\"},{\"attributes\":{\"api_key\":\"Test-List_Confluent_accounts_returns_OK_response-1663035571\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"olnygn7t1v\"},{\"attributes\":{\"api_key\":\"Test-Update_Confluent_account_returns_OK_response-1663035572\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"u61jn2zm67\"},{\"attributes\":{\"api_key\":\"testlistconfluentaccountsreturnsokresponse1663035633\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"u0mnbkhpyg\"},{\"attributes\":{\"api_key\":\"testupdateconfluentaccountreturnsokresponse1663035635\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"1qt90nner9\"},{\"attributes\":{\"api_key\":\"testlistconfluentaccountsreturnsokresponse1663040179\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"rn6627go3o\"},{\"attributes\":{\"api_key\":\"testupdateconfluentaccountreturnsokresponse1663040180\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"hkkcrwodz3\"},{\"attributes\":{\"api_key\":\"api-key-test-123\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"m17r8n1brn\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663081412\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"0ubcaq4ack\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663081413\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"csu3ol6ewv\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663091740\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"e8ql5yb6d0\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663091741\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"frgdwzdkc8\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663091761\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"hpv6ewnuew\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663091762\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"19b6yov7hd\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663092165\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"97agj11bf0\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663092166\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[]},\"type\":\"confluent-cloud-accounts\",\"id\":\"kn6kq1i4si\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663092330\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"a8fzei9e85\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663092331\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"5wmpn2sx51\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663092374\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"fb3gmtwadj\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663092374\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"qul0ce8yrg\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663092403\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"9neye26b1h\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663092404\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"xaab9w4b72\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663092495\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"x7en9ipq51\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663092496\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"gl1y005ff1\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663093490\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"4j43efxc7f\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663093491\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"nl8es35l6i\"},{\"attributes\":{\"api_key\":\"TestDeleteresourcefromConfluentaccountreturnsOKresponse1663093498\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"9ccf1xtqtr\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663093499\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"ep3q1okrbl\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663093500\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"rqdlsa4bzf\"},{\"attributes\":{\"api_key\":\"TestDeleteresourcefromConfluentaccountreturnsOKresponse1663093577\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"b27wqbnkq3\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663093578\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"5t6xj8u5i5\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663093579\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"8vogxaeno1\"},{\"attributes\":{\"api_key\":\"TestDeleteresourcefromConfluentaccountreturnsOKresponse1663093596\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"krs4zg884i\"},{\"attributes\":{\"api_key\":\"TestDeleteresourcefromConfluentaccountreturnsOKresponse1663093745\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"9f503olewx\"},{\"attributes\":{\"api_key\":\"TestGetConfluentaccountreturnsOKresponse1663094037\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"be2ywpqpmq\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663094038\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"3uh8kipdh6\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663094039\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"z7rgwzsjgb\"},{\"attributes\":{\"api_key\":\"TestGetConfluentaccountreturnsOKresponse1663094133\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"mqq2s2dphs\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663094134\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"t3rjzkgkog\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663094135\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"6dbd2ohnq1\"},{\"attributes\":{\"api_key\":\"TestGetConfluentaccountreturnsOKresponse1663094313\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"r3z2a4u9r0\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663094314\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"rc2ezuf80r\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663094315\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"xttgp0v4l1\"},{\"attributes\":{\"api_key\":\"TestGetConfluentaccountreturnsOKresponse1663094436\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"6w0y04l7pj\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663094437\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"feibu0b5f3\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663094438\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"nb7swpr8g8\"},{\"attributes\":{\"api_key\":\"TestGetConfluentaccountreturnsOKresponse1663180425\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"by22udueep\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1663180426\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"h1s9rgj73z\"},{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1663180426\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"izxxm263fi\"},{\"attributes\":{\"api_key\":\"TestListConfluentaccountsreturnsOKresponse1665090166\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"45iw6lb8j5\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/confluent-cloud/accounts/45iw6lb8j5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List Confluent accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Confluent Cloud", + "frozen_at": "2022-10-06T21:02:46.928Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestUpdateConfluentaccountreturnsOKresponse1665090166", + "api_secret": "test-api-secret", + "resources": [ + { + "id": "test-resource-id", + "resource_type": "kafka", + "tags": [ + "tag1", + "tag2:val2" + ] + } + ], + "tags": [ + "tag1", + "tag2:val2" + ] + }, + "type": "confluent-cloud-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/confluent-cloud/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1665090166\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"tag1\",\"tag2:val2\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"ytthkwvtde\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestUpdateConfluentaccountreturnsOKresponse1665090166", + "api_secret": "update-secret", + "tags": [ + "updated_tag:val" + ] + }, + "type": "confluent-cloud-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integrations/confluent-cloud/accounts/ytthkwvtde", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"api_key\":\"TestUpdateConfluentaccountreturnsOKresponse1665090166\",\"resources\":[{\"id\":\"test-resource-id\",\"resource_type\":\"kafka\",\"tags\":[\"tag1\",\"tag2:val2\"]}],\"tags\":[\"updated_tag:val\"]},\"type\":\"confluent-cloud-accounts\",\"id\":\"ytthkwvtde\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/confluent-cloud/accounts/ytthkwvtde", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update Confluent account returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/container-images.json b/test-server-data/v2/container-images.json new file mode 100644 index 0000000000..d721e32054 --- /dev/null +++ b/test-server-data/v2/container-images.json @@ -0,0 +1,174 @@ +{ + "feature": "Container Images", + "recordings": [ + { + "feature": "Container Images", + "frozen_at": "2023-10-11T09:51:52.011Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/container_images", + "query": [ + [ + "group_by", + "short_image" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": [{\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 641013}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 318935}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=hort_image:worker\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 183916}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 179844}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 179662}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 81059}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 42254}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 22692}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 18684}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 17610}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 16188}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 15532}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 14965}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 14727}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 13803}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 13724}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 12730}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 12702}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 12519}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 12500}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 12441}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 12359}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 11952}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 11949}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 11477}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 11265}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 10888}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 10801}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 10697}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 10576}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 10574}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 10449}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 10110}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9981}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9960}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9947}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9943}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9875}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9870}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9742}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9613}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9450}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9395}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9372}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9371}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9364}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9363}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9344}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9341}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9295}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9270}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9205}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9129}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9059}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 9037}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8951}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8697}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8693}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8587}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8568}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8450}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8385}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8321}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8292}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8263}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8240}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8219}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8218}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8194}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8179}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8156}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 8110}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7938}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7901}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7848}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7785}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7647}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7631}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7573}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7565}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7498}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7402}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7382}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7312}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7298}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7151}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7059}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7045}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7024}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 7021}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6998}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6907}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6862}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6837}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6726}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6697}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6679}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6670}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6618}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}, {\"type\": \"container_image_group\", \"attributes\": {\"name\": \"test_name\", \"tags\": {\"short_image\": \"test_short_image\"}, \"count\": 6596}, \"relationships\": {\"container_images\": {\"links\": {\"related\": \"https://api.datadoghq.com/api/v2/container_images?filter[tags]=short_image:image\"}, \"data\": []}}, \"id\": \"test_id\"}], \"meta\": {\"pagination\": {\"cursor\": \"\", \"prev_cursor\": null, \"next_cursor\": \"\", \"limit\": 100, \"type\": \"cursor_limit\", \"total\": 0}}, \"links\": {\"self\": \"https://api.datadoghq.com/api/v2/container_images?group_by=short_image\", \"last\": null, \"next\": null, \"prev\": null, \"first\": \"https://api.datadoghq.com/api/v2/container_images?group_by=short_image&page[size]=100\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all Container Image groups returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Container Images", + "frozen_at": "2023-10-11T09:43:43.733Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/container_images", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": [{\"type\": \"container_image\", \"id\": \"test_id\", \"attributes\": {\"name\": \"test_name\", \"short_image\": \"test_short_image\", \"image_tags\": [\"test_image_tags\"], \"registry\": \"test_registry\", \"repository\": \"argo\", \"repo_digest\": \"test_repo_digest\", \"sizes\": [41802389], \"published_at\": \"2021-05-19T19:33:53Z\", \"tags\": [\"test_tags\"], \"container_count\": 0, \"os_names\": [], \"os_versions\": [], \"os_architectures\": [], \"images_built_at\": [], \"sources\": [\"aws_ecr\"], \"image_flavors\": []}}, {\"type\": \"container_image\", \"id\": \"test_id\", \"attributes\": {\"name\": \"test_name\", \"short_image\": \"test_short_image\", \"image_tags\": [\"test_image_tags\"], \"registry\": \"test_registry\", \"repository\": \"argo\", \"repo_digest\": \"test_repo_digest\", \"sizes\": [41808952], \"published_at\": \"2021-05-19T20:09:12Z\", \"tags\": [\"test_tags\"], \"container_count\": 0, \"os_names\": [], \"os_versions\": [], \"os_architectures\": [], \"images_built_at\": [], \"sources\": [\"aws_ecr\"], \"image_flavors\": []}}], \"meta\": {\"pagination\": {\"cursor\": \"\", \"prev_cursor\": null, \"next_cursor\": \"bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OjNlYWJjNzMwY2RiOTBiMWQ1N2QwNTkyNzJkZWQ3OWQ5NzZkNzk1ZTk0NzM0M2Q0NWFjMjA5MGViZjVmY2I2MTk=\", \"limit\": 2, \"type\": \"cursor_limit\", \"total\": 5252447}}, \"links\": {\"self\": \"https://api.datadoghq.com/api/v2/container_images\", \"last\": null, \"next\": \"https://api.datadoghq.com/api/v2/container_images?page[cursor]=bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OjNlYWJjNzMwY2RiOTBiMWQ1N2QwNTkyNzJkZWQ3OWQ5NzZkNzk1ZTk0NzM0M2Q0NWFjMjA5MGViZjVmY2I2MTk=\", \"prev\": null, \"first\": \"https://api.datadoghq.com/api/v2/container_images\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all Container Images returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Container Images", + "frozen_at": "2023-10-11T11:13:13.446Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/container_images", + "query": [ + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": [{\"type\": \"container_image\", \"id\": \"test_id\", \"attributes\": {\"name\": \"test_name\", \"short_image\": \"test_short_image\", \"image_tags\": [\"test_image_tags\"], \"registry\": \"test_registry\", \"repository\": \"argo\", \"repo_digest\": \"test_repo_digest\", \"sizes\": [41802389], \"published_at\": \"2021-05-19T19:33:53Z\", \"tags\": [\"test_tags\"], \"container_count\": 0, \"os_names\": [], \"os_versions\": [], \"os_architectures\": [], \"images_built_at\": [], \"sources\": [\"aws_ecr\"], \"image_flavors\": []}}, {\"type\": \"container_image\", \"id\": \"test_id\", \"attributes\": {\"name\": \"test_name\", \"short_image\": \"test_short_image\", \"image_tags\": [\"test_image_tags\"], \"registry\": \"test_registry\", \"repository\": \"argo\", \"repo_digest\": \"test_repo_digest\", \"sizes\": [41808952], \"published_at\": \"2021-05-19T20:09:12Z\", \"tags\": [\"test_tags\"], \"container_count\": 0, \"os_names\": [], \"os_versions\": [], \"os_architectures\": [], \"images_built_at\": [], \"sources\": [\"aws_ecr\"], \"image_flavors\": []}}], \"meta\": {\"pagination\": {\"cursor\": \"\", \"prev_cursor\": null, \"next_cursor\": \"bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OjNlYWJjNzMwY2RiOTBiMWQ1N2QwNTkyNzJkZWQ3OWQ5NzZkNzk1ZTk0NzM0M2Q0NWFjMjA5MGViZjVmY2I2MTk=\", \"limit\": 2, \"type\": \"cursor_limit\", \"total\": 5184864}}, \"links\": {\"self\": \"https://api.datadoghq.com/api/v2/container_images?page%5Bsize%5D=2\", \"last\": null, \"next\": \"https://api.datadoghq.com/api/v2/container_images?page[cursor]=bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OjNlYWJjNzMwY2RiOTBiMWQ1N2QwNTkyNzJkZWQ3OWQ5NzZkNzk1ZTk0NzM0M2Q0NWFjMjA5MGViZjVmY2I2MTk=&page[size]=2\", \"prev\": null, \"first\": \"https://api.datadoghq.com/api/v2/container_images?page[size]=2\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/container_images", + "query": [ + [ + "page[cursor]", + "bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OjNlYWJjNzMwY2RiOTBiMWQ1N2QwNTkyNzJkZWQ3OWQ5NzZkNzk1ZTk0NzM0M2Q0NWFjMjA5MGViZjVmY2I2MTk=" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": [{\"type\": \"container_image\", \"id\": \"test_id\", \"attributes\": {\"name\": \"test_name\", \"short_image\": \"test_short_image\", \"image_tags\": [\"test_image_tags\"], \"registry\": \"test_registry\", \"repository\": \"argo\", \"repo_digest\": \"test_repo_digest\", \"sizes\": [41808952], \"published_at\": \"2021-05-19T19:33:23Z\", \"tags\": [\"test_tags\"], \"container_count\": 0, \"os_names\": [], \"os_versions\": [], \"os_architectures\": [], \"images_built_at\": [], \"sources\": [\"aws_ecr\"], \"image_flavors\": []}}], \"meta\": {\"pagination\": {\"cursor\": \"bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OjNlYWJjNzMwY2RiOTBiMWQ1N2QwNTkyNzJkZWQ3OWQ5NzZkNzk1ZTk0NzM0M2Q0NWFjMjA5MGViZjVmY2I2MTk=\", \"prev_cursor\": null, \"next_cursor\": \"bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OmZmMTUxZWYyNDZkN2I0ZDZiOGZlMzE5MjNiMjk4ZDg0ZThmMjA2MzI3MDFiYmI2ZWQ5N2ZjYzU4YTAxNTBmODA=\", \"limit\": 2, \"type\": \"cursor_limit\", \"total\": 5185322}}, \"links\": {\"self\": \"https://api.datadoghq.com/api/v2/container_images?page%5Bsize%5D=2&page%5Bcursor%5D=bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OjNlYWJjNzMwY2RiOTBiMWQ1N2QwNTkyNzJkZWQ3OWQ5NzZkNzk1ZTk0NzM0M2Q0NWFjMjA5MGViZjVmY2I2MTk%3D\", \"last\": null, \"next\": \"https://api.datadoghq.com/api/v2/container_images?page[cursor]=bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OmZmMTUxZWYyNDZkN2I0ZDZiOGZlMzE5MjNiMjk4ZDg0ZThmMjA2MzI3MDFiYmI2ZWQ5N2ZjYzU4YTAxNTBmODA=&page[size]=2\", \"prev\": null, \"first\": \"https://api.datadoghq.com/api/v2/container_images?page[size]=2\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/container_images", + "query": [ + [ + "page[cursor]", + "bmFtZTowMTM5MTA3MzM1MTIuZGtyLmVjci51cy1lYXN0LTEuYW1hem9uYXdzLmNvbS9hcmdvfGlkOjAxMzkxMDczMzUxMi5ka3IuZWNyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tL2FyZ29Ac2hhMjU2OmZmMTUxZWYyNDZkN2I0ZDZiOGZlMzE5MjNiMjk4ZDg0ZThmMjA2MzI3MDFiYmI2ZWQ5N2ZjYzU4YTAxNTBmODA=" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all Container Images returns \"OK\" response with pagination", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/containers.json b/test-server-data/v2/containers.json new file mode 100644 index 0000000000..11c52e8b78 --- /dev/null +++ b/test-server-data/v2/containers.json @@ -0,0 +1,174 @@ +{ + "feature": "Containers", + "recordings": [ + { + "feature": "Containers", + "frozen_at": "2023-10-16T15:58:19.882Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/containers", + "query": [ + [ + "group_by", + "short_image" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": [{\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 123, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}, {\"type\": \"container_group\", \"id\": \"test_id\", \"attributes\": {\"count\": 1, \"tags\": {\"short_image\": \"test_short_image\"}}, \"relationships\": {\"containers\": {\"links\": {\"related\": \"test_related\"}, \"data\": []}}}], \"meta\": {\"pagination\": {\"cursor\": \"\", \"prev_cursor\": null, \"next_cursor\": \"\", \"limit\": 100, \"type\": \"cursor_limit\", \"total\": 0}}, \"links\": {\"self\": \"https://api.datadoghq.com/api/v2/containers?group_by=short_image\", \"last\": null, \"next\": null, \"prev\": null, \"first\": \"https://api.datadoghq.com/api/v2/containers?group_by=short_image&page[size]=100\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get All Container groups returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Containers", + "frozen_at": "2023-10-16T15:45:21.038Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/containers", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"container\",\"id\":\"15e90400bf66f26f4e7d3098406c30e11e2bc921\",\"attributes\":{\"name\":\"test_name\",\"created_at\":\"2023-10-12T13:46:51\",\"started_at\":\"2023-10-12T13:46:51\",\"state\":\"running\",\"container_id\":\"22f5bcc1-492a-435c-6d45-889e\",\"host\":\"compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"image_name\":\"\",\"image_tags\":null,\"image_digest\":null,\"tags\":[\"app_guid:c3e77ef9-1248-4ef8-aa75-9bf063ad1512\",\"app_id:c3e77ef9-1248-4ef8-aa75-9bf063ad1512\",\"app_instance_guid:22f5bcc1-492a-435c-6d45-889e\",\"app_instance_index:0\",\"app_name:go-sample-app-modebeige\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-df4d3b7647b663c19610\",\"bosh_id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-df4d3b7647b663c19610\",\"cf-df4d3b7647b663c19610-compute\",\"cloudfoundry\",\"compute\",\"container_name:go-sample-app-modebeige_0\",\"created_at:2023-10-09t08:30:42z\",\"deployment:cf-df4d3b7647b663c19610\",\"director:p-bosh\",\"env:pcf-modebeige\",\"foo:bar\",\"host:compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"index:0\",\"index:6c2718cc-dfd1-4768-9237-08132d11122f\",\"instance-id:3340011639055189196\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-6dd9ae88-c203-463e-580e-26a7b561b870.c.cf-platform-engineering-cipp2.internal\",\"ip:10.0.4.8\",\"job:compute\",\"label_key:label_value\",\"metadata_key:metadata_value\",\"name:compute/6c2718cc-dfd1-4768-9237-08132d11122f\",\"numeric_project_id:946413340424\",\"org_id:9f4bffd9-6234-49dd-bc4e-d0282a7cf333\",\"org_name:Org 1\",\"p-bosh\",\"p-bosh-cf-df4d3b7647b663c19610\",\"p-bosh-cf-df4d3b7647b663c19610-compute\",\"pcf-modebeige\",\"project:cf-platform-engineering-cipp2\",\"service:go-sample-app-modebeige\",\"sidecar_count:1\",\"sidecar_present:true\",\"space_id:6c41b5e8-8ed8-465f-902a-48e03b465ffe\",\"space_name:Space 1\",\"user_data:_server_:_name_:_vm-6dd9ae88-c203-463e-580e-26a7b561b870_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"version:1.0.0\",\"zone:us-central1-f\"]}},{\"type\":\"container\",\"id\":\"15e90400f5a7fd8072ebcc2e7eadb58c7acf1fe6\",\"attributes\":{\"name\":\"python-sample-app-modebeige_0\",\"created_at\":\"2023-10-12T13:46:51\",\"started_at\":\"2023-10-12T13:46:51\",\"state\":\"running\",\"container_id\":\"288bdf1c-ee25-43a2-6470-11e0\",\"host\":\"compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"image_name\":\"\",\"image_tags\":null,\"image_digest\":null,\"tags\":[\"app_guid:3d575664-cced-4000-b2fd-2ab4199722c7\",\"app_id:3d575664-cced-4000-b2fd-2ab4199722c7\",\"app_instance_guid:288bdf1c-ee25-43a2-6470-11e0\",\"app_instance_index:0\",\"app_name:python-sample-app-modebeige\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-df4d3b7647b663c19610\",\"bosh_id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-df4d3b7647b663c19610\",\"cf-df4d3b7647b663c19610-compute\",\"cloudfoundry\",\"compute\",\"container_name:python-sample-app-modebeige_0\",\"created_at:2023-10-09t08:30:42z\",\"deployment:cf-df4d3b7647b663c19610\",\"director:p-bosh\",\"env:pcf-modebeige\",\"foo:bar\",\"host:compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"index:0\",\"index:6c2718cc-dfd1-4768-9237-08132d11122f\",\"instance-id:3340011639055189196\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-6dd9ae88-c203-463e-580e-26a7b561b870.c.cf-platform-engineering-cipp2.internal\",\"ip:10.0.4.8\",\"job:compute\",\"label_key:label_value\",\"metadata_key:metadata_value\",\"name:compute/6c2718cc-dfd1-4768-9237-08132d11122f\",\"numeric_project_id:946413340424\",\"org_id:9f4bffd9-6234-49dd-bc4e-d0282a7cf333\",\"org_name:Org 1\",\"p-bosh\",\"p-bosh-cf-df4d3b7647b663c19610\",\"p-bosh-cf-df4d3b7647b663c19610-compute\",\"pcf-modebeige\",\"project:cf-platform-engineering-cipp2\",\"service:python-sample-app-modebeige\",\"sidecar_count:1\",\"sidecar_present:true\",\"space_id:6c41b5e8-8ed8-465f-902a-48e03b465ffe\",\"space_name:Space 1\",\"user_data:_server_:_name_:_vm-6dd9ae88-c203-463e-580e-26a7b561b870_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"version:1.0.0\",\"zone:us-central1-f\"]}}],\"meta\":{\"pagination\":{\"cursor\":\"\",\"prev_cursor\":null,\"next_cursor\":\"c3RhcnRlZDoxNjk3NDY2MDI4MDAwLjAwMDAwMHxpZC5yYXc6M2U0MTU3ZjgtZjdmNC00OTdjLTRmNWMtMzk0Zg==\",\"limit\":1000,\"type\":\"cursor_limit\",\"total\":10}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/containers\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/containers?page[cursor]=c3RhcnRlZDoxNjk3NDY2MDI4MDAwLjAwMDAwMHxpZC5yYXc6M2U0MTU3ZjgtZjdmNC00OTdjLTRmNWMtMzk0Zg==&page[size]=1000\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/containers?page[size]=1000\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get All Containers returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Containers", + "frozen_at": "2023-10-16T16:01:59.143Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/containers", + "query": [ + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"container\",\"id\":\"15e90400bf66f26f4e7d3098406c30e11e2bc921\",\"attributes\":{\"name\":\"go-sample-app-modebeige_0\",\"created_at\":\"2023-10-12T13:46:51\",\"started_at\":\"2023-10-12T13:46:51\",\"state\":\"running\",\"container_id\":\"22f5bcc1-492a-435c-6d45-889e\",\"host\":\"compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"image_name\":\"\",\"image_tags\":null,\"image_digest\":null,\"tags\":[\"app_guid:c3e77ef9-1248-4ef8-aa75-9bf063ad1512\",\"app_id:c3e77ef9-1248-4ef8-aa75-9bf063ad1512\",\"app_instance_guid:22f5bcc1-492a-435c-6d45-889e\",\"app_instance_index:0\",\"app_name:go-sample-app-modebeige\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-df4d3b7647b663c19610\",\"bosh_id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-df4d3b7647b663c19610\",\"cf-df4d3b7647b663c19610-compute\",\"cloudfoundry\",\"compute\",\"container_name:go-sample-app-modebeige_0\",\"created_at:2023-10-09t08:30:42z\",\"deployment:cf-df4d3b7647b663c19610\",\"director:p-bosh\",\"env:pcf-modebeige\",\"foo:bar\",\"host:compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"index:0\",\"index:6c2718cc-dfd1-4768-9237-08132d11122f\",\"instance-id:3340011639055189196\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-6dd9ae88-c203-463e-580e-26a7b561b870.c.cf-platform-engineering-cipp2.internal\",\"ip:10.0.4.8\",\"job:compute\",\"label_key:label_value\",\"metadata_key:metadata_value\",\"name:compute/6c2718cc-dfd1-4768-9237-08132d11122f\",\"numeric_project_id:946413340424\",\"org_id:9f4bffd9-6234-49dd-bc4e-d0282a7cf333\",\"org_name:Org 1\",\"p-bosh\",\"p-bosh-cf-df4d3b7647b663c19610\",\"p-bosh-cf-df4d3b7647b663c19610-compute\",\"pcf-modebeige\",\"project:cf-platform-engineering-cipp2\",\"service:go-sample-app-modebeige\",\"sidecar_count:1\",\"sidecar_present:true\",\"space_id:6c41b5e8-8ed8-465f-902a-48e03b465ffe\",\"space_name:Space 1\",\"user_data:_server_:_name_:_vm-6dd9ae88-c203-463e-580e-26a7b561b870_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"version:1.0.0\",\"zone:us-central1-f\"]}},{\"type\":\"container\",\"id\":\"15e90400f5a7fd8072ebcc2e7eadb58c7acf1fe6\",\"attributes\":{\"name\":\"python-sample-app-modebeige_0\",\"created_at\":\"2023-10-12T13:46:51\",\"started_at\":\"2023-10-12T13:46:51\",\"state\":\"running\",\"container_id\":\"288bdf1c-ee25-43a2-6470-11e0\",\"host\":\"compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"image_name\":\"\",\"image_tags\":null,\"image_digest\":null,\"tags\":[\"app_guid:3d575664-cced-4000-b2fd-2ab4199722c7\",\"app_id:3d575664-cced-4000-b2fd-2ab4199722c7\",\"app_instance_guid:288bdf1c-ee25-43a2-6470-11e0\",\"app_instance_index:0\",\"app_name:python-sample-app-modebeige\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-df4d3b7647b663c19610\",\"bosh_id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-df4d3b7647b663c19610\",\"cf-df4d3b7647b663c19610-compute\",\"cloudfoundry\",\"compute\",\"container_name:python-sample-app-modebeige_0\",\"created_at:2023-10-09t08:30:42z\",\"deployment:cf-df4d3b7647b663c19610\",\"director:p-bosh\",\"env:pcf-modebeige\",\"foo:bar\",\"host:compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"index:0\",\"index:6c2718cc-dfd1-4768-9237-08132d11122f\",\"instance-id:3340011639055189196\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-6dd9ae88-c203-463e-580e-26a7b561b870.c.cf-platform-engineering-cipp2.internal\",\"ip:10.0.4.8\",\"job:compute\",\"label_key:label_value\",\"metadata_key:metadata_value\",\"name:compute/6c2718cc-dfd1-4768-9237-08132d11122f\",\"numeric_project_id:946413340424\",\"org_id:9f4bffd9-6234-49dd-bc4e-d0282a7cf333\",\"org_name:Org 1\",\"p-bosh\",\"p-bosh-cf-df4d3b7647b663c19610\",\"p-bosh-cf-df4d3b7647b663c19610-compute\",\"pcf-modebeige\",\"project:cf-platform-engineering-cipp2\",\"service:python-sample-app-modebeige\",\"sidecar_count:1\",\"sidecar_present:true\",\"space_id:6c41b5e8-8ed8-465f-902a-48e03b465ffe\",\"space_name:Space 1\",\"user_data:_server_:_name_:_vm-6dd9ae88-c203-463e-580e-26a7b561b870_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"version:1.0.0\",\"zone:us-central1-f\"]}}],\"meta\":{\"pagination\":{\"cursor\":\"\",\"prev_cursor\":null,\"next_cursor\":\"c3RhcnRlZDoxNjk3MTE4NDExMDAwLjAwMDAwMHxpZC5yYXc6Mjg4YmRmMWMtZWUyNS00M2EyLTY0NzAtMTFlMA==\",\"limit\":2,\"type\":\"cursor_limit\",\"total\":10}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/containers?page%5Bsize%5D=2\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/containers?page[cursor]=c3RhcnRlZDoxNjk3MTE4NDExMDAwLjAwMDAwMHxpZC5yYXc6Mjg4YmRmMWMtZWUyNS00M2EyLTY0NzAtMTFlMA==&page[size]=2\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/containers?page[size]=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/containers", + "query": [ + [ + "page[cursor]", + "c3RhcnRlZDoxNjk3MTE4NDExMDAwLjAwMDAwMHxpZC5yYXc6Mjg4YmRmMWMtZWUyNS00M2EyLTY0NzAtMTFlMA==" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"container\",\"id\":\"15e90400d72ce956da898384526fb3411a96ac48\",\"attributes\":{\"name\":\"java-sample-app-modebeige_0\",\"created_at\":\"2023-10-12T13:46:51\",\"started_at\":\"2023-10-12T13:46:51\",\"state\":\"running\",\"container_id\":\"5b2a80d0-da17-4e9b-4260-d0e1\",\"host\":\"compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"image_name\":\"\",\"image_tags\":null,\"image_digest\":null,\"tags\":[\"app_guid:cda17465-f9b8-4577-b53a-57a161a1326b\",\"app_id:cda17465-f9b8-4577-b53a-57a161a1326b\",\"app_instance_guid:5b2a80d0-da17-4e9b-4260-d0e1\",\"app_instance_index:0\",\"app_name:java-sample-app-modebeige\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-df4d3b7647b663c19610\",\"bosh_id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-df4d3b7647b663c19610\",\"cf-df4d3b7647b663c19610-compute\",\"cloudfoundry\",\"compute\",\"container_name:java-sample-app-modebeige_0\",\"created_at:2023-10-09t08:30:42z\",\"deployment:cf-df4d3b7647b663c19610\",\"director:p-bosh\",\"env:pcf-modebeige\",\"foo:bar\",\"host:compute-0-6c2718cc-dfd1-4768-9237-08132d11122f\",\"id:6c2718cc-dfd1-4768-9237-08132d11122f\",\"index:0\",\"index:6c2718cc-dfd1-4768-9237-08132d11122f\",\"instance-id:3340011639055189196\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-6dd9ae88-c203-463e-580e-26a7b561b870.c.cf-platform-engineering-cipp2.internal\",\"ip:10.0.4.8\",\"job:compute\",\"label_key:label_value\",\"metadata_key:metadata_value\",\"name:compute/6c2718cc-dfd1-4768-9237-08132d11122f\",\"numeric_project_id:946413340424\",\"org_id:9f4bffd9-6234-49dd-bc4e-d0282a7cf333\",\"org_name:Org 1\",\"p-bosh\",\"p-bosh-cf-df4d3b7647b663c19610\",\"p-bosh-cf-df4d3b7647b663c19610-compute\",\"pcf-modebeige\",\"project:cf-platform-engineering-cipp2\",\"service:java-sample-app-modebeige\",\"sidecar_count:1\",\"sidecar_present:true\",\"space_id:6c41b5e8-8ed8-465f-902a-48e03b465ffe\",\"space_name:Space 1\",\"user_data:_server_:_name_:_vm-6dd9ae88-c203-463e-580e-26a7b561b870_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"version:1.0.0\",\"zone:us-central1-f\"]}}],\"meta\":{\"pagination\":{\"cursor\":\"c3RhcnRlZDoxNjk3MTE4NDExMDAwLjAwMDAwMHxpZC5yYXc6Mjg4YmRmMWMtZWUyNS00M2EyLTY0NzAtMTFlMA==\",\"prev_cursor\":null,\"next_cursor\":\"c3RhcnRlZDoxNjk3MTE4NDExMDAwLjAwMDAwMHxpZC5yYXc6ODY4OWY2ODUtZTQ0MS00ODJjLTYwNDMtNWQ5ZA==\",\"limit\":2,\"type\":\"cursor_limit\",\"total\":10}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/containers?page%5Bsize%5D=2&page%5Bcursor%5D=c3RhcnRlZDoxNjk3MTE4NDExMDAwLjAwMDAwMHxpZC5yYXc6Mjg4YmRmMWMtZWUyNS00M2EyLTY0NzAtMTFlMA%3D%3D\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/containers?page[cursor]=c3RhcnRlZDoxNjk3MTE4NDExMDAwLjAwMDAwMHxpZC5yYXc6ODY4OWY2ODUtZTQ0MS00ODJjLTYwNDMtNWQ5ZA==&page[size]=2\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/containers?page[size]=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/containers", + "query": [ + [ + "page[cursor]", + "c3RhcnRlZDoxNjk3MTE4NDExMDAwLjAwMDAwMHxpZC5yYXc6ODY4OWY2ODUtZTQ0MS00ODJjLTYwNDMtNWQ5ZA==" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get All Containers returns \"OK\" response with pagination", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/csm-agents.json b/test-server-data/v2/csm-agents.json new file mode 100644 index 0000000000..a2f2d90f6b --- /dev/null +++ b/test-server-data/v2/csm-agents.json @@ -0,0 +1,69 @@ +{ + "feature": "CSM Agents", + "recordings": [ + { + "feature": "CSM Agents", + "frozen_at": "2024-12-13T17:22:57.344Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/csm/onboarding/agents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"f3087801a44eba3c2ea706e873aee9e4\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.59.1\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":[\"pcf-vane-3512666\"],\"host_id\":29630727754,\"hostname\":\"datadog-cluster-agent-0-af63a3e6-4a25-4def-83a4-8754d185b3ef\",\"install_method_installer_version\":\"\",\"install_method_tool\":\"undefined\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}},{\"id\":\"d66d3bc7b9d4273183431b501ef33d86\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.59.1\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":[\"pcf-vane-3512666\"],\"host_id\":29623236313,\"hostname\":\"database-0-e7b70a7b-4199-4920-a8e3-62f221819522\",\"install_method_installer_version\":\"\",\"install_method_tool\":\"undefined\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}},{\"id\":\"c8eca433902d29dd748f93e413eb2a9d\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.59.1\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":[\"pcf-farm-3522782\"],\"host_id\":29722803807,\"hostname\":\"router-0-1bf8fdd0-bbc2-4cf3-8c7c-c1605bafa9bd\",\"install_method_installer_version\":\"\",\"install_method_tool\":\"undefined\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}},{\"id\":\"c6009fcea425da0722eeefd58d95ae6e\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.59.1\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":[\"pcf-vane-3512666\"],\"host_id\":29623808723,\"hostname\":\"compute-0-abf8a42e-5338-44e5-8048-658415893f3c\",\"install_method_installer_version\":\"\",\"install_method_tool\":\"undefined\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}},{\"id\":\"b5684ca6ace0e5eb757124a1bce8ad13\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.59.1\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":[\"pcf-nook-3513764\"],\"host_id\":29671027855,\"hostname\":\"database-0-805a7570-d3cf-4acc-97d8-c40ac88df896\",\"install_method_installer_version\":\"\",\"install_method_tool\":\"undefined\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}},{\"id\":\"b2432c7f30596064f765d9f2b400299e\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.59.1\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":[\"pcf-vane-3512666\"],\"host_id\":29623289233,\"hostname\":\"blobstore-0-2d6429ae-61a4-4d6d-a1be-1e6c20711d62\",\"install_method_installer_version\":\"\",\"install_method_tool\":\"undefined\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}},{\"id\":\"b18cbc65f97d10e2db319de9664e8136\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.59.1\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":[\"pcf-vane-3512666\"],\"host_id\":29623905136,\"hostname\":\"router-0-f84247ea-89db-459f-8db9-e19faaf118b9\",\"install_method_installer_version\":\"\",\"install_method_tool\":\"undefined\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}},{\"id\":\"a99fccb5f6f726754282ea7ff84269c3\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.62.0-devel+git.319.c819811\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":null,\"host_id\":15240413136,\"hostname\":\"comp-xctp773fw9\",\"install_method_installer_version\":\"docker\",\"install_method_tool\":\"docker\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}},{\"id\":\"a57d21e013a51ea0a3881ad7d4f1d7d1\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.59.1\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":[\"pcf-vane-3512666\"],\"host_id\":29630585934,\"hostname\":\"datadog-firehose-nozzle-0-d3f355d3-2839-441d-884b-9e7ee6c248a6\",\"install_method_installer_version\":\"\",\"install_method_tool\":\"undefined\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}},{\"id\":\"a43d2a3241ca97359058507a36800089\",\"type\":\"datadog_agent\",\"attributes\":{\"agent_version\":\"7.59.1\",\"aws_fargate\":\"\",\"cluster_name\":[\"\"],\"ecs_fargate_task_arn\":\"\",\"envs\":[\"pcf-nook-3513764\"],\"host_id\":29700921282,\"hostname\":\"datadog-firehose-nozzle-0-451fe766-caa2-4fb7-9198-076d2e1ef872\",\"install_method_installer_version\":\"\",\"install_method_tool\":\"undefined\",\"is_csm_vm_containers_enabled\":false,\"is_csm_vm_hosts_enabled\":false,\"is_cspm_enabled\":false,\"is_cws_enabled\":false,\"is_cws_remote_configuration_enabled\":true,\"is_remote_configuration_enabled\":true,\"os\":\"GNU/Linux\"}}],\"meta\":{\"total_filtered\":24,\"page_index\":0,\"page_size\":10}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all CSM Agents returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Agents", + "frozen_at": "2024-12-13T17:22:57.772Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/csm/onboarding/serverless/agents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"total_filtered\":0,\"page_index\":0,\"page_size\":10}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all CSM Serverless Agents returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/csm-coverage-analysis.json b/test-server-data/v2/csm-coverage-analysis.json new file mode 100644 index 0000000000..9c553ca4fc --- /dev/null +++ b/test-server-data/v2/csm-coverage-analysis.json @@ -0,0 +1,100 @@ +{ + "feature": "CSM Coverage Analysis", + "recordings": [ + { + "feature": "CSM Coverage Analysis", + "frozen_at": "2024-12-19T17:17:10.296Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/csm/onboarding/coverage_analysis/cloud_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"type\":\"get_cloud_accounts_coverage_analysis_response_public_v0\",\"attributes\":{\"aws_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":4,\"total_resources_count\":10,\"coverage\":0.4},\"azure_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":2,\"total_resources_count\":6,\"coverage\":0.3333333333333333},\"gcp_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":2,\"total_resources_count\":4,\"coverage\":0.5},\"org_id\":321813,\"total_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":8,\"total_resources_count\":20,\"coverage\":0.4}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the CSM Cloud Accounts Coverage Analysis returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Coverage Analysis", + "frozen_at": "2024-12-19T17:17:10.704Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/csm/onboarding/coverage_analysis/hosts_and_containers", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"type\":\"get_hosts_and_containers_coverage_analysis_response_public_v0\",\"attributes\":{\"cspm_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":0,\"total_resources_count\":9,\"coverage\":0},\"cws_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":0,\"total_resources_count\":9,\"coverage\":0},\"org_id\":321813,\"total_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":0,\"total_resources_count\":9,\"coverage\":0},\"vm_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":0,\"total_resources_count\":0}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the CSM Hosts and Containers Coverage Analysis returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Coverage Analysis", + "frozen_at": "2024-12-19T17:17:11.235Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/csm/onboarding/coverage_analysis/serverless", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"type\":\"get_serverless_coverage_analysis_response_public_v0\",\"attributes\":{\"cws_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":0,\"total_resources_count\":0},\"org_id\":0,\"total_coverage\":{\"partially_configured_resources_count\":0,\"configured_resources_count\":0,\"total_resources_count\":0}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the CSM Serverless Coverage Analysis returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/csm-threats.json b/test-server-data/v2/csm-threats.json new file mode 100644 index 0000000000..91de374814 --- /dev/null +++ b/test-server-data/v2/csm-threats.json @@ -0,0 +1,2622 @@ +{ + "feature": "CSM Threats", + "recordings": [ + { + "feature": "CSM Threats", + "frozen_at": "2025-05-27T10:34:46.635Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testcreateaworkloadprotectionagentruleus1fedreturnsbadrequestresponse1748342086" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"tit-1qd-6up\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTags\":[\"env:staging\"],\"monitoringRulesCount\":225,\"name\":\"testcreateaworkloadprotectionagentruleus1fedreturnsbadrequestresponse1748342086\",\"policyVersion\":\"1\",\"priority\":1000000011,\"ruleCount\":226,\"updateDate\":1748342086996,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name", + "filters": [], + "name": "my_agent_rule" + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"input_validation_error(Field 'expression' is invalid: rule `my_agent_rule` error: rule syntax error: bool expected: 1:1: exec.file.name\\n^)\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/tit-1qd-6up", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Workload Protection agent rule (US1-FED) returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-05-27T10:34:35.937Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testcreateaworkloadprotectionagentruleus1fedreturnsokresponse1748342075" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ies-ggj-tnt\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTags\":[\"env:staging\"],\"monitoringRulesCount\":225,\"name\":\"testcreateaworkloadprotectionagentruleus1fedreturnsokresponse1748342075\",\"policyVersion\":\"1\",\"priority\":1000000011,\"ruleCount\":226,\"updateDate\":1748342076310,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "filters": [], + "name": "testcreateaworkloadprotectionagentruleus1fedreturnsokresponse1748342075" + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"xxe-f2q-be6\",\"attributes\":{\"version\":1,\"name\":\"testcreateaworkloadprotectionagentruleus1fedreturnsokresponse1748342075\",\"description\":\"My Agent rule\",\"expression\":\"exec.file.name == \\\"sh\\\"\",\"category\":\"Process Activity\",\"defaultRule\":false,\"enabled\":true,\"creationAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creationDate\":1748342076855,\"updateAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"updateDate\":1748342076855,\"filters\":[],\"actions\":[],\"agentConstraint\":\"\",\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}},\"type\":\"agent_rule\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/xxe-f2q-be6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/ies-ggj-tnt", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:12.949Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testcreateaworkloadprotectionagentrulereturnsbadrequestresponse1765469352" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0w7-waz-oev\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testcreateaworkloadprotectionagentrulereturnsbadrequestresponse1765469352\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469353329,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name", + "filters": [], + "name": "my_agent_rule", + "policy_id": "0w7-waz-oev", + "product_tags": [] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"input_validation_error(Field 'expression' is invalid: rule `my_agent_rule` error: rule syntax error: bool expected: 1:1: exec.file.name\\n^)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/0w7-waz-oev", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Workload Protection agent rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:15.376Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testcreateaworkloadprotectionagentrulereturnsokresponse1765469355" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"gar-bus-heu\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testcreateaworkloadprotectionagentrulereturnsokresponse1765469355\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469355739,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "agent_version": "> 7.60", + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "filters": [], + "name": "testcreateaworkloadprotectionagentrulereturnsokresponse1765469355", + "policy_id": "gar-bus-heu", + "product_tags": [] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"chr-zcp-dek\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1765469356535,\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"defaultRule\":false,\"description\":\"My Agent rule\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"sh\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"gar-bus-heu\"],\"name\":\"testcreateaworkloadprotectionagentrulereturnsokresponse1765469355\",\"product_tags\":[],\"updateDate\":1765469356535,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/agent_rules/chr-zcp-dek", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/gar-bus-heu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Workload Protection agent rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:18.588Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testcreateaworkloadprotectionagentrulewithsetactionreturnsokresponse1765469358" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"20s-mzx-tbv\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testcreateaworkloadprotectionagentrulewithsetactionreturnsokresponse1765469358\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469358936,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "actions": [ + { + "set": { + "inherited": true, + "name": "test_set", + "scope": "process", + "value": "test_value" + } + }, + { + "hash": { + "field": "exec.file" + } + } + ], + "description": "My Agent rule with set action", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "filters": [], + "name": "testcreateaworkloadprotectionagentrulewithsetactionreturnsokresponse1765469358", + "policy_id": "20s-mzx-tbv", + "product_tags": [] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7qu-bf8-yq0\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"test_set\",\"value\":\"test_value\",\"scope\":\"process\",\"inherited\":true},\"disabled\":false},{\"hash\":{\"field\":\"exec.file\"},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1765469359721,\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"defaultRule\":false,\"description\":\"My Agent rule with set action\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"sh\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"20s-mzx-tbv\"],\"name\":\"testcreateaworkloadprotectionagentrulewithsetactionreturnsokresponse1765469358\",\"product_tags\":[],\"updateDate\":1765469359721,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/agent_rules/7qu-bf8-yq0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/20s-mzx-tbv", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Workload Protection agent rule with set action returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:21.764Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testcreateaworkloadprotectionagentrulewithsetactionwithexpressionreturnsokresponse1765469361" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"xia-aut-8xj\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testcreateaworkloadprotectionagentrulewithsetactionwithexpressionreturnsokresponse1765469361\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469362120,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "actions": [ + { + "set": { + "default_value": "/dev/null", + "expression": "exec.file.path", + "name": "test_set", + "scope": "process" + } + } + ], + "description": "My Agent rule with set action with expression", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "filters": [], + "name": "testcreateaworkloadprotectionagentrulewithsetactionwithexpressionreturnsokresponse1765469361", + "policy_id": "xia-aut-8xj", + "product_tags": [] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0xb-jfr-rih\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"test_set\",\"default_value\":\"/dev/null\",\"expression\":\"exec.file.path\",\"scope\":\"process\"},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1765469362850,\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"defaultRule\":false,\"description\":\"My Agent rule with set action with expression\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"sh\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"xia-aut-8xj\"],\"name\":\"testcreateaworkloadprotectionagentrulewithsetactionwithexpressionreturnsokresponse1765469361\",\"product_tags\":[],\"updateDate\":1765469362850,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/agent_rules/0xb-jfr-rih", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/xia-aut-8xj", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Workload Protection agent rule with set action with expression returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:24.819Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [], + "hostTagsLists": [], + "name": "test" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"input_validation_error(Field 'tags' is invalid: cannot have both the new and the legacy field populated)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a Workload Protection policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:25.282Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTagsLists": [ + [ + "env:test" + ] + ], + "name": "my_agent_policy_2" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dmx-r5f-1rk\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:test\"]],\"monitoringRulesCount\":7,\"name\":\"my_agent_policy_2\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469365635,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/dmx-r5f-1rk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Workload Protection policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-05-27T10:34:26.931Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/non-existent-rule-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not found\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-05-27T10:34:16.102Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "name": "testdeleteaworkloadprotectionagentruleus1fedreturnsokresponse1748342056" + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3mv-eeb-jbf\",\"attributes\":{\"version\":1,\"name\":\"testdeleteaworkloadprotectionagentruleus1fedreturnsokresponse1748342056\",\"description\":\"My Agent rule\",\"expression\":\"exec.file.name == \\\"sh\\\"\",\"category\":\"Process Activity\",\"defaultRule\":false,\"enabled\":true,\"creationAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creationDate\":1748342056786,\"updateAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"updateDate\":1748342056786,\"filters\":[\"os == \\\"linux\\\"\"],\"actions\":[],\"agentConstraint\":\"\",\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}},\"type\":\"agent_rule\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/3mv-eeb-jbf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/3mv-eeb-jbf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Agent rule not found: agentRuleId=3mv-eeb-jbf)\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:27.159Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/agent_rules/non-existent-rule-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"failed to delete rule\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a Workload Protection agent rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:27.868Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testdeleteaworkloadprotectionagentrulereturnsokresponse1765469367" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"smh-tlz-mqj\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testdeleteaworkloadprotectionagentrulereturnsokresponse1765469367\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469368225,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "actions": [ + { + "set": { + "name": "test_set", + "scope": "process", + "value": "test_value" + } + }, + { + "hash": {} + } + ], + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "name": "testdeleteaworkloadprotectionagentrulereturnsokresponse1765469367", + "policy_id": "smh-tlz-mqj", + "product_tags": [ + "security:attack", + "technique:T1059" + ] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"aah-hmj-z0c\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"test_set\",\"value\":\"test_value\",\"scope\":\"process\"},\"disabled\":false},{\"hash\":{},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1765469368988,\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"defaultRule\":false,\"description\":\"My Agent rule\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"sh\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"smh-tlz-mqj\"],\"name\":\"testdeleteaworkloadprotectionagentrulereturnsokresponse1765469367\",\"product_tags\":[\"security:attack\",\"technique:T1059\"],\"updateDate\":1765469368988,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/agent_rules/aah-hmj-z0c", + "query": [ + [ + "policy_id", + "smh-tlz-mqj" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/agent_rules/aah-hmj-z0c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"failed to delete rule\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/smh-tlz-mqj", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete a Workload Protection agent rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:32.142Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/non-existent-policy-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"failed to delete policy\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a Workload Protection policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:32.883Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testdeleteaworkloadprotectionpolicyreturnsokresponse1765469372" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"vsz-2f2-xdy\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testdeleteaworkloadprotectionpolicyreturnsokresponse1765469372\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469373250,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/vsz-2f2-xdy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/vsz-2f2-xdy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"failed to delete policy\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a Workload Protection policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:35.134Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/cloud_workload/policy/download", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "# IMPORTANT: Edits to this file will not be reflected in the Datadog App and will be overwritten with new policy file downloads. Please modify rules in the Datadog App for full functionality.\nversion: '1765469375614'\nrules:\n- id: apparmor_modified_tty\n version: a7f3b5c2\n description: An AppArmor profile was modified in an interactive session\n expression: exec.file.name in [\"aa-disable\", \"aa-complain\", \"aa-audit\"] && exec.tty_name\n !=\"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: auditctl_usage\n version: fdc2412d\n description: The auditctl command was used to modify auditd\n expression: exec.file.name == \"auditctl\" && exec.args_flags not in [\"s\", \"l\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: auditd_config_modified\n version: c7f52a7a\n description: The auditd configuration file was modified without using auditctl\n expression: open.file.path == \"/etc/audit/auditd.conf\" && open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY)\n > 0 && process.file.name != \"auditctl\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: auditd_rule_file_modified\n version: c533115d\n description: The auditd rules file was modified without using auditctl\n expression: open.file.path in [\"/etc/audit/rules.d/audit.rules\", \"/etc/audit/audit.rules\"]\n && open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 && process.file.name\n != \"auditctl\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: aws_eks_service_account_token_accessed\n version: d6a7a4a0\n description: The AWS EKS service account token was accessed\n expression: open.file.path =~ \"/var/run/secrets/eks.amazonaws.com/serviceaccount/**\"\n && open.file.name == \"token\" && process.file.path not in [\"/opt/datadog-agent/embedded/bin/agent\",\n \"/opt/datadog-agent/embedded/bin/system-probe\", \"/opt/datadog-agent/embedded/bin/security-agent\",\n \"/opt/datadog-agent/embedded/bin/process-agent\", \"/opt/datadog-agent/bin/agent/agent\",\n \"/opt/datadog/apm/inject/auto_inject_runc\", \"/usr/bin/dd-host-install\", \"/usr/bin/dd-host-container-install\",\n \"/usr/bin/dd-container-install\", \"/opt/datadog-agent/bin/datadog-cluster-agent\"]\n agent_version: ''\n filters: []\n- id: aws_imds\n version: 6d47fcfe\n description: An AWS IMDS was called via a network utility\n expression: exec.comm in [\"wget\", \"curl\", \"lwp-download\"] && exec.args in [~\"*169.254.169.254/latest/meta-data/iam/security-credentials/*\",\n \"*169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI\", ~\"*169.254.170.2/*/credentials?id=*\"]\n agent_version: ''\n filters: []\n- id: aws_metadata_service\n version: 4601e52e\n description: EC2 Instance Metadata Service Accessed via Network Utility\n expression: exec.file.path in [\"/usr/bin/wget\", \"/usr/bin/curl\"] && exec.args in\n [~\"*169.254.169.254*\"]\n agent_version: ''\n filters: []\n- id: azure_imds\n version: 784f9a83\n description: An Azure IMDS was called via a network utility\n expression: exec.comm in [\"wget\", \"curl\", \"lwp-download\"] && exec.args in [~\"*169.254.169.254/metadata/identity/oauth2/token?api-version=*\"]\n agent_version: ''\n filters: []\n- id: bpfdoor_pid_file_creation\n version: 900b5ac7\n description: A PID file was created in /var/run, indicating a BPFDoor malware infection.\n expression: open.file.path in [\"/var/run/haldrund.pid\", \"/var/run/hald-smartd.pid\",\n \"/var/run/system.pid\", \"/var/run/hp-health.pid\", \"/var/run/hald-addon.pid\", \"/run/haldrund.pid\",\n \"/run/hald-smartd.pid\", \"/run/system.pid\", \"/run/hp-health.pid\", \"/run/hald-addon.pid\"]\n && open.flags & O_CREAT != 0\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - set:\n name: pid_file\n scope: process\n ttl: 10000000000\n value: true\n- id: chatroom_request\n version: 91aa2a0f\n description: A DNS request was made for a chatroom domain\n expression: dns.question.name in [\"discord.com\", \"api.telegram.org\", \"cdn.discordapp.com\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: common_net_intrusion_util\n version: c7198131\n description: A network utility (nmap) commonly used in intrusion attacks was executed\n expression: exec.file.name in [\"nmap\", \"masscan\", \"fping\", \"zgrab\", \"zgrab2\", \"rustscan\",\n \"pnscan\"] && exec.args_flags not in [\"V\", \"version\"]\n agent_version: ''\n filters: []\n- id: compile_after_delivery\n version: f41c1e36\n description: A compiler wrote a suspicious file in a container\n expression: |-\n open.flags & O_CREAT > 0\n && (\n (open.file.path =~ \"/tmp/**\" && open.file.name in [~\"*.ko\", ~\".*\"])\n || open.file.path in [~\"/var/tmp/**\", ~\"/root/**\", ~\"*/bin/*\", ~\"/usr/local/lib/**\"]\n )\n && (process.comm in [\"javac\", \"clang\", \"gcc\", \"bcc\"] || process.ancestors.comm in [\"javac\", \"clang\", \"gcc\", \"bcc\"] || process.file.name in [\"javac\", \"clang\", \"gcc\", \"bcc\"] || process.ancestors.file.name in [\"javac\", \"clang\", \"gcc\", \"bcc\"])\n && process.file.name not in [\"pip\", ~\"python*\"]\n && process.container.id != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - hash: {}\n- id: compiler_in_container\n version: 441a7e85\n description: A compiler was executed inside of a container\n expression: (exec.comm in [\"javac\", \"clang\", \"gcc\", \"bcc\"] || exec.file.name in\n [\"javac\", \"clang\", \"gcc\", \"bcc\"] || (exec.file.name == \"go\" && exec.args in [~\"*build*\",\n ~\"*run*\"])) && process.container.id !=\"\" && process.ancestors.file.path != \"/usr/bin/cilium-agent\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: container_breakout_enumeration_tool\n version: b14ba979\n description: A container performed various enumeration activities including checking\n container runtime, process privileges, user namespace mappings, Linux Security\n Modules, mount points, and network namespaces.\n expression: \"process.container.id != \\\"\\\" && (\\n open.file.path in [~\\\"/run/systemd/container\\\"\\\n ] ||\\n open.file.path in [~\\\"/proc/*/status\\\", ~\\\"/proc/*/task/*/status\\\"] ||\\n\\\n \\ (open.file.path in [~\\\"/proc/*/uid_map\\\"] && process.file.name not in [\\\"runc\\\"\\\n ]) ||\\n open.file.path in [~\\\"/proc/*/attr/current\\\"] ||\\n open.file.path in\\\n \\ [~\\\"/proc/*/mountinfo\\\"] ||\\n open.file.path in [~\\\"/proc/*/cgroup\\\"] ||\\n\\\n \\ open.file.path in [~\\\"/proc/net/unix\\\"]\\n) &&\\nprocess.file.in_upper_layer\\\n \\ && \\nprocess.file.path not in [\\\"/opt/datadog-agent/embedded/bin/agent\\\", \\\"\\\n /opt/datadog-agent/embedded/bin/system-probe\\\", \\\"/opt/datadog-agent/embedded/bin/security-agent\\\"\\\n , \\\"/opt/datadog-agent/embedded/bin/process-agent\\\", \\\"/opt/datadog-agent/embedded/bin/trace-agent\\\"\\\n , \\\"/opt/datadog-agent/bin/agent/agent\\\", \\\"/opt/datadog/apm/inject/auto_inject_runc\\\"\\\n , \\\"/usr/bin/dd-host-install\\\", \\\"/usr/bin/dd-host-container-install\\\", \\\"/usr/bin/dd-container-install\\\"\\\n , \\\"/opt/datadog-agent/bin/datadog-cluster-agent\\\", ~\\\"/opt/datadog-packages/**\\\"\\\n , ~\\\"/opt/datadog-installer/**\\\"] \"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: core_pattern_write\n version: c6fdee59\n description: Detect any attempt to modify /proc/sys/kernel/core_pattern from a container,\n which might result to escape to host when a core dump is triggered.\n expression: \"open.file.name == \\\"core_pattern\\\" &&\\nopen.file.filesystem == \\\"proc\\\"\\\n \\ &&\\nopen.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 && \\nprocess.container.id\\\n \\ != \\\"\\\"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - set:\n field: process.container.id\n name: core_pattern_write_container_id\n scope: container\n ttl: 1800000000000\n- id: credential_modified_chmod\n version: 7e14d921\n description: Sensitive credential files were modified using a non-standard tool\n expression: |-\n (\n (chmod.file.path in [ \"/etc/shadow\", \"/etc/gshadow\" ])\n && process.file.path not in [ \"/sbin/vipw\", \"/usr/sbin/vipw\", \"/sbin/vigr\", \"/usr/sbin/vigr\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/local/bin/dockerd\", \"/usr/sbin/groupadd\", \"/usr/sbin/useradd\", \"/usr/sbin/usermod\", \"/usr/sbin/userdel\", \"/usr/bin/gpasswd\", \"/usr/bin/chage\", \"/usr/sbin/chpasswd\", \"/usr/bin/passwd\" ]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n ) && chmod.file.destination.mode != chmod.file.mode\n agent_version: ''\n filters: []\n- id: credential_modified_chown\n version: 3731e0d5\n description: Sensitive credential files were modified using a non-standard tool\n expression: |-\n (\n (chown.file.path in [ \"/etc/shadow\", \"/etc/gshadow\" ])\n && process.file.path not in [ \"/sbin/vipw\", \"/usr/sbin/vipw\", \"/sbin/vigr\", \"/usr/sbin/vigr\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/local/bin/dockerd\", \"/usr/sbin/groupadd\", \"/usr/sbin/useradd\", \"/usr/sbin/usermod\", \"/usr/sbin/userdel\", \"/usr/bin/gpasswd\", \"/usr/bin/chage\", \"/usr/sbin/chpasswd\", \"/usr/bin/passwd\" ]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: credential_modified_link\n version: 7594ec54\n description: Sensitive credential files were modified using a non-standard tool\n expression: |-\n (\n (link.file.path in [ \"/etc/shadow\", \"/etc/gshadow\" ]\n || link.file.destination.path in [ \"/etc/shadow\", \"/etc/gshadow\" ])\n && process.file.path not in [ \"/sbin/vipw\", \"/usr/sbin/vipw\", \"/sbin/vigr\", \"/usr/sbin/vigr\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/local/bin/dockerd\", \"/usr/sbin/groupadd\", \"/usr/sbin/useradd\", \"/usr/sbin/usermod\", \"/usr/sbin/userdel\", \"/usr/bin/gpasswd\", \"/usr/bin/chage\", \"/usr/sbin/chpasswd\", \"/usr/bin/passwd\" ]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: credential_modified_open_v2\n version: 5aec9afe\n description: Sensitive credential files were modified using a non-standard tool\n expression: |-\n (\n open.flags & ((O_CREAT|O_RDWR|O_WRONLY|O_TRUNC)) > 0 &&\n (open.file.path in [ \"/etc/shadow\", \"/etc/gshadow\" ])\n && process.file.path not in [ \"/sbin/vipw\", \"/usr/sbin/vipw\", \"/sbin/vigr\", \"/usr/sbin/vigr\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/local/bin/dockerd\", \"/usr/sbin/groupadd\", \"/usr/sbin/useradd\", \"/usr/sbin/usermod\", \"/usr/sbin/userdel\", \"/usr/bin/gpasswd\", \"/usr/bin/chage\", \"/usr/sbin/chpasswd\", \"/usr/bin/passwd\" ]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n ) && process.container.id != \"\" && container.created_at > 90s\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: credential_modified_rename\n version: 8bb8242b\n description: Sensitive credential files were modified using a non-standard tool\n expression: |-\n (\n (rename.file.path in [ \"/etc/shadow\", \"/etc/gshadow\" ]\n || rename.file.destination.path in [ \"/etc/shadow\", \"/etc/gshadow\" ])\n && process.file.path not in [ \"/sbin/vipw\", \"/usr/sbin/vipw\", \"/sbin/vigr\", \"/usr/sbin/vigr\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/local/bin/dockerd\", \"/usr/sbin/groupadd\", \"/usr/sbin/useradd\", \"/usr/sbin/usermod\", \"/usr/sbin/userdel\", \"/usr/bin/gpasswd\", \"/usr/bin/chage\", \"/usr/sbin/chpasswd\", \"/usr/bin/passwd\" ]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: credential_modified_unlink\n version: 5af577d\n description: Sensitive credential files were modified using a non-standard tool\n expression: |-\n (\n (unlink.file.path in [ \"/etc/shadow\", \"/etc/gshadow\" ])\n && process.file.path not in [ \"/sbin/vipw\", \"/usr/sbin/vipw\", \"/sbin/vigr\", \"/usr/sbin/vigr\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/local/bin/dockerd\", \"/usr/sbin/groupadd\", \"/usr/sbin/useradd\", \"/usr/sbin/usermod\", \"/usr/sbin/userdel\", \"/usr/bin/gpasswd\", \"/usr/bin/chage\", \"/usr/sbin/chpasswd\", \"/usr/bin/passwd\" ]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters: []\n- id: credential_modified_utimes\n version: 1c101338\n description: Sensitive credential files were modified using a non-standard tool\n expression: |-\n (\n (utimes.file.path in [ \"/etc/shadow\", \"/etc/gshadow\" ])\n && process.file.path not in [ \"/sbin/vipw\", \"/usr/sbin/vipw\", \"/sbin/vigr\", \"/usr/sbin/vigr\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/local/bin/dockerd\", \"/usr/sbin/groupadd\", \"/usr/sbin/useradd\", \"/usr/sbin/usermod\", \"/usr/sbin/userdel\", \"/usr/bin/gpasswd\", \"/usr/bin/chage\", \"/usr/sbin/chpasswd\", \"/usr/bin/passwd\" ]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: critical_windows_files_modified\n version: e96784de\n description: a critical windows file was modified\n expression: write.file.device_path in [~\"\\Device\\*\\windows\\system32\\**\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: cron_at_job_creation_chmod\n version: 13512ebc\n description: An unauthorized job was added to cron scheduling\n expression: |-\n (\n (chmod.file.path in [ ~\"/var/spool/cron/**\", ~\"/etc/cron.*/**\", ~\"/etc/crontab\", ~\"/etc/crontabs/**\"])\n && process.file.path not in [ \"/usr/bin/at\", \"/usr/bin/crontab\" ]\n ) && chmod.file.destination.mode != chmod.file.mode\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: cron_at_job_creation_chown\n version: ee7b306c\n description: An unauthorized job was added to cron scheduling\n expression: |-\n (\n (chown.file.path in [ ~\"/var/spool/cron/**\", ~\"/etc/cron.*/**\", ~\"/etc/crontab\" ])\n && process.file.path not in [ \"/usr/bin/at\", \"/usr/bin/crontab\" ]\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\"]\n agent_version: ''\n filters: []\n- id: cron_at_job_creation_link\n version: b83e03f6\n description: An unauthorized job was added to cron scheduling\n expression: |-\n (\n (link.file.path in [ ~\"/var/spool/cron/**\", ~\"/etc/cron.*/**\", ~\"/etc/crontab\", ~\"/etc/crontabs/**\"]\n || link.file.destination.path in [ ~\"/var/spool/cron/**\", ~\"/etc/cron.*/**\", ~\"/etc/crontab\" ])\n && process.file.path not in [ \"/usr/bin/at\", \"/usr/bin/crontab\" ]\n )\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: cron_at_job_creation_open\n version: 561ad06\n description: An unauthorized job was added to cron scheduling\n expression: |-\n (\n open.flags & (O_CREAT|O_RDWR|O_WRONLY) > 0 &&\n (open.file.path in [ ~\"/var/spool/cron/**\", ~\"/etc/cron.*/**\", ~\"/etc/crontab\", ~\"/etc/crontabs/**\"])\n && process.file.path not in [ \"/usr/bin/at\", \"/usr/bin/crontab\" ]\n )\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: cron_at_job_creation_rename\n version: 59b739d8\n description: An unauthorized job was added to cron scheduling\n expression: |-\n (\n (rename.file.path in [ ~\"/var/spool/cron/**\", ~\"/etc/cron.*/**\", ~\"/etc/crontab\" ]\n || rename.file.destination.path in [ ~\"/var/spool/cron/**\", ~\"/etc/cron.*/**\", ~\"/etc/crontab\" ])\n && process.file.path not in [ \"/usr/bin/at\", \"/usr/bin/crontab\" ]\n )\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\"]\n agent_version: ''\n filters: []\n- id: cron_at_job_creation_unlink\n version: 82b6d187\n description: An unauthorized job was added to cron scheduling\n expression: |-\n (\n (unlink.file.path in [ ~\"/var/spool/cron/**\", ~\"/etc/cron.*/**\", ~\"/etc/crontab\", ~\"/etc/crontabs/**\"])\n && process.file.path not in [ \"/usr/bin/at\", \"/usr/bin/crontab\" ]\n )\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: cron_at_job_creation_utimes\n version: d460ba68\n description: An unauthorized job was added to cron scheduling\n expression: |-\n (\n (utimes.file.path in [ ~\"/var/spool/cron/**\", ~\"/etc/cron.*/**\", ~\"/etc/crontab\" ])\n && process.file.path not in [ \"/usr/bin/at\", \"/usr/bin/crontab\" ]\n )\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\"]\n agent_version: ''\n filters: []\n- id: cryptominer_args\n version: fc017137\n description: A process launched with arguments associated with cryptominers\n expression: exec.args_options in [~\"cpu-priority*\", ~\"donate-level*\"] || exec.args\n in [~\"*stratum+tcp*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: cryptominer_envs\n version: 654a00aa\n description: Process environment variables match cryptocurrency miner\n expression: exec.envs in [\"POOL_USER\", \"POOL_URL\", \"POOL_PASS\", \"DONATE_LEVEL\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: curl_mgmt_socket\n version: f736b6e6\n description: A container management socket was referenced in a cURL command\n expression: exec.file.name == \"curl\" && exec.args_flags in [\"unix-socket\"] && exec.args\n in [~\"*docker.sock*\", ~\"*dockershim.sock*\", ~\"*containerd.sock*\", ~\"*crio.sock*\",\n ~\"*frakti.sock*\", ~\"*rktlet.sock*\"] && process.container.id != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: database_shell_execution\n version: 3508c713\n description: A database application spawned a shell, shell utility, or HTTP utility\n expression: |-\n (exec.file.path in [ \"/bin/dash\",\n \"/usr/bin/dash\",\n \"/bin/sh\",\n \"/bin/static-sh\",\n \"/usr/bin/sh\",\n \"/bin/bash\",\n \"/usr/bin/bash\",\n \"/bin/bash-static\",\n \"/usr/bin/zsh\",\n \"/usr/bin/ash\",\n \"/usr/bin/csh\",\n \"/usr/bin/ksh\",\n \"/usr/bin/tcsh\",\n \"/usr/lib/initramfs-tools/bin/busybox\",\n \"/bin/busybox\",\n \"/usr/bin/fish\",\n \"/bin/ksh93\",\n \"/bin/rksh\",\n \"/bin/rksh93\",\n \"/bin/lksh\",\n \"/bin/mksh\",\n \"/bin/mksh-static\",\n \"/usr/bin/csharp\",\n \"/bin/posh\",\n \"/usr/bin/rc\",\n \"/bin/sash\",\n \"/usr/bin/yash\",\n \"/bin/zsh5\",\n \"/bin/zsh5-static\" ] ||\n exec.comm in [\"wget\", \"curl\", \"lwp-download\"] ||\n exec.file.path in [\"/bin/cat\",\"/bin/chgrp\",\"/bin/chmod\",\"/bin/chown\",\"/bin/cp\",\"/bin/date\",\"/bin/dd\",\"/bin/df\",\"/bin/dir\",\"/bin/echo\",\"/bin/ln\",\"/bin/ls\",\"/bin/mkdir\",\"/bin/mknod\",\"/bin/mktemp\",\"/bin/mv\",\"/bin/pwd\",\"/bin/readlink\",\"/bin/rm\",\"/bin/rmdir\",\"/bin/sleep\",\"/bin/stty\",\"/bin/sync\",\"/bin/touch\",\"/bin/uname\",\"/bin/vdir\",\"/usr/bin/arch\",\"/usr/bin/b2sum\",\"/usr/bin/base32\",\"/usr/bin/base64\",\"/usr/bin/basename\",\"/usr/bin/chcon\",\"/usr/bin/cksum\",\"/usr/bin/comm\",\"/usr/bin/csplit\",\"/usr/bin/cut\",\"/usr/bin/dircolors\",\"/usr/bin/dirname\",\"/usr/bin/du\",\"/usr/bin/env\",\"/usr/bin/expand\",\"/usr/bin/expr\",\"/usr/bin/factor\",\"/usr/bin/fmt\",\"/usr/bin/fold\",\"/usr/bin/groups\",\"/usr/bin/head\",\"/usr/bin/hostid\",\"/usr/bin/id\",\"/usr/bin/install\",\"/usr/bin/join\",\"/usr/bin/link\",\"/usr/bin/logname\",\"/usr/bin/md5sum\",\"/usr/bin/md5sum.textutils\",\"/usr/bin/mkfifo\",\"/usr/bin/nice\",\"/usr/bin/nl\",\"/usr/bin/nohup\",\"/usr/bin/nproc\",\"/usr/bin/numfmt\",\"/usr/bin/od\",\"/usr/bin/paste\",\"/usr/bin/pathchk\",\"/usr/bin/pinky\",\"/usr/bin/pr\",\"/usr/bin/printenv\",\"/usr/bin/printf\",\"/usr/bin/ptx\",\"/usr/bin/realpath\",\"/usr/bin/runcon\",\"/usr/bin/seq\",\"/usr/bin/sha1sum\",\"/usr/bin/sha224sum\",\"/usr/bin/sha256sum\",\"/usr/bin/sha384sum\",\"/usr/bin/sha512sum\",\"/usr/bin/shred\",\"/usr/bin/shuf\",\"/usr/bin/sort\",\"/usr/bin/split\",\"/usr/bin/stat\",\"/usr/bin/stdbuf\",\"/usr/bin/sum\",\"/usr/bin/tac\",\"/usr/bin/tail\",\"/usr/bin/tee\",\"/usr/bin/test\",\"/usr/bin/timeout\",\"/usr/bin/tr\",\"/usr/bin/truncate\",\"/usr/bin/tsort\",\"/usr/bin/tty\",\"/usr/bin/unexpand\",\"/usr/bin/uniq\",\"/usr/bin/unlink\",\"/usr/bin/users\",\"/usr/bin/wc\",\"/usr/bin/who\",\"/usr/bin/whoami\",\"/usr/sbin/chroot\"]) &&\n process.parent.file.name in [\"mysqld\", \"mongod\", \"postgres\"] &&\n !(process.parent.file.name == \"initdb\" &&\n exec.args == \"-c locale -a\") &&\n !(process.parent.file.name == \"postgres\" &&\n exec.args == ~\"*pg_wal*\")\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: debugfs_in_container\n version: f5991469\n description: The debugfs was executed in a container\n expression: exec.comm == \"debugfs\" && process.container.id != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: delete_new_process\n version: f1ba8f89\n description: A file was deleted shortly after it was executed\n expression: unlink.file.path in ${cgroup.chain_exec_unlink}\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - set:\n field: unlink.file.path\n name: correlation_key_file_path\n scope: cgroup\n- id: deploy_priv_container\n version: 356d5ee7\n description: A privileged container was created\n expression: exec.file.name != \"\" && process.container.id != \"\" && container.created_at\n < 1s && process.cap_permitted & CAP_SYS_ADMIN > 0 && process.container.id != ${container.ratelimit_priv_container}\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - set:\n field: process.container.id\n name: ratelimit_priv_container\n scope: container\n ttl: 10000000000\n- id: devshm_execution\n version: 9850af87\n description: A file executed from /dev/shm/ directory\n expression: exec.file.path == ~\"/dev/shm/**\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: dirty_pipe_attempt\n version: 8814807c\n description: Potential Dirty pipe exploitation attempt\n expression: (splice.pipe_entry_flag & PIPE_BUF_FLAG_CAN_MERGE) != 0 && (splice.pipe_exit_flag\n & PIPE_BUF_FLAG_CAN_MERGE) == 0 && (process.uid != 0 && process.gid != 0)\n agent_version: ''\n filters: []\n- id: dirty_pipe_exploitation\n version: 9bcacfe3\n description: Potential Dirty pipe exploitation\n expression: (splice.pipe_exit_flag & PIPE_BUF_FLAG_CAN_MERGE) > 0 && (process.uid\n != 0 && process.gid != 0)\n agent_version: ''\n filters: []\n- id: dotnet_dump_execution\n version: ba3fb472\n description: Dotnet_dump was used to dump a process memory\n expression: exec.cmdline =~ \"*dotnet-dump*\" && exec.cmdline =~ \"*collect*\"\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: drop_caches\n version: 9eff40a5\n description: A process cleared the system cache\n expression: open.file.path == \"/proc/sys/vm/drop_caches\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: dynamic_linker_config_unlink\n version: 1924611e\n description: A process unlinked a dynamic linker config file\n expression: unlink.file.path in [\"/etc/ld.so.preload\", \"/etc/ld.so.conf\", ~\"/etc/ld.so.conf.d/*.conf\"]\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\",\n \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\",\n \"/sbin/apk\"]\n agent_version: ''\n filters: []\n- id: dynamic_linker_config_write\n version: 764fc516\n description: A process wrote to a dynamic linker config file\n expression: open.file.path in [\"/etc/ld.so.preload\", \"/etc/ld.so.conf\", ~\"/etc/ld.so.conf.d/*.conf\"]\n && open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 && process.file.path\n not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\",\n \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\",\n ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"] && process.ancestors.file.path not in\n [\"/opt/datadog-agent/embedded/bin/agent\", \"/opt/datadog-agent/embedded/bin/system-probe\",\n \"/opt/datadog-agent/embedded/bin/security-agent\", \"/opt/datadog-agent/embedded/bin/process-agent\",\n \"/opt/datadog-agent/embedded/bin/trace-agent\", \"/opt/datadog-agent/bin/agent/agent\",\n \"/opt/datadog/apm/inject/auto_inject_runc\", \"/usr/bin/dd-host-install\", \"/usr/bin/dd-host-container-install\",\n \"/usr/bin/dd-container-install\", \"/opt/datadog-agent/bin/datadog-cluster-agent\",\n ~\"/opt/datadog-packages/**\", ~\"/opt/datadog-installer/**\"] && process.argv0 not\n in [\"runc\", \"/usr/bin/runc\", \"/usr/sbin/runc\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: exec_lsmod\n version: 1a14c811\n description: Kernel modules were listed using the lsmod command\n expression: exec.comm == \"lsmod\"\n agent_version: ''\n filters: []\n- id: exec_new_file\n version: 2748d900\n description: A recently modified file was executed\n expression: exec.file.change_time < 30s && cgroup.file.inode != 0 && exec.file.path\n not in ${cgroup.exec_new_file_in_cgroup} && exec.file.in_upper_layer != false\n && container.created_at > 1m\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - set:\n append: true\n field: exec.file.path\n name: chain_exec_unlink\n scope: cgroup\n ttl: 30000000000\n - set:\n append: true\n field: exec.file.path\n name: exec_new_file_in_cgroup\n scope: cgroup\n size: 10000\n ttl: 1800000000000\n - set:\n field: exec.file.path\n name: correlation_key_file_path\n scope: cgroup\n- id: exec_whoami\n version: 90ea91b6\n description: The whoami command was executed\n expression: exec.comm == \"whoami\"\n agent_version: ''\n filters: []\n- id: executable_bit_added\n version: f0d6e245\n description: The executable bit was added to a newly created file\n expression: |-\n chmod.file.in_upper_layer &&\n chmod.file.change_time < 30s &&\n process.container.id != \"\" &&\n chmod.file.destination.mode != chmod.file.mode &&\n chmod.file.destination.mode & S_IXUSR|S_IXGRP|S_IXOTH > 0 &&\n process.argv in [\"+x\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: execution_context_auid\n version: f26b612e\n description: Track execution context from auid\n expression: exec.auid >= 0 && exec.auid != AUDIT_AUID_UNSET && ${process.correlation_key}\n in [\"\", ~\"cgroup_*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n - set:\n default_value: ''\n expression: '\"auid_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n- id: execution_context_cgroup\n version: a70f0019\n description: Track execution context from cgroup\n expression: exec.cgroup.id != process.parent.cgroup.id && ${process.correlation_key}\n in [\"\", ~\"cgroup_*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n - set:\n default_value: ''\n expression: '\"cgroup_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n- id: execution_context_cgroup_write\n version: 87d33061\n description: Track execution context from cgroup write\n expression: cgroup_write.pid > 0 && ${process.correlation_key} in [\"\", ~\"cgroup_*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n scope_field: cgroup_write.pid\n - set:\n default_value: ''\n expression: '\"cgroup_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n scope_field: cgroup_write.pid\n- id: execution_context_interactive_shell\n version: 673abb40\n description: Track execution context from interactive shell\n expression: |-\n exec.file.path in [ \"/bin/dash\",\n \"/usr/bin/dash\",\n \"/bin/sh\",\n \"/bin/static-sh\",\n \"/usr/bin/sh\",\n \"/bin/bash\",\n \"/usr/bin/bash\",\n \"/bin/bash-static\",\n \"/usr/bin/zsh\",\n \"/usr/bin/ash\",\n \"/usr/bin/csh\",\n \"/usr/bin/ksh\",\n \"/usr/bin/tcsh\",\n \"/usr/lib/initramfs-tools/bin/busybox\",\n \"/bin/busybox\",\n \"/usr/bin/fish\",\n \"/bin/ksh93\",\n \"/bin/rksh\",\n \"/bin/rksh93\",\n \"/bin/lksh\",\n \"/bin/mksh\",\n \"/bin/mksh-static\",\n \"/usr/bin/csharp\",\n \"/bin/posh\",\n \"/usr/bin/rc\",\n \"/bin/sash\",\n \"/usr/bin/yash\",\n \"/bin/zsh5\",\n \"/bin/zsh5-static\" ] && (process.tty_name != \"\" || exec.args_flags in [\"i\"]) && ${process.correlation_key} in [\"\", ~\"cgroup_*\", ~\"auid_*\", ~\"service_*\", ~\"service_new_cgroup_*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n - set:\n default_value: ''\n expression: '\"interactive_shell_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n- id: execution_context_k8s_usersession_entrypoint\n version: '40945946'\n description: Track execution context from k8s user session\n expression: exec.user_session.k8s_username != \"\" && ${process.correlation_key}\n in [\"\", ~\"cgroup_*\", ~\"auid_*\", ~\"service_*\", ~\"service_new_cgroup_*\", ~\"interactive_shell_*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n - set:\n default_value: ''\n expression: '\"k8s_session_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n- id: execution_context_npm_install\n version: cc0b703a\n description: Track execution context of npm package installation\n expression: \"exec.file.name in [\\\"node\\\", \\\"npm\\\"] && \\n(process.args =~ \\\"* install\\\n \\ *\\\" || process.args =~ \\\"* add *\\\" || process.args =~ \\\"* i *\\\" || \\n process.args\\\n \\ =~ \\\"* in *\\\" || process.args =~ \\\"* ins *\\\" || process.args =~ \\\"* inst *\\\"\\\n \\ || \\n process.args =~ \\\"* insta *\\\" || process.args =~ \\\"* instal *\\\" || process.args\\\n \\ =~ \\\"* isnt *\\\" || \\n process.args =~ \\\"* isnta *\\\" || process.args =~ \\\"* isntal\\\n \\ *\\\" || process.args =~ \\\"* isntall *\\\") &&\\nnot(process.args =~ \\\"*-e *\\\") &&\\n\\\n ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\", ~\\\"service_*\\\"\\\n , ~\\\"service_new_cgroup_*\\\", ~\\\"interactive_shell_*\\\", ~\\\"k8s_session_*\\\"]\"\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n - set:\n default_value: ''\n expression: '\"package_install_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n- id: execution_context_service\n version: 3fe535ef\n description: Track execution context from service\n expression: (exec.envs in [\"DD_SERVICE\", \"OTEL_SERVICE_NAME\"] || \"tags.datadoghq.com/service\"\n in container.tags) && ${process.correlation_key} in [\"\", ~\"cgroup_*\", ~\"auid_*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n - set:\n default_value: ''\n expression: '\"service_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n- id: execution_context_service_new_cgroup\n version: ec46e6bb\n description: Track execution context from new service cgroup\n expression: (exec.envs in [\"DD_SERVICE\", \"OTEL_SERVICE_NAME\"] || \"tags.datadoghq.com/service\"\n in container.tags) && ${process.correlation_key} in [~\"service_*\"] && process.cgroup.id\n != process.parent.cgroup.id\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n - set:\n default_value: ''\n expression: '\"service_new_cgroup_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n- id: execution_context_service_new_cgroup_write\n version: 8137122d\n description: Track execution context from new service cgroup write\n expression: cgroup_write.pid > 0 && (process.envs in [\"DD_SERVICE\", \"OTEL_SERVICE_NAME\"]\n || \"tags.datadoghq.com/service\" in container.tags) && ${process.correlation_key}\n in [~\"service_*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n scope_field: cgroup_write.pid\n - set:\n default_value: ''\n expression: '\"service_new_cgroup_write_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n scope_field: cgroup_write.pid\n- id: execution_context_spawned_shell\n version: 89f318af\n description: Track execution context from spawned shell\n expression: |-\n exec.file.path in [ \"/bin/dash\",\n \"/usr/bin/dash\",\n \"/bin/sh\",\n \"/bin/static-sh\",\n \"/usr/bin/sh\",\n \"/bin/bash\",\n \"/usr/bin/bash\",\n \"/bin/bash-static\",\n \"/usr/bin/zsh\",\n \"/usr/bin/ash\",\n \"/usr/bin/csh\",\n \"/usr/bin/ksh\",\n \"/usr/bin/tcsh\",\n \"/usr/lib/initramfs-tools/bin/busybox\",\n \"/bin/busybox\",\n \"/usr/bin/fish\",\n \"/bin/ksh93\",\n \"/bin/rksh\",\n \"/bin/rksh93\",\n \"/bin/lksh\",\n \"/bin/mksh\",\n \"/bin/mksh-static\",\n \"/usr/bin/csharp\",\n \"/bin/posh\",\n \"/usr/bin/rc\",\n \"/bin/sash\",\n \"/usr/bin/yash\",\n \"/bin/zsh5\",\n \"/bin/zsh5-static\" ] && (process.parent.file.name in [\"apache2\", \"nginx\", ~\"tomcat*\", \"httpd\"] || process.parent.file.name =~ \"php*\" || process.parent.file.name in [\"mysqld\", \"mongod\", \"postgres\"] || process.parent.file.name in [\"java\", \"jspawnhelper\"]) && ${process.correlation_key} in [\"\", ~\"cgroup_*\", ~\"auid_*\", ~\"service_*\", ~\"service_new_cgroup_*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - filter: ${process.correlation_key} != \"\"\n set:\n append: true\n default_value: ''\n expression: ${process.correlation_key}\n inherited: true\n name: parent_correlation_keys\n scope: process\n - set:\n default_value: ''\n expression: '\"spawned_shell_${builtins.uuid4}\"'\n inherited: true\n name: correlation_key\n scope: process\n- id: file_sync_exfil\n version: bdcbbeb8\n description: The rclone utility was executed\n expression: exec.file.name in [\"rclone\", \"rsync\", \"sftp\", \"ftp\", \"scp\", \"dcp\", \"rcp\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: find_credentials\n version: c16ed3fa\n description: find command searching for sensitive files\n expression: exec.comm == \"find\" && exec.args in [~\"*credentials*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: gcp_imds\n version: 3035dbbf\n description: An GCP IMDS was called via a network utility\n expression: exec.comm in [\"wget\", \"curl\", \"lwp-download\"] && exec.args in [~\"*metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token\",\n ~\"*169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token\"]\n agent_version: ''\n filters: []\n- id: github_api_contacted\n version: d51472cf\n description: GitHub API was contacted\n expression: connect.addr.hostname =~ \"api.github.com\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: hidden_file_executed\n version: 60fd84a9\n description: A hidden file was executed in a suspicious folder\n expression: exec.file.name =~ \".*\" && exec.file.path in [~\"/home/**\", ~\"/tmp/**\",\n ~\"/var/tmp/**\", ~\"/dev/shm/**\"]\n agent_version: ''\n filters: []\n- id: install_kernel_headers\n version: 514bd17b\n description: Kernel headers package downloaded via package manager\n expression: \"exec.file.path in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\"\\\n , \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"\\\n , \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n&& (\\n exec.args\\\n \\ in [~\\\"*linux-headers*\\\", ~\\\"*kernel-devel*\\\", ~\\\"*kernel-headers*\\\", ~\\\"*linux-devel*\\\"\\\n ]\\n || exec.args_options in [~\\\"linux-headers*\\\", ~\\\"kernel-devel*\\\", ~\\\"kernel-headers*\\\"\\\n , ~\\\"linux-devel*\\\"]\\n)\\n&& (\\n exec.args in [~\\\"*install*\\\", ~\\\"*add*\\\"] \\n\\\n \\ || exec.args_flags in [\\\"i\\\", \\\"install\\\"]\\n)\"\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - set:\n field: process.parent.pid\n name: kernel_headers_pid\n scope: process\n- id: interactive_shell_in_container\n version: 757f83d3\n description: An interactive shell was started inside of a container\n expression: |-\n exec.file.path in [ \"/bin/dash\",\n \"/usr/bin/dash\",\n \"/bin/sh\",\n \"/bin/static-sh\",\n \"/usr/bin/sh\",\n \"/bin/bash\",\n \"/usr/bin/bash\",\n \"/bin/bash-static\",\n \"/usr/bin/zsh\",\n \"/usr/bin/ash\",\n \"/usr/bin/csh\",\n \"/usr/bin/ksh\",\n \"/usr/bin/tcsh\",\n \"/usr/lib/initramfs-tools/bin/busybox\",\n \"/bin/busybox\",\n \"/usr/bin/fish\",\n \"/bin/ksh93\",\n \"/bin/rksh\",\n \"/bin/rksh93\",\n \"/bin/lksh\",\n \"/bin/mksh\",\n \"/bin/mksh-static\",\n \"/usr/bin/csharp\",\n \"/bin/posh\",\n \"/usr/bin/rc\",\n \"/bin/sash\",\n \"/usr/bin/yash\",\n \"/bin/zsh5\",\n \"/bin/zsh5-static\" ] && exec.args_flags in [\"i\"] && process.container.id !=\"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: inveigh_tool_usage\n version: da9cc26\n description: Process executed with arguments common with Inveigh tool usage\n expression: exec.cmdline in [~\"*SpooferIP*\", ~\"*ReplyToIPs*\", ~\"*ReplyToDomains*\",\n ~\"*ReplyToMACs*\", ~\"*SnifferIP*\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: ip_check_domain\n version: 2d5285c0\n description: A DNS lookup was done for a IP check service\n expression: dns.question.name in [\"icanhazip.com\", \"ip-api.com\", \"myip.opendns.com\",\n \"checkip.amazonaws.com\", \"whatismyip.akamai.com\"] && process.file.name != \"\"\n agent_version: ''\n filters: []\n- id: ip_lookup_domain\n version: 61534f27\n description: A process checked the public IP address of the host\n expression: connect.addr.hostname in [\"icanhazip.com\", \"ip-api.com\", \"myip.opendns.com\",\n \"checkip.amazonaws.com\", \"whatismyip.akamai.com\"] && connect.addr.is_public ==\n true && connect.addr.port in [80, 443]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: java_shell_execution_parent\n version: 1bcff0aa\n description: A java process spawned a shell, shell utility, or HTTP utility\n expression: |-\n (exec.file.path in [ \"/bin/dash\",\n \"/usr/bin/dash\",\n \"/bin/sh\",\n \"/bin/static-sh\",\n \"/usr/bin/sh\",\n \"/bin/bash\",\n \"/usr/bin/bash\",\n \"/bin/bash-static\",\n \"/usr/bin/zsh\",\n \"/usr/bin/ash\",\n \"/usr/bin/csh\",\n \"/usr/bin/ksh\",\n \"/usr/bin/tcsh\",\n \"/usr/lib/initramfs-tools/bin/busybox\",\n \"/bin/busybox\",\n \"/usr/bin/fish\",\n \"/bin/ksh93\",\n \"/bin/rksh\",\n \"/bin/rksh93\",\n \"/bin/lksh\",\n \"/bin/mksh\",\n \"/bin/mksh-static\",\n \"/usr/bin/csharp\",\n \"/bin/posh\",\n \"/usr/bin/rc\",\n \"/bin/sash\",\n \"/usr/bin/yash\",\n \"/bin/zsh5\",\n \"/bin/zsh5-static\" ] ||\n exec.comm in [\"wget\", \"curl\", \"lwp-download\"] ||\n exec.file.path in [\"/bin/cat\",\"/bin/chgrp\",\"/bin/chmod\",\"/bin/chown\",\"/bin/cp\",\"/bin/date\",\"/bin/dd\",\"/bin/df\",\"/bin/dir\",\"/bin/echo\",\"/bin/ln\",\"/bin/ls\",\"/bin/mkdir\",\"/bin/mknod\",\"/bin/mktemp\",\"/bin/mv\",\"/bin/pwd\",\"/bin/readlink\",\"/bin/rm\",\"/bin/rmdir\",\"/bin/sleep\",\"/bin/stty\",\"/bin/sync\",\"/bin/touch\",\"/bin/uname\",\"/bin/vdir\",\"/usr/bin/arch\",\"/usr/bin/b2sum\",\"/usr/bin/base32\",\"/usr/bin/base64\",\"/usr/bin/basename\",\"/usr/bin/chcon\",\"/usr/bin/cksum\",\"/usr/bin/comm\",\"/usr/bin/csplit\",\"/usr/bin/cut\",\"/usr/bin/dircolors\",\"/usr/bin/dirname\",\"/usr/bin/du\",\"/usr/bin/env\",\"/usr/bin/expand\",\"/usr/bin/expr\",\"/usr/bin/factor\",\"/usr/bin/fmt\",\"/usr/bin/fold\",\"/usr/bin/groups\",\"/usr/bin/head\",\"/usr/bin/hostid\",\"/usr/bin/id\",\"/usr/bin/install\",\"/usr/bin/join\",\"/usr/bin/link\",\"/usr/bin/logname\",\"/usr/bin/md5sum\",\"/usr/bin/md5sum.textutils\",\"/usr/bin/mkfifo\",\"/usr/bin/nice\",\"/usr/bin/nl\",\"/usr/bin/nohup\",\"/usr/bin/nproc\",\"/usr/bin/numfmt\",\"/usr/bin/od\",\"/usr/bin/paste\",\"/usr/bin/pathchk\",\"/usr/bin/pinky\",\"/usr/bin/pr\",\"/usr/bin/printenv\",\"/usr/bin/printf\",\"/usr/bin/ptx\",\"/usr/bin/realpath\",\"/usr/bin/runcon\",\"/usr/bin/seq\",\"/usr/bin/sha1sum\",\"/usr/bin/sha224sum\",\"/usr/bin/sha256sum\",\"/usr/bin/sha384sum\",\"/usr/bin/sha512sum\",\"/usr/bin/shred\",\"/usr/bin/shuf\",\"/usr/bin/sort\",\"/usr/bin/split\",\"/usr/bin/stat\",\"/usr/bin/stdbuf\",\"/usr/bin/sum\",\"/usr/bin/tac\",\"/usr/bin/tail\",\"/usr/bin/tee\",\"/usr/bin/test\",\"/usr/bin/timeout\",\"/usr/bin/tr\",\"/usr/bin/truncate\",\"/usr/bin/tsort\",\"/usr/bin/tty\",\"/usr/bin/unexpand\",\"/usr/bin/uniq\",\"/usr/bin/unlink\",\"/usr/bin/users\",\"/usr/bin/wc\",\"/usr/bin/who\",\"/usr/bin/whoami\",\"/usr/sbin/chroot\",\"/bin/busybox\"])\n && process.parent.file.name in [\"java\", \"jspawnhelper\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: jupyter_shell_execution\n version: d2d9243c\n description: A Jupyter notebook executed a shell\n expression: (exec.file.name in [\"cat\",\"chgrp\",\"chmod\",\"chown\",\"cp\",\"date\",\"dd\",\"df\",\"dir\",\"echo\",\"ln\",\"ls\",\"mkdir\",\"mknod\",\"mktemp\",\"mv\",\"pwd\",\"readlink\",\"rm\",\"rmdir\",\"sleep\",\"stty\",\"sync\",\"touch\",\"uname\",\"vdir\",\"arch\",\"b2sum\",\"base32\",\"base64\",\"basename\",\"chcon\",\"cksum\",\"comm\",\"csplit\",\"cut\",\"dircolors\",\"dirname\",\"du\",\"env\",\"expand\",\"expr\",\"factor\",\"fmt\",\"fold\",\"groups\",\"head\",\"hostid\",\"id\",\"install\",\"join\",\"link\",\"logname\",\"md5sum\",\"textutils\",\"mkfifo\",\"nice\",\"nl\",\"nohup\",\"nproc\",\"numfmt\",\"od\",\"paste\",\"pathchk\",\"pinky\",\"pr\",\"printenv\",\"printf\",\"ptx\",\"realpath\",\"runcon\",\"seq\",\"sha1sum\",\"sha224sum\",\"sha256sum\",\"sha384sum\",\"sha512sum\",\"shred\",\"shuf\",\"sort\",\"split\",\"stat\",\"stdbuf\",\"sum\",\"tac\",\"tail\",\"tee\",\"test\",\"timeout\",\"tr\",\"truncate\",\"tsort\",\"tty\",\"unexpand\",\"uniq\",\"unlink\",\"users\",\"wc\",\"who\",\"whoami\",\"chroot\"]\n || exec.file.name in [\"wget\", \"curl\", \"lwp-download\"] || exec.file.name in [\"dash\",\"sh\",\"static-sh\",\"sh\",\"bash\",\"bash\",\"bash-static\",\"zsh\",\"ash\",\"csh\",\"ksh\",\"tcsh\",\"busybox\",\"busybox\",\"fish\",\"ksh93\",\"rksh\",\"rksh93\",\"lksh\",\"mksh\",\"mksh-static\",\"csharp\",\"posh\",\"rc\",\"sash\",\"yash\",\"zsh5\",\"zsh5-static\"])\n && process.ancestors.comm in [\"jupyter-noteboo\", \"jupyter-lab\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: k8s_user_session\n version: c8407c7f\n description: A process was executed in a Kubernetes user session\n expression: exec.user_session.k8s_username != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_chmod\n version: 82c61c82\n description: A new kernel module was added\n expression: |-\n (\n (chmod.file.path in [ ~\"/lib/modules/**\", ~\"/usr/lib/modules/**\", ~\"/usr/lib/modules-load.d/**\", ~\"/etc/modules-load.d/**\", ~\"/etc/modprobe.d/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"] && process.ancestors.file.path != \"/usr/bin/kmod\"\n ) && chmod.file.destination.mode != chmod.file.mode\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_chown\n version: ca2cf124\n description: A new kernel module was added\n expression: |-\n (\n (chown.file.path in [ ~\"/lib/modules/**\", ~\"/usr/lib/modules/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"] && process.ancestors.file.path != \"/usr/bin/kmod\"\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_link\n version: a18ca197\n description: A new kernel module was added\n expression: |-\n (\n (link.file.path in [ ~\"/lib/modules/**\", ~\"/usr/lib/modules/**\", ~\"/usr/lib/modules-load.d/**\", ~\"/etc/modules-load.d/**\", ~\"/etc/modprobe.d/**\" ]\n || link.file.destination.path in [ ~\"/lib/modules/**\", ~\"/usr/lib/modules/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"] && process.ancestors.file.path != \"/usr/bin/kmod\"\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_load\n version: 904592b4\n description: A kernel module was loaded\n expression: load_module.loaded_from_memory == false && load_module.name not in [\"nf_tables\",\n \"iptable_filter\", \"ip6table_filter\", \"bpfilter\", \"ip6_tables\", \"ip6table_nat\",\n \"nf_reject_ipv4\", \"ipt_REJECT\", \"iptable_raw\", \"udp_diag\", \"inet_diag\"] && process.ancestors.file.name\n not in [~\"falcon*\", \"unattended-upgrade\", \"apt.systemd.daily\", \"xtables-legacy-multi\",\n \"ssm-agent-worker\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_load_container\n version: 139b666a\n description: A container loaded a new kernel module\n expression: load_module.name != \"\" && process.container.id !=\"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_load_from_memory\n version: 78122acd\n description: A kernel module was loaded from memory\n expression: load_module.loaded_from_memory == true\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_load_from_memory_container\n version: a277c753\n description: A kernel module was loaded from memory inside a container\n expression: load_module.loaded_from_memory == true && process.container.id !=\"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_open\n version: 55f9569\n description: A new kernel module was added\n expression: |-\n (\n open.flags & (O_CREAT|O_TRUNC|O_RDWR|O_WRONLY) > 0 &&\n (open.file.path in [ ~\"/lib/modules/**\", ~\"/usr/lib/modules/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\"] && process.ancestors.file.path != \"/usr/bin/kmod\"\n )\n agent_version: ''\n filters: []\n- id: kernel_module_rename\n version: 9d8cb7d8\n description: A new kernel module was added\n expression: |-\n (\n (rename.file.path in [ ~\"/lib/modules/**\", ~\"/usr/lib/modules/**\" ]\n || rename.file.destination.path in [ ~\"/lib/modules/**\", ~\"/usr/lib/modules/**\", ~\"/usr/lib/modules-load.d/**\", ~\"/etc/modules-load.d/**\", ~\"/etc/modprobe.d/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"] && process.ancestors.file.path != \"/usr/bin/kmod\"\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_unlink\n version: 652391be\n description: A new kernel module was added\n expression: |-\n (\n (unlink.file.path in [ ~\"/lib/modules/**\", ~\"/usr/lib/modules/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"] && process.ancestors.file.path != \"/usr/bin/kmod\"\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_module_utimes\n version: 405d45e7\n description: A new kernel module was added\n expression: |-\n (\n (utimes.file.path in [ ~\"/lib/modules/**\", ~\"/usr/lib/modules/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"] && process.ancestors.file.path != \"/usr/bin/kmod\"\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kernel_process_masquerade\n version: 817d4169\n description: A process is masquerading as a kernel thread by using bracket notation\n in its name\n expression: (exec.comm in [r\"^\\[.*\\]$\"] || exec.argv0 in [r\"^\\[.*\\]$\"]) && (process.parent.ppid\n !=2 || process.args != \"\")\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: kmod_list\n version: c353a548\n description: Kernel modules were listed using the kmod command\n expression: exec.comm == \"kmod\" && exec.args in [~\"*list*\"]\n agent_version: ''\n filters: []\n- id: known_dll_registry_key_modified\n version: 49b8fe22\n description: Windows Known DLLs location registry key modified\n expression: set.registry.key_path in [~\"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\n Manager\\KnownDLLs*\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: kubernetes_dns_enumeration\n version: 475c3a9f\n description: Kubernetes DNS enumeration\n expression: dns.question.name == \"any.any.svc.cluster.local\" && dns.question.type\n == SRV && process.container.id != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ld_audit_unusual_library_path\n version: 36430a84\n description: The LD_AUDIT variable is populated by a link to a suspicious file directory\n expression: \"process.envs in [\\\"LD_AUDIT\\\"] && \\n(\\n mmap.file.path in [~\\\"/home/*\\\"\\\n , ~\\\"/tmp/*\\\", ~\\\"/dev/shm/*\\\"] || \\n mmap.file.in_upper_layer == true\\n) &&\\n\\\n mmap.protection & (PROT_EXEC) > 0 \"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ld_preload_unusual_library_path\n version: cc6fd0c4\n description: The LD_PRELOAD variable is populated by a link to a suspicious file\n directory\n expression: exec.envs in [~\"LD_PRELOAD=*/tmp/*\", ~\"LD_PRELOAD=/dev/shm/*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: memfd_create\n version: 5908512a\n description: memfd object created\n expression: exec.file.name =~ \"memfd*\" && exec.file.path == \"\" && process.parent.file.path\n not in [\"/usr/bin/runc\", \"/usr/sbin/runc\", \"/usr/bin/docker-runc\" , \"/run/docker/runtime-runc/moby/*\",\n \"/x86_64-bottlerocket-linux-gnu/sys-root/usr/bin/runc\"] && !(process.comm == \"dd-ipc-helper\"\n && exec.file.name in [\"memfd:spawn_worker_trampoline (deleted)\", \"memfd:spawn_worker_trampoline\"])\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: mining_pool_domain\n version: 4e0f8e8d\n description: A process connected to a cryptocurrency mining pool\n expression: connect.addr.hostname in [~\"*.minexmr.com\", \"minexmr.com\", ~\"*.nanopool.org\",\n \"nanopool.org\", ~\"*.supportxmr.com\", \"supportxmr.com\", ~\"*.c3pool.com\", \"c3pool.com\",\n ~\"*.p2pool.io\", \"p2pool.io\", ~\"*.ethermine.org\", \"ethermine.org\", ~\"*.f2pool.com\",\n \"f2pool.com\", ~\"*.poolin.me\", \"poolin.me\", ~\"*.rplant.xyz\", \"rplant.xyz\", ~\"*.miningocean.org\",\n \"miningocean.org\", \"donate.v2.xmrig.com\", ~\"*.hashvault.pro\", \"hashvault.pro\",\n ~\"*.moneroocean.stream\", \"moneroocean.stream\", ~\"*.skypool.org\", \"skypool.org\",\n ~\"*.xmrpool.eu\", \"xmrpool.eu\", ~\"*.pool.kryptex.com\", \"pool.kryptex.com\", ~\"*.herominers.com\",\n \"herominers.com\", ~\"*.solopool.org\", \"solopool.org\", ~\"*.monerohash.com\", \"monerohash.com\",\n ~\"*.antpool.com\", \"antpool.com\", ~\"*.pool.xmr.pt\", \"pool.xmr.pt\", ~\"*.monerod.org\",\n \"monerod.org\", ~\"*.dxpool.com\", \"dxpool.com\", ~\"*.bohemianpool.com\", \"bohemianpool.com\",\n ~\"*.prohashing.com\", \"prohashing.com\", ~\"*.mining-dutch.nl\", \"mining-dutch.nl\",\n ~\"*.gntl.uk\", \"gntl.uk\", ~\"*.fairhash.org\", \"fairhash.org\", ~\"*.volt-mine.com\",\n \"volt-mine.com\", ~\"*.zeropool.io\", \"zeropool.io\", ~\"*.fastpool.xyz\", \"fastpool.xyz\",\n ~\"*.xmr-pool.com\", \"xmr-pool.com\", ~\"*.zergpool.com\", \"zergpool.com\", ~\"*.xmrminers.com\",\n \"xmrminers.com\", ~\"*.monerop.com\", \"monerop.com\", ~\"*.pool-pay.com\", \"pool-pay.com\",\n ~\"*.solopool.pro\", \"solopool.pro\", ~\"*.frjoga.com\", \"frjoga.com\", ~\"*.infinium.space\",\n \"infinium.space\", ~\"*.minorpool.com\", \"minorpool.com\", ~\"*.cedric-crispin.com\",\n \"cedric-crispin.com\", ~\"*.aikapool.com\", \"aikapool.com\", ~\"*.2miners.com\", \"2miners.com\",\n ~\"*.h9.com\", \"h9.com\", ~\"*.ekapool.com\", \"ekapool.com\", ~\"*.k1pool.com\", \"k1pool.com\",\n ~\"*.raptorhash.net\", \"raptorhash.net\", ~\"*.miningmadness.com\", \"miningmadness.com\",\n ~\"*.zephyrprotocol.com\", \"zephyrprotocol.com\", ~\"*.thunderhash.com\", \"thunderhash.com\",\n ~\"*.newpool.xyz\", \"newpool.xyz\", ~\"*.coinminerhub.com\", \"coinminerhub.com\", ~\"*.safex.org\",\n \"safex.org\", ~\"*.safex.ninja\", \"safex.ninja\"] && connect.addr.is_public == true\n && connect.addr.port not in [53, 80, 443]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: mining_pool_lookup\n version: 4241c309\n description: A process resolved a DNS name associated with cryptomining activity\n expression: dns.question.name in [~\"*.minexmr.com\", \"minexmr.com\", ~\"*.nanopool.org\",\n \"nanopool.org\", ~\"*.supportxmr.com\", \"supportxmr.com\", ~\"*.c3pool.com\", \"c3pool.com\",\n ~\"*.p2pool.io\", \"p2pool.io\", ~\"*.ethermine.org\", \"ethermine.org\", ~\"*.f2pool.com\",\n \"f2pool.com\", ~\"*.poolin.me\", \"poolin.me\", ~\"*.rplant.xyz\", \"rplant.xyz\", ~\"*.miningocean.org\",\n \"miningocean.org\", \"donate.v2.xmrig.com\", ~\"*.hashvault.pro\", \"hashvault.pro\",\n ~\"*.moneroocean.stream\", \"moneroocean.stream\", ~\"*.skypool.org\", \"skypool.org\",\n ~\"*.xmrpool.eu\", \"xmrpool.eu\", ~\"*.pool.kryptex.com\", \"pool.kryptex.com\", ~\"*.herominers.com\",\n \"herominers.com\", ~\"*.solopool.org\", \"solopool.org\", ~\"*.monerohash.com\", \"monerohash.com\",\n ~\"*.antpool.com\", \"antpool.com\", ~\"*.pool.xmr.pt\", \"pool.xmr.pt\", ~\"*.monerod.org\",\n \"monerod.org\", ~\"*.dxpool.com\", \"dxpool.com\", ~\"*.bohemianpool.com\", \"bohemianpool.com\",\n ~\"*.prohashing.com\", \"prohashing.com\", ~\"*.mining-dutch.nl\", \"mining-dutch.nl\",\n ~\"*.gntl.uk\", \"gntl.uk\", ~\"*.fairhash.org\", \"fairhash.org\", ~\"*.volt-mine.com\",\n \"volt-mine.com\", ~\"*.zeropool.io\", \"zeropool.io\", ~\"*.fastpool.xyz\", \"fastpool.xyz\",\n ~\"*.xmr-pool.com\", \"xmr-pool.com\", ~\"*.zergpool.com\", \"zergpool.com\", ~\"*.xmrminers.com\",\n \"xmrminers.com\", ~\"*.monerop.com\", \"monerop.com\", ~\"*.pool-pay.com\", \"pool-pay.com\",\n ~\"*.solopool.pro\", \"solopool.pro\", ~\"*.frjoga.com\", \"frjoga.com\", ~\"*.infinium.space\",\n \"infinium.space\", ~\"*.minorpool.com\", \"minorpool.com\", ~\"*.cedric-crispin.com\",\n \"cedric-crispin.com\", ~\"*.aikapool.com\", \"aikapool.com\", ~\"*.2miners.com\", \"2miners.com\",\n ~\"*.h9.com\", \"h9.com\", ~\"*.ekapool.com\", \"ekapool.com\", ~\"*.k1pool.com\", \"k1pool.com\",\n ~\"*.raptorhash.net\", \"raptorhash.net\", ~\"*.miningmadness.com\", \"miningmadness.com\",\n ~\"*.zephyrprotocol.com\", \"zephyrprotocol.com\", ~\"*.thunderhash.com\", \"thunderhash.com\",\n ~\"*.newpool.xyz\", \"newpool.xyz\", ~\"*.coinminerhub.com\", \"coinminerhub.com\", ~\"*.safex.org\",\n \"safex.org\", ~\"*.safex.ninja\", \"safex.ninja\"] && process.file.name != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: mount_host_fs\n version: accb4f\n description: The host file system was mounted in a container\n expression: mount.source.path == \"/\" && mount.fs_type != \"overlay\" && process.container.id\n != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: mount_in_container\n version: db891c5c\n description: The mount system call was successfully executed in a container\n expression: mount.retval == 0 && process.container.id != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: mount_proc_hide\n version: fd887e01\n description: Process hidden using mount\n expression: mount.mountpoint.path in [~\"/proc/1*\", ~\"/proc/2*\", ~\"/proc/3*\", ~\"/proc/4*\",\n ~\"/proc/5*\", ~\"/proc/6*\", ~\"/proc/7*\", ~\"/proc/8*\", ~\"/proc/9*\"] && process.argv0\n not in [\"runc\", ~\"/*/runc\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: net_file_download\n version: 75b930ad\n description: A suspicious file was written by a network utility\n expression: |-\n open.flags & O_CREAT > 0 && process.comm in [\"wget\", \"curl\", \"lwp-download\"]\n && (\n (open.file.path =~ \"/tmp/**\" && open.file.name in [~\"*.sh\", ~\"*.c\", ~\"*.so\", ~\"*.ko\"])\n || open.file.path in [~\"/usr/**\", ~\"/lib/**\", ~\"/etc/**\", ~\"/var/tmp/**\", ~\"/dev/shm/**\"]\n )\n agent_version: ''\n filters: []\n- id: net_unusual_request\n version: 3df2d9ef\n description: Network utility executed with suspicious URI\n expression: 'exec.comm in [\"wget\", \"curl\", \"lwp-download\"] && exec.args in [~\"*.php*\",\n ~\"*.jpg*\"] '\n agent_version: ''\n filters: []\n- id: net_util\n version: fc362090\n description: A network utility was executed\n expression: |-\n (exec.comm in [\"socat\", \"dig\", \"nslookup\", \"host\", ~\"netcat*\", ~\"nc*\", \"ncat\"] ||\n exec.comm in [\"wget\", \"curl\", \"lwp-download\"]) &&\n process.container.id == \"\" && exec.args not in [ ~\"*localhost*\", ~\"*127.0.0.1*\", ~\"*motd.ubuntu.com*\" ]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: net_util_exfiltration\n version: 5f7c8871\n description: Exfiltration attempt via network utility\n expression: |-\n exec.comm in [\"wget\", \"curl\", \"lwp-download\"] &&\n exec.args_options in [ ~\"post-file=*\", ~\"post-data=*\", ~\"T=*\", ~\"d=@*\", ~\"upload-file=*\", ~\"F=file*\"] &&\n exec.args not in [~\"*localhost*\", ~\"*127.0.0.1*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: net_util_in_container\n version: 69e03ac1\n description: A network utility was executed in a container\n expression: |-\n (exec.comm in [\"socat\", \"dig\", \"nslookup\", \"host\", ~\"netcat*\", ~\"nc*\", \"ncat\"] ||\n exec.comm in [\"wget\", \"curl\", \"lwp-download\"]) &&\n process.container.id != \"\" && exec.args not in [ ~\"*localhost*\", ~\"*127.0.0.1*\", ~\"*motd.ubuntu.com*\" ]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: network_sniffing_tool\n version: 4ae409bf\n description: Local account groups were enumerated after container start up\n expression: exec.file.name in [\"tcpdump\", \"tshark\"]\n agent_version: ''\n filters: []\n- id: new_binary_execution_in_container\n version: 9dc42e1d\n description: A container executed a new binary not found in the container image\n expression: process.container.id != \"\" && process.file.in_upper_layer && process.file.modification_time\n < 30s && exec.file.name != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: nohup_usage\n version: 8a570532\n description: nohup was used to ignore process termination signals\n expression: exec.file.name != \"\" && process.parent.comm == \"nohup\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: nsenter_in_container\n version: de62a014\n description: nsenter used to breakout of container\n expression: exec.file.name == \"nsenter\" && exec.args_options in [\"target=1\", \"t=1\"]\n && process.container.id != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: nsswitch_conf_mod_chmod\n version: d301aedf\n description: nsswitch may have been modified without authorization\n expression: |-\n (\n (chmod.file.path in [ \"/etc/nsswitch.conf\" ])\n ) && chmod.file.destination.mode != chmod.file.mode && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: nsswitch_conf_mod_chown\n version: '69383592'\n description: nsswitch may have been modified without authorization\n expression: |-\n (\n (chown.file.path in [ \"/etc/nsswitch.conf\" ])\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid) && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: nsswitch_conf_mod_link\n version: e0565b29\n description: Nsswitch Configuration Modified\n expression: |-\n (\n (link.file.path in [ \"/etc/nsswitch.conf\" ]\n || link.file.destination.path in [ \"/etc/nsswitch.conf\" ])\n )\n agent_version: ''\n filters: []\n- id: nsswitch_conf_mod_open\n version: b5602c6f\n description: Nsswitch Configuration Modified\n expression: |-\n (\n open.flags & ((O_RDWR|O_WRONLY|O_CREAT)) > 0 &&\n (open.file.path in [ \"/etc/nsswitch.conf\" ])\n )\n agent_version: ''\n filters: []\n- id: nsswitch_conf_mod_open_v2\n version: abef53c9\n description: nsswitch may have been modified without authorization\n expression: |-\n (\n open.flags & ((O_RDWR|O_WRONLY|O_CREAT)) > 0 &&\n (open.file.path in [ \"/etc/nsswitch.conf\" ])\n ) && process.container.id != \"\" && container.created_at > 90s && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: nsswitch_conf_mod_rename\n version: aad34176\n description: Nsswitch Configuration Modified\n expression: |-\n (\n (rename.file.path in [ \"/etc/nsswitch.conf\" ]\n || rename.file.destination.path in [ \"/etc/nsswitch.conf\" ])\n )\n agent_version: ''\n filters: []\n- id: nsswitch_conf_mod_unlink\n version: 8a3e2fbb\n description: Nsswitch Configuration Modified\n expression: |-\n (\n (unlink.file.path in [ \"/etc/nsswitch.conf\" ])\n )\n agent_version: ''\n filters: []\n- id: nsswitch_conf_mod_utimes\n version: 902597c0\n description: Nsswitch Configuration Modified\n expression: |-\n (\n (utimes.file.path in [ \"/etc/nsswitch.conf\" ])\n )\n agent_version: ''\n filters: []\n- id: ntds_in_commandline\n version: 5cdd4bba\n description: NTDS file referenced in commandline\n expression: exec.cmdline =~ \"*ntds.dit*\"\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: offensive_k8s_tool\n version: b83fba22\n description: A known kubernetes pentesting tool has been executed\n expression: (exec.file.name in [ ~\"python*\" ] && (\"KubiScan.py\" in exec.argv ||\n \"kubestriker\" in exec.argv ) ) || exec.file.name in [ \"kubiscan\",\"kdigger\",\"kube-hunter\",\"rakkess\",\"peirates\",\"kubescape\",\"kubeaudit\",\"kube-linter\",\"stratus\",~\"botb-*\"]\n agent_version: ''\n filters: []\n- id: overwrite_entrypoint\n version: 38eea29c\n description: A process attempted to overwrite the container entrypoint\n expression: open.file.path == \"/proc/self/fd/1\" && open.flags & O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY\n > 0 && process.container.id != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: p2pinfect_connection\n version: 169317f9\n description: A process made a connection to a port associated with P2PInfect malware\n expression: (connect.addr.family == AF_INET || connect.addr.family == AF_INET6)\n && connect.addr.is_public == true && connect.addr.port >= 60100 && connect.addr.port\n <= 60150\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - hash:\n field: process.file\n- id: package_management_in_container\n version: c152fcaf\n description: Package management was detected in a container\n expression: exec.file.path in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\",\n \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\",\n \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"] && process.container.id !=\n \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pam_modification_chmod\n version: 974a676e\n description: PAM may have been modified without authorization\n expression: |-\n (\n (chmod.file.path in [ ~\"/etc/pam.d/**\", \"/etc/pam.conf\", ~\"/lib/security/*\", ~\"/usr/lib/security/*\", ~\"/lib64/security/*\", ~\"/usr/lib64/security/*\"])\n ) && chmod.file.destination.mode != chmod.file.mode\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pam_modification_chown\n version: ca22d0ab\n description: PAM may have been modified without authorization\n expression: |-\n (\n (chown.file.path in [ ~\"/etc/pam.d/**\", \"/etc/pam.conf\", ~\"/lib/security/*\", ~\"/usr/lib/security/*\", ~\"/lib64/security/*\", ~\"/usr/lib64/security/*\" ])\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pam_modification_link\n version: 3d5d6b31\n description: PAM may have been modified without authorization\n expression: |-\n (\n (link.file.path in [ ~\"/etc/pam.d/**\", \"/etc/pam.conf\", ~\"/lib/security/*\", ~\"/usr/lib/security/*\", ~\"/lib64/security/*\", ~\"/usr/lib64/security/*\"]\n || link.file.destination.path in [ ~\"/etc/pam.d/**\", \"/etc/pam.conf\", ~\"/lib/security/*\", ~\"/usr/lib/security/*\", ~\"/lib64/security/*\", ~\"/usr/lib64/security/*\"])\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pam_modification_open\n version: 9440f452\n description: PAM may have been modified without authorization\n expression: |-\n (\n open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 &&\n (open.file.path in [ ~\"/etc/pam.d/**\", \"/etc/pam.conf\", ~\"/lib/security/*\", ~\"/usr/lib/security/*\", ~\"/lib64/security/*\", ~\"/usr/lib64/security/*\" ])\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pam_modification_rename\n version: bd1d257a\n description: PAM may have been modified without authorization\n expression: |-\n (\n (rename.file.path in [ ~\"/etc/pam.d/**\", \"/etc/pam.conf\", ~\"/lib/security/*\", ~\"/usr/lib/security/*\", ~\"/lib64/security/*\", ~\"/usr/lib64/security/*\" ]\n || rename.file.destination.path in [ ~\"/etc/pam.d/**\", \"/etc/pam.conf\", ~\"/lib/security/*\", ~\"/usr/lib/security/*\", ~\"/lib64/security/*\", ~\"/usr/lib64/security/*\" ])\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pam_modification_unlink\n version: c3dc53e1\n description: PAM may have been modified without authorization\n expression: |-\n (\n (unlink.file.path in [ ~\"/etc/pam.d/**\", \"/etc/pam.conf\", ~\"/lib/security/*\", ~\"/usr/lib/security/*\", ~\"/lib64/security/*\", ~\"/usr/lib64/security/*\" ])\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pam_modification_utimes\n version: d377b599\n description: PAM may have been modified without authorization\n expression: |-\n (\n (utimes.file.path in [ ~\"/etc/pam.d/**\", \"/etc/pam.conf\" ])\n ) && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: passwd_execution\n version: e1d41f5e\n description: The passwd or chpasswd utility was used to modify an account password\n expression: exec.file.path in [\"/usr/bin/passwd\", \"/usr/sbin/chpasswd\"] && exec.args_flags\n not in [\"S\", \"status\"]\n agent_version: ''\n filters: []\n- id: paste_site\n version: b528c8d4\n description: A DNS lookup was done for a pastebin-like site\n expression: dns.question.name in [\"pastebin.com\", \"ghostbin.com\", \"termbin.com\",\n \"klgrth.io\", \"rentry.co\", \"transfer.sh\"] && process.file.name != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: paste_site_domain\n version: ed730586\n description: A process connected to a paste site\n expression: connect.addr.hostname in [\"pastebin.com\", \"ghostbin.com\", \"termbin.com\",\n \"klgrth.io\", \"rentry.co\", \"transfer.sh\"] && connect.addr.is_public == true &&\n connect.addr.port in [80, 443]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pci_11_5_critical_binaries_chmod\n version: 1945831d\n description: Critical system binaries may have been modified\n expression: |-\n (\n (chmod.file.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n ) && chmod.file.destination.mode != chmod.file.mode\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pci_11_5_critical_binaries_chown\n version: 21da2189\n description: Critical system binaries may have been modified\n expression: |-\n (\n (chown.file.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pci_11_5_critical_binaries_link\n version: a7ac587c\n description: Critical system binaries may have been modified\n expression: |-\n (\n (link.file.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ]\n || link.file.destination.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pci_11_5_critical_binaries_open\n version: f583ba7c\n description: Critical system binaries may have been modified\n expression: |-\n (\n open.flags & (O_CREAT|O_TRUNC|O_RDWR|O_WRONLY) > 0 &&\n open.file.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ]\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters: []\n- id: pci_11_5_critical_binaries_open_v2\n version: 45abd074\n description: Critical system binaries may have been modified\n expression: |-\n (\n open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 &&\n open.file.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ]\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n ) && process.container.id != \"\" && container.created_at > 90s\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pci_11_5_critical_binaries_rename\n version: e0bc0857\n description: Critical system binaries may have been modified\n expression: |-\n (\n (rename.file.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ]\n || rename.file.destination.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pci_11_5_critical_binaries_unlink\n version: 3bb086ca\n description: Critical system binaries may have been modified\n expression: |-\n (\n (unlink.file.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pci_11_5_critical_binaries_utimes\n version: 6d979630\n description: Critical system binaries may have been modified\n expression: |-\n (\n (utimes.file.path in [ ~\"/bin/*\", ~\"/sbin/*\", ~\"/usr/bin/*\", ~\"/usr/sbin/*\", ~\"/usr/local/bin/*\", ~\"/usr/local/sbin/*\", ~\"/boot/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: pentest_domain\n version: c05d76a\n description: A process connected to a penetration testing domain\n expression: connect.addr.hostname in [~\"*.interact.sh\", ~\"*.oast.pro\", ~\"*.oast.live\",\n ~\"*.oast.fun\", ~\"*.oast.me\", ~\"*.burpcollaborator.net\", ~\"*.oastify.com\", ~\"*canarytokens.com\",\n ~\"*.requestbin.net\", ~\"*.dnslog.cn\"] && connect.addr.is_public == true\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: perl_shell\n version: 2eb4b1e8\n description: Perl executed with suspicious argument\n expression: exec.file.name == ~\"perl*\" && exec.args_flags in [\"e\"] && (exec.args\n in [~\"*socket*\", ~\"*bind*\", ~\"*sockaddr*\", ~\"*listen*\", ~\"*accept\", ~\"*stdin*\",\n ~\"*stdout\"])\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: potential_web_shell_parent\n version: b67ffbcd\n description: A web application spawned a shell or shell utility\n expression: |-\n (exec.file.path in [ \"/bin/dash\",\n \"/usr/bin/dash\",\n \"/bin/sh\",\n \"/bin/static-sh\",\n \"/usr/bin/sh\",\n \"/bin/bash\",\n \"/usr/bin/bash\",\n \"/bin/bash-static\",\n \"/usr/bin/zsh\",\n \"/usr/bin/ash\",\n \"/usr/bin/csh\",\n \"/usr/bin/ksh\",\n \"/usr/bin/tcsh\",\n \"/usr/lib/initramfs-tools/bin/busybox\",\n \"/bin/busybox\",\n \"/usr/bin/fish\",\n \"/bin/ksh93\",\n \"/bin/rksh\",\n \"/bin/rksh93\",\n \"/bin/lksh\",\n \"/bin/mksh\",\n \"/bin/mksh-static\",\n \"/usr/bin/csharp\",\n \"/bin/posh\",\n \"/usr/bin/rc\",\n \"/bin/sash\",\n \"/usr/bin/yash\",\n \"/bin/zsh5\",\n \"/bin/zsh5-static\" ] || exec.comm in [\"wget\", \"curl\", \"lwp-download\"] || exec.file.path in [\"/bin/cat\",\"/bin/chgrp\",\"/bin/chmod\",\"/bin/chown\",\"/bin/cp\",\"/bin/date\",\"/bin/dd\",\"/bin/df\",\"/bin/dir\",\"/bin/echo\",\"/bin/ln\",\"/bin/ls\",\"/bin/mkdir\",\"/bin/mknod\",\"/bin/mktemp\",\"/bin/mv\",\"/bin/pwd\",\"/bin/readlink\",\"/bin/rm\",\"/bin/rmdir\",\"/bin/sleep\",\"/bin/stty\",\"/bin/sync\",\"/bin/touch\",\"/bin/uname\",\"/bin/vdir\",\"/usr/bin/arch\",\"/usr/bin/b2sum\",\"/usr/bin/base32\",\"/usr/bin/base64\",\"/usr/bin/basename\",\"/usr/bin/chcon\",\"/usr/bin/cksum\",\"/usr/bin/comm\",\"/usr/bin/csplit\",\"/usr/bin/cut\",\"/usr/bin/dircolors\",\"/usr/bin/dirname\",\"/usr/bin/du\",\"/usr/bin/env\",\"/usr/bin/expand\",\"/usr/bin/expr\",\"/usr/bin/factor\",\"/usr/bin/fmt\",\"/usr/bin/fold\",\"/usr/bin/groups\",\"/usr/bin/head\",\"/usr/bin/hostid\",\"/usr/bin/id\",\"/usr/bin/install\",\"/usr/bin/join\",\"/usr/bin/link\",\"/usr/bin/logname\",\"/usr/bin/md5sum\",\"/usr/bin/md5sum.textutils\",\"/usr/bin/mkfifo\",\"/usr/bin/nice\",\"/usr/bin/nl\",\"/usr/bin/nohup\",\"/usr/bin/nproc\",\"/usr/bin/numfmt\",\"/usr/bin/od\",\"/usr/bin/paste\",\"/usr/bin/pathchk\",\"/usr/bin/pinky\",\"/usr/bin/pr\",\"/usr/bin/printenv\",\"/usr/bin/printf\",\"/usr/bin/ptx\",\"/usr/bin/realpath\",\"/usr/bin/runcon\",\"/usr/bin/seq\",\"/usr/bin/sha1sum\",\"/usr/bin/sha224sum\",\"/usr/bin/sha256sum\",\"/usr/bin/sha384sum\",\"/usr/bin/sha512sum\",\"/usr/bin/shred\",\"/usr/bin/shuf\",\"/usr/bin/sort\",\"/usr/bin/split\",\"/usr/bin/stat\",\"/usr/bin/stdbuf\",\"/usr/bin/sum\",\"/usr/bin/tac\",\"/usr/bin/tail\",\"/usr/bin/tee\",\"/usr/bin/test\",\"/usr/bin/timeout\",\"/usr/bin/tr\",\"/usr/bin/truncate\",\"/usr/bin/tsort\",\"/usr/bin/tty\",\"/usr/bin/unexpand\",\"/usr/bin/uniq\",\"/usr/bin/unlink\",\"/usr/bin/users\",\"/usr/bin/wc\",\"/usr/bin/who\",\"/usr/bin/whoami\",\"/usr/sbin/chroot\",\"/bin/busybox\"]) &&\n (process.parent.file.name in [\"apache2\", \"nginx\", ~\"tomcat*\", \"httpd\"] || process.parent.file.name =~ \"php*\")\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: prctl_masquerading\n version: e0bda10b\n description: Detects use of prctl to change process name to mimic legitimate system\n processes or kernel threads\n expression: |-\n prctl.option == PR_SET_NAME && (prctl.new_name in [\"systemd\", \"init\", \"sshd\", \"cron\", \"crond\", \"rsyslogd\", \"syslog-ng\",\n \"dbus-daemon\", \"dbus-broker\", \"udevd\", \"systemd-udevd\", \"NetworkManager\",\n \"systemd-journald\", \"systemd-logind\", \"systemd-resolved\", \"systemd-networkd\",\n \"systemd-timesyncd\", \"accounts-daemon\", \"polkitd\", \"auditd\"] || prctl.new_name in [r\"^\\[.*\\]$\"]) && process.file.name not in [\"systemd\", \"init\", \"sshd\", \"cron\", \"crond\", \"rsyslogd\", \"syslog-ng\",\n \"dbus-daemon\", \"dbus-broker\", \"udevd\", \"systemd-udevd\", \"NetworkManager\",\n \"systemd-journald\", \"systemd-logind\", \"systemd-resolved\", \"systemd-networkd\",\n \"systemd-timesyncd\", \"accounts-daemon\", \"polkitd\", \"auditd\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ps_discovery\n version: a0a32c4b\n description: Processes were listed using the ps command\n expression: exec.comm == \"ps\" && exec.argv not in [\"-p\", \"--pid\"] && process.ancestors.file.name\n not in [\"qualys-cloud-agent\", \"amazon-ssm-agent\"] && process.parent.file.name\n not in [\"rkhunter\", \"jspawnhelper\", ~\"vm-agent*\", \"PassengerAgent\", \"node\", \"wdavdaemon\",\n \"chkrootkit\", \"tsagentd\", \"wazuh-modulesd\", \"wdavdaemon\", \"talend-remote-engine-service\",\n \"check_procs\", \"newrelic-daemon\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ptrace_antidebug\n version: a6289ff7\n description: A process uses an anti-debugging technique to block debuggers\n expression: ptrace.request == PTRACE_TRACEME && process.file.name != \"\"\n agent_version: ''\n filters: []\n- id: ptrace_injection\n version: 6d290a43\n description: A process attempted to inject code into another process\n expression: ptrace.request == PTRACE_POKETEXT || ptrace.request == PTRACE_POKEDATA\n || ptrace.request == PTRACE_POKEUSR\n agent_version: ''\n filters: []\n- id: pwnkit_privilege_escalation\n version: c83bbabc\n description: A process was spawned with indicators of exploitation of CVE-2021-4034\n expression: (exec.file.path == \"/usr/bin/pkexec\" && exec.envs in [~\"*SHELL*\", ~\"*PATH*\"]\n && exec.envs not in [~\"*DISPLAY*\", ~\"*DESKTOP_SESSION*\"] && exec.uid != 0)\n agent_version: ''\n filters: []\n- id: python_cli_code\n version: '989474'\n description: Python code was provided on the command line\n expression: exec.file.name == ~\"python*\" && exec.args_flags in [\"c\"] && exec.args\n in [~\"*-c*SOCK_STREAM*\", ~\"*-c*subprocess*\", ~\"*-c*/bash*\", ~\"*-c*/bin/sh*\", ~\"*-c*pty.spawn*\"]\n && exec.args !~ \"*setuptools*\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ransomware_note\n version: ee40f85a\n description: Possible ransomware note created under common user directories\n expression: |-\n open.flags & O_CREAT > 0\n && open.file.path in [~\"/home/**\", ~\"/root/**\", ~\"/bin/**\", ~\"/usr/bin/**\", ~\"/opt/**\", ~\"/etc/**\", ~\"/var/log/**\", ~\"/var/lib/log/**\", ~\"/var/backup/**\", ~\"/var/www/**\"]\n && (open.file.name in [r\"(?i)(restore|recover|instruction|help|how_to|how\\ to|ransom).*(your_|recover|crypt|lock|ransom|instruction|files)\"] || open.file.name in [r\"RECOVER.*\\.txt\"]) && open.file.name not in [r\"\\.lock$\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: rc_scripts_modified\n version: af295b08\n description: RC scripts modified\n expression: (open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 && (open.file.path\n in [\"/etc/rc.common\", \"/etc/rc.local\"])) && process.ancestors.file.path not in\n [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\",\n \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\",\n \"/usr/lib/snapd/snapd\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: read_kubeconfig\n version: '80926379'\n description: The kubeconfig file was accessed\n expression: open.file.path in [~\"/home/*/.kube/config\", \"/root/.kube/config\"]\n agent_version: ''\n filters: []\n- id: redis_save_module\n version: b1cb9110\n description: Redis module has been created\n expression: (open.flags & (O_CREAT|O_TRUNC|O_RDWR|O_WRONLY) > 0 && open.file.path\n =~ \"/tmp/**\" && open.file.name in [~\"*.rdb\", ~\"*.aof\", ~\"*.so\"]) && process.file.name\n in [\"redis-check-rdb\", \"redis-server\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n actions:\n - hash: {}\n- id: registry_runkey_modified\n version: 3df7b8e9\n description: A Registry runkey has been modified\n expression: set.registry.key_path in [~\"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\",\n ~\"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Runonce\", ~\"HKEY_LOCAL_MACHINE\\Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Run\",\n ~\"HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\Install\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\",\n ~\"HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\Install\\Software\\Microsoft\\Windows\\CurrentVersion\\Runonce\",\n ~\"HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Terminal Server\\Install\\Software\\Microsoft\\Windows\\CurrentVersion\\RunonceEx\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: relay_attack_tool_execution\n version: f078acb1\n description: Process matches known relay attack tool\n expression: exec.file.name in [~\"*PetitPotam*\", ~\"*RottenPotato*\", ~\"*HotPotato*\",\n ~\"*JuicyPotato*\", ~\"*just_dce_*\", ~\"*Juicy Potato*\", \"rot.exe\", \"Potato.exe\",\n \"SpoolSample.exe\", \"Responder.exe\", ~\"*smbrelayx*\", ~\"*smbrelayx*\", ~\"*ntlmrelayx*\",\n ~\"*LocalPotato*\"] || exec.cmdline in [~\"*Invoke-Tater*\", ~\"*smbrelay*\", ~\"*ntlmrelay*\",\n ~\"*cme smb*\", ~\"*ntlm:NTLMhash*\", ~\"*Invoke-PetitPotam*\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: runc_modification\n version: c7144439\n description: The runc binary was modified in a non-standard way\n expression: |-\n open.file.path in [\"/usr/bin/runc\", \"/usr/sbin/runc\", \"/usr/bin/docker-runc\"]\n && open.flags & O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY > 0\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\"]\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: safeboot_modification\n version: 75fb1a6f\n description: Safeboot registry modified\n expression: set.registry.key_path in [~\"HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\SafeBoot\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: scheduled_task_creation\n version: 9c3f2289\n description: A scheduled task was created\n expression: exec.cmdline in [~\"*at.exe\",~\"*schtasks*\"] && exec.cmdline =~ \"*create*\"\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: selinux_disable_enforcement\n version: afa9a8ba\n description: SELinux enforcement status was disabled\n expression: selinux.enforce.status in [\"permissive\", \"disabled\"] && process.ancestors.args\n != ~\"*BECOME-SUCCESS*\"\n agent_version: ''\n filters: []\n- id: service_stop\n version: 8e434232\n description: systemctl used to stop a service\n expression: exec.file.name == \"systemctl\" && exec.args in [~\"*stop*\", ~\"*kill*\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: shell_history_deleted\n version: ff763e6\n description: Shell History was Deleted\n expression: unlink.file.name in [\".bash_history\", \".zsh_history\", \".fish_history\",\n \"fish_history\", \".dash_history\", \".sh_history\"] && unlink.file.path in [~\"/root/**\",\n ~\"/home/**\"] && process.comm not in [\"dockerd\", \"containerd\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: shell_history_symlink\n version: 31982e4d\n description: A symbolic link for shell history was created targeting /dev/null\n expression: exec.comm == \"ln\" && exec.args in [~\"*.*history*\", \"/dev/null\"]\n agent_version: ''\n filters: []\n- id: shell_history_truncated\n version: 38ec83e8\n description: Shell History was Deleted\n expression: open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 && open.file.name\n in [\".bash_history\", \".zsh_history\", \".fish_history\", \"fish_history\", \".dash_history\",\n \".sh_history\"] && open.file.path in [~\"/root/*\", ~\"/home/**\"] && process.file.name\n == \"truncate\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: shell_profile_modification\n version: d1cecdac\n description: Shell profile was modified\n expression: open.file.path in [~\"/home/*/*profile\", ~\"/home/*/*rc\"] && open.flags\n & ((O_CREAT|O_TRUNC|O_RDWR|O_WRONLY)) > 0\n agent_version: ''\n filters: []\n- id: sliver_c2_implant_execution\n version: ec10a8b2\n description: process arguments match sliver c2 implant\n expression: exec.cmdline =~ \"*NoExit *\" && exec.cmdline =~ \"*Command *\" && exec.cmdline\n =~ \"*[Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8*\"\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: ssh_authorized_keys_chmod\n version: e4096f79\n description: SSH modified keys may have been modified\n expression: |-\n (\n chmod.file.name in [ \"authorized_keys\", \"authorized_keys2\" ] && (chmod.file.path in [ ~\"/root/.ssh/*\", ~\"/home/*/.ssh/*\", ~\"/var/lib/*/.ssh/*\" ])\n ) && chmod.file.destination.mode != chmod.file.mode\n agent_version: ''\n filters: []\n- id: ssh_authorized_keys_chown\n version: 9639bf6\n description: SSH modified keys may have been modified\n expression: |-\n (\n chown.file.name in [ \"authorized_keys\", \"authorized_keys2\" ] && (chown.file.path in [ ~\"/root/.ssh/*\", ~\"/home/*/.ssh/*\", ~\"/var/lib/*/.ssh/*\" ])\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\n agent_version: ''\n filters: []\n- id: ssh_authorized_keys_link\n version: 81382bdd\n description: SSH Authorized Keys Modified\n expression: |-\n (\n link.file.name == \"authorized_keys\" && (link.file.path in [ ~\"*/.ssh/*\" ]\n || link.file.destination.path in [ ~\"*/.ssh/*\" ])\n )\n agent_version: ''\n filters: []\n- id: ssh_authorized_keys_open\n version: 1ae8f7d6\n description: SSH modified keys may have been modified\n expression: |-\n (\n open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 &&\n open.file.name in [ \"authorized_keys\", \"authorized_keys2\" ] && (open.file.path in [ ~\"/root/.ssh/*\", ~\"/home/*/.ssh/*\", ~\"/var/lib/*/.ssh/*\" ])\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssh_authorized_keys_open_v2\n version: 513f8108\n description: SSH modified keys may have been modified\n expression: |-\n (\n open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 &&\n open.file.name in [ \"authorized_keys\", \"authorized_keys2\" ] && (open.file.path in [ ~\"/root/.ssh/*\", ~\"/home/*/.ssh/*\", ~\"/var/lib/*/.ssh/*\" ])\n ) && process.container.id != \"\" && container.created_at > 90s\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssh_authorized_keys_rename\n version: fd3bdabf\n description: SSH Authorized Keys Modified\n expression: |-\n (\n rename.file.name == \"authorized_keys\" && (rename.file.path in [ ~\"*/.ssh/*\" ]\n || rename.file.destination.path in [ ~\"*/.ssh/*\" ])\n )\n agent_version: ''\n filters: []\n- id: ssh_authorized_keys_unlink\n version: 54cf4a88\n description: SSH Authorized Keys Modified\n expression: |-\n (\n unlink.file.name == \"authorized_keys\" && (unlink.file.path in [ ~\"*/.ssh/*\" ])\n )\n agent_version: ''\n filters: []\n- id: ssh_authorized_keys_utimes\n version: 59377e61\n description: SSH Authorized Keys Modified\n expression: |-\n (\n utimes.file.name == \"authorized_keys\" && (utimes.file.path in [ ~\"*/.ssh/*\" ])\n )\n agent_version: ''\n filters: []\n- id: ssh_it_tool_config_write\n version: 86ae3762\n description: The configuration directory for an ssh worm\n expression: open.file.path in [\"/root/.prng/*\", ~\"/home/*/.prng/*\", ~\"/root/.config/prng/*\",\n ~\"/home/*/.config/prng/*\"] && open.flags & (O_CREAT|O_TRUNC|O_RDWR|O_WRONLY) >\n 0\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssh_session\n version: 72bb35f4\n description: A process was executed in an SSH session\n expression: exec.comm != \"\" && process.ancestors.file.name in [\"sshd\"] && process.file.name\n != \"sshd\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssl_certificate_tampering_chmod\n version: d8ac6517\n description: SSL certificates may have been tampered with\n expression: |-\n (\n (chmod.file.path in [ ~\"/etc/ssl/certs/**\", ~\"/etc/pki/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n ) && chmod.file.mode != chmod.file.destination.mode\n && process.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.file.name !~ \"runc*\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssl_certificate_tampering_chown\n version: 3d04895f\n description: SSL certificates may have been tampered with\n expression: |-\n (\n (chown.file.path in [ ~\"/etc/ssl/certs/**\", ~\"/etc/pki/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\n && process.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.file.name !~ \"runc*\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssl_certificate_tampering_link\n version: eb594616\n description: SSL certificates may have been tampered with\n expression: |-\n (\n (link.file.path in [ ~\"/etc/ssl/certs/**\", ~\"/etc/pki/**\" ]\n || link.file.destination.path in [ ~\"/etc/ssl/certs/**\", ~\"/etc/pki/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.file.name !~ \"runc*\"\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssl_certificate_tampering_open\n version: c34bcf3a\n description: SSL certificates may have been tampered with\n expression: |-\n (\n open.flags & (O_CREAT|O_RDWR|O_WRONLY) > 0 &&\n (open.file.path in [ ~\"/etc/ssl/certs/**\", ~\"/etc/pki/**\" ])\n )\n && process.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.file.name !~ \"runc*\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssl_certificate_tampering_open_v2\n version: a90058eb\n description: SSL certificates may have been tampered with\n expression: |-\n (\n open.flags & (O_CREAT|O_RDWR|O_WRONLY) > 0 &&\n (open.file.path in [ ~\"/etc/ssl/certs/**\", ~\"/etc/pki/**\" ])\n )\n && process.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.file.name !~ \"runc*\"\n && process.container.id != \"\"\n && container.created_at > 90s\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssl_certificate_tampering_rename\n version: e42eefb4\n description: SSL certificates may have been tampered with\n expression: |-\n (\n (rename.file.path in [ ~\"/etc/ssl/certs/**\", ~\"/etc/pki/**\" ]\n || rename.file.destination.path in [ ~\"/etc/ssl/certs/**\", ~\"/etc/pki/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n && process.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.file.name !~ \"runc*\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: ssl_certificate_tampering_unlink\n version: 37c40311\n description: SSL certificates may have been tampered with\n expression: |-\n (\n (unlink.file.path in [ ~\"/etc/ssl/certs/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n && process.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.file.name !~ \"runc*\"\n agent_version: ''\n filters: []\n- id: ssl_certificate_tampering_utimes\n version: 29db81c1\n description: SSL certificates may have been tampered with\n expression: |-\n (\n (utimes.file.path in [ ~\"/etc/ssl/certs/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n && process.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path != \"/usr/sbin/update-ca-certificates\"\n && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n && process.file.name !~ \"runc*\"\n agent_version: ''\n filters: []\n- id: static_pod_manifest_created\n version: af289296\n description: A new static pod manifest was created in the Kubernetes manifests directory\n expression: |-\n open.flags & O_CREAT > 0\n && open.file.path in [~\"/etc/kubernetes/manifests/*\"]\n && open.file.extension in [\".yaml\", \".yml\"]\n && process.file.path not in [\"/usr/bin/kubelet\", \"/usr/local/bin/kubelet\", \"/opt/bin/kubelet\", \"/usr/bin/kubeadm\", \"/usr/local/bin/kubeadm\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: sudoers_policy_modified_chmod\n version: ae70daab\n description: Sudoers policy file may have been modified without authorization\n expression: |-\n (\n (chmod.file.path in [\"/etc/sudoers\", ~\"/etc/sudoers.d/*\"])\n ) && chmod.file.destination.mode != chmod.file.mode && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: sudoers_policy_modified_chown\n version: 898b1aa0\n description: Sudoers policy file may have been modified without authorization\n expression: |-\n (\n (chown.file.path in [\"/etc/sudoers\", ~\"/etc/sudoers.d/*\"])\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: sudoers_policy_modified_link\n version: 1f1b8962\n description: Sudoers policy file may have been modified without authorization\n expression: |-\n (\n (link.file.path in [\"/etc/sudoers\", ~\"/etc/sudoers.d/*\"]\n || link.file.destination.path in [\"/etc/sudoers\", ~\"/etc/sudoers.d/*\"])\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: sudoers_policy_modified_open\n version: af2610b6\n description: Sudoers policy file may have been modified without authorization\n expression: |-\n (open.flags & (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) > 0 &&\n (open.file.path in [\"/etc/sudoers\", ~\"/etc/sudoers.d/*\"])) && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: sudoers_policy_modified_rename\n version: 531fc9ae\n description: Sudoers policy file may have been modified without authorization\n expression: |-\n (\n (rename.file.path == \"/etc/sudoers\"\n || rename.file.destination.path == \"/etc/sudoers\")\n )\n agent_version: ''\n filters: []\n- id: sudoers_policy_modified_unlink\n version: 5568da57\n description: Sudoers policy file may have been modified without authorization\n expression: |-\n (\n (unlink.file.path in [\"/etc/sudoers\", ~\"/etc/sudoers.d/*\"])\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: sudoers_policy_modified_utimes\n version: d99c2466\n description: Sudoers policy file may have been modified without authorization\n expression: |-\n (\n (utimes.file.path == \"/etc/sudoers\")\n ) && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/containerd\", \"/usr/local/bin/containerd\", \"/usr/bin/dockerd\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\"]\n agent_version: ''\n filters: []\n- id: suid_file_execution\n version: 1b4f4075\n description: a SUID file was executed\n expression: (setuid.euid == 0 || setuid.uid == 0) && process.file.mode & S_ISUID\n > 0 && process.file.uid == 0 && process.uid != 0 && process.file.path != \"/usr/bin/sudo\"\n agent_version: ''\n filters: []\n- id: suspicious_container_client\n version: 8b9461f4\n description: A container management utility was executed in a container\n expression: exec.file.name in [\"docker\", \"kubectl\", \"ctr\"] && process.container.id\n != \"\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: suspicious_suid_execution\n version: 216c8207\n description: Recently written or modified suid file has been executed\n expression: ((process.file.mode & S_ISUID > 0) && process.file.modification_time\n < 30s) && exec.file.name != \"\" && process.ancestors.file.path not in [\"/opt/datadog-agent/embedded/bin/agent\",\n \"/opt/datadog-agent/embedded/bin/system-probe\", \"/opt/datadog-agent/embedded/bin/security-agent\",\n \"/opt/datadog-agent/embedded/bin/process-agent\", \"/opt/datadog-agent/embedded/bin/trace-agent\",\n \"/opt/datadog-agent/bin/agent/agent\", \"/opt/datadog/apm/inject/auto_inject_runc\",\n \"/usr/bin/dd-host-install\", \"/usr/bin/dd-host-container-install\", \"/usr/bin/dd-container-install\",\n \"/opt/datadog-agent/bin/datadog-cluster-agent\", ~\"/opt/datadog-packages/**\", ~\"/opt/datadog-installer/**\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: systemd_modification_chmod\n version: b0643139\n description: A service may have been modified without authorization\n expression: |-\n (\n (chmod.file.path in [ ~\"/lib/systemd/system/**\", ~\"/usr/lib/systemd/system/**\", ~\"/etc/systemd/system/**\" ])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\"]\n ) && chmod.file.destination.mode != chmod.file.mode\n agent_version: ''\n filters: []\n- id: systemd_modification_chown\n version: a0497885\n description: A service may have been modified without authorization\n expression: |-\n (\n (chown.file.path in [ ~\"/lib/systemd/system/**\", ~\"/usr/lib/systemd/system/**\", ~\"/etc/systemd/system/**\", ~\"/usr/local/lib/systemd/system/**\", ~\"/run/systemd/system/**\"])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n ) && (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: systemd_modification_link\n version: 11a77f5b\n description: A service may have been modified without authorization\n expression: \"(\\n ( link.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\"\\\n , ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"\\\n ]\\n || link.file.destination.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\"\\\n , ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\"\\\n , ~\\\"/run/systemd/user/**\\\"] \\n || link.file.destination.path in [ ~\\\"/lib/systemd/system/**\\\"\\\n , ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\"\\\n , ~\\\"/run/systemd/system/**\\\"] \\n || link.file.path in [ ~\\\"/etc/systemd/user/**\\\"\\\n , ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\"\\\n , ~\\\"/run/systemd/user/**\\\"])\\n && process.file.path not in [~\\\"/usr/bin/apt*\\\"\\\n , \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\"\\\n , ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\"\\\n , \\\"/usr/lib/snapd/snapd\\\"]\\n)\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: systemd_modification_open\n version: b6dce303\n description: A service may have been modified without authorization\n expression: |-\n (\n open.flags & (O_CREAT|O_RDWR|O_WRONLY) > 0 &&\n (open.file.path in [ ~\"/lib/systemd/system/**\", ~\"/usr/lib/systemd/system/**\", ~\"/etc/systemd/system/**\", ~\"/usr/local/lib/systemd/system/**\", ~\"/run/systemd/system/**\"] || open.file.path in [ ~\"/etc/systemd/user/**\", ~\"/usr/lib/systemd/user/**\", ~\"/home/*/.config/systemd/user/**\", ~\"/home/*/.local/share/systemd/user/**\", ~\"/run/systemd/user/**\"])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: systemd_modification_rename\n version: 9759ce6\n description: A service may have been modified without authorization\n expression: \"(\\n ( rename.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\"\\\n , ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"\\\n ] \\n || rename.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\"\\\n , ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\"\\\n , ~\\\"/run/systemd/user/**\\\"]\\n || rename.file.destination.path in [ ~\\\"/lib/systemd/system/**\\\"\\\n , ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\"\\\n , ~\\\"/run/systemd/system/**\\\"] \\n || rename.file.destination.path in [ ~\\\"\\\n /etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\"\\\n , ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\\n \\ && process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\"\\\n , \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"\\\n , \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\"\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: systemd_modification_unlink\n version: 8400ece8\n description: A service may have been modified without authorization\n expression: |-\n (\n (unlink.file.path in [ ~\"/lib/systemd/system/**\", ~\"/usr/lib/systemd/system/**\", ~\"/etc/systemd/system/**\", ~\"/usr/local/lib/systemd/system/**\", ~\"/run/systemd/system/**\"] || unlink.file.path in [ ~\"/etc/systemd/user/**\", ~\"/usr/lib/systemd/user/**\", ~\"/home/*/.config/systemd/user/**\", ~\"/home/*/.local/share/systemd/user/**\", ~\"/run/systemd/user/**\"])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: systemd_modification_utimes\n version: 82acf2d\n description: A service may have been modified without authorization\n expression: |-\n (\n (utimes.file.path in [ ~\"/lib/systemd/system/**\", ~\"/usr/lib/systemd/system/**\", ~\"/etc/systemd/system/**\", ~\"/usr/local/lib/systemd/system/**\", ~\"/run/systemd/system/**\"] || utimes.file.path in [ ~\"/etc/systemd/user/**\", ~\"/usr/lib/systemd/user/**\", ~\"/home/*/.config/systemd/user/**\", ~\"/home/*/.local/share/systemd/user/**\", ~\"/run/systemd/user/**\"])\n && process.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"]\n )\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: tar_execution\n version: e63af392\n description: Tar archive created\n expression: exec.file.path == \"/usr/bin/tar\" && exec.args_flags in [\"create\",\"c\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: trufflehog_executed\n version: 1717c8e8\n description: A Trufflehog process was executed\n expression: exec.file.name == \"trufflehog\" || (process.args =~ \"* filesystem *\"\n && exec.args_options in [~\"results=*\"])\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: tty_shell_in_container\n version: 3d9489bb\n description: A shell with a TTY was executed in a container\n expression: |-\n exec.file.path in [ \"/bin/dash\",\n \"/usr/bin/dash\",\n \"/bin/sh\",\n \"/bin/static-sh\",\n \"/usr/bin/sh\",\n \"/bin/bash\",\n \"/usr/bin/bash\",\n \"/bin/bash-static\",\n \"/usr/bin/zsh\",\n \"/usr/bin/ash\",\n \"/usr/bin/csh\",\n \"/usr/bin/ksh\",\n \"/usr/bin/tcsh\",\n \"/usr/lib/initramfs-tools/bin/busybox\",\n \"/bin/busybox\",\n \"/usr/bin/fish\",\n \"/bin/ksh93\",\n \"/bin/rksh\",\n \"/bin/rksh93\",\n \"/bin/lksh\",\n \"/bin/mksh\",\n \"/bin/mksh-static\",\n \"/usr/bin/csharp\",\n \"/bin/posh\",\n \"/usr/bin/rc\",\n \"/bin/sash\",\n \"/usr/bin/yash\",\n \"/bin/zsh5\",\n \"/bin/zsh5-static\" ] && process.tty_name != \"\" && process.container.id != \"\"\n agent_version: ''\n filters: []\n- id: tunnel_traffic\n version: 816201a5\n description: Tunneling or port forwarding tool used\n expression: ((exec.comm == \"pivotnacci\" || exec.comm == \"gost\") && process.args_flags\n in [\"L\", \"C\", \"R\"]) || (exec.comm in [\"ssh\", \"sshd\"] && process.args_flags in\n [\"R\", \"L\", \"D\", \"w\"] && process.args in [r\"((25[0-5]|(2[0-4]|1\\d|[1-9])\\d)\\.?\\b){4}\"]\n ) || (exec.comm == \"sshuttle\" && process.args_flags in [\"r\", \"remote\", \"l\", \"listen\"])\n || (exec.comm == \"socat\" && process.args in [r\"(TCP4-LISTEN:|SOCKS)\"]) || (exec.comm\n in [\"iodine\", \"iodined\", \"dnscat\", \"hans\", \"hans-ubuntu\", \"ptunnel-ng\", \"ssf\",\n \"3proxy\", \"ngrok\"] && process.parent.comm in [\"bash\", \"dash\", \"ash\", \"sh\", \"tcsh\",\n \"csh\", \"zsh\", \"ksh\", \"fish\"])\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: unlink_self\n version: 9f65729b\n description: A process removed itself from the filesystem\n expression: unlink.file.path == process.file.path\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: user_created_tty\n version: 5b5f4a52\n description: A user was created via an interactive session\n expression: exec.file.name in [\"useradd\", \"newusers\", \"adduser\"] && exec.tty_name\n !=\"\" && process.ancestors.file.path not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\",\n \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\", \"/usr/bin/npm\", ~\"/usr/bin/pip*\",\n \"/usr/bin/yum\", \"/sbin/apk\", \"/usr/lib/snapd/snapd\"] && exec.args_flags not in\n [\"D\"]\n agent_version: ''\n filters: []\n- id: user_deleted_tty\n version: ad8edbe\n description: A user was deleted via an interactive session\n expression: exec.file.name in [\"userdel\", \"deluser\"] && exec.tty_name !=\"\" && process.ancestors.file.path\n not in [~\"/usr/bin/apt*\", \"/usr/bin/dpkg\", \"/usr/bin/rpm\", \"/usr/bin/unattended-upgrade\",\n \"/usr/bin/npm\", ~\"/usr/bin/pip*\", ~\"/usr/local/bin/pip*\", \"/usr/bin/yum\", \"/sbin/apk\",\n \"/usr/lib/snapd/snapd\"]\n agent_version: ''\n filters:\n - os == \"linux\"\n- id: windows_com_rpc_debugging_registry_key_modified\n version: 9b71ec1\n description: Windows RPC COM debugging registry key modified\n expression: set.registry.key_path in [~\"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\n NT\\CurrentVersion\\Windows*\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: windows_cryptominer_process\n version: e26f81ab\n description: A cryptominer was potentially executed\n expression: exec.cmdline in [~\"*xmrig*\", ~\"*cpu-priority*\", ~\"*donate-level*\", ~\"*randomx-1gb-pages*\",\n ~\"*stratum+tcp*\", ~\"*stratum+ssl*\", ~\"*stratum1+tcp*\", ~\"*stratum1+ssl*\", ~\"*stratum2+tcp*\",\n ~\"*stratum2+ssl*\", ~\"*nicehash*\", ~\"*yespower*\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: windows_security_essentials_executable_modified\n version: 28b5296d\n description: microsoft security essentials executable modified\n expression: write.file.device_path in [~\"\\Device\\*\\Program Files\\Microsoft Security\n Client\\msseces.exe\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n- id: winlogon_registry_key_modified\n version: 494de453\n description: Windows winlogon registry key modified\n expression: set.registry.key_path in [~\"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\n NT\\CurrentVersion\\Winlogon*\"]\n agent_version: ''\n filters:\n - os == \"windows\"\n" + }, + "headers": { + "content-type": "application/yaml" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Download the Workload Protection policy (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:36.209Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/cws/policy/download", + "query": [] + }, + "response": { + "body": { + "encoding": "base64", + "value": "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAANAAAAY3VzdG9tLnBvbGljeQEAAP//UEsHCAAAAAAFAAAAAAAAAFBLAwQUAAgACAAAAAAAAAAAAAAAAAAAAAAADgAAAGRlZmF1bHQucG9saWN57L35d9u6uSj6+/krUL2u3cQ30GTJQ95Jz3MT7+7cncErdtrbtZ3LBZGQCIsEaACUrDTN3/4WBlKkREqkLXlItLsaiyAm4hvwAd/0/4C3788+fro4+XDxEpx6RAogGZA+EWBIAgymJAgAZRIMMOB4GGBXYg8QCqSPwRskkcdG4CSKAKKeqTzAgE0wn3IiJaZgSqQPKJ6CiAXEnZlePTalAUOeaIKzACOBQcg8MpwBHgdYFHU/ZBwM4yAAw5i6kjCKAiJnzf+aYC4Ioy9Bp9k/brYhdw//S3fy8r8AAAAC4r0EaCocNyBOLNAI63IA8E3EsTBt8Q12m2piTYpCDF69Ag00FQ1b08PC5SSSuuqFj8HJP8/B63dvQSyJmgSYIqG7iCX2bBuJRnYG6r8BcseYeo6amKMm5OEhbLfb0KNXtlLEmRe70sk3hEAiVxL35cVJu93uQjMKYTRbA7s+JdcxfnnROeh3oBuw2IPICwklQnKkqkOXhSGiXqaZAcfLARYSRlyPgpdfS59jJKGHJXYz4w5JIDHPTZQJvW4BofFNY2HtSeiJsmVXM1MA/6MxHWHZeAEabswD9TeYRjBBlMYX8MsvpgHiI40hf3xv7HUOjpvdfq9p/7YCJLGQrRBLBD0kUYugsCWwG3MiZ9Dl2MNUEhSI1l7jBch2cNhudlt7rUyV/yHeq73GlyIkOKEaB96+f3Ouge+iIMAemBAEEKBYThkfJ9hRDSGmowmcigGMBK6BEAeZT4LIdbEQJYjR73dhTPVKYC+7EJn6Ih4sNGm2232LT4QKiaiLoVpbtbQQReQh0OlrzPH9IVTytS2iF0zOWgzF0u+2JBtj+j8oItByoFW4oua8SWxxuyO434nhVTR+MGy5L4C7LIxIgLlDqOMyKhGhmBfA/tkC8K/QBLka+gGiI/Vj5Ornges2voBv3xa5fsVWzwo2ixFrFGLTICaBZzkNj+le48vz56pixJla/Wb6PU3igT+9ajSyLxW1Ccm4MINFSPrgT69AoxUL3hoQ2nJJQOIQohGmsnCvOkkXL7dFAUIF8TBgQ4DA4pKuwTzs+3AWDeBxFNTAvD708BBTgSGeIFG+fbW7h5ANhrFwkcQeVN8tIOOQ0CHjIVrY+O4LAz0cBWzmRJxMVmLgAmIoWDVWQNu+nZe6aqLYc5AE/w06ItcURU6EeahEKg/8Al6fnDnn/zp3Tt68f/sB/BW0V43z53/PSziSOCAhkQuf859i/FGVSIBH2JvP0/AwM9dqSJNIO1fx1xpI04Pp6BALFwWL8M8JPp2OrhRhKBn0mZCbQhRNXk4qZv7lr6/AYfOw/Zc6eAQA0l3mqgks54/qP4U1L0EZhHJVhwQH3stCiOfqCZdF+OUSkZv/pAxegk5bZFB95Ebb21uTvbQ5YmwU4CahEnOKgpbiUrHE75O9dtJpJeJGS2A+IS5W+xWLqRQtDw9RHEizAS8IcXbTvkN/ZVv431+fbXID56wH+VUMO5PrGhTxNDdwhU/OpFN6+FLvm1rIdCLOJsTDPD2BKTzS79FUNIk5SDiTrno/RIHAWbY357zquEoo+PO/c0M7FvSimNfNRfpJB3B8HWMhNbSJEHFVTheMr+AVHcCx/3Bi/Aq4boaXeUSgQYC9l0DyGNdmcMVAWcXeUsjmKqEowjQ/CfNfAV+LkDtWo4WIohEO1SqsESfnm7kWvAwLS0UvFEkl1s0LvGg8yhXwKMw9xxRJiamHPRhHI448nHtNdfXMCBGJ9uYlAXNRkC2fV5zFZiBh5jVOXwZk0BIURZ751zDlclmkiCjOzLKB+bJpijDMwFwD1ZYgw0MPTgIf7s/qsL71Vx/t/nFyywHV/+1n0BHU+0zEsczsf/fH/uZE6ug7LoI9x/VD5hUg3TeYdvgsh9LPdIsFfASNFpZuS/jIY1MNdvU4ss/gy/NcF4ucUndjOeUfCf5MSDRNEShfYp9GfPF9pkSfShJ08OaYmGJvwUtNPcwdFzdYfKPHHHEWR8hbKI0F5oWFISso9HCQm8IoQkJM89NyfTTC+aauX1DPFoEvZQtedJRLlv6pc5X0m/XJNoOnHhaSUC20N0Pm6QNR5rUqKuI555gKIskEZyhHXxoLMMXcXhQT7IFYEDpSAhijUAl3HuIekIwF1fiQOA7hkF3D6+s6h5LqW3W7vQ+ZyFb34jAidLTMZJS8GhCFJJtiL2xKa7IXNqU79rJjL4+cvWQRNctfYiPFZN6qkm/fQEn90VL9EfGePyQ7kl4X7ndcGNDej8aOAkLHtbiRalCTGeU6+PYNzLvIgr1ydzvetuNt98nbHpLzBAGB7lcOr3uzH43zsAhTZ9Ktw3xUk+YwQCMBfgHPnn10Xn86Pbn49tH59Oafn759dP756eOHd//69tG5+PT5w+vnz+3le56BmU5qMbAdx9lxnPvkOLdUTP0VHLfFQ3KrRJe0Pzj+0bgVx5k7zkrM6plpUpPV5Lr49g1kO9lJSzve9eh510Pyn/bsCo54BN3w5kfjPzGtfVIzTWrynx272LGLn4VdXLePoHscQC6iH45dSBLiIkuRFexCN9mxix272LELUMQuxpNj2O4ewIn/xJVSRBIXBc6UUI9NhaOXKmUdBTxjyolMjyAT4mInY3Zx+UYXXe5d2v4uxUxIHO53L/dKrK5ROgdg21h3FiTAwjQqHjhvRgc1QFLZ4nX/AIZIXMeK6O8KB/uleUgw6iDpXLGBo4/xhNFNmR98b7QmiLdExFjQUgO19ixVKgauCpp7S0USDZYKhKpVk8+nzEbmeZ0dAmxCL71mFttkeZvYfuqzzjLrx5iiWPqMk6/YA1dsoMkIeR5WvE3jGBCuj704mKPwGrJiowF0gwj6TNYgq30YYS6IkJjmrHXyhkD70M4Ge1AiMYaMwys2yNRfcHVp9/ebqnP1JRUoEGzWPqiQQjeiwX9KFHovqt0dRW+Poqd0DGlAIB3UOer8LBRd+2ql6GJlw/ScG7CC0vzWw9c9xNVgHTvC3jphh+4EzvoMfh31d4S9RNgswrV26ryCuUS/XF2tfGuavOctfkenW6fTmAjod/Zhr1PHsv5nodONaVc3THG5IStpY289gd02/JTJ+wZ14OBgAmm3juv1Vsn7AJqLOA9KEmJe4IX2AIS+MTXmrelst7X+aLQXdvfh9eAYHoujx0J7j2hr3ZgmcEdxO4qzFNcLbyA9YDAMBz83xY2PhBMLzB1hqKqAzLSvcrZOM2k0D0RSCLkEeRfDwwAEfo8HmFMssQCqI5AfvaLOLJDrdGb1lVzLC6Tmqe0S1PCb020FZNAynYqU58RWdbymHAYMeU0vx6pWv4o4G2BTXEtK3yaPqccbsi1voXYHP4+pwbrvzAV5GofMa8x3nlvrMhcIn+KpJRxgEHPOsquReNf7CsczCWl6pt4Uf+73DuGAMam4csBGjEIUSyYk4rIwCMAWWMimlG8VWMWOhdyVnHYspD4LuRdl66ZZznEvgIHvQby//6OxnNo3FiX3FRUYy5YYTm561XSJFSa1Y2Y7ZraSmW2J1cTuAPa/DiAP68RnfhKsZlP6Su3/+u2jc3J2dvrhzZ0UmBUZwRa41o6z7DjL/XKW/sEMTsQAfr2OfzTOskkNawXSL5Y7KqlPK/a+Yzh3Ib4dw3kUDGefdODXyIMz94cTZTap6a1A+juWcFfy2LGER8ESuu0JHHkD2PbRD8cSNqiKrkD6O5ZwV/LYsYRHwRKGs2t4049hOOn8ACyBsil1vCBwOB4RIfnMGePZKvdTgWUzqdtUdVNG8L3x2++n/3LefXx98s55f/L6t7cfTi/P/3V+cfr+8nXMOabyNaOSs+Acy0v78/LcdAze68DZ/PJ3NaM3796JEhuKf1ofVV0PqIpAYZp6CZJ5gTGe3dJ39apTxyWnqu9q/7AHfXKF3PEckHAYsOmdoFngxEqFmBLp+o7L6FCBcVNafsN9k+6bqvsc972FuvXhuPUjMglKVhSEaAZ8NMFggDGde8lPifRZLEFiNZTN7LLOEu/ah8GIwQHf+HGmfwBNFkLFoXxMJTEUCC0874TWS0yqCKk3oneuhNTbVQDuiGC7RDDpDqDr7UM34D8aEdQ+0ZcHoFokgVy7CirKtYR0z1CfTl14QCSUh+RHg/rdlFLPlqOzai1V7eisa5jmjqVtD7lx34eMxnB4uGnvlkeB3HeNQnyv+F03HuyONrZLG8kxjhzXiTn5JGhjYzrDalv+eu3gWkK5Z9gLMoTecQSnX0c/Guw3pr55bDDrhTH0ujdwOKuTnvlpwGxT9+uPDWbX8hiS42N4fVznquwRwixCob3pNKNs6q7MqioiFCbKi3mBht6LRGeS5NtvLehGFssDMjjoldXOv7nbnVwRKp2dvN8CFu33JPSJC49c+sNh0UYupx4Ui+75Fuz+0C4axtCb+BD3pz8Y2tWWEErMOx4O6WpfOz3sbNfswNvB35tDAvd7V7DDJz8Y/t7tYmsr1tYPh1xr5bvtYNf0kMFp7whe7ddJrfcUsGtjp+cHRotFFrn+mP7AE34YPOYE+jf7sEc37v/2wHi8sZuAnxEtjttt2BFX8MYXPxpabOqy4fGgxe6qfGt0EN2MYa8bw+Fo41at90wHLnE6HafvpGkUBoQiTrDY4F2OgpAFm8j8ToCaeVx8PYfwUmG26oAx+aisWR+WAJY+/kc2cM3zu7tf1r1OcnmYcIMgoYcSLlKNXxxOCJz2OfQ7dcIaVzWO3Ghij3osYlMXdTsWsWMRFaa/CRZx/xexW2EpNySGI/8a9r7WsdB69Cyl9uGs5Gh2jwwlN59ql673OLsduyv6+J+D3d0bMzqehbBzNIH9H4sZPeCNesmF+j0yjh3fKPj4Hd/YKN8YRgjygxHs4vBH4xt3ssLdsY4N0MyOddxi+ndlHXex7b43tpMYOc8O6zj2PXq2s0kV7UNxi6oa2Xuc3+4EVfTxPwc7uzeWdBzFMIz24Q2uo1F69Cxpk9r2HcnvSL7C9J8MyQsRwd4hglG3/UOR/AYtKXYkvyP5CtN/MiR/3Y6hOArhUeQ9OZJP4xv5ZIKFo/BBhy6673hHaviACLkmvFEaykhPV30onsc5ukN4I7wNyHU63cTqJ5n3nYBXENhIoCFW3C5n9rYBcGnqWBWeCg3x3xiTxdA6t7Oag+t2YLnp14klVhUs/YMuJGGECE8aVDG/yryrnZKrCHA+DgLHJ4oNzxwPB1gW0llWbta5uBTMGs0BEn7SWvHC5teF5yHJFyw+N73FHjKPOr5cocT+vdHidnPVbNtnIVYPX/I3RGGY7ieNzD6W2emK8UYtCvjNzEIHoHuTW5h1aDPkcDA7huKmTo7FqmjTPmxDQj1FY4xDjkM2QcGWEWeJXefRRszCkoOYTuim4aC7ofqOThciPhIWlHvNPduT2Ww9PGnROAiKgXMCxCwcqA/RunAwZNxMB/gZgNnbPyARH2FJ6Aik3VYEYjiEqOtC5m3lFu/xAVHymLqomPrvpj/I6Azul3UU6CpSxrGCb8xnqpYtWZfGFjjFpH8Dj4Ie9A62ci/zeJAs4kyLdGvEg2KAGSC19mwnWci19ribhXUm0MwijuZRU+NmOUTtUBqit5MZhrRbA6SVjLc3FH90s+AVvjNPmaqk9VvYdmcMZ1MGARoL3SoKXyjqNsAXa3RXbBuuSb0phJ+n91zRBJnTW1p6x7iZhUh1/tvcM0DN/E7nPF+6sHvYh+2p3DCKtY+PIHJdFlMJQ0RJFAfo8WBVTXPgjO3kbbGq2Jx4M1h1/5aim8XCw+t9eIAQjMimYzk9Ziysq3AoODXVwsESbcUtUTA3tWrGpLccaY0D4WZR8bgzhNHsGvZ7mw5T9JhR8VHYD94Oq0uMiJ4CrvHIhVekDb8ON5326rHj2mOwOXtk6LZpe6TNompyFLme/kyoWt9OKWsSdDsEKzV0uiWK5aZX1WjplmPdK/eU/RheezfwoF9HK/3UUbK+nUrhdXstlCw1dHkKaDJrz+D+KIAHvToerU8eTWrbNmRNG26JJmXGEU8BTfwBguMhhp2bTWcPeExoIgwaFODFXLuSyhslphXze3chfK/sulv1ot8Xge4kaaAvRc2FI/ZUp4hquObnWVE2mYRsDejq66cLVjFwXMyluXrGjkRhhDmho/pXlStDigoRtNQ4IpcTLRqTR2UEdL/WLwsXqAWXpot3qv+1coXSlGJ6EnHkIYmhi2AGvqJR1EWRsdFGO/vhYFfMI76DBo+pu1esDzt/B7KLt8DeDeHZ6DjVGMWsT+DshsLuYZ3L7qoqsn5/H4p4MMFcQsljIaFrLEuqmGJsiAPVvNZeGY52x4EeMCzDjmM9NKwfBccazzgUowMYi+MfkmPVPcuuimS8hl/l+qmmr6jQ68/IBUu/tB5DAeuZysY7/ClgUcypSk/Rm+ZZ04MhnEoMyUGdiKxPh2dtSle2XlexKlh1Zb60kygeC61Wo9MtU2fnuAPlrANxejj+8ahzQ9rFHYHuCLRwI12pqc3Wqqux3TSxp1pbefBDEnt9/ezqUP81jxCVVKkV+v0ZDxE7rvdYIFGN622ZU7G+hIP2ETw6qJNp7ulwqvpq+9XJHHIcZcdBdhzkISHxKDjI8awD3cEARu0f89qhvkXH6rwfOw6y4yCPBhKPgoOg2QT61xgGW/G1vjcOEnsMc+GYrtJ4FxsyT7G8w4wxP8rYgqZ357S0Pxnq51HarKLFAhMJZPMpgZJLAbdWXskejDiZkACPMMTCRUs2bHn30iOIBrGiiQBPTFYgi+0wxK6PKBFhpq2IBwvNm+12BwosY+JBRD31c0S8dU0UhXnMNFA/XOT6Gw8vU05gm7C+uAWB3YtBwgMianBU56p6h6jrELX2SbTgHFoFTXOdrNe4V+lynUnwveJlOBvs8HKDeFlBsbohR7AivU0l9HvAVIU/h1ASrrXh3tFUHZralIakCnUs8vu16pGFTh89w+/X8jTbIec65NzUpXgV5HxUiDS4qZOVeIdIaxFpQ3ejNRHp4YSBhw2++4CUI9qHO8q5DeXo6KdePpX4Zq4EQZIl3Axh/6aWDqmgWfxa09eKlhoDV7TnMS149XOqM+rfthYR9AkQmE+Iuw0y7h0J2DugcNSb1iDjbmFMuhwlHRxDA31oJ1/lVh1s1L22mMI2cSe4o7DHRGH3f926TYqcTmfQ73kwmtZJbPd0KbLkxNF4dklV2bNsmLUMAV6WUOClQrXLFTSYVCikwlzrcjpMqhVS4mXji5n6+hvWpYnEAvMVH7HwOona4DI6JKN1tWwKCx9xXFY1+z3pqy+g1uc8XqgUfccTA8Vz8wmrmftlnrurHi/z/H2hiEfhQskyj1+oQE2T7FiKny9DKvvmMsfrbUnC7TMVFvi9JqjnhTYH22TEBz0Ko4MQxtd1EgQ8XUZc4bY/J2Fs3kvj0YlUiles8ijJ02fxTHMvV7OJfJ0VTGJ50smLn1MKvG/WcPh1Cq8HIZwd1Enp8nRZQ6nSIiOllfhxPBGJoHz2j14mKPyGpy2fVfuSRw+ZnbR2fyw54mN4cN2Bo/bPcWzelKru0cpdq71t8rS2k7x+FsnrKpBw1ptAD9VJTPCEyXxDitTHS+YrXWJ2ZP5zkvns6gqy/jW8adcx8HkSZG7zNDouCx0euY6HB/FoZJznbZrUDadF/fjrxT9PPp1evicuZ4IN5WWS6fTDRZJ+8x+Yq86TN2sypH46ew1ef3wP0rnPk3DePj+qRNsIAnkP+VETiOKbKGAcc8dgIRqkOdEKwTjlRKZnHIWKWThevtFFl3uXtvfLpPcmvsHF0LE1QVLTmH74SNwm/HIClYNgKykSN5lveAVIhoTjKQoCx+wHMU/uM7ZDaWUJiM8tr7k8V5uNd+KqDePyDHEUYvVRl7/aeZ7pj79cQ37JV4HcV22CBqeUbgHa90iDPhPSZpjeHOmZHWO/e/mGk4kCF5bupR6pGE7Sxykx6mqGEm+fb1AGwy2A5b6IUGA35kTOHCwEppKgQGyWRZ5xNuIoBL+SAIv5NgfO7cDgdUAwlZehENjFopyDhmnTZM5gPmcwn/Mtwfg16j1lMOpkn0MWeJiLrbHQUmFlUVI5tbvcpUnq+auZlxGBN9PxZ4E5WOh9JV82mYrtCm2CHdP9Osl9Hh3CaLbpYDohnIWYSmeCONE0vy3s0SOuSilvOgbvEUUjzC9P9dyomtwa2OJ5TZB8xiZAHB6TJwhiFEWIh4zPLb6lnBXATyex0Px7nqQCIegRodZPnTwRgnoqiFD7iGKPSJPFQjeXcubYDBaN4mtlCk6i6ETNBxTl9gUmjQWhEnO1lhNcL53FoRSw2z6CnG6DffcPupCEESI8aVBwJL37sVOvqisDJxZoVKTKWwCV6iRpk0/s7hidf5p7X6egCRrgBWhMimnowsfp+MBlYYiopyEUC+wByQykZqZOTfo5DOvYnz9GoHj2cLKKDy4YIajO9AWZ7sD86+k7Lw2quzllgoLAH1lkWAlhb+FMskyMya1QLAgdpWhRD+jBbCsBQe4V6Pqj1h1USt1iDeBVH6LpmaemftK3eQuoYd8UpFK/Z9zQ89gSTmC/jkbgseHEVDhuQGox56koXe6Tf56D1+/egliSQB1iskmd6q2qR+tc/6y/gD3od6AbsNiDyAsJVdJT4tijt4XlxR1gIWGkN+7tXMiqtcdjdUzVlzSOTQ3mSDbGVD2pI+Aar5xF/vwdmARqWoOAXY6laOGxaKIQfWUUTUXTZWHLjmgHbO3tNbKWcguJUdXc9ZRylZ6Vax8aLRbJlock8tgIohGmsoXDAfY87BmdhCrS/GJNRXtjHnE2wJXq28MzrDyC/YrqDSRHLl5ZPf3C4u9soShsEXqFXcUkJXPMb4fH1M0rajzoMyEhoUKiICh8lzr4ldUqrlA86aTEDWIhMU8/8nu+QYTcMRrheQTb7Es7ilVZZRl3hNTRyCSWSzFlggPM2Vy3VchQTn8/TzU+FmWBRkjNXhboZA17OR7uQx9N4XHnugZ7OYAux565joFmwDK23e/CmGo8xF6mVbb+ou9fv6vdBTOVIaFQ0dXWWD4JvSLd7jz1n4bOdIQ1+rox13gTTCPosSkNGPIy5yQlm9uj8V7n4LjZ7fea9m8rQBIL2QqxRFDhSIugcE6mmU+22R/nHRy2m93WXitT5X+I96rksKxOYv88B2/fvznXSOEqHPTAhCCAAMVyyvg42ZSqIcp0NIFTMYCRqBNy6B4QpW+3MU1p1MVQra1aWogi8hC72NeY4/tDqORrW0QvmJy1GIql321pjvA/KCJwYu7TVuGKmvMmscXtjuB+J4ZX0fjBsOW+AD5AAh/0HA+7c7fRNSKjaVJ4mtd4URJwRm0Apmnh4d3MABA6ZDysoeNPREzUq+NfUVVw7/Ta0MNsMIyFiySGTAnwaqKGo6vn5RlvFkDR0GOMO4No6Jhmjk46MO9s4aZTMHfMItkM8AQHqs/zj++c84+vfz+9UCDL1GCRTIB6/tE5ubg4ef2b8+vbdxenn1TNP/873e2Jp8+Y/1FVJY9L/Iv/dvar/TKzl0uJXN9AFwE1KJYADdVrBIZojMHZ2zfzY5xNpVAP6vigRgK1Tic5H2ivfBsEoATy3XYfSo6GQ+JCQUYUBfkL0AV23m33m+rkYj4TWgBvEyESoKxCh8KDf3Ki8FHg8Zh6CrxakMy+gCJEXC6/M0L8cpMI+hgF0i/uDHkeo+mrwsHLBi4YtHjAgsGWryrsTQX40yvQLkbiIpxUC5d80AtAqKft6ugIIIXzbxjjIETBFHHNvwxgm/UQuTfZhm62d9Sen6XhKEbc44gUbTQleKlPDY7dg1+Cv/z1FThsHrb/UgdtAUC6y1w1geX8Uf2nONFLkCB17tUEBTF+mWU85j/hski1MVwq90rK4CXo2Hwshm5czKUSA+rcjiRttK5XO4k/M0JQ6AWEYn1C34t54CpGtzffEnPvRRQQudd4Dr59K3hrtpO9RuGh6bUdP59PWzIgOaIiJBIwnuycCERMGkEimCl8JC5hsbknq4mL6aVZBVysxVQ77T4kdKSWHErGAqi/Y4h5ZYSspV9yfSQ5Y6HD8XWMhSwAukdFU79TJDvXLnlEuIx7StrV+qSINCUO8IijsMm4Nrl0Pdq01VAU6ZrFEip48+Ec2BmYC0vkYTBkahtMZgg8FiJSU+ShpIaZTS049Q+7MOJMMlfBKKYUB4Xqv9pAWtrN1JwYdSiWDqGSx8KaKwfrCVQDioYoUtAIkRAu0sq/YUSohtBX++7riKNB+qOrfvFYyKR+RPWvLyvVU/9QNS0fLIPzwmEDPBOx6wMkgJrkc/upwcyIvESrEs0HG1FpLG5xw3rQO4Q0GMA4qONDeAg15k5wzoQqp/rtHUD7PYmNa2GbTSJCpKQZLSA6Hg5IZqSV96ULW/tf051d21VnzdoXPYb1BasMI3tnunhXag+tzTHTtxnNBbPtYq/e70b0sb0aA3DGZPKwpy/nCq3e9/bKchik17Pzw/cVmiB9w+gGyGD7yNXPA9c1JvHL0dZv03qB3Ko3XAjyXrWL8twNuoeUHiMS6TWMZtJndK8450BpFrcFwrW4x8GUM6l2UhGLKLN9atX/POtbNcoU4QgG+AiGoo5ktz602S3EwHb3EKZnWG/d0TW/EfSgT66QO87IkcOATSuzgK1JkD4S/kvw7/8s8xDuEOosQivLQp4t3GStx+qirWd9q2cFIuWINQqvxgYxCTzLI3hMl6ISL+ByowGqZiZRDMclAYlDqwRYRwRZWZNQQTwM2LA+AWDfh7NoAI+jGuLklnD6vq7T0iVyBhyjMYulg2kcYmsxrmTeAnxslDGsy8alOXZc0iXtILFuv1n3orT9pUbAFa3UiK29lpBIxiLx4LWFEolx5l3SU1G8jUyrmHhOiKLLvKJomXVf6uQvl40vzyvNEEnJW64xxav6VSGLqVSIULWBO+IsjqrVpli2YkpujIcy+OWXS5r7WEKdOIowdwI0w1ytxUKFnHr1cq2OUhdZR+l1GtOMhrVii5yOtVqbnJa1WpOMnrW0wYKmdbneKl3ror97Xtta8nZJnbpcr6xKDZ1rQlwlWtei11m9q0LKUo5tJwcizBXXw542KlViS4br6M1zQiTBarNxg9gjdARcH7tj/SPthSuqCfGLhHhBKoqIF+rQwvUljYiQdtaL1DFLvADvFA+cG8m/Z14cqAaaCEHECJXiBUDUS89HaS+i5iVZf7/OHf/6Q85BZz8DYXUs5liwmG//rMO1D4LEnDraO6FoU1i23LhsZFvqreGSzqvpPVCzAFNZgTFX6db2WnMOVrRDFaLnG708ANGZOt3iMJIZE03DScVMtMaYUxy0st8FhpyFWXHjBZj6xPVBSEa+BByLONCdKfk4wuqXImcw9bER0zkGXhxGgAggORmNMMdeTUy7Cvs1MG290J5Dug40M4eSaUZUGcW2JkuX3MYu4+lcrHYyEZDN4DjwXhaKq7l69tJ2UZY0/+lr2/12mL+4ZRwreDopMAuoBd8Q2XRRLDShvP746fTN5/dnp29KRehXr8Cf/z0vWfOp/1mF4ga9hbmX1VO0aKix0Gi8DOIrfrsS92uiaf+mjrPrfaFpJTy0sOXIHYco0p5czsLV17Ltgb04t0empLF6Z09Oboib+AZnnqJZieXA75RNKWBDddggE8VGWJDOR49X8youAUp8WCd/UHWzgXZ7HzKRra7wazP3skWX55xI4qJg7mWDbyLGiy7Ri07HHI+01uQFUD+xR6RxmFvSkVhg+uMgtGDzx3jm6HsxJ9RB0xN4ms0teUDpLyt7lADaDp9aGpjPSL9v7n7jk0lNTcmA/yCgZtRB0rlig1SbvMEo8hPEWyJiLGipgXLhQFRBc2+pSOr7+nyBqBs3I3P9gYzhZnobYocAmwiy/oDROx5RuogTCmKahOjAHrhiA2MEos6AiurUmgPh+tiLM7qkNXTGRgPoBhH0WZ19bh9GSkQSEueDb+QorL8P7WywByUSY8g4vGKDTP0FE492f1+ndVBfskyH2w33UUKhm4pC/2Qo9F6CtO8oensUPaVjSAMC6SDaUfQSRdcOxlcS3G6T9JwbsEr09tsOXytZfT3WsSPsrRN26E7grM/g11Gdm5OfhbAfPir67Wjynrf4HZ1unU5jIqDf2Ye9Wj5TPwudbiqv6qYpLjdktdDWt53Abht+yuR9gzpwcDCBtFvH6GKr5H1gY2V6UJKw0CniAQh9k4Gvb0dnu631R6O9sLsPrwfH8FjUiSuyVdp7RFvrJmNQ7yhuR3EK0XrhDaQHDIZhHT3MD0lxs0iyUGurER+Vem9r1wamYZJYnrpRDCNOmNGgKaB6jCKJoXYgNSVTFARYQuR5qru9jE1sxldCTYwj6rHwBnZGAxihERaNXM1E2afjtcTh/5KuxaO0RIggX9JZrtRZrtVdrtXN1KLExT4Svn2cYRGxKeZluJoaQAUoptqFdUqkDxAfxSGmUgAkBHOJdg3UbzLLL6ph7hXfh+3wCF7VCYzca+soQq4sQdre8cHcgsmYbdfRGW7NvKTIVDuDsJhOShFWvTMK5bOPH985n89PPynWZB4+vUt/n52cn6uHNx8/nFycOu9O/3H6rhi6Zxa2RaEYBQiRdBN4GqtTdwZCUtnoOQ14fVUjE/KW4VoJcBYscSQcEaEpxZ4J1VoGmLm6XztWgOXgMPMaaqghYyGSxIWcRIUGYyZEakJ5dg7GFizihEodNaYuGNrDOuG8OpBQsl473zluQx0dnUgYxYOAuHCIXEJHEEVRYHNubAc6PHDCUSgd42a+HjbaiTXmxbEXNVnFlNxYr/WSoB1GImiqOop/grRI+CRMi7839uYSRa6UE5Z9HnI0liRbwscywNKWfLmdA09iwxrqkKyaqG3EASVlcDzEipRtFE/gfv70DuRjhVVEKL9TB6EerwmqhyQaIIFtPGa8EHCtTD6fo9dcHm8YuREJv/EirQmyIuXyK1VcXCg1kyjtq7DRoHzsgldJMTRjlTT8Wtpl+WBu6Ztx6RtZ3Cggg5ZiRhyFQ+MrLczEYzEbsJuiTyp8kwwzJIXrMBb+8X5BOV+ecFJcWD8orh+WF69efVf4iEcFTSNWupJ8sTONL+XQmhWjxlfh90uKkzkDJf/Oa+BacZGWWubJyYzmqvOl/emP1EokDyHz5g9sStOHtI6HJE5/p5W9YfqL8OQndn2W/A7SrgKR/ArHmcrhmM7HDscSh+mQ4ST5FU3TKhwjLyB0nD6H81+ZbkWAcdqRkHKW/p5RN/ktWez6yUOstrbkYWK7SqmTm4opA+iKOMwVIIH3u4slB73FkmSQFCV9l9FcwXihZ4UCuWcd+SFXEucePcJdFjAuFgoXh/bi7BOmk9zjTYSot1CSW5IhciXLl4S5eQxZkOtAe0PlJuVjlKvhMyFJrmThKYlPOC+6YiS3fAlqpM9stPjdoddfWGJT0pT4RsfFyM0xHA/JkGVL1LEv95ybEGV+HOUKlNiRK4jDhZViua+MkJA4XyB91899VkToeJYr4PknQuUCRHXZMFcib7KPHKNADZUri+kCfgp8nXv0UWdhNYWPut1eQWH/YLlw/6igZr+zSF7C59jLF8S5bxGM55Z0iUgUk80/e4OFLvJDSuTmH0kOzhLj/KPIdS9JiFmeLiXPP8XURXlAy8WvsHwreYzpMlnGlFznnxdJIBY4zwumuQ+b+mzhEYUkKdF52FyfM5buHIlE8OV51kig9JSmd59wJq4DffsXMjpi+lfEhBxxG/o57edPz1ae95Tw4g1yUWbnJwtVAbpAXxxiAFHjeY2e0+mU9v29sReNnCkKSsLqnKTiL8ic2NIzJzIpOF7YTBw2nMcLwDj47eLirF4wwfC6A2eHFI6HXVupysHhsZ9Edcq2oVjnaD+XjFQvtlGj/gnvwsfJkIvu6fX90tO7gdQkpwpEHvFRDgdYYofiqWNXtQASRcrLP//b+D03XR8RalxwTL1Cd6eTeVw0M6QHhM+4DGbWx4nIWwSwSaDBD+oYhFaOEnDYhjZeG+OQ45BNUFAZCFu7EC33t+PYeGXplDZqvXWumlxd62m3CNFcncTLTsN3GVdsTp2AjSqiSiZsYCxDHVVJFwRs1JouFgwWCwIkZMBGubIhIsFimZiJxaIQC6H1CLl6OnRqrgjF0m8uNh4wJpcKx5hTXbhw05SNZJ1RgmXUZGuUBQlRmDhPNhEvCNhI001FvUDqRNbhj44cKuF7gmdRwGZOxMlk/Qax4ip5eXvQfjppqQ3Q6CAJ/ht0RK4pipwI85BIBZRfwOuTM+f8X+fOyZv3bz8sJqJYHCfrGsqRxAEJiVz4nBImmfpYeplryVsHOL2Kv9bAg417eN4uYMp9880yCBWxzQ04KOfjSnp4Ivxw5Q3qwjWPllBbHp60hK9TWBcjkt5tU0lHK0LSRsAjHKtTfUUpNE3E0auhlqrOVmrF4llUm3cPm+1OR7cKsBBQSMbnETrXY1sldLKwIlzOnIhE2LFe2wXQeqZOpC5u6mqYSj7T+hLwCzh7e3bq/O3zr86v707+7rw++eC8P/3099PnOpysdk/KNb0hcm3LV0nLBC+tJ1OOO1lvpXbhYeYsifoJ3qivA2psYA8FNv5H7lPXYIrAV7DTGUA8O6iBKbUYT/vgCGYnCIeMr2u/DRTIzmEtHlQBptpUtgzMakDsdbtQTAhs709+TCAySbF0dFSItYw3H25Xt9Tu1GXxel0WBNiVxWz5zXzkfPh6HeohlQVDHNbmzQPs1wDWMbTzXAEixcCRRFDtHVBftlhT3A3ApMCN3OMscnQo5KITaFHyuSgJhTEJW5nWJRtisrhugBFXy+7jRMrW7eot97RTQ7J6PBYa3oyikLjaVRDzJOlfqTlzyWEOS7cVeE3BmhHHWjH1AmRLdRLA1F5yXtb0Wnvm5XKUt3sza6xnjphtOYvNQMLMazw3iySDlqAo8sy/6456ZlX1VaGFBzDwsHkLtexWDR27/Bp6/CvsdOok6a3Fqu8exPPO+FkW5Ko0M+EGkPOOMa8eBrcfyGQXrAkmussGVxSjcLHWz5oNDvHRpD3HkaXPzRWItGQNkzXBmHXymDszWdGHJEKQMfZDMFlM49AhoQJVAVMtCsdkeIQCwjgeYFdqZHElL7L5a+ieQUCELINRocFdEvdeNcQeyM2volDWx3XuJx6vTkbrUgJRHEEprxXTtQol3t91fDgQmoiaYIo5TtbWpLhVArBufjtbxt5NHZFj/WK3j7r2fJG9+bmHhaZ4ms0aU0wLro/oCDuShBj8N9hv68tiqwDTFQi1cZ7aKUksbYCpyiw3rlaD6vL/5JsuxAL+0yswRIHApXfYfwWdsJjgOHYxlcFsnu04VcbdTt+2P2mvAf7juuNd0lHm6tjL3TzQcjVQFGHqlWcRyqjKkv9sNEqxfnIl2LD9KQryFb8EnXa73S6aelhl8rW0jiumX6Zz1ItjjFXKCDRlhtampYgGLnwMzOtc/sDbYf/wOlyD/TVZ3/5+wvrYVG01jMNYYH4PzG/KQ7He9kLXKl9X9VYtxYij8JZLiic1vF4fz32K+Vg0CLAzINLR/ogFq5kxgs+EAVyK9V5UqWjjSeutVHQW9VYhMGHVlr+Ac+ft//l8/umb+vv3T2f678eL3xbjymTlfCMh/q+b8iSf8xUFA2sSknp5IkDxNJilifWqi/DpLWksqqNZZQ1Wt9vVCigtIqa6Naj1xxoDBDQb7/ZMqtJTg9Zf4hvpoJiUio/qHfhrVlZBVtlw8vnN2wvn5PPbN87nD+cm6ec8lecCs/+PAac+7BnG7ZQ4RV5w5I7nkwR2kjZY93ymFcHou+tCuT+Q+GFavly1ZFkzNfVfWS5DbbzoLDTP5yn08BDFgXRsisNct3mol88n12SdDJG3EDP/EepjTiRebFZVYrjlF/2lodDG+fO/BzEJJKGiGcfE6/2n8Ze7TVyQAFOZKSqjr5w8tbx1GkHfENWCQer83T0QV26aFclrQNcFTN2R1w9PXhbnHprASi//s6+bkdrPzHZ2PwQFstOqSFbu1bpjw46s7ous9CvHHksXUakCFj8JArzrR1YmVUIl1mZ+E1zq9585A+GdH/DOD3jnB/wlZ+0l5czJmDEXhMgx2hXjkFVzm1MPWl42P21O3oUniqfOHTbGDBMAWSZQcXe8OV6nT9jtjve1Oz7Ynre0kdxl+7vjpjY+Eo72qTTTM8a8OiPdfy1PXdOqqu3Y6s2keYam74Nu1YvlVbwNPY+PhMnbZ7+oHjmj9rpQJzty/uHJWdFAQj4PR8g0Ch1rflJAuQ28bPDw/bJBmYdtdk0ahTYv7SV9lrnNFuDVd3DZ2AO2c7B32cglMc9UQZ636jVJXl7S4vd0ZWsq1ryWa/sXEq3rA638QiLo2lEEXTOKqrB2FLvUJnsuZbIIJhDPq6xhuZcNC+eEh9pHw3ftQ8p5F56zvNe+KuC+9k2WHPYuG1+KNWolPJkNAY1CYI2sEpzLKhQqcubrPt5x5jp87EfkzBaNEr74gNzZUlIBZzbxwuYxHN+8cc5PP/3j7evTxgvQ+Hhx+i55dj6cvD81cUUbCpmb1urQv266LGzZIRqqm7mqVFW821GqvkyV/9iKBDv03B3B1kHvH5Fgkw3nwQk1s+U9XprNHpXynvpV9HK1yZriaULat1K4HYx3dx+16OFHpvCMSPmYiL22Ii4Vyx8XN9gAcd9G+Te+2unUaxHEFkn8rnqxJ8cM7vrB1dnGmuDfOyXgTgm4UwKWKwGLwyqiCLk+7qo9k44IvdFnUMlCFxn/UV/KyAQHXhRp5x29+g4akR/tNVbWqhLFcW37KzRBqs2V5gY+DiLMH63WMgnbeAuN5fHXndRea1vb4pb+cBt1dse7yx5da+fVXjZiRl0H3wxJhTQbxrXWDRjV/tLchMcGDTGUOtqe/SNc/cczf7gblRvqm85St83be9PQtb5kGZv8ThvqL5Y8e/MNFh1qeke5apBNMIdIUQVFkkwwjDiTzGVbCV83JNRzXI49E4xHlEEnda9RDRrLnrQ6/UXaSwlzU21TlyaBEXd9QkdgyDgQmAqizTGG9UMIynadCE4HcD7T1UFn+/0ujKmJwejB5VUCyzG++v1us93uZCtDQmH2ozYPvwqJUirAL0lLUhNyhQ7SuclUhGJ3OqoBxfWeag/lET1yI4eE3mpSIhXyJxQBKcQSeUii5oixkfbL0nwiaLksjGKJ39v3rUnHhKanLk5uJBSys5hK0bKbRkuyMaZaQtnrHBw3u/1e0/69S39lafH+/voMvH3/5tzEiERBgD0wIUi7Sskp4+N68aY560F+FcPOpE5+581S/52CR9bBKSIdd4Kdbrvbd3pH+0e99dhlzp8N88/8fGkKzAEx+yc9mTT0GbBh3uhjWkOfZxrmzNZIT1yZX+ac1bDnpIY5RzWSc1PDnJMa4fzPfLTkzNMwZ5yGOs80zPmlYc4qDXM2aWTPIsVxXP44+TLndCMiG6W15g5+Rs4o72/RqJErhBBkgssiRphY6rm0XkgBEBghZOoT1wcuiwMPDBbiF7IheP2PU6igDLNQrshB3VmNQF/t7jx8RwkFdNv7y5Hv3IBgKgvbbhLd/XjgoIiYEKeuLHRVdRml2JVN5Hm86TMh09MjikjTdKLwodB24e9E/hYPwMnZW8OPFsapuOR80Kux5EcwQBJzFMCQTfROWbLy7W5HBy2WGFpmuxXpwSeeh6nxg18QiFfI52qBm5mYgvmLse+Nls9CnAbWkWGU/p4gnnvORIYtISYzQ7AUAgLoePgiFhFxCYsFGLLAqxsXfzAa1gBeVQ/b/kEP+sTDEHFJhsiVq8TFg54WF81n2niyWc9csh3AL9v9rMlvsLsM3V2G7i5Dly5DcYnbAyiPuF6S2ZEu+yRohick4obfCeJhJSHUTgNyhX3YOcIwPK4TdnW9eHCgQ7OmBywvJJSI5BYjH6dpw8xrgsnIdxRFOLGYR9BeFoZttFt7eDqPGBti/vbMpuP8hKNgdsHenol8wRsWIkIXCt+fvE5KzikZ2n5WJ95NNquFpMo2b4IufWs+BqiPAdmPqbiH3RzWkfkqxNLt9w8h8iaYC8RnkFAofQxD4nnBJk42BcF0SeS4PnbHjqeXvQCWHhXN6xgLNULmipC4iProK4m0jPcCNEgEleBnn8IZiZoswlQ1t2V6IBI1UYi+Moqm6YupjyQRugkaoxCZXpZDv849JAqpGLz5cA4CxsaxCZrsKYl/yDhA4O0Z0KPXs6vrsQlEdAS7o3UuCvUuR9qdgySMjz18QxNrMLb0u9UrEhI5ZpHKYV4s298n3HMzIMIxaafUB0ke46UaEeMmKuRR+wXo9fbXxHzUM7KhnW3Pb8+AzTuv2Lx6kUlVUZEdkCj4ofBER9cRDh6pZXFQELBp+RElPfon7fLn/+QajTc+fr44+3zR3Hv2rNv/ow37X7496/7Rhr0v3zqX3rc/OvD4y7fnl97zy+b/XA6e/7v3n+beyevXp2cXS9FARRoMlDeedbqHl83n35512ubPYfey2fnjAB5/mT+rcezz/9UF+3+0YcdWOFYNDo7Mw8HxZbPb7102nxfvMqd6TYDkaDgkLrBrYwMmJitQD3uOjupICNUPRF0dA4vwpMF2zjTcdSxFztuXshRNrq9egYODg8P11L6alkPkYYAoYLEcsJh64O2n12BpKhVhcE2vqsOg00kELX1qVNIYzymK8jmROtlseVCH8irSLi3mLTns6EPqFA/S2luB4BWaoMU03Y5R6xaAc5etG+zOpLsz6S5b9y5b9y5bd/LMdtm6d9m6d9m65wWPOlt3uuNkDlV17DRt+wWxXNVNZfOtpLqeh2hd5yjxlFJdX8XRTGK+KIHblsuecwsgMrJBIhYkEkEiDGg5wIoAevfXG7/ZJO12r3d6zTuT/T3Z2tNdXW/oZi/PbON6B08272Tftlu23a2TjTrZo+32bHflZDNO9+B0683suMlGm+yvdltNd1OziWb3zvmWqXdKw05TArTbYboLGpZu97x0q7M7XLqxmX/SbczuXnYh5ntVukVlt6R0J7IbkN53ku0m2WXSzUWvfLKVzHeQZOPQk89sE+nuYDaFzF6QbgGG888ZfpbPZ9l7lqtnmXnCwy3rtrwuWX/Ln1O2bL9fM2HLew3LtZx2zmA1X82w04SLGgzK8EzLKlMOmTBGzQ8NG0y5n+V5X9LoWAvkslYcL2z1Yxv1PC+0wsmcYSyLgpRJPGBM7wi2KECDsg3hf5sqwLYazxUz6Da29OFwnS39U+L6Y517xTG5VxyFfQUMXxXbKk31G3vOkLPQMdkfVcdpuo9sVY23abYkOnTsteyL9IrWMTM1JQeLRYMo9zrX3FamSFMRHToc6xRUJJr07ADOp9P/ffr6IjscR1P1GHuR4xGkE5gRneZSPaxKDpb7lO+NIQpcRrVHS3GeMxTJprk495oeIsFMFd6YD4ABHiF3BsM4kESbsovQJKqCU8bH5ZLNOJsnRyuYDDCq4W9f7kNCJpBP+jXwdx9GmAsiJKY528bcDW/vEA4Yk5BxGLARoxDFkmnV9XYNxZaRd6UVyxJurkvDXqbmmxs9GwCYcP95+FQDijcewOPYg20X/cBAyTCLW3GX8jv4MpIwhpd1stMGfATR5AbedMY/ByQqk0o5TG5BOlUAlli71DZ1Gd3swx7qw+nxD0dNgpdGNcgrP0PmmVyTS6pKnfQ5FHxP6wpNd6IsKX9ygLY51U1WE0x1thPVUqdlYwqOOIAiwi4ZEhdwPFLryGsqHr1oXbjxR5lSx8LGLpUTInEdYyUBFADpWf46njf+7+Ufzb3LL3/OCPsmveTi6+dFbrdRpKmsuxR8Tm9phSnX5zAlAqRzVXBEAqCEMPWqeGAws5rkAVdAk0r2MUbqhAIihXZNrAfkoagjN1fVLrf3D2D2Y7YC55B5TkDEevcqVbPYvUo1L7EXq5T+cHzr7Ic3k8Ma617BJuQBsh+O44FaJImF41HhYBqHOOdWudpeTPWJ6Kyp/i8mbtNmh23q7MAaXrk2chbpNuef/rFihysxAvs9naq2BlueakWwDQ7FZsHWO0hteBIPrq3CLPAcFHtEOjGNRYwCJyADjvgsm3IvC7ZGss5pEJ7Lxrs3jk7zNA9qekkBCEMULbodXCZ+BzaApXE0SB5ST4NLw27zvSxkN7PCzSU1MTl1vYgzuxDgF/Ds7NPHC+f0/5y+Nkm0QSEiXPgYJPMHE8SJ3juJABGL4kBnBRvMANK5fk3KsKw/AwkwSPNz1cOc8LDOtfTjTf4beI7Ni14VhXAuott3hT5nn07ffTx582rPIIS24M0UzzGj3H18Xv1ewHh1hOCUuHAwIT8GGMkgQqGDB9HQ8RkbF8BtEA2bbuip9n87+9V5f3JmktiflhjwmS4vm4IVQ+2dQRM7dFMwoAZO91P8t7Nfq8EilV0GgxqwqO5k2u4fQEKjWEIXRTLmm7CxXgYAYxTPHBlTa01p7hnL6Gc4T68Izp2355/fvknipM3fx0RDa15qk/LNCzJkuPf3d2//9tq5+Pzh5G/vTs9LSO2dnia4sNMEz6wv5D7sHXc6zxNXyfmJpB4Irzp1QFiLnNoHR8uOkmvabwy6IQ6HOoYDKj8c5p33dItCB75Xi/dhWW1sNj30H3kNf2M5530uh7/OyQ51OVAveJwUqp+ShFi/bIVsMNM8utG6OTpwDnpwwKQMMNfxBKD+djiicUvMBOSMyfwstIzwp2dzec1K5Z4HSeRCqzbOf3cmlpBalpdaYeyYe1hHchQqQFEMnnk4wBJ7z7WN+aqqc8V2Dr11G8AGV9iVSVrQehh8cF3HuLvqAeqg24YcD7VXyARDl3kYqj13S2epkFDixWFUzXNHX1m8J5S8icMog7K59y4LxcQtuclInHHszZL2yojDKHe2SuYEhjE1Mp5Jn2b6bXp1NURep87OXWO3aO9DJrLV1aw3A6gCzxy1LHTkRIwFt3HU+N7Ya4aE4puQp74ZuUdVgSLK1ABNxrU2ZuFZxyWJo4hxmelmqURVc/d1u8TjI/ukXkddXUC00jD7oF5i6WOuJpdMY7FAVRp2swPknvQATFF/M9Tqn+yDesmjAFHZvJl9VW9zT3aZCB0xFyOazKCgyGMUSdycdJs3ISeju7mqJIy8v/8CVHRZMX0k+Y1dPoskc2POMXVnFlmA+vB6xBJGXnVieTx3f1niMM5MBcRR7Lm2I4z7IoxavnsJniv8CSZaqffmw7m+6ARICOYSlDpzGuS3OK+ddisbj7noK5zxMez08JPEe50dHHsmagTHBr3pSMc80qHEiiIfqZfNmAd6w27ttUIsEdSBhQgKWzrIDpGzbJSdltntC8NNZjOUJ+nmO922yF6Gl1bcb4tC+ewTdjGVwSz9QnN4t1+IPZCZnJEP3r5/c14N5mmmqcHDRSrbIAbEVDpqq3eGRbDW75sGF+fHipYGp3k3FI6+YlXEyCaYB2i2SgtfQrEX1kPSwMncSGv5Tg+SxAipqUFMd6WbrZ0WDzodXSnCUDKY8fHcApTWhPVY1BzGVN4SELptYYTFO4GBDNblE3kSYFDr6fikUDFoSEL/qzP25ULpqIatjg2Xox+62Yf97EMv+9DPPhxkHw6zD0fZh+O9Jf/WSXt+4rfH+u+Kf5vjdhEyJOctG7nHHLL019WDfMjrWClVPezWD86zDweEelB/wVbYKcXS7KWJ9WcBjmR8HVmEadNEG/kFfDTXpMn1XO7io4KVadqp2mjTBwCemUHm10Jq07aBm1Td+eucTCv8ROJMBNREjByzrLU/UPv0whAW32PB0+hQARmkv7F060SRAqBEA754Na8Y1ZQTKTE1t/i3CkX4dTiA5IZB1ptWx9lavruddh8Sqj2+tdcllBxRMUzZ6cYxMlG4WPGnACf/Us+/sDDkqI7ybVDkKhop9vOXIrh9yANlIbBKBqafP72tBjFxTeB15ytktIZNwiOHmCwMrrzkJj2HmGCusZ71iDliCnOQVb/VfqghQ7G0sdu/N6ir72apanYHX9Pn4Jdf0qaFokZ6Dz1HmWQbUsii1fZqhhZ5Ot3DZrvZbtqNci9k0mvGg5jKWE1qrwFKrjYWqP0WkaEPZ11I/Bj6YfdHQiSnIHJ1CVbVAn0W8ilsHaYBIhL4RkxIHQvvlYGnflaHRft8Yf96r/4/8yOOVO/ZJr++Ug97JQNmDLlX4VJx2I3MwiSqKB3G9lY7B+p3IcfXcOTXMIB7CoHFU0SqHljw6bCnPz0C9nSrY9W0/RUe9CgciBq2RY+aW7lIlmbwKVLymSYGTSzSNLNYoyThZ3POlAnrFzTKQ/5FCmu+fQPFLemKlpOllgljMr6ySPgWa6zX8l7jy/NC4TY5eM3jzBHq6bsvfS0vBBkE2C6Z9YI1S191q0tziRwcV0eeR+//ZGnMEZQMh4SOdFjBisgk3ciLQ82QpPARH5cZNrgoADZaOjCuncbKMzEOxB5AQ4mz0fS1aTmom53xmNdxXqhiNNieGw3aFdoOFKbOgFDEZ5nQP2u2jtWsOXcPvGDgt/i65Jq4wFBghfpgDjo8dy+keArMd+kdYqjDQxGqtc7zBiSsHPfxZjSF3SMCe0d1MpE8Xg4+4mxF5MdVymUZU4qD5l5T93E3ZSipHLcPC4kGARG+Bu88yBeQzHxMNTCmCWVGNei1Jhi7OmJXPtzkZoHH/HiNHccC5RSYFqW3z8YRvWj19Rst/MTCaJ/JiDKOU6BIrZI0IrkgIzpXfFQEA4+i6mDY3mVjpwPNl0H7ZVAHBeZxtKWrR4FV/+sY7aIJmQKWaZkXgnPnuIZEfITlq47eHV91VgZFLmGqdpQU7AOO0ZjFErBhXcl3Hl6vBt98jAoFKj1hAKY5QUBoNSMq1a7pEVlsJfXh4s15ou8cYo6pa04Yy6NUXGev90OYQLGhInQywc74SJSJhkXhUMD3RjSTPqN7Sd7Exu/xgJy7iDajmU4OnNDNRGcSHscDLCQnY0VVubfPwfOScBC6FREuoo0XjbFHRiPM1a94gKEfawJ90eBoPMZCNF40IkyUrClsFY2q9rd21EiaBsQ21dG8Y9F48b0xYHIAS9M0jCmb0oyTDogU4QrrJMgC4CMBBhjTmrdrCTb1jmsExawg1j5UbigWkhErjV8bEw/89VVelVMUhkB1zUKiIwYUUvNH+9JEPxIAgZSNecD1SeAl/VcDQ28mIfmKIZrUCTa+PoL8gyWYYRGmc5faIiOGRQ3YK9BoiZloGSe9Vih4K0IchVgN2co61GY0ZHkt3bePzsWnzx9ef/vonJydnX548+2j8+nNPz99++j889PHD+/+Bf4K2sX0lQg6qlsteJa43YJn788/PQe5EM2arVeDc5pQLzqqDufHY5qkVkeIwFHf5TG23uDBNli4ytPbpXAMHhZvl7ZhKpikpwKwMHbFBb8K6rhoriesdv84d1SwU6cjI1BGXKHtVkAwwVyTgYOp5DNt0FCRurQJgsDBsDX0Wp27UVF9UbPE4T39noUT+9LXVQR0O6qTcujxbmRRNyJ0iF25OuT2s9xRe4hCEujYESe/Om8/nF4osWZ1jYPntz3S//UVOGh32u3it/+t3/bXsFsT2HvhlI+A7mHRIvSse/ZWrwgIUTBFvCbLZR1WHTFqXQRUDvu9Gjm2lgHaR8KfP5u+dPL/7BVdFvWQO0Yj7MzTjVY/vy6amgwIbaHIZCafeytF41GugEdh7rk44lP6mkbG8jktiIi1ctAlWjuULZ9XnMVmIGHmNU5fBmTQEhRFnvn3NmfpM7Ns2Syt2hfGqgBupU4KDz04CXy4P6uTgnNr29fW03BGSIiptzI0ZgGuZRBBt2/knOVc35YW6ohS47tz1UpIfRwrdVQ2PQHGQdJrTnWYSCv6unsGEE11Eroy4xVPZUEXQzRGcDCtY81cGmWnuijZPj5Kks7CEFGi/a9X3L/td9Lq5lJBJ1WcoOpcrx5ySOyI4hA9JSmMdJsBoYnvxMhnQmaeJeZh5nEcjLj0rasG1zJI09UPyR19U/i38Hwoz1qUTBAGZIxB5uPWnRgP2nA0EzC4rnGxWmtbu1c1xRy2t9FVbBHMt5GMqis7Fjy+9GfUQIJEtolEDQ+vR4wE5k7rNhjwvbHXTPL7zc1kGRKyGXGWfQzIBGefhzHNPqZ+U4OYRy4LAjRgHEnGmxTLTEUynM09sFxEEZ/p5Nwi45dlTTsV4s0be1QEbNR0aRX8qoc9mOLEbiq5G8wtZVVsonWimzx284MI86CqAcurV+B7QzXYa5Tak9hU1svmJOcfX//unF98Oj15bw1KBHPHCq4OoXslPutnmAfl1raJpUk9+AW4jhd7Z1vC4gZA50c1INeI/KgcbHzJ9CiBm9ChD5wBoV4GbljqeGSY5ssUjkcyX2ZCDeTL9JVGvohj5O3dszFS5Ed3skQ6xHXuox87KkVoql2KK+KUgUzEppjrFnuNFw039Jr4ZiGdfXFGhciPdNUX6hd0R8Q0LATmb2dgigcgwwpBMtvbBND+Kmp4vlY4LnY77bwagQ23kD29QDsYMWmUkM4UD2zehF2+sl2+sl2+sur5yurZZucV4bvsZOZhl51sl50sLdplJ0tKdtnJciW77GT1spNl3YAKw5DMhWkUIdfHXe1HMiL0Rh+SJAuta1LDlzKyu1dpR6++6zPiXlnw7kIJfJ7DBjCez21me6kokx9d1fBfrCCTP9yFSnogcnAYEY6dGLnOYBYhUWTng7OGkvawCz+wMwA/MPoWwCn4zQQygC74882rPz97NorAb7+//vzynA3lFHF8+Z64nAk2lJf/NEcE8DlS4sTzpv1rz8zZbm/f2f9baoSX3LvlvMRCJF1fBylKT+LmZv/zyWtgVmUON23uaUK8z5cRmGWsh06juIY6+/Gaf0bclYFTEF6+5GCn6zeNGbTq8+yTc3564Xw4ea8j2T4z7ymeOnPeYbMENXQqIqJlXyF8/exytTmZv7qAi5kI2Ej/Nj8hHWWl7IY3iAX0EA5NS/044GxskijFHp4kjdWgMC2wLvbvtXaY57pM6l6xmFMU5NoHbERoriSJnpUtsx5EXmG3aitRUqtuYdV12U+IWDAm0ryNPfXL8tGlpVxKmrCsBEv1qbtVr73qRVznjaYurVoGbGiAAiQDro/oaO6goddeMhCSkLggwCMiSYhkGrXJ1sNC7WK5RBQVLVQTvtMVdcz7qzpy3EeOCbUEOi5qNeuCzEUeZ27IaHKZZ7spv807MRbZiTGAjnuaGjyZIKl3tNZms14NIDxe5i85crGDqCQeHsRFrN9USTRpmuNffDp5ferof9+f1tbEJ4CIFS0gCtTgUI8+0rb06U4tGRgEzB0D87Jyxp1oGsPD+BASUsdkpyqhHHS7MJlQQdXbAmeZWAxoCL0qNT0sBc3Zx99PL07/jzY+XFnpzcnFydpKn88/rYZkzpzUTBi4zFPEKxlAlEkfc1DLHH8chfBw7MObr9sIkdXu9zPuZ/kF3iwQp3RMpJO6JjhLHlYlTjZzm+HkVBeN1du5ei0be/78t9N376wIfnZy8dtextJK18sEA3nz9vzs3cm/bO03p+e/X3w8c85Pz8/ffvyQbZhEu1+TaEmJ4sk5TWtPrRaMcaG2y6zSQj3bgPcd2Gvv96rhwjT6CgckhAd8a/EKHzS6vXGictyAOIpqChCjUEmeuF6V6VvdkohU0C1QlEN3T8QDC9N5WVYfqh+tSjQpiOSsqYG/tzjYn7SHAZZxpDUSJYHL9TcYXqHwKOJsQjzsAZa4j2tFJajumzc6HMLxkEPp1cGV9Wf9umrTBdfXdv+4qcQAA7RtIBFHVLBQna8dygrt8yoE2Esr5ALgZS2KTf4ha+qrsxMkDwo19vbyVsHJM4tkaZi7gI3yz2SwVKbAHEe5oul0mo+Gp86eBUH7eOPZ/5Dnz7j2MMPfONYOA98IFZLHeq2/+TiIvvls6kim/lwCyb6Z5Xze3Hs2YzF30nY6KPI3JZXYKrme1NDiuTm8Fc7l0+nrj/84/dTcu2zKG2mPcAs1E17NG5dNNdCfSzTWiYXBHPI6+3OSdwHE1NPRNvR1RywwT5P0EFxxF049XVkN3511Fq694zYk1CcDIpMca3Z1t+LGwV3HrJpwkqjHBcTxLEcSz6o64jxPPHEWw0kajZ3CdW40f+bImZSYpGxfnpdkA5/3M9+4U6J6ksb8RRj86TWwkAELkKmIlrNuDbSslAK1vb+YAtWa1pGvRi6wE94KomLkOeN4gI1rYwGSrmLJraZq2jJtNRw0d86VlhrVz0c1DvJqLzbH1LoguZ7WCPL2iJ2/OPaIcASi3oDdOMaPvJxtkFwU2YQAbHof3bfO6FMaWbYRkIELu83usYknmzzvtxeeOwvP3YXn/YXn3sJzf+H5YOH5UKcbK+FKcwMGvTrQ9bE7htwb6AtEXSQwn5Tldk/u0ewJoAvb/d5+Peyi0aQGdj12u9gExybYyaVTr7UvFW9HtwtubECpfiE2tL+W8GEBc2+FCp9UjSQ/dnoTd6uEUdPJfg2UWC/od7rHUPiIYw/aZLWVQb9d90Hw7//kcGdEhOQzh8d0jGerRBuBZTOp3lR1M5vHb7+f/st59/H1yTvn/cnr395+OL08//jrxT9PPp0uq+kuX+tEOPIf5gsvP1m7/bt2wqiLSztKlIb/ZNOD3n73A/MKFIh1ZlauhfxwsdjPhQm6FIBzjcyXb431yopOHvVMKi30vc7m9KbsAv+TxVhgEHzOJW4nKh4wvwabqCIq3le2/IJb+5T4renvFphAHUCeWwPkj/XQq7yjYpywb9OvTzDjlghxU8cY5NEjRIBmDpISuWMdwamuhu17Y+8MSyLPmEShvd77xNShUZVIZot+YzL3/L9j4s5yJVexkI7nYidbA8yrNDiTRo0HGqY0eTqPGAvOURgFOCn6hEXEqIe5Lfje2BPhQH/szV7xM5VBmCvQgUmT8TPGuHlzmLd0wsYYXiCJ+ULPix3bZzfEQISDzNuXHy7evffn96W2z+y6rswmos1YsLCBpvRYwIAUyNoZ5waTOuhdXT/Z7/ezuZfgkLMQJq7VUN+xVReY6uI4RgI7RsoqPZEtiLaqs1zLRsndZmOebyN7y5m95Gy07C33rWO2FIH/9Tzgiv6mjDZtMEuDsxA6yq9APXTAfh1bpVqqk/sJCcjZKMaOEKGFv90EyjRpiwoTrYwQIZyjwKLKxCCKCTFVEvJR9eIyDxfrMk7MHMH5+XtzEtC3KEmXdbenqwGqDrBa/sTdznHiOWQDBmgFzVaAFg9wLNbvRQvMGAmOI85QGly+ZeWcl2M+kKOkVFt1tIKYeC/bCbcfYz7A2abmTMloMAOtiLMRT7e3SErQksQd46QuCdUmr/MsxiLdBzimeLpQE4mxHEnQylTzEZ9gIUFL64MmKEi2kV68UE/4oJVwTFs4YoGHKWghLLr9g6QlCSaYzxs39sx6lmwj0ZI7ot5QLBAymf2A9PFQ3mZP6ddxRayzpxxBITEKlOQ0ZHyEoYWjgGbZN4GdRVtKTF0nwGg8c4ZFQrPre4Q3xUyxwCBzk5IL42VuVEzVBdW9mInWULRc7TaxHLE7ZU1qHs1irnKRC8mVBoe1d2g92O0cdA+MDj7WazyMa0LV79QJdf8YtwYFxWx48wJILuk+SXH0mpqJ3nPax7tKBWAJQe5NA5Ri2Dxwz1zrU/Byvg7eHTRJX4o+/GdTgikCV7iUhNA3yT1tdlYdsIoyCoVE1EPcA1NU0elBBjG8DkLYYTXytT1G8hZoiNWxeh2J173h0Jrn5BLitRGZzrG8tD8vz9EQ/40xWXIZYWc1v4243TXETb9TAzxV7dv6B12tgyc8aVCwg7osjAKC6EbiiBXsrsL1sRcH2HMkEmMTo6GGEGivCZQg5PqqB5G1McrF/U7CPxQB6mQ+D6B60QR2K03D5LqOarPKjVG7vw/T2UE1OyUBXbHBlgCCNXE5HhFoEGAH0yHjLg6Lfflt7aat1TSB2aw9NuYhEcLE8WnY/hZC9s0ZubEHe6Vk2r+dvv74/hSef379+vT8vBhi56fv1MAgMz1gB9eRu+xo1YA3HV3DYNRTi1sDeBuls9qgW2aBmAoiyQQ7kmvNZAG4npWb8J6e/r7eGPj09Pf1xsCnp79/Pv9k1IGmkv4XN3FsMhoup2hNvVG8YKKRJZhYjTgKvYNeQ4f8U52oXyOjQAwCb7BSfzi3PiUC2DXJxv/O+VoI4XvaISyNyZI5C+Wt6ytygqteHaPkWnvqvVkmJ6oDIVlUgE7LFqfWrcaVi7GkLcNWHZUcTdOWqUeGqgwQyCduqbj68WSTkbuPjpMAKjCzFJtdah/xKI7MxXzFVDJ6wU07vQ8ubXx21X/TwcYVQzxD0k8sdz/T65hJ7FmViXpl39jL5jfv3pmWtvi9Fl5UN7bJ35Q0SrBYfp/sVxdIJK3f6BBnfz87O8tfa7xGqnKuvBg/zIdmnHYUuWqRe07VYIl2KuLL9bAGvtSk1ns0Gy/a0LULsE/UNjtzPBxgWaj8Mw7li5YbzQESftJasd3m14XnIckXLD43vcUeMo9aGMiOnLVZy1kOJ7ftX1ZsHvPDZuY4WiyZa4fe38wstMTwJrcw67BmyOFgdgzFTR2sqSowtA/bMPWPKI/UulHRvIAfZdFGzEIFozKWlCYSCGgx32/u2Z7MqdjDkxaNg6Bs4xazcKA+BKhBNZ0bD2w/A7DEgtmkV1J7e9ptRSCGQ4i6LmRenZwqTxiISSiKIupfZ0G2xrK5yFzxPlhHsbGrYRwr+EZ+C01DdGyBU0z6N/Ao6EHvoIaq5ikiGcX3kwKhxMLQxIRrmH/mMd9MgQnalv2TRgtr6LhsDfNGh05r6BhjDRNHrZFGQcv8MrHPGjZ2WcPENmskscwaJnZZI5z/mY+WxCFrmLhjDa4KTUyxhokf1jDxwhrZ+GC3jkBruKbJ3kABi+VA591M0ikvwWsdx0w8PRCvgczrzSk34jfVgzElNzAbhnELaB5xpjBv3T3jSiP8PdtJlkG19rhbYDfwbK0x7/MykwHDuOxQuRvjesAe0jpGIlVutG5pA7VlLhaQCeaO23VIGAWIyuoaaX29+IGd3hAJ9pYPYfr1a+ukWPb+j9eMChbgLy9ffoxlFMtT6jKP0NGrPy7wjWx+vvj1KCn68vKleiy+GCvT8JrvA24X2O+rhwX+oAbJ1zI12FBalnpnIrYqXfqzxTyG+pytk/BnogKnMq9987xQ8NXKn6J4wfpJVU8tDRKjMYGlIGmMY+lhztcYha0OLqznd6fwwozU0T9snt/fFvLLRC58B8XSZ5x8xZ4zxjPh6KCYBViQDVOb/lL/6QYL8gdoLHTbeLFU1E0SYGY6mEe9TcTWphB+XnbNFSXOr2kpSAOWA2ByRM1793R0eU1WzZB5OuBG5nU49yPP7xznv821i2rmIEQz4KMJvo1xtS9d2D3sw/a0Trj6KvtIhSwo97N1FGIVmxZtHCuwik0Xj1A1sSrtYAtYle0+i1Y2/kPmrSpRsnxx/dFS/RHxCoNHbBYLD6/34QFCMCI3PxEWltzZlCJhwQ1gLRwsuMe7AwrmpvbtW2Z2WYzaxEgZZN8+Kh53hjCaXcN+r0bK+yePiupYUwcV73YhVdDV7bG64DD3VHCNRy68Im34dRj/ZLjmpL4NO3Qz/z0HK3Ml2jsmW2pv1x0kwV/BcVtsH1XnwQF+JlTlOlJ8HUw1Le6CYNkeNoFiuel9+5ab4ZPeqWU/htfeDTzo1wmm+dRR0qhj66Bkoeq4FkoWqoCfCprM2jO4PwrgQS2LnyePJjpybi000S3uhCaZHp4cmvgDBMdDDDs3Na5SnxyaEGlMmEykIJNgrQBJVihumxGno0U4ZstMLTNAq6hy/lWBVqWWfFeEGdbjZkhGsc3kmIRNm5mw8lQtBpgyHlZDjnn68zqRSjaLHJtBAMpo4oiwWiFcnpD1qK3/PdKpWV+AI/1vr9frrVDiC+EX6+/PfwMmwo/UOSIyOeyZdZxI/SbUJOqBq9cZ1gDXEQyQxBwFMGSTrEn1Esy6nS0kbisEV6IUrgurV69At2tuBjei18+rt6PUqqvTPWy21f9aRy9A2/7c774AL192Wp3ukfqh/tbK4Es1Whjj4XoAH/XrBJeqDPD+wf4CwKEwaw99bYK5meDeyxigDQyciHmO4g1DLJI8mWtUIkV+bNWCg2LptsbxAHOKJRatZFjR2ivylCM60IPEVM3A2hXNUKgzojVnYVDsHzYfNDUOTD2x1NiBSa224LSVfcMiWVg7KUNeWNKDelOCjBRP7YqD6P9n73qbGseR/lfxkxdPwdwqJCHJDFdHXc0Bu0vtsDM1YZfaWlMuxVISg20ZWU4mc9x89itJlv9KSQwJBzu8mTBSy5bU6lZb6v41QZYaesmdzZOgtr9kM5SRxfke02zNxt3/RUxK+cb/EMgBcjqZdl/BepYRv626e8egf9judAYFhL+yR/h2BSLxkMOXz8rr/70Ys8RDhYiG+3srLeNFomy/viTFJdz/WyPnfPTb+ak4PKrRZI8s1iiYbcMq/78iBnicIKLdCqEl3jpR/iD4QUkNBosmIEmNPKUH/XcAjpMYA+zjuXQHSJ0HQIDdGQy9OFi1UN61O50ukIyQN8uYTT20m4Wi0j87Y4/FEAVe2MRvP2u00nMfIsSbpc4ApQzGFMdJgI1JkArpqbNXZVDZj8xr0W+S16KRM8gu89jr/EByJmbaxXF9Tx/spoFESn3O+VYg4FGZ2JhcRqt+6tXTVj3T8iD+QGTCEWFtaRqzcjorEfSbkW/GPji5AYN4DnqL7cKeDztHRfhVvtIy2BXFe1PTbgcgHPlkCaqDeQyrV0kr8n3jV6kUsKKkfrNab9rIl+FMxWqERWRUJfTcPhXF9psMCU2GEB/27DSQIaf4JJFGTiGDtlxGttlPmS+aNL5BKAzd+jn1fYuPjOFQWLlFHfBA0wG7Te4oX+JSWa0VQoZiLn9NNLtqs1Kxc6KKVtcHquQsFF2wyMRSL2jGyt7tsAErNwdmeeJkRAXmCFttpZm2t8b6qnuUF/16HeYF2PqHddiJc+e+skiW8FpWoVLILwoEGURkKhGmDnAwxghhJLEqBOiU+vRYQZibzWO8ET12E+qxJdj4DSq0dOMGIjR3JXk2Qv04D2AUHMhI1gOYMJImNHLquCpIQEiALEOwpi7XLwYqPYG+06rE9ZOYcZWVdv9buUEE3Vs4xXEpmYWqTN+CaTEXRUnKP2MXh8xfZuqb0PzgmS9zabQ/0mz7SppEq/11LXeZ+a/kwt/cC9ToxSkAXeQr0t9SxpMV1Zi5K1uKY4YV7WkSaqoKlxzWulOSvwh2ztY8Yd+r4HPDxY/IZUUSZqkLqwaRx/13MegPQzDtN8HeWW9iDYZH6mjFfHa843sgvYQ19Ig1erS+SthzkbCn9wrepUQuFksw6yMQNUpP8nIl0uDm0dqzQ162V/QHLgigbZBAmy81e4UMKgKtFJZam+VQkWkl0W5dy65v4ixc6UgSC/vMNIhKdeWmeQ2VHI9IGGEiLY4nq7q2Gg3n+XJFN44Xxop9OYTVyt0ua3f+RLus3ytFNAoqJXUdXyEIZZPiu7g+r3OqWGOXdH1aorR9gaCi74VA7RsOK3eniIf9EETDACR32407e66KeFu+8et9k03Oxc/OpConRyz1VaMq9D0tVa5WE2WaFUqi3mlV8X1agU+tGt5+XYC7cQCWQ/RdqAajf3jBSjP4c78Qi8Dc+2dvE2jH8LLts81G8uw582qtPZ1KjugtGN51wbTzfXw2N4+PMIc3PEu7y9jbV8vrO7a8bnwGlv05QLBJBP0LFvPG8S3m8JTnKeam3r6K+Xcs5subG0AGd+BLp0nM44sS8ziCixAjI/5TQcBzl49cQlpyFQm0vsKKLCywetVYoD7pCnOsQu2ztI3G5ndrqlRxhkKobfjV+Ejzy1xjza2xhukbcQnwQo9RGEzSZGOy4wp1sT4kbY16jcRorDVKMRpr5bTeYVWspff19IG5ePXsK1zIWlOJE6ltQ6sPE+vFzK2lfmlIvEltseqzZcjZkAvG8bFl2spQqhoILTlLRZDikP11VXdJYaczYaWaxypqng2ddwhUDnXb0cf1EI4CYQ1g87Dd6QyBYig3HOhOItIYpOtxFzXLTmgWWM3JKI/IhfuddLJs/dByDRmWILUgdWfeHD8s8Uv33V0D/hwBl/h+aZbqG2YHpD1SxBgBBBk0M2ow7Ag/KtVu7kGQuo/vhFsBZNjoGluK6JuRmOVe83E8a4vGbY+YPOICwrAlPU9LAVJJ7IVTC1osTS8uEvHzogflifDdBuimjUIZnjCFJqPJZOLjGZk6Fc/ANa7KeUPDqdFlRqAU9yMih6jbJL3O5h7Ig0EPJKHwc8WomHh4haAMekJQilmKvRDw2dkNh9hSmpuOFzpV9/VX2/PV9ny1PSvFetuTy5He+X7TECuJg8s/kC1oXV7+8fiwKqXejnpN4F/WW2gNY2W2p6uSMMS+wyicTDw3baDBR84AkCNvTlgIXddr5anzVeWUxKxVirOommYfuC19wv/53LquAiwrc4FXx/Gsmj6u8qjPnEw875T/s6hTCzra2tvrDf7sgMH1/V7vzw7oX993bXT/ZxccXe/baN9u/9Me7/+7/5/WtaWFfI5nCWM+bq3qjIgKlBYA/0tEGfgirro+zOMMR9rU4cuTT33w4Xx0efbr3+9HH09+Ge0bZssjyAvFK+VfIiEOCmP+9B+s1gyGsfoFyTgJWcL/G0m2g3Aqp3rCfw4jSr6IzBvhlJLb8nSmX3D5i6X+t9JcDFYr/ZH/St1rtdKfr/LnVv4IjXmtPeu6FN3i9p1IzkaZNSF0ASniRVkuqGaSOvMbIPA0MvoGb3sZdDlgquu7kNIE4fnDshBg5h7w1gd8XuI2Uug5fBvUlast0liXnUHrKGgSVsvrgDx1AIlyYKMImbT4Ex72cbYgTcIYN0FAGPSHAM9xyACj3nSKueWpU+jb47e4lHNi7E80nK5d2R0f10/HdVObI6SI7DF8C2T8HdaEkkAgUQibWHz4N5vzW9pAyLaW8aZ6cvFWfhDzQQCR+2xn7BG3GevM+7LGTxs9wI65nGH1yu3Fh+dw/34DzjWKE3uabNBJjKmCsXFYdvaxLpafN4NIbJchXvD/STA6hPjfhbzCBSt08wjQl36uqTtay6JbT00wFHzmSsc3cw9aMLREoge+iubYSpGONluknbdLcNt9B1yvCQzJJiq9ezhUIDUpXppZr3QPh0KviJnVkG93KadJGxsuZYSFyYmw/7p81y7PdIofvTwzFGPcwBlqXf7ZwWE3g/BLzxKNud62s+QCgpw8VbIzpSTZMAFw2lqsqz3tUTz8SfofaCt/4h81qzRNupCzR8/lt1OCSKv4UFm8mGHstwx36BnvIUISF46bO/xJVnG8GzKceU3uZxptmk+J4LjAYxhFjheg2Pm966TpvTWs5xRtuIjbXiyp5z3+xAn0Y8wZJOoT6ksIlYM3BwFmUFxfHHgwyFEJCiewBzI51p5BHeXaDUbQneGe/C71wi9CVTASuFAqphljYse6vzeptgzcJZpFb1prCY+t1g2cQ/1KusJjq5DAykrnDCPr/OJ0NO9a9RPpDdcUHDY4UXpeSmSBx4iKjGrrvC10F8IZq7+13BklAZbPEsydYveWyP8X9rS8WaYpZEvRhJCpj0FeIP7y5N4x8SiekC/6HeJflCy4mrjC41Pxysdc4YZetDk7O10gYUvXXH50jzoquzSQKSHBRKS6LyZV2wmHJTaLMyaEORRPvZjRpXOLl04FFrnI7BiztqJtc9rCwcTPv5z94Xz4ePL+g3Px/uTn81/P7NHHHy+v3n8+sy88l5KYTJjCVbJ+vbRPEsqXzO/csiOhfR56P3o+voBR5IVTe/TH6PLsou2Fns27aEDeUI/jJJbqmXWLlw3BnTN80Ltd5HntdnsKNVH1cQss1aDrKKa6dBkxMqUwmnmuM/aJQCB15JuekNsneT+W9sfzU1vlQLxcRtjqyPrR+adT3/8szi9G3jTE6BQyeBFP1/C8NEhLDTKdzgfy/+2wiRvApvwfDA5BnIznmDLAaJKC3NDtXCevXQaBgMVL9bSGzViDb+VGCTdxCN/jpSn/BpGQf1v5eI79tIjCEJHgC+hOxyCCU6wgscQ1RxL8jblRpSSO/XJJt07UrVP16lS9AlXouXiWJ2lc4jgiC2xKu/jeKsyLsCAjwuQG7y8feDc+iRusm3Vbff9oCCiOSUJdvFX84BVLJYkQZHjnquET77mH4/qO8JvowBqRl73chqJf3DVB/t5U0J9S0YvUuztn2CY791XamTXMU33eBvvm+OuLZl/gScOa78omy1pzMPStJRSbaPGm9UPLDSScpO5ir/z9cxV4n+h8dGZEn1QZjrMj6LkHrauL84Z8uWmCr77+Er3TfwvS+QM5pqqAZKMiZ+627OOMSf8NAAD//1BLBwgZ5VFEHWUAAHNCAwBQSwECFAAUAAgACAAAAAAAAAAAAAUAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAY3VzdG9tLnBvbGljeVBLAQIUABQACAAIAAAAAAAZ5VFEHWUAAHNCAwAOAAAAAAAAAAAAAAAAAEAAAABkZWZhdWx0LnBvbGljeVBLBQYAAAAAAgACAHcAAACZZQAAAAA=" + }, + "headers": { + "content-type": "application/zip" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Download the Workload Protection policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:36.906Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/abc-def-ghi", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Agent rule not found: agentRuleId=abc-def-ghi)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:37.390Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "name": "testgetaworkloadprotectionagentruleus1fedreturnsokresponse1765469377" + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"gdb-grp-c2f\",\"attributes\":{\"version\":1,\"name\":\"testgetaworkloadprotectionagentruleus1fedreturnsokresponse1765469377\",\"description\":\"My Agent rule\",\"expression\":\"exec.file.name == \\\"sh\\\"\",\"category\":\"Process Activity\",\"defaultRule\":false,\"enabled\":true,\"creationAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creationDate\":1765469377827,\"updateAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"updateDate\":1765469377827,\"filters\":[\"os == \\\"linux\\\"\"],\"actions\":[],\"agentConstraint\":\"\",\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}},\"type\":\"agent_rule\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/gdb-grp-c2f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"gdb-grp-c2f\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creationDate\":1765469377827,\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"defaultRule\":false,\"description\":\"My Agent rule\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"sh\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"testgetaworkloadprotectionagentruleus1fedreturnsokresponse1765469377\",\"updateAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"updateDate\":1765469377827,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/gdb-grp-c2f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:38.988Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/cws/agent_rules/abc-def-ghi", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"failed to get rule\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a Workload Protection agent rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:39.571Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testgetaworkloadprotectionagentrulereturnsokresponse1765469379" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"yos-skc-lxw\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testgetaworkloadprotectionagentrulereturnsokresponse1765469379\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469379913,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "actions": [ + { + "set": { + "name": "test_set", + "scope": "process", + "value": "test_value" + } + }, + { + "hash": {} + } + ], + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "name": "testgetaworkloadprotectionagentrulereturnsokresponse1765469379", + "policy_id": "yos-skc-lxw", + "product_tags": [ + "security:attack", + "technique:T1059" + ] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5dm-ng6-nh7\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"test_set\",\"value\":\"test_value\",\"scope\":\"process\"},\"disabled\":false},{\"hash\":{},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1765469380630,\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"defaultRule\":false,\"description\":\"My Agent rule\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"sh\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"yos-skc-lxw\"],\"name\":\"testgetaworkloadprotectionagentrulereturnsokresponse1765469379\",\"product_tags\":[\"security:attack\",\"technique:T1059\"],\"updateDate\":1765469380630,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/cws/agent_rules/5dm-ng6-nh7", + "query": [ + [ + "policy_id", + "yos-skc-lxw" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5dm-ng6-nh7\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"test_set\",\"value\":\"test_value\",\"scope\":\"process\"},\"disabled\":false},{\"hash\":{},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1765469380630,\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"defaultRule\":false,\"description\":\"My Agent rule\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"sh\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"yos-skc-lxw\"],\"name\":\"testgetaworkloadprotectionagentrulereturnsokresponse1765469379\",\"product_tags\":[\"security:attack\",\"technique:T1059\"],\"updateDate\":1765469380630,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/agent_rules/5dm-ng6-nh7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/yos-skc-lxw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a Workload Protection agent rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:43.635Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/cws/policy/non-existent-policy-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a Workload Protection policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:44.337Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testgetaworkloadprotectionpolicyreturnsokresponse1765469384" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cs2-3lk-r1k\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testgetaworkloadprotectionpolicyreturnsokresponse1765469384\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469384685,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/cws/policy/cs2-3lk-r1k", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cs2-3lk-r1k\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":0,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":0,\"name\":\"testgetaworkloadprotectionpolicyreturnsokresponse1765469384\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":0,\"updateDate\":1765469384685,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/cs2-3lk-r1k", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a Workload Protection policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:46.688Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"uzw-uvd-4gx\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"field\":\"process.parent.pid\",\"name\":\"kernel_headers_pid\",\"scope\":\"process\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Kernel headers package downloaded via package manager\",\"enabled\":true,\"expression\":\"exec.file.path in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 (\\n exec.args in [~\\\"*linux-headers*\\\", ~\\\"*kernel-devel*\\\", ~\\\"*kernel-headers*\\\", ~\\\"*linux-devel*\\\"]\\n || exec.args_options in [~\\\"linux-headers*\\\", ~\\\"kernel-devel*\\\", ~\\\"kernel-headers*\\\", ~\\\"linux-devel*\\\"]\\n)\\n\\u0026\\u0026 (\\n exec.args in [~\\\"*install*\\\", ~\\\"*add*\\\"] \\n || exec.args_flags in [\\\"i\\\", \\\"install\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"install_kernel_headers\",\"updateDate\":1765461335619,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"yde-3oy-fmf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A Trufflehog process was executed\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"trufflehog\\\" || (process.args =~ \\\"* filesystem *\\\" \\u0026\\u0026 exec.args_options in [~\\\"results=*\\\"])\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"trufflehog_executed\",\"updateDate\":1765461320151,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"s7m-ua3-tli\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"pid_file\",\"scope\":\"process\",\"ttl\":10000000000,\"value\":true}}],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A PID file was created in /var/run, indicating a BPFDoor malware infection.\",\"enabled\":true,\"expression\":\"open.file.path in [\\\"/var/run/haldrund.pid\\\", \\\"/var/run/hald-smartd.pid\\\", \\\"/var/run/system.pid\\\", \\\"/var/run/hp-health.pid\\\", \\\"/var/run/hald-addon.pid\\\", \\\"/run/haldrund.pid\\\", \\\"/run/hald-smartd.pid\\\", \\\"/run/system.pid\\\", \\\"/run/hp-health.pid\\\", \\\"/run/hald-addon.pid\\\"] \\u0026\\u0026 open.flags \\u0026 O_CREAT != 0\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"bpfdoor_pid_file_creation\",\"updateDate\":1765461305317,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"zuq-yfd-hun\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"field\":\"process.container.id\",\"name\":\"ratelimit_priv_container\",\"scope\":\"container\",\"ttl\":10000000000}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A privileged container was created\",\"enabled\":true,\"expression\":\"exec.file.name != \\\"\\\" \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003c 1s \\u0026\\u0026 process.cap_permitted \\u0026 CAP_SYS_ADMIN \\u003e 0 \\u0026\\u0026 process.container.id != ${container.ratelimit_priv_container}\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"deploy_priv_container\",\"updateDate\":1765461275366,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"4xt-sxh-luz\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The mount system call was successfully executed in a container\",\"enabled\":true,\"expression\":\"mount.retval == 0 \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"mount_in_container\",\"updateDate\":1765461263983,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"pr9-h2a-hay\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"package_install_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context of npm package installation\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"node\\\", \\\"npm\\\"] \\u0026\\u0026 \\n(process.args =~ \\\"* install *\\\" || process.args =~ \\\"* add *\\\" || process.args =~ \\\"* i *\\\" || \\n process.args =~ \\\"* in *\\\" || process.args =~ \\\"* ins *\\\" || process.args =~ \\\"* inst *\\\" || \\n process.args =~ \\\"* insta *\\\" || process.args =~ \\\"* instal *\\\" || process.args =~ \\\"* isnt *\\\" || \\n process.args =~ \\\"* isnta *\\\" || process.args =~ \\\"* isntal *\\\" || process.args =~ \\\"* isntall *\\\") \\u0026\\u0026\\nnot(process.args =~ \\\"*-e *\\\") \\u0026\\u0026\\n${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\", ~\\\"service_*\\\", ~\\\"service_new_cgroup_*\\\", ~\\\"interactive_shell_*\\\", ~\\\"k8s_session_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_npm_install\",\"updateDate\":1765461257039,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"had-5ot-yh0\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"field\":\"process.file.name\",\"name\":\"imds_v1_usage_services\",\"ttl\":10000000000}}],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An AWS IMDSv1 request was issued\",\"enabled\":false,\"expression\":\"imds.cloud_provider == \\\"aws\\\" \\u0026\\u0026 imds.aws.is_imds_v2 == false \\u0026\\u0026 process.file.name not in ${imds_v1_usage_services}\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"imds_v1_usage\",\"updateDate\":1765461257033,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"vjy-zww-l4n\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\",\"scope_field\":\"cgroup_write.pid\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"service_new_cgroup_write_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\",\"scope_field\":\"cgroup_write.pid\"}}],\"agentConstraint\":\"\",\"category\":\"Kernel Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from new service cgroup write\",\"enabled\":true,\"expression\":\"cgroup_write.pid \\u003e 0 \\u0026\\u0026 (process.envs in [\\\"DD_SERVICE\\\", \\\"OTEL_SERVICE_NAME\\\"] || \\\"tags.datadoghq.com/service\\\" in container.tags) \\u0026\\u0026 ${process.correlation_key} in [~\\\"service_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_service_new_cgroup_write\",\"updateDate\":1765461237461,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"sa7-eth-w9c\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"field\":\"exec.file.path\",\"name\":\"chain_exec_unlink\",\"scope\":\"cgroup\",\"ttl\":30000000000}},{\"set\":{\"append\":true,\"field\":\"exec.file.path\",\"name\":\"exec_new_file_in_cgroup\",\"scope\":\"cgroup\",\"size\":10000,\"ttl\":1800000000000}},{\"set\":{\"field\":\"exec.file.path\",\"name\":\"correlation_key_file_path\",\"scope\":\"cgroup\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A recently modified file was executed\",\"enabled\":true,\"expression\":\"exec.file.change_time \\u003c 30s \\u0026\\u0026 cgroup.file.inode != 0 \\u0026\\u0026 exec.file.path not in ${cgroup.exec_new_file_in_cgroup} \\u0026\\u0026 exec.file.in_upper_layer != false \\u0026\\u0026 container.created_at \\u003e 1m\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"exec_new_file\",\"updateDate\":1765461211450,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"rsp-g6i-jdi\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"systemctl used to stop a service\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"systemctl\\\" \\u0026\\u0026 exec.args in [~\\\"*stop*\\\", ~\\\"*kill*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"service_stop\",\"updateDate\":1765461205844,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"f3b-103-7p3\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process connected to a cryptocurrency mining pool\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [~\\\"*.minexmr.com\\\", \\\"minexmr.com\\\", ~\\\"*.nanopool.org\\\", \\\"nanopool.org\\\", ~\\\"*.supportxmr.com\\\", \\\"supportxmr.com\\\", ~\\\"*.c3pool.com\\\", \\\"c3pool.com\\\", ~\\\"*.p2pool.io\\\", \\\"p2pool.io\\\", ~\\\"*.ethermine.org\\\", \\\"ethermine.org\\\", ~\\\"*.f2pool.com\\\", \\\"f2pool.com\\\", ~\\\"*.poolin.me\\\", \\\"poolin.me\\\", ~\\\"*.rplant.xyz\\\", \\\"rplant.xyz\\\", ~\\\"*.miningocean.org\\\", \\\"miningocean.org\\\", \\\"donate.v2.xmrig.com\\\", ~\\\"*.hashvault.pro\\\", \\\"hashvault.pro\\\", ~\\\"*.moneroocean.stream\\\", \\\"moneroocean.stream\\\", ~\\\"*.skypool.org\\\", \\\"skypool.org\\\", ~\\\"*.xmrpool.eu\\\", \\\"xmrpool.eu\\\", ~\\\"*.pool.kryptex.com\\\", \\\"pool.kryptex.com\\\", ~\\\"*.herominers.com\\\", \\\"herominers.com\\\", ~\\\"*.solopool.org\\\", \\\"solopool.org\\\", ~\\\"*.monerohash.com\\\", \\\"monerohash.com\\\", ~\\\"*.antpool.com\\\", \\\"antpool.com\\\", ~\\\"*.pool.xmr.pt\\\", \\\"pool.xmr.pt\\\", ~\\\"*.monerod.org\\\", \\\"monerod.org\\\", ~\\\"*.dxpool.com\\\", \\\"dxpool.com\\\", ~\\\"*.bohemianpool.com\\\", \\\"bohemianpool.com\\\", ~\\\"*.prohashing.com\\\", \\\"prohashing.com\\\", ~\\\"*.mining-dutch.nl\\\", \\\"mining-dutch.nl\\\", ~\\\"*.gntl.uk\\\", \\\"gntl.uk\\\", ~\\\"*.fairhash.org\\\", \\\"fairhash.org\\\", ~\\\"*.volt-mine.com\\\", \\\"volt-mine.com\\\", ~\\\"*.zeropool.io\\\", \\\"zeropool.io\\\", ~\\\"*.fastpool.xyz\\\", \\\"fastpool.xyz\\\", ~\\\"*.xmr-pool.com\\\", \\\"xmr-pool.com\\\", ~\\\"*.zergpool.com\\\", \\\"zergpool.com\\\", ~\\\"*.xmrminers.com\\\", \\\"xmrminers.com\\\", ~\\\"*.monerop.com\\\", \\\"monerop.com\\\", ~\\\"*.pool-pay.com\\\", \\\"pool-pay.com\\\", ~\\\"*.solopool.pro\\\", \\\"solopool.pro\\\", ~\\\"*.frjoga.com\\\", \\\"frjoga.com\\\", ~\\\"*.infinium.space\\\", \\\"infinium.space\\\", ~\\\"*.minorpool.com\\\", \\\"minorpool.com\\\", ~\\\"*.cedric-crispin.com\\\", \\\"cedric-crispin.com\\\", ~\\\"*.aikapool.com\\\", \\\"aikapool.com\\\", ~\\\"*.2miners.com\\\", \\\"2miners.com\\\", ~\\\"*.h9.com\\\", \\\"h9.com\\\", ~\\\"*.ekapool.com\\\", \\\"ekapool.com\\\", ~\\\"*.k1pool.com\\\", \\\"k1pool.com\\\", ~\\\"*.raptorhash.net\\\", \\\"raptorhash.net\\\", ~\\\"*.miningmadness.com\\\", \\\"miningmadness.com\\\", ~\\\"*.zephyrprotocol.com\\\", \\\"zephyrprotocol.com\\\", ~\\\"*.thunderhash.com\\\", \\\"thunderhash.com\\\", ~\\\"*.newpool.xyz\\\", \\\"newpool.xyz\\\", ~\\\"*.coinminerhub.com\\\", \\\"coinminerhub.com\\\", ~\\\"*.safex.org\\\", \\\"safex.org\\\", ~\\\"*.safex.ninja\\\", \\\"safex.ninja\\\"] \\u0026\\u0026 connect.addr.is_public == true \\u0026\\u0026 connect.addr.port not in [53, 80, 443]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"mining_pool_domain\",\"updateDate\":1765461198676,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"pbi-dxy-kcf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"field\":\"process.container.id\",\"name\":\"core_pattern_write_container_id\",\"scope\":\"container\",\"ttl\":1800000000000}}],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Detect any attempt to modify /proc/sys/kernel/core_pattern from a container, which might result to escape to host when a core dump is triggered.\",\"enabled\":true,\"expression\":\"open.file.name == \\\"core_pattern\\\" \\u0026\\u0026\\nopen.file.filesystem == \\\"proc\\\" \\u0026\\u0026\\nopen.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 \\nprocess.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"core_pattern_write\",\"updateDate\":1765461197270,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"ez9-ozl-3lz\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process resolved a DNS name associated with cryptomining activity\",\"enabled\":true,\"expression\":\"dns.question.name in [~\\\"*.minexmr.com\\\", \\\"minexmr.com\\\", ~\\\"*.nanopool.org\\\", \\\"nanopool.org\\\", ~\\\"*.supportxmr.com\\\", \\\"supportxmr.com\\\", ~\\\"*.c3pool.com\\\", \\\"c3pool.com\\\", ~\\\"*.p2pool.io\\\", \\\"p2pool.io\\\", ~\\\"*.ethermine.org\\\", \\\"ethermine.org\\\", ~\\\"*.f2pool.com\\\", \\\"f2pool.com\\\", ~\\\"*.poolin.me\\\", \\\"poolin.me\\\", ~\\\"*.rplant.xyz\\\", \\\"rplant.xyz\\\", ~\\\"*.miningocean.org\\\", \\\"miningocean.org\\\", \\\"donate.v2.xmrig.com\\\", ~\\\"*.hashvault.pro\\\", \\\"hashvault.pro\\\", ~\\\"*.moneroocean.stream\\\", \\\"moneroocean.stream\\\", ~\\\"*.skypool.org\\\", \\\"skypool.org\\\", ~\\\"*.xmrpool.eu\\\", \\\"xmrpool.eu\\\", ~\\\"*.pool.kryptex.com\\\", \\\"pool.kryptex.com\\\", ~\\\"*.herominers.com\\\", \\\"herominers.com\\\", ~\\\"*.solopool.org\\\", \\\"solopool.org\\\", ~\\\"*.monerohash.com\\\", \\\"monerohash.com\\\", ~\\\"*.antpool.com\\\", \\\"antpool.com\\\", ~\\\"*.pool.xmr.pt\\\", \\\"pool.xmr.pt\\\", ~\\\"*.monerod.org\\\", \\\"monerod.org\\\", ~\\\"*.dxpool.com\\\", \\\"dxpool.com\\\", ~\\\"*.bohemianpool.com\\\", \\\"bohemianpool.com\\\", ~\\\"*.prohashing.com\\\", \\\"prohashing.com\\\", ~\\\"*.mining-dutch.nl\\\", \\\"mining-dutch.nl\\\", ~\\\"*.gntl.uk\\\", \\\"gntl.uk\\\", ~\\\"*.fairhash.org\\\", \\\"fairhash.org\\\", ~\\\"*.volt-mine.com\\\", \\\"volt-mine.com\\\", ~\\\"*.zeropool.io\\\", \\\"zeropool.io\\\", ~\\\"*.fastpool.xyz\\\", \\\"fastpool.xyz\\\", ~\\\"*.xmr-pool.com\\\", \\\"xmr-pool.com\\\", ~\\\"*.zergpool.com\\\", \\\"zergpool.com\\\", ~\\\"*.xmrminers.com\\\", \\\"xmrminers.com\\\", ~\\\"*.monerop.com\\\", \\\"monerop.com\\\", ~\\\"*.pool-pay.com\\\", \\\"pool-pay.com\\\", ~\\\"*.solopool.pro\\\", \\\"solopool.pro\\\", ~\\\"*.frjoga.com\\\", \\\"frjoga.com\\\", ~\\\"*.infinium.space\\\", \\\"infinium.space\\\", ~\\\"*.minorpool.com\\\", \\\"minorpool.com\\\", ~\\\"*.cedric-crispin.com\\\", \\\"cedric-crispin.com\\\", ~\\\"*.aikapool.com\\\", \\\"aikapool.com\\\", ~\\\"*.2miners.com\\\", \\\"2miners.com\\\", ~\\\"*.h9.com\\\", \\\"h9.com\\\", ~\\\"*.ekapool.com\\\", \\\"ekapool.com\\\", ~\\\"*.k1pool.com\\\", \\\"k1pool.com\\\", ~\\\"*.raptorhash.net\\\", \\\"raptorhash.net\\\", ~\\\"*.miningmadness.com\\\", \\\"miningmadness.com\\\", ~\\\"*.zephyrprotocol.com\\\", \\\"zephyrprotocol.com\\\", ~\\\"*.thunderhash.com\\\", \\\"thunderhash.com\\\", ~\\\"*.newpool.xyz\\\", \\\"newpool.xyz\\\", ~\\\"*.coinminerhub.com\\\", \\\"coinminerhub.com\\\", ~\\\"*.safex.org\\\", \\\"safex.org\\\", ~\\\"*.safex.ninja\\\", \\\"safex.ninja\\\"] \\u0026\\u0026 process.file.name != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"mining_pool_lookup\",\"updateDate\":1765461197269,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"ydl-izj-vgr\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsenter used to breakout of container\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"nsenter\\\" \\u0026\\u0026 exec.args_options in [\\\"target=1\\\", \\\"t=1\\\"] \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"nsenter_in_container\",\"updateDate\":1763480753045,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"lbu-wdw-kft\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The executable bit was added to a newly created file\",\"enabled\":true,\"expression\":\"chmod.file.in_upper_layer \\u0026\\u0026\\nchmod.file.change_time \\u003c 30s \\u0026\\u0026\\nprocess.container.id != \\\"\\\" \\u0026\\u0026\\nchmod.file.destination.mode != chmod.file.mode \\u0026\\u0026\\nchmod.file.destination.mode \\u0026 S_IXUSR|S_IXGRP|S_IXOTH \\u003e 0 \\u0026\\u0026\\nprocess.argv in [\\\"+x\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"executable_bit_added\",\"updateDate\":1763480746422,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"kye-obt-4fd\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Kubernetes DNS enumeration\",\"enabled\":true,\"expression\":\"dns.question.name == \\\"any.any.svc.cluster.local\\\" \\u0026\\u0026 dns.question.type == SRV \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kubernetes_dns_enumeration\",\"updateDate\":1763480746134,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"aib-e3i-ntq\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The debugfs was executed in a container\",\"enabled\":true,\"expression\":\"exec.comm == \\\"debugfs\\\" \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"debugfs_in_container\",\"updateDate\":1763480737963,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"9mk-xxe-lpw\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1617722068555,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container management utility was executed in a container\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"docker\\\", \\\"kubectl\\\", \\\"ctr\\\"] \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"suspicious_container_client\",\"updateDate\":1763480611265,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"wew-y1h-1um\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"hash\":{}}],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A compiler wrote a suspicious file in a container\",\"enabled\":true,\"expression\":\"open.flags \\u0026 O_CREAT \\u003e 0\\n\\u0026\\u0026 (\\n (open.file.path =~ \\\"/tmp/**\\\" \\u0026\\u0026 open.file.name in [~\\\"*.ko\\\", ~\\\".*\\\"])\\n || open.file.path in [~\\\"/var/tmp/**\\\", ~\\\"/root/**\\\", ~\\\"*/bin/*\\\", ~\\\"/usr/local/lib/**\\\"]\\n)\\n\\u0026\\u0026 (process.comm in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || process.ancestors.comm in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || process.file.name in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || process.ancestors.file.name in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"])\\n\\u0026\\u0026 process.file.name not in [\\\"pip\\\", ~\\\"python*\\\"]\\n\\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"compile_after_delivery\",\"updateDate\":1763480611265,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"6t0-pxf-oag\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container management socket was referenced in a cURL command\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"curl\\\" \\u0026\\u0026 exec.args_flags in [\\\"unix-socket\\\"] \\u0026\\u0026 exec.args in [~\\\"*docker.sock*\\\", ~\\\"*dockershim.sock*\\\", ~\\\"*containerd.sock*\\\", ~\\\"*crio.sock*\\\", ~\\\"*frakti.sock*\\\", ~\\\"*rktlet.sock*\\\"] \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"curl_mgmt_socket\",\"updateDate\":1763480611264,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"pwg-71z-aob\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\\n\\u0026\\u0026 process.container.id != \\\"\\\"\\n\\u0026\\u0026 container.created_at \\u003e 90s\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssl_certificate_tampering_open_v2\",\"updateDate\":1763480611263,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"3lt-gov-2yu\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1642158534952,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A network utility was executed\",\"enabled\":true,\"expression\":\"(exec.comm in [\\\"socat\\\", \\\"dig\\\", \\\"nslookup\\\", \\\"host\\\", ~\\\"netcat*\\\", ~\\\"nc*\\\", \\\"ncat\\\"] ||\\n exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"]) \\u0026\\u0026\\nprocess.container.id == \\\"\\\" \\u0026\\u0026 exec.args not in [ ~\\\"*localhost*\\\", ~\\\"*127.0.0.1*\\\", ~\\\"*motd.ubuntu.com*\\\" ]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"net_util\",\"updateDate\":1763480611262,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"mgd-dmc-zta\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An interactive shell was started inside of a container\",\"enabled\":true,\"expression\":\"exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] \\u0026\\u0026 exec.args_flags in [\\\"i\\\"] \\u0026\\u0026 process.container.id !=\\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"interactive_shell_in_container\",\"updateDate\":1763480611262,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"d6x-aku-m2l\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process attempted to overwrite the container entrypoint\",\"enabled\":true,\"expression\":\"open.file.path == \\\"/proc/self/fd/1\\\" \\u0026\\u0026 open.flags \\u0026 O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY \\u003e 0 \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"overwrite_entrypoint\",\"updateDate\":1763480611262,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"tna-ty5-e7c\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The host file system was mounted in a container\",\"enabled\":true,\"expression\":\"mount.source.path == \\\"/\\\" \\u0026\\u0026 mount.fs_type != \\\"overlay\\\" \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"mount_host_fs\",\"updateDate\":1763480611261,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"9rv-bls-azq\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nohup was used to ignore process termination signals\",\"enabled\":true,\"expression\":\"exec.file.name != \\\"\\\" \\u0026\\u0026 process.parent.comm == \\\"nohup\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"nohup_usage\",\"updateDate\":1763480611260,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"pwh-omk-qrr\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1652129906455,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container executed a new binary not found in the container image\",\"enabled\":true,\"expression\":\"process.container.id != \\\"\\\" \\u0026\\u0026 process.file.in_upper_layer \\u0026\\u0026 process.file.modification_time \\u003c 30s \\u0026\\u0026 exec.file.name != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"new_binary_execution_in_container\",\"updateDate\":1763480611259,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"3tj-btx-kvo\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1617722067648,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Package management was detected in a container\",\"enabled\":true,\"expression\":\"exec.file.path in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"package_management_in_container\",\"updateDate\":1763480611257,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":7}},{\"id\":\"mps-sso-ozk\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container performed various enumeration activities including checking container runtime, process privileges, user namespace mappings, Linux Security Modules, mount points, and network namespaces.\",\"enabled\":true,\"expression\":\"process.container.id != \\\"\\\" \\u0026\\u0026 (\\n open.file.path in [~\\\"/run/systemd/container\\\"] ||\\n open.file.path in [~\\\"/proc/*/status\\\", ~\\\"/proc/*/task/*/status\\\"] ||\\n (open.file.path in [~\\\"/proc/*/uid_map\\\"] \\u0026\\u0026 process.file.name not in [\\\"runc\\\"]) ||\\n open.file.path in [~\\\"/proc/*/attr/current\\\"] ||\\n open.file.path in [~\\\"/proc/*/mountinfo\\\"] ||\\n open.file.path in [~\\\"/proc/*/cgroup\\\"] ||\\n open.file.path in [~\\\"/proc/net/unix\\\"]\\n) \\u0026\\u0026\\nprocess.file.in_upper_layer \\u0026\\u0026 \\nprocess.file.path not in [\\\"/opt/datadog-agent/embedded/bin/agent\\\", \\\"/opt/datadog-agent/embedded/bin/system-probe\\\", \\\"/opt/datadog-agent/embedded/bin/security-agent\\\", \\\"/opt/datadog-agent/embedded/bin/process-agent\\\", \\\"/opt/datadog-agent/embedded/bin/trace-agent\\\", \\\"/opt/datadog-agent/bin/agent/agent\\\", \\\"/opt/datadog/apm/inject/auto_inject_runc\\\", \\\"/usr/bin/dd-host-install\\\", \\\"/usr/bin/dd-host-container-install\\\", \\\"/usr/bin/dd-container-install\\\", \\\"/opt/datadog-agent/bin/datadog-cluster-agent\\\", ~\\\"/opt/datadog-packages/**\\\", ~\\\"/opt/datadog-installer/**\\\"] \",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"container_breakout_enumeration_tool\",\"updateDate\":1763480611255,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"6lb-gwv-535\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new static pod manifest was created in the Kubernetes manifests directory\",\"enabled\":true,\"expression\":\"open.flags \\u0026 O_CREAT \\u003e 0\\n\\u0026\\u0026 open.file.path in [~\\\"/etc/kubernetes/manifests/*\\\"]\\n\\u0026\\u0026 open.file.extension in [\\\".yaml\\\", \\\".yml\\\"]\\n\\u0026\\u0026 process.file.path not in [\\\"/usr/bin/kubelet\\\", \\\"/usr/local/bin/kubelet\\\", \\\"/opt/bin/kubelet\\\", \\\"/usr/bin/kubeadm\\\", \\\"/usr/local/bin/kubeadm\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"static_pod_manifest_created\",\"updateDate\":1763480611255,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"ifl-wfe-sch\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1617722068439,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A network utility was executed in a container\",\"enabled\":true,\"expression\":\"(exec.comm in [\\\"socat\\\", \\\"dig\\\", \\\"nslookup\\\", \\\"host\\\", ~\\\"netcat*\\\", ~\\\"nc*\\\", \\\"ncat\\\"] ||\\n exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"]) \\u0026\\u0026\\nprocess.container.id != \\\"\\\" \\u0026\\u0026 exec.args not in [ ~\\\"*localhost*\\\", ~\\\"*127.0.0.1*\\\", ~\\\"*motd.ubuntu.com*\\\" ]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"net_util_in_container\",\"updateDate\":1763480611254,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":7}},{\"id\":\"7x1-glr-ofl\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 ((O_CREAT|O_RDWR|O_WRONLY|O_TRUNC)) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003e 90s\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"credential_modified_open_v2\",\"updateDate\":1763480565131,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"kmx-s3s-htb\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 ((O_RDWR|O_WRONLY|O_CREAT)) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n) \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003e 90s \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"nsswitch_conf_mod_open_v2\",\"updateDate\":1763480565128,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"jjg-cwd-bi8\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n open.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ]\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003e 90s\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pci_11_5_critical_binaries_open_v2\",\"updateDate\":1763480565127,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"ily-tsr-dtj\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1627392836759,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A compiler was executed inside of a container\",\"enabled\":true,\"expression\":\"(exec.comm in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || exec.file.name in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || (exec.file.name == \\\"go\\\" \\u0026\\u0026 exec.args in [~\\\"*build*\\\", ~\\\"*run*\\\"])) \\u0026\\u0026 process.container.id !=\\\"\\\" \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/cilium-agent\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"compiler_in_container\",\"updateDate\":1763480565119,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"x3k-0en-bhm\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n open.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (open.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n) \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003e 90s\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssh_authorized_keys_open_v2\",\"updateDate\":1763480476210,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"foo-pve-qbq\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Kernel Activity\",\"creationDate\":1650293718365,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A kernel module was loaded from memory inside a container\",\"enabled\":true,\"expression\":\"load_module.loaded_from_memory == true \\u0026\\u0026 process.container.id !=\\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_load_from_memory_container\",\"updateDate\":1763480476209,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"ieg-lmk-cgo\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Kernel Activity\",\"creationDate\":1650293718705,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container loaded a new kernel module\",\"enabled\":true,\"expression\":\"load_module.name != \\\"\\\" \\u0026\\u0026 process.container.id !=\\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_load_container\",\"updateDate\":1763480476201,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"tyx-oha-0zh\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Detects use of prctl to change process name to mimic legitimate system processes or kernel threads\",\"enabled\":true,\"expression\":\"prctl.option == PR_SET_NAME \\u0026\\u0026 (prctl.new_name in [\\\"systemd\\\", \\\"init\\\", \\\"sshd\\\", \\\"cron\\\", \\\"crond\\\", \\\"rsyslogd\\\", \\\"syslog-ng\\\",\\n \\\"dbus-daemon\\\", \\\"dbus-broker\\\", \\\"udevd\\\", \\\"systemd-udevd\\\", \\\"NetworkManager\\\",\\n \\\"systemd-journald\\\", \\\"systemd-logind\\\", \\\"systemd-resolved\\\", \\\"systemd-networkd\\\",\\n \\\"systemd-timesyncd\\\", \\\"accounts-daemon\\\", \\\"polkitd\\\", \\\"auditd\\\"] || prctl.new_name in [r\\\"^\\\\[.*\\\\]$\\\"]) \\u0026\\u0026 process.file.name not in [\\\"systemd\\\", \\\"init\\\", \\\"sshd\\\", \\\"cron\\\", \\\"crond\\\", \\\"rsyslogd\\\", \\\"syslog-ng\\\",\\n \\\"dbus-daemon\\\", \\\"dbus-broker\\\", \\\"udevd\\\", \\\"systemd-udevd\\\", \\\"NetworkManager\\\",\\n \\\"systemd-journald\\\", \\\"systemd-logind\\\", \\\"systemd-resolved\\\", \\\"systemd-networkd\\\",\\n \\\"systemd-timesyncd\\\", \\\"accounts-daemon\\\", \\\"polkitd\\\", \\\"auditd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"prctl_masquerading\",\"updateDate\":1763480473687,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"upw-rcz-uuw\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process was executed in an SSH session\",\"enabled\":true,\"expression\":\"exec.comm != \\\"\\\" \\u0026\\u0026 process.ancestors.file.name in [\\\"sshd\\\"] \\u0026\\u0026 process.file.name != \\\"sshd\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssh_session\",\"updateDate\":1759520048798,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"lcs-ioe-tlm\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"spawned_shell_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from spawned shell\",\"enabled\":true,\"expression\":\"exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] \\u0026\\u0026 (process.parent.file.name in [\\\"apache2\\\", \\\"nginx\\\", ~\\\"tomcat*\\\", \\\"httpd\\\"] || process.parent.file.name =~ \\\"php*\\\" || process.parent.file.name in [\\\"mysqld\\\", \\\"mongod\\\", \\\"postgres\\\"] || process.parent.file.name in [\\\"java\\\", \\\"jspawnhelper\\\"]) \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\", ~\\\"service_*\\\", ~\\\"service_new_cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_spawned_shell\",\"updateDate\":1759520028728,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"2xy-wbx-chp\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process cleared the system cache\",\"enabled\":true,\"expression\":\"open.file.path == \\\"/proc/sys/vm/drop_caches\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"drop_caches\",\"updateDate\":1759519988245,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"nmg-ix4-vy0\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"GitHub API was contacted\",\"enabled\":true,\"expression\":\"connect.addr.hostname =~ \\\"api.github.com\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"github_api_contacted\",\"updateDate\":1759519986994,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"wn9-9vf-8be\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process hidden using mount\",\"enabled\":true,\"expression\":\"mount.mountpoint.path in [~\\\"/proc/1*\\\", ~\\\"/proc/2*\\\", ~\\\"/proc/3*\\\", ~\\\"/proc/4*\\\", ~\\\"/proc/5*\\\", ~\\\"/proc/6*\\\", ~\\\"/proc/7*\\\", ~\\\"/proc/8*\\\", ~\\\"/proc/9*\\\"] \\u0026\\u0026 process.argv0 not in [\\\"runc\\\", ~\\\"/*/runc\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"mount_proc_hide\",\"updateDate\":1759519900139,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"rlu-e6g-9lc\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"service_new_cgroup_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from new service cgroup\",\"enabled\":true,\"expression\":\"(exec.envs in [\\\"DD_SERVICE\\\", \\\"OTEL_SERVICE_NAME\\\"] || \\\"tags.datadoghq.com/service\\\" in container.tags) \\u0026\\u0026 ${process.correlation_key} in [~\\\"service_*\\\"] \\u0026\\u0026 process.cgroup.id != process.parent.cgroup.id\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_service_new_cgroup\",\"updateDate\":1758821704744,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"5u4-9yp-qzj\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"cgroup_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from cgroup\",\"enabled\":true,\"expression\":\"exec.cgroup.id != process.parent.cgroup.id \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_cgroup\",\"updateDate\":1758821602050,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"4ev-hmm-maa\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"interactive_shell_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from interactive shell\",\"enabled\":true,\"expression\":\"exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] \\u0026\\u0026 (process.tty_name != \\\"\\\" || exec.args_flags in [\\\"i\\\"]) \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\", ~\\\"service_*\\\", ~\\\"service_new_cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_interactive_shell\",\"updateDate\":1758821602039,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"oom-s2e-cik\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"auid_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from auid\",\"enabled\":true,\"expression\":\"exec.auid \\u003e= 0 \\u0026\\u0026 exec.auid != AUDIT_AUID_UNSET \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_auid\",\"updateDate\":1758821601623,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"clu-w0v-xue\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Kernel Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The LD_AUDIT variable is populated by a link to a suspicious file directory\",\"enabled\":true,\"expression\":\"process.envs in [\\\"LD_AUDIT\\\"] \\u0026\\u0026 \\n(\\n mmap.file.path in [~\\\"/home/*\\\", ~\\\"/tmp/*\\\", ~\\\"/dev/shm/*\\\"] || \\n mmap.file.in_upper_layer == true\\n) \\u0026\\u0026\\nmmap.protection \\u0026 (PROT_EXEC) \\u003e 0 \",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ld_audit_unusual_library_path\",\"updateDate\":1758821600445,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"vay-3e5-8rx\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process connected to a paste site\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [\\\"pastebin.com\\\", \\\"ghostbin.com\\\", \\\"termbin.com\\\", \\\"klgrth.io\\\", \\\"rentry.co\\\", \\\"transfer.sh\\\"] \\u0026\\u0026 connect.addr.is_public == true \\u0026\\u0026 connect.addr.port in [80, 443]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"paste_site_domain\",\"updateDate\":1758821600423,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"f2e-rwu-xk1\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\",\"scope_field\":\"cgroup_write.pid\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"cgroup_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\",\"scope_field\":\"cgroup_write.pid\"}}],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from cgroup write\",\"enabled\":true,\"expression\":\"cgroup_write.pid \\u003e 0 \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_cgroup_write\",\"updateDate\":1758821487905,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"lp4-x68-ekq\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"k8s_session_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from k8s user session\",\"enabled\":true,\"expression\":\"exec.user_session.k8s_username != \\\"\\\" \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\", ~\\\"service_*\\\", ~\\\"service_new_cgroup_*\\\", ~\\\"interactive_shell_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_k8s_usersession_entrypoint\",\"updateDate\":1758821487471,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"sgo-0ij-wgo\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"append\":true,\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"inherited\":true,\"name\":\"parent_correlation_keys\",\"scope\":\"process\"},\"filter\":\"${process.correlation_key} != \\\"\\\"\"},{\"set\":{\"default_value\":\"\",\"expression\":\"\\\"service_${builtins.uuid4}\\\"\",\"inherited\":true,\"name\":\"correlation_key\",\"scope\":\"process\"}}],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from service\",\"enabled\":true,\"expression\":\"(exec.envs in [\\\"DD_SERVICE\\\", \\\"OTEL_SERVICE_NAME\\\"] || \\\"tags.datadoghq.com/service\\\" in container.tags) \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"execution_context_service\",\"updateDate\":1758821487211,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"nx5-ll1-x6m\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process is masquerading as a kernel thread by using bracket notation in its name\",\"enabled\":true,\"expression\":\"(exec.comm in [r\\\"^\\\\[.*\\\\]$\\\"] || exec.argv0 in [r\\\"^\\\\[.*\\\\]$\\\"]) \\u0026\\u0026 (process.parent.ppid !=2 || process.args != \\\"\\\")\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_process_masquerade\",\"updateDate\":1758821487207,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"mil-ofs-8td\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process removed itself from the filesystem\",\"enabled\":true,\"expression\":\"unlink.file.path == process.file.path\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"unlink_self\",\"updateDate\":1758821487200,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"cuo-g81-vwm\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process was executed in a Kubernetes user session\",\"enabled\":true,\"expression\":\"exec.user_session.k8s_username != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"k8s_user_session\",\"updateDate\":1758821487198,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"mpb-1rj-dv6\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746168,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\" ]\\n || rename.file.destination.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_rename\",\"updateDate\":1758821375033,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":11}},{\"id\":\"lt7-ru0-jsw\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process connected to a penetration testing domain\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [~\\\"*.interact.sh\\\", ~\\\"*.oast.pro\\\", ~\\\"*.oast.live\\\", ~\\\"*.oast.fun\\\", ~\\\"*.oast.me\\\", ~\\\"*.burpcollaborator.net\\\", ~\\\"*.oastify.com\\\", ~\\\"*canarytokens.com\\\", ~\\\"*.requestbin.net\\\", ~\\\"*.dnslog.cn\\\"] \\u0026\\u0026 connect.addr.is_public == true\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pentest_domain\",\"updateDate\":1758821375016,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"esk-ygv-wg5\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A file executed from /dev/shm/ directory\",\"enabled\":true,\"expression\":\"exec.file.path == ~\\\"/dev/shm/**\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"devshm_execution\",\"updateDate\":1758821374996,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"m8i-uhr-aoq\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142936138,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\"]\\n || link.file.destination.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\"])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pam_modification_link\",\"updateDate\":1758821338819,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"eeb-m3q-buz\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"field\":\"unlink.file.path\",\"name\":\"correlation_key_file_path\",\"scope\":\"cgroup\"}}],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A file was deleted shortly after it was executed\",\"enabled\":true,\"expression\":\"unlink.file.path in ${cgroup.chain_exec_unlink}\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"delete_new_process\",\"updateDate\":1758821241938,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"2fy-aqt-8mz\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142936138,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ]\\n || rename.file.destination.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pam_modification_rename\",\"updateDate\":1758821241590,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"ysz-c0t-vzy\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process checked the public IP address of the host\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [\\\"icanhazip.com\\\", \\\"ip-api.com\\\", \\\"myip.opendns.com\\\", \\\"checkip.amazonaws.com\\\", \\\"whatismyip.akamai.com\\\"] \\u0026\\u0026 connect.addr.is_public == true \\u0026\\u0026 connect.addr.port in [80, 443]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ip_lookup_domain\",\"updateDate\":1758821241561,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"fak-u9s-pac\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142936138,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ])\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pam_modification_chown\",\"updateDate\":1758821241527,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"adl-qjr-lyg\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142936138,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pam_modification_open\",\"updateDate\":1758821241329,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"ei7-n5e-rvv\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142936138,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pam_modification_unlink\",\"updateDate\":1758821241325,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"kr2-ybp-wh8\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"hash\":{\"field\":\"process.file\"}}],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process made a connection to a port associated with P2PInfect malware\",\"enabled\":true,\"expression\":\"(connect.addr.family == AF_INET || connect.addr.family == AF_INET6) \\u0026\\u0026 connect.addr.is_public == true \\u0026\\u0026 connect.addr.port \\u003e= 60100 \\u0026\\u0026 connect.addr.port \\u003c= 60150\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"p2pinfect_connection\",\"updateDate\":1758821241285,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"12k-ui3-z4h\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142936138,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\"])\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pam_modification_chmod\",\"updateDate\":1758821241268,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"avt-p2e-fyc\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746168,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_chmod\",\"updateDate\":1758821241158,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":10}},{\"id\":\"ec9-vff-7ni\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746168,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ]\\n || link.file.destination.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_link\",\"updateDate\":1758821241086,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":11}},{\"id\":\"esw-jp7-chn\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The rclone utility was executed\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"rclone\\\", \\\"rsync\\\", \\\"sftp\\\", \\\"ftp\\\", \\\"scp\\\", \\\"dcp\\\", \\\"rcp\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"file_sync_exfil\",\"updateDate\":1749232465958,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"a6b-xqu-n6r\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"process arguments match sliver c2 implant\",\"enabled\":true,\"expression\":\"exec.cmdline =~ \\\"*NoExit *\\\" \\u0026\\u0026 exec.cmdline =~ \\\"*Command *\\\" \\u0026\\u0026 exec.cmdline =~ \\\"*[Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8*\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"sliver_c2_implant_execution\",\"updateDate\":1749232465391,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"efc-svz-7hu\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A web application spawned a shell or shell utility\",\"enabled\":true,\"expression\":\"(exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] || exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] || exec.file.path in [\\\"/bin/cat\\\",\\\"/bin/chgrp\\\",\\\"/bin/chmod\\\",\\\"/bin/chown\\\",\\\"/bin/cp\\\",\\\"/bin/date\\\",\\\"/bin/dd\\\",\\\"/bin/df\\\",\\\"/bin/dir\\\",\\\"/bin/echo\\\",\\\"/bin/ln\\\",\\\"/bin/ls\\\",\\\"/bin/mkdir\\\",\\\"/bin/mknod\\\",\\\"/bin/mktemp\\\",\\\"/bin/mv\\\",\\\"/bin/pwd\\\",\\\"/bin/readlink\\\",\\\"/bin/rm\\\",\\\"/bin/rmdir\\\",\\\"/bin/sleep\\\",\\\"/bin/stty\\\",\\\"/bin/sync\\\",\\\"/bin/touch\\\",\\\"/bin/uname\\\",\\\"/bin/vdir\\\",\\\"/usr/bin/arch\\\",\\\"/usr/bin/b2sum\\\",\\\"/usr/bin/base32\\\",\\\"/usr/bin/base64\\\",\\\"/usr/bin/basename\\\",\\\"/usr/bin/chcon\\\",\\\"/usr/bin/cksum\\\",\\\"/usr/bin/comm\\\",\\\"/usr/bin/csplit\\\",\\\"/usr/bin/cut\\\",\\\"/usr/bin/dircolors\\\",\\\"/usr/bin/dirname\\\",\\\"/usr/bin/du\\\",\\\"/usr/bin/env\\\",\\\"/usr/bin/expand\\\",\\\"/usr/bin/expr\\\",\\\"/usr/bin/factor\\\",\\\"/usr/bin/fmt\\\",\\\"/usr/bin/fold\\\",\\\"/usr/bin/groups\\\",\\\"/usr/bin/head\\\",\\\"/usr/bin/hostid\\\",\\\"/usr/bin/id\\\",\\\"/usr/bin/install\\\",\\\"/usr/bin/join\\\",\\\"/usr/bin/link\\\",\\\"/usr/bin/logname\\\",\\\"/usr/bin/md5sum\\\",\\\"/usr/bin/md5sum.textutils\\\",\\\"/usr/bin/mkfifo\\\",\\\"/usr/bin/nice\\\",\\\"/usr/bin/nl\\\",\\\"/usr/bin/nohup\\\",\\\"/usr/bin/nproc\\\",\\\"/usr/bin/numfmt\\\",\\\"/usr/bin/od\\\",\\\"/usr/bin/paste\\\",\\\"/usr/bin/pathchk\\\",\\\"/usr/bin/pinky\\\",\\\"/usr/bin/pr\\\",\\\"/usr/bin/printenv\\\",\\\"/usr/bin/printf\\\",\\\"/usr/bin/ptx\\\",\\\"/usr/bin/realpath\\\",\\\"/usr/bin/runcon\\\",\\\"/usr/bin/seq\\\",\\\"/usr/bin/sha1sum\\\",\\\"/usr/bin/sha224sum\\\",\\\"/usr/bin/sha256sum\\\",\\\"/usr/bin/sha384sum\\\",\\\"/usr/bin/sha512sum\\\",\\\"/usr/bin/shred\\\",\\\"/usr/bin/shuf\\\",\\\"/usr/bin/sort\\\",\\\"/usr/bin/split\\\",\\\"/usr/bin/stat\\\",\\\"/usr/bin/stdbuf\\\",\\\"/usr/bin/sum\\\",\\\"/usr/bin/tac\\\",\\\"/usr/bin/tail\\\",\\\"/usr/bin/tee\\\",\\\"/usr/bin/test\\\",\\\"/usr/bin/timeout\\\",\\\"/usr/bin/tr\\\",\\\"/usr/bin/truncate\\\",\\\"/usr/bin/tsort\\\",\\\"/usr/bin/tty\\\",\\\"/usr/bin/unexpand\\\",\\\"/usr/bin/uniq\\\",\\\"/usr/bin/unlink\\\",\\\"/usr/bin/users\\\",\\\"/usr/bin/wc\\\",\\\"/usr/bin/who\\\",\\\"/usr/bin/whoami\\\",\\\"/usr/sbin/chroot\\\",\\\"/bin/busybox\\\"]) \\u0026\\u0026\\n(process.parent.file.name in [\\\"apache2\\\", \\\"nginx\\\", ~\\\"tomcat*\\\", \\\"httpd\\\"] || process.parent.file.name =~ \\\"php*\\\")\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"potential_web_shell_parent\",\"updateDate\":1749232437323,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"fjh-jmi-fbi\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The auditd rules file was modified without using auditctl\",\"enabled\":true,\"expression\":\"open.file.path in [\\\"/etc/audit/rules.d/audit.rules\\\", \\\"/etc/audit/audit.rules\\\"] \\u0026\\u0026 open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 process.file.name != \\\"auditctl\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"auditd_rule_file_modified\",\"updateDate\":1749232436502,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"ipa-v3l-kt6\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142961130,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"cron_at_job_creation_chmod\",\"updateDate\":1749232436328,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":8}},{\"id\":\"onm-dqu-jly\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142961130,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"cron_at_job_creation_open\",\"updateDate\":1749232434913,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":8}},{\"id\":\"7nq-ugi-gu1\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142980369,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ]\\n || link.file.destination.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssl_certificate_tampering_link\",\"updateDate\":1749232434911,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":9}},{\"id\":\"msb-ai6-ua5\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Tunneling or port forwarding tool used\",\"enabled\":true,\"expression\":\"((exec.comm == \\\"pivotnacci\\\" || exec.comm == \\\"gost\\\") \\u0026\\u0026 process.args_flags in [\\\"L\\\", \\\"C\\\", \\\"R\\\"]) || (exec.comm in [\\\"ssh\\\", \\\"sshd\\\"] \\u0026\\u0026 process.args_flags in [\\\"R\\\", \\\"L\\\", \\\"D\\\", \\\"w\\\"] \\u0026\\u0026 process.args in [r\\\"((25[0-5]|(2[0-4]|1\\\\d|[1-9])\\\\d)\\\\.?\\\\b){4}\\\"] ) || (exec.comm == \\\"sshuttle\\\" \\u0026\\u0026 process.args_flags in [\\\"r\\\", \\\"remote\\\", \\\"l\\\", \\\"listen\\\"]) || (exec.comm == \\\"socat\\\" \\u0026\\u0026 process.args in [r\\\"(TCP4-LISTEN:|SOCKS)\\\"]) || (exec.comm in [\\\"iodine\\\", \\\"iodined\\\", \\\"dnscat\\\", \\\"hans\\\", \\\"hans-ubuntu\\\", \\\"ptunnel-ng\\\", \\\"ssf\\\", \\\"3proxy\\\", \\\"ngrok\\\"] \\u0026\\u0026 process.parent.comm in [\\\"bash\\\", \\\"dash\\\", \\\"ash\\\", \\\"sh\\\", \\\"tcsh\\\", \\\"csh\\\", \\\"zsh\\\", \\\"ksh\\\", \\\"fish\\\"])\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"tunnel_traffic\",\"updateDate\":1749232434907,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"7bv-uip-wxv\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"microsoft security essentials executable modified\",\"enabled\":true,\"expression\":\"write.file.device_path in [~\\\"\\\\Device\\\\*\\\\Program Files\\\\Microsoft Security Client\\\\msseces.exe\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"windows_security_essentials_executable_modified\",\"updateDate\":1749232411868,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"24x-t0s-vlw\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"find command searching for sensitive files\",\"enabled\":true,\"expression\":\"exec.comm == \\\"find\\\" \\u0026\\u0026 exec.args in [~\\\"*credentials*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"find_credentials\",\"updateDate\":1749232411667,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"tfh-7pq-ne3\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Perl executed with suspicious argument\",\"enabled\":true,\"expression\":\"exec.file.name == ~\\\"perl*\\\" \\u0026\\u0026 exec.args_flags in [\\\"e\\\"] \\u0026\\u0026 (exec.args in [~\\\"*socket*\\\", ~\\\"*bind*\\\", ~\\\"*sockaddr*\\\", ~\\\"*listen*\\\", ~\\\"*accept\\\", ~\\\"*stdin*\\\", ~\\\"*stdout\\\"])\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"perl_shell\",\"updateDate\":1749232409731,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"rek-wb4-s7y\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n ( rename.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] \\n || rename.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"]\\n || rename.file.destination.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] \\n || rename.file.destination.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"systemd_modification_rename\",\"updateDate\":1749232382129,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":8}},{\"id\":\"qdc-oqx-zsx\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"systemd_modification_chown\",\"updateDate\":1749232381893,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":9}},{\"id\":\"ich-3ke-cor\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"]\\n || link.file.destination.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"sudoers_policy_modified_link\",\"updateDate\":1749232381667,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"nlp-lzc-rcf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142929241,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] || open.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"systemd_modification_open\",\"updateDate\":1749232381238,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"ohp-ags-xpk\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142936138,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\" ])\\n) \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pam_modification_utimes\",\"updateDate\":1749232380612,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"ybu-yya-acz\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142980369,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 chmod.file.mode != chmod.file.destination.mode\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssl_certificate_tampering_chmod\",\"updateDate\":1749232340405,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":10}},{\"id\":\"vky-y2i-mvh\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A java process spawned a shell, shell utility, or HTTP utility\",\"enabled\":true,\"expression\":\"(exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] ||\\n exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] ||\\n exec.file.path in [\\\"/bin/cat\\\",\\\"/bin/chgrp\\\",\\\"/bin/chmod\\\",\\\"/bin/chown\\\",\\\"/bin/cp\\\",\\\"/bin/date\\\",\\\"/bin/dd\\\",\\\"/bin/df\\\",\\\"/bin/dir\\\",\\\"/bin/echo\\\",\\\"/bin/ln\\\",\\\"/bin/ls\\\",\\\"/bin/mkdir\\\",\\\"/bin/mknod\\\",\\\"/bin/mktemp\\\",\\\"/bin/mv\\\",\\\"/bin/pwd\\\",\\\"/bin/readlink\\\",\\\"/bin/rm\\\",\\\"/bin/rmdir\\\",\\\"/bin/sleep\\\",\\\"/bin/stty\\\",\\\"/bin/sync\\\",\\\"/bin/touch\\\",\\\"/bin/uname\\\",\\\"/bin/vdir\\\",\\\"/usr/bin/arch\\\",\\\"/usr/bin/b2sum\\\",\\\"/usr/bin/base32\\\",\\\"/usr/bin/base64\\\",\\\"/usr/bin/basename\\\",\\\"/usr/bin/chcon\\\",\\\"/usr/bin/cksum\\\",\\\"/usr/bin/comm\\\",\\\"/usr/bin/csplit\\\",\\\"/usr/bin/cut\\\",\\\"/usr/bin/dircolors\\\",\\\"/usr/bin/dirname\\\",\\\"/usr/bin/du\\\",\\\"/usr/bin/env\\\",\\\"/usr/bin/expand\\\",\\\"/usr/bin/expr\\\",\\\"/usr/bin/factor\\\",\\\"/usr/bin/fmt\\\",\\\"/usr/bin/fold\\\",\\\"/usr/bin/groups\\\",\\\"/usr/bin/head\\\",\\\"/usr/bin/hostid\\\",\\\"/usr/bin/id\\\",\\\"/usr/bin/install\\\",\\\"/usr/bin/join\\\",\\\"/usr/bin/link\\\",\\\"/usr/bin/logname\\\",\\\"/usr/bin/md5sum\\\",\\\"/usr/bin/md5sum.textutils\\\",\\\"/usr/bin/mkfifo\\\",\\\"/usr/bin/nice\\\",\\\"/usr/bin/nl\\\",\\\"/usr/bin/nohup\\\",\\\"/usr/bin/nproc\\\",\\\"/usr/bin/numfmt\\\",\\\"/usr/bin/od\\\",\\\"/usr/bin/paste\\\",\\\"/usr/bin/pathchk\\\",\\\"/usr/bin/pinky\\\",\\\"/usr/bin/pr\\\",\\\"/usr/bin/printenv\\\",\\\"/usr/bin/printf\\\",\\\"/usr/bin/ptx\\\",\\\"/usr/bin/realpath\\\",\\\"/usr/bin/runcon\\\",\\\"/usr/bin/seq\\\",\\\"/usr/bin/sha1sum\\\",\\\"/usr/bin/sha224sum\\\",\\\"/usr/bin/sha256sum\\\",\\\"/usr/bin/sha384sum\\\",\\\"/usr/bin/sha512sum\\\",\\\"/usr/bin/shred\\\",\\\"/usr/bin/shuf\\\",\\\"/usr/bin/sort\\\",\\\"/usr/bin/split\\\",\\\"/usr/bin/stat\\\",\\\"/usr/bin/stdbuf\\\",\\\"/usr/bin/sum\\\",\\\"/usr/bin/tac\\\",\\\"/usr/bin/tail\\\",\\\"/usr/bin/tee\\\",\\\"/usr/bin/test\\\",\\\"/usr/bin/timeout\\\",\\\"/usr/bin/tr\\\",\\\"/usr/bin/truncate\\\",\\\"/usr/bin/tsort\\\",\\\"/usr/bin/tty\\\",\\\"/usr/bin/unexpand\\\",\\\"/usr/bin/uniq\\\",\\\"/usr/bin/unlink\\\",\\\"/usr/bin/users\\\",\\\"/usr/bin/wc\\\",\\\"/usr/bin/who\\\",\\\"/usr/bin/whoami\\\",\\\"/usr/sbin/chroot\\\",\\\"/bin/busybox\\\"])\\n\\u0026\\u0026 process.parent.file.name in [\\\"java\\\", \\\"jspawnhelper\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"java_shell_execution_parent\",\"updateDate\":1749232339592,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"6ef-efv-07c\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142933669,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pci_11_5_critical_binaries_utimes\",\"updateDate\":1749232337174,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"ki2-nwj-sot\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142958657,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"nsswitch_conf_mod_chmod\",\"updateDate\":1749232336676,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"div-3ym-esz\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The auditd configuration file was modified without using auditctl\",\"enabled\":true,\"expression\":\"open.file.path == \\\"/etc/audit/auditd.conf\\\" \\u0026\\u0026 open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 process.file.name != \\\"auditctl\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"auditd_config_modified\",\"updateDate\":1749232336672,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"lxo-jgz-gtv\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"sudoers_policy_modified_chown\",\"updateDate\":1749232336672,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"t8w-eul-chf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] || utimes.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"systemd_modification_utimes\",\"updateDate\":1749232290939,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":8}},{\"id\":\"rws-z9b-qjv\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Possible ransomware note created under common user directories\",\"enabled\":true,\"expression\":\"open.flags \\u0026 O_CREAT \\u003e 0\\n\\u0026\\u0026 open.file.path in [~\\\"/home/**\\\", ~\\\"/root/**\\\", ~\\\"/bin/**\\\", ~\\\"/usr/bin/**\\\", ~\\\"/opt/**\\\", ~\\\"/etc/**\\\", ~\\\"/var/log/**\\\", ~\\\"/var/lib/log/**\\\", ~\\\"/var/backup/**\\\", ~\\\"/var/www/**\\\"]\\n\\u0026\\u0026 (open.file.name in [r\\\"(?i)(restore|recover|instruction|help|how_to|how\\\\ to|ransom).*(your_|recover|crypt|lock|ransom|instruction|files)\\\"] || open.file.name in [r\\\"RECOVER.*\\\\.txt\\\"]) \\u0026\\u0026 open.file.name not in [r\\\"\\\\.lock$\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ransomware_note\",\"updateDate\":1749232290803,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"atu-tci-bjn\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142961130,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"cron_at_job_creation_unlink\",\"updateDate\":1749232289522,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":8}},{\"id\":\"cyq-zts-9vf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process matches known relay attack tool\",\"enabled\":true,\"expression\":\"exec.file.name in [~\\\"*PetitPotam*\\\", ~\\\"*RottenPotato*\\\", ~\\\"*HotPotato*\\\", ~\\\"*JuicyPotato*\\\", ~\\\"*just_dce_*\\\", ~\\\"*Juicy Potato*\\\", \\\"rot.exe\\\", \\\"Potato.exe\\\", \\\"SpoolSample.exe\\\", \\\"Responder.exe\\\", ~\\\"*smbrelayx*\\\", ~\\\"*smbrelayx*\\\", ~\\\"*ntlmrelayx*\\\", ~\\\"*LocalPotato*\\\"] || exec.cmdline in [~\\\"*Invoke-Tater*\\\", ~\\\"*smbrelay*\\\", ~\\\"*ntlmrelay*\\\", ~\\\"*cme smb*\\\", ~\\\"*ntlm:NTLMhash*\\\", ~\\\"*Invoke-PetitPotam*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"relay_attack_tool_execution\",\"updateDate\":1749232288712,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"vei-wlu-ojy\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows Known DLLs location registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Session Manager\\\\KnownDLLs*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"known_dll_registry_key_modified\",\"updateDate\":1749232277181,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"yly-big-wfq\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142933669,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pci_11_5_critical_binaries_chown\",\"updateDate\":1749232277090,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":7}},{\"id\":\"nej-iw4-adk\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142954844,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n open.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (open.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssh_authorized_keys_open\",\"updateDate\":1749232241422,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"hxb-abz-bnu\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"sudoers_policy_modified_chmod\",\"updateDate\":1749232240734,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"eoy-4fe-q7q\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746271,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"credential_modified_chown\",\"updateDate\":1749232236504,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":12}},{\"id\":\"bgs-kbk-xkh\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n ( link.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"]\\n || link.file.destination.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"] \\n || link.file.destination.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] \\n || link.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"systemd_modification_link\",\"updateDate\":1749232236046,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":8}},{\"id\":\"pnv-bxc-sbp\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"a critical windows file was modified\",\"enabled\":true,\"expression\":\"write.file.device_path in [~\\\"\\\\Device\\\\*\\\\windows\\\\system32\\\\**\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"critical_windows_files_modified\",\"updateDate\":1749232205582,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"eay-ery-jdc\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Dotnet_dump was used to dump a process memory\",\"enabled\":true,\"expression\":\"exec.cmdline =~ \\\"*dotnet-dump*\\\" \\u0026\\u0026 exec.cmdline =~ \\\"*collect*\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"dotnet_dump_execution\",\"updateDate\":1749232205568,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"xhw-6bw-uk0\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows RPC COM debugging registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"windows_com_rpc_debugging_registry_key_modified\",\"updateDate\":1749232204661,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"cj8-z89-sqt\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows winlogon registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"winlogon_registry_key_modified\",\"updateDate\":1749232204661,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"fpw-paa-smb\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746168,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_utimes\",\"updateDate\":1749232192112,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":11}},{\"id\":\"vlh-msh-elx\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"hash\":{}}],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Redis module has been created\",\"enabled\":true,\"expression\":\"(open.flags \\u0026 (O_CREAT|O_TRUNC|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 open.file.path =~ \\\"/tmp/**\\\" \\u0026\\u0026 open.file.name in [~\\\"*.rdb\\\", ~\\\"*.aof\\\", ~\\\"*.so\\\"]) \\u0026\\u0026 process.file.name in [\\\"redis-check-rdb\\\", \\\"redis-server\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"redis_save_module\",\"updateDate\":1749232190855,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"kxs-kt6-5gt\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] || unlink.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"systemd_modification_unlink\",\"updateDate\":1749232190582,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":8}},{\"id\":\"84k-f4f-yx8\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Python code was provided on the command line\",\"enabled\":true,\"expression\":\"exec.file.name == ~\\\"python*\\\" \\u0026\\u0026 exec.args_flags in [\\\"c\\\"] \\u0026\\u0026 exec.args in [~\\\"*-c*SOCK_STREAM*\\\", ~\\\"*-c*subprocess*\\\", ~\\\"*-c*/bash*\\\", ~\\\"*-c*/bin/sh*\\\", ~\\\"*-c*pty.spawn*\\\"] \\u0026\\u0026 exec.args !~ \\\"*setuptools*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"python_cli_code\",\"updateDate\":1749232190580,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"psd-3el-h33\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746271,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"credential_modified_utimes\",\"updateDate\":1749232187098,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":10}},{\"id\":\"dgj-0mh-asf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"sudoers_policy_modified_unlink\",\"updateDate\":1749232187098,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"uuf-w3c-u9q\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A scheduled task was created\",\"enabled\":true,\"expression\":\"exec.cmdline in [~\\\"*at.exe\\\",~\\\"*schtasks*\\\"] \\u0026\\u0026 exec.cmdline =~ \\\"*create*\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"scheduled_task_creation\",\"updateDate\":1749232187097,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"47p-vyr-rfx\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process executed with arguments common with Inveigh tool usage\",\"enabled\":true,\"expression\":\"exec.cmdline in [~\\\"*SpooferIP*\\\", ~\\\"*ReplyToIPs*\\\", ~\\\"*ReplyToDomains*\\\", ~\\\"*ReplyToMACs*\\\", ~\\\"*SnifferIP*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"inveigh_tool_usage\",\"updateDate\":1749232184204,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"c4t-pxu-ixk\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746168,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_unlink\",\"updateDate\":1749232167527,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":11}},{\"id\":\"i0s-yb1-hnl\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Exfiltration attempt via network utility\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026\\nexec.args_options in [ ~\\\"post-file=*\\\", ~\\\"post-data=*\\\", ~\\\"T=*\\\", ~\\\"d=@*\\\", ~\\\"upload-file=*\\\", ~\\\"F=file*\\\"] \\u0026\\u0026\\nexec.args not in [~\\\"*localhost*\\\", ~\\\"*127.0.0.1*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"net_util_exfiltration\",\"updateDate\":1749232167524,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"vu4-g2z-6yx\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A user was deleted via an interactive session\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"userdel\\\", \\\"deluser\\\"] \\u0026\\u0026 exec.tty_name !=\\\"\\\" \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"user_deleted_tty\",\"updateDate\":1749232147434,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"qzs-yvl-f4t\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142980369,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ]\\n || rename.file.destination.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssl_certificate_tampering_rename\",\"updateDate\":1749232147409,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":9}},{\"id\":\"rm1-b8h-cec\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142933669,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ]\\n || link.file.destination.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pci_11_5_critical_binaries_link\",\"updateDate\":1749232147394,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"1vg-wvn-jeo\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142933669,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ]\\n || rename.file.destination.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pci_11_5_critical_binaries_rename\",\"updateDate\":1749232103404,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"0gu-pqy-o1a\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142961130,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"]\\n || link.file.destination.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"cron_at_job_creation_link\",\"updateDate\":1749232103394,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":8}},{\"id\":\"ac4-asc-qi4\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746271,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ]\\n || rename.file.destination.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"credential_modified_rename\",\"updateDate\":1749232103392,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":11}},{\"id\":\"9ih-87r-xrp\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A Registry runkey has been modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Runonce\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Wow6432Node\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\Install\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\Install\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Runonce\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\Install\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunonceEx\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"registry_runkey_modified\",\"updateDate\":1749232103386,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"mhl-gkn-bun\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142933669,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pci_11_5_critical_binaries_unlink\",\"updateDate\":1749232103382,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":7}},{\"id\":\"tkp-w9m-vzp\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Safeboot registry modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\System\\\\CurrentControlSet\\\\Control\\\\SafeBoot\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"safeboot_modification\",\"updateDate\":1749232103378,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"kek-yib-peb\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Shell History was Deleted\",\"enabled\":true,\"expression\":\"unlink.file.name in [\\\".bash_history\\\", \\\".zsh_history\\\", \\\".fish_history\\\", \\\"fish_history\\\", \\\".dash_history\\\", \\\".sh_history\\\"] \\u0026\\u0026 unlink.file.path in [~\\\"/root/**\\\", ~\\\"/home/**\\\"] \\u0026\\u0026 process.comm not in [\\\"dockerd\\\", \\\"containerd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"shell_history_deleted\",\"updateDate\":1749232103375,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"0on-nzp-luo\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n(open.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])) \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"sudoers_policy_modified_open\",\"updateDate\":1749232103374,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"kzh-5hn-edg\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142933669,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"pci_11_5_critical_binaries_chmod\",\"updateDate\":1749232103371,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":7}},{\"id\":\"2p0-3i2-b4y\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssl_certificate_tampering_open\",\"updateDate\":1749232035236,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":10}},{\"id\":\"q7y-2ci-hkh\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A DNS lookup was done for a pastebin-like site\",\"enabled\":true,\"expression\":\"dns.question.name in [\\\"pastebin.com\\\", \\\"ghostbin.com\\\", \\\"termbin.com\\\", \\\"klgrth.io\\\", \\\"rentry.co\\\", \\\"transfer.sh\\\"] \\u0026\\u0026 process.file.name != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"paste_site\",\"updateDate\":1749232034921,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"pti-xku-k7y\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Shell History was Deleted\",\"enabled\":true,\"expression\":\"open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 open.file.name in [\\\".bash_history\\\", \\\".zsh_history\\\", \\\".fish_history\\\", \\\"fish_history\\\", \\\".dash_history\\\", \\\".sh_history\\\"] \\u0026\\u0026 open.file.path in [~\\\"/root/*\\\", ~\\\"/home/**\\\"] \\u0026\\u0026 process.file.name == \\\"truncate\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"shell_history_truncated\",\"updateDate\":1749231989700,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"smc-exb-ymp\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The LD_PRELOAD variable is populated by a link to a suspicious file directory\",\"enabled\":true,\"expression\":\"exec.envs in [~\\\"LD_PRELOAD=*/tmp/*\\\", ~\\\"LD_PRELOAD=/dev/shm/*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ld_preload_unusual_library_path\",\"updateDate\":1749231989692,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"zk5-jeo-579\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"RC scripts modified\",\"enabled\":true,\"expression\":\"(open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 (open.file.path in [\\\"/etc/rc.common\\\", \\\"/etc/rc.local\\\"])) \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"rc_scripts_modified\",\"updateDate\":1749231989692,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"ygi-ozn-m5d\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"memfd object created\",\"enabled\":true,\"expression\":\"exec.file.name =~ \\\"memfd*\\\" \\u0026\\u0026 exec.file.path == \\\"\\\" \\u0026\\u0026 process.parent.file.path not in [\\\"/usr/bin/runc\\\", \\\"/usr/sbin/runc\\\", \\\"/usr/bin/docker-runc\\\" , \\\"/run/docker/runtime-runc/moby/*\\\", \\\"/x86_64-bottlerocket-linux-gnu/sys-root/usr/bin/runc\\\"] \\u0026\\u0026 !(process.comm == \\\"dd-ipc-helper\\\" \\u0026\\u0026 exec.file.name in [\\\"memfd:spawn_worker_trampoline (deleted)\\\", \\\"memfd:spawn_worker_trampoline\\\"])\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"memfd_create\",\"updateDate\":1749231989691,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"aby-cmp-yrd\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process wrote to a dynamic linker config file\",\"enabled\":true,\"expression\":\"open.file.path in [\\\"/etc/ld.so.preload\\\", \\\"/etc/ld.so.conf\\\", ~\\\"/etc/ld.so.conf.d/*.conf\\\"] \\u0026\\u0026 open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"] \\u0026\\u0026 process.ancestors.file.path not in [\\\"/opt/datadog-agent/embedded/bin/agent\\\", \\\"/opt/datadog-agent/embedded/bin/system-probe\\\", \\\"/opt/datadog-agent/embedded/bin/security-agent\\\", \\\"/opt/datadog-agent/embedded/bin/process-agent\\\", \\\"/opt/datadog-agent/embedded/bin/trace-agent\\\", \\\"/opt/datadog-agent/bin/agent/agent\\\", \\\"/opt/datadog/apm/inject/auto_inject_runc\\\", \\\"/usr/bin/dd-host-install\\\", \\\"/usr/bin/dd-host-container-install\\\", \\\"/usr/bin/dd-container-install\\\", \\\"/opt/datadog-agent/bin/datadog-cluster-agent\\\", ~\\\"/opt/datadog-packages/**\\\", ~\\\"/opt/datadog-installer/**\\\"] \\u0026\\u0026 process.argv0 not in [\\\"runc\\\", \\\"/usr/bin/runc\\\", \\\"/usr/sbin/runc\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"dynamic_linker_config_write\",\"updateDate\":1749231989670,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"r5z-tke-sjm\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746271,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ]\\n || link.file.destination.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"credential_modified_link\",\"updateDate\":1749231989669,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":11}},{\"id\":\"cd0-w8q-vl4\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746168,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_chown\",\"updateDate\":1749231989669,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":12}},{\"id\":\"f5y-pdn-pnj\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1650293718458,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A kernel module was loaded\",\"enabled\":true,\"expression\":\"load_module.loaded_from_memory == false \\u0026\\u0026 load_module.name not in [\\\"nf_tables\\\", \\\"iptable_filter\\\", \\\"ip6table_filter\\\", \\\"bpfilter\\\", \\\"ip6_tables\\\", \\\"ip6table_nat\\\", \\\"nf_reject_ipv4\\\", \\\"ipt_REJECT\\\", \\\"iptable_raw\\\", \\\"udp_diag\\\", \\\"inet_diag\\\"] \\u0026\\u0026 process.ancestors.file.name not in [~\\\"falcon*\\\", \\\"unattended-upgrade\\\", \\\"apt.systemd.daily\\\", \\\"xtables-legacy-multi\\\", \\\"ssm-agent-worker\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_load\",\"updateDate\":1749231989667,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"qng-psi-j15\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1627392837049,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The runc binary was modified in a non-standard way\",\"enabled\":true,\"expression\":\"open.file.path in [\\\"/usr/bin/runc\\\", \\\"/usr/sbin/runc\\\", \\\"/usr/bin/docker-runc\\\"]\\n\\u0026\\u0026 open.flags \\u0026 O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY \\u003e 0\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"runc_modification\",\"updateDate\":1749231989583,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"bm8-j5w-xfv\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Recently written or modified suid file has been executed\",\"enabled\":true,\"expression\":\"((process.file.mode \\u0026 S_ISUID \\u003e 0) \\u0026\\u0026 process.file.modification_time \\u003c 30s) \\u0026\\u0026 exec.file.name != \\\"\\\" \\u0026\\u0026 process.ancestors.file.path not in [\\\"/opt/datadog-agent/embedded/bin/agent\\\", \\\"/opt/datadog-agent/embedded/bin/system-probe\\\", \\\"/opt/datadog-agent/embedded/bin/security-agent\\\", \\\"/opt/datadog-agent/embedded/bin/process-agent\\\", \\\"/opt/datadog-agent/embedded/bin/trace-agent\\\", \\\"/opt/datadog-agent/bin/agent/agent\\\", \\\"/opt/datadog/apm/inject/auto_inject_runc\\\", \\\"/usr/bin/dd-host-install\\\", \\\"/usr/bin/dd-host-container-install\\\", \\\"/usr/bin/dd-container-install\\\", \\\"/opt/datadog-agent/bin/datadog-cluster-agent\\\", ~\\\"/opt/datadog-packages/**\\\", ~\\\"/opt/datadog-installer/**\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"suspicious_suid_execution\",\"updateDate\":1749231989566,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"n1x-qsa-p53\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A cryptominer was potentially executed\",\"enabled\":true,\"expression\":\"exec.cmdline in [~\\\"*xmrig*\\\", ~\\\"*cpu-priority*\\\", ~\\\"*donate-level*\\\", ~\\\"*randomx-1gb-pages*\\\", ~\\\"*stratum+tcp*\\\", ~\\\"*stratum+ssl*\\\", ~\\\"*stratum1+tcp*\\\", ~\\\"*stratum1+ssl*\\\", ~\\\"*stratum2+tcp*\\\", ~\\\"*stratum2+ssl*\\\", ~\\\"*nicehash*\\\", ~\\\"*yespower*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"windows_cryptominer_process\",\"updateDate\":1712079129574,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"pqp-0vs-cmu\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The configuration directory for an ssh worm\",\"enabled\":true,\"expression\":\"open.file.path in [\\\"/root/.prng/*\\\", ~\\\"/home/*/.prng/*\\\", ~\\\"/root/.config/prng/*\\\", ~\\\"/home/*/.config/prng/*\\\"] \\u0026\\u0026 open.flags \\u0026 (O_CREAT|O_TRUNC|O_RDWR|O_WRONLY) \\u003e 0\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssh_it_tool_config_write\",\"updateDate\":1711644642969,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"8be-hej-nf2\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Processes were listed using the ps command\",\"enabled\":true,\"expression\":\"exec.comm == \\\"ps\\\" \\u0026\\u0026 exec.argv not in [\\\"-p\\\", \\\"--pid\\\"] \\u0026\\u0026 process.ancestors.file.name not in [\\\"qualys-cloud-agent\\\", \\\"amazon-ssm-agent\\\"] \\u0026\\u0026 process.parent.file.name not in [\\\"rkhunter\\\", \\\"jspawnhelper\\\", ~\\\"vm-agent*\\\", \\\"PassengerAgent\\\", \\\"node\\\", \\\"wdavdaemon\\\", \\\"chkrootkit\\\", \\\"tsagentd\\\", \\\"wazuh-modulesd\\\", \\\"wdavdaemon\\\", \\\"talend-remote-engine-service\\\", \\\"check_procs\\\", \\\"newrelic-daemon\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ps_discovery\",\"updateDate\":1711644627589,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"upj-muh-hms\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A DNS request was made for a chatroom domain\",\"enabled\":true,\"expression\":\"dns.question.name in [\\\"discord.com\\\", \\\"api.telegram.org\\\", \\\"cdn.discordapp.com\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"chatroom_request\",\"updateDate\":1711644612626,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"gnz-81e-6lg\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process environment variables match cryptocurrency miner\",\"enabled\":true,\"expression\":\"exec.envs in [\\\"POOL_USER\\\", \\\"POOL_URL\\\", \\\"POOL_PASS\\\", \\\"DONATE_LEVEL\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"cryptominer_envs\",\"updateDate\":1711644602654,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"7da-gwx-c3l\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The auditctl command was used to modify auditd\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"auditctl\\\" \\u0026\\u0026 exec.args_flags not in [\\\"s\\\", \\\"l\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"auditctl_usage\",\"updateDate\":1711644592613,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"8jg-xym-vqz\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A Jupyter notebook executed a shell\",\"enabled\":true,\"expression\":\"(exec.file.name in [\\\"cat\\\",\\\"chgrp\\\",\\\"chmod\\\",\\\"chown\\\",\\\"cp\\\",\\\"date\\\",\\\"dd\\\",\\\"df\\\",\\\"dir\\\",\\\"echo\\\",\\\"ln\\\",\\\"ls\\\",\\\"mkdir\\\",\\\"mknod\\\",\\\"mktemp\\\",\\\"mv\\\",\\\"pwd\\\",\\\"readlink\\\",\\\"rm\\\",\\\"rmdir\\\",\\\"sleep\\\",\\\"stty\\\",\\\"sync\\\",\\\"touch\\\",\\\"uname\\\",\\\"vdir\\\",\\\"arch\\\",\\\"b2sum\\\",\\\"base32\\\",\\\"base64\\\",\\\"basename\\\",\\\"chcon\\\",\\\"cksum\\\",\\\"comm\\\",\\\"csplit\\\",\\\"cut\\\",\\\"dircolors\\\",\\\"dirname\\\",\\\"du\\\",\\\"env\\\",\\\"expand\\\",\\\"expr\\\",\\\"factor\\\",\\\"fmt\\\",\\\"fold\\\",\\\"groups\\\",\\\"head\\\",\\\"hostid\\\",\\\"id\\\",\\\"install\\\",\\\"join\\\",\\\"link\\\",\\\"logname\\\",\\\"md5sum\\\",\\\"textutils\\\",\\\"mkfifo\\\",\\\"nice\\\",\\\"nl\\\",\\\"nohup\\\",\\\"nproc\\\",\\\"numfmt\\\",\\\"od\\\",\\\"paste\\\",\\\"pathchk\\\",\\\"pinky\\\",\\\"pr\\\",\\\"printenv\\\",\\\"printf\\\",\\\"ptx\\\",\\\"realpath\\\",\\\"runcon\\\",\\\"seq\\\",\\\"sha1sum\\\",\\\"sha224sum\\\",\\\"sha256sum\\\",\\\"sha384sum\\\",\\\"sha512sum\\\",\\\"shred\\\",\\\"shuf\\\",\\\"sort\\\",\\\"split\\\",\\\"stat\\\",\\\"stdbuf\\\",\\\"sum\\\",\\\"tac\\\",\\\"tail\\\",\\\"tee\\\",\\\"test\\\",\\\"timeout\\\",\\\"tr\\\",\\\"truncate\\\",\\\"tsort\\\",\\\"tty\\\",\\\"unexpand\\\",\\\"uniq\\\",\\\"unlink\\\",\\\"users\\\",\\\"wc\\\",\\\"who\\\",\\\"whoami\\\",\\\"chroot\\\"] || exec.file.name in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] || exec.file.name in [\\\"dash\\\",\\\"sh\\\",\\\"static-sh\\\",\\\"sh\\\",\\\"bash\\\",\\\"bash\\\",\\\"bash-static\\\",\\\"zsh\\\",\\\"ash\\\",\\\"csh\\\",\\\"ksh\\\",\\\"tcsh\\\",\\\"busybox\\\",\\\"busybox\\\",\\\"fish\\\",\\\"ksh93\\\",\\\"rksh\\\",\\\"rksh93\\\",\\\"lksh\\\",\\\"mksh\\\",\\\"mksh-static\\\",\\\"csharp\\\",\\\"posh\\\",\\\"rc\\\",\\\"sash\\\",\\\"yash\\\",\\\"zsh5\\\",\\\"zsh5-static\\\"]) \\u0026\\u0026 process.ancestors.comm in [\\\"jupyter-noteboo\\\", \\\"jupyter-lab\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"jupyter_shell_execution\",\"updateDate\":1711644590883,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"ltv-fla-wb0\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"NTDS file referenced in commandline\",\"enabled\":true,\"expression\":\"exec.cmdline =~ \\\"*ntds.dit*\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"name\":\"ntds_in_commandline\",\"updateDate\":1704404490608,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"nyc-gfz-yr5\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142958657,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid) \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"nsswitch_conf_mod_chown\",\"updateDate\":1704404477785,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"phy-tco-k7w\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1617722069155,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A database application spawned a shell, shell utility, or HTTP utility\",\"enabled\":true,\"expression\":\"(exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] ||\\n exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] ||\\n exec.file.path in [\\\"/bin/cat\\\",\\\"/bin/chgrp\\\",\\\"/bin/chmod\\\",\\\"/bin/chown\\\",\\\"/bin/cp\\\",\\\"/bin/date\\\",\\\"/bin/dd\\\",\\\"/bin/df\\\",\\\"/bin/dir\\\",\\\"/bin/echo\\\",\\\"/bin/ln\\\",\\\"/bin/ls\\\",\\\"/bin/mkdir\\\",\\\"/bin/mknod\\\",\\\"/bin/mktemp\\\",\\\"/bin/mv\\\",\\\"/bin/pwd\\\",\\\"/bin/readlink\\\",\\\"/bin/rm\\\",\\\"/bin/rmdir\\\",\\\"/bin/sleep\\\",\\\"/bin/stty\\\",\\\"/bin/sync\\\",\\\"/bin/touch\\\",\\\"/bin/uname\\\",\\\"/bin/vdir\\\",\\\"/usr/bin/arch\\\",\\\"/usr/bin/b2sum\\\",\\\"/usr/bin/base32\\\",\\\"/usr/bin/base64\\\",\\\"/usr/bin/basename\\\",\\\"/usr/bin/chcon\\\",\\\"/usr/bin/cksum\\\",\\\"/usr/bin/comm\\\",\\\"/usr/bin/csplit\\\",\\\"/usr/bin/cut\\\",\\\"/usr/bin/dircolors\\\",\\\"/usr/bin/dirname\\\",\\\"/usr/bin/du\\\",\\\"/usr/bin/env\\\",\\\"/usr/bin/expand\\\",\\\"/usr/bin/expr\\\",\\\"/usr/bin/factor\\\",\\\"/usr/bin/fmt\\\",\\\"/usr/bin/fold\\\",\\\"/usr/bin/groups\\\",\\\"/usr/bin/head\\\",\\\"/usr/bin/hostid\\\",\\\"/usr/bin/id\\\",\\\"/usr/bin/install\\\",\\\"/usr/bin/join\\\",\\\"/usr/bin/link\\\",\\\"/usr/bin/logname\\\",\\\"/usr/bin/md5sum\\\",\\\"/usr/bin/md5sum.textutils\\\",\\\"/usr/bin/mkfifo\\\",\\\"/usr/bin/nice\\\",\\\"/usr/bin/nl\\\",\\\"/usr/bin/nohup\\\",\\\"/usr/bin/nproc\\\",\\\"/usr/bin/numfmt\\\",\\\"/usr/bin/od\\\",\\\"/usr/bin/paste\\\",\\\"/usr/bin/pathchk\\\",\\\"/usr/bin/pinky\\\",\\\"/usr/bin/pr\\\",\\\"/usr/bin/printenv\\\",\\\"/usr/bin/printf\\\",\\\"/usr/bin/ptx\\\",\\\"/usr/bin/realpath\\\",\\\"/usr/bin/runcon\\\",\\\"/usr/bin/seq\\\",\\\"/usr/bin/sha1sum\\\",\\\"/usr/bin/sha224sum\\\",\\\"/usr/bin/sha256sum\\\",\\\"/usr/bin/sha384sum\\\",\\\"/usr/bin/sha512sum\\\",\\\"/usr/bin/shred\\\",\\\"/usr/bin/shuf\\\",\\\"/usr/bin/sort\\\",\\\"/usr/bin/split\\\",\\\"/usr/bin/stat\\\",\\\"/usr/bin/stdbuf\\\",\\\"/usr/bin/sum\\\",\\\"/usr/bin/tac\\\",\\\"/usr/bin/tail\\\",\\\"/usr/bin/tee\\\",\\\"/usr/bin/test\\\",\\\"/usr/bin/timeout\\\",\\\"/usr/bin/tr\\\",\\\"/usr/bin/truncate\\\",\\\"/usr/bin/tsort\\\",\\\"/usr/bin/tty\\\",\\\"/usr/bin/unexpand\\\",\\\"/usr/bin/uniq\\\",\\\"/usr/bin/unlink\\\",\\\"/usr/bin/users\\\",\\\"/usr/bin/wc\\\",\\\"/usr/bin/who\\\",\\\"/usr/bin/whoami\\\",\\\"/usr/sbin/chroot\\\"]) \\u0026\\u0026\\nprocess.parent.file.name in [\\\"mysqld\\\", \\\"mongod\\\", \\\"postgres\\\"] \\u0026\\u0026\\n!(process.parent.file.name == \\\"initdb\\\" \\u0026\\u0026\\nexec.args == \\\"-c locale -a\\\") \\u0026\\u0026\\n!(process.parent.file.name == \\\"postgres\\\" \\u0026\\u0026\\nexec.args == ~\\\"*pg_wal*\\\")\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"database_shell_execution\",\"updateDate\":1704404453620,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"j3f-cie-47b\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Kernel Activity\",\"creationDate\":1650293718630,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A kernel module was loaded from memory\",\"enabled\":true,\"expression\":\"load_module.loaded_from_memory == true\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"kernel_module_load_from_memory\",\"updateDate\":1699614659145,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"my1-vln-8fq\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process launched with arguments associated with cryptominers\",\"enabled\":true,\"expression\":\"exec.args_options in [~\\\"cpu-priority*\\\", ~\\\"donate-level*\\\"] || exec.args in [~\\\"*stratum+tcp*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"cryptominer_args\",\"updateDate\":1699614656177,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"us6-p6v-hbj\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Tar archive created\",\"enabled\":true,\"expression\":\"exec.file.path == \\\"/usr/bin/tar\\\" \\u0026\\u0026 exec.args_flags in [\\\"create\\\",\\\"c\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"tar_execution\",\"updateDate\":1699614655670,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"ohe-vlf-t2h\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142980369,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"ssl_certificate_tampering_chown\",\"updateDate\":1699614645120,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":9}},{\"id\":\"awr-mtg-lce\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A known kubernetes pentesting tool has been executed\",\"enabled\":true,\"expression\":\"(exec.file.name in [ ~\\\"python*\\\" ] \\u0026\\u0026 (\\\"KubiScan.py\\\" in exec.argv || \\\"kubestriker\\\" in exec.argv ) ) || exec.file.name in [ \\\"kubiscan\\\",\\\"kdigger\\\",\\\"kube-hunter\\\",\\\"rakkess\\\",\\\"peirates\\\",\\\"kubescape\\\",\\\"kubeaudit\\\",\\\"kube-linter\\\",\\\"stratus\\\",~\\\"botb-*\\\"]\",\"filters\":[],\"name\":\"offensive_k8s_tool\",\"updateDate\":1699605598275,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"ki7-koc-icf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1627392836162,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An AppArmor profile was modified in an interactive session\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"aa-disable\\\", \\\"aa-complain\\\", \\\"aa-audit\\\"] \\u0026\\u0026 exec.tty_name !=\\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"apparmor_modified_tty\",\"updateDate\":1699605581360,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"je9-er4-njy\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Kernel Activity\",\"creationDate\":1635332067172,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SELinux enforcement status was disabled\",\"enabled\":true,\"expression\":\"selinux.enforce.status in [\\\"permissive\\\", \\\"disabled\\\"] \\u0026\\u0026 process.ancestors.args != ~\\\"*BECOME-SUCCESS*\\\"\",\"filters\":[],\"name\":\"selinux_disable_enforcement\",\"updateDate\":1699605560892,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"ayp-cd9-j3f\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Local account groups were enumerated after container start up\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"tcpdump\\\", \\\"tshark\\\"]\",\"filters\":[],\"name\":\"network_sniffing_tool\",\"updateDate\":1688748485348,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"fdh-b1k-i0e\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"a SUID file was executed\",\"enabled\":true,\"expression\":\"(setuid.euid == 0 || setuid.uid == 0) \\u0026\\u0026 process.file.mode \\u0026 S_ISUID \\u003e 0 \\u0026\\u0026 process.file.uid == 0 \\u0026\\u0026 process.uid != 0 \\u0026\\u0026 process.file.path != \\\"/usr/bin/sudo\\\"\",\"filters\":[],\"name\":\"suid_file_execution\",\"updateDate\":1688748479473,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"igw-lex-dzw\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A hidden file was executed in a suspicious folder\",\"enabled\":true,\"expression\":\"exec.file.name =~ \\\".*\\\" \\u0026\\u0026 exec.file.path in [~\\\"/home/**\\\", ~\\\"/tmp/**\\\", ~\\\"/var/tmp/**\\\", ~\\\"/dev/shm/**\\\"]\",\"filters\":[],\"name\":\"hidden_file_executed\",\"updateDate\":1688748474266,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"ixh-tff-n0g\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Shell profile was modified\",\"enabled\":true,\"expression\":\"open.file.path in [~\\\"/home/*/*profile\\\", ~\\\"/home/*/*rc\\\"] \\u0026\\u0026 open.flags \\u0026 ((O_CREAT|O_TRUNC|O_RDWR|O_WRONLY)) \\u003e 0\",\"filters\":[],\"name\":\"shell_profile_modification\",\"updateDate\":1688748474208,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"lg7-iv9-wts\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path == \\\"/etc/sudoers\\\")\\n) \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\"]\",\"filters\":[],\"name\":\"sudoers_policy_modified_utimes\",\"updateDate\":1684185006444,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"07x-ilo-vbw\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path == \\\"/etc/sudoers\\\"\\n || rename.file.destination.path == \\\"/etc/sudoers\\\")\\n)\",\"filters\":[],\"name\":\"sudoers_policy_modified_rename\",\"updateDate\":1684184995498,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"wxp-zv6-mdg\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Kernel modules were listed using the kmod command\",\"enabled\":true,\"expression\":\"exec.comm == \\\"kmod\\\" \\u0026\\u0026 exec.args in [~\\\"*list*\\\"]\",\"filters\":[],\"name\":\"kmod_list\",\"updateDate\":1684184992493,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"d5p-vk6-w0f\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Kernel modules were listed using the lsmod command\",\"enabled\":true,\"expression\":\"exec.comm == \\\"lsmod\\\"\",\"filters\":[],\"name\":\"exec_lsmod\",\"updateDate\":1684184990877,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"zdy-kcq-q0v\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The kubeconfig file was accessed\",\"enabled\":true,\"expression\":\"open.file.path in [~\\\"/home/*/.kube/config\\\", \\\"/root/.kube/config\\\"]\",\"filters\":[],\"name\":\"read_kubeconfig\",\"updateDate\":1684184984191,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"yij-lei-ykx\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The whoami command was executed\",\"enabled\":true,\"expression\":\"exec.comm == \\\"whoami\\\"\",\"filters\":[],\"name\":\"exec_whoami\",\"updateDate\":1684184982050,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"swo-jyw-vtb\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The AWS EKS service account token was accessed\",\"enabled\":true,\"expression\":\"open.file.path =~ \\\"/var/run/secrets/eks.amazonaws.com/serviceaccount/**\\\" \\u0026\\u0026 open.file.name == \\\"token\\\" \\u0026\\u0026 process.file.path not in [\\\"/opt/datadog-agent/embedded/bin/agent\\\", \\\"/opt/datadog-agent/embedded/bin/system-probe\\\", \\\"/opt/datadog-agent/embedded/bin/security-agent\\\", \\\"/opt/datadog-agent/embedded/bin/process-agent\\\", \\\"/opt/datadog-agent/bin/agent/agent\\\", \\\"/opt/datadog/apm/inject/auto_inject_runc\\\", \\\"/usr/bin/dd-host-install\\\", \\\"/usr/bin/dd-host-container-install\\\", \\\"/usr/bin/dd-container-install\\\", \\\"/opt/datadog-agent/bin/datadog-cluster-agent\\\"]\",\"filters\":[],\"name\":\"aws_eks_service_account_token_accessed\",\"updateDate\":1681490453789,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"w07-amm-bxr\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/etc/ssl/certs/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[],\"name\":\"ssl_certificate_tampering_utimes\",\"updateDate\":1681490443753,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":10}},{\"id\":\"jin-icc-lpi\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142980369,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/etc/ssl/certs/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[],\"name\":\"ssl_certificate_tampering_unlink\",\"updateDate\":1681490440557,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":8}},{\"id\":\"asy-mod-zmt\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1627392836979,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A user was created via an interactive session\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"useradd\\\", \\\"newusers\\\", \\\"adduser\\\"] \\u0026\\u0026 exec.tty_name !=\\\"\\\" \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 exec.args_flags not in [\\\"D\\\"]\",\"filters\":[],\"name\":\"user_created_tty\",\"updateDate\":1677793421528,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"4fh-bb7-747\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746271,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[],\"name\":\"credential_modified_chmod\",\"updateDate\":1677793414173,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":11}},{\"id\":\"yiy-mba-pny\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1617722067554,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A network utility (nmap) commonly used in intrusion attacks was executed\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"nmap\\\", \\\"masscan\\\", \\\"fping\\\", \\\"zgrab\\\", \\\"zgrab2\\\", \\\"rustscan\\\", \\\"pnscan\\\"] \\u0026\\u0026 exec.args_flags not in [\\\"V\\\", \\\"version\\\"]\",\"filters\":[],\"name\":\"common_net_intrusion_util\",\"updateDate\":1677793413474,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":5}},{\"id\":\"oio-i4o-xzw\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A shell with a TTY was executed in a container\",\"enabled\":true,\"expression\":\"exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] \\u0026\\u0026 process.tty_name != \\\"\\\" \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[],\"name\":\"tty_shell_in_container\",\"updateDate\":1677793412844,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"tmh-now-e61\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142933669,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n open.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ]\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[],\"name\":\"pci_11_5_critical_binaries_open\",\"updateDate\":1677793410974,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"ay7-jkz-rda\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746271,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[],\"name\":\"credential_modified_unlink\",\"updateDate\":1677793404797,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":10}},{\"id\":\"xye-pfo-y0r\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1598516746168,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[],\"name\":\"kernel_module_open\",\"updateDate\":1674486423764,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":9}},{\"id\":\"cmu-g58-cau\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142961130,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\" ]\\n || rename.file.destination.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\"]\",\"filters\":[],\"name\":\"cron_at_job_creation_rename\",\"updateDate\":1674486423628,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"sna-hgh-vo4\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process unlinked a dynamic linker config file\",\"enabled\":true,\"expression\":\"unlink.file.path in [\\\"/etc/ld.so.preload\\\", \\\"/etc/ld.so.conf\\\", ~\\\"/etc/ld.so.conf.d/*.conf\\\"] \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\"]\",\"filters\":[],\"name\":\"dynamic_linker_config_unlink\",\"updateDate\":1674486422738,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"3xl-qds-f0e\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142961130,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\"]\",\"filters\":[],\"name\":\"cron_at_job_creation_chown\",\"updateDate\":1674486406776,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":7}},{\"id\":\"ygn-d8o-ncr\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142961130,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\"]\",\"filters\":[],\"name\":\"cron_at_job_creation_utimes\",\"updateDate\":1674486406387,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":7}},{\"id\":\"kuu-k1s-gqz\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142929241,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\"]\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[],\"name\":\"systemd_modification_chmod\",\"updateDate\":1674486404846,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":6}},{\"id\":\"hnh-eio-mow\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Kernel Activity\",\"creationDate\":1650293718435,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process uses an anti-debugging technique to block debuggers\",\"enabled\":true,\"expression\":\"ptrace.request == PTRACE_TRACEME \\u0026\\u0026 process.file.name != \\\"\\\"\",\"filters\":[],\"name\":\"ptrace_antidebug\",\"updateDate\":1670604150759,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"ddh-ld5-2rj\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An AWS IMDS was called via a network utility\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026 exec.args in [~\\\"*169.254.169.254/latest/meta-data/iam/security-credentials/*\\\", \\\"*169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI\\\", ~\\\"*169.254.170.2/*/credentials?id=*\\\"]\",\"filters\":[],\"name\":\"aws_imds\",\"updateDate\":1670604150281,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"enj-kdc-1tt\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A suspicious file was written by a network utility\",\"enabled\":true,\"expression\":\"open.flags \\u0026 O_CREAT \\u003e 0 \\u0026\\u0026 process.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"]\\n\\u0026\\u0026 (\\n (open.file.path =~ \\\"/tmp/**\\\" \\u0026\\u0026 open.file.name in [~\\\"*.sh\\\", ~\\\"*.c\\\", ~\\\"*.so\\\", ~\\\"*.ko\\\"])\\n || open.file.path in [~\\\"/usr/**\\\", ~\\\"/lib/**\\\", ~\\\"/etc/**\\\", ~\\\"/var/tmp/**\\\", ~\\\"/dev/shm/**\\\"]\\n)\",\"filters\":[],\"name\":\"net_file_download\",\"updateDate\":1670604150067,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"ct9-og0-h7h\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Network utility executed with suspicious URI\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026 exec.args in [~\\\"*.php*\\\", ~\\\"*.jpg*\\\"] \",\"filters\":[],\"name\":\"net_unusual_request\",\"updateDate\":1670604150059,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"9dx-svj-apj\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An Azure IMDS was called via a network utility\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026 exec.args in [~\\\"*169.254.169.254/metadata/identity/oauth2/token?api-version=*\\\"]\",\"filters\":[],\"name\":\"azure_imds\",\"updateDate\":1670604150058,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"sah-xju-jcq\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An GCP IMDS was called via a network utility\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026 exec.args in [~\\\"*metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token\\\", ~\\\"*169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token\\\"]\",\"filters\":[],\"name\":\"gcp_imds\",\"updateDate\":1670604150002,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"jx4-pkv-247\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1648564123603,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Potential Dirty pipe exploitation attempt\",\"enabled\":true,\"expression\":\"(splice.pipe_entry_flag \\u0026 PIPE_BUF_FLAG_CAN_MERGE) != 0 \\u0026\\u0026 (splice.pipe_exit_flag \\u0026 PIPE_BUF_FLAG_CAN_MERGE) == 0 \\u0026\\u0026 (process.uid != 0 \\u0026\\u0026 process.gid != 0)\",\"filters\":[],\"name\":\"dirty_pipe_attempt\",\"updateDate\":1666888163347,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"aux-r7v-odv\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1648564123563,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Potential Dirty pipe exploitation\",\"enabled\":true,\"expression\":\"(splice.pipe_exit_flag \\u0026 PIPE_BUF_FLAG_CAN_MERGE) \\u003e 0 \\u0026\\u0026 (process.uid != 0 \\u0026\\u0026 process.gid != 0)\",\"filters\":[],\"name\":\"dirty_pipe_exploitation\",\"updateDate\":1666888163318,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"vri-cjo-ywh\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1643639113864,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process was spawned with indicators of exploitation of CVE-2021-4034\",\"enabled\":true,\"expression\":\"(exec.file.path == \\\"/usr/bin/pkexec\\\" \\u0026\\u0026 exec.envs in [~\\\"*SHELL*\\\", ~\\\"*PATH*\\\"] \\u0026\\u0026 exec.envs not in [~\\\"*DISPLAY*\\\", ~\\\"*DESKTOP_SESSION*\\\"] \\u0026\\u0026 exec.uid != 0)\",\"filters\":[],\"name\":\"pwnkit_privilege_escalation\",\"updateDate\":1666888163135,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":2}},{\"id\":\"ejk-rbu-v9x\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1617722068383,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The passwd or chpasswd utility was used to modify an account password\",\"enabled\":true,\"expression\":\"exec.file.path in [\\\"/usr/bin/passwd\\\", \\\"/usr/sbin/chpasswd\\\"] \\u0026\\u0026 exec.args_flags not in [\\\"S\\\", \\\"status\\\"]\",\"filters\":[],\"name\":\"passwd_execution\",\"updateDate\":1666888162106,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"ien-7aw-blw\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142954844,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n chown.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (chown.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[],\"name\":\"ssh_authorized_keys_chown\",\"updateDate\":1665475102281,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"vqc-lta-u8c\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142954844,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n chmod.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (chmod.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[],\"name\":\"ssh_authorized_keys_chmod\",\"updateDate\":1665475100348,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":4}},{\"id\":\"ehj-52q-wq0\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A symbolic link for shell history was created targeting /dev/null\",\"enabled\":true,\"expression\":\"exec.comm == \\\"ln\\\" \\u0026\\u0026 exec.args in [~\\\"*.*history*\\\", \\\"/dev/null\\\"]\",\"filters\":[],\"name\":\"shell_history_symlink\",\"updateDate\":1661193980229,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"rp0-hmk-9c1\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Network Activity\",\"creationDate\":0,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A DNS lookup was done for a IP check service\",\"enabled\":true,\"expression\":\"dns.question.name in [\\\"icanhazip.com\\\", \\\"ip-api.com\\\", \\\"myip.opendns.com\\\", \\\"checkip.amazonaws.com\\\", \\\"whatismyip.akamai.com\\\"] \\u0026\\u0026 process.file.name != \\\"\\\"\",\"filters\":[],\"name\":\"ip_check_domain\",\"updateDate\":1654020337230,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"lzx-kkv-at3\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Kernel Activity\",\"creationDate\":1650293718540,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process attempted to inject code into another process\",\"enabled\":true,\"expression\":\"ptrace.request == PTRACE_POKETEXT || ptrace.request == PTRACE_POKEDATA || ptrace.request == PTRACE_POKEUSR\",\"filters\":[],\"name\":\"ptrace_injection\",\"updateDate\":1650293789265,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"jl5-wjt-58e\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"Process Activity\",\"creationDate\":1627392836096,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"EC2 Instance Metadata Service Accessed via Network Utility\",\"enabled\":true,\"expression\":\"exec.file.path in [\\\"/usr/bin/wget\\\", \\\"/usr/bin/curl\\\"] \\u0026\\u0026 exec.args in [~\\\"*169.254.169.254*\\\"]\",\"filters\":[],\"name\":\"aws_metadata_service\",\"updateDate\":1629226276630,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":1}},{\"id\":\"8ol-dkr-aml\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142958657,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Nsswitch Configuration Modified\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ \\\"/etc/nsswitch.conf\\\" ]\\n || link.file.destination.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n)\",\"filters\":[],\"name\":\"nsswitch_conf_mod_link\",\"updateDate\":1628512222322,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"fdf-wvb-c3k\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142958657,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Nsswitch Configuration Modified\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 ((O_RDWR|O_WRONLY|O_CREAT)) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n)\",\"filters\":[],\"name\":\"nsswitch_conf_mod_open\",\"updateDate\":1628512222322,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"pkn-azw-qia\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142958657,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Nsswitch Configuration Modified\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ \\\"/etc/nsswitch.conf\\\" ]\\n || rename.file.destination.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n)\",\"filters\":[],\"name\":\"nsswitch_conf_mod_rename\",\"updateDate\":1628512222322,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"wpt-ba8-mpd\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142958657,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Nsswitch Configuration Modified\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n)\",\"filters\":[],\"name\":\"nsswitch_conf_mod_unlink\",\"updateDate\":1628512222322,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"7ud-d2o-qgo\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142958657,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Nsswitch Configuration Modified\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n)\",\"filters\":[],\"name\":\"nsswitch_conf_mod_utimes\",\"updateDate\":1628512222322,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"za8-uxc-jxk\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142954844,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH Authorized Keys Modified\",\"enabled\":true,\"expression\":\"(\\n link.file.name == \\\"authorized_keys\\\" \\u0026\\u0026 (link.file.path in [ ~\\\"*/.ssh/*\\\" ]\\n || link.file.destination.path in [ ~\\\"*/.ssh/*\\\" ])\\n)\",\"filters\":[],\"name\":\"ssh_authorized_keys_link\",\"updateDate\":1628512221784,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"tiz-yss-zhq\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142954844,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH Authorized Keys Modified\",\"enabled\":true,\"expression\":\"(\\n rename.file.name == \\\"authorized_keys\\\" \\u0026\\u0026 (rename.file.path in [ ~\\\"*/.ssh/*\\\" ]\\n || rename.file.destination.path in [ ~\\\"*/.ssh/*\\\" ])\\n)\",\"filters\":[],\"name\":\"ssh_authorized_keys_rename\",\"updateDate\":1628512221784,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"apr-zj4-ee1\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142954844,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH Authorized Keys Modified\",\"enabled\":true,\"expression\":\"(\\n unlink.file.name == \\\"authorized_keys\\\" \\u0026\\u0026 (unlink.file.path in [ ~\\\"*/.ssh/*\\\" ])\\n)\",\"filters\":[],\"name\":\"ssh_authorized_keys_unlink\",\"updateDate\":1628512221784,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}},{\"id\":\"yhq-etl-wr6\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[],\"agentConstraint\":\"\",\"category\":\"File Activity\",\"creationDate\":1606142954844,\"creator\":{\"name\":\"\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH Authorized Keys Modified\",\"enabled\":true,\"expression\":\"(\\n utimes.file.name == \\\"authorized_keys\\\" \\u0026\\u0026 (utimes.file.path in [ ~\\\"*/.ssh/*\\\" ])\\n)\",\"filters\":[],\"name\":\"ssh_authorized_keys_utimes\",\"updateDate\":1628512221784,\"updater\":{\"name\":\"\",\"handle\":\"\"},\"version\":3}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all Workload Protection agent rules (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:47.530Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/cws/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"56y-vsb-zqu\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"kernel_module_open\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-x51\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Safeboot registry modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\System\\\\CurrentControlSet\\\\Control\\\\SafeBoot\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"safeboot_modification\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1562-impair-defenses\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"4yt-ize-avz\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Omiagent spawns a privileged child process\",\"enabled\":true,\"expression\":\"exec.uid \\u003e= 0 \\u0026\\u0026 process.ancestors.file.name == \\\"omiagent\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"omigod\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1203-exploitation-for-client-execution\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-tig\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A user was added to the sudo group\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"usermod\\\" \\u0026\\u0026 (exec.args_flags in [\\\"aG\\\"] || exec.args_flags in [\\\"G\\\"]) \\u0026\\u0026 exec.args_flags not in [\\\"r\\\"] \\u0026\\u0026 (exec.argv == \\\"sudo\\\" || exec.argv == \\\"wheel\\\")\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"usermod_privileged_group\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1098-account-manipulation\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"0yj-grp-cmx\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ]\\n || rename.file.destination.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"credential_modified_rename\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"fpa-r6g-2em\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n open.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ]\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pci_11_5_critical_binaries_open\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-6ql\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"memfd object created\",\"enabled\":true,\"expression\":\"exec.file.name =~ \\\"memfd*\\\" \\u0026\\u0026 exec.file.path == \\\"\\\" \\u0026\\u0026 process.parent.file.path not in [\\\"/usr/bin/runc\\\", \\\"/usr/sbin/runc\\\", \\\"/usr/bin/docker-runc\\\" , \\\"/run/docker/runtime-runc/moby/*\\\", \\\"/x86_64-bottlerocket-linux-gnu/sys-root/usr/bin/runc\\\"] \\u0026\\u0026 !(process.comm == \\\"dd-ipc-helper\\\" \\u0026\\u0026 exec.file.name in [\\\"memfd:spawn_worker_trampoline (deleted)\\\", \\\"memfd:spawn_worker_trampoline\\\"])\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"memfd_create\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1620-reflective-code-loading\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"pwu-7u7-iiq\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process uses an anti-debugging technique to block debuggers\",\"enabled\":true,\"expression\":\"ptrace.request == PTRACE_TRACEME \\u0026\\u0026 process.file.name != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ptrace_antidebug\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1622-debugger-evasion\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"wgv-wsb-pse\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An AWS IMDS was called via a network utility\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026 exec.args in [~\\\"*169.254.169.254/latest/meta-data/iam/security-credentials/*\\\", ~\\\"*169.254.170.2/*/credentials?id=*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"best-practice.policy\",\"threat-detection.policy\"],\"name\":\"aws_imds\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1552-unsecured-credentials\",\"subtechnique:T1552.005-cloud-instance-metadata-api\",\"policy:best-practice\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-3b9\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 ((O_CREAT|O_RDWR|O_WRONLY|O_TRUNC)) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003e 90s\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"credential_modified_open_v2\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"fyq-x5u-mv1\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"kernel_module_utimes\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"sej-11b-ey6\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Potential Dirty pipe exploitation attempt\",\"enabled\":true,\"expression\":\"(splice.pipe_entry_flag \\u0026 PIPE_BUF_FLAG_CAN_MERGE) != 0 \\u0026\\u0026 (splice.pipe_exit_flag \\u0026 PIPE_BUF_FLAG_CAN_MERGE) == 0 \\u0026\\u0026 (process.uid != 0 \\u0026\\u0026 process.gid != 0)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"dirty_pipe_attempt\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1068-exploitation-for-privilege-escalation\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"9f3-haw-91q\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The AWS EKS service account token was accessed\",\"enabled\":true,\"expression\":\"open.file.path =~ \\\"/var/run/secrets/eks.amazonaws.com/serviceaccount/**\\\" \\u0026\\u0026\\nopen.file.name == \\\"token\\\" \\u0026\\u0026\\n(process.file.path not in [\\\"/opt/datadog-agent/embedded/bin/agent\\\", \\\"/opt/datadog-agent/embedded/bin/system-probe\\\", \\\"/opt/datadog-agent/embedded/bin/security-agent\\\", \\\"/opt/datadog-agent/embedded/bin/process-agent\\\", \\\"/opt/datadog-agent/embedded/bin/trace-agent\\\", \\\"/opt/datadog-agent/bin/agent/agent\\\", \\\"/opt/datadog/apm/inject/auto_inject_runc\\\", \\\"/usr/bin/dd-host-install\\\", \\\"/usr/bin/dd-host-container-install\\\", \\\"/usr/bin/dd-container-install\\\", \\\"/opt/datadog-agent/bin/datadog-cluster-agent\\\", ~\\\"/opt/datadog-packages/**\\\", ~\\\"/opt/datadog-installer/**\\\"] \\u0026\\u0026 process.parent.comm not in [\\\"velero\\\"])\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"aws_eks_service_account_token_accessed\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1552-unsecured-credentials\",\"subtechnique:T1552.001-credentials-in-files\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"a52-req-ghm\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Exfiltration attempt via network utility\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026\\nexec.args_options in [ ~\\\"post-file=*\\\", ~\\\"post-data=*\\\", ~\\\"T=*\\\", ~\\\"d=@*\\\", ~\\\"upload-file=*\\\", ~\\\"F=file*\\\"] \\u0026\\u0026\\nexec.args not in [~\\\"*localhost*\\\", ~\\\"*127.0.0.1*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"net_util_exfiltration\",\"product_tags\":[\"tactic:TA0010-exfiltration\",\"technique:T1048-exfiltration-over-alternative-protocol\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-5wh\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"a SUID file was executed\",\"enabled\":true,\"expression\":\"(setuid.euid == 0 || setuid.uid == 0) \\u0026\\u0026 process.file.mode \\u0026 S_ISUID \\u003e 0 \\u0026\\u0026 process.file.uid == 0 \\u0026\\u0026 process.uid != 0 \\u0026\\u0026 process.file.path != \\\"/usr/bin/sudo\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"suid_file_execution\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1548-abuse-elevation-control-mechanism\",\"subtechnique:T1548.001-setuid-and-setgid\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"q08-c9l-rsp\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"credential_modified_unlink\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-bxs\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"sudoers_policy_modified_unlink\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1548-abuse-elevation-control-mechanism\",\"subtechnique:T1548.001-setuid-and-setgid\",\"subtechnique:T1548.003-sudo-and-sudo-caching\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-bus\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The executable bit was added to a newly created file\",\"enabled\":true,\"expression\":\"chmod.file.in_upper_layer \\u0026\\u0026\\nchmod.file.change_time \\u003c 30s \\u0026\\u0026\\nprocess.container.id != \\\"\\\" \\u0026\\u0026\\nchmod.file.destination.mode != chmod.file.mode \\u0026\\u0026\\nchmod.file.destination.mode \\u0026 S_IXUSR|S_IXGRP|S_IXOTH \\u003e 0 \\u0026\\u0026\\nprocess.argv in [\\\"+x\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"executable_bit_added\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1222-file-and-directory-permissions-modification\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"tlu-qlm-1ow\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The runc binary was modified in a non-standard way\",\"enabled\":true,\"expression\":\"open.file.path in [\\\"/usr/bin/runc\\\", \\\"/usr/sbin/runc\\\", \\\"/usr/bin/docker-runc\\\"]\\n\\u0026\\u0026 open.flags \\u0026 O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY \\u003e 0\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"runc_modification\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-oi1\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process arguments indicating possible socat shell detected\",\"enabled\":true,\"expression\":\"((exec.file.name == \\\"socat\\\") || (exec.comm == \\\"socat\\\")) \\u0026\\u0026 exec.args in [~\\\"*/bin/bash*\\\", ~\\\"*/bin/sh*\\\", ~\\\"*exec*\\\", ~\\\"*pty*\\\", ~\\\"*setsid*\\\", ~\\\"*stderr*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"socat_shell\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1059-command-and-scripting-interpreter\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-wok\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Device rule created\",\"enabled\":true,\"expression\":\"open.file.path in [~\\\"/etc/udev/rules.d/*\\\", ~\\\"/lib/udev/rules.d/*\\\", ~\\\"/usr/lib/udev/rules.d/*\\\", ~\\\"/usr/local/lib/udev/rules.d/*\\\", ~\\\"/run/udev/rules.d/*\\\"] \\u0026\\u0026 open.flags \\u0026 O_CREAT \\u003e 0\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"udev_modification\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1546-event-triggered-execution\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-76q\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows cryptographic blocking policy modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Cryptography\\\\OID\\\\EncodingType 0\\\\CryptSIPDllRemoveSignedDataMsg*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"windows_cryptographic_blocking_policy_registry_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1553-subvert-trust-controls\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-fn2\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Shell profile was modified\",\"enabled\":true,\"expression\":\"open.file.path in [~\\\"/home/*/*profile\\\", ~\\\"/home/*/*rc\\\"] \\u0026\\u0026 open.flags \\u0026 ((O_CREAT|O_TRUNC|O_RDWR|O_WRONLY)) \\u003e 0\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"shell_profile_modification\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-tat\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows RPC COM debugging registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Windows*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"windows_com_rpc_debugging_registry_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1112-modify-registry\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-7m7\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The auditctl command was used to modify auditd\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"auditctl\\\" \\u0026\\u0026 exec.args_flags not in [\\\"s\\\", \\\"l\\\" , \\\"v\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"auditctl_usage\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1562-impair-defenses\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-ly8\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The auditd configuration file was modified without using auditctl\",\"enabled\":true,\"expression\":\"open.file.path == \\\"/etc/audit/auditd.conf\\\" \\u0026\\u0026 open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 process.file.name != \\\"auditctl\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"auditd_config_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1562-impair-defenses\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"wnk-nli-nbp\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"cron_at_job_creation_chown\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1053-scheduled-task-or-job\",\"subtechnique:T1053.003-cron\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"y0y-3gl-645\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n unlink.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (unlink.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"ssh_authorized_keys_unlink\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1098-account-manipulation\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"7ts-208-rn4\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An AppArmor profile was modified in an interactive session\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"aa-disable\\\", \\\"aa-complain\\\", \\\"aa-audit\\\"] \\u0026\\u0026 exec.tty_name !=\\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"apparmor_modified_tty\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1562-impair-defenses\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"4ov-ang-2gx\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Network Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A DNS lookup was done for a IP check service\",\"enabled\":true,\"expression\":\"dns.question.name in [\\\"icanhazip.com\\\", \\\"ip-api.com\\\", \\\"myip.opendns.com\\\", \\\"checkip.amazonaws.com\\\", \\\"whatismyip.akamai.com\\\"] \\u0026\\u0026 process.file.name != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ip_check_domain\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1016-system-network-configuration-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-fbb\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Library libpam.so hooked using eBPF\",\"enabled\":true,\"expression\":\"bpf.cmd == BPF_MAP_CREATE \\u0026\\u0026 process.args in [r\\\"libpam\\\\.so\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"libpam_ebpf_hook\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1056-input-capture\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"s9m-foq-qqz\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"credential_modified_chmod\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-l8e\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"sudoers_policy_modified_chown\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1548-abuse-elevation-control-mechanism\",\"subtechnique:T1548.001-setuid-and-setgid\",\"subtechnique:T1548.003-sudo-and-sudo-caching\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-myb\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"]\\n || link.file.destination.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"sudoers_policy_modified_link\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1548-abuse-elevation-control-mechanism\",\"subtechnique:T1548.001-setuid-and-setgid\",\"subtechnique:T1548.003-sudo-and-sudo-caching\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-6ku\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"service_new_cgroup_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from new service cgroup\",\"enabled\":true,\"expression\":\"(exec.envs in [\\\"DD_SERVICE\\\", \\\"OTEL_SERVICE_NAME\\\"] || \\\"tags.datadoghq.com/service\\\" in container.tags) \\u0026\\u0026 ${process.correlation_key} in [~\\\"service_*\\\"] \\u0026\\u0026 process.cgroup.id != process.parent.cgroup.id\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_service_new_cgroup\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-41f\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH initiated a connection on a nonstandard port\",\"enabled\":true,\"expression\":\"connect.addr.port in [80, 8080, 88, 443, 8443, 4444] \\u0026\\u0026 process.file.name == \\\"ssh\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ssh_nonstandard_connection\",\"product_tags\":[\"tactic:TA0008-lateral-movement\",\"technique:T1021-remote-services\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-dnj\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The AWS CLI utility was executed\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"aws\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"best-practice.policy\",\"threat-detection.policy\"],\"name\":\"aws_cli_usage\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1651-cloud-administration-command\",\"policy:best-practice\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"3i1-zpd-ycj\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\" ]\\n || rename.file.destination.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"kernel_module_rename\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"sif-d9p-wzg\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ \\\"/etc/nsswitch.conf\\\" ]\\n || rename.file.destination.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"nsswitch_conf_mod_rename\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"t5u-qdx-650\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n rename.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (rename.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ]\\n || rename.file.destination.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"ssh_authorized_keys_rename\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1098-account-manipulation\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"wgq-lg4-tas\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SELinux enforcement status was disabled\",\"enabled\":true,\"expression\":\"selinux.enforce.status in [\\\"permissive\\\", \\\"disabled\\\"] \\u0026\\u0026 process.ancestors.args != ~\\\"*BECOME-SUCCESS*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"selinux_disable_enforcement\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1562-impair-defenses\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"kv9-026-vhz\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"credential_modified_utimes\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"m7d-vlh-3yq\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Package management was detected in a container\",\"enabled\":true,\"expression\":\"exec.file.path in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"best-practice.policy\",\"threat-detection.policy\"],\"name\":\"package_management_in_container\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1059-command-and-scripting-interpreter\",\"policy:best-practice\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"mqh-lgo-brj\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"nsswitch_conf_mod_chmod\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-531\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container performed various enumeration activities including checking container runtime, process privileges, user namespace mappings, Linux Security Modules, mount points, and network namespaces.\",\"enabled\":true,\"expression\":\"process.container.id != \\\"\\\" \\u0026\\u0026 (\\n open.file.path in [~\\\"/run/systemd/container\\\"] ||\\n open.file.path in [~\\\"/proc/*/status\\\", ~\\\"/proc/*/task/*/status\\\"] ||\\n (open.file.path in [~\\\"/proc/*/uid_map\\\"] \\u0026\\u0026 process.file.name not in [\\\"runc\\\"]) ||\\n open.file.path in [~\\\"/proc/*/attr/current\\\"] ||\\n open.file.path in [~\\\"/proc/*/mountinfo\\\"] ||\\n open.file.path in [~\\\"/proc/*/cgroup\\\"] ||\\n open.file.path in [~\\\"/proc/net/unix\\\"]\\n) \\u0026\\u0026\\nprocess.file.in_upper_layer \\u0026\\u0026 \\nprocess.file.path not in [\\\"/opt/datadog-agent/embedded/bin/agent\\\", \\\"/opt/datadog-agent/embedded/bin/system-probe\\\", \\\"/opt/datadog-agent/embedded/bin/security-agent\\\", \\\"/opt/datadog-agent/embedded/bin/process-agent\\\", \\\"/opt/datadog-agent/embedded/bin/trace-agent\\\", \\\"/opt/datadog-agent/bin/agent/agent\\\", \\\"/opt/datadog/apm/inject/auto_inject_runc\\\", \\\"/usr/bin/dd-host-install\\\", \\\"/usr/bin/dd-host-container-install\\\", \\\"/usr/bin/dd-container-install\\\", \\\"/opt/datadog-agent/bin/datadog-cluster-agent\\\", ~\\\"/opt/datadog-packages/**\\\", ~\\\"/opt/datadog-installer/**\\\"] \",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"container_breakout_enumeration_tool\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1613-container-and-resource-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-q5e\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"package_install_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context of npm package installation\",\"enabled\":true,\"expression\":\"exec.file.name in [~\\\"node\\\", ~\\\"npm\\\"] \\u0026\\u0026 \\n(process.args =~ \\\"* install *\\\" || process.args =~ \\\"* add *\\\" || process.args =~ \\\"* i *\\\" || \\n process.args =~ \\\"* in *\\\" || process.args =~ \\\"* ins *\\\" || process.args =~ \\\"* inst *\\\" || \\n process.args =~ \\\"* insta *\\\" || process.args =~ \\\"* instal *\\\" || process.args =~ \\\"* isnt *\\\" || \\n process.args =~ \\\"* isnta *\\\" || process.args =~ \\\"* isntal *\\\" || process.args =~ \\\"* isntall *\\\") \\u0026\\u0026\\nnot(process.args =~ \\\"*-e *\\\") \\u0026\\u0026\\n${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\", ~\\\"service_*\\\", ~\\\"service_new_cgroup_*\\\", ~\\\"interactive_shell_*\\\", ~\\\"k8s_session_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_npm_install\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-bgf\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A hidden file was executed in a suspicious folder\",\"enabled\":true,\"expression\":\"exec.file.name =~ \\\".*\\\" \\u0026\\u0026 exec.file.path in [~\\\"/home/**\\\", ~\\\"/tmp/**\\\", ~\\\"/var/tmp/**\\\", ~\\\"/dev/shm/**\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"hidden_file_executed\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1564-hide-artifacts\",\"subtechnique:T1564.001-hidden-files-and-directories\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-uv8\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"systemctl used to stop a service\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"systemctl\\\" \\u0026\\u0026 exec.args in [~\\\"*stop*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"service_stop\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1489-service-stop\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"20v-gdb-0ha\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"kernel_module_unlink\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"jr3-0m8-jlj\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"hash\":{},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process launched with arguments associated with cryptominers\",\"enabled\":true,\"expression\":\"exec.args_options in [~\\\"cpu-priority*\\\", ~\\\"donate-level*\\\", ~\\\"wallet-address*\\\"] || exec.args_flags == \\\"randomx-1gb-pages\\\" || exec.args in [~\\\"*stratum+tcp*\\\", ~\\\"*stratum+ssl*\\\", ~\\\"*stratum1+tcp*\\\", ~\\\"*stratum1+ssl*\\\", ~\\\"*stratum2+tcp*\\\", ~\\\"*stratum2+ssl*\\\", ~\\\"*nicehash*\\\", ~\\\"*yespower*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"cryptominer_args\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1496-resource-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-kjt\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"scope_field\":\"cgroup_write.pid\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"service_new_cgroup_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"scope_field\":\"cgroup_write.pid\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from new service cgroup write\",\"enabled\":true,\"expression\":\"cgroup_write.pid \\u003e 0 \\u0026\\u0026 (process.envs in [\\\"DD_SERVICE\\\", \\\"OTEL_SERVICE_NAME\\\"] || \\\"tags.datadoghq.com/service\\\" in container.tags) \\u0026\\u0026 ${process.correlation_key} in [~\\\"service_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_service_new_cgroup_write\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"5t3-iiv-rv5\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A kernel module was loaded\",\"enabled\":true,\"expression\":\"load_module.loaded_from_memory == false \\u0026\\u0026 load_module.name not in [\\\"nf_tables\\\", \\\"iptable_filter\\\", \\\"ip6table_filter\\\", \\\"bpfilter\\\", \\\"ip6_tables\\\", \\\"ip6table_nat\\\", \\\"nf_reject_ipv4\\\", \\\"ipt_REJECT\\\", \\\"iptable_raw\\\", \\\"udp_diag\\\", \\\"inet_diag\\\"] \\u0026\\u0026 process.ancestors.file.name not in [~\\\"falcon*\\\", \\\"unattended-upgrade\\\", \\\"apt.systemd.daily\\\", \\\"xtables-legacy-multi\\\", \\\"ssm-agent-worker\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"kernel_module_load\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-hbr\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"process arguments match sliver c2 implant\",\"enabled\":true,\"expression\":\"exec.cmdline =~ \\\"*NoExit *\\\" \\u0026\\u0026 exec.cmdline =~ \\\"*Command *\\\" \\u0026\\u0026 exec.cmdline =~ \\\"*[Console]::OutputEncoding=[Text.UTF8Encoding]::UTF8*\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"sliver_c2_implant_execution\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1071-application-layer-protocol\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-s07\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])\\n) \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"sudoers_policy_modified_utimes\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1548-abuse-elevation-control-mechanism\",\"subtechnique:T1548.001-setuid-and-setgid\",\"subtechnique:T1548.003-sudo-and-sudo-caching\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-fdc\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"service_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from service\",\"enabled\":true,\"expression\":\"(exec.envs in [\\\"DD_SERVICE\\\", \\\"OTEL_SERVICE_NAME\\\"] || \\\"tags.datadoghq.com/service\\\" in container.tags) \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_service\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"jeh-18e-m9h\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An interactive shell was started inside of a container\",\"enabled\":true,\"expression\":\"exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] \\u0026\\u0026 exec.args_flags in [\\\"i\\\"] \\u0026\\u0026 process.container.id !=\\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"interactive_shell_in_container\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1609-container-administration-command\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"wwc-6it-t7i\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ \\\"/etc/nsswitch.conf\\\" ]\\n || link.file.destination.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"nsswitch_conf_mod_link\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-0fx\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Shell process spawned from print server\",\"enabled\":true,\"expression\":\"exec.file.name != \\\"\\\" \\u0026\\u0026 process.parent.file.name == \\\"foomatic-rip\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"cups_spawned_shell\",\"product_tags\":[\"tactic:TA0001-initial-access\",\"technique:T1190-exploit-public-facing-application\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-r6p\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"correlation_key_file_path\",\"field\":\"unlink.file.path\",\"scope\":\"cgroup\"},\"disabled\":false}],\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A file was deleted shortly after it was executed\",\"enabled\":true,\"expression\":\"unlink.file.path in ${cgroup.chain_exec_unlink}\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"delete_new_process\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1070-indicator-removal\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-wv3\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"hash\":{},\"disabled\":false}],\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Redis module has been created\",\"enabled\":true,\"expression\":\"(open.flags \\u0026 (O_CREAT|O_TRUNC|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 open.file.path =~ \\\"/tmp/**\\\" \\u0026\\u0026 open.file.name in [~\\\"*.rdb\\\", ~\\\"*.aof\\\", ~\\\"*.so\\\"]) \\u0026\\u0026 process.file.name in [\\\"redis-check-rdb\\\", \\\"redis-server\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"redis_save_module\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1129-shared-modules\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-qn0\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsenter used to breakout of container\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"nsenter\\\" \\u0026\\u0026 exec.args_options in [\\\"target=1\\\", \\\"t=1\\\"] \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"nsenter_in_container\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"7q3-6aa-pix\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n chown.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (chown.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"ssh_authorized_keys_chown\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1098-account-manipulation\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"o5t-b08-86p\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ]\\n || rename.file.destination.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"ssl_certificate_tampering_rename\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1553-subvert-trust-controls\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-hc1\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"auid_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from auid\",\"enabled\":true,\"expression\":\"exec.auid \\u003e= 0 \\u0026\\u0026 exec.auid != AUDIT_AUID_UNSET \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_auid\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-d1i\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process memory was dumped using the minidump function from comsvcs.dll\",\"enabled\":true,\"expression\":\"exec.cmdline =~ \\\"*MiniDump*\\\" \\u0026\\u0026 exec.cmdline =~ \\\"*comsvcs*\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"minidump_usage\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"7zw-qbm-y6d\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] || open.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"systemd_modification_open\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1569-system-services\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-bnt\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"cgroup_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from cgroup\",\"enabled\":true,\"expression\":\"exec.cgroup.id != process.parent.cgroup.id \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_cgroup\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-t06\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"find command searching for sensitive files\",\"enabled\":true,\"expression\":\"exec.comm == \\\"find\\\" \\u0026\\u0026 exec.args in [~\\\"*credentials*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"find_credentials\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1552-unsecured-credentials\",\"subtechnique:T1552.001-credentials-in-files\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"lrg-avx-x1k\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A kernel module was loaded from memory\",\"enabled\":true,\"expression\":\"load_module.loaded_from_memory == true\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"kernel_module_load_from_memory\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-vqm\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A scheduled task was created\",\"enabled\":true,\"expression\":\"exec.cmdline in [~\\\"*at.exe\\\",~\\\"*schtasks*\\\"] \\u0026\\u0026 exec.cmdline =~ \\\"*create*\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"scheduled_task_creation\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1053-scheduled-task-or-job\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-oil\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The unshare utility was executed in a container\",\"enabled\":true,\"expression\":\"exec.comm == \\\"unshare\\\" \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"unshare_in_container\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"td2-31c-ln4\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"credential_modified_chown\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-m9i\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows environment variable registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\System\\\\CurrentControlSet\\\\Control\\\\Session Manager\\\\Environment*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"windows_system_enviroment_variable_registry_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-0en\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The debugfs was executed in a container\",\"enabled\":true,\"expression\":\"exec.comm == \\\"debugfs\\\" \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"debugfs_in_container\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1613-container-and-resource-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-x9u\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"interactive_shell_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from interactive shell\",\"enabled\":true,\"expression\":\"exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] \\u0026\\u0026 (process.tty_name != \\\"\\\" || exec.args_flags in [\\\"i\\\"]) \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\", ~\\\"service_*\\\", ~\\\"service_new_cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_interactive_shell\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"w0z-64n-bss\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A network utility was executed in a container\",\"enabled\":true,\"expression\":\"(exec.comm in [\\\"socat\\\", \\\"dig\\\", \\\"nslookup\\\", \\\"host\\\", ~\\\"netcat*\\\", ~\\\"nc*\\\", \\\"ncat\\\"] ||\\n exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"]) \\u0026\\u0026\\nprocess.container.id != \\\"\\\" \\u0026\\u0026 exec.args not in [ ~\\\"*localhost*\\\", ~\\\"*127.0.0.1*\\\", ~\\\"*motd.ubuntu.com*\\\" ]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"net_util_in_container\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1105-ingress-tool-transfer\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-969\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process arguments indicating possible netcat shell detected\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"netcat\\\", \\\"nc\\\", ~\\\"nc.*\\\", \\\"ncat\\\"] \\u0026\\u0026 ((exec.args_flags in [\\\"l\\\"] \\u0026\\u0026 exec.args_flags in [\\\"p\\\"]) || (exec.args_flags in [\\\"n\\\"] \\u0026\\u0026 exec.args_flags in [\\\"v\\\"]) || (exec.args in [~\\\"*/bin/bash*\\\", ~\\\"*/bin/sh*\\\"]))\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"netcat_shell\",\"product_tags\":[\"tactic:TA0001-initial-access\",\"technique:T1190-exploit-public-facing-application\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-49j\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A known kubernetes pentesting tool has been executed\",\"enabled\":true,\"expression\":\"(exec.file.name in [ ~\\\"python*\\\" ] \\u0026\\u0026 (\\\"KubiScan.py\\\" in exec.argv || \\\"kubestriker\\\" in exec.argv ) ) || exec.file.name in [ \\\"kubiscan\\\",\\\"kdigger\\\",\\\"kube-hunter\\\",\\\"rakkess\\\",\\\"peirates\\\",\\\"kubescape\\\",\\\"kubeaudit\\\",\\\"kube-linter\\\",\\\"stratus\\\",~\\\"botb-*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"offensive_k8s_tool\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1613-container-and-resource-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-o1o\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"hash\":{\"field\":\"process.file\"},\"disabled\":false}],\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process made a connection to a port associated with P2PInfect malware\",\"enabled\":true,\"expression\":\"(connect.addr.family == AF_INET || connect.addr.family == AF_INET6) \\u0026\\u0026 connect.addr.is_public == true \\u0026\\u0026 connect.addr.port \\u003e= 60100 \\u0026\\u0026 connect.addr.port \\u003c= 60150\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"p2pinfect_connection\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1071-application-layer-protocol\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"kyr-sg6-us9\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"ssl_certificate_tampering_chown\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1553-subvert-trust-controls\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-m7t\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The LD_AUDIT variable is populated by a link to a suspicious file directory\",\"enabled\":true,\"expression\":\"process.envs in [\\\"LD_AUDIT\\\"] \\u0026\\u0026 \\n(\\n mmap.file.path in [~\\\"/home/*\\\", ~\\\"/tmp/*\\\", ~\\\"/dev/shm/*\\\"] || \\n mmap.file.in_upper_layer == true\\n) \\u0026\\u0026\\nmmap.protection \\u0026 (PROT_EXEC) \\u003e 0 \",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ld_audit_unusual_library_path\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1574-hijack-execution-flow\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"v2b-cd3-clr\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid) \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"nsswitch_conf_mod_chown\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-e69\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A BPF filter was attached to a socket after a fake PID file was created\",\"enabled\":true,\"expression\":\"setsockopt.level == SOL_SOCKET \\u0026\\u0026 setsockopt.optname == SO_ATTACH_FILTER \\u0026\\u0026 ${process.pid_file} == true\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"bpfdoor_bpf_filter_creation\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1205-traffic-signaling\",\"subtechnique:T1205.002-socket-filters\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-x7z\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process executed with arguments common with Inveigh tool usage\",\"enabled\":true,\"expression\":\"exec.cmdline in [~\\\"*SpooferIP*\\\", ~\\\"*ReplyToIPs*\\\", ~\\\"*ReplyToDomains*\\\", ~\\\"*ReplyToMACs*\\\", ~\\\"*SnifferIP*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"inveigh_tool_usage\",\"product_tags\":[\"tactic:TA0009-collection\",\"technique:T1557-adversary-in-the-middle\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-lel\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Perl executed with suspicious argument\",\"enabled\":true,\"expression\":\"exec.file.name == ~\\\"perl*\\\" \\u0026\\u0026 exec.args_flags in [\\\"e\\\"] \\u0026\\u0026 (exec.args in [~\\\"*SOCK_STREAM*\\\", ~\\\"*sockaddr_in*\\\"])\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"perl_shell\",\"product_tags\":[\"tactic:TA0001-execution\",\"technique:T1059-command-and-scripting-interpreter\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-zo8\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Recently written or modified suid file has been executed\",\"enabled\":true,\"expression\":\"((process.file.mode \\u0026 S_ISUID \\u003e 0) \\u0026\\u0026 process.file.modification_time \\u003c 30s) \\u0026\\u0026 exec.file.name != \\\"\\\" \\u0026\\u0026 process.ancestors.file.path not in [\\\"/opt/datadog-agent/embedded/bin/agent\\\", \\\"/opt/datadog-agent/embedded/bin/system-probe\\\", \\\"/opt/datadog-agent/embedded/bin/security-agent\\\", \\\"/opt/datadog-agent/embedded/bin/process-agent\\\", \\\"/opt/datadog-agent/embedded/bin/trace-agent\\\", \\\"/opt/datadog-agent/bin/agent/agent\\\", \\\"/opt/datadog/apm/inject/auto_inject_runc\\\", \\\"/usr/bin/dd-host-install\\\", \\\"/usr/bin/dd-host-container-install\\\", \\\"/usr/bin/dd-container-install\\\", \\\"/opt/datadog-agent/bin/datadog-cluster-agent\\\", ~\\\"/opt/datadog-packages/**\\\", ~\\\"/opt/datadog-installer/**\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"suspicious_suid_execution\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1548-abuse-elevation-control-mechanism\",\"subtechnique:T1548.001-setuid-and-setgid\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"ro4-rju-1vq\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An GCP IMDS was called via a network utility\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026 exec.args in [~\\\"*metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token\\\", ~\\\"*169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"best-practice.policy\",\"threat-detection.policy\"],\"name\":\"gcp_imds\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1552-unsecured-credentials\",\"policy:best-practice\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-qf8\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"sharpup tool used for local privilege escalation\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"sharpup.exe\\\" \\u0026\\u0026 exec.cmdline in [~\\\"*HijackablePaths*\\\", ~\\\"*UnquotedServicePath*\\\", ~\\\"*ProcessDLLHijack*\\\", ~\\\"*ModifiableServiceBinaries*\\\", ~\\\"*ModifiableScheduledTask*\\\", ~\\\"*DomainGPPPassword*\\\", ~\\\"*CachedGPPPassword*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"sharpup_tool_usage\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1068-exploitation-for-privilege-escalation\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-eck\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Dll written to a suspicious directory\",\"enabled\":true,\"expression\":\"create.file.name =~ \\\"*.dll\\\" \\u0026\\u0026 create.file.device_path not in [~\\\"\\\\Device\\\\*\\\\Windows\\\\System32\\\\**\\\", ~\\\"\\\\Device\\\\*\\\\ProgramData\\\\docker\\\\**\\\"] \\u0026\\u0026 process.file.name != \\\"dockerd.exe\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"suspicious_dll_write\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1609-container-administration-command\",\"technique:T1610-deploy-container\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"9pu-mp3-xea\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ]\\n || rename.file.destination.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pci_11_5_critical_binaries_rename\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"9ym-18v-5zi\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ]\\n || link.file.destination.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pci_11_5_critical_binaries_link\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"647-nlb-uld\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A network utility (such as nmap) commonly used in intrusion attacks was executed\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"nmap\\\", \\\"masscan\\\", \\\"fping\\\", \\\"zmap\\\", \\\"zgrab\\\", \\\"zgrab2\\\", \\\"rustscan\\\", \\\"pnscan\\\"] \\u0026\\u0026 exec.args_flags not in [\\\"V\\\", \\\"version\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"common_net_intrusion_util\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1046-network-service-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-cyz\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A shell spawned from a git clone which could be exploitation of CVE-2025-48384\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"dash\\\",\\\"sh\\\",\\\"static-sh\\\",\\\"sh\\\",\\\"bash\\\",\\\"bash\\\",\\\"bash-static\\\",\\\"zsh\\\",\\\"ash\\\",\\\"csh\\\",\\\"ksh\\\",\\\"tcsh\\\",\\\"busybox\\\",\\\"busybox\\\",\\\"fish\\\",\\\"ksh93\\\",\\\"rksh\\\",\\\"rksh93\\\",\\\"lksh\\\",\\\"mksh\\\",\\\"mksh-static\\\",\\\"csharp\\\",\\\"posh\\\",\\\"rc\\\",\\\"sash\\\",\\\"yash\\\",\\\"zsh5\\\",\\\"zsh5-static\\\"] \\u0026\\u0026 process.ancestors[A].comm == \\\"git\\\" \\u0026\\u0026 process.ancestors[A].argv in [\\\"clone\\\"] \\u0026\\u0026 process.ancestors[A].args_flags in [\\\"recursive\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"git_cve_2025_48384\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1203-exploitation-for-client-execution\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-mfu\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A Jupyter notebook executed a shell\",\"enabled\":true,\"expression\":\"(exec.file.name in [\\\"cat\\\",\\\"chgrp\\\",\\\"chmod\\\",\\\"chown\\\",\\\"cp\\\",\\\"date\\\",\\\"dd\\\",\\\"df\\\",\\\"dir\\\",\\\"echo\\\",\\\"ln\\\",\\\"ls\\\",\\\"mkdir\\\",\\\"mknod\\\",\\\"mktemp\\\",\\\"mv\\\",\\\"pwd\\\",\\\"readlink\\\",\\\"rm\\\",\\\"rmdir\\\",\\\"sleep\\\",\\\"stty\\\",\\\"sync\\\",\\\"touch\\\",\\\"uname\\\",\\\"vdir\\\",\\\"arch\\\",\\\"b2sum\\\",\\\"base32\\\",\\\"base64\\\",\\\"basename\\\",\\\"chcon\\\",\\\"cksum\\\",\\\"comm\\\",\\\"csplit\\\",\\\"cut\\\",\\\"dircolors\\\",\\\"dirname\\\",\\\"du\\\",\\\"env\\\",\\\"expand\\\",\\\"expr\\\",\\\"factor\\\",\\\"fmt\\\",\\\"fold\\\",\\\"groups\\\",\\\"head\\\",\\\"hostid\\\",\\\"id\\\",\\\"install\\\",\\\"join\\\",\\\"link\\\",\\\"logname\\\",\\\"md5sum\\\",\\\"textutils\\\",\\\"mkfifo\\\",\\\"nice\\\",\\\"nl\\\",\\\"nohup\\\",\\\"nproc\\\",\\\"numfmt\\\",\\\"od\\\",\\\"paste\\\",\\\"pathchk\\\",\\\"pinky\\\",\\\"pr\\\",\\\"printenv\\\",\\\"printf\\\",\\\"ptx\\\",\\\"realpath\\\",\\\"runcon\\\",\\\"seq\\\",\\\"sha1sum\\\",\\\"sha224sum\\\",\\\"sha256sum\\\",\\\"sha384sum\\\",\\\"sha512sum\\\",\\\"shred\\\",\\\"shuf\\\",\\\"sort\\\",\\\"split\\\",\\\"stat\\\",\\\"stdbuf\\\",\\\"sum\\\",\\\"tac\\\",\\\"tail\\\",\\\"tee\\\",\\\"test\\\",\\\"timeout\\\",\\\"tr\\\",\\\"truncate\\\",\\\"tsort\\\",\\\"tty\\\",\\\"unexpand\\\",\\\"uniq\\\",\\\"unlink\\\",\\\"users\\\",\\\"wc\\\",\\\"who\\\",\\\"whoami\\\",\\\"chroot\\\"] || exec.file.name in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] || exec.file.name in [\\\"dash\\\",\\\"sh\\\",\\\"static-sh\\\",\\\"sh\\\",\\\"bash\\\",\\\"bash\\\",\\\"bash-static\\\",\\\"zsh\\\",\\\"ash\\\",\\\"csh\\\",\\\"ksh\\\",\\\"tcsh\\\",\\\"busybox\\\",\\\"busybox\\\",\\\"fish\\\",\\\"ksh93\\\",\\\"rksh\\\",\\\"rksh93\\\",\\\"lksh\\\",\\\"mksh\\\",\\\"mksh-static\\\",\\\"csharp\\\",\\\"posh\\\",\\\"rc\\\",\\\"sash\\\",\\\"yash\\\",\\\"zsh5\\\",\\\"zsh5-static\\\"]) \\u0026\\u0026 process.ancestors.comm in [\\\"jupyter-noteboo\\\", \\\"jupyter-lab\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"jupyter_shell_execution\",\"product_tags\":[\"tactic:TA0001-initial-access\",\"technique:T1190-exploit-public-facing-application\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-bv2\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process matches known relay attack tool\",\"enabled\":true,\"expression\":\"exec.file.name in [~\\\"*PetitPotam*\\\", ~\\\"*RottenPotato*\\\", ~\\\"*HotPotato*\\\", ~\\\"*JuicyPotato*\\\", ~\\\"*just_dce_*\\\", ~\\\"*Juicy Potato*\\\", \\\"rot.exe\\\", \\\"Potato.exe\\\", \\\"SpoolSample.exe\\\", \\\"Responder.exe\\\", ~\\\"*smbrelayx*\\\", ~\\\"*smbrelayx*\\\", ~\\\"*ntlmrelayx*\\\", ~\\\"*LocalPotato*\\\"] || exec.cmdline in [~\\\"*Invoke-Tater*\\\", ~\\\"*smbrelay*\\\", ~\\\"*ntlmrelay*\\\", ~\\\"*cme smb*\\\", ~\\\"*ntlm:NTLMhash*\\\", ~\\\"*Invoke-PetitPotam*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"relay_attack_tool_execution\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1555-credentials-from-password-stores\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-juz\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"ratelimit_priv_container\",\"field\":\"process.container.id\",\"scope\":\"container\",\"ttl\":10000000000},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A privileged container was created\",\"enabled\":true,\"expression\":\"exec.file.name != \\\"\\\" \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003c 1s \\u0026\\u0026 process.cap_permitted \\u0026 CAP_SYS_ADMIN \\u003e 0 \\u0026\\u0026 process.container.id != ${container.ratelimit_priv_container}\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"best-practice.policy\",\"threat-detection.policy\"],\"name\":\"deploy_priv_container\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:best-practice\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"e5h-onu-f7l\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 ((O_RDWR|O_WRONLY|O_CREAT)) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n) \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"nsswitch_conf_mod_open\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"dmf-a2c-odj\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A symbolic link for shell history was created targeting /dev/null\",\"enabled\":true,\"expression\":\"exec.comm == \\\"ln\\\" \\u0026\\u0026 exec.args in [~\\\"*.*history*\\\", \\\"/dev/null\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"shell_history_symlink\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1070-indicator-removal\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"191-ty1-ede\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"ssl_certificate_tampering_open\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1553-subvert-trust-controls\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-550\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"]\\n || rename.file.destination.path in [\\\"/etc/sudoers\\\",~\\\"/etc/sudoers.d/*\\\"])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"sudoers_policy_modified_rename\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1548-abuse-elevation-control-mechanism\",\"subtechnique:T1548.001-setuid-and-setgid\",\"subtechnique:T1548.003-sudo-and-sudo-caching\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"48s-46n-g4w\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"systemd_modification_chmod\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1569-system-services\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-xv7\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Kernel modules were listed using the kmod command\",\"enabled\":true,\"expression\":\"exec.comm == \\\"kmod\\\" \\u0026\\u0026 exec.args in [~\\\"*list*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"kmod_list\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1082-system-information-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-d4i\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"NTDS file referenced in commandline\",\"enabled\":true,\"expression\":\"exec.cmdline =~ \\\"*ntds.dit*\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ntds_in_commandline\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"dfr-by9-sx8\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Shell History was Deleted\",\"enabled\":true,\"expression\":\"unlink.file.name in [\\\".bash_history\\\", \\\".zsh_history\\\", \\\".fish_history\\\", \\\"fish_history\\\", \\\".dash_history\\\", \\\".sh_history\\\"] \\u0026\\u0026 unlink.file.path in [~\\\"/root/**\\\", ~\\\"/home/**\\\"] \\u0026\\u0026 process.comm not in [\\\"dockerd\\\", \\\"containerd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"shell_history_deleted\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1070-indicator-removal\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-5ew\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container management utility listed images\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"docker\\\", \\\"kubectl\\\", \\\"ctr\\\"] \\u0026\\u0026 exec.args in [\\\"image list\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"enum_images\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1613-container-and-resource-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-nv0\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The rclone utility was executed\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"rclone\\\", \\\"rsync\\\", \\\"sftp\\\", \\\"ftp\\\", \\\"scp\\\", \\\"dcp\\\", \\\"rcp\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"file_sync_exfil\",\"product_tags\":[\"tactic:TA0010-exfiltration\",\"technique:T1048-exfiltration-over-alternative-protocol\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"dkb-9ud-0ca\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container loaded a new kernel module\",\"enabled\":true,\"expression\":\"load_module.name != \\\"\\\" \\u0026\\u0026 process.container.id !=\\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"kernel_module_load_container\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-gqa\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows boot registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\IniFileMapping\\\\SYSTEM.ini\\\\boot*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"windows_boot_registry_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1112-modify-registry\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"htc-275-0wt\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n chmod.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (chmod.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"ssh_authorized_keys_chmod\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1098-account-manipulation\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-h1x\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container management socket was referenced in a cURL command\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"curl\\\" \\u0026\\u0026 exec.args_flags in [\\\"unix-socket\\\"] \\u0026\\u0026 exec.args in [~\\\"*docker.sock*\\\", ~\\\"*dockershim.sock*\\\", ~\\\"*containerd.sock*\\\", ~\\\"*crio.sock*\\\", ~\\\"*frakti.sock*\\\", ~\\\"*rktlet.sock*\\\"] \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"curl_mgmt_socket\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1613-container-and-resource-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-ipl\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process checked the public IP address of the host\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [\\\"icanhazip.com\\\", \\\"ip-api.com\\\", \\\"myip.opendns.com\\\", \\\"checkip.amazonaws.com\\\", \\\"whatismyip.akamai.com\\\"] \\u0026\\u0026 connect.addr.is_public == true \\u0026\\u0026 connect.addr.port in [80, 443]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ip_lookup_domain\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1016-system-network-configuration-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-wqf\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows update registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Policies\\\\Microsoft\\\\WindowsUpdate*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"windows_update_registry_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1112-modify-registry\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"smg-le8-msf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"hash\":{},\"disabled\":false}],\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A compiler wrote a suspicious file in a container\",\"enabled\":true,\"expression\":\"open.flags \\u0026 O_CREAT \\u003e 0\\n\\u0026\\u0026 (\\n (open.file.path =~ \\\"/tmp/**\\\" \\u0026\\u0026 open.file.name in [~\\\"*.ko\\\", ~\\\".*\\\"])\\n || open.file.path in [~\\\"/var/tmp/**\\\", ~\\\"/root/**\\\", ~\\\"*/bin/*\\\", ~\\\"/usr/local/lib/**\\\"]\\n)\\n\\u0026\\u0026 (process.comm in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || process.ancestors.comm in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || process.file.name in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || process.ancestors.file.name in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"])\\n\\u0026\\u0026 process.file.name not in [\\\"pip\\\", ~\\\"python*\\\"]\\n\\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"compile_after_delivery\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"tactic:TA0005-defense-evasion\",\"technique:T1027-obfuscated-files-or-information\",\"technique:T1574-hijack-execution-flow\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-4xu\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Kernel modules were listed using the lsmod command\",\"enabled\":true,\"expression\":\"exec.comm == \\\"lsmod\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"exec_lsmod\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1082-system-information-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-88h\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Egress traffic allowed using iptables\",\"enabled\":true,\"expression\":\"exec.comm == \\\"iptables\\\" \\u0026\\u0026 process.args in [r\\\"OUTPUT.*((25[0-5]|(2[0-4]|1\\\\d|[1-9]|)\\\\d)\\\\.?\\\\b){4}.*ACCEPT\\\"] \\u0026\\u0026 process.args not in [r\\\"(127\\\\.)|(10\\\\.)|(172\\\\.1[6-9]\\\\.)|(172\\\\.2[0-9]\\\\.)|(^172\\\\.3[0-1]\\\\.)|(192\\\\.168\\\\.)|(169\\\\.254\\\\.)\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"iptables_egress_allowed\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1562-impair-defenses\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-psd\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process connected to a paste site\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [\\\"pastebin.com\\\", \\\"ghostbin.com\\\", \\\"termbin.com\\\", \\\"klgrth.io\\\", \\\"rentry.co\\\", \\\"transfer.sh\\\"] \\u0026\\u0026 connect.addr.is_public == true \\u0026\\u0026 connect.addr.port in [80, 443]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"paste_site_domain\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1105-ingress-tool-transfer\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-lc2\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Remote access was created using a terminal-sharing service\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [\\\"ssh.tmate.io\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"tmate_usage\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1219-remote-access-tools\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-j1p\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows Known DLLs location registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\Session Manager\\\\KnownDLLs*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"known_dll_registry_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1574-hijack-execution-flow\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-u1r\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process deleted common system log files\",\"enabled\":true,\"expression\":\"unlink.file.path in [\\\"/var/run/utmp\\\", \\\"/var/log/wtmp\\\", \\\"/var/log/btmp\\\", \\\"/var/log/lastlog\\\", \\\"/var/log/faillog\\\", \\\"/var/log/syslog\\\", \\\"/var/log/messages\\\", \\\"/var/log/secure\\\", \\\"/var/log/auth.log\\\", \\\"/var/log/boot.log\\\", \\\"/var/log/kern.log\\\"] \\u0026\\u0026 process.comm not in [\\\"dockerd\\\", \\\"containerd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"delete_system_log\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1070-indicator-removal\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-oy4\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A tool used to dump process memory has been executed\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"procmon.exe\\\",\\\"procdump.exe\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"procdump_execution\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-jm5\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"core_pattern_write_container_id\",\"field\":\"process.container.id\",\"scope\":\"container\",\"ttl\":1800000000000},\"disabled\":false}],\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Detect any attempt to modify /proc/sys/kernel/core_pattern from a container, which might result to escape to host when a core dump is triggered.\",\"enabled\":true,\"expression\":\"open.file.name == \\\"core_pattern\\\" \\u0026\\u0026\\nopen.file.filesystem == \\\"proc\\\" \\u0026\\u0026\\nopen.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 \\nprocess.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"core_pattern_write\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"2s5-ipa-ooo\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process wrote to a dynamic linker config file\",\"enabled\":true,\"expression\":\"open.file.path in [\\\"/etc/ld.so.preload\\\", \\\"/etc/ld.so.conf\\\", ~\\\"/etc/ld.so.conf.d/*.conf\\\"] \\u0026\\u0026 open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"] \\u0026\\u0026 process.ancestors.file.path not in [\\\"/opt/datadog-agent/embedded/bin/agent\\\", \\\"/opt/datadog-agent/embedded/bin/system-probe\\\", \\\"/opt/datadog-agent/embedded/bin/security-agent\\\", \\\"/opt/datadog-agent/embedded/bin/process-agent\\\", \\\"/opt/datadog-agent/embedded/bin/trace-agent\\\", \\\"/opt/datadog-agent/bin/agent/agent\\\", \\\"/opt/datadog/apm/inject/auto_inject_runc\\\", \\\"/usr/bin/dd-host-install\\\", \\\"/usr/bin/dd-host-container-install\\\", \\\"/usr/bin/dd-container-install\\\", \\\"/opt/datadog-agent/bin/datadog-cluster-agent\\\", ~\\\"/opt/datadog-packages/**\\\", ~\\\"/opt/datadog-installer/**\\\"] \\u0026\\u0026 process.argv0 not in [\\\"runc\\\", \\\"/usr/bin/runc\\\", \\\"/usr/sbin/runc\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"dynamic_linker_config_write\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1574-hijack-execution-flow\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-h19\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The container breakout CVE-2024-21626 was successful\",\"enabled\":true,\"expression\":\"chdir.syscall.path =~ \\\"/proc/self/fd/*\\\" \\u0026\\u0026 chdir.file.path == \\\"/sys/fs/cgroup\\\" \\u0026\\u0026 process.file.name =~ \\\"runc.*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"runc_leaky_fd\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"afj-5sv-2wb\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container management utility was executed in a container\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"docker\\\", \\\"kubectl\\\", \\\"ctr\\\"] \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"suspicious_container_client\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1609-container-administration-command\",\"technique:T1610-deploy-container\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"94l-lhd-e33\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"kernel_module_chown\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-mxb\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The host file system was mounted in a container\",\"enabled\":true,\"expression\":\"mount.source.path == \\\"/\\\" \\u0026\\u0026 mount.fs_type != \\\"overlay\\\" \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"mount_host_fs\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-mr5\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process hidden using mount\",\"enabled\":true,\"expression\":\"mount.mountpoint.path in [~\\\"/proc/1*\\\", ~\\\"/proc/2*\\\", ~\\\"/proc/3*\\\", ~\\\"/proc/4*\\\", ~\\\"/proc/5*\\\", ~\\\"/proc/6*\\\", ~\\\"/proc/7*\\\", ~\\\"/proc/8*\\\", ~\\\"/proc/9*\\\"] \\u0026\\u0026 process.argv0 not in [\\\"runc\\\", ~\\\"/*/runc\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"mount_proc_hide\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1564-hide-artifacts\",\"subtechnique:T1564.003-bind-mounts\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"kpm-7kh-xz5\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process attempted to inject code into another process\",\"enabled\":true,\"expression\":\"ptrace.request == PTRACE_POKETEXT || ptrace.request == PTRACE_POKEDATA || ptrace.request == PTRACE_POKEUSR\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ptrace_injection\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1055-process-injection\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-a65\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Network Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Web application requested IMDSv1 credentials\",\"enabled\":true,\"expression\":\"imds.aws.is_imds_v2 == false \\u0026\\u0026 imds.url =~ \\\"*/*/meta-data/iam/security-credentials/*\\\" \\u0026\\u0026 (process.ancestors.file.name in [\\\"apache2\\\", \\\"nginx\\\", ~\\\"tomcat*\\\", \\\"httpd\\\"] || process.ancestors.file.name =~ \\\"php*\\\" || process.ancestors.file.name == \\\"java\\\")\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"webapp_imds_V1_request\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1531-account-access-removal\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"rpc-ji0-zfu\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n open.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (open.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"ssh_authorized_keys_open\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1098-account-manipulation\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"y5i-yxn-27t\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 chmod.file.mode != chmod.file.destination.mode\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"ssl_certificate_tampering_chmod\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1553-subvert-trust-controls\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-rb4\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"GitHub API was contacted\",\"enabled\":true,\"expression\":\"connect.addr.hostname =~ \\\"api.github.com\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"github_api_contacted\",\"product_tags\":[\"tactic:TA0008-lateral-movement\",\"technique:T1021-remote-services\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-qwm\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The kubeconfig file was accessed\",\"enabled\":true,\"expression\":\"open.file.path in [~\\\"/home/*/.kube/config\\\", \\\"/root/.kube/config\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"read_kubeconfig\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1613-container-and-resource-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"wri-hx3-4n3\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ]\\n || rename.file.destination.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pam_modification_rename\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-mmo\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n(open.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])) \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"sudoers_policy_modified_open\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1548-abuse-elevation-control-mechanism\",\"subtechnique:T1548.001-setuid-and-setgid\",\"subtechnique:T1548.003-sudo-and-sudo-caching\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-wnn\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows firewall configuration registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Services\\\\SharedAccess\\\\Parameters\\\\FirewallPolicy\\\\*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"windows_firewall_configuration_registry_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1112-modify-registry\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-fsu\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process is masquerading as a kernel thread by using bracket notation in its name\",\"enabled\":true,\"expression\":\"(exec.comm in [r\\\"^\\\\[.*\\\\]$\\\"] || exec.argv0 in [r\\\"^\\\\[.*\\\\]$\\\"]) \\u0026\\u0026 (process.parent.ppid !=2 || process.args != \\\"\\\")\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"kernel_process_masquerade\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-925\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A shell with a TTY was executed in a container\",\"enabled\":true,\"expression\":\"exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] \\u0026\\u0026 process.tty_name != \\\"\\\" \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"tty_shell_in_container\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1609-container-administration-command\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-6jw\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process environment variables match cryptocurrency miner\",\"enabled\":true,\"expression\":\"exec.envs in [\\\"POOL_USER\\\", \\\"POOL_URL\\\", \\\"POOL_PASS\\\", \\\"DONATE_LEVEL\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"cryptominer_envs\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1496-resource-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"2rq-drz-11u\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process unlinked a dynamic linker config file\",\"enabled\":true,\"expression\":\"unlink.file.path in [\\\"/etc/ld.so.preload\\\", \\\"/etc/ld.so.conf\\\", ~\\\"/etc/ld.so.conf.d/*.conf\\\"] \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"dynamic_linker_config_unlink\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1574-hijack-execution-flow\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-b7s\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Network Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Kubernetes DNS enumeration\",\"enabled\":true,\"expression\":\"dns.question.name == \\\"any.any.svc.cluster.local\\\" \\u0026\\u0026 dns.question.type == SRV \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"kubernetes_dns_enumeration\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1046-network-service-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"c2g-31u-jpk\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An Azure IMDS was called via a network utility\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026 exec.args in [~\\\"*169.254.169.254/metadata/identity/oauth2/token?api-version=*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"best-practice.policy\",\"threat-detection.policy\"],\"name\":\"azure_imds\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1552-unsecured-credentials\",\"policy:best-practice\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-i9x\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 ((O_RDWR|O_WRONLY|O_CREAT)) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n) \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003e 90s \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"nsswitch_conf_mod_open_v2\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"34t-hic-8cn\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\"])\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pam_modification_chmod\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-vmo\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process was executed in an SSH session\",\"enabled\":true,\"expression\":\"exec.comm != \\\"\\\" \\u0026\\u0026 process.ancestors.file.name in [\\\"sshd\\\"] \\u0026\\u0026 process.file.name != \\\"sshd\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"ssh_session\",\"product_tags\":[\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"mq1-y7n-kf2\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A database application spawned a shell, shell utility, or HTTP utility\",\"enabled\":true,\"expression\":\"(exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] ||\\n exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] ||\\n exec.file.path in [\\\"/bin/cat\\\",\\\"/bin/chgrp\\\",\\\"/bin/chmod\\\",\\\"/bin/chown\\\",\\\"/bin/cp\\\",\\\"/bin/date\\\",\\\"/bin/dd\\\",\\\"/bin/df\\\",\\\"/bin/dir\\\",\\\"/bin/echo\\\",\\\"/bin/ln\\\",\\\"/bin/ls\\\",\\\"/bin/mkdir\\\",\\\"/bin/mknod\\\",\\\"/bin/mktemp\\\",\\\"/bin/mv\\\",\\\"/bin/pwd\\\",\\\"/bin/readlink\\\",\\\"/bin/rm\\\",\\\"/bin/rmdir\\\",\\\"/bin/sleep\\\",\\\"/bin/stty\\\",\\\"/bin/sync\\\",\\\"/bin/touch\\\",\\\"/bin/uname\\\",\\\"/bin/vdir\\\",\\\"/usr/bin/arch\\\",\\\"/usr/bin/b2sum\\\",\\\"/usr/bin/base32\\\",\\\"/usr/bin/base64\\\",\\\"/usr/bin/basename\\\",\\\"/usr/bin/chcon\\\",\\\"/usr/bin/cksum\\\",\\\"/usr/bin/comm\\\",\\\"/usr/bin/csplit\\\",\\\"/usr/bin/cut\\\",\\\"/usr/bin/dircolors\\\",\\\"/usr/bin/dirname\\\",\\\"/usr/bin/du\\\",\\\"/usr/bin/env\\\",\\\"/usr/bin/expand\\\",\\\"/usr/bin/expr\\\",\\\"/usr/bin/factor\\\",\\\"/usr/bin/fmt\\\",\\\"/usr/bin/fold\\\",\\\"/usr/bin/groups\\\",\\\"/usr/bin/head\\\",\\\"/usr/bin/hostid\\\",\\\"/usr/bin/id\\\",\\\"/usr/bin/install\\\",\\\"/usr/bin/join\\\",\\\"/usr/bin/link\\\",\\\"/usr/bin/logname\\\",\\\"/usr/bin/md5sum\\\",\\\"/usr/bin/md5sum.textutils\\\",\\\"/usr/bin/mkfifo\\\",\\\"/usr/bin/nice\\\",\\\"/usr/bin/nl\\\",\\\"/usr/bin/nohup\\\",\\\"/usr/bin/nproc\\\",\\\"/usr/bin/numfmt\\\",\\\"/usr/bin/od\\\",\\\"/usr/bin/paste\\\",\\\"/usr/bin/pathchk\\\",\\\"/usr/bin/pinky\\\",\\\"/usr/bin/pr\\\",\\\"/usr/bin/printenv\\\",\\\"/usr/bin/printf\\\",\\\"/usr/bin/ptx\\\",\\\"/usr/bin/realpath\\\",\\\"/usr/bin/runcon\\\",\\\"/usr/bin/seq\\\",\\\"/usr/bin/sha1sum\\\",\\\"/usr/bin/sha224sum\\\",\\\"/usr/bin/sha256sum\\\",\\\"/usr/bin/sha384sum\\\",\\\"/usr/bin/sha512sum\\\",\\\"/usr/bin/shred\\\",\\\"/usr/bin/shuf\\\",\\\"/usr/bin/sort\\\",\\\"/usr/bin/split\\\",\\\"/usr/bin/stat\\\",\\\"/usr/bin/stdbuf\\\",\\\"/usr/bin/sum\\\",\\\"/usr/bin/tac\\\",\\\"/usr/bin/tail\\\",\\\"/usr/bin/tee\\\",\\\"/usr/bin/test\\\",\\\"/usr/bin/timeout\\\",\\\"/usr/bin/tr\\\",\\\"/usr/bin/truncate\\\",\\\"/usr/bin/tsort\\\",\\\"/usr/bin/tty\\\",\\\"/usr/bin/unexpand\\\",\\\"/usr/bin/uniq\\\",\\\"/usr/bin/unlink\\\",\\\"/usr/bin/users\\\",\\\"/usr/bin/wc\\\",\\\"/usr/bin/who\\\",\\\"/usr/bin/whoami\\\",\\\"/usr/sbin/chroot\\\",\\\"/bin/busybox\\\"]) \\u0026\\u0026\\nprocess.parent.file.name in [\\\"mysqld\\\", \\\"mongod\\\", \\\"postgres\\\"] \\u0026\\u0026\\n!(process.parent.file.name == \\\"initdb\\\" \\u0026\\u0026\\nexec.args == \\\"-c locale -a\\\") \\u0026\\u0026\\n!(process.parent.file.name == \\\"postgres\\\" \\u0026\\u0026\\nexec.args == ~\\\"*pg_wal*\\\")\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"database_shell_execution\",\"product_tags\":[\"tactic:TA0001-initial-access\",\"technique:T1190-exploit-public-facing-application\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-tp8\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process opened a model-specific register (MSR) configuration file\",\"enabled\":true,\"expression\":\"open.file.path == \\\"/sys/module/msr/parameters/allow_writes\\\" \\u0026\\u0026 open.flags \\u0026 O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY \\u003e 0\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"open_msr_writes\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1496-resource-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-j45\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process is tracing privileged processes or sshd for possible credential dumping\",\"enabled\":true,\"expression\":\"(ptrace.request == PTRACE_PEEKTEXT || ptrace.request == PTRACE_PEEKDATA || ptrace.request == PTRACE_PEEKUSR) \\u0026\\u0026 ptrace.tracee.euid == 0 \\u0026\\u0026 process.comm not in [\\\"dlv\\\", \\\"dlv-linux-amd64\\\", \\\"strace\\\", \\\"gdb\\\", \\\"lldb-server\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"sensitive_tracing\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1055-process-injection\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-rcs\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A Trufflehog process was executed\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"trufflehog\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"trufflehog_executed\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1552-unsecured-credentials\",\"subtechnique:T1552.001-credentials-in-files\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-beh\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Dotnet_dump was used to dump a process memory\",\"enabled\":true,\"expression\":\"exec.cmdline =~ \\\"*dotnet-dump*\\\" \\u0026\\u0026 exec.cmdline =~ \\\"*collect*\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"dotnet_dump_execution\",\"product_tags\":[\"tactic:TA0009-collection\",\"technique:T1005-data-from-local-system\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-2wg\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"find command searching for container management socket\",\"enabled\":true,\"expression\":\"exec.comm == \\\"find\\\" \\u0026\\u0026 exec.args in [~\\\"*.sock*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"find_mgmt_socket\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1613-container-and-resource-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-j1b\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Looney Tunables (CVE-2023-4911) exploit attempted\",\"enabled\":true,\"expression\":\"exec.file.mode \\u0026 S_ISUID \\u003e 0 \\u0026\\u0026 exec.file.uid == 0 \\u0026\\u0026 exec.uid != 0 \\u0026\\u0026 exec.envs in [~\\\"*GLIBC_TUNABLES*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"looney_tunables_exploit\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1068-exploitation-for-privilege-escalation\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"caz-yrk-14e\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Network Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process resolved a DNS name associated with cryptomining activity\",\"enabled\":true,\"expression\":\"dns.question.name in [~\\\"*.minexmr.com\\\", \\\"minexmr.com\\\", ~\\\"*.nanopool.org\\\", \\\"nanopool.org\\\", ~\\\"*.supportxmr.com\\\", \\\"supportxmr.com\\\", ~\\\"*.c3pool.com\\\", \\\"c3pool.com\\\", ~\\\"*.p2pool.io\\\", \\\"p2pool.io\\\", ~\\\"*.ethermine.org\\\", \\\"ethermine.org\\\", ~\\\"*.f2pool.com\\\", \\\"f2pool.com\\\", ~\\\"*.poolin.me\\\", \\\"poolin.me\\\", ~\\\"*.rplant.xyz\\\", \\\"rplant.xyz\\\", ~\\\"*.miningocean.org\\\", \\\"miningocean.org\\\", \\\"donate.v2.xmrig.com\\\"] \\u0026\\u0026 process.file.name != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"mining_pool_lookup\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1496-resource-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"7y2-ihu-hm2\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A network utility was executed\",\"enabled\":true,\"expression\":\"(exec.comm in [\\\"socat\\\", \\\"dig\\\", \\\"nslookup\\\", \\\"host\\\", ~\\\"netcat*\\\", ~\\\"nc*\\\", \\\"ncat\\\"] ||\\n exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"]) \\u0026\\u0026\\nprocess.container.id == \\\"\\\" \\u0026\\u0026 exec.args not in [ ~\\\"*localhost*\\\", ~\\\"*127.0.0.1*\\\", ~\\\"*motd.ubuntu.com*\\\" ]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"net_util\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1105-ingress-tool-transfer\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-jl7\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"openssl used to establish backdoor\",\"enabled\":true,\"expression\":\"exec.comm == \\\"openssl\\\" \\u0026\\u0026 exec.args =~ \\\"*s_client*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"openssl_backdoor\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1059-command-and-scripting-interpreter\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-do7\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Possible ransomware note created under common user directories\",\"enabled\":true,\"expression\":\"open.flags \\u0026 O_CREAT \\u003e 0\\n\\u0026\\u0026 open.file.path in [~\\\"/home/**\\\", ~\\\"/root/**\\\", ~\\\"/bin/**\\\", ~\\\"/usr/bin/**\\\", ~\\\"/opt/**\\\", ~\\\"/etc/**\\\", ~\\\"/var/log/**\\\", ~\\\"/var/lib/log/**\\\", ~\\\"/var/backup/**\\\", ~\\\"/var/www/**\\\"]\\n\\u0026\\u0026 (open.file.name in [r\\\"(?i)(restore|recover|instruction|help|how_to|how\\\\ to|ransom).*(your_|recover|crypt|lock|ransom|instruction|files)\\\"] || open.file.name in [r\\\"RECOVER.*\\\\.txt\\\"]) \\u0026\\u0026 open.file.name not in [r\\\"\\\\.lock$\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ransomware_note\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1490-inhibit-system-recovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-s1m\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new static pod manifest was created in the Kubernetes manifests directory\",\"enabled\":true,\"expression\":\"open.flags \\u0026 O_CREAT \\u003e 0\\n\\u0026\\u0026 open.file.path in [~\\\"/etc/kubernetes/manifests/*\\\"]\\n\\u0026\\u0026 open.file.extension in [\\\".yaml\\\", \\\".yml\\\"]\\n\\u0026\\u0026 process.file.path not in [\\\"/usr/bin/kubelet\\\", \\\"/usr/local/bin/kubelet\\\", \\\"/opt/bin/kubelet\\\", \\\"/usr/bin/kubeadm\\\", \\\"/usr/local/bin/kubeadm\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"static_pod_manifest_created\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1053-scheduled-task-or-job\",\"technique:T1543-create-or-modify-system-process\",\"subtechnique:T1543.005-container-service\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"ssp-47a-p20\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pci_11_5_critical_binaries_unlink\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-18q\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Tar archive created\",\"enabled\":true,\"expression\":\"exec.file.path == \\\"/usr/bin/tar\\\" \\u0026\\u0026 exec.args_flags in [\\\"create\\\",\\\"c\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"tar_execution\",\"product_tags\":[\"tactic:TA0009-collection\",\"technique:T1560-archive-collected-data\",\"subtechnique:T1560.001-archive-via-utility\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"07y-k18-cih\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A user was created via an interactive session\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"useradd\\\", \\\"newusers\\\", \\\"adduser\\\"] \\u0026\\u0026 exec.tty_name !=\\\"\\\" \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 exec.args_flags not in [\\\"D\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"user_created_tty\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1136-create-account\",\"subtechnique:T1136.001-local-account\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-fsq\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A cryptominer was potentially executed\",\"enabled\":true,\"expression\":\"exec.cmdline in [~\\\"*cpu-priority*\\\", ~\\\"*donate-level*\\\", ~\\\"*randomx-1gb-pages*\\\", ~\\\"*stratum+tcp*\\\", ~\\\"*stratum+ssl*\\\", ~\\\"*stratum1+tcp*\\\", ~\\\"*stratum1+ssl*\\\", ~\\\"*stratum2+tcp*\\\", ~\\\"*stratum2+ssl*\\\", ~\\\"*nicehash*\\\", ~\\\"*yespower*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"windows_cryptominer_process\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1496-resource-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-vjv\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Command executed via WMI\",\"enabled\":true,\"expression\":\"exec.file.name in [~\\\"powershell*\\\",\\\"cmd.exe\\\"] \\u0026\\u0026 process.parent.file.name == \\\"WmiPrvSE.exe\\\"\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"wmi_spawning_shell\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1047-windows-management-instrumentation\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"w6f-wte-i63\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ]\\n || link.file.destination.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"ssl_certificate_tampering_link\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1553-subvert-trust-controls\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"j8a-wic-bvi\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The LD_PRELOAD variable is populated by a link to a suspicious file directory\",\"enabled\":true,\"expression\":\"exec.envs in [~\\\"LD_PRELOAD=*/tmp/*\\\", ~\\\"LD_PRELOAD=/dev/shm/*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ld_preload_unusual_library_path\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1574-hijack-execution-flow\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-6x2\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Service registry runkey modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunServicesOnce\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\CurrentVersion\\\\RunServices\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"registry_service_runkey_modified\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-jba\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A rogue SSM agent was registered\",\"enabled\":true,\"expression\":\"exec.file.name =~ \\\"*ssm-agent\\\" \\u0026\\u0026 exec.args_flags == \\\"register\\\" \\u0026\\u0026 exec.args_options =~ \\\"code*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"rogue_ssm_agent_registration\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1219-remote-access-tools\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-vez\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows winlogon registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Winlogon*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"winlogon_registry_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1112-modify-registry\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"ucb-5zb-rmj\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ]\\n || link.file.destination.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"kernel_module_link\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-4vf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"pid_file\",\"value\":true,\"scope\":\"process\",\"ttl\":10000000000},\"disabled\":false}],\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A PID file was created in /var/run, indicating a BPFDoor malware infection.\",\"enabled\":true,\"expression\":\"open.file.path in [\\\"/var/run/haldrund.pid\\\", \\\"/var/run/hald-smartd.pid\\\", \\\"/var/run/system.pid\\\", \\\"/var/run/hp-health.pid\\\", \\\"/var/run/hald-addon.pid\\\", \\\"/run/haldrund.pid\\\", \\\"/run/hald-smartd.pid\\\", \\\"/run/system.pid\\\", \\\"/run/hp-health.pid\\\", \\\"/run/hald-addon.pid\\\"] \\u0026\\u0026 open.flags \\u0026 O_CREAT != 0\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"bpfdoor_pid_file_creation\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1480-execution-guardrails\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-oag\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"systemd spawned shell\",\"enabled\":true,\"expression\":\"exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] \\u0026\\u0026 process.ancestors.file.path == \\\"/usr/lib/systemd/systemd-executor\\\" \\u0026\\u0026 process.parent.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"systemd_spawned_shell\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1053-scheduled-task\",\"subtechnique:T1053.006-systemd-timers\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-krr\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process removed itself from the filesystem\",\"enabled\":true,\"expression\":\"unlink.file.path == process.file.path\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"unlink_self\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1070-indicator-removal\",\"subtechnique:T1070.001-file-deletion\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"lli-czr-q4y\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sensitive credential files were modified using a non-standard tool\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ]\\n || link.file.destination.path in [ \\\"/etc/shadow\\\", \\\"/etc/gshadow\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/sbin/vipw\\\", \\\"/usr/sbin/vipw\\\", \\\"/sbin/vigr\\\", \\\"/usr/sbin/vigr\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/local/bin/dockerd\\\", \\\"/usr/sbin/groupadd\\\", \\\"/usr/sbin/useradd\\\", \\\"/usr/sbin/usermod\\\", \\\"/usr/sbin/userdel\\\", \\\"/usr/bin/gpasswd\\\", \\\"/usr/bin/chage\\\", \\\"/usr/sbin/chpasswd\\\", \\\"/usr/bin/passwd\\\" ]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"credential_modified_link\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-a41\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The base64 command was used to decode information\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"base64\\\" \\u0026\\u0026 exec.args_flags in [\\\"d\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"base64_decode\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1140-deobfuscate-or-decode-files-or-information\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-9zu\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"spawned_shell_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from spawned shell\",\"enabled\":true,\"expression\":\"exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] \\u0026\\u0026 (process.parent.file.name in [\\\"apache2\\\", \\\"nginx\\\", ~\\\"tomcat*\\\", \\\"httpd\\\"] || process.parent.file.name =~ \\\"php*\\\" || process.parent.file.name in [\\\"mysqld\\\", \\\"mongod\\\", \\\"postgres\\\"] || process.parent.file.name in [\\\"java\\\", \\\"jspawnhelper\\\"]) \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\", ~\\\"service_*\\\", ~\\\"service_new_cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_spawned_shell\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-b5z\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"process arguments match rubeus credential theft tool\",\"enabled\":true,\"expression\":\"exec.cmdline in [~\\\"*asreproast*\\\", ~\\\"*/service:krbtgt*\\\", ~\\\"*dump /luid:0x*\\\", ~\\\"*kerberoast*\\\", ~\\\"*createonly /program*\\\", ~\\\"*ptt /ticket*\\\", ~\\\"*impersonateuser*\\\", ~\\\"*renew /ticket*\\\", ~\\\"*asktgt /user*\\\", ~\\\"*harvest /interval*\\\", ~\\\"*s4u /user*\\\", ~\\\"*hash /password*\\\", ~\\\"*golden /aes256*\\\", ~\\\"*silver /user*\\\", \\\"*rubeus*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"rubeus_execution\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1558-steal-or-forge-kerberos-tickets\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"w7o-w48-j34\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pam_modification_open\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"422-svi-03v\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Potential Dirty pipe exploitation\",\"enabled\":true,\"expression\":\"(splice.pipe_exit_flag \\u0026 PIPE_BUF_FLAG_CAN_MERGE) \\u003e 0 \\u0026\\u0026 (process.uid != 0 \\u0026\\u0026 process.gid != 0)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"dirty_pipe_exploitation\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1068-exploitation-for-privilege-escalation\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-xg6\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"a critical windows file was modified\",\"enabled\":true,\"expression\":\"write.file.device_path in [~\\\"\\\\Device\\\\*\\\\windows\\\\system32\\\\**\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"critical_windows_files_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-a0x\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"k8s_session_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from k8s user session\",\"enabled\":true,\"expression\":\"exec.user_session.k8s_username != \\\"\\\" \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\", ~\\\"auid_*\\\", ~\\\"service_*\\\", ~\\\"service_new_cgroup_*\\\", ~\\\"interactive_shell_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_k8s_usersession_entrypoint\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-qnj\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process made an outbound IRC connection\",\"enabled\":true,\"expression\":\"connect.addr.port == 6667 \\u0026\\u0026 connect.addr.is_public == true\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"irc_connection\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1071-application-layer-protocol\",\"subtechnique:T1071.001-web-protocols\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-ibc\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The mount utility was executed in a container\",\"enabled\":true,\"expression\":\"exec.comm == \\\"mount\\\" \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"mount_in_container\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-ngk\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process established a connection to ngrok\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [~\\\"tunnel.*.ngrok.com\\\"] \\u0026\\u0026 connect.addr.is_public == true \\u0026\\u0026 connect.addr.port in [80, 443]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ngrok_domain\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1102-web-service\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"l2e-aka-bw6\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The passwd or chpasswd utility was used to modify an account password\",\"enabled\":true,\"expression\":\"exec.file.path in [\\\"/usr/bin/passwd\\\", \\\"/usr/sbin/chpasswd\\\"] \\u0026\\u0026 exec.args_flags not in [\\\"S\\\", \\\"status\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"passwd_execution\",\"product_tags\":[\"tactic:TA0003-persistence\",\"tactic:TA0040-impact\",\"technique:T1098-account-manipulation\",\"technique:T1531-account-access-removal\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-8j2\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A web application spawned a shell or shell utility\",\"enabled\":true,\"expression\":\"(exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] || exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] || exec.file.path in [\\\"/bin/cat\\\",\\\"/bin/chgrp\\\",\\\"/bin/chmod\\\",\\\"/bin/chown\\\",\\\"/bin/cp\\\",\\\"/bin/date\\\",\\\"/bin/dd\\\",\\\"/bin/df\\\",\\\"/bin/dir\\\",\\\"/bin/echo\\\",\\\"/bin/ln\\\",\\\"/bin/ls\\\",\\\"/bin/mkdir\\\",\\\"/bin/mknod\\\",\\\"/bin/mktemp\\\",\\\"/bin/mv\\\",\\\"/bin/pwd\\\",\\\"/bin/readlink\\\",\\\"/bin/rm\\\",\\\"/bin/rmdir\\\",\\\"/bin/sleep\\\",\\\"/bin/stty\\\",\\\"/bin/sync\\\",\\\"/bin/touch\\\",\\\"/bin/uname\\\",\\\"/bin/vdir\\\",\\\"/usr/bin/arch\\\",\\\"/usr/bin/b2sum\\\",\\\"/usr/bin/base32\\\",\\\"/usr/bin/base64\\\",\\\"/usr/bin/basename\\\",\\\"/usr/bin/chcon\\\",\\\"/usr/bin/cksum\\\",\\\"/usr/bin/comm\\\",\\\"/usr/bin/csplit\\\",\\\"/usr/bin/cut\\\",\\\"/usr/bin/dircolors\\\",\\\"/usr/bin/dirname\\\",\\\"/usr/bin/du\\\",\\\"/usr/bin/env\\\",\\\"/usr/bin/expand\\\",\\\"/usr/bin/expr\\\",\\\"/usr/bin/factor\\\",\\\"/usr/bin/fmt\\\",\\\"/usr/bin/fold\\\",\\\"/usr/bin/groups\\\",\\\"/usr/bin/head\\\",\\\"/usr/bin/hostid\\\",\\\"/usr/bin/id\\\",\\\"/usr/bin/install\\\",\\\"/usr/bin/join\\\",\\\"/usr/bin/link\\\",\\\"/usr/bin/logname\\\",\\\"/usr/bin/md5sum\\\",\\\"/usr/bin/md5sum.textutils\\\",\\\"/usr/bin/mkfifo\\\",\\\"/usr/bin/nice\\\",\\\"/usr/bin/nl\\\",\\\"/usr/bin/nohup\\\",\\\"/usr/bin/nproc\\\",\\\"/usr/bin/numfmt\\\",\\\"/usr/bin/od\\\",\\\"/usr/bin/paste\\\",\\\"/usr/bin/pathchk\\\",\\\"/usr/bin/pinky\\\",\\\"/usr/bin/pr\\\",\\\"/usr/bin/printenv\\\",\\\"/usr/bin/printf\\\",\\\"/usr/bin/ptx\\\",\\\"/usr/bin/realpath\\\",\\\"/usr/bin/runcon\\\",\\\"/usr/bin/seq\\\",\\\"/usr/bin/sha1sum\\\",\\\"/usr/bin/sha224sum\\\",\\\"/usr/bin/sha256sum\\\",\\\"/usr/bin/sha384sum\\\",\\\"/usr/bin/sha512sum\\\",\\\"/usr/bin/shred\\\",\\\"/usr/bin/shuf\\\",\\\"/usr/bin/sort\\\",\\\"/usr/bin/split\\\",\\\"/usr/bin/stat\\\",\\\"/usr/bin/stdbuf\\\",\\\"/usr/bin/sum\\\",\\\"/usr/bin/tac\\\",\\\"/usr/bin/tail\\\",\\\"/usr/bin/tee\\\",\\\"/usr/bin/test\\\",\\\"/usr/bin/timeout\\\",\\\"/usr/bin/tr\\\",\\\"/usr/bin/truncate\\\",\\\"/usr/bin/tsort\\\",\\\"/usr/bin/tty\\\",\\\"/usr/bin/unexpand\\\",\\\"/usr/bin/uniq\\\",\\\"/usr/bin/unlink\\\",\\\"/usr/bin/users\\\",\\\"/usr/bin/wc\\\",\\\"/usr/bin/who\\\",\\\"/usr/bin/whoami\\\",\\\"/usr/sbin/chroot\\\",\\\"/bin/busybox\\\"]) \\u0026\\u0026\\n(process.parent.file.name in [\\\"apache2\\\", \\\"nginx\\\", ~\\\"tomcat*\\\", \\\"httpd\\\"] || process.parent.file.name =~ \\\"php*\\\")\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"potential_web_shell_parent\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1190-exploit-public-facing-application\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"wpz-bim-6rb\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process was spawned with indicators of exploitation of CVE-2021-4034\",\"enabled\":true,\"expression\":\"(exec.file.path == \\\"/usr/bin/pkexec\\\" \\u0026\\u0026 exec.envs in [~\\\"*SHELL*\\\", ~\\\"*PATH*\\\"] \\u0026\\u0026 exec.envs not in [~\\\"*DISPLAY*\\\", ~\\\"*DESKTOP_SESSION*\\\"] \\u0026\\u0026 exec.uid != 0)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"pwnkit_privilege_escalation\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1068-exploitation-for-privilege-escalation\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-lt6\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process was executed in a Kubernetes user session\",\"enabled\":true,\"expression\":\"exec.user_session.k8s_username != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"k8s_user_session\",\"product_tags\":[\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-qwu\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n open.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (open.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n) \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003e 90s\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"ssh_authorized_keys_open_v2\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1098-account-manipulation\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-zse\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PHP web application spawning shell\",\"enabled\":true,\"expression\":\"exec.file.name in [~\\\"powershell*\\\",\\\"cmd.exe\\\"] \\u0026\\u0026 process.parent.file.name in [\\\"php.exe\\\",\\\"php-cgi.exe\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"php_spawning_shell\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1210-exploitation-of-remote-services\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"g7f-kfr-tdb\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Python code was provided on the command line\",\"enabled\":true,\"expression\":\"exec.file.name == ~\\\"python*\\\" \\u0026\\u0026 exec.args_flags in [\\\"c\\\"] \\u0026\\u0026 exec.args in [~\\\"*-c*SOCK_STREAM*\\\", ~\\\"*-c*subprocess*\\\", ~\\\"*-c*/bash*\\\", ~\\\"*-c*/bin/sh*\\\", ~\\\"*-c*pty.spawn*\\\"] \\u0026\\u0026 exec.args !~ \\\"*setuptools*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"python_cli_code\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1059-command-and-scripting-interpreter\",\"subtechnique:T1059.006-python\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-npv\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Detects CVE-2022-0543\",\"enabled\":true,\"expression\":\"(open.file.path =~ \\\"/usr/lib/x86_64-linux-gnu/*\\\" \\u0026\\u0026 open.file.name in [\\\"libc-2.29.so\\\", \\\"libc-2.30.so\\\", \\\"libc-2.31.so\\\", \\\"libc-2.32.so\\\", \\\"libc-2.33.so\\\", \\\"libc-2.34.so\\\", \\\"libc-2.35.so\\\", \\\"libc-2.36.so\\\", \\\"libc-2.37.so\\\"]) \\u0026\\u0026 process.ancestors.comm in [\\\"redis-check-rdb\\\", \\\"redis-server\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"redis_sandbox_escape\",\"product_tags\":[\"tactic:TA0001-initial-access\",\"technique:T1190-exploit-public-facing-application\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"4mx-n6o-mmb\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"cron_at_job_creation_utimes\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1053-scheduled-task-or-job\",\"subtechnique:T1053.003-cron\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-mpd\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process connected to a cryptocurrency mining pool\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [~\\\"*.minexmr.com\\\", \\\"minexmr.com\\\", ~\\\"*.nanopool.org\\\", \\\"nanopool.org\\\", ~\\\"*.supportxmr.com\\\", \\\"supportxmr.com\\\", ~\\\"*.c3pool.com\\\", \\\"c3pool.com\\\", ~\\\"*.p2pool.io\\\", \\\"p2pool.io\\\", ~\\\"*.ethermine.org\\\", \\\"ethermine.org\\\", ~\\\"*.f2pool.com\\\", \\\"f2pool.com\\\", ~\\\"*.poolin.me\\\", \\\"poolin.me\\\", ~\\\"*.rplant.xyz\\\", \\\"rplant.xyz\\\", ~\\\"*.miningocean.org\\\", \\\"miningocean.org\\\", \\\"donate.v2.xmrig.com\\\"] \\u0026\\u0026 connect.addr.is_public == true \\u0026\\u0026 connect.addr.port not in [53, 80, 443]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"mining_pool_domain\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1496-resource-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-0pf\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process attempted to overwrite the container entrypoint\",\"enabled\":true,\"expression\":\"open.file.path == \\\"/proc/self/fd/1\\\" \\u0026\\u0026 open.flags \\u0026 O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY \\u003e 0 \\u0026\\u0026 process.container.id != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"overwrite_entrypoint\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1613-container-and-resource-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"460-gys-lqp\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Network Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A DNS lookup was done for a pastebin-like site\",\"enabled\":true,\"expression\":\"dns.question.name in [\\\"pastebin.com\\\", \\\"ghostbin.com\\\", \\\"termbin.com\\\", \\\"klgrth.io\\\", \\\"rentry.co\\\", \\\"transfer.sh\\\"] \\u0026\\u0026 process.file.name != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"paste_site\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1105-ingress-tool-transfer\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"64n-p6m-uq1\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n ( link.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"]\\n || link.file.destination.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"] \\n || link.file.destination.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] \\n || link.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"systemd_modification_link\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1569-system-services\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"qt9-i99-q9p\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"nsswitch_conf_mod_utimes\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"q0u-s8m-8pd\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pci_11_5_critical_binaries_utimes\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-nin\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Network Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A DNS request was made for a chatroom domain\",\"enabled\":true,\"expression\":\"dns.question.name in [\\\"discord.com\\\", \\\"api.telegram.org\\\", \\\"cdn.discordapp.com\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"chatroom_request\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1572-protocol-tunneling\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-fqm\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The whoami command was executed\",\"enabled\":true,\"expression\":\"exec.comm == \\\"whoami\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"exec_whoami\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1033-system-owner-or-user-discovery\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"sqi-q1z-onu\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Network utility executed with suspicious URI\",\"enabled\":true,\"expression\":\"exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] \\u0026\\u0026 exec.args in [~\\\"*.php*\\\", ~\\\"*.jpg*\\\"] \",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"net_unusual_request\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1105-ingress-tool-transfer\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-rpp\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nohup was used to ignore process termination signals\",\"enabled\":true,\"expression\":\"exec.file.name != \\\"\\\" \\u0026\\u0026 process.parent.comm == \\\"nohup\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"nohup_usage\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1564-hide-artifacts\",\"subtechnique:T1564.011-ignore-process-interrupts\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-hlr\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Tunneling or port forwarding tool used\",\"enabled\":true,\"expression\":\"((exec.comm == \\\"pivotnacci\\\" || exec.comm == \\\"gost\\\") \\u0026\\u0026 process.args_flags in [\\\"L\\\", \\\"C\\\", \\\"R\\\"]) || (exec.comm in [\\\"ssh\\\", \\\"sshd\\\"] \\u0026\\u0026 process.args_flags in [\\\"R\\\", \\\"L\\\", \\\"D\\\", \\\"w\\\"] \\u0026\\u0026 process.args in [r\\\"((25[0-5]|(2[0-4]|1\\\\d|[1-9])\\\\d)\\\\.?\\\\b){4}\\\"] ) || (exec.comm == \\\"sshuttle\\\" \\u0026\\u0026 process.args_flags in [\\\"r\\\", \\\"remote\\\", \\\"l\\\", \\\"listen\\\"]) || (exec.comm == \\\"socat\\\" \\u0026\\u0026 process.args in [r\\\"(TCP4-LISTEN:|SOCKS)\\\"]) || (exec.comm in [\\\"iodine\\\", \\\"iodined\\\", \\\"dnscat\\\", \\\"hans\\\", \\\"hans-ubuntu\\\", \\\"ptunnel-ng\\\", \\\"ssf\\\", \\\"3proxy\\\", \\\"ngrok\\\"] \\u0026\\u0026 process.parent.comm in [\\\"bash\\\", \\\"dash\\\", \\\"ash\\\", \\\"sh\\\", \\\"tcsh\\\", \\\"csh\\\", \\\"zsh\\\", \\\"ksh\\\", \\\"fish\\\"])\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"tunnel_traffic\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1572-protocol-tunneling\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-jed\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows registry hives file location key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Control\\\\hivelist*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"registry_hives_file_path_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1112-modify-registry\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"prk-6q1-g0m\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n ( rename.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] \\n || rename.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"]\\n || rename.file.destination.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] \\n || rename.file.destination.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"systemd_modification_rename\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1569-system-services\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-ehx\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The auditd rules file was modified without using auditctl\",\"enabled\":true,\"expression\":\"open.file.path in [\\\"/etc/audit/rules.d/audit.rules\\\", \\\"/etc/audit/audit.rules\\\"] \\u0026\\u0026 open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 process.file.name != \\\"auditctl\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"auditd_rule_file_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1562-impair-defenses\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-but\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A java process spawned a shell, shell utility, or HTTP utility\",\"enabled\":true,\"expression\":\"(exec.file.path in [ \\\"/bin/dash\\\",\\n \\\"/usr/bin/dash\\\",\\n \\\"/bin/sh\\\",\\n \\\"/bin/static-sh\\\",\\n \\\"/usr/bin/sh\\\",\\n \\\"/bin/bash\\\",\\n \\\"/usr/bin/bash\\\",\\n \\\"/bin/bash-static\\\",\\n \\\"/usr/bin/zsh\\\",\\n \\\"/usr/bin/ash\\\",\\n \\\"/usr/bin/csh\\\",\\n \\\"/usr/bin/ksh\\\",\\n \\\"/usr/bin/tcsh\\\",\\n \\\"/usr/lib/initramfs-tools/bin/busybox\\\",\\n \\\"/bin/busybox\\\",\\n \\\"/usr/bin/fish\\\",\\n \\\"/bin/ksh93\\\",\\n \\\"/bin/rksh\\\",\\n \\\"/bin/rksh93\\\",\\n \\\"/bin/lksh\\\",\\n \\\"/bin/mksh\\\",\\n \\\"/bin/mksh-static\\\",\\n \\\"/usr/bin/csharp\\\",\\n \\\"/bin/posh\\\",\\n \\\"/usr/bin/rc\\\",\\n \\\"/bin/sash\\\",\\n \\\"/usr/bin/yash\\\",\\n \\\"/bin/zsh5\\\",\\n \\\"/bin/zsh5-static\\\" ] ||\\n exec.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"] ||\\n exec.file.path in [\\\"/bin/cat\\\",\\\"/bin/chgrp\\\",\\\"/bin/chmod\\\",\\\"/bin/chown\\\",\\\"/bin/cp\\\",\\\"/bin/date\\\",\\\"/bin/dd\\\",\\\"/bin/df\\\",\\\"/bin/dir\\\",\\\"/bin/echo\\\",\\\"/bin/ln\\\",\\\"/bin/ls\\\",\\\"/bin/mkdir\\\",\\\"/bin/mknod\\\",\\\"/bin/mktemp\\\",\\\"/bin/mv\\\",\\\"/bin/pwd\\\",\\\"/bin/readlink\\\",\\\"/bin/rm\\\",\\\"/bin/rmdir\\\",\\\"/bin/sleep\\\",\\\"/bin/stty\\\",\\\"/bin/sync\\\",\\\"/bin/touch\\\",\\\"/bin/uname\\\",\\\"/bin/vdir\\\",\\\"/usr/bin/arch\\\",\\\"/usr/bin/b2sum\\\",\\\"/usr/bin/base32\\\",\\\"/usr/bin/base64\\\",\\\"/usr/bin/basename\\\",\\\"/usr/bin/chcon\\\",\\\"/usr/bin/cksum\\\",\\\"/usr/bin/comm\\\",\\\"/usr/bin/csplit\\\",\\\"/usr/bin/cut\\\",\\\"/usr/bin/dircolors\\\",\\\"/usr/bin/dirname\\\",\\\"/usr/bin/du\\\",\\\"/usr/bin/env\\\",\\\"/usr/bin/expand\\\",\\\"/usr/bin/expr\\\",\\\"/usr/bin/factor\\\",\\\"/usr/bin/fmt\\\",\\\"/usr/bin/fold\\\",\\\"/usr/bin/groups\\\",\\\"/usr/bin/head\\\",\\\"/usr/bin/hostid\\\",\\\"/usr/bin/id\\\",\\\"/usr/bin/install\\\",\\\"/usr/bin/join\\\",\\\"/usr/bin/link\\\",\\\"/usr/bin/logname\\\",\\\"/usr/bin/md5sum\\\",\\\"/usr/bin/md5sum.textutils\\\",\\\"/usr/bin/mkfifo\\\",\\\"/usr/bin/nice\\\",\\\"/usr/bin/nl\\\",\\\"/usr/bin/nohup\\\",\\\"/usr/bin/nproc\\\",\\\"/usr/bin/numfmt\\\",\\\"/usr/bin/od\\\",\\\"/usr/bin/paste\\\",\\\"/usr/bin/pathchk\\\",\\\"/usr/bin/pinky\\\",\\\"/usr/bin/pr\\\",\\\"/usr/bin/printenv\\\",\\\"/usr/bin/printf\\\",\\\"/usr/bin/ptx\\\",\\\"/usr/bin/realpath\\\",\\\"/usr/bin/runcon\\\",\\\"/usr/bin/seq\\\",\\\"/usr/bin/sha1sum\\\",\\\"/usr/bin/sha224sum\\\",\\\"/usr/bin/sha256sum\\\",\\\"/usr/bin/sha384sum\\\",\\\"/usr/bin/sha512sum\\\",\\\"/usr/bin/shred\\\",\\\"/usr/bin/shuf\\\",\\\"/usr/bin/sort\\\",\\\"/usr/bin/split\\\",\\\"/usr/bin/stat\\\",\\\"/usr/bin/stdbuf\\\",\\\"/usr/bin/sum\\\",\\\"/usr/bin/tac\\\",\\\"/usr/bin/tail\\\",\\\"/usr/bin/tee\\\",\\\"/usr/bin/test\\\",\\\"/usr/bin/timeout\\\",\\\"/usr/bin/tr\\\",\\\"/usr/bin/truncate\\\",\\\"/usr/bin/tsort\\\",\\\"/usr/bin/tty\\\",\\\"/usr/bin/unexpand\\\",\\\"/usr/bin/uniq\\\",\\\"/usr/bin/unlink\\\",\\\"/usr/bin/users\\\",\\\"/usr/bin/wc\\\",\\\"/usr/bin/who\\\",\\\"/usr/bin/whoami\\\",\\\"/usr/sbin/chroot\\\",\\\"/bin/busybox\\\"])\\n\\u0026\\u0026 process.parent.file.name in [\\\"java\\\", \\\"jspawnhelper\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"java_shell_execution_parent\",\"product_tags\":[\"tactic:TA0001-initial-access\",\"technique:T1190-exploit-public-facing-application\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-crv\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Sudoers policy file may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [\\\"/etc/sudoers\\\", ~\\\"/etc/sudoers.d/*\\\"])\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"sudoers_policy_modified_chmod\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1548-abuse-elevation-control-mechanism\",\"subtechnique:T1548.001-setuid-and-setgid\",\"subtechnique:T1548.003-sudo-and-sudo-caching\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-ab6\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Network Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Recently modified file requested credentials from IMDS\",\"enabled\":true,\"expression\":\"imds.url =~ \\\"/*/meta-data/iam/security-credentials/*\\\" \\u0026\\u0026 (process.parent.file.modification_time \\u003c 120s || process.file.modification_time \\u003c 30s)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"modified_file_requesting_imds_creds\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1552-unsecured-credentials\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-o13\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The configuration directory for an ssh worm\",\"enabled\":true,\"expression\":\"open.file.path in [~\\\"/root/.prng/*\\\", ~\\\"/home/*/.prng/*\\\", ~\\\"/root/.config/prng/*\\\", ~\\\"/home/*/.config/prng/*\\\"] \\u0026\\u0026 open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ssh_it_tool_config_write\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1098-account-manipulation\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-d4w\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A file executed from /dev/shm/ directory\",\"enabled\":true,\"expression\":\"exec.file.path == ~\\\"/dev/shm/**\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"devshm_execution\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1027-obfuscated-files-or-information\",\"subtechnique:T1027.011-fileless-storage\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"v5x-8l4-d6a\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Shell History was Deleted\",\"enabled\":true,\"expression\":\"open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 open.file.name in [\\\".bash_history\\\", \\\".zsh_history\\\", \\\".fish_history\\\", \\\"fish_history\\\", \\\".dash_history\\\", \\\".sh_history\\\"] \\u0026\\u0026 open.file.path in [~\\\"/root/*\\\", ~\\\"/home/**\\\"] \\u0026\\u0026 process.file.name == \\\"truncate\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"shell_history_truncated\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1070-indicator-removal\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"91f-pyq-54k\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n link.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (link.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ]\\n || link.file.destination.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"ssh_authorized_keys_link\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1098-account-manipulation\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-dpm\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process attempted to enable writing to model-specific registers\",\"enabled\":true,\"expression\":\"exec.comm == \\\"modprobe\\\" \\u0026\\u0026 process.args =~ \\\"*msr*allow_writes*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"kernel_msr_write\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1496-resource-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-g5v\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process connected to an SSH server\",\"enabled\":true,\"expression\":\"connect.addr.port == 22 \\u0026\\u0026 (connect.addr.family == AF_INET || connect.addr.family == AF_INET6) \\u0026\\u0026 connect.addr.ip not in [127.0.0.0/8, 0.0.0.0/32, ::1/128, ::/128]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"ssh_outbound_connection\",\"product_tags\":[\"tactic:TA0008-lateral-movement\",\"technique:T1563-remote-service-session-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-2k6\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Suspicious usage of ntdsutil\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"ntdsutil.exe\\\" \\u0026\\u0026 exec.cmdline in [~\\\"*ntds*\\\", ~\\\"*create*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"suspicious_ntdsutil_usage\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-y27\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"RC scripts modified\",\"enabled\":true,\"expression\":\"(open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026 (open.file.path in [\\\"/etc/rc.common\\\", \\\"/etc/rc.local\\\"])) \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"rc_scripts_modified\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1037-boot-or-logon-initialization-scripts\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"7vi-w5r-h15\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pci_11_5_critical_binaries_chmod\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"lkj-jnb-khe\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"imds_v1_usage_services\",\"field\":\"process.file.name\",\"append\":true,\"ttl\":10000000000},\"disabled\":false}],\"category\":\"Network Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An AWS IMDSv1 request was issued\",\"disabled\":[\"best-practice.policy\"],\"enabled\":false,\"expression\":\"imds.cloud_provider == \\\"aws\\\" \\u0026\\u0026 imds.aws.is_imds_v2 == false \\u0026\\u0026 process.file.name not in ${imds_v1_usage_services}\",\"filters\":[\"os == \\\"linux\\\"\"],\"name\":\"imds_v1_usage\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1552-unsecured-credentials\",\"policy:best-practice\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"hba-kfe-1xr\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSH modified keys may have been modified\",\"enabled\":true,\"expression\":\"(\\n utimes.file.name in [ \\\"authorized_keys\\\", \\\"authorized_keys2\\\" ] \\u0026\\u0026 (utimes.file.path in [ ~\\\"/root/.ssh/*\\\", ~\\\"/home/*/.ssh/*\\\", ~\\\"/var/lib/*/.ssh/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"ssh_authorized_keys_utimes\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1098-account-manipulation\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-7ez\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Process arguments indicating possible php shell detected\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"php\\\" \\u0026\\u0026 exec.args_flags in [\\\"r\\\"] \\u0026\\u0026 ((exec.args in [~\\\"*socket_bind*\\\", ~\\\"*socket_listen*\\\", ~\\\"*socket_accept*\\\", ~\\\"*socket_create*\\\", ~\\\"*socket_write*\\\", ~\\\"*socket_read*\\\"]) || (exec.args in [~\\\"*/bin/bash*\\\", ~\\\"*/bin/sh*\\\"]))\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"php_shell\",\"product_tags\":[\"tactic:TA0001-execution\",\"technique:T1059-command-and-scripting-interpreter\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-nip\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Browser WebDriver spawned shell\",\"enabled\":true,\"expression\":\"process.parent.file.name in [~\\\"chromedriver*\\\", \\\"geckodriver\\\"] \\u0026\\u0026 exec.file.name not in [\\\"chrome\\\", \\\"google-chrome\\\", \\\"chromium\\\", \\\"firefox\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"webdriver_spawned_shell\",\"product_tags\":[\"tactic:TA0001-initial-access\",\"technique:T1190-exploit-public-facing-application\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"xiu-ghq-4zi\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pci_11_5_critical_binaries_chown\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"2dz-kyt-nme\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A new kernel module was added\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/lib/modules/**\\\", ~\\\"/usr/lib/modules/**\\\", ~\\\"/usr/lib/modules-load.d/**\\\", ~\\\"/etc/modules-load.d/**\\\", ~\\\"/etc/modprobe.d/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"] \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/kmod\\\"\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"kernel_module_chmod\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-dar\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A shell made an outbound network connection\",\"enabled\":true,\"expression\":\"(connect.addr.family == AF_INET || connect.addr.family == AF_INET6) \\u0026\\u0026 process.file.name in [\\\"dash\\\",\\\"sh\\\",\\\"static-sh\\\",\\\"sh\\\",\\\"bash\\\",\\\"bash\\\",\\\"bash-static\\\",\\\"zsh\\\",\\\"ash\\\",\\\"csh\\\",\\\"ksh\\\",\\\"tcsh\\\",\\\"busybox\\\",\\\"busybox\\\",\\\"fish\\\",\\\"ksh93\\\",\\\"rksh\\\",\\\"rksh93\\\",\\\"lksh\\\",\\\"mksh\\\",\\\"mksh-static\\\",\\\"csharp\\\",\\\"posh\\\",\\\"rc\\\",\\\"sash\\\",\\\"yash\\\",\\\"zsh5\\\",\\\"zsh5-static\\\"] \\u0026\\u0026 connect.addr.is_public == true\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"shell_net_connection\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1059-command-and-scripting-interpreter\",\"subtechnique:T1059.004-unix-shell\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"4mu-d2x-fyk\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"nsswitch may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ \\\"/etc/nsswitch.conf\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"nsswitch_conf_mod_unlink\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-cjm\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"filter\":\"${process.correlation_key} != \\\"\\\"\",\"set\":{\"name\":\"parent_correlation_keys\",\"default_value\":\"\",\"expression\":\"${process.correlation_key}\",\"append\":true,\"scope\":\"process\",\"scope_field\":\"cgroup_write.pid\",\"inherited\":true},\"disabled\":false},{\"set\":{\"name\":\"correlation_key\",\"default_value\":\"\",\"expression\":\"\\\"cgroup_${builtins.uuid4}\\\"\",\"scope\":\"process\",\"scope_field\":\"cgroup_write.pid\",\"inherited\":true},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Track execution context from cgroup write\",\"enabled\":true,\"expression\":\"cgroup_write.pid \\u003e 0 \\u0026\\u0026 ${process.correlation_key} in [\\\"\\\", ~\\\"cgroup_*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"execution_context_cgroup_write\",\"product_tags\":[\"policy:threat-detection\"],\"silent\":true,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"xgw-28i-480\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A container executed a new binary not found in the container image\",\"enabled\":true,\"expression\":\"process.container.id != \\\"\\\" \\u0026\\u0026 process.file.in_upper_layer \\u0026\\u0026 process.file.modification_time \\u003c 30s \\u0026\\u0026 exec.file.name != \\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"new_binary_execution_in_container\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1105-ingress-tool-transfer\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-2s0\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Detects use of prctl to change process name to mimic legitimate system processes or kernel threads\",\"enabled\":true,\"expression\":\"prctl.option == PR_SET_NAME \\u0026\\u0026 (prctl.new_name in [\\\"systemd\\\", \\\"init\\\", \\\"sshd\\\", \\\"cron\\\", \\\"crond\\\", \\\"rsyslogd\\\", \\\"syslog-ng\\\",\\n \\\"dbus-daemon\\\", \\\"dbus-broker\\\", \\\"udevd\\\", \\\"systemd-udevd\\\", \\\"NetworkManager\\\",\\n \\\"systemd-journald\\\", \\\"systemd-logind\\\", \\\"systemd-resolved\\\", \\\"systemd-networkd\\\",\\n \\\"systemd-timesyncd\\\", \\\"accounts-daemon\\\", \\\"polkitd\\\", \\\"auditd\\\"] || prctl.new_name in [r\\\"^\\\\[.*\\\\]$\\\"]) \\u0026\\u0026 process.file.name not in [\\\"systemd\\\", \\\"init\\\", \\\"sshd\\\", \\\"cron\\\", \\\"crond\\\", \\\"rsyslogd\\\", \\\"syslog-ng\\\",\\n \\\"dbus-daemon\\\", \\\"dbus-broker\\\", \\\"udevd\\\", \\\"systemd-udevd\\\", \\\"NetworkManager\\\",\\n \\\"systemd-journald\\\", \\\"systemd-logind\\\", \\\"systemd-resolved\\\", \\\"systemd-networkd\\\",\\n \\\"systemd-timesyncd\\\", \\\"accounts-daemon\\\", \\\"polkitd\\\", \\\"auditd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"prctl_masquerading\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-zp4\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"microsoft security essentials executable modified\",\"enabled\":true,\"expression\":\"write.file.device_path in [~\\\"\\\\Device\\\\*\\\\Program Files\\\\Microsoft Security Client\\\\msseces.exe\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"windows_security_essentials_executable_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-ev8\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"The wrmsr program executed\",\"enabled\":true,\"expression\":\"exec.comm == \\\"wrmsr\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"exec_wrmsr\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1496-resource-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-3v0\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"chain_exec_unlink\",\"field\":\"exec.file.path\",\"append\":true,\"scope\":\"cgroup\",\"ttl\":30000000000},\"disabled\":false},{\"set\":{\"name\":\"exec_new_file_in_cgroup\",\"field\":\"exec.file.path\",\"append\":true,\"scope\":\"cgroup\",\"size\":10000,\"ttl\":1800000000000},\"disabled\":false},{\"set\":{\"name\":\"correlation_key_file_path\",\"field\":\"exec.file.path\",\"scope\":\"cgroup\"},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A recently modified file was executed\",\"enabled\":true,\"expression\":\"exec.file.change_time \\u003c 30s \\u0026\\u0026 cgroup.file.inode != 0 \\u0026\\u0026 exec.file.path not in ${cgroup.exec_new_file_in_cgroup} \\u0026\\u0026 exec.file.in_upper_layer != false \\u0026\\u0026 container.created_at \\u003e 1m\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"exec_new_file\",\"product_tags\":[\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"uis-h13-41q\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"cron_at_job_creation_open\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1053-scheduled-task-or-job\",\"subtechnique:T1053.003-cron\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-y7j\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Critical system binaries may have been modified\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n open.file.path in [ ~\\\"/bin/*\\\", ~\\\"/sbin/*\\\", ~\\\"/usr/bin/*\\\", ~\\\"/usr/sbin/*\\\", ~\\\"/usr/local/bin/*\\\", ~\\\"/usr/local/sbin/*\\\", ~\\\"/boot/**\\\" ]\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\\n \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 process.container.id != \\\"\\\" \\u0026\\u0026 container.created_at \\u003e 90s\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pci_11_5_critical_binaries_open_v2\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-w1z\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process cleared the system cache\",\"enabled\":true,\"expression\":\"open.file.path == \\\"/proc/sys/vm/drop_caches\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"drop_caches\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1496-resource-hijacking\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-qem\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A user was deleted via an interactive session\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"userdel\\\", \\\"deluser\\\"] \\u0026\\u0026 exec.tty_name !=\\\"\\\" \\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"user_deleted_tty\",\"product_tags\":[\"tactic:TA0040-impact\",\"technique:T1531-account-access-removal\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"m23-qb9-9s8\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"cron_at_job_creation_unlink\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1053-scheduled-task-or-job\",\"subtechnique:T1053.003-cron\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"pfu-dvh-e5w\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ])\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pam_modification_chown\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"pxk-42u-fga\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ])\\n) \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pam_modification_utimes\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"9y1-cbb-p03\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/etc/ssl/certs/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"ssl_certificate_tampering_unlink\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1553-subvert-trust-controls\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"jlt-y4v-dax\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] || unlink.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"systemd_modification_unlink\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1569-system-services\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-9rk\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Local account groups were enumerated after container start up\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"tcpdump\\\", \\\"tshark\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"network_sniffing_tool\",\"product_tags\":[\"tactic:TA0007-discovery\",\"technique:T1040-network-sniffing\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"ehh-ypb-9pl\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A compiler was executed inside of a container\",\"enabled\":true,\"expression\":\"(exec.comm in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || exec.file.name in [\\\"javac\\\", \\\"clang\\\", \\\"gcc\\\", \\\"bcc\\\"] || (exec.file.name == \\\"go\\\" \\u0026\\u0026 exec.args in [~\\\"*build*\\\", ~\\\"*run*\\\"])) \\u0026\\u0026 process.container.id !=\\\"\\\" \\u0026\\u0026 process.ancestors.file.path != \\\"/usr/bin/cilium-agent\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"best-practice.policy\",\"threat-detection.policy\"],\"name\":\"compiler_in_container\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1027-obfuscated-files-or-information\",\"policy:best-practice\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-4tl\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Certutil was executed to transmit or decode a potentially malicious file\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"certutil.exe\\\" \\u0026\\u0026 ((exec.cmdline =~ \\\"*urlcache*\\\" \\u0026\\u0026 exec.cmdline =~ \\\"*split*\\\") || exec.cmdline =~ \\\"*decode*\\\")\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"certutil_usage\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1105-ingress-tool-transfer\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-brb\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"regedit used to export critical registry hive\",\"enabled\":true,\"expression\":\"exec.file.name in [\\\"reg.exe\\\", \\\"regedit.exe\\\"] \\u0026\\u0026 exec.cmdline in [~\\\"*hklm*\\\", ~\\\"*hkey_local_machine*\\\", ~\\\"*system*\\\", ~\\\"*sam*\\\", ~\\\"*security*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"critical_registry_export\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"ogb-clp-hot\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (chmod.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n) \\u0026\\u0026 chmod.file.destination.mode != chmod.file.mode\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"cron_at_job_creation_chmod\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1053-scheduled-task-or-job\",\"subtechnique:T1053.003-cron\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"900-1sj-xhs\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (unlink.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\" ])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pam_modification_unlink\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"ayv-hqe-lx8\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/etc/ssl/certs/**\\\" ])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"ssl_certificate_tampering_utimes\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1553-subvert-trust-controls\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"wwy-h4d-pwm\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (chown.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n) \\u0026\\u0026 (chown.file.destination.uid != chown.file.uid || chown.file.destination.gid != chown.file.gid)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"systemd_modification_chown\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1569-system-services\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-tlf\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"the windows hosts file was modified\",\"enabled\":true,\"expression\":\"write.file.device_path in [~\\\"\\\\Device\\\\*\\\\windows\\\\system32\\\\Drivers\\\\etc\\\\hosts\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"windows_hosts_file_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-u7b\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Known offensive tool crackmap exec executed\",\"enabled\":true,\"expression\":\"exec.cmdline in [~\\\"*crackmapexec*\\\", ~\\\"*cme.exe*\\\", ~\\\"*cme.py*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"crackmap_exec_executed\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-6oh\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A Registry runkey has been modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Runonce\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Wow6432Node\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\Install\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\Install\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Runonce\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\Terminal Server\\\\Install\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\RunonceEx\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"registry_runkey_modified\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"xa1-b6v-n2l\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (rename.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"]\\n || rename.file.destination.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"cron_at_job_creation_rename\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1053-scheduled-task-or-job\",\"subtechnique:T1053.006-systemd-timers\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-eho\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Container escape attempted by overwriting release_agent\",\"enabled\":true,\"expression\":\"open.file.name == \\\"release_agent\\\" \\u0026\\u0026 open.file.path in [\\\"/tmp/**\\\", \\\"/home/**\\\", \\\"/root/**\\\", \\\"/*\\\"] \\u0026\\u0026 open.flags \\u0026 O_CREAT|O_TRUNC|O_APPEND|O_RDWR|O_WRONLY \\u003e 0\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"release_agent_escape\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"x7i-34j-1rv\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"PAM may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\"]\\n || link.file.destination.path in [ ~\\\"/etc/pam.d/**\\\", \\\"/etc/pam.conf\\\", ~\\\"/lib/security/*\\\", ~\\\"/usr/lib/security/*\\\", ~\\\"/lib64/security/*\\\", ~\\\"/usr/lib64/security/*\\\"])\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"pam_modification_link\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1556-modify-authentication-process\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"yjj-o5q-x00\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A service may have been modified without authorization\",\"enabled\":true,\"expression\":\"(\\n (utimes.file.path in [ ~\\\"/lib/systemd/system/**\\\", ~\\\"/usr/lib/systemd/system/**\\\", ~\\\"/etc/systemd/system/**\\\", ~\\\"/usr/local/lib/systemd/system/**\\\", ~\\\"/run/systemd/system/**\\\"] || utimes.file.path in [ ~\\\"/etc/systemd/user/**\\\", ~\\\"/usr/lib/systemd/user/**\\\", ~\\\"/home/*/.config/systemd/user/**\\\", ~\\\"/home/*/.local/share/systemd/user/**\\\", ~\\\"/run/systemd/user/**\\\"])\\n \\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"systemd_modification_utimes\",\"product_tags\":[\"tactic:TA0002-execution\",\"technique:T1569-system-services\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-6lj\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"windows explorer file has been modified\",\"enabled\":true,\"expression\":\"write.file.device_path in [~\\\"\\\\Device\\\\*\\\\windows\\\\explorer.exe\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"windows_explorer_executable_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"mcv-y5o-zg5\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"An unauthorized job was added to cron scheduling\",\"enabled\":true,\"expression\":\"(\\n (link.file.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\", ~\\\"/etc/crontabs/**\\\"]\\n || link.file.destination.path in [ ~\\\"/var/spool/cron/**\\\", ~\\\"/etc/cron.*/**\\\", ~\\\"/etc/crontab\\\" ])\\n \\u0026\\u0026 process.file.path not in [ \\\"/usr/bin/at\\\", \\\"/usr/bin/crontab\\\" ]\\n)\\n\\u0026\\u0026 process.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/containerd\\\", \\\"/usr/local/bin/containerd\\\", \\\"/usr/bin/dockerd\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\"]\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\",\"threat-detection.policy\"],\"name\":\"cron_at_job_creation_link\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1053-scheduled-task-or-job\",\"subtechnique:T1053.003-cron\",\"policy:compliance\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-qt6\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"SSL certificates may have been tampered with\",\"enabled\":true,\"expression\":\"(\\n open.flags \\u0026 (O_CREAT|O_RDWR|O_WRONLY) \\u003e 0 \\u0026\\u0026\\n (open.file.path in [ ~\\\"/etc/ssl/certs/**\\\", ~\\\"/etc/pki/**\\\" ])\\n)\\n\\u0026\\u0026 process.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path != \\\"/usr/sbin/update-ca-certificates\\\"\\n\\u0026\\u0026 process.ancestors.file.path not in [~\\\"/usr/bin/apt*\\\", \\\"/usr/bin/dpkg\\\", \\\"/usr/bin/rpm\\\", \\\"/usr/bin/unattended-upgrade\\\", \\\"/usr/bin/npm\\\", ~\\\"/usr/bin/pip*\\\", ~\\\"/usr/local/bin/pip*\\\", \\\"/usr/bin/yum\\\", \\\"/sbin/apk\\\", \\\"/usr/lib/snapd/snapd\\\"]\\n\\u0026\\u0026 process.file.name !~ \\\"runc*\\\"\\n\\u0026\\u0026 process.container.id != \\\"\\\"\\n\\u0026\\u0026 container.created_at \\u003e 90s\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"ssl_certificate_tampering_open_v2\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1553-subvert-trust-controls\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"zfb-ixo-o4w\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A suspicious file was written by a network utility\",\"enabled\":true,\"expression\":\"open.flags \\u0026 O_CREAT \\u003e 0 \\u0026\\u0026 process.comm in [\\\"wget\\\", \\\"curl\\\", \\\"lwp-download\\\"]\\n\\u0026\\u0026 (\\n (open.file.path =~ \\\"/tmp/**\\\" \\u0026\\u0026 open.file.name in [~\\\"*.sh\\\", ~\\\"*.c\\\", ~\\\"*.so\\\", ~\\\"*.ko\\\"])\\n || open.file.path in [~\\\"/usr/**\\\", ~\\\"/lib/**\\\", ~\\\"/etc/**\\\", ~\\\"/var/tmp/**\\\", ~\\\"/dev/shm/**\\\"]\\n)\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"net_file_download\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1105-ingress-tool-transfer\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-pnt\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process connected to a penetration testing domain\",\"enabled\":true,\"expression\":\"connect.addr.hostname in [~\\\"*.interact.sh\\\", ~\\\"*.oast.pro\\\", ~\\\"*.oast.live\\\", ~\\\"*.oast.fun\\\", ~\\\"*.oast.me\\\", ~\\\"*.burpcollaborator.net\\\", ~\\\"*.oastify.com\\\", ~\\\"*canarytokens.com\\\", ~\\\"*.requestbin.net\\\", ~\\\"*.dnslog.cn\\\"] \\u0026\\u0026 connect.addr.is_public == true\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"pentest_domain\",\"product_tags\":[\"tactic:TA0001-initial-access\",\"technique:T1190-exploit-public-facing-application\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-guo\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A process was executed matching arguments for a UAC bypass technique common in powershell empire\",\"enabled\":true,\"expression\":\"exec.cmdline in [~\\\"*-NoP -NonI -w Hidden -c $x=$((gp HKCU:Software\\\\Microsoft\\\\Windows Update).Update)*\\\", ~\\\"*-NoP -NonI -c $x=$((gp HKCU:Software\\\\Microsoft\\\\Windows Update).Update);*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"powershell_empire_uac_bypass\",\"product_tags\":[\"tactic:TA0006-credential-access\",\"technique:T1003-os-credential-dumping\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-5xt\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Detect attempts to trigger a coredump after modifying /proc/sys/kernel/core_pattern.\",\"enabled\":true,\"expression\":\"exit.cause == COREDUMPED \\u0026\\u0026 process.container.id == ${container.core_pattern_write_container_id}\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"coredump_triggered\",\"product_tags\":[\"tactic:TA0004-privilege-escalation\",\"technique:T1611-escape-to-host\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"gx3-4a5-w9a\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Kernel Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A kernel module was loaded from memory inside a container\",\"enabled\":true,\"expression\":\"load_module.loaded_from_memory == true \\u0026\\u0026 process.container.id !=\\\"\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"kernel_module_load_from_memory_container\",\"product_tags\":[\"tactic:TA0003-persistence\",\"technique:T1547-boot-or-logon-autostart-execution\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-n3u\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"File Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"Windows shell folders registry key modified\",\"enabled\":true,\"expression\":\"set.registry.key_path in [~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\Shell Folders*\\\", ~\\\"HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\User Shell Folders*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"compliance.policy\"],\"name\":\"windows_shell_folders_registry_key_modified\",\"product_tags\":[\"tactic:TA0005-defense-evasion\",\"technique:T1036-masquerading\",\"policy:compliance\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}},{\"id\":\"def-000-4y4\",\"type\":\"agent_rule\",\"attributes\":{\"category\":\"Process Activity\",\"creationDate\":1762959595000,\"creator\":{\"name\":\"Datadog\",\"handle\":\"\"},\"defaultRule\":true,\"description\":\"A suspicious bitsadmin command has been executed\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"bitsadmin.exe\\\" \\u0026\\u0026 exec.cmdline in [~\\\"*addfile*\\\", ~\\\"*create*\\\", ~\\\"*resume*\\\"]\",\"filters\":[\"os == \\\"windows\\\"\"],\"monitoring\":[\"threat-detection.policy\"],\"name\":\"suspicious_bitsadmin_usage\",\"product_tags\":[\"tactic:TA0011-command-and-control\",\"technique:T1105-ingress-tool-transfer\",\"policy:threat-detection\"],\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all Workload Protection agent rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:51.455Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"81e-zuz-tbx\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"im a policy\",\"disabledRulesCount\":0,\"enabled\":true,\"hostTagsLists\":[[\"host_name:test_host\"]],\"monitoringRulesCount\":0,\"name\":\"nvnmhbgmqe\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"1\",\"ruleCount\":0,\"updateDate\":1761155811806,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}},{\"id\":\"8pn-mio-ump\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":0,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":0,\"name\":\"testupdateaworkloadprotectionpolicyreturnsbadrequestresponse1762896749\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"1\",\"ruleCount\":0,\"updateDate\":1762896749568,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}},{\"id\":\"b0p-hru-hlr\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":0,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":0,\"name\":\"exampledeleteaworkloadprotectionagentrulereturnsokresponse1760974844\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"3\",\"ruleCount\":0,\"updateDate\":1760974906163,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}},{\"id\":\"best-practice.policy\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":true,\"disabledRulesCount\":1,\"enabled\":true,\"monitoringRulesCount\":7,\"name\":\"Best-practice Policy\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"1.59.0-rc7\",\"ruleCount\":8,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"},\"versions\":[{\"name\":\"1.51.0-rc3\",\"date\":\"2025-07-14T15:24:33Z\"},{\"name\":\"1.57.3-rc6\",\"date\":\"2025-10-08T20:54:48Z\"},{\"name\":\"1.59.0-rc7\",\"date\":\"2025-11-12T14:59:55Z\"}]}},{\"id\":\"bvj-ewr-99s\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"im a policy\",\"disabledRulesCount\":0,\"enabled\":true,\"hostTagsLists\":[[\"host_name:test_host\"]],\"monitoringRulesCount\":0,\"name\":\"zyzdvyelnt\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"1\",\"ruleCount\":0,\"updateDate\":1761155808471,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}},{\"id\":\"compliance.policy\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":true,\"disabledRulesCount\":0,\"enabled\":true,\"monitoringRulesCount\":91,\"name\":\"Compliance Policy\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"1.59.0-rc7\",\"ruleCount\":91,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"},\"versions\":[{\"name\":\"1.53.0-rc4\",\"date\":\"2025-07-25T14:21:14Z\"},{\"name\":\"1.57.3-rc6\",\"date\":\"2025-10-08T20:54:48Z\"},{\"name\":\"1.59.0-rc7\",\"date\":\"2025-11-12T14:59:55Z\"}]}},{\"id\":\"ftl-zfn-onj\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":0,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":0,\"name\":\"examplecreateaworkloadprotectionagentrulereturnsokresponse1760977240\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"3\",\"ruleCount\":0,\"updateDate\":1760977301707,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}},{\"id\":\"t22-umm-oll\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"im a policy\",\"disabledRulesCount\":0,\"enabled\":true,\"hostTagsLists\":[[\"host_name:test_host\"]],\"monitoringRulesCount\":0,\"name\":\"xmprooqoga\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"1\",\"ruleCount\":0,\"updateDate\":1761155815503,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}},{\"id\":\"threat-detection.policy\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":true,\"disabledRulesCount\":0,\"enabled\":true,\"monitoringRulesCount\":200,\"name\":\"Threat-detection Policy\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"1.59.0-rc13\",\"ruleCount\":200,\"updateDate\":1762959595000,\"updater\":{\"name\":\"Datadog\",\"handle\":\"\"},\"versions\":[{\"name\":\"1.54.0-rc9\",\"date\":\"2025-08-07T15:09:31Z\"},{\"name\":\"1.57.3-rc12\",\"date\":\"2025-10-08T20:54:48Z\"},{\"name\":\"1.59.0-rc13\",\"date\":\"2025-11-12T14:59:55Z\"}]}},{\"id\":\"zhm-evm-par\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"im a policy\",\"disabledRulesCount\":0,\"enabled\":true,\"hostTagsLists\":[[\"host_name:test_host\"]],\"monitoringRulesCount\":0,\"name\":\"ekuqhoslkv\",\"pinned\":false,\"policyType\":\"policy\",\"policyVersion\":\"1\",\"ruleCount\":0,\"updateDate\":1763985316427,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all Workload Protection policies returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-05-27T10:34:05.620Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "name": "testupdateaworkloadprotectionagentruleus1fedreturnsbadrequestresponse1748342045" + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"q58-cpj-dtw\",\"attributes\":{\"version\":1,\"name\":\"testupdateaworkloadprotectionagentruleus1fedreturnsbadrequestresponse1748342045\",\"description\":\"My Agent rule\",\"expression\":\"exec.file.name == \\\"sh\\\"\",\"category\":\"Process Activity\",\"defaultRule\":false,\"enabled\":true,\"creationAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creationDate\":1748342046325,\"updateAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"updateDate\":1748342046325,\"filters\":[\"os == \\\"linux\\\"\"],\"actions\":[],\"agentConstraint\":\"\",\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}},\"type\":\"agent_rule\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name" + }, + "id": "q58-cpj-dtw", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/q58-cpj-dtw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"input_validation_error(Field 'expression' is invalid: rule `testupdateaworkloadprotectionagentruleus1fedreturnsbadrequestresponse1748342045` error: rule syntax error: bool expected: 1:1: exec.file.name\\n^)\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/q58-cpj-dtw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Workload Protection agent rule (US1-FED) returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-05-27T10:33:55.255Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"" + }, + "id": "invalid-agent-rule-id", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/non-existent-rule-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not found\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a Workload Protection agent rule (US1-FED) returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-05-27T10:33:43.912Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "name": "testupdateaworkloadprotectionagentruleus1fedreturnsokresponse1748342023" + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dz8-9mj-136\",\"attributes\":{\"version\":1,\"name\":\"testupdateaworkloadprotectionagentruleus1fedreturnsokresponse1748342023\",\"description\":\"My Agent rule\",\"expression\":\"exec.file.name == \\\"sh\\\"\",\"category\":\"Process Activity\",\"defaultRule\":false,\"enabled\":true,\"creationAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creationDate\":1748342024616,\"updateAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"updateDate\":1748342024616,\"filters\":[\"os == \\\"linux\\\"\"],\"actions\":[],\"agentConstraint\":\"\",\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}},\"type\":\"agent_rule\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Updated Agent rule", + "expression": "exec.file.name == \"sh\"" + }, + "id": "dz8-9mj-136", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/dz8-9mj-136", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dz8-9mj-136\",\"attributes\":{\"version\":2,\"name\":\"testupdateaworkloadprotectionagentruleus1fedreturnsokresponse1748342023\",\"description\":\"Updated Agent rule\",\"expression\":\"exec.file.name == \\\"sh\\\"\",\"category\":\"Process Activity\",\"defaultRule\":false,\"enabled\":true,\"creationAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creationDate\":1748342024616,\"updateAuthorUuId\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"updateDate\":1748342024959,\"filters\":[\"os == \\\"linux\\\"\"],\"actions\":[],\"agentConstraint\":\"\",\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}},\"type\":\"agent_rule\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/cloud_workload_security/agent_rules/dz8-9mj-136", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Workload Protection agent rule (US1-FED) returns \"OK\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:52.100Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testupdateaworkloadprotectionagentrulereturnsbadrequestresponse1765469392" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"jhz-vb4-ice\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testupdateaworkloadprotectionagentrulereturnsbadrequestresponse1765469392\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469392451,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "actions": [ + { + "set": { + "name": "test_set", + "scope": "process", + "value": "test_value" + } + }, + { + "hash": {} + } + ], + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "name": "testupdateaworkloadprotectionagentrulereturnsbadrequestresponse1765469392", + "policy_id": "jhz-vb4-ice", + "product_tags": [ + "security:attack", + "technique:T1059" + ] + }, + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/agent_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"q0v-vqt-vvf\",\"type\":\"agent_rule\",\"attributes\":{\"actions\":[{\"set\":{\"name\":\"test_set\",\"value\":\"test_value\",\"scope\":\"process\"},\"disabled\":false},{\"hash\":{},\"disabled\":false}],\"category\":\"Process Activity\",\"creationDate\":1765469393221,\"creator\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"},\"defaultRule\":false,\"description\":\"My Agent rule\",\"enabled\":true,\"expression\":\"exec.file.name == \\\"sh\\\"\",\"filters\":[\"os == \\\"linux\\\"\"],\"monitoring\":[\"jhz-vb4-ice\"],\"name\":\"testupdateaworkloadprotectionagentrulereturnsbadrequestresponse1765469392\",\"product_tags\":[\"security:attack\",\"technique:T1059\"],\"updateDate\":1765469393221,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "policy_id": "jhz-vb4-ice", + "product_tags": [] + }, + "id": "invalid-agent-rule-id", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/remote_config/products/cws/agent_rules/q0v-vqt-vvf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"failed to update rule: mismatch between path and request body ID\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/agent_rules/q0v-vqt-vvf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/jhz-vb4-ice", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Workload Protection agent rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:55.677Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testupdateaworkloadprotectionagentrulereturnsnotfoundresponse1765469395" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"y3m-xkt-wor\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testupdateaworkloadprotectionagentrulereturnsnotfoundresponse1765469395\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469396222,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My Agent rule", + "enabled": true, + "expression": "exec.file.name == \"sh\"", + "policy_id": "y3m-xkt-wor", + "product_tags": [] + }, + "id": "non-existent-rule-id", + "type": "agent_rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/remote_config/products/cws/agent_rules/non-existent-rule-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"failed to update rule\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/y3m-xkt-wor", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Workload Protection agent rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:09:58.563Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testupdateaworkloadprotectionpolicyreturnsbadrequestresponse1765469398" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"gfx-iai-hwm\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testupdateaworkloadprotectionpolicyreturnsbadrequestresponse1765469398\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469398915,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:test" + ], + "hostTagsLists": [ + [ + "env:test" + ] + ], + "name": "" + }, + "id": "gfx-iai-hwm", + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/remote_config/products/cws/policy/gfx-iai-hwm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"input_validation_error(Field 'tags' is invalid: cannot have both the new and the legacy field populated)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/gfx-iai-hwm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Workload Protection policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:10:00.575Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [], + "name": "my_agent_policy" + }, + "id": "non-existent-policy-id", + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/remote_config/products/cws/policy/non-existent-policy-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a Workload Protection policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "CSM Threats", + "frozen_at": "2025-12-11T16:10:01.227Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "My agent policy", + "enabled": true, + "hostTags": [ + "env:staging" + ], + "name": "testupdateaworkloadprotectionpolicyreturnsokresponse1765469401" + }, + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/remote_config/products/cws/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"enm-uk3-cvx\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"My agent policy\",\"disabledRulesCount\":1,\"enabled\":true,\"hostTagsLists\":[[\"env:staging\"]],\"monitoringRulesCount\":7,\"name\":\"testupdateaworkloadprotectionpolicyreturnsokresponse1765469401\",\"pinned\":false,\"policyVersion\":\"1\",\"ruleCount\":8,\"updateDate\":1765469401597,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Updated agent policy", + "enabled": true, + "hostTagsLists": [ + [ + "env:test" + ] + ], + "name": "updated_agent_policy" + }, + "id": "enm-uk3-cvx", + "type": "policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/remote_config/products/cws/policy/enm-uk3-cvx", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"enm-uk3-cvx\",\"type\":\"policy\",\"attributes\":{\"blockingRulesCount\":0,\"datadogManaged\":false,\"description\":\"Updated agent policy\",\"disabledRulesCount\":0,\"enabled\":true,\"hostTagsLists\":[[\"env:test\"]],\"monitoringRulesCount\":0,\"name\":\"updated_agent_policy\",\"pinned\":false,\"policyVersion\":\"2\",\"ruleCount\":0,\"updateDate\":1765469402613,\"updater\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\"}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/remote_config/products/cws/policy/enm-uk3-cvx", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Workload Protection policy returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/dashboard-lists.json b/test-server-data/v2/dashboard-lists.json new file mode 100644 index 0000000000..440088fbfb --- /dev/null +++ b/test-server-data/v2/dashboard-lists.json @@ -0,0 +1,1214 @@ +{ + "feature": "Dashboard Lists", + "recordings": [ + { + "feature": "Dashboard Lists", + "frozen_at": "2022-03-21T19:16:42.836Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Add_custom_screenboard_dashboard_to_an_existing_dashboard_list_returns_OK_response-1647890202" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Add_custom_screenboard_dashboard_to_an_existing_dashboard_list_returns_OK_response-1647890202\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-03-21T19:16:43.096523+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-03-21T19:16:43.096538+00:00\",\"id\":284061}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "free", + "title": "Test-Add_custom_screenboard_dashboard_to_an_existing_dashboard_list_returns_OK_response-1647890202 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + }, + "layout": { + "height": 10, + "width": 10, + "x": 10, + "y": 10 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":null,\"template_variables\":null,\"is_read_only\":false,\"id\":\"sza-uj6-6p4\",\"title\":\"Test-Add_custom_screenboard_dashboard_to_an_existing_dashboard_list_returns_OK_response-1647890202 with Profile Metrics Query\",\"url\":\"/dashboard/sza-uj6-6p4/test-addcustomscreenboarddashboardtoanexistingdashboardlistreturnsokresponse-164\",\"created_at\":\"2022-03-21T19:16:43.625484+00:00\",\"modified_at\":\"2022-03-21T19:16:43.625484+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"layout\":{\"y\":10,\"width\":10,\"x\":10,\"height\":10},\"id\":3487499242863939}],\"layout_type\":\"free\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboards": [ + { + "id": "sza-uj6-6p4", + "type": "custom_screenboard" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dashboard/lists/manual/284061/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"added_dashboards_to_list\":[{\"type\":\"custom_screenboard\",\"id\":\"sza-uj6-6p4\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/sza-uj6-6p4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"sza-uj6-6p4\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/284061", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":284061}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Add custom screenboard dashboard to an existing dashboard list returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-03-21T19:16:44.643Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Add_custom_timeboard_dashboard_to_an_existing_dashboard_list_returns_OK_response-1647890204" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Add_custom_timeboard_dashboard_to_an_existing_dashboard_list_returns_OK_response-1647890204\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-03-21T19:16:44.861799+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-03-21T19:16:44.861808+00:00\",\"id\":284062}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Add_custom_timeboard_dashboard_to_an_existing_dashboard_list_returns_OK_response-1647890204 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":null,\"template_variables\":null,\"is_read_only\":false,\"id\":\"r9t-5r7-8gb\",\"title\":\"Test-Add_custom_timeboard_dashboard_to_an_existing_dashboard_list_returns_OK_response-1647890204 with Profile Metrics Query\",\"url\":\"/dashboard/r9t-5r7-8gb/test-addcustomtimeboarddashboardtoanexistingdashboardlistreturnsokresponse-16478\",\"created_at\":\"2022-03-21T19:16:45.143857+00:00\",\"modified_at\":\"2022-03-21T19:16:45.143857+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"id\":1606573387522135}],\"layout_type\":\"ordered\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboards": [ + { + "id": "r9t-5r7-8gb", + "type": "custom_timeboard" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dashboard/lists/manual/284062/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"added_dashboards_to_list\":[{\"type\":\"custom_timeboard\",\"id\":\"r9t-5r7-8gb\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/r9t-5r7-8gb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"r9t-5r7-8gb\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/284062", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":284062}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Add custom timeboard dashboard to an existing dashboard list returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-03-21T19:16:46.092Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Delete_custom_screenboard_dashboard_from_an_existing_dashboard_list_returns_OK_response-1647890206" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Delete_custom_screenboard_dashboard_from_an_existing_dashboard_list_returns_OK_response-1647890206\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-03-21T19:16:46.302834+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-03-21T19:16:46.302842+00:00\",\"id\":284063}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "free", + "title": "Test-Delete_custom_screenboard_dashboard_from_an_existing_dashboard_list_returns_OK_response-1647890206 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + }, + "layout": { + "height": 10, + "width": 10, + "x": 10, + "y": 10 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":null,\"template_variables\":null,\"is_read_only\":false,\"id\":\"dam-zij-6w8\",\"title\":\"Test-Delete_custom_screenboard_dashboard_from_an_existing_dashboard_list_returns_OK_response-1647890206 with Profile Metrics Query\",\"url\":\"/dashboard/dam-zij-6w8/test-deletecustomscreenboarddashboardfromanexistingdashboardlistreturnsokrespons\",\"created_at\":\"2022-03-21T19:16:46.609394+00:00\",\"modified_at\":\"2022-03-21T19:16:46.609394+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"layout\":{\"y\":10,\"width\":10,\"x\":10,\"height\":10},\"id\":8080377461258470}],\"layout_type\":\"free\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboards": [ + { + "id": "dam-zij-6w8", + "type": "custom_screenboard" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dashboard/lists/manual/284063/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"added_dashboards_to_list\":[{\"type\":\"custom_screenboard\",\"id\":\"dam-zij-6w8\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboards": [ + { + "id": "dam-zij-6w8", + "type": "custom_screenboard" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/dashboard/lists/manual/284063/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboards_from_list\":[{\"type\":\"custom_screenboard\",\"id\":\"dam-zij-6w8\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/dam-zij-6w8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"dam-zij-6w8\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/284063", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":284063}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Delete custom screenboard dashboard from an existing dashboard list returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-03-21T19:16:47.751Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Delete_custom_timeboard_dashboard_from_an_existing_dashboard_list_returns_OK_response-1647890207" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Delete_custom_timeboard_dashboard_from_an_existing_dashboard_list_returns_OK_response-1647890207\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-03-21T19:16:47.932747+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-03-21T19:16:47.932757+00:00\",\"id\":284064}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Delete_custom_timeboard_dashboard_from_an_existing_dashboard_list_returns_OK_response-1647890207 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":null,\"template_variables\":null,\"is_read_only\":false,\"id\":\"x4b-fxa-rsf\",\"title\":\"Test-Delete_custom_timeboard_dashboard_from_an_existing_dashboard_list_returns_OK_response-1647890207 with Profile Metrics Query\",\"url\":\"/dashboard/x4b-fxa-rsf/test-deletecustomtimeboarddashboardfromanexistingdashboardlistreturnsokresponse\",\"created_at\":\"2022-03-21T19:16:48.250818+00:00\",\"modified_at\":\"2022-03-21T19:16:48.250818+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"id\":2963682212939376}],\"layout_type\":\"ordered\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboards": [ + { + "id": "x4b-fxa-rsf", + "type": "custom_timeboard" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dashboard/lists/manual/284064/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"added_dashboards_to_list\":[{\"type\":\"custom_timeboard\",\"id\":\"x4b-fxa-rsf\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboards": [ + { + "id": "x4b-fxa-rsf", + "type": "custom_timeboard" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/dashboard/lists/manual/284064/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboards_from_list\":[{\"type\":\"custom_timeboard\",\"id\":\"x4b-fxa-rsf\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/x4b-fxa-rsf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"x4b-fxa-rsf\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/284064", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":284064}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Delete custom timeboard dashboard from an existing dashboard list returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-03-21T19:16:49.586Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Get_items_of_a_Dashboard_List_returns_OK_response-1647890209" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Get_items_of_a_Dashboard_List_returns_OK_response-1647890209\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-03-21T19:16:49.783939+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-03-21T19:16:49.783947+00:00\",\"id\":284065}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Get_items_of_a_Dashboard_List_returns_OK_response-1647890209 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":null,\"template_variables\":null,\"is_read_only\":false,\"id\":\"ayt-gzk-ffi\",\"title\":\"Test-Get_items_of_a_Dashboard_List_returns_OK_response-1647890209 with Profile Metrics Query\",\"url\":\"/dashboard/ayt-gzk-ffi/test-getitemsofadashboardlistreturnsokresponse-1647890209-with-profile-metrics-q\",\"created_at\":\"2022-03-21T19:16:50.088193+00:00\",\"modified_at\":\"2022-03-21T19:16:50.088193+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"id\":2463979356913479}],\"layout_type\":\"ordered\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboards": [ + { + "id": "ayt-gzk-ffi", + "type": "custom_timeboard" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dashboard/lists/manual/284065/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"added_dashboards_to_list\":[{\"type\":\"custom_timeboard\",\"id\":\"ayt-gzk-ffi\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboard/lists/manual/284065/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"total\":1,\"dashboards\":[{\"popularity\":0,\"title\":\"Test-Get_items_of_a_Dashboard_List_returns_OK_response-1647890209 with Profile Metrics Query\",\"is_favorite\":false,\"id\":\"ayt-gzk-ffi\",\"icon\":null,\"integration_id\":null,\"is_shared\":false,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"url\":\"/dashboard/ayt-gzk-ffi/test-getitemsofadashboardlistreturnsokresponse-1647890209-with-profile-metrics-q\",\"created\":\"2022-03-21T19:16:50.088193+00:00\",\"modified\":\"2022-03-21T19:16:50.088193+00:00\",\"is_read_only\":false,\"type\":\"custom_timeboard\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/ayt-gzk-ffi", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"ayt-gzk-ffi\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/284065", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":284065}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get items of a Dashboard List returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboard Lists", + "frozen_at": "2022-03-21T19:16:51.597Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "name": "Test-Update_items_of_a_dashboard_list_returns_OK_response-1647890211" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard/lists/manual", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"is_favorite\":false,\"name\":\"Test-Update_items_of_a_dashboard_list_returns_OK_response-1647890211\",\"dashboard_count\":0,\"author\":{\"handle\":\"frog@datadoghq.com\",\"name\":null},\"created\":\"2022-03-21T19:16:51.788428+00:00\",\"type\":\"manual_dashboard_list\",\"dashboards\":null,\"modified\":\"2022-03-21T19:16:51.788437+00:00\",\"id\":284066}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Update_items_of_a_dashboard_list_returns_OK_response-1647890211 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":null,\"template_variables\":null,\"is_read_only\":false,\"id\":\"niu-g3w-pmy\",\"title\":\"Test-Update_items_of_a_dashboard_list_returns_OK_response-1647890211 with Profile Metrics Query\",\"url\":\"/dashboard/niu-g3w-pmy/test-updateitemsofadashboardlistreturnsokresponse-1647890211-with-profile-metric\",\"created_at\":\"2022-03-21T19:16:52.105822+00:00\",\"modified_at\":\"2022-03-21T19:16:52.105822+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"id\":7025397435910312}],\"layout_type\":\"ordered\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "free", + "title": "Test-Update_items_of_a_dashboard_list_returns_OK_response-1647890211 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + }, + "layout": { + "height": 10, + "width": 10, + "x": 10, + "y": 10 + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"notify_list\":null,\"description\":null,\"restricted_roles\":[],\"author_name\":null,\"template_variables\":null,\"is_read_only\":false,\"id\":\"kqn-ck6-7nq\",\"title\":\"Test-Update_items_of_a_dashboard_list_returns_OK_response-1647890211 with Profile Metrics Query\",\"url\":\"/dashboard/kqn-ck6-7nq/test-updateitemsofadashboardlistreturnsokresponse-1647890211-with-profile-metric\",\"created_at\":\"2022-03-21T19:16:52.400846+00:00\",\"modified_at\":\"2022-03-21T19:16:52.400846+00:00\",\"author_handle\":\"frog@datadoghq.com\",\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"search\":{\"query\":\"runtime:jvm\"},\"group_by\":[{\"facet\":\"service\",\"sort\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\",\"order\":\"desc\"},\"limit\":10}],\"compute\":{\"facet\":\"@prof_core_cpu_cores\",\"aggregation\":\"sum\"}}}],\"type\":\"timeseries\"},\"layout\":{\"y\":10,\"width\":10,\"x\":10,\"height\":10},\"id\":2927684530303517}],\"layout_type\":\"free\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboards": [ + { + "id": "niu-g3w-pmy", + "type": "custom_timeboard" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dashboard/lists/manual/284066/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"added_dashboards_to_list\":[{\"type\":\"custom_timeboard\",\"id\":\"niu-g3w-pmy\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "dashboards": [ + { + "id": "kqn-ck6-7nq", + "type": "custom_screenboard" + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/dashboard/lists/manual/284066/dashboards", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"dashboards\":[{\"type\":\"custom_screenboard\",\"id\":\"kqn-ck6-7nq\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/kqn-ck6-7nq", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"kqn-ck6-7nq\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/niu-g3w-pmy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"niu-g3w-pmy\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/lists/manual/284066", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_list_id\":284066}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update items of a dashboard list returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/dashboards.json b/test-server-data/v2/dashboards.json new file mode 100644 index 0000000000..cfab0c20b6 --- /dev/null +++ b/test-server-data/v2/dashboards.json @@ -0,0 +1,476 @@ +{ + "feature": "Dashboards", + "recordings": [ + { + "feature": "Dashboards", + "frozen_at": "2026-05-18T14:40:26.660Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboards/xxx-xxx-xxx/usage", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Dashboard not found for dashboard_id=xxx-xxx-xxx in org_id=321813 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get usage stats for a dashboard returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-05-18T14:40:26.861Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Get_usage_stats_for_a_dashboard_returns_OK_response-1779115226 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"cb5-47u-8yc\",\"title\":\"Test-Get_usage_stats_for_a_dashboard_returns_OK_response-1779115226 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/cb5-47u-8yc/test-getusagestatsforadashboardreturnsokresponse-1779115226-with-profile-metrics\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":7645859989261101}],\"notify_list\":null,\"created_at\":\"2026-05-18T14:40:27.022358+00:00\",\"modified_at\":\"2026-05-18T14:40:27.022358+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboards/cb5-47u-8yc/usage", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cb5-47u-8yc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Get_usage_stats_for_a_dashboard_returns_OK_response-1779115226 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-05-18T14:40:27.022358Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-05-18T14:40:27.022358Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":null}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/cb5-47u-8yc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"cb5-47u-8yc\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get usage stats for a dashboard returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-05-18T14:40:28.138Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboards/usage", + "query": [ + [ + "page[limit]", + "10000" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Input should be less than or equal to 500\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get usage stats for all dashboards returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-05-18T14:40:28.411Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "layout_type": "ordered", + "title": "Test-Get_usage_stats_for_all_dashboards_returns_OK_response-1779115228 with Profile Metrics Query", + "widgets": [ + { + "definition": { + "requests": [ + { + "profile_metrics_query": { + "compute": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores" + }, + "group_by": [ + { + "facet": "service", + "limit": 10, + "sort": { + "aggregation": "sum", + "facet": "@prof_core_cpu_cores", + "order": "desc" + } + } + ], + "search": { + "query": "runtime:jvm" + } + } + } + ], + "type": "timeseries" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v1/dashboard", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"wu3-x5g-reh\",\"title\":\"Test-Get_usage_stats_for_all_dashboards_returns_OK_response-1779115228 with Profile Metrics Query\",\"description\":null,\"author_handle\":\"frog@datadoghq.com\",\"author_name\":\"frog\",\"layout_type\":\"ordered\",\"url\":\"/dashboard/wu3-x5g-reh/test-getusagestatsforalldashboardsreturnsokresponse-1779115228-with-profile-metr\",\"template_variables\":null,\"widgets\":[{\"definition\":{\"requests\":[{\"profile_metrics_query\":{\"compute\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\"},\"group_by\":[{\"facet\":\"service\",\"limit\":10,\"sort\":{\"aggregation\":\"sum\",\"facet\":\"@prof_core_cpu_cores\",\"order\":\"desc\"}}],\"search\":{\"query\":\"runtime:jvm\"}}}],\"type\":\"timeseries\"},\"id\":2898809444744372}],\"notify_list\":null,\"created_at\":\"2026-05-18T14:40:28.606887+00:00\",\"modified_at\":\"2026-05-18T14:40:28.606887+00:00\",\"restricted_roles\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboards/usage", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"22p-zw6-qia\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1770895286 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:21:26.907249Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:21:26.907249Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28204906085021153}},{\"id\":\"284-wiv-iqk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-21T21:02:03.739689Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-21T21:02:03.739689Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"287-waf-fua\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1770981465 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:45.310427Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:45.310427Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2852179956698162}},{\"id\":\"29x-55z-rt2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T22:20:08.019993Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:20:09.093470Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2be-q62-ep5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-23T00:04:08.199090Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-23T00:04:08.199090Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2cz-cim-bga\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771235251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:32.359535Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:32.359535Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2945502017336819}},{\"id\":\"2fb-2xi-b3r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771048054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:35.029821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:35.029821Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2876666193692902}},{\"id\":\"2fn-zr3-4jy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771249651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T13:47:32.319363Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T13:47:32.319363Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2950797141452782}},{\"id\":\"2fp-uaa-dxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770904050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:31.270385Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:31.270385Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2823713422390794}},{\"id\":\"2gn-qtd-zd9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:54:10.920756Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:54:57.107615Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"2m8-ht3-7kf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.660825Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.660825Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2n8-amr-8ws\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_hostmap_widget_1738642608\",\"teams\":[],\"created_at\":\"2025-02-04T04:16:49.306022Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-04T04:16:49.306022Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2ph-z9s-3ma\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771019257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:37.816410Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:37.816410Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2866076940564898}},{\"id\":\"2qn-4hs-6nz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-06T18:28:02.296323Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T18:28:02.296323Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2rd-dc2-4qz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"delete-me\",\"teams\":[],\"created_at\":\"2023-04-04T07:20:20.175651Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-04-04T07:25:00.141124Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2t6-ira-9sr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-26T16:19:46.726552Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-26T16:19:46.726552Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"2w5-uyn-tkh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771390145 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T04:49:05.674863Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T04:49:05.674863Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.30024590740843354}},{\"id\":\"2wf-ez7-j7s\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771048050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:31.238278Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:31.238278Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28766647994426764}},{\"id\":\"37f-p9m-n5a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_updateToRbac-local-1776085112\",\"teams\":[],\"created_at\":\"2026-04-13T12:58:33.957713Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-13T12:58:33.957713Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.2067271396582174}},{\"id\":\"37v-ks5-42n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771019250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:31.237085Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:31.237085Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2866074521225058}},{\"id\":\"38e-jd2-pvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771033651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T01:47:32.276189Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T01:47:32.276189Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28713700422106986}},{\"id\":\"3ag-svk-vks\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771379257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:37.819031Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:37.819031Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29984554137462616}},{\"id\":\"3bd-yi5-t9f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-01-24T20:36:07.585183Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-24T20:36:07.585183Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":9,\"image\":1,\"hostmap\":1,\"heatmap\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3dh-twk-s46\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771364857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:37.812316Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:37.812316Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29931602723863215}},{\"id\":\"3f9-4ni-c37\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bruce Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-10-04T18:55:30.384138Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":5,\"viewed_at\":\"2025-08-19T14:16:27.955000Z\",\"viewer\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":5,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-08-18T19:22:40.421722Z\",\"widget_count\":19,\"widget_count_by_type\":{\"alert_graph\":2,\"alert_value\":2,\"change\":1,\"distribution\":1,\"check_status\":1,\"heatmap\":1,\"hostmap\":1,\"note\":2,\"query_value\":1,\"query_table\":1,\"scatterplot\":1,\"servicemap\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"3gp-ihg-25a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:49.231714Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:49.231714Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3hx-aas-pkd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:07:47.665899Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T01:11:49.409229Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3ia-t26-3ny\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Powerpack Test\",\"teams\":[],\"created_at\":\"2023-09-12T17:24:07.448153Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2026-04-10T14:49:57.534000Z\",\"viewer\":{\"id\":\"21235577\",\"name\":\"Francesco Pighi\",\"handle\":\"francesco.pighi@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2023-09-12T17:24:07.448153Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.2026679121677571}},{\"id\":\"3jf-enh-rvf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770889652 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T09:47:32.857235Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T09:47:32.857235Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2818418866977467}},{\"id\":\"3jh-dek-qps\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-08T21:59:54.884830Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T22:00:29.988353Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"3jt-5cb-icy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-02-24T20:40:32.063650Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-24T20:40:33.482665Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"3kr-vna-uug\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:56:42.073944Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:56:42.073944Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3mh-eua-8gx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771264055 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T17:47:35.437223Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T17:47:35.437223Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2956093426792953}},{\"id\":\"3nb-3ce-ckg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_a_shared_dashboard_returns_OK_response-1771240877 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:17.935183Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:17.935183Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29475706425980197}},{\"id\":\"3nb-t26-7yu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771105650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T21:47:31.428318Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T21:47:31.428318Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2897845424867695}},{\"id\":\"3uh-fgj-iu9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_events_qu_1771155581\",\"teams\":[],\"created_at\":\"2026-02-15T11:39:41.627411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T11:39:41.627411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"distribution\":1},\"dashboard_quality_score\":0.38882742089832584}},{\"id\":\"3uv-rz7-km5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Proxmox Overview host dashboards\",\"teams\":[],\"created_at\":\"2025-07-25T19:59:43.297508Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-07-25T19:59:43.579000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-07-25T20:00:11.931527Z\",\"widget_count\":40,\"widget_count_by_type\":{\"group\":8,\"note\":5,\"query_value\":10,\"list_stream\":1,\"manage_status\":1,\"toplist\":2,\"timeseries\":9,\"query_table\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"3xf-myy-c3f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createAdmin-local-1774386000\",\"teams\":[],\"created_at\":\"2026-03-24T21:00:04.874787Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-24T21:00:04.874787Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.179413786344114}},{\"id\":\"3y3-3x5-kq8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-11-09T16:03:35.113528Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-09T16:03:47.912796Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"43b-kw6-vqr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2023-09-20T09:37:10.513590Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-06T14:44:10.522900Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":10,\"image\":1,\"hostmap\":1,\"heatmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"43k-xij-6fu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771393651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:32.095399Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:32.095399Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3003748447936856}},{\"id\":\"48h-7qq-cih\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Heather's Dashboard Mon, Jun 30, 11:32:33 am\",\"teams\":[],\"created_at\":\"2025-06-30T15:32:33.156114Z\",\"author\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views\":4,\"viewed_at\":\"2025-06-30T15:35:37.715000Z\",\"viewer\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":4,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-06-30T15:33:00.626392Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"49w-wru-9r3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771336054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:35.021426Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:35.021426Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2982568968329764}},{\"id\":\"4ai-qzh-uxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771192051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T21:47:32.249226Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T21:47:32.249226Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2929616560052716}},{\"id\":\"4b5-8v7-rh2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771336050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:31.201562Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:31.201562Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29825675636962523}},{\"id\":\"4ic-zm9-api\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardSpans_NoHideIncompleteCostData-local-1771030254\",\"teams\":[],\"created_at\":\"2026-02-14T00:50:57.448221Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T00:50:57.448221Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.38268289372150466}},{\"id\":\"4ig-4ks-6c8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770990454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T13:47:35.017644Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T13:47:35.017644Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28554856336037004}},{\"id\":\"4j8-nbn-4gi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-09-28T01:37:23.346984Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-28T01:37:23.346984Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4m8-kr3-ca4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771076850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T13:47:31.252396Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T13:47:31.252396Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2887255082386866}},{\"id\":\"4mv-u7u-ysx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_shared_dashboard_with_a_group_template_variable_returns_OK_response_1771163253 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T13:47:33.853020Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T13:47:33.853020Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29190268720160345}},{\"id\":\"4n7-s4g-dqv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"For dashboard list tests - DO NOT DELETE\",\"teams\":[],\"created_at\":\"2020-02-11T13:49:29.555334Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-04-08T17:54:25.574039Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"4nf-i9k-t87\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771379250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:31.220114Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:31.220114Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2998452987181588}},{\"id\":\"4sx-tiz-2qu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770745657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:37.768200Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:37.768200Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2765469283919025}},{\"id\":\"4td-xzm-6yq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Create_a_new_dashboard_with_a_toplist_widget_sorted_by_group-1772531926\",\"teams\":[],\"created_at\":\"2026-03-03T09:58:47.282663Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-03T09:58:47.282663Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.34223126986457164}},{\"id\":\"4ud-du4-pi3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-17T08:32:02.449350Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-17T08:32:02.449350Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"4uk-xyr-myu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_funnel_widget_1775734738 with funnel widget\",\"teams\":[],\"created_at\":\"2026-04-09T11:38:59.468470Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-09T11:38:59.468470Z\",\"widget_count\":1,\"widget_count_by_type\":{\"funnel\":1},\"dashboard_quality_score\":0.4600044320788619}},{\"id\":\"4vs-2aj-87j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770731251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T13:47:32.144492Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T13:47:32.144492Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27601720770897226}},{\"id\":\"4wp-g9w-rqp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T16:34:52.946050Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T16:34:52.946050Z\",\"widget_count\":1,\"widget_count_by_type\":{\"change\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4wy-ajm-bvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:35:18.554744Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:35:18.554744Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"4z7-iip-zrt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T17:09:12.214893Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:09:12.874904Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4zw-ifc-4pv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770745651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:32.295694Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:32.295694Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2765467271576857}},{\"id\":\"55v-ka5-rne\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770745655 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:35.397058Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:35.397058Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2765468412003758}},{\"id\":\"59f-bun-r3c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T15:17:19.954644Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T15:17:33.545302Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"list_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5bg-c69-wq9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771062450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T09:47:31.220095Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T09:47:31.220095Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2881959931613793}},{\"id\":\"5cj-8j7-qpy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Octopus Deploy Overview\",\"teams\":[],\"created_at\":\"2024-12-11T20:48:25.007210Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":27,\"viewed_at\":\"2025-01-16T20:42:51.598000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":27,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-16T20:12:02.010750Z\",\"widget_count\":31,\"widget_count_by_type\":{\"group\":6,\"note\":5,\"query_value\":8,\"list_stream\":2,\"toplist\":2,\"timeseries\":1,\"query_table\":7},\"dashboard_quality_score\":0.0}},{\"id\":\"5gx-3pv-cwk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1771327301 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:41.852380Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:41.852380Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29793502706931224}},{\"id\":\"5i4-3c5-qby\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 1:37:28 pm\",\"teams\":[],\"created_at\":\"2023-12-20T18:37:28.853122Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T18:37:28.853122Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"5mk-tv6-3wt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771321657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:47:37.701536Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:47:37.701536Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2977274814953296}},{\"id\":\"5mr-xms-2qa\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T22:16:56.913567Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:16:57.568474Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5qz-2i3-6cq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T14:14:41.648472Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T14:14:41.648472Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5r9-yr4-f7p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770970019 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T08:06:59.825960Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T08:06:59.825960Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2847971246195878}},{\"id\":\"5ti-jks-zwd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770832051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T17:47:32.154507Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T17:47:32.154507Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27972380529638946}},{\"id\":\"5tp-tr6-93q\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-21T13:59:15.028164Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-21T13:59:15.028164Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5uv-zxz-4r8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771004851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T17:47:32.259530Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T17:47:32.259530Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2860779758248462}},{\"id\":\"5vp-fxm-s4j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"PCF Testing\",\"teams\":[],\"created_at\":\"2022-06-08T10:40:29.941695Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":161,\"viewed_at\":\"2026-05-15T19:53:55.277000Z\",\"viewer\":{\"id\":\"67399597\",\"name\":\"Kyle Neale\",\"handle\":\"kyle.neale@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":161,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-05-15T21:03:07.093496Z\",\"widget_count\":22,\"widget_count_by_type\":{\"group\":4,\"hostmap\":2,\"timeseries\":5,\"query_table\":9,\"trace_service\":1,\"list_stream\":1},\"dashboard_quality_score\":0.7276695720872501}},{\"id\":\"5yv-q5c-8m3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770737540 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T15:32:20.553171Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T15:32:20.553171Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2762484437983195}},{\"id\":\"63v-49e-a7d\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"sarah test\",\"teams\":[],\"created_at\":\"2023-05-15T18:12:47.853642Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-05-15T18:25:28.895732Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"669-8wg-nfr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770803257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T09:47:37.746546Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T09:47:37.746546Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2786649831475839}},{\"id\":\"679-8up-bf2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-04-14T13:40:43.116109Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-14T13:40:43.116109Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"67i-fs9-rzn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Teleport Overview\",\"teams\":[],\"created_at\":\"2024-04-03T15:04:15.262442Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-11-01T18:56:10.280000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-06-04T14:49:15.193580Z\",\"widget_count\":44,\"widget_count_by_type\":{\"group\":8,\"note\":3,\"query_value\":8,\"timeseries\":25},\"dashboard_quality_score\":0.0}},{\"id\":\"67s-cju-w7w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770832057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T17:47:37.795289Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T17:47:37.795289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2797240127174032}},{\"id\":\"6by-h9d-gui\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"MM RBAC Dashboard\",\"teams\":[],\"created_at\":\"2021-04-23T16:14:13.820995Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-23T16:14:13.820995Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6e7-n4p-tdp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771033657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T01:47:37.805777Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T01:47:37.805777Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28713720754741917}},{\"id\":\"6ez-pq7-4zk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_shared_dashboard_returns_OK_response-1689999025 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2023-07-22T04:10:25.713775Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-22T04:10:25.713775Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6md-r2g-kxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-17T03:08:25.445281Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-17T03:08:25.445281Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6pm-2ad-2v8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-15T13:45:39.004786Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:45:40.299693Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6qu-cxf-9jy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.237970Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.237970Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6rw-fcg-izv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771105651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T21:47:32.200877Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T21:47:32.200877Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28978457088934567}},{\"id\":\"6v2-52t-9m7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771091250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T17:47:31.249672Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T17:47:31.249672Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2892550220228939}},{\"id\":\"6vb-yrz-ag6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770918450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T17:47:31.238722Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T17:47:31.238722Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2829008549535302}},{\"id\":\"6vv-phh-8te\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770731257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T13:47:37.794992Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T13:47:37.794992Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2760174154837683}},{\"id\":\"6xb-usd-min\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-12-04T15:37:35.427082Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-12-04T15:37:35.427082Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.06021835561049866}},{\"id\":\"73p-kiw-ike\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771091251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T17:47:32.262566Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T17:47:32.262566Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2892550592686626}},{\"id\":\"74v-m9u-yzs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Event Timeline Widget Dashboard\",\"teams\":[],\"created_at\":\"2020-12-10T04:21:12.270024Z\",\"author\":null,\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-12-10T04:21:12.270024Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_timeline\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"76m-n9x-wd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"DL FF TF\",\"teams\":[],\"created_at\":\"2021-02-02T13:54:05.514952Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-02-02T13:54:05.514952Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"795-wur-2am\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:13.784143Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:13.784143Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"7b3-yvp-mmq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T16:16:55.297530Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T16:16:55.297530Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7bt-mcb-a9f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2026-05-08T03:12:09.665811Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-05-08T03:12:09.665811Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.5510216256252313}},{\"id\":\"7dp-46c-6tr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-07T16:37:56.369573Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-07T16:37:56.369573Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7ia-ywt-ixn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770955619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T04:06:59.844956Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T04:06:59.844956Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28426761142753754}},{\"id\":\"7j9-9in-7md\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770904051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:32.262502Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:32.262502Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2823713787104167}},{\"id\":\"7kp-v5x-s54\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1771327312 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:52.754388Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:52.754388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2979354279514505}},{\"id\":\"7ns-vmc-rup\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardListStream-local-1772801028\",\"teams\":[],\"created_at\":\"2026-03-06T12:43:50.956179Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-06T12:43:50.956179Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.4695022609867474}},{\"id\":\"7q2-h97-j2m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_items_of_a_Dashboard_List_returns_OK_response_1731709308 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-11-15T22:21:49.262821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-15T22:21:49.262821Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"7ui-ttk-rjb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771336051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:32.369190Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:32.369190Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2982567993000199}},{\"id\":\"7v3-gfj-zzr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770760050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T21:47:31.212371Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T21:47:31.212371Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2770762012061138}},{\"id\":\"7yi-rk7-7kw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770947250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T01:47:31.242266Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T01:47:31.242266Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28395988286092905}},{\"id\":\"7ym-viw-7if\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard created using cloudformation template\",\"teams\":[],\"created_at\":\"2024-09-27T18:25:34.741716Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-27T18:25:34.741716Z\",\"widget_count\":60,\"widget_count_by_type\":{\"group\":6,\"timeseries\":17,\"toplist\":17,\"sunburst\":1,\"hostmap\":1,\"query_value\":18},\"dashboard_quality_score\":0.0}},{\"id\":\"823-wmx-kyk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T21:30:35.101006Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T21:30:36.200544Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"86h-24u-mwc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vSphere VM Property Metrics\",\"teams\":[],\"created_at\":\"2023-07-18T18:13:38.804575Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T19:57:25.366422Z\",\"widget_count\":14,\"widget_count_by_type\":{\"query_table\":10,\"treemap\":1,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"884-jxj-d7f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Infrastructure Overview\",\"teams\":[],\"created_at\":\"2024-01-04T11:25:42.564360Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-05T18:05:45.334010Z\",\"widget_count\":64,\"widget_count_by_type\":{\"note\":8,\"timeseries\":17,\"hostmap\":2,\"query_value\":32,\"toplist\":3,\"query_table\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"88m-nrr-j4c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_shared_dashboard_returns_OK_response_1720742852 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-07-12T00:07:33.291059Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-12T00:07:33.291059Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"89p-5x9-mfp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T04:09:45.848591Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T04:09:45.848591Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8d7-qz3-urj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771128419 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T04:06:59.945411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T04:06:59.945411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2906217817873656}},{\"id\":\"8ev-2hz-9yh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771364854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:35.065546Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:35.065546Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2993159262270882}},{\"id\":\"8fj-gzg-78v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770932854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T21:47:35.023675Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T21:47:35.023675Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2834305080206865}},{\"id\":\"8kf-ip5-ict\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Heather's Dashboard Fri, Aug 1, 4:48:55 pm\",\"teams\":[],\"created_at\":\"2025-08-01T20:48:55.649802Z\",\"author\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views\":4,\"viewed_at\":\"2025-08-01T20:49:40.239000Z\",\"viewer\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":4,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-08-01T20:49:22.242970Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8mr-z8r-xaq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:22.284588Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:22.284588Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"8ny-iwn-ira\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardEventTimeline-local-1776820257\",\"teams\":[],\"created_at\":\"2026-04-22T01:11:00.774052Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-22T01:11:00.774052Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_timeline\":1},\"dashboard_quality_score\":0.21854470035954052}},{\"id\":\"8qn-sx4-6py\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:57:16.337700Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:57:16.337700Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8r3-fr7-g8h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-03T11:06:05.600888Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-03T18:00:35.762592Z\",\"widget_count\":3,\"widget_count_by_type\":{\"hostmap\":1,\"timeseries\":1,\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8rp-qrc-d72\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Java-Create_a_new_dashboard_with_geomap_widget-1737861024\",\"teams\":[],\"created_at\":\"2025-01-26T03:10:24.707218Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-26T03:10:24.707218Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8rq-w48-cav\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1770981477 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:57.935448Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:57.935448Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2852184599023656}},{\"id\":\"8v6-29d-g7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Timeboard Dashboard 1769733\",\"teams\":[],\"created_at\":\"2024-10-04T18:49:59.050042Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:49:59.050042Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8va-as3-xfj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771099619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T20:06:59.844113Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T20:06:59.844113Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28956275028407824}},{\"id\":\"8vg-n3m-t2r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog's Dashboard Mon, Sep 18, 1:11:53 pm (cloned)\",\"teams\":[],\"created_at\":\"2023-10-13T14:28:19.062400Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-13T14:28:19.062400Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8w6-777-dbc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:52.825402Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:52.825402Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8wn-wbp-bpe\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771243619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T12:06:59.843565Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T12:06:59.843565Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29485788915253947}},{\"id\":\"8yn-6s7-pue\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T01:34:46.545176Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T01:34:46.545176Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8z4-u8g-ecy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771200419 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T00:06:59.836148Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T00:06:59.836148Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2932693472130468}},{\"id\":\"92s-2qq-7ib\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1776560567\",\"teams\":[],\"created_at\":\"2026-04-19T01:02:52.517316Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2026-05-06T16:41:02.642000Z\",\"viewer\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-04-19T01:02:52.517316Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.2388861655718952}},{\"id\":\"92z-j9h-rpi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770745650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:31.175796Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:31.175796Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2765466859707376}},{\"id\":\"96c-d6b-txk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771134451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T05:47:32.238314Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T05:47:32.238314Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2908436000413892}},{\"id\":\"986-sdj-7f5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770947257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T01:47:37.813715Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T01:47:37.813715Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28396012450329816}},{\"id\":\"998-r9i-nmq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770889657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T09:47:37.810139Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T09:47:37.810139Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28184206881619533}},{\"id\":\"9bz-xsh-sd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770976054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T09:47:35.350772Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T09:47:35.350772Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28501906171413455}},{\"id\":\"9cb-ici-wh9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770788857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T05:47:37.728846Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T05:47:37.728846Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2781354686045877}},{\"id\":\"9dy-6d6-92u\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"KubeVirt Overview (DEV)\",\"teams\":[],\"created_at\":\"2025-01-07T07:17:49.547882Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":10,\"viewed_at\":\"2025-01-07T15:05:57.088000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":10,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-07T07:18:50.881143Z\",\"widget_count\":48,\"widget_count_by_type\":{\"group\":6,\"note\":1,\"query_value\":4,\"timeseries\":31,\"query_table\":2,\"toplist\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"9fh-bsk-dez\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T06:21:51.929267Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T06:21:51.929267Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gp-yca-ewc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-07-03T05:06:40.070179Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-03T05:06:40.070179Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gw-nvp-fv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:16:01.442667Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:16:01.442667Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9hv-ptz-8ca\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770846451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T21:47:31.833721Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T21:47:31.833721Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.280253307385377}},{\"id\":\"9j7-b7g-fmp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-07-07T17:12:20.570681Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:12:21.707927Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9km-gj8-2rj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:20:54.758861Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:21:08.649752Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9kx-z8g-k6m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770867140 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T03:32:20.633759Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T03:32:20.633759Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28101407175773013}},{\"id\":\"9nh-zpi-6qr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770904054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:35.018170Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:35.018170Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28237148003862317}},{\"id\":\"9qq-fww-7dt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_event_stream_list_stream_widget_1736259735 with list_stream widget\",\"teams\":[],\"created_at\":\"2025-01-07T14:22:16.267384Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-07T14:22:16.267384Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9ra-4tp-6x8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:30:44.267214Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:30:44.267214Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9re-h8a-8tw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardStyle-local-1773413743\",\"teams\":[],\"created_at\":\"2026-03-13T14:55:46.971416Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-13T14:55:46.971416Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3746573651820967}},{\"id\":\"9td-t9c-kk7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T14:04:12.968245Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T16:29:07.018541Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"event_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9tw-t3j-j2j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:33.097538Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:33.097538Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9wr-ifb-ks3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard for testing\",\"teams\":[],\"created_at\":\"2024-06-28T14:32:31.419746Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-28T14:32:31.419746Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":1,\"sunburst\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9ze-x5d-4uk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-02T10:21:50.272937Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-02T10:21:50.272937Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9zn-yrm-f5x\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bruce Timeboard Dashboard New1\",\"teams\":[],\"created_at\":\"2025-08-18T19:43:21.235986Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":4,\"viewed_at\":\"2025-08-19T14:17:27.783000Z\",\"viewer\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":4,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-08-18T19:43:21.235986Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"a2m-4ke-pvn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771350450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T17:47:31.256739Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T17:47:31.256739Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2987862722785235}},{\"id\":\"a4r-ixp-f77\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1770981467 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:47.463943Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:47.463943Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2852180748437294}},{\"id\":\"aaq-h42-uug\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771292851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T01:47:32.150956Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T01:47:32.150956Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29666824960484295}},{\"id\":\"ab7-eca-ywv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771206450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T01:47:31.251500Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T01:47:31.251500Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29349113319682957}},{\"id\":\"anz-4xk-5rd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771163254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T13:47:35.016746Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T13:47:35.016746Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2919027299849888}},{\"id\":\"arc-fsp-y6c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771364854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:34.823663Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:34.823663Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29931591732937646}},{\"id\":\"asp-qkq-xha\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:47:56.046241Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:53:05.322597Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"asx-682-bd2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771019254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:35.043844Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:35.043844Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2866075920923335}},{\"id\":\"av3-b6t-5d4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771120057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T01:47:37.800815Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T01:47:37.800815Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2903142906932992}},{\"id\":\"axt-yuk-b8k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771186019 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T20:06:59.834652Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T20:06:59.834652Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2927398332665977}},{\"id\":\"b2p-ixy-wbd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T02:22:19.767227Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T02:22:19.767227Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"b2x-2d8-smj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vsphere test\",\"teams\":[],\"created_at\":\"2023-11-15T14:29:57.863141Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-17T15:09:09.324288Z\",\"widget_count\":10,\"widget_count_by_type\":{\"note\":2,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b3e-rar-7dg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771249657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T13:47:37.710012Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T13:47:37.710012Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2950799123541292}},{\"id\":\"b6n-8j5-2iz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned) (cloned)\",\"teams\":[],\"created_at\":\"2023-09-26T09:00:00.247208Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-05T14:50:19.276985Z\",\"widget_count\":42,\"widget_count_by_type\":{\"image\":1,\"note\":5,\"hostmap\":1,\"timeseries\":9,\"query_value\":21,\"heatmap\":2,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"b6n-d8r-7em\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: splunk LB \",\"teams\":[],\"created_at\":\"2021-05-03T13:03:46.217614Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-03T13:03:46.217614Z\",\"widget_count\":12,\"widget_count_by_type\":{\"note\":3,\"slo\":1,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b8u-q5n-6xn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770766340 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T23:32:20.553044Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T23:32:20.553044Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27730747156551677}},{\"id\":\"b9v-vd2-fq2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Etiennes Dashboard Tue, Mar 18, 3:56:32 pm\",\"teams\":[],\"created_at\":\"2025-03-18T14:56:32.569828Z\",\"author\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-03-18T14:56:32.743000Z\",\"viewer\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-03-18T14:57:27.767981Z\",\"widget_count\":1,\"widget_count_by_type\":{\"query_value\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ba4-5j6-8be\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771324708 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T10:38:29.056240Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T10:38:29.056240Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29783968528489124}},{\"id\":\"bby-apf-qxh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_a_shared_dashboard_returns_OK_response-1770981464 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:44.522761Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:44.522761Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2852179666902397}},{\"id\":\"bcy-i9m-yk2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-26T09:52:25.783725Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-26T09:52:25.783725Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bde-dby-we2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770932850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T21:47:31.228195Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T21:47:31.228195Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2834303684500229}},{\"id\":\"bgf-jzg-b7a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (shanel clone)\",\"teams\":[],\"created_at\":\"2024-06-06T17:13:17.485112Z\",\"author\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T17:28:16.789541Z\",\"widget_count\":156,\"widget_count_by_type\":{\"group\":11,\"note\":28,\"check_status\":8,\"query_value\":59,\"query_table\":24,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"bgp-uee-rt3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:51.418778Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:51.418778Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bjz-fmp-fv7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770774451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T01:47:32.146629Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T01:47:32.146629Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2776057494443591}},{\"id\":\"bpc-yw5-2ai\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-11T05:06:09.509411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-11T05:06:09.509411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bpj-ytu-fpt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:46:41.035816Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:48:05.847943Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"bru-u6k-rjq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Wisdom\",\"teams\":[],\"created_at\":\"2021-12-15T14:39:24.510324Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-12-15T16:54:32.046189Z\",\"widget_count\":14,\"widget_count_by_type\":{\"note\":2,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"brz-7z3-9w7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771027619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T00:06:59.982674Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T00:06:59.982674Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28691518593066434}},{\"id\":\"bu8-gue-27p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bosh AutoRelease Testing (cloned)\",\"teams\":[],\"created_at\":\"2023-09-01T08:05:20.514088Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-08-01T12:48:01.368000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2023-09-01T08:08:49.528818Z\",\"widget_count\":11,\"widget_count_by_type\":{\"note\":1,\"free_text\":5,\"query_table\":3,\"timeseries\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"bvb-yc9-exe\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"debian (cloned)\",\"teams\":[],\"created_at\":\"2025-08-06T16:25:39.628071Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":3,\"viewed_at\":\"2025-08-06T16:27:42.045000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":3,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-08-06T16:28:13.557631Z\",\"widget_count\":4,\"widget_count_by_type\":{\"timeseries\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"bvm-3qi-iuq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771393654 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:35.059151Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:35.059151Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3003749537648578}},{\"id\":\"byj-yvx-u34\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardTopologyMap-local-1772643592\",\"teams\":[],\"created_at\":\"2026-03-04T16:59:55.987040Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-04T16:59:55.987040Z\",\"widget_count\":1,\"widget_count_by_type\":{\"topology_map\":1},\"dashboard_quality_score\":0.46178337183529905}},{\"id\":\"c5w-bu2-9tj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1774284510\",\"teams\":[],\"created_at\":\"2026-03-23T16:48:34.042558Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-23T16:48:34.042558Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.17778231076946094}},{\"id\":\"c5z-eix-jck\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_a_toplist_widget_with_stacked_type_and_no_legend_specified_1742496578\",\"teams\":[],\"created_at\":\"2025-03-20T18:49:39.343102Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-20T18:49:39.343102Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"c7v-rr4-syc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771048057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:37.791536Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:37.791536Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28766672090607276}},{\"id\":\"ce2-rip-h9m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771235250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:31.226370Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:31.226370Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2945501600486306}},{\"id\":\"cf8-ifs-4vf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 10:34:03 am\",\"teams\":[],\"created_at\":\"2023-12-20T15:34:03.307486Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T15:34:03.307486Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ch3-ufm-3r3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771278457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T21:47:37.708347Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T21:47:37.708347Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29613894006908703}},{\"id\":\"chp-364-vkw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1770809020 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T11:23:40.360996Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:23:40.360996Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2788768848339404}},{\"id\":\"cmr-azj-aw6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.386452Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.386452Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"cpe-53e-zpe\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1770895295 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:21:35.806052Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:21:35.806052Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2820493880579771}},{\"id\":\"cph-7er-div\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771379251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:32.093932Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:32.093932Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.299845330839013}},{\"id\":\"cpz-ukf-zgw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Nutanix Overview (cloned)\",\"teams\":[],\"created_at\":\"2026-03-17T17:42:02.849648Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":3,\"viewed_at\":\"2026-03-18T10:28:43.858000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":3,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-03-17T17:42:02.849648Z\",\"widget_count\":69,\"widget_count_by_type\":{\"group\":5,\"image\":1,\"query_value\":24,\"note\":5,\"timeseries\":27,\"toplist\":4,\"query_table\":3},\"dashboard_quality_score\":0.6818860470532752}},{\"id\":\"cqe-tb8-kag\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770881540 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T07:32:20.535221Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T07:32:20.535221Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28154358201949387}},{\"id\":\"cw4-irn-n79\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T21:55:02.601652Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:55:02.601652Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"cx2-6g6-mni\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_timeseries_widget_with_legacy_live_span_time_format_1739376942 with legacy live span time\",\"teams\":[],\"created_at\":\"2025-02-12T16:15:43.276834Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-12T16:15:43.276834Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"cxr-rw5-dfb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Dashboard Wed, Oct 11, 2:07:21 pm\",\"teams\":[],\"created_at\":\"2023-10-11T18:07:21.856517Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T20:32:00.487697Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"d27-b4r-765\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1771240889 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:29.190827Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:29.190827Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2947574781371176}},{\"id\":\"d44-daj-rt3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771235254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:35.291802Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:35.291802Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29455030954105843}},{\"id\":\"d4c-zbf-ehz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771332545 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T12:49:05.720282Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T12:49:05.720282Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29812785350879384}},{\"id\":\"d5e-dpd-umy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Infrastructure Overview\",\"teams\":[],\"created_at\":\"2024-01-05T16:22:20.712589Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":24,\"viewed_at\":\"2026-02-11T14:59:44.086000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":24,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-10-28T14:33:21.452494Z\",\"widget_count\":83,\"widget_count_by_type\":{\"group\":5,\"note\":14,\"treemap\":1,\"hostmap\":1,\"query_value\":39,\"timeseries\":18,\"toplist\":3,\"query_table\":2},\"dashboard_quality_score\":0.4884871419597444}},{\"id\":\"d7b-d5m-7jw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Proxmox Overview\",\"teams\":[],\"created_at\":\"2025-07-10T13:46:05.531316Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":59,\"viewed_at\":\"2025-07-25T17:15:01.679000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":59,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-07-16T13:37:42.454688Z\",\"widget_count\":40,\"widget_count_by_type\":{\"group\":8,\"note\":5,\"query_value\":10,\"list_stream\":1,\"manage_status\":1,\"toplist\":3,\"timeseries\":8,\"query_table\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"d9k-7wu-vwn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardTabUpdate-local-1774284040\",\"teams\":[],\"created_at\":\"2026-03-23T16:40:44.085796Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-23T16:40:53.238271Z\",\"widget_count\":3,\"widget_count_by_type\":{\"note\":3},\"dashboard_quality_score\":0.17777490329256843}},{\"id\":\"d9n-2k5-rjr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771120050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T01:47:31.229462Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T01:47:31.229462Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2903140490499855}},{\"id\":\"dc4-sn4-x3c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771307251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T05:47:32.139096Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T05:47:32.139096Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2971977630543733}},{\"id\":\"dea-tup-asp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-01-24T17:57:50.017145Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-24T17:57:50.017145Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"deh-2pa-jv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Timeboard Wed, Mar 3, 10:57:28 am\",\"teams\":[],\"created_at\":\"2021-03-03T09:57:28.304302Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-03-03T09:59:37.861240Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"dep-fr9-h4z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771214819 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T04:06:59.939941Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T04:06:59.939941Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2937988649129915}},{\"id\":\"dgv-rzf-sdg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771319423 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:10:23.922075Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:10:23.922075Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2976453413971817}},{\"id\":\"dis-ra2-zyk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770918454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T17:47:35.362355Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T17:47:35.362355Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28290100657911676}},{\"id\":\"dkd-m4y-nfc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-07-29T16:45:28.934525Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-29T16:45:31.392137Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"dmj-ttd-6fy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1771327303 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:43.612738Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:43.612738Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29793509178915295}},{\"id\":\"dnm-hvh-9hw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771301219 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T04:06:59.854762Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T04:06:59.854762Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2969759451139266}},{\"id\":\"dvv-i5b-zbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (cloned)\",\"teams\":[],\"created_at\":\"2024-01-08T19:23:43.013799Z\",\"author\":{\"id\":\"6515857\",\"name\":\"Candace Shamieh\",\"handle\":\"candace.shamieh@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-08T19:42:17.791727Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"timeseries\":26,\"query_table\":21},\"dashboard_quality_score\":0.0}},{\"id\":\"dw4-m52-byx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_logs_stream_list_stream_widget_and_storage_parameter_1733350921 with list_stream widget\",\"teams\":[],\"created_at\":\"2024-12-04T22:22:01.830291Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-04T22:22:01.830291Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"dwv-37t-bd6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770846452 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T21:47:32.382782Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T21:47:32.382782Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28025332756994564}},{\"id\":\"dyc-y4i-su4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771220851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T05:47:32.212811Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T05:47:32.212811Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29402068243087226}},{\"id\":\"dzm-bwc-ean\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ListStream\",\"teams\":[],\"created_at\":\"2025-02-25T10:01:52.815694Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-25T10:01:52.815694Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e63-myc-uhh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Orchestrator Writer [EP]\",\"teams\":[],\"created_at\":\"2022-03-29T12:23:13.061726Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-03-29T12:23:13.061726Z\",\"widget_count\":57,\"widget_count_by_type\":{\"group\":7,\"timeseries\":47,\"sunburst\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"e7c-akg-fbj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1771327313 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:53.347737Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:53.347737Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2979354497619158}},{\"id\":\"e7w-ted-kp5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T19:50:57.927100Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T19:50:58.454696Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e84-h6q-8ru\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-02-03T14:05:45.526436Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-02-03T14:05:47.627593Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e88-itr-s9c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardFreeText_import-local-1738715031\",\"teams\":[],\"created_at\":\"2025-02-05T00:23:56.182926Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-05T00:23:56.182926Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"e8c-sk3-j9y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-14T02:11:46.227958Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-14T02:11:46.227958Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eg4-nui-f7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T16:11:30.640663Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T16:11:31.171270Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"egd-5vg-rac\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-10T14:20:28.977761Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-10T14:20:29.512718Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ehj-axw-7z7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T14:51:18.428821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:21:55.042874Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ekk-7pk-gs8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771192054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T21:47:34.995462Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T21:47:34.995462Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29296175697558524}},{\"id\":\"em8-i32-hk5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2026-04-07T14:54:38.987154Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-07T14:54:40.849696Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.1985057998232999}},{\"id\":\"eq3-r74-a85\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.014458Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.014458Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eqh-5b2-49v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771350454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T17:47:35.047347Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T17:47:35.047347Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29878641166115005}},{\"id\":\"eup-drq-jnt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-01T16:07:22.663414Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T16:07:23.517492Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"exv-de7-2iw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770788850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T05:47:31.133313Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T05:47:31.133313Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27813522606833224}},{\"id\":\"eyd-ivm-aaw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771177650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T17:47:31.208772Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T17:47:31.208772Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2924321038430591}},{\"id\":\"ez7-i7k-kvy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardLogStream-local-1737547858\",\"teams\":[],\"created_at\":\"2025-01-22T12:11:02.505903Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-22T12:11:02.505903Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f2n-g2w-p8k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770838340 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T19:32:20.700785Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T19:32:20.700785Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27995504643845265}},{\"id\":\"f3n-m8x-cyd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771148854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T09:47:35.020282Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T09:47:35.020282Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2913732162212341}},{\"id\":\"f47-qxr-zry\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Merging Tracking\",\"teams\":[],\"created_at\":\"2024-08-29T15:44:56.266108Z\",\"author\":{\"id\":\"7557262\",\"name\":\"Anika Maskara\",\"handle\":\"anika.maskara@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-29T15:44:56.266108Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f4a-76m-nbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:27:11.505665Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:49:08.310691Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"f4q-d9c-2nj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-11T14:44:24.984417Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-11T14:44:24.984417Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f59-6bj-c7p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"[corpit] Iroh License Check Dashboard\",\"teams\":[],\"created_at\":\"2023-01-30T11:34:18.574271Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-30T11:34:30.591612Z\",\"widget_count\":57,\"widget_count_by_type\":{\"query_value\":28,\"timeseries\":11,\"image\":12,\"list_stream\":1,\"toplist\":2,\"note\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f5q-i7e-ewj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"jeffallen - pcf billing test\",\"teams\":[],\"created_at\":\"2022-05-20T20:30:30.729505Z\",\"author\":{\"id\":\"4053606\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-3920545\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-06-09T21:01:57.752118Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"f8a-ji7-qwq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1771240880 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:20.340141Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:20.340141Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2947571526788002}},{\"id\":\"fap-y2h-r3r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771393650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:31.269914Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:31.269914Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3003748144241205}},{\"id\":\"fbk-p62-su3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770961657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T05:47:37.800370Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T05:47:37.800370Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2844896378940119}},{\"id\":\"ffm-526-xz6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771062451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T09:47:32.260690Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T09:47:32.260690Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2881960314122042}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":0,\"first_offset\":0,\"limit\":250,\"prev_offset\":null,\"next_offset\":250,\"last_offset\":500,\"total\":591}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/dashboards/usage\",\"next\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page[offset]=250&page[limit]=250\",\"first\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page[offset]=0&page[limit]=250\",\"last\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page[offset]=500&page[limit]=250\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v1/dashboard/wu3-x5g-reh", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"deleted_dashboard_id\":\"wu3-x5g-reh\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get usage stats for all dashboards returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-05-18T14:40:30.111Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboards/usage", + "query": [ + [ + "page[limit]", + "500" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"22p-zw6-qia\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1770895286 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:21:26.907249Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:21:26.907249Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28204906085021153}},{\"id\":\"284-wiv-iqk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-21T21:02:03.739689Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-21T21:02:03.739689Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"287-waf-fua\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1770981465 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:45.310427Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:45.310427Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2852179956698162}},{\"id\":\"29x-55z-rt2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T22:20:08.019993Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:20:09.093470Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2be-q62-ep5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-23T00:04:08.199090Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-23T00:04:08.199090Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2cz-cim-bga\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771235251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:32.359535Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:32.359535Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2945502017336819}},{\"id\":\"2fb-2xi-b3r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771048054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:35.029821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:35.029821Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2876666193692902}},{\"id\":\"2fn-zr3-4jy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771249651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T13:47:32.319363Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T13:47:32.319363Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2950797141452782}},{\"id\":\"2fp-uaa-dxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770904050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:31.270385Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:31.270385Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2823713422390794}},{\"id\":\"2gn-qtd-zd9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:54:10.920756Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:54:57.107615Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"2m8-ht3-7kf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.660825Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.660825Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2n8-amr-8ws\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_hostmap_widget_1738642608\",\"teams\":[],\"created_at\":\"2025-02-04T04:16:49.306022Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-04T04:16:49.306022Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2ph-z9s-3ma\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771019257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:37.816410Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:37.816410Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2866076940564898}},{\"id\":\"2qn-4hs-6nz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-06T18:28:02.296323Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T18:28:02.296323Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2rd-dc2-4qz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"delete-me\",\"teams\":[],\"created_at\":\"2023-04-04T07:20:20.175651Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-04-04T07:25:00.141124Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2t6-ira-9sr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-26T16:19:46.726552Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-26T16:19:46.726552Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"2w5-uyn-tkh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771390145 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T04:49:05.674863Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T04:49:05.674863Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.30024590740843354}},{\"id\":\"2wf-ez7-j7s\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771048050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:31.238278Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:31.238278Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28766647994426764}},{\"id\":\"37f-p9m-n5a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_updateToRbac-local-1776085112\",\"teams\":[],\"created_at\":\"2026-04-13T12:58:33.957713Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-13T12:58:33.957713Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.2067271396582174}},{\"id\":\"37v-ks5-42n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771019250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:31.237085Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:31.237085Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2866074521225058}},{\"id\":\"38e-jd2-pvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771033651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T01:47:32.276189Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T01:47:32.276189Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28713700422106986}},{\"id\":\"3ag-svk-vks\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771379257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:37.819031Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:37.819031Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29984554137462616}},{\"id\":\"3bd-yi5-t9f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-01-24T20:36:07.585183Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-24T20:36:07.585183Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":9,\"image\":1,\"hostmap\":1,\"heatmap\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3dh-twk-s46\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771364857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:37.812316Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:37.812316Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29931602723863215}},{\"id\":\"3f9-4ni-c37\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bruce Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-10-04T18:55:30.384138Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":5,\"viewed_at\":\"2025-08-19T14:16:27.955000Z\",\"viewer\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":5,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-08-18T19:22:40.421722Z\",\"widget_count\":19,\"widget_count_by_type\":{\"alert_graph\":2,\"alert_value\":2,\"change\":1,\"distribution\":1,\"check_status\":1,\"heatmap\":1,\"hostmap\":1,\"note\":2,\"query_value\":1,\"query_table\":1,\"scatterplot\":1,\"servicemap\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"3gp-ihg-25a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:49.231714Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:49.231714Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3hx-aas-pkd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:07:47.665899Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T01:11:49.409229Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3ia-t26-3ny\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Powerpack Test\",\"teams\":[],\"created_at\":\"2023-09-12T17:24:07.448153Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2026-04-10T14:49:57.534000Z\",\"viewer\":{\"id\":\"21235577\",\"name\":\"Francesco Pighi\",\"handle\":\"francesco.pighi@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2023-09-12T17:24:07.448153Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.2026679121677571}},{\"id\":\"3jf-enh-rvf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770889652 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T09:47:32.857235Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T09:47:32.857235Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2818418866977467}},{\"id\":\"3jh-dek-qps\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-08T21:59:54.884830Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T22:00:29.988353Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"3jt-5cb-icy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-02-24T20:40:32.063650Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-24T20:40:33.482665Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"3kr-vna-uug\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:56:42.073944Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:56:42.073944Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3mh-eua-8gx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771264055 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T17:47:35.437223Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T17:47:35.437223Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2956093426792953}},{\"id\":\"3nb-3ce-ckg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_a_shared_dashboard_returns_OK_response-1771240877 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:17.935183Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:17.935183Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29475706425980197}},{\"id\":\"3nb-t26-7yu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771105650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T21:47:31.428318Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T21:47:31.428318Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2897845424867695}},{\"id\":\"3uh-fgj-iu9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_events_qu_1771155581\",\"teams\":[],\"created_at\":\"2026-02-15T11:39:41.627411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T11:39:41.627411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"distribution\":1},\"dashboard_quality_score\":0.38882742089832584}},{\"id\":\"3uv-rz7-km5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Proxmox Overview host dashboards\",\"teams\":[],\"created_at\":\"2025-07-25T19:59:43.297508Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-07-25T19:59:43.579000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-07-25T20:00:11.931527Z\",\"widget_count\":40,\"widget_count_by_type\":{\"group\":8,\"note\":5,\"query_value\":10,\"list_stream\":1,\"manage_status\":1,\"toplist\":2,\"timeseries\":9,\"query_table\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"3xf-myy-c3f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createAdmin-local-1774386000\",\"teams\":[],\"created_at\":\"2026-03-24T21:00:04.874787Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-24T21:00:04.874787Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.179413786344114}},{\"id\":\"3y3-3x5-kq8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-11-09T16:03:35.113528Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-09T16:03:47.912796Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"43b-kw6-vqr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2023-09-20T09:37:10.513590Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-06T14:44:10.522900Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":10,\"image\":1,\"hostmap\":1,\"heatmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"43k-xij-6fu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771393651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:32.095399Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:32.095399Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3003748447936856}},{\"id\":\"48h-7qq-cih\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Heather's Dashboard Mon, Jun 30, 11:32:33 am\",\"teams\":[],\"created_at\":\"2025-06-30T15:32:33.156114Z\",\"author\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views\":4,\"viewed_at\":\"2025-06-30T15:35:37.715000Z\",\"viewer\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":4,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-06-30T15:33:00.626392Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"49w-wru-9r3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771336054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:35.021426Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:35.021426Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2982568968329764}},{\"id\":\"4ai-qzh-uxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771192051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T21:47:32.249226Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T21:47:32.249226Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2929616560052716}},{\"id\":\"4b5-8v7-rh2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771336050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:31.201562Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:31.201562Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29825675636962523}},{\"id\":\"4ic-zm9-api\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardSpans_NoHideIncompleteCostData-local-1771030254\",\"teams\":[],\"created_at\":\"2026-02-14T00:50:57.448221Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T00:50:57.448221Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.38268289372150466}},{\"id\":\"4ig-4ks-6c8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770990454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T13:47:35.017644Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T13:47:35.017644Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28554856336037004}},{\"id\":\"4j8-nbn-4gi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-09-28T01:37:23.346984Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-28T01:37:23.346984Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4m8-kr3-ca4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771076850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T13:47:31.252396Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T13:47:31.252396Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2887255082386866}},{\"id\":\"4mv-u7u-ysx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_shared_dashboard_with_a_group_template_variable_returns_OK_response_1771163253 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T13:47:33.853020Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T13:47:33.853020Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29190268720160345}},{\"id\":\"4n7-s4g-dqv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"For dashboard list tests - DO NOT DELETE\",\"teams\":[],\"created_at\":\"2020-02-11T13:49:29.555334Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-04-08T17:54:25.574039Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"4nf-i9k-t87\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771379250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:31.220114Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:31.220114Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2998452987181588}},{\"id\":\"4sx-tiz-2qu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770745657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:37.768200Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:37.768200Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2765469283919025}},{\"id\":\"4td-xzm-6yq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Create_a_new_dashboard_with_a_toplist_widget_sorted_by_group-1772531926\",\"teams\":[],\"created_at\":\"2026-03-03T09:58:47.282663Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-03T09:58:47.282663Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.34223126986457164}},{\"id\":\"4ud-du4-pi3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-17T08:32:02.449350Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-17T08:32:02.449350Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"4uk-xyr-myu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_funnel_widget_1775734738 with funnel widget\",\"teams\":[],\"created_at\":\"2026-04-09T11:38:59.468470Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-09T11:38:59.468470Z\",\"widget_count\":1,\"widget_count_by_type\":{\"funnel\":1},\"dashboard_quality_score\":0.4600044320788619}},{\"id\":\"4vs-2aj-87j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770731251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T13:47:32.144492Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T13:47:32.144492Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27601720770897226}},{\"id\":\"4wp-g9w-rqp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T16:34:52.946050Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T16:34:52.946050Z\",\"widget_count\":1,\"widget_count_by_type\":{\"change\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4wy-ajm-bvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:35:18.554744Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:35:18.554744Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"4z7-iip-zrt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T17:09:12.214893Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:09:12.874904Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4zw-ifc-4pv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770745651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:32.295694Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:32.295694Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2765467271576857}},{\"id\":\"55v-ka5-rne\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770745655 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:35.397058Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:35.397058Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2765468412003758}},{\"id\":\"59f-bun-r3c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T15:17:19.954644Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T15:17:33.545302Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"list_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5bg-c69-wq9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771062450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T09:47:31.220095Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T09:47:31.220095Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2881959931613793}},{\"id\":\"5cj-8j7-qpy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Octopus Deploy Overview\",\"teams\":[],\"created_at\":\"2024-12-11T20:48:25.007210Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":27,\"viewed_at\":\"2025-01-16T20:42:51.598000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":27,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-16T20:12:02.010750Z\",\"widget_count\":31,\"widget_count_by_type\":{\"group\":6,\"note\":5,\"query_value\":8,\"list_stream\":2,\"toplist\":2,\"timeseries\":1,\"query_table\":7},\"dashboard_quality_score\":0.0}},{\"id\":\"5gx-3pv-cwk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1771327301 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:41.852380Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:41.852380Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29793502706931224}},{\"id\":\"5i4-3c5-qby\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 1:37:28 pm\",\"teams\":[],\"created_at\":\"2023-12-20T18:37:28.853122Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T18:37:28.853122Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"5mk-tv6-3wt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771321657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:47:37.701536Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:47:37.701536Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2977274814953296}},{\"id\":\"5mr-xms-2qa\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T22:16:56.913567Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:16:57.568474Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5qz-2i3-6cq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T14:14:41.648472Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T14:14:41.648472Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5r9-yr4-f7p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770970019 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T08:06:59.825960Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T08:06:59.825960Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2847971246195878}},{\"id\":\"5ti-jks-zwd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770832051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T17:47:32.154507Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T17:47:32.154507Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27972380529638946}},{\"id\":\"5tp-tr6-93q\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-21T13:59:15.028164Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-21T13:59:15.028164Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5uv-zxz-4r8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771004851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T17:47:32.259530Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T17:47:32.259530Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2860779758248462}},{\"id\":\"5vp-fxm-s4j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"PCF Testing\",\"teams\":[],\"created_at\":\"2022-06-08T10:40:29.941695Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":161,\"viewed_at\":\"2026-05-15T19:53:55.277000Z\",\"viewer\":{\"id\":\"67399597\",\"name\":\"Kyle Neale\",\"handle\":\"kyle.neale@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":161,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-05-15T21:03:07.093496Z\",\"widget_count\":22,\"widget_count_by_type\":{\"group\":4,\"hostmap\":2,\"timeseries\":5,\"query_table\":9,\"trace_service\":1,\"list_stream\":1},\"dashboard_quality_score\":0.7276695720872501}},{\"id\":\"5yv-q5c-8m3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770737540 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T15:32:20.553171Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T15:32:20.553171Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2762484437983195}},{\"id\":\"63v-49e-a7d\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"sarah test\",\"teams\":[],\"created_at\":\"2023-05-15T18:12:47.853642Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-05-15T18:25:28.895732Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"669-8wg-nfr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770803257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T09:47:37.746546Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T09:47:37.746546Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2786649831475839}},{\"id\":\"679-8up-bf2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-04-14T13:40:43.116109Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-14T13:40:43.116109Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"67i-fs9-rzn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Teleport Overview\",\"teams\":[],\"created_at\":\"2024-04-03T15:04:15.262442Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-11-01T18:56:10.280000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-06-04T14:49:15.193580Z\",\"widget_count\":44,\"widget_count_by_type\":{\"group\":8,\"note\":3,\"query_value\":8,\"timeseries\":25},\"dashboard_quality_score\":0.0}},{\"id\":\"67s-cju-w7w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770832057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T17:47:37.795289Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T17:47:37.795289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2797240127174032}},{\"id\":\"6by-h9d-gui\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"MM RBAC Dashboard\",\"teams\":[],\"created_at\":\"2021-04-23T16:14:13.820995Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-23T16:14:13.820995Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6e7-n4p-tdp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771033657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T01:47:37.805777Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T01:47:37.805777Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28713720754741917}},{\"id\":\"6ez-pq7-4zk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_shared_dashboard_returns_OK_response-1689999025 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2023-07-22T04:10:25.713775Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-22T04:10:25.713775Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6md-r2g-kxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-17T03:08:25.445281Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-17T03:08:25.445281Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6pm-2ad-2v8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-15T13:45:39.004786Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:45:40.299693Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6qu-cxf-9jy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.237970Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.237970Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6rw-fcg-izv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771105651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T21:47:32.200877Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T21:47:32.200877Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28978457088934567}},{\"id\":\"6v2-52t-9m7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771091250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T17:47:31.249672Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T17:47:31.249672Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2892550220228939}},{\"id\":\"6vb-yrz-ag6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770918450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T17:47:31.238722Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T17:47:31.238722Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2829008549535302}},{\"id\":\"6vv-phh-8te\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770731257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T13:47:37.794992Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T13:47:37.794992Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2760174154837683}},{\"id\":\"6xb-usd-min\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-12-04T15:37:35.427082Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-12-04T15:37:35.427082Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.06021835561049866}},{\"id\":\"73p-kiw-ike\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771091251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T17:47:32.262566Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T17:47:32.262566Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2892550592686626}},{\"id\":\"74v-m9u-yzs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Event Timeline Widget Dashboard\",\"teams\":[],\"created_at\":\"2020-12-10T04:21:12.270024Z\",\"author\":null,\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-12-10T04:21:12.270024Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_timeline\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"76m-n9x-wd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"DL FF TF\",\"teams\":[],\"created_at\":\"2021-02-02T13:54:05.514952Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-02-02T13:54:05.514952Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"795-wur-2am\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:13.784143Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:13.784143Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"7b3-yvp-mmq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T16:16:55.297530Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T16:16:55.297530Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7bt-mcb-a9f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2026-05-08T03:12:09.665811Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-05-08T03:12:09.665811Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.5510216256252313}},{\"id\":\"7dp-46c-6tr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-07T16:37:56.369573Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-07T16:37:56.369573Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7ia-ywt-ixn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770955619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T04:06:59.844956Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T04:06:59.844956Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28426761142753754}},{\"id\":\"7j9-9in-7md\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770904051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:32.262502Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:32.262502Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2823713787104167}},{\"id\":\"7kp-v5x-s54\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1771327312 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:52.754388Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:52.754388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2979354279514505}},{\"id\":\"7ns-vmc-rup\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardListStream-local-1772801028\",\"teams\":[],\"created_at\":\"2026-03-06T12:43:50.956179Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-06T12:43:50.956179Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.4695022609867474}},{\"id\":\"7q2-h97-j2m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_items_of_a_Dashboard_List_returns_OK_response_1731709308 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-11-15T22:21:49.262821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-15T22:21:49.262821Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"7ui-ttk-rjb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771336051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:32.369190Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:32.369190Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2982567993000199}},{\"id\":\"7v3-gfj-zzr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770760050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T21:47:31.212371Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T21:47:31.212371Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2770762012061138}},{\"id\":\"7yi-rk7-7kw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770947250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T01:47:31.242266Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T01:47:31.242266Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28395988286092905}},{\"id\":\"7ym-viw-7if\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard created using cloudformation template\",\"teams\":[],\"created_at\":\"2024-09-27T18:25:34.741716Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-27T18:25:34.741716Z\",\"widget_count\":60,\"widget_count_by_type\":{\"group\":6,\"timeseries\":17,\"toplist\":17,\"sunburst\":1,\"hostmap\":1,\"query_value\":18},\"dashboard_quality_score\":0.0}},{\"id\":\"823-wmx-kyk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T21:30:35.101006Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T21:30:36.200544Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"86h-24u-mwc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vSphere VM Property Metrics\",\"teams\":[],\"created_at\":\"2023-07-18T18:13:38.804575Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T19:57:25.366422Z\",\"widget_count\":14,\"widget_count_by_type\":{\"query_table\":10,\"treemap\":1,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"884-jxj-d7f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Infrastructure Overview\",\"teams\":[],\"created_at\":\"2024-01-04T11:25:42.564360Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-05T18:05:45.334010Z\",\"widget_count\":64,\"widget_count_by_type\":{\"note\":8,\"timeseries\":17,\"hostmap\":2,\"query_value\":32,\"toplist\":3,\"query_table\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"88m-nrr-j4c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_shared_dashboard_returns_OK_response_1720742852 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-07-12T00:07:33.291059Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-12T00:07:33.291059Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"89p-5x9-mfp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T04:09:45.848591Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T04:09:45.848591Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8d7-qz3-urj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771128419 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T04:06:59.945411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T04:06:59.945411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2906217817873656}},{\"id\":\"8ev-2hz-9yh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771364854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:35.065546Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:35.065546Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2993159262270882}},{\"id\":\"8fj-gzg-78v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770932854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T21:47:35.023675Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T21:47:35.023675Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2834305080206865}},{\"id\":\"8kf-ip5-ict\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Heather's Dashboard Fri, Aug 1, 4:48:55 pm\",\"teams\":[],\"created_at\":\"2025-08-01T20:48:55.649802Z\",\"author\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views\":4,\"viewed_at\":\"2025-08-01T20:49:40.239000Z\",\"viewer\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":4,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-08-01T20:49:22.242970Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8mr-z8r-xaq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:22.284588Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:22.284588Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"8ny-iwn-ira\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardEventTimeline-local-1776820257\",\"teams\":[],\"created_at\":\"2026-04-22T01:11:00.774052Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-22T01:11:00.774052Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_timeline\":1},\"dashboard_quality_score\":0.21854470035954052}},{\"id\":\"8qn-sx4-6py\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:57:16.337700Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:57:16.337700Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8r3-fr7-g8h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-03T11:06:05.600888Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-03T18:00:35.762592Z\",\"widget_count\":3,\"widget_count_by_type\":{\"hostmap\":1,\"timeseries\":1,\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8rp-qrc-d72\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Java-Create_a_new_dashboard_with_geomap_widget-1737861024\",\"teams\":[],\"created_at\":\"2025-01-26T03:10:24.707218Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-26T03:10:24.707218Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8rq-w48-cav\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1770981477 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:57.935448Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:57.935448Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2852184599023656}},{\"id\":\"8v6-29d-g7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Timeboard Dashboard 1769733\",\"teams\":[],\"created_at\":\"2024-10-04T18:49:59.050042Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:49:59.050042Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8va-as3-xfj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771099619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T20:06:59.844113Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T20:06:59.844113Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28956275028407824}},{\"id\":\"8vg-n3m-t2r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog's Dashboard Mon, Sep 18, 1:11:53 pm (cloned)\",\"teams\":[],\"created_at\":\"2023-10-13T14:28:19.062400Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-13T14:28:19.062400Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8w6-777-dbc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:52.825402Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:52.825402Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8wn-wbp-bpe\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771243619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T12:06:59.843565Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T12:06:59.843565Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29485788915253947}},{\"id\":\"8yn-6s7-pue\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T01:34:46.545176Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T01:34:46.545176Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8z4-u8g-ecy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771200419 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T00:06:59.836148Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T00:06:59.836148Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2932693472130468}},{\"id\":\"92s-2qq-7ib\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1776560567\",\"teams\":[],\"created_at\":\"2026-04-19T01:02:52.517316Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2026-05-06T16:41:02.642000Z\",\"viewer\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-04-19T01:02:52.517316Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.2388861655718952}},{\"id\":\"92z-j9h-rpi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770745650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:31.175796Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:31.175796Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2765466859707376}},{\"id\":\"96c-d6b-txk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771134451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T05:47:32.238314Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T05:47:32.238314Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2908436000413892}},{\"id\":\"986-sdj-7f5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770947257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T01:47:37.813715Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T01:47:37.813715Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28396012450329816}},{\"id\":\"998-r9i-nmq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770889657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T09:47:37.810139Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T09:47:37.810139Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28184206881619533}},{\"id\":\"9bz-xsh-sd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770976054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T09:47:35.350772Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T09:47:35.350772Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28501906171413455}},{\"id\":\"9cb-ici-wh9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770788857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T05:47:37.728846Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T05:47:37.728846Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2781354686045877}},{\"id\":\"9dy-6d6-92u\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"KubeVirt Overview (DEV)\",\"teams\":[],\"created_at\":\"2025-01-07T07:17:49.547882Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":10,\"viewed_at\":\"2025-01-07T15:05:57.088000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":10,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-07T07:18:50.881143Z\",\"widget_count\":48,\"widget_count_by_type\":{\"group\":6,\"note\":1,\"query_value\":4,\"timeseries\":31,\"query_table\":2,\"toplist\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"9fh-bsk-dez\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T06:21:51.929267Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T06:21:51.929267Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gp-yca-ewc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-07-03T05:06:40.070179Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-03T05:06:40.070179Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gw-nvp-fv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:16:01.442667Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:16:01.442667Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9hv-ptz-8ca\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770846451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T21:47:31.833721Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T21:47:31.833721Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.280253307385377}},{\"id\":\"9j7-b7g-fmp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-07-07T17:12:20.570681Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:12:21.707927Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9km-gj8-2rj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:20:54.758861Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:21:08.649752Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9kx-z8g-k6m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770867140 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T03:32:20.633759Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T03:32:20.633759Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28101407175773013}},{\"id\":\"9nh-zpi-6qr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770904054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:35.018170Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:35.018170Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28237148003862317}},{\"id\":\"9qq-fww-7dt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_event_stream_list_stream_widget_1736259735 with list_stream widget\",\"teams\":[],\"created_at\":\"2025-01-07T14:22:16.267384Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-07T14:22:16.267384Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9ra-4tp-6x8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:30:44.267214Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:30:44.267214Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9re-h8a-8tw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardStyle-local-1773413743\",\"teams\":[],\"created_at\":\"2026-03-13T14:55:46.971416Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-13T14:55:46.971416Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3746573651820967}},{\"id\":\"9td-t9c-kk7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T14:04:12.968245Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T16:29:07.018541Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"event_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9tw-t3j-j2j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:33.097538Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:33.097538Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9wr-ifb-ks3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard for testing\",\"teams\":[],\"created_at\":\"2024-06-28T14:32:31.419746Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-28T14:32:31.419746Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":1,\"sunburst\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9ze-x5d-4uk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-02T10:21:50.272937Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-02T10:21:50.272937Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9zn-yrm-f5x\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bruce Timeboard Dashboard New1\",\"teams\":[],\"created_at\":\"2025-08-18T19:43:21.235986Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":4,\"viewed_at\":\"2025-08-19T14:17:27.783000Z\",\"viewer\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":4,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-08-18T19:43:21.235986Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"a2m-4ke-pvn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771350450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T17:47:31.256739Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T17:47:31.256739Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2987862722785235}},{\"id\":\"a4r-ixp-f77\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1770981467 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:47.463943Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:47.463943Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2852180748437294}},{\"id\":\"aaq-h42-uug\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771292851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T01:47:32.150956Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T01:47:32.150956Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29666824960484295}},{\"id\":\"ab7-eca-ywv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771206450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T01:47:31.251500Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T01:47:31.251500Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29349113319682957}},{\"id\":\"anz-4xk-5rd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771163254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T13:47:35.016746Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T13:47:35.016746Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2919027299849888}},{\"id\":\"arc-fsp-y6c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771364854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:34.823663Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:34.823663Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29931591732937646}},{\"id\":\"asp-qkq-xha\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:47:56.046241Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:53:05.322597Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"asx-682-bd2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771019254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:35.043844Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:35.043844Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2866075920923335}},{\"id\":\"av3-b6t-5d4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771120057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T01:47:37.800815Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T01:47:37.800815Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2903142906932992}},{\"id\":\"axt-yuk-b8k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771186019 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T20:06:59.834652Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T20:06:59.834652Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2927398332665977}},{\"id\":\"b2p-ixy-wbd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T02:22:19.767227Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T02:22:19.767227Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"b2x-2d8-smj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vsphere test\",\"teams\":[],\"created_at\":\"2023-11-15T14:29:57.863141Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-17T15:09:09.324288Z\",\"widget_count\":10,\"widget_count_by_type\":{\"note\":2,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b3e-rar-7dg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771249657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T13:47:37.710012Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T13:47:37.710012Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2950799123541292}},{\"id\":\"b6n-8j5-2iz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned) (cloned)\",\"teams\":[],\"created_at\":\"2023-09-26T09:00:00.247208Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-05T14:50:19.276985Z\",\"widget_count\":42,\"widget_count_by_type\":{\"image\":1,\"note\":5,\"hostmap\":1,\"timeseries\":9,\"query_value\":21,\"heatmap\":2,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"b6n-d8r-7em\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: splunk LB \",\"teams\":[],\"created_at\":\"2021-05-03T13:03:46.217614Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-03T13:03:46.217614Z\",\"widget_count\":12,\"widget_count_by_type\":{\"note\":3,\"slo\":1,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b8u-q5n-6xn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770766340 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T23:32:20.553044Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T23:32:20.553044Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27730747156551677}},{\"id\":\"b9v-vd2-fq2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Etiennes Dashboard Tue, Mar 18, 3:56:32 pm\",\"teams\":[],\"created_at\":\"2025-03-18T14:56:32.569828Z\",\"author\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-03-18T14:56:32.743000Z\",\"viewer\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-03-18T14:57:27.767981Z\",\"widget_count\":1,\"widget_count_by_type\":{\"query_value\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ba4-5j6-8be\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771324708 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T10:38:29.056240Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T10:38:29.056240Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29783968528489124}},{\"id\":\"bby-apf-qxh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_a_shared_dashboard_returns_OK_response-1770981464 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:44.522761Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:44.522761Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2852179666902397}},{\"id\":\"bcy-i9m-yk2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-26T09:52:25.783725Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-26T09:52:25.783725Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bde-dby-we2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770932850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T21:47:31.228195Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T21:47:31.228195Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2834303684500229}},{\"id\":\"bgf-jzg-b7a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (shanel clone)\",\"teams\":[],\"created_at\":\"2024-06-06T17:13:17.485112Z\",\"author\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T17:28:16.789541Z\",\"widget_count\":156,\"widget_count_by_type\":{\"group\":11,\"note\":28,\"check_status\":8,\"query_value\":59,\"query_table\":24,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"bgp-uee-rt3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:51.418778Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:51.418778Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bjz-fmp-fv7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770774451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T01:47:32.146629Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T01:47:32.146629Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2776057494443591}},{\"id\":\"bpc-yw5-2ai\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-11T05:06:09.509411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-11T05:06:09.509411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bpj-ytu-fpt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:46:41.035816Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:48:05.847943Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"bru-u6k-rjq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Wisdom\",\"teams\":[],\"created_at\":\"2021-12-15T14:39:24.510324Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-12-15T16:54:32.046189Z\",\"widget_count\":14,\"widget_count_by_type\":{\"note\":2,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"brz-7z3-9w7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771027619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T00:06:59.982674Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T00:06:59.982674Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28691518593066434}},{\"id\":\"bu8-gue-27p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bosh AutoRelease Testing (cloned)\",\"teams\":[],\"created_at\":\"2023-09-01T08:05:20.514088Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-08-01T12:48:01.368000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2023-09-01T08:08:49.528818Z\",\"widget_count\":11,\"widget_count_by_type\":{\"note\":1,\"free_text\":5,\"query_table\":3,\"timeseries\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"bvb-yc9-exe\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"debian (cloned)\",\"teams\":[],\"created_at\":\"2025-08-06T16:25:39.628071Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":3,\"viewed_at\":\"2025-08-06T16:27:42.045000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":3,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-08-06T16:28:13.557631Z\",\"widget_count\":4,\"widget_count_by_type\":{\"timeseries\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"bvm-3qi-iuq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771393654 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:35.059151Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:35.059151Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3003749537648578}},{\"id\":\"byj-yvx-u34\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardTopologyMap-local-1772643592\",\"teams\":[],\"created_at\":\"2026-03-04T16:59:55.987040Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-04T16:59:55.987040Z\",\"widget_count\":1,\"widget_count_by_type\":{\"topology_map\":1},\"dashboard_quality_score\":0.46178337183529905}},{\"id\":\"c5w-bu2-9tj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1774284510\",\"teams\":[],\"created_at\":\"2026-03-23T16:48:34.042558Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-23T16:48:34.042558Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.17778231076946094}},{\"id\":\"c5z-eix-jck\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_a_toplist_widget_with_stacked_type_and_no_legend_specified_1742496578\",\"teams\":[],\"created_at\":\"2025-03-20T18:49:39.343102Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-20T18:49:39.343102Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"c7v-rr4-syc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771048057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:37.791536Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:37.791536Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28766672090607276}},{\"id\":\"ce2-rip-h9m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771235250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:31.226370Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:31.226370Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2945501600486306}},{\"id\":\"cf8-ifs-4vf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 10:34:03 am\",\"teams\":[],\"created_at\":\"2023-12-20T15:34:03.307486Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T15:34:03.307486Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ch3-ufm-3r3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771278457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T21:47:37.708347Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T21:47:37.708347Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29613894006908703}},{\"id\":\"chp-364-vkw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1770809020 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T11:23:40.360996Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:23:40.360996Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2788768848339404}},{\"id\":\"cmr-azj-aw6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.386452Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.386452Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"cpe-53e-zpe\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1770895295 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:21:35.806052Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:21:35.806052Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2820493880579771}},{\"id\":\"cph-7er-div\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771379251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:32.093932Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:32.093932Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.299845330839013}},{\"id\":\"cpz-ukf-zgw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Nutanix Overview (cloned)\",\"teams\":[],\"created_at\":\"2026-03-17T17:42:02.849648Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":3,\"viewed_at\":\"2026-03-18T10:28:43.858000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":3,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-03-17T17:42:02.849648Z\",\"widget_count\":69,\"widget_count_by_type\":{\"group\":5,\"image\":1,\"query_value\":24,\"note\":5,\"timeseries\":27,\"toplist\":4,\"query_table\":3},\"dashboard_quality_score\":0.6818860470532752}},{\"id\":\"cqe-tb8-kag\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770881540 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T07:32:20.535221Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T07:32:20.535221Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28154358201949387}},{\"id\":\"cw4-irn-n79\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T21:55:02.601652Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:55:02.601652Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"cx2-6g6-mni\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_timeseries_widget_with_legacy_live_span_time_format_1739376942 with legacy live span time\",\"teams\":[],\"created_at\":\"2025-02-12T16:15:43.276834Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-12T16:15:43.276834Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"cxr-rw5-dfb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Dashboard Wed, Oct 11, 2:07:21 pm\",\"teams\":[],\"created_at\":\"2023-10-11T18:07:21.856517Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T20:32:00.487697Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"d27-b4r-765\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1771240889 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:29.190827Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:29.190827Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2947574781371176}},{\"id\":\"d44-daj-rt3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771235254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:35.291802Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:35.291802Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29455030954105843}},{\"id\":\"d4c-zbf-ehz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771332545 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T12:49:05.720282Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T12:49:05.720282Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29812785350879384}},{\"id\":\"d5e-dpd-umy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Infrastructure Overview\",\"teams\":[],\"created_at\":\"2024-01-05T16:22:20.712589Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":24,\"viewed_at\":\"2026-02-11T14:59:44.086000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":24,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-10-28T14:33:21.452494Z\",\"widget_count\":83,\"widget_count_by_type\":{\"group\":5,\"note\":14,\"treemap\":1,\"hostmap\":1,\"query_value\":39,\"timeseries\":18,\"toplist\":3,\"query_table\":2},\"dashboard_quality_score\":0.4884871419597444}},{\"id\":\"d7b-d5m-7jw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Proxmox Overview\",\"teams\":[],\"created_at\":\"2025-07-10T13:46:05.531316Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":59,\"viewed_at\":\"2025-07-25T17:15:01.679000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":59,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-07-16T13:37:42.454688Z\",\"widget_count\":40,\"widget_count_by_type\":{\"group\":8,\"note\":5,\"query_value\":10,\"list_stream\":1,\"manage_status\":1,\"toplist\":3,\"timeseries\":8,\"query_table\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"d9k-7wu-vwn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardTabUpdate-local-1774284040\",\"teams\":[],\"created_at\":\"2026-03-23T16:40:44.085796Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-23T16:40:53.238271Z\",\"widget_count\":3,\"widget_count_by_type\":{\"note\":3},\"dashboard_quality_score\":0.17777490329256843}},{\"id\":\"d9n-2k5-rjr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771120050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T01:47:31.229462Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T01:47:31.229462Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2903140490499855}},{\"id\":\"dc4-sn4-x3c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771307251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T05:47:32.139096Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T05:47:32.139096Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2971977630543733}},{\"id\":\"dea-tup-asp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-01-24T17:57:50.017145Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-24T17:57:50.017145Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"deh-2pa-jv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Timeboard Wed, Mar 3, 10:57:28 am\",\"teams\":[],\"created_at\":\"2021-03-03T09:57:28.304302Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-03-03T09:59:37.861240Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"dep-fr9-h4z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771214819 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T04:06:59.939941Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T04:06:59.939941Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2937988649129915}},{\"id\":\"dgv-rzf-sdg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771319423 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:10:23.922075Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:10:23.922075Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2976453413971817}},{\"id\":\"dis-ra2-zyk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770918454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T17:47:35.362355Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T17:47:35.362355Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28290100657911676}},{\"id\":\"dkd-m4y-nfc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-07-29T16:45:28.934525Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-29T16:45:31.392137Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"dmj-ttd-6fy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1771327303 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:43.612738Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:43.612738Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29793509178915295}},{\"id\":\"dnm-hvh-9hw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771301219 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T04:06:59.854762Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T04:06:59.854762Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2969759451139266}},{\"id\":\"dvv-i5b-zbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (cloned)\",\"teams\":[],\"created_at\":\"2024-01-08T19:23:43.013799Z\",\"author\":{\"id\":\"6515857\",\"name\":\"Candace Shamieh\",\"handle\":\"candace.shamieh@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-08T19:42:17.791727Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"timeseries\":26,\"query_table\":21},\"dashboard_quality_score\":0.0}},{\"id\":\"dw4-m52-byx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_logs_stream_list_stream_widget_and_storage_parameter_1733350921 with list_stream widget\",\"teams\":[],\"created_at\":\"2024-12-04T22:22:01.830291Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-04T22:22:01.830291Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"dwv-37t-bd6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770846452 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T21:47:32.382782Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T21:47:32.382782Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28025332756994564}},{\"id\":\"dyc-y4i-su4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771220851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T05:47:32.212811Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T05:47:32.212811Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29402068243087226}},{\"id\":\"dzm-bwc-ean\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ListStream\",\"teams\":[],\"created_at\":\"2025-02-25T10:01:52.815694Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-25T10:01:52.815694Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e63-myc-uhh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Orchestrator Writer [EP]\",\"teams\":[],\"created_at\":\"2022-03-29T12:23:13.061726Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-03-29T12:23:13.061726Z\",\"widget_count\":57,\"widget_count_by_type\":{\"group\":7,\"timeseries\":47,\"sunburst\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"e7c-akg-fbj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1771327313 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:53.347737Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:53.347737Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2979354497619158}},{\"id\":\"e7w-ted-kp5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T19:50:57.927100Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T19:50:58.454696Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e84-h6q-8ru\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-02-03T14:05:45.526436Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-02-03T14:05:47.627593Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e88-itr-s9c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardFreeText_import-local-1738715031\",\"teams\":[],\"created_at\":\"2025-02-05T00:23:56.182926Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-05T00:23:56.182926Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"e8c-sk3-j9y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-14T02:11:46.227958Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-14T02:11:46.227958Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eg4-nui-f7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T16:11:30.640663Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T16:11:31.171270Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"egd-5vg-rac\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-10T14:20:28.977761Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-10T14:20:29.512718Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ehj-axw-7z7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T14:51:18.428821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:21:55.042874Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ekk-7pk-gs8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771192054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T21:47:34.995462Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T21:47:34.995462Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29296175697558524}},{\"id\":\"em8-i32-hk5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2026-04-07T14:54:38.987154Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-07T14:54:40.849696Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.1985057998232999}},{\"id\":\"eq3-r74-a85\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.014458Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.014458Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eqh-5b2-49v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771350454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T17:47:35.047347Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T17:47:35.047347Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29878641166115005}},{\"id\":\"eup-drq-jnt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-01T16:07:22.663414Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T16:07:23.517492Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"exv-de7-2iw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770788850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T05:47:31.133313Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T05:47:31.133313Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27813522606833224}},{\"id\":\"eyd-ivm-aaw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771177650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T17:47:31.208772Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T17:47:31.208772Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2924321038430591}},{\"id\":\"ez7-i7k-kvy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardLogStream-local-1737547858\",\"teams\":[],\"created_at\":\"2025-01-22T12:11:02.505903Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-22T12:11:02.505903Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f2n-g2w-p8k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770838340 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T19:32:20.700785Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T19:32:20.700785Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27995504643845265}},{\"id\":\"f3n-m8x-cyd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771148854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T09:47:35.020282Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T09:47:35.020282Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2913732162212341}},{\"id\":\"f47-qxr-zry\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Merging Tracking\",\"teams\":[],\"created_at\":\"2024-08-29T15:44:56.266108Z\",\"author\":{\"id\":\"7557262\",\"name\":\"Anika Maskara\",\"handle\":\"anika.maskara@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-29T15:44:56.266108Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f4a-76m-nbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:27:11.505665Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:49:08.310691Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"f4q-d9c-2nj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-11T14:44:24.984417Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-11T14:44:24.984417Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f59-6bj-c7p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"[corpit] Iroh License Check Dashboard\",\"teams\":[],\"created_at\":\"2023-01-30T11:34:18.574271Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-30T11:34:30.591612Z\",\"widget_count\":57,\"widget_count_by_type\":{\"query_value\":28,\"timeseries\":11,\"image\":12,\"list_stream\":1,\"toplist\":2,\"note\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f5q-i7e-ewj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"jeffallen - pcf billing test\",\"teams\":[],\"created_at\":\"2022-05-20T20:30:30.729505Z\",\"author\":{\"id\":\"4053606\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-3920545\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-06-09T21:01:57.752118Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"f8a-ji7-qwq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1771240880 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:20.340141Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:20.340141Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2947571526788002}},{\"id\":\"fap-y2h-r3r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771393650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:31.269914Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:31.269914Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3003748144241205}},{\"id\":\"fbk-p62-su3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770961657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T05:47:37.800370Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T05:47:37.800370Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2844896378940119}},{\"id\":\"ffm-526-xz6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771062451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T09:47:32.260690Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T09:47:32.260690Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2881960314122042}},{\"id\":\"fha-aib-dfs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771157219 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T12:06:59.841448Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T12:06:59.841448Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2916807519149361}},{\"id\":\"fhq-aq5-4nu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770947251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T01:47:32.452373Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T01:47:32.452373Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28395987353085084}},{\"id\":\"fim-fgh-t55\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_run_workflow_widget_1737023351\",\"teams\":[],\"created_at\":\"2025-01-16T10:29:11.940056Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-16T10:29:11.940056Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"fin-kn9-wc2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"proxmox\",\"teams\":[],\"created_at\":\"2025-07-01T14:20:58.467945Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":25,\"viewed_at\":\"2025-07-12T07:45:32.574000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":25,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-07-11T18:31:37.464487Z\",\"widget_count\":29,\"widget_count_by_type\":{\"group\":4,\"timeseries\":25},\"dashboard_quality_score\":0.0}},{\"id\":\"fny-85t-qat\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Python-Create_a_new_dashboard_with_split_graph_widget-1734399089\",\"teams\":[],\"created_at\":\"2024-12-17T01:31:30.428183Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-17T01:31:30.428183Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"fpr-kus-ryj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770731250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T13:47:31.224075Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T13:47:31.224075Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2760171200292463}},{\"id\":\"frk-ke6-iy8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1770809016 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T11:23:36.982121Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:23:36.982121Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2788767067628957}},{\"id\":\"fs5-ib5-p7i\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771249650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T13:47:31.258110Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T13:47:31.258110Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29507962128067217}},{\"id\":\"fst-vg2-dax\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770803254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T09:47:35.106620Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T09:47:35.106620Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2786648322416967}},{\"id\":\"fua-njm-8vw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771321650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:47:31.273391Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:47:31.273391Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2977271912869281}},{\"id\":\"fx7-fqc-mvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T16:16:55.510850Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T16:16:55.510850Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"g3b-pak-mf9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771033650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T01:47:31.232292Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T01:47:31.232292Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28713691199775704}},{\"id\":\"g5y-dp6-qvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-27T00:04:42.266863Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-27T00:04:42.266863Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"g9c-xme-5c8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Powerpack Dashboard\",\"teams\":[],\"created_at\":\"2023-09-13T20:02:37.796210Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-08T17:33:09.413127Z\",\"widget_count\":5,\"widget_count_by_type\":{\"resolved_powerpack\":2,\"note\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"g9d-nja-s56\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-07T15:11:01.265429Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-07T15:27:24.603106Z\",\"widget_count\":124,\"widget_count_by_type\":{\"group\":7,\"note\":27,\"check_status\":6,\"query_value\":37,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"gci-4wq-yzg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771134454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T05:47:34.999039Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T05:47:34.999039Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2908436477296429}},{\"id\":\"gfb-9yf-q24\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770875257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T05:47:37.815121Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T05:47:37.815121Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2813125012819947}},{\"id\":\"gir-v3a-33j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_a_shared_dashboard_returns_OK_response-1771327301 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:41.184043Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:41.184043Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29793494865864156}},{\"id\":\"gqh-m5i-xmb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771278454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T21:47:35.029109Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T21:47:35.029109Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29613878772412333}},{\"id\":\"gr4-3zp-g2z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2025-08-12T18:23:29.890854Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-08-12T18:23:29.890854Z\",\"widget_count\":19,\"widget_count_by_type\":{\"alert_graph\":2,\"alert_value\":2,\"change\":1,\"distribution\":1,\"check_status\":1,\"heatmap\":1,\"hostmap\":1,\"note\":2,\"query_value\":1,\"query_table\":1,\"scatterplot\":1,\"servicemap\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"gve-p9q-ij8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardSplitGraphWithStaticSplits-local-1770943736\",\"teams\":[],\"created_at\":\"2026-02-13T00:48:58.509408Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T00:48:58.509408Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.378440879370712}},{\"id\":\"gvv-33k-pvk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_a_timeseries_widget_and_an_overlay_request_1772912350\",\"teams\":[],\"created_at\":\"2026-03-07T19:39:10.530359Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-07T19:39:10.530359Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3562200627868155}},{\"id\":\"h35-e77-y7b\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-08-29T19:53:19.113620Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-29T19:54:10.579886Z\",\"widget_count\":130,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":7,\"query_value\":41,\"query_table\":20,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"h39-2vx-x5t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}} fooo\",\"teams\":[],\"created_at\":\"2024-09-23T17:13:29.658664Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-23T17:13:29.658664Z\",\"widget_count\":1,\"widget_count_by_type\":{\"query_table\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"h4n-bfi-dg5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"KubeVirt Overview\",\"teams\":[],\"created_at\":\"2024-07-25T09:17:13.681827Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":11,\"viewed_at\":\"2026-03-17T11:13:57.801000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":11,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-08-27T10:34:25.951925Z\",\"widget_count\":47,\"widget_count_by_type\":{\"group\":6,\"note\":1,\"query_value\":3,\"timeseries\":31,\"query_table\":2,\"toplist\":4},\"dashboard_quality_score\":0.6765049050287929}},{\"id\":\"h7j-v4q-aeu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-23T13:34:48.246025Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T13:34:49.033289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"h8e-vwj-uy8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-07-29T16:48:46.701592Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-29T16:48:49.599967Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hbt-4iu-bgf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771364851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:32.088198Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:32.088198Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29931576291374656}},{\"id\":\"hci-dg5-pcw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770860850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T01:47:31.233299Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T01:47:31.233299Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28078274536641984}},{\"id\":\"hgg-6id-sxi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771364850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:31.252025Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:31.252025Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2993157321660844}},{\"id\":\"hhk-abu-qhx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770846454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T21:47:35.072464Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T21:47:35.072464Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28025337265045125}},{\"id\":\"hiu-7x9-6yd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_dashboard_with_tags_returns_OK_response_1737087532 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2025-01-17T04:18:53.051598Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-17T04:18:53.051598Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hj6-ipc-vnt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771375745 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T00:49:05.688419Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T00:49:05.688419Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2997163401786084}},{\"id\":\"hkf-az9-56r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771278451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T21:47:32.143583Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T21:47:32.143583Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29613868161678025}},{\"id\":\"hmq-j67-sh4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770760057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T21:47:37.753017Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T21:47:37.753017Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27707638788572336}},{\"id\":\"hn6-a2w-7fv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Restore_deleted_dashboards_returns_No_Content_response_1686850305 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2023-06-15T17:31:45.390220Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-15T17:31:45.390220Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hnu-4qe-fvz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1770895296 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:21:36.453529Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:21:36.453529Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28204935804093045}},{\"id\":\"hs8-tys-qhc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771361345 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T20:49:05.678998Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T20:49:05.678998Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29918682594310025}},{\"id\":\"hsz-pvn-gie\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2021-01-21T11:01:38.594211Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-21T11:01:39.149109Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hur-yk4-4ey\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-08T20:49:20.928521Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T21:46:33.784247Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"hva-8qq-6uj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770941219 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T00:06:59.976316Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T00:06:59.976316Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28373804853660095}},{\"id\":\"hxi-98c-yqx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770939349 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T23:35:50.276296Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T23:35:50.276296Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2836692963054088}},{\"id\":\"hyq-he9-mmv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-11-16T14:53:07.236859Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-16T14:53:08.023820Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"i39-nvs-35n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-02T05:06:26.825469Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-02T05:06:26.825469Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"i3a-pej-zyf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_items_of_a_dashboard_list_returns_OK_response_1775396854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-04-05T13:47:35.961706Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-05T13:47:35.961706Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.4475797942376382}},{\"id\":\"i4v-bun-dyh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770875254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T05:47:35.059786Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T05:47:35.059786Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2813123999612713}},{\"id\":\"i69-4v4-2bm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771042019 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T04:06:59.847433Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T04:06:59.847433Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2874446410192663}},{\"id\":\"i6q-quy-cn2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:23:19.837734Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:34:00.011483Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ia3-mtz-d4e\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Timeboard\",\"teams\":[],\"created_at\":\"2020-12-09T04:18:00.388550Z\",\"author\":null,\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-12-09T04:18:00.388550Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"ici-7ph-caf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Tue, Jul 22, 4:11:18 pm\",\"teams\":[],\"created_at\":\"2025-07-22T20:11:18.893031Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-07-22T20:11:18.990000Z\",\"viewer\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-07-22T20:11:18.893031Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"icm-2nb-fqa\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_powerpack_widget_1777491570 with powerpack widget\",\"teams\":[],\"created_at\":\"2026-04-29T19:39:31.637538Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-29T19:39:31.637538Z\",\"widget_count\":2,\"widget_count_by_type\":{\"resolved_powerpack\":1,\"note\":1},\"dashboard_quality_score\":0.22933606802183215}},{\"id\":\"iic-aki-a5y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-05-22T00:22:49.406365Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-05-22T00:22:49.406365Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"iju-c6t-i9w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1776344469\",\"teams\":[],\"created_at\":\"2026-04-16T13:01:12.379351Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-16T13:01:12.379351Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.21089632943211262}},{\"id\":\"ikj-7sf-urr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK-1777635146 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-05-01T11:32:26.883662Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-05-01T11:32:26.883662Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.5298857755250498}},{\"id\":\"ims-k7p-2yr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770774450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T01:47:31.177165Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T01:47:31.177165Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27760565996732883}},{\"id\":\"iqb-wzk-7ab\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_new_dashboard_with_powerpack_widget-1745381568 with powerpack widget\",\"teams\":[],\"created_at\":\"2025-04-23T04:12:49.950553Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-04-23T04:12:49.950553Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"it8-zmc-esc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-01T16:10:54.233168Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T16:10:55.754868Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"itk-kp7-hnt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_geomap_widget_with_conditional_formats_and_text_formats-1775042684\",\"teams\":[],\"created_at\":\"2026-04-01T11:24:44.486017Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-01T11:24:44.486017Z\",\"widget_count\":1,\"widget_count_by_type\":{\"geomap\":1},\"dashboard_quality_score\":0.5794083631095576}},{\"id\":\"ivx-9cb-hq6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-01T15:32:14.718423Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T15:32:15.878992Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ixb-r7f-4t7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_a_shared_dashboard_returns_OK_response-1770895284 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:21:24.472378Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:21:24.472378Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28204891747099853}},{\"id\":\"j5f-c53-m7h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771264051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T17:47:32.134656Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T17:47:32.134656Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2956091673979945}},{\"id\":\"j6w-fex-8fn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2021-04-15T16:42:07.677880Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-15T16:42:08.423227Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"j7n-hzp-9g6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770961650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T05:47:31.236004Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T05:47:31.236004Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2844893426862045}},{\"id\":\"j82-fmx-4nd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-23T10:21:50.450445Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-23T10:21:50.450445Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"jad-5wi-r7k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-06T20:25:05.406527Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T20:25:05.406527Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"jcd-pci-xxw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog's 111222333, Sep 18, 1:11:53 pm (cloned)\",\"teams\":[],\"created_at\":\"2023-10-13T15:06:17.052642Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-13T15:10:51.018368Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"jdg-iyk-u68\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771013219 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T20:06:59.835930Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T20:06:59.835930Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28638561281738173}},{\"id\":\"je2-bwi-ces\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: systemid LB on c2c\",\"teams\":[],\"created_at\":\"2021-04-26T09:58:20.982778Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-26T09:58:20.982778Z\",\"widget_count\":12,\"widget_count_by_type\":{\"slo\":2,\"timeseries\":8,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"jjb-268-6ty\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770990450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T13:47:31.216346Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T13:47:31.216346Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2855483697408571}},{\"id\":\"jjp-ch8-h4j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-05-20T15:14:34.623626Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-20T15:14:34.623626Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"list_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"jmm-8iu-zxy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771105657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T21:47:37.798321Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T21:47:37.798321Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28978472288289914}},{\"id\":\"jv5-3t6-dhm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770803251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T09:47:32.134035Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T09:47:32.134035Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27866472293021327}},{\"id\":\"jzw-2ff-srb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-04-14T13:40:43.341283Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-14T13:40:43.341283Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"k64-a3e-t6p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-15T13:39:50.094390Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:39:51.376388Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"k6t-qmr-suz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770817657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T13:47:37.815602Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T13:47:37.815602Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2791944457404275}},{\"id\":\"k7b-e3u-xry\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ESXi Overview\",\"teams\":[],\"created_at\":\"2024-05-02T18:54:09.468977Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-02T18:54:09.468977Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"k7z-635-c9t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1771240878 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:18.552603Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:18.552603Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29475703312282225}},{\"id\":\"k8e-pk3-v62\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771350457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T17:47:37.719339Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T17:47:37.719339Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2987864560894199}},{\"id\":\"kb8-ypz-n53\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_updateToOpen-local-1774386000\",\"teams\":[],\"created_at\":\"2026-03-24T21:00:04.835505Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-24T21:00:04.835505Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.1794137621758809}},{\"id\":\"kbs-rk4-duq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2026-04-07T15:00:45.235569Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-07T15:00:47.169389Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.198511664919629}},{\"id\":\"kf4-nik-f6k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-30T18:19:33.856132Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-30T18:19:33.856132Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"knt-yhu-hpm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771134457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T05:47:37.798656Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T05:47:37.798656Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29084375067256013}},{\"id\":\"kpx-rp2-pku\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Applications Overview\",\"teams\":[],\"created_at\":\"2023-12-27T11:09:57.984811Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":25,\"viewed_at\":\"2026-03-13T16:18:30.149000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":25,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-02-26T14:43:47.176438Z\",\"widget_count\":18,\"widget_count_by_type\":{\"note\":3,\"query_table\":3,\"query_value\":4,\"toplist\":1,\"group\":2,\"list_stream\":4,\"timeseries\":1},\"dashboard_quality_score\":0.5751010212464215}},{\"id\":\"kqz-yw2-egk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"PCF Nozzle Testing (cloned)\",\"teams\":[],\"created_at\":\"2023-09-07T11:31:05.567145Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":4,\"viewed_at\":\"2025-09-25T08:30:09.388000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":4,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2023-11-13T15:10:51.833223Z\",\"widget_count\":13,\"widget_count_by_type\":{\"note\":1,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"kr8-sth-skv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-07-13T16:47:06.137747Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-13T16:47:09.905432Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"kuh-3m3-gjz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770832054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T17:47:35.341020Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T17:47:35.341020Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2797238686339754}},{\"id\":\"kuj-pxv-rqh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"MM RBAC Dashboard [0.11]\",\"teams\":[],\"created_at\":\"2021-04-23T16:04:56.337388Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-23T16:04:56.337388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"kuy-fjj-ehs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771163251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T13:47:32.262798Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T13:47:32.262798Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29190257488659394}},{\"id\":\"kvk-jwi-37u\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771307257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T05:47:37.709786Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T05:47:37.709786Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29719791407098844}},{\"id\":\"kxa-sp2-74z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770852740 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T23:32:20.551060Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T23:32:20.551060Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2804845009956925}},{\"id\":\"kzt-umz-d58\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771235257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:37.758294Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:37.758294Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2945503464101968}},{\"id\":\"m2z-nxy-gng\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_hostmap_widget_1771875473\",\"teams\":[],\"created_at\":\"2026-02-23T19:37:54.214806Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-23T19:37:54.214806Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.3180922565225343}},{\"id\":\"m3a-qxx-d6r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Timeboard Dashboard 1769733\",\"teams\":[],\"created_at\":\"2024-10-04T18:54:20.931820Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:54:20.931820Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"m4c-fbu-app\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770889650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T09:47:31.239988Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T09:47:31.239988Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28184177338691263}},{\"id\":\"m6j-yxy-63i\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770984419 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T12:06:59.945352Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T12:06:59.945352Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2853265890620343}},{\"id\":\"m6r-3ej-jxw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770774455 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T01:47:35.427195Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T01:47:35.427195Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2776058162468569}},{\"id\":\"m7f-z42-mqz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771171619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T16:06:59.825340Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T16:06:59.825340Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2922102652044626}},{\"id\":\"m9r-ahk-jvv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770961651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T05:47:32.227054Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T05:47:32.227054Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2844893791274094}},{\"id\":\"m9y-ypx-vnq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771076851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T13:47:32.231433Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T13:47:32.231433Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2887254903995061}},{\"id\":\"md9-pz9-6b4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771019251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:32.213094Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:32.213094Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28660743416955375}},{\"id\":\"mga-3eq-huq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770904057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:37.792529Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:37.792529Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28237152822426376}},{\"id\":\"mi5-sqr-9m2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Nutanix - Overview\",\"teams\":[],\"created_at\":\"2026-05-04T11:19:35.299294Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":23,\"viewed_at\":\"2026-05-06T09:01:53.686000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":23,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-05-05T10:03:49.098842Z\",\"widget_count\":70,\"widget_count_by_type\":{\"group\":5,\"image\":1,\"query_value\":24,\"note\":5,\"timeseries\":27,\"toplist\":4,\"query_table\":4},\"dashboard_quality_score\":0.9537731589444708}},{\"id\":\"mjt-uva-tcy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-24T08:09:00.562026Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-24T08:09:01.756390Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"mjz-cki-kb2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771315619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T08:06:59.860427Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T08:06:59.860427Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29750540538316317}},{\"id\":\"mmd-vfp-cq4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Python-Create_a_new_dashboard_with_slo_widget-1738632660\",\"teams\":[],\"created_at\":\"2025-02-04T01:31:02.435234Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-04T01:31:02.435234Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"mn2-fep-8nf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771229219 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T08:06:59.848817Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T08:06:59.848817Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29432832162282835}},{\"id\":\"mv6-3rt-tc2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-26T09:52:26.162275Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-26T09:52:26.162275Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"mvr-w9x-3k3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Nutanix Overview (cloned)\",\"teams\":[],\"created_at\":\"2026-03-18T16:59:48.879523Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2026-03-18T16:59:49.425000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-03-18T17:01:10.201405Z\",\"widget_count\":68,\"widget_count_by_type\":{\"group\":5,\"image\":1,\"query_value\":24,\"note\":5,\"timeseries\":26,\"toplist\":4,\"query_table\":3},\"dashboard_quality_score\":0.68339479853999}},{\"id\":\"mwq-dft-mdy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771292854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T01:47:35.360130Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T01:47:35.360130Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2966683137799872}},{\"id\":\"mwr-ife-dth\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{ unique }} with list_stream widget\",\"teams\":[],\"created_at\":\"2023-03-02T20:48:56.368879Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-02T20:48:56.368879Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"mzm-ewd-b4z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1770981477 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:57.206693Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:57.206693Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2852183792700707}},{\"id\":\"n34-ds2-bgt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771177655 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T17:47:35.566388Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T17:47:35.566388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2924322102532195}},{\"id\":\"n3s-7ng-nig\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770924949 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T19:35:49.807231Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T19:35:49.807231Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2831397651645579}},{\"id\":\"n4f-d26-7fs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:28:08.943107Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:28:08.943107Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"n54-fmb-2fu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771091254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T17:47:35.028797Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T17:47:35.028797Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28925510715155417}},{\"id\":\"n5x-wj3-tt8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-11-16T14:55:32.325509Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-16T14:55:33.604225Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"n78-tuq-8vj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770817651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T13:47:32.082521Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T13:47:32.082521Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2791942349227222}},{\"id\":\"n86-f3u-tw7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:21:09.903112Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:21:55.038682Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"n9p-fvb-t9h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Restore_deleted_dashboards_returns_No_Content_response_1774870746 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-03-30T11:39:06.469986Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-30T11:39:06.469986Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.42823380236295056}},{\"id\":\"nb6-uk2-r2p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard created using cloudformation template\",\"teams\":[],\"created_at\":\"2024-09-27T18:21:01.500799Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-27T18:21:01.500799Z\",\"widget_count\":60,\"widget_count_by_type\":{\"group\":6,\"timeseries\":17,\"toplist\":17,\"sunburst\":1,\"hostmap\":1,\"query_value\":18},\"dashboard_quality_score\":0.0}},{\"id\":\"ncn-sgy-3ck\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771206451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T01:47:32.262378Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T01:47:32.262378Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2934911165362011}},{\"id\":\"ncv-h4k-4it\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ESXi Overview\",\"teams\":[],\"created_at\":\"2024-05-02T19:01:10.511984Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-24T15:00:11.787094Z\",\"widget_count\":30,\"widget_count_by_type\":{\"group\":6,\"note\":3,\"query_value\":2,\"query_table\":5,\"toplist\":4,\"timeseries\":10},\"dashboard_quality_score\":0.0}},{\"id\":\"nea-tsg-ni5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771336057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:37.764018Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:37.764018Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29825694384129997}},{\"id\":\"neh-3bi-sgi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-01T00:04:03.352407Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-01T00:04:03.352407Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ng3-gvu-zgp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Add_custom_timeboard_dashboard_to_an_existing_dashboard_list_returns_OK_response_1765720055 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2025-12-14T13:47:36.122990Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-12-14T13:47:36.122990Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.04010774506273651}},{\"id\":\"ngv-2vy-9s7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Heather's Dashboard Mon, Jun 30, 11:35:52 am\",\"teams\":[],\"created_at\":\"2025-06-30T15:35:52.842719Z\",\"author\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views\":2,\"viewed_at\":\"2025-06-30T15:36:00.513000Z\",\"viewer\":{\"id\":\"36842569\",\"name\":\"Heather Dinh\",\"handle\":\"heather.dinh@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":2,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-06-30T15:35:58.767438Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ni6-8fj-4qa\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:31:58.083575Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T01:31:58.083575Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"nng-79x-qi9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770860855 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T01:47:35.375200Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T01:47:35.375200Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2807828976665561}},{\"id\":\"ntb-xfa-b76\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771177657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T17:47:37.876953Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T17:47:37.876953Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29243229521603464}},{\"id\":\"ntb-zhs-zc6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: systemid LB on starbug\",\"teams\":[],\"created_at\":\"2021-04-26T09:59:02.371956Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-26T09:59:02.371956Z\",\"widget_count\":12,\"widget_count_by_type\":{\"slo\":2,\"timeseries\":8,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"ntg-i6e-bg3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-02-29T22:03:38.377385Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-02-29T22:03:38.377385Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"nw4-esx-am2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_manage_status_widget_1769297872\",\"teams\":[],\"created_at\":\"2026-01-24T23:37:52.540898Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-01-24T23:37:52.540898Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.09762151206855735}},{\"id\":\"nwk-33e-rqs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771076857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T13:47:37.807097Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T13:47:37.807097Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28872569542492}},{\"id\":\"ny8-n52-tqc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771163250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T13:47:31.349591Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T13:47:31.349591Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2919025413041095}},{\"id\":\"p3k-7zr-wpr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenTelemetry Collector Metrics Dashboard (with equiv_otel)\",\"teams\":[],\"created_at\":\"2025-04-10T13:39:12.520913Z\",\"author\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views\":2,\"viewed_at\":\"2025-04-10T13:39:22.716000Z\",\"viewer\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":2,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-04-10T13:39:21.857795Z\",\"widget_count\":75,\"widget_count_by_type\":{\"group\":8,\"note\":10,\"timeseries\":50,\"query_table\":6,\"query_value\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p3v-g5w-f7h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-06T20:25:05.998637Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T20:25:05.998637Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p64-8q6-as6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:44:16.923835Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T02:23:31.421819Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"p6f-bt4-6mx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-30T18:19:34.472771Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-30T18:19:34.472771Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p76-664-fjj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771379255 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:35.411620Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:35.411620Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2998453990053086}},{\"id\":\"p7m-uv2-k7z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770947254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T01:47:35.344786Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T01:47:35.344786Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28395997988100113}},{\"id\":\"p8w-deq-k6x\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"CRP-176\",\"teams\":[],\"created_at\":\"2022-08-24T14:10:40.232901Z\",\"author\":{\"id\":\"4326960\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-4240449\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-08-24T14:10:47.209726Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pdr-4wh-22s\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771278450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T21:47:31.239863Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T21:47:31.239863Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29613864837997744}},{\"id\":\"pj7-aps-g42\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:54:21.314190Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:54:21.314190Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"pkn-mfc-873\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Delete_a_dashboard_returns_OK_response_1757101036 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2025-09-05T19:37:16.888719Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-09-05T19:37:16.888719Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"pn7-37s-qca\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771321651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:47:32.156871Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:47:32.156871Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2977272237665472}},{\"id\":\"pq5-uya-4if\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770823940 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T15:32:20.497756Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T15:32:20.497756Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.279425471255169}},{\"id\":\"pra-83a-gm3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Fly.io Overview \",\"teams\":[],\"created_at\":\"2024-07-17T18:16:25.227238Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-30T22:03:35.055528Z\",\"widget_count\":33,\"widget_count_by_type\":{\"group\":6,\"note\":3,\"query_value\":2,\"check_status\":1,\"toplist\":2,\"query_table\":5,\"hostmap\":1,\"treemap\":1,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"ps4-z69-pes\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771056419 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T08:06:59.946094Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T08:06:59.946094Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2879741585311765}},{\"id\":\"pt8-4pn-jw6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-01T15:29:54.911262Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T15:29:55.700607Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ptm-3j4-ivd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770774457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T01:47:37.749070Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T01:47:37.749070Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2776059016237446}},{\"id\":\"pu8-4pr-9v2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2021-01-21T14:01:08.820798Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-21T14:01:09.882536Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pv5-p65-yis\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-11T18:22:19.897944Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-11T18:22:19.897944Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pwp-jjs-reu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771091257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T17:47:37.800704Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T17:47:37.800704Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2892552090778554}},{\"id\":\"pzz-ksp-bip\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Scaphandre Overview\",\"teams\":[],\"created_at\":\"2024-05-16T19:33:20.983978Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-16T19:33:20.983978Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"q5j-nti-fv6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"For dashboard list tests - DO NOT DELETE\",\"teams\":[],\"created_at\":\"2020-02-11T13:48:52.362473Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-02-11T13:49:16.919666Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"q5p-k9m-btm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-07-22T18:22:19.757565Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-22T18:22:19.757565Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"q5z-8cr-k7v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Run workflow terraform dashboard\",\"teams\":[],\"created_at\":\"2023-02-15T20:13:30.498477Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-15T20:13:30.498477Z\",\"widget_count\":1,\"widget_count_by_type\":{\"run_workflow\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"q94-hec-aga\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771142819 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T08:07:00.320172Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T08:07:00.320172Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29115125561964306}},{\"id\":\"q9c-n75-4rq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-13T22:22:19.842417Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-13T22:22:19.842417Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"q9q-cgi-xfz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771220854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T05:47:35.075347Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T05:47:35.075347Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.294020733861316}},{\"id\":\"qbi-qnr-yz8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771114019 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T00:07:00.339807Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T00:07:00.339807Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29009222856376027}},{\"id\":\"qc7-v9m-xqv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2023-12-08T19:58:04.706734Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T23:55:47.131235Z\",\"widget_count\":2,\"widget_count_by_type\":{\"resolved_powerpack\":1,\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qcr-t4m-v3k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Kepler Overview \",\"teams\":[],\"created_at\":\"2024-05-23T18:18:30.546120Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-23T19:17:16.197535Z\",\"widget_count\":8,\"widget_count_by_type\":{\"group\":2,\"note\":2,\"query_table\":1,\"query_value\":2,\"sunburst\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qd5-u4z-i8z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-27T04:11:24.143503Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-27T04:11:24.143503Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qdx-v94-g8h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771346945 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T16:49:05.714864Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T16:49:05.714864Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2986573133668909}},{\"id\":\"qhf-em6-2i3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-23T13:37:35.644378Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T13:37:36.923776Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"qhn-9tk-agd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771307250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T05:47:31.247004Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T05:47:31.247004Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29719767641932715}},{\"id\":\"qi6-q9m-tpv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:31:11.506879Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:31:11.506879Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"qmz-925-umx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-10T14:22:53.864848Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-10T14:22:54.795680Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"qn2-but-2r8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2021-03-01T08:29:54.466356Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-03-01T08:29:54.466356Z\",\"widget_count\":2,\"widget_count_by_type\":{\"event_stream\":1,\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qpy-d9b-2bv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T10:48:02.242118Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T10:48:02.242118Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qqq-dfc-xdw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770860851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T01:47:32.344538Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T01:47:32.344538Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2807827862219004}},{\"id\":\"qr4-kgv-2qp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770832050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T17:47:31.250081Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T17:47:31.250081Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27972371819893393}},{\"id\":\"qup-ydj-93n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_new_dashboard_with_manage_status_widget_and_show_priority_parameter-1738728686\",\"teams\":[],\"created_at\":\"2025-02-05T04:11:26.503360Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-05T04:11:26.503360Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"qxx-jfk-v42\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-24T15:14:41.219203Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-24T15:14:41.219203Z\",\"widget_count\":1,\"widget_count_by_type\":{\"distribution\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qyf-43n-ett\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771120051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T01:47:32.346172Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T01:47:32.346172Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2903140362818289}},{\"id\":\"qzi-r5y-r98\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771004857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T17:47:37.831140Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T17:47:37.831140Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28607812686281603}},{\"id\":\"qzq-ecf-9wt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bruce test dashboard\",\"teams\":[],\"created_at\":\"2024-10-04T18:55:30.675257Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-09-17T20:47:39.224000Z\",\"viewer\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-09-17T21:22:14.874791Z\",\"widget_count\":3,\"widget_count_by_type\":{\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"rcn-b3p-kkk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-03-04T17:35:14.272142Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-03-04T17:35:16.152659Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"rcn-mvm-599\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1770809033 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T11:23:53.649798Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:23:53.649798Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2788773196542815}},{\"id\":\"riw-awx-8jb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771292850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T01:47:31.297463Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T01:47:31.297463Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.296668164385366}},{\"id\":\"rj7-qir-ztd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-11-24T04:11:51.944178Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-24T04:11:51.944178Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rm8-k6t-8m4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:49:59.470703Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:49:59.470703Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"rmu-unn-gcq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-07-13T16:50:32.341526Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-13T16:50:35.610164Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"rn6-u8f-7yk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_sunburst_widget_and_metrics_data_1734531717\",\"teams\":[],\"created_at\":\"2024-12-18T14:21:57.983817Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-18T14:21:57.983817Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"rpj-3af-hiy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1770809032 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T11:23:52.461448Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:23:52.461448Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.278877275956298}},{\"id\":\"rrq-mav-byg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:16:29.780792Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:18:38.540849Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rsw-epy-tv6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bruce test\",\"teams\":[],\"created_at\":\"2024-10-10T20:26:42.166692Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-11T20:04:05.520446Z\",\"widget_count\":1,\"widget_count_by_type\":{\"distribution\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rt5-yit-kkz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Octopus Deploy Overview\",\"teams\":[],\"created_at\":\"2024-12-02T17:57:23.397063Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-01-03T18:22:09.527000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-12-11T14:54:48.862172Z\",\"widget_count\":7,\"widget_count_by_type\":{\"query_value\":1,\"timeseries\":4,\"query_table\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"rvp-h5j-zhk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:25:11.372571Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:26:34.329161Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"rvw-uxs-a32\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-03T19:56:05.033591Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:38:18.943692Z\",\"widget_count\":3,\"widget_count_by_type\":{\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"rxn-bgr-4pd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771070819 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T12:06:59.927905Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T12:06:59.927905Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28850367174954267}},{\"id\":\"rxz-fpe-m5m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770803250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T09:47:31.134011Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T09:47:31.134011Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2786646861522748}},{\"id\":\"s2z-dpr-nch\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771062457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T09:47:37.794367Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T09:47:37.794367Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2881961810654695}},{\"id\":\"s45-bgf-vnz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771004854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T17:47:35.042730Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T17:47:35.042730Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28607802432722373}},{\"id\":\"s63-52i-i2s\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_items_of_a_dashboard_list_returns_OK_response-1776857985 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-04-22T11:39:46.468170Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-22T11:39:46.468170Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.5013081898315233}},{\"id\":\"s9x-ukk-vg8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770896149 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:35:49.798670Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:35:49.798670Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28208073706847986}},{\"id\":\"se5-psv-5aq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_a_shared_dashboard_returns_OK_response-1770809015 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T11:23:35.759895Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:23:35.759895Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2788766618096723}},{\"id\":\"sev-b86-nvt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771134450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T05:47:31.208619Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T05:47:31.208619Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2908435083399243}},{\"id\":\"sjj-bbz-4fh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770961654 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T05:47:35.013916Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T05:47:35.013916Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.284489481600835}},{\"id\":\"smz-8nn-fq9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770795140 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T07:32:20.558975Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T07:32:20.558975Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27836644572635333}},{\"id\":\"sn2-z5s-m48\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1772651802\",\"teams\":[],\"created_at\":\"2026-03-04T19:16:45.379010Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-04T19:16:45.379010Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.1515363274948051}},{\"id\":\"snm-5mz-keg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770788851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T05:47:32.172835Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T05:47:32.172835Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2781352104623911}},{\"id\":\"spn-xej-z4k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771004850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T17:47:31.244678Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T17:47:31.244678Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28607788466568695}},{\"id\":\"ssh-b9p-hyp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770932851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T21:47:32.249149Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T21:47:32.249149Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2834303521574139}},{\"id\":\"stu-5eb-fje\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-02-24T20:37:44.551755Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-24T20:37:45.473803Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"su8-kbt-qqk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Dashboard Mon, Oct 23, 12:43:30 pm\",\"teams\":[],\"created_at\":\"2023-10-23T16:43:31.132952Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-23T16:43:31.132952Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"suf-n3q-967\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-05-03T02:13:09.132180Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-03T02:13:09.132180Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"suy-p6f-w4x\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardImage-local-1774283696\",\"teams\":[],\"created_at\":\"2026-03-23T16:34:59.925611Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-23T16:34:59.925611Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.1777692002216646}},{\"id\":\"sv6-maw-zx9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-11-28T01:44:57.326488Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-28T01:44:57.326488Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"sz9-v6m-pfd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771085219 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T16:06:59.829425Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T16:06:59.829425Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2890331820163507}},{\"id\":\"t23-rdu-axh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770760051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T21:47:32.131630Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T21:47:32.131630Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2770761811690509}},{\"id\":\"t3h-vti-thz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770889654 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T09:47:35.346619Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T09:47:35.346619Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28184192438993766}},{\"id\":\"t4p-5tf-m3v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770932857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T21:47:37.802978Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T21:47:37.802978Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28343055638130416}},{\"id\":\"t4y-ejp-6je\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1770895285 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:21:25.115315Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:21:25.115315Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2820489411062356}},{\"id\":\"t5a-y6c-yr8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-27T04:11:24.943377Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-27T04:11:24.943377Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"t66-nfh-e25\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2022-09-12T19:54:19.969611Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-09-12T19:57:12.275290Z\",\"widget_count\":1,\"widget_count_by_type\":{\"topology_map\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"t7i-u49-9p6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Noueman's Dashboard Thu, Nov 9, 5:03:34 pm\",\"teams\":[],\"created_at\":\"2023-11-09T16:03:34.595627Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-09T16:03:34.595627Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"t7u-438-bc3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770846457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T21:47:37.800716Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T21:47:37.800716Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2802534729645247}},{\"id\":\"t96-xj5-uby\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_items_of_a_dashboard_list_returns_OK_response_1773395254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-03-13T09:49:06.691575Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-13T09:49:06.691575Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3739806999745111}},{\"id\":\"taf-afu-akt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-23T07:59:08.905416Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T07:59:09.903936Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tah-74k-qkj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771177651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T17:47:32.276807Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T17:47:32.276807Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29243208928480124}},{\"id\":\"tfa-ti2-2bf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771264050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T17:47:31.243948Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T17:47:31.243948Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2956091346380063}},{\"id\":\"tgf-iq6-ujs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-30T18:22:19.797309Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-30T18:22:19.797309Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tk5-sp2-ckj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardQueryTable-local-1776042164\",\"teams\":[],\"created_at\":\"2026-04-13T01:02:48.283396Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-13T01:02:48.283396Z\",\"widget_count\":2,\"widget_count_by_type\":{\"query_table\":2},\"dashboard_quality_score\":0.5588747114596979}},{\"id\":\"tkn-wg4-sr3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_returns_OK_response_1718648515 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-06-17T18:21:55.846134Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-17T18:21:55.846134Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"tmu-kzd-aez\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770976050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T09:47:31.245861Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T09:47:31.245861Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2850188569304273}},{\"id\":\"tpx-acq-vck\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770998819 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T16:06:59.820827Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T16:06:59.820827Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2858560983661291}},{\"id\":\"tpx-f7m-z57\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{ unique }}\",\"teams\":[],\"created_at\":\"2023-09-12T19:44:24.710209Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-12T19:44:24.710209Z\",\"widget_count\":1,\"widget_count_by_type\":{\"heatmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tx6-46v-wzw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-19T03:11:04.352440Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-19T03:11:04.352440Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tyg-8ef-5du\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771148850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T09:47:31.210504Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T09:47:31.210504Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2913730222968041}},{\"id\":\"u4x-txd-uf6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:26:48.362206Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:26:48.362206Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"u6k-8ra-z4w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770817650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T13:47:31.230094Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T13:47:31.230094Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27919420357265373}},{\"id\":\"u83-pun-a9b\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771321655 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:47:35.385380Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:47:35.385380Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29772734248106114}},{\"id\":\"uba-qwg-578\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Nutanix - Activity Monitoring\",\"teams\":[],\"created_at\":\"2026-03-17T11:35:05.168296Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":37,\"viewed_at\":\"2026-05-06T14:46:50.041000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":37,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-04-22T11:05:57.581463Z\",\"widget_count\":35,\"widget_count_by_type\":{\"group\":5,\"image\":1,\"query_value\":12,\"note\":5,\"timeseries\":8,\"list_stream\":4},\"dashboard_quality_score\":0.9551039430779807}},{\"id\":\"ubg-7fr-tdr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771393657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:37.834232Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:37.834232Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.30037500197405}},{\"id\":\"uc8-ykp-3c7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Fly.io Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-08-13T17:58:15.161434Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-14T21:07:55.940923Z\",\"widget_count\":36,\"widget_count_by_type\":{\"group\":6,\"note\":3,\"query_value\":2,\"check_status\":1,\"toplist\":2,\"query_table\":4,\"hostmap\":1,\"treemap\":1,\"timeseries\":16},\"dashboard_quality_score\":0.0}},{\"id\":\"uci-9wg-zjd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771264057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T17:47:37.711705Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T17:47:37.711705Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29560937246840263}},{\"id\":\"udi-jgj-55m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770875251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T05:47:31.551208Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T05:47:31.551208Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28131227093581224}},{\"id\":\"ug4-a8z-jva\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-07T16:37:55.238444Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-07T16:37:55.238444Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ug6-j5q-8mm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T16:13:44.101907Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T16:13:45.105031Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"unw-hwk-68w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:31:03.437671Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:31:03.437671Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"upb-689-i8b\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770976057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T09:47:37.795529Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T09:47:37.795529Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2850190977727647}},{\"id\":\"uq2-urd-dzu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Scaphandre Overview \",\"teams\":[],\"created_at\":\"2024-05-16T19:33:47.986664Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-23T19:50:58.459791Z\",\"widget_count\":24,\"widget_count_by_type\":{\"group\":5,\"note\":4,\"query_value\":5,\"timeseries\":8,\"toplist\":1,\"query_table\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uqe-kqz-p6j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-11-17T18:42:10.349402Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-17T18:42:11.457516Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"uqx-qwy-i5y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770990457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T13:47:37.798194Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T13:47:37.798194Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28554861175952617}},{\"id\":\"urw-rep-zs5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1771240889 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:29.899724Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:29.899724Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.294757450369468}},{\"id\":\"uu8-cxu-zea\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Beacon Service\",\"teams\":[],\"created_at\":\"2023-10-10T18:45:29.276049Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-10T18:45:29.276049Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uw4-48e-88t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:59:31.861704Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:59:31.861704Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ux5-fxw-5cf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Screenboard Thu, Jan 26, 9:35:17 am\",\"teams\":[],\"created_at\":\"2023-01-26T08:35:17.499834Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-26T08:35:36.597872Z\",\"widget_count\":1,\"widget_count_by_type\":{\"run_workflow\":1},\"dashboard_quality_score\":0.0}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":0,\"first_offset\":0,\"limit\":500,\"prev_offset\":null,\"next_offset\":500,\"last_offset\":500,\"total\":590}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page%5Blimit%5D=500\",\"next\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page[offset]=500&page[limit]=500\",\"first\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page[offset]=0&page[limit]=500\",\"last\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page[offset]=500&page[limit]=500\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboards/usage", + "query": [ + [ + "page[limit]", + "500" + ], + [ + "page[offset]", + "500" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"ux8-fvf-2t2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboard_import-local-1774386000\",\"teams\":[\"foobar\"],\"created_at\":\"2026-03-24T21:00:09.496200Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-24T21:00:09.496200Z\",\"widget_count\":18,\"widget_count_by_type\":{\"alert_graph\":2,\"alert_value\":1,\"change\":1,\"distribution\":1,\"check_status\":1,\"heatmap\":1,\"hostmap\":1,\"note\":2,\"query_value\":1,\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"slo\":1,\"query_table\":2},\"dashboard_quality_score\":0.6122496869776752}},{\"id\":\"uxq-tpu-pzd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771258019 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T16:06:59.841715Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T16:06:59.841715Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29538732761228936}},{\"id\":\"uy6-4fe-nqd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:07:21.855524Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:08:42.636698Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uzv-9tr-d3c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771033654 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T01:47:35.021065Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T01:47:35.021065Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.287137029784934}},{\"id\":\"v2t-32y-azs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771048051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:32.213150Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:32.213150Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28766644042113615}},{\"id\":\"v37-yyy-9ym\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-03-30T02:06:59.053289Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-03-30T02:06:59.053289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"v3w-u4i-tww\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T14:14:41.723635Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T14:14:41.723635Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"v4p-fwd-mjf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771272419 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T20:06:59.911152Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T20:06:59.911152Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2959168440535831}},{\"id\":\"v74-xyc-vd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T21:28:00.315443Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T21:28:01.033524Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vdt-sff-xrf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"kevinzou_sandbox\",\"teams\":[],\"created_at\":\"2023-10-10T18:20:08.538567Z\",\"author\":{\"id\":\"4348810\",\"name\":\"Kevin Zou\",\"handle\":\"kevin.zou@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-01T15:26:52.470946Z\",\"widget_count\":4,\"widget_count_by_type\":{\"timeseries\":1,\"resolved_powerpack\":1,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"vfn-gvr-cxk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-25T18:21:50.656210Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-25T18:21:50.656210Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vg2-fg8-7vh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog-api-spec Automerging\",\"teams\":[],\"created_at\":\"2024-09-23T16:27:24.646048Z\",\"author\":{\"id\":\"7359812\",\"name\":\"Jack Edmonds\",\"handle\":\"jack.edmonds@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-01-14T22:53:10.616000Z\",\"viewer\":{\"id\":\"21011231\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-jahanzeb.hassan@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-09-24T21:27:33.180160Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vgn-f2f-zr3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (cloned)\",\"teams\":[],\"created_at\":\"2023-11-21T20:19:09.753235Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-21T20:19:09.753235Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"vma-hxa-ma8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770809540 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T11:32:21.170814Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:32:21.170814Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2788959605891137}},{\"id\":\"vq5-vug-huw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771206454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T01:47:35.094922Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T01:47:35.094922Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2934911991660391}},{\"id\":\"vs4-szr-mtr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770860857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T01:47:37.797214Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T01:47:37.797214Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2807829652007914}},{\"id\":\"vs6-9qu-vur\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-15T13:37:22.574326Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:37:23.238265Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vv8-3hp-sxj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1773846313\",\"teams\":[],\"created_at\":\"2026-03-18T15:05:16.540940Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-18T15:05:16.540940Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.17073820790521346}},{\"id\":\"vvn-nwe-23z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2024-03-01T00:18:38.736689Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-03-01T00:18:38.736689Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"w2e-x2y-3vt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_returns_OK_response_1775590678 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-04-07T19:37:58.565413Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-07T19:37:58.565413Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.4547069783059085}},{\"id\":\"w69-gn2-yx7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771062454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T09:47:35.025667Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T09:47:35.025667Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2881960577302342}},{\"id\":\"w8n-x44-t2p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770990451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T13:47:32.224268Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T13:47:32.224268Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2855483852732668}},{\"id\":\"wb7-w9w-yt8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770780740 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T03:32:20.760262Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T03:32:20.760262Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27783691771415275}},{\"id\":\"wbr-dug-df9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771350451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T17:47:32.174584Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T17:47:32.174584Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2987862306684219}},{\"id\":\"wce-cqf-nhh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-05-22T00:22:51.925033Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-05-22T00:22:51.925033Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"wcp-6ik-3wf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-29T01:44:20.834836Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-29T01:44:20.834836Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"wds-47g-3uz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770788854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T05:47:35.089841Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T05:47:35.089841Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2781352962008547}},{\"id\":\"wke-6z5-wyq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770910549 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T15:35:49.842435Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T15:35:49.842435Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2826102310413242}},{\"id\":\"wmh-6sq-386\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770918451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T17:47:32.261724Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T17:47:32.261724Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2829008172058231}},{\"id\":\"wpj-thq-g93\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned) 2025\",\"teams\":[],\"created_at\":\"2025-06-30T08:53:17.268411Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-06-30T08:53:17.901000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-06-30T08:53:17.268411Z\",\"widget_count\":83,\"widget_count_by_type\":{\"group\":5,\"note\":14,\"treemap\":1,\"hostmap\":1,\"query_value\":39,\"timeseries\":18,\"toplist\":3,\"query_table\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"wrg-gv3-3hf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Delete_custom_timeboard_dashboard_from_an_existing_dashboard_list_returns_OK_response_1720880516 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-07-13T14:21:57.467620Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-13T14:21:57.467620Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"wse-7yb-mn5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771249654 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T13:47:35.050265Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T13:47:35.050265Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2950797391895901}},{\"id\":\"wsr-yee-qm5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:59:31.598171Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:59:31.598171Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"x3m-fv4-6ux\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771076854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T13:47:35.001197Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T13:47:35.001197Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2887255707185161}},{\"id\":\"x45-5fs-594\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-15T13:43:02.051856Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:43:02.798289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"x4t-vem-u26\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771148857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T09:47:37.806747Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T09:47:37.806747Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2913732433279884}},{\"id\":\"x77-xd6-a6v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-10-23T19:59:39.468599Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-05T20:38:35.743635Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"xc8-h6m-gyt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-04-13T11:50:10.192480Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-13T11:50:38.881933Z\",\"widget_count\":3,\"widget_count_by_type\":{\"slo\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"xcu-6yc-kms\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771148851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T09:47:32.332380Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T09:47:32.332380Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2913730420253869}},{\"id\":\"xdp-wbm-5rj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T21:50:56.241695Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:50:56.241695Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"xfe-kap-e5y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-21T13:59:15.683388Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-21T13:59:15.683388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xgg-369-k9w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-05-13T01:28:36.563248Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-13T01:28:36.563248Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xgk-vue-3qe\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboard_update-local-1774386000\",\"teams\":[\"foobar\"],\"created_at\":\"2026-03-24T21:00:09.313665Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-24T21:00:09.313665Z\",\"widget_count\":18,\"widget_count_by_type\":{\"alert_graph\":2,\"alert_value\":1,\"change\":1,\"distribution\":1,\"check_status\":1,\"heatmap\":1,\"hostmap\":1,\"note\":2,\"query_value\":1,\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"slo\":1,\"query_table\":2},\"dashboard_quality_score\":0.61224967695959}},{\"id\":\"xik-jrv-mdc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770751940 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T19:32:20.784646Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T19:32:20.784646Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27677789083171905}},{\"id\":\"xiz-y8z-chv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardAlertValue-local-1774284759\",\"teams\":[],\"created_at\":\"2026-03-23T16:52:43.134570Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-23T16:52:43.134570Z\",\"widget_count\":2,\"widget_count_by_type\":{\"alert_value\":2},\"dashboard_quality_score\":0.17778628200479657}},{\"id\":\"xkq-2cm-fed\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:57:16.687093Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:57:16.687093Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xm8-dhx-hhp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardQueryValueFormula-local-1772671938\",\"teams\":[],\"created_at\":\"2026-03-05T00:52:21.132803Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-05T00:52:21.132803Z\",\"widget_count\":2,\"widget_count_by_type\":{\"query_value\":2},\"dashboard_quality_score\":0.35307450557572834}},{\"id\":\"xu2-dmz-vbu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770875251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T05:47:32.100546Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T05:47:32.100546Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2813122696097398}},{\"id\":\"xue-5t2-hzf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T10:40:07.910997Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T10:40:07.910997Z\",\"widget_count\":1,\"widget_count_by_type\":{\"log_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xuj-rfk-ipn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771307254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T05:47:35.024803Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T05:47:35.024803Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2971977938065021}},{\"id\":\"xxj-ch8-d5z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_a_timeseries_widget_using_formulas_and_functions_cloud_cost_query_1773243479\",\"teams\":[],\"created_at\":\"2026-03-11T15:38:00.121654Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-11T15:38:00.121654Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.4911950288528393}},{\"id\":\"xyw-vsq-3mn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Nutanix - Overview (cloned)\",\"teams\":[],\"created_at\":\"2026-03-23T17:04:40.240552Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":2,\"viewed_at\":\"2026-03-24T02:18:54.740000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":2,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2026-03-23T17:04:40.240552Z\",\"widget_count\":69,\"widget_count_by_type\":{\"group\":5,\"image\":1,\"query_value\":24,\"note\":5,\"timeseries\":27,\"toplist\":4,\"query_table\":3},\"dashboard_quality_score\":0.7133295162251634}},{\"id\":\"xz5-qbs-c89\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771163257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T13:47:37.808401Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T13:47:37.808401Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29190275727522796}},{\"id\":\"xz6-mat-r9c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_check_status_widget_1736101311\",\"teams\":[],\"created_at\":\"2025-01-05T18:21:52.120117Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-05T18:21:52.120117Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"y25-ya8-jdc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771120054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T01:47:35.359677Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T01:47:35.359677Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29031412556447567}},{\"id\":\"y2q-dni-cqm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771220857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T05:47:37.711542Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T05:47:37.711542Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2940208092689621}},{\"id\":\"y3a-44d-84n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771192050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T21:47:31.285869Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T21:47:31.285869Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2929615452075585}},{\"id\":\"y3r-ajw-7pr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770817654 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T13:47:35.057664Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T13:47:35.057664Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2791943227920918}},{\"id\":\"y3t-eqa-763\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-14T06:21:50.287887Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-14T06:21:50.287887Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"y6m-dsb-3uq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-11-17T18:39:28.101260Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-17T18:39:28.748416Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"y7m-csd-ady\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770731254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T13:47:35.087124Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T13:47:35.087124Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2760172405419328}},{\"id\":\"ya2-tzk-zyw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-07-07T19:53:37.805020Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T19:53:38.731282Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ycg-nrd-xhy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770895940 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:32:20.624176Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:32:20.624176Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2820730238174243}},{\"id\":\"ycy-u36-z2k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771220850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T05:47:31.282996Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T05:47:31.282996Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2940205728794115}},{\"id\":\"ydt-8ah-kfv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Noueman's Dashboard Thu, May 9, 11:49:33 pm\",\"teams\":[],\"created_at\":\"2024-05-09T21:49:33.558354Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-09T21:49:33.558354Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"yes-s6q-j58\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-02-02T15:50:14.521415Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-02-02T15:50:16.741690Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"yj5-q5m-u3v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Rust-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1770096876 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-03T05:34:36.923025Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-03T05:34:36.923025Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.11046558030045606}},{\"id\":\"yj9-r52-is2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-24T08:06:24.291924Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-24T08:06:25.020191Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ymj-b3m-xy9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_powerpack_widget_1778125170 with powerpack widget\",\"teams\":[],\"created_at\":\"2026-05-07T03:39:31.704516Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-05-07T03:39:31.704516Z\",\"widget_count\":2,\"widget_count_by_type\":{\"resolved_powerpack\":1,\"note\":1},\"dashboard_quality_score\":0.23952124486914217}},{\"id\":\"ynt-7re-g5t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard with Powerpack\",\"teams\":[],\"created_at\":\"2023-09-13T20:04:26.921191Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-13T20:04:26.921191Z\",\"widget_count\":3,\"widget_count_by_type\":{\"resolved_powerpack\":1,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"yp5-cx9-vdp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771105654 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T21:47:35.004691Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T21:47:35.004691Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.28978459862108663}},{\"id\":\"yq7-7uz-gr9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-10-04T18:40:12.197797Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:40:12.197797Z\",\"widget_count\":19,\"widget_count_by_type\":{\"alert_graph\":2,\"alert_value\":2,\"change\":1,\"distribution\":1,\"check_status\":1,\"heatmap\":1,\"hostmap\":1,\"note\":2,\"query_value\":1,\"query_table\":1,\"scatterplot\":1,\"servicemap\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"yr9-iwb-sye\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771192057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T21:47:37.808442Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T21:47:37.808442Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2929617850532688}},{\"id\":\"ytd-nd3-bxu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-19T01:32:56.908916Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-19T01:32:56.908916Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ywe-vtz-gf3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_apm_dependency_stats_widget_1775389170\",\"teams\":[],\"created_at\":\"2026-04-05T11:39:30.959125Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-05T11:39:30.959125Z\",\"widget_count\":1,\"widget_count_by_type\":{\"query_table\":1},\"dashboard_quality_score\":0.4472971813396155}},{\"id\":\"ywh-67w-ngi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:01:42.426084Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:02:16.920717Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"z3n-t5n-ukp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardQueryTable_import-local-1774283697\",\"teams\":[],\"created_at\":\"2026-03-23T16:35:00.455252Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-23T16:35:00.455252Z\",\"widget_count\":2,\"widget_count_by_type\":{\"query_table\":2},\"dashboard_quality_score\":0.4821989531662612}},{\"id\":\"z68-mvw-2q4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_new_dashboard_with_a_timeseries_widget_and_an_overlay_request-1770808902\",\"teams\":[],\"created_at\":\"2026-02-11T11:21:42.825036Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:21:42.825036Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27887248746203835}},{\"id\":\"z6s-z5h-2gm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770918457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T17:47:37.818865Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T17:47:37.818865Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2829010215473871}},{\"id\":\"z76-ig8-iba\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1757645959 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2025-09-12T02:59:19.475472Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-09-12T02:59:19.475472Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"zfd-a24-thy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"PCF Cloud Controller\",\"teams\":[],\"created_at\":\"2022-04-15T08:57:00.852815Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-21T09:55:03.424538Z\",\"widget_count\":8,\"widget_count_by_type\":{\"group\":2,\"timeseries\":6},\"dashboard_quality_score\":0.0}},{\"id\":\"zpe-eix-52j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770976051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T09:47:32.315914Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T09:47:32.315914Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2850188747494127}},{\"id\":\"zsm-t5r-gqb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771286820 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T00:07:00.389782Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T00:07:00.389782Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29644637553662456}},{\"id\":\"zsp-mfz-rnt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"updated api timeboard\",\"teams\":[],\"created_at\":\"2023-01-23T07:59:06.665310Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T07:59:07.322412Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"zst-bcm-gq6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-12-08T08:08:54.613783Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-01-14T22:53:12.978000Z\",\"viewer\":{\"id\":\"21011231\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-jahanzeb.hassan@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-14T22:53:33.484565Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"zu4-qn7-y39\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771292857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T01:47:37.712122Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T01:47:37.712122Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.29666837873306773}},{\"id\":\"zwr-bi3-xzg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771206457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T01:47:37.822629Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T01:47:37.822629Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2934912994632327}},{\"id\":\"zwx-uk8-q6h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770760054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T21:47:35.076033Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T21:47:35.076033Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.27707626791036843}},{\"id\":\"zy8-8tg-sxr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1734697397\",\"teams\":[],\"created_at\":\"2024-12-20T12:23:21.850235Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-20T12:23:21.850235Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"zyb-k3y-n42\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_timeseries_widget_with_ci_pipelines_data_source_1761795515 with ci_pipelines datasource\",\"teams\":[],\"created_at\":\"2025-10-30T03:38:36.061518Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-10-30T03:38:36.061518Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":500,\"first_offset\":0,\"limit\":500,\"prev_offset\":0,\"next_offset\":null,\"last_offset\":500,\"total\":590}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page%5Blimit%5D=500&page%5Boffset%5D=500\",\"prev\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page[offset]=0&page[limit]=500\",\"first\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page[offset]=0&page[limit]=500\",\"last\":\"https://api.datadoghq.com/api/v2/dashboards/usage?page[offset]=500&page[limit]=500\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get usage stats for all dashboards returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-06-01T18:15:39.812Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboards/usage", + "query": [ + [ + "filter[edited_before]", + "2025-04-26T00:00:00Z" + ], + [ + "filter[viewed_before]", + "2025-04-26T00:00:00Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"284-wiv-iqk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-21T21:02:03.739689Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-21T21:02:03.739689Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"29x-55z-rt2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T22:20:08.019993Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:20:09.093470Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2be-q62-ep5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-23T00:04:08.199090Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-23T00:04:08.199090Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2gn-qtd-zd9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:54:10.920756Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:54:57.107615Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"2m8-ht3-7kf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.660825Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.660825Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2n8-amr-8ws\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_hostmap_widget_1738642608\",\"teams\":[],\"created_at\":\"2025-02-04T04:16:49.306022Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-04T04:16:49.306022Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2qn-4hs-6nz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-06T18:28:02.296323Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T18:28:02.296323Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2rd-dc2-4qz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"delete-me\",\"teams\":[],\"created_at\":\"2023-04-04T07:20:20.175651Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-04-04T07:25:00.141124Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2t6-ira-9sr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-26T16:19:46.726552Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-26T16:19:46.726552Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3bd-yi5-t9f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-01-24T20:36:07.585183Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-24T20:36:07.585183Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":9,\"image\":1,\"hostmap\":1,\"heatmap\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3gp-ihg-25a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:49.231714Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:49.231714Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3hx-aas-pkd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:07:47.665899Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T01:11:49.409229Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3jh-dek-qps\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-08T21:59:54.884830Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T22:00:29.988353Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"3jt-5cb-icy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-02-24T20:40:32.063650Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-24T20:40:33.482665Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"3kr-vna-uug\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:56:42.073944Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:56:42.073944Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3y3-3x5-kq8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-11-09T16:03:35.113528Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-09T16:03:47.912796Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"43b-kw6-vqr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2023-09-20T09:37:10.513590Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-06T14:44:10.522900Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":10,\"image\":1,\"hostmap\":1,\"heatmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4j8-nbn-4gi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-09-28T01:37:23.346984Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-28T01:37:23.346984Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4n7-s4g-dqv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"For dashboard list tests - DO NOT DELETE\",\"teams\":[],\"created_at\":\"2020-02-11T13:49:29.555334Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-04-08T17:54:25.574039Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"4ud-du4-pi3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-17T08:32:02.449350Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-17T08:32:02.449350Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"4wp-g9w-rqp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T16:34:52.946050Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T16:34:52.946050Z\",\"widget_count\":1,\"widget_count_by_type\":{\"change\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4wy-ajm-bvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:35:18.554744Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:35:18.554744Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"4z7-iip-zrt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T17:09:12.214893Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:09:12.874904Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"59f-bun-r3c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T15:17:19.954644Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T15:17:33.545302Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"list_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5cj-8j7-qpy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Octopus Deploy Overview\",\"teams\":[],\"created_at\":\"2024-12-11T20:48:25.007210Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":27,\"viewed_at\":\"2025-01-16T20:42:51.598000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":27,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-16T20:12:02.010750Z\",\"widget_count\":31,\"widget_count_by_type\":{\"group\":6,\"note\":5,\"query_value\":8,\"list_stream\":2,\"toplist\":2,\"timeseries\":1,\"query_table\":7},\"dashboard_quality_score\":0.0}},{\"id\":\"5i4-3c5-qby\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 1:37:28 pm\",\"teams\":[],\"created_at\":\"2023-12-20T18:37:28.853122Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T18:37:28.853122Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"5mr-xms-2qa\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T22:16:56.913567Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:16:57.568474Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5qz-2i3-6cq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T14:14:41.648472Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T14:14:41.648472Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5tp-tr6-93q\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-21T13:59:15.028164Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-21T13:59:15.028164Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"63v-49e-a7d\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"sarah test\",\"teams\":[],\"created_at\":\"2023-05-15T18:12:47.853642Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-05-15T18:25:28.895732Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"679-8up-bf2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-04-14T13:40:43.116109Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-14T13:40:43.116109Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"6by-h9d-gui\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"MM RBAC Dashboard\",\"teams\":[],\"created_at\":\"2021-04-23T16:14:13.820995Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-23T16:14:13.820995Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6ez-pq7-4zk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_shared_dashboard_returns_OK_response-1689999025 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2023-07-22T04:10:25.713775Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-22T04:10:25.713775Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6md-r2g-kxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-17T03:08:25.445281Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-17T03:08:25.445281Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6pm-2ad-2v8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-15T13:45:39.004786Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:45:40.299693Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6qu-cxf-9jy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.237970Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.237970Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"74v-m9u-yzs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Event Timeline Widget Dashboard\",\"teams\":[],\"created_at\":\"2020-12-10T04:21:12.270024Z\",\"author\":null,\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-12-10T04:21:12.270024Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_timeline\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"76m-n9x-wd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"DL FF TF\",\"teams\":[],\"created_at\":\"2021-02-02T13:54:05.514952Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-02-02T13:54:05.514952Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"795-wur-2am\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:13.784143Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:13.784143Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"7b3-yvp-mmq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T16:16:55.297530Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T16:16:55.297530Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7dp-46c-6tr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-07T16:37:56.369573Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-07T16:37:56.369573Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7q2-h97-j2m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_items_of_a_Dashboard_List_returns_OK_response_1731709308 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-11-15T22:21:49.262821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-15T22:21:49.262821Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"7ym-viw-7if\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard created using cloudformation template\",\"teams\":[],\"created_at\":\"2024-09-27T18:25:34.741716Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-27T18:25:34.741716Z\",\"widget_count\":60,\"widget_count_by_type\":{\"group\":6,\"timeseries\":17,\"toplist\":17,\"sunburst\":1,\"hostmap\":1,\"query_value\":18},\"dashboard_quality_score\":0.0}},{\"id\":\"823-wmx-kyk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T21:30:35.101006Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T21:30:36.200544Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"86h-24u-mwc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vSphere VM Property Metrics\",\"teams\":[],\"created_at\":\"2023-07-18T18:13:38.804575Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T19:57:25.366422Z\",\"widget_count\":14,\"widget_count_by_type\":{\"query_table\":10,\"treemap\":1,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"884-jxj-d7f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Infrastructure Overview\",\"teams\":[],\"created_at\":\"2024-01-04T11:25:42.564360Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-05T18:05:45.334010Z\",\"widget_count\":64,\"widget_count_by_type\":{\"note\":8,\"timeseries\":17,\"hostmap\":2,\"query_value\":32,\"toplist\":3,\"query_table\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"88m-nrr-j4c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_shared_dashboard_returns_OK_response_1720742852 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-07-12T00:07:33.291059Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-12T00:07:33.291059Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"89p-5x9-mfp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T04:09:45.848591Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T04:09:45.848591Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8mr-z8r-xaq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:22.284588Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:22.284588Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"8qn-sx4-6py\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:57:16.337700Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:57:16.337700Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8r3-fr7-g8h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-03T11:06:05.600888Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-03T18:00:35.762592Z\",\"widget_count\":3,\"widget_count_by_type\":{\"hostmap\":1,\"timeseries\":1,\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8rp-qrc-d72\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Java-Create_a_new_dashboard_with_geomap_widget-1737861024\",\"teams\":[],\"created_at\":\"2025-01-26T03:10:24.707218Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-26T03:10:24.707218Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8v6-29d-g7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Timeboard Dashboard 1769733\",\"teams\":[],\"created_at\":\"2024-10-04T18:49:59.050042Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:49:59.050042Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8vg-n3m-t2r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog's Dashboard Mon, Sep 18, 1:11:53 pm (cloned)\",\"teams\":[],\"created_at\":\"2023-10-13T14:28:19.062400Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-13T14:28:19.062400Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8w6-777-dbc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:52.825402Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:52.825402Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8yn-6s7-pue\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T01:34:46.545176Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T01:34:46.545176Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9dy-6d6-92u\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"KubeVirt Overview (DEV)\",\"teams\":[],\"created_at\":\"2025-01-07T07:17:49.547882Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":10,\"viewed_at\":\"2025-01-07T15:05:57.088000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":10,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-07T07:18:50.881143Z\",\"widget_count\":48,\"widget_count_by_type\":{\"group\":6,\"note\":1,\"query_value\":4,\"timeseries\":31,\"query_table\":2,\"toplist\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"9fh-bsk-dez\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T06:21:51.929267Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T06:21:51.929267Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gp-yca-ewc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-07-03T05:06:40.070179Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-03T05:06:40.070179Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gw-nvp-fv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:16:01.442667Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:16:01.442667Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9j7-b7g-fmp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-07-07T17:12:20.570681Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:12:21.707927Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9km-gj8-2rj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:20:54.758861Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:21:08.649752Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9qq-fww-7dt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_event_stream_list_stream_widget_1736259735 with list_stream widget\",\"teams\":[],\"created_at\":\"2025-01-07T14:22:16.267384Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-07T14:22:16.267384Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9ra-4tp-6x8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:30:44.267214Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:30:44.267214Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9td-t9c-kk7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T14:04:12.968245Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T16:29:07.018541Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"event_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9tw-t3j-j2j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:33.097538Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:33.097538Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9wr-ifb-ks3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard for testing\",\"teams\":[],\"created_at\":\"2024-06-28T14:32:31.419746Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-28T14:32:31.419746Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":1,\"sunburst\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9ze-x5d-4uk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-02T10:21:50.272937Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-02T10:21:50.272937Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"asp-qkq-xha\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:47:56.046241Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:53:05.322597Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"b2p-ixy-wbd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T02:22:19.767227Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T02:22:19.767227Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"b2x-2d8-smj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vsphere test\",\"teams\":[],\"created_at\":\"2023-11-15T14:29:57.863141Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-17T15:09:09.324288Z\",\"widget_count\":10,\"widget_count_by_type\":{\"note\":2,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b6n-8j5-2iz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned) (cloned)\",\"teams\":[],\"created_at\":\"2023-09-26T09:00:00.247208Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-05T14:50:19.276985Z\",\"widget_count\":42,\"widget_count_by_type\":{\"image\":1,\"note\":5,\"hostmap\":1,\"timeseries\":9,\"query_value\":21,\"heatmap\":2,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"b6n-d8r-7em\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: splunk LB \",\"teams\":[],\"created_at\":\"2021-05-03T13:03:46.217614Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-03T13:03:46.217614Z\",\"widget_count\":12,\"widget_count_by_type\":{\"note\":3,\"slo\":1,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b9v-vd2-fq2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Etiennes Dashboard Tue, Mar 18, 3:56:32 pm\",\"teams\":[],\"created_at\":\"2025-03-18T14:56:32.569828Z\",\"author\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-03-18T14:56:32.743000Z\",\"viewer\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-03-18T14:57:27.767981Z\",\"widget_count\":1,\"widget_count_by_type\":{\"query_value\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bcy-i9m-yk2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-26T09:52:25.783725Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-26T09:52:25.783725Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bgf-jzg-b7a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (shanel clone)\",\"teams\":[],\"created_at\":\"2024-06-06T17:13:17.485112Z\",\"author\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T17:28:16.789541Z\",\"widget_count\":156,\"widget_count_by_type\":{\"group\":11,\"note\":28,\"check_status\":8,\"query_value\":59,\"query_table\":24,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"bgp-uee-rt3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:51.418778Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:51.418778Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bpc-yw5-2ai\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-11T05:06:09.509411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-11T05:06:09.509411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bpj-ytu-fpt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:46:41.035816Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:48:05.847943Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"bru-u6k-rjq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Wisdom\",\"teams\":[],\"created_at\":\"2021-12-15T14:39:24.510324Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-12-15T16:54:32.046189Z\",\"widget_count\":14,\"widget_count_by_type\":{\"note\":2,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"c5z-eix-jck\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_a_toplist_widget_with_stacked_type_and_no_legend_specified_1742496578\",\"teams\":[],\"created_at\":\"2025-03-20T18:49:39.343102Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-20T18:49:39.343102Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"cf8-ifs-4vf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 10:34:03 am\",\"teams\":[],\"created_at\":\"2023-12-20T15:34:03.307486Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T15:34:03.307486Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"cmr-azj-aw6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.386452Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.386452Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"cw4-irn-n79\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T21:55:02.601652Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:55:02.601652Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"cx2-6g6-mni\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_timeseries_widget_with_legacy_live_span_time_format_1739376942 with legacy live span time\",\"teams\":[],\"created_at\":\"2025-02-12T16:15:43.276834Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-12T16:15:43.276834Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"cxr-rw5-dfb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Dashboard Wed, Oct 11, 2:07:21 pm\",\"teams\":[],\"created_at\":\"2023-10-11T18:07:21.856517Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T20:32:00.487697Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"dea-tup-asp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-01-24T17:57:50.017145Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-24T17:57:50.017145Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"deh-2pa-jv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Timeboard Wed, Mar 3, 10:57:28 am\",\"teams\":[],\"created_at\":\"2021-03-03T09:57:28.304302Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-03-03T09:59:37.861240Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"dkd-m4y-nfc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-07-29T16:45:28.934525Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-29T16:45:31.392137Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"dvv-i5b-zbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (cloned)\",\"teams\":[],\"created_at\":\"2024-01-08T19:23:43.013799Z\",\"author\":{\"id\":\"6515857\",\"name\":\"Candace Shamieh\",\"handle\":\"candace.shamieh@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-08T19:42:17.791727Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"timeseries\":26,\"query_table\":21},\"dashboard_quality_score\":0.0}},{\"id\":\"dw4-m52-byx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_logs_stream_list_stream_widget_and_storage_parameter_1733350921 with list_stream widget\",\"teams\":[],\"created_at\":\"2024-12-04T22:22:01.830291Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-04T22:22:01.830291Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"dzm-bwc-ean\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ListStream\",\"teams\":[],\"created_at\":\"2025-02-25T10:01:52.815694Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-25T10:01:52.815694Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e63-myc-uhh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Orchestrator Writer [EP]\",\"teams\":[],\"created_at\":\"2022-03-29T12:23:13.061726Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-03-29T12:23:13.061726Z\",\"widget_count\":57,\"widget_count_by_type\":{\"group\":7,\"timeseries\":47,\"sunburst\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"e7w-ted-kp5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T19:50:57.927100Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T19:50:58.454696Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e84-h6q-8ru\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-02-03T14:05:45.526436Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-02-03T14:05:47.627593Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e88-itr-s9c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardFreeText_import-local-1738715031\",\"teams\":[],\"created_at\":\"2025-02-05T00:23:56.182926Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-05T00:23:56.182926Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"e8c-sk3-j9y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-14T02:11:46.227958Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-14T02:11:46.227958Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eg4-nui-f7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T16:11:30.640663Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T16:11:31.171270Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"egd-5vg-rac\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-10T14:20:28.977761Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-10T14:20:29.512718Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ehj-axw-7z7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T14:51:18.428821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:21:55.042874Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eq3-r74-a85\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.014458Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.014458Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eup-drq-jnt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-01T16:07:22.663414Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T16:07:23.517492Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ez7-i7k-kvy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardLogStream-local-1737547858\",\"teams\":[],\"created_at\":\"2025-01-22T12:11:02.505903Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-22T12:11:02.505903Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f47-qxr-zry\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Merging Tracking\",\"teams\":[],\"created_at\":\"2024-08-29T15:44:56.266108Z\",\"author\":{\"id\":\"7557262\",\"name\":\"Anika Maskara\",\"handle\":\"anika.maskara@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-29T15:44:56.266108Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f4a-76m-nbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:27:11.505665Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:49:08.310691Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"f4q-d9c-2nj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-11T14:44:24.984417Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-11T14:44:24.984417Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f59-6bj-c7p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"[corpit] Iroh License Check Dashboard\",\"teams\":[],\"created_at\":\"2023-01-30T11:34:18.574271Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-30T11:34:30.591612Z\",\"widget_count\":57,\"widget_count_by_type\":{\"query_value\":28,\"timeseries\":11,\"image\":12,\"list_stream\":1,\"toplist\":2,\"note\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f5q-i7e-ewj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"jeffallen - pcf billing test\",\"teams\":[],\"created_at\":\"2022-05-20T20:30:30.729505Z\",\"author\":{\"id\":\"4053606\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-3920545\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-06-09T21:01:57.752118Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"fim-fgh-t55\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_run_workflow_widget_1737023351\",\"teams\":[],\"created_at\":\"2025-01-16T10:29:11.940056Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-16T10:29:11.940056Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"fny-85t-qat\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Python-Create_a_new_dashboard_with_split_graph_widget-1734399089\",\"teams\":[],\"created_at\":\"2024-12-17T01:31:30.428183Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-17T01:31:30.428183Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"fx7-fqc-mvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T16:16:55.510850Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T16:16:55.510850Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"g5y-dp6-qvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-27T00:04:42.266863Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-27T00:04:42.266863Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"g9c-xme-5c8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Powerpack Dashboard\",\"teams\":[],\"created_at\":\"2023-09-13T20:02:37.796210Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-08T17:33:09.413127Z\",\"widget_count\":5,\"widget_count_by_type\":{\"resolved_powerpack\":2,\"note\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"g9d-nja-s56\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-07T15:11:01.265429Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-07T15:27:24.603106Z\",\"widget_count\":124,\"widget_count_by_type\":{\"group\":7,\"note\":27,\"check_status\":6,\"query_value\":37,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"h35-e77-y7b\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-08-29T19:53:19.113620Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-29T19:54:10.579886Z\",\"widget_count\":130,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":7,\"query_value\":41,\"query_table\":20,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"h39-2vx-x5t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}} fooo\",\"teams\":[],\"created_at\":\"2024-09-23T17:13:29.658664Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-23T17:13:29.658664Z\",\"widget_count\":1,\"widget_count_by_type\":{\"query_table\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"h7j-v4q-aeu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-23T13:34:48.246025Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T13:34:49.033289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"h8e-vwj-uy8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-07-29T16:48:46.701592Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-29T16:48:49.599967Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hiu-7x9-6yd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_dashboard_with_tags_returns_OK_response_1737087532 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2025-01-17T04:18:53.051598Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-17T04:18:53.051598Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hn6-a2w-7fv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Restore_deleted_dashboards_returns_No_Content_response_1686850305 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2023-06-15T17:31:45.390220Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-15T17:31:45.390220Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hsz-pvn-gie\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2021-01-21T11:01:38.594211Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-21T11:01:39.149109Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hur-yk4-4ey\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-08T20:49:20.928521Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T21:46:33.784247Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"hyq-he9-mmv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-11-16T14:53:07.236859Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-16T14:53:08.023820Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"i39-nvs-35n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-02T05:06:26.825469Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-02T05:06:26.825469Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"i6q-quy-cn2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:23:19.837734Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:34:00.011483Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ia3-mtz-d4e\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Timeboard\",\"teams\":[],\"created_at\":\"2020-12-09T04:18:00.388550Z\",\"author\":null,\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-12-09T04:18:00.388550Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"iic-aki-a5y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-05-22T00:22:49.406365Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-05-22T00:22:49.406365Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"iqb-wzk-7ab\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_new_dashboard_with_powerpack_widget-1745381568 with powerpack widget\",\"teams\":[],\"created_at\":\"2025-04-23T04:12:49.950553Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-04-23T04:12:49.950553Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"it8-zmc-esc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-01T16:10:54.233168Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T16:10:55.754868Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ivx-9cb-hq6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-01T15:32:14.718423Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T15:32:15.878992Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"j6w-fex-8fn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2021-04-15T16:42:07.677880Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-15T16:42:08.423227Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"j82-fmx-4nd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-23T10:21:50.450445Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-23T10:21:50.450445Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"jad-5wi-r7k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-06T20:25:05.406527Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T20:25:05.406527Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"jcd-pci-xxw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog's 111222333, Sep 18, 1:11:53 pm (cloned)\",\"teams\":[],\"created_at\":\"2023-10-13T15:06:17.052642Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-13T15:10:51.018368Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"je2-bwi-ces\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: systemid LB on c2c\",\"teams\":[],\"created_at\":\"2021-04-26T09:58:20.982778Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-26T09:58:20.982778Z\",\"widget_count\":12,\"widget_count_by_type\":{\"slo\":2,\"timeseries\":8,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"jjp-ch8-h4j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-05-20T15:14:34.623626Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-20T15:14:34.623626Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"list_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"jzw-2ff-srb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-04-14T13:40:43.341283Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-14T13:40:43.341283Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"k64-a3e-t6p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-15T13:39:50.094390Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:39:51.376388Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"k7b-e3u-xry\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ESXi Overview\",\"teams\":[],\"created_at\":\"2024-05-02T18:54:09.468977Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-02T18:54:09.468977Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"kf4-nik-f6k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-30T18:19:33.856132Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-30T18:19:33.856132Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"kr8-sth-skv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-07-13T16:47:06.137747Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-13T16:47:09.905432Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"kuj-pxv-rqh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"MM RBAC Dashboard [0.11]\",\"teams\":[],\"created_at\":\"2021-04-23T16:04:56.337388Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-23T16:04:56.337388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"m3a-qxx-d6r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Timeboard Dashboard 1769733\",\"teams\":[],\"created_at\":\"2024-10-04T18:54:20.931820Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:54:20.931820Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"mjt-uva-tcy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-24T08:09:00.562026Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-24T08:09:01.756390Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"mmd-vfp-cq4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Python-Create_a_new_dashboard_with_slo_widget-1738632660\",\"teams\":[],\"created_at\":\"2025-02-04T01:31:02.435234Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-04T01:31:02.435234Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"mv6-3rt-tc2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-26T09:52:26.162275Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-26T09:52:26.162275Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"mwr-ife-dth\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{ unique }} with list_stream widget\",\"teams\":[],\"created_at\":\"2023-03-02T20:48:56.368879Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-02T20:48:56.368879Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"n4f-d26-7fs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:28:08.943107Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:28:08.943107Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"n5x-wj3-tt8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-11-16T14:55:32.325509Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-16T14:55:33.604225Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"n86-f3u-tw7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:21:09.903112Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:21:55.038682Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"nb6-uk2-r2p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard created using cloudformation template\",\"teams\":[],\"created_at\":\"2024-09-27T18:21:01.500799Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-27T18:21:01.500799Z\",\"widget_count\":60,\"widget_count_by_type\":{\"group\":6,\"timeseries\":17,\"toplist\":17,\"sunburst\":1,\"hostmap\":1,\"query_value\":18},\"dashboard_quality_score\":0.0}},{\"id\":\"ncv-h4k-4it\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ESXi Overview\",\"teams\":[],\"created_at\":\"2024-05-02T19:01:10.511984Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-24T15:00:11.787094Z\",\"widget_count\":30,\"widget_count_by_type\":{\"group\":6,\"note\":3,\"query_value\":2,\"query_table\":5,\"toplist\":4,\"timeseries\":10},\"dashboard_quality_score\":0.0}},{\"id\":\"neh-3bi-sgi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-01T00:04:03.352407Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-01T00:04:03.352407Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ni6-8fj-4qa\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:31:58.083575Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T01:31:58.083575Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"ntb-zhs-zc6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: systemid LB on starbug\",\"teams\":[],\"created_at\":\"2021-04-26T09:59:02.371956Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-26T09:59:02.371956Z\",\"widget_count\":12,\"widget_count_by_type\":{\"slo\":2,\"timeseries\":8,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"ntg-i6e-bg3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-02-29T22:03:38.377385Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-02-29T22:03:38.377385Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p3k-7zr-wpr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenTelemetry Collector Metrics Dashboard (with equiv_otel)\",\"teams\":[],\"created_at\":\"2025-04-10T13:39:12.520913Z\",\"author\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views\":2,\"viewed_at\":\"2025-04-10T13:39:22.716000Z\",\"viewer\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":2,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-04-10T13:39:21.857795Z\",\"widget_count\":75,\"widget_count_by_type\":{\"group\":8,\"note\":10,\"timeseries\":50,\"query_table\":6,\"query_value\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p3v-g5w-f7h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-06T20:25:05.998637Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T20:25:05.998637Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p64-8q6-as6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:44:16.923835Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T02:23:31.421819Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"p6f-bt4-6mx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-30T18:19:34.472771Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-30T18:19:34.472771Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p8w-deq-k6x\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"CRP-176\",\"teams\":[],\"created_at\":\"2022-08-24T14:10:40.232901Z\",\"author\":{\"id\":\"4326960\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-4240449\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-08-24T14:10:47.209726Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pj7-aps-g42\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:54:21.314190Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:54:21.314190Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"pra-83a-gm3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Fly.io Overview \",\"teams\":[],\"created_at\":\"2024-07-17T18:16:25.227238Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-30T22:03:35.055528Z\",\"widget_count\":33,\"widget_count_by_type\":{\"group\":6,\"note\":3,\"query_value\":2,\"check_status\":1,\"toplist\":2,\"query_table\":5,\"hostmap\":1,\"treemap\":1,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"pt8-4pn-jw6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-01T15:29:54.911262Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T15:29:55.700607Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pu8-4pr-9v2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2021-01-21T14:01:08.820798Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-21T14:01:09.882536Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pv5-p65-yis\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-11T18:22:19.897944Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-11T18:22:19.897944Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pzz-ksp-bip\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Scaphandre Overview\",\"teams\":[],\"created_at\":\"2024-05-16T19:33:20.983978Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-16T19:33:20.983978Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"q5j-nti-fv6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"For dashboard list tests - DO NOT DELETE\",\"teams\":[],\"created_at\":\"2020-02-11T13:48:52.362473Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-02-11T13:49:16.919666Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"q5p-k9m-btm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-07-22T18:22:19.757565Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-22T18:22:19.757565Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"q5z-8cr-k7v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Run workflow terraform dashboard\",\"teams\":[],\"created_at\":\"2023-02-15T20:13:30.498477Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-15T20:13:30.498477Z\",\"widget_count\":1,\"widget_count_by_type\":{\"run_workflow\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"q9c-n75-4rq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-13T22:22:19.842417Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-13T22:22:19.842417Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qc7-v9m-xqv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2023-12-08T19:58:04.706734Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T23:55:47.131235Z\",\"widget_count\":2,\"widget_count_by_type\":{\"resolved_powerpack\":1,\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qcr-t4m-v3k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Kepler Overview \",\"teams\":[],\"created_at\":\"2024-05-23T18:18:30.546120Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-23T19:17:16.197535Z\",\"widget_count\":8,\"widget_count_by_type\":{\"group\":2,\"note\":2,\"query_table\":1,\"query_value\":2,\"sunburst\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qd5-u4z-i8z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-27T04:11:24.143503Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-27T04:11:24.143503Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qhf-em6-2i3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-23T13:37:35.644378Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T13:37:36.923776Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"qi6-q9m-tpv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:31:11.506879Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:31:11.506879Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"qmz-925-umx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-10T14:22:53.864848Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-10T14:22:54.795680Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"qn2-but-2r8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2021-03-01T08:29:54.466356Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-03-01T08:29:54.466356Z\",\"widget_count\":2,\"widget_count_by_type\":{\"event_stream\":1,\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qpy-d9b-2bv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T10:48:02.242118Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T10:48:02.242118Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qup-ydj-93n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_new_dashboard_with_manage_status_widget_and_show_priority_parameter-1738728686\",\"teams\":[],\"created_at\":\"2025-02-05T04:11:26.503360Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-05T04:11:26.503360Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"qxx-jfk-v42\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-24T15:14:41.219203Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-24T15:14:41.219203Z\",\"widget_count\":1,\"widget_count_by_type\":{\"distribution\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rcn-b3p-kkk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-03-04T17:35:14.272142Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-03-04T17:35:16.152659Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"rj7-qir-ztd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-11-24T04:11:51.944178Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-24T04:11:51.944178Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rm8-k6t-8m4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:49:59.470703Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:49:59.470703Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"rmu-unn-gcq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-07-13T16:50:32.341526Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-13T16:50:35.610164Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"rn6-u8f-7yk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_sunburst_widget_and_metrics_data_1734531717\",\"teams\":[],\"created_at\":\"2024-12-18T14:21:57.983817Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-18T14:21:57.983817Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"rrq-mav-byg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:16:29.780792Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:18:38.540849Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rsw-epy-tv6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bruce test\",\"teams\":[],\"created_at\":\"2024-10-10T20:26:42.166692Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-11T20:04:05.520446Z\",\"widget_count\":1,\"widget_count_by_type\":{\"distribution\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rt5-yit-kkz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Octopus Deploy Overview\",\"teams\":[],\"created_at\":\"2024-12-02T17:57:23.397063Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-01-03T18:22:09.527000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-12-11T14:54:48.862172Z\",\"widget_count\":7,\"widget_count_by_type\":{\"query_value\":1,\"timeseries\":4,\"query_table\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"rvp-h5j-zhk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:25:11.372571Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:26:34.329161Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"rvw-uxs-a32\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-03T19:56:05.033591Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:38:18.943692Z\",\"widget_count\":3,\"widget_count_by_type\":{\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"stu-5eb-fje\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-02-24T20:37:44.551755Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-24T20:37:45.473803Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"su8-kbt-qqk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Dashboard Mon, Oct 23, 12:43:30 pm\",\"teams\":[],\"created_at\":\"2023-10-23T16:43:31.132952Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-23T16:43:31.132952Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"suf-n3q-967\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-05-03T02:13:09.132180Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-03T02:13:09.132180Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"sv6-maw-zx9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-11-28T01:44:57.326488Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-28T01:44:57.326488Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"t5a-y6c-yr8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-27T04:11:24.943377Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-27T04:11:24.943377Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"t66-nfh-e25\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2022-09-12T19:54:19.969611Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-09-12T19:57:12.275290Z\",\"widget_count\":1,\"widget_count_by_type\":{\"topology_map\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"t7i-u49-9p6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Noueman's Dashboard Thu, Nov 9, 5:03:34 pm\",\"teams\":[],\"created_at\":\"2023-11-09T16:03:34.595627Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-09T16:03:34.595627Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"taf-afu-akt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-23T07:59:08.905416Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T07:59:09.903936Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tgf-iq6-ujs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-30T18:22:19.797309Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-30T18:22:19.797309Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tkn-wg4-sr3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_returns_OK_response_1718648515 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-06-17T18:21:55.846134Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-17T18:21:55.846134Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"tpx-f7m-z57\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{ unique }}\",\"teams\":[],\"created_at\":\"2023-09-12T19:44:24.710209Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-12T19:44:24.710209Z\",\"widget_count\":1,\"widget_count_by_type\":{\"heatmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tx6-46v-wzw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-19T03:11:04.352440Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-19T03:11:04.352440Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"u4x-txd-uf6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:26:48.362206Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:26:48.362206Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"uc8-ykp-3c7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Fly.io Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-08-13T17:58:15.161434Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-14T21:07:55.940923Z\",\"widget_count\":36,\"widget_count_by_type\":{\"group\":6,\"note\":3,\"query_value\":2,\"check_status\":1,\"toplist\":2,\"query_table\":4,\"hostmap\":1,\"treemap\":1,\"timeseries\":16},\"dashboard_quality_score\":0.0}},{\"id\":\"ug4-a8z-jva\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-07T16:37:55.238444Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-07T16:37:55.238444Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ug6-j5q-8mm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T16:13:44.101907Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T16:13:45.105031Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"unw-hwk-68w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:31:03.437671Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:31:03.437671Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uq2-urd-dzu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Scaphandre Overview \",\"teams\":[],\"created_at\":\"2024-05-16T19:33:47.986664Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-23T19:50:58.459791Z\",\"widget_count\":24,\"widget_count_by_type\":{\"group\":5,\"note\":4,\"query_value\":5,\"timeseries\":8,\"toplist\":1,\"query_table\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uqe-kqz-p6j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-11-17T18:42:10.349402Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-17T18:42:11.457516Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"uu8-cxu-zea\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Beacon Service\",\"teams\":[],\"created_at\":\"2023-10-10T18:45:29.276049Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-10T18:45:29.276049Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uw4-48e-88t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:59:31.861704Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:59:31.861704Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ux5-fxw-5cf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Screenboard Thu, Jan 26, 9:35:17 am\",\"teams\":[],\"created_at\":\"2023-01-26T08:35:17.499834Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-26T08:35:36.597872Z\",\"widget_count\":1,\"widget_count_by_type\":{\"run_workflow\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uy6-4fe-nqd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:07:21.855524Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:08:42.636698Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"v37-yyy-9ym\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-03-30T02:06:59.053289Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-03-30T02:06:59.053289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"v3w-u4i-tww\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T14:14:41.723635Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T14:14:41.723635Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"v74-xyc-vd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T21:28:00.315443Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T21:28:01.033524Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vdt-sff-xrf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"kevinzou_sandbox\",\"teams\":[],\"created_at\":\"2023-10-10T18:20:08.538567Z\",\"author\":{\"id\":\"4348810\",\"name\":\"Kevin Zou\",\"handle\":\"kevin.zou@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-01T15:26:52.470946Z\",\"widget_count\":4,\"widget_count_by_type\":{\"timeseries\":1,\"resolved_powerpack\":1,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"vfn-gvr-cxk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-25T18:21:50.656210Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-25T18:21:50.656210Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vg2-fg8-7vh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog-api-spec Automerging\",\"teams\":[],\"created_at\":\"2024-09-23T16:27:24.646048Z\",\"author\":{\"id\":\"7359812\",\"name\":\"Jack Edmonds\",\"handle\":\"jack.edmonds@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-01-14T22:53:10.616000Z\",\"viewer\":{\"id\":\"21011231\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-jahanzeb.hassan@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-09-24T21:27:33.180160Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vgn-f2f-zr3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (cloned)\",\"teams\":[],\"created_at\":\"2023-11-21T20:19:09.753235Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-21T20:19:09.753235Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"vs6-9qu-vur\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-15T13:37:22.574326Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:37:23.238265Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vvn-nwe-23z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2024-03-01T00:18:38.736689Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-03-01T00:18:38.736689Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"wce-cqf-nhh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-05-22T00:22:51.925033Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-05-22T00:22:51.925033Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"wcp-6ik-3wf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-29T01:44:20.834836Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-29T01:44:20.834836Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"wrg-gv3-3hf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Delete_custom_timeboard_dashboard_from_an_existing_dashboard_list_returns_OK_response_1720880516 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-07-13T14:21:57.467620Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-13T14:21:57.467620Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"wsr-yee-qm5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:59:31.598171Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:59:31.598171Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"x45-5fs-594\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-15T13:43:02.051856Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:43:02.798289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"x77-xd6-a6v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-10-23T19:59:39.468599Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-05T20:38:35.743635Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"xc8-h6m-gyt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-04-13T11:50:10.192480Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-13T11:50:38.881933Z\",\"widget_count\":3,\"widget_count_by_type\":{\"slo\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"xdp-wbm-5rj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T21:50:56.241695Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:50:56.241695Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"xfe-kap-e5y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-21T13:59:15.683388Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-21T13:59:15.683388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xgg-369-k9w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-05-13T01:28:36.563248Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-13T01:28:36.563248Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xkq-2cm-fed\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:57:16.687093Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:57:16.687093Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xue-5t2-hzf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T10:40:07.910997Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T10:40:07.910997Z\",\"widget_count\":1,\"widget_count_by_type\":{\"log_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xz6-mat-r9c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_check_status_widget_1736101311\",\"teams\":[],\"created_at\":\"2025-01-05T18:21:52.120117Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-05T18:21:52.120117Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"y3t-eqa-763\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-14T06:21:50.287887Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-14T06:21:50.287887Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"y6m-dsb-3uq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-11-17T18:39:28.101260Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-17T18:39:28.748416Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ya2-tzk-zyw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-07-07T19:53:37.805020Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T19:53:38.731282Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ydt-8ah-kfv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Noueman's Dashboard Thu, May 9, 11:49:33 pm\",\"teams\":[],\"created_at\":\"2024-05-09T21:49:33.558354Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-09T21:49:33.558354Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"yes-s6q-j58\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-02-02T15:50:14.521415Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-02-02T15:50:16.741690Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"yj9-r52-is2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-24T08:06:24.291924Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-24T08:06:25.020191Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ynt-7re-g5t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard with Powerpack\",\"teams\":[],\"created_at\":\"2023-09-13T20:04:26.921191Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-13T20:04:26.921191Z\",\"widget_count\":3,\"widget_count_by_type\":{\"resolved_powerpack\":1,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"yq7-7uz-gr9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-10-04T18:40:12.197797Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:40:12.197797Z\",\"widget_count\":19,\"widget_count_by_type\":{\"alert_graph\":2,\"alert_value\":2,\"change\":1,\"distribution\":1,\"check_status\":1,\"heatmap\":1,\"hostmap\":1,\"note\":2,\"query_value\":1,\"query_table\":1,\"scatterplot\":1,\"servicemap\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ytd-nd3-bxu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-19T01:32:56.908916Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-19T01:32:56.908916Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ywh-67w-ngi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:01:42.426084Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:02:16.920717Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"zfd-a24-thy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"PCF Cloud Controller\",\"teams\":[],\"created_at\":\"2022-04-15T08:57:00.852815Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-21T09:55:03.424538Z\",\"widget_count\":8,\"widget_count_by_type\":{\"group\":2,\"timeseries\":6},\"dashboard_quality_score\":0.0}},{\"id\":\"zsp-mfz-rnt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"updated api timeboard\",\"teams\":[],\"created_at\":\"2023-01-23T07:59:06.665310Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T07:59:07.322412Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"zst-bcm-gq6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-12-08T08:08:54.613783Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-01-14T22:53:12.978000Z\",\"viewer\":{\"id\":\"21011231\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-jahanzeb.hassan@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-14T22:53:33.484565Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"zy8-8tg-sxr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1734697397\",\"teams\":[],\"created_at\":\"2024-12-20T12:23:21.850235Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-20T12:23:21.850235Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":0,\"first_offset\":0,\"limit\":250,\"prev_offset\":null,\"next_offset\":null,\"last_offset\":0,\"total\":250}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bedited_before%5D=2025-04-26T00%3A00%3A00Z&filter%5Bviewed_before%5D=2025-04-26T00%3A00%3A00Z\",\"first\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bedited_before%5D=2025-04-26T00%3A00%3A00Z&filter%5Bviewed_before%5D=2025-04-26T00%3A00%3A00Z&page[offset]=0&page[limit]=250\",\"last\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bedited_before%5D=2025-04-26T00%3A00%3A00Z&filter%5Bviewed_before%5D=2025-04-26T00%3A00%3A00Z&page[offset]=0&page[limit]=250\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get usage stats for all dashboards with both filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-06-01T18:14:52.307Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboards/usage", + "query": [ + [ + "filter[edited_before]", + "2025-04-26T00:00:00Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"284-wiv-iqk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-21T21:02:03.739689Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-21T21:02:03.739689Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"29x-55z-rt2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T22:20:08.019993Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:20:09.093470Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2be-q62-ep5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-23T00:04:08.199090Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-23T00:04:08.199090Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2gn-qtd-zd9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:54:10.920756Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:54:57.107615Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"2m8-ht3-7kf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.660825Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.660825Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2n8-amr-8ws\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_hostmap_widget_1738642608\",\"teams\":[],\"created_at\":\"2025-02-04T04:16:49.306022Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-04T04:16:49.306022Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2qn-4hs-6nz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-06T18:28:02.296323Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T18:28:02.296323Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2rd-dc2-4qz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"delete-me\",\"teams\":[],\"created_at\":\"2023-04-04T07:20:20.175651Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-04-04T07:25:00.141124Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2t6-ira-9sr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-26T16:19:46.726552Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-26T16:19:46.726552Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3bd-yi5-t9f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-01-24T20:36:07.585183Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-24T20:36:07.585183Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":9,\"image\":1,\"hostmap\":1,\"heatmap\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3gp-ihg-25a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:49.231714Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:49.231714Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3hx-aas-pkd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:07:47.665899Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T01:11:49.409229Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3ia-t26-3ny\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Powerpack Test\",\"teams\":[],\"created_at\":\"2023-09-12T17:24:07.448153Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":2,\"viewed_at\":\"2026-05-22T08:18:36.471000Z\",\"viewer\":{\"id\":\"68143611\",\"name\":\"Enrico Donnici\",\"handle\":\"enrico.donnici@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":2,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2023-09-12T17:24:07.448153Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.24117932132193265}},{\"id\":\"3jh-dek-qps\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-08T21:59:54.884830Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T22:00:29.988353Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"3jt-5cb-icy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-02-24T20:40:32.063650Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-24T20:40:33.482665Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"3kr-vna-uug\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:56:42.073944Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:56:42.073944Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3y3-3x5-kq8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-11-09T16:03:35.113528Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-09T16:03:47.912796Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"43b-kw6-vqr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2023-09-20T09:37:10.513590Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-06T14:44:10.522900Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":10,\"image\":1,\"hostmap\":1,\"heatmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4j8-nbn-4gi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-09-28T01:37:23.346984Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-28T01:37:23.346984Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4n7-s4g-dqv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"For dashboard list tests - DO NOT DELETE\",\"teams\":[],\"created_at\":\"2020-02-11T13:49:29.555334Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-04-08T17:54:25.574039Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"4ud-du4-pi3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-17T08:32:02.449350Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-17T08:32:02.449350Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"4wp-g9w-rqp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T16:34:52.946050Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T16:34:52.946050Z\",\"widget_count\":1,\"widget_count_by_type\":{\"change\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4wy-ajm-bvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:35:18.554744Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:35:18.554744Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"4z7-iip-zrt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T17:09:12.214893Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:09:12.874904Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"59f-bun-r3c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T15:17:19.954644Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T15:17:33.545302Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"list_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5cj-8j7-qpy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Octopus Deploy Overview\",\"teams\":[],\"created_at\":\"2024-12-11T20:48:25.007210Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":27,\"viewed_at\":\"2025-01-16T20:42:51.598000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":27,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-16T20:12:02.010750Z\",\"widget_count\":31,\"widget_count_by_type\":{\"group\":6,\"note\":5,\"query_value\":8,\"list_stream\":2,\"toplist\":2,\"timeseries\":1,\"query_table\":7},\"dashboard_quality_score\":0.0}},{\"id\":\"5i4-3c5-qby\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 1:37:28 pm\",\"teams\":[],\"created_at\":\"2023-12-20T18:37:28.853122Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T18:37:28.853122Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"5mr-xms-2qa\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T22:16:56.913567Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:16:57.568474Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5qz-2i3-6cq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T14:14:41.648472Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T14:14:41.648472Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5tp-tr6-93q\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-21T13:59:15.028164Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-21T13:59:15.028164Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"63v-49e-a7d\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"sarah test\",\"teams\":[],\"created_at\":\"2023-05-15T18:12:47.853642Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-05-15T18:25:28.895732Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"679-8up-bf2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-04-14T13:40:43.116109Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-14T13:40:43.116109Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"67i-fs9-rzn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Teleport Overview\",\"teams\":[],\"created_at\":\"2024-04-03T15:04:15.262442Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-11-01T18:56:10.280000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-06-04T14:49:15.193580Z\",\"widget_count\":44,\"widget_count_by_type\":{\"group\":8,\"note\":3,\"query_value\":8,\"timeseries\":25},\"dashboard_quality_score\":0.0}},{\"id\":\"6by-h9d-gui\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"MM RBAC Dashboard\",\"teams\":[],\"created_at\":\"2021-04-23T16:14:13.820995Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-23T16:14:13.820995Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6ez-pq7-4zk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_shared_dashboard_returns_OK_response-1689999025 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2023-07-22T04:10:25.713775Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-22T04:10:25.713775Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6md-r2g-kxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-17T03:08:25.445281Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-17T03:08:25.445281Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6pm-2ad-2v8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-15T13:45:39.004786Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:45:40.299693Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6qu-cxf-9jy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.237970Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.237970Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"74v-m9u-yzs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Event Timeline Widget Dashboard\",\"teams\":[],\"created_at\":\"2020-12-10T04:21:12.270024Z\",\"author\":null,\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-12-10T04:21:12.270024Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_timeline\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"76m-n9x-wd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"DL FF TF\",\"teams\":[],\"created_at\":\"2021-02-02T13:54:05.514952Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-02-02T13:54:05.514952Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"795-wur-2am\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:13.784143Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:13.784143Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"7b3-yvp-mmq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T16:16:55.297530Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T16:16:55.297530Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7dp-46c-6tr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-07T16:37:56.369573Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-07T16:37:56.369573Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7q2-h97-j2m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_items_of_a_Dashboard_List_returns_OK_response_1731709308 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-11-15T22:21:49.262821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-15T22:21:49.262821Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"7ym-viw-7if\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard created using cloudformation template\",\"teams\":[],\"created_at\":\"2024-09-27T18:25:34.741716Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-27T18:25:34.741716Z\",\"widget_count\":60,\"widget_count_by_type\":{\"group\":6,\"timeseries\":17,\"toplist\":17,\"sunburst\":1,\"hostmap\":1,\"query_value\":18},\"dashboard_quality_score\":0.0}},{\"id\":\"823-wmx-kyk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T21:30:35.101006Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T21:30:36.200544Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"86h-24u-mwc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vSphere VM Property Metrics\",\"teams\":[],\"created_at\":\"2023-07-18T18:13:38.804575Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T19:57:25.366422Z\",\"widget_count\":14,\"widget_count_by_type\":{\"query_table\":10,\"treemap\":1,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"884-jxj-d7f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Infrastructure Overview\",\"teams\":[],\"created_at\":\"2024-01-04T11:25:42.564360Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-05T18:05:45.334010Z\",\"widget_count\":64,\"widget_count_by_type\":{\"note\":8,\"timeseries\":17,\"hostmap\":2,\"query_value\":32,\"toplist\":3,\"query_table\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"88m-nrr-j4c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_shared_dashboard_returns_OK_response_1720742852 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-07-12T00:07:33.291059Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-12T00:07:33.291059Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"89p-5x9-mfp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T04:09:45.848591Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T04:09:45.848591Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8mr-z8r-xaq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:22.284588Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:22.284588Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"8qn-sx4-6py\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:57:16.337700Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:57:16.337700Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8r3-fr7-g8h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-03T11:06:05.600888Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-03T18:00:35.762592Z\",\"widget_count\":3,\"widget_count_by_type\":{\"hostmap\":1,\"timeseries\":1,\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8rp-qrc-d72\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Java-Create_a_new_dashboard_with_geomap_widget-1737861024\",\"teams\":[],\"created_at\":\"2025-01-26T03:10:24.707218Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-26T03:10:24.707218Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8v6-29d-g7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Timeboard Dashboard 1769733\",\"teams\":[],\"created_at\":\"2024-10-04T18:49:59.050042Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:49:59.050042Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8vg-n3m-t2r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog's Dashboard Mon, Sep 18, 1:11:53 pm (cloned)\",\"teams\":[],\"created_at\":\"2023-10-13T14:28:19.062400Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-13T14:28:19.062400Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8w6-777-dbc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:52.825402Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:52.825402Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8yn-6s7-pue\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T01:34:46.545176Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T01:34:46.545176Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9dy-6d6-92u\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"KubeVirt Overview (DEV)\",\"teams\":[],\"created_at\":\"2025-01-07T07:17:49.547882Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":10,\"viewed_at\":\"2025-01-07T15:05:57.088000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":10,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-07T07:18:50.881143Z\",\"widget_count\":48,\"widget_count_by_type\":{\"group\":6,\"note\":1,\"query_value\":4,\"timeseries\":31,\"query_table\":2,\"toplist\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"9fh-bsk-dez\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T06:21:51.929267Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T06:21:51.929267Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gp-yca-ewc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-07-03T05:06:40.070179Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-03T05:06:40.070179Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gw-nvp-fv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:16:01.442667Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:16:01.442667Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9j7-b7g-fmp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-07-07T17:12:20.570681Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:12:21.707927Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9km-gj8-2rj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:20:54.758861Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:21:08.649752Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9qq-fww-7dt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_event_stream_list_stream_widget_1736259735 with list_stream widget\",\"teams\":[],\"created_at\":\"2025-01-07T14:22:16.267384Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-07T14:22:16.267384Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9ra-4tp-6x8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:30:44.267214Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:30:44.267214Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9td-t9c-kk7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T14:04:12.968245Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T16:29:07.018541Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"event_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9tw-t3j-j2j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:33.097538Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:33.097538Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9wr-ifb-ks3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard for testing\",\"teams\":[],\"created_at\":\"2024-06-28T14:32:31.419746Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-28T14:32:31.419746Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":1,\"sunburst\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9ze-x5d-4uk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-02T10:21:50.272937Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-02T10:21:50.272937Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"asp-qkq-xha\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:47:56.046241Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:53:05.322597Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"b2p-ixy-wbd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T02:22:19.767227Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T02:22:19.767227Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"b2x-2d8-smj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vsphere test\",\"teams\":[],\"created_at\":\"2023-11-15T14:29:57.863141Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-17T15:09:09.324288Z\",\"widget_count\":10,\"widget_count_by_type\":{\"note\":2,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b6n-8j5-2iz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned) (cloned)\",\"teams\":[],\"created_at\":\"2023-09-26T09:00:00.247208Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-05T14:50:19.276985Z\",\"widget_count\":42,\"widget_count_by_type\":{\"image\":1,\"note\":5,\"hostmap\":1,\"timeseries\":9,\"query_value\":21,\"heatmap\":2,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"b6n-d8r-7em\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: splunk LB \",\"teams\":[],\"created_at\":\"2021-05-03T13:03:46.217614Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-03T13:03:46.217614Z\",\"widget_count\":12,\"widget_count_by_type\":{\"note\":3,\"slo\":1,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b9v-vd2-fq2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Etiennes Dashboard Tue, Mar 18, 3:56:32 pm\",\"teams\":[],\"created_at\":\"2025-03-18T14:56:32.569828Z\",\"author\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-03-18T14:56:32.743000Z\",\"viewer\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-03-18T14:57:27.767981Z\",\"widget_count\":1,\"widget_count_by_type\":{\"query_value\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bcy-i9m-yk2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-26T09:52:25.783725Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-26T09:52:25.783725Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bgf-jzg-b7a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (shanel clone)\",\"teams\":[],\"created_at\":\"2024-06-06T17:13:17.485112Z\",\"author\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T17:28:16.789541Z\",\"widget_count\":156,\"widget_count_by_type\":{\"group\":11,\"note\":28,\"check_status\":8,\"query_value\":59,\"query_table\":24,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"bgp-uee-rt3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:51.418778Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:51.418778Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bpc-yw5-2ai\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-11T05:06:09.509411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-11T05:06:09.509411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bpj-ytu-fpt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:46:41.035816Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:48:05.847943Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"bru-u6k-rjq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Wisdom\",\"teams\":[],\"created_at\":\"2021-12-15T14:39:24.510324Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-12-15T16:54:32.046189Z\",\"widget_count\":14,\"widget_count_by_type\":{\"note\":2,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"bu8-gue-27p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bosh AutoRelease Testing (cloned)\",\"teams\":[],\"created_at\":\"2023-09-01T08:05:20.514088Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-08-01T12:48:01.368000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2023-09-01T08:08:49.528818Z\",\"widget_count\":11,\"widget_count_by_type\":{\"note\":1,\"free_text\":5,\"query_table\":3,\"timeseries\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"c5z-eix-jck\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_a_toplist_widget_with_stacked_type_and_no_legend_specified_1742496578\",\"teams\":[],\"created_at\":\"2025-03-20T18:49:39.343102Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-20T18:49:39.343102Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"cf8-ifs-4vf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 10:34:03 am\",\"teams\":[],\"created_at\":\"2023-12-20T15:34:03.307486Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T15:34:03.307486Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"cmr-azj-aw6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.386452Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.386452Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"cw4-irn-n79\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T21:55:02.601652Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:55:02.601652Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"cx2-6g6-mni\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_timeseries_widget_with_legacy_live_span_time_format_1739376942 with legacy live span time\",\"teams\":[],\"created_at\":\"2025-02-12T16:15:43.276834Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-12T16:15:43.276834Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"cxr-rw5-dfb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Dashboard Wed, Oct 11, 2:07:21 pm\",\"teams\":[],\"created_at\":\"2023-10-11T18:07:21.856517Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T20:32:00.487697Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"dea-tup-asp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-01-24T17:57:50.017145Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-24T17:57:50.017145Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"deh-2pa-jv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Timeboard Wed, Mar 3, 10:57:28 am\",\"teams\":[],\"created_at\":\"2021-03-03T09:57:28.304302Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-03-03T09:59:37.861240Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"dkd-m4y-nfc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-07-29T16:45:28.934525Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-29T16:45:31.392137Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"dvv-i5b-zbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (cloned)\",\"teams\":[],\"created_at\":\"2024-01-08T19:23:43.013799Z\",\"author\":{\"id\":\"6515857\",\"name\":\"Candace Shamieh\",\"handle\":\"candace.shamieh@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-08T19:42:17.791727Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"timeseries\":26,\"query_table\":21},\"dashboard_quality_score\":0.0}},{\"id\":\"dw4-m52-byx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_logs_stream_list_stream_widget_and_storage_parameter_1733350921 with list_stream widget\",\"teams\":[],\"created_at\":\"2024-12-04T22:22:01.830291Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-04T22:22:01.830291Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"dzm-bwc-ean\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ListStream\",\"teams\":[],\"created_at\":\"2025-02-25T10:01:52.815694Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-25T10:01:52.815694Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e63-myc-uhh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Orchestrator Writer [EP]\",\"teams\":[],\"created_at\":\"2022-03-29T12:23:13.061726Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-03-29T12:23:13.061726Z\",\"widget_count\":57,\"widget_count_by_type\":{\"group\":7,\"timeseries\":47,\"sunburst\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"e7w-ted-kp5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T19:50:57.927100Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T19:50:58.454696Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e84-h6q-8ru\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-02-03T14:05:45.526436Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-02-03T14:05:47.627593Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e88-itr-s9c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardFreeText_import-local-1738715031\",\"teams\":[],\"created_at\":\"2025-02-05T00:23:56.182926Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-05T00:23:56.182926Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"e8c-sk3-j9y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-14T02:11:46.227958Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-14T02:11:46.227958Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eg4-nui-f7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T16:11:30.640663Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T16:11:31.171270Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"egd-5vg-rac\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-10T14:20:28.977761Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-10T14:20:29.512718Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ehj-axw-7z7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T14:51:18.428821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:21:55.042874Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eq3-r74-a85\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.014458Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.014458Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eup-drq-jnt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-01T16:07:22.663414Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T16:07:23.517492Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ez7-i7k-kvy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardLogStream-local-1737547858\",\"teams\":[],\"created_at\":\"2025-01-22T12:11:02.505903Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-22T12:11:02.505903Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f47-qxr-zry\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Merging Tracking\",\"teams\":[],\"created_at\":\"2024-08-29T15:44:56.266108Z\",\"author\":{\"id\":\"7557262\",\"name\":\"Anika Maskara\",\"handle\":\"anika.maskara@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-29T15:44:56.266108Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f4a-76m-nbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:27:11.505665Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:49:08.310691Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"f4q-d9c-2nj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-11T14:44:24.984417Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-11T14:44:24.984417Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f59-6bj-c7p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"[corpit] Iroh License Check Dashboard\",\"teams\":[],\"created_at\":\"2023-01-30T11:34:18.574271Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-30T11:34:30.591612Z\",\"widget_count\":57,\"widget_count_by_type\":{\"query_value\":28,\"timeseries\":11,\"image\":12,\"list_stream\":1,\"toplist\":2,\"note\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f5q-i7e-ewj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"jeffallen - pcf billing test\",\"teams\":[],\"created_at\":\"2022-05-20T20:30:30.729505Z\",\"author\":{\"id\":\"4053606\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-3920545\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-06-09T21:01:57.752118Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"fim-fgh-t55\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_run_workflow_widget_1737023351\",\"teams\":[],\"created_at\":\"2025-01-16T10:29:11.940056Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-16T10:29:11.940056Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"fny-85t-qat\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Python-Create_a_new_dashboard_with_split_graph_widget-1734399089\",\"teams\":[],\"created_at\":\"2024-12-17T01:31:30.428183Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-17T01:31:30.428183Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"fx7-fqc-mvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T16:16:55.510850Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T16:16:55.510850Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"g5y-dp6-qvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-27T00:04:42.266863Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-27T00:04:42.266863Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"g9c-xme-5c8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Powerpack Dashboard\",\"teams\":[],\"created_at\":\"2023-09-13T20:02:37.796210Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-08T17:33:09.413127Z\",\"widget_count\":5,\"widget_count_by_type\":{\"resolved_powerpack\":2,\"note\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"g9d-nja-s56\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-07T15:11:01.265429Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-07T15:27:24.603106Z\",\"widget_count\":124,\"widget_count_by_type\":{\"group\":7,\"note\":27,\"check_status\":6,\"query_value\":37,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"h35-e77-y7b\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-08-29T19:53:19.113620Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-29T19:54:10.579886Z\",\"widget_count\":130,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":7,\"query_value\":41,\"query_table\":20,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"h39-2vx-x5t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}} fooo\",\"teams\":[],\"created_at\":\"2024-09-23T17:13:29.658664Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-23T17:13:29.658664Z\",\"widget_count\":1,\"widget_count_by_type\":{\"query_table\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"h4n-bfi-dg5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"KubeVirt Overview\",\"teams\":[],\"created_at\":\"2024-07-25T09:17:13.681827Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":11,\"viewed_at\":\"2026-03-17T11:13:57.801000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":11,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-08-27T10:34:25.951925Z\",\"widget_count\":47,\"widget_count_by_type\":{\"group\":6,\"note\":1,\"query_value\":3,\"timeseries\":31,\"query_table\":2,\"toplist\":4},\"dashboard_quality_score\":0.5987270471340143}},{\"id\":\"h7j-v4q-aeu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-23T13:34:48.246025Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T13:34:49.033289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"h8e-vwj-uy8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-07-29T16:48:46.701592Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-29T16:48:49.599967Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hiu-7x9-6yd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_dashboard_with_tags_returns_OK_response_1737087532 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2025-01-17T04:18:53.051598Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-17T04:18:53.051598Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hn6-a2w-7fv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Restore_deleted_dashboards_returns_No_Content_response_1686850305 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2023-06-15T17:31:45.390220Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-15T17:31:45.390220Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hsz-pvn-gie\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2021-01-21T11:01:38.594211Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-21T11:01:39.149109Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"hur-yk4-4ey\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-08T20:49:20.928521Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T21:46:33.784247Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"hyq-he9-mmv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-11-16T14:53:07.236859Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-16T14:53:08.023820Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"i39-nvs-35n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-02T05:06:26.825469Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-02T05:06:26.825469Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"i6q-quy-cn2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:23:19.837734Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:34:00.011483Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ia3-mtz-d4e\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Timeboard\",\"teams\":[],\"created_at\":\"2020-12-09T04:18:00.388550Z\",\"author\":null,\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-12-09T04:18:00.388550Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"iic-aki-a5y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-05-22T00:22:49.406365Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-05-22T00:22:49.406365Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"iqb-wzk-7ab\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_new_dashboard_with_powerpack_widget-1745381568 with powerpack widget\",\"teams\":[],\"created_at\":\"2025-04-23T04:12:49.950553Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-04-23T04:12:49.950553Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"it8-zmc-esc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-01T16:10:54.233168Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T16:10:55.754868Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ivx-9cb-hq6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-01T15:32:14.718423Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T15:32:15.878992Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"j6w-fex-8fn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2021-04-15T16:42:07.677880Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-15T16:42:08.423227Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"j82-fmx-4nd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-23T10:21:50.450445Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-23T10:21:50.450445Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"jad-5wi-r7k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-06T20:25:05.406527Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T20:25:05.406527Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"jcd-pci-xxw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog's 111222333, Sep 18, 1:11:53 pm (cloned)\",\"teams\":[],\"created_at\":\"2023-10-13T15:06:17.052642Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-13T15:10:51.018368Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"je2-bwi-ces\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: systemid LB on c2c\",\"teams\":[],\"created_at\":\"2021-04-26T09:58:20.982778Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-26T09:58:20.982778Z\",\"widget_count\":12,\"widget_count_by_type\":{\"slo\":2,\"timeseries\":8,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"jjp-ch8-h4j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-05-20T15:14:34.623626Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-20T15:14:34.623626Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"list_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"jzw-2ff-srb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-04-14T13:40:43.341283Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-14T13:40:43.341283Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"k64-a3e-t6p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-15T13:39:50.094390Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:39:51.376388Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"k7b-e3u-xry\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ESXi Overview\",\"teams\":[],\"created_at\":\"2024-05-02T18:54:09.468977Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-02T18:54:09.468977Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"kf4-nik-f6k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-30T18:19:33.856132Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-30T18:19:33.856132Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"kqz-yw2-egk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"PCF Nozzle Testing (cloned)\",\"teams\":[],\"created_at\":\"2023-09-07T11:31:05.567145Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":4,\"viewed_at\":\"2025-09-25T08:30:09.388000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":4,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2023-11-13T15:10:51.833223Z\",\"widget_count\":13,\"widget_count_by_type\":{\"note\":1,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"kr8-sth-skv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-07-13T16:47:06.137747Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-13T16:47:09.905432Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"kuj-pxv-rqh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"MM RBAC Dashboard [0.11]\",\"teams\":[],\"created_at\":\"2021-04-23T16:04:56.337388Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-23T16:04:56.337388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"m3a-qxx-d6r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Timeboard Dashboard 1769733\",\"teams\":[],\"created_at\":\"2024-10-04T18:54:20.931820Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:54:20.931820Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"mjt-uva-tcy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-24T08:09:00.562026Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-24T08:09:01.756390Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"mmd-vfp-cq4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Python-Create_a_new_dashboard_with_slo_widget-1738632660\",\"teams\":[],\"created_at\":\"2025-02-04T01:31:02.435234Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-04T01:31:02.435234Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"mv6-3rt-tc2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-26T09:52:26.162275Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-26T09:52:26.162275Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"mwr-ife-dth\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{ unique }} with list_stream widget\",\"teams\":[],\"created_at\":\"2023-03-02T20:48:56.368879Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-02T20:48:56.368879Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"n4f-d26-7fs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:28:08.943107Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:28:08.943107Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"n5x-wj3-tt8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-11-16T14:55:32.325509Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-16T14:55:33.604225Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"n86-f3u-tw7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:21:09.903112Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:21:55.038682Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"nb6-uk2-r2p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard created using cloudformation template\",\"teams\":[],\"created_at\":\"2024-09-27T18:21:01.500799Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-27T18:21:01.500799Z\",\"widget_count\":60,\"widget_count_by_type\":{\"group\":6,\"timeseries\":17,\"toplist\":17,\"sunburst\":1,\"hostmap\":1,\"query_value\":18},\"dashboard_quality_score\":0.0}},{\"id\":\"ncv-h4k-4it\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ESXi Overview\",\"teams\":[],\"created_at\":\"2024-05-02T19:01:10.511984Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-24T15:00:11.787094Z\",\"widget_count\":30,\"widget_count_by_type\":{\"group\":6,\"note\":3,\"query_value\":2,\"query_table\":5,\"toplist\":4,\"timeseries\":10},\"dashboard_quality_score\":0.0}},{\"id\":\"neh-3bi-sgi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-01T00:04:03.352407Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-01T00:04:03.352407Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ni6-8fj-4qa\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:31:58.083575Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T01:31:58.083575Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"ntb-zhs-zc6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: systemid LB on starbug\",\"teams\":[],\"created_at\":\"2021-04-26T09:59:02.371956Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-26T09:59:02.371956Z\",\"widget_count\":12,\"widget_count_by_type\":{\"slo\":2,\"timeseries\":8,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"ntg-i6e-bg3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-02-29T22:03:38.377385Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-02-29T22:03:38.377385Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p3k-7zr-wpr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenTelemetry Collector Metrics Dashboard (with equiv_otel)\",\"teams\":[],\"created_at\":\"2025-04-10T13:39:12.520913Z\",\"author\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views\":2,\"viewed_at\":\"2025-04-10T13:39:22.716000Z\",\"viewer\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":2,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-04-10T13:39:21.857795Z\",\"widget_count\":75,\"widget_count_by_type\":{\"group\":8,\"note\":10,\"timeseries\":50,\"query_table\":6,\"query_value\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p3v-g5w-f7h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-06T20:25:05.998637Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T20:25:05.998637Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p64-8q6-as6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:44:16.923835Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T02:23:31.421819Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"p6f-bt4-6mx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-30T18:19:34.472771Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-30T18:19:34.472771Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"p8w-deq-k6x\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"CRP-176\",\"teams\":[],\"created_at\":\"2022-08-24T14:10:40.232901Z\",\"author\":{\"id\":\"4326960\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-4240449\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-08-24T14:10:47.209726Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pj7-aps-g42\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:54:21.314190Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:54:21.314190Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"pra-83a-gm3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Fly.io Overview \",\"teams\":[],\"created_at\":\"2024-07-17T18:16:25.227238Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-30T22:03:35.055528Z\",\"widget_count\":33,\"widget_count_by_type\":{\"group\":6,\"note\":3,\"query_value\":2,\"check_status\":1,\"toplist\":2,\"query_table\":5,\"hostmap\":1,\"treemap\":1,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"pt8-4pn-jw6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-01T15:29:54.911262Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T15:29:55.700607Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pu8-4pr-9v2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2021-01-21T14:01:08.820798Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-21T14:01:09.882536Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pv5-p65-yis\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-11T18:22:19.897944Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-11T18:22:19.897944Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"pzz-ksp-bip\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Scaphandre Overview\",\"teams\":[],\"created_at\":\"2024-05-16T19:33:20.983978Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-16T19:33:20.983978Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"q5j-nti-fv6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"For dashboard list tests - DO NOT DELETE\",\"teams\":[],\"created_at\":\"2020-02-11T13:48:52.362473Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-02-11T13:49:16.919666Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"q5p-k9m-btm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-07-22T18:22:19.757565Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-22T18:22:19.757565Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"q5z-8cr-k7v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Run workflow terraform dashboard\",\"teams\":[],\"created_at\":\"2023-02-15T20:13:30.498477Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-15T20:13:30.498477Z\",\"widget_count\":1,\"widget_count_by_type\":{\"run_workflow\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"q9c-n75-4rq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-13T22:22:19.842417Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-13T22:22:19.842417Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qc7-v9m-xqv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2023-12-08T19:58:04.706734Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T23:55:47.131235Z\",\"widget_count\":2,\"widget_count_by_type\":{\"resolved_powerpack\":1,\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qcr-t4m-v3k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Kepler Overview \",\"teams\":[],\"created_at\":\"2024-05-23T18:18:30.546120Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-23T19:17:16.197535Z\",\"widget_count\":8,\"widget_count_by_type\":{\"group\":2,\"note\":2,\"query_table\":1,\"query_value\":2,\"sunburst\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qd5-u4z-i8z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-27T04:11:24.143503Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-27T04:11:24.143503Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qhf-em6-2i3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-23T13:37:35.644378Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T13:37:36.923776Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"qi6-q9m-tpv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:31:11.506879Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:31:11.506879Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"qmz-925-umx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-10T14:22:53.864848Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-10T14:22:54.795680Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"qn2-but-2r8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2021-03-01T08:29:54.466356Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-03-01T08:29:54.466356Z\",\"widget_count\":2,\"widget_count_by_type\":{\"event_stream\":1,\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qpy-d9b-2bv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T10:48:02.242118Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T10:48:02.242118Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"qup-ydj-93n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_new_dashboard_with_manage_status_widget_and_show_priority_parameter-1738728686\",\"teams\":[],\"created_at\":\"2025-02-05T04:11:26.503360Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-05T04:11:26.503360Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"qxx-jfk-v42\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-24T15:14:41.219203Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-24T15:14:41.219203Z\",\"widget_count\":1,\"widget_count_by_type\":{\"distribution\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rcn-b3p-kkk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-03-04T17:35:14.272142Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-03-04T17:35:16.152659Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"rj7-qir-ztd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-11-24T04:11:51.944178Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-24T04:11:51.944178Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rm8-k6t-8m4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:49:59.470703Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:49:59.470703Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"rmu-unn-gcq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-07-13T16:50:32.341526Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-13T16:50:35.610164Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"rn6-u8f-7yk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_sunburst_widget_and_metrics_data_1734531717\",\"teams\":[],\"created_at\":\"2024-12-18T14:21:57.983817Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-18T14:21:57.983817Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"rrq-mav-byg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:16:29.780792Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:18:38.540849Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rsw-epy-tv6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Bruce test\",\"teams\":[],\"created_at\":\"2024-10-10T20:26:42.166692Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-11T20:04:05.520446Z\",\"widget_count\":1,\"widget_count_by_type\":{\"distribution\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"rt5-yit-kkz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Octopus Deploy Overview\",\"teams\":[],\"created_at\":\"2024-12-02T17:57:23.397063Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-01-03T18:22:09.527000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-12-11T14:54:48.862172Z\",\"widget_count\":7,\"widget_count_by_type\":{\"query_value\":1,\"timeseries\":4,\"query_table\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"rvp-h5j-zhk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:25:11.372571Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:26:34.329161Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"rvw-uxs-a32\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-03T19:56:05.033591Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:38:18.943692Z\",\"widget_count\":3,\"widget_count_by_type\":{\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"stu-5eb-fje\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-02-24T20:37:44.551755Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-24T20:37:45.473803Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"su8-kbt-qqk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Dashboard Mon, Oct 23, 12:43:30 pm\",\"teams\":[],\"created_at\":\"2023-10-23T16:43:31.132952Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-23T16:43:31.132952Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"suf-n3q-967\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-05-03T02:13:09.132180Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-03T02:13:09.132180Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"sv6-maw-zx9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-11-28T01:44:57.326488Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-28T01:44:57.326488Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"t5a-y6c-yr8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-27T04:11:24.943377Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-27T04:11:24.943377Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"t66-nfh-e25\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2022-09-12T19:54:19.969611Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-09-12T19:57:12.275290Z\",\"widget_count\":1,\"widget_count_by_type\":{\"topology_map\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"t7i-u49-9p6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Noueman's Dashboard Thu, Nov 9, 5:03:34 pm\",\"teams\":[],\"created_at\":\"2023-11-09T16:03:34.595627Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-09T16:03:34.595627Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"taf-afu-akt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-23T07:59:08.905416Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-23T07:59:09.903936Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tgf-iq6-ujs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-30T18:22:19.797309Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-30T18:22:19.797309Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tkn-wg4-sr3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_returns_OK_response_1718648515 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-06-17T18:21:55.846134Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-17T18:21:55.846134Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"tpx-f7m-z57\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{ unique }}\",\"teams\":[],\"created_at\":\"2023-09-12T19:44:24.710209Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-12T19:44:24.710209Z\",\"widget_count\":1,\"widget_count_by_type\":{\"heatmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"tx6-46v-wzw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-19T03:11:04.352440Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-19T03:11:04.352440Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"u4x-txd-uf6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:26:48.362206Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:26:48.362206Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"uc8-ykp-3c7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Fly.io Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-08-13T17:58:15.161434Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-14T21:07:55.940923Z\",\"widget_count\":36,\"widget_count_by_type\":{\"group\":6,\"note\":3,\"query_value\":2,\"check_status\":1,\"toplist\":2,\"query_table\":4,\"hostmap\":1,\"treemap\":1,\"timeseries\":16},\"dashboard_quality_score\":0.0}},{\"id\":\"ug4-a8z-jva\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-07T16:37:55.238444Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-07T16:37:55.238444Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ug6-j5q-8mm\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T16:13:44.101907Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T16:13:45.105031Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"unw-hwk-68w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:31:03.437671Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:31:03.437671Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uq2-urd-dzu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Scaphandre Overview \",\"teams\":[],\"created_at\":\"2024-05-16T19:33:47.986664Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-23T19:50:58.459791Z\",\"widget_count\":24,\"widget_count_by_type\":{\"group\":5,\"note\":4,\"query_value\":5,\"timeseries\":8,\"toplist\":1,\"query_table\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uqe-kqz-p6j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-11-17T18:42:10.349402Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-17T18:42:11.457516Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"uu8-cxu-zea\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Beacon Service\",\"teams\":[],\"created_at\":\"2023-10-10T18:45:29.276049Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-10T18:45:29.276049Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uw4-48e-88t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:59:31.861704Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:59:31.861704Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ux5-fxw-5cf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Screenboard Thu, Jan 26, 9:35:17 am\",\"teams\":[],\"created_at\":\"2023-01-26T08:35:17.499834Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-26T08:35:36.597872Z\",\"widget_count\":1,\"widget_count_by_type\":{\"run_workflow\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"uy6-4fe-nqd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:07:21.855524Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:08:42.636698Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"v37-yyy-9ym\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-03-30T02:06:59.053289Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-03-30T02:06:59.053289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"v3w-u4i-tww\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T14:14:41.723635Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T14:14:41.723635Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"v74-xyc-vd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T21:28:00.315443Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T21:28:01.033524Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vdt-sff-xrf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"kevinzou_sandbox\",\"teams\":[],\"created_at\":\"2023-10-10T18:20:08.538567Z\",\"author\":{\"id\":\"4348810\",\"name\":\"Kevin Zou\",\"handle\":\"kevin.zou@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-01T15:26:52.470946Z\",\"widget_count\":4,\"widget_count_by_type\":{\"timeseries\":1,\"resolved_powerpack\":1,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"vfn-gvr-cxk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-25T18:21:50.656210Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-25T18:21:50.656210Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vg2-fg8-7vh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog-api-spec Automerging\",\"teams\":[],\"created_at\":\"2024-09-23T16:27:24.646048Z\",\"author\":{\"id\":\"7359812\",\"name\":\"Jack Edmonds\",\"handle\":\"jack.edmonds@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-01-14T22:53:10.616000Z\",\"viewer\":{\"id\":\"21011231\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-jahanzeb.hassan@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2024-09-24T21:27:33.180160Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vgn-f2f-zr3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (cloned)\",\"teams\":[],\"created_at\":\"2023-11-21T20:19:09.753235Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-21T20:19:09.753235Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"vs6-9qu-vur\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-15T13:37:22.574326Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:37:23.238265Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"vvn-nwe-23z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2024-03-01T00:18:38.736689Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-03-01T00:18:38.736689Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"wce-cqf-nhh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-05-22T00:22:51.925033Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-05-22T00:22:51.925033Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"wcp-6ik-3wf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-12-29T01:44:20.834836Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-29T01:44:20.834836Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"wrg-gv3-3hf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Delete_custom_timeboard_dashboard_from_an_existing_dashboard_list_returns_OK_response_1720880516 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-07-13T14:21:57.467620Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-13T14:21:57.467620Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"wsr-yee-qm5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:59:31.598171Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:59:31.598171Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"x45-5fs-594\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-15T13:43:02.051856Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:43:02.798289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"x77-xd6-a6v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-10-23T19:59:39.468599Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-05T20:38:35.743635Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"xc8-h6m-gyt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-04-13T11:50:10.192480Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-13T11:50:38.881933Z\",\"widget_count\":3,\"widget_count_by_type\":{\"slo\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"xdp-wbm-5rj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T21:50:56.241695Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:50:56.241695Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"xfe-kap-e5y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-21T13:59:15.683388Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-21T13:59:15.683388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xgg-369-k9w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-05-13T01:28:36.563248Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-13T01:28:36.563248Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xkq-2cm-fed\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:57:16.687093Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:57:16.687093Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xue-5t2-hzf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T10:40:07.910997Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T10:40:07.910997Z\",\"widget_count\":1,\"widget_count_by_type\":{\"log_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"xz6-mat-r9c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_check_status_widget_1736101311\",\"teams\":[],\"created_at\":\"2025-01-05T18:21:52.120117Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-05T18:21:52.120117Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"y3t-eqa-763\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-14T06:21:50.287887Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-14T06:21:50.287887Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"y6m-dsb-3uq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-11-17T18:39:28.101260Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-11-17T18:39:28.748416Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ya2-tzk-zyw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-07-07T19:53:37.805020Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T19:53:38.731282Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ydt-8ah-kfv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Noueman's Dashboard Thu, May 9, 11:49:33 pm\",\"teams\":[],\"created_at\":\"2024-05-09T21:49:33.558354Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-05-09T21:49:33.558354Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"yes-s6q-j58\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2022-02-02T15:50:14.521415Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-02-02T15:50:16.741690Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"yj9-r52-is2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-24T08:06:24.291924Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-24T08:06:25.020191Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ynt-7re-g5t\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard with Powerpack\",\"teams\":[],\"created_at\":\"2023-09-13T20:04:26.921191Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-13T20:04:26.921191Z\",\"widget_count\":3,\"widget_count_by_type\":{\"resolved_powerpack\":1,\"note\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"yq7-7uz-gr9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-10-04T18:40:12.197797Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:40:12.197797Z\",\"widget_count\":19,\"widget_count_by_type\":{\"alert_graph\":2,\"alert_value\":2,\"change\":1,\"distribution\":1,\"check_status\":1,\"heatmap\":1,\"hostmap\":1,\"note\":2,\"query_value\":1,\"query_table\":1,\"scatterplot\":1,\"servicemap\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ytd-nd3-bxu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-19T01:32:56.908916Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-19T01:32:56.908916Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":0,\"first_offset\":0,\"limit\":250,\"prev_offset\":null,\"next_offset\":250,\"last_offset\":250,\"total\":255}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bedited_before%5D=2025-04-26T00%3A00%3A00Z\",\"next\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bedited_before%5D=2025-04-26T00%3A00%3A00Z&page[offset]=250&page[limit]=250\",\"first\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bedited_before%5D=2025-04-26T00%3A00%3A00Z&page[offset]=0&page[limit]=250\",\"last\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bedited_before%5D=2025-04-26T00%3A00%3A00Z&page[offset]=250&page[limit]=250\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get usage stats for all dashboards with edited_before filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Dashboards", + "frozen_at": "2026-06-01T18:15:30.412Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/dashboards/usage", + "query": [ + [ + "filter[viewed_before]", + "2025-04-26T00:00:00Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"22p-zw6-qia\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1770895286 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:21:26.907249Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:21:26.907249Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23756985018964683}},{\"id\":\"284-wiv-iqk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-21T21:02:03.739689Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-21T21:02:03.739689Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"287-waf-fua\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1770981465 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:45.310427Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:45.310427Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24073878500924423}},{\"id\":\"29x-55z-rt2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T22:20:08.019993Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:20:09.093470Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2be-q62-ep5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-23T00:04:08.199090Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-23T00:04:08.199090Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2cz-cim-bga\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771235251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:32.359535Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:32.359535Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2500709910730988}},{\"id\":\"2fb-2xi-b3r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771048054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:35.029821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:35.029821Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24318740870871283}},{\"id\":\"2fn-zr3-4jy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771249651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T13:47:32.319363Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T13:47:32.319363Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25060050348469665}},{\"id\":\"2fp-uaa-dxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770904050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:31.270385Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:31.270385Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23789213157850414}},{\"id\":\"2gn-qtd-zd9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:54:10.920756Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:54:57.107615Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"2m8-ht3-7kf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.660825Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.660825Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2n8-amr-8ws\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_hostmap_widget_1738642608\",\"teams\":[],\"created_at\":\"2025-02-04T04:16:49.306022Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-04T04:16:49.306022Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2ph-z9s-3ma\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771019257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:37.816410Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:37.816410Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24212848339848805}},{\"id\":\"2qn-4hs-6nz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-06-06T18:28:02.296323Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T18:28:02.296323Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"2rd-dc2-4qz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"delete-me\",\"teams\":[],\"created_at\":\"2023-04-04T07:20:20.175651Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-04-04T07:25:00.141124Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"2t6-ira-9sr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-26T16:19:46.726552Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-26T16:19:46.726552Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"2w5-uyn-tkh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771390145 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T04:49:05.674863Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T04:49:05.674863Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25576669675031316}},{\"id\":\"2wf-ez7-j7s\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771048050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:31.238278Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:31.238278Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24318726928614662}},{\"id\":\"37f-p9m-n5a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_updateToRbac-local-1776085112\",\"teams\":[],\"created_at\":\"2026-04-13T12:58:33.957713Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-13T12:58:33.957713Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.18728267598253262}},{\"id\":\"37v-ks5-42n\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771019250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:31.237085Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:31.237085Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24212824146438033}},{\"id\":\"38e-jd2-pvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771033651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T01:47:32.276189Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T01:47:32.276189Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24265779356294825}},{\"id\":\"3ag-svk-vks\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771379257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:37.819031Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:37.819031Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25536633071651027}},{\"id\":\"3bd-yi5-t9f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2024-01-24T20:36:07.585183Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-24T20:36:07.585183Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":9,\"image\":1,\"hostmap\":1,\"heatmap\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3dh-twk-s46\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771364857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:37.812316Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:37.812316Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25483681658051194}},{\"id\":\"3gp-ihg-25a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:49.231714Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:49.231714Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3hx-aas-pkd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-09T01:07:47.665899Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-09T01:11:49.409229Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3jf-enh-rvf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770889652 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T09:47:32.857235Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T09:47:32.857235Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23736267603969477}},{\"id\":\"3jh-dek-qps\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-08T21:59:54.884830Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-08T22:00:29.988353Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"3jt-5cb-icy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-02-24T20:40:32.063650Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-02-24T20:40:33.482665Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"3kr-vna-uug\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:56:42.073944Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:56:42.073944Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"3mh-eua-8gx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771264055 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T17:47:35.437223Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T17:47:35.437223Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25113013202126155}},{\"id\":\"3nb-3ce-ckg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_a_shared_dashboard_returns_OK_response-1771240877 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:17.935183Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:17.935183Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25027785360178356}},{\"id\":\"3nb-t26-7yu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771105650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T21:47:31.428318Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T21:47:31.428318Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24530533182875625}},{\"id\":\"3uh-fgj-iu9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_distribution_widget_using_a_histogram_request_containing_a_formulas_and_functions_events_qu_1771155581\",\"teams\":[],\"created_at\":\"2026-02-15T11:39:41.627411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T11:39:41.627411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"distribution\":1},\"dashboard_quality_score\":0.3295218066876309}},{\"id\":\"3xf-myy-c3f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createAdmin-local-1774386000\",\"teams\":[],\"created_at\":\"2026-03-24T21:00:04.874787Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-24T21:00:04.874787Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.1599693226684617}},{\"id\":\"3y3-3x5-kq8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-11-09T16:03:35.113528Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-09T16:03:47.912796Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"43b-kw6-vqr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned)\",\"teams\":[],\"created_at\":\"2023-09-20T09:37:10.513590Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-06T14:44:10.522900Z\",\"widget_count\":42,\"widget_count_by_type\":{\"query_value\":21,\"toplist\":3,\"note\":5,\"timeseries\":10,\"image\":1,\"hostmap\":1,\"heatmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"43k-xij-6fu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771393651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:32.095399Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:32.095399Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2558956341355224}},{\"id\":\"49w-wru-9r3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771336054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:35.021426Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:35.021426Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2537776861747541}},{\"id\":\"4ai-qzh-uxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771192051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T21:47:32.249226Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T21:47:32.249226Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24848244534703923}},{\"id\":\"4b5-8v7-rh2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771336050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:31.201562Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:31.201562Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25377754571138356}},{\"id\":\"4ic-zm9-api\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardSpans_NoHideIncompleteCostData-local-1771030254\",\"teams\":[],\"created_at\":\"2026-02-14T00:50:57.448221Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T00:50:57.448221Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.323377279510527}},{\"id\":\"4ig-4ks-6c8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770990454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T13:47:35.017644Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T13:47:35.017644Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24106935270214458}},{\"id\":\"4j8-nbn-4gi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-09-28T01:37:23.346984Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-09-28T01:37:23.346984Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4m8-kr3-ca4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771076850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T13:47:31.252396Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T13:47:31.252396Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2442462975804462}},{\"id\":\"4mv-u7u-ysx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_shared_dashboard_with_a_group_template_variable_returns_OK_response_1771163253 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T13:47:33.853020Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T13:47:33.853020Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24742347654333854}},{\"id\":\"4n7-s4g-dqv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"For dashboard list tests - DO NOT DELETE\",\"teams\":[],\"created_at\":\"2020-02-11T13:49:29.555334Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-04-08T17:54:25.574039Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"4nf-i9k-t87\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771379250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:31.220114Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:31.220114Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2553660880598945}},{\"id\":\"4sx-tiz-2qu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770745657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:37.768200Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:37.768200Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23206771773364124}},{\"id\":\"4td-xzm-6yq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Create_a_new_dashboard_with_a_toplist_widget_sorted_by_group-1772531926\",\"teams\":[],\"created_at\":\"2026-03-03T09:58:47.282663Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-03T09:58:47.282663Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.2977520592063098}},{\"id\":\"4ud-du4-pi3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-17T08:32:02.449350Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-17T08:32:02.449350Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"4uk-xyr-myu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_funnel_widget_1775734738 with funnel widget\",\"teams\":[],\"created_at\":\"2026-04-09T11:38:59.468470Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-09T11:38:59.468470Z\",\"widget_count\":1,\"widget_count_by_type\":{\"funnel\":1},\"dashboard_quality_score\":0.4155252214205967}},{\"id\":\"4vs-2aj-87j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770731251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T13:47:32.144492Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T13:47:32.144492Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23153799705070313}},{\"id\":\"4wp-g9w-rqp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2021-01-06T16:34:52.946050Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-01-06T16:34:52.946050Z\",\"widget_count\":1,\"widget_count_by_type\":{\"change\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4wy-ajm-bvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-10-04T18:35:18.554744Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:35:18.554744Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"4z7-iip-zrt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T17:09:12.214893Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:09:12.874904Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"4zw-ifc-4pv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770745651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:32.295694Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:32.295694Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23206751649941387}},{\"id\":\"55v-ka5-rne\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770745655 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:35.397058Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:35.397058Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23206763054210952}},{\"id\":\"59f-bun-r3c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T15:17:19.954644Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T15:17:33.545302Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"list_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5bg-c69-wq9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771062450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T09:47:31.220095Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T09:47:31.220095Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2437167825030936}},{\"id\":\"5cj-8j7-qpy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Octopus Deploy Overview\",\"teams\":[],\"created_at\":\"2024-12-11T20:48:25.007210Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":27,\"viewed_at\":\"2025-01-16T20:42:51.598000Z\",\"viewer\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":27,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-16T20:12:02.010750Z\",\"widget_count\":31,\"widget_count_by_type\":{\"group\":6,\"note\":5,\"query_value\":8,\"list_stream\":2,\"toplist\":2,\"timeseries\":1,\"query_table\":7},\"dashboard_quality_score\":0.0}},{\"id\":\"5gx-3pv-cwk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1771327301 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:41.852380Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:41.852380Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25345581641102205}},{\"id\":\"5i4-3c5-qby\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 1:37:28 pm\",\"teams\":[],\"created_at\":\"2023-12-20T18:37:28.853122Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T18:37:28.853122Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"5mk-tv6-3wt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771321657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:47:37.701536Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:47:37.701536Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25324827083706314}},{\"id\":\"5mr-xms-2qa\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T22:16:56.913567Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T22:16:57.568474Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5qz-2i3-6cq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T14:14:41.648472Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T14:14:41.648472Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5r9-yr4-f7p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770970019 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T08:06:59.825960Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T08:06:59.825960Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24031791396337582}},{\"id\":\"5ti-jks-zwd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770832051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T17:47:32.154507Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T17:47:32.154507Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23524459464028127}},{\"id\":\"5tp-tr6-93q\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-21T13:59:15.028164Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-21T13:59:15.028164Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"5uv-zxz-4r8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771004851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T17:47:32.259530Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T17:47:32.259530Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24159876516876042}},{\"id\":\"5yv-q5c-8m3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770737540 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T15:32:20.553171Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T15:32:20.553171Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23176923314226194}},{\"id\":\"63v-49e-a7d\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"sarah test\",\"teams\":[],\"created_at\":\"2023-05-15T18:12:47.853642Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-05-15T18:25:28.895732Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"669-8wg-nfr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770803257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T09:47:37.746546Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T09:47:37.746546Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23418577249155625}},{\"id\":\"679-8up-bf2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Log Stream Widget Dashboard\",\"teams\":[],\"created_at\":\"2022-04-14T13:40:43.116109Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-04-14T13:40:43.116109Z\",\"widget_count\":2,\"widget_count_by_type\":{\"log_stream\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"67s-cju-w7w\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770832057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T17:47:37.795289Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T17:47:37.795289Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23524480206152595}},{\"id\":\"6by-h9d-gui\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"MM RBAC Dashboard\",\"teams\":[],\"created_at\":\"2021-04-23T16:14:13.820995Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-23T16:14:13.820995Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6e7-n4p-tdp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771033657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T01:47:37.805777Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T01:47:37.805777Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24265799689157355}},{\"id\":\"6ez-pq7-4zk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Create_a_shared_dashboard_returns_OK_response-1689999025 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2023-07-22T04:10:25.713775Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-22T04:10:25.713775Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6md-r2g-kxc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-06-17T03:08:25.445281Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-06-17T03:08:25.445281Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6pm-2ad-2v8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-03-15T13:45:39.004786Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-15T13:45:40.299693Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"6qu-cxf-9jy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.237970Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.237970Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"6rw-fcg-izv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771105651 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T21:47:32.200877Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T21:47:32.200877Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2453053602335819}},{\"id\":\"6v2-52t-9m7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771091250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T17:47:31.249672Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T17:47:31.249672Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24477581136713875}},{\"id\":\"6vb-yrz-ag6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770918450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T17:47:31.238722Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T17:47:31.238722Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2384216442977763}},{\"id\":\"6vv-phh-8te\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770731257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T13:47:37.794992Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T13:47:37.794992Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23153820482802467}},{\"id\":\"6xb-usd-min\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-12-04T15:37:35.427082Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-12-04T15:37:35.427082Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.015739144954754695}},{\"id\":\"73p-kiw-ike\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771091251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T17:47:32.262566Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T17:47:32.262566Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24477584861292045}},{\"id\":\"74v-m9u-yzs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Acceptance Test Event Timeline Widget Dashboard\",\"teams\":[],\"created_at\":\"2020-12-10T04:21:12.270024Z\",\"author\":null,\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2020-12-10T04:21:12.270024Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_timeline\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"76m-n9x-wd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"DL FF TF\",\"teams\":[],\"created_at\":\"2021-02-02T13:54:05.514952Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-02-02T13:54:05.514952Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"795-wur-2am\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:13.784143Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:13.784143Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"7b3-yvp-mmq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Free Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T16:16:55.297530Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T16:16:55.297530Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7dp-46c-6tr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-07T16:37:56.369573Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-07T16:37:56.369573Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"7ia-ywt-ixn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770955619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T04:06:59.844956Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T04:06:59.844956Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23978840077180083}},{\"id\":\"7j9-9in-7md\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770904051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:32.262502Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:32.262502Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23789216805469163}},{\"id\":\"7kp-v5x-s54\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1771327312 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:52.754388Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:52.754388Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2534562172957386}},{\"id\":\"7ns-vmc-rup\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardListStream-local-1772801028\",\"teams\":[],\"created_at\":\"2026-03-06T12:43:50.956179Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-06T12:43:50.956179Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.4101966467791395}},{\"id\":\"7q2-h97-j2m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_items_of_a_Dashboard_List_returns_OK_response_1731709308 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-11-15T22:21:49.262821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-11-15T22:21:49.262821Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"7ui-ttk-rjb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771336051 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T13:47:32.369190Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T13:47:32.369190Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25377758864426786}},{\"id\":\"7v3-gfj-zzr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770760050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T21:47:31.212371Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T21:47:31.212371Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23259699055036287}},{\"id\":\"7yi-rk7-7kw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770947250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T01:47:31.242266Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T01:47:31.242266Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23948067220516697}},{\"id\":\"7ym-viw-7if\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard created using cloudformation template\",\"teams\":[],\"created_at\":\"2024-09-27T18:25:34.741716Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-27T18:25:34.741716Z\",\"widget_count\":60,\"widget_count_by_type\":{\"group\":6,\"timeseries\":17,\"toplist\":17,\"sunburst\":1,\"hostmap\":1,\"query_value\":18},\"dashboard_quality_score\":0.0}},{\"id\":\"823-wmx-kyk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-01-09T21:30:35.101006Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T21:30:36.200544Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"86h-24u-mwc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vSphere VM Property Metrics\",\"teams\":[],\"created_at\":\"2023-07-18T18:13:38.804575Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T19:57:25.366422Z\",\"widget_count\":14,\"widget_count_by_type\":{\"query_table\":10,\"treemap\":1,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"884-jxj-d7f\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Infrastructure Overview\",\"teams\":[],\"created_at\":\"2024-01-04T11:25:42.564360Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-05T18:05:45.334010Z\",\"widget_count\":64,\"widget_count_by_type\":{\"note\":8,\"timeseries\":17,\"hostmap\":2,\"query_value\":32,\"toplist\":3,\"query_table\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"88m-nrr-j4c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_shared_dashboard_returns_OK_response_1720742852 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2024-07-12T00:07:33.291059Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-12T00:07:33.291059Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"89p-5x9-mfp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T04:09:45.848591Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T04:09:45.848591Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8d7-qz3-urj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771128419 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T04:06:59.945411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T04:06:59.945411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24614257113158403}},{\"id\":\"8ev-2hz-9yh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771364854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:35.065546Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:35.065546Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25483671557130294}},{\"id\":\"8fj-gzg-78v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770932854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T21:47:35.023675Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T21:47:35.023675Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23895129736491214}},{\"id\":\"8mr-z8r-xaq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-14T14:17:22.284588Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-14T14:17:22.284588Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"8ny-iwn-ira\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardEventTimeline-local-1776820257\",\"teams\":[],\"created_at\":\"2026-04-22T01:11:00.774052Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-22T01:11:00.774052Z\",\"widget_count\":1,\"widget_count_by_type\":{\"event_timeline\":1},\"dashboard_quality_score\":0.19910023668490762}},{\"id\":\"8qn-sx4-6py\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-30T18:57:16.337700Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-30T18:57:16.337700Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8r3-fr7-g8h\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-03T11:06:05.600888Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-03T18:00:35.762592Z\",\"widget_count\":3,\"widget_count_by_type\":{\"hostmap\":1,\"timeseries\":1,\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8rp-qrc-d72\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Java-Create_a_new_dashboard_with_geomap_widget-1737861024\",\"teams\":[],\"created_at\":\"2025-01-26T03:10:24.707218Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-26T03:10:24.707218Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8rq-w48-cav\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1770981477 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:57.935448Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:57.935448Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24073924924663315}},{\"id\":\"8v6-29d-g7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Timeboard Dashboard 1769733\",\"teams\":[],\"created_at\":\"2024-10-04T18:49:59.050042Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-04T18:49:59.050042Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8va-as3-xfj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771099619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T20:06:59.844113Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T20:06:59.844113Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24508353962835971}},{\"id\":\"8vg-n3m-t2r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog's Dashboard Mon, Sep 18, 1:11:53 pm (cloned)\",\"teams\":[],\"created_at\":\"2023-10-13T14:28:19.062400Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-13T14:28:19.062400Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"8w6-777-dbc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:52.825402Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:52.825402Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8wn-wbp-bpe\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771243619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T12:06:59.843565Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T12:06:59.843565Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2503786784969048}},{\"id\":\"8yn-6s7-pue\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T01:34:46.545176Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T01:34:46.545176Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"8z4-u8g-ecy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771200419 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T00:06:59.836148Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T00:06:59.836148Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24879013655743737}},{\"id\":\"92z-j9h-rpi\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770745650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T17:47:31.175796Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T17:47:31.175796Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23206747531514346}},{\"id\":\"96c-d6b-txk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771134451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T05:47:32.238314Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T05:47:32.238314Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24636438938580169}},{\"id\":\"986-sdj-7f5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770947257 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T01:47:37.813715Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T01:47:37.813715Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2394809138477331}},{\"id\":\"998-r9i-nmq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770889657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T09:47:37.810139Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T09:47:37.810139Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23736285816064762}},{\"id\":\"9bz-xsh-sd4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770976054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T09:47:35.350772Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T09:47:35.350772Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24053985105860365}},{\"id\":\"9cb-ici-wh9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770788857 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T05:47:37.728846Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T05:47:37.728846Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2336562579490677}},{\"id\":\"9dy-6d6-92u\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"KubeVirt Overview (DEV)\",\"teams\":[],\"created_at\":\"2025-01-07T07:17:49.547882Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":10,\"viewed_at\":\"2025-01-07T15:05:57.088000Z\",\"viewer\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":10,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-01-07T07:18:50.881143Z\",\"widget_count\":48,\"widget_count_by_type\":{\"group\":6,\"note\":1,\"query_value\":4,\"timeseries\":31,\"query_table\":2,\"toplist\":4},\"dashboard_quality_score\":0.0}},{\"id\":\"9fh-bsk-dez\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T06:21:51.929267Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T06:21:51.929267Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gp-yca-ewc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-07-03T05:06:40.070179Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-07-03T05:06:40.070179Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9gw-nvp-fv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:16:01.442667Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:16:01.442667Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9hv-ptz-8ca\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770846451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T21:47:31.833721Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T21:47:31.833721Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23577409672987026}},{\"id\":\"9j7-b7g-fmp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"new_title\",\"teams\":[],\"created_at\":\"2023-07-07T17:12:20.570681Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T17:12:21.707927Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9km-gj8-2rj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:20:54.758861Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:21:08.649752Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9kx-z8g-k6m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770867140 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T03:32:20.633759Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T03:32:20.633759Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23653486110224511}},{\"id\":\"9nh-zpi-6qr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770904054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T13:47:35.018170Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T13:47:35.018170Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23789226938313285}},{\"id\":\"9qq-fww-7dt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_event_stream_list_stream_widget_1736259735 with list_stream widget\",\"teams\":[],\"created_at\":\"2025-01-07T14:22:16.267384Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-07T14:22:16.267384Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"9ra-4tp-6x8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-08T22:30:44.267214Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-08T22:30:44.267214Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9re-h8a-8tw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardStyle-local-1773413743\",\"teams\":[],\"created_at\":\"2026-03-13T14:55:46.971416Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-13T14:55:46.971416Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.3301781545272053}},{\"id\":\"9td-t9c-kk7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"VMware vSphere - Overview\",\"teams\":[],\"created_at\":\"2024-01-17T14:04:12.968245Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-17T16:29:07.018541Z\",\"widget_count\":22,\"widget_count_by_type\":{\"image\":1,\"event_stream\":1,\"toplist\":5,\"timeseries\":6,\"note\":3,\"query_value\":5,\"check_status\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9tw-t3j-j2j\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:55:33.097538Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:55:33.097538Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"9wr-ifb-ks3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Dashboard for testing\",\"teams\":[],\"created_at\":\"2024-06-28T14:32:31.419746Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-28T14:32:31.419746Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":1,\"sunburst\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"9ze-x5d-4uk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-10-02T10:21:50.272937Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-10-02T10:21:50.272937Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"a2m-4ke-pvn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771350450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T17:47:31.256739Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T17:47:31.256739Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2543070616237209}},{\"id\":\"a4r-ixp-f77\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1770981467 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:47.463943Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:47.463943Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24073886418893023}},{\"id\":\"aaq-h42-uug\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771292851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T01:47:32.150956Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T01:47:32.150956Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2521890389500456}},{\"id\":\"ab7-eca-ywv\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771206450 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T01:47:31.251500Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T01:47:31.251500Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2490119225420613}},{\"id\":\"anz-4xk-5rd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771163254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T13:47:35.016746Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T13:47:35.016746Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24742351933022425}},{\"id\":\"arc-fsp-y6c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771364854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T21:47:34.823663Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T21:47:34.823663Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25483670667453295}},{\"id\":\"asp-qkq-xha\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T22:47:56.046241Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T22:53:05.322597Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"asx-682-bd2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771019254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T21:47:35.043844Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T21:47:35.043844Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24212838143757}},{\"id\":\"av3-b6t-5d4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771120057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T01:47:37.800815Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T01:47:37.800815Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24583508003852905}},{\"id\":\"axt-yuk-b8k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771186019 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T20:06:59.834652Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T20:06:59.834652Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2482606226118164}},{\"id\":\"b2p-ixy-wbd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-09-01T02:22:19.767227Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-01T02:22:19.767227Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"b2x-2d8-smj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"vsphere test\",\"teams\":[],\"created_at\":\"2023-11-15T14:29:57.863141Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-17T15:09:09.324288Z\",\"widget_count\":10,\"widget_count_by_type\":{\"note\":2,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b3e-rar-7dg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771249657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T13:47:37.710012Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T13:47:37.710012Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2506007016993433}},{\"id\":\"b6n-8j5-2iz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Cloud Foundry - Overview (cloned) (cloned)\",\"teams\":[],\"created_at\":\"2023-09-26T09:00:00.247208Z\",\"author\":{\"id\":\"2475411\",\"name\":\"Noueman Khalikine\",\"handle\":\"noueman.khalikine@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-05T14:50:19.276985Z\",\"widget_count\":42,\"widget_count_by_type\":{\"image\":1,\"note\":5,\"hostmap\":1,\"timeseries\":9,\"query_value\":21,\"heatmap\":2,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"b6n-d8r-7em\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OSLO: splunk LB \",\"teams\":[],\"created_at\":\"2021-05-03T13:03:46.217614Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-03T13:03:46.217614Z\",\"widget_count\":12,\"widget_count_by_type\":{\"note\":3,\"slo\":1,\"timeseries\":8},\"dashboard_quality_score\":0.0}},{\"id\":\"b8u-q5n-6xn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770766340 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T23:32:20.553044Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T23:32:20.553044Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23282826091077408}},{\"id\":\"b9v-vd2-fq2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Etiennes Dashboard Tue, Mar 18, 3:56:32 pm\",\"teams\":[],\"created_at\":\"2025-03-18T14:56:32.569828Z\",\"author\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views\":1,\"viewed_at\":\"2025-03-18T14:56:32.743000Z\",\"viewer\":{\"id\":\"21181844\",\"name\":\"Etienne Philippe Carriere\",\"handle\":\"etienne.carriere@datadoghq.com\",\"is_disabled\":false},\"total_views_by_type\":{\"embed\":0,\"in_app\":1,\"public\":0,\"shared\":0,\"api\":0,\"unknown\":0},\"edited_at\":\"2025-03-18T14:57:27.767981Z\",\"widget_count\":1,\"widget_count_by_type\":{\"query_value\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ba4-5j6-8be\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771324708 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T10:38:29.056240Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T10:38:29.056240Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25336047463015454}},{\"id\":\"bby-apf-qxh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_a_shared_dashboard_returns_OK_response-1770981464 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T11:17:44.522761Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T11:17:44.522761Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24073875603551292}},{\"id\":\"bcy-i9m-yk2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-26T09:52:25.783725Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-26T09:52:25.783725Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bde-dby-we2\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770932850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T21:47:31.228195Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T21:47:31.228195Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2389511577953478}},{\"id\":\"bgf-jzg-b7a\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (shanel clone)\",\"teams\":[],\"created_at\":\"2024-06-06T17:13:17.485112Z\",\"author\":{\"id\":\"5620636\",\"name\":\"Shanel Huang\",\"handle\":\"shanel.huang@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-06-06T17:28:16.789541Z\",\"widget_count\":156,\"widget_count_by_type\":{\"group\":11,\"note\":28,\"check_status\":8,\"query_value\":59,\"query_table\":24,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"bgp-uee-rt3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-03-03T15:12:51.418778Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-03T15:12:51.418778Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bjz-fmp-fv7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770774451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T01:47:32.146629Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T01:47:32.146629Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23312653878975642}},{\"id\":\"bpc-yw5-2ai\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2024-08-11T05:06:09.509411Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-11T05:06:09.509411Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"bpj-ytu-fpt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T15:46:41.035816Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:48:05.847943Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"bru-u6k-rjq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Wisdom\",\"teams\":[],\"created_at\":\"2021-12-15T14:39:24.510324Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-12-15T16:54:32.046189Z\",\"widget_count\":14,\"widget_count_by_type\":{\"note\":2,\"timeseries\":12},\"dashboard_quality_score\":0.0}},{\"id\":\"brz-7z3-9w7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771027619 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T00:06:59.982674Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T00:06:59.982674Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2424359752760392}},{\"id\":\"bvm-3qi-iuq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771393654 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:35.059151Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:35.059151Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25589574311027136}},{\"id\":\"byj-yvx-u34\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardTopologyMap-local-1772643592\",\"teams\":[],\"created_at\":\"2026-03-04T16:59:55.987040Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-04T16:59:55.987040Z\",\"widget_count\":1,\"widget_count_by_type\":{\"topology_map\":1},\"dashboard_quality_score\":0.4024777576291846}},{\"id\":\"c5w-bu2-9tj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardRbac_createRbac-local-1774284510\",\"teams\":[],\"created_at\":\"2026-03-23T16:48:34.042558Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-23T16:48:34.042558Z\",\"widget_count\":1,\"widget_count_by_type\":{\"note\":1},\"dashboard_quality_score\":0.15833784709532417}},{\"id\":\"c5z-eix-jck\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_a_toplist_widget_with_stacked_type_and_no_legend_specified_1742496578\",\"teams\":[],\"created_at\":\"2025-03-20T18:49:39.343102Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-20T18:49:39.343102Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"c7v-rr4-syc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771048057 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T05:47:37.791536Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T05:47:37.791536Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2431875102514791}},{\"id\":\"ce2-rip-h9m\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771235250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:31.226370Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:31.226370Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2500709493940407}},{\"id\":\"cf8-ifs-4vf\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Sherzod's Dashboard Wed, Dec 20, 10:34:03 am\",\"teams\":[],\"created_at\":\"2023-12-20T15:34:03.307486Z\",\"author\":{\"id\":\"1725336\",\"name\":\"Sherzod Karimov\",\"handle\":\"sherzod.karimov@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-20T15:34:03.307486Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"ch3-ufm-3r3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1771278457 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T21:47:37.708347Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T21:47:37.708347Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2516597294145297}},{\"id\":\"chp-364-vkw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1770809020 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T11:23:40.360996Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:23:40.360996Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23439767417939056}},{\"id\":\"cmr-azj-aw6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-13T12:31:40.386452Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-13T12:31:40.386452Z\",\"widget_count\":2,\"widget_count_by_type\":{\"toplist\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"cpe-53e-zpe\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1770895295 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T11:21:35.806052Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T11:21:35.806052Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23757017740340938}},{\"id\":\"cph-7er-div\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771379251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T01:47:32.093932Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T01:47:32.093932Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2553661201844489}},{\"id\":\"cqe-tb8-kag\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770881540 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T07:32:20.535221Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T07:32:20.535221Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23706437136494196}},{\"id\":\"cw4-irn-n79\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"{{uniq}}\",\"teams\":[],\"created_at\":\"2024-09-06T21:55:02.601652Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-06T21:55:02.601652Z\",\"widget_count\":1,\"widget_count_by_type\":{\"toplist\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"cx2-6g6-mni\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_timeseries_widget_with_legacy_live_span_time_format_1739376942 with legacy live span time\",\"teams\":[],\"created_at\":\"2025-02-12T16:15:43.276834Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-12T16:15:43.276834Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"cxr-rw5-dfb\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"frog's Dashboard Wed, Oct 11, 2:07:21 pm\",\"teams\":[],\"created_at\":\"2023-10-11T18:07:21.856517Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-10-11T20:32:00.487697Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"d27-b4r-765\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_returns_OK_response-1771240889 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:29.190827Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:29.190827Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2502782674825783}},{\"id\":\"d44-daj-rt3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771235254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T09:47:35.291802Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T09:47:35.291802Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2500710988865427}},{\"id\":\"d4c-zbf-ehz\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771332545 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T12:49:05.720282Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T12:49:05.720282Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2536486428542805}},{\"id\":\"d9k-7wu-vwn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardTabUpdate-local-1774284040\",\"teams\":[],\"created_at\":\"2026-03-23T16:40:44.085796Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-03-23T16:40:53.238271Z\",\"widget_count\":3,\"widget_count_by_type\":{\"note\":3},\"dashboard_quality_score\":0.15833043961847454}},{\"id\":\"d9n-2k5-rjr\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771120050 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T01:47:31.229462Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T01:47:31.229462Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24583483839549952}},{\"id\":\"dc4-sn4-x3c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771307251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T05:47:32.139096Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T05:47:32.139096Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2527185523998893}},{\"id\":\"dea-tup-asp\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-01-24T17:57:50.017145Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-24T17:57:50.017145Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"deh-2pa-jv8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Timeboard Wed, Mar 3, 10:57:28 am\",\"teams\":[],\"created_at\":\"2021-03-03T09:57:28.304302Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-03-03T09:59:37.861240Z\",\"widget_count\":2,\"widget_count_by_type\":{\"timeseries\":2},\"dashboard_quality_score\":0.0}},{\"id\":\"dep-fr9-h4z\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771214819 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T04:06:59.939941Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T04:06:59.939941Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.249319654258522}},{\"id\":\"dgv-rzf-sdg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771319423 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:10:23.922075Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:10:23.922075Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25316613074272637}},{\"id\":\"dis-ra2-zyk\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770918454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-12T17:47:35.362355Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-12T17:47:35.362355Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23842179592467166}},{\"id\":\"dkd-m4y-nfc\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-07-29T16:45:28.934525Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-07-29T16:45:31.392137Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"dmj-ttd-6fy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1771327303 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:43.612738Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:43.612738Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2534558811347179}},{\"id\":\"dnm-hvh-9hw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771301219 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T04:06:59.854762Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T04:06:59.854762Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2524967344594881}},{\"id\":\"dvv-i5b-zbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion] (cloned)\",\"teams\":[],\"created_at\":\"2024-01-08T19:23:43.013799Z\",\"author\":{\"id\":\"6515857\",\"name\":\"Candace Shamieh\",\"handle\":\"candace.shamieh@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-01-08T19:42:17.791727Z\",\"widget_count\":133,\"widget_count_by_type\":{\"group\":7,\"note\":29,\"check_status\":6,\"query_value\":44,\"timeseries\":26,\"query_table\":21},\"dashboard_quality_score\":0.0}},{\"id\":\"dw4-m52-byx\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_logs_stream_list_stream_widget_and_storage_parameter_1733350921 with list_stream widget\",\"teams\":[],\"created_at\":\"2024-12-04T22:22:01.830291Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-04T22:22:01.830291Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"dwv-37t-bd6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770846452 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T21:47:32.382782Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T21:47:32.382782Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23577411691558833}},{\"id\":\"dyc-y4i-su4\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771220851 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T05:47:32.212811Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T05:47:32.212811Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24954147177652072}},{\"id\":\"dzm-bwc-ean\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"ListStream\",\"teams\":[],\"created_at\":\"2025-02-25T10:01:52.815694Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-25T10:01:52.815694Z\",\"widget_count\":1,\"widget_count_by_type\":{\"list_stream\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e63-myc-uhh\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Orchestrator Writer [EP]\",\"teams\":[],\"created_at\":\"2022-03-29T12:23:13.061726Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-03-29T12:23:13.061726Z\",\"widget_count\":57,\"widget_count_by_type\":{\"group\":7,\"timeseries\":47,\"sunburst\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"e7c-akg-fbj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response-1771327313 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T11:21:53.347737Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T11:21:53.347737Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25345623910756404}},{\"id\":\"e7w-ted-kp5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-07-07T19:50:57.927100Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-07-07T19:50:58.454696Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e84-h6q-8ru\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2022-02-03T14:05:45.526436Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-02-03T14:05:47.627593Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"e88-itr-s9c\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardFreeText_import-local-1738715031\",\"teams\":[],\"created_at\":\"2025-02-05T00:23:56.182926Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-02-05T00:23:56.182926Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"e8c-sk3-j9y\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-14T02:11:46.227958Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-14T02:11:46.227958Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eg4-nui-f7r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-09T16:11:30.640663Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-09T16:11:31.171270Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"egd-5vg-rac\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-01-10T14:20:28.977761Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-10T14:20:29.512718Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ehj-axw-7z7\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Ordered Layout Dashboard\",\"teams\":[],\"created_at\":\"2024-09-12T14:51:18.428821Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-09-12T15:21:55.042874Z\",\"widget_count\":7,\"widget_count_by_type\":{\"scatterplot\":1,\"timeseries\":1,\"toplist\":1,\"group\":1,\"note\":1,\"alert_graph\":1,\"slo\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"ekk-7pk-gs8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771192054 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T21:47:34.995462Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T21:47:34.995462Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2484825463212602}},{\"id\":\"em8-i32-hk5\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2026-04-07T14:54:38.987154Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-04-07T14:54:40.849696Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.1790613361492745}},{\"id\":\"eq3-r74-a85\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2023-11-02T02:11:27.014458Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-02T02:11:27.014458Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"eqh-5b2-49v\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771350454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T17:47:35.047347Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T17:47:35.047347Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25430720100682513}},{\"id\":\"eup-drq-jnt\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"datadog test\",\"teams\":[],\"created_at\":\"2023-03-01T16:07:22.663414Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-03-01T16:07:23.517492Z\",\"widget_count\":1,\"widget_count_by_type\":{\"image\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"exv-de7-2iw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770788850 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T05:47:31.133313Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T05:47:31.133313Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23365601541400152}},{\"id\":\"eyd-ivm-aaw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771177650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T17:47:31.208772Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T17:47:31.208772Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24795289318872427}},{\"id\":\"ez7-i7k-kvy\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"tf-TestAccDatadogDashboardLogStream-local-1737547858\",\"teams\":[],\"created_at\":\"2025-01-22T12:11:02.505903Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-22T12:11:02.505903Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f2n-g2w-p8k\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1770838340 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T19:32:20.700785Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T19:32:20.700785Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23547583578409417}},{\"id\":\"f3n-m8x-cyd\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771148854 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T09:47:35.020282Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T09:47:35.020282Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24689400556686958}},{\"id\":\"f47-qxr-zry\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Merging Tracking\",\"teams\":[],\"created_at\":\"2024-08-29T15:44:56.266108Z\",\"author\":{\"id\":\"7557262\",\"name\":\"Anika Maskara\",\"handle\":\"anika.maskara@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-08-29T15:44:56.266108Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"f4a-76m-nbn\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\",\"teams\":[],\"created_at\":\"2021-04-16T08:27:11.505665Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-04-16T08:49:08.310691Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"f4q-d9c-2nj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Datadog API Clients CI\",\"teams\":[],\"created_at\":\"2021-05-11T14:44:24.984417Z\",\"author\":{\"id\":\"1379828\",\"name\":\"Hippolyte Henry\",\"handle\":\"hippolyte.henry@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2021-05-11T14:44:24.984417Z\",\"widget_count\":10,\"widget_count_by_type\":{\"manage_status\":1,\"note\":3,\"timeseries\":3,\"toplist\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f59-6bj-c7p\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"[corpit] Iroh License Check Dashboard\",\"teams\":[],\"created_at\":\"2023-01-30T11:34:18.574271Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-01-30T11:34:30.591612Z\",\"widget_count\":57,\"widget_count_by_type\":{\"query_value\":28,\"timeseries\":11,\"image\":12,\"list_stream\":1,\"toplist\":2,\"note\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"f5q-i7e-ewj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"jeffallen - pcf billing test\",\"teams\":[],\"created_at\":\"2022-05-20T20:30:30.729505Z\",\"author\":{\"id\":\"4053606\",\"name\":\"Datadog Support\",\"handle\":\"support-ddintegrationtests321813-3920545\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2022-06-09T21:01:57.752118Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"f8a-ji7-qwq\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Send_shared_dashboard_invitation_email_returns_OK_response-1771240880 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T11:21:20.340141Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T11:21:20.340141Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25027794202446035}},{\"id\":\"fap-y2h-r3r\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771393650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-18T05:47:31.269914Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-18T05:47:31.269914Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.255895603769782}},{\"id\":\"fbk-p62-su3\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_returns_OK_response_1770961657 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T05:47:37.800370Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T05:47:37.800370Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.240010427239676}},{\"id\":\"ffm-526-xz6\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1771062451 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T09:47:32.260690Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T09:47:32.260690Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24371676510875606}},{\"id\":\"fha-aib-dfs\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Send_shared_dashboard_invitation_email_returns_OK_response_1771157219 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T12:06:59.841448Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T12:06:59.841448Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24720153942999235}},{\"id\":\"fhq-aq5-4nu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_a_shared_dashboard_returns_OK_response_1770947251 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-13T01:47:32.452373Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-13T01:47:32.452373Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23948066104597981}},{\"id\":\"fim-fgh-t55\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Create_a_new_dashboard_with_run_workflow_widget_1737023351\",\"teams\":[],\"created_at\":\"2025-01-16T10:29:11.940056Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-01-16T10:29:11.940056Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"fny-85t-qat\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Python-Create_a_new_dashboard_with_split_graph_widget-1734399089\",\"teams\":[],\"created_at\":\"2024-12-17T01:31:30.428183Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2024-12-17T01:31:30.428183Z\",\"widget_count\":0,\"widget_count_by_type\":{},\"dashboard_quality_score\":0.0}},{\"id\":\"fpr-kus-ryj\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1770731250 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-10T13:47:31.224075Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-10T13:47:31.224075Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23153790754560338}},{\"id\":\"frk-ke6-iy8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Test-Typescript-Get_all_invitations_for_a_shared_dashboard_returns_OK_response-1770809016 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T11:23:36.982121Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T11:23:36.982121Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.23439749427924528}},{\"id\":\"fs5-ib5-p7i\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771249650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-16T13:47:31.258110Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-16T13:47:31.258110Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25060040879702344}},{\"id\":\"fst-vg2-dax\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1770803254 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-11T09:47:35.106620Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-11T09:47:35.106620Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.2341856197580425}},{\"id\":\"fua-njm-8vw\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771321650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-17T09:47:31.273391Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-17T09:47:31.273391Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.25324797880327277}},{\"id\":\"fx7-fqc-mvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"TF Test Layout Dashboard\",\"teams\":[],\"created_at\":\"2023-08-02T16:16:55.510850Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-08-02T16:16:55.510850Z\",\"widget_count\":1,\"widget_count_by_type\":{\"alert_graph\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"g3b-pak-mf9\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Update_a_shared_dashboard_with_selectable_template_vars_returns_OK_response_1771033650 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-14T01:47:31.232292Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-14T01:47:31.232292Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24265769951409744}},{\"id\":\"g5y-dp6-qvu\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"\",\"teams\":[],\"created_at\":\"2025-03-27T00:04:42.266863Z\",\"author\":{\"id\":\"2320499\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2025-03-27T00:04:42.266863Z\",\"widget_count\":1,\"widget_count_by_type\":{\"hostmap\":1},\"dashboard_quality_score\":0.0}},{\"id\":\"g9c-xme-5c8\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Powerpack Dashboard\",\"teams\":[],\"created_at\":\"2023-09-13T20:02:37.796210Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-11-08T17:33:09.413127Z\",\"widget_count\":5,\"widget_count_by_type\":{\"resolved_powerpack\":2,\"note\":3},\"dashboard_quality_score\":0.0}},{\"id\":\"g9d-nja-s56\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"OpenStack Controller Overview [Default Microversion]\",\"teams\":[],\"created_at\":\"2023-12-07T15:11:01.265429Z\",\"author\":{\"id\":\"4594522\",\"name\":\"Sarah Witt\",\"handle\":\"sarah.witt@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2023-12-07T15:27:24.603106Z\",\"widget_count\":124,\"widget_count_by_type\":{\"group\":7,\"note\":27,\"check_status\":6,\"query_value\":37,\"query_table\":21,\"timeseries\":26},\"dashboard_quality_score\":0.0}},{\"id\":\"gci-4wq-yzg\",\"type\":\"dashboards-usages\",\"attributes\":{\"org_id\":321813,\"title\":\"Example-Get_all_invitations_for_a_shared_dashboard_returns_OK_response_1771134454 with Profile Metrics Query\",\"teams\":[],\"created_at\":\"2026-02-15T05:47:34.999039Z\",\"author\":{\"id\":\"1445416\",\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"is_disabled\":false},\"total_views\":0,\"viewed_at\":null,\"viewer\":null,\"total_views_by_type\":null,\"edited_at\":\"2026-02-15T05:47:34.999039Z\",\"widget_count\":1,\"widget_count_by_type\":{\"timeseries\":1},\"dashboard_quality_score\":0.24636443524598448}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":0,\"first_offset\":0,\"limit\":250,\"prev_offset\":null,\"next_offset\":250,\"last_offset\":500,\"total\":564}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bviewed_before%5D=2025-04-26T00%3A00%3A00Z\",\"next\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bviewed_before%5D=2025-04-26T00%3A00%3A00Z&page[offset]=250&page[limit]=250\",\"first\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bviewed_before%5D=2025-04-26T00%3A00%3A00Z&page[offset]=0&page[limit]=250\",\"last\":\"https://api.datadoghq.com/api/v2/dashboards/usage?filter%5Bviewed_before%5D=2025-04-26T00%3A00%3A00Z&page[offset]=500&page[limit]=250\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get usage stats for all dashboards with viewed_before filter returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/data-deletion.json b/test-server-data/v2/data-deletion.json new file mode 100644 index 0000000000..06ce460c4b --- /dev/null +++ b/test-server-data/v2/data-deletion.json @@ -0,0 +1,369 @@ +{ + "feature": "Data Deletion", + "recordings": [ + { + "feature": "Data Deletion", + "frozen_at": "2025-01-15T14:25:54.929Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/deletion/requests/id-1/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"id\\\" in \\\"path\\\"; expected type \\\"int\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Cancels a data deletion request returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "frozen_at": "2025-01-15T14:26:08.930Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1672527600000, + "indexes": [ + "test-index", + "test-index-2" + ], + "query": { + "host": "abc", + "service": "xyz" + }, + "to": 1704063600000 + }, + "type": "create_deletion_req" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deletion/data/logs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"753\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:26:09.447960191Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"pending\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:26:09.447960191Z\"}},\"meta\":{\"product\":\"logs\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/deletion/requests/753/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"753\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:26:09.44796Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:26:10.016496Z\"}},\"meta\":{\"product\":\"logs\",\"request_status\":\"canceled\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/deletion/requests/753/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"753\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:26:09.44796Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:26:10.016496Z\"}},\"meta\":{\"product\":\"logs\",\"request_status\":\"canceled\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Cancels a data deletion request returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "frozen_at": "2025-01-15T14:26:26.195Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/deletion/requests/-1/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"412\",\"code\":\"INVALID_ID\",\"title\":\"INVALID_ID\",\"detail\":\"INVALID_ID\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Precondition Failed", + "status": 412 + } + } + ], + "scenario": "Cancels a data deletion request returns \"Precondition failed error\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "frozen_at": "2025-01-15T14:27:27.929Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1672527600000, + "indexes": [ + "test-index", + "test-index-2" + ], + "query": { + "host": "abc", + "service": "xyz" + }, + "to": 1704063600000 + }, + "type": "create_deletion_req" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deletion/data/logs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"754\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:27:28.457837225Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"pending\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:27:28.457837225Z\"}},\"meta\":{\"product\":\"logs\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/deletion/requests/754/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"754\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:27:28.457837Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:27:28.841156Z\"}},\"meta\":{\"product\":\"logs\",\"request_status\":\"canceled\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Creates a data deletion request returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "frozen_at": "2025-01-15T14:27:45.329Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1672527600000, + "indexes": [ + "test-index", + "test-index-2" + ], + "query": {}, + "to": 1704063600000 + }, + "type": "create_deletion_req" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deletion/data/logs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"412\",\"code\":\"INVALID_BODY\",\"title\":\"INVALID_BODY\",\"detail\":\"INVALID_BODY\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Precondition Failed", + "status": 412 + } + } + ], + "scenario": "Creates a data deletion request returns \"Precondition failed error\" response", + "version": "v2" + }, + { + "feature": "Data Deletion", + "frozen_at": "2025-01-15T14:28:03.053Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1672527600000, + "indexes": [ + "test-index", + "test-index-2" + ], + "query": { + "host": "abc", + "service": "xyz" + }, + "to": 1704063600000 + }, + "type": "create_deletion_req" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deletion/data/logs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"755\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:28:03.561191422Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"pending\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:28:03.561191422Z\"}},\"meta\":{\"product\":\"logs\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deletion/requests", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"755\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:28:03.561191Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"pending\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:28:03.561191Z\"}},{\"id\":\"754\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:27:28.457837Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:27:29.845912Z\"}},{\"id\":\"753\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:26:09.44796Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:26:40.778007Z\"}},{\"id\":\"752\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:25:29.051089Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:25:29.487794Z\"}},{\"id\":\"714\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T11:10:11.283679Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T11:10:12.030383Z\"}},{\"id\":\"713\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T11:10:10.997244Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T11:10:11.762718Z\"}},{\"id\":\"712\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T11:10:10.589382Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T11:10:11.996616Z\"}},{\"id\":\"711\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T05:12:36.867077Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T05:12:37.582675Z\"}},{\"id\":\"710\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T05:12:36.409111Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T05:12:37.523535Z\"}},{\"id\":\"709\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T05:12:35.772827Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T05:12:37.358453Z\"}},{\"id\":\"708\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T04:20:49.519001Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T04:21:21.590926Z\"}},{\"id\":\"707\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T04:20:48.85652Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T04:20:50.409776Z\"}},{\"id\":\"706\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T04:20:46.836697Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T04:20:49.900177Z\"}},{\"id\":\"705\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T03:29:33.148865Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T03:30:05.402385Z\"}},{\"id\":\"704\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T03:29:32.873575Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T03:29:34.480198Z\"}},{\"id\":\"703\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T03:29:31.474974Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T03:29:34.575551Z\"}},{\"id\":\"702\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T02:35:46.220064Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T02:36:16.89516Z\"}},{\"id\":\"701\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T02:35:46.023077Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T02:35:48.234014Z\"}},{\"id\":\"700\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T02:35:44.731426Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T02:36:15.503554Z\"}},{\"id\":\"699\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T01:48:30.752051Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T01:48:31.279909Z\"}},{\"id\":\"698\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T01:48:05.417998Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T01:48:36.25558Z\"}},{\"id\":\"697\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T01:45:32.382234Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T01:45:36.312471Z\"}},{\"id\":\"696\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T00:10:48.46036Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T00:10:49.886692Z\"}},{\"id\":\"695\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T00:10:48.327767Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T00:10:48.780992Z\"}},{\"id\":\"694\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-13T00:10:47.122825Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-13T00:10:48.487494Z\"}},{\"id\":\"685\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T11:12:38.870862Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T11:12:39.89965Z\"}},{\"id\":\"684\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T11:12:38.199983Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T11:12:39.049625Z\"}},{\"id\":\"683\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T11:12:36.807002Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T11:13:07.805293Z\"}},{\"id\":\"682\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T05:12:52.684546Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T05:12:53.685522Z\"}},{\"id\":\"681\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T05:12:52.16783Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T05:12:53.950165Z\"}},{\"id\":\"680\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T05:12:51.544717Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T05:12:53.828301Z\"}},{\"id\":\"679\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T04:17:01.83844Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T04:17:03.845361Z\"}},{\"id\":\"678\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T04:17:01.663259Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T04:17:03.964271Z\"}},{\"id\":\"677\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T04:17:00.420697Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T04:17:03.326956Z\"}},{\"id\":\"676\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T03:33:57.914898Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T03:34:00.243844Z\"}},{\"id\":\"675\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T03:33:57.247608Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T03:33:57.967989Z\"}},{\"id\":\"674\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T03:33:55.222307Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T03:34:27.685207Z\"}},{\"id\":\"673\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T02:35:45.009347Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T02:36:16.117622Z\"}},{\"id\":\"672\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T02:35:44.703999Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T02:35:45.087818Z\"}},{\"id\":\"671\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T02:35:43.243266Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T02:35:44.412883Z\"}},{\"id\":\"670\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T01:37:54.871601Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T01:37:56.816539Z\"}},{\"id\":\"669\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T01:35:59.187862Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T01:36:00.746255Z\"}},{\"id\":\"668\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T01:33:43.354197Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T01:33:48.502764Z\"}},{\"id\":\"667\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T00:10:04.772518Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T00:10:07.559594Z\"}},{\"id\":\"666\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T00:10:04.623831Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T00:10:05.077168Z\"}},{\"id\":\"665\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-12T00:10:03.407238Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-12T00:10:07.423403Z\"}},{\"id\":\"663\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-11T13:24:23.783684Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-11T13:24:55.748311Z\"}},{\"id\":\"662\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-11T13:24:23.268323Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-11T13:24:23.989092Z\"}},{\"id\":\"661\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-11T13:24:21.411605Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-11T13:24:24.416787Z\"}},{\"id\":\"660\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2024-12-11T11:10:35.376536Z\",\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2024-12-11T11:10:35.80173Z\"}}],\"meta\":{\"next_page\":\"eyJQcm9kdWN0cyI6bnVsbCwiUXVlcnkiOiIiLCJTdGF0dXMiOiIiLCJQYWdlU2l6ZSI6NTAsIkxhc3RJdGVtSWQiOjY1OX0K\",\"count_status\":{\"canceled\":303,\"pending\":1},\"count_product\":{\"logs\":304}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/deletion/requests/755/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"755\",\"type\":\"deletion_request\",\"attributes\":{\"created_at\":\"2025-01-15T14:28:03.561191Z\",\"created_by\":\"frog@datadoghq.com\",\"from_time\":1672527600000,\"indexes\":[\"test-index\",\"test-index-2\"],\"is_created\":false,\"org_id\":321813,\"product\":\"logs\",\"query\":\"host:abc service:xyz\",\"starting_at\":\"0001-01-01T00:00:00Z\",\"status\":\"canceled\",\"to_time\":1704063600000,\"total_unrestricted\":0,\"updated_at\":\"2025-01-15T14:28:04.405914Z\"}},\"meta\":{\"product\":\"logs\",\"request_status\":\"canceled\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Gets a list of data deletion requests returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/datasets.json b/test-server-data/v2/datasets.json new file mode 100644 index 0000000000..1b802ed02c --- /dev/null +++ b/test-server-data/v2/datasets.json @@ -0,0 +1,747 @@ +{ + "feature": "Datasets", + "recordings": [ + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:35:57.144Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "test": "bad_request" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/datasets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request: Request body contains invalid json\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a dataset returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:35:57.324Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:ABCD" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/datasets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"dataset\",\"id\":\"7cbada94-7d01-4e73-8c74-ea70fb3b3088\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:ABCD" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/datasets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request: [DatasetNameConflict] dataset with name \\\"Security Audit Dataset\\\" already exists\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/datasets/7cbada94-7d01-4e73-8c74-ea70fb3b3088", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a dataset returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:35:57.839Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:ABCD" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/datasets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"dataset\",\"id\":\"86f67664-8b7b-49ae-b671-919ebe11886c\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/datasets/86f67664-8b7b-49ae-b671-919ebe11886c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a dataset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:35:58.251Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/datasets/malformed_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request: [UUIDInvalidValue] \\\"malformed_id\\\" is not a valid UUID: invalid UUID length: 12\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete a dataset returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:35:58.429Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:ABCD" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/datasets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"dataset\",\"id\":\"60ee6562-48f5-455f-bdb4-fd3f5f899978\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/datasets/60ee6562-48f5-455f-bdb4-fd3f5f899978", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/datasets/60ee6562-48f5-455f-bdb4-fd3f5f899978", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request: [DatasetNotFound] dataset \\\"60ee6562-48f5-455f-bdb4-fd3f5f899978\\\" not found\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a dataset returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:35:58.996Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/datasets/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request: [DatasetNotFound] dataset \\\"00000000-0000-0000-0000-000000000000\\\" not found\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a dataset returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:35:59.180Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/datasets/malformed_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request: Request body contains invalid json\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Edit a dataset returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:35:59.399Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:ABCD" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/datasets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"dataset\",\"id\":\"2bf848a1-b18a-4602-8348-814a53862c52\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:1234" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/datasets/2bf848a1-b18a-4602-8348-814a53862c52", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"dataset\",\"id\":\"2bf848a1-b18a-4602-8348-814a53862c52\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:1234\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/datasets/2bf848a1-b18a-4602-8348-814a53862c52", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Edit a dataset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:36:00.009Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/datasets/malformed_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request: [UUIDInvalidValue] \\\"malformed_id\\\" is not a valid UUID: invalid UUID length: 12\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a single dataset by ID returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:36:00.186Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:ABCD" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/datasets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"dataset\",\"id\":\"9e576299-3cc1-4145-8aad-67a1ab914829\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/datasets/9e576299-3cc1-4145-8aad-67a1ab914829", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"dataset\",\"id\":\"9e576299-3cc1-4145-8aad-67a1ab914829\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/datasets/9e576299-3cc1-4145-8aad-67a1ab914829", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a single dataset by ID returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Datasets", + "frozen_at": "2025-07-29T20:36:00.713Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Security Audit Dataset", + "principals": [ + "role:94172442-be03-11e9-a77a-3b7612558ac1" + ], + "product_filters": [ + { + "filters": [ + "@application.id:ABCD" + ], + "product": "metrics" + } + ] + }, + "type": "dataset" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/datasets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"dataset\",\"id\":\"b0f617b4-affb-4411-970a-2c157933514c\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/datasets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"dataset\",\"id\":\"b0f617b4-affb-4411-970a-2c157933514c\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created_at\":\"2025-07-29T20:36:00.94442Z\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/datasets/b0f617b4-affb-4411-970a-2c157933514c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all datasets returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/deployment-gates.json b/test-server-data/v2/deployment-gates.json new file mode 100644 index 0000000000..877ef4c029 --- /dev/null +++ b/test-server-data/v2/deployment-gates.json @@ -0,0 +1,2585 @@ +{ + "feature": "Deployment Gates", + "recordings": [ + { + "feature": "Deployment Gates", + "frozen_at": "2025-10-28T14:03:25.410Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "env": "", + "identifier": "my-gate", + "service": "test-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"env\\\" is required\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create deployment gate returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:13.804Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testcreatedeploymentgatereturnsbadrequestresponse1773742993", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2ddfb377-44de-47fe-b53c-58cf800cca1b\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2026-03-17T10:23:14.339908Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testcreatedeploymentgatereturnsbadrequestresponse1773742993\",\"service\":\"my-service\",\"updated_at\":\"2026-03-17T10:23:14.339908Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testcreatedeploymentgatereturnsbadrequestresponse1773742993", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"Gate already exists with the given env, service and identifier\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/2ddfb377-44de-47fe-b53c-58cf800cca1b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create deployment gate returns \"Bad request (invalid).\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-10-28T14:03:26.103Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-1", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0cc075c2-fec1-4ed3-9e43-0882646fac07\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-10-28T14:03:26.337009Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-1\",\"service\":\"my-service\",\"updated_at\":\"2025-10-28T14:03:26.337009Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/0cc075c2-fec1-4ed3-9e43-0882646fac07", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create deployment gate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:49.955Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testcreatedeploymentrulereturnsbadrequestresponse1765358629", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"39b27cfd-44c1-4ec0-900b-3b46ca2ab8c1\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:50.404151Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testcreatedeploymentrulereturnsbadrequestresponse1765358629\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:50.404151Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "test", + "options": { + "excluded_resources": [] + }, + "type": "fdd" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/39b27cfd-44c1-4ec0-900b-3b46ca2ab8c1/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"type\\\" must be one of \\\"monitor faulty_deployment_detection\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/39b27cfd-44c1-4ec0-900b-3b46ca2ab8c1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create deployment rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:14.811Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "duration": 3600, + "excluded_resources": [ + "resource1", + "resource2" + ] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/not-a-valid-id/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"gate_id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create deployment rule returns \"Bad request (invalid).\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:50.780Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testcreatedeploymentrulereturnsokresponse1765358630", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"24d967fe-1dec-4957-bf77-7eda18a65d47\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:50.813397Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testcreatedeploymentrulereturnsokresponse1765358630\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:50.813397Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "excluded_resources": [] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/24d967fe-1dec-4957-bf77-7eda18a65d47/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ebe85a93-a82d-49ec-8925-6d3d569012bb\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:50.871951Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"24d967fe-1dec-4957-bf77-7eda18a65d47\",\"name\":\"My deployment rule\",\"options\":{},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2025-12-10T09:23:50.871951Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/24d967fe-1dec-4957-bf77-7eda18a65d47/rules/ebe85a93-a82d-49ec-8925-6d3d569012bb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/24d967fe-1dec-4957-bf77-7eda18a65d47", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create deployment rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-10-28T14:03:29.170Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/invalid-gate-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete deployment gate returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:14.936Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/not-a-valid-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete deployment gate returns \"Bad request (invalid).\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:15.078Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"Gate does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete deployment gate returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:51.011Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testdeletedeploymentgatereturnsnocontentresponse1765358631", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"03a2ecd3-87ad-45aa-9dbb-fda1215a4087\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:51.052668Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testdeletedeploymentgatereturnsnocontentresponse1765358631\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:51.052668Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/03a2ecd3-87ad-45aa-9dbb-fda1215a4087", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/03a2ecd3-87ad-45aa-9dbb-fda1215a4087", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"Gate does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete deployment gate returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-10-28T14:03:30.230Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/invalid-gate-id/rules/invalid-rule-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"gate_id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete deployment rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:15.199Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/not-a-valid-id/rules/not-a-valid-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"gate_id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete deployment rule returns \"Bad request (invalid).\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:15.316Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/00000000-0000-0000-0000-000000000000/rules/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"Rule does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete deployment rule returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:51.205Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testdeletedeploymentrulereturnsnocontentresponse1765358631", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b30401bf-4220-4d42-82ef-68d1a7916f21\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:51.250082Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testdeletedeploymentrulereturnsnocontentresponse1765358631\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:51.250082Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "excluded_resources": [] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/b30401bf-4220-4d42-82ef-68d1a7916f21/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3e9bb31e-27be-43d0-9ef8-571a7f221f59\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:51.336139Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"b30401bf-4220-4d42-82ef-68d1a7916f21\",\"name\":\"My deployment rule\",\"options\":{},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2025-12-10T09:23:51.336139Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/b30401bf-4220-4d42-82ef-68d1a7916f21/rules/3e9bb31e-27be-43d0-9ef8-571a7f221f59", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/b30401bf-4220-4d42-82ef-68d1a7916f21/rules/3e9bb31e-27be-43d0-9ef8-571a7f221f59", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"Rule does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/b30401bf-4220-4d42-82ef-68d1a7916f21", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete deployment rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:15.458Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployments/gates/evaluation/not-a-valid-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a deployment gates evaluation result returns \"Bad request.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:15.592Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployments/gates/evaluation/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"gate evaluation with id 00000000-0000-0000-0000-000000000000 not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a deployment gates evaluation result returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:15.715Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testgetadeploymentgatesevaluationresultreturnsokresponse1773742995", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7b930550-63b0-4002-8b74-4c827bd070d3\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2026-03-17T10:23:15.799742Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testgetadeploymentgatesevaluationresultreturnsokresponse1773742995\",\"service\":\"my-service\",\"updated_at\":\"2026-03-17T10:23:15.799742Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "excluded_resources": [] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/7b930550-63b0-4002-8b74-4c827bd070d3/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c2058cfd-aa63-4efc-a8fe-a37d622e7cc3\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2026-03-17T10:23:15.934037Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"7b930550-63b0-4002-8b74-4c827bd070d3\",\"name\":\"My deployment rule\",\"options\":{\"excluded_resources\":[]},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2026-03-17T10:23:15.934037Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "env": "production", + "identifier": "my-gate-testgetadeploymentgatesevaluationresultreturnsokresponse1773742995", + "service": "my-service" + }, + "type": "deployment_gates_evaluation_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployments/gates/evaluation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fb1d7aef-236f-433d-ab3e-11648edb64c0\",\"type\":\"deployment_gates_evaluation_response\",\"attributes\":{\"evaluation_id\":\"fb1d7aef-236f-433d-ab3e-11648edb64c0\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployments/gates/evaluation/fb1d7aef-236f-433d-ab3e-11648edb64c0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fb1d7aef-236f-433d-ab3e-11648edb64c0\",\"type\":\"deployment_gates_evaluation_result_response\",\"attributes\":{\"dry_run\":false,\"evaluation_id\":\"fb1d7aef-236f-433d-ab3e-11648edb64c0\",\"evaluation_url\":\"https://frog.datadoghq.com/ci/deployment-gates/evaluations?deployment_gates_source=evaluation_result_url\\u0026end=1773743896343\\u0026index=cdgates\\u0026paused=true\\u0026query=level%3Agate+%40evaluation_id%3Afb1d7aef-236f-433d-ab3e-11648edb64c0\\u0026recent_gate_id=fb1d7aef-236f-433d-ab3e-11648edb64c0\\u0026start=1773742096343\",\"gate_id\":\"7b930550-63b0-4002-8b74-4c827bd070d3\",\"gate_status\":\"in_progress\",\"rules\":[{\"name\":\"My deployment rule\",\"status\":\"in_progress\",\"dry_run\":false}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/7b930550-63b0-4002-8b74-4c827bd070d3/rules/c2058cfd-aa63-4efc-a8fe-a37d622e7cc3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/7b930550-63b0-4002-8b74-4c827bd070d3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a deployment gates evaluation result returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-10-28T14:03:31.887Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/invalid-gate-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get deployment gate returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:16.714Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/not-a-valid-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get deployment gate returns \"Bad request (invalid).\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:16.827Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"Gate does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get deployment gate returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:51.545Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testgetdeploymentgatereturnsokresponse1765358631", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"da8c8c14-6bb2-4fc6-8dac-4027468738e4\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:51.581308Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testgetdeploymentgatereturnsokresponse1765358631\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:51.581308Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/da8c8c14-6bb2-4fc6-8dac-4027468738e4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"da8c8c14-6bb2-4fc6-8dac-4027468738e4\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:51.581308Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testgetdeploymentgatereturnsokresponse1765358631\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:51.581308Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/da8c8c14-6bb2-4fc6-8dac-4027468738e4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get deployment gate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:51.725Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testgetdeploymentrulereturnsbadrequestresponse1765358631", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5815296a-7bd8-4a27-86c1-9bb266c19078\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:51.766765Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testgetdeploymentrulereturnsbadrequestresponse1765358631\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:51.766765Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "excluded_resources": [] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/5815296a-7bd8-4a27-86c1-9bb266c19078/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"1b2fb3ea-a7aa-4d17-92ac-53e625de862e\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:51.829441Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"5815296a-7bd8-4a27-86c1-9bb266c19078\",\"name\":\"My deployment rule\",\"options\":{},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2025-12-10T09:23:51.829441Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/invalid-gate-id/rules/invalid-rule-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"gate_id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/5815296a-7bd8-4a27-86c1-9bb266c19078/rules/1b2fb3ea-a7aa-4d17-92ac-53e625de862e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/5815296a-7bd8-4a27-86c1-9bb266c19078", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get deployment rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:16.977Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/not-a-valid-id/rules/not-a-valid-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"gate_id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get deployment rule returns \"Bad request (invalid).\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:17.101Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/00000000-0000-0000-0000-000000000000/rules/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"Rule does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get deployment rule returns \"Deployment rule not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:51.998Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testgetdeploymentrulereturnsokresponse1765358631", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6177e46c-44dc-453d-8af8-8af86aa93c29\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.029575Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testgetdeploymentrulereturnsokresponse1765358631\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:52.029575Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "excluded_resources": [] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/6177e46c-44dc-453d-8af8-8af86aa93c29/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"38e32cd3-d245-49c1-85c5-b039ef868a18\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.079318Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"6177e46c-44dc-453d-8af8-8af86aa93c29\",\"name\":\"My deployment rule\",\"options\":{},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2025-12-10T09:23:52.079318Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/6177e46c-44dc-453d-8af8-8af86aa93c29/rules/38e32cd3-d245-49c1-85c5-b039ef868a18", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"38e32cd3-d245-49c1-85c5-b039ef868a18\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.079318Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"6177e46c-44dc-453d-8af8-8af86aa93c29\",\"name\":\"My deployment rule\",\"options\":{},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2025-12-10T09:23:52.079318Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/6177e46c-44dc-453d-8af8-8af86aa93c29/rules/38e32cd3-d245-49c1-85c5-b039ef868a18", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/6177e46c-44dc-453d-8af8-8af86aa93c29", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get deployment rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:17.224Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/not-a-valid-id/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"gate_id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get rules for a deployment gate returns \"Bad request.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T19:27:22.958Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testgetrulesforadeploymentgatereturnsokresponse1765394842", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"718d7fb4-bbc4-4b69-8a1b-98dda014726d\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T19:27:24.004043Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testgetrulesforadeploymentgatereturnsokresponse1765394842\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T19:27:24.004043Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/deployment_gates/718d7fb4-bbc4-4b69-8a1b-98dda014726d/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"718d7fb4-bbc4-4b69-8a1b-98dda014726d\",\"type\":\"list_deployment_rules\",\"attributes\":{\"rules\":[]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/718d7fb4-bbc4-4b69-8a1b-98dda014726d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get rules for a deployment gate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:17.356Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testtriggeradeploymentgatesevaluationreturnsacceptedresponse1773742997", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9d4fad94-29e3-452d-817d-5bc3f0ddbcb4\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2026-03-17T10:23:17.458814Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testtriggeradeploymentgatesevaluationreturnsacceptedresponse1773742997\",\"service\":\"my-service\",\"updated_at\":\"2026-03-17T10:23:17.458814Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "excluded_resources": [] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/9d4fad94-29e3-452d-817d-5bc3f0ddbcb4/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"891bdcc9-ae8f-4fbc-87ad-5dfb83fc447f\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2026-03-17T10:23:17.620863Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"9d4fad94-29e3-452d-817d-5bc3f0ddbcb4\",\"name\":\"My deployment rule\",\"options\":{\"excluded_resources\":[]},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2026-03-17T10:23:17.620863Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "env": "production", + "identifier": "my-gate-testtriggeradeploymentgatesevaluationreturnsacceptedresponse1773742997", + "service": "my-service" + }, + "type": "deployment_gates_evaluation_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployments/gates/evaluation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a3d2923c-ee20-490c-bd12-7139a805c949\",\"type\":\"deployment_gates_evaluation_response\",\"attributes\":{\"evaluation_id\":\"a3d2923c-ee20-490c-bd12-7139a805c949\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/9d4fad94-29e3-452d-817d-5bc3f0ddbcb4/rules/891bdcc9-ae8f-4fbc-87ad-5dfb83fc447f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/9d4fad94-29e3-452d-817d-5bc3f0ddbcb4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Trigger a deployment gates evaluation returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-20T09:57:05.683Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "env": "", + "service": "my-service" + }, + "type": "deployment_gates_evaluation_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployments/gates/evaluation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"required env field is missing\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Trigger a deployment gates evaluation returns \"Bad request.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:18.627Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "env": "staging", + "service": "non-existent-service-xyz" + }, + "type": "deployment_gates_evaluation_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployments/gates/evaluation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"no gate found for service non-existent-service-xyz, env staging, and identifier default\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Trigger a deployment gates evaluation returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-10-28T14:03:35.734Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": true + }, + "id": "invalid-gate-id", + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/deployment_gates/invalid-gate-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update deployment gate returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:18.738Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false + }, + "id": "12345678-1234-1234-1234-123456789012", + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/deployment_gates/not-a-valid-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update deployment gate returns \"Bad request (invalid).\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:18.854Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false + }, + "id": "12345678-1234-1234-1234-123456789012", + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/deployment_gates/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"Gate does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update deployment gate returns \"Deployment gate not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:52.262Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testupdatedeploymentgatereturnsokresponse1765358632", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c718bd5b-86d4-43a5-9aff-b4e7757074ba\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.299803Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testupdatedeploymentgatereturnsokresponse1765358632\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:52.299803Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false + }, + "id": "12345678-1234-1234-1234-123456789012", + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/deployment_gates/c718bd5b-86d4-43a5-9aff-b4e7757074ba", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c718bd5b-86d4-43a5-9aff-b4e7757074ba\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.299803Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testupdatedeploymentgatereturnsokresponse1765358632\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:52.363356Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/c718bd5b-86d4-43a5-9aff-b4e7757074ba", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update deployment gate returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:52.426Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testupdatedeploymentrulereturnsbadrequestresponse1765358632", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"edb4daf3-86d3-43d0-9a18-0390d53c4a52\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.462721Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testupdatedeploymentrulereturnsbadrequestresponse1765358632\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:52.462721Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "excluded_resources": [] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/edb4daf3-86d3-43d0-9a18-0390d53c4a52/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f66b2121-b794-4926-8d65-c1f2dcb7870b\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.5225Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"edb4daf3-86d3-43d0-9a18-0390d53c4a52\",\"name\":\"My deployment rule\",\"options\":{},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2025-12-10T09:23:52.5225Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "Updated deployment rule", + "options": { + "excluded_resources": [] + } + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/deployment_gates/invalid-gate-id/rules/invalid-rule-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"gate_id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/edb4daf3-86d3-43d0-9a18-0390d53c4a52/rules/f66b2121-b794-4926-8d65-c1f2dcb7870b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/edb4daf3-86d3-43d0-9a18-0390d53c4a52", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update deployment rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:18.972Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "Updated deployment rule", + "options": { + "duration": 3600, + "excluded_resources": [ + "resource1", + "resource2" + ] + } + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/deployment_gates/not-a-valid-id/rules/not-a-valid-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"gate_id\\\" Invalid id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update deployment rule returns \"Bad request (invalid).\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2026-03-17T10:23:19.084Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "Updated deployment rule", + "options": { + "duration": 3600, + "excluded_resources": [ + "resource1", + "resource2" + ] + } + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/deployment_gates/00000000-0000-0000-0000-000000000000/rules/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"Rule does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update deployment rule returns \"Deployment rule not found.\" response", + "version": "v2" + }, + { + "feature": "Deployment Gates", + "frozen_at": "2025-12-10T09:23:52.700Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "env": "production", + "identifier": "my-gate-testupdatedeploymentrulereturnsokresponse1765358632", + "service": "my-service" + }, + "type": "deployment_gate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3acb9ac2-abba-4579-8697-79493b221d41\",\"type\":\"deployment_gate\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.735765Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"env\":\"production\",\"identifier\":\"my-gate-testupdatedeploymentrulereturnsokresponse1765358632\",\"service\":\"my-service\",\"updated_at\":\"2025-12-10T09:23:52.735765Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "My deployment rule", + "options": { + "excluded_resources": [] + }, + "type": "faulty_deployment_detection" + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/deployment_gates/3acb9ac2-abba-4579-8697-79493b221d41/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ee04f24f-a980-4a28-a839-29911a632978\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.782282Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"3acb9ac2-abba-4579-8697-79493b221d41\",\"name\":\"My deployment rule\",\"options\":{},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2025-12-10T09:23:52.782282Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "dry_run": false, + "name": "Updated deployment rule", + "options": { + "excluded_resources": [] + } + }, + "type": "deployment_rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/deployment_gates/3acb9ac2-abba-4579-8697-79493b221d41/rules/ee04f24f-a980-4a28-a839-29911a632978", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ee04f24f-a980-4a28-a839-29911a632978\",\"type\":\"deployment_rule\",\"attributes\":{\"created_at\":\"2025-12-10T09:23:52.782282Z\",\"created_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"dry_run\":false,\"gate_id\":\"3acb9ac2-abba-4579-8697-79493b221d41\",\"name\":\"Updated deployment rule\",\"options\":{},\"type\":\"faulty_deployment_detection\",\"updated_at\":\"2025-12-10T09:23:52.843771Z\",\"updated_by\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/3acb9ac2-abba-4579-8697-79493b221d41/rules/ee04f24f-a980-4a28-a839-29911a632978", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/deployment_gates/3acb9ac2-abba-4579-8697-79493b221d41", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update deployment rule returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/domain-allowlist.json b/test-server-data/v2/domain-allowlist.json new file mode 100644 index 0000000000..3c3983b700 --- /dev/null +++ b/test-server-data/v2/domain-allowlist.json @@ -0,0 +1,79 @@ +{ + "feature": "Domain Allowlist", + "recordings": [ + { + "feature": "Domain Allowlist", + "frozen_at": "2024-10-23T18:16:16.668Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/domain_allowlist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"domain_allowlist\",\"attributes\":{\"enabled\":false,\"domains\":[\"@static-test-domain.test\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get Domain Allowlist returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Domain Allowlist", + "frozen_at": "2024-10-23T18:16:16.928Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "domains": [ + "@static-test-domain.test" + ], + "enabled": false + }, + "type": "domain_allowlist" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/domain_allowlist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"domain_allowlist\",\"attributes\":{\"enabled\":false,\"domains\":[\"@static-test-domain.test\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Sets Domain Allowlist returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/dora-metrics.json b/test-server-data/v2/dora-metrics.json new file mode 100644 index 0000000000..29fa944e09 --- /dev/null +++ b/test-server-data/v2/dora-metrics.json @@ -0,0 +1,453 @@ +{ + "feature": "DORA Metrics", + "recordings": [ + { + "feature": "DORA Metrics", + "frozen_at": "2025-05-22T10:44:58.608Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "limit": 10 + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dora/deployments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"\\\" expected one of \\\"dora_deployments_list_request\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a list of deployment events returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "frozen_at": "2025-05-22T10:44:58.897Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": "2025-03-23T00:00:00Z", + "limit": 1, + "to": "2025-03-24T00:00:00Z" + }, + "type": "dora_deployments_list_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dora/deployments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of deployment events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "frozen_at": "2023-08-31T14:26:14.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": "2023-08-31T00:00:00Z", + "to": "2023-09-01T00:00:00Z" + }, + "type": "dora_deployments_list_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dora/deployments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"abc-123\",\"type\":\"dora_deployment\",\"attributes\":{\"service\":\"shopist\",\"started_at\":\"2023-08-31T14:26:14Z\",\"finished_at\":\"2023-08-31T14:26:24Z\",\"env\":\"production\",\"team\":\"backend\",\"version\":\"v1.12.07\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of deployment events returns deployments with date-time timestamps", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "frozen_at": "2025-05-22T10:44:59.446Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "limit": 10 + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dora/failures", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"\\\" expected one of \\\"dora_failures_list_request\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a list of failure events returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "frozen_at": "2025-05-22T10:44:59.522Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": "2025-03-23T00:00:00Z", + "limit": 1, + "to": "2025-03-24T00:00:00Z" + }, + "type": "dora_failures_list_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dora/failures", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of failure events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "frozen_at": "2026-01-29T09:25:52.032Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "finished_at": 1769678752000000000, + "git": { + "commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", + "repository_url": "https://github.com/organization/example-repository" + }, + "id": "08a3dbc57bb781a5", + "service": "shopist", + "started_at": 1769675152000000000, + "version": "v1.12.07" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dora/deployment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"08a3dbc57bb781a5\",\"type\":\"dora_deployment\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "change_failure": true, + "remediation": { + "id": "eG42zNIkVjM", + "type": "rollback" + } + }, + "id": "08a3dbc57bb781a5", + "type": "dora_deployment_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/dora/deployments/08a3dbc57bb781a5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":null}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Patch a deployment event returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "frozen_at": "2026-01-29T09:25:52.758Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "finished_at": 1769678752000000000, + "git": { + "commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", + "repository_url": "https://github.com/organization/example-repository" + }, + "id": "bf100f167795c925", + "service": "shopist", + "started_at": 1769675152000000000, + "version": "v1.12.07" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dora/deployment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bf100f167795c925\",\"type\":\"dora_deployment\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "change_failure": true, + "remediation": { + "id": "eG42zNIkVjM", + "type": "wrong_type" + } + }, + "id": "bf100f167795c925", + "type": "dora_deployment_patch_request" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/dora/deployments/bf100f167795c925", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"type\\\" must be one of \\\"rollback rollforward\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Patch a deployment event returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "frozen_at": "2023-11-16T16:58:35.007Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "finished_at": 1693491984000000000, + "git": { + "commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", + "repository_url": "https://github.com/organization/example-repository" + }, + "service": "shopist", + "started_at": 1693491974000000000, + "version": "v1.12.07" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dora/deployment", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2a47b5f25b160b8a\",\"type\":\"dora_deployment\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Send a deployment event returns \"OK\" response", + "version": "v2" + }, + { + "feature": "DORA Metrics", + "frozen_at": "2024-02-13T16:54:07.556Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "finished_at": 1707842944600000000, + "git": { + "commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", + "repository_url": "https://github.com/organization/example-repository" + }, + "name": "Webserver is down failing all requests", + "services": [ + "shopist" + ], + "severity": "High", + "started_at": 1707842944500000000, + "team": "backend", + "version": "v1.12.07" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/dora/incident", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2775a2d3-6c28-4934-ae60-0ef9ce3720ee\",\"type\":\"dora_failure\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Send a failure event returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/downtimes.json b/test-server-data/v2/downtimes.json new file mode 100644 index 0000000000..72186a44c0 --- /dev/null +++ b/test-server-data/v2/downtimes.json @@ -0,0 +1,804 @@ +{ + "feature": "Downtimes", + "recordings": [ + { + "feature": "Downtimes", + "frozen_at": "2023-05-25T20:24:18.346Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/downtime/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Downtime 00000000-0000-1234-0000-000000000000 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Cancel a downtime returns \"Downtime not found\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-06-02T20:53:22.584Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "message": "test message", + "monitor_identifier": { + "monitor_tags": [ + "cat:hat" + ] + }, + "schedule": { + "start": null + }, + "scope": "test:testcanceladowntimereturnsokresponse1685739202" + }, + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"downtime\",\"attributes\":{\"mute_first_recovery_notification\":false,\"status\":\"active\",\"created\":\"2023-06-02T20:53:23.252025+00:00\",\"notify_end_states\":[\"alert\",\"no data\",\"warn\"],\"canceled\":null,\"display_timezone\":\"UTC\",\"modified\":\"2023-06-02T20:53:23.252025+00:00\",\"monitor_identifier\":{\"monitor_tags\":[\"cat:hat\"]},\"scope\":\"test:testcanceladowntimereturnsokresponse1685739202\",\"schedule\":{\"start\":\"2023-06-02T20:53:23.238403+00:00\",\"end\":null},\"message\":\"test message\",\"notify_end_types\":[\"expired\"]},\"id\":\"83718756-0187-11ee-8c18-da7ad0900002\",\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"monitor\":{\"data\":null}}},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2020-06-15T12:33:12.884459+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/downtime/83718756-0187-11ee-8c18-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/downtime/83718756-0187-11ee-8c18-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Cancel a downtime returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-25T20:24:19.765Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/downtime/INVALID_UUID_LENGTH", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid URL param: downtime_id must be an uuid\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a downtime returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-25T20:24:20.021Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/downtime/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Downtime not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a downtime returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-06-02T20:53:24.573Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "message": "test message", + "monitor_identifier": { + "monitor_tags": [ + "cat:hat" + ] + }, + "schedule": { + "start": null + }, + "scope": "test:testgetadowntimereturnsokresponse1685739204" + }, + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"downtime\",\"attributes\":{\"display_timezone\":\"UTC\",\"scope\":\"test:testgetadowntimereturnsokresponse1685739204\",\"notify_end_states\":[\"warn\",\"alert\",\"no data\"],\"message\":\"test message\",\"created\":\"2023-06-02T20:53:24.806100+00:00\",\"status\":\"active\",\"modified\":\"2023-06-02T20:53:24.806100+00:00\",\"canceled\":null,\"monitor_identifier\":{\"monitor_tags\":[\"cat:hat\"]},\"schedule\":{\"end\":null,\"start\":\"2023-06-02T20:53:24.791647+00:00\"},\"notify_end_types\":[\"expired\"],\"mute_first_recovery_notification\":false},\"relationships\":{\"monitor\":{\"data\":null},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"845e9a1e-0187-11ee-817a-da7ad0900002\"},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2020-06-15T12:33:12.884459+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/downtime/845e9a1e-0187-11ee-817a-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"downtime\",\"attributes\":{\"notify_end_types\":[\"expired\"],\"modified\":\"2023-06-02T20:53:24.806100+00:00\",\"monitor_identifier\":{\"monitor_tags\":[\"cat:hat\"]},\"scope\":\"test:testgetadowntimereturnsokresponse1685739204\",\"schedule\":{\"end\":null,\"start\":\"2023-06-02T20:53:24.791647+00:00\"},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2023-06-02T20:53:24.806100+00:00\",\"canceled\":null,\"mute_first_recovery_notification\":false,\"message\":\"test message\",\"display_timezone\":\"UTC\",\"status\":\"active\"},\"id\":\"845e9a1e-0187-11ee-817a-da7ad0900002\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/downtime/845e9a1e-0187-11ee-817a-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a downtime returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-06-28T17:25:38.832Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/35534610/downtime_matches", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"downtime_match\",\"id\":\"aeefc6a8-15d8-11ee-a8ef-da7ad0900002\",\"attributes\":{\"groups\":[\"*\"],\"scope\":\"*\",\"start\":\"2023-06-28T17:23:57.324000+00:00\",\"end\":null}}],\"meta\":{\"page\":{\"total_filtered_count\":1}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get active downtimes for a monitor returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-06-09T18:54:40.002Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/0/downtime_matches", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor with id 0 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get all downtimes for a monitor returns \"Monitor Not Found error\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-25T20:24:20.897Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-28T14:17:52.420429+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-28T14:17:52.420429+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635430672\",\"schedule\":{\"end\":null,\"start\":\"2021-10-28T14:17:52.399817+00:00\"},\"status\":\"active\"},\"id\":\"1d9e7eee-b23a-11ed-a0dc-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-28T14:33:48.622821+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-28T14:33:48.622821+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635431628\",\"schedule\":{\"end\":null,\"start\":\"2021-10-28T14:33:48.620257+00:00\"},\"status\":\"active\"},\"id\":\"1d9ec3cc-b23a-11ed-a0ea-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-28T14:48:50.581496+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-28T14:48:50.581496+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635432530\",\"schedule\":{\"end\":null,\"start\":\"2021-10-28T14:48:50.575549+00:00\"},\"status\":\"active\"},\"id\":\"1da042ec-b23a-11ed-a16b-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-28T14:56:22.879389+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-28T14:56:22.879389+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635432982\",\"schedule\":{\"end\":null,\"start\":\"2021-10-28T14:56:22.875090+00:00\"},\"status\":\"active\"},\"id\":\"1da0495e-b23a-11ed-a16c-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-28T15:16:54.480401+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-28T15:16:54.480401+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635434214\",\"schedule\":{\"end\":null,\"start\":\"2021-10-28T15:16:54.477880+00:00\"},\"status\":\"active\"},\"id\":\"1da06d30-b23a-11ed-a178-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-28T16:08:31.571892+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-28T16:08:31.571892+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635437311\",\"schedule\":{\"end\":null,\"start\":\"2021-10-28T16:08:31.562562+00:00\"},\"status\":\"active\"},\"id\":\"1da0eabc-b23a-11ed-a193-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-29T03:11:14.667351+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-29T03:11:14.667351+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635477074\",\"schedule\":{\"end\":null,\"start\":\"2021-10-29T03:11:14.662838+00:00\"},\"status\":\"active\"},\"id\":\"1da8e726-b23a-11ed-a3ab-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-29T08:07:08.893065+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-29T08:07:08.893065+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635494828\",\"schedule\":{\"end\":null,\"start\":\"2021-10-29T08:07:08.868526+00:00\"},\"status\":\"active\"},\"id\":\"1db7e4f6-b23a-11ed-a86e-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-29T08:41:03.157018+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-29T08:41:03.157018+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635496863\",\"schedule\":{\"end\":null,\"start\":\"2021-10-29T08:41:03.154098+00:00\"},\"status\":\"active\"},\"id\":\"1db8d8ac-b23a-11ed-a879-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-29T17:21:23.756952+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-29T17:21:23.756952+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635528083\",\"schedule\":{\"end\":null,\"start\":\"2021-10-29T17:21:23.754124+00:00\"},\"status\":\"active\"},\"id\":\"1dc7e13a-b23a-11ed-ad75-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-30T03:11:07.935370+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-30T03:11:07.935370+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635563467\",\"schedule\":{\"end\":null,\"start\":\"2021-10-30T03:11:07.931742+00:00\"},\"status\":\"active\"},\"id\":\"1dcb33f8-b23a-11ed-ae77-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-30T16:06:10.276649+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-30T16:06:10.276649+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635609970\",\"schedule\":{\"end\":null,\"start\":\"2021-10-30T16:06:10.273151+00:00\"},\"status\":\"active\"},\"id\":\"1dcd0b9c-b23a-11ed-af06-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-10-31T03:11:11.316510+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-10-31T03:11:11.316510+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635649871\",\"schedule\":{\"end\":null,\"start\":\"2021-10-31T03:11:11.312216+00:00\"},\"status\":\"active\"},\"id\":\"1dce8d64-b23a-11ed-af88-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-01T03:08:39.804462+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-01T03:08:39.804462+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635736119\",\"schedule\":{\"end\":null,\"start\":\"2021-11-01T03:08:39.802027+00:00\"},\"status\":\"active\"},\"id\":\"1dd35b50-b23a-11ed-b0e9-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T03:10:15.532889+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T03:10:15.532889+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635822615\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T03:10:15.528871+00:00\"},\"status\":\"active\"},\"id\":\"1de58d3e-b23a-11ed-b608-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T09:20:28.614860+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T09:20:28.614860+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635844828\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T09:20:28.611532+00:00\"},\"status\":\"active\"},\"id\":\"1de8bb30-b23a-11ed-b6d9-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T09:34:53.765122+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T09:34:53.765122+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635845693\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T09:34:53.761176+00:00\"},\"status\":\"active\"},\"id\":\"1de8f14a-b23a-11ed-b6e7-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T09:48:14.313975+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T09:48:14.313975+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635846494\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T09:48:14.311153+00:00\"},\"status\":\"active\"},\"id\":\"1de919c2-b23a-11ed-b6f4-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T09:55:05.587914+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T09:55:05.587914+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635846905\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T09:55:05.584723+00:00\"},\"status\":\"active\"},\"id\":\"1de92250-b23a-11ed-b6f8-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T10:45:12.687669+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T10:45:12.687669+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635849912\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T10:45:12.683837+00:00\"},\"status\":\"active\"},\"id\":\"1de9870e-b23a-11ed-b70e-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T10:57:27.536018+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T10:57:27.536018+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635850647\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T10:57:27.532780+00:00\"},\"status\":\"active\"},\"id\":\"1de99172-b23a-11ed-b713-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T11:07:15.081382+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T11:07:15.081382+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635851234\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T11:07:15.078037+00:00\"},\"status\":\"active\"},\"id\":\"1de9e398-b23a-11ed-b72e-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T11:15:16.847749+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T11:15:16.847749+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635851716\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T11:15:16.845135+00:00\"},\"status\":\"active\"},\"id\":\"1de9e5be-b23a-11ed-b72f-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T14:12:24.714186+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T14:12:24.714186+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635862344\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T14:12:24.710625+00:00\"},\"status\":\"active\"},\"id\":\"1deb279e-b23a-11ed-b784-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T14:46:14.802545+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T14:46:14.802545+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635864374\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T14:46:14.800340+00:00\"},\"status\":\"active\"},\"id\":\"1deb73a2-b23a-11ed-b797-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T15:16:48.477972+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T15:16:48.477972+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635866208\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T15:16:48.469517+00:00\"},\"status\":\"active\"},\"id\":\"1debd126-b23a-11ed-b7b0-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-02T18:28:35.537425+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-02T18:28:35.537425+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635877715\",\"schedule\":{\"end\":null,\"start\":\"2021-11-02T18:28:35.532968+00:00\"},\"status\":\"active\"},\"id\":\"1deefd9c-b23a-11ed-b8b8-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-03T03:08:05.553644+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-03T03:08:05.553644+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635908885\",\"schedule\":{\"end\":null,\"start\":\"2021-11-03T03:08:05.547972+00:00\"},\"status\":\"active\"},\"id\":\"1df2a096-b23a-11ed-b9b4-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-03T08:58:07.316209+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-03T08:58:07.316209+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635929887\",\"schedule\":{\"end\":null,\"start\":\"2021-11-03T08:58:07.312866+00:00\"},\"status\":\"active\"},\"id\":\"1df51538-b23a-11ed-ba64-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"created\":\"2021-11-03T10:28:12.844618+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"message\":null,\"canceled\":null,\"modified\":\"2021-11-03T10:28:12.844618+00:00\",\"scope\":\"host:java-hostsMuteErrorsTest-local-1635935292\",\"schedule\":{\"end\":null,\"start\":\"2021-11-03T10:28:12.841116+00:00\"},\"status\":\"active\"},\"id\":\"1df5e13e-b23a-11ed-baa2-da7ad0900002\"}],\"meta\":{\"page\":{\"total_filtered_count\":1049}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all downtimes returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-09-05T12:32:39.085Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/downtime", + "query": [ + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"downtime\",\"attributes\":{\"mute_first_recovery_notification\":false,\"canceled\":null,\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"schedule\":{\"start\":\"2023-05-22T03:06:54.072998+00:00\",\"end\":null},\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"no data\",\"warn\",\"alert\"],\"status\":\"active\",\"scope\":\"host:\\\"java-hostsMuteErrorsTest-local-1684724813\\\"\",\"created\":\"2023-05-22T03:06:54.079122+00:00\",\"display_timezone\":\"UTC\",\"message\":null,\"modified\":\"2023-05-22T03:06:54.079122+00:00\"},\"id\":\"b4613732-f84d-11ed-a766-da7ad0900002\"},{\"type\":\"downtime\",\"attributes\":{\"mute_first_recovery_notification\":false,\"canceled\":null,\"monitor_identifier\":{\"monitor_tags\":[\"*\"]},\"schedule\":{\"start\":\"2023-05-23T03:21:54.687109+00:00\",\"end\":null},\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"no data\",\"warn\",\"alert\"],\"status\":\"active\",\"scope\":\"host:\\\"java-hostsMuteErrorsTest-local-1684812114\\\"\",\"created\":\"2023-05-23T03:21:54.690618+00:00\",\"display_timezone\":\"UTC\",\"message\":null,\"modified\":\"2023-05-23T03:21:54.690618+00:00\"},\"id\":\"f799770a-f918-11ed-8b48-da7ad0900002\"}],\"meta\":{\"page\":{\"total_filtered_count\":3}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/downtime", + "query": [ + [ + "page[limit]", + "2" + ], + [ + "page[offset]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"downtime\",\"attributes\":{\"modified\":\"2023-05-24T03:29:35.343207+00:00\",\"created\":\"2023-05-24T03:29:35.343207+00:00\",\"canceled\":null,\"status\":\"active\",\"scope\":\"host:\\\"java-hostsMuteErrorsTest-local-1684898975\\\"\",\"display_timezone\":\"UTC\",\"schedule\":{\"end\":null,\"start\":\"2023-05-24T03:29:35.340446+00:00\"},\"message\":null,\"mute_first_recovery_notification\":false,\"notify_end_types\":[\"expired\"],\"notify_end_states\":[\"warn\",\"no data\",\"alert\"],\"monitor_identifier\":{\"monitor_tags\":[\"*\"]}},\"id\":\"34953930-f9e3-11ed-85d4-da7ad0900002\"}],\"meta\":{\"page\":{\"total_filtered_count\":3}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all downtimes returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-06-02T20:53:25.827Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "monitor_identifier": { + "monitor_tags": [ + "cat:hat" + ] + }, + "schedule": { + "start": null + }, + "scope": "BAD_SCOPE_MISSING_KEY_VALUE_FORMAT" + }, + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"All values must have a key\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Schedule a downtime returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-06-02T20:53:26.050Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "message": "dark forest", + "monitor_identifier": { + "monitor_tags": [ + "cat:hat" + ] + }, + "schedule": { + "start": null + }, + "scope": "test:testscheduleadowntimereturnsokresponse1685739206" + }, + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"downtime\",\"attributes\":{\"display_timezone\":\"UTC\",\"scope\":\"test:testscheduleadowntimereturnsokresponse1685739206\",\"notify_end_states\":[\"warn\",\"alert\",\"no data\"],\"message\":\"dark forest\",\"created\":\"2023-06-02T20:53:26.300497+00:00\",\"status\":\"active\",\"modified\":\"2023-06-02T20:53:26.300497+00:00\",\"canceled\":null,\"monitor_identifier\":{\"monitor_tags\":[\"cat:hat\"]},\"schedule\":{\"end\":null,\"start\":\"2023-06-02T20:53:26.286133+00:00\"},\"notify_end_types\":[\"expired\"],\"mute_first_recovery_notification\":false},\"relationships\":{\"monitor\":{\"data\":null},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"85428b34-0187-11ee-bb05-da7ad0900002\"},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2020-06-15T12:33:12.884459+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/downtime/85428b34-0187-11ee-bb05-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Schedule a downtime returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-06-02T20:53:26.666Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "message": "test message", + "monitor_identifier": { + "monitor_tags": [ + "cat:hat" + ] + }, + "schedule": { + "start": null + }, + "scope": "test:testupdateadowntimereturnsbadrequestresponse1685739206" + }, + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"downtime\",\"attributes\":{\"schedule\":{\"start\":\"2023-06-02T20:53:26.854449+00:00\",\"end\":null},\"canceled\":null,\"modified\":\"2023-06-02T20:53:26.869296+00:00\",\"created\":\"2023-06-02T20:53:26.869296+00:00\",\"status\":\"active\",\"monitor_identifier\":{\"monitor_tags\":[\"cat:hat\"]},\"scope\":\"test:testupdateadowntimereturnsbadrequestresponse1685739206\",\"message\":\"test message\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_states\":[\"no data\",\"warn\",\"alert\"],\"notify_end_types\":[\"expired\"]},\"relationships\":{\"monitor\":{\"data\":null},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"85997dfe-0187-11ee-a1c1-da7ad0900002\"},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2020-06-15T12:33:12.884459+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "invalid_field": "sophon" + }, + "id": "85997dfe-0187-11ee-a1c1-da7ad0900002", + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/downtime/85997dfe-0187-11ee-a1c1-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Additional properties are not allowed ('invalid_field' was unexpected)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/downtime/85997dfe-0187-11ee-a1c1-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a downtime returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-05-25T20:24:22.729Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "message": "test msg" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/downtime/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Downtime not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a downtime returns \"Downtime not found\" response", + "version": "v2" + }, + { + "feature": "Downtimes", + "frozen_at": "2023-06-02T20:53:27.909Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "message": "test message", + "monitor_identifier": { + "monitor_tags": [ + "cat:hat" + ] + }, + "schedule": { + "start": null + }, + "scope": "test:testupdateadowntimereturnsokresponse1685739207" + }, + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/downtime", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"downtime\",\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"monitor\":{\"data\":null}},\"id\":\"865c7f20-0187-11ee-ac0a-da7ad0900002\",\"attributes\":{\"monitor_identifier\":{\"monitor_tags\":[\"cat:hat\"]},\"status\":\"active\",\"message\":\"test message\",\"created\":\"2023-06-02T20:53:28.147387+00:00\",\"schedule\":{\"end\":null,\"start\":\"2023-06-02T20:53:28.134493+00:00\"},\"modified\":\"2023-06-02T20:53:28.147387+00:00\",\"display_timezone\":\"UTC\",\"mute_first_recovery_notification\":false,\"notify_end_states\":[\"no data\",\"warn\",\"alert\"],\"scope\":\"test:testupdateadowntimereturnsokresponse1685739207\",\"notify_end_types\":[\"expired\"],\"canceled\":null}},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2020-06-15T12:33:12.884459+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "message": "light speed" + }, + "id": "865c7f20-0187-11ee-ac0a-da7ad0900002", + "type": "downtime" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/downtime/865c7f20-0187-11ee-ac0a-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"downtime\",\"attributes\":{\"display_timezone\":\"UTC\",\"status\":\"active\",\"message\":\"light speed\",\"created\":\"2023-06-02T20:53:28.147387+00:00\",\"canceled\":null,\"modified\":\"2023-06-02T20:53:28.386158+00:00\",\"notify_end_types\":[\"expired\"],\"mute_first_recovery_notification\":false,\"notify_end_states\":[\"no data\",\"alert\",\"warn\"],\"monitor_identifier\":{\"monitor_tags\":[\"cat:hat\"]},\"schedule\":{\"end\":null,\"start\":\"2023-06-02T20:53:28.134493+00:00\"},\"scope\":\"test:testupdateadowntimereturnsokresponse1685739207\"},\"id\":\"865c7f20-0187-11ee-ac0a-da7ad0900002\",\"relationships\":{\"monitor\":{\"data\":null},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2020-06-15T12:33:12.884459+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/downtime/865c7f20-0187-11ee-ac0a-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a downtime returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/error-tracking.json b/test-server-data/v2/error-tracking.json new file mode 100644 index 0000000000..454afa0475 --- /dev/null +++ b/test-server-data/v2/error-tracking.json @@ -0,0 +1,698 @@ +{ + "feature": "Error Tracking", + "recordings": [ + { + "feature": "Error Tracking", + "frozen_at": "2025-08-29T12:19:16.262Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/error-tracking/issues/invalid-issue-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"issue id is not an uuid\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get the details of an error tracking issue returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-27T15:33:33.272Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1755012813000, + "query": "service:synthetics-browser", + "to": 1756308813000, + "track": "rum" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/error-tracking/issues/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":1,\"total_count\":1},\"relationships\":{\"issue\":{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/error-tracking/issues/67d80aa3-36ff-44b9-a694-c501a7591737", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"issue not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get the details of an error tracking issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-27T15:33:33.577Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1755012813000, + "query": "service:synthetics-browser", + "to": 1756308813000, + "track": "rum" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/error-tracking/issues/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":1,\"total_count\":1},\"relationships\":{\"issue\":{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/error-tracking/issues/5f8ebd5c-6dd9-11f0-8a28-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\",\"attributes\":{\"error_message\":\"HTTP error\",\"error_type\":\"Error\",\"file_path\":\"\",\"first_seen\":1753944082256,\"first_seen_version\":\"\",\"function_name\":\"\",\"is_crash\":false,\"languages\":[\"JAVASCRIPT\"],\"last_seen\":1755686259367,\"last_seen_version\":\"\",\"platform\":\"BROWSER\",\"service\":\"synthetics-browser\",\"state\":\"RESOLVED\"},\"relationships\":{\"case\":{\"data\":{\"id\":\"f1b32a47-621d-4c57-9642-045aeb83891e\",\"type\":\"case\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the details of an error tracking issue returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-10-17T14:43:40.022Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1759416220000, + "query": "service:synthetics-browser", + "to": 1760712220000, + "track": "rum" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/error-tracking/issues/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"d3ab59c6-84ee-11f0-87bb-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":4316,\"total_count\":8640},\"relationships\":{\"issue\":{\"data\":{\"id\":\"d3ab59c6-84ee-11f0-87bb-da7ad0900002\",\"type\":\"issue\"}}}},{\"id\":\"a5bb2896-a4d0-11f0-bd76-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":280,\"total_count\":272},\"relationships\":{\"issue\":{\"data\":{\"id\":\"a5bb2896-a4d0-11f0-bd76-da7ad0900002\",\"type\":\"issue\"}}}},{\"id\":\"e2a89d14-6f07-11f0-8a88-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":1,\"total_count\":4},\"relationships\":{\"issue\":{\"data\":{\"id\":\"e2a89d14-6f07-11f0-8a88-da7ad0900002\",\"type\":\"issue\"}}}},{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":1,\"total_count\":1},\"relationships\":{\"issue\":{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\"}}}},{\"id\":\"e2a89134-6f07-11f0-8d36-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":1,\"total_count\":1},\"relationships\":{\"issue\":{\"data\":{\"id\":\"e2a89134-6f07-11f0-8d36-da7ad0900002\",\"type\":\"issue\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/error-tracking/issues/d3ab59c6-84ee-11f0-87bb-da7ad0900002/assignee", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Remove the assignee of an issue returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-10-17T14:43:41.755Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/error-tracking/issues/67d80aa3-36ff-44b9-a694-c501a7591737/assignee", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"issue not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Remove the assignee of an issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-29T12:59:23.045Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1671612804000, + "query": "service:orders-* AND @language:go", + "to": 1671620004000, + "track": "invalid-track" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/error-tracking/issues/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"invalid json value for TrackType: invalid-track\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Search error tracking issues returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-27T15:33:33.997Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1671612804000, + "query": "service:orders-* AND @language:go", + "to": 1671620004000, + "track": "trace" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/error-tracking/issues/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search error tracking issues returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-29T12:59:23.349Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1755176363000, + "query": "service:synthetics-browser", + "to": 1756472363000, + "track": "rum" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/error-tracking/issues/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":1,\"total_count\":1},\"relationships\":{\"issue\":{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "invalid-id", + "type": "assignee" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/error-tracking/issues/5f8ebd5c-6dd9-11f0-8a28-da7ad0900002/assignee", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"invalid UUID length: 10\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update the assignee of an issue returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-27T15:33:34.622Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "87cb11a0-278c-440a-99fe-701223c80296", + "type": "assignee" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/error-tracking/issues/67d80aa3-36ff-44b9-a694-c501a7591737/assignee", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"issue not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update the assignee of an issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-27T15:33:34.689Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1755012814000, + "query": "service:synthetics-browser", + "to": 1756308814000, + "track": "rum" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/error-tracking/issues/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":1,\"total_count\":1},\"relationships\":{\"issue\":{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "87cb11a0-278c-440a-99fe-701223c80296", + "type": "assignee" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/error-tracking/issues/5f8ebd5c-6dd9-11f0-8a28-da7ad0900002/assignee", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\",\"attributes\":{\"error_message\":\"HTTP error\",\"error_type\":\"Error\",\"file_path\":\"\",\"first_seen\":1753944082256,\"first_seen_version\":\"\",\"function_name\":\"\",\"is_crash\":false,\"languages\":[\"JAVASCRIPT\"],\"last_seen\":1755686259367,\"last_seen_version\":\"\",\"platform\":\"BROWSER\",\"service\":\"synthetics-browser\",\"state\":\"RESOLVED\"},\"relationships\":{\"assignee\":{\"data\":{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\"}},\"case\":{\"data\":{\"id\":\"f1b32a47-621d-4c57-9642-045aeb83891e\",\"type\":\"case\"}}}},\"included\":[{\"id\":\"f1b32a47-621d-4c57-9642-045aeb83891e\",\"type\":\"case\",\"attributes\":{\"closed_at\":\"2025-08-21T17:21:13.882831Z\",\"created_at\":\"2025-08-21T17:20:22.807979Z\",\"creation_source\":\"ERROR_TRACKING\",\"description\":\"\",\"insights\":[{\"type\":\"ERROR_TRACKING\",\"ref\":\"/error-tracking?issueId=5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"resource_id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\"}],\"key\":\"ET-1\",\"modified_at\":\"2025-08-21T17:21:13.882831Z\",\"priority\":\"NOT_DEFINED\",\"status\":\"CLOSED\",\"title\":\"Error: HTTP error\",\"type\":\"ERROR_TRACKING_ISSUE\"},\"relationships\":{\"assignee\":{\"data\":{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\"}},\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"384521ba-dc5f-481f-942d-15bd48428029\",\"type\":\"project\"}}}},{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\",\"attributes\":{\"email\":\"\",\"handle\":\"\",\"name\":\"\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update the assignee of an issue returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-27T15:33:35.029Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1755012815000, + "query": "service:synthetics-browser", + "to": 1756308815000, + "track": "rum" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/error-tracking/issues/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":1,\"total_count\":1},\"relationships\":{\"issue\":{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "state": "invalid-state" + }, + "id": "5f8ebd5c-6dd9-11f0-8a28-da7ad0900002", + "type": "error_tracking_issue" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/error-tracking/issues/5f8ebd5c-6dd9-11f0-8a28-da7ad0900002/state", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"invalid json value for IssueState: \\\"invalid-state\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update the state of an issue returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-27T15:33:35.373Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "state": "resolved" + }, + "id": "67d80aa3-36ff-44b9-a694-c501a7591737", + "type": "error_tracking_issue" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/error-tracking/issues/67d80aa3-36ff-44b9-a694-c501a7591737/state", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"issue not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update the state of an issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Error Tracking", + "frozen_at": "2025-08-27T15:33:35.431Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from": 1755012815000, + "query": "service:synthetics-browser", + "to": 1756308815000, + "track": "rum" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/error-tracking/issues/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"error_tracking_search_result\",\"attributes\":{\"impacted_sessions\":1,\"total_count\":1},\"relationships\":{\"issue\":{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "state": "RESOLVED" + }, + "id": "5f8ebd5c-6dd9-11f0-8a28-da7ad0900002", + "type": "error_tracking_issue" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/error-tracking/issues/5f8ebd5c-6dd9-11f0-8a28-da7ad0900002/state", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"type\":\"issue\",\"attributes\":{\"error_message\":\"HTTP error\",\"error_type\":\"Error\",\"file_path\":\"\",\"first_seen\":1753944082256,\"first_seen_version\":\"\",\"function_name\":\"\",\"is_crash\":false,\"languages\":[\"JAVASCRIPT\"],\"last_seen\":1755686259367,\"last_seen_version\":\"\",\"platform\":\"BROWSER\",\"service\":\"synthetics-browser\",\"state\":\"RESOLVED\"},\"relationships\":{\"assignee\":{\"data\":{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\"}},\"case\":{\"data\":{\"id\":\"f1b32a47-621d-4c57-9642-045aeb83891e\",\"type\":\"case\"}}}},\"included\":[{\"id\":\"f1b32a47-621d-4c57-9642-045aeb83891e\",\"type\":\"case\",\"attributes\":{\"closed_at\":\"2025-08-21T17:21:13.882831Z\",\"created_at\":\"2025-08-21T17:20:22.807979Z\",\"creation_source\":\"ERROR_TRACKING\",\"description\":\"\",\"insights\":[{\"type\":\"ERROR_TRACKING\",\"ref\":\"/error-tracking?issueId=5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\",\"resource_id\":\"5f8ebd5c-6dd9-11f0-8a28-da7ad0900002\"}],\"key\":\"ET-1\",\"modified_at\":\"2025-08-21T17:21:13.882831Z\",\"priority\":\"NOT_DEFINED\",\"status\":\"CLOSED\",\"title\":\"Error: HTTP error\",\"type\":\"ERROR_TRACKING_ISSUE\"},\"relationships\":{\"assignee\":{\"data\":{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\"}},\"created_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"modified_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"user\"}},\"project\":{\"data\":{\"id\":\"384521ba-dc5f-481f-942d-15bd48428029\",\"type\":\"project\"}}}},{\"id\":\"87cb11a0-278c-440a-99fe-701223c80296\",\"type\":\"user\",\"attributes\":{\"email\":\"\",\"handle\":\"\",\"name\":\"\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update the state of an issue returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/events.json b/test-server-data/v2/events.json new file mode 100644 index 0000000000..d645bceeb3 --- /dev/null +++ b/test-server-data/v2/events.json @@ -0,0 +1,581 @@ +{ + "feature": "Events", + "recordings": [ + { + "feature": "Events", + "frozen_at": "2022-06-20T13:43:50.841Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/events", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Events", + "frozen_at": "2022-06-20T17:08:51.227Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/events", + "query": [ + [ + "filter[from]", + "now-15m" + ], + [ + "filter[to]", + "now" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWUdDRldoUV9BZHZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdWMmhSUVVGQ1VIQk5UMjQxVURKZllVZzFTUUFBQUNRQUFBQUFNREU0TVRneU1UVXROekF5TUMwMFpXTTJMV0l3WVdJdFpEVTFZbU0zTlRZMlpUUTMifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"status\":\"info\",\"event_object\":\"adip\",\"service\":\"undefined\",\"title\":\"[Synthetics] EVMGT pipeline test\",\"timestamp\":1655744852000,\"hostname\":\"do ani\",\"priority\":\"normal\",\"aggregation_key\":\"adip\",\"evt\":{\"source_id\":100,\"type\":\"api\",\"id\":\"6567977849972254562\"}},\"message\":\"Synthetics test check that this event has the right content in the right format at the end of the event-pipeline output\",\"tags\":[\"environment:staging\",\"source:my_apps\",\"source:my_apps\",\"environment:staging\"],\"timestamp\":\"2022-06-20T17:07:32Z\"},\"type\":\"event\",\"id\":\"AgAAAYGCFXAgIVFvPgAAAAAAAAAYAAAAAEFZR0NGWEFnQUFBeFhHdU9OeF91OEZjSwAAACQAAAAAMDE4MTgyMTUtNzAyMC00ZWM2LWIwYWItZDU1YmM3NTY2ZTQ3\"},{\"attributes\":{\"attributes\":{\"status\":\"info\",\"event_object\":\"adip\",\"service\":\"undefined\",\"title\":\"[Synthetics] EVMGT pipeline test\",\"timestamp\":1655744850000,\"hostname\":\"do ani\",\"priority\":\"normal\",\"aggregation_key\":\"adip\",\"evt\":{\"source_id\":100,\"type\":\"api\",\"id\":\"6567977820721297650\"}},\"message\":\"Synthetics test check that this event has the right content in the right format at the end of the event-pipeline output\",\"tags\":[\"environment:staging\",\"source:my_apps\",\"source:my_apps\",\"environment:staging\"],\"timestamp\":\"2022-06-20T17:07:30Z\"},\"type\":\"event\",\"id\":\"AgAAAYGCFWhQ_AdvPgAAAAAAAAAYAAAAAEFZR0NGV2hRQUFCUHBNT241UDJfYUg1SQAAACQAAAAAMDE4MTgyMTUtNzAyMC00ZWM2LWIwYWItZDU1YmM3NTY2ZTQ3\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/events?filter%5Bfrom%5D=now-15m&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWUdDRldoUV9BZHZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdWMmhSUVVGQ1VIQk5UMjQxVURKZllVZzFTUUFBQUNRQUFBQUFNREU0TVRneU1UVXROekF5TUMwMFpXTTJMV0l3WVdJdFpEVTFZbU0zTlRZMlpUUTMifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/events", + "query": [ + [ + "filter[from]", + "now-15m" + ], + [ + "filter[to]", + "now" + ], + [ + "page[cursor]", + "eyJhZnRlciI6IkFnQUFBWUdDRldoUV9BZHZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdWMmhSUVVGQ1VIQk5UMjQxVURKZllVZzFTUUFBQUNRQUFBQUFNREU0TVRneU1UVXROekF5TUMwMFpXTTJMV0l3WVdJdFpEVTFZbU0zTlRZMlpUUTMifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWUdDRlRXSTJoUnZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdWRmRKUVVGRVVqbERWbEZ5ZEdoZlMxOXJRZ0FBQUNRQUFBQUFNREU0TVRneU1UVXRNelU0T0MwME1EZGhMV0V5TURndE1qUmxZekE1TmpVMVptTmkifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"status\":\"info\",\"event_object\":\"adip\",\"service\":\"undefined\",\"title\":\"[Synthetics] EVMGT pipeline test\",\"timestamp\":1655744837000,\"hostname\":\"do ani\",\"priority\":\"normal\",\"aggregation_key\":\"adip\",\"evt\":{\"source_id\":100,\"type\":\"api\",\"id\":\"6567977596797486753\"}},\"message\":\"Synthetics test check that this event has the right content in the right format at the end of the event-pipeline output\",\"tags\":[\"environment:staging\",\"source:my_apps\",\"source:my_apps\",\"environment:staging\"],\"timestamp\":\"2022-06-20T17:07:17Z\"},\"type\":\"event\",\"id\":\"AgAAAYGCFTWI2hRvPgAAAAAAAAAYAAAAAEFZR0NGVFdJQUFEUjlDVlFydGhfS19rQgAAACQAAAAAMDE4MTgyMTUtMzU4OC00MDdhLWEyMDgtMjRlYzA5NjU1ZmNi\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/events?filter%5Bfrom%5D=now-15m&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWUdDRlRXSTJoUnZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdWRmRKUVVGRVVqbERWbEZ5ZEdoZlMxOXJRZ0FBQUNRQUFBQUFNREU0TVRneU1UVXRNelU0T0MwME1EZGhMV0V5TURndE1qUmxZekE1TmpVMVptTmkifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/events", + "query": [ + [ + "filter[from]", + "now-15m" + ], + [ + "filter[to]", + "now" + ], + [ + "page[cursor]", + "eyJhZnRlciI6IkFnQUFBWUdDRlRXSTJoUnZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdWRmRKUVVGRVVqbERWbEZ5ZEdoZlMxOXJRZ0FBQUNRQUFBQUFNREU0TVRneU1UVXRNelU0T0MwME1EZGhMV0V5TURndE1qUmxZekE1TmpVMVptTmkifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Events", + "frozen_at": "2022-06-20T12:31:31.698Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/events", + "query": [ + [ + "filter[from]", + "2020-09-17T11:48:36+01:00" + ], + [ + "filter[query]", + "datadog-agent" + ], + [ + "filter[to]", + "2020-09-17T12:48:36+01:00" + ], + [ + "page[limit]", + "5" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a quick list of events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Events", + "frozen_at": "2025-12-10T21:31:06.468Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "aggregation_key": "aggregation_key_123", + "attributes": { + "author": { + "name": "example@datadog.com", + "type": "user" + }, + "change_metadata": { + "dd": { + "team": "datadog_team", + "user_email": "datadog@datadog.com", + "user_id": "datadog_user_id", + "user_name": "datadog_username" + }, + "resource_link": "datadog.com/feature/fallback_payments_test" + }, + "changed_resource": { + "name": "fallback_payments_test", + "type": "feature_flag" + }, + "impacted_resources": [ + { + "name": "payments_api", + "type": "service" + } + ], + "new_value": { + "enabled": true, + "percentage": "50%", + "rule": { + "datacenter": "devcycle.us1.prod" + } + }, + "prev_value": { + "enabled": true, + "percentage": "10%", + "rule": { + "datacenter": "devcycle.us1.prod" + } + } + }, + "category": "invalid", + "host": "test-host", + "integration_id": "custom-events", + "message": "payment_processed feature flag has been enabled", + "tags": [ + "env:api_client_test" + ], + "title": "payment_processed feature flag updated" + }, + "type": "event" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/events", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"JSON validation failed at $.data.attributes.category: value must be one of: [\\\"alert\\\", \\\"change\\\"].\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Post an event returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Events", + "frozen_at": "2025-12-10T21:30:25.683Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "aggregation_key": "aggregation_key_123", + "attributes": { + "author": { + "name": "example@datadog.com", + "type": "user" + }, + "change_metadata": { + "dd": { + "team": "datadog_team", + "user_email": "datadog@datadog.com", + "user_id": "datadog_user_id", + "user_name": "datadog_username" + }, + "resource_link": "datadog.com/feature/fallback_payments_test" + }, + "changed_resource": { + "name": "fallback_payments_test", + "type": "feature_flag" + }, + "impacted_resources": [ + { + "name": "payments_api", + "type": "service" + } + ], + "new_value": { + "enabled": true, + "percentage": "50%", + "rule": { + "datacenter": "devcycle.us1.prod" + } + }, + "prev_value": { + "enabled": true, + "percentage": "10%", + "rule": { + "datacenter": "devcycle.us1.prod" + } + } + }, + "category": "change", + "host": "test-host", + "integration_id": "custom-events", + "message": "payment_processed feature flag has been enabled", + "tags": [ + "env:api_client_test" + ], + "title": "payment_processed feature flag updated" + }, + "type": "event" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/events", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"attributes\":{\"evt\":{\"id\":\"8407723285051133019\",\"uid\":\"AZsKLCxvAACrUQTfNDwMWwAA\"}}},\"id\":\"_\",\"type\":\"event\"},\"links\":{\"self\":\"https://app.datadoghq.com/event/event?uid=AZsKLCxvAACrUQTfNDwMWwAA\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Post an event returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Events", + "frozen_at": "2022-06-20T13:43:51.126Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "service:web* AND @http.status_code:[200 TO 299]", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ==", + "limit": 25 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"{'errors': [u\\\"input_validation_error(Field 'page' is invalid: invalid cursor)\\\"]}\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Search events returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Events", + "frozen_at": "2022-06-20T12:31:32.153Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "2020-09-17T11:48:36+01:00", + "query": "datadog-agent", + "to": "2020-09-17T12:48:36+01:00" + }, + "page": { + "limit": 5 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Events", + "frozen_at": "2022-06-20T17:08:53.623Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWUdDRldoUV9BZHZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdWMmhSUVVGQ1VIQk5UMjQxVURKZllVZzFTUUFBQUNRQUFBQUFNREU0TVRneU1UVXROekF5TUMwMFpXTTJMV0l3WVdJdFpEVTFZbU0zTlRZMlpUUTMifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"status\":\"info\",\"event_object\":\"adip\",\"service\":\"undefined\",\"title\":\"[Synthetics] EVMGT pipeline test\",\"timestamp\":1655744837000,\"hostname\":\"do ani\",\"priority\":\"normal\",\"aggregation_key\":\"adip\",\"evt\":{\"source_id\":100,\"type\":\"api\",\"id\":\"6567977596797486753\"}},\"message\":\"Synthetics test check that this event has the right content in the right format at the end of the event-pipeline output\",\"tags\":[\"environment:staging\",\"source:my_apps\",\"source:my_apps\",\"environment:staging\"],\"timestamp\":\"2022-06-20T17:07:17Z\"},\"type\":\"event\",\"id\":\"AgAAAYGCFTWI2hRvPgAAAAAAAAAYAAAAAEFZR0NGVFdJQUFEUjlDVlFydGhfS19rQgAAACQAAAAAMDE4MTgyMTUtMzU4OC00MDdhLWEyMDgtMjRlYzA5NjU1ZmNi\"},{\"attributes\":{\"attributes\":{\"status\":\"info\",\"event_object\":\"adip\",\"service\":\"undefined\",\"title\":\"[Synthetics] EVMGT pipeline test\",\"timestamp\":1655744850000,\"hostname\":\"do ani\",\"priority\":\"normal\",\"aggregation_key\":\"adip\",\"evt\":{\"source_id\":100,\"type\":\"api\",\"id\":\"6567977820721297650\"}},\"message\":\"Synthetics test check that this event has the right content in the right format at the end of the event-pipeline output\",\"tags\":[\"environment:staging\",\"source:my_apps\",\"source:my_apps\",\"environment:staging\"],\"timestamp\":\"2022-06-20T17:07:30Z\"},\"type\":\"event\",\"id\":\"AgAAAYGCFWhQ_AdvPgAAAAAAAAAYAAAAAEFZR0NGV2hRQUFCUHBNT241UDJfYUg1SQAAACQAAAAAMDE4MTgyMTUtNzAyMC00ZWM2LWIwYWItZDU1YmM3NTY2ZTQ3\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/events/search?filter%5Bfrom%5D=now-15m&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWUdDRldoUV9BZHZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdWMmhSUVVGQ1VIQk5UMjQxVURKZllVZzFTUUFBQUNRQUFBQUFNREU0TVRneU1UVXROekF5TUMwMFpXTTJMV0l3WVdJdFpEVTFZbU0zTlRZMlpUUTMifQ&page%5Blimit%5D=2&sort=timestamp\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFnQUFBWUdDRldoUV9BZHZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdWMmhSUVVGQ1VIQk5UMjQxVURKZllVZzFTUUFBQUNRQUFBQUFNREU0TVRneU1UVXROekF5TUMwMFpXTTJMV0l3WVdJdFpEVTFZbU0zTlRZMlpUUTMifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWUdDRlhBZ0lWRnZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdXRUZuUVVGQmVGaEhkVTlPZUY5MU9FWmpTd0FBQUNRQUFBQUFNREU0TVRneU1UVXROekF5TUMwMFpXTTJMV0l3WVdJdFpEVTFZbU0zTlRZMlpUUTMifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"status\":\"info\",\"event_object\":\"adip\",\"service\":\"undefined\",\"title\":\"[Synthetics] EVMGT pipeline test\",\"timestamp\":1655744852000,\"hostname\":\"do ani\",\"priority\":\"normal\",\"aggregation_key\":\"adip\",\"evt\":{\"source_id\":100,\"type\":\"api\",\"id\":\"6567977849972254562\"}},\"message\":\"Synthetics test check that this event has the right content in the right format at the end of the event-pipeline output\",\"tags\":[\"environment:staging\",\"source:my_apps\",\"source:my_apps\",\"environment:staging\"],\"timestamp\":\"2022-06-20T17:07:32Z\"},\"type\":\"event\",\"id\":\"AgAAAYGCFXAgIVFvPgAAAAAAAAAYAAAAAEFZR0NGWEFnQUFBeFhHdU9OeF91OEZjSwAAACQAAAAAMDE4MTgyMTUtNzAyMC00ZWM2LWIwYWItZDU1YmM3NTY2ZTQ3\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/events/search?filter%5Bfrom%5D=now-15m&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWUdDRlhBZ0lWRnZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdXRUZuUVVGQmVGaEhkVTlPZUY5MU9FWmpTd0FBQUNRQUFBQUFNREU0TVRneU1UVXROekF5TUMwMFpXTTJMV0l3WVdJdFpEVTFZbU0zTlRZMlpUUTMifQ&page%5Blimit%5D=2&sort=timestamp\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFnQUFBWUdDRlhBZ0lWRnZQZ0FBQUFBQUFBQVlBQUFBQUVGWlIwTkdXRUZuUVVGQmVGaEhkVTlPZUY5MU9FWmpTd0FBQUNRQUFBQUFNREU0TVRneU1UVXROekF5TUMwMFpXTTJMV0l3WVdJdFpEVTFZbU0zTlRZMlpUUTMifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search events returns \"OK\" response with pagination", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/fastly-integration.json b/test-server-data/v2/fastly-integration.json new file mode 100644 index 0000000000..b40f9409a9 --- /dev/null +++ b/test-server-data/v2/fastly-integration.json @@ -0,0 +1,335 @@ +{ + "feature": "Fastly Integration", + "recordings": [ + { + "feature": "Fastly Integration", + "frozen_at": "2023-01-19T15:15:56.412Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestAddFastlyaccountreturnsCREATEDresponse1674141356", + "name": "Test-Add_Fastly_account_returns_CREATED_response-1674141356", + "services": [] + }, + "type": "fastly-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/fastly/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"services\":[],\"name\":\"Test-Add_Fastly_account_returns_CREATED_response-1674141356\"},\"type\":\"fastly-accounts\",\"id\":\"0427b05b6f56f454ca1477aa8df5e75d\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/fastly/accounts/0427b05b6f56f454ca1477aa8df5e75d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Add Fastly account returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Fastly Integration", + "frozen_at": "2023-03-13T10:11:14.475Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestGetFastlyaccountreturnsOKresponse1678702274", + "name": "Test-Get_Fastly_account_returns_OK_response-1678702274", + "services": [] + }, + "type": "fastly-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/fastly/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"fastly-accounts\",\"id\":\"6d8f2860f9f3e953fb46d554b9a19627\",\"attributes\":{\"services\":[],\"name\":\"Test-Get_Fastly_account_returns_OK_response-1678702274\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integrations/fastly/accounts/6d8f2860f9f3e953fb46d554b9a19627", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"fastly-accounts\",\"id\":\"6d8f2860f9f3e953fb46d554b9a19627\",\"attributes\":{\"name\":\"Test-Get_Fastly_account_returns_OK_response-1678702274\",\"services\":[]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/fastly/accounts/6d8f2860f9f3e953fb46d554b9a19627", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get Fastly account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Fastly Integration", + "frozen_at": "2023-03-13T10:10:50.453Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestListFastlyaccountsreturnsOKresponse1678702250", + "name": "Test-List_Fastly_accounts_returns_OK_response-1678702250", + "services": [] + }, + "type": "fastly-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/fastly/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"fastly-accounts\",\"attributes\":{\"name\":\"Test-List_Fastly_accounts_returns_OK_response-1678702250\",\"services\":[]},\"id\":\"07ec97dd43cd794c847ecf15cb25eb1c\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integrations/fastly/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"fastly-accounts\",\"attributes\":{\"name\":\"Test-List_Fastly_accounts_returns_OK_response-1678702250\",\"services\":[]},\"id\":\"07ec97dd43cd794c847ecf15cb25eb1c\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/fastly/accounts/07ec97dd43cd794c847ecf15cb25eb1c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List Fastly accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Fastly Integration", + "frozen_at": "2023-03-13T10:10:17.626Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "TestUpdateFastlyaccountreturnsOKresponse1678702217", + "name": "Test-Update_Fastly_account_returns_OK_response-1678702217", + "services": [] + }, + "type": "fastly-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/fastly/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"fastly-accounts\",\"id\":\"e37e834ae856fa24a2924973fdc7c276\",\"attributes\":{\"services\":[],\"name\":\"Test-Update_Fastly_account_returns_OK_response-1678702217\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "api_key": "update-secret" + }, + "type": "fastly-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integrations/fastly/accounts/e37e834ae856fa24a2924973fdc7c276", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"fastly-accounts\",\"id\":\"e37e834ae856fa24a2924973fdc7c276\",\"attributes\":{\"services\":[],\"name\":\"Test-Update_Fastly_account_returns_OK_response-1678702217\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/fastly/accounts/e37e834ae856fa24a2924973fdc7c276", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update Fastly account returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/feature-flags.json b/test-server-data/v2/feature-flags.json new file mode 100644 index 0000000000..df736739e2 --- /dev/null +++ b/test-server-data/v2/feature-flags.json @@ -0,0 +1,882 @@ +{ + "feature": "Feature Flags", + "recordings": [ + { + "feature": "Feature Flags", + "frozen_at": "2026-04-22T20:15:48.773Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test feature flag for BDD scenarios", + "key": "test-feature-flag-Test-Archive_a_feature_flag_returns_OK_response-1776888948", + "name": "Test Feature Flag Test-Archive_a_feature_flag_returns_OK_response-1776888948", + "value_type": "BOOLEAN", + "variants": [ + { + "key": "variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-1", + "name": "Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 A", + "value": "true" + }, + { + "key": "variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-2", + "name": "Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 B", + "value": "false" + } + ] + }, + "type": "feature-flags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"08855245-91dc-4eec-be0c-eb763a859cc4\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":null,\"created_at\":\"2026-04-22T20:15:48.974579Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-16572a55982f\",\"override_allocation_key\":\"allocation-override-16572a55982f\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-194e375313c4\",\"override_allocation_key\":\"allocation-override-194e375313c4\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-5c72335a24a0\",\"override_allocation_key\":\"allocation-override-5c72335a24a0\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"test\",\"staging\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b8ecc98ba24f\",\"override_allocation_key\":\"allocation-override-b8ecc98ba24f\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b1a5fef0b792\",\"override_allocation_key\":\"allocation-override-b1a5fef0b792\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:48.974579Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-1\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:49.008716Z\",\"updated_at\":\"2026-04-22T20:15:49.008716Z\"},{\"id\":\"44add168-275b-4553-8669-0a8785112ef3\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-2\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:49.018061Z\",\"updated_at\":\"2026-04-22T20:15:49.018061Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/feature-flags/08855245-91dc-4eec-be0c-eb763a859cc4/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"08855245-91dc-4eec-be0c-eb763a859cc4\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:49.369442Z\",\"created_at\":\"2026-04-22T20:15:48.974579Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-16572a55982f\",\"override_allocation_key\":\"allocation-override-16572a55982f\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-194e375313c4\",\"override_allocation_key\":\"allocation-override-194e375313c4\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-5c72335a24a0\",\"override_allocation_key\":\"allocation-override-5c72335a24a0\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b8ecc98ba24f\",\"override_allocation_key\":\"allocation-override-b8ecc98ba24f\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b1a5fef0b792\",\"override_allocation_key\":\"allocation-override-b1a5fef0b792\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:49.369442Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-1\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:49.008716Z\",\"updated_at\":\"2026-04-22T20:15:49.008716Z\"},{\"id\":\"44add168-275b-4553-8669-0a8785112ef3\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-2\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:49.018061Z\",\"updated_at\":\"2026-04-22T20:15:49.018061Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/feature-flags/08855245-91dc-4eec-be0c-eb763a859cc4/unarchive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"08855245-91dc-4eec-be0c-eb763a859cc4\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":null,\"created_at\":\"2026-04-22T20:15:48.974579Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-16572a55982f\",\"override_allocation_key\":\"allocation-override-16572a55982f\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-194e375313c4\",\"override_allocation_key\":\"allocation-override-194e375313c4\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-5c72335a24a0\",\"override_allocation_key\":\"allocation-override-5c72335a24a0\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b8ecc98ba24f\",\"override_allocation_key\":\"allocation-override-b8ecc98ba24f\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b1a5fef0b792\",\"override_allocation_key\":\"allocation-override-b1a5fef0b792\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:49.666561Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-1\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:49.008716Z\",\"updated_at\":\"2026-04-22T20:15:49.008716Z\"},{\"id\":\"44add168-275b-4553-8669-0a8785112ef3\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-2\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:49.018061Z\",\"updated_at\":\"2026-04-22T20:15:49.018061Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/feature-flags/08855245-91dc-4eec-be0c-eb763a859cc4/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"08855245-91dc-4eec-be0c-eb763a859cc4\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:50.243688Z\",\"created_at\":\"2026-04-22T20:15:48.974579Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-16572a55982f\",\"override_allocation_key\":\"allocation-override-16572a55982f\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-194e375313c4\",\"override_allocation_key\":\"allocation-override-194e375313c4\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-5c72335a24a0\",\"override_allocation_key\":\"allocation-override-5c72335a24a0\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b8ecc98ba24f\",\"override_allocation_key\":\"allocation-override-b8ecc98ba24f\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b1a5fef0b792\",\"override_allocation_key\":\"allocation-override-b1a5fef0b792\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:50.243688Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-1\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:49.008716Z\",\"updated_at\":\"2026-04-22T20:15:49.008716Z\"},{\"id\":\"44add168-275b-4553-8669-0a8785112ef3\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-2\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:49.018061Z\",\"updated_at\":\"2026-04-22T20:15:49.018061Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Archive a feature flag returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "frozen_at": "2026-04-22T20:15:50.594Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "default_variant_key": "variant-Test-Create_a_feature_flag_returns_Created_response-1776888950-1", + "description": "Test feature flag for BDD scenarios", + "key": "test-feature-flag-Test-Create_a_feature_flag_returns_Created_response-1776888950", + "name": "Test Feature Flag Test-Create_a_feature_flag_returns_Created_response-1776888950", + "value_type": "BOOLEAN", + "variants": [ + { + "key": "variant-Test-Create_a_feature_flag_returns_Created_response-1776888950-1", + "name": "Variant Test-Create_a_feature_flag_returns_Created_response-1776888950 A", + "value": "true" + }, + { + "key": "variant-Test-Create_a_feature_flag_returns_Created_response-1776888950-2", + "name": "Variant Test-Create_a_feature_flag_returns_Created_response-1776888950 B", + "value": "false" + } + ] + }, + "type": "feature-flags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a170b047-9a4a-4261-9d9c-2ae59bbdf38c\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":null,\"created_at\":\"2026-04-22T20:15:50.760017Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0b01d033fb17\",\"override_allocation_key\":\"allocation-override-0b01d033fb17\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-85505efd5a57\",\"override_allocation_key\":\"allocation-override-85505efd5a57\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-baef5d1e356c\",\"override_allocation_key\":\"allocation-override-baef5d1e356c\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-2f55fe85c4b5\",\"override_allocation_key\":\"allocation-override-2f55fe85c4b5\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0e194ce19322\",\"override_allocation_key\":\"allocation-override-0e194ce19322\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Create_a_feature_flag_returns_Created_response-1776888950\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Create_a_feature_flag_returns_Created_response-1776888950\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:50.760017Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"key\":\"variant-Test-Create_a_feature_flag_returns_Created_response-1776888950-1\",\"name\":\"Variant Test-Create_a_feature_flag_returns_Created_response-1776888950 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:50.769161Z\",\"updated_at\":\"2026-04-22T20:15:50.769161Z\"},{\"id\":\"361db259-9e8d-44b0-b801-470f1b212c30\",\"key\":\"variant-Test-Create_a_feature_flag_returns_Created_response-1776888950-2\",\"name\":\"Variant Test-Create_a_feature_flag_returns_Created_response-1776888950 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:50.776775Z\",\"updated_at\":\"2026-04-22T20:15:50.776775Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/feature-flags/a170b047-9a4a-4261-9d9c-2ae59bbdf38c/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a170b047-9a4a-4261-9d9c-2ae59bbdf38c\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:51.21863Z\",\"created_at\":\"2026-04-22T20:15:50.760017Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0b01d033fb17\",\"override_allocation_key\":\"allocation-override-0b01d033fb17\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-85505efd5a57\",\"override_allocation_key\":\"allocation-override-85505efd5a57\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-baef5d1e356c\",\"override_allocation_key\":\"allocation-override-baef5d1e356c\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"test\",\"staging\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-2f55fe85c4b5\",\"override_allocation_key\":\"allocation-override-2f55fe85c4b5\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0e194ce19322\",\"override_allocation_key\":\"allocation-override-0e194ce19322\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Create_a_feature_flag_returns_Created_response-1776888950\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Create_a_feature_flag_returns_Created_response-1776888950\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:51.21863Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"key\":\"variant-Test-Create_a_feature_flag_returns_Created_response-1776888950-1\",\"name\":\"Variant Test-Create_a_feature_flag_returns_Created_response-1776888950 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:50.769161Z\",\"updated_at\":\"2026-04-22T20:15:50.769161Z\"},{\"id\":\"361db259-9e8d-44b0-b801-470f1b212c30\",\"key\":\"variant-Test-Create_a_feature_flag_returns_Created_response-1776888950-2\",\"name\":\"Variant Test-Create_a_feature_flag_returns_Created_response-1776888950 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:50.776775Z\",\"updated_at\":\"2026-04-22T20:15:50.776775Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a feature flag returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "frozen_at": "2026-04-22T20:15:51.642Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test feature flag for BDD scenarios", + "key": "test-feature-flag-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951", + "name": "Test Feature Flag Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951", + "value_type": "BOOLEAN", + "variants": [ + { + "key": "variant-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951-1", + "name": "Variant Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951 A", + "value": "true" + }, + { + "key": "variant-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951-2", + "name": "Variant Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951 B", + "value": "false" + } + ] + }, + "type": "feature-flags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e6c7f35a-b5ca-4dd9-afef-1f82e56ef3c3\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":null,\"created_at\":\"2026-04-22T20:15:51.791938Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-ebc70681da00\",\"override_allocation_key\":\"allocation-override-ebc70681da00\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b923b17a0979\",\"override_allocation_key\":\"allocation-override-b923b17a0979\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-155f406ff57e\",\"override_allocation_key\":\"allocation-override-155f406ff57e\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-8811070d6fa3\",\"override_allocation_key\":\"allocation-override-8811070d6fa3\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-c8eeb8505cf7\",\"override_allocation_key\":\"allocation-override-c8eeb8505cf7\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:51.791938Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"key\":\"variant-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951-1\",\"name\":\"Variant Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:51.800572Z\",\"updated_at\":\"2026-04-22T20:15:51.800572Z\"},{\"id\":\"c2ee4b53-bf3e-4ff9-b4cc-8f8cf930a62f\",\"key\":\"variant-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951-2\",\"name\":\"Variant Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:51.808304Z\",\"updated_at\":\"2026-04-22T20:15:51.808304Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test Environment Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951", + "queries": [ + "test-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951", + "env-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951" + ] + }, + "type": "environments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags/environments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"88b05d9a-5492-48a2-b06f-ea4b49acdd21\",\"type\":\"environments\",\"attributes\":{\"is_production\":false,\"name\":\"Test Environment Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\",\"queries\":[\"test-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\",\"env-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\"],\"require_feature_flag_approval\":false}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "guardrail_metrics": [], + "key": "new-targeting-rule-test-create_allocation_for_a_flag_in_an_environment_returns_created_response-1776888951", + "name": "New targeting rule Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951", + "targeting_rules": [], + "type": "CANARY", + "variant_weights": [ + { + "value": 100, + "variant_id": "80763910-cca1-46e4-b44e-756ae2e40c63" + } + ] + }, + "type": "allocations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags/e6c7f35a-b5ca-4dd9-afef-1f82e56ef3c3/environments/88b05d9a-5492-48a2-b06f-ea4b49acdd21/allocations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bd16d8f4-8d7e-4369-b0d8-4ebc3ff3a0a5\",\"type\":\"allocations\",\"attributes\":{\"created_at\":\"2026-04-22T20:15:53.849337881Z\",\"environment_ids\":[\"88b05d9a-5492-48a2-b06f-ea4b49acdd21\"],\"experiment_id\":null,\"guardrail_metrics\":[],\"key\":\"new-targeting-rule-test-create_allocation_for_a_flag_in_an_environment_returns_created_response-1776888951\",\"name\":\"New targeting rule Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\",\"order_position\":0,\"targeting_rules\":[],\"type\":\"CANARY\",\"updated_at\":\"2026-04-22T20:15:53.849337881Z\",\"variant_weights\":[{\"id\":\"7bb71a98-b169-4a80-ac96-0d8d4e8fce51\",\"created_at\":\"2026-04-22T20:15:53.855454Z\",\"updated_at\":\"2026-04-22T20:15:53.855454Z\",\"value\":100,\"variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"variant\":{\"id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"key\":\"variant-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951-1\",\"name\":\"Variant Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:51.800572Z\",\"updated_at\":\"2026-04-22T20:15:51.800572Z\"}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/feature-flags/environments/88b05d9a-5492-48a2-b06f-ea4b49acdd21", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/feature-flags/e6c7f35a-b5ca-4dd9-afef-1f82e56ef3c3/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e6c7f35a-b5ca-4dd9-afef-1f82e56ef3c3\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:54.879082Z\",\"created_at\":\"2026-04-22T20:15:51.791938Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-ebc70681da00\",\"override_allocation_key\":\"allocation-override-ebc70681da00\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b923b17a0979\",\"override_allocation_key\":\"allocation-override-b923b17a0979\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-155f406ff57e\",\"override_allocation_key\":\"allocation-override-155f406ff57e\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-8811070d6fa3\",\"override_allocation_key\":\"allocation-override-8811070d6fa3\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-c8eeb8505cf7\",\"override_allocation_key\":\"allocation-override-c8eeb8505cf7\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:54.879082Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"key\":\"variant-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951-1\",\"name\":\"Variant Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:51.800572Z\",\"updated_at\":\"2026-04-22T20:15:51.800572Z\"},{\"id\":\"c2ee4b53-bf3e-4ff9-b4cc-8f8cf930a62f\",\"key\":\"variant-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951-2\",\"name\":\"Variant Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:51.808304Z\",\"updated_at\":\"2026-04-22T20:15:51.808304Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create allocation for a flag in an environment returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "frozen_at": "2026-04-22T20:15:55.045Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test Environment Test-Create_an_environment_returns_Created_response-1776888955", + "queries": [ + "test-Test-Create_an_environment_returns_Created_response-1776888955", + "env-Test-Create_an_environment_returns_Created_response-1776888955" + ] + }, + "type": "environments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags/environments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e8d345e2-dca2-4270-912f-1189174ee338\",\"type\":\"environments\",\"attributes\":{\"is_production\":false,\"name\":\"Test Environment Test-Create_an_environment_returns_Created_response-1776888955\",\"queries\":[\"test-Test-Create_an_environment_returns_Created_response-1776888955\",\"env-Test-Create_an_environment_returns_Created_response-1776888955\"],\"require_feature_flag_approval\":false}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/feature-flags/environments/e8d345e2-dca2-4270-912f-1189174ee338", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an environment returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "frozen_at": "2026-04-22T20:15:56.395Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test feature flag for BDD scenarios", + "key": "test-feature-flag-Test-Get_a_feature_flag_returns_OK_response-1776888956", + "name": "Test Feature Flag Test-Get_a_feature_flag_returns_OK_response-1776888956", + "value_type": "BOOLEAN", + "variants": [ + { + "key": "variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-1", + "name": "Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 A", + "value": "true" + }, + { + "key": "variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-2", + "name": "Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 B", + "value": "false" + } + ] + }, + "type": "feature-flags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bb56c49c-0867-4c87-9a5a-07b2de32a8af\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":null,\"created_at\":\"2026-04-22T20:15:56.568439Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-73bd6f12f525\",\"override_allocation_key\":\"allocation-override-73bd6f12f525\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-96aa706a3479\",\"override_allocation_key\":\"allocation-override-96aa706a3479\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-529d29a38578\",\"override_allocation_key\":\"allocation-override-529d29a38578\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-37af84248349\",\"override_allocation_key\":\"allocation-override-37af84248349\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-398c438307b1\",\"override_allocation_key\":\"allocation-override-398c438307b1\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Get_a_feature_flag_returns_OK_response-1776888956\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Get_a_feature_flag_returns_OK_response-1776888956\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:56.568439Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"key\":\"variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-1\",\"name\":\"Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:56.5828Z\",\"updated_at\":\"2026-04-22T20:15:56.5828Z\"},{\"id\":\"eb101534-039c-4e22-afdd-afd2a393d14b\",\"key\":\"variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-2\",\"name\":\"Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:56.590965Z\",\"updated_at\":\"2026-04-22T20:15:56.590965Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/feature-flags/bb56c49c-0867-4c87-9a5a-07b2de32a8af", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bb56c49c-0867-4c87-9a5a-07b2de32a8af\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":null,\"created_at\":\"2026-04-22T20:15:56.568439Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-73bd6f12f525\",\"override_allocation_key\":\"allocation-override-73bd6f12f525\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-96aa706a3479\",\"override_allocation_key\":\"allocation-override-96aa706a3479\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-529d29a38578\",\"override_allocation_key\":\"allocation-override-529d29a38578\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-37af84248349\",\"override_allocation_key\":\"allocation-override-37af84248349\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-398c438307b1\",\"override_allocation_key\":\"allocation-override-398c438307b1\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Get_a_feature_flag_returns_OK_response-1776888956\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Get_a_feature_flag_returns_OK_response-1776888956\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:56.568439Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"key\":\"variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-1\",\"name\":\"Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:56.5828Z\",\"updated_at\":\"2026-04-22T20:15:56.5828Z\"},{\"id\":\"eb101534-039c-4e22-afdd-afd2a393d14b\",\"key\":\"variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-2\",\"name\":\"Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:56.590965Z\",\"updated_at\":\"2026-04-22T20:15:56.590965Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/feature-flags/bb56c49c-0867-4c87-9a5a-07b2de32a8af/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bb56c49c-0867-4c87-9a5a-07b2de32a8af\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:57.245709Z\",\"created_at\":\"2026-04-22T20:15:56.568439Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-73bd6f12f525\",\"override_allocation_key\":\"allocation-override-73bd6f12f525\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-96aa706a3479\",\"override_allocation_key\":\"allocation-override-96aa706a3479\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-529d29a38578\",\"override_allocation_key\":\"allocation-override-529d29a38578\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-37af84248349\",\"override_allocation_key\":\"allocation-override-37af84248349\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-398c438307b1\",\"override_allocation_key\":\"allocation-override-398c438307b1\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Get_a_feature_flag_returns_OK_response-1776888956\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Get_a_feature_flag_returns_OK_response-1776888956\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:57.245709Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"key\":\"variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-1\",\"name\":\"Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:56.5828Z\",\"updated_at\":\"2026-04-22T20:15:56.5828Z\"},{\"id\":\"eb101534-039c-4e22-afdd-afd2a393d14b\",\"key\":\"variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-2\",\"name\":\"Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:56.590965Z\",\"updated_at\":\"2026-04-22T20:15:56.590965Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a feature flag returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "frozen_at": "2026-04-22T20:15:57.469Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/feature-flags", + "query": [ + [ + "limit", + "10" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"bb56c49c-0867-4c87-9a5a-07b2de32a8af\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:57.245709Z\",\"created_at\":\"2026-04-22T20:15:56.568439Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-73bd6f12f525\",\"override_allocation_key\":\"allocation-override-73bd6f12f525\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-96aa706a3479\",\"override_allocation_key\":\"allocation-override-96aa706a3479\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-529d29a38578\",\"override_allocation_key\":\"allocation-override-529d29a38578\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-37af84248349\",\"override_allocation_key\":\"allocation-override-37af84248349\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-398c438307b1\",\"override_allocation_key\":\"allocation-override-398c438307b1\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Get_a_feature_flag_returns_OK_response-1776888956\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Get_a_feature_flag_returns_OK_response-1776888956\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T20:15:57.245709Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"2aeac626-73a8-4b6c-aaa3-447ded6ee336\",\"key\":\"variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-1\",\"name\":\"Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:56.5828Z\",\"updated_at\":\"2026-04-22T20:15:56.5828Z\"},{\"id\":\"eb101534-039c-4e22-afdd-afd2a393d14b\",\"key\":\"variant-Test-Get_a_feature_flag_returns_OK_response-1776888956-2\",\"name\":\"Variant Test-Get_a_feature_flag_returns_OK_response-1776888956 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:56.590965Z\",\"updated_at\":\"2026-04-22T20:15:56.590965Z\"}]}},{\"id\":\"e6c7f35a-b5ca-4dd9-afef-1f82e56ef3c3\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:54.879082Z\",\"created_at\":\"2026-04-22T20:15:51.791938Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-ebc70681da00\",\"override_allocation_key\":\"allocation-override-ebc70681da00\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b923b17a0979\",\"override_allocation_key\":\"allocation-override-b923b17a0979\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-155f406ff57e\",\"override_allocation_key\":\"allocation-override-155f406ff57e\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-8811070d6fa3\",\"override_allocation_key\":\"allocation-override-8811070d6fa3\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-c8eeb8505cf7\",\"override_allocation_key\":\"allocation-override-c8eeb8505cf7\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T20:15:54.879082Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"80763910-cca1-46e4-b44e-756ae2e40c63\",\"key\":\"variant-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951-1\",\"name\":\"Variant Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:51.800572Z\",\"updated_at\":\"2026-04-22T20:15:51.800572Z\"},{\"id\":\"c2ee4b53-bf3e-4ff9-b4cc-8f8cf930a62f\",\"key\":\"variant-Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951-2\",\"name\":\"Variant Test-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1776888951 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:51.808304Z\",\"updated_at\":\"2026-04-22T20:15:51.808304Z\"}]}},{\"id\":\"a170b047-9a4a-4261-9d9c-2ae59bbdf38c\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:51.21863Z\",\"created_at\":\"2026-04-22T20:15:50.760017Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0b01d033fb17\",\"override_allocation_key\":\"allocation-override-0b01d033fb17\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-85505efd5a57\",\"override_allocation_key\":\"allocation-override-85505efd5a57\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-baef5d1e356c\",\"override_allocation_key\":\"allocation-override-baef5d1e356c\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-2f55fe85c4b5\",\"override_allocation_key\":\"allocation-override-2f55fe85c4b5\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0e194ce19322\",\"override_allocation_key\":\"allocation-override-0e194ce19322\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Create_a_feature_flag_returns_Created_response-1776888950\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Create_a_feature_flag_returns_Created_response-1776888950\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T20:15:51.21863Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"e97bc68e-c722-4b34-a126-6ab93900f00c\",\"key\":\"variant-Test-Create_a_feature_flag_returns_Created_response-1776888950-1\",\"name\":\"Variant Test-Create_a_feature_flag_returns_Created_response-1776888950 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:50.769161Z\",\"updated_at\":\"2026-04-22T20:15:50.769161Z\"},{\"id\":\"361db259-9e8d-44b0-b801-470f1b212c30\",\"key\":\"variant-Test-Create_a_feature_flag_returns_Created_response-1776888950-2\",\"name\":\"Variant Test-Create_a_feature_flag_returns_Created_response-1776888950 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:50.776775Z\",\"updated_at\":\"2026-04-22T20:15:50.776775Z\"}]}},{\"id\":\"08855245-91dc-4eec-be0c-eb763a859cc4\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:50.243688Z\",\"created_at\":\"2026-04-22T20:15:48.974579Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-16572a55982f\",\"override_allocation_key\":\"allocation-override-16572a55982f\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-194e375313c4\",\"override_allocation_key\":\"allocation-override-194e375313c4\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-5c72335a24a0\",\"override_allocation_key\":\"allocation-override-5c72335a24a0\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b8ecc98ba24f\",\"override_allocation_key\":\"allocation-override-b8ecc98ba24f\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-b1a5fef0b792\",\"override_allocation_key\":\"allocation-override-b1a5fef0b792\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Archive_a_feature_flag_returns_OK_response-1776888948\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T20:15:50.243688Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"253b5750-5d84-41ed-afe5-c0a5542d6be4\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-1\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:49.008716Z\",\"updated_at\":\"2026-04-22T20:15:49.008716Z\"},{\"id\":\"44add168-275b-4553-8669-0a8785112ef3\",\"key\":\"variant-Test-Archive_a_feature_flag_returns_OK_response-1776888948-2\",\"name\":\"Variant Test-Archive_a_feature_flag_returns_OK_response-1776888948 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:49.018061Z\",\"updated_at\":\"2026-04-22T20:15:49.018061Z\"}]}},{\"id\":\"23d5a8bb-4d87-4554-900e-ba80d6a056d2\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:09:40.663307Z\",\"created_at\":\"2026-04-22T20:09:39.970489Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2c2b9a62-05f0-4ba5-83a0-19ef495304e5\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-c0e5d7dcc6fc\",\"override_allocation_key\":\"allocation-override-c0e5d7dcc6fc\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2c2b9a62-05f0-4ba5-83a0-19ef495304e5\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-3a52ca8ed199\",\"override_allocation_key\":\"allocation-override-3a52ca8ed199\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2c2b9a62-05f0-4ba5-83a0-19ef495304e5\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-732c6e4ea5b9\",\"override_allocation_key\":\"allocation-override-732c6e4ea5b9\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2c2b9a62-05f0-4ba5-83a0-19ef495304e5\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-e6a9df33e0f3\",\"override_allocation_key\":\"allocation-override-e6a9df33e0f3\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"2c2b9a62-05f0-4ba5-83a0-19ef495304e5\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-020dbdcaa62e\",\"override_allocation_key\":\"allocation-override-020dbdcaa62e\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Example-Create_a_feature_flag_returns_Created_response_1776888579\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Example-Create_a_feature_flag_returns_Created_response_1776888579\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T20:09:40.663307Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"2c2b9a62-05f0-4ba5-83a0-19ef495304e5\",\"key\":\"variant-Example-Create_a_feature_flag_returns_Created_response_1776888579-1\",\"name\":\"Variant Example-Create_a_feature_flag_returns_Created_response_1776888579 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:09:39.987239Z\",\"updated_at\":\"2026-04-22T20:09:39.987239Z\"},{\"id\":\"971e3ecb-7783-475b-b762-34e3e0668a8b\",\"key\":\"variant-Example-Create_a_feature_flag_returns_Created_response_1776888579-2\",\"name\":\"Variant Example-Create_a_feature_flag_returns_Created_response_1776888579 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:09:40.009106Z\",\"updated_at\":\"2026-04-22T20:09:40.009106Z\"}]}},{\"id\":\"7af43074-3a8b-434d-b078-db42f2960b89\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:09:41.126926Z\",\"created_at\":\"2026-04-22T20:09:39.797973Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Updated description for the feature flag\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"db583ad2-cf6b-4890-a231-6efc025e0af2\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-18a97bb49c38\",\"override_allocation_key\":\"allocation-override-18a97bb49c38\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"db583ad2-cf6b-4890-a231-6efc025e0af2\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-8af3505a73cd\",\"override_allocation_key\":\"allocation-override-8af3505a73cd\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"db583ad2-cf6b-4890-a231-6efc025e0af2\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-4880c9671914\",\"override_allocation_key\":\"allocation-override-4880c9671914\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"db583ad2-cf6b-4890-a231-6efc025e0af2\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-a9930d48f40e\",\"override_allocation_key\":\"allocation-override-a9930d48f40e\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"db583ad2-cf6b-4890-a231-6efc025e0af2\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-e7f602c74daa\",\"override_allocation_key\":\"allocation-override-e7f602c74daa\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Example-Update_a_feature_flag_returns_OK_response_1776888577\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Updated Test Feature Flag Example-Update_a_feature_flag_returns_OK_response_1776888577\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T20:09:41.126926Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"db583ad2-cf6b-4890-a231-6efc025e0af2\",\"key\":\"variant-Example-Update_a_feature_flag_returns_OK_response_1776888577-1\",\"name\":\"Variant Example-Update_a_feature_flag_returns_OK_response_1776888577 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:09:39.807236Z\",\"updated_at\":\"2026-04-22T20:09:39.807236Z\"},{\"id\":\"31b43d08-1f31-41ae-b159-261e7d67360d\",\"key\":\"variant-Example-Update_a_feature_flag_returns_OK_response_1776888577-2\",\"name\":\"Variant Example-Update_a_feature_flag_returns_OK_response_1776888577 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:09:39.815925Z\",\"updated_at\":\"2026-04-22T20:09:39.815925Z\"}]}},{\"id\":\"b4270222-2336-43f5-beb2-2c5ca678138d\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:09:39.385408Z\",\"created_at\":\"2026-04-22T20:09:38.338818Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"d39a5390-1566-4252-8e6f-60d978f852eb\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-bd83b68f6c24\",\"override_allocation_key\":\"allocation-override-bd83b68f6c24\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"d39a5390-1566-4252-8e6f-60d978f852eb\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-e7fddd6a64a6\",\"override_allocation_key\":\"allocation-override-e7fddd6a64a6\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"d39a5390-1566-4252-8e6f-60d978f852eb\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-ece8f4716439\",\"override_allocation_key\":\"allocation-override-ece8f4716439\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"test\",\"staging\"],\"status\":\"DISABLED\",\"default_variant_id\":\"d39a5390-1566-4252-8e6f-60d978f852eb\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-db3b393dfd49\",\"override_allocation_key\":\"allocation-override-db3b393dfd49\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"d39a5390-1566-4252-8e6f-60d978f852eb\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-a208253d3e73\",\"override_allocation_key\":\"allocation-override-a208253d3e73\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Example-Get_a_feature_flag_returns_OK_response_1776888577\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Example-Get_a_feature_flag_returns_OK_response_1776888577\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T20:09:39.385408Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"d39a5390-1566-4252-8e6f-60d978f852eb\",\"key\":\"variant-Example-Get_a_feature_flag_returns_OK_response_1776888577-1\",\"name\":\"Variant Example-Get_a_feature_flag_returns_OK_response_1776888577 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:09:38.352145Z\",\"updated_at\":\"2026-04-22T20:09:38.352145Z\"},{\"id\":\"e855eab7-7cad-4dcb-9c1b-754841a8e16c\",\"key\":\"variant-Example-Get_a_feature_flag_returns_OK_response_1776888577-2\",\"name\":\"Variant Example-Get_a_feature_flag_returns_OK_response_1776888577 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:09:38.362969Z\",\"updated_at\":\"2026-04-22T20:09:38.362969Z\"}]}},{\"id\":\"ecf2f33b-d18d-4d81-8f11-a7ca79fd8602\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:09:39.043852Z\",\"created_at\":\"2026-04-22T20:09:37.106435Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"79b978d5-6b88-4d93-859a-636915dfa037\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-29d8cc69a58e\",\"override_allocation_key\":\"allocation-override-29d8cc69a58e\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"79b978d5-6b88-4d93-859a-636915dfa037\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-21c020bf18f8\",\"override_allocation_key\":\"allocation-override-21c020bf18f8\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"79b978d5-6b88-4d93-859a-636915dfa037\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-6d77d6fd1153\",\"override_allocation_key\":\"allocation-override-6d77d6fd1153\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"79b978d5-6b88-4d93-859a-636915dfa037\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-ab4754e52477\",\"override_allocation_key\":\"allocation-override-ab4754e52477\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"79b978d5-6b88-4d93-859a-636915dfa037\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-37429a821577\",\"override_allocation_key\":\"allocation-override-37429a821577\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Example-Archive_a_feature_flag_returns_OK_response_1776888576\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Example-Archive_a_feature_flag_returns_OK_response_1776888576\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T20:09:39.043852Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"79b978d5-6b88-4d93-859a-636915dfa037\",\"key\":\"variant-Example-Archive_a_feature_flag_returns_OK_response_1776888576-1\",\"name\":\"Variant Example-Archive_a_feature_flag_returns_OK_response_1776888576 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:09:37.143951Z\",\"updated_at\":\"2026-04-22T20:09:37.143951Z\"},{\"id\":\"aca4c4f2-aceb-41ac-80f3-589a8b40412c\",\"key\":\"variant-Example-Archive_a_feature_flag_returns_OK_response_1776888576-2\",\"name\":\"Variant Example-Archive_a_feature_flag_returns_OK_response_1776888576 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:09:37.152813Z\",\"updated_at\":\"2026-04-22T20:09:37.152813Z\"}]}},{\"id\":\"7fdae36e-3c63-4ab9-ba5b-9599840d80ae\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T17:54:17.059667Z\",\"created_at\":\"2026-04-22T17:54:13.922099Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"186c3c4e-5f23-4634-9614-ec535c3c63b3\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0c4b07aa0fa4\",\"override_allocation_key\":\"allocation-override-0c4b07aa0fa4\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"186c3c4e-5f23-4634-9614-ec535c3c63b3\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0457316276b9\",\"override_allocation_key\":\"allocation-override-0457316276b9\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"186c3c4e-5f23-4634-9614-ec535c3c63b3\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-6d7c016b98c6\",\"override_allocation_key\":\"allocation-override-6d7c016b98c6\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"test\",\"staging\"],\"status\":\"DISABLED\",\"default_variant_id\":\"186c3c4e-5f23-4634-9614-ec535c3c63b3\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-cfd587050193\",\"override_allocation_key\":\"allocation-override-cfd587050193\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"186c3c4e-5f23-4634-9614-ec535c3c63b3\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-40eb273725e2\",\"override_allocation_key\":\"allocation-override-40eb273725e2\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Example-Create_allocation_for_a_flag_in_an_environment_returns_Created_response_1776880453\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Example-Create_allocation_for_a_flag_in_an_environment_returns_Created_response_1776880453\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T17:54:17.059667Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"fbe25f93-fe5e-4bba-a49f-2fac2cdf5e92\",\"key\":\"variant-Example-Create_allocation_for_a_flag_in_an_environment_returns_Created_response_1776880453-2\",\"name\":\"Variant Example-Create_allocation_for_a_flag_in_an_environment_returns_Created_response_1776880453 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T17:54:13.937166Z\",\"updated_at\":\"2026-04-22T17:54:13.937166Z\"},{\"id\":\"186c3c4e-5f23-4634-9614-ec535c3c63b3\",\"key\":\"variant-Example-Create_allocation_for_a_flag_in_an_environment_returns_Created_response_1776880453-1\",\"name\":\"Variant Example-Create_allocation_for_a_flag_in_an_environment_returns_Created_response_1776880453 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T17:54:13.930229Z\",\"updated_at\":\"2026-04-22T17:54:13.930229Z\"}]}},{\"id\":\"abef70a7-f905-4fd2-a88c-66da88e0a1e1\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T17:54:15.437141Z\",\"created_at\":\"2026-04-22T17:54:11.701494Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"b3c22d7b-3410-4a18-93d4-70aa24f8dbe1\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-717b1ace2bc5\",\"override_allocation_key\":\"allocation-override-717b1ace2bc5\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"b3c22d7b-3410-4a18-93d4-70aa24f8dbe1\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-a2e9f2495663\",\"override_allocation_key\":\"allocation-override-a2e9f2495663\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"b3c22d7b-3410-4a18-93d4-70aa24f8dbe1\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-dd81e86a1d0a\",\"override_allocation_key\":\"allocation-override-dd81e86a1d0a\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"b3c22d7b-3410-4a18-93d4-70aa24f8dbe1\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-28ed2bc05840\",\"override_allocation_key\":\"allocation-override-28ed2bc05840\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"b3c22d7b-3410-4a18-93d4-70aa24f8dbe1\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-e5d96c48690c\",\"override_allocation_key\":\"allocation-override-e5d96c48690c\",\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Example-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response_1776880451\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Example-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response_1776880451\",\"require_approval\":false,\"tags\":[],\"updated_at\":\"2026-04-22T17:54:15.437141Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"b3c22d7b-3410-4a18-93d4-70aa24f8dbe1\",\"key\":\"variant-Example-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response_1776880451-1\",\"name\":\"Variant Example-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response_1776880451 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T17:54:11.736654Z\",\"updated_at\":\"2026-04-22T17:54:11.736654Z\"},{\"id\":\"ed49b612-5046-4a5b-b694-f8aa57648b77\",\"key\":\"variant-Example-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response_1776880451-2\",\"name\":\"Variant Example-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response_1776880451 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T17:54:11.744642Z\",\"updated_at\":\"2026-04-22T17:54:11.744642Z\"}]}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List feature flags returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "frozen_at": "2026-04-22T20:15:57.687Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test feature flag for BDD scenarios", + "key": "test-feature-flag-Test-Update_a_feature_flag_returns_OK_response-1776888957", + "name": "Test Feature Flag Test-Update_a_feature_flag_returns_OK_response-1776888957", + "value_type": "BOOLEAN", + "variants": [ + { + "key": "variant-Test-Update_a_feature_flag_returns_OK_response-1776888957-1", + "name": "Variant Test-Update_a_feature_flag_returns_OK_response-1776888957 A", + "value": "true" + }, + { + "key": "variant-Test-Update_a_feature_flag_returns_OK_response-1776888957-2", + "name": "Variant Test-Update_a_feature_flag_returns_OK_response-1776888957 B", + "value": "false" + } + ] + }, + "type": "feature-flags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d350e2d6-4896-429a-a6a1-44f1b0040bae\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":null,\"created_at\":\"2026-04-22T20:15:57.894572Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-655b96058447\",\"override_allocation_key\":\"allocation-override-655b96058447\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-940b902e111d\",\"override_allocation_key\":\"allocation-override-940b902e111d\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-e00d0b6ecb45\",\"override_allocation_key\":\"allocation-override-e00d0b6ecb45\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"test\",\"staging\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-7944c23ab9e9\",\"override_allocation_key\":\"allocation-override-7944c23ab9e9\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0aa9c845ab6c\",\"override_allocation_key\":\"allocation-override-0aa9c845ab6c\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Update_a_feature_flag_returns_OK_response-1776888957\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Update_a_feature_flag_returns_OK_response-1776888957\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:57.894572Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"key\":\"variant-Test-Update_a_feature_flag_returns_OK_response-1776888957-1\",\"name\":\"Variant Test-Update_a_feature_flag_returns_OK_response-1776888957 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:57.908225Z\",\"updated_at\":\"2026-04-22T20:15:57.908225Z\"},{\"id\":\"7ddefb2f-ae55-498e-ba68-028bdd2acb4f\",\"key\":\"variant-Test-Update_a_feature_flag_returns_OK_response-1776888957-2\",\"name\":\"Variant Test-Update_a_feature_flag_returns_OK_response-1776888957 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:57.920794Z\",\"updated_at\":\"2026-04-22T20:15:57.920794Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Updated description for the feature flag", + "name": "Updated Test Feature Flag Test-Update_a_feature_flag_returns_OK_response-1776888957" + }, + "type": "feature-flags" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/feature-flags/d350e2d6-4896-429a-a6a1-44f1b0040bae", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d350e2d6-4896-429a-a6a1-44f1b0040bae\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":null,\"created_at\":\"2026-04-22T20:15:57.894572Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Updated description for the feature flag\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-655b96058447\",\"override_allocation_key\":\"allocation-override-655b96058447\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-940b902e111d\",\"override_allocation_key\":\"allocation-override-940b902e111d\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-e00d0b6ecb45\",\"override_allocation_key\":\"allocation-override-e00d0b6ecb45\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-7944c23ab9e9\",\"override_allocation_key\":\"allocation-override-7944c23ab9e9\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0aa9c845ab6c\",\"override_allocation_key\":\"allocation-override-0aa9c845ab6c\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Update_a_feature_flag_returns_OK_response-1776888957\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Updated Test Feature Flag Test-Update_a_feature_flag_returns_OK_response-1776888957\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:58.282904Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"key\":\"variant-Test-Update_a_feature_flag_returns_OK_response-1776888957-1\",\"name\":\"Variant Test-Update_a_feature_flag_returns_OK_response-1776888957 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:57.908225Z\",\"updated_at\":\"2026-04-22T20:15:57.908225Z\"},{\"id\":\"7ddefb2f-ae55-498e-ba68-028bdd2acb4f\",\"key\":\"variant-Test-Update_a_feature_flag_returns_OK_response-1776888957-2\",\"name\":\"Variant Test-Update_a_feature_flag_returns_OK_response-1776888957 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:57.920794Z\",\"updated_at\":\"2026-04-22T20:15:57.920794Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/feature-flags/d350e2d6-4896-429a-a6a1-44f1b0040bae/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d350e2d6-4896-429a-a6a1-44f1b0040bae\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:15:58.649581Z\",\"created_at\":\"2026-04-22T20:15:57.894572Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Updated description for the feature flag\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-655b96058447\",\"override_allocation_key\":\"allocation-override-655b96058447\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-940b902e111d\",\"override_allocation_key\":\"allocation-override-940b902e111d\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-e00d0b6ecb45\",\"override_allocation_key\":\"allocation-override-e00d0b6ecb45\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-7944c23ab9e9\",\"override_allocation_key\":\"allocation-override-7944c23ab9e9\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-0aa9c845ab6c\",\"override_allocation_key\":\"allocation-override-0aa9c845ab6c\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Update_a_feature_flag_returns_OK_response-1776888957\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Updated Test Feature Flag Test-Update_a_feature_flag_returns_OK_response-1776888957\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:58.649581Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"e04afa52-9096-417e-af40-bef68bd29a77\",\"key\":\"variant-Test-Update_a_feature_flag_returns_OK_response-1776888957-1\",\"name\":\"Variant Test-Update_a_feature_flag_returns_OK_response-1776888957 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:57.908225Z\",\"updated_at\":\"2026-04-22T20:15:57.908225Z\"},{\"id\":\"7ddefb2f-ae55-498e-ba68-028bdd2acb4f\",\"key\":\"variant-Test-Update_a_feature_flag_returns_OK_response-1776888957-2\",\"name\":\"Variant Test-Update_a_feature_flag_returns_OK_response-1776888957 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:57.920794Z\",\"updated_at\":\"2026-04-22T20:15:57.920794Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a feature flag returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Feature Flags", + "frozen_at": "2026-04-22T20:15:58.838Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test feature flag for BDD scenarios", + "key": "test-feature-flag-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958", + "name": "Test Feature Flag Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958", + "value_type": "BOOLEAN", + "variants": [ + { + "key": "variant-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958-1", + "name": "Variant Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958 A", + "value": "true" + }, + { + "key": "variant-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958-2", + "name": "Variant Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958 B", + "value": "false" + } + ] + }, + "type": "feature-flags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a0d35980-96a6-4a9e-956f-390407054a69\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":null,\"created_at\":\"2026-04-22T20:15:59.062012Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-73242898aed7\",\"override_allocation_key\":\"allocation-override-73242898aed7\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-441cf63434d5\",\"override_allocation_key\":\"allocation-override-441cf63434d5\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-9e0360b0d06e\",\"override_allocation_key\":\"allocation-override-9e0360b0d06e\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-8e088e0bab4d\",\"override_allocation_key\":\"allocation-override-8e088e0bab4d\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-6248561fa516\",\"override_allocation_key\":\"allocation-override-6248561fa516\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:15:59.062012Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"key\":\"variant-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958-1\",\"name\":\"Variant Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:59.071764Z\",\"updated_at\":\"2026-04-22T20:15:59.071764Z\"},{\"id\":\"8e69e285-abff-4253-bafd-beba008e9b6f\",\"key\":\"variant-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958-2\",\"name\":\"Variant Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:59.081786Z\",\"updated_at\":\"2026-04-22T20:15:59.081786Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test Environment Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958", + "queries": [ + "test-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958", + "env-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958" + ] + }, + "type": "environments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/feature-flags/environments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ceb9a94c-ba26-4003-a153-f97fca9b209f\",\"type\":\"environments\",\"attributes\":{\"is_production\":false,\"name\":\"Test Environment Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958\",\"queries\":[\"test-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958\",\"env-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958\"],\"require_feature_flag_approval\":false}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "exposure_schedule": { + "rollout_options": { + "autostart": false, + "selection_interval_ms": 86400000, + "strategy": "UNIFORM_INTERVALS" + }, + "rollout_steps": [ + { + "exposure_ratio": 0.05, + "grouped_step_index": 0, + "interval_ms": null, + "is_pause_record": false + }, + { + "exposure_ratio": 0.25, + "grouped_step_index": 1, + "interval_ms": null, + "is_pause_record": false + }, + { + "exposure_ratio": 1, + "grouped_step_index": 2, + "interval_ms": null, + "is_pause_record": false + } + ] + }, + "guardrail_metrics": [], + "key": "overwrite-allocation-test-update_targeting_rules_for_a_flag_in_an_environment_returns_ok_response-1776888958", + "name": "New targeting rule Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958", + "targeting_rules": [], + "type": "CANARY", + "variant_weights": [ + { + "value": 100, + "variant_id": "fc71eafe-8428-47c5-b381-5c8ab1f92e9d" + } + ] + }, + "type": "allocations" + } + ] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/feature-flags/a0d35980-96a6-4a9e-956f-390407054a69/environments/ceb9a94c-ba26-4003-a153-f97fca9b209f/allocations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"a0348d5c-d9b0-4151-86eb-304de14262cd\",\"type\":\"allocations\",\"attributes\":{\"created_at\":\"2026-04-22T20:16:00.322813054Z\",\"environment_ids\":[\"ceb9a94c-ba26-4003-a153-f97fca9b209f\"],\"experiment_id\":null,\"exposure_schedule\":{\"id\":\"c346b4e1-b6ef-410c-9b07-3a09ce4a6fa2\",\"allocation_id\":\"a0348d5c-d9b0-4151-86eb-304de14262cd\",\"control_variant_id\":null,\"absolute_start_time\":null,\"rollout_options\":{\"strategy\":\"UNIFORM_INTERVALS\",\"autostart\":false,\"selection_interval_ms\":86400000},\"rollout_steps\":[{\"id\":\"f2abe378-e049-4b93-8f13-30aa4d513803\",\"allocation_exposure_schedule_id\":\"c346b4e1-b6ef-410c-9b07-3a09ce4a6fa2\",\"order_position\":0,\"exposure_ratio\":0.05,\"interval_ms\":86400000,\"is_pause_record\":false,\"grouped_step_index\":0,\"created_at\":\"2026-04-22T20:16:00.33066Z\",\"updated_at\":\"2026-04-22T20:16:00.33066Z\"},{\"id\":\"cbcba455-6611-460f-9f67-39b4e179dfb0\",\"allocation_exposure_schedule_id\":\"c346b4e1-b6ef-410c-9b07-3a09ce4a6fa2\",\"order_position\":1,\"exposure_ratio\":0.25,\"interval_ms\":86400000,\"is_pause_record\":false,\"grouped_step_index\":1,\"created_at\":\"2026-04-22T20:16:00.33066Z\",\"updated_at\":\"2026-04-22T20:16:00.33066Z\"},{\"id\":\"b72d37a0-b363-418b-8890-8042fd04bc3d\",\"allocation_exposure_schedule_id\":\"c346b4e1-b6ef-410c-9b07-3a09ce4a6fa2\",\"order_position\":2,\"exposure_ratio\":1,\"interval_ms\":null,\"is_pause_record\":false,\"grouped_step_index\":2,\"created_at\":\"2026-04-22T20:16:00.33066Z\",\"updated_at\":\"2026-04-22T20:16:00.33066Z\"}],\"guardrail_triggers\":[],\"guardrail_triggered_action\":null,\"created_at\":\"2026-04-22T20:16:00.327035Z\",\"updated_at\":\"2026-04-22T20:16:00.327035Z\"},\"guardrail_metrics\":[],\"key\":\"overwrite-allocation-test-update_targeting_rules_for_a_flag_in_an_environment_returns_ok_response-1776888958\",\"name\":\"New targeting rule Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958\",\"order_position\":0,\"targeting_rules\":[],\"type\":\"CANARY\",\"updated_at\":\"2026-04-22T20:16:00.322813054Z\",\"variant_weights\":[{\"id\":\"2a61e0e7-7365-46f6-a582-13d3795a2331\",\"created_at\":\"2026-04-22T20:16:00.337693Z\",\"updated_at\":\"2026-04-22T20:16:00.337693Z\",\"value\":100,\"variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"variant\":{\"id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"key\":\"variant-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958-1\",\"name\":\"Variant Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:59.071764Z\",\"updated_at\":\"2026-04-22T20:15:59.071764Z\"}}]}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/feature-flags/environments/ceb9a94c-ba26-4003-a153-f97fca9b209f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/feature-flags/a0d35980-96a6-4a9e-956f-390407054a69/archive", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a0d35980-96a6-4a9e-956f-390407054a69\",\"type\":\"feature-flags\",\"attributes\":{\"archived_at\":\"2026-04-22T20:16:01.056984Z\",\"created_at\":\"2026-04-22T20:15:59.062012Z\",\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"description\":\"Test feature flag for BDD scenarios\",\"distribution_channel\":\"ALL\",\"feature_flag_environments\":[{\"environment_id\":\"592600c2-8327-424d-960f-608c327ee96d\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774470658\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-73242898aed7\",\"override_allocation_key\":\"allocation-override-73242898aed7\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"809cd83d-51ac-4f60-9ce5-cfad4d662114\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"environment_queries\":[\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\",\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774471346\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-441cf63434d5\",\"override_allocation_key\":\"allocation-override-441cf63434d5\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"21c84268-9fc7-4b6d-82ea-bb2090469aba\",\"environment_name\":\"Test Environment Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"environment_queries\":[\"test-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\",\"env-Test-Typescript-Create_allocation_for_a_flag_in_an_environment_returns_Created_response-1774472385\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-9e0360b0d06e\",\"override_allocation_key\":\"allocation-override-9e0360b0d06e\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"0b94dbaa-9efb-419d-8bd7-ef56f3828986\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773321543\",\"environment_queries\":[\"staging\",\"test\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-8e088e0bab4d\",\"override_allocation_key\":\"allocation-override-8e088e0bab4d\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null},{\"environment_id\":\"afdaa512-6307-4965-bf92-62cc6bea5d00\",\"environment_name\":\"Test Environment Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"environment_queries\":[\"env-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\",\"test-Test-Typescript-Create_an_environment_returns_Created_response-1773322166\"],\"status\":\"DISABLED\",\"default_variant_id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"override_variant_id\":null,\"default_allocation_key\":\"allocation-default-6248561fa516\",\"override_allocation_key\":\"allocation-override-6248561fa516\",\"allocations\":null,\"is_production\":false,\"require_feature_flag_approval\":false,\"pending_suggestion_id\":null}],\"key\":\"test-feature-flag-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958\",\"last_updated_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"name\":\"Test Feature Flag Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958\",\"require_approval\":false,\"staleness_status\":\"ACTIVE\",\"tags\":[],\"updated_at\":\"2026-04-22T20:16:01.056984Z\",\"value_type\":\"BOOLEAN\",\"variants\":[{\"id\":\"fc71eafe-8428-47c5-b381-5c8ab1f92e9d\",\"key\":\"variant-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958-1\",\"name\":\"Variant Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958 A\",\"value\":\"true\",\"created_at\":\"2026-04-22T20:15:59.071764Z\",\"updated_at\":\"2026-04-22T20:15:59.071764Z\"},{\"id\":\"8e69e285-abff-4253-bafd-beba008e9b6f\",\"key\":\"variant-Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958-2\",\"name\":\"Variant Test-Update_targeting_rules_for_a_flag_in_an_environment_returns_OK_response-1776888958 B\",\"value\":\"false\",\"created_at\":\"2026-04-22T20:15:59.081786Z\",\"updated_at\":\"2026-04-22T20:15:59.081786Z\"}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update targeting rules for a flag in an environment returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/forms.json b/test-server-data/v2/forms.json new file mode 100644 index 0000000000..7e47de198f --- /dev/null +++ b/test-server-data/v2/forms.json @@ -0,0 +1,1100 @@ +{ + "feature": "Forms", + "recordings": [ + { + "feature": "Forms", + "frozen_at": "2026-06-10T18:49:58.475Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Copy of My Form" + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms/00000000-0000-0000-0000-000000000001/clone", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"32db2695-29bd-4280-b547-3737365608c3\",\"title\":\"form not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Clone a form returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-04T18:34:02.931Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A form to collect user feedback.", + "idp_survey": false, + "name": "User Feedback Form", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"edb7d6d5-e21c-4fd0-845d-679317b5c2c9\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-04T18:34:04.103183Z\",\"datastore_config\":{\"datastore_id\":\"7cc8dadd-3529-4d0f-b8cb-f8c11c165867\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A form to collect user feedback.\",\"idp_survey\":false,\"modified_at\":\"2026-06-04T18:34:04.103183Z\",\"name\":\"User Feedback Form\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"354653\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1780598044,\\\\\\\"proof\\\\\\\":\\\\\\\"MGQCMHsaS9oy6ZDzhUZuJQAYiivxgo9XKx5NjTW/0wafPecXBQ3lr27bKejXr4ihAuwxsgIwPfgedZacZ4t3Qg8p0+jrXH5MBdZx9hrat8mijVibYuLUd2n+bxaY0xcghHKwbtu4\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-04T18:34:04.103183Z\",\"modified_at\":\"2026-06-04T18:34:04.103183Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/edb7d6d5-e21c-4fd0-845d-679317b5c2c9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"edb7d6d5-e21c-4fd0-845d-679317b5c2c9\",\"type\":\"forms\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-04T18:34:04.703Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A form to collect user feedback.", + "idp_survey": false, + "name": "User Feedback Form", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms/create_and_publish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"65318f43-ac0f-4990-add8-9847eee98fd8\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-04T18:34:05.178222Z\",\"datastore_config\":{\"datastore_id\":\"c89fc16a-53fb-4439-a007-1ebec095b1b7\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A form to collect user feedback.\",\"idp_survey\":false,\"modified_at\":\"2026-06-04T18:34:05.178222Z\",\"name\":\"User Feedback Form\",\"org_id\":321813,\"publication\":{\"id\":\"357922\",\"org_id\":321813,\"form_id\":\"65318f43-ac0f-4990-add8-9847eee98fd8\",\"publish_seq\":1,\"form_version\":1,\"created_at\":\"2026-06-04T18:34:05.178222Z\",\"modified_at\":\"2026-06-04T18:34:05.178222Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"354654\",\"state\":\"frozen\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1780598045,\\\\\\\"proof\\\\\\\":\\\\\\\"MGYCMQCPPczYtNvj1RLjrQkIrQNHHVgB3nxFIjn5jgwUE0tweuTV1kZnaYYUg+gl1Eh5+tMCMQCajq1cy1MaWEbzHA0EcDC6LjyQ5ajqqngb3RMQwzP8ewvsh+uzkPD2v6AHjnW115o=\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-04T18:34:05.178222Z\",\"modified_at\":\"2026-06-04T18:34:05.178222Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/65318f43-ac0f-4990-add8-9847eee98fd8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"65318f43-ac0f-4990-add8-9847eee98fd8\",\"type\":\"forms\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create and publish a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-10T18:49:59.498Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "data_definition": { + "description": "Welcome to the Engineering Experience Survey.", + "required": [], + "title": "Developer Experience Survey", + "type": "object" + }, + "state": "frozen", + "ui_definition": { + "ui:order": [], + "ui:theme": { + "primaryColor": "gray" + } + }, + "upsert_params": { + "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d", + "insert_only": false, + "match_policy": "none" + } + }, + "type": "form_versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms/00000000-0000-0000-0000-000000000001/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"f24e2ab1-4ba1-48cf-a4a2-86a32cc2e702\",\"title\":\"form not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create or update a form version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-10T18:49:59.826Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A simple test form.", + "idp_survey": false, + "name": "Test-Create_or_update_a_form_version_returns_OK_response-1781117399", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"49ccfa97-825c-46f8-872b-5368fd1b56a4\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-10T18:50:00.188982Z\",\"datastore_config\":{\"datastore_id\":\"be7e7cf5-6a73-4d07-9654-a40997bee800\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-10T18:50:00.188982Z\",\"name\":\"Test-Create_or_update_a_form_version_returns_OK_response-1781117399\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"376765\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"S2KAuCoip8JbyZNOT2gYbpUouidttEGvYWyvqeoMQjE=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1781117400,\\\\\\\"proof\\\\\\\":\\\\\\\"MGUCMQDyae03EWzAe3gENsZt4WVLiPP8TGQg7UO7I28dcEK5w70MRYRf9x18lDXfOEDoPrgCMCHlQeXp/K5AKKmyVYwtJd9VI1SsJoOBOXbj26BhPKZBF386oH7LxK45J12htxj9hw==\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-10T18:50:00.188982Z\",\"modified_at\":\"2026-06-10T18:50:00.188982Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "data_definition": { + "description": "Welcome to the Engineering Experience Survey.", + "required": [], + "title": "Developer Experience Survey", + "type": "object" + }, + "state": "frozen", + "ui_definition": { + "ui:order": [], + "ui:theme": { + "primaryColor": "gray" + } + }, + "upsert_params": { + "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d", + "insert_only": false, + "match_policy": "none" + } + }, + "type": "form_versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms/49ccfa97-825c-46f8-872b-5368fd1b56a4/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"376765\",\"type\":\"form_versions\",\"attributes\":{\"created_at\":\"2026-06-10T18:50:00.188982Z\",\"data_definition\":{\"description\":\"Welcome to the Engineering Experience Survey.\",\"required\":[],\"title\":\"Developer Experience Survey\",\"type\":\"object\"},\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1781117400,\\\\\\\"proof\\\\\\\":\\\\\\\"MGQCMGbAihRvSVO+KjM9uttjprG+2ZR6D5kKoXwIS4em5mjg9StXgu/pi08NfU4WMdTD8wIwcxxGWh+MzG6awNnii2Cjl46YNhPBV39JpU03mlQsb+9cGVgqL2JYVsDaAJ0G+YzN\\\\\\\"}\\\",\\\"version\\\":1}\",\"etag\":\"30586851d6ab0b26080d3f34629e5e2cfb9f2f57457eec927b72eafefae81e48\",\"modified_at\":\"2026-06-10T18:50:00.568923Z\",\"state\":\"frozen\",\"ui_definition\":{\"ui:order\":[],\"ui:theme\":{\"primaryColor\":\"gray\"}},\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/49ccfa97-825c-46f8-872b-5368fd1b56a4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"49ccfa97-825c-46f8-872b-5368fd1b56a4\",\"type\":\"forms\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create or update a form version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-04T18:34:05.786Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A simple test form.", + "idp_survey": false, + "name": "Test-Delete_a_form_returns_OK_response-1780598045", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"257a9d32-6ed0-429b-9745-75366363caf3\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-04T18:34:06.128238Z\",\"datastore_config\":{\"datastore_id\":\"1e33b83f-0733-454e-9404-c032a479548e\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-04T18:34:06.128238Z\",\"name\":\"Test-Delete_a_form_returns_OK_response-1780598045\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"354655\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1780598046,\\\\\\\"proof\\\\\\\":\\\\\\\"MGQCMDR3p4Wc6qLinT0JK9tT2I3NBvYMx43pPcUuCOyMapne99sS2RJe0woOU68I0GbQvwIwQMw7OQruNsIuTNJxK0zthVCFnXaxLASIvl2NsyomT9s/p2cgEzOY4T+XyRl6i27c\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-04T18:34:06.128238Z\",\"modified_at\":\"2026-06-04T18:34:06.128238Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/257a9d32-6ed0-429b-9745-75366363caf3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"257a9d32-6ed0-429b-9745-75366363caf3\",\"type\":\"forms\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/257a9d32-6ed0-429b-9745-75366363caf3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Delete a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-04T18:34:06.925Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/forms/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"bccf11bd-13c7-4911-9c00-58c00b6f8f52\",\"title\":\"form not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a form returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-04T18:34:07.294Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A simple test form.", + "idp_survey": false, + "name": "Test-Get_a_form_returns_OK_response-1780598047", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b42493d4-fbd0-4139-b4b9-4815f414621d\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-04T18:34:07.632566Z\",\"datastore_config\":{\"datastore_id\":\"9aace6ce-ee9d-4c81-b176-22bed53ff080\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-04T18:34:07.632566Z\",\"name\":\"Test-Get_a_form_returns_OK_response-1780598047\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"354656\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1780598047,\\\\\\\"proof\\\\\\\":\\\\\\\"MGUCMQCkP+Usa2zK0v4SsSDBHsE4p88u025oyaRrAnNTiTXLwGr3K0W4/MAFeeosBwZonE0CMGYsqH/GAJUKeY0ZZGl8GZp2QeY1l3byimzWXRLf36CHhuB1Pshv/7bi0WoYYCOQIg==\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-04T18:34:07.632566Z\",\"modified_at\":\"2026-06-04T18:34:07.632566Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/forms/b42493d4-fbd0-4139-b4b9-4815f414621d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b42493d4-fbd0-4139-b4b9-4815f414621d\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-04T18:34:07.632566Z\",\"datastore_config\":{\"datastore_id\":\"9aace6ce-ee9d-4c81-b176-22bed53ff080\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-04T18:34:07.632566Z\",\"name\":\"Test-Get_a_form_returns_OK_response-1780598047\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"354656\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1780598047,\\\\\\\"proof\\\\\\\":\\\\\\\"MGUCMQCkP+Usa2zK0v4SsSDBHsE4p88u025oyaRrAnNTiTXLwGr3K0W4/MAFeeosBwZonE0CMGYsqH/GAJUKeY0ZZGl8GZp2QeY1l3byimzWXRLf36CHhuB1Pshv/7bi0WoYYCOQIg==\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-04T18:34:07.632566Z\",\"modified_at\":\"2026-06-04T18:34:07.632566Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/b42493d4-fbd0-4139-b4b9-4815f414621d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b42493d4-fbd0-4139-b4b9-4815f414621d\",\"type\":\"forms\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-04T18:34:08.479Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A simple test form.", + "idp_survey": false, + "name": "Test-List_forms_returns_OK_response-1780598048", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d71d1aef-539d-4951-b98e-ff4c0c4f97bb\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-04T18:34:08.937305Z\",\"datastore_config\":{\"datastore_id\":\"76b9f7b4-99d8-4a55-b95c-260cac22820d\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-04T18:34:08.937305Z\",\"name\":\"Test-List_forms_returns_OK_response-1780598048\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"354657\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1780598048,\\\\\\\"proof\\\\\\\":\\\\\\\"MGUCMBSAXvYX++PAyywDBLlJsqgHq1ug3WLtMqKQRwx50qdAdj1UP1W58NnN9/DP70HavAIxANwA4guivHrOqlL36ETzde//0mI55MJ8Yv0ynU2p+QhqCSuJEHHgUUWjk0wYKJuZog==\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-04T18:34:08.937305Z\",\"modified_at\":\"2026-06-04T18:34:08.937305Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/forms", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"7af864d6-8c2f-41e5-b80d-1be56ea33d23\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-04T18:05:41.512876Z\",\"datastore_config\":{\"datastore_id\":\"543a7e0e-0f0f-4b14-8911-2f20df5f1b07\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A form to collect user feedback.\",\"idp_survey\":false,\"modified_at\":\"2026-06-04T18:05:41.512876Z\",\"name\":\"User Feedback Form\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":1445416,\"user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"b2953c07-9385-4de2-9cd3-af3f5d6c7d09\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-04T18:15:44.116619Z\",\"datastore_config\":{\"datastore_id\":\"77b4b384-27d6-4619-bb55-1b2158d0080b\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A form to collect user feedback.\",\"idp_survey\":false,\"modified_at\":\"2026-06-04T18:15:44.116619Z\",\"name\":\"User Feedback Form\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":1445416,\"user_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},{\"id\":\"d71d1aef-539d-4951-b98e-ff4c0c4f97bb\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-04T18:34:08.937305Z\",\"datastore_config\":{\"datastore_id\":\"76b9f7b4-99d8-4a55-b95c-260cac22820d\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-04T18:34:08.937305Z\",\"name\":\"Test-List_forms_returns_OK_response-1780598048\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/d71d1aef-539d-4951-b98e-ff4c0c4f97bb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d71d1aef-539d-4951-b98e-ff4c0c4f97bb\",\"type\":\"forms\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List forms returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-10T18:50:01.064Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "version": 1 + }, + "type": "form_publications" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms/00000000-0000-0000-0000-000000000001/publish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"890f7bea-c0e2-45f9-a06a-e3214a19be57\",\"title\":\"form not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Publish a form version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-10T18:50:01.393Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A simple test form.", + "idp_survey": false, + "name": "Test-Publish_a_form_version_returns_OK_response-1781117401", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c73796e4-0dd3-4da4-8a9a-9297ba412b3e\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-10T18:50:01.747408Z\",\"datastore_config\":{\"datastore_id\":\"23249c30-b740-4a4b-8c23-34fb653dfdea\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-10T18:50:01.747408Z\",\"name\":\"Test-Publish_a_form_version_returns_OK_response-1781117401\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"376767\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1781117401,\\\\\\\"proof\\\\\\\":\\\\\\\"MGYCMQCE98ZIPD8JYrsEi1xXxe+8SVCjLroQbr+RRxKDmhfT++nN4tdcUXYYNtpNJDundgwCMQDG5TdraksHELR6ovN9xQtacfKq3wr2rKAIejh6Ut7m+jO5dmLml90pBOQMnAFXed4=\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-10T18:50:01.747408Z\",\"modified_at\":\"2026-06-10T18:50:01.747408Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "version": 1 + }, + "type": "form_publications" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms/c73796e4-0dd3-4da4-8a9a-9297ba412b3e/publish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"380020\",\"type\":\"form_publications\",\"attributes\":{\"created_at\":\"2026-06-10T18:50:02.131227Z\",\"form_id\":\"c73796e4-0dd3-4da4-8a9a-9297ba412b3e\",\"form_version\":1,\"modified_at\":\"2026-06-10T18:50:02.131227Z\",\"org_id\":321813,\"publish_seq\":1,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/c73796e4-0dd3-4da4-8a9a-9297ba412b3e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c73796e4-0dd3-4da4-8a9a-9297ba412b3e\",\"type\":\"forms\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Publish a form version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-10T18:50:02.747Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "form_update": { + "datastore_config": { + "datastore_id": "5108ea24-dd83-4696-9caa-f069f73d0fad", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "description": "An updated description.", + "name": "Updated Form Name" + } + }, + "id": "22f6006a-2302-4926-9396-d2dfcf7b0b34", + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/forms/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"c5564241-69a8-4a9e-af78-20c7913fbf5b\",\"title\":\"form not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a form returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-10T18:50:03.118Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A simple test form.", + "idp_survey": false, + "name": "Test-Update_a_form_returns_OK_response-1781117403", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a365c4e1-5c1f-476f-9330-091fe52a6483\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-10T18:50:03.541399Z\",\"datastore_config\":{\"datastore_id\":\"ec62b00b-6683-4943-8bd0-28d56f5dca64\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-10T18:50:03.541399Z\",\"name\":\"Test-Update_a_form_returns_OK_response-1781117403\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"376768\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1781117403,\\\\\\\"proof\\\\\\\":\\\\\\\"MGUCMFvO8GziqWVPfIg06kFsX3mHcT5e/Ub8cJ/9H1oJXqCp56oL/IRLCI351BB2xHXTFAIxALOhp9M+jw87Xn+Qvl//9uiS011jgg6a8e0UftJ1NY+G/ycp/aLzZrFKaBCt6RG8sA==\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-10T18:50:03.541399Z\",\"modified_at\":\"2026-06-10T18:50:03.541399Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "form_update": { + "datastore_config": { + "datastore_id": "5108ea24-dd83-4696-9caa-f069f73d0fad", + "primary_column_name": "id", + "primary_key_generation_strategy": "none" + }, + "description": "An updated description.", + "name": "Updated Form Name" + } + }, + "id": "22f6006a-2302-4926-9396-d2dfcf7b0b34", + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/forms/a365c4e1-5c1f-476f-9330-091fe52a6483", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a365c4e1-5c1f-476f-9330-091fe52a6483\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-10T18:50:03.541399Z\",\"datastore_config\":{\"datastore_id\":\"5108ea24-dd83-4696-9caa-f069f73d0fad\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"An updated description.\",\"idp_survey\":false,\"modified_at\":\"2026-06-10T18:50:03.926234Z\",\"name\":\"Updated Form Name\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"376768\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1781117403,\\\\\\\"proof\\\\\\\":\\\\\\\"MGUCMFvO8GziqWVPfIg06kFsX3mHcT5e/Ub8cJ/9H1oJXqCp56oL/IRLCI351BB2xHXTFAIxALOhp9M+jw87Xn+Qvl//9uiS011jgg6a8e0UftJ1NY+G/ycp/aLzZrFKaBCt6RG8sA==\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-10T18:50:03.541399Z\",\"modified_at\":\"2026-06-10T18:50:03.541399Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/a365c4e1-5c1f-476f-9330-091fe52a6483", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a365c4e1-5c1f-476f-9330-091fe52a6483\",\"type\":\"forms\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a form returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-11T15:57:52.090Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "data_definition": { + "description": "Welcome to the Engineering Experience Survey.", + "required": [], + "title": "Developer Experience Survey", + "type": "object" + }, + "ui_definition": { + "ui:order": [], + "ui:theme": { + "primaryColor": "gray" + } + }, + "upsert_params": { + "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d" + } + }, + "type": "form_versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms/00000000-0000-0000-0000-000000000001/versions/upsert_and_publish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"id\":\"08399bf1-1d71-4160-bc73-e858e01fde0f\",\"title\":\"form not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Upsert and publish a form version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Forms", + "frozen_at": "2026-06-11T15:57:52.936Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "anonymous": false, + "data_definition": {}, + "description": "A simple test form.", + "idp_survey": false, + "name": "Test-Upsert_and_publish_a_form_version_returns_OK_response-1781193472", + "single_response": false, + "ui_definition": {} + }, + "type": "forms" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"25824ea9-3c52-4f43-8539-a2d4cd7f9a3b\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-11T15:57:53.185492Z\",\"datastore_config\":{\"datastore_id\":\"37899277-a526-4668-966b-e26a258347a4\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-11T15:57:53.185492Z\",\"name\":\"Test-Upsert_and_publish_a_form_version_returns_OK_response-1781193472\",\"org_id\":321813,\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"380435\",\"state\":\"draft\",\"version\":1,\"etag\":\"b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"S2KAuCoip8JbyZNOT2gYbpUouidttEGvYWyvqeoMQjE=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1781193473,\\\\\\\"proof\\\\\\\":\\\\\\\"MGUCMQD5kghzucjG+znH/JVQhgs9+82KuT/veBwvMPxHafCX3toxbVfSadP16IDWljuo2SYCMFjmS1y3rcGEBUCajP/BE82sUdc9L8jxA57Jz6lvCsuDKC7BfFYVq2FjSrj19aS9Pg==\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{},\"ui_definition\":{},\"created_at\":\"2026-06-11T15:57:53.185492Z\",\"modified_at\":\"2026-06-11T15:57:53.185492Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "data_definition": { + "description": "Welcome to the Engineering Experience Survey.", + "required": [], + "title": "Developer Experience Survey", + "type": "object" + }, + "ui_definition": { + "ui:order": [], + "ui:theme": { + "primaryColor": "gray" + } + }, + "upsert_params": { + "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d" + } + }, + "type": "form_versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/forms/25824ea9-3c52-4f43-8539-a2d4cd7f9a3b/versions/upsert_and_publish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"25824ea9-3c52-4f43-8539-a2d4cd7f9a3b\",\"type\":\"forms\",\"attributes\":{\"active\":true,\"anonymous\":false,\"created_at\":\"2026-06-11T15:57:53.185492Z\",\"datastore_config\":{\"datastore_id\":\"37899277-a526-4668-966b-e26a258347a4\",\"primary_column_name\":\"id\",\"primary_key_generation_strategy\":\"none\"},\"description\":\"A simple test form.\",\"idp_survey\":false,\"modified_at\":\"2026-06-11T15:57:53.185492Z\",\"name\":\"Test-Upsert_and_publish_a_form_version_returns_OK_response-1781193472\",\"org_id\":321813,\"publication\":{\"id\":\"383651\",\"org_id\":321813,\"form_id\":\"25824ea9-3c52-4f43-8539-a2d4cd7f9a3b\",\"publish_seq\":1,\"form_version\":1,\"created_at\":\"2026-06-11T15:57:53.39063Z\",\"modified_at\":\"2026-06-11T15:57:53.39063Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"self_service\":false,\"single_response\":false,\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"version\":{\"id\":\"380435\",\"state\":\"frozen\",\"version\":1,\"etag\":\"30586851d6ab0b26080d3f34629e5e2cfb9f2f57457eec927b72eafefae81e48\",\"definition_signature\":\"{\\\"signature\\\":\\\"{\\\\\\\"version\\\\\\\":2,\\\\\\\"algorithm\\\\\\\":\\\\\\\"ecdsa-p384\\\\\\\",\\\\\\\"pubkey\\\\\\\":\\\\\\\"XOOWpRG1rFvaLHaG9qLf+GG78llET0BKnZtokyAtLfg=\\\\\\\",\\\\\\\"timestamp\\\\\\\":1781193473,\\\\\\\"proof\\\\\\\":\\\\\\\"MGUCMQCtGifKZr+EjEtnFk2ZKxy0DThB02mQ5wMJ3vB5L7zgTpHR+6k38mxLM1CqP2YFeQgCMHL7aBH2pJzR7yrv2YvaWNnv2puOld4laoRAWzCcuHgxHVWnp7wEcrvebyDbNej+2g==\\\\\\\"}\\\",\\\"version\\\":1}\",\"data_definition\":{\"description\":\"Welcome to the Engineering Experience Survey.\",\"required\":[],\"title\":\"Developer Experience Survey\",\"type\":\"object\"},\"ui_definition\":{\"ui:order\":[],\"ui:theme\":{\"primaryColor\":\"gray\"}},\"created_at\":\"2026-06-11T15:57:53.185492Z\",\"modified_at\":\"2026-06-11T15:57:53.39063Z\",\"user_id\":2320499,\"user_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/forms/25824ea9-3c52-4f43-8539-a2d4cd7f9a3b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"25824ea9-3c52-4f43-8539-a2d4cd7f9a3b\",\"type\":\"forms\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Upsert and publish a form version returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/gcp-integration.json b/test-server-data/v2/gcp-integration.json new file mode 100644 index 0000000000..9455da1a7e --- /dev/null +++ b/test-server-data/v2/gcp-integration.json @@ -0,0 +1,896 @@ +{ + "feature": "GCP Integration", + "recordings": [ + { + "feature": "GCP Integration", + "frozen_at": "2023-05-18T15:02:26.265Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/sts_delegate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_sts_delegate\",\"attributes\":{\"delegate_account_email\":\"ddgci-b5ee8760a0ff148b3056@datadog-cloud-ints-staging.iam.gserviceaccount.com\"},\"id\":\"ddgci-b5ee8760a0ff148b3056@datadog-cloud-ints-staging.iam.gserviceaccount.com\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a Datadog GCP principal returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2023-05-25T17:14:37.896Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": {} + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/sts_delegate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_sts_delegate\",\"attributes\":{\"delegate_account_email\":\"ddgci-b5ee8760a0ff148b3056@datadog-cloud-ints-staging.iam.gserviceaccount.com\"},\"id\":\"ddgci-b5ee8760a0ff148b3056@datadog-cloud-ints-staging.iam.gserviceaccount.com\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a Datadog GCP principal with empty body returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:20.859Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-8b2b196dd4bab7e2@test-project.iam.gserviceaccount.com", + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"client_email\":\"Test-8b2b196dd4bab7e2@test-project.iam.gserviceaccount.com\",\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"cloud_run_revision_filters\":[],\"automute\":false,\"is_cspm_enabled\":false,\"account_tags\":[],\"host_filters\":[]},\"id\":\"e6f0237e-b9c2-4513-9940-d2473502e39e\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/e6f0237e-b9c2-4513-9940-d2473502e39e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new entry for your service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:22.769Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "account_tags": [ + "lorem", + "ipsum" + ], + "client_email": "Test-e5f8eebedfc95a5e@test-project.iam.gserviceaccount.com", + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"cloud_run_revision_filters\":[],\"is_security_command_center_enabled\":false,\"host_filters\":[],\"client_email\":\"Test-e5f8eebedfc95a5e@test-project.iam.gserviceaccount.com\",\"automute\":false},\"id\":\"62f1287b-89d6-414d-8b80-713208d91299\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/62f1287b-89d6-414d-8b80-713208d91299", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new entry for your service account with account_tags returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:23.464Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-1701e5fecd52895c@test-project.iam.gserviceaccount.com", + "cloud_run_revision_filters": [ + "meh:bleh" + ], + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"id\":\"58054a77-4ee0-44a8-8260-4eec67ddcced\",\"attributes\":{\"is_cspm_enabled\":false,\"automute\":false,\"is_security_command_center_enabled\":false,\"client_email\":\"Test-1701e5fecd52895c@test-project.iam.gserviceaccount.com\",\"resource_collection_enabled\":false,\"account_tags\":[],\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/58054a77-4ee0-44a8-8260-4eec67ddcced", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new entry for your service account with cloud run revision filters enabled returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:24.085Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-e7179b69d4d565ed@test-project.iam.gserviceaccount.com", + "host_filters": [], + "is_cspm_enabled": true, + "resource_collection_enabled": true + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"is_cspm_enabled\":true,\"host_filters\":[],\"resource_collection_enabled\":true,\"cloud_run_revision_filters\":[],\"client_email\":\"Test-e7179b69d4d565ed@test-project.iam.gserviceaccount.com\",\"automute\":false,\"is_security_command_center_enabled\":false,\"account_tags\":[]},\"id\":\"9d359745-b1c0-41ba-9624-db7abb36904b\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/9d359745-b1c0-41ba-9624-db7abb36904b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new entry for your service account with cspm enabled returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:24.676Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-f92057aa6491025d@test-project.iam.gserviceaccount.com", + "host_filters": [], + "is_cspm_enabled": true, + "resource_collection_enabled": false + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Resource Collection must be enabled for CSM to be enabled\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new entry for your service account with resource collection enabled disabled and cspm enabled returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:24.798Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-c8176325bf516421@test-project.iam.gserviceaccount.com", + "host_filters": [], + "resource_collection_enabled": true + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"is_cspm_enabled\":false,\"automute\":false,\"cloud_run_revision_filters\":[],\"host_filters\":[],\"is_security_command_center_enabled\":false,\"account_tags\":[],\"resource_collection_enabled\":true,\"client_email\":\"Test-c8176325bf516421@test-project.iam.gserviceaccount.com\"},\"id\":\"584395b0-91b7-4ac0-83b2-3259a49ea34f\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/584395b0-91b7-4ac0-83b2-3259a49ea34f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new entry for your service account with resource collection enabled returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-10-07T20:25:02.725Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-d119bc7c8439bcb5@test-project.iam.gserviceaccount.com", + "host_filters": [], + "is_resource_change_collection_enabled": true, + "is_security_command_center_enabled": true + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"client_email\":\"Test-d119bc7c8439bcb5@test-project.iam.gserviceaccount.com\",\"cloud_run_revision_filters\":[],\"host_filters\":[],\"automute\":false,\"resource_collection_enabled\":true,\"account_tags\":[],\"is_security_command_center_enabled\":true,\"is_resource_change_collection_enabled\":true,\"is_cspm_enabled\":false},\"id\":\"abdfa7a0-64b7-437d-99fe-13f56bbbfb15\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/abdfa7a0-64b7-437d-99fe-13f56bbbfb15", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new entry for your service account with security command center enabled returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:25.917Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-bd3cfbaa8e662e9c@example.com", + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"automute\":false,\"cloud_run_revision_filters\":[],\"is_cspm_enabled\":false,\"account_tags\":[],\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"client_email\":\"Test-bd3cfbaa8e662e9c@example.com\",\"host_filters\":[]},\"id\":\"f13432c1-353c-42d2-bcdd-6b535baf2c6b\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"example-service-account@static-test-email.datadoghq.com\"},\"id\":\"2596b31f-4e6c-4d42-8df1-ee76dadf6bc7\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"187567668125ec65_1709791417@example.com\"},\"id\":\"34d4ecf8-e8e6-43cf-947f-4d0245bba1ee\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"e6c5436be66c06a6@test-project.iam.gserviceaccount.com\"},\"id\":\"45113458-8ab4-4111-b3e4-95ea6ac192c1\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"c4ad5a99cf7ffde4@test-project.iam.gserviceaccount.com\"},\"id\":\"3464c171-5e56-4466-9172-2b1d17f32b34\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"068400b85cd893c1@test-project.iam.gserviceaccount.com\"},\"id\":\"3d071308-d9bd-47f1-845e-7b12588131ef\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"merp:derp\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"c7af83955eccd7a5_1710043232@example.com\"},\"id\":\"b10aa3fb-3c90-4111-8dec-c52e89501f6c\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"7ecf31f03ee7ae2c@test-project.iam.gserviceaccount.com\"},\"id\":\"af51c993-5b07-43ec-84a8-2c3720818588\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"eb67e49305fe222b_1709921006@test-project.iam.gserviceaccount.com\"},\"id\":\"8f0b790b-6f68-46ac-83d3-5adcfb84ca47\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"b492dabd8a30fbb8@test-project.iam.gserviceaccount.com\"},\"id\":\"d0ff9676-7852-45ed-bdf4-867956d101eb\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"08c9559e80fc3b89@test-project.iam.gserviceaccount.com\"},\"id\":\"c18e97c4-3d47-4c91-a082-a439a8b08f72\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"8c22d202126f7039@test-project.iam.gserviceaccount.com\"},\"id\":\"005a94a3-215f-4d89-b17b-53806308dc92\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"30069f88b2fa87bc@test-project.iam.gserviceaccount.com\"},\"id\":\"e90d31c9-d0a2-44f8-ba2f-26f130c8fd54\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"5b2abbbf5cf3178d@test-project.iam.gserviceaccount.com\"},\"id\":\"61a40e52-c78f-43de-b537-ccac9aeeb740\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"934d17353d9ad878@example.com\"},\"id\":\"76d0a9c2-6dfa-43fe-b4ef-2f74ff30e2dc\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"0d59d038c81393af_1710180209@test-project.iam.gserviceaccount.com\"},\"id\":\"c035ad26-066c-42b7-9cda-139f6f8e5b0c\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"17fc11d04db7bab3@test-project.iam.gserviceaccount.com\"},\"id\":\"6e329517-c39b-42ce-9ccc-14ae4e4344c1\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"a18090579602565c_1710180228@test-project.iam.gserviceaccount.com\"},\"id\":\"d3452923-a0a4-44bf-b24c-48e462be351e\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"service-account@iam-service-google.com\"},\"id\":\"35636117-c773-4a19-92aa-bf26f08c19c8\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"0d59d038c81393af_1710050610@test-project.iam.gserviceaccount.com\"},\"id\":\"0fc9d206-40a9-4a89-829c-90576a1645af\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"4a8fdb7ff3a9490d_1710050623@test-project.iam.gserviceaccount.com\"},\"id\":\"01f2b8c6-75b8-4ae6-bb56-010b7ee7ec13\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"f427b1576583da8b@test-project.iam.gserviceaccount.com\"},\"id\":\"5108ab24-8db2-464c-9fdd-c2d44b9231b3\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"eb67e49305fe222b_1709993006@test-project.iam.gserviceaccount.com\"},\"id\":\"a3676325-b1c8-4750-9903-ff0173b33973\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"0d59d038c81393af_1709748209@test-project.iam.gserviceaccount.com\"},\"id\":\"627119e7-8d06-4bd5-9dea-c071a6f5190c\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"a18090579602565c_1709935431@test-project.iam.gserviceaccount.com\"},\"id\":\"28413658-4724-49fb-a9ee-f83ca2bff971\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[\"foo:bar\"],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"c55e4905f4ea06f7_1709373818@example.com\"},\"id\":\"bef26a45-3c5b-49f7-8a51-283451aa2b29\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"Test-e5f8eebedfc95a5e@test-project.iam.gserviceaccount.com\"},\"id\":\"62f1287b-89d6-414d-8b80-713208d91299\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"Test-c8176325bf516421@test-project.iam.gserviceaccount.com\"},\"id\":\"584395b0-91b7-4ac0-83b2-3259a49ea34f\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"Test-48d87b38c858a0ef@test-project.iam.gserviceaccount.com\"},\"id\":\"0edb7a57-bd74-49da-ba0c-77d3cc756950\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"Test-bd3cfbaa8e662e9c@example.com\"},\"id\":\"f13432c1-353c-42d2-bcdd-6b535baf2c6b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"276af15de14e5c19@test-project.iam.gserviceaccount.com\"},\"id\":\"3c6bc165-a35a-4d40-9a3f-9fa1a42d2efb\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"189c5087132e3354@test-project.iam.gserviceaccount.com\"},\"id\":\"ad8a0506-3034-40f7-adf5-1a2a99b2e5cb\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"f28613b0e6b1a969@test-project.iam.gserviceaccount.com\"},\"id\":\"76a956f4-955d-4079-baaf-62b7f515f5e6\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"e85cd4af47bc5b8f_1709812832@test-project.iam.gserviceaccount.com\"},\"id\":\"be208bd5-ddba-445e-8d73-b75045283bb0\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"04ddfacf9efcc1bd@test-project.iam.gserviceaccount.com\"},\"id\":\"e485b787-234f-4a23-9960-9ac361ac46a0\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"da8d72278fe1d2a1@test-project.iam.gserviceaccount.com\"},\"id\":\"25204ea4-a6f0-4195-bc56-1b2487cc1ead\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"4ef62d1716094f4a@test-project.iam.gserviceaccount.com\"},\"id\":\"2fa93a40-9d1a-4699-8ccb-b216f46bddf4\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"44eac2ba7a7651e6@test-project.iam.gserviceaccount.com\"},\"id\":\"e99f7053-0cd9-47fb-893f-4eca62cdfc81\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"102753916d24109d@test-project.iam.gserviceaccount.com\"},\"id\":\"beefe1c5-103b-47bf-abee-fbf94960e1cf\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"14b5305a9b1ed176@test-project.iam.gserviceaccount.com\"},\"id\":\"54d490d5-8837-4c9c-b83c-80327ca90168\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"2172d124c0606f4f@test-project.iam.gserviceaccount.com\"},\"id\":\"c5534322-ede4-4749-9c1a-f35e8471bbe7\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"4713ec0096515bed@test-project.iam.gserviceaccount.com\"},\"id\":\"86c293bb-5d82-4229-a8f8-8ea32dd21046\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"1ecfb5aec5e00f39@test-project.iam.gserviceaccount.com\"},\"id\":\"51890bde-d482-4d5a-abbe-b14cbe40f4db\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"7848a82a0fe98917@test-project.iam.gserviceaccount.com\"},\"id\":\"e919a192-f87d-4a2e-8d2f-73353ac22ffc\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"3e800ded14d13465@test-project.iam.gserviceaccount.com\"},\"id\":\"ef8bcbb5-c313-421c-b495-e1b299ff9cf2\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"5f9b7739b74dda84@test-project.iam.gserviceaccount.com\"},\"id\":\"1df2979b-8e83-41b9-a503-e2a01a61066f\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"7693467192436dbe@test-project.iam.gserviceaccount.com\"},\"id\":\"fe5739c5-0155-45c8-9293-60c0106cf5ec\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"9534f9bd684944aa@test-project.iam.gserviceaccount.com\"},\"id\":\"038d0dc8-a24e-4d66-8b12-ae3c92173500\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"20ee848e08935ddd@test-project.iam.gserviceaccount.com\"},\"id\":\"a31e9694-806a-4b42-8a21-d5a5057b816a\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"3ceda3e3f06399de_1709345029@example.com\"},\"id\":\"2687f000-d448-4b86-9619-315e14a0bcb1\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"eb67e49305fe222b_1710065006@test-project.iam.gserviceaccount.com\"},\"id\":\"debd4133-a46b-4426-9ea8-da0b24e8139b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"0d59d038c81393af_1710065008@test-project.iam.gserviceaccount.com\"},\"id\":\"7a88b578-9562-46b3-bd1f-1197e30a5de7\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"a18090579602565c_1710065032@test-project.iam.gserviceaccount.com\"},\"id\":\"ebd23f03-9987-42f9-a85e-5776e2d1f4b5\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"a18090579602565c_1710007428@test-project.iam.gserviceaccount.com\"},\"id\":\"01caa1a8-b6e6-406a-914f-eb63a0308e6e\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"187567668125ec65_1709575417@example.com\"},\"id\":\"78b151a4-d948-4066-bc82-613dc06d13f6\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"d822132e43502a2f@test-project.iam.gserviceaccount.com\"},\"id\":\"9b9e1460-609c-4523-bf27-8e5835783395\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"256023502919a626@test-project.iam.gserviceaccount.com\"},\"id\":\"5d907b45-bd20-4ee2-b4d3-d8a9a12168a9\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"579353cd037b75fc@test-project.iam.gserviceaccount.com\"},\"id\":\"29268104-c207-4107-a97f-abe0cc21f1de\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"f4699e487ba43362@test-project.iam.gserviceaccount.com\"},\"id\":\"3d22aa58-558c-458b-bb62-7854ee6603f9\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"f485721b1d7586a7@test-project.iam.gserviceaccount.com\"},\"id\":\"4f1a87ee-f962-4c6b-818f-6522d84cf1a1\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[\"foo:bar\"],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"c55e4905f4ea06f7_1709388218@example.com\"},\"id\":\"b6eb2295-8e16-45e5-905c-14375832e14b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"3ceda3e3f06399de_1709388228@example.com\"},\"id\":\"9cc17fff-6339-41a1-a344-e3d592cabf78\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"0d59d038c81393af_1709877810@test-project.iam.gserviceaccount.com\"},\"id\":\"9609a5ee-79d5-4d6f-bbab-f15bf9a83cee\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"e85cd4af47bc5b8f_1710129632@test-project.iam.gserviceaccount.com\"},\"id\":\"046ed8de-9594-4cbd-a1dd-f5ea70cde036\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"89a4c2b52519b23a@test-project.iam.gserviceaccount.com\"},\"id\":\"16cb9efc-591d-4fe4-a85d-6b06e068bd4b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"97e229ddc4fa0dc2@test-project.iam.gserviceaccount.com\"},\"id\":\"6814879c-924c-4c41-8d54-e3994e3f51c3\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"d83494a7ced9af6d@test-project.iam.gserviceaccount.com\"},\"id\":\"815a5821-86e0-4a9c-bd19-ec6153b9f176\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"8d7b10f275780ced@test-project.iam.gserviceaccount.com\"},\"id\":\"30761b4f-3987-4b98-8d0c-05b76e0ab969\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"fa8ee3c284e1f046@test-project.iam.gserviceaccount.com\"},\"id\":\"eeb404bd-3149-4a57-8abe-a5f8c4720587\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"f1e0759b1019cb6e@test-project.iam.gserviceaccount.com\"},\"id\":\"9d6c6bab-462d-40b7-bccb-51082369bbb9\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"165a0199b6fff3d8@test-project.iam.gserviceaccount.com\"},\"id\":\"6ed6023e-71c2-4797-8822-e26bfc526bc9\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"e4d3f99f0d1b5389@test-project.iam.gserviceaccount.com\"},\"id\":\"c8dc8b69-dfa0-4450-b769-b9c6097aa0c6\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"e9279b991ee878e7@test-project.iam.gserviceaccount.com\"},\"id\":\"01c9e47b-12db-48d7-804f-da8a806b082e\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"77cc184eab46d770@test-project.iam.gserviceaccount.com\"},\"id\":\"401c1495-7318-4930-9ba3-34313051bf63\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"660c1a9f45521b4d@test-project.iam.gserviceaccount.com\"},\"id\":\"15da8700-2a86-41b1-8362-cd68a9c9f2e1\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"aaa63907b86565c5@test-project.iam.gserviceaccount.com\"},\"id\":\"5df9bb5b-2909-4e40-9dbc-17db2e3d982b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"ba9cb6633177c711@test-project.iam.gserviceaccount.com\"},\"id\":\"0035e4f6-413e-49e4-89d5-d26e764a4042\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"f3e7b8c638fe5361@test-project.iam.gserviceaccount.com\"},\"id\":\"e9dc3572-fbcd-48e2-816f-b464203875f4\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"98ad3e9d52dd86a2@test-project.iam.gserviceaccount.com\"},\"id\":\"d84a5412-f780-4b6e-8a03-2939682576b1\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"9b637fe30dccca2f@test-project.iam.gserviceaccount.com\"},\"id\":\"f1960d2f-dc7b-435d-85bc-d717e536118c\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"4d5939ca800918a7@test-project.iam.gserviceaccount.com\"},\"id\":\"8cfbba44-feef-4bdd-bc83-99d9c9d67eaa\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"eb67e49305fe222b_1709949806@test-project.iam.gserviceaccount.com\"},\"id\":\"a50f6f24-cda6-4721-af6b-58231c9f4d0a\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"0d59d038c81393af_1709949808@test-project.iam.gserviceaccount.com\"},\"id\":\"45db83b5-1d25-4c1b-8a61-424350f3ec33\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"3ceda3e3f06399de_1709949829@example.com\"},\"id\":\"27afb1dc-b5a4-41e7-86bf-75f4b52e31e4\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"4bbd0fe5af4ee5d2@test-project.iam.gserviceaccount.com\"},\"id\":\"438abad4-1ef4-43fb-a091-8e6ddc8adb98\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"d11e260aa813b831@test-project.iam.gserviceaccount.com\"},\"id\":\"2712d5e7-6473-4b58-a316-76f537564c58\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"d045f0b54614200d@test-project.iam.gserviceaccount.com\"},\"id\":\"d782d6b4-ea3c-48f1-82c3-ef62df30fb0d\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"4415614b6b34a833@test-project.iam.gserviceaccount.com\"},\"id\":\"64e3e721-6a5c-4d3d-8b5b-f64d6947d3cd\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"10a6c233e22bf3ba@test-project.iam.gserviceaccount.com\"},\"id\":\"9d1e7d9a-daa5-4e6a-a151-4bbba616eea4\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"977705d92b08037a@test-project.iam.gserviceaccount.com\"},\"id\":\"9dd31d08-1c16-46f6-ac3b-519dac06f116\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"5caaac75b3f3e806@test-project.iam.gserviceaccount.com\"},\"id\":\"d83760bf-14d9-45e2-95e6-0b6d431b395c\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"4a3da5951d4ef2d5@test-project.iam.gserviceaccount.com\"},\"id\":\"98aac727-fbc4-4fef-a142-84777b048b4b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"1f2d4fb5bd426b61@test-project.iam.gserviceaccount.com\"},\"id\":\"cbdaea02-5aee-48df-8faf-1da3e26fd976\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"c0a7fb4aa3cb9b8b@test-project.iam.gserviceaccount.com\"},\"id\":\"da3b483f-0de1-4ba9-a2c8-fec9155865fd\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"831ffc3586eadc33@test-project.iam.gserviceaccount.com\"},\"id\":\"cd63ae12-0e33-4869-8d1c-429cea099704\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"9ef923d67e74c33f@test-project.iam.gserviceaccount.com\"},\"id\":\"02ce870a-2351-4c27-b92b-057a3feddf25\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"75a14f9e2df7e018@test-project.iam.gserviceaccount.com\"},\"id\":\"4d593903-15c8-4e3d-84d3-48b37fa71c46\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[\"foo:bar\"],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"c55e4905f4ea06f7_1709460218@example.com\"},\"id\":\"66f350ed-9043-4712-9bd4-7cc091178e9d\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"81053c7a12fa055a_1710137018@test-project.iam.gserviceaccount.com\"},\"id\":\"f59c53fd-374c-4e2d-aca2-0a5ccb198c05\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"3ceda3e3f06399de_1710021829@example.com\"},\"id\":\"d959786a-c0eb-4699-8548-6bebca8115ff\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"eb67e49305fe222b_1710079406@test-project.iam.gserviceaccount.com\"},\"id\":\"69ed6a13-3fcf-4868-bbbb-8d751f9718c8\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"0d59d038c81393af_1710079411@test-project.iam.gserviceaccount.com\"},\"id\":\"5ba23a25-c8f1-40fe-b601-7d09b233ab76\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"dbc82aa53b3eb1ed@test-project.iam.gserviceaccount.com\"},\"id\":\"d3f2f2d9-e25b-4527-810e-b09cc021e513\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"81053c7a12fa055a_1710079418@test-project.iam.gserviceaccount.com\"},\"id\":\"139165ca-858b-4a6b-a1f6-4bb58fad4331\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"8b7ed0e1cfe00f06@test-project.iam.gserviceaccount.com\"},\"id\":\"a7d8e033-14c5-4b3f-9e4f-795c5d55b605\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"822b3f9b1839a363@test-project.iam.gserviceaccount.com\"},\"id\":\"8523809c-0cd9-4170-9b8a-f69ae09da0e7\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"4a8fdb7ff3a9490d_1710079429@test-project.iam.gserviceaccount.com\"},\"id\":\"c1d72660-48aa-4232-ab79-f0ab7d998d7b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"4a8fdb7ff3a9490d_1709892225@test-project.iam.gserviceaccount.com\"},\"id\":\"400f03cb-fab3-45e0-b86f-1db93d33d0ba\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"187567668125ec65_1709647418@example.com\"},\"id\":\"8b1d4bb9-d775-44d9-ad18-de2499e76609\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"e147621f6a46ac79@test-project.iam.gserviceaccount.com\"},\"id\":\"bc8186e8-7d4c-49fe-bd42-0bc54bf9109f\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"e85cd4af47bc5b8f_1709956832@test-project.iam.gserviceaccount.com\"},\"id\":\"46575ae9-9d15-43d3-91c8-3e31861ead27\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"255ce49d83b5d4ae@test-project.iam.gserviceaccount.com\"},\"id\":\"2cc0092a-16eb-4399-b28a-40e08d9c7bd6\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"ba47015c23d33d17@test-project.iam.gserviceaccount.com\"},\"id\":\"129ac722-30d1-47cd-8b0d-d163f866d5fa\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"a7ae55d97e09ed16@test-project.iam.gserviceaccount.com\"},\"id\":\"d5a78eb6-f734-46e3-8fdc-378c2dfedf0a\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"b10d0cc263e003ee@test-project.iam.gserviceaccount.com\"},\"id\":\"04c3c170-ed2c-4838-934f-3369c5fdb839\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"03c63adda6c14daf@test-project.iam.gserviceaccount.com\"},\"id\":\"5871664d-534f-4d84-931b-187cbfdefa0f\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"6ce5f91942f91a28@test-project.iam.gserviceaccount.com\"},\"id\":\"bfae3820-90c0-4625-806d-630f6c07229f\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"e85cd4af47bc5b8f_1710144032@test-project.iam.gserviceaccount.com\"},\"id\":\"0044546f-4286-448c-83e5-4b7b7480b9ba\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"c7773f356fa3c2ec@test-project.iam.gserviceaccount.com\"},\"id\":\"7ed7f4f4-5611-436c-a2a9-040d75ef0d74\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"3385b20c3283628b@test-project.iam.gserviceaccount.com\"},\"id\":\"14188312-6893-4c5e-b81c-e10453fd9ac5\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"3245cb39c6c0a9f0@test-project.iam.gserviceaccount.com\"},\"id\":\"16950a04-6372-4127-b0bd-64b062063f04\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"97bc20bd135b5bb1@test-project.iam.gserviceaccount.com\"},\"id\":\"a969cddb-8ac7-4b51-925f-9cce4044a2ad\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"93951800085749be@test-project.iam.gserviceaccount.com\"},\"id\":\"12f0ae3d-f0f5-469c-91d1-fa8b9525ace0\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"71e6bb71baeb84cb@test-project.iam.gserviceaccount.com\"},\"id\":\"23acb474-3270-4d36-a02f-d273ae02496f\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"8ca6dc251731eb94@test-project.iam.gserviceaccount.com\"},\"id\":\"eadc4cde-d6a2-4119-b875-1cf6349b92e9\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"8553d0d59f8b8946@test-project.iam.gserviceaccount.com\"},\"id\":\"95c2c08d-7cea-45be-88a7-c35519d398f7\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"5a5cb9168fe96bb4@test-project.iam.gserviceaccount.com\"},\"id\":\"ebda1ec2-7d49-45c4-91bd-ba01eae73737\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"a18090579602565c_1709777029@test-project.iam.gserviceaccount.com\"},\"id\":\"3f1c1cc6-1d7e-463f-8d2e-7592e7094e60\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"d9d8d84a72b4970a@test-project.iam.gserviceaccount.com\"},\"id\":\"0eb0c0b7-831e-4450-9101-2df9cbb32b0b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"d13a5061afd96e21@test-project.iam.gserviceaccount.com\"},\"id\":\"55375565-fae8-4f74-9639-14d1b3d9212f\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"61f2098ddca4184e@test-project.iam.gserviceaccount.com\"},\"id\":\"f83a5206-7b50-4bc0-a0a6-ee4b5e408669\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"65290b4e8d391144@test-project.iam.gserviceaccount.com\"},\"id\":\"53d2499b-1bac-4edb-94ce-739aa553343e\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"8f77a7040e8ad397@test-project.iam.gserviceaccount.com\"},\"id\":\"801be630-1f7b-4468-8bc1-817c30f83844\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"b3c5f28a39b5b530@test-project.iam.gserviceaccount.com\"},\"id\":\"b8aa8485-447b-4433-8789-93c360e848b9\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[\"foo:bar\"],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"c55e4905f4ea06f7_1709532221@example.com\"},\"id\":\"000a20f1-c366-407e-af73-492df87d4edc\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"eb67e49305fe222b_1710151406@test-project.iam.gserviceaccount.com\"},\"id\":\"b6ee6615-60ab-4e62-86f6-19436bdb4b30\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"81053c7a12fa055a_1709964220@test-project.iam.gserviceaccount.com\"},\"id\":\"0b7fbeda-412d-4bf4-80ad-61759a7001c1\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"81053c7a12fa055a_1710151419@test-project.iam.gserviceaccount.com\"},\"id\":\"c91e403f-882f-4fba-a516-371b640ffab6\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[\"foo:bar\"],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"c55e4905f4ea06f7_1709964228@example.com\"},\"id\":\"a7388014-30c6-4fb9-a66d-e4e240a79295\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[\"foo:bar\"],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"c55e4905f4ea06f7_1710151419@example.com\"},\"id\":\"9c7e62d7-0d3e-434d-9f47-e5ee1d01e23b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"a18090579602565c_1710151432@test-project.iam.gserviceaccount.com\"},\"id\":\"4e6bf9b9-a133-4e6a-b627-f8e5de66a150\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"125d926e72bc482d@test-project.iam.gserviceaccount.com\"},\"id\":\"d45dd8b3-3aaf-4a69-b8fa-c85b5a329ac7\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"2faa268f9e4a34d9@test-project.iam.gserviceaccount.com\"},\"id\":\"ed67f1e7-b35d-40b5-9b6b-9475b0c1c144\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"6d9bfe2d508ad2db@test-project.iam.gserviceaccount.com\"},\"id\":\"0a3586be-7a72-48ec-bdd0-e5d939e37b5f\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"0cd95cbec49d1848@test-project.iam.gserviceaccount.com\"},\"id\":\"0af36885-e2f3-4b51-be01-46bc222b9531\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"187567668125ec65_1709719416@example.com\"},\"id\":\"eb69f279-59f0-4ccf-81ab-f755e8ded0a4\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"4a8fdb7ff3a9490d_1710093823@test-project.iam.gserviceaccount.com\"},\"id\":\"c16bd8c1-84df-4622-863e-0125a1eedbc1\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"f510e209b0c13e36@test-project.iam.gserviceaccount.com\"},\"id\":\"7679f63d-9e47-4177-9816-c97c4bf48188\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"4f4242fb59de0a95@test-project.iam.gserviceaccount.com\"},\"id\":\"82035d51-3160-467b-815b-a867804a232d\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"88c287c8b4d43322@test-project.iam.gserviceaccount.com\"},\"id\":\"0b1b5834-43cc-4a40-8508-69b28bdbd127\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"56aeaea512158869@test-project.iam.gserviceaccount.com\"},\"id\":\"127559b5-0e0c-454e-a9f3-d9db825a63ca\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"3ceda3e3f06399de_1709906628@example.com\"},\"id\":\"5f3b69ed-71b2-4690-9ffd-981ea376e98a\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"merp:derp\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"c7af83955eccd7a5_1709784032@example.com\"},\"id\":\"efff8d16-ba2e-4cee-972c-f8a0d2eb7ec3\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"merp:derp\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"c7af83955eccd7a5_1709971232@example.com\"},\"id\":\"7a769578-479d-4c9f-80af-078199b179c0\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"85d10f780007bba5@test-project.iam.gserviceaccount.com\"},\"id\":\"ecbdccfa-e8b5-4923-a786-bb1ce9d2213b\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"89ebe8818e38b678@test-project.iam.gserviceaccount.com\"},\"id\":\"ca34e161-1486-4c02-83c1-b67e52291ae6\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"a4927b1207c5a19d@test-project.iam.gserviceaccount.com\"},\"id\":\"020f78d8-ab0d-4674-b962-2830622d426a\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"9c0c4085ba3b7473@test-project.iam.gserviceaccount.com\"},\"id\":\"4ac9fbfe-c87b-4e34-970f-816566354114\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"5b8e5bb3c333a8ee@test-project.iam.gserviceaccount.com\"},\"id\":\"13f5e6e1-719d-4de0-b8fb-37fbb42104a1\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"ddba1ab7ff6ff921@test-project.iam.gserviceaccount.com\"},\"id\":\"f46902f7-c2fc-4144-9c3d-5e40f4820533\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"77d44d4570ad1b11@test-project.iam.gserviceaccount.com\"},\"id\":\"c534c6c1-64f8-4a1b-8ac0-a4b1244fe312\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"e85cd4af47bc5b8f_1710158432@test-project.iam.gserviceaccount.com\"},\"id\":\"729261a4-e94f-4adf-8b2b-3ab82fa1db21\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"eb67e49305fe222b_1710036206@test-project.iam.gserviceaccount.com\"},\"id\":\"41351665-5f5b-4756-bfb7-0bc41b90a935\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"6373b5e236588b9e@test-project.iam.gserviceaccount.com\"},\"id\":\"341ac872-12b9-41bf-8e84-6a0479914e01\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"merp:derp\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"c7af83955eccd7a5_1710100832@example.com\"},\"id\":\"9d9935e7-5819-4d3a-bd7d-71fa593e8500\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"983567004d8234d3@test-project.iam.gserviceaccount.com\"},\"id\":\"2969651c-5b92-428d-abb0-8c2760e81b68\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[\"lorem\",\"ipsum\"],\"client_email\":\"6fa60234d560a441@test-project.iam.gserviceaccount.com\"},\"id\":\"a390c6ab-ab4f-493a-97bd-89bff4c2d145\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[\"meh:bleh\"],\"automute\":false,\"account_tags\":[],\"client_email\":\"63b5c282df4e62f7@test-project.iam.gserviceaccount.com\"},\"id\":\"9f3d35d3-0978-42e0-8fe4-c12e3e8ba3f2\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":true,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"d9c3523a6d88fb3b@test-project.iam.gserviceaccount.com\"},\"id\":\"64ed556e-3f44-4688-87cb-473ed77c44ab\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":true,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"d2a6fbb67fbd2c87@test-project.iam.gserviceaccount.com\"},\"id\":\"6abfb2d7-dbf0-44cc-a72d-595f95629210\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":true,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"1de41933252dbfc8@test-project.iam.gserviceaccount.com\"},\"id\":\"7864a515-7dbb-45a8-b3d9-feda3fc0efc5\",\"meta\":{\"accessible_projects\":[]}},{\"type\":\"gcp_service_account\",\"attributes\":{\"is_security_command_center_enabled\":false,\"resource_collection_enabled\":false,\"is_cspm_enabled\":false,\"host_filters\":[\"foo:bar\"],\"cloud_run_revision_filters\":[],\"automute\":false,\"account_tags\":[],\"client_email\":\"6bc50c526257abc2@example.com\"},\"id\":\"e1da4fe5-697a-4252-aa9f-8179178710c4\",\"meta\":{\"accessible_projects\":[]}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/f13432c1-353c-42d2-bcdd-6b535baf2c6b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List all GCP STS-enabled service accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2023-05-23T13:50:44.429Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/gcp/sts_delegate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_sts_delegate\",\"attributes\":{\"delegate_account_email\":\"ddgci-d427c1b4a96cca3986b2@datadog-gci-sts-us1-prod.iam.gserviceaccount.com\"},\"id\":\"ddgci-d427c1b4a96cca3986b2@datadog-gci-sts-us1-prod.iam.gserviceaccount.com\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List delegate account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:26.953Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-159c92b6b06abd9d@example.com", + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"resource_collection_enabled\":false,\"is_security_command_center_enabled\":false,\"cloud_run_revision_filters\":[],\"is_cspm_enabled\":false,\"client_email\":\"Test-159c92b6b06abd9d@example.com\",\"automute\":false,\"account_tags\":[],\"host_filters\":[]},\"id\":\"acd4d936-fba6-4b2f-8b46-768389ff90b1\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-159c92b6b06abd9d@example.com", + "host_filters": [ + "foo:bar" + ] + }, + "id": "acd4d936-fba6-4b2f-8b46-768389ff90b1", + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/gcp/accounts/acd4d936-fba6-4b2f-8b46-768389ff90b1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"is_cspm_enabled\":false,\"resource_collection_enabled\":false,\"account_tags\":[],\"cloud_run_revision_filters\":[],\"is_security_command_center_enabled\":false,\"host_filters\":[\"foo:bar\"],\"client_email\":\"Test-159c92b6b06abd9d@example.com\",\"automute\":false},\"id\":\"acd4d936-fba6-4b2f-8b46-768389ff90b1\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/acd4d936-fba6-4b2f-8b46-768389ff90b1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update STS Service Account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:29.154Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-28b4739ba68f588b@example.com", + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"resource_collection_enabled\":false,\"cloud_run_revision_filters\":[],\"account_tags\":[],\"is_cspm_enabled\":false,\"is_security_command_center_enabled\":false,\"automute\":false,\"host_filters\":[],\"client_email\":\"Test-28b4739ba68f588b@example.com\"},\"id\":\"73f227e1-939b-42e3-bb40-773a05509e52\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-28b4739ba68f588b@example.com", + "cloud_run_revision_filters": [ + "merp:derp" + ] + }, + "id": "73f227e1-939b-42e3-bb40-773a05509e52", + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/gcp/accounts/73f227e1-939b-42e3-bb40-773a05509e52", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"id\":\"73f227e1-939b-42e3-bb40-773a05509e52\",\"attributes\":{\"is_cspm_enabled\":false,\"automute\":false,\"is_security_command_center_enabled\":false,\"client_email\":\"Test-28b4739ba68f588b@example.com\",\"resource_collection_enabled\":false,\"account_tags\":[],\"host_filters\":[],\"cloud_run_revision_filters\":[\"merp:derp\"]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/73f227e1-939b-42e3-bb40-773a05509e52", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update STS Service Account returns \"OK\" response with cloud run revision filters", + "version": "v2" + }, + { + "feature": "GCP Integration", + "frozen_at": "2024-03-11T19:47:30.251Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-d84cfa9edd1d6635@example.com", + "host_filters": [] + }, + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/gcp/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"id\":\"3d7cef2d-c455-48c2-ba50-cd8091978dd6\",\"attributes\":{\"account_tags\":[],\"automute\":false,\"client_email\":\"Test-d84cfa9edd1d6635@example.com\",\"resource_collection_enabled\":false,\"cloud_run_revision_filters\":[],\"is_cspm_enabled\":false,\"host_filters\":[],\"is_security_command_center_enabled\":false}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "client_email": "Test-d84cfa9edd1d6635@example.com", + "resource_collection_enabled": true + }, + "id": "3d7cef2d-c455-48c2-ba50-cd8091978dd6", + "type": "gcp_service_account" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/gcp/accounts/3d7cef2d-c455-48c2-ba50-cd8091978dd6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"gcp_service_account\",\"attributes\":{\"host_filters\":[],\"is_security_command_center_enabled\":false,\"client_email\":\"Test-d84cfa9edd1d6635@example.com\",\"cloud_run_revision_filters\":[],\"is_cspm_enabled\":false,\"automute\":false,\"resource_collection_enabled\":true,\"account_tags\":[]},\"id\":\"3d7cef2d-c455-48c2-ba50-cd8091978dd6\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/gcp/accounts/3d7cef2d-c455-48c2-ba50-cd8091978dd6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update STS Service Account returns \"OK\" response with enable resource collection turned on", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/google-chat-integration.json b/test-server-data/v2/google-chat-integration.json new file mode 100644 index 0000000000..846cab7e8b --- /dev/null +++ b/test-server-data/v2/google-chat-integration.json @@ -0,0 +1,435 @@ +{ + "feature": "Google Chat Integration", + "recordings": [ + { + "feature": "Google Chat Integration", + "frozen_at": "2026-02-10T19:17:08.664Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_organization_handle_returns_CREATED_response-1770751028", + "space_resource_name": "spaces/AAQA-zFIks8" + } + }, + "type": "google-chat-organization-handle" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dcad18fd-a3b1-4544-8fee-e1e2988204d8\",\"type\":\"google-chat-organization-handle\",\"attributes\":{\"name\":\"Test-Create_organization_handle_returns_CREATED_response-1770751028\",\"space_display_name\":\"api-test-space\",\"space_resource_name\":\"spaces/AAQA-zFIks8\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles/dcad18fd-a3b1-4544-8fee-e1e2988204d8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create organization handle returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "frozen_at": "2026-02-10T19:17:09.317Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_organization_handle_returns_OK_response-1770751029", + "space_resource_name": "spaces/AAQA-zFIks8" + } + }, + "type": "google-chat-organization-handle" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e70e04d1-7547-47de-ad3b-41a345fd1abe\",\"type\":\"google-chat-organization-handle\",\"attributes\":{\"name\":\"Test-Delete_organization_handle_returns_OK_response-1770751029\",\"space_display_name\":\"api-test-space\",\"space_resource_name\":\"spaces/AAQA-zFIks8\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles/e70e04d1-7547-47de-ad3b-41a345fd1abe", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles/e70e04d1-7547-47de-ad3b-41a345fd1abe", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete organization handle returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "frozen_at": "2026-02-10T19:17:10.064Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_all_organization_handles_returns_OK_response-1770751030", + "space_resource_name": "spaces/AAQA-zFIks8" + } + }, + "type": "google-chat-organization-handle" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9c140b3f-05c1-4943-959a-cae272356979\",\"type\":\"google-chat-organization-handle\",\"attributes\":{\"name\":\"Test-Get_all_organization_handles_returns_OK_response-1770751030\",\"space_display_name\":\"api-test-space\",\"space_resource_name\":\"spaces/AAQA-zFIks8\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"9c140b3f-05c1-4943-959a-cae272356979\",\"type\":\"google-chat-organization-handle\",\"attributes\":{\"name\":\"Test-Get_all_organization_handles_returns_OK_response-1770751030\",\"space_display_name\":\"api-test-space\",\"space_resource_name\":\"spaces/AAQA-zFIks8\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles/9c140b3f-05c1-4943-959a-cae272356979", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all organization handles returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "frozen_at": "2026-02-10T19:17:11.045Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_organization_handle_returns_OK_response-1770751031", + "space_resource_name": "spaces/AAQA-zFIks8" + } + }, + "type": "google-chat-organization-handle" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f712e551-628f-4688-be1d-cb69c69c9690\",\"type\":\"google-chat-organization-handle\",\"attributes\":{\"name\":\"Test-Get_organization_handle_returns_OK_response-1770751031\",\"space_display_name\":\"api-test-space\",\"space_resource_name\":\"spaces/AAQA-zFIks8\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles/f712e551-628f-4688-be1d-cb69c69c9690", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f712e551-628f-4688-be1d-cb69c69c9690\",\"type\":\"google-chat-organization-handle\",\"attributes\":{\"name\":\"Test-Get_organization_handle_returns_OK_response-1770751031\",\"space_display_name\":\"api-test-space\",\"space_resource_name\":\"spaces/AAQA-zFIks8\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles/f712e551-628f-4688-be1d-cb69c69c9690", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get organization handle returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "frozen_at": "2026-02-10T19:17:12.022Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/google-chat/organizations/app/named-spaces/datadog.ninja/api-test-space", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d57f39c4-f22b-6da0-108c-23bdb9c460a3\",\"type\":\"google-chat-app-named-space\",\"attributes\":{\"display_name\":\"api-test-space\",\"organization_binding_id\":\"e54cb570-c674-529c-769d-84b312288ed7\",\"resource_name\":\"spaces/AAQA-zFIks8\",\"space_uri\":\"https://chat.google.com/room/AAQA-zFIks8?cls=11\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get space information by display name returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Google Chat Integration", + "frozen_at": "2026-02-10T19:17:12.337Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_organization_handle_returns_OK_response-1770751032", + "space_resource_name": "spaces/AAQA-zFIks8" + } + }, + "type": "google-chat-organization-handle" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b036578c-665f-4ff2-8785-ba4d00fc87b5\",\"type\":\"google-chat-organization-handle\",\"attributes\":{\"name\":\"Test-Update_organization_handle_returns_OK_response-1770751032\",\"space_display_name\":\"api-test-space\",\"space_resource_name\":\"spaces/AAQA-zFIks8\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_organization_handle_returns_OK_response-1770751032--updated" + } + }, + "type": "google-chat-organization-handle" + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles/b036578c-665f-4ff2-8785-ba4d00fc87b5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b036578c-665f-4ff2-8785-ba4d00fc87b5\",\"type\":\"google-chat-organization-handle\",\"attributes\":{\"name\":\"Test-Update_organization_handle_returns_OK_response-1770751032--updated\",\"space_display_name\":\"api-test-space\",\"space_resource_name\":\"spaces/AAQA-zFIks8\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/google-chat/organizations/e54cb570-c674-529c-769d-84b312288ed7/organization-handles/b036578c-665f-4ff2-8785-ba4d00fc87b5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update organization handle returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/incidents.json b/test-server-data/v2/incidents.json new file mode 100644 index 0000000000..30fb0c5c8f --- /dev/null +++ b/test-server-data/v2/incidents.json @@ -0,0 +1,5681 @@ +{ + "feature": "Incidents", + "recordings": [ + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:27.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Add_commander_to_an_incident_returns_OK_response-1771855587@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"0a671397-1bda-468b-9087-8aa191057af8\",\"attributes\":{\"name\":null,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1771855587@datadoghq.com\",\"created_at\":\"2026-02-23T14:06:27.197025+00:00\",\"modified_at\":\"2026-02-23T14:06:27.197025+00:00\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1771855587@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/74babd7ce1dd50485eb9a0d9d6ed7806?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Add_commander_to_an_incident_returns_OK_response-1771855587" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"e7a543e2-56dd-5618-9504-3d21644f7505\",\"attributes\":{\"public_id\":338012,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Add_commander_to_an_incident_returns_OK_response-1771855587\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:27.384097+00:00\",\"modified\":\"2026-02-23T14:06:27.384097+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:27.373488+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:27.384097+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338012\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "e7a543e2-56dd-5618-9504-3d21644f7505", + "relationships": { + "commander_user": { + "data": { + "id": "0a671397-1bda-468b-9087-8aa191057af8", + "type": "users" + } + } + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/e7a543e2-56dd-5618-9504-3d21644f7505", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"e7a543e2-56dd-5618-9504-3d21644f7505\",\"attributes\":{\"public_id\":338012,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Add_commander_to_an_incident_returns_OK_response-1771855587\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-23T14:06:27.384097+00:00\",\"modified\":\"2026-02-23T14:06:27.844609+00:00\",\"commander\":{\"data\":{\"type\":\"users\",\"id\":\"0a671397-1bda-468b-9087-8aa191057af8\",\"attributes\":{\"uuid\":\"0a671397-1bda-468b-9087-8aa191057af8\",\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1771855587@datadoghq.com\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1771855587@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/74babd7ce1dd50485eb9a0d9d6ed7806?s=48&d=retro\"}}},\"detected\":\"2026-02-23T14:06:27.373488+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:27.384097+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338012\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"0fefdfa8-b1bd-52f5-a4a7-e02d7ac61d91\"},{\"type\":\"incident_responders\",\"id\":\"d5fa1fc7-4320-5d6c-b244-16e0cf2d6e7d\"}]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/e7a543e2-56dd-5618-9504-3d21644f7505", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/0a671397-1bda-468b-9087-8aa191057af8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Add commander to an incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2025-09-16T19:46:43.553Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Service was unavailable for external users", + "end_at": "2025-08-29T13:17:00Z", + "fields": { + "customers_impacted": "all", + "products_impacted": [ + "shopping", + "marketing" + ] + }, + "start_at": "2025-08-28T13:17:00Z" + }, + "type": "incident_impacts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000000/impacts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Bad Request\",\"detail\":\"invalid impact data: incident id is required: invalid impact\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create an incident impact returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2025-09-16T19:46:53.892Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Create_an_incident_impact_returns_CREATED_response-1758052013" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"5826fc99-ad8c-54cb-8c18-cd270bfe42fb\",\"attributes\":{\"public_id\":309851,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Create_an_incident_impact_returns_CREATED_response-1758052013\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2025-09-16T19:46:54.038695+00:00\",\"modified\":\"2025-09-16T19:46:54.038695+00:00\",\"commander\":null,\"detected\":\"2025-09-16T19:46:54.027387+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-09-16T19:46:54.038695+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Outage in the us-east-1 region", + "end_at": "2025-09-12T14:50:00.000Z", + "start_at": "2025-09-12T13:50:00.000Z" + }, + "type": "incident_impacts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/5826fc99-ad8c-54cb-8c18-cd270bfe42fb/impacts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7d4f5663-7c01-4727-b90b-323953603092\",\"type\":\"incident_impacts\",\"attributes\":{\"created\":\"2025-09-16T19:46:54.291754Z\",\"description\":\"Outage in the us-east-1 region\",\"end_at\":\"2025-09-12T14:50:00Z\",\"fields\":null,\"impact_type\":\"customer\",\"modified\":\"2025-09-16T19:46:54.291754Z\",\"start_at\":\"2025-09-12T13:50:00Z\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"incident\":{\"data\":{\"id\":\"5826fc99-ad8c-54cb-8c18-cd270bfe42fb\",\"type\":\"incidents\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/5826fc99-ad8c-54cb-8c18-cd270bfe42fb/impacts/7d4f5663-7c01-4727-b90b-323953603092", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/5826fc99-ad8c-54cb-8c18-cd270bfe42fb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an incident impact returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2025-09-16T19:47:06.306Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Service was unavailable for external users", + "end_at": "2025-08-29T13:17:00Z", + "fields": { + "customers_impacted": "all", + "products_impacted": [ + "shopping", + "marketing" + ] + }, + "start_at": "2025-08-28T13:17:00Z" + }, + "type": "incident_impacts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000001/impacts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rpc error: code = NotFound desc = incident not found: failed to get incident: incident not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create an incident impact returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:28.722Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Create_an_incident_integration_metadata_returns_CREATED_response-1771855588" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"b5a0789a-5592-56fc-8ba4-bfae2e983acf\",\"attributes\":{\"public_id\":338013,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Create_an_incident_integration_metadata_returns_CREATED_response-1771855588\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:30.599716+00:00\",\"modified\":\"2026-02-23T14:06:30.599716+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:30.587487+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:30.599716+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338013\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "incident_id": "b5a0789a-5592-56fc-8ba4-bfae2e983acf", + "integration_type": 1, + "metadata": { + "channels": [ + { + "channel_id": "C0123456789", + "channel_name": "#new-channel", + "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567", + "team_id": "T01234567" + } + ] + } + }, + "type": "incident_integrations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/b5a0789a-5592-56fc-8ba4-bfae2e983acf/relationships/integrations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_integrations\",\"id\":\"4b033fce-123e-5390-be11-ce0c26a7e1dd\",\"attributes\":{\"created\":\"2026-02-23T14:06:31.053271+00:00\",\"modified\":\"2026-02-23T14:06:31.053271+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"b5a0789a-5592-56fc-8ba4-bfae2e983acf\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"status\":3,\"integration_type\":1,\"metadata\":{\"channels\":[{\"channel_id\":\"C0123456789\",\"channel_name\":\"#new-channel\",\"redirect_url\":\"https://slack.com/app_redirect?channel=C0123456789&team=T01234567\",\"team_id\":\"T01234567\"}]}},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/b5a0789a-5592-56fc-8ba4-bfae2e983acf/relationships/integrations/4b033fce-123e-5390-be11-ce0c26a7e1dd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/b5a0789a-5592-56fc-8ba4-bfae2e983acf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an incident integration metadata returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:31.613Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_an_incident_returns_CREATED_response-1771855591@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"654d8602-a17a-45dc-b651-ed566eb8a26b\",\"attributes\":{\"name\":null,\"handle\":\"test-create_an_incident_returns_created_response-1771855591@datadoghq.com\",\"created_at\":\"2026-02-23T14:06:31.782922+00:00\",\"modified_at\":\"2026-02-23T14:06:31.782922+00:00\",\"email\":\"test-create_an_incident_returns_created_response-1771855591@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/eda02c4de638a2c7760884edacb98f5b?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "fields": { + "state": { + "type": "dropdown", + "value": "resolved" + } + }, + "title": "Test-Create_an_incident_returns_CREATED_response-1771855591" + }, + "relationships": { + "commander_user": { + "data": { + "id": "654d8602-a17a-45dc-b651-ed566eb8a26b", + "type": "users" + } + } + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"d466fcca-9324-5212-97d5-2f7e6d216322\",\"attributes\":{\"public_id\":338014,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Create_an_incident_returns_CREATED_response-1771855591\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:31.985081+00:00\",\"modified\":\"2026-02-23T14:06:31.985081+00:00\",\"commander\":{\"data\":{\"type\":\"users\",\"id\":\"654d8602-a17a-45dc-b651-ed566eb8a26b\",\"attributes\":{\"uuid\":\"654d8602-a17a-45dc-b651-ed566eb8a26b\",\"handle\":\"test-create_an_incident_returns_created_response-1771855591@datadoghq.com\",\"email\":\"test-create_an_incident_returns_created_response-1771855591@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/eda02c4de638a2c7760884edacb98f5b?s=48&d=retro\"}}},\"detected\":\"2026-02-23T14:06:31.972725+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:31.985081+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"resolved\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338014\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"resolved\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":{\"type\":\"users\",\"id\":\"654d8602-a17a-45dc-b651-ed566eb8a26b\"}},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"5a0984bb-e7ed-5294-9da4-2fc213169685\"}]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/d466fcca-9324-5212-97d5-2f7e6d216322", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/654d8602-a17a-45dc-b651-ed566eb8a26b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an incident returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2023-03-08T20:44:16.711Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Create_an_incident_todo_returns_CREATED_response-1678308256" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"991b0712-45ac-5c58-990b-958a10759544\",\"attributes\":{\"public_id\":124930,\"title\":\"Test-Create_an_incident_todo_returns_CREATED_response-1678308256\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2023-03-08T20:44:17.336395+00:00\",\"modified\":\"2023-03-08T20:44:17.336395+00:00\",\"commander\":null,\"detected\":\"2023-03-08T20:44:17.328585+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"ad2b9456-eaec-5bbd-9bae-e502d74e23f8\"},{\"type\":\"user_defined_field\",\"id\":\"299616f7-8acd-5403-886b-991656d6b982\"},{\"type\":\"user_defined_field\",\"id\":\"4148ead2-da45-548e-b6be-8e319bafc425\"},{\"type\":\"user_defined_field\",\"id\":\"66b62f59-48f6-5fee-969a-0886b1db6dcd\"},{\"type\":\"user_defined_field\",\"id\":\"d8a54f16-8b2a-5ab4-87b8-5f0fa575c83e\"},{\"type\":\"user_defined_field\",\"id\":\"623af0a5-f30c-577e-8146-09b8324bdb2d\"},{\"type\":\"user_defined_field\",\"id\":\"ccfc9e6c-f586-58e5-b502-03c466c72e6f\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignees": [ + "@test.user@test.com" + ], + "content": "Restore lost data." + }, + "type": "incident_todos" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/991b0712-45ac-5c58-990b-958a10759544/relationships/todos", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_todos\",\"id\":\"fcbc4d56-bca2-5d1d-9b81-da1a2da35d28\",\"attributes\":{\"created\":\"2023-03-08T20:44:17.781860+00:00\",\"modified\":\"2023-03-08T20:44:17.781860+00:00\",\"completed\":null,\"due_date\":null,\"assignees\":[\"@test.user@test.com\"],\"content\":\"Restore lost data.\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"incident_id\":\"991b0712-45ac-5c58-990b-958a10759544\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/991b0712-45ac-5c58-990b-958a10759544/relationships/todos/fcbc4d56-bca2-5d1d-9b81-da1a2da35d28", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/991b0712-45ac-5c58-990b-958a10759544", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an incident todo returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:32.836Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9387e733-5624-4fff-9a9c-89a8544e3bc9\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:06:32.955040877Z\",\"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\":\"2026-02-23T14:06:32.955040959Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/9387e733-5624-4fff-9a9c-89a8544e3bc9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an incident type returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2025-12-31T21:31:09.591Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/123/Postmortem-IR-123", + "title": "Postmortem-IR-123" + }, + "attachment_type": "postmortem" + }, + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000000/attachments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"incident not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create incident attachment returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:33.258Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Create_incident_attachment_returns_Created_response-1771855593" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"c4e18909-57e4-5f57-8d64-74c2c1b13290\",\"attributes\":{\"public_id\":338015,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Create_incident_attachment_returns_Created_response-1771855593\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:33.421258+00:00\",\"modified\":\"2026-02-23T14:06:33.421258+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:33.412085+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:33.421258+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338015\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/TestCreateincidentattachmentreturnsCreatedresponse1771855593/Test-Create_incident_attachment_returns_Created_response-1771855593", + "title": "Test-Create_incident_attachment_returns_Created_response-1771855593" + }, + "attachment_type": "postmortem" + }, + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/c4e18909-57e4-5f57-8d64-74c2c1b13290/attachments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"77ff4d10-fba3-4a1a-83b1-7296249a5572\",\"type\":\"incident_attachments\",\"attributes\":{\"attachment\":{\"title\":\"Test-Create_incident_attachment_returns_Created_response-1771855593\",\"documentUrl\":\"https://app.datadoghq.com/notebook/TestCreateincidentattachmentreturnsCreatedresponse1771855593/Test-Create_incident_attachment_returns_Created_response-1771855593\"},\"attachment_type\":\"postmortem\",\"modified\":\"2026-02-23T14:06:33.732994Z\"},\"relationships\":{\"incident\":{\"data\":{\"id\":\"c4e18909-57e4-5f57-8d64-74c2c1b13290\",\"type\":\"incidents\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\",\"attributes\":{\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?d=retro\\u0026s=48\",\"name\":\"frog\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/c4e18909-57e4-5f57-8d64-74c2c1b13290/attachments/77ff4d10-fba3-4a1a-83b1-7296249a5572", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/c4e18909-57e4-5f57-8d64-74c2c1b13290", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create incident attachment returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:34.889Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"invalid_type\\\" expected one of \\\"incident_notification_rules\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create incident notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:34.978Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"02a6c50e-60f7-4deb-b828-15f6de4a421b\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:06:35.091613563Z\",\"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\":\"2026-02-23T14:06:35.091613645Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "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": "02a6c50e-60f7-4deb-b828-15f6de4a421b", + "type": "incident_types" + } + } + }, + "type": "incident_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"160a9a8f-0db7-494a-87b2-1f02859e38f5\",\"type\":\"incident_notification_rules\",\"attributes\":{\"conditions\":[{\"field\":\"severity\",\"values\":[\"SEV-1\",\"SEV-2\"]}],\"created\":\"2026-02-23T14:06:35.419838663Z\",\"enabled\":true,\"handles\":[\"@test-email@company.com\"],\"modified\":\"2026-02-23T14:06:35.419838663Z\",\"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\":\"02a6c50e-60f7-4deb-b828-15f6de4a421b\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-rules/160a9a8f-0db7-494a-87b2-1f02859e38f5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/02a6c50e-60f7-4deb-b828-15f6de4a421b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create incident notification rule returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:35.640Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "alert", + "content": "An incident has been declared. Please join the incident channel for updates.", + "name": "Test Template", + "subject": "Incident Alert" + }, + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-templates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"invalid_type\\\" expected one of \\\"notification_templates\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create incident notification template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:35.727Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2cc8f1be-44fd-4c28-a266-d6f849c67ae7\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:06:35.843225271Z\",\"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\":\"2026-02-23T14:06:35.843225369Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "alert", + "content": "An incident has been declared.\n\nTitle: Sample Incident Title\nSeverity: SEV-2\nAffected Services: web-service, database-service\nStatus: active\n\nPlease join the incident channel for updates.", + "name": "Test-Create_incident_notification_template_returns_Created_response-1771855595", + "subject": "SEV-2 Incident: Sample Incident Title" + }, + "relationships": { + "incident_type": { + "data": { + "id": "2cc8f1be-44fd-4c28-a266-d6f849c67ae7", + "type": "incident_types" + } + } + }, + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-templates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f5d303e8-5bd4-45f4-9f7e-449c1d57db68\",\"type\":\"notification_templates\",\"attributes\":{\"category\":\"alert\",\"content\":\"An incident has been declared.\\n\\nTitle: Sample Incident Title\\nSeverity: SEV-2\\nAffected Services: web-service, database-service\\nStatus: active\\n\\nPlease join the incident channel for updates.\",\"created\":\"2026-02-23T14:06:36.148518Z\",\"modified\":\"2026-02-23T14:06:36.148518Z\",\"name\":\"Test-Create_incident_notification_template_returns_Created_response-1771855595\",\"subject\":\"SEV-2 Incident: Sample Incident Title\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"incident_type\":{\"data\":{\"id\":\"2cc8f1be-44fd-4c28-a266-d6f849c67ae7\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-templates/f5d303e8-5bd4-45f4-9f7e-449c1d57db68", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/2cc8f1be-44fd-4c28-a266-d6f849c67ae7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create incident notification template returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:36.336Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "alert", + "content": "An incident has been declared. Please join the incident channel for updates.", + "name": "Incident Alert Template", + "subject": "Incident Alert" + }, + "relationships": { + "incident_type": { + "data": { + "id": "00000000-1111-2222-3333-444444444444", + "type": "incident_types" + } + } + }, + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-templates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"incident type not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create incident notification template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:36.468Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Delete_an_existing_incident_returns_OK_response-1771855596" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"6248184c-3ce0-54e7-a9f3-8db44efede9d\",\"attributes\":{\"public_id\":338016,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Delete_an_existing_incident_returns_OK_response-1771855596\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:36.626037+00:00\",\"modified\":\"2026-02-23T14:06:36.626037+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:36.615282+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:36.626037+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338016\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/6248184c-3ce0-54e7-a9f3-8db44efede9d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/6248184c-3ce0-54e7-a9f3-8db44efede9d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"incident 6248184c-3ce0-54e7-a9f3-8db44efede9d not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an existing incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2025-09-16T19:47:17.707Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Delete_an_incident_impact_returns_No_Content_response-1758052037" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"1a838ffb-9c95-5df6-978c-4cf21f854fd1\",\"attributes\":{\"public_id\":309852,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Delete_an_incident_impact_returns_No_Content_response-1758052037\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2025-09-16T19:47:17.862681+00:00\",\"modified\":\"2025-09-16T19:47:17.862681+00:00\",\"commander\":null,\"detected\":\"2025-09-16T19:47:17.850799+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-09-16T19:47:17.862681+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Outage in the us-east-1 region", + "end_at": "2025-09-12T14:50:00.000Z", + "start_at": "2025-09-12T13:50:00.000Z" + }, + "type": "incident_impacts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/1a838ffb-9c95-5df6-978c-4cf21f854fd1/impacts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"db11b25d-0383-4f98-bde7-bfc4a10d16eb\",\"type\":\"incident_impacts\",\"attributes\":{\"created\":\"2025-09-16T19:47:18.208811Z\",\"description\":\"Outage in the us-east-1 region\",\"end_at\":\"2025-09-12T14:50:00Z\",\"fields\":null,\"impact_type\":\"customer\",\"modified\":\"2025-09-16T19:47:18.208811Z\",\"start_at\":\"2025-09-12T13:50:00Z\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"incident\":{\"data\":{\"id\":\"1a838ffb-9c95-5df6-978c-4cf21f854fd1\",\"type\":\"incidents\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/1a838ffb-9c95-5df6-978c-4cf21f854fd1/impacts/db11b25d-0383-4f98-bde7-bfc4a10d16eb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/1a838ffb-9c95-5df6-978c-4cf21f854fd1/impacts/db11b25d-0383-4f98-bde7-bfc4a10d16eb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rpc error: code = NotFound desc = impact not found: impact not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/1a838ffb-9c95-5df6-978c-4cf21f854fd1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete an incident impact returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2025-09-16T19:47:29.411Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000001/impacts/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rpc error: code = NotFound desc = impact not found: impact not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an incident impact returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2025-09-16T14:11:22.028Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000002/impacts/00000000-0000-0000-0000-000000000002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rpc error: code = NotFound desc = impact not found: impact not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an incident impact returns \"Not Found\" response (different invalid IDs)", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2025-09-16T14:11:00.035Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000000/impacts/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rpc error: code = NotFound desc = impact not found: impact not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an incident impact returns \"Not Found\" response (invalid incident and impact)", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:37.736Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Delete_an_incident_integration_metadata_returns_OK_response-1771855597" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"2730490c-dcca-5736-bd07-5ac94560b128\",\"attributes\":{\"public_id\":338017,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Delete_an_incident_integration_metadata_returns_OK_response-1771855597\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:37.902127+00:00\",\"modified\":\"2026-02-23T14:06:37.902127+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:37.892533+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:37.902127+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338017\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "incident_id": "2730490c-dcca-5736-bd07-5ac94560b128", + "integration_type": 1, + "metadata": { + "channels": [ + { + "channel_id": "C0123456789", + "channel_name": "#example-channel-name", + "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567", + "team_id": "T01234567" + } + ] + }, + "status": 2 + }, + "type": "incident_integrations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/2730490c-dcca-5736-bd07-5ac94560b128/relationships/integrations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_integrations\",\"id\":\"ef1a8d20-ebae-5389-84ea-35ee453413f6\",\"attributes\":{\"created\":\"2026-02-23T14:06:38.291683+00:00\",\"modified\":\"2026-02-23T14:06:38.291683+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"2730490c-dcca-5736-bd07-5ac94560b128\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"status\":3,\"integration_type\":1,\"metadata\":{\"channels\":[{\"channel_id\":\"C0123456789\",\"channel_name\":\"#example-channel-name\",\"redirect_url\":\"https://slack.com/app_redirect?channel=C0123456789&team=T01234567\",\"team_id\":\"T01234567\"}]}},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/2730490c-dcca-5736-bd07-5ac94560b128/relationships/integrations/ef1a8d20-ebae-5389-84ea-35ee453413f6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/2730490c-dcca-5736-bd07-5ac94560b128/relationships/integrations/ef1a8d20-ebae-5389-84ea-35ee453413f6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"incident integration doesn't exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/2730490c-dcca-5736-bd07-5ac94560b128", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete an incident integration metadata returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2023-03-07T18:27:18.622Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Delete_an_incident_todo_returns_OK_response-1678213638" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"8dc81d32-33b1-580a-97ab-00b84b2b2f4d\",\"attributes\":{\"public_id\":124740,\"title\":\"Test-Delete_an_incident_todo_returns_OK_response-1678213638\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2023-03-07T18:27:18.737862+00:00\",\"modified\":\"2023-03-07T18:27:18.737862+00:00\",\"commander\":null,\"detected\":\"2023-03-07T18:27:18.729880+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"ad2b9456-eaec-5bbd-9bae-e502d74e23f8\"},{\"type\":\"user_defined_field\",\"id\":\"299616f7-8acd-5403-886b-991656d6b982\"},{\"type\":\"user_defined_field\",\"id\":\"4148ead2-da45-548e-b6be-8e319bafc425\"},{\"type\":\"user_defined_field\",\"id\":\"66b62f59-48f6-5fee-969a-0886b1db6dcd\"},{\"type\":\"user_defined_field\",\"id\":\"d8a54f16-8b2a-5ab4-87b8-5f0fa575c83e\"},{\"type\":\"user_defined_field\",\"id\":\"623af0a5-f30c-577e-8146-09b8324bdb2d\"},{\"type\":\"user_defined_field\",\"id\":\"ccfc9e6c-f586-58e5-b502-03c466c72e6f\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignees": [ + "@test.user@test.com", + { + "icon": "https://a.slack-edge.com/80588/img/slackbot_48.png", + "id": "USLACKBOT", + "name": "Slackbot", + "source": "slack" + } + ], + "content": "Follow up with customer about the impact they saw." + }, + "type": "incident_todos" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/8dc81d32-33b1-580a-97ab-00b84b2b2f4d/relationships/todos", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_todos\",\"id\":\"dc9639d1-0203-5569-acfb-276574c04268\",\"attributes\":{\"created\":\"2023-03-07T18:27:19.090564+00:00\",\"modified\":\"2023-03-07T18:27:19.090564+00:00\",\"completed\":null,\"due_date\":null,\"assignees\":[\"@test.user@test.com\",{\"icon\":\"https://a.slack-edge.com/80588/img/slackbot_48.png\",\"id\":\"USLACKBOT\",\"name\":\"Slackbot\",\"source\":\"slack\"}],\"content\":\"Follow up with customer about the impact they saw.\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"incident_id\":\"8dc81d32-33b1-580a-97ab-00b84b2b2f4d\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/8dc81d32-33b1-580a-97ab-00b84b2b2f4d/relationships/todos/dc9639d1-0203-5569-acfb-276574c04268", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/8dc81d32-33b1-580a-97ab-00b84b2b2f4d/relationships/todos/dc9639d1-0203-5569-acfb-276574c04268", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"dc9639d1-0203-5569-acfb-276574c04268 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/8dc81d32-33b1-580a-97ab-00b84b2b2f4d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete an incident todo returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:38.985Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4de83701-6769-48fd-aed0-702443e803df\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:06:39.095823286Z\",\"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\":\"2026-02-23T14:06:39.095823376Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/4de83701-6769-48fd-aed0-702443e803df", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/4de83701-6769-48fd-aed0-702443e803df", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an incident type returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-01-06T19:47:09.441Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000000/attachments/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"incident not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete incident attachment returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:39.450Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000001/attachments/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"incident not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete incident attachment returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:39.572Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e64d4c78-53b3-48ce-8e67-e6eec5d2bf1f\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:06:39.676479437Z\",\"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\":\"2026-02-23T14:06:39.676479519Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "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": "e64d4c78-53b3-48ce-8e67-e6eec5d2bf1f", + "type": "incident_types" + } + } + }, + "type": "incident_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"71eed31b-15c3-418f-9492-3fe4e4966540\",\"type\":\"incident_notification_rules\",\"attributes\":{\"conditions\":[{\"field\":\"severity\",\"values\":[\"SEV-1\",\"SEV-2\"]}],\"created\":\"2026-02-23T14:06:39.918910755Z\",\"enabled\":true,\"handles\":[\"@test-email@company.com\"],\"modified\":\"2026-02-23T14:06:39.918910755Z\",\"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\":\"e64d4c78-53b3-48ce-8e67-e6eec5d2bf1f\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-rules/71eed31b-15c3-418f-9492-3fe4e4966540", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-rules/71eed31b-15c3-418f-9492-3fe4e4966540", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rule not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/e64d4c78-53b3-48ce-8e67-e6eec5d2bf1f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete incident notification rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:40.217Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-rules/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rule not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete incident notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:40.305Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"486b278d-6bd2-4eb4-950b-5985c3ed155f\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:06:40.417374516Z\",\"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\":\"2026-02-23T14:06:40.417374598Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "alert", + "content": "Test notification template", + "name": "Test Template Test-Delete_incident_notification_template_returns_No_Content_response-1771855600", + "subject": "Test Subject" + }, + "relationships": { + "incident_type": { + "data": { + "id": "486b278d-6bd2-4eb4-950b-5985c3ed155f", + "type": "incident_types" + } + } + }, + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-templates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4e29aefe-98c5-4cdf-a837-2a916bc79395\",\"type\":\"notification_templates\",\"attributes\":{\"category\":\"alert\",\"content\":\"Test notification template\",\"created\":\"2026-02-23T14:06:40.827464Z\",\"modified\":\"2026-02-23T14:06:40.827464Z\",\"name\":\"Test Template Test-Delete_incident_notification_template_returns_No_Content_response-1771855600\",\"subject\":\"Test Subject\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"incident_type\":{\"data\":{\"id\":\"486b278d-6bd2-4eb4-950b-5985c3ed155f\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-templates/4e29aefe-98c5-4cdf-a837-2a916bc79395", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-templates/4e29aefe-98c5-4cdf-a837-2a916bc79395", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/486b278d-6bd2-4eb4-950b-5985c3ed155f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete incident notification template returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:41.205Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Get_a_list_of_an_incident_s_integration_metadata_returns_OK_response-1771855601" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"6443dedf-4664-5a19-b321-8948ddc9d30c\",\"attributes\":{\"public_id\":338018,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Get_a_list_of_an_incident_s_integration_metadata_returns_OK_response-1771855601\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:41.357032+00:00\",\"modified\":\"2026-02-23T14:06:41.357032+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:41.347849+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:41.357032+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338018\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "incident_id": "6443dedf-4664-5a19-b321-8948ddc9d30c", + "integration_type": 1, + "metadata": { + "channels": [ + { + "channel_id": "C0123456789", + "channel_name": "#example-channel-name", + "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567", + "team_id": "T01234567" + } + ] + }, + "status": 2 + }, + "type": "incident_integrations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/6443dedf-4664-5a19-b321-8948ddc9d30c/relationships/integrations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_integrations\",\"id\":\"2d47ae0b-b4fb-5a92-b1d1-3ee1fb69445a\",\"attributes\":{\"created\":\"2026-02-23T14:06:41.745348+00:00\",\"modified\":\"2026-02-23T14:06:41.745348+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"6443dedf-4664-5a19-b321-8948ddc9d30c\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"status\":3,\"integration_type\":1,\"metadata\":{\"channels\":[{\"channel_id\":\"C0123456789\",\"channel_name\":\"#example-channel-name\",\"redirect_url\":\"https://slack.com/app_redirect?channel=C0123456789&team=T01234567\",\"team_id\":\"T01234567\"}]}},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/6443dedf-4664-5a19-b321-8948ddc9d30c/relationships/integrations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"2d47ae0b-b4fb-5a92-b1d1-3ee1fb69445a\",\"type\":\"incident_integrations\",\"attributes\":{\"created\":\"2026-02-23T14:06:41.745348Z\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"6443dedf-4664-5a19-b321-8948ddc9d30c\",\"integration_type\":1,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"metadata\":{\"channels\":[{\"team_id\":\"T01234567\",\"channel_id\":\"C0123456789\",\"channel_name\":\"#example-channel-name\",\"redirect_url\":\"https://slack.com/app_redirect?channel=C0123456789\\u0026team=T01234567\"}]},\"modified\":\"2026-02-23T14:06:41.745348Z\",\"status\":3},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}],\"meta\":{\"pagination\":{\"offset\":0,\"next_offset\":25,\"size\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/6443dedf-4664-5a19-b321-8948ddc9d30c/relationships/integrations/2d47ae0b-b4fb-5a92-b1d1-3ee1fb69445a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/6443dedf-4664-5a19-b321-8948ddc9d30c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a list of an incident's integration metadata returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2023-03-07T18:27:20.021Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Get_a_list_of_an_incident_s_todos_returns_OK_response-1678213640" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"931066f6-d890-55f1-912f-79dc982ed271\",\"attributes\":{\"public_id\":124741,\"title\":\"Test-Get_a_list_of_an_incident_s_todos_returns_OK_response-1678213640\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2023-03-07T18:27:20.124554+00:00\",\"modified\":\"2023-03-07T18:27:20.124554+00:00\",\"commander\":null,\"detected\":\"2023-03-07T18:27:20.116468+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"ad2b9456-eaec-5bbd-9bae-e502d74e23f8\"},{\"type\":\"user_defined_field\",\"id\":\"299616f7-8acd-5403-886b-991656d6b982\"},{\"type\":\"user_defined_field\",\"id\":\"4148ead2-da45-548e-b6be-8e319bafc425\"},{\"type\":\"user_defined_field\",\"id\":\"66b62f59-48f6-5fee-969a-0886b1db6dcd\"},{\"type\":\"user_defined_field\",\"id\":\"d8a54f16-8b2a-5ab4-87b8-5f0fa575c83e\"},{\"type\":\"user_defined_field\",\"id\":\"623af0a5-f30c-577e-8146-09b8324bdb2d\"},{\"type\":\"user_defined_field\",\"id\":\"ccfc9e6c-f586-58e5-b502-03c466c72e6f\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignees": [ + "@test.user@test.com", + { + "icon": "https://a.slack-edge.com/80588/img/slackbot_48.png", + "id": "USLACKBOT", + "name": "Slackbot", + "source": "slack" + } + ], + "content": "Follow up with customer about the impact they saw." + }, + "type": "incident_todos" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/931066f6-d890-55f1-912f-79dc982ed271/relationships/todos", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_todos\",\"id\":\"77595d1b-b663-5bd8-81b7-997a817512b9\",\"attributes\":{\"created\":\"2023-03-07T18:27:20.438113+00:00\",\"modified\":\"2023-03-07T18:27:20.438113+00:00\",\"completed\":null,\"due_date\":null,\"assignees\":[\"@test.user@test.com\",{\"icon\":\"https://a.slack-edge.com/80588/img/slackbot_48.png\",\"id\":\"USLACKBOT\",\"name\":\"Slackbot\",\"source\":\"slack\"}],\"content\":\"Follow up with customer about the impact they saw.\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"incident_id\":\"931066f6-d890-55f1-912f-79dc982ed271\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/931066f6-d890-55f1-912f-79dc982ed271/relationships/todos", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"incident_todos\",\"id\":\"77595d1b-b663-5bd8-81b7-997a817512b9\",\"attributes\":{\"created\":\"2023-03-07T18:27:20.438113+00:00\",\"modified\":\"2023-03-07T18:27:20.438113+00:00\",\"completed\":null,\"due_date\":null,\"assignees\":[\"@test.user@test.com\",{\"id\":\"USLACKBOT\",\"icon\":\"https://a.slack-edge.com/80588/img/slackbot_48.png\",\"name\":\"Slackbot\",\"source\":\"slack\"}],\"content\":\"Follow up with customer about the impact they saw.\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"931066f6-d890-55f1-912f-79dc982ed271\",\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}],\"meta\":{\"pagination\":{\"offset\":0,\"next_offset\":1,\"size\":1}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/931066f6-d890-55f1-912f-79dc982ed271/relationships/todos/77595d1b-b663-5bd8-81b7-997a817512b9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/931066f6-d890-55f1-912f-79dc982ed271", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a list of an incident's todos returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:42.399Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Get_a_list_of_incidents_returns_OK_response-1771855602" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"f5f7e414-a9bf-50d2-8d46-e12c8be381d9\",\"attributes\":{\"public_id\":338019,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Get_a_list_of_incidents_returns_OK_response-1771855602\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:42.549748+00:00\",\"modified\":\"2026-02-23T14:06:42.549748+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:42.541000+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:42.549748+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338019\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"incidents\",\"id\":\"d3c614dc-93e7-4648-b104-b4047548deca\",\"attributes\":{\"public_id\":336084,\"incident_type_uuid\":\"227f4739-de77-47ac-ac1b-5b0fd5497b54\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771015099\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-13T20:38:19.565010+00:00\",\"modified\":\"2026-02-13T20:38:19.565010+00:00\",\"detected\":\"2025-01-01T00:00:00+00:00\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-01-01T00:00:00+00:00\",\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336084\"}},\"field_analytics\":null,\"severity\":\"SEV-5\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"06c38fa7-53ae-43ed-8a81-4ef2ce79e8e4\"},{\"type\":\"user_defined_field\",\"id\":\"82dfe0f7-6471-45c2-893a-b0ddb905a5cc\"},{\"type\":\"user_defined_field\",\"id\":\"a992a7af-78df-428b-84cb-415a80a35ca8\"},{\"type\":\"user_defined_field\",\"id\":\"bedafc53-5878-43d3-8e43-edb0ea909d41\"},{\"type\":\"user_defined_field\",\"id\":\"3f68cbf4-58c5-48ad-b345-d0c3ea07b575\"},{\"type\":\"user_defined_field\",\"id\":\"d6774541-57a3-4e12-a420-8a46eea00af3\"},{\"type\":\"user_defined_field\",\"id\":\"77452a89-fe1b-4dca-8d05-cd2784a3d334\"},{\"type\":\"user_defined_field\",\"id\":\"57d451dc-32ae-4b62-bd25-95e7afee4e91\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"cdb0f1f2-33ce-4465-85ea-fc8aa3f85d21\",\"attributes\":{\"public_id\":336102,\"incident_type_uuid\":\"b19568c3-f758-47f3-8359-b7d3136ee4ce\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771015188\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-13T20:39:48.595903+00:00\",\"modified\":\"2026-02-13T20:39:48.595903+00:00\",\"detected\":\"2025-01-01T00:00:00+00:00\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-01-01T00:00:00+00:00\",\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336102\"}},\"field_analytics\":null,\"severity\":\"SEV-5\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"9dc9e986-51ba-49ec-a280-411baa25eadf\"},{\"type\":\"user_defined_field\",\"id\":\"8a1d9752-b811-4e08-92c9-1f06dbbb4b54\"},{\"type\":\"user_defined_field\",\"id\":\"05283c83-bf61-4a44-8e66-d521abcc24c5\"},{\"type\":\"user_defined_field\",\"id\":\"8a955548-f058-4410-8855-18180468f21b\"},{\"type\":\"user_defined_field\",\"id\":\"22e9116b-943d-4494-96e7-13652e2f1576\"},{\"type\":\"user_defined_field\",\"id\":\"7659819d-57d0-4b2f-b48b-5e2e1da7b6c3\"},{\"type\":\"user_defined_field\",\"id\":\"5bc060a5-9fd1-4388-b658-dc72f99f2077\"},{\"type\":\"user_defined_field\",\"id\":\"ea3560b3-fc7e-4aad-9096-3e646b5feea2\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"fb49e1f3-89af-496f-9587-107ea13b9adc\",\"attributes\":{\"public_id\":336131,\"incident_type_uuid\":\"e571c40e-671e-468e-b2d2-49abcddb2730\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771020049\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-13T22:00:49.957007+00:00\",\"modified\":\"2026-02-13T22:00:49.957007+00:00\",\"detected\":\"2025-01-01T00:00:00+00:00\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-01-01T00:00:00+00:00\",\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336131\"}},\"field_analytics\":null,\"severity\":\"SEV-5\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"d61d15f3-99d2-4c81-9ee7-bc9ff4963dae\"},{\"type\":\"user_defined_field\",\"id\":\"519d3368-b64f-45c2-bded-62e7d71ea1ac\"},{\"type\":\"user_defined_field\",\"id\":\"c6b63995-8b1e-4a15-9aa7-9ad7ef8e0290\"},{\"type\":\"user_defined_field\",\"id\":\"18008a44-087f-4e2b-866b-5dfb3538d31c\"},{\"type\":\"user_defined_field\",\"id\":\"3a6dc62c-0a2d-40c3-bc70-fdb85491793d\"},{\"type\":\"user_defined_field\",\"id\":\"d749a065-a736-429f-9c64-b1d7cb974c50\"},{\"type\":\"user_defined_field\",\"id\":\"05597b87-b001-4e79-9cab-b9cf0ddfc746\"},{\"type\":\"user_defined_field\",\"id\":\"8f9b2254-b75e-49bb-af4a-0fef13e7e7f5\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"405ffa23-71f5-4f91-942a-9bf8a0bfa581\",\"attributes\":{\"public_id\":336149,\"incident_type_uuid\":\"d5d8a5e6-0e41-4acb-bc80-e5476ba4711d\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771020502\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-13T22:08:22.924980+00:00\",\"modified\":\"2026-02-13T22:08:22.924980+00:00\",\"detected\":\"2025-01-01T00:00:00+00:00\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-01-01T00:00:00+00:00\",\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336149\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null}},\"field_analytics\":null,\"severity\":\"SEV-5\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"a6400643-892c-48c0-bf3b-8a8d7776bd5b\"},{\"type\":\"user_defined_field\",\"id\":\"80b9e233-562e-4b7a-8544-f53ef9e94c32\"},{\"type\":\"user_defined_field\",\"id\":\"20aa840f-af0c-4033-bd7d-332b92554d63\"},{\"type\":\"user_defined_field\",\"id\":\"ddabebb7-6079-4162-a7c1-45088cd17bf0\"},{\"type\":\"user_defined_field\",\"id\":\"405da1b0-0e66-4b4c-b2e5-8d08d1a39f38\"},{\"type\":\"user_defined_field\",\"id\":\"bb73ede2-fc0c-40f6-8098-503253707e67\"},{\"type\":\"user_defined_field\",\"id\":\"107a7787-e705-4ad6-af81-c6199beb02cf\"},{\"type\":\"user_defined_field\",\"id\":\"1f9e6588-e332-4533-a6b7-9b70d7ecb822\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"77afaefe-9585-5eba-9e1e-195149b3dc66\",\"attributes\":{\"public_id\":336599,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Example-Create_an_incident_returns_CREATED_response_1771235254\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-16T09:47:35.513888+00:00\",\"modified\":\"2026-02-16T09:47:35.513888+00:00\",\"detected\":\"2026-02-16T09:47:35.502740+00:00\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-16T09:47:35.513888+00:00\",\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"resolved\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336599\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"resolved\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":{\"type\":\"users\",\"id\":\"677cf521-c579-4b83-988f-bf8eb6fb2d6c\"}},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"f393bc25-a7d0-54f4-9114-98e6385143aa\"}]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"f5f7e414-a9bf-50d2-8d46-e12c8be381d9\",\"attributes\":{\"public_id\":338019,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Get_a_list_of_incidents_returns_OK_response-1771855602\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-23T14:06:42.549748+00:00\",\"modified\":\"2026-02-23T14:06:42.549748+00:00\",\"detected\":\"2026-02-23T14:06:42.541000+00:00\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:42.549748+00:00\",\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338019\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}],\"meta\":{\"pagination\":{\"offset\":0,\"next_offset\":6,\"size\":6}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/f5f7e414-a9bf-50d2-8d46-e12c8be381d9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a list of incidents returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2022-04-12T13:28:59.942Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents", + "query": [ + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"pagination\":{\"size\":2,\"next_offset\":2,\"offset\":0}},\"data\":[{\"type\":\"incidents\",\"id\":\"ed3ff75e-6ce6-5b00-8ab4-665fcaeda9f8\",\"attributes\":{\"public_id\":62105,\"title\":\"Test-Ruby-Get_the_details_of_an_incident_returns_OK_response-1631710219\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created\":\"2021-09-15T12:50:19.743510+00:00\",\"modified\":\"2021-09-15T12:50:19.743510+00:00\",\"detected\":\"2021-09-15T12:50:19.741188+00:00\",\"created_by_uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"commander_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"4148ead2-da45-548e-b6be-8e319bafc425\"},{\"type\":\"user_defined_field\",\"id\":\"66b62f59-48f6-5fee-969a-0886b1db6dcd\"},{\"type\":\"user_defined_field\",\"id\":\"299616f7-8acd-5403-886b-991656d6b982\"},{\"type\":\"user_defined_field\",\"id\":\"ad2b9456-eaec-5bbd-9bae-e502d74e23f8\"},{\"type\":\"user_defined_field\",\"id\":\"d8a54f16-8b2a-5ab4-87b8-5f0fa575c83e\"},{\"type\":\"user_defined_field\",\"id\":\"623af0a5-f30c-577e-8146-09b8324bdb2d\"},{\"type\":\"user_defined_field\",\"id\":\"ccfc9e6c-f586-58e5-b502-03c466c72e6f\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"00037f9b-dd47-5b21-bcf3-f8dd30e907da\",\"attributes\":{\"public_id\":62582,\"title\":\"Test-Get_a_list_of_incidents_returns_OK_response-1631884327\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2021-09-17T13:12:08.512729+00:00\",\"modified\":\"2021-09-17T13:12:08.512729+00:00\",\"detected\":\"2021-09-17T13:12:08.510606+00:00\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"4148ead2-da45-548e-b6be-8e319bafc425\"},{\"type\":\"user_defined_field\",\"id\":\"66b62f59-48f6-5fee-969a-0886b1db6dcd\"},{\"type\":\"user_defined_field\",\"id\":\"299616f7-8acd-5403-886b-991656d6b982\"},{\"type\":\"user_defined_field\",\"id\":\"ad2b9456-eaec-5bbd-9bae-e502d74e23f8\"},{\"type\":\"user_defined_field\",\"id\":\"d8a54f16-8b2a-5ab4-87b8-5f0fa575c83e\"},{\"type\":\"user_defined_field\",\"id\":\"623af0a5-f30c-577e-8146-09b8324bdb2d\"},{\"type\":\"user_defined_field\",\"id\":\"ccfc9e6c-f586-58e5-b502-03c466c72e6f\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents", + "query": [ + [ + "page[offset]", + "2" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"pagination\":{\"size\":1,\"offset\":2}},\"data\":[{\"type\":\"incidents\",\"id\":\"1524396f-fa67-5e6d-a27d-78e7bd85f14d\",\"attributes\":{\"public_id\":62583,\"title\":\"Test-Update_an_existing_incident_returns_OK_response-1631884336\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2021-09-17T13:12:17.076724+00:00\",\"modified\":\"2021-09-17T13:12:17.076724+00:00\",\"detected\":\"2021-09-17T13:12:17.075124+00:00\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"4148ead2-da45-548e-b6be-8e319bafc425\"},{\"type\":\"user_defined_field\",\"id\":\"66b62f59-48f6-5fee-969a-0886b1db6dcd\"},{\"type\":\"user_defined_field\",\"id\":\"299616f7-8acd-5403-886b-991656d6b982\"},{\"type\":\"user_defined_field\",\"id\":\"ad2b9456-eaec-5bbd-9bae-e502d74e23f8\"},{\"type\":\"user_defined_field\",\"id\":\"d8a54f16-8b2a-5ab4-87b8-5f0fa575c83e\"},{\"type\":\"user_defined_field\",\"id\":\"623af0a5-f30c-577e-8146-09b8324bdb2d\"},{\"type\":\"user_defined_field\",\"id\":\"ccfc9e6c-f586-58e5-b502-03c466c72e6f\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of incidents returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:43.426Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Get_incident_integration_metadata_details_returns_OK_response-1771855603" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"e2c7502d-b95c-55ee-b2d9-c523316ec5a5\",\"attributes\":{\"public_id\":338020,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Get_incident_integration_metadata_details_returns_OK_response-1771855603\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:43.591433+00:00\",\"modified\":\"2026-02-23T14:06:43.591433+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:43.581979+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:43.591433+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338020\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "incident_id": "e2c7502d-b95c-55ee-b2d9-c523316ec5a5", + "integration_type": 1, + "metadata": { + "channels": [ + { + "channel_id": "C0123456789", + "channel_name": "#example-channel-name", + "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567", + "team_id": "T01234567" + } + ] + }, + "status": 2 + }, + "type": "incident_integrations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/e2c7502d-b95c-55ee-b2d9-c523316ec5a5/relationships/integrations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_integrations\",\"id\":\"57c74987-fe14-5f4b-a482-f0f9637e7f94\",\"attributes\":{\"created\":\"2026-02-23T14:06:44.006984+00:00\",\"modified\":\"2026-02-23T14:06:44.006984+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"e2c7502d-b95c-55ee-b2d9-c523316ec5a5\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"status\":3,\"integration_type\":1,\"metadata\":{\"channels\":[{\"channel_id\":\"C0123456789\",\"channel_name\":\"#example-channel-name\",\"redirect_url\":\"https://slack.com/app_redirect?channel=C0123456789&team=T01234567\",\"team_id\":\"T01234567\"}]}},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/e2c7502d-b95c-55ee-b2d9-c523316ec5a5/relationships/integrations/57c74987-fe14-5f4b-a482-f0f9637e7f94", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"57c74987-fe14-5f4b-a482-f0f9637e7f94\",\"type\":\"incident_integrations\",\"attributes\":{\"created\":\"2026-02-23T14:06:44.006984Z\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"e2c7502d-b95c-55ee-b2d9-c523316ec5a5\",\"integration_type\":1,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"metadata\":{\"channels\":[{\"team_id\":\"T01234567\",\"channel_id\":\"C0123456789\",\"channel_name\":\"#example-channel-name\",\"redirect_url\":\"https://slack.com/app_redirect?channel=C0123456789\\u0026team=T01234567\"}]},\"modified\":\"2026-02-23T14:06:44.006984Z\",\"status\":3},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/e2c7502d-b95c-55ee-b2d9-c523316ec5a5/relationships/integrations/57c74987-fe14-5f4b-a482-f0f9637e7f94", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/e2c7502d-b95c-55ee-b2d9-c523316ec5a5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get incident integration metadata details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:44.658Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/config/notification-rules/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rule not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get incident notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:44.763Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e501c63a-c862-4f27-a4c5-cf1cb1c6bded\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:06:44.873800964Z\",\"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\":\"2026-02-23T14:06:44.873801062Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "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": "e501c63a-c862-4f27-a4c5-cf1cb1c6bded", + "type": "incident_types" + } + } + }, + "type": "incident_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"68f007c9-ab37-4fac-9964-eb5facc4ed86\",\"type\":\"incident_notification_rules\",\"attributes\":{\"conditions\":[{\"field\":\"severity\",\"values\":[\"SEV-1\",\"SEV-2\"]}],\"created\":\"2026-02-23T14:06:45.175539245Z\",\"enabled\":true,\"handles\":[\"@test-email@company.com\"],\"modified\":\"2026-02-23T14:06:45.175539245Z\",\"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\":\"e501c63a-c862-4f27-a4c5-cf1cb1c6bded\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/config/notification-rules/68f007c9-ab37-4fac-9964-eb5facc4ed86", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"68f007c9-ab37-4fac-9964-eb5facc4ed86\",\"type\":\"incident_notification_rules\",\"attributes\":{\"conditions\":[{\"field\":\"severity\",\"values\":[\"SEV-1\",\"SEV-2\"]}],\"created\":\"2026-02-23T14:06:45.175539Z\",\"enabled\":true,\"handles\":[\"@test-email@company.com\"],\"modified\":\"2026-02-23T14:06:45.175539Z\",\"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\":\"e501c63a-c862-4f27-a4c5-cf1cb1c6bded\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-rules/68f007c9-ab37-4fac-9964-eb5facc4ed86", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/e501c63a-c862-4f27-a4c5-cf1cb1c6bded", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get incident notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:45.515Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"962a94cb-6fbd-42fe-806f-4b2f4dfa6e01\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:06:45.623977968Z\",\"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\":\"2026-02-23T14:06:45.623978059Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "alert", + "content": "Test notification template", + "name": "Test Template Test-Get_incident_notification_template_returns_OK_response-1771855605", + "subject": "Test Subject" + }, + "relationships": { + "incident_type": { + "data": { + "id": "962a94cb-6fbd-42fe-806f-4b2f4dfa6e01", + "type": "incident_types" + } + } + }, + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-templates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fcafa9e4-8c66-4bcf-b77a-2d899ddc42ab\",\"type\":\"notification_templates\",\"attributes\":{\"category\":\"alert\",\"content\":\"Test notification template\",\"created\":\"2026-02-23T14:06:45.884503Z\",\"modified\":\"2026-02-23T14:06:45.884503Z\",\"name\":\"Test Template Test-Get_incident_notification_template_returns_OK_response-1771855605\",\"subject\":\"Test Subject\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"incident_type\":{\"data\":{\"id\":\"962a94cb-6fbd-42fe-806f-4b2f4dfa6e01\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/config/notification-templates/fcafa9e4-8c66-4bcf-b77a-2d899ddc42ab", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fcafa9e4-8c66-4bcf-b77a-2d899ddc42ab\",\"type\":\"notification_templates\",\"attributes\":{\"category\":\"alert\",\"content\":\"Test notification template\",\"created\":\"2026-02-23T14:06:45.884503Z\",\"modified\":\"2026-02-23T14:06:45.884503Z\",\"name\":\"Test Template Test-Get_incident_notification_template_returns_OK_response-1771855605\",\"subject\":\"Test Subject\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"incident_type\":{\"data\":{\"id\":\"962a94cb-6fbd-42fe-806f-4b2f4dfa6e01\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-templates/fcafa9e4-8c66-4bcf-b77a-2d899ddc42ab", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/962a94cb-6fbd-42fe-806f-4b2f4dfa6e01", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get incident notification template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2023-03-07T18:27:21.266Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Get_incident_todo_details_returns_OK_response-1678213641" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"37697217-2096-5139-8550-b620b2d8b0a3\",\"attributes\":{\"public_id\":124742,\"title\":\"Test-Get_incident_todo_details_returns_OK_response-1678213641\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2023-03-07T18:27:21.363231+00:00\",\"modified\":\"2023-03-07T18:27:21.363231+00:00\",\"commander\":null,\"detected\":\"2023-03-07T18:27:21.355801+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"ad2b9456-eaec-5bbd-9bae-e502d74e23f8\"},{\"type\":\"user_defined_field\",\"id\":\"299616f7-8acd-5403-886b-991656d6b982\"},{\"type\":\"user_defined_field\",\"id\":\"4148ead2-da45-548e-b6be-8e319bafc425\"},{\"type\":\"user_defined_field\",\"id\":\"66b62f59-48f6-5fee-969a-0886b1db6dcd\"},{\"type\":\"user_defined_field\",\"id\":\"d8a54f16-8b2a-5ab4-87b8-5f0fa575c83e\"},{\"type\":\"user_defined_field\",\"id\":\"623af0a5-f30c-577e-8146-09b8324bdb2d\"},{\"type\":\"user_defined_field\",\"id\":\"ccfc9e6c-f586-58e5-b502-03c466c72e6f\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignees": [ + "@test.user@test.com", + { + "icon": "https://a.slack-edge.com/80588/img/slackbot_48.png", + "id": "USLACKBOT", + "name": "Slackbot", + "source": "slack" + } + ], + "content": "Follow up with customer about the impact they saw." + }, + "type": "incident_todos" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/37697217-2096-5139-8550-b620b2d8b0a3/relationships/todos", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_todos\",\"id\":\"fde4f9a4-1415-5b9d-b8b4-b15804387d6b\",\"attributes\":{\"created\":\"2023-03-07T18:27:21.843287+00:00\",\"modified\":\"2023-03-07T18:27:21.843287+00:00\",\"completed\":null,\"due_date\":null,\"assignees\":[\"@test.user@test.com\",{\"icon\":\"https://a.slack-edge.com/80588/img/slackbot_48.png\",\"id\":\"USLACKBOT\",\"name\":\"Slackbot\",\"source\":\"slack\"}],\"content\":\"Follow up with customer about the impact they saw.\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"incident_id\":\"37697217-2096-5139-8550-b620b2d8b0a3\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/37697217-2096-5139-8550-b620b2d8b0a3/relationships/todos/fde4f9a4-1415-5b9d-b8b4-b15804387d6b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_todos\",\"id\":\"fde4f9a4-1415-5b9d-b8b4-b15804387d6b\",\"attributes\":{\"created\":\"2023-03-07T18:27:21.843287+00:00\",\"modified\":\"2023-03-07T18:27:21.843287+00:00\",\"completed\":null,\"due_date\":null,\"assignees\":[\"@test.user@test.com\",{\"id\":\"USLACKBOT\",\"icon\":\"https://a.slack-edge.com/80588/img/slackbot_48.png\",\"name\":\"Slackbot\",\"source\":\"slack\"}],\"content\":\"Follow up with customer about the impact they saw.\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"37697217-2096-5139-8550-b620b2d8b0a3\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":null,\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/37697217-2096-5139-8550-b620b2d8b0a3/relationships/todos/fde4f9a4-1415-5b9d-b8b4-b15804387d6b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/37697217-2096-5139-8550-b620b2d8b0a3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get incident todo details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:46.146Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Get_the_details_of_an_incident_returns_OK_response-1771855606" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"19c87e47-487a-5ce4-8841-61d23ea414d4\",\"attributes\":{\"public_id\":338021,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Get_the_details_of_an_incident_returns_OK_response-1771855606\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:46.306566+00:00\",\"modified\":\"2026-02-23T14:06:46.306566+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:46.292796+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:46.306566+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338021\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/19c87e47-487a-5ce4-8841-61d23ea414d4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"19c87e47-487a-5ce4-8841-61d23ea414d4\",\"attributes\":{\"public_id\":338021,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Get_the_details_of_an_incident_returns_OK_response-1771855606\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-23T14:06:46.306566+00:00\",\"modified\":\"2026-02-23T14:06:46.306566+00:00\",\"detected\":\"2026-02-23T14:06:46.292796+00:00\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:46.306566+00:00\",\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338021\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/19c87e47-487a-5ce4-8841-61d23ea414d4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get the details of an incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:46.943Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "title": "Test-Import_an_incident_returns_CREATED_response-1771855606", + "visibility": "organization" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/import", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e2fe83b8-e433-476f-bf2c-d076aee55bed\",\"type\":\"incidents\",\"attributes\":{\"archived\":null,\"case_id\":null,\"created\":\"2026-02-23T14:06:47.048266Z\",\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_end\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"declared\":\"2026-02-23T14:06:47.048266Z\",\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"detected\":\"2026-02-23T14:06:47.048266Z\",\"fields\":{\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338022\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null}},\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"is_test\":false,\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":\"2026-02-23T14:06:47.048266Z\",\"non_datadog_creator\":null,\"notification_handles\":null,\"public_id\":338022,\"resolved\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771855606\",\"visibility\":\"organization\"},\"relationships\":{\"attachments\":{\"data\":[]},\"commander_user\":{\"data\":null},\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"declared_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"impacts\":{\"data\":[]},\"incident_type\":{\"data\":{\"id\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"type\":\"incident_types\"}},\"integrations\":{\"data\":[]},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"responders\":{\"data\":[]},\"user_defined_fields\":{\"data\":[{\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\",\"type\":\"user_defined_field\"},{\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\",\"type\":\"user_defined_field\"},{\"id\":\"d003693c-bee9-5420-8d46-859269c20914\",\"type\":\"user_defined_field\"},{\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\",\"type\":\"user_defined_field\"},{\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\",\"type\":\"user_defined_field\"},{\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\",\"type\":\"user_defined_field\"},{\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\",\"type\":\"user_defined_field\"},{\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\",\"type\":\"user_defined_field\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/e2fe83b8-e433-476f-bf2c-d076aee55bed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Import an incident returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2025-09-16T19:47:40.461Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-List_an_incident_s_impacts_returns_OK_response-1758052060" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"81b6cd9f-526a-5a08-a204-ac402f36ea5f\",\"attributes\":{\"public_id\":309853,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-List_an_incident_s_impacts_returns_OK_response-1758052060\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2025-09-16T19:47:40.679710+00:00\",\"modified\":\"2025-09-16T19:47:40.679710+00:00\",\"commander\":null,\"detected\":\"2025-09-16T19:47:40.668385+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-09-16T19:47:40.679710+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/81b6cd9f-526a-5a08-a204-ac402f36ea5f/impacts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/81b6cd9f-526a-5a08-a204-ac402f36ea5f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List an incident's impacts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-01-06T19:47:22.974Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000000/attachments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"incident not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "List incident attachments returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:47.600Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-List_incident_attachments_returns_OK_response-1771855607" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"548c9855-15a4-5015-8a20-4d237f24d784\",\"attributes\":{\"public_id\":338023,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-List_incident_attachments_returns_OK_response-1771855607\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:47.756667+00:00\",\"modified\":\"2026-02-23T14:06:47.756667+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:47.748081+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:47.756667+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338023\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/TestListincidentattachmentsreturnsOKresponse1771855607/Test-List_incident_attachments_returns_OK_response-1771855607", + "title": "Test-List_incident_attachments_returns_OK_response-1771855607" + }, + "attachment_type": "postmortem" + }, + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/548c9855-15a4-5015-8a20-4d237f24d784/attachments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"70c374d6-069a-46cf-8031-d2be47b432cb\",\"type\":\"incident_attachments\",\"attributes\":{\"attachment\":{\"title\":\"Test-List_incident_attachments_returns_OK_response-1771855607\",\"documentUrl\":\"https://app.datadoghq.com/notebook/TestListincidentattachmentsreturnsOKresponse1771855607/Test-List_incident_attachments_returns_OK_response-1771855607\"},\"attachment_type\":\"postmortem\",\"modified\":\"2026-02-23T14:06:48.072714Z\"},\"relationships\":{\"incident\":{\"data\":{\"id\":\"548c9855-15a4-5015-8a20-4d237f24d784\",\"type\":\"incidents\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\",\"attributes\":{\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?d=retro\\u0026s=48\",\"name\":\"frog\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/548c9855-15a4-5015-8a20-4d237f24d784/attachments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"70c374d6-069a-46cf-8031-d2be47b432cb\",\"type\":\"incident_attachments\",\"attributes\":{\"attachment\":{\"title\":\"Test-List_incident_attachments_returns_OK_response-1771855607\",\"documentUrl\":\"https://app.datadoghq.com/notebook/TestListincidentattachmentsreturnsOKresponse1771855607/Test-List_incident_attachments_returns_OK_response-1771855607\"},\"attachment_type\":\"postmortem\",\"modified\":\"2026-02-23T14:06:48.072714Z\"},\"relationships\":{\"incident\":{\"data\":{\"id\":\"548c9855-15a4-5015-8a20-4d237f24d784\",\"type\":\"incidents\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}],\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\",\"attributes\":{\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?d=retro\\u0026s=48\",\"name\":\"frog\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/548c9855-15a4-5015-8a20-4d237f24d784/attachments/70c374d6-069a-46cf-8031-d2be47b432cb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/548c9855-15a4-5015-8a20-4d237f24d784", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List incident attachments returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:49.303Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"637b6149-2ec4-4fbb-9346-ca814670a349\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:06:49.406817513Z\",\"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\":\"2026-02-23T14:06:49.406817586Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "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": "637b6149-2ec4-4fbb-9346-ca814670a349", + "type": "incident_types" + } + } + }, + "type": "incident_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dba18fe0-a558-46b5-b20f-614d1e20e05c\",\"type\":\"incident_notification_rules\",\"attributes\":{\"conditions\":[{\"field\":\"severity\",\"values\":[\"SEV-1\",\"SEV-2\"]}],\"created\":\"2026-02-23T14:06:49.680631804Z\",\"enabled\":true,\"handles\":[\"@test-email@company.com\"],\"modified\":\"2026-02-23T14:06:49.680631804Z\",\"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\":\"637b6149-2ec4-4fbb-9346-ca814670a349\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/config/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"dba18fe0-a558-46b5-b20f-614d1e20e05c\",\"type\":\"incident_notification_rules\",\"attributes\":{\"conditions\":[{\"field\":\"severity\",\"values\":[\"SEV-1\",\"SEV-2\"]}],\"created\":\"2026-02-23T14:06:49.680631Z\",\"enabled\":true,\"handles\":[\"@test-email@company.com\"],\"modified\":\"2026-02-23T14:06:49.680631Z\",\"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\":\"637b6149-2ec4-4fbb-9346-ca814670a349\",\"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" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-rules/dba18fe0-a558-46b5-b20f-614d1e20e05c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/637b6149-2ec4-4fbb-9346-ca814670a349", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List incident notification rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:49.999Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/config/notification-templates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List incident notification templates returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:50.098Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Remove_commander_from_an_incident_returns_OK_response-1771855610" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"0716c140-d36a-51c2-a94a-c6ac657f1062\",\"attributes\":{\"public_id\":338024,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Remove_commander_from_an_incident_returns_OK_response-1771855610\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:50.256974+00:00\",\"modified\":\"2026-02-23T14:06:50.256974+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:50.245563+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:50.256974+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338024\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "0716c140-d36a-51c2-a94a-c6ac657f1062", + "relationships": { + "commander_user": { + "data": null + } + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/0716c140-d36a-51c2-a94a-c6ac657f1062", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"0716c140-d36a-51c2-a94a-c6ac657f1062\",\"attributes\":{\"public_id\":338024,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Remove_commander_from_an_incident_returns_OK_response-1771855610\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-23T14:06:50.256974+00:00\",\"modified\":\"2026-02-23T14:06:50.738252+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:50.245563+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:50.256974+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338024\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"be483c8c-6823-5185-aea4-2b5e3a1750f8\"}]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/0716c140-d36a-51c2-a94a-c6ac657f1062", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Remove commander from an incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:06:51.167Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Search_for_incidents_returns_OK_response-1771855611" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"ae9bf4be-cc56-5def-b363-1afe660c60a8\",\"attributes\":{\"public_id\":338025,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Search_for_incidents_returns_OK_response-1771855611\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:06:51.320944+00:00\",\"modified\":\"2026-02-23T14:06:51.320944+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:06:51.311326+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:06:51.320944+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338025\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/search", + "query": [ + [ + "query", + "state:(active OR stable OR resolved)" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents_search_results\",\"attributes\":{\"total\":5,\"facets\":{\"severity\":[{\"name\":\"SEV-5\",\"count\":4},{\"name\":\"UNKNOWN\",\"count\":1},{\"name\":\"SEV-1\",\"count\":0},{\"name\":\"SEV-2\",\"count\":0},{\"name\":\"SEV-3\",\"count\":0},{\"name\":\"SEV-4\",\"count\":0}],\"time_to_repair\":[{\"name\":\"time_to_repair\",\"aggregates\":{\"min\":null,\"max\":null}}],\"visibility\":[{\"name\":\"organization\",\"count\":5}],\"responder\":[{\"name\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\",\"count\":1,\"handle\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\",\"uuid\":\"677cf521-c579-4b83-988f-bf8eb6fb2d6c\",\"email\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\"}],\"impact\":[{\"name\":\"none\",\"count\":5}],\"time_to_detect\":[{\"name\":\"time_to_detect\",\"aggregates\":{\"min\":null,\"max\":null}}],\"postmortem\":[{\"name\":\"No\",\"count\":5},{\"name\":\"Yes\",\"count\":0}],\"time_to_resolve\":[{\"name\":\"time_to_resolve\",\"aggregates\":{\"min\":null,\"max\":null}}],\"is_test\":[{\"name\":0,\"count\":5},{\"name\":true,\"count\":0}],\"state\":[{\"name\":\"active\",\"count\":4},{\"name\":\"resolved\",\"count\":1},{\"name\":\"stable\",\"count\":0}],\"customer_impacted\":[{\"name\":0,\"count\":5},{\"name\":true,\"count\":0}],\"fields\":[{\"name\":\"detection_method\",\"facets\":[{\"name\":\"unknown\",\"count\":5},{\"name\":\"customer\",\"count\":0},{\"name\":\"employee\",\"count\":0},{\"name\":\"monitor\",\"count\":0},{\"name\":\"other\",\"count\":0}]},{\"name\":\"root_cause\",\"facets\":[]},{\"name\":\"services\",\"facets\":[]},{\"name\":\"slug\",\"facets\":[{\"name\":\"IR-336084\",\"count\":1},{\"name\":\"IR-336102\",\"count\":1},{\"name\":\"IR-336131\",\"count\":1},{\"name\":\"IR-336149\",\"count\":1},{\"name\":\"IR-336599\",\"count\":1}]},{\"name\":\"summary\",\"facets\":[]},{\"name\":\"teams\",\"facets\":[]}],\"created_by\":[{\"name\":\"frog\",\"count\":5,\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"email\":\"frog@datadoghq.com\"}],\"declared_by\":[{\"name\":\"frog\",\"count\":5,\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"email\":\"frog@datadoghq.com\"}],\"last_modified_by\":[{\"name\":\"frog\",\"count\":5,\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"email\":\"frog@datadoghq.com\"}],\"commander\":[{\"name\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\",\"count\":1,\"handle\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\",\"uuid\":\"677cf521-c579-4b83-988f-bf8eb6fb2d6c\",\"email\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\"}],\"incident_type\":[{\"name\":\"Security Incident\",\"count\":1,\"id\":\"227f4739-de77-47ac-ac1b-5b0fd5497b54\"},{\"name\":\"[DO NOT EDIT] f044c1c56d438506\",\"count\":1,\"id\":\"41d2e10b-4108-4736-92d7-791d00ea0702\"},{\"name\":\"Security Incident\",\"count\":1,\"id\":\"b19568c3-f758-47f3-8359-b7d3136ee4ce\"},{\"name\":\"Security Incident\",\"count\":1,\"id\":\"d5d8a5e6-0e41-4acb-bc80-e5476ba4711d\"},{\"name\":\"Security Incident\",\"count\":1,\"id\":\"e571c40e-671e-468e-b2d2-49abcddb2730\"}]},\"incidents\":[{\"data\":{\"type\":\"incidents\",\"attributes\":{\"modified\":\"2026-02-16T09:47:35+00:00\",\"customer_impact_duration\":0,\"created_by_uuid\":null,\"declared_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"resolved\":null,\"severity\":\"UNKNOWN\",\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"fields\":{\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"resolved\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336599\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"services\":{\"type\":\"autocomplete\",\"value\":null}},\"time_to_resolve\":0,\"non_datadog_creator\":null,\"detected\":\"2026-02-16T09:47:35+00:00\",\"title\":\"Example-Create_an_incident_returns_CREATED_response_1771235254\",\"notification_handles\":null,\"visibility\":\"organization\",\"creation_idempotency_key\":null,\"customer_impacted\":false,\"last_modified_by_uuid\":null,\"customer_impact_end\":null,\"time_to_detect\":0,\"declared_by_uuid\":null,\"public_id\":336599,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"\",\"email\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\",\"handle\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\",\"uuid\":\"677cf521-c579-4b83-988f-bf8eb6fb2d6c\",\"icon\":\"https://secure.gravatar.com/avatar/8d477f5bcc69ccd49bf802bca9cbac14?s=48&d=retro\"},\"id\":\"677cf521-c579-4b83-988f-bf8eb6fb2d6c\"}},\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"archived\":null,\"state\":\"resolved\",\"case_id\":null,\"time_to_repair\":0,\"is_test\":false,\"field_analytics\":{\"state\":{\"resolved\":{\"duration\":0,\"spans\":[{\"start\":1771235256,\"end\":null}]}}},\"time_to_internal_response\":0,\"created\":\"2026-02-16T09:47:35+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"declared\":\"2026-02-16T09:47:35+00:00\"},\"relationships\":{\"impacts\":{\"data\":[]},\"commander_user\":{\"data\":{\"type\":\"users\",\"id\":\"677cf521-c579-4b83-988f-bf8eb6fb2d6c\"}},\"user_defined_fields\":{\"data\":[]},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"f393bc25-a7d0-54f4-9114-98e6385143aa\"}]},\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"attachments\":{\"data\":[]},\"integrations\":{\"data\":[]},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"77afaefe-9585-5eba-9e1e-195149b3dc66\"}},{\"data\":{\"type\":\"incidents\",\"attributes\":{\"modified\":\"2026-02-13T22:08:22+00:00\",\"customer_impact_duration\":0,\"created_by_uuid\":null,\"declared_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"resolved\":null,\"severity\":\"SEV-5\",\"incident_type_uuid\":\"d5d8a5e6-0e41-4acb-bc80-e5476ba4711d\",\"fields\":{\"summary\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336149\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"}},\"time_to_resolve\":0,\"non_datadog_creator\":null,\"detected\":\"2025-01-01T00:00:00+00:00\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771020502\",\"notification_handles\":null,\"visibility\":\"organization\",\"creation_idempotency_key\":null,\"customer_impacted\":false,\"last_modified_by_uuid\":null,\"customer_impact_end\":null,\"time_to_detect\":0,\"declared_by_uuid\":null,\"public_id\":336149,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"archived\":null,\"state\":\"active\",\"case_id\":null,\"time_to_repair\":0,\"is_test\":false,\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1735689600,\"end\":null},{\"start\":1735689600,\"end\":null}]}}},\"time_to_internal_response\":0,\"created\":\"2026-02-13T22:08:22+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"declared\":\"2025-01-01T00:00:00+00:00\"},\"relationships\":{\"impacts\":{\"data\":[]},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[]},\"responders\":{\"data\":[]},\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"attachments\":{\"data\":[]},\"integrations\":{\"data\":[]},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"405ffa23-71f5-4f91-942a-9bf8a0bfa581\"}},{\"data\":{\"type\":\"incidents\",\"attributes\":{\"modified\":\"2026-02-13T22:00:49+00:00\",\"customer_impact_duration\":0,\"created_by_uuid\":null,\"declared_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"resolved\":null,\"severity\":\"SEV-5\",\"incident_type_uuid\":\"e571c40e-671e-468e-b2d2-49abcddb2730\",\"fields\":{\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336131\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"summary\":{\"type\":\"textbox\",\"value\":null}},\"time_to_resolve\":0,\"non_datadog_creator\":null,\"detected\":\"2025-01-01T00:00:00+00:00\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771020049\",\"notification_handles\":null,\"visibility\":\"organization\",\"creation_idempotency_key\":null,\"customer_impacted\":false,\"last_modified_by_uuid\":null,\"customer_impact_end\":null,\"time_to_detect\":0,\"declared_by_uuid\":null,\"public_id\":336131,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"archived\":null,\"state\":\"active\",\"case_id\":null,\"time_to_repair\":0,\"is_test\":false,\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1735689600,\"end\":null},{\"start\":1735689600,\"end\":null}]}}},\"time_to_internal_response\":0,\"created\":\"2026-02-13T22:00:49+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"declared\":\"2025-01-01T00:00:00+00:00\"},\"relationships\":{\"impacts\":{\"data\":[]},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[]},\"responders\":{\"data\":[]},\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"attachments\":{\"data\":[]},\"integrations\":{\"data\":[]},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"fb49e1f3-89af-496f-9587-107ea13b9adc\"}},{\"data\":{\"type\":\"incidents\",\"attributes\":{\"modified\":\"2026-02-13T20:39:48+00:00\",\"customer_impact_duration\":0,\"created_by_uuid\":null,\"declared_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"resolved\":null,\"severity\":\"SEV-5\",\"incident_type_uuid\":\"b19568c3-f758-47f3-8359-b7d3136ee4ce\",\"fields\":{\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336102\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"}},\"time_to_resolve\":0,\"non_datadog_creator\":null,\"detected\":\"2025-01-01T00:00:00+00:00\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771015188\",\"notification_handles\":null,\"visibility\":\"organization\",\"creation_idempotency_key\":null,\"customer_impacted\":false,\"last_modified_by_uuid\":null,\"customer_impact_end\":null,\"time_to_detect\":0,\"declared_by_uuid\":null,\"public_id\":336102,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"archived\":null,\"state\":\"active\",\"case_id\":null,\"time_to_repair\":0,\"is_test\":false,\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1735689600,\"end\":null},{\"start\":1735689600,\"end\":null}]}}},\"time_to_internal_response\":0,\"created\":\"2026-02-13T20:39:48+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"declared\":\"2025-01-01T00:00:00+00:00\"},\"relationships\":{\"impacts\":{\"data\":[]},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[]},\"responders\":{\"data\":[]},\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"attachments\":{\"data\":[]},\"integrations\":{\"data\":[]},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"cdb0f1f2-33ce-4465-85ea-fc8aa3f85d21\"}},{\"data\":{\"type\":\"incidents\",\"attributes\":{\"modified\":\"2026-02-13T20:38:19+00:00\",\"customer_impact_duration\":0,\"created_by_uuid\":null,\"declared_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"resolved\":null,\"severity\":\"SEV-5\",\"incident_type_uuid\":\"227f4739-de77-47ac-ac1b-5b0fd5497b54\",\"fields\":{\"summary\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336084\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"}},\"time_to_resolve\":0,\"non_datadog_creator\":null,\"detected\":\"2025-01-01T00:00:00+00:00\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771015099\",\"notification_handles\":null,\"visibility\":\"organization\",\"creation_idempotency_key\":null,\"customer_impacted\":false,\"last_modified_by_uuid\":null,\"customer_impact_end\":null,\"time_to_detect\":0,\"declared_by_uuid\":null,\"public_id\":336084,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"archived\":null,\"state\":\"active\",\"case_id\":null,\"time_to_repair\":0,\"is_test\":false,\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1735689600,\"end\":null},{\"start\":1735689600,\"end\":null}]}}},\"time_to_internal_response\":0,\"created\":\"2026-02-13T20:38:19+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"name\":\"frog\",\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"},\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"declared\":\"2025-01-01T00:00:00+00:00\"},\"relationships\":{\"impacts\":{\"data\":[]},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[]},\"responders\":{\"data\":[]},\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"attachments\":{\"data\":[]},\"integrations\":{\"data\":[]},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"d3c614dc-93e7-4648-b104-b4047548deca\"}}]},\"relationships\":{\"incidents_relationship\":{\"data\":[{\"type\":\"incidents\",\"id\":\"77afaefe-9585-5eba-9e1e-195149b3dc66\"},{\"type\":\"incidents\",\"id\":\"405ffa23-71f5-4f91-942a-9bf8a0bfa581\"},{\"type\":\"incidents\",\"id\":\"fb49e1f3-89af-496f-9587-107ea13b9adc\"},{\"type\":\"incidents\",\"id\":\"cdb0f1f2-33ce-4465-85ea-fc8aa3f85d21\"},{\"type\":\"incidents\",\"id\":\"d3c614dc-93e7-4648-b104-b4047548deca\"}]}}},\"included\":[{\"type\":\"incidents\",\"id\":\"77afaefe-9585-5eba-9e1e-195149b3dc66\",\"attributes\":{\"public_id\":336599,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Example-Create_an_incident_returns_CREATED_response_1771235254\",\"resolved\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-16T09:47:35+00:00\",\"modified\":\"2026-02-16T09:47:35+00:00\",\"commander\":{\"data\":{\"type\":\"users\",\"id\":\"677cf521-c579-4b83-988f-bf8eb6fb2d6c\",\"attributes\":{\"uuid\":\"677cf521-c579-4b83-988f-bf8eb6fb2d6c\",\"handle\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\",\"email\":\"example-create_an_incident_returns_created_response_1771235254@datadoghq.com\",\"name\":\"\",\"icon\":\"https://secure.gravatar.com/avatar/8d477f5bcc69ccd49bf802bca9cbac14?s=48&d=retro\"}}},\"detected\":\"2026-02-16T09:47:35+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-16T09:47:35+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"resolved\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336599\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"services\":{\"type\":\"autocomplete\",\"value\":null}},\"field_analytics\":{\"state\":{\"resolved\":{\"duration\":0,\"spans\":[{\"start\":1771235256,\"end\":null}]}}},\"severity\":\"UNKNOWN\",\"state\":\"resolved\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":{\"type\":\"users\",\"id\":\"677cf521-c579-4b83-988f-bf8eb6fb2d6c\"}},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"f393bc25-a7d0-54f4-9114-98e6385143aa\"}]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"405ffa23-71f5-4f91-942a-9bf8a0bfa581\",\"attributes\":{\"public_id\":336149,\"incident_type_uuid\":\"d5d8a5e6-0e41-4acb-bc80-e5476ba4711d\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771020502\",\"resolved\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-13T22:08:22+00:00\",\"modified\":\"2026-02-13T22:08:22+00:00\",\"commander\":null,\"detected\":\"2025-01-01T00:00:00+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-01-01T00:00:00+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"summary\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336149\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"}},\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1735689600,\"end\":null},{\"start\":1735689600,\"end\":null}]}}},\"severity\":\"SEV-5\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"fb49e1f3-89af-496f-9587-107ea13b9adc\",\"attributes\":{\"public_id\":336131,\"incident_type_uuid\":\"e571c40e-671e-468e-b2d2-49abcddb2730\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771020049\",\"resolved\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-13T22:00:49+00:00\",\"modified\":\"2026-02-13T22:00:49+00:00\",\"commander\":null,\"detected\":\"2025-01-01T00:00:00+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-01-01T00:00:00+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336131\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"summary\":{\"type\":\"textbox\",\"value\":null}},\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1735689600,\"end\":null},{\"start\":1735689600,\"end\":null}]}}},\"severity\":\"SEV-5\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"cdb0f1f2-33ce-4465-85ea-fc8aa3f85d21\",\"attributes\":{\"public_id\":336102,\"incident_type_uuid\":\"b19568c3-f758-47f3-8359-b7d3136ee4ce\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771015188\",\"resolved\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-13T20:39:48+00:00\",\"modified\":\"2026-02-13T20:39:48+00:00\",\"commander\":null,\"detected\":\"2025-01-01T00:00:00+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-01-01T00:00:00+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336102\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"}},\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1735689600,\"end\":null},{\"start\":1735689600,\"end\":null}]}}},\"severity\":\"SEV-5\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"d3c614dc-93e7-4648-b104-b4047548deca\",\"attributes\":{\"public_id\":336084,\"incident_type_uuid\":\"227f4739-de77-47ac-ac1b-5b0fd5497b54\",\"title\":\"Test-Import_an_incident_returns_CREATED_response-1771015099\",\"resolved\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-13T20:38:19+00:00\",\"modified\":\"2026-02-13T20:38:19+00:00\",\"commander\":null,\"detected\":\"2025-01-01T00:00:00+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2025-01-01T00:00:00+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"summary\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-336084\"},\"severity\":{\"type\":\"dropdown\",\"value\":\"SEV-5\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"}},\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1735689600,\"end\":null},{\"start\":1735689600,\"end\":null}]}}},\"severity\":\"SEV-5\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}],\"meta\":{\"pagination\":{\"offset\":0,\"next_offset\":5,\"size\":5}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/ae9bf4be-cc56-5def-b363-1afe660c60a8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Search for incidents returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2023-03-28T07:55:36.503Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/search", + "query": [ + [ + "page[size]", + "2" + ], + [ + "query", + "state:(active OR stable OR resolved)" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents_search_results\",\"attributes\":{\"total\":1703,\"facets\":{\"severity\":[{\"name\":\"UNKNOWN\",\"count\":1703},{\"name\":\"SEV-1\",\"count\":0},{\"name\":\"SEV-2\",\"count\":0},{\"name\":\"SEV-3\",\"count\":0},{\"name\":\"SEV-4\",\"count\":0},{\"name\":\"SEV-5\",\"count\":0}],\"time_to_repair\":[{\"name\":\"time_to_repair\",\"aggregates\":{\"min\":null,\"max\":null}}],\"responder\":[{\"name\":\"CI Account\",\"count\":844,\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},{\"name\":\"frog@datadoghq.com\",\"count\":107,\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"email\":\"frog@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\",\"uuid\":\"00a080f5-ba21-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\",\"uuid\":\"01dc2b21-3194-414a-b8e8-58704603421b\",\"email\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\",\"uuid\":\"02a54dc1-c38f-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\",\"uuid\":\"03e16d56-e954-4e9a-b9da-22dffdfa1f24\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\",\"uuid\":\"03e65d16-b7bb-456a-a5da-bf31dffbdf4d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\",\"uuid\":\"0423cfd5-a745-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\",\"uuid\":\"04c4feaa-1864-4167-a48b-e156181d50d8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\",\"uuid\":\"04f0d8b5-1959-43fb-85b5-782682062c4e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\",\"uuid\":\"05d83a07-93a0-11ed-bf65-7630e111ac00\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\",\"uuid\":\"060c37c0-93a9-48c0-90bc-dee85b66a7c7\",\"email\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\",\"uuid\":\"08f8d3b7-c38f-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\",\"uuid\":\"09010d4b-7635-4553-a7b9-973f5f9cea5b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\",\"uuid\":\"0a679024-93a0-11ed-aaf8-3230475e674b\",\"email\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\",\"uuid\":\"0ebbf763-be8f-40bb-8ee7-d37b729a5eed\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\",\"uuid\":\"1193cff3-b670-4e08-a535-346105dcaf9f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\",\"uuid\":\"1205474f-a1c5-11ed-b767-5ec4f5b84c10\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\",\"uuid\":\"122c89ad-9d0e-11ed-9f54-862b4cfe184c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\",\"uuid\":\"12d78e1b-0784-46f3-99ac-7e5db2d5c92e\",\"email\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\",\"uuid\":\"1310687d-9adb-47ae-ad7a-066c9e525f8b\",\"email\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\",\"uuid\":\"142ba3fc-9469-11ed-a365-8ec8661800c6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\",\"uuid\":\"1431aabf-c458-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\",\"uuid\":\"14344412-a7b1-4044-89f7-8139727432f6\",\"email\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\",\"uuid\":\"1608c46d-bee2-46a5-be87-49af2b889db5\",\"email\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\",\"uuid\":\"161217ca-a0b5-418c-b0e5-d16edddd8258\",\"email\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\",\"uuid\":\"1628d4a0-a80e-11ed-af43-4e64a4a39547\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\",\"uuid\":\"16754b18-1887-4f22-ae44-4a86e9bfc749\",\"email\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\",\"uuid\":\"1682f280-a1c5-11ed-ad87-fecda9c428d5\",\"email\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\",\"uuid\":\"16bf2921-9d0e-11ed-aff1-fa6399bf96fd\",\"email\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\",\"uuid\":\"18ada30d-ad3e-4ba2-911d-931233a75aa0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\",\"uuid\":\"18cfb810-ccfd-11ed-a201-de0443f18a2a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\",\"uuid\":\"18e9a7f7-9469-11ed-aaf8-3230475e674b\",\"email\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\",\"uuid\":\"1a8c2817-c458-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\",\"uuid\":\"1aa50cab-a80e-11ed-bc4c-ea1adbbc0986\",\"email\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\",\"uuid\":\"1bb87a6c-da01-4798-8bd0-5cd9918f641f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\",\"uuid\":\"1bcb111e-ea64-4d60-9b77-ae5e7f22f157\",\"email\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\",\"uuid\":\"1c54a963-17f1-4ee8-a2b0-7fd07c3b2c68\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\",\"uuid\":\"1c631d44-9920-11ed-8c68-2a913616fde8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\",\"uuid\":\"1ce329fb-b245-11ed-8fbc-ca7794d66904\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\",\"uuid\":\"1ebe2367-3eda-464c-9571-edd444620682\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\",\"uuid\":\"1f019dde-acc5-11ed-bcdd-a68779fca942\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\",\"uuid\":\"1f034a5d-ccfd-11ed-aef0-a6405a9b4791\",\"email\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\",\"uuid\":\"1fd5cef4-df5c-4609-be9a-11bf76483cfc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\",\"uuid\":\"20be4a8a-b215-4bc0-b2fa-31c27e0a642b\",\"email\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\",\"uuid\":\"20d2001a-92b4-4d03-a5cb-73617f27b723\",\"email\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\",\"uuid\":\"20dbaf3d-9920-11ed-8c68-2a913616fde8\",\"email\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\",\"uuid\":\"214ed4fd-b245-11ed-8fbc-ca7794d66904\",\"email\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\",\"uuid\":\"2375265b-acc5-11ed-9a7e-46e4eb8f12a7\",\"email\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\",\"uuid\":\"2399be00-e683-4133-aec2-7ab8fe73779e\",\"email\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\",\"uuid\":\"23a293e3-086a-4f8e-8fa6-a2555557309e\",\"email\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\",\"uuid\":\"24f932ba-4cd2-498e-8261-64f6ec161bcb\",\"email\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\",\"uuid\":\"25538030-b633-11ed-827a-8e2840b25db2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\",\"uuid\":\"2593795d-b0f5-46f9-a852-34d3c466ce0a\",\"email\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\",\"uuid\":\"26287ddb-5d1c-400d-96dc-a1d3bb09f880\",\"email\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\",\"uuid\":\"27c16c1b-c9d8-11ed-b840-0ed4b0ca293a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\",\"uuid\":\"281184f3-b17c-11ed-bce8-0a557ccee039\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\",\"uuid\":\"2871bc57-733f-4f85-b3ef-440569202326\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\",\"uuid\":\"289f8508-500c-472e-a9d4-71f30f1cf151\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\",\"uuid\":\"28ae893d-4b70-420d-96dc-f82066a0642f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\",\"uuid\":\"291b8416-a87d-4e56-a93e-9d430d5c4996\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\",\"uuid\":\"29cd6809-b633-11ed-827a-8e2840b25db2\",\"email\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\",\"uuid\":\"2acb4dc0-bfa1-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\",\"uuid\":\"2b0ac046-39c8-4bf4-a00a-deb089bbbc0c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\",\"uuid\":\"2c9256b5-c90f-11ed-a1f3-7afc45c1981c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\",\"uuid\":\"2c977e11-b17c-11ed-bce8-0a557ccee039\",\"email\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\",\"uuid\":\"2d99557e-c9d8-11ed-a171-361a8cacd441\",\"email\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\",\"uuid\":\"2db31432-b497-42b8-80b7-fef85898a2a8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\",\"uuid\":\"2ebfffc1-a7da-4558-a507-038442f7ee79\",\"email\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\",\"uuid\":\"2eca0bd9-db8e-4c5d-91b7-2ccddffd5764\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\",\"uuid\":\"2fc6258a-7492-43c0-accf-24528cbbfea1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\",\"uuid\":\"302a3d05-c61c-41d8-ad31-8821b764acf7\",\"email\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\",\"uuid\":\"30e3000f-bfa1-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\",\"uuid\":\"30e43861-abfc-11ed-a6fc-0e9b7fe457ae\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\",\"uuid\":\"31ad2923-926d-49af-ad5b-d8b120e6edc8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\",\"uuid\":\"32d40acb-c90f-11ed-a1f3-7afc45c1981c\",\"email\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\",\"uuid\":\"34377484-e597-4d4c-bccf-88e919b6d549\",\"email\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\",\"uuid\":\"34e92512-7c24-4704-816e-4fadc9b5eff7\",\"email\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\",\"uuid\":\"3578dcc8-088a-4320-8c27-7f80f1bba4cb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\",\"uuid\":\"3584000d-6337-4c9e-955e-e25514b83be0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\",\"uuid\":\"35ba7493-abfc-11ed-b5cd-eec9514dd597\",\"email\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\",\"uuid\":\"367e08f8-c06a-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\",\"uuid\":\"3883d9fe-1678-452e-8801-11a374f9fdae\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\",\"uuid\":\"39627294-7a14-4e71-b5ff-5221e68b6fbe\",\"email\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\",\"uuid\":\"3bc8406a-5790-4582-82f5-08e330921b9b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\",\"uuid\":\"3c28c823-158e-46c2-8dce-06f1dace90e8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\",\"uuid\":\"3c7509b1-82af-4d25-b1e5-3e8aaa107f0a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\",\"uuid\":\"3c7f71d2-c06a-11ed-a89b-0ebbb850607d\",\"email\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\",\"uuid\":\"3ce20d84-5e75-45a5-b7b9-971549a50cf4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\",\"uuid\":\"40d8c19a-8c6a-4f54-9444-aba7b6798064\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\",\"uuid\":\"41da9ce5-bbb3-11ed-82a6-028cebedd0cf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\",\"uuid\":\"426feaae-7bf3-4b2c-bc8c-0c79056d6d8d\",\"email\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\",\"uuid\":\"431624c4-d099-4dfb-b701-33a60bba6ebe\",\"email\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\",\"uuid\":\"442dd264-b729-473b-a51d-4b141068fe3d\",\"email\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\",\"uuid\":\"446cd2d8-630c-4fe9-8901-fb85bd22426d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\",\"uuid\":\"467de14f-bbb3-11ed-82a6-028cebedd0cf\",\"email\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\",\"uuid\":\"46d62900-016b-463c-9fff-c8b4f946ce5c\",\"email\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\",\"uuid\":\"46e3c6ef-a420-11ed-b1f8-56250c47f0b3\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\",\"uuid\":\"48f7337b-3304-46fc-9e88-23b4dc5d24cc\",\"email\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\",\"uuid\":\"4b432133-ba1b-4edc-ab57-c0250963f250\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\",\"uuid\":\"4b5ba977-c521-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\",\"uuid\":\"4b68a1e2-a420-11ed-b1f8-56250c47f0b3\",\"email\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\",\"uuid\":\"4e5cb15e-f18e-43ba-b115-2a4e62736739\",\"email\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\",\"uuid\":\"4e6b1824-dc1e-4691-8abd-5ffb968da7eb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\",\"uuid\":\"4fdb4327-3660-4aeb-b403-7f7939493f27\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\",\"uuid\":\"50d5408a-1894-4173-9fa1-32209009d9b1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\",\"uuid\":\"5141e45c-c521-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\",\"uuid\":\"520007b9-a357-11ed-acb5-6e0b90178632\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\",\"uuid\":\"521a78f7-573e-4b67-8e2c-d0dd5d91a265\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\",\"uuid\":\"54b84ea9-ae9f-4159-b226-aba3b432a792\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\",\"uuid\":\"551c3a48-99e9-11ed-a607-1684d7f553f6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\",\"uuid\":\"557fb06e-bc7c-11ed-be39-625d488bce09\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\",\"uuid\":\"56afe5b0-b855-11ed-a706-064bc8586212\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\",\"uuid\":\"56d1cddc-a357-11ed-95c6-eefcd7f14d98\",\"email\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\",\"uuid\":\"5705f818-933e-4ef4-818c-615b06f80fd1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\",\"uuid\":\"577067f0-c41d-4928-8964-0f7725e8cf68\",\"email\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\",\"uuid\":\"57e9dbb7-b855-11ed-ab26-8e492650c256\",\"email\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\",\"uuid\":\"58287ff7-caa1-11ed-81eb-8227c2cf9828\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\",\"uuid\":\"586e086f-1e29-4689-99b6-641c3218b0a8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\",\"uuid\":\"59b0d36c-99e9-11ed-8968-92ec5048e27c\",\"email\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\",\"uuid\":\"59c9cd2e-cd40-4530-ba50-415bce89b133\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\",\"uuid\":\"5b76378d-bc7c-11ed-ba16-0aeab349e953\",\"email\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\",\"uuid\":\"5baf69e4-9bd6-4c76-b552-2bfee88031b5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\",\"uuid\":\"5c4ecf79-7ffb-47ea-9331-687b04ac9df8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\",\"uuid\":\"5ce42d6d-a0b9-4d0f-893b-aa0b8f30ee5c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\",\"uuid\":\"5d11019d-f1dc-468d-a20a-8e64e7af9494\",\"email\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\",\"uuid\":\"5db9c599-b71f-40c6-84d9-8ca8779004e1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\",\"uuid\":\"5e20a7d6-caa1-11ed-b285-a2593f21064b\",\"email\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\",\"uuid\":\"5f3582c4-06d1-43a3-bab9-b7ece49136a4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\",\"uuid\":\"610753d8-8bc4-11ed-94a1-26632eba8bed\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\",\"uuid\":\"614ff267-b30e-11ed-b3d7-ea098e8dc2bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\",\"uuid\":\"61d88713-957f-4920-8a3b-65f0ccd79b57\",\"email\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\",\"uuid\":\"623452c3-d694-466a-95b9-140a9c44a1ab\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\",\"uuid\":\"65b38b0e-8bc4-11ed-81c7-fed5bfaa3f3d\",\"email\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\",\"uuid\":\"65e049af-b30e-11ed-82a1-e2db47427de5\",\"email\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\",\"uuid\":\"6847d712-9dd7-11ed-967f-12bf3e4c6b0d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\",\"uuid\":\"6887723d-dbde-4969-bba8-e9b3464645ce\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\",\"uuid\":\"6b9e40b1-bd01-11ed-8bd9-4a4655204cc7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\",\"uuid\":\"6c22fc34-31d7-4085-948b-d862feb447fe\",\"email\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\",\"uuid\":\"6ca38252-ad8e-11ed-9613-3a90352a946f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\",\"uuid\":\"6ccce5fc-d6a8-416d-921b-f883914b67ad\",\"email\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\",\"uuid\":\"6d0c845f-9dd7-11ed-a399-1a75992a86c7\",\"email\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\",\"uuid\":\"6d550b97-297b-43ea-a3dc-85383cf72fba\",\"email\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\",\"uuid\":\"6d7f7052-6ddb-461f-a49f-6cb5fca6b2c8\",\"email\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\",\"uuid\":\"6e0e84e3-b856-11ed-ab26-8e492650c256\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\",\"uuid\":\"6ed45bb9-a8d7-11ed-b51e-c2a468ff72a6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\",\"uuid\":\"6efabec4-24bc-46bd-8f53-e068f03adbf0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\",\"uuid\":\"6f41744d-b856-11ed-a706-064bc8586212\",\"email\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\",\"uuid\":\"70532155-9800-46d9-89ed-bd41347c3dfd\",\"email\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\",\"uuid\":\"713c4001-ad8e-11ed-be7d-0ec0d643006a\",\"email\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\",\"uuid\":\"71cb7181-bd01-11ed-8700-9293738b117d\",\"email\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\",\"uuid\":\"7247d247-e798-4af5-b9ce-7bf786c4d0c7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\",\"uuid\":\"73546355-1adc-4289-908a-2f6fae7fc9fa\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\",\"uuid\":\"738ccf6d-a8d7-11ed-ad7e-6ed4f1c67dea\",\"email\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\",\"uuid\":\"73a70dc9-b6fc-11ed-a3d7-a2295215c227\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\",\"uuid\":\"7571121d-a654-4df8-9afa-e638f17d53bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\",\"uuid\":\"76c071c8-9ab2-11ed-8c68-2a913616fde8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\",\"uuid\":\"7715eb6d-9ea0-11ed-8e78-767557a2485a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\",\"uuid\":\"785f915d-b6fc-11ed-ad05-76e4602e1079\",\"email\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\",\"uuid\":\"7ac9b3b9-9144-11ed-82e3-622adeb45fa9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\",\"uuid\":\"7b5907f1-9ab2-11ed-8c68-2a913616fde8\",\"email\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\",\"uuid\":\"7ba05e4d-f9a0-44e2-aa8c-bcda7adac2e5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\",\"uuid\":\"7bc2a11e-9ea0-11ed-8c38-7ad981f4abb4\",\"email\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\",\"uuid\":\"7da5fc01-ccbd-4679-8149-cb22fe402bb3\",\"email\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\",\"uuid\":\"7dd124ba-7343-4882-b700-c44374efa8e3\",\"email\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\",\"uuid\":\"7f3e8ad2-95fb-11ed-b93e-b6681b4e2484\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\",\"uuid\":\"7f7afd0e-9144-11ed-82e3-622adeb45fa9\",\"email\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\",\"uuid\":\"8009c2e2-ae57-11ed-b4cb-a681084bf13a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\",\"uuid\":\"81831280-6cb1-4a01-9dc9-f68b1405f8f6\",\"email\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\",\"uuid\":\"81da5714-b3d7-11ed-97bb-cad2b20710fd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\",\"uuid\":\"82eadb7f-c133-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\",\"uuid\":\"84060fed-95fb-11ed-b93e-b6681b4e2484\",\"email\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\",\"uuid\":\"847f57aa-1b32-4eee-8447-e6eef1f6744f\",\"email\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\",\"uuid\":\"848026b5-ae57-11ed-9ecb-824f74ccf3e4\",\"email\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\",\"uuid\":\"853cce16-d7d3-4bd6-8f99-b1eab0407cf1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\",\"uuid\":\"862d085b-48ce-446e-a74f-ae3538d623f5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\",\"uuid\":\"866af7b6-9f69-11ed-8c38-7ad981f4abb4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\",\"uuid\":\"86a13258-b3d7-11ed-a605-a260cf3212a9\",\"email\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\",\"uuid\":\"86bc89ca-9532-11ed-bf65-7630e111ac00\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\",\"uuid\":\"88c2cdf6-2769-4e68-9503-38d3f166ff1a\",\"email\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\",\"uuid\":\"88ce8004-c133-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\",\"uuid\":\"89229fdb-c6b3-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\",\"uuid\":\"8a2d2c9d-c478-4a74-94a8-cabb28bd1473\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\",\"uuid\":\"8ae38d89-9f69-11ed-bfa9-f2483e31eab5\",\"email\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\",\"uuid\":\"8b7b570e-9532-11ed-bf65-7630e111ac00\",\"email\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\",\"uuid\":\"8e41e3a8-a9a0-11ed-a060-46b9814ce648\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\",\"uuid\":\"8e85e36f-5ccd-4052-a34e-d7338178914e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\",\"uuid\":\"8f25b885-c6b3-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\",\"uuid\":\"8f8399af-4d57-41a1-91a3-37c29fb62092\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\",\"uuid\":\"8fa60296-198c-4113-8f21-0ba09e4fd83e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\",\"uuid\":\"8fb58f8b-cb6a-11ed-be83-92f82eb96735\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\",\"uuid\":\"91a8dc0a-0c63-4411-b9ab-39ec37dc2eee\",\"email\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\",\"uuid\":\"92c4c4e2-d881-485c-9668-0aa68239c513\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\",\"uuid\":\"936c4650-a9a0-11ed-af98-1a32d7edfd9d\",\"email\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\",\"uuid\":\"93e8df0e-729e-4d2f-b0a4-9495ffb37b06\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\",\"uuid\":\"94c9bf7f-920d-11ed-9cec-222dbf547024\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\",\"uuid\":\"94d92a17-4768-48dd-97b4-ab32fee4e33b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\",\"uuid\":\"94f7179d-40a0-4790-9436-6080eb0db034\",\"email\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\",\"uuid\":\"959ada1b-cb6a-11ed-9f7f-0e85fe61e6ee\",\"email\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\",\"uuid\":\"96796850-b278-4313-a726-9cf5c832fe30\",\"email\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\",\"uuid\":\"99579994-af20-11ed-94c9-462a25af4eaf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\",\"uuid\":\"995b112e-920d-11ed-9888-e278e4206645\",\"email\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\",\"uuid\":\"9b26b565-e0c1-4777-a693-553a8d5cb243\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\",\"uuid\":\"9b9fe3ac-f73b-43a5-b570-43d156e07ea9\",\"email\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\",\"uuid\":\"9c09fbea-fce4-4c02-9a45-ec845bab938a\",\"email\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\",\"uuid\":\"9c58a1dc-6beb-4390-928e-ed9d95b13b30\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\",\"uuid\":\"9ccf5d51-55b4-43e0-ad79-7819a8d223f0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\",\"uuid\":\"9dd94922-af20-11ed-94c9-462a25af4eaf\",\"email\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\",\"uuid\":\"9defa75d-a247-11ed-97de-223323d49fa6\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\",\"uuid\":\"9e072255-5184-44a8-ae5f-a8e70ec5037c\",\"email\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\",\"uuid\":\"9e85bf56-c1fc-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\",\"uuid\":\"9ee1d254-a247-11ed-92ef-6ad132878933\",\"email\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\",\"uuid\":\"9f5a1546-bccf-4b9f-a25f-96fb87bd7bfc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\",\"uuid\":\"9f88a5e0-9842-4fd1-95c7-7f85edad3874\",\"email\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\",\"uuid\":\"a136a629-05cd-4a2f-b925-e1d74c6a69ad\",\"email\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\",\"uuid\":\"a18c9430-e993-488f-8b5c-3ad27997e55c\",\"email\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\",\"uuid\":\"a3644be2-a4e9-11ed-b7fb-1ea641c369ef\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\",\"uuid\":\"a4230eac-f78e-407d-8551-b07c6476622b\",\"email\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\",\"uuid\":\"a4aff885-c1fc-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\",\"uuid\":\"a813f7f3-a4e9-11ed-9388-1ad521c601b9\",\"email\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\",\"uuid\":\"a96c393b-978d-11ed-b425-4e7b3187c657\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\",\"uuid\":\"a9977d83-cddd-4644-ba02-dc1a86c0293e\",\"email\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\",\"uuid\":\"aabc794c-bd45-11ed-9ea1-9ebf47de1fdb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\",\"uuid\":\"ab5bb1f0-b9b2-43da-bd50-e5ba7315fc29\",\"email\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\",\"uuid\":\"abedb0a5-92d6-11ed-a082-5215624996c0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\",\"uuid\":\"ac484716-4260-4fd9-8288-1d4a6b0d39da\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\",\"uuid\":\"ade2bf85-978d-11ed-b425-4e7b3187c657\",\"email\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\",\"uuid\":\"b0771f90-92d6-11ed-a082-5215624996c0\",\"email\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\",\"uuid\":\"b12b859b-c89a-4023-84e6-2634f93fff00\",\"email\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\",\"uuid\":\"b155e604-bd45-11ed-ba70-22d478e15cef\",\"email\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\",\"uuid\":\"b2f195b3-53b7-4095-bfb8-90538edb12f7\",\"email\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\",\"uuid\":\"b2fc8929-b88e-11ed-8da2-b6d07de5d20c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\",\"uuid\":\"b335a7f4-a66e-41ed-b4aa-982c5b76ffc1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\",\"uuid\":\"b39fcb21-440b-4bd8-bc55-103259b74a57\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\",\"uuid\":\"b3ccf662-7d0d-4a45-9cb3-5ffcb089012c\",\"email\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\",\"uuid\":\"b4a8f9a4-28a9-4311-a813-8149eb5264f4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\",\"uuid\":\"b631798d-d17b-44ab-af5c-f075df907ddd\",\"email\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\",\"uuid\":\"b768b7b4-b88e-11ed-a132-2aa63a904ba0\",\"email\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\",\"uuid\":\"b7d64361-36fd-4ebd-9438-949f60ec3745\",\"email\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\",\"uuid\":\"b8fa89c4-34f6-4b69-a654-e3671ce743a0\",\"email\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\",\"uuid\":\"b9d64d92-66de-41cc-9164-b83b7b74439f\",\"email\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\",\"uuid\":\"bbd69d76-96c4-11ed-b802-922cd9596b23\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\",\"uuid\":\"bc036552-b05e-4ffd-8dd1-44dbe725a6ec\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\",\"uuid\":\"bcb9456d-8b65-4369-b2c4-49ee5e4c14b7\",\"email\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\",\"uuid\":\"bd7e4c91-9b7b-11ed-882c-9aa2ca31c98c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\",\"uuid\":\"bdc08c5f-afe9-11ed-84e6-a6c768ad21b4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\",\"uuid\":\"be421a73-22de-48d3-be3f-1a269016ff83\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\",\"uuid\":\"bf08166d-a032-11ed-88af-be56a8628f3f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\",\"uuid\":\"c09c4f30-96c4-11ed-9f1c-fe165ba0981c\",\"email\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\",\"uuid\":\"c20da1a9-657e-4b5a-9159-9f4d324f51fc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\",\"uuid\":\"c22b3e65-a5b2-11ed-9388-1ad521c601b9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\",\"uuid\":\"c23885b0-3659-4d47-b5c9-16c0965dc7d9\",\"email\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\",\"uuid\":\"c238d04b-c77c-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\",\"uuid\":\"c23e01c9-9b7b-11ed-8af1-7201c2784402\",\"email\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\",\"uuid\":\"c27df074-afe9-11ed-bce8-0a557ccee039\",\"email\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\",\"uuid\":\"c36f2608-4650-4331-b810-1dc5500c1356\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\",\"uuid\":\"c381f80b-8a88-47bd-9dbe-77720d784a52\",\"email\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\",\"uuid\":\"c39f3031-906f-4679-a817-9b8f072254bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\",\"uuid\":\"c3e2d867-a032-11ed-88af-be56a8628f3f\",\"email\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\",\"uuid\":\"c567f0fa-6f70-42e3-855e-2ae1d2ed7243\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\",\"uuid\":\"c60a0f7d-3f36-4966-a63f-f1f77dca030a\",\"email\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\",\"uuid\":\"c61f4ec1-ab32-11ed-8972-1eb0f4245ee5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\",\"uuid\":\"c6d4d92c-a5b2-11ed-b7fb-1ea641c369ef\",\"email\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\",\"uuid\":\"c7319ecf-1451-4031-817a-5bef597d5ac9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\",\"uuid\":\"c7b7b86f-5268-4c20-b223-afc7923d54b9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\",\"uuid\":\"c811af38-c77c-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\",\"uuid\":\"c8bbd0d2-53af-4fc0-a392-1c1c0871fb49\",\"email\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\",\"uuid\":\"c8e6753d-801c-40b5-9dd8-c98feae31df9\",\"email\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\",\"uuid\":\"c960ccca-c5ea-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\",\"uuid\":\"c9f53cd7-2f1e-4491-ae28-796ace9db6fc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\",\"uuid\":\"cac0f70c-c327-4965-b9f9-62190c96b0dc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\",\"uuid\":\"caf6ae98-ab32-11ed-bddd-722daf28c490\",\"email\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\",\"uuid\":\"cc0a6e87-ce4b-4313-b0a8-8b40179bcb68\",\"email\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\",\"uuid\":\"cc1891b1-9a95-4af6-98d7-95ac53c4e6ff\",\"email\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\",\"uuid\":\"cf9a8e87-c5ea-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\",\"uuid\":\"d0330853-c731-4097-a353-fd1014abde80\",\"email\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\",\"uuid\":\"d1d53f95-4adc-4e7b-896b-1e75ba345e9f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\",\"uuid\":\"d5aa246d-a67b-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\",\"uuid\":\"d654fb42-b569-11ed-827a-8e2840b25db2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\",\"uuid\":\"d6780612-b0b2-11ed-a714-aa504cceab29\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\",\"uuid\":\"d70a12ec-c10f-47dd-9892-cebecfd6ffb0\",\"email\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\",\"uuid\":\"d968eb97-03c1-436e-835f-9ed06d352716\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\",\"uuid\":\"d9a19936-2b5c-4fbc-b802-7a3dbf639c1b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\",\"uuid\":\"da3ac6ee-a67b-11ed-bd1e-766989ec1239\",\"email\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\",\"uuid\":\"dac22963-b569-11ed-a797-c2fe525de487\",\"email\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\",\"uuid\":\"db0404af-b0b2-11ed-84e6-a6c768ad21b4\",\"email\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\",\"uuid\":\"dcbcad43-008c-4c4c-8c35-ee5ade081d9e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\",\"uuid\":\"ddd99aa3-c7e5-4dff-8099-10588153e164\",\"email\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\",\"uuid\":\"de662b96-845c-45b9-a359-b0b763a45a61\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\",\"uuid\":\"def01997-ae71-49bc-93ea-ff9287d606c7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\",\"uuid\":\"e09cd088-50f3-4a99-8222-0917d760f4fb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\",\"uuid\":\"e0a87080-eb76-45db-9230-ed4ef629b0d2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\",\"uuid\":\"e1073fac-c2c5-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\",\"uuid\":\"e21b3798-5777-4777-919d-e5ff6fce422a\",\"email\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\",\"uuid\":\"e2267bdc-1a12-4210-869e-60d0faa477bd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\",\"uuid\":\"e42f7f54-0e83-4c40-b112-887402a7ba6b\",\"email\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\",\"uuid\":\"e485ea7a-9a64-44dd-a774-d3f31e869f6e\",\"email\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\",\"uuid\":\"e6615793-c00d-45e8-b8d6-ec1c96309d81\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\",\"uuid\":\"e6d0a0d2-e642-4b20-aa66-34ab638f4d9f\",\"email\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\",\"uuid\":\"e7113f68-c2c5-11ed-b4e0-566658a732f8\",\"email\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\",\"uuid\":\"e7403ce3-c0a2-4bae-8823-45a21c310656\",\"email\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\",\"uuid\":\"e7d1ba87-be0e-11ed-be0d-5609971d255a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\",\"uuid\":\"e84ce941-4c3d-4b79-b736-619897785a82\",\"email\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\",\"uuid\":\"e9b00493-1235-49f2-b229-06ee3afc79b0\",\"email\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\",\"uuid\":\"e9f6df6e-aa69-11ed-8972-1eb0f4245ee5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\",\"uuid\":\"e9ffa5e5-b7c5-11ed-a50e-226546b1da54\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\",\"uuid\":\"eb03f9a6-c845-11ed-a1e1-c6385b25b934\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\",\"uuid\":\"eb834f42-bed7-11ed-a89b-0ebbb850607d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\",\"uuid\":\"ebb5a53d-9c44-11ed-97cc-a697d2568caf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\",\"uuid\":\"ebf0848a-6b21-4736-ad2a-d93daf59fd15\",\"email\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\",\"uuid\":\"ebf23d4b-53c8-467a-bbb0-636c11b3ffee\",\"email\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\",\"uuid\":\"ec1ed77b-1d70-4727-b2ac-f478a37e3b8c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\",\"uuid\":\"edaec5b4-be0e-11ed-be0d-5609971d255a\",\"email\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\",\"uuid\":\"ee1307d6-f262-47be-b312-0f77517487b8\",\"email\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\",\"uuid\":\"ee8bd235-cc33-11ed-b285-a2593f21064b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\",\"uuid\":\"eeac3af0-aa69-11ed-bddd-722daf28c490\",\"email\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\",\"uuid\":\"eeb210e2-b7c5-11ed-8e20-4a014c845df9\",\"email\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\",\"uuid\":\"efc56647-04f9-430b-abcd-78fd73135dc9\",\"email\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\",\"uuid\":\"f090690e-9c44-11ed-bd03-d63a15ea0a5e\",\"email\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\",\"uuid\":\"f1130564-9856-11ed-8928-461f5552e193\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\",\"uuid\":\"f116f34c-c845-11ed-8b17-fe25dd6b2d5d\",\"email\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\",\"uuid\":\"f182abdf-bed7-11ed-b4e0-566658a732f8\",\"email\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\",\"uuid\":\"f185aa8c-b4a0-11ed-a797-c2fe525de487\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\",\"uuid\":\"f24bcc61-bae9-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\",\"uuid\":\"f352f9e3-b965-11ed-b5bf-a606768bc197\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\",\"uuid\":\"f48dd27a-cc33-11ed-9f7f-0e85fe61e6ee\",\"email\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\",\"uuid\":\"f59374fc-a0fb-11ed-a5e8-da207d422d98\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\",\"uuid\":\"f5a1e00e-9856-11ed-a432-b611e40f0c37\",\"email\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\",\"uuid\":\"f5d92ebe-a28d-11ed-b39d-128f55cb4249\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\",\"uuid\":\"f611f5ab-b4a0-11ed-a797-c2fe525de487\",\"email\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\",\"uuid\":\"f6a52e1f-a5fc-4498-b0f2-69fee17a4142\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\",\"uuid\":\"f6c58d1e-bae9-11ed-8f91-4668bdad4d01\",\"email\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\",\"uuid\":\"f7f12039-b965-11ed-b5bf-a606768bc197\",\"email\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\",\"uuid\":\"f8313d55-863c-4872-8f01-5a74e04418d2\",\"email\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\",\"uuid\":\"f92f0fb9-f3fd-42ff-955a-744cc01ee9a4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\",\"uuid\":\"f9e94170-240d-43ed-a3e4-dec65a38531b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\",\"uuid\":\"fa40ced7-a0fb-11ed-a5e3-d6024dc128f7\",\"email\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\",\"uuid\":\"fa6d1a19-a28d-11ed-9c57-8a8107f52a6e\",\"email\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\",\"uuid\":\"fbd2af3f-ba20-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\",\"uuid\":\"fc061455-8536-4ea0-8a7c-d6bd072c5b89\",\"email\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\",\"uuid\":\"fd20bff8-5c0c-4eb2-941b-c0d7669f996a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\",\"uuid\":\"fdef06c9-5a21-44bb-afb4-14b055649e5b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\",\"uuid\":\"fe4f352d-a8b5-435e-a18c-9914eb88c865\",\"email\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\",\"uuid\":\"ff2e2858-cf28-44c7-98aa-be52cef329be\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\",\"uuid\":\"ff9a7c79-a744-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\"}],\"impact\":[{\"name\":\"none\",\"count\":1703}],\"postmortem\":[{\"name\":\"No\",\"count\":1703},{\"name\":\"Yes\",\"count\":0}],\"time_to_resolve\":[{\"name\":\"time_to_resolve\",\"aggregates\":{\"min\":2.0,\"max\":3.0}}],\"state\":[{\"name\":\"active\",\"count\":1360},{\"name\":\"resolved\",\"count\":343},{\"name\":\"stable\",\"count\":0}],\"customer_impacted\":[{\"name\":0,\"count\":1703},{\"name\":true,\"count\":0}],\"fields\":[{\"name\":\"detection_method\",\"facets\":[{\"name\":\"unknown\",\"count\":1703},{\"name\":\"customer\",\"count\":0},{\"name\":\"employee\",\"count\":0},{\"name\":\"monitor\",\"count\":0},{\"name\":\"other\",\"count\":0}]},{\"name\":\"root_cause\",\"facets\":[]},{\"name\":\"services\",\"facets\":[]},{\"name\":\"summary\",\"facets\":[]},{\"name\":\"teams\",\"facets\":[]}],\"created_by\":[{\"name\":\"CI Account\",\"count\":1505,\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},{\"name\":\"frog@datadoghq.com\",\"count\":198,\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"email\":\"frog@datadoghq.com\"}],\"last_modified_by\":[{\"name\":\"CI Account\",\"count\":1505,\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},{\"name\":\"frog@datadoghq.com\",\"count\":198,\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"email\":\"frog@datadoghq.com\"}],\"commander\":[{\"name\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\",\"uuid\":\"00a080f5-ba21-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\",\"uuid\":\"01dc2b21-3194-414a-b8e8-58704603421b\",\"email\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\",\"uuid\":\"02a54dc1-c38f-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\",\"uuid\":\"03e16d56-e954-4e9a-b9da-22dffdfa1f24\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\",\"uuid\":\"03e65d16-b7bb-456a-a5da-bf31dffbdf4d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\",\"uuid\":\"0423cfd5-a745-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\",\"uuid\":\"04c4feaa-1864-4167-a48b-e156181d50d8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\",\"uuid\":\"04f0d8b5-1959-43fb-85b5-782682062c4e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\",\"uuid\":\"05d83a07-93a0-11ed-bf65-7630e111ac00\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\",\"uuid\":\"060c37c0-93a9-48c0-90bc-dee85b66a7c7\",\"email\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\",\"uuid\":\"08f8d3b7-c38f-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\",\"uuid\":\"09010d4b-7635-4553-a7b9-973f5f9cea5b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\",\"uuid\":\"0a679024-93a0-11ed-aaf8-3230475e674b\",\"email\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\",\"uuid\":\"0ebbf763-be8f-40bb-8ee7-d37b729a5eed\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\",\"uuid\":\"1193cff3-b670-4e08-a535-346105dcaf9f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\",\"uuid\":\"1205474f-a1c5-11ed-b767-5ec4f5b84c10\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\",\"uuid\":\"122c89ad-9d0e-11ed-9f54-862b4cfe184c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\",\"uuid\":\"12d78e1b-0784-46f3-99ac-7e5db2d5c92e\",\"email\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\",\"uuid\":\"1310687d-9adb-47ae-ad7a-066c9e525f8b\",\"email\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\",\"uuid\":\"142ba3fc-9469-11ed-a365-8ec8661800c6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\",\"uuid\":\"1431aabf-c458-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\",\"uuid\":\"14344412-a7b1-4044-89f7-8139727432f6\",\"email\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\",\"uuid\":\"1608c46d-bee2-46a5-be87-49af2b889db5\",\"email\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\",\"uuid\":\"161217ca-a0b5-418c-b0e5-d16edddd8258\",\"email\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\",\"uuid\":\"1628d4a0-a80e-11ed-af43-4e64a4a39547\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\",\"uuid\":\"16754b18-1887-4f22-ae44-4a86e9bfc749\",\"email\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\",\"uuid\":\"1682f280-a1c5-11ed-ad87-fecda9c428d5\",\"email\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\",\"uuid\":\"16bf2921-9d0e-11ed-aff1-fa6399bf96fd\",\"email\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\",\"uuid\":\"18ada30d-ad3e-4ba2-911d-931233a75aa0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\",\"uuid\":\"18cfb810-ccfd-11ed-a201-de0443f18a2a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\",\"uuid\":\"18e9a7f7-9469-11ed-aaf8-3230475e674b\",\"email\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\",\"uuid\":\"1a8c2817-c458-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\",\"uuid\":\"1aa50cab-a80e-11ed-bc4c-ea1adbbc0986\",\"email\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\",\"uuid\":\"1bb87a6c-da01-4798-8bd0-5cd9918f641f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\",\"uuid\":\"1bcb111e-ea64-4d60-9b77-ae5e7f22f157\",\"email\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\",\"uuid\":\"1c54a963-17f1-4ee8-a2b0-7fd07c3b2c68\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\",\"uuid\":\"1c631d44-9920-11ed-8c68-2a913616fde8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\",\"uuid\":\"1ce329fb-b245-11ed-8fbc-ca7794d66904\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\",\"uuid\":\"1ebe2367-3eda-464c-9571-edd444620682\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\",\"uuid\":\"1f019dde-acc5-11ed-bcdd-a68779fca942\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\",\"uuid\":\"1f034a5d-ccfd-11ed-aef0-a6405a9b4791\",\"email\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\",\"uuid\":\"1fd5cef4-df5c-4609-be9a-11bf76483cfc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\",\"uuid\":\"20be4a8a-b215-4bc0-b2fa-31c27e0a642b\",\"email\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\",\"uuid\":\"20d2001a-92b4-4d03-a5cb-73617f27b723\",\"email\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\",\"uuid\":\"20dbaf3d-9920-11ed-8c68-2a913616fde8\",\"email\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\",\"uuid\":\"214ed4fd-b245-11ed-8fbc-ca7794d66904\",\"email\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\",\"uuid\":\"2375265b-acc5-11ed-9a7e-46e4eb8f12a7\",\"email\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\",\"uuid\":\"2399be00-e683-4133-aec2-7ab8fe73779e\",\"email\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\",\"uuid\":\"23a293e3-086a-4f8e-8fa6-a2555557309e\",\"email\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\",\"uuid\":\"24f932ba-4cd2-498e-8261-64f6ec161bcb\",\"email\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\",\"uuid\":\"25538030-b633-11ed-827a-8e2840b25db2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\",\"uuid\":\"2593795d-b0f5-46f9-a852-34d3c466ce0a\",\"email\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\",\"uuid\":\"26287ddb-5d1c-400d-96dc-a1d3bb09f880\",\"email\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\",\"uuid\":\"27c16c1b-c9d8-11ed-b840-0ed4b0ca293a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\",\"uuid\":\"281184f3-b17c-11ed-bce8-0a557ccee039\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\",\"uuid\":\"2871bc57-733f-4f85-b3ef-440569202326\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\",\"uuid\":\"289f8508-500c-472e-a9d4-71f30f1cf151\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\",\"uuid\":\"28ae893d-4b70-420d-96dc-f82066a0642f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\",\"uuid\":\"291b8416-a87d-4e56-a93e-9d430d5c4996\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\",\"uuid\":\"29cd6809-b633-11ed-827a-8e2840b25db2\",\"email\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\",\"uuid\":\"2acb4dc0-bfa1-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\",\"uuid\":\"2b0ac046-39c8-4bf4-a00a-deb089bbbc0c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\",\"uuid\":\"2c9256b5-c90f-11ed-a1f3-7afc45c1981c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\",\"uuid\":\"2c977e11-b17c-11ed-bce8-0a557ccee039\",\"email\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\",\"uuid\":\"2d99557e-c9d8-11ed-a171-361a8cacd441\",\"email\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\",\"uuid\":\"2db31432-b497-42b8-80b7-fef85898a2a8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\",\"uuid\":\"2ebfffc1-a7da-4558-a507-038442f7ee79\",\"email\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\",\"uuid\":\"2eca0bd9-db8e-4c5d-91b7-2ccddffd5764\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\",\"uuid\":\"2fc6258a-7492-43c0-accf-24528cbbfea1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\",\"uuid\":\"302a3d05-c61c-41d8-ad31-8821b764acf7\",\"email\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\",\"uuid\":\"30e3000f-bfa1-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\",\"uuid\":\"30e43861-abfc-11ed-a6fc-0e9b7fe457ae\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\",\"uuid\":\"31ad2923-926d-49af-ad5b-d8b120e6edc8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\",\"uuid\":\"32d40acb-c90f-11ed-a1f3-7afc45c1981c\",\"email\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\",\"uuid\":\"34377484-e597-4d4c-bccf-88e919b6d549\",\"email\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\",\"uuid\":\"34e92512-7c24-4704-816e-4fadc9b5eff7\",\"email\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\",\"uuid\":\"3578dcc8-088a-4320-8c27-7f80f1bba4cb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\",\"uuid\":\"3584000d-6337-4c9e-955e-e25514b83be0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\",\"uuid\":\"35ba7493-abfc-11ed-b5cd-eec9514dd597\",\"email\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\",\"uuid\":\"367e08f8-c06a-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\",\"uuid\":\"3883d9fe-1678-452e-8801-11a374f9fdae\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\",\"uuid\":\"39627294-7a14-4e71-b5ff-5221e68b6fbe\",\"email\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\",\"uuid\":\"3bc8406a-5790-4582-82f5-08e330921b9b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\",\"uuid\":\"3c28c823-158e-46c2-8dce-06f1dace90e8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\",\"uuid\":\"3c7509b1-82af-4d25-b1e5-3e8aaa107f0a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\",\"uuid\":\"3c7f71d2-c06a-11ed-a89b-0ebbb850607d\",\"email\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\",\"uuid\":\"3ce20d84-5e75-45a5-b7b9-971549a50cf4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\",\"uuid\":\"40d8c19a-8c6a-4f54-9444-aba7b6798064\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\",\"uuid\":\"41da9ce5-bbb3-11ed-82a6-028cebedd0cf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\",\"uuid\":\"426feaae-7bf3-4b2c-bc8c-0c79056d6d8d\",\"email\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\",\"uuid\":\"431624c4-d099-4dfb-b701-33a60bba6ebe\",\"email\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\",\"uuid\":\"442dd264-b729-473b-a51d-4b141068fe3d\",\"email\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\",\"uuid\":\"446cd2d8-630c-4fe9-8901-fb85bd22426d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\",\"uuid\":\"467de14f-bbb3-11ed-82a6-028cebedd0cf\",\"email\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\",\"uuid\":\"46d62900-016b-463c-9fff-c8b4f946ce5c\",\"email\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\",\"uuid\":\"46e3c6ef-a420-11ed-b1f8-56250c47f0b3\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\",\"uuid\":\"48f7337b-3304-46fc-9e88-23b4dc5d24cc\",\"email\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\",\"uuid\":\"4b432133-ba1b-4edc-ab57-c0250963f250\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\",\"uuid\":\"4b5ba977-c521-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\",\"uuid\":\"4b68a1e2-a420-11ed-b1f8-56250c47f0b3\",\"email\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\",\"uuid\":\"4e5cb15e-f18e-43ba-b115-2a4e62736739\",\"email\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\",\"uuid\":\"4e6b1824-dc1e-4691-8abd-5ffb968da7eb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\",\"uuid\":\"4fdb4327-3660-4aeb-b403-7f7939493f27\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\",\"uuid\":\"50d5408a-1894-4173-9fa1-32209009d9b1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\",\"uuid\":\"5141e45c-c521-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\",\"uuid\":\"520007b9-a357-11ed-acb5-6e0b90178632\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\",\"uuid\":\"521a78f7-573e-4b67-8e2c-d0dd5d91a265\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\",\"uuid\":\"54b84ea9-ae9f-4159-b226-aba3b432a792\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\",\"uuid\":\"551c3a48-99e9-11ed-a607-1684d7f553f6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\",\"uuid\":\"557fb06e-bc7c-11ed-be39-625d488bce09\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\",\"uuid\":\"56afe5b0-b855-11ed-a706-064bc8586212\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\",\"uuid\":\"56d1cddc-a357-11ed-95c6-eefcd7f14d98\",\"email\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\",\"uuid\":\"5705f818-933e-4ef4-818c-615b06f80fd1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\",\"uuid\":\"577067f0-c41d-4928-8964-0f7725e8cf68\",\"email\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\",\"uuid\":\"57e9dbb7-b855-11ed-ab26-8e492650c256\",\"email\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\",\"uuid\":\"58287ff7-caa1-11ed-81eb-8227c2cf9828\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\",\"uuid\":\"586e086f-1e29-4689-99b6-641c3218b0a8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\",\"uuid\":\"59b0d36c-99e9-11ed-8968-92ec5048e27c\",\"email\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\",\"uuid\":\"59c9cd2e-cd40-4530-ba50-415bce89b133\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\",\"uuid\":\"5b76378d-bc7c-11ed-ba16-0aeab349e953\",\"email\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\",\"uuid\":\"5baf69e4-9bd6-4c76-b552-2bfee88031b5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\",\"uuid\":\"5c4ecf79-7ffb-47ea-9331-687b04ac9df8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\",\"uuid\":\"5ce42d6d-a0b9-4d0f-893b-aa0b8f30ee5c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\",\"uuid\":\"5d11019d-f1dc-468d-a20a-8e64e7af9494\",\"email\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\",\"uuid\":\"5db9c599-b71f-40c6-84d9-8ca8779004e1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\",\"uuid\":\"5e20a7d6-caa1-11ed-b285-a2593f21064b\",\"email\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\",\"uuid\":\"5f3582c4-06d1-43a3-bab9-b7ece49136a4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\",\"uuid\":\"610753d8-8bc4-11ed-94a1-26632eba8bed\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\",\"uuid\":\"614ff267-b30e-11ed-b3d7-ea098e8dc2bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\",\"uuid\":\"61d88713-957f-4920-8a3b-65f0ccd79b57\",\"email\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\",\"uuid\":\"623452c3-d694-466a-95b9-140a9c44a1ab\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\",\"uuid\":\"65b38b0e-8bc4-11ed-81c7-fed5bfaa3f3d\",\"email\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\",\"uuid\":\"65e049af-b30e-11ed-82a1-e2db47427de5\",\"email\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\",\"uuid\":\"6847d712-9dd7-11ed-967f-12bf3e4c6b0d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\",\"uuid\":\"6887723d-dbde-4969-bba8-e9b3464645ce\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\",\"uuid\":\"6b9e40b1-bd01-11ed-8bd9-4a4655204cc7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\",\"uuid\":\"6c22fc34-31d7-4085-948b-d862feb447fe\",\"email\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\",\"uuid\":\"6ca38252-ad8e-11ed-9613-3a90352a946f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\",\"uuid\":\"6ccce5fc-d6a8-416d-921b-f883914b67ad\",\"email\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\",\"uuid\":\"6d0c845f-9dd7-11ed-a399-1a75992a86c7\",\"email\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\",\"uuid\":\"6d550b97-297b-43ea-a3dc-85383cf72fba\",\"email\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\",\"uuid\":\"6d7f7052-6ddb-461f-a49f-6cb5fca6b2c8\",\"email\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\",\"uuid\":\"6e0e84e3-b856-11ed-ab26-8e492650c256\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\",\"uuid\":\"6ed45bb9-a8d7-11ed-b51e-c2a468ff72a6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\",\"uuid\":\"6efabec4-24bc-46bd-8f53-e068f03adbf0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\",\"uuid\":\"6f41744d-b856-11ed-a706-064bc8586212\",\"email\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\",\"uuid\":\"70532155-9800-46d9-89ed-bd41347c3dfd\",\"email\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\",\"uuid\":\"713c4001-ad8e-11ed-be7d-0ec0d643006a\",\"email\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\",\"uuid\":\"71cb7181-bd01-11ed-8700-9293738b117d\",\"email\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\",\"uuid\":\"7247d247-e798-4af5-b9ce-7bf786c4d0c7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\",\"uuid\":\"73546355-1adc-4289-908a-2f6fae7fc9fa\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\",\"uuid\":\"738ccf6d-a8d7-11ed-ad7e-6ed4f1c67dea\",\"email\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\",\"uuid\":\"73a70dc9-b6fc-11ed-a3d7-a2295215c227\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\",\"uuid\":\"7571121d-a654-4df8-9afa-e638f17d53bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\",\"uuid\":\"76c071c8-9ab2-11ed-8c68-2a913616fde8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\",\"uuid\":\"7715eb6d-9ea0-11ed-8e78-767557a2485a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\",\"uuid\":\"785f915d-b6fc-11ed-ad05-76e4602e1079\",\"email\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\",\"uuid\":\"7ac9b3b9-9144-11ed-82e3-622adeb45fa9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\",\"uuid\":\"7b5907f1-9ab2-11ed-8c68-2a913616fde8\",\"email\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\",\"uuid\":\"7ba05e4d-f9a0-44e2-aa8c-bcda7adac2e5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\",\"uuid\":\"7bc2a11e-9ea0-11ed-8c38-7ad981f4abb4\",\"email\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\",\"uuid\":\"7da5fc01-ccbd-4679-8149-cb22fe402bb3\",\"email\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\",\"uuid\":\"7dd124ba-7343-4882-b700-c44374efa8e3\",\"email\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\",\"uuid\":\"7f3e8ad2-95fb-11ed-b93e-b6681b4e2484\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\",\"uuid\":\"7f7afd0e-9144-11ed-82e3-622adeb45fa9\",\"email\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\",\"uuid\":\"8009c2e2-ae57-11ed-b4cb-a681084bf13a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\",\"uuid\":\"81831280-6cb1-4a01-9dc9-f68b1405f8f6\",\"email\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\",\"uuid\":\"81da5714-b3d7-11ed-97bb-cad2b20710fd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\",\"uuid\":\"82eadb7f-c133-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\",\"uuid\":\"84060fed-95fb-11ed-b93e-b6681b4e2484\",\"email\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\",\"uuid\":\"847f57aa-1b32-4eee-8447-e6eef1f6744f\",\"email\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\",\"uuid\":\"848026b5-ae57-11ed-9ecb-824f74ccf3e4\",\"email\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\",\"uuid\":\"853cce16-d7d3-4bd6-8f99-b1eab0407cf1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\",\"uuid\":\"862d085b-48ce-446e-a74f-ae3538d623f5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\",\"uuid\":\"866af7b6-9f69-11ed-8c38-7ad981f4abb4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\",\"uuid\":\"86a13258-b3d7-11ed-a605-a260cf3212a9\",\"email\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\",\"uuid\":\"86bc89ca-9532-11ed-bf65-7630e111ac00\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\",\"uuid\":\"88c2cdf6-2769-4e68-9503-38d3f166ff1a\",\"email\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\",\"uuid\":\"88ce8004-c133-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\",\"uuid\":\"89229fdb-c6b3-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\",\"uuid\":\"8a2d2c9d-c478-4a74-94a8-cabb28bd1473\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\",\"uuid\":\"8ae38d89-9f69-11ed-bfa9-f2483e31eab5\",\"email\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\",\"uuid\":\"8b7b570e-9532-11ed-bf65-7630e111ac00\",\"email\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\",\"uuid\":\"8e41e3a8-a9a0-11ed-a060-46b9814ce648\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\",\"uuid\":\"8e85e36f-5ccd-4052-a34e-d7338178914e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\",\"uuid\":\"8f25b885-c6b3-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\",\"uuid\":\"8f8399af-4d57-41a1-91a3-37c29fb62092\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\",\"uuid\":\"8fa60296-198c-4113-8f21-0ba09e4fd83e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\",\"uuid\":\"8fb58f8b-cb6a-11ed-be83-92f82eb96735\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\",\"uuid\":\"91a8dc0a-0c63-4411-b9ab-39ec37dc2eee\",\"email\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\",\"uuid\":\"92c4c4e2-d881-485c-9668-0aa68239c513\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\",\"uuid\":\"936c4650-a9a0-11ed-af98-1a32d7edfd9d\",\"email\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\",\"uuid\":\"93e8df0e-729e-4d2f-b0a4-9495ffb37b06\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\",\"uuid\":\"94c9bf7f-920d-11ed-9cec-222dbf547024\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\",\"uuid\":\"94d92a17-4768-48dd-97b4-ab32fee4e33b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\",\"uuid\":\"94f7179d-40a0-4790-9436-6080eb0db034\",\"email\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\",\"uuid\":\"959ada1b-cb6a-11ed-9f7f-0e85fe61e6ee\",\"email\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\",\"uuid\":\"96796850-b278-4313-a726-9cf5c832fe30\",\"email\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\",\"uuid\":\"99579994-af20-11ed-94c9-462a25af4eaf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\",\"uuid\":\"995b112e-920d-11ed-9888-e278e4206645\",\"email\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\",\"uuid\":\"9b26b565-e0c1-4777-a693-553a8d5cb243\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\",\"uuid\":\"9b9fe3ac-f73b-43a5-b570-43d156e07ea9\",\"email\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\",\"uuid\":\"9c09fbea-fce4-4c02-9a45-ec845bab938a\",\"email\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\",\"uuid\":\"9c58a1dc-6beb-4390-928e-ed9d95b13b30\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\",\"uuid\":\"9ccf5d51-55b4-43e0-ad79-7819a8d223f0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\",\"uuid\":\"9dd94922-af20-11ed-94c9-462a25af4eaf\",\"email\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\",\"uuid\":\"9defa75d-a247-11ed-97de-223323d49fa6\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\",\"uuid\":\"9e072255-5184-44a8-ae5f-a8e70ec5037c\",\"email\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\",\"uuid\":\"9e85bf56-c1fc-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\",\"uuid\":\"9ee1d254-a247-11ed-92ef-6ad132878933\",\"email\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\",\"uuid\":\"9f5a1546-bccf-4b9f-a25f-96fb87bd7bfc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\",\"uuid\":\"9f88a5e0-9842-4fd1-95c7-7f85edad3874\",\"email\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\",\"uuid\":\"a136a629-05cd-4a2f-b925-e1d74c6a69ad\",\"email\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\",\"uuid\":\"a18c9430-e993-488f-8b5c-3ad27997e55c\",\"email\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\",\"uuid\":\"a3644be2-a4e9-11ed-b7fb-1ea641c369ef\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\",\"uuid\":\"a4230eac-f78e-407d-8551-b07c6476622b\",\"email\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\",\"uuid\":\"a4aff885-c1fc-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\",\"uuid\":\"a813f7f3-a4e9-11ed-9388-1ad521c601b9\",\"email\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\",\"uuid\":\"a96c393b-978d-11ed-b425-4e7b3187c657\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\",\"uuid\":\"a9977d83-cddd-4644-ba02-dc1a86c0293e\",\"email\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\",\"uuid\":\"aabc794c-bd45-11ed-9ea1-9ebf47de1fdb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\",\"uuid\":\"ab5bb1f0-b9b2-43da-bd50-e5ba7315fc29\",\"email\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\",\"uuid\":\"abedb0a5-92d6-11ed-a082-5215624996c0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\",\"uuid\":\"ac484716-4260-4fd9-8288-1d4a6b0d39da\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\",\"uuid\":\"ade2bf85-978d-11ed-b425-4e7b3187c657\",\"email\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\",\"uuid\":\"b0771f90-92d6-11ed-a082-5215624996c0\",\"email\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\",\"uuid\":\"b12b859b-c89a-4023-84e6-2634f93fff00\",\"email\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\",\"uuid\":\"b155e604-bd45-11ed-ba70-22d478e15cef\",\"email\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\",\"uuid\":\"b2f195b3-53b7-4095-bfb8-90538edb12f7\",\"email\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\",\"uuid\":\"b2fc8929-b88e-11ed-8da2-b6d07de5d20c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\",\"uuid\":\"b335a7f4-a66e-41ed-b4aa-982c5b76ffc1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\",\"uuid\":\"b39fcb21-440b-4bd8-bc55-103259b74a57\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\",\"uuid\":\"b3ccf662-7d0d-4a45-9cb3-5ffcb089012c\",\"email\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\",\"uuid\":\"b4a8f9a4-28a9-4311-a813-8149eb5264f4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\",\"uuid\":\"b631798d-d17b-44ab-af5c-f075df907ddd\",\"email\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\",\"uuid\":\"b768b7b4-b88e-11ed-a132-2aa63a904ba0\",\"email\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\",\"uuid\":\"b7d64361-36fd-4ebd-9438-949f60ec3745\",\"email\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\",\"uuid\":\"b8fa89c4-34f6-4b69-a654-e3671ce743a0\",\"email\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\",\"uuid\":\"b9d64d92-66de-41cc-9164-b83b7b74439f\",\"email\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\",\"uuid\":\"bbd69d76-96c4-11ed-b802-922cd9596b23\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\",\"uuid\":\"bc036552-b05e-4ffd-8dd1-44dbe725a6ec\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\",\"uuid\":\"bcb9456d-8b65-4369-b2c4-49ee5e4c14b7\",\"email\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\",\"uuid\":\"bd7e4c91-9b7b-11ed-882c-9aa2ca31c98c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\",\"uuid\":\"bdc08c5f-afe9-11ed-84e6-a6c768ad21b4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\",\"uuid\":\"be421a73-22de-48d3-be3f-1a269016ff83\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\",\"uuid\":\"bf08166d-a032-11ed-88af-be56a8628f3f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\",\"uuid\":\"c09c4f30-96c4-11ed-9f1c-fe165ba0981c\",\"email\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\",\"uuid\":\"c20da1a9-657e-4b5a-9159-9f4d324f51fc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\",\"uuid\":\"c22b3e65-a5b2-11ed-9388-1ad521c601b9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\",\"uuid\":\"c23885b0-3659-4d47-b5c9-16c0965dc7d9\",\"email\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\",\"uuid\":\"c238d04b-c77c-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\",\"uuid\":\"c23e01c9-9b7b-11ed-8af1-7201c2784402\",\"email\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\",\"uuid\":\"c27df074-afe9-11ed-bce8-0a557ccee039\",\"email\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\",\"uuid\":\"c36f2608-4650-4331-b810-1dc5500c1356\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\",\"uuid\":\"c381f80b-8a88-47bd-9dbe-77720d784a52\",\"email\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\",\"uuid\":\"c39f3031-906f-4679-a817-9b8f072254bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\",\"uuid\":\"c3e2d867-a032-11ed-88af-be56a8628f3f\",\"email\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\",\"uuid\":\"c567f0fa-6f70-42e3-855e-2ae1d2ed7243\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\",\"uuid\":\"c60a0f7d-3f36-4966-a63f-f1f77dca030a\",\"email\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\",\"uuid\":\"c61f4ec1-ab32-11ed-8972-1eb0f4245ee5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\",\"uuid\":\"c6d4d92c-a5b2-11ed-b7fb-1ea641c369ef\",\"email\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\",\"uuid\":\"c7319ecf-1451-4031-817a-5bef597d5ac9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\",\"uuid\":\"c7b7b86f-5268-4c20-b223-afc7923d54b9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\",\"uuid\":\"c811af38-c77c-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\",\"uuid\":\"c8bbd0d2-53af-4fc0-a392-1c1c0871fb49\",\"email\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\",\"uuid\":\"c8e6753d-801c-40b5-9dd8-c98feae31df9\",\"email\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\",\"uuid\":\"c960ccca-c5ea-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\",\"uuid\":\"c9f53cd7-2f1e-4491-ae28-796ace9db6fc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\",\"uuid\":\"cac0f70c-c327-4965-b9f9-62190c96b0dc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\",\"uuid\":\"caf6ae98-ab32-11ed-bddd-722daf28c490\",\"email\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\",\"uuid\":\"cc0a6e87-ce4b-4313-b0a8-8b40179bcb68\",\"email\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\",\"uuid\":\"cc1891b1-9a95-4af6-98d7-95ac53c4e6ff\",\"email\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\",\"uuid\":\"cf9a8e87-c5ea-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\",\"uuid\":\"d0330853-c731-4097-a353-fd1014abde80\",\"email\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\",\"uuid\":\"d1d53f95-4adc-4e7b-896b-1e75ba345e9f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\",\"uuid\":\"d5aa246d-a67b-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\",\"uuid\":\"d654fb42-b569-11ed-827a-8e2840b25db2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\",\"uuid\":\"d6780612-b0b2-11ed-a714-aa504cceab29\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\",\"uuid\":\"d70a12ec-c10f-47dd-9892-cebecfd6ffb0\",\"email\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\",\"uuid\":\"d968eb97-03c1-436e-835f-9ed06d352716\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\",\"uuid\":\"d9a19936-2b5c-4fbc-b802-7a3dbf639c1b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\",\"uuid\":\"da3ac6ee-a67b-11ed-bd1e-766989ec1239\",\"email\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\",\"uuid\":\"dac22963-b569-11ed-a797-c2fe525de487\",\"email\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\",\"uuid\":\"db0404af-b0b2-11ed-84e6-a6c768ad21b4\",\"email\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\",\"uuid\":\"dcbcad43-008c-4c4c-8c35-ee5ade081d9e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\",\"uuid\":\"ddd99aa3-c7e5-4dff-8099-10588153e164\",\"email\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\",\"uuid\":\"de662b96-845c-45b9-a359-b0b763a45a61\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\",\"uuid\":\"def01997-ae71-49bc-93ea-ff9287d606c7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\",\"uuid\":\"e09cd088-50f3-4a99-8222-0917d760f4fb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\",\"uuid\":\"e0a87080-eb76-45db-9230-ed4ef629b0d2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\",\"uuid\":\"e1073fac-c2c5-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\",\"uuid\":\"e21b3798-5777-4777-919d-e5ff6fce422a\",\"email\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\",\"uuid\":\"e2267bdc-1a12-4210-869e-60d0faa477bd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\",\"uuid\":\"e42f7f54-0e83-4c40-b112-887402a7ba6b\",\"email\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\",\"uuid\":\"e485ea7a-9a64-44dd-a774-d3f31e869f6e\",\"email\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\",\"uuid\":\"e6615793-c00d-45e8-b8d6-ec1c96309d81\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\",\"uuid\":\"e6d0a0d2-e642-4b20-aa66-34ab638f4d9f\",\"email\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\",\"uuid\":\"e7113f68-c2c5-11ed-b4e0-566658a732f8\",\"email\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\",\"uuid\":\"e7403ce3-c0a2-4bae-8823-45a21c310656\",\"email\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\",\"uuid\":\"e7d1ba87-be0e-11ed-be0d-5609971d255a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\",\"uuid\":\"e84ce941-4c3d-4b79-b736-619897785a82\",\"email\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\",\"uuid\":\"e9b00493-1235-49f2-b229-06ee3afc79b0\",\"email\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\",\"uuid\":\"e9f6df6e-aa69-11ed-8972-1eb0f4245ee5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\",\"uuid\":\"e9ffa5e5-b7c5-11ed-a50e-226546b1da54\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\",\"uuid\":\"eb03f9a6-c845-11ed-a1e1-c6385b25b934\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\",\"uuid\":\"eb834f42-bed7-11ed-a89b-0ebbb850607d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\",\"uuid\":\"ebb5a53d-9c44-11ed-97cc-a697d2568caf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\",\"uuid\":\"ebf0848a-6b21-4736-ad2a-d93daf59fd15\",\"email\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\",\"uuid\":\"ebf23d4b-53c8-467a-bbb0-636c11b3ffee\",\"email\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\",\"uuid\":\"ec1ed77b-1d70-4727-b2ac-f478a37e3b8c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\",\"uuid\":\"edaec5b4-be0e-11ed-be0d-5609971d255a\",\"email\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\",\"uuid\":\"ee1307d6-f262-47be-b312-0f77517487b8\",\"email\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\",\"uuid\":\"ee8bd235-cc33-11ed-b285-a2593f21064b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\",\"uuid\":\"eeac3af0-aa69-11ed-bddd-722daf28c490\",\"email\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\",\"uuid\":\"eeb210e2-b7c5-11ed-8e20-4a014c845df9\",\"email\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\",\"uuid\":\"efc56647-04f9-430b-abcd-78fd73135dc9\",\"email\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\",\"uuid\":\"f090690e-9c44-11ed-bd03-d63a15ea0a5e\",\"email\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\",\"uuid\":\"f1130564-9856-11ed-8928-461f5552e193\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\",\"uuid\":\"f116f34c-c845-11ed-8b17-fe25dd6b2d5d\",\"email\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\",\"uuid\":\"f182abdf-bed7-11ed-b4e0-566658a732f8\",\"email\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\",\"uuid\":\"f185aa8c-b4a0-11ed-a797-c2fe525de487\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\",\"uuid\":\"f24bcc61-bae9-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\",\"uuid\":\"f352f9e3-b965-11ed-b5bf-a606768bc197\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\",\"uuid\":\"f48dd27a-cc33-11ed-9f7f-0e85fe61e6ee\",\"email\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\",\"uuid\":\"f59374fc-a0fb-11ed-a5e8-da207d422d98\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\",\"uuid\":\"f5a1e00e-9856-11ed-a432-b611e40f0c37\",\"email\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\",\"uuid\":\"f5d92ebe-a28d-11ed-b39d-128f55cb4249\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\",\"uuid\":\"f611f5ab-b4a0-11ed-a797-c2fe525de487\",\"email\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\",\"uuid\":\"f6a52e1f-a5fc-4498-b0f2-69fee17a4142\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\",\"uuid\":\"f6c58d1e-bae9-11ed-8f91-4668bdad4d01\",\"email\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\",\"uuid\":\"f7f12039-b965-11ed-b5bf-a606768bc197\",\"email\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\",\"uuid\":\"f8313d55-863c-4872-8f01-5a74e04418d2\",\"email\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\",\"uuid\":\"f92f0fb9-f3fd-42ff-955a-744cc01ee9a4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\",\"uuid\":\"f9e94170-240d-43ed-a3e4-dec65a38531b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\",\"uuid\":\"fa40ced7-a0fb-11ed-a5e3-d6024dc128f7\",\"email\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\",\"uuid\":\"fa6d1a19-a28d-11ed-9c57-8a8107f52a6e\",\"email\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\",\"uuid\":\"fbd2af3f-ba20-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\",\"uuid\":\"fc061455-8536-4ea0-8a7c-d6bd072c5b89\",\"email\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\",\"uuid\":\"fd20bff8-5c0c-4eb2-941b-c0d7669f996a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\",\"uuid\":\"fdef06c9-5a21-44bb-afb4-14b055649e5b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\",\"uuid\":\"fe4f352d-a8b5-435e-a18c-9914eb88c865\",\"email\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\",\"uuid\":\"ff2e2858-cf28-44c7-98aa-be52cef329be\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\",\"uuid\":\"ff9a7c79-a744-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\"}]},\"incidents\":[{\"data\":{\"type\":\"incidents\",\"attributes\":{\"customer_impact_end\":null,\"time_to_detect\":0,\"customer_impact_start\":null,\"created_by_uuid\":null,\"title\":\"Test-Go-Update_an_incident_todo_returns_OK_response-1679962375\",\"non_datadog_creator\":null,\"last_modified_by_uuid\":null,\"state\":\"active\",\"commander\":null,\"case_id\":null,\"creation_idempotency_key\":null,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null}},\"last_modified_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"time_to_resolve\":0,\"resolved\":null,\"created\":\"2023-03-28T00:12:55+00:00\",\"time_to_repair\":0,\"customer_impact_scope\":\"\",\"detected\":\"2023-03-28T00:12:55+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1679962375,\"end\":null}]}}},\"public_id\":128961,\"time_to_internal_response\":0,\"modified\":\"2023-03-28T00:12:55+00:00\",\"severity\":\"UNKNOWN\",\"notification_handles\":null,\"visibility\":\"organization\",\"customer_impacted\":false,\"customer_impact_duration\":0},\"relationships\":{\"commander_user\":{\"data\":null},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"fbc19b87-ff03-5b2a-915d-75501ad44917\"}]},\"attachments\":{\"data\":[]},\"impacts\":{\"data\":[]},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"user_defined_fields\":{\"data\":[]},\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"integrations\":{\"data\":[]}},\"id\":\"aa819dbd-9016-5c31-84c5-48ff15b845cf\"}},{\"data\":{\"type\":\"incidents\",\"attributes\":{\"customer_impact_end\":null,\"time_to_detect\":0,\"customer_impact_start\":null,\"created_by_uuid\":null,\"title\":\"Test-Go-Update_an_existing_incident_returns_OK_response-1679962372-updated\",\"non_datadog_creator\":null,\"last_modified_by_uuid\":null,\"state\":\"resolved\",\"commander\":null,\"case_id\":null,\"creation_idempotency_key\":null,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"resolved\"}},\"last_modified_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"time_to_resolve\":2,\"resolved\":\"2023-03-28T00:12:54+00:00\",\"created\":\"2023-03-28T00:12:52+00:00\",\"time_to_repair\":0,\"customer_impact_scope\":\"\",\"detected\":\"2023-03-28T00:12:52+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"attributes\":{\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"field_analytics\":{\"state\":{\"active\":{\"duration\":3,\"spans\":[{\"start\":1679962372,\"end\":1679962375}]},\"resolved\":{\"duration\":0,\"spans\":[{\"start\":1679962375,\"end\":null}]}}},\"public_id\":128960,\"time_to_internal_response\":0,\"modified\":\"2023-03-28T00:12:54+00:00\",\"severity\":\"UNKNOWN\",\"notification_handles\":null,\"visibility\":\"organization\",\"customer_impacted\":false,\"customer_impact_duration\":0},\"relationships\":{\"commander_user\":{\"data\":null},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"35badb8c-6ee1-50d5-9ff9-19cacc137d90\"}]},\"attachments\":{\"data\":[]},\"impacts\":{\"data\":[]},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"user_defined_fields\":{\"data\":[]},\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"integrations\":{\"data\":[]}},\"id\":\"6f648ab1-026d-5e82-a49a-6b88e098b018\"}}]},\"relationships\":{\"incidents_relationship\":{\"data\":[{\"type\":\"incidents\",\"id\":\"aa819dbd-9016-5c31-84c5-48ff15b845cf\"},{\"type\":\"incidents\",\"id\":\"6f648ab1-026d-5e82-a49a-6b88e098b018\"}]}}},\"included\":[{\"type\":\"incidents\",\"id\":\"aa819dbd-9016-5c31-84c5-48ff15b845cf\",\"attributes\":{\"public_id\":128961,\"title\":\"Test-Go-Update_an_incident_todo_returns_OK_response-1679962375\",\"resolved\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2023-03-28T00:12:55+00:00\",\"modified\":\"2023-03-28T00:12:55+00:00\",\"commander\":null,\"detected\":\"2023-03-28T00:12:55+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null}},\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1679962375,\"end\":null}]}}},\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"fbc19b87-ff03-5b2a-915d-75501ad44917\"}]},\"impacts\":{\"data\":[]}}},{\"type\":\"incidents\",\"id\":\"6f648ab1-026d-5e82-a49a-6b88e098b018\",\"attributes\":{\"public_id\":128960,\"title\":\"Test-Go-Update_an_existing_incident_returns_OK_response-1679962372-updated\",\"resolved\":\"2023-03-28T00:12:54+00:00\",\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2023-03-28T00:12:52+00:00\",\"modified\":\"2023-03-28T00:12:54+00:00\",\"commander\":null,\"detected\":\"2023-03-28T00:12:52+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":2,\"fields\":{\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"resolved\"}},\"field_analytics\":{\"state\":{\"active\":{\"duration\":3,\"spans\":[{\"start\":1679962372,\"end\":1679962375}]},\"resolved\":{\"duration\":0,\"spans\":[{\"start\":1679962375,\"end\":null}]}}},\"severity\":\"UNKNOWN\",\"state\":\"resolved\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"35badb8c-6ee1-50d5-9ff9-19cacc137d90\"}]},\"impacts\":{\"data\":[]}}}],\"meta\":{\"pagination\":{\"offset\":0,\"next_offset\":2,\"size\":2}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/incidents/search", + "query": [ + [ + "page[offset]", + "2" + ], + [ + "page[size]", + "2" + ], + [ + "query", + "state:(active OR stable OR resolved)" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents_search_results\",\"attributes\":{\"total\":1703,\"facets\":{\"severity\":[{\"name\":\"UNKNOWN\",\"count\":1703},{\"name\":\"SEV-1\",\"count\":0},{\"name\":\"SEV-2\",\"count\":0},{\"name\":\"SEV-3\",\"count\":0},{\"name\":\"SEV-4\",\"count\":0},{\"name\":\"SEV-5\",\"count\":0}],\"time_to_repair\":[{\"name\":\"time_to_repair\",\"aggregates\":{\"min\":null,\"max\":null}}],\"responder\":[{\"name\":\"CI Account\",\"count\":844,\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},{\"name\":\"frog@datadoghq.com\",\"count\":107,\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"email\":\"frog@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\",\"uuid\":\"00a080f5-ba21-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\",\"uuid\":\"01dc2b21-3194-414a-b8e8-58704603421b\",\"email\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\",\"uuid\":\"02a54dc1-c38f-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\",\"uuid\":\"03e16d56-e954-4e9a-b9da-22dffdfa1f24\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\",\"uuid\":\"03e65d16-b7bb-456a-a5da-bf31dffbdf4d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\",\"uuid\":\"0423cfd5-a745-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\",\"uuid\":\"04c4feaa-1864-4167-a48b-e156181d50d8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\",\"uuid\":\"04f0d8b5-1959-43fb-85b5-782682062c4e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\",\"uuid\":\"05d83a07-93a0-11ed-bf65-7630e111ac00\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\",\"uuid\":\"060c37c0-93a9-48c0-90bc-dee85b66a7c7\",\"email\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\",\"uuid\":\"08f8d3b7-c38f-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\",\"uuid\":\"09010d4b-7635-4553-a7b9-973f5f9cea5b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\",\"uuid\":\"0a679024-93a0-11ed-aaf8-3230475e674b\",\"email\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\",\"uuid\":\"0ebbf763-be8f-40bb-8ee7-d37b729a5eed\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\",\"uuid\":\"1193cff3-b670-4e08-a535-346105dcaf9f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\",\"uuid\":\"1205474f-a1c5-11ed-b767-5ec4f5b84c10\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\",\"uuid\":\"122c89ad-9d0e-11ed-9f54-862b4cfe184c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\",\"uuid\":\"12d78e1b-0784-46f3-99ac-7e5db2d5c92e\",\"email\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\",\"uuid\":\"1310687d-9adb-47ae-ad7a-066c9e525f8b\",\"email\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\",\"uuid\":\"142ba3fc-9469-11ed-a365-8ec8661800c6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\",\"uuid\":\"1431aabf-c458-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\",\"uuid\":\"14344412-a7b1-4044-89f7-8139727432f6\",\"email\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\",\"uuid\":\"1608c46d-bee2-46a5-be87-49af2b889db5\",\"email\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\",\"uuid\":\"161217ca-a0b5-418c-b0e5-d16edddd8258\",\"email\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\",\"uuid\":\"1628d4a0-a80e-11ed-af43-4e64a4a39547\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\",\"uuid\":\"16754b18-1887-4f22-ae44-4a86e9bfc749\",\"email\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\",\"uuid\":\"1682f280-a1c5-11ed-ad87-fecda9c428d5\",\"email\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\",\"uuid\":\"16bf2921-9d0e-11ed-aff1-fa6399bf96fd\",\"email\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\",\"uuid\":\"18ada30d-ad3e-4ba2-911d-931233a75aa0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\",\"uuid\":\"18cfb810-ccfd-11ed-a201-de0443f18a2a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\",\"uuid\":\"18e9a7f7-9469-11ed-aaf8-3230475e674b\",\"email\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\",\"uuid\":\"1a8c2817-c458-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\",\"uuid\":\"1aa50cab-a80e-11ed-bc4c-ea1adbbc0986\",\"email\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\",\"uuid\":\"1bb87a6c-da01-4798-8bd0-5cd9918f641f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\",\"uuid\":\"1bcb111e-ea64-4d60-9b77-ae5e7f22f157\",\"email\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\",\"uuid\":\"1c54a963-17f1-4ee8-a2b0-7fd07c3b2c68\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\",\"uuid\":\"1c631d44-9920-11ed-8c68-2a913616fde8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\",\"uuid\":\"1ce329fb-b245-11ed-8fbc-ca7794d66904\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\",\"uuid\":\"1ebe2367-3eda-464c-9571-edd444620682\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\",\"uuid\":\"1f019dde-acc5-11ed-bcdd-a68779fca942\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\",\"uuid\":\"1f034a5d-ccfd-11ed-aef0-a6405a9b4791\",\"email\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\",\"uuid\":\"1fd5cef4-df5c-4609-be9a-11bf76483cfc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\",\"uuid\":\"20be4a8a-b215-4bc0-b2fa-31c27e0a642b\",\"email\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\",\"uuid\":\"20d2001a-92b4-4d03-a5cb-73617f27b723\",\"email\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\",\"uuid\":\"20dbaf3d-9920-11ed-8c68-2a913616fde8\",\"email\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\",\"uuid\":\"214ed4fd-b245-11ed-8fbc-ca7794d66904\",\"email\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\",\"uuid\":\"2375265b-acc5-11ed-9a7e-46e4eb8f12a7\",\"email\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\",\"uuid\":\"2399be00-e683-4133-aec2-7ab8fe73779e\",\"email\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\",\"uuid\":\"23a293e3-086a-4f8e-8fa6-a2555557309e\",\"email\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\",\"uuid\":\"24f932ba-4cd2-498e-8261-64f6ec161bcb\",\"email\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\",\"uuid\":\"25538030-b633-11ed-827a-8e2840b25db2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\",\"uuid\":\"2593795d-b0f5-46f9-a852-34d3c466ce0a\",\"email\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\",\"uuid\":\"26287ddb-5d1c-400d-96dc-a1d3bb09f880\",\"email\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\",\"uuid\":\"27c16c1b-c9d8-11ed-b840-0ed4b0ca293a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\",\"uuid\":\"281184f3-b17c-11ed-bce8-0a557ccee039\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\",\"uuid\":\"2871bc57-733f-4f85-b3ef-440569202326\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\",\"uuid\":\"289f8508-500c-472e-a9d4-71f30f1cf151\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\",\"uuid\":\"28ae893d-4b70-420d-96dc-f82066a0642f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\",\"uuid\":\"291b8416-a87d-4e56-a93e-9d430d5c4996\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\",\"uuid\":\"29cd6809-b633-11ed-827a-8e2840b25db2\",\"email\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\",\"uuid\":\"2acb4dc0-bfa1-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\",\"uuid\":\"2b0ac046-39c8-4bf4-a00a-deb089bbbc0c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\",\"uuid\":\"2c9256b5-c90f-11ed-a1f3-7afc45c1981c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\",\"uuid\":\"2c977e11-b17c-11ed-bce8-0a557ccee039\",\"email\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\",\"uuid\":\"2d99557e-c9d8-11ed-a171-361a8cacd441\",\"email\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\",\"uuid\":\"2db31432-b497-42b8-80b7-fef85898a2a8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\",\"uuid\":\"2ebfffc1-a7da-4558-a507-038442f7ee79\",\"email\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\",\"uuid\":\"2eca0bd9-db8e-4c5d-91b7-2ccddffd5764\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\",\"uuid\":\"2fc6258a-7492-43c0-accf-24528cbbfea1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\",\"uuid\":\"302a3d05-c61c-41d8-ad31-8821b764acf7\",\"email\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\",\"uuid\":\"30e3000f-bfa1-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\",\"uuid\":\"30e43861-abfc-11ed-a6fc-0e9b7fe457ae\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\",\"uuid\":\"31ad2923-926d-49af-ad5b-d8b120e6edc8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\",\"uuid\":\"32d40acb-c90f-11ed-a1f3-7afc45c1981c\",\"email\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\",\"uuid\":\"34377484-e597-4d4c-bccf-88e919b6d549\",\"email\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\",\"uuid\":\"34e92512-7c24-4704-816e-4fadc9b5eff7\",\"email\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\",\"uuid\":\"3578dcc8-088a-4320-8c27-7f80f1bba4cb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\",\"uuid\":\"3584000d-6337-4c9e-955e-e25514b83be0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\",\"uuid\":\"35ba7493-abfc-11ed-b5cd-eec9514dd597\",\"email\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\",\"uuid\":\"367e08f8-c06a-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\",\"uuid\":\"3883d9fe-1678-452e-8801-11a374f9fdae\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\",\"uuid\":\"39627294-7a14-4e71-b5ff-5221e68b6fbe\",\"email\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\",\"uuid\":\"3bc8406a-5790-4582-82f5-08e330921b9b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\",\"uuid\":\"3c28c823-158e-46c2-8dce-06f1dace90e8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\",\"uuid\":\"3c7509b1-82af-4d25-b1e5-3e8aaa107f0a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\",\"uuid\":\"3c7f71d2-c06a-11ed-a89b-0ebbb850607d\",\"email\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\",\"uuid\":\"3ce20d84-5e75-45a5-b7b9-971549a50cf4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\",\"uuid\":\"40d8c19a-8c6a-4f54-9444-aba7b6798064\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\",\"uuid\":\"41da9ce5-bbb3-11ed-82a6-028cebedd0cf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\",\"uuid\":\"426feaae-7bf3-4b2c-bc8c-0c79056d6d8d\",\"email\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\",\"uuid\":\"431624c4-d099-4dfb-b701-33a60bba6ebe\",\"email\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\",\"uuid\":\"442dd264-b729-473b-a51d-4b141068fe3d\",\"email\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\",\"uuid\":\"446cd2d8-630c-4fe9-8901-fb85bd22426d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\",\"uuid\":\"467de14f-bbb3-11ed-82a6-028cebedd0cf\",\"email\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\",\"uuid\":\"46d62900-016b-463c-9fff-c8b4f946ce5c\",\"email\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\",\"uuid\":\"46e3c6ef-a420-11ed-b1f8-56250c47f0b3\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\",\"uuid\":\"48f7337b-3304-46fc-9e88-23b4dc5d24cc\",\"email\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\",\"uuid\":\"4b432133-ba1b-4edc-ab57-c0250963f250\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\",\"uuid\":\"4b5ba977-c521-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\",\"uuid\":\"4b68a1e2-a420-11ed-b1f8-56250c47f0b3\",\"email\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\",\"uuid\":\"4e5cb15e-f18e-43ba-b115-2a4e62736739\",\"email\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\",\"uuid\":\"4e6b1824-dc1e-4691-8abd-5ffb968da7eb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\",\"uuid\":\"4fdb4327-3660-4aeb-b403-7f7939493f27\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\",\"uuid\":\"50d5408a-1894-4173-9fa1-32209009d9b1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\",\"uuid\":\"5141e45c-c521-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\",\"uuid\":\"520007b9-a357-11ed-acb5-6e0b90178632\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\",\"uuid\":\"521a78f7-573e-4b67-8e2c-d0dd5d91a265\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\",\"uuid\":\"54b84ea9-ae9f-4159-b226-aba3b432a792\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\",\"uuid\":\"551c3a48-99e9-11ed-a607-1684d7f553f6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\",\"uuid\":\"557fb06e-bc7c-11ed-be39-625d488bce09\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\",\"uuid\":\"56afe5b0-b855-11ed-a706-064bc8586212\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\",\"uuid\":\"56d1cddc-a357-11ed-95c6-eefcd7f14d98\",\"email\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\",\"uuid\":\"5705f818-933e-4ef4-818c-615b06f80fd1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\",\"uuid\":\"577067f0-c41d-4928-8964-0f7725e8cf68\",\"email\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\",\"uuid\":\"57e9dbb7-b855-11ed-ab26-8e492650c256\",\"email\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\",\"uuid\":\"58287ff7-caa1-11ed-81eb-8227c2cf9828\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\",\"uuid\":\"586e086f-1e29-4689-99b6-641c3218b0a8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\",\"uuid\":\"59b0d36c-99e9-11ed-8968-92ec5048e27c\",\"email\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\",\"uuid\":\"59c9cd2e-cd40-4530-ba50-415bce89b133\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\",\"uuid\":\"5b76378d-bc7c-11ed-ba16-0aeab349e953\",\"email\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\",\"uuid\":\"5baf69e4-9bd6-4c76-b552-2bfee88031b5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\",\"uuid\":\"5c4ecf79-7ffb-47ea-9331-687b04ac9df8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\",\"uuid\":\"5ce42d6d-a0b9-4d0f-893b-aa0b8f30ee5c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\",\"uuid\":\"5d11019d-f1dc-468d-a20a-8e64e7af9494\",\"email\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\",\"uuid\":\"5db9c599-b71f-40c6-84d9-8ca8779004e1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\",\"uuid\":\"5e20a7d6-caa1-11ed-b285-a2593f21064b\",\"email\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\",\"uuid\":\"5f3582c4-06d1-43a3-bab9-b7ece49136a4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\",\"uuid\":\"610753d8-8bc4-11ed-94a1-26632eba8bed\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\",\"uuid\":\"614ff267-b30e-11ed-b3d7-ea098e8dc2bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\",\"uuid\":\"61d88713-957f-4920-8a3b-65f0ccd79b57\",\"email\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\",\"uuid\":\"623452c3-d694-466a-95b9-140a9c44a1ab\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\",\"uuid\":\"65b38b0e-8bc4-11ed-81c7-fed5bfaa3f3d\",\"email\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\",\"uuid\":\"65e049af-b30e-11ed-82a1-e2db47427de5\",\"email\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\",\"uuid\":\"6847d712-9dd7-11ed-967f-12bf3e4c6b0d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\",\"uuid\":\"6887723d-dbde-4969-bba8-e9b3464645ce\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\",\"uuid\":\"6b9e40b1-bd01-11ed-8bd9-4a4655204cc7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\",\"uuid\":\"6c22fc34-31d7-4085-948b-d862feb447fe\",\"email\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\",\"uuid\":\"6ca38252-ad8e-11ed-9613-3a90352a946f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\",\"uuid\":\"6ccce5fc-d6a8-416d-921b-f883914b67ad\",\"email\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\",\"uuid\":\"6d0c845f-9dd7-11ed-a399-1a75992a86c7\",\"email\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\",\"uuid\":\"6d550b97-297b-43ea-a3dc-85383cf72fba\",\"email\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\",\"uuid\":\"6d7f7052-6ddb-461f-a49f-6cb5fca6b2c8\",\"email\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\",\"uuid\":\"6e0e84e3-b856-11ed-ab26-8e492650c256\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\",\"uuid\":\"6ed45bb9-a8d7-11ed-b51e-c2a468ff72a6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\",\"uuid\":\"6efabec4-24bc-46bd-8f53-e068f03adbf0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\",\"uuid\":\"6f41744d-b856-11ed-a706-064bc8586212\",\"email\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\",\"uuid\":\"70532155-9800-46d9-89ed-bd41347c3dfd\",\"email\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\",\"uuid\":\"713c4001-ad8e-11ed-be7d-0ec0d643006a\",\"email\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\",\"uuid\":\"71cb7181-bd01-11ed-8700-9293738b117d\",\"email\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\",\"uuid\":\"7247d247-e798-4af5-b9ce-7bf786c4d0c7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\",\"uuid\":\"73546355-1adc-4289-908a-2f6fae7fc9fa\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\",\"uuid\":\"738ccf6d-a8d7-11ed-ad7e-6ed4f1c67dea\",\"email\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\",\"uuid\":\"73a70dc9-b6fc-11ed-a3d7-a2295215c227\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\",\"uuid\":\"7571121d-a654-4df8-9afa-e638f17d53bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\",\"uuid\":\"76c071c8-9ab2-11ed-8c68-2a913616fde8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\",\"uuid\":\"7715eb6d-9ea0-11ed-8e78-767557a2485a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\",\"uuid\":\"785f915d-b6fc-11ed-ad05-76e4602e1079\",\"email\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\",\"uuid\":\"7ac9b3b9-9144-11ed-82e3-622adeb45fa9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\",\"uuid\":\"7b5907f1-9ab2-11ed-8c68-2a913616fde8\",\"email\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\",\"uuid\":\"7ba05e4d-f9a0-44e2-aa8c-bcda7adac2e5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\",\"uuid\":\"7bc2a11e-9ea0-11ed-8c38-7ad981f4abb4\",\"email\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\",\"uuid\":\"7da5fc01-ccbd-4679-8149-cb22fe402bb3\",\"email\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\",\"uuid\":\"7dd124ba-7343-4882-b700-c44374efa8e3\",\"email\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\",\"uuid\":\"7f3e8ad2-95fb-11ed-b93e-b6681b4e2484\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\",\"uuid\":\"7f7afd0e-9144-11ed-82e3-622adeb45fa9\",\"email\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\",\"uuid\":\"8009c2e2-ae57-11ed-b4cb-a681084bf13a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\",\"uuid\":\"81831280-6cb1-4a01-9dc9-f68b1405f8f6\",\"email\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\",\"uuid\":\"81da5714-b3d7-11ed-97bb-cad2b20710fd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\",\"uuid\":\"82eadb7f-c133-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\",\"uuid\":\"84060fed-95fb-11ed-b93e-b6681b4e2484\",\"email\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\",\"uuid\":\"847f57aa-1b32-4eee-8447-e6eef1f6744f\",\"email\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\",\"uuid\":\"848026b5-ae57-11ed-9ecb-824f74ccf3e4\",\"email\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\",\"uuid\":\"853cce16-d7d3-4bd6-8f99-b1eab0407cf1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\",\"uuid\":\"862d085b-48ce-446e-a74f-ae3538d623f5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\",\"uuid\":\"866af7b6-9f69-11ed-8c38-7ad981f4abb4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\",\"uuid\":\"86a13258-b3d7-11ed-a605-a260cf3212a9\",\"email\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\",\"uuid\":\"86bc89ca-9532-11ed-bf65-7630e111ac00\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\",\"uuid\":\"88c2cdf6-2769-4e68-9503-38d3f166ff1a\",\"email\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\",\"uuid\":\"88ce8004-c133-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\",\"uuid\":\"89229fdb-c6b3-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\",\"uuid\":\"8a2d2c9d-c478-4a74-94a8-cabb28bd1473\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\",\"uuid\":\"8ae38d89-9f69-11ed-bfa9-f2483e31eab5\",\"email\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\",\"uuid\":\"8b7b570e-9532-11ed-bf65-7630e111ac00\",\"email\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\",\"uuid\":\"8e41e3a8-a9a0-11ed-a060-46b9814ce648\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\",\"uuid\":\"8e85e36f-5ccd-4052-a34e-d7338178914e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\",\"uuid\":\"8f25b885-c6b3-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\",\"uuid\":\"8f8399af-4d57-41a1-91a3-37c29fb62092\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\",\"uuid\":\"8fa60296-198c-4113-8f21-0ba09e4fd83e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\",\"uuid\":\"8fb58f8b-cb6a-11ed-be83-92f82eb96735\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\",\"uuid\":\"91a8dc0a-0c63-4411-b9ab-39ec37dc2eee\",\"email\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\",\"uuid\":\"92c4c4e2-d881-485c-9668-0aa68239c513\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\",\"uuid\":\"936c4650-a9a0-11ed-af98-1a32d7edfd9d\",\"email\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\",\"uuid\":\"93e8df0e-729e-4d2f-b0a4-9495ffb37b06\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\",\"uuid\":\"94c9bf7f-920d-11ed-9cec-222dbf547024\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\",\"uuid\":\"94d92a17-4768-48dd-97b4-ab32fee4e33b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\",\"uuid\":\"94f7179d-40a0-4790-9436-6080eb0db034\",\"email\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\",\"uuid\":\"959ada1b-cb6a-11ed-9f7f-0e85fe61e6ee\",\"email\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\",\"uuid\":\"96796850-b278-4313-a726-9cf5c832fe30\",\"email\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\",\"uuid\":\"99579994-af20-11ed-94c9-462a25af4eaf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\",\"uuid\":\"995b112e-920d-11ed-9888-e278e4206645\",\"email\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\",\"uuid\":\"9b26b565-e0c1-4777-a693-553a8d5cb243\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\",\"uuid\":\"9b9fe3ac-f73b-43a5-b570-43d156e07ea9\",\"email\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\",\"uuid\":\"9c09fbea-fce4-4c02-9a45-ec845bab938a\",\"email\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\",\"uuid\":\"9c58a1dc-6beb-4390-928e-ed9d95b13b30\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\",\"uuid\":\"9ccf5d51-55b4-43e0-ad79-7819a8d223f0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\",\"uuid\":\"9dd94922-af20-11ed-94c9-462a25af4eaf\",\"email\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\",\"uuid\":\"9defa75d-a247-11ed-97de-223323d49fa6\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\",\"uuid\":\"9e072255-5184-44a8-ae5f-a8e70ec5037c\",\"email\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\",\"uuid\":\"9e85bf56-c1fc-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\",\"uuid\":\"9ee1d254-a247-11ed-92ef-6ad132878933\",\"email\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\",\"uuid\":\"9f5a1546-bccf-4b9f-a25f-96fb87bd7bfc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\",\"uuid\":\"9f88a5e0-9842-4fd1-95c7-7f85edad3874\",\"email\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\",\"uuid\":\"a136a629-05cd-4a2f-b925-e1d74c6a69ad\",\"email\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\",\"uuid\":\"a18c9430-e993-488f-8b5c-3ad27997e55c\",\"email\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\",\"uuid\":\"a3644be2-a4e9-11ed-b7fb-1ea641c369ef\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\",\"uuid\":\"a4230eac-f78e-407d-8551-b07c6476622b\",\"email\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\",\"uuid\":\"a4aff885-c1fc-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\",\"uuid\":\"a813f7f3-a4e9-11ed-9388-1ad521c601b9\",\"email\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\",\"uuid\":\"a96c393b-978d-11ed-b425-4e7b3187c657\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\",\"uuid\":\"a9977d83-cddd-4644-ba02-dc1a86c0293e\",\"email\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\",\"uuid\":\"aabc794c-bd45-11ed-9ea1-9ebf47de1fdb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\",\"uuid\":\"ab5bb1f0-b9b2-43da-bd50-e5ba7315fc29\",\"email\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\",\"uuid\":\"abedb0a5-92d6-11ed-a082-5215624996c0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\",\"uuid\":\"ac484716-4260-4fd9-8288-1d4a6b0d39da\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\",\"uuid\":\"ade2bf85-978d-11ed-b425-4e7b3187c657\",\"email\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\",\"uuid\":\"b0771f90-92d6-11ed-a082-5215624996c0\",\"email\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\",\"uuid\":\"b12b859b-c89a-4023-84e6-2634f93fff00\",\"email\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\",\"uuid\":\"b155e604-bd45-11ed-ba70-22d478e15cef\",\"email\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\",\"uuid\":\"b2f195b3-53b7-4095-bfb8-90538edb12f7\",\"email\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\",\"uuid\":\"b2fc8929-b88e-11ed-8da2-b6d07de5d20c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\",\"uuid\":\"b335a7f4-a66e-41ed-b4aa-982c5b76ffc1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\",\"uuid\":\"b39fcb21-440b-4bd8-bc55-103259b74a57\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\",\"uuid\":\"b3ccf662-7d0d-4a45-9cb3-5ffcb089012c\",\"email\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\",\"uuid\":\"b4a8f9a4-28a9-4311-a813-8149eb5264f4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\",\"uuid\":\"b631798d-d17b-44ab-af5c-f075df907ddd\",\"email\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\",\"uuid\":\"b768b7b4-b88e-11ed-a132-2aa63a904ba0\",\"email\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\",\"uuid\":\"b7d64361-36fd-4ebd-9438-949f60ec3745\",\"email\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\",\"uuid\":\"b8fa89c4-34f6-4b69-a654-e3671ce743a0\",\"email\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\",\"uuid\":\"b9d64d92-66de-41cc-9164-b83b7b74439f\",\"email\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\",\"uuid\":\"bbd69d76-96c4-11ed-b802-922cd9596b23\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\",\"uuid\":\"bc036552-b05e-4ffd-8dd1-44dbe725a6ec\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\",\"uuid\":\"bcb9456d-8b65-4369-b2c4-49ee5e4c14b7\",\"email\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\",\"uuid\":\"bd7e4c91-9b7b-11ed-882c-9aa2ca31c98c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\",\"uuid\":\"bdc08c5f-afe9-11ed-84e6-a6c768ad21b4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\",\"uuid\":\"be421a73-22de-48d3-be3f-1a269016ff83\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\",\"uuid\":\"bf08166d-a032-11ed-88af-be56a8628f3f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\",\"uuid\":\"c09c4f30-96c4-11ed-9f1c-fe165ba0981c\",\"email\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\",\"uuid\":\"c20da1a9-657e-4b5a-9159-9f4d324f51fc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\",\"uuid\":\"c22b3e65-a5b2-11ed-9388-1ad521c601b9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\",\"uuid\":\"c23885b0-3659-4d47-b5c9-16c0965dc7d9\",\"email\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\",\"uuid\":\"c238d04b-c77c-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\",\"uuid\":\"c23e01c9-9b7b-11ed-8af1-7201c2784402\",\"email\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\",\"uuid\":\"c27df074-afe9-11ed-bce8-0a557ccee039\",\"email\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\",\"uuid\":\"c36f2608-4650-4331-b810-1dc5500c1356\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\",\"uuid\":\"c381f80b-8a88-47bd-9dbe-77720d784a52\",\"email\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\",\"uuid\":\"c39f3031-906f-4679-a817-9b8f072254bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\",\"uuid\":\"c3e2d867-a032-11ed-88af-be56a8628f3f\",\"email\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\",\"uuid\":\"c567f0fa-6f70-42e3-855e-2ae1d2ed7243\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\",\"uuid\":\"c60a0f7d-3f36-4966-a63f-f1f77dca030a\",\"email\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\",\"uuid\":\"c61f4ec1-ab32-11ed-8972-1eb0f4245ee5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\",\"uuid\":\"c6d4d92c-a5b2-11ed-b7fb-1ea641c369ef\",\"email\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\",\"uuid\":\"c7319ecf-1451-4031-817a-5bef597d5ac9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\",\"uuid\":\"c7b7b86f-5268-4c20-b223-afc7923d54b9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\",\"uuid\":\"c811af38-c77c-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\",\"uuid\":\"c8bbd0d2-53af-4fc0-a392-1c1c0871fb49\",\"email\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\",\"uuid\":\"c8e6753d-801c-40b5-9dd8-c98feae31df9\",\"email\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\",\"uuid\":\"c960ccca-c5ea-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\",\"uuid\":\"c9f53cd7-2f1e-4491-ae28-796ace9db6fc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\",\"uuid\":\"cac0f70c-c327-4965-b9f9-62190c96b0dc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\",\"uuid\":\"caf6ae98-ab32-11ed-bddd-722daf28c490\",\"email\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\",\"uuid\":\"cc0a6e87-ce4b-4313-b0a8-8b40179bcb68\",\"email\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\",\"uuid\":\"cc1891b1-9a95-4af6-98d7-95ac53c4e6ff\",\"email\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\",\"uuid\":\"cf9a8e87-c5ea-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\",\"uuid\":\"d0330853-c731-4097-a353-fd1014abde80\",\"email\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\",\"uuid\":\"d1d53f95-4adc-4e7b-896b-1e75ba345e9f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\",\"uuid\":\"d5aa246d-a67b-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\",\"uuid\":\"d654fb42-b569-11ed-827a-8e2840b25db2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\",\"uuid\":\"d6780612-b0b2-11ed-a714-aa504cceab29\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\",\"uuid\":\"d70a12ec-c10f-47dd-9892-cebecfd6ffb0\",\"email\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\",\"uuid\":\"d968eb97-03c1-436e-835f-9ed06d352716\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\",\"uuid\":\"d9a19936-2b5c-4fbc-b802-7a3dbf639c1b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\",\"uuid\":\"da3ac6ee-a67b-11ed-bd1e-766989ec1239\",\"email\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\",\"uuid\":\"dac22963-b569-11ed-a797-c2fe525de487\",\"email\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\",\"uuid\":\"db0404af-b0b2-11ed-84e6-a6c768ad21b4\",\"email\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\",\"uuid\":\"dcbcad43-008c-4c4c-8c35-ee5ade081d9e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\",\"uuid\":\"ddd99aa3-c7e5-4dff-8099-10588153e164\",\"email\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\",\"uuid\":\"de662b96-845c-45b9-a359-b0b763a45a61\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\",\"uuid\":\"def01997-ae71-49bc-93ea-ff9287d606c7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\",\"uuid\":\"e09cd088-50f3-4a99-8222-0917d760f4fb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\",\"uuid\":\"e0a87080-eb76-45db-9230-ed4ef629b0d2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\",\"uuid\":\"e1073fac-c2c5-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\",\"uuid\":\"e21b3798-5777-4777-919d-e5ff6fce422a\",\"email\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\",\"uuid\":\"e2267bdc-1a12-4210-869e-60d0faa477bd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\",\"uuid\":\"e42f7f54-0e83-4c40-b112-887402a7ba6b\",\"email\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\",\"uuid\":\"e485ea7a-9a64-44dd-a774-d3f31e869f6e\",\"email\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\",\"uuid\":\"e6615793-c00d-45e8-b8d6-ec1c96309d81\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\",\"uuid\":\"e6d0a0d2-e642-4b20-aa66-34ab638f4d9f\",\"email\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\",\"uuid\":\"e7113f68-c2c5-11ed-b4e0-566658a732f8\",\"email\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\",\"uuid\":\"e7403ce3-c0a2-4bae-8823-45a21c310656\",\"email\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\",\"uuid\":\"e7d1ba87-be0e-11ed-be0d-5609971d255a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\",\"uuid\":\"e84ce941-4c3d-4b79-b736-619897785a82\",\"email\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\",\"uuid\":\"e9b00493-1235-49f2-b229-06ee3afc79b0\",\"email\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\",\"uuid\":\"e9f6df6e-aa69-11ed-8972-1eb0f4245ee5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\",\"uuid\":\"e9ffa5e5-b7c5-11ed-a50e-226546b1da54\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\",\"uuid\":\"eb03f9a6-c845-11ed-a1e1-c6385b25b934\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\",\"uuid\":\"eb834f42-bed7-11ed-a89b-0ebbb850607d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\",\"uuid\":\"ebb5a53d-9c44-11ed-97cc-a697d2568caf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\",\"uuid\":\"ebf0848a-6b21-4736-ad2a-d93daf59fd15\",\"email\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\",\"uuid\":\"ebf23d4b-53c8-467a-bbb0-636c11b3ffee\",\"email\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\",\"uuid\":\"ec1ed77b-1d70-4727-b2ac-f478a37e3b8c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\",\"uuid\":\"edaec5b4-be0e-11ed-be0d-5609971d255a\",\"email\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\",\"uuid\":\"ee1307d6-f262-47be-b312-0f77517487b8\",\"email\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\",\"uuid\":\"ee8bd235-cc33-11ed-b285-a2593f21064b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\",\"uuid\":\"eeac3af0-aa69-11ed-bddd-722daf28c490\",\"email\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\",\"uuid\":\"eeb210e2-b7c5-11ed-8e20-4a014c845df9\",\"email\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\",\"uuid\":\"efc56647-04f9-430b-abcd-78fd73135dc9\",\"email\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\",\"uuid\":\"f090690e-9c44-11ed-bd03-d63a15ea0a5e\",\"email\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\",\"uuid\":\"f1130564-9856-11ed-8928-461f5552e193\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\",\"uuid\":\"f116f34c-c845-11ed-8b17-fe25dd6b2d5d\",\"email\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\",\"uuid\":\"f182abdf-bed7-11ed-b4e0-566658a732f8\",\"email\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\",\"uuid\":\"f185aa8c-b4a0-11ed-a797-c2fe525de487\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\",\"uuid\":\"f24bcc61-bae9-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\",\"uuid\":\"f352f9e3-b965-11ed-b5bf-a606768bc197\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\",\"uuid\":\"f48dd27a-cc33-11ed-9f7f-0e85fe61e6ee\",\"email\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\",\"uuid\":\"f59374fc-a0fb-11ed-a5e8-da207d422d98\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\",\"uuid\":\"f5a1e00e-9856-11ed-a432-b611e40f0c37\",\"email\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\",\"uuid\":\"f5d92ebe-a28d-11ed-b39d-128f55cb4249\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\",\"uuid\":\"f611f5ab-b4a0-11ed-a797-c2fe525de487\",\"email\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\",\"uuid\":\"f6a52e1f-a5fc-4498-b0f2-69fee17a4142\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\",\"uuid\":\"f6c58d1e-bae9-11ed-8f91-4668bdad4d01\",\"email\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\",\"uuid\":\"f7f12039-b965-11ed-b5bf-a606768bc197\",\"email\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\",\"uuid\":\"f8313d55-863c-4872-8f01-5a74e04418d2\",\"email\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\",\"uuid\":\"f92f0fb9-f3fd-42ff-955a-744cc01ee9a4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\",\"uuid\":\"f9e94170-240d-43ed-a3e4-dec65a38531b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\",\"uuid\":\"fa40ced7-a0fb-11ed-a5e3-d6024dc128f7\",\"email\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\",\"uuid\":\"fa6d1a19-a28d-11ed-9c57-8a8107f52a6e\",\"email\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\",\"uuid\":\"fbd2af3f-ba20-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\",\"uuid\":\"fc061455-8536-4ea0-8a7c-d6bd072c5b89\",\"email\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\",\"uuid\":\"fd20bff8-5c0c-4eb2-941b-c0d7669f996a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\",\"uuid\":\"fdef06c9-5a21-44bb-afb4-14b055649e5b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\",\"uuid\":\"fe4f352d-a8b5-435e-a18c-9914eb88c865\",\"email\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\",\"uuid\":\"ff2e2858-cf28-44c7-98aa-be52cef329be\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\",\"uuid\":\"ff9a7c79-a744-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\"}],\"impact\":[{\"name\":\"none\",\"count\":1703}],\"postmortem\":[{\"name\":\"No\",\"count\":1703},{\"name\":\"Yes\",\"count\":0}],\"time_to_resolve\":[{\"name\":\"time_to_resolve\",\"aggregates\":{\"min\":2.0,\"max\":3.0}}],\"state\":[{\"name\":\"active\",\"count\":1360},{\"name\":\"resolved\",\"count\":343},{\"name\":\"stable\",\"count\":0}],\"customer_impacted\":[{\"name\":0,\"count\":1703},{\"name\":true,\"count\":0}],\"fields\":[{\"name\":\"detection_method\",\"facets\":[{\"name\":\"unknown\",\"count\":1703},{\"name\":\"customer\",\"count\":0},{\"name\":\"employee\",\"count\":0},{\"name\":\"monitor\",\"count\":0},{\"name\":\"other\",\"count\":0}]},{\"name\":\"root_cause\",\"facets\":[]},{\"name\":\"services\",\"facets\":[]},{\"name\":\"summary\",\"facets\":[]},{\"name\":\"teams\",\"facets\":[]}],\"created_by\":[{\"name\":\"CI Account\",\"count\":1505,\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},{\"name\":\"frog@datadoghq.com\",\"count\":198,\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"email\":\"frog@datadoghq.com\"}],\"last_modified_by\":[{\"name\":\"CI Account\",\"count\":1505,\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"},{\"name\":\"frog@datadoghq.com\",\"count\":198,\"handle\":\"frog@datadoghq.com\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"email\":\"frog@datadoghq.com\"}],\"commander\":[{\"name\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\",\"uuid\":\"00a080f5-ba21-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-create_an_incident_returns_created_response-1677888642@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\",\"uuid\":\"01dc2b21-3194-414a-b8e8-58704603421b\",\"email\":\"test-go-create_an_incident_returns_created_response-1672877473@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\",\"uuid\":\"02a54dc1-c38f-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678925450@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\",\"uuid\":\"03e16d56-e954-4e9a-b9da-22dffdfa1f24\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672013445@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\",\"uuid\":\"03e65d16-b7bb-456a-a5da-bf31dffbdf4d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666981015@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\",\"uuid\":\"0423cfd5-a745-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-create_an_incident_returns_created_response-1675815038@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\",\"uuid\":\"04c4feaa-1864-4167-a48b-e156181d50d8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669335011@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\",\"uuid\":\"04f0d8b5-1959-43fb-85b5-782682062c4e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669248659@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\",\"uuid\":\"05d83a07-93a0-11ed-bf65-7630e111ac00\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673655101@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\",\"uuid\":\"060c37c0-93a9-48c0-90bc-dee85b66a7c7\",\"email\":\"test-go-create_an_incident_returns_created_response-1666743047@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\",\"uuid\":\"08f8d3b7-c38f-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678925461@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\",\"uuid\":\"09010d4b-7635-4553-a7b9-973f5f9cea5b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670112680@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\",\"uuid\":\"0a679024-93a0-11ed-aaf8-3230475e674b\",\"email\":\"test-go-create_an_incident_returns_created_response-1673655109@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\",\"uuid\":\"0ebbf763-be8f-40bb-8ee7-d37b729a5eed\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667434335@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\",\"uuid\":\"1193cff3-b670-4e08-a535-346105dcaf9f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668384644@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\",\"uuid\":\"1205474f-a1c5-11ed-b767-5ec4f5b84c10\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675210330@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\",\"uuid\":\"122c89ad-9d0e-11ed-9f54-862b4cfe184c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674691927@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\",\"uuid\":\"12d78e1b-0784-46f3-99ac-7e5db2d5c92e\",\"email\":\"test-go-create_an_incident_returns_created_response-1668643799@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\",\"uuid\":\"1310687d-9adb-47ae-ad7a-066c9e525f8b\",\"email\":\"test-go-create_an_incident_returns_created_response-1671667884@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\",\"uuid\":\"142ba3fc-9469-11ed-a365-8ec8661800c6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673741454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\",\"uuid\":\"1431aabf-c458-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679011809@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\",\"uuid\":\"14344412-a7b1-4044-89f7-8139727432f6\",\"email\":\"test-go-create_an_incident_returns_created_response-1670927771@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\",\"uuid\":\"1608c46d-bee2-46a5-be87-49af2b889db5\",\"email\":\"test-go-create_an_incident_returns_created_response-1667261554@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\",\"uuid\":\"161217ca-a0b5-418c-b0e5-d16edddd8258\",\"email\":\"test-go-create_an_incident_returns_created_response-1670929702@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\",\"uuid\":\"1628d4a0-a80e-11ed-af43-4e64a4a39547\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675901397@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\",\"uuid\":\"16754b18-1887-4f22-ae44-4a86e9bfc749\",\"email\":\"test-go-create_an_incident_returns_created_response-1670928949@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\",\"uuid\":\"1682f280-a1c5-11ed-ad87-fecda9c428d5\",\"email\":\"test-go-create_an_incident_returns_created_response-1675210337@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\",\"uuid\":\"16bf2921-9d0e-11ed-aff1-fa6399bf96fd\",\"email\":\"test-go-create_an_incident_returns_created_response-1674691935@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\",\"uuid\":\"18ada30d-ad3e-4ba2-911d-931233a75aa0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671754258@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\",\"uuid\":\"18cfb810-ccfd-11ed-a201-de0443f18a2a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679962293@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\",\"uuid\":\"18e9a7f7-9469-11ed-aaf8-3230475e674b\",\"email\":\"test-go-create_an_incident_returns_created_response-1673741462@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\",\"uuid\":\"1a8c2817-c458-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1679011819@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\",\"uuid\":\"1aa50cab-a80e-11ed-bc4c-ea1adbbc0986\",\"email\":\"test-go-create_an_incident_returns_created_response-1675901404@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\",\"uuid\":\"1bb87a6c-da01-4798-8bd0-5cd9918f641f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670285407@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\",\"uuid\":\"1bcb111e-ea64-4d60-9b77-ae5e7f22f157\",\"email\":\"test-go-create_an_incident_returns_created_response-1668903124@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\",\"uuid\":\"1c54a963-17f1-4ee8-a2b0-7fd07c3b2c68\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668039051@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\",\"uuid\":\"1c631d44-9920-11ed-8c68-2a913616fde8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674259871@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\",\"uuid\":\"1ce329fb-b245-11ed-8fbc-ca7794d66904\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677024542@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\",\"uuid\":\"1ebe2367-3eda-464c-9571-edd444620682\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671149452@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\",\"uuid\":\"1f019dde-acc5-11ed-bcdd-a68779fca942\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676419814@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\",\"uuid\":\"1f034a5d-ccfd-11ed-aef0-a6405a9b4791\",\"email\":\"test-go-create_an_incident_returns_created_response-1679962303@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\",\"uuid\":\"1fd5cef4-df5c-4609-be9a-11bf76483cfc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672618338@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\",\"uuid\":\"20be4a8a-b215-4bc0-b2fa-31c27e0a642b\",\"email\":\"test-go-create_an_incident_returns_created_response-1666915819@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\",\"uuid\":\"20d2001a-92b4-4d03-a5cb-73617f27b723\",\"email\":\"test-go-create_an_incident_returns_created_response-1671840707@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\",\"uuid\":\"20dbaf3d-9920-11ed-8c68-2a913616fde8\",\"email\":\"test-go-create_an_incident_returns_created_response-1674259878@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\",\"uuid\":\"214ed4fd-b245-11ed-8fbc-ca7794d66904\",\"email\":\"test-go-create_an_incident_returns_created_response-1677024549@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\",\"uuid\":\"2375265b-acc5-11ed-9a7e-46e4eb8f12a7\",\"email\":\"test-go-create_an_incident_returns_created_response-1676419822@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\",\"uuid\":\"2399be00-e683-4133-aec2-7ab8fe73779e\",\"email\":\"test-go-create_an_incident_returns_created_response-1670594546@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\",\"uuid\":\"23a293e3-086a-4f8e-8fa6-a2555557309e\",\"email\":\"test-go-create_an_incident_returns_created_response-1673050262@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\",\"uuid\":\"24f932ba-4cd2-498e-8261-64f6ec161bcb\",\"email\":\"test-go-create_an_incident_returns_created_response-1667175034@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\",\"uuid\":\"25538030-b633-11ed-827a-8e2840b25db2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677456630@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\",\"uuid\":\"2593795d-b0f5-46f9-a852-34d3c466ce0a\",\"email\":\"test-go-create_an_incident_returns_created_response-1672013452@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\",\"uuid\":\"26287ddb-5d1c-400d-96dc-a1d3bb09f880\",\"email\":\"test-go-create_an_incident_returns_created_response-1667520677@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\",\"uuid\":\"27c16c1b-c9d8-11ed-b840-0ed4b0ca293a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679616573@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\",\"uuid\":\"281184f3-b17c-11ed-bce8-0a557ccee039\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676938232@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\",\"uuid\":\"2871bc57-733f-4f85-b3ef-440569202326\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668557513@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\",\"uuid\":\"289f8508-500c-472e-a9d4-71f30f1cf151\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668471095@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\",\"uuid\":\"28ae893d-4b70-420d-96dc-f82066a0642f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671667877@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\",\"uuid\":\"291b8416-a87d-4e56-a93e-9d430d5c4996\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672531830@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\",\"uuid\":\"29cd6809-b633-11ed-827a-8e2840b25db2\",\"email\":\"test-go-create_an_incident_returns_created_response-1677456637@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\",\"uuid\":\"2acb4dc0-bfa1-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678493444@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\",\"uuid\":\"2b0ac046-39c8-4bf4-a00a-deb089bbbc0c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671927057@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\",\"uuid\":\"2c9256b5-c90f-11ed-a1f3-7afc45c1981c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679530252@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\",\"uuid\":\"2c977e11-b17c-11ed-bce8-0a557ccee039\",\"email\":\"test-go-create_an_incident_returns_created_response-1676938239@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\",\"uuid\":\"2d99557e-c9d8-11ed-a171-361a8cacd441\",\"email\":\"test-go-create_an_incident_returns_created_response-1679616583@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\",\"uuid\":\"2db31432-b497-42b8-80b7-fef85898a2a8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672445562@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\",\"uuid\":\"2ebfffc1-a7da-4558-a507-038442f7ee79\",\"email\":\"test-go-create_an_incident_returns_created_response-1668039059@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\",\"uuid\":\"2eca0bd9-db8e-4c5d-91b7-2ccddffd5764\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669767030@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\",\"uuid\":\"2fc6258a-7492-43c0-accf-24528cbbfea1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671235865@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\",\"uuid\":\"302a3d05-c61c-41d8-ad31-8821b764acf7\",\"email\":\"test-go-create_an_incident_returns_created_response-1669680686@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\",\"uuid\":\"30e3000f-bfa1-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1678493454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\",\"uuid\":\"30e43861-abfc-11ed-a6fc-0e9b7fe457ae\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676333515@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\",\"uuid\":\"31ad2923-926d-49af-ad5b-d8b120e6edc8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669680678@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\",\"uuid\":\"32d40acb-c90f-11ed-a1f3-7afc45c1981c\",\"email\":\"test-go-create_an_incident_returns_created_response-1679530263@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\",\"uuid\":\"34377484-e597-4d4c-bccf-88e919b6d549\",\"email\":\"test-go-create_an_incident_returns_created_response-1671581470@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\",\"uuid\":\"34e92512-7c24-4704-816e-4fadc9b5eff7\",\"email\":\"test-go-create_an_incident_returns_created_response-1667693449@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\",\"uuid\":\"3578dcc8-088a-4320-8c27-7f80f1bba4cb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668211888@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\",\"uuid\":\"3584000d-6337-4c9e-955e-e25514b83be0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672186272@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\",\"uuid\":\"35ba7493-abfc-11ed-b5cd-eec9514dd597\",\"email\":\"test-go-create_an_incident_returns_created_response-1676333523@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\",\"uuid\":\"367e08f8-c06a-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678579793@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\",\"uuid\":\"3883d9fe-1678-452e-8801-11a374f9fdae\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671062982@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\",\"uuid\":\"39627294-7a14-4e71-b5ff-5221e68b6fbe\",\"email\":\"test-go-create_an_incident_returns_created_response-1667002244@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\",\"uuid\":\"3bc8406a-5790-4582-82f5-08e330921b9b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671581462@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\",\"uuid\":\"3c28c823-158e-46c2-8dce-06f1dace90e8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668989431@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\",\"uuid\":\"3c7509b1-82af-4d25-b1e5-3e8aaa107f0a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673050254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\",\"uuid\":\"3c7f71d2-c06a-11ed-a89b-0ebbb850607d\",\"email\":\"test-go-create_an_incident_returns_created_response-1678579803@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\",\"uuid\":\"3ce20d84-5e75-45a5-b7b9-971549a50cf4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669162240@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\",\"uuid\":\"40d8c19a-8c6a-4f54-9444-aba7b6798064\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670458180@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\",\"uuid\":\"41da9ce5-bbb3-11ed-82a6-028cebedd0cf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678061409@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\",\"uuid\":\"426feaae-7bf3-4b2c-bc8c-0c79056d6d8d\",\"email\":\"test-go-create_an_incident_returns_created_response-1673136665@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\",\"uuid\":\"431624c4-d099-4dfb-b701-33a60bba6ebe\",\"email\":\"test-go-create_an_incident_returns_created_response-1672099886@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\",\"uuid\":\"442dd264-b729-473b-a51d-4b141068fe3d\",\"email\":\"test-go-create_an_incident_returns_created_response-1669421482@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\",\"uuid\":\"446cd2d8-630c-4fe9-8901-fb85bd22426d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603297@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\",\"uuid\":\"467de14f-bbb3-11ed-82a6-028cebedd0cf\",\"email\":\"test-go-create_an_incident_returns_created_response-1678061417@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\",\"uuid\":\"46d62900-016b-463c-9fff-c8b4f946ce5c\",\"email\":\"test-go-create_an_incident_returns_created_response-1668989438@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\",\"uuid\":\"46e3c6ef-a420-11ed-b1f8-56250c47f0b3\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675469405@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\",\"uuid\":\"48f7337b-3304-46fc-9e88-23b4dc5d24cc\",\"email\":\"test-go-create_an_incident_returns_created_response-1670371777@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\",\"uuid\":\"4b432133-ba1b-4edc-ab57-c0250963f250\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670943350@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\",\"uuid\":\"4b5ba977-c521-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679098230@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\",\"uuid\":\"4b68a1e2-a420-11ed-b1f8-56250c47f0b3\",\"email\":\"test-go-create_an_incident_returns_created_response-1675469412@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\",\"uuid\":\"4e5cb15e-f18e-43ba-b115-2a4e62736739\",\"email\":\"test-go-create_an_incident_returns_created_response-1668816648@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\",\"uuid\":\"4e6b1824-dc1e-4691-8abd-5ffb968da7eb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670603851@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\",\"uuid\":\"4fdb4327-3660-4aeb-b403-7f7939493f27\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669421474@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\",\"uuid\":\"50d5408a-1894-4173-9fa1-32209009d9b1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670458188@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\",\"uuid\":\"5141e45c-c521-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-create_an_incident_returns_created_response-1679098240@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\",\"uuid\":\"520007b9-a357-11ed-acb5-6e0b90178632\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675383094@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\",\"uuid\":\"521a78f7-573e-4b67-8e2c-d0dd5d91a265\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670803787@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\",\"uuid\":\"54b84ea9-ae9f-4159-b226-aba3b432a792\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666743039@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\",\"uuid\":\"551c3a48-99e9-11ed-a607-1684d7f553f6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674346295@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\",\"uuid\":\"557fb06e-bc7c-11ed-be39-625d488bce09\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678147771@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\",\"uuid\":\"56afe5b0-b855-11ed-a706-064bc8586212\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1677691218@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\",\"uuid\":\"56d1cddc-a357-11ed-95c6-eefcd7f14d98\",\"email\":\"test-go-create_an_incident_returns_created_response-1675383103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\",\"uuid\":\"5705f818-933e-4ef4-818c-615b06f80fd1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670929700@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\",\"uuid\":\"577067f0-c41d-4928-8964-0f7725e8cf68\",\"email\":\"test-go-create_an_incident_returns_created_response-1668557521@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\",\"uuid\":\"57e9dbb7-b855-11ed-ab26-8e492650c256\",\"email\":\"test-create_an_incident_returns_created_response-1677691220@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\",\"uuid\":\"58287ff7-caa1-11ed-81eb-8227c2cf9828\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679702983@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\",\"uuid\":\"586e086f-1e29-4689-99b6-641c3218b0a8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666829448@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\",\"uuid\":\"59b0d36c-99e9-11ed-8968-92ec5048e27c\",\"email\":\"test-go-create_an_incident_returns_created_response-1674346302@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\",\"uuid\":\"59c9cd2e-cd40-4530-ba50-415bce89b133\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667261546@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\",\"uuid\":\"5b76378d-bc7c-11ed-ba16-0aeab349e953\",\"email\":\"test-go-create_an_incident_returns_created_response-1678147781@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\",\"uuid\":\"5baf69e4-9bd6-4c76-b552-2bfee88031b5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670976638@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\",\"uuid\":\"5c4ecf79-7ffb-47ea-9331-687b04ac9df8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668298265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\",\"uuid\":\"5ce42d6d-a0b9-4d0f-893b-aa0b8f30ee5c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671840699@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\",\"uuid\":\"5d11019d-f1dc-468d-a20a-8e64e7af9494\",\"email\":\"test-go-create_an_incident_returns_created_response-1672445570@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\",\"uuid\":\"5db9c599-b71f-40c6-84d9-8ca8779004e1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670976646@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\",\"uuid\":\"5e20a7d6-caa1-11ed-b285-a2593f21064b\",\"email\":\"test-go-create_an_incident_returns_created_response-1679702993@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\",\"uuid\":\"5f3582c4-06d1-43a3-bab9-b7ece49136a4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673223078@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\",\"uuid\":\"610753d8-8bc4-11ed-94a1-26632eba8bed\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672791107@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\",\"uuid\":\"614ff267-b30e-11ed-b3d7-ea098e8dc2bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677110986@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\",\"uuid\":\"61d88713-957f-4920-8a3b-65f0ccd79b57\",\"email\":\"test-go-create_an_incident_returns_created_response-1667088640@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\",\"uuid\":\"623452c3-d694-466a-95b9-140a9c44a1ab\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670026253@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\",\"uuid\":\"65b38b0e-8bc4-11ed-81c7-fed5bfaa3f3d\",\"email\":\"test-go-create_an_incident_returns_created_response-1672791115@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\",\"uuid\":\"65e049af-b30e-11ed-82a1-e2db47427de5\",\"email\":\"test-go-create_an_incident_returns_created_response-1677110993@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\",\"uuid\":\"6847d712-9dd7-11ed-967f-12bf3e4c6b0d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674778401@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\",\"uuid\":\"6887723d-dbde-4969-bba8-e9b3464645ce\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667520669@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\",\"uuid\":\"6b9e40b1-bd01-11ed-8bd9-4a4655204cc7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678204931@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\",\"uuid\":\"6c22fc34-31d7-4085-948b-d862feb447fe\",\"email\":\"test-go-create_an_incident_returns_created_response-1667952700@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\",\"uuid\":\"6ca38252-ad8e-11ed-9613-3a90352a946f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676506273@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\",\"uuid\":\"6ccce5fc-d6a8-416d-921b-f883914b67ad\",\"email\":\"test-go-create_an_incident_returns_created_response-1671149459@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\",\"uuid\":\"6d0c845f-9dd7-11ed-a399-1a75992a86c7\",\"email\":\"test-go-create_an_incident_returns_created_response-1674778408@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\",\"uuid\":\"6d550b97-297b-43ea-a3dc-85383cf72fba\",\"email\":\"test-go-create_an_incident_returns_created_response-1669594231@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\",\"uuid\":\"6d7f7052-6ddb-461f-a49f-6cb5fca6b2c8\",\"email\":\"test-go-create_an_incident_returns_created_response-1671927065@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\",\"uuid\":\"6e0e84e3-b856-11ed-ab26-8e492650c256\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1677691687@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\",\"uuid\":\"6ed45bb9-a8d7-11ed-b51e-c2a468ff72a6\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675987874@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\",\"uuid\":\"6efabec4-24bc-46bd-8f53-e068f03adbf0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670927769@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\",\"uuid\":\"6f41744d-b856-11ed-a706-064bc8586212\",\"email\":\"test-create_an_incident_returns_created_response-1677691689@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\",\"uuid\":\"70532155-9800-46d9-89ed-bd41347c3dfd\",\"email\":\"test-go-create_an_incident_returns_created_response-1670717462@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\",\"uuid\":\"713c4001-ad8e-11ed-be7d-0ec0d643006a\",\"email\":\"test-go-create_an_incident_returns_created_response-1676506281@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\",\"uuid\":\"71cb7181-bd01-11ed-8700-9293738b117d\",\"email\":\"test-go-create_an_incident_returns_created_response-1678204941@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\",\"uuid\":\"7247d247-e798-4af5-b9ce-7bf786c4d0c7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671322271@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\",\"uuid\":\"73546355-1adc-4289-908a-2f6fae7fc9fa\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672359091@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\",\"uuid\":\"738ccf6d-a8d7-11ed-ad7e-6ed4f1c67dea\",\"email\":\"test-go-create_an_incident_returns_created_response-1675987882@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\",\"uuid\":\"73a70dc9-b6fc-11ed-a3d7-a2295215c227\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677543090@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\",\"uuid\":\"7571121d-a654-4df8-9afa-e638f17d53bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669507839@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\",\"uuid\":\"76c071c8-9ab2-11ed-8c68-2a913616fde8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674432680@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\",\"uuid\":\"7715eb6d-9ea0-11ed-8e78-767557a2485a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674864754@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\",\"uuid\":\"785f915d-b6fc-11ed-ad05-76e4602e1079\",\"email\":\"test-go-create_an_incident_returns_created_response-1677543098@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\",\"uuid\":\"7ac9b3b9-9144-11ed-82e3-622adeb45fa9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673395882@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\",\"uuid\":\"7b5907f1-9ab2-11ed-8c68-2a913616fde8\",\"email\":\"test-go-create_an_incident_returns_created_response-1674432688@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\",\"uuid\":\"7ba05e4d-f9a0-44e2-aa8c-bcda7adac2e5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672877465@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\",\"uuid\":\"7bc2a11e-9ea0-11ed-8c38-7ad981f4abb4\",\"email\":\"test-go-create_an_incident_returns_created_response-1674864762@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\",\"uuid\":\"7da5fc01-ccbd-4679-8149-cb22fe402bb3\",\"email\":\"test-go-create_an_incident_returns_created_response-1668384652@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\",\"uuid\":\"7dd124ba-7343-4882-b700-c44374efa8e3\",\"email\":\"test-go-create_an_incident_returns_created_response-1667779824@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\",\"uuid\":\"7f3e8ad2-95fb-11ed-b93e-b6681b4e2484\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673914292@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\",\"uuid\":\"7f7afd0e-9144-11ed-82e3-622adeb45fa9\",\"email\":\"test-go-create_an_incident_returns_created_response-1673395889@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\",\"uuid\":\"8009c2e2-ae57-11ed-b4cb-a681084bf13a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676592635@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\",\"uuid\":\"81831280-6cb1-4a01-9dc9-f68b1405f8f6\",\"email\":\"test-go-create_an_incident_returns_created_response-1670926105@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\",\"uuid\":\"81da5714-b3d7-11ed-97bb-cad2b20710fd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677197369@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\",\"uuid\":\"82eadb7f-c133-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678666250@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\",\"uuid\":\"84060fed-95fb-11ed-b93e-b6681b4e2484\",\"email\":\"test-go-create_an_incident_returns_created_response-1673914300@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\",\"uuid\":\"847f57aa-1b32-4eee-8447-e6eef1f6744f\",\"email\":\"test-go-create_an_incident_returns_created_response-1670199054@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\",\"uuid\":\"848026b5-ae57-11ed-9ecb-824f74ccf3e4\",\"email\":\"test-go-create_an_incident_returns_created_response-1676592642@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\",\"uuid\":\"853cce16-d7d3-4bd6-8f99-b1eab0407cf1\",\"email\":\"test-go-create_an_incident_returns_created_response-1670630968@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\",\"uuid\":\"862d085b-48ce-446e-a74f-ae3538d623f5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672099877@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\",\"uuid\":\"866af7b6-9f69-11ed-8c38-7ad981f4abb4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674951109@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\",\"uuid\":\"86a13258-b3d7-11ed-a605-a260cf3212a9\",\"email\":\"test-go-create_an_incident_returns_created_response-1677197377@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\",\"uuid\":\"86bc89ca-9532-11ed-bf65-7630e111ac00\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673827975@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\",\"uuid\":\"88c2cdf6-2769-4e68-9503-38d3f166ff1a\",\"email\":\"test-go-create_an_incident_returns_created_response-1667434343@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\",\"uuid\":\"88ce8004-c133-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678666260@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\",\"uuid\":\"89229fdb-c6b3-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679270991@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\",\"uuid\":\"8a2d2c9d-c478-4a74-94a8-cabb28bd1473\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668643791@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\",\"uuid\":\"8ae38d89-9f69-11ed-bfa9-f2483e31eab5\",\"email\":\"test-go-create_an_incident_returns_created_response-1674951116@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\",\"uuid\":\"8b7b570e-9532-11ed-bf65-7630e111ac00\",\"email\":\"test-go-create_an_incident_returns_created_response-1673827983@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\",\"uuid\":\"8e41e3a8-a9a0-11ed-a060-46b9814ce648\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676074256@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\",\"uuid\":\"8e85e36f-5ccd-4052-a34e-d7338178914e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672704719@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\",\"uuid\":\"8f25b885-c6b3-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1679271002@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\",\"uuid\":\"8f8399af-4d57-41a1-91a3-37c29fb62092\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667866310@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\",\"uuid\":\"8fa60296-198c-4113-8f21-0ba09e4fd83e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670630960@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\",\"uuid\":\"8fb58f8b-cb6a-11ed-be83-92f82eb96735\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679789405@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\",\"uuid\":\"91a8dc0a-0c63-4411-b9ab-39ec37dc2eee\",\"email\":\"test-go-create_an_incident_returns_created_response-1666829456@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\",\"uuid\":\"92c4c4e2-d881-485c-9668-0aa68239c513\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669939802@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\",\"uuid\":\"936c4650-a9a0-11ed-af98-1a32d7edfd9d\",\"email\":\"test-go-create_an_incident_returns_created_response-1676074265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\",\"uuid\":\"93e8df0e-729e-4d2f-b0a4-9495ffb37b06\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667088632@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\",\"uuid\":\"94c9bf7f-920d-11ed-9cec-222dbf547024\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673482254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\",\"uuid\":\"94d92a17-4768-48dd-97b4-ab32fee4e33b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670598792@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\",\"uuid\":\"94f7179d-40a0-4790-9436-6080eb0db034\",\"email\":\"test-go-create_an_incident_returns_created_response-1669853467@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\",\"uuid\":\"959ada1b-cb6a-11ed-9f7f-0e85fe61e6ee\",\"email\":\"test-go-create_an_incident_returns_created_response-1679789415@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\",\"uuid\":\"96796850-b278-4313-a726-9cf5c832fe30\",\"email\":\"test-go-create_an_incident_returns_created_response-1669075853@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\",\"uuid\":\"99579994-af20-11ed-94c9-462a25af4eaf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676679006@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\",\"uuid\":\"995b112e-920d-11ed-9888-e278e4206645\",\"email\":\"test-go-create_an_incident_returns_created_response-1673482262@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\",\"uuid\":\"9b26b565-e0c1-4777-a693-553a8d5cb243\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670594544@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\",\"uuid\":\"9b9fe3ac-f73b-43a5-b570-43d156e07ea9\",\"email\":\"test-go-create_an_incident_returns_created_response-1670285415@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\",\"uuid\":\"9c09fbea-fce4-4c02-9a45-ec845bab938a\",\"email\":\"test-go-create_an_incident_returns_created_response-1670926595@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\",\"uuid\":\"9c58a1dc-6beb-4390-928e-ed9d95b13b30\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670544898@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\",\"uuid\":\"9ccf5d51-55b4-43e0-ad79-7819a8d223f0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667693441@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\",\"uuid\":\"9dd94922-af20-11ed-94c9-462a25af4eaf\",\"email\":\"test-go-create_an_incident_returns_created_response-1676679013@datadoghq.com\"},{\"name\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\",\"count\":1,\"handle\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\",\"uuid\":\"9defa75d-a247-11ed-97de-223323d49fa6\",\"email\":\"test-add_commander_to_an_incident_returns_ok_response-1675266399@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\",\"uuid\":\"9e072255-5184-44a8-ae5f-a8e70ec5037c\",\"email\":\"test-go-create_an_incident_returns_created_response-1666979690@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\",\"uuid\":\"9e85bf56-c1fc-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678752625@datadoghq.com\"},{\"name\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\",\"count\":1,\"handle\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\",\"uuid\":\"9ee1d254-a247-11ed-92ef-6ad132878933\",\"email\":\"test-create_an_incident_returns_created_response-1675266400@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\",\"uuid\":\"9f5a1546-bccf-4b9f-a25f-96fb87bd7bfc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668125498@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\",\"uuid\":\"9f88a5e0-9842-4fd1-95c7-7f85edad3874\",\"email\":\"test-go-create_an_incident_returns_created_response-1669162248@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\",\"uuid\":\"a136a629-05cd-4a2f-b925-e1d74c6a69ad\",\"email\":\"test-go-create_an_incident_returns_created_response-1666981017@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\",\"uuid\":\"a18c9430-e993-488f-8b5c-3ad27997e55c\",\"email\":\"test-go-create_an_incident_returns_created_response-1670803795@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\",\"uuid\":\"a3644be2-a4e9-11ed-b7fb-1ea641c369ef\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675555889@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\",\"uuid\":\"a4230eac-f78e-407d-8551-b07c6476622b\",\"email\":\"test-go-create_an_incident_returns_created_response-1672704726@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\",\"uuid\":\"a4aff885-c1fc-11ed-a95c-ceabe7e64a8c\",\"email\":\"test-go-create_an_incident_returns_created_response-1678752635@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\",\"uuid\":\"a813f7f3-a4e9-11ed-9388-1ad521c601b9\",\"email\":\"test-go-create_an_incident_returns_created_response-1675555897@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\",\"uuid\":\"a96c393b-978d-11ed-b425-4e7b3187c657\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674087020@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\",\"uuid\":\"a9977d83-cddd-4644-ba02-dc1a86c0293e\",\"email\":\"test-go-create_an_incident_returns_created_response-1669767038@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\",\"uuid\":\"aabc794c-bd45-11ed-9ea1-9ebf47de1fdb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678234243@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\",\"uuid\":\"ab5bb1f0-b9b2-43da-bd50-e5ba7315fc29\",\"email\":\"test-go-create_an_incident_returns_created_response-1667606997@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\",\"uuid\":\"abedb0a5-92d6-11ed-a082-5215624996c0\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673568622@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\",\"uuid\":\"ac484716-4260-4fd9-8288-1d4a6b0d39da\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672272649@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\",\"uuid\":\"ade2bf85-978d-11ed-b425-4e7b3187c657\",\"email\":\"test-go-create_an_incident_returns_created_response-1674087028@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\",\"uuid\":\"b0771f90-92d6-11ed-a082-5215624996c0\",\"email\":\"test-go-create_an_incident_returns_created_response-1673568629@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\",\"uuid\":\"b12b859b-c89a-4023-84e6-2634f93fff00\",\"email\":\"test-go-create_an_incident_returns_created_response-1672359099@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\",\"uuid\":\"b155e604-bd45-11ed-ba70-22d478e15cef\",\"email\":\"test-go-create_an_incident_returns_created_response-1678234254@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\",\"uuid\":\"b2f195b3-53b7-4095-bfb8-90538edb12f7\",\"email\":\"test-go-create_an_incident_returns_created_response-1667347843@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\",\"uuid\":\"b2fc8929-b88e-11ed-8da2-b6d07de5d20c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677715854@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\",\"uuid\":\"b335a7f4-a66e-41ed-b4aa-982c5b76ffc1\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667779816@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\",\"uuid\":\"b39fcb21-440b-4bd8-bc55-103259b74a57\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1672963863@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\",\"uuid\":\"b3ccf662-7d0d-4a45-9cb3-5ffcb089012c\",\"email\":\"test-go-create_an_incident_returns_created_response-1670890374@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\",\"uuid\":\"b4a8f9a4-28a9-4311-a813-8149eb5264f4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669594223@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\",\"uuid\":\"b631798d-d17b-44ab-af5c-f075df907ddd\",\"email\":\"test-go-create_an_incident_returns_created_response-1672963870@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\",\"uuid\":\"b768b7b4-b88e-11ed-a132-2aa63a904ba0\",\"email\":\"test-go-create_an_incident_returns_created_response-1677715861@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\",\"uuid\":\"b7d64361-36fd-4ebd-9438-949f60ec3745\",\"email\":\"test-go-create_an_incident_returns_created_response-1671408605@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\",\"uuid\":\"b8fa89c4-34f6-4b69-a654-e3671ce743a0\",\"email\":\"test-go-create_an_incident_returns_created_response-1670604391@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\",\"uuid\":\"b9d64d92-66de-41cc-9164-b83b7b74439f\",\"email\":\"test-go-create_an_incident_returns_created_response-1668471103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\",\"uuid\":\"bbd69d76-96c4-11ed-b802-922cd9596b23\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674000722@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\",\"uuid\":\"bc036552-b05e-4ffd-8dd1-44dbe725a6ec\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669853460@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\",\"uuid\":\"bcb9456d-8b65-4369-b2c4-49ee5e4c14b7\",\"email\":\"test-go-create_an_incident_returns_created_response-1670544906@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\",\"uuid\":\"bd7e4c91-9b7b-11ed-882c-9aa2ca31c98c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674519128@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\",\"uuid\":\"bdc08c5f-afe9-11ed-84e6-a6c768ad21b4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676765396@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\",\"uuid\":\"be421a73-22de-48d3-be3f-1a269016ff83\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667952692@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\",\"uuid\":\"bf08166d-a032-11ed-88af-be56a8628f3f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675037533@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\",\"uuid\":\"c09c4f30-96c4-11ed-9f1c-fe165ba0981c\",\"email\":\"test-go-create_an_incident_returns_created_response-1674000730@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\",\"uuid\":\"c20da1a9-657e-4b5a-9159-9f4d324f51fc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1666915811@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\",\"uuid\":\"c22b3e65-a5b2-11ed-9388-1ad521c601b9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675642269@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\",\"uuid\":\"c23885b0-3659-4d47-b5c9-16c0965dc7d9\",\"email\":\"test-go-create_an_incident_returns_created_response-1671495039@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\",\"uuid\":\"c238d04b-c77c-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679357416@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\",\"uuid\":\"c23e01c9-9b7b-11ed-8af1-7201c2784402\",\"email\":\"test-go-create_an_incident_returns_created_response-1674519135@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\",\"uuid\":\"c27df074-afe9-11ed-bce8-0a557ccee039\",\"email\":\"test-go-create_an_incident_returns_created_response-1676765404@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\",\"uuid\":\"c36f2608-4650-4331-b810-1dc5500c1356\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668730249@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\",\"uuid\":\"c381f80b-8a88-47bd-9dbe-77720d784a52\",\"email\":\"test-go-create_an_incident_returns_created_response-1670924666@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\",\"uuid\":\"c39f3031-906f-4679-a817-9b8f072254bb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1669075846@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\",\"uuid\":\"c3e2d867-a032-11ed-88af-be56a8628f3f\",\"email\":\"test-go-create_an_incident_returns_created_response-1675037541@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\",\"uuid\":\"c567f0fa-6f70-42e3-855e-2ae1d2ed7243\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667002236@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\",\"uuid\":\"c60a0f7d-3f36-4966-a63f-f1f77dca030a\",\"email\":\"test-go-create_an_incident_returns_created_response-1668125506@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\",\"uuid\":\"c61f4ec1-ab32-11ed-8972-1eb0f4245ee5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676247007@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\",\"uuid\":\"c6d4d92c-a5b2-11ed-b7fb-1ea641c369ef\",\"email\":\"test-go-create_an_incident_returns_created_response-1675642277@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\",\"uuid\":\"c7319ecf-1451-4031-817a-5bef597d5ac9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668903116@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\",\"uuid\":\"c7b7b86f-5268-4c20-b223-afc7923d54b9\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670604389@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\",\"uuid\":\"c811af38-c77c-11ed-9949-f20a22a554f2\",\"email\":\"test-go-create_an_incident_returns_created_response-1679357426@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\",\"uuid\":\"c8bbd0d2-53af-4fc0-a392-1c1c0871fb49\",\"email\":\"test-go-create_an_incident_returns_created_response-1673309503@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\",\"uuid\":\"c8e6753d-801c-40b5-9dd8-c98feae31df9\",\"email\":\"test-go-create_an_incident_returns_created_response-1671754265@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\",\"uuid\":\"c960ccca-c5ea-11ed-9949-f20a22a554f2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679184770@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\",\"uuid\":\"c9f53cd7-2f1e-4491-ae28-796ace9db6fc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926103@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\",\"uuid\":\"cac0f70c-c327-4965-b9f9-62190c96b0dc\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670371766@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\",\"uuid\":\"caf6ae98-ab32-11ed-bddd-722daf28c490\",\"email\":\"test-go-create_an_incident_returns_created_response-1676247015@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\",\"uuid\":\"cc0a6e87-ce4b-4313-b0a8-8b40179bcb68\",\"email\":\"test-go-create_an_incident_returns_created_response-1673223085@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\",\"uuid\":\"cc1891b1-9a95-4af6-98d7-95ac53c4e6ff\",\"email\":\"test-go-create_an_incident_returns_created_response-1671235873@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\",\"uuid\":\"cf9a8e87-c5ea-11ed-b3e8-5aa3effaa08f\",\"email\":\"test-go-create_an_incident_returns_created_response-1679184781@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\",\"uuid\":\"d0330853-c731-4097-a353-fd1014abde80\",\"email\":\"test-go-create_an_incident_returns_created_response-1670943352@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\",\"uuid\":\"d1d53f95-4adc-4e7b-896b-1e75ba345e9f\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667175027@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\",\"uuid\":\"d5aa246d-a67b-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675728631@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\",\"uuid\":\"d654fb42-b569-11ed-827a-8e2840b25db2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677370168@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\",\"uuid\":\"d6780612-b0b2-11ed-a714-aa504cceab29\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676851766@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\",\"uuid\":\"d70a12ec-c10f-47dd-9892-cebecfd6ffb0\",\"email\":\"test-go-create_an_incident_returns_created_response-1672186280@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\",\"uuid\":\"d968eb97-03c1-436e-835f-9ed06d352716\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670199046@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\",\"uuid\":\"d9a19936-2b5c-4fbc-b802-7a3dbf639c1b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670890367@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\",\"uuid\":\"da3ac6ee-a67b-11ed-bd1e-766989ec1239\",\"email\":\"test-go-create_an_incident_returns_created_response-1675728639@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\",\"uuid\":\"dac22963-b569-11ed-a797-c2fe525de487\",\"email\":\"test-go-create_an_incident_returns_created_response-1677370176@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\",\"uuid\":\"db0404af-b0b2-11ed-84e6-a6c768ad21b4\",\"email\":\"test-go-create_an_incident_returns_created_response-1676851774@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\",\"uuid\":\"dcbcad43-008c-4c4c-8c35-ee5ade081d9e\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673136657@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\",\"uuid\":\"ddd99aa3-c7e5-4dff-8099-10588153e164\",\"email\":\"test-go-create_an_incident_returns_created_response-1670026261@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\",\"uuid\":\"de662b96-845c-45b9-a359-b0b763a45a61\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671495031@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\",\"uuid\":\"def01997-ae71-49bc-93ea-ff9287d606c7\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670717454@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\",\"uuid\":\"e09cd088-50f3-4a99-8222-0917d760f4fb\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670112672@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\",\"uuid\":\"e0a87080-eb76-45db-9230-ed4ef629b0d2\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670924664@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\",\"uuid\":\"e1073fac-c2c5-11ed-b4e0-566658a732f8\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678839065@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\",\"uuid\":\"e21b3798-5777-4777-919d-e5ff6fce422a\",\"email\":\"test-go-create_an_incident_returns_created_response-1668730257@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\",\"uuid\":\"e2267bdc-1a12-4210-869e-60d0faa477bd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667347836@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\",\"uuid\":\"e42f7f54-0e83-4c40-b112-887402a7ba6b\",\"email\":\"test-go-create_an_incident_returns_created_response-1669248667@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\",\"uuid\":\"e485ea7a-9a64-44dd-a774-d3f31e869f6e\",\"email\":\"test-go-create_an_incident_returns_created_response-1669335019@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\",\"uuid\":\"e6615793-c00d-45e8-b8d6-ec1c96309d81\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1673309495@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\",\"uuid\":\"e6d0a0d2-e642-4b20-aa66-34ab638f4d9f\",\"email\":\"test-go-create_an_incident_returns_created_response-1669939809@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\",\"uuid\":\"e7113f68-c2c5-11ed-b4e0-566658a732f8\",\"email\":\"test-go-create_an_incident_returns_created_response-1678839075@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\",\"uuid\":\"e7403ce3-c0a2-4bae-8823-45a21c310656\",\"email\":\"test-go-create_an_incident_returns_created_response-1672531837@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\",\"uuid\":\"e7d1ba87-be0e-11ed-be0d-5609971d255a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678320674@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\",\"uuid\":\"e84ce941-4c3d-4b79-b736-619897785a82\",\"email\":\"test-go-create_an_incident_returns_created_response-1672618346@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\",\"uuid\":\"e9b00493-1235-49f2-b229-06ee3afc79b0\",\"email\":\"test-go-create_an_incident_returns_created_response-1668298272@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\",\"uuid\":\"e9f6df6e-aa69-11ed-8972-1eb0f4245ee5\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1676160739@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\",\"uuid\":\"e9ffa5e5-b7c5-11ed-a50e-226546b1da54\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677629617@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\",\"uuid\":\"eb03f9a6-c845-11ed-a1e1-c6385b25b934\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679443813@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\",\"uuid\":\"eb834f42-bed7-11ed-a89b-0ebbb850607d\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1678407009@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\",\"uuid\":\"ebb5a53d-9c44-11ed-97cc-a697d2568caf\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674605534@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\",\"uuid\":\"ebf0848a-6b21-4736-ad2a-d93daf59fd15\",\"email\":\"test-go-create_an_incident_returns_created_response-1669507847@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\",\"uuid\":\"ebf23d4b-53c8-467a-bbb0-636c11b3ffee\",\"email\":\"test-go-create_an_incident_returns_created_response-1671322279@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\",\"uuid\":\"ec1ed77b-1d70-4727-b2ac-f478a37e3b8c\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1667606989@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\",\"uuid\":\"edaec5b4-be0e-11ed-be0d-5609971d255a\",\"email\":\"test-go-create_an_incident_returns_created_response-1678320684@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\",\"uuid\":\"ee1307d6-f262-47be-b312-0f77517487b8\",\"email\":\"test-go-create_an_incident_returns_created_response-1671062990@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\",\"uuid\":\"ee8bd235-cc33-11ed-b285-a2593f21064b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1679875893@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\",\"uuid\":\"eeac3af0-aa69-11ed-bddd-722daf28c490\",\"email\":\"test-go-create_an_incident_returns_created_response-1676160746@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\",\"uuid\":\"eeb210e2-b7c5-11ed-8e20-4a014c845df9\",\"email\":\"test-go-create_an_incident_returns_created_response-1677629625@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\",\"uuid\":\"efc56647-04f9-430b-abcd-78fd73135dc9\",\"email\":\"test-go-create_an_incident_returns_created_response-1672272657@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\",\"uuid\":\"f090690e-9c44-11ed-bd03-d63a15ea0a5e\",\"email\":\"test-go-create_an_incident_returns_created_response-1674605542@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\",\"uuid\":\"f1130564-9856-11ed-8928-461f5552e193\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1674173469@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\",\"uuid\":\"f116f34c-c845-11ed-8b17-fe25dd6b2d5d\",\"email\":\"test-go-create_an_incident_returns_created_response-1679443823@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\",\"uuid\":\"f182abdf-bed7-11ed-b4e0-566658a732f8\",\"email\":\"test-go-create_an_incident_returns_created_response-1678407019@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\",\"uuid\":\"f185aa8c-b4a0-11ed-a797-c2fe525de487\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677283885@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\",\"uuid\":\"f24bcc61-bae9-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677974947@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\",\"uuid\":\"f352f9e3-b965-11ed-b5bf-a606768bc197\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677808304@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\",\"uuid\":\"f48dd27a-cc33-11ed-9f7f-0e85fe61e6ee\",\"email\":\"test-go-create_an_incident_returns_created_response-1679875903@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\",\"uuid\":\"f59374fc-a0fb-11ed-a5e8-da207d422d98\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675123953@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\",\"uuid\":\"f5a1e00e-9856-11ed-a432-b611e40f0c37\",\"email\":\"test-go-create_an_incident_returns_created_response-1674173477@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\",\"uuid\":\"f5d92ebe-a28d-11ed-b39d-128f55cb4249\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675296611@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\",\"uuid\":\"f611f5ab-b4a0-11ed-a797-c2fe525de487\",\"email\":\"test-go-create_an_incident_returns_created_response-1677283893@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\",\"uuid\":\"f6a52e1f-a5fc-4498-b0f2-69fee17a4142\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670598789@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\",\"uuid\":\"f6c58d1e-bae9-11ed-8f91-4668bdad4d01\",\"email\":\"test-go-create_an_incident_returns_created_response-1677974954@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\",\"uuid\":\"f7f12039-b965-11ed-b5bf-a606768bc197\",\"email\":\"test-go-create_an_incident_returns_created_response-1677808311@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\",\"uuid\":\"f8313d55-863c-4872-8f01-5a74e04418d2\",\"email\":\"test-go-create_an_incident_returns_created_response-1668211896@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\",\"uuid\":\"f92f0fb9-f3fd-42ff-955a-744cc01ee9a4\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1668816640@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\",\"uuid\":\"f9e94170-240d-43ed-a3e4-dec65a38531b\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670928947@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\",\"uuid\":\"fa40ced7-a0fb-11ed-a5e3-d6024dc128f7\",\"email\":\"test-go-create_an_incident_returns_created_response-1675123961@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\",\"uuid\":\"fa6d1a19-a28d-11ed-9c57-8a8107f52a6e\",\"email\":\"test-go-create_an_incident_returns_created_response-1675296619@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\",\"uuid\":\"fbd2af3f-ba20-11ed-a3f2-e6671bdc78dd\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1677888634@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\",\"uuid\":\"fc061455-8536-4ea0-8a7c-d6bd072c5b89\",\"email\":\"test-go-create_an_incident_returns_created_response-1670603299@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\",\"uuid\":\"fd20bff8-5c0c-4eb2-941b-c0d7669f996a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1671408597@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\",\"uuid\":\"fdef06c9-5a21-44bb-afb4-14b055649e5b\",\"email\":\"test-go-create_an_incident_returns_created_response-1670603854@datadoghq.com\"},{\"name\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\",\"count\":1,\"handle\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\",\"uuid\":\"fe4f352d-a8b5-435e-a18c-9914eb88c865\",\"email\":\"test-go-create_an_incident_returns_created_response-1667866318@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\",\"uuid\":\"ff2e2858-cf28-44c7-98aa-be52cef329be\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1670926593@datadoghq.com\"},{\"name\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\",\"count\":1,\"handle\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\",\"uuid\":\"ff9a7c79-a744-11ed-9567-ba00348e1a7a\",\"email\":\"test-go-add_commander_to_an_incident_returns_ok_response-1675815030@datadoghq.com\"}]},\"incidents\":[{\"data\":{\"type\":\"incidents\",\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[]},\"integrations\":{\"data\":[{\"type\":\"incident_integrations\",\"id\":\"11e66957-ce29-5a6c-9a73-fdb1a042d817\"}]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]},\"attachments\":{\"data\":[]}},\"attributes\":{\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"}},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}},\"time_to_internal_response\":0,\"public_id\":128959,\"customer_impact_end\":null,\"customer_impacted\":false,\"detected\":\"2023-03-28T00:12:47+00:00\",\"severity\":\"UNKNOWN\",\"time_to_resolve\":0,\"title\":\"Test-Go-Update_an_existing_incident_integration_metadata_returns_OK_response-1679962367\",\"created_by_uuid\":null,\"time_to_repair\":0,\"customer_impact_start\":null,\"created\":\"2023-03-28T00:12:47+00:00\",\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1679962367,\"end\":null}]}}},\"time_to_detect\":0,\"customer_impact_scope\":\"\",\"modified\":\"2023-03-28T00:12:47+00:00\",\"resolved\":null,\"non_datadog_creator\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}},\"creation_idempotency_key\":null,\"state\":\"active\",\"visibility\":\"organization\",\"commander\":null,\"case_id\":null,\"last_modified_by_uuid\":null,\"notification_handles\":null,\"customer_impact_duration\":0},\"id\":\"a262514b-6262-5be0-a72e-f0afd52b71c7\"}}]},\"relationships\":{\"incidents_relationship\":{\"data\":[{\"type\":\"incidents\",\"id\":\"a262514b-6262-5be0-a72e-f0afd52b71c7\"},{\"type\":\"incidents\",\"id\":\"75ed2002-ea12-51c8-a90f-fc5b733e80cb\"}]}}},\"included\":[{\"type\":\"incidents\",\"id\":\"a262514b-6262-5be0-a72e-f0afd52b71c7\",\"attributes\":{\"public_id\":128959,\"title\":\"Test-Go-Update_an_existing_incident_integration_metadata_returns_OK_response-1679962367\",\"resolved\":null,\"customer_impact_scope\":\"\",\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2023-03-28T00:12:47+00:00\",\"modified\":\"2023-03-28T00:12:47+00:00\",\"commander\":null,\"detected\":\"2023-03-28T00:12:47+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"name\":\"CI Account\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"summary\":{\"type\":\"textbox\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"}},\"field_analytics\":{\"state\":{\"active\":{\"duration\":0,\"spans\":[{\"start\":1679962367,\"end\":null}]}}},\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"commander_user\":{\"data\":null},\"user_defined_fields\":{\"data\":[]},\"integrations\":{\"data\":[{\"type\":\"incident_integrations\",\"id\":\"11e66957-ce29-5a6c-9a73-fdb1a042d817\"}]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}],\"meta\":{\"pagination\":{\"offset\":2,\"next_offset\":4,\"size\":2}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search for incidents returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:12.169Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Update_an_existing_incident_integration_metadata_returns_OK_response-1771855632" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"563e989e-7a68-55d3-84b0-9b21d4f809fc\",\"attributes\":{\"public_id\":338026,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Update_an_existing_incident_integration_metadata_returns_OK_response-1771855632\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:07:12.324996+00:00\",\"modified\":\"2026-02-23T14:07:12.324996+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:07:12.315147+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:07:12.324996+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338026\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "incident_id": "563e989e-7a68-55d3-84b0-9b21d4f809fc", + "integration_type": 1, + "metadata": { + "channels": [ + { + "channel_id": "C0123456789", + "channel_name": "#example-channel-name", + "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567", + "team_id": "T01234567" + } + ] + }, + "status": 2 + }, + "type": "incident_integrations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/563e989e-7a68-55d3-84b0-9b21d4f809fc/relationships/integrations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_integrations\",\"id\":\"89c6c3eb-f2dc-5663-8261-6f065155450b\",\"attributes\":{\"created\":\"2026-02-23T14:07:12.720055+00:00\",\"modified\":\"2026-02-23T14:07:12.720055+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"563e989e-7a68-55d3-84b0-9b21d4f809fc\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"status\":3,\"integration_type\":1,\"metadata\":{\"channels\":[{\"channel_id\":\"C0123456789\",\"channel_name\":\"#example-channel-name\",\"redirect_url\":\"https://slack.com/app_redirect?channel=C0123456789&team=T01234567\",\"team_id\":\"T01234567\"}]}},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "incident_id": "563e989e-7a68-55d3-84b0-9b21d4f809fc", + "integration_type": 1, + "metadata": { + "channels": [ + { + "channel_id": "C0123456789", + "channel_name": "#updated-channel-name", + "redirect_url": "https://slack.com/app_redirect?channel=C0123456789&team=T01234567", + "team_id": "T01234567" + } + ] + } + }, + "type": "incident_integrations" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/563e989e-7a68-55d3-84b0-9b21d4f809fc/relationships/integrations/89c6c3eb-f2dc-5663-8261-6f065155450b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_integrations\",\"id\":\"89c6c3eb-f2dc-5663-8261-6f065155450b\",\"attributes\":{\"created\":\"2026-02-23T14:07:12.720055+00:00\",\"modified\":\"2026-02-23T14:07:12.941928+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"563e989e-7a68-55d3-84b0-9b21d4f809fc\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"status\":4,\"integration_type\":1,\"metadata\":{\"channels\":[{\"channel_id\":\"C0123456789\",\"channel_name\":\"#updated-channel-name\",\"redirect_url\":\"https://slack.com/app_redirect?channel=C0123456789&team=T01234567\",\"team_id\":\"T01234567\"}]}},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/563e989e-7a68-55d3-84b0-9b21d4f809fc/relationships/integrations/89c6c3eb-f2dc-5663-8261-6f065155450b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/563e989e-7a68-55d3-84b0-9b21d4f809fc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an existing incident integration metadata returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:13.479Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Update_an_existing_incident_returns_OK_response-1771855633" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"a6250371-3453-5a56-b302-93500bfb7e41\",\"attributes\":{\"public_id\":338027,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Update_an_existing_incident_returns_OK_response-1771855633\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:07:13.638926+00:00\",\"modified\":\"2026-02-23T14:07:13.638926+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:07:13.629404+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:07:13.638926+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338027\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "fields": { + "state": { + "type": "dropdown", + "value": "resolved" + } + }, + "title": "Test-Update_an_existing_incident_returns_OK_response-1771855633-updated" + }, + "id": "a6250371-3453-5a56-b302-93500bfb7e41", + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/a6250371-3453-5a56-b302-93500bfb7e41", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"a6250371-3453-5a56-b302-93500bfb7e41\",\"attributes\":{\"public_id\":338027,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Update_an_existing_incident_returns_OK_response-1771855633-updated\",\"resolved\":\"2026-02-23T14:07:14.035556+00:00\",\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2026-02-23T14:07:13.638926+00:00\",\"modified\":\"2026-02-23T14:07:14.040951+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:07:13.629404+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:07:13.638926+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"resolved\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338027\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"resolved\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[{\"type\":\"incident_responders\",\"id\":\"05bdbb09-277b-5506-99a5-af9874b7c8ea\"}]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/a6250371-3453-5a56-b302-93500bfb7e41", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an existing incident returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:14.485Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Update_an_incident_todo_returns_OK_response-1771855634" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"b99fac19-2e06-582e-ad48-14978a16a3aa\",\"attributes\":{\"public_id\":338028,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Update_an_incident_todo_returns_OK_response-1771855634\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:07:14.646305+00:00\",\"modified\":\"2026-02-23T14:07:14.646305+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:07:14.634939+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:07:14.646305+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338028\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignees": [ + "@test.user@test.com", + { + "icon": "https://a.slack-edge.com/80588/img/slackbot_48.png", + "id": "USLACKBOT", + "name": "Slackbot", + "source": "slack" + } + ], + "content": "Follow up with customer about the impact they saw." + }, + "type": "incident_todos" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/b99fac19-2e06-582e-ad48-14978a16a3aa/relationships/todos", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_todos\",\"id\":\"5a7ef902-7819-5f66-800b-24cbc39c5529\",\"attributes\":{\"created\":\"2026-02-23T14:07:15.120245+00:00\",\"modified\":\"2026-02-23T14:07:15.120245+00:00\",\"completed\":null,\"due_date\":null,\"assignees\":[\"@test.user@test.com\",{\"icon\":\"https://a.slack-edge.com/80588/img/slackbot_48.png\",\"id\":\"USLACKBOT\",\"name\":\"Slackbot\",\"source\":\"slack\"}],\"content\":\"Follow up with customer about the impact they saw.\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"incident_id\":\"b99fac19-2e06-582e-ad48-14978a16a3aa\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignees": [ + "@test.user@test.com" + ], + "completed": "2023-03-06T22:00:00.000000+00:00", + "content": "Restore lost data.", + "due_date": "2023-07-10T05:00:00.000000+00:00" + }, + "type": "incident_todos" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/b99fac19-2e06-582e-ad48-14978a16a3aa/relationships/todos/5a7ef902-7819-5f66-800b-24cbc39c5529", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incident_todos\",\"id\":\"5a7ef902-7819-5f66-800b-24cbc39c5529\",\"attributes\":{\"created\":\"2026-02-23T14:07:15.120245+00:00\",\"modified\":\"2026-02-23T14:07:15.568516+00:00\",\"completed\":\"2023-03-06T22:00:00+00:00\",\"due_date\":\"2023-07-10T05:00:00+00:00\",\"assignees\":[\"@test.user@test.com\"],\"content\":\"Restore lost data.\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"incident_id\":\"b99fac19-2e06-582e-ad48-14978a16a3aa\",\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/b99fac19-2e06-582e-ad48-14978a16a3aa/relationships/todos/5a7ef902-7819-5f66-800b-24cbc39c5529", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/b99fac19-2e06-582e-ad48-14978a16a3aa", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an incident todo returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:16.356Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2f679d16-756e-4d56-b80f-b7b0dd449572\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:07:16.468385502Z\",\"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\":\"2026-02-23T14:07:16.468385592Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Security Incident-updated" + }, + "id": "2f679d16-756e-4d56-b80f-b7b0dd449572", + "type": "incident_types" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/config/types/2f679d16-756e-4d56-b80f-b7b0dd449572", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2f679d16-756e-4d56-b80f-b7b0dd449572\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:07:16.468385Z\",\"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\":\"2026-02-23T14:07:16.816272Z\",\"name\":\"Security Incident-updated\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/2f679d16-756e-4d56-b80f-b7b0dd449572", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an incident type returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-01-06T19:54:05.587Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/124/Postmortem-IR-124", + "title": "Postmortem-IR-124" + } + }, + "id": "00000000-abcd-0002-0000-000000000000", + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/00000000-0000-0000-0000-00000000000/attachments/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"malformed incident ID\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update incident attachment returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:16.917Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/124/Postmortem-IR-124", + "title": "Postmortem-IR-124" + } + }, + "id": "00000000-abcd-0002-0000-000000000000", + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/00000000-0000-0000-0000-000000000001/attachments/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"incident not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update incident attachment returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:17.039Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "customer_impacted": false, + "title": "Test-Update_incident_attachment_returns_OK_response-1771855637" + }, + "type": "incidents" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"incidents\",\"id\":\"deefcad1-7d33-56d0-8c82-61989ed74d28\",\"attributes\":{\"public_id\":338029,\"incident_type_uuid\":\"41d2e10b-4108-4736-92d7-791d00ea0702\",\"title\":\"Test-Update_incident_attachment_returns_OK_response-1771855637\",\"resolved\":null,\"customer_impact_scope\":null,\"customer_impact_start\":null,\"customer_impact_end\":null,\"customer_impacted\":false,\"notification_handles\":null,\"last_modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"last_modified_by_uuid\":null,\"created\":\"2026-02-23T14:07:17.224734+00:00\",\"modified\":\"2026-02-23T14:07:17.224734+00:00\",\"commander\":null,\"detected\":\"2026-02-23T14:07:17.214986+00:00\",\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"created_by_uuid\":null,\"creation_idempotency_key\":null,\"customer_impact_duration\":0,\"time_to_detect\":0,\"time_to_repair\":0,\"time_to_internal_response\":0,\"time_to_resolve\":0,\"archived\":null,\"is_test\":false,\"declared\":\"2026-02-23T14:07:17.224734+00:00\",\"declared_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"name\":\"frog\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\"}}},\"declared_by_uuid\":null,\"fields\":{\"teams\":{\"type\":\"autocomplete\",\"value\":null},\"severity\":{\"type\":\"dropdown\",\"value\":\"UNKNOWN\"},\"state\":{\"type\":\"dropdown\",\"value\":\"active\"},\"detection_method\":{\"type\":\"dropdown\",\"value\":\"unknown\"},\"root_cause\":{\"type\":\"textbox\",\"value\":null},\"summary\":{\"type\":\"textbox\",\"value\":null},\"services\":{\"type\":\"autocomplete\",\"value\":null},\"slug\":{\"type\":\"textbox\",\"value\":\"IR-338029\"}},\"field_analytics\":null,\"severity\":\"UNKNOWN\",\"state\":\"active\",\"non_datadog_creator\":null,\"visibility\":\"organization\",\"case_id\":null},\"relationships\":{\"created_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"last_modified_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"commander_user\":{\"data\":null},\"declared_by_user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"user_defined_fields\":{\"data\":[{\"type\":\"user_defined_field\",\"id\":\"3cbe9e60-d794-532c-acc0-73641f782813\"},{\"type\":\"user_defined_field\",\"id\":\"33457d2a-570c-5567-b4af-979a2a8f1164\"},{\"type\":\"user_defined_field\",\"id\":\"d003693c-bee9-5420-8d46-859269c20914\"},{\"type\":\"user_defined_field\",\"id\":\"1ddff6f6-cb1f-51a0-9d81-dc18ef52cc9d\"},{\"type\":\"user_defined_field\",\"id\":\"6bc9d32b-c2cd-591e-9b7a-74c886a5ddcf\"},{\"type\":\"user_defined_field\",\"id\":\"95c53547-2ba3-5d8a-9c3b-cf245bc0c629\"},{\"type\":\"user_defined_field\",\"id\":\"39044b03-cee4-555f-b1e0-3eb3aa759a86\"},{\"type\":\"user_defined_field\",\"id\":\"2b9f1063-b915-4c7a-8bbd-fc3940245529\"}]},\"integrations\":{\"data\":[]},\"attachments\":{\"data\":[]},\"responders\":{\"data\":[]},\"impacts\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/TestUpdateincidentattachmentreturnsOKresponse1771855637/Test-Update_incident_attachment_returns_OK_response-1771855637", + "title": "Test-Update_incident_attachment_returns_OK_response-1771855637" + }, + "attachment_type": "postmortem" + }, + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/deefcad1-7d33-56d0-8c82-61989ed74d28/attachments", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a5a7c352-5de3-4203-b73f-3fa40146683c\",\"type\":\"incident_attachments\",\"attributes\":{\"attachment\":{\"title\":\"Test-Update_incident_attachment_returns_OK_response-1771855637\",\"documentUrl\":\"https://app.datadoghq.com/notebook/TestUpdateincidentattachmentreturnsOKresponse1771855637/Test-Update_incident_attachment_returns_OK_response-1771855637\"},\"attachment_type\":\"postmortem\",\"modified\":\"2026-02-23T14:07:17.557533Z\"},\"relationships\":{\"incident\":{\"data\":{\"id\":\"deefcad1-7d33-56d0-8c82-61989ed74d28\",\"type\":\"incidents\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\",\"attributes\":{\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?d=retro\\u0026s=48\",\"name\":\"frog\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "attachment": { + "documentUrl": "https://app.datadoghq.com/notebook/124/Test-Update_incident_attachment_returns_OK_response-1771855637", + "title": "Test-Update_incident_attachment_returns_OK_response-1771855637" + } + }, + "id": "a5a7c352-5de3-4203-b73f-3fa40146683c", + "type": "incident_attachments" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/deefcad1-7d33-56d0-8c82-61989ed74d28/attachments/a5a7c352-5de3-4203-b73f-3fa40146683c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a5a7c352-5de3-4203-b73f-3fa40146683c\",\"type\":\"incident_attachments\",\"attributes\":{\"attachment\":{\"title\":\"Test-Update_incident_attachment_returns_OK_response-1771855637\",\"documentUrl\":\"https://app.datadoghq.com/notebook/124/Test-Update_incident_attachment_returns_OK_response-1771855637\"},\"attachment_type\":\"postmortem\",\"modified\":\"2026-02-23T14:07:18.015955Z\"},\"relationships\":{\"incident\":{\"data\":{\"id\":\"deefcad1-7d33-56d0-8c82-61989ed74d28\",\"type\":\"incidents\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},\"included\":[{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\",\"attributes\":{\"email\":\"frog@datadoghq.com\",\"handle\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?d=retro\\u0026s=48\",\"name\":\"frog\",\"uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/deefcad1-7d33-56d0-8c82-61989ed74d28/attachments/a5a7c352-5de3-4203-b73f-3fa40146683c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/deefcad1-7d33-56d0-8c82-61989ed74d28", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update incident attachment returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:19.383Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/incidents/config/notification-rules/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"invalid_type\\\" expected one of \\\"incident_notification_rules\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update incident notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:19.499Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/incidents/config/notification-rules/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"incident type doesn't exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update incident notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:19.594Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a9d0db49-7725-4660-8592-3a356e5383c5\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:07:19.703372293Z\",\"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\":\"2026-02-23T14:07:19.703372375Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "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": "a9d0db49-7725-4660-8592-3a356e5383c5", + "type": "incident_types" + } + } + }, + "type": "incident_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9dae0cfb-eb3f-412c-9bf3-a15cfdb1d740\",\"type\":\"incident_notification_rules\",\"attributes\":{\"conditions\":[{\"field\":\"severity\",\"values\":[\"SEV-1\",\"SEV-2\"]}],\"created\":\"2026-02-23T14:07:19.983077747Z\",\"enabled\":true,\"handles\":[\"@test-email@company.com\"],\"modified\":\"2026-02-23T14:07:19.983077747Z\",\"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\":\"a9d0db49-7725-4660-8592-3a356e5383c5\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "conditions": [ + { + "field": "severity", + "values": [ + "SEV-1" + ] + } + ], + "enabled": false, + "handles": [ + "@updated-team-email@company.com" + ], + "trigger": "incident_modified_trigger", + "visibility": "private" + }, + "id": "9dae0cfb-eb3f-412c-9bf3-a15cfdb1d740", + "relationships": { + "incident_type": { + "data": { + "id": "a9d0db49-7725-4660-8592-3a356e5383c5", + "type": "incident_types" + } + } + }, + "type": "incident_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/incidents/config/notification-rules/9dae0cfb-eb3f-412c-9bf3-a15cfdb1d740", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9dae0cfb-eb3f-412c-9bf3-a15cfdb1d740\",\"type\":\"incident_notification_rules\",\"attributes\":{\"conditions\":[{\"field\":\"severity\",\"values\":[\"SEV-1\"]}],\"created\":\"2026-02-23T14:07:19.983077Z\",\"enabled\":false,\"handles\":[\"@updated-team-email@company.com\"],\"modified\":\"2026-02-23T14:07:20.102856745Z\",\"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\":\"a9d0db49-7725-4660-8592-3a356e5383c5\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-rules/9dae0cfb-eb3f-412c-9bf3-a15cfdb1d740", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/a9d0db49-7725-4660-8592-3a356e5383c5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update incident notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:20.331Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "update", + "content": "Incident Status Update: For more details, visit the incident page.", + "name": "Update Template", + "subject": "Incident Update" + }, + "id": "00000000-0000-0000-0000-000000000001", + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/config/notification-templates/00000000-1111-2222-3333-444444444444", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"invalid_type\\\" expected one of \\\"notification_templates\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update incident notification template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:20.417Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "update", + "content": "Incident Status Update: For more details, visit the incident page.", + "name": "Updated Template Name", + "subject": "Incident Update" + }, + "id": "00000000-1111-2222-3333-444444444444", + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/config/notification-templates/00000000-1111-2222-3333-444444444444", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update incident notification template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Incidents", + "frozen_at": "2026-02-23T14:07:20.514Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "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" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/types", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cf6591aa-f267-47c2-bf92-3e8ea80b7dd8\",\"type\":\"incident_types\",\"attributes\":{\"createdAt\":\"2026-02-23T14:07:20.623977143Z\",\"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\":\"2026-02-23T14:07:20.623977234Z\",\"name\":\"Security Incident\",\"prefix\":\"IR\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"google_chat_configuration\":{\"data\":null},\"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" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "alert", + "content": "Test notification template", + "name": "Test Template Test-Update_incident_notification_template_returns_OK_response-1771855640", + "subject": "Test Subject" + }, + "relationships": { + "incident_type": { + "data": { + "id": "cf6591aa-f267-47c2-bf92-3e8ea80b7dd8", + "type": "incident_types" + } + } + }, + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/incidents/config/notification-templates", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d23357f8-ead4-48d3-b650-9c15359de3f5\",\"type\":\"notification_templates\",\"attributes\":{\"category\":\"alert\",\"content\":\"Test notification template\",\"created\":\"2026-02-23T14:07:20.907863Z\",\"modified\":\"2026-02-23T14:07:20.907863Z\",\"name\":\"Test Template Test-Update_incident_notification_template_returns_OK_response-1771855640\",\"subject\":\"Test Subject\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"incident_type\":{\"data\":{\"id\":\"cf6591aa-f267-47c2-bf92-3e8ea80b7dd8\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "update", + "content": "Incident Status Update:\n\nTitle: Sample Incident Title\nNew Status: resolved\nSeverity: SEV-2\nServices: web-service, database-service\nCommander: John Doe\n\nFor more details, visit the incident page.", + "name": "Test-Update_incident_notification_template_returns_OK_response-1771855640", + "subject": "Incident Update: Sample Incident Title - resolved" + }, + "id": "d23357f8-ead4-48d3-b650-9c15359de3f5", + "type": "notification_templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/incidents/config/notification-templates/d23357f8-ead4-48d3-b650-9c15359de3f5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d23357f8-ead4-48d3-b650-9c15359de3f5\",\"type\":\"notification_templates\",\"attributes\":{\"category\":\"update\",\"content\":\"Incident Status Update:\\n\\nTitle: Sample Incident Title\\nNew Status: resolved\\nSeverity: SEV-2\\nServices: web-service, database-service\\nCommander: John Doe\\n\\nFor more details, visit the incident page.\",\"created\":\"2026-02-23T14:07:20.907863Z\",\"modified\":\"2026-02-23T14:07:21.005152Z\",\"name\":\"Test-Update_incident_notification_template_returns_OK_response-1771855640\",\"subject\":\"Incident Update: Sample Incident Title - resolved\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"incident_type\":{\"data\":{\"id\":\"cf6591aa-f267-47c2-bf92-3e8ea80b7dd8\",\"type\":\"incident_types\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/notification-templates/d23357f8-ead4-48d3-b650-9c15359de3f5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/incidents/config/types/cf6591aa-f267-47c2-bf92-3e8ea80b7dd8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update incident notification template returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/integrations.json b/test-server-data/v2/integrations.json new file mode 100644 index 0000000000..c68ea7bbf4 --- /dev/null +++ b/test-server-data/v2/integrations.json @@ -0,0 +1,38 @@ +{ + "feature": "Integrations", + "recordings": [ + { + "feature": "Integrations", + "frozen_at": "2026-02-18T20:11:26.764Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integrations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"cacti\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cacti\",\"description\":\"Forward your Cacti RRDs to Datadog for richer alerting and beautiful graphing.\",\"categories\":[\"Category::Developer Tools\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cacti\"}},{\"id\":\"amazon-ecs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon ECS\",\"description\":\"A scalable, high performance container management service supporting Docker containers.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Containers\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-ecs\"}},{\"id\":\"amazon-eks-blueprints\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Blueprints Add-on\",\"description\":\"Amazon EKS Blueprints consolidates cluster configuration and deployment tools.\",\"categories\":[\"Category::AWS\",\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-eks-blueprints\"}},{\"id\":\"apicontext\",\"type\":\"integration\",\"attributes\":{\"title\":\"APIContext\",\"description\":\"Collect API conformance alerts as Datadog events\",\"categories\":[\"Category::Compliance\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=apicontext\"}},{\"id\":\"amazon-app-runner\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS App Runner\",\"description\":\"Quick, easy, and cost-effective deployment from source code or container images.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-app-runner\"}},{\"id\":\"amazon-sagemaker\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon SageMaker\",\"description\":\"Amazon SageMaker is a fully managed machine learning service.\",\"categories\":[\"Category::AI/ML\",\"Category::AWS\",\"Category::Automation\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-sagemaker\"}},{\"id\":\"solarwinds\",\"type\":\"integration\",\"attributes\":{\"title\":\"SolarWinds\",\"description\":\"Ingest alerts from SolarWinds Orion into your Datadog Event Stream.\",\"categories\":[\"Category::Event Management\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=solarwinds\"}},{\"id\":\"azure-apimanagement\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure API Management\",\"description\":\"Track key Azure API Management metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-apimanagement\"}},{\"id\":\"dbt-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"dbt Cloud\",\"description\":\"Pull stats on runs, job performance, and more from your dbt Cloud account.\",\"categories\":[\"Category::Cloud\",\"Category::Developer Tools\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=dbt-cloud\"}},{\"id\":\"fastly\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fastly\",\"description\":\"View key Fastly metrics in context with the rest of your Datadog metrics.\",\"categories\":[\"Category::Caching\",\"Category::Content Delivery Network\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=fastly\"}},{\"id\":\"io-connect-services-observability-fasttrack\",\"type\":\"integration\",\"attributes\":{\"title\":\"Observability FastTrack\",\"description\":\"Services to implement Datadog's observability capabilities on cloud or on-premises.\",\"categories\":[\"Category::AWS\",\"Category::Azure\",\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Marketplace\",\"Category::Oracle\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/io-connect-services-observability-fasttrack/overview\"}},{\"id\":\"vsceptre-limited-datadog-professional-service-by-vsceptre\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Professional Services by Vsceptre\",\"description\":\"Datadog professional services by Vsceptre\",\"categories\":[\"Category::Automation\",\"Category::Collaboration\",\"Category::Configuration & Deployment\",\"Category::Cost Management\",\"Category::Event Management\",\"Category::Marketplace\",\"Offering::Professional Service\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/vsceptre-limited-datadog-professional-service-by-vsceptre/overview\"}},{\"id\":\"amazon-kinesis\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Kinesis\",\"description\":\"Amazon Kinesis is a fully managed, cloud-based service for real-time processing of large, distributed data streams.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-kinesis\"}},{\"id\":\"oci-ebs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Oracle E-Business Suite\",\"description\":\"Oracle (OCI) E-Business Suite (EBS) is a suite of integrated business applications.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-ebs\"}},{\"id\":\"go-runtime-metrics-v2\",\"type\":\"integration\",\"attributes\":{\"title\":\"Go Runtime Metrics v2\",\"description\":\"Collect runtime metrics from your Go applications.\",\"categories\":[\"Category::Languages\",\"Category::Metrics\",\"Category::Tracing\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=go-runtime-metrics-v2\"}},{\"id\":\"snmp-f5\",\"type\":\"integration\",\"attributes\":{\"title\":\"F5 Networks\",\"description\":\"Collect SNMP metrics from your F5 network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-f5\"}},{\"id\":\"google-app-engine\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google App Engine\",\"description\":\"Google App Engine: Platform as a Service by Google.\\nMonitor your app running in the cloud.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Google Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-app-engine\"}},{\"id\":\"krakend\",\"type\":\"integration\",\"attributes\":{\"title\":\"KrakenD\",\"description\":\"Monitor KrakenD gateway performance by collecting key metrics and logs for full visibility.\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Category::Orchestration\",\"Offering::Integration\",\"Queried Data Type::Logs\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=krakend\"}},{\"id\":\"arangodb\",\"type\":\"integration\",\"attributes\":{\"title\":\"ArangoDB\",\"description\":\"Track metrics for your ArangoDB configuration.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=arangodb\"}},{\"id\":\"azure-analysisservices\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Analysis Services\",\"description\":\"Track key Azure Analysis Services metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-analysisservices\"}},{\"id\":\"azure-backup-vault\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Backup Vault\",\"description\":\"Use the Azure Backup vault integration to track backup and restore health events run with your backup vaults.\",\"categories\":[\"Category::Azure\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-backup-vault\"}},{\"id\":\"oci-vpn\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI VPN\",\"description\":\"OCI VPN securely extends your on-prem network to Oracle Cloud through an encrypted Virtual Private Network connection.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-vpn\"}},{\"id\":\"azure-appserviceenvironment\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure App Service Environment\",\"description\":\"Track key Azure App Service Environment metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-appserviceenvironment\"}},{\"id\":\"azure-automation\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Automation\",\"description\":\"Track key Azure Automation metrics.\",\"categories\":[\"Category::Automation\",\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-automation\"}},{\"id\":\"aerospike-enterprise\",\"type\":\"integration\",\"attributes\":{\"title\":\"Aerospike Enterprise\",\"description\":\"Collect key health and performance metrics from Aerospike clusters\",\"categories\":[\"Category::AI/ML\",\"Category::Caching\",\"Category::Data Stores\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=aerospike-enterprise\"}},{\"id\":\"azure-sql-managed-instance\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure SQL Managed Instance\",\"description\":\"Use the SQL Managed Instance integration to track the utilization and activity of your SQL Managed Instance databases.\",\"categories\":[\"Category::Azure\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-sql-managed-instance\"}},{\"id\":\"azure-blob-storage\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Blob Storage\",\"description\":\"Track key Azure Blob Storage metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-blob-storage\"}},{\"id\":\"dotnet\",\"type\":\"integration\",\"attributes\":{\"title\":\".NET Runtime Metrics\",\"description\":\"Collect metrics, traces, and logs from your .NET applications.\",\"categories\":[\"Category::Languages\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=dotnet\"}},{\"id\":\"slack\",\"type\":\"integration\",\"attributes\":{\"title\":\"Slack\",\"description\":\"Slack is a hosted, fully-searchable communication platform that brings all of your team's communication into one place.\",\"categories\":[\"Category::Collaboration\",\"Category::Notifications\",\"Category::Security\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=slack\"}},{\"id\":\"nextcloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nextcloud\",\"description\":\"Track overall statistics from your Nextcloud instance\",\"categories\":[\"Category::Collaboration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nextcloud\"}},{\"id\":\"chatwork\",\"type\":\"integration\",\"attributes\":{\"title\":\"ChatWork\",\"description\":\"ChatWork is a communication platform designed for companies and teams.\",\"categories\":[\"Category::Collaboration\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=chatwork\"}},{\"id\":\"securityhq-managed-cloud-siem\",\"type\":\"integration\",\"attributes\":{\"title\":\"Managed Datadog Cloud SIEM by SecurityHQ\",\"description\":\"Stay ahead of threats with SecurityHQ\u2019s MDR for Datadog Cloud SIEM.\",\"categories\":[\"Category::AWS\",\"Category::Azure\",\"Category::Event Management\",\"Category::Google Cloud\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Professional Service\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/securityhq-managed-cloud-siem/overview\"}},{\"id\":\"oci-container-instances\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Container Instances\",\"description\":\"OCI Container Instances provide serverless container environments without the need for infrastructure management.\",\"categories\":[\"Category::Cloud\",\"Category::Containers\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-container-instances\"}},{\"id\":\"google-cloud-apis\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud APIs\",\"description\":\"Google Cloud APIs allow you to access Google Cloud Platform products from your code.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Metrics\",\"Offering::Integration\",\"Queried Data Type::Metrics\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-apis\"}},{\"id\":\"product-analytics-bigquery\",\"type\":\"integration\",\"attributes\":{\"title\":\"BigQuery for Product Analytics\",\"description\":\"Export user data from BigQuery to GCS and sync it to a Datadog reference table for segmentation in Product Analytics.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=product-analytics-bigquery\"}},{\"id\":\"dingtalk\",\"type\":\"integration\",\"attributes\":{\"title\":\"DingTalk\",\"description\":\"DingTalk is a free and all-in-one enterprise communication and collaboration platform\",\"categories\":[\"Category::Collaboration\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=dingtalk\"}},{\"id\":\"azure-containerservice\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Container Service\",\"description\":\"Track key Azure Container Service metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Containers\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-containerservice\"}},{\"id\":\"vercel-ai-sdk\",\"type\":\"integration\",\"attributes\":{\"title\":\"Vercel AI SDK\",\"description\":\"Use the Vercel AI SDK integration to monitor, troubleshoot, and evaluate your applications that use the Vercel AI SDK.\",\"categories\":[\"Category::AI/ML\",\"Offering::Integration\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=vercel-ai-sdk\"}},{\"id\":\"rum-ios\",\"type\":\"integration\",\"attributes\":{\"title\":\"iOS\",\"description\":\"Monitor iOS applications and generate metrics using Datadog RUM\",\"categories\":[\"Category::Metrics\",\"Category::Mobile\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::iOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-ios\"}},{\"id\":\"akamai-zero-trust\",\"type\":\"integration\",\"attributes\":{\"title\":\"Akamai Zero Trust\",\"description\":\"Integrate with Akamai SIA and EAA products\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=akamai-zero-trust\"}},{\"id\":\"scamalytics\",\"type\":\"integration\",\"attributes\":{\"title\":\"Scamalytics\",\"description\":\"Enrich logs with Scamalytics Threat Intelligence to identify risk and intent signals\",\"categories\":[\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Queried Data Type::Logs\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=scamalytics\"}},{\"id\":\"airbyte\",\"type\":\"integration\",\"attributes\":{\"title\":\"Airbyte\",\"description\":\"Monitor the state of your Airbyte deployment.\",\"categories\":[\"Category::AI/ML\",\"Category::Data Stores\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=airbyte\"}},{\"id\":\"amazon-auto-scaling\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Auto Scaling\",\"description\":\"Launch and terminate EC2 instances based on user-defined policies.\",\"categories\":[\"Category::AWS\",\"Category::Automation\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-auto-scaling\"}},{\"id\":\"rapdev-cisco-class-based-qos\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco Quality of Service (QOS)\",\"description\":\"Monitor the network traffic using Cisco class-based Quality of Service\",\"categories\":[\"Category::Marketplace\",\"Category::Metrics\",\"Category::Network\",\"Category::SNMP\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-cisco-class-based-qos/overview\"}},{\"id\":\"gnatsd\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gnatsd\",\"description\":\"Monitor gnatsd cluster with Datadog.\",\"categories\":[\"Category::Message Queues\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gnatsd\"}},{\"id\":\"google-cloud-armor\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Armor\",\"description\":\"See Google Cloud Armor metrics, events, and logs in Datadog\",\"categories\":[\"Category::Google Cloud\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-armor\"}},{\"id\":\"guarddog\",\"type\":\"integration\",\"attributes\":{\"title\":\"GuardDog\",\"description\":\"Gain insights into GuardDog logs.\",\"categories\":[\"Category::Developer Tools\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=guarddog\"}},{\"id\":\"mparticle\",\"type\":\"integration\",\"attributes\":{\"title\":\"mParticle\",\"description\":\"mParticle is an end to end data platform built for mobile and native apps across all devices.\",\"categories\":[\"Category::Mobile\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mparticle\"}},{\"id\":\"google-cloud-artifactregistry\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Artifact Registry\",\"description\":\"Artifact Registry lets you centrally store artifacts and build dependencies\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Metrics\",\"Offering::Integration\",\"Queried Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-artifactregistry\"}},{\"id\":\"puppet\",\"type\":\"integration\",\"attributes\":{\"title\":\"Puppet\",\"description\":\"Puppet is IT automation software that helps system administrators manage infrastructure throughout its lifecycle.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=puppet\"}},{\"id\":\"azure-container-apps\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Container Apps\",\"description\":\"Track key Azure Container Apps metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Containers\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-container-apps\"}},{\"id\":\"flowdock\",\"type\":\"integration\",\"attributes\":{\"title\":\"FlowDock\",\"description\":\"FlowDock is hosted group chat and IM supporting message aggregation for companies and teams.\",\"categories\":[\"Category::Collaboration\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=flowdock\"}},{\"id\":\"bitdefender\",\"type\":\"integration\",\"attributes\":{\"title\":\"Bitdefender\",\"description\":\"Provides insights about the logs Bitdefender Agent generated.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=bitdefender\"}},{\"id\":\"amazon-security-lake\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Security Lake\",\"description\":\"Amazon Security Lake is a security data lake for aggregating and managing security log and event data.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-security-lake\"}},{\"id\":\"azure-event-hub\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Event Hub\",\"description\":\"Azure Event Hub is a large scale data stream managed service\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-event-hub\"}},{\"id\":\"go\",\"type\":\"integration\",\"attributes\":{\"title\":\"Go Legacy Runtime Metrics v1\",\"description\":\"Collect metrics, traces, and logs from your Go applications.\",\"categories\":[\"Category::Languages\",\"Category::Tracing\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=go\"}},{\"id\":\"amazon-billing\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Billing and Cost Management\",\"description\":\"AWS Billing allows you to track your AWS billing forecasts and costs.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Cost Management\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-billing\"}},{\"id\":\"java\",\"type\":\"integration\",\"attributes\":{\"title\":\"Java\",\"description\":\"Get metrics, traces, and logs from your Java Virtual Machines.\",\"categories\":[\"Category::Languages\",\"Offering::Integration\",\"Queried Data Type::Logs\",\"Queried Data Type::Metrics\",\"Queried Data Type::Traces\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=java\"}},{\"id\":\"azure-networkinterface\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Network Interface\",\"description\":\"Track key Azure Network Interface metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-networkinterface\"}},{\"id\":\"azure-containerinstances\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Container Instances\",\"description\":\"Track key Azure Container Instances metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Containers\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-containerinstances\"}},{\"id\":\"active-directory\",\"type\":\"integration\",\"attributes\":{\"title\":\"Active Directory\",\"description\":\"Collect and graph Microsoft Active Directory metrics\",\"categories\":[\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=active-directory\"}},{\"id\":\"temporal-cloud-openmetrics\",\"type\":\"integration\",\"attributes\":{\"title\":\"Temporal Cloud - OpenMetrics\",\"description\":\"Monitor your Temporal Cloud workloads with operational metrics across your Namespaces, Workflows, and Task Queues\",\"categories\":[\"Category::Cloud\",\"Category::Developer Tools\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=temporal-cloud-openmetrics\"}},{\"id\":\"versa\",\"type\":\"integration\",\"attributes\":{\"title\":\"Versa\",\"description\":\"Monitor your Versa SD-WAN environment with Datadog.\",\"categories\":[\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=versa\"}},{\"id\":\"oci-nat-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI NAT Gateway\",\"description\":\"OCI NAT Gateway ensures secure and controlled outbound internet access for your resources within a VCN.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-nat-gateway\"}},{\"id\":\"oci-gpu\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI GPU\",\"description\":\"OCI GPUs deliver on-demand, high-performance computing for AI, ML, and HPC workloads.\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Metrics\",\"Category::OS & System\",\"Category::Oracle\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-gpu\"}},{\"id\":\"google-hangouts-chat\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Chat\",\"description\":\"Google Chat\u2122 (formerly Google Hangouts Chat\u2122) helps teams using Google Workspace\u2122 to connect and collaborate.\",\"categories\":[\"Category::Collaboration\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-hangouts-chat\"}},{\"id\":\"microsoft-graph\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft Graph\",\"description\":\"Integrate with Microsoft Graph to collect security logs from Defender, Purview, Entra ID, and Sentinel\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=microsoft-graph\"}},{\"id\":\"consul-connect\",\"type\":\"integration\",\"attributes\":{\"title\":\"Consul Connect\",\"description\":\"Monitor Consul Connect Envoy sidecar proxies.\",\"categories\":[\"Category::Containers\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=consul-connect\"}},{\"id\":\"stytch\",\"type\":\"integration\",\"attributes\":{\"title\":\"Stytch\",\"description\":\"Collect and analyze your Stytch Event logs\",\"categories\":[\"Category::Alerting\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=stytch\"}},{\"id\":\"asana\",\"type\":\"integration\",\"attributes\":{\"title\":\"Asana\",\"description\":\"Explore and analyze Asana audit logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=asana\"}},{\"id\":\"cisco-duo\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco Duo\",\"description\":\"Gain insights into Cisco Duo logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cisco-duo\"}},{\"id\":\"azure-publicipaddress\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Public IP Address\",\"description\":\"Track key Azure Public IP Address metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-publicipaddress\"}},{\"id\":\"rapdev-infoblox\",\"type\":\"integration\",\"attributes\":{\"title\":\"Infoblox\",\"description\":\"Monitor the health of your Infoblox nodes and IPAM system as metrics\",\"categories\":[\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-infoblox/overview\"}},{\"id\":\"algorithmia\",\"type\":\"integration\",\"attributes\":{\"title\":\"Algorithmia\",\"description\":\"Monitor metrics for machine learning models in production\",\"categories\":[\"Category::AI/ML\",\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=algorithmia\"}},{\"id\":\"snmp-american-power-conversion\",\"type\":\"integration\",\"attributes\":{\"title\":\"American Power Conversion\",\"description\":\"Collect SNMP metrics from your American Power Conversion network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-american-power-conversion\"}},{\"id\":\"alertnow\",\"type\":\"integration\",\"attributes\":{\"title\":\"AlertNow\",\"description\":\"Sync Datadog alerts with those in AlertNow\",\"categories\":[\"Category::Alerting\",\"Category::Automation\",\"Category::Collaboration\",\"Category::Incidents\",\"Category::Mobile\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=alertnow\"}},{\"id\":\"snmp-aruba\",\"type\":\"integration\",\"attributes\":{\"title\":\"Aruba\",\"description\":\"Collect SNMP metrics from your Aruba network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-aruba\"}},{\"id\":\"azure-db-for-postgresql\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure DB for PostgreSQL\",\"description\":\"Track key Azure DB for PostgreSQL metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-db-for-postgresql\"}},{\"id\":\"rapdev-managed-datadog\",\"type\":\"integration\",\"attributes\":{\"title\":\"RapDev Managed Datadog\",\"description\":\"Leverage RapDev\u2018s Datadog engineering expertise to manage and scale your environment.\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-managed-datadog/overview\"}},{\"id\":\"apache\",\"type\":\"integration\",\"attributes\":{\"title\":\"Apache\",\"description\":\"Track requests per second, bytes served, worker threads, uptime, and more.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=apache\"}},{\"id\":\"snmp-fortinet\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fortinet\",\"description\":\"Collect SNMP metrics from your Fortinet network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-fortinet\"}},{\"id\":\"google-cloud-platform\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Platform\",\"description\":\"Google Cloud Platform is a collection of web services that together make up a cloud computing platform.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::IoT\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-platform\"}},{\"id\":\"apache-apisix\",\"type\":\"integration\",\"attributes\":{\"title\":\"Apache APISIX\",\"description\":\"Datadog-APISIX Integration\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=apache-apisix\"}},{\"id\":\"azure-load-balancer\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Load Balancer\",\"description\":\"Track key Azure Load Balancer metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-load-balancer\"}},{\"id\":\"snmp-hewlett-packard-enterprise\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hewlett-Packard Enterprise\",\"description\":\"Collect SNMP metrics from your Hewlett-Packard Enterprise network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-hewlett-packard-enterprise\"}},{\"id\":\"appgate-sdp\",\"type\":\"integration\",\"attributes\":{\"title\":\"Appgate SDP\",\"description\":\"Monitor the health and performance of Appgate SDP.\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=appgate-sdp\"}},{\"id\":\"python\",\"type\":\"integration\",\"attributes\":{\"title\":\"Python\",\"description\":\"Collect metrics, traces, and logs from your Python applications.\",\"categories\":[\"Category::Languages\",\"Category::Log Collection\",\"Category::Tracing\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=python\"}},{\"id\":\"avi-vantage\",\"type\":\"integration\",\"attributes\":{\"title\":\"Avi Vantage\",\"description\":\"Monitor the health and performance of your Avi Vantage instances.\",\"categories\":[\"Category::Cloud\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=avi-vantage\"}},{\"id\":\"celery\",\"type\":\"integration\",\"attributes\":{\"title\":\"Celery\",\"description\":\"Monitor the health and performance of Celery workers.\",\"categories\":[\"Category::Log Collection\",\"Category::Message Queues\",\"Offering::Integration\",\"Product::Data Streams Monitoring\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=celery\"}},{\"id\":\"confluent-platform\",\"type\":\"integration\",\"attributes\":{\"title\":\"Confluent Platform\",\"description\":\"Monitor Confluent Platform components.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Product::Data Streams Monitoring\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=confluent-platform\"}},{\"id\":\"anthropic-usage-and-costs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Anthropic Usage and Costs\",\"description\":\"Optimize your Anthropic usage: monitor token consumption, track your costs, and attribute usage.\",\"categories\":[\"Category::AI/ML\",\"Category::Cost Management\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=anthropic-usage-and-costs\"}},{\"id\":\"azure-iot-edge\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure IoT Edge\",\"description\":\"Monitor the health and performance of an Azure IoT Edge device and modules.\",\"categories\":[\"Category::Azure\",\"Category::IoT\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-iot-edge\"}},{\"id\":\"snmp-netapp\",\"type\":\"integration\",\"attributes\":{\"title\":\"NetApp\",\"description\":\"Collect SNMP metrics from your NetApp network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-netapp\"}},{\"id\":\"bentoml\",\"type\":\"integration\",\"attributes\":{\"title\":\"BentoML\",\"description\":\"BentoML is an open-source framework for ML model deployment. This integration collects BentoML service metrics.\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=bentoml\"}},{\"id\":\"amazon-codewhisperer\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon CodeWhisperer\",\"description\":\"Amazon CodeWhisperer is an ML-powered code recommendation service.\",\"categories\":[\"Category::AI/ML\",\"Category::AWS\",\"Category::Cloud\",\"Category::Developer Tools\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-codewhisperer\"}},{\"id\":\"azure-notificationhubs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Notification Hubs\",\"description\":\"Track key Azure Notification Hubs metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-notificationhubs\"}},{\"id\":\"cisco-secure-email-threat-defense\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco Secure Email Threat Defense\",\"description\":\"Gain insights into Cisco Secure Email Threat Defense message logs.\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cisco-secure-email-threat-defense\"}},{\"id\":\"calico\",\"type\":\"integration\",\"attributes\":{\"title\":\"calico\",\"description\":\"Calico is a networking and network security solution for containers.\",\"categories\":[\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=calico\"}},{\"id\":\"crest-data-systems-sybase-iq\",\"type\":\"integration\",\"attributes\":{\"title\":\"SAP Sybase IQ\",\"description\":\"Monitor the performance and usage of SAP Sybase IQ databases.\",\"categories\":[\"Category::Alerting\",\"Category::Data Stores\",\"Category::Marketplace\",\"Category::SAP\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-sybase-iq/overview\"}},{\"id\":\"hcp-vault\",\"type\":\"integration\",\"attributes\":{\"title\":\"HCP Vault\",\"description\":\"The HCP Vault integration provides an overview of your Vault clusters\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hcp-vault\"}},{\"id\":\"azure-queue-storage\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Queue Storage\",\"description\":\"Track key Azure Queue Storage metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-queue-storage\"}},{\"id\":\"azure-sql-database\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure SQL Database\",\"description\":\"Azure SQL Database is a relational database service based on the Microsoft SQL Server engine\",\"categories\":[\"Category::Azure\",\"Category::Caching\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-sql-database\"}},{\"id\":\"azure-active-directory\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft Entra ID\",\"description\":\"Analyze your Microsoft Entra ID activity logs\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-active-directory\"}},{\"id\":\"cassandra\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cassandra\",\"description\":\"Track cluster performance, capacity, overall health, and much more.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=cassandra\"}},{\"id\":\"datadog-operator\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Operator\",\"description\":\"Monitor the Datadog Operator\",\"categories\":[\"Category::Kubernetes\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=datadog-operator\"}},{\"id\":\"amazon-dynamodb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon DynamoDB\",\"description\":\"Amazon DynamoDB is a fast and flexible NoSQL database service\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-dynamodb\"}},{\"id\":\"ruby\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ruby\",\"description\":\"Collect metrics, traces, and logs from your Ruby applications.\",\"categories\":[\"Category::Languages\",\"Category::Log Collection\",\"Category::Tracing\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=ruby\"}},{\"id\":\"airflow\",\"type\":\"integration\",\"attributes\":{\"title\":\"Airflow\",\"description\":\"Tracks metrics related to DAGs, tasks, pools, executors, etc\",\"categories\":[\"Category::Automation\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=airflow\"}},{\"id\":\"amazon-elb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Elastic Load Balancing\",\"description\":\"Amazon ELB automatically distributes traffic across multiple EC2 instances.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-elb\"}},{\"id\":\"azure-relay\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Relay\",\"description\":\"Track key Azure Relay metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-relay\"}},{\"id\":\"delinea-privilege-manager\",\"type\":\"integration\",\"attributes\":{\"title\":\"Delinea Privilege Manager\",\"description\":\"Gain insights into Delinea Privilege Manager events.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=delinea-privilege-manager\"}},{\"id\":\"amazon-rds\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon RDS\",\"description\":\"Set up, operate, and scale relational databases in the cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-rds\"}},{\"id\":\"databricks\",\"type\":\"integration\",\"attributes\":{\"title\":\"Databricks\",\"description\":\"Monitor the reliability and cost of your Databricks environment.\",\"categories\":[\"Category::Cloud\",\"Category::Cost Management\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=databricks\"}},{\"id\":\"azure-table-storage\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Table Storage\",\"description\":\"Track key Azure Table Storage metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-table-storage\"}},{\"id\":\"hipchat\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hipchat\",\"description\":\"HipChat is hosted group chat and IM for companies and teams.\",\"categories\":[\"Category::Collaboration\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hipchat\"}},{\"id\":\"cassandra-nodetool\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cassandra Nodetool\",\"description\":\"monitor cassandra using the nodetool utility\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cassandra-nodetool\"}},{\"id\":\"microsoft-teams\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft Teams\",\"description\":\"Microsoft Teams is the chat-based workspace in Office 365 that integrates people, content, and tools.\",\"categories\":[\"Category::Collaboration\",\"Category::Network\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=microsoft-teams\"}},{\"id\":\"barracuda-secure-edge\",\"type\":\"integration\",\"attributes\":{\"title\":\"Barracuda SecureEdge\",\"description\":\"SecureEdge is a unified SASE platform that includes NGFW, zero trust and secure SD-WAN\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Queried Data Type::Logs\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=barracuda-secure-edge\"}},{\"id\":\"imperva\",\"type\":\"integration\",\"attributes\":{\"title\":\"Imperva\",\"description\":\"Imperva audit trails and WAF events\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=imperva\"}},{\"id\":\"genesys\",\"type\":\"integration\",\"attributes\":{\"title\":\"Genesys\",\"description\":\"Gain insights into Conversations Analytics Metrics and Audit logs\",\"categories\":[\"Category::Collaboration\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=genesys\"}},{\"id\":\"azure-app-services\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure App Services\",\"description\":\"Swift and easy creation of web and mobile apps for all platforms and devices.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-app-services\"}},{\"id\":\"twilio\",\"type\":\"integration\",\"attributes\":{\"title\":\"Twilio\",\"description\":\"Monitor performance issues, reduce costs, and identify security threats across all your Twilio resources.\",\"categories\":[\"Category::Cost Management\",\"Category::Event Management\",\"Category::Issue Tracking\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=twilio\"}},{\"id\":\"azure-cognitiveservices\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Cognitive Services\",\"description\":\"Track key Azure Cognitive Services metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-cognitiveservices\"}},{\"id\":\"google-cloud-tpu\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud TPU\",\"description\":\"The benefits of Tensor Processing Units via scalable, user-friendly cloud resources for ML model development.\",\"categories\":[\"Category::AI/ML\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-tpu\"}},{\"id\":\"pihole\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pi-hole\",\"description\":\"Integration to collect default Pi-hole metrics\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pihole\"}},{\"id\":\"amazon-documentdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon DocumentDB\",\"description\":\"A fully managed, highly available document database service supporting fast, scalable MongoDB workloads.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-documentdb\"}},{\"id\":\"gatekeeper\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gatekeeper\",\"description\":\"Gatekeeper integration\",\"categories\":[\"Category::Cloud\",\"Category::Compliance\",\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gatekeeper\"}},{\"id\":\"couchbase\",\"type\":\"integration\",\"attributes\":{\"title\":\"CouchBase\",\"description\":\"Track and graph your Couchbase activity and performance metrics.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=couchbase\"}},{\"id\":\"crest-data-systems-trulens-eval\",\"type\":\"integration\",\"attributes\":{\"title\":\"TruLens Eval\",\"description\":\"Monitor and gain insights into LLM application experiments\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-trulens-eval/overview\"}},{\"id\":\"fluentbit\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fluent Bit (Agent)\",\"description\":\"Collect Fluent Bit internal metrics for each running plugin.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=fluentbit\"}},{\"id\":\"aws-pricing\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Pricing\",\"description\":\"Collect AWS Pricing information for services by rate code.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Cost Management\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=aws-pricing\"}},{\"id\":\"amazon-step-functions\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Step Functions\",\"description\":\"Coordinate the components of distributed applications and microservices using visual workflows.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-step-functions\"}},{\"id\":\"have-i-been-pwned\",\"type\":\"integration\",\"attributes\":{\"title\":\"Have I Been Pwned\",\"description\":\"Gain insights into Have I Been Pwned breaches\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=have-i-been-pwned\"}},{\"id\":\"cri-o\",\"type\":\"integration\",\"attributes\":{\"title\":\"CRI-O\",\"description\":\"Track all your CRI-O metrics with Datadog\",\"categories\":[\"Category::Containers\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cri-o\"}},{\"id\":\"blue-matador\",\"type\":\"integration\",\"attributes\":{\"title\":\"Blue Matador\",\"description\":\"Blue Matador automatically sets up and dynamically maintains hundreds of alerts\",\"categories\":[\"Category::Alerting\",\"Category::Automation\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=blue-matador\"}},{\"id\":\"hugging-face-tgi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hugging Face TGI\",\"description\":\"Monitor the model serving performance and system health of your Hugging Face TGI servers.\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hugging-face-tgi\"}},{\"id\":\"argo-rollouts\",\"type\":\"integration\",\"attributes\":{\"title\":\"Argo Rollouts\",\"description\":\"Monitor the health and performance of Argo Rollouts\",\"categories\":[\"Category::Developer Tools\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=argo-rollouts\"}},{\"id\":\"rapdev-msteams\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft Teams\",\"description\":\"Monitor Microsoft Teams call quality for users and devices\",\"categories\":[\"Category::Collaboration\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-msteams/overview\"}},{\"id\":\"cisco-secure-endpoint\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco Secure Endpoint\",\"description\":\"Gain insights into Cisco Secure Endpoint Audit and Event logs.\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cisco-secure-endpoint\"}},{\"id\":\"dcgm\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nvidia DCGM Exporter\",\"description\":\"Monitors the exposed GPU metrics leveraged by the Nvidia DCGM Exporter\",\"categories\":[\"Category::AI/ML\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=dcgm\"}},{\"id\":\"cisco-secure-web-appliance\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco Secure Web Appliance\",\"description\":\"Gain insights into Web Proxy filtering and scanning activity and Layer-4 Traffic Monitor activity\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cisco-secure-web-appliance\"}},{\"id\":\"activemq\",\"type\":\"integration\",\"attributes\":{\"title\":\"ActiveMQ\",\"description\":\"Collect metrics for brokers and queues, producers and consumers, and more.\",\"categories\":[\"Category::Log Collection\",\"Category::Message Queues\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=activemq\"}},{\"id\":\"aspdotnet\",\"type\":\"integration\",\"attributes\":{\"title\":\"ASP.NET\",\"description\":\"Track your ASP.NET service metrics in real time\",\"categories\":[\"Category::Languages\",\"Category::Log Collection\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=aspdotnet\"}},{\"id\":\"nvml\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nvidia NVML\",\"description\":\"Support Nvidia GPU metrics in k8s\",\"categories\":[\"Category::AI/ML\",\"Category::Kubernetes\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nvml\"}},{\"id\":\"jmeter\",\"type\":\"integration\",\"attributes\":{\"title\":\"JMeter\",\"description\":\"A Datadog plugin for Apache JMeter\",\"categories\":[\"Category::Log Collection\",\"Category::Testing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=jmeter\"}},{\"id\":\"oci-media-streams\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Media Streams\",\"description\":\"OCI Media Streams enables real-time video streaming with low latency, supporting live and on-demand content delivery.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-media-streams\"}},{\"id\":\"azure-cosmosdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure CosmosDB\",\"description\":\"Track key Azure CosmosDB metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-cosmosdb\"}},{\"id\":\"doctor-droid-doctor-droid\",\"type\":\"integration\",\"attributes\":{\"title\":\"Doctor Droid\",\"description\":\"Automated Root Cause Analysis, On-call Intelligence & Runbook automation\",\"categories\":[\"Category::AI/ML\",\"Category::Alerting\",\"Category::Automation\",\"Category::Incidents\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/doctor-droid-doctor-droid/overview\"}},{\"id\":\"ansible\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ansible\",\"description\":\"Ansible is a powerful automation tool for apps and IT infrastructure.\",\"categories\":[\"Category::Automation\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ansible\"}},{\"id\":\"suricata\",\"type\":\"integration\",\"attributes\":{\"title\":\"suricata\",\"description\":\"Gain insights into Suricata logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=suricata\"}},{\"id\":\"okta-workflows\",\"type\":\"integration\",\"attributes\":{\"title\":\"Okta Workflows\",\"description\":\"Gain insights into Okta Workflows Events.\",\"categories\":[\"Category::Automation\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=okta-workflows\"}},{\"id\":\"bonsai\",\"type\":\"integration\",\"attributes\":{\"title\":\"Bonsai\",\"description\":\"Bonsai Managed Elasticsearch\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=bonsai\"}},{\"id\":\"tenable-io\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tenable.io\",\"description\":\"Gain insights into Tenable.io logs.\",\"categories\":[\"Category::Compliance\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tenable-io\"}},{\"id\":\"atlassian-event-logs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Atlassian Organization Audit Logs\",\"description\":\"Monitor admin activity from your organization's Atlassian Guard subscription\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=atlassian-event-logs\"}},{\"id\":\"etcd\",\"type\":\"integration\",\"attributes\":{\"title\":\"etcd\",\"description\":\"Track writes, updates, deletes, inter-node latencies, and more Etcd metrics.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Log Collection\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=etcd\"}},{\"id\":\"azure-datafactory\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Data Factory\",\"description\":\"Track key Azure Data Factory metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-datafactory\"}},{\"id\":\"duckdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"DuckDB\",\"description\":\"Integration for DuckDB\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=duckdb\"}},{\"id\":\"oci-postgresql\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI PostgreSql\",\"description\":\"OCI PostgreSQL offers a fully managed PostgreSQL database for reliable and secure data management.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-postgresql\"}},{\"id\":\"sym\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sym\",\"description\":\"Send Sym Audit Logs to Datadog\",\"categories\":[\"Category::Developer Tools\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sym\"}},{\"id\":\"dnsfilter\",\"type\":\"integration\",\"attributes\":{\"title\":\"DNSFilter\",\"description\":\"Gain insights into DNSFilter Traffic logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=dnsfilter\"}},{\"id\":\"cisco-aci\",\"type\":\"integration\",\"attributes\":{\"title\":\"CiscoACI\",\"description\":\"Track Cisco ACI performance and usage.\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cisco-aci\"}},{\"id\":\"pivotal-pks\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pivotal Container Service\",\"description\":\"Enterprise-Grade Kubernetes offering from Pivotal.\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Network\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pivotal-pks\"}},{\"id\":\"keycloak\",\"type\":\"integration\",\"attributes\":{\"title\":\"Keycloak\",\"description\":\"Gain insights into the Keycloak events\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=keycloak\"}},{\"id\":\"podman\",\"type\":\"integration\",\"attributes\":{\"title\":\"Podman\",\"description\":\"Track all your Podman containers metrics with Datadog\",\"categories\":[\"Category::Containers\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=podman\"}},{\"id\":\"elasticsearch\",\"type\":\"integration\",\"attributes\":{\"title\":\"Elasticsearch\",\"description\":\"Monitor overall cluster status down to JVM heap usage and everything in between.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Category::Tracing\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=elasticsearch\"}},{\"id\":\"oci-network-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Network Firewall\",\"description\":\"OCI Network Firewall provides scalable firewall protection with advanced security features.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-network-firewall\"}},{\"id\":\"exchange-server\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft Exchange Server\",\"description\":\"Collect and graph Microsoft Exchange Server metrics\",\"categories\":[\"Category::Log Collection\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=exchange-server\"}},{\"id\":\"tableau\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tableau\",\"description\":\"End-to-end data lineage for Tableau dashboards\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tableau\"}},{\"id\":\"amazon-memorydb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon MemoryDB\",\"description\":\"Amazon MemoryDB is a fully-managed Redis-compatible in-memory database service.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-memorydb\"}},{\"id\":\"gitea\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gitea\",\"description\":\"Track all your Gitea metrics with Datadog\",\"categories\":[\"Category::Collaboration\",\"Category::Source Control\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gitea\"}},{\"id\":\"rapdev-servicenow\",\"type\":\"integration\",\"attributes\":{\"title\":\"ServiceNow Performance Monitoring\",\"description\":\"Monitor ServiceNow instance performance and ITSM records\",\"categories\":[\"Category::Cloud\",\"Category::Incidents\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-servicenow/overview\"}},{\"id\":\"sigma-computing\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sigma Computing\",\"description\":\"End-to-end data lineage for Sigma Computing workbooks and queries\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sigma-computing\"}},{\"id\":\"hbase-master\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hbase Master\",\"description\":\"HBase master integration.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hbase-master\"}},{\"id\":\"amazon-es\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon OpenSearch Service\",\"description\":\"Amazon OpenSearch Service makes it easy to deploy and operate OpenSearch.\",\"categories\":[\"Category::AWS\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-es\"}},{\"id\":\"rapdev-spacelift\",\"type\":\"integration\",\"attributes\":{\"title\":\"Spacelift\",\"description\":\"Monitor Spacelift Stacks, Runs, Workerpools, and Usage\",\"categories\":[\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-spacelift/overview\"}},{\"id\":\"hbase-regionserver\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hbase region server\",\"description\":\"HBase regionserver integration.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hbase-regionserver\"}},{\"id\":\"snmp-arista\",\"type\":\"integration\",\"attributes\":{\"title\":\"Arista\",\"description\":\"Collect SNMP metrics from your Arista network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-arista\"}},{\"id\":\"rapdev-terraform\",\"type\":\"integration\",\"attributes\":{\"title\":\"Terraform\",\"description\":\"Monitor your terraform account and failed runs\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-terraform/overview\"}},{\"id\":\"bitwarden\",\"type\":\"integration\",\"attributes\":{\"title\":\"Bitwarden\",\"description\":\"Gain insights into the Bitwarden event logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=bitwarden\"}},{\"id\":\"ibm-was\",\"type\":\"integration\",\"attributes\":{\"title\":\"IBM WAS\",\"description\":\"IBM Websphere Application Server is a framework that hosts Java applications\",\"categories\":[\"Category::Log Collection\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ibm-was\"}},{\"id\":\"iis\",\"type\":\"integration\",\"attributes\":{\"title\":\"IIS\",\"description\":\"Track total or per-site metrics and monitor each site's up/down status.\",\"categories\":[\"Category::Log Collection\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=iis\"}},{\"id\":\"mux\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mux\",\"description\":\"Monitor Mux video performance and metrics.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mux\"}},{\"id\":\"azure-iot-hub\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure IOT Hub\",\"description\":\"A managed service ensuring reliable and secure bidirectional communication between millions of IoT devices.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::IoT\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-iot-hub\"}},{\"id\":\"iboss\",\"type\":\"integration\",\"attributes\":{\"title\":\"iboss\",\"description\":\"Gain insights into iboss platform data.\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=iboss\"}},{\"id\":\"lighthouse\",\"type\":\"integration\",\"attributes\":{\"title\":\"Lighthouse\",\"description\":\"Google Lighthouse Audit Stats\",\"categories\":[\"Category::Developer Tools\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=lighthouse\"}},{\"id\":\"fluentd\",\"type\":\"integration\",\"attributes\":{\"title\":\"FluentD\",\"description\":\"Monitor buffer queues and retry counts for each Fluentd plugin you've enabled.\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=fluentd\"}},{\"id\":\"iocs-dsi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Stripe\u00ae\",\"description\":\"Monitor revenue and transaction metrics from Stripe.\",\"categories\":[\"Category::Cloud\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/iocs-dsi/overview\"}},{\"id\":\"tidb-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"TiDB Cloud\",\"description\":\"Monitoring TiDB Cloud clusters with Datadog\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tidb-cloud\"}},{\"id\":\"fluxcd\",\"type\":\"integration\",\"attributes\":{\"title\":\"fluxcd\",\"description\":\"Fluxcd integration with openmetric v2\",\"categories\":[\"Category::Developer Tools\",\"Category::Kubernetes\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=fluxcd\"}},{\"id\":\"zoom-activity-logs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zoom Activity Logs\",\"description\":\"Consume Operation and Activity Logs from Zoom\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zoom-activity-logs\"}},{\"id\":\"azure-applicationgateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Application Gateway\",\"description\":\"Track key Azure Application Gateway metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-applicationgateway\"}},{\"id\":\"eventstore\",\"type\":\"integration\",\"attributes\":{\"title\":\"Eventstore\",\"description\":\"Collects Eventstore Metrics\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=eventstore\"}},{\"id\":\"traefik\",\"type\":\"integration\",\"attributes\":{\"title\":\"Traefik\",\"description\":\"collects traefik metrics\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=traefik\"}},{\"id\":\"postgres\",\"type\":\"integration\",\"attributes\":{\"title\":\"Postgres\",\"description\":\"Collect a wealth of database performance and health metrics.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Category::Notifications\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=postgres\"}},{\"id\":\"capistrano\",\"type\":\"integration\",\"attributes\":{\"title\":\"Capistrano\",\"description\":\"Capistrano is a Ruby DSL for running scripts on multiple servers, mainly for deploying web applications.\",\"categories\":[\"Category::Automation\",\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=capistrano\"}},{\"id\":\"godaddy\",\"type\":\"integration\",\"attributes\":{\"title\":\"GoDaddy\",\"description\":\"Gain insights and monitor GoDaddy SSL Certificates.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=godaddy\"}},{\"id\":\"chef\",\"type\":\"integration\",\"attributes\":{\"title\":\"Chef\",\"description\":\"IT infrastructure and app delivery as code for flexible and powerful control.\",\"categories\":[\"Category::Automation\",\"Category::Configuration & Deployment\",\"Category::Issue Tracking\",\"Category::Log Collection\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=chef\"}},{\"id\":\"azure-datalakeanalytics\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Data Lake Analytics\",\"description\":\"Track key Azure Data Lake Analytics metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-datalakeanalytics\"}},{\"id\":\"amazon-msk\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon MSK\",\"description\":\"Simplifies building and running applications that process streaming data.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\",\"Product::Data Streams Monitoring\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-msk\"}},{\"id\":\"google-cloud-audit-logs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Audit Logs\",\"description\":\"A preset dashboard for GCP security that is automatically enabled when GCP audit logs are sent to Datadog.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-audit-logs\"}},{\"id\":\"azure-cosmosdb-for-postgresql\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure CosmosDB for PostgreSQL\",\"description\":\"Track key Azure CosmosDB for PostgreSQL metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-cosmosdb-for-postgresql\"}},{\"id\":\"ping\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ping\",\"description\":\"Monitor connectivity to remote hosts.\",\"categories\":[\"Category::Developer Tools\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ping\"}},{\"id\":\"cloudhealth\",\"type\":\"integration\",\"attributes\":{\"title\":\"CloudHealth\",\"description\":\"CloudHealth visualizes, optimizes, and automates services and expenditures across multiple clouds\",\"categories\":[\"Category::Cloud\",\"Category::Compliance\",\"Category::Cost Management\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cloudhealth\"}},{\"id\":\"azure-db-for-mysql\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure DB for MySQL\",\"description\":\"Track key Azure DB for MySQL metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-db-for-mysql\"}},{\"id\":\"google-cloud-bigtable\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Bigtable\",\"description\":\"Google's NoSQL Big Data database service, powering core Google services like Search, Analytics, Maps, and Gmail.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-bigtable\"}},{\"id\":\"azure-keyvault\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Key Vault\",\"description\":\"Track key Azure Key Vault metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-keyvault\"}},{\"id\":\"linux-audit-logs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Linux Audit Logs\",\"description\":\"Gain insights into Linux audit logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=linux-audit-logs\"}},{\"id\":\"winkmem\",\"type\":\"integration\",\"attributes\":{\"title\":\"Windows Kernel Memory\",\"description\":\"Monitor your Windows kernel memory allocation.\",\"categories\":[\"Category::OS & System\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=winkmem\"}},{\"id\":\"azure-customerinsights\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Customer Insights\",\"description\":\"Track key Azure Customer Insights metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-customerinsights\"}},{\"id\":\"foundationdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"FoundationDB\",\"description\":\"FoundationDB integration\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=foundationdb\"}},{\"id\":\"nobl9\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nobl9\",\"description\":\"Nobl9 enables SLI collection, SLO calculation, and error budget alerts\",\"categories\":[\"Category::Metrics\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nobl9\"}},{\"id\":\"php-opcache\",\"type\":\"integration\",\"attributes\":{\"title\":\"PHP OPcache\",\"description\":\"Monitor PHP OPcache bytecode cache system.\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=php-opcache\"}},{\"id\":\"komodor\",\"type\":\"integration\",\"attributes\":{\"title\":\"Komodor Automation\",\"description\":\"Track changes across your entire K8s landscape and stack\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=komodor\"}},{\"id\":\"kubernetes\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kubernetes\",\"description\":\"Capture Pod scheduling events, track the status of your Kubelets, and much more.\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Network\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=kubernetes\"}},{\"id\":\"delinea-secret-server\",\"type\":\"integration\",\"attributes\":{\"title\":\"Delinea Secret Server\",\"description\":\"Gain insights into Delinea Secret Server logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=delinea-secret-server\"}},{\"id\":\"azure-datalakestore\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Data Lake Store\",\"description\":\"Track key Azure Data Lake Store metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-datalakestore\"}},{\"id\":\"redpeaks-sap-businessobjects\",\"type\":\"integration\",\"attributes\":{\"title\":\"SAP BusinessObjects\",\"description\":\"Monitor SAP business objects systems\",\"categories\":[\"Category::Marketplace\",\"Category::SAP\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/redpeaks-sap-businessobjects/overview\"}},{\"id\":\"gitlab-runner\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitLab Runners\",\"description\":\"Track all the metrics from your GitLab runners with Datadog.\",\"categories\":[\"Category::Collaboration\",\"Category::Issue Tracking\",\"Category::Log Collection\",\"Category::Source Control\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gitlab-runner\"}},{\"id\":\"resin\",\"type\":\"integration\",\"attributes\":{\"title\":\"Resin\",\"description\":\"Track thread pool, connection pool settings within resin\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=resin\"}},{\"id\":\"kuma\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kuma\",\"description\":\"Collect metrics and logs from Kuma, a service mesh for Kubernetes and VMs. Kuma is the community version of Kong Mesh.\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kuma\"}},{\"id\":\"cisco-sdwan\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco SD-WAN\",\"description\":\"Monitor your Cisco SD-WAN environment with Datadog.\",\"categories\":[\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cisco-sdwan\"}},{\"id\":\"ossec-security\",\"type\":\"integration\",\"attributes\":{\"title\":\"ossec-security\",\"description\":\"Gain insights into OSSEC alerts.\",\"categories\":[\"Category::Alerting\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ossec-security\"}},{\"id\":\"consul\",\"type\":\"integration\",\"attributes\":{\"title\":\"Consul\",\"description\":\"Alert on Consul health checks, see service-to-node mappings, and much more.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Log Collection\",\"Category::Network\",\"Category::Notifications\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=consul\"}},{\"id\":\"octoprint\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog OctoPrint\",\"description\":\"Monitor OctoPrint, a web interface for managing 3d printers\",\"categories\":[\"Category::Developer Tools\",\"Category::Log Collection\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=octoprint\"}},{\"id\":\"retool\",\"type\":\"integration\",\"attributes\":{\"title\":\"Retool\",\"description\":\"Retool is a fast way to build internal tools\",\"categories\":[\"Category::Developer Tools\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=retool\"}},{\"id\":\"redpeaks-services-5-days\",\"type\":\"integration\",\"attributes\":{\"title\":\"Integration Services\",\"description\":\"5 days of services to implement Redpeaks's integrations\",\"categories\":[\"Category::Marketplace\",\"Category::SAP\",\"Offering::Professional Service\",\"Supported OS::Any\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/redpeaks-services-5-days/overview\"}},{\"id\":\"snmp-dell\",\"type\":\"integration\",\"attributes\":{\"title\":\"Dell Inc.\",\"description\":\"Collect metrics from Dell devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-dell\"}},{\"id\":\"haproxy\",\"type\":\"integration\",\"attributes\":{\"title\":\"HAProxy\",\"description\":\"Monitor key metrics for requests, responses, errors, bytes served, and more.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=haproxy\"}},{\"id\":\"google-cloud-composer\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Composer\",\"description\":\"A service for scheduling and monitoring pipelines across clouds and on-premises data centers.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-composer\"}},{\"id\":\"sonatype-nexus\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sonatype Nexus\",\"description\":\"Gain insights into Sonatype Nexus analytics and instance health data.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sonatype-nexus\"}},{\"id\":\"ibm-mq\",\"type\":\"integration\",\"attributes\":{\"title\":\"IBM MQ\",\"description\":\"IBM MQ is a Message Queue\",\"categories\":[\"Category::Log Collection\",\"Category::Message Queues\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ibm-mq\"}},{\"id\":\"php-apcu\",\"type\":\"integration\",\"attributes\":{\"title\":\"PHP APCu\",\"description\":\"Monitor PHP APCu in-memory data caching.\",\"categories\":[\"Category::Caching\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=php-apcu\"}},{\"id\":\"riak-repl\",\"type\":\"integration\",\"attributes\":{\"title\":\"Riak MDC Replication\",\"description\":\"Track replication performance, capacity, and health\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=riak-repl\"}},{\"id\":\"cert-manager\",\"type\":\"integration\",\"attributes\":{\"title\":\"cert-manager\",\"description\":\"Track all your cert-manager metrics with Datadog\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cert-manager\"}},{\"id\":\"pliant\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pliant\",\"description\":\"IT Process Automation with Pliant.io\",\"categories\":[\"Category::Automation\",\"Category::Compliance\",\"Category::Notifications\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pliant\"}},{\"id\":\"pulumi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pulumi\",\"description\":\"Infrastructure as code for any cloud using your favorite programming languages\",\"categories\":[\"Category::AWS\",\"Category::Automation\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pulumi\"}},{\"id\":\"rigor\",\"type\":\"integration\",\"attributes\":{\"title\":\"Rigor\",\"description\":\"Rigor provides synthetic monitoring and optimization throughout dev lifecycle\",\"categories\":[\"Category::Testing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rigor\"}},{\"id\":\"rum-expo\",\"type\":\"integration\",\"attributes\":{\"title\":\"Expo\",\"description\":\"Monitor Expo applications and generate metrics using Datadog RUM\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Category::Mobile\",\"Category::Network\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Android\",\"Supported OS::iOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-expo\"}},{\"id\":\"microsoft-sysmon\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft Sysmon\",\"description\":\"Gain insights into Windows system activity events.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=microsoft-sysmon\"}},{\"id\":\"dotnetclr\",\"type\":\"integration\",\"attributes\":{\"title\":\".NET CLR\",\"description\":\"Visualize and monitor Dotnetclr states\",\"categories\":[\"Category::Languages\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=dotnetclr\"}},{\"id\":\"azure-dbformariadb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure DB for MariaDB\",\"description\":\"Track key Azure DB for MariaDB metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-dbformariadb\"}},{\"id\":\"hikaricp\",\"type\":\"integration\",\"attributes\":{\"title\":\"HikariCP\",\"description\":\"HikariCP integration with openmetrics v2\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hikaricp\"}},{\"id\":\"azure-eventgrid\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Event Grid\",\"description\":\"Track key Azure Event Grid metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-eventgrid\"}},{\"id\":\"azure-ai-search\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure AI Search\",\"description\":\"Use the Azure AI Search integration to track the performance and usage of Azure AI Search services.\",\"categories\":[\"Category::AI/ML\",\"Category::Azure\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-ai-search\"}},{\"id\":\"plivo\",\"type\":\"integration\",\"attributes\":{\"title\":\"Plivo\",\"description\":\"Gain insights into Plivo messages (SMS, MMS, and WhatsApp) and voice call data.\",\"categories\":[\"Category::Collaboration\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=plivo\"}},{\"id\":\"trend-micro-email-security\",\"type\":\"integration\",\"attributes\":{\"title\":\"Trend Micro Email Security\",\"description\":\"Gain insights into Trend Micro Email Security logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=trend-micro-email-security\"}},{\"id\":\"envoy\",\"type\":\"integration\",\"attributes\":{\"title\":\"Envoy\",\"description\":\"Envoy is an open source edge and service proxy\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=envoy\"}},{\"id\":\"esxi\",\"type\":\"integration\",\"attributes\":{\"title\":\"ESXi\",\"description\":\"Monitor the health of your ESXi machines and VMs\",\"categories\":[\"Category::Cloud\",\"Category::Network\",\"Category::OS & System\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=esxi\"}},{\"id\":\"sofy-sofy-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sofy\",\"description\":\"No-Code Testing for Mobile Apps\",\"categories\":[\"Category::Collaboration\",\"Category::Marketplace\",\"Category::Mobile\",\"Category::Testing\",\"Offering::Software License\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/sofy-sofy-license/overview\"}},{\"id\":\"azure-filestorage\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure File Storage\",\"description\":\"Track key Azure File Storage metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-filestorage\"}},{\"id\":\"express\",\"type\":\"integration\",\"attributes\":{\"title\":\"Express\",\"description\":\"Express is a Node.js web application framework.\",\"categories\":[\"Category::Languages\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=express\"}},{\"id\":\"rundeck\",\"type\":\"integration\",\"attributes\":{\"title\":\"Rundeck\",\"description\":\"Automate Remediation Actions using Rundeck Webhooks\",\"categories\":[\"Category::Automation\",\"Category::Incidents\",\"Category::Notifications\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rundeck\"}},{\"id\":\"hubspot-content-hub\",\"type\":\"integration\",\"attributes\":{\"title\":\"HubSpot Content Hub\",\"description\":\"Monitor HubSpot and enrich Datadog telemetry with CRM data.\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hubspot-content-hub\"}},{\"id\":\"amazon-eks\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon EKS\",\"description\":\"Amazon EKS is a managed service that makes it easy to run Kubernetes on AWS\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-eks\"}},{\"id\":\"eks-anywhere\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon EKS Anywhere\",\"description\":\"An EKS deployment option for operating Kubernetes clusters on-premises\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Containers\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=eks-anywhere\"}},{\"id\":\"infiniband\",\"type\":\"integration\",\"attributes\":{\"title\":\"InfiniBand\",\"description\":\"Collect and graph InfiniBand performance and statistics\",\"categories\":[\"Category::Network\",\"Offering::Integration\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=infiniband\"}},{\"id\":\"amazon-opensearch-serverless\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon OpenSearch Serverless\",\"description\":\"Amazon OpenSearch Serverless is a search configuration which automatically adjusts to handle versatile workloads.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-opensearch-serverless\"}},{\"id\":\"cloudera\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cloudera\",\"description\":\"Cloudera\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cloudera\"}},{\"id\":\"open-policy-agent\",\"type\":\"integration\",\"attributes\":{\"title\":\"Open Policy Agent\",\"description\":\"OPA integration\",\"categories\":[\"Category::Compliance\",\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=open-policy-agent\"}},{\"id\":\"mysql\",\"type\":\"integration\",\"attributes\":{\"title\":\"MySQL\",\"description\":\"Collect performance schema metrics, query throughput, custom metrics, and more.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mysql\"}},{\"id\":\"vercel\",\"type\":\"integration\",\"attributes\":{\"title\":\"Vercel\",\"description\":\"Monitor your serverless applications running on Vercel\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Network\",\"Category::Provisioning\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=vercel\"}},{\"id\":\"clickhouse\",\"type\":\"integration\",\"attributes\":{\"title\":\"ClickHouse\",\"description\":\"Monitor the health and performance of your ClickHouse clusters.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=clickhouse\"}},{\"id\":\"stackpulse\",\"type\":\"integration\",\"attributes\":{\"title\":\"StackPulse\",\"description\":\"Automate your alert responses and track playbook executions in your event stream\",\"categories\":[\"Category::Automation\",\"Category::Collaboration\",\"Category::Incidents\",\"Category::Notifications\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=stackpulse\"}},{\"id\":\"ably\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ably\",\"description\":\"Collect and graph Ably metrics\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ably\"}},{\"id\":\"keda\",\"type\":\"integration\",\"attributes\":{\"title\":\"KEDA\",\"description\":\"Monitor the health and performance of KEDA\",\"categories\":[\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=keda\"}},{\"id\":\"pinecone\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pinecone\",\"description\":\"Cloud based Vector Database for high-performance AI applications.\",\"categories\":[\"Category::AI/ML\",\"Category::Data Stores\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pinecone\"}},{\"id\":\"amazon-verified-access\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Verified Access\",\"description\":\"Secure application access without the need for a virtual private network (VPN).\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-verified-access\"}},{\"id\":\"snmp-chatsworth-products\",\"type\":\"integration\",\"attributes\":{\"title\":\"Chatsworth Products\",\"description\":\"Collect SNMP metrics from your Chatsworth Products network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-chatsworth-products\"}},{\"id\":\"cockroachdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"CockroachDB\",\"description\":\"Monitor the overall health and performance of CockroachDB clusters.\",\"categories\":[\"Category::Caching\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cockroachdb\"}},{\"id\":\"oci-api-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI API Gateway\",\"description\":\"OCI API Gateway can publish APIs with private endpoints.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-api-gateway\"}},{\"id\":\"flink\",\"type\":\"integration\",\"attributes\":{\"title\":\"Flink\",\"description\":\"Track metrics for your flink jobs.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=flink\"}},{\"id\":\"amazon-s3\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon S3\",\"description\":\"Amazon S3 is a highly available and scalable cloud storage service.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-s3\"}},{\"id\":\"amazon-privatelink\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon PrivateLink\",\"description\":\"Track key AWS PrivateLink metrics.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-privatelink\"}},{\"id\":\"google-drive\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Drive\",\"description\":\"Integrate Google Drive with Datadog\",\"categories\":[\"Category::Collaboration\",\"Category::Incidents\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=google-drive\"}},{\"id\":\"superwise\",\"type\":\"integration\",\"attributes\":{\"title\":\"Superwise\",\"description\":\"Model observability platform for machine learning models in production\",\"categories\":[\"Category::AI/ML\",\"Category::Incidents\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=superwise\"}},{\"id\":\"jamf-pro\",\"type\":\"integration\",\"attributes\":{\"title\":\"Jamf Pro\",\"description\":\"Gain insights into Jamf Pro events.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=jamf-pro\"}},{\"id\":\"elastic-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Elastic Cloud\",\"description\":\"Metrics monitoring for Elasticsearch services hosted by Elastic Cloud.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=elastic-cloud\"}},{\"id\":\"sanity\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sanity\",\"description\":\"Gain insights into content and project-related activities from Sanity.\",\"categories\":[\"Category::Developer Tools\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sanity\"}},{\"id\":\"trino\",\"type\":\"integration\",\"attributes\":{\"title\":\"Trino\",\"description\":\"Collects performance and usage stats on Trino clusters\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=trino\"}},{\"id\":\"twingate-inc-twingate\",\"type\":\"integration\",\"attributes\":{\"title\":\"Twingate\",\"description\":\"Easy-to-deploy Zero Trust Network Access\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/twingate-inc-twingate/overview\"}},{\"id\":\"streamnative\",\"type\":\"integration\",\"attributes\":{\"title\":\"StreamNative\",\"description\":\"Gain insights into StreamNative metrics data.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=streamnative\"}},{\"id\":\"torq\",\"type\":\"integration\",\"attributes\":{\"title\":\"Torq\",\"description\":\"No-code automation for security and operations teams\",\"categories\":[\"Category::Automation\",\"Category::Notifications\",\"Category::Orchestration\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=torq\"}},{\"id\":\"nvidia-jetson\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nvidia Jetson\",\"description\":\"Get metrics about your Nvidia Jetson board\",\"categories\":[\"Category::IoT\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nvidia-jetson\"}},{\"id\":\"vns3\",\"type\":\"integration\",\"attributes\":{\"title\":\"VNS3\",\"description\":\"Cloud network appliance for application connectivity and security.\",\"categories\":[\"Category::Cloud\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=vns3\"}},{\"id\":\"confluent-cloud-audit-logs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Confluent Cloud Audit Logs\",\"description\":\"Collect audit logs for your Confluent Cloud resources.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=confluent-cloud-audit-logs\"}},{\"id\":\"tidb\",\"type\":\"integration\",\"attributes\":{\"title\":\"TiDB\",\"description\":\"The integration for TiDB cluster\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tidb\"}},{\"id\":\"datadog-cluster-agent\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Cluster Agent\",\"description\":\"Tracks metrics of the Datadog Cluster Agent\",\"categories\":[\"Category::Containers\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=datadog-cluster-agent\"}},{\"id\":\"conviva\",\"type\":\"integration\",\"attributes\":{\"title\":\"Conviva\",\"description\":\"Collect video streaming Quality of Experience metrics from Conviva\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=conviva\"}},{\"id\":\"speedtest\",\"type\":\"integration\",\"attributes\":{\"title\":\"speedtest\",\"description\":\"Runs Speedtest results using speedtest-cli\",\"categories\":[\"Category::Developer Tools\",\"Category::Network\",\"Category::Testing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=speedtest\"}},{\"id\":\"celerdata\",\"type\":\"integration\",\"attributes\":{\"title\":\"CelerData\",\"description\":\"Gathers CelerData metrics and logs\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=celerdata\"}},{\"id\":\"rapdev-services\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Quickstart\",\"description\":\"Implementation services for the Datadog platform\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-services/overview\"}},{\"id\":\"hcp-terraform\",\"type\":\"integration\",\"attributes\":{\"title\":\"HCP Terraform\",\"description\":\"Gain visibility into your organization\u2019s HCP Terraform audit events\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Log Collection\",\"Category::Orchestration\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hcp-terraform\"}},{\"id\":\"azure-expressroute\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Express Route\",\"description\":\"Track key Azure Express Route metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-expressroute\"}},{\"id\":\"istio\",\"type\":\"integration\",\"attributes\":{\"title\":\"Istio\",\"description\":\"Collect performance schema metrics, query throughput, custom metrics, and more.\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Category::Tracing\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=istio\"}},{\"id\":\"oke\",\"type\":\"integration\",\"attributes\":{\"title\":\"Oracle Container Engine for Kubernetes\",\"description\":\"OKE is an OCI managed container orchestration service.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Kubernetes\",\"Category::Metrics\",\"Category::Oracle\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oke\"}},{\"id\":\"fly-io\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fly.io\",\"description\":\"Monitor your Fly.io apps and machines.\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::OS & System\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=fly-io\"}},{\"id\":\"oci-functions\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Functions\",\"description\":\"OCI Functions offers event-driven, serverless compute that scales automatically in a highly available environment.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-functions\"}},{\"id\":\"gearman\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gearman\",\"description\":\"Track the number of jobs queued and running - in total or by task.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gearman\"}},{\"id\":\"linkerd\",\"type\":\"integration\",\"attributes\":{\"title\":\"Linkerd\",\"description\":\"Monitor your services health with metrics from linkerd.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=linkerd\"}},{\"id\":\"fabric\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fabric\",\"description\":\"A Python library and command-line tool that simplifies SSH use for app deployment and system administration tasks.\",\"categories\":[\"Category::Orchestration\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=fabric\"}},{\"id\":\"cockroach-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cockroach Cloud\",\"description\":\"Send your Cockroach Cloud metrics to DataDog.\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cockroach-cloud\"}},{\"id\":\"kong\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kong\",\"description\":\"Track total requests, response codes, client connections, and more.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kong\"}},{\"id\":\"zenoh-router\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zenoh router\",\"description\":\"Collect network metrics from the Zenoh routers.\",\"categories\":[\"Category::IoT\",\"Category::Network\",\"Offering::Integration\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zenoh-router\"}},{\"id\":\"z-scaler\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zscaler\",\"description\":\"The Zscaler integration provides cloud security logs\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=z-scaler\"}},{\"id\":\"azure-redis-cache\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Redis Cache\",\"description\":\"Azure Redis Cache is a managed data cache for your Azure applications\",\"categories\":[\"Category::Azure\",\"Category::Caching\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-redis-cache\"}},{\"id\":\"microsoft-dns\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft DNS\",\"description\":\"Gain insights into Microsoft DNS Server audit events.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=microsoft-dns\"}},{\"id\":\"azure-hdinsight\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure HD Insight\",\"description\":\"Track key Azure HD Insight metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-hdinsight\"}},{\"id\":\"bugsnag\",\"type\":\"integration\",\"attributes\":{\"title\":\"Bugsnag\",\"description\":\"Find and fix harmful errors in your applications\",\"categories\":[\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=bugsnag\"}},{\"id\":\"catchpoint\",\"type\":\"integration\",\"attributes\":{\"title\":\"Catchpoint\",\"description\":\"Send your Catchpoint alerts to your Datadog event stream.\",\"categories\":[\"Category::Event Management\",\"Category::Issue Tracking\",\"Category::Metrics\",\"Category::Network\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=catchpoint\"}},{\"id\":\"lightbendrp\",\"type\":\"integration\",\"attributes\":{\"title\":\"LightbendRP\",\"description\":\"Monitor your Lightbend Reactive Platform applications with this Datadog integration.\",\"categories\":[\"Category::Cloud\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=lightbendrp\"}},{\"id\":\"extrahop\",\"type\":\"integration\",\"attributes\":{\"title\":\"ExtraHop\",\"description\":\"Gain insights into ExtraHop detection and investigation logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=extrahop\"}},{\"id\":\"kube-proxy\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kube Proxy\",\"description\":\"Monitor Kube Proxy with Datadog.\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kube-proxy\"}},{\"id\":\"desk\",\"type\":\"integration\",\"attributes\":{\"title\":\"Desk\",\"description\":\"Desk is a customer service application that helps companies deliver support.\",\"categories\":[\"Category::Collaboration\",\"Category::Issue Tracking\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=desk\"}},{\"id\":\"kube-scheduler\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kubernetes Scheduler\",\"description\":\"Monitors the Kubernetes Scheduler\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=kube-scheduler\"}},{\"id\":\"kubernetes-cluster-autoscaler\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kubernetes Cluster Autoscaler\",\"description\":\"Integration for Kubernetes Cluster Autoscaler\",\"categories\":[\"Category::Kubernetes\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kubernetes-cluster-autoscaler\"}},{\"id\":\"microsoft-copilot\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft Copilot\",\"description\":\"Gain insights into your Microsoft Copilot usage across your organization.\",\"categories\":[\"Category::AI/ML\",\"Category::Collaboration\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=microsoft-copilot\"}},{\"id\":\"mongodb-cost-management\",\"type\":\"integration\",\"attributes\":{\"title\":\"MongoDB Cost Management\",\"description\":\"Integrate MongoDB cost data into Datadog Cloud Costs to allocate, optimize, and report on all your costs across teams.\",\"categories\":[\"Category::Cost Management\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mongodb-cost-management\"}},{\"id\":\"gsuite\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Workspace\",\"description\":\"Import your Google Workspace audit and security logs into Datadog\",\"categories\":[\"Category::Collaboration\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gsuite\"}},{\"id\":\"ceph\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ceph\",\"description\":\"Collect per-pool performance metrics and monitor overall cluster status.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=ceph\"}},{\"id\":\"netlify\",\"type\":\"integration\",\"attributes\":{\"title\":\"Netlify\",\"description\":\"An intuitive Git-based workflow and powerful serverless platform to build, deploy, and collaborate on web apps\",\"categories\":[\"Category::Collaboration\",\"Category::Log Collection\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=netlify\"}},{\"id\":\"speedscale\",\"type\":\"integration\",\"attributes\":{\"title\":\"Speedscale\",\"description\":\"Publish traffic replay results from Speedscale into Datadog.\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Orchestration\",\"Category::Testing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=speedscale\"}},{\"id\":\"split\",\"type\":\"integration\",\"attributes\":{\"title\":\"Split\",\"description\":\"Feature Experimentation Platform for Engineering and Product Teams.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Event Management\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=split\"}},{\"id\":\"google-workspace-alert-center\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Workspace Alert Center\",\"description\":\"Import your Google Workspace Alert Center alert logs into Datadog\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=google-workspace-alert-center\"}},{\"id\":\"okta\",\"type\":\"integration\",\"attributes\":{\"title\":\"Okta\",\"description\":\"Integrate your Okta security event logs into Datadog.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=okta\"}},{\"id\":\"azure-service-bus\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Service Bus\",\"description\":\"Track key Azure Service Bus metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-service-bus\"}},{\"id\":\"squadcast\",\"type\":\"integration\",\"attributes\":{\"title\":\"Squadcast\",\"description\":\"Get notified of your Datadog alerts & take actions using Squadcast.\",\"categories\":[\"Category::Alerting\",\"Category::Collaboration\",\"Category::Incidents\",\"Category::Issue Tracking\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=squadcast\"}},{\"id\":\"moxtra\",\"type\":\"integration\",\"attributes\":{\"title\":\"Moxtra\",\"description\":\"An embeddable, multilayered cloud collaboration service that provides conversations, content and meetings on demand.\",\"categories\":[\"Category::Cloud\",\"Category::Collaboration\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=moxtra\"}},{\"id\":\"redmine\",\"type\":\"integration\",\"attributes\":{\"title\":\"Redmine\",\"description\":\"Redmine is a free & open-source, web-based project management and bug-tracking tool.\",\"categories\":[\"Category::Collaboration\",\"Category::Developer Tools\",\"Category::Issue Tracking\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=redmine\"}},{\"id\":\"aws-fargate\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon ECS on AWS Fargate\",\"description\":\"Track metrics for containers running with ECS Fargate\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Containers\",\"Category::Network\",\"Category::Orchestration\",\"Category::Provisioning\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=aws-fargate\"}},{\"id\":\"stardog\",\"type\":\"integration\",\"attributes\":{\"title\":\"Stardog\",\"description\":\"A Stardog data collector for Datadog.\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=stardog\"}},{\"id\":\"storm\",\"type\":\"integration\",\"attributes\":{\"title\":\"Storm\",\"description\":\"Apache Storm 1.x.x Topology Execution Stats\",\"categories\":[\"Category::Event Management\",\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=storm\"}},{\"id\":\"salesforce-marketing-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Salesforce Marketing Cloud\",\"description\":\"Salesforce Marketing Cloud logs events\",\"categories\":[\"Category::Cloud\",\"Category::Collaboration\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=salesforce-marketing-cloud\"}},{\"id\":\"amazon-mq\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon MQ\",\"description\":\"A managed service for Apache ActiveMQ that simplifies setting up and operating message brokers in the cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-mq\"}},{\"id\":\"azure-logic-app\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Logic App\",\"description\":\"Logic App allows developers to design workflows that articulate intent via a trigger and series of steps.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-logic-app\"}},{\"id\":\"azure-streamanalytics\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Stream Analytics\",\"description\":\"Track key Azure Stream Analytics metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-streamanalytics\"}},{\"id\":\"mac-audit-logs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mac Audit Logs\",\"description\":\"Gain insights into Mac audit logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mac-audit-logs\"}},{\"id\":\"marathon\",\"type\":\"integration\",\"attributes\":{\"title\":\"Marathon\",\"description\":\"Track application metrics: required memory and disk, instance count, and more.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=marathon\"}},{\"id\":\"gitlab\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitLab\",\"description\":\"Track all your GitLab metrics with Datadog.\",\"categories\":[\"Category::Collaboration\",\"Category::Developer Tools\",\"Category::Issue Tracking\",\"Category::Log Collection\",\"Category::Source Control\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gitlab\"}},{\"id\":\"azure-openai\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure OpenAI\",\"description\":\"Monitor, optimize, and evaluate your LLM applications using Azure OpenAI\",\"categories\":[\"Category::AI/ML\",\"Category::Azure\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-openai\"}},{\"id\":\"azure-usage-and-quotas\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Usage and Quotas\",\"description\":\"Azure Usage and Quotas allows you to keep track of your current usages and limits.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Cost Management\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-usage-and-quotas\"}},{\"id\":\"tyk\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tyk\",\"description\":\"Track requests with time statistics sliced by resp-code, api, path, oauth etc.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tyk\"}},{\"id\":\"onelogin\",\"type\":\"integration\",\"attributes\":{\"title\":\"OneLogin\",\"description\":\"Integrate with OneLogin event logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=onelogin\"}},{\"id\":\"oci-block-storage\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Block Storage\",\"description\":\"OCI Block Storage delivers high-performance, durable block storage that can be attached to any compute instance.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-block-storage\"}},{\"id\":\"auth0\",\"type\":\"integration\",\"attributes\":{\"title\":\"Auth0\",\"description\":\"View and analyze your Auth0 events\",\"categories\":[\"Category::Incidents\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=auth0\"}},{\"id\":\"go-expvar\",\"type\":\"integration\",\"attributes\":{\"title\":\"Go-Expvar\",\"description\":\"Collect expvar-instrumented metrics and memory stats from your Go service.\",\"categories\":[\"Category::Languages\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=go-expvar\"}},{\"id\":\"google-cloud-bigquery\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google BigQuery\",\"description\":\"BigQuery is Google's fully managed, petabyte scale, low cost enterprise data warehouse for analytics.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-bigquery\"}},{\"id\":\"amazon-bedrock\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Bedrock\",\"description\":\"Amazon Bedrock makes AI foundation models available through an API.\",\"categories\":[\"Category::AI/ML\",\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-bedrock\"}},{\"id\":\"gunicorn\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gunicorn\",\"description\":\"Monitor request rates and durations, log-message rates, and worker processes.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gunicorn\"}},{\"id\":\"lighttpd\",\"type\":\"integration\",\"attributes\":{\"title\":\"Lighttpd\",\"description\":\"Track uptime, bytes served, requests per second, response codes, and more.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=lighttpd\"}},{\"id\":\"crest-data-systems-netapp-eseries-santricity\",\"type\":\"integration\",\"attributes\":{\"title\":\"NetApp ESeries SANtricity\",\"description\":\"Monitors the performance and configuration of the system.\",\"categories\":[\"Category::Data Stores\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-netapp-eseries-santricity/overview\"}},{\"id\":\"network-path\",\"type\":\"integration\",\"attributes\":{\"title\":\"Network Path\",\"description\":\"Network Path integration collects traceroute data.\",\"categories\":[\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=network-path\"}},{\"id\":\"oci-database\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Database\",\"description\":\"OCI Database (Base, RAC, and Exadata) provides reliable, scalable, and secure database solutions for any application.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-database\"}},{\"id\":\"akamas\",\"type\":\"integration\",\"attributes\":{\"title\":\"Akamas\",\"description\":\"Optimize Kubernetes performance and efficiency with Akamas insights in Datadog\",\"categories\":[\"Category::Cloud\",\"Category::Cost Management\",\"Category::Incidents\",\"Category::Kubernetes\",\"Offering::Integration\",\"Queried Data Type::Events\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=akamas\"}},{\"id\":\"microsoft-fabric\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft Fabric\",\"description\":\"Use the Datadog integration to collect metrics from Azure Synapse in Microsoft Fabric.\",\"categories\":[\"Category::AI/ML\",\"Category::Azure\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=microsoft-fabric\"}},{\"id\":\"agora-analytics\",\"type\":\"integration\",\"attributes\":{\"title\":\"Agora Analytics\",\"description\":\"View Agora Analytics Collector metrics in Datadog\",\"categories\":[\"Category::Collaboration\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=agora-analytics\"}},{\"id\":\"pusher\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pusher\",\"description\":\"Get metrics from Pusher into Datadog to see and monitor app engagement.\",\"categories\":[\"Category::Message Queues\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pusher\"}},{\"id\":\"segment\",\"type\":\"integration\",\"attributes\":{\"title\":\"Segment\",\"description\":\"Collect, unify, and enrich customer data across any app or device.\",\"categories\":[\"Category::Cloud\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=segment\"}},{\"id\":\"pagerduty\",\"type\":\"integration\",\"attributes\":{\"title\":\"PagerDuty\",\"description\":\"PagerDuty adds Phone and SMS alerting to your existing monitoring tools.\",\"categories\":[\"Category::Collaboration\",\"Category::Incidents\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=pagerduty\"}},{\"id\":\"litellm\",\"type\":\"integration\",\"attributes\":{\"title\":\"LiteLLM\",\"description\":\"This integration allows for real-time collection of LiteLLM metrics for enhanced observability and monitoring.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=litellm\"}},{\"id\":\"rollbar\",\"type\":\"integration\",\"attributes\":{\"title\":\"Rollbar\",\"description\":\"Send exceptions, errors, and code deployments to your Datadog event stream.\",\"categories\":[\"Category::Issue Tracking\",\"Category::Log Collection\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rollbar\"}},{\"id\":\"sentinelone\",\"type\":\"integration\",\"attributes\":{\"title\":\"SentinelOne\",\"description\":\"Collect alerts, threats, and telemetry from SentinelOne Singularity Endpoint\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sentinelone\"}},{\"id\":\"sentry\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sentry\",\"description\":\"See Sentry exceptions in your Datadog event stream.\",\"categories\":[\"Category::Collaboration\",\"Category::Event Management\",\"Category::Issue Tracking\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sentry\"}},{\"id\":\"kafka-consumer\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kafka Consumer\",\"description\":\"Collect metrics for Kafka consumers.\",\"categories\":[\"Category::Message Queues\",\"Offering::Integration\",\"Product::Data Streams Monitoring\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=kafka-consumer\"}},{\"id\":\"uptime\",\"type\":\"integration\",\"attributes\":{\"title\":\"Uptime.com\",\"description\":\"Uptime & performance monitoring made easy\",\"categories\":[\"Category::Event Management\",\"Category::Metrics\",\"Category::Notifications\",\"Category::OS & System\",\"Category::Testing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=uptime\"}},{\"id\":\"botprise\",\"type\":\"integration\",\"attributes\":{\"title\":\"Botprise\",\"description\":\"Botprise integration to monitor generated events\",\"categories\":[\"Category::Alerting\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=botprise\"}},{\"id\":\"omlet-stack\",\"type\":\"integration\",\"attributes\":{\"title\":\"Omlet: Migration-free OpenTelemetry\",\"description\":\"Omlet helps make OTeL (OpenTelemetry) easy for organizations of all sizes.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::Orchestration\",\"Category::Tracing\",\"Offering::Professional Service\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/omlet-stack/overview\"}},{\"id\":\"spark\",\"type\":\"integration\",\"attributes\":{\"title\":\"Spark\",\"description\":\"Track failed task rates, shuffled bytes, and much more.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=spark\"}},{\"id\":\"containerd\",\"type\":\"integration\",\"attributes\":{\"title\":\"Containerd\",\"description\":\"Track all your Containerd metrics with Datadog\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=containerd\"}},{\"id\":\"container\",\"type\":\"integration\",\"attributes\":{\"title\":\"Container\",\"description\":\"Track your container metrics with Datadog\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=container\"}},{\"id\":\"oci-fastconnect\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI FastConnect\",\"description\":\"OCI FastConnect provides a dedicated, private connection between your on-premises network and Oracle Cloud.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-fastconnect\"}},{\"id\":\"oci-file-storage\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI File Storage\",\"description\":\"OCI File Storage offers scalable, secure, and fully managed file systems for applications.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-file-storage\"}},{\"id\":\"cloud-foundry\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cloud Foundry\",\"description\":\"An open-source multi-cloud platform for developers to deploy, run, and scale applications.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=cloud-foundry\"}},{\"id\":\"grpc-check\",\"type\":\"integration\",\"attributes\":{\"title\":\"gRPC Health\",\"description\":\"Monitor gRPC servers based on gRPC Health Checking Protocol\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=grpc-check\"}},{\"id\":\"snmp-check-point\",\"type\":\"integration\",\"attributes\":{\"title\":\"Check Point\",\"description\":\"Collect SNMP metrics from your Check Point network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-check-point\"}},{\"id\":\"reflectiz-reflectiz-web-exposure-platform\",\"type\":\"integration\",\"attributes\":{\"title\":\"Reflectiz Web Exposure Platform\",\"description\":\"Continuously detects, prioritizes, and validates web threats, helping to reduce security, privacy, and compliance risks\",\"categories\":[\"Category::Alerting\",\"Category::Compliance\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/reflectiz-reflectiz-web-exposure-platform/overview\"}},{\"id\":\"akeyless-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"Akeyless Gateway\",\"description\":\"Track your Akeyless Gateway key metrics.\",\"categories\":[\"Category::Kubernetes\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=akeyless-gateway\"}},{\"id\":\"openshift\",\"type\":\"integration\",\"attributes\":{\"title\":\"OpenShift\",\"description\":\"The Kubernetes platform for big ideas\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Network\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=openshift\"}},{\"id\":\"datadog-monitor-importer-by-orus-group\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Monitor Importer by Orus Group\",\"description\":\"Quickly deploy preconfigured monitors automatically with no coding required\",\"categories\":[\"Category::AWS\",\"Category::Alerting\",\"Category::Automation\",\"Category::Marketplace\",\"Offering::Professional Service\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/datadog-monitor-importer-by-orus-group/overview\"}},{\"id\":\"splunk\",\"type\":\"integration\",\"attributes\":{\"title\":\"Splunk\",\"description\":\"Capture events from Splunk and overlay them onto key metrics graphs.\",\"categories\":[\"Category::Event Management\",\"Category::Log Collection\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=splunk\"}},{\"id\":\"cortex\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cortex\",\"description\":\"Create Datadog Incidents directly from the Cortex dashboard.\",\"categories\":[\"Category::Incidents\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cortex\"}},{\"id\":\"lastpass\",\"type\":\"integration\",\"attributes\":{\"title\":\"LastPass\",\"description\":\"Gain insights into LastPass reporting logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=lastpass\"}},{\"id\":\"aimon\",\"type\":\"integration\",\"attributes\":{\"title\":\"AIMon\",\"description\":\"Real-time Hallucination, Instruction Deviation, Context Relevance, Safety, and Adversarial metrics for your AI\",\"categories\":[\"Category::AI/ML\",\"Category::Developer Tools\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=aimon\"}},{\"id\":\"hazelcast\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hazelcast\",\"description\":\"Monitor Hazelcast members and the Management Center.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hazelcast\"}},{\"id\":\"hdfs-datanode\",\"type\":\"integration\",\"attributes\":{\"title\":\"HDFS Datanode\",\"description\":\"Track cluster disk usage, volume failures, dead DataNodes, and more.\",\"categories\":[\"Category::Log Collection\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hdfs-datanode\"}},{\"id\":\"azure-virtual-network\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Virtual Network\",\"description\":\"Azure Virtual Networks enable secure network communications between many types of Azure resources\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-virtual-network\"}},{\"id\":\"azure-devops-source-code\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure DevOps Source Code\",\"description\":\"Azure DevOps is a web-based hosting service for software development projects that use the Git revision control system.\",\"categories\":[\"Category::Automation\",\"Category::Developer Tools\",\"Category::Source Control\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-devops-source-code\"}},{\"id\":\"hive\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hive\",\"description\":\"Gathers various JMX metrics from HiveServer2 and Hive MetaStore\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hive\"}},{\"id\":\"appomni-appomni\",\"type\":\"integration\",\"attributes\":{\"title\":\"AppOmni\",\"description\":\"Gain deep visibility into SaaS risk, ensure continuous monitoring, and streamline compliance with AppOmni\",\"categories\":[\"Category::Marketplace\",\"Category::Security\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/appomni-appomni/overview\"}},{\"id\":\"oci-load-balancer\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Load Balancer\",\"description\":\"OCI Load Balancer distributes incoming traffic across multiple compute instances for high reliability and availability.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-load-balancer\"}},{\"id\":\"cloudsmith\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cloudsmith\",\"description\":\"Monitor Cloudsmith usage, performance, security events, and user activity with detailed metrics and alerts\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cloudsmith\"}},{\"id\":\"redpanda\",\"type\":\"integration\",\"attributes\":{\"title\":\"Redpanda\",\"description\":\"Monitor the overall health and performance of Redpanda clusters.\",\"categories\":[\"Category::Log Collection\",\"Category::Message Queues\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=redpanda\"}},{\"id\":\"pingdom-v3\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pingdom\",\"description\":\"See Pingdom-collected uptimes, response times, and alerts in Datadog.\",\"categories\":[\"Category::Metrics\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pingdom-v3\"}},{\"id\":\"doppler-doppler\",\"type\":\"integration\",\"attributes\":{\"title\":\"Doppler\",\"description\":\"Doppler keeps secrets secure and teams productive with streamlined workflows and strong protection\",\"categories\":[\"Category::Compliance\",\"Category::Developer Tools\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/doppler-doppler/overview\"}},{\"id\":\"oci-mysql-database\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI HeatWave MySQL\",\"description\":\"OCI HeatWave MySQL enhances MySQL with in-memory query acceleration for rapid, real-time analytics.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-mysql-database\"}},{\"id\":\"contentful\",\"type\":\"integration\",\"attributes\":{\"title\":\"Contentful\",\"description\":\"Gain insights into Contentful activities related to content and other actions.\",\"categories\":[\"Category::Developer Tools\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=contentful\"}},{\"id\":\"statuspage\",\"type\":\"integration\",\"attributes\":{\"title\":\"StatusPage\",\"description\":\"StatusPage.io helps companies setup status pages with public metrics and automatic updates for customers.\",\"categories\":[\"Category::Incidents\",\"Category::Issue Tracking\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=statuspage\"}},{\"id\":\"stripe\",\"type\":\"integration\",\"attributes\":{\"title\":\"Stripe\",\"description\":\"Receive logs about event changes in your account from Stripe.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=stripe\"}},{\"id\":\"rapdev-gitlab\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitLab\",\"description\":\"Monitor your GitLab projects, applications, and instances.\",\"categories\":[\"Category::Cloud\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-gitlab/overview\"}},{\"id\":\"adaptive-shield\",\"type\":\"integration\",\"attributes\":{\"title\":\"Adaptive Shield\",\"description\":\"Track SaaS posture alerts\",\"categories\":[\"Category::Cloud\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=adaptive-shield\"}},{\"id\":\"strimzi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Strimzi\",\"description\":\"Strimzi\",\"categories\":[\"Category::Kubernetes\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=strimzi\"}},{\"id\":\"observability-pipelines\",\"type\":\"integration\",\"attributes\":{\"title\":\"Observability Pipelines\",\"description\":\"Observability Pipelines\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=observability-pipelines\"}},{\"id\":\"eversql\",\"type\":\"integration\",\"attributes\":{\"title\":\"EverSQL: Database Tuning\",\"description\":\"Automatic SQL and Database Tuning for MySQL, PostgreSQL, Aurora\",\"categories\":[\"Category::Automation\",\"Category::Data Stores\",\"Category::Developer Tools\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=eversql\"}},{\"id\":\"aws-neuron\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Inferentia and AWS Trainium Monitoring\",\"description\":\"Monitor the performance and usage of AWS Inferentia/Trainium instances and the Neuron SDK.\",\"categories\":[\"Category::AI/ML\",\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=aws-neuron\"}},{\"id\":\"aqua\",\"type\":\"integration\",\"attributes\":{\"title\":\"Aqua\",\"description\":\"Full dev-to-prod security solution for containers and cloud native applications\",\"categories\":[\"Category::Containers\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=aqua\"}},{\"id\":\"mongodb\",\"type\":\"integration\",\"attributes\":{\"title\":\"MongoDB\",\"description\":\"Track read/write performance, most-used replicas, collection metrics, and more.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mongodb\"}},{\"id\":\"php\",\"type\":\"integration\",\"attributes\":{\"title\":\"PHP\",\"description\":\"Collect metrics, traces, and logs from your PHP applications.\",\"categories\":[\"Category::Languages\",\"Category::Log Collection\",\"Category::Tracing\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=php\"}},{\"id\":\"oci-object-storage\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Object Storage\",\"description\":\"OCI Object Storage offers secure, scalable storage for unstructured data, supporting various cloud applications.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-object-storage\"}},{\"id\":\"ilert\",\"type\":\"integration\",\"attributes\":{\"title\":\"ilert\",\"description\":\"Get notified of your Datadog alerts & take actions using ilert\",\"categories\":[\"Category::Alerting\",\"Category::Collaboration\",\"Category::Incidents\",\"Category::Issue Tracking\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ilert\"}},{\"id\":\"amazon-pcs\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS PCS\",\"description\":\"AWS Parallel Computing Service (PCS) provides tools to build and manage high-performance computing (HPC) clusters.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-pcs\"}},{\"id\":\"akamai-datastream-2\",\"type\":\"integration\",\"attributes\":{\"title\":\"Akamai DataStream 2\",\"description\":\"Send your Akamai DataStream 2 logs to Datadog\",\"categories\":[\"Category::Caching\",\"Category::Content Delivery Network\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=akamai-datastream-2\"}},{\"id\":\"azure-arc\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Arc\",\"description\":\"Track key Azure Arc metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-arc\"}},{\"id\":\"node\",\"type\":\"integration\",\"attributes\":{\"title\":\"Node\",\"description\":\"Collect metrics, traces, and logs from your Node.js applications.\",\"categories\":[\"Category::Languages\",\"Category::Log Collection\",\"Category::Tracing\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=node\"}},{\"id\":\"boundary\",\"type\":\"integration\",\"attributes\":{\"title\":\"Boundary\",\"description\":\"Monitor Boundary controllers and workers.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=boundary\"}},{\"id\":\"rapdev-o365\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft 365\",\"description\":\"Monitor Office 365 application activations, usage and synthetics\",\"categories\":[\"Category::Cloud\",\"Category::Collaboration\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-o365/overview\"}},{\"id\":\"hyper-v\",\"type\":\"integration\",\"attributes\":{\"title\":\"HyperV\",\"description\":\"Monitor Microsoft's Hyper-V virtualization technology.\",\"categories\":[\"Category::Cloud\",\"Category::OS & System\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hyper-v\"}},{\"id\":\"doppler\",\"type\":\"integration\",\"attributes\":{\"title\":\"Doppler\",\"description\":\"Doppler Secrets Management\",\"categories\":[\"Category::Developer Tools\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=doppler\"}},{\"id\":\"product-analytics-redshift\",\"type\":\"integration\",\"attributes\":{\"title\":\"Redshift for Product Analytics\",\"description\":\"Export user data from Redshift to S3 and sync to Datadog for Product Analytics segmentation.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=product-analytics-redshift\"}},{\"id\":\"zoom-incident-management\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zoom Incident Management\",\"description\":\"Enable Zoom features within Datadog Incident Management\",\"categories\":[\"Category::Collaboration\",\"Category::Incidents\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zoom-incident-management\"}},{\"id\":\"oci-compute\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Compute\",\"description\":\"Oracle Cloud Infrastructure (OCI) provides flexible, high-performance, and secure compute for any workload.\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Metrics\",\"Category::OS & System\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-compute\"}},{\"id\":\"new-relic\",\"type\":\"integration\",\"attributes\":{\"title\":\"New Relic\",\"description\":\"New Relic is an application monitoring service for web and mobile applications.\",\"categories\":[\"Category::Event Management\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=new-relic\"}},{\"id\":\"linear\",\"type\":\"integration\",\"attributes\":{\"title\":\"Linear\",\"description\":\"Integrate Linear with Datadog\",\"categories\":[\"Category::Collaboration\",\"Category::Issue Tracking\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=linear\"}},{\"id\":\"hivemq\",\"type\":\"integration\",\"attributes\":{\"title\":\"HiveMQ\",\"description\":\"Monitor your HiveMQ clusters.\",\"categories\":[\"Category::IoT\",\"Category::Log Collection\",\"Category::Message Queues\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hivemq\"}},{\"id\":\"silverstripe-cms\",\"type\":\"integration\",\"attributes\":{\"title\":\"Silverstripe CMS\",\"description\":\"Monitor Silverstripe CMS content, and user activity.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=silverstripe-cms\"}},{\"id\":\"impala\",\"type\":\"integration\",\"attributes\":{\"title\":\"Impala\",\"description\":\"Monitor the health and performance of Apache Impala.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=impala\"}},{\"id\":\"dyn\",\"type\":\"integration\",\"attributes\":{\"title\":\"Dyn\",\"description\":\"Monitor your zones: QPS and updates.\",\"categories\":[\"Category::Network\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=dyn\"}},{\"id\":\"emqx\",\"type\":\"integration\",\"attributes\":{\"title\":\"EMQX\",\"description\":\"Collect performance, health data, message throughput and message latency on MQTT brokers, and more.\",\"categories\":[\"Category::IoT\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=emqx\"}},{\"id\":\"journald\",\"type\":\"integration\",\"attributes\":{\"title\":\"journald\",\"description\":\"Monitor your systemd-journald logs with Datadog.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=journald\"}},{\"id\":\"buddy\",\"type\":\"integration\",\"attributes\":{\"title\":\"Buddy\",\"description\":\"One-click delivery automation with working website previews for web developers.\",\"categories\":[\"Category::Automation\",\"Category::Developer Tools\",\"Category::Event Management\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=buddy\"}},{\"id\":\"nginx-ingress-controller\",\"type\":\"integration\",\"attributes\":{\"title\":\"nginx-ingress-controller\",\"description\":\"Monitor metrics about the NGINX ingress controller and the embedded NGINX.\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Network\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nginx-ingress-controller\"}},{\"id\":\"nvidia-nim\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nvidia NIM\",\"description\":\"NVIDIA NIM integration with Datadog enables real-time GPU observability by collecting Prometheus metrics for monitoring.\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nvidia-nim\"}},{\"id\":\"nvidia-triton\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nvidia Triton\",\"description\":\"NVIDIA Triton Inference Server is open source inference-serving software\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nvidia-triton\"}},{\"id\":\"teleport\",\"type\":\"integration\",\"attributes\":{\"title\":\"Teleport\",\"description\":\"Collect key metrics to monitor the health of your Teleport instance.\",\"categories\":[\"Category::Cloud\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=teleport\"}},{\"id\":\"anecdote\",\"type\":\"integration\",\"attributes\":{\"title\":\"Anecdote\",\"description\":\"Monitor bugs reported by your customers in your customer feedback in your DataDog dashboard.\",\"categories\":[\"Category::AI/ML\",\"Category::Event Management\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=anecdote\"}},{\"id\":\"gigamon\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gigamon\",\"description\":\"Deep observability into all application traffic across cloud, virtual, and physical infrastructure\",\"categories\":[\"Category::AWS\",\"Category::Azure\",\"Category::Containers\",\"Category::Google Cloud\",\"Category::Kubernetes\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gigamon\"}},{\"id\":\"google-cloud-pubsub\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Pubsub\",\"description\":\"A scalable, flexible, and reliable enterprise message-oriented middleware solution in Google Cloud.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Message Queues\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-pubsub\"}},{\"id\":\"amazon-ec2\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon EC2\",\"description\":\"Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides resizable computecapacity in the cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::OS & System\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-ec2\"}},{\"id\":\"wmi\",\"type\":\"integration\",\"attributes\":{\"title\":\"WMI Check\",\"description\":\"Collect and graph any WMI metrics.\",\"categories\":[\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=wmi\"}},{\"id\":\"google-kubernetes-engine\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Kubernetes Engine\",\"description\":\"A powerful cluster manager and orchestration system for running your containerized applications.\",\"categories\":[\"Category::Cloud\",\"Category::Containers\",\"Category::Google Cloud\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-kubernetes-engine\"}},{\"id\":\"amazon-efs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon EFS\",\"description\":\"Amazon EFS provides simple, scalable file storage for use with Amazon EC2 instances in the AWS Cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Category::OS & System\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-efs\"}},{\"id\":\"authzed-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"AuthZed Cloud\",\"description\":\"AuthZed Cloud is an open-core database system for creating and managing security-critical application permissions\",\"categories\":[\"Category::Cloud\",\"Category::Developer Tools\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=authzed-cloud\"}},{\"id\":\"invary\",\"type\":\"integration\",\"attributes\":{\"title\":\"Invary\",\"description\":\"Visualize the Runtime Integrity of your operating systems\",\"categories\":[\"Category::Automation\",\"Category::Log Collection\",\"Category::OS & System\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=invary\"}},{\"id\":\"php-fpm\",\"type\":\"integration\",\"attributes\":{\"title\":\"PHP FPM\",\"description\":\"Monitor process states, slow requests, and accepted requests.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=php-fpm\"}},{\"id\":\"oci-queue\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Queue\",\"description\":\"OCI Queue provides a fully managed queue service, enabling scalable, decoupled communication between applications.\",\"categories\":[\"Category::Cloud\",\"Category::Message Queues\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-queue\"}},{\"id\":\"mailgun\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mailgun\",\"description\":\"Cloud based email service that helps developers send, track, and receive emails\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mailgun\"}},{\"id\":\"amazon-event-bridge\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon EventBridge\",\"description\":\"A serverless event bus that processes events from AWS services, SaaS, and your apps in near real time.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-event-bridge\"}},{\"id\":\"maurisource-magento\",\"type\":\"integration\",\"attributes\":{\"title\":\"Magento (Adobe Commerce)\",\"description\":\"Monitor Key Metrics from Magento (Adobe Commerce) Stores.\",\"categories\":[\"Category::Cost Management\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/maurisource-magento/overview\"}},{\"id\":\"census\",\"type\":\"integration\",\"attributes\":{\"title\":\"Census\",\"description\":\"Send your Census sync metrics and events to Datadog.\",\"categories\":[\"Category::Automation\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=census\"}},{\"id\":\"squid\",\"type\":\"integration\",\"attributes\":{\"title\":\"Squid\",\"description\":\"Track metrics from your squid-cache servers with Datadog\",\"categories\":[\"Category::Caching\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=squid\"}},{\"id\":\"google-cloud-dataflow\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Dataflow\",\"description\":\"A managed service for transforming and enriching data in both real-time and historical modes.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-dataflow\"}},{\"id\":\"contrast-security-adr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Contrast Security ADR\",\"description\":\"Ingest real-time alerts from Contrast Security Application Detection and Response (ADR) platform as logs\",\"categories\":[\"Category::Alerting\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=contrast-security-adr\"}},{\"id\":\"couchdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"CouchDB\",\"description\":\"Track and graph your CouchDB activity and performance metrics.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=couchdb\"}},{\"id\":\"druid\",\"type\":\"integration\",\"attributes\":{\"title\":\"Druid\",\"description\":\"Track metrics related to queries, ingestion, and coordination.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=druid\"}},{\"id\":\"automonx-prtg-datadog-alerts\",\"type\":\"integration\",\"attributes\":{\"title\":\"Smart Notifications for PRTG\",\"description\":\"Reduce noisy PRTG Network Monitor alerts with our Smart Notifications engine\",\"categories\":[\"Category::Alerting\",\"Category::Event Management\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/automonx-prtg-datadog-alerts/overview\"}},{\"id\":\"azure-sql-elastic-pool\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure SQL Elastic Pool\",\"description\":\"Elastic pools provide a simple and cost effective solution for managing the performance of multiple databases.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-sql-elastic-pool\"}},{\"id\":\"crest-data-systems-opnsense\",\"type\":\"integration\",\"attributes\":{\"title\":\"OPNsense\",\"description\":\"Monitors forwarded logs from OPNsense\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-opnsense/overview\"}},{\"id\":\"jira\",\"type\":\"integration\",\"attributes\":{\"title\":\"Jira\",\"description\":\"Create issues in Jira and Jira Service Management.\",\"categories\":[\"Category::Collaboration\",\"Category::Developer Tools\",\"Category::Issue Tracking\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=jira\"}},{\"id\":\"cisco-umbrella-dns\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco Umbrella DNS\",\"description\":\"Visualize Cisco Umbrella DNS Proxied and DNS Traffic. Connect to Cloud SIEM.\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cisco-umbrella-dns\"}},{\"id\":\"redis-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Redis Cloud\",\"description\":\"Redis Cloud Integration\",\"categories\":[\"Category::AI/ML\",\"Category::Caching\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=redis-cloud\"}},{\"id\":\"gatling-enterprise\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gatling Enterprise\",\"description\":\"Collect load testing metrics from Gatling Enterprise\",\"categories\":[\"Category::Developer Tools\",\"Category::Testing\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gatling-enterprise\"}},{\"id\":\"ignite\",\"type\":\"integration\",\"attributes\":{\"title\":\"ignite\",\"description\":\"Collect metrics from your Ignite server.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ignite\"}},{\"id\":\"google-cloud-dataproc\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Dataproc\",\"description\":\"A managed cloud service for cost-effective operation of Apache Spark and Hadoop clusters.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-dataproc\"}},{\"id\":\"jenkins\",\"type\":\"integration\",\"attributes\":{\"title\":\"Jenkins\",\"description\":\"Jenkins is an open-source continuous integration tool written in Java.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=jenkins\"}},{\"id\":\"oracle-cloud-infrastructure\",\"type\":\"integration\",\"attributes\":{\"title\":\"Oracle Cloud Infrastructure\",\"description\":\"OCI is a collection of cloud services designed to support a range of applications in a hosted environment.\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=oracle-cloud-infrastructure\"}},{\"id\":\"trend-micro-vision-one-endpoint-security\",\"type\":\"integration\",\"attributes\":{\"title\":\"Trend Micro Vision One Endpoint Security\",\"description\":\"Gain insights into Trend Micro Vision One Endpoint Security logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=trend-micro-vision-one-endpoint-security\"}},{\"id\":\"cri\",\"type\":\"integration\",\"attributes\":{\"title\":\"CRI\",\"description\":\"Track all your CRI metrics with Datadog\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=cri\"}},{\"id\":\"proxmox\",\"type\":\"integration\",\"attributes\":{\"title\":\"Proxmox\",\"description\":\"View performance information about all of your Proxmox resources \",\"categories\":[\"Category::Cloud\",\"Category::Event Management\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Network\",\"Category::OS & System\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=proxmox\"}},{\"id\":\"oci-service-connector-hub\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Service Connector Hub\",\"description\":\"OCI Service Connector Hub connects and routes data between OCI services, streamlining cloud operations.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-service-connector-hub\"}},{\"id\":\"oci-vcn\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI VCN\",\"description\":\"OCI Virtual Cloud Network (VCN) allows you to build secure isolated cloud networks to manage and segment your resources.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-vcn\"}},{\"id\":\"oci-autonomous-database\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Autonomous AI Database\",\"description\":\"Oracle Autonomous AI Database automates database management with self-tuning, patching, and scaling.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-autonomous-database\"}},{\"id\":\"amazon-codedeploy\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS CodeDeploy\",\"description\":\"AWS CodeDeploy is a service that automates code deployment to instances in the cloud and on-premise.\",\"categories\":[\"Category::AWS\",\"Category::Automation\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-codedeploy\"}},{\"id\":\"atlassian-audit-records\",\"type\":\"integration\",\"attributes\":{\"title\":\"Jira & Confluence Audit Records\",\"description\":\"Monitor, secure, and optimize your Atlassian's Jira & Confluence environments\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=atlassian-audit-records\"}},{\"id\":\"amazon-glue\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Glue\",\"description\":\"A managed ETL service that categorizes, cleans, enriches, and moves data between different data stores.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-glue\"}},{\"id\":\"gravitee\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gravitee APIM\",\"description\":\"Collect API request metrics, logs, and gateway-level metrics from Gravitee APIM (API Management)\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gravitee\"}},{\"id\":\"snmp-cisco\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco\",\"description\":\"Collect SNMP metrics from your Cisco network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-cisco\"}},{\"id\":\"oci-service-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Service Gateway\",\"description\":\"OCI Service Gateway enables private, secure access to Oracle Cloud services within your Virtual Cloud Network (VCN).\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-service-gateway\"}},{\"id\":\"prometheus\",\"type\":\"integration\",\"attributes\":{\"title\":\"Prometheus (legacy)\",\"description\":\"Prometheus is an open source monitoring system for timeseries metric data\",\"categories\":[\"Category::Event Management\",\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=prometheus\"}},{\"id\":\"rethinkdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"RethinkDB\",\"description\":\"Collect status, performance and other metrics from a RethinkDB cluster.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rethinkdb\"}},{\"id\":\"oci-waf\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Web Application Firewall\",\"description\":\"OCI Web Application Firewall (WAF) protects your web applications from common threats with scalable, managed security.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-waf\"}},{\"id\":\"papertrail\",\"type\":\"integration\",\"attributes\":{\"title\":\"Papertrail\",\"description\":\"View, search on, and discuss Papertrail logs in your Datadog event stream.\",\"categories\":[\"Category::Event Management\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=papertrail\"}},{\"id\":\"riak\",\"type\":\"integration\",\"attributes\":{\"title\":\"Riak\",\"description\":\"Track node, vnode and ring performance metrics for RiakKV or RiakTS.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=riak\"}},{\"id\":\"crest-data-systems-microsoft-defender\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft 365 Defender\",\"description\":\"Provides details on endpoints, vulnerabilities, alerts, and incidents\",\"categories\":[\"Category::Incidents\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-microsoft-defender/overview\"}},{\"id\":\"silk\",\"type\":\"integration\",\"attributes\":{\"title\":\"Silk\",\"description\":\"Monitor Silk performance and system stats.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Provisioning\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=silk\"}},{\"id\":\"salesforce-incidents\",\"type\":\"integration\",\"attributes\":{\"title\":\"Salesforce Incidents\",\"description\":\"Create and manage Salesforce Service Cloud Incidents from Datadog alerts.\",\"categories\":[\"Category::Cloud\",\"Category::Incidents\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=salesforce-incidents\"}},{\"id\":\"forcepoint-secure-web-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"Forcepoint Secure Web Gateway\",\"description\":\"Gain insights into Forcepoint Secure Web Gateway logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=forcepoint-secure-web-gateway\"}},{\"id\":\"sumo-logic\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sumo Logic\",\"description\":\"Send logs from Sumo Logic to Datadog. Send Datadog notifications to Sumo Logic.\",\"categories\":[\"Category::Event Management\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sumo-logic\"}},{\"id\":\"robust-intelligence-ai-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"Robust Intelligence AI Firewall\",\"description\":\"Monitor AI Firewall results using Datadog\",\"categories\":[\"Category::AI/ML\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=robust-intelligence-ai-firewall\"}},{\"id\":\"google-cloud-filestore\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Filestore\",\"description\":\"A managed service providing a shared filesystem for applications requiring a filesystem interface.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-filestore\"}},{\"id\":\"gitlab-audit-events\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitLab Audit Events\",\"description\":\"Collect GitLab Audit Events, to assess risk, security, and compliance\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gitlab-audit-events\"}},{\"id\":\"fauna\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fauna\",\"description\":\"Import your Fauna query logs into Datadog.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=fauna\"}},{\"id\":\"jboss-wildfly\",\"type\":\"integration\",\"attributes\":{\"title\":\"JBoss/WildFly\",\"description\":\"Gathers various JMX metrics from JBoss and WildFly Applications\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=jboss-wildfly\"}},{\"id\":\"kafka\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kafka Broker\",\"description\":\"Collect metrics for producers and consumers, replication, max lag, and more.\",\"categories\":[\"Category::Log Collection\",\"Category::Message Queues\",\"Offering::Integration\",\"Product::Data Streams Monitoring\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=kafka\"}},{\"id\":\"crest-data-systems-datarobot\",\"type\":\"integration\",\"attributes\":{\"title\":\"DataRobot\",\"description\":\"Visualize DataRobot's data\",\"categories\":[\"Category::AI/ML\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-datarobot/overview\"}},{\"id\":\"singlestore\",\"type\":\"integration\",\"attributes\":{\"title\":\"SingleStore\",\"description\":\"Collect SingleStore metrics from leaves and aggregators.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=singlestore\"}},{\"id\":\"seagence\",\"type\":\"integration\",\"attributes\":{\"title\":\"Seagence\",\"description\":\"Realtime Defect Detection & Resolution tool that eliminates debugging.\",\"categories\":[\"Category::Alerting\",\"Category::Automation\",\"Category::Developer Tools\",\"Category::Event Management\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Supported OS::Any\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=seagence\"}},{\"id\":\"upbound-uxp\",\"type\":\"integration\",\"attributes\":{\"title\":\"Upbound UXP\",\"description\":\"Collect and graph Upbound UXP metrics\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Developer Tools\",\"Category::Kubernetes\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=upbound-uxp\"}},{\"id\":\"openvpn\",\"type\":\"integration\",\"attributes\":{\"title\":\"OpenVPN\",\"description\":\"Gain insights into OpenVPN events\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=openvpn\"}},{\"id\":\"orca-security\",\"type\":\"integration\",\"attributes\":{\"title\":\"Orca Security\",\"description\":\"Gain insights into Orca Security alert logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=orca-security\"}},{\"id\":\"cloudnatix\",\"type\":\"integration\",\"attributes\":{\"title\":\"CloudNatix\",\"description\":\"Provides automated capacity, cost, and operation optimization from CloudNatix.\",\"categories\":[\"Category::AWS\",\"Category::Azure\",\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Kubernetes\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cloudnatix\"}},{\"id\":\"warpstream\",\"type\":\"integration\",\"attributes\":{\"title\":\"WarpStream\",\"description\":\"Monitor the health and performance of your WarpStream Agents\",\"categories\":[\"Category::AWS\",\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=warpstream\"}},{\"id\":\"jfrog-platform-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"JFrog Platform Cloud\",\"description\":\"View and analyze JFrog Artifactory Cloud logs\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=jfrog-platform-cloud\"}},{\"id\":\"google-cloud-firestore\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Firestore\",\"description\":\"A flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Mobile\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-firestore\"}},{\"id\":\"google-cloud-interconnect\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Interconnect\",\"description\":\"Extends your on-premises network to Google's network through a highly available, low latency connection.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-interconnect\"}},{\"id\":\"google-cloud-iot\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud IoT\",\"description\":\"Easily and securely connect, manage, and ingest data from millions of globally dispersed devices.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::IoT\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-iot\"}},{\"id\":\"sophos-central-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sophos Central Cloud\",\"description\":\"Gain insights into Sophos Central Cloud alert and event logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sophos-central-cloud\"}},{\"id\":\"confluence\",\"type\":\"integration\",\"attributes\":{\"title\":\"Confluence\",\"description\":\"Integrate Confluence with Datadog\",\"categories\":[\"Category::Collaboration\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=confluence\"}},{\"id\":\"travis-ci\",\"type\":\"integration\",\"attributes\":{\"title\":\"Travis CI\",\"description\":\"A hosted, distributed continuous integration service used to build and test software projects hosted in GitHub.\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=travis-ci\"}},{\"id\":\"eppo\",\"type\":\"integration\",\"attributes\":{\"title\":\"Eppo\",\"description\":\"Enrich your Datadog RUM data with feature flag information from Eppo\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Event Management\",\"Offering::Integration\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=eppo\"}},{\"id\":\"google-cloud-loadbalancing\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Loadbalancing\",\"description\":\"Distributes compute resources in single or multiple regions for high availability, scaling, and efficient autoscaling.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-loadbalancing\"}},{\"id\":\"altostra\",\"type\":\"integration\",\"attributes\":{\"title\":\"Altostra\",\"description\":\"Automatically send your cloud applications logs from Altostra to Datadog\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=altostra\"}},{\"id\":\"zebrium\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zebrium RCaaS\",\"description\":\"Discover the root cause of problems directly on your dashboards\",\"categories\":[\"Category::Automation\",\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zebrium\"}},{\"id\":\"netskope\",\"type\":\"integration\",\"attributes\":{\"title\":\"Netskope\",\"description\":\"Netskope web transaction logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=netskope\"}},{\"id\":\"ambassador\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ambassador API Gateway\",\"description\":\"Ambassador is an open source, Kubernetes-native API Gateway built on Envoy\",\"categories\":[\"Category::Cloud\",\"Category::Containers\",\"Category::Kubernetes\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ambassador\"}},{\"id\":\"rapdev-backup\",\"type\":\"integration\",\"attributes\":{\"title\":\"Backup Automator\",\"description\":\"Backup your Datadog dashboards, synthetics, monitors, and notebooks\",\"categories\":[\"Category::Marketplace\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-backup/overview\"}},{\"id\":\"kameleoon\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kameleoon\",\"description\":\"Integrate Kameleoon with Datadog RUM to monitor feature deployments and releases with real-time performance data.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Event Management\",\"Offering::Integration\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kameleoon\"}},{\"id\":\"purefb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pure Storage FlashBlade\",\"description\":\"Monitor the performance and utilization of Pure Storage FlashBlade\",\"categories\":[\"Category::Data Stores\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=purefb\"}},{\"id\":\"cisco-secure-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco Secure Firewall\",\"description\":\"Gain insights into Cisco Secure Firewall logs\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cisco-secure-firewall\"}},{\"id\":\"harbor\",\"type\":\"integration\",\"attributes\":{\"title\":\"Harbor\",\"description\":\"Monitor the health of Harbor Container Registry\",\"categories\":[\"Category::Containers\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=harbor\"}},{\"id\":\"ping-one\",\"type\":\"integration\",\"attributes\":{\"title\":\"PingOne\",\"description\":\"Gain insights into PingOne logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ping-one\"}},{\"id\":\"zenduty\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zenduty\",\"description\":\"Use Zenduty as the incident response and notification partner for Datadog alerts\",\"categories\":[\"Category::Alerting\",\"Category::Collaboration\",\"Category::Incidents\",\"Category::Issue Tracking\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zenduty\"}},{\"id\":\"amixr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amixr\",\"description\":\"Developer-friendly Alert Management with a brilliant Slack integration\",\"categories\":[\"Category::Alerting\",\"Category::Automation\",\"Category::Collaboration\",\"Category::Incidents\",\"Category::Notifications\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amixr\"}},{\"id\":\"apollo\",\"type\":\"integration\",\"attributes\":{\"title\":\"Apollo\",\"description\":\"Monitor the performance of your GraphQL infrastructure\",\"categories\":[\"Category::Caching\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=apollo\"}},{\"id\":\"glusterfs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Red Hat Gluster Storage\",\"description\":\"Monitor GlusterFS cluster node, volume, and brick status metrics.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=glusterfs\"}},{\"id\":\"kubeflow\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kubeflow\",\"description\":\"Integration for Kubeflow\",\"categories\":[\"Category::AI/ML\",\"Category::Kubernetes\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kubeflow\"}},{\"id\":\"oci-goldengate\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI GoldenGate\",\"description\":\"OCI GoldenGate provides data replication, transformation, and streaming across databases\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-goldengate\"}},{\"id\":\"amazon-compute-optimizer\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Compute Optimizer\",\"description\":\"Resource configuration recommendations to help optimize your workloads effectively.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-compute-optimizer\"}},{\"id\":\"appkeeper\",\"type\":\"integration\",\"attributes\":{\"title\":\"AppKeeper\",\"description\":\"Appkeeper restarts service based on alerts from Datadog\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=appkeeper\"}},{\"id\":\"btrfs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Btrfs\",\"description\":\"Monitor usage on Btrfs volumes so you can respond before they fill up.\",\"categories\":[\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=btrfs\"}},{\"id\":\"appomni\",\"type\":\"integration\",\"attributes\":{\"title\":\"AppOmni\",\"description\":\"AppOmni prevents SaaS data breaches by securing the applications that power the enterprise.\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Collaboration\",\"Category::Compliance\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=appomni\"}},{\"id\":\"pulse\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pulse\",\"description\":\"Integrate Pulse alerts into Datadog to track Elasticsearch and OpenSearch health in your workflows\",\"categories\":[\"Category::Developer Tools\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pulse\"}},{\"id\":\"redis\",\"type\":\"integration\",\"attributes\":{\"title\":\"Redis\",\"description\":\"Track redis performance, memory use, blocked clients, evicted keys, and more.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=redis\"}},{\"id\":\"artie\",\"type\":\"integration\",\"attributes\":{\"title\":\"Artie\",\"description\":\"Artie offers real-time replication between databases and data warehouses.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=artie\"}},{\"id\":\"backstage\",\"type\":\"integration\",\"attributes\":{\"title\":\"Backstage\",\"description\":\"Embed Datadog dashboards and graphs into your Backstage instance.\",\"categories\":[\"Category::Developer Tools\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=backstage\"}},{\"id\":\"onepassword\",\"type\":\"integration\",\"attributes\":{\"title\":\"1Password\",\"description\":\"Get events for your 1Password account.\",\"categories\":[\"Category::Event Management\",\"Category::Issue Tracking\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=onepassword\"}},{\"id\":\"google-cloud-redis\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Redis\",\"description\":\"A managed in-memory data store service on scalable, secure, and highly available infrastructure.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-redis\"}},{\"id\":\"singlestoredb-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"SingleStoreDB Cloud\",\"description\":\"Send your SinglestoreDB Cloud metrics to Datadog\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=singlestoredb-cloud\"}},{\"id\":\"amazon-cloudfront\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon CloudFront\",\"description\":\"Amazon CloudFront is a global content delivery network (CDN) service that accelerates delivery of your web assets.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Content Delivery Network\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-cloudfront\"}},{\"id\":\"rum-android\",\"type\":\"integration\",\"attributes\":{\"title\":\"Android\",\"description\":\"Monitor Android applications and generate metrics using Datadog RUM\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Category::Mobile\",\"Category::Network\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Android\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-android\"}},{\"id\":\"pivotal\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pivotal\",\"description\":\"Pivotal Tracker is software as a service (SaaS) for agile project management and collaboration.\",\"categories\":[\"Category::Collaboration\",\"Category::Issue Tracking\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pivotal\"}},{\"id\":\"cloudflare\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cloudflare\",\"description\":\"Monitor your Cloudflare Web traffic, DNS queries, security threats, and more.\",\"categories\":[\"Category::Caching\",\"Category::Content Delivery Network\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=cloudflare\"}},{\"id\":\"cloudquery\",\"type\":\"integration\",\"attributes\":{\"title\":\"CloudQuery\",\"description\":\"Monitor your CloudQuery syncs\",\"categories\":[\"Category::Cost Management\",\"Category::Data Stores\",\"Category::Developer Tools\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cloudquery\"}},{\"id\":\"redis-enterprise\",\"type\":\"integration\",\"attributes\":{\"title\":\"Redis Enterprise\",\"description\":\"Redis Enterprise Datadog Integration\",\"categories\":[\"Category::AI/ML\",\"Category::Caching\",\"Category::Data Stores\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=redis-enterprise\"}},{\"id\":\"crest-data-systems-cofense-triage\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cofense Triage\",\"description\":\"Monitor Cofense Triage phishing incidents in Datadog\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-cofense-triage/overview\"}},{\"id\":\"helm\",\"type\":\"integration\",\"attributes\":{\"title\":\"Helm Check\",\"description\":\"Track your Helm deployments with Datadog\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Containers\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=helm\"}},{\"id\":\"kube-apiserver-metrics\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kubernetes API server metrics\",\"description\":\"Collect metrics from the Kubernetes APIserver\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=kube-apiserver-metrics\"}},{\"id\":\"confluent-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Confluent Cloud\",\"description\":\"Collect various Kafka metrics and related cost data from Confluent Cloud.\",\"categories\":[\"Category::Cost Management\",\"Category::Message Queues\",\"Category::Metrics\",\"Offering::Integration\",\"Product::Data Streams Monitoring\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=confluent-cloud\"}},{\"id\":\"google-cloud-router\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Router\",\"description\":\"Dynamically exchange routes between your VPC and on-premises networks using Border Gateway Protocol (BGP).\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-router\"}},{\"id\":\"ibm-db2\",\"type\":\"integration\",\"attributes\":{\"title\":\"IBM Db2\",\"description\":\"Monitor table space, buffer pool, and other metrics from your IBM Db2 database.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ibm-db2\"}},{\"id\":\"coreweave\",\"type\":\"integration\",\"attributes\":{\"title\":\"CoreWeave\",\"description\":\"Gather prometheus metrics from Coreweave\",\"categories\":[\"Category::AI/ML\",\"Category::Kubernetes\",\"Category::Metrics\",\"Category::Provisioning\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=coreweave\"}},{\"id\":\"tomcat\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tomcat\",\"description\":\"Track requests per second, bytes served, cache hits, servlet metrics, and more.\",\"categories\":[\"Category::Caching\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tomcat\"}},{\"id\":\"postmark\",\"type\":\"integration\",\"attributes\":{\"title\":\"Postmark\",\"description\":\"Gain insights into Postmark message streams activity logs.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=postmark\"}},{\"id\":\"google-cloud-security-command-center\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Security Command Center\",\"description\":\"Security Command Center is a central vulnerability and threat reporting service.\",\"categories\":[\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-security-command-center\"}},{\"id\":\"hudi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hudi\",\"description\":\"Track metrics for your Hudi configuration.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hudi\"}},{\"id\":\"zendesk\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zendesk\",\"description\":\"Monitor ticket metrics, automate alerts, and enhance security with Zendesk and Datadog.\",\"categories\":[\"Category::Event Management\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zendesk\"}},{\"id\":\"crowdstrike\",\"type\":\"integration\",\"attributes\":{\"title\":\"CrowdStrike\",\"description\":\"Collect CrowdStrike real-time detection events as Datadog logs\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=crowdstrike\"}},{\"id\":\"resend\",\"type\":\"integration\",\"attributes\":{\"title\":\"Resend\",\"description\":\"Gain insights into your Resend transactional and broadcast email delivery.\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=resend\"}},{\"id\":\"fastly-cost-management\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fastly Cost Management\",\"description\":\"Integrate Fastly billing data into Datadog Cloud Costs to allocate, optimize, and report on all your costs across teams.\",\"categories\":[\"Category::Content Delivery Network\",\"Category::Cost Management\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=fastly-cost-management\"}},{\"id\":\"google-cloud-storage\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Storage\",\"description\":\"Unified object storage for live data serving, data analytics, machine learning and data archiving.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-storage\"}},{\"id\":\"seagence-seagence\",\"type\":\"integration\",\"attributes\":{\"title\":\"seagence\",\"description\":\"Realtime Defect Detection & Resolution tool that eliminates debugging.\",\"categories\":[\"Category::Alerting\",\"Category::Automation\",\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Any\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/seagence-seagence/overview\"}},{\"id\":\"ibm-ace\",\"type\":\"integration\",\"attributes\":{\"title\":\"IBM ACE\",\"description\":\"Monitor IBM ACE resource statistics and message flows.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ibm-ace\"}},{\"id\":\"kyoto-tycoon\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kyoto Tycoon\",\"description\":\"Track get, set, and delete operations; monitor replication lag.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kyoto-tycoon\"}},{\"id\":\"downdetector\",\"type\":\"integration\",\"attributes\":{\"title\":\"Downdetector\",\"description\":\"Monitor service disruptions with real-time outage alerts from Downdetector\",\"categories\":[\"Category::Alerting\",\"Category::Incidents\",\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=downdetector\"}},{\"id\":\"google-cloud-tasks\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Tasks\",\"description\":\"A managed service for managing the execution, dispatch, and delivery of a large number of distributed tasks.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-tasks\"}},{\"id\":\"mapr\",\"type\":\"integration\",\"attributes\":{\"title\":\"MapR\",\"description\":\"Collect the monitoring metrics made available by MapR.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mapr\"}},{\"id\":\"twemproxy\",\"type\":\"integration\",\"attributes\":{\"title\":\"Twemproxy\",\"description\":\"Visualize twemproxy performance and correlate with the rest of your applications\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=twemproxy\"}},{\"id\":\"amazon-cloudtrail\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS CloudTrail\",\"description\":\"Amazon CloudTrail is a web service that records AWS API calls for your account and delivers log files to you.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-cloudtrail\"}},{\"id\":\"supply-chain-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"Supply Chain Firewall\",\"description\":\"Gain insights into your Supply Chain Firewall logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=supply-chain-firewall\"}},{\"id\":\"feed\",\"type\":\"integration\",\"attributes\":{\"title\":\"Feed\",\"description\":\"Collect RSS Feed events in Datadog\",\"categories\":[\"Category::Event Management\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=feed\"}},{\"id\":\"mesos-master\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mesos Master\",\"description\":\"Track cluster resource usage, master and slave counts, tasks statuses, and more.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Log Collection\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mesos-master\"}},{\"id\":\"emnify\",\"type\":\"integration\",\"attributes\":{\"title\":\"EMnify\",\"description\":\"Monitors and dashboard for EMnify data usage metrics\",\"categories\":[\"Category::IoT\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=emnify\"}},{\"id\":\"google-eventarc\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Eventarc\",\"description\":\"Eventarc lets you import events from Google services, SaaS, and your own apps.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=google-eventarc\"}},{\"id\":\"mesos\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mesos Slave\",\"description\":\"Track cluster resource usage, master and slave counts, tasks statuses, and more.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Log Collection\",\"Category::Network\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mesos\"}},{\"id\":\"microsoft-defender-for-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft Defender for Cloud\",\"description\":\"Monitor Microsoft Defender for Cloud\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=microsoft-defender-for-cloud\"}},{\"id\":\"fortinet-fortimanager\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fortinet FortiManager\",\"description\":\"Monitor your FortiGate Devices with Network Device Monitoring and Logs\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=fortinet-fortimanager\"}},{\"id\":\"cfssl\",\"type\":\"integration\",\"attributes\":{\"title\":\"cfssl\",\"description\":\"Monitor a cfssl instance\",\"categories\":[\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cfssl\"}},{\"id\":\"varnish\",\"type\":\"integration\",\"attributes\":{\"title\":\"Varnish\",\"description\":\"Track client and backend connections, cache misses and evictions, and more.\",\"categories\":[\"Category::Caching\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=varnish\"}},{\"id\":\"vault\",\"type\":\"integration\",\"attributes\":{\"title\":\"Vault\",\"description\":\"Vault is a secrets management service application\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=vault\"}},{\"id\":\"weaviate\",\"type\":\"integration\",\"attributes\":{\"title\":\"Weaviate\",\"description\":\"Open-source vector database for building AI-powered applications.\",\"categories\":[\"Category::AI/ML\",\"Category::Data Stores\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=weaviate\"}},{\"id\":\"vantage\",\"type\":\"integration\",\"attributes\":{\"title\":\"Vantage\",\"description\":\"Import your Datadog costs and track them alongside other infrastructure spending\",\"categories\":[\"Category::Cloud\",\"Category::Cost Management\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=vantage\"}},{\"id\":\"event-viewer\",\"type\":\"integration\",\"attributes\":{\"title\":\"Windows Event Log\",\"description\":\"Send Windows events to your Datadog event stream.\",\"categories\":[\"Category::Log Collection\",\"Category::OS & System\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=event-viewer\"}},{\"id\":\"webassembly-observe-sdk\",\"type\":\"integration\",\"attributes\":{\"title\":\"WebAssembly Observe SDK\",\"description\":\"Extract traces from WebAssembly (wasm) code from any runtime\",\"categories\":[\"Category::Developer Tools\",\"Category::Languages\",\"Category::Tracing\",\"Offering::Integration\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=webassembly-observe-sdk\"}},{\"id\":\"servicenow\",\"type\":\"integration\",\"attributes\":{\"title\":\"ServiceNow\",\"description\":\"Create ServiceNow incidents, populate CMDB CIs, enrich Datadog with CMDB data, and monitor ServiceNow performance.\",\"categories\":[\"Category::Alerting\",\"Category::Collaboration\",\"Category::Event Management\",\"Category::Incidents\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Network\",\"Category::Notifications\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=servicenow\"}},{\"id\":\"configcat\",\"type\":\"integration\",\"attributes\":{\"title\":\"ConfigCat\",\"description\":\"Setting change events tracked by Datadog\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Notifications\",\"Category::Provisioning\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=configcat\"}},{\"id\":\"karpenter\",\"type\":\"integration\",\"attributes\":{\"title\":\"Karpenter\",\"description\":\"Monitor the health and performance of Karpenter\",\"categories\":[\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Provisioning\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=karpenter\"}},{\"id\":\"nagios\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nagios\",\"description\":\"Send Nagios service flaps, host alerts, and more to your Datadog event stream.\",\"categories\":[\"Category::Log Collection\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nagios\"}},{\"id\":\"yarn\",\"type\":\"integration\",\"attributes\":{\"title\":\"Yarn\",\"description\":\"Collect cluster-wide health metrics and track application progress.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=yarn\"}},{\"id\":\"amazon-health\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Health\",\"description\":\"AWS Health provides ongoing visibility into the state of your AWS resources, services, and accounts.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-health\"}},{\"id\":\"llm-proxy-byok\",\"type\":\"integration\",\"attributes\":{\"title\":\"AI Gateway for LLM Observability\",\"description\":\"Power LLM evaluations using your own AI gateway and API keys.\",\"categories\":[\"Category::AI/ML\",\"Category::Configuration & Deployment\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=llm-proxy-byok\"}},{\"id\":\"cyral\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cyral\",\"description\":\"Collect runtime metrics from a Cyral instance monitoring MySQL.\",\"categories\":[\"Category::Data Stores\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cyral\"}},{\"id\":\"contrastsecurity\",\"type\":\"integration\",\"attributes\":{\"title\":\"Contrast Security\",\"description\":\"See attacks and vulnerabilities on Datadog from Contrast Security\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=contrastsecurity\"}},{\"id\":\"convox\",\"type\":\"integration\",\"attributes\":{\"title\":\"Convox\",\"description\":\"Convox is an open-source PaaS designed for total privacy and zero upkeep.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Containers\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=convox\"}},{\"id\":\"anthropic\",\"type\":\"integration\",\"attributes\":{\"title\":\"Anthropic\",\"description\":\"Monitor, optimize, and evaluate your LLM applications using Anthropic\",\"categories\":[\"Category::AI/ML\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=anthropic\"}},{\"id\":\"openldap\",\"type\":\"integration\",\"attributes\":{\"title\":\"OpenLDAP\",\"description\":\"Collect metrics from your OpenLDAP server using the cn=monitor backend\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=openldap\"}},{\"id\":\"devcycle\",\"type\":\"integration\",\"attributes\":{\"title\":\"DevCycle\",\"description\":\"Feature Flags That Work the Way You Code\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=devcycle\"}},{\"id\":\"circleci-circleci\",\"type\":\"integration\",\"attributes\":{\"title\":\"CircleCI\",\"description\":\"Use CircleCI to build, test, and deploy your code\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Marketplace\",\"Category::Orchestration\",\"Category::Provisioning\",\"Category::Source Control\",\"Category::Testing\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/circleci-circleci/overview\"}},{\"id\":\"ping-federate\",\"type\":\"integration\",\"attributes\":{\"title\":\"PingFederate\",\"description\":\"Gain insights into PingFederate logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ping-federate\"}},{\"id\":\"avm-consulting-insightflow\",\"type\":\"integration\",\"attributes\":{\"title\":\"InsightFlow - Bootstrap Datadog\",\"description\":\"Unleash the Full Power of Datadog with InsightFlow, AVM's Professional Services\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/avm-consulting-insightflow/overview\"}},{\"id\":\"greenhouse\",\"type\":\"integration\",\"attributes\":{\"title\":\"Greenhouse\",\"description\":\"Gain insights into your organization's hiring activities by monitoring Greenhouse audit logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=greenhouse\"}},{\"id\":\"datazoom\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datazoom\",\"description\":\"View Datazoom Collector data in Log Explorer.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=datazoom\"}},{\"id\":\"kube-controller-manager\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kubernetes Controller Manager\",\"description\":\"Monitors the Kubernetes Controller Manager\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=kube-controller-manager\"}},{\"id\":\"langchain\",\"type\":\"integration\",\"attributes\":{\"title\":\"LangChain\",\"description\":\"Optimize LangChain usage: prompt sampling and performance and cost metrics.\",\"categories\":[\"Category::AI/ML\",\"Category::Cost Management\",\"Category::Developer Tools\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=langchain\"}},{\"id\":\"iam-access-analyzer\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS IAM Access Analyzer\",\"description\":\"AWS IAM Access Analyzer identifies publicly accessible resources\",\"categories\":[\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=iam-access-analyzer\"}},{\"id\":\"discord\",\"type\":\"integration\",\"attributes\":{\"title\":\"Discord\",\"description\":\"Send notifications to Discord using webhooks.\",\"categories\":[\"Category::Collaboration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=discord\"}},{\"id\":\"snowflake-web\",\"type\":\"integration\",\"attributes\":{\"title\":\"Snowflake\",\"description\":\"Identify long running and unsuccessful queries, reduce costs, find security threats, and monitor Snowpark workloads.\",\"categories\":[\"Category::AI/ML\",\"Category::Cost Management\",\"Category::Data Stores\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snowflake-web\"}},{\"id\":\"oracle\",\"type\":\"integration\",\"attributes\":{\"title\":\"Oracle Database\",\"description\":\"Oracle relational database system designed for enterprise grid computing\",\"categories\":[\"Category::Data Stores\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oracle\"}},{\"id\":\"neo4j\",\"type\":\"integration\",\"attributes\":{\"title\":\"Neo4j\",\"description\":\"Gathers Neo4j metrics\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=neo4j\"}},{\"id\":\"crest-data-systems-dell-emc-isilon\",\"type\":\"integration\",\"attributes\":{\"title\":\"Dell EMC Isilon\",\"description\":\"Monitor the performance and usage of Dell EMC Isilon cluster\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-dell-emc-isilon/overview\"}},{\"id\":\"wazuh\",\"type\":\"integration\",\"attributes\":{\"title\":\"Wazuh\",\"description\":\"Gain insights into the Wazuh alerts.\",\"categories\":[\"Category::Alerting\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=wazuh\"}},{\"id\":\"rapdev-commvault-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Commvault Cloud\",\"description\":\"Monitor your Commvault Jobs, Library statuses, Alerts and Events\",\"categories\":[\"Category::Cloud\",\"Category::Compliance\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-commvault-cloud/overview\"}},{\"id\":\"drata-integration\",\"type\":\"integration\",\"attributes\":{\"title\":\"Drata\",\"description\":\"Ingest Datadog compliance information to Drata\",\"categories\":[\"Category::Compliance\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=drata-integration\"}},{\"id\":\"concourse-ci\",\"type\":\"integration\",\"attributes\":{\"title\":\"Concourse-CI\",\"description\":\"Collect metrics emitted from Concourse CI.\",\"categories\":[\"Category::Automation\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=concourse-ci\"}},{\"id\":\"vscode\",\"type\":\"integration\",\"attributes\":{\"title\":\"Visual Studio Code\",\"description\":\"Datadog Extension for VS Code\",\"categories\":[\"Category::Developer Tools\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=vscode\"}},{\"id\":\"exim\",\"type\":\"integration\",\"attributes\":{\"title\":\"Exim\",\"description\":\"Exim integration to monitor mail queues\",\"categories\":[\"Category::Message Queues\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=exim\"}},{\"id\":\"postfix\",\"type\":\"integration\",\"attributes\":{\"title\":\"Postfix\",\"description\":\"Monitor the size of all your Postfix queues.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=postfix\"}},{\"id\":\"perfectscale\",\"type\":\"integration\",\"attributes\":{\"title\":\"PerfectScale by DoiT\",\"description\":\"Receive PerfectScale by DoiT optimization alerts directly in Datadog to expedite remediations.\",\"categories\":[\"Category::Alerting\",\"Category::Automation\",\"Category::Cloud\",\"Category::Cost Management\",\"Category::Issue Tracking\",\"Category::Kubernetes\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=perfectscale\"}},{\"id\":\"launchdarkly\",\"type\":\"integration\",\"attributes\":{\"title\":\"LaunchDarkly\",\"description\":\"Control feature releases and infrastructure changes with confidence.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=launchdarkly\"}},{\"id\":\"oom-kill\",\"type\":\"integration\",\"attributes\":{\"title\":\"OOM Kill\",\"description\":\"Track process OOM kills by the system or cgroup.\",\"categories\":[\"Category::Event Management\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oom-kill\"}},{\"id\":\"mapreduce\",\"type\":\"integration\",\"attributes\":{\"title\":\"Map Reduce\",\"description\":\"Monitor the status and duration of map and reduce tasks.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mapreduce\"}},{\"id\":\"azure-site-recovery\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Site Recovery\",\"description\":\"Use the Azure Site Recovery integration to track the health and status of your protected items\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-site-recovery\"}},{\"id\":\"otel\",\"type\":\"integration\",\"attributes\":{\"title\":\"OpenTelemetry\",\"description\":\"Get telemetry data from the OpenTelemetry Collector\",\"categories\":[\"Category::Developer Tools\",\"Category::Network\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=otel\"}},{\"id\":\"federatorai\",\"type\":\"integration\",\"attributes\":{\"title\":\"Federator.ai\",\"description\":\"Integration with ProphetStor Federator.ai to optimize application performance\",\"categories\":[\"Category::AI/ML\",\"Category::Containers\",\"Category::Kubernetes\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=federatorai\"}},{\"id\":\"marklogic\",\"type\":\"integration\",\"attributes\":{\"title\":\"MarkLogic\",\"description\":\"Tracks metrics about MarkLogic databases, forests, hosts and servers.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=marklogic\"}},{\"id\":\"falco\",\"type\":\"integration\",\"attributes\":{\"title\":\"Falco\",\"description\":\"Gain insights into Falco alert logs and metrics\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=falco\"}},{\"id\":\"neoload\",\"type\":\"integration\",\"attributes\":{\"title\":\"NeoLoad\",\"description\":\"Monitor and Analyze NeoLoad Performance Test Results\",\"categories\":[\"Category::Notifications\",\"Category::Testing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=neoload\"}},{\"id\":\"ngrok\",\"type\":\"integration\",\"attributes\":{\"title\":\"ngrok\",\"description\":\"Visualize valuable application insights with ngrok HTTP events\",\"categories\":[\"Category::Cloud\",\"Category::Developer Tools\",\"Offering::Integration\",\"Queried Data Type::Logs\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ngrok\"}},{\"id\":\"crest-data-systems-cyberark-identity\",\"type\":\"integration\",\"attributes\":{\"title\":\"CyberArk Identity\",\"description\":\"Monitor CyberArk Identity's MFA, Device, User, and Application information.\",\"categories\":[\"Category::Event Management\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-cyberark-identity/overview\"}},{\"id\":\"openstack-controller\",\"type\":\"integration\",\"attributes\":{\"title\":\"OpenStack Controller\",\"description\":\"Track hypervisor and VM-level resource usage, plus Neutron metrics.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=openstack-controller\"}},{\"id\":\"isdown\",\"type\":\"integration\",\"attributes\":{\"title\":\"IsDown\",\"description\":\"IsDown helps companies monitor all third-party status pages in one place\",\"categories\":[\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=isdown\"}},{\"id\":\"pan-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"Palo Alto Networks Firewall\",\"description\":\"Palo Alto Networks Firewall log events\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::OS & System\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pan-firewall\"}},{\"id\":\"crest-data-systems-square\",\"type\":\"integration\",\"attributes\":{\"title\":\"Square\",\"description\":\"Monitor and visualize Square events\",\"categories\":[\"Category::Cloud\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-square/overview\"}},{\"id\":\"memcached\",\"type\":\"integration\",\"attributes\":{\"title\":\"Memcache\",\"description\":\"Track memory use, hits, misses, evictions, fill percent, and more.\",\"categories\":[\"Category::Caching\",\"Category::Log Collection\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=memcached\"}},{\"id\":\"powerdns\",\"type\":\"integration\",\"attributes\":{\"title\":\"Power DNS Recursor\",\"description\":\"Keep an eye on strange traffic to and from your PowerDNS recursors.\",\"categories\":[\"Category::Caching\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=powerdns\"}},{\"id\":\"forcepoint-security-service-edge\",\"type\":\"integration\",\"attributes\":{\"title\":\"Forcepoint Security Service Edge\",\"description\":\"Gain insights into Forcepoint Security Service Edge logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=forcepoint-security-service-edge\"}},{\"id\":\"ocient\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ocient\",\"description\":\"Collect performance metrics and monitor overall Ocient cluster health\",\"categories\":[\"Category::Data Stores\",\"Category::OS & System\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ocient\"}},{\"id\":\"avmconsulting-workday\",\"type\":\"integration\",\"attributes\":{\"title\":\"Workday\",\"description\":\"Provides observability into the status of Workday integrations\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/avmconsulting-workday/overview\"}},{\"id\":\"insightfinder\",\"type\":\"integration\",\"attributes\":{\"title\":\"InsightFinder\",\"description\":\"Integrate data from DataDog for analysis by InsightFinder\",\"categories\":[\"Category::AI/ML\",\"Category::Alerting\",\"Category::Automation\",\"Category::Incidents\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=insightfinder\"}},{\"id\":\"milvus\",\"type\":\"integration\",\"attributes\":{\"title\":\"Milvus\",\"description\":\"Monitor the performance and usage of your Milvus deployments.\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=milvus\"}},{\"id\":\"presto\",\"type\":\"integration\",\"attributes\":{\"title\":\"Presto\",\"description\":\"Collects performance and usage stats on PrestoSQL cluster, and much more.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=presto\"}},{\"id\":\"opsgenie\",\"type\":\"integration\",\"attributes\":{\"title\":\"Opsgenie\",\"description\":\"Forward alerts to Opsgenie and Jira Service Management Operations from Datadog.\",\"categories\":[\"Category::Collaboration\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=opsgenie\"}},{\"id\":\"proxysql\",\"type\":\"integration\",\"attributes\":{\"title\":\"ProxySQL\",\"description\":\"Collect your ProxySQL metrics and logs.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=proxysql\"}},{\"id\":\"crest-data-systems-dell-emc-ecs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Dell EMC ECS\",\"description\":\"Visulize Dell EMC ECS host's nodes, disks, VDCs, namespaces, and more.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-dell-emc-ecs/overview\"}},{\"id\":\"akamai\",\"type\":\"integration\",\"attributes\":{\"title\":\"Akamai Application Security\",\"description\":\"Integrate with Akamai to get event logs for Akamai products\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=akamai\"}},{\"id\":\"jamf-protect\",\"type\":\"integration\",\"attributes\":{\"title\":\"Jamf Protect\",\"description\":\"Endpoint security and mobile threat defense (MTD) for Mac and mobile devices.\",\"categories\":[\"Category::Security\",\"Offering::Integration\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=jamf-protect\"}},{\"id\":\"crest-data-systems-airtable\",\"type\":\"integration\",\"attributes\":{\"title\":\"Airtable\",\"description\":\"Collect and visualize audit logs from Airtable\",\"categories\":[\"Category::AI/ML\",\"Category::Automation\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-airtable/overview\"}},{\"id\":\"google-cloud-alloydb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud AlloyDB\",\"description\":\"AlloyDB is a fully-managed, PostgreSQL-compatible database for demanding transactional workloads.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-alloydb\"}},{\"id\":\"nginx\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nginx\",\"description\":\"Monitor connection and request metrics. Get more metrics with NGINX Plus.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=nginx\"}},{\"id\":\"openmetrics\",\"type\":\"integration\",\"attributes\":{\"title\":\"OpenMetrics\",\"description\":\"OpenMetrics is an open standard for exposing metric data\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=openmetrics\"}},{\"id\":\"openstack\",\"type\":\"integration\",\"attributes\":{\"title\":\"OpenStack (legacy)\",\"description\":\"Track hypervisor and VM-level resource usage, plus Neutron metrics.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Network\",\"Category::Provisioning\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=openstack\"}},{\"id\":\"abnormal-security\",\"type\":\"integration\",\"attributes\":{\"title\":\"Abnormal Security\",\"description\":\"Integrate with Abnormal Security to get threats, cases, and audit logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=abnormal-security\"}},{\"id\":\"nomad\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nomad\",\"description\":\"Easily Schedule and Deploy Applications at Any Scale\",\"categories\":[\"Category::Configuration & Deployment\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nomad\"}},{\"id\":\"ns1\",\"type\":\"integration\",\"attributes\":{\"title\":\"ns1\",\"description\":\"A Datadog integration to collect NS1 metrics\",\"categories\":[\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ns1\"}},{\"id\":\"sedai-sedai-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sedai\",\"description\":\"An autonomous platform to intelligently manage your cloud applications\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Cost Management\",\"Category::Marketplace\",\"Category::Notifications\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/sedai-sedai-license/overview\"}},{\"id\":\"quarkus\",\"type\":\"integration\",\"attributes\":{\"title\":\"Quarkus\",\"description\":\"Monitor your application built with Quarkus.\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=quarkus\"}},{\"id\":\"ssh\",\"type\":\"integration\",\"attributes\":{\"title\":\"SSH\",\"description\":\"Monitor SSH connectivity and SFTP latency.\",\"categories\":[\"Category::Developer Tools\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ssh\"}},{\"id\":\"azure-vm-scale-set\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure VM Scale Set\",\"description\":\"Virtual machine scale sets are an Azure resource for deploying, managing, and auto-scaling a group of identical VMs.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-vm-scale-set\"}},{\"id\":\"akamai-mpulse\",\"type\":\"integration\",\"attributes\":{\"title\":\"Akamai mPulse\",\"description\":\"Akamai mPulse integration\",\"categories\":[\"Category::Cloud\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=akamai-mpulse\"}},{\"id\":\"bigpanda\",\"type\":\"integration\",\"attributes\":{\"title\":\"BigPanda\",\"description\":\"Connect to BigPanda\",\"categories\":[\"Category::AI/ML\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=bigpanda\"}},{\"id\":\"statsig-statsig\",\"type\":\"integration\",\"attributes\":{\"title\":\"Statsig\",\"description\":\"Build, measure and ship features your customers love, faster\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/statsig-statsig/overview\"}},{\"id\":\"pdh\",\"type\":\"integration\",\"attributes\":{\"title\":\"PDH Check\",\"description\":\"Collect and graph any Windows Performance Counters.\",\"categories\":[\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pdh\"}},{\"id\":\"pgbouncer\",\"type\":\"integration\",\"attributes\":{\"title\":\"PGBouncer\",\"description\":\"Track connection pool metrics and monitor traffic to and from your application.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pgbouncer\"}},{\"id\":\"google-cloud-private-service-connect\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Private Service Connect\",\"description\":\"Monitor your Private Service Connections\",\"categories\":[\"Category::Google Cloud\",\"Category::Metrics\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-private-service-connect\"}},{\"id\":\"sosivio\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sosivio\",\"description\":\"Get Answers. Not Data. Predictive Troubleshooting for Kubernetes.\",\"categories\":[\"Category::Alerting\",\"Category::Containers\",\"Category::Kubernetes\",\"Category::Network\",\"Category::Notifications\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sosivio\"}},{\"id\":\"snmp-juniper\",\"type\":\"integration\",\"attributes\":{\"title\":\"Juniper Networks\",\"description\":\"Collect metrics from your Juniper network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=snmp-juniper\"}},{\"id\":\"ray\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ray\",\"description\":\"Monitor the health and performance of Ray\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ray\"}},{\"id\":\"incident-io\",\"type\":\"integration\",\"attributes\":{\"title\":\"incident.io\",\"description\":\"Gain insights into incident activities from incident.io.\",\"categories\":[\"Category::Incidents\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=incident-io\"}},{\"id\":\"mergify-oauth\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mergify\",\"description\":\"Monitor your Mergify merge queue stats\",\"categories\":[\"Category::Developer Tools\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mergify-oauth\"}},{\"id\":\"iocs-dmi4apm\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mule\u00ae Integration for APM\",\"description\":\"Datadog MuleSoft Integration for Application Performance Monitoring\",\"categories\":[\"Category::Cloud\",\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/iocs-dmi4apm/overview\"}},{\"id\":\"pulsar\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pulsar\",\"description\":\"Monitor your Pulsar clusters.\",\"categories\":[\"Category::Log Collection\",\"Category::Message Queues\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=pulsar\"}},{\"id\":\"statsig-rum\",\"type\":\"integration\",\"attributes\":{\"title\":\"Statsig - RUM\",\"description\":\"Enrich your Datadog RUM data with feature gate information from Statsig\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Event Management\",\"Offering::Integration\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=statsig-rum\"}},{\"id\":\"puma\",\"type\":\"integration\",\"attributes\":{\"title\":\"Puma\",\"description\":\"A fast, concurrent web server for Ruby and Rack\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=puma\"}},{\"id\":\"octopus-deploy\",\"type\":\"integration\",\"attributes\":{\"title\":\"Octopus Deploy\",\"description\":\"Monitor your Octopus Deploy Server.\",\"categories\":[\"Category::Configuration & Deployment\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=octopus-deploy\"}},{\"id\":\"google-cloud-datastore\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Datastore\",\"description\":\"Cloud Datastore is a highly-scalable NoSQL database for your web and mobile applications.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Mobile\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-datastore\"}},{\"id\":\"reboot-required\",\"type\":\"integration\",\"attributes\":{\"title\":\"Reboot Required\",\"description\":\"Monitor systems that require a reboot after software update\",\"categories\":[\"Category::Developer Tools\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=reboot-required\"}},{\"id\":\"amazon-machine-learning\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Machine Learning\",\"description\":\"Enables developers of all levels to use machine learning technology with ease.\",\"categories\":[\"Category::AI/ML\",\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-machine-learning\"}},{\"id\":\"google-cloud-firebase\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Firebase\",\"description\":\"Firebase is a mobile platform that helps you quickly develop apps.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Mobile\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-firebase\"}},{\"id\":\"redis-sentinel\",\"type\":\"integration\",\"attributes\":{\"title\":\"Redis Sentinel\",\"description\":\"Redis Sentinel provides high availability for Redis.\",\"categories\":[\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=redis-sentinel\"}},{\"id\":\"riak-cs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Riak CS\",\"description\":\"Track the rate and mean latency of GETs, PUTs, DELETEs, and other operations.\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=riak-cs\"}},{\"id\":\"crest-data-systems-datadog-professional-services\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Professional Services by Crest Data\",\"description\":\"Tailored solutions ensure Datadog aligns with your business objectives\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-datadog-professional-services/overview\"}},{\"id\":\"oci-internet-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Internet Gateway\",\"description\":\"Internet Gateway is an optional gateway you can add to a VCN to enable direct connectivity to the internet.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-internet-gateway\"}},{\"id\":\"mimecast\",\"type\":\"integration\",\"attributes\":{\"title\":\"mimecast\",\"description\":\"Gain insights into mimecast logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mimecast\"}},{\"id\":\"sap-hana\",\"type\":\"integration\",\"attributes\":{\"title\":\"SAP HANA\",\"description\":\"Monitor memory, network, volume, and other metrics from your SAP HANA system.\",\"categories\":[\"Category::Data Stores\",\"Category::SAP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sap-hana\"}},{\"id\":\"notion\",\"type\":\"integration\",\"attributes\":{\"title\":\"Notion\",\"description\":\"Monitor your Notion workspace events and customize detections in Datadog\",\"categories\":[\"Category::Collaboration\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Any\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=notion\"}},{\"id\":\"rum-javascript\",\"type\":\"integration\",\"attributes\":{\"title\":\"JavaScript\",\"description\":\"Monitor JavaScript applications and generate metrics using Datadog RUM\",\"categories\":[\"Category::Languages\",\"Category::Metrics\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Any\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-javascript\"}},{\"id\":\"amazon-web-services\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Web Services\",\"description\":\"Amazon Web Services (AWS) is a collection of web services that together make up a cloud computing platform.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Event Management\",\"Category::IoT\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-web-services\"}},{\"id\":\"filebeat\",\"type\":\"integration\",\"attributes\":{\"title\":\"Filebeat\",\"description\":\"Lightweight Shipper for Logs\",\"categories\":[\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=filebeat\"}},{\"id\":\"wayfinder\",\"type\":\"integration\",\"attributes\":{\"title\":\"Wayfinder\",\"description\":\"Send Wayfinder metrics to Datadog\",\"categories\":[\"Category::Containers\",\"Category::Developer Tools\",\"Category::Kubernetes\",\"Category::Metrics\",\"Category::Orchestration\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=wayfinder\"}},{\"id\":\"sidekiq\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sidekiq\",\"description\":\"Track metrics about your Sidekiq jobs, queues, and batches.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sidekiq\"}},{\"id\":\"cursor\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cursor\",\"description\":\"Datadog Extension for Cursor\",\"categories\":[\"Category::Developer Tools\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cursor\"}},{\"id\":\"tcp-queue-length\",\"type\":\"integration\",\"attributes\":{\"title\":\"TCP Queue Length\",\"description\":\"Track the size of the TCP buffers with Datadog.\",\"categories\":[\"Category::Developer Tools\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tcp-queue-length\"}},{\"id\":\"rum-react\",\"type\":\"integration\",\"attributes\":{\"title\":\"React\",\"description\":\"Monitor React applications and generate metrics using Datadog RUM\",\"categories\":[\"Category::Metrics\",\"Category::Network\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Android\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::iOS\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-react\"}},{\"id\":\"rapdev-commvault\",\"type\":\"integration\",\"attributes\":{\"title\":\"Commvault\",\"description\":\"Monitor your Commvault Jobs, Library statuses, Alerts and Events\",\"categories\":[\"Category::Cloud\",\"Category::Compliance\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-commvault/overview\"}},{\"id\":\"oceanbase-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"OceanBase Cloud\",\"description\":\"Monitoring OceanBase Cloud clusters with Datadog\",\"categories\":[\"Category::Cloud\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oceanbase-cloud\"}},{\"id\":\"google-meet-incident-management\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Meet Incident Management\",\"description\":\"Enable Google Meet features within Datadog Incident Management\",\"categories\":[\"Category::Collaboration\",\"Category::Incidents\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=google-meet-incident-management\"}},{\"id\":\"slurm\",\"type\":\"integration\",\"attributes\":{\"title\":\"Slurm\",\"description\":\"Monitor Slurm cluster resource usage, job statuses, and system performance.\",\"categories\":[\"Category::Automation\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=slurm\"}},{\"id\":\"sedai\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sedai\",\"description\":\"An autonomous platform to intelligently manage your cloud applications\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Cost Management\",\"Category::Notifications\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sedai\"}},{\"id\":\"systemd\",\"type\":\"integration\",\"attributes\":{\"title\":\"Systemd\",\"description\":\"Get metrics about Systemd and units managed by Systemd\",\"categories\":[\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=systemd\"}},{\"id\":\"syncthing\",\"type\":\"integration\",\"attributes\":{\"title\":\"Syncthing\",\"description\":\"Track overall statistics from your Syncthing instance\",\"categories\":[\"Category::Collaboration\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=syncthing\"}},{\"id\":\"snmp\",\"type\":\"integration\",\"attributes\":{\"title\":\"SNMP\",\"description\":\"Collect SNMP metrics from your network devices.\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Category::SNMP\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=snmp\"}},{\"id\":\"terraform\",\"type\":\"integration\",\"attributes\":{\"title\":\"Terraform\",\"description\":\"Manage your Datadog account using Terraform\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=terraform\"}},{\"id\":\"sigsci\",\"type\":\"integration\",\"attributes\":{\"title\":\"Signal Sciences\",\"description\":\"Collect data from Signal Sciences to see anomalies and block attacks\",\"categories\":[\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sigsci\"}},{\"id\":\"purefa\",\"type\":\"integration\",\"attributes\":{\"title\":\"Pure Storage FlashArray\",\"description\":\"Monitor the performance and utilization of Pure Storage FlashArrays\",\"categories\":[\"Category::Data Stores\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=purefa\"}},{\"id\":\"github-costs\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitHub Costs\",\"description\":\"Integrate GitHub Costs with Datadog Cloud Cost to optimize and report on repository and enterprise usage costs.\",\"categories\":[\"Category::Collaboration\",\"Category::Cost Management\",\"Category::Developer Tools\",\"Category::Source Control\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=github-costs\"}},{\"id\":\"rapdev-veeam\",\"type\":\"integration\",\"attributes\":{\"title\":\"Veeam Backup\",\"description\":\"Monitor Veeam Enterprise Summary Reports, System & Backup Job Sessions\",\"categories\":[\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-veeam/overview\"}},{\"id\":\"sleuth\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sleuth\",\"description\":\"Sleuth Deployment Tracker\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Issue Tracking\",\"Category::Orchestration\",\"Category::Source Control\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sleuth\"}},{\"id\":\"sonarqube\",\"type\":\"integration\",\"attributes\":{\"title\":\"SonarQube\",\"description\":\"Monitor your SonarQube server and projects.\",\"categories\":[\"Category::Automation\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sonarqube\"}},{\"id\":\"kubevirt\",\"type\":\"integration\",\"attributes\":{\"title\":\"KubeVirt\",\"description\":\"Collect key metrics to monitor the health of your KubeVirt components.\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=kubevirt\"}},{\"id\":\"microsoft-365\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft 365 Audit Logs\",\"description\":\"View Microsoft 365 audit logs from Microsoft Teams, Power BI, Azure Active Directory, Dynamics 365, and more\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=microsoft-365\"}},{\"id\":\"sql-server\",\"type\":\"integration\",\"attributes\":{\"title\":\"SQL Server\",\"description\":\"Collect important SQL Server performance and health metrics.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sql-server\"}},{\"id\":\"sortdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sortdb\",\"description\":\"Datadog support for sortdb monitoring\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sortdb\"}},{\"id\":\"solr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Solr\",\"description\":\"Monitor request rate, handler errors, cache misses and evictions, and more.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=solr\"}},{\"id\":\"supabase\",\"type\":\"integration\",\"attributes\":{\"title\":\"Supabase\",\"description\":\"Monitor the health and performance of Supabase\",\"categories\":[\"Category::Kubernetes\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=supabase\"}},{\"id\":\"sqreen\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sqreen\",\"description\":\"Review AppSec activity detected by Sqreen\",\"categories\":[\"Category::Incidents\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sqreen\"}},{\"id\":\"statsig\",\"type\":\"integration\",\"attributes\":{\"title\":\"Statsig\",\"description\":\"Monitor Statsig changes in Datadog\",\"categories\":[\"Category::Configuration & Deployment\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=statsig\"}},{\"id\":\"tenable\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tenable Nessus\",\"description\":\"Track nessus backend and webserver logs\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tenable\"}},{\"id\":\"crest-data-systems-citrix-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Citrix Cloud\",\"description\":\"Collect and monitor system logs from Citrix Cloud\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-citrix-cloud/overview\"}},{\"id\":\"cribl-stream\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cribl Stream\",\"description\":\"Collect observability data in a vendor-neutral data telemetry pipeline\",\"categories\":[\"Category::AWS\",\"Category::Azure\",\"Category::Cloud\",\"Category::Containers\",\"Category::Google Cloud\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cribl-stream\"}},{\"id\":\"skykit-digital-signage-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"Skykit Digital Signage\",\"description\":\"Display your Datadog dashboards on your TV screens with Skykit\",\"categories\":[\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/skykit-digital-signage-license/overview\"}},{\"id\":\"symantec-vip\",\"type\":\"integration\",\"attributes\":{\"title\":\"Symantec VIP\",\"description\":\"Gain insights into Symantec VIP events logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=symantec-vip\"}},{\"id\":\"dagster-plus\",\"type\":\"integration\",\"attributes\":{\"title\":\"Dagster+\",\"description\":\"Collect event logs from your Dagster+ deployments\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Orchestration\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=dagster-plus\"}},{\"id\":\"teamcity\",\"type\":\"integration\",\"attributes\":{\"title\":\"TeamCity\",\"description\":\"Track builds and understand the performance impact of every deploy.\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=teamcity\"}},{\"id\":\"tailscale\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tailscale\",\"description\":\"View Tailscale audit and network flow logs in Datadog.\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tailscale\"}},{\"id\":\"scalr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Scalr\",\"description\":\"Scalr is a Terraform Automation and COllaboration (TACO) product\",\"categories\":[\"Category::Automation\",\"Category::Configuration & Deployment\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=scalr\"}},{\"id\":\"crest-data-systems-fortigate\",\"type\":\"integration\",\"attributes\":{\"title\":\"FortiGate\",\"description\":\"Monitors all FortiGate forwarded logs\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-fortigate/overview\"}},{\"id\":\"temporal\",\"type\":\"integration\",\"attributes\":{\"title\":\"Temporal\",\"description\":\"Monitor the health and performance of Temporal Cluster.\",\"categories\":[\"Category::Developer Tools\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=temporal\"}},{\"id\":\"unitq\",\"type\":\"integration\",\"attributes\":{\"title\":\"unitQ\",\"description\":\"Harness the power of user feedback to improve product quality.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=unitq\"}},{\"id\":\"moogsoft\",\"type\":\"integration\",\"attributes\":{\"title\":\"Moogsoft\",\"description\":\"Advanced self-servicing AI-driven observability platform\",\"categories\":[\"Category::AI/ML\",\"Category::Automation\",\"Category::Incidents\",\"Category::Marketplace\",\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Incidents\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/moogsoft/overview\"}},{\"id\":\"tls\",\"type\":\"integration\",\"attributes\":{\"title\":\"TLS\",\"description\":\"Monitor TLS for protocol version, certificate expiration & validity, etc.\",\"categories\":[\"Category::Developer Tools\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=tls\"}},{\"id\":\"typingdna-activelock\",\"type\":\"integration\",\"attributes\":{\"title\":\"TypingDNA ActiveLock\",\"description\":\"View and analyze your TypingDNA ActiveLock logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=typingdna-activelock\"}},{\"id\":\"tibco-ems\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tibco EMS\",\"description\":\"Track queue size, consumer count, unacknowledged messages, and more.\",\"categories\":[\"Category::Log Collection\",\"Category::Message Queues\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tibco-ems\"}},{\"id\":\"tokumx\",\"type\":\"integration\",\"attributes\":{\"title\":\"TokuMX\",\"description\":\"Track metrics for opcounters, replication lag, cache table size, and more.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tokumx\"}},{\"id\":\"jetbrains-ides\",\"type\":\"integration\",\"attributes\":{\"title\":\"JetBrains IDEs\",\"description\":\"Datadog Plugin for IntelliJ IDEA, GoLand, PyCharm, WebStorm, and PhpStorm\",\"categories\":[\"Category::Developer Tools\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=jetbrains-ides\"}},{\"id\":\"azuredevops\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure DevOps\",\"description\":\"Azure DevOps is a set of modern development services for planning,\\n collaborating, and building.\",\"categories\":[\"Category::Azure\",\"Category::Collaboration\",\"Category::Developer Tools\",\"Category::Event Management\",\"Category::Issue Tracking\",\"Category::Provisioning\",\"Category::Source Control\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azuredevops\"}},{\"id\":\"torchserve\",\"type\":\"integration\",\"attributes\":{\"title\":\"TorchServe\",\"description\":\"Monitor the health and performance of TorchServe\",\"categories\":[\"Category::AI/ML\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=torchserve\"}},{\"id\":\"unifi-console\",\"type\":\"integration\",\"attributes\":{\"title\":\"Unifi Console\",\"description\":\"This check collects metrics from the Unifi Controller\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=unifi-console\"}},{\"id\":\"filemage\",\"type\":\"integration\",\"attributes\":{\"title\":\"FileMage\",\"description\":\"Monitoring Agent for FileMage services\",\"categories\":[\"Category::Cloud\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=filemage\"}},{\"id\":\"azure\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure\",\"description\":\"Microsoft Azure is an open and flexible cloud platform.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::IoT\",\"Category::Log Collection\",\"Category::Network\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure\"}},{\"id\":\"activemq-xml\",\"type\":\"integration\",\"attributes\":{\"title\":\"ActiveMQ XML\",\"description\":\"Collect metrics for brokers and queues, producers and consumers, and more.\",\"categories\":[\"Category::Log Collection\",\"Category::Message Queues\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=activemq-xml\"}},{\"id\":\"aerospike\",\"type\":\"integration\",\"attributes\":{\"title\":\"Aerospike\",\"description\":\"Collect cluster and namespaces statistics from the Aerospike database\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=aerospike\"}},{\"id\":\"visual-studio\",\"type\":\"integration\",\"attributes\":{\"title\":\"Visual Studio\",\"description\":\"Datadog Extension for Visual Studio\",\"categories\":[\"Category::Developer Tools\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=visual-studio\"}},{\"id\":\"traefik-mesh\",\"type\":\"integration\",\"attributes\":{\"title\":\"Traefik Mesh\",\"description\":\"Tracks metrics related to Traefik Mesh\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=traefik-mesh\"}},{\"id\":\"amazon-api-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon API Gateway Integration\",\"description\":\"Amazon API Gateway is a managed service for APIs.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-api-gateway\"}},{\"id\":\"velocloud-sd-wan\",\"type\":\"integration\",\"attributes\":{\"title\":\"VeloCloud SD-WAN\",\"description\":\"Monitor your VeloCloud SD-WAN Environment with Network Device Monitoring and Logs\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=velocloud-sd-wan\"}},{\"id\":\"amazon-kafka\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon MSK (Agent)\",\"description\":\"Monitor the health and performance of your Amazon MSK clusters.\",\"categories\":[\"Category::AWS\",\"Offering::Integration\",\"Product::Data Streams Monitoring\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-kafka\"}},{\"id\":\"kepler\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kepler\",\"description\":\"View energy usage estimates of Kuberenetes workloads from Kepler\",\"categories\":[\"Category::Kubernetes\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kepler\"}},{\"id\":\"windows-service\",\"type\":\"integration\",\"attributes\":{\"title\":\"Windows Services\",\"description\":\"Monitor the state of your Windows services.\",\"categories\":[\"Category::OS & System\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=windows-service\"}},{\"id\":\"airbrake\",\"type\":\"integration\",\"attributes\":{\"title\":\"Airbrake\",\"description\":\"View, search on, and discuss Airbrake exceptions in your event stream.\",\"categories\":[\"Category::Event Management\",\"Category::Issue Tracking\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=airbrake\"}},{\"id\":\"velero\",\"type\":\"integration\",\"attributes\":{\"title\":\"Velero\",\"description\":\"Monitor the performance and usage of your Velero deployments.\",\"categories\":[\"Category::Cloud\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Provisioning\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=velero\"}},{\"id\":\"starburst-galaxy\",\"type\":\"integration\",\"attributes\":{\"title\":\"Starburst Galaxy\",\"description\":\"Collect cluster performance metrics from Starburst Galaxy\",\"categories\":[\"Category::AI/ML\",\"Category::Data Stores\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=starburst-galaxy\"}},{\"id\":\"ambari\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ambari\",\"description\":\"Get metrics by host or service for all your ambari managed clusters\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ambari\"}},{\"id\":\"vllm\",\"type\":\"integration\",\"attributes\":{\"title\":\"vLLM\",\"description\":\"vLLM is a library for LLM inference and serving\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=vllm\"}},{\"id\":\"voltdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"VoltDB\",\"description\":\"Collect status, performance and other metrics from a VoltDB cluster.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=voltdb\"}},{\"id\":\"docontrol\",\"type\":\"integration\",\"attributes\":{\"title\":\"DoControl\",\"description\":\"SaaS Data Security - modernizing DLP and CASB to Secure SaaS Data\",\"categories\":[\"Category::Automation\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=docontrol\"}},{\"id\":\"argo-workflows\",\"type\":\"integration\",\"attributes\":{\"title\":\"Argo Workflows\",\"description\":\"Monitor the health and performance of Argo Workflows\",\"categories\":[\"Category::Developer Tools\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=argo-workflows\"}},{\"id\":\"oci-dynamic-routing-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Dynamic Routing Gateway\",\"description\":\"OCI Dynamic Routing Gateway connects on-premises networks and remote VCNs securely with dynamic routing.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-dynamic-routing-gateway\"}},{\"id\":\"palo-alto-panorama\",\"type\":\"integration\",\"attributes\":{\"title\":\"Palo Alto Panorama\",\"description\":\"Gain insights into the panorama firewall logs. Connect to Cloud SIEM\",\"categories\":[\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=palo-alto-panorama\"}},{\"id\":\"statsd\",\"type\":\"integration\",\"attributes\":{\"title\":\"StatsD\",\"description\":\"Monitor the availability of StatsD servers and track metric counts.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=statsd\"}},{\"id\":\"causely\",\"type\":\"integration\",\"attributes\":{\"title\":\"Causely\",\"description\":\"Causal AI identifies the root cause behind Datadog alerts and anomalies.\",\"categories\":[\"Category::AI/ML\",\"Category::Automation\",\"Category::Cloud\",\"Category::Incidents\",\"Category::Kubernetes\",\"Offering::Integration\",\"Queried Data Type::Events\",\"Queried Data Type::Metrics\",\"Queried Data Type::Traces\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=causely\"}},{\"id\":\"amazon-sqs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon SQS\",\"description\":\"Amazon Simple Queue Service (SQS) is a fast, reliable, scalable, fully managed message queuing service.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Product::Data Streams Monitoring\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-sqs\"}},{\"id\":\"supervisord\",\"type\":\"integration\",\"attributes\":{\"title\":\"Supervisord\",\"description\":\"Monitor the status, uptime, and number of supervisor-managed processes.\",\"categories\":[\"Category::Log Collection\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=supervisord\"}},{\"id\":\"vsphere\",\"type\":\"integration\",\"attributes\":{\"title\":\"vSphere\",\"description\":\"Understand how vSphere resource usage affects your application.\",\"categories\":[\"Category::Cloud\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=vsphere\"}},{\"id\":\"azure-backup\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Backup\",\"description\":\"Azure Backup provides backup and restore services for Recovery Services vaults and Backup vaults\",\"categories\":[\"Category::Azure\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-backup\"}},{\"id\":\"argocd\",\"type\":\"integration\",\"attributes\":{\"title\":\"Argo CD\",\"description\":\"Monitor the health and performance of Argo CD\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=argocd\"}},{\"id\":\"packetfabric\",\"type\":\"integration\",\"attributes\":{\"title\":\"PacketFabric\",\"description\":\"Sync PacketFabric metrics with Datadog\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=packetfabric\"}},{\"id\":\"gsneotek-datadog-billing\",\"type\":\"integration\",\"attributes\":{\"title\":\"GS Neotek Datadog Cost Analysis\",\"description\":\"Analyze Datadog costs to monitor for spikes and budgeting\",\"categories\":[\"Category::Alerting\",\"Category::Cost Management\",\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/gsneotek-datadog-billing/overview\"}},{\"id\":\"mongodb-atlas\",\"type\":\"integration\",\"attributes\":{\"title\":\"MongoDB Atlas\",\"description\":\"Track Atlas read/write performance, Vector Search metrics, and more.\",\"categories\":[\"Category::AI/ML\",\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mongodb-atlas\"}},{\"id\":\"beyondtrust-identity-security-insights\",\"type\":\"integration\",\"attributes\":{\"title\":\"BeyondTrust Identity Security Insights\",\"description\":\"Gain insights into detections from BeyondTrust Identity Security Insights.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=beyondtrust-identity-security-insights\"}},{\"id\":\"rapdev-custom-integration-development\",\"type\":\"integration\",\"attributes\":{\"title\":\"RapDev Custom Integration Development\",\"description\":\"Don't see it? We'll build it! Reach out to RapDev for custom integrations and development services.\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-custom-integration-development/overview\"}},{\"id\":\"windows-certificate\",\"type\":\"integration\",\"attributes\":{\"title\":\"Windows Certificate Store\",\"description\":\"Monitor your Windows hosts' certificates stores for certificate expiration.\",\"categories\":[\"Category::OS & System\",\"Category::Windows\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=windows-certificate\"}},{\"id\":\"weblogic\",\"type\":\"integration\",\"attributes\":{\"title\":\"WebLogic\",\"description\":\"Monitor the health and performance of WebLogic Servers.\",\"categories\":[\"Category::Log Collection\",\"Category::Oracle\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=weblogic\"}},{\"id\":\"bordant-technologies-camunda\",\"type\":\"integration\",\"attributes\":{\"title\":\"Camunda 8\",\"description\":\"Monitor your Camunda 8 workflow engine's health and performance.\",\"categories\":[\"Category::Kubernetes\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::Orchestration\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/bordant-technologies-camunda/overview\"}},{\"id\":\"honeybadger\",\"type\":\"integration\",\"attributes\":{\"title\":\"Honeybadger\",\"description\":\"View, search on, and discuss exceptions from Honeybadger in your event stream.\",\"categories\":[\"Category::Event Management\",\"Category::Issue Tracking\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=honeybadger\"}},{\"id\":\"bottomline-mainframe\",\"type\":\"integration\",\"attributes\":{\"title\":\"Bottomline Record and Replay\",\"description\":\"Monitor 3270/5250 Mainframe users and resources using network traffic\",\"categories\":[\"Category::Mainframes\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/bottomline-mainframe/overview\"}},{\"id\":\"buoyant-inc-buoyant-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Buoyant Cloud\",\"description\":\"Buoyant Cloud will monitor, manage, and secure Linkerd.\",\"categories\":[\"Category::Containers\",\"Category::Cost Management\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Software License\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/buoyant-inc-buoyant-cloud/overview\"}},{\"id\":\"jumpcloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Jumpcloud\",\"description\":\"View Jumpcloud events in Datadog\",\"categories\":[\"Category::Event Management\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=jumpcloud\"}},{\"id\":\"cds-custom-integration-development\",\"type\":\"integration\",\"attributes\":{\"title\":\"Custom Integration Development for Datadog\",\"description\":\"Use Crest Data's Custom Integration for comprehensive monitoring and analytics on all platforms.\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/cds-custom-integration-development/overview\"}},{\"id\":\"cilium\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cilium\",\"description\":\"Collect per pod agent metrics and cluster-wide operator metrics\",\"categories\":[\"Category::Containers\",\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cilium\"}},{\"id\":\"tekton\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tekton\",\"description\":\"Track all your Tekton metrics with Datadog.\",\"categories\":[\"Category::Developer Tools\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tekton\"}},{\"id\":\"salesforce-commerce-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Salesforce Commerce Cloud\",\"description\":\"Import your Salesforce Commerce Cloud logs into Datadog\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=salesforce-commerce-cloud\"}},{\"id\":\"rapdev-maxdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"MaxDB\",\"description\":\"Monitor volume, cache, schema, table and more from MaxDB databases\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Marketplace\",\"Category::SAP\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-maxdb/overview\"}},{\"id\":\"citrix-hypervisor\",\"type\":\"integration\",\"attributes\":{\"title\":\"Citrix Hypervisor\",\"description\":\"Monitor the health and performance of a Citrix Hypervisor host.\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=citrix-hypervisor\"}},{\"id\":\"coredns\",\"type\":\"integration\",\"attributes\":{\"title\":\"CoreDNS\",\"description\":\"CoreDNS collects DNS metrics in Kubernetes.\",\"categories\":[\"Category::Caching\",\"Category::Containers\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=coredns\"}},{\"id\":\"blazemeter\",\"type\":\"integration\",\"attributes\":{\"title\":\"BlazeMeter\",\"description\":\"Gain insights into your BlazeMeter functional and performance test results\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=blazemeter\"}},{\"id\":\"sendgrid\",\"type\":\"integration\",\"attributes\":{\"title\":\"SendGrid\",\"description\":\"Collect metrics for Sendgrid.\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sendgrid\"}},{\"id\":\"crest-data-systems-netwrix-auditor\",\"type\":\"integration\",\"attributes\":{\"title\":\"Netwrix Auditor\",\"description\":\"Collects audit data from Netwrix Auditor for security insights and monitoring\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-netwrix-auditor/overview\"}},{\"id\":\"crest-data-systems-netapp-aiqum\",\"type\":\"integration\",\"attributes\":{\"title\":\"NetApp AIQUM\",\"description\":\"Monitor the performance and usage of NetApp AIQUM cluster\",\"categories\":[\"Category::Data Stores\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-netapp-aiqum/overview\"}},{\"id\":\"workday\",\"type\":\"integration\",\"attributes\":{\"title\":\"Workday User Activity Logs\",\"description\":\"View Workday logs in Datadog for compliance and Cloud SIEM analysis.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=workday\"}},{\"id\":\"xmatters\",\"type\":\"integration\",\"attributes\":{\"title\":\"xMatters\",\"description\":\"Use xMatters as a notification channel in Datadog alerts and events.\",\"categories\":[\"Category::Collaboration\",\"Category::Event Management\",\"Category::Incidents\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=xmatters\"}},{\"id\":\"hdfs-namenode\",\"type\":\"integration\",\"attributes\":{\"title\":\"HDFS Namenode\",\"description\":\"Track cluster disk usage, volume failures, dead DataNodes, and more.\",\"categories\":[\"Category::Log Collection\",\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hdfs-namenode\"}},{\"id\":\"zilliz-cloud-zilliz-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zilliz Cloud\",\"description\":\"Powered by open-source Milvus, Zilliz delivers the most performant and cost-effective vector database for AI.\",\"categories\":[\"Category::AI/ML\",\"Category::Metrics\",\"Offering::Integration\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zilliz-cloud-zilliz-cloud\"}},{\"id\":\"ibm-i\",\"type\":\"integration\",\"attributes\":{\"title\":\"IBM i\",\"description\":\"Remotely monitor IBM i systems including jobs, job queues, ASPs, and more.\",\"categories\":[\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ibm-i\"}},{\"id\":\"flume\",\"type\":\"integration\",\"attributes\":{\"title\":\"flume\",\"description\":\"Track Sink, Channel and Source of Apache Flume Agent\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=flume\"}},{\"id\":\"kube-dns\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kube DNS\",\"description\":\"Track all your Kube DNS metrics with Datadog\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kube-dns\"}},{\"id\":\"kube-metrics-server\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kubernetes Metrics Server\",\"description\":\"Monitors the Kubernetes Metrics Server\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kube-metrics-server\"}},{\"id\":\"docker\",\"type\":\"integration\",\"attributes\":{\"title\":\"Docker Daemon\",\"description\":\"Correlate container performance with that of the services running inside them.\",\"categories\":[\"Category::Containers\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=docker\"}},{\"id\":\"circleci\",\"type\":\"integration\",\"attributes\":{\"title\":\"CircleCI\",\"description\":\"CircleCI's platform makes it easy to rapidly build and release quality software.\",\"categories\":[\"Category::Automation\",\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=circleci\"}},{\"id\":\"google-cloud-functions\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Functions\",\"description\":\"An event-based asynchronous compute solution allowing creation of small, single-purpose functions.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-functions\"}},{\"id\":\"google-cloud-ml\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud ML\",\"description\":\"A managed service for easily building machine learning models for data of any type or size.\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-ml\"}},{\"id\":\"google-cloud-service-extensions\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Service Extensions\",\"description\":\"Secure your Google Cloud Load Balancers with Datadog App & API Protection.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-service-extensions\"}},{\"id\":\"crest-data-systems-cisco-mds\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco MDS\",\"description\":\"Monitors Cisco MDS switch logs\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-cisco-mds/overview\"}},{\"id\":\"datadog-professional-service-by-dxhero\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Professional Service by DXHero\",\"description\":\"Datadog professional services by DXHero \u2013 expert implementation, performance optimization, and reliable support.\",\"categories\":[\"Category::AWS\",\"Category::Alerting\",\"Category::Azure\",\"Category::Caching\",\"Category::Configuration & Deployment\",\"Category::Marketplace\",\"Offering::Professional Service\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/datadog-professional-service-by-dxhero/overview\"}},{\"id\":\"windows-registry\",\"type\":\"integration\",\"attributes\":{\"title\":\"Windows Registry\",\"description\":\"Monitor your Windows hosts for changes in registry keys.\",\"categories\":[\"Category::OS & System\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=windows-registry\"}},{\"id\":\"crest-data-systems-cloudflare-ai-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cloudflare AI Gateway\",\"description\":\"Gain insights into Cloudflare AI Gateway traffic.\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-cloudflare-ai-gateway/overview\"}},{\"id\":\"crest-data-systems-datadog-managed-service\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Managed Services by Crest Data\",\"description\":\"Tailored solutions ensure Datadog aligns with your business objectives\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-datadog-managed-service/overview\"}},{\"id\":\"alibaba-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Alibaba Cloud\",\"description\":\"Alibaba Cloud, a subsidiary of Alibaba Group, provides cloud computing services.\",\"categories\":[\"Category::Cloud\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=alibaba-cloud\"}},{\"id\":\"rapdev-webex\",\"type\":\"integration\",\"attributes\":{\"title\":\"Webex\",\"description\":\"Visualize Webex licensing, meeting, and participant details as metrics\",\"categories\":[\"Category::Collaboration\",\"Category::Event Management\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-webex/overview\"}},{\"id\":\"wincrashdetect\",\"type\":\"integration\",\"attributes\":{\"title\":\"Windows Crash Detection\",\"description\":\"Monitor your Windows hosts for system crashes.\",\"categories\":[\"Category::OS & System\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=wincrashdetect\"}},{\"id\":\"azure-vm\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure VM\",\"description\":\"Microsoft Azure VM is a service that lets you create Linux and Windows virtual machines in minutes\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::OS & System\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-vm\"}},{\"id\":\"bitbucket\",\"type\":\"integration\",\"attributes\":{\"title\":\"Bitbucket\",\"description\":\"Bitbucket is a free code DVCS hosting site for Git and Mercurial.\",\"categories\":[\"Category::Collaboration\",\"Category::Issue Tracking\",\"Category::Source Control\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=bitbucket\"}},{\"id\":\"gnatsd-streaming\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gnatsd Streaming\",\"description\":\"NATS server streaming\",\"categories\":[\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gnatsd-streaming\"}},{\"id\":\"go-pprof-scraper\",\"type\":\"integration\",\"attributes\":{\"title\":\"Go pprof scraper\",\"description\":\"Collect profiles from Go programs via the /debug/pprof endpoint\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=go-pprof-scraper\"}},{\"id\":\"crest-data-systems-commvault\",\"type\":\"integration\",\"attributes\":{\"title\":\"Commvault\",\"description\":\"Monitors Commvault Logs\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-commvault/overview\"}},{\"id\":\"nerdvision\",\"type\":\"integration\",\"attributes\":{\"title\":\"NerdVision\",\"description\":\"Live debugger for .NET, Java, Python and Node\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/nerdvision/overview\"}},{\"id\":\"kyverno\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kyverno\",\"description\":\"Monitor the health and performance of Kyverno\",\"categories\":[\"Category::Kubernetes\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kyverno\"}},{\"id\":\"knative-for-anthos\",\"type\":\"integration\",\"attributes\":{\"title\":\"Knative for Anthos\",\"description\":\"A managed Knative offering for serverless workloads on Kubernetes in hybrid and multicloud environments.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Google Cloud\",\"Category::Kubernetes\",\"Category::Log Collection\",\"Category::Orchestration\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=knative-for-anthos\"}},{\"id\":\"juniper-srx-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"Juniper SRX Firewall\",\"description\":\"Gain insights into Juniper SRX Firewall logs\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=juniper-srx-firewall\"}},{\"id\":\"avio-consulting-datadog-implementation-services\",\"type\":\"integration\",\"attributes\":{\"title\":\"Datadog Implementation Services\",\"description\":\"Datadog Implementation and Metrics, Tracing and Logs for MuleSoft applications\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::Tracing\",\"Offering::Professional Service\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/avio-consulting-datadog-implementation-services/overview\"}},{\"id\":\"amazon-rds-proxy\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS RDS Proxy\",\"description\":\"A DB proxy for RDS that makes applications more scalable, more resilient to database failures, and more secure.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-rds-proxy\"}},{\"id\":\"crest-data-systems-integration-backup-and-restore-tool\",\"type\":\"integration\",\"attributes\":{\"title\":\"Integration Backup and Restore Tool\",\"description\":\"Back up all your Agent configuration files, integrations, and dependencies, and quickly restore them\",\"categories\":[\"Category::Marketplace\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-integration-backup-and-restore-tool/overview\"}},{\"id\":\"windows-performance-counters\",\"type\":\"integration\",\"attributes\":{\"title\":\"Windows performance counters\",\"description\":\"Monitor performance counters on Windows operating systems.\",\"categories\":[\"Category::IoT\",\"Category::Windows\",\"Offering::Integration\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=windows-performance-counters\"}},{\"id\":\"wlan\",\"type\":\"integration\",\"attributes\":{\"title\":\"wlan (Wi-Fi)\",\"description\":\"Monitor Wi-Fi metrics such as signal strength, connection status, and more.\",\"categories\":[\"Category::Metrics\",\"Category::Windows\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=wlan\"}},{\"id\":\"amazon-redshift\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Redshift\",\"description\":\"A managed, petabyte-scale data warehouse solution for cost-effectively and efficiently analyzing data.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-redshift\"}},{\"id\":\"google-cloud-spanner\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Spanner\",\"description\":\"The first and only relational database service that is both strongly consistent and horizontally scalable.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-spanner\"}},{\"id\":\"opsmatic\",\"type\":\"integration\",\"attributes\":{\"title\":\"Opsmatic\",\"description\":\"Real-time alerts and visibility of changes in the live state of your infrastructure.\",\"categories\":[\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=opsmatic\"}},{\"id\":\"gitlab-source-code\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitLab Source Code\",\"description\":\"GitLab is a web-based hosting service for software development projects that use the Git revision control system.\",\"categories\":[\"Category::Automation\",\"Category::Developer Tools\",\"Category::Source Control\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gitlab-source-code\"}},{\"id\":\"google-cloud-vertex-ai\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Vertex AI\",\"description\":\"Enables developers to train high-quality custom machine learning models with minimal expertise and effort.\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-vertex-ai\"}},{\"id\":\"crest-data-systems-safenet-trusted-access\",\"type\":\"integration\",\"attributes\":{\"title\":\"Thales SafeNet Trusted Access\",\"description\":\"Collect access and audit logs from SafeNet Trusted Access\",\"categories\":[\"Category::Languages\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-safenet-trusted-access/overview\"}},{\"id\":\"elastic-cloud-ccm\",\"type\":\"integration\",\"attributes\":{\"title\":\"Elastic Cloud Cost Management\",\"description\":\"Integrate Elastic Cloud billing data with Datadog for cost allocation, optimization, and reporting.\",\"categories\":[\"Category::Cost Management\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=elastic-cloud-ccm\"}},{\"id\":\"gremlin\",\"type\":\"integration\",\"attributes\":{\"title\":\"Gremlin\",\"description\":\"Send events occurring in Gremlin to Datadog\",\"categories\":[\"Category::Issue Tracking\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=gremlin\"}},{\"id\":\"webhooks\",\"type\":\"integration\",\"attributes\":{\"title\":\"Webhooks\",\"description\":\"Interact with your own services via Webhooks!\",\"categories\":[\"Category::Developer Tools\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=webhooks\"}},{\"id\":\"wiz\",\"type\":\"integration\",\"attributes\":{\"title\":\"Wiz\",\"description\":\"Wiz audit logs, issues, vulnerabilities, detections, and threats.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=wiz\"}},{\"id\":\"crest-data-systems-dataminr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Dataminr\",\"description\":\"Monitors Dataminr's Alerts\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-dataminr/overview\"}},{\"id\":\"amazon-elasticache\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon ElastiCache\",\"description\":\"Amazon ElastiCache is a web service that makes it easy to deploy, operate, and scale an in-memory cache in the cloud.\",\"categories\":[\"Category::AWS\",\"Category::Caching\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-elasticache\"}},{\"id\":\"crest-data-systems-ibm-security-verify\",\"type\":\"integration\",\"attributes\":{\"title\":\"IBM Security Verify\",\"description\":\"Collect and monitor event logs from IBM Security Verify\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-ibm-security-verify/overview\"}},{\"id\":\"amazon-batch\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Batch\",\"description\":\"Run batch computing workloads on AWS with automatic scaling and job scheduling.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Event Management\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-batch\"}},{\"id\":\"google-cloud-application-load-balancer\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Application Load Balancer\",\"description\":\"Secure your Google Cloud Application Load Balancers with Datadog App & API Protection.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-application-load-balancer\"}},{\"id\":\"crest-data-systems-new-relic-to-datadog-migration\",\"type\":\"integration\",\"attributes\":{\"title\":\"New Relic to Datadog Migration Service\",\"description\":\"Professional service to ensure seamless New Relic to Datadog migration\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-new-relic-to-datadog-migration/overview\"}},{\"id\":\"hasura-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hasura Cloud\",\"description\":\"Monitor your Hasura Cloud Project\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hasura-cloud\"}},{\"id\":\"k6\",\"type\":\"integration\",\"attributes\":{\"title\":\"k6\",\"description\":\"Analyze and visualize k6 performance testing metrics in DataDog\",\"categories\":[\"Category::Notifications\",\"Category::Testing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=k6\"}},{\"id\":\"kernelcare\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kernelcare\",\"description\":\"Monitor kernelcare server activity and status metrics.\",\"categories\":[\"Category::OS & System\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kernelcare\"}},{\"id\":\"superwise-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"Superwise Model Observability\",\"description\":\"Self-service ML observability and monitoring SaaS platform.\",\"categories\":[\"Category::AI/ML\",\"Category::Incidents\",\"Category::Marketplace\",\"Category::Notifications\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/superwise-license/overview\"}},{\"id\":\"lacework\",\"type\":\"integration\",\"attributes\":{\"title\":\"Lacework\",\"description\":\"Lacework is security platform for your all your cloud environments\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=lacework\"}},{\"id\":\"lambdatest\",\"type\":\"integration\",\"attributes\":{\"title\":\"LambdaTest\",\"description\":\"Most powerful automation testing platform\",\"categories\":[\"Category::Automation\",\"Category::Containers\",\"Category::Incidents\",\"Category::Issue Tracking\",\"Category::Testing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=lambdatest\"}},{\"id\":\"logstash\",\"type\":\"integration\",\"attributes\":{\"title\":\"Logstash\",\"description\":\"Monitor and collect runtime metrics from a Logstash instance\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=logstash\"}},{\"id\":\"crest-data-systems-dropbox\",\"type\":\"integration\",\"attributes\":{\"title\":\"Dropbox\",\"description\":\"Collect logs from Dropbox\",\"categories\":[\"Category::Cloud\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-dropbox/overview\"}},{\"id\":\"chainguard\",\"type\":\"integration\",\"attributes\":{\"title\":\"Chainguard\",\"description\":\"Chainguard\u2019s minimal, zero-CVE Container Images enable developers to build more secure software\",\"categories\":[\"Category::AWS\",\"Category::Containers\",\"Category::Google Cloud\",\"Category::Kubernetes\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=chainguard\"}},{\"id\":\"azure-monitor-alerts\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Monitor Alerts\",\"description\":\"Track alerts from Azure Monitor.\",\"categories\":[\"Category::Alerting\",\"Category::Azure\",\"Category::Cloud\",\"Category::Event Management\",\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Events\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-monitor-alerts\"}},{\"id\":\"logz-io\",\"type\":\"integration\",\"attributes\":{\"title\":\"Logz.io\",\"description\":\"AI-Powered ELK as a Service\",\"categories\":[\"Category::AI/ML\",\"Category::Event Management\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=logz-io\"}},{\"id\":\"n2ws\",\"type\":\"integration\",\"attributes\":{\"title\":\"N2WS\",\"description\":\"View summary data from all the connected N2WS Backup & Recovery hosts\",\"categories\":[\"Category::Cloud\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=n2ws\"}},{\"id\":\"neutrona\",\"type\":\"integration\",\"attributes\":{\"title\":\"Neutrona\",\"description\":\"Neutrona Telemetry\",\"categories\":[\"Category::Cloud\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=neutrona\"}},{\"id\":\"nn-sdwan\",\"type\":\"integration\",\"attributes\":{\"title\":\"Netnology Cisco SD-WAN\",\"description\":\"Cisco SDWAN Controller Metric Exporter\",\"categories\":[\"Category::Network\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=nn-sdwan\"}},{\"id\":\"perimeterx\",\"type\":\"integration\",\"attributes\":{\"title\":\"PerimeterX\",\"description\":\"Integrate PerimeterX Logs and Metrics with DataDog\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=perimeterx\"}},{\"id\":\"planetscale\",\"type\":\"integration\",\"attributes\":{\"title\":\"PlanetScale\",\"description\":\"Send your PlanetScale metrics to DataDog.\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=planetscale\"}},{\"id\":\"postman\",\"type\":\"integration\",\"attributes\":{\"title\":\"Postman\",\"description\":\"Analyze metrics and generate events in Datadog from Postman Monitoring runs.\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=postman\"}},{\"id\":\"radarr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Radarr\",\"description\":\"Monitor Radarr\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=radarr\"}},{\"id\":\"portworx\",\"type\":\"integration\",\"attributes\":{\"title\":\"Portworx\",\"description\":\"Collect runtime metrics from a Portworx Instance.\",\"categories\":[\"Category::Data Stores\",\"Category::Kubernetes\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=portworx\"}},{\"id\":\"rbltracker\",\"type\":\"integration\",\"attributes\":{\"title\":\"RBLTracker\",\"description\":\"RBLTracker provides easy-to-use, real-time blacklist monitoring.\",\"categories\":[\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rbltracker\"}},{\"id\":\"unbound\",\"type\":\"integration\",\"attributes\":{\"title\":\"Unbound\",\"description\":\"A datadog integration to collect unbound metrics\",\"categories\":[\"Category::Caching\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=unbound\"}},{\"id\":\"redisenterprise\",\"type\":\"integration\",\"attributes\":{\"title\":\"RedisEnterprise (Deprecated)\",\"description\":\"Redis Enterprise Observability\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=redisenterprise\"}},{\"id\":\"amazon-lambda\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Lambda\",\"description\":\"Run code in response to events and automatically manage compute resources required by that code.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Tracing\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-lambda\"}},{\"id\":\"rum-angular\",\"type\":\"integration\",\"attributes\":{\"title\":\"Angular\",\"description\":\"Monitor Angular applications and generate metrics using Datadog RUM\",\"categories\":[\"Category::Metrics\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Any\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-angular\"}},{\"id\":\"harness-harness-notifications\",\"type\":\"integration\",\"attributes\":{\"title\":\"Harness Notifications\",\"description\":\"Ingest Harness pipeline notifications as Datadog Events\",\"categories\":[\"Category::Alerting\",\"Category::Event Management\",\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=harness-harness-notifications\"}},{\"id\":\"rum-cypress\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cypress\",\"description\":\"Monitor application's Cypress test runs using Datadog\",\"categories\":[\"Category::Issue Tracking\",\"Category::Metrics\",\"Category::Network\",\"Category::Testing\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Any\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-cypress\"}},{\"id\":\"rum-flutter\",\"type\":\"integration\",\"attributes\":{\"title\":\"Flutter\",\"description\":\"Monitor Flutter applications and generate metrics using Datadog RUM\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Category::Mobile\",\"Category::Network\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Android\",\"Supported OS::iOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-flutter\"}},{\"id\":\"crest-data-systems-infoblox-ddi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Infoblox DNS & DHCP\",\"description\":\"Visualize Infoblox DDI Syslog data\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-infoblox-ddi/overview\"}},{\"id\":\"carbonblack\",\"type\":\"integration\",\"attributes\":{\"title\":\"Carbon Black\",\"description\":\"Integrate events and alerts from VMware Carbon Black NGAV and EDR.\",\"categories\":[\"Category::Alerting\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=carbonblack\"}},{\"id\":\"rum-react-native\",\"type\":\"integration\",\"attributes\":{\"title\":\"React Native\",\"description\":\"Monitor React Native applications and generate metrics using Datadog RUM\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Category::Mobile\",\"Category::Network\",\"Category::Tracing\",\"Offering::Integration\",\"Supported OS::Android\",\"Supported OS::iOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-react-native\"}},{\"id\":\"rum-roku\",\"type\":\"integration\",\"attributes\":{\"title\":\"Roku\",\"description\":\"Monitor Roku channels and generate metrics using Datadog RUM\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Category::Network\",\"Category::Tracing\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=rum-roku\"}},{\"id\":\"sendmail\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sendmail\",\"description\":\"Sendmail integration to monitor mail queues\",\"categories\":[\"Category::Metrics\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sendmail\"}},{\"id\":\"signl4\",\"type\":\"integration\",\"attributes\":{\"title\":\"SIGNL4\",\"description\":\"Get notified of your Datadog alerts and take actions using SIGNL4.\",\"categories\":[\"Category::Alerting\",\"Category::Collaboration\",\"Category::Incidents\",\"Category::Issue Tracking\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=signl4\"}},{\"id\":\"sonarr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sonarr\",\"description\":\"Monitor Sonarr\",\"categories\":[\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sonarr\"}},{\"id\":\"upsc\",\"type\":\"integration\",\"attributes\":{\"title\":\"UPSC\",\"description\":\"UPSC stats collector for UPS batteries\",\"categories\":[\"Category::OS & System\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=upsc\"}},{\"id\":\"vespa\",\"type\":\"integration\",\"attributes\":{\"title\":\"Vespa\",\"description\":\"Health and performance monitoring for the big data serving engine Vespa\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=vespa\"}},{\"id\":\"iocs-dp2i\",\"type\":\"integration\",\"attributes\":{\"title\":\"Paypal\u00ae\",\"description\":\"Collect metrics from Paypal\u00ae in Datadog.\",\"categories\":[\"Category::Cloud\",\"Category::Cost Management\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/iocs-dp2i/overview\"}},{\"id\":\"zabbix\",\"type\":\"integration\",\"attributes\":{\"title\":\"zabbix\",\"description\":\"Collect item history by the Zabbix API and report them to Datadog as metrics.\",\"categories\":[\"Category::Event Management\",\"Category::Network\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zabbix\"}},{\"id\":\"git\",\"type\":\"integration\",\"attributes\":{\"title\":\"Git\",\"description\":\"A free, open-source version control system for managing projects of all sizes with speed and efficiency.\",\"categories\":[\"Category::Collaboration\",\"Category::Developer Tools\",\"Category::Issue Tracking\",\"Category::Source Control\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=git\"}},{\"id\":\"google-cloud-run\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud Run\",\"description\":\"Run stateless containers invoked via HTTP requests on a managed compute platform.\",\"categories\":[\"Category::Cloud\",\"Category::Containers\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Orchestration\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-run\"}},{\"id\":\"kandji\",\"type\":\"integration\",\"attributes\":{\"title\":\"Iru (Kandji)\",\"description\":\"Gain insights into Iru (formerly known as Kandji) logs.\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::OS & System\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=kandji\"}},{\"id\":\"azure-appserviceplan\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure App Service Plan\",\"description\":\"Track key Azure App Service Plan metrics.\",\"categories\":[\"Category::Azure\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=azure-appserviceplan\"}},{\"id\":\"crest-data-systems-zoho-desk\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zoho Desk\",\"description\":\"Collect metrics and logs from Zoho Desk\",\"categories\":[\"Category::Collaboration\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-zoho-desk/overview\"}},{\"id\":\"crest-data-systems-cisco-asa\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco ASA\",\"description\":\"Visualize Cisco ASA Syslog data\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-cisco-asa/overview\"}},{\"id\":\"redpeaks-sap-hana\",\"type\":\"integration\",\"attributes\":{\"title\":\"SAP HANA\",\"description\":\"Monitor SAP HANA databases centrally from a single collector\",\"categories\":[\"Category::Data Stores\",\"Category::Event Management\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::SAP\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/redpeaks-sap-hana/overview\"}},{\"id\":\"crest-data-systems-pfsense\",\"type\":\"integration\",\"attributes\":{\"title\":\"pfSense\",\"description\":\"Monitors forwarded logs from pfSense\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-pfsense/overview\"}},{\"id\":\"crest-data-systems-sybase\",\"type\":\"integration\",\"attributes\":{\"title\":\"SAP Sybase ASE\",\"description\":\"Monitor the performance and usage of SAP Sybase ASE Servers\",\"categories\":[\"Category::Alerting\",\"Category::Data Stores\",\"Category::Marketplace\",\"Category::SAP\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-sybase/overview\"}},{\"id\":\"cloudzero\",\"type\":\"integration\",\"attributes\":{\"title\":\"CloudZero\",\"description\":\"View and analyze your Datadog costs on the CloudZero platform\",\"categories\":[\"Category::Cloud\",\"Category::Cost Management\",\"Offering::Integration\",\"Queried Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cloudzero\"}},{\"id\":\"packetfabric-packetfabric\",\"type\":\"integration\",\"attributes\":{\"title\":\"PacketFabric\",\"description\":\"PacketFabric is a global Network as a Service (NaaS) provider offering private, on-demand connectivity services.\",\"categories\":[\"Category::AWS\",\"Category::Automation\",\"Category::Azure\",\"Category::Configuration & Deployment\",\"Category::Google Cloud\",\"Category::Marketplace\",\"Category::Network\",\"Category::Provisioning\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/packetfabric-packetfabric/overview\"}},{\"id\":\"oci-instancepools\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Instance Pools\",\"description\":\"Instance Pools allow for the creation and management of multiple compute instances within the same region as a group.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-instancepools\"}},{\"id\":\"rapdev-box\",\"type\":\"integration\",\"attributes\":{\"title\":\"Box\",\"description\":\"Monitor your Box Enterprise Users and Storage\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-box/overview\"}},{\"id\":\"amazon-athena\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Athena\",\"description\":\"An interactive query service that simplifies data analysis in Amazon S3 using standard SQL.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-athena\"}},{\"id\":\"google-cloud-vpn\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Cloud VPN\",\"description\":\"Google Cloud VPN securely connects your existing network to your Google Cloud Platform (GCP) network\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloud-vpn\"}},{\"id\":\"rabbitmq\",\"type\":\"integration\",\"attributes\":{\"title\":\"RabbitMQ\",\"description\":\"Track queue size, consumer count, unacknowledged messages, and more.\",\"categories\":[\"Category::Log Collection\",\"Category::Message Queues\",\"Offering::Integration\",\"Product::Data Streams Monitoring\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=rabbitmq\"}},{\"id\":\"amazon-s3-storage-lens\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon S3 Storage Lens\",\"description\":\"Amazon S3 Storage Lens provides a single view of object storage usage and activity across your entire Amazon S3 storage.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-s3-storage-lens\"}},{\"id\":\"metricshub\",\"type\":\"integration\",\"attributes\":{\"title\":\"MetricsHub Enterprise\",\"description\":\"Remote monitoring for Cisco, Dell, Fujitsu, Hitachi, HPE, Huawei, IBM, Lenovo, NetApp, Nvidia, Oracle, and hundreds more\",\"categories\":[\"Category::Data Stores\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::Network\",\"Category::OS & System\",\"Category::Oracle\",\"Category::SNMP\",\"Offering::Software License\",\"Submitted Data Type::Metrics\",\"Supported OS::HP-UX\",\"Supported OS::Linux\",\"Supported OS::Solaris\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/metricshub/overview\"}},{\"id\":\"zebrium-zebrium\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zebrium Root Cause as a Service\",\"description\":\"Zebrium shows the root cause of problems directly on your dashboards\",\"categories\":[\"Category::Automation\",\"Category::Marketplace\",\"Category::Notifications\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/zebrium-zebrium/overview\"}},{\"id\":\"crest-data-systems-netapp-bluexp\",\"type\":\"integration\",\"attributes\":{\"title\":\"NetApp BlueXP\",\"description\":\"Monitors NetApp BlueXP inventory and digital advisor logs and metrics\",\"categories\":[\"Category::Data Stores\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-netapp-bluexp/overview\"}},{\"id\":\"nova-dshi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Shopify\u00ae\",\"description\":\"Collect metrics from Shopify\u00ae in Datadog\",\"categories\":[\"Category::Cloud\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/nova-dshi/overview\"}},{\"id\":\"openai\",\"type\":\"integration\",\"attributes\":{\"title\":\"OpenAI\",\"description\":\"Optimize OpenAI usage: cost estimates, prompt sampling and performance metrics.\",\"categories\":[\"Category::AI/ML\",\"Category::Cost Management\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=openai\"}},{\"id\":\"checkpoint-quantum-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"Checkpoint Quantum Firewall\",\"description\":\"Gain insights into Checkpoint Quantum Firewall logs\",\"categories\":[\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=checkpoint-quantum-firewall\"}},{\"id\":\"scylla\",\"type\":\"integration\",\"attributes\":{\"title\":\"Scylla\",\"description\":\"Track cluster resources, latencies, health, and much more.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=scylla\"}},{\"id\":\"crest-data-systems-proofpoint-email-security\",\"type\":\"integration\",\"attributes\":{\"title\":\"Proofpoint Email Security\",\"description\":\"Monitors Proofpoint TAP, Proofpoint On-Demand, and Proofpoint Isolation\",\"categories\":[\"Category::Data Stores\",\"Category::Event Management\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-proofpoint-email-security/overview\"}},{\"id\":\"crest-data-systems-cisco-secure-workload\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco Secure Workload\",\"description\":\"Monitor logs and metrics for Workloads, Enforcement, Traffic and Inventory from Cisco Secure Workload.\",\"categories\":[\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-cisco-secure-workload/overview\"}},{\"id\":\"avio-consulting-mulesoft-observability\",\"type\":\"integration\",\"attributes\":{\"title\":\"MuleSoft Observability\",\"description\":\"Otel Metrics, Traces and Logs for observing MuleSoft applications\",\"categories\":[\"Category::Automation\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::Tracing\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/avio-consulting-mulesoft-observability/overview\"}},{\"id\":\"firefly-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"Firefly\",\"description\":\"Bring your cloud Up-to-Code\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/firefly-license/overview\"}},{\"id\":\"perfectscale-perfectscale\",\"type\":\"integration\",\"attributes\":{\"title\":\"PerfectScale by DoiT\",\"description\":\"Ensure peak performance and cut spending with data-driven, autonomous actions to optimize Kubernetes clusters\",\"categories\":[\"Category::Alerting\",\"Category::Automation\",\"Category::Cloud\",\"Category::Containers\",\"Category::Cost Management\",\"Category::Kubernetes\",\"Category::Marketplace\",\"Category::Provisioning\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/perfectscale-perfectscale/overview\"}},{\"id\":\"crest-data-systems-claroty-ctd\",\"type\":\"integration\",\"attributes\":{\"title\":\"Claroty CTD\",\"description\":\"Collect assets, baselines, health checks, events, alerts, activity logs, and insights from Claroty CTD\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-claroty-ctd/overview\"}},{\"id\":\"rapdev-snmp-trap-logs\",\"type\":\"integration\",\"attributes\":{\"title\":\"SNMP Trap Logs\",\"description\":\"Convert SNMP trap messages into Datadog logs\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::SNMP\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-snmp-trap-logs/overview\"}},{\"id\":\"crest-data-systems-illumio\",\"type\":\"integration\",\"attributes\":{\"title\":\"Illumio\",\"description\":\"Monitor Illumio workloads, events, and traffic flows\",\"categories\":[\"Category::Collaboration\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-illumio/overview\"}},{\"id\":\"crest-data-systems-cisco-ise\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco ISE\",\"description\":\"Visualize Cisco ISE Syslog data\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Provisioning\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-cisco-ise/overview\"}},{\"id\":\"zookeeper\",\"type\":\"integration\",\"attributes\":{\"title\":\"ZooKeeper\",\"description\":\"Track client connections and latencies, and know when requests are backing up.\",\"categories\":[\"Category::Log Collection\",\"Category::Notifications\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zookeeper\"}},{\"id\":\"crest-data-systems-barracuda-waf\",\"type\":\"integration\",\"attributes\":{\"title\":\"Barracuda WAF\",\"description\":\"Visualize Barracuda WAF and Barracuda WAAS data via Syslog or API\",\"categories\":[\"Category::Event Management\",\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-barracuda-waf/overview\"}},{\"id\":\"crest-data-systems-intel-one-api\",\"type\":\"integration\",\"attributes\":{\"title\":\"Intel oneAPI\",\"description\":\"Gather & visualize metrics from reports generated through Intel OneAPI's vtune profiler\",\"categories\":[\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-intel-one-api/overview\"}},{\"id\":\"crest-data-systems-kong-ai-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"Kong AI Gateway\",\"description\":\"Visualize Kong AI Gateway data\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-kong-ai-gateway/overview\"}},{\"id\":\"crest-data-systems-lansweeper\",\"type\":\"integration\",\"attributes\":{\"title\":\"Lansweeper\",\"description\":\"Monitor Lansweeper's Inventory and Vulnerabilities Data.\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-lansweeper/overview\"}},{\"id\":\"amazon-trusted-advisor\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Trusted Advisor\",\"description\":\"An online tool that offers real-time guidance on AWS resource management.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Cost Management\",\"Category::Log Collection\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-trusted-advisor\"}},{\"id\":\"inngest\",\"type\":\"integration\",\"attributes\":{\"title\":\"Inngest\",\"description\":\"Collect key metrics from your Inngest functions\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Developer Tools\",\"Category::Message Queues\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=inngest\"}},{\"id\":\"neubird-ai-hawkeye\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hawkeye by NeuBird\",\"description\":\"Hawkeye, NeuBird's AI SRE Agent accelerates incident resolution with real-time issue diagnosis and root cause analysis\",\"categories\":[\"Category::AI/ML\",\"Category::Automation\",\"Category::Incidents\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/neubird-ai-hawkeye/overview\"}},{\"id\":\"push-security\",\"type\":\"integration\",\"attributes\":{\"title\":\"Push Security\",\"description\":\"Gain insights into Push Security events.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=push-security\"}},{\"id\":\"ivanti-connect-secure\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ivanti Connect Secure\",\"description\":\"Gain insights into Ivanti Connect Secure logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ivanti-connect-secure\"}},{\"id\":\"crest-data-systems-sentinel-one\",\"type\":\"integration\",\"attributes\":{\"title\":\"SentinelOne\",\"description\":\"Monitors SentinelOne's agents, threats, activities, groups and applications.\",\"categories\":[\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-sentinel-one/overview\"}},{\"id\":\"moovingon-ai\",\"type\":\"integration\",\"attributes\":{\"title\":\"moovingon.ai\",\"description\":\"moovingon.ai is a NOC orchestration and automation platform\",\"categories\":[\"Category::Alerting\",\"Category::Automation\",\"Category::Collaboration\",\"Category::Event Management\",\"Category::Incidents\",\"Category::Issue Tracking\",\"Category::Notifications\",\"Offering::Integration\",\"Queried Data Type::Events\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=moovingon-ai\"}},{\"id\":\"reflectiz\",\"type\":\"integration\",\"attributes\":{\"title\":\"Reflectiz\",\"description\":\"The Reflectiz integration provides security insights for your website.\",\"categories\":[\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=reflectiz\"}},{\"id\":\"beyondtrust-password-safe\",\"type\":\"integration\",\"attributes\":{\"title\":\"BeyondTrust Password Safe\",\"description\":\"Gain insights into BeyondTrust Password Safe logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=beyondtrust-password-safe\"}},{\"id\":\"crest-data-systems-palo-alto-prisma-cloud-enterprise\",\"type\":\"integration\",\"attributes\":{\"title\":\"Palo Alto Prisma Cloud Enterprise\",\"description\":\"Integration monitor logs and metrics for Palo Alto Prisma Cloud for cloud and runtime security.\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-palo-alto-prisma-cloud-enterprise/overview\"}},{\"id\":\"zeek\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zeek\",\"description\":\"Gain insights into Zeek logs. Connect to Cloud SIEM\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zeek\"}},{\"id\":\"embrace-mobile\",\"type\":\"integration\",\"attributes\":{\"title\":\"Embrace Mobile\",\"description\":\"Mobile observability for iOS, Android, React Native, and Unity\",\"categories\":[\"Category::Issue Tracking\",\"Category::Metrics\",\"Category::Mobile\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=embrace-mobile\"}},{\"id\":\"rollbar-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"Rollbar\",\"description\":\"Proactively discover errors in real-time.\",\"categories\":[\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rollbar-license/overview\"}},{\"id\":\"keeper\",\"type\":\"integration\",\"attributes\":{\"title\":\"Keeper\",\"description\":\"Gain insights into Keeper reporting events.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=keeper\"}},{\"id\":\"crest-data-systems-miro\",\"type\":\"integration\",\"attributes\":{\"title\":\"Miro\",\"description\":\"Collect audit events from Miro\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-miro/overview\"}},{\"id\":\"mendix\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mendix\",\"description\":\"Monitor Mendix environment metrics\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mendix\"}},{\"id\":\"cloudaeye\",\"type\":\"integration\",\"attributes\":{\"title\":\"CloudAEye\",\"description\":\"Troubleshoot and resolve problems in seconds, remove toil, and earn customer trust.\",\"categories\":[\"Category::AI/ML\",\"Category::Automation\",\"Category::Incidents\",\"Category::Issue Tracking\",\"Category::Kubernetes\",\"Offering::Integration\",\"Queried Data Type::Events\",\"Queried Data Type::Logs\",\"Queried Data Type::Metrics\",\"Queried Data Type::Traces\",\"Submitted Data Type::Events\",\"Supported OS::Any\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cloudaeye\"}},{\"id\":\"salesforce\",\"type\":\"integration\",\"attributes\":{\"title\":\"Salesforce\",\"description\":\"Collect Salesforce real-time platform events as Datadog logs.\",\"categories\":[\"Category::Cloud\",\"Category::Collaboration\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=salesforce\"}},{\"id\":\"rapdev-swiftmq\",\"type\":\"integration\",\"attributes\":{\"title\":\"SwiftMQ\",\"description\":\"Monitor the health and activity of your SwiftMQ instances\",\"categories\":[\"Category::Marketplace\",\"Category::Message Queues\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-swiftmq/overview\"}},{\"id\":\"prophetstor-federatorai-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"ProphetStor Federator.ai\",\"description\":\"Federator.ai license for optimizing Kubernetes applications\",\"categories\":[\"Category::AI/ML\",\"Category::Containers\",\"Category::Kubernetes\",\"Category::Marketplace\",\"Category::Orchestration\",\"Offering::Software License\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/prophetstor-federatorai-license/overview\"}},{\"id\":\"cloudnatix-cloudnatix\",\"type\":\"integration\",\"attributes\":{\"title\":\"CloudNatix\",\"description\":\"CloudNatix provides the insights on k8s cost, capacity, and spend\",\"categories\":[\"Category::Cloud\",\"Category::Kubernetes\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/cloudnatix-cloudnatix/overview\"}},{\"id\":\"bigpanda-bigpanda\",\"type\":\"integration\",\"attributes\":{\"title\":\"BigPanda SaaS Platform\",\"description\":\"Event Correlation and Automation platform, powered by AIOps\",\"categories\":[\"Category::AI/ML\",\"Category::Alerting\",\"Category::Automation\",\"Category::Incidents\",\"Category::Marketplace\",\"Category::Notifications\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/bigpanda-bigpanda/overview\"}},{\"id\":\"crest-data-systems-manageengine-adaudit-plus\",\"type\":\"integration\",\"attributes\":{\"title\":\"ManageEngine ADAudit Plus\",\"description\":\"Collect logs from ManageEngine ADAudit Plus\",\"categories\":[\"Category::AI/ML\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-manageengine-adaudit-plus/overview\"}},{\"id\":\"teradata\",\"type\":\"integration\",\"attributes\":{\"title\":\"Teradata\",\"description\":\"Monitor the health and performance of your Teradata Vantage Database.\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=teradata\"}},{\"id\":\"doctordroid\",\"type\":\"integration\",\"attributes\":{\"title\":\"Doctor Droid\",\"description\":\"Analyze your alerts, identify trends, and improve noise and coverage\",\"categories\":[\"Category::Automation\",\"Category::Incidents\",\"Offering::Integration\",\"Queried Data Type::Events\",\"Queried Data Type::Incidents\",\"Queried Data Type::Logs\",\"Queried Data Type::Metrics\",\"Queried Data Type::Traces\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=doctordroid\"}},{\"id\":\"metabase\",\"type\":\"integration\",\"attributes\":{\"title\":\"Metabase\",\"description\":\"Gain insights into Metabase activity events, view logs and query logs.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=metabase\"}},{\"id\":\"moovingon-moovingonai\",\"type\":\"integration\",\"attributes\":{\"title\":\"moovingon.ai\",\"description\":\"NOC orchestration, automation and remediation platform\",\"categories\":[\"Category::Alerting\",\"Category::Automation\",\"Category::Incidents\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/moovingon-moovingonai/overview\"}},{\"id\":\"crest-data-systems-infoblox-universal-ddi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Infoblox Universal DDI\",\"description\":\"Collect and visualize Infoblox Universal DDI activity and audit logs\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-infoblox-universal-ddi/overview\"}},{\"id\":\"fairwinds-insights\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fairwinds Insights\",\"description\":\"Protects and optimizes your mission critical Kubernetes applications\",\"categories\":[\"Category::Containers\",\"Category::Cost Management\",\"Category::Kubernetes\",\"Category::Marketplace\",\"Category::Provisioning\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/fairwinds-insights/overview\"}},{\"id\":\"crest-data-systems-whylabs\",\"type\":\"integration\",\"attributes\":{\"title\":\"WhyLabs\",\"description\":\"Collect resource data including anomaly feeds, input/outputs, columns, segments, and model performance metrics\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-whylabs/overview\"}},{\"id\":\"traffic-server\",\"type\":\"integration\",\"attributes\":{\"title\":\"Traffic Server\",\"description\":\"Monitor connection, cache, and DNS metrics\",\"categories\":[\"Category::Caching\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=traffic-server\"}},{\"id\":\"insightfinder-insightfinder-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"InsightFinder\",\"description\":\"Human-Centered AI Platform for Incident Investigation and Prevention\",\"categories\":[\"Category::AI/ML\",\"Category::Alerting\",\"Category::Marketplace\",\"Category::Notifications\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/insightfinder-insightfinder-license/overview\"}},{\"id\":\"crest-data-systems-microsoft-scom\",\"type\":\"integration\",\"attributes\":{\"title\":\"Microsoft SCOM\",\"description\":\"Collect and visualize SCOM alerts, events, discoveries, and data from groups, servers, agents, and agentless systems\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-microsoft-scom/overview\"}},{\"id\":\"rapdev-zoom\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zoom\",\"description\":\"Monitor your Zoom accounts and optimize your license\",\"categories\":[\"Category::Cloud\",\"Category::Collaboration\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-zoom/overview\"}},{\"id\":\"flagsmith-rum\",\"type\":\"integration\",\"attributes\":{\"title\":\"Flagsmith\",\"description\":\"Enriches your RUM data with your feature flags from Flagsmith\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Issue Tracking\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=flagsmith-rum\"}},{\"id\":\"crest-data-systems-cyberark-pam\",\"type\":\"integration\",\"attributes\":{\"title\":\"CyberArk PAM\",\"description\":\"Monitor CyberArk PAM's data using APIs & syslog\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-cyberark-pam/overview\"}},{\"id\":\"bind9\",\"type\":\"integration\",\"attributes\":{\"title\":\"Bind 9\",\"description\":\"A Datadog integration to collect bind9 logs and server metrics\",\"categories\":[\"Category::Log Collection\",\"Category::Metrics\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=bind9\"}},{\"id\":\"crest-data-systems-sysdig\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sysdig\",\"description\":\"Visualize Sysdig Syslog data\",\"categories\":[\"Category::Containers\",\"Category::Data Stores\",\"Category::Kubernetes\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-sysdig/overview\"}},{\"id\":\"crest-data-systems-togetherai\",\"type\":\"integration\",\"attributes\":{\"title\":\"TogetherAI\",\"description\":\"Gain insights into TogetherAI finetuning jobs, job events, and files.\",\"categories\":[\"Category::AI/ML\",\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-togetherai/overview\"}},{\"id\":\"zigiwave-micro-focus-opsbridge-integration\",\"type\":\"integration\",\"attributes\":{\"title\":\"OpsBridge\",\"description\":\"No-code integration between Datadog and OpsBridge\",\"categories\":[\"Category::Event Management\",\"Category::Incidents\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Incidents\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/zigiwave-micro-focus-opsbridge-integration/overview\"}},{\"id\":\"rapdev-sap-cloud-alm\",\"type\":\"integration\",\"attributes\":{\"title\":\"SAP Cloud ALM\",\"description\":\"Monitor SAP Cloud ALM infrastructure and services with Datadog\",\"categories\":[\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Submitted Data Type::Traces\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-sap-cloud-alm/overview\"}},{\"id\":\"forescout\",\"type\":\"integration\",\"attributes\":{\"title\":\"Forescout\",\"description\":\"Gain insights into Forescout logs\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=forescout\"}},{\"id\":\"steadybit-steadybit\",\"type\":\"integration\",\"attributes\":{\"title\":\"Steadybit\",\"description\":\"Immediately improve your systems' reliability with chaos engineering\",\"categories\":[\"Category::Incidents\",\"Category::Marketplace\",\"Category::Testing\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/steadybit-steadybit/overview\"}},{\"id\":\"rapdev-oracle-timesten\",\"type\":\"integration\",\"attributes\":{\"title\":\"Oracle TimesTen\",\"description\":\"Monitor Oracle TimesTen database performance\",\"categories\":[\"Category::Caching\",\"Category::Data Stores\",\"Category::Marketplace\",\"Category::Oracle\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-oracle-timesten/overview\"}},{\"id\":\"qdrant\",\"type\":\"integration\",\"attributes\":{\"title\":\"Qdrant\",\"description\":\"A high-performance vector search engine/database.\",\"categories\":[\"Category::AI/ML\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=qdrant\"}},{\"id\":\"meraki\",\"type\":\"integration\",\"attributes\":{\"title\":\"Cisco Meraki\",\"description\":\"Monitor your Cisco Meraki Environment with Network Device Monitoring, Logs, and Cloud SIEM\",\"categories\":[\"Category::Log Collection\",\"Category::Network\",\"Category::SNMP\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=meraki\"}},{\"id\":\"rapdev-syntheticemail\",\"type\":\"integration\",\"attributes\":{\"title\":\"Synthetic Email\",\"description\":\"Monitor round-trip email mailbox performance from around the world\",\"categories\":[\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-syntheticemail/overview\"}},{\"id\":\"io-connect-services-mule-apm-instrumentation\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mule APM Instrumentation\",\"description\":\"Implementation services to instrument Mule applications with Datadog APM\",\"categories\":[\"Category::Alerting\",\"Category::Issue Tracking\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Tracing\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/io-connect-services-mule-apm-instrumentation/overview\"}},{\"id\":\"amazon-xray\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS X-Ray\",\"description\":\"AWS X-Ray lets developers trace distributed applications built using AWS products\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Tracing\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-xray\"}},{\"id\":\"rapdev-ha-github\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitHub Hosted Agent\",\"description\":\"Monitor your GitHub repositories using the Rapdev Hosted Agent\",\"categories\":[\"Category::Cloud\",\"Category::Collaboration\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-ha-github/overview\"}},{\"id\":\"twistlock\",\"type\":\"integration\",\"attributes\":{\"title\":\"Prisma Cloud Compute Edition\",\"description\":\"Twistlock is a container security scanner\",\"categories\":[\"Category::Compliance\",\"Category::Containers\",\"Category::Log Collection\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=twistlock\"}},{\"id\":\"google-cloudsql\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google CloudSQL\",\"description\":\"Simple fully-managed relational database service Postges, MySQL, and SQL Server\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-cloudsql\"}},{\"id\":\"yugabytedb-managed\",\"type\":\"integration\",\"attributes\":{\"title\":\"YugabyteDB Managed\",\"description\":\"Export YugabyteDB Managed cluster metrics to Datadog\",\"categories\":[\"Category::AWS\",\"Category::Azure\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Google Cloud\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=yugabytedb-managed\"}},{\"id\":\"google-compute-engine\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Compute Engine\",\"description\":\"Google Compute Engine delivers virtual machines running in Google's innovative data centers and worldwide fiber network.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Category::OS & System\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-compute-engine\"}},{\"id\":\"vertica\",\"type\":\"integration\",\"attributes\":{\"title\":\"Vertica\",\"description\":\"Monitor Vertica projection storage, license usage, and more.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=vertica\"}},{\"id\":\"crest-data-systems-prefect\",\"type\":\"integration\",\"attributes\":{\"title\":\"Prefect\",\"description\":\"Collect and visualize logs and metrics from Prefect\",\"categories\":[\"Category::AI/ML\",\"Category::Automation\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-prefect/overview\"}},{\"id\":\"keep\",\"type\":\"integration\",\"attributes\":{\"title\":\"Keep\",\"description\":\"Send monitor metrics from Keep's AIOps platform into Datadog\",\"categories\":[\"Category::Alerting\",\"Category::Developer Tools\",\"Category::Incidents\",\"Offering::Integration\",\"Queried Data Type::Events\",\"Queried Data Type::Logs\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=keep\"}},{\"id\":\"google-container-engine\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Container Engine\",\"description\":\"Google Container Engine is a powerful cluster manager and orchestration system for running your Docker containers.\",\"categories\":[\"Category::Cloud\",\"Category::Containers\",\"Category::Google Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-container-engine\"}},{\"id\":\"crest-data-systems-tenable-one-platform\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tenable One Platform\",\"description\":\"Monitors Tenable (io and sc) vulnerabilities, plugins and assets\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-tenable-one-platform/overview\"}},{\"id\":\"crest-data-systems-netapp-ontap\",\"type\":\"integration\",\"attributes\":{\"title\":\"NetApp OnTap\",\"description\":\"Monitor the performance and usage of NetApp ONTAP cluster\",\"categories\":[\"Category::Data Stores\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-netapp-ontap/overview\"}},{\"id\":\"webb-ai\",\"type\":\"integration\",\"attributes\":{\"title\":\"Webb.ai\",\"description\":\"The first AI-enabled reliability engineer\",\"categories\":[\"Category::AI/ML\",\"Category::Kubernetes\",\"Offering::Integration\",\"Queried Data Type::Events\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Events\",\"Supported OS::Any\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=webb-ai\"}},{\"id\":\"crest-data-systems-netskope\",\"type\":\"integration\",\"attributes\":{\"title\":\"Netskope\",\"description\":\"Monitors Netskope security events and alerts\",\"categories\":[\"Category::Alerting\",\"Category::Data Stores\",\"Category::Event Management\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-netskope/overview\"}},{\"id\":\"crest-data-systems-zscaler\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zscaler\",\"description\":\"Monitor and gain insights into Zscaler Private Access and Zscaler Internet Access logs\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-zscaler/overview\"}},{\"id\":\"google-stackdriver-logging\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google StackDriver Logging\",\"description\":\"Store, search, analyze, monitor, and alert on log data and events from Google Cloud.\",\"categories\":[\"Category::Cloud\",\"Category::Google Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=google-stackdriver-logging\"}},{\"id\":\"iocs-dmi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mule\u00ae\",\"description\":\"Collect metrics from MuleSoft products and upload them into Datadog.\",\"categories\":[\"Category::Cloud\",\"Category::Marketplace\",\"Category::Network\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/iocs-dmi/overview\"}},{\"id\":\"crest-data-systems-upguard\",\"type\":\"integration\",\"attributes\":{\"title\":\"UpGuard\",\"description\":\"Insights from UpGuard BreachSight, offering first-party security ratings\",\"categories\":[\"Category::Issue Tracking\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-upguard/overview\"}},{\"id\":\"kitepipe-integration-services-for-boomi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Integration Services for Boomi\",\"description\":\"Custom integration services for Boomi processes and infrastructure\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/kitepipe-integration-services-for-boomi/overview\"}},{\"id\":\"ecco-select-custom-implementation-migration-services\",\"type\":\"integration\",\"attributes\":{\"title\":\"Custom Implementation & Migration Services\",\"description\":\"ECCO Select has several years\u2019 experience helping organizations implement or migrate to the Datadog platform.\",\"categories\":[\"Category::Automation\",\"Category::Collaboration\",\"Category::Configuration & Deployment\",\"Category::Event Management\",\"Category::Marketplace\",\"Category::Testing\",\"Offering::Professional Service\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/ecco-select-custom-implementation-migration-services/overview\"}},{\"id\":\"steadybit\",\"type\":\"integration\",\"attributes\":{\"title\":\"Steadybit\",\"description\":\"Immediately improve your systems' reliability with chaos engineering\",\"categories\":[\"Category::Incidents\",\"Category::Testing\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=steadybit\"}},{\"id\":\"buoyant-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"Buoyant Cloud\",\"description\":\"Buoyant Cloud provides fully managed Linkerd, right on your cluster.\",\"categories\":[\"Category::Cloud\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=buoyant-cloud\"}},{\"id\":\"brevo\",\"type\":\"integration\",\"attributes\":{\"title\":\"Brevo\",\"description\":\"Gain insights into Brevo marketing and transactional events.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=brevo\"}},{\"id\":\"rapdev-apache-iotdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"Apache IoTDB\",\"description\":\"Monitor Apache IoTDB Config and Data Nodes\",\"categories\":[\"Category::Developer Tools\",\"Category::IoT\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-apache-iotdb/overview\"}},{\"id\":\"symantec-endpoint-protection\",\"type\":\"integration\",\"attributes\":{\"title\":\"Symantec Endpoint Protection\",\"description\":\"Gain insights into Symantec Endpoint Protection Logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=symantec-endpoint-protection\"}},{\"id\":\"crest-data-systems-automox\",\"type\":\"integration\",\"attributes\":{\"title\":\"Automox\",\"description\":\"Collect and monitor events, audit logs, and inventory data from Automox\",\"categories\":[\"Category::Automation\",\"Category::Marketplace\",\"Category::OS & System\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-automox/overview\"}},{\"id\":\"continuous-ai-netsuite\",\"type\":\"integration\",\"attributes\":{\"title\":\"NetSuite\",\"description\":\"Monitor your NetSuite SuiteScript performance and logging\",\"categories\":[\"Category::Cost Management\",\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/continuous-ai-netsuite/overview\"}},{\"id\":\"crest-data-systems-nozomi-networks\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nozomi Networks\",\"description\":\"Collect and monitor security and network data from Nozomi Networks\",\"categories\":[\"Category::Alerting\",\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-nozomi-networks/overview\"}},{\"id\":\"rapdev-snmp-profiles\",\"type\":\"integration\",\"attributes\":{\"title\":\"SNMP Profiles\",\"description\":\"Observability into SNMP devices with autodiscovery device profiles\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::SNMP\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-snmp-profiles/overview\"}},{\"id\":\"flagsmith-platform\",\"type\":\"integration\",\"attributes\":{\"title\":\"Flagsmith\",\"description\":\"Flagsmith is an open source Feature Flag and Remote Config service\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Marketplace\",\"Category::Testing\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/flagsmith-platform/overview\"}},{\"id\":\"rapdev-arlo\",\"type\":\"integration\",\"attributes\":{\"title\":\"RapDev Arlo\",\"description\":\"Leverage RapDev's AI Agent Arlo to automate and enhance your Datadog workflows\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-arlo/overview\"}},{\"id\":\"crest-data-systems-solarwinds-observability-saas\",\"type\":\"integration\",\"attributes\":{\"title\":\"SolarWinds Observability SaaS\",\"description\":\"Monitor entities, activity logs, and metrics from SolarWinds Observability SaaS\",\"categories\":[\"Category::Cloud\",\"Category::Languages\",\"Category::Log Collection\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-solarwinds-observability-saas/overview\"}},{\"id\":\"fiddler\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fiddler\",\"description\":\"Gain visibility into your ML systems with the Fiddler Datadog integration\",\"categories\":[\"Category::AI/ML\",\"Category::Alerting\",\"Category::Metrics\",\"Offering::Integration\",\"Queried Data Type::Metrics\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=fiddler\"}},{\"id\":\"redis-enterprise-prometheus\",\"type\":\"integration\",\"attributes\":{\"title\":\"Redis Enterprise Prometheus\",\"description\":\"Collect Redis Enterprise V2 metrics (available in Redis Enterprise Software version 7.8.0+)\",\"categories\":[\"Category::Data Stores\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=redis-enterprise-prometheus\"}},{\"id\":\"instabug-instabug\",\"type\":\"integration\",\"attributes\":{\"title\":\"Instabug\",\"description\":\"Deliver Superior Mobile App Performance\",\"categories\":[\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/instabug-instabug/overview\"}},{\"id\":\"sonicwall-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sonicwall Firewall\",\"description\":\"Gain Insights into Sonicwall Firewall logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sonicwall-firewall\"}},{\"id\":\"komodor-komodor\",\"type\":\"integration\",\"attributes\":{\"title\":\"Komodor\",\"description\":\"Kubernetes Troubleshooting Platform\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Containers\",\"Category::Issue Tracking\",\"Category::Kubernetes\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/komodor-komodor/overview\"}},{\"id\":\"lambdatest-software-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"LambdaTest\",\"description\":\"Smart automation testing platform to reduce test execution time by 10X\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Collaboration\",\"Category::Issue Tracking\",\"Category::Marketplace\",\"Category::Testing\",\"Offering::Software License\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/lambdatest-software-license/overview\"}},{\"id\":\"rapdev-github\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitHub\",\"description\":\"Monitor your GitHub organizations or enterprises\",\"categories\":[\"Category::Cloud\",\"Category::Collaboration\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-github/overview\"}},{\"id\":\"rapdev-nutanix\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nutanix\",\"description\":\"Monitor Nutanix resource usage to better understand your environment\",\"categories\":[\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-nutanix/overview\"}},{\"id\":\"redpeaks-sap-netweaver\",\"type\":\"integration\",\"attributes\":{\"title\":\"SAP S/4HANA & NetWeaver\",\"description\":\"Monitor ABAP and J2EE stacks of your S/4HANA and NetWeaver systems\",\"categories\":[\"Category::Marketplace\",\"Category::SAP\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/redpeaks-sap-netweaver/overview\"}},{\"id\":\"rapdev-redhat-satellite\",\"type\":\"integration\",\"attributes\":{\"title\":\"RedHat Satellite\",\"description\":\"Monitor the health and performance of RedHat Satellite\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-redhat-satellite/overview\"}},{\"id\":\"jlcp-sefaz\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sefaz\",\"description\":\"Monitor the SEFAZ services across different states in Brazil.\",\"categories\":[\"Category::Alerting\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/jlcp-sefaz/overview\"}},{\"id\":\"amazon-globalaccelerator\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Global Accelerator\",\"description\":\"Global Accelerator uses accelerators to improve performance of applications.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-globalaccelerator\"}},{\"id\":\"f5-distributed-cloud-services\",\"type\":\"integration\",\"attributes\":{\"title\":\"F5 Distributed Cloud Services\",\"description\":\"Stream and visualize F5 Distributed Cloud Services event logs.\",\"categories\":[\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Network\",\"Category::Notifications\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=f5-distributed-cloud-services\"}},{\"id\":\"isdown-isdown\",\"type\":\"integration\",\"attributes\":{\"title\":\"IsDown\",\"description\":\"Connect and monitor all your cloud vendors' status pages in Datadog. Real-time outage information & health dashboards.\",\"categories\":[\"Category::Marketplace\",\"Category::Notifications\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/isdown-isdown/overview\"}},{\"id\":\"rapdev-hpux-agent\",\"type\":\"integration\",\"attributes\":{\"title\":\"HP-UX Agent\",\"description\":\"System agent providing metrics for HP-UX 11.31 for hppa and itanium\",\"categories\":[\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-hpux-agent/overview\"}},{\"id\":\"rapdev-managed-datadog-reports\",\"type\":\"integration\",\"attributes\":{\"title\":\"RapDev Managed Datadog Reports\",\"description\":\"Flexible access to RapDev's Datadog expertise for your Datadog deployment\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-managed-datadog-reports/overview\"}},{\"id\":\"rapdev-snaplogic\",\"type\":\"integration\",\"attributes\":{\"title\":\"SnapLogic\",\"description\":\"Monitor SnapLogic Pipelines and Snaplexes\",\"categories\":[\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-snaplogic/overview\"}},{\"id\":\"amazon-appstream\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon AppStream\",\"description\":\"A secure and fully-managed service for streaming desktop apps from AWS to a web browser.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-appstream\"}},{\"id\":\"amazon-appsync\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS AppSync\",\"description\":\"Simplify app development with AppSync's flexible, secure API for accessing and combining data from various sources.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-appsync\"}},{\"id\":\"amazon-dms\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS DMS\",\"description\":\"Simplifies migrating various data stores like relational databases, data warehouses, and NoSQL databases.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-dms\"}},{\"id\":\"amazon-ebs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon EBS\",\"description\":\"Amazon EBS provides persistent block storage volumes for use with Amazon EC2 instances in the AWS Cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-ebs\"}},{\"id\":\"rapdev-validator\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tag Validator\",\"description\":\"Validate monitor tags and ensure agent compliance in DD environment\",\"categories\":[\"Category::Compliance\",\"Category::Configuration & Deployment\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-validator/overview\"}},{\"id\":\"amazon-backup\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Backup\",\"description\":\"Centralize and automate data protection for AWS services and hybrid workloads.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-backup\"}},{\"id\":\"amazon-certificate-manager\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Certificate Manager\",\"description\":\"AWS Certificate Manager lets you easily provision, manage, and deploy public and\\n private SSL/TLS certificates.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-certificate-manager\"}},{\"id\":\"amazon-cloudhsm\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS CloudHSM\",\"description\":\"AWS CloudHSM is a service that provides hardware security modules for use in the AWS Cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-cloudhsm\"}},{\"id\":\"amazon-cloudsearch\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon CloudSearch\",\"description\":\"A cost-effective managed cloud service for creating, managing, and scaling search solutions.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-cloudsearch\"}},{\"id\":\"amazon-codebuild\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS CodeBuild\",\"description\":\"AWS CodeBuild compiles source code, runs tests, and prepares software packages for deployment.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-codebuild\"}},{\"id\":\"amazon-cognito\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Cognito\",\"description\":\"Create unique user identities, authenticate with providers, and store data in the Cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Mobile\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-cognito\"}},{\"id\":\"amazon-config\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Config\",\"description\":\"AWS Config allows you to audit and evaluate configuration of your AWS resources.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-config\"}},{\"id\":\"amazon-connect\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Connect\",\"description\":\"Amazon Connect offers self-service configuration and enables dynamic, personal,\\n and natural customer engagement.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-connect\"}},{\"id\":\"amazon-direct-connect\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Direct Connect\",\"description\":\"AWS Direct Connect makes it easy to establish a dedicated network connection from your premises to AWS.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-direct-connect\"}},{\"id\":\"amazon-dynamodb-accelerator\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon DAX\",\"description\":\"A managed, in-memory cache for DynamoDB that can boost performance by up to 10 times.\",\"categories\":[\"Category::AWS\",\"Category::Caching\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-dynamodb-accelerator\"}},{\"id\":\"amazon-ec2-spot\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon EC2 Spot\",\"description\":\"Amazon EC2 Spot Instances let you take advantage of unused EC2 capacity in the AWS cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-ec2-spot\"}},{\"id\":\"amazon-ecr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon ECR\",\"description\":\"A managed Docker registry that simplifies storing, managing, and deploying Docker container images.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-ecr\"}},{\"id\":\"amazon-elastic-transcoder\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Elastic Transcoder\",\"description\":\"Converts media files stored in Amazon S3 into formats required by consumer playback devices.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-elastic-transcoder\"}},{\"id\":\"amazon-elastic-beanstalk\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Elastic Beanstalk\",\"description\":\"Simplifies deploying and scaling web applications and services on familiar servers.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Category::Network\",\"Category::Provisioning\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-elastic-beanstalk\"}},{\"id\":\"amazon-firehose\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Kinesis Data Firehose\",\"description\":\"Amazon Kinesis Data Firehose is the easiest way to load streaming data into AWS.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-firehose\"}},{\"id\":\"amazon-fsx\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon FSx\",\"description\":\"Amazon FSx is a fully managed service that provides scalable storage for Windows File Server or Lustre.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-fsx\"}},{\"id\":\"amazon-gamelift\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon GameLift\",\"description\":\"Manages deployment, operation, and scaling of your session-based multiplayer game servers in the cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-gamelift\"}},{\"id\":\"amazon-emr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon EMR\",\"description\":\"Quickly and cost-effectively process vast amounts of data.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-emr\"}},{\"id\":\"amazon-inspector\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Inspector\",\"description\":\"A security assessment service that enhances the security and compliance of your AWS resources.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Compliance\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-inspector\"}},{\"id\":\"amazon-kinesis-data-analytics\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Kinesis Data Analytics\",\"description\":\"Easily transform, query, and analyze streaming data in real-time using Apache Flink and Amazon Kinesis Data Analytics.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-kinesis-data-analytics\"}},{\"id\":\"palo-alto-cortex-xdr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Palo Alto Cortex XDR\",\"description\":\"Gain insights into palo alto cortex xdr logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=palo-alto-cortex-xdr\"}},{\"id\":\"bottomline-recordandreplay\",\"type\":\"integration\",\"attributes\":{\"title\":\"Bottomline's Record and Replay: Mainframe\",\"description\":\"Monitor your 3270/5250 Mainframe users and resources using network traffic\",\"categories\":[\"Category::Mainframes\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=bottomline-recordandreplay\"}},{\"id\":\"amazon-iot\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS IoT Core\",\"description\":\"A managed cloud platform facilitating secure interactions between connected devices, cloud applications, and devices.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::IoT\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-iot\"}},{\"id\":\"amazon-keyspaces\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Keyspaces\",\"description\":\"Amazon Keyspaces is a scalable, highly available, and managed\\n Apache Cassandra-compatible database service.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-keyspaces\"}},{\"id\":\"amazon-app-mesh\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS App Mesh\",\"description\":\"Amazon App Mesh is an open source edge and service proxy.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Category::Tracing\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-app-mesh\"}},{\"id\":\"amazon-kms\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS KMS\",\"description\":\"Simplifies creating and managing encryption keys for data encryption purposes.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-kms\"}},{\"id\":\"amazon-lex\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Lex\",\"description\":\"Amazon Lex is an AWS service for building conversational interfaces into\\n applications using voice and text.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-lex\"}},{\"id\":\"rapdev-atlassian-bamboo\",\"type\":\"integration\",\"attributes\":{\"title\":\"Atlassian Bamboo\",\"description\":\"Monitor Atlassian Bamboo failed build metrics across projects, plans, and branches\",\"categories\":[\"Category::Collaboration\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-atlassian-bamboo/overview\"}},{\"id\":\"amazon-mediaconnect\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS MediaConnect\",\"description\":\"AWS Elemental MediaConnect is a high-quality transport service for live video.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-mediaconnect\"}},{\"id\":\"amazon-mediaconvert\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon MediaConvert\",\"description\":\"Formats & compresses video content for televisions and connected devices\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-mediaconvert\"}},{\"id\":\"rapdev-pagerduty-oncall-migration\",\"type\":\"integration\",\"attributes\":{\"title\":\"RapDev PagerDuty to On-Call Migration\",\"description\":\"Seamlessly migrate from PagerDuty to Datadog On-Call with expert-led setup, validation, and support\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-pagerduty-oncall-migration/overview\"}},{\"id\":\"rapdev-avd\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure Virtual Desktop\",\"description\":\"Monitor your Azure Virtual Desktop host pool and session health\",\"categories\":[\"Category::Azure\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-avd/overview\"}},{\"id\":\"amazon-medialive\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon MediaLive\",\"description\":\"AWS Elemental MediaLive is a broadcast-grade live video processing service.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-medialive\"}},{\"id\":\"amazon-mediastore\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS MediaStore\",\"description\":\"AWS Elemental MediaStore is an AWS storage service optimized for media.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-mediastore\"}},{\"id\":\"amazon-mediatailor\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS MediaTailor\",\"description\":\"AWS Elemental MediaTailor is a personalization and monetization service that allows scalable server-side ad insertion.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-mediatailor\"}},{\"id\":\"looker\",\"type\":\"integration\",\"attributes\":{\"title\":\"Looker\",\"description\":\"Looker\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=looker\"}},{\"id\":\"amazon-mediapackage\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS MediaPackage\",\"description\":\"Deliver secure, scalable video streams to playback devices, providing video packaging and origination services.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-mediapackage\"}},{\"id\":\"amazon-network-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Network Firewall\",\"description\":\"A stateful service that filters traffic at the perimeter of your VPC.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-network-firewall\"}},{\"id\":\"rapdev-rapid7\",\"type\":\"integration\",\"attributes\":{\"title\":\"Rapid7\",\"description\":\"Monitor your Rapid7 logs and investigation activity\",\"categories\":[\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-rapid7/overview\"}},{\"id\":\"speedscale-speedscale\",\"type\":\"integration\",\"attributes\":{\"title\":\"Speedscale\",\"description\":\"Traffic Replay Platform for Kubernetes Load Testing\",\"categories\":[\"Category::Containers\",\"Category::Kubernetes\",\"Category::Marketplace\",\"Category::Testing\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/speedscale-speedscale/overview\"}},{\"id\":\"amazon-mwaa\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon MWAA\",\"description\":\"Amazon Managed Workflows for Apache Airflow (MWAA) simplifies building and managing workflows in the cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-mwaa\"}},{\"id\":\"amazon-nat-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Nat Gateway\",\"description\":\"NAT enables instances in a private subnet to access the internet while blocking internet-initiated connections.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-nat-gateway\"}},{\"id\":\"rapdev-influxdb\",\"type\":\"integration\",\"attributes\":{\"title\":\"InfluxDB\",\"description\":\"Monitor the health and activity of your InfluxDB instances\",\"categories\":[\"Category::Data Stores\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-influxdb/overview\"}},{\"id\":\"amazon-neptune\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Neptune\",\"description\":\"A managed graph database service that simplifies building and running apps with highly connected datasets.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-neptune\"}},{\"id\":\"rapdev-jira\",\"type\":\"integration\",\"attributes\":{\"title\":\"Jira\",\"description\":\"Monitor Jira Cloud issues and users.\",\"categories\":[\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-jira/overview\"}},{\"id\":\"amazon-ses\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon SES\",\"description\":\"Amazon Simple Email Service (SES) is a cost-effective outbound-only email-sending service\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-ses\"}},{\"id\":\"amazon-network-manager\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Network Manager\",\"description\":\"AWS Network Manager provides centralized monitoring for global networks.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-network-manager\"}},{\"id\":\"amazon-network-monitor\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon CloudWatch Network Monitor\",\"description\":\"Amazon CloudWatch Network Monitor provides monitoring for global networks.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Metrics\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-network-monitor\"}},{\"id\":\"hawkeye-by-neubird\",\"type\":\"integration\",\"attributes\":{\"title\":\"Hawkeye by NeuBird\",\"description\":\"AI-driven incident investigation for Datadog Monitors\",\"categories\":[\"Category::AI/ML\",\"Category::Collaboration\",\"Category::Incidents\",\"Offering::Integration\",\"Queried Data Type::Events\",\"Queried Data Type::Incidents\",\"Queried Data Type::Metrics\",\"Queried Data Type::Traces\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=hawkeye-by-neubird\"}},{\"id\":\"amazon-polly\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Polly\",\"description\":\"Amazon Polly is a service that turns text into lifelike speech.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-polly\"}},{\"id\":\"orbitci\",\"type\":\"integration\",\"attributes\":{\"title\":\"Orbit CI\",\"description\":\"Collect and visualise detailed CI/CD pipeline metrics\",\"categories\":[\"Category::Developer Tools\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=orbitci\"}},{\"id\":\"amazon-rekognition\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Rekognition\",\"description\":\"Amazon Rekognition makes it easy to add image and video analysis to\\n your applications.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-rekognition\"}},{\"id\":\"amazon-route-53\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Route53\",\"description\":\"Amazon Route 53 is a highly available and scalable cloud Domain Name System (DNS) web service.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-route-53\"}},{\"id\":\"amazon-security-hub\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Security Hub\",\"description\":\"AWS Security Hub provides you with a comprehensive view of your security state in AWS.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=amazon-security-hub\"}},{\"id\":\"amazon-shield\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Shield\",\"description\":\"AWS provides AWS Shield Standard and AWS Shield Advanced for protection against DDoS attacks.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-shield\"}},{\"id\":\"amazon-sns\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon SNS\",\"description\":\"Amazon Simple Notification Service (SNS)\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Event Management\",\"Category::Log Collection\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-sns\"}},{\"id\":\"amazon-waf\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS WAF\",\"description\":\"AWS WAF is a web application firewall that helps protect your web applications\\n from common web exploits.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-waf\"}},{\"id\":\"amazon-storage-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Storage Gateway\",\"description\":\"Ensures secure and seamless integration between an organization's IT environment and AWS's storage infrastructure.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-storage-gateway\"}},{\"id\":\"amazon-swf\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon SWF\",\"description\":\"Amazon SWF helps developers build, run, and scale background jobs that have parallel or sequential steps.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-swf\"}},{\"id\":\"amazon-textract\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Textract\",\"description\":\"A machine learning service that automatically extracts text, handwriting, and data from scanned documents.\",\"categories\":[\"Category::AI/ML\",\"Category::AWS\",\"Category::Automation\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-textract\"}},{\"id\":\"amazon-transit-gateway\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS Transit Gateway\",\"description\":\"A network transit hub for interconnecting your virtual private clouds (VPCs) and on-premises networks.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-transit-gateway\"}},{\"id\":\"amazon-translate\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon Translate\",\"description\":\"A neural machine translation service that translates text between English and various other languages.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-translate\"}},{\"id\":\"amazon-vpn\",\"type\":\"integration\",\"attributes\":{\"title\":\"AWS VPN\",\"description\":\"AWS VPN lets you establish a secure and\\n private tunnel from your network or device to the AWS global network.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Network\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-vpn\"}},{\"id\":\"intercom\",\"type\":\"integration\",\"attributes\":{\"title\":\"Intercom\",\"description\":\"Gain insights into Intercom Admin activities, Data Events, Conversations, News Items, and Ticket data.\",\"categories\":[\"Category::Collaboration\",\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=intercom\"}},{\"id\":\"amazon-workspaces\",\"type\":\"integration\",\"attributes\":{\"title\":\"Amazon WorkSpaces\",\"description\":\"Amazon WorkSpaces is a fully managed, secure desktop computing service which runs on the AWS cloud.\",\"categories\":[\"Category::AWS\",\"Category::Cloud\",\"Category::Log Collection\",\"Offering::Integration\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=amazon-workspaces\"}},{\"id\":\"rapdev-solaris-agent\",\"type\":\"integration\",\"attributes\":{\"title\":\"Solaris Agent\",\"description\":\"Agent providing metrics for Solaris 10 and 11 on sparc and i86pc\",\"categories\":[\"Category::Marketplace\",\"Category::Oracle\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-solaris-agent/overview\"}},{\"id\":\"rapdev-sophos\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sophos\",\"description\":\"Monitor the health of your Sophos managed endpoints\",\"categories\":[\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-sophos/overview\"}},{\"id\":\"zigiwave-nutanix-integration\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nutanix\",\"description\":\"No-code integration between Datadog and Nutanix\",\"categories\":[\"Category::AI/ML\",\"Category::Event Management\",\"Category::Incidents\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Incidents\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/zigiwave-nutanix-integration/overview\"}},{\"id\":\"victorops\",\"type\":\"integration\",\"attributes\":{\"title\":\"VictorOps\",\"description\":\"Forward alerts to VictorOps teams\",\"categories\":[\"Category::Alerting\",\"Category::Notifications\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=victorops\"}},{\"id\":\"kitepipe-atomwatch\",\"type\":\"integration\",\"attributes\":{\"title\":\"Atturra AtomWatch\",\"description\":\"Monitor Boomi processes and infrastructure\",\"categories\":[\"Category::AWS\",\"Category::Alerting\",\"Category::Event Management\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Notifications\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/kitepipe-atomwatch/overview\"}},{\"id\":\"ivanti-nzta\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ivanti nZTA\",\"description\":\"Gain insights into Ivanti nZTA Logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=ivanti-nzta\"}},{\"id\":\"crest-data-systems-zoho-crm\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zoho CRM\",\"description\":\"Monitor Zoho CRM modules to track sales, customer interactions, and business operations efficiently.\",\"categories\":[\"Category::Collaboration\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-zoho-crm/overview\"}},{\"id\":\"crest-data-systems-anomali-threatstream\",\"type\":\"integration\",\"attributes\":{\"title\":\"Anomali ThreatStream\",\"description\":\"Monitor Anomali ThreatStream Observables & Incident ThreatModel events\",\"categories\":[\"Category::Alerting\",\"Category::Data Stores\",\"Category::Event Management\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-anomali-threatstream/overview\"}},{\"id\":\"github\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitHub\",\"description\":\"GitHub is a web-based hosting service for software development projects that use the Git revision control system.\",\"categories\":[\"Category::Automation\",\"Category::Developer Tools\",\"Category::Source Control\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=github\"}},{\"id\":\"crest-data-systems-splunk-to-datadog-migration\",\"type\":\"integration\",\"attributes\":{\"title\":\"Splunk to Datadog Migration Service\",\"description\":\"Professional service to ensure seamless and swift Splunk to Datadog migration\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-splunk-to-datadog-migration/overview\"}},{\"id\":\"instabug\",\"type\":\"integration\",\"attributes\":{\"title\":\"Luciq\",\"description\":\"Monitor and track your mobile app health and performance.\",\"categories\":[\"Category::Alerting\",\"Category::Issue Tracking\",\"Offering::UI Extension\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=instabug\"}},{\"id\":\"split-rum\",\"type\":\"integration\",\"attributes\":{\"title\":\"Split - RUM\",\"description\":\"Enriches your RUM data with your feature flags from Split\",\"categories\":[\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Issue Tracking\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=split-rum\"}},{\"id\":\"firefly\",\"type\":\"integration\",\"attributes\":{\"title\":\"Firefly\",\"description\":\"Bring your cloud Up-to-Code\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Configuration & Deployment\",\"Category::Developer Tools\",\"Category::Notifications\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=firefly\"}},{\"id\":\"trend-micro-vision-one-xdr\",\"type\":\"integration\",\"attributes\":{\"title\":\"Trend Micro Vision One XDR\",\"description\":\"Gain insights into Trend Micro Vision One XDR logs\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=trend-micro-vision-one-xdr\"}},{\"id\":\"zero-networks\",\"type\":\"integration\",\"attributes\":{\"title\":\"Zero Networks\",\"description\":\"Gain insights into Zero Networks audit and network activities logs.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=zero-networks\"}},{\"id\":\"checkpoint-harmony-email-and-collaboration\",\"type\":\"integration\",\"attributes\":{\"title\":\"Check Point Harmony Email & Collaboration\",\"description\":\"Gain insights into Check Point Harmony Email & Collaboration security events\",\"categories\":[\"Category::Collaboration\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=checkpoint-harmony-email-and-collaboration\"}},{\"id\":\"crest-data-systems-rudder\",\"type\":\"integration\",\"attributes\":{\"title\":\"Rudder\",\"description\":\"Collect compliance data, directives, groups, techniques, rules, nodes, vulnerabilities, and user telemetry from Rudder.\",\"categories\":[\"Category::Automation\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-rudder/overview\"}},{\"id\":\"watchguard-firebox\",\"type\":\"integration\",\"attributes\":{\"title\":\"WatchGuard Firebox\",\"description\":\"Gain insights into WatchGuard Firebox events\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=watchguard-firebox\"}},{\"id\":\"onepane\",\"type\":\"integration\",\"attributes\":{\"title\":\"Onepane\",\"description\":\"Onepane is an GenAI tool that helps you faster incident resolution with automated root cause analysis.\",\"categories\":[\"Category::AI/ML\",\"Category::AWS\",\"Category::Automation\",\"Category::Azure\",\"Category::Cloud\",\"Category::Event Management\",\"Category::Incidents\",\"Offering::Integration\",\"Queried Data Type::Events\",\"Queried Data Type::Incidents\",\"Submitted Data Type::Events\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=onepane\"}},{\"id\":\"crest-data-systems-picus-security\",\"type\":\"integration\",\"attributes\":{\"title\":\"Picus Security\",\"description\":\"Gather logs for inventory data, as well as threat and activity logs from Picus Security.\",\"categories\":[\"Category::Marketplace\",\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-picus-security/overview\"}},{\"id\":\"shopify\",\"type\":\"integration\",\"attributes\":{\"title\":\"Shopify\",\"description\":\"Gain insights into Shopify Event, Product, Customer and Order logs.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=shopify\"}},{\"id\":\"github-copilot\",\"type\":\"integration\",\"attributes\":{\"title\":\"GitHub Copilot\",\"description\":\"Track license distribution, monitor adoption trends, and analyze developer engagement for Copilot features.\",\"categories\":[\"Category::AI/ML\",\"Category::Collaboration\",\"Category::Developer Tools\",\"Category::Metrics\",\"Category::Source Control\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=github-copilot\"}},{\"id\":\"lustre\",\"type\":\"integration\",\"attributes\":{\"title\":\"Lustre\",\"description\":\"Monitor performance, health, and operations across all nodes in your Lustre cluster.\",\"categories\":[\"Category::Data Stores\",\"Category::Log Collection\",\"Category::OS & System\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=lustre\"}},{\"id\":\"power-bi\",\"type\":\"integration\",\"attributes\":{\"title\":\"Power BI\",\"description\":\"End-to-end data lineage for Power BI reports and dashboards\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=power-bi\"}},{\"id\":\"crest-data-systems-armis\",\"type\":\"integration\",\"attributes\":{\"title\":\"Armis Centrix\",\"description\":\"Gather logs for Alerts, Vulnerabilities, Devices, Device Applications, Policies and Users from Armis.\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-armis/overview\"}},{\"id\":\"klaviyo\",\"type\":\"integration\",\"attributes\":{\"title\":\"Klaviyo\",\"description\":\"Gain insights into Klaviyo marketing and eCommerce events.\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=klaviyo\"}},{\"id\":\"eset-protect\",\"type\":\"integration\",\"attributes\":{\"title\":\"ESET Protect\",\"description\":\"Gain insights into ESET Protect Events.\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=eset-protect\"}},{\"id\":\"itunified-ug-dbxplorer\",\"type\":\"integration\",\"attributes\":{\"title\":\"dbXplorer for Oracle DBMS\",\"description\":\"Monitor and analyze Oracle database health and performance\",\"categories\":[\"Category::Alerting\",\"Category::Cloud\",\"Category::Data Stores\",\"Category::Marketplace\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/itunified-ug-dbxplorer/overview\"}},{\"id\":\"logicinsight-nutanix-core\",\"type\":\"integration\",\"attributes\":{\"title\":\"Nutanix\",\"description\":\"Monitor your Nutanix environment to understand key performance metrics and critical system information\",\"categories\":[\"Category::Alerting\",\"Category::Event Management\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/logicinsight-nutanix-core/overview\"}},{\"id\":\"retool-retool\",\"type\":\"integration\",\"attributes\":{\"title\":\"Retool\",\"description\":\"Build, deploy, and scale secure internal tools\",\"categories\":[\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/retool-retool/overview\"}},{\"id\":\"azure-ai-foundry\",\"type\":\"integration\",\"attributes\":{\"title\":\"Azure AI Foundry\",\"description\":\"Use the Azure AI Foundry integration to track the usage and performance of your model deployments.\",\"categories\":[\"Category::Azure\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=azure-ai-foundry\"}},{\"id\":\"twingate\",\"type\":\"integration\",\"attributes\":{\"title\":\"Twingate\",\"description\":\"Twingate provides a modern, Zero Trust alternative to corporate VPNs\",\"categories\":[\"Category::Network\",\"Category::Security\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=twingate\"}},{\"id\":\"uptycs\",\"type\":\"integration\",\"attributes\":{\"title\":\"Uptycs\",\"description\":\"Collect alerts and detection from Uptycs\",\"categories\":[\"Category::Alerting\",\"Category::Cloud\",\"Category::Collaboration\",\"Category::Compliance\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Events\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=uptycs\"}},{\"id\":\"rapdev-reporter\",\"type\":\"integration\",\"attributes\":{\"title\":\"Reporter\",\"description\":\"Generate Email reports for any Datadog dashboard\",\"categories\":[\"Category::Marketplace\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-reporter/overview\"}},{\"id\":\"rapdev-glassfish\",\"type\":\"integration\",\"attributes\":{\"title\":\"Glassfish\",\"description\":\"Monitor the health of your Glassfish applications and services\",\"categories\":[\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-glassfish/overview\"}},{\"id\":\"rapdev-gmeet\",\"type\":\"integration\",\"attributes\":{\"title\":\"Google Meet\",\"description\":\"Visualize Google Meet meeting details and performance as metrics and events.\",\"categories\":[\"Category::Collaboration\",\"Category::Event Management\",\"Category::Marketplace\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-gmeet/overview\"}},{\"id\":\"rapdev-ibm-cloud\",\"type\":\"integration\",\"attributes\":{\"title\":\"IBM Cloud\",\"description\":\"Monitor your IBM Cloud Account resources and activity\",\"categories\":[\"Category::Cloud\",\"Category::Containers\",\"Category::Marketplace\",\"Category::Orchestration\",\"Category::Provisioning\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-ibm-cloud/overview\"}},{\"id\":\"oci-integration\",\"type\":\"integration\",\"attributes\":{\"title\":\"Oracle Integration (OIC)\",\"description\":\"Oracle Integration is a business automation platform with a portfolio of integration and automation capabilities.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-integration\"}},{\"id\":\"blink-blink\",\"type\":\"integration\",\"attributes\":{\"title\":\"Blink\",\"description\":\"Blink is a no-code automation platform for security and infrastructure\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Marketplace\",\"Category::Notifications\",\"Category::Orchestration\",\"Category::Security\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/blink-blink/overview\"}},{\"id\":\"modal\",\"type\":\"integration\",\"attributes\":{\"title\":\"Modal\",\"description\":\"Collect logs and metrics for your Modal applications\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Log Collection\",\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=modal\"}},{\"id\":\"oci-recovery-service\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Recovery Service\",\"description\":\"OCI Recovery Service provides automated backup and recovery for Oracle databases running on Oracle Cloud Infrastructure.\",\"categories\":[\"Category::Cloud\",\"Category::Data Stores\",\"Category::Metrics\",\"Category::Oracle\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-recovery-service\"}},{\"id\":\"oci-secrets\",\"type\":\"integration\",\"attributes\":{\"title\":\"OCI Secrets\",\"description\":\"OCI Secrets provide secure storage and management of passwords, certificates, SSH keys, and API keys.\",\"categories\":[\"Category::Cloud\",\"Category::Metrics\",\"Category::Oracle\",\"Category::Security\",\"Offering::Integration\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=oci-secrets\"}},{\"id\":\"tanium\",\"type\":\"integration\",\"attributes\":{\"title\":\"Tanium\",\"description\":\"Gain insights into Tanium threat response alerts and audit activities\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=tanium\"}},{\"id\":\"jfrog-platform\",\"type\":\"integration\",\"attributes\":{\"title\":\"JFrog Platform (Self-hosted)\",\"description\":\"View and analyze JFrog Artifactory and Xray Logs, Violations and Metrics\",\"categories\":[\"Category::Containers\",\"Category::Log Collection\",\"Category::Metrics\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=jfrog-platform\"}},{\"id\":\"box\",\"type\":\"integration\",\"attributes\":{\"title\":\"Box\",\"description\":\"Gain insights into Box enterprise events\",\"categories\":[\"Category::Collaboration\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=box\"}},{\"id\":\"checkpoint-harmony-endpoint\",\"type\":\"integration\",\"attributes\":{\"title\":\"Checkpoint Harmony Endpoint\",\"description\":\"Checkpoint Harmony Endpoint is an endpoint security designed to prevent, detect, and respond to threats on user devices\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Queried Data Type::Logs\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":true},\"links\":{\"self\":\"/integrations?integrationId=checkpoint-harmony-endpoint\"}},{\"id\":\"fiddler-ai-license\",\"type\":\"integration\",\"attributes\":{\"title\":\"Fiddler AI\",\"description\":\"Build trust into AI - Fiddler's Model Performance Management Platform\",\"categories\":[\"Category::AI/ML\",\"Category::Alerting\",\"Category::Marketplace\",\"Offering::Software License\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/fiddler-ai-license/overview\"}},{\"id\":\"crest-data-systems-ivanti-uem\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ivanti UEM\",\"description\":\"Monitor the performance and usage of Ivanti UEM devices\",\"categories\":[\"Category::Automation\",\"Category::Event Management\",\"Category::Marketplace\",\"Category::Mobile\",\"Offering::Integration\",\"Submitted Data Type::Events\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-ivanti-uem/overview\"}},{\"id\":\"taskcall\",\"type\":\"integration\",\"attributes\":{\"title\":\"TaskCall\",\"description\":\"Monitor and centralize Datadog incidents with TaskCall\",\"categories\":[\"Category::Alerting\",\"Category::Collaboration\",\"Category::Incidents\",\"Category::Issue Tracking\",\"Category::Notifications\",\"Offering::Integration\",\"Queried Data Type::Incidents\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=taskcall\"}},{\"id\":\"crest-data-systems-vectra\",\"type\":\"integration\",\"attributes\":{\"title\":\"Vectra Cloud\",\"description\":\"Gather logs for entities, detections, entity events, and detection events from Vectra Cloud.\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Marketplace\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/crest-data-systems-vectra/overview\"}},{\"id\":\"sofy\",\"type\":\"integration\",\"attributes\":{\"title\":\"Sofy\",\"description\":\"Monitors device metrics during automated test case runs\",\"categories\":[\"Category::Mobile\",\"Category::Testing\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=sofy\"}},{\"id\":\"loadrunner-professional\",\"type\":\"integration\",\"attributes\":{\"title\":\"LoadRunner Professional\",\"description\":\"Send LoadRunner Professional metrics and information about scenario runs to Datadog\",\"categories\":[\"Category::Testing\",\"Offering::Integration\",\"Submitted Data Type::Logs\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=loadrunner-professional\"}},{\"id\":\"blink\",\"type\":\"integration\",\"attributes\":{\"title\":\"Blink\",\"description\":\"Blink is a no-code automation platform for security and infrastructure.\",\"categories\":[\"Category::Automation\",\"Category::Cloud\",\"Category::Incidents\",\"Category::Notifications\",\"Category::Orchestration\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=blink\"}},{\"id\":\"obsidian-security\",\"type\":\"integration\",\"attributes\":{\"title\":\"Obsidian Security\",\"description\":\"Gain insights into Obsidian Security Platform alerts, events and audit logs.\",\"categories\":[\"Category::Cloud\",\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=obsidian-security\"}},{\"id\":\"adyen\",\"type\":\"integration\",\"attributes\":{\"title\":\"Adyen\",\"description\":\"Gain insights into Adyen Transactions, Disputes, and Payouts data\",\"categories\":[\"Category::Log Collection\",\"Offering::Integration\",\"Submitted Data Type::Logs\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=adyen\"}},{\"id\":\"performetriks-composer\",\"type\":\"integration\",\"attributes\":{\"title\":\"Composer\",\"description\":\"Configuration management for your Datadog environment\",\"categories\":[\"Category::Marketplace\",\"Offering::Integration\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/performetriks-composer/overview\"}},{\"id\":\"rapdev-ansible-automation-platform\",\"type\":\"integration\",\"attributes\":{\"title\":\"Ansible Automation Platform\",\"description\":\"Monitor Ansible Automation Platform Usage, Jobs, and Events\",\"categories\":[\"Category::Developer Tools\",\"Category::Marketplace\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-ansible-automation-platform/overview\"}},{\"id\":\"cloudgen-firewall\",\"type\":\"integration\",\"attributes\":{\"title\":\"Barracuda CloudGen Firewall\",\"description\":\"Barracuda CloudGen Firewall is an NGFW that protects networks and Internet traffic\",\"categories\":[\"Category::Log Collection\",\"Category::Security\",\"Offering::Integration\",\"Queried Data Type::Logs\",\"Submitted Data Type::Logs\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=cloudgen-firewall\"}},{\"id\":\"rapdev-managed-soc\",\"type\":\"integration\",\"attributes\":{\"title\":\"RapDev Managed Security Operations Center (SOC)\",\"description\":\"Utilize RapDev's security and Datadog expertise to manage and scale your security environment\",\"categories\":[\"Category::Marketplace\",\"Offering::Professional Service\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/marketplace/app/rapdev-managed-soc/overview\"}},{\"id\":\"mailchimp\",\"type\":\"integration\",\"attributes\":{\"title\":\"Mailchimp\",\"description\":\"Monitor the performance and usage of Mailchimp Campaigns and Audiences.\",\"categories\":[\"Category::Metrics\",\"Offering::Integration\",\"Submitted Data Type::Metrics\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=mailchimp\"}},{\"id\":\"upstash\",\"type\":\"integration\",\"attributes\":{\"title\":\"Upstash\",\"description\":\"Visualize metrics for Upstash resources\",\"categories\":[\"Category::AI/ML\",\"Category::Cloud\",\"Category::Data Stores\",\"Offering::Integration\",\"Submitted Data Type::Metrics\",\"Supported OS::Linux\",\"Supported OS::Windows\",\"Supported OS::macOS\"],\"installed\":false},\"links\":{\"self\":\"/integrations?integrationId=upstash\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Integrations returns \"Successful Response.\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/ip-allowlist.json b/test-server-data/v2/ip-allowlist.json new file mode 100644 index 0000000000..bd752b2b41 --- /dev/null +++ b/test-server-data/v2/ip-allowlist.json @@ -0,0 +1,207 @@ +{ + "feature": "IP Allowlist", + "recordings": [ + { + "feature": "IP Allowlist", + "frozen_at": "2023-02-10T16:26:52.192Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "entries": [ + { + "data": { + "attributes": { + "cidr_block": "127.0.0.1", + "note": "Test-Get_IP_Allowlist_returns_OK_response-1676046412" + }, + "type": "ip_allowlist_entry" + } + }, + { + "data": { + "attributes": { + "cidr_block": "0.0.0.0", + "note": "Test-Get_IP_Allowlist_returns_OK_response-1676046412" + }, + "type": "ip_allowlist_entry" + } + } + ] + }, + "type": "ip_allowlist" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/ip_allowlist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"ip_allowlist\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"attributes\":{\"enabled\":false,\"entries\":[{\"data\":{\"attributes\":{\"note\":\"Test-Get_IP_Allowlist_returns_OK_response-1676046412\",\"created_at\":\"2023-02-10T16:20:06.266709+00:00\",\"modified_at\":\"2023-02-10T16:26:52.418620+00:00\",\"cidr_block\":\"127.0.0.1/32\"},\"type\":\"ip_allowlist_entry\",\"id\":\"deae2f83-f7e0-41a6-89a1-a1708494df30\"}},{\"data\":{\"attributes\":{\"note\":\"Test-Get_IP_Allowlist_returns_OK_response-1676046412\",\"created_at\":\"2023-02-10T16:26:52.422938+00:00\",\"modified_at\":\"2023-02-10T16:26:52.422938+00:00\",\"cidr_block\":\"0.0.0.0/32\"},\"type\":\"ip_allowlist_entry\",\"id\":\"39bb36cd-9b44-489c-80a8-bdf0291617c9\"}}]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ip_allowlist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"ip_allowlist\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"attributes\":{\"enabled\":false,\"entries\":[{\"data\":{\"attributes\":{\"note\":\"Test-Get_IP_Allowlist_returns_OK_response-1676046412\",\"created_at\":\"2023-02-10T16:26:52.422938+00:00\",\"modified_at\":\"2023-02-10T16:26:52.422938+00:00\",\"cidr_block\":\"0.0.0.0/32\"},\"type\":\"ip_allowlist_entry\",\"id\":\"39bb36cd-9b44-489c-80a8-bdf0291617c9\"}},{\"data\":{\"attributes\":{\"note\":\"Test-Get_IP_Allowlist_returns_OK_response-1676046412\",\"created_at\":\"2023-02-10T16:20:06.266709+00:00\",\"modified_at\":\"2023-02-10T16:26:52.418620+00:00\",\"cidr_block\":\"127.0.0.1/32\"},\"type\":\"ip_allowlist_entry\",\"id\":\"deae2f83-f7e0-41a6-89a1-a1708494df30\"}}]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get IP Allowlist returns \"OK\" response", + "version": "v2" + }, + { + "feature": "IP Allowlist", + "frozen_at": "2023-02-10T16:26:52.904Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "entries": [] + }, + "type": "ip_allowlist" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/ip_allowlist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Cannot enable or keep enabled an IP Allowlist without the current IP address in it\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update IP Allowlist returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "IP Allowlist", + "frozen_at": "2023-02-10T16:26:53.056Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "entries": [] + }, + "type": "ip_allowlist" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/ip_allowlist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"ip_allowlist\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"attributes\":{\"enabled\":false,\"entries\":[]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "entries": [ + { + "data": { + "attributes": { + "cidr_block": "127.0.0.1", + "note": "Test-Update_IP_Allowlist_returns_OK_response-1676046413" + }, + "type": "ip_allowlist_entry" + } + } + ] + }, + "type": "ip_allowlist" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/ip_allowlist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"ip_allowlist\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"attributes\":{\"enabled\":false,\"entries\":[{\"data\":{\"attributes\":{\"note\":\"Test-Update_IP_Allowlist_returns_OK_response-1676046413\",\"created_at\":\"2023-02-10T16:26:53.343754+00:00\",\"modified_at\":\"2023-02-10T16:26:53.343754+00:00\",\"cidr_block\":\"127.0.0.1/32\"},\"type\":\"ip_allowlist_entry\",\"id\":\"41678b10-3555-4dba-abbd-754d294aadc1\"}}]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update IP Allowlist returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/key-management.json b/test-server-data/v2/key-management.json new file mode 100644 index 0000000000..1fd900f3c2 --- /dev/null +++ b/test-server-data/v2/key-management.json @@ -0,0 +1,1673 @@ +{ + "feature": "Key Management", + "recordings": [ + { + "feature": "Key Management", + "frozen_at": "2026-04-08T16:45:23.208Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "expires_at": "2027-04-08T16:45:23.208Z", + "name": "Test-Create_a_personal_access_token_returns_Created_response-1775666723", + "scopes": [ + "dashboards_read" + ] + }, + "type": "personal_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/personal_access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"da1bd5f8-847b-4aec-a33d-11b04ebde244\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-08T16:45:23.302611856Z\",\"expires_at\":\"2027-04-08T16:45:23.208Z\",\"key\":\"xxxxx_xxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxxx\",\"name\":\"Test-Create_a_personal_access_token_returns_Created_response-1775666723\",\"public_portion\":\"6dZ2zcpumTdlnHIgx2SlHA\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/personal_access_tokens/da1bd5f8-847b-4aec-a33d-11b04ebde244", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a personal access token returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2022-05-12T09:52:00.062Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_an_API_key_returns_Created_response-1652349120" + }, + "type": "api_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/api_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"api_keys\",\"attributes\":{\"created_at\":\"2022-05-12T09:52:00.698721+00:00\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"last4\":\"xxxx\",\"modified_at\":\"2022-05-12T09:52:00.698721+00:00\",\"name\":\"Test-Create_an_API_key_returns_Created_response-1652349120\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}},\"id\":\"f625994a-4ee7-4967-b08c-7067d1f1cdac\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/api_keys/f625994a-4ee7-4967-b08c-7067d1f1cdac", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an API key returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2022-05-12T09:52:02.489Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_an_Application_key_with_scopes_for_current_user_returns_Created_response-1652349122", + "scopes": [ + "dashboards_read", + "dashboards_write", + "dashboards_public_share" + ] + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"aae6e868-4746-46f2-a457-5b39d35b0c30\",\"attributes\":{\"name\":\"Test-Create_an_Application_key_with_scopes_for_current_user_returns_Created_response-1652349122\",\"created_at\":\"2022-05-12T09:52:03.065338+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":[\"dashboards_read\",\"dashboards_write\",\"dashboards_public_share\"]},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/aae6e868-4746-46f2-a457-5b39d35b0c30", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an Application key with scopes for current user returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2023-10-16T13:55:48.764Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_an_application_key_for_current_user_returns_Created_response-1697464548" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"513684db-d430-45bd-8239-0715320c9488\",\"attributes\":{\"name\":\"Test-Create_an_application_key_for_current_user_returns_Created_response-1697464548\",\"created_at\":\"2023-10-16T13:55:49.254647+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/513684db-d430-45bd-8239-0715320c9488", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an application key for current user returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2022-05-12T09:52:03.757Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_an_API_key_returns_No_Content_response-1652349123" + }, + "type": "api_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/api_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"api_keys\",\"attributes\":{\"created_at\":\"2022-05-12T09:52:04.306086+00:00\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"last4\":\"xxxx\",\"modified_at\":\"2022-05-12T09:52:04.306086+00:00\",\"name\":\"Test-Delete_an_API_key_returns_No_Content_response-1652349123\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}},\"id\":\"67c58c24-e02f-4d1a-9c95-1e01d2544e5a\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/api_keys/67c58c24-e02f-4d1a-9c95-1e01d2544e5a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/api_keys/67c58c24-e02f-4d1a-9c95-1e01d2544e5a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"API key not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an API key returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2023-10-16T14:23:11.543Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_an_application_key_owned_by_current_user_returns_No_Content_response-1697466191" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"be94f6b2-1704-4126-a898-94d65f6f28d8\",\"attributes\":{\"name\":\"Test-Delete_an_application_key_owned_by_current_user_returns_No_Content_response-1697466191\",\"created_at\":\"2023-10-16T14:23:12.034758+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/be94f6b2-1704-4126-a898-94d65f6f28d8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/be94f6b2-1704-4126-a898-94d65f6f28d8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Application key not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an application key owned by current user returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2023-10-16T13:18:28.907Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_an_application_key_returns_No_Content_response-1697462308" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"c7a26dee-1619-4ed0-8d1a-0ae4ed94da29\",\"attributes\":{\"name\":\"Test-Delete_an_application_key_returns_No_Content_response-1697462308\",\"created_at\":\"2023-10-16T13:18:29.388862+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/application_keys/c7a26dee-1619-4ed0-8d1a-0ae4ed94da29", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/c7a26dee-1619-4ed0-8d1a-0ae4ed94da29", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Application key not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an application key returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2022-05-12T09:52:08.471Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Edit_an_API_key_returns_OK_response-1652349128" + }, + "type": "api_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/api_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"api_keys\",\"attributes\":{\"created_at\":\"2022-05-12T09:52:08.958834+00:00\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"last4\":\"xxxx\",\"modified_at\":\"2022-05-12T09:52:08.958834+00:00\",\"name\":\"Test-Edit_an_API_key_returns_OK_response-1652349128\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}},\"id\":\"929dfb7c-2309-46b4-bdfe-998dc339f2db\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Edit_an_API_key_returns_OK_response-1652349128" + }, + "id": "929dfb7c-2309-46b4-bdfe-998dc339f2db", + "type": "api_keys" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/api_keys/929dfb7c-2309-46b4-bdfe-998dc339f2db", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"api_keys\",\"attributes\":{\"created_at\":\"2022-05-12T09:52:08.958834+00:00\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"last4\":\"xxxx\",\"modified_at\":\"2022-05-12T09:52:08.958834+00:00\",\"name\":\"Test-Edit_an_API_key_returns_OK_response-1652349128\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}},\"id\":\"929dfb7c-2309-46b4-bdfe-998dc339f2db\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/api_keys/929dfb7c-2309-46b4-bdfe-998dc339f2db", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Edit an API key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2022-05-12T09:52:09.995Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Edit_an_application_key_owned_by_current_user_returns_OK_response-1652349129" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"30170613-5282-40db-83ae-232895165192\",\"attributes\":{\"name\":\"Test-Edit_an_application_key_owned_by_current_user_returns_OK_response-1652349129\",\"created_at\":\"2022-05-12T09:52:10.475750+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Edit_an_application_key_owned_by_current_user_returns_OK_response-1652349129-updated" + }, + "id": "30170613-5282-40db-83ae-232895165192", + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/current_user/application_keys/30170613-5282-40db-83ae-232895165192", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"30170613-5282-40db-83ae-232895165192\",\"attributes\":{\"name\":\"Test-Edit_an_application_key_owned_by_current_user_returns_OK_response-1652349129-updated\",\"created_at\":\"2022-05-12T09:52:10.475750+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/30170613-5282-40db-83ae-232895165192", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Edit an application key owned by current user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2022-05-12T09:52:11.536Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Edit_an_application_key_returns_OK_response-1652349131" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"27b9bda2-c2e1-46ae-9dea-bfad4fcd5000\",\"attributes\":{\"name\":\"Test-Edit_an_application_key_returns_OK_response-1652349131\",\"created_at\":\"2022-05-12T09:52:12.071707+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Edit_an_application_key_returns_OK_response-1652349131-updated" + }, + "id": "27b9bda2-c2e1-46ae-9dea-bfad4fcd5000", + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/application_keys/27b9bda2-c2e1-46ae-9dea-bfad4fcd5000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"27b9bda2-c2e1-46ae-9dea-bfad4fcd5000\",\"attributes\":{\"name\":\"Test-Edit_an_application_key_returns_OK_response-1652349131-updated\",\"created_at\":\"2022-05-12T09:52:12.071707+00:00\",\"last4\":\"xxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/27b9bda2-c2e1-46ae-9dea-bfad4fcd5000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Edit an application key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2025-09-08T09:24:42.052Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/api_keys/invalidId", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"API key not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get API key returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2025-09-08T09:24:42.741Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_API_key_returns_OK_response-1757323482" + }, + "type": "api_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/api_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"api_keys\",\"attributes\":{\"created_at\":\"2025-09-08T09:24:42.999350+00:00\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"last4\":\"xxxx\",\"modified_at\":\"2025-09-08T09:24:42.999350+00:00\",\"remote_config_read_enabled\":true,\"category\":\"default\",\"name\":\"Test-Get_API_key_returns_OK_response-1757323482\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}},\"id\":\"9286a10e-fe08-48ba-9884-8e26e7e67695\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/api_keys/9286a10e-fe08-48ba-9884-8e26e7e67695", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"api_keys\",\"attributes\":{\"created_at\":\"2025-09-08T09:24:42.999351+00:00\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"last4\":\"xxxx\",\"modified_at\":\"2025-09-08T09:24:42.999351+00:00\",\"remote_config_read_enabled\":true,\"category\":\"default\",\"name\":\"Test-Get_API_key_returns_OK_response-1757323482\",\"date_last_used\":null,\"used_in_last_24_hours\":false,\"last_used_date\":{\"timestamp\":null,\"description\":\"Timestamp of when this key was last used in the past ninety (90) days, null if no recent usage\"}},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}},\"id\":\"9286a10e-fe08-48ba-9884-8e26e7e67695\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/api_keys/9286a10e-fe08-48ba-9884-8e26e7e67695", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get API key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2026-04-08T16:45:35.914Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "expires_at": "2027-04-08T16:45:35.914Z", + "name": "Test-Get_a_personal_access_token_returns_OK_response-1775666735", + "scopes": [ + "dashboards_read" + ] + }, + "type": "personal_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/personal_access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6ada9c44-0b7f-4e35-826b-ccecd6d358d5\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-08T16:45:36.006189144Z\",\"expires_at\":\"2027-04-08T16:45:35.914Z\",\"key\":\"xxxxx_xxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxxx\",\"name\":\"Test-Get_a_personal_access_token_returns_OK_response-1775666735\",\"public_portion\":\"3Fd5hG1s1rf27qn2E4nNdF\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/personal_access_tokens/6ada9c44-0b7f-4e35-826b-ccecd6d358d5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6ada9c44-0b7f-4e35-826b-ccecd6d358d5\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-08T16:45:36.006189Z\",\"expires_at\":\"2027-04-08T16:45:35.914Z\",\"last_used_at\":null,\"name\":\"Test-Get_a_personal_access_token_returns_OK_response-1775666735\",\"public_portion\":\"3Fd5hG1s1rf27qn2E4nNdF\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/personal_access_tokens/6ada9c44-0b7f-4e35-826b-ccecd6d358d5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a personal access token returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2025-09-08T09:24:43.356Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_all_API_keys_returns_OK_response-1757323483" + }, + "type": "api_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/api_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"api_keys\",\"attributes\":{\"created_at\":\"2025-09-08T09:24:43.558793+00:00\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"last4\":\"xxxx\",\"modified_at\":\"2025-09-08T09:24:43.558793+00:00\",\"remote_config_read_enabled\":true,\"category\":\"default\",\"name\":\"Test-Get_all_API_keys_returns_OK_response-1757323483\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}},\"id\":\"84dbd164-f3f5-4f30-ac93-e12b27adeada\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/api_keys", + "query": [ + [ + "filter", + "Test-Get_all_API_keys_returns_OK_response-1757323483" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"api_keys\",\"attributes\":{\"created_at\":\"2025-09-08T09:24:43.558793+00:00\",\"last4\":\"xxxx\",\"modified_at\":\"2025-09-08T09:24:43.558793+00:00\",\"remote_config_read_enabled\":true,\"category\":\"default\",\"name\":\"Test-Get_all_API_keys_returns_OK_response-1757323483\",\"date_last_used\":null,\"used_in_last_24_hours\":false,\"last_used_date\":{\"timestamp\":null,\"description\":\"Timestamp of when this key was last used in the past ninety (90) days, null if no recent usage\"}},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"modified_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}},\"id\":\"84dbd164-f3f5-4f30-ac93-e12b27adeada\"}],\"meta\":{\"page\":{\"total_filtered_count\":1},\"max_allowed\":200}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/api_keys/84dbd164-f3f5-4f30-ac93-e12b27adeada", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all API keys returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2025-09-08T09:24:46.730Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"application_keys\",\"id\":\"e177e012-5179-4275-ad0e-397d53348ee5\",\"attributes\":{\"name\":\"catdog-sync service\",\"created_at\":\"2025-08-06T14:21:34.802872+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-28T16:53:56.678679+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"50107ecc-d7af-4a88-9d95-a37bd20ce503\",\"attributes\":{\"name\":\"datadog-api-client-go DD_CLIENT_API_KEY\",\"created_at\":\"2025-04-30T22:10:30.959154+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T00:25:13.718317+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"d6ffc751-80f9-4933-ba74-ac6d23509a6f\",\"attributes\":{\"name\":\"datadog-api-client-java DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T13:17:07.875625+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T09:22:49.919514+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"232f3748-52e3-4361-9c3f-6f72bded74ac\",\"attributes\":{\"name\":\"datadog-api-client-python DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T12:37:32.126936+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T01:31:43.917639+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"84c30f49-92a7-43b4-a887-51ba5270ad1f\",\"attributes\":{\"name\":\"datadog-api-client-ruby DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T12:52:30.558770+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-06T02:26:31.159311+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"09af1103-53de-4b68-903a-192bc4eec199\",\"attributes\":{\"name\":\"datadog-api-client-rust DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T13:25:08.030358+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T05:18:42.594830+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"84b41420-c4f1-4f05-bede-629a9b2e04fc\",\"attributes\":{\"name\":\"datadog-api-client-typescript DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T13:11:18.380051+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T05:03:01.374951+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"85c63381-6392-57db-ab31-2e4772882785\",\"attributes\":{\"name\":\"datadog-api-spec gh\",\"created_at\":\"2021-04-16T11:21:35.770268+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"c35ac549-a8b3-4093-985f-2731bbdbbcd4\",\"attributes\":{\"name\":\"datadog-api-spec Live Validation\",\"created_at\":\"2023-10-04T14:20:53.771922+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T09:24:43.663279+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"c8e9bf49-dbeb-4c75-8930-725ed962c9f3\",\"attributes\":{\"name\":\"datadog-cloudformation-resources DD_TEST_CLIENT_APP_KEY\",\"created_at\":\"2025-04-30T19:13:37.837202+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"de508a6e-e038-47b4-83b3-5ff84e41e44a\",\"attributes\":{\"name\":\"datadog-cloudformation-resources secrets manager app key\",\"created_at\":\"2025-08-26T19:44:25.486264+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-26T23:53:23.269173+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"1d10bbfd-364d-4178-acf6-1580b10416d2\",\"attributes\":{\"name\":\"datadogpy DD_TEST_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T13:33:32.008184+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"b231bb6d-e3ee-5fa4-969d-03fea7293d15\",\"attributes\":{\"name\":\"Get app keys\",\"created_at\":\"2021-05-25T09:40:46.767264+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"d7b694b6-6b25-449c-a47a-8fbd8690a7fa\",\"attributes\":{\"name\":\"terraform-provider-datadog DD_CLIENT_APP_KEY\",\"created_at\":\"2025-04-30T18:59:48.903847+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T00:35:07.899044+00:00\"},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"33bfa2f1-822e-41e5-89e3-31321f80b50e\",\"attributes\":{\"name\":\"Test-Typescript-Create_an_Application_key_with_scopes_for_current_user_returns_Created_response-1754887332\",\"created_at\":\"2025-08-11T04:42:12.345571+00:00\",\"last4\":\"xxxx\",\"scopes\":[\"dashboards_read\",\"dashboards_write\",\"dashboards_public_share\"],\"last_used_at\":null},\"relationships\":{\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"b1311a26-9b14-4515-b1f6-1bab1f74e189\",\"attributes\":{\"name\":\"Test-Typescript-Get_an_application_key_returns_OK_response-1747739647\",\"created_at\":\"2025-05-20T11:14:07.823671+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"leak_information\":{\"data\":null}}}],\"meta\":{\"page\":{\"total_filtered_count\":16},\"max_allowed_per_user\":1000}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all application keys owned by current user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2025-09-08T09:24:46.907Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_all_application_keys_returns_OK_response-1757323486" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"d516f4ec-0722-488c-9500-2d812b93d9b9\",\"attributes\":{\"name\":\"Test-Get_all_application_keys_returns_OK_response-1757323486\",\"created_at\":\"2025-09-08T09:24:46.992326+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"application_keys\",\"id\":\"fdcdec64-ca51-4208-a259-0405192c6447\",\"attributes\":{\"name\":\"1PASSWORD_SHARED\",\"created_at\":\"2023-10-03T19:27:33.054116+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-06T19:03:18.487091+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"9b71ae71-2999-45b8-a22c-22ec0ceabae7\",\"attributes\":{\"name\":\"Action Platform Scoped\",\"created_at\":\"2024-12-11T20:38:37.215071+00:00\",\"last4\":\"xxxx\",\"scopes\":[\"connections_read\",\"connections_write\"],\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"1af44bbc-b4f7-44be-a7da-e6b01227f87b\",\"attributes\":{\"name\":\"anton\",\"created_at\":\"2023-01-13T18:28:47.292864+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"79762769-9352-11ed-a082-5215624996c0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"285d30e7-586f-4ac3-9fbe-c34f9d448161\",\"attributes\":{\"name\":\"Application Key for Anika Update 2\",\"created_at\":\"2024-07-30T20:57:12.498075+00:00\",\"last4\":\"xxxx\",\"scopes\":[\"user_access_manage\"],\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"a20c7506-3e28-11ef-8b83-5264320c310a\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"c1180d01-a542-42f1-ad48-b47daeb71217\",\"attributes\":{\"name\":\"AWS Integrations - Datadog Managed - frog@datadoghq.com\",\"created_at\":\"2025-08-04T20:36:40.704123+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"c563a370-e205-488b-b485-cbf9d77161dd\",\"attributes\":{\"name\":\"AWS Integrations - Datadog Managed - kevin.zou@datadoghq.com\",\"created_at\":\"2023-10-23T19:54:59.816202+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"d5bf7f0a-19b0-11ed-b0df-da7ad0900002\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"40087854-cd0d-4114-8f03-9c2598ad910e\",\"attributes\":{\"name\":\"AWS Integrations - Datadog Managed - thibault.viennot@datadoghq.com\",\"created_at\":\"2025-06-20T12:20:14.276950+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"48e5025b-e308-11ef-8171-2eb8c40554f1\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"f5aa63c8-2623-43c1-8b6b-a05276589f47\",\"attributes\":{\"name\":\"Azure Integrations - Datadog Managed - kevin.zou@datadoghq.com\",\"created_at\":\"2023-09-14T21:02:41.220686+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"d5bf7f0a-19b0-11ed-b0df-da7ad0900002\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"27637d72-e5d6-4951-ba2e-484ff3aadc59\",\"attributes\":{\"name\":\"carlos DD_TEST_CLIENT_APP_KEY\",\"created_at\":\"2025-07-07T09:30:48.082564+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-15T09:36:57.008162+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"7d7298a6-5b14-11f0-89c7-eef2b9bf88cb\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"e177e012-5179-4275-ad0e-397d53348ee5\",\"attributes\":{\"name\":\"catdog-sync service\",\"created_at\":\"2025-08-06T14:21:34.802872+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-28T16:53:56.678679+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"50107ecc-d7af-4a88-9d95-a37bd20ce503\",\"attributes\":{\"name\":\"datadog-api-client-go DD_CLIENT_API_KEY\",\"created_at\":\"2025-04-30T22:10:30.959154+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T00:25:13.718317+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"d6ffc751-80f9-4933-ba74-ac6d23509a6f\",\"attributes\":{\"name\":\"datadog-api-client-java DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T13:17:07.875625+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T09:22:49.919514+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"232f3748-52e3-4361-9c3f-6f72bded74ac\",\"attributes\":{\"name\":\"datadog-api-client-python DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T12:37:32.126936+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T01:31:43.917639+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"84c30f49-92a7-43b4-a887-51ba5270ad1f\",\"attributes\":{\"name\":\"datadog-api-client-ruby DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T12:52:30.558770+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-06T02:26:31.159311+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"09af1103-53de-4b68-903a-192bc4eec199\",\"attributes\":{\"name\":\"datadog-api-client-rust DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T13:25:08.030358+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T05:18:42.594830+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"84b41420-c4f1-4f05-bede-629a9b2e04fc\",\"attributes\":{\"name\":\"datadog-api-client-typescript DD_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T13:11:18.380051+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T05:03:01.374951+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"85c63381-6392-57db-ab31-2e4772882785\",\"attributes\":{\"name\":\"datadog-api-spec gh\",\"created_at\":\"2021-04-16T11:21:35.770268+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"c35ac549-a8b3-4093-985f-2731bbdbbcd4\",\"attributes\":{\"name\":\"datadog-api-spec Live Validation\",\"created_at\":\"2023-10-04T14:20:53.771922+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-08T09:24:47.087459+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"c8e9bf49-dbeb-4c75-8930-725ed962c9f3\",\"attributes\":{\"name\":\"datadog-cloudformation-resources DD_TEST_CLIENT_APP_KEY\",\"created_at\":\"2025-04-30T19:13:37.837202+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"de508a6e-e038-47b4-83b3-5ff84e41e44a\",\"attributes\":{\"name\":\"datadog-cloudformation-resources secrets manager app key\",\"created_at\":\"2025-08-26T19:44:25.486264+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-26T23:53:23.269173+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"1d10bbfd-364d-4178-acf6-1580b10416d2\",\"attributes\":{\"name\":\"datadogpy DD_TEST_CLIENT_APP_KEY\",\"created_at\":\"2025-05-01T13:33:32.008184+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"8e27b1f1-acce-4be6-b54e-e1ded3274f9a\",\"attributes\":{\"name\":\"dd_auth_cli-14BApD1eN6d2ogBGozyZFMtoJYX6OEsK_F9MAMiAOjY\",\"created_at\":\"2025-06-24T08:22:49.645306+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"f23c5e6a-1f99-11f0-beba-3e2533bbf89d\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"84bdce07-8e8c-4989-b34d-f06b2325b2a4\",\"attributes\":{\"name\":\"dd_auth_cli-1GEHTD5brrIh5hHy1n3Cp5dJ7M2XTOB_2dC2b6jLgn4\",\"created_at\":\"2025-06-26T06:12:24.454411+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"f23c5e6a-1f99-11f0-beba-3e2533bbf89d\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"05623c54-3b8f-45e1-ade0-d970b91ffcaf\",\"attributes\":{\"name\":\"dd_auth_cli-1nXv9OeNV8UI21xPe69VxM1EvRZAF3rDAOyz2s3UOZo\",\"created_at\":\"2025-05-13T06:13:34.288539+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"bc2bac8c-0b78-11f0-8b67-c24ce8498984\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"8cb405cc-9192-42f5-9855-1176309466f2\",\"attributes\":{\"name\":\"dd_auth_cli-1qpml3DJtC5vHX9V2alMkmpfuH-YacPORu1e160y92M\",\"created_at\":\"2025-05-26T17:22:53.515596+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"ebfc3d41-c9fa-41fa-aeb9-bb42def532b0\",\"attributes\":{\"name\":\"dd_auth_cli-1vZevdCmh8C_vexcjAgxX3nd4WB8lGjhgeYnh2nR02w\",\"created_at\":\"2025-08-08T14:49:17.023663+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"cc13a65b-c196-4f61-ad76-79dfe5f67517\",\"attributes\":{\"name\":\"dd_auth_cli-3l17qRITcGXPcmXmwB_4QQ1jOXOAPot0TZLnJs5lWyc\",\"created_at\":\"2025-08-25T15:07:25.998804+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-25T15:10:28.996108+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"2ae6567c-a870-49b3-89b6-32a7f1cabeca\",\"attributes\":{\"name\":\"dd_auth_cli-3ur7ra0_6tAvNYt9ReIDDeOcIoJudFjNmMlB8Z39vjw\",\"created_at\":\"2025-07-16T08:31:59.244464+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-16T12:31:57.672127+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"11f536b0-7340-43f7-8a9f-0b109bc5fef9\",\"attributes\":{\"name\":\"dd_auth_cli-677Bs7RQ0mbuqRcHCg727OyXjvXE19l5P3w0YCGrtYI\",\"created_at\":\"2025-08-06T19:59:46.341371+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"37a74f9a-4271-43b2-b2d0-03aa8cf71235\",\"attributes\":{\"name\":\"dd_auth_cli-6AjApR9sFCGQcHGiCyZE4SH5AaloTj2pNkZEnnhMd-0\",\"created_at\":\"2025-08-08T14:42:13.744288+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-08T14:42:14.806973+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"8755a109-600e-4d84-86aa-2dab70e7939b\",\"attributes\":{\"name\":\"dd_auth_cli-6ch5NS2AEv8c6ZdMEKdWzv1j5dWAu0cbTzJ3M9Kpxzg\",\"created_at\":\"2025-05-20T08:01:21.856112+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"6bb27921-df1b-11ef-94f5-1629c267ca5b\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"919d81dd-07b9-41c2-a3b3-0aca47acb9db\",\"attributes\":{\"name\":\"dd_auth_cli-6dI-6m5r81vMdoiFgjIutCnonj5ASOlwLNuOvJCMV5g\",\"created_at\":\"2025-06-13T20:23:35.865392+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"31af266d-767d-4ba7-a876-513a783553cc\",\"attributes\":{\"name\":\"dd_auth_cli-8o0polv-CeYBIiqpA7SvwSFDCsUWHyatN6WHLU-KqiI\",\"created_at\":\"2025-08-06T20:06:05.826919+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-06T20:06:06.946211+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"d306648b-4c25-467b-8a18-dc1c423d6878\",\"attributes\":{\"name\":\"dd_auth_cli-aCoZ-az9981vfSpnQbwi_FuQE7EtDR_wCodYPOrgGuM\",\"created_at\":\"2025-07-15T22:16:33.439179+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-16T15:55:34.820097+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"f3f4dde5-5ccc-4c5d-a234-38ea6b5e4b53\",\"attributes\":{\"name\":\"dd_auth_cli-AFVSnSWVuvck6f3IeNERel5Lj4DQPhpnZ-bEvU8ezss\",\"created_at\":\"2025-08-19T13:09:31.629038+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-19T13:09:38.488393+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"cdeaca14-15ad-4886-bbbf-a44e02866708\",\"attributes\":{\"name\":\"dd_auth_cli-AiurkPBMfWN7Kbe4hJifzsC7Zn0FzVe7jkZwkbAKDBk\",\"created_at\":\"2025-06-02T12:55:17.262071+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"38f23b5c-3d66-11f0-93c5-fa44e6b5daf3\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"a1bfc99d-ae44-4ce7-8175-14451f2155a8\",\"attributes\":{\"name\":\"dd_auth_cli-BjTRrCq8NzqZ_hzuiLfOi7PsXK_-VgwTKjFG0gEfll8\",\"created_at\":\"2025-08-04T17:12:41.578175+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-04T22:12:13.524575+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"e876c978-8430-4d4f-8ae3-c707e1204c66\",\"attributes\":{\"name\":\"dd_auth_cli-C9DReFHwxR-gONc65Z2vAxO4NSoqfgIVY__TY61KAT0\",\"created_at\":\"2025-05-13T08:00:20.023612+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"f23c5e6a-1f99-11f0-beba-3e2533bbf89d\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"b0246a7e-6afa-436e-8d93-861aa759293c\",\"attributes\":{\"name\":\"dd_auth_cli-d053wHVio7nJZptGeuVbRoLaZRhQp4qlDDCKFs11bzM\",\"created_at\":\"2025-08-04T16:44:01.265450+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-04T16:44:02.347172+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"42a362cc-7e0c-42f0-a232-fe079ee1eb90\",\"attributes\":{\"name\":\"dd_auth_cli-D5OkpdUmScZL--KSBXXT5fyqE9gwOvXtGISSoQGnSDE\",\"created_at\":\"2025-09-01T15:29:38.665526+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-01T15:57:30.263057+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"7710bf2c-d81f-4c53-a88e-1371a22916a5\",\"attributes\":{\"name\":\"dd_auth_cli-D7nVeCjxg-a5r-HX-3_I8gwbiM7zAEv6cikKYLHPTsc\",\"created_at\":\"2025-08-28T16:01:49.071654+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-28T16:01:50.253378+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"b72434a1-b8ed-11ed-b3c2-da447d6968cb\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"525527a7-4134-41ab-a825-efd59d85ffe0\",\"attributes\":{\"name\":\"dd_auth_cli-Df5oHbucP2LvrFm5R9K2C-kA7vs0Rs3P7U1VlpljhRc\",\"created_at\":\"2025-08-08T16:36:30.246018+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-08T16:37:45.330457+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"5c680e22-b764-4af6-886e-ac7bcbc484af\",\"attributes\":{\"name\":\"dd_auth_cli-DNkLNT-qXPboaBQqVd_r-nmQ7RdZuyFnlSjjBtaUZ5s\",\"created_at\":\"2025-05-21T11:01:40.459507+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"f23c5e6a-1f99-11f0-beba-3e2533bbf89d\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"650654de-4939-4274-a446-9b34655c3fa8\",\"attributes\":{\"name\":\"dd_auth_cli-D-WEz_8GsxjSHJcD5dCsJKHAopoVyBY2LU-TAlTisTA\",\"created_at\":\"2025-07-17T15:26:09.097215+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-17T15:26:10.176290+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"600cf73d-af11-46ec-ad4f-7c38560b78b7\",\"attributes\":{\"name\":\"dd_auth_cli-e4nMAEgnQ8S-Yb_uhlDZAd8OzJgE0jtKee2D1R-A1Aw\",\"created_at\":\"2025-08-08T14:43:32.083607+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-08T14:43:33.153383+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"30b65cec-0571-486d-933a-41d1eef8d82f\",\"attributes\":{\"name\":\"dd_auth_cli-eKpTSf1RZmBkjbEop-SVzDPSwSS8eNcEk-GShYXm_jw\",\"created_at\":\"2025-06-16T17:46:45.990350+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"b742c082-baef-4704-aeb2-88464bfb40fa\",\"attributes\":{\"name\":\"dd_auth_cli-fBcG5DIPWTJJUG73NXNrRaSb-AwbtOOV1-3QADS2aKU\",\"created_at\":\"2025-08-14T21:51:07.879448+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-15T01:08:20.647560+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"b76bdd73-4002-4f77-8db5-578cd1c54ba7\",\"attributes\":{\"name\":\"dd_auth_cli-FlJzYiNu7jXNk4gKudZY7BJdyE0kpjn5SoQZ8Xi8vpM\",\"created_at\":\"2025-05-19T13:36:13.392971+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"f23c5e6a-1f99-11f0-beba-3e2533bbf89d\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"ff2f5fc5-b970-4f49-bcb1-43e851a3c133\",\"attributes\":{\"name\":\"dd_auth_cli-fObcQFul0q5g5fd_wqa7rKq5kW7ESEslnCdluUozUbI\",\"created_at\":\"2025-07-17T14:58:56.928692+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-17T15:03:32.129656+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"e02b86ca-2682-4e34-80a9-ef14c2236549\",\"attributes\":{\"name\":\"dd_auth_cli-gDz3RlxutQVjCL-Nqc4k0sfqM6sD6LISdpW4l-q1BQ8\",\"created_at\":\"2025-06-09T15:54:22.482948+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"9843f29f-4fc4-47c2-b40b-0db02460331f\",\"attributes\":{\"name\":\"dd_auth_cli-GOFdjGa5HypgeqeHxLqHFZNllSTVnVbfNL4JOkSScek\",\"created_at\":\"2025-08-06T20:12:20.847562+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-06T20:12:21.924155+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"ab170dfa-8410-4256-9007-13b32c79d364\",\"attributes\":{\"name\":\"dd_auth_cli-GwL_T2UB8UmAPZj9w4ikYLCU0_e7T8dDfIgYAxQOKQ8\",\"created_at\":\"2025-08-13T20:31:26.029416+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-13T20:31:27.127709+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"6018c832-80a7-11ea-93dd-43183212bc7a\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"719b37e5-27da-41af-b763-4e171dc8e1b4\",\"attributes\":{\"name\":\"dd_auth_cli-GxcqEWHvfRXoeG-I0WfAblP2tnzqjcB7oG5GUxFFhvw\",\"created_at\":\"2025-07-22T12:53:59.022004+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-22T15:51:20.613827+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"f0d9bb99-6ab2-4fb6-839f-28c802429283\",\"attributes\":{\"name\":\"dd_auth_cli-h8U9dJxjpzdD2kuDDEwXUlYrULhm5L5KT7vjxTtUqbk\",\"created_at\":\"2025-08-06T17:35:53.904190+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-06T17:54:01.144073+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"de21459a-7d5e-464e-9f65-37914fef2abf\",\"attributes\":{\"name\":\"dd_auth_cli-h8vRXFcXtCsLk6Qit9MeV_bsSpBeflzR2a-MZ75LL8o\",\"created_at\":\"2025-05-23T17:18:15.033418+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"e32b4686-ea8f-413d-9644-7c10159ae6e4\",\"attributes\":{\"name\":\"dd_auth_cli-hHge9OYHD3CibMCtofSnjdK9j7oAZFmIX6CJ09mk8GU\",\"created_at\":\"2025-05-20T19:22:49.213299+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"3917f5a8-32e4-48d4-b78d-8fe65ba43967\",\"attributes\":{\"name\":\"dd_auth_cli-HwmxaoR2v4h-m8osv5EcV0D-Qq1uSiG6yToI5f7q-fM\",\"created_at\":\"2025-04-18T12:56:06.455308+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"c0e3d30a-3f89-11ef-8991-d66079fdd770\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"e21f3701-58e2-4606-9e63-da22c70746a0\",\"attributes\":{\"name\":\"dd_auth_cli-Iqbht-sUA9p7E0ncGdQM6CiK2vGx0t7B1Q8vx_71Syk\",\"created_at\":\"2025-06-13T16:26:56.554572+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"8ac1707b-e841-4359-8cbb-3590947cf760\",\"attributes\":{\"name\":\"dd_auth_cli-joIE5ujwAc6jVTc0uSKJEDaZsBNhtCZwtcPA946Op1A\",\"created_at\":\"2025-06-25T10:41:39.819242+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"f23c5e6a-1f99-11f0-beba-3e2533bbf89d\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"c5744b35-15c5-4df5-b751-118ecbe15c6c\",\"attributes\":{\"name\":\"dd_auth_cli-kNf8JRfsHxbWj6HBN1-K4NIECiuFrvmbIgyZxMpoUvI\",\"created_at\":\"2025-05-29T01:57:58.292379+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"bc2bac8c-0b78-11f0-8b67-c24ce8498984\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"bcc86008-eef8-469f-a458-27fa1ab2ac5d\",\"attributes\":{\"name\":\"dd_auth_cli-konGbtZHuKbqCxBJF4ciDAXhfP59aVwwypix6YbBaok\",\"created_at\":\"2025-08-06T19:56:51.632593+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-06T19:56:52.702590+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"1ba43d01-d846-4bb5-ba81-2b3c5c6059e7\",\"attributes\":{\"name\":\"dd_auth_cli-l00nm3G_xOXbo8ngcfXcNaFaMSAH-6DhRYet_p9KMO8\",\"created_at\":\"2025-08-13T18:04:40.532723+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-13T21:37:53.966739+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"d6c7c1e3-9c76-4c0c-b349-8348306c9f67\",\"attributes\":{\"name\":\"dd_auth_cli-l0yswWyq1f82Po3U-DD6_Ev-wezdQp32NQquoZutXj4\",\"created_at\":\"2025-08-06T20:11:09.472822+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-06T20:11:10.596337+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"0010260b-3db4-40cd-a624-837afcc11679\",\"attributes\":{\"name\":\"dd_auth_cli-l618z5aUqAE3ZyggHYBnCeE8GJ0WldyNrGynfdxzs_0\",\"created_at\":\"2025-07-16T09:42:20.536681+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-16T09:50:21.375532+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"f23c5e6a-1f99-11f0-beba-3e2533bbf89d\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"00647911-ffb3-4280-82b2-16236e64beff\",\"attributes\":{\"name\":\"dd_auth_cli-leLnigHKWcq5GNLkyP0YOIEnzWYMs2kRleW-e5zsGT8\",\"created_at\":\"2025-09-01T09:49:21.851699+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-01T09:49:23.053526+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"c0e3d30a-3f89-11ef-8991-d66079fdd770\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"a8114ac6-827b-4bb3-b4e9-5f8bfb6dcadc\",\"attributes\":{\"name\":\"dd_auth_cli-m_1R5Gx6OpoKc2CjWO4DoMEKUzWgur0dFDSVu8QvSRM\",\"created_at\":\"2025-08-22T17:58:39.350082+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-22T18:25:24.540147+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"a9419136-c53d-4a9d-b0da-4a8d351d610c\",\"attributes\":{\"name\":\"dd_auth_cli-mdCfsHcKy60bFLk8-n3Z4Q-JmKlQxWmbHULpgb9BVe0\",\"created_at\":\"2025-06-23T08:56:43.164696+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"ca5685ce-b968-11ef-9fbd-d61e3f92c3c7\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"f5fdf1fa-4ee8-4377-88fb-6182297e4dd7\",\"attributes\":{\"name\":\"dd_auth_cli-mtc_c8VMXI2yGzSljsLxtnb3surKiZZnytT-odoT2R4\",\"created_at\":\"2025-08-26T19:55:43.666320+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-26T21:01:43.105824+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"c5ba5258-07ab-4e8b-9dc5-a3a72e745c67\",\"attributes\":{\"name\":\"dd_auth_cli-mZ7xZW18JdOYciGI9TRNDE5vt7q79oWoneUkZqgseto\",\"created_at\":\"2025-08-07T15:28:15.537547+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-07T15:28:16.626952+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"4317780a-a5c8-4b0c-8e41-4046683ccfdd\",\"attributes\":{\"name\":\"dd_auth_cli-N7rO0NJgNxJwQPtxah_GJEL6w7qcDlNZVa8MgOJ8hOE\",\"created_at\":\"2025-08-06T19:59:18.930140+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-06T19:59:20.049161+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"ba7b1b59-9701-418c-939e-72cbfecc5241\",\"attributes\":{\"name\":\"dd_auth_cli-nRtr8GjGWhfAj3dsQ0W8Fon70xiUOSGdGKVFZ0egdtI\",\"created_at\":\"2025-07-15T09:32:55.092760+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-15T09:32:56.236991+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"4d76280e-1acd-11f0-81f0-8e6d360bddb8\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"f336f64b-3dc5-44eb-9f0e-ee1c720869aa\",\"attributes\":{\"name\":\"dd_auth_cli-oh3xCP3f1Qyix8aber4UJSQQBX3ERVviWuuoiW4W_BA\",\"created_at\":\"2025-07-21T09:02:40.747386+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-22T16:37:45.010358+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"0c45dcdf-db61-447a-b359-e8b3c6b87a88\",\"attributes\":{\"name\":\"dd_auth_cli-pLLZn_RvQCqs0sn6TV50jA8S2B2CqayzVhvFxzHXx-A\",\"created_at\":\"2025-07-15T09:26:42.785095+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-15T12:11:51.743162+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"7d7298a6-5b14-11f0-89c7-eef2b9bf88cb\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"75b5f7b3-45c1-4efc-a543-f38940fee779\",\"attributes\":{\"name\":\"dd_auth_cli-prQ1dXUIrZu41btEEi-WnTfbJoRx3HMF2yk7Ze2LS7U\",\"created_at\":\"2025-06-12T20:14:46.087509+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"4eb113cc-47ab-460a-bc7d-edb8c4d8b2ea\",\"attributes\":{\"name\":\"dd_auth_cli-q0EpIMzSjQbs2UjdQz2gcqbYWgMudbuHEXNDLPczqHU\",\"created_at\":\"2025-08-11T14:09:07.164487+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-11T18:38:59.781839+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"4bce02d4-3769-428e-be0b-674a5a38f2ef\",\"attributes\":{\"name\":\"dd_auth_cli-Q3-AEMhz_htWDmnzmtE8BSkSm_L97zypfPpVhGzFqVo\",\"created_at\":\"2025-08-06T19:58:21.272803+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-06T19:58:22.341523+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"7a71b928-96ab-4ce0-aee6-c99a0c091afa\",\"attributes\":{\"name\":\"dd_auth_cli-qhrPivStbeP1b_OwnIVwLRs0SCoA405beuGDW3muwZw\",\"created_at\":\"2025-07-17T08:14:37.336301+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-17T10:19:30.195485+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"7d7298a6-5b14-11f0-89c7-eef2b9bf88cb\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"dd941e08-d0fa-47a8-9695-e23cdf2d5e5c\",\"attributes\":{\"name\":\"dd_auth_cli-qPXXzBwTCXz8Iz1hLyUBpkHV8IemWnUihr5iZK8odwQ\",\"created_at\":\"2025-07-18T08:12:53.318244+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-22T10:13:38.124872+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"61162737-13b1-42f6-984b-9785a857c4a4\",\"attributes\":{\"name\":\"dd_auth_cli-r4iIDKGT07H5MmDCO0MkWmfDUvGydm6cMO31LvX-HHI\",\"created_at\":\"2025-07-07T09:32:08.840682+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"7d7298a6-5b14-11f0-89c7-eef2b9bf88cb\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"8036674c-925d-488a-bc15-34a55e7b23bf\",\"attributes\":{\"name\":\"dd_auth_cli-sf_aDog0P30KkAP9bt6XLp4htrnZoEnLFq74QnF0ne4\",\"created_at\":\"2025-09-02T16:51:00.268116+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-09-02T16:51:37.381998+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"6018c832-80a7-11ea-93dd-43183212bc7a\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"cea617c0-cfec-46c1-8b3c-0de8ed239685\",\"attributes\":{\"name\":\"dd_auth_cli-SrnMCQm8wxDtC5M2P_u1TumwnmlK0QzYj8kXpTAYBxo\",\"created_at\":\"2025-08-12T16:03:08.395952+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-12T22:53:21.428613+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"151e3c91-5f11-4dd4-aa5c-c7afb925d614\",\"attributes\":{\"name\":\"dd_auth_cli-SuQ0F1PDz0HPhCp4qyIfFgVrDPvrW9-owKXzKWwqwfs\",\"created_at\":\"2025-08-21T21:02:38.483921+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-21T21:06:29.408848+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"14097408-6817-447e-b402-5d24a04b4985\",\"attributes\":{\"name\":\"dd_auth_cli-_tDKWqOYVDGLveCl2ypYNOY8f4CXNmOu-cPhLflz-Sw\",\"created_at\":\"2025-08-06T20:15:58.719075+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-06T20:15:59.800244+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"de46aebc-7fe0-4a06-856d-9fa80095f7e4\",\"attributes\":{\"name\":\"dd_auth_cli-tUpX2JxyMlWYg7gtqKWp0utgPhJLBk_FBMDJ08fFr20\",\"created_at\":\"2025-06-09T23:19:51.156727+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"bc2bac8c-0b78-11f0-8b67-c24ce8498984\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"179ab85a-564c-4937-b422-2df10982b7c8\",\"attributes\":{\"name\":\"dd_auth_cli-UBUETzIFqy7Q5dTyxuyqy4cZAku4nVnYt7TQgS_4pPo\",\"created_at\":\"2025-08-22T14:41:54.291923+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-22T19:33:19.268650+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"83aa52ec-9ef9-4dbe-932c-a024cad037a8\",\"attributes\":{\"name\":\"dd_auth_cli-uIRg46B2GWWEnkvZetHCTJCOirtGSKvaL_gsmFNKqxo\",\"created_at\":\"2025-07-16T05:12:51.320436+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-16T05:12:52.486119+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"7d7298a6-5b14-11f0-89c7-eef2b9bf88cb\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"ca7bde67-4a15-4009-bafa-da97dc30ddf6\",\"attributes\":{\"name\":\"dd_auth_cli-uKC1WIpU1Hm83Z4uEZw5xoFdquXAQpbEQOlJbHYptYI\",\"created_at\":\"2025-08-08T14:39:59.743432+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-08T14:40:00.818164+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"eb5721b7-532b-4e65-a495-f055dd1481e8\",\"attributes\":{\"name\":\"dd_auth_cli-UMIXzLWI2hXNaEpcGO7dKJGvNwacbzPzVm7zL2EDujs\",\"created_at\":\"2025-06-18T15:01:36.825772+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"f23c5e6a-1f99-11f0-beba-3e2533bbf89d\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"ba3943f9-c539-4999-a828-b6c0ed904c9d\",\"attributes\":{\"name\":\"dd_auth_cli-uMpl8gt8U7ZXEhyp42jQLB_hd7nrCG2XvRfxMOsh8_0\",\"created_at\":\"2025-08-25T14:04:08.842996+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-25T18:23:21.045432+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"3fd6f567-de3b-4e31-9a24-88472d479a6e\",\"attributes\":{\"name\":\"dd_auth_cli-W6VZqwObNmfuKyLjJVXkHJi70HByec1_exB3ZN0J9nQ\",\"created_at\":\"2025-07-21T18:12:40.519160+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-07-21T18:12:46.178990+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"6018c832-80a7-11ea-93dd-43183212bc7a\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"0022abce-64ee-434c-8790-6407ec68afdd\",\"attributes\":{\"name\":\"dd_auth_cli-WTZiLrQySPtM1ITkkxcwE16FBn5c8BFqERDvnzLwOsQ\",\"created_at\":\"2025-05-13T23:33:17.241106+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"bc2bac8c-0b78-11f0-8b67-c24ce8498984\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"9d8858e8-4f5b-4f7a-bc58-307713d5d6b2\",\"attributes\":{\"name\":\"dd_auth_cli-WUaKCo760YG1oesaxAgjGRDzVSYcRlZ8q53aATtqAK0\",\"created_at\":\"2025-08-12T20:24:59.410295+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-13T03:28:28.654234+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"52b336b1-f44a-45f0-8447-7a3463254d96\",\"attributes\":{\"name\":\"dd_auth_cli-xAHXDKGfGq5RlVvP1I6wU00V2RnnXcW7f21nsWH4kNI\",\"created_at\":\"2025-08-08T14:36:37.710175+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-08T20:21:38.489595+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"e39f9aa1-f928-48b9-a565-1aff449fa58c\",\"attributes\":{\"name\":\"dd_auth_cli-xbc1_-qyZeYPpmfP-wOsLcdIg1XYfL1XVsuecKO70hE\",\"created_at\":\"2025-06-23T12:08:54.409669+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"27e2dc5a-fa25-4ffb-8124-6507f913aa37\",\"attributes\":{\"name\":\"dd_auth_cli-xN74v7LMTSnCMQ4wA008LvUIN82foCUdyyDydfBgxFY\",\"created_at\":\"2025-08-08T14:50:13.627386+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-08T14:50:14.696171+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"98668a07-34ae-4816-a393-c3c1ee57021a\",\"attributes\":{\"name\":\"dd_auth_cli-XuCAMIeYukstpvOgmSWD2yg4fAt6pNSV67y58RlNJCU\",\"created_at\":\"2025-08-15T19:57:32.938196+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-15T19:59:36.509032+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"ba6aefbd-2cb1-4dc7-ae70-1eeea08229e3\",\"attributes\":{\"name\":\"dd_auth_cli-XwrB33omJjuAYFwDMe5xQCyyRPiHOjFVxyS0ZmA0MBA\",\"created_at\":\"2025-08-08T14:51:55.720155+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-08T15:00:37.071434+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"2c538aa6-b5c4-4ad0-96e3-287ad143294e\",\"attributes\":{\"name\":\"dd_auth_cli-y9K9DzNCa_Fx0A72APTDnBgRHUCDyYn5Zx_KACpLwG0\",\"created_at\":\"2025-08-06T20:19:07.676965+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":\"2025-08-06T20:23:45.047197+00:00\"},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"762700e3-f608-41cd-999f-f39a109cd5ea\",\"attributes\":{\"name\":\"ddiner-test\",\"created_at\":\"2024-08-27T21:14:23.327175+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"dd8a374c-5f24-11ef-bba0-4a24e0ae025c\"}},\"leak_information\":{\"data\":null}}},{\"type\":\"application_keys\",\"id\":\"14852f74-9cc7-4a4c-94c5-0f97cb33f810\",\"attributes\":{\"name\":\"[DO NOT DELETE] App Key Registration Casette\",\"created_at\":\"2025-07-07T22:35:29.819899+00:00\",\"last4\":\"xxxx\",\"scopes\":[\"monitors_read\"],\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}},\"leak_information\":{\"data\":null}}}],\"meta\":{\"page\":{\"total_filtered_count\":146},\"max_allowed_per_user\":1000}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/d516f4ec-0722-488c-9500-2d812b93d9b9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all application keys returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2026-04-08T16:46:16.639Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "expires_at": "2027-04-08T16:46:16.639Z", + "name": "Test-Get_all_personal_access_tokens_returns_OK_response-1775666776", + "scopes": [ + "dashboards_read" + ] + }, + "type": "personal_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/personal_access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"35ef7728-4761-41dd-8a7b-f1112a26f840\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-08T16:46:16.769979863Z\",\"expires_at\":\"2027-04-08T16:46:16.639Z\",\"key\":\"xxxxx_xxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"name\":\"Test-Get_all_personal_access_tokens_returns_OK_response-1775666776\",\"public_portion\":\"1dm1op4lL89nV8pt94Tdk8\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/personal_access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"61c07794-df2a-4403-a6ad-caa6bb70dae2\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-08T08:58:54.688182Z\",\"expires_at\":\"2026-04-09T08:58:54Z\",\"last_used_at\":\"2026-04-08T08:58:55.302839705Z\",\"name\":\"dd_auth_cli-DhhOC4JHLtgPkfDr6DEXUcTL79UOCx1w2ENxgmIHh7w\",\"public_portion\":\"2ySDERb6wx1YqV1udJl61q\",\"scopes\":[\"admin\",\"standard\",\"logs_read_index_data\",\"logs_modify_indexes\",\"logs_live_tail\",\"logs_write_exclusion_filters\",\"logs_write_pipelines\",\"logs_write_processors\",\"logs_write_archives\",\"logs_generate_metrics\",\"dashboards_read\",\"dashboards_write\",\"dashboards_public_share\",\"monitors_read\",\"monitors_write\",\"monitors_downtime\",\"logs_read_data\",\"logs_read_archives\",\"security_monitoring_rules_read\",\"security_monitoring_rules_write\",\"security_monitoring_signals_read\",\"security_monitoring_signals_write\",\"user_access_invite\",\"user_access_manage\",\"user_app_keys\",\"org_app_keys_read\",\"org_app_keys_write\",\"synthetics_private_location_read\",\"synthetics_private_location_write\",\"billing_read\",\"billing_edit\",\"usage_read\",\"usage_edit\",\"metric_tags_write\",\"logs_write_historical_view\",\"audit_logs_read\",\"api_keys_read\",\"api_keys_write\",\"synthetics_global_variable_read\",\"synthetics_global_variable_write\",\"synthetics_read\",\"synthetics_write\",\"synthetics_default_settings_read\",\"synthetics_default_settings_write\",\"logs_write_facets\",\"service_account_write\",\"integrations_api\",\"apm_read\",\"apm_retention_filter_read\",\"apm_retention_filter_write\",\"apm_service_ingest_read\",\"apm_service_ingest_write\",\"apm_apdex_manage_write\",\"apm_tag_management_write\",\"apm_primary_operation_write\",\"audit_logs_write\",\"rum_apps_write\",\"debugger_write\",\"debugger_read\",\"data_scanner_read\",\"data_scanner_write\",\"org_management\",\"security_monitoring_filters_read\",\"security_monitoring_filters_write\",\"incident_read\",\"incident_write\",\"incident_settings_read\",\"incident_settings_write\",\"metrics_read\",\"timeseries_query\",\"events_read\",\"appsec_event_rule_read\",\"appsec_event_rule_write\",\"rum_apps_read\",\"rum_session_replay_read\",\"security_monitoring_notification_profiles_read\",\"security_monitoring_notification_profiles_write\",\"apm_generate_metrics\",\"security_monitoring_cws_agent_rules_read\",\"security_monitoring_cws_agent_rules_write\",\"apm_pipelines_write\",\"apm_pipelines_read\",\"observability_pipelines_read\",\"observability_pipelines_write\",\"workflows_read\",\"workflows_write\",\"workflows_run\",\"connections_read\",\"connections_write\",\"notebooks_read\",\"notebooks_write\",\"logs_delete_data\",\"rum_generate_metrics\",\"aws_configurations_manage\",\"azure_configurations_manage\",\"gcp_configurations_manage\",\"manage_integrations\",\"usage_notifications_read\",\"usage_notifications_write\",\"generate_dashboard_reports\",\"slos_read\",\"slos_write\",\"slos_corrections\",\"monitor_config_policy_write\",\"apm_service_catalog_write\",\"apm_service_catalog_read\",\"logs_write_forwarding_rules\",\"watchdog_insights_read\",\"connections_resolve\",\"user_access_read\",\"appsec_protect_read\",\"appsec_protect_write\",\"appsec_activation_read\",\"appsec_activation_write\",\"apps_run\",\"apps_write\",\"cases_read\",\"cases_write\",\"apm_remote_configuration_write\",\"apm_remote_configuration_read\",\"ci_visibility_read\",\"ci_visibility_write\",\"ci_provider_settings_write\",\"ci_visibility_settings_write\",\"continuous_profiler_read\",\"teams_read\",\"teams_manage\",\"security_monitoring_findings_read\",\"incident_notification_settings_read\",\"incident_notification_settings_write\",\"ci_ingestion_control_write\",\"error_tracking_write\",\"watchdog_alerts_write\",\"saved_views_write\",\"client_tokens_read\",\"client_tokens_write\",\"event_correlation_config_read\",\"event_correlation_config_write\",\"event_config_write\",\"security_monitoring_findings_write\",\"cloud_cost_management_read\",\"cloud_cost_management_write\",\"host_tags_write\",\"ci_visibility_pipelines_write\",\"quality_gate_rules_read\",\"quality_gate_rules_write\",\"metrics_metadata_write\",\"rum_delete_data\",\"appsec_vm_write\",\"reference_tables_write\",\"rum_playlist_write\",\"observability_pipelines_delete\",\"observability_pipelines_deploy\",\"processes_generate_metrics\",\"api_keys_delete\",\"agent_flare_collection\",\"org_connections_write\",\"org_connections_read\",\"facets_write\",\"security_monitoring_suppressions_read\",\"security_monitoring_suppressions_write\",\"static_analysis_settings_write\",\"create_webhooks\",\"cd_visibility_read\",\"ndm_netflow_port_mappings_write\",\"appsec_vm_read\",\"debugger_capture_variables\",\"error_tracking_settings_write\",\"error_tracking_exclusion_filters_write\",\"integrations_read\",\"apm_api_catalog_write\",\"apm_api_catalog_read\",\"containers_generate_image_metrics\",\"rum_extend_retention\",\"on_prem_runner_read\",\"on_prem_runner_use\",\"on_prem_runner_write\",\"dora_settings_write\",\"agent_upgrade_write\",\"continuous_profiler_pgo_read\",\"oci_configurations_manage\",\"aws_configuration_read\",\"azure_configuration_read\",\"gcp_configuration_read\",\"oci_configuration_read\",\"hosts_read\",\"aws_configuration_edit\",\"azure_configuration_edit\",\"gcp_configuration_edit\",\"oci_configuration_edit\",\"llm_observability_read\",\"flex_logs_config_write\",\"reference_tables_read\",\"fleet_policies_write\",\"orchestration_custom_resource_definitions_write\",\"code_analysis_read\",\"orchestration_workload_scaling_write\",\"llm_observability_write\",\"observability_pipelines_capture_read\",\"observability_pipelines_capture_write\",\"apps_datastore_read\",\"apps_datastore_write\",\"apps_datastore_manage\",\"security_pipelines_read\",\"security_pipelines_write\",\"connection_groups_write\",\"quality_gates_evaluations_read\",\"connection_groups_read\",\"security_monitoring_cws_agent_rules_actions\",\"rum_retention_filters_read\",\"rum_retention_filters_write\",\"ddsql_editor_read\",\"disaster_recovery_status_read\",\"disaster_recovery_status_write\",\"rum_settings_write\",\"test_optimization_read\",\"test_optimization_write\",\"test_optimization_settings_write\",\"security_comments_write\",\"security_comments_read\",\"dashboards_invite_share\",\"dashboards_embed_share\",\"embeddable_graphs_share\",\"logs_read_workspaces\",\"logs_write_workspaces\",\"audience_management_read\",\"audience_management_write\",\"logs_read_config\",\"on_call_read\",\"on_call_write\",\"on_call_page\",\"dora_metrics_read\",\"error_tracking_read\",\"on_call_respond\",\"process_tags_read\",\"process_tags_write\",\"network_connections_read\",\"serverless_aws_instrumentation_read\",\"serverless_aws_instrumentation_write\",\"coterm_write\",\"coterm_read\",\"data_streams_monitoring_capture_messages\",\"cloudcraft_read\",\"ndm_device_profiles_view\",\"ndm_device_profiles_edit\",\"generate_log_reports\",\"manage_log_reports\",\"ndm_devices_read\",\"ndm_device_tags_write\",\"bits_investigations_read\",\"sheets_read\",\"sheets_write\",\"status_pages_settings_read\",\"status_pages_settings_write\",\"status_pages_incident_write\",\"on_call_admin\",\"orchestration_autoscaling_manage\",\"code_coverage_read\",\"cases_shared_settings_write\",\"repo_info_read\",\"repo_settings_write\",\"product_analytics_apps_write\",\"actions_interface_run\",\"ai_guard_evaluate\",\"generate_ccm_report_schedules\",\"manage_ccm_report_schedules\",\"user_self_profile_read\",\"governance_console_read\",\"data_scanner_unmask\",\"apps_form_read\",\"apps_form_manage\",\"user_self_profile_write\",\"dora_metrics_write\",\"bits_investigations_write\",\"debugger_write_pre_prod\",\"network_health_insights_read\",\"security_monitoring_datasets_read\",\"security_monitoring_datasets_write\",\"feature_flag_config_write\",\"feature_flag_config_read\",\"feature_flag_environment_config_write\",\"feature_flag_environment_config_read\",\"assistant_access\",\"dbm_read\",\"ndm_geomap_locations_write\",\"ndm_device_config_read\",\"dbm_parameterized_queries_read\",\"apm_service_renaming_write\",\"deployment_gates_read\",\"deployment_gates_write\",\"deployment_gates_evaluate\",\"product_analytics_saved_widgets_read\",\"product_analytics_saved_widgets_write\",\"mcp_write\",\"mcp_read\",\"external_provider_status_notifications_read\",\"external_provider_status_notifications_write\",\"governance_console_write\",\"bits_security_analyst_write\",\"bits_security_analyst_config_write\",\"feature_flag_approvals_override\",\"infrastructure_resource_policies_read\",\"infrastructure_resource_policies_write\",\"agent_builder_read\",\"agent_builder_write\",\"agent_builder_run\",\"bits_dev_write\",\"product_analytics_settings_read\",\"product_analytics_settings_write\",\"product_analytics_experiments_read\",\"product_analytics_experiments_write\",\"product_analytics_metrics_read\",\"product_analytics_metrics_write\",\"product_analytics_certified_metrics_write\",\"product_analytics_warehouse_model_write\",\"data_streams_kafka_produce_message\",\"org_group_read\",\"org_group_write\",\"apm_recommendations_notification_rules_read\",\"apm_recommendations_notification_rules_write\",\"product_dashboards_write\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"48e5159f-e308-11ef-bcfc-2666505bfd8f\",\"type\":\"users\"}}}},{\"id\":\"717da798-83bd-4f68-8b0a-dfa98c65bddb\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-02T20:01:42.043142Z\",\"expires_at\":null,\"last_used_at\":null,\"name\":\"Test-Create_a_service_account_access_token_returns_Created_response-1775160101\",\"public_portion\":\"3S9YYEuPThXA4AbPGMcqjr\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"c465e3ca-2ece-11f1-b6f0-363c69093c72\",\"type\":\"users\"}}}},{\"id\":\"35ef7728-4761-41dd-8a7b-f1112a26f840\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-08T16:46:16.769979Z\",\"expires_at\":\"2027-04-08T16:46:16.639Z\",\"last_used_at\":null,\"name\":\"Test-Get_all_personal_access_tokens_returns_OK_response-1775666776\",\"public_portion\":\"1dm1op4lL89nV8pt94Tdk8\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}],\"meta\":{\"page\":{\"total_filtered_count\":3}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/personal_access_tokens/35ef7728-4761-41dd-8a7b-f1112a26f840", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all personal access tokens returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2025-09-09T14:58:18.357Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/application_keys/invalidId", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Application key not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get an application key returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2025-09-08T09:24:48.419Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_an_application_key_returns_OK_response-1757323488" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"0292830c-dde3-4e62-a568-573e4be65dff\",\"attributes\":{\"name\":\"Test-Get_an_application_key_returns_OK_response-1757323488\",\"created_at\":\"2025-09-08T09:24:48.499395+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/application_keys/0292830c-dde3-4e62-a568-573e4be65dff", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"0292830c-dde3-4e62-a568-573e4be65dff\",\"attributes\":{\"name\":\"Test-Get_an_application_key_returns_OK_response-1757323488\",\"created_at\":\"2025-09-08T09:24:48.499395+00:00\",\"last4\":\"xxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/0292830c-dde3-4e62-a568-573e4be65dff", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get an application key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2025-09-08T09:24:48.986Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/current_user/application_keys/incorrectId", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Application key not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get one application key owned by current user returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2025-09-10T21:40:07.729Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_one_application_key_owned_by_current_user_returns_OK_response-1757540407" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/current_user/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"1c6c0fa5-6608-4e3f-8ce0-2b861590fecd\",\"attributes\":{\"name\":\"Test-Get_one_application_key_owned_by_current_user_returns_OK_response-1757540407\",\"created_at\":\"2025-09-10T21:40:08.244976+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/current_user/application_keys/1c6c0fa5-6608-4e3f-8ce0-2b861590fecd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"1c6c0fa5-6608-4e3f-8ce0-2b861590fecd\",\"attributes\":{\"name\":\"Test-Get_one_application_key_owned_by_current_user_returns_OK_response-1757540407\",\"created_at\":\"2025-09-10T21:40:08.244977+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null,\"last_used_at\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}},\"leak_information\":{\"data\":null}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2020-12-29T22:58:44.733921+00:00\",\"modified_at\":\"2021-04-27T13:54:01.547888+00:00\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"94172442-be03-11e9-a77a-3b7612558ac1\"}]}}},{\"type\":\"roles\",\"id\":\"94172442-be03-11e9-a77a-3b7612558ac1\",\"attributes\":{\"name\":\"Datadog Admin Role\",\"managed\":true,\"created_at\":\"2019-08-13T19:50:19.022791+00:00\",\"modified_at\":\"2019-08-13T19:50:19.022791+00:00\"}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/current_user/application_keys/1c6c0fa5-6608-4e3f-8ce0-2b861590fecd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get one application key owned by current user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2026-04-08T16:45:51.557Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "expires_at": "2027-04-08T16:45:51.557Z", + "name": "Test-Revoke_a_personal_access_token_returns_No_Content_response-1775666751", + "scopes": [ + "dashboards_read" + ] + }, + "type": "personal_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/personal_access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6bebbb55-0f75-4444-bec1-52de5987290f\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-08T16:45:51.638215611Z\",\"expires_at\":\"2027-04-08T16:45:51.557Z\",\"key\":\"xxxxx_xxxxxxxxxxxxxxxxxxXxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"name\":\"Test-Revoke_a_personal_access_token_returns_No_Content_response-1775666751\",\"public_portion\":\"3HduL45lLrtTDsrdaAXE6B\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/personal_access_tokens/6bebbb55-0f75-4444-bec1-52de5987290f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/personal_access_tokens/6bebbb55-0f75-4444-bec1-52de5987290f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Revoke a personal access token returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Key Management", + "frozen_at": "2026-04-08T16:45:59.540Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "expires_at": "2027-04-08T16:45:59.540Z", + "name": "Test-Update_a_personal_access_token_returns_OK_response-1775666759", + "scopes": [ + "dashboards_read" + ] + }, + "type": "personal_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/personal_access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7d2c1007-41f2-482e-8ee8-a4dab4a5369e\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-08T16:45:59.640614886Z\",\"expires_at\":\"2027-04-08T16:45:59.54Z\",\"key\":\"xxxxx_xxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"name\":\"Test-Update_a_personal_access_token_returns_OK_response-1775666759\",\"public_portion\":\"3oCB0TOwLiDNpTdO6FYPq2\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_personal_access_token_returns_OK_response-1775666759-updated" + }, + "id": "7d2c1007-41f2-482e-8ee8-a4dab4a5369e", + "type": "personal_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/personal_access_tokens/7d2c1007-41f2-482e-8ee8-a4dab4a5369e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7d2c1007-41f2-482e-8ee8-a4dab4a5369e\",\"type\":\"personal_access_tokens\",\"attributes\":{\"created_at\":\"2026-04-08T16:45:59.640614Z\",\"expires_at\":\"2027-04-08T16:45:59.54Z\",\"last_used_at\":null,\"modified_at\":\"2026-04-08T16:45:59.747202Z\",\"name\":\"Test-Update_a_personal_access_token_returns_OK_response-1775666759-updated\",\"public_portion\":\"3oCB0TOwLiDNpTdO6FYPq2\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/personal_access_tokens/7d2c1007-41f2-482e-8ee8-a4dab4a5369e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a personal access token returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/llm-observability.json b/test-server-data/v2/llm-observability.json new file mode 100644 index 0000000000..a02a3db70e --- /dev/null +++ b/test-server-data/v2/llm-observability.json @@ -0,0 +1,1524 @@ +{ + "feature": "LLM Observability", + "recordings": [ + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T10:28:03.829Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Create_a_new_LLM_Observability_prompt_version_returns_Bad_Request_response-1784543283", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9c67c0e2-0806-589b-8e8c-83ab2e6f76e3\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T10:28:04.139526235Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T10:28:04.139526235Z\",\"num_versions\":1,\"prompt_id\":\"Test-Create_a_new_LLM_Observability_prompt_version_returns_Bad_Request_response-1784543283\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "template": " " + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts/Test-Create_a_new_LLM_Observability_prompt_version_returns_Bad_Request_response-1784543283/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid prompt template\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Create_a_new_LLM_Observability_prompt_version_returns_Bad_Request_response-1784543283", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9c67c0e2-0806-589b-8e8c-83ab2e6f76e3\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T10:28:05.328346Z\",\"prompt_id\":\"Test-Create_a_new_LLM_Observability_prompt_version_returns_Bad_Request_response-1784543283\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new LLM Observability prompt version returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:19:57.708Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "env_ids": [], + "labels": [], + "template": [ + { + "content": "Hello v2", + "role": "user" + } + ] + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts/nonexistent-prompt/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"prompt template not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create a new LLM Observability prompt version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-21T12:32:24.134Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Create_a_new_LLM_Observability_prompt_version_returns_OK_response-1784637144", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c0077820-d57d-54d6-be0c-b62e4e827e67\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-21T12:32:24.497241896Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-21T12:32:24.497241896Z\",\"num_versions\":1,\"prompt_id\":\"Test-Create_a_new_LLM_Observability_prompt_version_returns_OK_response-1784637144\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "template": [ + { + "content": "You are a concise customer support assistant for {{company_name}}.", + "role": "system" + }, + { + "content": "Answer {{customer_name}}'s question: {{question}}", + "role": "user" + } + ] + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts/Test-Create_a_new_LLM_Observability_prompt_version_returns_OK_response-1784637144/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a002055b-7e0f-501d-ba5b-45df41fbca73\",\"type\":\"prompt-template-versions\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-21T12:32:25.272760959Z\",\"prompt_id\":\"Test-Create_a_new_LLM_Observability_prompt_version_returns_OK_response-1784637144\",\"prompt_uuid\":\"c0077820-d57d-54d6-be0c-b62e4e827e67\",\"template\":[{\"content\":\"You are a concise customer support assistant for {{company_name}}.\",\"role\":\"system\"},{\"content\":\"Answer {{customer_name}}'s question: {{question}}\",\"role\":\"user\"}],\"version\":2,\"version_created_at\":\"2026-07-21T12:32:25.272760959Z\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Create_a_new_LLM_Observability_prompt_version_returns_OK_response-1784637144", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c0077820-d57d-54d6-be0c-b62e4e827e67\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-21T12:32:25.768356Z\",\"prompt_id\":\"Test-Create_a_new_LLM_Observability_prompt_version_returns_OK_response-1784637144\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Create_a_new_LLM_Observability_prompt_version_returns_OK_response-1784637144", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c0077820-d57d-54d6-be0c-b62e4e827e67\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-21T12:32:26.168974Z\",\"prompt_id\":\"Test-Create_a_new_LLM_Observability_prompt_version_returns_OK_response-1784637144\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new LLM Observability prompt version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T10:28:19.611Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Create_an_LLM_Observability_prompt_returns_Bad_Request_response-1784543299", + "template": " " + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid prompt template\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create an LLM Observability prompt returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:19:59.888Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Create_an_LLM_Observability_prompt_returns_Conflict_response-1784539199", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2fedf714-8445-571b-bad9-f7d4bb131524\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T09:20:00.140121332Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T09:20:00.140121332Z\",\"num_versions\":1,\"prompt_id\":\"Test-Create_an_LLM_Observability_prompt_returns_Conflict_response-1784539199\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "env_ids": [], + "labels": [], + "prompt_id": "Test-Create_an_LLM_Observability_prompt_returns_Conflict_response-1784539199", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"prompt template already exists\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Create_an_LLM_Observability_prompt_returns_Conflict_response-1784539199", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2fedf714-8445-571b-bad9-f7d4bb131524\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T09:20:01.051306Z\",\"prompt_id\":\"Test-Create_an_LLM_Observability_prompt_returns_Conflict_response-1784539199\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an LLM Observability prompt returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-21T12:31:53.516Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Create_an_LLM_Observability_prompt_returns_OK_response-1784637113", + "template": [ + { + "content": "You are a helpful customer support assistant for {{company_name}}.", + "role": "system" + }, + { + "content": "Help {{customer_name}} with this question: {{question}}", + "role": "user" + } + ], + "title": "Customer Support Assistant" + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7d3137ab-7d6a-5358-b791-26ead4540e09\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-21T12:31:53.812929348Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-21T12:31:53.812929348Z\",\"num_versions\":1,\"prompt_id\":\"Test-Create_an_LLM_Observability_prompt_returns_OK_response-1784637113\",\"source\":\"registry\",\"title\":\"Customer Support Assistant\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Create_an_LLM_Observability_prompt_returns_OK_response-1784637113", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7d3137ab-7d6a-5358-b791-26ead4540e09\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-21T12:31:55.799078Z\",\"prompt_id\":\"Test-Create_an_LLM_Observability_prompt_returns_OK_response-1784637113\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create an LLM Observability prompt returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:20:02.116Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/nonexistent-prompt", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"prompt template not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an LLM Observability prompt returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:20:02.406Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Delete_an_LLM_Observability_prompt_returns_OK_response-1784539202", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d5df9e4e-acd0-5d9f-b0d5-c09a643c33e2\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T09:20:02.660067768Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T09:20:02.660067768Z\",\"num_versions\":1,\"prompt_id\":\"Test-Delete_an_LLM_Observability_prompt_returns_OK_response-1784539202\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Delete_an_LLM_Observability_prompt_returns_OK_response-1784539202", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d5df9e4e-acd0-5d9f-b0d5-c09a643c33e2\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T09:20:03.299559Z\",\"prompt_id\":\"Test-Delete_an_LLM_Observability_prompt_returns_OK_response-1784539202\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Delete_an_LLM_Observability_prompt_returns_OK_response-1784539202", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d5df9e4e-acd0-5d9f-b0d5-c09a643c33e2\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T09:20:03.637257Z\",\"prompt_id\":\"Test-Delete_an_LLM_Observability_prompt_returns_OK_response-1784539202\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Delete an LLM Observability prompt returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T10:29:01.052Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/llm-obs/v1/prompts/nonexistent-prompt/versions/1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a specific LLM Observability prompt version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T12:24:45.688Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"599ee1f4-9680-5ff8-92c9-ca31130057f3\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T12:24:46.021742711Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T12:24:46.021742711Z\",\"num_versions\":1,\"prompt_id\":\"Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "template": [ + { + "content": "Hello v2", + "role": "user" + } + ] + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts/Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d80790f5-cd99-5d57-b6e0-4d4bbbc21514\",\"type\":\"prompt-template-versions\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T12:24:46.796641541Z\",\"prompt_id\":\"Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285\",\"prompt_uuid\":\"599ee1f4-9680-5ff8-92c9-ca31130057f3\",\"template\":[{\"content\":\"Hello v2\",\"role\":\"user\"}],\"version\":2,\"version_created_at\":\"2026-07-20T12:24:46.796641541Z\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/llm-obs/v1/prompts/Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285/versions/2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d80790f5-cd99-5d57-b6e0-4d4bbbc21514\",\"type\":\"prompt-template-versions\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T12:24:46.796641Z\",\"prompt_id\":\"Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285\",\"prompt_uuid\":\"599ee1f4-9680-5ff8-92c9-ca31130057f3\",\"template\":[{\"role\":\"user\",\"content\":\"Hello v2\"}],\"version\":2,\"version_created_at\":\"2026-07-20T12:24:46.796641Z\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"599ee1f4-9680-5ff8-92c9-ca31130057f3\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T12:24:48.753279Z\",\"prompt_id\":\"Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"599ee1f4-9680-5ff8-92c9-ca31130057f3\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T12:24:49.086069Z\",\"prompt_id\":\"Test-Get_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784550285\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a specific LLM Observability prompt version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:20:08.586Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/llm-obs/v1/prompts/nonexistent-prompt", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"prompt with id 'nonexistent-prompt' not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get an LLM Observability prompt returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:20:08.880Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Get_an_LLM_Observability_prompt_returns_OK_response-1784539208", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"95e93a91-1020-5a23-9cb7-c8ca6e3b1785\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T09:20:09.112910708Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T09:20:09.112910708Z\",\"num_versions\":1,\"prompt_id\":\"Test-Get_an_LLM_Observability_prompt_returns_OK_response-1784539208\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/llm-obs/v1/prompts/Test-Get_an_LLM_Observability_prompt_returns_OK_response-1784539208", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"95e93a91-1020-5a23-9cb7-c8ca6e3b1785\",\"type\":\"prompt-templates\",\"attributes\":{\"chat_template\":[{\"role\":\"user\",\"content\":\"Hello\"}],\"prompt_id\":\"Test-Get_an_LLM_Observability_prompt_returns_OK_response-1784539208\",\"prompt_version_uuid\":\"9cd92cc7-2f51-5867-8148-eaf41efee79d\",\"version\":\"1\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Get_an_LLM_Observability_prompt_returns_OK_response-1784539208", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"95e93a91-1020-5a23-9cb7-c8ca6e3b1785\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T09:20:10.172623Z\",\"prompt_id\":\"Test-Get_an_LLM_Observability_prompt_returns_OK_response-1784539208\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an LLM Observability prompt returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:30:04.586Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-List_LLM_Observability_prompts_returns_OK_response-1784539804", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b04a1ded-d2da-578c-a520-1c1dd2046d1c\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T09:30:04.928462935Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T09:30:04.928462935Z\",\"num_versions\":1,\"prompt_id\":\"Test-List_LLM_Observability_prompts_returns_OK_response-1784539804\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [ + [ + "filter[prompt_id]", + "Test-List_LLM_Observability_prompts_returns_OK_response-1784539804" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"b04a1ded-d2da-578c-a520-1c1dd2046d1c\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T09:30:04.928462Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T09:30:04.928462Z\",\"num_versions\":1,\"prompt_id\":\"Test-List_LLM_Observability_prompts_returns_OK_response-1784539804\",\"source\":\"registry\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-List_LLM_Observability_prompts_returns_OK_response-1784539804", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b04a1ded-d2da-578c-a520-1c1dd2046d1c\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T09:30:06.787619Z\",\"prompt_id\":\"Test-List_LLM_Observability_prompts_returns_OK_response-1784539804\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List LLM Observability prompts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:20:12.882Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-List_versions_of_an_LLM_Observability_prompt_returns_OK_response-1784539212", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"31fdf246-89b8-5a48-9544-ff84c4504939\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T09:20:13.145132213Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T09:20:13.145132213Z\",\"num_versions\":1,\"prompt_id\":\"Test-List_versions_of_an_LLM_Observability_prompt_returns_OK_response-1784539212\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/llm-obs/v1/prompts/Test-List_versions_of_an_LLM_Observability_prompt_returns_OK_response-1784539212/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"e0cc7c1d-cbb6-589c-bcd9-d9c1b35aec60\",\"type\":\"prompt-template-versions\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T09:20:13.145132Z\",\"prompt_id\":\"Test-List_versions_of_an_LLM_Observability_prompt_returns_OK_response-1784539212\",\"prompt_uuid\":\"31fdf246-89b8-5a48-9544-ff84c4504939\",\"version\":1,\"version_created_at\":\"2026-07-20T09:20:13.145132Z\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-List_versions_of_an_LLM_Observability_prompt_returns_OK_response-1784539212", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"31fdf246-89b8-5a48-9544-ff84c4504939\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T09:20:15.144489Z\",\"prompt_id\":\"Test-List_versions_of_an_LLM_Observability_prompt_returns_OK_response-1784539212\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List versions of an LLM Observability prompt returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T10:29:38.039Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "env_ids": [], + "labels": [] + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/llm-obs/v1/prompts/nonexistent-prompt/versions/1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"prompt template version not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a specific LLM Observability prompt version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T15:43:10.740Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3c7ea2ea-52df-5324-8e77-0f01cf441ef9\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T15:43:11.158625133Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T15:43:11.158625133Z\",\"num_versions\":1,\"prompt_id\":\"Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "template": [ + { + "content": "Hello v2", + "role": "user" + } + ] + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts/Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190/versions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c5593d94-81b0-522b-8cae-7fa643ea7ec9\",\"type\":\"prompt-template-versions\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T15:43:12.623730838Z\",\"prompt_id\":\"Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190\",\"prompt_uuid\":\"3c7ea2ea-52df-5324-8e77-0f01cf441ef9\",\"template\":[{\"content\":\"Hello v2\",\"role\":\"user\"}],\"version\":2,\"version_created_at\":\"2026-07-20T15:43:12.623730838Z\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Give concise answers and cite relevant help-center articles." + }, + "type": "prompt-template-versions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/llm-obs/v1/prompts/Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190/versions/2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c5593d94-81b0-522b-8cae-7fa643ea7ec9\",\"type\":\"prompt-template-versions\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T15:43:12.62373Z\",\"description\":\"Give concise answers and cite relevant help-center articles.\",\"prompt_id\":\"Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190\",\"prompt_uuid\":\"3c7ea2ea-52df-5324-8e77-0f01cf441ef9\",\"template\":[{\"role\":\"user\",\"content\":\"Hello v2\"}],\"version\":2,\"version_created_at\":\"2026-07-20T15:43:12.62373Z\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3c7ea2ea-52df-5324-8e77-0f01cf441ef9\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T15:43:13.804223Z\",\"prompt_id\":\"Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3c7ea2ea-52df-5324-8e77-0f01cf441ef9\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T15:43:14.36251Z\",\"prompt_id\":\"Test-Update_a_specific_LLM_Observability_prompt_version_returns_OK_response-1784562190\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a specific LLM Observability prompt version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:20:18.946Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Update_an_LLM_Observability_prompt_returns_Bad_Request_response-1784539218", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b28f22d5-eec8-57f0-be7f-5042b6bb4ae1\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T09:20:19.301545921Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T09:20:19.301545921Z\",\"num_versions\":1,\"prompt_id\":\"Test-Update_an_LLM_Observability_prompt_returns_Bad_Request_response-1784539218\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": {}, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/llm-obs/v1/prompts/Test-Update_an_LLM_Observability_prompt_returns_Bad_Request_response-1784539218", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"at least one of title or description must be provided\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Update_an_LLM_Observability_prompt_returns_Bad_Request_response-1784539218", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b28f22d5-eec8-57f0-be7f-5042b6bb4ae1\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T09:20:20.235152Z\",\"prompt_id\":\"Test-Update_an_LLM_Observability_prompt_returns_Bad_Request_response-1784539218\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update an LLM Observability prompt returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T09:20:20.319Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "title": "New title" + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/llm-obs/v1/prompts/nonexistent-prompt", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"prompt template not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update an LLM Observability prompt returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "LLM Observability", + "frozen_at": "2026-07-20T15:43:14.374Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "prompt_id": "Test-Update_an_LLM_Observability_prompt_returns_OK_response-1784562194", + "template": [ + { + "content": "Hello", + "role": "user" + } + ] + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/llm-obs/v1/prompts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a36505e7-3c2f-5482-b8ac-ac51250a0116\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T15:43:14.698626703Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"last_version_created_at\":\"2026-07-20T15:43:14.698626703Z\",\"num_versions\":1,\"prompt_id\":\"Test-Update_an_LLM_Observability_prompt_returns_OK_response-1784562194\",\"source\":\"registry\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "title": "Customer Support Assistant" + }, + "type": "prompt-templates" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/llm-obs/v1/prompts/Test-Update_an_LLM_Observability_prompt_returns_OK_response-1784562194", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a36505e7-3c2f-5482-b8ac-ac51250a0116\",\"type\":\"prompt-templates\",\"attributes\":{\"author\":\"c5e19e5a-ad6b-11ed-ab4f-927130d31ef9\",\"created_at\":\"2026-07-20T15:43:14.698626Z\",\"created_from\":\"sdk-registry\",\"in_registry\":true,\"num_versions\":0,\"prompt_id\":\"Test-Update_an_LLM_Observability_prompt_returns_OK_response-1784562194\",\"source\":\"registry\",\"title\":\"Customer Support Assistant\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/llm-obs/v1/prompts/Test-Update_an_LLM_Observability_prompt_returns_OK_response-1784562194", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a36505e7-3c2f-5482-b8ac-ac51250a0116\",\"type\":\"prompt-templates\",\"attributes\":{\"deleted_at\":\"2026-07-20T15:43:16.39072Z\",\"prompt_id\":\"Test-Update_an_LLM_Observability_prompt_returns_OK_response-1784562194\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update an LLM Observability prompt returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/logs-custom-destinations.json b/test-server-data/v2/logs-custom-destinations.json new file mode 100644 index 0000000000..96c7e20607 --- /dev/null +++ b/test-server-data/v2/logs-custom-destinations.json @@ -0,0 +1,1916 @@ +{ + "feature": "Logs Custom Destinations", + "recordings": [ + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:07.582Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "auth": { + "password": "datadog-custom-destination-password", + "type": "basic", + "username": "datadog-custom-destination-username" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9608c7d6-8ea4-4487-88da-ab7620dd000c\",\"attributes\":{\"name\":\"Nginx logs\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"type\":\"basic\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[\"datacenter\",\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/9608c7d6-8ea4-4487-88da-ab7620dd000c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Basic HTTP custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:08.664Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "auth": { + "header_name": "MY-AUTHENTICATION-HEADER", + "header_value": "my-secret", + "type": "custom_header" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b522ed5a-3fab-47f4-a828-d34bd5632656\",\"attributes\":{\"name\":\"Nginx logs\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"header_name\":\"MY-AUTHENTICATION-HEADER\",\"type\":\"custom_header\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[\"datacenter\",\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/b522ed5a-3fab-47f4-a828-d34bd5632656", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Custom Header HTTP custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2025-06-20T08:10:33.243Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "client_id": "9a2f4d83-2b5e-429e-a35a-2b3c4182db71", + "data_collection_endpoint": "https://my-dce-5kyl.eastus-1.ingest.monitor.azure.com", + "data_collection_rule_id": "dcr-000a00a000a00000a000000aa000a0aa", + "stream_name": "Custom-MyTable", + "tenant_id": "f3c9a8a1-4c2e-4d2e-b911-9f3c28c3c8b2", + "type": "microsoft_sentinel" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"171ee4b7-e07f-43ca-85a5-23f762c161a7\",\"attributes\":{\"name\":\"Nginx logs\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"tenant_id\":\"f3c9a8a1-4c2e-4d2e-b911-9f3c28c3c8b2\",\"client_id\":\"9a2f4d83-2b5e-429e-a35a-2b3c4182db71\",\"data_collection_endpoint\":\"https://my-dce-5kyl.eastus-1.ingest.monitor.azure.com\",\"data_collection_rule_id\":\"dcr-000a00a000a00000a000000aa000a0aa\",\"stream_name\":\"Custom-MyTable\",\"type\":\"microsoft_sentinel\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[\"datacenter\",\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/171ee4b7-e07f-43ca-85a5-23f762c161a7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Microsoft Sentinel custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:09.499Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dcdf0ca2-b06a-4b75-8b07-0ba1987bd2fe\",\"attributes\":{\"name\":\"Nginx logs\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[\"datacenter\",\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/dcdf0ca2-b06a-4b75-8b07-0ba1987bd2fe", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Splunk custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:23:47.455Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": null, + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d328c779-9b3b-41c7-a952-20a7446eb7d1\",\"attributes\":{\"name\":\"Nginx logs\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\",\"sourcetype\":null},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/d328c779-9b3b-41c7-a952-20a7446eb7d1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Splunk custom destination with a null sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:23:49.008Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": "my-sourcetype", + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"429e154f-5cf5-41ce-ae15-4bc41563f46f\",\"attributes\":{\"name\":\"Nginx logs\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\",\"sourcetype\":\"my-sourcetype\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/429e154f-5cf5-41ce-ae15-4bc41563f46f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Splunk custom destination with a sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:23:50.210Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": "", + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cb6c24f4-f420-42dd-bc86-ce51e03f7968\",\"attributes\":{\"name\":\"Nginx logs\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\",\"sourcetype\":\"\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/cb6c24f4-f420-42dd-bc86-ce51e03f7968", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Splunk custom destination with an empty string sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:23:51.766Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": 123, + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid custom destination configuration\",\"Sourcetype must be a string or null\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a Splunk custom destination with an invalid sourcetype returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:23:52.120Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "type": "splunk_hec" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c475e180-758a-4503-a2ab-3ff1779c738a\",\"attributes\":{\"name\":\"Nginx logs\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/c475e180-758a-4503-a2ab-3ff1779c738a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Splunk custom destination without a sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:10.485Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Nginx logs" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"The parameter 'forwarder_destination' is required\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a custom destination returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:10.813Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "auth": { + "password": "my-password", + "username": "my-username" + }, + "endpoint": "https://example.com", + "index_name": "nginx-logs", + "index_rotation": "yyyy-MM-dd", + "type": "elasticsearch" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"922dba96-00c4-49fb-969c-aabf48a3d5c3\",\"attributes\":{\"name\":\"Nginx logs\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"index_name\":\"nginx-logs\",\"index_rotation\":\"yyyy-MM-dd\",\"endpoint\":\"https://example.com\",\"auth\":{},\"type\":\"elasticsearch\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[\"datacenter\",\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/922dba96-00c4-49fb-969c-aabf48a3d5c3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an Elasticsearch custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:11.769Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/does-not-exist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"NotFound\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a custom destination returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:12.109Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "host" + ], + "forward_tags_restriction_list_type": "BLOCK_LIST", + "forwarder_destination": { + "auth": { + "password": "my-password", + "type": "basic", + "username": "my-username" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Test-Delete_a_custom_destination_returns_OK_response-1710235212", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"596bb741-53be-49c6-939d-b5d4d9307689\",\"attributes\":{\"name\":\"Test-Delete_a_custom_destination_returns_OK_response-1710235212\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"type\":\"basic\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"BLOCK_LIST\",\"forward_tags_restriction_list\":[\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/596bb741-53be-49c6-939d-b5d4d9307689", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/596bb741-53be-49c6-939d-b5d4d9307689", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"NotFound\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:13.398Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/custom-destinations/does-not-exist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"NotFound\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a custom destination returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:13.821Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "host" + ], + "forward_tags_restriction_list_type": "BLOCK_LIST", + "forwarder_destination": { + "auth": { + "password": "my-password", + "type": "basic", + "username": "my-username" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Test-Get_a_custom_destination_returns_OK_response-1710235213", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"13e3f7e6-307e-4a91-a269-e016da18efc5\",\"attributes\":{\"name\":\"Test-Get_a_custom_destination_returns_OK_response-1710235213\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"type\":\"basic\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"BLOCK_LIST\",\"forward_tags_restriction_list\":[\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/custom-destinations/13e3f7e6-307e-4a91-a269-e016da18efc5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"13e3f7e6-307e-4a91-a269-e016da18efc5\",\"attributes\":{\"name\":\"Test-Get_a_custom_destination_returns_OK_response-1710235213\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"type\":\"basic\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"BLOCK_LIST\",\"forward_tags_restriction_list\":[\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/13e3f7e6-307e-4a91-a269-e016da18efc5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a custom destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:15.085Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "host" + ], + "forward_tags_restriction_list_type": "BLOCK_LIST", + "forwarder_destination": { + "auth": { + "password": "my-password", + "type": "basic", + "username": "my-username" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Test-Get_all_custom_destinations_returns_OK_response-1710235215", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"85883e0f-b010-4b8b-816d-a629600a4d0a\",\"attributes\":{\"name\":\"Test-Get_all_custom_destinations_returns_OK_response-1710235215\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"type\":\"basic\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"BLOCK_LIST\",\"forward_tags_restriction_list\":[\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"85883e0f-b010-4b8b-816d-a629600a4d0a\",\"attributes\":{\"name\":\"Test-Get_all_custom_destinations_returns_OK_response-1710235215\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"type\":\"basic\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"BLOCK_LIST\",\"forward_tags_restriction_list\":[\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/85883e0f-b010-4b8b-816d-a629600a4d0a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all custom destinations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:23:53.183Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": "my-sourcetype", + "type": "splunk_hec" + }, + "name": "Test-Update_a_Splunk_custom_destination_with_a_null_sourcetype_returns_OK_response-1774455833", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f718e9ba-6676-46f9-ae62-1e63b0348dbc\",\"attributes\":{\"name\":\"Test-Update_a_Splunk_custom_destination_with_a_null_sourcetype_returns_OK_response-1774455833\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\",\"sourcetype\":\"my-sourcetype\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": null, + "type": "splunk_hec" + } + }, + "id": "f718e9ba-6676-46f9-ae62-1e63b0348dbc", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/custom-destinations/f718e9ba-6676-46f9-ae62-1e63b0348dbc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f718e9ba-6676-46f9-ae62-1e63b0348dbc\",\"attributes\":{\"name\":\"Test-Update_a_Splunk_custom_destination_with_a_null_sourcetype_returns_OK_response-1774455833\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\",\"sourcetype\":null},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/f718e9ba-6676-46f9-ae62-1e63b0348dbc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Splunk custom destination with a null sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:23:54.709Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "type": "splunk_hec" + }, + "name": "Test-Update_a_Splunk_custom_destination_with_a_sourcetype_returns_OK_response-1774455834", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"12f30686-f946-4eb1-8988-643d55ad0cb9\",\"attributes\":{\"name\":\"Test-Update_a_Splunk_custom_destination_with_a_sourcetype_returns_OK_response-1774455834\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": "new-sourcetype", + "type": "splunk_hec" + } + }, + "id": "12f30686-f946-4eb1-8988-643d55ad0cb9", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/custom-destinations/12f30686-f946-4eb1-8988-643d55ad0cb9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"12f30686-f946-4eb1-8988-643d55ad0cb9\",\"attributes\":{\"name\":\"Test-Update_a_Splunk_custom_destination_with_a_sourcetype_returns_OK_response-1774455834\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\",\"sourcetype\":\"new-sourcetype\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/12f30686-f946-4eb1-8988-643d55ad0cb9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Splunk custom destination with a sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:23:55.981Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "type": "splunk_hec" + }, + "name": "Test-Update_a_Splunk_custom_destination_s_attributes_preserves_the_absent_sourcetype_returns_OK_response-1774455835", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9ac57fd5-857f-4082-badc-463ecd1e990d\",\"attributes\":{\"name\":\"Test-Update_a_Splunk_custom_destination_s_attributes_preserves_the_absent_sourcetype_returns_OK_response-1774455835\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Nginx logs (Updated)" + }, + "id": "9ac57fd5-857f-4082-badc-463ecd1e990d", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/custom-destinations/9ac57fd5-857f-4082-badc-463ecd1e990d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9ac57fd5-857f-4082-badc-463ecd1e990d\",\"attributes\":{\"name\":\"Nginx logs (Updated)\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/9ac57fd5-857f-4082-badc-463ecd1e990d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Splunk custom destination's attributes preserves the absent sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:23:59.087Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": null, + "type": "splunk_hec" + }, + "name": "Test-Update_a_Splunk_custom_destination_s_destination_preserves_the_null_sourcetype_returns_OK_response-1774455839", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"1cf9102b-169d-4a5c-a82b-aa5b3a12d6c5\",\"attributes\":{\"name\":\"Test-Update_a_Splunk_custom_destination_s_destination_preserves_the_null_sourcetype_returns_OK_response-1774455839\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\",\"sourcetype\":null},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://updated-example.com", + "type": "splunk_hec" + } + }, + "id": "1cf9102b-169d-4a5c-a82b-aa5b3a12d6c5", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/custom-destinations/1cf9102b-169d-4a5c-a82b-aa5b3a12d6c5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"1cf9102b-169d-4a5c-a82b-aa5b3a12d6c5\",\"attributes\":{\"name\":\"Test-Update_a_Splunk_custom_destination_s_destination_preserves_the_null_sourcetype_returns_OK_response-1774455839\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://updated-example.com\",\"type\":\"splunk_hec\",\"sourcetype\":null},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/1cf9102b-169d-4a5c-a82b-aa5b3a12d6c5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Splunk custom destination's destination preserves the null sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2026-03-25T16:24:00.500Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://example.com", + "sourcetype": "my-sourcetype", + "type": "splunk_hec" + }, + "name": "Test-Update_a_Splunk_custom_destination_s_destination_preserves_the_sourcetype_returns_OK_response-1774455840", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fa416048-c8e1-4b5a-a3e1-b6c2538d5903\",\"attributes\":{\"name\":\"Test-Update_a_Splunk_custom_destination_s_destination_preserves_the_sourcetype_returns_OK_response-1774455840\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"type\":\"splunk_hec\",\"sourcetype\":\"my-sourcetype\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "forwarder_destination": { + "access_token": "my-access-token", + "endpoint": "https://updated-example.com", + "type": "splunk_hec" + } + }, + "id": "fa416048-c8e1-4b5a-a3e1-b6c2538d5903", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/custom-destinations/fa416048-c8e1-4b5a-a3e1-b6c2538d5903", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fa416048-c8e1-4b5a-a3e1-b6c2538d5903\",\"attributes\":{\"name\":\"Test-Update_a_Splunk_custom_destination_s_destination_preserves_the_sourcetype_returns_OK_response-1774455840\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://updated-example.com\",\"type\":\"splunk_hec\",\"sourcetype\":\"my-sourcetype\"},\"forward_tags_restriction_list_type\":\"ALLOW_LIST\",\"forward_tags_restriction_list\":[],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/fa416048-c8e1-4b5a-a3e1-b6c2538d5903", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a Splunk custom destination's destination preserves the sourcetype returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:16.332Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "host" + ], + "forward_tags_restriction_list_type": "BLOCK_LIST", + "forwarder_destination": { + "auth": { + "password": "my-password", + "type": "basic", + "username": "my-username" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Test-Update_a_custom_destination_returns_Bad_Request_response-1710235216", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0f1b60fc-4671-4bd5-834b-bc86c8a5065b\",\"attributes\":{\"name\":\"Test-Update_a_custom_destination_returns_Bad_Request_response-1710235216\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"type\":\"basic\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"BLOCK_LIST\",\"forward_tags_restriction_list\":[\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "forward_tags_restriction_list_type": "this_list_type_does_not_exist" + }, + "id": "0f1b60fc-4671-4bd5-834b-bc86c8a5065b", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/custom-destinations/0f1b60fc-4671-4bd5-834b-bc86c8a5065b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Internal error\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/0f1b60fc-4671-4bd5-834b-bc86c8a5065b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a custom destination returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-03-12T09:20:17.628Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "datacenter", + "host" + ], + "forward_tags_restriction_list_type": "ALLOW_LIST", + "forwarder_destination": { + "auth": { + "password": "datadog-custom-destination-password", + "type": "basic", + "username": "datadog-custom-destination-username" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Nginx logs", + "query": "source:nginx" + }, + "id": "id-from-non-existing-custom-destination", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/custom-destinations/id-from-non-existing-custom-destination", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"NotFound\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a custom destination returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Logs Custom Destinations", + "frozen_at": "2024-04-05T19:31:41.540Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list": [ + "host" + ], + "forward_tags_restriction_list_type": "BLOCK_LIST", + "forwarder_destination": { + "auth": { + "password": "my-password", + "type": "basic", + "username": "my-username" + }, + "endpoint": "https://example.com", + "type": "http" + }, + "name": "Test-Update_a_custom_destination_returns_OK_response-1712345501", + "query": "source:nginx" + }, + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/custom-destinations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"60f4b01e-7853-4d48-8f6d-b98802dca889\",\"attributes\":{\"name\":\"Test-Update_a_custom_destination_returns_OK_response-1712345501\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"type\":\"basic\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"BLOCK_LIST\",\"forward_tags_restriction_list\":[\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "forward_tags": false, + "forward_tags_restriction_list_type": "BLOCK_LIST", + "name": "Nginx logs (Updated)", + "query": "source:nginx" + }, + "id": "60f4b01e-7853-4d48-8f6d-b98802dca889", + "type": "custom_destination" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/custom-destinations/60f4b01e-7853-4d48-8f6d-b98802dca889", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"60f4b01e-7853-4d48-8f6d-b98802dca889\",\"attributes\":{\"name\":\"Nginx logs (Updated)\",\"query\":\"source:nginx\",\"enabled\":false,\"forwarder_destination\":{\"endpoint\":\"https://example.com\",\"auth\":{\"type\":\"basic\"},\"type\":\"http\"},\"forward_tags_restriction_list_type\":\"BLOCK_LIST\",\"forward_tags_restriction_list\":[\"host\"],\"forward_tags\":false},\"type\":\"custom_destination\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/custom-destinations/60f4b01e-7853-4d48-8f6d-b98802dca889", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a custom destination returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/logs-metrics.json b/test-server-data/v2/logs-metrics.json new file mode 100644 index 0000000000..b0eddd3661 --- /dev/null +++ b/test-server-data/v2/logs-metrics.json @@ -0,0 +1,543 @@ +{ + "feature": "Logs Metrics", + "recordings": [ + { + "feature": "Logs Metrics", + "frozen_at": "2023-06-07T11:54:15.336Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + } + }, + "id": "TestCreatealogbasedmetricreturnsOKresponse1686138855", + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"TestCreatealogbasedmetricreturnsOKresponse1686138855\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/metrics/TestCreatealogbasedmetricreturnsOKresponse1686138855", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a log-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "frozen_at": "2023-04-18T17:27:11.097Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "count" + }, + "filter": { + "query": "source:Test-Delete_a_log_based_metric_returns_OK_response-1681838831" + } + }, + "id": "Test-Delete_a_log_based_metric_returns_OK_response-1681838831", + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Delete_a_log_based_metric_returns_OK_response_1681838831\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Delete_a_log_based_metric_returns_OK_response-1681838831\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/metrics/Test_Delete_a_log_based_metric_returns_OK_response_1681838831", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/metrics/Test_Delete_a_log_based_metric_returns_OK_response_1681838831", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Metric with name 'Test_Delete_a_log_based_metric_returns_OK_response_1681838831' not found)\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a log-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "frozen_at": "2023-06-07T11:58:04.048Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "count" + }, + "filter": { + "query": "source:Test-Get_a_log_based_metric_returns_OK_response-1686139084" + } + }, + "id": "Test-Get_a_log_based_metric_returns_OK_response-1686139084", + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1686139084\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1686139084\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/metrics/Test_Get_a_log_based_metric_returns_OK_response_1686139084", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1686139084\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1686139084\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/metrics/Test_Get_a_log_based_metric_returns_OK_response_1686139084", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a log-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "frozen_at": "2023-06-07T11:58:41.908Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "count" + }, + "filter": { + "query": "source:Test-Get_all_log_based_metrics_returns_OK_response-1686139121" + } + }, + "id": "Test-Get_all_log_based_metrics_returns_OK_response-1686139121", + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1686139121\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1686139121\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1607014407.161855\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"go_Feature_Logs_Metrics_Scenario_Get_all_log_based_metrics_returns_OK_response_37807_1608735831\",\"attributes\":{\"filter\":{\"query\":\"source:go-Feature_Logs_Metrics-Scenario_Get_all_log_based_metrics_returns__OK__response-37807-1608735831\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"mlb.to.delete.5\",\"attributes\":{\"filter\":{\"query\":\"service:test\"},\"group_by\":[{\"path\":\"@status\",\"tag_name\":\"status\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"logs_metrics\"},{\"id\":\"mlb.to.delete.7\",\"attributes\":{\"filter\":{\"query\":\"service:test\"},\"group_by\":[{\"path\":\"@status\",\"tag_name\":\"status\"}],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"tf_TestAccDatadogLogsMetric_import_local_1612175492\",\"attributes\":{\"filter\":{\"query\":\"service:test\"},\"group_by\":[{\"path\":\"@my.status\",\"tag_name\":\"status\"},{\"path\":\"service\",\"tag_name\":\"service\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1613674902.961\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Get_a_log_based_metric_returns_OK_response_1613674904.843\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Get_a_log_based_metric_returns_OK_response-1613674904.843\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Get_all_log_based_metrics_returns_OK_response_1613674905.893\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Get_all_log_based_metrics_returns_OK_response-1613674905.893\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Update_a_log_based_metric_returns_OK_response_1613674907.023\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Update_a_log_based_metric_returns_OK_response-1613674907.023-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1613675381.562\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Get_a_log_based_metric_returns_OK_response_1613675383.575\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Get_a_log_based_metric_returns_OK_response-1613675383.575\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Get_all_log_based_metrics_returns_OK_response_1613675384.642\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Get_all_log_based_metrics_returns_OK_response-1613675384.642\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Update_a_log_based_metric_returns_OK_response_1613675386.161\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Update_a_log_based_metric_returns_OK_response-1613675386.161-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1614072176.745\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Delete_a_log_based_metric_returns_OK_response_1614072181.786\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Delete_a_log_based_metric_returns_OK_response-1614072181.786\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Get_all_log_based_metrics_returns_OK_response_1614072193.929\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Get_all_log_based_metrics_returns_OK_response-1614072193.929\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Get_all_log_based_metrics_returns_OK_response_1614073795.81\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Get_all_log_based_metrics_returns_OK_response-1614073795.81\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"ruby_Update_a_log_based_metric_returns_OK_response_1614194424\",\"attributes\":{\"filter\":{\"query\":\"source:ruby-Update_a_log_based_metric_returns_OK_response-1614194424-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1608595661.620162\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"datadog_api_client_python_test_delete_a_logbased_metric_returns_ok_response_1608595670.983057\",\"attributes\":{\"filter\":{\"query\":\"source:datadog-api-client-python-test_delete_a_logbased_metric_returns_ok_response-1608595670.983057\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"datadog_api_client_python_test_get_a_logbased_metric_returns_ok_response_1608595669.067374\",\"attributes\":{\"filter\":{\"query\":\"source:datadog-api-client-python-test_get_a_logbased_metric_returns_ok_response-1608595669.067374\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"datadog_api_client_python_test_get_all_logbased_metrics_returns_ok_response_1608595675.324394\",\"attributes\":{\"filter\":{\"query\":\"source:datadog-api-client-python-test_get_all_logbased_metrics_returns_ok_response-1608595675.324394\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1614896593.355\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"datadog_api_client_python_test_update_a_logbased_metric_returns_ok_response_1608595673.013269\",\"attributes\":{\"filter\":{\"query\":\"source:datadog-api-client-python-test_update_a_logbased_metric_returns_ok_response-1608595673.013269\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Create_a_log_based_metric_returns_OK_response_1616149774.73\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"go_Feature_Logs_Metrics_Scenario_Get_all_log_based_metrics_returns_OK_response_54239_1616717117\",\"attributes\":{\"filter\":{\"query\":\"source:go-Feature_Logs_Metrics-Scenario_Get_all_log_based_metrics_returns__OK__response-54239-1616717117\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1617014547.984513\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1617189622.037749\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"datadog_api_client_python_test_create_a_logbased_metric_returns_ok_response_1617190464.536072\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Typescript_Get_all_log_based_metrics_returns_OK_response_1617197330.21\",\"attributes\":{\"filter\":{\"query\":\"source:Typescript-Get_all_log_based_metrics_returns_OK_response-1617197330.21\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"go_Feature_Logs_Metrics_Scenario_Get_all_log_based_metrics_returns_OK_response_57310_1617968823\",\"attributes\":{\"filter\":{\"query\":\"source:go-Feature_Logs_Metrics-Scenario_Get_all_log_based_metrics_returns__OK__response-57310-1617968823\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"ruby_Create_a_log_based_metric_returns_OK_response_1617976084\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"ruby_Get_a_log_based_metric_returns_OK_response_1617980078\",\"attributes\":{\"filter\":{\"query\":\"source:ruby-Get_a_log_based_metric_returns_OK_response-1617980078\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Delete_a_log_based_metric_returns_OK_response_1618220982\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Delete_a_log_based_metric_returns_OK_response-1618220982\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"datadog_api_client_python_test_get_all_logbased_metrics_returns_ok_response_1618226967.951386\",\"attributes\":{\"filter\":{\"query\":\"source:datadog-api-client-python-test_get_all_logbased_metrics_returns_ok_response-1618226967.951386\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1618245179\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1618245179\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Java_Create_a_log_based_metric_returns_OK_response_1618407299\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Java_Get_a_log_based_metric_returns_OK_response_1618418141\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Java-Get_a_log_based_metric_returns_OK_response-1618418141\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Java_Delete_a_log_based_metric_returns_OK_response_1618580126\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Java-Delete_a_log_based_metric_returns_OK_response-1618580126\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Get_a_log_based_metric_returns_OK_response_1618828162\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Get_a_log_based_metric_returns_OK_response-1618828162\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Create_a_log_based_metric_returns_OK_response_1618831542\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Get_all_log_based_metrics_returns_OK_response_1618835641\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Get_all_log_based_metrics_returns_OK_response-1618835641\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1618835641\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1618835641\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Go_Update_a_log_based_metric_returns_OK_response_1618840619\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Go-Update_a_log_based_metric_returns_OK_response-1618840619\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Ruby_Get_all_log_based_metrics_returns_OK_response_1619689433\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Ruby-Get_all_log_based_metrics_returns_OK_response-1619689433\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Update_a_log_based_metric_returns_OK_response_1619711301\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Update_a_log_based_metric_returns_OK_response-1619711301\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Ruby_Update_a_log_based_metric_returns_OK_response_1620930847\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Ruby-Update_a_log_based_metric_returns_OK_response-1620930847\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Java_Update_a_log_based_metric_returns_OK_response_1626363689\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Java-Update_a_log_based_metric_returns_OK_response-1626363689\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Java_Update_a_log_based_metric_returns_OK_response_1628583537\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Java-Update_a_log_based_metric_returns_OK_response-1628583537-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Delete_a_log_based_metric_returns_OK_response_1631884323\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Delete_a_log_based_metric_returns_OK_response-1631884323\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1631884326\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1631884326\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1631884330\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1631884330\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1631884333\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1631884333\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1631884446\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1631884446\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Delete_a_log_based_metric_returns_OK_response_1631884451\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Delete_a_log_based_metric_returns_OK_response-1631884451\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1631884452\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1631884452\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1631884457\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1631884457\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1631884657\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1631884657\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1631884663\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1631884663\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Delete_a_log_based_metric_returns_OK_response_1631884664\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Delete_a_log_based_metric_returns_OK_response-1631884664\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1631884670\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1631884670\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1631884723\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1631884723\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Delete_a_log_based_metric_returns_OK_response_1631884727\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Delete_a_log_based_metric_returns_OK_response-1631884727\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1631884729\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1631884729\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1631884731\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1631884731\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Delete_a_log_based_metric_returns_OK_response_1631886015\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Delete_a_log_based_metric_returns_OK_response-1631886015\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Update_a_log_based_metric_returns_OK_response_1631886022\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Update_a_log_based_metric_returns_OK_response-1631886022\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Get_all_log_based_metrics_returns_OK_response_1631886029\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Get_all_log_based_metrics_returns_OK_response-1631886029\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Get_a_log_based_metric_returns_OK_response_1631886036\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Get_a_log_based_metric_returns_OK_response-1631886036\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Delete_a_log_based_metric_returns_OK_response_1632133176\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Delete_a_log_based_metric_returns_OK_response-1632133176\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632328087\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632817303\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632817303\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632817303\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632817304\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632817304\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632817304\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632817304-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632820224\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632820225\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632820225\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632820225\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632820225\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632820225\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632820225-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632820425\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632820426\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632820426\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632820426\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632820426\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632820427\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632820427-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632821189\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632821190\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632821190\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632821191\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632821191\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632821192\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632821192-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632821487\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632821488\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632821488\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632821488\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632821488\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632821488\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632821488-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632824835\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632824837\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632824837\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632824838\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632824838\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632824838\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632824838-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632826421\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632826422\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632826422\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632826423\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632826423\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632826423\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632826423-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632827387\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632827389\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632827389\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632827390\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632827390\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632827391\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632827391-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632828986\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632828987\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632828987\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632828987\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632828987\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632828987\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632828987-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632832883\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632832884\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632832884\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632832884\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632832884\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632832885\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632832885-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632833151\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632833152\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632833152\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632833152\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632833152\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632833152\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632833152-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632836431\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632836432\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632836432\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632836432\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632836432\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632836433\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632836433-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632839523\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632839523\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632839523\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632839523\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632839523\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632839524\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632839524-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632839540\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632839544\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632839544\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632839545\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632839545\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632839545\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632839545-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632839741\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632839742\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632839742\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632839742\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632839742\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632839743\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632839743-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632841151\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632841152\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632841152\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632841153\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632841153\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632841153\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632841153-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632842468\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632842469\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632842469\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632842469\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632842469\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632843061\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632843062\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632843062\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632843063\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632843063\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632843063\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632843063-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632844008\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632844008\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632844008\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632844009\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632844009\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632844009\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632844009-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632844127\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632844127\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632844127\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632844127\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632844127\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632844128\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632844128-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632846619\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632846621\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632846621\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632846622\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632846622\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632846622\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632846622-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632847587\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632847588\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632847588\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632847589\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632847589-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632848076\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632848077\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632848077\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632848078\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632848078\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632848079\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632848079-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632848436\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632848437\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632848437\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632848438\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632848438\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632848438\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632848438-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632848876\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632848878\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632848878\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632848878\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632848878\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632848878\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632848878-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632849661\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632849663\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632849663\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632849664\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632849664\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632849665\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632849665-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632849879\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632849880\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632849880\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632849880\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632849880\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632849881\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632849881-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632851109\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632851110\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632851110\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632851111\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632851111\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632851112\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632851112-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632888511\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632888512\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632888512\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632888512\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632888512\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632888513\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632888513-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632898971\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632898972\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632898972\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632898972\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632898972\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632898973\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632898973-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632899187\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632899188\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632899188\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632899188\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632899188\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632899188\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632899188-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632902887\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632902887\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632902887\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632902887\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632902887\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632902887-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632903468\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632903469\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632903469\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632903470\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632903470\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632903470\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632903470-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632904020\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632904020\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632904020\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632904021\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632904021\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632904021\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632904021-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632907313\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632907313\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632907313\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632907314\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632907314\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632907314\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632907314-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632907331\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632907331\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632907333\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632907333\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632907333\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632907333-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632908380\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632908381\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632908381\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632908382\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632908382\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632908382\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632908382-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632909874\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632909875\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632909875\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632909876\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632909876\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632909877\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632909877-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632910728\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632910729\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632910729\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632910730\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632910730\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632910731\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632910731-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632913792\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632913794\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632913794\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632913794\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632913794\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632913795\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632913795-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632918172\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632918173\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632918173\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632918174\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632918174\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632918174\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632918174-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632919344\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632919345\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632919345\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632919345\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632919345\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632919345\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632919345-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632919560\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632919561\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632919561\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632919561\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632919561\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632919562\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632919562-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632921859\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632921860\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632921860\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632921860\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632921860\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632921861\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632921861-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632922194\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632922195\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632922195\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632922195\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632922195\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632922195\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632922195-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632928242\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632928243\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632928243\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632928243\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632928243\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632928243\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632928243-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Go_Get_a_log_based_metric_returns_OK_response_1632929648\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Go-Get_a_log_based_metric_returns_OK_response-1632929648\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632933825\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632933826\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632933826\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632933827\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632933827\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632933828\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632933828-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632974958\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632974959\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632974959\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632974959\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632974959\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632974959\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632974959-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632986079\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632986079\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632986079\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632986080\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632986080\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632986080\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632986080-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632989750\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632989751\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632989751\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632989751\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632989751\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632989751\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632989751-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1632997303\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1632997304\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1632997304\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1632997304\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1632997304\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1632997304\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1632997304-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633000123\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1633000124\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1633000124\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1633000125\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1633000125\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1633000126\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1633000126-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633003782\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1633003783\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1633003783\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1633003784\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1633003784\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1633003784\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1633003784-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633004062\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1633004062\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1633004062\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1633004063\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1633004063\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1633004063\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1633004063-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633006696\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1633006696\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1633006696\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1633006697\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1633006697\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1633006697\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1633006697-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633007533\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1633007534\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1633007534\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1633007534\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1633007534\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1633007535\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1633007535-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633011091\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1633011092\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1633011092\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1633011093\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1633011093\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1633011094\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1633011094-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633011226\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1633011227\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1633011227\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1633011228\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1633011228\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1633011229\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1633011229-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1633015432\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1633015433\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1633015433\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1633015434\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1633015434\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1633015435\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1633015435-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Go_Create_a_log_based_metric_returns_OK_response_1634316108\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Go_Get_all_log_based_metrics_returns_OK_response_1636639366\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Go-Get_all_log_based_metrics_returns_OK_response-1636639366\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Ruby_Update_a_log_based_metric_returns_OK_response_1636639366\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Ruby-Update_a_log_based_metric_returns_OK_response-1636639366\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Create_a_log_based_metric_returns_OK_response_1618491718\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[{\"path\":\"source\",\"tag_name\":\"source\"},{\"path\":\"status\",\"tag_name\":\"status\"}],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Create_a_log_based_metric_returns_OK_response_1637063323\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1637063324\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1637063324\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1637063324\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1637063324\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1637063325\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1637063325-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Create_a_log_based_metric_returns_OK_response_1637070501\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1637070502\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1637070502\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1637070503\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1637070503\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1637070505\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1637070505-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Create_a_log_based_metric_returns_OK_response_1637077938\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1637077940\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1637077940\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1637077941\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1637077941\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1637077942\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1637077942-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Create_a_log_based_metric_returns_OK_response_1637078452\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1637078453\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1637078453\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1637078454\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1637078454\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1637078455\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1637078455-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1637140745\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1637140745-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Delete_a_log_based_metric_returns_OK_response_1618491719\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Delete_a_log_based_metric_returns_OK_response-1618491719\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1618491721\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1618491721\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1618491725\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1618491725\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Create_a_log_based_metric_returns_OK_response_1637141184\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1637141185\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1637141185\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1637141186\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1637141186\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1637141187\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1637141187-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Get_a_log_based_metric_returns_OK_response_1638987050\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Get_a_log_based_metric_returns_OK_response-1638987050\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Get_all_log_based_metrics_returns_OK_response_1638987051\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Get_all_log_based_metrics_returns_OK_response-1638987051\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Delete_a_log_based_metric_returns_OK_response_1638987052\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Delete_a_log_based_metric_returns_OK_response-1638987052\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Update_a_log_based_metric_returns_OK_response_1638987054\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Python-Update_a_log_based_metric_returns_OK_response-1638987054\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Python_Create_a_log_based_metric_returns_OK_response_1638987055\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1640112763\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Create_a_log_based_metric_returns_OK_response_1640112922\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1642756658\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Delete_a_log_based_metric_returns_OK_response_1642756658\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Delete_a_log_based_metric_returns_OK_response-1642756658\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1642756658\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1642756658\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1642756659\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1642756659\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1642756659\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1642756659\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Create_a_log_based_metric_returns_OK_response_1651997960\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Delete_a_log_based_metric_returns_OK_response_1651997961\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Delete_a_log_based_metric_returns_OK_response-1651997961\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1651997962\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1651997962\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_all_log_based_metrics_returns_OK_response_1651997962\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_all_log_based_metrics_returns_OK_response-1651997962\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1651997963\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1651997963-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1657945126\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1657945126-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Example_Create_a_log_based_metric_returns_OK_response_1665705374\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Example_Update_a_log_based_metric_returns_OK_response_1665705415\",\"attributes\":{\"filter\":{\"query\":\"source:Example-Update_a_log_based_metric_returns_OK_response_1665705415-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"tf_TestAccDatadogLogsMetric_Basic_local_1669398403\",\"attributes\":{\"filter\":{\"query\":\"service:test\"},\"group_by\":[{\"path\":\"@my.status\",\"tag_name\":\"status\"},{\"path\":\"service\",\"tag_name\":\"service\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"logs_metrics\"},{\"id\":\"Example_Get_all_log_based_metrics_returns_OK_response_1670255553\",\"attributes\":{\"filter\":{\"query\":\"source:Example-Get_all_log_based_metrics_returns_OK_response_1670255553\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Example_Get_a_log_based_metric_returns_OK_response_1671998052\",\"attributes\":{\"filter\":{\"query\":\"source:Example-Get_a_log_based_metric_returns_OK_response_1671998052\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Go_Update_a_log_based_metric_returns_OK_response_1674173548\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Go-Update_a_log_based_metric_returns_OK_response-1674173548\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Ruby_Update_a_log_based_metric_returns_OK_response_1674182066\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Ruby-Update_a_log_based_metric_returns_OK_response-1674182066\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Java_Update_a_log_based_metric_returns_OK_response_1674184712\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Java-Update_a_log_based_metric_returns_OK_response-1674184712\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1674188253\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1674188253\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Update_a_log_based_metric_returns_OK_response_1674213689\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Update_a_log_based_metric_returns_OK_response-1674213689\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1674221306\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1674221306\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"TestCreatealogbasedmetricreturnsOKresponse1677856551\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Delete_a_log_based_metric_returns_OK_response_1677856552\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Delete_a_log_based_metric_returns_OK_response-1677856552\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_a_log_based_metric_returns_OK_response_1677856552\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_log_based_metric_returns_OK_response-1677856552\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1677856553\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1677856553\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1677856554\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1677856554\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response_1677856555\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response-1677856555\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Typescript_Get_a_log_based_metric_returns_OK_response_1680236286\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Typescript-Get_a_log_based_metric_returns_OK_response-1680236286\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Go_Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response_1680308028\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Go-Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response-1680308028\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric0\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric1\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric2\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric3\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric4\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric5\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric6\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric7\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric8\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric9\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric10\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"ExampleLogsMetric11\",\"attributes\":{\"filter\":{\"query\":\"*\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"},{\"id\":\"Test_Get_all_log_based_metrics_returns_OK_response_1686139121\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_log_based_metrics_returns_OK_response-1686139121\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/metrics/Test_Get_all_log_based_metrics_returns_OK_response_1686139121", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all log-based metrics returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "frozen_at": "2023-06-07T11:55:30.514Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "count" + }, + "filter": { + "query": "source:Test-Update_a_log_based_metric_returns_OK_response-1686138930" + } + }, + "id": "Test-Update_a_log_based_metric_returns_OK_response-1686138930", + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1686138930\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1686138930\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "source:Test-Update_a_log_based_metric_returns_OK_response-1686138930-updated" + } + }, + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/metrics/Test_Update_a_log_based_metric_returns_OK_response_1686138930", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Update_a_log_based_metric_returns_OK_response_1686138930\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_returns_OK_response-1686138930-updated\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"count\"}},\"type\":\"logs_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/metrics/Test_Update_a_log_based_metric_returns_OK_response_1686138930", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a log-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Metrics", + "frozen_at": "2023-06-07T11:56:02.715Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "filter": { + "query": "source:Test-Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response-1686138962" + } + }, + "id": "Test-Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response-1686138962", + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response_1686138962\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response-1686138962\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":true}},\"type\":\"logs_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": false + } + }, + "type": "logs_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/logs/config/metrics/Test_Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response_1686138962", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response_1686138962\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response-1686138962\"},\"group_by\":[],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"logs_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/metrics/Test_Update_a_log_based_metric_with_include_percentiles_field_returns_OK_response_1686138962", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a log-based metric with include_percentiles field returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/logs-restriction-queries.json b/test-server-data/v2/logs-restriction-queries.json new file mode 100644 index 0000000000..4f9d58df34 --- /dev/null +++ b/test-server-data/v2/logs-restriction-queries.json @@ -0,0 +1,988 @@ +{ + "feature": "Logs Restriction Queries", + "recordings": [ + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:04.509Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "test": "bad_request" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/restriction_queries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"API input validation failed: {'_schema': [{'detail': 'Object must include `data` key.', 'source': {'pointer': '/'}}]}\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:05.128Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "restriction_query": "env:sandbox" + }, + "type": "logs_restriction_queries" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/restriction_queries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"logs_restriction_queries\",\"id\":\"2b5594f8-c4b3-11f0-a05d-da7ad0900002\",\"attributes\":{\"restriction_query\":\"env:sandbox\",\"created_at\":\"2025-11-18T19:17:05.370176+00:00\",\"modified_at\":\"2025-11-18T19:17:05.370176+00:00\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/restriction_queries/2b5594f8-c4b3-11f0-a05d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a restriction query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:06.402Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/restriction_queries/malformed_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"uuid is not proper type\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:06.567Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/restriction_queries/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Restriction query not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a restriction query returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:06.720Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "restriction_query": "env:sandbox" + }, + "type": "logs_restriction_queries" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/restriction_queries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"logs_restriction_queries\",\"id\":\"2c373dc2-c4b3-11f0-8ca7-da7ad0900002\",\"attributes\":{\"restriction_query\":\"env:sandbox\",\"created_at\":\"2025-11-18T19:17:06.848316+00:00\",\"modified_at\":\"2025-11-18T19:17:06.848316+00:00\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/restriction_queries/2c373dc2-c4b3-11f0-8ca7-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/restriction_queries/2c373dc2-c4b3-11f0-8ca7-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Restriction query not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a restriction query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:07.277Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/malformed_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"uuid is not proper type\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:07.461Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Restriction query not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a restriction query returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:07.622Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "restriction_query": "env:sandbox" + }, + "type": "logs_restriction_queries" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/restriction_queries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"logs_restriction_queries\",\"id\":\"2cc39998-c4b3-11f0-8b4b-da7ad0900002\",\"attributes\":{\"restriction_query\":\"env:sandbox\",\"created_at\":\"2025-11-18T19:17:07.768188+00:00\",\"modified_at\":\"2025-11-18T19:17:07.768188+00:00\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/2cc39998-c4b3-11f0-8b4b-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"logs_restriction_queries\",\"id\":\"2cc39998-c4b3-11f0-8b4b-da7ad0900002\",\"attributes\":{\"restriction_query\":\"env:sandbox\",\"created_at\":\"2025-11-18T19:17:07.768188+00:00\",\"modified_at\":\"2025-11-18T19:17:07.768188+00:00\"},\"relationships\":{\"roles\":{\"data\":[]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/restriction_queries/2cc39998-c4b3-11f0-8b4b-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a restriction query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:08.172Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/user/malformed_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"uuid is not proper type\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get all restriction queries for a given user returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:08.336Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/user/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"user with uuid 00000000-0000-0000-0000-000000000000 doesn't exist\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get all restriction queries for a given user returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:08.604Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/role/malformed_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Missing Role malformed_id\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get restriction query for a given role returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:08.828Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/role/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Missing Role 00000000-0000-0000-0000-000000000000\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get restriction query for a given role returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:08.994Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_restriction_query_for_a_given_role_returns_OK_response-1763493428" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2d925300-c4b3-11f0-a252-da7ad0900002\",\"type\":\"roles\",\"attributes\":{\"created_at\":\"2025-11-18T19:17:09.12367Z\",\"modified_at\":\"2025-11-18T19:17:09.123777Z\",\"name\":\"Test-Get_restriction_query_for_a_given_role_returns_OK_response-1763493428\",\"team_count\":0,\"user_count\":0},\"relationships\":{\"permissions\":{\"data\":[{\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"type\":\"permissions\"},{\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"type\":\"permissions\"},{\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"type\":\"permissions\"},{\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"type\":\"permissions\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/role/2d925300-c4b3-11f0-a252-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/2d925300-c4b3-11f0-a252-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get restriction query for a given role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:09.440Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/restriction_queries/malformed_id/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Role with id: 3653d3c6-0c75-11ea-ad28-fb5701eabc7d not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Grant role to a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:09.623Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "3653d3c6-0c75-11ea-ad28-fb5701eabc7d", + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/restriction_queries/00000000-0000-0000-0000-000000000000/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Role with id: 3653d3c6-0c75-11ea-ad28-fb5701eabc7d not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Grant role to a restriction query returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:09.783Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "restriction_query": "env:sandbox" + }, + "type": "logs_restriction_queries" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/restriction_queries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"logs_restriction_queries\",\"id\":\"2e0a0abc-c4b3-11f0-9b1d-da7ad0900002\",\"attributes\":{\"restriction_query\":\"env:sandbox\",\"created_at\":\"2025-11-18T19:17:09.907646+00:00\",\"modified_at\":\"2025-11-18T19:17:09.907646+00:00\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Grant_role_to_a_restriction_query_returns_OK_response-1763493429" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2e209fb6-c4b3-11f0-8483-da7ad0900002\",\"type\":\"roles\",\"attributes\":{\"created_at\":\"2025-11-18T19:17:10.056015Z\",\"modified_at\":\"2025-11-18T19:17:10.056318Z\",\"name\":\"Test-Grant_role_to_a_restriction_query_returns_OK_response-1763493429\",\"team_count\":0,\"user_count\":0},\"relationships\":{\"permissions\":{\"data\":[{\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"type\":\"permissions\"},{\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"type\":\"permissions\"},{\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"type\":\"permissions\"},{\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"type\":\"permissions\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "2e209fb6-c4b3-11f0-8483-da7ad0900002", + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/restriction_queries/2e0a0abc-c4b3-11f0-9b1d-da7ad0900002/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/2e209fb6-c4b3-11f0-8483-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/restriction_queries/2e0a0abc-c4b3-11f0-9b1d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Grant role to a restriction query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:10.912Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"logs_restriction_queries\",\"id\":\"6358d012-be7e-11f0-8999-da7ad0900002\",\"attributes\":{\"restriction_query\":\"env:production\",\"created_at\":\"2025-11-10T21:44:09.039708+00:00\",\"modified_at\":\"2025-11-10T21:44:09.164487+00:00\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List restriction queries returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:11.052Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/malformed_id/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"uuid is not proper type\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List roles for a restriction query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:11.231Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/00000000-0000-0000-0000-000000000000/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Restriction query not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "List roles for a restriction query returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Logs Restriction Queries", + "frozen_at": "2025-11-18T19:17:11.376Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "restriction_query": "env:sandbox" + }, + "type": "logs_restriction_queries" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/config/restriction_queries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"logs_restriction_queries\",\"id\":\"2efc1406-c4b3-11f0-a6d9-da7ad0900002\",\"attributes\":{\"restriction_query\":\"env:sandbox\",\"created_at\":\"2025-11-18T19:17:11.492694+00:00\",\"modified_at\":\"2025-11-18T19:17:11.492694+00:00\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/config/restriction_queries/2efc1406-c4b3-11f0-a6d9-da7ad0900002/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/logs/config/restriction_queries/2efc1406-c4b3-11f0-a6d9-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List roles for a restriction query returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/logs.json b/test-server-data/v2/logs.json new file mode 100644 index 0000000000..d4b92521f2 --- /dev/null +++ b/test-server-data/v2/logs.json @@ -0,0 +1,513 @@ +{ + "feature": "Logs", + "recordings": [ + { + "feature": "Logs", + "frozen_at": "2024-10-01T15:36:42.516Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "compute": [ + { + "aggregation": "count", + "interval": "5m", + "type": "timeseries" + } + ], + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "query": "*", + "to": "now" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/analytics/aggregate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"elapsed\":165,\"request_id\":\"pddv1ChY3VUd0WGZFS1IzNkpzaENGMDQ5dVlRIi0KHQwfsxs3-LlbabIdJPhP3_aSOsxZS1WRUrEaBffcEgxNrSsbB0hv7ccJCGk\",\"status\":\"done\"},\"data\":{\"buckets\":[]}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Aggregate compute events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "frozen_at": "2024-10-01T15:36:42.902Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "compute": [ + { + "aggregation": "count", + "interval": "5m", + "type": "timeseries" + } + ], + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "query": "*", + "to": "now" + }, + "group_by": [ + { + "facet": "host", + "missing": "miss", + "sort": { + "aggregation": "pc90", + "metric": "@duration", + "order": "asc", + "type": "measure" + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/analytics/aggregate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"elapsed\":15,\"request_id\":\"pddv1ChZJZHpESXZreVRVU04ySjMwN1ZGU3JBIi0KHTpQ7N734J4KLzWgxOSfJsxi4hmH9Zp7S5bcjVbKEgw7sLHsv3QXsmnc0-k\",\"status\":\"done\"},\"data\":{\"buckets\":[]}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Aggregate compute events with group by returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "frozen_at": "2024-10-01T15:36:43.117Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "query": "*", + "to": "now" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/analytics/aggregate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"elapsed\":10,\"request_id\":\"pddv1ChZNTFhDRTJTelQycXp1QXdlX1NmTlpRIi0KHe-ilFcY0rnsNmMKsu8hd-YRCNigxxg3E_n1PmI9EgxGTh_nEXTFJyr3H54\",\"status\":\"done\"},\"data\":{\"buckets\":[]}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Aggregate events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "frozen_at": "2022-04-12T09:52:05.170Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/events", + "query": [ + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFkTDlRUW1jT2g2Z0FBQUFCQldVRmtUQzFPUzBGQlFucExkREpLZFZOYVlrTjNRVVEifQ\"}},\"data\":[{\"attributes\":{\"status\":\"info\",\"timestamp\":\"2022-04-12T09:51:55.414Z\",\"host\":\"fe74f1c9-b3bb-45a9-6610-ea12\",\"message\":\"- -> /\",\"tags\":[\"source:sinatra\",\"env:integrations-lab\",\"source:sinatra\",\"application_id:a7bebd67-1991-4e9e-8d44-399acf2f13e8\",\"application_name:logs-backend-demo\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:0\",\"space_name:system\",\"uri:logs-backend-demo.apps.integrations-lab.devenv.dog\",\"datadog.pipelines:false\"]},\"type\":\"log\",\"id\":\"AQAAAYAdL9QWY-VoZwAAAABBWUFkTDlZNEFBQ3RpUllvSWd4TWlRQUQ\"},{\"attributes\":{\"status\":\"info\",\"timestamp\":\"2022-04-12T09:51:55.408Z\",\"host\":\"59fe9540-24f4-48c4-4fc4-1c34\",\"message\":\"- -> /\",\"tags\":[\"source:sinatra\",\"env:integrations-lab\",\"source:sinatra\",\"application_id:41256269-671b-4d79-91d5-3bf848376425\",\"application_name:test-space-org-cc\",\"cf_instance_ip:10.0.40.11\",\"env:integrations-lab\",\"instance_index:1\",\"space_name:datadog-application-monitoring-space\",\"uri:test-space-org-cc.apps.integrations-lab.devenv.dog\",\"datadog.pipelines:false\"]},\"type\":\"log\",\"id\":\"AQAAAYAdL9QQmcOh6gAAAABBWUFkTC1OS0FBQnpLdDJKdVNaYkN3QUQ\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/logs/events?page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFkTDlRUW1jT2g2Z0FBQUFCQldVRmtUQzFPUzBGQlFucExkREpLZFZOYVlrTjNRVVEifQ&page%5Blimit%5D=2\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/events", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFRQUFBWUFkTDlRUW1jT2g2Z0FBQUFCQldVRmtUQzFPUzBGQlFucExkREpLZFZOYVlrTjNRVVEifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFkTDlKNG1jT2g2QUFBQUFCQldVRmtUQzFPUzBGQlFucExkREpLZFZOYVlrTjNRVUkifQ\"}},\"data\":[{\"attributes\":{\"status\":\"ok\",\"tags\":[\"source:sinatra\",\"env:integrations-lab\",\"source:sinatra\",\"application_id:a7bebd67-1991-4e9e-8d44-399acf2f13e8\",\"application_name:logs-backend-demo\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:0\",\"space_name:system\",\"uri:logs-backend-demo.apps.integrations-lab.devenv.dog\"],\"timestamp\":\"2022-04-12T09:51:55.000Z\",\"host\":\"fe74f1c9-b3bb-45a9-6610-ea12\",\"attributes\":{\"duration\":1800000.0,\"http\":{\"url_details\":{\"path\":\"/\"},\"status_category\":\"OK\",\"url\":\"/\",\"status_code\":200,\"version\":\"1.1\",\"method\":\"GET\"},\"network\":{\"client\":{\"ip\":\"169.254.0.1\"},\"bytes_written\":117},\"date_access\":1649757115000},\"message\":\"169.254.0.1 - - [12/Apr/2022:09:51:55 +0000] \\\"GET / HTTP/1.1\\\" 200 117 0.0018\"},\"type\":\"log\",\"id\":\"AQAAAYAdL9J4Y-VoZQAAAABBWUFkTDlZNEFBQ3RpUllvSWd4TWlRQUI\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/logs/events?page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFkTDlKNG1jT2g2QUFBQUFCQldVRmtUQzFPUzBGQlFucExkREpLZFZOYVlrTjNRVUkifQ&page%5Blimit%5D=2\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/events", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFRQUFBWUFkTDlKNG1jT2g2QUFBQUFCQldVRmtUQzFPUzBGQlFucExkREpLZFZOYVlrTjNRVUkifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of logs returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Logs", + "frozen_at": "2024-10-01T15:36:43.285Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/logs/events", + "query": [ + [ + "filter[from]", + "2020-09-17T11:48:36+01:00" + ], + [ + "filter[indexes]", + "main" + ], + [ + "filter[query]", + "datadog-agent" + ], + [ + "filter[to]", + "2020-09-17T12:48:36+01:00" + ], + [ + "page[limit]", + "5" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"elapsed\":0,\"request_id\":\"pddv1ChZnUldBVG01WlRMU2Q0d2xmaG1NWG1BIiwKHFtksVd_gLLg8oGdAfyjZkpusj-6_bbNxRpOSeoSDCx7sBKmq-5VxGtliw\",\"status\":\"done\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a quick list of logs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "frozen_at": "2024-10-01T15:36:43.434Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "2020-09-17T11:48:36+01:00", + "indexes": [ + "main" + ], + "query": "datadog-agent", + "to": "2020-09-17T12:48:36+01:00" + }, + "page": { + "limit": 5 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"elapsed\":0,\"request_id\":\"pddv1ChZDajdxSjQ4ZFJOT1VyZ2xURmRrSW5BIi0KHTBXibXkWStvRXkS72BJw44UvhZhIF-UDmT52UYhEgyW3j58vq2SlrrUWNc\",\"status\":\"done\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search logs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Logs", + "frozen_at": "2022-04-11T16:44:42.962Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFaZGJvSjdkR3dOZ0FBQUFCQldVRmFaR0p5TVVGQlEwczRPRU4zWW1aMVVESlJRVUUifQ\"}},\"data\":[{\"attributes\":{\"status\":\"ok\",\"tags\":[\"source:sinatra\",\"env:integrations-lab\",\"source:sinatra\",\"application_id:41256269-671b-4d79-91d5-3bf848376425\",\"application_name:test-space-org-cc\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:0\",\"space_name:datadog-application-monitoring-space\",\"uri:test-space-org-cc.apps.integrations-lab.devenv.dog\"],\"timestamp\":\"2022-04-11T16:29:47.000Z\",\"host\":\"05f9b9df-ae45-4c8b-66bf-e24c\",\"attributes\":{\"duration\":2700000.0,\"http\":{\"url_details\":{\"path\":\"/\"},\"status_category\":\"OK\",\"url\":\"/\",\"status_code\":200,\"version\":\"1.1\",\"method\":\"GET\"},\"network\":{\"client\":{\"ip\":\"169.254.0.1\"},\"bytes_written\":117},\"date_access\":1649694587000},\"message\":\"169.254.0.1 - - [11/Apr/2022:16:29:47 +0000] \\\"GET / HTTP/1.1\\\" 200 117 0.0027\"},\"type\":\"log\",\"id\":\"AQAAAYAZdbh47dGwNwAAAABBWUFaZGJyMUFBQ0s4OEN3YmZ1UDJRQUI\"},{\"attributes\":{\"status\":\"info\",\"timestamp\":\"2022-04-11T16:29:47.401Z\",\"host\":\"05f9b9df-ae45-4c8b-66bf-e24c\",\"message\":\"I, [2022-04-11T16:29:47.400621 #14] INFO -- : Index page hit\",\"tags\":[\"source:sinatra\",\"env:integrations-lab\",\"source:sinatra\",\"application_id:41256269-671b-4d79-91d5-3bf848376425\",\"application_name:test-space-org-cc\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:0\",\"space_name:datadog-application-monitoring-space\",\"uri:test-space-org-cc.apps.integrations-lab.devenv.dog\",\"datadog.pipelines:false\"]},\"type\":\"log\",\"id\":\"AQAAAYAZdboJ7dGwNgAAAABBWUFaZGJyMUFBQ0s4OEN3YmZ1UDJRQUE\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/logs/events?sort=timestamp&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFaZGJvSjdkR3dOZ0FBQUFCQldVRmFaR0p5TVVGQlEwczRPRU4zWW1aMVVESlJRVUUifQ&filter%5Bfrom%5D=now-15m&filter%5Bindexes%5D=main&page%5Blimit%5D=2\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFRQUFBWUFaZGJvSjdkR3dOZ0FBQUFCQldVRmFaR0p5TVVGQlEwczRPRU4zWW1aMVVESlJRVUUifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFaZGJvSzdkR3dPUUFBQUFCQldVRmFaR0p5TVVGQlEwczRPRU4zWW1aMVVESlJRVVEifQ\"}},\"data\":[{\"attributes\":{\"status\":\"info\",\"timestamp\":\"2022-04-11T16:29:47.402Z\",\"host\":\"05f9b9df-ae45-4c8b-66bf-e24c\",\"message\":\"169.254.0.1 - - [11/Apr/2022:16:29:47 UTC] \\\"GET / HTTP/1.1\\\" 200 117\",\"tags\":[\"source:sinatra\",\"env:integrations-lab\",\"source:sinatra\",\"application_id:41256269-671b-4d79-91d5-3bf848376425\",\"application_name:test-space-org-cc\",\"cf_instance_ip:10.0.40.5\",\"env:integrations-lab\",\"instance_index:0\",\"space_name:datadog-application-monitoring-space\",\"uri:test-space-org-cc.apps.integrations-lab.devenv.dog\",\"datadog.pipelines:false\"]},\"type\":\"log\",\"id\":\"AQAAAYAZdboK7dGwOAAAAABBWUFaZGJyMUFBQ0s4OEN3YmZ1UDJRQUM\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/logs/events?sort=timestamp&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFaZGJvSzdkR3dPUUFBQUFCQldVRmFaR0p5TVVGQlEwczRPRU4zWW1aMVVESlJRVVEifQ&filter%5Bfrom%5D=now-15m&filter%5Bindexes%5D=main&page%5Blimit%5D=2\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "indexes": [ + "main" + ], + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFRQUFBWUFaZGJvSzdkR3dPUUFBQUFCQldVRmFaR0p5TVVGQlEwczRPRU4zWW1aMVVESlJRVVEifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search logs returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Logs", + "frozen_at": "2024-10-01T15:36:43.563Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": [ + { + "ddsource": "nginx", + "ddtags": "env:staging,version:5.1", + "hostname": "i-012345678", + "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", + "service": "payment", + "status": "info" + } + ] + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/logs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Send logs returns \"Request accepted for processing (always 202 empty JSON).\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/metrics.json b/test-server-data/v2/metrics.json new file mode 100644 index 0000000000..a8005f3eb8 --- /dev/null +++ b/test-server-data/v2/metrics.json @@ -0,0 +1,5067 @@ +{ + "feature": "Metrics", + "recordings": [ + { + "feature": "Metrics", + "frozen_at": "2026-06-04T17:13:08.947Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Configure_tags_for_multiple_metrics_returns_Accepted_response-1780593188@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"bbd25c81-fae3-46b3-99b3-4251859017c4\",\"attributes\":{\"uuid\":\"bbd25c81-fae3-46b3-99b3-4251859017c4\",\"name\":null,\"handle\":\"test-configure_tags_for_multiple_metrics_returns_accepted_response-1780593188@datadoghq.com\",\"created_at\":\"2026-06-04T17:13:10.281475+00:00\",\"modified_at\":\"2026-06-04T17:13:10.281475+00:00\",\"email\":\"test-configure_tags_for_multiple_metrics_returns_accepted_response-1780593188@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/f08cc2909ca7eae455a0969e3664ec09?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "emails": [ + "test-configure_tags_for_multiple_metrics_returns_accepted_response-1780593188@datadoghq.com" + ], + "tags": [ + "test", + "testconfiguretagsformultiplemetricsreturnsacceptedresponse1780593188" + ] + }, + "id": "system.load.1", + "type": "metric_bulk_configure_tags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/config/bulk-tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"metric_bulk_configure_tags\",\"id\":\"system.load.1\",\"attributes\":{\"tags\":[\"test\",\"testconfiguretagsformultiplemetricsreturnsacceptedresponse1780593188\"],\"emails\":[\"test-configure_tags_for_multiple_metrics_returns_accepted_response-1780593188@datadoghq.com\"],\"status\":\"Accepted\",\"exclude_tags_mode\":null,\"override_existing_configurations\":true,\"include_actively_queried_tags_window\":null}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "emails": [ + "test-configure_tags_for_multiple_metrics_returns_accepted_response-1780593188@datadoghq.com" + ] + }, + "id": "system.load.1", + "type": "metric_bulk_configure_tags" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/metrics/config/bulk-tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"metric_bulk_configure_tags\",\"id\":\"system.load.1\",\"attributes\":{\"emails\":[\"test-configure_tags_for_multiple_metrics_returns_accepted_response-1780593188@datadoghq.com\"],\"status\":\"Accepted\",\"override_existing_configurations\":true}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/bbd25c81-fae3-46b3-99b3-4251859017c4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Configure tags for multiple metrics returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-05-12T11:27:30.563Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "series": [ + { + "metric": "TestCreateatagconfigurationreturnsCreatedresponse1652354850", + "points": [ + [ + 1652354850, + 1.1 + ] + ], + "tags": [ + "test:ExampleSubmitmetricsreturnsPayloadacceptedresponse" + ], + "type": "gauge" + } + ] + } + }, + "content_type": "text/json", + "method": "POST", + "path": "/api/v1/series", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\": \"ok\"}" + }, + "headers": { + "content-type": "text/json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_type": "gauge", + "tags": [ + "app", + "datacenter" + ] + }, + "id": "TestCreateatagconfigurationreturnsCreatedresponse1652354850", + "type": "manage_tags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/TestCreateatagconfigurationreturnsCreatedresponse1652354850/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"manage_tags\",\"id\":\"TestCreateatagconfigurationreturnsCreatedresponse1652354850\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"created_at\":\"2022-05-12T11:27:35.411959+00:00\",\"modified_at\":\"2022-05-12T11:27:35.411959+00:00\",\"metric_type\":\"gauge\",\"aggregations\":[{\"space\":\"avg\",\"time\":\"avg\"}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/TestCreateatagconfigurationreturnsCreatedresponse1652354850/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a tag configuration returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T18:25:59.130Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_name_matches": [ + "dd.test.*" + ], + "name": "test", + "options": { + "data": { + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 99 + } + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request body: options version must be 1\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a tag indexing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:36.532Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": false, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "queried_tags_window_seconds": 3600, + "related_asset_tags": false + }, + "manage_preexisting_metrics": true, + "metric_match": { + "queried_window_seconds": 3600 + }, + "override_previous_rules": false + }, + "version": 1 + }, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b0a2d605-eee3-4c3b-89cf-51410b054ae7\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-06-04T16:39:36.579331Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":false,\"ignored_metric_name_matches\":[],\"metric_name_matches\":[\"dd.test.*\"],\"modified_at\":\"2026-06-04T16:39:36.579331Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"my-indexing-rule\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true,\"dynamic_tags\":{\"queried_tags_window_seconds\":3600},\"metric_match\":{\"queried_window_seconds\":3600}}},\"rule_order\":1,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/tag-indexing-rules/b0a2d605-eee3-4c3b-89cf-51410b054ae7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a tag indexing rule returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-07-20T13:47:22.097Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": true, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "exclude_not_queried_window_seconds": 3600, + "exclude_not_used_in_assets": true + }, + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 1 + }, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"50b7b68a-4580-4f9b-8c2c-8622446e68eb\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-07-20T13:47:24.033083Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":true,\"ignored_metric_name_matches\":[],\"metric_name_matches\":[\"dd.test.*\"],\"modified_at\":\"2026-07-20T13:47:24.033083Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"my-indexing-rule\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true,\"dynamic_tags\":{\"exclude_not_queried_window_seconds\":3600,\"exclude_not_used_in_assets\":true}}},\"rule_order\":1,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/tag-indexing-rules/50b7b68a-4580-4f9b-8c2c-8622446e68eb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a tag indexing rule with exclude-mode tag usage fields returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-07-20T13:47:24.179Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": false, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "exclude_not_queried_window_seconds": 3600 + }, + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 1 + }, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request body: exclude_not_queried_window_seconds/exclude_not_used_in_assets cannot be set when exclude_tags_mode is false \u2014 \\\"by tag usage\\\" is Exclude-mode only\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a tag indexing rule with exclude_not_queried_window_seconds and exclude_tags_mode false returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-07-20T13:47:24.273Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": true, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "exclude_not_queried_window_seconds": 7776001 + }, + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 1 + }, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request body: dynamic_tags.exclude_not_queried_window_seconds cannot exceed 7776000 seconds (90 days)\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a tag indexing rule with exclude_not_queried_window_seconds over the maximum returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-07-20T13:47:24.367Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": false, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "exclude_not_used_in_assets": true + }, + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 1 + }, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid request body: exclude_not_queried_window_seconds/exclude_not_used_in_assets cannot be set when exclude_tags_mode is false \u2014 \\\"by tag usage\\\" is Exclude-mode only\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a tag indexing rule with exclude_not_used_in_assets and exclude_tags_mode false returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-05-12T11:26:28.844Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "series": [ + { + "metric": "TestDeleteatagconfigurationreturnsNoContentresponse1652354788", + "points": [ + [ + 1652354788, + 1.1 + ] + ], + "tags": [ + "test:ExampleSubmitmetricsreturnsPayloadacceptedresponse" + ], + "type": "gauge" + } + ] + } + }, + "content_type": "text/json", + "method": "POST", + "path": "/api/v1/series", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\": \"ok\"}" + }, + "headers": { + "content-type": "text/json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_type": "gauge", + "tags": [ + "app", + "datacenter", + "TestDeleteatagconfigurationreturnsNoContentresponse1652354788" + ] + }, + "id": "TestDeleteatagconfigurationreturnsNoContentresponse1652354788", + "type": "manage_tags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/TestDeleteatagconfigurationreturnsNoContentresponse1652354788/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"manage_tags\",\"id\":\"TestDeleteatagconfigurationreturnsNoContentresponse1652354788\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestDeleteatagconfigurationreturnsNoContentresponse1652354788\"],\"created_at\":\"2022-05-12T11:26:33.849417+00:00\",\"modified_at\":\"2022-05-12T11:26:33.849417+00:00\",\"metric_type\":\"gauge\",\"aggregations\":[{\"space\":\"avg\",\"time\":\"avg\"}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/TestDeleteatagconfigurationreturnsNoContentresponse1652354788/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/TestDeleteatagconfigurationreturnsNoContentresponse1652354788/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"TestDeleteatagconfigurationreturnsNoContentresponse1652354788 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a tag configuration returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:36.667Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/tag-indexing-rules/not-a-valid-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid tag indexing rule ID format\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete a tag indexing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:36.727Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_name_matches": [ + "dd.TestDeleteatagindexingrulereturnsNoContentresponse1780591176.*" + ], + "name": "TestDeleteatagindexingrulereturnsNoContentresponse1780591176", + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"223d99dd-9c0a-4181-82b7-53d234bf5b26\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-06-04T16:39:36.77795Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":false,\"metric_name_matches\":[\"dd.TestDeleteatagindexingrulereturnsNoContentresponse1780591176.*\"],\"modified_at\":\"2026-06-04T16:39:36.77795Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"TestDeleteatagindexingrulereturnsNoContentresponse1780591176\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true}},\"rule_order\":1,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/tag-indexing-rules/223d99dd-9c0a-4181-82b7-53d234bf5b26", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/tag-indexing-rules/223d99dd-9c0a-4181-82b7-53d234bf5b26", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete a tag indexing rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2024-12-06T19:12:25.667Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics", + "query": [ + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"metrics\",\"id\":\"datadog.event.tracking.indexation.audit.events\"},{\"type\":\"metrics\",\"id\":\"datadog.estimated_usage.events.ingested_events\"}],\"meta\":{\"pagination\":{\"cursor\":null,\"next_cursor\":\"6354566d64454633525642695631597759323173616d4d784f5768614d6d52355748704265455a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c5752555642526d787355314e756233686c617a56575656526b52465273516c6456526c5a74557a427756574a73525546425155464251554642526c705464316455566b354a5658706e4e574d7863465669565852465657316b576b354962464a566257733156564642516b5a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c57525556425155453950546f365a474630595752765a79356c63335270625746305a57526664584e685a3255755a585a6c626e527a4c6d6c755a32567a6447566b583256325a573530637977324c6a67794e7a677a4e3255724d44593d\",\"limit\":1,\"type\":\"cursor_limit\"}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/metrics?page[size]=1\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/metrics?page[cursor]=6354566d64454633525642695631597759323173616d4d784f5768614d6d52355748704265455a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c5752555642526d787355314e756233686c617a56575656526b52465273516c6456526c5a74557a427756574a73525546425155464251554642526c705464316455566b354a5658706e4e574d7863465669565852465657316b576b354962464a566257733156564642516b5a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c57525556425155453950546f365a474630595752765a79356c63335270625746305a57526664584e685a3255755a585a6c626e527a4c6d6c755a32567a6447566b583256325a573530637977324c6a67794e7a677a4e3255724d44593d\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/metrics?page[size]=1\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics", + "query": [ + [ + "page[cursor]", + "6354566d64454633525642695631597759323173616d4d784f5768614d6d52355748704265455a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c5752555642526d787355314e756233686c617a56575656526b52465273516c6456526c5a74557a427756574a73525546425155464251554642526c705464316455566b354a5658706e4e574d7863465669565852465657316b576b354962464a566257733156564642516b5a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c57525556425155453950546f365a474630595752765a79356c63335270625746305a57526664584e685a3255755a585a6c626e527a4c6d6c755a32567a6447566b583256325a573530637977324c6a67794e7a677a4e3255724d44593d" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"metrics\",\"id\":\"datadog.estimated_usage.synthetics.api_test_runs\"}],\"meta\":{\"pagination\":{\"cursor\":\"6354566d64454633525642695631597759323173616d4d784f5768614d6d52355748704265455a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c5752555642526d787355314e756233686c617a56575656526b52465273516c6456526c5a74557a427756574a73525546425155464251554642526c705464316455566b354a5658706e4e574d7863465669565852465657316b576b354962464a566257733156564642516b5a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c57525556425155453950546f365a474630595752765a79356c63335270625746305a57526664584e685a3255755a585a6c626e527a4c6d6c755a32567a6447566b583256325a573530637977324c6a67794e7a677a4e3255724d44593d\",\"next_cursor\":\"6354566d64454633525642695631597759323173616d4d784f5768614d6d52355748704265455a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c5752555642526d787355314e756233686c617a56575656526b52465273516c6456526c5a74557a427756574a73525546425155464251554642526c705464316455566b354a5658706e4e574d7863465669565852465657316b576b354962464a566257733156564642516b5a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c57525556425155453950546f365a474630595752765a79356c63335270625746305a57526664584e685a32557563336c756447686c64476c6a6379356863476c666447567a644639796457357a4c4445754d44417a4e6a4d795a5373774e673d3d\",\"limit\":1,\"type\":\"cursor_limit\"}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/metrics?page[cursor]=6354566d64454633525642695631597759323173616d4d784f5768614d6d52355748704265455a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c5752555642526d787355314e756233686c617a56575656526b52465273516c6456526c5a74557a427756574a73525546425155464251554642526c705464316455566b354a5658706e4e574d7863465669565852465657316b576b354962464a566257733156564642516b5a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c57525556425155453950546f365a474630595752765a79356c63335270625746305a57526664584e685a3255755a585a6c626e527a4c6d6c755a32567a6447566b583256325a573530637977324c6a67794e7a677a4e3255724d44593d&page[size]=1\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/metrics?page[cursor]=6354566d64454633525642695631597759323173616d4d784f5768614d6d52355748704265455a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c5752555642526d787355314e756233686c617a56575656526b52465273516c6456526c5a74557a427756574a73525546425155464251554642526c705464316455566b354a5658706e4e574d7863465669565852465657316b576b354962464a566257733156564642516b5a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c57525556425155453950546f365a474630595752765a79356c63335270625746305a57526664584e685a32557563336c756447686c64476c6a6379356863476c666447567a644639796457357a4c4445754d44417a4e6a4d795a5373774e673d3d\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/metrics?page[size]=1\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics", + "query": [ + [ + "page[cursor]", + "6354566d64454633525642695631597759323173616d4d784f5768614d6d52355748704265455a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c5752555642526d787355314e756233686c617a56575656526b52465273516c6456526c5a74557a427756574a73525546425155464251554642526c705464316455566b354a5658706e4e574d7863465669565852465657316b576b354962464a566257733156564642516b5a7561453154526b704554315a4f616c5577566b685862456f305455646e6557517a526e6c57525556425155453950546f365a474630595752765a79356c63335270625746305a57526664584e685a32557563336c756447686c64476c6a6379356863476c666447567a644639796457357a4c4445754d44417a4e6a4d795a5373774e673d3d" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of metrics returns \"Success\" response with pagination", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-09-01T11:59:10.865Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics", + "query": [ + [ + "filter[tags]", + "TestGetalistofmetricswithatagfilterreturnsSuccessresponse1662033550" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of metrics with a tag filter returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-09-01T11:59:49.583Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics", + "query": [ + [ + "filter[configured]", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"manage_tags\",\"id\":\"test.metric.1\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"created_at\":\"2022-03-24T18:23:55.957002+00:00\",\"modified_at\":\"2022-03-28T14:34:32.618807+00:00\",\"metric_type\":\"gauge\",\"aggregations\":[{\"space\":\"avg\",\"time\":\"avg\"}]}},{\"type\":\"manage_tags\",\"id\":\"foo\",\"attributes\":{\"tags\":[\"datacenter\",\"sport\"],\"created_at\":\"2021-10-27T12:35:56.242671+00:00\",\"modified_at\":\"2021-10-27T12:41:22.413540+00:00\",\"metric_type\":\"count\",\"aggregations\":[{\"space\":\"sum\",\"time\":\"sum\"}]}},{\"type\":\"manage_tags\",\"id\":\"ExampleListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1653177320\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"ExampleListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1653177320\"],\"created_at\":\"2022-05-21T23:55:28.435000+00:00\",\"modified_at\":\"2022-05-21T23:55:28.435000+00:00\",\"metric_type\":\"gauge\",\"aggregations\":[{\"space\":\"avg\",\"time\":\"avg\"}]}},{\"type\":\"manage_tags\",\"id\":\"javaCreateatagconfigu1617241053\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-01T01:37:34.078032+00:00\",\"modified_at\":\"2021-05-07T09:02:37.581544+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyCreateatagconfigurationreturnsCreatedresponse1616498653\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-23T11:24:13.435931+00:00\",\"modified_at\":\"2021-03-23T11:24:13.435931+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyListtagsbymetricnamereturnsSuccessresponse1618241083\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestRubyListtagsbymetricnamereturnsSuccessresponse1618241083\"],\"include_percentiles\":false,\"created_at\":\"2021-04-12T15:24:43.937851+00:00\",\"modified_at\":\"2021-04-12T15:24:43.937851+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioCreateaTagConfigurationreturnsCreatedresponse462771613138431\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-12T14:00:32.059033+00:00\",\"modified_at\":\"2021-02-12T14:00:32.059033+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioDeleteaTagConfigurationreturnsNoContentresponse462771613138432\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioDeleteaTagConfigurationreturnsNoContentresponse462771613138432\"],\"include_percentiles\":false,\"created_at\":\"2021-02-12T14:00:32.286794+00:00\",\"modified_at\":\"2021-02-12T14:00:32.286794+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListTagConfigurationbyNamereturnsSuccessresponse462771613138432\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListTagConfigurationbyNamereturnsSuccessresponse462771613138432\"],\"include_percentiles\":false,\"created_at\":\"2021-02-12T14:00:32.668585+00:00\",\"modified_at\":\"2021-02-12T14:00:32.668585+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListTagConfigurationsreturnsSuccessresponse462771613138432\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListTagConfigurationsreturnsSuccessresponse462771613138432\"],\"include_percentiles\":false,\"created_at\":\"2021-02-12T14:00:32.953685+00:00\",\"modified_at\":\"2021-02-12T14:00:32.953685+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioUpdateaTagConfigurationreturnsOKresponse462771613138437\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioUpdateaTagConfigurationreturnsOKresponse462771613138437\"],\"include_percentiles\":false,\"created_at\":\"2021-02-12T14:00:37.707422+00:00\",\"modified_at\":\"2021-02-12T14:00:37.707422+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestcreateatagconfigurationreturnscreatedresponse1613308647656458\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-14T13:17:28.200159+00:00\",\"modified_at\":\"2021-02-14T13:17:28.200159+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaDeleteaTagConfigu1613601517\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaDeleteaTagConfigu1613601517\"],\"include_percentiles\":false,\"created_at\":\"2021-02-17T22:38:38.226434+00:00\",\"modified_at\":\"2021-02-17T22:38:38.226434+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListTagConfigurationbyNamereturnsSuccessresponse1613674911438\",\"attributes\":{\"tags\":[\"TypescriptListTagConfigurationbyNamereturnsSuccessresponse1613674911438\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-02-18T19:01:51.701561+00:00\",\"modified_at\":\"2021-02-18T19:01:51.701561+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateaTagConfigurationreturnsCreatedresponse1613674910068\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-18T19:01:50.346751+00:00\",\"modified_at\":\"2021-02-18T19:01:50.346751+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListTagConfigurationsreturnsSuccessresponse1613674912224\",\"attributes\":{\"tags\":[\"TypescriptListTagConfigurationsreturnsSuccessresponse1613674912224\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-02-18T19:01:52.489744+00:00\",\"modified_at\":\"2021-02-18T19:01:52.489744+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptUpdateaTagConfigurationreturnsOKresponse1613674918621\",\"attributes\":{\"tags\":[\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-18T19:01:58.909298+00:00\",\"modified_at\":\"2021-02-18T19:01:59.239616+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateaTagConfigurationreturnsCreatedresponse1613675388888\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-18T19:09:49.157042+00:00\",\"modified_at\":\"2021-02-18T19:09:49.157042+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptUpdateaTagConfigurationreturnsOKresponse1613675398177\",\"attributes\":{\"tags\":[\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-18T19:09:58.429942+00:00\",\"modified_at\":\"2021-02-18T19:09:58.778902+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListTagConfigurationsreturnsSuccessresponse1613675391059\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListTagConfigurationsreturnsSuccessresponse1613675391059\"],\"include_percentiles\":false,\"created_at\":\"2021-02-18T19:09:51.329650+00:00\",\"modified_at\":\"2021-02-18T19:09:51.329650+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListTagConfigurationbyNamereturnsSuccessresponse1613675390193\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListTagConfigurationbyNamereturnsSuccessresponse1613675390193\"],\"include_percentiles\":false,\"created_at\":\"2021-02-18T19:09:50.468784+00:00\",\"modified_at\":\"2021-02-18T19:09:50.468784+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptDeleteaTagConfigurationreturnsNoContentresponse1613676227224\",\"attributes\":{\"tags\":[\"datacenter\",\"TypescriptDeleteaTagConfigurationreturnsNoContentresponse1613676227224\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-18T19:23:47.510239+00:00\",\"modified_at\":\"2021-02-18T19:23:47.510239+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaUpdateaTagConfigu1613983335\",\"attributes\":{\"tags\":[\"javaUpdateaTagConfigu1613983335\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-22T08:42:15.339339+00:00\",\"modified_at\":\"2021-02-22T08:42:15.339339+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestupdateatagconfigurationreturnsokresponse1613983337447904\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestupdateatagconfigurationreturnsokresponse1613983337447904\"],\"include_percentiles\":false,\"created_at\":\"2021-02-22T08:42:17.877627+00:00\",\"modified_at\":\"2021-02-22T08:42:17.877627+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateaTagConfigurationreturnsCreatedresponse1613983377189\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-22T08:42:57.496771+00:00\",\"modified_at\":\"2021-02-22T08:42:57.496771+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListTagConfigurationbyNamereturnsSuccessresponse489431614557161\",\"attributes\":{\"tags\":[\"goFeatureMetricsScenarioListTagConfigurationbyNamereturnsSuccessresponse489431614557161\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-01T00:06:01.798862+00:00\",\"modified_at\":\"2021-03-01T00:06:01.798862+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaUpdateaTagConfigu1614290498\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaUpdateaTagConfigu1614290498\"],\"include_percentiles\":false,\"created_at\":\"2021-02-25T22:01:38.735081+00:00\",\"modified_at\":\"2021-02-25T22:01:38.735081+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaUpdateaTagConfigu1614648774\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaUpdateaTagConfigu1614648774\"],\"include_percentiles\":false,\"created_at\":\"2021-03-02T01:32:55.019781+00:00\",\"modified_at\":\"2021-03-02T01:32:55.019781+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestupdateatagconfigurationreturnsokresponse1612987674596336\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestupdateatagconfigurationreturnsokresponse1612987674596336\"],\"include_percentiles\":false,\"created_at\":\"2021-02-10T20:07:54.979797+00:00\",\"modified_at\":\"2021-03-03T22:28:32.386290+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestcreateatagconfigurationreturnscreatedresponse1612987679233002\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-02-10T20:07:59.516348+00:00\",\"modified_at\":\"2021-03-03T20:42:09.521631+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlisttagconfigurationsreturnssuccessresponse1612987675260358\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlisttagconfigurationsreturnssuccessresponse1612987675260358\"],\"include_percentiles\":false,\"created_at\":\"2021-02-10T20:07:55.559669+00:00\",\"modified_at\":\"2021-03-03T20:45:46.030871+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptUpdateaTagConfigurationreturnsOKresponse1614821029942\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptUpdateaTagConfigurationreturnsOKresponse1614821029942\"],\"include_percentiles\":false,\"created_at\":\"2021-03-04T01:23:50.307273+00:00\",\"modified_at\":\"2021-03-04T01:23:50.307273+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlisttagsbymetricnamereturnssuccessresponse1614632066664577\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlisttagsbymetricnamereturnssuccessresponse1614632066664577\"],\"include_percentiles\":false,\"created_at\":\"2021-03-01T20:54:26.950587+00:00\",\"modified_at\":\"2021-03-03T19:53:57.601421+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestdeleteatagconfigurationreturnsnocontentresponse1612987678724128\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestdeleteatagconfigurationreturnsnocontentresponse1612987678724128\"],\"include_percentiles\":false,\"created_at\":\"2021-02-10T20:07:59.011905+00:00\",\"modified_at\":\"2021-03-03T19:54:03.012021+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaUpdateaTagConfigu1614907949\",\"attributes\":{\"tags\":[\"javaUpdateaTagConfigu1614907949\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-05T01:32:29.891018+00:00\",\"modified_at\":\"2021-03-05T01:32:29.891018+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListTagConfigurati1614907942\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListTagConfigurati1614907942\"],\"include_percentiles\":false,\"created_at\":\"2021-03-05T01:32:22.257630+00:00\",\"modified_at\":\"2021-03-05T01:32:22.779595+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaCreateaTagConfigu1614907941\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-05T01:32:21.472249+00:00\",\"modified_at\":\"2021-03-05T01:32:21.472249+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaDeleteaTagConfigu1614907941\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaDeleteaTagConfigu1614907941\"],\"include_percentiles\":false,\"created_at\":\"2021-03-05T01:32:21.840312+00:00\",\"modified_at\":\"2021-03-05T01:32:21.840312+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlistdistinctmetricvolumesbymetricnamereturnssuccessresponse1614877824877072\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlistdistinctmetricvolumesbymetricnamereturnssuccessresponse1614877824877072\"],\"include_percentiles\":false,\"created_at\":\"2021-03-04T17:10:25.408162+00:00\",\"modified_at\":\"2021-03-04T18:03:35.564866+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlisttagsbymetricnamereturnssuccessresponse161487782309652\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlisttagsbymetricnamereturnssuccessresponse161487782309652\"],\"include_percentiles\":false,\"created_at\":\"2021-03-04T17:10:23.841708+00:00\",\"modified_at\":\"2021-03-04T18:03:25.853564+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestdeleteatagconfigurationreturnsnocontentresponse1614878558721298\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestdeleteatagconfigurationreturnsnocontentresponse1614878558721298\"],\"include_percentiles\":false,\"created_at\":\"2021-03-04T17:22:39.122261+00:00\",\"modified_at\":\"2021-03-04T18:03:33.352006+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlisttagconfigurationbynamereturnssuccessresponse1612987679647768\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlisttagconfigurationbynamereturnssuccessresponse1612987679647768\"],\"include_percentiles\":false,\"created_at\":\"2021-02-10T20:07:59.946457+00:00\",\"modified_at\":\"2021-03-04T09:39:37.370474+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListtagsbymetric1614962335\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListtagsbymetric1614962335\"],\"include_percentiles\":false,\"created_at\":\"2021-03-05T16:38:55.946186+00:00\",\"modified_at\":\"2021-03-05T16:38:55.946186+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaUpdateatagconfigu1614962336\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaUpdateatagconfigu1614962336\"],\"include_percentiles\":false,\"created_at\":\"2021-03-05T16:38:56.440191+00:00\",\"modified_at\":\"2021-03-05T16:38:56.440191+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListtagsbymetric1614984109\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListtagsbymetric1614984109\"],\"include_percentiles\":false,\"created_at\":\"2021-03-05T22:41:50.029868+00:00\",\"modified_at\":\"2021-03-05T22:41:50.029868+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse505431615205163\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse505431615205163\"],\"include_percentiles\":false,\"created_at\":\"2021-03-08T12:06:03.965736+00:00\",\"modified_at\":\"2021-03-08T12:06:03.965736+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaCreateatagconfigu1615195320\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-08T09:22:00.581891+00:00\",\"modified_at\":\"2021-03-08T09:22:00.581891+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListdistinctmetric1615195322\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListdistinctmetric1615195322\"],\"include_percentiles\":false,\"created_at\":\"2021-03-08T09:22:02.640568+00:00\",\"modified_at\":\"2021-03-08T09:22:02.640568+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaDeleteatagconfigu1615195321\",\"attributes\":{\"tags\":[\"javaDeleteatagconfigu1615195321\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-08T09:22:01.374349+00:00\",\"modified_at\":\"2021-03-08T09:22:01.374349+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListtagconfigurati1615195323\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListtagconfigurati1615195323\"],\"include_percentiles\":false,\"created_at\":\"2021-03-08T09:22:03.733804+00:00\",\"modified_at\":\"2021-03-08T09:22:03.733804+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListtagconfigurati1615195324\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListtagconfigurati1615195324\"],\"include_percentiles\":false,\"created_at\":\"2021-03-08T09:22:04.847552+00:00\",\"modified_at\":\"2021-03-08T09:22:04.847552+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListtagsbymetric1615195329\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListtagsbymetric1615195329\"],\"include_percentiles\":false,\"created_at\":\"2021-03-08T09:22:10.192146+00:00\",\"modified_at\":\"2021-03-08T09:22:10.192146+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaUpdateatagconfigu1615195330\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaUpdateatagconfigu1615195330\"],\"include_percentiles\":false,\"created_at\":\"2021-03-08T09:22:11.353873+00:00\",\"modified_at\":\"2021-03-08T09:22:11.353873+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1615241008139\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1615241008139\"],\"include_percentiles\":false,\"created_at\":\"2021-03-08T22:03:28.250137+00:00\",\"modified_at\":\"2021-03-08T22:03:28.250137+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyListtagconfigurationsreturnsSuccessresponse1618243860\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestRubyListtagconfigurationsreturnsSuccessresponse1618243860\"],\"include_percentiles\":false,\"created_at\":\"2021-04-12T16:11:00.453385+00:00\",\"modified_at\":\"2021-04-12T16:11:00.453385+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse507811615269834\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse507811615269834\"],\"include_percentiles\":false,\"created_at\":\"2021-03-09T06:03:55.035011+00:00\",\"modified_at\":\"2021-03-09T06:03:55.035011+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListtagconfigurati1615289582\",\"attributes\":{\"tags\":[\"javaListtagconfigurati1615289582\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-09T11:33:02.415435+00:00\",\"modified_at\":\"2021-03-09T11:33:02.415435+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse511141615397094\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse511141615397094\"],\"include_percentiles\":false,\"created_at\":\"2021-03-10T17:24:54.232169+00:00\",\"modified_at\":\"2021-03-10T17:24:54.232169+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse511141615397093\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse511141615397093\"],\"include_percentiles\":false,\"created_at\":\"2021-03-10T17:24:53.773142+00:00\",\"modified_at\":\"2021-03-10T17:24:53.773142+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyListtagsbymetricnamereturnsSuccessresponse1615600096\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"rubyListtagsbymetricnamereturnsSuccessresponse1615600096\"],\"include_percentiles\":false,\"created_at\":\"2021-03-13T01:48:16.706740+00:00\",\"modified_at\":\"2021-03-13T01:48:16.706740+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyUpdateatagconfigurationreturnsOKresponse1615600097\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"rubyUpdateatagconfigurationreturnsOKresponse1615600097\"],\"include_percentiles\":false,\"created_at\":\"2021-03-13T01:48:17.311123+00:00\",\"modified_at\":\"2021-03-13T01:48:17.311123+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagsbymetricnamereturnsSuccessresponse1615641825358\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListtagsbymetricnamereturnsSuccessresponse1615641825358\"],\"include_percentiles\":false,\"created_at\":\"2021-03-13T13:23:45.714258+00:00\",\"modified_at\":\"2021-03-13T13:23:45.714258+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptUpdateatagconfigurationreturnsOKresponse1615728221108\",\"attributes\":{\"tags\":[\"datacenter\",\"TypescriptUpdateatagconfigurationreturnsOKresponse1615728221108\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-14T13:23:41.436621+00:00\",\"modified_at\":\"2021-03-14T13:23:41.436621+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagsbymetricnamereturnsSuccessresponse1615728219671\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListtagsbymetricnamereturnsSuccessresponse1615728219671\"],\"include_percentiles\":false,\"created_at\":\"2021-03-14T13:23:40.016425+00:00\",\"modified_at\":\"2021-03-14T13:23:40.016425+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1615901000076\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1615901000076\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T13:23:20.213657+00:00\",\"modified_at\":\"2021-03-16T13:23:20.213657+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1615900999594\",\"attributes\":{\"tags\":[\"datacenter\",\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1615900999594\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T13:23:19.703100+00:00\",\"modified_at\":\"2021-03-16T13:23:19.703100+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagconfigurationsreturnsSuccessresponse1615901001052\",\"attributes\":{\"tags\":[\"datacenter\",\"TypescriptListtagconfigurationsreturnsSuccessresponse1615901001052\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T13:23:21.193223+00:00\",\"modified_at\":\"2021-03-16T13:23:21.193223+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateatagconfigurationreturnsCreatedresponse1615900999263\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T13:23:19.393024+00:00\",\"modified_at\":\"2021-03-16T13:23:19.393024+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagconfigurationbynamereturnsSuccessresponse1615901000614\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListtagconfigurationbynamereturnsSuccessresponse1615901000614\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T13:23:20.718208+00:00\",\"modified_at\":\"2021-03-16T13:23:20.718208+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagsbymetricnamereturnsSuccessresponse1615901006889\",\"attributes\":{\"tags\":[\"datacenter\",\"TypescriptListtagsbymetricnamereturnsSuccessresponse1615901006889\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T13:23:27.006017+00:00\",\"modified_at\":\"2021-03-16T13:23:27.006017+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptUpdateatagconfigurationreturnsOKresponse1615901007411\",\"attributes\":{\"tags\":[\"datacenter\",\"TypescriptUpdateatagconfigurationreturnsOKresponse1615901007411\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T13:23:27.541142+00:00\",\"modified_at\":\"2021-03-16T13:23:27.541142+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListdistinctmetricvolumesbymetricnamereturnsSuccessresponse519741615886584\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListdistinctmetricvolumesbymetricnamereturnsSuccessresponse519741615886584\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T09:23:04.506963+00:00\",\"modified_at\":\"2021-03-16T09:23:04.506963+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioDeleteatagconfigurationreturnsNoContentresponse519741615886584\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioDeleteatagconfigurationreturnsNoContentresponse519741615886584\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T09:23:04.173080+00:00\",\"modified_at\":\"2021-03-16T09:23:04.173080+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagconfigurationsreturnsSuccessresponse519741615886585\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagconfigurationsreturnsSuccessresponse519741615886585\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T09:23:05.166846+00:00\",\"modified_at\":\"2021-03-16T09:23:05.166846+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioCreateatagconfigurationreturnsCreatedresponse519741615886583\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T09:23:03.873546+00:00\",\"modified_at\":\"2021-03-16T09:23:03.873546+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagconfigurationbynamereturnsSuccessresponse519741615886584\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagconfigurationbynamereturnsSuccessresponse519741615886584\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T09:23:04.833632+00:00\",\"modified_at\":\"2021-03-16T09:23:04.833632+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse519741615886593\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse519741615886593\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T09:23:13.154433+00:00\",\"modified_at\":\"2021-03-16T09:23:13.154433+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse519741615886593\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse519741615886593\"],\"include_percentiles\":false,\"created_at\":\"2021-03-16T09:23:13.517437+00:00\",\"modified_at\":\"2021-03-16T09:23:13.517437+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateatagconfigurationreturnsCreatedresponse1615998271598\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-17T16:24:31.959292+00:00\",\"modified_at\":\"2021-03-17T16:24:31.959292+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagconfigurationbynamereturnsSuccessresponse1616160199767\",\"attributes\":{\"tags\":[\"TypescriptListtagconfigurationbynamereturnsSuccessresponse1616160199767\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-03-19T13:23:19.857702+00:00\",\"modified_at\":\"2021-03-19T13:23:19.857702+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagsbymetricnamereturnsSuccessresponse161616020553\",\"attributes\":{\"tags\":[\"TypescriptListtagsbymetricnamereturnsSuccessresponse161616020553\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-03-19T13:23:25.631513+00:00\",\"modified_at\":\"2021-03-19T13:23:25.631513+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagconfigurationsreturnsSuccessresponse1616160200146\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListtagconfigurationsreturnsSuccessresponse1616160200146\"],\"include_percentiles\":false,\"created_at\":\"2021-03-19T13:23:20.232463+00:00\",\"modified_at\":\"2021-03-19T13:23:20.232463+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateatagconfigurationreturnsCreatedresponse1616160198595\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-19T13:23:18.718201+00:00\",\"modified_at\":\"2021-03-19T13:23:18.718201+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1616160198921\",\"attributes\":{\"tags\":[\"datacenter\",\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1616160198921\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-19T13:23:19.038247+00:00\",\"modified_at\":\"2021-03-19T13:23:19.038247+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1616160199415\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1616160199415\"],\"include_percentiles\":false,\"created_at\":\"2021-03-19T13:23:19.493780+00:00\",\"modified_at\":\"2021-03-19T13:23:19.493780+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptUpdateatagconfigurationreturnsOKresponse1616160205992\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptUpdateatagconfigurationreturnsOKresponse1616160205992\"],\"include_percentiles\":false,\"created_at\":\"2021-03-19T13:23:26.079138+00:00\",\"modified_at\":\"2021-03-19T13:23:26.079138+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1615998272487\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1615998272487\"],\"include_percentiles\":false,\"created_at\":\"2021-03-17T16:24:32.839382+00:00\",\"modified_at\":\"2021-03-17T16:24:32.839382+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateatagconfigurationreturnsCreatedresponse1616149776487\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-19T10:29:36.901071+00:00\",\"modified_at\":\"2021-03-19T10:29:36.901071+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptUpdateatagconfigurationreturnsOKresponse161628985592\",\"attributes\":{\"tags\":[\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-21T01:24:16.278639+00:00\",\"modified_at\":\"2021-03-21T01:24:16.826616+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlisttagconfigurationbynamereturnssuccessresponse1616085123642229\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlisttagconfigurationbynamereturnssuccessresponse1616085123642229\"],\"include_percentiles\":false,\"created_at\":\"2021-03-18T16:32:03.966633+00:00\",\"modified_at\":\"2021-03-18T16:32:03.966633+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlistdistinctmetricvolumesbymetricnamereturnssuccessresponse1616085131743281\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlistdistinctmetricvolumesbymetricnamereturnssuccessresponse1616085131743281\"],\"include_percentiles\":false,\"created_at\":\"2021-03-18T16:32:12.060863+00:00\",\"modified_at\":\"2021-03-18T16:32:12.060863+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlisttagsbymetricnamereturnssuccessresponse1616085146387336\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlisttagsbymetricnamereturnssuccessresponse1616085146387336\"],\"include_percentiles\":false,\"created_at\":\"2021-03-18T16:32:26.695646+00:00\",\"modified_at\":\"2021-03-18T16:32:26.695646+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestupdateatagconfigurationreturnsokresponse1616085149782964\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestupdateatagconfigurationreturnsokresponse1616085149782964\"],\"include_percentiles\":false,\"created_at\":\"2021-03-18T16:32:30.080251+00:00\",\"modified_at\":\"2021-03-18T16:32:30.080251+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse537181616565902\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse537181616565902\"],\"include_percentiles\":false,\"created_at\":\"2021-03-24T06:05:02.364811+00:00\",\"modified_at\":\"2021-03-24T06:05:02.364811+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse537181616565901\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse537181616565901\"],\"include_percentiles\":false,\"created_at\":\"2021-03-24T06:05:01.875172+00:00\",\"modified_at\":\"2021-03-24T06:05:01.875172+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioDeleteatagconfigurationreturnsNoContentresponse537181616565893\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioDeleteatagconfigurationreturnsNoContentresponse537181616565893\"],\"include_percentiles\":false,\"created_at\":\"2021-03-24T06:04:53.937128+00:00\",\"modified_at\":\"2021-03-24T06:04:53.937128+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagconfigurationsreturnsSuccessresponse537181616565895\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagconfigurationsreturnsSuccessresponse537181616565895\"],\"include_percentiles\":false,\"created_at\":\"2021-03-24T06:04:55.311874+00:00\",\"modified_at\":\"2021-03-24T06:04:55.311874+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioCreateatagconfigurationreturnsCreatedresponse537181616565893\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-24T06:04:53.604451+00:00\",\"modified_at\":\"2021-03-24T06:04:53.604451+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListdistinctmetricvolumesbymetricnamereturnsSuccessresponse537181616565894\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListdistinctmetricvolumesbymetricnamereturnsSuccessresponse537181616565894\"],\"include_percentiles\":false,\"created_at\":\"2021-03-24T06:04:54.427149+00:00\",\"modified_at\":\"2021-03-24T06:04:54.427149+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagconfigurationbynamereturnsSuccessresponse537181616565894\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagconfigurationbynamereturnsSuccessresponse537181616565894\"],\"include_percentiles\":false,\"created_at\":\"2021-03-24T06:04:54.866614+00:00\",\"modified_at\":\"2021-03-24T06:04:54.866614+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateatagconfigurationreturnsCreatedresponse161641942819\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-22T13:23:48.550450+00:00\",\"modified_at\":\"2021-03-22T13:23:48.550450+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagsbymetricnamereturnsSuccessresponse1616419438471\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListtagsbymetricnamereturnsSuccessresponse1616419438471\"],\"include_percentiles\":false,\"created_at\":\"2021-03-22T13:23:58.847497+00:00\",\"modified_at\":\"2021-03-22T13:23:58.847497+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1616419430386\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1616419430386\"],\"include_percentiles\":false,\"created_at\":\"2021-03-22T13:23:50.744154+00:00\",\"modified_at\":\"2021-03-22T13:23:50.744154+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1616419429059\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1616419429059\"],\"include_percentiles\":false,\"created_at\":\"2021-03-22T13:23:49.434641+00:00\",\"modified_at\":\"2021-03-22T13:23:49.434641+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagconfigurationbynamereturnsSuccessresponse161641943169\",\"attributes\":{\"tags\":[\"TypescriptListtagconfigurationbynamereturnsSuccessresponse161641943169\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-03-22T13:23:52.032469+00:00\",\"modified_at\":\"2021-03-22T13:23:52.032469+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagconfigurationsreturnsSuccessresponse1616419432884\",\"attributes\":{\"tags\":[\"datacenter\",\"TypescriptListtagconfigurationsreturnsSuccessresponse1616419432884\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-22T13:23:53.144380+00:00\",\"modified_at\":\"2021-03-22T13:23:53.144380+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse532071616436253\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse532071616436253\"],\"include_percentiles\":false,\"created_at\":\"2021-03-22T18:04:13.105380+00:00\",\"modified_at\":\"2021-03-22T18:04:13.105380+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse532071616436253\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse532071616436253\"],\"include_percentiles\":false,\"created_at\":\"2021-03-22T18:04:13.474151+00:00\",\"modified_at\":\"2021-03-22T18:04:13.474151+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlistdistinctmetricvolumesbymetricnamereturnssuccessresponse1616671077838552\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlistdistinctmetricvolumesbymetricnamereturnssuccessresponse1616671077838552\"],\"include_percentiles\":false,\"created_at\":\"2021-03-25T11:17:58.568334+00:00\",\"modified_at\":\"2021-03-25T11:17:58.568334+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestdeleteatagconfigurationreturnsnocontentresponse1616752499902025\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestdeleteatagconfigurationreturnsnocontentresponse1616752499902025\"],\"include_percentiles\":false,\"created_at\":\"2021-03-26T09:55:00.209674+00:00\",\"modified_at\":\"2021-03-26T09:55:00.209674+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestlisttagsbymetricnamereturnssuccessresponse1616492360346493\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"datadogapiclientpythontestlisttagsbymetricnamereturnssuccessresponse1616492360346493\"],\"include_percentiles\":false,\"created_at\":\"2021-03-23T09:39:20.746200+00:00\",\"modified_at\":\"2021-03-23T09:39:20.746200+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateatagconfigurationreturnsCreatedresponse1616495055838\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-23T10:24:16.190783+00:00\",\"modified_at\":\"2021-03-23T10:24:16.190783+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1616498654\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"rubyListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1616498654\"],\"include_percentiles\":false,\"created_at\":\"2021-03-23T11:24:14.161383+00:00\",\"modified_at\":\"2021-03-23T11:24:14.161383+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyListtagconfigurationbynamereturnsSuccessresponse1616498654\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"rubyListtagconfigurationbynamereturnsSuccessresponse1616498654\"],\"include_percentiles\":false,\"created_at\":\"2021-03-23T11:24:14.567372+00:00\",\"modified_at\":\"2021-03-23T11:24:14.567372+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyDeleteatagconfigurationreturnsNoContentresponse1616498653\",\"attributes\":{\"tags\":[\"rubyDeleteatagconfigurationreturnsNoContentresponse1616498653\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-23T11:24:13.744787+00:00\",\"modified_at\":\"2021-03-23T11:24:13.744787+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateatagconfigurationreturnsCreatedresponse1616894650949\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-28T01:24:11.315850+00:00\",\"modified_at\":\"2021-03-28T01:24:11.315850+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyCreateatagconfigurationreturnsCreatedresponse1617010239\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-29T09:30:39.277788+00:00\",\"modified_at\":\"2021-03-29T09:30:39.277788+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagconfigurationbynamereturnsSuccessresponse1616840650426\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListtagconfigurationbynamereturnsSuccessresponse1616840650426\"],\"include_percentiles\":false,\"created_at\":\"2021-03-27T10:24:10.771619+00:00\",\"modified_at\":\"2021-03-27T10:24:10.771619+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyCreateatagconfigurationreturnsCreatedresponse1617013073\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-29T10:17:53.426838+00:00\",\"modified_at\":\"2021-03-29T10:17:53.426838+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyListtagconfigurationsreturnsSuccessresponse1617013912\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"rubyListtagconfigurationsreturnsSuccessresponse1617013912\"],\"include_percentiles\":false,\"created_at\":\"2021-03-29T10:31:52.652432+00:00\",\"modified_at\":\"2021-03-29T10:31:52.652432+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestcreateatagconfigurationreturnscreatedresponse1617014589345712\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-29T10:43:09.860304+00:00\",\"modified_at\":\"2021-03-29T10:43:09.860304+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse549511617084343\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse549511617084343\"],\"include_percentiles\":false,\"created_at\":\"2021-03-30T06:05:43.124191+00:00\",\"modified_at\":\"2021-03-30T06:05:43.124191+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse549511617084343\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse549511617084343\"],\"include_percentiles\":false,\"created_at\":\"2021-03-30T06:05:43.601969+00:00\",\"modified_at\":\"2021-03-30T06:05:43.601969+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestcreateatagconfigurationreturnscreatedresponse1617190497075142\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-31T11:34:57.312061+00:00\",\"modified_at\":\"2021-03-31T11:34:57.312061+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyCreateatagconfigurationreturnsCreatedresponse1618116460\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-11T04:47:40.938028+00:00\",\"modified_at\":\"2021-04-11T04:47:40.938028+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateatagconfigurationreturnsCreatedresponse1617197102302\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-31T13:25:02.713019+00:00\",\"modified_at\":\"2021-03-31T13:25:02.713019+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagconfigurationsreturnsSuccessresponse553521617208533\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagconfigurationsreturnsSuccessresponse553521617208533\"],\"include_percentiles\":false,\"created_at\":\"2021-03-31T16:35:33.822570+00:00\",\"modified_at\":\"2021-03-31T16:35:33.822570+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptUpdateatagconfigurationreturnsOKresponse1617110622671\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptUpdateatagconfigurationreturnsOKresponse1617110622671\"],\"include_percentiles\":false,\"created_at\":\"2021-03-30T13:23:42.813575+00:00\",\"modified_at\":\"2021-03-30T13:23:42.813575+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagsbymetricnamereturnsSuccessresponse161711062218\",\"attributes\":{\"tags\":[\"TypescriptListtagsbymetricnamereturnsSuccessresponse161711062218\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-03-30T13:23:42.290454+00:00\",\"modified_at\":\"2021-03-30T13:23:42.290454+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"datadogapiclientpythontestcreateatagconfigurationreturnscreatedresponse1617189605290728\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-03-31T11:20:05.512669+00:00\",\"modified_at\":\"2021-03-31T11:20:05.512669+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse550921617127471\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioListtagsbymetricnamereturnsSuccessresponse550921617127471\"],\"include_percentiles\":false,\"created_at\":\"2021-03-30T18:04:31.348364+00:00\",\"modified_at\":\"2021-03-30T18:04:31.348364+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse550921617127471\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"goFeatureMetricsScenarioUpdateatagconfigurationreturnsOKresponse550921617127471\"],\"include_percentiles\":false,\"created_at\":\"2021-03-30T18:04:31.750754+00:00\",\"modified_at\":\"2021-03-30T18:04:31.750754+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListdistinctmetric1617241055\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListdistinctmetric1617241055\"],\"include_percentiles\":false,\"created_at\":\"2021-04-01T01:37:35.979950+00:00\",\"modified_at\":\"2021-04-01T01:37:35.979950+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListtagconfigurati1617241056\",\"attributes\":{\"tags\":[\"javaListtagconfigurati1617241056\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-01T01:37:37.187124+00:00\",\"modified_at\":\"2021-04-01T01:37:37.187124+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListtagconfigurati1617241057\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListtagconfigurati1617241057\"],\"include_percentiles\":false,\"created_at\":\"2021-04-01T01:37:38.337846+00:00\",\"modified_at\":\"2021-04-01T01:37:38.337846+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"javaListtagsbymetric1617241065\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"javaListtagsbymetric1617241065\"],\"include_percentiles\":false,\"created_at\":\"2021-04-01T01:37:46.167234+00:00\",\"modified_at\":\"2021-04-01T01:37:46.167234+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagconfigurationsreturnsSuccessresponse1617629121895\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListtagconfigurationsreturnsSuccessresponse1617629121895\"],\"include_percentiles\":false,\"created_at\":\"2021-04-05T13:25:22.245313+00:00\",\"modified_at\":\"2021-04-05T13:25:22.245313+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1617629119345\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1617629119345\"],\"include_percentiles\":false,\"created_at\":\"2021-04-05T13:25:19.715171+00:00\",\"modified_at\":\"2021-04-05T13:25:19.715171+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1617629117988\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptDeleteatagconfigurationreturnsNoContentresponse1617629117988\"],\"include_percentiles\":false,\"created_at\":\"2021-04-05T13:25:18.355397+00:00\",\"modified_at\":\"2021-04-05T13:25:18.355397+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagconfigurationbynamereturnsSuccessresponse1617629120639\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListtagconfigurationbynamereturnsSuccessresponse1617629120639\"],\"include_percentiles\":false,\"created_at\":\"2021-04-05T13:25:20.999352+00:00\",\"modified_at\":\"2021-04-05T13:25:20.999352+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptListtagsbymetricnamereturnsSuccessresponse1617629131797\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TypescriptListtagsbymetricnamereturnsSuccessresponse1617629131797\"],\"include_percentiles\":false,\"created_at\":\"2021-04-05T13:25:32.056313+00:00\",\"modified_at\":\"2021-04-05T13:25:32.056313+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyDeleteatagconfigurationreturnsNoContentresponse1617414463\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"rubyDeleteatagconfigurationreturnsNoContentresponse1617414463\"],\"include_percentiles\":false,\"created_at\":\"2021-04-03T01:47:43.121903+00:00\",\"modified_at\":\"2021-04-03T01:47:43.121903+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TypescriptCreateatagconfigurationreturnsCreatedresponse161776946527\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-07T04:24:25.610201+00:00\",\"modified_at\":\"2021-04-07T04:24:25.610201+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"tf_TestAccDatadogMetricTagConfiguration_import_57079_1617883575\",\"attributes\":{\"tags\":[\"datacenter\",\"sport\"],\"include_percentiles\":false,\"created_at\":\"2021-04-08T12:06:15.682733+00:00\",\"modified_at\":\"2021-04-08T12:06:15.682733+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"tf_TestAccDatadogMetricTagConfiguration_Basic_57079_1617883576\",\"attributes\":{\"tags\":[\"datacenter\",\"sport\"],\"include_percentiles\":false,\"created_at\":\"2021-04-08T12:06:16.328512+00:00\",\"modified_at\":\"2021-04-08T12:06:16.328512+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"rubyListtagconfigurationbynamereturnsSuccessresponse1617878848\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"rubyListtagconfigurationbynamereturnsSuccessresponse1617878848\"],\"include_percentiles\":false,\"created_at\":\"2021-04-08T10:47:28.651054+00:00\",\"modified_at\":\"2021-04-08T10:47:28.651054+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestJavaListtagconfigurationsreturnsSuccessresponse1618245205\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestJavaListtagconfigurationsreturnsSuccessresponse1618245205\"],\"include_percentiles\":false,\"created_at\":\"2021-04-12T16:33:26.065648+00:00\",\"modified_at\":\"2021-04-12T16:33:26.065648+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestJavaListtagconfigurationsreturnsSuccessresponse1618245209\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestJavaListtagconfigurationsreturnsSuccessresponse1618245209\"],\"include_percentiles\":false,\"created_at\":\"2021-04-12T16:33:29.921161+00:00\",\"modified_at\":\"2021-04-12T16:33:29.921161+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestGoUpdateatagconfigurationreturnsOKresponse1618245210\",\"attributes\":{\"tags\":[\"TestGoUpdateatagconfigurationreturnsOKresponse1618245210\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-12T16:33:30.912740+00:00\",\"modified_at\":\"2021-04-12T16:33:30.912740+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestListtagsbymetricnamereturnsSuccessresponse1618083821\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestListtagsbymetricnamereturnsSuccessresponse1618083821\"],\"include_percentiles\":false,\"created_at\":\"2021-04-10T19:43:42.330061+00:00\",\"modified_at\":\"2021-04-10T19:43:42.330061+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyUpdateatagconfigurationreturnsOKresponse1618477782\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestRubyUpdateatagconfigurationreturnsOKresponse1618477782\"],\"include_percentiles\":false,\"created_at\":\"2021-04-15T09:09:42.695934+00:00\",\"modified_at\":\"2021-04-15T09:09:42.695934+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestTypescriptUpdateatagconfigurationreturnsOKresponse1618576969\",\"attributes\":{\"tags\":[\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-16T12:42:49.127510+00:00\",\"modified_at\":\"2021-04-16T12:42:49.222085+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestPythonListtagconfigurationsreturnsSuccessresponse1618576965\",\"attributes\":{\"tags\":[\"TestPythonListtagconfigurationsreturnsSuccessresponse1618576965\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-04-16T12:42:45.376840+00:00\",\"modified_at\":\"2021-04-16T12:42:45.376840+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestTypescriptUpdateatagconfigurationreturnsOKresponse1618828174\",\"attributes\":{\"tags\":[\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-19T10:29:34.758064+00:00\",\"modified_at\":\"2021-04-19T10:29:34.863258+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestPythonListtagconfigurationsreturnsSuccessresponse1618828169\",\"attributes\":{\"tags\":[\"TestPythonListtagconfigurationsreturnsSuccessresponse1618828169\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-04-19T10:29:28.829677+00:00\",\"modified_at\":\"2021-04-19T10:29:28.829677+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestGoListtagconfigurationsreturnsSuccessresponse1618835558\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestGoListtagconfigurationsreturnsSuccessresponse1618835558\"],\"include_percentiles\":false,\"created_at\":\"2021-04-19T12:32:38.361429+00:00\",\"modified_at\":\"2021-04-19T12:32:38.361429+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestTypescriptListtagsbymetricnamereturnsSuccessresponse1618817102\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestTypescriptListtagsbymetricnamereturnsSuccessresponse1618817102\"],\"include_percentiles\":false,\"created_at\":\"2021-04-19T07:25:02.613361+00:00\",\"modified_at\":\"2021-04-19T07:25:02.613361+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestPythonListtagconfigurationbynamereturnsSuccessresponse1618831533\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestPythonListtagconfigurationbynamereturnsSuccessresponse1618831533\"],\"include_percentiles\":false,\"created_at\":\"2021-04-19T11:25:33.764565+00:00\",\"modified_at\":\"2021-04-19T11:25:33.764565+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestPythonListtagconfigurationbynamereturnsSuccessresponse1618827476\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestPythonListtagconfigurationbynamereturnsSuccessresponse1618827476\"],\"include_percentiles\":false,\"created_at\":\"2021-04-19T10:17:56.919641+00:00\",\"modified_at\":\"2021-04-19T10:17:56.919641+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestJavaListtagsbymetricnamereturnsSuccessresponse1618861041\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestJavaListtagsbymetricnamereturnsSuccessresponse1618861041\"],\"include_percentiles\":false,\"created_at\":\"2021-04-19T19:37:21.909413+00:00\",\"modified_at\":\"2021-04-19T19:37:21.909413+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyListtagconfigurationbynamereturnsSuccessresponse1618883262\",\"attributes\":{\"tags\":[\"TestRubyListtagconfigurationbynamereturnsSuccessresponse1618883262\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-20T01:47:42.978537+00:00\",\"modified_at\":\"2021-04-20T01:47:42.978537+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestJavaListtagconfigurationbynamereturnsSuccessresponse1619096218\",\"attributes\":{\"tags\":[\"TestJavaListtagconfigurationbynamereturnsSuccessresponse1619096218\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-22T12:56:58.362386+00:00\",\"modified_at\":\"2021-04-22T12:56:58.362386+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestPythonCreateatagconfigurationreturnsCreatedresponse1619097915\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-22T13:25:31.443839+00:00\",\"modified_at\":\"2021-04-22T13:25:31.443839+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestTypescriptListtagsbymetricnamereturnsSuccessresponse1619097911\",\"attributes\":{\"tags\":[\"TestTypescriptListtagsbymetricnamereturnsSuccessresponse1619097911\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-04-22T13:25:11.404186+00:00\",\"modified_at\":\"2021-04-22T13:25:11.404186+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestTypescriptListtagconfigurationsreturnsSuccessresponse1619096210\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestTypescriptListtagconfigurationsreturnsSuccessresponse1619096210\"],\"include_percentiles\":false,\"created_at\":\"2021-04-22T12:56:51.186137+00:00\",\"modified_at\":\"2021-04-22T12:56:51.186137+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestJavaListtagsbymetricnamereturnsSuccessresponse1619131204\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestJavaListtagsbymetricnamereturnsSuccessresponse1619131204\"],\"include_percentiles\":false,\"created_at\":\"2021-04-22T22:40:04.866275+00:00\",\"modified_at\":\"2021-04-22T22:40:04.866275+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestJavaListtagconfigurationsreturnsSuccessresponse1619175153\",\"attributes\":{\"tags\":[\"datacenter\",\"TestJavaListtagconfigurationsreturnsSuccessresponse1619175153\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-23T10:52:33.873612+00:00\",\"modified_at\":\"2021-04-23T10:52:33.873612+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestTypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1619175155\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestTypescriptListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1619175155\"],\"include_percentiles\":false,\"created_at\":\"2021-04-23T10:52:35.693831+00:00\",\"modified_at\":\"2021-04-23T10:52:35.693831+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestJavaListtagconfigurationbynamereturnsSuccessresponse1619282121\",\"attributes\":{\"tags\":[\"TestJavaListtagconfigurationbynamereturnsSuccessresponse1619282121\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-24T16:35:22.034065+00:00\",\"modified_at\":\"2021-04-24T16:35:22.034065+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyCreateatagconfigurationreturnsCreatedresponse1619228878\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-24T01:47:59.109548+00:00\",\"modified_at\":\"2021-04-24T01:47:59.109548+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyDeleteatagconfigurationreturnsNoContentresponse1619228879\",\"attributes\":{\"tags\":[\"TestRubyDeleteatagconfigurationreturnsNoContentresponse1619228879\",\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-24T01:47:59.465861+00:00\",\"modified_at\":\"2021-04-24T01:47:59.465861+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyUpdateatagconfigurationreturnsOKresponse1619228888\",\"attributes\":{\"tags\":[\"TestRubyUpdateatagconfigurationreturnsOKresponse1619228888\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-04-24T01:48:08.955735+00:00\",\"modified_at\":\"2021-04-24T01:48:08.955735+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1619228879\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestRubyListdistinctmetricvolumesbymetricnamereturnsSuccessresponse1619228879\"],\"include_percentiles\":false,\"created_at\":\"2021-04-24T01:47:59.924705+00:00\",\"modified_at\":\"2021-04-24T01:47:59.924705+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyListtagconfigurationbynamereturnsSuccessresponse1619228880\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestRubyListtagconfigurationbynamereturnsSuccessresponse1619228880\"],\"include_percentiles\":false,\"created_at\":\"2021-04-24T01:48:00.601042+00:00\",\"modified_at\":\"2021-04-24T01:48:00.601042+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestRubyListtagsbymetricnamereturnsSuccessresponse1619228888\",\"attributes\":{\"tags\":[\"TestRubyListtagsbymetricnamereturnsSuccessresponse1619228888\",\"app\",\"datacenter\"],\"include_percentiles\":false,\"created_at\":\"2021-04-24T01:48:08.489900+00:00\",\"modified_at\":\"2021-04-24T01:48:08.489900+00:00\",\"metric_type\":\"distribution\"}},{\"type\":\"manage_tags\",\"id\":\"TestPythonCreateatagconfigurationreturnsCreatedresponse1619421459\",\"attributes\":{\"tags\":[\"datacenter\",\"app\"],\"include_percentiles\":false,\"created_at\":\"2021-04-26T07:17:40.163589+00:00\",\"modified_at\":\"2021-04-26T07:17:40.163589+00:00\",\"metric_type\":\"distribution\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of metrics with configured filter returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:36.958Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/tag-indexing-rules/not-a-valid-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid tag indexing rule ID format\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a tag indexing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.020Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/tag-indexing-rules/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Tag indexing rule not found\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a tag indexing rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.099Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_name_matches": [ + "dd.TestGetatagindexingrulereturnsOKresponse1780591177.*" + ], + "name": "TestGetatagindexingrulereturnsOKresponse1780591177", + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cab4c8d3-6ac8-4cb8-aa74-e68a110db375\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-06-04T16:39:37.150692Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":false,\"metric_name_matches\":[\"dd.TestGetatagindexingrulereturnsOKresponse1780591177.*\"],\"modified_at\":\"2026-06-04T16:39:37.150692Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"TestGetatagindexingrulereturnsOKresponse1780591177\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true}},\"rule_order\":1,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/tag-indexing-rules/cab4c8d3-6ac8-4cb8-aa74-e68a110db375", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cab4c8d3-6ac8-4cb8-aa74-e68a110db375\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-06-04T16:39:37.150692Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":false,\"metric_name_matches\":[\"dd.TestGetatagindexingrulereturnsOKresponse1780591177.*\"],\"modified_at\":\"2026-06-04T16:39:37.150692Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"TestGetatagindexingrulereturnsOKresponse1780591177\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true}},\"rule_order\":1,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/tag-indexing-rules/cab4c8d3-6ac8-4cb8-aa74-e68a110db375", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a tag indexing rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2023-06-05T14:44:05.398Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "series": [ + { + "metric": "static_test_metric_donotdelete", + "points": [ + [ + 1685976245, + 1.1 + ] + ], + "tags": [ + "test:static_test_metric_donotdelete" + ], + "type": "gauge" + } + ] + } + }, + "content_type": "text/json", + "method": "POST", + "path": "/api/v1/series", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\": \"ok\"}" + }, + "headers": { + "content-type": "text/json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/static_test_metric_donotdelete/active-configurations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"actively_queried_configurations\",\"id\":\"static_test_metric_donotdelete\",\"attributes\":{\"active_tags\":[],\"active_aggregations\":[]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List active tags and aggregations returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2023-06-02T15:15:47.326Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "series": [ + { + "metric": "static_test_metric_donotdelete", + "points": [ + [ + 1685718947, + 1.1 + ] + ], + "tags": [ + "test:static_test_metric_donotdelete" + ], + "type": "gauge" + } + ] + } + }, + "content_type": "text/json", + "method": "POST", + "path": "/api/v1/series", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\": \"ok\"}" + }, + "headers": { + "content-type": "text/json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/static_test_metric_donotdelete/volumes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"metric_volumes\",\"id\":\"static_test_metric_donotdelete\",\"attributes\":{\"indexed_volume\":1,\"ingested_volume\":1}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List distinct metric volumes by metric name returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-05-12T11:24:53.080Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "series": [ + { + "metric": "TestListtagconfigurationbynamereturnsSuccessresponse1652354693", + "points": [ + [ + 1652354693, + 1.1 + ] + ], + "tags": [ + "test:ExampleSubmitmetricsreturnsPayloadacceptedresponse" + ], + "type": "gauge" + } + ] + } + }, + "content_type": "text/json", + "method": "POST", + "path": "/api/v1/series", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\": \"ok\"}" + }, + "headers": { + "content-type": "text/json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_type": "gauge", + "tags": [ + "app", + "datacenter", + "TestListtagconfigurationbynamereturnsSuccessresponse1652354693" + ] + }, + "id": "TestListtagconfigurationbynamereturnsSuccessresponse1652354693", + "type": "manage_tags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/TestListtagconfigurationbynamereturnsSuccessresponse1652354693/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"manage_tags\",\"id\":\"TestListtagconfigurationbynamereturnsSuccessresponse1652354693\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestListtagconfigurationbynamereturnsSuccessresponse1652354693\"],\"created_at\":\"2022-05-12T11:24:57.972878+00:00\",\"modified_at\":\"2022-05-12T11:24:57.972878+00:00\",\"metric_type\":\"gauge\",\"aggregations\":[{\"space\":\"avg\",\"time\":\"avg\"}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/TestListtagconfigurationbynamereturnsSuccessresponse1652354693/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"manage_tags\",\"id\":\"TestListtagconfigurationbynamereturnsSuccessresponse1652354693\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestListtagconfigurationbynamereturnsSuccessresponse1652354693\"],\"created_at\":\"2022-05-12T11:24:57.972878+00:00\",\"modified_at\":\"2022-05-12T11:24:57.972878+00:00\",\"metric_type\":\"gauge\",\"aggregations\":[{\"space\":\"avg\",\"time\":\"avg\"}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/TestListtagconfigurationbynamereturnsSuccessresponse1652354693/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List tag configuration by name returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.314Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/1invalid/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid metric name: metric name must start with a letter and only contain letters, numbers, dots, and underscores\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List tag indexing rules for a metric returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.373Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/TestListtagindexingrulesforametricreturnsOKresponse1780591177/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List tag indexing rules for a metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.519Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"total\":0},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/metrics/tag-indexing-rules\",\"first\":\"https://api.datadoghq.com/api/v2/metrics/tag-indexing-rules?page%5Blimit%5D=100\\u0026page%5Boffset%5D=0\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List tag indexing rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-05-12T11:23:38.405Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "series": [ + { + "metric": "TestListtagsbymetricnamereturnsSuccessresponse1652354618", + "points": [ + [ + 1652354618, + 1.1 + ] + ], + "tags": [ + "test:ExampleSubmitmetricsreturnsPayloadacceptedresponse" + ], + "type": "gauge" + } + ] + } + }, + "content_type": "text/json", + "method": "POST", + "path": "/api/v1/series", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\": \"ok\"}" + }, + "headers": { + "content-type": "text/json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_type": "gauge", + "tags": [ + "app", + "datacenter", + "TestListtagsbymetricnamereturnsSuccessresponse1652354618" + ] + }, + "id": "TestListtagsbymetricnamereturnsSuccessresponse1652354618", + "type": "manage_tags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/TestListtagsbymetricnamereturnsSuccessresponse1652354618/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"manage_tags\",\"id\":\"TestListtagsbymetricnamereturnsSuccessresponse1652354618\",\"attributes\":{\"tags\":[\"datacenter\",\"app\",\"TestListtagsbymetricnamereturnsSuccessresponse1652354618\"],\"created_at\":\"2022-05-12T11:23:43.466946+00:00\",\"modified_at\":\"2022-05-12T11:23:43.466946+00:00\",\"metric_type\":\"gauge\",\"aggregations\":[{\"space\":\"avg\",\"time\":\"avg\"}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/TestListtagsbymetricnamereturnsSuccessresponse1652354618/all-tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"metrics\",\"id\":\"TestListtagsbymetricnamereturnsSuccessresponse1652354618\",\"attributes\":{\"tags\":[]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/TestListtagsbymetricnamereturnsSuccessresponse1652354618/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List tags by metric name returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2024-02-28T15:57:55.633Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/system.cpu.user/assets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"system.cpu.user\",\"type\":\"metrics\",\"relationships\":{\"dashboards\":{\"data\":[{\"id\":\"d5e-dpd-umy\",\"type\":\"dashboards\"},{\"id\":\"884-jxj-d7f\",\"type\":\"dashboards\"},{\"id\":\"kqz-yw2-egk\",\"type\":\"dashboards\"},{\"id\":\"43b-kw6-vqr\",\"type\":\"dashboards\"},{\"id\":\"3bd-yi5-t9f\",\"type\":\"dashboards\"},{\"id\":\"zfd-a24-thy\",\"type\":\"dashboards\"},{\"id\":\"5qr-399-8wz\",\"type\":\"dashboards\"},{\"id\":\"zst-bcm-gq6\",\"type\":\"dashboards\"},{\"id\":\"ytd-nd3-bxu\",\"type\":\"dashboards\"},{\"id\":\"7dp-46c-6tr\",\"type\":\"dashboards\"},{\"id\":\"ug4-a8z-jva\",\"type\":\"dashboards\"},{\"id\":\"89p-5x9-mfp\",\"type\":\"dashboards\"},{\"id\":\"unw-hwk-68w\",\"type\":\"dashboards\"},{\"id\":\"2m8-ht3-7kf\",\"type\":\"dashboards\"},{\"id\":\"eq3-r74-a85\",\"type\":\"dashboards\"},{\"id\":\"8yn-6s7-pue\",\"type\":\"dashboards\"},{\"id\":\"b6n-8j5-2iz\",\"type\":\"dashboards\"},{\"id\":\"4j8-nbn-4gi\",\"type\":\"dashboards\"},{\"id\":\"tpx-f7m-z57\",\"type\":\"dashboards\"},{\"id\":\"xfe-kap-e5y\",\"type\":\"dashboards\"},{\"id\":\"5tp-tr6-93q\",\"type\":\"dashboards\"},{\"id\":\"6md-r2g-kxc\",\"type\":\"dashboards\"},{\"id\":\"neh-3bi-sgi\",\"type\":\"dashboards\"},{\"id\":\"63v-49e-a7d\",\"type\":\"dashboards\"},{\"id\":\"8w6-777-dbc\",\"type\":\"dashboards\"},{\"id\":\"bgp-uee-rt3\",\"type\":\"dashboards\"},{\"id\":\"p8w-deq-k6x\",\"type\":\"dashboards\"},{\"id\":\"f4a-76m-nbn\",\"type\":\"dashboards\"},{\"id\":\"9km-gj8-2rj\",\"type\":\"dashboards\"},{\"id\":\"deh-2pa-jv8\",\"type\":\"dashboards\"}]},\"monitors\":{\"data\":[]},\"notebooks\":{\"data\":[{\"id\":\"4758632\",\"type\":\"notebooks\"}]},\"slos\":{\"data\":[]}}},\"included\":[{\"id\":\"d5e-dpd-umy\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Cloud Foundry - Infrastructure Overview\"}},{\"id\":\"884-jxj-d7f\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Cloud Foundry - Infrastructure Overview\"}},{\"id\":\"kqz-yw2-egk\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"PCF Nozzle Testing (cloned)\"}},{\"id\":\"43b-kw6-vqr\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Cloud Foundry - Overview (cloned)\"}},{\"id\":\"3bd-yi5-t9f\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Cloud Foundry - Overview (cloned)\"}},{\"id\":\"zfd-a24-thy\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"PCF Cloud Controller\"}},{\"id\":\"5qr-399-8wz\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Example-Create_a_new_dashboard_with_formulas_and_functions_scatterplot_widget_1708538631\"}},{\"id\":\"zst-bcm-gq6\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Ordered Layout Dashboard\"}},{\"id\":\"ytd-nd3-bxu\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"7dp-46c-6tr\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"ug4-a8z-jva\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"89p-5x9-mfp\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"unw-hwk-68w\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"2m8-ht3-7kf\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"eq3-r74-a85\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"8yn-6s7-pue\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"b6n-8j5-2iz\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Cloud Foundry - Overview (cloned) (cloned)\"}},{\"id\":\"4j8-nbn-4gi\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"tpx-f7m-z57\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"{{ unique }}\"}},{\"id\":\"xfe-kap-e5y\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"5tp-tr6-93q\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"6md-r2g-kxc\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"neh-3bi-sgi\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"63v-49e-a7d\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"sarah test\"}},{\"id\":\"8w6-777-dbc\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"bgp-uee-rt3\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"\"}},{\"id\":\"p8w-deq-k6x\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"CRP-176\"}},{\"id\":\"f4a-76m-nbn\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\"}},{\"id\":\"9km-gj8-2rj\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Hippolyte's Screenboard Fri, Apr 16, 10:20:54 am\"}},{\"id\":\"deh-2pa-jv8\",\"type\":\"dashboards\",\"attributes\":{\"popularity\":0,\"title\":\"Hippolyte's Timeboard Wed, Mar 3, 10:57:28 am\"}},{\"id\":\"4758632\",\"type\":\"notebooks\",\"attributes\":{\"title\":\"PCF Container Usage Attribution\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Related Assets to a Metric returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.579Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "rule_ids": [] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules/order", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"rule_ids must not be empty\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Reorder tag indexing rules returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.630Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_name_matches": [ + "dd.TestReordertagindexingrulesreturnsNoContentresponse1780591177.*" + ], + "name": "TestReordertagindexingrulesreturnsNoContentresponse1780591177", + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"13b0b297-7c54-4744-9333-b1aa7a2fd200\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-06-04T16:39:37.674807Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":false,\"metric_name_matches\":[\"dd.TestReordertagindexingrulesreturnsNoContentresponse1780591177.*\"],\"modified_at\":\"2026-06-04T16:39:37.674807Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"TestReordertagindexingrulesreturnsNoContentresponse1780591177\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true}},\"rule_order\":1,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "rule_ids": [ + "13b0b297-7c54-4744-9333-b1aa7a2fd200" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules/order", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/tag-indexing-rules/13b0b297-7c54-4744-9333-b1aa7a2fd200", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Reorder tag indexing rules returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.829Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "rule_ids": [ + "00000000-0000-0000-0000-000000000001", + "00000000-0000-0000-0000-000000000002" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules/order", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"One or more tag indexing rule IDs not found\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Reorder tag indexing rules returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-12-21T11:14:00.535Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a+b", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1568899800000, + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "a", + "query": "avg:system.cpu.user{*}" + } + ], + "to": 1568923200000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Queries ending outside the retention date are invalid\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Scalar cross product query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2024-03-25T19:28:00.854Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1711391280000, + "queries": [ + { + "aggregator": "avg", + "data_source": "metrics", + "name": "a", + "query": "avg:system.cpu.user{*}" + } + ], + "to": 1711394880000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"values\":[6.368151928283307],\"name\":\"a\",\"meta\":{\"unit\":[{\"short_name\":\"%\",\"id\":17,\"plural\":\"percent\",\"name\":\"percent\",\"family\":\"percentage\",\"scale_factor\":1.0},null]},\"type\":\"number\"}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-02T12:32:24.522Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1780399944000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1780403544000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[340.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with RUM data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:29.994Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658329000, + "queries": [ + { + "data_source": "apm_dependency_stats", + "env": "ci", + "name": "a", + "operation_name": "cassandra.query", + "primary_tag_name": "datacenter", + "primary_tag_value": "edge-eu1.prod.dog", + "resource_name": "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?", + "service": "cassandra", + "stat": "avg_duration" + } + ], + "to": 1775661929000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":[{\"family\":\"time\",\"name\":\"microsecond\",\"plural\":\"microseconds\",\"scale_factor\":0.000001,\"short_name\":\"\u03bcs\",\"id\":9},null]}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with apm_dependency_stats data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-09T18:41:04.011Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775756464000, + "queries": [ + { + "data_source": "apm_metrics", + "group_by": [ + "resource_name" + ], + "name": "a", + "query_filter": "env:prod", + "service": "web-store", + "span_kind": "server", + "stat": "hits" + } + ], + "to": 1775760064000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with apm_metrics data source and span_kind returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:31.055Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658331000, + "queries": [ + { + "data_source": "apm_metrics", + "group_by": [ + "resource_name" + ], + "name": "a", + "query_filter": "env:prod", + "service": "web-store", + "stat": "hits" + } + ], + "to": 1775661931000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with apm_metrics data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:31.243Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658331000, + "queries": [ + { + "data_source": "apm_resource_stats", + "env": "staging", + "group_by": [ + "resource_name" + ], + "name": "a", + "operation_name": "cassandra.query", + "primary_tag_name": "datacenter", + "primary_tag_value": "*", + "service": "azure-bill-import", + "stat": "hits" + } + ], + "to": 1775661931000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with apm_resource_stats data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:35.324Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290795000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "audit", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294395000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[983.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with audit data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:36.679Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290796000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294396000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[9.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with ci_pipelines data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:37.003Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290797000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_tests", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294397000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with ci_tests data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:31.666Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658331000, + "queries": [ + { + "aggregator": "avg", + "data_source": "container", + "limit": 10, + "metric": "process.stat.container.cpu.system_pct", + "name": "a", + "sort": "desc", + "tag_filters": [] + } + ], + "to": 1775661931000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":[{\"family\":\"percentage\",\"name\":\"percent\",\"plural\":\"percent\",\"scale_factor\":1.0,\"short_name\":\"%\",\"id\":17},null]}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with container data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:37.321Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290797000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "events", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294397000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[322.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with events data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:37.705Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290797000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294397000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with logs data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:38.061Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290798000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "network", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294398000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with network data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:38.350Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290798000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "on_call_events", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294398000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[5.0],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with on_call_events data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:31.838Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658331000, + "queries": [ + { + "aggregator": "avg", + "data_source": "process", + "is_normalized_cpu": false, + "limit": 10, + "metric": "process.stat.cpu.total_pct", + "name": "a", + "sort": "desc", + "tag_filters": [], + "text_filter": "" + } + ], + "to": 1775661931000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":[{\"family\":\"percentage\",\"name\":\"percent\",\"plural\":\"percent\",\"scale_factor\":1.0,\"short_name\":\"%\",\"id\":17},null]}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with process data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:38.663Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290798000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "product_analytics", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294398000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with product_analytics data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:39.011Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290799000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "profiles", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294399000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with profiles data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:39.804Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290799000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "security_signals", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294399000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with security_signals data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:32.018Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658332000, + "queries": [ + { + "additional_query_filters": "*", + "data_source": "slo", + "group_mode": "overall", + "measure": "slo_status", + "name": "a", + "slo_id": "12345678910", + "slo_query_type": "metric" + } + ], + "to": 1775661932000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":[{\"family\":\"percentage\",\"name\":\"percent\",\"plural\":\"percent\",\"scale_factor\":1.0,\"short_name\":\"%\",\"id\":17},null]}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with slo data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:40.111Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290800000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "spans", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294400000 + }, + "type": "scalar_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/scalar", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"scalar_response\",\"attributes\":{\"columns\":[{\"name\":\"a\",\"values\":[],\"type\":\"number\",\"meta\":{\"unit\":null}}]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Scalar cross product query with spans data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-07-12T21:45:36.018Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "series": [ + { + "metric": "system.load.1", + "points": [ + { + "timestamp": 1657662336, + "value": 0.7 + } + ], + "resources": [ + { + "name": "dummyhost", + "type": "host" + } + ], + "type": 0 + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/series", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Submit metrics returns \"Payload accepted\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-05-16T16:31:27.866Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/metrics/system.cpu.idle/estimate", + "query": [ + [ + "filter[groups]", + "app,host" + ], + [ + "filter[num_aggregations]", + "4" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"estimated_output_series\":68,\"estimate_type\":\"count_or_gauge\",\"estimated_at\":\"2022-05-14T09:31:28.108179Z\"},\"type\":\"metric_cardinality_estimate\",\"id\":\"system.cpu.idle\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Tag Configuration Cardinality Estimator returns \"Success\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-12-21T11:14:01.584Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a+b", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1671617641, + "interval": 5000, + "queries": [ + { + "data_source": "metrics", + "query": "avg:system.cpu.user{*}" + } + ], + "to": 1671621241 + }, + "type": "timeseries_rquest" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"API input validation failed: Invalid type. Expected \\\"timeseries_request\\\".\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Timeseries cross product query returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2024-04-01T14:20:01.994Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1711977601000, + "interval": 5000, + "queries": [ + { + "data_source": "metrics", + "name": "a", + "query": "avg:datadog.estimated_usage.metrics.custom{*}" + } + ], + "to": 1711981201000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1711977645000,1711977705000,1711980225000],\"values\":[[1,1,87]]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-02T12:32:31.838Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1780399951000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "rum", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1780403551000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1780399970000,1780400270000,1780400275000,1780400570000,1780400870000,1780401170000,1780401470000,1780401475000,1780401770000,1780402070000,1780402370000,1780402670000,1780402970000,1780403270000],\"values\":[[27,22,11,27,27,31,27,2,27,31,26,26,29,27]]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with RUM data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:32.147Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658332000, + "interval": 5000, + "queries": [ + { + "data_source": "apm_dependency_stats", + "env": "ci", + "name": "a", + "operation_name": "cassandra.query", + "primary_tag_name": "datacenter", + "primary_tag_value": "edge-eu1.prod.dog", + "resource_name": "DELETE FROM monitor_history.monitor_state_change_history WHERE org_id = ? AND monitor_id IN ? AND group = ?", + "service": "cassandra", + "stat": "avg_duration" + } + ], + "to": 1775661932000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with apm_dependency_stats data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-09T18:41:05.084Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775756465000, + "interval": 5000, + "queries": [ + { + "data_source": "apm_metrics", + "group_by": [ + "resource_name" + ], + "name": "a", + "query_filter": "env:prod", + "service": "web-store", + "span_kind": "server", + "stat": "hits" + } + ], + "to": 1775760065000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with apm_metrics data source and span_kind returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:32.363Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658332000, + "interval": 5000, + "queries": [ + { + "data_source": "apm_metrics", + "group_by": [ + "resource_name" + ], + "name": "a", + "query_filter": "env:prod", + "service": "web-store", + "stat": "hits" + } + ], + "to": 1775661932000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with apm_metrics data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:32.570Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658332000, + "interval": 5000, + "queries": [ + { + "data_source": "apm_resource_stats", + "env": "staging", + "group_by": [ + "resource_name" + ], + "name": "a", + "operation_name": "cassandra.query", + "primary_tag_name": "datacenter", + "primary_tag_value": "*", + "service": "azure-bill-import", + "stat": "hits" + } + ], + "to": 1775661932000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with apm_resource_stats data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:40.465Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290800000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "audit", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294400000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1776290800000,1776290835000,1776290860000,1776290895000,1776290915000,1776290920000,1776290945000,1776290955000,1776290980000,1776291020000,1776291040000,1776291080000,1776291100000,1776291140000,1776291160000,1776291200000,1776291220000,1776291245000,1776291260000,1776291280000,1776291320000,1776291325000,1776291330000,1776291335000,1776291340000,1776291345000,1776291385000,1776291400000,1776291415000,1776291445000,1776291460000,1776291505000,1776291520000,1776291535000,1776291540000,1776291565000,1776291580000,1776291630000,1776291640000,1776291690000,1776291700000,1776291750000,1776291760000,1776291810000,1776291820000,1776291870000,1776291880000,1776291890000,1776291935000,1776291940000,1776291995000,1776292000000,1776292010000,1776292015000,1776292020000,1776292055000,1776292060000,1776292115000,1776292120000,1776292175000,1776292180000,1776292195000,1776292200000,1776292205000,1776292240000,1776292300000,1776292360000,1776292390000,1776292420000,1776292460000,1776292480000,1776292540000,1776292545000,1776292565000,1776292600000,1776292605000,1776292660000,1776292665000,1776292720000,1776292725000,1776292765000,1776292780000,1776292785000,1776292840000,1776292850000,1776292900000,1776292910000,1776292960000,1776292970000,1776293005000,1776293020000,1776293030000,1776293080000,1776293090000,1776293140000,1776293155000,1776293200000,1776293215000,1776293260000,1776293265000,1776293275000,1776293320000,1776293335000,1776293355000,1776293380000,1776293395000,1776293440000,1776293460000,1776293500000,1776293520000,1776293545000,1776293550000,1776293555000,1776293560000,1776293580000,1776293620000,1776293640000,1776293680000,1776293700000,1776293740000,1776293760000,1776293765000,1776293770000,1776293785000,1776293790000,1776293800000,1776293825000,1776293860000,1776293865000,1776293885000,1776293920000,1776293945000,1776293955000,1776293980000,1776294005000,1776294040000,1776294070000,1776294100000,1776294130000,1776294160000,1776294190000,1776294220000,1776294240000,1776294245000,1776294250000,1776294280000,1776294285000,1776294310000,1776294340000,1776294375000],\"values\":[[2,2,3,2,13,2,3,2,3,2,1,2,3,2,3,2,1,4,2,3,11,104,140,28,9,2,2,1,3,2,3,2,4,1,1,2,1,2,3,2,1,2,3,2,3,2,3,3,2,1,2,3,7,14,10,2,1,2,3,2,3,8,14,9,3,5,3,8,5,9,3,3,2,4,1,2,3,2,3,2,1,1,2,3,2,1,2,3,2,1,1,2,54,2,1,2,3,2,6,2,2,1,2,4,3,2,1,2,3,2,5,15,7,3,2,1,2,3,2,2,14,29,2,19,9,2,2,2,1,2,3,2,55,1,2,3,2,1,2,3,2,3,3,3,2,38,73,2,3,1]]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with audit data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:40.785Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290800000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_pipelines", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294400000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1776291235000,1776291290000,1776291295000,1776291370000,1776291380000,1776291385000],\"values\":[[1,1,3,1,1,2]]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with ci_pipelines data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:41.185Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290801000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "ci_tests", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294401000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with ci_tests data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:32.715Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658332000, + "interval": 5000, + "queries": [ + { + "data_source": "container", + "limit": 10, + "metric": "process.stat.container.cpu.system_pct", + "name": "a", + "sort": "desc", + "tag_filters": [] + } + ], + "to": 1775661932000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with container data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:41.507Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290801000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "events", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294401000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1776290845000,1776290905000,1776290910000,1776290970000,1776291035000,1776291100000,1776291160000,1776291165000,1776291225000,1776291290000,1776291355000,1776291415000,1776291420000,1776291480000,1776291545000,1776291605000,1776291610000,1776291670000,1776291735000,1776291800000,1776291870000,1776291940000,1776292005000,1776292065000,1776292070000,1776292130000,1776292195000,1776292255000,1776292260000,1776292285000,1776292320000,1776292345000,1776292385000,1776292450000,1776292460000,1776292465000,1776292510000,1776292525000,1776292575000,1776292640000,1776292700000,1776292705000,1776292765000,1776292830000,1776292895000,1776292965000,1776293035000,1776293100000,1776293165000,1776293230000,1776293300000,1776293365000,1776293370000,1776293430000,1776293495000,1776293560000,1776293630000,1776293710000,1776293760000,1776293765000,1776293780000,1776293845000,1776293910000,1776293970000,1776293975000,1776294040000,1776294110000,1776294175000,1776294235000,1776294240000,1776294285000,1776294305000],\"values\":[[4,2,2,4,4,4,2,2,4,4,4,2,2,4,4,2,2,4,4,4,4,4,4,2,2,4,4,2,2,1,4,1,4,4,2,1,4,1,4,4,2,2,4,4,4,4,4,4,4,4,4,2,2,4,4,4,4,4,15,75,4,4,4,2,2,4,4,4,2,2,12,2]]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with events data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:41.871Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290801000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "logs", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294401000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with logs data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:42.484Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290802000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "network", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294402000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with network data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:42.769Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290802000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "on_call_events", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294402000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[{\"group_tags\":[],\"query_index\":0,\"unit\":null}],\"times\":[1776294280000,1776294285000],\"values\":[[2,3]]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with on_call_events data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:32.912Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658332000, + "interval": 5000, + "queries": [ + { + "data_source": "process", + "is_normalized_cpu": false, + "limit": 10, + "metric": "process.stat.cpu.total_pct", + "name": "a", + "sort": "desc", + "tag_filters": [], + "text_filter": "" + } + ], + "to": 1775661932000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with process data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:43.081Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290803000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "product_analytics", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294403000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with product_analytics data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:43.385Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290803000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "profiles", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294403000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with profiles data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:44.027Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290804000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "security_signals", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294404000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with security_signals data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-08T15:25:33.123Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1775658333000, + "interval": 5000, + "queries": [ + { + "additional_query_filters": "*", + "data_source": "slo", + "group_mode": "overall", + "measure": "slo_status", + "name": "a", + "slo_id": "12345678910", + "slo_query_type": "metric" + } + ], + "to": 1775661933000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with slo data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-04-15T23:06:44.323Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "formulas": [ + { + "formula": "a", + "limit": { + "count": 10, + "order": "desc" + } + } + ], + "from": 1776290804000, + "interval": 5000, + "queries": [ + { + "compute": { + "aggregation": "count" + }, + "data_source": "spans", + "indexes": [ + "*" + ], + "name": "a", + "search": { + "query": "*" + } + } + ], + "to": 1776294404000 + }, + "type": "timeseries_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/query/timeseries", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0\",\"type\":\"timeseries_response\",\"attributes\":{\"series\":[],\"times\":[],\"values\":[]}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Timeseries cross product query with spans data source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2022-05-12T11:19:32.360Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "series": [ + { + "metric": "TestUpdateatagconfigurationreturnsOKresponse1652354372", + "points": [ + [ + 1652354372, + 1.1 + ] + ], + "tags": [ + "test:ExampleSubmitmetricsreturnsPayloadacceptedresponse" + ], + "type": "gauge" + } + ] + } + }, + "content_type": "text/json", + "method": "POST", + "path": "/api/v1/series", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"status\": \"ok\"}" + }, + "headers": { + "content-type": "text/json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_type": "gauge", + "tags": [ + "app", + "datacenter", + "TestUpdateatagconfigurationreturnsOKresponse1652354372" + ] + }, + "id": "TestUpdateatagconfigurationreturnsOKresponse1652354372", + "type": "manage_tags" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/TestUpdateatagconfigurationreturnsOKresponse1652354372/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"manage_tags\",\"id\":\"TestUpdateatagconfigurationreturnsOKresponse1652354372\",\"attributes\":{\"tags\":[\"datacenter\",\"TestUpdateatagconfigurationreturnsOKresponse1652354372\",\"app\"],\"created_at\":\"2022-05-12T11:19:33.257425+00:00\",\"modified_at\":\"2022-05-12T11:19:33.257425+00:00\",\"metric_type\":\"gauge\",\"aggregations\":[{\"space\":\"avg\",\"time\":\"avg\"}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "tags": [ + "app" + ] + }, + "id": "TestUpdateatagconfigurationreturnsOKresponse1652354372", + "type": "manage_tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/metrics/TestUpdateatagconfigurationreturnsOKresponse1652354372/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"manage_tags\",\"id\":\"TestUpdateatagconfigurationreturnsOKresponse1652354372\",\"attributes\":{\"tags\":[\"app\"],\"created_at\":\"2022-05-12T11:19:33.257425+00:00\",\"modified_at\":\"2022-05-12T11:19:33.820520+00:00\",\"metric_type\":\"gauge\",\"aggregations\":[{\"space\":\"avg\",\"time\":\"avg\"}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/TestUpdateatagconfigurationreturnsOKresponse1652354372/tags", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a tag configuration returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.910Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "queried_tags_window_seconds": 3600, + "related_asset_tags": false + }, + "manage_preexisting_metrics": true, + "metric_match": { + "queried_window_seconds": 3600 + }, + "override_previous_rules": false + }, + "version": 1 + }, + "rule_order": 2, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/metrics/tag-indexing-rules/not-a-valid-uuid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid tag indexing rule ID format\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update a tag indexing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:37.964Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "queried_tags_window_seconds": 3600, + "related_asset_tags": false + }, + "manage_preexisting_metrics": true, + "metric_match": { + "queried_window_seconds": 3600 + }, + "override_previous_rules": false + }, + "version": 1 + }, + "rule_order": 2, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/metrics/tag-indexing-rules/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Tag indexing rule not found\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a tag indexing rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-06-04T16:39:38.031Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "metric_name_matches": [ + "dd.TestUpdateatagindexingrulereturnsOKresponse1780591178.*" + ], + "name": "TestUpdateatagindexingrulereturnsOKresponse1780591178", + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c9f5704f-f5b9-4afe-9dec-69edfce00c0a\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-06-04T16:39:38.068057Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":false,\"metric_name_matches\":[\"dd.TestUpdateatagindexingrulereturnsOKresponse1780591178.*\"],\"modified_at\":\"2026-06-04T16:39:38.068057Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"TestUpdateatagindexingrulereturnsOKresponse1780591178\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true}},\"rule_order\":1,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "queried_tags_window_seconds": 3600, + "related_asset_tags": false + }, + "manage_preexisting_metrics": true, + "metric_match": { + "queried_window_seconds": 3600 + }, + "override_previous_rules": false + }, + "version": 1 + }, + "rule_order": 2, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/metrics/tag-indexing-rules/c9f5704f-f5b9-4afe-9dec-69edfce00c0a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c9f5704f-f5b9-4afe-9dec-69edfce00c0a\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-06-04T16:39:38.068057Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":false,\"ignored_metric_name_matches\":[],\"metric_name_matches\":[\"dd.test.*\"],\"modified_at\":\"2026-06-04T16:39:38.137079Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"my-indexing-rule\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true,\"dynamic_tags\":{\"queried_tags_window_seconds\":3600},\"metric_match\":{\"queried_window_seconds\":3600}}},\"rule_order\":2,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/tag-indexing-rules/c9f5704f-f5b9-4afe-9dec-69edfce00c0a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a tag indexing rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Metrics", + "frozen_at": "2026-07-20T13:47:24.486Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": true, + "metric_name_matches": [ + "dd.TestUpdateatagindexingrulewithexcludemodetagusagefieldsreturnsOKresponse1784555244.*" + ], + "name": "TestUpdateatagindexingrulewithexcludemodetagusagefieldsreturnsOKresponse1784555244", + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/metrics/tag-indexing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e4a507ac-ee83-439b-bf65-72d162150e3c\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-07-20T13:47:24.568418Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":true,\"metric_name_matches\":[\"dd.TestUpdateatagindexingrulewithexcludemodetagusagefieldsreturnsOKresponse1784555244.*\"],\"modified_at\":\"2026-07-20T13:47:24.568418Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"TestUpdateatagindexingrulewithexcludemodetagusagefieldsreturnsOKresponse1784555244\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true}},\"rule_order\":1,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclude_tags_mode": true, + "ignored_metric_name_matches": [], + "metric_name_matches": [ + "dd.test.*" + ], + "name": "my-indexing-rule", + "options": { + "data": { + "dynamic_tags": { + "exclude_not_queried_window_seconds": 7200, + "exclude_not_used_in_assets": true + }, + "manage_preexisting_metrics": true, + "override_previous_rules": false + }, + "version": 1 + }, + "rule_order": 2, + "tags": [ + "env", + "service" + ] + }, + "type": "tag_indexing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/metrics/tag-indexing-rules/e4a507ac-ee83-439b-bf65-72d162150e3c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e4a507ac-ee83-439b-bf65-72d162150e3c\",\"type\":\"tag_indexing_rules\",\"attributes\":{\"created_at\":\"2026-07-20T13:47:24.568418Z\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"exclude_tags_mode\":true,\"ignored_metric_name_matches\":[],\"metric_name_matches\":[\"dd.test.*\"],\"modified_at\":\"2026-07-20T13:47:24.708603Z\",\"modified_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"my-indexing-rule\",\"options\":{\"version\":1,\"data\":{\"override_previous_rules\":false,\"manage_preexisting_metrics\":true,\"dynamic_tags\":{\"exclude_not_queried_window_seconds\":7200,\"exclude_not_used_in_assets\":true}}},\"rule_order\":2,\"tags\":[\"env\",\"service\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/metrics/tag-indexing-rules/e4a507ac-ee83-439b-bf65-72d162150e3c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a tag indexing rule with exclude-mode tag usage fields returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/microsoft-teams-integration.json b/test-server-data/v2/microsoft-teams-integration.json new file mode 100644 index 0000000000..f8131c95c2 --- /dev/null +++ b/test-server-data/v2/microsoft-teams-integration.json @@ -0,0 +1,404 @@ +{ + "feature": "Microsoft Teams Integration", + "recordings": [ + { + "feature": "Microsoft Teams Integration", + "frozen_at": "2025-05-28T18:45:50.103Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_workflow_webhook_handle_returns_CREATED_response-1748457950", + "url": "https://example.logic.azure.com/workflows/123" + }, + "type": "workflows-webhook-handle" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6207c675-cdc3-4cd4-903a-e7a6a3fbac0d\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Test-Create_workflow_webhook_handle_returns_CREATED_response-1748457950\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/6207c675-cdc3-4cd4-903a-e7a6a3fbac0d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create workflow webhook handle returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "frozen_at": "2025-05-28T18:45:50.331Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_workflow_webhook_handle_returns_OK_response-1748457950", + "url": "https://prod-100.westus.logic.azure.com:443/workflows/abcd1234" + }, + "type": "workflows-webhook-handle" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9d270a4a-287c-4225-a1cf-3b657416a471\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Test-Delete_workflow_webhook_handle_returns_OK_response-1748457950\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/9d270a4a-287c-4225-a1cf-3b657416a471", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/9d270a4a-287c-4225-a1cf-3b657416a471", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete workflow webhook handle returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "frozen_at": "2025-05-28T18:45:50.625Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_all_workflow_webhook_handles_returns_OK_response-1748457950", + "url": "https://prod-100.westus.logic.azure.com:443/workflows/abcd1234" + }, + "type": "workflows-webhook-handle" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a415a4f2-2b2b-49ad-9f53-3ff6cf5427a4\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Test-Get_all_workflow_webhook_handles_returns_OK_response-1748457950\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"250dc9c5-c441-4dd5-95af-eff475b0f03a\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Example-Create_workflow_webhook_handle_returns_CREATED_response_1742407475\"}},{\"id\":\"905704d9-dd74-4b4a-9904-3d77aafb2bb7\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Example-Get_workflow_webhook_handle_information_returns_OK_response_1745273073\"}},{\"id\":\"97465cdf-3af2-4e22-bcf1-9cfee14cc54a\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Example-Update_workflow_webhook_handle_returns_OK_response_1745273074\"}},{\"id\":\"612d2d5d-0d3a-417c-91a3-080bdc967d76\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Example-Delete_workflow_webhook_handle_returns_OK_response_1745273075\"}},{\"id\":\"aa140346-f905-4e95-aad6-e50f6ca1a645\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Example-Create_workflow_webhook_handle_returns_CREATED_response_1745273075\"}},{\"id\":\"15dec2cf-1457-41dc-bb81-3fefbdaf37b2\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Example-Get_all_workflow_webhook_handles_returns_OK_response_1745273074\"}},{\"id\":\"a12261ae-dae6-4733-847d-16d4865b94a7\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Example-Create_workflow_webhook_handle_returns_CREATED_response_1747943050\"}},{\"id\":\"a415a4f2-2b2b-49ad-9f53-3ff6cf5427a4\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Test-Get_all_workflow_webhook_handles_returns_OK_response-1748457950\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/a415a4f2-2b2b-49ad-9f53-3ff6cf5427a4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all workflow webhook handles returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "frozen_at": "2025-05-28T18:45:51.042Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_workflow_webhook_handle_information_returns_OK_response-1748457951", + "url": "https://prod-100.westus.logic.azure.com:443/workflows/abcd1234" + }, + "type": "workflows-webhook-handle" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ac10e097-66cf-4ab3-8659-a6f6c413d51b\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Test-Get_workflow_webhook_handle_information_returns_OK_response-1748457951\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/ac10e097-66cf-4ab3-8659-a6f6c413d51b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ac10e097-66cf-4ab3-8659-a6f6c413d51b\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Test-Get_workflow_webhook_handle_information_returns_OK_response-1748457951\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/ac10e097-66cf-4ab3-8659-a6f6c413d51b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get workflow webhook handle information returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Microsoft Teams Integration", + "frozen_at": "2025-05-28T18:45:51.379Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_workflow_webhook_handle_returns_OK_response-1748457951", + "url": "https://prod-100.westus.logic.azure.com:443/workflows/abcd1234" + }, + "type": "workflows-webhook-handle" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5c6eadf5-0758-416a-ab9e-f69aa76d69f1\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Test-Update_workflow_webhook_handle_returns_OK_response-1748457951\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_workflow_webhook_handle_returns_OK_response-1748457951--updated" + }, + "type": "workflows-webhook-handle" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/5c6eadf5-0758-416a-ab9e-f69aa76d69f1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5c6eadf5-0758-416a-ab9e-f69aa76d69f1\",\"type\":\"workflows-webhook-handle\",\"attributes\":{\"name\":\"Test-Update_workflow_webhook_handle_returns_OK_response-1748457951--updated\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/ms-teams/configuration/workflows-webhook-handles/5c6eadf5-0758-416a-ab9e-f69aa76d69f1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update workflow webhook handle returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/model-lab-api.json b/test-server-data/v2/model-lab-api.json new file mode 100644 index 0000000000..be5dd9095f --- /dev/null +++ b/test-server-data/v2/model-lab-api.json @@ -0,0 +1,726 @@ +{ + "feature": "Model Lab API", + "recordings": [ + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/model-lab-api/runs/70158", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete a Model Lab run returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/model-lab-api/runs/999999", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"run not found\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a Model Lab run returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/artifacts/content", + "query": [ + [ + "artifact_path", + "f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/adapter_config.json" + ], + [ + "project_id", + "2387" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "data" + }, + "headers": { + "content-type": "application/octet-stream" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Download artifact content returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/projects/999999", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"project not found\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a Model Lab project returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/projects/2387", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2387\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76421\",\"created_at\":\"2026-05-15T02:54:52.457827Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76421\",\"is_starred\":false,\"name\":\"ft-gpt2-smoke-1778812860\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T02:54:52.468614Z\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a Model Lab project returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/runs/999999", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"run not found\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a Model Lab run returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/runs/70158", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"70158\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-15T02:57:03.079Z\",\"created_at\":\"2026-05-15T02:54:52.684452Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":130.498,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/f635c73b70594ab6bb6e212cdf87d0d5\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"eval_loss\",\"min\":3.214665412902832,\"max\":3.9457361698150635,\"mean\":3.5802007913589478,\"latest\":3.214665412902832,\"count\":4,\"first_step\":0,\"last_step\":204},{\"key\":\"learning_rate\",\"min\":0,\"max\":0.0001,\"mean\":4.9999999999999996e-05,\"latest\":5.154639175257732e-07,\"count\":408,\"first_step\":1,\"last_step\":204},{\"key\":\"train_steps_per_second\",\"min\":1.951,\"max\":1.951,\"mean\":1.951,\"latest\":1.951,\"count\":1,\"first_step\":204,\"last_step\":204},{\"key\":\"entropy\",\"min\":3.1330020427703857,\"max\":4.252453327178955,\"mean\":3.6496509979752934,\"latest\":3.1330020427703857,\"count\":204,\"first_step\":1,\"last_step\":204},{\"key\":\"eval_runtime\",\"min\":6.3487,\"max\":6.7308,\"mean\":6.53975,\"latest\":6.3487,\"count\":2,\"first_step\":0,\"last_step\":204},{\"key\":\"grad_norm\",\"min\":0.4185899794101715,\"max\":1.697460651397705,\"mean\":0.9965703097336432,\"latest\":1.3113601207733154,\"count\":204,\"first_step\":1,\"last_step\":204},{\"key\":\"total_flos\",\"min\":31781629558784,\"max\":31781629558784,\"mean\":31781629558784,\"latest\":31781629558784,\"count\":1,\"first_step\":204,\"last_step\":204},{\"key\":\"training_runtime_seconds\",\"min\":106.08,\"max\":106.08,\"mean\":106.08,\"latest\":106.08,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"train_loss\",\"min\":3.10653018951416,\"max\":4.4325761795043945,\"mean\":3.6260507060032263,\"latest\":3.6260507060032263,\"count\":205,\"first_step\":1,\"last_step\":204},{\"key\":\"train_runtime\",\"min\":104.5855,\"max\":104.5855,\"mean\":104.5855,\"latest\":104.5855,\"count\":1,\"first_step\":204,\"last_step\":204},{\"key\":\"train_samples_per_second\",\"min\":7.802,\"max\":7.802,\"mean\":7.802,\"latest\":7.802,\"count\":1,\"first_step\":204,\"last_step\":204},{\"key\":\"eval_mean_token_accuracy\",\"min\":0.3437899912104887,\"max\":0.40528977969113517,\"mean\":0.37453988545081196,\"latest\":0.40528977969113517,\"count\":2,\"first_step\":0,\"last_step\":204},{\"key\":\"eval_num_tokens\",\"min\":0,\"max\":115650,\"mean\":57825,\"latest\":115650,\"count\":2,\"first_step\":0,\"last_step\":204},{\"key\":\"eval_samples_per_second\",\"min\":30.308,\"max\":32.133,\"mean\":31.2205,\"latest\":32.133,\"count\":2,\"first_step\":0,\"last_step\":204},{\"key\":\"eval_steps_per_second\",\"min\":7.577,\"max\":8.033,\"mean\":7.805,\"latest\":8.033,\"count\":2,\"first_step\":0,\"last_step\":204},{\"key\":\"final_train_loss\",\"min\":3.6260507060032263,\"max\":3.6260507060032263,\"mean\":3.6260507060032263,\"latest\":3.6260507060032263,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"mean_token_accuracy\",\"min\":0.2756052017211914,\"max\":0.4394785761833191,\"mean\":0.36340271316322625,\"latest\":0.4110320210456848,\"count\":204,\"first_step\":1,\"last_step\":204},{\"key\":\"epoch\",\"min\":0,\"max\":1,\"mean\":0.5048309178743962,\"latest\":1,\"count\":207,\"first_step\":0,\"last_step\":204},{\"key\":\"eval_entropy\",\"min\":3.4261409394881306,\"max\":3.795459279827043,\"mean\":3.610800109657587,\"latest\":3.4261409394881306,\"count\":2,\"first_step\":0,\"last_step\":204},{\"key\":\"loss\",\"min\":3.10653018951416,\"max\":4.4325761795043945,\"mean\":3.6260507060032263,\"latest\":3.171748638153076,\"count\":204,\"first_step\":1,\"last_step\":204},{\"key\":\"num_tokens\",\"min\":602,\"max\":115650,\"mean\":58002.029411764706,\"latest\":115650,\"count\":204,\"first_step\":1,\"last_step\":204},{\"key\":\"total_steps\",\"min\":204,\"max\":204,\"mean\":204,\"latest\":204,\"count\":1,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///2387/70158/artifacts\",\"name\":\"ft-gpt2-smoke-1778812860-1778813692\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"_name_or_path\",\"value\":\"gpt2\"},{\"key\":\"activation_function\",\"value\":\"gelu_new\"},{\"key\":\"adam_beta1\",\"value\":\"0.9\"},{\"key\":\"adam_beta2\",\"value\":\"0.999\"},{\"key\":\"adam_epsilon\",\"value\":\"1e-08\"},{\"key\":\"add_cross_attention\",\"value\":\"False\"},{\"key\":\"architectures\",\"value\":\"['GPT2LMHeadModel']\"},{\"key\":\"attn_pdrop\",\"value\":\"0.1\"},{\"key\":\"auto_find_batch_size\",\"value\":\"False\"},{\"key\":\"average_tokens_across_devices\",\"value\":\"True\"},{\"key\":\"bf16\",\"value\":\"True\"},{\"key\":\"bf16_full_eval\",\"value\":\"False\"},{\"key\":\"bos_token_id\",\"value\":\"50256\"},{\"key\":\"chunk_size_feed_forward\",\"value\":\"0\"},{\"key\":\"dataset\",\"value\":\"s3://aip-long-running-jobs/savita.manghnani/train_amplified.zip\"},{\"key\":\"disable_tqdm\",\"value\":\"False\"},{\"key\":\"dtype\",\"value\":\"bfloat16\"},{\"key\":\"embd_pdrop\",\"value\":\"0.1\"},{\"key\":\"eos_token_id\",\"value\":\"50256\"},{\"key\":\"eval_accumulation_steps\",\"value\":\"None\"},{\"key\":\"eval_delay\",\"value\":\"0\"},{\"key\":\"eval_do_concat_batches\",\"value\":\"True\"},{\"key\":\"eval_on_start\",\"value\":\"True\"},{\"key\":\"eval_steps\",\"value\":\"None\"},{\"key\":\"eval_strategy\",\"value\":\"epoch\"},{\"key\":\"eval_use_gather_object\",\"value\":\"False\"},{\"key\":\"fp16\",\"value\":\"False\"},{\"key\":\"fp16_full_eval\",\"value\":\"False\"},{\"key\":\"gradient_accumulation_steps\",\"value\":\"1\"},{\"key\":\"gradient_checkpointing\",\"value\":\"False\"},{\"key\":\"gradient_checkpointing_kwargs\",\"value\":\"None\"},{\"key\":\"id2label\",\"value\":\"{0: 'LABEL_0', 1: 'LABEL_1'}\"},{\"key\":\"include_for_metrics\",\"value\":\"[]\"},{\"key\":\"include_num_input_tokens_seen\",\"value\":\"no\"},{\"key\":\"initializer_range\",\"value\":\"0.02\"},{\"key\":\"is_encoder_decoder\",\"value\":\"False\"},{\"key\":\"label2id\",\"value\":\"{'LABEL_0': 0, 'LABEL_1': 1}\"},{\"key\":\"label_smoothing_factor\",\"value\":\"0.0\"},{\"key\":\"layer_norm_epsilon\",\"value\":\"1e-05\"},{\"key\":\"learning_rate\",\"value\":\"0.0001\"},{\"key\":\"liger_kernel_config\",\"value\":\"None\"},{\"key\":\"log_level\",\"value\":\"passive\"},{\"key\":\"log_level_replica\",\"value\":\"warning\"},{\"key\":\"log_on_each_node\",\"value\":\"True\"},{\"key\":\"logging_first_step\",\"value\":\"False\"},{\"key\":\"logging_nan_inf_filter\",\"value\":\"True\"},{\"key\":\"logging_steps\",\"value\":\"1\"},{\"key\":\"logging_strategy\",\"value\":\"steps\"},{\"key\":\"lora_alpha\",\"value\":\"16\"},{\"key\":\"lora_dropout\",\"value\":\"0.1\"},{\"key\":\"lora_rank\",\"value\":\"8\"},{\"key\":\"lr_scheduler_kwargs\",\"value\":\"None\"},{\"key\":\"lr_scheduler_type\",\"value\":\"linear\"},{\"key\":\"max_grad_norm\",\"value\":\"1.0\"},{\"key\":\"max_length\",\"value\":\"2048\"},{\"key\":\"max_steps\",\"value\":\"-1\"},{\"key\":\"method\",\"value\":\"lora\"},{\"key\":\"model_name\",\"value\":\"gpt2\"},{\"key\":\"model_type\",\"value\":\"gpt2\"},{\"key\":\"n_ctx\",\"value\":\"1024\"},{\"key\":\"n_embd\",\"value\":\"768\"},{\"key\":\"n_head\",\"value\":\"12\"},{\"key\":\"n_inner\",\"value\":\"None\"},{\"key\":\"n_layer\",\"value\":\"12\"},{\"key\":\"n_positions\",\"value\":\"1024\"},{\"key\":\"neftune_noise_alpha\",\"value\":\"None\"},{\"key\":\"num_epochs\",\"value\":\"1\"},{\"key\":\"num_train_epochs\",\"value\":\"1\"},{\"key\":\"optim\",\"value\":\"adamw_torch_fused\"},{\"key\":\"optim_args\",\"value\":\"None\"},{\"key\":\"optim_target_modules\",\"value\":\"None\"},{\"key\":\"optimizer\",\"value\":\"adamw_8bit\"},{\"key\":\"output_attentions\",\"value\":\"False\"},{\"key\":\"output_dir\",\"value\":\"./lora_output\"},{\"key\":\"output_hidden_states\",\"value\":\"False\"},{\"key\":\"packing\",\"value\":\"False\"},{\"key\":\"pad_token_id\",\"value\":\"50256\"},{\"key\":\"per_device_batch_size\",\"value\":\"2\"},{\"key\":\"per_device_eval_batch_size\",\"value\":\"2\"},{\"key\":\"per_device_train_batch_size\",\"value\":\"2\"},{\"key\":\"precision\",\"value\":\"bf16\"},{\"key\":\"prediction_loss_only\",\"value\":\"False\"},{\"key\":\"problem_type\",\"value\":\"None\"},{\"key\":\"project\",\"value\":\"huggingface\"},{\"key\":\"reorder_and_upcast_attn\",\"value\":\"False\"},{\"key\":\"report_to\",\"value\":\"['mlflow']\"},{\"key\":\"resid_pdrop\",\"value\":\"0.1\"},{\"key\":\"return_dict\",\"value\":\"True\"},{\"key\":\"run_name\",\"value\":\"None\"},{\"key\":\"scale_attn_by_inverse_layer_idx\",\"value\":\"False\"},{\"key\":\"scale_attn_weights\",\"value\":\"True\"},{\"key\":\"summary_activation\",\"value\":\"None\"},{\"key\":\"summary_first_dropout\",\"value\":\"0.1\"},{\"key\":\"summary_proj_to_labels\",\"value\":\"True\"},{\"key\":\"summary_type\",\"value\":\"cls_index\"},{\"key\":\"summary_use_proj\",\"value\":\"True\"},{\"key\":\"task_specific_params\",\"value\":\"{'text-generation': {'do_sample': True, 'max_length': 50}}\"},{\"key\":\"tf32\",\"value\":\"None\"},{\"key\":\"tie_word_embeddings\",\"value\":\"True\"},{\"key\":\"torch_compile\",\"value\":\"False\"},{\"key\":\"torch_compile_backend\",\"value\":\"None\"},{\"key\":\"torch_compile_mode\",\"value\":\"None\"},{\"key\":\"torch_empty_cache_steps\",\"value\":\"None\"},{\"key\":\"trackio_bucket_id\",\"value\":\"None\"},{\"key\":\"trackio_space_id\",\"value\":\"None\"},{\"key\":\"trackio_static_space_id\",\"value\":\"None\"},{\"key\":\"trainer\",\"value\":\"trl-sft-raytrain\"},{\"key\":\"transformers_version\",\"value\":\"5.8.1\"},{\"key\":\"use_cache\",\"value\":\"False\"},{\"key\":\"use_liger_kernel\",\"value\":\"False\"},{\"key\":\"vocab_size\",\"value\":\"50257\"},{\"key\":\"warmup_steps\",\"value\":\"10\"},{\"key\":\"weight_decay\",\"value\":\"0.0\"}],\"project_id\":2387,\"started_at\":\"2026-05-15T02:54:52.581Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"mlflow.runName\",\"value\":\"ft-gpt2-smoke-1778812860-1778813692\"},{\"key\":\"mlflow.source.name\",\"value\":\"/home/ray/.venv/lib/python3.12/site-packages/ray/_private/workers/default_worker.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"resumed\",\"value\":\"false\"}],\"updated_at\":\"2026-05-15T02:57:03.257618Z\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a Model Lab run returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/projects/2387/artifacts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2387\",\"type\":\"project_files\",\"attributes\":{\"files\":[{\"filename\":\"README.md\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/README.md\",\"created_at\":\"2026-05-15T02:57:00Z\",\"file_size\":1389},{\"filename\":\"adapter_config.json\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/adapter_config.json\",\"created_at\":\"2026-05-15T02:57:01Z\",\"file_size\":1015},{\"filename\":\"adapter_model.safetensors\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/adapter_model.safetensors\",\"created_at\":\"2026-05-15T02:57:01Z\",\"file_size\":4730632},{\"filename\":\"README.md\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/README.md\",\"created_at\":\"2026-05-15T02:57:02Z\",\"file_size\":5174},{\"filename\":\"adapter_config.json\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/adapter_config.json\",\"created_at\":\"2026-05-15T02:57:02Z\",\"file_size\":1015},{\"filename\":\"adapter_model.safetensors\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/adapter_model.safetensors\",\"created_at\":\"2026-05-15T02:57:03Z\",\"file_size\":4730632},{\"filename\":\"optimizer.bin\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/optimizer.bin\",\"created_at\":\"2026-05-15T02:57:02Z\",\"file_size\":9534155},{\"filename\":\"pytorch_model_fsdp.bin\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/pytorch_model_fsdp.bin\",\"created_at\":\"2026-05-15T02:57:03Z\",\"file_size\":4754405},{\"filename\":\"rng_state_0.pth\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/rng_state_0.pth\",\"created_at\":\"2026-05-15T02:57:03Z\",\"file_size\":14725},{\"filename\":\"scheduler.pt\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/scheduler.pt\",\"created_at\":\"2026-05-15T02:57:02Z\",\"file_size\":1465},{\"filename\":\"tokenizer.json\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/tokenizer.json\",\"created_at\":\"2026-05-15T02:57:03Z\",\"file_size\":3557680},{\"filename\":\"tokenizer_config.json\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/tokenizer_config.json\",\"created_at\":\"2026-05-15T02:57:02Z\",\"file_size\":326},{\"filename\":\"trainer_state.json\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/trainer_state.json\",\"created_at\":\"2026-05-15T02:57:02Z\",\"file_size\":62194},{\"filename\":\"training_args.bin\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/checkpoint-204/training_args.bin\",\"created_at\":\"2026-05-15T02:57:03Z\",\"file_size\":6097},{\"filename\":\"run_config.json\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/run_config.json\",\"created_at\":\"2026-05-15T02:57:00Z\",\"file_size\":991},{\"filename\":\"tokenizer.json\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/tokenizer.json\",\"created_at\":\"2026-05-15T02:57:01Z\",\"file_size\":3557680},{\"filename\":\"tokenizer_config.json\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/tokenizer_config.json\",\"created_at\":\"2026-05-15T02:57:01Z\",\"file_size\":326},{\"filename\":\"training_args.bin\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/training_args.bin\",\"created_at\":\"2026-05-15T02:57:02Z\",\"file_size\":6097},{\"filename\":\"training_metrics.json\",\"artifact_path\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts/lora_model/training_metrics.json\",\"created_at\":\"2026-05-15T02:57:01Z\",\"file_size\":55890}]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Model Lab project artifacts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/project-facet-keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2\",\"type\":\"facet_keys\",\"attributes\":{\"metrics\":null,\"parameters\":[],\"tags\":[\"age\",\"beatings\",\"mlflow.experimentKind\",\"mlflow.experiment.ownerID\",\"morale\",\"team\",\"usecase\",\"weather\"]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Model Lab project facet keys returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/project-facet-values", + "query": [ + [ + "facet_name", + "model" + ], + [ + "facet_type", + "tag" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"tag:model\",\"type\":\"facet_values\",\"attributes\":{\"facet_name\":\"model\",\"facet_type\":\"tag\",\"values\":[]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Model Lab project facet values returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/projects", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"2439\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///2439\",\"created_at\":\"2026-05-18T16:44:48.672513Z\",\"description\":\"\",\"is_starred\":false,\"name\":\"test-bdd-recording-1779122688\",\"tags\":[],\"updated_at\":\"2026-05-18T16:44:48.684473Z\"}},{\"id\":\"2438\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76991\",\"created_at\":\"2026-05-18T15:55:50.180276Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76991\",\"is_starred\":false,\"name\":\"qwen36-27b-qlora-fsdp-1779119158\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-18T15:55:50.188677Z\"}},{\"id\":\"2437\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76989\",\"created_at\":\"2026-05-18T15:46:35.705961Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76989\",\"is_starred\":false,\"name\":\"qwen36-27b-lora-bf16-fsdp-1779118712\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-18T15:46:35.715063Z\"}},{\"id\":\"2436\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76981\",\"created_at\":\"2026-05-18T14:36:11.355331Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76981\",\"is_starred\":false,\"name\":\"llm-benchmark/gpt-oss-20b\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-18T14:36:11.363352Z\"}},{\"id\":\"2435\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76980\",\"created_at\":\"2026-05-18T14:36:06.310431Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76980\",\"is_starred\":false,\"name\":\"llm-benchmark/Qwen3.5-4B\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-18T14:36:06.318305Z\"}},{\"id\":\"2434\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76979\",\"created_at\":\"2026-05-18T14:36:00.539314Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76979\",\"is_starred\":false,\"name\":\"llm-benchmark/Qwen3-4B\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-18T14:36:00.546338Z\"}},{\"id\":\"2433\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76978\",\"created_at\":\"2026-05-18T14:35:55.610359Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76978\",\"is_starred\":false,\"name\":\"llm-benchmark/Qwen2.5-Coder-7B\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-18T14:35:55.618194Z\"}},{\"id\":\"2432\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76977\",\"created_at\":\"2026-05-18T14:35:50.418713Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76977\",\"is_starred\":false,\"name\":\"llm-benchmark/Qwen3-8B\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-18T14:35:50.428634Z\"}},{\"id\":\"2399\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76545\",\"created_at\":\"2026-05-15T21:26:54.883458Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76545\",\"is_starred\":false,\"name\":\"ft-qwen36-27b-lora-bf16-fsdp-1778879891\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T21:26:54.894726Z\"}},{\"id\":\"2398\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76541\",\"created_at\":\"2026-05-15T21:00:45.799634Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76541\",\"is_starred\":false,\"name\":\"ft-qwen36-27b-qlora-fsdp-a100-1778878296\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T21:00:45.812402Z\"}},{\"id\":\"2397\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76540\",\"created_at\":\"2026-05-15T20:59:43.336624Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76540\",\"is_starred\":false,\"name\":\"ft-qwen36-27b-qlora-a100-1778878293\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T20:59:43.346736Z\"}},{\"id\":\"2396\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76534\",\"created_at\":\"2026-05-15T20:16:47.48412Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76534\",\"is_starred\":false,\"name\":\"ft-qwen36-27b-qlora-1gpu-1778873109\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T20:16:47.494291Z\"}},{\"id\":\"2395\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76533\",\"created_at\":\"2026-05-15T20:12:05.975402Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76533\",\"is_starred\":false,\"name\":\"ft-qwen36-27b-qlora-fsdp-1778873254\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T20:12:05.984538Z\"}},{\"id\":\"2394\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76531\",\"created_at\":\"2026-05-15T19:59:46.814886Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76531\",\"is_starred\":false,\"name\":\"ft-qwen36-27b-qlora-1gpu-1778872828\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T19:59:46.824596Z\"}},{\"id\":\"2393\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76528\",\"created_at\":\"2026-05-15T19:43:03.893417Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76528\",\"is_starred\":false,\"name\":\"ft-qwen36-27b-qlora-fsdp-1778873442\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T19:43:03.901909Z\"}},{\"id\":\"2392\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76527\",\"created_at\":\"2026-05-15T19:41:00.782593Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76527\",\"is_starred\":false,\"name\":\"ft-qwen36-27b-qlora-1778872484\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T19:41:00.792616Z\"}},{\"id\":\"2391\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76522\",\"created_at\":\"2026-05-15T18:58:22.785747Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76522\",\"is_starred\":false,\"name\":\"ft-qwen35-9b-qlora-1778870929\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T18:58:22.79593Z\"}},{\"id\":\"2390\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76514\",\"created_at\":\"2026-05-15T17:49:04.684478Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76514\",\"is_starred\":false,\"name\":\"ft-qwen35-9b-qlora-1778866175\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T17:49:04.694823Z\"}},{\"id\":\"2389\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76483\",\"created_at\":\"2026-05-15T12:52:28.046954Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76483\",\"is_starred\":false,\"name\":\"ft-qwen35-9b-qlora-1778848889\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T12:52:28.057141Z\"}},{\"id\":\"2388\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76425\",\"created_at\":\"2026-05-15T03:18:25.363827Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76425\",\"is_starred\":false,\"name\":\"ft-qwen35-9b-qlora-1778814244\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T03:18:25.375252Z\"}},{\"id\":\"2387\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76421\",\"created_at\":\"2026-05-15T02:54:52.457827Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76421\",\"is_starred\":false,\"name\":\"ft-gpt2-smoke-1778812860\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-15T02:54:52.468614Z\"}},{\"id\":\"2386\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76396\",\"created_at\":\"2026-05-14T23:30:56.250532Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76396\",\"is_starred\":false,\"name\":\"gpt2-smoke-1778800651\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-14T23:30:56.261218Z\"}},{\"id\":\"2385\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76393\",\"created_at\":\"2026-05-14T23:10:18.350308Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76393\",\"is_starred\":false,\"name\":\"gpt2-smoke-1778799710\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-14T23:10:18.361036Z\"}},{\"id\":\"2352\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///76357\",\"created_at\":\"2026-05-14T17:21:01.714616Z\",\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/experiments/76357\",\"is_starred\":false,\"name\":\"qwen3-4b-thinking-false-1778778667\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"tags\":[],\"updated_at\":\"2026-05-14T17:21:01.724501Z\"}},{\"id\":\"2351\",\"type\":\"projects\",\"attributes\":{\"artifact_storage_location\":\"model-lab:///2351\",\"created_at\":\"2026-05-14T13:24:26.439419Z\",\"description\":\"\",\"is_starred\":false,\"name\":\"40-model-lab-online-rlaif\",\"owner_id\":\"11e6980a-089e-49ea-be5c-c821408af46d\",\"tags\":[],\"updated_at\":\"2026-05-14T13:24:26.452049Z\"}}],\"meta\":{\"page\":{\"type\":\"number_size\",\"number\":0,\"size\":25,\"total\":403,\"first_number\":0,\"prev_number\":null,\"next_number\":1,\"last_number\":16}},\"links\":{\"self\":\"https://api.datad0g.com/api/v2/model-lab-api/projects\",\"first\":\"https://api.datad0g.com/api/v2/model-lab-api/projects?page[number]=0&page[size]=25\",\"last\":\"https://api.datad0g.com/api/v2/model-lab-api/projects?page[number]=16&page[size]=25\",\"next\":\"https://api.datad0g.com/api/v2/model-lab-api/projects?page[number]=1&page[size]=25\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Model Lab projects returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/runs/70158/artifacts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"70158\",\"type\":\"artifacts\",\"attributes\":{\"files\":[{\"path\":\"lora_model/\",\"is_dir\":true}],\"path_in_project\":\"f635c73b70594ab6bb6e212cdf87d0d5/artifacts\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Model Lab run artifacts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/facet-keys", + "query": [ + [ + "filter[project_id]", + "2387" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2387\",\"type\":\"facet_keys\",\"attributes\":{\"metrics\":[\"entropy\",\"epoch\",\"eval_entropy\",\"eval_loss\",\"eval_mean_token_accuracy\",\"eval_num_tokens\",\"eval_runtime\",\"eval_samples_per_second\",\"eval_steps_per_second\",\"final_train_loss\",\"grad_norm\",\"learning_rate\",\"loss\",\"mean_token_accuracy\",\"num_tokens\",\"total_flos\",\"total_steps\",\"training_runtime_seconds\",\"train_loss\",\"train_runtime\",\"train_samples_per_second\",\"train_steps_per_second\"],\"parameters\":[\"activation_function\",\"adam_beta1\",\"adam_beta2\",\"adam_epsilon\",\"add_cross_attention\",\"architectures\",\"attn_pdrop\",\"auto_find_batch_size\",\"average_tokens_across_devices\",\"bf16\",\"bf16_full_eval\",\"bos_token_id\",\"chunk_size_feed_forward\",\"dataset\",\"disable_tqdm\",\"dtype\",\"embd_pdrop\",\"eos_token_id\",\"eval_accumulation_steps\",\"eval_delay\",\"eval_do_concat_batches\",\"eval_on_start\",\"eval_steps\",\"eval_strategy\",\"eval_use_gather_object\",\"fp16\",\"fp16_full_eval\",\"gradient_accumulation_steps\",\"gradient_checkpointing\",\"gradient_checkpointing_kwargs\",\"id2label\",\"include_for_metrics\",\"include_num_input_tokens_seen\",\"initializer_range\",\"is_encoder_decoder\",\"label2id\",\"label_smoothing_factor\",\"layer_norm_epsilon\",\"learning_rate\",\"liger_kernel_config\",\"logging_first_step\",\"logging_nan_inf_filter\",\"logging_steps\",\"logging_strategy\",\"log_level\",\"log_level_replica\",\"log_on_each_node\",\"lora_alpha\",\"lora_dropout\",\"lora_rank\",\"lr_scheduler_kwargs\",\"lr_scheduler_type\",\"max_grad_norm\",\"max_length\",\"max_steps\",\"method\",\"model_name\",\"model_type\",\"_name_or_path\",\"n_ctx\",\"neftune_noise_alpha\",\"n_embd\",\"n_head\",\"n_inner\",\"n_layer\",\"n_positions\",\"num_epochs\",\"num_train_epochs\",\"optim\",\"optim_args\",\"optimizer\",\"optim_target_modules\",\"output_attentions\",\"output_dir\",\"output_hidden_states\",\"packing\",\"pad_token_id\",\"per_device_batch_size\",\"per_device_eval_batch_size\",\"per_device_train_batch_size\",\"precision\",\"prediction_loss_only\",\"problem_type\",\"project\",\"reorder_and_upcast_attn\",\"report_to\",\"resid_pdrop\",\"return_dict\",\"run_name\",\"scale_attn_by_inverse_layer_idx\",\"scale_attn_weights\",\"summary_activation\",\"summary_first_dropout\",\"summary_proj_to_labels\",\"summary_type\",\"summary_use_proj\",\"task_specific_params\",\"tf32\",\"tie_word_embeddings\",\"torch_compile\",\"torch_compile_backend\",\"torch_compile_mode\",\"torch_empty_cache_steps\",\"trackio_bucket_id\",\"trackio_space_id\",\"trackio_static_space_id\",\"trainer\",\"transformers_version\",\"use_cache\",\"use_liger_kernel\",\"vocab_size\",\"warmup_steps\",\"weight_decay\"],\"tags\":[\"mlflow.runName\",\"mlflow.source.name\",\"mlflow.source.type\",\"mlflow.user\",\"resumed\"]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Model Lab run facet keys returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/facet-values", + "query": [ + [ + "facet_name", + "model" + ], + [ + "facet_type", + "tag" + ], + [ + "filter[project_id]", + "2387" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"tag:model:2387\",\"type\":\"facet_values\",\"attributes\":{\"facet_name\":\"model\",\"facet_type\":\"tag\",\"values\":[]}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Model Lab run facet values returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/model-lab-api/runs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"71355\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T15:55:50.38705Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/967b528b3e994b34a67348b790f5faba\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///2438/71355/artifacts\",\"name\":\"qwen36-27b-qlora-fsdp-1779119158-1779119750\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"config_max_length\",\"value\":\"512\"},{\"key\":\"dataset\",\"value\":\"s3://aip-long-running-jobs/savita.manghnani/qwen3_without_thinking.zip\"},{\"key\":\"gradient_accumulation_steps\",\"value\":\"1\"},{\"key\":\"learning_rate\",\"value\":\"0.0001\"},{\"key\":\"lora_alpha\",\"value\":\"16\"},{\"key\":\"lora_dropout\",\"value\":\"0.1\"},{\"key\":\"lora_rank\",\"value\":\"8\"},{\"key\":\"method\",\"value\":\"qlora-4bit\"},{\"key\":\"model_name\",\"value\":\"Qwen/Qwen3.6-27B\"},{\"key\":\"num_epochs\",\"value\":\"1\"},{\"key\":\"optimizer\",\"value\":\"adamw_8bit\"},{\"key\":\"packing\",\"value\":\"False\"},{\"key\":\"per_device_batch_size\",\"value\":\"2\"},{\"key\":\"precision\",\"value\":\"bf16\"},{\"key\":\"trainer\",\"value\":\"trl-sft-raytrain\"}],\"project_id\":2438,\"started_at\":\"2026-05-18T15:55:50.275Z\",\"status\":\"running\",\"tags\":[{\"key\":\"mlflow.runName\",\"value\":\"qwen36-27b-qlora-fsdp-1779119158-1779119750\"},{\"key\":\"mlflow.source.name\",\"value\":\"/home/ray/.venv/lib/python3.12/site-packages/ray/_private/workers/default_worker.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"resumed\",\"value\":\"false\"}],\"updated_at\":\"2026-05-18T15:55:50.399903Z\"}},{\"id\":\"71354\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T15:46:35.963967Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/018cbd19633e47f7b57d140b63f2f99e\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///2437/71354/artifacts\",\"name\":\"qwen36-27b-lora-bf16-fsdp-1779118712-1779119195\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"config_max_length\",\"value\":\"512\"},{\"key\":\"dataset\",\"value\":\"s3://aip-long-running-jobs/savita.manghnani/qwen3_without_thinking.zip\"},{\"key\":\"gradient_accumulation_steps\",\"value\":\"1\"},{\"key\":\"learning_rate\",\"value\":\"0.0001\"},{\"key\":\"lora_alpha\",\"value\":\"16\"},{\"key\":\"lora_dropout\",\"value\":\"0.1\"},{\"key\":\"lora_rank\",\"value\":\"8\"},{\"key\":\"method\",\"value\":\"lora\"},{\"key\":\"model_name\",\"value\":\"Qwen/Qwen3.6-27B\"},{\"key\":\"num_epochs\",\"value\":\"1\"},{\"key\":\"optimizer\",\"value\":\"adamw_8bit\"},{\"key\":\"packing\",\"value\":\"False\"},{\"key\":\"per_device_batch_size\",\"value\":\"2\"},{\"key\":\"precision\",\"value\":\"bf16\"},{\"key\":\"trainer\",\"value\":\"trl-sft-raytrain\"}],\"project_id\":2437,\"started_at\":\"2026-05-18T15:46:35.799Z\",\"status\":\"running\",\"tags\":[{\"key\":\"mlflow.runName\",\"value\":\"qwen36-27b-lora-bf16-fsdp-1779118712-1779119195\"},{\"key\":\"mlflow.source.name\",\"value\":\"/home/ray/.venv/lib/python3.12/site-packages/ray/_private/workers/default_worker.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"resumed\",\"value\":\"false\"}],\"updated_at\":\"2026-05-18T15:46:35.980176Z\"}},{\"id\":\"71353\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T14:36:11.550137Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/7ea36d29bbaf4e74abd124f08abe514e\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"system/total_input_tokens\",\"min\":10240,\"max\":10240,\"mean\":10240,\"latest\":10240,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_token_throughput\",\"min\":1627.7501525189548,\"max\":1627.7501525189548,\"mean\":1627.7501525189548,\"latest\":1627.7501525189548,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_itl_ms\",\"min\":35.59626202331856,\"max\":35.59626202331856,\"mean\":35.59626202331856,\"latest\":35.59626202331856,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_usd_decode\",\"min\":0.048628,\"max\":0.048628,\"mean\":0.048628,\"latest\":0.048628,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_e2el_ms\",\"min\":6844.651613000315,\"max\":6844.651613000315,\"mean\":6844.651613000315,\"latest\":6844.651613000315,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_itl_ms\",\"min\":42.46556939943183,\"max\":42.46556939943183,\"mean\":42.46556939943183,\"latest\":42.46556939943183,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_itl_ms\",\"min\":224.5777664042544,\"max\":224.5777664042544,\"mean\":224.5777664042544,\"latest\":224.5777664042544,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completion_rate\",\"min\":1,\"max\":1,\"mean\":1,\"latest\":0,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_ttft_ms\",\"min\":1720.476923091337,\"max\":1720.476923091337,\"mean\":1720.476923091337,\"latest\":1720.476923091337,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_tpot_ms\",\"min\":41.04991006301936,\"max\":41.04991006301936,\"mean\":41.04991006301936,\"latest\":41.04991006301936,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/num_prompts\",\"min\":10,\"max\":10,\"mean\":10,\"latest\":10,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_e2el_ms\",\"min\":7012.529445069376,\"max\":7012.529445069376,\"mean\":7012.529445069376,\"latest\":7012.529445069376,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/request_throughput\",\"min\":1.4227341600550256,\"max\":1.4227341600550256,\"mean\":1.4227341600550256,\"latest\":1.4227341600550256,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_per_hour\",\"min\":0.5,\"max\":0.5,\"mean\":0.5,\"latest\":0.5,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/input_cost_per_mtok\",\"min\":0.037,\"max\":0.037,\"mean\":0.037,\"latest\":0.037,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/output_cost_per_mtok\",\"min\":0.6449,\"max\":0.6449,\"mean\":0.6449,\"latest\":0.6449,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/duration\",\"min\":7.028719968046062,\"max\":7.028719968046062,\"mean\":7.028719968046062,\"latest\":7.028719968046062,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_tpot_ms\",\"min\":46.36904549927383,\"max\":46.36904549927383,\"mean\":46.36904549927383,\"latest\":46.36904549927383,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_tpot_ms\",\"min\":92.36138276634182,\"max\":92.36138276634182,\"mean\":92.36138276634182,\"latest\":92.36138276634182,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_output_tokens\",\"min\":1201,\"max\":1201,\"mean\":1201,\"latest\":1201,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_usd_prefill\",\"min\":0.117495,\"max\":0.117495,\"mean\":0.117495,\"latest\":0.117495,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completed\",\"min\":10,\"max\":10,\"mean\":10,\"latest\":10,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_e2el_ms\",\"min\":6965.079715999309,\"max\":6965.079715999309,\"mean\":6965.079715999309,\"latest\":6965.079715999309,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_ttft_ms\",\"min\":1751.7411379958503,\"max\":1751.7411379958503,\"mean\":1751.7411379958503,\"latest\":1751.7411379958503,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/output_throughput\",\"min\":170.87037262260858,\"max\":170.87037262260858,\"mean\":170.87037262260858,\"latest\":170.87037262260858,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_ttft_ms\",\"min\":2365.1834659359884,\"max\":2365.1834659359884,\"mean\":2365.1834659359884,\"latest\":2365.1834659359884,\"count\":1,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///2436/71353/artifacts\",\"name\":\"L4-gpt-oss-20b\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"enable_chunked_prefill\",\"value\":\"True\"},{\"key\":\"enable_prefix_caching\",\"value\":\"False\"},{\"key\":\"gpu_memory_utilization\",\"value\":\"0.95\"},{\"key\":\"gpu_type\",\"value\":\"L4\"},{\"key\":\"model\",\"value\":\"openai/gpt-oss-20b\"},{\"key\":\"model.basename\",\"value\":\"gpt-oss-20b\"},{\"key\":\"service_name\",\"value\":\"gpt-oss-20b-bench-bgtu\"},{\"key\":\"tensor_parallel_size\",\"value\":\"1\"},{\"key\":\"vllm.image\",\"value\":\"727006795293.dkr.ecr.us-east-1.amazonaws.com/dd-source/domains/data_science/llm/apps/ray-llm-service:vllm-bleeding-edge-nydus\"}],\"project_id\":2436,\"started_at\":\"2026-05-18T14:36:11.37Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"leaderboard\",\"value\":\"true\"}],\"updated_at\":\"2026-05-18T14:36:16.155066Z\"}},{\"id\":\"71352\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T14:36:06.518157Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/b7cc8492b38748a68e591dc0a39b7a22\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"system/mean_tpot_ms\",\"min\":43.4315888917873,\"max\":43.4315888917873,\"mean\":43.4315888917873,\"latest\":43.4315888917873,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_tpot_ms\",\"min\":43.51078476765978,\"max\":43.51078476765978,\"mean\":43.51078476765978,\"latest\":43.51078476765978,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/output_throughput\",\"min\":149.83232267595528,\"max\":149.83232267595528,\"mean\":149.83232267595528,\"latest\":149.83232267595528,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/request_throughput\",\"min\":1.1705650209059006,\"max\":1.1705650209059006,\"mean\":1.1705650209059006,\"latest\":1.1705650209059006,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_itl_ms\",\"min\":40.42643454158679,\"max\":40.42643454158679,\"mean\":40.42643454158679,\"latest\":40.42643454158679,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/output_cost_per_mtok\",\"min\":0.4206,\"max\":0.4206,\"mean\":0.4206,\"latest\":0.4206,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/duration\",\"min\":6.834306388045661,\"max\":6.834306388045661,\"mean\":6.834306388045661,\"latest\":6.834306388045661,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_itl_ms\",\"min\":43.060154871227496,\"max\":43.060154871227496,\"mean\":43.060154871227496,\"latest\":43.060154871227496,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_ttft_ms\",\"min\":1236.150400378392,\"max\":1236.150400378392,\"mean\":1236.150400378392,\"latest\":1236.150400378392,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_ttft_ms\",\"min\":1221.9488615519367,\"max\":1221.9488615519367,\"mean\":1221.9488615519367,\"latest\":1221.9488615519367,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/num_prompts\",\"min\":10,\"max\":10,\"mean\":10,\"latest\":10,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_tpot_ms\",\"min\":48.08998211418044,\"max\":48.08998211418044,\"mean\":48.08998211418044,\"latest\":48.08998211418044,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_usd_decode\",\"min\":0.064611,\"max\":0.064611,\"mean\":0.064611,\"latest\":0.064611,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_usd_prefill\",\"min\":0.083986,\"max\":0.083986,\"mean\":0.083986,\"latest\":0.083986,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completed\",\"min\":8,\"max\":8,\"mean\":8,\"latest\":8,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_e2el_ms\",\"min\":6749.058461980894,\"max\":6749.058461980894,\"mean\":6749.058461980894,\"latest\":6749.058461980894,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_itl_ms\",\"min\":123.0954357003793,\"max\":123.0954357003793,\"mean\":123.0954357003793,\"latest\":123.0954357003793,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_ttft_ms\",\"min\":1679.515644611092,\"max\":1679.515644611092,\"mean\":1679.515644611092,\"latest\":1679.515644611092,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_input_tokens\",\"min\":8192,\"max\":8192,\"mean\":8192,\"latest\":8192,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_output_tokens\",\"min\":1024,\"max\":1024,\"mean\":1024,\"latest\":1024,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_per_hour\",\"min\":0.5,\"max\":0.5,\"mean\":0.5,\"latest\":0.5,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/input_cost_per_mtok\",\"min\":0.0263,\"max\":0.0263,\"mean\":0.0263,\"latest\":0.0263,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completion_rate\",\"min\":0.8,\"max\":0.8,\"mean\":0.8,\"latest\":0.8,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_e2el_ms\",\"min\":6751.962189635378,\"max\":6751.962189635378,\"mean\":6751.962189635378,\"latest\":6751.962189635378,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_e2el_ms\",\"min\":6818.673504971666,\"max\":6818.673504971666,\"mean\":6818.673504971666,\"latest\":6818.673504971666,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_token_throughput\",\"min\":1348.4909040835976,\"max\":1348.4909040835976,\"mean\":1348.4909040835976,\"latest\":1348.4909040835976,\"count\":1,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///2435/71352/artifacts\",\"name\":\"L4-Qwen3.5-4B\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"enable_chunked_prefill\",\"value\":\"True\"},{\"key\":\"enable_prefix_caching\",\"value\":\"False\"},{\"key\":\"gpu_memory_utilization\",\"value\":\"0.95\"},{\"key\":\"gpu_type\",\"value\":\"L4\"},{\"key\":\"model\",\"value\":\"Qwen/Qwen3.5-4B\"},{\"key\":\"model.basename\",\"value\":\"Qwen3.5-4B\"},{\"key\":\"service_name\",\"value\":\"qwen3-5-4b-bench-3t8u\"},{\"key\":\"tensor_parallel_size\",\"value\":\"1\"},{\"key\":\"vllm.image\",\"value\":\"727006795293.dkr.ecr.us-east-1.amazonaws.com/dd-source/domains/data_science/llm/apps/ray-llm-service:vllm-bleeding-edge-nydus\"}],\"project_id\":2435,\"started_at\":\"2026-05-18T14:36:06.322Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"leaderboard\",\"value\":\"true\"}],\"updated_at\":\"2026-05-18T14:36:11.155341Z\"}},{\"id\":\"71351\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T14:36:01.262504Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/1a7acda0ecc04ca280b77c2f5bef8dc2\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"system/mean_itl_ms\",\"min\":10.056404993260262,\"max\":10.056404993260262,\"mean\":10.056404993260262,\"latest\":10.056404993260262,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_tpot_ms\",\"min\":10.248206653008898,\"max\":10.248206653008898,\"mean\":10.248206653008898,\"latest\":10.248206653008898,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_itl_ms\",\"min\":59.449308563488955,\"max\":59.449308563488955,\"mean\":59.449308563488955,\"latest\":59.449308563488955,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_tpot_ms\",\"min\":10.799848160644128,\"max\":10.799848160644128,\"mean\":10.799848160644128,\"latest\":10.799848160644128,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_output_tokens\",\"min\":896,\"max\":896,\"mean\":896,\"latest\":896,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_token_throughput\",\"min\":4736.073511532153,\"max\":4736.073511532153,\"mean\":4736.073511532153,\"latest\":4736.073511532153,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/input_cost_per_mtok\",\"min\":0.0238,\"max\":0.0238,\"mean\":0.0238,\"latest\":0.0238,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_e2el_ms\",\"min\":1663.88821718283,\"max\":1663.88821718283,\"mean\":1663.88821718283,\"latest\":1663.88821718283,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_tpot_ms\",\"min\":10.16328207094587,\"max\":10.16328207094587,\"mean\":10.16328207094587,\"latest\":10.16328207094587,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/output_throughput\",\"min\":526.2303901702393,\"max\":526.2303901702393,\"mean\":526.2303901702393,\"latest\":526.2303901702393,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_e2el_ms\",\"min\":1673.3655747771263,\"max\":1673.3655747771263,\"mean\":1673.3655747771263,\"latest\":1673.3655747771263,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_per_hour\",\"min\":1.35,\"max\":1.35,\"mean\":1.35,\"latest\":1.35,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_usd_decode\",\"min\":0.035789,\"max\":0.035789,\"mean\":0.035789,\"latest\":0.035789,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/output_cost_per_mtok\",\"min\":0.2962,\"max\":0.2962,\"mean\":0.2962,\"latest\":0.2962,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completion_rate\",\"min\":0.7,\"max\":0.7,\"mean\":0.7,\"latest\":0.7,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_itl_ms\",\"min\":9.22439800342545,\"max\":9.22439800342545,\"mean\":9.22439800342545,\"latest\":9.22439800342545,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_ttft_ms\",\"min\":370.5793390981853,\"max\":370.5793390981853,\"mean\":370.5793390981853,\"latest\":370.5793390981853,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/num_prompts\",\"min\":10,\"max\":10,\"mean\":10,\"latest\":10,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_input_tokens\",\"min\":7168,\"max\":7168,\"mean\":7168,\"latest\":7168,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_usd_prefill\",\"min\":0.076802,\"max\":0.076802,\"mean\":0.076802,\"latest\":0.076802,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_ttft_ms\",\"min\":373.15139417270467,\"max\":373.15139417270467,\"mean\":373.15139417270467,\"latest\":373.15139417270467,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_e2el_ms\",\"min\":1666.9419680256397,\"max\":1666.9419680256397,\"mean\":1666.9419680256397,\"latest\":1666.9419680256397,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_ttft_ms\",\"min\":442.06858904799446,\"max\":442.06858904799446,\"mean\":442.06858904799446,\"latest\":442.06858904799446,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/request_throughput\",\"min\":4.111174923204994,\"max\":4.111174923204994,\"mean\":4.111174923204994,\"latest\":4.111174923204994,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completed\",\"min\":7,\"max\":7,\"mean\":7,\"latest\":7,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/duration\",\"min\":1.7026762739988044,\"max\":1.7026762739988044,\"mean\":1.7026762739988044,\"latest\":1.7026762739988044,\"count\":1,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///2434/71351/artifacts\",\"name\":\"A100-Qwen3-4B\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"enable_chunked_prefill\",\"value\":\"True\"},{\"key\":\"enable_prefix_caching\",\"value\":\"False\"},{\"key\":\"gpu_memory_utilization\",\"value\":\"0.95\"},{\"key\":\"gpu_type\",\"value\":\"A100\"},{\"key\":\"model\",\"value\":\"Qwen/Qwen3-4B\"},{\"key\":\"model.basename\",\"value\":\"Qwen3-4B\"},{\"key\":\"service_name\",\"value\":\"qwen3-4b-bench-95qm\"},{\"key\":\"tensor_parallel_size\",\"value\":\"1\"},{\"key\":\"vllm.image\",\"value\":\"727006795293.dkr.ecr.us-east-1.amazonaws.com/dd-source/domains/data_science/llm/apps/ray-llm-service:vllm-bleeding-edge-nydus\"}],\"project_id\":2434,\"started_at\":\"2026-05-18T14:36:00.552Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"leaderboard\",\"value\":\"true\"}],\"updated_at\":\"2026-05-18T14:36:06.038833Z\"}},{\"id\":\"71350\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T14:35:55.810039Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/bcf3d94123df44e1b94c4d3b441f8660\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"cost/gpu_cost_usd_decode\",\"min\":0.051152,\"max\":0.051152,\"mean\":0.051152,\"latest\":0.051152,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_e2el_ms\",\"min\":1780.398302944377,\"max\":1780.398302944377,\"mean\":1780.398302944377,\"latest\":1780.398302944377,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_tpot_ms\",\"min\":12.372558590439038,\"max\":12.372558590439038,\"mean\":12.372558590439038,\"latest\":12.372558590439038,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_ttft_ms\",\"min\":209.0833619586192,\"max\":209.0833619586192,\"mean\":209.0833619586192,\"latest\":209.0833619586192,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/num_prompts\",\"min\":10,\"max\":10,\"mean\":10,\"latest\":10,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_per_hour\",\"min\":1.35,\"max\":1.35,\"mean\":1.35,\"latest\":1.35,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/input_cost_per_mtok\",\"min\":0.0294,\"max\":0.0294,\"mean\":0.0294,\"latest\":0.0294,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completion_rate\",\"min\":0.2,\"max\":0.2,\"mean\":0.2,\"latest\":0.2,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/duration\",\"min\":1.8296654969453812,\"max\":1.8296654969453812,\"mean\":1.8296654969453812,\"latest\":1.8296654969453812,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_e2el_ms\",\"min\":1780.398302944377,\"max\":1780.398302944377,\"mean\":1780.398302944377,\"latest\":1780.398302944377,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_itl_ms\",\"min\":11.988877027761191,\"max\":11.988877027761191,\"mean\":11.988877027761191,\"latest\":11.988877027761191,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/output_throughput\",\"min\":139.91628547807832,\"max\":139.91628547807832,\"mean\":139.91628547807832,\"latest\":139.91628547807832,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_e2el_ms\",\"min\":1805.3105722554028,\"max\":1805.3105722554028,\"mean\":1805.3105722554028,\"latest\":1805.3105722554028,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completed\",\"min\":2,\"max\":2,\"mean\":2,\"latest\":2,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_ttft_ms\",\"min\":209.0833619586192,\"max\":209.0833619586192,\"mean\":209.0833619586192,\"latest\":209.0833619586192,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_itl_ms\",\"min\":25.041629734914697,\"max\":25.041629734914697,\"mean\":25.041629734914697,\"latest\":25.041629734914697,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_ttft_ms\",\"min\":257.9028429754544,\"max\":257.9028429754544,\"mean\":257.9028429754544,\"latest\":257.9028429754544,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/request_throughput\",\"min\":1.093095980297487,\"max\":1.093095980297487,\"mean\":1.093095980297487,\"latest\":1.093095980297487,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_output_tokens\",\"min\":256,\"max\":256,\"mean\":256,\"latest\":256,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_token_throughput\",\"min\":1259.246569302705,\"max\":1259.246569302705,\"mean\":1259.246569302705,\"latest\":1259.246569302705,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_usd_prefill\",\"min\":0.095492,\"max\":0.095492,\"mean\":0.095492,\"latest\":0.095492,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/output_cost_per_mtok\",\"min\":0.333,\"max\":0.333,\"mean\":0.333,\"latest\":0.333,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_itl_ms\",\"min\":12.273241152342962,\"max\":12.273241152342962,\"mean\":12.273241152342962,\"latest\":12.273241152342962,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_tpot_ms\",\"min\":12.372558590439038,\"max\":12.372558590439038,\"mean\":12.372558590439038,\"latest\":12.372558590439038,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_tpot_ms\",\"min\":12.560804351902105,\"max\":12.560804351902105,\"mean\":12.560804351902105,\"latest\":12.560804351902105,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_input_tokens\",\"min\":2048,\"max\":2048,\"mean\":2048,\"latest\":2048,\"count\":1,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///2433/71350/artifacts\",\"name\":\"A100-Qwen2.5-Coder-7B\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"enable_chunked_prefill\",\"value\":\"True\"},{\"key\":\"enable_prefix_caching\",\"value\":\"False\"},{\"key\":\"gpu_memory_utilization\",\"value\":\"0.95\"},{\"key\":\"gpu_type\",\"value\":\"A100\"},{\"key\":\"model\",\"value\":\"Qwen/Qwen2.5-Coder-7B\"},{\"key\":\"model.basename\",\"value\":\"Qwen2.5-Coder-7B\"},{\"key\":\"service_name\",\"value\":\"qwen2-5-coder-7b-bench-py78\"},{\"key\":\"tensor_parallel_size\",\"value\":\"1\"},{\"key\":\"vllm.image\",\"value\":\"727006795293.dkr.ecr.us-east-1.amazonaws.com/dd-source/domains/data_science/llm/apps/ray-llm-service:vllm-bleeding-edge-nydus\"}],\"project_id\":2433,\"started_at\":\"2026-05-18T14:35:55.625Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"leaderboard\",\"value\":\"true\"}],\"updated_at\":\"2026-05-18T14:36:00.339161Z\"}},{\"id\":\"71349\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T14:35:50.654902Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/56ad4005ff9e40d1a0e106d5b60130c6\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"system/duration\",\"min\":2.3674380170414224,\"max\":2.3674380170414224,\"mean\":2.3674380170414224,\"latest\":2.3674380170414224,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_itl_ms\",\"min\":14.932849314997535,\"max\":14.932849314997535,\"mean\":14.932849314997535,\"latest\":14.932849314997535,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_tpot_ms\",\"min\":15.084737073538427,\"max\":15.084737073538427,\"mean\":15.084737073538427,\"latest\":15.084737073538427,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_e2el_ms\",\"min\":2337.1160394744948,\"max\":2337.1160394744948,\"mean\":2337.1160394744948,\"latest\":2337.1160394744948,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_tpot_ms\",\"min\":14.985868310845479,\"max\":14.985868310845479,\"mean\":14.985868310845479,\"latest\":14.985868310845479,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/output_throughput\",\"min\":324.40131250395586,\"max\":324.40131250395586,\"mean\":324.40131250395586,\"latest\":324.40131250395586,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_itl_ms\",\"min\":44.13257779670086,\"max\":44.13257779670086,\"mean\":44.13257779670086,\"latest\":44.13257779670086,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_usd_decode\",\"min\":0.08031,\"max\":0.08031,\"mean\":0.08031,\"latest\":0.08031,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completion_rate\",\"min\":0.6,\"max\":0.6,\"mean\":0.6,\"latest\":0.6,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_ttft_ms\",\"min\":418.6328283588712,\"max\":418.6328283588712,\"mean\":418.6328283588712,\"latest\":418.6328283588712,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/request_throughput\",\"min\":2.534385253937155,\"max\":2.534385253937155,\"mean\":2.534385253937155,\"latest\":2.534385253937155,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_output_tokens\",\"min\":768,\"max\":768,\"mean\":768,\"latest\":768,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_token_throughput\",\"min\":2919.6118125356024,\"max\":2919.6118125356024,\"mean\":2919.6118125356024,\"latest\":2919.6118125356024,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/output_cost_per_mtok\",\"min\":0.3921,\"max\":0.3921,\"mean\":0.3921,\"latest\":0.3921,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/completed\",\"min\":6,\"max\":6,\"mean\":6,\"latest\":6,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_e2el_ms\",\"min\":2351.7342927632853,\"max\":2351.7342927632853,\"mean\":2351.7342927632853,\"latest\":2351.7342927632853,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_tpot_ms\",\"min\":15.822381030412492,\"max\":15.822381030412492,\"mean\":15.822381030412492,\"latest\":15.822381030412492,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_usd_prefill\",\"min\":0.112268,\"max\":0.112268,\"mean\":0.112268,\"latest\":0.112268,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/input_cost_per_mtok\",\"min\":0.0343,\"max\":0.0343,\"mean\":0.0343,\"latest\":0.0343,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/mean_e2el_ms\",\"min\":2334.394436698252,\"max\":2334.394436698252,\"mean\":2334.394436698252,\"latest\":2334.394436698252,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_itl_ms\",\"min\":14.451904979068786,\"max\":14.451904979068786,\"mean\":14.451904979068786,\"latest\":14.451904979068786,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/median_ttft_ms\",\"min\":433.9107639971189,\"max\":433.9107639971189,\"mean\":433.9107639971189,\"latest\":433.9107639971189,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/num_prompts\",\"min\":10,\"max\":10,\"mean\":10,\"latest\":10,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/p99_ttft_ms\",\"min\":513.0678390269168,\"max\":513.0678390269168,\"mean\":513.0678390269168,\"latest\":513.0678390269168,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"system/total_input_tokens\",\"min\":6144,\"max\":6144,\"mean\":6144,\"latest\":6144,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"cost/gpu_cost_per_hour\",\"min\":1.35,\"max\":1.35,\"mean\":1.35,\"latest\":1.35,\"count\":1,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///2432/71349/artifacts\",\"name\":\"A100-Qwen3-8B\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"enable_chunked_prefill\",\"value\":\"True\"},{\"key\":\"enable_prefix_caching\",\"value\":\"False\"},{\"key\":\"gpu_memory_utilization\",\"value\":\"0.95\"},{\"key\":\"gpu_type\",\"value\":\"A100\"},{\"key\":\"model\",\"value\":\"Qwen/Qwen3-8B\"},{\"key\":\"model.basename\",\"value\":\"Qwen3-8B\"},{\"key\":\"service_name\",\"value\":\"qwen3-8b-bench-n3rw\"},{\"key\":\"tensor_parallel_size\",\"value\":\"1\"},{\"key\":\"vllm.image\",\"value\":\"727006795293.dkr.ecr.us-east-1.amazonaws.com/dd-source/domains/data_science/llm/apps/ray-llm-service:vllm-bleeding-edge-nydus\"}],\"project_id\":2432,\"started_at\":\"2026-05-18T14:35:50.433Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"leaderboard\",\"value\":\"true\"}],\"updated_at\":\"2026-05-18T14:35:55.408334Z\"}},{\"id\":\"71348\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T11:11:41.612Z\",\"created_at\":\"2026-05-18T11:11:40.928813Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":0.794,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/202b5372db464aa28c3ddcca74cb7432\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///1017/71348/artifacts\",\"name\":\"user_service_ranker_2026-05-17\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"early_stopping_rounds\",\"value\":\"20\"},{\"key\":\"features\",\"value\":\"['similarity_score', 'nb_page_views', 'nb_days_with_page_view', 'nb_views_since_last_page_view', 'nb_explorer_searches', 'nb_days_with_explorer_search', 'nb_searches_since_last_explorer_search', 'nb_cmdk_searches', 'nb_days_with_cmdk_search', 'nb_searches_since_last_cmdk_search', 'is_faves', 'similarity_score_rank', 'nb_page_views_rank', 'nb_days_with_page_view_rank', 'nb_views_since_last_page_view_rank', 'nb_explorer_searches_rank', 'nb_days_with_explorer_search_rank', 'nb_searches_since_last_explorer_search_rank', 'nb_cmdk_searches_rank', 'nb_days_with_cmdk_search_rank', 'nb_searches_since_last_cmdk_search_rank']\"},{\"key\":\"learning_rate\",\"value\":\"0.2\"},{\"key\":\"max_depth\",\"value\":\"3\"},{\"key\":\"metric\",\"value\":\"ndcg\"},{\"key\":\"min_child_samples\",\"value\":\"20\"},{\"key\":\"n_estimators\",\"value\":\"500\"},{\"key\":\"n_groups_train\",\"value\":\"242\"},{\"key\":\"n_groups_val\",\"value\":\"27\"},{\"key\":\"num_leaves\",\"value\":\"8\"},{\"key\":\"num_samples\",\"value\":\"23883\"},{\"key\":\"objective\",\"value\":\"lambdarank\"},{\"key\":\"random_state\",\"value\":\"42\"},{\"key\":\"reg_alpha\",\"value\":\"0.0\"},{\"key\":\"reg_lambda\",\"value\":\"0.0\"}],\"project_id\":1017,\"started_at\":\"2026-05-18T11:11:40.818Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"mlflow.runName\",\"value\":\"user_service_ranker_2026-05-17\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"}],\"updated_at\":\"2026-05-18T11:11:41.758491Z\"}},{\"id\":\"71347\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T09:53:57.946125Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/a35df0b9b9b84b35a2e88ac087379036\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///1742/71347/artifacts\",\"name\":\"QWEN3.5-9B\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"benchmark_type\",\"value\":\"system\"},{\"key\":\"gpu_type\",\"value\":\"A100\"},{\"key\":\"model\",\"value\":\"QWEN/QWEN3.5-9B\"}],\"project_id\":1742,\"started_at\":\"2026-05-18T09:53:57.706Z\",\"status\":\"running\",\"tags\":[{\"key\":\"experiment_name\",\"value\":\"qwen3-5-9b-exp\"}],\"updated_at\":\"2026-05-18T09:53:57.959737Z\"}},{\"id\":\"71346\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T09:53:42.9892Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/80746aeb3147419f90ded5fc615a80aa\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///1742/71346/artifacts\",\"name\":\"nonexistent-model-xyz\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"benchmark_type\",\"value\":\"system\"},{\"key\":\"gpu_type\",\"value\":\"L4\"},{\"key\":\"model\",\"value\":\"FakeOrg/nonexistent-model-xyz\"}],\"project_id\":1742,\"started_at\":\"2026-05-18T09:53:42.738Z\",\"status\":\"running\",\"tags\":[],\"updated_at\":\"2026-05-18T09:53:43.000724Z\"}},{\"id\":\"71345\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T08:45:15.968Z\",\"created_at\":\"2026-05-18T08:45:07.586505Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":8.752,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/203405f363da49529372474f59453dcd\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"gold_accuracy\",\"min\":0.8941176470588236,\"max\":0.8941176470588236,\"mean\":0.8941176470588236,\"latest\":0.8941176470588236,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"gold_recall\",\"min\":0.5,\"max\":0.5,\"mean\":0.5,\"latest\":0.5,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"gold_tn\",\"min\":74,\"max\":74,\"mean\":74,\"latest\":74,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"snorkel_fn\",\"min\":238,\"max\":238,\"mean\":238,\"latest\":238,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"snorkel_fp\",\"min\":5,\"max\":5,\"mean\":5,\"latest\":5,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"sweep_gold_fp\",\"min\":0,\"max\":81,\"mean\":16.235294117647058,\"latest\":18,\"count\":17,\"first_step\":0,\"last_step\":86},{\"key\":\"sweep_snorkel_tp\",\"min\":115,\"max\":828,\"mean\":549.4,\"latest\":828,\"count\":15,\"first_step\":0,\"last_step\":99},{\"key\":\"gold_f1_score\",\"min\":0.3076923076923077,\"max\":0.3076923076923077,\"mean\":0.3076923076923077,\"latest\":0.3076923076923077,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"gold_roc_auc\",\"min\":0.95679012345679,\"max\":0.95679012345679,\"mean\":0.95679012345679,\"latest\":0.95679012345679,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"snorkel_accuracy\",\"min\":0.942376096751245,\"max\":0.942376096751245,\"mean\":0.942376096751245,\"latest\":0.942376096751245,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"snorkel_tp\",\"min\":590,\"max\":590,\"mean\":590,\"latest\":590,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"sweep_snorkel_fn\",\"min\":0,\"max\":713,\"mean\":278.6,\"latest\":30,\"count\":15,\"first_step\":0,\"last_step\":99},{\"key\":\"gold_precision\",\"min\":0.2222222222222222,\"max\":0.2222222222222222,\"mean\":0.2222222222222222,\"latest\":0.2222222222222222,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"gold_tp\",\"min\":2,\"max\":2,\"mean\":2,\"latest\":2,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"sweep_gold_f1_score\",\"min\":0.0898876404494382,\"max\":0.6666666666666666,\"mean\":0.35542231104842736,\"latest\":0.30769230769230765,\"count\":17,\"first_step\":0,\"last_step\":86},{\"key\":\"sweep_snorkel_precision\",\"min\":0.1963481147735357,\"max\":1,\"mean\":0.8833905951822458,\"latest\":0.9978401727861771,\"count\":15,\"first_step\":0,\"last_step\":99},{\"key\":\"sweep_snorkel_fp\",\"min\":0,\"max\":3389,\"mean\":290.8,\"latest\":6,\"count\":15,\"first_step\":0,\"last_step\":99},{\"key\":\"snorkel_precision\",\"min\":0.9915966386554622,\"max\":0.9915966386554622,\"mean\":0.9915966386554622,\"latest\":0.9915966386554622,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"snorkel_roc_auc\",\"min\":0.9928354095304073,\"max\":0.9928354095304073,\"mean\":0.9928354095304073,\"latest\":0.9928354095304073,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"sweep_snorkel_recall\",\"min\":0.1388888888888889,\"max\":1,\"mean\":0.6635265700483092,\"latest\":0.2572463768115942,\"count\":15,\"first_step\":0,\"last_step\":99},{\"key\":\"gold_fp\",\"min\":7,\"max\":7,\"mean\":7,\"latest\":7,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"sweep_gold_recall\",\"min\":0.25,\"max\":1,\"mean\":0.8088235294117647,\"latest\":0.5,\"count\":17,\"first_step\":0,\"last_step\":86},{\"key\":\"sweep_gold_tn\",\"min\":0,\"max\":81,\"mean\":64.76470588235294,\"latest\":63,\"count\":17,\"first_step\":0,\"last_step\":86},{\"key\":\"sweep_snorkel_f1_score\",\"min\":0.24390243902439027,\"max\":0.9226044226044227,\"mean\":0.6706883729826749,\"latest\":0.9226044226044227,\"count\":15,\"first_step\":0,\"last_step\":99},{\"key\":\"snorkel_tn\",\"min\":3384,\"max\":3384,\"mean\":3384,\"latest\":3384,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"sweep_gold_fn\",\"min\":0,\"max\":3,\"mean\":0.7647058823529411,\"latest\":0,\"count\":17,\"first_step\":0,\"last_step\":86},{\"key\":\"sweep_gold_precision\",\"min\":0.047058823529411764,\"max\":1,\"mean\":0.3126587632153479,\"latest\":0.21052631578947367,\"count\":17,\"first_step\":0,\"last_step\":86},{\"key\":\"sweep_gold_tp\",\"min\":1,\"max\":4,\"mean\":3.235294117647059,\"latest\":2,\"count\":17,\"first_step\":0,\"last_step\":86},{\"key\":\"sweep_snorkel_tn\",\"min\":0,\"max\":3389,\"mean\":3098.2,\"latest\":3389,\"count\":15,\"first_step\":0,\"last_step\":99},{\"key\":\"gold_fn\",\"min\":2,\"max\":2,\"mean\":2,\"latest\":2,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"snorkel_f1_score\",\"min\":0.8292340126493324,\"max\":0.8292340126493324,\"mean\":0.8292340126493324,\"latest\":0.8292340126493324,\"count\":1,\"first_step\":0,\"last_step\":0},{\"key\":\"snorkel_recall\",\"min\":0.7125603864734299,\"max\":0.7125603864734299,\"mean\":0.7125603864734299,\"latest\":0.7125603864734299,\"count\":1,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///488/71345/artifacts\",\"name\":\"\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"is_unbalance\",\"value\":\"True\"},{\"key\":\"learning_rate\",\"value\":\"0.02\"},{\"key\":\"min_data_in_leaf\",\"value\":\"100\"},{\"key\":\"n_estimators\",\"value\":\"600\"},{\"key\":\"n_gold_samples\",\"value\":\"85\"},{\"key\":\"n_jobs\",\"value\":\"1\"},{\"key\":\"n_orgs\",\"value\":\"1\"},{\"key\":\"n_snorkel_samples\",\"value\":\"4217\"},{\"key\":\"n_training_samples\",\"value\":\"229660\"},{\"key\":\"num_leaves\",\"value\":\"31\"},{\"key\":\"org_ids\",\"value\":\"[2]\"},{\"key\":\"random_state\",\"value\":\"42\"},{\"key\":\"run_date\",\"value\":\"2026-05-17\"},{\"key\":\"testing_window_days\",\"value\":\"7\"},{\"key\":\"tfidf_lowercase\",\"value\":\"False\"},{\"key\":\"tfidf_max_df\",\"value\":\"0.95\"},{\"key\":\"tfidf_max_features\",\"value\":\"30000\"},{\"key\":\"tfidf_min_df\",\"value\":\"5\"},{\"key\":\"tfidf_ngram_range\",\"value\":\"(1, 2)\"},{\"key\":\"train_optimal_f1_threshold\",\"value\":\"0.4115\"},{\"key\":\"training_window_days\",\"value\":\"91\"},{\"key\":\"verbosity\",\"value\":\"-1\"},{\"key\":\"version\",\"value\":\"1\"}],\"project_id\":488,\"started_at\":\"2026-05-18T08:45:07.216Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"n_orgs\",\"value\":\"1\"},{\"key\":\"version\",\"value\":\"1\"}],\"updated_at\":\"2026-05-18T08:45:16.3591Z\"}},{\"id\":\"71344\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T05:03:26.966Z\",\"created_at\":\"2026-05-18T05:01:59.834451Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":87.237,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/2b10271e3e1546359da360a651c17bfa\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"accuracy\",\"min\":1,\"max\":1,\"mean\":1,\"latest\":0,\"count\":2,\"first_step\":0,\"last_step\":0},{\"key\":\"precision\",\"min\":1,\"max\":1,\"mean\":1,\"latest\":0,\"count\":2,\"first_step\":0,\"last_step\":0},{\"key\":\"recall\",\"min\":1,\"max\":1,\"mean\":1,\"latest\":0,\"count\":2,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///487/71344/artifacts\",\"name\":\"mortar_train_test_alias_loading_partitioned_model\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"max_depth\",\"value\":\"30\"},{\"key\":\"min_samples_leaf\",\"value\":\"5\"},{\"key\":\"min_samples_split\",\"value\":\"10\"},{\"key\":\"n_estimators\",\"value\":\"100\"}],\"project_id\":487,\"started_at\":\"2026-05-18T05:01:59.729Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"mortar_train_test_alias_loading_partitioned_model\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"train_end\",\"value\":\"2026-05-18\"},{\"key\":\"train_start\",\"value\":\"2026-05-17\"}],\"updated_at\":\"2026-05-18T05:03:27.148977Z\"}},{\"id\":\"71343\",\"type\":\"runs\",\"attributes\":{\"created_at\":\"2026-05-18T04:04:13.985851Z\",\"descendant_match\":false,\"description\":\"\",\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/d1a9b44a39c54a34a35b956ce3469328\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"accuracy\",\"min\":0.9,\"max\":0.9,\"mean\":0.9,\"latest\":0.9,\"count\":2,\"first_step\":0,\"last_step\":0},{\"key\":\"precision\",\"min\":0.9074074074074074,\"max\":0.9074074074074074,\"mean\":0.9074074074074074,\"latest\":0.9074074074074074,\"count\":2,\"first_step\":0,\"last_step\":0},{\"key\":\"recall\",\"min\":0.903030303030303,\"max\":0.903030303030303,\"mean\":0.903030303030303,\"latest\":0.903030303030303,\"count\":2,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///486/71343/artifacts\",\"name\":\"mortar_train_test_alias_loading_global_model\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"max_depth\",\"value\":\"30\"},{\"key\":\"min_samples_leaf\",\"value\":\"5\"},{\"key\":\"min_samples_split\",\"value\":\"10\"},{\"key\":\"n_estimators\",\"value\":\"100\"}],\"project_id\":486,\"started_at\":\"2026-05-18T04:04:13.883Z\",\"status\":\"running\",\"tags\":[{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"mortar_train_test_alias_loading_global_model\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"train_end\",\"value\":\"2026-05-18\"},{\"key\":\"train_start\",\"value\":\"2026-05-17\"}],\"updated_at\":\"2026-05-18T04:04:14.000273Z\"}},{\"id\":\"71342\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T03:01:58.035Z\",\"created_at\":\"2026-05-18T03:01:30.842651Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":27.296,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/6b22a5d0a54842ba9387d88316893fc9\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"accuracy\",\"min\":0.9,\"max\":0.9666666666666667,\"mean\":0.9438095238095238,\"latest\":0.9666666666666667,\"count\":35,\"first_step\":0,\"last_step\":0},{\"key\":\"precision\",\"min\":0.8783068783068783,\"max\":0.9777777777777779,\"mean\":0.9454438947296091,\"latest\":0.9666666666666667,\"count\":35,\"first_step\":0,\"last_step\":0},{\"key\":\"recall\",\"min\":0.875,\"max\":0.9743589743589745,\"mean\":0.941554873697731,\"latest\":0.9722222222222222,\"count\":35,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///484/71342/artifacts\",\"name\":\"mortar_train_smoke_testing_partitioned_model\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"max_depth\",\"value\":\"30\"},{\"key\":\"min_samples_leaf\",\"value\":\"5\"},{\"key\":\"min_samples_split\",\"value\":\"10\"}],\"project_id\":484,\"started_at\":\"2026-05-18T03:01:30.739Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"mortar_train_smoke_testing_partitioned_model\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"train_end\",\"value\":\"2026-05-18\"},{\"key\":\"train_start\",\"value\":\"2026-05-17\"}],\"updated_at\":\"2026-05-18T03:01:58.176408Z\"}},{\"id\":\"71341\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T02:12:00.018Z\",\"created_at\":\"2026-05-18T02:11:33.56821Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":26.55,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/f6921c2bc1014234b624d3f0c6e2f83e\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71341/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T02:11:33.468Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"amazonaws-es-us-east-1\"}],\"updated_at\":\"2026-05-18T02:12:00.166487Z\"}},{\"id\":\"71340\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T02:11:52.421Z\",\"created_at\":\"2026-05-18T02:11:29.581542Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":22.934,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/74f4aad59e4f4e66a726afc5db0436e1\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71340/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T02:11:29.487Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"amazonaws-dynamodb-mx-central-1\"}],\"updated_at\":\"2026-05-18T02:11:52.554536Z\"}},{\"id\":\"71339\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T02:11:38.852Z\",\"created_at\":\"2026-05-18T02:11:17.924126Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":21.044,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/fa21144e452d4c6eb1c2ff6bff2dbb57\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71339/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T02:11:17.808Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"pagerduty\"}],\"updated_at\":\"2026-05-18T02:11:39.012518Z\"}},{\"id\":\"71338\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T02:01:48.717Z\",\"created_at\":\"2026-05-18T02:01:44.062453Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":4.748,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/fcf4e0cad9f948dfb6d53eb34e3660be\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[{\"key\":\"accuracy\",\"min\":1,\"max\":1,\"mean\":1,\"latest\":0,\"count\":2,\"first_step\":0,\"last_step\":0},{\"key\":\"precision\",\"min\":1,\"max\":1,\"mean\":1,\"latest\":0,\"count\":2,\"first_step\":0,\"last_step\":0},{\"key\":\"recall\",\"min\":1,\"max\":1,\"mean\":1,\"latest\":0,\"count\":2,\"first_step\":0,\"last_step\":0}],\"mlflow_artifact_location\":\"mlflow-artifacts:///484/71338/artifacts\",\"name\":\"mortar_train_smoke_testing_global_model\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":[{\"key\":\"max_depth\",\"value\":\"30\"},{\"key\":\"min_samples_leaf\",\"value\":\"5\"},{\"key\":\"min_samples_split\",\"value\":\"10\"},{\"key\":\"n_estimators\",\"value\":\"100\"}],\"project_id\":484,\"started_at\":\"2026-05-18T02:01:43.969Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"mortar_train_smoke_testing_global_model\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"train_end\",\"value\":\"2026-05-18\"},{\"key\":\"train_start\",\"value\":\"2026-05-17\"}],\"updated_at\":\"2026-05-18T02:01:48.856663Z\"}},{\"id\":\"71331\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T01:56:03.441Z\",\"created_at\":\"2026-05-18T01:52:30.49774Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":213.718,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/48c65b0e43c049bea60fe45dfa2dca30\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71331/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T01:52:29.723Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"amazonaws-monitoring-ca-west-1\"}],\"updated_at\":\"2026-05-18T01:56:03.578642Z\"}},{\"id\":\"71317\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T01:55:56.61Z\",\"created_at\":\"2026-05-18T01:50:27.663599Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":329.076,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/3cf809f7034f49f8a45b678ae5b3c55f\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71317/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T01:50:27.534Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"amazonaws-monitoring-mx-central-1\"}],\"updated_at\":\"2026-05-18T01:55:56.756604Z\"}},{\"id\":\"71336\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T01:54:59.996Z\",\"created_at\":\"2026-05-18T01:52:55.451932Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":124.633,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/bc30dc20a00d4147832435bb46dbb533\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71336/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T01:52:55.363Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"amazonaws-firehose-me-central-1\"}],\"updated_at\":\"2026-05-18T01:55:00.139099Z\"}},{\"id\":\"71337\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T01:54:52.337Z\",\"created_at\":\"2026-05-18T01:53:28.702892Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":83.73,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/f38436eab3554414a3125a8299273caf\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71337/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T01:53:28.607Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"amazonaws-firehose-eu-west-3\"}],\"updated_at\":\"2026-05-18T01:54:52.600823Z\"}},{\"id\":\"71326\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T01:54:45.204Z\",\"created_at\":\"2026-05-18T01:51:44.604428Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":180.692,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/eb0fe4f0cbe047308dbe33b61f4b9847\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71326/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T01:51:44.512Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"amazonaws-monitoring-ap-south-1\"}],\"updated_at\":\"2026-05-18T01:54:45.379615Z\"}},{\"id\":\"71332\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T01:54:38.347Z\",\"created_at\":\"2026-05-18T01:52:32.3427Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":126.115,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/cafb02ded7914103aa4fd260626f3fff\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71332/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T01:52:32.232Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"amazonaws-kinesis-ap-southeast-3\"}],\"updated_at\":\"2026-05-18T01:54:38.494039Z\"}},{\"id\":\"71335\",\"type\":\"runs\",\"attributes\":{\"completed_at\":\"2026-05-18T01:54:31.613Z\",\"created_at\":\"2026-05-18T01:52:49.441594Z\",\"descendant_match\":false,\"description\":\"\",\"duration\":102.264,\"external_url\":\"https://mlflow.us1.staging.dog/#/runs/eaefc5caf34c45f7bc93448eb0ee2d33\",\"has_children\":false,\"is_pinned\":false,\"metric_summaries\":[],\"mlflow_artifact_location\":\"mlflow-artifacts:///482/71335/artifacts\",\"name\":\"vanilla\",\"owner_id\":\"1d45ac49-1e4e-11f1-8c3a-42221ed6388d\",\"params\":null,\"project_id\":482,\"started_at\":\"2026-05-18T01:52:49.349Z\",\"status\":\"completed\",\"tags\":[{\"key\":\"code_source\",\"value\":\"dd-analytics\"},{\"key\":\"datacenter\",\"value\":\"us1.staging.dog\"},{\"key\":\"mlflow.runName\",\"value\":\"vanilla\"},{\"key\":\"mlflow.source.name\",\"value\":\"bootstrap_job.py\"},{\"key\":\"mlflow.source.type\",\"value\":\"LOCAL\"},{\"key\":\"mlflow.user\",\"value\":\"dog\"},{\"key\":\"model_type\",\"value\":\"bayesian_model_with_baseline\"},{\"key\":\"third_party_provider_service_region\",\"value\":\"amazonaws-monitoring-us-gov-east-1\"}],\"updated_at\":\"2026-05-18T01:54:31.752756Z\"}}],\"meta\":{\"page\":{\"type\":\"number_size\",\"number\":0,\"size\":25,\"total\":65614,\"first_number\":0,\"prev_number\":null,\"next_number\":1,\"last_number\":2624}},\"links\":{\"self\":\"https://api.datad0g.com/api/v2/model-lab-api/runs\",\"first\":\"https://api.datad0g.com/api/v2/model-lab-api/runs?page[number]=0&page[size]=25\",\"last\":\"https://api.datad0g.com/api/v2/model-lab-api/runs?page[number]=2624&page[size]=25\",\"next\":\"https://api.datad0g.com/api/v2/model-lab-api/runs?page[number]=1&page[size]=25\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Model Lab runs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/model-lab-api/runs/70158/pin", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/model-lab-api/runs/70158/pin", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Pin a Model Lab run returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/model-lab-api/runs/999999/pin", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"run not found\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Pin a Model Lab run returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/model-lab-api/projects/2387/star", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/model-lab-api/projects/2387/star", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Star a Model Lab project returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/model-lab-api/projects/999999/star", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"project not found\"}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Star a Model Lab project returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/model-lab-api/runs/70158/pin", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Unpin a Model Lab run returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Model Lab API", + "frozen_at": "2026-05-18T16:45:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/model-lab-api/projects/2387/star", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Unstar a Model Lab project returns \"No Content\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/monitors.json b/test-server-data/v2/monitors.json new file mode 100644 index 0000000000..9d254376c1 --- /dev/null +++ b/test-server-data/v2/monitors.json @@ -0,0 +1,3020 @@ +{ + "feature": "Monitors", + "recordings": [ + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:15.011Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "datacenter", + "tag_key_required": true, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "INVALID" + }, + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Value of parameter 'policy_type' should be any of these ['tag']\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a monitor configuration policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:15.129Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "testcreateamonitorconfigurationpolicyreturnsokresponse1748486175", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy_type\":\"tag\",\"policy\":{\"tag_key_required\":false,\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key\":\"testcreateamonitorconfigurationpolicyreturnsokresponse1748486175\"}},\"id\":\"edb99130-4a6a-4970-b6df-83b5cba1182a\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/policy/edb99130-4a6a-4970-b6df-83b5cba1182a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a monitor configuration policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:15.400Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:test-create_a_monitor_notification_rule_returns_bad_request_response-1748486175", + "host:abc" + ] + }, + "name": "test rule", + "recipients": [ + "@slack-test-channel", + "@jira-test" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid recipients: Recipient handle should not start with '@'\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a monitor notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:15.486Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:test-create_a_monitor_notification_rule_returns_ok_response-1748486175" + ] + }, + "name": "test rule", + "recipients": [ + "slack-test-channel", + "jira-test" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"created_at\":\"2025-05-29T02:36:15.639714+00:00\",\"filter\":{\"tags\":[\"test:test-create_a_monitor_notification_rule_returns_ok_response-1748486175\"]},\"recipients\":[\"slack-test-channel\",\"jira-test\"],\"modified_at\":\"1970-01-01T00:00:00+00:00\",\"name\":\"test rule\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"5dca07c7-267c-4159-9d8f-7dec1512fb77\"},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2025-05-06T01:37:11.870914+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/5dca07c7-267c-4159-9d8f-7dec1512fb77", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a monitor notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-09-26T01:50:59.027Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "conditional_recipients": { + "conditions": [ + { + "recipients": [ + "slack-test-channel", + "jira-test" + ], + "scope": "transition_type:is_alert" + } + ] + }, + "filter": { + "tags": [ + "test:test-create_a_monitor_notification_rule_with_conditional_recipients_returns_ok_response-1758851459" + ] + }, + "name": "test rule" + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"name\":\"test rule\",\"filter\":{\"tags\":[\"test:test-create_a_monitor_notification_rule_with_conditional_recipients_returns_ok_response-1758851459\"]},\"created_at\":\"2025-09-26T01:51:00.132009+00:00\",\"conditional_recipients\":{\"conditions\":[{\"recipients\":[\"slack-test-channel\",\"jira-test\"],\"scope\":\"transition_type:is_alert\"}]},\"modified_at\":\"1970-01-01T00:00:00+00:00\"},\"id\":\"707b82d7-6898-4b20-a577-64f76881fe89\",\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2020-12-29T22:58:44.733921+00:00\",\"modified_at\":\"2021-04-27T13:54:01.547888+00:00\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/707b82d7-6898-4b20-a577-64f76881fe89", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a monitor notification rule with conditional recipients returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-11-11T21:28:39.129Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "scope": "test:test-create_a_monitor_notification_rule_with_scope_returns_ok_response-1762896519" + }, + "name": "test rule", + "recipients": [ + "slack-test-channel", + "jira-test" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"modified_at\":\"1970-01-01T00:00:00+00:00\",\"filter\":{\"scope\":\"test:test-create_a_monitor_notification_rule_with_scope_returns_ok_response-1762896519\"},\"name\":\"test rule\",\"recipients\":[\"slack-test-channel\",\"jira-test\"],\"created_at\":\"2025-11-11T21:28:40.032148+00:00\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}},\"id\":\"bbea2907-c191-48d0-9e0f-1ec5881ee37c\"},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2020-12-29T22:58:44.733921+00:00\",\"modified_at\":\"2021-04-27T13:54:01.547888+00:00\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\",\"last_login_time\":null}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/bbea2907-c191-48d0-9e0f-1ec5881ee37c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a monitor notification rule with scope returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:15.918Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": {}, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-create_a_monitor_user_template_returns_bad_request_response-1748486175" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid monitor_definition or template variables: Monitor definition cannot be empty.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a monitor user template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:16.048Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name test-create_a_monitor_user_template_returns_ok_response-1748486176", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-create_a_monitor_user_template_returns_ok_response-1748486176" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-user-template\",\"attributes\":{\"modified\":\"2025-05-29T02:36:16.272266+00:00\",\"tags\":[\"integration:Azure\"],\"monitor_definition\":{\"message\":\"A msg.\",\"name\":\"A name test-create_a_monitor_user_template_returns_ok_response-1748486176\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"type\":\"query alert\"},\"template_variables\":[{\"available_values\":[\"value1\",\"value2\"],\"defaults\":[\"defaultValue\"],\"tag_key\":\"datacenter\",\"name\":\"regionName\"}],\"description\":\"A description.\",\"version\":0,\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2025-05-29T02:36:16.272266+00:00\",\"title\":\"Postgres DB test-create_a_monitor_user_template_returns_ok_response-1748486176\"},\"id\":\"15c66feb-f77d-407b-bf4c-615d3dc4fa50\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/template/15c66feb-f77d-407b-bf4c-615d3dc4fa50", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a monitor user template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:16.452Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/policy/INVALID_UUID", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid URL param: policy_id must be an uuid\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete a monitor configuration policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:16.549Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/policy/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor config policy not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a monitor configuration policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:16.671Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "testdeleteamonitorconfigurationpolicyreturnsokresponse1748486176", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy_type\":\"tag\",\"policy\":{\"tag_key\":\"testdeleteamonitorconfigurationpolicyreturnsokresponse1748486176\",\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key_required\":false}},\"id\":\"f0b1ee92-9635-45ed-8a18-a1631a8397d2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/policy/f0b1ee92-9635-45ed-8a18-a1631a8397d2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/policy/f0b1ee92-9635-45ed-8a18-a1631a8397d2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor config policy not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a monitor configuration policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:17.047Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor Notification Rule not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a monitor notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:17.179Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "app:test-delete_a_monitor_notification_rule_returns_ok_response-1748486177" + ] + }, + "name": "test rule", + "recipients": [ + "slack-monitor-app" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"created_at\":\"2025-05-29T02:36:17.310680+00:00\",\"filter\":{\"tags\":[\"app:test-delete_a_monitor_notification_rule_returns_ok_response-1748486177\"]},\"modified_at\":\"1970-01-01T00:00:00+00:00\",\"recipients\":[\"slack-monitor-app\"],\"name\":\"test rule\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"ae73c449-eadb-40ce-9eb3-9d56d8216254\"},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2025-05-06T01:37:11.870914+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/ae73c449-eadb-40ce-9eb3-9d56d8216254", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/ae73c449-eadb-40ce-9eb3-9d56d8216254", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor Notification Rule not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a monitor notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:17.713Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/template/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor template not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a monitor user template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:17.896Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "datacenter", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/monitor/policy/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor configuration policy not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Edit a monitor configuration policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:18.010Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "testeditamonitorconfigurationpolicyreturnsokresponse1748486178", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy\":{\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key\":\"testeditamonitorconfigurationpolicyreturnsokresponse1748486178\",\"tag_key_required\":false},\"policy_type\":\"tag\"},\"id\":\"b967c47e-8f9b-49f5-bdff-744b4d50b26f\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "testeditamonitorconfigurationpolicyreturnsokresponse1748486178", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "id": "b967c47e-8f9b-49f5-bdff-744b4d50b26f", + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/monitor/policy/b967c47e-8f9b-49f5-bdff-744b4d50b26f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy_type\":\"tag\",\"policy\":{\"tag_key\":\"testeditamonitorconfigurationpolicyreturnsokresponse1748486178\",\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key_required\":false}},\"id\":\"b967c47e-8f9b-49f5-bdff-744b4d50b26f\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/policy/b967c47e-8f9b-49f5-bdff-744b4d50b26f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Edit a monitor configuration policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:18.429Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "testeditamonitorconfigurationpolicyreturnsunprocessableentityresponse1748486178", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy\":{\"tag_key\":\"testeditamonitorconfigurationpolicyreturnsunprocessableentityresponse1748486178\",\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key_required\":false},\"policy_type\":\"tag\"},\"id\":\"f2f83512-b2c2-4dc4-a8db-c785cd818d6f\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "testeditamonitorconfigurationpolicyreturnsunprocessableentityresponse1748486178", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/monitor/policy/f2f83512-b2c2-4dc4-a8db-c785cd818d6f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Policy id in request body does not match id in URL param\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/policy/f2f83512-b2c2-4dc4-a8db-c785cd818d6f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Edit a monitor configuration policy returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:18.835Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/policy/12340000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor configuration policy not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a monitor configuration policy returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:18.939Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "testgetamonitorconfigurationpolicyreturnsokresponse1748486178", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy\":{\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key_required\":false,\"tag_key\":\"testgetamonitorconfigurationpolicyreturnsokresponse1748486178\"},\"policy_type\":\"tag\"},\"id\":\"7916e37f-b0fe-4f9d-bf9e-37ee3e7a5460\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/policy/7916e37f-b0fe-4f9d-bf9e-37ee3e7a5460", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy_type\":\"tag\",\"policy\":{\"tag_key_required\":false,\"tag_key\":\"testgetamonitorconfigurationpolicyreturnsokresponse1748486178\",\"valid_tag_values\":[\"prod\",\"staging\"]}},\"id\":\"7916e37f-b0fe-4f9d-bf9e-37ee3e7a5460\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/policy/7916e37f-b0fe-4f9d-bf9e-37ee3e7a5460", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a monitor configuration policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:19.291Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/notification_rule/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor Notification Rule not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a monitor notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:19.434Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "app:test-get_a_monitor_notification_rule_returns_ok_response-1748486179" + ] + }, + "name": "test rule", + "recipients": [ + "slack-monitor-app" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"id\":\"78f7ac92-7bba-4f1f-838f-a6fdc2a08778\",\"attributes\":{\"created_at\":\"2025-05-29T02:36:19.570654+00:00\",\"name\":\"test rule\",\"filter\":{\"tags\":[\"app:test-get_a_monitor_notification_rule_returns_ok_response-1748486179\"]},\"recipients\":[\"slack-monitor-app\"],\"modified_at\":\"1970-01-01T00:00:00+00:00\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2025-05-06T01:37:11.870914+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/notification_rule/78f7ac92-7bba-4f1f-838f-a6fdc2a08778", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"modified_at\":\"2025-05-29T02:36:19.582092+00:00\",\"created_at\":\"2025-05-29T02:36:19.570655+00:00\",\"recipients\":[\"slack-monitor-app\"],\"filter\":{\"tags\":[\"app:test-get_a_monitor_notification_rule_returns_ok_response-1748486179\"]},\"name\":\"test rule\"},\"id\":\"78f7ac92-7bba-4f1f-838f-a6fdc2a08778\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/78f7ac92-7bba-4f1f-838f-a6fdc2a08778", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a monitor notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:19.940Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/template/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor template not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a monitor user template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:20.064Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "It's a threshold", + "monitor_definition": { + "message": "cats", + "name": "High Error Rate on service", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "category:test" + ], + "template_variables": [ + { + "available_values": [], + "defaults": [ + "cats" + ], + "name": "scope" + } + ], + "title": "api spec given template test-get_a_monitor_user_template_returns_ok_response-1748486180" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-user-template\",\"attributes\":{\"tags\":[\"category:test\"],\"created\":\"2025-05-29T02:36:20.380109+00:00\",\"title\":\"api spec given template test-get_a_monitor_user_template_returns_ok_response-1748486180\",\"version\":0,\"description\":\"It's a threshold\",\"template_variables\":[{\"defaults\":[\"cats\"],\"available_values\":[],\"name\":\"scope\"}],\"monitor_definition\":{\"message\":\"cats\",\"name\":\"High Error Rate on service\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"type\":\"query alert\"},\"modified\":\"2025-05-29T02:36:20.380109+00:00\",\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"},\"id\":\"90eb2b79-fc96-43a5-af65-bf4408f47d9d\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/template/90eb2b79-fc96-43a5-af65-bf4408f47d9d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-user-template\",\"attributes\":{\"created\":\"2025-05-29T02:36:20.380109+00:00\",\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"version\":0,\"tags\":[\"category:test\"],\"title\":\"api spec given template test-get_a_monitor_user_template_returns_ok_response-1748486180\",\"modified\":\"2025-05-29T02:36:20.380109+00:00\",\"monitor_definition\":{\"name\":\"High Error Rate on service\",\"type\":\"query alert\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"message\":\"cats\"},\"description\":\"It's a threshold\",\"template_variables\":[{\"defaults\":[\"cats\"],\"name\":\"scope\",\"available_values\":[]}]},\"id\":\"90eb2b79-fc96-43a5-af65-bf4408f47d9d\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/template/90eb2b79-fc96-43a5-af65-bf4408f47d9d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a monitor user template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:20.663Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "policy": { + "tag_key": "testgetallmonitorconfigurationpoliciesreturnsokresponse1748486180", + "tag_key_required": false, + "valid_tag_values": [ + "prod", + "staging" + ] + }, + "policy_type": "tag" + }, + "type": "monitor-config-policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy\":{\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key\":\"testgetallmonitorconfigurationpoliciesreturnsokresponse1748486180\",\"tag_key_required\":false},\"policy_type\":\"tag\"},\"id\":\"426917ea-f9b0-4c7d-938d-902208db50f8\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/policy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy\":{\"valid_tag_values\":[\"value\"],\"tag_key\":\"tagKey\",\"tag_key_required\":false},\"policy_type\":\"tag\"},\"id\":\"2817dfb9-d616-4a75-8a6b-c34f20493b76\"},{\"type\":\"monitor-config-policy\",\"attributes\":{\"policy\":{\"valid_tag_values\":[\"prod\",\"staging\"],\"tag_key\":\"testgetallmonitorconfigurationpoliciesreturnsokresponse1748486180\",\"tag_key_required\":false},\"policy_type\":\"tag\"},\"id\":\"426917ea-f9b0-4c7d-938d-902208db50f8\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/policy/426917ea-f9b0-4c7d-938d-902208db50f8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all monitor configuration policies returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:21.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "app:test-get_all_monitor_notification_rules_returns_ok_response-1748486181" + ] + }, + "name": "test rule", + "recipients": [ + "slack-monitor-app" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"created_at\":\"2025-05-29T02:36:21.133807+00:00\",\"filter\":{\"tags\":[\"app:test-get_all_monitor_notification_rules_returns_ok_response-1748486181\"]},\"modified_at\":\"1970-01-01T00:00:00+00:00\",\"recipients\":[\"slack-monitor-app\"],\"name\":\"test rule\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"dbb04d74-98e6-4f3b-905b-f42d7f0cd9e3\"},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2025-05-06T01:37:11.870914+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"monitor-notification-rule\",\"attributes\":{\"created_at\":\"2025-05-29T02:36:21.133807+00:00\",\"filter\":{\"tags\":[\"app:test-get_all_monitor_notification_rules_returns_ok_response-1748486181\"]},\"recipients\":[\"slack-monitor-app\"],\"modified_at\":\"2025-05-29T02:36:21.141964+00:00\",\"name\":\"test rule\"},\"id\":\"dbb04d74-98e6-4f3b-905b-f42d7f0cd9e3\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/dbb04d74-98e6-4f3b-905b-f42d7f0cd9e3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all monitor notification rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:21.470Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "It's a threshold", + "monitor_definition": { + "message": "cats", + "name": "High Error Rate on service", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "category:test" + ], + "template_variables": [ + { + "available_values": [], + "defaults": [ + "cats" + ], + "name": "scope" + } + ], + "title": "api spec given template test-get_all_monitor_user_templates_returns_ok_response-1748486181" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-user-template\",\"attributes\":{\"description\":\"It's a threshold\",\"created\":\"2025-05-29T02:36:21.696273+00:00\",\"template_variables\":[{\"available_values\":[],\"defaults\":[\"cats\"],\"name\":\"scope\"}],\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"version\":0,\"tags\":[\"category:test\"],\"modified\":\"2025-05-29T02:36:21.696273+00:00\",\"title\":\"api spec given template test-get_all_monitor_user_templates_returns_ok_response-1748486181\",\"monitor_definition\":{\"message\":\"cats\",\"name\":\"High Error Rate on service\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"type\":\"query alert\"}},\"id\":\"900b870a-1f9d-4b6c-95b7-9859bbb0a778\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/monitor/template", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"monitor-user-template\",\"attributes\":{\"created\":\"2025-05-29T02:36:21.696273+00:00\",\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"version\":0,\"tags\":[\"category:test\"],\"title\":\"api spec given template test-get_all_monitor_user_templates_returns_ok_response-1748486181\",\"modified\":\"2025-05-29T02:36:21.696273+00:00\",\"monitor_definition\":{\"name\":\"High Error Rate on service\",\"type\":\"query alert\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"message\":\"cats\"},\"description\":\"It's a threshold\",\"template_variables\":[{\"defaults\":[\"cats\"],\"name\":\"scope\",\"available_values\":[]}]},\"id\":\"900b870a-1f9d-4b6c-95b7-9859bbb0a778\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/template/900b870a-1f9d-4b6c-95b7-9859bbb0a778", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all monitor user templates returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:21.941Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "app:test-update_a_monitor_notification_rule_returns_bad_request_response-1748486181" + ] + }, + "name": "test rule", + "recipients": [ + "slack-monitor-app" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"name\":\"test rule\",\"created_at\":\"2025-05-29T02:36:22.099271+00:00\",\"filter\":{\"tags\":[\"app:test-update_a_monitor_notification_rule_returns_bad_request_response-1748486181\"]},\"recipients\":[\"slack-monitor-app\"],\"modified_at\":\"1970-01-01T00:00:00+00:00\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}},\"id\":\"571a01f1-8f6f-4792-9f4a-0aa99f9b2365\"},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2025-05-06T01:37:11.870914+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:test-update_a_monitor_notification_rule_returns_bad_request_response-1748486181", + "host:abc" + ] + }, + "name": "updated rule", + "recipients": [ + "@slack-test-channel" + ] + }, + "id": "571a01f1-8f6f-4792-9f4a-0aa99f9b2365", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/monitor/notification_rule/571a01f1-8f6f-4792-9f4a-0aa99f9b2365", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid recipients: Recipient handle should not start with '@'\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/571a01f1-8f6f-4792-9f4a-0aa99f9b2365", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a monitor notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:22.374Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:test-update_a_monitor_notification_rule_returns_not_found_response-1748486182", + "host:abc" + ] + }, + "name": "updated rule", + "recipients": [ + "slack-test-channel", + "jira-test" + ] + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/monitor/notification_rule/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor Notification Rule not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a monitor notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:22.508Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "app:test-update_a_monitor_notification_rule_returns_ok_response-1748486182" + ] + }, + "name": "test rule", + "recipients": [ + "slack-monitor-app" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"modified_at\":\"1970-01-01T00:00:00+00:00\",\"created_at\":\"2025-05-29T02:36:22.625956+00:00\",\"filter\":{\"tags\":[\"app:test-update_a_monitor_notification_rule_returns_ok_response-1748486182\"]},\"name\":\"test rule\",\"recipients\":[\"slack-monitor-app\"]},\"id\":\"48a37c74-cf93-488c-b070-210d650b5687\",\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2025-05-06T01:37:11.870914+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "test:test-update_a_monitor_notification_rule_returns_ok_response-1748486182", + "host:abc" + ] + }, + "name": "updated rule", + "recipients": [ + "slack-test-channel" + ] + }, + "id": "48a37c74-cf93-488c-b070-210d650b5687", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/monitor/notification_rule/48a37c74-cf93-488c-b070-210d650b5687", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"recipients\":[\"slack-test-channel\"],\"modified_at\":\"2025-05-29T02:36:22.798426+00:00\",\"name\":\"updated rule\",\"filter\":{\"tags\":[\"test:test-update_a_monitor_notification_rule_returns_ok_response-1748486182\",\"host:abc\"]},\"created_at\":\"2025-05-29T02:36:22.625956+00:00\"},\"id\":\"48a37c74-cf93-488c-b070-210d650b5687\",\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":\"frog\",\"handle\":\"frog@datadoghq.com\",\"created_at\":\"2019-10-02T08:15:39.795051+00:00\",\"modified_at\":\"2025-05-06T01:37:11.870914+00:00\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/48a37c74-cf93-488c-b070-210d650b5687", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a monitor notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-09-26T01:51:00.504Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "app:test-update_a_monitor_notification_rule_with_conditional_recipients_returns_ok_response-1758851460" + ] + }, + "name": "test rule", + "recipients": [ + "slack-monitor-app" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"filter\":{\"tags\":[\"app:test-update_a_monitor_notification_rule_with_conditional_recipients_returns_ok_response-1758851460\"]},\"created_at\":\"2025-09-26T01:51:00.665373+00:00\",\"name\":\"test rule\",\"recipients\":[\"slack-monitor-app\"],\"modified_at\":\"1970-01-01T00:00:00+00:00\"},\"id\":\"954d2f74-ec41-4f7b-9f63-7146075f3537\",\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2020-12-29T22:58:44.733921+00:00\",\"modified_at\":\"2021-04-27T13:54:01.547888+00:00\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "conditional_recipients": { + "conditions": [ + { + "recipients": [ + "slack-test-channel", + "jira-test" + ], + "scope": "transition_type:is_alert" + } + ] + }, + "filter": { + "tags": [ + "test:test-update_a_monitor_notification_rule_with_conditional_recipients_returns_ok_response-1758851460", + "host:abc" + ] + }, + "name": "updated rule" + }, + "id": "954d2f74-ec41-4f7b-9f63-7146075f3537", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/monitor/notification_rule/954d2f74-ec41-4f7b-9f63-7146075f3537", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"id\":\"954d2f74-ec41-4f7b-9f63-7146075f3537\",\"attributes\":{\"filter\":{\"tags\":[\"test:test-update_a_monitor_notification_rule_with_conditional_recipients_returns_ok_response-1758851460\",\"host:abc\"]},\"modified_at\":\"2025-09-26T01:51:00.876883+00:00\",\"conditional_recipients\":{\"conditions\":[{\"scope\":\"transition_type:is_alert\",\"recipients\":[\"slack-test-channel\",\"jira-test\"]}]},\"name\":\"updated rule\",\"created_at\":\"2025-09-26T01:51:00.665373+00:00\"},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2020-12-29T22:58:44.733921+00:00\",\"modified_at\":\"2021-04-27T13:54:01.547888+00:00\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/954d2f74-ec41-4f7b-9f63-7146075f3537", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a monitor notification rule with conditional_recipients returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-11-11T21:28:40.357Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "tags": [ + "app:test-update_a_monitor_notification_rule_with_scope_returns_ok_response-1762896520" + ] + }, + "name": "test rule", + "recipients": [ + "slack-monitor-app" + ] + }, + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/notification_rule", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"recipients\":[\"slack-monitor-app\"],\"modified_at\":\"1970-01-01T00:00:00+00:00\",\"created_at\":\"2025-11-11T21:28:40.540848+00:00\",\"name\":\"test rule\",\"filter\":{\"tags\":[\"app:test-update_a_monitor_notification_rule_with_scope_returns_ok_response-1762896520\"]}},\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}},\"id\":\"827442a0-5d3e-408c-a930-7ac44775fff1\"},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2020-12-29T22:58:44.733921+00:00\",\"modified_at\":\"2021-04-27T13:54:01.547888+00:00\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\",\"last_login_time\":null}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "scope": "test:test-update_a_monitor_notification_rule_with_scope_returns_ok_response-1762896520" + }, + "name": "updated rule", + "recipients": [ + "slack-test-channel" + ] + }, + "id": "827442a0-5d3e-408c-a930-7ac44775fff1", + "type": "monitor-notification-rule" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/monitor/notification_rule/827442a0-5d3e-408c-a930-7ac44775fff1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-notification-rule\",\"attributes\":{\"filter\":{\"scope\":\"test:test-update_a_monitor_notification_rule_with_scope_returns_ok_response-1762896520\"},\"recipients\":[\"slack-test-channel\"],\"created_at\":\"2025-11-11T21:28:40.540848+00:00\",\"name\":\"updated rule\",\"modified_at\":\"2025-11-11T21:28:40.815544+00:00\"},\"id\":\"827442a0-5d3e-408c-a930-7ac44775fff1\",\"relationships\":{\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2020-12-29T22:58:44.733921+00:00\",\"modified_at\":\"2021-04-27T13:54:01.547888+00:00\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b7c189b5b4c2c429d7c1e0bc3749330e?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\",\"last_login_time\":null}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/notification_rule/827442a0-5d3e-408c-a930-7ac44775fff1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a monitor notification rule with scope returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:22.996Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "It's a threshold", + "monitor_definition": { + "message": "cats", + "name": "High Error Rate on service", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "category:test" + ], + "template_variables": [ + { + "available_values": [], + "defaults": [ + "cats" + ], + "name": "scope" + } + ], + "title": "api spec given template test-update_a_monitor_user_template_to_a_new_version_returns_bad_request_response-1748486182" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-user-template\",\"attributes\":{\"version\":0,\"created\":\"2025-05-29T02:36:23.224659+00:00\",\"template_variables\":[{\"available_values\":[],\"name\":\"scope\",\"defaults\":[\"cats\"]}],\"monitor_definition\":{\"message\":\"cats\",\"name\":\"High Error Rate on service\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"type\":\"query alert\"},\"title\":\"api spec given template test-update_a_monitor_user_template_to_a_new_version_returns_bad_request_response-1748486182\",\"description\":\"It's a threshold\",\"tags\":[\"category:test\"],\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":\"2025-05-29T02:36:23.224659+00:00\"},\"id\":\"a68243ec-7e1c-40da-a99d-8966282c3726\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": {}, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-update_a_monitor_user_template_to_a_new_version_returns_bad_request_response-1748486182" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/monitor/template/a68243ec-7e1c-40da-a99d-8966282c3726", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid monitor_definition or template variables: Monitor definition cannot be empty.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/template/a68243ec-7e1c-40da-a99d-8966282c3726", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a monitor user template to a new version returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:23.616Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name test-update_a_monitor_user_template_to_a_new_version_returns_not_found_response-1748486183", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-update_a_monitor_user_template_to_a_new_version_returns_not_found_response-1748486183" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/monitor/template/00000000-0000-1234-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor template not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a monitor user template to a new version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:23.765Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "It's a threshold", + "monitor_definition": { + "message": "cats", + "name": "High Error Rate on service", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "category:test" + ], + "template_variables": [ + { + "available_values": [], + "defaults": [ + "cats" + ], + "name": "scope" + } + ], + "title": "api spec given template test-update_a_monitor_user_template_to_a_new_version_returns_ok_response-1748486183" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-user-template\",\"attributes\":{\"template_variables\":[{\"name\":\"scope\",\"available_values\":[],\"defaults\":[\"cats\"]}],\"monitor_definition\":{\"message\":\"cats\",\"name\":\"High Error Rate on service\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"type\":\"query alert\"},\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created\":\"2025-05-29T02:36:23.954533+00:00\",\"modified\":\"2025-05-29T02:36:23.954533+00:00\",\"version\":0,\"title\":\"api spec given template test-update_a_monitor_user_template_to_a_new_version_returns_ok_response-1748486183\",\"tags\":[\"category:test\"],\"description\":\"It's a threshold\"},\"id\":\"fefd62df-924a-4438-a697-f7e6ccbad77e\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name test-update_a_monitor_user_template_to_a_new_version_returns_ok_response-1748486183", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-update_a_monitor_user_template_to_a_new_version_returns_ok_response-1748486183" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/monitor/template/fefd62df-924a-4438-a697-f7e6ccbad77e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-user-template\",\"attributes\":{\"title\":\"Postgres DB test-update_a_monitor_user_template_to_a_new_version_returns_ok_response-1748486183\",\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"modified\":\"2025-05-29T02:36:24.215009+00:00\",\"version\":1,\"description\":\"A description.\",\"versions\":[{\"title\":\"api spec given template test-update_a_monitor_user_template_to_a_new_version_returns_ok_response-1748486183\",\"version\":0,\"description\":\"It's a threshold\",\"id\":\"fefd62df-924a-4438-a697-f7e6ccbad77e\",\"created\":\"2025-05-29T02:36:23.954533+00:00\",\"monitor_definition\":{\"name\":\"High Error Rate on service\",\"type\":\"query alert\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"message\":\"cats\"},\"template_variables\":[{\"defaults\":[\"cats\"],\"available_values\":[],\"name\":\"scope\"}],\"tags\":[\"category:test\"]},{\"title\":\"Postgres DB test-update_a_monitor_user_template_to_a_new_version_returns_ok_response-1748486183\",\"version\":1,\"description\":\"A description.\",\"id\":\"5e4cd0de-4940-4060-8ffd-2ff13a0b3f5e\",\"created\":\"2025-05-29T02:36:23.954533+00:00\",\"monitor_definition\":{\"name\":\"A name test-update_a_monitor_user_template_to_a_new_version_returns_ok_response-1748486183\",\"type\":\"query alert\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"message\":\"A msg.\"},\"template_variables\":[{\"defaults\":[\"defaultValue\"],\"available_values\":[\"value1\",\"value2\"],\"name\":\"regionName\",\"tag_key\":\"datacenter\"}],\"tags\":[\"integration:Azure\"]}],\"created\":\"2025-05-29T02:36:23.954533+00:00\",\"monitor_definition\":{\"message\":\"A msg.\",\"name\":\"A name test-update_a_monitor_user_template_to_a_new_version_returns_ok_response-1748486183\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"type\":\"query alert\"},\"template_variables\":[{\"defaults\":[\"defaultValue\"],\"available_values\":[\"value1\",\"value2\"],\"name\":\"regionName\",\"tag_key\":\"datacenter\"}],\"tags\":[\"integration:Azure\"]},\"id\":\"fefd62df-924a-4438-a697-f7e6ccbad77e\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/template/fefd62df-924a-4438-a697-f7e6ccbad77e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a monitor user template to a new version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:24.411Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": {}, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-validate_a_monitor_user_template_returns_bad_request_response-1748486184" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid monitor_definition or template variables: Monitor definition cannot be empty.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Validate a monitor user template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:24.538Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name test-validate_a_monitor_user_template_returns_ok_response-1748486184", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-validate_a_monitor_user_template_returns_ok_response-1748486184" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Validate a monitor user template returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:24.721Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "It's a threshold", + "monitor_definition": { + "message": "cats", + "name": "High Error Rate on service", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "category:test" + ], + "template_variables": [ + { + "available_values": [], + "defaults": [ + "cats" + ], + "name": "scope" + } + ], + "title": "api spec given template test-validate_an_existing_monitor_user_template_returns_bad_request_response-1748486184" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-user-template\",\"attributes\":{\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"monitor_definition\":{\"message\":\"cats\",\"name\":\"High Error Rate on service\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"type\":\"query alert\"},\"tags\":[\"category:test\"],\"created\":\"2025-05-29T02:36:24.928104+00:00\",\"modified\":\"2025-05-29T02:36:24.928104+00:00\",\"title\":\"api spec given template test-validate_an_existing_monitor_user_template_returns_bad_request_response-1748486184\",\"version\":0,\"template_variables\":[{\"name\":\"scope\",\"defaults\":[\"cats\"],\"available_values\":[]}],\"description\":\"It's a threshold\"},\"id\":\"599fecff-7834-42bd-976b-c2d145f42579\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": {}, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-validate_an_existing_monitor_user_template_returns_bad_request_response-1748486184" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template/599fecff-7834-42bd-976b-c2d145f42579/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid monitor_definition or template variables: Monitor definition cannot be empty.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/template/599fecff-7834-42bd-976b-c2d145f42579", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Validate an existing monitor user template returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:25.252Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name test-validate_an_existing_monitor_user_template_returns_not_found_response-1748486185", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-validate_an_existing_monitor_user_template_returns_not_found_response-1748486185" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template/00000000-0000-1234-0000-000000000000/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Monitor template not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Validate an existing monitor user template returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Monitors", + "frozen_at": "2025-05-29T02:36:25.384Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "It's a threshold", + "monitor_definition": { + "message": "cats", + "name": "High Error Rate on service", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "category:test" + ], + "template_variables": [ + { + "available_values": [], + "defaults": [ + "cats" + ], + "name": "scope" + } + ], + "title": "api spec given template test-validate_an_existing_monitor_user_template_returns_ok_response-1748486185" + }, + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"monitor-user-template\",\"attributes\":{\"created\":\"2025-05-29T02:36:25.594440+00:00\",\"version\":0,\"description\":\"It's a threshold\",\"tags\":[\"category:test\"],\"modified\":\"2025-05-29T02:36:25.594440+00:00\",\"template_variables\":[{\"defaults\":[\"cats\"],\"available_values\":[],\"name\":\"scope\"}],\"creator_uuid\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"monitor_definition\":{\"message\":\"cats\",\"name\":\"High Error Rate on service\",\"query\":\"avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100\",\"type\":\"query alert\"},\"title\":\"api spec given template test-validate_an_existing_monitor_user_template_returns_ok_response-1748486185\"},\"id\":\"dc86b1ba-9e7c-40cf-8859-777c53e4f1a2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A description.", + "monitor_definition": { + "message": "A msg.", + "name": "A name test-validate_an_existing_monitor_user_template_returns_ok_response-1748486185", + "query": "avg(last_5m):sum:system.net.bytes_rcvd{host:host0} > 100", + "type": "query alert" + }, + "tags": [ + "integration:Azure" + ], + "template_variables": [ + { + "available_values": [ + "value1", + "value2" + ], + "defaults": [ + "defaultValue" + ], + "name": "regionName", + "tag_key": "datacenter" + } + ], + "title": "Postgres DB test-validate_an_existing_monitor_user_template_returns_ok_response-1748486185" + }, + "id": "00000000-0000-1234-0000-000000000000", + "type": "monitor-user-template" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/monitor/template/dc86b1ba-9e7c-40cf-8859-777c53e4f1a2/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/monitor/template/dc86b1ba-9e7c-40cf-8859-777c53e4f1a2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Validate an existing monitor user template returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/network-device-monitoring.json b/test-server-data/v2/network-device-monitoring.json new file mode 100644 index 0000000000..f5eaa8e7d6 --- /dev/null +++ b/test-server-data/v2/network-device-monitoring.json @@ -0,0 +1,476 @@ +{ + "feature": "Network Device Monitoring", + "recordings": [ + { + "feature": "Network Device Monitoring", + "frozen_at": "2024-07-04T16:51:26.956Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ndm/devices/unknown_device_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get the device details returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2024-07-25T12:51:06.792Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ndm/devices/default_device", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"default_device\",\"type\":\"device\",\"attributes\":{\"description\":\"a device monitored with NDM\",\"device_type\":\"other\",\"ip_address\":\"1.2.3.4\",\"location\":\"paris\",\"model\":\"xx-123\",\"name\":\"example device\",\"os_name\":\"example OS\",\"os_version\":\"1.0.2\",\"ping_status\":\"unmonitored\",\"product_name\":\"example device\",\"serial_number\":\"X12345\",\"status\":\"ok\",\"sys_object_id\":\"1.3.6.1.4.1.99999\",\"tags\":[\"device_ip:1.2.3.4\",\"device_id:default_device\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the device details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2024-07-02T14:40:57.137Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ndm/devices", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get the list of devices returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2024-07-02T14:47:22.939Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ndm/devices", + "query": [ + [ + "filter[tag]", + "device_namespace:default" + ], + [ + "page[number]", + "0" + ], + [ + "page[size]", + "1" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"default:1.2.3.4\",\"type\":\"device\",\"attributes\":{\"description\":\"a device monitored with NDM\",\"device_type\":\"other\",\"interface_statuses\":{\"up\":2,\"warning\":4,\"down\":13},\"ip_address\":\"1.2.3.4\",\"location\":\"paris\",\"model\":\"xx-123\",\"name\":\"example device\",\"os_name\":\"example OS\",\"os_version\":\"1.0.2\",\"ping_status\":\"unmonitored\",\"product_name\":\"example device\",\"serial_number\":\"X12345\",\"status\":\"ok\",\"sys_object_id\":\"1.3.6.1.4.1.99999\",\"tags\":[\"device_ip:1.2.3.4\",\"device_id:default:1.2.3.4\"]}}],\"meta\":{\"page\":{\"total_filtered_count\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the list of devices returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2025-04-09T22:39:12.378Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ndm/interfaces", + "query": [ + [ + "device_id", + "default:1.2.3.4" + ], + [ + "get_ip_addresses", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"default:1.2.3.4:99\",\"type\":\"interface\",\"attributes\":{\"name\":\"if99\",\"status\":\"up\",\"description\":\"a network interface\",\"mac_address\":\"00:00:00:00:00:00\",\"ip_addresses\":[\"1.1.1.1\",\"1.1.1.2\"],\"alias\":\"interface_99\",\"index\":99}},{\"id\":\"default:1.2.3.4:999\",\"type\":\"interface\",\"attributes\":{\"name\":\"if999\",\"status\":\"down\",\"description\":\"another network interface\",\"mac_address\":\"99:99:99:99:99:99\",\"alias\":\"interface_999\",\"index\":999}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the list of interfaces of the device returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2024-07-29T13:20:36.111Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ndm/tags/devices/unknown_device_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get the list of tags for a device returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2024-07-30T13:27:40.522Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ndm/tags/devices/default_device", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"default_device\",\"type\":\"tags\",\"attributes\":{\"tags\":[\"tag:test\",\"tag:testbis\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the list of tags for a device returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2026-02-17T10:20:35.870Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ndm/tags/interfaces/unknown_interface_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "List tags for an interface returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2026-02-17T10:20:36.480Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/ndm/tags/interfaces/example%3A1.2.3.4%3A1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"example:1.2.3.4:1\",\"type\":\"tags\",\"attributes\":{\"tags\":[\"tag:test\",\"tag:testbis\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List tags for an interface returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2024-07-29T13:20:36.885Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "tags": [ + "tag:test", + "tag:testbis" + ] + }, + "id": "unknown_device_id", + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/ndm/tags/devices/unknown_device_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update the tags for a device returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2024-07-29T13:20:37.177Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "tags": [ + "tag:test", + "tag:testbis" + ] + }, + "id": "default_device", + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/ndm/tags/devices/default_device", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"default_device\",\"type\":\"tags\",\"attributes\":{\"tags\":[\"tag:test\",\"tag:testbis\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update the tags for a device returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2026-02-17T10:20:36.989Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "tags": [ + "tag:test", + "tag:testbis" + ] + }, + "id": "unknown_interface_id", + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/ndm/tags/interfaces/unknown_interface_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update the tags for an interface returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Network Device Monitoring", + "frozen_at": "2026-02-17T10:20:37.189Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "tags": [ + "tag:test", + "tag:testbis" + ] + }, + "id": "example:1.2.3.4:1", + "type": "tags" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/ndm/tags/interfaces/example%3A1.2.3.4%3A1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"example:1.2.3.4:1\",\"type\":\"tags\",\"attributes\":{\"tags\":[\"tag:test\",\"tag:testbis\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update the tags for an interface returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/oauth2-client-public.json b/test-server-data/v2/oauth2-client-public.json new file mode 100644 index 0000000000..72633e1c03 --- /dev/null +++ b/test-server-data/v2/oauth2-client-public.json @@ -0,0 +1,38 @@ +{ + "feature": "OAuth2 Client Public", + "recordings": [ + { + "feature": "OAuth2 Client Public", + "frozen_at": "2026-06-02T09:00:00.000Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/oauth2/.well-known/sites", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"prod\",\"type\":\"env\",\"attributes\":{\"sites\":[\"app.datadoghq.com\",\"app.datadoghq.eu\",\"us5.datadoghq.com\",\"us3.datadoghq.com\",\"ap1.datadoghq.com\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get OAuth2 well-known sites returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/observability-pipelines.json b/test-server-data/v2/observability-pipelines.json new file mode 100644 index 0000000000..5f241d965c --- /dev/null +++ b/test-server-data/v2/observability-pipelines.json @@ -0,0 +1,3058 @@ +{ + "feature": "Observability Pipelines", + "recordings": [ + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:40.491Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "unknown-processor", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Component with ID my-processor-group is an unknown component\",\"meta\":{\"message\":\"Component with ID my-processor-group is an unknown component\"}},{\"title\":\"The following components are unused: [datadog-agent-source unknown-processor]\",\"meta\":{\"message\":\"The following components are unused: [datadog-agent-source unknown-processor]\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new pipeline returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:40.989Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0a44c8d2-fdf8-11f0-8d8c-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Main Observability Pipeline\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"my-processor-group\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/0a44c8d2-fdf8-11f0-8d8c-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-02-09T09:53:31.840Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "cache": { + "num_events": 5000 + }, + "enabled": true, + "fields": [ + "message" + ], + "id": "dedupe-processor", + "include": "service:my-service", + "mode": "match", + "type": "dedupe" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Dedupe Cache" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"31a750dc-059d-11f1-a2a8-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Pipeline with Dedupe Cache\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"my-processor-group\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"cache\":{\"num_events\":5000},\"enabled\":true,\"fields\":[\"message\"],\"id\":\"dedupe-processor\",\"include\":\"service:my-service\",\"mode\":\"match\",\"type\":\"dedupe\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"cache\":{\"num_events\":5000},\"enabled\":true,\"fields\":[\"message\"],\"id\":\"dedupe-processor\",\"include\":\"service:my-service\",\"mode\":\"match\",\"type\":\"dedupe\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/31a750dc-059d-11f1-a2a8-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a pipeline with dedupe processor with cache returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-02-09T09:53:33.945Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "fields": [ + "message" + ], + "id": "dedupe-processor", + "include": "service:my-service", + "mode": "match", + "type": "dedupe" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Dedupe No Cache" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3280ccb8-059d-11f1-a2aa-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Pipeline with Dedupe No Cache\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"my-processor-group\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"fields\":[\"message\"],\"id\":\"dedupe-processor\",\"include\":\"service:my-service\",\"mode\":\"match\",\"type\":\"dedupe\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"fields\":[\"message\"],\"id\":\"dedupe-processor\",\"include\":\"service:my-service\",\"mode\":\"match\",\"type\":\"dedupe\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/3280ccb8-059d-11f1-a2aa-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a pipeline with dedupe processor without cache returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:42.608Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/3fa85f64-5717-4562-b3fc-2c963f66afa6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Resource Not Found\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a pipeline returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:43.204Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "processor-group-0" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "display_name": "My Processor Group", + "enabled": true, + "id": "processor-group-0", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "display_name": "My Filter Processor", + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0b949d84-fdf8-11f0-8d8e-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Main Observability Pipeline\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"processor-group-0\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/0b949d84-fdf8-11f0-8d8e-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/0b949d84-fdf8-11f0-8d8e-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Resource Not Found\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:45.333Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "processor-group-0" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "display_name": "My Processor Group", + "enabled": true, + "id": "processor-group-0", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "display_name": "My Filter Processor", + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0cda650c-fdf8-11f0-9e92-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Main Observability Pipeline\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"processor-group-0\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/obs-pipelines/pipelines/0cda650c-fdf8-11f0-9e92-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0cda650c-fdf8-11f0-9e92-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Main Observability Pipeline\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"processor-group-0\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/0cda650c-fdf8-11f0-9e92-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a specific pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:47.526Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [ + [ + "page[size]", + "0" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"page[size] must be a number between 1 and 50\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List pipelines returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:48.015Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "processor-group-0" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "display_name": "My Processor Group", + "enabled": true, + "id": "processor-group-0", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "display_name": "My Filter Processor", + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0e62d45e-fdf8-11f0-9e94-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Main Observability Pipeline\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"processor-group-0\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"a3b44f62-f7f2-11f0-8764-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"socket-destination-pipeline-udp\",\"config\":{\"destinations\":[{\"encoding\":\"raw_message\",\"framing\":{\"delimiter\":\"|\",\"method\":\"character_delimited\"},\"id\":\"socket-dest-2\",\"inputs\":[\"source-1\"],\"mode\":\"udp\",\"type\":\"socket\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"b9ea093e-f85b-11f0-b352-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"http client destination minimal\",\"config\":{\"destinations\":[{\"encoding\":\"json\",\"id\":\"http-client-dest-minimal-1\",\"inputs\":[\"source-1\"],\"type\":\"http_client\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"b5e6b97c-f91e-11f0-98e1-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"socket-destination-pipeline\",\"config\":{\"destinations\":[{\"encoding\":\"json\",\"framing\":{\"method\":\"newline_delimited\"},\"id\":\"socket-dest-1\",\"inputs\":[\"source-1\"],\"mode\":\"tcp\",\"tls\":{\"ca_file\":\"/etc/ssl/certs/ca.crt\",\"crt_file\":\"/etc/ssl/certs/socket.crt\",\"key_file\":\"/etc/ssl/private/socket.key\"},\"type\":\"socket\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"406ea7f0-fa4e-11f0-a305-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"crowdstrike-next-gen-siem-destination-pipeline\",\"config\":{\"destinations\":[{\"compression\":{\"algorithm\":\"gzip\",\"level\":6},\"encoding\":\"json\",\"id\":\"crowdstrike-dest-1\",\"inputs\":[\"source-1\"],\"tls\":{\"ca_file\":\"/path/to/ca.crt\",\"crt_file\":\"/path/to/cert.crt\",\"key_file\":\"/path/to/key.key\"},\"type\":\"crowdstrike_next_gen_siem\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"3bcadf4c-fad6-11f0-b282-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"agent with tls\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"source-with-tls\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"id\":\"source-with-tls\",\"tls\":{\"ca_file\":\"/etc/certs/ca.crt\",\"crt_file\":\"/etc/certs/agent.crt\",\"key_file\":\"/etc/certs/agent.key\"},\"type\":\"datadog_agent\"}]}}},{\"id\":\"93672d7c-fad7-11f0-9953-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"fluent-pipeline\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"fluent-source-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"id\":\"fluent-source-1\",\"tls\":{\"ca_file\":\"/etc/ssl/certs/ca.crt\",\"crt_file\":\"/etc/ssl/certs/fluent.crt\",\"key_file\":\"/etc/ssl/private/fluent.key\"},\"type\":\"fluent_bit\"}]}}},{\"id\":\"527d2a6e-fbe0-11f0-99e3-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"socket-destination-pipeline-udp\",\"config\":{\"destinations\":[{\"encoding\":\"raw_message\",\"framing\":{\"delimiter\":\"|\",\"method\":\"character_delimited\"},\"id\":\"socket-dest-2\",\"inputs\":[\"source-1\"],\"mode\":\"udp\",\"type\":\"socket\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"5c0f6c30-fbe1-11f0-9053-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"test pipeline\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"parser-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"display_name\":\"processor group\",\"enabled\":true,\"id\":\"parser-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"display_name\":\"json parser\",\"enabled\":true,\"field\":\"message\",\"id\":\"parser-1\",\"include\":\"service:my-service\",\"type\":\"parse_json\"}]}],\"processors\":[{\"display_name\":\"processor group\",\"enabled\":true,\"id\":\"parser-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"display_name\":\"json parser\",\"enabled\":true,\"field\":\"message\",\"id\":\"parser-1\",\"include\":\"service:my-service\",\"type\":\"parse_json\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"eccf626e-fc42-11f0-9bfe-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"test pipeline\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"parser-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"display_name\":\"processor group\",\"enabled\":true,\"id\":\"parser-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"display_name\":\"json parser\",\"enabled\":true,\"field\":\"message\",\"id\":\"parser-1\",\"include\":\"service:my-service\",\"type\":\"parse_json\"}]}],\"processors\":[{\"display_name\":\"processor group\",\"enabled\":true,\"id\":\"parser-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"display_name\":\"json parser\",\"enabled\":true,\"field\":\"message\",\"id\":\"parser-1\",\"include\":\"service:my-service\",\"type\":\"parse_json\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"005b8e58-fc56-11f0-b60b-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"datadog tags processor test updated\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"datadog-tags-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"521f2d08-fc56-11f0-b621-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"metric tags processor test\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"metric-tags-group-1\"],\"type\":\"datadog_metrics\"}],\"pipeline_type\":\"metrics\",\"processor_groups\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"7f4c75ce-fc56-11f0-a9f2-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"datadog tags processor test updated\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"datadog-tags-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"94fadafa-fc56-11f0-a9f4-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"metric tags processor test\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"metric-tags-group-1\"],\"type\":\"datadog_metrics\"}],\"pipeline_type\":\"metrics\",\"processor_groups\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"a2f910f4-fc56-11f0-bac8-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"datadog tags processor test updated\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"datadog-tags-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"ac2c9826-fc56-11f0-a9f6-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"metric tags processor test\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"metric-tags-group-1\"],\"type\":\"datadog_metrics\"}],\"pipeline_type\":\"metrics\",\"processor_groups\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"1a65f55a-fc5a-11f0-aa2a-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"sentinelone pipeline\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"source-1\"],\"region\":\"us\",\"type\":\"sentinel_one\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"87a396a4-fc5a-11f0-aa50-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"metric tags processor test\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"metric-tags-group-1\"],\"type\":\"datadog_metrics\"}],\"pipeline_type\":\"metrics\",\"processor_groups\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"184636c4-fc5d-11f0-a648-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"datadog tags processor test updated\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"datadog-tags-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"7380f2e0-fc5d-11f0-a676-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"metric tags processor test\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"metric-tags-group-1\"],\"type\":\"datadog_metrics\"}],\"pipeline_type\":\"metrics\",\"processor_groups\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"a21a421e-fc5d-11f0-8fee-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"datadog tags processor test updated\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"datadog-tags-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"b0fd5a96-fc5d-11f0-8ff0-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"metric tags processor test\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"metric-tags-group-1\"],\"type\":\"datadog_metrics\"}],\"pipeline_type\":\"metrics\",\"processor_groups\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"c22c19a6-fc5d-11f0-96e7-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"datadog tags processor test updated\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"datadog-tags-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"d2546180-fc5d-11f0-a688-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"metric tags processor test\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"metric-tags-group-1\"],\"type\":\"datadog_metrics\"}],\"pipeline_type\":\"metrics\",\"processor_groups\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"metric-tags-processor\",\"include\":\"*\",\"rules\":[{\"action\":\"include\",\"include\":\"*\",\"keys\":[\"env\",\"service\",\"version\"],\"mode\":\"filter\"},{\"action\":\"exclude\",\"include\":\"service:web-*\",\"keys\":[\"debug\",\"internal\"],\"mode\":\"filter\"}],\"type\":\"metric_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"5195b8fe-fc5e-11f0-96e9-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"datadog tags processor test updated\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"datadog-tags-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"6368030c-fc5e-11f0-96eb-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"datadog tags processor test updated\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"datadog-tags-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"71f6441a-fc5e-11f0-8ff2-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"datadog tags processor test updated\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"datadog-tags-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"datadog-tags-group-1\",\"include\":\"service:my-service\",\"inputs\":[\"source-1\"],\"processors\":[{\"action\":\"exclude\",\"enabled\":true,\"id\":\"datadog-tags-processor\",\"include\":\"service:my-service\",\"keys\":[\"env\",\"service\"],\"mode\":\"filter\",\"type\":\"datadog_tags\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"e443881a-fd2c-11f0-abe4-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"sample-pipeline\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"sample-group-2\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"sample-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"group_by\":[\"service\",\"host\"],\"id\":\"sample-1\",\"include\":\"*\",\"percentage\":10,\"type\":\"sample\"}]},{\"enabled\":false,\"id\":\"sample-group-2\",\"include\":\"*\",\"inputs\":[\"sample-group-1\"],\"processors\":[{\"enabled\":false,\"id\":\"sample-2\",\"include\":\"*\",\"percentage\":4.99,\"type\":\"sample\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"sample-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"group_by\":[\"service\",\"host\"],\"id\":\"sample-1\",\"include\":\"*\",\"percentage\":10,\"type\":\"sample\"}]},{\"enabled\":false,\"id\":\"sample-group-2\",\"include\":\"*\",\"inputs\":[\"sample-group-1\"],\"processors\":[{\"enabled\":false,\"id\":\"sample-2\",\"include\":\"*\",\"percentage\":4.99,\"type\":\"sample\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"fe2060e8-fd2f-11f0-ac94-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"splunk-hec-destination-pipeline\",\"config\":{\"destinations\":[{\"auto_extract_timestamp\":true,\"encoding\":\"json\",\"id\":\"splunk-hec-1\",\"index\":\"main\",\"inputs\":[\"source-1\"],\"sourcetype\":\"custom_sourcetype\",\"type\":\"splunk_hec\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"47277dd0-fd30-11f0-b83d-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"quota with overflow_action\",\"config\":{\"destinations\":[{\"id\":\"logs-1\",\"inputs\":[\"quota-group-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[{\"enabled\":true,\"id\":\"quota-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"quota-1\",\"include\":\"*\",\"limit\":{\"enforce\":\"events\",\"limit\":1000},\"name\":\"MyQuota\",\"overflow_action\":\"drop\",\"type\":\"quota\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"quota-group-1\",\"include\":\"*\",\"inputs\":[\"source-1\"],\"processors\":[{\"enabled\":true,\"id\":\"quota-1\",\"include\":\"*\",\"limit\":{\"enforce\":\"events\",\"limit\":1000},\"name\":\"MyQuota\",\"overflow_action\":\"drop\",\"type\":\"quota\"}]}],\"sources\":[{\"id\":\"source-1\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"f8d4a5fe-fdc0-11f0-bf42-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"http-server-pipeline\",\"config\":{\"destinations\":[{\"id\":\"destination-1\",\"inputs\":[\"http-source-1\"],\"type\":\"datadog_logs\"}],\"pipeline_type\":\"logs\",\"processor_groups\":[],\"processors\":[],\"sources\":[{\"auth_strategy\":\"plain\",\"decoding\":\"json\",\"id\":\"http-source-1\",\"tls\":{\"ca_file\":\"/etc/ssl/certs/ca.crt\",\"crt_file\":\"/etc/ssl/certs/http.crt\",\"key_file\":\"/etc/ssl/private/http.key\"},\"type\":\"http_server\"}]}}},{\"id\":\"5c58f1ac-fdcb-11f0-8ca5-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Updated Pipeline Name\",\"config\":{\"destinations\":[{\"id\":\"updated-datadog-logs-destination-id\",\"inputs\":[\"my-processor-group\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}},{\"id\":\"0e62d45e-fdf8-11f0-9e94-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Main Observability Pipeline\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"processor-group-0\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}],\"meta\":{\"totalCount\":32}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/0e62d45e-fdf8-11f0-9e94-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List pipelines returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:50.545Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "processor-group-0" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "display_name": "My Processor Group", + "enabled": true, + "id": "processor-group-0", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "display_name": "My Filter Processor", + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0ff44776-fdf8-11f0-8d90-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Main Observability Pipeline\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"processor-group-0\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "unknown-processor", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/obs-pipelines/pipelines/0ff44776-fdf8-11f0-8d90-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Component with ID my-processor-group is an unknown component\",\"meta\":{\"message\":\"Component with ID my-processor-group is an unknown component\"}},{\"title\":\"The following components are unused: [datadog-agent-source unknown-processor]\",\"meta\":{\"message\":\"The following components are unused: [datadog-agent-source unknown-processor]\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/0ff44776-fdf8-11f0-8d90-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a pipeline returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:52.776Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/obs-pipelines/pipelines/3fa85f64-5717-4562-b3fc-2c963f66afa6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Not Found\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a pipeline returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:53.303Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "processor-group-0" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "display_name": "My Processor Group", + "enabled": true, + "id": "processor-group-0", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "display_name": "My Filter Processor", + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"119a3e5a-fdf8-11f0-8d92-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Main Observability Pipeline\",\"config\":{\"destinations\":[{\"id\":\"datadog-logs-destination\",\"inputs\":[\"processor-group-0\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"display_name\":\"My Processor Group\",\"enabled\":true,\"id\":\"processor-group-0\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"display_name\":\"My Filter Processor\",\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "updated-datadog-logs-destination-id", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Updated Pipeline Name" + }, + "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/obs-pipelines/pipelines/119a3e5a-fdf8-11f0-8d92-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"119a3e5a-fdf8-11f0-8d92-da7ad0900002\",\"type\":\"pipelines\",\"attributes\":{\"name\":\"Updated Pipeline Name\",\"config\":{\"destinations\":[{\"id\":\"updated-datadog-logs-destination-id\",\"inputs\":[\"my-processor-group\"],\"type\":\"datadog_logs\"}],\"processor_groups\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"processors\":[{\"enabled\":true,\"id\":\"my-processor-group\",\"include\":\"service:my-service\",\"inputs\":[\"datadog-agent-source\"],\"processors\":[{\"enabled\":true,\"id\":\"filter-processor\",\"include\":\"status:error\",\"type\":\"filter\"}]}],\"sources\":[{\"id\":\"datadog-agent-source\",\"type\":\"datadog_agent\"}]}}}}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/obs-pipelines/pipelines/119a3e5a-fdf8-11f0-8d92-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-03-10T16:11:47.487Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-metrics-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_metrics" + } + ], + "pipeline_type": "metrics", + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "*", + "inputs": [ + "opentelemetry-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "env:production", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "opentelemetry-source", + "type": "opentelemetry" + } + ] + }, + "name": "Metrics OTel Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate a metrics pipeline with opentelemetry source returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:55.673Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Field 'include' is required\",\"meta\":{\"field\":\"include\",\"id\":\"filter-processor\",\"message\":\"Field 'include' is required\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Validate an observability pipeline returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-01-30T16:23:56.149Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Main Observability Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-06-22T20:44:30.778Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "auth": { + "password_key": "CLICKHOUSE_PASSWORD", + "strategy": "basic", + "username_key": "CLICKHOUSE_USERNAME" + }, + "batch": { + "max_events": 1000, + "timeout_secs": 1 + }, + "batch_encoding": { + "allow_nullable_fields": false, + "codec": "arrow_stream" + }, + "compression": "gzip", + "database": "my_database", + "format": "arrow_stream", + "id": "clickhouse-destination", + "inputs": [ + "my-processor-group" + ], + "table": "application_logs", + "type": "clickhouse" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with ClickHouse Destination Arrow Stream" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with ClickHouse destination arrow_stream format returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-06-22T20:44:32.514Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "auth": { + "password_key": "CLICKHOUSE_PASSWORD", + "strategy": "basic", + "username_key": "CLICKHOUSE_USERNAME" + }, + "batch": { + "max_events": 1000, + "timeout_secs": 1 + }, + "compression": "gzip", + "database": "my_database", + "id": "clickhouse-destination", + "inputs": [ + "my-processor-group" + ], + "table": "application_logs", + "type": "clickhouse" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with ClickHouse Destination" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with ClickHouse destination returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-06-24T16:45:05.037Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "auth": { + "password_key": "CLICKHOUSE_PASSWORD", + "strategy": "basic", + "username_key": "CLICKHOUSE_USERNAME" + }, + "batch": { + "max_events": 1000, + "timeout_secs": 1 + }, + "batch_encoding": { + "allow_nullable_fields": true, + "codec": "arrow_stream" + }, + "buffer": { + "max_events": 500, + "type": "memory", + "when_full": "block" + }, + "compression": { + "algorithm": "gzip", + "level": 6 + }, + "database": "my_database", + "date_time_best_effort": true, + "endpoint_url_key": "CLICKHOUSE_ENDPOINT_URL", + "format": "arrow_stream", + "id": "clickhouse-destination", + "inputs": [ + "my-processor-group" + ], + "skip_unknown_fields": true, + "table": "application_logs", + "tls": { + "ca_file": "/path/to/ca.crt", + "crt_file": "/path/to/cert.crt", + "key_file": "/path/to/key.key", + "key_pass_key": "TLS_KEY_PASSPHRASE" + }, + "type": "clickhouse" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with ClickHouse Destination All Fields" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with ClickHouse destination with all fields set returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-05-18T16:51:43.688Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "http-server-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "auth_strategy": "none", + "decoding": "json", + "id": "http-server-source", + "type": "http_server", + "valid_tokens": [ + { + "enabled": true, + "field_to_add": { + "key": "token_name", + "value": "primary_token" + }, + "path_to_token": { + "header": "X-Token" + }, + "token_key": "HTTP_SERVER_TOKEN" + }, + { + "enabled": true, + "path_to_token": "path", + "token_key": "HTTP_SERVER_TOKEN_BACKUP" + } + ] + } + ] + }, + "name": "Pipeline with HTTP server valid_tokens" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with HTTP server source valid_tokens returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-02-10T14:12:05.668Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "ocsf-mapper-processor", + "include": "service:my-service", + "mappings": [ + { + "include": "source:custom", + "mapping": { + "mapping": [ + { + "default": "", + "dest": "time", + "source": "timestamp" + }, + { + "default": "", + "dest": "severity", + "source": "level" + }, + { + "default": "", + "dest": "device.type", + "lookup": { + "table": [ + { + "contains": "Desktop", + "value": "desktop" + } + ] + }, + "source": "host.type" + } + ], + "metadata": { + "class": "Device Inventory Info", + "profiles": [ + "container" + ], + "version": "1.3.0" + }, + "version": 1 + } + } + ], + "type": "ocsf_mapper" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "OCSF Custom Mapper Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with OCSF mapper custom mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-02-10T14:12:06.064Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "ocsf-mapper-processor", + "include": "service:my-service", + "mappings": [ + { + "include": "source:custom", + "mapping": { + "mapping": [ + { + "dest": "time", + "source": "timestamp" + } + ], + "metadata": { + "class": "Invalid Class", + "profiles": [ + "container" + ], + "version": "1.3.0" + }, + "version": 0 + } + } + ], + "type": "ocsf_mapper" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "OCSF Invalid Mapper Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Schema version must be a positive integer\",\"meta\":{\"field\":\"mappings.0.version\",\"id\":\"ocsf-mapper-processor\",\"message\":\"Schema version must be a positive integer\"}},{\"title\":\"Invalid custom mapping class\",\"meta\":{\"field\":\"mappings.0.metadata.class\",\"id\":\"ocsf-mapper-processor\",\"message\":\"Invalid custom mapping class\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Validate an observability pipeline with OCSF mapper invalid custom mapping returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-03-16T13:02:49.264Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "ocsf-mapper-processor", + "include": "service:my-service", + "keep_unmatched": true, + "mappings": [ + { + "include": "source:cloudtrail", + "mapping": "CloudTrail Account Change" + } + ], + "type": "ocsf_mapper" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "OCSF Mapper Keep Unmatched Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with OCSF mapper keep_unmatched returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-02-10T14:12:05.285Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "ocsf-mapper-processor", + "include": "service:my-service", + "mappings": [ + { + "include": "source:cloudtrail", + "mapping": "CloudTrail Account Change" + } + ], + "type": "ocsf_mapper" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "OCSF Mapper Pipeline" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with OCSF mapper library mapping returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-04-08T15:11:59.762Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "splunk-hec-destination", + "inputs": [ + "my-processor-group" + ], + "token_key": "SPLUNK_HEC_TOKEN", + "token_strategy": "custom", + "type": "splunk_hec" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Splunk HEC token_strategy" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with Splunk HEC destination token_strategy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-04-08T15:11:59.370Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "splunk-hec-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "splunk-hec-source", + "store_hec_token": true, + "type": "splunk_hec" + } + ] + }, + "name": "Pipeline with Splunk HEC store_hec_token" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with Splunk HEC source store_hec_token returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-05-18T16:51:43.307Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "splunk-hec-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "splunk-hec-source", + "type": "splunk_hec", + "valid_tokens": [ + { + "enabled": true, + "field_to_add": { + "key": "token_name", + "value": "primary_token" + }, + "token_key": "SPLUNK_HEC_TOKEN" + }, + { + "enabled": false, + "token_key": "SPLUNK_HEC_TOKEN_BACKUP" + } + ] + } + ] + }, + "name": "Pipeline with Splunk HEC valid_tokens" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with Splunk HEC source valid_tokens returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-04-08T12:44:25.060Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "amazon-s3-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "service:my-service", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "compression": "gzip", + "id": "amazon-s3-source", + "region": "us-east-1", + "type": "amazon_s3" + } + ] + }, + "name": "Pipeline with S3 Source Compression" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with amazon S3 source compression returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-05-21T09:58:44.439Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "buffer": { + "max_size": 1073741824, + "type": "disk", + "when_full": "block" + }, + "id": "cloud-prem-destination", + "inputs": [ + "my-processor-group" + ], + "type": "cloud_prem" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with CloudPrem Buffer" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with cloud_prem destination buffer returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-02-20T14:42:05.988Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "endpoint_url_key": "SUMO_LOGIC_ENDPOINT_URL", + "id": "sumo-logic-destination", + "inputs": [ + "my-processor-group" + ], + "type": "sumo_logic" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Secret Key" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with destination secret key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-04-09T11:54:29.220Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "file": { + "encoding": { + "delimiter": ",", + "includes_headers": true, + "type": "csv" + }, + "key": [ + { + "column": "user_id", + "comparison": "equals", + "field": { + "secret": "LOOKUP_KEY_SECRET" + } + } + ], + "path": "/etc/enrichment/lookup.csv", + "schema": [ + { + "column": "user_id", + "type": "string" + } + ] + }, + "id": "enrichment-processor", + "include": "*", + "target": "enriched", + "type": "enrichment_table" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Enrichment Table Secret Field Lookup" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with enrichment table secret field lookup returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-06-29T20:01:05.978Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "field": "content", + "id": "parse-grok-processor", + "include": "*", + "rules": [ + { + "include": "service:foo", + "match_rules": [ + { + "name": "MyParsingRule", + "rule": "%{word:user}" + } + ] + } + ], + "type": "parse_grok" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Parse Grok Include Rules" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with parse grok processor include rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-06-29T18:24:15.839Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "datadog-agent-source" + ], + "processors": [ + { + "enabled": true, + "id": "parse-grok-processor", + "include": "*", + "rules": [ + { + "match_rules": [ + { + "name": "MyParsingRule", + "rule": "%{word:user}" + } + ], + "source": "message" + } + ], + "type": "parse_grok" + } + ] + } + ], + "sources": [ + { + "id": "datadog-agent-source", + "type": "datadog_agent" + } + ] + }, + "name": "Pipeline with Parse Grok Source Rules" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with parse grok processor source rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-02-20T14:42:32.372Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "http-client-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "auth_strategy": "bearer", + "decoding": "bytes", + "id": "http-client-source", + "scrape_interval_secs": 15, + "scrape_timeout_secs": 5, + "token_key": "HTTP_CLIENT_TOKEN", + "type": "http_client" + } + ] + }, + "name": "Pipeline with Source Secret" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with source secret key returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Observability Pipelines", + "frozen_at": "2026-06-22T19:51:31.598Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "destinations": [ + { + "id": "datadog-logs-destination", + "inputs": [ + "my-processor-group" + ], + "type": "datadog_logs" + } + ], + "processor_groups": [ + { + "enabled": true, + "id": "my-processor-group", + "include": "service:my-service", + "inputs": [ + "websocket-source" + ], + "processors": [ + { + "enabled": true, + "id": "filter-processor", + "include": "status:error", + "type": "filter" + } + ] + } + ], + "sources": [ + { + "auth_strategy": "bearer", + "decoding": "json", + "id": "websocket-source", + "tls": { + "mode": "enabled" + }, + "token_key": "WS_BEARER_TOKEN", + "type": "websocket", + "uri_key": "WS_URI" + } + ] + }, + "name": "Pipeline with WebSocket Source" + }, + "type": "pipelines" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[]}\n" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Validate an observability pipeline with websocket source bearer auth returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/okta-integration.json b/test-server-data/v2/okta-integration.json new file mode 100644 index 0000000000..805f1be2d7 --- /dev/null +++ b/test-server-data/v2/okta-integration.json @@ -0,0 +1,347 @@ +{ + "feature": "Okta Integration", + "recordings": [ + { + "feature": "Okta Integration", + "frozen_at": "2024-01-29T14:58:52.386Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "auth_method": "oauth", + "client_id": "client_id", + "client_secret": "client_secret", + "domain": "https://example.okta.com/", + "name": "testaddoktaaccountreturnsokresponse1706540332" + }, + "id": "f749daaf-682e-4208-a38d-c9b43162c609", + "type": "okta-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/okta/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"okta-accounts\",\"attributes\":{\"auth_method\":\"oauth\",\"client_id\":\"client_id\",\"domain\":\"https://example.okta.com/\",\"name\":\"testaddoktaaccountreturnsokresponse1706540332\"},\"id\":\"1e62be98-94ab-403d-9491-98b7fbf9a7de\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/okta/accounts/1e62be98-94ab-403d-9491-98b7fbf9a7de", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Add Okta account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Okta Integration", + "frozen_at": "2023-11-21T16:59:44.767Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "auth_method": "oauth", + "client_id": "fakeclientid", + "client_secret": "fakeclientsecret", + "domain": "https://dev-test.okta.com/", + "name": "testgetoktaaccountreturnsokresponse1700585984" + }, + "type": "okta-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/okta/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"okta-accounts\",\"attributes\":{\"client_id\":\"fakeclientid\",\"auth_method\":\"oauth\",\"domain\":\"https://dev-test.okta.com/\",\"name\":\"testgetoktaaccountreturnsokresponse1700585984\"},\"id\":\"2bf39935-f5c8-46b1-b41b-eda0b4bd2e78\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integrations/okta/accounts/2bf39935-f5c8-46b1-b41b-eda0b4bd2e78", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"okta-accounts\",\"attributes\":{\"client_id\":\"fakeclientid\",\"auth_method\":\"oauth\",\"domain\":\"https://dev-test.okta.com/\",\"name\":\"testgetoktaaccountreturnsokresponse1700585984\"},\"id\":\"2bf39935-f5c8-46b1-b41b-eda0b4bd2e78\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/okta/accounts/2bf39935-f5c8-46b1-b41b-eda0b4bd2e78", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get Okta account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Okta Integration", + "frozen_at": "2023-11-21T16:59:46.153Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "auth_method": "oauth", + "client_id": "fakeclientid", + "client_secret": "fakeclientsecret", + "domain": "https://dev-test.okta.com/", + "name": "testlistoktaaccountsreturnsokresponse1700585986" + }, + "type": "okta-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/okta/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"okta-accounts\",\"attributes\":{\"client_id\":\"fakeclientid\",\"name\":\"testlistoktaaccountsreturnsokresponse1700585986\",\"auth_method\":\"oauth\",\"domain\":\"https://dev-test.okta.com/\"},\"id\":\"a5e9a04b-ac5b-4a5c-a4d5-c697deb232aa\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integrations/okta/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"okta-accounts\",\"attributes\":{\"name\":\"testoktapublicupdateaccountreturnsokresponse1699978854\",\"auth_method\":\"oauth\",\"domain\":\"https://example.okta.com/\",\"client_id\":\"client_id\"},\"id\":\"9637ddf0-4f5e-4adb-89b0-72b7c843116f\"},{\"type\":\"okta-accounts\",\"attributes\":{\"name\":\"testoktapublicupdateaccountreturnsokresponse1699978979\",\"auth_method\":\"oauth\",\"domain\":\"https://example.okta.com/\",\"client_id\":\"client_id\"},\"id\":\"199e06bf-6805-403c-8b97-34c10f526485\"},{\"type\":\"okta-accounts\",\"attributes\":{\"name\":\"testoktapublicupdateaccountreturnsokresponse1699989540\",\"auth_method\":\"oauth\",\"domain\":\"https://example.okta.com/\",\"client_id\":\"client_id\"},\"id\":\"2770caff-0eb2-4edf-b3dd-63b42d706c79\"},{\"type\":\"okta-accounts\",\"attributes\":{\"name\":\"testoktapublicupdateaccountreturnsokresponse1699990165\",\"auth_method\":\"oauth\",\"domain\":\"https://example.okta.com/\",\"client_id\":\"client_id\"},\"id\":\"ee163be4-1a6d-466e-ba9d-539e5c505645\"},{\"type\":\"okta-accounts\",\"attributes\":{\"name\":\"testupdateoktaaccountreturnsokresponse1700585947\",\"auth_method\":\"oauth\",\"domain\":\"https://example.okta.com/\",\"client_id\":\"client_id\"},\"id\":\"474f2d62-fb47-40fc-a201-f0c59c90d3e3\"},{\"type\":\"okta-accounts\",\"attributes\":{\"name\":\"testlistoktaaccountsreturnsokresponse1700585986\",\"auth_method\":\"oauth\",\"domain\":\"https://dev-test.okta.com/\",\"client_id\":\"fakeclientid\"},\"id\":\"a5e9a04b-ac5b-4a5c-a4d5-c697deb232aa\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/okta/accounts/a5e9a04b-ac5b-4a5c-a4d5-c697deb232aa", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List Okta accounts returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Okta Integration", + "frozen_at": "2023-11-21T16:59:47.501Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "auth_method": "oauth", + "client_id": "fakeclientid", + "client_secret": "fakeclientsecret", + "domain": "https://dev-test.okta.com/", + "name": "testupdateoktaaccountreturnsokresponse1700585987" + }, + "type": "okta-accounts" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integrations/okta/accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"okta-accounts\",\"attributes\":{\"domain\":\"https://dev-test.okta.com/\",\"auth_method\":\"oauth\",\"client_id\":\"fakeclientid\",\"name\":\"testupdateoktaaccountreturnsokresponse1700585987\"},\"id\":\"c847a349-9687-4b80-8b0f-996e0e75f73e\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "auth_method": "oauth", + "client_id": "client_id", + "client_secret": "client_secret", + "domain": "https://example.okta.com/" + }, + "type": "okta-accounts" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integrations/okta/accounts/c847a349-9687-4b80-8b0f-996e0e75f73e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"okta-accounts\",\"id\":\"7343985f-6e86-4327-8792-538b4c9b38e9\",\"attributes\":{\"auth_method\":\"oauth\",\"client_id\":\"client_id\",\"domain\":\"https://example.okta.com/\",\"name\":\"testupdateoktaaccountreturnsokresponse1700585987\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integrations/okta/accounts/c847a349-9687-4b80-8b0f-996e0e75f73e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Unknown error occurred: \"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update Okta account returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/on-call.json b/test-server-data/v2/on-call.json new file mode 100644 index 0000000000..24960addd9 --- /dev/null +++ b/test-server-data/v2/on-call.json @@ -0,0 +1,4567 @@ +{ + "feature": "On-Call", + "recordings": [ + { + "feature": "On-Call", + "frozen_at": "2025-11-28T12:58:56.434Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_On_Call_escalation_policy_returns_Created_response-1764334736@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"005f5c53-cc5a-11f0-84fc-d6e063989c3f\",\"attributes\":{\"name\":null,\"handle\":\"test-create_on_call_escalation_policy_returns_created_response-1764334736@datadoghq.com\",\"created_at\":\"2025-11-28T12:58:57.385841+00:00\",\"modified_at\":\"2025-11-28T12:58:57.385841+00:00\",\"email\":\"test-create_on_call_escalation_policy_returns_created_response-1764334736@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/990f6066d8c3647475a637255f95cc7f?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-18T12:58:56.434Z", + "end_date": "2025-12-08T12:58:56.434Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "005f5c53-cc5a-11f0-84fc-d6e063989c3f" + } + } + ], + "name": "Layer 1", + "restrictions": [ + { + "end_day": "friday", + "end_time": "17:00:00", + "start_day": "monday", + "start_time": "09:00:00" + } + ], + "rotation_start": "2025-11-23T12:58:56.434Z" + } + ], + "name": "Test-Create_On_Call_escalation_policy_returns_Created_response-1764334736", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c6a8f167-908f-4ca5-ba30-a33a00adfe11\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Create_On_Call_escalation_policy_returns_Created_response-1764334736\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"928407db-da13-4516-bd6a-3b92e3095b56\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-24ceda96b794cbdd", + "name": "test-name-24ceda96b794cbdd" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e5057194-b5fd-4ff5-b9d3-6977d8bbd774\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":1,\"created_at\":\"2025-11-28T12:58:58.058854+00:00\",\"description\":null,\"handle\":\"test-handle-24ceda96b794cbdd\",\"hidden_modules\":[],\"link_count\":0,\"modified_at\":\"2025-11-28T12:58:58.058854+00:00\",\"name\":\"test-name-24ceda96b794cbdd\",\"summary\":null,\"user_count\":0,\"visible_modules\":[]},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/e5057194-b5fd-4ff5-b9d3-6977d8bbd774/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/e5057194-b5fd-4ff5-b9d3-6977d8bbd774/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_On_Call_escalation_policy_returns_Created_response-1764334736", + "resolve_page_on_policy_end": true, + "retries": 2, + "steps": [ + { + "assignment": "default", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "005f5c53-cc5a-11f0-84fc-d6e063989c3f", + "type": "users" + }, + { + "id": "c6a8f167-908f-4ca5-ba30-a33a00adfe11", + "type": "schedules" + }, + { + "config": { + "schedule": { + "position": "previous" + } + }, + "id": "c6a8f167-908f-4ca5-ba30-a33a00adfe11", + "type": "schedules" + }, + { + "id": "e5057194-b5fd-4ff5-b9d3-6977d8bbd774", + "type": "teams" + } + ] + }, + { + "assignment": "round-robin", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "e5057194-b5fd-4ff5-b9d3-6977d8bbd774", + "type": "teams" + } + ] + } + ] + }, + "relationships": { + "teams": { + "data": [ + { + "id": "e5057194-b5fd-4ff5-b9d3-6977d8bbd774", + "type": "teams" + } + ] + } + }, + "type": "policies" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/escalation-policies", + "query": [ + [ + "include", + "steps.targets" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"84f3ac2b-77da-42f2-a2bb-cb9a5ea9cf55\",\"type\":\"policies\",\"attributes\":{\"name\":\"Test-Create_On_Call_escalation_policy_returns_Created_response-1764334736\",\"resolve_page_on_policy_end\":true,\"retries\":2},\"relationships\":{\"steps\":{\"data\":[{\"id\":\"055817d0-41cb-402f-bb93-0d5989083cd1\",\"type\":\"steps\"},{\"id\":\"ddab41bb-c15d-4ad8-bf29-8d0ddcbb2df1\",\"type\":\"steps\"}]},\"teams\":{\"data\":[{\"id\":\"e5057194-b5fd-4ff5-b9d3-6977d8bbd774\",\"type\":\"teams\"}]}}},\"included\":[{\"id\":\"055817d0-41cb-402f-bb93-0d5989083cd1\",\"type\":\"steps\",\"attributes\":{\"assignment\":\"default\",\"escalate_after_seconds\":3600},\"relationships\":{\"targets\":{\"data\":[{\"id\":\"005f5c53-cc5a-11f0-84fc-d6e063989c3f\",\"type\":\"users\"},{\"id\":\"c6a8f167-908f-4ca5-ba30-a33a00adfe11\",\"type\":\"schedules\"},{\"id\":\"c6a8f167-908f-4ca5-ba30-a33a00adfe11_previous\",\"type\":\"schedule_target\"},{\"id\":\"e5057194-b5fd-4ff5-b9d3-6977d8bbd774\",\"type\":\"teams\"}]}}},{\"id\":\"c6a8f167-908f-4ca5-ba30-a33a00adfe11_previous\",\"type\":\"schedule_target\",\"attributes\":{\"position\":\"previous\"},\"relationships\":{\"schedule\":{\"data\":{\"id\":\"c6a8f167-908f-4ca5-ba30-a33a00adfe11\",\"type\":\"schedules\"}}}},{\"id\":\"ddab41bb-c15d-4ad8-bf29-8d0ddcbb2df1\",\"type\":\"steps\",\"attributes\":{\"assignment\":\"round-robin\",\"escalate_after_seconds\":3600},\"relationships\":{\"targets\":{\"data\":[{\"id\":\"e5057194-b5fd-4ff5-b9d3-6977d8bbd774\",\"type\":\"teams\"}]}}},{\"id\":\"005f5c53-cc5a-11f0-84fc-d6e063989c3f\",\"type\":\"users\",\"attributes\":{\"email\":\"test-create_on_call_escalation_policy_returns_created_response-1764334736@datadoghq.com\",\"name\":\"\",\"status\":\"pending\"}},{\"id\":\"c6a8f167-908f-4ca5-ba30-a33a00adfe11\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Create_On_Call_escalation_policy_returns_Created_response-1764334736\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"928407db-da13-4516-bd6a-3b92e3095b56\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}},{\"id\":\"e5057194-b5fd-4ff5-b9d3-6977d8bbd774\",\"type\":\"teams\",\"attributes\":{\"avatar\":\"\",\"description\":\"\",\"handle\":\"test-handle-24ceda96b794cbdd\",\"name\":\"test-name-24ceda96b794cbdd\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/escalation-policies/84f3ac2b-77da-42f2-a2bb-cb9a5ea9cf55", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/e5057194-b5fd-4ff5-b9d3-6977d8bbd774", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/c6a8f167-908f-4ca5-ba30-a33a00adfe11", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/005f5c53-cc5a-11f0-84fc-d6e063989c3f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create On-Call escalation policy returns \"Created\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-11-27T14:11:22.484Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_On_Call_schedule_returns_Created_response-1764252682@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"f4106d12-cb9a-11f0-a56e-4e680b759023\",\"attributes\":{\"name\":null,\"handle\":\"test-create_on_call_schedule_returns_created_response-1764252682@datadoghq.com\",\"created_at\":\"2025-11-27T14:11:22.860522+00:00\",\"modified_at\":\"2025-11-27T14:11:22.860522+00:00\",\"email\":\"test-create_on_call_schedule_returns_created_response-1764252682@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/97f54253d0353bf6811320274d5cf8eb?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-a115b862e893678b", + "name": "test-name-a115b862e893678b" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"8802359f-5663-4ed4-b3c8-06d5618def25\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":2,\"created_at\":\"2025-11-27T14:11:23.389409+00:00\",\"description\":null,\"handle\":\"test-handle-a115b862e893678b\",\"hidden_modules\":[],\"link_count\":0,\"modified_at\":\"2025-11-27T14:11:23.389409+00:00\",\"name\":\"test-name-a115b862e893678b\",\"summary\":null,\"user_count\":0,\"visible_modules\":[]},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/8802359f-5663-4ed4-b3c8-06d5618def25/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/8802359f-5663-4ed4-b3c8-06d5618def25/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-17T14:11:22.484Z", + "end_date": "2025-12-07T14:11:22.484Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "f4106d12-cb9a-11f0-a56e-4e680b759023" + } + } + ], + "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:22.484Z" + } + ], + "name": "Test-Create_On_Call_schedule_returns_Created_response-1764252682", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "8802359f-5663-4ed4-b3c8-06d5618def25", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f56173aa-b72e-4a29-a9dd-e8a4fe57f47a\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Create_On_Call_schedule_returns_Created_response-1764252682\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"886b9854-9487-4b13-a4a1-955922ced1cf\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"8802359f-5663-4ed4-b3c8-06d5618def25\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/f56173aa-b72e-4a29-a9dd-e8a4fe57f47a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/8802359f-5663-4ed4-b3c8-06d5618def25", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/f4106d12-cb9a-11f0-a56e-4e680b759023", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create On-Call schedule returns \"Created\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-12T14:05:32.425Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_an_On_Call_notification_channel_for_a_user_returns_Created_response-1765548332@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"5ba8ee87-4d71-458c-883d-a6016738f7ce\",\"attributes\":{\"name\":null,\"handle\":\"test-create_an_on_call_notification_channel_for_a_user_returns_created_response-1765548332@datadoghq.com\",\"created_at\":\"2025-12-12T14:05:32.704821+00:00\",\"modified_at\":\"2025-12-12T14:05:32.704821+00:00\",\"email\":\"test-create_an_on_call_notification_channel_for_a_user_returns_created_response-1765548332@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/01791216e0fc8e5e005271e285ad9760?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "address": "foo@bar.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/5ba8ee87-4d71-458c-883d-a6016738f7ce/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f944f63a-2606-43c0-9c0b-10a34b9b214a\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"foo@bar.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/5ba8ee87-4d71-458c-883d-a6016738f7ce", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an On-Call notification channel for a user returns \"Created\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-16T19:30:04.834Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_an_On_Call_notification_rule_for_a_user_returns_Created_response-1765913404@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"2ab53f07-289f-4060-b21a-3d704096aadf\",\"attributes\":{\"name\":null,\"handle\":\"test-create_an_on_call_notification_rule_for_a_user_returns_created_response-1765913404@datadoghq.com\",\"created_at\":\"2025-12-16T19:30:05.014723+00:00\",\"modified_at\":\"2025-12-16T19:30:05.014723+00:00\",\"email\":\"test-create_an_on_call_notification_rule_for_a_user_returns_created_response-1765913404@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/c5ddb15c50d998db06711e0a31591216?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "address": "test-create_an_on_call_notification_rule_for_a_user_returns_created_response-1765913404@datadoghq.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/2ab53f07-289f-4060-b21a-3d704096aadf/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ca8520ce-27e0-4bba-997f-004047cda45d\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-create_an_on_call_notification_rule_for_a_user_returns_created_response-1765913404@datadoghq.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "high_urgency", + "delay_minutes": 0 + }, + "relationships": { + "channel": { + "data": { + "id": "ca8520ce-27e0-4bba-997f-004047cda45d", + "type": "notification_channels" + } + } + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/2ab53f07-289f-4060-b21a-3d704096aadf/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4e551e4f-d1aa-4fce-8cc7-c6bf98925efe\",\"type\":\"notification_rules\",\"attributes\":{\"category\":\"high_urgency\",\"delay_minutes\":0},\"relationships\":{\"channel\":{\"data\":{\"id\":\"ca8520ce-27e0-4bba-997f-004047cda45d\",\"type\":\"notification_channels\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/2ab53f07-289f-4060-b21a-3d704096aadf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an On-Call notification rule for a user returns \"Created\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-11-27T14:11:25.538Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Delete_On_Call_escalation_policy_returns_No_Content_response-1764252685@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"f5e7c666-cb9a-11f0-ae87-2a5e5028fcef\",\"attributes\":{\"name\":null,\"handle\":\"test-delete_on_call_escalation_policy_returns_no_content_response-1764252685@datadoghq.com\",\"created_at\":\"2025-11-27T14:11:25.949558+00:00\",\"modified_at\":\"2025-11-27T14:11:25.949558+00:00\",\"email\":\"test-delete_on_call_escalation_policy_returns_no_content_response-1764252685@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/92ce6e94a63e99ed9306c4b09eb69918?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-5d85b5aacd02cab9", + "name": "test-name-5d85b5aacd02cab9" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a42481db-6918-45ef-a923-5548004f044a\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":9,\"created_at\":\"2025-11-27T14:11:26.456007+00:00\",\"description\":null,\"handle\":\"test-handle-5d85b5aacd02cab9\",\"hidden_modules\":[],\"link_count\":0,\"modified_at\":\"2025-11-27T14:11:26.456008+00:00\",\"name\":\"test-name-5d85b5aacd02cab9\",\"summary\":null,\"user_count\":0,\"visible_modules\":[]},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/a42481db-6918-45ef-a923-5548004f044a/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/a42481db-6918-45ef-a923-5548004f044a/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-17T14:11:25.538Z", + "end_date": "2025-12-07T14:11:25.538Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "f5e7c666-cb9a-11f0-ae87-2a5e5028fcef" + } + } + ], + "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:25.538Z" + } + ], + "name": "Test-Delete_On_Call_escalation_policy_returns_No_Content_response-1764252685", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cf196f34-3ce0-4cff-a27e-ed5035db9442\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Delete_On_Call_escalation_policy_returns_No_Content_response-1764252685\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"2f2ea0a9-a33e-4d2f-9a0b-5cbfb0bed071\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_On_Call_escalation_policy_returns_No_Content_response-1764252685", + "resolve_page_on_policy_end": true, + "retries": 2, + "steps": [ + { + "assignment": "default", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "a42481db-6918-45ef-a923-5548004f044a", + "type": "teams" + }, + { + "id": "cf196f34-3ce0-4cff-a27e-ed5035db9442", + "type": "schedules" + }, + { + "config": { + "schedule": { + "position": "previous" + } + }, + "id": "cf196f34-3ce0-4cff-a27e-ed5035db9442", + "type": "schedules" + }, + { + "id": "f5e7c666-cb9a-11f0-ae87-2a5e5028fcef", + "type": "users" + } + ] + }, + { + "assignment": "round-robin", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "a42481db-6918-45ef-a923-5548004f044a", + "type": "teams" + } + ] + } + ] + }, + "relationships": { + "teams": { + "data": [ + { + "id": "a42481db-6918-45ef-a923-5548004f044a", + "type": "teams" + } + ] + } + }, + "type": "policies" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/escalation-policies", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c25d7cd6-d2bc-4d84-801b-3a09d62e29bc\",\"type\":\"policies\",\"attributes\":{\"name\":\"Test-Delete_On_Call_escalation_policy_returns_No_Content_response-1764252685\",\"resolve_page_on_policy_end\":true,\"retries\":2},\"relationships\":{\"steps\":{\"data\":[{\"id\":\"b445f325-7fca-44d5-a7e2-2a16e8bc2837\",\"type\":\"steps\"},{\"id\":\"b9c6527e-9c8d-4c93-92cf-100b5c180a1e\",\"type\":\"steps\"}]},\"teams\":{\"data\":[{\"id\":\"a42481db-6918-45ef-a923-5548004f044a\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/escalation-policies/c25d7cd6-d2bc-4d84-801b-3a09d62e29bc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/escalation-policies/c25d7cd6-d2bc-4d84-801b-3a09d62e29bc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"escalation_policy[c25d7cd6-d2bc-4d84-801b-3a09d62e29bc] not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/cf196f34-3ce0-4cff-a27e-ed5035db9442", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/a42481db-6918-45ef-a923-5548004f044a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/f5e7c666-cb9a-11f0-ae87-2a5e5028fcef", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete On-Call escalation policy returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-11-27T14:11:30.983Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Delete_On_Call_schedule_returns_No_Content_response-1764252690@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"f9249a49-cb9a-11f0-a56e-4e680b759023\",\"attributes\":{\"name\":null,\"handle\":\"test-delete_on_call_schedule_returns_no_content_response-1764252690@datadoghq.com\",\"created_at\":\"2025-11-27T14:11:31.381378+00:00\",\"modified_at\":\"2025-11-27T14:11:31.381378+00:00\",\"email\":\"test-delete_on_call_schedule_returns_no_content_response-1764252690@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/4d40d1e80a1a87fede5c7a11db2bf7f2?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-17T14:11:30.983Z", + "end_date": "2025-12-07T14:11:30.983Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "f9249a49-cb9a-11f0-a56e-4e680b759023" + } + } + ], + "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:30.983Z" + } + ], + "name": "Test-Delete_On_Call_schedule_returns_No_Content_response-1764252690", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"10acf747-60a0-4bdf-a0df-196e9f9291e2\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Delete_On_Call_schedule_returns_No_Content_response-1764252690\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"806b7079-20af-41d1-9f50-badf49b324f5\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/10acf747-60a0-4bdf-a0df-196e9f9291e2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/10acf747-60a0-4bdf-a0df-196e9f9291e2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"schedule[10acf747-60a0-4bdf-a0df-196e9f9291e2] not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/f9249a49-cb9a-11f0-a56e-4e680b759023", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete On-Call schedule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-11T18:27:50.679Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Delete_an_On_Call_notification_channel_for_a_user_returns_No_Content_response-1765477670@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"1df33be3-5397-4aaf-95c0-00dd63819c80\",\"attributes\":{\"name\":null,\"handle\":\"test-delete_an_on_call_notification_channel_for_a_user_returns_no_content_response-1765477670@datadoghq.com\",\"created_at\":\"2025-12-11T18:27:50.837055+00:00\",\"modified_at\":\"2025-12-11T18:27:50.837055+00:00\",\"email\":\"test-delete_an_on_call_notification_channel_for_a_user_returns_no_content_response-1765477670@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/f0ef01f65aae0d49a442ade4a44a5a53?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "address": "test-delete_an_on_call_notification_channel_for_a_user_returns_no_content_response-1765477670@datadoghq.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/1df33be3-5397-4aaf-95c0-00dd63819c80/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dd22cf57-a576-4c7e-92f8-36c2171f5f99\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-delete_an_on_call_notification_channel_for_a_user_returns_no_content_response-1765477670@datadoghq.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/users/1df33be3-5397-4aaf-95c0-00dd63819c80/notification-channels/dd22cf57-a576-4c7e-92f8-36c2171f5f99", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/1df33be3-5397-4aaf-95c0-00dd63819c80", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete an On-Call notification channel for a user returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-16T19:29:36.256Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Delete_an_On_Call_notification_rule_for_a_user_returns_No_Content_response-1765913376@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"5ebbe76d-c072-4909-ba24-ffa71f4597a0\",\"attributes\":{\"name\":null,\"handle\":\"test-delete_an_on_call_notification_rule_for_a_user_returns_no_content_response-1765913376@datadoghq.com\",\"created_at\":\"2025-12-16T19:29:36.461504+00:00\",\"modified_at\":\"2025-12-16T19:29:36.461504+00:00\",\"email\":\"test-delete_an_on_call_notification_rule_for_a_user_returns_no_content_response-1765913376@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/dad7a8a5508730e67ad8dea90bcc189c?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "address": "test-delete_an_on_call_notification_rule_for_a_user_returns_no_content_response-1765913376@datadoghq.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/5ebbe76d-c072-4909-ba24-ffa71f4597a0/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a557eb68-8b0a-48cf-ac65-73aede790994\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-delete_an_on_call_notification_rule_for_a_user_returns_no_content_response-1765913376@datadoghq.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "high_urgency", + "delay_minutes": 0 + }, + "relationships": { + "channel": { + "data": { + "id": "a557eb68-8b0a-48cf-ac65-73aede790994", + "type": "notification_channels" + } + } + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/5ebbe76d-c072-4909-ba24-ffa71f4597a0/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"71e9f009-5a69-4946-992e-d76b05d1ae61\",\"type\":\"notification_rules\",\"attributes\":{\"category\":\"high_urgency\",\"delay_minutes\":0},\"relationships\":{\"channel\":{\"data\":{\"id\":\"a557eb68-8b0a-48cf-ac65-73aede790994\",\"type\":\"notification_channels\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/users/5ebbe76d-c072-4909-ba24-ffa71f4597a0/notification-rules/71e9f009-5a69-4946-992e-d76b05d1ae61", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/5ebbe76d-c072-4909-ba24-ffa71f4597a0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete an On-Call notification rule for a user returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-11-27T14:11:33.368Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_On_Call_escalation_policy_returns_OK_response-1764252693@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"fa8dbd27-cb9a-11f0-84fc-d6e063989c3f\",\"attributes\":{\"name\":null,\"handle\":\"test-get_on_call_escalation_policy_returns_ok_response-1764252693@datadoghq.com\",\"created_at\":\"2025-11-27T14:11:33.748105+00:00\",\"modified_at\":\"2025-11-27T14:11:33.748105+00:00\",\"email\":\"test-get_on_call_escalation_policy_returns_ok_response-1764252693@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/3b312cc1a86be5f85aab5fada68c24c4?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-9b417dea223136e8", + "name": "test-name-9b417dea223136e8" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bf2fad34-c495-4de0-b1ec-c5727a2ae216\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":8,\"created_at\":\"2025-11-27T14:11:34.252521+00:00\",\"description\":null,\"handle\":\"test-handle-9b417dea223136e8\",\"hidden_modules\":[],\"link_count\":0,\"modified_at\":\"2025-11-27T14:11:34.252521+00:00\",\"name\":\"test-name-9b417dea223136e8\",\"summary\":null,\"user_count\":0,\"visible_modules\":[]},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/bf2fad34-c495-4de0-b1ec-c5727a2ae216/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/bf2fad34-c495-4de0-b1ec-c5727a2ae216/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-17T14:11:33.368Z", + "end_date": "2025-12-07T14:11:33.368Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "fa8dbd27-cb9a-11f0-84fc-d6e063989c3f" + } + } + ], + "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:33.368Z" + } + ], + "name": "Test-Get_On_Call_escalation_policy_returns_OK_response-1764252693", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d8834350-ae3c-45eb-ad84-9f9a3cef46f3\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Get_On_Call_escalation_policy_returns_OK_response-1764252693\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"8d44f496-4fe0-4cc9-b3d7-81bbc3e68464\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_On_Call_escalation_policy_returns_OK_response-1764252693", + "resolve_page_on_policy_end": true, + "retries": 2, + "steps": [ + { + "assignment": "default", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "bf2fad34-c495-4de0-b1ec-c5727a2ae216", + "type": "teams" + }, + { + "id": "d8834350-ae3c-45eb-ad84-9f9a3cef46f3", + "type": "schedules" + }, + { + "config": { + "schedule": { + "position": "previous" + } + }, + "id": "d8834350-ae3c-45eb-ad84-9f9a3cef46f3", + "type": "schedules" + }, + { + "id": "fa8dbd27-cb9a-11f0-84fc-d6e063989c3f", + "type": "users" + } + ] + }, + { + "assignment": "round-robin", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "bf2fad34-c495-4de0-b1ec-c5727a2ae216", + "type": "teams" + } + ] + } + ] + }, + "relationships": { + "teams": { + "data": [ + { + "id": "bf2fad34-c495-4de0-b1ec-c5727a2ae216", + "type": "teams" + } + ] + } + }, + "type": "policies" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/escalation-policies", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7e36daf1-25ef-46af-ba33-23aac9271dc5\",\"type\":\"policies\",\"attributes\":{\"name\":\"Test-Get_On_Call_escalation_policy_returns_OK_response-1764252693\",\"resolve_page_on_policy_end\":true,\"retries\":2},\"relationships\":{\"steps\":{\"data\":[{\"id\":\"e4f3f753-15bd-4649-bdeb-70011094d294\",\"type\":\"steps\"},{\"id\":\"984250f3-e780-4aae-80c1-143859d0f14b\",\"type\":\"steps\"}]},\"teams\":{\"data\":[{\"id\":\"bf2fad34-c495-4de0-b1ec-c5727a2ae216\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/on-call/escalation-policies/7e36daf1-25ef-46af-ba33-23aac9271dc5", + "query": [ + [ + "include", + "steps.targets" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7e36daf1-25ef-46af-ba33-23aac9271dc5\",\"type\":\"policies\",\"attributes\":{\"name\":\"Test-Get_On_Call_escalation_policy_returns_OK_response-1764252693\",\"resolve_page_on_policy_end\":true,\"retries\":2},\"relationships\":{\"steps\":{\"data\":[{\"id\":\"e4f3f753-15bd-4649-bdeb-70011094d294\",\"type\":\"steps\"},{\"id\":\"984250f3-e780-4aae-80c1-143859d0f14b\",\"type\":\"steps\"}]},\"teams\":{\"data\":[{\"id\":\"bf2fad34-c495-4de0-b1ec-c5727a2ae216\",\"type\":\"teams\"}]}}},\"included\":[{\"id\":\"e4f3f753-15bd-4649-bdeb-70011094d294\",\"type\":\"steps\",\"attributes\":{\"assignment\":\"default\",\"escalate_after_seconds\":3600},\"relationships\":{\"targets\":{\"data\":[{\"id\":\"bf2fad34-c495-4de0-b1ec-c5727a2ae216\",\"type\":\"teams\"},{\"id\":\"d8834350-ae3c-45eb-ad84-9f9a3cef46f3\",\"type\":\"schedules\"},{\"id\":\"d8834350-ae3c-45eb-ad84-9f9a3cef46f3_previous\",\"type\":\"schedule_target\"},{\"id\":\"fa8dbd27-cb9a-11f0-84fc-d6e063989c3f\",\"type\":\"users\"}]}}},{\"id\":\"d8834350-ae3c-45eb-ad84-9f9a3cef46f3_previous\",\"type\":\"schedule_target\",\"attributes\":{\"position\":\"previous\"},\"relationships\":{\"schedule\":{\"data\":{\"id\":\"d8834350-ae3c-45eb-ad84-9f9a3cef46f3\",\"type\":\"schedules\"}}}},{\"id\":\"984250f3-e780-4aae-80c1-143859d0f14b\",\"type\":\"steps\",\"attributes\":{\"assignment\":\"round-robin\",\"escalate_after_seconds\":3600},\"relationships\":{\"targets\":{\"data\":[{\"id\":\"bf2fad34-c495-4de0-b1ec-c5727a2ae216\",\"type\":\"teams\"}]}}},{\"id\":\"bf2fad34-c495-4de0-b1ec-c5727a2ae216\",\"type\":\"teams\",\"attributes\":{\"avatar\":\"\",\"description\":\"\",\"handle\":\"test-handle-9b417dea223136e8\",\"name\":\"test-name-9b417dea223136e8\"}},{\"id\":\"d8834350-ae3c-45eb-ad84-9f9a3cef46f3\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Get_On_Call_escalation_policy_returns_OK_response-1764252693\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"8d44f496-4fe0-4cc9-b3d7-81bbc3e68464\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}},{\"id\":\"fa8dbd27-cb9a-11f0-84fc-d6e063989c3f\",\"type\":\"users\",\"attributes\":{\"email\":\"test-get_on_call_escalation_policy_returns_ok_response-1764252693@datadoghq.com\",\"name\":\"\",\"status\":\"pending\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/escalation-policies/7e36daf1-25ef-46af-ba33-23aac9271dc5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/d8834350-ae3c-45eb-ad84-9f9a3cef46f3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/bf2fad34-c495-4de0-b1ec-c5727a2ae216", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/fa8dbd27-cb9a-11f0-84fc-d6e063989c3f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get On-Call escalation policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-11-27T14:11:37.612Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_On_Call_schedule_returns_OK_response-1764252697@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"fd12eb55-cb9a-11f0-8fcd-5ac0b02adf59\",\"attributes\":{\"name\":null,\"handle\":\"test-get_on_call_schedule_returns_ok_response-1764252697@datadoghq.com\",\"created_at\":\"2025-11-27T14:11:37.976362+00:00\",\"modified_at\":\"2025-11-27T14:11:37.976362+00:00\",\"email\":\"test-get_on_call_schedule_returns_ok_response-1764252697@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/56aea300d0912ed694b8ff04cfcc86aa?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-17T14:11:37.612Z", + "end_date": "2025-12-07T14:11:37.612Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "fd12eb55-cb9a-11f0-8fcd-5ac0b02adf59" + } + } + ], + "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:37.612Z" + } + ], + "name": "Test-Get_On_Call_schedule_returns_OK_response-1764252697", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ba513209-ef94-4826-8511-1c5ccb912070\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Get_On_Call_schedule_returns_OK_response-1764252697\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"9bb587a7-8302-49f3-8130-cb417de4ecd5\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/on-call/schedules/ba513209-ef94-4826-8511-1c5ccb912070", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ba513209-ef94-4826-8511-1c5ccb912070\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Get_On_Call_schedule_returns_OK_response-1764252697\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"9bb587a7-8302-49f3-8130-cb417de4ecd5\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/ba513209-ef94-4826-8511-1c5ccb912070", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/fd12eb55-cb9a-11f0-8fcd-5ac0b02adf59", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get On-Call schedule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-12T14:04:17.257Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_an_On_Call_notification_channel_for_a_user_returns_OK_response-1765548257@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"0131b53c-5aec-4c8a-a14f-9ef487448833\",\"attributes\":{\"name\":null,\"handle\":\"test-get_an_on_call_notification_channel_for_a_user_returns_ok_response-1765548257@datadoghq.com\",\"created_at\":\"2025-12-12T14:04:17.531988+00:00\",\"modified_at\":\"2025-12-12T14:04:17.531988+00:00\",\"email\":\"test-get_an_on_call_notification_channel_for_a_user_returns_ok_response-1765548257@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/cedb283c90667a7da02c585159b4eda3?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "address": "test-get_an_on_call_notification_channel_for_a_user_returns_ok_response-1765548257@datadoghq.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/0131b53c-5aec-4c8a-a14f-9ef487448833/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d5fc3f5a-a4b9-4972-80bb-cb4db7ec958b\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-get_an_on_call_notification_channel_for_a_user_returns_ok_response-1765548257@datadoghq.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/on-call/users/0131b53c-5aec-4c8a-a14f-9ef487448833/notification-channels/d5fc3f5a-a4b9-4972-80bb-cb4db7ec958b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d5fc3f5a-a4b9-4972-80bb-cb4db7ec958b\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-get_an_on_call_notification_channel_for_a_user_returns_ok_response-1765548257@datadoghq.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/0131b53c-5aec-4c8a-a14f-9ef487448833", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get an On-Call notification channel for a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-16T21:16:24.271Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_an_On_Call_notification_rule_for_a_user_returns_OK_response-1765919784@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"b2a555c9-ac2d-430d-b321-10e4c0201ce3\",\"attributes\":{\"name\":null,\"handle\":\"test-get_an_on_call_notification_rule_for_a_user_returns_ok_response-1765919784@datadoghq.com\",\"created_at\":\"2025-12-16T21:16:24.480454+00:00\",\"modified_at\":\"2025-12-16T21:16:24.480454+00:00\",\"email\":\"test-get_an_on_call_notification_rule_for_a_user_returns_ok_response-1765919784@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/8e38ab440c2cdd2808a61dfa83f734d7?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "address": "test-get_an_on_call_notification_rule_for_a_user_returns_ok_response-1765919784@datadoghq.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/b2a555c9-ac2d-430d-b321-10e4c0201ce3/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"767234b0-0c79-4092-9b44-a8963021795b\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-get_an_on_call_notification_rule_for_a_user_returns_ok_response-1765919784@datadoghq.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "high_urgency", + "delay_minutes": 0 + }, + "relationships": { + "channel": { + "data": { + "id": "767234b0-0c79-4092-9b44-a8963021795b", + "type": "notification_channels" + } + } + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/b2a555c9-ac2d-430d-b321-10e4c0201ce3/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d07cc90b-4fc5-455f-8f57-45d48a658bc6\",\"type\":\"notification_rules\",\"attributes\":{\"category\":\"high_urgency\",\"delay_minutes\":0},\"relationships\":{\"channel\":{\"data\":{\"id\":\"767234b0-0c79-4092-9b44-a8963021795b\",\"type\":\"notification_channels\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/on-call/users/b2a555c9-ac2d-430d-b321-10e4c0201ce3/notification-rules/d07cc90b-4fc5-455f-8f57-45d48a658bc6", + "query": [ + [ + "include", + "channel" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d07cc90b-4fc5-455f-8f57-45d48a658bc6\",\"type\":\"notification_rules\",\"attributes\":{\"category\":\"high_urgency\",\"delay_minutes\":0},\"relationships\":{\"channel\":{\"data\":{\"id\":\"767234b0-0c79-4092-9b44-a8963021795b\",\"type\":\"notification_channels\"}}}},\"included\":[{\"id\":\"767234b0-0c79-4092-9b44-a8963021795b\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-get_an_on_call_notification_rule_for_a_user_returns_ok_response-1765919784@datadoghq.com\",\"formats\":[\"html\"]}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/b2a555c9-ac2d-430d-b321-10e4c0201ce3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get an On-Call notification rule for a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2026-07-10T09:31:37.503Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_on_call_responders_for_a_schedule_returns_OK_response-1783675897@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"7f1b523e-fe13-4917-8519-6dd314ef17c0\",\"attributes\":{\"uuid\":\"7f1b523e-fe13-4917-8519-6dd314ef17c0\",\"name\":null,\"handle\":\"test-get_on_call_responders_for_a_schedule_returns_ok_response-1783675897@datadoghq.com\",\"created_at\":\"2026-07-10T09:31:38.042683+00:00\",\"modified_at\":\"2026-07-10T09:31:38.042683+00:00\",\"email\":\"test-get_on_call_responders_for_a_schedule_returns_ok_response-1783675897@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/22b76633087bc3ee4427cc67e8466d5e?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2026-06-30T09:31:37.503Z", + "end_date": "2026-07-20T09:31:37.503Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "7f1b523e-fe13-4917-8519-6dd314ef17c0" + } + } + ], + "name": "Layer 1", + "restrictions": [ + { + "end_day": "friday", + "end_time": "17:00:00", + "start_day": "monday", + "start_time": "09:00:00" + } + ], + "rotation_start": "2026-07-05T09:31:37.503Z" + } + ], + "name": "Test-Get_on_call_responders_for_a_schedule_returns_OK_response-1783675897", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"23545b48-fa23-4ea9-a331-3a38f81195cd\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Get_on_call_responders_for_a_schedule_returns_OK_response-1783675897\",\"tags\":[],\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"03edf431-b1a6-418a-965e-9df50275dc7e\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/on-call/schedules/23545b48-fa23-4ea9-a331-3a38f81195cd/responders", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"23545b48-fa23-4ea9-a331-3a38f81195cd-1783675898\",\"type\":\"schedule_oncall_responders\",\"attributes\":{\"scheduled_at\":\"2026-07-10T09:31:38.803561233Z\"},\"relationships\":{\"responders\":{\"data\":[{\"id\":\"23545b48-fa23-4ea9-a331-3a38f81195cd-1783675898-current\",\"type\":\"schedule_oncall_responder\"}]},\"schedule\":{\"data\":{\"id\":\"23545b48-fa23-4ea9-a331-3a38f81195cd\",\"type\":\"schedules\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/23545b48-fa23-4ea9-a331-3a38f81195cd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/7f1b523e-fe13-4917-8519-6dd314ef17c0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get on-call responders for a schedule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-04T08:50:18.341Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_scheduled_on_call_user_returns_OK_response-1764838218@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"42e2447f-d0ee-11f0-b246-f6a778e5e220\",\"attributes\":{\"name\":null,\"handle\":\"test-get_scheduled_on_call_user_returns_ok_response-1764838218@datadoghq.com\",\"created_at\":\"2025-12-04T08:50:19.140471+00:00\",\"modified_at\":\"2025-12-04T08:50:19.140471+00:00\",\"email\":\"test-get_scheduled_on_call_user_returns_ok_response-1764838218@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/6a6c3614a2758d626d4fcde0e9727205?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-24T08:50:18.341Z", + "end_date": "2025-12-14T08:50:18.341Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "42e2447f-d0ee-11f0-b246-f6a778e5e220" + } + } + ], + "name": "Layer 1", + "restrictions": [ + { + "end_day": "friday", + "end_time": "17:00:00", + "start_day": "monday", + "start_time": "09:00:00" + } + ], + "rotation_start": "2025-11-29T08:50:18.341Z" + } + ], + "name": "Test-Get_scheduled_on_call_user_returns_OK_response-1764838218", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7f4eb086-4141-4f2a-ae4a-c0a06816672b\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Get_scheduled_on_call_user_returns_OK_response-1764838218\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"ad5985ec-b9e0-4dc7-aff9-a7bb75fc334f\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/on-call/schedules/7f4eb086-4141-4f2a-ae4a-c0a06816672b/on-call", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"42e2447f-d0ee-11f0-b246-f6a778e5e220-2025-12-04T03:50:19-05:00-2025-12-05T03:50:18-05:00\",\"type\":\"shifts\",\"attributes\":{\"end\":\"2025-12-05T03:50:18-05:00\",\"start\":\"2025-12-04T03:50:19.261184-05:00\"},\"relationships\":{\"user\":{\"data\":{\"id\":\"42e2447f-d0ee-11f0-b246-f6a778e5e220\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/7f4eb086-4141-4f2a-ae4a-c0a06816672b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/42e2447f-d0ee-11f0-b246-f6a778e5e220", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get scheduled on-call user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-11-27T14:11:42.299Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_team_on_call_users_returns_OK_response-1764252702@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"ffde914a-cb9a-11f0-ae87-2a5e5028fcef\",\"attributes\":{\"name\":null,\"handle\":\"test-get_team_on_call_users_returns_ok_response-1764252702@datadoghq.com\",\"created_at\":\"2025-11-27T14:11:42.666467+00:00\",\"modified_at\":\"2025-11-27T14:11:42.666467+00:00\",\"email\":\"test-get_team_on_call_users_returns_ok_response-1764252702@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/0bc277f36ed2ab487375205fafaaebc7?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-ecfc4ff61997ed40", + "name": "test-name-ecfc4ff61997ed40" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fc8f8844-54c3-4898-aabc-68d6fccbe20e\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":11,\"created_at\":\"2025-11-27T14:11:43.090563+00:00\",\"description\":null,\"handle\":\"test-handle-ecfc4ff61997ed40\",\"hidden_modules\":[],\"link_count\":0,\"modified_at\":\"2025-11-27T14:11:43.090563+00:00\",\"name\":\"test-name-ecfc4ff61997ed40\",\"summary\":null,\"user_count\":0,\"visible_modules\":[]},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/fc8f8844-54c3-4898-aabc-68d6fccbe20e/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/fc8f8844-54c3-4898-aabc-68d6fccbe20e/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-17T14:11:42.299Z", + "end_date": "2025-12-07T14:11:42.299Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "ffde914a-cb9a-11f0-ae87-2a5e5028fcef" + } + } + ], + "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:42.299Z" + } + ], + "name": "Test-Get_team_on_call_users_returns_OK_response-1764252702", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4325ddef-dc72-4609-90c2-01167759f277\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Get_team_on_call_users_returns_OK_response-1764252702\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"86d3719a-7516-46f0-bfc4-2bd40ad1b855\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_team_on_call_users_returns_OK_response-1764252702", + "resolve_page_on_policy_end": true, + "retries": 2, + "steps": [ + { + "assignment": "default", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "fc8f8844-54c3-4898-aabc-68d6fccbe20e", + "type": "teams" + }, + { + "id": "4325ddef-dc72-4609-90c2-01167759f277", + "type": "schedules" + }, + { + "config": { + "schedule": { + "position": "previous" + } + }, + "id": "4325ddef-dc72-4609-90c2-01167759f277", + "type": "schedules" + }, + { + "id": "ffde914a-cb9a-11f0-ae87-2a5e5028fcef", + "type": "users" + } + ] + }, + { + "assignment": "round-robin", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "fc8f8844-54c3-4898-aabc-68d6fccbe20e", + "type": "teams" + } + ] + } + ] + }, + "relationships": { + "teams": { + "data": [ + { + "id": "fc8f8844-54c3-4898-aabc-68d6fccbe20e", + "type": "teams" + } + ] + } + }, + "type": "policies" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/escalation-policies", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5a7ecb26-4ebe-4496-bcfb-ff30c655a1a9\",\"type\":\"policies\",\"attributes\":{\"name\":\"Test-Get_team_on_call_users_returns_OK_response-1764252702\",\"resolve_page_on_policy_end\":true,\"retries\":2},\"relationships\":{\"steps\":{\"data\":[{\"id\":\"2694ac87-8900-4b0f-a108-fb8961c7ef89\",\"type\":\"steps\"},{\"id\":\"e41057da-895e-4a23-81f2-617f61c53a84\",\"type\":\"steps\"}]},\"teams\":{\"data\":[{\"id\":\"fc8f8844-54c3-4898-aabc-68d6fccbe20e\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "rules": [ + { + "actions": [], + "policy_id": "5a7ecb26-4ebe-4496-bcfb-ff30c655a1a9", + "query": "", + "urgency": "low" + } + ] + }, + "id": "fc8f8844-54c3-4898-aabc-68d6fccbe20e", + "type": "team_routing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/on-call/teams/fc8f8844-54c3-4898-aabc-68d6fccbe20e/routing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fc8f8844-54c3-4898-aabc-68d6fccbe20e\",\"type\":\"team_routing_rules\",\"relationships\":{\"rules\":{\"data\":[{\"id\":\"virtual-fc8f8844-54c3-4898-aabc-68d6fccbe20e-rule-0\",\"type\":\"team_routing_rules\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/on-call/teams/fc8f8844-54c3-4898-aabc-68d6fccbe20e/on-call", + "query": [ + [ + "include", + "responders,escalations.responders" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fc8f8844-54c3-4898-aabc-68d6fccbe20e-1764252704\",\"type\":\"team_oncall_responders\",\"relationships\":{\"escalations\":{\"data\":[]},\"responders\":{\"data\":[{\"id\":\"ffde914a-cb9a-11f0-ae87-2a5e5028fcef\",\"type\":\"users\"}]}}},\"included\":[{\"id\":\"ffde914a-cb9a-11f0-ae87-2a5e5028fcef\",\"type\":\"users\",\"attributes\":{\"email\":\"test-get_team_on_call_users_returns_ok_response-1764252702@datadoghq.com\",\"name\":\"\",\"status\":\"pending\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "rules": [] + }, + "id": "fc8f8844-54c3-4898-aabc-68d6fccbe20e", + "type": "team_routing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/on-call/teams/fc8f8844-54c3-4898-aabc-68d6fccbe20e/routing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fc8f8844-54c3-4898-aabc-68d6fccbe20e\",\"type\":\"team_routing_rules\",\"relationships\":{\"rules\":{\"data\":[]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/escalation-policies/5a7ecb26-4ebe-4496-bcfb-ff30c655a1a9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/4325ddef-dc72-4609-90c2-01167759f277", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/fc8f8844-54c3-4898-aabc-68d6fccbe20e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/ffde914a-cb9a-11f0-ae87-2a5e5028fcef", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get team on-call users returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-12T14:40:40.219Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-List_On_Call_notification_channels_for_a_user_returns_OK_response-1765550440@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"c7fe3658-67dd-4a91-bf86-3709728fd8a5\",\"attributes\":{\"name\":null,\"handle\":\"test-list_on_call_notification_channels_for_a_user_returns_ok_response-1765550440@datadoghq.com\",\"created_at\":\"2025-12-12T14:40:40.467657+00:00\",\"modified_at\":\"2025-12-12T14:40:40.467657+00:00\",\"email\":\"test-list_on_call_notification_channels_for_a_user_returns_ok_response-1765550440@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/c74061cf101e1fea18813bda82103b47?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "address": "test-list_on_call_notification_channels_for_a_user_returns_ok_response-1765550440@datadoghq.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/c7fe3658-67dd-4a91-bf86-3709728fd8a5/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"8e9a9ded-ff10-4661-8d56-b4b789f54bf1\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-list_on_call_notification_channels_for_a_user_returns_ok_response-1765550440@datadoghq.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/on-call/users/c7fe3658-67dd-4a91-bf86-3709728fd8a5/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"8e9a9ded-ff10-4661-8d56-b4b789f54bf1\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-list_on_call_notification_channels_for_a_user_returns_ok_response-1765550440@datadoghq.com\",\"formats\":[\"html\"]}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/c7fe3658-67dd-4a91-bf86-3709728fd8a5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List On-Call notification channels for a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-16T21:16:48.356Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-List_On_Call_notification_rules_for_a_user_returns_OK_response-1765919808@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"0730802a-ee45-404b-a21d-5908d4c6b3c4\",\"attributes\":{\"name\":null,\"handle\":\"test-list_on_call_notification_rules_for_a_user_returns_ok_response-1765919808@datadoghq.com\",\"created_at\":\"2025-12-16T21:16:48.579239+00:00\",\"modified_at\":\"2025-12-16T21:16:48.579239+00:00\",\"email\":\"test-list_on_call_notification_rules_for_a_user_returns_ok_response-1765919808@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/c2f584fb6a42fbc0f0aad204ea40c0fc?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "address": "test-list_on_call_notification_rules_for_a_user_returns_ok_response-1765919808@datadoghq.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/0730802a-ee45-404b-a21d-5908d4c6b3c4/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3073e724-15e8-4aec-897a-478e31cca3a8\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-list_on_call_notification_rules_for_a_user_returns_ok_response-1765919808@datadoghq.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "high_urgency", + "delay_minutes": 0 + }, + "relationships": { + "channel": { + "data": { + "id": "3073e724-15e8-4aec-897a-478e31cca3a8", + "type": "notification_channels" + } + } + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/0730802a-ee45-404b-a21d-5908d4c6b3c4/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d93215d1-85c1-4528-a92f-1b604c1f4b2a\",\"type\":\"notification_rules\",\"attributes\":{\"category\":\"high_urgency\",\"delay_minutes\":0},\"relationships\":{\"channel\":{\"data\":{\"id\":\"3073e724-15e8-4aec-897a-478e31cca3a8\",\"type\":\"notification_channels\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/on-call/users/0730802a-ee45-404b-a21d-5908d4c6b3c4/notification-rules", + "query": [ + [ + "include", + "channel" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"d93215d1-85c1-4528-a92f-1b604c1f4b2a\",\"type\":\"notification_rules\",\"attributes\":{\"category\":\"high_urgency\",\"delay_minutes\":0},\"relationships\":{\"channel\":{\"data\":{\"id\":\"3073e724-15e8-4aec-897a-478e31cca3a8\",\"type\":\"notification_channels\"}}}}],\"included\":[{\"id\":\"3073e724-15e8-4aec-897a-478e31cca3a8\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-list_on_call_notification_rules_for_a_user_returns_ok_response-1765919808@datadoghq.com\",\"formats\":[\"html\"]}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/0730802a-ee45-404b-a21d-5908d4c6b3c4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List On-Call notification rules for a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2026-05-15T14:39:18.459Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Set_On_Call_team_routing_rules_returns_OK_response-1778855958@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"af4cfd73-8162-49c3-899a-101d0617d500\",\"attributes\":{\"uuid\":\"af4cfd73-8162-49c3-899a-101d0617d500\",\"name\":null,\"handle\":\"test-set_on_call_team_routing_rules_returns_ok_response-1778855958@datadoghq.com\",\"created_at\":\"2026-05-15T14:39:20.154059+00:00\",\"modified_at\":\"2026-05-15T14:39:20.154059+00:00\",\"email\":\"test-set_on_call_team_routing_rules_returns_ok_response-1778855958@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/c530c1e2f9d5cddf9d34bed00a5e760b?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-fc62c73422bed141", + "name": "test-name-fc62c73422bed141" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5f48616e-52b1-4126-a255-0bd9f4820dc1\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":11,\"created_at\":\"2026-05-15T14:39:20.573129+00:00\",\"description\":null,\"handle\":\"test-handle-fc62c73422bed141\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-05-15T14:39:20.573129+00:00\",\"name\":\"test-name-fc62c73422bed141\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/5f48616e-52b1-4126-a255-0bd9f4820dc1/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/5f48616e-52b1-4126-a255-0bd9f4820dc1/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2026-05-05T14:39:18.459Z", + "end_date": "2026-05-25T14:39:18.459Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "af4cfd73-8162-49c3-899a-101d0617d500" + } + } + ], + "name": "Layer 1", + "restrictions": [ + { + "end_day": "friday", + "end_time": "17:00:00", + "start_day": "monday", + "start_time": "09:00:00" + } + ], + "rotation_start": "2026-05-10T14:39:18.459Z" + } + ], + "name": "Test-Set_On_Call_team_routing_rules_returns_OK_response-1778855958", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6417bbaa-a75e-474d-a45a-9af8e1a3907a\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Set_On_Call_team_routing_rules_returns_OK_response-1778855958\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"d2139431-973b-42cc-a932-941aeff81783\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Set_On_Call_team_routing_rules_returns_OK_response-1778855958", + "resolve_page_on_policy_end": true, + "retries": 2, + "steps": [ + { + "assignment": "default", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "5f48616e-52b1-4126-a255-0bd9f4820dc1", + "type": "teams" + }, + { + "id": "6417bbaa-a75e-474d-a45a-9af8e1a3907a", + "type": "schedules" + }, + { + "config": { + "schedule": { + "position": "previous" + } + }, + "id": "6417bbaa-a75e-474d-a45a-9af8e1a3907a", + "type": "schedules" + }, + { + "id": "af4cfd73-8162-49c3-899a-101d0617d500", + "type": "users" + } + ] + }, + { + "assignment": "round-robin", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "5f48616e-52b1-4126-a255-0bd9f4820dc1", + "type": "teams" + } + ] + } + ] + }, + "relationships": { + "teams": { + "data": [ + { + "id": "5f48616e-52b1-4126-a255-0bd9f4820dc1", + "type": "teams" + } + ] + } + }, + "type": "policies" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/escalation-policies", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3321cfa1-8420-4655-ac38-f51ea522834e\",\"type\":\"policies\",\"attributes\":{\"name\":\"Test-Set_On_Call_team_routing_rules_returns_OK_response-1778855958\",\"resolve_page_on_policy_end\":true,\"retries\":2,\"tags\":[]},\"relationships\":{\"steps\":{\"data\":[{\"id\":\"cd41c9ed-3d97-469c-aa8a-9a36c0f45a82\",\"type\":\"steps\"},{\"id\":\"102b0afe-da23-48ca-be15-699891fcbff7\",\"type\":\"steps\"}]},\"teams\":{\"data\":[{\"id\":\"5f48616e-52b1-4126-a255-0bd9f4820dc1\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "rules": [ + { + "actions": [ + { + "policy_id": "3321cfa1-8420-4655-ac38-f51ea522834e", + "type": "escalation_policy", + "urgency": "low" + } + ], + "query": "tags.service:time_restrictions", + "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" + } + }, + { + "actions": [ + { + "ack_timeout_minutes": 30, + "policy_id": "3321cfa1-8420-4655-ac38-f51ea522834e", + "support_hours": { + "restrictions": [ + { + "end_day": "wednesday", + "end_time": "17:00:00", + "start_day": "wednesday", + "start_time": "09:00:00" + }, + { + "end_day": "thursday", + "end_time": "17:00:00", + "start_day": "thursday", + "start_time": "09:00:00" + } + ], + "time_zone": "Europe/Paris" + }, + "type": "escalation_policy", + "urgency": "low" + } + ], + "query": "tags.service:support_hours_and_acknowledgment_timeout" + }, + { + "policy_id": "3321cfa1-8420-4655-ac38-f51ea522834e", + "query": "tags.service:legacy_policy_definition", + "urgency": "low" + }, + { + "actions": [ + { + "policy_id": "3321cfa1-8420-4655-ac38-f51ea522834e", + "type": "escalation_policy", + "urgency": "low" + } + ], + "query": "" + } + ] + }, + "id": "5f48616e-52b1-4126-a255-0bd9f4820dc1", + "type": "team_routing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/on-call/teams/5f48616e-52b1-4126-a255-0bd9f4820dc1/routing-rules", + "query": [ + [ + "include", + "rules" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5f48616e-52b1-4126-a255-0bd9f4820dc1\",\"type\":\"team_routing_rules\",\"relationships\":{\"rules\":{\"data\":[{\"id\":\"d4a7d064-0b02-4510-9412-24c95fdbef89\",\"type\":\"team_routing_rules\"},{\"id\":\"a1a5fdd6-dd2b-4571-a86c-909a89a21490\",\"type\":\"team_routing_rules\"},{\"id\":\"fdbe9494-e88c-4927-bb7e-407c0df33258\",\"type\":\"team_routing_rules\"},{\"id\":\"8e059ecb-b492-4db6-accd-6eb69b4099b1\",\"type\":\"team_routing_rules\"}]}}},\"included\":[{\"id\":\"d4a7d064-0b02-4510-9412-24c95fdbef89\",\"type\":\"team_routing_rules\",\"attributes\":{\"actions\":[{\"type\":\"escalation_policy\",\"policy_id\":\"3321cfa1-8420-4655-ac38-f51ea522834e\",\"urgency\":\"low\"}],\"query\":\"tags.service:time_restrictions\",\"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\":\"3321cfa1-8420-4655-ac38-f51ea522834e\",\"type\":\"policies\"}}}},{\"id\":\"a1a5fdd6-dd2b-4571-a86c-909a89a21490\",\"type\":\"team_routing_rules\",\"attributes\":{\"actions\":[{\"type\":\"escalation_policy\",\"policy_id\":\"3321cfa1-8420-4655-ac38-f51ea522834e\",\"support_hours\":{\"time_zone\":\"Europe/Paris\",\"restrictions\":[{\"start_time\":\"09:00:00\",\"start_day\":\"wednesday\",\"end_time\":\"17:00:00\",\"end_day\":\"wednesday\"},{\"start_time\":\"09:00:00\",\"start_day\":\"thursday\",\"end_time\":\"17:00:00\",\"end_day\":\"thursday\"}]},\"ack_timeout_minutes\":30,\"urgency\":\"low\"}],\"query\":\"tags.service:support_hours_and_acknowledgment_timeout\",\"urgency\":\"low\"},\"relationships\":{\"policy\":{\"data\":{\"id\":\"3321cfa1-8420-4655-ac38-f51ea522834e\",\"type\":\"policies\"}}}},{\"id\":\"fdbe9494-e88c-4927-bb7e-407c0df33258\",\"type\":\"team_routing_rules\",\"attributes\":{\"actions\":[{\"type\":\"escalation_policy\",\"policy_id\":\"3321cfa1-8420-4655-ac38-f51ea522834e\",\"urgency\":\"low\"}],\"query\":\"tags.service:legacy_policy_definition\",\"urgency\":\"low\"},\"relationships\":{\"policy\":{\"data\":{\"id\":\"3321cfa1-8420-4655-ac38-f51ea522834e\",\"type\":\"policies\"}}}},{\"id\":\"8e059ecb-b492-4db6-accd-6eb69b4099b1\",\"type\":\"team_routing_rules\",\"attributes\":{\"actions\":[{\"type\":\"escalation_policy\",\"policy_id\":\"3321cfa1-8420-4655-ac38-f51ea522834e\",\"urgency\":\"low\"}],\"query\":\"\",\"urgency\":\"low\"},\"relationships\":{\"policy\":{\"data\":{\"id\":\"3321cfa1-8420-4655-ac38-f51ea522834e\",\"type\":\"policies\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "rules": [] + }, + "id": "5f48616e-52b1-4126-a255-0bd9f4820dc1", + "type": "team_routing_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/on-call/teams/5f48616e-52b1-4126-a255-0bd9f4820dc1/routing-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5f48616e-52b1-4126-a255-0bd9f4820dc1\",\"type\":\"team_routing_rules\",\"relationships\":{\"rules\":{\"data\":[]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/escalation-policies/3321cfa1-8420-4655-ac38-f51ea522834e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/6417bbaa-a75e-474d-a45a-9af8e1a3907a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/5f48616e-52b1-4126-a255-0bd9f4820dc1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/af4cfd73-8162-49c3-899a-101d0617d500", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Set On-Call team routing rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-11-27T14:11:54.763Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_On_Call_escalation_policy_returns_OK_response-1764252714@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"074d412b-cb9b-11f0-85f9-9a82ffe01443\",\"attributes\":{\"name\":null,\"handle\":\"test-update_on_call_escalation_policy_returns_ok_response-1764252714@datadoghq.com\",\"created_at\":\"2025-11-27T14:11:55.135880+00:00\",\"modified_at\":\"2025-11-27T14:11:55.135880+00:00\",\"email\":\"test-update_on_call_escalation_policy_returns_ok_response-1764252714@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/56710b9d4c6476f7e9cb32cf32f2d8fa?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-87ae65b051bd37ef", + "name": "test-name-87ae65b051bd37ef" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f38d82f9-3de9-4a4a-8a48-650c0b19151f\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":11,\"created_at\":\"2025-11-27T14:11:55.632151+00:00\",\"description\":null,\"handle\":\"test-handle-87ae65b051bd37ef\",\"hidden_modules\":[],\"link_count\":0,\"modified_at\":\"2025-11-27T14:11:55.632152+00:00\",\"name\":\"test-name-87ae65b051bd37ef\",\"summary\":null,\"user_count\":0,\"visible_modules\":[]},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/f38d82f9-3de9-4a4a-8a48-650c0b19151f/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/f38d82f9-3de9-4a4a-8a48-650c0b19151f/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-17T14:11:54.763Z", + "end_date": "2025-12-07T14:11:54.763Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "074d412b-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:54.763Z" + } + ], + "name": "Test-Update_On_Call_escalation_policy_returns_OK_response-1764252714", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"1ab20921-4556-4f30-80df-e1ce748c3fc1\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Update_On_Call_escalation_policy_returns_OK_response-1764252714\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"94644551-c1bd-4b16-8774-ddbf0b6ce12c\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_On_Call_escalation_policy_returns_OK_response-1764252714", + "resolve_page_on_policy_end": true, + "retries": 2, + "steps": [ + { + "assignment": "default", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "f38d82f9-3de9-4a4a-8a48-650c0b19151f", + "type": "teams" + }, + { + "id": "1ab20921-4556-4f30-80df-e1ce748c3fc1", + "type": "schedules" + }, + { + "config": { + "schedule": { + "position": "previous" + } + }, + "id": "1ab20921-4556-4f30-80df-e1ce748c3fc1", + "type": "schedules" + }, + { + "id": "074d412b-cb9b-11f0-85f9-9a82ffe01443", + "type": "users" + } + ] + }, + { + "assignment": "round-robin", + "escalate_after_seconds": 3600, + "targets": [ + { + "id": "f38d82f9-3de9-4a4a-8a48-650c0b19151f", + "type": "teams" + } + ] + } + ] + }, + "relationships": { + "teams": { + "data": [ + { + "id": "f38d82f9-3de9-4a4a-8a48-650c0b19151f", + "type": "teams" + } + ] + } + }, + "type": "policies" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/escalation-policies", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b20fdf89-f87f-4237-8f19-ed8c9c57cf5c\",\"type\":\"policies\",\"attributes\":{\"name\":\"Test-Update_On_Call_escalation_policy_returns_OK_response-1764252714\",\"resolve_page_on_policy_end\":true,\"retries\":2},\"relationships\":{\"steps\":{\"data\":[{\"id\":\"6d4b5398-50bf-425d-93b8-3eae379ff8a0\",\"type\":\"steps\"},{\"id\":\"b3f4a0dd-337f-42b7-9fda-b2f4486e700f\",\"type\":\"steps\"}]},\"teams\":{\"data\":[{\"id\":\"f38d82f9-3de9-4a4a-8a48-650c0b19151f\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_On_Call_escalation_policy_returns_OK_response-1764252714-updated", + "resolve_page_on_policy_end": false, + "retries": 0, + "steps": [ + { + "assignment": "default", + "escalate_after_seconds": 3600, + "id": "6d4b5398-50bf-425d-93b8-3eae379ff8a0", + "targets": [ + { + "id": "074d412b-cb9b-11f0-85f9-9a82ffe01443", + "type": "users" + } + ] + } + ] + }, + "id": "b20fdf89-f87f-4237-8f19-ed8c9c57cf5c", + "relationships": { + "teams": { + "data": [ + { + "id": "f38d82f9-3de9-4a4a-8a48-650c0b19151f", + "type": "teams" + } + ] + } + }, + "type": "policies" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/on-call/escalation-policies/b20fdf89-f87f-4237-8f19-ed8c9c57cf5c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b20fdf89-f87f-4237-8f19-ed8c9c57cf5c\",\"type\":\"policies\",\"attributes\":{\"name\":\"Test-Update_On_Call_escalation_policy_returns_OK_response-1764252714-updated\",\"resolve_page_on_policy_end\":false,\"retries\":0},\"relationships\":{\"steps\":{\"data\":[{\"id\":\"6d4b5398-50bf-425d-93b8-3eae379ff8a0\",\"type\":\"steps\"}]},\"teams\":{\"data\":[{\"id\":\"f38d82f9-3de9-4a4a-8a48-650c0b19151f\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/escalation-policies/b20fdf89-f87f-4237-8f19-ed8c9c57cf5c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/1ab20921-4556-4f30-80df-e1ce748c3fc1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/f38d82f9-3de9-4a4a-8a48-650c0b19151f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/074d412b-cb9b-11f0-85f9-9a82ffe01443", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update On-Call escalation policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-11-27T14:11:59.069Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_On_Call_schedule_returns_OK_response-1764252719@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"09e2b0f4-cb9b-11f0-a56e-4e680b759023\",\"attributes\":{\"name\":null,\"handle\":\"test-update_on_call_schedule_returns_ok_response-1764252719@datadoghq.com\",\"created_at\":\"2025-11-27T14:11:59.470672+00:00\",\"modified_at\":\"2025-11-27T14:11:59.470672+00:00\",\"email\":\"test-update_on_call_schedule_returns_ok_response-1764252719@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/62638e49f4a83e63caabec2a6ab50bba?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-17T14:11:59.069Z", + "end_date": "2025-12-07T14:11:59.069Z", + "interval": { + "days": 1 + }, + "members": [ + { + "user": { + "id": "09e2b0f4-cb9b-11f0-a56e-4e680b759023" + } + } + ], + "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:59.069Z" + } + ], + "name": "Test-Update_On_Call_schedule_returns_OK_response-1764252719", + "time_zone": "America/New_York" + }, + "relationships": { + "teams": { + "data": [ + { + "id": "65aea9d0-941c-4607-bf8a-14fc0dac2820", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/schedules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0e2c2b38-3f21-4216-aeb7-49eb8b371c09\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Update_On_Call_schedule_returns_OK_response-1764252719\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"140f452a-0ecf-48ab-b7e9-e358a2cf925b\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"65aea9d0-941c-4607-bf8a-14fc0dac2820\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-0db1ad1d49052f19", + "name": "test-name-0db1ad1d49052f19" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"500acba0-bf4f-4f5c-83be-d0de24c5739c\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":8,\"created_at\":\"2025-11-27T14:12:00.429799+00:00\",\"description\":null,\"handle\":\"test-handle-0db1ad1d49052f19\",\"hidden_modules\":[],\"link_count\":0,\"modified_at\":\"2025-11-27T14:12:00.429799+00:00\",\"name\":\"test-name-0db1ad1d49052f19\",\"summary\":null,\"user_count\":0,\"visible_modules\":[]},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/500acba0-bf4f-4f5c-83be-d0de24c5739c/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/500acba0-bf4f-4f5c-83be-d0de24c5739c/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "layers": [ + { + "effective_date": "2025-11-17T14:11:59.069Z", + "end_date": "2025-12-07T14:11:59.069Z", + "id": "140f452a-0ecf-48ab-b7e9-e358a2cf925b", + "interval": { + "seconds": 3600 + }, + "members": [ + { + "user": { + "id": "09e2b0f4-cb9b-11f0-a56e-4e680b759023" + } + } + ], + "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:59.069Z" + } + ], + "name": "Test-Update_On_Call_schedule_returns_OK_response-1764252719", + "time_zone": "America/New_York" + }, + "id": "0e2c2b38-3f21-4216-aeb7-49eb8b371c09", + "relationships": { + "teams": { + "data": [ + { + "id": "500acba0-bf4f-4f5c-83be-d0de24c5739c", + "type": "teams" + } + ] + } + }, + "type": "schedules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/on-call/schedules/0e2c2b38-3f21-4216-aeb7-49eb8b371c09", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0e2c2b38-3f21-4216-aeb7-49eb8b371c09\",\"type\":\"schedules\",\"attributes\":{\"name\":\"Test-Update_On_Call_schedule_returns_OK_response-1764252719\",\"time_zone\":\"America/New_York\"},\"relationships\":{\"layers\":{\"data\":[{\"id\":\"140f452a-0ecf-48ab-b7e9-e358a2cf925b\",\"type\":\"layers\"}]},\"teams\":{\"data\":[{\"id\":\"500acba0-bf4f-4f5c-83be-d0de24c5739c\",\"type\":\"teams\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/500acba0-bf4f-4f5c-83be-d0de24c5739c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/on-call/schedules/0e2c2b38-3f21-4216-aeb7-49eb8b371c09", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/09e2b0f4-cb9b-11f0-a56e-4e680b759023", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update On-Call schedule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "On-Call", + "frozen_at": "2025-12-17T01:04:35.713Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_an_On_Call_notification_rule_for_a_user_returns_OK_response-1765933475@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"4ef9cf45-30a8-4117-9b56-adba96671dff\",\"attributes\":{\"name\":null,\"handle\":\"test-update_an_on_call_notification_rule_for_a_user_returns_ok_response-1765933475@datadoghq.com\",\"created_at\":\"2025-12-17T01:04:36.246950+00:00\",\"modified_at\":\"2025-12-17T01:04:36.246950+00:00\",\"email\":\"test-update_an_on_call_notification_rule_for_a_user_returns_ok_response-1765933475@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/53cbcba1803f4569f759fcc6b3f90bb6?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "address": "test-update_an_on_call_notification_rule_for_a_user_returns_ok_response-1765933475@datadoghq.com", + "formats": [ + "html" + ], + "type": "email" + } + }, + "type": "notification_channels" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/4ef9cf45-30a8-4117-9b56-adba96671dff/notification-channels", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7fc326c9-f3dc-4858-80c2-d88c24dcf54b\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-update_an_on_call_notification_rule_for_a_user_returns_ok_response-1765933475@datadoghq.com\",\"formats\":[\"html\"]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "high_urgency", + "delay_minutes": 0 + }, + "relationships": { + "channel": { + "data": { + "id": "7fc326c9-f3dc-4858-80c2-d88c24dcf54b", + "type": "notification_channels" + } + } + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/on-call/users/4ef9cf45-30a8-4117-9b56-adba96671dff/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c7b724f1-eb73-43d4-889f-d8f3e6fbe664\",\"type\":\"notification_rules\",\"attributes\":{\"category\":\"high_urgency\",\"delay_minutes\":0},\"relationships\":{\"channel\":{\"data\":{\"id\":\"7fc326c9-f3dc-4858-80c2-d88c24dcf54b\",\"type\":\"notification_channels\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "category": "high_urgency", + "delay_minutes": 1 + }, + "id": "c7b724f1-eb73-43d4-889f-d8f3e6fbe664", + "relationships": { + "channel": { + "data": { + "id": "7fc326c9-f3dc-4858-80c2-d88c24dcf54b", + "type": "notification_channels" + } + } + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/on-call/users/4ef9cf45-30a8-4117-9b56-adba96671dff/notification-rules/c7b724f1-eb73-43d4-889f-d8f3e6fbe664", + "query": [ + [ + "include", + "channel" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c7b724f1-eb73-43d4-889f-d8f3e6fbe664\",\"type\":\"notification_rules\",\"attributes\":{\"category\":\"high_urgency\",\"delay_minutes\":1},\"relationships\":{\"channel\":{\"data\":{\"id\":\"7fc326c9-f3dc-4858-80c2-d88c24dcf54b\",\"type\":\"notification_channels\"}}}},\"included\":[{\"id\":\"7fc326c9-f3dc-4858-80c2-d88c24dcf54b\",\"type\":\"notification_channels\",\"attributes\":{\"active\":true,\"config\":{\"type\":\"email\",\"address\":\"test-update_an_on_call_notification_rule_for_a_user_returns_ok_response-1765933475@datadoghq.com\",\"formats\":[\"html\"]}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/4ef9cf45-30a8-4117-9b56-adba96671dff", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an On-Call notification rule for a user returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/opsgenie-integration.json b/test-server-data/v2/opsgenie-integration.json new file mode 100644 index 0000000000..4e682930fc --- /dev/null +++ b/test-server-data/v2/opsgenie-integration.json @@ -0,0 +1,424 @@ +{ + "feature": "Opsgenie Integration", + "recordings": [ + { + "feature": "Opsgenie Integration", + "frozen_at": "2022-05-26T18:48:58.998Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_a_new_service_object_returns_CREATED_response-1653590938", + "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", + "region": "us" + }, + "type": "opsgenie-service" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/opsgenie/services", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"custom_url\":null,\"region\":\"us\",\"name\":\"Test-Create_a_new_service_object_returns_CREATED_response-1653590938\"},\"type\":\"opsgenie-service\",\"id\":\"0dcb43af-f233-4cda-b260-37e97e12f66f\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/opsgenie/services/0dcb43af-f233-4cda-b260-37e97e12f66f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new service object returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "frozen_at": "2022-06-13T14:58:47.066Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_a_single_service_object_returns_OK_response-1655132327", + "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", + "region": "us" + }, + "type": "opsgenie-service" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/opsgenie/services", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"region\":\"us\",\"name\":\"Test-Delete_a_single_service_object_returns_OK_response-1655132327\",\"custom_url\":null},\"type\":\"opsgenie-service\",\"id\":\"78050750-0312-400d-ad80-161ea7900931\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/opsgenie/services/78050750-0312-400d-ad80-161ea7900931", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/opsgenie/services/78050750-0312-400d-ad80-161ea7900931", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Service not found.\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a single service object returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "frozen_at": "2022-06-13T14:58:47.782Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_a_single_service_object_returns_OK_response-1655132327", + "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", + "region": "us" + }, + "type": "opsgenie-service" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/opsgenie/services", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"region\":\"us\",\"name\":\"Test-Get_a_single_service_object_returns_OK_response-1655132327\",\"custom_url\":null},\"type\":\"opsgenie-service\",\"id\":\"3ca2db9d-e088-47d1-9bfe-b88463c23f2d\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/opsgenie/services/3ca2db9d-e088-47d1-9bfe-b88463c23f2d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"region\":\"us\",\"name\":\"Test-Get_a_single_service_object_returns_OK_response-1655132327\",\"custom_url\":null},\"type\":\"opsgenie-service\",\"id\":\"3ca2db9d-e088-47d1-9bfe-b88463c23f2d\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/opsgenie/services/3ca2db9d-e088-47d1-9bfe-b88463c23f2d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a single service object returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "frozen_at": "2022-06-13T14:58:48.657Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_all_service_objects_returns_OK_response-1655132328", + "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", + "region": "us" + }, + "type": "opsgenie-service" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/opsgenie/services", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"region\":\"us\",\"name\":\"Test-Get_all_service_objects_returns_OK_response-1655132328\",\"custom_url\":null},\"type\":\"opsgenie-service\",\"id\":\"337861b6-ed46-4c66-b4a0-32d7a4ba94b9\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/integration/opsgenie/services", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"attributes\":{\"region\":\"us\",\"name\":\"Test-Get_all_service_objects_returns_OK_response-1655132328\",\"custom_url\":null},\"type\":\"opsgenie-service\",\"id\":\"337861b6-ed46-4c66-b4a0-32d7a4ba94b9\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/opsgenie/services/337861b6-ed46-4c66-b4a0-32d7a4ba94b9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all service objects returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Opsgenie Integration", + "frozen_at": "2022-06-09T19:57:06.404Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_single_service_object_returns_OK_response-1654804626", + "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", + "region": "us" + }, + "type": "opsgenie-service" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/integration/opsgenie/services", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"region\":\"us\",\"name\":\"Test-Update_a_single_service_object_returns_OK_response-1654804626\",\"custom_url\":null},\"type\":\"opsgenie-service\",\"id\":\"0b04ddfb-b00a-4243-baed-33ff1bff0909\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_single_service_object_returns_OK_response-1654804626--updated", + "opsgenie_api_key": "00000000-0000-0000-0000-000000000000", + "region": "eu" + }, + "id": "0b04ddfb-b00a-4243-baed-33ff1bff0909", + "type": "opsgenie-service" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/integration/opsgenie/services/0b04ddfb-b00a-4243-baed-33ff1bff0909", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"region\":\"eu\",\"name\":\"Test-Update_a_single_service_object_returns_OK_response-1654804626--updated\",\"custom_url\":null},\"type\":\"opsgenie-service\",\"id\":\"0b04ddfb-b00a-4243-baed-33ff1bff0909\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/integration/opsgenie/services/0b04ddfb-b00a-4243-baed-33ff1bff0909", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a single service object returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/org-connections.json b/test-server-data/v2/org-connections.json new file mode 100644 index 0000000000..1a3708d153 --- /dev/null +++ b/test-server-data/v2/org-connections.json @@ -0,0 +1,788 @@ +{ + "feature": "Org Connections", + "recordings": [ + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:35.269Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs", + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"connection between orgs 4dee724d-00cc-11ea-a77b-570c9d03c6c5 and 83999dcd-7f97-11f0-8de1-1ecf66f1aa85 is not allowed\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create Org Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:35.429Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"org_connection\",\"id\":\"b5d3a360-d6e2-4af7-8da2-b2ff41b9f5e0\",\"attributes\":{\"created_at\":\"2025-08-26T20:19:35.554634+00:00\",\"connection_types\":[\"logs\"]},\"relationships\":{\"source_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"name\":\"DD Integration Tests (321813)\"}},\"sink_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"83999dcd-7f97-11f0-8de1-1ecf66f1aa85\",\"name\":\"Cross-Org BDD Test Org\"}},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\",\"name\":\"Amy Li\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"connection between orgs 4dee724d-00cc-11ea-a77b-570c9d03c6c5 and 83999dcd-7f97-11f0-8de1-1ecf66f1aa85 already exists\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/org_connections/b5d3a360-d6e2-4af7-8da2-b2ff41b9f5e0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Org Connection returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:35.916Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "nonexistent-org-id", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not found\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create Org Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:36.045Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"org_connection\",\"id\":\"40bbb1c2-32b2-4aa3-8a1a-5d93b5382e3d\",\"attributes\":{\"created_at\":\"2025-08-26T20:19:36.177236+00:00\",\"connection_types\":[\"logs\"]},\"relationships\":{\"source_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"name\":\"DD Integration Tests (321813)\"}},\"sink_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"83999dcd-7f97-11f0-8de1-1ecf66f1aa85\",\"name\":\"Cross-Org BDD Test Org\"}},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\",\"name\":\"Amy Li\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/org_connections/40bbb1c2-32b2-4aa3-8a1a-5d93b5382e3d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Org Connection returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:36.363Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/org_connections/malformed_id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"connection id must be a valid uuid\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete Org Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:36.481Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/org_connections/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"org connection with id:00000000-0000-0000-0000-000000000000 not found not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Org Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:36.615Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"org_connection\",\"id\":\"7b01f30c-6100-4cbf-b583-a5e353d7edb7\",\"attributes\":{\"created_at\":\"2025-08-26T20:19:36.737560+00:00\",\"connection_types\":[\"logs\"]},\"relationships\":{\"source_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"name\":\"DD Integration Tests (321813)\"}},\"sink_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"83999dcd-7f97-11f0-8de1-1ecf66f1aa85\",\"name\":\"Cross-Org BDD Test Org\"}},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\",\"name\":\"Amy Li\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/org_connections/7b01f30c-6100-4cbf-b583-a5e353d7edb7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/org_connections/7b01f30c-6100-4cbf-b583-a5e353d7edb7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"org connection with id:7b01f30c-6100-4cbf-b583-a5e353d7edb7 not found not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Org Connection returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:37.084Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"total_count\":0,\"total_filtered_count\":0}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Org Connections returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:37.212Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"org_connection\",\"id\":\"76e1a71f-81e5-40c8-b8e0-1b98265d26fe\",\"attributes\":{\"created_at\":\"2025-08-26T20:19:37.335819+00:00\",\"connection_types\":[\"logs\"]},\"relationships\":{\"source_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"name\":\"DD Integration Tests (321813)\"}},\"sink_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"83999dcd-7f97-11f0-8de1-1ecf66f1aa85\",\"name\":\"Cross-Org BDD Test Org\"}},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\",\"name\":\"Amy Li\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs", + "logs" + ] + }, + "id": "76e1a71f-81e5-40c8-b8e0-1b98265d26fe", + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/org_connections/76e1a71f-81e5-40c8-b8e0-1b98265d26fe", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Validation failed for input.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/org_connections/76e1a71f-81e5-40c8-b8e0-1b98265d26fe", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update Org Connection returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:37.609Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"org_connection\",\"id\":\"d348b9ab-c7cf-4298-83a6-b4762fafff5e\",\"attributes\":{\"created_at\":\"2025-08-26T20:19:37.737812+00:00\",\"connection_types\":[\"logs\"]},\"relationships\":{\"source_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"name\":\"DD Integration Tests (321813)\"}},\"sink_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"83999dcd-7f97-11f0-8de1-1ecf66f1aa85\",\"name\":\"Cross-Org BDD Test Org\"}},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\",\"name\":\"Amy Li\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs", + "metrics" + ] + }, + "id": "00000000-0000-0000-0000-000000000000", + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/org_connections/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Org connection with id:00000000-0000-0000-0000-000000000000 not found not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/org_connections/d348b9ab-c7cf-4298-83a6-b4762fafff5e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update Org Connection returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Org Connections", + "frozen_at": "2025-08-26T20:19:38.089Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs" + ] + }, + "relationships": { + "sink_org": { + "data": { + "id": "83999dcd-7f97-11f0-8de1-1ecf66f1aa85", + "type": "orgs" + } + } + }, + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/org_connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"org_connection\",\"id\":\"0105233a-4d7b-4c52-b364-cc968d003de0\",\"attributes\":{\"created_at\":\"2025-08-26T20:19:38.208326+00:00\",\"connection_types\":[\"logs\"]},\"relationships\":{\"source_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\",\"name\":\"DD Integration Tests (321813)\"}},\"sink_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"83999dcd-7f97-11f0-8de1-1ecf66f1aa85\",\"name\":\"Cross-Org BDD Test Org\"}},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\",\"name\":\"Amy Li\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "connection_types": [ + "logs", + "metrics" + ] + }, + "id": "0105233a-4d7b-4c52-b364-cc968d003de0", + "type": "org_connection" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/org_connections/0105233a-4d7b-4c52-b364-cc968d003de0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"org_connection\",\"id\":\"0105233a-4d7b-4c52-b364-cc968d003de0\",\"attributes\":{\"created_at\":\"2025-08-26T20:19:38.208326+00:00\",\"connection_types\":[\"logs\",\"metrics\"]},\"relationships\":{\"source_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}},\"sink_org\":{\"data\":{\"type\":\"orgs\",\"id\":\"83999dcd-7f97-11f0-8de1-1ecf66f1aa85\"}},\"created_by\":{\"data\":{\"type\":\"users\",\"id\":\"03e6bc43-7ecc-11f0-b50b-f28f2be41840\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/org_connections/0105233a-4d7b-4c52-b364-cc968d003de0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update Org Connection returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/organizations.json b/test-server-data/v2/organizations.json new file mode 100644 index 0000000000..9245a8e35f --- /dev/null +++ b/test-server-data/v2/organizations.json @@ -0,0 +1,276 @@ +{ + "feature": "Organizations", + "recordings": [ + { + "feature": "Organizations", + "frozen_at": "2024-06-12T14:43:53.056Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/org_configs/i_dont_exist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"OrgConfig: i_dont_exist not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a specific Org Config value returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "frozen_at": "2024-06-12T14:43:53.592Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/org_configs/custom_roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"org_configs\",\"id\":\"d4a6259b-5599-5120-8bdb-22718cb09118\",\"attributes\":{\"name\":\"custom_roles\",\"description\":\"Enables the custom roles (RBAC) UI.\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a specific Org Config value returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "frozen_at": "2024-06-12T14:43:54.065Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/org_configs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"org_configs\",\"id\":\"4c2b0cec-de6d-5030-b3fd-391b34ff99eb\",\"attributes\":{\"name\":\"invalid_session_30_days\",\"description\":\"Test test test\",\"value_type\":\"bool\",\"value\":true,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"ae6ea27d-7945-56c9-a12b-37fc3b094459\",\"attributes\":{\"name\":\"my_new_org_config_key_name\",\"description\":\"This is a description\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"0e63d108-84c3-55c7-9767-e00b21e5bc30\",\"attributes\":{\"name\":\"domain_allowlist\",\"description\":\"domain allowlist for emails to be sent\",\"value_type\":\"email_domain_list\",\"value\":[],\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"3081bbc5-6227-5e58-86e3-835fa2b72858\",\"attributes\":{\"name\":\"enable_domain_allowlist\",\"description\":\"domain allowlist enablement for emails to be sent\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"86f9a647-f7f9-5181-aa4a-2530bdcb4374\",\"attributes\":{\"name\":\"30d_invite_expiration\",\"description\":\"This will set the expiration date of Org invites to 30 days instead of the default 2 days\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"5639dc2d-d96a-558a-b2bb-c563b5a7d609\",\"attributes\":{\"name\":\"oauth_client_disallow_list\",\"description\":\"Disallow list for oauth clients users can authorize with in a given org.\",\"value_type\":\"list\",\"value\":[],\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"336c724c-521f-559e-9b43-28b38289ab64\",\"attributes\":{\"name\":\"restrict_export_to_csv\",\"description\":\"Disables the ability to export Logs to CSV via the API and UI for all users of an org.\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"b2935166-5372-53a7-9c91-632d39c81dba\",\"attributes\":{\"name\":\"pci_enabled\",\"description\":\"pci compliance is enabled for this org\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"bddab2d2-e3b8-5103-b74f-be209608a3cf\",\"attributes\":{\"name\":\"invalid_session_forced_logout\",\"description\":\"Force reload on current_user 403 response / invalid session. Checked every minute.\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"d4a6259b-5599-5120-8bdb-22718cb09118\",\"attributes\":{\"name\":\"custom_roles\",\"description\":\"Enables the custom roles (RBAC) UI.\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"61d24356-1d0a-51b2-ac77-16bddb9a4fbc\",\"attributes\":{\"name\":\"log_anomaly_detection\",\"description\":\"Whether the API should return results for Logs Anomaly detection\",\"value_type\":\"bool\",\"value\":true,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"4fcf5523-7578-5ebb-bf7f-cc0b96047ea5\",\"attributes\":{\"name\":\"logs_has_set_flex_log_compute\",\"description\":\"Org config used to know an org has set flex log compute. This is useful to sync the log query UI and preferred query storage type with flex log enablement.\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"1e20f9a8-ef08-5716-a466-d650854c9c62\",\"attributes\":{\"name\":\"open_retentions\",\"description\":\"Enables users to set out of contract retentions.\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"87eeb191-0e80-575d-9b1f-2efed8aae16d\",\"attributes\":{\"name\":\"admin_only_invites\",\"description\":\"Restrict user invites to only admins\",\"value_type\":\"bool\",\"value\":false,\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"47d07447-cee4-5f45-820a-3595c8c1ce21\",\"attributes\":{\"name\":\"security_contacts\",\"description\":\"List of emails for security event notifications of an organization\",\"value_type\":\"security_contacts_list\",\"value\":[],\"modified_at\":\"2024-05-06T13:51:46.470206+00:00\"}},{\"type\":\"org_configs\",\"id\":\"ba76efd8-79f3-52ee-8742-856c18e754c7\",\"attributes\":{\"name\":\"teams_manage_membership\",\"description\":\"Controls who can manage membership for teams\",\"value_type\":\"enum\",\"value\":\"organization\",\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"63be605e-4cc3-566b-94d8-475ab5137e25\",\"attributes\":{\"name\":\"teams_edit_details\",\"description\":\"Controls who can edit team details\",\"value_type\":\"enum\",\"value\":\"members\",\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"855e9fc7-449d-5fbf-9607-9f9bfca3dddf\",\"attributes\":{\"name\":\"teams_provisioning_sources\",\"description\":\"Determines how users can be added to teams\",\"value_type\":\"enum\",\"value\":\"manually\",\"modified_at\":null}},{\"type\":\"org_configs\",\"id\":\"54efd4ec-bb21-5e8a-9cb8-712e18f8b6b7\",\"attributes\":{\"name\":\"monitor_timezone\",\"description\":\"Sets the time zone used for monitoring alerts\",\"value_type\":\"enum\",\"value\":\"UTC\",\"modified_at\":null}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Org Configs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "frozen_at": "2024-06-12T14:43:54.474Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "value": "not-a-boolean" + }, + "type": "org_configs" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/org_configs/custom_roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"The value provided for parameter 'OrgConfig: not-a-boolean' is invalid\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update a specific Org Config returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "frozen_at": "2024-06-12T14:43:54.951Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "value": [] + }, + "type": "org_configs" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/org_configs/i_dont_exist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"OrgConfig: i_dont_exist not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a specific Org Config returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "frozen_at": "2024-06-12T14:43:55.410Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "value": "UTC" + }, + "type": "org_configs" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/org_configs/monitor_timezone", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"org_configs\",\"id\":\"54efd4ec-bb21-5e8a-9cb8-712e18f8b6b7\",\"attributes\":{\"name\":\"monitor_timezone\",\"description\":\"Sets the time zone used for monitoring alerts\",\"value_type\":\"enum\",\"value\":\"UTC\",\"modified_at\":\"2024-06-12T14:43:55.693935+00:00\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a specific Org Config returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "frozen_at": "2022-05-12T09:52:32.998Z", + "interactions": [ + { + "request": { + "body": { + "type": "text", + "value": "--xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\nContent-Disposition: form-data; name=\"idp_file\"; filename=\"invalid_idp_metadata.xml\"\r\nContent-Type: application/xml\r\n\r\n\ni am > bad xml\n\r\n--xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--\r\n" + }, + "content_type": "multipart/form-data", + "method": "POST", + "path": "/api/v2/saml_configurations/idp_metadata", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Invalid metadata\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Upload IdP metadata returns \"Bad Request - caused by either malformed XML or invalid SAML IdP metadata\" response", + "version": "v2" + }, + { + "feature": "Organizations", + "frozen_at": "2022-05-12T09:52:33.641Z", + "interactions": [ + { + "request": { + "body": { + "type": "text", + "value": "--xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\nContent-Disposition: form-data; name=\"idp_file\"; filename=\"valid_idp_metadata.xml\"\r\nContent-Type: application/xml\r\n\r\n\n\n \n \n \n \n MIIC8jCCAlugAwIBAgIJAJHg2V5J31I8MA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNV\n BAYTAlNFMQ0wCwYDVQQHEwRVbWVhMRgwFgYDVQQKEw9VbWVhIFVuaXZlcnNpdHkx\n EDAOBgNVBAsTB0lUIFVuaXQxEDAOBgNVBAMTB1Rlc3QgU1AwHhcNMDkxMDI2MTMz\n MTE1WhcNMTAxMDI2MTMzMTE1WjBaMQswCQYDVQQGEwJTRTENMAsGA1UEBxMEVW1l\n YTEYMBYGA1UEChMPVW1lYSBVbml2ZXJzaXR5MRAwDgYDVQQLEwdJVCBVbml0MRAw\n DgYDVQQDEwdUZXN0IFNQMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkJWP7\n bwOxtH+E15VTaulNzVQ/0cSbM5G7abqeqSNSs0l0veHr6/ROgW96ZeQ57fzVy2MC\n FiQRw2fzBs0n7leEmDJyVVtBTavYlhAVXDNa3stgvh43qCfLx+clUlOvtnsoMiiR\n mo7qf0BoPKTj7c0uLKpDpEbAHQT4OF1HRYVxMwIDAQABo4G/MIG8MB0GA1UdDgQW\n BBQ7RgbMJFDGRBu9o3tDQDuSoBy7JjCBjAYDVR0jBIGEMIGBgBQ7RgbMJFDGRBu9\n o3tDQDuSoBy7JqFepFwwWjELMAkGA1UEBhMCU0UxDTALBgNVBAcTBFVtZWExGDAW\n BgNVBAoTD1VtZWEgVW5pdmVyc2l0eTEQMA4GA1UECxMHSVQgVW5pdDEQMA4GA1UE\n AxMHVGVzdCBTUIIJAJHg2V5J31I8MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF\n BQADgYEAMuRwwXRnsiyWzmRikpwinnhTmbooKm5TINPE7A7gSQ710RxioQePPhZO\n zkM27NnHTrCe2rBVg0EGz7QTd1JIwLPvgoj4VTi/fSha/tXrYUaqc9AqU1kWI4WN\n +vffBGQ09mo+6CffuFTZYeOhzP/2stAPwCTU4kxEoiy0KpZMANI=\n \n \n \n \n \n \n \n MIIC8jCCAlugAwIBAgIJAJHg2V5J31I8MA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNV\n BAYTAlNFMQ0wCwYDVQQHEwRVbWVhMRgwFgYDVQQKEw9VbWVhIFVuaXZlcnNpdHkx\n EDAOBgNVBAsTB0lUIFVuaXQxEDAOBgNVBAMTB1Rlc3QgU1AwHhcNMDkxMDI2MTMz\n MTE1WhcNMTAxMDI2MTMzMTE1WjBaMQswCQYDVQQGEwJTRTENMAsGA1UEBxMEVW1l\n YTEYMBYGA1UEChMPVW1lYSBVbml2ZXJzaXR5MRAwDgYDVQQLEwdJVCBVbml0MRAw\n DgYDVQQDEwdUZXN0IFNQMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkJWP7\n bwOxtH+E15VTaulNzVQ/0cSbM5G7abqeqSNSs0l0veHr6/ROgW96ZeQ57fzVy2MC\n FiQRw2fzBs0n7leEmDJyVVtBTavYlhAVXDNa3stgvh43qCfLx+clUlOvtnsoMiiR\n mo7qf0BoPKTj7c0uLKpDpEbAHQT4OF1HRYVxMwIDAQABo4G/MIG8MB0GA1UdDgQW\n BBQ7RgbMJFDGRBu9o3tDQDuSoBy7JjCBjAYDVR0jBIGEMIGBgBQ7RgbMJFDGRBu9\n o3tDQDuSoBy7JqFepFwwWjELMAkGA1UEBhMCU0UxDTALBgNVBAcTBFVtZWExGDAW\n BgNVBAoTD1VtZWEgVW5pdmVyc2l0eTEQMA4GA1UECxMHSVQgVW5pdDEQMA4GA1UE\n AxMHVGVzdCBTUIIJAJHg2V5J31I8MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF\n BQADgYEAMuRwwXRnsiyWzmRikpwinnhTmbooKm5TINPE7A7gSQ710RxioQePPhZO\n zkM27NnHTrCe2rBVg0EGz7QTd1JIwLPvgoj4VTi/fSha/tXrYUaqc9AqU1kWI4WN\n +vffBGQ09mo+6CffuFTZYeOhzP/2stAPwCTU4kxEoiy0KpZMANI=\n \n \n \n \n \n \n \n \n \n \n \n urn:oasis:names:tc:SAML:2.0:nameid-format:transient\n urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\n \n \n \n \n \n \n \n \n \n \n \n MIIC8jCCAlugAwIBAgIJAJHg2V5J31I8MA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNV\n BAYTAlNFMQ0wCwYDVQQHEwRVbWVhMRgwFgYDVQQKEw9VbWVhIFVuaXZlcnNpdHkx\n EDAOBgNVBAsTB0lUIFVuaXQxEDAOBgNVBAMTB1Rlc3QgU1AwHhcNMDkxMDI2MTMz\n MTE1WhcNMTAxMDI2MTMzMTE1WjBaMQswCQYDVQQGEwJTRTENMAsGA1UEBxMEVW1l\n YTEYMBYGA1UEChMPVW1lYSBVbml2ZXJzaXR5MRAwDgYDVQQLEwdJVCBVbml0MRAw\n DgYDVQQDEwdUZXN0IFNQMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkJWP7\n bwOxtH+E15VTaulNzVQ/0cSbM5G7abqeqSNSs0l0veHr6/ROgW96ZeQ57fzVy2MC\n FiQRw2fzBs0n7leEmDJyVVtBTavYlhAVXDNa3stgvh43qCfLx+clUlOvtnsoMiiR\n mo7qf0BoPKTj7c0uLKpDpEbAHQT4OF1HRYVxMwIDAQABo4G/MIG8MB0GA1UdDgQW\n BBQ7RgbMJFDGRBu9o3tDQDuSoBy7JjCBjAYDVR0jBIGEMIGBgBQ7RgbMJFDGRBu9\n o3tDQDuSoBy7JqFepFwwWjELMAkGA1UEBhMCU0UxDTALBgNVBAcTBFVtZWExGDAW\n BgNVBAoTD1VtZWEgVW5pdmVyc2l0eTEQMA4GA1UECxMHSVQgVW5pdDEQMA4GA1UE\n AxMHVGVzdCBTUIIJAJHg2V5J31I8MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF\n BQADgYEAMuRwwXRnsiyWzmRikpwinnhTmbooKm5TINPE7A7gSQ710RxioQePPhZO\n zkM27NnHTrCe2rBVg0EGz7QTd1JIwLPvgoj4VTi/fSha/tXrYUaqc9AqU1kWI4WN\n +vffBGQ09mo+6CffuFTZYeOhzP/2stAPwCTU4kxEoiy0KpZMANI=\n \n \n \n \n \n \n \n MIIC8jCCAlugAwIBAgIJAJHg2V5J31I8MA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNV\n BAYTAlNFMQ0wCwYDVQQHEwRVbWVhMRgwFgYDVQQKEw9VbWVhIFVuaXZlcnNpdHkx\n EDAOBgNVBAsTB0lUIFVuaXQxEDAOBgNVBAMTB1Rlc3QgU1AwHhcNMDkxMDI2MTMz\n MTE1WhcNMTAxMDI2MTMzMTE1WjBaMQswCQYDVQQGEwJTRTENMAsGA1UEBxMEVW1l\n YTEYMBYGA1UEChMPVW1lYSBVbml2ZXJzaXR5MRAwDgYDVQQLEwdJVCBVbml0MRAw\n DgYDVQQDEwdUZXN0IFNQMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkJWP7\n bwOxtH+E15VTaulNzVQ/0cSbM5G7abqeqSNSs0l0veHr6/ROgW96ZeQ57fzVy2MC\n FiQRw2fzBs0n7leEmDJyVVtBTavYlhAVXDNa3stgvh43qCfLx+clUlOvtnsoMiiR\n mo7qf0BoPKTj7c0uLKpDpEbAHQT4OF1HRYVxMwIDAQABo4G/MIG8MB0GA1UdDgQW\n BBQ7RgbMJFDGRBu9o3tDQDuSoBy7JjCBjAYDVR0jBIGEMIGBgBQ7RgbMJFDGRBu9\n o3tDQDuSoBy7JqFepFwwWjELMAkGA1UEBhMCU0UxDTALBgNVBAcTBFVtZWExGDAW\n BgNVBAoTD1VtZWEgVW5pdmVyc2l0eTEQMA4GA1UECxMHSVQgVW5pdDEQMA4GA1UE\n AxMHVGVzdCBTUIIJAJHg2V5J31I8MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF\n BQADgYEAMuRwwXRnsiyWzmRikpwinnhTmbooKm5TINPE7A7gSQ710RxioQePPhZO\n zkM27NnHTrCe2rBVg0EGz7QTd1JIwLPvgoj4VTi/fSha/tXrYUaqc9AqU1kWI4WN\n +vffBGQ09mo+6CffuFTZYeOhzP/2stAPwCTU4kxEoiy0KpZMANI=\n \n \n \n \n \n \n \n \n \n \n MIIC8jCCAlugAwIBAgIJAJHg2V5J31I8MA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNV\n BAYTAlNFMQ0wCwYDVQQHEwRVbWVhMRgwFgYDVQQKEw9VbWVhIFVuaXZlcnNpdHkx\n EDAOBgNVBAsTB0lUIFVuaXQxEDAOBgNVBAMTB1Rlc3QgU1AwHhcNMDkxMDI2MTMz\n MTE1WhcNMTAxMDI2MTMzMTE1WjBaMQswCQYDVQQGEwJTRTENMAsGA1UEBxMEVW1l\n YTEYMBYGA1UEChMPVW1lYSBVbml2ZXJzaXR5MRAwDgYDVQQLEwdJVCBVbml0MRAw\n DgYDVQQDEwdUZXN0IFNQMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkJWP7\n bwOxtH+E15VTaulNzVQ/0cSbM5G7abqeqSNSs0l0veHr6/ROgW96ZeQ57fzVy2MC\n FiQRw2fzBs0n7leEmDJyVVtBTavYlhAVXDNa3stgvh43qCfLx+clUlOvtnsoMiiR\n mo7qf0BoPKTj7c0uLKpDpEbAHQT4OF1HRYVxMwIDAQABo4G/MIG8MB0GA1UdDgQW\n BBQ7RgbMJFDGRBu9o3tDQDuSoBy7JjCBjAYDVR0jBIGEMIGBgBQ7RgbMJFDGRBu9\n o3tDQDuSoBy7JqFepFwwWjELMAkGA1UEBhMCU0UxDTALBgNVBAcTBFVtZWExGDAW\n BgNVBAoTD1VtZWEgVW5pdmVyc2l0eTEQMA4GA1UECxMHSVQgVW5pdDEQMA4GA1UE\n AxMHVGVzdCBTUIIJAJHg2V5J31I8MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF\n BQADgYEAMuRwwXRnsiyWzmRikpwinnhTmbooKm5TINPE7A7gSQ710RxioQePPhZO\n zkM27NnHTrCe2rBVg0EGz7QTd1JIwLPvgoj4VTi/fSha/tXrYUaqc9AqU1kWI4WN\n +vffBGQ09mo+6CffuFTZYeOhzP/2stAPwCTU4kxEoiy0KpZMANI=\n \n \n \n \n \n \n \n MIIC8jCCAlugAwIBAgIJAJHg2V5J31I8MA0GCSqGSIb3DQEBBQUAMFoxCzAJBgNV\n BAYTAlNFMQ0wCwYDVQQHEwRVbWVhMRgwFgYDVQQKEw9VbWVhIFVuaXZlcnNpdHkx\n EDAOBgNVBAsTB0lUIFVuaXQxEDAOBgNVBAMTB1Rlc3QgU1AwHhcNMDkxMDI2MTMz\n MTE1WhcNMTAxMDI2MTMzMTE1WjBaMQswCQYDVQQGEwJTRTENMAsGA1UEBxMEVW1l\n YTEYMBYGA1UEChMPVW1lYSBVbml2ZXJzaXR5MRAwDgYDVQQLEwdJVCBVbml0MRAw\n DgYDVQQDEwdUZXN0IFNQMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDkJWP7\n bwOxtH+E15VTaulNzVQ/0cSbM5G7abqeqSNSs0l0veHr6/ROgW96ZeQ57fzVy2MC\n FiQRw2fzBs0n7leEmDJyVVtBTavYlhAVXDNa3stgvh43qCfLx+clUlOvtnsoMiiR\n mo7qf0BoPKTj7c0uLKpDpEbAHQT4OF1HRYVxMwIDAQABo4G/MIG8MB0GA1UdDgQW\n BBQ7RgbMJFDGRBu9o3tDQDuSoBy7JjCBjAYDVR0jBIGEMIGBgBQ7RgbMJFDGRBu9\n o3tDQDuSoBy7JqFepFwwWjELMAkGA1UEBhMCU0UxDTALBgNVBAcTBFVtZWExGDAW\n BgNVBAoTD1VtZWEgVW5pdmVyc2l0eTEQMA4GA1UECxMHSVQgVW5pdDEQMA4GA1UE\n AxMHVGVzdCBTUIIJAJHg2V5J31I8MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF\n BQADgYEAMuRwwXRnsiyWzmRikpwinnhTmbooKm5TINPE7A7gSQ710RxioQePPhZO\n zkM27NnHTrCe2rBVg0EGz7QTd1JIwLPvgoj4VTi/fSha/tXrYUaqc9AqU1kWI4WN\n +vffBGQ09mo+6CffuFTZYeOhzP/2stAPwCTU4kxEoiy0KpZMANI=\n \n \n \n \n \n urn:oasis:names:tc:SAML:2.0:nameid-format:transient\n urn:oasis:names:tc:SAML:2.0:nameid-format:persistent\n \n \n Rolands Identiteter\n Rolands Identiteter\n http://www.example.com\n \n \n Roland\n Hedberg\n technical@example.com\n \n \n Support\n support@example.com\n \n\n\r\n--xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx--\r\n" + }, + "content_type": "multipart/form-data", + "method": "POST", + "path": "/api/v2/saml_configurations/idp_metadata", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"saml_configurations\",\"id\":\"86ce4823-31da-445b-8cb1-3f535c8c3686\",\"attributes\":{\"entity_id\":\"https://app.datadoghq.com/account/saml/metadata.xml\",\"assertion_consumer_service\":[\"https://frog.datadoghq.com/account/saml/assertion\"],\"created_at\":\"2022-03-21T13:04:08.689835+00:00\",\"idp_initiated\":false,\"jit_domains\":[],\"sso_url\":null,\"modified_at\":\"2022-04-11T13:21:55.620272+00:00\"}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Upload IdP metadata returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/powerpack.json b/test-server-data/v2/powerpack.json new file mode 100644 index 0000000000..db6511890e --- /dev/null +++ b/test-server-data/v2/powerpack.json @@ -0,0 +1,1081 @@ +{ + "feature": "Powerpack", + "recordings": [ + { + "feature": "Powerpack", + "frozen_at": "2023-10-05T15:56:23.491Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Powerpack for ABC", + "group_widget": { + "definition": { + "layout_type": "ordered", + "type": "group1", + "widgets": [] + } + }, + "name": "Sample Powerpack", + "tags": [ + "tag:foo1" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "test" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/powerpacks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid group widget for powerpack. Error: 'group1' is not one of ['group']\\n\\nFailed validating 'enum' in schema['properties']['type']:\\n {'enum': ['group']}\\n\\nOn instance['type']:\\n 'group1'.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new powerpack returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-24T18:32:10.926Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "Test-Create_a_new_powerpack_returns_OK_response-1698172330", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/powerpacks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"powerpack\",\"id\":\"a5892a4e-729b-11ee-8449-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_new_powerpack_returns_OK_response-1698172330\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":2803120731030485}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/powerpacks/a5892a4e-729b-11ee-8449-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new powerpack returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-04T19:18:49.142Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "name": "Sample Powerpack", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/powerpacks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"API input validation failed: {'group_widget': ['Missing data for required field.']}\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new powerpack with missing group_widget returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-24T18:32:12.418Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "Test-Delete_a_powerpack_returns_OK_response-1698172332", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/powerpacks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"powerpack\",\"id\":\"a5f45260-729b-11ee-a369-da7ad0900002\",\"attributes\":{\"name\":\"Test-Delete_a_powerpack_returns_OK_response-1698172332\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":6498721107839400}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/powerpacks/a5f45260-729b-11ee-a369-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/powerpacks/a5f45260-729b-11ee-a369-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Powerpack with ID a5f45260-729b-11ee-a369-da7ad0900002 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a powerpack returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-09-19T20:34:20.756Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/powerpacks/made-up-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Powerpack has invalid UUID made-up-id not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a powerpack returns \"Powerpack Not Found\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-24T18:32:12.762Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "Test-Get_a_Powerpack_returns_OK_response-1698172332", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/powerpacks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"powerpack\",\"id\":\"a62886de-729b-11ee-b0c9-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_a_Powerpack_returns_OK_response-1698172332\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":1686767504601483}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/powerpacks/a62886de-729b-11ee-b0c9-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"powerpack\",\"id\":\"a62886de-729b-11ee-b0c9-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_a_Powerpack_returns_OK_response-1698172332\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":1686767504601483}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/powerpacks/a62886de-729b-11ee-b0c9-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a Powerpack returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-11T15:48:56.601Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/powerpacks/made-up-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Powerpack has invalid UUID made-up-id not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a Powerpack returns \"Powerpack Not Found.\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-24T18:32:13.096Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "Test-Get_all_powerpacks_returns_OK_response-1698172333", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/powerpacks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"powerpack\",\"id\":\"a65cae1e-729b-11ee-9a94-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_all_powerpacks_returns_OK_response-1698172333\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":8966066562910324}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/powerpacks", + "query": [ + [ + "page[limit]", + "1000" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"powerpack\",\"id\":\"cabb74fa-686b-11ee-8326-da7ad0900002\",\"attributes\":{\"name\":\"another powerpack\",\"description\":\"\",\"group_widget\":{\"layout\":{\"x\":0,\"y\":0,\"width\":4,\"height\":3},\"definition\":{\"title\":\"another powerpack\",\"type\":\"group\",\"layout_type\":\"ordered\",\"widgets\":[{\"layout\":{\"x\":0,\"y\":0,\"width\":2,\"height\":2},\"definition\":{\"type\":\"note\",\"content\":\"its just a ***test***\",\"background_color\":\"white\",\"font_size\":\"36\",\"text_align\":\"center\",\"vertical_align\":\"center\",\"show_tick\":false,\"tick_pos\":\"50%\",\"tick_edge\":\"left\",\"has_padding\":true},\"id\":2265811261450092}]}},\"template_variables\":[],\"tags\":[\"tag:display\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"d5bf7f0a-19b0-11ed-b0df-da7ad0900002\"}}}},{\"type\":\"powerpack\",\"id\":\"a65cae1e-729b-11ee-9a94-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_all_powerpacks_returns_OK_response-1698172333\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":8966066562910324}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},{\"type\":\"powerpack\",\"id\":\"66a92bf4-7209-11ee-af46-da7ad0900002\",\"attributes\":{\"name\":\"Sample Powerpack\",\"description\":\"Test Powerpack 2\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"event_size\":\"l\",\"query\":\"*\",\"title\":\"Widget Title\",\"title_align\":\"right\",\"title_size\":\"16\",\"type\":\"event_stream\"},\"id\":5277269296927835}]}},\"template_variables\":[{\"defaults\":[\"defaults\"],\"name\":\"datacenter\"}],\"tags\":[\"tag:foo1\",\"tag:foo2\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}],\"included\":[{\"type\":\"users\",\"id\":\"d5bf7f0a-19b0-11ed-b0df-da7ad0900002\",\"attributes\":{\"name\":\"Kevin Zou\",\"email\":\"kevin.zou@datadoghq.com\"}},{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}},{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"email\":\"frog@datadoghq.com\"}}],\"meta\":{\"pagination\":{\"offset\":0,\"first_offset\":0,\"prev_offset\":0,\"next_offset\":1000,\"last_offset\":null,\"limit\":1000,\"type\":\"offset_limit\"}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/powerpacks?page%5Blimit%5D=1000\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/powerpacks?page[offset]=1000&page[limit]=1000\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/powerpacks?page[offset]=0&page[limit]=1000\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/powerpacks/a65cae1e-729b-11ee-9a94-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all powerpacks returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-11T19:24:38.025Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/powerpacks", + "query": [ + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"powerpack\",\"id\":\"d1938042-686b-11ee-9d56-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_all_powerpacks_returns_OK_response_with_pagination-1697052278\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":4216761608837044}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0}},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}},{\"type\":\"powerpack\",\"id\":\"cabb74fa-686b-11ee-8326-da7ad0900002\",\"attributes\":{\"name\":\"another powerpack\",\"description\":\"\",\"group_widget\":{\"layout\":{\"x\":0,\"y\":0,\"width\":4,\"height\":3},\"definition\":{\"title\":\"another powerpack\",\"type\":\"group\",\"layout_type\":\"ordered\",\"widgets\":[{\"layout\":{\"x\":0,\"y\":0,\"width\":2,\"height\":2},\"definition\":{\"type\":\"note\",\"content\":\"its just a ***test***\",\"background_color\":\"white\",\"font_size\":\"36\",\"text_align\":\"center\",\"vertical_align\":\"center\",\"show_tick\":false,\"tick_pos\":\"50%\",\"tick_edge\":\"left\",\"has_padding\":true},\"id\":2265811261450092}]}},\"template_variables\":[],\"tags\":[\"tag:display\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"d5bf7f0a-19b0-11ed-b0df-da7ad0900002\"}}}}],\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"email\":\"frog@datadoghq.com\"}},{\"type\":\"users\",\"id\":\"d5bf7f0a-19b0-11ed-b0df-da7ad0900002\",\"attributes\":{\"name\":\"Kevin Zou\",\"email\":\"kevin.zou@datadoghq.com\"}}],\"meta\":{\"pagination\":{\"offset\":0,\"first_offset\":0,\"prev_offset\":0,\"next_offset\":2,\"last_offset\":null,\"limit\":2,\"type\":\"offset_limit\"}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/powerpacks?page%5Blimit%5D=2\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/powerpacks?page[offset]=2&page[limit]=2\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/powerpacks?page[offset]=0&page[limit]=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/powerpacks", + "query": [ + [ + "page[limit]", + "2" + ], + [ + "page[offset]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"powerpack\",\"id\":\"7d77332e-6865-11ee-a8bf-da7ad0900002\",\"attributes\":{\"name\":\"\",\"description\":\"Test Powerpack 2\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Powerpack Test\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test test test\",\"type\":\"note\"},\"id\":887637664261479}]}},\"template_variables\":null,\"tags\":[]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}],\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"email\":\"frog@datadoghq.com\"}}],\"meta\":{\"pagination\":{\"offset\":2,\"first_offset\":0,\"prev_offset\":0,\"next_offset\":4,\"last_offset\":null,\"limit\":2,\"type\":\"offset_limit\"}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/powerpacks?page%5Blimit%5D=2&page%5Boffset%5D=2\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/powerpacks?page[offset]=4&page[limit]=2\",\"prev\":\"https://api.datadoghq.com/api/v2/powerpacks?page[offset]=0&page[limit]=2\",\"first\":\"https://api.datadoghq.com/api/v2/powerpacks?page[offset]=0&page[limit]=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all powerpacks returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-24T18:32:13.426Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "Test-Update_a_powerpack_returns_Bad_Request_response-1698172333", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/powerpacks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"powerpack\",\"id\":\"a68dc724-729b-11ee-aa5b-da7ad0900002\",\"attributes\":{\"name\":\"Test-Update_a_powerpack_returns_Bad_Request_response-1698172333\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":3206637304594094}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "type": "group1", + "widgets": [] + } + }, + "name": "Sample Powerpack", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/powerpacks/a68dc724-729b-11ee-aa5b-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid group widget for powerpack. Error: 'group1' is not one of ['group']\\n\\nFailed validating 'enum' in schema['properties']['type']:\\n {'enum': ['group']}\\n\\nOn instance['type']:\\n 'group1'.\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/powerpacks/a68dc724-729b-11ee-aa5b-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a powerpack returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-24T18:32:13.775Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "Test-Update_a_powerpack_returns_OK_response-1698172333", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/powerpacks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"powerpack\",\"id\":\"a6d282b0-729b-11ee-a89e-da7ad0900002\",\"attributes\":{\"name\":\"Test-Update_a_powerpack_returns_OK_response-1698172333\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":4388958017557503}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "Test-Update_a_powerpack_returns_OK_response-1698172333", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/powerpacks/a6d282b0-729b-11ee-a89e-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"powerpack\",\"id\":\"a6d282b0-729b-11ee-a89e-da7ad0900002\",\"attributes\":{\"name\":\"Test-Update_a_powerpack_returns_OK_response-1698172333\",\"description\":\"Sample powerpack\",\"group_widget\":{\"definition\":{\"layout_type\":\"ordered\",\"show_title\":true,\"title\":\"Sample Powerpack\",\"type\":\"group\",\"widgets\":[{\"definition\":{\"content\":\"test\",\"type\":\"note\"},\"id\":3224344873217279}]},\"layout\":{\"height\":3,\"width\":12,\"x\":0,\"y\":0},\"live_span\":\"1h\"},\"template_variables\":[{\"defaults\":[\"*\"],\"name\":\"sample\"}],\"tags\":[\"tag:sample\"]},\"relationships\":{\"author\":{\"data\":{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"attributes\":{\"name\":\"CI Account\",\"email\":\"team-intg-tools-libs-spam@datadoghq.com\"}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/powerpacks/a6d282b0-729b-11ee-a89e-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a powerpack returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Powerpack", + "frozen_at": "2023-10-24T18:32:14.282Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Sample powerpack", + "group_widget": { + "definition": { + "layout_type": "ordered", + "show_title": true, + "title": "Sample Powerpack", + "type": "group", + "widgets": [ + { + "definition": { + "content": "test", + "type": "note" + } + } + ] + }, + "layout": { + "height": 3, + "width": 12, + "x": 0, + "y": 0 + }, + "live_span": "1h" + }, + "name": "Test-Update_a_powerpack_returns_Powerpack_Not_Found_response-1698172334", + "tags": [ + "tag:sample" + ], + "template_variables": [ + { + "defaults": [ + "*" + ], + "name": "sample" + } + ] + }, + "type": "powerpack" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/powerpacks/made-up-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Powerpack has invalid UUID made-up-id not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a powerpack returns \"Powerpack Not Found\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/processes.json b/test-server-data/v2/processes.json new file mode 100644 index 0000000000..c28549dad7 --- /dev/null +++ b/test-server-data/v2/processes.json @@ -0,0 +1,151 @@ +{ + "feature": "Processes", + "recordings": [ + { + "feature": "Processes", + "frozen_at": "2022-01-06T00:51:51.354Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/processes", + "query": [ + [ + "page[limit]", + "2" + ], + [ + "search", + "process-agent" + ], + [ + "tags", + "testing:true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"\",\"size\":0}},\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all processes returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Processes", + "frozen_at": "2022-04-11T15:53:14.152Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/processes", + "query": [ + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"08d5e26c7701000015e90400e5e520dead28b74b286076a0f80d8947\",\"size\":2}},\"data\":[{\"type\":\"process\",\"id\":\"15e904006bbd513e4da3b8270bedd386f3edea60\",\"attributes\":{\"cmdline\":\"/lib/systemd/systemd --switched-root --system --deserialize 22\",\"timestamp\":\"2022-04-11T15:49:04\",\"start\":\"2021-02-04T11:51:47\",\"user\":\"root\",\"pid\":1,\"ppid\":0,\"host\":\"pks-db-0\",\"tags\":[\"bosh_address:10.0.40.20\",\"bosh_az:us-central1-a\",\"bosh_deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"bosh_id:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"bosh_index:0\",\"bosh_ip:10.0.40.20\",\"bosh_job:pks-db\",\"bosh_name:pks-db\",\"cloudfoundry\",\"created_at:2021-02-04t11:51:58z\",\"deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"director:p-bosh\",\"id:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"index:0\",\"index:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"instance-id:3455194630398042407\",\"instance-type:custom-2-8192\",\"instance_group:pks-db\",\"internal-hostname:vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873.c.datadog-integrations-lab.internal\",\"ip:10.0.40.20\",\"job:pks-db\",\"name:pks-db/bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac-pks-db\",\"pcf-vms\",\"pivotal-container-service-2db99f13c503d2c4afac\",\"pivotal-container-service-2db99f13c503d2c4afac-pks-db\",\"pks-db\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:pks-db-0\",\"user:root\",\"command:systemd\",\"state_zombie:false\"]}},{\"type\":\"process\",\"id\":\"15e90400e5e520dead28b74b286076a0f80d8947\",\"attributes\":{\"cmdline\":\"/lib/systemd/systemd-journald\",\"timestamp\":\"2022-04-11T15:39:24\",\"start\":\"2021-02-04T11:52:21\",\"user\":\"root\",\"pid\":311,\"ppid\":1,\"host\":\"pks-db-0\",\"tags\":[\"bosh_address:10.0.40.20\",\"bosh_az:us-central1-a\",\"bosh_deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"bosh_id:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"bosh_index:0\",\"bosh_ip:10.0.40.20\",\"bosh_job:pks-db\",\"bosh_name:pks-db\",\"cloudfoundry\",\"created_at:2021-02-04t11:51:58z\",\"deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"director:p-bosh\",\"id:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"index:0\",\"index:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"instance-id:3455194630398042407\",\"instance-type:custom-2-8192\",\"instance_group:pks-db\",\"internal-hostname:vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873.c.datadog-integrations-lab.internal\",\"ip:10.0.40.20\",\"job:pks-db\",\"name:pks-db/bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac-pks-db\",\"pcf-vms\",\"pivotal-container-service-2db99f13c503d2c4afac\",\"pivotal-container-service-2db99f13c503d2c4afac-pks-db\",\"pks-db\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:pks-db-0\",\"user:root\",\"command:systemd-journald\",\"state_zombie:false\"]}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/processes", + "query": [ + [ + "page[cursor]", + "08d5e26c7701000015e90400e5e520dead28b74b286076a0f80d8947" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"78ece26c7701000015e90400ecda56b600e21f012357ad716ee71ca9\",\"size\":1}},\"data\":[{\"type\":\"process\",\"id\":\"15e904008c339409221953da5a4366c80260ba76\",\"attributes\":{\"cmdline\":\"/lib/systemd/systemd-udevd\",\"timestamp\":\"2022-04-11T15:44:44\",\"start\":\"2021-02-04T11:52:21\",\"user\":\"root\",\"pid\":343,\"ppid\":1,\"host\":\"pks-db-0\",\"tags\":[\"bosh_address:10.0.40.20\",\"bosh_az:us-central1-a\",\"bosh_deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"bosh_id:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"bosh_index:0\",\"bosh_ip:10.0.40.20\",\"bosh_job:pks-db\",\"bosh_name:pks-db\",\"cloudfoundry\",\"created_at:2021-02-04t11:51:58z\",\"deployment:pivotal-container-service-2db99f13c503d2c4afac\",\"director:p-bosh\",\"id:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"index:0\",\"index:bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"instance-id:3455194630398042407\",\"instance-type:custom-2-8192\",\"instance_group:pks-db\",\"internal-hostname:vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873.c.datadog-integrations-lab.internal\",\"ip:10.0.40.20\",\"job:pks-db\",\"name:pks-db/bc9e93b6-fb2e-4adc-a4a7-f23a70dbe681\",\"numeric_project_id:116803814856\",\"p-bosh\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac\",\"p-bosh-pivotal-container-service-2db99f13c503d2c4afac-pks-db\",\"pcf-vms\",\"pivotal-container-service-2db99f13c503d2c4afac\",\"pivotal-container-service-2db99f13c503d2c4afac-pks-db\",\"pks-db\",\"project:datadog-integrations-lab\",\"user_data:_server_:_name_:_vm-5b9ee0e7-a9ec-424a-5233-b4497c6a8873_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_169.254.169.254\",\"zone:us-central1-a\",\"host:pks-db-0\",\"user:root\",\"command:systemd-udevd\",\"state_zombie:false\"]}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/processes", + "query": [ + [ + "page[cursor]", + "78ece26c7701000015e90400ecda56b600e21f012357ad716ee71ca9" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all processes returns \"OK\" response with pagination", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/reference-tables.json b/test-server-data/v2/reference-tables.json new file mode 100644 index 0000000000..4b60f31fae --- /dev/null +++ b/test-server-data/v2/reference-tables.json @@ -0,0 +1,123 @@ +{ + "feature": "Reference Tables", + "recordings": [ + { + "feature": "Reference Tables", + "frozen_at": "2025-10-01T20:51:23.877Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test reference table without upload or access details", + "schema": { + "fields": [ + { + "name": "id", + "type": "STRING" + } + ], + "primary_keys": [ + "id" + ] + }, + "source": "LOCAL_FILE", + "table_name": "test_invalid_table_Test-Create_reference_table_without_upload_or_access_details_returns_Bad_Request_response-1759351883", + "tags": [ + "test_tag" + ] + }, + "type": "reference_table" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/reference-tables/tables", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"upload_id is required for tables with 'LOCAL_FILE' source\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create reference table without upload or access details returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Reference Tables", + "frozen_at": "2026-05-15T19:32:21.293Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/reference-tables/tables/not-a-valid-uuid/rows/list", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"table ID must be a valid UUID format\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List reference table rows returns \"Bad Request\" response for invalid limit", + "version": "v2" + }, + { + "feature": "Reference Tables", + "frozen_at": "2026-05-15T19:32:23.068Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/reference-tables/tables/00000000-0000-0000-0000-000000000000/rows/list", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"table not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "List reference table rows returns \"Not Found\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/restriction-policies.json b/test-server-data/v2/restriction-policies.json new file mode 100644 index 0000000000..afab7dd221 --- /dev/null +++ b/test-server-data/v2/restriction-policies.json @@ -0,0 +1,489 @@ +{ + "feature": "Restriction Policies", + "recordings": [ + { + "feature": "Restriction Policies", + "frozen_at": "2023-02-14T03:05:45.303Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/restriction_policy/malformed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid resource: 'malformed' is not in a valid format\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete a restriction policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "frozen_at": "2023-03-06T18:17:17.689Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/restriction_policy/dashboard%3Atest-delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete a restriction policy returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "frozen_at": "2023-02-08T21:43:23.653Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/restriction_policy/malformed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid resource: 'malformed' is not in a valid format\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a restriction policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "frozen_at": "2023-03-06T18:17:18.345Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/restriction_policy/dashboard%3Atest-get", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"restriction_policy\",\"id\":\"dashboard:test-get\",\"attributes\":{\"bindings\":[]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a restriction policy returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "frozen_at": "2023-02-14T20:25:17.414Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_restriction_policy_returns_Bad_Request_response-1676406317" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"b27c878a-aca5-11ed-bc84-da7ad0900002\",\"attributes\":{\"name\":\"Test-Update_a_restriction_policy_returns_Bad_Request_response-1676406317\",\"created_at\":\"2023-02-14T20:25:18.243844+00:00\",\"modified_at\":\"2023-02-14T20:25:18.273486+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_a_restriction_policy_returns_Bad_Request_response-1676406317@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"b2ca0a63-aca5-11ed-ad1d-9ae79f61138a\",\"attributes\":{\"name\":null,\"handle\":\"test-update_a_restriction_policy_returns_bad_request_response-1676406317@datadoghq.com\",\"created_at\":\"2023-02-14T20:25:18.752610+00:00\",\"modified_at\":\"2023-02-14T20:25:18.755273+00:00\",\"email\":\"test-update_a_restriction_policy_returns_bad_request_response-1676406317@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/80e45e7eec806ce0d10b973473d8c014?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "b2ca0a63-aca5-11ed-ad1d-9ae79f61138a", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/b27c878a-aca5-11ed-bc84-da7ad0900002/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"users\",\"id\":\"b2ca0a63-aca5-11ed-ad1d-9ae79f61138a\",\"attributes\":{\"name\":null,\"handle\":\"test-update_a_restriction_policy_returns_bad_request_response-1676406317@datadoghq.com\",\"created_at\":\"2023-02-14T20:25:18.752610+00:00\",\"modified_at\":\"2023-02-14T20:25:18.755273+00:00\",\"email\":\"test-update_a_restriction_policy_returns_bad_request_response-1676406317@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/80e45e7eec806ce0d10b973473d8c014?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"b27c878a-aca5-11ed-bc84-da7ad0900002\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}],\"meta\":{\"page\":{\"total_count\":1}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "bindings": [ + { + "principals": [ + "org:4dee724d-00cc-11ea-a77b-570c9d03c6c5" + ], + "relation": "editor" + } + ] + }, + "id": "dashboard:abc-def-ghi", + "type": "restriction_policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/restriction_policy/malformed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid resource: 'malformed' is not in a valid format\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/b2ca0a63-aca5-11ed-ad1d-9ae79f61138a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/b27c878a-aca5-11ed-bc84-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a restriction policy returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Restriction Policies", + "frozen_at": "2023-03-06T18:17:18.656Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_restriction_policy_returns_OK_response-1678126638" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"2186776c-bc4b-11ed-ac0f-da7ad0900002\",\"attributes\":{\"name\":\"Test-Update_a_restriction_policy_returns_OK_response-1678126638\",\"created_at\":\"2023-03-06T18:17:18.938117+00:00\",\"modified_at\":\"2023-03-06T18:17:18.971241+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_a_restriction_policy_returns_OK_response-1678126638@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"21b46718-bc4b-11ed-a2f5-764440ef0bc1\",\"attributes\":{\"name\":null,\"handle\":\"test-update_a_restriction_policy_returns_ok_response-1678126638@datadoghq.com\",\"created_at\":\"2023-03-06T18:17:19.240151+00:00\",\"modified_at\":\"2023-03-06T18:17:19.244292+00:00\",\"email\":\"test-update_a_restriction_policy_returns_ok_response-1678126638@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/aedbf1acbf22049a33e6e48c70252b04?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "21b46718-bc4b-11ed-a2f5-764440ef0bc1", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/2186776c-bc4b-11ed-ac0f-da7ad0900002/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"users\",\"id\":\"21b46718-bc4b-11ed-a2f5-764440ef0bc1\",\"attributes\":{\"name\":null,\"handle\":\"test-update_a_restriction_policy_returns_ok_response-1678126638@datadoghq.com\",\"created_at\":\"2023-03-06T18:17:19.240151+00:00\",\"modified_at\":\"2023-03-06T18:17:19.244292+00:00\",\"email\":\"test-update_a_restriction_policy_returns_ok_response-1678126638@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/aedbf1acbf22049a33e6e48c70252b04?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"2186776c-bc4b-11ed-ac0f-da7ad0900002\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}],\"meta\":{\"page\":{\"total_count\":1}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "bindings": [ + { + "principals": [ + "org:4dee724d-00cc-11ea-a77b-570c9d03c6c5" + ], + "relation": "editor" + } + ] + }, + "id": "dashboard:test-update", + "type": "restriction_policy" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/restriction_policy/dashboard%3Atest-update", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"restriction_policy\",\"id\":\"dashboard:test-update\",\"attributes\":{\"bindings\":[{\"relation\":\"editor\",\"principals\":[\"org:4dee724d-00cc-11ea-a77b-570c9d03c6c5\"]}]}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/21b46718-bc4b-11ed-a2f5-764440ef0bc1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/2186776c-bc4b-11ed-ac0f-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a restriction policy returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/roles.json b/test-server-data/v2/roles.json new file mode 100644 index 0000000000..6eea8ef255 --- /dev/null +++ b/test-server-data/v2/roles.json @@ -0,0 +1,2178 @@ +{ + "feature": "Roles", + "recordings": [ + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:34.695Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Add_a_user_to_a_role_returns_OK_response-1652349154" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"3fdd7736-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Add_a_user_to_a_role_returns_OK_response-1652349154\",\"created_at\":\"2022-05-12T09:52:35.122733+00:00\",\"modified_at\":\"2022-05-12T09:52:35.185756+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Add_a_user_to_a_role_returns_OK_response-1652349154@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"4029e0ee-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-add_a_user_to_a_role_returns_ok_response-1652349154@datadoghq.com\",\"created_at\":\"2022-05-12T09:52:35.620596+00:00\",\"modified_at\":\"2022-05-12T09:52:35.671108+00:00\",\"email\":\"test-add_a_user_to_a_role_returns_ok_response-1652349154@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/52c0438135b57a777a2f1ec09acfded3?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "4029e0ee-d1d9-11ec-ad3d-da7ad0900002", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/3fdd7736-d1d9-11ec-ad3d-da7ad0900002/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_count\":1}},\"data\":[{\"type\":\"users\",\"id\":\"4029e0ee-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-add_a_user_to_a_role_returns_ok_response-1652349154@datadoghq.com\",\"created_at\":\"2022-05-12T09:52:35.620596+00:00\",\"modified_at\":\"2022-05-12T09:52:35.671108+00:00\",\"email\":\"test-add_a_user_to_a_role_returns_ok_response-1652349154@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/52c0438135b57a777a2f1ec09acfded3?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"3fdd7736-d1d9-11ec-ad3d-da7ad0900002\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/4029e0ee-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/3fdd7736-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Add a user to a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:37.295Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_a_new_role_by_cloning_an_existing_role_returns_Bad_Request_response-1652349157" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"416935ae-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_new_role_by_cloning_an_existing_role_returns_Bad_Request_response-1652349157\",\"created_at\":\"2022-05-12T09:52:37.715539+00:00\",\"modified_at\":\"2022-05-12T09:52:37.778432+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": " " + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/416935ae-d1d9-11ec-ad3d-da7ad0900002/clone", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"Role names cannot be only whitespace\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/416935ae-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new role by cloning an existing role returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:38.815Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_a_new_role_by_cloning_an_existing_role_returns_Conflict_response-1652349158" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"42519ea2-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_new_role_by_cloning_an_existing_role_returns_Conflict_response-1652349158\",\"created_at\":\"2022-05-12T09:52:39.238726+00:00\",\"modified_at\":\"2022-05-12T09:52:39.302013+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_a_new_role_by_cloning_an_existing_role_returns_Conflict_response-1652349158" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/42519ea2-d1d9-11ec-ad3d-da7ad0900002/clone", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"A role with the same name already exists\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/42519ea2-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new role by cloning an existing role returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:40.425Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_a_new_role_by_cloning_an_existing_role_returns_OK_response-1652349160" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"436017a6-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_new_role_by_cloning_an_existing_role_returns_OK_response-1652349160\",\"created_at\":\"2022-05-12T09:52:41.011684+00:00\",\"modified_at\":\"2022-05-12T09:52:41.081616+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_a_new_role_by_cloning_an_existing_role_returns_OK_response-1652349160 clone" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/436017a6-d1d9-11ec-ad3d-da7ad0900002/clone", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"43c71ad2-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_new_role_by_cloning_an_existing_role_returns_OK_response-1652349160 clone\",\"created_at\":\"2022-05-12T09:52:41.686533+00:00\",\"modified_at\":\"2022-05-12T09:52:41.738002+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/43c71ad2-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/436017a6-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new role by cloning an existing role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:42.905Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_role_returns_OK_response-1652349162" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"44c8b5ee-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_role_returns_OK_response-1652349162\",\"created_at\":\"2022-05-12T09:52:43.374397+00:00\",\"modified_at\":\"2022-05-12T09:52:43.421394+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/44c8b5ee-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2024-04-22T22:41:44.684Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"Deprecated. Standard Access has been replaced by more specific permissions.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards or embeddable graphs externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Manage Downtimes\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute monitors. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Locations Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Locations Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical Views\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create and rename API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filters Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filters Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Dynamic Instrumentation Write\",\"description\":\"Edit Dynamic Instrumentation configuration. Create or modify Dynamic Instrumentation probes that do not capture function state.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Dynamic Instrumentation Read\",\"description\":\"View Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace, and enabling & disabling Remote Configuration for the entire organization.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incidents Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incident Settings Read\",\"description\":\"View Incident Settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incident Settings Write\",\"description\":\"Configure Incident Settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Management Event Rules Read\",\"description\":\"View Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Management Event Rules Write\",\"description\":\"Edit Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_read\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.074031+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_write\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.077905+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Read\",\"description\":\"View pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Write\",\"description\":\"Edit pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_read\",\"display_name\":\"Workflows Read\",\"description\":\"View workflows.\",\"created\":\"2022-02-03T15:07:12.058412+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_write\",\"display_name\":\"Workflows Write\",\"description\":\"Create, edit, and delete workflows.\",\"created\":\"2022-02-03T15:07:12.061765+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_run\",\"display_name\":\"Workflows Run\",\"description\":\"Run workflows.\",\"created\":\"2022-02-03T15:07:12.060079+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_read\",\"display_name\":\"Connections Read\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"created\":\"2022-02-03T15:07:12.053432+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_write\",\"display_name\":\"Connections Write\",\"description\":\"Create and delete connections.\",\"created\":\"2022-02-03T15:07:12.056590+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"attributes\":{\"name\":\"incidents_private_global_access\",\"display_name\":\"Private Incidents Global Access\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"created\":\"2022-02-11T18:36:08.531989+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"attributes\":{\"name\":\"logs_delete_data\",\"display_name\":\"Logs Delete Data\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"created\":\"2022-02-25T18:51:06.176019+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"attributes\":{\"name\":\"manage_integrations\",\"display_name\":\"Integrations Manage\",\"description\":\"Install, uninstall, and configure integrations.\",\"created\":\"2022-04-26T20:21:40.285834+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"attributes\":{\"name\":\"monitor_config_policy_write\",\"display_name\":\"Monitor Configuration Policy Write\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"created\":\"2022-06-23T16:26:48.150556+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"attributes\":{\"name\":\"logs_write_forwarding_rules\",\"display_name\":\"Logs Write Forwarding Rules\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"created\":\"2022-08-08T21:30:42.723663+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"Deprecated. View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"attributes\":{\"name\":\"connections_resolve\",\"display_name\":\"Connections Resolve\",\"description\":\"Resolve connections.\",\"created\":\"2022-08-25T15:25:56.325170+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_read\",\"display_name\":\"Application Security Management Protect Read\",\"description\":\"View blocked attackers.\",\"created\":\"2022-10-27T09:25:33.834253+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_write\",\"display_name\":\"Application Security Management Protect Write\",\"description\":\"Manage blocked attackers.\",\"created\":\"2022-10-27T09:25:33.843656+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_read\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.827076+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_write\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement.\",\"created\":\"2022-10-27T09:25:33.831383+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"99474cc2-5a12-11ed-b547-da7ad0900002\",\"attributes\":{\"name\":\"apps_run\",\"display_name\":\"Apps View\",\"description\":\"View and run Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.584393+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9948271e-5a12-11ed-b548-da7ad0900002\",\"attributes\":{\"name\":\"apps_write\",\"display_name\":\"Apps Write\",\"description\":\"Create, edit, and delete Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.590588+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"attributes\":{\"name\":\"cases_read\",\"display_name\":\"Cases Read\",\"description\":\"View Cases.\",\"created\":\"2022-12-12T18:40:54.018521+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"attributes\":{\"name\":\"cases_write\",\"display_name\":\"Cases Write\",\"description\":\"Create and update cases.\",\"created\":\"2022-12-12T18:40:54.023280+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_write\",\"display_name\":\"APM Remote Configuration Write\",\"description\":\"Edit APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.450768+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_read\",\"display_name\":\"APM Remote Configuration Read\",\"description\":\"View APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.446298+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_write\",\"display_name\":\"CI Visibility Tests Write\",\"description\":\"Edit flaky tests and delete Test Services.\",\"created\":\"2022-12-13T16:01:37.157428+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"attributes\":{\"name\":\"ci_provider_settings_write\",\"display_name\":\"CI Provider Settings Write\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"created\":\"2022-12-13T16:01:37.141217+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_settings_write\",\"display_name\":\"CI Visibility Settings Write\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"created\":\"2022-12-13T16:01:37.153418+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_activation_write\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"description\":\"Enable or disable Intelligent Test Runner.\",\"created\":\"2022-12-13T16:01:37.163771+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_settings_write\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"description\":\"Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"created\":\"2022-12-13T16:01:37.169430+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"attributes\":{\"name\":\"continuous_profiler_read\",\"display_name\":\"Continuous Profiler Read\",\"description\":\"View data in Continuous Profiler.\",\"created\":\"2022-12-16T16:50:32.545882+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"attributes\":{\"name\":\"teams_manage\",\"display_name\":\"Teams Manage\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"created\":\"2023-01-18T20:45:59.977837+00:00\",\"group_name\":\"Teams\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_read\",\"display_name\":\"Security Monitoring Findings Read\",\"description\":\"View CSPM Findings.\",\"created\":\"2023-02-24T14:30:30.983679+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_read\",\"display_name\":\"Incident Notification Settings Read\",\"description\":\"View Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_write\",\"display_name\":\"Incident Notification Settings Write\",\"description\":\"Configure Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"attributes\":{\"name\":\"ci_ingestion_control_write\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"created\":\"2023-03-24T10:25:33.934187+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_write\",\"display_name\":\"Error Tracking Issue Write\",\"description\":\"Edit Error Tracking issues.\",\"created\":\"2023-03-27T16:55:44.263627+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_alerts_write\",\"display_name\":\"Watchdog Alerts Write\",\"description\":\"Manage Watchdog Alerts.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"attributes\":{\"name\":\"saved_views_write\",\"display_name\":\"Saved Views Write\",\"description\":\"Modify Saved Views across all Datadog products.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_read\",\"display_name\":\"Client Tokens Read\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_write\",\"display_name\":\"Client Tokens Write\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_read\",\"display_name\":\"Event Correlation Config Read\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_write\",\"display_name\":\"Event Correlation Config Write\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"attributes\":{\"name\":\"event_config_write\",\"display_name\":\"Event Config Write\",\"description\":\"Manage general event configuration such as API Emails.\",\"created\":\"2023-05-20T01:20:31.639587+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_write\",\"display_name\":\"Security Monitoring Findings Write\",\"description\":\"Mute CSPM Findings.\",\"created\":\"2023-05-23T22:50:34.532448+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_read\",\"display_name\":\"Cloud Cost Management Read\",\"description\":\"View Cloud Cost pages. This does not restrict access to the cloud cost data source in dashboards and notebooks.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_write\",\"display_name\":\"Cloud Cost Management Write\",\"description\":\"Configure cloud cost accounts and global customizations.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"attributes\":{\"name\":\"host_tags_write\",\"display_name\":\"Host Tags Write\",\"description\":\"Add and change tags on hosts.\",\"created\":\"2023-05-31T05:26:07.469293+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_pipelines_write\",\"display_name\":\"CI Visibility Pipelines Write\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"created\":\"2023-06-01T11:35:17.513706+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_read\",\"display_name\":\"Quality Gate Rules Read\",\"description\":\"View Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_write\",\"display_name\":\"Quality Gate Rules Write\",\"description\":\"Edit Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"attributes\":{\"name\":\"metrics_metadata_write\",\"display_name\":\"Metrics Metadata Write\",\"description\":\"Edit metadata on metrics.\",\"created\":\"2023-06-23T17:31:34.182629+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"attributes\":{\"name\":\"rum_delete_data\",\"display_name\":\"RUM Delete Data\",\"description\":\"Delete data from RUM.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_write\",\"display_name\":\"Vulnerability Management Write\",\"description\":\"Update status or assignee of vulnerabilities.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"attributes\":{\"name\":\"reference_tables_write\",\"display_name\":\"Reference Tables Write\",\"description\":\"Create or modify Reference Tables.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Reference Tables\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"attributes\":{\"name\":\"rum_playlist_write\",\"display_name\":\"RUM Playlist Write\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"created\":\"2023-07-07T17:31:08.450865+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_delete\",\"display_name\":\"Pipeline Delete\",\"description\":\"Delete pipelines from your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_deploy\",\"display_name\":\"Pipeline Deploy\",\"description\":\"Deploy pipelines in your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"attributes\":{\"name\":\"processes_generate_metrics\",\"display_name\":\"Processes Generate Metrics\",\"description\":\"Create custom metrics from processes.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"Processes\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"attributes\":{\"name\":\"api_keys_delete\",\"display_name\":\"API Keys Delete\",\"description\":\"Delete API Keys for your organization.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5c79b2-21a4-11ee-99ee-da7ad0900002\",\"attributes\":{\"name\":\"agent_flare_collection\",\"display_name\":\"Agent Flare Collection\",\"description\":\"Collect an Agent flare with Fleet Automation.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Fleet Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"attributes\":{\"name\":\"facets_write\",\"display_name\":\"Facets Write\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"created\":\"2023-07-27T17:36:24.369352+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0e73c2-3d23-11ee-aa7d-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_read\",\"display_name\":\"Security Suppressions Read\",\"description\":\"Read Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0eb666-3d23-11ee-aa7e-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_write\",\"display_name\":\"Security Suppressions Write\",\"description\":\"Write Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5356dfd2-3dee-11ee-b07b-da7ad0900002\",\"attributes\":{\"name\":\"static_analysis_settings_write\",\"display_name\":\"Static Analysis Settings Write\",\"description\":\"Edit Static Analysis settings.\",\"created\":\"2023-08-18T17:40:30.474557+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"263eff86-6925-11ee-acc0-da7ad0900002\",\"attributes\":{\"name\":\"ndm_netflow_port_mappings_write\",\"display_name\":\"NDM Netflow Port Mappings Write\",\"description\":\"Write NDM Netflow port mappings.\",\"created\":\"2023-10-12T17:31:17.142666+00:00\",\"group_name\":\"Network Device Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7c7836fc-6f6e-11ee-8cdd-da7ad0900002\",\"attributes\":{\"name\":\"debugger_capture_variables\",\"display_name\":\"Dynamic Instrumentation Capture Variables\",\"description\":\"Create or modify Dynamic Instrumentation probes that capture function state: local variables, method arguments, fields, and return value or thrown exception.\",\"created\":\"2023-10-20T17:31:22.039614+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10098bc8-984b-11ee-9b69-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_settings_write\",\"display_name\":\"Error Tracking Settings Write\",\"description\":\"Disable Error Tracking, edit inclusion filters, and edit rate limit.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10091e90-984b-11ee-9b68-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_exclusion_filters_write\",\"display_name\":\"Error Tracking Exclusion Filters Write\",\"description\":\"Add or change Error Tracking exclusion filters.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b572396-ba15-11ee-9e19-da7ad0900002\",\"attributes\":{\"name\":\"integrations_read\",\"display_name\":\"Integrations Read\",\"description\":\"View integrations and their configurations.\",\"created\":\"2024-01-23T17:30:31.083178+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"27b95c32-ccf1-11ee-ae65-da7ad0900002\",\"attributes\":{\"name\":\"containers_generate_image_metrics\",\"display_name\":\"Containers Write Image Trend Metrics\",\"description\":\"Create or edit trend metrics from container images.\",\"created\":\"2024-02-16T17:31:02.070090+00:00\",\"group_name\":\"Containers\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a82d01ce-e228-11ee-870e-da7ad0900002\",\"attributes\":{\"name\":\"rum_extend_retention\",\"display_name\":\"RUM Session Replay Extend Retention\",\"description\":\"Extend the retention of Session Replays.\",\"created\":\"2024-03-14T17:31:14.314721+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca06b2b4-f5cd-11ee-9e77-da7ad0900002\",\"attributes\":{\"name\":\"dora_settings_write\",\"display_name\":\"DORA Settings Write\",\"description\":\"Edit the settings for DORA.\",\"created\":\"2024-04-08T17:31:10.159381+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_role_with_a_permission_returns_OK_response-1713825704" + }, + "relationships": { + "permissions": { + "data": [ + { + "id": "6f66600e-dd12-11e8-9e55-7f30fbb45e73", + "type": "permissions" + } + ] + } + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"7faf4564-00f9-11ef-a1a3-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_role_with_a_permission_returns_OK_response-1713825704\",\"created_at\":\"2024-04-22T22:41:46.082256+00:00\",\"modified_at\":\"2024-04-22T22:41:46.082256+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\"},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/7faf4564-00f9-11ef-a1a3-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create role with a permission returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:44.144Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_role_returns_OK_response-1652349164" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"458463ac-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Delete_role_returns_OK_response-1652349164\",\"created_at\":\"2022-05-12T09:52:44.604665+00:00\",\"modified_at\":\"2022-05-12T09:52:44.680814+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/458463ac-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/458463ac-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"458463ac-d1d9-11ec-ad3d-da7ad0900002 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:45.687Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_a_role_returns_OK_response-1652349165" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"466885b4-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_a_role_returns_OK_response-1652349165\",\"created_at\":\"2022-05-12T09:52:46.100371+00:00\",\"modified_at\":\"2022-05-12T09:52:46.212685+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/roles/466885b4-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"466885b4-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_a_role_returns_OK_response-1652349165\",\"created_at\":\"2022-05-12T09:52:46.100371+00:00\",\"modified_at\":\"2022-05-12T09:52:46.212685+00:00\",\"user_count\":0},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/466885b4-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:47.204Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_all_users_of_a_role_returns_OK_response-1652349167" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"474eac06-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_all_users_of_a_role_returns_OK_response-1652349167\",\"created_at\":\"2022-05-12T09:52:47.608064+00:00\",\"modified_at\":\"2022-05-12T09:52:47.653784+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_all_users_of_a_role_returns_OK_response-1652349167@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"4798bdaa-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-get_all_users_of_a_role_returns_ok_response-1652349167@datadoghq.com\",\"created_at\":\"2022-05-12T09:52:48.092980+00:00\",\"modified_at\":\"2022-05-12T09:52:48.142985+00:00\",\"email\":\"test-get_all_users_of_a_role_returns_ok_response-1652349167@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/3dbaff4435479cd8daaeb6227c1b4406?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "4798bdaa-d1d9-11ec-ad3d-da7ad0900002", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/474eac06-d1d9-11ec-ad3d-da7ad0900002/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_count\":1}},\"data\":[{\"type\":\"users\",\"id\":\"4798bdaa-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-get_all_users_of_a_role_returns_ok_response-1652349167@datadoghq.com\",\"created_at\":\"2022-05-12T09:52:48.092980+00:00\",\"modified_at\":\"2022-05-12T09:52:48.142985+00:00\",\"email\":\"test-get_all_users_of_a_role_returns_ok_response-1652349167@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/3dbaff4435479cd8daaeb6227c1b4406?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"474eac06-d1d9-11ec-ad3d-da7ad0900002\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/roles/474eac06-d1d9-11ec-ad3d-da7ad0900002/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"included\":[{\"type\":\"roles\",\"id\":\"474eac06-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Get_all_users_of_a_role_returns_OK_response-1652349167\",\"created_at\":\"2022-05-12T09:52:47.608064+00:00\",\"modified_at\":\"2022-05-12T09:52:47.653784+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}],\"meta\":{\"page\":{\"total_filtered_count\":1,\"total_count\":1}},\"data\":[{\"type\":\"users\",\"id\":\"4798bdaa-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-get_all_users_of_a_role_returns_ok_response-1652349167@datadoghq.com\",\"created_at\":\"2022-05-12T09:52:48.092980+00:00\",\"modified_at\":\"2022-05-12T09:52:48.142985+00:00\",\"email\":\"test-get_all_users_of_a_role_returns_ok_response-1652349167@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/3dbaff4435479cd8daaeb6227c1b4406?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"474eac06-d1d9-11ec-ad3d-da7ad0900002\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/4798bdaa-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/474eac06-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all users of a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2024-04-22T22:41:46.620Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Grant_permission_to_a_role_returns_OK_response-1713825706" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"80374004-00f9-11ef-8230-da7ad0900002\",\"attributes\":{\"name\":\"Test-Grant_permission_to_a_role_returns_OK_response-1713825706\",\"created_at\":\"2024-04-22T22:41:46.973384+00:00\",\"modified_at\":\"2024-04-22T22:41:46.973384+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"Deprecated. Standard Access has been replaced by more specific permissions.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards or embeddable graphs externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Manage Downtimes\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute monitors. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Locations Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Locations Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical Views\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create and rename API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filters Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filters Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Dynamic Instrumentation Write\",\"description\":\"Edit Dynamic Instrumentation configuration. Create or modify Dynamic Instrumentation probes that do not capture function state.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Dynamic Instrumentation Read\",\"description\":\"View Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace, and enabling & disabling Remote Configuration for the entire organization.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incidents Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incident Settings Read\",\"description\":\"View Incident Settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incident Settings Write\",\"description\":\"Configure Incident Settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Management Event Rules Read\",\"description\":\"View Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Management Event Rules Write\",\"description\":\"Edit Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_read\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.074031+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_write\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.077905+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Read\",\"description\":\"View pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Write\",\"description\":\"Edit pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_read\",\"display_name\":\"Workflows Read\",\"description\":\"View workflows.\",\"created\":\"2022-02-03T15:07:12.058412+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_write\",\"display_name\":\"Workflows Write\",\"description\":\"Create, edit, and delete workflows.\",\"created\":\"2022-02-03T15:07:12.061765+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_run\",\"display_name\":\"Workflows Run\",\"description\":\"Run workflows.\",\"created\":\"2022-02-03T15:07:12.060079+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_read\",\"display_name\":\"Connections Read\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"created\":\"2022-02-03T15:07:12.053432+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_write\",\"display_name\":\"Connections Write\",\"description\":\"Create and delete connections.\",\"created\":\"2022-02-03T15:07:12.056590+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"attributes\":{\"name\":\"incidents_private_global_access\",\"display_name\":\"Private Incidents Global Access\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"created\":\"2022-02-11T18:36:08.531989+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"attributes\":{\"name\":\"logs_delete_data\",\"display_name\":\"Logs Delete Data\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"created\":\"2022-02-25T18:51:06.176019+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"attributes\":{\"name\":\"manage_integrations\",\"display_name\":\"Integrations Manage\",\"description\":\"Install, uninstall, and configure integrations.\",\"created\":\"2022-04-26T20:21:40.285834+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"attributes\":{\"name\":\"monitor_config_policy_write\",\"display_name\":\"Monitor Configuration Policy Write\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"created\":\"2022-06-23T16:26:48.150556+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"attributes\":{\"name\":\"logs_write_forwarding_rules\",\"display_name\":\"Logs Write Forwarding Rules\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"created\":\"2022-08-08T21:30:42.723663+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"Deprecated. View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"attributes\":{\"name\":\"connections_resolve\",\"display_name\":\"Connections Resolve\",\"description\":\"Resolve connections.\",\"created\":\"2022-08-25T15:25:56.325170+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_read\",\"display_name\":\"Application Security Management Protect Read\",\"description\":\"View blocked attackers.\",\"created\":\"2022-10-27T09:25:33.834253+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_write\",\"display_name\":\"Application Security Management Protect Write\",\"description\":\"Manage blocked attackers.\",\"created\":\"2022-10-27T09:25:33.843656+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_read\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.827076+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_write\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement.\",\"created\":\"2022-10-27T09:25:33.831383+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"99474cc2-5a12-11ed-b547-da7ad0900002\",\"attributes\":{\"name\":\"apps_run\",\"display_name\":\"Apps View\",\"description\":\"View and run Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.584393+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9948271e-5a12-11ed-b548-da7ad0900002\",\"attributes\":{\"name\":\"apps_write\",\"display_name\":\"Apps Write\",\"description\":\"Create, edit, and delete Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.590588+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"attributes\":{\"name\":\"cases_read\",\"display_name\":\"Cases Read\",\"description\":\"View Cases.\",\"created\":\"2022-12-12T18:40:54.018521+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"attributes\":{\"name\":\"cases_write\",\"display_name\":\"Cases Write\",\"description\":\"Create and update cases.\",\"created\":\"2022-12-12T18:40:54.023280+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_write\",\"display_name\":\"APM Remote Configuration Write\",\"description\":\"Edit APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.450768+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_read\",\"display_name\":\"APM Remote Configuration Read\",\"description\":\"View APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.446298+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_write\",\"display_name\":\"CI Visibility Tests Write\",\"description\":\"Edit flaky tests and delete Test Services.\",\"created\":\"2022-12-13T16:01:37.157428+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"attributes\":{\"name\":\"ci_provider_settings_write\",\"display_name\":\"CI Provider Settings Write\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"created\":\"2022-12-13T16:01:37.141217+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_settings_write\",\"display_name\":\"CI Visibility Settings Write\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"created\":\"2022-12-13T16:01:37.153418+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_activation_write\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"description\":\"Enable or disable Intelligent Test Runner.\",\"created\":\"2022-12-13T16:01:37.163771+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_settings_write\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"description\":\"Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"created\":\"2022-12-13T16:01:37.169430+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"attributes\":{\"name\":\"continuous_profiler_read\",\"display_name\":\"Continuous Profiler Read\",\"description\":\"View data in Continuous Profiler.\",\"created\":\"2022-12-16T16:50:32.545882+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"attributes\":{\"name\":\"teams_manage\",\"display_name\":\"Teams Manage\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"created\":\"2023-01-18T20:45:59.977837+00:00\",\"group_name\":\"Teams\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_read\",\"display_name\":\"Security Monitoring Findings Read\",\"description\":\"View CSPM Findings.\",\"created\":\"2023-02-24T14:30:30.983679+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_read\",\"display_name\":\"Incident Notification Settings Read\",\"description\":\"View Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_write\",\"display_name\":\"Incident Notification Settings Write\",\"description\":\"Configure Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"attributes\":{\"name\":\"ci_ingestion_control_write\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"created\":\"2023-03-24T10:25:33.934187+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_write\",\"display_name\":\"Error Tracking Issue Write\",\"description\":\"Edit Error Tracking issues.\",\"created\":\"2023-03-27T16:55:44.263627+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_alerts_write\",\"display_name\":\"Watchdog Alerts Write\",\"description\":\"Manage Watchdog Alerts.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"attributes\":{\"name\":\"saved_views_write\",\"display_name\":\"Saved Views Write\",\"description\":\"Modify Saved Views across all Datadog products.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_read\",\"display_name\":\"Client Tokens Read\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_write\",\"display_name\":\"Client Tokens Write\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_read\",\"display_name\":\"Event Correlation Config Read\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_write\",\"display_name\":\"Event Correlation Config Write\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"attributes\":{\"name\":\"event_config_write\",\"display_name\":\"Event Config Write\",\"description\":\"Manage general event configuration such as API Emails.\",\"created\":\"2023-05-20T01:20:31.639587+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_write\",\"display_name\":\"Security Monitoring Findings Write\",\"description\":\"Mute CSPM Findings.\",\"created\":\"2023-05-23T22:50:34.532448+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_read\",\"display_name\":\"Cloud Cost Management Read\",\"description\":\"View Cloud Cost pages. This does not restrict access to the cloud cost data source in dashboards and notebooks.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_write\",\"display_name\":\"Cloud Cost Management Write\",\"description\":\"Configure cloud cost accounts and global customizations.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"attributes\":{\"name\":\"host_tags_write\",\"display_name\":\"Host Tags Write\",\"description\":\"Add and change tags on hosts.\",\"created\":\"2023-05-31T05:26:07.469293+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_pipelines_write\",\"display_name\":\"CI Visibility Pipelines Write\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"created\":\"2023-06-01T11:35:17.513706+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_read\",\"display_name\":\"Quality Gate Rules Read\",\"description\":\"View Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_write\",\"display_name\":\"Quality Gate Rules Write\",\"description\":\"Edit Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"attributes\":{\"name\":\"metrics_metadata_write\",\"display_name\":\"Metrics Metadata Write\",\"description\":\"Edit metadata on metrics.\",\"created\":\"2023-06-23T17:31:34.182629+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"attributes\":{\"name\":\"rum_delete_data\",\"display_name\":\"RUM Delete Data\",\"description\":\"Delete data from RUM.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_write\",\"display_name\":\"Vulnerability Management Write\",\"description\":\"Update status or assignee of vulnerabilities.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"attributes\":{\"name\":\"reference_tables_write\",\"display_name\":\"Reference Tables Write\",\"description\":\"Create or modify Reference Tables.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Reference Tables\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"attributes\":{\"name\":\"rum_playlist_write\",\"display_name\":\"RUM Playlist Write\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"created\":\"2023-07-07T17:31:08.450865+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_delete\",\"display_name\":\"Pipeline Delete\",\"description\":\"Delete pipelines from your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_deploy\",\"display_name\":\"Pipeline Deploy\",\"description\":\"Deploy pipelines in your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"attributes\":{\"name\":\"processes_generate_metrics\",\"display_name\":\"Processes Generate Metrics\",\"description\":\"Create custom metrics from processes.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"Processes\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"attributes\":{\"name\":\"api_keys_delete\",\"display_name\":\"API Keys Delete\",\"description\":\"Delete API Keys for your organization.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5c79b2-21a4-11ee-99ee-da7ad0900002\",\"attributes\":{\"name\":\"agent_flare_collection\",\"display_name\":\"Agent Flare Collection\",\"description\":\"Collect an Agent flare with Fleet Automation.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Fleet Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"attributes\":{\"name\":\"facets_write\",\"display_name\":\"Facets Write\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"created\":\"2023-07-27T17:36:24.369352+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0e73c2-3d23-11ee-aa7d-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_read\",\"display_name\":\"Security Suppressions Read\",\"description\":\"Read Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0eb666-3d23-11ee-aa7e-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_write\",\"display_name\":\"Security Suppressions Write\",\"description\":\"Write Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5356dfd2-3dee-11ee-b07b-da7ad0900002\",\"attributes\":{\"name\":\"static_analysis_settings_write\",\"display_name\":\"Static Analysis Settings Write\",\"description\":\"Edit Static Analysis settings.\",\"created\":\"2023-08-18T17:40:30.474557+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"263eff86-6925-11ee-acc0-da7ad0900002\",\"attributes\":{\"name\":\"ndm_netflow_port_mappings_write\",\"display_name\":\"NDM Netflow Port Mappings Write\",\"description\":\"Write NDM Netflow port mappings.\",\"created\":\"2023-10-12T17:31:17.142666+00:00\",\"group_name\":\"Network Device Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7c7836fc-6f6e-11ee-8cdd-da7ad0900002\",\"attributes\":{\"name\":\"debugger_capture_variables\",\"display_name\":\"Dynamic Instrumentation Capture Variables\",\"description\":\"Create or modify Dynamic Instrumentation probes that capture function state: local variables, method arguments, fields, and return value or thrown exception.\",\"created\":\"2023-10-20T17:31:22.039614+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10098bc8-984b-11ee-9b69-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_settings_write\",\"display_name\":\"Error Tracking Settings Write\",\"description\":\"Disable Error Tracking, edit inclusion filters, and edit rate limit.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10091e90-984b-11ee-9b68-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_exclusion_filters_write\",\"display_name\":\"Error Tracking Exclusion Filters Write\",\"description\":\"Add or change Error Tracking exclusion filters.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b572396-ba15-11ee-9e19-da7ad0900002\",\"attributes\":{\"name\":\"integrations_read\",\"display_name\":\"Integrations Read\",\"description\":\"View integrations and their configurations.\",\"created\":\"2024-01-23T17:30:31.083178+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"27b95c32-ccf1-11ee-ae65-da7ad0900002\",\"attributes\":{\"name\":\"containers_generate_image_metrics\",\"display_name\":\"Containers Write Image Trend Metrics\",\"description\":\"Create or edit trend metrics from container images.\",\"created\":\"2024-02-16T17:31:02.070090+00:00\",\"group_name\":\"Containers\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a82d01ce-e228-11ee-870e-da7ad0900002\",\"attributes\":{\"name\":\"rum_extend_retention\",\"display_name\":\"RUM Session Replay Extend Retention\",\"description\":\"Extend the retention of Session Replays.\",\"created\":\"2024-03-14T17:31:14.314721+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca06b2b4-f5cd-11ee-9e77-da7ad0900002\",\"attributes\":{\"name\":\"dora_settings_write\",\"display_name\":\"DORA Settings Write\",\"description\":\"Edit the settings for DORA.\",\"created\":\"2024-04-08T17:31:10.159381+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "6f66600e-dd12-11e8-9e55-7f30fbb45e73", + "type": "permissions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/80374004-00f9-11ef-8230-da7ad0900002/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/80374004-00f9-11ef-8230-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Grant permission to a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2024-04-22T22:41:48.488Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-List_permissions_for_a_role_returns_OK_response-1713825708" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"815c6a0e-00f9-11ef-a1a4-da7ad0900002\",\"attributes\":{\"name\":\"Test-List_permissions_for_a_role_returns_OK_response-1713825708\",\"created_at\":\"2024-04-22T22:41:48.894668+00:00\",\"modified_at\":\"2024-04-22T22:41:48.894668+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"Deprecated. Standard Access has been replaced by more specific permissions.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards or embeddable graphs externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Manage Downtimes\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute monitors. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Locations Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Locations Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical Views\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create and rename API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filters Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filters Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Dynamic Instrumentation Write\",\"description\":\"Edit Dynamic Instrumentation configuration. Create or modify Dynamic Instrumentation probes that do not capture function state.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Dynamic Instrumentation Read\",\"description\":\"View Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace, and enabling & disabling Remote Configuration for the entire organization.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incidents Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incident Settings Read\",\"description\":\"View Incident Settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incident Settings Write\",\"description\":\"Configure Incident Settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Management Event Rules Read\",\"description\":\"View Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Management Event Rules Write\",\"description\":\"Edit Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_read\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.074031+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_write\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.077905+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Read\",\"description\":\"View pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Write\",\"description\":\"Edit pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_read\",\"display_name\":\"Workflows Read\",\"description\":\"View workflows.\",\"created\":\"2022-02-03T15:07:12.058412+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_write\",\"display_name\":\"Workflows Write\",\"description\":\"Create, edit, and delete workflows.\",\"created\":\"2022-02-03T15:07:12.061765+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_run\",\"display_name\":\"Workflows Run\",\"description\":\"Run workflows.\",\"created\":\"2022-02-03T15:07:12.060079+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_read\",\"display_name\":\"Connections Read\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"created\":\"2022-02-03T15:07:12.053432+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_write\",\"display_name\":\"Connections Write\",\"description\":\"Create and delete connections.\",\"created\":\"2022-02-03T15:07:12.056590+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"attributes\":{\"name\":\"incidents_private_global_access\",\"display_name\":\"Private Incidents Global Access\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"created\":\"2022-02-11T18:36:08.531989+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"attributes\":{\"name\":\"logs_delete_data\",\"display_name\":\"Logs Delete Data\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"created\":\"2022-02-25T18:51:06.176019+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"attributes\":{\"name\":\"manage_integrations\",\"display_name\":\"Integrations Manage\",\"description\":\"Install, uninstall, and configure integrations.\",\"created\":\"2022-04-26T20:21:40.285834+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"attributes\":{\"name\":\"monitor_config_policy_write\",\"display_name\":\"Monitor Configuration Policy Write\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"created\":\"2022-06-23T16:26:48.150556+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"attributes\":{\"name\":\"logs_write_forwarding_rules\",\"display_name\":\"Logs Write Forwarding Rules\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"created\":\"2022-08-08T21:30:42.723663+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"Deprecated. View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"attributes\":{\"name\":\"connections_resolve\",\"display_name\":\"Connections Resolve\",\"description\":\"Resolve connections.\",\"created\":\"2022-08-25T15:25:56.325170+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_read\",\"display_name\":\"Application Security Management Protect Read\",\"description\":\"View blocked attackers.\",\"created\":\"2022-10-27T09:25:33.834253+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_write\",\"display_name\":\"Application Security Management Protect Write\",\"description\":\"Manage blocked attackers.\",\"created\":\"2022-10-27T09:25:33.843656+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_read\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.827076+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_write\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement.\",\"created\":\"2022-10-27T09:25:33.831383+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"99474cc2-5a12-11ed-b547-da7ad0900002\",\"attributes\":{\"name\":\"apps_run\",\"display_name\":\"Apps View\",\"description\":\"View and run Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.584393+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9948271e-5a12-11ed-b548-da7ad0900002\",\"attributes\":{\"name\":\"apps_write\",\"display_name\":\"Apps Write\",\"description\":\"Create, edit, and delete Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.590588+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"attributes\":{\"name\":\"cases_read\",\"display_name\":\"Cases Read\",\"description\":\"View Cases.\",\"created\":\"2022-12-12T18:40:54.018521+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"attributes\":{\"name\":\"cases_write\",\"display_name\":\"Cases Write\",\"description\":\"Create and update cases.\",\"created\":\"2022-12-12T18:40:54.023280+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_write\",\"display_name\":\"APM Remote Configuration Write\",\"description\":\"Edit APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.450768+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_read\",\"display_name\":\"APM Remote Configuration Read\",\"description\":\"View APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.446298+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_write\",\"display_name\":\"CI Visibility Tests Write\",\"description\":\"Edit flaky tests and delete Test Services.\",\"created\":\"2022-12-13T16:01:37.157428+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"attributes\":{\"name\":\"ci_provider_settings_write\",\"display_name\":\"CI Provider Settings Write\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"created\":\"2022-12-13T16:01:37.141217+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_settings_write\",\"display_name\":\"CI Visibility Settings Write\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"created\":\"2022-12-13T16:01:37.153418+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_activation_write\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"description\":\"Enable or disable Intelligent Test Runner.\",\"created\":\"2022-12-13T16:01:37.163771+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_settings_write\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"description\":\"Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"created\":\"2022-12-13T16:01:37.169430+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"attributes\":{\"name\":\"continuous_profiler_read\",\"display_name\":\"Continuous Profiler Read\",\"description\":\"View data in Continuous Profiler.\",\"created\":\"2022-12-16T16:50:32.545882+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"attributes\":{\"name\":\"teams_manage\",\"display_name\":\"Teams Manage\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"created\":\"2023-01-18T20:45:59.977837+00:00\",\"group_name\":\"Teams\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_read\",\"display_name\":\"Security Monitoring Findings Read\",\"description\":\"View CSPM Findings.\",\"created\":\"2023-02-24T14:30:30.983679+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_read\",\"display_name\":\"Incident Notification Settings Read\",\"description\":\"View Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_write\",\"display_name\":\"Incident Notification Settings Write\",\"description\":\"Configure Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"attributes\":{\"name\":\"ci_ingestion_control_write\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"created\":\"2023-03-24T10:25:33.934187+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_write\",\"display_name\":\"Error Tracking Issue Write\",\"description\":\"Edit Error Tracking issues.\",\"created\":\"2023-03-27T16:55:44.263627+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_alerts_write\",\"display_name\":\"Watchdog Alerts Write\",\"description\":\"Manage Watchdog Alerts.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"attributes\":{\"name\":\"saved_views_write\",\"display_name\":\"Saved Views Write\",\"description\":\"Modify Saved Views across all Datadog products.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_read\",\"display_name\":\"Client Tokens Read\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_write\",\"display_name\":\"Client Tokens Write\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_read\",\"display_name\":\"Event Correlation Config Read\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_write\",\"display_name\":\"Event Correlation Config Write\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"attributes\":{\"name\":\"event_config_write\",\"display_name\":\"Event Config Write\",\"description\":\"Manage general event configuration such as API Emails.\",\"created\":\"2023-05-20T01:20:31.639587+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_write\",\"display_name\":\"Security Monitoring Findings Write\",\"description\":\"Mute CSPM Findings.\",\"created\":\"2023-05-23T22:50:34.532448+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_read\",\"display_name\":\"Cloud Cost Management Read\",\"description\":\"View Cloud Cost pages. This does not restrict access to the cloud cost data source in dashboards and notebooks.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_write\",\"display_name\":\"Cloud Cost Management Write\",\"description\":\"Configure cloud cost accounts and global customizations.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"attributes\":{\"name\":\"host_tags_write\",\"display_name\":\"Host Tags Write\",\"description\":\"Add and change tags on hosts.\",\"created\":\"2023-05-31T05:26:07.469293+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_pipelines_write\",\"display_name\":\"CI Visibility Pipelines Write\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"created\":\"2023-06-01T11:35:17.513706+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_read\",\"display_name\":\"Quality Gate Rules Read\",\"description\":\"View Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_write\",\"display_name\":\"Quality Gate Rules Write\",\"description\":\"Edit Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"attributes\":{\"name\":\"metrics_metadata_write\",\"display_name\":\"Metrics Metadata Write\",\"description\":\"Edit metadata on metrics.\",\"created\":\"2023-06-23T17:31:34.182629+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"attributes\":{\"name\":\"rum_delete_data\",\"display_name\":\"RUM Delete Data\",\"description\":\"Delete data from RUM.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_write\",\"display_name\":\"Vulnerability Management Write\",\"description\":\"Update status or assignee of vulnerabilities.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"attributes\":{\"name\":\"reference_tables_write\",\"display_name\":\"Reference Tables Write\",\"description\":\"Create or modify Reference Tables.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Reference Tables\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"attributes\":{\"name\":\"rum_playlist_write\",\"display_name\":\"RUM Playlist Write\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"created\":\"2023-07-07T17:31:08.450865+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_delete\",\"display_name\":\"Pipeline Delete\",\"description\":\"Delete pipelines from your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_deploy\",\"display_name\":\"Pipeline Deploy\",\"description\":\"Deploy pipelines in your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"attributes\":{\"name\":\"processes_generate_metrics\",\"display_name\":\"Processes Generate Metrics\",\"description\":\"Create custom metrics from processes.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"Processes\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"attributes\":{\"name\":\"api_keys_delete\",\"display_name\":\"API Keys Delete\",\"description\":\"Delete API Keys for your organization.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5c79b2-21a4-11ee-99ee-da7ad0900002\",\"attributes\":{\"name\":\"agent_flare_collection\",\"display_name\":\"Agent Flare Collection\",\"description\":\"Collect an Agent flare with Fleet Automation.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Fleet Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"attributes\":{\"name\":\"facets_write\",\"display_name\":\"Facets Write\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"created\":\"2023-07-27T17:36:24.369352+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0e73c2-3d23-11ee-aa7d-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_read\",\"display_name\":\"Security Suppressions Read\",\"description\":\"Read Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0eb666-3d23-11ee-aa7e-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_write\",\"display_name\":\"Security Suppressions Write\",\"description\":\"Write Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5356dfd2-3dee-11ee-b07b-da7ad0900002\",\"attributes\":{\"name\":\"static_analysis_settings_write\",\"display_name\":\"Static Analysis Settings Write\",\"description\":\"Edit Static Analysis settings.\",\"created\":\"2023-08-18T17:40:30.474557+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"263eff86-6925-11ee-acc0-da7ad0900002\",\"attributes\":{\"name\":\"ndm_netflow_port_mappings_write\",\"display_name\":\"NDM Netflow Port Mappings Write\",\"description\":\"Write NDM Netflow port mappings.\",\"created\":\"2023-10-12T17:31:17.142666+00:00\",\"group_name\":\"Network Device Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7c7836fc-6f6e-11ee-8cdd-da7ad0900002\",\"attributes\":{\"name\":\"debugger_capture_variables\",\"display_name\":\"Dynamic Instrumentation Capture Variables\",\"description\":\"Create or modify Dynamic Instrumentation probes that capture function state: local variables, method arguments, fields, and return value or thrown exception.\",\"created\":\"2023-10-20T17:31:22.039614+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10098bc8-984b-11ee-9b69-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_settings_write\",\"display_name\":\"Error Tracking Settings Write\",\"description\":\"Disable Error Tracking, edit inclusion filters, and edit rate limit.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10091e90-984b-11ee-9b68-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_exclusion_filters_write\",\"display_name\":\"Error Tracking Exclusion Filters Write\",\"description\":\"Add or change Error Tracking exclusion filters.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b572396-ba15-11ee-9e19-da7ad0900002\",\"attributes\":{\"name\":\"integrations_read\",\"display_name\":\"Integrations Read\",\"description\":\"View integrations and their configurations.\",\"created\":\"2024-01-23T17:30:31.083178+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"27b95c32-ccf1-11ee-ae65-da7ad0900002\",\"attributes\":{\"name\":\"containers_generate_image_metrics\",\"display_name\":\"Containers Write Image Trend Metrics\",\"description\":\"Create or edit trend metrics from container images.\",\"created\":\"2024-02-16T17:31:02.070090+00:00\",\"group_name\":\"Containers\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a82d01ce-e228-11ee-870e-da7ad0900002\",\"attributes\":{\"name\":\"rum_extend_retention\",\"display_name\":\"RUM Session Replay Extend Retention\",\"description\":\"Extend the retention of Session Replays.\",\"created\":\"2024-03-14T17:31:14.314721+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca06b2b4-f5cd-11ee-9e77-da7ad0900002\",\"attributes\":{\"name\":\"dora_settings_write\",\"display_name\":\"DORA Settings Write\",\"description\":\"Edit the settings for DORA.\",\"created\":\"2024-04-08T17:31:10.159381+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "6f66600e-dd12-11e8-9e55-7f30fbb45e73", + "type": "permissions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/815c6a0e-00f9-11ef-a1a4-da7ad0900002/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/roles/815c6a0e-00f9-11ef-a1a4-da7ad0900002/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/815c6a0e-00f9-11ef-a1a4-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List permissions for a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2026-03-13T15:14:58.673Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2018-10-19T15:35:23.734317Z\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"display_name\":\"Privileged Access\",\"display_type\":\"other\",\"group_name\":\"General\",\"name\":\"admin\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2018-10-19T15:35:23.756736Z\",\"description\":\"Deprecated. Standard Access has been replaced by more specific permissions.\",\"display_name\":\"Standard Access\",\"display_type\":\"other\",\"group_name\":\"General\",\"name\":\"standard\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2018-10-31T13:39:19.72745Z\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"display_name\":\"Logs Read Index Data\",\"display_type\":\"read\",\"group_name\":\"Log Management\",\"name\":\"logs_read_index_data\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2018-10-31T13:39:27.148615Z\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"display_name\":\"Logs Modify Indexes\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_modify_indexes\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2018-10-31T13:39:48.292879Z\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"display_name\":\"Logs Live Tail\",\"display_type\":\"read\",\"group_name\":\"Log Management\",\"name\":\"logs_live_tail\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2018-10-31T13:40:11.926613Z\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"display_name\":\"Logs Write Exclusion Filters\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_write_exclusion_filters\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2018-10-31T13:40:17.996379Z\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"display_name\":\"Logs Write Pipelines\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_write_pipelines\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2018-10-31T13:40:23.969725Z\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"display_name\":\"Logs Write Processors\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_write_processors\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2018-10-31T13:40:29.040786Z\",\"description\":\"Add and edit Log Archives.\",\"display_name\":\"Logs Write Archives\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_write_archives\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2019-07-25T12:27:39.640758Z\",\"description\":\"Create custom metrics from logs.\",\"display_name\":\"Logs Generate Metrics\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_generate_metrics\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2019-09-10T14:39:51.955175Z\",\"description\":\"View dashboards.\",\"display_name\":\"Dashboards Read\",\"display_type\":\"read\",\"group_name\":\"Dashboards\",\"name\":\"dashboards_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2019-09-10T14:39:51.962944Z\",\"description\":\"Create and change dashboards.\",\"display_name\":\"Dashboards Write\",\"display_type\":\"write\",\"group_name\":\"Dashboards\",\"name\":\"dashboards_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2019-09-10T14:39:51.967094Z\",\"description\":\"Create, modify and delete shared dashboards with share type 'Public'. These dashboards can be accessed by anyone on the internet.\",\"display_name\":\"Shared Dashboards Public Write\",\"display_type\":\"write\",\"group_name\":\"Dashboards\",\"name\":\"dashboards_public_share\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2019-09-16T18:39:07.744297Z\",\"description\":\"View monitors.\",\"display_name\":\"Monitors Read\",\"display_type\":\"read\",\"group_name\":\"Monitors\",\"name\":\"monitors_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2019-09-16T18:39:15.597109Z\",\"description\":\"Edit, delete, and resolve individual monitors.\",\"display_name\":\"Monitors Write\",\"display_type\":\"write\",\"group_name\":\"Monitors\",\"name\":\"monitors_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2019-09-16T18:39:23.306702Z\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute monitors. The ability to write monitors is not required to set downtimes.\",\"display_name\":\"Manage Downtimes\",\"display_type\":\"write\",\"group_name\":\"Monitors\",\"name\":\"monitors_downtime\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-04-06T16:24:35.989108Z\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"display_name\":\"Logs Read Data\",\"display_type\":\"read\",\"group_name\":\"Log Management\",\"name\":\"logs_read_data\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-04-23T07:40:27.966133Z\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"display_name\":\"Logs Read Archives\",\"display_type\":\"read\",\"group_name\":\"Log Management\",\"name\":\"logs_read_archives\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-06-09T13:52:25.279909Z\",\"description\":\"Read Detection Rules.\",\"display_name\":\"Security Rules Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_rules_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-06-09T13:52:39.099413Z\",\"description\":\"Create and edit Detection Rules.\",\"display_name\":\"Security Rules Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_rules_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-06-09T13:52:48.410398Z\",\"description\":\"View Security Signals.\",\"display_name\":\"Security Signals Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_signals_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-08-17T15:11:06.963503Z\",\"description\":\"Modify Security Signals.\",\"display_name\":\"Security Signals Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_signals_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-08-25T19:17:23.539701Z\",\"description\":\"Invite other users to your organization.\",\"display_name\":\"User Access Invite\",\"display_type\":\"write\",\"group_name\":\"Access Management\",\"name\":\"user_access_invite\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-08-25T19:17:28.810412Z\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"display_name\":\"User Access Manage\",\"display_type\":\"write\",\"group_name\":\"Access Management\",\"name\":\"user_access_manage\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"View and manage Application Keys owned by the user.\",\"display_name\":\"User App Keys\",\"display_type\":\"write\",\"group_name\":\"API and Application Keys\",\"name\":\"user_app_keys\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"View Application Keys owned by all users in the organization.\",\"display_name\":\"Org App Keys Read\",\"display_type\":\"read\",\"group_name\":\"API and Application Keys\",\"name\":\"org_app_keys_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"display_name\":\"Org App Keys Write\",\"display_type\":\"write\",\"group_name\":\"API and Application Keys\",\"name\":\"org_app_keys_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"View, search, and use Synthetics private locations.\",\"display_name\":\"Synthetics Private Locations Read\",\"display_type\":\"read\",\"group_name\":\"Synthetic Monitoring\",\"name\":\"synthetics_private_location_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"display_name\":\"Synthetics Private Locations Write\",\"display_type\":\"write\",\"group_name\":\"Synthetic Monitoring\",\"name\":\"synthetics_private_location_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"display_name\":\"Billing Read\",\"display_type\":\"read\",\"group_name\":\"Billing and Usage\",\"name\":\"billing_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"Manage your organization's subscription and payment method.\",\"display_name\":\"Billing Edit\",\"display_type\":\"write\",\"group_name\":\"Billing and Usage\",\"name\":\"billing_edit\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"View your organization's usage and usage attribution.\",\"display_name\":\"Usage Read\",\"display_type\":\"read\",\"group_name\":\"Billing and Usage\",\"name\":\"usage_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"Manage your organization's usage attribution set-up.\",\"display_name\":\"Usage Edit\",\"display_type\":\"write\",\"group_name\":\"Billing and Usage\",\"name\":\"usage_edit\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-01T14:06:05.444705Z\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"display_name\":\"Metric Tags Write\",\"display_type\":\"write\",\"group_name\":\"Metrics\",\"name\":\"metric_tags_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-16T08:38:44.242076Z\",\"description\":\"Rehydrate logs from Archives.\",\"display_name\":\"Logs Write Historical Views\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_write_historical_view\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-17T20:20:10.834252Z\",\"description\":\"View Audit Trail in your organization.\",\"display_name\":\"Audit Trail Read\",\"display_type\":\"read\",\"group_name\":\"Compliance\",\"name\":\"audit_logs_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-17T20:20:23.279769Z\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"display_name\":\"API Keys Read\",\"display_type\":\"read\",\"group_name\":\"API and Application Keys\",\"name\":\"api_keys_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-17T20:20:35.26443Z\",\"description\":\"Create and rename API Keys for your organization.\",\"display_name\":\"API Keys Write\",\"display_type\":\"write\",\"group_name\":\"API and Application Keys\",\"name\":\"api_keys_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-17T20:20:48.446916Z\",\"description\":\"View, search, and use Synthetics global variables.\",\"display_name\":\"Synthetics Global Variable Read\",\"display_type\":\"read\",\"group_name\":\"Synthetic Monitoring\",\"name\":\"synthetics_global_variable_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-17T20:20:56.322003Z\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"display_name\":\"Synthetics Global Variable Write\",\"display_type\":\"write\",\"group_name\":\"Synthetic Monitoring\",\"name\":\"synthetics_global_variable_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-17T20:21:05.205361Z\",\"description\":\"List and view configured Synthetic tests and test results.\",\"display_name\":\"Synthetics Read\",\"display_type\":\"read\",\"group_name\":\"Synthetic Monitoring\",\"name\":\"synthetics_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-17T20:21:14.94914Z\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"display_name\":\"Synthetics Write\",\"display_type\":\"write\",\"group_name\":\"Synthetic Monitoring\",\"name\":\"synthetics_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-17T20:21:25.79416Z\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"display_name\":\"Synthetics Default Settings Read\",\"display_type\":\"read\",\"group_name\":\"Synthetic Monitoring\",\"name\":\"synthetics_default_settings_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-09-17T20:21:38.818771Z\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"display_name\":\"Synthetics Default Settings Write\",\"display_type\":\"write\",\"group_name\":\"Synthetic Monitoring\",\"name\":\"synthetics_default_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-10-14T12:40:20.271908Z\",\"description\":\"Create or edit Log Facets.\",\"display_name\":\"Logs Write Facets\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_write_facets\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-10-22T14:55:35.814239Z\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"display_name\":\"Service Account Write\",\"display_type\":\"write\",\"group_name\":\"Access Management\",\"name\":\"service_account_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-11-16T19:43:23.198568Z\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"display_name\":\"Integrations API\",\"display_type\":\"other\",\"group_name\":\"Integrations\",\"name\":\"integrations_api\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-11-23T20:55:45.00611Z\",\"description\":\"Read and query APM and Trace Analytics.\",\"display_name\":\"APM Read\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"apm_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-11-23T20:55:49.190595Z\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"display_name\":\"APM Retention Filters Read\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"apm_retention_filter_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-11-23T20:55:53.194236Z\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"display_name\":\"APM Retention Filters Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_retention_filter_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-11-23T20:55:57.768261Z\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"display_name\":\"APM Service Ingest Read\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"apm_service_ingest_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-11-23T20:56:06.419518Z\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"display_name\":\"APM Service Ingest Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_service_ingest_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-11-23T20:56:15.371926Z\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"display_name\":\"APM Apdex Manage Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_apdex_manage_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-11-23T20:56:30.742299Z\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"display_name\":\"APM Tag Management Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_tag_management_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-11-23T20:56:38.658649Z\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"display_name\":\"APM Primary Operation Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_primary_operation_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2020-12-01T19:18:39.866516Z\",\"description\":\"Configure Audit Trail in your organization.\",\"display_name\":\"Audit Trail Write\",\"display_type\":\"write\",\"group_name\":\"Compliance\",\"name\":\"audit_logs_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-01-12T16:59:16.32448Z\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"display_name\":\"RUM Apps Write\",\"display_type\":\"write\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_apps_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-03-08T15:06:59.006815Z\",\"description\":\"Edit Dynamic Instrumentation configuration. Create or modify Dynamic Instrumentation probes that do not capture function state.\",\"display_name\":\"Dynamic Instrumentation Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"debugger_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-03-08T15:06:59.010517Z\",\"description\":\"View Dynamic Instrumentation configuration.\",\"display_name\":\"Dynamic Instrumentation Read\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"debugger_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-03-29T16:56:46.394971Z\",\"description\":\"View Sensitive Data Scanner configurations and scanning results.\",\"display_name\":\"Data Scanner Read\",\"display_type\":\"read\",\"group_name\":\"Compliance\",\"name\":\"data_scanner_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-03-29T16:56:46.398584Z\",\"description\":\"Edit Sensitive Data Scanner configurations.\",\"display_name\":\"Data Scanner Write\",\"display_type\":\"write\",\"group_name\":\"Compliance\",\"name\":\"data_scanner_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-04-23T17:51:12.18734Z\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing \\u0026 unsubscribing from apps in the marketplace, and enabling \\u0026 disabling Remote Configuration for the entire organization.\",\"display_name\":\"Org Management\",\"display_type\":\"write\",\"group_name\":\"Access Management\",\"name\":\"org_management\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-05-10T08:56:23.676833Z\",\"description\":\"Read Security Filters.\",\"display_name\":\"Security Filters Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_filters_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-05-10T08:56:23.680551Z\",\"description\":\"Create, edit, and delete Security Filters.\",\"display_name\":\"Security Filters Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_filters_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-06-22T15:11:09.255499Z\",\"description\":\"View incidents in Datadog.\",\"display_name\":\"Incidents Read\",\"display_type\":\"read\",\"group_name\":\"Case and Incident Management\",\"name\":\"incident_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-06-22T15:11:09.264369Z\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"display_name\":\"Incidents Write\",\"display_type\":\"write\",\"group_name\":\"Case and Incident Management\",\"name\":\"incident_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-06-22T15:11:09.259568Z\",\"description\":\"View Incident Settings.\",\"display_name\":\"Incident Settings Read\",\"display_type\":\"read\",\"group_name\":\"Case and Incident Management\",\"name\":\"incident_settings_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-06-22T15:11:09.261986Z\",\"description\":\"Configure Incident Settings.\",\"display_name\":\"Incident Settings Write\",\"display_type\":\"write\",\"group_name\":\"Case and Incident Management\",\"name\":\"incident_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-07-19T13:31:15.595771Z\",\"description\":\"View Application Security Management Event Rules.\",\"display_name\":\"Application Security Management Event Rules Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"appsec_event_rule_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-07-19T13:31:15.598808Z\",\"description\":\"Edit Application Security Management Event Rules.\",\"display_name\":\"Application Security Management Event Rules Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"appsec_event_rule_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-08-02T09:46:07.671535Z\",\"description\":\"View RUM Applications data.\",\"display_name\":\"RUM Apps Read\",\"display_type\":\"read\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_apps_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-08-02T09:46:07.67464Z\",\"description\":\"View Session Replays.\",\"display_name\":\"RUM Session Replay Read\",\"display_type\":\"read\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_session_replay_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-09-16T08:26:27.366789Z\",\"description\":\"Read Notification Rules.\",\"display_name\":\"Security Notification Rules Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_notification_profiles_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-09-16T08:26:27.369359Z\",\"description\":\"Create, edit, and delete Notification Rules.\",\"display_name\":\"Security Notification Rules Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_notification_profiles_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-09-16T15:31:24.458963Z\",\"description\":\"Create custom metrics from spans.\",\"display_name\":\"APM Generate Metrics\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_generate_metrics\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-11-17T10:41:43.074031Z\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_cws_agent_rules_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-11-17T10:41:43.077905Z\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_cws_agent_rules_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-12-06T14:51:35.049129Z\",\"description\":\"Add and change APM pipeline configurations.\",\"display_name\":\"APM Pipelines Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_pipelines_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-12-07T11:26:43.807269Z\",\"description\":\"View APM pipeline configurations.\",\"display_name\":\"APM Pipelines Read\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"apm_pipelines_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-12-09T00:11:38.956827Z\",\"description\":\"View pipelines in your organization.\",\"display_name\":\"Observability Pipelines Read\",\"display_type\":\"read\",\"group_name\":\"Observability Pipelines\",\"name\":\"observability_pipelines_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2021-12-09T00:11:38.960833Z\",\"description\":\"Edit pipelines in your organization.\",\"display_name\":\"Observability Pipelines Write\",\"display_type\":\"write\",\"group_name\":\"Observability Pipelines\",\"name\":\"observability_pipelines_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-02-03T15:07:12.058412Z\",\"description\":\"View workflows.\",\"display_name\":\"Workflows Read\",\"display_type\":\"read\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"workflows_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-02-03T15:07:12.061765Z\",\"description\":\"Create, edit, and delete workflows.\",\"display_name\":\"Workflows Write\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"workflows_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-02-03T15:07:12.060079Z\",\"description\":\"Run workflows.\",\"display_name\":\"Workflows Run\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"workflows_run\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-02-03T15:07:12.053432Z\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"display_name\":\"Connections Read\",\"display_type\":\"read\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"connections_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-02-03T15:07:12.05659Z\",\"description\":\"Create and delete connections.\",\"display_name\":\"Connections Write\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"connections_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-02-11T18:36:08.531989Z\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"display_name\":\"Private Incidents Global Access\",\"display_type\":\"read\",\"group_name\":\"Case and Incident Management\",\"name\":\"incidents_private_global_access\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-03-02T18:51:05.04095Z\",\"description\":\"View notebooks.\",\"display_name\":\"Notebooks Read\",\"display_type\":\"read\",\"group_name\":\"Notebooks\",\"name\":\"notebooks_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-03-02T18:51:05.044683Z\",\"description\":\"Create and change notebooks.\",\"display_name\":\"Notebooks Write\",\"display_type\":\"write\",\"group_name\":\"Notebooks\",\"name\":\"notebooks_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-02-25T18:51:06.176019Z\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"display_name\":\"Logs Delete Data\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_delete_data\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-04-11T16:26:24.106645Z\",\"description\":\"Create custom metrics from RUM events.\",\"display_name\":\"RUM Generate Metrics\",\"display_type\":\"write\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_generate_metrics\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7b1f5086-c59e-11ec-aa32-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-04-26T20:21:40.278829Z\",\"description\":\"Add or remove but not edit AWS integration configurations.\",\"display_name\":\"AWS Configurations Manage\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"aws_configurations_manage\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7b1f5088-c59e-11ec-aa32-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-04-26T20:21:40.284056Z\",\"description\":\"Add or remove but not edit Azure integration configurations.\",\"display_name\":\"Azure Configurations Manage\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"azure_configurations_manage\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7b1f5087-c59e-11ec-aa32-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-04-26T20:21:40.282282Z\",\"description\":\"Add or remove but not edit GCP integration configurations.\",\"display_name\":\"GCP Configurations Manage\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"gcp_configurations_manage\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-04-26T20:21:40.285834Z\",\"description\":\"Install, uninstall, and configure integrations.\",\"display_name\":\"Integrations Manage\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"manage_integrations\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-05-17T13:56:09.870985Z\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"display_name\":\"Usage Notifications Read\",\"display_type\":\"read\",\"group_name\":\"Billing and Usage\",\"name\":\"usage_notifications_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-05-17T13:56:09.876124Z\",\"description\":\"Receive notifications and configure notification settings.\",\"display_name\":\"Usage Notifications Write\",\"display_type\":\"write\",\"group_name\":\"Billing and Usage\",\"name\":\"usage_notifications_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-06-06T18:21:03.378896Z\",\"description\":\"Schedule PDF reports from a dashboard.\",\"display_name\":\"Dashboards Report Write\",\"display_type\":\"write\",\"group_name\":\"Dashboards\",\"name\":\"generate_dashboard_reports\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-06-08T16:20:55.142591Z\",\"description\":\"View SLOs and status corrections.\",\"display_name\":\"SLOs Read\",\"display_type\":\"read\",\"group_name\":\"Service Level Objectives\",\"name\":\"slos_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-06-08T16:20:55.143869Z\",\"description\":\"Create, edit, and delete SLOs.\",\"display_name\":\"SLOs Write\",\"display_type\":\"write\",\"group_name\":\"Service Level Objectives\",\"name\":\"slos_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-06-08T16:20:55.13941Z\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"display_name\":\"SLOs Status Corrections\",\"display_type\":\"write\",\"group_name\":\"Service Level Objectives\",\"name\":\"slos_corrections\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-06-23T16:26:48.150556Z\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"display_name\":\"Monitor Configuration Policy Write\",\"display_type\":\"write\",\"group_name\":\"Monitors\",\"name\":\"monitor_config_policy_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-08-08T16:55:39.377188Z\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"display_name\":\"Service Catalog Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_service_catalog_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-08-08T16:55:39.374377Z\",\"description\":\"View service catalog and service definitions.\",\"display_name\":\"Service Catalog Read\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"apm_service_catalog_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-08-08T21:30:42.723663Z\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"display_name\":\"Logs Write Forwarding Rules\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_write_forwarding_rules\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-08-15T20:25:36.677197Z\",\"description\":\"Deprecated. Watchdog Insights endpoints are now OPEN.\",\"display_name\":\"Watchdog Insights Read\",\"display_type\":\"read\",\"group_name\":\"Watchdog\",\"name\":\"watchdog_insights_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-08-25T15:25:56.32517Z\",\"description\":\"Resolve connections.\",\"display_name\":\"Connections Resolve\",\"display_type\":\"read\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"connections_resolve\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-10-27T09:25:33.834253Z\",\"description\":\"View blocked attackers.\",\"display_name\":\"Application Security Management Protect Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"appsec_protect_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-10-27T09:25:33.843656Z\",\"description\":\"Manage blocked attackers.\",\"display_name\":\"Application Security Management Protect Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"appsec_protect_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-10-27T09:25:33.827076Z\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"appsec_activation_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-10-27T09:25:33.831383Z\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement.\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"appsec_activation_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"99474cc2-5a12-11ed-b547-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-11-01T18:25:44.584393Z\",\"description\":\"View and run Apps in App Builder.\",\"display_name\":\"Apps View\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"apps_run\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"9948271e-5a12-11ed-b548-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-11-01T18:25:44.590588Z\",\"description\":\"Create, edit, publish, and delete Apps in App Builder.\",\"display_name\":\"Apps Write\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"apps_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-12T18:40:54.018521Z\",\"description\":\"View Cases.\",\"display_name\":\"Cases Read\",\"display_type\":\"read\",\"group_name\":\"Case and Incident Management\",\"name\":\"cases_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-12T18:40:54.02328Z\",\"description\":\"Create and update cases.\",\"display_name\":\"Cases Write\",\"display_type\":\"write\",\"group_name\":\"Case and Incident Management\",\"name\":\"cases_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-12T20:20:49.450768Z\",\"description\":\"Edit APM Remote Configuration.\",\"display_name\":\"APM Remote Configuration Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_remote_configuration_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-12T20:20:49.446298Z\",\"description\":\"View APM Remote Configuration.\",\"display_name\":\"APM Remote Configuration Read\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"apm_remote_configuration_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-13T16:01:37.149406Z\",\"description\":\"View CI Visibility.\",\"display_name\":\"CI Visibility Read\",\"display_type\":\"read\",\"group_name\":\"Software Delivery\",\"name\":\"ci_visibility_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-13T16:01:37.157428Z\",\"description\":\"Edit flaky tests and delete Test Services.\",\"display_name\":\"CI Visibility Tests Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"ci_visibility_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-13T16:01:37.141217Z\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"display_name\":\"CI Provider Settings Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"ci_provider_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-13T16:01:37.153418Z\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"display_name\":\"CI Visibility Settings Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"ci_visibility_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-13T16:01:37.163771Z\",\"description\":\"Deprecated. Enable or disable Intelligent Test Runner.\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"intelligent_test_runner_activation_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-13T16:01:37.16943Z\",\"description\":\"Deprecated. Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"intelligent_test_runner_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2022-12-16T16:50:32.545882Z\",\"description\":\"View data in Continuous Profiler.\",\"display_name\":\"Continuous Profiler Read\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"continuous_profiler_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-01-18T20:45:59.977837Z\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"display_name\":\"Teams Manage\",\"display_type\":\"write\",\"group_name\":\"Teams\",\"name\":\"teams_manage\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-02-24T14:30:30.983679Z\",\"description\":\"View a list of findings that include both misconfigurations and identity risks.\",\"display_name\":\"Security Monitoring Findings Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_findings_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-02-24T17:25:59.263037Z\",\"description\":\"View Incidents Notification settings.\",\"display_name\":\"Incident Notification Settings Read\",\"display_type\":\"read\",\"group_name\":\"Case and Incident Management\",\"name\":\"incident_notification_settings_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-02-24T17:25:59.263037Z\",\"description\":\"Configure Incidents Notification settings.\",\"display_name\":\"Incident Notification Settings Write\",\"display_type\":\"write\",\"group_name\":\"Case and Incident Management\",\"name\":\"incident_notification_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-03-24T10:25:33.934187Z\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"ci_ingestion_control_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-03-27T16:55:44.263627Z\",\"description\":\"Edit Error Tracking issues.\",\"display_name\":\"Error Tracking Issue Write\",\"display_type\":\"write\",\"group_name\":\"Error Tracking\",\"name\":\"error_tracking_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-04-15T03:45:24.289668Z\",\"description\":\"Manage Watchdog Alerts.\",\"display_name\":\"Watchdog Alerts Write\",\"display_type\":\"write\",\"group_name\":\"Watchdog\",\"name\":\"watchdog_alerts_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-04-15T03:45:24.289668Z\",\"description\":\"Modify Saved Views across all Datadog products.\",\"display_name\":\"Saved Views Write\",\"display_type\":\"write\",\"group_name\":\"Cross-Product Features\",\"name\":\"saved_views_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-04-19T09:55:24.976379Z\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"display_name\":\"Client Tokens Read\",\"display_type\":\"read\",\"group_name\":\"API and Application Keys\",\"name\":\"client_tokens_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-04-19T09:55:24.976379Z\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"display_name\":\"Client Tokens Write\",\"display_type\":\"write\",\"group_name\":\"API and Application Keys\",\"name\":\"client_tokens_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-05-16T22:26:02.839419Z\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"display_name\":\"Event Correlation Config Read\",\"display_type\":\"read\",\"group_name\":\"Events\",\"name\":\"event_correlation_config_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-05-16T22:26:02.839419Z\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"display_name\":\"Event Correlation Config Write\",\"display_type\":\"write\",\"group_name\":\"Events\",\"name\":\"event_correlation_config_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-05-20T01:20:31.639587Z\",\"description\":\"Manage general event configuration such as API Emails.\",\"display_name\":\"Event Config Write\",\"display_type\":\"write\",\"group_name\":\"Events\",\"name\":\"event_config_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-05-23T22:50:34.532448Z\",\"description\":\"Mute CSPM Findings.\",\"display_name\":\"Security Monitoring Findings Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_findings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-05-31T20:35:17.490437Z\",\"description\":\"View Cloud Cost pages and the cloud cost data source in dashboards and notebooks. For more details, see the Cloud Cost Management docs.\",\"display_name\":\"Cloud Cost Management Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Cost Management\",\"name\":\"cloud_cost_management_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-05-31T20:35:17.490437Z\",\"description\":\"Configure cloud cost accounts and global customizations. For more details, see the Cloud Cost Management docs.\",\"display_name\":\"Cloud Cost Management Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Cost Management\",\"name\":\"cloud_cost_management_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-05-31T05:26:07.469293Z\",\"description\":\"Add and change tags on hosts.\",\"display_name\":\"Host Tags Write\",\"display_type\":\"write\",\"group_name\":\"Metrics\",\"name\":\"host_tags_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-06-01T11:35:17.513706Z\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"display_name\":\"CI Visibility Pipelines Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"ci_visibility_pipelines_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-06-19T17:31:08.295856Z\",\"description\":\"View PR Gate Rules.\",\"display_name\":\"PR Gate Rules Read\",\"display_type\":\"read\",\"group_name\":\"Software Delivery\",\"name\":\"quality_gate_rules_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-06-19T17:31:08.295856Z\",\"description\":\"Edit PR Gate Rules.\",\"display_name\":\"PR Gate Rules Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"quality_gate_rules_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-06-23T17:31:34.182629Z\",\"description\":\"Edit metadata on metrics.\",\"display_name\":\"Metrics Metadata Write\",\"display_type\":\"write\",\"group_name\":\"Metrics\",\"name\":\"metrics_metadata_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-06-12T17:51:01.32545Z\",\"description\":\"Delete data from RUM.\",\"display_name\":\"RUM Delete Data\",\"display_type\":\"write\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_delete_data\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-06-12T17:51:01.32545Z\",\"description\":\"Update status or assignee of vulnerabilities.\",\"display_name\":\"Vulnerability Management Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"appsec_vm_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-06-12T17:51:01.32545Z\",\"description\":\"Create or modify Reference Tables.\",\"display_name\":\"Reference Tables Write\",\"display_type\":\"write\",\"group_name\":\"Reference Tables\",\"name\":\"reference_tables_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-07-07T17:31:08.450865Z\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"display_name\":\"RUM Playlist Write\",\"display_type\":\"write\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_playlist_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-07-13T17:40:57.140947Z\",\"description\":\"Delete pipelines from your organization.\",\"display_name\":\"Observability Pipelines Delete\",\"display_type\":\"write\",\"group_name\":\"Observability Pipelines\",\"name\":\"observability_pipelines_delete\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-07-13T17:40:57.140947Z\",\"description\":\"Deploy pipelines in your organization.\",\"display_name\":\"Observability Pipelines Deploy\",\"display_type\":\"write\",\"group_name\":\"Observability Pipelines\",\"name\":\"observability_pipelines_deploy\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-07-12T17:35:18.858294Z\",\"description\":\"Create custom metrics from processes.\",\"display_name\":\"Processes Generate Metrics\",\"display_type\":\"write\",\"group_name\":\"Processes\",\"name\":\"processes_generate_metrics\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-07-12T17:35:18.858294Z\",\"description\":\"Delete API Keys for your organization.\",\"display_name\":\"API Keys Delete\",\"display_type\":\"write\",\"group_name\":\"API and Application Keys\",\"name\":\"api_keys_delete\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6c5c79b2-21a4-11ee-99ee-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-07-13T17:40:57.140947Z\",\"description\":\"Collect an Agent flare with Fleet Automation.\",\"display_name\":\"Agent Flare Collection\",\"display_type\":\"write\",\"group_name\":\"Fleet Automation\",\"name\":\"agent_flare_collection\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"807a82d8-2724-11ee-84ec-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-07-20T17:40:22.283891Z\",\"description\":\"Control which organizations can query your organization's data.\",\"display_name\":\"Org Connections Write\",\"display_type\":\"write\",\"group_name\":\"Access Management\",\"name\":\"org_connections_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8079f2e6-2724-11ee-84eb-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-07-20T17:40:22.283891Z\",\"description\":\"View which organizations can query data from your organization. Query data from other organizations.\",\"display_name\":\"Org Connections Read\",\"display_type\":\"read\",\"group_name\":\"Access Management\",\"name\":\"org_connections_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-07-27T17:36:24.369352Z\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"display_name\":\"Facets Write\",\"display_type\":\"write\",\"group_name\":\"Cross-Product Features\",\"name\":\"facets_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"de0e73c2-3d23-11ee-aa7d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-08-17T17:31:15.369551Z\",\"description\":\"Read Rule Suppressions.\",\"display_name\":\"Security Suppressions Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_suppressions_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"de0eb666-3d23-11ee-aa7e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-08-17T17:31:15.369551Z\",\"description\":\"Write Rule Suppressions.\",\"display_name\":\"Security Suppressions Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_suppressions_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5356dfd2-3dee-11ee-b07b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-08-18T17:40:30.474557Z\",\"description\":\"Edit Static Analysis settings.\",\"display_name\":\"Static Analysis Settings Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"static_analysis_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-09-09T00:06:00.708335Z\",\"description\":\"View CD Visibility.\",\"display_name\":\"CD Visibility Read\",\"display_type\":\"read\",\"group_name\":\"Software Delivery\",\"name\":\"cd_visibility_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"263eff86-6925-11ee-acc0-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-10-12T17:31:17.142666Z\",\"description\":\"Write NDM Netflow enrichment mappings.\",\"display_name\":\"NDM Netflow Enrichments Write\",\"display_type\":\"write\",\"group_name\":\"Network Device Monitoring\",\"name\":\"ndm_netflow_port_mappings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-10-13T17:31:17.311029Z\",\"description\":\"View infrastructure, application code and library vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"display_name\":\"Vulnerability Management Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"appsec_vm_read\",\"name_aliases\":[],\"restricted\":true}},{\"id\":\"7c7836fc-6f6e-11ee-8cdd-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-10-20T17:31:22.039614Z\",\"description\":\"Create or modify Dynamic Instrumentation probes that capture function state: local variables, method arguments, fields, and return value or thrown exception.\",\"display_name\":\"Dynamic Instrumentation Capture Variables\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"debugger_capture_variables\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"10098bc8-984b-11ee-9b69-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-12-11T17:31:05.405902Z\",\"description\":\"Disable Error Tracking, edit inclusion filters, and edit rate limit.\",\"display_name\":\"Error Tracking Settings Write\",\"display_type\":\"write\",\"group_name\":\"Error Tracking\",\"name\":\"error_tracking_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"10091e90-984b-11ee-9b68-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2023-12-11T17:31:05.405902Z\",\"description\":\"Add or change Error Tracking exclusion filters.\",\"display_name\":\"Error Tracking Exclusion Filters Write\",\"display_type\":\"write\",\"group_name\":\"Error Tracking\",\"name\":\"error_tracking_exclusion_filters_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1b572396-ba15-11ee-9e19-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-01-23T17:30:31.083178Z\",\"description\":\"View integrations and their configurations.\",\"display_name\":\"Integrations Read\",\"display_type\":\"read\",\"group_name\":\"Integrations\",\"name\":\"integrations_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bdda759a-c1f0-11ee-b428-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-02-02T17:30:21.655244Z\",\"description\":\"Add, modify, and delete API catalog definitions.\",\"display_name\":\"API Catalog Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_api_catalog_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bdda0cea-c1f0-11ee-b427-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-02-02T17:30:21.655244Z\",\"description\":\"View API catalog and API definitions.\",\"display_name\":\"API Catalog Read\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"apm_api_catalog_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"27b95c32-ccf1-11ee-ae65-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-02-16T17:31:02.07009Z\",\"description\":\"Create or edit trend metrics from container images.\",\"display_name\":\"Containers Write Image Trend Metrics\",\"display_type\":\"write\",\"group_name\":\"Containers\",\"name\":\"containers_generate_image_metrics\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a82d01ce-e228-11ee-870e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-03-14T17:31:14.314721Z\",\"description\":\"Extend the retention of Session Replays.\",\"display_name\":\"RUM Session Replay Extend Retention\",\"display_type\":\"write\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_extend_retention\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"50c173fc-e54d-11ee-bb23-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-03-18T17:31:12.515412Z\",\"description\":\"View and search Private Action Runners for Workflow Automation and App Builder.\",\"display_name\":\"Private Action Runner Read\",\"display_type\":\"read\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"on_prem_runner_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"50c1dd10-e54d-11ee-bb24-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-03-18T17:31:12.515412Z\",\"description\":\"Attach a Private Action Runner to a connection.\",\"display_name\":\"Private Action Runner Contribute\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"on_prem_runner_use\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"50c1e0b2-e54d-11ee-bb25-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-03-18T17:31:12.515412Z\",\"description\":\"Create and edit Private Action Runners for Workflow Automation and App Builder.\",\"display_name\":\"Private Action Runner Write\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"on_prem_runner_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ca06b2b4-f5cd-11ee-9e77-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-04-08T17:31:10.159381Z\",\"description\":\"Edit the settings for DORA.\",\"display_name\":\"DORA Settings Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"dora_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ce892b8a-00ce-11ef-8fca-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-04-22T17:36:10.012624Z\",\"description\":\"Upgrade Datadog Agents with Fleet Automation.\",\"display_name\":\"Agent Upgrade\",\"display_type\":\"write\",\"group_name\":\"Fleet Automation\",\"name\":\"agent_upgrade_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f5f475d4-0197-11ef-be1f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-04-23T17:36:04.989467Z\",\"description\":\"Read and query Continuous Profiler data for Profile-Guided Optimization (PGO).\",\"display_name\":\"Read Continuous Profiler Profile-Guided Optimization (PGO) Data\",\"display_type\":\"read\",\"group_name\":\"APM\",\"name\":\"continuous_profiler_pgo_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f5f4d31c-0197-11ef-be20-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-04-23T17:36:04.989467Z\",\"description\":\"Add or remove but not edit Oracle Cloud integration configurations.\",\"display_name\":\"OCI Configurations Manage\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"oci_configurations_manage\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f5f4e8fc-0197-11ef-be21-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-04-23T17:36:04.989467Z\",\"description\":\"View but not add, remove, or edit AWS integration configurations.\",\"display_name\":\"AWS Configuration Read\",\"display_type\":\"read\",\"group_name\":\"Integrations\",\"name\":\"aws_configuration_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f5f4e9a6-0197-11ef-be22-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-04-23T17:36:04.989467Z\",\"description\":\"View but not add, remove, or edit Azure integration configurations.\",\"display_name\":\"Azure Configuration Read\",\"display_type\":\"read\",\"group_name\":\"Integrations\",\"name\":\"azure_configuration_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f5f4ec44-0197-11ef-be23-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-04-23T17:36:04.989467Z\",\"description\":\"View but not add, remove, or edit GCP integration configurations.\",\"display_name\":\"GCP Configuration Read\",\"display_type\":\"read\",\"group_name\":\"Integrations\",\"name\":\"gcp_configuration_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"f5f4f068-0197-11ef-be24-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-04-23T17:36:04.989467Z\",\"description\":\"View but not add, remove, or edit Oracle Cloud integration configurations.\",\"display_name\":\"OCI Configuration Read\",\"display_type\":\"read\",\"group_name\":\"Integrations\",\"name\":\"oci_configuration_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e2310daa-08a9-11ef-8653-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-05-02T17:32:00.912808Z\",\"description\":\"Edit but not add or remove AWS integration configurations.\",\"display_name\":\"AWS Configuration Edit\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"aws_configuration_edit\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e23194fa-08a9-11ef-8654-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-05-02T17:32:00.912808Z\",\"description\":\"Edit but not add or remove Azure integration configurations.\",\"display_name\":\"Azure Configuration Edit\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"azure_configuration_edit\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e2319608-08a9-11ef-8655-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-05-02T17:32:00.912808Z\",\"description\":\"Edit but not add or remove GCP integration configurations.\",\"display_name\":\"GCP Configuration Edit\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"gcp_configuration_edit\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e231ca6a-08a9-11ef-8656-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-05-02T17:32:00.912808Z\",\"description\":\"Edit but not add or remove Oracle Cloud integration configurations.\",\"display_name\":\"OCI Configuration Edit\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"oci_configuration_edit\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8c3a9cde-0973-11ef-a2be-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-05-03T17:35:35.030875Z\",\"description\":\"View LLM Observability.\",\"display_name\":\"LLM Observability Read\",\"display_type\":\"read\",\"group_name\":\"LLM Observability\",\"name\":\"llm_observability_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"cb5a53dc-13aa-11ef-9749-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-05-16T17:36:14.883078Z\",\"description\":\"Manage your organization's flex logs configuration.\",\"display_name\":\"Flex Logs Configuration Write\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"flex_logs_config_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3cf14194-2298-11ef-9d71-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-06-04T17:31:12.458506Z\",\"description\":\"View Reference Tables.\",\"display_name\":\"Reference Tables Read\",\"display_type\":\"read\",\"group_name\":\"Reference Tables\",\"name\":\"reference_tables_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"2757c192-389a-11ef-b37c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-07-02T17:40:20.794842Z\",\"description\":\"Create and deploy Agent configurations.\",\"display_name\":\"Agent Configuration Management\",\"display_type\":\"write\",\"group_name\":\"Fleet Automation\",\"name\":\"fleet_policies_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"27583ae6-389a-11ef-b37d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-07-02T17:40:20.794842Z\",\"description\":\"Enable, disable and update custom resource indexing.\",\"display_name\":\"Custom Resource Definition Write\",\"display_type\":\"write\",\"group_name\":\"Orchestration\",\"name\":\"orchestration_custom_resource_definitions_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ce67705a-5419-11ef-8c73-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-06T17:32:08.55681Z\",\"description\":\"View Code Analysis.\",\"display_name\":\"Code Analysis Read\",\"display_type\":\"read\",\"group_name\":\"Software Delivery\",\"name\":\"code_analysis_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ce67efb2-5419-11ef-8c74-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-06T17:32:08.55681Z\",\"description\":\"Enable, disable, and configure workload autoscaling. Apply workload scaling recommendations.\",\"display_name\":\"Workload Scaling Write\",\"display_type\":\"write\",\"group_name\":\"Orchestration\",\"name\":\"orchestration_workload_scaling_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ad8b4c4a-5990-11ef-b34b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-13T16:25:39.351685Z\",\"description\":\"Create, Update, and Delete LLM Observability resources including User Defined Evaluations, OOTB Evaluations, and User Defined Topics.\",\"display_name\":\"LLM Observability Write\",\"display_type\":\"write\",\"group_name\":\"LLM Observability\",\"name\":\"llm_observability_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5377e20c-6563-11ef-bd11-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-28T17:31:14.83001Z\",\"description\":\"View captured events of pipelines in your organization.\",\"display_name\":\"Observability Pipelines Live Capture Read\",\"display_type\":\"read\",\"group_name\":\"Observability Pipelines\",\"name\":\"observability_pipelines_capture_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"53784710-6563-11ef-bd12-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-28T17:31:14.83001Z\",\"description\":\"Capture live events of pipelines in your organization.\",\"display_name\":\"Observability Pipelines Live Capture Write\",\"display_type\":\"write\",\"group_name\":\"Observability Pipelines\",\"name\":\"observability_pipelines_capture_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bf446b0a-60ad-11ef-83c4-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-22T17:41:22.628257Z\",\"description\":\"Allows read access to the data within the Actions Datastore.\",\"display_name\":\"Actions Datastore Read\",\"display_type\":\"read\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"apps_datastore_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bf446e2a-60ad-11ef-83c5-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-22T17:41:22.628257Z\",\"description\":\"Allows modification of data within the Actions Datastore, including adding, editing, and deleting records.\",\"display_name\":\"Actions Datastore Write\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"apps_datastore_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bf4407e6-60ad-11ef-83c3-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-22T17:41:22.628257Z\",\"description\":\"Allows management of the Actions Datastore, including creating, updating, and deleting the datastore itself.\",\"display_name\":\"Actions Datastore Manage\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"apps_datastore_manage\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5dffba8a-66f6-11ef-8976-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-30T17:36:19.679492Z\",\"description\":\"View Security Pipelines.\",\"display_name\":\"Security Pipelines Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_pipelines_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5e0024fc-66f6-11ef-8977-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-08-30T17:36:19.679492Z\",\"description\":\"Create, edit, and delete Security Pipelines.\",\"display_name\":\"Security Pipelines Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_pipelines_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"503d01ea-751b-11ef-85ac-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-09-17T17:36:04.251012Z\",\"description\":\"Create, delete and update connection groups.\",\"display_name\":\"Connection Groups Write\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"connection_groups_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"479d4934-79e2-11ef-98d5-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-09-23T19:30:24.281417Z\",\"description\":\"Allow quality gates evaluations.\",\"display_name\":\"Quality Gates Evaluations\",\"display_type\":\"read\",\"group_name\":\"Software Delivery\",\"name\":\"quality_gates_evaluations_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bdc2acbe-7c1f-11ef-b362-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-09-26T15:55:24.124953Z\",\"description\":\"Read and use connection groups.\",\"display_name\":\"Connection Groups Read\",\"display_type\":\"read\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"connection_groups_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"824e509c-7c5c-11ef-ba38-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-09-26T23:10:23.67733Z\",\"description\":\"Managing actions on Cloud Workload Security Agent Rules.\",\"display_name\":\"Cloud Workload Security Agent Actions\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_cws_agent_rules_actions\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a91ee0ba-8184-11ef-ac5a-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-10-03T12:40:24.480611Z\",\"description\":\"View RUM Retention filters data.\",\"display_name\":\"RUM Retention Filters Read\",\"display_type\":\"read\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_retention_filters_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a91f5112-8184-11ef-ac5b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-10-03T12:40:24.480611Z\",\"description\":\"Write RUM Retention filters.\",\"display_name\":\"RUM Retention Filters Write\",\"display_type\":\"write\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_retention_filters_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bc3f9ed4-8a3d-11ef-b5a4-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-10-14T15:05:22.769126Z\",\"description\":\"View and use DDSQL Editor.\",\"display_name\":\"DDSQL Editor Read\",\"display_type\":\"read\",\"group_name\":\"DDSQL Editor\",\"name\":\"ddsql_editor_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a8c986a6-989a-11ef-873e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-11-01T21:45:49.593207Z\",\"description\":\"View the disaster recovery status.\",\"display_name\":\"Datadog Disaster Recovery Read\",\"display_type\":\"read\",\"group_name\":\"Disaster Recovery\",\"name\":\"disaster_recovery_status_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a8ca1fda-989a-11ef-873f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-11-01T21:45:49.593207Z\",\"description\":\"Update the disaster recovery status.\",\"display_name\":\"Datadog Disaster Recovery Write\",\"display_type\":\"write\",\"group_name\":\"Disaster Recovery\",\"name\":\"disaster_recovery_status_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ebae5be2-9d16-11ef-9394-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-11-07T14:45:24.068066Z\",\"description\":\"Write RUM Settings.\",\"display_name\":\"RUM Settings Write\",\"display_type\":\"write\",\"group_name\":\"Real User Monitoring\",\"name\":\"rum_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ebaf0448-9d16-11ef-9397-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-11-07T14:45:24.068066Z\",\"description\":\"View Test Optimization.\",\"display_name\":\"Test Optimization Read\",\"display_type\":\"read\",\"group_name\":\"Software Delivery\",\"name\":\"test_optimization_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"ebaf05ba-9d16-11ef-9398-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-11-07T14:45:24.068066Z\",\"description\":\"Manage flaky tests for Test Optimization.\",\"display_name\":\"Test Optimization Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"test_optimization_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"09e34b76-a6b4-11ef-8ab9-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-11-19T20:22:46.198145Z\",\"description\":\"Create, delete and update Test Optimization settings.\",\"display_name\":\"Test Optimization Settings Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"test_optimization_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8babfb74-a90e-11ef-b4c3-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-11-22T20:15:40.970745Z\",\"description\":\"Write comments into vulnerabilities.\",\"display_name\":\"Security Comments Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_comments_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8baca0ba-a90e-11ef-b4c4-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-11-22T20:15:40.970745Z\",\"description\":\"Read comments of vulnerabilities.\",\"display_name\":\"Security Comments Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_comments_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5bc0cdea-b732-11ef-b2f0-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-12-10T20:07:18.737674Z\",\"description\":\"Create, modify and delete shared dashboards with share type 'Invite-only'. These dashboards can only be accessed by user-specified email addresses.\",\"display_name\":\"Shared Dashboards Invite-only Write\",\"display_type\":\"write\",\"group_name\":\"Dashboards\",\"name\":\"dashboards_invite_share\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5bc15422-b732-11ef-b2f1-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-12-10T20:07:18.737674Z\",\"description\":\"Create, modify and delete shared dashboards with share type 'Embed'. These dashboards can be embedded on user-specified domains.\",\"display_name\":\"Shared Dashboards Embed Write\",\"display_type\":\"write\",\"group_name\":\"Dashboards\",\"name\":\"dashboards_embed_share\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5bc15562-b732-11ef-b2f2-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-12-10T20:07:18.737674Z\",\"description\":\"Generate public links to share embeddable graphs externally.\",\"display_name\":\"Shared Graphs Write\",\"display_type\":\"write\",\"group_name\":\"Dashboards\",\"name\":\"embeddable_graphs_share\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6595b70a-b7fe-11ef-977d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-12-11T20:27:52.565232Z\",\"description\":\"View Logs Workspaces.\",\"display_name\":\"Read Logs Workspaces\",\"display_type\":\"read\",\"group_name\":\"Log Management\",\"name\":\"logs_read_workspaces\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6596753c-b7fe-11ef-977e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2024-12-11T20:27:52.565232Z\",\"description\":\"Create, update, and delete Logs Workspaces.\",\"display_name\":\"Write Logs Workspaces\",\"display_type\":\"write\",\"group_name\":\"Log Management\",\"name\":\"logs_write_workspaces\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bccba216-cd37-11ef-b636-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-01-07T20:41:14.612376Z\",\"description\":\"View Audience Management data.\",\"display_name\":\"Profiles Read\",\"display_type\":\"read\",\"group_name\":\"Product Analytics\",\"name\":\"audience_management_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bccc2ee8-cd37-11ef-b637-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-01-07T20:41:14.612376Z\",\"description\":\"Modify Audience Management data.\",\"display_name\":\"Profiles Write\",\"display_type\":\"write\",\"group_name\":\"Product Analytics\",\"name\":\"audience_management_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8da487f0-d2af-11ef-91c8-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-01-14T19:41:30.924708Z\",\"description\":\"Read logs configuration.\",\"display_name\":\"Logs Configuration Read\",\"display_type\":\"read\",\"group_name\":\"Log Management\",\"name\":\"logs_read_config\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1c23f168-da90-11ef-910a-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-01-24T20:16:35.403038Z\",\"description\":\"View On-Call teams, schedules, escalation policies and overrides.\",\"display_name\":\"On-Call Read\",\"display_type\":\"read\",\"group_name\":\"On-Call\",\"name\":\"on_call_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1c248fc4-da90-11ef-910b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-01-24T20:16:35.403038Z\",\"description\":\"Create, update, and delete On-Call teams, schedules and escalation policies.\",\"display_name\":\"On-Call Write\",\"display_type\":\"write\",\"group_name\":\"On-Call\",\"name\":\"on_call_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1c24b292-da90-11ef-910c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-01-24T20:16:35.403038Z\",\"description\":\"Page On-Call teams and users.\",\"display_name\":\"On-Call Page\",\"display_type\":\"write\",\"group_name\":\"On-Call\",\"name\":\"on_call_page\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"c6d32708-df47-11ef-abf3-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-01-30T20:21:24.316595Z\",\"description\":\"View DORA metrics.\",\"display_name\":\"DORA Metrics Read\",\"display_type\":\"read\",\"group_name\":\"Software Delivery\",\"name\":\"dora_metrics_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"c6d3a3e0-df47-11ef-abf4-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-01-30T20:21:24.316595Z\",\"description\":\"View Error Tracking data, including stack traces, error messages, and context. Also includes issue classifications and statuses such as For Review and Reviewed.\",\"display_name\":\"Error Tracking Read\",\"display_type\":\"read\",\"group_name\":\"Error Tracking\",\"name\":\"error_tracking_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"66c075bc-e296-11ef-bba7-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-02-04T01:21:46.862659Z\",\"description\":\"Acknowledge, resolve pages and edit overrides. Allow users to configure their On-Call profile.\",\"display_name\":\"On-Call Responder\",\"display_type\":\"write\",\"group_name\":\"On-Call\",\"name\":\"on_call_respond\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"961a20c4-e813-11ef-812f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-02-11T01:00:29.208396Z\",\"description\":\"View Process Tag Rules.\",\"display_name\":\"Process Tags Read\",\"display_type\":\"read\",\"group_name\":\"Processes\",\"name\":\"process_tags_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"961a9c48-e813-11ef-8130-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-02-11T01:00:29.208396Z\",\"description\":\"Create, edit and delete Process Tag Rules.\",\"display_name\":\"Process Tags Write\",\"display_type\":\"write\",\"group_name\":\"Processes\",\"name\":\"process_tags_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"961ab99e-e813-11ef-8131-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-02-11T01:00:29.208396Z\",\"description\":\"Read Cloud Network Connections.\",\"display_name\":\"Network Connections Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Network Monitoring\",\"name\":\"network_connections_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8b6adbea-e8c8-11ef-9955-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-02-11T22:35:50.190498Z\",\"description\":\"View remote instrumentation configuration for serverless workloads.\",\"display_name\":\"Serverless AWS Instrumentation Read\",\"display_type\":\"read\",\"group_name\":\"Serverless\",\"name\":\"serverless_aws_instrumentation_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8b6b780c-e8c8-11ef-9956-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-02-11T22:35:50.190498Z\",\"description\":\"Add, update, and remove remote instrumentation configuration for serverless workloads.\",\"display_name\":\"Serverless AWS Instrumentation Write\",\"display_type\":\"write\",\"group_name\":\"Serverless\",\"name\":\"serverless_aws_instrumentation_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a2862964-f611-11ef-850c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-02-28T20:21:47.334489Z\",\"description\":\"Write terminal recordings.\",\"display_name\":\"CoTerm Write\",\"display_type\":\"write\",\"group_name\":\"CoTerm\",\"name\":\"coterm_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"a2869476-f611-11ef-850d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-02-28T20:21:47.334489Z\",\"description\":\"Read terminal recordings.\",\"display_name\":\"CoTerm Read\",\"display_type\":\"read\",\"group_name\":\"CoTerm\",\"name\":\"coterm_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"fb232b90-fb79-11ef-82a0-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-03-07T17:31:19.476819Z\",\"description\":\"Capture messages from Kafka topics in the Data Streams Monitoring product.\",\"display_name\":\"Data Streams Monitoring Kafka Consume\",\"display_type\":\"write\",\"group_name\":\"Data Streams Monitoring\",\"name\":\"data_streams_monitoring_capture_messages\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"722ecc08-036d-11f0-8484-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-03-17T20:21:45.04654Z\",\"description\":\"View infrastructure diagrams in the Cloudcraft product.\",\"display_name\":\"Cloudcraft Read\",\"display_type\":\"read\",\"group_name\":\"Infrastructure\",\"name\":\"cloudcraft_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1d993a28-0ff9-11f0-9d18-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-04-02T19:31:46.633199Z\",\"description\":\"View NDM device profiles.\",\"display_name\":\"NDM Device Profiles View\",\"display_type\":\"read\",\"group_name\":\"Network Device Monitoring\",\"name\":\"ndm_device_profiles_view\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"1d99b426-0ff9-11f0-9d19-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-04-02T19:31:46.633199Z\",\"description\":\"Edit NDM device profiles.\",\"display_name\":\"NDM Device Profiles Edit\",\"display_type\":\"write\",\"group_name\":\"Network Device Monitoring\",\"name\":\"ndm_device_profiles_edit\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"cdfb1760-118e-11f0-bc0c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-04-04T19:55:48.729049Z\",\"description\":\"Schedule CSV reports. View CSV report schedules created by other users.\",\"display_name\":\"CSV Report Schedules Write\",\"display_type\":\"write\",\"group_name\":\"Cross-Product Features\",\"name\":\"generate_log_reports\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"cdfb9f64-118e-11f0-bc0d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-04-04T19:55:48.729049Z\",\"description\":\"Edit CSV report schedules created by other users.\",\"display_name\":\"CSV Report Schedules Manage\",\"display_type\":\"write\",\"group_name\":\"Cross-Product Features\",\"name\":\"manage_log_reports\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"9c6b2fd2-2160-11f0-a4bc-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-04-24T23:05:27.332459Z\",\"description\":\"Read NDM data directly. Note: even without this permission, NDM data can be retrieved via general infrastructure query APIs.\",\"display_name\":\"NDM Read\",\"display_type\":\"read\",\"group_name\":\"Network Device Monitoring\",\"name\":\"ndm_devices_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"9c6bdd74-2160-11f0-a4bd-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-04-24T23:05:27.332459Z\",\"description\":\"Write NDM device tags.\",\"display_name\":\"NDM Device Tags Write\",\"display_type\":\"write\",\"group_name\":\"Network Device Monitoring\",\"name\":\"ndm_device_tags_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"9c6bfe80-2160-11f0-a4be-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-04-24T23:05:27.332459Z\",\"description\":\"Deprecated. View workload autoscaling objects and recommendations. Note: This permission is in Preview Mode and will be enforced soon.\",\"display_name\":\"Workload Scaling Read (Preview)\",\"display_type\":\"read\",\"group_name\":\"Orchestration\",\"name\":\"orchestration_workload_scaling_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"9727b526-2530-11f0-aa8f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-04-29T19:31:47.309632Z\",\"description\":\"Read Bits investigations.\",\"display_name\":\"Bits Investigations Read\",\"display_type\":\"read\",\"group_name\":\"Bits AI\",\"name\":\"bits_investigations_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3c4eb438-2693-11f0-8a2e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-05-01T13:50:26.23164Z\",\"description\":\"View Sheets.\",\"display_name\":\"Sheets Read\",\"display_type\":\"read\",\"group_name\":\"Sheets\",\"name\":\"sheets_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3c4f1a0e-2693-11f0-8a2f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-05-01T13:50:26.23164Z\",\"description\":\"Create and change Sheets.\",\"display_name\":\"Sheets Write\",\"display_type\":\"write\",\"group_name\":\"Sheets\",\"name\":\"sheets_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bd4af1cc-29e6-11f0-b6ed-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-05-05T19:25:44.343599Z\",\"description\":\"View pages and settings in Status Pages.\",\"display_name\":\"Status Pages Settings Read\",\"display_type\":\"read\",\"group_name\":\"Status Pages\",\"name\":\"status_pages_settings_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bd4afd16-29e6-11f0-b6ee-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-05-05T19:25:44.343599Z\",\"description\":\"Configure page settings in Status Pages.\",\"display_name\":\"Status Pages Settings Write\",\"display_type\":\"write\",\"group_name\":\"Status Pages\",\"name\":\"status_pages_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"bd4afe92-29e6-11f0-b6ef-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-05-05T19:25:44.343599Z\",\"description\":\"Publish notices in Status Pages.\",\"display_name\":\"Status Pages Notice Write\",\"display_type\":\"write\",\"group_name\":\"Status Pages\",\"name\":\"status_pages_incident_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"b5c5b3e0-30fa-11f0-8a0d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-05-14T19:36:19.806713Z\",\"description\":\"Manage sensitive and advanced On-Call settings.\",\"display_name\":\"On-Call Admin\",\"display_type\":\"write\",\"group_name\":\"On-Call\",\"name\":\"on_call_admin\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"37236de4-34eb-11f0-9f9b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-05-19T19:55:29.550539Z\",\"description\":\"Manage autoscaling cluster level configuration.\",\"display_name\":\"Autoscaling Manage\",\"display_type\":\"write\",\"group_name\":\"Orchestration\",\"name\":\"orchestration_autoscaling_manage\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e540c5c8-3a65-11f0-8690-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-05-26T19:16:16.081234Z\",\"description\":\"View Code Coverage data.\",\"display_name\":\"Code Coverage read\",\"display_type\":\"read\",\"group_name\":\"Software Delivery\",\"name\":\"code_coverage_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"80f0e58e-4bb4-11f0-af97-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-06-17T19:51:47.794574Z\",\"description\":\"Configure shared settings for Case Management.\",\"display_name\":\"Case Management Shared Settings Write\",\"display_type\":\"write\",\"group_name\":\"Case and Incident Management\",\"name\":\"cases_shared_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"531cb514-4e13-11f0-917d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-06-20T20:15:35.421308Z\",\"description\":\"View data from Git repositories. Note: This permission is in Preview Mode and will be enforced soon.\",\"display_name\":\"Repository Info Read (Preview)\",\"display_type\":\"read\",\"group_name\":\"Integrations\",\"name\":\"repo_info_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"531cb848-4e13-11f0-917e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-06-20T20:15:35.421308Z\",\"description\":\"Edit Git repositories settings. Note: This permission is in Preview Mode and will be enforced soon.\",\"display_name\":\"Repository Settings Write (Preview)\",\"display_type\":\"write\",\"group_name\":\"Integrations\",\"name\":\"repo_settings_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8f92d602-5086-11f0-b4dd-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-06-23T23:05:31.308206Z\",\"description\":\"Edit Product Analytics application configuration, including enabling and disabling. Enabling or disabling also requires RumAppsWrite permission.\",\"display_name\":\"Product Analytics Apps Write\",\"display_type\":\"write\",\"group_name\":\"Product Analytics\",\"name\":\"product_analytics_apps_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"05a700c8-568d-11f0-a121-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-07-01T15:06:53.368648Z\",\"description\":\"Execute actions in the Bits AI Action Interface.\",\"display_name\":\"Actions Interface Run\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"actions_interface_run\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3a7d4b62-5cfb-11f0-b5fb-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-07-09T19:30:53.631442Z\",\"description\":\"Evaluate AI Guard rules.\",\"display_name\":\"AI Guard Evaluate\",\"display_type\":\"write\",\"group_name\":\"Application Security\",\"name\":\"ai_guard_evaluate\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"b7d5c544-5dc8-11f0-94bb-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-07-10T20:01:50.756018Z\",\"description\":\"View all report schedules and manage only the ones they've created.\",\"display_name\":\"Cloud Cost Report Schedules Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Cost Management\",\"name\":\"generate_ccm_report_schedules\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"b7d660bc-5dc8-11f0-94bc-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-07-10T20:01:50.756018Z\",\"description\":\"View, create, and fully manage all report schedules across the organization.\",\"display_name\":\"Cloud Cost Report Schedules Manage\",\"display_type\":\"write\",\"group_name\":\"Cloud Cost Management\",\"name\":\"manage_ccm_report_schedules\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8c2cd864-716f-11f0-9eb9-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-08-04T20:13:55.553519Z\",\"description\":\"View the Governance Console.\",\"display_name\":\"Governance Console Read\",\"display_type\":\"read\",\"group_name\":\"Access Management\",\"name\":\"governance_console_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"0b32e638-7a0f-11f0-bc08-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-08-15T19:35:47.946146Z\",\"description\":\"Unmask (view) sensitive data that was previouly masked.\",\"display_name\":\"Data Scanner Unmask\",\"display_type\":\"read\",\"group_name\":\"Compliance\",\"name\":\"data_scanner_unmask\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"34724c9c-7c6b-11f0-a2d4-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-08-18T19:40:33.172743Z\",\"description\":\"View and respond to Forms.\",\"display_name\":\"Forms Read\",\"display_type\":\"read\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"apps_form_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3472ea30-7c6b-11f0-a2d5-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-08-18T19:40:33.172743Z\",\"description\":\"Create, update, and manage Forms.\",\"display_name\":\"Forms Manage\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"apps_form_manage\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"fef64526-7dfc-11f0-a6c0-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-08-20T19:36:41.126093Z\",\"description\":\"Edit DORA metrics.\",\"display_name\":\"DORA Metrics Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"dora_metrics_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e285c44a-8381-11f0-93b6-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-08-27T20:10:32.291487Z\",\"description\":\"Run and configure Bits investigations.\",\"display_name\":\"Bits Investigations Write\",\"display_type\":\"write\",\"group_name\":\"Bits AI\",\"name\":\"bits_investigations_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"93678f08-8447-11f0-92ea-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-08-28T19:45:39.906008Z\",\"description\":\"Edit Dynamic Instrumentation configuration. Create or Modify Dynamic Instrumentation probes targeted at pre-prod environments.\",\"display_name\":\"Dynamic Instrumentation Write Pre-Prod\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"debugger_write_pre_prod\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3cb44eda-8db6-11f0-a663-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-09T19:50:29.049127Z\",\"description\":\"Read Network Health Insights.\",\"display_name\":\"Network Health Insights Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Network Monitoring\",\"name\":\"network_health_insights_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3cb4e7e6-8db6-11f0-a664-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-09T19:50:29.049127Z\",\"description\":\"Read Detection Datasets.\",\"display_name\":\"Security Dataset Read\",\"display_type\":\"read\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_datasets_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3cb4eba6-8db6-11f0-a665-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-09T19:50:29.049127Z\",\"description\":\"Create and edit Detection Datasets.\",\"display_name\":\"Security Dataset Write\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"security_monitoring_datasets_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6fbe365a-8e7f-11f0-be57-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-10T19:50:43.520414Z\",\"description\":\"Edit Feature Flag Configurations.\",\"display_name\":\"Feature Flag Write\",\"display_type\":\"write\",\"group_name\":\"Feature Flags\",\"name\":\"feature_flag_config_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6fbec2f0-8e7f-11f0-be58-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-10T19:50:43.520414Z\",\"description\":\"View Feature Flag Configurations.\",\"display_name\":\"Feature Flag Read\",\"display_type\":\"read\",\"group_name\":\"Feature Flags\",\"name\":\"feature_flag_config_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6fbeee92-8e7f-11f0-be59-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-10T19:50:43.520414Z\",\"description\":\"Ability to modify Feature Flag Environment settings.\",\"display_name\":\"Feature Flag Environment Write\",\"display_type\":\"write\",\"group_name\":\"Feature Flags\",\"name\":\"feature_flag_environment_config_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"6fbeef64-8e7f-11f0-be5a-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-10T19:50:43.520414Z\",\"description\":\"Ability to view Feature Flag Environment settings.\",\"display_name\":\"Feature Flag Environment Read\",\"display_type\":\"read\",\"group_name\":\"Feature Flags\",\"name\":\"feature_flag_environment_config_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"3ccb51b0-8f47-11f0-81a8-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-11T19:40:57.388587Z\",\"description\":\"Ability to access the Datadog Assistant.\",\"display_name\":\"Assistant Access\",\"display_type\":\"read\",\"group_name\":\"Assistant\",\"name\":\"assistant_access\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"92b11e72-9012-11f0-9b95-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-12T19:56:29.336995Z\",\"description\":\"View Database Monitoring data.\",\"display_name\":\"Database Monitoring Read\",\"display_type\":\"read\",\"group_name\":\"Database Monitoring\",\"name\":\"dbm_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"92b1b044-9012-11f0-9b96-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-12T19:56:29.336995Z\",\"description\":\"Write NDM Geomap locations.\",\"display_name\":\"NDM Geomap Locations Write\",\"display_type\":\"write\",\"group_name\":\"Network Device Monitoring\",\"name\":\"ndm_geomap_locations_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"5d91ca96-9a46-11f0-9f77-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-09-25T19:32:25.670181Z\",\"description\":\"Read NDM device configurations.\",\"display_name\":\"NDM Device Config Read\",\"display_type\":\"read\",\"group_name\":\"Network Device Monitoring\",\"name\":\"ndm_device_config_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"942678c0-a867-11f0-9fda-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-10-13T19:05:26.912391Z\",\"description\":\"View Parameterized SQL Queries in Database Monitoring.\",\"display_name\":\"Database Monitoring Parameterized Queries Read\",\"display_type\":\"read\",\"group_name\":\"Database Monitoring\",\"name\":\"dbm_parameterized_queries_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"cccaeb6e-a54e-11f0-aeb1-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-10-09T20:30:31.031716Z\",\"description\":\"Edit service renaming. A user with this permission can modify service renaming rules.\",\"display_name\":\"APM Service Renaming Write\",\"display_type\":\"write\",\"group_name\":\"APM\",\"name\":\"apm_service_renaming_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"94271dfc-a867-11f0-9fdb-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-10-13T19:05:26.912391Z\",\"description\":\"View Deployment Gates.\",\"display_name\":\"Deployment Gates Read\",\"display_type\":\"read\",\"group_name\":\"Software Delivery\",\"name\":\"deployment_gates_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"94271f82-a867-11f0-9fdc-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-10-13T19:05:26.912391Z\",\"description\":\"Edit Deployment Gates configuration. Create or update Deployment Gates or Rules.\",\"display_name\":\"Deployment Gates Write\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"deployment_gates_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"94274804-a867-11f0-9fdd-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-10-13T19:05:26.912391Z\",\"description\":\"Evaluate Deployment Gates.\",\"display_name\":\"Deployment Gates Evaluate\",\"display_type\":\"write\",\"group_name\":\"Software Delivery\",\"name\":\"deployment_gates_evaluate\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"12d2d5f6-af7a-11f0-8e1f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-10-22T19:05:28.511295Z\",\"description\":\"View saved Product Analytics charts.\",\"display_name\":\"Product Analytics Saved Charts Read\",\"display_type\":\"read\",\"group_name\":\"Product Analytics\",\"name\":\"product_analytics_saved_widgets_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"12d2defc-af7a-11f0-8e20-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-10-22T19:05:28.511295Z\",\"description\":\"Create, edit, and delete saved Product Analytics charts.\",\"display_name\":\"Product Analytics Saved Charts Write\",\"display_type\":\"write\",\"group_name\":\"Product Analytics\",\"name\":\"product_analytics_saved_widgets_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"42f0457e-c57e-11f0-aeec-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-11-19T19:30:52.807174Z\",\"description\":\"Write data via the MCP server.\",\"display_name\":\"MCP Write\",\"display_type\":\"write\",\"group_name\":\"MCP\",\"name\":\"mcp_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"42f0ed12-c57e-11f0-aeed-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-11-19T19:30:52.807174Z\",\"description\":\"Read data via the MCP server.\",\"display_name\":\"MCP Read\",\"display_type\":\"read\",\"group_name\":\"MCP\",\"name\":\"mcp_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e2bc0cfa-d9fb-11f0-830b-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-12-15T21:20:31.247015Z\",\"description\":\"View notification rules for External Provider Status.\",\"display_name\":\"External Provider Status Notifications Read\",\"display_type\":\"read\",\"group_name\":\"Watchdog\",\"name\":\"external_provider_status_notifications_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e2bcbfba-d9fb-11f0-830c-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-12-15T21:20:31.247015Z\",\"description\":\"Create and modify notification rules for External Provider Status.\",\"display_name\":\"External Provider Status Notifications Write\",\"display_type\":\"write\",\"group_name\":\"Watchdog\",\"name\":\"external_provider_status_notifications_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"559980f6-ca55-11f0-8040-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-11-25T23:20:30.56322Z\",\"description\":\"Enforce Governance controls via the Governance Console.\",\"display_name\":\"Governance Console Write\",\"display_type\":\"write\",\"group_name\":\"Access Management\",\"name\":\"governance_console_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e2bce80a-d9fb-11f0-830d-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-12-15T21:20:31.247015Z\",\"description\":\"Run Bits AI security investigations. Note: This permission is in Preview Mode and will be enforced soon.\",\"display_name\":\"Bits AI Security Analyst Investigations Write (Preview)\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"bits_security_analyst_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"e2bcf0ac-d9fb-11f0-830e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2025-12-15T21:20:31.247015Z\",\"description\":\"Edit Bits AI Security Analyst settings. Note: This permission is in Preview Mode and will be enforced soon.\",\"display_name\":\"Bits AI Security Analyst Config Write (Preview)\",\"display_type\":\"write\",\"group_name\":\"Cloud Security Platform\",\"name\":\"bits_security_analyst_config_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"650d4174-ea6e-11f0-bbcc-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2026-01-05T19:40:31.114771Z\",\"description\":\"View Resource Policies under infrastructure products.\",\"display_name\":\"Infrastructure Resource Policies Read\",\"display_type\":\"read\",\"group_name\":\"Infrastructure\",\"name\":\"infrastructure_resource_policies_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"650e0028-ea6e-11f0-bbcd-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2026-01-05T19:40:31.114771Z\",\"description\":\"Create, edit, and delete Resource Policies under infrastructure products.\",\"display_name\":\"Infrastructure Resource Policies Write\",\"display_type\":\"write\",\"group_name\":\"Infrastructure\",\"name\":\"infrastructure_resource_policies_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8e2764d8-f246-11f0-a91e-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2026-01-15T19:15:29.505667Z\",\"description\":\"View Agents in AgentBuilder.\",\"display_name\":\"Agent Builder Read\",\"display_type\":\"read\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"agent_builder_read\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8e281d1a-f246-11f0-a91f-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2026-01-15T19:15:29.505667Z\",\"description\":\"Create, edit, and delete Agents in AgentBuilder.\",\"display_name\":\"Agent Builder Write\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"agent_builder_write\",\"name_aliases\":[],\"restricted\":false}},{\"id\":\"8e281e5a-f246-11f0-a920-da7ad0900002\",\"type\":\"permissions\",\"attributes\":{\"created\":\"2026-01-15T19:15:29.505667Z\",\"description\":\"Run agents in AgentBuilder.\",\"display_name\":\"Agent Builder Run\",\"display_type\":\"write\",\"group_name\":\"App Builder \\u0026 Workflow Automation\",\"name\":\"agent_builder_run\",\"name_aliases\":[],\"restricted\":false}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List permissions returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:54.932Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-List_roles_returns_OK_response-1652349174" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"4bed0a96-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-List_roles_returns_OK_response-1652349174\",\"created_at\":\"2022-05-12T09:52:55.356883+00:00\",\"modified_at\":\"2022-05-12T09:52:55.420991+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/roles", + "query": [ + [ + "filter", + "Test-List_roles_returns_OK_response-1652349174" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_filtered_count\":1,\"total_count\":4376}},\"data\":[{\"type\":\"roles\",\"id\":\"4bed0a96-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-List_roles_returns_OK_response-1652349174\",\"created_at\":\"2022-05-12T09:52:55.356883+00:00\",\"modified_at\":\"2022-05-12T09:52:55.420991+00:00\",\"user_count\":0},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/4bed0a96-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List roles returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-05-12T09:52:56.397Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Remove_a_user_from_a_role_returns_OK_response-1652349176" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"4cd4ef1e-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Remove_a_user_from_a_role_returns_OK_response-1652349176\",\"created_at\":\"2022-05-12T09:52:56.877176+00:00\",\"modified_at\":\"2022-05-12T09:52:56.929241+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"}]}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Remove_a_user_from_a_role_returns_OK_response-1652349176@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"4d2043ce-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-remove_a_user_from_a_role_returns_ok_response-1652349176@datadoghq.com\",\"created_at\":\"2022-05-12T09:52:57.369469+00:00\",\"modified_at\":\"2022-05-12T09:52:57.419917+00:00\",\"email\":\"test-remove_a_user_from_a_role_returns_ok_response-1652349176@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/261d7f502028b16119eab34d384cc3fb?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "4d2043ce-d1d9-11ec-ad3d-da7ad0900002", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/4cd4ef1e-d1d9-11ec-ad3d-da7ad0900002/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_count\":1}},\"data\":[{\"type\":\"users\",\"id\":\"4d2043ce-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-remove_a_user_from_a_role_returns_ok_response-1652349176@datadoghq.com\",\"created_at\":\"2022-05-12T09:52:57.369469+00:00\",\"modified_at\":\"2022-05-12T09:52:57.419917+00:00\",\"email\":\"test-remove_a_user_from_a_role_returns_ok_response-1652349176@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/261d7f502028b16119eab34d384cc3fb?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"4cd4ef1e-d1d9-11ec-ad3d-da7ad0900002\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "4d2043ce-d1d9-11ec-ad3d-da7ad0900002", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/roles/4cd4ef1e-d1d9-11ec-ad3d-da7ad0900002/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_count\":0}},\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/4d2043ce-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/4cd4ef1e-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Remove a user from a role returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2024-10-23T16:34:06.263Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Revoke_permission_returns_Bad_Request_response-1729701246" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9f155b5c-915c-11ef-b749-da7ad0900002\",\"type\":\"roles\",\"attributes\":{\"created_at\":\"2024-10-23T16:34:06.380085Z\",\"modified_at\":\"2024-10-23T16:34:06.376797Z\",\"name\":\"Test-Revoke_permission_returns_Bad_Request_response-1729701246\",\"user_count\":0},\"relationships\":{\"permissions\":{\"data\":[{\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"type\":\"permissions\"},{\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"type\":\"permissions\"},{\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"type\":\"permissions\"},{\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"type\":\"permissions\"},{\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"type\":\"permissions\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "11111111-dead-beef-dead-ffffffffffff", + "type": "bad_permission_type" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/roles/9f155b5c-915c-11ef-b749-da7ad0900002/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"400 BAD REQUEST\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/9f155b5c-915c-11ef-b749-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Revoke permission returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2024-04-22T22:41:50.838Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"Deprecated. Standard Access has been replaced by more specific permissions.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards or embeddable graphs externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Manage Downtimes\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute monitors. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Locations Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Locations Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical Views\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create and rename API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filters Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filters Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Dynamic Instrumentation Write\",\"description\":\"Edit Dynamic Instrumentation configuration. Create or modify Dynamic Instrumentation probes that do not capture function state.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Dynamic Instrumentation Read\",\"description\":\"View Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace, and enabling & disabling Remote Configuration for the entire organization.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incidents Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incident Settings Read\",\"description\":\"View Incident Settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incident Settings Write\",\"description\":\"Configure Incident Settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Management Event Rules Read\",\"description\":\"View Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Management Event Rules Write\",\"description\":\"Edit Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_read\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.074031+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_write\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.077905+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Read\",\"description\":\"View pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Write\",\"description\":\"Edit pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_read\",\"display_name\":\"Workflows Read\",\"description\":\"View workflows.\",\"created\":\"2022-02-03T15:07:12.058412+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_write\",\"display_name\":\"Workflows Write\",\"description\":\"Create, edit, and delete workflows.\",\"created\":\"2022-02-03T15:07:12.061765+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_run\",\"display_name\":\"Workflows Run\",\"description\":\"Run workflows.\",\"created\":\"2022-02-03T15:07:12.060079+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_read\",\"display_name\":\"Connections Read\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"created\":\"2022-02-03T15:07:12.053432+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_write\",\"display_name\":\"Connections Write\",\"description\":\"Create and delete connections.\",\"created\":\"2022-02-03T15:07:12.056590+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"attributes\":{\"name\":\"incidents_private_global_access\",\"display_name\":\"Private Incidents Global Access\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"created\":\"2022-02-11T18:36:08.531989+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"attributes\":{\"name\":\"logs_delete_data\",\"display_name\":\"Logs Delete Data\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"created\":\"2022-02-25T18:51:06.176019+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"attributes\":{\"name\":\"manage_integrations\",\"display_name\":\"Integrations Manage\",\"description\":\"Install, uninstall, and configure integrations.\",\"created\":\"2022-04-26T20:21:40.285834+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"attributes\":{\"name\":\"monitor_config_policy_write\",\"display_name\":\"Monitor Configuration Policy Write\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"created\":\"2022-06-23T16:26:48.150556+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"attributes\":{\"name\":\"logs_write_forwarding_rules\",\"display_name\":\"Logs Write Forwarding Rules\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"created\":\"2022-08-08T21:30:42.723663+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"Deprecated. View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"attributes\":{\"name\":\"connections_resolve\",\"display_name\":\"Connections Resolve\",\"description\":\"Resolve connections.\",\"created\":\"2022-08-25T15:25:56.325170+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_read\",\"display_name\":\"Application Security Management Protect Read\",\"description\":\"View blocked attackers.\",\"created\":\"2022-10-27T09:25:33.834253+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_write\",\"display_name\":\"Application Security Management Protect Write\",\"description\":\"Manage blocked attackers.\",\"created\":\"2022-10-27T09:25:33.843656+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_read\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.827076+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_write\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement.\",\"created\":\"2022-10-27T09:25:33.831383+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"99474cc2-5a12-11ed-b547-da7ad0900002\",\"attributes\":{\"name\":\"apps_run\",\"display_name\":\"Apps View\",\"description\":\"View and run Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.584393+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9948271e-5a12-11ed-b548-da7ad0900002\",\"attributes\":{\"name\":\"apps_write\",\"display_name\":\"Apps Write\",\"description\":\"Create, edit, and delete Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.590588+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"attributes\":{\"name\":\"cases_read\",\"display_name\":\"Cases Read\",\"description\":\"View Cases.\",\"created\":\"2022-12-12T18:40:54.018521+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"attributes\":{\"name\":\"cases_write\",\"display_name\":\"Cases Write\",\"description\":\"Create and update cases.\",\"created\":\"2022-12-12T18:40:54.023280+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_write\",\"display_name\":\"APM Remote Configuration Write\",\"description\":\"Edit APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.450768+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_read\",\"display_name\":\"APM Remote Configuration Read\",\"description\":\"View APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.446298+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_write\",\"display_name\":\"CI Visibility Tests Write\",\"description\":\"Edit flaky tests and delete Test Services.\",\"created\":\"2022-12-13T16:01:37.157428+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"attributes\":{\"name\":\"ci_provider_settings_write\",\"display_name\":\"CI Provider Settings Write\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"created\":\"2022-12-13T16:01:37.141217+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_settings_write\",\"display_name\":\"CI Visibility Settings Write\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"created\":\"2022-12-13T16:01:37.153418+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_activation_write\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"description\":\"Enable or disable Intelligent Test Runner.\",\"created\":\"2022-12-13T16:01:37.163771+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_settings_write\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"description\":\"Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"created\":\"2022-12-13T16:01:37.169430+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"attributes\":{\"name\":\"continuous_profiler_read\",\"display_name\":\"Continuous Profiler Read\",\"description\":\"View data in Continuous Profiler.\",\"created\":\"2022-12-16T16:50:32.545882+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"attributes\":{\"name\":\"teams_manage\",\"display_name\":\"Teams Manage\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"created\":\"2023-01-18T20:45:59.977837+00:00\",\"group_name\":\"Teams\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_read\",\"display_name\":\"Security Monitoring Findings Read\",\"description\":\"View CSPM Findings.\",\"created\":\"2023-02-24T14:30:30.983679+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_read\",\"display_name\":\"Incident Notification Settings Read\",\"description\":\"View Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_write\",\"display_name\":\"Incident Notification Settings Write\",\"description\":\"Configure Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"attributes\":{\"name\":\"ci_ingestion_control_write\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"created\":\"2023-03-24T10:25:33.934187+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_write\",\"display_name\":\"Error Tracking Issue Write\",\"description\":\"Edit Error Tracking issues.\",\"created\":\"2023-03-27T16:55:44.263627+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_alerts_write\",\"display_name\":\"Watchdog Alerts Write\",\"description\":\"Manage Watchdog Alerts.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"attributes\":{\"name\":\"saved_views_write\",\"display_name\":\"Saved Views Write\",\"description\":\"Modify Saved Views across all Datadog products.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_read\",\"display_name\":\"Client Tokens Read\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_write\",\"display_name\":\"Client Tokens Write\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_read\",\"display_name\":\"Event Correlation Config Read\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_write\",\"display_name\":\"Event Correlation Config Write\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"attributes\":{\"name\":\"event_config_write\",\"display_name\":\"Event Config Write\",\"description\":\"Manage general event configuration such as API Emails.\",\"created\":\"2023-05-20T01:20:31.639587+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_write\",\"display_name\":\"Security Monitoring Findings Write\",\"description\":\"Mute CSPM Findings.\",\"created\":\"2023-05-23T22:50:34.532448+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_read\",\"display_name\":\"Cloud Cost Management Read\",\"description\":\"View Cloud Cost pages. This does not restrict access to the cloud cost data source in dashboards and notebooks.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_write\",\"display_name\":\"Cloud Cost Management Write\",\"description\":\"Configure cloud cost accounts and global customizations.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"attributes\":{\"name\":\"host_tags_write\",\"display_name\":\"Host Tags Write\",\"description\":\"Add and change tags on hosts.\",\"created\":\"2023-05-31T05:26:07.469293+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_pipelines_write\",\"display_name\":\"CI Visibility Pipelines Write\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"created\":\"2023-06-01T11:35:17.513706+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_read\",\"display_name\":\"Quality Gate Rules Read\",\"description\":\"View Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_write\",\"display_name\":\"Quality Gate Rules Write\",\"description\":\"Edit Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"attributes\":{\"name\":\"metrics_metadata_write\",\"display_name\":\"Metrics Metadata Write\",\"description\":\"Edit metadata on metrics.\",\"created\":\"2023-06-23T17:31:34.182629+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"attributes\":{\"name\":\"rum_delete_data\",\"display_name\":\"RUM Delete Data\",\"description\":\"Delete data from RUM.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_write\",\"display_name\":\"Vulnerability Management Write\",\"description\":\"Update status or assignee of vulnerabilities.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"attributes\":{\"name\":\"reference_tables_write\",\"display_name\":\"Reference Tables Write\",\"description\":\"Create or modify Reference Tables.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Reference Tables\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"attributes\":{\"name\":\"rum_playlist_write\",\"display_name\":\"RUM Playlist Write\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"created\":\"2023-07-07T17:31:08.450865+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_delete\",\"display_name\":\"Pipeline Delete\",\"description\":\"Delete pipelines from your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_deploy\",\"display_name\":\"Pipeline Deploy\",\"description\":\"Deploy pipelines in your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"attributes\":{\"name\":\"processes_generate_metrics\",\"display_name\":\"Processes Generate Metrics\",\"description\":\"Create custom metrics from processes.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"Processes\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"attributes\":{\"name\":\"api_keys_delete\",\"display_name\":\"API Keys Delete\",\"description\":\"Delete API Keys for your organization.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5c79b2-21a4-11ee-99ee-da7ad0900002\",\"attributes\":{\"name\":\"agent_flare_collection\",\"display_name\":\"Agent Flare Collection\",\"description\":\"Collect an Agent flare with Fleet Automation.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Fleet Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"attributes\":{\"name\":\"facets_write\",\"display_name\":\"Facets Write\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"created\":\"2023-07-27T17:36:24.369352+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0e73c2-3d23-11ee-aa7d-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_read\",\"display_name\":\"Security Suppressions Read\",\"description\":\"Read Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0eb666-3d23-11ee-aa7e-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_write\",\"display_name\":\"Security Suppressions Write\",\"description\":\"Write Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5356dfd2-3dee-11ee-b07b-da7ad0900002\",\"attributes\":{\"name\":\"static_analysis_settings_write\",\"display_name\":\"Static Analysis Settings Write\",\"description\":\"Edit Static Analysis settings.\",\"created\":\"2023-08-18T17:40:30.474557+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"263eff86-6925-11ee-acc0-da7ad0900002\",\"attributes\":{\"name\":\"ndm_netflow_port_mappings_write\",\"display_name\":\"NDM Netflow Port Mappings Write\",\"description\":\"Write NDM Netflow port mappings.\",\"created\":\"2023-10-12T17:31:17.142666+00:00\",\"group_name\":\"Network Device Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7c7836fc-6f6e-11ee-8cdd-da7ad0900002\",\"attributes\":{\"name\":\"debugger_capture_variables\",\"display_name\":\"Dynamic Instrumentation Capture Variables\",\"description\":\"Create or modify Dynamic Instrumentation probes that capture function state: local variables, method arguments, fields, and return value or thrown exception.\",\"created\":\"2023-10-20T17:31:22.039614+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10098bc8-984b-11ee-9b69-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_settings_write\",\"display_name\":\"Error Tracking Settings Write\",\"description\":\"Disable Error Tracking, edit inclusion filters, and edit rate limit.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10091e90-984b-11ee-9b68-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_exclusion_filters_write\",\"display_name\":\"Error Tracking Exclusion Filters Write\",\"description\":\"Add or change Error Tracking exclusion filters.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b572396-ba15-11ee-9e19-da7ad0900002\",\"attributes\":{\"name\":\"integrations_read\",\"display_name\":\"Integrations Read\",\"description\":\"View integrations and their configurations.\",\"created\":\"2024-01-23T17:30:31.083178+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"27b95c32-ccf1-11ee-ae65-da7ad0900002\",\"attributes\":{\"name\":\"containers_generate_image_metrics\",\"display_name\":\"Containers Write Image Trend Metrics\",\"description\":\"Create or edit trend metrics from container images.\",\"created\":\"2024-02-16T17:31:02.070090+00:00\",\"group_name\":\"Containers\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a82d01ce-e228-11ee-870e-da7ad0900002\",\"attributes\":{\"name\":\"rum_extend_retention\",\"display_name\":\"RUM Session Replay Extend Retention\",\"description\":\"Extend the retention of Session Replays.\",\"created\":\"2024-03-14T17:31:14.314721+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca06b2b4-f5cd-11ee-9e77-da7ad0900002\",\"attributes\":{\"name\":\"dora_settings_write\",\"display_name\":\"DORA Settings Write\",\"description\":\"Edit the settings for DORA.\",\"created\":\"2024-04-08T17:31:10.159381+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "6f66600e-dd12-11e8-9e55-7f30fbb45e73", + "type": "permissions" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/roles/00000000-dead-beef-dead-ffffffffffff/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"00000000-dead-beef-dead-ffffffffffff not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Revoke permission returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2024-04-22T22:41:51.746Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Revoke_permission_returns_OK_response-1713825711" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"83470892-00f9-11ef-a8b2-da7ad0900002\",\"attributes\":{\"name\":\"Test-Revoke_permission_returns_OK_response-1713825711\",\"created_at\":\"2024-04-22T22:41:52.109991+00:00\",\"modified_at\":\"2024-04-22T22:41:52.109991+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"Deprecated. Standard Access has been replaced by more specific permissions.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards or embeddable graphs externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Manage Downtimes\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute monitors. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Locations Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Locations Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical Views\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create and rename API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filters Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filters Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Dynamic Instrumentation Write\",\"description\":\"Edit Dynamic Instrumentation configuration. Create or modify Dynamic Instrumentation probes that do not capture function state.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Dynamic Instrumentation Read\",\"description\":\"View Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace, and enabling & disabling Remote Configuration for the entire organization.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incidents Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incident Settings Read\",\"description\":\"View Incident Settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incident Settings Write\",\"description\":\"Configure Incident Settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Management Event Rules Read\",\"description\":\"View Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Management Event Rules Write\",\"description\":\"Edit Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_read\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.074031+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_write\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.077905+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Read\",\"description\":\"View pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Write\",\"description\":\"Edit pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_read\",\"display_name\":\"Workflows Read\",\"description\":\"View workflows.\",\"created\":\"2022-02-03T15:07:12.058412+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_write\",\"display_name\":\"Workflows Write\",\"description\":\"Create, edit, and delete workflows.\",\"created\":\"2022-02-03T15:07:12.061765+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_run\",\"display_name\":\"Workflows Run\",\"description\":\"Run workflows.\",\"created\":\"2022-02-03T15:07:12.060079+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_read\",\"display_name\":\"Connections Read\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"created\":\"2022-02-03T15:07:12.053432+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_write\",\"display_name\":\"Connections Write\",\"description\":\"Create and delete connections.\",\"created\":\"2022-02-03T15:07:12.056590+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"attributes\":{\"name\":\"incidents_private_global_access\",\"display_name\":\"Private Incidents Global Access\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"created\":\"2022-02-11T18:36:08.531989+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"attributes\":{\"name\":\"logs_delete_data\",\"display_name\":\"Logs Delete Data\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"created\":\"2022-02-25T18:51:06.176019+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"attributes\":{\"name\":\"manage_integrations\",\"display_name\":\"Integrations Manage\",\"description\":\"Install, uninstall, and configure integrations.\",\"created\":\"2022-04-26T20:21:40.285834+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"attributes\":{\"name\":\"monitor_config_policy_write\",\"display_name\":\"Monitor Configuration Policy Write\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"created\":\"2022-06-23T16:26:48.150556+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"attributes\":{\"name\":\"logs_write_forwarding_rules\",\"display_name\":\"Logs Write Forwarding Rules\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"created\":\"2022-08-08T21:30:42.723663+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"Deprecated. View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"attributes\":{\"name\":\"connections_resolve\",\"display_name\":\"Connections Resolve\",\"description\":\"Resolve connections.\",\"created\":\"2022-08-25T15:25:56.325170+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_read\",\"display_name\":\"Application Security Management Protect Read\",\"description\":\"View blocked attackers.\",\"created\":\"2022-10-27T09:25:33.834253+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_write\",\"display_name\":\"Application Security Management Protect Write\",\"description\":\"Manage blocked attackers.\",\"created\":\"2022-10-27T09:25:33.843656+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_read\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.827076+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_write\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement.\",\"created\":\"2022-10-27T09:25:33.831383+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"99474cc2-5a12-11ed-b547-da7ad0900002\",\"attributes\":{\"name\":\"apps_run\",\"display_name\":\"Apps View\",\"description\":\"View and run Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.584393+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9948271e-5a12-11ed-b548-da7ad0900002\",\"attributes\":{\"name\":\"apps_write\",\"display_name\":\"Apps Write\",\"description\":\"Create, edit, and delete Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.590588+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"attributes\":{\"name\":\"cases_read\",\"display_name\":\"Cases Read\",\"description\":\"View Cases.\",\"created\":\"2022-12-12T18:40:54.018521+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"attributes\":{\"name\":\"cases_write\",\"display_name\":\"Cases Write\",\"description\":\"Create and update cases.\",\"created\":\"2022-12-12T18:40:54.023280+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_write\",\"display_name\":\"APM Remote Configuration Write\",\"description\":\"Edit APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.450768+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_read\",\"display_name\":\"APM Remote Configuration Read\",\"description\":\"View APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.446298+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_write\",\"display_name\":\"CI Visibility Tests Write\",\"description\":\"Edit flaky tests and delete Test Services.\",\"created\":\"2022-12-13T16:01:37.157428+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"attributes\":{\"name\":\"ci_provider_settings_write\",\"display_name\":\"CI Provider Settings Write\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"created\":\"2022-12-13T16:01:37.141217+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_settings_write\",\"display_name\":\"CI Visibility Settings Write\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"created\":\"2022-12-13T16:01:37.153418+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_activation_write\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"description\":\"Enable or disable Intelligent Test Runner.\",\"created\":\"2022-12-13T16:01:37.163771+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_settings_write\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"description\":\"Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"created\":\"2022-12-13T16:01:37.169430+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"attributes\":{\"name\":\"continuous_profiler_read\",\"display_name\":\"Continuous Profiler Read\",\"description\":\"View data in Continuous Profiler.\",\"created\":\"2022-12-16T16:50:32.545882+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"attributes\":{\"name\":\"teams_manage\",\"display_name\":\"Teams Manage\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"created\":\"2023-01-18T20:45:59.977837+00:00\",\"group_name\":\"Teams\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_read\",\"display_name\":\"Security Monitoring Findings Read\",\"description\":\"View CSPM Findings.\",\"created\":\"2023-02-24T14:30:30.983679+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_read\",\"display_name\":\"Incident Notification Settings Read\",\"description\":\"View Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_write\",\"display_name\":\"Incident Notification Settings Write\",\"description\":\"Configure Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"attributes\":{\"name\":\"ci_ingestion_control_write\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"created\":\"2023-03-24T10:25:33.934187+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_write\",\"display_name\":\"Error Tracking Issue Write\",\"description\":\"Edit Error Tracking issues.\",\"created\":\"2023-03-27T16:55:44.263627+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_alerts_write\",\"display_name\":\"Watchdog Alerts Write\",\"description\":\"Manage Watchdog Alerts.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"attributes\":{\"name\":\"saved_views_write\",\"display_name\":\"Saved Views Write\",\"description\":\"Modify Saved Views across all Datadog products.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_read\",\"display_name\":\"Client Tokens Read\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_write\",\"display_name\":\"Client Tokens Write\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_read\",\"display_name\":\"Event Correlation Config Read\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_write\",\"display_name\":\"Event Correlation Config Write\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"attributes\":{\"name\":\"event_config_write\",\"display_name\":\"Event Config Write\",\"description\":\"Manage general event configuration such as API Emails.\",\"created\":\"2023-05-20T01:20:31.639587+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_write\",\"display_name\":\"Security Monitoring Findings Write\",\"description\":\"Mute CSPM Findings.\",\"created\":\"2023-05-23T22:50:34.532448+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_read\",\"display_name\":\"Cloud Cost Management Read\",\"description\":\"View Cloud Cost pages. This does not restrict access to the cloud cost data source in dashboards and notebooks.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_write\",\"display_name\":\"Cloud Cost Management Write\",\"description\":\"Configure cloud cost accounts and global customizations.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"attributes\":{\"name\":\"host_tags_write\",\"display_name\":\"Host Tags Write\",\"description\":\"Add and change tags on hosts.\",\"created\":\"2023-05-31T05:26:07.469293+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_pipelines_write\",\"display_name\":\"CI Visibility Pipelines Write\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"created\":\"2023-06-01T11:35:17.513706+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_read\",\"display_name\":\"Quality Gate Rules Read\",\"description\":\"View Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_write\",\"display_name\":\"Quality Gate Rules Write\",\"description\":\"Edit Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"attributes\":{\"name\":\"metrics_metadata_write\",\"display_name\":\"Metrics Metadata Write\",\"description\":\"Edit metadata on metrics.\",\"created\":\"2023-06-23T17:31:34.182629+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"attributes\":{\"name\":\"rum_delete_data\",\"display_name\":\"RUM Delete Data\",\"description\":\"Delete data from RUM.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_write\",\"display_name\":\"Vulnerability Management Write\",\"description\":\"Update status or assignee of vulnerabilities.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"attributes\":{\"name\":\"reference_tables_write\",\"display_name\":\"Reference Tables Write\",\"description\":\"Create or modify Reference Tables.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Reference Tables\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"attributes\":{\"name\":\"rum_playlist_write\",\"display_name\":\"RUM Playlist Write\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"created\":\"2023-07-07T17:31:08.450865+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_delete\",\"display_name\":\"Pipeline Delete\",\"description\":\"Delete pipelines from your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_deploy\",\"display_name\":\"Pipeline Deploy\",\"description\":\"Deploy pipelines in your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"attributes\":{\"name\":\"processes_generate_metrics\",\"display_name\":\"Processes Generate Metrics\",\"description\":\"Create custom metrics from processes.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"Processes\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"attributes\":{\"name\":\"api_keys_delete\",\"display_name\":\"API Keys Delete\",\"description\":\"Delete API Keys for your organization.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5c79b2-21a4-11ee-99ee-da7ad0900002\",\"attributes\":{\"name\":\"agent_flare_collection\",\"display_name\":\"Agent Flare Collection\",\"description\":\"Collect an Agent flare with Fleet Automation.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Fleet Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"attributes\":{\"name\":\"facets_write\",\"display_name\":\"Facets Write\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"created\":\"2023-07-27T17:36:24.369352+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0e73c2-3d23-11ee-aa7d-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_read\",\"display_name\":\"Security Suppressions Read\",\"description\":\"Read Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0eb666-3d23-11ee-aa7e-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_write\",\"display_name\":\"Security Suppressions Write\",\"description\":\"Write Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5356dfd2-3dee-11ee-b07b-da7ad0900002\",\"attributes\":{\"name\":\"static_analysis_settings_write\",\"display_name\":\"Static Analysis Settings Write\",\"description\":\"Edit Static Analysis settings.\",\"created\":\"2023-08-18T17:40:30.474557+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"263eff86-6925-11ee-acc0-da7ad0900002\",\"attributes\":{\"name\":\"ndm_netflow_port_mappings_write\",\"display_name\":\"NDM Netflow Port Mappings Write\",\"description\":\"Write NDM Netflow port mappings.\",\"created\":\"2023-10-12T17:31:17.142666+00:00\",\"group_name\":\"Network Device Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7c7836fc-6f6e-11ee-8cdd-da7ad0900002\",\"attributes\":{\"name\":\"debugger_capture_variables\",\"display_name\":\"Dynamic Instrumentation Capture Variables\",\"description\":\"Create or modify Dynamic Instrumentation probes that capture function state: local variables, method arguments, fields, and return value or thrown exception.\",\"created\":\"2023-10-20T17:31:22.039614+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10098bc8-984b-11ee-9b69-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_settings_write\",\"display_name\":\"Error Tracking Settings Write\",\"description\":\"Disable Error Tracking, edit inclusion filters, and edit rate limit.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10091e90-984b-11ee-9b68-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_exclusion_filters_write\",\"display_name\":\"Error Tracking Exclusion Filters Write\",\"description\":\"Add or change Error Tracking exclusion filters.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b572396-ba15-11ee-9e19-da7ad0900002\",\"attributes\":{\"name\":\"integrations_read\",\"display_name\":\"Integrations Read\",\"description\":\"View integrations and their configurations.\",\"created\":\"2024-01-23T17:30:31.083178+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"27b95c32-ccf1-11ee-ae65-da7ad0900002\",\"attributes\":{\"name\":\"containers_generate_image_metrics\",\"display_name\":\"Containers Write Image Trend Metrics\",\"description\":\"Create or edit trend metrics from container images.\",\"created\":\"2024-02-16T17:31:02.070090+00:00\",\"group_name\":\"Containers\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a82d01ce-e228-11ee-870e-da7ad0900002\",\"attributes\":{\"name\":\"rum_extend_retention\",\"display_name\":\"RUM Session Replay Extend Retention\",\"description\":\"Extend the retention of Session Replays.\",\"created\":\"2024-03-14T17:31:14.314721+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca06b2b4-f5cd-11ee-9e77-da7ad0900002\",\"attributes\":{\"name\":\"dora_settings_write\",\"display_name\":\"DORA Settings Write\",\"description\":\"Edit the settings for DORA.\",\"created\":\"2024-04-08T17:31:10.159381+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "6f66600e-dd12-11e8-9e55-7f30fbb45e73", + "type": "permissions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles/83470892-00f9-11ef-a8b2-da7ad0900002/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "6f66600e-dd12-11e8-9e55-7f30fbb45e73", + "type": "permissions" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/roles/83470892-00f9-11ef-a8b2-da7ad0900002/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/83470892-00f9-11ef-a8b2-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Revoke permission returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-08-26T21:57:22.524Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_role_returns_Bad_Request_response-1661551042" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"10475ae6-258a-11ed-b455-da7ad0900002\",\"attributes\":{\"name\":\"Test-Update_a_role_returns_Bad_Request_response-1661551042\",\"created_at\":\"2022-08-26T21:57:22.716898+00:00\",\"modified_at\":\"2022-08-26T21:57:22.941930+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"View and edit components in your Datadog organization that do not have explicitly defined permissions. This includes configuring some integrations (from the UI), events, most facets, and saved views. In order to configure integrations from the UI, a user must also have Integrations API.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit, mute, and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Monitors Manage Downtime\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Location Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Location Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical View\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create, rename, and revoke API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filter Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filter Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM Applications.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Live Debugger Write Configuration\",\"description\":\"Edit Live Debugger configuration.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Live Debugger Read Configuration\",\"description\":\"View Live Debugger configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incident Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incident Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incidents Settings Read\",\"description\":\"View Incidents settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incidents Settings Write\",\"description\":\"Configure Incidents settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Event Rules Read\",\"description\":\"View Application Security Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Event Rules Write\",\"description\":\"Edit Application Security Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Configurations Read\",\"description\":\"View pipeline configurations.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Configurations Write\",\"description\":\"Create, edit, and delete pipeline configurations.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"attributes\":{\"name\":\"incidents_private_global_access\",\"display_name\":\"Private Incidents Global Access\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"created\":\"2022-02-11T18:36:08.531989+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_role_returns_Bad_Request_response-1661551042-updated" + }, + "id": "10475ae6-258a-11ed-b455-da7ad0900002", + "relationships": { + "permissions": { + "data": [ + { + "id": "11111111-dead-beef-dead-ffffffffffff", + "type": "permissions" + } + ] + } + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/roles/10475ae6-258a-11ed-b455-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid input \"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/10475ae6-258a-11ed-b455-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a role returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2024-04-22T22:41:54.019Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_role_returns_Bad_Role_ID_response-1713825714" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"84a464fa-00f9-11ef-935d-da7ad0900002\",\"attributes\":{\"name\":\"Test-Update_a_role_returns_Bad_Role_ID_response-1713825714\",\"created_at\":\"2024-04-22T22:41:54.399577+00:00\",\"modified_at\":\"2024-04-22T22:41:54.399577+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"Deprecated. Standard Access has been replaced by more specific permissions.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards or embeddable graphs externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Manage Downtimes\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute monitors. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Locations Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Locations Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical Views\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create and rename API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filters Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filters Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Dynamic Instrumentation Write\",\"description\":\"Edit Dynamic Instrumentation configuration. Create or modify Dynamic Instrumentation probes that do not capture function state.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Dynamic Instrumentation Read\",\"description\":\"View Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace, and enabling & disabling Remote Configuration for the entire organization.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incidents Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incident Settings Read\",\"description\":\"View Incident Settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incident Settings Write\",\"description\":\"Configure Incident Settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Management Event Rules Read\",\"description\":\"View Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Management Event Rules Write\",\"description\":\"Edit Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_read\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.074031+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_write\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.077905+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Read\",\"description\":\"View pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Write\",\"description\":\"Edit pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_read\",\"display_name\":\"Workflows Read\",\"description\":\"View workflows.\",\"created\":\"2022-02-03T15:07:12.058412+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_write\",\"display_name\":\"Workflows Write\",\"description\":\"Create, edit, and delete workflows.\",\"created\":\"2022-02-03T15:07:12.061765+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_run\",\"display_name\":\"Workflows Run\",\"description\":\"Run workflows.\",\"created\":\"2022-02-03T15:07:12.060079+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_read\",\"display_name\":\"Connections Read\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"created\":\"2022-02-03T15:07:12.053432+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_write\",\"display_name\":\"Connections Write\",\"description\":\"Create and delete connections.\",\"created\":\"2022-02-03T15:07:12.056590+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"attributes\":{\"name\":\"incidents_private_global_access\",\"display_name\":\"Private Incidents Global Access\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"created\":\"2022-02-11T18:36:08.531989+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"attributes\":{\"name\":\"logs_delete_data\",\"display_name\":\"Logs Delete Data\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"created\":\"2022-02-25T18:51:06.176019+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"attributes\":{\"name\":\"manage_integrations\",\"display_name\":\"Integrations Manage\",\"description\":\"Install, uninstall, and configure integrations.\",\"created\":\"2022-04-26T20:21:40.285834+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"attributes\":{\"name\":\"monitor_config_policy_write\",\"display_name\":\"Monitor Configuration Policy Write\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"created\":\"2022-06-23T16:26:48.150556+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"attributes\":{\"name\":\"logs_write_forwarding_rules\",\"display_name\":\"Logs Write Forwarding Rules\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"created\":\"2022-08-08T21:30:42.723663+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"Deprecated. View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"attributes\":{\"name\":\"connections_resolve\",\"display_name\":\"Connections Resolve\",\"description\":\"Resolve connections.\",\"created\":\"2022-08-25T15:25:56.325170+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_read\",\"display_name\":\"Application Security Management Protect Read\",\"description\":\"View blocked attackers.\",\"created\":\"2022-10-27T09:25:33.834253+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_write\",\"display_name\":\"Application Security Management Protect Write\",\"description\":\"Manage blocked attackers.\",\"created\":\"2022-10-27T09:25:33.843656+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_read\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.827076+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_write\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement.\",\"created\":\"2022-10-27T09:25:33.831383+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"99474cc2-5a12-11ed-b547-da7ad0900002\",\"attributes\":{\"name\":\"apps_run\",\"display_name\":\"Apps View\",\"description\":\"View and run Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.584393+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9948271e-5a12-11ed-b548-da7ad0900002\",\"attributes\":{\"name\":\"apps_write\",\"display_name\":\"Apps Write\",\"description\":\"Create, edit, and delete Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.590588+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"attributes\":{\"name\":\"cases_read\",\"display_name\":\"Cases Read\",\"description\":\"View Cases.\",\"created\":\"2022-12-12T18:40:54.018521+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"attributes\":{\"name\":\"cases_write\",\"display_name\":\"Cases Write\",\"description\":\"Create and update cases.\",\"created\":\"2022-12-12T18:40:54.023280+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_write\",\"display_name\":\"APM Remote Configuration Write\",\"description\":\"Edit APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.450768+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_read\",\"display_name\":\"APM Remote Configuration Read\",\"description\":\"View APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.446298+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_write\",\"display_name\":\"CI Visibility Tests Write\",\"description\":\"Edit flaky tests and delete Test Services.\",\"created\":\"2022-12-13T16:01:37.157428+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"attributes\":{\"name\":\"ci_provider_settings_write\",\"display_name\":\"CI Provider Settings Write\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"created\":\"2022-12-13T16:01:37.141217+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_settings_write\",\"display_name\":\"CI Visibility Settings Write\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"created\":\"2022-12-13T16:01:37.153418+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_activation_write\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"description\":\"Enable or disable Intelligent Test Runner.\",\"created\":\"2022-12-13T16:01:37.163771+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_settings_write\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"description\":\"Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"created\":\"2022-12-13T16:01:37.169430+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"attributes\":{\"name\":\"continuous_profiler_read\",\"display_name\":\"Continuous Profiler Read\",\"description\":\"View data in Continuous Profiler.\",\"created\":\"2022-12-16T16:50:32.545882+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"attributes\":{\"name\":\"teams_manage\",\"display_name\":\"Teams Manage\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"created\":\"2023-01-18T20:45:59.977837+00:00\",\"group_name\":\"Teams\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_read\",\"display_name\":\"Security Monitoring Findings Read\",\"description\":\"View CSPM Findings.\",\"created\":\"2023-02-24T14:30:30.983679+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_read\",\"display_name\":\"Incident Notification Settings Read\",\"description\":\"View Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_write\",\"display_name\":\"Incident Notification Settings Write\",\"description\":\"Configure Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"attributes\":{\"name\":\"ci_ingestion_control_write\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"created\":\"2023-03-24T10:25:33.934187+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_write\",\"display_name\":\"Error Tracking Issue Write\",\"description\":\"Edit Error Tracking issues.\",\"created\":\"2023-03-27T16:55:44.263627+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_alerts_write\",\"display_name\":\"Watchdog Alerts Write\",\"description\":\"Manage Watchdog Alerts.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"attributes\":{\"name\":\"saved_views_write\",\"display_name\":\"Saved Views Write\",\"description\":\"Modify Saved Views across all Datadog products.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_read\",\"display_name\":\"Client Tokens Read\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_write\",\"display_name\":\"Client Tokens Write\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_read\",\"display_name\":\"Event Correlation Config Read\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_write\",\"display_name\":\"Event Correlation Config Write\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"attributes\":{\"name\":\"event_config_write\",\"display_name\":\"Event Config Write\",\"description\":\"Manage general event configuration such as API Emails.\",\"created\":\"2023-05-20T01:20:31.639587+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_write\",\"display_name\":\"Security Monitoring Findings Write\",\"description\":\"Mute CSPM Findings.\",\"created\":\"2023-05-23T22:50:34.532448+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_read\",\"display_name\":\"Cloud Cost Management Read\",\"description\":\"View Cloud Cost pages. This does not restrict access to the cloud cost data source in dashboards and notebooks.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_write\",\"display_name\":\"Cloud Cost Management Write\",\"description\":\"Configure cloud cost accounts and global customizations.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"attributes\":{\"name\":\"host_tags_write\",\"display_name\":\"Host Tags Write\",\"description\":\"Add and change tags on hosts.\",\"created\":\"2023-05-31T05:26:07.469293+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_pipelines_write\",\"display_name\":\"CI Visibility Pipelines Write\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"created\":\"2023-06-01T11:35:17.513706+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_read\",\"display_name\":\"Quality Gate Rules Read\",\"description\":\"View Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_write\",\"display_name\":\"Quality Gate Rules Write\",\"description\":\"Edit Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"attributes\":{\"name\":\"metrics_metadata_write\",\"display_name\":\"Metrics Metadata Write\",\"description\":\"Edit metadata on metrics.\",\"created\":\"2023-06-23T17:31:34.182629+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"attributes\":{\"name\":\"rum_delete_data\",\"display_name\":\"RUM Delete Data\",\"description\":\"Delete data from RUM.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_write\",\"display_name\":\"Vulnerability Management Write\",\"description\":\"Update status or assignee of vulnerabilities.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"attributes\":{\"name\":\"reference_tables_write\",\"display_name\":\"Reference Tables Write\",\"description\":\"Create or modify Reference Tables.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Reference Tables\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"attributes\":{\"name\":\"rum_playlist_write\",\"display_name\":\"RUM Playlist Write\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"created\":\"2023-07-07T17:31:08.450865+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_delete\",\"display_name\":\"Pipeline Delete\",\"description\":\"Delete pipelines from your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_deploy\",\"display_name\":\"Pipeline Deploy\",\"description\":\"Deploy pipelines in your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"attributes\":{\"name\":\"processes_generate_metrics\",\"display_name\":\"Processes Generate Metrics\",\"description\":\"Create custom metrics from processes.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"Processes\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"attributes\":{\"name\":\"api_keys_delete\",\"display_name\":\"API Keys Delete\",\"description\":\"Delete API Keys for your organization.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5c79b2-21a4-11ee-99ee-da7ad0900002\",\"attributes\":{\"name\":\"agent_flare_collection\",\"display_name\":\"Agent Flare Collection\",\"description\":\"Collect an Agent flare with Fleet Automation.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Fleet Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"attributes\":{\"name\":\"facets_write\",\"display_name\":\"Facets Write\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"created\":\"2023-07-27T17:36:24.369352+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0e73c2-3d23-11ee-aa7d-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_read\",\"display_name\":\"Security Suppressions Read\",\"description\":\"Read Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0eb666-3d23-11ee-aa7e-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_write\",\"display_name\":\"Security Suppressions Write\",\"description\":\"Write Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5356dfd2-3dee-11ee-b07b-da7ad0900002\",\"attributes\":{\"name\":\"static_analysis_settings_write\",\"display_name\":\"Static Analysis Settings Write\",\"description\":\"Edit Static Analysis settings.\",\"created\":\"2023-08-18T17:40:30.474557+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"263eff86-6925-11ee-acc0-da7ad0900002\",\"attributes\":{\"name\":\"ndm_netflow_port_mappings_write\",\"display_name\":\"NDM Netflow Port Mappings Write\",\"description\":\"Write NDM Netflow port mappings.\",\"created\":\"2023-10-12T17:31:17.142666+00:00\",\"group_name\":\"Network Device Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7c7836fc-6f6e-11ee-8cdd-da7ad0900002\",\"attributes\":{\"name\":\"debugger_capture_variables\",\"display_name\":\"Dynamic Instrumentation Capture Variables\",\"description\":\"Create or modify Dynamic Instrumentation probes that capture function state: local variables, method arguments, fields, and return value or thrown exception.\",\"created\":\"2023-10-20T17:31:22.039614+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10098bc8-984b-11ee-9b69-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_settings_write\",\"display_name\":\"Error Tracking Settings Write\",\"description\":\"Disable Error Tracking, edit inclusion filters, and edit rate limit.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10091e90-984b-11ee-9b68-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_exclusion_filters_write\",\"display_name\":\"Error Tracking Exclusion Filters Write\",\"description\":\"Add or change Error Tracking exclusion filters.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b572396-ba15-11ee-9e19-da7ad0900002\",\"attributes\":{\"name\":\"integrations_read\",\"display_name\":\"Integrations Read\",\"description\":\"View integrations and their configurations.\",\"created\":\"2024-01-23T17:30:31.083178+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"27b95c32-ccf1-11ee-ae65-da7ad0900002\",\"attributes\":{\"name\":\"containers_generate_image_metrics\",\"display_name\":\"Containers Write Image Trend Metrics\",\"description\":\"Create or edit trend metrics from container images.\",\"created\":\"2024-02-16T17:31:02.070090+00:00\",\"group_name\":\"Containers\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a82d01ce-e228-11ee-870e-da7ad0900002\",\"attributes\":{\"name\":\"rum_extend_retention\",\"display_name\":\"RUM Session Replay Extend Retention\",\"description\":\"Extend the retention of Session Replays.\",\"created\":\"2024-03-14T17:31:14.314721+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca06b2b4-f5cd-11ee-9e77-da7ad0900002\",\"attributes\":{\"name\":\"dora_settings_write\",\"display_name\":\"DORA Settings Write\",\"description\":\"Edit the settings for DORA.\",\"created\":\"2024-04-08T17:31:10.159381+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_role_returns_Bad_Role_ID_response-1713825714-updated" + }, + "id": "00000000-dead-beef-dead-ffffffffffff", + "relationships": { + "permissions": { + "data": [ + { + "id": "6f66600e-dd12-11e8-9e55-7f30fbb45e73", + "type": "permissions" + } + ] + } + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/roles/84a464fa-00f9-11ef-935d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"The id attribute in the request body does not match the role_id in the URL\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/84a464fa-00f9-11ef-935d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a role returns \"Bad Role ID\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2024-04-22T22:41:55.856Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"Deprecated. Standard Access has been replaced by more specific permissions.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards or embeddable graphs externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Manage Downtimes\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute monitors. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Locations Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Locations Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical Views\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create and rename API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filters Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filters Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Dynamic Instrumentation Write\",\"description\":\"Edit Dynamic Instrumentation configuration. Create or modify Dynamic Instrumentation probes that do not capture function state.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Dynamic Instrumentation Read\",\"description\":\"View Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace, and enabling & disabling Remote Configuration for the entire organization.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incidents Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incident Settings Read\",\"description\":\"View Incident Settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incident Settings Write\",\"description\":\"Configure Incident Settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Management Event Rules Read\",\"description\":\"View Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Management Event Rules Write\",\"description\":\"Edit Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_read\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.074031+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_write\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.077905+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Read\",\"description\":\"View pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Write\",\"description\":\"Edit pipelines in your organization.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_read\",\"display_name\":\"Workflows Read\",\"description\":\"View workflows.\",\"created\":\"2022-02-03T15:07:12.058412+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_write\",\"display_name\":\"Workflows Write\",\"description\":\"Create, edit, and delete workflows.\",\"created\":\"2022-02-03T15:07:12.061765+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_run\",\"display_name\":\"Workflows Run\",\"description\":\"Run workflows.\",\"created\":\"2022-02-03T15:07:12.060079+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_read\",\"display_name\":\"Connections Read\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"created\":\"2022-02-03T15:07:12.053432+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_write\",\"display_name\":\"Connections Write\",\"description\":\"Create and delete connections.\",\"created\":\"2022-02-03T15:07:12.056590+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"attributes\":{\"name\":\"incidents_private_global_access\",\"display_name\":\"Private Incidents Global Access\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"created\":\"2022-02-11T18:36:08.531989+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"attributes\":{\"name\":\"logs_delete_data\",\"display_name\":\"Logs Delete Data\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"created\":\"2022-02-25T18:51:06.176019+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"attributes\":{\"name\":\"manage_integrations\",\"display_name\":\"Integrations Manage\",\"description\":\"Install, uninstall, and configure integrations.\",\"created\":\"2022-04-26T20:21:40.285834+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"attributes\":{\"name\":\"monitor_config_policy_write\",\"display_name\":\"Monitor Configuration Policy Write\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"created\":\"2022-06-23T16:26:48.150556+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"attributes\":{\"name\":\"logs_write_forwarding_rules\",\"display_name\":\"Logs Write Forwarding Rules\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"created\":\"2022-08-08T21:30:42.723663+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"Deprecated. View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"attributes\":{\"name\":\"connections_resolve\",\"display_name\":\"Connections Resolve\",\"description\":\"Resolve connections.\",\"created\":\"2022-08-25T15:25:56.325170+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_read\",\"display_name\":\"Application Security Management Protect Read\",\"description\":\"View blocked attackers.\",\"created\":\"2022-10-27T09:25:33.834253+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_write\",\"display_name\":\"Application Security Management Protect Write\",\"description\":\"Manage blocked attackers.\",\"created\":\"2022-10-27T09:25:33.843656+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_read\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.827076+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_write\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement.\",\"created\":\"2022-10-27T09:25:33.831383+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"99474cc2-5a12-11ed-b547-da7ad0900002\",\"attributes\":{\"name\":\"apps_run\",\"display_name\":\"Apps View\",\"description\":\"View and run Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.584393+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9948271e-5a12-11ed-b548-da7ad0900002\",\"attributes\":{\"name\":\"apps_write\",\"display_name\":\"Apps Write\",\"description\":\"Create, edit, and delete Apps in App Builder.\",\"created\":\"2022-11-01T18:25:44.590588+00:00\",\"group_name\":\"App Builder & Workflow Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"attributes\":{\"name\":\"cases_read\",\"display_name\":\"Cases Read\",\"description\":\"View Cases.\",\"created\":\"2022-12-12T18:40:54.018521+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"attributes\":{\"name\":\"cases_write\",\"display_name\":\"Cases Write\",\"description\":\"Create and update cases.\",\"created\":\"2022-12-12T18:40:54.023280+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_write\",\"display_name\":\"APM Remote Configuration Write\",\"description\":\"Edit APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.450768+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_read\",\"display_name\":\"APM Remote Configuration Read\",\"description\":\"View APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.446298+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_write\",\"display_name\":\"CI Visibility Tests Write\",\"description\":\"Edit flaky tests and delete Test Services.\",\"created\":\"2022-12-13T16:01:37.157428+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"attributes\":{\"name\":\"ci_provider_settings_write\",\"display_name\":\"CI Provider Settings Write\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"created\":\"2022-12-13T16:01:37.141217+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_settings_write\",\"display_name\":\"CI Visibility Settings Write\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"created\":\"2022-12-13T16:01:37.153418+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_activation_write\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"description\":\"Enable or disable Intelligent Test Runner.\",\"created\":\"2022-12-13T16:01:37.163771+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_settings_write\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"description\":\"Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"created\":\"2022-12-13T16:01:37.169430+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"attributes\":{\"name\":\"continuous_profiler_read\",\"display_name\":\"Continuous Profiler Read\",\"description\":\"View data in Continuous Profiler.\",\"created\":\"2022-12-16T16:50:32.545882+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"attributes\":{\"name\":\"teams_manage\",\"display_name\":\"Teams Manage\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"created\":\"2023-01-18T20:45:59.977837+00:00\",\"group_name\":\"Teams\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_read\",\"display_name\":\"Security Monitoring Findings Read\",\"description\":\"View CSPM Findings.\",\"created\":\"2023-02-24T14:30:30.983679+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_read\",\"display_name\":\"Incident Notification Settings Read\",\"description\":\"View Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_write\",\"display_name\":\"Incident Notification Settings Write\",\"description\":\"Configure Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"attributes\":{\"name\":\"ci_ingestion_control_write\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"created\":\"2023-03-24T10:25:33.934187+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_write\",\"display_name\":\"Error Tracking Issue Write\",\"description\":\"Edit Error Tracking issues.\",\"created\":\"2023-03-27T16:55:44.263627+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_alerts_write\",\"display_name\":\"Watchdog Alerts Write\",\"description\":\"Manage Watchdog Alerts.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"attributes\":{\"name\":\"saved_views_write\",\"display_name\":\"Saved Views Write\",\"description\":\"Modify Saved Views across all Datadog products.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_read\",\"display_name\":\"Client Tokens Read\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_write\",\"display_name\":\"Client Tokens Write\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_read\",\"display_name\":\"Event Correlation Config Read\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_write\",\"display_name\":\"Event Correlation Config Write\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"attributes\":{\"name\":\"event_config_write\",\"display_name\":\"Event Config Write\",\"description\":\"Manage general event configuration such as API Emails.\",\"created\":\"2023-05-20T01:20:31.639587+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_write\",\"display_name\":\"Security Monitoring Findings Write\",\"description\":\"Mute CSPM Findings.\",\"created\":\"2023-05-23T22:50:34.532448+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_read\",\"display_name\":\"Cloud Cost Management Read\",\"description\":\"View Cloud Cost pages. This does not restrict access to the cloud cost data source in dashboards and notebooks.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_write\",\"display_name\":\"Cloud Cost Management Write\",\"description\":\"Configure cloud cost accounts and global customizations.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"attributes\":{\"name\":\"host_tags_write\",\"display_name\":\"Host Tags Write\",\"description\":\"Add and change tags on hosts.\",\"created\":\"2023-05-31T05:26:07.469293+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_pipelines_write\",\"display_name\":\"CI Visibility Pipelines Write\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"created\":\"2023-06-01T11:35:17.513706+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_read\",\"display_name\":\"Quality Gate Rules Read\",\"description\":\"View Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_write\",\"display_name\":\"Quality Gate Rules Write\",\"description\":\"Edit Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"attributes\":{\"name\":\"metrics_metadata_write\",\"display_name\":\"Metrics Metadata Write\",\"description\":\"Edit metadata on metrics.\",\"created\":\"2023-06-23T17:31:34.182629+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"attributes\":{\"name\":\"rum_delete_data\",\"display_name\":\"RUM Delete Data\",\"description\":\"Delete data from RUM.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_write\",\"display_name\":\"Vulnerability Management Write\",\"description\":\"Update status or assignee of vulnerabilities.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"attributes\":{\"name\":\"reference_tables_write\",\"display_name\":\"Reference Tables Write\",\"description\":\"Create or modify Reference Tables.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Reference Tables\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"attributes\":{\"name\":\"rum_playlist_write\",\"display_name\":\"RUM Playlist Write\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"created\":\"2023-07-07T17:31:08.450865+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_delete\",\"display_name\":\"Pipeline Delete\",\"description\":\"Delete pipelines from your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_deploy\",\"display_name\":\"Pipeline Deploy\",\"description\":\"Deploy pipelines in your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"attributes\":{\"name\":\"processes_generate_metrics\",\"display_name\":\"Processes Generate Metrics\",\"description\":\"Create custom metrics from processes.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"Processes\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"attributes\":{\"name\":\"api_keys_delete\",\"display_name\":\"API Keys Delete\",\"description\":\"Delete API Keys for your organization.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5c79b2-21a4-11ee-99ee-da7ad0900002\",\"attributes\":{\"name\":\"agent_flare_collection\",\"display_name\":\"Agent Flare Collection\",\"description\":\"Collect an Agent flare with Fleet Automation.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Fleet Automation\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"attributes\":{\"name\":\"facets_write\",\"display_name\":\"Facets Write\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"created\":\"2023-07-27T17:36:24.369352+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0e73c2-3d23-11ee-aa7d-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_read\",\"display_name\":\"Security Suppressions Read\",\"description\":\"Read Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"de0eb666-3d23-11ee-aa7e-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_suppressions_write\",\"display_name\":\"Security Suppressions Write\",\"description\":\"Write Rule Suppressions.\",\"created\":\"2023-08-17T17:31:15.369551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5356dfd2-3dee-11ee-b07b-da7ad0900002\",\"attributes\":{\"name\":\"static_analysis_settings_write\",\"display_name\":\"Static Analysis Settings Write\",\"description\":\"Edit Static Analysis settings.\",\"created\":\"2023-08-18T17:40:30.474557+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a8b4d6e8-4ea4-11ee-b482-da7ad0900002\",\"attributes\":{\"name\":\"cd_visibility_read\",\"display_name\":\"CD Visibility Read\",\"description\":\"View CD Visibility.\",\"created\":\"2023-09-09T00:06:00.708335+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"263eff86-6925-11ee-acc0-da7ad0900002\",\"attributes\":{\"name\":\"ndm_netflow_port_mappings_write\",\"display_name\":\"NDM Netflow Port Mappings Write\",\"description\":\"Write NDM Netflow port mappings.\",\"created\":\"2023-10-12T17:31:17.142666+00:00\",\"group_name\":\"Network Device Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"50c270de-69ee-11ee-9151-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_read\",\"display_name\":\"Vulnerability Management Read\",\"description\":\"View vulnerabilities. This does not restrict access to the vulnerability data source through the API or inventory SQL.\",\"created\":\"2023-10-13T17:31:17.311029+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7c7836fc-6f6e-11ee-8cdd-da7ad0900002\",\"attributes\":{\"name\":\"debugger_capture_variables\",\"display_name\":\"Dynamic Instrumentation Capture Variables\",\"description\":\"Create or modify Dynamic Instrumentation probes that capture function state: local variables, method arguments, fields, and return value or thrown exception.\",\"created\":\"2023-10-20T17:31:22.039614+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10098bc8-984b-11ee-9b69-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_settings_write\",\"display_name\":\"Error Tracking Settings Write\",\"description\":\"Disable Error Tracking, edit inclusion filters, and edit rate limit.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"10091e90-984b-11ee-9b68-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_exclusion_filters_write\",\"display_name\":\"Error Tracking Exclusion Filters Write\",\"description\":\"Add or change Error Tracking exclusion filters.\",\"created\":\"2023-12-11T17:31:05.405902+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b572396-ba15-11ee-9e19-da7ad0900002\",\"attributes\":{\"name\":\"integrations_read\",\"display_name\":\"Integrations Read\",\"description\":\"View integrations and their configurations.\",\"created\":\"2024-01-23T17:30:31.083178+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"27b95c32-ccf1-11ee-ae65-da7ad0900002\",\"attributes\":{\"name\":\"containers_generate_image_metrics\",\"display_name\":\"Containers Write Image Trend Metrics\",\"description\":\"Create or edit trend metrics from container images.\",\"created\":\"2024-02-16T17:31:02.070090+00:00\",\"group_name\":\"Containers\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a82d01ce-e228-11ee-870e-da7ad0900002\",\"attributes\":{\"name\":\"rum_extend_retention\",\"display_name\":\"RUM Session Replay Extend Retention\",\"description\":\"Extend the retention of Session Replays.\",\"created\":\"2024-03-14T17:31:14.314721+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca06b2b4-f5cd-11ee-9e77-da7ad0900002\",\"attributes\":{\"name\":\"dora_settings_write\",\"display_name\":\"DORA Settings Write\",\"description\":\"Edit the settings for DORA.\",\"created\":\"2024-04-08T17:31:10.159381+00:00\",\"group_name\":\"Software Delivery\",\"display_type\":\"write\",\"restricted\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "updated" + }, + "id": "00000000-dead-beef-dead-ffffffffffff", + "relationships": { + "permissions": { + "data": [ + { + "id": "6f66600e-dd12-11e8-9e55-7f30fbb45e73", + "type": "permissions" + } + ] + } + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/roles/00000000-dead-beef-dead-ffffffffffff", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"00000000-dead-beef-dead-ffffffffffff not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a role returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Roles", + "frozen_at": "2022-08-26T21:57:24.588Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_role_returns_OK_response-1661551044" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"11727e1e-258a-11ed-b455-da7ad0900002\",\"attributes\":{\"name\":\"Test-Update_a_role_returns_OK_response-1661551044\",\"created_at\":\"2022-08-26T21:57:24.677764+00:00\",\"modified_at\":\"2022-08-26T21:57:24.748094+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"View and edit components in your Datadog organization that do not have explicitly defined permissions. This includes configuring some integrations (from the UI), events, most facets, and saved views. In order to configure integrations from the UI, a user must also have Integrations API.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit, mute, and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Monitors Manage Downtime\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Location Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Location Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical View\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create, rename, and revoke API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filter Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filter Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM Applications.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Live Debugger Write Configuration\",\"description\":\"Edit Live Debugger configuration.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Live Debugger Read Configuration\",\"description\":\"View Live Debugger configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incident Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incident Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incidents Settings Read\",\"description\":\"View Incidents settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incidents Settings Write\",\"description\":\"Configure Incidents settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Event Rules Read\",\"description\":\"View Application Security Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Event Rules Write\",\"description\":\"Edit Application Security Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Configurations Read\",\"description\":\"View pipeline configurations.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Configurations Write\",\"description\":\"Create, edit, and delete pipeline configurations.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7a89ec40-8b69-11ec-812d-da7ad0900002\",\"attributes\":{\"name\":\"incidents_private_global_access\",\"display_name\":\"Private Incidents Global Access\",\"description\":\"Access all private incidents in Datadog, even when not added as a responder.\",\"created\":\"2022-02-11T18:36:08.531989+00:00\",\"group_name\":\"Incidents\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_a_role_returns_OK_response-1661551044-updated" + }, + "id": "11727e1e-258a-11ed-b455-da7ad0900002", + "relationships": { + "permissions": { + "data": [ + { + "id": "984a2bd4-d3b4-11e8-a1ff-a7f660d43029", + "type": "permissions" + } + ] + } + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/roles/11727e1e-258a-11ed-b455-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"11727e1e-258a-11ed-b455-da7ad0900002\",\"attributes\":{\"name\":\"Test-Update_a_role_returns_OK_response-1661551044-updated\",\"created_at\":\"2022-08-26T21:57:24.677764+00:00\",\"modified_at\":\"2022-08-26T21:57:25.093346+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\"},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\"},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/11727e1e-258a-11ed-b455-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a role returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/rum-metrics.json b/test-server-data/v2/rum-metrics.json new file mode 100644 index 0000000000..5684bd2d0f --- /dev/null +++ b/test-server-data/v2/rum-metrics.json @@ -0,0 +1,982 @@ +{ + "feature": "Rum Metrics", + "recordings": [ + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:35.224Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "count" + }, + "event_type": "action", + "uniqueness": { + "when": "match" + } + }, + "id": "rum.actions.invalid", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"uniqueness\\\" failed excluded_if validation\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a RUM-based metric returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:35.746Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "event_type": "session", + "filter": { + "query": "source:Test-Create_a_RUM_based_metric_returns_Conflict_response-1780403555" + }, + "group_by": [ + { + "path": "@browser.name", + "tag_name": "browser_name" + } + ], + "uniqueness": { + "when": "match" + } + }, + "id": "testcreatearumbasedmetricreturnsconflictresponse1780403555", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testcreatearumbasedmetricreturnsconflictresponse1780403555\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Create_a_RUM_based_metric_returns_Conflict_response-1780403555\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "count" + }, + "event_type": "action" + }, + "id": "testcreatearumbasedmetricreturnsconflictresponse1780403555", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Conflict\",\"detail\":\"conflict(Field 'data.id' is invalid: 'testcreatearumbasedmetricreturnsconflictresponse1780403555' cannot be used as metric name, a metric already exists with that name)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/testcreatearumbasedmetricreturnsconflictresponse1780403555", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a RUM-based metric returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:37.019Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "event_type": "session", + "filter": { + "query": "@service:web-ui" + }, + "group_by": [ + { + "path": "@browser.name", + "tag_name": "browser_name" + } + ], + "uniqueness": { + "when": "match" + } + }, + "id": "testcreatearumbasedmetricreturnscreatedresponse1780403557", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testcreatearumbasedmetricreturnscreatedresponse1780403557\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:web-ui\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/testcreatearumbasedmetricreturnscreatedresponse1780403557", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a RUM-based metric returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:38.038Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "event_type": "session", + "filter": { + "query": "source:Test-Delete_a_RUM_based_metric_returns_No_Content_response-1780403558" + }, + "group_by": [ + { + "path": "@browser.name", + "tag_name": "browser_name" + } + ], + "uniqueness": { + "when": "match" + } + }, + "id": "testdeletearumbasedmetricreturnsnocontentresponse1780403558", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testdeletearumbasedmetricreturnsnocontentresponse1780403558\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Delete_a_RUM_based_metric_returns_No_Content_response-1780403558\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/testdeletearumbasedmetricreturnsnocontentresponse1780403558", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/testdeletearumbasedmetricreturnsnocontentresponse1780403558", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"not_found(Metric with name 'testdeletearumbasedmetricreturnsnocontentresponse1780403558' not found)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a RUM-based metric returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:39.442Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/Test-Delete_a_RUM_based_metric_returns_Not_Found_response-1780403559", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"not_found(Metric with name 'Test-Delete_a_RUM_based_metric_returns_Not_Found_response-1780403559' not found)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a RUM-based metric returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:39.828Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/config/metrics/Test-Get_a_RUM_based_metric_returns_Not_Found_response-1780403559", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"not_found(Metric with name 'Test-Get_a_RUM_based_metric_returns_Not_Found_response-1780403559' not found)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a RUM-based metric returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:40.188Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "event_type": "session", + "filter": { + "query": "source:Test-Get_a_RUM_based_metric_returns_OK_response-1780403560" + }, + "group_by": [ + { + "path": "@browser.name", + "tag_name": "browser_name" + } + ], + "uniqueness": { + "when": "match" + } + }, + "id": "testgetarumbasedmetricreturnsokresponse1780403560", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testgetarumbasedmetricreturnsokresponse1780403560\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Get_a_RUM_based_metric_returns_OK_response-1780403560\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/config/metrics/testgetarumbasedmetricreturnsokresponse1780403560", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testgetarumbasedmetricreturnsokresponse1780403560\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Get_a_RUM_based_metric_returns_OK_response-1780403560\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/testgetarumbasedmetricreturnsokresponse1780403560", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a RUM-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:41.286Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"tf_TestAccRumMetricAttributes_local_1748953468\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"count\"},\"event_type\":\"session\",\"group_by\":[],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"tf_TestAccRumMetricAttributes_local_1754429067\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":false,\"path\":\"@duration\"},\"event_type\":\"action\",\"group_by\":[]}},{\"id\":\"tf_TestAccRumMetricAttributes_local_1756383271\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"count\"},\"event_type\":\"action\",\"filter\":{\"query\":\"@service:web-ui\"},\"group_by\":[]}},{\"id\":\"examplegetarumbasedmetricreturnsokresponse1756438670\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Example-Get_a_rum_based_metric_returns_OK_response_1756438670\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testtypescriptupdatearumbasedmetricreturnsnotfoundresponse1759230768\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Typescript-Update_a_rum_based_metric_returns_Not_Found_response-1759230768\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testtypescriptdeletearumbasedmetricreturnsnocontentresponse1760329500\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Typescript-Delete_a_rum_based_metric_returns_No_Content_response-1760329500\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"exampleupdatearumbasedmetricreturnsokresponse1760974704\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":false,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:rum-config\"},\"group_by\":[{\"path\":\"@browser.version\",\"tag_name\":\"browser_version\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testjavaupdatearumbasedmetricreturnsbadrequestresponse1761017953\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Java-Update_a_rum_based_metric_returns_Bad_Request_response-1761017953\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testing_rum_metric_francesco\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"count\"},\"event_type\":\"action\",\"group_by\":[{\"path\":\"@os\",\"tag_name\":\"os\"},{\"path\":\"@service\",\"tag_name\":\"service\"},{\"path\":\"path_only\",\"tag_name\":\"path_only\"}]}},{\"id\":\"tf_TestAccRumMetricAttributes_local_1762777350\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"count\"},\"event_type\":\"action\",\"group_by\":[]}},{\"id\":\"exampleupdatearumbasedmetricreturnsokresponse1763393904\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":false,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:rum-config\"},\"group_by\":[{\"path\":\"@browser.version\",\"tag_name\":\"browser_version\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testtypescriptdeletearumbasedmetricreturnsnocontentresponse1763440561\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Typescript-Delete_a_rum_based_metric_returns_No_Content_response-1763440561\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"examplecreatearumbasedmetricreturnscreatedresponse1763580024\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:web-ui\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"tf_TestAccRumMetricAttributes_local_1764030439\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"count\"},\"event_type\":\"action\",\"group_by\":[]}},{\"id\":\"testjavaupdatearumbasedmetricreturnsokresponse1764042240\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Java-Update_a_rum_based_metric_returns_OK_response-1764042240\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"tf_TestAccRumMetricAttributes_local_1764203828\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"count\"},\"event_type\":\"action\",\"group_by\":[{\"path\":\"@os\",\"tag_name\":\"os\"},{\"path\":\"@service\",\"tag_name\":\"service\"},{\"path\":\"path_only\",\"tag_name\":\"path_only\"}]}},{\"id\":\"testtypescriptgetarumbasedmetricreturnsokresponse1765192455\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Typescript-Get_a_rum_based_metric_returns_OK_response-1765192455\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testgogetarumbasedmetricreturnsokresponse1765586988\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Go-Get_a_rum_based_metric_returns_OK_response-1765586988\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testtypescriptgetarumbasedmetricreturnsokresponse1765774021\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Typescript-Get_a_rum_based_metric_returns_OK_response-1765774021\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testtypescriptupdatearumbasedmetricreturnsokresponse1765797324\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Typescript-Update_a_rum_based_metric_returns_OK_response-1765797324\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testrustdeletearumbasedmetricreturnsnocontentresponse1766121984\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Rust-Delete_a_rum_based_metric_returns_No_Content_response-1766121984\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"tf_TestAccRumMetricAttributes_local_1766146771\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"count\"},\"event_type\":\"action\",\"group_by\":[]}},{\"id\":\"exampleupdatearumbasedmetricreturnsokresponse1767123504\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Example-Update_a_rum_based_metric_returns_OK_response_1767123504\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testrustupdatearumbasedmetricreturnsbadrequestresponse1768281919\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Rust-Update_a_rum_based_metric_returns_Bad_Request_response-1768281919\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testgocreatearumbasedmetricreturnscreatedresponse1768352135\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:web-ui\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"exampledeletearumbasedmetricreturnsnocontentresponse1769312302\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Example-Delete_a_rum_based_metric_returns_No_Content_response_1769312302\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testtypescriptupdatearumbasedmetricreturnsokresponse1769512735\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Typescript-Update_a_rum_based_metric_returns_OK_response-1769512735\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"examplegetarumbasedmetricreturnsokresponse1770305870\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Example-Get_a_rum_based_metric_returns_OK_response_1770305870\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"examplegetarumbasedmetricreturnsokresponse1770363470\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Example-Get_a_rum_based_metric_returns_OK_response_1770363470\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testjavacreatearumbasedmetricreturnscreatedresponse1770834693\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:web-ui\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"examplegetarumbasedmetricreturnsokresponse1770853070\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Example-Get_a_rum_based_metric_returns_OK_response_1770853070\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testjavacreatearumbasedmetricreturnsconflictresponse1772165946\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Java-Create_a_rum_based_metric_returns_Conflict_response-1772165946\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testrustupdatearumbasedmetricreturnsnotfoundresponse1772344054\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Rust-Update_a_rum_based_metric_returns_Not_Found_response-1772344054\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testtypescriptcreatearumbasedmetricreturnsconflictresponse1773378034\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Typescript-Create_a_rum_based_metric_returns_Conflict_response-1773378034\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"examplecreatearumbasedmetricreturnscreatedresponse1775676024\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:web-ui\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testrustupdatearumbasedmetricreturnsbadrequestresponse1776146576\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Rust-Update_a_rum_based_metric_returns_Bad_Request_response-1776146576\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"examplegetarumbasedmetricreturnsokresponse1777837070\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Example-Get_a_rum_based_metric_returns_OK_response_1777837070\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testtypescriptgetarumbasedmetricreturnsokresponse1778218442\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Typescript-Get_a_rum_based_metric_returns_OK_response-1778218442\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"examplecreatearumbasedmetricreturnscreatedresponse1778239224\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:web-ui\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testrubyupdatearumbasedmetricreturnsconflictresponse1778815556\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Ruby-Update_a_rum_based_metric_returns_Conflict_response-1778815556\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testjavadeletearumbasedmetricreturnsnocontentresponse1778993479\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Java-Delete_a_rum_based_metric_returns_No_Content_response-1778993479\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"examplegetarumbasedmetricreturnsokresponse1779176270\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Example-Get_a_rum_based_metric_returns_OK_response_1779176270\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"testrubycreatearumbasedmetricreturnsconflictresponse1779334157\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Ruby-Create_a_rum_based_metric_returns_Conflict_response-1779334157\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"examplecreatearumbasedmetricreturnscreatedresponse1779434424\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:web-ui\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"tf_TestAccRumMetricAttributes_local_1779629264\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"action\",\"group_by\":[]}},{\"id\":\"testrubyupdatearumbasedmetricreturnsokresponse1780025259\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Ruby-Update_a_rum_based_metric_returns_OK_response-1780025259\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}},{\"id\":\"tf_TestAccRumMetricAttributes_local_1780063691\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"count\"},\"event_type\":\"action\",\"group_by\":[]}},{\"id\":\"testcreatearumbasedmetricreturnsconflictresponse1780393737\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Create_a_RUM_based_metric_returns_Conflict_response-1780393737\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all RUM-based metrics returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:41.688Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "event_type": "session", + "filter": { + "query": "source:Test-Update_a_RUM_based_metric_returns_Bad_Request_response-1780403561" + }, + "group_by": [ + { + "path": "@browser.name", + "tag_name": "browser_name" + } + ], + "uniqueness": { + "when": "match" + } + }, + "id": "testupdatearumbasedmetricreturnsbadrequestresponse1780403561", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testupdatearumbasedmetricreturnsbadrequestresponse1780403561\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Update_a_RUM_based_metric_returns_Bad_Request_response-1780403561\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": true + } + }, + "id": "rum.sessions.webui.count", + "type": "unknown_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/config/metrics/testupdatearumbasedmetricreturnsbadrequestresponse1780403561", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"unknown_metrics\\\" expected one of \\\"rum_metrics\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/testupdatearumbasedmetricreturnsbadrequestresponse1780403561", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a RUM-based metric returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:42.946Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "event_type": "session", + "filter": { + "query": "source:Test-Update_a_RUM_based_metric_returns_Conflict_response-1780403562" + }, + "group_by": [ + { + "path": "@browser.name", + "tag_name": "browser_name" + } + ], + "uniqueness": { + "when": "match" + } + }, + "id": "testupdatearumbasedmetricreturnsconflictresponse1780403562", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testupdatearumbasedmetricreturnsconflictresponse1780403562\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Update_a_RUM_based_metric_returns_Conflict_response-1780403562\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": true + } + }, + "id": "conflicting.id", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/config/metrics/testupdatearumbasedmetricreturnsconflictresponse1780403562", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Conflict\",\"detail\":\"ID provided in the payload does not match the url parameter\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/testupdatearumbasedmetricreturnsconflictresponse1780403562", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a RUM-based metric returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:44.259Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "event_type": "session", + "filter": { + "query": "source:Test-Update_a_RUM_based_metric_returns_Not_Found_response-1780403564" + }, + "group_by": [ + { + "path": "@browser.name", + "tag_name": "browser_name" + } + ], + "uniqueness": { + "when": "match" + } + }, + "id": "testupdatearumbasedmetricreturnsnotfoundresponse1780403564", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testupdatearumbasedmetricreturnsnotfoundresponse1780403564\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Update_a_RUM_based_metric_returns_Not_Found_response-1780403564\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": true + } + }, + "id": "8fc991bf-967e-4652-8a5b-0711a985abe3", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/config/metrics/8fc991bf-967e-4652-8a5b-0711a985abe3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"not_found(Metric with name '8fc991bf-967e-4652-8a5b-0711a985abe3' not found)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/testupdatearumbasedmetricreturnsnotfoundresponse1780403564", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a RUM-based metric returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Metrics", + "frozen_at": "2026-06-02T12:32:46.608Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": true, + "path": "@duration" + }, + "event_type": "session", + "filter": { + "query": "source:Test-Update_a_RUM_based_metric_returns_OK_response-1780403566" + }, + "group_by": [ + { + "path": "@browser.name", + "tag_name": "browser_name" + } + ], + "uniqueness": { + "when": "match" + } + }, + "id": "testupdatearumbasedmetricreturnsokresponse1780403566", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testupdatearumbasedmetricreturnsokresponse1780403566\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":true,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"source:Test-Update_a_RUM_based_metric_returns_OK_response-1780403566\"},\"group_by\":[{\"path\":\"@browser.name\",\"tag_name\":\"browser_name\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": false + }, + "filter": { + "query": "@service:rum-config" + }, + "group_by": [ + { + "path": "@browser.version", + "tag_name": "browser_version" + } + ] + }, + "id": "testupdatearumbasedmetricreturnsokresponse1780403566", + "type": "rum_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/config/metrics/testupdatearumbasedmetricreturnsokresponse1780403566", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"testupdatearumbasedmetricreturnsokresponse1780403566\",\"type\":\"rum_metrics\",\"attributes\":{\"compute\":{\"aggregation_type\":\"distribution\",\"include_percentiles\":false,\"path\":\"@duration\"},\"event_type\":\"session\",\"filter\":{\"query\":\"@service:rum-config\"},\"group_by\":[{\"path\":\"@browser.version\",\"tag_name\":\"browser_version\"}],\"uniqueness\":{\"when\":\"match\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/config/metrics/testupdatearumbasedmetricreturnsokresponse1780403566", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a RUM-based metric returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/rum-remote-config.json b/test-server-data/v2/rum-remote-config.json new file mode 100644 index 0000000000..443674ee43 --- /dev/null +++ b/test-server-data/v2/rum-remote-config.json @@ -0,0 +1,82 @@ +{ + "feature": "RUM Remote Config", + "recordings": [ + { + "feature": "RUM Remote Config", + "frozen_at": "2026-06-17T12:36:53.338Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/remote_config/products/rum/configs/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Forbidden\"}]}\n" + }, + "headers": { + "content-type": "text/plain; charset=utf-8" + }, + "reason": "Forbidden", + "status": 403 + } + } + ], + "scenario": "Get a RUM SDK configuration returns \"Forbidden\" response", + "version": "v2" + }, + { + "feature": "RUM Remote Config", + "frozen_at": "2026-06-17T12:36:53.745Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "rum": { + "default_privacy_level": "mask", + "enable_privacy_for_action_name": true, + "session_replay_sample_rate": 20, + "session_sample_rate": 75 + } + }, + "id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "type": "rum_sdk_config" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/remote_config/products/rum/configs/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Forbidden\"}]}\n" + }, + "headers": { + "content-type": "text/plain; charset=utf-8" + }, + "reason": "Forbidden", + "status": 403 + } + } + ], + "scenario": "Update a RUM SDK configuration returns \"Forbidden\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/rum-retention-filters.json b/test-server-data/v2/rum-retention-filters.json new file mode 100644 index 0000000000..5c58cc66a0 --- /dev/null +++ b/test-server-data/v2/rum-retention-filters.json @@ -0,0 +1,457 @@ +{ + "feature": "Rum Retention Filters", + "recordings": [ + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-03T21:21:22.678Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "session", + "name": "Test creating retention filter", + "query": "", + "sample_rate": 25 + }, + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications/a33671aa-24fd-4dcd-ba4b-5bbdbafe7690/retention_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"invalid_type\\\" expected one of \\\"retention_filters\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a RUM retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-05T20:01:25.330Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "session", + "name": "Test creating retention filter", + "query": "custom_query", + "sample_rate": 50 + }, + "type": "retention_filters" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications/a33671aa-24fd-4dcd-ba4b-5bbdbafe7690/retention_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4b95d361-f65d-4515-9824-c9aaeba5ac2a\",\"type\":\"retention_filters\",\"attributes\":{\"enabled\":true,\"event_type\":\"session\",\"name\":\"Test creating retention filter\",\"query\":\"custom_query\",\"sample_rate\":50}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + } + ], + "scenario": "Create a RUM retention filter returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-05T20:03:40.119Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/a33671aa-24fd-4dcd-ba4b-5bbdbafe7690/retention_filters/fe34ee09-14cf-4976-9362-08044c0dea80", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete a RUM retention filter returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-03T21:21:23.296Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/a33671aa-24fd-4dcd-ba4b-5bbdbafe7690/retention_filters/Test-Delete_a_RUM_retention_filter_returns_Not_Found_response-1741036883", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rpc error: code = NotFound desc = NotFound: This retention filter does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a RUM retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-03T21:21:23.382Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/applications/a33671aa-24fd-4dcd-ba4b-5bbdbafe7690/retention_filters/Test-Get_a_RUM_retention_filter_returns_Not_Found_response-1741036883", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rpc error: code = NotFound desc = NotFound: This retention filter does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a RUM retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-05T20:05:06.468Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/applications/a33671aa-24fd-4dcd-ba4b-5bbdbafe7690/retention_filters/4b95d361-f65d-4515-9824-c9aaeba5ac2a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4b95d361-f65d-4515-9824-c9aaeba5ac2a\",\"type\":\"retention_filters\",\"attributes\":{\"enabled\":true,\"event_type\":\"session\",\"name\":\"Test retention filter for session\",\"query\":\"custom_query\",\"sample_rate\":25}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a RUM retention filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-03T21:21:23.741Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/applications/1d4b9c34-7ac4-423a-91cf-9902d926e9b3/retention_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"325631eb-94c9-49c0-93f9-ab7e4fd24529\",\"type\":\"retention_filters\",\"attributes\":{\"enabled\":true,\"event_type\":\"session\",\"name\":\"Default session with replay\",\"query\":\"@session.has_replay:true\",\"sample_rate\":100}},{\"id\":\"42d89430-5b80-426e-a44b-ba3b417ece25\",\"type\":\"retention_filters\",\"attributes\":{\"enabled\":true,\"event_type\":\"session\",\"name\":\"Session filter\",\"query\":\"\",\"sample_rate\":25}},{\"id\":\"bff0bc34-99e9-4c16-adce-f47e71948c23\",\"type\":\"retention_filters\",\"attributes\":{\"enabled\":true,\"event_type\":\"view\",\"name\":\"Custom filter\",\"query\":\"noquery\",\"sample_rate\":50}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all RUM retention filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-03T21:21:23.865Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "325631eb-94c9-49c0-93f9-ab7e4fd24529", + "type": "retention_filters" + } + ] + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/applications/1d4b9c34-7ac4-423a-91cf-9902d926e9b3/relationships/retention_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Order RUM retention filters returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-03T21:21:23.931Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "325631eb-94c9-49c0-93f9-ab7e4fd24529", + "type": "retention_filters" + }, + { + "id": "42d89430-5b80-426e-a44b-ba3b417ece25", + "type": "retention_filters" + }, + { + "id": "bff0bc34-99e9-4c16-adce-f47e71948c23", + "type": "retention_filters" + } + ] + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/applications/1d4b9c34-7ac4-423a-91cf-9902d926e9b3/relationships/retention_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"325631eb-94c9-49c0-93f9-ab7e4fd24529\",\"type\":\"retention_filters\"},{\"id\":\"42d89430-5b80-426e-a44b-ba3b417ece25\",\"type\":\"retention_filters\"},{\"id\":\"bff0bc34-99e9-4c16-adce-f47e71948c23\",\"type\":\"retention_filters\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Order RUM retention filters returns \"Ordered\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-05T20:23:29.589Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "view", + "name": "Test updating retention filter", + "query": "", + "sample_rate": 100 + }, + "id": "Test-Update_a_RUM_retention_filter_returns_Bad_Request_response-1741206209", + "type": "invalid_type" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/applications/a33671aa-24fd-4dcd-ba4b-5bbdbafe7690/retention_filters/Test-Update_a_RUM_retention_filter_returns_Bad_Request_response-1741206209", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"invalid_type\\\" expected one of \\\"retention_filters\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update a RUM retention filter returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-03T21:21:24.104Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "view", + "name": "Test updating retention filter", + "query": "", + "sample_rate": 100 + }, + "id": "Test-Update_a_RUM_retention_filter_returns_Not_Found_response-1741036884", + "type": "retention_filters" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/applications/a33671aa-24fd-4dcd-ba4b-5bbdbafe7690/retention_filters/Test-Update_a_RUM_retention_filter_returns_Not_Found_response-1741036884", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rpc error: code = NotFound desc = NotFound: This retention filter does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a RUM retention filter returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Rum Retention Filters", + "frozen_at": "2025-03-05T20:09:00.396Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "event_type": "view", + "name": "Test updating retention filter", + "query": "view_query", + "sample_rate": 100 + }, + "id": "4b95d361-f65d-4515-9824-c9aaeba5ac2a", + "type": "retention_filters" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/applications/a33671aa-24fd-4dcd-ba4b-5bbdbafe7690/retention_filters/4b95d361-f65d-4515-9824-c9aaeba5ac2a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4b95d361-f65d-4515-9824-c9aaeba5ac2a\",\"type\":\"retention_filters\",\"attributes\":{\"enabled\":true,\"event_type\":\"view\",\"name\":\"Test updating retention filter\",\"query\":\"view_query\",\"sample_rate\":100}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a RUM retention filter returns \"Updated\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/rum.json b/test-server-data/v2/rum.json new file mode 100644 index 0000000000..a7a67797b1 --- /dev/null +++ b/test-server-data/v2/rum.json @@ -0,0 +1,1065 @@ +{ + "feature": "RUM", + "recordings": [ + { + "feature": "RUM", + "frozen_at": "2024-12-10T15:40:39.451Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "compute": [ + { + "aggregation": "pc90", + "metric": "@view.time_spent", + "type": "total" + } + ], + "filter": { + "from": "now-15m", + "query": "@type:view AND @session.type:user", + "to": "now" + }, + "group_by": [ + { + "facet": "@view.time_spent", + "limit": 10, + "total": false + } + ], + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 25 + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/analytics/aggregate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"elapsed\":10,\"request_id\":\"pddv1ChZSMml0UE50SVRraWllRWtWbUV1UHVBIiwKHII2XAGPhMI6Ua9pcGpwYflxMkm9HA4hkKW0lCQSDHE8AS_dOP2EowUuSg\",\"status\":\"done\"},\"data\":{\"buckets\":[]}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Aggregate RUM events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2025-08-19T14:20:13.721Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "test-rum-33452889744bdeee", + "type": "ios" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"attributes\":{\"type\":\"ios\",\"updated_at\":1755613213992,\"created_by_handle\":\"frog@datadoghq.com\",\"name\":\"test-rum-33452889744bdeee\",\"org_id\":321813,\"tags\":[],\"created_at\":1755613213992,\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1755613213992},\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1755613213992}},\"updated_by_handle\":\"frog@datadoghq.com\",\"application_id\":\"ee0b4d74-7159-4498-bec7-2b4f2b5ba642\",\"client_token\":\"pub994be67f562b7afec4436673d77927fe\",\"hash\":\"pub994be67f562b7afec4436673d77927fe\",\"is_active\":false},\"id\":\"ee0b4d74-7159-4498-bec7-2b4f2b5ba642\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/ee0b4d74-7159-4498-bec7-2b4f2b5ba642", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new RUM application returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2025-08-19T14:01:52.966Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "test-rum-with-product-scales-b91c7f54876a951d", + "product_analytics_retention_state": "NONE", + "rum_event_processing_state": "ERROR_FOCUSED_MODE", + "type": "browser" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"id\":\"51419fd9-a73f-4508-9f74-ad07d6669a47\",\"attributes\":{\"hash\":\"pub6c464316cf5deccd2f56a23dbacd996e\",\"type\":\"browser\",\"org_id\":321813,\"updated_at\":1755612113258,\"name\":\"test-rum-with-product-scales-b91c7f54876a951d\",\"product_scales\":{\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1755612113258},\"rum_event_processing_scale\":{\"state\":\"ERROR_FOCUSED_MODE\",\"last_modified_at\":1755612113258}},\"created_at\":1755612113258,\"tags\":[],\"is_active\":false,\"updated_by_handle\":\"frog@datadoghq.com\",\"client_token\":\"pub6c464316cf5deccd2f56a23dbacd996e\",\"created_by_handle\":\"frog@datadoghq.com\",\"application_id\":\"51419fd9-a73f-4508-9f74-ad07d6669a47\",\"product_analytics_replay_sample_rate\":100}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/51419fd9-a73f-4508-9f74-ad07d6669a47", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new RUM application with Product Scales returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2024-12-10T15:40:41.106Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "test-rum-233b98774ce06558", + "type": "ios" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"attributes\":{\"org_id\":321813,\"tags\":[],\"product_analytics_disabled_at\":1733845241534,\"rum_enabled_at\":1733845241534,\"rum_enabled\":true,\"updated_by_handle\":\"frog@datadoghq.com\",\"name\":\"test-rum-233b98774ce06558\",\"rum_disabled_at\":0,\"created_by_handle\":\"frog@datadoghq.com\",\"application_id\":\"e095c068-b8e7-44bd-b263-557a6bb99e0c\",\"type\":\"ios\",\"product_analytics_enabled\":false,\"hash\":\"pub41dd1d34d200608780557e0a2728f6c6\",\"client_token\":\"pub41dd1d34d200608780557e0a2728f6c6\",\"product_analytics_enabled_at\":1733845241534,\"updated_at\":1733845241534,\"created_at\":1733845241534,\"is_active\":false},\"id\":\"e095c068-b8e7-44bd-b263-557a6bb99e0c\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/e095c068-b8e7-44bd-b263-557a6bb99e0c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/e095c068-b8e7-44bd-b263-557a6bb99e0c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete a RUM application returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2024-12-10T15:40:42.789Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/abcde-12345", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Application Not Found not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a RUM application returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2024-12-10T15:40:43.241Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/applications/abcd1234-0000-0000-abcd-1234abcd5678", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Application Not Found not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a RUM application returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2025-08-19T14:03:19.778Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "test-rum-4a6d822e36907848", + "type": "ios" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"id\":\"60ddadf3-d37f-4d33-bdf1-f56b674ae8ed\",\"attributes\":{\"product_analytics_replay_sample_rate\":100,\"tags\":[],\"is_active\":false,\"org_id\":321813,\"updated_by_handle\":\"frog@datadoghq.com\",\"application_id\":\"60ddadf3-d37f-4d33-bdf1-f56b674ae8ed\",\"product_scales\":{\"rum_event_processing_scale\":{\"last_modified_at\":1755612200050,\"state\":\"ALL\"},\"product_analytics_retention_scale\":{\"last_modified_at\":1755612200050,\"state\":\"NONE\"}},\"name\":\"test-rum-4a6d822e36907848\",\"created_at\":1755612200050,\"type\":\"ios\",\"created_by_handle\":\"frog@datadoghq.com\",\"client_token\":\"pubc55567bba30695d2cd7bf49190b6ccf5\",\"updated_at\":1755612200050,\"hash\":\"pubc55567bba30695d2cd7bf49190b6ccf5\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/applications/60ddadf3-d37f-4d33-bdf1-f56b674ae8ed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"attributes\":{\"updated_at\":1755612200050,\"org_id\":321813,\"product_analytics_replay_sample_rate\":100,\"updated_by_handle\":\"frog@datadoghq.com\",\"type\":\"ios\",\"application_id\":\"60ddadf3-d37f-4d33-bdf1-f56b674ae8ed\",\"hash\":\"pubc55567bba30695d2cd7bf49190b6ccf5\",\"created_by_handle\":\"frog@datadoghq.com\",\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1755612200050},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1755612200050}},\"is_active\":false,\"tags\":[],\"name\":\"test-rum-4a6d822e36907848\",\"client_token\":\"pubc55567bba30695d2cd7bf49190b6ccf5\",\"created_at\":1755612200050},\"id\":\"60ddadf3-d37f-4d33-bdf1-f56b674ae8ed\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/60ddadf3-d37f-4d33-bdf1-f56b674ae8ed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a RUM application returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2024-12-10T15:40:45.064Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/events", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"elapsed\":10,\"request_id\":\"pddv1ChZhbnQxdm9hcVI0bWQ1TGJMVVpuNnBBIi4KHq_brdH-tDEYaWyFcAkXsE_Jfa5xAF1IlOPthQkkIxIMNS-Pl8rl8qYHwMar\",\"status\":\"done\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of RUM events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2022-04-12T10:04:40.820Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/events", + "query": [ + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFkTzNLZnB6Zm5nQUFBQUFCQldVRmtUek5TVjBGQlEyOXBOa3BoY2sxZmRVMW5RVU0ifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"resource\":{\"first_byte\":{\"duration\":210600000,\"start\":1500000},\"url\":\"https://example.com/something\",\"status_code\":200,\"provider\":{\"domain\":\"datadoghq.com\",\"type\":\"first party\",\"name\":\"unknown\"},\"id\":\"bd12c722-d1fd-4af6-888a-fdd255eff318\",\"download\":{\"duration\":300000,\"start\":212100000},\"url_host\":\"example.com\",\"url_scheme\":\"https\",\"duration\":212400000,\"url_path_group\":\"/something\",\"url_path\":\"/something\",\"type\":\"xhr\",\"method\":\"POST\",\"size\":4107},\"service\":\"web-ui\",\"os\":{\"version\":\"10.15.7\",\"name\":\"Mac OS X\",\"version_major\":\"10\"},\"_dd\":{\"trace_id\":\"4461593448038214218\",\"format_version\":2,\"span_id\":\"2615287548010540048\"},\"application\":{\"id\":\"ac8218cf-498b-4d33-bd44-151095959547\"},\"session\":{\"ip\":\"52.17.186.3\",\"has_replay\":true,\"plan\":\"replay\",\"useragent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36\",\"type\":\"user\",\"id\":\"0a64704e-ab4a-44e6-971f-12598c0c6964\"},\"usr\":{\"is_datadog_employee\":false,\"email\":\"alice.doe@example.com\",\"org_id\":94691,\"name\":\"Alice Doe\",\"id\":\"1586212\"},\"context\":{\"browser_storage_api\":{\"usage\":0,\"quota\":299977904946},\"navbar_display_type\":\"side-small\",\"app_type\":\"python-static-spa\",\"org_id\":94691,\"screen\":{\"height\":1080.0,\"width\":1920.0,\"window_height\":946.0,\"window_width\":1920.0,\"pixel_ratio\":1.0},\"browser_test\":false,\"datadog_version\":\"35.7643717\",\"theme\":\"light\",\"usr\":{\"handle\":\"alice.doe@example.com\",\"id\":\"1586212\"},\"device\":{\"cookie_id\":\"id\"},\"page_load_status\":\"loaded_once\",\"dashboard\":{\"reflowType\":\"fixed\",\"dashboardSize\":{\"right\":1920,\"bottom\":103.5,\"top\":87.5,\"height\":16.0,\"width\":1854,\"left\":50.0},\"isHighDensityLayout\":false,\"title\":\"Eco Driving / Driver Efficiency\",\"isHighDensityEnabled\":false,\"dashType\":\"custom_timeboard\",\"isSPA\":true,\"layoutType\":\"ordered\",\"isPublicDashboard\":false,\"widgetCount\":83.0,\"isTvMode\":false,\"id\":\"3ik-gwn-p5b\"}},\"type\":\"resource\",\"device\":{\"model\":\"Mac\",\"type\":\"Desktop\",\"name\":\"Mac\",\"brand\":\"Apple\"},\"browser\":{\"version\":\"99.0.4844.84\",\"name\":\"Chrome\",\"version_major\":\"99\"},\"geo\":{\"city\":\"Dublin\",\"country_iso_code\":\"IE\",\"country\":\"Ireland\",\"continent_code\":\"EU\",\"country_subdivision\":\"Leinster\",\"as\":{\"domain\":\"amazon.com\",\"type\":\"hosting\",\"name\":\"Amazon.com, Inc.\"},\"location\":[0.1234,1.234],\"continent\":\"Europe\"},\"view\":{\"url_path\":\"/dashboard/xxx\",\"name\":\"/dashboard/:screenId(/:screenName)\",\"url\":\"https://app.datadoghq.com/dashboad/xxx?fullscreen_end_ts=1649692509728&fullscreen_paused=false&fullscreen_section=overview&fullscreen_start_ts=1649087709728&fullscreen_widget=743246&from_ts=1649153072626&to_ts=1649757872626&live=true\",\"referrer\":\"\",\"url_host\":\"app.datadoghq.com\",\"url_scheme\":\"https\",\"url_path_group\":\"/dashboard/?\",\"url_query\":{\"fullscreen_widget\":\"743246\",\"to_ts\":\"1649757872626\",\"fullscreen_section\":\"overview\",\"fullscreen_end_ts\":\"1649692509728\",\"fullscreen_start_ts\":\"1649087709728\",\"from_ts\":\"1649153072626\",\"live\":\"true\",\"fullscreen_paused\":\"false\"},\"id\":\"b1c5b7e1-42a6-4382-a8e2-a101db88a7c6\"}},\"tags\":[\"sdk_version:4.7.1_d78dfe50c99519039ccc0b5bd0ca4b68b01003b1\",\"datacenter:main.env\",\"source:browser\",\"env:prod\",\"version:35.7643717\",\"env:prod\",\"sdk_version:4.7.1_d78dfe50c99519039ccc0b5bd0ca4b68b01003b1\",\"datacenter:main.env\",\"source:browser\",\"service:web-ui\",\"version:35.7643717\"],\"service\":\"web-ui\",\"timestamp\":\"2022-04-12T10:04:37.029Z\"},\"type\":\"rum\",\"id\":\"AQAAAYAdO3MlOKUnZwAAAABBWUFkTzNTQUFBRHRjcnpYcC1kNUhnQUU\"},{\"attributes\":{\"attributes\":{\"resource\":{\"url\":\"https://static.datadoghq.com/static/c/single-page-app_LogsFavorites.493d30ca539726b7fc61.min.js\",\"url_scheme\":\"https\",\"url_host\":\"static.datadoghq.com\",\"provider\":{\"domain\":\"datadoghq.com\",\"type\":\"unknown\",\"name\":\"unknown\"},\"duration\":12600000,\"url_path_group\":\"/static/c/?\",\"url_path\":\"/static/c/single-page-app_LogsFavorites.493d30ca539726b7fc61.min.js\",\"type\":\"js\",\"id\":\"80939f26-8972-4d49-9108-f37fe0a732af\"},\"service\":\"web-ui\",\"os\":{\"version\":\"10.15.7\",\"name\":\"Mac OS X\",\"version_major\":\"10\"},\"_dd\":{\"format_version\":2},\"application\":{\"id\":\"ac8218cf-498b-4d33-bd44-151095959547\"},\"session\":{\"ip\":\"18.171.9.38\",\"plan\":\"replay\",\"type\":\"user\",\"id\":\"c842a0cc-0717-41ed-9319-53806b57eefc\",\"useragent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36\"},\"usr\":{\"is_datadog_employee\":false,\"email\":\"john.doe@example.com\",\"org_id\":1000000111,\"name\":\"john.doe@example.com\",\"id\":\"1000344937\"},\"context\":{\"browser_storage_api\":{\"usage\":0,\"quota\":299977904946},\"navbar_display_type\":\"side\",\"app_type\":\"python-static-spa\",\"org_id\":1000000111,\"screen\":{\"height\":960.0,\"width\":1536.0,\"window_height\":739.0,\"window_width\":1536.0,\"pixel_ratio\":2.0},\"browser_test\":false,\"datadog_version\":\"35.7643717\",\"theme\":\"light\",\"usr\":{\"handle\":\"john.doe@example.com\",\"id\":\"1000344937\"}},\"type\":\"resource\",\"device\":{\"model\":\"Mac\",\"type\":\"Desktop\",\"name\":\"Mac\",\"brand\":\"Apple\"},\"browser\":{\"version\":\"100.0.4896.75\",\"name\":\"Chrome\",\"version_major\":\"100\"},\"geo\":{\"city\":\"London\",\"country_iso_code\":\"GB\",\"country\":\"United Kingdom\",\"continent_code\":\"EU\",\"country_subdivision\":\"England\",\"as\":{\"domain\":\"amazon.com\",\"type\":\"hosting\",\"name\":\"Amazon.com, Inc.\"},\"location\":[0.1234,1.234],\"continent\":\"Europe\"},\"view\":{\"name\":\"/monitors/:id/edit\",\"url\":\"https://example.datadoghq.eu/monitors/12345/edit\",\"referrer\":\"https://example.datadoghq.eu/monitors/12345?from_ts=1649720111217&to_ts=1649736027006&eval_ts=1649736027006\",\"url_host\":\"example.datadoghq.eu\",\"url_scheme\":\"https\",\"url_path_group\":\"/monitors/?/edit\",\"url_path\":\"/monitors/12345/edit\",\"id\":\"c29e0f27-30aa-4e13-b4b9-4eddc396684b\"}},\"tags\":[\"sdk_version:4.7.1\",\"datacenter:split.env\",\"source:browser\",\"env:prod\",\"version:35.7643717\",\"env:prod\",\"sdk_version:4.7.1\",\"datacenter:split.env\",\"source:browser\",\"version:35.7643717\",\"service:web-ui\"],\"service\":\"web-ui\",\"timestamp\":\"2022-04-12T10:04:36.895Z\"},\"type\":\"rum\",\"id\":\"AQAAAYAdO3KfpzfngAAAAABBWUFkTzNSV0FBQ29pNkphck1fdU1nQUM\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/rum/events?page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFkTzNLZnB6Zm5nQUFBQUFCQldVRmtUek5TVjBGQlEyOXBOa3BoY2sxZmRVMW5RVU0ifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/events", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFRQUFBWUFkTzNLZnB6Zm5nQUFBQUFCQldVRmtUek5TVjBGQlEyOXBOa3BoY2sxZmRVMW5RVU0ifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFkTzNLYXN2VDNLd0FBQUFCQldVRmtUek5UVFVGQlFrOXRiRkZaY3kwNGFVcDNRVWMifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"resource\":{\"url\":\"https://static.datadoghq.com/static/c/single-page-app_NotebookFavorites.2f9e47e4ed9212539194.min.js\",\"url_scheme\":\"https\",\"url_host\":\"static.datadoghq.com\",\"provider\":{\"domain\":\"datadoghq.com\",\"type\":\"unknown\",\"name\":\"unknown\"},\"duration\":19000000,\"url_path_group\":\"/static/c/?\",\"url_path\":\"/static/c/single-page-app_NotebookFavorites.2f9e47e4ed9212539194.min.js\",\"type\":\"js\",\"id\":\"889b6e2e-ebfe-4a46-9207-4dd4ceb097a7\"},\"service\":\"web-ui\",\"os\":{\"version\":\"10.15.7\",\"name\":\"Mac OS X\",\"version_major\":\"10\"},\"_dd\":{\"format_version\":2},\"application\":{\"id\":\"ac8218cf-498b-4d33-bd44-151095959547\"},\"session\":{\"ip\":\"18.171.9.38\",\"plan\":\"replay\",\"type\":\"user\",\"id\":\"c842a0cc-0717-41ed-9319-53806b57eefc\",\"useragent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36\"},\"usr\":{\"is_datadog_employee\":false,\"email\":\"john.doe@example.com\",\"org_id\":1000000111,\"name\":\"john.doe@example.com\",\"id\":\"1000344937\"},\"context\":{\"browser_storage_api\":{\"usage\":0,\"quota\":299977904946},\"navbar_display_type\":\"side\",\"app_type\":\"python-static-spa\",\"org_id\":1000000111,\"screen\":{\"height\":960.0,\"width\":1536.0,\"window_height\":739.0,\"window_width\":1536.0,\"pixel_ratio\":2.0},\"browser_test\":false,\"datadog_version\":\"35.7643717\",\"theme\":\"light\",\"usr\":{\"handle\":\"john.doe@example.com\",\"id\":\"1000344937\"}},\"type\":\"resource\",\"device\":{\"model\":\"Mac\",\"type\":\"Desktop\",\"name\":\"Mac\",\"brand\":\"Apple\"},\"browser\":{\"version\":\"100.0.4896.75\",\"name\":\"Chrome\",\"version_major\":\"100\"},\"geo\":{\"city\":\"London\",\"country_iso_code\":\"GB\",\"country\":\"United Kingdom\",\"continent_code\":\"EU\",\"country_subdivision\":\"England\",\"as\":{\"domain\":\"amazon.com\",\"type\":\"hosting\",\"name\":\"Amazon.com, Inc.\"},\"location\":[0.1234,1.234],\"continent\":\"Europe\"},\"view\":{\"name\":\"/monitors/:id/edit\",\"url\":\"https://example.datadoghq.eu/monitors/12345/edit\",\"referrer\":\"https://example.datadoghq.eu/monitors/12345?from_ts=1649720111217&to_ts=1649736027006&eval_ts=1649736027006\",\"url_host\":\"example.datadoghq.eu\",\"url_scheme\":\"https\",\"url_path_group\":\"/monitors/?/edit\",\"url_path\":\"/monitors/12345/edit\",\"id\":\"c29e0f27-30aa-4e13-b4b9-4eddc396684b\"}},\"tags\":[\"sdk_version:4.7.1\",\"datacenter:split.env\",\"source:browser\",\"env:prod\",\"version:35.7643717\",\"env:prod\",\"sdk_version:4.7.1\",\"datacenter:split.env\",\"source:browser\",\"version:35.7643717\",\"service:web-ui\"],\"service\":\"web-ui\",\"timestamp\":\"2022-04-12T10:04:36.894Z\"},\"type\":\"rum\",\"id\":\"AQAAAYAdO3KepzfnfwAAAABBWUFkTzNSV0FBQ29pNkphck1fdU1nQUI\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/rum/events?page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFkTzNLYXN2VDNLd0FBQUFCQldVRmtUek5UVFVGQlFrOXRiRkZaY3kwNGFVcDNRVWMifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/events", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFRQUFBWUFkTzNLYXN2VDNLd0FBQUFCQldVRmtUek5UVFVGQlFrOXRiRkZaY3kwNGFVcDNRVWMifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of RUM events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2025-08-19T14:03:34.020Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "test-rum-a630eb80b3e09124", + "type": "ios" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"id\":\"cfc4270c-7df3-4a8b-a24a-20f2a25e15b2\",\"attributes\":{\"created_by_handle\":\"frog@datadoghq.com\",\"name\":\"test-rum-a630eb80b3e09124\",\"product_analytics_replay_sample_rate\":100,\"tags\":[],\"type\":\"ios\",\"updated_at\":1755612214266,\"updated_by_handle\":\"frog@datadoghq.com\",\"hash\":\"pub8da0c745dc9ed0616e72239bf54c23ff\",\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1755612214266},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1755612214266}},\"created_at\":1755612214266,\"client_token\":\"pub8da0c745dc9ed0616e72239bf54c23ff\",\"org_id\":321813,\"application_id\":\"cfc4270c-7df3-4a8b-a24a-20f2a25e15b2\",\"is_active\":false}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/rum/applications", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"Datadog\",\"is_active\":true,\"created_at\":1646148352095,\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1646148352095},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1646148352095}},\"tags\":[],\"updated_at\":1753109253427,\"type\":\"browser\",\"created_by_handle\":\"frog@datadoghq.com\",\"name\":\"S8-integration-tests\",\"org_id\":321813,\"application_id\":\"6ae18142-192f-4582-9633-95121c2a01d7\"},\"id\":\"6ae18142-192f-4582-9633-95121c2a01d7\"},{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"Datadog\",\"is_active\":true,\"created_at\":1648568515456,\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1648568515456},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1648568515456}},\"tags\":[],\"updated_at\":1753109253438,\"type\":\"browser\",\"created_by_handle\":\"frog@datadoghq.com\",\"name\":\"Synthetic Tests Default Application\",\"org_id\":321813,\"application_id\":\"ce9843b0-7a45-453c-a831-55dd15f85141\"},\"id\":\"ce9843b0-7a45-453c-a831-55dd15f85141\"},{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"Datadog\",\"is_active\":false,\"created_at\":1670608490405,\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1670608490405},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1670608490405}},\"tags\":[],\"updated_at\":1753109253448,\"type\":\"browser\",\"created_by_handle\":\"frog@datadoghq.com\",\"name\":\"awoooooooo\",\"org_id\":321813,\"application_id\":\"88e86bcc-6d0a-4a3c-942f-55314a6f03bd\"},\"id\":\"88e86bcc-6d0a-4a3c-942f-55314a6f03bd\"},{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"Datadog\",\"is_active\":false,\"created_at\":1721327950211,\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1721327950211},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1721327950211}},\"tags\":[],\"updated_at\":1753109253459,\"type\":\"browser\",\"created_by_handle\":\"anika.maskara@datadoghq.com\",\"name\":\"%s2\",\"org_id\":321813,\"application_id\":\"aaf8455b-23c6-4ec8-9bd8-9bc45fe90aa5\"},\"id\":\"aaf8455b-23c6-4ec8-9bd8-9bc45fe90aa5\"},{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"Datadog\",\"is_active\":false,\"created_at\":1743185866075,\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1743185866075},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1743185866075}},\"tags\":[],\"updated_at\":1753109253472,\"type\":\"browser\",\"created_by_handle\":\"frog@datadoghq.com\",\"name\":\"my-rum-application-test\",\"org_id\":321813,\"application_id\":\"414e5c84-a376-43ec-b3d7-35049deea225\"},\"id\":\"414e5c84-a376-43ec-b3d7-35049deea225\"},{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"Datadog\",\"is_active\":false,\"created_at\":1750736321451,\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1750736321451},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1750736321451}},\"tags\":[],\"updated_at\":1753109253483,\"type\":\"browser\",\"created_by_handle\":\"frog@datadoghq.com\",\"name\":\"updated_name_for_my_existing_rum_application\",\"org_id\":321813,\"application_id\":\"47e19fb5-6c6a-4bd1-aee8-25f6709833e0\"},\"id\":\"47e19fb5-6c6a-4bd1-aee8-25f6709833e0\"},{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"is_active\":false,\"created_at\":1755519831419,\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1755519831419},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1755519831419}},\"tags\":[],\"updated_at\":1755519831419,\"type\":\"android\",\"created_by_handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"tf-TestAccDatadogRUMApplicationDatasourceErrorMultiple-local-1755519829\",\"org_id\":321813,\"application_id\":\"e75f227f-a40f-49df-bd2c-e1997b1da53a\"},\"id\":\"e75f227f-a40f-49df-bd2c-e1997b1da53a\"},{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"frog@datadoghq.com\",\"is_active\":false,\"created_at\":1755612214266,\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1755612214266},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1755612214266}},\"tags\":[],\"updated_at\":1755612214266,\"type\":\"ios\",\"created_by_handle\":\"frog@datadoghq.com\",\"name\":\"test-rum-a630eb80b3e09124\",\"org_id\":321813,\"application_id\":\"cfc4270c-7df3-4a8b-a24a-20f2a25e15b2\"},\"id\":\"cfc4270c-7df3-4a8b-a24a-20f2a25e15b2\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/cfc4270c-7df3-4a8b-a24a-20f2a25e15b2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List all the RUM applications returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2024-12-10T15:40:47.157Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "@type:session AND @session.type:user", + "to": "now" + }, + "options": { + "time_offset": 0, + "timezone": "GMT" + }, + "page": { + "limit": 25 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"elapsed\":8,\"request_id\":\"pddv1ChZuVVBDZFI0cFFSQzZUWGR2TUVFYTRRIiwKHKl8fXhuRXGvOyjzriL7J6Jc6RqbmKFnOgcA4oMSDPmicr8fZBUCKcqymg\",\"status\":\"done\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search RUM events returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2022-04-12T12:55:55.501Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "@type:session AND @session.type:user", + "to": "now" + }, + "options": { + "time_offset": 0, + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFkeXBJYXB1d21Sd0FBQUFCeWMxOWlNVGcxTW1Fd1l5MDROV0V5TFRRNFlqWXRZak0wTnkxbVpUSXhN\"}},\"data\":[{\"attributes\":{\"attributes\":{\"resource\":{\"first_byte\":{\"duration\":210600000,\"start\":1500000},\"url\":\"https://example.com/something\",\"status_code\":200,\"provider\":{\"domain\":\"datadoghq.com\",\"type\":\"first party\",\"name\":\"unknown\"},\"id\":\"bd12c722-d1fd-4af6-888a-fdd255eff318\",\"download\":{\"duration\":300000,\"start\":212100000},\"url_host\":\"example.com\",\"url_scheme\":\"https\",\"duration\":212400000,\"url_path_group\":\"/something\",\"url_path\":\"/something\",\"type\":\"xhr\",\"method\":\"POST\",\"size\":4107},\"service\":\"web-ui\",\"os\":{\"version\":\"10.15.7\",\"name\":\"Mac OS X\",\"version_major\":\"10\"},\"_dd\":{\"trace_id\":\"4461593448038214218\",\"format_version\":2,\"span_id\":\"2615287548010540048\"},\"application\":{\"id\":\"ac8218cf-498b-4d33-bd44-151095959547\"},\"session\":{\"ip\":\"52.17.186.3\",\"has_replay\":true,\"plan\":\"replay\",\"useragent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36\",\"type\":\"user\",\"id\":\"0a64704e-ab4a-44e6-971f-12598c0c6964\"},\"usr\":{\"is_datadog_employee\":false,\"email\":\"alice.doe@example.com\",\"org_id\":94691,\"name\":\"Alice Doe\",\"id\":\"1586212\"},\"context\":{\"browser_storage_api\":{\"usage\":0,\"quota\":299977904946},\"navbar_display_type\":\"side-small\",\"app_type\":\"python-static-spa\",\"org_id\":94691,\"screen\":{\"height\":1080.0,\"width\":1920.0,\"window_height\":946.0,\"window_width\":1920.0,\"pixel_ratio\":1.0},\"browser_test\":false,\"datadog_version\":\"35.7643717\",\"theme\":\"light\",\"usr\":{\"handle\":\"alice.doe@example.com\",\"id\":\"1586212\"},\"device\":{\"cookie_id\":\"id\"},\"page_load_status\":\"loaded_once\",\"dashboard\":{\"reflowType\":\"fixed\",\"dashboardSize\":{\"right\":1920,\"bottom\":103.5,\"top\":87.5,\"height\":16.0,\"width\":1854,\"left\":50.0},\"isHighDensityLayout\":false,\"title\":\"Eco Driving / Driver Efficiency\",\"isHighDensityEnabled\":false,\"dashType\":\"custom_timeboard\",\"isSPA\":true,\"layoutType\":\"ordered\",\"isPublicDashboard\":false,\"widgetCount\":83.0,\"isTvMode\":false,\"id\":\"3ik-gwn-p5b\"}},\"type\":\"resource\",\"device\":{\"model\":\"Mac\",\"type\":\"Desktop\",\"name\":\"Mac\",\"brand\":\"Apple\"},\"browser\":{\"version\":\"99.0.4844.84\",\"name\":\"Chrome\",\"version_major\":\"99\"},\"geo\":{\"city\":\"Dublin\",\"country_iso_code\":\"IE\",\"country\":\"Ireland\",\"continent_code\":\"EU\",\"country_subdivision\":\"Leinster\",\"as\":{\"domain\":\"amazon.com\",\"type\":\"hosting\",\"name\":\"Amazon.com, Inc.\"},\"location\":[0.1234,1.234],\"continent\":\"Europe\"},\"view\":{\"url_path\":\"/dashboard/xxx\",\"name\":\"/dashboard/:screenId(/:screenName)\",\"url\":\"https://app.datadoghq.com/dashboad/xxx?fullscreen_end_ts=1649692509728&fullscreen_paused=false&fullscreen_section=overview&fullscreen_start_ts=1649087709728&fullscreen_widget=743246&from_ts=1649153072626&to_ts=1649757872626&live=true\",\"referrer\":\"\",\"url_host\":\"app.datadoghq.com\",\"url_scheme\":\"https\",\"url_path_group\":\"/dashboard/?\",\"url_query\":{\"fullscreen_widget\":\"743246\",\"to_ts\":\"1649757872626\",\"fullscreen_section\":\"overview\",\"fullscreen_end_ts\":\"1649692509728\",\"fullscreen_start_ts\":\"1649087709728\",\"from_ts\":\"1649153072626\",\"live\":\"true\",\"fullscreen_paused\":\"false\"},\"id\":\"b1c5b7e1-42a6-4382-a8e2-a101db88a7c6\"}},\"tags\":[\"sdk_version:4.7.1_d78dfe50c99519039ccc0b5bd0ca4b68b01003b1\",\"datacenter:main.env\",\"source:browser\",\"env:prod\",\"version:35.7643717\",\"env:prod\",\"sdk_version:4.7.1_d78dfe50c99519039ccc0b5bd0ca4b68b01003b1\",\"datacenter:main.env\",\"source:browser\",\"service:web-ui\",\"version:35.7643717\"],\"service\":\"web-ui\",\"timestamp\":\"2022-04-12T10:04:37.029Z\"},\"type\":\"rum\",\"id\":\"AQAAAYAdO3MlOKUnZwAAAABBWUFkTzNTQUFBRHRjcnpYcC1kNUhnQUU\"},{\"attributes\":{\"attributes\":{\"resource\":{\"url\":\"https://static.datadoghq.com/static/c/single-page-app_LogsFavorites.493d30ca539726b7fc61.min.js\",\"url_scheme\":\"https\",\"url_host\":\"static.datadoghq.com\",\"provider\":{\"domain\":\"datadoghq.com\",\"type\":\"unknown\",\"name\":\"unknown\"},\"duration\":12600000,\"url_path_group\":\"/static/c/?\",\"url_path\":\"/static/c/single-page-app_LogsFavorites.493d30ca539726b7fc61.min.js\",\"type\":\"js\",\"id\":\"80939f26-8972-4d49-9108-f37fe0a732af\"},\"service\":\"web-ui\",\"os\":{\"version\":\"10.15.7\",\"name\":\"Mac OS X\",\"version_major\":\"10\"},\"_dd\":{\"format_version\":2},\"application\":{\"id\":\"ac8218cf-498b-4d33-bd44-151095959547\"},\"session\":{\"ip\":\"18.171.9.38\",\"plan\":\"replay\",\"type\":\"user\",\"id\":\"c842a0cc-0717-41ed-9319-53806b57eefc\",\"useragent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36\"},\"usr\":{\"is_datadog_employee\":false,\"email\":\"john.doe@example.com\",\"org_id\":1000000111,\"name\":\"john.doe@example.com\",\"id\":\"1000344937\"},\"context\":{\"browser_storage_api\":{\"usage\":0,\"quota\":299977904946},\"navbar_display_type\":\"side\",\"app_type\":\"python-static-spa\",\"org_id\":1000000111,\"screen\":{\"height\":960.0,\"width\":1536.0,\"window_height\":739.0,\"window_width\":1536.0,\"pixel_ratio\":2.0},\"browser_test\":false,\"datadog_version\":\"35.7643717\",\"theme\":\"light\",\"usr\":{\"handle\":\"john.doe@example.com\",\"id\":\"1000344937\"}},\"type\":\"resource\",\"device\":{\"model\":\"Mac\",\"type\":\"Desktop\",\"name\":\"Mac\",\"brand\":\"Apple\"},\"browser\":{\"version\":\"100.0.4896.75\",\"name\":\"Chrome\",\"version_major\":\"100\"},\"geo\":{\"city\":\"London\",\"country_iso_code\":\"GB\",\"country\":\"United Kingdom\",\"continent_code\":\"EU\",\"country_subdivision\":\"England\",\"as\":{\"domain\":\"amazon.com\",\"type\":\"hosting\",\"name\":\"Amazon.com, Inc.\"},\"location\":[0.1234,1.234],\"continent\":\"Europe\"},\"view\":{\"name\":\"/monitors/:id/edit\",\"url\":\"https://example.datadoghq.eu/monitors/12345/edit\",\"referrer\":\"https://example.datadoghq.eu/monitors/12345?from_ts=1649720111217&to_ts=1649736027006&eval_ts=1649736027006\",\"url_host\":\"example.datadoghq.eu\",\"url_scheme\":\"https\",\"url_path_group\":\"/monitors/?/edit\",\"url_path\":\"/monitors/12345/edit\",\"id\":\"c29e0f27-30aa-4e13-b4b9-4eddc396684b\"}},\"tags\":[\"sdk_version:4.7.1\",\"datacenter:split.env\",\"source:browser\",\"env:prod\",\"version:35.7643717\",\"env:prod\",\"sdk_version:4.7.1\",\"datacenter:split.env\",\"source:browser\",\"version:35.7643717\",\"service:web-ui\"],\"service\":\"web-ui\",\"timestamp\":\"2022-04-12T10:04:36.895Z\"},\"type\":\"rum\",\"id\":\"AQAAAYAdO3KfpzfngAAAAABBWUFkTzNSV0FBQ29pNkphck1fdU1nQUM\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/rum/events?page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFkTzNLZnB6Zm5nQUFBQUFCQldVRmtUek5TVjBGQlEyOXBOa3BoY2sxZmRVMW5RVU0ifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "@type:session AND @session.type:user", + "to": "now" + }, + "options": { + "time_offset": 0, + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFRQUFBWUFkeXBJYXB1d21Sd0FBQUFCeWMxOWlNVGcxTW1Fd1l5MDROV0V5TFRRNFlqWXRZak0wTnkxbVpUSXhN", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFkTzNLYXN2VDNLd0FBQUFCQldVRmtUek5UVFVGQlFrOXRiRkZaY3kwNGFVcDNRVWMifQ\"}},\"data\":[{\"attributes\":{\"attributes\":{\"resource\":{\"url\":\"https://static.datadoghq.com/static/c/single-page-app_NotebookFavorites.2f9e47e4ed9212539194.min.js\",\"url_scheme\":\"https\",\"url_host\":\"static.datadoghq.com\",\"provider\":{\"domain\":\"datadoghq.com\",\"type\":\"unknown\",\"name\":\"unknown\"},\"duration\":19000000,\"url_path_group\":\"/static/c/?\",\"url_path\":\"/static/c/single-page-app_NotebookFavorites.2f9e47e4ed9212539194.min.js\",\"type\":\"js\",\"id\":\"889b6e2e-ebfe-4a46-9207-4dd4ceb097a7\"},\"service\":\"web-ui\",\"os\":{\"version\":\"10.15.7\",\"name\":\"Mac OS X\",\"version_major\":\"10\"},\"_dd\":{\"format_version\":2},\"application\":{\"id\":\"ac8218cf-498b-4d33-bd44-151095959547\"},\"session\":{\"ip\":\"18.171.9.38\",\"plan\":\"replay\",\"type\":\"user\",\"id\":\"c842a0cc-0717-41ed-9319-53806b57eefc\",\"useragent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36\"},\"usr\":{\"is_datadog_employee\":false,\"email\":\"john.doe@example.com\",\"org_id\":1000000111,\"name\":\"john.doe@example.com\",\"id\":\"1000344937\"},\"context\":{\"browser_storage_api\":{\"usage\":0,\"quota\":299977904946},\"navbar_display_type\":\"side\",\"app_type\":\"python-static-spa\",\"org_id\":1000000111,\"screen\":{\"height\":960.0,\"width\":1536.0,\"window_height\":739.0,\"window_width\":1536.0,\"pixel_ratio\":2.0},\"browser_test\":false,\"datadog_version\":\"35.7643717\",\"theme\":\"light\",\"usr\":{\"handle\":\"john.doe@example.com\",\"id\":\"1000344937\"}},\"type\":\"resource\",\"device\":{\"model\":\"Mac\",\"type\":\"Desktop\",\"name\":\"Mac\",\"brand\":\"Apple\"},\"browser\":{\"version\":\"100.0.4896.75\",\"name\":\"Chrome\",\"version_major\":\"100\"},\"geo\":{\"city\":\"London\",\"country_iso_code\":\"GB\",\"country\":\"United Kingdom\",\"continent_code\":\"EU\",\"country_subdivision\":\"England\",\"as\":{\"domain\":\"amazon.com\",\"type\":\"hosting\",\"name\":\"Amazon.com, Inc.\"},\"location\":[0.1234,1.234],\"continent\":\"Europe\"},\"view\":{\"name\":\"/monitors/:id/edit\",\"url\":\"https://example.datadoghq.eu/monitors/12345/edit\",\"referrer\":\"https://example.datadoghq.eu/monitors/12345?from_ts=1649720111217&to_ts=1649736027006&eval_ts=1649736027006\",\"url_host\":\"example.datadoghq.eu\",\"url_scheme\":\"https\",\"url_path_group\":\"/monitors/?/edit\",\"url_path\":\"/monitors/12345/edit\",\"id\":\"c29e0f27-30aa-4e13-b4b9-4eddc396684b\"}},\"tags\":[\"sdk_version:4.7.1\",\"datacenter:split.env\",\"source:browser\",\"env:prod\",\"version:35.7643717\",\"env:prod\",\"sdk_version:4.7.1\",\"datacenter:split.env\",\"source:browser\",\"version:35.7643717\",\"service:web-ui\"],\"service\":\"web-ui\",\"timestamp\":\"2022-04-12T10:04:36.894Z\"},\"type\":\"rum\",\"id\":\"AQAAAYAdO3KepzfnfwAAAABBWUFkTzNSV0FBQ29pNkphck1fdU1nQUI\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/rum/events?page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFkTzNLYXN2VDNLd0FBQUFCQldVRmtUek5UVFVGQlFrOXRiRkZaY3kwNGFVcDNRVWMifQ&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "now-15m", + "query": "@type:session AND @session.type:user", + "to": "now" + }, + "options": { + "time_offset": 0, + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFRQUFBWUFkTzNLYXN2VDNLd0FBQUFCQldVRmtUek5UVFVGQlFrOXRiRkZaY3kwNGFVcDNRVWMifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search RUM events returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2025-08-19T14:26:24.242Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "test-rum-2befac64eeb0a1b0", + "type": "ios" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"attributes\":{\"type\":\"ios\",\"is_active\":false,\"name\":\"test-rum-2befac64eeb0a1b0\",\"org_id\":321813,\"client_token\":\"pub5771f25e4c8f41666ac4a61cf7fc9d0d\",\"created_by_handle\":\"frog@datadoghq.com\",\"updated_at\":1755613584581,\"application_id\":\"94f76d3a-a8b2-4d1a-9938-771568a36f50\",\"created_at\":1755613584581,\"updated_by_handle\":\"frog@datadoghq.com\",\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1755613584581},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1755613584581}},\"hash\":\"pub5771f25e4c8f41666ac4a61cf7fc9d0d\",\"tags\":[],\"product_analytics_replay_sample_rate\":100},\"id\":\"94f76d3a-a8b2-4d1a-9938-771568a36f50\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "updated_name_for_my_existing_rum_application", + "type": "browser" + }, + "id": "94f76d3a-a8b2-4d1a-9938-771568a36f50", + "type": "rum_application_update" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/applications/94f76d3a-a8b2-4d1a-9938-771568a36f50", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"attributes\":{\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1755613584581},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1755613584581}},\"hash\":\"pub5771f25e4c8f41666ac4a61cf7fc9d0d\",\"name\":\"updated_name_for_my_existing_rum_application\",\"type\":\"browser\",\"created_at\":1755613584581,\"org_id\":321813,\"updated_at\":1755613584847,\"tags\":[],\"is_active\":false,\"client_token\":\"pub5771f25e4c8f41666ac4a61cf7fc9d0d\",\"created_by_handle\":\"frog@datadoghq.com\",\"application_id\":\"94f76d3a-a8b2-4d1a-9938-771568a36f50\",\"updated_by_handle\":\"frog@datadoghq.com\",\"product_analytics_replay_sample_rate\":100},\"id\":\"94f76d3a-a8b2-4d1a-9938-771568a36f50\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/94f76d3a-a8b2-4d1a-9938-771568a36f50", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a RUM application returns \"OK\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2024-12-10T15:40:49.167Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "test-rum-6fee7799535d7418", + "type": "ios" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"frog@datadoghq.com\",\"rum_enabled_at\":1733845249567,\"application_id\":\"00f4c783-4371-4e5c-b2bf-acf591de6c0d\",\"tags\":[],\"product_analytics_enabled\":false,\"rum_disabled_at\":0,\"client_token\":\"pub997fafb8492c06b8826445aba2a0bd3a\",\"created_at\":1733845249567,\"created_by_handle\":\"frog@datadoghq.com\",\"is_active\":false,\"org_id\":321813,\"rum_enabled\":true,\"product_analytics_enabled_at\":1733845249567,\"product_analytics_disabled_at\":1733845249567,\"updated_at\":1733845249567,\"name\":\"test-rum-6fee7799535d7418\",\"hash\":\"pub997fafb8492c06b8826445aba2a0bd3a\",\"type\":\"ios\"},\"id\":\"00f4c783-4371-4e5c-b2bf-acf591de6c0d\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "this_id_will_not_match", + "type": "rum_application_update" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/applications/00f4c783-4371-4e5c-b2bf-acf591de6c0d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"The id attribute in the request body does not match the id in the URL\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/00f4c783-4371-4e5c-b2bf-acf591de6c0d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a RUM application returns \"Unprocessable Entity.\" response", + "version": "v2" + }, + { + "feature": "RUM", + "frozen_at": "2025-08-19T14:03:03.148Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "test-rum-437f87a61b37ca7e", + "type": "ios" + }, + "type": "rum_application_create" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/rum/applications", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"attributes\":{\"updated_by_handle\":\"frog@datadoghq.com\",\"product_scales\":{\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1755612183425},\"product_analytics_retention_scale\":{\"state\":\"NONE\",\"last_modified_at\":1755612183425}},\"client_token\":\"pub601ee82f2a03f18ee4750e75918179a9\",\"is_active\":false,\"created_by_handle\":\"frog@datadoghq.com\",\"tags\":[],\"org_id\":321813,\"type\":\"ios\",\"product_analytics_replay_sample_rate\":100,\"name\":\"test-rum-437f87a61b37ca7e\",\"application_id\":\"c82755b7-9938-4241-ae5a-24dd5760402b\",\"hash\":\"pub601ee82f2a03f18ee4750e75918179a9\",\"updated_at\":1755612183425,\"created_at\":1755612183425},\"id\":\"c82755b7-9938-4241-ae5a-24dd5760402b\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "updated_rum_with_product_scales", + "product_analytics_retention_state": "MAX", + "rum_event_processing_state": "ALL" + }, + "id": "c82755b7-9938-4241-ae5a-24dd5760402b", + "type": "rum_application_update" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/rum/applications/c82755b7-9938-4241-ae5a-24dd5760402b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"rum_application\",\"attributes\":{\"tags\":[],\"application_id\":\"c82755b7-9938-4241-ae5a-24dd5760402b\",\"is_active\":false,\"hash\":\"pub601ee82f2a03f18ee4750e75918179a9\",\"product_analytics_replay_sample_rate\":100,\"product_scales\":{\"product_analytics_retention_scale\":{\"state\":\"MAX\",\"last_modified_at\":1755612183687},\"rum_event_processing_scale\":{\"state\":\"ALL\",\"last_modified_at\":1755612183425}},\"updated_by_handle\":\"frog@datadoghq.com\",\"org_id\":321813,\"created_by_handle\":\"frog@datadoghq.com\",\"type\":\"ios\",\"name\":\"updated_rum_with_product_scales\",\"client_token\":\"pub601ee82f2a03f18ee4750e75918179a9\",\"created_at\":1755612183425,\"updated_at\":1755612183687},\"id\":\"c82755b7-9938-4241-ae5a-24dd5760402b\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/rum/applications/c82755b7-9938-4241-ae5a-24dd5760402b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a RUM application with Product Scales returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/scorecards.json b/test-server-data/v2/scorecards.json new file mode 100644 index 0000000000..3d20007e88 --- /dev/null +++ b/test-server-data/v2/scorecards.json @@ -0,0 +1,1207 @@ +{ + "feature": "Scorecards", + "recordings": [ + { + "feature": "Scorecards", + "frozen_at": "2025-08-26T15:48:59.496Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "level": 2, + "name": "Team Defined", + "scorecard_id": "NOT.FOUND" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"scorecard_id\\\" failed scorecard lookup\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-01T22:17:30.469Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Create_a_new_rule_returns_Created_response-1698877050", + "scorecard_name": "Observability Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b6a60878-a110-4df5-b8aa-648d7f02dd02\",\"type\":\"rule\",\"attributes\":{\"category\":\"Observability Best Practices\",\"created_at\":\"2023-11-01T22:17:30.596814Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T22:17:30.596814Z\",\"name\":\"Test-Create_a_new_rule_returns_Created_response-1698877050\",\"scorecard_name\":\"Observability Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"hA5zOZJXXJ4K\",\"type\":\"scorecard\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/b6a60878-a110-4df5-b8aa-648d7f02dd02", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new rule returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-02T21:19:11.538Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Create_outcomes_batch_returns_Bad_Request_response-1698959951", + "owner": "Datadog", + "scorecard_name": "OpenAPI Spec Test Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0451feb1-fb1b-463f-ba02-4568feb2795b\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-02T21:19:11.70524Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-02T21:19:11.70524Z\",\"name\":\"Test-Create_outcomes_batch_returns_Bad_Request_response-1698959951\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "results": [ + { + "remarks": "See: Services", + "rule_id": "0451feb1-fb1b-463f-ba02-4568feb2795b", + "service_name": "", + "state": "pass" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/outcomes/batch", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"service_name\\\" is required\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/0451feb1-fb1b-463f-ba02-4568feb2795b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create outcomes batch returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-01T22:17:31.442Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Create_outcomes_batch_returns_OK_response-1698877051", + "owner": "Datadog", + "scorecard_name": "OpenAPI Spec Test Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b124b446-f246-41ab-b477-99293969cc5e\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-01T22:17:31.577258Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T22:17:31.577258Z\",\"name\":\"Test-Create_outcomes_batch_returns_OK_response-1698877051\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "results": [ + { + "remarks": "See: Services", + "rule_id": "b124b446-f246-41ab-b477-99293969cc5e", + "service_name": "my-service", + "state": "pass" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/outcomes/batch", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"b124b446-f246-41ab-b477-99293969cc5e\\\\my-service\",\"type\":\"outcome\",\"attributes\":{\"modified_at\":\"2023-11-01T22:17:31.68808Z\",\"remarks\":\"See: \\u003ca href=\\\"https://app.datadoghq.com/services\\\"\\u003eServices\\u003c/a\\u003e\",\"service_name\":\"my-service\",\"state\":\"pass\"},\"relationships\":{\"rule\":{\"data\":{\"id\":\"b124b446-f246-41ab-b477-99293969cc5e\",\"type\":\"rule\"}}}}],\"meta\":{\"total_received\":1,\"total_updated\":1}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/b124b446-f246-41ab-b477-99293969cc5e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create outcomes batch returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-01T22:17:30.908Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/2a4f524e-168a-429d-bb75-7b1ffeab0cbb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rule not found: 2a4f524e-168a-429d-bb75-7b1ffeab0cbb\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-01T22:17:31.023Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Delete_a_rule_returns_OK_response-1698877051", + "owner": "Datadog", + "scorecard_name": "OpenAPI Spec Test Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"74d92a4b-2242-488d-b3de-dd557eecb18b\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-01T22:17:31.138205Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T22:17:31.138205Z\",\"name\":\"Test-Delete_a_rule_returns_OK_response-1698877051\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/74d92a4b-2242-488d-b3de-dd557eecb18b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/74d92a4b-2242-488d-b3de-dd557eecb18b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rule not found: 74d92a4b-2242-488d-b3de-dd557eecb18b\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-01T22:17:30.803Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"d45d511e-f03a-42e9-8ef6-5d00a9456c32\",\"type\":\"rule\",\"attributes\":{\"category\":\"Deployments automated via Deployment Trains\",\"created_at\":\"2023-11-01T14:11:49.302387Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T14:11:49.302387Z\",\"name\":\"Team Defined\",\"scorecard_name\":\"Deployments automated via Deployment Trains\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"_M1Ygy3QcqRI\",\"type\":\"scorecard\"}}}},{\"id\":\"0e6eac8b-5c4c-4438-a6c5-e631f7a2c90e\",\"type\":\"rule\",\"attributes\":{\"category\":\"Observability Best Practices\",\"created_at\":\"2023-11-01T18:04:56.125512Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T18:04:56.125512Z\",\"name\":\"Test-Create_a_new_rule_returns_Created_response-1698861895\",\"scorecard_name\":\"Observability Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"hA5zOZJXXJ4K\",\"type\":\"scorecard\"}}}},{\"id\":\"2609deb7-bbd0-4277-bf48-2265328bc4ca\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-01T20:08:49.073289Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:08:49.073289Z\",\"name\":\"Test-Create_outcomes_batch_returns_OK_response-1698869328\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}},{\"id\":\"c939cd35-77ba-42af-aa04-f1a027e0dae6\",\"type\":\"rule\",\"attributes\":{\"category\":\"Observability Best Practices\",\"created_at\":\"2023-11-01T20:03:46.852914Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:03:46.852914Z\",\"name\":\"Test-Typescript-Create_a_new_rule_returns_Created_response-1698869026\",\"scorecard_name\":\"Observability Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"hA5zOZJXXJ4K\",\"type\":\"scorecard\"}}}},{\"id\":\"e8ac31f0-488f-40b1-a83c-cd747e2eeadc\",\"type\":\"rule\",\"attributes\":{\"category\":\"Observability Best Practices\",\"created_at\":\"2023-11-01T20:05:34.033986Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:05:34.033986Z\",\"name\":\"Test-Typescript-Create_a_new_rule_returns_Created_response-1698869133\",\"scorecard_name\":\"Observability Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"hA5zOZJXXJ4K\",\"type\":\"scorecard\"}}}},{\"id\":\"a5352494-7fad-4e4b-9c7a-3ecd90f30d27\",\"type\":\"rule\",\"attributes\":{\"category\":\"Observability Best Practices\",\"created_at\":\"2023-11-01T20:25:35.217803Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:25:35.217803Z\",\"name\":\"Test-Typescript-Create_a_new_rule_returns_Created_response-1698870335\",\"scorecard_name\":\"Observability Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"hA5zOZJXXJ4K\",\"type\":\"scorecard\"}}}},{\"id\":\"c70e3b5f-a9f7-4ef8-8417-bf28ea153631\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-01T20:08:35.347219Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:08:35.347219Z\",\"name\":\"Test-Typescript-Create_outcomes_batch_returns_OK_response-1698869315\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}},{\"id\":\"be6867b9-bd71-497f-803f-208d7361fee2\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-01T20:25:35.374915Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:25:35.374915Z\",\"name\":\"Test-Typescript-Create_outcomes_batch_returns_OK_response-1698870335\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}},{\"id\":\"76460cec-323c-4215-81ae-b16aa160d0f1\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-01T20:25:35.637942Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:25:35.637942Z\",\"name\":\"Test-Typescript-Delete_a_rule_returns_OK_response-1698870335\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}],\"links\":{\"next\":\"/api/v2/scorecard/rules?page%5Blimit%5D=100\\u0026page%5Boffset%5D=100\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-01T22:17:32.235Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/scorecard/outcomes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"c70e3b5f-a9f7-4ef8-8417-bf28ea153631\\\\my-service\",\"type\":\"outcome\",\"attributes\":{\"modified_at\":\"2023-11-01T20:08:35.478323Z\",\"remarks\":\"See: \\u003ca href=\\\"https://app.datadoghq.com/services\\\"\\u003eServices\\u003c/a\\u003e\",\"service_name\":\"my-service\",\"state\":\"pass\"},\"relationships\":{\"rule\":{\"data\":{\"id\":\"c70e3b5f-a9f7-4ef8-8417-bf28ea153631\",\"type\":\"rule\"}}}},{\"id\":\"2609deb7-bbd0-4277-bf48-2265328bc4ca\\\\my-service\",\"type\":\"outcome\",\"attributes\":{\"modified_at\":\"2023-11-01T20:08:49.202899Z\",\"remarks\":\"See: \\u003ca href=\\\"https://app.datadoghq.com/services\\\"\\u003eServices\\u003c/a\\u003e\",\"service_name\":\"my-service\",\"state\":\"pass\"},\"relationships\":{\"rule\":{\"data\":{\"id\":\"2609deb7-bbd0-4277-bf48-2265328bc4ca\",\"type\":\"rule\"}}}},{\"id\":\"be6867b9-bd71-497f-803f-208d7361fee2\\\\my-service\",\"type\":\"outcome\",\"attributes\":{\"modified_at\":\"2023-11-01T20:25:35.504243Z\",\"remarks\":\"See: \\u003ca href=\\\"https://app.datadoghq.com/services\\\"\\u003eServices\\u003c/a\\u003e\",\"service_name\":\"my-service\",\"state\":\"pass\"},\"relationships\":{\"rule\":{\"data\":{\"id\":\"be6867b9-bd71-497f-803f-208d7361fee2\",\"type\":\"rule\"}}}}],\"links\":{\"next\":\"/api/v2/scorecard/outcomes?page%5Blimit%5D=100\\u0026page%5Boffset%5D=100\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all rule outcomes returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-02T15:08:06.419Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/scorecard/outcomes", + "query": [ + [ + "fields[outcome]", + "state" + ], + [ + "filter[outcome][service_name]", + "my-service" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"be6867b9-bd71-497f-803f-208d7361fee2\\\\my-service\",\"type\":\"outcome\",\"attributes\":{\"state\":\"pass\"}},{\"id\":\"c70e3b5f-a9f7-4ef8-8417-bf28ea153631\\\\my-service\",\"type\":\"outcome\",\"attributes\":{\"state\":\"pass\"}}],\"links\":{\"next\":\"/api/v2/scorecard/outcomes?fields%5Boutcome%5D=state\\u0026filter%5Boutcome%5D%5Bservice_name%5D=my-service\\u0026page%5Blimit%5D=2\\u0026page%5Boffset%5D=2\\u0026page%5Bsize%5D=2\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/scorecard/outcomes", + "query": [ + [ + "fields[outcome]", + "state" + ], + [ + "filter[outcome][service_name]", + "my-service" + ], + [ + "page[offset]", + "2" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"links\":{\"next\":\"/api/v2/scorecard/outcomes?fields%5Boutcome%5D=state\\u0026filter%5Boutcome%5D%5Bservice_name%5D=my-service\\u0026page%5Blimit%5D=2\\u0026page%5Boffset%5D=4\\u0026page%5Bsize%5D=2\",\"previous\":\"/api/v2/scorecard/outcomes?fields%5Boutcome%5D=state\\u0026filter%5Boutcome%5D%5Bservice_name%5D=my-service\\u0026page%5Blimit%5D=2\\u0026page%5Boffset%5D=0\\u0026page%5Bsize%5D=2\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all rule outcomes returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-02T17:23:59.660Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"a5352494-7fad-4e4b-9c7a-3ecd90f30d27\",\"type\":\"rule\",\"attributes\":{\"category\":\"Observability Best Practices\",\"created_at\":\"2023-11-01T20:25:35.217803Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:25:35.217803Z\",\"name\":\"Test-Typescript-Create_a_new_rule_returns_Created_response-1698870335\",\"scorecard_name\":\"Observability Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"hA5zOZJXXJ4K\",\"type\":\"scorecard\"}}}},{\"id\":\"c70e3b5f-a9f7-4ef8-8417-bf28ea153631\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-01T20:08:35.347219Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:08:35.347219Z\",\"name\":\"Test-Typescript-Create_outcomes_batch_returns_OK_response-1698869315\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}},{\"id\":\"be6867b9-bd71-497f-803f-208d7361fee2\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-01T20:25:35.374915Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:25:35.374915Z\",\"name\":\"Test-Typescript-Create_outcomes_batch_returns_OK_response-1698870335\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}},{\"id\":\"76460cec-323c-4215-81ae-b16aa160d0f1\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2023-11-01T20:25:35.637942Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2023-11-01T20:25:35.637942Z\",\"name\":\"Test-Typescript-Delete_a_rule_returns_OK_response-1698870335\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}],\"links\":{\"next\":\"/api/v2/scorecard/rules?page%5Blimit%5D=100\\u0026page%5Boffset%5D=100\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2023-11-02T15:06:55.772Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/scorecard/rules", + "query": [ + [ + "fields[rule]", + "name" + ], + [ + "filter[rule][custom]", + "true" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"a5352494-7fad-4e4b-9c7a-3ecd90f30d27\",\"type\":\"rule\",\"attributes\":{\"name\":\"Test-Typescript-Create_a_new_rule_returns_Created_response-1698870335\"}},{\"id\":\"c70e3b5f-a9f7-4ef8-8417-bf28ea153631\",\"type\":\"rule\",\"attributes\":{\"name\":\"Test-Typescript-Create_outcomes_batch_returns_OK_response-1698869315\"}}],\"links\":{\"next\":\"/api/v2/scorecard/rules?fields%5Brule%5D=name\\u0026filter%5Brule%5D%5Bcustom%5D=true\\u0026page%5Blimit%5D=2\\u0026page%5Boffset%5D=2\\u0026page%5Bsize%5D=2\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/scorecard/rules", + "query": [ + [ + "fields[rule]", + "name" + ], + [ + "filter[rule][custom]", + "true" + ], + [ + "page[offset]", + "2" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"be6867b9-bd71-497f-803f-208d7361fee2\",\"type\":\"rule\",\"attributes\":{\"name\":\"Test-Typescript-Create_outcomes_batch_returns_OK_response-1698870335\"}},{\"id\":\"76460cec-323c-4215-81ae-b16aa160d0f1\",\"type\":\"rule\",\"attributes\":{\"name\":\"Test-Typescript-Delete_a_rule_returns_OK_response-1698870335\"}}],\"links\":{\"next\":\"/api/v2/scorecard/rules?fields%5Brule%5D=name\\u0026filter%5Brule%5D%5Bcustom%5D=true\\u0026page%5Blimit%5D=2\\u0026page%5Boffset%5D=4\\u0026page%5Bsize%5D=2\",\"previous\":\"/api/v2/scorecard/rules?fields%5Brule%5D=name\\u0026filter%5Brule%5D%5Bcustom%5D=true\\u0026page%5Blimit%5D=2\\u0026page%5Boffset%5D=0\\u0026page%5Bsize%5D=2\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/scorecard/rules", + "query": [ + [ + "fields[rule]", + "name" + ], + [ + "filter[rule][custom]", + "true" + ], + [ + "page[offset]", + "4" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"links\":{\"next\":\"/api/v2/scorecard/rules?fields%5Brule%5D=name\\u0026filter%5Brule%5D%5Bcustom%5D=true\\u0026page%5Blimit%5D=2\\u0026page%5Boffset%5D=6\\u0026page%5Bsize%5D=2\",\"previous\":\"/api/v2/scorecard/rules?fields%5Brule%5D=name\\u0026filter%5Brule%5D%5Bcustom%5D=true\\u0026page%5Blimit%5D=2\\u0026page%5Boffset%5D=2\\u0026page%5Bsize%5D=2\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all rules returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2025-08-26T14:46:17.790Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Update_Scorecard_outcomes_asynchronously_returns_Accepted_response-1756219577", + "owner": "Datadog", + "scorecard_name": "OpenAPI Spec Test Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5e3dexz6x_4f_4pa\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2025-08-26T14:46:18.889883535Z\",\"custom\":true,\"enabled\":true,\"level\":3,\"modified_at\":\"2025-08-26T14:46:18.889883535Z\",\"name\":\"Test-Update_Scorecard_outcomes_asynchronously_returns_Accepted_response-1756219577\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "results": [ + { + "entity_reference": "service:my-service", + "remarks": "See: Services", + "rule_id": "5e3dexz6x_4f_4pa", + "state": "pass" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/outcomes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4iexte5r8prsrlrtzzxpy\",\"type\":\"async-request\"},\"meta\":{\"total_received\":1}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/5e3dexz6x_4f_4pa", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update Scorecard outcomes asynchronously returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2025-08-26T14:46:19.541Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Update_Scorecard_outcomes_asynchronously_returns_Bad_Request_response-1756219579", + "owner": "Datadog", + "scorecard_name": "OpenAPI Spec Test Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cyysw9dtqcu8zemc\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2025-08-26T14:46:19.594805953Z\",\"custom\":true,\"enabled\":true,\"level\":3,\"modified_at\":\"2025-08-26T14:46:19.594805953Z\",\"name\":\"Test-Update_Scorecard_outcomes_asynchronously_returns_Bad_Request_response-1756219579\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "results": [ + { + "entity_reference": "service:my-service", + "rule_id": "cyysw9dtqcu8zemc", + "state": "INVALID" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/outcomes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"state\\\" must be one of \\\"pass fail skip\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/cyysw9dtqcu8zemc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update Scorecard outcomes asynchronously returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2025-08-26T14:46:20.159Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "results": [ + { + "entity_reference": "service:my-service", + "remarks": "See: Services", + "rule_id": "INVALID.RULE_ID", + "state": "pass" + } + ] + }, + "type": "batched-outcome" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/outcomes", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Invalid rule_id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + } + ], + "scenario": "Update Scorecard outcomes asynchronously returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2024-07-30T02:47:12.976Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Update_an_existing_rule_returns_Rule_updated_successfully_response-1722307632", + "owner": "Datadog", + "scorecard_name": "OpenAPI Spec Test Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"L2uJseIxQCRLg_2z\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2024-07-30T02:47:13.117302334Z\",\"custom\":true,\"enabled\":true,\"modified_at\":\"2024-07-30T02:47:13.117302334Z\",\"name\":\"Test-Update_an_existing_rule_returns_Rule_updated_successfully_response-1722307632\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Updated description via test", + "enabled": true, + "name": "Test-Update_an_existing_rule_returns_Rule_updated_successfully_response-1722307632", + "scorecard_name": "OpenAPI Spec Test Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/scorecard/rules/L2uJseIxQCRLg_2z", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"L2uJseIxQCRLg_2z\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2024-07-30T02:47:13.117302Z\",\"custom\":true,\"description\":\"Updated description via test\",\"enabled\":true,\"modified_at\":\"2024-07-30T02:47:13.231478Z\",\"name\":\"Test-Update_an_existing_rule_returns_Rule_updated_successfully_response-1722307632\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/L2uJseIxQCRLg_2z", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an existing rule returns \"Rule updated successfully\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2025-08-26T19:33:28.111Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Update_an_existing_scorecard_rule_returns_Bad_Request_response-1756236808", + "owner": "Datadog", + "scorecard_name": "OpenAPI Spec Test Best Practices" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/scorecard/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"z661h8n2bpc5q0kx\",\"type\":\"rule\",\"attributes\":{\"category\":\"OpenAPI Spec Test Best Practices\",\"created_at\":\"2025-08-26T19:32:32.06573621Z\",\"custom\":true,\"enabled\":true,\"level\":3,\"modified_at\":\"2025-08-26T19:32:32.06573621Z\",\"name\":\"Test-Update_an_existing_scorecard_rule_returns_Bad_Request_response-1756236808\",\"owner\":\"Datadog\",\"scorecard_name\":\"OpenAPI Spec Test Best Practices\"},\"relationships\":{\"scorecard\":{\"data\":{\"id\":\"qsxpoYRhU_yz\",\"type\":\"scorecard\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "level": 2, + "name": "Team Defined", + "scorecard_id": "NOT.FOUND" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/scorecard/rules/z661h8n2bpc5q0kx", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"scorecard_id\\\" failed scorecard lookup\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/scorecard/rules/z661h8n2bpc5q0kx", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an existing scorecard rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Scorecards", + "frozen_at": "2025-08-26T19:33:28.966Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "level": 2, + "name": "Team Defined", + "scorecard_name": "Deployments automated via Deployment Trains" + }, + "type": "rule" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/scorecard/rules/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rule not found: REPLACE.ME\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update an existing scorecard rule returns \"Not Found\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/seats.json b/test-server-data/v2/seats.json new file mode 100644 index 0000000000..a98545e3df --- /dev/null +++ b/test-server-data/v2/seats.json @@ -0,0 +1,424 @@ +{ + "feature": "Seats", + "recordings": [ + { + "feature": "Seats", + "frozen_at": "2026-02-11T20:26:19.395Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "product_code": "", + "user_uuids": [ + "" + ] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/seats/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"product_code is required\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + } + ], + "scenario": "Assign seats to users returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Seats", + "frozen_at": "2026-02-11T18:39:37.303Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Assign_seats_to_users_returns_Unprocessable_Entity_response_when_product_code_is_empty-1770835177@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"f9900642-4311-4d6a-836b-2f367a92c511\",\"attributes\":{\"name\":null,\"handle\":\"test-assign_seats_to_users_returns_unprocessable_entity_response_when_product_code_is_empty-1770835177@datadoghq.com\",\"created_at\":\"2026-02-11T18:39:38.645306+00:00\",\"modified_at\":\"2026-02-11T18:39:38.645306+00:00\",\"email\":\"test-assign_seats_to_users_returns_unprocessable_entity_response_when_product_code_is_empty-1770835177@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b2c717bae3bae3a185ff567efda79a5a?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "product_code": "", + "user_uuids": [ + "f9900642-4311-4d6a-836b-2f367a92c511" + ] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/seats/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"product_code is required\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/f9900642-4311-4d6a-836b-2f367a92c511", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Assign seats to users returns \"Unprocessable Entity\" response when product_code is empty", + "version": "v2" + }, + { + "feature": "Seats", + "frozen_at": "2026-02-11T18:39:39.382Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "product_code": "incident_response", + "user_uuids": [] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/seats/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"user_uuids is required and must not be empty\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + } + ], + "scenario": "Assign seats to users returns \"Unprocessable Entity\" response when user_uuids is empty", + "version": "v2" + }, + { + "feature": "Seats", + "frozen_at": "2026-02-11T18:39:39.654Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/seats/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"product_code query parameter is required\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get users with seats returns \"Bad Request\" response when product_code is missing", + "version": "v2" + }, + { + "feature": "Seats", + "frozen_at": "2026-02-11T18:39:39.917Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/seats/users", + "query": [ + [ + "page[limit]", + "100" + ], + [ + "product_code", + "incident_response" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get users with seats returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Seats", + "frozen_at": "2026-02-11T20:26:20.422Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "product_code": "", + "user_uuids": [ + "" + ] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/seats/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"product_code is required\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + } + ], + "scenario": "Unassign seats from users returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Seats", + "frozen_at": "2026-02-11T18:39:40.198Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Unassign_seats_from_users_returns_Unprocessable_Entity_response_when_product_code_is_empty-1770835180@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"626a4e8e-64bd-409d-b80e-428f08ac0b62\",\"attributes\":{\"name\":null,\"handle\":\"test-unassign_seats_from_users_returns_unprocessable_entity_response_when_product_code_is_empty-1770835180@datadoghq.com\",\"created_at\":\"2026-02-11T18:39:40.455244+00:00\",\"modified_at\":\"2026-02-11T18:39:40.455244+00:00\",\"email\":\"test-unassign_seats_from_users_returns_unprocessable_entity_response_when_product_code_is_empty-1770835180@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/17f8bf4cb2d8600dc8ada5cdd71b7d77?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "product_code": "", + "user_uuids": [ + "626a4e8e-64bd-409d-b80e-428f08ac0b62" + ] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/seats/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"product_code is required\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/626a4e8e-64bd-409d-b80e-428f08ac0b62", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Unassign seats from users returns \"Unprocessable Entity\" response when product_code is empty", + "version": "v2" + }, + { + "feature": "Seats", + "frozen_at": "2026-02-11T18:39:41.207Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "product_code": "incident_response", + "user_uuids": [] + }, + "type": "seat-assignments" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/seats/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"user_uuids is required and must not be empty\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + } + ], + "scenario": "Unassign seats from users returns \"Unprocessable Entity\" response when user_uuids is empty", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/security-monitoring.json b/test-server-data/v2/security-monitoring.json new file mode 100644 index 0000000000..425fdddb9d --- /dev/null +++ b/test-server-data/v2/security-monitoring.json @@ -0,0 +1,13851 @@ +{ + "feature": "Security Monitoring", + "recordings": [ + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-20T15:49:48.969Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/jira_issues", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9efb1118-ed9c-4b02-b13b-f3acf8415f7c\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2025-11-20T15:22:44.644286Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/appsec/vm/library/vulnerability/94762d2f0123331575cd81095e450f09?detection=static\",\"resource_id\":\"OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=\"}],\"jira_issue\":{\"status\":\"COMPLETED\",\"result\":{\"issue_id\":\"2404808\",\"issue_key\":\"CSMSEC-105476\",\"issue_url\":\"https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476\",\"account_id\":\"fdcffa62-24ab-4914-a195-a22bdc607030\"}},\"key\":\"CSMINV-463\",\"modified_at\":\"2025-11-20T15:49:53.272293Z\",\"priority\":\"NOT_DEFINED\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"modified_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Attach security finding to a Jira issue returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-19T16:20:46.726Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "7d16945b-baf8-411e-ab2a-20fe43af1ea3", + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/cases/7d16945b-baf8-411e-ab2a-20fe43af1ea3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7d16945b-baf8-411e-ab2a-20fe43af1ea3\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2025-11-19T13:54:23.634063Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/appsec/vm/library/vulnerability/dfa027f7c037b2f77159adc027fecb56?detection=static\",\"resource_id\":\"ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=\"}],\"key\":\"CSMINV-459\",\"modified_at\":\"2025-11-19T16:20:51.754979Z\",\"priority\":\"NOT_DEFINED\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"modified_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Attach security finding to a case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-20T15:53:19.037Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + }, + "relationships": { + "findings": { + "data": [] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/jira_issues", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"no finding provided\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Attach security findings to a Jira issue returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-20T15:59:56.064Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "wrong-finding-id", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/jira_issues", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"finding not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Attach security findings to a Jira issue returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-20T15:52:21.664Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jira_issue_url": "https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=", + "type": "findings" + }, + { + "id": "MTNjN2ZmYWMzMDIxYmU1ZDFiZDRjNWUwN2I1NzVmY2F-YTA3MzllMTUzNWM3NmEyZjdiNzEzOWM5YmViZTMzOGM=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/jira_issues", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9efb1118-ed9c-4b02-b13b-f3acf8415f7c\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2025-11-20T15:22:44.644286Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/appsec/vm/library/vulnerability/94762d2f0123331575cd81095e450f09?detection=static\",\"resource_id\":\"OTQ3NjJkMmYwMTIzMzMxNTc1Y2Q4MTA5NWU0NTBmMDl-ZjE3NjMxZWVkYzBjZGI1NDY2NWY2OGQxZDk4MDY4MmI=\"},{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/appsec/vm/library/vulnerability/13c7ffac3021be5d1bd4c5e07b575fca?detection=static\",\"resource_id\":\"MTNjN2ZmYWMzMDIxYmU1ZDFiZDRjNWUwN2I1NzVmY2F-YTA3MzllMTUzNWM3NmEyZjdiNzEzOWM5YmViZTMzOGM=\"}],\"jira_issue\":{\"status\":\"COMPLETED\",\"result\":{\"issue_id\":\"2404808\",\"issue_key\":\"CSMSEC-105476\",\"issue_url\":\"https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105476\",\"account_id\":\"fdcffa62-24ab-4914-a195-a22bdc607030\"}},\"key\":\"CSMINV-463\",\"modified_at\":\"2025-11-20T15:52:25.368628Z\",\"priority\":\"NOT_DEFINED\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"modified_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Attach security findings to a Jira issue returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-19T16:16:38.781Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "7d16945b-baf8-411e-ab2a-20fe43af1ea3", + "relationships": { + "findings": { + "data": [] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/cases/7d16945b-baf8-411e-ab2a-20fe43af1ea3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"no finding provided\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Attach security findings to a case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-19T16:17:49.938Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "wrong-case-id", + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/cases/wrong-case-id", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"failed to get case: case not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Attach security findings to a case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-19T16:23:42.957Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "7d16945b-baf8-411e-ab2a-20fe43af1ea3", + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + }, + { + "id": "MmUzMzZkODQ2YTI3NDU0OTk4NDk3NzhkOTY5YjU2Zjh-YWJjZGI1ODI4OTYzNWM3ZmUwZTBlOWRkYTRiMGUyOGQ=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/cases/7d16945b-baf8-411e-ab2a-20fe43af1ea3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7d16945b-baf8-411e-ab2a-20fe43af1ea3\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2025-11-19T13:54:23.634063Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/appsec/vm/library/vulnerability/dfa027f7c037b2f77159adc027fecb56?detection=static\",\"resource_id\":\"ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=\"},{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/appsec/vm/library/vulnerability/36d53183f8fefbbc2208878f3d2011f0?detection=static\",\"resource_id\":\"MzZkNTMxODNmOGZlZmJiYzIyMDg4NzhmM2QyMDExZjB-ZmY5NzUwNDQzYTE0MGIyNDM1MTg4YjkxZDNmMDU4OGU=\"},{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/appsec/vm/library/vulnerability/2e336d846a2745499849778d969b56f8?detection=static\",\"resource_id\":\"MmUzMzZkODQ2YTI3NDU0OTk4NDk3NzhkOTY5YjU2Zjh-YWJjZGI1ODI4OTYzNWM3ZmUwZTBlOWRkYTRiMGUyOGQ=\"}],\"key\":\"CSMINV-459\",\"modified_at\":\"2025-11-19T16:23:22.109092Z\",\"priority\":\"NOT_DEFINED\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"modified_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Attach security findings to a case returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-20T09:54:52.371Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Bulk_export_security_monitoring_rules_returns_OK_response-1768902892", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Bulk_export_security_monitoring_rules_returns_OK_response-1768902892\",\"createdAt\":1768902892769,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"ldv-a2n-sgu\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "ruleIds": [ + "ldv-a2n-sgu" + ] + }, + "type": "security_monitoring_rules_bulk_export" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/bulk_export", + "query": [] + }, + "response": { + "body": { + "encoding": "base64", + "value": "UEsDBBQACAAIANpONFwAAAAAAAAAAAAAAABOAAkAVGVzdC1CdWxrX2V4cG9ydF9zZWN1cml0eV9tb25pdG9yaW5nX3J1bGVzX3JldHVybnNfT0tfcmVzcG9uc2UtMTc2ODkwMjg5Mi5qc29uVVQFAAHsUG9pVJHPbhMxEMZfJfrOrrS0KCQ+QUXhgFAPrcQBqtWwnjijOvbiGZdEUd4d7Spt6c32+Kf5/hyRacfwuGe1i+uWHnvej6Varzy0KnbodyWLlSo59rUl1r6ytZq1v/3WV9axZOWLdx+Wq3V3uVpfwkH0JtPvxAHeamOHP42rsML/PM7nAzw+GqvNczjEWtp4ffginML07cFhS3o7mpRM6evb6YaSskMQNcmD/Q9RjJUjTRg8htKywT1bhEMgo7vS6jDdU4mK04NDmfco/BH8RKnN/A/JofyFX3edQ2DjYXr9zrYtAR62razbkgIcdrS/k5gpfW71vHu1fD9xj8zjpyRPDH+17LqTw0B6DuJVlRpZU3hI3pRJbzHZyEBnVZOxoeQgZ1u0+NW67ooX3ax+x6oUnztcTB3BwSi+BnmzN86Bw71Y4pcA7TCeY+hf/MFhI8m4zvDpXwAAAP//UEsHCNCj/51ZAQAAHwIAAFBLAQIUABQACAAIANpONFzQo/+dWQEAAB8CAABOAAkAAAAAAAAAAAAAAAAAAABUZXN0LUJ1bGtfZXhwb3J0X3NlY3VyaXR5X21vbml0b3JpbmdfcnVsZXNfcmV0dXJuc19PS19yZXNwb25zZS0xNzY4OTAyODkyLmpzb25VVAUAAexQb2lQSwUGAAAAAAEAAQCFAAAA3gEAAAAA" + }, + "headers": { + "content-type": "application/zip" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/ldv-a2n-sgu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Bulk export security monitoring rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:45:58.257Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PATCH", + "path": "/api/v2/siem-historical-detections/jobs/inva-lid/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"detail\":\"invalid jobId\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Cancel a historical job returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:45:58.957Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PATCH", + "path": "/api/v2/siem-historical-detections/jobs/8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Cancel a historical job returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:45:59.561Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jobDefinition": { + "cases": [ + { + "condition": "a > 1", + "name": "Condition 1", + "notifications": [], + "status": "info" + } + ], + "from": 1730387522611, + "index": "main", + "message": "A large number of failed login attempts.", + "name": "Excessive number of failed attempts.", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "query": "source:non_existing_src_weekend" + } + ], + "tags": [], + "to": 1730387532611, + "type": "log_detection" + } + }, + "type": "historicalDetectionsJobCreate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/siem-historical-detections/jobs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"21011d0e-e7e3-49e1-91d4-74d6791382c8\",\"type\":\"historicalDetectionsJob\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PATCH", + "path": "/api/v2/siem-historical-detections/jobs/21011d0e-e7e3-49e1-91d4-74d6791382c8/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Cancel a historical job returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2022-07-06T14:48:57.739Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "incident_ids": [ + 2066 + ] + } + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/signals/AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE/incidents", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"incident_ids\":[2066],\"state_update_user\":{\"handle\":\"bernard.le+synthetics@datadoghq.com\",\"uuid\":\"2514d32c-0719-11eb-b643-63faf7d5e1bd\",\"name\":null,\"id\":2115689,\"icon\":\"https://secure.gravatar.com/avatar/ae546a62b5816be30cc23792a69bd9ee?s=48&d=retro\"},\"assignee\":{\"id\":-1,\"name\":\"Unassigned\",\"uuid\":\"\"},\"state\":\"open\",\"archive_reason\":\"none\",\"state_update_timestamp\":1657118864546},\"type\":\"signal_metadata\",\"id\":\"AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Change the related incidents of a security signal returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2022-07-06T14:49:00.515Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "archive_reason": "none", + "state": "open" + } + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/signals/AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE/state", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"incident_ids\":[2066],\"state_update_user\":{\"handle\":\"bernard.le+synthetics@datadoghq.com\",\"uuid\":\"2514d32c-0719-11eb-b643-63faf7d5e1bd\",\"name\":null,\"id\":2115689,\"icon\":\"https://secure.gravatar.com/avatar/ae546a62b5816be30cc23792a69bd9ee?s=48&d=retro\"},\"assignee\":{\"id\":-1,\"name\":\"Unassigned\",\"uuid\":\"\"},\"state\":\"open\",\"archive_reason\":\"none\",\"state_update_timestamp\":1657118941005},\"type\":\"signal_metadata\",\"id\":\"AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Change the triage state of a security signal returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:46:00.730Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jobResultIds": [ + "" + ], + "notifications": [ + "" + ], + "signalMessage": "A large number of failed login attempts.", + "signalSeverity": "critical" + }, + "type": "historicalDetectionsJobResultSignalConversion" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/siem-historical-detections/jobs/signal_convert", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Generic Error\",\"detail\":\"empty jobResultId provided\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Convert a job result to a signal returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-08-13T20:13:44.192Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "_b87eac89722bbff0", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metric": "", + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/convert", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"terraformContent\":\"resource \\\"datadog_security_monitoring_rule\\\" \\\"_b87eac89722bbff0\\\" {\\n\\tname = \\\"_b87eac89722bbff0\\\"\\n\\tenabled = true\\n\\tquery {\\n\\t\\tquery = \\\"@test:true\\\"\\n\\t\\tgroup_by_fields = []\\n\\t\\thas_optional_group_by_fields = false\\n\\t\\tdistinct_fields = []\\n\\t\\taggregation = \\\"count\\\"\\n\\t\\tname = \\\"\\\"\\n\\t\\tdata_source = \\\"logs\\\"\\n\\t}\\n\\toptions {\\n\\t\\tkeep_alive = 3600\\n\\t\\tmax_signal_duration = 86400\\n\\t\\tdetection_method = \\\"threshold\\\"\\n\\t\\tevaluation_window = 900\\n\\t}\\n\\tcase {\\n\\t\\tname = \\\"\\\"\\n\\t\\tstatus = \\\"info\\\"\\n\\t\\tnotifications = []\\n\\t\\tcondition = \\\"a \\u003e 0\\\"\\n\\t}\\n\\tmessage = \\\"Test rule\\\"\\n\\ttags = []\\n\\thas_extended_title = false\\n\\ttype = \\\"log_detection\\\"\\n}\\n\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Convert a rule from JSON to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-08-13T20:13:44.611Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "_1166a375f2500467", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"_1166a375f2500467\",\"createdAt\":1755116024952,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"shm-tx8-e8x\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/rules/shm-tx8-e8x/convert", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"terraformContent\":\"resource \\\"datadog_security_monitoring_rule\\\" \\\"_1166a375f2500467\\\" {\\n\\tname = \\\"_1166a375f2500467\\\"\\n\\tenabled = true\\n\\tquery {\\n\\t\\tquery = \\\"@test:true\\\"\\n\\t\\tgroup_by_fields = []\\n\\t\\thas_optional_group_by_fields = false\\n\\t\\tdistinct_fields = []\\n\\t\\taggregation = \\\"count\\\"\\n\\t\\tname = \\\"\\\"\\n\\t\\tdata_source = \\\"logs\\\"\\n\\t}\\n\\toptions {\\n\\t\\tkeep_alive = 3600\\n\\t\\tmax_signal_duration = 86400\\n\\t\\tdetection_method = \\\"threshold\\\"\\n\\t\\tevaluation_window = 900\\n\\t}\\n\\tcase {\\n\\t\\tname = \\\"\\\"\\n\\t\\tstatus = \\\"info\\\"\\n\\t\\tnotifications = []\\n\\t\\tcondition = \\\"a \\u003e 0\\\"\\n\\t}\\n\\tmessage = \\\"Test rule\\\"\\n\\ttags = []\\n\\thas_extended_title = false\\n\\ttype = \\\"log_detection\\\"\\n}\\n\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/shm-tx8-e8x", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Convert an existing rule from JSON to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-10T08:55:44.730Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "resource_json": { + "enabled": true, + "name": "Example-Security-Monitoring", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test" + } + }, + "id": "abc-123", + "type": "convert_resource" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/terraform/suppressions/convert", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"datadog_security_monitoring_suppression|abc-123\",\"type\":\"format_resource\",\"attributes\":{\"output\":\"resource \\\"datadog_security_monitoring_suppression\\\" \\\"abc-123\\\" {\\n enabled = true\\n name = \\\"Example-Security-Monitoring\\\"\\n rule_query = \\\"source:cloudtrail\\\"\\n suppression_query = \\\"env:test\\\"\\n}\\n\",\"resource_id\":\"abc-123\",\"type_name\":\"datadog_security_monitoring_suppression\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Convert security monitoring resource to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T17:04:07.979Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "YmNlZmJhYTcyMDU5ZDk0ZDhiNjRmNGI0NDk4MDdiNzN-MDJlMjg0NzNmYzJiODY2MzJkNjU0OTI4NmVhZTUyY2U=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/jira_issues", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"b5b9ee39-29f8-4b84-a878-28e597e2a33f\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2026-01-02T17:04:10.514692Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/csm/vm?query=%40workflow.integrations.cases.id%3A%2A\\u0026vulnerability=bcefbaa72059d94d8b64f4b449807b73\",\"resource_id\":\"YmNlZmJhYTcyMDU5ZDk0ZDhiNjRmNGI0NDk4MDdiNzN-MDJlMjg0NzNmYzJiODY2MzJkNjU0OTI4NmVhZTUyY2U=\"}],\"jira_issue\":{\"status\":\"COMPLETED\",\"result\":{\"issue_id\":\"2523546\",\"issue_key\":\"CSMSEC-105847\",\"issue_url\":\"https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105847\",\"account_id\":\"fdcffa62-24ab-4914-a195-a22bdc607030\"}},\"key\":\"CSMINV-521\",\"modified_at\":\"2026-01-02T17:04:11.504549Z\",\"priority\":\"P4\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "YmNlZmJhYTcyMDU5ZDk0ZDhiNjRmNGI0NDk4MDdiNzN-MDJlMjg0NzNmYzJiODY2MzJkNjU0OTI4NmVhZTUyY2U=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create Jira issue for security finding returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T17:21:33.080Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==", + "type": "findings" + }, + { + "id": "eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/jira_issues", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"527aa591-d40e-4445-be80-9d012ba8397e\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2026-01-02T17:21:34.65318Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/compliance?panels=cpfinding%7Cevent%7CruleId%3Akvh-scm-xyu%7CresourceId%3Ai-05f90f00a848687e8\\u0026query=%40finding_id%3Aa3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA%3D%3D\",\"resource_id\":\"a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==\"},{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/compliance?panels=cpfinding%7Cevent%7CruleId%3Ayk0-blt-afn%7CresourceId%3Ai-024ea8035de550b0a\\u0026query=%40finding_id%3AeWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ%3D%3D\",\"resource_id\":\"eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==\"}],\"jira_issue\":{\"status\":\"COMPLETED\",\"result\":{\"issue_id\":\"2523579\",\"issue_key\":\"CSMSEC-105849\",\"issue_url\":\"https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105849\",\"account_id\":\"fdcffa62-24ab-4914-a195-a22bdc607030\"}},\"key\":\"CSMINV-523\",\"modified_at\":\"2026-01-02T17:21:35.836445Z\",\"priority\":\"P3\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create Jira issue for security findings returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T16:54:04.434Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": {}, + "relationships": { + "findings": { + "data": [] + }, + "project": { + "data": { + "id": "7f198869-c7ef-4afc-97cf-da5cdc13b5c3", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/jira_issues", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"no finding provided\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create Jira issues for security findings returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T17:23:28.665Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + }, + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/jira_issues", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"3f234879-c155-4104-8605-a956c6157fa2\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2026-01-02T17:23:30.862128Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/compliance?panels=cpfinding%7Cevent%7CruleId%3Ayk0-blt-afn%7CresourceId%3Ai-024ea8035de550b0a\\u0026query=%40finding_id%3AeWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ%3D%3D\",\"resource_id\":\"eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==\"}],\"jira_issue\":{\"status\":\"COMPLETED\",\"result\":{\"issue_id\":\"2523584\",\"issue_key\":\"CSMSEC-105851\",\"issue_url\":\"https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105851\",\"account_id\":\"fdcffa62-24ab-4914-a195-a22bdc607030\"}},\"key\":\"CSMINV-524\",\"modified_at\":\"2026-01-02T17:23:32.188706Z\",\"priority\":\"P3\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}},{\"id\":\"55b8c3c1-7080-4e13-b5fc-6bb658609fb7\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2026-01-02T17:23:30.862076Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/compliance?panels=cpfinding%7Cevent%7CruleId%3Akvh-scm-xyu%7CresourceId%3Ai-05f90f00a848687e8\\u0026query=%40finding_id%3Aa3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA%3D%3D\",\"resource_id\":\"a3ZoLXNjbS14eXV-aS0wNWY5MGYwMGE4NDg2ODdlOA==\"}],\"jira_issue\":{\"status\":\"COMPLETED\",\"result\":{\"issue_id\":\"2523583\",\"issue_key\":\"CSMSEC-105850\",\"issue_url\":\"https://datadoghq-sandbox-538.atlassian.net/browse/CSMSEC-105850\",\"account_id\":\"fdcffa62-24ab-4914-a195-a22bdc607030\"}},\"key\":\"CSMINV-525\",\"modified_at\":\"2026-01-02T17:23:31.898339Z\",\"priority\":\"P3\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "eWswLWJsdC1hZm5-aS0wMjRlYTgwMzVkZTU1MGIwYQ==", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create Jira issues for security findings returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T16:58:53.646Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": {}, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "00000000-0000-0000-0000-000000000000", + "type": "projects" + } + } + }, + "type": "jira_issues" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/jira_issues", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"finding not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create Jira issues for security findings returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:27.362Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "notifications": [ + "channel" + ], + "status": "info" + } + ], + "complianceSignalOptions": { + "userActivationStatus": true, + "userGroupByFields": [ + "@account_id" + ] + }, + "filters": [ + { + "action": "require", + "query": "resource_id:helo*" + }, + { + "action": "suppress", + "query": "control:helo*" + } + ], + "isEnabled": false, + "message": "ddd", + "name": "Test-Create_a_cloud_configuration_rule_returns_OK_response-1715358867_cloud", + "options": { + "complianceRuleOptions": { + "complexRule": false, + "regoRule": { + "policy": "package datadog\n\nimport data.datadog.output as dd_output\n\nimport future.keywords.contains\nimport future.keywords.if\nimport future.keywords.in\n\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\n\neval(iam_service_account_key) = \"skip\" if {\n\tiam_service_account_key.disabled\n} else = \"pass\" if {\n\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\n} else = \"fail\"\n\n# This part remains unchanged for all rules\nresults contains result if {\n\tsome resource in input.resources[input.main_resource_type]\n\tresult := dd_output.format(resource, eval(resource))\n}\n", + "resourceTypes": [ + "gcp_compute_disk" + ] + }, + "resourceType": "gcp_compute_disk" + } + }, + "tags": [ + "my:tag" + ], + "type": "cloud_configuration" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"fy5-crt-9n1\",\"version\":1,\"name\":\"Test-Create_a_cloud_configuration_rule_returns_OK_response-1715358867_cloud\",\"createdAt\":1715358867822,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:gcp_compute_disk\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"gcp_compute_disk\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\\n\\neval(iam_service_account_key) = \\\"skip\\\" if {\\n\\tiam_service_account_key.disabled\\n} else = \\\"pass\\\" if {\\n\\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"gcp_compute_disk\"]},\"complexRule\":false}},\"complianceSignalOptions\":{\"defaultActivationStatus\":null,\"defaultGroupByFields\":null,\"userActivationStatus\":true,\"userGroupByFields\":[\"@account_id\"]},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[\"channel\"],\"condition\":\"a > 0\"}],\"message\":\"ddd\",\"tags\":[\"my:tag\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[{\"action\":\"require\",\"query\":\"resource_id:helo*\"},{\"action\":\"suppress\",\"query\":\"control:helo*\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/fy5-crt-9n1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a cloud_configuration rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-07-10T15:48:20.043Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "query": "host:testcreateacriticalassetreturnsokresponse1783698500", + "rule_query": "type:(log_detection OR signal_correlation OR workload_security OR application_security) source:cloudtrail", + "severity": "decrease", + "tags": [ + "team:security", + "env:test" + ] + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/critical_assets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"46d617c7-fba8-49f5-9274-dca43a6a97a5\",\"type\":\"critical_assets\",\"attributes\":{\"creation_author_id\":2320499,\"creation_date\":1783698500440,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"editable\":true,\"enabled\":true,\"query\":\"host:testcreateacriticalassetreturnsokresponse1783698500\",\"rule_query\":\"type:(log_detection OR signal_correlation OR workload_security OR application_security) source:cloudtrail\",\"severity\":\"decrease\",\"tags\":[\"team:security\",\"env:test\"],\"update_author_id\":2320499,\"update_date\":1783698500440,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/critical_assets/46d617c7-fba8-49f5-9274-dca43a6a97a5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a critical asset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-04-22T19:24:37.090Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cloud_security_management/custom_frameworks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"input_validation_error(Field 'data.attributes.handle' is invalid: field 'handle' must not be empty)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a custom framework returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-04-22T19:27:16.633Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cloud_security_management/custom_frameworks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"handle\":\"create-framework-new\",\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cloud_security_management/custom_frameworks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Status Conflict\",\"detail\":\"already_exists(Framework 'create-framework-new' already existed)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cloud_security_management/custom_frameworks/create-framework-new/10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"created_at\":1744297581542,\"created_by\":\"frog@datadoghq.com\",\"description\":\"\",\"handle\":\"create-framework-new\",\"icon_url\":\"test-url\",\"modified_at\":1745349916258,\"name\":\"name\",\"org_id\":321813,\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a custom framework returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-04-22T20:53:54.694Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cloud_security_management/custom_frameworks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"handle\":\"create-framework-new\",\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cloud_security_management/custom_frameworks/create-framework-new/10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"created_at\":1744297581542,\"created_by\":\"team-intg-tools-libs-spam@datadoghq.com\",\"description\":\"\",\"handle\":\"create-framework-new\",\"icon_url\":\"test-url\",\"modified_at\":1745353074397,\"name\":\"name\",\"org_id\":321813,\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a custom framework returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:28.308Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "status": "info" + } + ], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Create_a_detection_rule_returns_Bad_Request_response-1715358868", + "options": {}, + "queries": [ + { + "query": "" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid rule configuration\",\"Query filter cannot be empty\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a detection rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-09-11T18:14:46.491Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Create_a_detection_rule_returns_OK_response-1726078486", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metric": "", + "query": "@test:true" + } + ], + "referenceTables": [ + { + "checkPresence": true, + "columnName": "value", + "logFieldPath": "testtag", + "ruleQueryName": "a", + "tableName": "synthetics_test_reference_table_dont_delete" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"5br-mto-gse\",\"version\":1,\"name\":\"Test-Create_a_detection_rule_returns_OK_response-1726078486\",\"createdAt\":1726078486689,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"referenceTables\":[{\"tableName\":\"synthetics_test_reference_table_dont_delete\",\"columnName\":\"value\",\"logFieldPath\":\"testtag\",\"checkPresence\":true,\"ruleQueryName\":\"a\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/5br-mto-gse", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-16T15:19:00.493Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0.995", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "An anomaly detection rule", + "name": "Test-Create_a_detection_rule_with_detection_method_anomaly_detection_returns_OK_response-1765898340", + "options": { + "anomalyDetectionOptions": { + "bucketDuration": 300, + "detectionTolerance": 3, + "learningDuration": 24, + "learningPeriodBaseline": 10 + }, + "detectionMethod": "anomaly_detection", + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [ + "@usr.email", + "@network.client.ip" + ], + "hasOptionalGroupByFields": false, + "name": "", + "query": "service:app status:error" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Create_a_detection_rule_with_detection_method_anomaly_detection_returns_OK_response-1765898340\",\"createdAt\":1765898340611,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"service:app status:error\",\"groupByFields\":[\"@usr.email\",\"@network.client.ip\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":1800,\"detectionMethod\":\"anomaly_detection\",\"maxSignalDuration\":86400,\"keepAlive\":3600,\"anomalyDetectionOptions\":{\"bucketDuration\":300,\"learningDuration\":24,\"detectionTolerance\":3,\"instantaneousBaseline\":false,\"instantaneousBaselineTimeoutMinutes\":30,\"learningPeriodBaseline\":10}},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0.995\"}],\"message\":\"An anomaly detection rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"0vk-kph-3ri\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/0vk-kph-3ri", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule with detection method 'anomaly_detection' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-02-10T14:48:33.727Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0.995", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "An anomaly detection rule", + "name": "Test-Create_a_detection_rule_with_detection_method_anomaly_detection_with_enabled_feature_instantaneousBa-1770734913", + "options": { + "anomalyDetectionOptions": { + "bucketDuration": 300, + "detectionTolerance": 3, + "instantaneousBaseline": true, + "learningDuration": 24 + }, + "detectionMethod": "anomaly_detection", + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [ + "@usr.email", + "@network.client.ip" + ], + "hasOptionalGroupByFields": false, + "name": "", + "query": "service:app status:error" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Create_a_detection_rule_with_detection_method_anomaly_detection_with_enabled_feature_instantaneousBa-1770734913\",\"createdAt\":1770734914087,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"service:app status:error\",\"groupByFields\":[\"@usr.email\",\"@network.client.ip\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":1800,\"detectionMethod\":\"anomaly_detection\",\"maxSignalDuration\":86400,\"keepAlive\":3600,\"anomalyDetectionOptions\":{\"bucketDuration\":300,\"learningDuration\":24,\"detectionTolerance\":3,\"instantaneousBaseline\":true,\"instantaneousBaselineTimeoutMinutes\":30}},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0.995\"}],\"message\":\"An anomaly detection rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"mtt-vs9-dyl\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/mtt-vs9-dyl", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule with detection method 'anomaly_detection' with enabled feature 'instantaneousBaseline' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-09-12T15:45:55.719Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "step_b > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "isEnabled": true, + "message": "Logs and signals asdf", + "name": "Test-Create_a_detection_rule_with_detection_method_sequence_detection_returns_OK_response-1757691955", + "options": { + "detectionMethod": "sequence_detection", + "evaluationWindow": 0, + "keepAlive": 300, + "maxSignalDuration": 600, + "sequenceDetectionOptions": { + "stepTransitions": [ + { + "child": "step_b", + "evaluationWindow": 900, + "parent": "step_a" + } + ], + "steps": [ + { + "condition": "a > 0", + "evaluationWindow": 60, + "name": "step_a" + }, + { + "condition": "b > 0", + "evaluationWindow": 60, + "name": "step_b" + } + ] + } + }, + "queries": [ + { + "aggregation": "count", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [], + "hasOptionalGroupByFields": false, + "name": "", + "query": "service:logs-rule-reducer source:paul test2" + }, + { + "aggregation": "count", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [], + "hasOptionalGroupByFields": false, + "name": "", + "query": "service:logs-rule-reducer source:paul test1" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Create_a_detection_rule_with_detection_method_sequence_detection_returns_OK_response-1757691955\",\"createdAt\":1757691955862,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"service:logs-rule-reducer source:paul test2\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"},{\"query\":\"service:logs-rule-reducer source:paul test1\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":0,\"detectionMethod\":\"sequence_detection\",\"maxSignalDuration\":600,\"keepAlive\":300,\"sequenceDetectionOptions\":{\"steps\":[{\"name\":\"step_a\",\"condition\":\"a \\u003e 0\",\"evaluationWindow\":60},{\"name\":\"step_b\",\"condition\":\"b \\u003e 0\",\"evaluationWindow\":60}],\"stepTransitions\":[{\"parent\":\"step_a\",\"child\":\"step_b\",\"evaluationWindow\":900}]}},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"step_b \\u003e 0\"}],\"message\":\"Logs and signals asdf\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"k0l-txb-xxx\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/k0l-txb-xxx", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule with detection method 'sequence_detection' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-09-04T13:32:10.858Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [], + "isEnabled": true, + "message": "This is a third party rule", + "name": "Test-Create_a_detection_rule_with_detection_method_third_party_returns_OK_response-1725456730", + "options": { + "detectionMethod": "third_party", + "keepAlive": 0, + "maxSignalDuration": 600, + "thirdPartyRuleOptions": { + "defaultStatus": "info", + "rootQueries": [ + { + "groupByFields": [ + "instance-id" + ], + "query": "source:guardduty @details.alertType:*EC2*" + }, + { + "groupByFields": [], + "query": "source:guardduty" + } + ] + } + }, + "queries": [], + "thirdPartyCases": [ + { + "name": "high", + "query": "status:error", + "status": "high" + }, + { + "name": "low", + "query": "status:info", + "status": "low" + } + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"rvf-kfc-pxh\",\"version\":1,\"name\":\"Test-Create_a_detection_rule_with_detection_method_third_party_returns_OK_response-1725456730\",\"createdAt\":1725456731210,\"creationAuthorId\":1445416,\"isDefault\":false,\"isEnabled\":true,\"isDeleted\":false,\"queries\":[{\"query\":\"status:error\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"none\",\"name\":\"\"},{\"query\":\"status:info\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"none\",\"name\":\"\"}],\"options\":{\"keepAlive\":0,\"maxSignalDuration\":600,\"detectionMethod\":\"third_party\",\"evaluationWindow\":0,\"thirdPartyRuleOptions\":{\"defaultStatus\":\"info\",\"defaultNotifications\":[],\"rootQueries\":[{\"query\":\"source:guardduty @details.alertType:*EC2*\",\"groupByFields\":[\"instance-id\"]},{\"query\":\"source:guardduty\",\"groupByFields\":[]}]}},\"cases\":[{\"name\":\"high\",\"status\":\"high\",\"notifications\":[]},{\"name\":\"low\",\"status\":\"low\",\"notifications\":[]}],\"message\":\"This is a third party rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"thirdPartyCases\":[{\"name\":\"high\",\"status\":\"high\",\"notifications\":[],\"query\":\"status:error\"},{\"name\":\"low\",\"status\":\"low\",\"notifications\":[],\"query\":\"status:info\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/rvf-kfc-pxh", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule with detection method 'third_party' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-07-17T10:35:24.061Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "actions": [ + { + "options": { + "duration": 900 + }, + "type": "block_ip" + }, + { + "options": { + "userBehaviorName": "behavior" + }, + "type": "user_behavior" + }, + { + "options": { + "flaggedIPType": "FLAGGED" + }, + "type": "flag_ip" + } + ], + "condition": "a > 100000", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "groupSignalsBy": [ + "service" + ], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Create_a_detection_rule_with_type_application_security_returns_OK_response-1752748524_appsec_rule", + "options": { + "detectionMethod": "threshold", + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "service", + "@http.client_ip" + ], + "query": "@appsec.security_activity:business_logic.users.login.failure" + } + ], + "tags": [], + "type": "application_security" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Create_a_detection_rule_with_type_application_security_returns_OK_response-1752748524_appsec_rule\",\"createdAt\":1752748524806,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@appsec.security_activity:business_logic.users.login.failure\",\"groupByFields\":[\"service\",\"@http.client_ip\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"app_sec_spans\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 100000\",\"actions\":[{\"type\":\"block_ip\",\"options\":{\"duration\":900}},{\"type\":\"user_behavior\",\"options\":{\"userBehaviorName\":\"behavior\"}},{\"type\":\"flag_ip\",\"options\":{\"flaggedIPType\":\"FLAGGED\"}}]}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"application_security\",\"filters\":[],\"version\":1,\"id\":\"wgo-lgy-ajy\",\"blocking\":true,\"groupSignalsBy\":[\"service\"],\"dependencies\":[\"business_logic.users.login.failure\"],\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":2320499,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/wgo-lgy-ajy", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule with type 'application_security 'returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-20T15:12:27.397Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "test", + "name": "Test-Create_a_detection_rule_with_type_impossible_travel_and_baselineUserLocationsDuration_returns_OK_res-1779289947", + "options": { + "detectionMethod": "impossible_travel", + "evaluationWindow": 900, + "impossibleTravelOptions": { + "baselineUserLocations": true, + "baselineUserLocationsDuration": 7 + }, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "geo_data", + "distinctFields": [], + "groupByFields": [ + "@usr.id" + ], + "metric": "@network.client.geoip", + "query": "*" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Create_a_detection_rule_with_type_impossible_travel_and_baselineUserLocationsDuration_returns_OK_res-1779289947\",\"createdAt\":1779289949181,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"*\",\"groupByFields\":[\"@usr.id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"metric\":\"@network.client.geoip\",\"metrics\":[\"@network.client.geoip\"],\"aggregation\":\"geo_data\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"impossible_travel\",\"maxSignalDuration\":86400,\"keepAlive\":3600,\"impossibleTravelOptions\":{\"baselineUserLocations\":true,\"baselineUserLocationsDuration\":7,\"detectIpTransition\":false}},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[]}],\"message\":\"test\",\"tags\":[],\"hasExtendedTitle\":true,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"v2k-viu-svz\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":2320499,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/v2k-viu-svz", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule with type 'impossible_travel' and baselineUserLocationsDuration returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:30.285Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "test", + "name": "Test-Create_a_detection_rule_with_type_impossible_travel_returns_OK_response-1715358870", + "options": { + "detectionMethod": "impossible_travel", + "evaluationWindow": 900, + "impossibleTravelOptions": { + "baselineUserLocations": false + }, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "geo_data", + "distinctFields": [], + "groupByFields": [ + "@usr.id" + ], + "metric": "@network.client.geoip", + "query": "*" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"u5e-13b-jgh\",\"version\":1,\"name\":\"Test-Create_a_detection_rule_with_type_impossible_travel_returns_OK_response-1715358870\",\"createdAt\":1715358870563,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"*\",\"groupByFields\":[\"@usr.id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"metric\":\"@network.client.geoip\",\"metrics\":[\"@network.client.geoip\"],\"aggregation\":\"geo_data\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"impossible_travel\",\"evaluationWindow\":900,\"impossibleTravelOptions\":{\"baselineUserLocations\":false}},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[]}],\"message\":\"test\",\"tags\":[],\"hasExtendedTitle\":true,\"type\":\"log_detection\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/u5e-13b-jgh", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule with type 'impossible_travel' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:31.015Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Create_a_detection_rule_with_type_signal_correlation_returns_OK_response-1715358871", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"gl8-lry-akp\",\"version\":1,\"name\":\"Test-Create_a_detection_rule_with_type_signal_correlation_returns_OK_response-1715358871\",\"createdAt\":1715358871390,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule Bis", + "name": "Test-Create_a_detection_rule_with_type_signal_correlation_returns_OK_response-1715358871_bis", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:false" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"j2a-wag-ngu\",\"version\":1,\"name\":\"Test-Create_a_detection_rule_with_type_signal_correlation_returns_OK_response-1715358871_bis\",\"createdAt\":1715358871759,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:false\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule Bis\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0 && b > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test signal correlation rule", + "name": "Test-Create_a_detection_rule_with_type_signal_correlation_returns_OK_response-1715358871_signal_rule", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "event_count", + "correlatedByFields": [ + "host" + ], + "correlatedQueryIndex": 1, + "ruleId": "gl8-lry-akp" + }, + { + "aggregation": "event_count", + "correlatedByFields": [ + "host" + ], + "ruleId": "j2a-wag-ngu" + } + ], + "tags": [], + "type": "signal_correlation" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"x0w-iu0-izf\",\"version\":1,\"name\":\"Test-Create_a_detection_rule_with_type_signal_correlation_returns_OK_response-1715358871_signal_rule\",\"createdAt\":1715358872108,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"event_count\",\"name\":\"\",\"ruleId\":\"gl8-lry-akp\",\"correlatedByFields\":[\"host\"],\"correlatedQueryIndex\":1},{\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"event_count\",\"name\":\"\",\"ruleId\":\"j2a-wag-ngu\",\"correlatedByFields\":[\"host\"]}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0 && b > 0\"}],\"message\":\"Test signal correlation rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"signal_correlation\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/x0w-iu0-izf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/j2a-wag-ngu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/gl8-lry-akp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule with type 'signal_correlation' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:33.405Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Create_a_detection_rule_with_type_workload_security_returns_OK_response-1715358873", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metric": "", + "query": "@test:true" + } + ], + "tags": [], + "type": "workload_security" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"rnw-pi4-anb\",\"version\":1,\"name\":\"Test-Create_a_detection_rule_with_type_workload_security_returns_OK_response-1715358873\",\"createdAt\":1715358873922,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"workload_security\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/rnw-pi4-anb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a detection rule with type 'workload_security' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:00.178Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "due_days_per_severity": [ + { + "due_in_days": 7, + "severity": "critical" + } + ], + "due_from": "first_seen" + }, + "enabled": true, + "name": "Test-Create_a_due_date_rule_returns_Successfully_created_the_due_date_rule_response-1781624460", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "due_date_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/due_date_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"51eb64b5-a519-408a-961a-137e4fe31d3c\",\"type\":\"due_date_rules\",\"attributes\":{\"action\":{\"due_days_per_severity\":[{\"severity\":\"critical\",\"due_in_days\":7}],\"due_from\":\"first_seen\"},\"created_at\":1781624462372,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624462372,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Create_a_due_date_rule_returns_Successfully_created_the_due_date_rule_response-1781624460\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/due_date_rules/51eb64b5-a519-408a-961a-137e4fe31d3c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a due date rule returns \"Successfully created the due date rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:02.989Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "reason": "risk_accepted" + }, + "enabled": true, + "name": "Test-Create_a_mute_rule_returns_Successfully_created_the_mute_rule_response-1781624462", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "mute_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/mute_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a23423e0-da14-4698-9c01-7897eb56b76c\",\"type\":\"mute_rules\",\"attributes\":{\"action\":{\"reason\":\"risk_accepted\"},\"created_at\":1781624463227,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624463227,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Create_a_mute_rule_returns_Successfully_created_the_mute_rule_response-1781624462\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/mute_rules/a23423e0-da14-4698-9c01-7897eb56b76c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a mute rule returns \"Successfully created the mute rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:45:37.454Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/signals/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"hvb-for-lpm\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763137979,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763137979,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Rule 1\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"(source:production_service OR env:prod)\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@john.doe@email.com\"],\"time_aggregation\":86400,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/signals/notification_rules/hvb-for-lpm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new signal-based notification rule returns \"Successfully created the notification rule.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:45:38.493Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/vulnerabilities/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"iwz-k3b-tpk\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763138982,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763138982,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Rule 1\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"(source:production_service OR env:prod)\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@john.doe@email.com\"],\"time_aggregation\":86400,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/vulnerabilities/notification_rules/iwz-k3b-tpk", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new vulnerability-based notification rule returns \"Successfully created the notification rule.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-16T13:47:18.057Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Create_a_new_vulnerability_based_notification_rule_with_sast_and_secret_rule_types_returns_Successfu-1776347238", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "sast_vulnerability", + "secret_vulnerability" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/vulnerabilities/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"exz-ipg-n1m\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1776347239287,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"enabled\":true,\"modified_at\":1776347239287,\"modified_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"name\":\"Test-Create_a_new_vulnerability_based_notification_rule_with_sast_and_secret_rule_types_returns_Successfu-1776347238\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"sast_vulnerability\",\"secret_vulnerability\"],\"query\":\"(source:production_service OR env:prod)\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@john.doe@email.com\"],\"time_aggregation\":86400,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/vulnerabilities/notification_rules/exz-ipg-n1m", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a new vulnerability-based notification rule with sast and secret rule types returns \"Successfully created the notification rule.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-10-13T21:11:45.641Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Create_a_scheduled_detection_rule_returns_OK_response-1760389905", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "indexes": [ + "main" + ], + "query": "@test:true" + } + ], + "schedulingOptions": { + "rrule": "FREQ=HOURLY;INTERVAL=2;", + "start": "2025-06-18T12:00:00", + "timezone": "Europe/Paris" + }, + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Create_a_scheduled_detection_rule_returns_OK_response-1760389905\",\"createdAt\":1760389906051,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\",\"index\":\"main\",\"indexes\":[\"main\"]}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"vgs-rrg-orf\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"},\"schedulingOptions\":{\"rrule\":\"FREQ=HOURLY;INTERVAL=2;\",\"start\":\"2025-06-18T12:00:00\",\"timezone\":\"Europe/Paris\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/vgs-rrg-orf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a scheduled detection rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-10-13T21:12:46.212Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Create_a_scheduled_rule_without_rrule_returns_Bad_Request_response-1760389966", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "indexes": [ + "main" + ], + "query": "@test:true" + } + ], + "schedulingOptions": { + "start": "2025-06-18T12:00:00", + "timezone": "Europe/Paris" + }, + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"error\":{\"code\":\"InvalidArgument\",\"message\":\"Invalid rule configuration\",\"details\":[{\"code\":\"InvalidArgument\",\"message\":\"The RRULE schedule is invalid for scheduled rules\",\"target\":\"schedulingOptions.rrule\"}]}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a scheduled rule without rrule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:34.465Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclusion_filters": [ + { + "name": "Exclude staging", + "query": "source:staging" + } + ], + "filtered_data_type": "logs", + "is_enabled": true, + "name": "Test-Create_a_security_filter_returns_OK_response-1715358874", + "query": "service:TestCreateasecurityfilterreturnsOKresponse1715358874" + }, + "type": "security_filters" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/security_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dfl-euq-jxj\",\"attributes\":{\"version\":1,\"name\":\"Test-Create_a_security_filter_returns_OK_response-1715358874\",\"query\":\"service:TestCreateasecurityfilterreturnsOKresponse1715358874\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/security_filters/dfl-euq-jxj", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a security filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-07T12:27:25.514Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "This rule suppresses low-severity signals in staging environments.", + "enabled": true, + "expiration_date": 1764332845000, + "name": "Test-Create_a_suppression_rule_returns_OK_response-1762518445", + "rule_query": "type:log_detection source:cloudtrail", + "start_date": 1763382445000, + "suppression_query": "env:staging status:low", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"oxk-jlo-pc8\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1762518446390,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"This rule suppresses low-severity signals in staging environments.\",\"editable\":true,\"enabled\":true,\"expiration_date\":1764332845000,\"name\":\"Test-Create_a_suppression_rule_returns_OK_response-1762518445\",\"rule_query\":\"type:log_detection source:cloudtrail\",\"start_date\":1763382445000,\"suppression_query\":\"env:staging status:low\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1762518446390,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/oxk-jlo-pc8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a suppression rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-11-27T15:24:35.169Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "data_exclusion_query": "account_id:12345", + "description": "This rule suppresses low-severity signals in staging environments.", + "enabled": true, + "expiration_date": 1734535475000, + "name": "Test-Create_a_suppression_rule_with_an_exclusion_query_returns_OK_response-1732721075", + "rule_query": "type:log_detection source:cloudtrail", + "start_date": 1733585075000 + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"rv5-3sh-tvp\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1732721075298,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"\"},\"data_exclusion_query\":\"account_id:12345\",\"description\":\"This rule suppresses low-severity signals in staging environments.\",\"editable\":true,\"enabled\":true,\"expiration_date\":1734535475000,\"name\":\"Test-Create_a_suppression_rule_with_an_exclusion_query_returns_OK_response-1732721075\",\"rule_query\":\"type:log_detection source:cloudtrail\",\"start_date\":1733585075000,\"suppression_query\":\"\",\"update_date\":1732721075298,\"updater\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/rv5-3sh-tvp", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a suppression rule with an exclusion query returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:03.837Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "max_tickets_per_day": 10, + "project_id": "11111111-1111-1111-1111-111111111111", + "target": "jira" + }, + "enabled": true, + "name": "Test-Create_a_ticket_creation_rule_returns_Successfully_created_the_ticket_creation_rule_response-1781624463", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "ticket_creation_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/ticket_creation_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c24fb7cb-e877-491e-ae6e-2e8676b20dcb\",\"type\":\"ticket_creation_rules\",\"attributes\":{\"action\":{\"project_id\":\"11111111-1111-1111-1111-111111111111\",\"target\":\"jira\",\"max_tickets_per_day\":10},\"created_at\":1781624464096,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624464096,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Create_a_ticket_creation_rule_returns_Successfully_created_the_ticket_creation_rule_response-1781624463\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/c24fb7cb-e877-491e-ae6e-2e8676b20dcb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a ticket creation rule returns \"Successfully created the ticket creation rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-12T14:46:23.960Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"42905bad-351b-4c81-94c1-f3374e861f23\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2025-12-12T14:46:27.55028Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/csm/vm?vulnerability=b7a4377d251cbe0a6747a184a96b8909\",\"resource_id\":\"YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=\"}],\"key\":\"CSMINV-506\",\"priority\":\"NOT_DEFINED\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create case for security finding returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-12T14:49:04.977Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZTd5LWNuYi1seWV-aS0wMjI2NGZjZjRmZWQ5ODMyMg==", + "type": "findings" + }, + { + "id": "c2FuLXhyaS1kZnN-aS0wODM3MjVhMTM2MDExNzNkOQ==", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"6e5599c0-181f-4066-a44d-056bedafd639\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2025-12-12T14:49:06.574693Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/compliance?panels=cpfinding%7Cevent%7CruleId%3Ae7y-cnb-lye%7CresourceId%3Ai-02264fcf4fed98322\\u0026query=%40finding_id%3AZTd5LWNuYi1seWV-aS0wMjI2NGZjZjRmZWQ5ODMyMg%3D%3D\",\"resource_id\":\"ZTd5LWNuYi1seWV-aS0wMjI2NGZjZjRmZWQ5ODMyMg==\"},{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/compliance?panels=cpfinding%7Cevent%7CruleId%3Asan-xri-dfs%7CresourceId%3Ai-083725a13601173d9\\u0026query=%40finding_id%3Ac2FuLXhyaS1kZnN-aS0wODM3MjVhMTM2MDExNzNkOQ%3D%3D\",\"resource_id\":\"c2FuLXhyaS1kZnN-aS0wODM3MjVhMTM2MDExNzNkOQ==\"}],\"key\":\"CSMINV-509\",\"priority\":\"NOT_DEFINED\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "ZTd5LWNuYi1seWV-aS0wMjI2NGZjZjRmZWQ5ODMyMg==", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create case for security findings returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-19T13:46:49.148Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": {}, + "relationships": { + "findings": { + "data": [] + }, + "project": { + "data": { + "id": "7f198869-c7ef-4afc-97cf-da5cdc13b5c3", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"no finding provided\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create cases for security findings returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-12T14:47:03.612Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "cases" + }, + { + "attributes": { + "description": "A description", + "title": "A title" + }, + "relationships": { + "findings": { + "data": [ + { + "id": "OGRlMDIwYzk4MjFmZTZiNTQwMzk2ZjUxNzg0MDc0NjR-MTk3Yjk4MDI4ZDQ4YzI2ZGZiMWJmMTNhNDEwZGZkYWI=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "959a6f71-bac8-4027-b1d3-2264f569296f", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"a12c9894-ba42-408e-b4bf-b8944ca203c1\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2025-12-12T14:47:06.96093Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/csm/vm?vulnerability=b7a4377d251cbe0a6747a184a96b8909\",\"resource_id\":\"YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=\"}],\"key\":\"CSMINV-508\",\"priority\":\"NOT_DEFINED\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}},{\"id\":\"72589c11-2e4c-4592-8ab6-dcdddd176236\",\"type\":\"cases\",\"attributes\":{\"created_at\":\"2025-12-12T14:47:06.960652Z\",\"creation_source\":\"CS_SECURITY_FINDING\",\"description\":\"A description\",\"insights\":[{\"type\":\"SECURITY_FINDING\",\"ref\":\"/security/csm/vm?vulnerability=8de020c9821fe6b540396f5178407464\",\"resource_id\":\"OGRlMDIwYzk4MjFmZTZiNTQwMzk2ZjUxNzg0MDc0NjR-MTk3Yjk4MDI4ZDQ4YzI2ZGZiMWJmMTNhNDEwZGZkYWI=\"}],\"key\":\"CSMINV-507\",\"priority\":\"NOT_DEFINED\",\"status\":\"OPEN\",\"status_group\":\"SG_OPEN\",\"status_name\":\"Open\",\"title\":\"A title\",\"type\":\"SECURITY\"},\"relationships\":{\"created_by\":{\"data\":{\"id\":\"dc09afab-6ae7-11ef-92b1-828dac1b0195\",\"type\":\"users\"}},\"project\":{\"data\":{\"id\":\"959a6f71-bac8-4027-b1d3-2264f569296f\",\"type\":\"projects\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "YjdhNDM3N2QyNTFjYmUwYTY3NDdhMTg0YTk2Yjg5MDl-ZjNmMzAwOTFkZDNhNGQzYzI0MzgxNTk4MjRjZmE2NzE=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create cases for security findings returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-19T13:47:19.797Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": {}, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGZhMDI3ZjdjMDM3YjJmNzcxNTlhZGMwMjdmZWNiNTZ-MTVlYTNmYWU3NjNlOTNlYTE2YjM4N2JmZmI4Yjk5N2Y=", + "type": "findings" + } + ] + }, + "project": { + "data": { + "id": "00000000-0000-0000-0000-000000000000", + "type": "projects" + } + } + }, + "type": "cases" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"project not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create cases for security findings returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-05T12:20:47.940Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "indicator": "192.0.2.1", + "triage_state": "invalid_state" + }, + "type": "ioc_triage_state" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/siem/ioc-explorer/triage", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid triage_state\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create or update an indicator triage state returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-05T12:22:26.137Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "indicator": "192.0.2.1", + "triage_state": "reviewed" + }, + "type": "ioc_triage_state" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/siem/ioc-explorer/triage", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2e6eff68-4ffa-4cab-b9bb-d9ce1ef3b42a\",\"type\":\"ioc_triage_state\",\"attributes\":{\"created_at\":\"2026-06-05T12:22:26.488248Z\",\"indicator\":\"192.0.2.1\",\"triage_state\":\"reviewed\",\"triaged_at\":\"2026-06-05T12:22:26.488248Z\",\"triaged_by\":\"dc6535c4-0b70-47aa-9c6a-9b0fc0be3f19\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + } + ], + "scenario": "Create or update an indicator triage state returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T19:09:07.983Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/critical_assets/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Critical asset with ID 00000000-0000-0000-0000-000000000000 not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a critical asset returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-07-10T15:48:20.956Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "query": "security:monitoring", + "rule_query": "source:k9", + "severity": "medium", + "tags": [ + "team:security" + ] + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/critical_assets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5bda0fad-ce07-4921-9227-d0131107724a\",\"type\":\"critical_assets\",\"attributes\":{\"creation_author_id\":2320499,\"creation_date\":1783698501011,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"editable\":true,\"enabled\":true,\"query\":\"security:monitoring\",\"rule_query\":\"source:k9\",\"severity\":\"medium\",\"tags\":[\"team:security\"],\"update_author_id\":2320499,\"update_date\":1783698501011,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/critical_assets/5bda0fad-ce07-4921-9227-d0131107724a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/critical_assets/5bda0fad-ce07-4921-9227-d0131107724a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Critical asset with ID 5bda0fad-ce07-4921-9227-d0131107724a not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a critical asset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-04-28T15:24:28.339Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cloud_security_management/custom_frameworks/handle-does-not-exist/version-does-not-exist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete a custom framework returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-04-28T15:24:37.124Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cloud_security_management/custom_frameworks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"handle\":\"create-framework-new\",\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cloud_security_management/custom_frameworks/create-framework-new/10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"description\":\"\",\"handle\":\"create-framework-new\",\"icon_url\":\"test-url\",\"name\":\"name\",\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cloud_security_management/custom_frameworks/create-framework-new/10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete a custom framework returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:04.669Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "due_days_per_severity": [ + { + "due_in_days": 7, + "severity": "critical" + } + ], + "due_from": "first_seen" + }, + "enabled": true, + "name": "Test-Delete_a_due_date_rule_returns_Rule_successfully_deleted_response-1781624464", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "due_date_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/due_date_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"139c64ad-97f6-4b26-8579-05a2e2792b6c\",\"type\":\"due_date_rules\",\"attributes\":{\"action\":{\"due_days_per_severity\":[{\"severity\":\"critical\",\"due_in_days\":7}],\"due_from\":\"first_seen\"},\"created_at\":1781624464907,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624464907,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Delete_a_due_date_rule_returns_Rule_successfully_deleted_response-1781624464\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/due_date_rules/139c64ad-97f6-4b26-8579-05a2e2792b6c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/due_date_rules/139c64ad-97f6-4b26-8579-05a2e2792b6c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rule does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a due date rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:05.734Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "reason": "risk_accepted" + }, + "enabled": true, + "name": "Test-Delete_a_mute_rule_returns_Rule_successfully_deleted_response-1781624465", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "mute_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/mute_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"03c9e010-5a46-40b2-af26-5ff613828897\",\"type\":\"mute_rules\",\"attributes\":{\"action\":{\"reason\":\"risk_accepted\"},\"created_at\":1781624465962,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624465962,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Delete_a_mute_rule_returns_Rule_successfully_deleted_response-1781624465\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/mute_rules/03c9e010-5a46-40b2-af26-5ff613828897", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/mute_rules/03c9e010-5a46-40b2-af26-5ff613828897", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rule does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a mute rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:37.598Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclusion_filters": [ + { + "name": "Exclude logs from staging", + "query": "source:staging" + } + ], + "filtered_data_type": "logs", + "is_enabled": true, + "name": "Test-Delete_a_security_filter_returns_No_Content_response-1715358877", + "query": "service:TestDeleteasecurityfilterreturnsNoContentresponse1715358877" + }, + "type": "security_filters" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/security_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4ks-yda-fdg\",\"attributes\":{\"version\":1,\"name\":\"Test-Delete_a_security_filter_returns_No_Content_response-1715358877\",\"query\":\"service:TestDeleteasecurityfilterreturnsNoContentresponse1715358877\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/security_filters/4ks-yda-fdg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/security_filters/4ks-yda-fdg", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Security filter with id '4ks-yda-fdg' not found)\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a security filter returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:45:43.873Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/signals/notification_rules/000-000-000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Notification rule with id '000-000-000' not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a signal-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:45:44.348Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Delete_a_signal_based_notification_rule_returns_Rule_successfully_deleted_response-1738763144", + "selectors": { + "query": "env:test", + "rule_types": [ + "signal_correlation" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_signals" + }, + "targets": [ + "@email@email.com" + ] + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/signals/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"x4n-qps-p3w\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763144838,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763144838,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Delete_a_signal_based_notification_rule_returns_Rule_successfully_deleted_response-1738763144\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"signal_correlation\"],\"query\":\"env:test\",\"trigger_source\":\"security_signals\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":0,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/signals/notification_rules/x4n-qps-p3w", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/signals/notification_rules/x4n-qps-p3w", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Notification rule with id 'x4n-qps-p3w' not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a signal-based notification rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-21T15:35:04.231Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Delete_a_suppression_rule_returns_OK_response-1769009704", + "enabled": true, + "name": "suppression cf0b1697c5006472", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9e0-jx9-qxd\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009705137,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Delete_a_suppression_rule_returns_OK_response-1769009704\",\"editable\":true,\"enabled\":true,\"name\":\"suppression cf0b1697c5006472\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009705137,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/9e0-jx9-qxd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/9e0-jx9-qxd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Suppression with ID 9e0-jx9-qxd not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a suppression rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:06.806Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "max_tickets_per_day": 10, + "project_id": "11111111-1111-1111-1111-111111111111", + "target": "jira" + }, + "enabled": true, + "name": "Test-Delete_a_ticket_creation_rule_returns_Rule_successfully_deleted_response-1781624466", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "ticket_creation_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/ticket_creation_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6b2c813c-cd92-4531-b4aa-f79e1194bcb2\",\"type\":\"ticket_creation_rules\",\"attributes\":{\"action\":{\"project_id\":\"11111111-1111-1111-1111-111111111111\",\"target\":\"jira\",\"max_tickets_per_day\":10},\"created_at\":1781624467064,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624467064,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Delete_a_ticket_creation_rule_returns_Rule_successfully_deleted_response-1781624466\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/6b2c813c-cd92-4531-b4aa-f79e1194bcb2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/6b2c813c-cd92-4531-b4aa-f79e1194bcb2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rule does not exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a ticket creation rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:45:46.942Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/vulnerabilities/notification_rules/000-000-000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Notification rule with id '000-000-000' not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a vulnerability-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:45:47.393Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Delete_a_vulnerability_based_notification_rule_returns_Rule_successfully_deleted_response-1738763147", + "selectors": { + "query": "env:test", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@email@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/vulnerabilities/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"p3z-nij-ygf\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763147765,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763147765,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Delete_a_vulnerability_based_notification_rule_returns_Rule_successfully_deleted_response-1738763147\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"env:test\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":86400,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/vulnerabilities/notification_rules/p3z-nij-ygf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/vulnerabilities/notification_rules/p3z-nij-ygf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Notification rule with id 'p3z-nij-ygf' not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a vulnerability-based notification rule returns \"Rule successfully deleted.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:46:01.231Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/siem-historical-detections/jobs/inva-lid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Generic Error\",\"detail\":\"invalid jobId\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete an existing job returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:46:01.667Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/siem-historical-detections/jobs/8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an existing job returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:40.959Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Delete_an_existing_rule_returns_OK_response-1715358880", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"lty-ukr-dll\",\"version\":1,\"name\":\"Test-Delete_an_existing_rule_returns_OK_response-1715358880\",\"createdAt\":1715358881234,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/lty-ukr-dll", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/lty-ukr-dll", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Threat detection rule not found: lty-ukr-dll\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an existing rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-20T16:07:27.292Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "findings": { + "data": [] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"no finding provided\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Detach security findings from their case returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-21T13:41:10.798Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "YzM2MTFjYzcyNmY0Zjg4MTAxZmRlNjQ1MWU1ZGQwYzR-YzI5NzE5Y2Y4MzU4ZjliNzhkNjYxNTY0ODIzZDQ2YTM=", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Detach security findings from their case returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-20T16:06:53.415Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "findings": { + "data": [ + { + "id": "wrong-finding-id", + "type": "findings" + } + ] + } + }, + "type": "cases" + } + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/security/findings/cases", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"finding not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Detach security findings from their case returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-10T08:56:17.310Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Export_security_monitoring_resource_to_Terraform_returns_OK_response-1775811377", + "enabled": true, + "name": "suppression 934620bff161fb60", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"urh-ldl-f7e\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1775811377666,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Export_security_monitoring_resource_to_Terraform_returns_OK_response-1775811377\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 934620bff161fb60\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1775811377666,\"updater\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/terraform/suppressions/urh-ldl-f7e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"datadog_security_monitoring_suppression|urh-ldl-f7e\",\"type\":\"format_resource\",\"attributes\":{\"output\":\"resource \\\"datadog_security_monitoring_suppression\\\" \\\"urh-ldl-f7e\\\" {\\n description = \\\"Test-Export_security_monitoring_resource_to_Terraform_returns_OK_response-1775811377\\\"\\n enabled = true\\n name = \\\"suppression 934620bff161fb60\\\"\\n rule_query = \\\"source:cloudtrail\\\"\\n suppression_query = \\\"env:test\\\"\\n tags = [\\\"source:cloudtrail\\\", \\\"technique:T1110-brute-force\\\"]\\n}\\n\",\"resource_id\":\"urh-ldl-f7e\",\"type_name\":\"datadog_security_monitoring_suppression\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/urh-ldl-f7e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Export security monitoring resource to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-10T08:56:18.628Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Export_security_monitoring_resources_to_Terraform_returns_OK_response-1775811378", + "enabled": true, + "name": "suppression 281e64d265076a2a", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"vgr-gcw-s7m\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1775811378970,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Export_security_monitoring_resources_to_Terraform_returns_OK_response-1775811378\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 281e64d265076a2a\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1775811378970,\"updater\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "resource_ids": [ + "vgr-gcw-s7m" + ] + }, + "type": "bulk_export_resources" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/terraform/suppressions/bulk", + "query": [] + }, + "response": { + "body": { + "encoding": "base64", + "value": "UEsDBBQACAAIAAAAAAAAAAAAAAAAAAAAAAAaAAAAc3VwcHJlc3Npb25fdmdyLWdjdy1zN20udGZsjj1PMzEQhPv7FSvXr6U4L8lFka6koqBJh5Dl2JvD0p33srsORIj/jo4PEVCmfuaZYRSqHBFMChoS9V4wVs569iOVrMS59F7qNDGKZCoGzKln28dnK+1o4LUBSCiR86SZCnymA7NDUXv7MhHrVef3snglv0PmcCAePaNWLuLv72ZioiJoXduuNs79bzemAcAS9gMm+EkHyhUbgBJGhF/pwFych+XG4fomLderRbsOyzD7uA7ojxX5fFn6+LaNA9WkHPIwkxemr0IHBstpqyg6Axp6+bv/cMX1D4xifCr5WHG7c84t7J6roj0QRzSPzVvzHgAA//9QSwcIw6lzsPYAAACZAQAAUEsBAhQAFAAIAAgAAAAAAMOpc7D2AAAAmQEAABoAAAAAAAAAAAAAAAAAAAAAAHN1cHByZXNzaW9uX3Znci1nY3ctczdtLnRmUEsFBgAAAAABAAEASAAAAD4BAAAAAA==" + }, + "headers": { + "content-type": "application/zip" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/vgr-gcw-s7m", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Export security monitoring resources to Terraform returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-20T09:40:32.938Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/sboms/Host", + "query": [ + [ + "filter[asset_name]", + "unknown-host" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Asset not found\",\"detail\":\"asset_type: 'Host' with asset_name: 'unknown-host' not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get SBOM returns \"Not found: asset not found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-10T11:38:04.662Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/sboms/Repository", + "query": [ + [ + "filter[asset_name]", + "github.com/datadog/datadog-agent" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"github.com/datadog/datadog-agent\",\"type\":\"sboms\",\"attributes\":{\"bomFormat\":\"CycloneDX\",\"components\":[{\"bom-ref\":\"pkg:golang/github.com/macabu/inamedparam@0.1.3\",\"type\":\"library\",\"name\":\"github.com/macabu/inamedparam\",\"version\":\"0.1.3\",\"purl\":\"pkg:golang/github.com/macabu/inamedparam@0.1.3\"},{\"bom-ref\":\"pkg:golang/github.com/hetznercloud/hcloud-go/v2@2.10.2\",\"type\":\"library\",\"name\":\"github.com/hetznercloud/hcloud-go/v2\",\"version\":\"2.10.2\",\"purl\":\"pkg:golang/github.com/hetznercloud/hcloud-go/v2@2.10.2\"},{\"bom-ref\":\"pkg:golang/github.com/stretchr/testify@1.9.0\",\"type\":\"library\",\"name\":\"github.com/stretchr/testify\",\"version\":\"1.9.0\",\"purl\":\"pkg:golang/github.com/stretchr/testify@1.9.0\"},{\"bom-ref\":\"pkg:pypi/jinja2@3.1.5\",\"type\":\"library\",\"name\":\"jinja2\",\"version\":\"3.1.5\",\"purl\":\"pkg:pypi/jinja2@3.1.5\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-rootcerts@1.0.2\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-rootcerts\",\"version\":\"1.0.2\",\"purl\":\"pkg:golang/github.com/hashicorp/go-rootcerts@1.0.2\"},{\"bom-ref\":\"pkg:golang/github.com/lufia/plan9stats@0.0.0-20240226150601-1dcf7310316a\",\"type\":\"library\",\"name\":\"github.com/lufia/plan9stats\",\"version\":\"0.0.0-20240226150601-1dcf7310316a\",\"purl\":\"pkg:golang/github.com/lufia/plan9stats@0.0.0-20240226150601-1dcf7310316a\"},{\"bom-ref\":\"pkg:golang/go.etcd.io/etcd/client/v3@3.6.0-alpha.0\",\"type\":\"library\",\"name\":\"go.etcd.io/etcd/client/v3\",\"version\":\"3.6.0-alpha.0\",\"purl\":\"pkg:golang/go.etcd.io/etcd/client/v3@3.6.0-alpha.0\"},{\"bom-ref\":\"pkg:golang/github.com/xanzy/ssh-agent@0.3.3\",\"type\":\"library\",\"name\":\"github.com/xanzy/ssh-agent\",\"version\":\"0.3.3\",\"purl\":\"pkg:golang/github.com/xanzy/ssh-agent@0.3.3\"},{\"bom-ref\":\"pkg:golang/github.com/pelletier/go-toml@1.9.5\",\"type\":\"library\",\"name\":\"github.com/pelletier/go-toml\",\"version\":\"1.9.5\",\"purl\":\"pkg:golang/github.com/pelletier/go-toml@1.9.5\"},{\"bom-ref\":\"pkg:golang/github.com/jedisct1/go-minisign@0.0.0-20230811132847-661be99b8267\",\"type\":\"library\",\"name\":\"github.com/jedisct1/go-minisign\",\"version\":\"0.0.0-20230811132847-661be99b8267\",\"purl\":\"pkg:golang/github.com/jedisct1/go-minisign@0.0.0-20230811132847-661be99b8267\"},{\"bom-ref\":\"pkg:golang/go.uber.org/multierr@1.6.0\",\"type\":\"library\",\"name\":\"go.uber.org/multierr\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/go.uber.org/multierr@1.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/client_golang@1.17.0\",\"type\":\"library\",\"name\":\"github.com/prometheus/client_golang\",\"version\":\"1.17.0\",\"purl\":\"pkg:golang/github.com/prometheus/client_golang@1.17.0\"},{\"bom-ref\":\"pkg:golang/github.com/digitalocean/go-libvirt@0.0.0-20240812180835-9c6c0a310c6c\",\"type\":\"library\",\"name\":\"github.com/digitalocean/go-libvirt\",\"version\":\"0.0.0-20240812180835-9c6c0a310c6c\",\"purl\":\"pkg:golang/github.com/digitalocean/go-libvirt@0.0.0-20240812180835-9c6c0a310c6c\"},{\"bom-ref\":\"pkg:golang/github.com/pgavlin/fx@0.1.6\",\"type\":\"library\",\"name\":\"github.com/pgavlin/fx\",\"version\":\"0.1.6\",\"purl\":\"pkg:golang/github.com/pgavlin/fx@0.1.6\"},{\"bom-ref\":\"pkg:golang/github.com/rs/cors@1.11.1\",\"type\":\"library\",\"name\":\"github.com/rs/cors\",\"version\":\"1.11.1\",\"purl\":\"pkg:golang/github.com/rs/cors@1.11.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/processor/memorylimiterprocessor@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/processor/memorylimiterprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/processor/memorylimiterprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/docker/go-units@0.5.0\",\"type\":\"library\",\"name\":\"github.com/docker/go-units\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/docker/go-units@0.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2@1.34.0\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/stargz-snapshotter/estargz@0.16.3\",\"type\":\"library\",\"name\":\"github.com/containerd/stargz-snapshotter/estargz\",\"version\":\"0.16.3\",\"purl\":\"pkg:golang/github.com/containerd/stargz-snapshotter/estargz@0.16.3\"},{\"bom-ref\":\"pkg:golang/github.com/docker/distribution@2.8.3+incompatible\",\"type\":\"library\",\"name\":\"github.com/docker/distribution\",\"version\":\"2.8.3+incompatible\",\"purl\":\"pkg:golang/github.com/docker/distribution@2.8.3+incompatible\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/extension/zpagesextension@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/extension/zpagesextension\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/extension/zpagesextension@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/errors@0.22.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/errors\",\"version\":\"0.22.0\",\"purl\":\"pkg:golang/github.com/go-openapi/errors@0.22.0\"},{\"bom-ref\":\"pkg:golang/github.com/aquasecurity/tml@0.6.1\",\"type\":\"library\",\"name\":\"github.com/aquasecurity/tml\",\"version\":\"0.6.1\",\"purl\":\"pkg:golang/github.com/aquasecurity/tml@0.6.1\"},{\"bom-ref\":\"pkg:npm/isarray@1.0.0\",\"type\":\"library\",\"name\":\"isarray\",\"version\":\"1.0.0\",\"purl\":\"pkg:npm/isarray@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/google/gofuzz@1.2.0\",\"type\":\"library\",\"name\":\"github.com/google/gofuzz\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/google/gofuzz@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/openvex/go-vex@0.2.5\",\"type\":\"library\",\"name\":\"github.com/openvex/go-vex\",\"version\":\"0.2.5\",\"purl\":\"pkg:golang/github.com/openvex/go-vex@0.2.5\"},{\"bom-ref\":\"pkg:golang/github.com/ldez/gomoddirectives@0.2.4\",\"type\":\"library\",\"name\":\"github.com/ldez/gomoddirectives\",\"version\":\"0.2.4\",\"purl\":\"pkg:golang/github.com/ldez/gomoddirectives@0.2.4\"},{\"bom-ref\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/azcore@1.14.0\",\"type\":\"library\",\"name\":\"github.com/Azure/azure-sdk-for-go/sdk/azcore\",\"version\":\"1.14.0\",\"purl\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/azcore@1.14.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/runtime@0.28.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/runtime\",\"version\":\"0.28.0\",\"purl\":\"pkg:golang/github.com/go-openapi/runtime@0.28.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/semconv@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/semconv\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/semconv@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/mxk/go-flowrate@0.0.0-20140419014527-cca7078d478f\",\"type\":\"library\",\"name\":\"github.com/mxk/go-flowrate\",\"version\":\"0.0.0-20140419014527-cca7078d478f\",\"purl\":\"pkg:golang/github.com/mxk/go-flowrate@0.0.0-20140419014527-cca7078d478f\"},{\"bom-ref\":\"pkg:golang/github.com/google/go-containerregistry@0.20.3\",\"type\":\"library\",\"name\":\"github.com/google/go-containerregistry\",\"version\":\"0.20.3\",\"purl\":\"pkg:golang/github.com/google/go-containerregistry@0.20.3\"},{\"bom-ref\":\"pkg:npm/istanbul-lib-coverage@3.2.0\",\"type\":\"library\",\"name\":\"istanbul-lib-coverage\",\"version\":\"3.2.0\",\"purl\":\"pkg:npm/istanbul-lib-coverage@3.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/cloud.google.com/go/auth/oauth2adapt@0.2.4\",\"type\":\"library\",\"name\":\"cloud.google.com/go/auth/oauth2adapt\",\"version\":\"0.2.4\",\"purl\":\"pkg:golang/cloud.google.com/go/auth/oauth2adapt@0.2.4\"},{\"bom-ref\":\"pkg:golang/github.com/go-git/go-git/v5@5.13.0\",\"type\":\"library\",\"name\":\"github.com/go-git/go-git/v5\",\"version\":\"5.13.0\",\"purl\":\"pkg:golang/github.com/go-git/go-git/v5@5.13.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/processor/xprocessor@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/processor/xprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/processor/xprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/trace@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/trace\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/trace@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/charmbracelet/x/term@0.2.1\",\"type\":\"library\",\"name\":\"github.com/charmbracelet/x/term\",\"version\":\"0.2.1\",\"purl\":\"pkg:golang/github.com/charmbracelet/x/term@0.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/sagikazarmark/locafero@0.4.0\",\"type\":\"library\",\"name\":\"github.com/sagikazarmark/locafero\",\"version\":\"0.4.0\",\"purl\":\"pkg:golang/github.com/sagikazarmark/locafero@0.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/inconshreveable/mousetrap@1.1.0\",\"type\":\"library\",\"name\":\"github.com/inconshreveable/mousetrap\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/inconshreveable/mousetrap@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/ua-parser/uap-go@0.0.0-20240611065828-3a4781585db6\",\"type\":\"library\",\"name\":\"github.com/ua-parser/uap-go\",\"version\":\"0.0.0-20240611065828-3a4781585db6\",\"purl\":\"pkg:golang/github.com/ua-parser/uap-go@0.0.0-20240611065828-3a4781585db6\"},{\"bom-ref\":\"pkg:golang/k8s.io/utils@0.0.0-20240821151609-f90d01438635\",\"type\":\"library\",\"name\":\"k8s.io/utils\",\"version\":\"0.0.0-20240821151609-f90d01438635\",\"purl\":\"pkg:golang/k8s.io/utils@0.0.0-20240821151609-f90d01438635\"},{\"bom-ref\":\"pkg:golang/github.com/philhofer/fwd@1.1.3-0.20240916144458-20a13a1f6b7c\",\"type\":\"library\",\"name\":\"github.com/philhofer/fwd\",\"version\":\"1.1.3-0.20240916144458-20a13a1f6b7c\",\"purl\":\"pkg:golang/github.com/philhofer/fwd@1.1.3-0.20240916144458-20a13a1f6b7c\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/dgryski/go-minhash@0.0.0-20170608043002-7fe510aff544\",\"type\":\"library\",\"name\":\"github.com/dgryski/go-minhash\",\"version\":\"0.0.0-20170608043002-7fe510aff544\",\"purl\":\"pkg:golang/github.com/dgryski/go-minhash@0.0.0-20170608043002-7fe510aff544\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/fifo@1.1.0\",\"type\":\"library\",\"name\":\"github.com/containerd/fifo\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/containerd/fifo@1.1.0\"},{\"bom-ref\":\"pkg:golang/go4.org/unsafe/assume-no-moving-gc@0.0.0-20231121144256-b99613f794b6\",\"type\":\"library\",\"name\":\"go4.org/unsafe/assume-no-moving-gc\",\"version\":\"0.0.0-20231121144256-b99613f794b6\",\"purl\":\"pkg:golang/go4.org/unsafe/assume-no-moving-gc@0.0.0-20231121144256-b99613f794b6\"},{\"bom-ref\":\"pkg:golang/github.com/L3n41c/kube-state-metrics/v2@2.13.1-0.20241119155242-07761b9fe9a0\",\"type\":\"library\",\"name\":\"github.com/L3n41c/kube-state-metrics/v2\",\"version\":\"2.13.1-0.20241119155242-07761b9fe9a0\",\"purl\":\"pkg:golang/github.com/L3n41c/kube-state-metrics/v2@2.13.1-0.20241119155242-07761b9fe9a0\"},{\"bom-ref\":\"pkg:golang/github.com/sirupsen/logrus@1.9.3\",\"type\":\"library\",\"name\":\"github.com/sirupsen/logrus\",\"version\":\"1.9.3\",\"purl\":\"pkg:golang/github.com/sirupsen/logrus@1.9.3\"},{\"bom-ref\":\"pkg:golang/github.com/golang/snappy@0.0.4\",\"type\":\"library\",\"name\":\"github.com/golang/snappy\",\"version\":\"0.0.4\",\"purl\":\"pkg:golang/github.com/golang/snappy@0.0.4\"},{\"bom-ref\":\"pkg:golang/sigs.k8s.io/kustomize/kyaml@0.17.1\",\"type\":\"library\",\"name\":\"sigs.k8s.io/kustomize/kyaml\",\"version\":\"0.17.1\",\"purl\":\"pkg:golang/sigs.k8s.io/kustomize/kyaml@0.17.1\"},{\"bom-ref\":\"pkg:golang/github.com/denis-tingaikin/go-header@0.5.0\",\"type\":\"library\",\"name\":\"github.com/denis-tingaikin/go-header\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/denis-tingaikin/go-header@0.5.0\"},{\"bom-ref\":\"pkg:golang/go-simpler.org/musttag@0.12.2\",\"type\":\"library\",\"name\":\"go-simpler.org/musttag\",\"version\":\"0.12.2\",\"purl\":\"pkg:golang/go-simpler.org/musttag@0.12.2\"},{\"bom-ref\":\"pkg:golang/github.com/montanaflynn/stats@0.7.0\",\"type\":\"library\",\"name\":\"github.com/montanaflynn/stats\",\"version\":\"0.7.0\",\"purl\":\"pkg:golang/github.com/montanaflynn/stats@0.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/ccojocar/zxcvbn-go@1.0.2\",\"type\":\"library\",\"name\":\"github.com/ccojocar/zxcvbn-go\",\"version\":\"1.0.2\",\"purl\":\"pkg:golang/github.com/ccojocar/zxcvbn-go@1.0.2\"},{\"bom-ref\":\"pkg:npm/%40datadog%2Fnative-iast-rewriter@2.4.1\",\"type\":\"library\",\"name\":\"@datadog/native-iast-rewriter\",\"version\":\"2.4.1\",\"purl\":\"pkg:npm/%40datadog%2Fnative-iast-rewriter@2.4.1\"},{\"bom-ref\":\"pkg:golang/github.com/uber/jaeger-lib@2.4.1+incompatible\",\"type\":\"library\",\"name\":\"github.com/uber/jaeger-lib\",\"version\":\"2.4.1+incompatible\",\"purl\":\"pkg:golang/github.com/uber/jaeger-lib@2.4.1+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/moby/docker-image-spec@1.3.1\",\"type\":\"library\",\"name\":\"github.com/moby/docker-image-spec\",\"version\":\"1.3.1\",\"purl\":\"pkg:golang/github.com/moby/docker-image-spec@1.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url@1.9.26\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/internal/presigned-url\",\"version\":\"1.9.26\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url@1.9.26\"},{\"bom-ref\":\"pkg:golang/github.com/csaf-poc/csaf_distribution/v3@3.0.0\",\"type\":\"library\",\"name\":\"github.com/csaf-poc/csaf_distribution/v3\",\"version\":\"3.0.0\",\"purl\":\"pkg:golang/github.com/csaf-poc/csaf_distribution/v3@3.0.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/sys@0.29.0\",\"type\":\"library\",\"name\":\"golang.org/x/sys\",\"version\":\"0.29.0\",\"purl\":\"pkg:golang/golang.org/x/sys@0.29.0\"},{\"bom-ref\":\"pkg:golang/github.com/power-devops/perfstat@0.0.0-20220216144756-c35f1ee13d7c\",\"type\":\"library\",\"name\":\"github.com/power-devops/perfstat\",\"version\":\"0.0.0-20220216144756-c35f1ee13d7c\",\"purl\":\"pkg:golang/github.com/power-devops/perfstat@0.0.0-20220216144756-c35f1ee13d7c\"},{\"bom-ref\":\"pkg:golang/github.com/shirou/gopsutil/v4@4.24.12\",\"type\":\"library\",\"name\":\"github.com/shirou/gopsutil/v4\",\"version\":\"4.24.12\",\"purl\":\"pkg:golang/github.com/shirou/gopsutil/v4@4.24.12\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/ghodss/yaml@1.0.0\",\"type\":\"library\",\"name\":\"github.com/ghodss/yaml\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/ghodss/yaml@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/justincormack/go-memfd@0.0.0-20170219213707-6e4af0518993\",\"type\":\"library\",\"name\":\"github.com/justincormack/go-memfd\",\"version\":\"0.0.0-20170219213707-6e4af0518993\",\"purl\":\"pkg:golang/github.com/justincormack/go-memfd@0.0.0-20170219213707-6e4af0518993\"},{\"bom-ref\":\"pkg:golang/github.com/knadh/koanf/v2@2.1.2\",\"type\":\"library\",\"name\":\"github.com/knadh/koanf/v2\",\"version\":\"2.1.2\",\"purl\":\"pkg:golang/github.com/knadh/koanf/v2@2.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/sivchari/tenv@1.10.0\",\"type\":\"library\",\"name\":\"github.com/sivchari/tenv\",\"version\":\"1.10.0\",\"purl\":\"pkg:golang/github.com/sivchari/tenv@1.10.0\"},{\"bom-ref\":\"pkg:golang/modernc.org/token@1.1.0\",\"type\":\"library\",\"name\":\"modernc.org/token\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/modernc.org/token@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension@0.119.0\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Ffloat@1.0.2\",\"type\":\"library\",\"name\":\"@protobufjs/float\",\"version\":\"1.0.2\",\"purl\":\"pkg:npm/%40protobufjs%2Ffloat@1.0.2\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-retryablehttp@0.7.7\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-retryablehttp\",\"version\":\"0.7.7\",\"purl\":\"pkg:golang/github.com/hashicorp/go-retryablehttp@0.7.7\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/rds@1.90.0\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/rds\",\"version\":\"1.90.0\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/rds@1.90.0\"},{\"bom-ref\":\"pkg:golang/github.com/OpenPeeDeeP/depguard/v2@2.2.0\",\"type\":\"library\",\"name\":\"github.com/OpenPeeDeeP/depguard/v2\",\"version\":\"2.2.0\",\"purl\":\"pkg:golang/github.com/OpenPeeDeeP/depguard/v2@2.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/Djarvur/go-err113@0.0.0-20210108212216-aea10b59be24\",\"type\":\"library\",\"name\":\"github.com/Djarvur/go-err113\",\"version\":\"0.0.0-20210108212216-aea10b59be24\",\"purl\":\"pkg:golang/github.com/Djarvur/go-err113@0.0.0-20210108212216-aea10b59be24\"},{\"bom-ref\":\"pkg:golang/github.com/lasiar/canonicalheader@1.1.1\",\"type\":\"library\",\"name\":\"github.com/lasiar/canonicalheader\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/lasiar/canonicalheader@1.1.1\"},{\"bom-ref\":\"pkg:golang/filippo.io/edwards25519@1.1.0\",\"type\":\"library\",\"name\":\"filippo.io/edwards25519\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/filippo.io/edwards25519@1.1.0\"},{\"bom-ref\":\"pkg:golang/gopkg.in/yaml.v3@3.0.1\",\"type\":\"library\",\"name\":\"gopkg.in/yaml.v3\",\"version\":\"3.0.1\",\"purl\":\"pkg:golang/gopkg.in/yaml.v3@3.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/vibrantbyte/go-antpath@1.1.1\",\"type\":\"library\",\"name\":\"github.com/vibrantbyte/go-antpath\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/vibrantbyte/go-antpath@1.1.1\"},{\"bom-ref\":\"pkg:npm/acorn@8.12.1\",\"type\":\"library\",\"name\":\"acorn\",\"version\":\"8.12.1\",\"purl\":\"pkg:npm/acorn@8.12.1\"},{\"bom-ref\":\"pkg:npm/opentracing@0.14.7\",\"type\":\"library\",\"name\":\"opentracing\",\"version\":\"0.14.7\",\"purl\":\"pkg:npm/opentracing@0.14.7\"},{\"bom-ref\":\"pkg:golang/github.com/bitnami/go-version@0.0.0-20231130084017-bb00604d650c\",\"type\":\"library\",\"name\":\"github.com/bitnami/go-version\",\"version\":\"0.0.0-20231130084017-bb00604d650c\",\"purl\":\"pkg:golang/github.com/bitnami/go-version@0.0.0-20231130084017-bb00604d650c\"},{\"bom-ref\":\"pkg:golang/github.com/aquasecurity/trivy-java-db@0.0.0-20240109071736-184bd7481d48\",\"type\":\"library\",\"name\":\"github.com/aquasecurity/trivy-java-db\",\"version\":\"0.0.0-20240109071736-184bd7481d48\",\"purl\":\"pkg:golang/github.com/aquasecurity/trivy-java-db@0.0.0-20240109071736-184bd7481d48\"},{\"bom-ref\":\"pkg:golang/github.com/godbus/dbus/v5@5.1.0\",\"type\":\"library\",\"name\":\"github.com/godbus/dbus/v5\",\"version\":\"5.1.0\",\"purl\":\"pkg:golang/github.com/godbus/dbus/v5@5.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/envoyproxy/protoc-gen-validate@1.1.0\",\"type\":\"library\",\"name\":\"github.com/envoyproxy/protoc-gen-validate\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/envoyproxy/protoc-gen-validate@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/mostynb/go-grpc-compression@1.2.3\",\"type\":\"library\",\"name\":\"github.com/mostynb/go-grpc-compression\",\"version\":\"1.2.3\",\"purl\":\"pkg:golang/github.com/mostynb/go-grpc-compression@1.2.3\"},{\"bom-ref\":\"pkg:golang/github.com/oklog/ulid@1.3.1\",\"type\":\"library\",\"name\":\"github.com/oklog/ulid\",\"version\":\"1.3.1\",\"purl\":\"pkg:golang/github.com/oklog/ulid@1.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/pmezard/go-difflib@1.0.1-0.20181226105442-5d4384ee4fb2\",\"type\":\"library\",\"name\":\"github.com/pmezard/go-difflib\",\"version\":\"1.0.1-0.20181226105442-5d4384ee4fb2\",\"purl\":\"pkg:golang/github.com/pmezard/go-difflib@1.0.1-0.20181226105442-5d4384ee4fb2\"},{\"bom-ref\":\"pkg:golang/gotest.tools/v3@3.5.1\",\"type\":\"library\",\"name\":\"gotest.tools/v3\",\"version\":\"3.5.1\",\"purl\":\"pkg:golang/gotest.tools/v3@3.5.1\"},{\"bom-ref\":\"pkg:golang/github.com/x448/float16@0.8.4\",\"type\":\"library\",\"name\":\"github.com/x448/float16\",\"version\":\"0.8.4\",\"purl\":\"pkg:golang/github.com/x448/float16@0.8.4\"},{\"bom-ref\":\"pkg:golang/google.golang.org/api@0.199.0\",\"type\":\"library\",\"name\":\"google.golang.org/api\",\"version\":\"0.199.0\",\"purl\":\"pkg:golang/google.golang.org/api@0.199.0\"},{\"bom-ref\":\"pkg:golang/github.com/mitchellh/copystructure@1.2.0\",\"type\":\"library\",\"name\":\"github.com/mitchellh/copystructure\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/mitchellh/copystructure@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/twinj/uuid@0.0.0-20151029044442-89173bcdda19\",\"type\":\"library\",\"name\":\"github.com/twinj/uuid\",\"version\":\"0.0.0-20151029044442-89173bcdda19\",\"purl\":\"pkg:golang/github.com/twinj/uuid@0.0.0-20151029044442-89173bcdda19\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/yagipy/maintidx@1.0.0\",\"type\":\"library\",\"name\":\"github.com/yagipy/maintidx\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/yagipy/maintidx@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/outcaste-io/ristretto@0.2.1\",\"type\":\"library\",\"name\":\"github.com/outcaste-io/ristretto\",\"version\":\"0.2.1\",\"purl\":\"pkg:golang/github.com/outcaste-io/ristretto@0.2.1\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/go-diodes@0.0.0-20240604201846-c756bfed2ed3\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/go-diodes\",\"version\":\"0.0.0-20240604201846-c756bfed2ed3\",\"purl\":\"pkg:golang/code.cloudfoundry.org/go-diodes@0.0.0-20240604201846-c756bfed2ed3\"},{\"bom-ref\":\"pkg:golang/github.com/nxadm/tail@1.4.11\",\"type\":\"library\",\"name\":\"github.com/nxadm/tail\",\"version\":\"1.4.11\",\"purl\":\"pkg:golang/github.com/nxadm/tail@1.4.11\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/appsec-internal-go@1.9.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/appsec-internal-go\",\"version\":\"1.9.0\",\"purl\":\"pkg:golang/github.com/DataDog/appsec-internal-go@1.9.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-go/v5@5.6.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-go/v5\",\"version\":\"5.6.0\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-go/v5@5.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/blang/semver@3.5.1+incompatible\",\"type\":\"library\",\"name\":\"github.com/blang/semver\",\"version\":\"3.5.1+incompatible\",\"purl\":\"pkg:golang/github.com/blang/semver@3.5.1+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/pkg/term@1.1.0\",\"type\":\"library\",\"name\":\"github.com/pkg/term\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/pkg/term@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/golangci/modinfo@0.3.4\",\"type\":\"library\",\"name\":\"github.com/golangci/modinfo\",\"version\":\"0.3.4\",\"purl\":\"pkg:golang/github.com/golangci/modinfo@0.3.4\"},{\"bom-ref\":\"pkg:golang/github.com/google/go-querystring@1.1.0\",\"type\":\"library\",\"name\":\"github.com/google/go-querystring\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/google/go-querystring@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ssooidc@1.28.11\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/ssooidc\",\"version\":\"1.28.11\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ssooidc@1.28.11\"},{\"bom-ref\":\"pkg:golang/github.com/pelletier/go-toml@1.2.0\",\"type\":\"library\",\"name\":\"github.com/pelletier/go-toml\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/pelletier/go-toml@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/matoous/godox@0.0.0-20230222163458-006bad1f9d26\",\"type\":\"library\",\"name\":\"github.com/matoous/godox\",\"version\":\"0.0.0-20230222163458-006bad1f9d26\",\"purl\":\"pkg:golang/github.com/matoous/godox@0.0.0-20230222163458-006bad1f9d26\"},{\"bom-ref\":\"pkg:golang/github.com/smartystreets/assertions@1.1.0\",\"type\":\"library\",\"name\":\"github.com/smartystreets/assertions\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/smartystreets/assertions@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/Antonboom/testifylint@1.4.3\",\"type\":\"library\",\"name\":\"github.com/Antonboom/testifylint\",\"version\":\"1.4.3\",\"purl\":\"pkg:golang/github.com/Antonboom/testifylint@1.4.3\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Fpool@1.1.0\",\"type\":\"library\",\"name\":\"@protobufjs/pool\",\"version\":\"1.1.0\",\"purl\":\"pkg:npm/%40protobufjs%2Fpool@1.1.0\"},{\"bom-ref\":\"pkg:golang/go-simpler.org/sloglint@0.7.2\",\"type\":\"library\",\"name\":\"go-simpler.org/sloglint\",\"version\":\"0.7.2\",\"purl\":\"pkg:golang/go-simpler.org/sloglint@0.7.2\"},{\"bom-ref\":\"pkg:golang/github.com/kballard/go-shellquote@0.0.0-20180428030007-95032a82bc51\",\"type\":\"library\",\"name\":\"github.com/kballard/go-shellquote\",\"version\":\"0.0.0-20180428030007-95032a82bc51\",\"purl\":\"pkg:golang/github.com/kballard/go-shellquote@0.0.0-20180428030007-95032a82bc51\"},{\"bom-ref\":\"pkg:golang/go.uber.org/fx@1.18.2\",\"type\":\"library\",\"name\":\"go.uber.org/fx\",\"version\":\"1.18.2\",\"purl\":\"pkg:golang/go.uber.org/fx@1.18.2\"},{\"bom-ref\":\"pkg:golang/github.com/sivchari/containedctx@1.0.3\",\"type\":\"library\",\"name\":\"github.com/sivchari/containedctx\",\"version\":\"1.0.3\",\"purl\":\"pkg:golang/github.com/sivchari/containedctx@1.0.3\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/appsec-internal-go@1.0.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/appsec-internal-go\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/DataDog/appsec-internal-go@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/miekg/dns@1.1.61\",\"type\":\"library\",\"name\":\"github.com/miekg/dns\",\"version\":\"1.1.61\",\"purl\":\"pkg:golang/github.com/miekg/dns@1.1.61\"},{\"bom-ref\":\"pkg:golang/k8s.io/klog@1.0.1-0.20200310124935-4ad0115ba9e4\",\"type\":\"library\",\"name\":\"k8s.io/klog\",\"version\":\"1.0.1-0.20200310124935-4ad0115ba9e4\",\"purl\":\"pkg:golang/k8s.io/klog@1.0.1-0.20200310124935-4ad0115ba9e4\"},{\"bom-ref\":\"pkg:golang/github.com/golang/groupcache@0.0.0-20241129210726-2c02b8208cf8\",\"type\":\"library\",\"name\":\"github.com/golang/groupcache\",\"version\":\"0.0.0-20241129210726-2c02b8208cf8\",\"purl\":\"pkg:golang/github.com/golang/groupcache@0.0.0-20241129210726-2c02b8208cf8\"},{\"bom-ref\":\"pkg:golang/github.com/xeipuuv/gojsonreference@0.0.0-20180127040603-bd5ef7bd5415\",\"type\":\"library\",\"name\":\"github.com/xeipuuv/gojsonreference\",\"version\":\"0.0.0-20180127040603-bd5ef7bd5415\",\"purl\":\"pkg:golang/github.com/xeipuuv/gojsonreference@0.0.0-20180127040603-bd5ef7bd5415\"},{\"bom-ref\":\"pkg:npm/detect-newline@3.1.0\",\"type\":\"library\",\"name\":\"detect-newline\",\"version\":\"3.1.0\",\"purl\":\"pkg:npm/detect-newline@3.1.0\"},{\"bom-ref\":\"pkg:npm/jest-docblock@29.7.0\",\"type\":\"library\",\"name\":\"jest-docblock\",\"version\":\"29.7.0\",\"purl\":\"pkg:npm/jest-docblock@29.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/quasilyte/regex/syntax@0.0.0-20210819130434-b3f0c404a727\",\"type\":\"library\",\"name\":\"github.com/quasilyte/regex/syntax\",\"version\":\"0.0.0-20210819130434-b3f0c404a727\",\"purl\":\"pkg:golang/github.com/quasilyte/regex/syntax@0.0.0-20210819130434-b3f0c404a727\"},{\"bom-ref\":\"pkg:golang/github.com/go-resty/resty/v2@2.13.1\",\"type\":\"library\",\"name\":\"github.com/go-resty/resty/v2\",\"version\":\"2.13.1\",\"purl\":\"pkg:golang/github.com/go-resty/resty/v2@2.13.1\"},{\"bom-ref\":\"pkg:golang/github.com/Azure/go-ansiterm@0.0.0-20230124172434-306776ec8161\",\"type\":\"library\",\"name\":\"github.com/Azure/go-ansiterm\",\"version\":\"0.0.0-20230124172434-306776ec8161\",\"purl\":\"pkg:golang/github.com/Azure/go-ansiterm@0.0.0-20230124172434-306776ec8161\"},{\"bom-ref\":\"pkg:golang/github.com/bmatcuk/doublestar/v4@4.8.1\",\"type\":\"library\",\"name\":\"github.com/bmatcuk/doublestar/v4\",\"version\":\"4.8.1\",\"purl\":\"pkg:golang/github.com/bmatcuk/doublestar/v4@4.8.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/sdk/log@0.10.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/sdk/log\",\"version\":\"0.10.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/sdk/log@0.10.0\"},{\"bom-ref\":\"pkg:golang/github.com/coreos/go-semver@0.3.1\",\"type\":\"library\",\"name\":\"github.com/coreos/go-semver\",\"version\":\"0.3.1\",\"purl\":\"pkg:golang/github.com/coreos/go-semver@0.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/kulti/thelper@0.6.3\",\"type\":\"library\",\"name\":\"github.com/kulti/thelper\",\"version\":\"0.6.3\",\"purl\":\"pkg:golang/github.com/kulti/thelper@0.6.3\"},{\"bom-ref\":\"pkg:golang/golang.org/x/crypto@0.32.0\",\"type\":\"library\",\"name\":\"golang.org/x/crypto\",\"version\":\"0.32.0\",\"purl\":\"pkg:golang/golang.org/x/crypto@0.32.0\"},{\"bom-ref\":\"pkg:golang/github.com/Antonboom/errname@0.1.13\",\"type\":\"library\",\"name\":\"github.com/Antonboom/errname\",\"version\":\"0.1.13\",\"purl\":\"pkg:golang/github.com/Antonboom/errname@0.1.13\"},{\"bom-ref\":\"pkg:golang/github.com/grpc-ecosystem/go-grpc-prometheus@1.2.0\",\"type\":\"library\",\"name\":\"github.com/grpc-ecosystem/go-grpc-prometheus\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/grpc-ecosystem/go-grpc-prometheus@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/muesli/termenv@0.15.2\",\"type\":\"library\",\"name\":\"github.com/muesli/termenv\",\"version\":\"0.15.2\",\"purl\":\"pkg:golang/github.com/muesli/termenv@0.15.2\"},{\"bom-ref\":\"pkg:npm/%40opentelemetry%2Fapi@1.8.0\",\"type\":\"library\",\"name\":\"@opentelemetry/api\",\"version\":\"1.8.0\",\"purl\":\"pkg:npm/%40opentelemetry%2Fapi@1.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/elastic/go-grok@0.3.1\",\"type\":\"library\",\"name\":\"github.com/elastic/go-grok\",\"version\":\"0.3.1\",\"purl\":\"pkg:golang/github.com/elastic/go-grok@0.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/Datadog/dublin-traceroute@0.0.2\",\"type\":\"library\",\"name\":\"github.com/Datadog/dublin-traceroute\",\"version\":\"0.0.2\",\"purl\":\"pkg:golang/github.com/Datadog/dublin-traceroute@0.0.2\"},{\"bom-ref\":\"pkg:golang/github.com/xdg-go/pbkdf2@1.0.0\",\"type\":\"library\",\"name\":\"github.com/xdg-go/pbkdf2\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/xdg-go/pbkdf2@1.0.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/pdata/pprofile@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/pdata/pprofile\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/pdata/pprofile@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/microsoft/go-rustaudit@0.0.0-20220808201409-204dfee52032\",\"type\":\"library\",\"name\":\"github.com/microsoft/go-rustaudit\",\"version\":\"0.0.0-20220808201409-204dfee52032\",\"purl\":\"pkg:golang/github.com/microsoft/go-rustaudit@0.0.0-20220808201409-204dfee52032\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/validate@0.24.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/validate\",\"version\":\"0.24.0\",\"purl\":\"pkg:golang/github.com/go-openapi/validate@0.24.0\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/lager@2.0.0+incompatible\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/lager\",\"version\":\"2.0.0+incompatible\",\"purl\":\"pkg:golang/code.cloudfoundry.org/lager@2.0.0+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/gophercloud/gophercloud@1.13.0\",\"type\":\"library\",\"name\":\"github.com/gophercloud/gophercloud\",\"version\":\"1.13.0\",\"purl\":\"pkg:golang/github.com/gophercloud/gophercloud@1.13.0\"},{\"bom-ref\":\"pkg:npm/import-in-the-middle@1.11.0\",\"type\":\"library\",\"name\":\"import-in-the-middle\",\"version\":\"1.11.0\",\"purl\":\"pkg:npm/import-in-the-middle@1.11.0\"},{\"bom-ref\":\"pkg:pypi/requests@2.31.0\",\"type\":\"library\",\"name\":\"requests\",\"version\":\"2.31.0\",\"purl\":\"pkg:pypi/requests@2.31.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/config/configcompression@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/config/configcompression\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/config/configcompression@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/quantile@0.24.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/opentelemetry-mapping-go/pkg/quantile\",\"version\":\"0.24.0\",\"purl\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/quantile@0.24.0\"},{\"bom-ref\":\"pkg:golang/github.com/jellydator/ttlcache/v3@3.3.0\",\"type\":\"library\",\"name\":\"github.com/jellydator/ttlcache/v3\",\"version\":\"3.3.0\",\"purl\":\"pkg:golang/github.com/jellydator/ttlcache/v3@3.3.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/pipeline@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/pipeline\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/pipeline@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/golangci/plugin-module-register@0.1.1\",\"type\":\"library\",\"name\":\"github.com/golangci/plugin-module-register\",\"version\":\"0.1.1\",\"purl\":\"pkg:golang/github.com/golangci/plugin-module-register@0.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/favadi/protoc-go-inject-tag@1.4.0\",\"type\":\"library\",\"name\":\"github.com/favadi/protoc-go-inject-tag\",\"version\":\"1.4.0\",\"purl\":\"pkg:golang/github.com/favadi/protoc-go-inject-tag@1.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/xen0n/gosmopolitan@1.2.2\",\"type\":\"library\",\"name\":\"github.com/xen0n/gosmopolitan\",\"version\":\"1.2.2\",\"purl\":\"pkg:golang/github.com/xen0n/gosmopolitan@1.2.2\"},{\"bom-ref\":\"pkg:golang/mvdan.cc/unparam@0.0.0-20240528143540-8a5130ca722f\",\"type\":\"library\",\"name\":\"mvdan.cc/unparam\",\"version\":\"0.0.0-20240528143540-8a5130ca722f\",\"purl\":\"pkg:golang/mvdan.cc/unparam@0.0.0-20240528143540-8a5130ca722f\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-sockaddr@1.0.6\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-sockaddr\",\"version\":\"1.0.6\",\"purl\":\"pkg:golang/github.com/hashicorp/go-sockaddr@1.0.6\"},{\"bom-ref\":\"pkg:golang/github.com/sigstore/cosign/v2@2.2.4\",\"type\":\"library\",\"name\":\"github.com/sigstore/cosign/v2\",\"version\":\"2.2.4\",\"purl\":\"pkg:golang/github.com/sigstore/cosign/v2@2.2.4\"},{\"bom-ref\":\"pkg:golang/k8s.io/apimachinery@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/apimachinery\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/apimachinery@0.31.2\"},{\"bom-ref\":\"pkg:golang/golang.org/x/oauth2@0.25.0\",\"type\":\"library\",\"name\":\"golang.org/x/oauth2\",\"version\":\"0.25.0\",\"purl\":\"pkg:golang/golang.org/x/oauth2@0.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/sigstore/timestamp-authority@1.2.2\",\"type\":\"library\",\"name\":\"github.com/sigstore/timestamp-authority\",\"version\":\"1.2.2\",\"purl\":\"pkg:golang/github.com/sigstore/timestamp-authority@1.2.2\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/auto/sdk@1.1.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/auto/sdk\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/auto/sdk@1.1.0\"},{\"bom-ref\":\"pkg:golang/gopkg.in/go-jose/go-jose.v2@2.6.3\",\"type\":\"library\",\"name\":\"gopkg.in/go-jose/go-jose.v2\",\"version\":\"2.6.3\",\"purl\":\"pkg:golang/gopkg.in/go-jose/go-jose.v2@2.6.3\"},{\"bom-ref\":\"pkg:golang/github.com/leonklingele/grouper@1.1.2\",\"type\":\"library\",\"name\":\"github.com/leonklingele/grouper\",\"version\":\"1.1.2\",\"purl\":\"pkg:golang/github.com/leonklingele/grouper@1.1.2\"},{\"bom-ref\":\"pkg:npm/cjs-module-lexer@1.3.1\",\"type\":\"library\",\"name\":\"cjs-module-lexer\",\"version\":\"1.3.1\",\"purl\":\"pkg:npm/cjs-module-lexer@1.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/google/uuid@1.6.0\",\"type\":\"library\",\"name\":\"github.com/google/uuid\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/github.com/google/uuid@1.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus-community/windows_exporter@0.27.2\",\"type\":\"library\",\"name\":\"github.com/prometheus-community/windows_exporter\",\"version\":\"0.27.2\",\"purl\":\"pkg:golang/github.com/prometheus-community/windows_exporter@0.27.2\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/config/confignet@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/config/confignet\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/config/confignet@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/jmespath/go-jmespath@0.4.0\",\"type\":\"library\",\"name\":\"github.com/jmespath/go-jmespath\",\"version\":\"0.4.0\",\"purl\":\"pkg:golang/github.com/jmespath/go-jmespath@0.4.0\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/garden@0.0.0-20210208153517-580cadd489d2\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/garden\",\"version\":\"0.0.0-20210208153517-580cadd489d2\",\"purl\":\"pkg:golang/code.cloudfoundry.org/garden@0.0.0-20210208153517-580cadd489d2\"},{\"bom-ref\":\"pkg:golang/github.com/go-logr/logr@1.4.2\",\"type\":\"library\",\"name\":\"github.com/go-logr/logr\",\"version\":\"1.4.2\",\"purl\":\"pkg:golang/github.com/go-logr/logr@1.4.2\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ecs@1.53.9\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/ecs\",\"version\":\"1.53.9\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ecs@1.53.9\"},{\"bom-ref\":\"pkg:golang/github.com/iwdgo/sigintwindows@0.2.2\",\"type\":\"library\",\"name\":\"github.com/iwdgo/sigintwindows\",\"version\":\"0.2.2\",\"purl\":\"pkg:golang/github.com/iwdgo/sigintwindows@0.2.2\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/contrib/propagators/b3@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/contrib/propagators/b3\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/contrib/propagators/b3@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/cespare/xxhash/v2@2.2.0\",\"type\":\"library\",\"name\":\"github.com/cespare/xxhash/v2\",\"version\":\"2.2.0\",\"purl\":\"pkg:golang/github.com/cespare/xxhash/v2@2.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/openshift/client-go@0.0.0-20210521082421-73d9475a9142\",\"type\":\"library\",\"name\":\"github.com/openshift/client-go\",\"version\":\"0.0.0-20210521082421-73d9475a9142\",\"purl\":\"pkg:golang/github.com/openshift/client-go@0.0.0-20210521082421-73d9475a9142\"},{\"bom-ref\":\"pkg:golang/github.com/beorn7/perks@1.0.1\",\"type\":\"library\",\"name\":\"github.com/beorn7/perks\",\"version\":\"1.0.1\",\"purl\":\"pkg:golang/github.com/beorn7/perks@1.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/antchfx/xpath@1.3.3\",\"type\":\"library\",\"name\":\"github.com/antchfx/xpath\",\"version\":\"1.3.3\",\"purl\":\"pkg:golang/github.com/antchfx/xpath@1.3.3\"},{\"bom-ref\":\"pkg:golang/github.com/sagikazarmark/slog-shim@0.1.0\",\"type\":\"library\",\"name\":\"github.com/sagikazarmark/slog-shim\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/sagikazarmark/slog-shim@0.1.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/config/configgrpc@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/config/configgrpc\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/config/configgrpc@0.119.0\"},{\"bom-ref\":\"pkg:npm/msgpack-lite@0.1.26\",\"type\":\"library\",\"name\":\"msgpack-lite\",\"version\":\"0.1.26\",\"purl\":\"pkg:npm/msgpack-lite@0.1.26\"},{\"bom-ref\":\"pkg:golang/stdlib@1.22.0\",\"type\":\"library\",\"name\":\"stdlib\",\"version\":\"1.22.0\",\"purl\":\"pkg:golang/stdlib@1.22.0\"},{\"bom-ref\":\"pkg:golang/github.com/cenkalti/backoff/v4@4.3.0\",\"type\":\"library\",\"name\":\"github.com/cenkalti/backoff/v4\",\"version\":\"4.3.0\",\"purl\":\"pkg:golang/github.com/cenkalti/backoff/v4@4.3.0\"},{\"bom-ref\":\"pkg:npm/module-details-from-path@1.0.3\",\"type\":\"library\",\"name\":\"module-details-from-path\",\"version\":\"1.0.3\",\"purl\":\"pkg:npm/module-details-from-path@1.0.3\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdoutmetric@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/stdout/stdoutmetric\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdoutmetric@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/sampling@0.119.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/text@0.9.0\",\"type\":\"library\",\"name\":\"golang.org/x/text\",\"version\":\"0.9.0\",\"purl\":\"pkg:golang/golang.org/x/text@0.9.0\"},{\"bom-ref\":\"pkg:golang/github.com/tilinna/clock@1.1.0\",\"type\":\"library\",\"name\":\"github.com/tilinna/clock\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/tilinna/clock@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/modern-go/concurrent@0.0.0-20180306012644-bacd9c7ef1dd\",\"type\":\"library\",\"name\":\"github.com/modern-go/concurrent\",\"version\":\"0.0.0-20180306012644-bacd9c7ef1dd\",\"purl\":\"pkg:golang/github.com/modern-go/concurrent@0.0.0-20180306012644-bacd9c7ef1dd\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/go-libddwaf@1.4.2\",\"type\":\"library\",\"name\":\"github.com/DataDog/go-libddwaf\",\"version\":\"1.4.2\",\"purl\":\"pkg:golang/github.com/DataDog/go-libddwaf@1.4.2\"},{\"bom-ref\":\"pkg:golang/github.com/kunwardeep/paralleltest@1.0.10\",\"type\":\"library\",\"name\":\"github.com/kunwardeep/paralleltest\",\"version\":\"1.0.10\",\"purl\":\"pkg:golang/github.com/kunwardeep/paralleltest@1.0.10\"},{\"bom-ref\":\"pkg:npm/ieee754@1.2.1\",\"type\":\"library\",\"name\":\"ieee754\",\"version\":\"1.2.1\",\"purl\":\"pkg:npm/ieee754@1.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/tchap/go-patricia/v2@2.3.1\",\"type\":\"library\",\"name\":\"github.com/tchap/go-patricia/v2\",\"version\":\"2.3.1\",\"purl\":\"pkg:golang/github.com/tchap/go-patricia/v2@2.3.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/filter@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/filter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/filter@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/consumer/consumererror/xconsumererror@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/consumer/consumererror/xconsumererror\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/consumer/consumererror/xconsumererror@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/consul/api@1.31.0\",\"type\":\"library\",\"name\":\"github.com/hashicorp/consul/api\",\"version\":\"1.31.0\",\"purl\":\"pkg:golang/github.com/hashicorp/consul/api@1.31.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/perf@0.0.0-20210220033136-40a54f11e909\",\"type\":\"library\",\"name\":\"golang.org/x/perf\",\"version\":\"0.0.0-20210220033136-40a54f11e909\",\"purl\":\"pkg:golang/golang.org/x/perf@0.0.0-20210220033136-40a54f11e909\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/consumer/xconsumer@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/consumer/xconsumer\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/consumer/xconsumer@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/GaijinEntertainment/go-exhaustruct/v3@3.3.0\",\"type\":\"library\",\"name\":\"github.com/GaijinEntertainment/go-exhaustruct/v3\",\"version\":\"3.3.0\",\"purl\":\"pkg:golang/github.com/GaijinEntertainment/go-exhaustruct/v3@3.3.0\"},{\"bom-ref\":\"pkg:golang/inet.af/netaddr@0.0.0-20220811202034-502d2d690317\",\"type\":\"library\",\"name\":\"inet.af/netaddr\",\"version\":\"0.0.0-20220811202034-502d2d690317\",\"purl\":\"pkg:golang/inet.af/netaddr@0.0.0-20220811202034-502d2d690317\"},{\"bom-ref\":\"pkg:golang/github.com/golang/mock@1.7.0-rc.1\",\"type\":\"library\",\"name\":\"github.com/golang/mock\",\"version\":\"1.7.0-rc.1\",\"purl\":\"pkg:golang/github.com/golang/mock@1.7.0-rc.1\"},{\"bom-ref\":\"pkg:golang/github.com/knadh/koanf/maps@0.1.0\",\"type\":\"library\",\"name\":\"github.com/knadh/koanf/maps\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/knadh/koanf/maps@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/masahiro331/go-ext4-filesystem@0.0.0-20240620024024-ca14e6327bbd\",\"type\":\"library\",\"name\":\"github.com/masahiro331/go-ext4-filesystem\",\"version\":\"0.0.0-20240620024024-ca14e6327bbd\",\"purl\":\"pkg:golang/github.com/masahiro331/go-ext4-filesystem@0.0.0-20240620024024-ca14e6327bbd\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-secure-stdlib/parseutil@0.1.8\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-secure-stdlib/parseutil\",\"version\":\"0.1.8\",\"purl\":\"pkg:golang/github.com/hashicorp/go-secure-stdlib/parseutil@0.1.8\"},{\"bom-ref\":\"pkg:golang/golang.org/x/mod@0.22.0\",\"type\":\"library\",\"name\":\"golang.org/x/mod\",\"version\":\"0.22.0\",\"purl\":\"pkg:golang/golang.org/x/mod@0.22.0\"},{\"bom-ref\":\"pkg:golang/github.com/russross/blackfriday/v2@2.1.0\",\"type\":\"library\",\"name\":\"github.com/russross/blackfriday/v2\",\"version\":\"2.1.0\",\"purl\":\"pkg:golang/github.com/russross/blackfriday/v2@2.1.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/config/configtelemetry@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/config/configtelemetry\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/config/configtelemetry@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/viper@1.14.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/viper\",\"version\":\"1.14.0\",\"purl\":\"pkg:golang/github.com/DataDog/viper@1.14.0\"},{\"bom-ref\":\"pkg:golang/github.com/charithe/durationcheck@0.0.10\",\"type\":\"library\",\"name\":\"github.com/charithe/durationcheck\",\"version\":\"0.0.10\",\"purl\":\"pkg:golang/github.com/charithe/durationcheck@0.0.10\"},{\"bom-ref\":\"pkg:golang/github.com/urfave/negroni@1.0.0\",\"type\":\"library\",\"name\":\"github.com/urfave/negroni\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/urfave/negroni@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/gostaticanalysis/analysisutil@0.7.1\",\"type\":\"library\",\"name\":\"github.com/gostaticanalysis/analysisutil\",\"version\":\"0.7.1\",\"purl\":\"pkg:golang/github.com/gostaticanalysis/analysisutil@0.7.1\"},{\"bom-ref\":\"pkg:golang/github.com/hhatto/gorst@0.0.0-20181029133204-ca9f730cac5b\",\"type\":\"library\",\"name\":\"github.com/hhatto/gorst\",\"version\":\"0.0.0-20181029133204-ca9f730cac5b\",\"purl\":\"pkg:golang/github.com/hhatto/gorst@0.0.0-20181029133204-ca9f730cac5b\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-random/sdk/v4@4.16.8\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-random/sdk/v4\",\"version\":\"4.16.8\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-random/sdk/v4@4.16.8\"},{\"bom-ref\":\"pkg:golang/k8s.io/autoscaler/vertical-pod-autoscaler@1.2.2\",\"type\":\"library\",\"name\":\"k8s.io/autoscaler/vertical-pod-autoscaler\",\"version\":\"1.2.2\",\"purl\":\"pkg:golang/k8s.io/autoscaler/vertical-pod-autoscaler@1.2.2\"},{\"bom-ref\":\"pkg:golang/github.com/sourcegraph/conc@0.3.0\",\"type\":\"library\",\"name\":\"github.com/sourcegraph/conc\",\"version\":\"0.3.0\",\"purl\":\"pkg:golang/github.com/sourcegraph/conc@0.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/grpc-ecosystem/go-grpc-middleware@1.4.0\",\"type\":\"library\",\"name\":\"github.com/grpc-ecosystem/go-grpc-middleware\",\"version\":\"1.4.0\",\"purl\":\"pkg:golang/github.com/grpc-ecosystem/go-grpc-middleware@1.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/core/xidutils@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/google/certificate-transparency-go@1.1.8\",\"type\":\"library\",\"name\":\"github.com/google/certificate-transparency-go\",\"version\":\"1.1.8\",\"purl\":\"pkg:golang/github.com/google/certificate-transparency-go@1.1.8\"},{\"bom-ref\":\"pkg:golang/github.com/gregjones/httpcache@0.0.0-20190611155906-901d90724c79\",\"type\":\"library\",\"name\":\"github.com/gregjones/httpcache\",\"version\":\"0.0.0-20190611155906-901d90724c79\",\"purl\":\"pkg:golang/github.com/gregjones/httpcache@0.0.0-20190611155906-901d90724c79\"},{\"bom-ref\":\"pkg:maven/org.apache.logging.log4j/log4j-core@2.17.1\",\"type\":\"library\",\"name\":\"org.apache.logging.log4j:log4j-core\",\"version\":\"2.17.1\",\"purl\":\"pkg:maven/org.apache.logging.log4j/log4j-core@2.17.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/prometheus@0.42.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/prometheus\",\"version\":\"0.42.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/prometheus@0.42.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ec2@1.202.0\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/ec2\",\"version\":\"1.202.0\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ec2@1.202.0\"},{\"bom-ref\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5@5.7.0\",\"type\":\"library\",\"name\":\"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5\",\"version\":\"5.7.0\",\"purl\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5@5.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/ryanrolds/sqlclosecheck@0.5.1\",\"type\":\"library\",\"name\":\"github.com/ryanrolds/sqlclosecheck\",\"version\":\"0.5.1\",\"purl\":\"pkg:golang/github.com/ryanrolds/sqlclosecheck@0.5.1\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/golang-lru/v2@2.0.7\",\"type\":\"library\",\"name\":\"github.com/hashicorp/golang-lru/v2\",\"version\":\"2.0.7\",\"purl\":\"pkg:golang/github.com/hashicorp/golang-lru/v2@2.0.7\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/skydive-project/go-debouncer@1.0.1\",\"type\":\"library\",\"name\":\"github.com/skydive-project/go-debouncer\",\"version\":\"1.0.1\",\"purl\":\"pkg:golang/github.com/skydive-project/go-debouncer@1.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/apache/thrift@0.21.0\",\"type\":\"library\",\"name\":\"github.com/apache/thrift\",\"version\":\"0.21.0\",\"purl\":\"pkg:golang/github.com/apache/thrift@0.21.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/managedidentity/v2@2.81.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-azure-native-sdk/managedidentity/v2\",\"version\":\"2.81.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/managedidentity/v2@2.81.0\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/go-loggregator@7.4.0+incompatible\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/go-loggregator\",\"version\":\"7.4.0+incompatible\",\"purl\":\"pkg:golang/code.cloudfoundry.org/go-loggregator@7.4.0+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/coreos/go-systemd/v22@22.5.0\",\"type\":\"library\",\"name\":\"github.com/coreos/go-systemd/v22\",\"version\":\"22.5.0\",\"purl\":\"pkg:golang/github.com/coreos/go-systemd/v22@22.5.0\"},{\"bom-ref\":\"pkg:maven/com.amazonaws/aws-lambda-java-events@2.2.7\",\"type\":\"library\",\"name\":\"com.amazonaws:aws-lambda-java-events\",\"version\":\"2.2.7\",\"purl\":\"pkg:maven/com.amazonaws/aws-lambda-java-events@2.2.7\"},{\"bom-ref\":\"pkg:golang/github.com/wI2L/jsondiff@0.6.1\",\"type\":\"library\",\"name\":\"github.com/wI2L/jsondiff\",\"version\":\"0.6.1\",\"purl\":\"pkg:golang/github.com/wI2L/jsondiff@0.6.1\"},{\"bom-ref\":\"pkg:golang/github.com/gorilla/websocket@1.5.0\",\"type\":\"library\",\"name\":\"github.com/gorilla/websocket\",\"version\":\"1.5.0\",\"purl\":\"pkg:golang/github.com/gorilla/websocket@1.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/uptrace/bun@1.2.5\",\"type\":\"library\",\"name\":\"github.com/uptrace/bun\",\"version\":\"1.2.5\",\"purl\":\"pkg:golang/github.com/uptrace/bun@1.2.5\"},{\"bom-ref\":\"pkg:golang/google.golang.org/protobuf@1.30.0\",\"type\":\"library\",\"name\":\"google.golang.org/protobuf\",\"version\":\"1.30.0\",\"purl\":\"pkg:golang/google.golang.org/protobuf@1.30.0\"},{\"bom-ref\":\"pkg:golang/cloud.google.com/go/compute/metadata@0.6.0\",\"type\":\"library\",\"name\":\"cloud.google.com/go/compute/metadata\",\"version\":\"0.6.0\",\"purl\":\"pkg:golang/cloud.google.com/go/compute/metadata@0.6.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/apiextensions-apiserver@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/apiextensions-apiserver\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/apiextensions-apiserver@0.31.2\"},{\"bom-ref\":\"pkg:golang/github.com/sijms/go-ora/v2@2.8.19\",\"type\":\"library\",\"name\":\"github.com/sijms/go-ora/v2\",\"version\":\"2.8.19\",\"purl\":\"pkg:golang/github.com/sijms/go-ora/v2@2.8.19\"},{\"bom-ref\":\"pkg:golang/github.com/sonatard/noctx@0.0.2\",\"type\":\"library\",\"name\":\"github.com/sonatard/noctx\",\"version\":\"0.0.2\",\"purl\":\"pkg:golang/github.com/sonatard/noctx@0.0.2\"},{\"bom-ref\":\"pkg:npm/pprof-format@2.1.0\",\"type\":\"library\",\"name\":\"pprof-format\",\"version\":\"2.1.0\",\"purl\":\"pkg:npm/pprof-format@2.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/gostaticanalysis/nilerr@0.1.1\",\"type\":\"library\",\"name\":\"github.com/gostaticanalysis/nilerr\",\"version\":\"0.1.1\",\"purl\":\"pkg:golang/github.com/gostaticanalysis/nilerr@0.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/xdg-go/scram@1.1.2\",\"type\":\"library\",\"name\":\"github.com/xdg-go/scram\",\"version\":\"1.1.2\",\"purl\":\"pkg:golang/github.com/xdg-go/scram@1.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/go-chi/chi@4.1.2+incompatible\",\"type\":\"library\",\"name\":\"github.com/go-chi/chi\",\"version\":\"4.1.2+incompatible\",\"purl\":\"pkg:golang/github.com/go-chi/chi@4.1.2+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/quasilyte/stdinfo@0.0.0-20220114132959-f7386bf02567\",\"type\":\"library\",\"name\":\"github.com/quasilyte/stdinfo\",\"version\":\"0.0.0-20220114132959-f7386bf02567\",\"purl\":\"pkg:golang/github.com/quasilyte/stdinfo@0.0.0-20220114132959-f7386bf02567\"},{\"bom-ref\":\"pkg:golang/github.com/go-ole/go-ole@1.3.0\",\"type\":\"library\",\"name\":\"github.com/go-ole/go-ole\",\"version\":\"1.3.0\",\"purl\":\"pkg:golang/github.com/go-ole/go-ole@1.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/google/wire@0.6.0\",\"type\":\"library\",\"name\":\"github.com/google/wire\",\"version\":\"0.6.0\",\"purl\":\"pkg:golang/github.com/google/wire@0.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/ebpf-manager@0.7.7\",\"type\":\"library\",\"name\":\"github.com/DataDog/ebpf-manager\",\"version\":\"0.7.7\",\"purl\":\"pkg:golang/github.com/DataDog/ebpf-manager@0.7.7\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/envprovider@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/confmap/provider/envprovider\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/envprovider@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/docker/go-connections@0.5.0\",\"type\":\"library\",\"name\":\"github.com/docker/go-connections\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/docker/go-connections@0.5.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/connector/connectortest@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/connector/connectortest\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/connector/connectortest@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/jlaffaye/ftp@0.1.0\",\"type\":\"library\",\"name\":\"github.com/jlaffaye/ftp\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/jlaffaye/ftp@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/gopherjs/gopherjs@0.0.0-20200217142428-fce0ec30dd00\",\"type\":\"library\",\"name\":\"github.com/gopherjs/gopherjs\",\"version\":\"0.0.0-20200217142428-fce0ec30dd00\",\"purl\":\"pkg:golang/github.com/gopherjs/gopherjs@0.0.0-20200217142428-fce0ec30dd00\"},{\"bom-ref\":\"pkg:golang/github.com/zorkian/go-datadog-api@2.30.0+incompatible\",\"type\":\"library\",\"name\":\"github.com/zorkian/go-datadog-api\",\"version\":\"2.30.0+incompatible\",\"purl\":\"pkg:golang/github.com/zorkian/go-datadog-api@2.30.0+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics@0.24.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics\",\"version\":\"0.24.0\",\"purl\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics@0.24.0\"},{\"bom-ref\":\"pkg:golang/github.com/miekg/dns@1.1.62\",\"type\":\"library\",\"name\":\"github.com/miekg/dns\",\"version\":\"1.1.62\",\"purl\":\"pkg:golang/github.com/miekg/dns@1.1.62\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/viper@1.12.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/viper\",\"version\":\"1.12.0\",\"purl\":\"pkg:golang/github.com/DataDog/viper@1.12.0\"},{\"bom-ref\":\"pkg:golang/github.com/Antonboom/nilnil@0.1.9\",\"type\":\"library\",\"name\":\"github.com/Antonboom/nilnil\",\"version\":\"0.1.9\",\"purl\":\"pkg:golang/github.com/Antonboom/nilnil@0.1.9\"},{\"bom-ref\":\"pkg:golang/github.com/alecthomas/units@0.0.0-20240626203959-61d1e3462e30\",\"type\":\"library\",\"name\":\"github.com/alecthomas/units\",\"version\":\"0.0.0-20240626203959-61d1e3462e30\",\"purl\":\"pkg:golang/github.com/alecthomas/units@0.0.0-20240626203959-61d1e3462e30\"},{\"bom-ref\":\"pkg:golang/github.com/Abirdcfly/dupword@0.0.14\",\"type\":\"library\",\"name\":\"github.com/Abirdcfly/dupword\",\"version\":\"0.0.14\",\"purl\":\"pkg:golang/github.com/Abirdcfly/dupword@0.0.14\"},{\"bom-ref\":\"pkg:golang/github.com/swaggest/refl@1.3.0\",\"type\":\"library\",\"name\":\"github.com/swaggest/refl\",\"version\":\"1.3.0\",\"purl\":\"pkg:golang/github.com/swaggest/refl@1.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/davecgh/go-spew@1.1.2-0.20180830191138-d8f796af33cc\",\"type\":\"library\",\"name\":\"github.com/davecgh/go-spew\",\"version\":\"1.1.2-0.20180830191138-d8f796af33cc\",\"purl\":\"pkg:golang/github.com/davecgh/go-spew@1.1.2-0.20180830191138-d8f796af33cc\"},{\"bom-ref\":\"pkg:golang/github.com/blabber/go-freebsd-sysctl@0.0.0-20201130114544-503969f39d8f\",\"type\":\"library\",\"name\":\"github.com/blabber/go-freebsd-sysctl\",\"version\":\"0.0.0-20201130114544-503969f39d8f\",\"purl\":\"pkg:golang/github.com/blabber/go-freebsd-sysctl@0.0.0-20201130114544-503969f39d8f\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/extension@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/extension\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/extension@0.119.0\"},{\"bom-ref\":\"pkg:npm/%40datadog%2Fpprof@5.3.0\",\"type\":\"library\",\"name\":\"@datadog/pprof\",\"version\":\"5.3.0\",\"purl\":\"pkg:npm/%40datadog%2Fpprof@5.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/pborman/uuid@1.2.1\",\"type\":\"library\",\"name\":\"github.com/pborman/uuid\",\"version\":\"1.2.1\",\"purl\":\"pkg:golang/github.com/pborman/uuid@1.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/alingse/asasalint@0.0.11\",\"type\":\"library\",\"name\":\"github.com/alingse/asasalint\",\"version\":\"0.0.11\",\"purl\":\"pkg:golang/github.com/alingse/asasalint@0.0.11\"},{\"bom-ref\":\"pkg:golang/github.com/jmoiron/sqlx@1.4.0\",\"type\":\"library\",\"name\":\"github.com/jmoiron/sqlx\",\"version\":\"1.4.0\",\"purl\":\"pkg:golang/github.com/jmoiron/sqlx@1.4.0\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/bbs@0.0.0-20200403215808-d7bc971db0db\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/bbs\",\"version\":\"0.0.0-20200403215808-d7bc971db0db\",\"purl\":\"pkg:golang/code.cloudfoundry.org/bbs@0.0.0-20200403215808-d7bc971db0db\"},{\"bom-ref\":\"pkg:golang/github.com/cyberphone/json-canonicalization@0.0.0-20231011164504-785e29786b46\",\"type\":\"library\",\"name\":\"github.com/cyberphone/json-canonicalization\",\"version\":\"0.0.0-20231011164504-785e29786b46\",\"purl\":\"pkg:golang/github.com/cyberphone/json-canonicalization@0.0.0-20231011164504-785e29786b46\"},{\"bom-ref\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/azidentity@1.7.0\",\"type\":\"library\",\"name\":\"github.com/Azure/azure-sdk-for-go/sdk/azidentity\",\"version\":\"1.7.0\",\"purl\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/azidentity@1.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/ultraware/whitespace@0.1.1\",\"type\":\"library\",\"name\":\"github.com/ultraware/whitespace\",\"version\":\"0.1.1\",\"purl\":\"pkg:golang/github.com/ultraware/whitespace@0.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/karrick/godirwalk@1.17.0\",\"type\":\"library\",\"name\":\"github.com/karrick/godirwalk\",\"version\":\"1.17.0\",\"purl\":\"pkg:golang/github.com/karrick/godirwalk@1.17.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/text@0.21.0\",\"type\":\"library\",\"name\":\"golang.org/x/text\",\"version\":\"0.21.0\",\"purl\":\"pkg:golang/golang.org/x/text@0.21.0\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-tls/sdk/v4@4.11.1\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-tls/sdk/v4\",\"version\":\"4.11.1\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-tls/sdk/v4@4.11.1\"},{\"bom-ref\":\"pkg:golang/github.com/itchyny/gojq@0.12.16\",\"type\":\"library\",\"name\":\"github.com/itchyny/gojq\",\"version\":\"0.12.16\",\"purl\":\"pkg:golang/github.com/itchyny/gojq@0.12.16\"},{\"bom-ref\":\"pkg:golang/github.com/AdamKorcz/go-118-fuzz-build@0.0.0-20230306123547-8075edf89bb0\",\"type\":\"library\",\"name\":\"github.com/AdamKorcz/go-118-fuzz-build\",\"version\":\"0.0.0-20230306123547-8075edf89bb0\",\"purl\":\"pkg:golang/github.com/AdamKorcz/go-118-fuzz-build@0.0.0-20230306123547-8075edf89bb0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/s3shared@1.18.10\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/internal/s3shared\",\"version\":\"1.18.10\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/s3shared@1.18.10\"},{\"bom-ref\":\"pkg:golang/github.com/open-policy-agent/opa@0.70.0\",\"type\":\"library\",\"name\":\"github.com/open-policy-agent/opa\",\"version\":\"0.70.0\",\"purl\":\"pkg:golang/github.com/open-policy-agent/opa@0.70.0\"},{\"bom-ref\":\"pkg:golang/github.com/uudashr/gocognit@1.1.3\",\"type\":\"library\",\"name\":\"github.com/uudashr/gocognit\",\"version\":\"1.1.3\",\"purl\":\"pkg:golang/github.com/uudashr/gocognit@1.1.3\"},{\"bom-ref\":\"pkg:golang/github.com/skeema/knownhosts@1.3.0\",\"type\":\"library\",\"name\":\"github.com/skeema/knownhosts\",\"version\":\"1.3.0\",\"purl\":\"pkg:golang/github.com/skeema/knownhosts@1.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/docker/go-events@0.0.0-20190806004212-e31b211e4f1c\",\"type\":\"library\",\"name\":\"github.com/docker/go-events\",\"version\":\"0.0.0-20190806004212-e31b211e4f1c\",\"purl\":\"pkg:golang/github.com/docker/go-events@0.0.0-20190806004212-e31b211e4f1c\"},{\"bom-ref\":\"pkg:golang/github.com/nu7hatch/gouuid@0.0.0-20131221200532-179d4d0c4d8d\",\"type\":\"library\",\"name\":\"github.com/nu7hatch/gouuid\",\"version\":\"0.0.0-20131221200532-179d4d0c4d8d\",\"purl\":\"pkg:golang/github.com/nu7hatch/gouuid@0.0.0-20131221200532-179d4d0c4d8d\"},{\"bom-ref\":\"pkg:golang/github.com/google/s2a-go@0.1.8\",\"type\":\"library\",\"name\":\"github.com/google/s2a-go\",\"version\":\"0.1.8\",\"purl\":\"pkg:golang/github.com/google/s2a-go@0.1.8\"},{\"bom-ref\":\"pkg:golang/github.com/mattn/go-localereader@0.0.1\",\"type\":\"library\",\"name\":\"github.com/mattn/go-localereader\",\"version\":\"0.0.1\",\"purl\":\"pkg:golang/github.com/mattn/go-localereader@0.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/kjk/lzma@0.0.0-20161016003348-3fd93898850d\",\"type\":\"library\",\"name\":\"github.com/kjk/lzma\",\"version\":\"0.0.0-20161016003348-3fd93898850d\",\"purl\":\"pkg:golang/github.com/kjk/lzma@0.0.0-20161016003348-3fd93898850d\"},{\"bom-ref\":\"pkg:golang/github.com/json-iterator/go@1.1.12\",\"type\":\"library\",\"name\":\"github.com/json-iterator/go\",\"version\":\"1.1.12\",\"purl\":\"pkg:golang/github.com/json-iterator/go@1.1.12\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/secretsmanager@1.34.6\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/secretsmanager\",\"version\":\"1.34.6\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/secretsmanager@1.34.6\"},{\"bom-ref\":\"pkg:golang/github.com/vultr/govultr/v2@2.17.2\",\"type\":\"library\",\"name\":\"github.com/vultr/govultr/v2\",\"version\":\"2.17.2\",\"purl\":\"pkg:golang/github.com/vultr/govultr/v2@2.17.2\"},{\"bom-ref\":\"pkg:golang/github.com/golang/protobuf@1.5.3\",\"type\":\"library\",\"name\":\"github.com/golang/protobuf\",\"version\":\"1.5.3\",\"purl\":\"pkg:golang/github.com/golang/protobuf@1.5.3\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/extension/xextension@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/extension/xextension\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/extension/xextension@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/aymanbagabas/go-osc52/v2@2.0.1\",\"type\":\"library\",\"name\":\"github.com/aymanbagabas/go-osc52/v2\",\"version\":\"2.0.1\",\"purl\":\"pkg:golang/github.com/aymanbagabas/go-osc52/v2@2.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-awsx/sdk/v2@2.19.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-awsx/sdk/v2\",\"version\":\"2.19.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-awsx/sdk/v2@2.19.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/sdk@1.27.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/sdk\",\"version\":\"1.27.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/sdk@1.27.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/exp/typeparams@0.0.0-20240314144324-c7f7c6466f7f\",\"type\":\"library\",\"name\":\"golang.org/x/exp/typeparams\",\"version\":\"0.0.0-20240314144324-c7f7c6466f7f\",\"purl\":\"pkg:golang/golang.org/x/exp/typeparams@0.0.0-20240314144324-c7f7c6466f7f\"},{\"bom-ref\":\"pkg:golang/github.com/xdg-go/stringprep@1.0.4\",\"type\":\"library\",\"name\":\"github.com/xdg-go/stringprep\",\"version\":\"1.0.4\",\"purl\":\"pkg:golang/github.com/xdg-go/stringprep@1.0.4\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/scraper@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/scraper\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/scraper@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/jackc/pgservicefile@0.0.0-20221227161230-091c0ba34f0a\",\"type\":\"library\",\"name\":\"github.com/jackc/pgservicefile\",\"version\":\"0.0.0-20221227161230-091c0ba34f0a\",\"purl\":\"pkg:golang/github.com/jackc/pgservicefile@0.0.0-20221227161230-091c0ba34f0a\"},{\"bom-ref\":\"pkg:golang/github.com/gofrs/flock@0.12.1\",\"type\":\"library\",\"name\":\"github.com/gofrs/flock\",\"version\":\"0.12.1\",\"purl\":\"pkg:golang/github.com/gofrs/flock@0.12.1\"},{\"bom-ref\":\"pkg:golang/github.com/aquasecurity/go-version@0.0.0-20240603093900-cf8a8d29271d\",\"type\":\"library\",\"name\":\"github.com/aquasecurity/go-version\",\"version\":\"0.0.0-20240603093900-cf8a8d29271d\",\"purl\":\"pkg:golang/github.com/aquasecurity/go-version@0.0.0-20240603093900-cf8a8d29271d\"},{\"bom-ref\":\"pkg:golang/github.com/ProtonMail/go-crypto@1.0.0\",\"type\":\"library\",\"name\":\"github.com/ProtonMail/go-crypto\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/ProtonMail/go-crypto@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/containerd/api@1.8.0\",\"type\":\"library\",\"name\":\"github.com/containerd/containerd/api\",\"version\":\"1.8.0\",\"purl\":\"pkg:golang/github.com/containerd/containerd/api@1.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/vmihailenco/tagparser/v2@2.0.0\",\"type\":\"library\",\"name\":\"github.com/vmihailenco/tagparser/v2\",\"version\":\"2.0.0\",\"purl\":\"pkg:golang/github.com/vmihailenco/tagparser/v2@2.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-cleanhttp@0.5.2\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-cleanhttp\",\"version\":\"0.5.2\",\"purl\":\"pkg:golang/github.com/hashicorp/go-cleanhttp@0.5.2\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/errdefs@1.0.0\",\"type\":\"library\",\"name\":\"github.com/containerd/errdefs\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/containerd/errdefs@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/godror/godror@0.37.0\",\"type\":\"library\",\"name\":\"github.com/godror/godror\",\"version\":\"0.37.0\",\"purl\":\"pkg:golang/github.com/godror/godror@0.37.0\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Futf8@1.1.0\",\"type\":\"library\",\"name\":\"@protobufjs/utf8\",\"version\":\"1.1.0\",\"purl\":\"pkg:npm/%40protobufjs%2Futf8@1.1.0\"},{\"bom-ref\":\"pkg:npm/undici-types@6.19.8\",\"type\":\"library\",\"name\":\"undici-types\",\"version\":\"6.19.8\",\"purl\":\"pkg:npm/undici-types@6.19.8\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/config@1.18.21\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/config\",\"version\":\"1.18.21\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/config@1.18.21\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp@0.10.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp\",\"version\":\"0.10.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp@0.10.0\"},{\"bom-ref\":\"pkg:pypi/pymdown-extensions@10.5.0\",\"type\":\"library\",\"name\":\"pymdown-extensions\",\"version\":\"10.5.0\",\"purl\":\"pkg:pypi/pymdown-extensions@10.5.0\"},{\"bom-ref\":\"pkg:pypi/jinja2@3.0.3\",\"type\":\"library\",\"name\":\"jinja2\",\"version\":\"3.0.3\",\"purl\":\"pkg:pypi/jinja2@3.0.3\"},{\"bom-ref\":\"pkg:golang/github.com/go-toolsmith/astequal@1.2.0\",\"type\":\"library\",\"name\":\"github.com/go-toolsmith/astequal\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/go-toolsmith/astequal@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/ultraware/funlen@0.1.0\",\"type\":\"library\",\"name\":\"github.com/ultraware/funlen\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/ultraware/funlen@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2@2.4.26\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/internal/endpoints/v2\",\"version\":\"2.4.26\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2@2.4.26\"},{\"bom-ref\":\"pkg:golang/github.com/Masterminds/sprig/v3@3.3.0\",\"type\":\"library\",\"name\":\"github.com/Masterminds/sprig/v3\",\"version\":\"3.3.0\",\"purl\":\"pkg:golang/github.com/Masterminds/sprig/v3@3.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/magefile/mage@1.15.0\",\"type\":\"library\",\"name\":\"github.com/magefile/mage\",\"version\":\"1.15.0\",\"purl\":\"pkg:golang/github.com/magefile/mage@1.15.0\"},{\"bom-ref\":\"pkg:golang/github.com/youmark/pkcs8@0.0.0-20181117223130-1be2e3e5546d\",\"type\":\"library\",\"name\":\"github.com/youmark/pkcs8\",\"version\":\"0.0.0-20181117223130-1be2e3e5546d\",\"purl\":\"pkg:golang/github.com/youmark/pkcs8@0.0.0-20181117223130-1be2e3e5546d\"},{\"bom-ref\":\"pkg:golang/github.com/tinylib/msgp@1.1.6\",\"type\":\"library\",\"name\":\"github.com/tinylib/msgp\",\"version\":\"1.1.6\",\"purl\":\"pkg:golang/github.com/tinylib/msgp@1.1.6\"},{\"bom-ref\":\"pkg:golang/github.com/goware/modvendor@0.5.0\",\"type\":\"library\",\"name\":\"github.com/goware/modvendor\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/goware/modvendor@0.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/valyala/bytebufferpool@1.0.0\",\"type\":\"library\",\"name\":\"github.com/valyala/bytebufferpool\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/valyala/bytebufferpool@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/cloudflare/circl@1.5.0\",\"type\":\"library\",\"name\":\"github.com/cloudflare/circl\",\"version\":\"1.5.0\",\"purl\":\"pkg:golang/github.com/cloudflare/circl@1.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/smira/go-ftp-protocol@0.0.0-20140829150050-066b75c2b70d\",\"type\":\"library\",\"name\":\"github.com/smira/go-ftp-protocol\",\"version\":\"0.0.0-20140829150050-066b75c2b70d\",\"purl\":\"pkg:golang/github.com/smira/go-ftp-protocol@0.0.0-20140829150050-066b75c2b70d\"},{\"bom-ref\":\"pkg:golang/github.com/creack/pty@1.1.21\",\"type\":\"library\",\"name\":\"github.com/creack/pty\",\"version\":\"1.1.21\",\"purl\":\"pkg:golang/github.com/creack/pty@1.1.21\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/errdefs/pkg@0.3.0\",\"type\":\"library\",\"name\":\"github.com/containerd/errdefs/pkg\",\"version\":\"0.3.0\",\"purl\":\"pkg:golang/github.com/containerd/errdefs/pkg@0.3.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/extension/extensiontest@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/extension/extensiontest\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/extension/extensiontest@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/planetscale/vtprotobuf@0.6.1-0.20240319094008-0393e58bdf10\",\"type\":\"library\",\"name\":\"github.com/planetscale/vtprotobuf\",\"version\":\"0.6.1-0.20240319094008-0393e58bdf10\",\"purl\":\"pkg:golang/github.com/planetscale/vtprotobuf@0.6.1-0.20240319094008-0393e58bdf10\"},{\"bom-ref\":\"pkg:golang/go4.org/unsafe/assume-no-moving-gc@0.0.0-20220617031537-928513b29760\",\"type\":\"library\",\"name\":\"go4.org/unsafe/assume-no-moving-gc\",\"version\":\"0.0.0-20220617031537-928513b29760\",\"purl\":\"pkg:golang/go4.org/unsafe/assume-no-moving-gc@0.0.0-20220617031537-928513b29760\"},{\"bom-ref\":\"pkg:npm/dd-trace@5.21.0\",\"type\":\"library\",\"name\":\"dd-trace\",\"version\":\"5.21.0\",\"purl\":\"pkg:npm/dd-trace@5.21.0\"},{\"bom-ref\":\"pkg:golang/github.com/bahlo/generic-list-go@0.2.0\",\"type\":\"library\",\"name\":\"github.com/bahlo/generic-list-go\",\"version\":\"0.2.0\",\"purl\":\"pkg:golang/github.com/bahlo/generic-list-go@0.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/common@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/common\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/common@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/mitchellh/mapstructure@1.1.2\",\"type\":\"library\",\"name\":\"github.com/mitchellh/mapstructure\",\"version\":\"1.1.2\",\"purl\":\"pkg:golang/github.com/mitchellh/mapstructure@1.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/googleapis/enterprise-certificate-proxy@0.3.2\",\"type\":\"library\",\"name\":\"github.com/googleapis/enterprise-certificate-proxy\",\"version\":\"0.3.2\",\"purl\":\"pkg:golang/github.com/googleapis/enterprise-certificate-proxy@0.3.2\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/component/componentstatus@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/component/componentstatus\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/component/componentstatus@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/gopkg.in/DataDog/dd-trace-go.v1@1.54.1\",\"type\":\"library\",\"name\":\"gopkg.in/DataDog/dd-trace-go.v1\",\"version\":\"1.54.1\",\"purl\":\"pkg:golang/gopkg.in/DataDog/dd-trace-go.v1@1.54.1\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/dd-trace-go/v2@2.0.0-beta.11\",\"type\":\"library\",\"name\":\"github.com/DataDog/dd-trace-go/v2\",\"version\":\"2.0.0-beta.11\",\"purl\":\"pkg:golang/github.com/DataDog/dd-trace-go/v2@2.0.0-beta.11\"},{\"bom-ref\":\"pkg:golang/github.com/kr/fs@0.1.0\",\"type\":\"library\",\"name\":\"github.com/kr/fs\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/kr/fs@0.1.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/time@0.9.0\",\"type\":\"library\",\"name\":\"golang.org/x/time\",\"version\":\"0.9.0\",\"purl\":\"pkg:golang/golang.org/x/time@0.9.0\"},{\"bom-ref\":\"pkg:golang/gopkg.in/DataDog/dd-trace-go.v1@1.69.1\",\"type\":\"library\",\"name\":\"gopkg.in/DataDog/dd-trace-go.v1\",\"version\":\"1.69.1\",\"purl\":\"pkg:golang/gopkg.in/DataDog/dd-trace-go.v1@1.69.1\"},{\"bom-ref\":\"pkg:pypi/pyjwt@2.4.0\",\"type\":\"library\",\"name\":\"pyjwt\",\"version\":\"2.4.0\",\"purl\":\"pkg:pypi/pyjwt@2.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/configsources@1.1.32\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/internal/configsources\",\"version\":\"1.1.32\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/configsources@1.1.32\"},{\"bom-ref\":\"pkg:golang/github.com/huandu/xstrings@1.5.0\",\"type\":\"library\",\"name\":\"github.com/huandu/xstrings\",\"version\":\"1.5.0\",\"purl\":\"pkg:golang/github.com/huandu/xstrings@1.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/datadog@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/invopop/jsonschema@0.12.0\",\"type\":\"library\",\"name\":\"github.com/invopop/jsonschema\",\"version\":\"0.12.0\",\"purl\":\"pkg:golang/github.com/invopop/jsonschema@0.12.0\"},{\"bom-ref\":\"pkg:golang/modernc.org/sqlite@1.34.1\",\"type\":\"library\",\"name\":\"modernc.org/sqlite\",\"version\":\"1.34.1\",\"purl\":\"pkg:golang/modernc.org/sqlite@1.34.1\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/cgroups/v3@3.0.5\",\"type\":\"library\",\"name\":\"github.com/containerd/cgroups/v3\",\"version\":\"3.0.5\",\"purl\":\"pkg:golang/github.com/containerd/cgroups/v3@3.0.5\"},{\"bom-ref\":\"pkg:golang/github.com/google/pprof@0.0.0-20241210010833-40e02aabc2ad\",\"type\":\"library\",\"name\":\"github.com/google/pprof\",\"version\":\"0.0.0-20241210010833-40e02aabc2ad\",\"purl\":\"pkg:golang/github.com/google/pprof@0.0.0-20241210010833-40e02aabc2ad\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/sts@1.33.10\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/sts\",\"version\":\"1.33.10\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/sts@1.33.10\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus@0.119.0\"},{\"bom-ref\":\"pkg:golang/4d63.com/gochecknoglobals@0.2.1\",\"type\":\"library\",\"name\":\"4d63.com/gochecknoglobals\",\"version\":\"0.2.1\",\"purl\":\"pkg:golang/4d63.com/gochecknoglobals@0.2.1\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/executor@0.0.0-20200218194701-024d0bdd52d4\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/executor\",\"version\":\"0.0.0-20200218194701-024d0bdd52d4\",\"purl\":\"pkg:golang/code.cloudfoundry.org/executor@0.0.0-20200218194701-024d0bdd52d4\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/golang-lru@1.0.2\",\"type\":\"library\",\"name\":\"github.com/hashicorp/golang-lru\",\"version\":\"1.0.2\",\"purl\":\"pkg:golang/github.com/hashicorp/golang-lru@1.0.2\"},{\"bom-ref\":\"pkg:golang/github.com/cyphar/filepath-securejoin@0.3.4\",\"type\":\"library\",\"name\":\"github.com/cyphar/filepath-securejoin\",\"version\":\"0.3.4\",\"purl\":\"pkg:golang/github.com/cyphar/filepath-securejoin@0.3.4\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/strfmt@0.23.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/strfmt\",\"version\":\"0.23.0\",\"purl\":\"pkg:golang/github.com/go-openapi/strfmt@0.23.0\"},{\"bom-ref\":\"pkg:golang/github.com/lxn/win@0.0.0-20210218163916-a377121e959e\",\"type\":\"library\",\"name\":\"github.com/lxn/win\",\"version\":\"0.0.0-20210218163916-a377121e959e\",\"purl\":\"pkg:golang/github.com/lxn/win@0.0.0-20210218163916-a377121e959e\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/bkielbasa/cyclop@1.2.1\",\"type\":\"library\",\"name\":\"github.com/bkielbasa/cyclop\",\"version\":\"1.2.1\",\"purl\":\"pkg:golang/github.com/bkielbasa/cyclop@1.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-agent@0.0.0-20211213161047-f82981e22ca1\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-agent\",\"version\":\"0.0.0-20211213161047-f82981e22ca1\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-agent@0.0.0-20211213161047-f82981e22ca1\"},{\"bom-ref\":\"pkg:golang/go.uber.org/dig@1.17.0\",\"type\":\"library\",\"name\":\"go.uber.org/dig\",\"version\":\"1.17.0\",\"purl\":\"pkg:golang/go.uber.org/dig@1.17.0\"},{\"bom-ref\":\"pkg:golang/github.com/dustin/go-humanize@1.0.1\",\"type\":\"library\",\"name\":\"github.com/dustin/go-humanize\",\"version\":\"1.0.1\",\"purl\":\"pkg:golang/github.com/dustin/go-humanize@1.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/signalfx/sapm-proto@0.17.0\",\"type\":\"library\",\"name\":\"github.com/signalfx/sapm-proto\",\"version\":\"0.17.0\",\"purl\":\"pkg:golang/github.com/signalfx/sapm-proto@0.17.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-toolsmith/astcopy@1.1.0\",\"type\":\"library\",\"name\":\"github.com/go-toolsmith/astcopy\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/go-toolsmith/astcopy@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/go-grpc-bidirectional-streaming-example@0.0.0-20221024060302-b9cf785c02fe\",\"type\":\"library\",\"name\":\"github.com/DataDog/go-grpc-bidirectional-streaming-example\",\"version\":\"0.0.0-20221024060302-b9cf785c02fe\",\"purl\":\"pkg:golang/github.com/DataDog/go-grpc-bidirectional-streaming-example@0.0.0-20221024060302-b9cf785c02fe\"},{\"bom-ref\":\"pkg:golang/github.com/philhofer/fwd@1.1.2\",\"type\":\"library\",\"name\":\"github.com/philhofer/fwd\",\"version\":\"1.1.2\",\"purl\":\"pkg:golang/github.com/philhofer/fwd@1.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/cihub/seelog@0.0.0-20170130134532-f561c5e57575\",\"type\":\"library\",\"name\":\"github.com/cihub/seelog\",\"version\":\"0.0.0-20170130134532-f561c5e57575\",\"purl\":\"pkg:golang/github.com/cihub/seelog@0.0.0-20170130134532-f561c5e57575\"},{\"bom-ref\":\"pkg:golang/github.com/AzureAD/microsoft-authentication-library-for-go@1.2.2\",\"type\":\"library\",\"name\":\"github.com/AzureAD/microsoft-authentication-library-for-go\",\"version\":\"1.2.2\",\"purl\":\"pkg:golang/github.com/AzureAD/microsoft-authentication-library-for-go@1.2.2\"},{\"bom-ref\":\"pkg:golang/github.com/moby/sys/userns@0.1.0\",\"type\":\"library\",\"name\":\"github.com/moby/sys/userns\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/moby/sys/userns@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/OneOfOne/xxhash@1.2.8\",\"type\":\"library\",\"name\":\"github.com/OneOfOne/xxhash\",\"version\":\"1.2.8\",\"purl\":\"pkg:golang/github.com/OneOfOne/xxhash@1.2.8\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/test-infra-definitions@0.0.0-20250204162827-5ce0da569ade\",\"type\":\"library\",\"name\":\"github.com/DataDog/test-infra-definitions\",\"version\":\"0.0.0-20250204162827-5ce0da569ade\",\"purl\":\"pkg:golang/github.com/DataDog/test-infra-definitions@0.0.0-20250204162827-5ce0da569ade\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes@0.25.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes\",\"version\":\"0.25.0\",\"purl\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes@0.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/gosnmp/gosnmp@1.38.0\",\"type\":\"library\",\"name\":\"github.com/gosnmp/gosnmp\",\"version\":\"1.38.0\",\"purl\":\"pkg:golang/github.com/gosnmp/gosnmp@1.38.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/ini@1.8.2\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/internal/ini\",\"version\":\"1.8.2\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/ini@1.8.2\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/kms@1.19.2\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/kms\",\"version\":\"1.19.2\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/kms@1.19.2\"},{\"bom-ref\":\"pkg:golang/github.com/nozzle/throttler@0.0.0-20180817012639-2ea982251481\",\"type\":\"library\",\"name\":\"github.com/nozzle/throttler\",\"version\":\"0.0.0-20180817012639-2ea982251481\",\"purl\":\"pkg:golang/github.com/nozzle/throttler@0.0.0-20180817012639-2ea982251481\"},{\"bom-ref\":\"pkg:golang/github.com/mailru/easyjson@0.7.7\",\"type\":\"library\",\"name\":\"github.com/mailru/easyjson\",\"version\":\"0.7.7\",\"purl\":\"pkg:golang/github.com/mailru/easyjson@0.7.7\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/contrib/bridges/otelzap@0.9.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/contrib/bridges/otelzap\",\"version\":\"0.9.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/contrib/bridges/otelzap@0.9.0\"},{\"bom-ref\":\"pkg:golang/github.com/blang/semver/v4@4.0.0\",\"type\":\"library\",\"name\":\"github.com/blang/semver/v4\",\"version\":\"4.0.0\",\"purl\":\"pkg:golang/github.com/blang/semver/v4@4.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/opentracing/basictracer-go@1.1.0\",\"type\":\"library\",\"name\":\"github.com/opentracing/basictracer-go\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/opentracing/basictracer-go@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/compute/v2@2.81.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-azure-native-sdk/compute/v2\",\"version\":\"2.81.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/compute/v2@2.81.0\"},{\"bom-ref\":\"pkg:golang/github.com/lightstep/go-expohisto@1.0.0\",\"type\":\"library\",\"name\":\"github.com/lightstep/go-expohisto\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/lightstep/go-expohisto@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/credentials@1.17.55\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/credentials\",\"version\":\"1.17.55\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/credentials@1.17.55\"},{\"bom-ref\":\"pkg:golang/github.com/kr/text@0.2.0\",\"type\":\"library\",\"name\":\"github.com/kr/text\",\"version\":\"0.2.0\",\"purl\":\"pkg:golang/github.com/kr/text@0.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/client_model@0.5.0\",\"type\":\"library\",\"name\":\"github.com/prometheus/client_model\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/prometheus/client_model@0.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/briandowns/spinner@1.23.0\",\"type\":\"library\",\"name\":\"github.com/briandowns/spinner\",\"version\":\"1.23.0\",\"purl\":\"pkg:golang/github.com/briandowns/spinner@1.23.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-kit/log@0.2.1\",\"type\":\"library\",\"name\":\"github.com/go-kit/log\",\"version\":\"0.2.1\",\"purl\":\"pkg:golang/github.com/go-kit/log@0.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/djherbis/times@1.6.0\",\"type\":\"library\",\"name\":\"github.com/djherbis/times\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/github.com/djherbis/times@1.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/matttproud/golang_protobuf_extensions@1.0.4\",\"type\":\"library\",\"name\":\"github.com/matttproud/golang_protobuf_extensions\",\"version\":\"1.0.4\",\"purl\":\"pkg:golang/github.com/matttproud/golang_protobuf_extensions@1.0.4\"},{\"bom-ref\":\"pkg:golang/github.com/gordonklaus/ineffassign@0.1.0\",\"type\":\"library\",\"name\":\"github.com/gordonklaus/ineffassign\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/gordonklaus/ineffassign@0.1.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/processor/batchprocessor@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/processor/batchprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/processor/batchprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/receiver/receivertest@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/receiver/receivertest\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/receiver/receivertest@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/golangci/unconvert@0.0.0-20240309020433-c5143eacb3ed\",\"type\":\"library\",\"name\":\"github.com/golangci/unconvert\",\"version\":\"0.0.0-20240309020433-c5143eacb3ed\",\"purl\":\"pkg:golang/github.com/golangci/unconvert@0.0.0-20240309020433-c5143eacb3ed\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/letsencrypt/boulder@0.0.0-20231026200631-000cd05d5491\",\"type\":\"library\",\"name\":\"github.com/letsencrypt/boulder\",\"version\":\"0.0.0-20231026200631-000cd05d5491\",\"purl\":\"pkg:golang/github.com/letsencrypt/boulder@0.0.0-20231026200631-000cd05d5491\"},{\"bom-ref\":\"pkg:golang/github.com/pkg/browser@0.0.0-20240102092130-5ac0b6a4141c\",\"type\":\"library\",\"name\":\"github.com/pkg/browser\",\"version\":\"0.0.0-20240102092130-5ac0b6a4141c\",\"purl\":\"pkg:golang/github.com/pkg/browser@0.0.0-20240102092130-5ac0b6a4141c\"},{\"bom-ref\":\"pkg:golang/github.com/xlab/treeprint@1.2.0\",\"type\":\"library\",\"name\":\"github.com/xlab/treeprint\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/xlab/treeprint@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/asaskevich/govalidator@0.0.0-20230301143203-a9d515a09cc2\",\"type\":\"library\",\"name\":\"github.com/asaskevich/govalidator\",\"version\":\"0.0.0-20230301143203-a9d515a09cc2\",\"purl\":\"pkg:golang/github.com/asaskevich/govalidator@0.0.0-20230301143203-a9d515a09cc2\"},{\"bom-ref\":\"pkg:golang/github.com/digitorus/pkcs7@0.0.0-20230818184609-3a137a874352\",\"type\":\"library\",\"name\":\"github.com/digitorus/pkcs7\",\"version\":\"0.0.0-20230818184609-3a137a874352\",\"purl\":\"pkg:golang/github.com/digitorus/pkcs7@0.0.0-20230818184609-3a137a874352\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/spec@0.21.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/spec\",\"version\":\"0.21.0\",\"purl\":\"pkg:golang/github.com/go-openapi/spec@0.21.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-ini/ini@1.67.0\",\"type\":\"library\",\"name\":\"github.com/go-ini/ini\",\"version\":\"1.67.0\",\"purl\":\"pkg:golang/github.com/go-ini/ini@1.67.0\"},{\"bom-ref\":\"pkg:pypi/pandoc@2.4\",\"type\":\"library\",\"name\":\"pandoc\",\"version\":\"2.4\",\"purl\":\"pkg:pypi/pandoc@2.4\"},{\"bom-ref\":\"pkg:golang/github.com/kouhin/envflag@0.0.0-20150818174321-0e9a86061649\",\"type\":\"library\",\"name\":\"github.com/kouhin/envflag\",\"version\":\"0.0.0-20150818174321-0e9a86061649\",\"purl\":\"pkg:golang/github.com/kouhin/envflag@0.0.0-20150818174321-0e9a86061649\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-go/v5@5.2.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-go/v5\",\"version\":\"5.2.0\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-go/v5@5.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/google/cel-go@0.20.1\",\"type\":\"library\",\"name\":\"github.com/google/cel-go\",\"version\":\"0.20.1\",\"purl\":\"pkg:golang/github.com/google/cel-go@0.20.1\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/gostackparse@0.7.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/gostackparse\",\"version\":\"0.7.0\",\"purl\":\"pkg:golang/github.com/DataDog/gostackparse@0.7.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/exporter/exportertest@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/exporter/exportertest\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/exporter/exportertest@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/libp2p/go-reuseport@0.2.0\",\"type\":\"library\",\"name\":\"github.com/libp2p/go-reuseport\",\"version\":\"0.2.0\",\"purl\":\"pkg:golang/github.com/libp2p/go-reuseport@0.2.0\"},{\"bom-ref\":\"pkg:pypi/mkdocs-material@9.5.1\",\"type\":\"library\",\"name\":\"mkdocs-material\",\"version\":\"9.5.1\",\"purl\":\"pkg:pypi/mkdocs-material@9.5.1\"},{\"bom-ref\":\"pkg:golang/github.com/subosito/gotenv@1.6.0\",\"type\":\"library\",\"name\":\"github.com/subosito/gotenv\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/github.com/subosito/gotenv@1.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/mkrautz/goar@0.0.0-20150919110319-282caa8bd9da\",\"type\":\"library\",\"name\":\"github.com/mkrautz/goar\",\"version\":\"0.0.0-20150919110319-282caa8bd9da\",\"purl\":\"pkg:golang/github.com/mkrautz/goar@0.0.0-20150919110319-282caa8bd9da\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Finquire@1.1.0\",\"type\":\"library\",\"name\":\"@protobufjs/inquire\",\"version\":\"1.1.0\",\"purl\":\"pkg:npm/%40protobufjs%2Finquire@1.1.0\"},{\"bom-ref\":\"pkg:pypi/reno@3.5.0\",\"type\":\"library\",\"name\":\"reno\",\"version\":\"3.5.0\",\"purl\":\"pkg:pypi/reno@3.5.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/apimachinery@0.31.3\",\"type\":\"library\",\"name\":\"k8s.io/apimachinery\",\"version\":\"0.31.3\",\"purl\":\"pkg:golang/k8s.io/apimachinery@0.31.3\"},{\"bom-ref\":\"pkg:golang/github.com/mitchellh/mapstructure@1.5.1-0.20231216201459-8508981c8b6c\",\"type\":\"library\",\"name\":\"github.com/mitchellh/mapstructure\",\"version\":\"1.5.1-0.20231216201459-8508981c8b6c\",\"purl\":\"pkg:golang/github.com/mitchellh/mapstructure@1.5.1-0.20231216201459-8508981c8b6c\"},{\"bom-ref\":\"pkg:golang/github.com/containernetworking/plugins@1.4.1\",\"type\":\"library\",\"name\":\"github.com/containernetworking/plugins\",\"version\":\"1.4.1\",\"purl\":\"pkg:golang/github.com/containernetworking/plugins@1.4.1\"},{\"bom-ref\":\"pkg:golang/github.com/knqyf263/go-apk-version@0.0.0-20200609155635-041fdbb8563f\",\"type\":\"library\",\"name\":\"github.com/knqyf263/go-apk-version\",\"version\":\"0.0.0-20200609155635-041fdbb8563f\",\"purl\":\"pkg:golang/github.com/knqyf263/go-apk-version@0.0.0-20200609155635-041fdbb8563f\"},{\"bom-ref\":\"pkg:golang/github.com/leodido/go-syslog/v4@4.2.0\",\"type\":\"library\",\"name\":\"github.com/leodido/go-syslog/v4\",\"version\":\"4.2.0\",\"purl\":\"pkg:golang/github.com/leodido/go-syslog/v4@4.2.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/config/configtls@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/config/configtls\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/config/configtls@1.25.0\"},{\"bom-ref\":\"pkg:golang/go4.org/mem@0.0.0-20220726221520-4f986261bf13\",\"type\":\"library\",\"name\":\"go4.org/mem\",\"version\":\"0.0.0-20220726221520-4f986261bf13\",\"purl\":\"pkg:golang/go4.org/mem@0.0.0-20220726221520-4f986261bf13\"},{\"bom-ref\":\"pkg:golang/github.com/moby/sys/user@0.3.0\",\"type\":\"library\",\"name\":\"github.com/moby/sys/user\",\"version\":\"0.3.0\",\"purl\":\"pkg:golang/github.com/moby/sys/user@0.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-git/go-billy/v5@5.6.1\",\"type\":\"library\",\"name\":\"github.com/go-git/go-billy/v5\",\"version\":\"5.6.1\",\"purl\":\"pkg:golang/github.com/go-git/go-billy/v5@5.6.1\"},{\"bom-ref\":\"pkg:golang/github.com/pkg/errors@0.9.1\",\"type\":\"library\",\"name\":\"github.com/pkg/errors\",\"version\":\"0.9.1\",\"purl\":\"pkg:golang/github.com/pkg/errors@0.9.1\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-agent/pkg/obfuscate@0.45.0-rc.1\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-agent/pkg/obfuscate\",\"version\":\"0.45.0-rc.1\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-agent/pkg/obfuscate@0.45.0-rc.1\"},{\"bom-ref\":\"pkg:golang/github.com/linode/linodego@1.37.0\",\"type\":\"library\",\"name\":\"github.com/linode/linodego\",\"version\":\"1.37.0\",\"purl\":\"pkg:golang/github.com/linode/linodego@1.37.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-enry/go-license-detector/v4@4.3.0\",\"type\":\"library\",\"name\":\"github.com/go-enry/go-license-detector/v4\",\"version\":\"4.3.0\",\"purl\":\"pkg:golang/github.com/go-enry/go-license-detector/v4@4.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/twmb/murmur3@1.1.8\",\"type\":\"library\",\"name\":\"github.com/twmb/murmur3\",\"version\":\"1.1.8\",\"purl\":\"pkg:golang/github.com/twmb/murmur3@1.1.8\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-docker/sdk/v4@4.5.8\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-docker/sdk/v4\",\"version\":\"4.5.8\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-docker/sdk/v4@4.5.8\"},{\"bom-ref\":\"pkg:npm/event-lite@0.1.3\",\"type\":\"library\",\"name\":\"event-lite\",\"version\":\"0.1.3\",\"purl\":\"pkg:npm/event-lite@0.1.3\"},{\"bom-ref\":\"pkg:golang/go4.org/netipx@0.0.0-20220812043211-3cc044ffd68d\",\"type\":\"library\",\"name\":\"go4.org/netipx\",\"version\":\"0.0.0-20220812043211-3cc044ffd68d\",\"purl\":\"pkg:golang/go4.org/netipx@0.0.0-20220812043211-3cc044ffd68d\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go@1.55.5\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go\",\"version\":\"1.55.5\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go@1.55.5\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/config/configopaque@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/config/configopaque\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/config/configopaque@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/beevik/ntp@1.4.3\",\"type\":\"library\",\"name\":\"github.com/beevik/ntp\",\"version\":\"1.4.3\",\"purl\":\"pkg:golang/github.com/beevik/ntp@1.4.3\"},{\"bom-ref\":\"pkg:golang/k8s.io/api@0.31.3\",\"type\":\"library\",\"name\":\"k8s.io/api\",\"version\":\"0.31.3\",\"purl\":\"pkg:golang/k8s.io/api@0.31.3\"},{\"bom-ref\":\"pkg:golang/github.com/morikuni/aec@1.0.0\",\"type\":\"library\",\"name\":\"github.com/morikuni/aec\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/morikuni/aec@1.0.0\"},{\"bom-ref\":\"pkg:npm/yocto-queue@0.1.0\",\"type\":\"library\",\"name\":\"yocto-queue\",\"version\":\"0.1.0\",\"purl\":\"pkg:npm/yocto-queue@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/go-libddwaf/v3@3.5.1\",\"type\":\"library\",\"name\":\"github.com/DataDog/go-libddwaf/v3\",\"version\":\"3.5.1\",\"purl\":\"pkg:golang/github.com/DataDog/go-libddwaf/v3@3.5.1\"},{\"bom-ref\":\"pkg:golang/github.com/lufia/plan9stats@0.0.0-20220913051719-115f729f3c8c\",\"type\":\"library\",\"name\":\"github.com/lufia/plan9stats\",\"version\":\"0.0.0-20220913051719-115f729f3c8c\",\"purl\":\"pkg:golang/github.com/lufia/plan9stats@0.0.0-20220913051719-115f729f3c8c\"},{\"bom-ref\":\"pkg:npm/%40datadog%2Fsketches-js@2.1.1\",\"type\":\"library\",\"name\":\"@datadog/sketches-js\",\"version\":\"2.1.1\",\"purl\":\"pkg:npm/%40datadog%2Fsketches-js@2.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/cncf/xds/go@0.0.0-20240905190251-b4127c9b8d78\",\"type\":\"library\",\"name\":\"github.com/cncf/xds/go\",\"version\":\"0.0.0-20240905190251-b4127c9b8d78\",\"purl\":\"pkg:golang/github.com/cncf/xds/go@0.0.0-20240905190251-b4127c9b8d78\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/mitchellh/hashstructure/v2@2.0.2\",\"type\":\"library\",\"name\":\"github.com/mitchellh/hashstructure/v2\",\"version\":\"2.0.2\",\"purl\":\"pkg:golang/github.com/mitchellh/hashstructure/v2@2.0.2\"},{\"bom-ref\":\"pkg:golang/github.com/grpc-ecosystem/grpc-gateway/v2@2.26.0\",\"type\":\"library\",\"name\":\"github.com/grpc-ecosystem/grpc-gateway/v2\",\"version\":\"2.26.0\",\"purl\":\"pkg:golang/github.com/grpc-ecosystem/grpc-gateway/v2@2.26.0\"},{\"bom-ref\":\"pkg:golang/github.com/moricho/tparallel@0.3.2\",\"type\":\"library\",\"name\":\"github.com/moricho/tparallel\",\"version\":\"0.3.2\",\"purl\":\"pkg:golang/github.com/moricho/tparallel@0.3.2\"},{\"bom-ref\":\"pkg:golang/github.com/golangci/gofmt@0.0.0-20240816233607-d8596aa466a9\",\"type\":\"library\",\"name\":\"github.com/golangci/gofmt\",\"version\":\"0.0.0-20240816233607-d8596aa466a9\",\"purl\":\"pkg:golang/github.com/golangci/gofmt@0.0.0-20240816233607-d8596aa466a9\"},{\"bom-ref\":\"pkg:golang/github.com/tinylib/msgp@1.1.8\",\"type\":\"library\",\"name\":\"github.com/tinylib/msgp\",\"version\":\"1.1.8\",\"purl\":\"pkg:golang/github.com/tinylib/msgp@1.1.8\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/sso@1.24.12\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/sso\",\"version\":\"1.24.12\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/sso@1.24.12\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata@0.24.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata\",\"version\":\"0.24.0\",\"purl\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata@0.24.0\"},{\"bom-ref\":\"pkg:golang/github.com/ldez/tagliatelle@0.5.0\",\"type\":\"library\",\"name\":\"github.com/ldez/tagliatelle\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/ldez/tagliatelle@0.5.0\"},{\"bom-ref\":\"pkg:golang/go.uber.org/zap@1.23.0\",\"type\":\"library\",\"name\":\"go.uber.org/zap\",\"version\":\"1.23.0\",\"purl\":\"pkg:golang/go.uber.org/zap@1.23.0\"},{\"bom-ref\":\"pkg:golang/github.com/iancoleman/strcase@0.3.0\",\"type\":\"library\",\"name\":\"github.com/iancoleman/strcase\",\"version\":\"0.3.0\",\"purl\":\"pkg:golang/github.com/iancoleman/strcase@0.3.0\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/diego-logging-client@0.0.0-20200130234554-60ef08820a45\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/diego-logging-client\",\"version\":\"0.0.0-20200130234554-60ef08820a45\",\"purl\":\"pkg:golang/code.cloudfoundry.org/diego-logging-client@0.0.0-20200130234554-60ef08820a45\"},{\"bom-ref\":\"pkg:golang/github.com/muesli/cancelreader@0.2.2\",\"type\":\"library\",\"name\":\"github.com/muesli/cancelreader\",\"version\":\"0.2.2\",\"purl\":\"pkg:golang/github.com/muesli/cancelreader@0.2.2\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/aptly@1.5.3\",\"type\":\"library\",\"name\":\"github.com/DataDog/aptly\",\"version\":\"1.5.3\",\"purl\":\"pkg:golang/github.com/DataDog/aptly@1.5.3\"},{\"bom-ref\":\"pkg:golang/golang.org/x/xerrors@0.0.0-20240903120638-7835f813f4da\",\"type\":\"library\",\"name\":\"golang.org/x/xerrors\",\"version\":\"0.0.0-20240903120638-7835f813f4da\",\"purl\":\"pkg:golang/golang.org/x/xerrors@0.0.0-20240903120638-7835f813f4da\"},{\"bom-ref\":\"pkg:golang/github.com/emicklei/dot@0.15.0\",\"type\":\"library\",\"name\":\"github.com/emicklei/dot\",\"version\":\"0.15.0\",\"purl\":\"pkg:golang/github.com/emicklei/dot@0.15.0\"},{\"bom-ref\":\"pkg:golang/github.com/gobuffalo/flect@1.0.2\",\"type\":\"library\",\"name\":\"github.com/gobuffalo/flect\",\"version\":\"1.0.2\",\"purl\":\"pkg:golang/github.com/gobuffalo/flect@1.0.2\"},{\"bom-ref\":\"pkg:golang/go.etcd.io/etcd/client/v2@2.306.0-alpha.0\",\"type\":\"library\",\"name\":\"go.etcd.io/etcd/client/v2\",\"version\":\"2.306.0-alpha.0\",\"purl\":\"pkg:golang/go.etcd.io/etcd/client/v2@2.306.0-alpha.0\"},{\"bom-ref\":\"pkg:golang/github.com/avast/retry-go/v4@4.6.0\",\"type\":\"library\",\"name\":\"github.com/avast/retry-go/v4\",\"version\":\"4.6.0\",\"purl\":\"pkg:golang/github.com/avast/retry-go/v4@4.6.0\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Fbase64@1.1.2\",\"type\":\"library\",\"name\":\"@protobufjs/base64\",\"version\":\"1.1.2\",\"purl\":\"pkg:npm/%40protobufjs%2Fbase64@1.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/MakeNowJust/heredoc@1.0.0\",\"type\":\"library\",\"name\":\"github.com/MakeNowJust/heredoc\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/MakeNowJust/heredoc@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/twitchtv/twirp@8.1.3+incompatible\",\"type\":\"library\",\"name\":\"github.com/twitchtv/twirp\",\"version\":\"8.1.3+incompatible\",\"purl\":\"pkg:golang/github.com/twitchtv/twirp@8.1.3+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/docker/cli@27.5.0+incompatible\",\"type\":\"library\",\"name\":\"github.com/docker/cli\",\"version\":\"27.5.0+incompatible\",\"purl\":\"pkg:golang/github.com/docker/cli@27.5.0+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/lxn/walk@0.0.0-20210112085537-c389da54e794\",\"type\":\"library\",\"name\":\"github.com/lxn/walk\",\"version\":\"0.0.0-20210112085537-c389da54e794\",\"purl\":\"pkg:golang/github.com/lxn/walk@0.0.0-20210112085537-c389da54e794\"},{\"bom-ref\":\"pkg:golang/github.com/go-errors/errors@1.4.2\",\"type\":\"library\",\"name\":\"github.com/go-errors/errors\",\"version\":\"1.4.2\",\"purl\":\"pkg:golang/github.com/go-errors/errors@1.4.2\"},{\"bom-ref\":\"pkg:golang/github.com/cheggaaa/pb/v3@3.1.5\",\"type\":\"library\",\"name\":\"github.com/cheggaaa/pb/v3\",\"version\":\"3.1.5\",\"purl\":\"pkg:golang/github.com/cheggaaa/pb/v3@3.1.5\"},{\"bom-ref\":\"pkg:golang/stdlib@1.23.0\",\"type\":\"library\",\"name\":\"stdlib\",\"version\":\"1.23.0\",\"purl\":\"pkg:golang/stdlib@1.23.0\"},{\"bom-ref\":\"pkg:golang/github.com/vishvananda/netns@0.0.5\",\"type\":\"library\",\"name\":\"github.com/vishvananda/netns\",\"version\":\"0.0.5\",\"purl\":\"pkg:golang/github.com/vishvananda/netns@0.0.5\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel@1.27.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel\",\"version\":\"1.27.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel@1.27.0\"},{\"bom-ref\":\"pkg:npm/semver@7.6.3\",\"type\":\"library\",\"name\":\"semver\",\"version\":\"7.6.3\",\"purl\":\"pkg:npm/semver@7.6.3\"},{\"bom-ref\":\"pkg:golang/github.com/bhmj/jsonslice@0.0.0-20200323023432-92c3edaad8e2\",\"type\":\"library\",\"name\":\"github.com/bhmj/jsonslice\",\"version\":\"0.0.0-20200323023432-92c3edaad8e2\",\"purl\":\"pkg:golang/github.com/bhmj/jsonslice@0.0.0-20200323023432-92c3edaad8e2\"},{\"bom-ref\":\"pkg:golang/k8s.io/cri-api@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/cri-api\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/cri-api@0.31.2\"},{\"bom-ref\":\"pkg:golang/github.com/goccy/go-json@0.10.5\",\"type\":\"library\",\"name\":\"github.com/goccy/go-json\",\"version\":\"0.10.5\",\"purl\":\"pkg:golang/github.com/goccy/go-json@0.10.5\"},{\"bom-ref\":\"pkg:golang/github.com/VividCortex/ewma@1.2.0\",\"type\":\"library\",\"name\":\"github.com/VividCortex/ewma\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/VividCortex/ewma@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2@2.81.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2\",\"version\":\"2.81.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/containerservice/v2@2.81.0\"},{\"bom-ref\":\"pkg:golang/github.com/agext/levenshtein@1.2.3\",\"type\":\"library\",\"name\":\"github.com/agext/levenshtein\",\"version\":\"1.2.3\",\"purl\":\"pkg:golang/github.com/agext/levenshtein@1.2.3\"},{\"bom-ref\":\"pkg:npm/lru-cache@7.18.3\",\"type\":\"library\",\"name\":\"lru-cache\",\"version\":\"7.18.3\",\"purl\":\"pkg:npm/lru-cache@7.18.3\"},{\"bom-ref\":\"pkg:golang/github.com/fxamacker/cbor/v2@2.7.0\",\"type\":\"library\",\"name\":\"github.com/fxamacker/cbor/v2\",\"version\":\"2.7.0\",\"purl\":\"pkg:golang/github.com/fxamacker/cbor/v2@2.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/charmbracelet/x/ansi@0.6.0\",\"type\":\"library\",\"name\":\"github.com/charmbracelet/x/ansi\",\"version\":\"0.6.0\",\"purl\":\"pkg:golang/github.com/charmbracelet/x/ansi@0.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/pelletier/go-toml/v2@2.2.2\",\"type\":\"library\",\"name\":\"github.com/pelletier/go-toml/v2\",\"version\":\"2.2.2\",\"purl\":\"pkg:golang/github.com/pelletier/go-toml/v2@2.2.2\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/rsc.io/binaryregexp@0.2.0\",\"type\":\"library\",\"name\":\"rsc.io/binaryregexp\",\"version\":\"0.2.0\",\"purl\":\"pkg:golang/rsc.io/binaryregexp@0.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/tklauser/numcpus@0.8.0\",\"type\":\"library\",\"name\":\"github.com/tklauser/numcpus\",\"version\":\"0.8.0\",\"purl\":\"pkg:golang/github.com/tklauser/numcpus@0.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/outcaste-io/ristretto@0.2.3\",\"type\":\"library\",\"name\":\"github.com/outcaste-io/ristretto\",\"version\":\"0.2.3\",\"purl\":\"pkg:golang/github.com/outcaste-io/ristretto@0.2.3\"},{\"bom-ref\":\"pkg:golang/gopkg.in/natefinch/lumberjack.v2@2.2.1\",\"type\":\"library\",\"name\":\"gopkg.in/natefinch/lumberjack.v2\",\"version\":\"2.2.1\",\"purl\":\"pkg:golang/gopkg.in/natefinch/lumberjack.v2@2.2.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/sdk/metric@1.27.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/sdk/metric\",\"version\":\"1.27.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/sdk/metric@1.27.0\"},{\"bom-ref\":\"pkg:golang/github.com/knqyf263/go-rpmdb@0.1.1\",\"type\":\"library\",\"name\":\"github.com/knqyf263/go-rpmdb\",\"version\":\"0.1.1\",\"purl\":\"pkg:golang/github.com/knqyf263/go-rpmdb@0.1.1\"},{\"bom-ref\":\"pkg:golang/sigs.k8s.io/structured-merge-diff/v4@4.4.1\",\"type\":\"library\",\"name\":\"sigs.k8s.io/structured-merge-diff/v4\",\"version\":\"4.4.1\",\"purl\":\"pkg:golang/sigs.k8s.io/structured-merge-diff/v4@4.4.1\"},{\"bom-ref\":\"pkg:golang/github.com/CycloneDX/cyclonedx-go@0.9.1\",\"type\":\"library\",\"name\":\"github.com/CycloneDX/cyclonedx-go\",\"version\":\"0.9.1\",\"purl\":\"pkg:golang/github.com/CycloneDX/cyclonedx-go@0.9.1\"},{\"bom-ref\":\"pkg:golang/golang.org/x/net@0.10.0\",\"type\":\"library\",\"name\":\"golang.org/x/net\",\"version\":\"0.10.0\",\"purl\":\"pkg:golang/golang.org/x/net@0.10.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/sso@1.12.8\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/sso\",\"version\":\"1.12.8\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/sso@1.12.8\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/secure-systems-lab/go-securesystemslib@0.8.0\",\"type\":\"library\",\"name\":\"github.com/secure-systems-lab/go-securesystemslib\",\"version\":\"0.8.0\",\"purl\":\"pkg:golang/github.com/secure-systems-lab/go-securesystemslib@0.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-agent/pkg/util/sort@0.51.0-rc.1\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-agent/pkg/util/sort\",\"version\":\"0.51.0-rc.1\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-agent/pkg/util/sort@0.51.0-rc.1\"},{\"bom-ref\":\"pkg:golang/github.com/yusufpapurcu/wmi@1.2.4\",\"type\":\"library\",\"name\":\"github.com/yusufpapurcu/wmi\",\"version\":\"1.2.4\",\"purl\":\"pkg:golang/github.com/yusufpapurcu/wmi@1.2.4\"},{\"bom-ref\":\"pkg:golang/go.uber.org/automaxprocs@1.6.0\",\"type\":\"library\",\"name\":\"go.uber.org/automaxprocs\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/go.uber.org/automaxprocs@1.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/jdkato/prose@1.1.0\",\"type\":\"library\",\"name\":\"github.com/jdkato/prose\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/jdkato/prose@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/Masterminds/semver/v3@3.3.1\",\"type\":\"library\",\"name\":\"github.com/Masterminds/semver/v3\",\"version\":\"3.3.1\",\"purl\":\"pkg:golang/github.com/Masterminds/semver/v3@3.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/sketches-go@1.4.3\",\"type\":\"library\",\"name\":\"github.com/DataDog/sketches-go\",\"version\":\"1.4.3\",\"purl\":\"pkg:golang/github.com/DataDog/sketches-go@1.4.3\"},{\"bom-ref\":\"pkg:golang/github.com/secure-systems-lab/go-securesystemslib@0.7.0\",\"type\":\"library\",\"name\":\"github.com/secure-systems-lab/go-securesystemslib\",\"version\":\"0.7.0\",\"purl\":\"pkg:golang/github.com/secure-systems-lab/go-securesystemslib@0.7.0\"},{\"bom-ref\":\"pkg:pypi/libvirt-python@10.9.0\",\"type\":\"library\",\"name\":\"libvirt-python\",\"version\":\"10.9.0\",\"purl\":\"pkg:pypi/libvirt-python@10.9.0\"},{\"bom-ref\":\"pkg:golang/github.com/goccy/go-yaml@1.11.0\",\"type\":\"library\",\"name\":\"github.com/goccy/go-yaml\",\"version\":\"1.11.0\",\"purl\":\"pkg:golang/github.com/goccy/go-yaml@1.11.0\"},{\"bom-ref\":\"pkg:golang/google.golang.org/genproto@0.0.0-20240903143218-8af14fe29dc1\",\"type\":\"library\",\"name\":\"google.golang.org/genproto\",\"version\":\"0.0.0-20240903143218-8af14fe29dc1\",\"purl\":\"pkg:golang/google.golang.org/genproto@0.0.0-20240903143218-8af14fe29dc1\"},{\"bom-ref\":\"pkg:golang/google.golang.org/genproto/googleapis/api@0.0.0-20250115164207-1a7da9e5054f\",\"type\":\"library\",\"name\":\"google.golang.org/genproto/googleapis/api\",\"version\":\"0.0.0-20250115164207-1a7da9e5054f\",\"purl\":\"pkg:golang/google.golang.org/genproto/googleapis/api@0.0.0-20250115164207-1a7da9e5054f\"},{\"bom-ref\":\"pkg:golang/github.com/ettle/strcase@0.2.0\",\"type\":\"library\",\"name\":\"github.com/ettle/strcase\",\"version\":\"0.2.0\",\"purl\":\"pkg:golang/github.com/ettle/strcase@0.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/oliveagle/jsonpath@0.0.0-20180606110733-2e52cf6e6852\",\"type\":\"library\",\"name\":\"github.com/oliveagle/jsonpath\",\"version\":\"0.0.0-20180606110733-2e52cf6e6852\",\"purl\":\"pkg:golang/github.com/oliveagle/jsonpath@0.0.0-20180606110733-2e52cf6e6852\"},{\"bom-ref\":\"pkg:pypi/toml@0.10.2\",\"type\":\"library\",\"name\":\"toml\",\"version\":\"0.10.2\",\"purl\":\"pkg:pypi/toml@0.10.2\"},{\"bom-ref\":\"pkg:golang/github.com/jingyugao/rowserrcheck@1.1.1\",\"type\":\"library\",\"name\":\"github.com/jingyugao/rowserrcheck\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/jingyugao/rowserrcheck@1.1.1\"},{\"bom-ref\":\"pkg:pypi/mkdocs-git-revision-date-localized-plugin@1.2.1\",\"type\":\"library\",\"name\":\"mkdocs-git-revision-date-localized-plugin\",\"version\":\"1.2.1\",\"purl\":\"pkg:pypi/mkdocs-git-revision-date-localized-plugin@1.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go@1.44.168\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go\",\"version\":\"1.44.168\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go@1.44.168\"},{\"bom-ref\":\"pkg:golang/github.com/maratori/testableexamples@1.0.0\",\"type\":\"library\",\"name\":\"github.com/maratori/testableexamples\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/maratori/testableexamples@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/knqyf263/go-rpm-version@0.0.0-20220614171824-631e686d1075\",\"type\":\"library\",\"name\":\"github.com/knqyf263/go-rpm-version\",\"version\":\"0.0.0-20220614171824-631e686d1075\",\"purl\":\"pkg:golang/github.com/knqyf263/go-rpm-version@0.0.0-20220614171824-631e686d1075\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/sketches-go@1.4.1\",\"type\":\"library\",\"name\":\"github.com/DataDog/sketches-go\",\"version\":\"1.4.1\",\"purl\":\"pkg:golang/github.com/DataDog/sketches-go@1.4.1\"},{\"bom-ref\":\"pkg:golang/github.com/DisposaBoy/JsonConfigReader@0.0.0-20201129172854-99cf318d67e7\",\"type\":\"library\",\"name\":\"github.com/DisposaBoy/JsonConfigReader\",\"version\":\"0.0.0-20201129172854-99cf318d67e7\",\"purl\":\"pkg:golang/github.com/DisposaBoy/JsonConfigReader@0.0.0-20201129172854-99cf318d67e7\"},{\"bom-ref\":\"pkg:golang/go.uber.org/fx@1.23.0\",\"type\":\"library\",\"name\":\"go.uber.org/fx\",\"version\":\"1.23.0\",\"purl\":\"pkg:golang/go.uber.org/fx@1.23.0\"},{\"bom-ref\":\"pkg:golang/github.com/4meepo/tagalign@1.3.4\",\"type\":\"library\",\"name\":\"github.com/4meepo/tagalign\",\"version\":\"1.3.4\",\"purl\":\"pkg:golang/github.com/4meepo/tagalign@1.3.4\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor@0.119.0\"},{\"bom-ref\":\"pkg:npm/retry@0.13.1\",\"type\":\"library\",\"name\":\"retry\",\"version\":\"0.13.1\",\"purl\":\"pkg:npm/retry@0.13.1\"},{\"bom-ref\":\"pkg:golang/go.starlark.net@0.0.0-20231101134539-556fd59b42f6\",\"type\":\"library\",\"name\":\"go.starlark.net\",\"version\":\"0.0.0-20231101134539-556fd59b42f6\",\"purl\":\"pkg:golang/go.starlark.net@0.0.0-20231101134539-556fd59b42f6\"},{\"bom-ref\":\"pkg:golang/github.com/peterbourgon/diskv@2.0.1+incompatible\",\"type\":\"library\",\"name\":\"github.com/peterbourgon/diskv\",\"version\":\"2.0.1+incompatible\",\"purl\":\"pkg:golang/github.com/peterbourgon/diskv@2.0.1+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/pjbgf/sha1cd@0.3.0\",\"type\":\"library\",\"name\":\"github.com/pjbgf/sha1cd\",\"version\":\"0.3.0\",\"purl\":\"pkg:golang/github.com/pjbgf/sha1cd@0.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-aws/sdk/v6@6.66.2\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-aws/sdk/v6\",\"version\":\"6.66.2\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-aws/sdk/v6@6.66.2\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-command/sdk@1.0.1\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-command/sdk\",\"version\":\"1.0.1\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-command/sdk@1.0.1\"},{\"bom-ref\":\"pkg:pypi/yattag@1.15.2\",\"type\":\"library\",\"name\":\"yattag\",\"version\":\"1.15.2\",\"purl\":\"pkg:pypi/yattag@1.15.2\"},{\"bom-ref\":\"pkg:golang/github.com/cloudflare/cbpfc@0.0.0-20240920015331-ff978e94500b\",\"type\":\"library\",\"name\":\"github.com/cloudflare/cbpfc\",\"version\":\"0.0.0-20240920015331-ff978e94500b\",\"purl\":\"pkg:golang/github.com/cloudflare/cbpfc@0.0.0-20240920015331-ff978e94500b\"},{\"bom-ref\":\"pkg:golang/github.com/DATA-DOG/go-sqlmock@1.5.2\",\"type\":\"library\",\"name\":\"github.com/DATA-DOG/go-sqlmock\",\"version\":\"1.5.2\",\"purl\":\"pkg:golang/github.com/DATA-DOG/go-sqlmock@1.5.2\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/contrib/config@0.14.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/contrib/config\",\"version\":\"0.14.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/contrib/config@0.14.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger@0.119.0\"},{\"bom-ref\":\"pkg:golang/modernc.org/memory@1.8.0\",\"type\":\"library\",\"name\":\"modernc.org/memory\",\"version\":\"1.8.0\",\"purl\":\"pkg:golang/modernc.org/memory@1.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/uptrace/bun/driver/pgdriver@1.2.5\",\"type\":\"library\",\"name\":\"github.com/uptrace/bun/driver/pgdriver\",\"version\":\"1.2.5\",\"purl\":\"pkg:golang/github.com/uptrace/bun/driver/pgdriver@1.2.5\"},{\"bom-ref\":\"pkg:golang/github.com/munnerz/goautoneg@0.0.0-20191010083416-a7dc8b61c822\",\"type\":\"library\",\"name\":\"github.com/munnerz/goautoneg\",\"version\":\"0.0.0-20191010083416-a7dc8b61c822\",\"purl\":\"pkg:golang/github.com/munnerz/goautoneg@0.0.0-20191010083416-a7dc8b61c822\"},{\"bom-ref\":\"pkg:golang/github.com/transparency-dev/merkle@0.0.2\",\"type\":\"library\",\"name\":\"github.com/transparency-dev/merkle\",\"version\":\"0.0.2\",\"purl\":\"pkg:golang/github.com/transparency-dev/merkle@0.0.2\"},{\"bom-ref\":\"pkg:golang/github.com/rs/zerolog@1.33.0\",\"type\":\"library\",\"name\":\"github.com/rs/zerolog\",\"version\":\"1.33.0\",\"purl\":\"pkg:golang/github.com/rs/zerolog@1.33.0\"},{\"bom-ref\":\"pkg:golang/go.uber.org/atomic@1.11.0\",\"type\":\"library\",\"name\":\"go.uber.org/atomic\",\"version\":\"1.11.0\",\"purl\":\"pkg:golang/go.uber.org/atomic@1.11.0\"},{\"bom-ref\":\"pkg:golang/sigs.k8s.io/yaml@1.4.0\",\"type\":\"library\",\"name\":\"sigs.k8s.io/yaml\",\"version\":\"1.4.0\",\"purl\":\"pkg:golang/sigs.k8s.io/yaml@1.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/cespare/xxhash/v2@2.3.0\",\"type\":\"library\",\"name\":\"github.com/cespare/xxhash/v2\",\"version\":\"2.3.0\",\"purl\":\"pkg:golang/github.com/cespare/xxhash/v2@2.3.0\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/tlsconfig@0.0.0-20200131000646-bbe0f8da39b3\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/tlsconfig\",\"version\":\"0.0.0-20200131000646-bbe0f8da39b3\",\"purl\":\"pkg:golang/code.cloudfoundry.org/tlsconfig@0.0.0-20200131000646-bbe0f8da39b3\"},{\"bom-ref\":\"pkg:golang/github.com/breml/bidichk@0.2.7\",\"type\":\"library\",\"name\":\"github.com/breml/bidichk\",\"version\":\"0.2.7\",\"purl\":\"pkg:golang/github.com/breml/bidichk@0.2.7\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/checksum@1.5.3\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/internal/checksum\",\"version\":\"1.5.3\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/checksum@1.5.3\"},{\"bom-ref\":\"pkg:golang/github.com/tidwall/pretty@1.2.1\",\"type\":\"library\",\"name\":\"github.com/tidwall/pretty\",\"version\":\"1.2.1\",\"purl\":\"pkg:golang/github.com/tidwall/pretty@1.2.1\"},{\"bom-ref\":\"pkg:golang/k8s.io/metrics@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/metrics\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/metrics@0.31.2\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/nikos@1.12.9\",\"type\":\"library\",\"name\":\"github.com/DataDog/nikos\",\"version\":\"1.12.9\",\"purl\":\"pkg:golang/github.com/DataDog/nikos@1.12.9\"},{\"bom-ref\":\"pkg:golang/go4.org/intern@0.0.0-20230525184215-6c62f75575cb\",\"type\":\"library\",\"name\":\"go4.org/intern\",\"version\":\"0.0.0-20230525184215-6c62f75575cb\",\"purl\":\"pkg:golang/go4.org/intern@0.0.0-20230525184215-6c62f75575cb\"},{\"bom-ref\":\"pkg:golang/github.com/pkg/sftp@1.13.7\",\"type\":\"library\",\"name\":\"github.com/pkg/sftp\",\"version\":\"1.13.7\",\"purl\":\"pkg:golang/github.com/pkg/sftp@1.13.7\"},{\"bom-ref\":\"pkg:npm/%40opentelemetry%2Fsemantic-conventions@1.25.1\",\"type\":\"library\",\"name\":\"@opentelemetry/semantic-conventions\",\"version\":\"1.25.1\",\"purl\":\"pkg:npm/%40opentelemetry%2Fsemantic-conventions@1.25.1\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/cronexpr@1.1.2\",\"type\":\"library\",\"name\":\"github.com/hashicorp/cronexpr\",\"version\":\"1.1.2\",\"purl\":\"pkg:golang/github.com/hashicorp/cronexpr@1.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/tmthrgd/go-hex@0.0.0-20190904060850-447a3041c3bc\",\"type\":\"library\",\"name\":\"github.com/tmthrgd/go-hex\",\"version\":\"0.0.0-20190904060850-447a3041c3bc\",\"purl\":\"pkg:golang/github.com/tmthrgd/go-hex@0.0.0-20190904060850-447a3041c3bc\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ecr@1.38.1\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/ecr\",\"version\":\"1.38.1\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ecr@1.38.1\"},{\"bom-ref\":\"pkg:golang/github.com/knadh/koanf/maps@0.1.1\",\"type\":\"library\",\"name\":\"github.com/knadh/koanf/maps\",\"version\":\"0.1.1\",\"purl\":\"pkg:golang/github.com/knadh/koanf/maps@0.1.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/prometheus@0.56.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/prometheus\",\"version\":\"0.56.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/prometheus@0.56.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ssooidc@1.14.8\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/ssooidc\",\"version\":\"1.14.8\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ssooidc@1.14.8\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/exporter/debugexporter@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/exporter/debugexporter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/exporter/debugexporter@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/jsonreference@0.21.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/jsonreference\",\"version\":\"0.21.0\",\"purl\":\"pkg:golang/github.com/go-openapi/jsonreference@0.21.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/pdata@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/pdata\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/pdata@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go@1.55.6\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go\",\"version\":\"1.55.6\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go@1.55.6\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/cobra@1.7.0\",\"type\":\"library\",\"name\":\"github.com/spf13/cobra\",\"version\":\"1.7.0\",\"purl\":\"pkg:golang/github.com/spf13/cobra@1.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/jackc/puddle/v2@2.2.1\",\"type\":\"library\",\"name\":\"github.com/jackc/puddle/v2\",\"version\":\"2.2.1\",\"purl\":\"pkg:golang/github.com/jackc/puddle/v2@2.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/gopacket@0.0.0-20250206221735-64e5a8c92d94\",\"type\":\"library\",\"name\":\"github.com/DataDog/gopacket\",\"version\":\"0.0.0-20250206221735-64e5a8c92d94\",\"purl\":\"pkg:golang/github.com/DataDog/gopacket@0.0.0-20250206221735-64e5a8c92d94\"},{\"bom-ref\":\"pkg:golang/github.com/grafana/regexp@0.0.0-20240518133315-a468a5bfb3bc\",\"type\":\"library\",\"name\":\"github.com/grafana/regexp\",\"version\":\"0.0.0-20240518133315-a468a5bfb3bc\",\"purl\":\"pkg:golang/github.com/grafana/regexp@0.0.0-20240518133315-a468a5bfb3bc\"},{\"bom-ref\":\"pkg:golang/github.com/vektra/mockery/v2@2.49.2\",\"type\":\"library\",\"name\":\"github.com/vektra/mockery/v2\",\"version\":\"2.49.2\",\"purl\":\"pkg:golang/github.com/vektra/mockery/v2@2.49.2\"},{\"bom-ref\":\"pkg:golang/github.com/google/gopacket@1.1.19\",\"type\":\"library\",\"name\":\"github.com/google/gopacket\",\"version\":\"1.1.19\",\"purl\":\"pkg:golang/github.com/google/gopacket@1.1.19\"},{\"bom-ref\":\"pkg:golang/github.com/Showmax/go-fqdn@1.0.0\",\"type\":\"library\",\"name\":\"github.com/Showmax/go-fqdn\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/Showmax/go-fqdn@1.0.0\"},{\"bom-ref\":\"pkg:golang/cloud.google.com/go/auth@0.7.0\",\"type\":\"library\",\"name\":\"cloud.google.com/go/auth\",\"version\":\"0.7.0\",\"purl\":\"pkg:golang/cloud.google.com/go/auth@0.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/glaslos/ssdeep@0.4.0\",\"type\":\"library\",\"name\":\"github.com/glaslos/ssdeep\",\"version\":\"0.4.0\",\"purl\":\"pkg:golang/github.com/glaslos/ssdeep@0.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/tidwall/sjson@1.2.5\",\"type\":\"library\",\"name\":\"github.com/tidwall/sjson\",\"version\":\"1.2.5\",\"purl\":\"pkg:golang/github.com/tidwall/sjson@1.2.5\"},{\"bom-ref\":\"pkg:golang/github.com/kolo/xmlrpc@0.0.0-20220921171641-a4b6fa1dd06b\",\"type\":\"library\",\"name\":\"github.com/kolo/xmlrpc\",\"version\":\"0.0.0-20220921171641-a4b6fa1dd06b\",\"purl\":\"pkg:golang/github.com/kolo/xmlrpc@0.0.0-20220921171641-a4b6fa1dd06b\"},{\"bom-ref\":\"pkg:npm/%40types%2Fnode@22.5.0\",\"type\":\"library\",\"name\":\"@types/node\",\"version\":\"22.5.0\",\"purl\":\"pkg:npm/%40types%2Fnode@22.5.0\"},{\"bom-ref\":\"pkg:maven/com.amazonaws/aws-lambda-java-log4j2@1.3.0\",\"type\":\"library\",\"name\":\"com.amazonaws:aws-lambda-java-log4j2\",\"version\":\"1.3.0\",\"purl\":\"pkg:maven/com.amazonaws/aws-lambda-java-log4j2@1.3.0\"},{\"bom-ref\":\"pkg:golang/sigs.k8s.io/controller-runtime@0.19.0\",\"type\":\"library\",\"name\":\"sigs.k8s.io/controller-runtime\",\"version\":\"0.19.0\",\"purl\":\"pkg:golang/sigs.k8s.io/controller-runtime@0.19.0\"},{\"bom-ref\":\"pkg:pypi/watchdog@6.0.0\",\"type\":\"library\",\"name\":\"watchdog\",\"version\":\"6.0.0\",\"purl\":\"pkg:pypi/watchdog@6.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/client_model@0.6.1\",\"type\":\"library\",\"name\":\"github.com/prometheus/client_model\",\"version\":\"0.6.1\",\"purl\":\"pkg:golang/github.com/prometheus/client_model@0.6.1\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-lambda-go@1.34.1\",\"type\":\"library\",\"name\":\"github.com/aws/aws-lambda-go\",\"version\":\"1.34.1\",\"purl\":\"pkg:golang/github.com/aws/aws-lambda-go@1.34.1\"},{\"bom-ref\":\"pkg:golang/github.com/moby/spdystream@0.4.0\",\"type\":\"library\",\"name\":\"github.com/moby/spdystream\",\"version\":\"0.4.0\",\"purl\":\"pkg:golang/github.com/moby/spdystream@0.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/tinylib/msgp@1.2.5\",\"type\":\"library\",\"name\":\"github.com/tinylib/msgp\",\"version\":\"1.2.5\",\"purl\":\"pkg:golang/github.com/tinylib/msgp@1.2.5\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/pdatautil@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/NYTimes/gziphandler@1.1.1\",\"type\":\"library\",\"name\":\"github.com/NYTimes/gziphandler\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/NYTimes/gziphandler@1.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/coreos/pkg@0.0.0-20180928190104-399ea9e2e55f\",\"type\":\"library\",\"name\":\"github.com/coreos/pkg\",\"version\":\"0.0.0-20180928190104-399ea9e2e55f\",\"purl\":\"pkg:golang/github.com/coreos/pkg@0.0.0-20180928190104-399ea9e2e55f\"},{\"bom-ref\":\"pkg:golang/github.com/olekukonko/tablewriter@0.0.5\",\"type\":\"library\",\"name\":\"github.com/olekukonko/tablewriter\",\"version\":\"0.0.5\",\"purl\":\"pkg:golang/github.com/olekukonko/tablewriter@0.0.5\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/confmap@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/confmap\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/confmap@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/envoyproxy/go-control-plane@0.13.1\",\"type\":\"library\",\"name\":\"github.com/envoyproxy/go-control-plane\",\"version\":\"0.13.1\",\"purl\":\"pkg:golang/github.com/envoyproxy/go-control-plane@0.13.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/metric@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/metric\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/metric@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/digitorus/timestamp@0.0.0-20231217203849-220c5c2851b7\",\"type\":\"library\",\"name\":\"github.com/digitorus/timestamp\",\"version\":\"0.0.0-20231217203849-220c5c2851b7\",\"purl\":\"pkg:golang/github.com/digitorus/timestamp@0.0.0-20231217203849-220c5c2851b7\"},{\"bom-ref\":\"pkg:golang/github.com/mattn/go-zglob@0.0.2-0.20191112051448-a8912a37f9e7\",\"type\":\"library\",\"name\":\"github.com/mattn/go-zglob\",\"version\":\"0.0.2-0.20191112051448-a8912a37f9e7\",\"purl\":\"pkg:golang/github.com/mattn/go-zglob@0.0.2-0.20191112051448-a8912a37f9e7\"},{\"bom-ref\":\"pkg:maven/org.bouncycastle/bcpkix-fips@2.0.7\",\"type\":\"library\",\"name\":\"org.bouncycastle:bcpkix-fips\",\"version\":\"2.0.7\",\"purl\":\"pkg:maven/org.bouncycastle/bcpkix-fips@2.0.7\"},{\"bom-ref\":\"pkg:golang/github.com/andybalholm/brotli@1.0.5\",\"type\":\"library\",\"name\":\"github.com/andybalholm/brotli\",\"version\":\"1.0.5\",\"purl\":\"pkg:golang/github.com/andybalholm/brotli@1.0.5\"},{\"bom-ref\":\"pkg:golang/github.com/karamaru-alpha/copyloopvar@1.1.0\",\"type\":\"library\",\"name\":\"github.com/karamaru-alpha/copyloopvar\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/karamaru-alpha/copyloopvar@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/tedsuo/rata@1.0.0\",\"type\":\"library\",\"name\":\"github.com/tedsuo/rata\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/tedsuo/rata@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/feature/ec2/imds@1.13.2\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/feature/ec2/imds\",\"version\":\"1.13.2\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/feature/ec2/imds@1.13.2\"},{\"bom-ref\":\"pkg:golang/github.com/texttheater/golang-levenshtein@1.0.1\",\"type\":\"library\",\"name\":\"github.com/texttheater/golang-levenshtein\",\"version\":\"1.0.1\",\"purl\":\"pkg:golang/github.com/texttheater/golang-levenshtein@1.0.1\"},{\"bom-ref\":\"pkg:maven/org.bouncycastle/bcutil-fips@2.0.3\",\"type\":\"library\",\"name\":\"org.bouncycastle:bcutil-fips\",\"version\":\"2.0.3\",\"purl\":\"pkg:maven/org.bouncycastle/bcutil-fips@2.0.3\"},{\"bom-ref\":\"pkg:golang/github.com/owenrumney/go-sarif/v2@2.3.3\",\"type\":\"library\",\"name\":\"github.com/owenrumney/go-sarif/v2\",\"version\":\"2.3.3\",\"purl\":\"pkg:golang/github.com/owenrumney/go-sarif/v2@2.3.3\"},{\"bom-ref\":\"pkg:golang/github.com/itchyny/timefmt-go@0.1.6\",\"type\":\"library\",\"name\":\"github.com/itchyny/timefmt-go\",\"version\":\"0.1.6\",\"purl\":\"pkg:golang/github.com/itchyny/timefmt-go@0.1.6\"},{\"bom-ref\":\"pkg:golang/github.com/ghostiam/protogetter@0.3.6\",\"type\":\"library\",\"name\":\"github.com/ghostiam/protogetter\",\"version\":\"0.3.6\",\"purl\":\"pkg:golang/github.com/ghostiam/protogetter@0.3.6\"},{\"bom-ref\":\"pkg:golang/github.com/Intevation/jsonpath@0.2.1\",\"type\":\"library\",\"name\":\"github.com/Intevation/jsonpath\",\"version\":\"0.2.1\",\"purl\":\"pkg:golang/github.com/Intevation/jsonpath@0.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/tommy-muehle/go-mnd/v2@2.5.1\",\"type\":\"library\",\"name\":\"github.com/tommy-muehle/go-mnd/v2\",\"version\":\"2.5.1\",\"purl\":\"pkg:golang/github.com/tommy-muehle/go-mnd/v2@2.5.1\"},{\"bom-ref\":\"pkg:golang/github.com/vmihailenco/msgpack/v4@4.3.13\",\"type\":\"library\",\"name\":\"github.com/vmihailenco/msgpack/v4\",\"version\":\"4.3.13\",\"purl\":\"pkg:golang/github.com/vmihailenco/msgpack/v4@4.3.13\"},{\"bom-ref\":\"pkg:golang/github.com/quasilyte/gogrep@0.5.0\",\"type\":\"library\",\"name\":\"github.com/quasilyte/gogrep\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/quasilyte/gogrep@0.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/xeipuuv/gojsonpointer@0.0.0-20190905194746-02993c407bfb\",\"type\":\"library\",\"name\":\"github.com/xeipuuv/gojsonpointer\",\"version\":\"0.0.0-20190905194746-02993c407bfb\",\"purl\":\"pkg:golang/github.com/xeipuuv/gojsonpointer@0.0.0-20190905194746-02993c407bfb\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/cast@1.3.0\",\"type\":\"library\",\"name\":\"github.com/spf13/cast\",\"version\":\"1.3.0\",\"purl\":\"pkg:golang/github.com/spf13/cast@1.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/golangci/misspell@0.6.0\",\"type\":\"library\",\"name\":\"github.com/golangci/misspell\",\"version\":\"0.6.0\",\"purl\":\"pkg:golang/github.com/golangci/misspell@0.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/tonistiigi/go-csvvalue@0.0.0-20240710180619-ddb21b71c0b4\",\"type\":\"library\",\"name\":\"github.com/tonistiigi/go-csvvalue\",\"version\":\"0.0.0-20240710180619-ddb21b71c0b4\",\"purl\":\"pkg:golang/github.com/tonistiigi/go-csvvalue@0.0.0-20240710180619-ddb21b71c0b4\"},{\"bom-ref\":\"pkg:golang/github.com/opencontainers/image-spec@1.1.0\",\"type\":\"library\",\"name\":\"github.com/opencontainers/image-spec\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/opencontainers/image-spec@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/google/s2a-go@0.1.7\",\"type\":\"library\",\"name\":\"github.com/google/s2a-go\",\"version\":\"0.1.7\",\"purl\":\"pkg:golang/github.com/google/s2a-go@0.1.7\"},{\"bom-ref\":\"pkg:golang/k8s.io/sample-controller@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/sample-controller\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/sample-controller@0.31.2\"},{\"bom-ref\":\"pkg:golang/github.com/timakin/bodyclose@0.0.0-20230421092635-574207250966\",\"type\":\"library\",\"name\":\"github.com/timakin/bodyclose\",\"version\":\"0.0.0-20230421092635-574207250966\",\"purl\":\"pkg:golang/github.com/timakin/bodyclose@0.0.0-20230421092635-574207250966\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ebs@1.22.1\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/ebs\",\"version\":\"1.22.1\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ebs@1.22.1\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/common/sigv4@0.1.0\",\"type\":\"library\",\"name\":\"github.com/prometheus/common/sigv4\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/prometheus/common/sigv4@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/platforms@0.2.1\",\"type\":\"library\",\"name\":\"github.com/containerd/platforms\",\"version\":\"0.2.1\",\"purl\":\"pkg:golang/github.com/containerd/platforms@0.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/esc@0.11.1\",\"type\":\"library\",\"name\":\"github.com/pulumi/esc\",\"version\":\"0.11.1\",\"purl\":\"pkg:golang/github.com/pulumi/esc@0.11.1\"},{\"bom-ref\":\"pkg:golang/github.com/go-git/gcfg@1.5.1-0.20230307220236-3a3c6141e376\",\"type\":\"library\",\"name\":\"github.com/go-git/gcfg\",\"version\":\"1.5.1-0.20230307220236-3a3c6141e376\",\"purl\":\"pkg:golang/github.com/go-git/gcfg@1.5.1-0.20230307220236-3a3c6141e376\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/connector/xconnector@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/connector/xconnector\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/connector/xconnector@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/featuregate@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/featuregate\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/featuregate@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/robfig/cron/v3@3.0.1\",\"type\":\"library\",\"name\":\"github.com/robfig/cron/v3\",\"version\":\"3.0.1\",\"purl\":\"pkg:golang/github.com/robfig/cron/v3@3.0.1\"},{\"bom-ref\":\"pkg:golang/google.golang.org/api@0.188.0\",\"type\":\"library\",\"name\":\"google.golang.org/api\",\"version\":\"0.188.0\",\"purl\":\"pkg:golang/google.golang.org/api@0.188.0\"},{\"bom-ref\":\"pkg:pypi/thefuzz@0.22.1\",\"type\":\"library\",\"name\":\"thefuzz\",\"version\":\"0.22.1\",\"purl\":\"pkg:pypi/thefuzz@0.22.1\"},{\"bom-ref\":\"pkg:golang/github.com/sassoftware/relic@7.2.1+incompatible\",\"type\":\"library\",\"name\":\"github.com/sassoftware/relic\",\"version\":\"7.2.1+incompatible\",\"purl\":\"pkg:golang/github.com/sassoftware/relic@7.2.1+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/ekzhu/minhash-lsh@0.0.0-20171225071031-5c06ee8586a1\",\"type\":\"library\",\"name\":\"github.com/ekzhu/minhash-lsh\",\"version\":\"0.0.0-20171225071031-5c06ee8586a1\",\"purl\":\"pkg:golang/github.com/ekzhu/minhash-lsh@0.0.0-20171225071031-5c06ee8586a1\"},{\"bom-ref\":\"pkg:golang/github.com/vbatts/tar-split@0.11.6\",\"type\":\"library\",\"name\":\"github.com/vbatts/tar-split\",\"version\":\"0.11.6\",\"purl\":\"pkg:golang/github.com/vbatts/tar-split@0.11.6\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/config/configauth@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/config/configauth\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/config/configauth@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/ionos-cloud/sdk-go/v6@6.1.11\",\"type\":\"library\",\"name\":\"github.com/ionos-cloud/sdk-go/v6\",\"version\":\"6.1.11\",\"purl\":\"pkg:golang/github.com/ionos-cloud/sdk-go/v6@6.1.11\"},{\"bom-ref\":\"pkg:golang/github.com/maratori/testpackage@1.1.1\",\"type\":\"library\",\"name\":\"github.com/maratori/testpackage\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/maratori/testpackage@1.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/Code-Hex/go-generics-cache@1.5.1\",\"type\":\"library\",\"name\":\"github.com/Code-Hex/go-generics-cache\",\"version\":\"1.5.1\",\"purl\":\"pkg:golang/github.com/Code-Hex/go-generics-cache@1.5.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/proto/otlp@1.5.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/proto/otlp\",\"version\":\"1.5.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/proto/otlp@1.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/opentracing/opentracing-go@1.2.0\",\"type\":\"library\",\"name\":\"github.com/opentracing/opentracing-go\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/opentracing/opentracing-go@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding@1.12.2\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding\",\"version\":\"1.12.2\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding@1.12.2\"},{\"bom-ref\":\"pkg:golang/github.com/lunixbochs/struc@0.0.0-20200707160740-784aaebc1d40\",\"type\":\"library\",\"name\":\"github.com/lunixbochs/struc\",\"version\":\"0.0.0-20200707160740-784aaebc1d40\",\"purl\":\"pkg:golang/github.com/lunixbochs/struc@0.0.0-20200707160740-784aaebc1d40\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Feventemitter@1.1.0\",\"type\":\"library\",\"name\":\"@protobufjs/eventemitter\",\"version\":\"1.1.0\",\"purl\":\"pkg:npm/%40protobufjs%2Feventemitter@1.1.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/arch@0.13.0\",\"type\":\"library\",\"name\":\"golang.org/x/arch\",\"version\":\"0.13.0\",\"purl\":\"pkg:golang/golang.org/x/arch@0.13.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/sts@1.18.9\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/sts\",\"version\":\"1.18.9\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/sts@1.18.9\"},{\"bom-ref\":\"pkg:golang/github.com/syndtr/goleveldb@1.0.1-0.20220721030215-126854af5e6d\",\"type\":\"library\",\"name\":\"github.com/syndtr/goleveldb\",\"version\":\"1.0.1-0.20220721030215-126854af5e6d\",\"purl\":\"pkg:golang/github.com/syndtr/goleveldb@1.0.1-0.20220721030215-126854af5e6d\"},{\"bom-ref\":\"pkg:golang/github.com/sashamelentyev/usestdlibvars@1.27.0\",\"type\":\"library\",\"name\":\"github.com/sashamelentyev/usestdlibvars\",\"version\":\"1.27.0\",\"purl\":\"pkg:golang/github.com/sashamelentyev/usestdlibvars@1.27.0\"},{\"bom-ref\":\"pkg:golang/stdlib@1.18\",\"type\":\"library\",\"name\":\"stdlib\",\"version\":\"1.18\",\"purl\":\"pkg:golang/stdlib@1.18\"},{\"bom-ref\":\"pkg:golang/github.com/AlekSi/pointer@1.2.0\",\"type\":\"library\",\"name\":\"github.com/AlekSi/pointer\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/AlekSi/pointer@1.2.0\"},{\"bom-ref\":\"pkg:pypi/beautifulsoup4@4.12.3\",\"type\":\"library\",\"name\":\"beautifulsoup4\",\"version\":\"4.12.3\",\"purl\":\"pkg:pypi/beautifulsoup4@4.12.3\"},{\"bom-ref\":\"pkg:golang/github.com/mattn/go-runewidth@0.0.16\",\"type\":\"library\",\"name\":\"github.com/mattn/go-runewidth\",\"version\":\"0.0.16\",\"purl\":\"pkg:golang/github.com/mattn/go-runewidth@0.0.16\"},{\"bom-ref\":\"pkg:golang/github.com/magiconair/properties@1.8.1\",\"type\":\"library\",\"name\":\"github.com/magiconair/properties\",\"version\":\"1.8.1\",\"purl\":\"pkg:golang/github.com/magiconair/properties@1.8.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/pipeline/xpipeline@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/pipeline/xpipeline\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/pipeline/xpipeline@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/wk8/go-ordered-map/v2@2.1.8\",\"type\":\"library\",\"name\":\"github.com/wk8/go-ordered-map/v2\",\"version\":\"2.1.8\",\"purl\":\"pkg:golang/github.com/wk8/go-ordered-map/v2@2.1.8\"},{\"bom-ref\":\"pkg:golang/github.com/sassoftware/go-rpmutils@0.4.0\",\"type\":\"library\",\"name\":\"github.com/sassoftware/go-rpmutils\",\"version\":\"0.4.0\",\"purl\":\"pkg:golang/github.com/sassoftware/go-rpmutils@0.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/mattn/go-isatty@0.0.20\",\"type\":\"library\",\"name\":\"github.com/mattn/go-isatty\",\"version\":\"0.0.20\",\"purl\":\"pkg:golang/github.com/mattn/go-isatty@0.0.20\"},{\"bom-ref\":\"pkg:golang/github.com/erikgeiser/coninput@0.0.0-20211004153227-1c3628e74d0f\",\"type\":\"library\",\"name\":\"github.com/erikgeiser/coninput\",\"version\":\"0.0.0-20211004153227-1c3628e74d0f\",\"purl\":\"pkg:golang/github.com/erikgeiser/coninput@0.0.0-20211004153227-1c3628e74d0f\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/scraper/scraperhelper@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/scraper/scraperhelper\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/scraper/scraperhelper@0.119.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/time@0.3.0\",\"type\":\"library\",\"name\":\"golang.org/x/time\",\"version\":\"0.3.0\",\"purl\":\"pkg:golang/golang.org/x/time@0.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/charmbracelet/bubbletea@1.2.4\",\"type\":\"library\",\"name\":\"github.com/charmbracelet/bubbletea\",\"version\":\"1.2.4\",\"purl\":\"pkg:golang/github.com/charmbracelet/bubbletea@1.2.4\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/exporter/nopexporter@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/exporter/nopexporter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/exporter/nopexporter@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-xray-sdk-go@1.8.0\",\"type\":\"library\",\"name\":\"github.com/aws/aws-xray-sdk-go\",\"version\":\"1.8.0\",\"purl\":\"pkg:golang/github.com/aws/aws-xray-sdk-go@1.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/yeya24/promlinter@0.3.0\",\"type\":\"library\",\"name\":\"github.com/yeya24/promlinter\",\"version\":\"0.3.0\",\"purl\":\"pkg:golang/github.com/yeya24/promlinter@0.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/AdaLogics/go-fuzz-headers@0.0.0-20230811130428-ced1acdcaa24\",\"type\":\"library\",\"name\":\"github.com/AdaLogics/go-fuzz-headers\",\"version\":\"0.0.0-20230811130428-ced1acdcaa24\",\"purl\":\"pkg:golang/github.com/AdaLogics/go-fuzz-headers@0.0.0-20230811130428-ced1acdcaa24\"},{\"bom-ref\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/internal@1.10.0\",\"type\":\"library\",\"name\":\"github.com/Azure/azure-sdk-for-go/sdk/internal\",\"version\":\"1.10.0\",\"purl\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/internal@1.10.0\"},{\"bom-ref\":\"pkg:golang/github.com/swaggest/jsonschema-go@0.3.70\",\"type\":\"library\",\"name\":\"github.com/swaggest/jsonschema-go\",\"version\":\"0.3.70\",\"purl\":\"pkg:golang/github.com/swaggest/jsonschema-go@0.3.70\"},{\"bom-ref\":\"pkg:golang/github.com/magiconair/properties@1.8.7\",\"type\":\"library\",\"name\":\"github.com/magiconair/properties\",\"version\":\"1.8.7\",\"purl\":\"pkg:golang/github.com/magiconair/properties@1.8.7\"},{\"bom-ref\":\"pkg:golang/github.com/davecgh/go-spew@1.1.1\",\"type\":\"library\",\"name\":\"github.com/davecgh/go-spew\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/davecgh/go-spew@1.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/go-redis/redis/v8@8.11.5\",\"type\":\"library\",\"name\":\"github.com/go-redis/redis/v8\",\"version\":\"8.11.5\",\"purl\":\"pkg:golang/github.com/go-redis/redis/v8@8.11.5\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/agent-payload/v5@5.0.143\",\"type\":\"library\",\"name\":\"github.com/DataDog/agent-payload/v5\",\"version\":\"5.0.143\",\"purl\":\"pkg:golang/github.com/DataDog/agent-payload/v5@5.0.143\"},{\"bom-ref\":\"pkg:golang/github.com/frapposelli/wwhrd@0.4.0\",\"type\":\"library\",\"name\":\"github.com/frapposelli/wwhrd\",\"version\":\"0.4.0\",\"purl\":\"pkg:golang/github.com/frapposelli/wwhrd@0.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs@0.25.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs\",\"version\":\"0.25.0\",\"purl\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs@0.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/chrusty/protoc-gen-jsonschema@0.0.0-20240212064413-73d5723042b8\",\"type\":\"library\",\"name\":\"github.com/chrusty/protoc-gen-jsonschema\",\"version\":\"0.0.0-20240212064413-73d5723042b8\",\"purl\":\"pkg:golang/github.com/chrusty/protoc-gen-jsonschema@0.0.0-20240212064413-73d5723042b8\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Ffetch@1.1.0\",\"type\":\"library\",\"name\":\"@protobufjs/fetch\",\"version\":\"1.1.0\",\"purl\":\"pkg:npm/%40protobufjs%2Ffetch@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/xeipuuv/gojsonschema@1.2.0\",\"type\":\"library\",\"name\":\"github.com/xeipuuv/gojsonschema\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/xeipuuv/gojsonschema@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/protocolbuffers/protoscope@0.0.0-20221109213918-8e7a6aafa2c9\",\"type\":\"library\",\"name\":\"github.com/protocolbuffers/protoscope\",\"version\":\"0.0.0-20221109213918-8e7a6aafa2c9\",\"purl\":\"pkg:golang/github.com/protocolbuffers/protoscope@0.0.0-20221109213918-8e7a6aafa2c9\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/cast@1.7.1\",\"type\":\"library\",\"name\":\"github.com/spf13/cast\",\"version\":\"1.7.1\",\"purl\":\"pkg:golang/github.com/spf13/cast@1.7.1\"},{\"bom-ref\":\"pkg:npm/node-addon-api@6.1.0\",\"type\":\"library\",\"name\":\"node-addon-api\",\"version\":\"6.1.0\",\"purl\":\"pkg:npm/node-addon-api@6.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/stretchr/objx@0.5.2\",\"type\":\"library\",\"name\":\"github.com/stretchr/objx\",\"version\":\"0.5.2\",\"purl\":\"pkg:golang/github.com/stretchr/objx@0.5.2\"},{\"bom-ref\":\"pkg:golang/github.com/tidwall/match@1.1.1\",\"type\":\"library\",\"name\":\"github.com/tidwall/match\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/tidwall/match@1.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-api-client-go@1.16.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-api-client-go\",\"version\":\"1.16.0\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-api-client-go@1.16.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdoutlog@0.10.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/stdout/stdoutlog\",\"version\":\"0.10.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdoutlog@0.10.0\"},{\"bom-ref\":\"pkg:golang/github.com/fsnotify/fsnotify@1.4.7\",\"type\":\"library\",\"name\":\"github.com/fsnotify/fsnotify\",\"version\":\"1.4.7\",\"purl\":\"pkg:golang/github.com/fsnotify/fsnotify@1.4.7\"},{\"bom-ref\":\"pkg:golang/github.com/anchore/go-struct-converter@0.0.0-20221118182256-c68fdcfa2092\",\"type\":\"library\",\"name\":\"github.com/anchore/go-struct-converter\",\"version\":\"0.0.0-20221118182256-c68fdcfa2092\",\"purl\":\"pkg:golang/github.com/anchore/go-struct-converter@0.0.0-20221118182256-c68fdcfa2092\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/swag@0.22.9\",\"type\":\"library\",\"name\":\"github.com/go-openapi/swag\",\"version\":\"0.22.9\",\"purl\":\"pkg:golang/github.com/go-openapi/swag@0.22.9\"},{\"bom-ref\":\"pkg:golang/github.com/rcrowley/go-metrics@0.0.0-20201227073835-cf1acfcdf475\",\"type\":\"library\",\"name\":\"github.com/rcrowley/go-metrics\",\"version\":\"0.0.0-20201227073835-cf1acfcdf475\",\"purl\":\"pkg:golang/github.com/rcrowley/go-metrics@0.0.0-20201227073835-cf1acfcdf475\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/scaleway/scaleway-sdk-go@1.0.0-beta.29\",\"type\":\"library\",\"name\":\"github.com/scaleway/scaleway-sdk-go\",\"version\":\"1.0.0-beta.29\",\"purl\":\"pkg:golang/github.com/scaleway/scaleway-sdk-go@1.0.0-beta.29\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/serf@0.10.1\",\"type\":\"library\",\"name\":\"github.com/hashicorp/serf\",\"version\":\"0.10.1\",\"purl\":\"pkg:golang/github.com/hashicorp/serf@0.10.1\"},{\"bom-ref\":\"pkg:golang/github.com/dnephin/pflag@1.0.7\",\"type\":\"library\",\"name\":\"github.com/dnephin/pflag\",\"version\":\"1.0.7\",\"purl\":\"pkg:golang/github.com/dnephin/pflag@1.0.7\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/extension/extensioncapabilities@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/extension/extensioncapabilities\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/extension/extensioncapabilities@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-git/go-billy/v5@5.6.0\",\"type\":\"library\",\"name\":\"github.com/go-git/go-billy/v5\",\"version\":\"5.6.0\",\"purl\":\"pkg:golang/github.com/go-git/go-billy/v5@5.6.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/time@0.5.0\",\"type\":\"library\",\"name\":\"golang.org/x/time\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/golang.org/x/time@0.5.0\"},{\"bom-ref\":\"pkg:golang/google.golang.org/protobuf@1.31.0\",\"type\":\"library\",\"name\":\"google.golang.org/protobuf\",\"version\":\"1.31.0\",\"purl\":\"pkg:golang/google.golang.org/protobuf@1.31.0\"},{\"bom-ref\":\"pkg:golang/gopkg.in/Knetic/govaluate.v3@3.0.0\",\"type\":\"library\",\"name\":\"gopkg.in/Knetic/govaluate.v3\",\"version\":\"3.0.0\",\"purl\":\"pkg:golang/gopkg.in/Knetic/govaluate.v3@3.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/alecthomas/participle@0.7.1\",\"type\":\"library\",\"name\":\"github.com/alecthomas/participle\",\"version\":\"0.7.1\",\"purl\":\"pkg:golang/github.com/alecthomas/participle@0.7.1\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/afero@1.9.5\",\"type\":\"library\",\"name\":\"github.com/spf13/afero\",\"version\":\"1.9.5\",\"purl\":\"pkg:golang/github.com/spf13/afero@1.9.5\"},{\"bom-ref\":\"pkg:golang/github.com/expr-lang/expr@1.16.9\",\"type\":\"library\",\"name\":\"github.com/expr-lang/expr\",\"version\":\"1.16.9\",\"purl\":\"pkg:golang/github.com/expr-lang/expr@1.16.9\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Fpath@1.1.2\",\"type\":\"library\",\"name\":\"@protobufjs/path\",\"version\":\"1.1.2\",\"purl\":\"pkg:npm/%40protobufjs%2Fpath@1.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/alecthomas/assert/v2@2.6.0\",\"type\":\"library\",\"name\":\"github.com/alecthomas/assert/v2\",\"version\":\"2.6.0\",\"purl\":\"pkg:golang/github.com/alecthomas/assert/v2@2.6.0\"},{\"bom-ref\":\"pkg:pypi/mkdocs-minify-plugin@0.7.1\",\"type\":\"library\",\"name\":\"mkdocs-minify-plugin\",\"version\":\"0.7.1\",\"purl\":\"pkg:pypi/mkdocs-minify-plugin@0.7.1\"},{\"bom-ref\":\"pkg:golang/github.com/stormcat24/protodep@0.1.8\",\"type\":\"library\",\"name\":\"github.com/stormcat24/protodep\",\"version\":\"0.1.8\",\"purl\":\"pkg:golang/github.com/stormcat24/protodep@0.1.8\"},{\"bom-ref\":\"pkg:golang/github.com/mgechev/revive@1.3.9\",\"type\":\"library\",\"name\":\"github.com/mgechev/revive\",\"version\":\"1.3.9\",\"purl\":\"pkg:golang/github.com/mgechev/revive@1.3.9\"},{\"bom-ref\":\"pkg:golang/github.com/vito/go-sse@1.0.0\",\"type\":\"library\",\"name\":\"github.com/vito/go-sse\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/vito/go-sse@1.0.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/text@0.11.0\",\"type\":\"library\",\"name\":\"golang.org/x/text\",\"version\":\"0.11.0\",\"purl\":\"pkg:golang/golang.org/x/text@0.11.0\"},{\"bom-ref\":\"pkg:golang/github.com/mattn/go-colorable@0.1.13\",\"type\":\"library\",\"name\":\"github.com/mattn/go-colorable\",\"version\":\"0.1.13\",\"purl\":\"pkg:golang/github.com/mattn/go-colorable@0.1.13\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/locket@0.0.0-20200131001124-67fd0a0fdf2d\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/locket\",\"version\":\"0.0.0-20200131001124-67fd0a0fdf2d\",\"purl\":\"pkg:golang/code.cloudfoundry.org/locket@0.0.0-20200131001124-67fd0a0fdf2d\"},{\"bom-ref\":\"pkg:pypi/lxml@5.2.2\",\"type\":\"library\",\"name\":\"lxml\",\"version\":\"5.2.2\",\"purl\":\"pkg:pypi/lxml@5.2.2\"},{\"bom-ref\":\"pkg:golang/github.com/clbanning/mxj@1.8.4\",\"type\":\"library\",\"name\":\"github.com/clbanning/mxj\",\"version\":\"1.8.4\",\"purl\":\"pkg:golang/github.com/clbanning/mxj@1.8.4\"},{\"bom-ref\":\"pkg:golang/github.com/blizzy78/varnamelen@0.8.0\",\"type\":\"library\",\"name\":\"github.com/blizzy78/varnamelen\",\"version\":\"0.8.0\",\"purl\":\"pkg:golang/github.com/blizzy78/varnamelen@0.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/charmbracelet/lipgloss@1.0.0\",\"type\":\"library\",\"name\":\"github.com/charmbracelet/lipgloss\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/charmbracelet/lipgloss@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/cilium/ebpf@0.16.0\",\"type\":\"library\",\"name\":\"github.com/cilium/ebpf\",\"version\":\"0.16.0\",\"purl\":\"pkg:golang/github.com/cilium/ebpf@0.16.0\"},{\"bom-ref\":\"pkg:golang/github.com/alessio/shellescape@1.4.2\",\"type\":\"library\",\"name\":\"github.com/alessio/shellescape\",\"version\":\"1.4.2\",\"purl\":\"pkg:golang/github.com/alessio/shellescape@1.4.2\"},{\"bom-ref\":\"pkg:golang/gopkg.in/yaml.v2@2.4.0\",\"type\":\"library\",\"name\":\"gopkg.in/yaml.v2\",\"version\":\"2.4.0\",\"purl\":\"pkg:golang/gopkg.in/yaml.v2@2.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/pierrec/lz4/v4@4.1.22\",\"type\":\"library\",\"name\":\"github.com/pierrec/lz4/v4\",\"version\":\"4.1.22\",\"purl\":\"pkg:golang/github.com/pierrec/lz4/v4@4.1.22\"},{\"bom-ref\":\"pkg:npm/source-map@0.7.4\",\"type\":\"library\",\"name\":\"source-map\",\"version\":\"0.7.4\",\"purl\":\"pkg:npm/source-map@0.7.4\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/metric@1.27.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/metric\",\"version\":\"1.27.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/metric@1.27.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/remyoudompheng/bigfft@0.0.0-20230129092748-24d4a6f8daec\",\"type\":\"library\",\"name\":\"github.com/remyoudompheng/bigfft\",\"version\":\"0.0.0-20230129092748-24d4a6f8daec\",\"purl\":\"pkg:golang/github.com/remyoudompheng/bigfft@0.0.0-20230129092748-24d4a6f8daec\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/prometheus@0.54.1\",\"type\":\"library\",\"name\":\"github.com/prometheus/prometheus\",\"version\":\"0.54.1\",\"purl\":\"pkg:golang/github.com/prometheus/prometheus@0.54.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/yamlprovider@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/confmap/provider/yamlprovider\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/yamlprovider@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/ebitengine/purego@0.5.0-alpha\",\"type\":\"library\",\"name\":\"github.com/ebitengine/purego\",\"version\":\"0.5.0-alpha\",\"purl\":\"pkg:golang/github.com/ebitengine/purego@0.5.0-alpha\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/receiver/nopreceiver@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/receiver/nopreceiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/receiver/nopreceiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/emicklei/go-restful/v3@3.12.1\",\"type\":\"library\",\"name\":\"github.com/emicklei/go-restful/v3\",\"version\":\"3.12.1\",\"purl\":\"pkg:golang/github.com/emicklei/go-restful/v3@3.12.1\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/cast@1.8.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/cast\",\"version\":\"1.8.0\",\"purl\":\"pkg:golang/github.com/DataDog/cast@1.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/mdlayher/netlink@1.7.2\",\"type\":\"library\",\"name\":\"github.com/mdlayher/netlink\",\"version\":\"1.7.2\",\"purl\":\"pkg:golang/github.com/mdlayher/netlink@1.7.2\"},{\"bom-ref\":\"pkg:golang/github.com/ovh/go-ovh@1.6.0\",\"type\":\"library\",\"name\":\"github.com/ovh/go-ovh\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/github.com/ovh/go-ovh@1.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/moby/sys/signal@0.7.1\",\"type\":\"library\",\"name\":\"github.com/moby/sys/signal\",\"version\":\"0.7.1\",\"purl\":\"pkg:golang/github.com/moby/sys/signal@0.7.1\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/watermarkpodautoscaler/apis@0.0.0-20250108152814-82e58d0231d1\",\"type\":\"library\",\"name\":\"github.com/DataDog/watermarkpodautoscaler/apis\",\"version\":\"0.0.0-20250108152814-82e58d0231d1\",\"purl\":\"pkg:golang/github.com/DataDog/watermarkpodautoscaler/apis@0.0.0-20250108152814-82e58d0231d1\"},{\"bom-ref\":\"pkg:golang/sigs.k8s.io/json@0.0.0-20221116044647-bc3834ca7abd\",\"type\":\"library\",\"name\":\"sigs.k8s.io/json\",\"version\":\"0.0.0-20221116044647-bc3834ca7abd\",\"purl\":\"pkg:golang/sigs.k8s.io/json@0.0.0-20221116044647-bc3834ca7abd\"},{\"bom-ref\":\"pkg:golang/github.com/kisielk/errcheck@1.7.0\",\"type\":\"library\",\"name\":\"github.com/kisielk/errcheck\",\"version\":\"1.7.0\",\"purl\":\"pkg:golang/github.com/kisielk/errcheck@1.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/fatih/color@1.18.0\",\"type\":\"library\",\"name\":\"github.com/fatih/color\",\"version\":\"1.18.0\",\"purl\":\"pkg:golang/github.com/fatih/color@1.18.0\"},{\"bom-ref\":\"pkg:golang/github.com/Microsoft/hcsshim@0.12.9\",\"type\":\"library\",\"name\":\"github.com/Microsoft/hcsshim\",\"version\":\"0.12.9\",\"purl\":\"pkg:golang/github.com/Microsoft/hcsshim@0.12.9\"},{\"bom-ref\":\"pkg:golang/github.com/openvex/discovery@0.1.1-0.20240802171711-7c54efc57553\",\"type\":\"library\",\"name\":\"github.com/openvex/discovery\",\"version\":\"0.1.1-0.20240802171711-7c54efc57553\",\"purl\":\"pkg:golang/github.com/openvex/discovery@0.1.1-0.20240802171711-7c54efc57553\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/procfs@0.11.1\",\"type\":\"library\",\"name\":\"github.com/prometheus/procfs\",\"version\":\"0.11.1\",\"purl\":\"pkg:golang/github.com/prometheus/procfs@0.11.1\"},{\"bom-ref\":\"pkg:golang/golang.org/x/term@0.28.0\",\"type\":\"library\",\"name\":\"golang.org/x/term\",\"version\":\"0.28.0\",\"purl\":\"pkg:golang/golang.org/x/term@0.28.0\"},{\"bom-ref\":\"pkg:golang/github.com/quasilyte/go-ruleguard@0.4.2\",\"type\":\"library\",\"name\":\"github.com/quasilyte/go-ruleguard\",\"version\":\"0.4.2\",\"purl\":\"pkg:golang/github.com/quasilyte/go-ruleguard@0.4.2\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/receiver/xreceiver@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/receiver/xreceiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/receiver/xreceiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/time@0.8.0\",\"type\":\"library\",\"name\":\"golang.org/x/time\",\"version\":\"0.8.0\",\"purl\":\"pkg:golang/golang.org/x/time@0.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/kyoh86/exportloopref@0.1.11\",\"type\":\"library\",\"name\":\"github.com/kyoh86/exportloopref\",\"version\":\"0.1.11\",\"purl\":\"pkg:golang/github.com/kyoh86/exportloopref@0.1.11\"},{\"bom-ref\":\"pkg:golang/github.com/nunnatsa/ginkgolinter@0.16.2\",\"type\":\"library\",\"name\":\"github.com/nunnatsa/ginkgolinter\",\"version\":\"0.16.2\",\"purl\":\"pkg:golang/github.com/nunnatsa/ginkgolinter@0.16.2\"},{\"bom-ref\":\"pkg:pypi/python-levenshtein@0.26.1\",\"type\":\"library\",\"name\":\"python-levenshtein\",\"version\":\"0.26.1\",\"purl\":\"pkg:pypi/python-levenshtein@0.26.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/httpprovider@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/confmap/provider/httpprovider\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/httpprovider@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/agnivade/levenshtein@1.2.0\",\"type\":\"library\",\"name\":\"github.com/agnivade/levenshtein\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/agnivade/levenshtein@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/ryancurrah/gomodguard@1.3.3\",\"type\":\"library\",\"name\":\"github.com/ryancurrah/gomodguard\",\"version\":\"1.3.3\",\"purl\":\"pkg:golang/github.com/ryancurrah/gomodguard@1.3.3\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/exporter/exporterhelper/xexporterhelper@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/component@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/component\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/component@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/valyala/fasthttp@1.45.0\",\"type\":\"library\",\"name\":\"github.com/valyala/fasthttp\",\"version\":\"1.45.0\",\"purl\":\"pkg:golang/github.com/valyala/fasthttp@1.45.0\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/cfhttp/v2@2.0.0\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/cfhttp/v2\",\"version\":\"2.0.0\",\"purl\":\"pkg:golang/code.cloudfoundry.org/cfhttp/v2@2.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/jwalterweatherman@1.1.0\",\"type\":\"library\",\"name\":\"github.com/spf13/jwalterweatherman\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/spf13/jwalterweatherman@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/digitalocean/godo@1.118.0\",\"type\":\"library\",\"name\":\"github.com/digitalocean/godo\",\"version\":\"1.118.0\",\"purl\":\"pkg:golang/github.com/digitalocean/godo@1.118.0\"},{\"bom-ref\":\"pkg:golang/github.com/openzipkin/zipkin-go@0.4.3\",\"type\":\"library\",\"name\":\"github.com/openzipkin/zipkin-go\",\"version\":\"0.4.3\",\"purl\":\"pkg:golang/github.com/openzipkin/zipkin-go@0.4.3\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/rfc5424@0.0.0-20201103192249-000122071b78\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/rfc5424\",\"version\":\"0.0.0-20201103192249-000122071b78\",\"purl\":\"pkg:golang/code.cloudfoundry.org/rfc5424@0.0.0-20201103192249-000122071b78\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/loads@0.22.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/loads\",\"version\":\"0.22.0\",\"purl\":\"pkg:golang/github.com/go-openapi/loads@0.22.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/net@0.34.0\",\"type\":\"library\",\"name\":\"golang.org/x/net\",\"version\":\"0.34.0\",\"purl\":\"pkg:golang/golang.org/x/net@0.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/s3@1.74.1\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/s3\",\"version\":\"1.74.1\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/s3@1.74.1\"},{\"bom-ref\":\"pkg:golang/github.com/twmb/franz-go/pkg/kmsg@1.8.0\",\"type\":\"library\",\"name\":\"github.com/twmb/franz-go/pkg/kmsg\",\"version\":\"1.8.0\",\"purl\":\"pkg:golang/github.com/twmb/franz-go/pkg/kmsg@1.8.0\"},{\"bom-ref\":\"pkg:golang/go.uber.org/zap@1.27.0\",\"type\":\"library\",\"name\":\"go.uber.org/zap\",\"version\":\"1.27.0\",\"purl\":\"pkg:golang/go.uber.org/zap@1.27.0\"},{\"bom-ref\":\"pkg:golang/github.com/openshift/api@3.9.0+incompatible\",\"type\":\"library\",\"name\":\"github.com/openshift/api\",\"version\":\"3.9.0+incompatible\",\"purl\":\"pkg:golang/github.com/openshift/api@3.9.0+incompatible\"},{\"bom-ref\":\"pkg:golang/go.uber.org/multierr@1.11.0\",\"type\":\"library\",\"name\":\"go.uber.org/multierr\",\"version\":\"1.11.0\",\"purl\":\"pkg:golang/go.uber.org/multierr@1.11.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-critic/go-critic@0.11.4\",\"type\":\"library\",\"name\":\"github.com/go-critic/go-critic\",\"version\":\"0.11.4\",\"purl\":\"pkg:golang/github.com/go-critic/go-critic@0.11.4\"},{\"bom-ref\":\"pkg:golang/google.golang.org/grpc@1.54.0\",\"type\":\"library\",\"name\":\"google.golang.org/grpc\",\"version\":\"1.54.0\",\"purl\":\"pkg:golang/google.golang.org/grpc@1.54.0\"},{\"bom-ref\":\"pkg:golang/go.uber.org/dig@1.18.0\",\"type\":\"library\",\"name\":\"go.uber.org/dig\",\"version\":\"1.18.0\",\"purl\":\"pkg:golang/go.uber.org/dig@1.18.0\"},{\"bom-ref\":\"pkg:golang/github.com/ebitengine/purego@0.8.1\",\"type\":\"library\",\"name\":\"github.com/ebitengine/purego\",\"version\":\"0.8.1\",\"purl\":\"pkg:golang/github.com/ebitengine/purego@0.8.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/fileprovider@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/confmap/provider/fileprovider\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/fileprovider@1.25.0\"},{\"bom-ref\":\"pkg:golang/sigs.k8s.io/custom-metrics-apiserver@1.30.1-0.20241105195130-84dc8cfe2555\",\"type\":\"library\",\"name\":\"sigs.k8s.io/custom-metrics-apiserver\",\"version\":\"1.30.1-0.20241105195130-84dc8cfe2555\",\"purl\":\"pkg:golang/sigs.k8s.io/custom-metrics-apiserver@1.30.1-0.20241105195130-84dc8cfe2555\"},{\"bom-ref\":\"pkg:golang/github.com/sony/gobreaker@0.5.0\",\"type\":\"library\",\"name\":\"github.com/sony/gobreaker\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/sony/gobreaker@0.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/google/go-cmp@0.6.0\",\"type\":\"library\",\"name\":\"github.com/google/go-cmp\",\"version\":\"0.6.0\",\"purl\":\"pkg:golang/github.com/google/go-cmp@0.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/netsampler/goflow2@1.3.3\",\"type\":\"library\",\"name\":\"github.com/netsampler/goflow2\",\"version\":\"1.3.3\",\"purl\":\"pkg:golang/github.com/netsampler/goflow2@1.3.3\"},{\"bom-ref\":\"pkg:golang/go.opencensus.io@0.24.0\",\"type\":\"library\",\"name\":\"go.opencensus.io\",\"version\":\"0.24.0\",\"purl\":\"pkg:golang/go.opencensus.io@0.24.0\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-hclog@1.6.3\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-hclog\",\"version\":\"1.6.3\",\"purl\":\"pkg:golang/github.com/hashicorp/go-hclog@1.6.3\"},{\"bom-ref\":\"pkg:golang/github.com/masahiro331/go-ebs-file@0.0.0-20240917043618-e6d2bea5c32e\",\"type\":\"library\",\"name\":\"github.com/masahiro331/go-ebs-file\",\"version\":\"0.0.0-20240917043618-e6d2bea5c32e\",\"purl\":\"pkg:golang/github.com/masahiro331/go-ebs-file@0.0.0-20240917043618-e6d2bea5c32e\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url@1.12.10\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/internal/presigned-url\",\"version\":\"1.12.10\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url@1.12.10\"},{\"bom-ref\":\"pkg:golang/github.com/Masterminds/semver@1.5.0\",\"type\":\"library\",\"name\":\"github.com/Masterminds/semver\",\"version\":\"1.5.0\",\"purl\":\"pkg:golang/github.com/Masterminds/semver@1.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/google/gnostic-models@0.6.8\",\"type\":\"library\",\"name\":\"github.com/google/gnostic-models\",\"version\":\"0.6.8\",\"purl\":\"pkg:golang/github.com/google/gnostic-models@0.6.8\"},{\"bom-ref\":\"pkg:golang/github.com/Masterminds/goutils@1.1.1\",\"type\":\"library\",\"name\":\"github.com/Masterminds/goutils\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/Masterminds/goutils@1.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/mitchellh/go-wordwrap@1.0.1\",\"type\":\"library\",\"name\":\"github.com/mitchellh/go-wordwrap\",\"version\":\"1.0.1\",\"purl\":\"pkg:golang/github.com/mitchellh/go-wordwrap@1.0.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/config/configretry@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/config/configretry\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/config/configretry@1.25.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/kms@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/kms\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/kms@0.31.2\"},{\"bom-ref\":\"pkg:golang/github.com/tdakkota/asciicheck@0.2.0\",\"type\":\"library\",\"name\":\"github.com/tdakkota/asciicheck\",\"version\":\"0.2.0\",\"purl\":\"pkg:golang/github.com/tdakkota/asciicheck@0.2.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/sys@0.14.0\",\"type\":\"library\",\"name\":\"golang.org/x/sys\",\"version\":\"0.14.0\",\"purl\":\"pkg:golang/golang.org/x/sys@0.14.0\"},{\"bom-ref\":\"pkg:golang/github.com/opencontainers/runtime-spec@1.2.0\",\"type\":\"library\",\"name\":\"github.com/opencontainers/runtime-spec\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/opencontainers/runtime-spec@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/dd-sensitive-data-scanner/sds-go/go@0.0.0-20240816154533-f7f9beb53a42\",\"type\":\"library\",\"name\":\"github.com/DataDog/dd-sensitive-data-scanner/sds-go/go\",\"version\":\"0.0.0-20240816154533-f7f9beb53a42\",\"purl\":\"pkg:golang/github.com/DataDog/dd-sensitive-data-scanner/sds-go/go@0.0.0-20240816154533-f7f9beb53a42\"},{\"bom-ref\":\"pkg:golang/github.com/masahiro331/go-mvn-version@0.0.0-20210429150710-d3157d602a08\",\"type\":\"library\",\"name\":\"github.com/masahiro331/go-mvn-version\",\"version\":\"0.0.0-20210429150710-d3157d602a08\",\"purl\":\"pkg:golang/github.com/masahiro331/go-mvn-version@0.0.0-20210429150710-d3157d602a08\"},{\"bom-ref\":\"pkg:golang/github.com/moby/sys/sequential@0.5.0\",\"type\":\"library\",\"name\":\"github.com/moby/sys/sequential\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/moby/sys/sequential@0.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/common@0.62.0\",\"type\":\"library\",\"name\":\"github.com/prometheus/common\",\"version\":\"0.62.0\",\"purl\":\"pkg:golang/github.com/prometheus/common@0.62.0\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus-community/pro-bing@0.4.1\",\"type\":\"library\",\"name\":\"github.com/prometheus-community/pro-bing\",\"version\":\"0.4.1\",\"purl\":\"pkg:golang/github.com/prometheus-community/pro-bing@0.4.1\"},{\"bom-ref\":\"pkg:golang/github.com/ugorji/go/codec@1.2.11\",\"type\":\"library\",\"name\":\"github.com/ugorji/go/codec\",\"version\":\"1.2.11\",\"purl\":\"pkg:golang/github.com/ugorji/go/codec@1.2.11\"},{\"bom-ref\":\"pkg:golang/github.com/cihub/seelog@0.0.0-20151216151435-d2c6e5aa9fbf\",\"type\":\"library\",\"name\":\"github.com/cihub/seelog\",\"version\":\"0.0.0-20151216151435-d2c6e5aa9fbf\",\"purl\":\"pkg:golang/github.com/cihub/seelog@0.0.0-20151216151435-d2c6e5aa9fbf\"},{\"bom-ref\":\"pkg:golang/github.com/aquasecurity/go-pep440-version@0.0.0-20210121094942-22b2f8951d46\",\"type\":\"library\",\"name\":\"github.com/aquasecurity/go-pep440-version\",\"version\":\"0.0.0-20210121094942-22b2f8951d46\",\"purl\":\"pkg:golang/github.com/aquasecurity/go-pep440-version@0.0.0-20210121094942-22b2f8951d46\"},{\"bom-ref\":\"pkg:golang/github.com/chai2010/gettext-go@1.0.2\",\"type\":\"library\",\"name\":\"github.com/chai2010/gettext-go\",\"version\":\"1.0.2\",\"purl\":\"pkg:golang/github.com/chai2010/gettext-go@1.0.2\"},{\"bom-ref\":\"pkg:golang/github.com/cloudflare/circl@1.3.7\",\"type\":\"library\",\"name\":\"github.com/cloudflare/circl\",\"version\":\"1.3.7\",\"purl\":\"pkg:golang/github.com/cloudflare/circl@1.3.7\"},{\"bom-ref\":\"pkg:golang/gopkg.in/ini.v1@1.67.0\",\"type\":\"library\",\"name\":\"gopkg.in/ini.v1\",\"version\":\"1.67.0\",\"purl\":\"pkg:golang/gopkg.in/ini.v1@1.67.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/exp@0.0.0-20250128182459-e0ece0dbea4c\",\"type\":\"library\",\"name\":\"golang.org/x/exp\",\"version\":\"0.0.0-20250128182459-e0ece0dbea4c\",\"purl\":\"pkg:golang/golang.org/x/exp@0.0.0-20250128182459-e0ece0dbea4c\"},{\"bom-ref\":\"pkg:golang/github.com/modern-go/reflect2@1.0.2\",\"type\":\"library\",\"name\":\"github.com/modern-go/reflect2\",\"version\":\"1.0.2\",\"purl\":\"pkg:golang/github.com/modern-go/reflect2@1.0.2\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/receiver@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/receiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/receiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/package-url/packageurl-go@0.1.3\",\"type\":\"library\",\"name\":\"github.com/package-url/packageurl-go\",\"version\":\"0.1.3\",\"purl\":\"pkg:golang/github.com/package-url/packageurl-go@0.1.3\"},{\"bom-ref\":\"pkg:golang/github.com/tetafro/godot@1.4.16\",\"type\":\"library\",\"name\":\"github.com/tetafro/godot\",\"version\":\"1.4.16\",\"purl\":\"pkg:golang/github.com/tetafro/godot@1.4.16\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/hcl@1.0.0\",\"type\":\"library\",\"name\":\"github.com/hashicorp/hcl\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/hashicorp/hcl@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/hexops/gotextdiff@1.0.3\",\"type\":\"library\",\"name\":\"github.com/hexops/gotextdiff\",\"version\":\"1.0.3\",\"purl\":\"pkg:golang/github.com/hexops/gotextdiff@1.0.3\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin@0.119.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/api@0.31.4\",\"type\":\"library\",\"name\":\"k8s.io/api\",\"version\":\"0.31.4\",\"purl\":\"pkg:golang/k8s.io/api@0.31.4\"},{\"bom-ref\":\"pkg:golang/github.com/eapache/queue/v2@2.0.0-20230407133247-75960ed334e4\",\"type\":\"library\",\"name\":\"github.com/eapache/queue/v2\",\"version\":\"2.0.0-20230407133247-75960ed334e4\",\"purl\":\"pkg:golang/github.com/eapache/queue/v2@2.0.0-20230407133247-75960ed334e4\"},{\"bom-ref\":\"pkg:golang/gopkg.in/inf.v0@0.9.1\",\"type\":\"library\",\"name\":\"gopkg.in/inf.v0\",\"version\":\"0.9.1\",\"purl\":\"pkg:golang/gopkg.in/inf.v0@0.9.1\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/authorization/v2@2.81.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-azure-native-sdk/authorization/v2\",\"version\":\"2.81.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/authorization/v2@2.81.0\"},{\"bom-ref\":\"pkg:golang/github.com/hectane/go-acl@0.0.0-20230122075934-ca0b05cb1adb\",\"type\":\"library\",\"name\":\"github.com/hectane/go-acl\",\"version\":\"0.0.0-20230122075934-ca0b05cb1adb\",\"purl\":\"pkg:golang/github.com/hectane/go-acl@0.0.0-20230122075934-ca0b05cb1adb\"},{\"bom-ref\":\"pkg:golang/github.com/gogo/protobuf@1.3.2\",\"type\":\"library\",\"name\":\"github.com/gogo/protobuf\",\"version\":\"1.3.2\",\"purl\":\"pkg:golang/github.com/gogo/protobuf@1.3.2\"},{\"bom-ref\":\"pkg:golang/github.com/alecthomas/go-check-sumtype@0.1.4\",\"type\":\"library\",\"name\":\"github.com/alecthomas/go-check-sumtype\",\"version\":\"0.1.4\",\"purl\":\"pkg:golang/github.com/alecthomas/go-check-sumtype@0.1.4\"},{\"bom-ref\":\"pkg:golang/github.com/mattn/go-shellwords@1.0.12\",\"type\":\"library\",\"name\":\"github.com/mattn/go-shellwords\",\"version\":\"1.0.12\",\"purl\":\"pkg:golang/github.com/mattn/go-shellwords@1.0.12\"},{\"bom-ref\":\"pkg:pypi/atlassian-python-api@3.41.3\",\"type\":\"library\",\"name\":\"atlassian-python-api\",\"version\":\"3.41.3\",\"purl\":\"pkg:pypi/atlassian-python-api@3.41.3\"},{\"bom-ref\":\"pkg:golang/golang.org/x/exp@0.0.0-20241108190413-2d47ceb2692f\",\"type\":\"library\",\"name\":\"golang.org/x/exp\",\"version\":\"0.0.0-20241108190413-2d47ceb2692f\",\"purl\":\"pkg:golang/golang.org/x/exp@0.0.0-20241108190413-2d47ceb2692f\"},{\"bom-ref\":\"pkg:golang/github.com/go-logfmt/logfmt@0.6.0\",\"type\":\"library\",\"name\":\"github.com/go-logfmt/logfmt\",\"version\":\"0.6.0\",\"purl\":\"pkg:golang/github.com/go-logfmt/logfmt@0.6.0\"},{\"bom-ref\":\"pkg:npm/delay@5.0.0\",\"type\":\"library\",\"name\":\"delay\",\"version\":\"5.0.0\",\"purl\":\"pkg:npm/delay@5.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/safchain/baloum@0.0.0-20241120122234-f22c9bd19f3b\",\"type\":\"library\",\"name\":\"github.com/safchain/baloum\",\"version\":\"0.0.0-20241120122234-f22c9bd19f3b\",\"purl\":\"pkg:golang/github.com/safchain/baloum@0.0.0-20241120122234-f22c9bd19f3b\"},{\"bom-ref\":\"pkg:golang/golang.org/x/sync@0.10.0\",\"type\":\"library\",\"name\":\"golang.org/x/sync\",\"version\":\"0.10.0\",\"purl\":\"pkg:golang/golang.org/x/sync@0.10.0\"},{\"bom-ref\":\"pkg:golang/github.com/googleapis/gax-go/v2@2.12.5\",\"type\":\"library\",\"name\":\"github.com/googleapis/gax-go/v2\",\"version\":\"2.12.5\",\"purl\":\"pkg:golang/github.com/googleapis/gax-go/v2@2.12.5\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/jwalterweatherman@1.0.0\",\"type\":\"library\",\"name\":\"github.com/spf13/jwalterweatherman\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/spf13/jwalterweatherman@1.0.0\"},{\"bom-ref\":\"pkg:golang/gopkg.in/neurosnap/sentences.v1@1.0.6\",\"type\":\"library\",\"name\":\"gopkg.in/neurosnap/sentences.v1\",\"version\":\"1.0.6\",\"purl\":\"pkg:golang/gopkg.in/neurosnap/sentences.v1@1.0.6\"},{\"bom-ref\":\"pkg:npm/shell-quote@1.8.1\",\"type\":\"library\",\"name\":\"shell-quote\",\"version\":\"1.8.1\",\"purl\":\"pkg:npm/shell-quote@1.8.1\"},{\"bom-ref\":\"pkg:pypi/pygithub@1.59.1\",\"type\":\"library\",\"name\":\"pygithub\",\"version\":\"1.59.1\",\"purl\":\"pkg:pypi/pygithub@1.59.1\"},{\"bom-ref\":\"pkg:npm/%40opentelemetry%2Fcore@1.25.1\",\"type\":\"library\",\"name\":\"@opentelemetry/core\",\"version\":\"1.25.1\",\"purl\":\"pkg:npm/%40opentelemetry%2Fcore@1.25.1\"},{\"bom-ref\":\"pkg:maven/org.bouncycastle/bc-fips@2.0.0\",\"type\":\"library\",\"name\":\"org.bouncycastle:bc-fips\",\"version\":\"2.0.0\",\"purl\":\"pkg:maven/org.bouncycastle/bc-fips@2.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/bitfield/gotestdox@0.2.1\",\"type\":\"library\",\"name\":\"github.com/bitfield/gotestdox\",\"version\":\"0.2.1\",\"purl\":\"pkg:golang/github.com/bitfield/gotestdox@0.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/onsi/ginkgo/v2@2.20.2\",\"type\":\"library\",\"name\":\"github.com/onsi/ginkgo/v2\",\"version\":\"2.20.2\",\"purl\":\"pkg:golang/github.com/onsi/ginkgo/v2@2.20.2\"},{\"bom-ref\":\"pkg:npm/koalas@1.0.2\",\"type\":\"library\",\"name\":\"koalas\",\"version\":\"1.0.2\",\"purl\":\"pkg:npm/koalas@1.0.2\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/go-tuf@1.1.0-0.5.2\",\"type\":\"library\",\"name\":\"github.com/DataDog/go-tuf\",\"version\":\"1.1.0-0.5.2\",\"purl\":\"pkg:golang/github.com/DataDog/go-tuf@1.1.0-0.5.2\"},{\"bom-ref\":\"pkg:golang/github.com/atotto/clipboard@0.1.4\",\"type\":\"library\",\"name\":\"github.com/atotto/clipboard\",\"version\":\"0.1.4\",\"purl\":\"pkg:golang/github.com/atotto/clipboard@0.1.4\"},{\"bom-ref\":\"pkg:golang/github.com/googleapis/enterprise-certificate-proxy@0.3.4\",\"type\":\"library\",\"name\":\"github.com/googleapis/enterprise-certificate-proxy\",\"version\":\"0.3.4\",\"purl\":\"pkg:golang/github.com/googleapis/enterprise-certificate-proxy@0.3.4\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/otlp/otlptrace\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace@1.34.0\"},{\"bom-ref\":\"pkg:pypi/tabulate@0.9.0\",\"type\":\"library\",\"name\":\"tabulate\",\"version\":\"0.9.0\",\"purl\":\"pkg:pypi/tabulate@0.9.0\"},{\"bom-ref\":\"pkg:golang/google.golang.org/grpc@1.70.0\",\"type\":\"library\",\"name\":\"google.golang.org/grpc\",\"version\":\"1.70.0\",\"purl\":\"pkg:golang/google.golang.org/grpc@1.70.0\"},{\"bom-ref\":\"pkg:pypi/slack-sdk@3.27.1\",\"type\":\"library\",\"name\":\"slack-sdk\",\"version\":\"3.27.1\",\"purl\":\"pkg:pypi/slack-sdk@3.27.1\"},{\"bom-ref\":\"pkg:golang/github.com/elastic/go-licenser@0.4.2\",\"type\":\"library\",\"name\":\"github.com/elastic/go-licenser\",\"version\":\"0.4.2\",\"purl\":\"pkg:golang/github.com/elastic/go-licenser@0.4.2\"},{\"bom-ref\":\"pkg:golang/github.com/liggitt/tabwriter@0.0.0-20181228230101-89fcab3d43de\",\"type\":\"library\",\"name\":\"github.com/liggitt/tabwriter\",\"version\":\"0.0.0-20181228230101-89fcab3d43de\",\"purl\":\"pkg:golang/github.com/liggitt/tabwriter@0.0.0-20181228230101-89fcab3d43de\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/cobra@1.8.1\",\"type\":\"library\",\"name\":\"github.com/spf13/cobra\",\"version\":\"1.8.1\",\"purl\":\"pkg:golang/github.com/spf13/cobra@1.8.1\"},{\"bom-ref\":\"pkg:golang/modernc.org/mathutil@1.6.0\",\"type\":\"library\",\"name\":\"modernc.org/mathutil\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/modernc.org/mathutil@1.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/zstd@1.5.6\",\"type\":\"library\",\"name\":\"github.com/DataDog/zstd\",\"version\":\"1.5.6\",\"purl\":\"pkg:golang/github.com/DataDog/zstd@1.5.6\"},{\"bom-ref\":\"pkg:golang/github.com/shirou/w32@0.0.0-20160930032740-bb4de0191aa4\",\"type\":\"library\",\"name\":\"github.com/shirou/w32\",\"version\":\"0.0.0-20160930032740-bb4de0191aa4\",\"purl\":\"pkg:golang/github.com/shirou/w32@0.0.0-20160930032740-bb4de0191aa4\"},{\"bom-ref\":\"pkg:golang/github.com/ykadowak/zerologlint@0.1.5\",\"type\":\"library\",\"name\":\"github.com/ykadowak/zerologlint\",\"version\":\"0.1.5\",\"purl\":\"pkg:golang/github.com/ykadowak/zerologlint@0.1.5\"},{\"bom-ref\":\"pkg:golang/gopkg.in/cheggaaa/pb.v1@1.0.28\",\"type\":\"library\",\"name\":\"gopkg.in/cheggaaa/pb.v1\",\"version\":\"1.0.28\",\"purl\":\"pkg:golang/gopkg.in/cheggaaa/pb.v1@1.0.28\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc@0.59.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc\",\"version\":\"0.59.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc@0.59.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-api-client-go/v2@2.34.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-api-client-go/v2\",\"version\":\"2.34.0\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-api-client-go/v2@2.34.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/httpsprovider@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/confmap/provider/httpsprovider\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/confmap/provider/httpsprovider@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/jjti/go-spancheck@0.6.2\",\"type\":\"library\",\"name\":\"github.com/jjti/go-spancheck\",\"version\":\"0.6.2\",\"purl\":\"pkg:golang/github.com/jjti/go-spancheck@0.6.2\"},{\"bom-ref\":\"pkg:golang/github.com/imdario/mergo@0.3.16\",\"type\":\"library\",\"name\":\"github.com/imdario/mergo\",\"version\":\"0.3.16\",\"purl\":\"pkg:golang/github.com/imdario/mergo@0.3.16\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/client@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/client\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/client@1.25.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/kubectl@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/kubectl\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/kubectl@0.31.2\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc@0.10.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc\",\"version\":\"0.10.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc@0.10.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.etcd.io/bbolt@1.3.11\",\"type\":\"library\",\"name\":\"go.etcd.io/bbolt\",\"version\":\"1.3.11\",\"purl\":\"pkg:golang/go.etcd.io/bbolt@1.3.11\"},{\"bom-ref\":\"pkg:golang/github.com/liamg/jfather@0.0.7\",\"type\":\"library\",\"name\":\"github.com/liamg/jfather\",\"version\":\"0.0.7\",\"purl\":\"pkg:golang/github.com/liamg/jfather@0.0.7\"},{\"bom-ref\":\"pkg:golang/github.com/richardartoul/molecule@1.0.1-0.20240531184615-7ca0df43c0b3\",\"type\":\"library\",\"name\":\"github.com/richardartoul/molecule\",\"version\":\"1.0.1-0.20240531184615-7ca0df43c0b3\",\"purl\":\"pkg:golang/github.com/richardartoul/molecule@1.0.1-0.20240531184615-7ca0df43c0b3\"},{\"bom-ref\":\"pkg:golang/github.com/cri-o/ocicni@0.4.3\",\"type\":\"library\",\"name\":\"github.com/cri-o/ocicni\",\"version\":\"0.4.3\",\"purl\":\"pkg:golang/github.com/cri-o/ocicni@0.4.3\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/quantile@0.25.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/opentelemetry-mapping-go/pkg/quantile\",\"version\":\"0.25.0\",\"purl\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/quantile@0.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/knqyf263/go-deb-version@0.0.0-20230223133812-3ed183d23422\",\"type\":\"library\",\"name\":\"github.com/knqyf263/go-deb-version\",\"version\":\"0.0.0-20230223133812-3ed183d23422\",\"purl\":\"pkg:golang/github.com/knqyf263/go-deb-version@0.0.0-20230223133812-3ed183d23422\"},{\"bom-ref\":\"pkg:golang/github.com/bombsimon/wsl/v4@4.4.1\",\"type\":\"library\",\"name\":\"github.com/bombsimon/wsl/v4\",\"version\":\"4.4.1\",\"purl\":\"pkg:golang/github.com/bombsimon/wsl/v4@4.4.1\"},{\"bom-ref\":\"pkg:golang/github.com/sanposhiho/wastedassign/v2@2.0.7\",\"type\":\"library\",\"name\":\"github.com/sanposhiho/wastedassign/v2\",\"version\":\"2.0.7\",\"purl\":\"pkg:golang/github.com/sanposhiho/wastedassign/v2@2.0.7\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-lambda-go@1.11.1-0.20231030204701-7ec92619787d\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-lambda-go\",\"version\":\"1.11.1-0.20231030204701-7ec92619787d\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-lambda-go@1.11.1-0.20231030204701-7ec92619787d\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/stdout/stdouttrace\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/stdout/stdouttrace@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/sigstore/sigstore@1.8.3\",\"type\":\"library\",\"name\":\"github.com/sigstore/sigstore\",\"version\":\"1.8.3\",\"purl\":\"pkg:golang/github.com/sigstore/sigstore@1.8.3\"},{\"bom-ref\":\"pkg:npm/acorn-import-attributes@1.9.5\",\"type\":\"library\",\"name\":\"acorn-import-attributes\",\"version\":\"1.9.5\",\"purl\":\"pkg:npm/acorn-import-attributes@1.9.5\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/processor@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/processor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/processor@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/patrickmn/go-cache@2.1.0+incompatible\",\"type\":\"library\",\"name\":\"github.com/patrickmn/go-cache\",\"version\":\"2.1.0+incompatible\",\"purl\":\"pkg:golang/github.com/patrickmn/go-cache@2.1.0+incompatible\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/clock@1.0.0\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/clock\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/code.cloudfoundry.org/clock@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/google/gnostic-models@0.6.9\",\"type\":\"library\",\"name\":\"github.com/google/gnostic-models\",\"version\":\"0.6.9\",\"purl\":\"pkg:golang/github.com/google/gnostic-models@0.6.9\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/zstd_0@0.0.0-20210310093942-586c1286621f\",\"type\":\"library\",\"name\":\"github.com/DataDog/zstd_0\",\"version\":\"0.0.0-20210310093942-586c1286621f\",\"purl\":\"pkg:golang/github.com/DataDog/zstd_0@0.0.0-20210310093942-586c1286621f\"},{\"bom-ref\":\"pkg:golang/github.com/mitchellh/go-homedir@1.1.0\",\"type\":\"library\",\"name\":\"github.com/mitchellh/go-homedir\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/mitchellh/go-homedir@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/ckaznocha/intrange@0.1.2\",\"type\":\"library\",\"name\":\"github.com/ckaznocha/intrange\",\"version\":\"0.1.2\",\"purl\":\"pkg:golang/github.com/ckaznocha/intrange@0.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/golang/snappy@0.0.5-0.20220116011046-fa5810519dcb\",\"type\":\"library\",\"name\":\"github.com/golang/snappy\",\"version\":\"0.0.5-0.20220116011046-fa5810519dcb\",\"purl\":\"pkg:golang/github.com/golang/snappy@0.0.5-0.20220116011046-fa5810519dcb\"},{\"bom-ref\":\"pkg:golang/github.com/cenkalti/backoff@2.2.1+incompatible\",\"type\":\"library\",\"name\":\"github.com/cenkalti/backoff\",\"version\":\"2.2.1+incompatible\",\"purl\":\"pkg:golang/github.com/cenkalti/backoff@2.2.1+incompatible\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/component/componenttest@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/component/componenttest\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/component/componenttest@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/netlink@1.0.1-0.20240223195320-c7a4f832a3d1\",\"type\":\"library\",\"name\":\"github.com/DataDog/netlink\",\"version\":\"1.0.1-0.20240223195320-c7a4f832a3d1\",\"purl\":\"pkg:golang/github.com/DataDog/netlink@1.0.1-0.20240223195320-c7a4f832a3d1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/sdk/metric@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/sdk/metric\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/sdk/metric@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/samuel/go-zookeeper@0.0.0-20190923202752-2cc03de413da\",\"type\":\"library\",\"name\":\"github.com/samuel/go-zookeeper\",\"version\":\"0.0.0-20190923202752-2cc03de413da\",\"purl\":\"pkg:golang/github.com/samuel/go-zookeeper@0.0.0-20190923202752-2cc03de413da\"},{\"bom-ref\":\"pkg:golang/github.com/mwitkow/go-conntrack@0.0.0-20190716064945-2f068394615f\",\"type\":\"library\",\"name\":\"github.com/mwitkow/go-conntrack\",\"version\":\"0.0.0-20190716064945-2f068394615f\",\"purl\":\"pkg:golang/github.com/mwitkow/go-conntrack@0.0.0-20190716064945-2f068394615f\"},{\"bom-ref\":\"pkg:golang/github.com/twmb/franz-go/pkg/kadm@1.12.0\",\"type\":\"library\",\"name\":\"github.com/twmb/franz-go/pkg/kadm\",\"version\":\"1.12.0\",\"purl\":\"pkg:golang/github.com/twmb/franz-go/pkg/kadm@1.12.0\"},{\"bom-ref\":\"pkg:golang/github.com/moby/sys/mountinfo@0.7.2\",\"type\":\"library\",\"name\":\"github.com/moby/sys/mountinfo\",\"version\":\"0.7.2\",\"purl\":\"pkg:golang/github.com/moby/sys/mountinfo@0.7.2\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/kms@1.37.6\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/kms\",\"version\":\"1.37.6\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/kms@1.37.6\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-version@1.7.0\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-version\",\"version\":\"1.7.0\",\"purl\":\"pkg:golang/github.com/hashicorp/go-version@1.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/breml/errchkjson@0.3.6\",\"type\":\"library\",\"name\":\"github.com/breml/errchkjson\",\"version\":\"0.3.6\",\"purl\":\"pkg:golang/github.com/breml/errchkjson@0.3.6\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/buger/jsonparser@1.1.1\",\"type\":\"library\",\"name\":\"github.com/buger/jsonparser\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/buger/jsonparser@1.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/tomarrell/wrapcheck/v2@2.9.0\",\"type\":\"library\",\"name\":\"github.com/tomarrell/wrapcheck/v2\",\"version\":\"2.9.0\",\"purl\":\"pkg:golang/github.com/tomarrell/wrapcheck/v2@2.9.0\"},{\"bom-ref\":\"pkg:golang/github.com/golangci/revgrep@0.5.3\",\"type\":\"library\",\"name\":\"github.com/golangci/revgrep\",\"version\":\"0.5.3\",\"purl\":\"pkg:golang/github.com/golangci/revgrep@0.5.3\"},{\"bom-ref\":\"pkg:golang/gopkg.in/check.v1@1.0.0-20201130134442-10cb98267c6c\",\"type\":\"library\",\"name\":\"gopkg.in/check.v1\",\"version\":\"1.0.0-20201130134442-10cb98267c6c\",\"purl\":\"pkg:golang/gopkg.in/check.v1@1.0.0-20201130134442-10cb98267c6c\"},{\"bom-ref\":\"pkg:golang/github.com/gogo/googleapis@1.4.1\",\"type\":\"library\",\"name\":\"github.com/gogo/googleapis\",\"version\":\"1.4.1\",\"purl\":\"pkg:golang/github.com/gogo/googleapis@1.4.1\"},{\"bom-ref\":\"pkg:golang/github.com/titanous/rocacheck@0.0.0-20171023193734-afe73141d399\",\"type\":\"library\",\"name\":\"github.com/titanous/rocacheck\",\"version\":\"0.0.0-20171023193734-afe73141d399\",\"purl\":\"pkg:golang/github.com/titanous/rocacheck@0.0.0-20171023193734-afe73141d399\"},{\"bom-ref\":\"pkg:golang/github.com/jirfag/go-printf-func-name@0.0.0-20200119135958-7558a9eaa5af\",\"type\":\"library\",\"name\":\"github.com/jirfag/go-printf-func-name\",\"version\":\"0.0.0-20200119135958-7558a9eaa5af\",\"purl\":\"pkg:golang/github.com/jirfag/go-printf-func-name@0.0.0-20200119135958-7558a9eaa5af\"},{\"bom-ref\":\"pkg:golang/github.com/aquasecurity/trivy-db@0.0.0-20240910133327-7e0f4d2ed4c1\",\"type\":\"library\",\"name\":\"github.com/aquasecurity/trivy-db\",\"version\":\"0.0.0-20240910133327-7e0f4d2ed4c1\",\"purl\":\"pkg:golang/github.com/aquasecurity/trivy-db@0.0.0-20240910133327-7e0f4d2ed4c1\"},{\"bom-ref\":\"pkg:golang/k8s.io/kube-openapi@0.0.0-20240228011516-70dd3763d340\",\"type\":\"library\",\"name\":\"k8s.io/kube-openapi\",\"version\":\"0.0.0-20240228011516-70dd3763d340\",\"purl\":\"pkg:golang/k8s.io/kube-openapi@0.0.0-20240228011516-70dd3763d340\"},{\"bom-ref\":\"pkg:golang/github.com/theupdateframework/go-tuf@0.7.0\",\"type\":\"library\",\"name\":\"github.com/theupdateframework/go-tuf\",\"version\":\"0.7.0\",\"purl\":\"pkg:golang/github.com/theupdateframework/go-tuf@0.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/docker/docker@27.5.1+incompatible\",\"type\":\"library\",\"name\":\"github.com/docker/docker\",\"version\":\"27.5.1+incompatible\",\"purl\":\"pkg:golang/github.com/docker/docker@27.5.1+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/mohae/deepcopy@0.0.0-20170929034955-c48cc78d4826\",\"type\":\"library\",\"name\":\"github.com/mohae/deepcopy\",\"version\":\"0.0.0-20170929034955-c48cc78d4826\",\"purl\":\"pkg:golang/github.com/mohae/deepcopy@0.0.0-20170929034955-c48cc78d4826\"},{\"bom-ref\":\"pkg:golang/github.com/samber/lo@1.47.0\",\"type\":\"library\",\"name\":\"github.com/samber/lo\",\"version\":\"1.47.0\",\"purl\":\"pkg:golang/github.com/samber/lo@1.47.0\"},{\"bom-ref\":\"pkg:golang/github.com/monochromegane/go-gitignore@0.0.0-20200626010858-205db1a8cc00\",\"type\":\"library\",\"name\":\"github.com/monochromegane/go-gitignore\",\"version\":\"0.0.0-20200626010858-205db1a8cc00\",\"purl\":\"pkg:golang/github.com/monochromegane/go-gitignore@0.0.0-20200626010858-205db1a8cc00\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/trivy@0.0.0-20241223234648-d2ac813bf11b\",\"type\":\"library\",\"name\":\"github.com/DataDog/trivy\",\"version\":\"0.0.0-20241223234648-d2ac813bf11b\",\"purl\":\"pkg:golang/github.com/DataDog/trivy@0.0.0-20241223234648-d2ac813bf11b\"},{\"bom-ref\":\"pkg:golang/github.com/google/shlex@0.0.0-20191202100458-e7afc7fbc510\",\"type\":\"library\",\"name\":\"github.com/google/shlex\",\"version\":\"0.0.0-20191202100458-e7afc7fbc510\",\"purl\":\"pkg:golang/github.com/google/shlex@0.0.0-20191202100458-e7afc7fbc510\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-eks/sdk/v3@3.7.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-eks/sdk/v3\",\"version\":\"3.7.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-eks/sdk/v3@3.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/tklauser/go-sysconf@0.3.12\",\"type\":\"library\",\"name\":\"github.com/tklauser/go-sysconf\",\"version\":\"0.3.12\",\"purl\":\"pkg:golang/github.com/tklauser/go-sysconf@0.3.12\"},{\"bom-ref\":\"pkg:golang/github.com/jonboulle/clockwork@0.4.0\",\"type\":\"library\",\"name\":\"github.com/jonboulle/clockwork\",\"version\":\"0.4.0\",\"purl\":\"pkg:golang/github.com/jonboulle/clockwork@0.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/kardianos/osext@0.0.0-20190222173326-2bc1f35cddc0\",\"type\":\"library\",\"name\":\"github.com/kardianos/osext\",\"version\":\"0.0.0-20190222173326-2bc1f35cddc0\",\"purl\":\"pkg:golang/github.com/kardianos/osext@0.0.0-20190222173326-2bc1f35cddc0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/exporter/otlphttpexporter@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/exporter/otlphttpexporter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/exporter/otlphttpexporter@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/antlr4-go/antlr/v4@4.13.0\",\"type\":\"library\",\"name\":\"github.com/antlr4-go/antlr/v4\",\"version\":\"4.13.0\",\"purl\":\"pkg:golang/github.com/antlr4-go/antlr/v4@4.13.0\"},{\"bom-ref\":\"pkg:golang/gitlab.com/bosi/decorder@0.4.2\",\"type\":\"library\",\"name\":\"gitlab.com/bosi/decorder\",\"version\":\"0.4.2\",\"purl\":\"pkg:golang/gitlab.com/bosi/decorder@0.4.2\"},{\"bom-ref\":\"pkg:npm/long@5.2.3\",\"type\":\"library\",\"name\":\"long\",\"version\":\"5.2.3\",\"purl\":\"pkg:npm/long@5.2.3\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/pflag@1.0.5\",\"type\":\"library\",\"name\":\"github.com/spf13/pflag\",\"version\":\"1.0.5\",\"purl\":\"pkg:golang/github.com/spf13/pflag@1.0.5\"},{\"bom-ref\":\"pkg:golang/github.com/shogo82148/go-shuffle@0.0.0-20170808115208-59829097ff3b\",\"type\":\"library\",\"name\":\"github.com/shogo82148/go-shuffle\",\"version\":\"0.0.0-20170808115208-59829097ff3b\",\"purl\":\"pkg:golang/github.com/shogo82148/go-shuffle@0.0.0-20170808115208-59829097ff3b\"},{\"bom-ref\":\"pkg:golang/github.com/moby/buildkit@0.16.0\",\"type\":\"library\",\"name\":\"github.com/moby/buildkit\",\"version\":\"0.16.0\",\"purl\":\"pkg:golang/github.com/moby/buildkit@0.16.0\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/ttrpc@1.2.5\",\"type\":\"library\",\"name\":\"github.com/containerd/ttrpc\",\"version\":\"1.2.5\",\"purl\":\"pkg:golang/github.com/containerd/ttrpc@1.2.5\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/processor/processorhelper/xprocessorhelper@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/grpc-ecosystem/grpc-gateway/v2@2.25.1\",\"type\":\"library\",\"name\":\"github.com/grpc-ecosystem/grpc-gateway/v2\",\"version\":\"2.25.1\",\"purl\":\"pkg:golang/github.com/grpc-ecosystem/grpc-gateway/v2@2.25.1\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/swag@0.23.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/swag\",\"version\":\"0.23.0\",\"purl\":\"pkg:golang/github.com/go-openapi/swag@0.23.0\"},{\"bom-ref\":\"pkg:golang/github.com/godror/knownpb@0.1.0\",\"type\":\"library\",\"name\":\"github.com/godror/knownpb\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/godror/knownpb@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/armon/go-metrics@0.4.1\",\"type\":\"library\",\"name\":\"github.com/armon/go-metrics\",\"version\":\"0.4.1\",\"purl\":\"pkg:golang/github.com/armon/go-metrics@0.4.1\"},{\"bom-ref\":\"pkg:golang/github.com/lorenzosaino/go-sysctl@0.3.1\",\"type\":\"library\",\"name\":\"github.com/lorenzosaino/go-sysctl\",\"version\":\"0.3.1\",\"purl\":\"pkg:golang/github.com/lorenzosaino/go-sysctl@0.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ecr@1.36.7\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/ecr\",\"version\":\"1.36.7\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ecr@1.36.7\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/viper@1.19.0\",\"type\":\"library\",\"name\":\"github.com/spf13/viper\",\"version\":\"1.19.0\",\"purl\":\"pkg:golang/github.com/spf13/viper@1.19.0\"},{\"bom-ref\":\"pkg:golang/github.com/antchfx/xmlquery@1.4.3\",\"type\":\"library\",\"name\":\"github.com/antchfx/xmlquery\",\"version\":\"1.4.3\",\"purl\":\"pkg:golang/github.com/antchfx/xmlquery@1.4.3\"},{\"bom-ref\":\"pkg:golang/k8s.io/apiserver@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/apiserver\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/apiserver@0.31.2\"},{\"bom-ref\":\"pkg:npm/%40datadog%2Fnative-iast-taint-tracking@3.1.0\",\"type\":\"library\",\"name\":\"@datadog/native-iast-taint-tracking\",\"version\":\"3.1.0\",\"purl\":\"pkg:npm/%40datadog%2Fnative-iast-taint-tracking@3.1.0\"},{\"bom-ref\":\"pkg:pypi/termcolor@2.5.0\",\"type\":\"library\",\"name\":\"termcolor\",\"version\":\"2.5.0\",\"purl\":\"pkg:pypi/termcolor@2.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-libvirt/sdk@0.5.4\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-libvirt/sdk\",\"version\":\"0.5.4\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-libvirt/sdk@0.5.4\"},{\"bom-ref\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/azcore@1.13.0\",\"type\":\"library\",\"name\":\"github.com/Azure/azure-sdk-for-go/sdk/azcore\",\"version\":\"1.13.0\",\"purl\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/azcore@1.13.0\"},{\"bom-ref\":\"pkg:golang/github.com/sabhiram/go-gitignore@0.0.0-20210923224102-525f6e181f06\",\"type\":\"library\",\"name\":\"github.com/sabhiram/go-gitignore\",\"version\":\"0.0.0-20210923224102-525f6e181f06\",\"purl\":\"pkg:golang/github.com/sabhiram/go-gitignore@0.0.0-20210923224102-525f6e181f06\"},{\"bom-ref\":\"pkg:npm/p-limit@3.1.0\",\"type\":\"library\",\"name\":\"p-limit\",\"version\":\"3.1.0\",\"purl\":\"pkg:npm/p-limit@3.1.0\"},{\"bom-ref\":\"pkg:golang/mellium.im/sasl@0.3.2\",\"type\":\"library\",\"name\":\"mellium.im/sasl\",\"version\":\"0.3.2\",\"purl\":\"pkg:golang/mellium.im/sasl@0.3.2\"},{\"bom-ref\":\"pkg:golang/github.com/fsnotify/fsnotify@1.8.0\",\"type\":\"library\",\"name\":\"github.com/fsnotify/fsnotify\",\"version\":\"1.8.0\",\"purl\":\"pkg:golang/github.com/fsnotify/fsnotify@1.8.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/consumer/consumertest@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/consumer/consumertest\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/consumer/consumertest@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/smithy-go@1.22.2\",\"type\":\"library\",\"name\":\"github.com/aws/smithy-go\",\"version\":\"1.22.2\",\"purl\":\"pkg:golang/github.com/aws/smithy-go@1.22.2\"},{\"bom-ref\":\"pkg:golang/modernc.org/libc@1.55.3\",\"type\":\"library\",\"name\":\"modernc.org/libc\",\"version\":\"1.55.3\",\"purl\":\"pkg:golang/modernc.org/libc@1.55.3\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/client_golang@1.20.5\",\"type\":\"library\",\"name\":\"github.com/prometheus/client_golang\",\"version\":\"1.20.5\",\"purl\":\"pkg:golang/github.com/prometheus/client_golang@1.20.5\"},{\"bom-ref\":\"pkg:golang/github.com/openshift/api@0.0.0-20230726162818-81f778f3b3ec\",\"type\":\"library\",\"name\":\"github.com/openshift/api\",\"version\":\"0.0.0-20230726162818-81f778f3b3ec\",\"purl\":\"pkg:golang/github.com/openshift/api@0.0.0-20230726162818-81f778f3b3ec\"},{\"bom-ref\":\"pkg:npm/int64-buffer@0.1.10\",\"type\":\"library\",\"name\":\"int64-buffer\",\"version\":\"0.1.10\",\"purl\":\"pkg:npm/int64-buffer@0.1.10\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/component-base@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/component-base\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/component-base@0.31.2\"},{\"bom-ref\":\"pkg:golang/github.com/felixge/httpsnoop@1.0.4\",\"type\":\"library\",\"name\":\"github.com/felixge/httpsnoop\",\"version\":\"1.0.4\",\"purl\":\"pkg:golang/github.com/felixge/httpsnoop@1.0.4\"},{\"bom-ref\":\"pkg:golang/github.com/nishanths/exhaustive@0.12.0\",\"type\":\"library\",\"name\":\"github.com/nishanths/exhaustive\",\"version\":\"0.12.0\",\"purl\":\"pkg:golang/github.com/nishanths/exhaustive@0.12.0\"},{\"bom-ref\":\"pkg:golang/github.com/polyfloyd/go-errorlint@1.6.0\",\"type\":\"library\",\"name\":\"github.com/polyfloyd/go-errorlint\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/github.com/polyfloyd/go-errorlint@1.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/opencontainers/go-digest@1.0.0\",\"type\":\"library\",\"name\":\"github.com/opencontainers/go-digest\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/opencontainers/go-digest@1.0.0\"},{\"bom-ref\":\"pkg:npm/tlhunter-sorted-set@0.1.0\",\"type\":\"library\",\"name\":\"tlhunter-sorted-set\",\"version\":\"0.1.0\",\"purl\":\"pkg:npm/tlhunter-sorted-set@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/StackExchange/wmi@1.2.1\",\"type\":\"library\",\"name\":\"github.com/StackExchange/wmi\",\"version\":\"1.2.1\",\"purl\":\"pkg:golang/github.com/StackExchange/wmi@1.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/vmihailenco/msgpack/v5@5.4.1\",\"type\":\"library\",\"name\":\"github.com/vmihailenco/msgpack/v5\",\"version\":\"5.4.1\",\"purl\":\"pkg:golang/github.com/vmihailenco/msgpack/v5@5.4.1\"},{\"bom-ref\":\"pkg:golang/google.golang.org/grpc/examples@0.0.0-20221020162917-9127159caf5a\",\"type\":\"library\",\"name\":\"google.golang.org/grpc/examples\",\"version\":\"0.0.0-20221020162917-9127159caf5a\",\"purl\":\"pkg:golang/google.golang.org/grpc/examples@0.0.0-20221020162917-9127159caf5a\"},{\"bom-ref\":\"pkg:pypi/invoke@2.2.0\",\"type\":\"library\",\"name\":\"invoke\",\"version\":\"2.2.0\",\"purl\":\"pkg:pypi/invoke@2.2.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/kubelet@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/kubelet\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/kubelet@0.31.2\"},{\"bom-ref\":\"pkg:golang/github.com/tedsuo/ifrit@0.0.0-20191009134036-9a97d0632f00\",\"type\":\"library\",\"name\":\"github.com/tedsuo/ifrit\",\"version\":\"0.0.0-20191009134036-9a97d0632f00\",\"purl\":\"pkg:golang/github.com/tedsuo/ifrit@0.0.0-20191009134036-9a97d0632f00\"},{\"bom-ref\":\"pkg:golang/github.com/jbenet/go-context@0.0.0-20150711004518-d14ea06fba99\",\"type\":\"library\",\"name\":\"github.com/jbenet/go-context\",\"version\":\"0.0.0-20150711004518-d14ea06fba99\",\"purl\":\"pkg:golang/github.com/jbenet/go-context@0.0.0-20150711004518-d14ea06fba99\"},{\"bom-ref\":\"pkg:golang/github.com/elastic/go-libaudit/v2@2.5.0\",\"type\":\"library\",\"name\":\"github.com/elastic/go-libaudit/v2\",\"version\":\"2.5.0\",\"purl\":\"pkg:golang/github.com/elastic/go-libaudit/v2@2.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/ryanuber/go-glob@1.0.0\",\"type\":\"library\",\"name\":\"github.com/ryanuber/go-glob\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/ryanuber/go-glob@1.0.0\"},{\"bom-ref\":\"pkg:golang/go4.org/intern@0.0.0-20211027215823-ae77deb06f29\",\"type\":\"library\",\"name\":\"go4.org/intern\",\"version\":\"0.0.0-20211027215823-ae77deb06f29\",\"purl\":\"pkg:golang/go4.org/intern@0.0.0-20211027215823-ae77deb06f29\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/config/confighttp@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/config/confighttp\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/config/confighttp@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/google/go-github/v62@62.0.0\",\"type\":\"library\",\"name\":\"github.com/google/go-github/v62\",\"version\":\"62.0.0\",\"purl\":\"pkg:golang/github.com/google/go-github/v62@62.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/shopspring/decimal@1.4.0\",\"type\":\"library\",\"name\":\"github.com/shopspring/decimal\",\"version\":\"1.4.0\",\"purl\":\"pkg:golang/github.com/shopspring/decimal@1.4.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/kube-openapi@0.0.0-20240430033511-f0e62f92d13f\",\"type\":\"library\",\"name\":\"k8s.io/kube-openapi\",\"version\":\"0.0.0-20240430033511-f0e62f92d13f\",\"purl\":\"pkg:golang/k8s.io/kube-openapi@0.0.0-20240430033511-f0e62f92d13f\"},{\"bom-ref\":\"pkg:golang/k8s.io/utils@0.0.0-20240711033017-18e509b52bc8\",\"type\":\"library\",\"name\":\"k8s.io/utils\",\"version\":\"0.0.0-20240711033017-18e509b52bc8\",\"purl\":\"pkg:golang/k8s.io/utils@0.0.0-20240711033017-18e509b52bc8\"},{\"bom-ref\":\"pkg:golang/github.com/butuzov/ireturn@0.3.0\",\"type\":\"library\",\"name\":\"github.com/butuzov/ireturn\",\"version\":\"0.3.0\",\"purl\":\"pkg:golang/github.com/butuzov/ireturn@0.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/log@0.1.0\",\"type\":\"library\",\"name\":\"github.com/containerd/log\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/containerd/log@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/feature/ec2/imds@1.16.25\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/feature/ec2/imds\",\"version\":\"1.16.25\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/feature/ec2/imds@1.16.25\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/hcl/v2@2.23.0\",\"type\":\"library\",\"name\":\"github.com/hashicorp/hcl/v2\",\"version\":\"2.23.0\",\"purl\":\"pkg:golang/github.com/hashicorp/hcl/v2@2.23.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/lucasb-eyer/go-colorful@1.2.0\",\"type\":\"library\",\"name\":\"github.com/lucasb-eyer/go-colorful\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/lucasb-eyer/go-colorful@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/go-tuf@1.0.1-0.5.2\",\"type\":\"library\",\"name\":\"github.com/DataDog/go-tuf\",\"version\":\"1.0.1-0.5.2\",\"purl\":\"pkg:golang/github.com/DataDog/go-tuf@1.0.1-0.5.2\"},{\"bom-ref\":\"pkg:golang/github.com/streadway/amqp@1.1.0\",\"type\":\"library\",\"name\":\"github.com/streadway/amqp\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/streadway/amqp@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-agent/pkg/remoteconfig/state@0.48.0-devel.0.20230725154044-2549ba9058df\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-agent/pkg/remoteconfig/state\",\"version\":\"0.48.0-devel.0.20230725154044-2549ba9058df\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-agent/pkg/remoteconfig/state@0.48.0-devel.0.20230725154044-2549ba9058df\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/go-sqllexer@0.0.20\",\"type\":\"library\",\"name\":\"github.com/DataDog/go-sqllexer\",\"version\":\"0.0.20\",\"purl\":\"pkg:golang/github.com/DataDog/go-sqllexer@0.0.20\"},{\"bom-ref\":\"pkg:golang/github.com/gostaticanalysis/forcetypeassert@0.1.0\",\"type\":\"library\",\"name\":\"github.com/gostaticanalysis/forcetypeassert\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/gostaticanalysis/forcetypeassert@0.1.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/sys@0.10.0\",\"type\":\"library\",\"name\":\"golang.org/x/sys\",\"version\":\"0.10.0\",\"purl\":\"pkg:golang/golang.org/x/sys@0.10.0\"},{\"bom-ref\":\"pkg:golang/github.com/zclconf/go-cty@1.15.1\",\"type\":\"library\",\"name\":\"github.com/zclconf/go-cty\",\"version\":\"1.15.1\",\"purl\":\"pkg:golang/github.com/zclconf/go-cty@1.15.1\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver@0.119.0\"},{\"bom-ref\":\"pkg:golang/gopkg.in/warnings.v0@0.1.2\",\"type\":\"library\",\"name\":\"gopkg.in/warnings.v0\",\"version\":\"0.1.2\",\"purl\":\"pkg:golang/gopkg.in/warnings.v0@0.1.2\"},{\"bom-ref\":\"pkg:pypi/pyyaml@6.0.1\",\"type\":\"library\",\"name\":\"pyyaml\",\"version\":\"6.0.1\",\"purl\":\"pkg:pypi/pyyaml@6.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/jinzhu/copier@0.3.5\",\"type\":\"library\",\"name\":\"github.com/jinzhu/copier\",\"version\":\"0.3.5\",\"purl\":\"pkg:golang/github.com/jinzhu/copier@0.3.5\"},{\"bom-ref\":\"pkg:golang/sigs.k8s.io/apiserver-network-proxy/konnectivity-client@0.30.3\",\"type\":\"library\",\"name\":\"sigs.k8s.io/apiserver-network-proxy/konnectivity-client\",\"version\":\"0.30.3\",\"purl\":\"pkg:golang/sigs.k8s.io/apiserver-network-proxy/konnectivity-client@0.30.3\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/kr/pretty@0.3.1\",\"type\":\"library\",\"name\":\"github.com/kr/pretty\",\"version\":\"0.3.1\",\"purl\":\"pkg:golang/github.com/kr/pretty@0.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/puzpuzpuz/xsync/v3@3.4.0\",\"type\":\"library\",\"name\":\"github.com/puzpuzpuz/xsync/v3\",\"version\":\"3.4.0\",\"purl\":\"pkg:golang/github.com/puzpuzpuz/xsync/v3@3.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/fatih/color@1.16.0\",\"type\":\"library\",\"name\":\"github.com/fatih/color\",\"version\":\"1.16.0\",\"purl\":\"pkg:golang/github.com/fatih/color@1.16.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/otelcol@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/otelcol\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/otelcol@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/credentials@1.13.20\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/credentials\",\"version\":\"1.13.20\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/credentials@1.13.20\"},{\"bom-ref\":\"pkg:golang/github.com/fzipp/gocyclo@0.6.0\",\"type\":\"library\",\"name\":\"github.com/fzipp/gocyclo\",\"version\":\"0.6.0\",\"purl\":\"pkg:golang/github.com/fzipp/gocyclo@0.6.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/oauth2@0.24.0\",\"type\":\"library\",\"name\":\"golang.org/x/oauth2\",\"version\":\"0.24.0\",\"purl\":\"pkg:golang/golang.org/x/oauth2@0.24.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/quantile@0.11.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/opentelemetry-mapping-go/pkg/quantile\",\"version\":\"0.11.0\",\"purl\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/quantile@0.11.0\"},{\"bom-ref\":\"pkg:golang/github.com/stretchr/testify@1.10.0\",\"type\":\"library\",\"name\":\"github.com/stretchr/testify\",\"version\":\"1.10.0\",\"purl\":\"pkg:golang/github.com/stretchr/testify@1.10.0\"},{\"bom-ref\":\"pkg:pypi/debugpy@1.8.2\",\"type\":\"library\",\"name\":\"debugpy\",\"version\":\"1.8.2\",\"purl\":\"pkg:pypi/debugpy@1.8.2\"},{\"bom-ref\":\"pkg:golang/github.com/smira/go-xz@0.1.0\",\"type\":\"library\",\"name\":\"github.com/smira/go-xz\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/smira/go-xz@0.1.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/internal/fanoutconsumer@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/internal/fanoutconsumer\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/internal/fanoutconsumer@0.119.0\"},{\"bom-ref\":\"pkg:npm/protobufjs@7.4.0\",\"type\":\"library\",\"name\":\"protobufjs\",\"version\":\"7.4.0\",\"purl\":\"pkg:npm/protobufjs@7.4.0\"},{\"bom-ref\":\"pkg:npm/node-gyp-build@3.9.0\",\"type\":\"library\",\"name\":\"node-gyp-build\",\"version\":\"3.9.0\",\"purl\":\"pkg:npm/node-gyp-build@3.9.0\"},{\"bom-ref\":\"pkg:golang/github.com/twmb/franz-go@1.17.0\",\"type\":\"library\",\"name\":\"github.com/twmb/franz-go\",\"version\":\"1.17.0\",\"purl\":\"pkg:golang/github.com/twmb/franz-go@1.17.0\"},{\"bom-ref\":\"pkg:golang/github.com/dgryski/go-farm@0.0.0-20200201041132-a6ae2369ad13\",\"type\":\"library\",\"name\":\"github.com/dgryski/go-farm\",\"version\":\"0.0.0-20200201041132-a6ae2369ad13\",\"purl\":\"pkg:golang/github.com/dgryski/go-farm@0.0.0-20200201041132-a6ae2369ad13\"},{\"bom-ref\":\"pkg:golang/github.com/yashtewari/glob-intersection@0.2.0\",\"type\":\"library\",\"name\":\"github.com/yashtewari/glob-intersection\",\"version\":\"0.2.0\",\"purl\":\"pkg:golang/github.com/yashtewari/glob-intersection@0.2.0\"},{\"bom-ref\":\"pkg:golang/cloud.google.com/go/auth@0.9.5\",\"type\":\"library\",\"name\":\"cloud.google.com/go/auth\",\"version\":\"0.9.5\",\"purl\":\"pkg:golang/cloud.google.com/go/auth@0.9.5\"},{\"bom-ref\":\"pkg:golang/github.com/spf13/afero@1.11.0\",\"type\":\"library\",\"name\":\"github.com/spf13/afero\",\"version\":\"1.11.0\",\"purl\":\"pkg:golang/github.com/spf13/afero@1.11.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/consumer/consumererror@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/consumer/consumererror\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/consumer/consumererror@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.etcd.io/etcd/api/v3@3.6.0-alpha.0\",\"type\":\"library\",\"name\":\"go.etcd.io/etcd/api/v3\",\"version\":\"3.6.0-alpha.0\",\"purl\":\"pkg:golang/go.etcd.io/etcd/api/v3@3.6.0-alpha.0\"},{\"bom-ref\":\"pkg:golang/github.com/jackc/pgpassfile@1.0.0\",\"type\":\"library\",\"name\":\"github.com/jackc/pgpassfile\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/jackc/pgpassfile@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream@1.6.8\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream\",\"version\":\"1.6.8\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream@1.6.8\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/trace@1.20.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/trace\",\"version\":\"1.20.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/trace@1.20.0\"},{\"bom-ref\":\"pkg:golang/github.com/cenkalti/backoff/v4@4.2.0\",\"type\":\"library\",\"name\":\"github.com/cenkalti/backoff/v4\",\"version\":\"4.2.0\",\"purl\":\"pkg:golang/github.com/cenkalti/backoff/v4@4.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/firefart/nonamedreturns@1.0.5\",\"type\":\"library\",\"name\":\"github.com/firefart/nonamedreturns\",\"version\":\"1.0.5\",\"purl\":\"pkg:golang/github.com/firefart/nonamedreturns@1.0.5\"},{\"bom-ref\":\"pkg:golang/github.com/ashanbrown/forbidigo@1.6.0\",\"type\":\"library\",\"name\":\"github.com/ashanbrown/forbidigo\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/github.com/ashanbrown/forbidigo@1.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/ini@1.3.34\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/internal/ini\",\"version\":\"1.3.34\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/ini@1.3.34\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-immutable-radix@1.3.1\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-immutable-radix\",\"version\":\"1.3.1\",\"purl\":\"pkg:golang/github.com/hashicorp/go-immutable-radix@1.3.1\"},{\"bom-ref\":\"pkg:golang/k8s.io/cli-runtime@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/cli-runtime\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/cli-runtime@0.31.2\"},{\"bom-ref\":\"pkg:golang/github.com/go-logr/stdr@1.2.2\",\"type\":\"library\",\"name\":\"github.com/go-logr/stdr\",\"version\":\"1.2.2\",\"purl\":\"pkg:golang/github.com/go-logr/stdr@1.2.2\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/eks@1.57.0\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/eks\",\"version\":\"1.57.0\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/eks@1.57.0\"},{\"bom-ref\":\"pkg:golang/github.com/jessevdk/go-flags@1.5.0\",\"type\":\"library\",\"name\":\"github.com/jessevdk/go-flags\",\"version\":\"1.5.0\",\"purl\":\"pkg:golang/github.com/jessevdk/go-flags@1.5.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/lint@0.0.0-20241112194109-818c5a804067\",\"type\":\"library\",\"name\":\"golang.org/x/lint\",\"version\":\"0.0.0-20241112194109-818c5a804067\",\"purl\":\"pkg:golang/golang.org/x/lint@0.0.0-20241112194109-818c5a804067\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/golangci/dupl@0.0.0-20180902072040-3e9179ac440a\",\"type\":\"library\",\"name\":\"github.com/golangci/dupl\",\"version\":\"0.0.0-20180902072040-3e9179ac440a\",\"purl\":\"pkg:golang/github.com/golangci/dupl@0.0.0-20180902072040-3e9179ac440a\"},{\"bom-ref\":\"pkg:golang/github.com/elastic/go-seccomp-bpf@1.5.0\",\"type\":\"library\",\"name\":\"github.com/elastic/go-seccomp-bpf\",\"version\":\"1.5.0\",\"purl\":\"pkg:golang/github.com/elastic/go-seccomp-bpf@1.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/josharian/native@1.1.0\",\"type\":\"library\",\"name\":\"github.com/josharian/native\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/josharian/native@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/curioswitch/go-reassign@0.2.0\",\"type\":\"library\",\"name\":\"github.com/curioswitch/go-reassign\",\"version\":\"0.2.0\",\"purl\":\"pkg:golang/github.com/curioswitch/go-reassign@0.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/config@1.29.2\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/config\",\"version\":\"1.29.2\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/config@1.29.2\"},{\"bom-ref\":\"pkg:golang/github.com/dgryski/go-rendezvous@0.0.0-20200823014737-9f7001d12a5f\",\"type\":\"library\",\"name\":\"github.com/dgryski/go-rendezvous\",\"version\":\"0.0.0-20200823014737-9f7001d12a5f\",\"purl\":\"pkg:golang/github.com/dgryski/go-rendezvous@0.0.0-20200823014737-9f7001d12a5f\"},{\"bom-ref\":\"pkg:golang/github.com/philhofer/fwd@1.1.1\",\"type\":\"library\",\"name\":\"github.com/philhofer/fwd\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/philhofer/fwd@1.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/golang/glog@1.2.4\",\"type\":\"library\",\"name\":\"github.com/golang/glog\",\"version\":\"1.2.4\",\"purl\":\"pkg:golang/github.com/golang/glog@1.2.4\"},{\"bom-ref\":\"pkg:golang/github.com/dvsekhvalnov/jose2go@1.7.0\",\"type\":\"library\",\"name\":\"github.com/dvsekhvalnov/jose2go\",\"version\":\"1.7.0\",\"purl\":\"pkg:golang/github.com/dvsekhvalnov/jose2go@1.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/vmihailenco/tagparser@0.1.2\",\"type\":\"library\",\"name\":\"github.com/vmihailenco/tagparser\",\"version\":\"0.1.2\",\"purl\":\"pkg:golang/github.com/vmihailenco/tagparser@0.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/masahiro331/go-vmdk-parser@0.0.0-20221225061455-612096e4bbbd\",\"type\":\"library\",\"name\":\"github.com/masahiro331/go-vmdk-parser\",\"version\":\"0.0.0-20221225061455-612096e4bbbd\",\"purl\":\"pkg:golang/github.com/masahiro331/go-vmdk-parser@0.0.0-20221225061455-612096e4bbbd\"},{\"bom-ref\":\"pkg:golang/github.com/knqyf263/nested@0.0.1\",\"type\":\"library\",\"name\":\"github.com/knqyf263/nested\",\"version\":\"0.0.1\",\"purl\":\"pkg:golang/github.com/knqyf263/nested@0.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/bmizerany/pat@0.0.0-20170815010413-6226ea591a40\",\"type\":\"library\",\"name\":\"github.com/bmizerany/pat\",\"version\":\"0.0.0-20170815010413-6226ea591a40\",\"purl\":\"pkg:golang/github.com/bmizerany/pat@0.0.0-20170815010413-6226ea591a40\"},{\"bom-ref\":\"pkg:golang/github.com/tetratelabs/wazero@1.8.0\",\"type\":\"library\",\"name\":\"github.com/tetratelabs/wazero\",\"version\":\"1.8.0\",\"purl\":\"pkg:golang/github.com/tetratelabs/wazero@1.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/valyala/fastjson@1.6.4\",\"type\":\"library\",\"name\":\"github.com/valyala/fastjson\",\"version\":\"1.6.4\",\"purl\":\"pkg:golang/github.com/valyala/fastjson@1.6.4\"},{\"bom-ref\":\"pkg:golang/github.com/wadey/gocovmerge@0.0.0-20160331181800-b5bfa59ec0ad\",\"type\":\"library\",\"name\":\"github.com/wadey/gocovmerge\",\"version\":\"0.0.0-20160331181800-b5bfa59ec0ad\",\"purl\":\"pkg:golang/github.com/wadey/gocovmerge@0.0.0-20160331181800-b5bfa59ec0ad\"},{\"bom-ref\":\"pkg:golang/github.com/knadh/koanf/providers/confmap@0.1.0-dev0\",\"type\":\"library\",\"name\":\"github.com/knadh/koanf/providers/confmap\",\"version\":\"0.1.0-dev0\",\"purl\":\"pkg:golang/github.com/knadh/koanf/providers/confmap@0.1.0-dev0\"},{\"bom-ref\":\"pkg:npm/ignore@5.3.2\",\"type\":\"library\",\"name\":\"ignore\",\"version\":\"5.3.2\",\"purl\":\"pkg:npm/ignore@5.3.2\"},{\"bom-ref\":\"pkg:golang/github.com/moby/locker@1.0.1\",\"type\":\"library\",\"name\":\"github.com/moby/locker\",\"version\":\"1.0.1\",\"purl\":\"pkg:golang/github.com/moby/locker@1.0.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/connector@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/connector\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/connector@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/chavacava/garif@0.1.0\",\"type\":\"library\",\"name\":\"github.com/chavacava/garif\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/chavacava/garif@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/errwrap@1.1.0\",\"type\":\"library\",\"name\":\"github.com/hashicorp/errwrap\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/hashicorp/errwrap@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/stbenjam/no-sprintf-host-port@0.1.1\",\"type\":\"library\",\"name\":\"github.com/stbenjam/no-sprintf-host-port\",\"version\":\"0.1.1\",\"purl\":\"pkg:golang/github.com/stbenjam/no-sprintf-host-port@0.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/charmbracelet/bubbles@0.20.0\",\"type\":\"library\",\"name\":\"github.com/charmbracelet/bubbles\",\"version\":\"0.20.0\",\"purl\":\"pkg:golang/github.com/charmbracelet/bubbles@0.20.0\"},{\"bom-ref\":\"pkg:golang/github.com/cyphar/filepath-securejoin@0.3.6\",\"type\":\"library\",\"name\":\"github.com/cyphar/filepath-securejoin\",\"version\":\"0.3.6\",\"purl\":\"pkg:golang/github.com/cyphar/filepath-securejoin@0.3.6\"},{\"bom-ref\":\"pkg:golang/github.com/glebarez/go-sqlite@1.22.0\",\"type\":\"library\",\"name\":\"github.com/glebarez/go-sqlite\",\"version\":\"1.22.0\",\"purl\":\"pkg:golang/github.com/glebarez/go-sqlite@1.22.0\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/v2@2.81.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-azure-native-sdk/v2\",\"version\":\"2.81.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/v2@2.81.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/jsonreference@0.20.4\",\"type\":\"library\",\"name\":\"github.com/go-openapi/jsonreference\",\"version\":\"0.20.4\",\"purl\":\"pkg:golang/github.com/go-openapi/jsonreference@0.20.4\"},{\"bom-ref\":\"pkg:golang/github.com/shibumi/go-pathspec@1.3.0\",\"type\":\"library\",\"name\":\"github.com/shibumi/go-pathspec\",\"version\":\"1.3.0\",\"purl\":\"pkg:golang/github.com/shibumi/go-pathspec@1.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/klauspost/compress@1.16.3\",\"type\":\"library\",\"name\":\"github.com/klauspost/compress\",\"version\":\"1.16.3\",\"purl\":\"pkg:golang/github.com/klauspost/compress@1.16.3\"},{\"bom-ref\":\"pkg:golang/4d63.com/gocheckcompilerdirectives@1.2.1\",\"type\":\"library\",\"name\":\"4d63.com/gocheckcompilerdirectives\",\"version\":\"1.2.1\",\"purl\":\"pkg:golang/4d63.com/gocheckcompilerdirectives@1.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/mitchellh/reflectwalk@1.0.2\",\"type\":\"library\",\"name\":\"github.com/mitchellh/reflectwalk\",\"version\":\"1.0.2\",\"purl\":\"pkg:golang/github.com/mitchellh/reflectwalk@1.0.2\"},{\"bom-ref\":\"pkg:golang/github.com/quasilyte/go-ruleguard/dsl@0.3.22\",\"type\":\"library\",\"name\":\"github.com/quasilyte/go-ruleguard/dsl\",\"version\":\"0.3.22\",\"purl\":\"pkg:golang/github.com/quasilyte/go-ruleguard/dsl@0.3.22\"},{\"bom-ref\":\"pkg:golang/github.com/rivo/uniseg@0.4.7\",\"type\":\"library\",\"name\":\"github.com/rivo/uniseg\",\"version\":\"0.4.7\",\"purl\":\"pkg:golang/github.com/rivo/uniseg@0.4.7\"},{\"bom-ref\":\"pkg:npm/dc-polyfill@0.1.6\",\"type\":\"library\",\"name\":\"dc-polyfill\",\"version\":\"0.1.6\",\"purl\":\"pkg:npm/dc-polyfill@0.1.6\"},{\"bom-ref\":\"pkg:golang/github.com/judwhite/go-svc@1.2.1\",\"type\":\"library\",\"name\":\"github.com/judwhite/go-svc\",\"version\":\"1.2.1\",\"purl\":\"pkg:golang/github.com/judwhite/go-svc@1.2.1\"},{\"bom-ref\":\"pkg:pypi/mkdocs@1.5.3\",\"type\":\"library\",\"name\":\"mkdocs\",\"version\":\"1.5.3\",\"purl\":\"pkg:pypi/mkdocs@1.5.3\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/procfs@0.15.1\",\"type\":\"library\",\"name\":\"github.com/prometheus/procfs\",\"version\":\"0.15.1\",\"purl\":\"pkg:golang/github.com/prometheus/procfs@0.15.1\"},{\"bom-ref\":\"pkg:golang/github.com/distribution/reference@0.6.0\",\"type\":\"library\",\"name\":\"github.com/distribution/reference\",\"version\":\"0.6.0\",\"purl\":\"pkg:golang/github.com/distribution/reference@0.6.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/googleapis/gax-go/v2@2.13.0\",\"type\":\"library\",\"name\":\"github.com/googleapis/gax-go/v2\",\"version\":\"2.13.0\",\"purl\":\"pkg:golang/github.com/googleapis/gax-go/v2@2.13.0\"},{\"bom-ref\":\"pkg:pypi/mkdocs-glightbox@0.3.5\",\"type\":\"library\",\"name\":\"mkdocs-glightbox\",\"version\":\"0.3.5\",\"purl\":\"pkg:pypi/mkdocs-glightbox@0.3.5\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/exporter/xexporter@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/exporter/xexporter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/exporter/xexporter@0.119.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/xerrors@0.0.0-20220907171357-04be3eba64a2\",\"type\":\"library\",\"name\":\"golang.org/x/xerrors\",\"version\":\"0.0.0-20220907171357-04be3eba64a2\",\"purl\":\"pkg:golang/golang.org/x/xerrors@0.0.0-20220907171357-04be3eba64a2\"},{\"bom-ref\":\"pkg:golang/github.com/prometheus/common@0.44.0\",\"type\":\"library\",\"name\":\"github.com/prometheus/common\",\"version\":\"0.44.0\",\"purl\":\"pkg:golang/github.com/prometheus/common@0.44.0\"},{\"bom-ref\":\"pkg:golang/github.com/uptrace/bun/dialect/pgdialect@1.2.5\",\"type\":\"library\",\"name\":\"github.com/uptrace/bun/dialect/pgdialect\",\"version\":\"1.2.5\",\"purl\":\"pkg:golang/github.com/uptrace/bun/dialect/pgdialect@1.2.5\"},{\"bom-ref\":\"pkg:golang/github.com/mitchellh/go-ps@1.0.0\",\"type\":\"library\",\"name\":\"github.com/mitchellh/go-ps\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/mitchellh/go-ps@1.0.0\"},{\"bom-ref\":\"pkg:golang/gopkg.in/evanphx/json-patch.v4@4.12.0\",\"type\":\"library\",\"name\":\"gopkg.in/evanphx/json-patch.v4\",\"version\":\"4.12.0\",\"purl\":\"pkg:golang/gopkg.in/evanphx/json-patch.v4@4.12.0\"},{\"bom-ref\":\"pkg:golang/github.com/alecthomas/participle/v2@2.1.1\",\"type\":\"library\",\"name\":\"github.com/alecthomas/participle/v2\",\"version\":\"2.1.1\",\"purl\":\"pkg:golang/github.com/alecthomas/participle/v2@2.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/jgautheron/goconst@1.7.1\",\"type\":\"library\",\"name\":\"github.com/jgautheron/goconst\",\"version\":\"1.7.1\",\"purl\":\"pkg:golang/github.com/jgautheron/goconst@1.7.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/contrib/zpages@0.59.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/contrib/zpages\",\"version\":\"0.59.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/contrib/zpages@0.59.0\"},{\"bom-ref\":\"pkg:golang/github.com/muesli/ansi@0.0.0-20230316100256-276c6243b2f6\",\"type\":\"library\",\"name\":\"github.com/muesli/ansi\",\"version\":\"0.0.0-20230316100256-276c6243b2f6\",\"purl\":\"pkg:golang/github.com/muesli/ansi@0.0.0-20230316100256-276c6243b2f6\"},{\"bom-ref\":\"pkg:golang/github.com/golang/protobuf@1.5.4\",\"type\":\"library\",\"name\":\"github.com/golang/protobuf\",\"version\":\"1.5.4\",\"purl\":\"pkg:golang/github.com/golang/protobuf@1.5.4\"},{\"bom-ref\":\"pkg:golang/github.com/sigstore/rekor@1.3.6\",\"type\":\"library\",\"name\":\"github.com/sigstore/rekor\",\"version\":\"1.3.6\",\"purl\":\"pkg:golang/github.com/sigstore/rekor@1.3.6\"},{\"bom-ref\":\"pkg:golang/google.golang.org/appengine@1.6.8\",\"type\":\"library\",\"name\":\"google.golang.org/appengine\",\"version\":\"1.6.8\",\"purl\":\"pkg:golang/google.golang.org/appengine@1.6.8\"},{\"bom-ref\":\"pkg:golang/github.com/butuzov/mirror@1.2.0\",\"type\":\"library\",\"name\":\"github.com/butuzov/mirror\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/butuzov/mirror@1.2.0\"},{\"bom-ref\":\"pkg:pypi/python-gitlab@4.4.0\",\"type\":\"library\",\"name\":\"python-gitlab\",\"version\":\"4.4.0\",\"purl\":\"pkg:pypi/python-gitlab@4.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/golang/groupcache@0.0.0-20210331224755-41bb18bfe9da\",\"type\":\"library\",\"name\":\"github.com/golang/groupcache\",\"version\":\"0.0.0-20210331224755-41bb18bfe9da\",\"purl\":\"pkg:golang/github.com/golang/groupcache@0.0.0-20210331224755-41bb18bfe9da\"},{\"bom-ref\":\"pkg:golang/github.com/exponent-io/jsonpath@0.0.0-20151013193312-d6023ce2651d\",\"type\":\"library\",\"name\":\"github.com/exponent-io/jsonpath\",\"version\":\"0.0.0-20151013193312-d6023ce2651d\",\"purl\":\"pkg:golang/github.com/exponent-io/jsonpath@0.0.0-20151013193312-d6023ce2651d\"},{\"bom-ref\":\"pkg:npm/%40datadog%2Fnative-appsec@8.0.1\",\"type\":\"library\",\"name\":\"@datadog/native-appsec\",\"version\":\"8.0.1\",\"purl\":\"pkg:npm/%40datadog%2Fnative-appsec@8.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/pjbgf/sha1cd@0.3.1\",\"type\":\"library\",\"name\":\"github.com/pjbgf/sha1cd\",\"version\":\"0.3.1\",\"purl\":\"pkg:golang/github.com/pjbgf/sha1cd@0.3.1\"},{\"bom-ref\":\"pkg:golang/honnef.co/go/tools@0.5.1\",\"type\":\"library\",\"name\":\"honnef.co/go/tools\",\"version\":\"0.5.1\",\"purl\":\"pkg:golang/honnef.co/go/tools@0.5.1\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2@1.18.0\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2\",\"version\":\"1.18.0\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2@1.18.0\"},{\"bom-ref\":\"pkg:golang/github.com/gorilla/websocket@1.5.1\",\"type\":\"library\",\"name\":\"github.com/gorilla/websocket\",\"version\":\"1.5.1\",\"purl\":\"pkg:golang/github.com/gorilla/websocket@1.5.1\"},{\"bom-ref\":\"pkg:golang/github.com/xi2/xz@0.0.0-20171230120015-48954b6210f8\",\"type\":\"library\",\"name\":\"github.com/xi2/xz\",\"version\":\"0.0.0-20171230120015-48954b6210f8\",\"purl\":\"pkg:golang/github.com/xi2/xz@0.0.0-20171230120015-48954b6210f8\"},{\"bom-ref\":\"pkg:golang/github.com/benbjohnson/clock@1.3.5\",\"type\":\"library\",\"name\":\"github.com/benbjohnson/clock\",\"version\":\"1.3.5\",\"purl\":\"pkg:golang/github.com/benbjohnson/clock@1.3.5\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-gcp/sdk/v7@7.38.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-gcp/sdk/v7\",\"version\":\"7.38.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-gcp/sdk/v7@7.38.0\"},{\"bom-ref\":\"pkg:golang/github.com/alecthomas/repr@0.4.0\",\"type\":\"library\",\"name\":\"github.com/alecthomas/repr\",\"version\":\"0.4.0\",\"purl\":\"pkg:golang/github.com/alecthomas/repr@0.4.0\"},{\"bom-ref\":\"pkg:npm/crypto-randomuuid@1.0.0\",\"type\":\"library\",\"name\":\"crypto-randomuuid\",\"version\":\"1.0.0\",\"purl\":\"pkg:npm/crypto-randomuuid@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/aquasecurity/table@1.8.0\",\"type\":\"library\",\"name\":\"github.com/aquasecurity/table\",\"version\":\"1.8.0\",\"purl\":\"pkg:golang/github.com/aquasecurity/table@1.8.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/go-runtime-metrics-internal@0.0.0-20241106155157-194426bbbd59\",\"type\":\"library\",\"name\":\"github.com/DataDog/go-runtime-metrics-internal\",\"version\":\"0.0.0-20241106155157-194426bbbd59\",\"purl\":\"pkg:golang/github.com/DataDog/go-runtime-metrics-internal@0.0.0-20241106155157-194426bbbd59\"},{\"bom-ref\":\"pkg:golang/github.com/ncruces/go-strftime@0.1.9\",\"type\":\"library\",\"name\":\"github.com/ncruces/go-strftime\",\"version\":\"0.1.9\",\"purl\":\"pkg:golang/github.com/ncruces/go-strftime@0.1.9\"},{\"bom-ref\":\"pkg:golang/github.com/in-toto/in-toto-golang@0.9.0\",\"type\":\"library\",\"name\":\"github.com/in-toto/in-toto-golang\",\"version\":\"0.9.0\",\"purl\":\"pkg:golang/github.com/in-toto/in-toto-golang@0.9.0\"},{\"bom-ref\":\"pkg:golang/github.com/masahiro331/go-xfs-filesystem@0.0.0-20231205045356-1b22259a6c44\",\"type\":\"library\",\"name\":\"github.com/masahiro331/go-xfs-filesystem\",\"version\":\"0.0.0-20231205045356-1b22259a6c44\",\"purl\":\"pkg:golang/github.com/masahiro331/go-xfs-filesystem@0.0.0-20231205045356-1b22259a6c44\"},{\"bom-ref\":\"pkg:golang/github.com/h2non/filetype@1.1.3\",\"type\":\"library\",\"name\":\"github.com/h2non/filetype\",\"version\":\"1.1.3\",\"purl\":\"pkg:golang/github.com/h2non/filetype@1.1.3\"},{\"bom-ref\":\"pkg:golang/golang.org/x/tools@0.27.0\",\"type\":\"library\",\"name\":\"golang.org/x/tools\",\"version\":\"0.27.0\",\"purl\":\"pkg:golang/golang.org/x/tools@0.27.0\"},{\"bom-ref\":\"pkg:golang/github.com/Microsoft/go-winio@0.5.2\",\"type\":\"library\",\"name\":\"github.com/Microsoft/go-winio\",\"version\":\"0.5.2\",\"purl\":\"pkg:golang/github.com/Microsoft/go-winio@0.5.2\"},{\"bom-ref\":\"pkg:golang/github.com/mmcloughlin/avo@0.6.0\",\"type\":\"library\",\"name\":\"github.com/mmcloughlin/avo\",\"version\":\"0.6.0\",\"purl\":\"pkg:golang/github.com/mmcloughlin/avo@0.6.0\"},{\"bom-ref\":\"pkg:npm/node-gyp-build@4.8.1\",\"type\":\"library\",\"name\":\"node-gyp-build\",\"version\":\"4.8.1\",\"purl\":\"pkg:npm/node-gyp-build@4.8.1\"},{\"bom-ref\":\"pkg:golang/github.com/cavaliergopher/grab/v3@3.0.1\",\"type\":\"library\",\"name\":\"github.com/cavaliergopher/grab/v3\",\"version\":\"3.0.1\",\"purl\":\"pkg:golang/github.com/cavaliergopher/grab/v3@3.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/google/uuid@1.3.0\",\"type\":\"library\",\"name\":\"github.com/google/uuid\",\"version\":\"1.3.0\",\"purl\":\"pkg:golang/github.com/google/uuid@1.3.0\"},{\"bom-ref\":\"pkg:golang/go.etcd.io/etcd/client/pkg/v3@3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1\",\"type\":\"library\",\"name\":\"go.etcd.io/etcd/client/pkg/v3\",\"version\":\"3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1\",\"purl\":\"pkg:golang/go.etcd.io/etcd/client/pkg/v3@3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1\"},{\"bom-ref\":\"pkg:golang/github.com/tklauser/numcpus@0.6.1\",\"type\":\"library\",\"name\":\"github.com/tklauser/numcpus\",\"version\":\"0.6.1\",\"purl\":\"pkg:golang/github.com/tklauser/numcpus@0.6.1\"},{\"bom-ref\":\"pkg:golang/github.com/google/licensecheck@0.3.1\",\"type\":\"library\",\"name\":\"github.com/google/licensecheck\",\"version\":\"0.3.1\",\"purl\":\"pkg:golang/github.com/google/licensecheck@0.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/cheggaaa/pb@1.0.29\",\"type\":\"library\",\"name\":\"github.com/cheggaaa/pb\",\"version\":\"1.0.29\",\"purl\":\"pkg:golang/github.com/cheggaaa/pb@1.0.29\"},{\"bom-ref\":\"pkg:golang/github.com/tidwall/gjson@1.18.0\",\"type\":\"library\",\"name\":\"github.com/tidwall/gjson\",\"version\":\"1.18.0\",\"purl\":\"pkg:golang/github.com/tidwall/gjson@1.18.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/gopsutil@1.2.2\",\"type\":\"library\",\"name\":\"github.com/DataDog/gopsutil\",\"version\":\"1.2.2\",\"purl\":\"pkg:golang/github.com/DataDog/gopsutil@1.2.2\"},{\"bom-ref\":\"pkg:pypi/codeowners@0.6.0\",\"type\":\"library\",\"name\":\"codeowners\",\"version\":\"0.6.0\",\"purl\":\"pkg:pypi/codeowners@0.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/mmh3@0.0.0-20210722141835-012dc69a9e49\",\"type\":\"library\",\"name\":\"github.com/DataDog/mmh3\",\"version\":\"0.0.0-20210722141835-012dc69a9e49\",\"purl\":\"pkg:golang/github.com/DataDog/mmh3@0.0.0-20210722141835-012dc69a9e49\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-lambda-go@1.37.0\",\"type\":\"library\",\"name\":\"github.com/aws/aws-lambda-go\",\"version\":\"1.37.0\",\"purl\":\"pkg:golang/github.com/aws/aws-lambda-go@1.37.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-toolsmith/astp@1.1.0\",\"type\":\"library\",\"name\":\"github.com/go-toolsmith/astp\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/go-toolsmith/astp@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics@0.25.0\",\"type\":\"library\",\"name\":\"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics\",\"version\":\"0.25.0\",\"purl\":\"pkg:golang/github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics@0.25.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/apimachinery@0.31.4\",\"type\":\"library\",\"name\":\"k8s.io/apimachinery\",\"version\":\"0.31.4\",\"purl\":\"pkg:golang/k8s.io/apimachinery@0.31.4\"},{\"bom-ref\":\"pkg:golang/github.com/fatih/structtag@1.2.0\",\"type\":\"library\",\"name\":\"github.com/fatih/structtag\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/fatih/structtag@1.2.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/service@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/service\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/service@0.119.0\"},{\"bom-ref\":\"pkg:golang/golang.org/x/mobile@0.0.0-20201217150744-e6ae53a27f4f\",\"type\":\"library\",\"name\":\"golang.org/x/mobile\",\"version\":\"0.0.0-20201217150744-e6ae53a27f4f\",\"purl\":\"pkg:golang/golang.org/x/mobile@0.0.0-20201217150744-e6ae53a27f4f\"},{\"bom-ref\":\"pkg:golang/github.com/knadh/koanf/providers/confmap@0.1.0\",\"type\":\"library\",\"name\":\"github.com/knadh/koanf/providers/confmap\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/knadh/koanf/providers/confmap@0.1.0\"},{\"bom-ref\":\"pkg:npm/lodash.sortby@4.7.0\",\"type\":\"library\",\"name\":\"lodash.sortby\",\"version\":\"4.7.0\",\"purl\":\"pkg:npm/lodash.sortby@4.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/mattn/go-runewidth@0.0.15\",\"type\":\"library\",\"name\":\"github.com/mattn/go-runewidth\",\"version\":\"0.0.15\",\"purl\":\"pkg:golang/github.com/mattn/go-runewidth@0.0.15\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp@1.34.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/smithy-go@1.13.5\",\"type\":\"library\",\"name\":\"github.com/aws/smithy-go\",\"version\":\"1.13.5\",\"purl\":\"pkg:golang/github.com/aws/smithy-go@1.13.5\"},{\"bom-ref\":\"pkg:golang/github.com/NVIDIA/go-nvml@0.12.4-0\",\"type\":\"library\",\"name\":\"github.com/NVIDIA/go-nvml\",\"version\":\"0.12.4-0\",\"purl\":\"pkg:golang/github.com/NVIDIA/go-nvml@0.12.4-0\"},{\"bom-ref\":\"pkg:golang/github.com/docker/docker-credential-helpers@0.8.2\",\"type\":\"library\",\"name\":\"github.com/docker/docker-credential-helpers\",\"version\":\"0.8.2\",\"purl\":\"pkg:golang/github.com/docker/docker-credential-helpers@0.8.2\"},{\"bom-ref\":\"pkg:golang/github.com/aquasecurity/go-npm-version@0.0.0-20201110091526-0b796d180798\",\"type\":\"library\",\"name\":\"github.com/aquasecurity/go-npm-version\",\"version\":\"0.0.0-20201110091526-0b796d180798\",\"purl\":\"pkg:golang/github.com/aquasecurity/go-npm-version@0.0.0-20201110091526-0b796d180798\"},{\"bom-ref\":\"pkg:golang/github.com/alexkohler/nakedret/v2@2.0.4\",\"type\":\"library\",\"name\":\"github.com/alexkohler/nakedret/v2\",\"version\":\"2.0.4\",\"purl\":\"pkg:golang/github.com/alexkohler/nakedret/v2@2.0.4\"},{\"bom-ref\":\"pkg:golang/github.com/kkHAIKE/contextcheck@1.1.5\",\"type\":\"library\",\"name\":\"github.com/kkHAIKE/contextcheck\",\"version\":\"1.1.5\",\"purl\":\"pkg:golang/github.com/kkHAIKE/contextcheck@1.1.5\"},{\"bom-ref\":\"pkg:golang/github.com/spdx/tools-golang@0.5.5\",\"type\":\"library\",\"name\":\"github.com/spdx/tools-golang\",\"version\":\"0.5.5\",\"purl\":\"pkg:golang/github.com/spdx/tools-golang@0.5.5\"},{\"bom-ref\":\"pkg:golang/github.com/awalterschulze/gographviz@2.0.3+incompatible\",\"type\":\"library\",\"name\":\"github.com/awalterschulze/gographviz\",\"version\":\"2.0.3+incompatible\",\"purl\":\"pkg:golang/github.com/awalterschulze/gographviz@2.0.3+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/opencontainers/selinux@1.11.0\",\"type\":\"library\",\"name\":\"github.com/opencontainers/selinux\",\"version\":\"1.11.0\",\"purl\":\"pkg:golang/github.com/opencontainers/selinux@1.11.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/pdata/testdata@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/pdata/testdata\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/pdata/testdata@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/sdk@1.34.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/sdk\",\"version\":\"1.34.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/sdk@1.34.0\"},{\"bom-ref\":\"pkg:pypi/pygments@2.17.2\",\"type\":\"library\",\"name\":\"pygments\",\"version\":\"2.17.2\",\"purl\":\"pkg:pypi/pygments@2.17.2\"},{\"bom-ref\":\"pkg:golang/github.com/go-delve/delve@1.23.1\",\"type\":\"library\",\"name\":\"github.com/go-delve/delve\",\"version\":\"1.23.1\",\"purl\":\"pkg:golang/github.com/go-delve/delve@1.23.1\"},{\"bom-ref\":\"pkg:golang/github.com/shazow/go-diff@0.0.0-20160112020656-b6b7b6733b8c\",\"type\":\"library\",\"name\":\"github.com/shazow/go-diff\",\"version\":\"0.0.0-20160112020656-b6b7b6733b8c\",\"purl\":\"pkg:golang/github.com/shazow/go-diff@0.0.0-20160112020656-b6b7b6733b8c\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2@2.6.29\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/internal/endpoints/v2\",\"version\":\"2.6.29\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2@2.6.29\"},{\"bom-ref\":\"pkg:golang/github.com/ulikunitz/xz@0.5.12\",\"type\":\"library\",\"name\":\"github.com/ulikunitz/xz\",\"version\":\"0.5.12\",\"purl\":\"pkg:golang/github.com/ulikunitz/xz@0.5.12\"},{\"bom-ref\":\"pkg:golang/stdlib@1.23.3\",\"type\":\"library\",\"name\":\"stdlib\",\"version\":\"1.23.3\",\"purl\":\"pkg:golang/stdlib@1.23.3\"},{\"bom-ref\":\"pkg:golang/github.com/go-toolsmith/astcast@1.1.0\",\"type\":\"library\",\"name\":\"github.com/go-toolsmith/astcast\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/go-toolsmith/astcast@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/gocomply/scap@0.1.2-0.20230531064509-55a00f73e8d6\",\"type\":\"library\",\"name\":\"github.com/gocomply/scap\",\"version\":\"0.1.2-0.20230531064509-55a00f73e8d6\",\"purl\":\"pkg:golang/github.com/gocomply/scap@0.1.2-0.20230531064509-55a00f73e8d6\"},{\"bom-ref\":\"pkg:golang/github.com/josharian/intern@1.0.0\",\"type\":\"library\",\"name\":\"github.com/josharian/intern\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/josharian/intern@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/apparentlymart/go-textseg/v15@15.0.0\",\"type\":\"library\",\"name\":\"github.com/apparentlymart/go-textseg/v15\",\"version\":\"15.0.0\",\"purl\":\"pkg:golang/github.com/apparentlymart/go-textseg/v15@15.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/zstd@1.5.5\",\"type\":\"library\",\"name\":\"github.com/DataDog/zstd\",\"version\":\"1.5.5\",\"purl\":\"pkg:golang/github.com/DataDog/zstd@1.5.5\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver@0.119.0\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Faspromise@1.1.2\",\"type\":\"library\",\"name\":\"@protobufjs/aspromise\",\"version\":\"1.1.2\",\"purl\":\"pkg:npm/%40protobufjs%2Faspromise@1.1.2\"},{\"bom-ref\":\"pkg:golang/google.golang.org/genproto@0.0.0-20230410155749-daa745c078e1\",\"type\":\"library\",\"name\":\"google.golang.org/genproto\",\"version\":\"0.0.0-20230410155749-daa745c078e1\",\"purl\":\"pkg:golang/google.golang.org/genproto@0.0.0-20230410155749-daa745c078e1\"},{\"bom-ref\":\"pkg:golang/github.com/google/btree@1.1.3\",\"type\":\"library\",\"name\":\"github.com/google/btree\",\"version\":\"1.1.3\",\"purl\":\"pkg:golang/github.com/google/btree@1.1.3\"},{\"bom-ref\":\"pkg:npm/limiter@1.1.5\",\"type\":\"library\",\"name\":\"limiter\",\"version\":\"1.1.5\",\"purl\":\"pkg:npm/limiter@1.1.5\"},{\"bom-ref\":\"pkg:golang/github.com/Microsoft/go-winio@0.6.2\",\"type\":\"library\",\"name\":\"github.com/Microsoft/go-winio\",\"version\":\"0.6.2\",\"purl\":\"pkg:golang/github.com/Microsoft/go-winio@0.6.2\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-multierror@1.1.1\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-multierror\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/hashicorp/go-multierror@1.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/gostaticanalysis/comment@1.4.2\",\"type\":\"library\",\"name\":\"github.com/gostaticanalysis/comment\",\"version\":\"1.4.2\",\"purl\":\"pkg:golang/github.com/gostaticanalysis/comment@1.4.2\"},{\"bom-ref\":\"pkg:golang/github.com/kylelemons/godebug@1.1.0\",\"type\":\"library\",\"name\":\"github.com/kylelemons/godebug\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/kylelemons/godebug@1.1.0\"},{\"bom-ref\":\"pkg:maven/org.bouncycastle/bctls-fips@2.0.19\",\"type\":\"library\",\"name\":\"org.bouncycastle:bctls-fips\",\"version\":\"2.0.19\",\"purl\":\"pkg:maven/org.bouncycastle/bctls-fips@2.0.19\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/consumer@1.25.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/consumer\",\"version\":\"1.25.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/consumer@1.25.0\"},{\"bom-ref\":\"pkg:golang/github.com/dgryski/go-jump@0.0.0-20211018200510-ba001c3ffce0\",\"type\":\"library\",\"name\":\"github.com/dgryski/go-jump\",\"version\":\"0.0.0-20211018200510-ba001c3ffce0\",\"purl\":\"pkg:golang/github.com/dgryski/go-jump@0.0.0-20211018200510-ba001c3ffce0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/datadog-operator/api@0.0.0-20250114151552-463ab54482b4\",\"type\":\"library\",\"name\":\"github.com/DataDog/datadog-operator/api\",\"version\":\"0.0.0-20250114151552-463ab54482b4\",\"purl\":\"pkg:golang/github.com/DataDog/datadog-operator/api@0.0.0-20250114151552-463ab54482b4\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/typeurl/v2@2.2.3\",\"type\":\"library\",\"name\":\"github.com/containerd/typeurl/v2\",\"version\":\"2.2.3\",\"purl\":\"pkg:golang/github.com/containerd/typeurl/v2@2.2.3\"},{\"bom-ref\":\"pkg:golang/github.com/mdlayher/socket@0.5.0\",\"type\":\"library\",\"name\":\"github.com/mdlayher/socket\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/mdlayher/socket@0.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-sql-driver/mysql@1.8.1\",\"type\":\"library\",\"name\":\"github.com/go-sql-driver/mysql\",\"version\":\"1.8.1\",\"purl\":\"pkg:golang/github.com/go-sql-driver/mysql@1.8.1\"},{\"bom-ref\":\"pkg:golang/github.com/leodido/ragel-machinery@0.0.0-20190525184631-5f46317e436b\",\"type\":\"library\",\"name\":\"github.com/leodido/ragel-machinery\",\"version\":\"0.0.0-20190525184631-5f46317e436b\",\"purl\":\"pkg:golang/github.com/leodido/ragel-machinery@0.0.0-20190525184631-5f46317e436b\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/go-secure-stdlib/strutil@0.1.2\",\"type\":\"library\",\"name\":\"github.com/hashicorp/go-secure-stdlib/strutil\",\"version\":\"0.1.2\",\"purl\":\"pkg:golang/github.com/hashicorp/go-secure-stdlib/strutil@0.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/acobaugh/osrelease@0.1.0\",\"type\":\"library\",\"name\":\"github.com/acobaugh/osrelease\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/acobaugh/osrelease@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/stoewer/go-strcase@1.3.0\",\"type\":\"library\",\"name\":\"github.com/stoewer/go-strcase\",\"version\":\"1.3.0\",\"purl\":\"pkg:golang/github.com/stoewer/go-strcase@1.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/emicklei/go-restful/v3@3.11.0\",\"type\":\"library\",\"name\":\"github.com/emicklei/go-restful/v3\",\"version\":\"3.11.0\",\"purl\":\"pkg:golang/github.com/emicklei/go-restful/v3@3.11.0\"},{\"bom-ref\":\"pkg:golang/github.com/syndtr/gocapability@0.0.0-20200815063812-42c35b437635\",\"type\":\"library\",\"name\":\"github.com/syndtr/gocapability\",\"version\":\"0.0.0-20200815063812-42c35b437635\",\"purl\":\"pkg:golang/github.com/syndtr/gocapability@0.0.0-20200815063812-42c35b437635\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/v4a@1.3.29\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/internal/v4a\",\"version\":\"1.3.29\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/v4a@1.3.29\"},{\"bom-ref\":\"pkg:golang/github.com/daixiang0/gci@0.13.4\",\"type\":\"library\",\"name\":\"github.com/daixiang0/gci\",\"version\":\"0.13.4\",\"purl\":\"pkg:golang/github.com/daixiang0/gci@0.13.4\"},{\"bom-ref\":\"pkg:golang/github.com/nishanths/predeclared@0.2.2\",\"type\":\"library\",\"name\":\"github.com/nishanths/predeclared\",\"version\":\"0.2.2\",\"purl\":\"pkg:golang/github.com/nishanths/predeclared@0.2.2\"},{\"bom-ref\":\"pkg:golang/github.com/catenacyber/perfsprint@0.7.1\",\"type\":\"library\",\"name\":\"github.com/catenacyber/perfsprint\",\"version\":\"0.7.1\",\"purl\":\"pkg:golang/github.com/catenacyber/perfsprint@0.7.1\"},{\"bom-ref\":\"pkg:golang/gotest.tools/gotestsum@1.11.0\",\"type\":\"library\",\"name\":\"gotest.tools/gotestsum\",\"version\":\"1.11.0\",\"purl\":\"pkg:golang/gotest.tools/gotestsum@1.11.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-viper/mapstructure/v2@2.2.1\",\"type\":\"library\",\"name\":\"github.com/go-viper/mapstructure/v2\",\"version\":\"2.2.1\",\"purl\":\"pkg:golang/github.com/go-viper/mapstructure/v2@2.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/aquasecurity/go-gem-version@0.0.0-20201115065557-8eed6fe000ce\",\"type\":\"library\",\"name\":\"github.com/aquasecurity/go-gem-version\",\"version\":\"0.0.0-20201115065557-8eed6fe000ce\",\"purl\":\"pkg:golang/github.com/aquasecurity/go-gem-version@0.0.0-20201115065557-8eed6fe000ce\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor@0.119.0\"},{\"bom-ref\":\"pkg:golang/google.golang.org/genproto/googleapis/rpc@0.0.0-20250115164207-1a7da9e5054f\",\"type\":\"library\",\"name\":\"google.golang.org/genproto/googleapis/rpc\",\"version\":\"0.0.0-20250115164207-1a7da9e5054f\",\"purl\":\"pkg:golang/google.golang.org/genproto/googleapis/rpc@0.0.0-20250115164207-1a7da9e5054f\"},{\"bom-ref\":\"pkg:golang/github.com/sourcegraph/go-diff@0.7.0\",\"type\":\"library\",\"name\":\"github.com/sourcegraph/go-diff\",\"version\":\"0.7.0\",\"purl\":\"pkg:golang/github.com/sourcegraph/go-diff@0.7.0\"},{\"bom-ref\":\"pkg:golang/gonum.org/v1/gonum@0.15.1\",\"type\":\"library\",\"name\":\"gonum.org/v1/gonum\",\"version\":\"0.15.1\",\"purl\":\"pkg:golang/gonum.org/v1/gonum@0.15.1\"},{\"bom-ref\":\"pkg:golang/github.com/go-toolsmith/strparse@1.1.0\",\"type\":\"library\",\"name\":\"github.com/go-toolsmith/strparse\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/go-toolsmith/strparse@1.1.0\"},{\"bom-ref\":\"pkg:golang/gopkg.in/tomb.v1@1.0.0-20141024135613-dd632973f1e7\",\"type\":\"library\",\"name\":\"gopkg.in/tomb.v1\",\"version\":\"1.0.0-20141024135613-dd632973f1e7\",\"purl\":\"pkg:golang/gopkg.in/tomb.v1@1.0.0-20141024135613-dd632973f1e7\"},{\"bom-ref\":\"pkg:golang/github.com/golangci/golangci-lint@1.60.3\",\"type\":\"library\",\"name\":\"github.com/golangci/golangci-lint\",\"version\":\"1.60.3\",\"purl\":\"pkg:golang/github.com/golangci/golangci-lint@1.60.3\"},{\"bom-ref\":\"pkg:golang/github.com/emirpasic/gods@1.18.1\",\"type\":\"library\",\"name\":\"github.com/emirpasic/gods\",\"version\":\"1.18.1\",\"purl\":\"pkg:golang/github.com/emirpasic/gods@1.18.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/internal/sharedcomponent@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/internal/sharedcomponent\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/internal/sharedcomponent@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/aws/session-manager-plugin@0.0.0-20241119210807-82dc72922492\",\"type\":\"library\",\"name\":\"github.com/aws/session-manager-plugin\",\"version\":\"0.0.0-20241119210807-82dc72922492\",\"purl\":\"pkg:golang/github.com/aws/session-manager-plugin@0.0.0-20241119210807-82dc72922492\"},{\"bom-ref\":\"pkg:golang/go.mongodb.org/mongo-driver@1.15.1\",\"type\":\"library\",\"name\":\"go.mongodb.org/mongo-driver\",\"version\":\"1.15.1\",\"purl\":\"pkg:golang/go.mongodb.org/mongo-driver@1.15.1\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/otel/log@0.10.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/otel/log\",\"version\":\"0.10.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/otel/log@0.10.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/internal/memorylimiter@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/internal/memorylimiter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/internal/memorylimiter@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp@1.26.0\",\"type\":\"library\",\"name\":\"github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp\",\"version\":\"1.26.0\",\"purl\":\"pkg:golang/github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp@1.26.0\"},{\"bom-ref\":\"pkg:golang/k8s.io/client-go@0.31.3\",\"type\":\"library\",\"name\":\"k8s.io/client-go\",\"version\":\"0.31.3\",\"purl\":\"pkg:golang/k8s.io/client-go@0.31.3\"},{\"bom-ref\":\"pkg:golang/modernc.org/strutil@1.2.0\",\"type\":\"library\",\"name\":\"modernc.org/strutil\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/modernc.org/strutil@1.2.0\"},{\"bom-ref\":\"pkg:golang/github.com/Intevation/gval@1.3.0\",\"type\":\"library\",\"name\":\"github.com/Intevation/gval\",\"version\":\"1.3.0\",\"purl\":\"pkg:golang/github.com/Intevation/gval@1.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/golang/mock@1.6.0\",\"type\":\"library\",\"name\":\"github.com/golang/mock\",\"version\":\"1.6.0\",\"purl\":\"pkg:golang/github.com/golang/mock@1.6.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/exporter/otlpexporter@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/exporter/otlpexporter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/exporter/otlpexporter@0.119.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/extension/auth@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/extension/auth\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/extension/auth@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/hcl@1.0.1-vault-5\",\"type\":\"library\",\"name\":\"github.com/hashicorp/hcl\",\"version\":\"1.0.1-vault-5\",\"purl\":\"pkg:golang/github.com/hashicorp/hcl@1.0.1-vault-5\"},{\"bom-ref\":\"pkg:golang/github.com/jinzhu/inflection@1.0.0\",\"type\":\"library\",\"name\":\"github.com/jinzhu/inflection\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/jinzhu/inflection@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/hairyhenderson/go-codeowners@0.7.0\",\"type\":\"library\",\"name\":\"github.com/hairyhenderson/go-codeowners\",\"version\":\"0.7.0\",\"purl\":\"pkg:golang/github.com/hairyhenderson/go-codeowners@0.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension@0.119.0\",\"type\":\"library\",\"name\":\"github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/dennwc/varint@1.0.0\",\"type\":\"library\",\"name\":\"github.com/dennwc/varint\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/dennwc/varint@1.0.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/exporter@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/exporter\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/exporter@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/sergi/go-diff@1.3.2-0.20230802210424-5b0b94c5c0d3\",\"type\":\"library\",\"name\":\"github.com/sergi/go-diff\",\"version\":\"1.3.2-0.20230802210424-5b0b94c5c0d3\",\"purl\":\"pkg:golang/github.com/sergi/go-diff@1.3.2-0.20230802210424-5b0b94c5c0d3\"},{\"bom-ref\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4@4.3.0\",\"type\":\"library\",\"name\":\"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4\",\"version\":\"4.3.0\",\"purl\":\"pkg:golang/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4@4.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/tklauser/go-sysconf@0.3.14\",\"type\":\"library\",\"name\":\"github.com/tklauser/go-sysconf\",\"version\":\"0.3.14\",\"purl\":\"pkg:golang/github.com/tklauser/go-sysconf@0.3.14\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ssm@1.56.8\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/service/ssm\",\"version\":\"1.56.8\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/service/ssm@1.56.8\"},{\"bom-ref\":\"pkg:golang/github.com/pmezard/go-difflib@1.0.0\",\"type\":\"library\",\"name\":\"github.com/pmezard/go-difflib\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/pmezard/go-difflib@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/jackc/pgx/v5@5.6.0\",\"type\":\"library\",\"name\":\"github.com/jackc/pgx/v5\",\"version\":\"5.6.0\",\"purl\":\"pkg:golang/github.com/jackc/pgx/v5@5.6.0\"},{\"bom-ref\":\"pkg:golang/github.com/gobwas/glob@0.2.3\",\"type\":\"library\",\"name\":\"github.com/gobwas/glob\",\"version\":\"0.2.3\",\"purl\":\"pkg:golang/github.com/gobwas/glob@0.2.3\"},{\"bom-ref\":\"pkg:golang/github.com/gorilla/mux@1.8.1\",\"type\":\"library\",\"name\":\"github.com/gorilla/mux\",\"version\":\"1.8.1\",\"purl\":\"pkg:golang/github.com/gorilla/mux@1.8.1\"},{\"bom-ref\":\"pkg:golang/go.etcd.io/etcd/server/v3@3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1\",\"type\":\"library\",\"name\":\"go.etcd.io/etcd/server/v3\",\"version\":\"3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1\",\"purl\":\"pkg:golang/go.etcd.io/etcd/server/v3@3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1\"},{\"bom-ref\":\"pkg:golang/github.com/freddierice/go-losetup@0.0.0-20220711213114-2a14873012db\",\"type\":\"library\",\"name\":\"github.com/freddierice/go-losetup\",\"version\":\"0.0.0-20220711213114-2a14873012db\",\"purl\":\"pkg:golang/github.com/freddierice/go-losetup@0.0.0-20220711213114-2a14873012db\"},{\"bom-ref\":\"pkg:golang/google.golang.org/protobuf@1.36.4\",\"type\":\"library\",\"name\":\"google.golang.org/protobuf\",\"version\":\"1.36.4\",\"purl\":\"pkg:golang/google.golang.org/protobuf@1.36.4\"},{\"bom-ref\":\"pkg:npm/%40protobufjs%2Fcodegen@2.0.4\",\"type\":\"library\",\"name\":\"@protobufjs/codegen\",\"version\":\"2.0.4\",\"purl\":\"pkg:npm/%40protobufjs%2Fcodegen@2.0.4\"},{\"bom-ref\":\"pkg:golang/lukechampine.com/frand@1.5.1\",\"type\":\"library\",\"name\":\"lukechampine.com/frand\",\"version\":\"1.5.1\",\"purl\":\"pkg:golang/lukechampine.com/frand@1.5.1\"},{\"bom-ref\":\"pkg:golang/github.com/power-devops/perfstat@0.0.0-20240221224432-82ca36839d55\",\"type\":\"library\",\"name\":\"github.com/power-devops/perfstat\",\"version\":\"0.0.0-20240221224432-82ca36839d55\",\"purl\":\"pkg:golang/github.com/power-devops/perfstat@0.0.0-20240221224432-82ca36839d55\"},{\"bom-ref\":\"pkg:golang/github.com/santhosh-tekuri/jsonschema/v5@5.3.1\",\"type\":\"library\",\"name\":\"github.com/santhosh-tekuri/jsonschema/v5\",\"version\":\"5.3.1\",\"purl\":\"pkg:golang/github.com/santhosh-tekuri/jsonschema/v5@5.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/ashanbrown/makezero@1.1.1\",\"type\":\"library\",\"name\":\"github.com/ashanbrown/makezero\",\"version\":\"1.1.1\",\"purl\":\"pkg:golang/github.com/ashanbrown/makezero@1.1.1\"},{\"bom-ref\":\"pkg:golang/github.com/go-toolsmith/astfmt@1.1.0\",\"type\":\"library\",\"name\":\"github.com/go-toolsmith/astfmt\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/go-toolsmith/astfmt@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/cloudfoundry-community/go-cfclient/v2@2.0.1-0.20230503155151-3d15366c5820\",\"type\":\"library\",\"name\":\"github.com/cloudfoundry-community/go-cfclient/v2\",\"version\":\"2.0.1-0.20230503155151-3d15366c5820\",\"purl\":\"pkg:golang/github.com/cloudfoundry-community/go-cfclient/v2@2.0.1-0.20230503155151-3d15366c5820\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/analysis@0.23.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/analysis\",\"version\":\"0.23.0\",\"purl\":\"pkg:golang/github.com/go-openapi/analysis@0.23.0\"},{\"bom-ref\":\"pkg:golang/modernc.org/gc/v3@3.0.0-20240107210532-573471604cb6\",\"type\":\"library\",\"name\":\"modernc.org/gc/v3\",\"version\":\"3.0.0-20240107210532-573471604cb6\",\"purl\":\"pkg:golang/modernc.org/gc/v3@3.0.0-20240107210532-573471604cb6\"},{\"bom-ref\":\"pkg:golang/github.com/elastic/lunes@0.1.0\",\"type\":\"library\",\"name\":\"github.com/elastic/lunes\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/elastic/lunes@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/onsi/gomega@1.34.1\",\"type\":\"library\",\"name\":\"github.com/onsi/gomega\",\"version\":\"1.34.1\",\"purl\":\"pkg:golang/github.com/onsi/gomega@1.34.1\"},{\"bom-ref\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/configsources@1.3.29\",\"type\":\"library\",\"name\":\"github.com/aws/aws-sdk-go-v2/internal/configsources\",\"version\":\"1.3.29\",\"purl\":\"pkg:golang/github.com/aws/aws-sdk-go-v2/internal/configsources@1.3.29\"},{\"bom-ref\":\"pkg:golang/k8s.io/klog/v2@2.130.1\",\"type\":\"library\",\"name\":\"k8s.io/klog/v2\",\"version\":\"2.130.1\",\"purl\":\"pkg:golang/k8s.io/klog/v2@2.130.1\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-kubernetes/sdk/v4@4.19.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-kubernetes/sdk/v4\",\"version\":\"4.19.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-kubernetes/sdk/v4@4.19.0\"},{\"bom-ref\":\"pkg:golang/github.com/securego/gosec/v2@2.20.1-0.20240822074752-ab3f6c1c83a0\",\"type\":\"library\",\"name\":\"github.com/securego/gosec/v2\",\"version\":\"2.20.1-0.20240822074752-ab3f6c1c83a0\",\"purl\":\"pkg:golang/github.com/securego/gosec/v2@2.20.1-0.20240822074752-ab3f6c1c83a0\"},{\"bom-ref\":\"pkg:golang/dario.cat/mergo@1.0.1\",\"type\":\"library\",\"name\":\"dario.cat/mergo\",\"version\":\"1.0.1\",\"purl\":\"pkg:golang/dario.cat/mergo@1.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/paulcacheux/iouring-go@0.0.0-20241115154236-2c7785c40a0f\",\"type\":\"library\",\"name\":\"github.com/paulcacheux/iouring-go\",\"version\":\"0.0.0-20241115154236-2c7785c40a0f\",\"purl\":\"pkg:golang/github.com/paulcacheux/iouring-go@0.0.0-20241115154236-2c7785c40a0f\"},{\"bom-ref\":\"pkg:golang/github.com/uber/jaeger-client-go@2.30.0+incompatible\",\"type\":\"library\",\"name\":\"github.com/uber/jaeger-client-go\",\"version\":\"2.30.0+incompatible\",\"purl\":\"pkg:golang/github.com/uber/jaeger-client-go@2.30.0+incompatible\"},{\"bom-ref\":\"pkg:golang/github.com/masahiro331/go-disk@0.0.0-20240625071113-56c933208fee\",\"type\":\"library\",\"name\":\"github.com/masahiro331/go-disk\",\"version\":\"0.0.0-20240625071113-56c933208fee\",\"purl\":\"pkg:golang/github.com/masahiro331/go-disk@0.0.0-20240625071113-56c933208fee\"},{\"bom-ref\":\"pkg:golang/github.com/chigopher/pathlib@0.19.1\",\"type\":\"library\",\"name\":\"github.com/chigopher/pathlib\",\"version\":\"0.19.1\",\"purl\":\"pkg:golang/github.com/chigopher/pathlib@0.19.1\"},{\"bom-ref\":\"pkg:golang/github.com/lufeee/execinquery@1.2.1\",\"type\":\"library\",\"name\":\"github.com/lufeee/execinquery\",\"version\":\"1.2.1\",\"purl\":\"pkg:golang/github.com/lufeee/execinquery@1.2.1\"},{\"bom-ref\":\"pkg:golang/cloud.google.com/go/auth/oauth2adapt@0.2.2\",\"type\":\"library\",\"name\":\"cloud.google.com/go/auth/oauth2adapt\",\"version\":\"0.2.2\",\"purl\":\"pkg:golang/cloud.google.com/go/auth/oauth2adapt@0.2.2\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/continuity@0.4.4\",\"type\":\"library\",\"name\":\"github.com/containerd/continuity\",\"version\":\"0.4.4\",\"purl\":\"pkg:golang/github.com/containerd/continuity@0.4.4\"},{\"bom-ref\":\"pkg:golang/github.com/Crocmagnon/fatcontext@0.4.0\",\"type\":\"library\",\"name\":\"github.com/Crocmagnon/fatcontext\",\"version\":\"0.4.0\",\"purl\":\"pkg:golang/github.com/Crocmagnon/fatcontext@0.4.0\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi/sdk/v3@3.145.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi/sdk/v3\",\"version\":\"3.145.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi/sdk/v3@3.145.0\"},{\"bom-ref\":\"pkg:golang/github.com/golang-jwt/jwt/v5@5.2.1\",\"type\":\"library\",\"name\":\"github.com/golang-jwt/jwt/v5\",\"version\":\"5.2.1\",\"purl\":\"pkg:golang/github.com/golang-jwt/jwt/v5@5.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/go-xmlfmt/xmlfmt@1.1.2\",\"type\":\"library\",\"name\":\"github.com/go-xmlfmt/xmlfmt\",\"version\":\"1.1.2\",\"purl\":\"pkg:golang/github.com/go-xmlfmt/xmlfmt@1.1.2\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/jsonpointer@0.20.2\",\"type\":\"library\",\"name\":\"github.com/go-openapi/jsonpointer\",\"version\":\"0.20.2\",\"purl\":\"pkg:golang/github.com/go-openapi/jsonpointer@0.20.2\"},{\"bom-ref\":\"pkg:golang/github.com/go-toolsmith/typep@1.1.0\",\"type\":\"library\",\"name\":\"github.com/go-toolsmith/typep\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/go-toolsmith/typep@1.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/xor-gate/ar@0.0.0-20170530204233-5c72ae81e2b7\",\"type\":\"library\",\"name\":\"github.com/xor-gate/ar\",\"version\":\"0.0.0-20170530204233-5c72ae81e2b7\",\"purl\":\"pkg:golang/github.com/xor-gate/ar@0.0.0-20170530204233-5c72ae81e2b7\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/rep@0.0.0-20200325195957-1404b978e31e\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/rep\",\"version\":\"0.0.0-20200325195957-1404b978e31e\",\"purl\":\"pkg:golang/code.cloudfoundry.org/rep@0.0.0-20200325195957-1404b978e31e\"},{\"bom-ref\":\"pkg:golang/github.com/jaegertracing/jaeger@1.65.0\",\"type\":\"library\",\"name\":\"github.com/jaegertracing/jaeger\",\"version\":\"1.65.0\",\"purl\":\"pkg:golang/github.com/jaegertracing/jaeger@1.65.0\"},{\"bom-ref\":\"pkg:golang/github.com/grpc-ecosystem/grpc-opentracing@0.0.0-20180507213350-8e809c8a8645\",\"type\":\"library\",\"name\":\"github.com/grpc-ecosystem/grpc-opentracing\",\"version\":\"0.0.0-20180507213350-8e809c8a8645\",\"purl\":\"pkg:golang/github.com/grpc-ecosystem/grpc-opentracing@0.0.0-20180507213350-8e809c8a8645\"},{\"bom-ref\":\"pkg:pypi/cryptography@39.0.1\",\"type\":\"library\",\"name\":\"cryptography\",\"version\":\"39.0.1\",\"purl\":\"pkg:pypi/cryptography@39.0.1\"},{\"bom-ref\":\"pkg:golang/github.com/containernetworking/cni@1.2.3\",\"type\":\"library\",\"name\":\"github.com/containernetworking/cni\",\"version\":\"1.2.3\",\"purl\":\"pkg:golang/github.com/containernetworking/cni@1.2.3\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/appdash@0.0.0-20231130102222-75f619a67231\",\"type\":\"library\",\"name\":\"github.com/pulumi/appdash\",\"version\":\"0.0.0-20231130102222-75f619a67231\",\"purl\":\"pkg:golang/github.com/pulumi/appdash@0.0.0-20231130102222-75f619a67231\"},{\"bom-ref\":\"pkg:golang/github.com/go-logr/logr@1.3.0\",\"type\":\"library\",\"name\":\"github.com/go-logr/logr\",\"version\":\"1.3.0\",\"purl\":\"pkg:golang/github.com/go-logr/logr@1.3.0\"},{\"bom-ref\":\"pkg:golang/github.com/sashamelentyev/interfacebloat@1.1.0\",\"type\":\"library\",\"name\":\"github.com/sashamelentyev/interfacebloat\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/sashamelentyev/interfacebloat@1.1.0\"},{\"bom-ref\":\"pkg:golang/mvdan.cc/gofumpt@0.7.0\",\"type\":\"library\",\"name\":\"mvdan.cc/gofumpt\",\"version\":\"0.7.0\",\"purl\":\"pkg:golang/mvdan.cc/gofumpt@0.7.0\"},{\"bom-ref\":\"pkg:golang/github.com/go-openapi/jsonpointer@0.21.0\",\"type\":\"library\",\"name\":\"github.com/go-openapi/jsonpointer\",\"version\":\"0.21.0\",\"purl\":\"pkg:golang/github.com/go-openapi/jsonpointer@0.21.0\"},{\"bom-ref\":\"pkg:golang/github.com/docker/docker@27.4.1+incompatible\",\"type\":\"library\",\"name\":\"github.com/docker/docker\",\"version\":\"27.4.1+incompatible\",\"purl\":\"pkg:golang/github.com/docker/docker@27.4.1+incompatible\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/receiver/otlpreceiver@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/receiver/otlpreceiver\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/receiver/otlpreceiver@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/kevinburke/ssh_config@1.2.0\",\"type\":\"library\",\"name\":\"github.com/kevinburke/ssh_config\",\"version\":\"1.2.0\",\"purl\":\"pkg:golang/github.com/kevinburke/ssh_config@1.2.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@0.59.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp\",\"version\":\"0.59.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp@0.59.0\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/agent-payload/v5@5.0.19\",\"type\":\"library\",\"name\":\"github.com/DataDog/agent-payload/v5\",\"version\":\"5.0.19\",\"purl\":\"pkg:golang/github.com/DataDog/agent-payload/v5@5.0.19\"},{\"bom-ref\":\"pkg:golang/github.com/moby/term@0.5.0\",\"type\":\"library\",\"name\":\"github.com/moby/term\",\"version\":\"0.5.0\",\"purl\":\"pkg:golang/github.com/moby/term@0.5.0\"},{\"bom-ref\":\"pkg:golang/github.com/klauspost/pgzip@1.2.6\",\"type\":\"library\",\"name\":\"github.com/klauspost/pgzip\",\"version\":\"1.2.6\",\"purl\":\"pkg:golang/github.com/klauspost/pgzip@1.2.6\"},{\"bom-ref\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/network/v2@2.81.0\",\"type\":\"library\",\"name\":\"github.com/pulumi/pulumi-azure-native-sdk/network/v2\",\"version\":\"2.81.0\",\"purl\":\"pkg:golang/github.com/pulumi/pulumi-azure-native-sdk/network/v2@2.81.0\"},{\"bom-ref\":\"pkg:golang/github.com/redis/go-redis/v9@9.5.1\",\"type\":\"library\",\"name\":\"github.com/redis/go-redis/v9\",\"version\":\"9.5.1\",\"purl\":\"pkg:golang/github.com/redis/go-redis/v9@9.5.1\"},{\"bom-ref\":\"pkg:golang/github.com/julz/importas@0.1.0\",\"type\":\"library\",\"name\":\"github.com/julz/importas\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/julz/importas@0.1.0\"},{\"bom-ref\":\"pkg:golang/stdlib@1.21.0\",\"type\":\"library\",\"name\":\"stdlib\",\"version\":\"1.21.0\",\"purl\":\"pkg:golang/stdlib@1.21.0\"},{\"bom-ref\":\"pkg:golang/sigs.k8s.io/kustomize/api@0.17.2\",\"type\":\"library\",\"name\":\"sigs.k8s.io/kustomize/api\",\"version\":\"0.17.2\",\"purl\":\"pkg:golang/sigs.k8s.io/kustomize/api@0.17.2\"},{\"bom-ref\":\"pkg:golang/github.com/evanphx/json-patch@5.9.0+incompatible\",\"type\":\"library\",\"name\":\"github.com/evanphx/json-patch\",\"version\":\"5.9.0+incompatible\",\"purl\":\"pkg:golang/github.com/evanphx/json-patch@5.9.0+incompatible\"},{\"bom-ref\":\"pkg:npm/path-to-regexp@0.1.9\",\"type\":\"library\",\"name\":\"path-to-regexp\",\"version\":\"0.1.9\",\"purl\":\"pkg:npm/path-to-regexp@0.1.9\"},{\"bom-ref\":\"pkg:golang/github.com/spaolacci/murmur3@1.1.0\",\"type\":\"library\",\"name\":\"github.com/spaolacci/murmur3\",\"version\":\"1.1.0\",\"purl\":\"pkg:golang/github.com/spaolacci/murmur3@1.1.0\"},{\"bom-ref\":\"pkg:golang/go.opentelemetry.io/collector/processor/processortest@0.119.0\",\"type\":\"library\",\"name\":\"go.opentelemetry.io/collector/processor/processortest\",\"version\":\"0.119.0\",\"purl\":\"pkg:golang/go.opentelemetry.io/collector/processor/processortest@0.119.0\"},{\"bom-ref\":\"pkg:golang/github.com/rogpeppe/go-internal@1.13.1\",\"type\":\"library\",\"name\":\"github.com/rogpeppe/go-internal\",\"version\":\"1.13.1\",\"purl\":\"pkg:golang/github.com/rogpeppe/go-internal@1.13.1\"},{\"bom-ref\":\"pkg:golang/github.com/go-zookeeper/zk@1.0.3\",\"type\":\"library\",\"name\":\"github.com/go-zookeeper/zk\",\"version\":\"1.0.3\",\"purl\":\"pkg:golang/github.com/go-zookeeper/zk@1.0.3\"},{\"bom-ref\":\"pkg:golang/github.com/timonwong/loggercheck@0.9.4\",\"type\":\"library\",\"name\":\"github.com/timonwong/loggercheck\",\"version\":\"0.9.4\",\"purl\":\"pkg:golang/github.com/timonwong/loggercheck@0.9.4\"},{\"bom-ref\":\"pkg:golang/golang.org/x/tools@0.29.0\",\"type\":\"library\",\"name\":\"golang.org/x/tools\",\"version\":\"0.29.0\",\"purl\":\"pkg:golang/golang.org/x/tools@0.29.0\"},{\"bom-ref\":\"pkg:golang/github.com/hashicorp/nomad/api@0.0.0-20240717122358-3d93bd3778f3\",\"type\":\"library\",\"name\":\"github.com/hashicorp/nomad/api\",\"version\":\"0.0.0-20240717122358-3d93bd3778f3\",\"purl\":\"pkg:golang/github.com/hashicorp/nomad/api@0.0.0-20240717122358-3d93bd3778f3\"},{\"bom-ref\":\"pkg:golang/github.com/coreos/go-systemd@0.0.0-20190321100706-95778dfbb74e\",\"type\":\"library\",\"name\":\"github.com/coreos/go-systemd\",\"version\":\"0.0.0-20190321100706-95778dfbb74e\",\"purl\":\"pkg:golang/github.com/coreos/go-systemd@0.0.0-20190321100706-95778dfbb74e\"},{\"bom-ref\":\"pkg:golang/k8s.io/kube-aggregator@0.31.2\",\"type\":\"library\",\"name\":\"k8s.io/kube-aggregator\",\"version\":\"0.31.2\",\"purl\":\"pkg:golang/k8s.io/kube-aggregator@0.31.2\"},{\"bom-ref\":\"pkg:golang/github.com/DataDog/sketches-go@1.4.6\",\"type\":\"library\",\"name\":\"github.com/DataDog/sketches-go\",\"version\":\"1.4.6\",\"purl\":\"pkg:golang/github.com/DataDog/sketches-go@1.4.6\"},{\"bom-ref\":\"pkg:golang/gopkg.in/zorkian/go-datadog-api.v2@2.30.0\",\"type\":\"library\",\"name\":\"gopkg.in/zorkian/go-datadog-api.v2\",\"version\":\"2.30.0\",\"purl\":\"pkg:golang/gopkg.in/zorkian/go-datadog-api.v2@2.30.0\"},{\"bom-ref\":\"pkg:golang/github.com/rickar/props@1.0.0\",\"type\":\"library\",\"name\":\"github.com/rickar/props\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/rickar/props@1.0.0\"},{\"bom-ref\":\"pkg:golang/code.cloudfoundry.org/consuladapter@0.0.0-20200131002136-ac1daf48ba97\",\"type\":\"library\",\"name\":\"code.cloudfoundry.org/consuladapter\",\"version\":\"0.0.0-20200131002136-ac1daf48ba97\",\"purl\":\"pkg:golang/code.cloudfoundry.org/consuladapter@0.0.0-20200131002136-ac1daf48ba97\"},{\"bom-ref\":\"pkg:golang/google.golang.org/genproto/googleapis/rpc@0.0.0-20250127172529-29210b9bc287\",\"type\":\"library\",\"name\":\"google.golang.org/genproto/googleapis/rpc\",\"version\":\"0.0.0-20250127172529-29210b9bc287\",\"purl\":\"pkg:golang/google.golang.org/genproto/googleapis/rpc@0.0.0-20250127172529-29210b9bc287\"},{\"bom-ref\":\"pkg:npm/%40datadog%2Fnative-metrics@2.0.0\",\"type\":\"library\",\"name\":\"@datadog/native-metrics\",\"version\":\"2.0.0\",\"purl\":\"pkg:npm/%40datadog%2Fnative-metrics@2.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/ssgreg/nlreturn/v2@2.2.1\",\"type\":\"library\",\"name\":\"github.com/ssgreg/nlreturn/v2\",\"version\":\"2.2.1\",\"purl\":\"pkg:golang/github.com/ssgreg/nlreturn/v2@2.2.1\"},{\"bom-ref\":\"pkg:golang/github.com/BurntSushi/toml@1.4.1-0.20240526193622-a339e1f7089c\",\"type\":\"library\",\"name\":\"github.com/BurntSushi/toml\",\"version\":\"1.4.1-0.20240526193622-a339e1f7089c\",\"purl\":\"pkg:golang/github.com/BurntSushi/toml@1.4.1-0.20240526193622-a339e1f7089c\"},{\"bom-ref\":\"pkg:golang/gopkg.in/DataDog/dd-trace-go.v1@1.70.3\",\"type\":\"library\",\"name\":\"gopkg.in/DataDog/dd-trace-go.v1\",\"version\":\"1.70.3\",\"purl\":\"pkg:golang/gopkg.in/DataDog/dd-trace-go.v1@1.70.3\"},{\"bom-ref\":\"pkg:golang/github.com/alexkohler/prealloc@1.0.0\",\"type\":\"library\",\"name\":\"github.com/alexkohler/prealloc\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/alexkohler/prealloc@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/jpillora/backoff@1.0.0\",\"type\":\"library\",\"name\":\"github.com/jpillora/backoff\",\"version\":\"1.0.0\",\"purl\":\"pkg:golang/github.com/jpillora/backoff@1.0.0\"},{\"bom-ref\":\"pkg:golang/github.com/nakabonne/nestif@0.3.1\",\"type\":\"library\",\"name\":\"github.com/nakabonne/nestif\",\"version\":\"0.3.1\",\"purl\":\"pkg:golang/github.com/nakabonne/nestif@0.3.1\"},{\"bom-ref\":\"pkg:golang/github.com/ProtonMail/go-crypto@1.1.3\",\"type\":\"library\",\"name\":\"github.com/ProtonMail/go-crypto\",\"version\":\"1.1.3\",\"purl\":\"pkg:golang/github.com/ProtonMail/go-crypto@1.1.3\"},{\"bom-ref\":\"pkg:golang/github.com/klauspost/compress@1.17.11\",\"type\":\"library\",\"name\":\"github.com/klauspost/compress\",\"version\":\"1.17.11\",\"purl\":\"pkg:golang/github.com/klauspost/compress@1.17.11\"},{\"bom-ref\":\"pkg:golang/github.com/pulumiverse/pulumi-time/sdk@0.1.0\",\"type\":\"library\",\"name\":\"github.com/pulumiverse/pulumi-time/sdk\",\"version\":\"0.1.0\",\"purl\":\"pkg:golang/github.com/pulumiverse/pulumi-time/sdk@0.1.0\"},{\"bom-ref\":\"pkg:golang/github.com/containerd/containerd@1.7.25\",\"type\":\"library\",\"name\":\"github.com/containerd/containerd\",\"version\":\"1.7.25\",\"purl\":\"pkg:golang/github.com/containerd/containerd@1.7.25\"}],\"metadata\":{\"component\":{\"type\":\"application\",\"name\":\"github.com/datadog/datadog-agent\"}},\"serialNumber\":\"urn:uuid:e8017e9a-41e8-4ee4-8a2c-993040cea9fd\",\"specVersion\":\"1.5\",\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get SBOM returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:42.022Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "notifications": [ + "channel" + ], + "status": "info" + } + ], + "complianceSignalOptions": { + "userActivationStatus": true, + "userGroupByFields": [ + "@account_id" + ] + }, + "isEnabled": false, + "message": "Cloud configuration rule", + "name": "Test-Get_a_cloud_configuration_rule_s_details_returns_OK_response-1715358882_cloud", + "options": { + "complianceRuleOptions": { + "complexRule": false, + "regoRule": { + "policy": "package datadog\n\nimport data.datadog.output as dd_output\n\nimport future.keywords.contains\nimport future.keywords.if\nimport future.keywords.in\n\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\n\neval(iam_service_account_key) = \"skip\" if {\n\tiam_service_account_key.disabled\n} else = \"pass\" if {\n\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\n} else = \"fail\"\n\n# This part remains unchanged for all rules\nresults contains result if {\n\tsome resource in input.resources[input.main_resource_type]\n\tresult := dd_output.format(resource, eval(resource))\n}\n", + "resourceTypes": [ + "gcp_compute_disk" + ] + }, + "resourceType": "gcp_compute_disk" + } + }, + "tags": [ + "a:tag" + ], + "type": "cloud_configuration" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"y8m-i7k-y9h\",\"version\":1,\"name\":\"Test-Get_a_cloud_configuration_rule_s_details_returns_OK_response-1715358882_cloud\",\"createdAt\":1715358882351,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:gcp_compute_disk\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"gcp_compute_disk\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\\n\\neval(iam_service_account_key) = \\\"skip\\\" if {\\n\\tiam_service_account_key.disabled\\n} else = \\\"pass\\\" if {\\n\\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"gcp_compute_disk\"]},\"complexRule\":false}},\"complianceSignalOptions\":{\"defaultActivationStatus\":null,\"defaultGroupByFields\":null,\"userActivationStatus\":true,\"userGroupByFields\":[\"@account_id\"]},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[\"channel\"],\"condition\":\"a > 0\"}],\"message\":\"Cloud configuration rule\",\"tags\":[\"a:tag\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/rules/y8m-i7k-y9h", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"y8m-i7k-y9h\",\"version\":1,\"name\":\"Test-Get_a_cloud_configuration_rule_s_details_returns_OK_response-1715358882_cloud\",\"createdAt\":1715358882351,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:gcp_compute_disk\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"gcp_compute_disk\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\\n\\neval(iam_service_account_key) = \\\"skip\\\" if {\\n\\tiam_service_account_key.disabled\\n} else = \\\"pass\\\" if {\\n\\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"gcp_compute_disk\"]},\"complexRule\":false}},\"complianceSignalOptions\":{\"defaultActivationStatus\":null,\"defaultGroupByFields\":null,\"userActivationStatus\":true,\"userGroupByFields\":[\"@account_id\"]},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[\"channel\"],\"condition\":\"a > 0\"}],\"message\":\"Cloud configuration rule\",\"tags\":[\"a:tag\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/y8m-i7k-y9h", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a cloud configuration rule's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T19:09:12.106Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/critical_assets/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Critical asset with ID 00000000-0000-0000-0000-000000000000 not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a critical asset returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-07-10T15:48:22.074Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "query": "security:monitoring", + "rule_query": "source:k9", + "severity": "medium", + "tags": [ + "team:security" + ] + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/critical_assets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c0d99d2c-a9c7-431a-9521-e0f4a40f1efd\",\"type\":\"critical_assets\",\"attributes\":{\"creation_author_id\":2320499,\"creation_date\":1783698502447,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"editable\":true,\"enabled\":true,\"query\":\"security:monitoring\",\"rule_query\":\"source:k9\",\"severity\":\"medium\",\"tags\":[\"team:security\"],\"update_author_id\":2320499,\"update_date\":1783698502447,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/critical_assets/c0d99d2c-a9c7-431a-9521-e0f4a40f1efd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c0d99d2c-a9c7-431a-9521-e0f4a40f1efd\",\"type\":\"critical_assets\",\"attributes\":{\"creation_author_id\":2320499,\"creation_date\":1783698502447,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"editable\":true,\"enabled\":true,\"query\":\"security:monitoring\",\"rule_query\":\"source:k9\",\"severity\":\"medium\",\"tags\":[\"team:security\"],\"update_author_id\":2320499,\"update_date\":1783698502447,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/critical_assets/c0d99d2c-a9c7-431a-9521-e0f4a40f1efd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a critical asset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-04-27T22:14:15.789Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cloud_security_management/custom_frameworks/frame-does-not-exist/frame-does-not-exist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a custom framework returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-05-13T17:29:58.139Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cloud_security_management/custom_frameworks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"handle\":\"create-framework-new\",\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cloud_security_management/custom_frameworks/create-framework-new/10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"handle\":\"create-framework-new\",\"icon_url\":\"test-url\",\"name\":\"name\",\"requirements\":[{\"name\":\"requirement\",\"controls\":[{\"name\":\"control\",\"rules_id\":[\"def-000-be9\"]}]}],\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cloud_security_management/custom_frameworks/create-framework-new/10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"description\":\"\",\"handle\":\"create-framework-new\",\"icon_url\":\"test-url\",\"name\":\"name\",\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a custom framework returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:07.946Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "due_days_per_severity": [ + { + "due_in_days": 7, + "severity": "critical" + } + ], + "due_from": "first_seen" + }, + "enabled": true, + "name": "Test-Get_a_due_date_rule_returns_Successfully_retrieved_the_due_date_rule_response-1781624467", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "due_date_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/due_date_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7842abcf-795f-47cd-b6ba-6e05790668d5\",\"type\":\"due_date_rules\",\"attributes\":{\"action\":{\"due_days_per_severity\":[{\"severity\":\"critical\",\"due_in_days\":7}],\"due_from\":\"first_seen\"},\"created_at\":1781624468200,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624468200,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_a_due_date_rule_returns_Successfully_retrieved_the_due_date_rule_response-1781624467\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/findings/automation/due_date_rules/7842abcf-795f-47cd-b6ba-6e05790668d5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7842abcf-795f-47cd-b6ba-6e05790668d5\",\"type\":\"due_date_rules\",\"attributes\":{\"action\":{\"due_days_per_severity\":[{\"severity\":\"critical\",\"due_in_days\":7}],\"due_from\":\"first_seen\"},\"created_at\":1781624468200,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624468200,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_a_due_date_rule_returns_Successfully_retrieved_the_due_date_rule_response-1781624467\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/due_date_rules/7842abcf-795f-47cd-b6ba-6e05790668d5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a due date rule returns \"Successfully retrieved the due date rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2023-04-13T14:31:03.207Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/posture_management/findings/AgAAAYd59gjghzF52gAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFCRTRvV1lFeEo4SlFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"AgAAAYd59gjghzF52gAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFCRTRvV1lFeEo4SlFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"detailed_finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"message\":\"%%%\\n## Description\\n\\nUpdate your ACL permission to remove `WRITE_ACP` and `FULL_CONTROL` accesses for authenticated and unauthenticated public users.\\n\\n## Rationale\\n\\n`WRITE_ACP` access gives any authenticated AWS accounts or IAM users or unauthenticated users READ and WRITE Access Control List (ACL) permissions. `FULL_CONTROL` encompasses `WRITE_ACP` so whenever `WRITE_ACP` and `FULL_CONTROL` permissions are granted to any AWS `Authenticated User` or `Unauthenticated User`, it grants administrative access to view, upload, modify and delete S3 objects without restriction, which can lead to potential data loss or unintended charges on your AWS bill.\\n\\n\\n## Remediation\\n\\n### From the console:\\n\\nFollow the [Configuring ACLs: Using the S3 console to set ACL permissions for a bucket][1] docs to remove `WRITE_ACP` or `FULL_CONTROL` access and update ACL permissions.\\n\\n### From the command line:\\n\\n1. Run `put-bucket-acl` with your [bucket name and ACL][2] to `private`.\\n\\n ```\\n aws s3api put-bucket-acl\\n --bucket your-s3-bucket-name\\n --acl private\\n ```\\n\\n[1]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html\\n[2]: https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-acl.html#synopsis\\n\\n%%%\",\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-xuxu-eu-north-1\",\"resource_configuration\":{\"account_id\":\"013910733512\",\"bucket_arn\":\"arn:aws:s3:::dd-chaos-cloud-xuxu-eu-north-1\",\"bucket_policy_statement\":[{\"account_id\":\"013910733512\",\"bucket_arn\":\"arn:aws:s3:::dd-chaos-cloud-xuxu-eu-north-1\",\"condition\":{},\"policy_principal\":{\"principal\":\"*\"},\"statement_action\":[\"s3:*\"],\"statement_effect\":\"Deny\",\"statement_has_condition\":true,\"statement_id\":1,\"statement_resource\":[\"arn:aws:s3:::dd-chaos-cloud-xuxu-eu-north-1/*\"],\"statement_sid\":\"DefaultPolicy\"}],\"creation_date\":1594937050000,\"name\":\"dd-chaos-cloud-xuxu-eu-north-1\",\"owner\":{\"id\":\"704bba538dc5e0b23934c261108592d6222088d0c4c2fa2ba90f0ed7d03a6efb\"},\"policy_status\":{\"is_public\":false},\"public_access_block_configuration\":{\"block_public_acls\":false,\"block_public_policy\":false,\"ignore_public_acls\":false,\"restrict_public_buckets\":true},\"resource_type\":\"aws_s3_bucket\",\"server_side_encryption_configuration\":{\"rules\":[{\"apply_server_side_encryption_by_default\":{\"sse_algorithm\":\"AES256\"},\"bucket_key_enabled\":false}]}},\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"region:eu-north-1\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a finding returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:46:02.116Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/siem-historical-detections/jobs/inva-lid", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"detail\":\"invalid jobId\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a job's details returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:46:02.616Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/siem-historical-detections/jobs/8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"Job 8e2a37fb-b0c8-4761-a7f0-0a8d6a98ba93 was not found.\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a job's details returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:46:03.044Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jobDefinition": { + "cases": [ + { + "condition": "a > 1", + "name": "Condition 1", + "notifications": [], + "status": "info" + } + ], + "from": 1730387522611, + "index": "main", + "message": "A large number of failed login attempts.", + "name": "Excessive number of failed attempts.", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "query": "source:non_existing_src_weekend" + } + ], + "tags": [], + "to": 1730387532611, + "type": "log_detection" + } + }, + "type": "historicalDetectionsJobCreate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/siem-historical-detections/jobs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4590ff3a-0a23-4f80-b974-d06df0d9b1e6\",\"type\":\"historicalDetectionsJob\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/siem-historical-detections/jobs/4590ff3a-0a23-4f80-b974-d06df0d9b1e6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4590ff3a-0a23-4f80-b974-d06df0d9b1e6\",\"type\":\"historicalDetectionsJob\",\"attributes\":{\"createdAt\":\"2026-05-26 20:46:03.567462+00\",\"createdByHandle\":\"frog@datadoghq.com\",\"createdByName\":\"frog\",\"jobDefinition\":{\"from\":1730387522611,\"to\":1730387532611,\"index\":\"main\",\"name\":\"Excessive number of failed attempts.\",\"cases\":[{\"name\":\"Condition 1\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 1\"}],\"queries\":[{\"query\":\"source:non_existing_src_weekend\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"message\":\"A large number of failed login attempts.\",\"tags\":[],\"type\":\"log_detection\"},\"jobName\":\"Excessive number of failed attempts.\",\"jobStatus\":\"pending\",\"modifiedAt\":\"2026-05-26 20:46:03.567462+00\",\"signalOutput\":false}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a job's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2022-04-13T11:32:57.080Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "2022-04-13T11:17:57.080Z", + "query": "security:attack status:high", + "to": "2022-04-13T11:32:57.080Z" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/signals/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFlRFg2UlExTW1SUUFBQUFCQldVRmxSRmcyVWtGQlJEWk9ObWg0UkhOSU9HRjNRVUUifQ\"}},\"data\":[{\"attributes\":{\"status\":\"high\",\"service\":[\"\"],\"tags\":[\"security:attack\",\"kube_cluster_name:drampa\",\"technique:t1556-modify-authentication-process\",\"source:runtime-security-agent\",\"env:prod\",\"tactic:ta0003-persistence\",\"fim:true\",\"technique:t1556-modify-authentication-process\",\"source:runtime-security-agent\",\"security:attack\",\"tactic:ta0003-persistence\",\"datacenter:edge-us3.foo.bar\",\"env:prod\",\"type:open\",\"rule_id:pam_modification_utimes\",\"team:groupa\",\"kube_node_role:compute\",\"type:chmod\",\"agent_support_urgency:high\",\"cluster_name:drampa\",\"kube_cluster_name:drampa\",\"site:corpo1.com\",\"rule_id:pam_modification_chmod\",\"rule_id:pam_modification_open\",\"type:utimes\",\"ng_local_storage:false\",\"instance_type:c5.xlarge\",\"cpu_arch:amd64\",\"ng_cluster_autoscaler:true\",\"kube_node_role:groupa-api-ng\"],\"timestamp\":\"2022-04-12T13:54:02.099Z\",\"host\":\"i-0439f25d8385802b8\",\"attributes\":{\"status\":\"info\",\"entities\":[\"host:i-0439f25d8385802b8\",\"@usr.id:root\"],\"hostname\":\"i-0439f25d8385802b8\",\"relatedLogsQueryUrl\":\"/logs?query=%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_utimes%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_chown%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_chmod%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_link%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_open%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_unlink%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_rename%29+host%3A%22i-0439f25d8385802b8%22%29&from_ts=1649770439000&to_ts=1649858339000&live=false&integration_id=security_monitoring&integration_short_name=security_investigation\",\"file\":{\"path\":[\"/etc/pam.conf\",\"/etc/pam.d/common-password\",\"/etc/pam.d/common-account\",\"/etc/pam.d/common-session-noninteractive\",\"/etc/pam.d/common-session\",\"/etc/pam.d/chpasswd\",\"/etc/pam.d/chfn\",\"/etc/pam.d/common-auth\",\"/etc/pam.d/chsh\"],\"flags\":[\"O_TRUNC\",\"O_WRONLY\",\"O_CREAT\",\"O_CLOEXEC\"],\"name\":[\"pam.conf\",\"chfn\",\"common-session-noninteractive\",\"chsh\",\"common-password\",\"common-auth\",\"common-session\",\"common-account\",\"chpasswd\"]},\"internal_id\":\"xgh-dfy-ywf-19-AYAeDXzzAACtiRYoIqxh0gAN--1754712357\",\"workflow\":{\"events_matched\":31,\"rule\":{\"defaultRuleVersion\":19,\"type\":\"Workload Security\",\"defaultRuleId\":\"tz1-6vg-1yz\",\"detectionMethod\":\"threshold\",\"version\":19,\"isDefaultRule\":true,\"id\":\"xgh-dfy-ywf\",\"name\":\"PAM Configuration Files Modification\"},\"high_cardinality\":{\"attributes\":[],\"tags\":[]},\"first_seen\":\"2022-04-12T13:53:59.000Z\",\"triage\":{\"assignee\":{\"name\":\"Unassigned\",\"id\":-1},\"state\":\"open\",\"incidentIds\":[],\"updater\":{\"handle\":\"\",\"name\":\"\"},\"creator\":{\"handle\":\"\",\"name\":\"\"}},\"last_seen\":\"2022-04-12T13:53:59.000Z\"},\"process\":{\"executable\":{\"path\":\"/usr/local/bin/containerd\",\"name\":\"containerd\"},\"args\":\"info\",\"pid\":683,\"parent\":{\"executable\":{\"path\":\"/usr/lib/systemd/systemd\",\"name\":\"systemd\"},\"comm\":\"systemd\"}},\"groupByPaths\":[\"host\"],\"title\":\"PAM Configuration Files Modification - pam_modification\",\"agent\":{\"version\":\"7.35.0\",\"rule_id\":[\"pam_modification_utimes\",\"pam_modification_open\",\"pam_modification_chmod\"],\"policy_version\":\"1.4.3\"},\"triggeringRuleCase\":{\"status\":\"high\",\"name\":\"pam_modification\",\"condition\":\"pam_modification_chmod > 0 || pam_modification_chown > 0 || pam_modification_link > 0 || pam_modification_rename > 0 || pam_modification_open > 0 || pam_modification_unlink > 0 || pam_modification_utimes > 0\"},\"service\":\"\",\"usr\":{\"id\":\"root\"},\"samples\":[{\"eventId\":\"AQAAAYAeDXDn_e1ZxAAAAABBWUFlRFh6ekFBQ3RpUllvSXF4aDBnQWY\",\"content\":{\"status\":\"info\",\"service\":\"\",\"tags\":[\"source:runtime-security-agent\",\"type:chmod\",\"rule_id:pam_modification_chmod\",\"agent_support_urgency:high\",\"cluster_name:drampa\",\"cpu_arch:amd64\",\"datacenter:edge-us3.foo.bar\",\"env:prod\",\"instance_type:c5.xlarge\",\"kube_cluster_name:drampa\",\"kube_node_role:compute\",\"kube_node_role:groupa-api-ng\",\"ng_cluster_autoscaler:true\",\"ng_local_storage:false\",\"site:datadoghq.com\",\"team:groupa\"],\"timestamp\":\"2022-04-12T13:53:59.015Z\",\"ingest_size_in_bytes\":7702,\"custom\":{\"status\":\"info\",\"service\":\"\",\"title\":\"PAM may have been modified without authorization\",\"process\":{\"executable\":{\"group\":\"root\",\"name\":\"containerd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-17T09:32:05.508169636Z\",\"modification_time\":\"2021-10-06T12:45:08Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/local/bin/containerd\",\"inode\":1181,\"uid\":0},\"ancestors\":[{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:33Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:33Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}}],\"group\":\"root\",\"uid\":0,\"parent\":{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:33Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:33Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}},\"argv0\":\"--log-level\",\"exec_time\":\"2022-04-12T13:51:40Z\",\"args\":[\"info\"],\"pid\":683,\"gid\":0,\"comm\":\"containerd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:40Z\",\"tid\":2976,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"},\"ppid\":1},\"timestamp\":1649771639015,\"hostname\":\"i-0439f25d8385802b8\",\"agent\":{\"policy_name\":\"default.policy\",\"rule_id\":\"pam_modification_chmod\",\"version\":\"7.35.0\",\"policy_version\":\"1.4.3\"},\"usr\":{\"group\":\"root\",\"id\":\"root\"},\"file\":{\"change_time\":\"2022-04-12T13:53:52.770147011Z\",\"group\":\"root\",\"uid\":0,\"mount_id\":1443,\"user\":\"root\",\"destination\":{\"gid\":0,\"mode\":420,\"uid\":0},\"modification_time\":\"2022-04-12T13:53:52.770147011Z\",\"gid\":0,\"mode\":33188,\"filesystem\":\"ext4\",\"path\":\"/etc/pam.d/common-auth\",\"inode\":1543473,\"name\":\"common-auth\"},\"date\":\"2022-04-12T13:53:52.569968893Z\",\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":\"chmod\"}},\"source\":\"runtime-security-agent\",\"host\":\"i-0439f25d8385802b8\",\"tiebreaker\":-34776636,\"host_id\":7252574590},\"queryIndex\":0,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeDXzzAACtiRYoIqxh0gAf\"},{\"eventId\":\"AQAAAYAeDXDl_e1ZsgAAAABBWUFlRFh6ekFBQ3RpUllvSXF4aDBnQU4\",\"content\":{\"status\":\"info\",\"service\":\"\",\"tags\":[\"type:open\",\"source:runtime-security-agent\",\"rule_id:pam_modification_open\",\"agent_support_urgency:high\",\"cluster_name:drampa\",\"cpu_arch:amd64\",\"datacenter:edge-us3.foo.bar\",\"env:prod\",\"instance_type:c5.xlarge\",\"kube_cluster_name:drampa\",\"kube_node_role:compute\",\"kube_node_role:groupa-api-ng\",\"ng_cluster_autoscaler:true\",\"ng_local_storage:false\",\"site:datadoghq.com\",\"team:groupa\"],\"timestamp\":\"2022-04-12T13:53:59.013Z\",\"ingest_size_in_bytes\":7747,\"custom\":{\"status\":\"info\",\"service\":\"\",\"title\":\"PAM may have been modified without authorization\",\"process\":{\"executable\":{\"group\":\"root\",\"name\":\"containerd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-17T09:32:05.508169636Z\",\"modification_time\":\"2021-10-06T12:45:08Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/local/bin/containerd\",\"inode\":1181,\"uid\":0},\"ancestors\":[{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:33Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:33Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}}],\"group\":\"root\",\"uid\":0,\"parent\":{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:33Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:33Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}},\"argv0\":\"--log-level\",\"exec_time\":\"2022-04-12T13:51:40Z\",\"args\":[\"info\"],\"pid\":683,\"gid\":0,\"comm\":\"containerd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:40Z\",\"tid\":2976,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"},\"ppid\":1},\"timestamp\":1649771639013,\"hostname\":\"i-0439f25d8385802b8\",\"agent\":{\"policy_name\":\"default.policy\",\"rule_id\":\"pam_modification_open\",\"version\":\"7.35.0\",\"policy_version\":\"1.4.3\"},\"usr\":{\"group\":\"root\",\"id\":\"root\"},\"file\":{\"change_time\":\"2022-04-12T13:53:52.770147011Z\",\"group\":\"root\",\"uid\":0,\"mount_id\":1443,\"user\":\"root\",\"destination\":{\"gid\":0,\"mode\":420,\"uid\":0},\"modification_time\":\"2022-04-12T13:53:52.770147011Z\",\"gid\":0,\"flags\":[\"O_CLOEXEC\",\"O_CREAT\",\"O_TRUNC\",\"O_WRONLY\"],\"mode\":33188,\"filesystem\":\"ext4\",\"path\":\"/etc/pam.d/chfn\",\"inode\":1543469,\"name\":\"chfn\"},\"date\":\"2022-04-12T13:53:52.569082817Z\",\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":\"open\"}},\"source\":\"runtime-security-agent\",\"host\":\"i-0439f25d8385802b8\",\"tiebreaker\":-34776654,\"host_id\":7252574590},\"queryIndex\":4,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeDXzzAACtiRYoIqxh0gAN\"}],\"queries\":[{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":16,\"distinctValues\":[],\"value\":16.0},\"name\":\"pam_modification_chmod\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_chmod)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_chown\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_chown)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_link\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_link)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_rename\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_rename)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":8,\"distinctValues\":[],\"value\":8.0},\"name\":\"pam_modification_open\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_open)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_unlink\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_unlink)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":7,\"distinctValues\":[],\"value\":7.0},\"name\":\"pam_modification_utimes\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_utimes)\",\"groupByPaths\":[\"host\"]}],\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":[\"chmod\",\"open\",\"utimes\"]}},\"message\":\"%%%\\n## Goal\\nDetect modifications to `pam.d` directory.\\n\\n## Strategy\\nLinux Pluggable Authentication Modules (PAM) provide authentication for applications and services. Authentication modules in the PAM system are setup and configured under the `/etc/pam.d/` directory. An attacker may attempt to modify or add an authentication module in PAM in order to bypass the authentication process, or reveal system credentials.\\n\\n## Triage and response\\n1. Check to see what changes were made to `/etc/pam.d/`.\\n2. Check whether the changes were a part of known system-setup or maintenance.\\n3. If these changes were unauthorized, roll back the host in question to a known good PAM configuration, or replace the system with a known-good system image.\\n\\n%%%\"},\"type\":\"signal\",\"id\":\"AQAAAYAeDXzzSJUmQwAAAABBWUFlRFh6ekFBQnpOV2hGMTdVRzF3QUE\"},{\"attributes\":{\"status\":\"high\",\"service\":[\"\"],\"tags\":[\"security:attack\",\"technique:t1556-modify-authentication-process\",\"source:runtime-security-agent\",\"tactic:ta0003-persistence\",\"fim:true\",\"technique:t1556-modify-authentication-process\",\"source:runtime-security-agent\",\"security:attack\",\"tactic:ta0003-persistence\",\"type:utimes\",\"type:open\",\"rule_id:pam_modification_utimes\",\"type:chmod\",\"rule_id:pam_modification_chmod\",\"rule_id:pam_modification_open\"],\"timestamp\":\"2022-04-12T13:54:02.513Z\",\"host\":\"i-07e829490e315fe9e\",\"attributes\":{\"status\":\"info\",\"entities\":[\"host:i-07e829490e315fe9e\",\"@usr.id:root\"],\"hostname\":\"i-07e829490e315fe9e\",\"relatedLogsQueryUrl\":\"/logs?query=%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_utimes%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_chown%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_chmod%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_link%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_open%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_unlink%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_rename%29+host%3A%22i-07e829490e315fe9e%22%29&from_ts=1649770441000&to_ts=1649858341000&live=false&integration_id=security_monitoring&integration_short_name=security_investigation\",\"file\":{\"flags\":[\"O_TRUNC\",\"O_WRONLY\",\"O_CLOEXEC\",\"O_CREAT\"]},\"internal_id\":\"xgh-dfy-ywf-19-AYAeDX6RAAASN8tjA-_jFwAN-1632335100\",\"workflow\":{\"events_matched\":41,\"rule\":{\"defaultRuleVersion\":19,\"type\":\"Workload Security\",\"defaultRuleId\":\"tz1-6vg-1yz\",\"detectionMethod\":\"threshold\",\"version\":19,\"isDefaultRule\":true,\"id\":\"xgh-dfy-ywf\",\"name\":\"PAM Configuration Files Modification\"},\"high_cardinality\":{\"attributes\":[\"@file.path\",\"@file.name\"],\"tags\":[]},\"first_seen\":\"2022-04-12T13:54:01.000Z\",\"triage\":{\"assignee\":{\"name\":\"Unassigned\",\"id\":-1},\"state\":\"open\",\"incidentIds\":[],\"updater\":{\"handle\":\"\",\"name\":\"\"},\"creator\":{\"handle\":\"\",\"name\":\"\"}},\"last_seen\":\"2022-04-12T13:54:01.000Z\"},\"process\":{\"executable\":{\"path\":\"/usr/local/bin/containerd\",\"name\":\"containerd\"},\"args\":\"info\",\"pid\":692,\"parent\":{\"executable\":{\"path\":\"/usr/lib/systemd/systemd\",\"name\":\"systemd\"},\"comm\":\"systemd\"}},\"groupByPaths\":[\"host\"],\"title\":\"PAM Configuration Files Modification - pam_modification\",\"agent\":{\"version\":\"7.35.0\",\"rule_id\":[\"pam_modification_utimes\",\"pam_modification_open\",\"pam_modification_chmod\"],\"policy_version\":\"1.4.3\"},\"triggeringRuleCase\":{\"status\":\"high\",\"name\":\"pam_modification\",\"condition\":\"pam_modification_chmod > 0 || pam_modification_chown > 0 || pam_modification_link > 0 || pam_modification_rename > 0 || pam_modification_open > 0 || pam_modification_unlink > 0 || pam_modification_utimes > 0\"},\"service\":\"\",\"usr\":{\"id\":\"root\"},\"samples\":[{\"eventId\":\"AQAAAYAeDXmP3Bju3wAAAABBWUFlRFg2UkFBQVNOOHRqQS1fakZ3QWo\",\"content\":{\"status\":\"info\",\"service\":\"\",\"tags\":[\"source:runtime-security-agent\",\"type:chmod\",\"rule_id:pam_modification_chmod\"],\"timestamp\":\"2022-04-12T13:54:01.231Z\",\"ingest_size_in_bytes\":7693,\"custom\":{\"status\":\"info\",\"service\":\"\",\"title\":\"PAM may have been modified without authorization\",\"process\":{\"executable\":{\"group\":\"root\",\"name\":\"containerd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-17T09:32:05.508169636Z\",\"modification_time\":\"2021-10-06T12:45:08Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/local/bin/containerd\",\"inode\":1181,\"uid\":0},\"ancestors\":[{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:46Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:46Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}}],\"group\":\"root\",\"uid\":0,\"parent\":{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:46Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:46Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}},\"argv0\":\"--log-level\",\"exec_time\":\"2022-04-12T13:51:53Z\",\"args\":[\"info\"],\"pid\":692,\"gid\":0,\"comm\":\"containerd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:53Z\",\"tid\":935,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"},\"ppid\":1},\"timestamp\":1649771641231,\"hostname\":\"i-07e829490e315fe9e\",\"agent\":{\"policy_name\":\"default.policy\",\"rule_id\":\"pam_modification_chmod\",\"version\":\"7.35.0\",\"policy_version\":\"1.4.3\"},\"usr\":{\"group\":\"root\",\"id\":\"root\"},\"file\":{\"change_time\":\"2022-04-12T13:53:54.973243639Z\",\"group\":\"root\",\"uid\":0,\"mount_id\":1444,\"user\":\"root\",\"destination\":{\"gid\":0,\"mode\":420,\"uid\":0},\"modification_time\":\"2022-04-12T13:53:54.973243639Z\",\"gid\":0,\"mode\":33188,\"filesystem\":\"ext4\",\"path\":\"/etc/pam.d/runuser\",\"inode\":1542342,\"name\":\"runuser\"},\"date\":\"2022-04-12T13:53:54.650254404Z\",\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":\"chmod\"}},\"source\":\"runtime-security-agent\",\"host\":\"i-07e829490e315fe9e\",\"tiebreaker\":-602345761,\"host_id\":7252584032},\"queryIndex\":0,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeDX6RAAASN8tjA-_jFwAj\"},{\"eventId\":\"AQAAAYAeDXmO3BjuyQAAAABBWUFlRFg2UkFBQVNOOHRqQS1fakZ3QU4\",\"content\":{\"status\":\"info\",\"service\":\"\",\"tags\":[\"type:open\",\"source:runtime-security-agent\",\"rule_id:pam_modification_open\"],\"timestamp\":\"2022-04-12T13:54:01.230Z\",\"ingest_size_in_bytes\":7796,\"custom\":{\"status\":\"info\",\"service\":\"\",\"title\":\"PAM may have been modified without authorization\",\"process\":{\"executable\":{\"group\":\"root\",\"name\":\"containerd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-17T09:32:05.508169636Z\",\"modification_time\":\"2021-10-06T12:45:08Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/local/bin/containerd\",\"inode\":1181,\"uid\":0},\"ancestors\":[{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:46Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:46Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}}],\"group\":\"root\",\"uid\":0,\"parent\":{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:46Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:46Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}},\"argv0\":\"--log-level\",\"exec_time\":\"2022-04-12T13:51:53Z\",\"args\":[\"info\"],\"pid\":692,\"gid\":0,\"comm\":\"containerd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:53Z\",\"tid\":935,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"},\"ppid\":1},\"timestamp\":1649771641230,\"hostname\":\"i-07e829490e315fe9e\",\"agent\":{\"policy_name\":\"default.policy\",\"rule_id\":\"pam_modification_open\",\"version\":\"7.35.0\",\"policy_version\":\"1.4.3\"},\"usr\":{\"group\":\"root\",\"id\":\"root\"},\"file\":{\"change_time\":\"2022-04-12T13:53:54.973243639Z\",\"group\":\"root\",\"uid\":0,\"mount_id\":1444,\"user\":\"root\",\"destination\":{\"gid\":0,\"mode\":420,\"uid\":0},\"modification_time\":\"2022-04-12T13:53:54.973243639Z\",\"gid\":0,\"flags\":[\"O_CLOEXEC\",\"O_CREAT\",\"O_TRUNC\",\"O_WRONLY\"],\"mode\":33188,\"filesystem\":\"ext4\",\"path\":\"/etc/pam.d/common-session-noninteractive\",\"inode\":1542337,\"name\":\"common-session-noninteractive\"},\"date\":\"2022-04-12T13:53:54.649642196Z\",\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":\"open\"}},\"source\":\"runtime-security-agent\",\"host\":\"i-07e829490e315fe9e\",\"tiebreaker\":-602345783,\"host_id\":7252584032},\"queryIndex\":4,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeDX6RAAASN8tjA-_jFwAN\"}],\"queries\":[{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":20,\"distinctValues\":[],\"value\":20.0},\"name\":\"pam_modification_chmod\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_chmod)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_chown\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_chown)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_link\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_link)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_rename\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_rename)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":11,\"distinctValues\":[],\"value\":11.0},\"name\":\"pam_modification_open\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_open)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_unlink\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_unlink)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":10,\"distinctValues\":[],\"value\":10.0},\"name\":\"pam_modification_utimes\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_utimes)\",\"groupByPaths\":[\"host\"]}],\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":[\"chmod\",\"open\",\"utimes\"]}},\"message\":\"%%%\\n## Goal\\nDetect modifications to `pam.d` directory.\\n\\n## Strategy\\nLinux Pluggable Authentication Modules (PAM) provide authentication for applications and services. Authentication modules in the PAM system are setup and configured under the `/etc/pam.d/` directory. An attacker may attempt to modify or add an authentication module in PAM in order to bypass the authentication process, or reveal system credentials.\\n\\n## Triage and response\\n1. Check to see what changes were made to `/etc/pam.d/`.\\n2. Check whether the changes were a part of known system-setup or maintenance.\\n3. If these changes were unauthorized, roll back the host in question to a known good PAM configuration, or replace the system with a known-good system image.\\n\\n%%%\"},\"type\":\"signal\",\"id\":\"AQAAAYAeDX6RQ1MmRQAAAABBWUFlRFg2UkFBRDZONmh4RHNIOGF3QUE\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/security_monitoring/signals?sort=timestamp&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFlRFg2UlExTW1SUUFBQUFCQldVRmxSRmcyVWtGQlJEWk9ObWg0UkhOSU9HRjNRVUUifQ&filter%5Bfrom%5D=now-15m&filter%5Bquery%5D=security%3Aattack+status%3Ahigh&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "2022-04-13T11:17:57.080Z", + "query": "security:attack status:high", + "to": "2022-04-13T11:32:57.080Z" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFRQUFBWUFlRFg2UlExTW1SUUFBQUFCQldVRmxSRmcyVWtGQlJEWk9ObWg0UkhOSU9HRjNRVUUifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/signals/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFlRGFHZENMd21QZ0FBQUFCQldVRmxSR0ZIWkVGQlJFa3lkakpuYjFCSmF6Um5RVUUifQ\"}},\"data\":[{\"attributes\":{\"status\":\"high\",\"service\":[\"route53\"],\"tags\":[\"security:attack\",\"instance-id:i-001d8edd861c028cb\",\"kube_cluster_name:spam\",\"technique:t1552-unsecured-credentials\",\"source:route53\",\"env:prod\",\"tactic:ta0006-credential-access\",\"technique:t1552-unsecured-credentials\",\"source:route53\",\"tactic:ta0006-credential-access\",\"security:attack\",\"name:logs-general_event-workloads-16cpu-32gb-v1\",\"cost_isolation_id:netflow-shopify\",\"admission.corpo1.com/mutate-pods:true\",\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:30432360858\",\"account:prod\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"agent_support_urgency:high\",\"security-group:sg-035e4410c7cbfcad1\",\"security-group-name:common\",\"kube_node_role:event-workloads-16cpu-32gb-v1\",\"availability-zone:us-east-1b\",\"role:kube-node\",\"admission.datadoghq.com/validate-pods:true\",\"subscription:paid\",\"forwarder_version:3.41.0\",\"vpc:vpc-4b00eb31\",\"cost_product:netflow\",\"app.kubernetes.io/managed-by:helm\",\"nodegroups.datadoghq.com/name:event-workloads-16cpu-32gb-v1\",\"instance-type:c6i.4xlarge\",\"cost_customer:shopify\",\"admission.datadoghq.com/validate-services:true\",\"kube_cluster_name:spam\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:logs-nodegroups\",\"nodegroup:logs-general_event-workloads-16cpu-32gb-v1\",\"forwardername:datadog-forwarder-prod-org-2\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:15900m\",\"kubernetes.io/cluster/spam:owned\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:logs-general\",\"security-group:sg-ca164381\",\"nodegroups.datadoghq.com/namespace:logs-general\",\"nodegroups.datadoghq.com/cluster-autoscaler:true\",\"kube_node_role:compute\",\"k8s.io/cluster-autoscaler/node-template/label/team:logs\",\"aws_account:464622532012\",\"site:datadoghq.com\",\"chart_name:logs-nodegroups\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:false\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:event-workloads-16cpu-32gb-v1\",\"kubernetes_cluster:spam\",\"env:prod\",\"cost_service:workload-backup\",\"image:ami-075fcd3f2baa396f5\",\"instance-id:i-001d8edd861c028cb\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"kube_node_role:event-workloads-16cpu-32gb\",\"region:us-east-1\",\"ng_local_storage:false\",\"team:logs\",\"autoscaling_group:us1-foo.bar-spam-k8s-ng-asg-36e15503eaab\",\"hash:91f8\",\"cpu_arch:amd64\",\"ng_cluster_autoscaler:true\",\"app.kubernetes.io/name:logs-nodegroups\",\"iam_profile:us1-foo.bar-parent8/us1-foo.bar-spam-kube-node-kubernetes-node-low-trust\",\"security-group-name:us1-foo.bar-spam-k8s-node\",\"dd_compute_k8s_platform_version:v5-14-8\",\"forwarder_memorysize:1024\",\"has_detected_ip:true\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"daemonset-profile.datadoghq.com/cilium-agent:large-v1\",\"cost_group:indexing\",\"cost_team:networks\",\"cluster_name:spam\",\"cost_subservice:logs-backup\",\"k8s.io/cluster-autoscaler/node-template/taint/node:event-workloads-16cpu-32gb:noschedule\",\"instance_type:c6i.4xlarge\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:160\",\"k8s.io/cluster-autoscaler/node-template/label/daemonset-profile.datadoghq.com/cilium-agent:large-v1\",\"security_group_name:us1-foo.bar-spam-k8s-node\",\"datacenter:us1.foo.bar\",\"sourcecategory:aws\",\"nodegroups.datadoghq.com/local-storage:false\",\"security_group_name:common\"],\"timestamp\":\"2022-04-12T13:54:11.485Z\",\"host\":\"i-001d8edd861c028cb\",\"attributes\":{\"relatedLogsQueryUrl\":\"/logs?query=source%3Aroute53+%40answers.Rdata%3A169.254.169.254+-%40route53_edge_location%3A*+instance-id%3A%22i-001d8edd861c028cb%22&from_ts=1649770258000&to_ts=1649858158000&live=false&integration_id=security_monitoring&integration_short_name=security_investigation\",\"samples\":[{\"eventId\":\"AQAAAYAeGG1YthMNxQAAAABBWUFlR2huNkFBQzVSdVc0VldqMU53RV8\",\"content\":{\"status\":\"info\",\"__dd\":{\"online_archive\":true},\"service\":\"route53\",\"tags\":[\"forwardername:datadog-forwarder-prod-org-2\",\"source:route53\",\"forwarder_version:3.41.0\",\"sourcecategory:aws\",\"forwarder_memorysize:1024\",\"agent_support_urgency:high\",\"chart_name:logs-nodegroups\",\"cluster_name:spam\",\"cpu_arch:amd64\",\"datacenter:us1.foo.bar\",\"env:prod\",\"instance_type:c6i.4xlarge\",\"kube_cluster_name:spam\",\"kube_node_role:compute\",\"kube_node_role:event-workloads-16cpu-32gb\",\"kube_node_role:event-workloads-16cpu-32gb-v1\",\"ng_cluster_autoscaler:true\",\"ng_local_storage:false\",\"site:datadoghq.com\",\"team:logs\",\"account:prod\",\"admission.datadoghq.com/mutate-pods:true\",\"admission.datadoghq.com/validate-pods:true\",\"admission.datadoghq.com/validate-services:true\",\"app.kubernetes.io/managed-by:helm\",\"app.kubernetes.io/name:logs-nodegroups\",\"auto-discovery.cluster-autoscaler.k8s.io/spam\",\"autoscaling_group:us1-foo.bar-spam-k8s-ng-asg-36e15503eaab\",\"availability-zone:us-east-1b\",\"cost_customer:shopify\",\"cost_group:indexing\",\"cost_isolation_id:netflow-shopify\",\"cost_product:netflow\",\"cost_service:workload-backup\",\"cost_subservice:logs-backup\",\"cost_team:networks\",\"daemonset-profile.datadoghq.com/cilium-agent:large-v1\",\"dd_compute_k8s_platform_version:v5-14-8\",\"hash:91f8\",\"iam_profile:us1-foo.bar-parent8/us1-foo.bar-spam-kube-node-kubernetes-node-low-trust\",\"image:ami-075fcd3f2baa396f5\",\"instance-type:c6i.4xlarge\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:logs-nodegroups\",\"k8s.io/cluster-autoscaler/node-template/label/daemonset-profile.datadoghq.com/cilium-agent:large-v1\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/event-workloads-16cpu-32gb\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/event-workloads-16cpu-32gb-v1\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:false\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:event-workloads-16cpu-32gb-v1\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:logs-general\",\"k8s.io/cluster-autoscaler/node-template/label/team:logs\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:15900m\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:30432360858\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:160\",\"k8s.io/cluster-autoscaler/node-template/taint/node:event-workloads-16cpu-32gb:noschedule\",\"kernel:none\",\"kubernetes.io/cluster/spam:owned\",\"kubernetes_cluster:spam\",\"name:logs-general_event-workloads-16cpu-32gb-v1\",\"node-role.kubernetes.io/compute\",\"node-role.kubernetes.io/event-workloads-16cpu-32gb\",\"node-role.kubernetes.io/event-workloads-16cpu-32gb-v1\",\"nodegroup:logs-general_event-workloads-16cpu-32gb-v1\",\"nodegroups.datadoghq.com/cluster-autoscaler:true\",\"nodegroups.datadoghq.com/local-storage:false\",\"nodegroups.datadoghq.com/name:event-workloads-16cpu-32gb-v1\",\"nodegroups.datadoghq.com/namespace:logs-general\",\"region:us-east-1\",\"role:kube-node\",\"security-group-name:common\",\"security-group-name:us1-foo.bar-spam-k8s-node\",\"security-group:sg-035e4410c7cbfcad1\",\"security-group:sg-ca164381\",\"security_group_name:common\",\"security_group_name:us1-foo.bar-spam-k8s-node\",\"subscription:paid\",\"instance-id:i-001d8edd861c028cb\",\"vpc:vpc-4b00eb31\",\"aws_account:464622532012\",\"has_detected_ip:true\"],\"timestamp\":\"2022-04-12T14:05:59.000Z\",\"ingest_size_in_bytes\":1037,\"custom\":{\"network\":{\"ip\":{\"list\":[\"10.59.175.16\",\"169.254.169.254\"]},\"client\":{\"geoip\":{},\"port\":\"57050\",\"ip\":\"10.59.175.16\"}},\"service\":\"route53\",\"title\":\"Address record lookup for instance-data.ec2.internal. from 10.59.175.16\",\"aws\":{\"s3\":{\"bucket\":\"datadog-dns-logs-us1-datadog-blue\",\"key\":\"AWSLogs/464622532012/vpcdnsquerylogs/vpc-4b00eb31/2022/04/12/vpc-4b00eb31_vpcdnsquerylogs_464622532012_20220412T1405Z_25118f19.log.gz\"},\"function_version\":\"$LATEST\",\"invoked_function_arn\":\"arn:aws:lambda:us-east-1:013910733512:function:datadog-forwarder-prod-org-2\"},\"answers\":[{\"Type\":\"A\",\"Class\":\"IN\",\"Rdata\":\"169.254.169.254\"}],\"host\":\"i-001d8edd861c028cb\",\"version\":\"1.100000\",\"srcids\":{},\"dns\":{\"flags\":{\"rcode\":\"NOERROR\"},\"question\":{\"type_description\":\"Address record\",\"type\":\"A\",\"name\":\"instance-data.ec2.internal.\",\"class\":\"IN\"},\"transport\":\"UDP\"},\"query_timestamp\":\"2022-04-12T14:05:59Z\"},\"source\":\"route53\",\"host\":\"i-001d8edd861c028cb\",\"tiebreaker\":-1240265275,\"host_id\":7195649243},\"queryIndex\":0,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeGhn6AAC5RuW4VWj1NwE_\"}],\"internal_id\":\"z4y-148-fv6-4-AYAeDaGdAAAeViZd58O0SwBo--587970340\",\"title\":\"EC2 instance resolved a suspicious AWS metadata DNS query\",\"triggeringRuleCase\":{\"status\":\"high\",\"name\":\"\",\"condition\":\"domain_resolve_to_metadata_ip > 0\"},\"groupByPaths\":[\"tags.instance-id\"],\"workflow\":{\"events_matched\":1,\"rule\":{\"defaultRuleVersion\":8,\"type\":\"Log Detection\",\"defaultRuleId\":\"8c5-34f-fa2\",\"detectionMethod\":\"threshold\",\"version\":13,\"isDefaultRule\":true,\"id\":\"z4y-148-fv6\",\"name\":\"EC2 instance resolved a suspicious AWS metadata DNS query\"},\"high_cardinality\":{\"attributes\":[],\"tags\":[]},\"first_seen\":\"2022-04-12T13:50:58.000Z\",\"triage\":{\"assignee\":{\"id\":-1},\"state\":\"open\",\"incidentIds\":[],\"updater\":{\"handle\":\"\",\"name\":\"\"},\"creator\":{\"handle\":\"\",\"name\":\"\"}},\"last_seen\":\"2022-04-12T14:05:59.000Z\"},\"aws\":{\"s3\":{\"bucket\":\"datadog-dns-logs-us1-datadog-blue\"},\"invoked_function_arn\":\"arn:aws:lambda:us-east-1:013910733512:function:datadog-forwarder-prod-org-2\"},\"entities\":[\"host:i-001d8edd861c028cb\",\"@network.client.ip:10.59.175.16\",\"@dns.question.name:instance-data.ec2.internal.\"],\"host\":\"i-001d8edd861c028cb\",\"service\":\"route53\",\"dns\":{\"flags\":{\"rcode\":\"NOERROR\"},\"question\":{\"type_description\":\"Address record\",\"type\":\"A\",\"name\":\"instance-data.ec2.internal.\",\"class\":\"IN\"}},\"queries\":[{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":2,\"distinctValues\":[],\"value\":2.0},\"name\":\"domain_resolve_to_metadata_ip\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"source:route53 @answers.Rdata:169.254.169.254 -@route53_edge_location:*\",\"groupByPaths\":[\"tags.instance-id\"]}],\"network\":{\"client\":{\"ip\":\"10.59.175.16\"}}},\"message\":\"%%%\\n## Goal\\nDetect when a requested domain resolves to the AWS Metadata IP (169.254.169.254).\\n\\n## Strategy\\nInspect the Route 53 logs and determine if the response data for a DNS request matches the AWS Metadata IP (169.254.169.254). This could indicate an attacker is attempting to steal your credentials from the AWS metadata service.\\n\\n## Triage and response\\n1. Determine which instance is associated with the DNS request.\\n2. Determine whether the domain name which was requested (`dns.question.name`) should be permitted. If not, conduct an investigation and determine what requested the domain and determine if the AWS metadata credentials were accessed by an attacker.\\n\\n%%%\"},\"type\":\"signal\",\"id\":\"AQAAAYAeDaGdCLwmPQAAAABBWUFlRGFHZEFBQ3R3QXBJcFc0dEVBQUE\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/security_monitoring/signals?sort=timestamp&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFlRGFHZENMd21QZ0FBQUFCQldVRmxSR0ZIWkVGQlJFa3lkakpuYjFCSmF6Um5RVUUifQ&filter%5Bfrom%5D=now-15m&filter%5Bquery%5D=security%3Aattack+status%3Ahigh&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "filter": { + "from": "2022-04-13T11:17:57.080Z", + "query": "security:attack status:high", + "to": "2022-04-13T11:32:57.080Z" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFRQUFBWUFlRGFHZENMd21QZ0FBQUFCQldVRmxSR0ZIWkVGQlJFa3lkakpuYjFCSmF6Um5RVUUifQ", + "limit": 2 + }, + "sort": "timestamp" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/signals/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of security signals returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:09.039Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "reason": "risk_accepted" + }, + "enabled": true, + "name": "Test-Get_a_mute_rule_returns_Successfully_retrieved_the_mute_rule_response-1781624469", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "mute_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/mute_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"66330741-04f8-43cc-8cd0-a4840a593658\",\"type\":\"mute_rules\",\"attributes\":{\"action\":{\"reason\":\"risk_accepted\"},\"created_at\":1781624469277,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624469277,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_a_mute_rule_returns_Successfully_retrieved_the_mute_rule_response-1781624469\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/findings/automation/mute_rules/66330741-04f8-43cc-8cd0-a4840a593658", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"66330741-04f8-43cc-8cd0-a4840a593658\",\"type\":\"mute_rules\",\"attributes\":{\"action\":{\"reason\":\"risk_accepted\"},\"created_at\":1781624469277,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624469277,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_a_mute_rule_returns_Successfully_retrieved_the_mute_rule_response-1781624469\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/mute_rules/66330741-04f8-43cc-8cd0-a4840a593658", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a mute rule returns \"Successfully retrieved the mute rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2022-04-12T15:49:41.648Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/signals", + "query": [ + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFlZHdCbC1Wd21VZ0FBQUFCQldVRmxaSGRDYkVGQlFXRkpURGgxTlZNMFFtTlJRVUUifQ\"}},\"data\":[{\"attributes\":{\"status\":\"high\",\"service\":[\"\"],\"tags\":[\"security:attack\",\"kube_cluster_name:drampa\",\"technique:t1556-modify-authentication-process\",\"source:runtime-security-agent\",\"env:prod\",\"tactic:ta0003-persistence\",\"fim:true\",\"technique:t1556-modify-authentication-process\",\"source:runtime-security-agent\",\"security:attack\",\"tactic:ta0003-persistence\",\"datacenter:edge-us3.foo.bar\",\"env:prod\",\"type:open\",\"rule_id:pam_modification_utimes\",\"team:groupa\",\"kube_node_role:compute\",\"type:chmod\",\"agent_support_urgency:high\",\"cluster_name:drampa\",\"kube_cluster_name:drampa\",\"site:mycorp.com\",\"rule_id:pam_modification_chmod\",\"rule_id:pam_modification_open\",\"type:utimes\",\"ng_local_storage:false\",\"instance_type:c5.xlarge\",\"cpu_arch:amd64\",\"ng_cluster_autoscaler:true\",\"kube_node_role:groupa-api-ng\"],\"timestamp\":\"2022-04-12T13:54:02.099Z\",\"host\":\"i-0439f25d8385802b8\",\"attributes\":{\"status\":\"info\",\"entities\":[\"host:i-0439f25d8385802b8\",\"@usr.id:root\"],\"hostname\":\"i-0439f25d8385802b8\",\"relatedLogsQueryUrl\":\"/logs?query=%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_utimes%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_chown%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_chmod%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_link%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_open%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_unlink%29+host%3A%22i-0439f25d8385802b8%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_rename%29+host%3A%22i-0439f25d8385802b8%22%29&from_ts=1649770439000&to_ts=1649858339000&live=false&integration_id=security_monitoring&integration_short_name=security_investigation\",\"file\":{\"path\":[\"/etc/pam.conf\",\"/etc/pam.d/common-password\",\"/etc/pam.d/common-account\",\"/etc/pam.d/common-session-noninteractive\",\"/etc/pam.d/common-session\",\"/etc/pam.d/chpasswd\",\"/etc/pam.d/chfn\",\"/etc/pam.d/common-auth\",\"/etc/pam.d/chsh\"],\"flags\":[\"O_TRUNC\",\"O_WRONLY\",\"O_CREAT\",\"O_CLOEXEC\"],\"name\":[\"pam.conf\",\"chfn\",\"common-session-noninteractive\",\"chsh\",\"common-password\",\"common-auth\",\"common-session\",\"common-account\",\"chpasswd\"]},\"internal_id\":\"xgh-dfy-ywf-19-AYAeDXzzAACtiRYoIqxh0gAN--1754712357\",\"workflow\":{\"events_matched\":31,\"rule\":{\"defaultRuleVersion\":19,\"type\":\"Workload Security\",\"defaultRuleId\":\"tz1-6vg-1yz\",\"detectionMethod\":\"threshold\",\"version\":19,\"isDefaultRule\":true,\"id\":\"xgh-dfy-ywf\",\"name\":\"PAM Configuration Files Modification\"},\"high_cardinality\":{\"attributes\":[],\"tags\":[]},\"first_seen\":\"2022-04-12T13:53:59.000Z\",\"triage\":{\"assignee\":{\"name\":\"Unassigned\",\"id\":-1},\"state\":\"open\",\"incidentIds\":[],\"updater\":{\"handle\":\"\",\"name\":\"\"},\"creator\":{\"handle\":\"\",\"name\":\"\"}},\"last_seen\":\"2022-04-12T13:53:59.000Z\"},\"process\":{\"executable\":{\"path\":\"/usr/local/bin/containerd\",\"name\":\"containerd\"},\"args\":\"info\",\"pid\":683,\"parent\":{\"executable\":{\"path\":\"/usr/lib/systemd/systemd\",\"name\":\"systemd\"},\"comm\":\"systemd\"}},\"groupByPaths\":[\"host\"],\"title\":\"PAM Configuration Files Modification - pam_modification\",\"agent\":{\"version\":\"7.35.0\",\"rule_id\":[\"pam_modification_utimes\",\"pam_modification_open\",\"pam_modification_chmod\"],\"policy_version\":\"1.4.3\"},\"triggeringRuleCase\":{\"status\":\"high\",\"name\":\"pam_modification\",\"condition\":\"pam_modification_chmod > 0 || pam_modification_chown > 0 || pam_modification_link > 0 || pam_modification_rename > 0 || pam_modification_open > 0 || pam_modification_unlink > 0 || pam_modification_utimes > 0\"},\"service\":\"\",\"usr\":{\"id\":\"root\"},\"samples\":[{\"eventId\":\"AQAAAYAeDXDn_e1ZxAAAAABBWUFlRFh6ekFBQ3RpUllvSXF4aDBnQWY\",\"content\":{\"status\":\"info\",\"service\":\"\",\"tags\":[\"source:runtime-security-agent\",\"type:chmod\",\"rule_id:pam_modification_chmod\",\"agent_support_urgency:high\",\"cluster_name:drampa\",\"cpu_arch:amd64\",\"datacenter:edge-us3.foo.bar\",\"env:prod\",\"instance_type:c5.xlarge\",\"kube_cluster_name:drampa\",\"kube_node_role:compute\",\"kube_node_role:groupa-api-ng\",\"ng_cluster_autoscaler:true\",\"ng_local_storage:false\",\"site:mycorp.com\",\"team:groupa\"],\"timestamp\":\"2022-04-12T13:53:59.015Z\",\"ingest_size_in_bytes\":7702,\"custom\":{\"status\":\"info\",\"service\":\"\",\"title\":\"PAM may have been modified without authorization\",\"process\":{\"executable\":{\"group\":\"root\",\"name\":\"containerd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-17T09:32:05.508169636Z\",\"modification_time\":\"2021-10-06T12:45:08Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/local/bin/containerd\",\"inode\":1181,\"uid\":0},\"ancestors\":[{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:33Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:33Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}}],\"group\":\"root\",\"uid\":0,\"parent\":{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:33Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:33Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}},\"argv0\":\"--log-level\",\"exec_time\":\"2022-04-12T13:51:40Z\",\"args\":[\"info\"],\"pid\":683,\"gid\":0,\"comm\":\"containerd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:40Z\",\"tid\":2976,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"},\"ppid\":1},\"timestamp\":1649771639015,\"hostname\":\"i-0439f25d8385802b8\",\"agent\":{\"policy_name\":\"default.policy\",\"rule_id\":\"pam_modification_chmod\",\"version\":\"7.35.0\",\"policy_version\":\"1.4.3\"},\"usr\":{\"group\":\"root\",\"id\":\"root\"},\"file\":{\"change_time\":\"2022-04-12T13:53:52.770147011Z\",\"group\":\"root\",\"uid\":0,\"mount_id\":1443,\"user\":\"root\",\"destination\":{\"gid\":0,\"mode\":420,\"uid\":0},\"modification_time\":\"2022-04-12T13:53:52.770147011Z\",\"gid\":0,\"mode\":33188,\"filesystem\":\"ext4\",\"path\":\"/etc/pam.d/common-auth\",\"inode\":1543473,\"name\":\"common-auth\"},\"date\":\"2022-04-12T13:53:52.569968893Z\",\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":\"chmod\"}},\"source\":\"runtime-security-agent\",\"host\":\"i-0439f25d8385802b8\",\"tiebreaker\":-34776636,\"host_id\":7252574590},\"queryIndex\":0,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeDXzzAACtiRYoIqxh0gAf\"},{\"eventId\":\"AQAAAYAeDXDl_e1ZsgAAAABBWUFlRFh6ekFBQ3RpUllvSXF4aDBnQU4\",\"content\":{\"status\":\"info\",\"service\":\"\",\"tags\":[\"type:open\",\"source:runtime-security-agent\",\"rule_id:pam_modification_open\",\"agent_support_urgency:high\",\"cluster_name:drampa\",\"cpu_arch:amd64\",\"datacenter:edge-us3.foo.bar\",\"env:prod\",\"instance_type:c5.xlarge\",\"kube_cluster_name:drampa\",\"kube_node_role:compute\",\"kube_node_role:groupa-api-ng\",\"ng_cluster_autoscaler:true\",\"ng_local_storage:false\",\"site:mycorp.com\",\"team:groupa\"],\"timestamp\":\"2022-04-12T13:53:59.013Z\",\"ingest_size_in_bytes\":7747,\"custom\":{\"status\":\"info\",\"service\":\"\",\"title\":\"PAM may have been modified without authorization\",\"process\":{\"executable\":{\"group\":\"root\",\"name\":\"containerd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-17T09:32:05.508169636Z\",\"modification_time\":\"2021-10-06T12:45:08Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/local/bin/containerd\",\"inode\":1181,\"uid\":0},\"ancestors\":[{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:33Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:33Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}}],\"group\":\"root\",\"uid\":0,\"parent\":{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:33Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:33Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}},\"argv0\":\"--log-level\",\"exec_time\":\"2022-04-12T13:51:40Z\",\"args\":[\"info\"],\"pid\":683,\"gid\":0,\"comm\":\"containerd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:40Z\",\"tid\":2976,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"},\"ppid\":1},\"timestamp\":1649771639013,\"hostname\":\"i-0439f25d8385802b8\",\"agent\":{\"policy_name\":\"default.policy\",\"rule_id\":\"pam_modification_open\",\"version\":\"7.35.0\",\"policy_version\":\"1.4.3\"},\"usr\":{\"group\":\"root\",\"id\":\"root\"},\"file\":{\"change_time\":\"2022-04-12T13:53:52.770147011Z\",\"group\":\"root\",\"uid\":0,\"mount_id\":1443,\"user\":\"root\",\"destination\":{\"gid\":0,\"mode\":420,\"uid\":0},\"modification_time\":\"2022-04-12T13:53:52.770147011Z\",\"gid\":0,\"flags\":[\"O_CLOEXEC\",\"O_CREAT\",\"O_TRUNC\",\"O_WRONLY\"],\"mode\":33188,\"filesystem\":\"ext4\",\"path\":\"/etc/pam.d/chfn\",\"inode\":1543469,\"name\":\"chfn\"},\"date\":\"2022-04-12T13:53:52.569082817Z\",\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":\"open\"}},\"source\":\"runtime-security-agent\",\"host\":\"i-0439f25d8385802b8\",\"tiebreaker\":-34776654,\"host_id\":7252574590},\"queryIndex\":4,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeDXzzAACtiRYoIqxh0gAN\"}],\"queries\":[{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":16,\"distinctValues\":[],\"value\":16.0},\"name\":\"pam_modification_chmod\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_chmod)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_chown\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_chown)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_link\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_link)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_rename\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_rename)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":8,\"distinctValues\":[],\"value\":8.0},\"name\":\"pam_modification_open\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_open)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_unlink\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_unlink)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":7,\"distinctValues\":[],\"value\":7.0},\"name\":\"pam_modification_utimes\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_utimes)\",\"groupByPaths\":[\"host\"]}],\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":[\"chmod\",\"open\",\"utimes\"]}},\"message\":\"%%%\\n## Goal\\nDetect modifications to `pam.d` directory.\\n\\n## Strategy\\nLinux Pluggable Authentication Modules (PAM) provide authentication for applications and services. Authentication modules in the PAM system are setup and configured under the `/etc/pam.d/` directory. An attacker may attempt to modify or add an authentication module in PAM in order to bypass the authentication process, or reveal system credentials.\\n\\n## Triage and response\\n1. Check to see what changes were made to `/etc/pam.d/`.\\n2. Check whether the changes were a part of known system-setup or maintenance.\\n3. If these changes were unauthorized, roll back the host in question to a known good PAM configuration, or replace the system with a known-good system image.\\n\\n%%%\"},\"type\":\"signal\",\"id\":\"AQAAAYAeDXzzSJUmQwAAAABBWUFlRFh6ekFBQnpOV2hGMTdVRzF3QUE\"},{\"attributes\":{\"status\":\"high\",\"service\":[\"\"],\"tags\":[\"security:attack\",\"technique:t1556-modify-authentication-process\",\"source:runtime-security-agent\",\"tactic:ta0003-persistence\",\"fim:true\",\"technique:t1556-modify-authentication-process\",\"source:runtime-security-agent\",\"security:attack\",\"tactic:ta0003-persistence\",\"type:utimes\",\"type:open\",\"rule_id:pam_modification_utimes\",\"type:chmod\",\"rule_id:pam_modification_chmod\",\"rule_id:pam_modification_open\"],\"timestamp\":\"2022-04-12T13:54:02.513Z\",\"host\":\"i-07e829490e315fe9e\",\"attributes\":{\"status\":\"info\",\"entities\":[\"host:i-07e829490e315fe9e\",\"@usr.id:root\"],\"hostname\":\"i-07e829490e315fe9e\",\"relatedLogsQueryUrl\":\"/logs?query=%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_utimes%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_chown%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_chmod%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_link%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_open%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_unlink%29+host%3A%22i-07e829490e315fe9e%22%29+OR+%28%40agent.rule_id%3A%28pam_modification+OR+pam_modification_rename%29+host%3A%22i-07e829490e315fe9e%22%29&from_ts=1649770441000&to_ts=1649858341000&live=false&integration_id=security_monitoring&integration_short_name=security_investigation\",\"file\":{\"flags\":[\"O_TRUNC\",\"O_WRONLY\",\"O_CLOEXEC\",\"O_CREAT\"]},\"internal_id\":\"xgh-dfy-ywf-19-AYAeDX6RAAASN8tjA-_jFwAN-1632335100\",\"workflow\":{\"events_matched\":41,\"rule\":{\"defaultRuleVersion\":19,\"type\":\"Workload Security\",\"defaultRuleId\":\"tz1-6vg-1yz\",\"detectionMethod\":\"threshold\",\"version\":19,\"isDefaultRule\":true,\"id\":\"xgh-dfy-ywf\",\"name\":\"PAM Configuration Files Modification\"},\"high_cardinality\":{\"attributes\":[\"@file.path\",\"@file.name\"],\"tags\":[]},\"first_seen\":\"2022-04-12T13:54:01.000Z\",\"triage\":{\"assignee\":{\"name\":\"Unassigned\",\"id\":-1},\"state\":\"open\",\"incidentIds\":[],\"updater\":{\"handle\":\"\",\"name\":\"\"},\"creator\":{\"handle\":\"\",\"name\":\"\"}},\"last_seen\":\"2022-04-12T13:54:01.000Z\"},\"process\":{\"executable\":{\"path\":\"/usr/local/bin/containerd\",\"name\":\"containerd\"},\"args\":\"info\",\"pid\":692,\"parent\":{\"executable\":{\"path\":\"/usr/lib/systemd/systemd\",\"name\":\"systemd\"},\"comm\":\"systemd\"}},\"groupByPaths\":[\"host\"],\"title\":\"PAM Configuration Files Modification - pam_modification\",\"agent\":{\"version\":\"7.35.0\",\"rule_id\":[\"pam_modification_utimes\",\"pam_modification_open\",\"pam_modification_chmod\"],\"policy_version\":\"1.4.3\"},\"triggeringRuleCase\":{\"status\":\"high\",\"name\":\"pam_modification\",\"condition\":\"pam_modification_chmod > 0 || pam_modification_chown > 0 || pam_modification_link > 0 || pam_modification_rename > 0 || pam_modification_open > 0 || pam_modification_unlink > 0 || pam_modification_utimes > 0\"},\"service\":\"\",\"usr\":{\"id\":\"root\"},\"samples\":[{\"eventId\":\"AQAAAYAeDXmP3Bju3wAAAABBWUFlRFg2UkFBQVNOOHRqQS1fakZ3QWo\",\"content\":{\"status\":\"info\",\"service\":\"\",\"tags\":[\"source:runtime-security-agent\",\"type:chmod\",\"rule_id:pam_modification_chmod\"],\"timestamp\":\"2022-04-12T13:54:01.231Z\",\"ingest_size_in_bytes\":7693,\"custom\":{\"status\":\"info\",\"service\":\"\",\"title\":\"PAM may have been modified without authorization\",\"process\":{\"executable\":{\"group\":\"root\",\"name\":\"containerd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-17T09:32:05.508169636Z\",\"modification_time\":\"2021-10-06T12:45:08Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/local/bin/containerd\",\"inode\":1181,\"uid\":0},\"ancestors\":[{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:46Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:46Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}}],\"group\":\"root\",\"uid\":0,\"parent\":{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:46Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:46Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}},\"argv0\":\"--log-level\",\"exec_time\":\"2022-04-12T13:51:53Z\",\"args\":[\"info\"],\"pid\":692,\"gid\":0,\"comm\":\"containerd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:53Z\",\"tid\":935,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"},\"ppid\":1},\"timestamp\":1649771641231,\"hostname\":\"i-07e829490e315fe9e\",\"agent\":{\"policy_name\":\"default.policy\",\"rule_id\":\"pam_modification_chmod\",\"version\":\"7.35.0\",\"policy_version\":\"1.4.3\"},\"usr\":{\"group\":\"root\",\"id\":\"root\"},\"file\":{\"change_time\":\"2022-04-12T13:53:54.973243639Z\",\"group\":\"root\",\"uid\":0,\"mount_id\":1444,\"user\":\"root\",\"destination\":{\"gid\":0,\"mode\":420,\"uid\":0},\"modification_time\":\"2022-04-12T13:53:54.973243639Z\",\"gid\":0,\"mode\":33188,\"filesystem\":\"ext4\",\"path\":\"/etc/pam.d/runuser\",\"inode\":1542342,\"name\":\"runuser\"},\"date\":\"2022-04-12T13:53:54.650254404Z\",\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":\"chmod\"}},\"source\":\"runtime-security-agent\",\"host\":\"i-07e829490e315fe9e\",\"tiebreaker\":-602345761,\"host_id\":7252584032},\"queryIndex\":0,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeDX6RAAASN8tjA-_jFwAj\"},{\"eventId\":\"AQAAAYAeDXmO3BjuyQAAAABBWUFlRFg2UkFBQVNOOHRqQS1fakZ3QU4\",\"content\":{\"status\":\"info\",\"service\":\"\",\"tags\":[\"type:open\",\"source:runtime-security-agent\",\"rule_id:pam_modification_open\"],\"timestamp\":\"2022-04-12T13:54:01.230Z\",\"ingest_size_in_bytes\":7796,\"custom\":{\"status\":\"info\",\"service\":\"\",\"title\":\"PAM may have been modified without authorization\",\"process\":{\"executable\":{\"group\":\"root\",\"name\":\"containerd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-17T09:32:05.508169636Z\",\"modification_time\":\"2021-10-06T12:45:08Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/local/bin/containerd\",\"inode\":1181,\"uid\":0},\"ancestors\":[{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:46Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:46Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}}],\"group\":\"root\",\"uid\":0,\"parent\":{\"executable\":{\"group\":\"root\",\"name\":\"systemd\",\"mount_id\":24,\"user\":\"root\",\"change_time\":\"2022-03-08T22:18:48.867673359Z\",\"modification_time\":\"2022-01-10T04:56:38Z\",\"gid\":0,\"mode\":33261,\"filesystem\":\"ext4\",\"path\":\"/usr/lib/systemd/systemd\",\"inode\":3398,\"uid\":0},\"group\":\"root\",\"uid\":0,\"exec_time\":\"2022-04-12T13:51:46Z\",\"pid\":1,\"gid\":0,\"comm\":\"systemd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:46Z\",\"tid\":1,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"}},\"argv0\":\"--log-level\",\"exec_time\":\"2022-04-12T13:51:53Z\",\"args\":[\"info\"],\"pid\":692,\"gid\":0,\"comm\":\"containerd\",\"user\":\"root\",\"fork_time\":\"2022-04-12T13:51:53Z\",\"tid\":935,\"credentials\":{\"fsuid\":0,\"euser\":\"root\",\"egid\":0,\"egroup\":\"root\",\"uid\":0,\"fsgroup\":\"root\",\"cap_effective\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"fsgid\":0,\"cap_permitted\":[\"CAP_AUDIT_CONTROL\",\"CAP_AUDIT_READ\",\"CAP_AUDIT_WRITE\",\"CAP_BLOCK_SUSPEND\",\"CAP_BPF\",\"CAP_CHECKPOINT_RESTORE\",\"CAP_CHOWN\",\"CAP_DAC_OVERRIDE\",\"CAP_DAC_READ_SEARCH\",\"CAP_FOWNER\",\"CAP_FSETID\",\"CAP_IPC_LOCK\",\"CAP_IPC_OWNER\",\"CAP_KILL\",\"CAP_LEASE\",\"CAP_LINUX_IMMUTABLE\",\"CAP_MAC_ADMIN\",\"CAP_MAC_OVERRIDE\",\"CAP_MKNOD\",\"CAP_NET_ADMIN\",\"CAP_NET_BIND_SERVICE\",\"CAP_NET_BROADCAST\",\"CAP_NET_RAW\",\"CAP_PERFMON\",\"CAP_SETFCAP\",\"CAP_SETGID\",\"CAP_SETPCAP\",\"CAP_SETUID\",\"CAP_SYSLOG\",\"CAP_SYS_ADMIN\",\"CAP_SYS_BOOT\",\"CAP_SYS_CHROOT\",\"CAP_SYS_MODULE\",\"CAP_SYS_NICE\",\"CAP_SYS_PACCT\",\"CAP_SYS_PTRACE\",\"CAP_SYS_RAWIO\",\"CAP_SYS_RESOURCE\",\"CAP_SYS_TIME\",\"CAP_SYS_TTY_CONFIG\",\"CAP_WAKE_ALARM\"],\"gid\":0,\"euid\":0,\"fsuser\":\"root\",\"group\":\"root\",\"user\":\"root\"},\"ppid\":1},\"timestamp\":1649771641230,\"hostname\":\"i-07e829490e315fe9e\",\"agent\":{\"policy_name\":\"default.policy\",\"rule_id\":\"pam_modification_open\",\"version\":\"7.35.0\",\"policy_version\":\"1.4.3\"},\"usr\":{\"group\":\"root\",\"id\":\"root\"},\"file\":{\"change_time\":\"2022-04-12T13:53:54.973243639Z\",\"group\":\"root\",\"uid\":0,\"mount_id\":1444,\"user\":\"root\",\"destination\":{\"gid\":0,\"mode\":420,\"uid\":0},\"modification_time\":\"2022-04-12T13:53:54.973243639Z\",\"gid\":0,\"flags\":[\"O_CLOEXEC\",\"O_CREAT\",\"O_TRUNC\",\"O_WRONLY\"],\"mode\":33188,\"filesystem\":\"ext4\",\"path\":\"/etc/pam.d/common-session-noninteractive\",\"inode\":1542337,\"name\":\"common-session-noninteractive\"},\"date\":\"2022-04-12T13:53:54.649642196Z\",\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":\"open\"}},\"source\":\"runtime-security-agent\",\"host\":\"i-07e829490e315fe9e\",\"tiebreaker\":-602345783,\"host_id\":7252584032},\"queryIndex\":4,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeDX6RAAASN8tjA-_jFwAN\"}],\"queries\":[{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":20,\"distinctValues\":[],\"value\":20.0},\"name\":\"pam_modification_chmod\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_chmod)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_chown\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_chown)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_link\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_link)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_rename\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_rename)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":11,\"distinctValues\":[],\"value\":11.0},\"name\":\"pam_modification_open\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_open)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":0,\"distinctValues\":[],\"value\":0.0},\"name\":\"pam_modification_unlink\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_unlink)\",\"groupByPaths\":[\"host\"]},{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":10,\"distinctValues\":[],\"value\":10.0},\"name\":\"pam_modification_utimes\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"@agent.rule_id:(pam_modification OR pam_modification_utimes)\",\"groupByPaths\":[\"host\"]}],\"evt\":{\"category\":\"File Activity\",\"outcome\":\"Success\",\"name\":[\"chmod\",\"open\",\"utimes\"]}},\"message\":\"%%%\\n## Goal\\nDetect modifications to `pam.d` directory.\\n\\n## Strategy\\nLinux Pluggable Authentication Modules (PAM) provide authentication for applications and services. Authentication modules in the PAM system are setup and configured under the `/etc/pam.d/` directory. An attacker may attempt to modify or add an authentication module in PAM in order to bypass the authentication process, or reveal system credentials.\\n\\n## Triage and response\\n1. Check to see what changes were made to `/etc/pam.d/`.\\n2. Check whether the changes were a part of known system-setup or maintenance.\\n3. If these changes were unauthorized, roll back the host in question to a known good PAM configuration, or replace the system with a known-good system image.\\n\\n%%%\"},\"type\":\"signal\",\"id\":\"AQAAAYAeDX6RQ1MmRQAAAABBWUFlRFg2UkFBRDZONmh4RHNIOGF3QUE\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/security_monitoring/signals?sort=timestamp&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFlRFg2UlExTW1SUUFBQUFCQldVRmxSRmcyVWtGQlJEWk9ObWg0UkhOSU9HRjNRVUUifQ&filter%5Bfrom%5D=now-15m&filter%5Bquery%5D=security%3Aattack+status%3Ahigh&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/signals", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFRQUFBWUFlZHdCbC1Wd21VZ0FBQUFCQldVRmxaSGRDYkVGQlFXRkpURGgxTlZNMFFtTlJRVUUifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"after\":\"eyJhZnRlciI6IkFRQUFBWUFlRGFHZENMd21QZ0FBQUFCQldVRmxSR0ZIWkVGQlJFa3lkakpuYjFCSmF6Um5RVUUifQ\"}},\"data\":[{\"attributes\":{\"status\":\"high\",\"service\":[\"route53\"],\"tags\":[\"security:attack\",\"instance-id:i-001d8edd861c028cb\",\"kube_cluster_name:spam\",\"technique:t1552-unsecured-credentials\",\"source:route53\",\"env:prod\",\"tactic:ta0006-credential-access\",\"technique:t1552-unsecured-credentials\",\"source:route53\",\"tactic:ta0006-credential-access\",\"security:attack\",\"name:logs-general_event-workloads-16cpu-32gb-v1\",\"cost_isolation_id:netflow-shopify\",\"admission.mycorp.com/mutate-pods:true\",\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:30432360858\",\"account:prod\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"agent_support_urgency:high\",\"security-group:sg-035e4410c7cbfcad1\",\"security-group-name:common\",\"kube_node_role:event-workloads-16cpu-32gb-v1\",\"availability-zone:us-east-1b\",\"role:kube-node\",\"admission.mycorp.com/validate-pods:true\",\"subscription:paid\",\"forwarder_version:3.41.0\",\"vpc:vpc-4b00eb31\",\"cost_product:netflow\",\"app.kubernetes.io/managed-by:helm\",\"nodegroups.mycorp.com/name:event-workloads-16cpu-32gb-v1\",\"instance-type:c6i.4xlarge\",\"cost_customer:shopify\",\"admission.mycorp.com/validate-services:true\",\"kube_cluster_name:spam\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:logs-nodegroups\",\"nodegroup:logs-general_event-workloads-16cpu-32gb-v1\",\"forwardername:datadog-forwarder-prod-org-2\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:15900m\",\"kubernetes.io/cluster/spam:owned\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.mycorp.com/namespace:logs-general\",\"security-group:sg-ca164381\",\"nodegroups.mycorp.com/namespace:logs-general\",\"nodegroups.mycorp.com/cluster-autoscaler:true\",\"kube_node_role:compute\",\"k8s.io/cluster-autoscaler/node-template/label/team:logs\",\"aws_account:464622532012\",\"site:mycorp.com\",\"chart_name:logs-nodegroups\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.mycorp.com/local-storage:false\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.mycorp.com/name:event-workloads-16cpu-32gb-v1\",\"kubernetes_cluster:spam\",\"env:prod\",\"cost_service:workload-backup\",\"image:ami-075fcd3f2baa396f5\",\"instance-id:i-001d8edd861c028cb\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"kube_node_role:event-workloads-16cpu-32gb\",\"region:us-east-1\",\"ng_local_storage:false\",\"team:logs\",\"autoscaling_group:us1-foo.bar-spam-k8s-ng-asg-36e15503eaab\",\"hash:91f8\",\"cpu_arch:amd64\",\"ng_cluster_autoscaler:true\",\"app.kubernetes.io/name:logs-nodegroups\",\"iam_profile:us1-foo.bar-parent8/us1-foo.bar-spam-kube-node-kubernetes-node-low-trust\",\"security-group-name:us1-foo.bar-spam-k8s-node\",\"dd_compute_k8s_platform_version:v5-14-8\",\"forwarder_memorysize:1024\",\"has_detected_ip:true\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.mycorp.com/cluster-autoscaler:true\",\"daemonset-profile.mycorp.com/cilium-agent:large-v1\",\"cost_group:indexing\",\"cost_team:networks\",\"cluster_name:spam\",\"cost_subservice:logs-backup\",\"k8s.io/cluster-autoscaler/node-template/taint/node:event-workloads-16cpu-32gb:noschedule\",\"instance_type:c6i.4xlarge\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:160\",\"k8s.io/cluster-autoscaler/node-template/label/daemonset-profile.mycorp.com/cilium-agent:large-v1\",\"security_group_name:us1-foo.bar-spam-k8s-node\",\"datacenter:us1.foo.bar\",\"sourcecategory:aws\",\"nodegroups.mycorp.com/local-storage:false\",\"security_group_name:common\"],\"timestamp\":\"2022-04-12T13:54:11.485Z\",\"host\":\"i-001d8edd861c028cb\",\"attributes\":{\"relatedLogsQueryUrl\":\"/logs?query=source%3Aroute53+%40answers.Rdata%3A169.254.169.254+-%40route53_edge_location%3A*+instance-id%3A%22i-001d8edd861c028cb%22&from_ts=1649770258000&to_ts=1649858158000&live=false&integration_id=security_monitoring&integration_short_name=security_investigation\",\"samples\":[{\"eventId\":\"AQAAAYAeGG1YthMNxQAAAABBWUFlR2huNkFBQzVSdVc0VldqMU53RV8\",\"content\":{\"status\":\"info\",\"__dd\":{\"online_archive\":true},\"service\":\"route53\",\"tags\":[\"forwardername:datadog-forwarder-prod-org-2\",\"source:route53\",\"forwarder_version:3.41.0\",\"sourcecategory:aws\",\"forwarder_memorysize:1024\",\"agent_support_urgency:high\",\"chart_name:logs-nodegroups\",\"cluster_name:spam\",\"cpu_arch:amd64\",\"datacenter:us1.foo.bar\",\"env:prod\",\"instance_type:c6i.4xlarge\",\"kube_cluster_name:spam\",\"kube_node_role:compute\",\"kube_node_role:event-workloads-16cpu-32gb\",\"kube_node_role:event-workloads-16cpu-32gb-v1\",\"ng_cluster_autoscaler:true\",\"ng_local_storage:false\",\"site:mycorp.com\",\"team:logs\",\"account:prod\",\"admission.mycorp.com/mutate-pods:true\",\"admission.mycorp.com/validate-pods:true\",\"admission.mycorp.com/validate-services:true\",\"app.kubernetes.io/managed-by:helm\",\"app.kubernetes.io/name:logs-nodegroups\",\"auto-discovery.cluster-autoscaler.k8s.io/spam\",\"autoscaling_group:us1-foo.bar-spam-k8s-ng-asg-36e15503eaab\",\"availability-zone:us-east-1b\",\"cost_customer:shopify\",\"cost_group:indexing\",\"cost_isolation_id:netflow-shopify\",\"cost_product:netflow\",\"cost_service:workload-backup\",\"cost_subservice:logs-backup\",\"cost_team:networks\",\"daemonset-profile.mycorp.com/cilium-agent:large-v1\",\"dd_compute_k8s_platform_version:v5-14-8\",\"hash:91f8\",\"iam_profile:us1-foo.bar-parent8/us1-foo.bar-spam-kube-node-kubernetes-node-low-trust\",\"image:ami-075fcd3f2baa396f5\",\"instance-type:c6i.4xlarge\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:logs-nodegroups\",\"k8s.io/cluster-autoscaler/node-template/label/daemonset-profile.mycorp.com/cilium-agent:large-v1\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/event-workloads-16cpu-32gb\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/event-workloads-16cpu-32gb-v1\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.mycorp.com/cluster-autoscaler:true\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.mycorp.com/local-storage:false\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.mycorp.com/name:event-workloads-16cpu-32gb-v1\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.mycorp.com/namespace:logs-general\",\"k8s.io/cluster-autoscaler/node-template/label/team:logs\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:15900m\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:30432360858\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:160\",\"k8s.io/cluster-autoscaler/node-template/taint/node:event-workloads-16cpu-32gb:noschedule\",\"kernel:none\",\"kubernetes.io/cluster/spam:owned\",\"kubernetes_cluster:spam\",\"name:logs-general_event-workloads-16cpu-32gb-v1\",\"node-role.kubernetes.io/compute\",\"node-role.kubernetes.io/event-workloads-16cpu-32gb\",\"node-role.kubernetes.io/event-workloads-16cpu-32gb-v1\",\"nodegroup:logs-general_event-workloads-16cpu-32gb-v1\",\"nodegroups.mycorp.com/cluster-autoscaler:true\",\"nodegroups.mycorp.com/local-storage:false\",\"nodegroups.mycorp.com/name:event-workloads-16cpu-32gb-v1\",\"nodegroups.mycorp.com/namespace:logs-general\",\"region:us-east-1\",\"role:kube-node\",\"security-group-name:common\",\"security-group-name:us1-foo.bar-spam-k8s-node\",\"security-group:sg-035e4410c7cbfcad1\",\"security-group:sg-ca164381\",\"security_group_name:common\",\"security_group_name:us1-foo.bar-spam-k8s-node\",\"subscription:paid\",\"instance-id:i-001d8edd861c028cb\",\"vpc:vpc-4b00eb31\",\"aws_account:464622532012\",\"has_detected_ip:true\"],\"timestamp\":\"2022-04-12T14:05:59.000Z\",\"ingest_size_in_bytes\":1037,\"custom\":{\"network\":{\"ip\":{\"list\":[\"10.59.175.16\",\"169.254.169.254\"]},\"client\":{\"geoip\":{},\"port\":\"57050\",\"ip\":\"10.59.175.16\"}},\"service\":\"route53\",\"title\":\"Address record lookup for instance-data.ec2.internal. from 10.59.175.16\",\"aws\":{\"s3\":{\"bucket\":\"datadog-dns-logs-us1-datadog-blue\",\"key\":\"AWSLogs/464622532012/vpcdnsquerylogs/vpc-4b00eb31/2022/04/12/vpc-4b00eb31_vpcdnsquerylogs_464622532012_20220412T1405Z_25118f19.log.gz\"},\"function_version\":\"$LATEST\",\"invoked_function_arn\":\"arn:aws:lambda:us-east-1:013910733512:function:datadog-forwarder-prod-org-2\"},\"answers\":[{\"Type\":\"A\",\"Class\":\"IN\",\"Rdata\":\"169.254.169.254\"}],\"host\":\"i-001d8edd861c028cb\",\"version\":\"1.100000\",\"srcids\":{},\"dns\":{\"flags\":{\"rcode\":\"NOERROR\"},\"question\":{\"type_description\":\"Address record\",\"type\":\"A\",\"name\":\"instance-data.ec2.internal.\",\"class\":\"IN\"},\"transport\":\"UDP\"},\"query_timestamp\":\"2022-04-12T14:05:59Z\"},\"source\":\"route53\",\"host\":\"i-001d8edd861c028cb\",\"tiebreaker\":-1240265275,\"host_id\":7195649243},\"queryIndex\":0,\"trackKey\":{\"orgId\":2,\"type\":\"logs\"},\"id\":\"AYAeGhn6AAC5RuW4VWj1NwE_\"}],\"internal_id\":\"z4y-148-fv6-4-AYAeDaGdAAAeViZd58O0SwBo--587970340\",\"title\":\"EC2 instance resolved a suspicious AWS metadata DNS query\",\"triggeringRuleCase\":{\"status\":\"high\",\"name\":\"\",\"condition\":\"domain_resolve_to_metadata_ip > 0\"},\"groupByPaths\":[\"tags.instance-id\"],\"workflow\":{\"events_matched\":1,\"rule\":{\"defaultRuleVersion\":8,\"type\":\"Log Detection\",\"defaultRuleId\":\"8c5-34f-fa2\",\"detectionMethod\":\"threshold\",\"version\":13,\"isDefaultRule\":true,\"id\":\"z4y-148-fv6\",\"name\":\"EC2 instance resolved a suspicious AWS metadata DNS query\"},\"high_cardinality\":{\"attributes\":[],\"tags\":[]},\"first_seen\":\"2022-04-12T13:50:58.000Z\",\"triage\":{\"assignee\":{\"id\":-1},\"state\":\"open\",\"incidentIds\":[],\"updater\":{\"handle\":\"\",\"name\":\"\"},\"creator\":{\"handle\":\"\",\"name\":\"\"}},\"last_seen\":\"2022-04-12T14:05:59.000Z\"},\"aws\":{\"s3\":{\"bucket\":\"datadog-dns-logs-us1-datadog-blue\"},\"invoked_function_arn\":\"arn:aws:lambda:us-east-1:013910733512:function:datadog-forwarder-prod-org-2\"},\"entities\":[\"host:i-001d8edd861c028cb\",\"@network.client.ip:10.59.175.16\",\"@dns.question.name:instance-data.ec2.internal.\"],\"host\":\"i-001d8edd861c028cb\",\"service\":\"route53\",\"dns\":{\"flags\":{\"rcode\":\"NOERROR\"},\"question\":{\"type_description\":\"Address record\",\"type\":\"A\",\"name\":\"instance-data.ec2.internal.\",\"class\":\"IN\"}},\"queries\":[{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":2,\"distinctValues\":[],\"value\":2.0},\"name\":\"domain_resolve_to_metadata_ip\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"source:route53 @answers.Rdata:169.254.169.254 -@route53_edge_location:*\",\"groupByPaths\":[\"tags.instance-id\"]}],\"network\":{\"client\":{\"ip\":\"10.59.175.16\"}}},\"message\":\"%%%\\n## Goal\\nDetect when a requested domain resolves to the AWS Metadata IP (169.254.169.254).\\n\\n## Strategy\\nInspect the Route 53 logs and determine if the response data for a DNS request matches the AWS Metadata IP (169.254.169.254). This could indicate an attacker is attempting to steal your credentials from the AWS metadata service.\\n\\n## Triage and response\\n1. Determine which instance is associated with the DNS request.\\n2. Determine whether the domain name which was requested (`dns.question.name`) should be permitted. If not, conduct an investigation and determine what requested the domain and determine if the AWS metadata credentials were accessed by an attacker.\\n\\n%%%\"},\"type\":\"signal\",\"id\":\"AQAAAYAeDaGdCLwmPQAAAABBWUFlRGFHZEFBQ3R3QXBJcFc0dEVBQUE\"}],\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/security_monitoring/signals?sort=timestamp&filter%5Bto%5D=now&page%5Bcursor%5D=eyJhZnRlciI6IkFRQUFBWUFlRGFHZENMd21QZ0FBQUFCQldVRmxSR0ZIWkVGQlJFa3lkakpuYjFCSmF6Um5RVUUifQ&filter%5Bfrom%5D=now-15m&filter%5Bquery%5D=security%3Aattack+status%3Ahigh&page%5Blimit%5D=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/signals", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFRQUFBWUFlRGFHZENMd21QZ0FBQUFCQldVRmxSR0ZIWkVGQlJFa3lkakpuYjFCSmF6Um5RVUUifQ" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a quick list of security signals returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:43.147Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/rules/abcde-12345", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not found\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a rule's details returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:43.443Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Get_a_rule_s_details_returns_OK_response-1715358883", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"1nj-egs-nfm\",\"version\":1,\"name\":\"Test-Get_a_rule_s_details_returns_OK_response-1715358883\",\"createdAt\":1715358883728,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/rules/1nj-egs-nfm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"1nj-egs-nfm\",\"version\":1,\"name\":\"Test-Get_a_rule_s_details_returns_OK_response-1715358883\",\"createdAt\":1715358883728,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/1nj-egs-nfm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a rule's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:44.504Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclusion_filters": [ + { + "name": "Exclude logs from staging", + "query": "source:staging" + } + ], + "filtered_data_type": "logs", + "is_enabled": true, + "name": "Test-Get_a_security_filter_returns_OK_response-1715358884", + "query": "service:TestGetasecurityfilterreturnsOKresponse1715358884" + }, + "type": "security_filters" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/security_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"v1r-9ud-eh4\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1715358884\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1715358884\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/security_filters/v1r-9ud-eh4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"v1r-9ud-eh4\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1715358884\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1715358884\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/security_filters/v1r-9ud-eh4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a security filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2022-09-23T14:12:23.353Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/signals/AQAAAYNqUBVU4-rffwAAAABBWU5xVUJWVUFBQjJBd3ptCL3QUEm3nt2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Signal not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a signal's details returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2022-09-23T14:12:23.776Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/signals/AQAAAYNqUBVU4-rffwAAAABBWU5xVUJWVUFBQjJBd3ptMDdQUnF3QUE", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"discovery_timestamp\":1663935976788,\"searchable\":{\"title\":\"Generate a fake Signal\"},\"triggering_log_timestamp\":\"2022-09-23T12:26:16.788Z\",\"groupByValuesHash\":\"0e2-32k-1pb-1-AYNqUBVUAAB7Q6xMp4yBGgAF\",\"reducer_signal_id\":\"0e2-32k-1pb-1-AYNqUBVUAAB7Q6xMp4yBGgAF\",\"tag\":{\"source\":\"python\",\"env\":\"pcf-tealblue\",\"instance-id\":\"6161818930815280887\"},\"discovery_hour\":462204,\"gated\":{\"network\":{\"ip\":{\"list\":[\"8.8.8.8\",\"10.0.4.8\",\"127.0.0.1\"]}},\"workflow\":{\"events_matched\":200,\"rule\":{\"isDefaultRule\":false,\"defaultRuleVersion\":0,\"defaultRuleId\":null},\"high_cardinality\":{\"attributes\":[\"@trace_id\"],\"tags\":[]},\"first_seen\":\"2022-09-23T12:26:13.000Z\",\"triage\":{\"assignee\":{\"id\":-1},\"incidentIds\":[]},\"last_seen\":\"2022-09-23T12:26:41.000Z\"},\"triggeringRuleCase\":{\"status\":\"info\",\"notifications\":[],\"name\":\"\",\"condition\":\"a>0\"},\"relatedQuery\":{\"from\":1663935673000,\"track\":\"logs\",\"viewParameters\":{\"integration_id\":\"security_monitoring\",\"integration_short_name\":\"security_investigation\"},\"to\":1663936301000,\"queries\":{\"a\":\"(source:python) ((*) OR (service:api -(source:staging)) OR (acceptance rule triggered -(does not really match much) -(neither does it)) OR (ayayay query -(does not really match much) -(neither does it)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1631884327 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1631884338 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1631884338 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1631884454 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1631884464 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1631884465 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1631884670 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1631884674 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1631884674 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1631884714 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1631884715 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1631884725 -(source:staging)) OR (service:TestPythonDeleteasecurityfilterreturnsNoContentresponse1631886017 -(source:staging)) OR (service:TestPythonGetasecurityfilterreturnsOKresponse1631886029 -(source:staging)) OR (service:TestPythonUpdateasecurityfilterreturnsOKresponse1631886034 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632817310 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632817310 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632817311) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632820231 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632820231 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632820232) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632820436 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632820437 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632820438) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632821203 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632821205 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632821205) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632821494 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632821495 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632821495) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632824855 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632824856 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632824857) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632826434 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632826436 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632826436) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632827408 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632827409 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632827410) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632828993 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632828993 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632828994) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632832892 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632832892 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632832893) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632833158 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632833159 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632833159) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632836449 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632836451 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632836452) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632839530 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632839530 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632839530) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632839555 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632839556 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632839557) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632839754 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632839755 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632839755) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632841163 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632841164 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632841165) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632842479 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632842482 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632842482) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632843068 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632843069 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632843069) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632844019 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632844020 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632844021) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632844135 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632844135 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632844135) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632846637 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632846638 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632846639) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632847599 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632847600 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632847601) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632848092 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632848094 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632848095) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632848450 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632848451 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632848451) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632848885 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632848885 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632848886) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632849681 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632849683 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632849684) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632849896 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632849897 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632849898) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632851126 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632851127 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632851128) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632888517 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632888518 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632888518) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632898979 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632898980 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632898980) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632899193 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632899194 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632899194) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632902893 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632902894 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632902894) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632903483 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632903484 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632903485) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632904028 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632904028 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632904029) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632907319 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632907320 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632907320) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632907341 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632907342 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632907342) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632908400 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632908401 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632908402) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632909893 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632909895 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632909896) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632910740 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632910741 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632910742) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632913811 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632913813 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632913814) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632918181 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632918181 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632918182) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632919352 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632919352 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632919353) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632919567 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632919568 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632919568) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632921868 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632921868 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632921869) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632922202 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632922203 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632922203) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632928250 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632928250 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632928251) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632933845 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632933846 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632933847) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632974965 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632974966 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632974966) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632986086 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632986087 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632986087) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632989757 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632989758 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632989758) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632997311 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632997312 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632997312) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633000142 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633000144 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633000145) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633003795 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633003796 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633003797) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633004068 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633004069 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633004069) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633006704 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633006704 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633006705) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633007542 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633007542 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633007543) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633011104 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633011105 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633011105) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633011244 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633011246 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633011247) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633015449 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633015451 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633015452) OR (service:TestRubyGetasecurityfilterreturnsOKresponse1634150224 -(source:staging)) OR (service:TestPythonGetasecurityfilterreturnsOKresponse1635496812 -(source:staging)) OR (service:TestGoGetasecurityfilterreturnsOKresponse1636410254 -(source:staging)) OR (service:TestCreateasecurityfilterreturnsOKresponse1637063344 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637063346 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637063347) OR (service:TestCreateasecurityfilterreturnsOKresponse1637070528 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637070533 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637070535) OR (service:TestCreateasecurityfilterreturnsOKresponse1637077967 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637077969 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637077970) OR (service:TestCreateasecurityfilterreturnsOKresponse1637078478 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637078481 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637078482) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1637089241 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1620751633 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1620751634) OR (service:TestCreateasecurityfilterreturnsOKresponse1637141213 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637141215 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637141217) OR (service:TestRubyGetasecurityfilterreturnsOKresponse1637834808 -(source:staging)) OR (service:TestPythonGetasecurityfilterreturnsOKresponse1638987050 -(source:staging)) OR (service:TestPythonDeleteasecurityfilterreturnsNoContentresponse1638987054 -(source:staging)) OR (service:TestPythonUpdateasecurityfilterreturnsOKresponse1638987055 -(source:staging)) OR (service:TestPythonCreateasecurityfilterreturnsOKresponse1638987057 -(source:staging)) OR (service:TestPythonDeleteasecurityfilterreturnsNoContentresponse1639574360 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1640111630 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1640112776 -(source:staging)) OR (service:TestCreateasecurityfilterreturnsOKresponse1640112926 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1641598933 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1642578134 -(source:staging)) OR (service:TestExampleGetasecurityfilterreturnsOKresponse1642733138 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1642756664 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1642756664 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1642756664 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1642756664 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1643209589) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1643950965) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1644339764 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1644382966 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1644656566 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1644685366 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1645102964) OR (service:ExampleGetasecurityfilterreturnsOKresponse1645131764 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1645534965) OR (service:ExampleGetasecurityfilterreturnsOKresponse1645664565 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1647162167) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1647651765 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1647954164) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1648170165 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1648270965 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1648314166 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1648501364 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1648501364) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1648587764) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1648818166 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1648832565 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1648990964) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1649120564) OR (service:ExampleGetasecurityfilterreturnsOKresponse1649192564 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1649667764 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1649928918 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1650243764 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1650358964) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1650531764) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1651410164) OR (service:ExampleGetasecurityfilterreturnsOKresponse1651597364 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1651654964 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651867320 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651912576 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651915972 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651943585 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1651997988 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651997988 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1651997989 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1651997990) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1652008989 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1656001148 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1656001148) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1656001150 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1657253948 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1657469948 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1657599548) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1657887548) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1658175548) OR (first query -(does not really match much) -(neither does it)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1658636349) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1658909949) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1659140350 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1660119548 -(source:staging)))\"},\"query\":\"(source:python) ((*) OR (service:api -(source:staging)) OR (acceptance rule triggered -(does not really match much) -(neither does it)) OR (ayayay query -(does not really match much) -(neither does it)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1631884327 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1631884338 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1631884338 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1631884454 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1631884464 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1631884465 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1631884670 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1631884674 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1631884674 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1631884714 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1631884715 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1631884725 -(source:staging)) OR (service:TestPythonDeleteasecurityfilterreturnsNoContentresponse1631886017 -(source:staging)) OR (service:TestPythonGetasecurityfilterreturnsOKresponse1631886029 -(source:staging)) OR (service:TestPythonUpdateasecurityfilterreturnsOKresponse1631886034 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632817310 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632817310 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632817311) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632820231 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632820231 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632820232) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632820436 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632820437 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632820438) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632821203 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632821205 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632821205) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632821494 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632821495 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632821495) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632824855 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632824856 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632824857) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632826434 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632826436 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632826436) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632827408 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632827409 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632827410) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632828993 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632828993 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632828994) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632832892 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632832892 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632832893) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632833158 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632833159 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632833159) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632836449 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632836451 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632836452) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632839530 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632839530 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632839530) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632839555 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632839556 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632839557) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632839754 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632839755 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632839755) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632841163 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632841164 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632841165) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632842479 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632842482 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632842482) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632843068 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632843069 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632843069) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632844019 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632844020 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632844021) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632844135 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632844135 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632844135) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632846637 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632846638 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632846639) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632847599 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632847600 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632847601) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632848092 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632848094 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632848095) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632848450 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632848451 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632848451) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632848885 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632848885 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632848886) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632849681 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632849683 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632849684) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632849896 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632849897 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632849898) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632851126 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632851127 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632851128) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632888517 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632888518 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632888518) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632898979 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632898980 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632898980) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632899193 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632899194 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632899194) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632902893 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632902894 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632902894) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632903483 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632903484 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632903485) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632904028 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632904028 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632904029) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632907319 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632907320 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632907320) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632907341 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632907342 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632907342) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632908400 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632908401 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632908402) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632909893 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632909895 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632909896) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632910740 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632910741 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632910742) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632913811 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632913813 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632913814) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632918181 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632918181 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632918182) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632919352 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632919352 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632919353) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632919567 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632919568 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632919568) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632921868 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632921868 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632921869) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632922202 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632922203 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632922203) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632928250 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632928250 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632928251) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632933845 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632933846 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632933847) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632974965 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632974966 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632974966) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632986086 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632986087 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632986087) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632989757 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632989758 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632989758) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632997311 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1632997312 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632997312) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633000142 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633000144 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633000145) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633003795 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633003796 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633003797) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633004068 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633004069 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633004069) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633006704 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633006704 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633006705) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633007542 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633007542 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633007543) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633011104 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633011105 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633011105) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633011244 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633011246 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633011247) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633015449 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1633015451 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633015452) OR (service:TestRubyGetasecurityfilterreturnsOKresponse1634150224 -(source:staging)) OR (service:TestPythonGetasecurityfilterreturnsOKresponse1635496812 -(source:staging)) OR (service:TestGoGetasecurityfilterreturnsOKresponse1636410254 -(source:staging)) OR (service:TestCreateasecurityfilterreturnsOKresponse1637063344 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637063346 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637063347) OR (service:TestCreateasecurityfilterreturnsOKresponse1637070528 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637070533 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637070535) OR (service:TestCreateasecurityfilterreturnsOKresponse1637077967 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637077969 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637077970) OR (service:TestCreateasecurityfilterreturnsOKresponse1637078478 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637078481 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637078482) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1637089241 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1620751633 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1620751634) OR (service:TestCreateasecurityfilterreturnsOKresponse1637141213 -(source:staging)) OR (service:TestGetasecurityfilterreturnsOKresponse1637141215 -(source:staging)) OR (service:TestUpdateasecurityfilterreturnsOKresponse1637141217) OR (service:TestRubyGetasecurityfilterreturnsOKresponse1637834808 -(source:staging)) OR (service:TestPythonGetasecurityfilterreturnsOKresponse1638987050 -(source:staging)) OR (service:TestPythonDeleteasecurityfilterreturnsNoContentresponse1638987054 -(source:staging)) OR (service:TestPythonUpdateasecurityfilterreturnsOKresponse1638987055 -(source:staging)) OR (service:TestPythonCreateasecurityfilterreturnsOKresponse1638987057 -(source:staging)) OR (service:TestPythonDeleteasecurityfilterreturnsNoContentresponse1639574360 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1640111630 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1640112776 -(source:staging)) OR (service:TestCreateasecurityfilterreturnsOKresponse1640112926 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1641598933 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1642578134 -(source:staging)) OR (service:TestExampleGetasecurityfilterreturnsOKresponse1642733138 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1642756664 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1642756664 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1642756664 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1642756664 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1643209589) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1643950965) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1644339764 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1644382966 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1644656566 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1644685366 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1645102964) OR (service:ExampleGetasecurityfilterreturnsOKresponse1645131764 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1645534965) OR (service:ExampleGetasecurityfilterreturnsOKresponse1645664565 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1647162167) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1647651765 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1647954164) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1648170165 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1648270965 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1648314166 -(source:staging)) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1648501364 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1648501364) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1648587764) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1648818166 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1648832565 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1648990964) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1649120564) OR (service:ExampleGetasecurityfilterreturnsOKresponse1649192564 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1649667764 -(source:staging)) OR (service:TestDeleteasecurityfilterreturnsNoContentresponse1649928918 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1650243764 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1650358964) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1650531764) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1651410164) OR (service:ExampleGetasecurityfilterreturnsOKresponse1651597364 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1651654964 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651867320 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651912576 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651915972 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651943585 -(source:staging)) OR (service:TestTypescriptCreateasecurityfilterreturnsOKresponse1651997988 -(source:staging)) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651997988 -(source:staging)) OR (service:TestTypescriptGetasecurityfilterreturnsOKresponse1651997989 -(source:staging)) OR (service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1651997990) OR (service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1652008989 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1656001148 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1656001148) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1656001150 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1657253948 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1657469948 -(source:staging)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1657599548) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1657887548) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1658175548) OR (first query -(does not really match much) -(neither does it)) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1658636349) OR (service:ExampleUpdateasecurityfilterreturnsOKresponse1658909949) OR (service:ExampleCreateasecurityfilterreturnsOKresponse1659140350 -(source:staging)) OR (service:ExampleGetasecurityfilterreturnsOKresponse1660119548 -(source:staging)))\"},\"samples\":[{\"eventId\":\"AQAAAYNqUHKuyVb_mQAAAABBWU5xVUhrY0FBQUVSQy1nN2N2S1VBQUg\",\"content\":{\"status\":\"info\",\"service\":\"python-sample-app-tealblue\",\"tags\":[\"application_name:python-sample-app-tealblue\",\"application_id:dc251c1e-8302-4a43-abdf-ceebb92ca65d\",\"service:python-sample-app-tealblue\",\"cf_instance_ip:10.0.4.8\",\"foo:bar_test:value_tag1:value1_tag2:value2_teeeeeeest:compuuuuuuuuuuute\",\"container_id:0b163cd0-865c-4c88-4154-f690\",\"instance_index:3\",\"uri:python-sample-app-tealblue.apps.tealblue.cf-app.com\",\"source:python\",\"space_name:space-1\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-1d7968619a3587a78a93\",\"bosh_id:c190d27b-0292-44b8-b094-84ff511768ba\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-1d7968619a3587a78a93\",\"cf-1d7968619a3587a78a93-compute\",\"cloudfoundry\",\"compute\",\"created_at:2022-09-19t07:20:02z\",\"deployment:cf-1d7968619a3587a78a93\",\"director:p-bosh\",\"id:c190d27b-0292-44b8-b094-84ff511768ba\",\"index:0\",\"index:c190d27b-0292-44b8-b094-84ff511768ba\",\"instance-id:6161818930815280887\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-92e16ba4-36a5-43d2-5e94-f14239018e5c.c.cf-security-triage-dist-secur.internal\",\"ip:10.0.4.8\",\"job:compute\",\"name:compute/c190d27b-0292-44b8-b094-84ff511768ba\",\"numeric_project_id:734559154119\",\"p-bosh\",\"p-bosh-cf-1d7968619a3587a78a93\",\"p-bosh-cf-1d7968619a3587a78a93-compute\",\"pcf-tealblue\",\"project:cf-security-triage-dist-secur\",\"user_data:_server_:_name_:_vm-92e16ba4-36a5-43d2-5e94-f14239018e5c_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"zone:us-central1-f\",\"env:pcf-tealblue\",\"version:1.0.0\"],\"timestamp\":\"2022-09-23T12:26:40.686Z\",\"ingest_size_in_bytes\":729,\"trace_id\":\"0\",\"custom\":{\"network\":{\"ip\":{\"list\":[\"8.8.8.8\",\"10.0.4.8\",\"127.0.0.1\"]}},\"process\":{\"name\":\"werkzeug\"},\"timestamp\":1663936000686,\"dd\":{\"service\":\"python-sample-app-tealblue\",\"span_id\":\"0\"},\"filename\":\"_internal.py\",\"lineno\":224.0,\"levelname\":\"INFO\"},\"source\":\"python\",\"host\":\"compute-0-c190d27b-0292-44b8-b094-84ff511768ba\",\"tiebreaker\":-917045351,\"host_id\":8616828918,\"message\":\"2022-09-23 12:26:40,686 INFO [werkzeug] [_internal.py:224] [dd.service=python-sample-app-tealblue dd.env=pcf-tealblue dd.version=1.0.0 dd.trace_id=0 dd.span_id=0] - 127.0.0.1 - - [23/Sep/2022 12:26:40] \\\"GET / HTTP/1.1\\\" 200 -\"},\"queryIndex\":0,\"trackKey\":{\"orgId\":321813,\"type\":\"logs\"},\"id\":\"AYNqUHkcAAAERC-g7cvKUAAH\"}],\"queries\":[{\"distinctFields\":[],\"aggregationDetails\":{\"eventsCount\":200,\"distinctValues\":[],\"value\":200.0},\"name\":\"\",\"metric\":null,\"aggregation\":\"count\",\"query\":\"source:python\",\"groupByPaths\":[]}]},\"message\":\"%%%\\nGenerate a fake Signal\\n%%%\",\"event_tracker_id\":\"AQAAAYNqUBVU4-rffwAAAABBWU5xVUJWVUFBQjJBd3ptMDdQUnF3QUE\",\"severity\":0,\"service\":[\"python-sample-app-tealblue\"],\"event_id\":\"AYNqUBVUAAB2Awzm07PRqwAA\",\"custom\":{\"entities\":[\"@network.ip.list:8.8.8.8\",\"@network.ip.list:10.0.4.8\",\"@network.ip.list:127.0.0.1\",\"host:compute-0-c190d27b-0292-44b8-b094-84ff511768ba\"],\"title\":\"Generate a fake Signal\",\"workflow\":{\"triage\":{\"assignee\":{\"name\":\"Unassigned\"},\"state\":\"open\"},\"rule\":{\"detectionMethod\":\"threshold\",\"version\":1,\"type\":\"Log Detection\",\"name\":\"Generate a fake Signal\",\"id\":\"0e2-32k-1pb\"}}},\"version\":53,\"size_in_bytes\":0,\"status\":\"info\",\"tags\":[\"application_id:dc251c1e-8302-4a43-abdf-ceebb92ca65d\",\"ip:10.0.4.8\",\"container_id:efdf8d23-8c83-42f6-6d01-7a0a\",\"source:python\",\"container_id:0bb93650-07b3-4aad-5ad6-6265\",\"id:c190d27b-0292-44b8-b094-84ff511768ba\",\"numeric_project_id:734559154119\",\"bosh_deployment:cf-1d7968619a3587a78a93\",\"job:compute\",\"bosh_id:c190d27b-0292-44b8-b094-84ff511768ba\",\"bosh_az:us-central1-f\",\"foo:bar_test:value_tag1:value1_tag2:value2_teeeeeeest:compuuuuuuuuuuute\",\"instance_index:3\",\"user_data:_server_:_name_:_vm-92e16ba4-36a5-43d2-5e94-f14239018e5c_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"uri:python-sample-app-tealblue.apps.tealblue.cf-app.com\",\"instance_index:2\",\"index:0\",\"name:compute/c190d27b-0292-44b8-b094-84ff511768ba\",\"application_name:python-sample-app-tealblue\",\"version:1.0.0\",\"created_at:2022-09-19t07:20:02z\",\"index:c190d27b-0292-44b8-b094-84ff511768ba\",\"bosh_address:10.0.4.8\",\"instance_index:1\",\"service:python-sample-app-tealblue\",\"instance_index:0\",\"deployment:cf-1d7968619a3587a78a93\",\"instance-id:6161818930815280887\",\"env:pcf-tealblue\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"internal-hostname:vm-92e16ba4-36a5-43d2-5e94-f14239018e5c.c.cf-security-triage-dist-secur.internal\",\"bosh_index:0\",\"bosh_job:compute\",\"bosh_ip:10.0.4.8\",\"project:cf-security-triage-dist-secur\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"container_id:0b163cd0-865c-4c88-4154-f690\",\"space_name:space-1\",\"instance_group:compute\",\"container_id:bd53178f-e250-443a-6b13-191e\"],\"timestamp\":\"2022-09-23T12:26:16.788Z\",\"datadog.index\":\"signal\",\"host\":\"compute-0-c190d27b-0292-44b8-b094-84ff511768ba\",\"random_draw\":0.6713430866837291,\"tiebreaker\":-471146625},\"type\":\"signal\",\"id\":\"AQAAAYNqUBVU4-rffwAAAABBWU5xVUJWVUFBQjJBd3ptMDdQUnF3QUE\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a signal's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:46.085Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/suppressions/this-does-not-exist", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not found\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a suppression rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-21T15:35:05.393Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Get_a_suppression_rule_returns_OK_response-1769009705", + "enabled": true, + "name": "suppression 561a22ed12317d7c", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"k8l-r8a-pfs\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009705474,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_a_suppression_rule_returns_OK_response-1769009705\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 561a22ed12317d7c\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009705474,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/suppressions/k8l-r8a-pfs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"k8l-r8a-pfs\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009705474,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_a_suppression_rule_returns_OK_response-1769009705\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 561a22ed12317d7c\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009705474,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/k8l-r8a-pfs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a suppression rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-26T13:33:06.081Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/suppressions/this-does-not-exist/version_history", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Suppression with ID this-does-not-exist not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a suppression's version history returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-21T15:35:05.712Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Get_a_suppression_s_version_history_returns_OK_response-1769009705", + "enabled": true, + "name": "suppression ee42c68404916b9e", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"joc-mpc-lbz\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009705785,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_a_suppression_s_version_history_returns_OK_response-1769009705\",\"editable\":true,\"enabled\":true,\"name\":\"suppression ee42c68404916b9e\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009705785,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/suppressions/joc-mpc-lbz/version_history", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"joc-mpc-lbz\",\"type\":\"suppression_version_history\",\"attributes\":{\"count\":1,\"data\":{\"1\":{\"suppression\":{\"id\":\"joc-mpc-lbz\",\"name\":\"suppression ee42c68404916b9e\",\"enabled\":true,\"description\":\"Test-Get_a_suppression_s_version_history_returns_OK_response-1769009705\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"data_exclusion_query\":\"\",\"version\":1,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"creation_date\":1769009705785,\"update_date\":1769009705785,\"editable\":true,\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"]},\"changes\":[]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/joc-mpc-lbz", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a suppression's version history returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:10.163Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "max_tickets_per_day": 10, + "project_id": "11111111-1111-1111-1111-111111111111", + "target": "jira" + }, + "enabled": true, + "name": "Test-Get_a_ticket_creation_rule_returns_Successfully_retrieved_the_ticket_creation_rule_response-1781624470", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "ticket_creation_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/ticket_creation_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"065f00af-171c-4ecc-853d-ddb4c8e30c7b\",\"type\":\"ticket_creation_rules\",\"attributes\":{\"action\":{\"project_id\":\"11111111-1111-1111-1111-111111111111\",\"target\":\"jira\",\"max_tickets_per_day\":10},\"created_at\":1781624470412,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624470412,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_a_ticket_creation_rule_returns_Successfully_retrieved_the_ticket_creation_rule_response-1781624470\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/065f00af-171c-4ecc-853d-ddb4c8e30c7b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"065f00af-171c-4ecc-853d-ddb4c8e30c7b\",\"type\":\"ticket_creation_rules\",\"attributes\":{\"action\":{\"project_id\":\"11111111-1111-1111-1111-111111111111\",\"target\":\"jira\",\"max_tickets_per_day\":10},\"created_at\":1781624470412,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624470412,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_a_ticket_creation_rule_returns_Successfully_retrieved_the_ticket_creation_rule_response-1781624470\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/065f00af-171c-4ecc-853d-ddb4c8e30c7b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a ticket creation rule returns \"Successfully retrieved the ticket creation rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T19:09:14.824Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/critical_assets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all critical assets returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:11.482Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "due_days_per_severity": [ + { + "due_in_days": 7, + "severity": "critical" + } + ], + "due_from": "first_seen" + }, + "enabled": true, + "name": "Test-Get_all_due_date_rules_returns_Successfully_retrieved_the_list_of_due_date_rules_response-1781624471", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "due_date_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/due_date_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"1c8622b9-591f-472c-97ff-cac4c5a7cfe5\",\"type\":\"due_date_rules\",\"attributes\":{\"action\":{\"due_days_per_severity\":[{\"severity\":\"critical\",\"due_in_days\":7}],\"due_from\":\"first_seen\"},\"created_at\":1781624471720,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624471720,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_all_due_date_rules_returns_Successfully_retrieved_the_list_of_due_date_rules_response-1781624471\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/findings/automation/due_date_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"1c8622b9-591f-472c-97ff-cac4c5a7cfe5\",\"type\":\"due_date_rules\",\"attributes\":{\"action\":{\"due_days_per_severity\":[{\"severity\":\"critical\",\"due_in_days\":7}],\"due_from\":\"first_seen\"},\"created_at\":1781624471720,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624471720,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_all_due_date_rules_returns_Successfully_retrieved_the_list_of_due_date_rules_response-1781624471\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}],\"meta\":{\"page\":{\"total_filtered_count\":1}},\"links\":{\"first\":\"/api/v2/security/findings/automation/due_date_rules?page[size]=1000\\u0026page[number]=0\",\"last\":\"/api/v2/security/findings/automation/due_date_rules?page[size]=1000\\u0026page[number]=0\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/due_date_rules/1c8622b9-591f-472c-97ff-cac4c5a7cfe5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all due date rules returns \"Successfully retrieved the list of due date rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:12.599Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "reason": "risk_accepted" + }, + "enabled": true, + "name": "Test-Get_all_mute_rules_returns_Successfully_retrieved_the_list_of_mute_rules_response-1781624472", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "mute_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/mute_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4c72a302-c7c8-42bc-986a-f196580240c3\",\"type\":\"mute_rules\",\"attributes\":{\"action\":{\"reason\":\"risk_accepted\"},\"created_at\":1781624472865,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624472865,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_all_mute_rules_returns_Successfully_retrieved_the_list_of_mute_rules_response-1781624472\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/findings/automation/mute_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"4c72a302-c7c8-42bc-986a-f196580240c3\",\"type\":\"mute_rules\",\"attributes\":{\"action\":{\"reason\":\"risk_accepted\"},\"created_at\":1781624472865,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624472865,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_all_mute_rules_returns_Successfully_retrieved_the_list_of_mute_rules_response-1781624472\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}],\"meta\":{\"page\":{\"total_filtered_count\":1}},\"links\":{\"first\":\"/api/v2/security/findings/automation/mute_rules?page[size]=1000\\u0026page[number]=0\",\"last\":\"/api/v2/security/findings/automation/mute_rules?page[size]=1000\\u0026page[number]=0\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/mute_rules/4c72a302-c7c8-42bc-986a-f196580240c3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all mute rules returns \"Successfully retrieved the list of mute rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:47.476Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/security_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"bc0-fow-e4j\",\"attributes\":{\"version\":1,\"name\":\"all ingested logs\",\"query\":\"*\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":true},\"type\":\"security_filters\"},{\"id\":\"qhn-iuy-4oc\",\"attributes\":{\"version\":1,\"name\":\"Custom security filter\",\"query\":\"service:api\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7no-kjl-tnb\",\"attributes\":{\"version\":1,\"name\":\"tf-TestAccDatadogSecurityMonitoringFilter-local-1626096168\",\"query\":\"acceptance rule triggered\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"first\",\"query\":\"does not really match much\"},{\"name\":\"second\",\"query\":\"neither does it\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"smf-png-gzf\",\"attributes\":{\"version\":1,\"name\":\"tf-TestAccDatadogSecurityMonitoringFilterDatasource-local-1626104534\",\"query\":\"ayayay query\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"first\",\"query\":\"does not really match much\"},{\"name\":\"second\",\"query\":\"neither does it\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hrp-l2l-xht\",\"attributes\":{\"version\":1,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1631884327\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1631884327\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zr7-kgu-adi\",\"attributes\":{\"version\":1,\"name\":\"Test-Delete_a_security_filter_returns_No_Content_response-1631884338\",\"query\":\"service:TestDeleteasecurityfilterreturnsNoContentresponse1631884338\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wbd-e2v-yke\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1631884338\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1631884338\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tek-udt-1ad\",\"attributes\":{\"version\":1,\"name\":\"Test-Delete_a_security_filter_returns_No_Content_response-1631884454\",\"query\":\"service:TestDeleteasecurityfilterreturnsNoContentresponse1631884454\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ctr-nal-eek\",\"attributes\":{\"version\":1,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1631884464\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1631884464\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jpx-aky-hgq\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1631884465\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1631884465\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"otn-2vv-0xe\",\"attributes\":{\"version\":1,\"name\":\"Test-Delete_a_security_filter_returns_No_Content_response-1631884670\",\"query\":\"service:TestDeleteasecurityfilterreturnsNoContentresponse1631884670\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"knf-be5-bhz\",\"attributes\":{\"version\":1,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1631884674\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1631884674\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rjt-omi-ece\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1631884674\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1631884674\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ebq-o3v-gdg\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1631884714\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1631884714\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0pz-qyq-kqq\",\"attributes\":{\"version\":1,\"name\":\"Test-Delete_a_security_filter_returns_No_Content_response-1631884715\",\"query\":\"service:TestDeleteasecurityfilterreturnsNoContentresponse1631884715\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"m9g-ncc-02a\",\"attributes\":{\"version\":1,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1631884725\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1631884725\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"s8y-ndo-pmo\",\"attributes\":{\"version\":1,\"name\":\"Test-Python-Delete_a_security_filter_returns_No_Content_response-1631886017\",\"query\":\"service:TestPythonDeleteasecurityfilterreturnsNoContentresponse1631886017\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"clz-vl4-04z\",\"attributes\":{\"version\":1,\"name\":\"Test-Python-Get_a_security_filter_returns_OK_response-1631886029\",\"query\":\"service:TestPythonGetasecurityfilterreturnsOKresponse1631886029\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ind-p9s-w9j\",\"attributes\":{\"version\":1,\"name\":\"Test-Python-Update_a_security_filter_returns_OK_response-1631886034\",\"query\":\"service:TestPythonUpdateasecurityfilterreturnsOKresponse1631886034\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"opx-q1v-ckn\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632817310\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632817310\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"4mz-na2-ozw\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632817310\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632817310\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tkf-gkv-ffv\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632817311\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632817311\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"x1a-p97-scf\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632820231\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632820231\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"g85-tm8-yhe\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632820231\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632820231\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"obh-5cb-a0j\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632820232\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632820232\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3cw-wzf-nsn\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632820436\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632820436\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"a2c-940-8x8\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632820437\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632820437\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"r8h-dyg-wgf\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632820438\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632820438\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"eum-bss-dyi\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632821203\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632821203\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6wj-zed-jv3\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632821205\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632821205\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hbn-bix-9ia\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632821205\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632821205\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"paz-gwc-z4l\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632821494\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632821494\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jce-5qr-qdy\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632821495\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632821495\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bpr-rhq-xqj\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632821495\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632821495\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"swf-vch-g9h\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632824855\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632824855\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wtp-76p-ghf\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632824856\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632824856\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ogc-yrs-p4p\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632824857\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632824857\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"y08-eup-05l\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632826434\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632826434\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wkz-wad-cbl\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632826436\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632826436\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9kl-ojt-pmy\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632826436\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632826436\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dh2-zr8-lam\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632827408\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632827408\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hho-vt6-tws\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632827409\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632827409\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ltk-chn-umu\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632827410\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632827410\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"q3f-vnn-qmh\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632828993\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632828993\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pvi-byz-som\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632828993\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632828993\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3zg-jqc-ftm\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632828994\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632828994\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kpj-t46-vbn\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632832892\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632832892\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0og-l8j-tsq\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632832892\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632832892\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jea-me2-ru1\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632832893\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632832893\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"04n-hit-fum\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632833158\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632833158\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3rw-stk-rtz\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632833159\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632833159\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zwb-63t-lpu\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632833159\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632833159\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vle-9cs-xlh\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632836449\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632836449\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"82v-knv-p8b\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632836451\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632836451\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jp2-7ys-ljn\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632836452\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632836452\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"up5-dkc-sbq\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632839530\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632839530\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"viv-6rl-zxw\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632839530\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632839530\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1ls-1xt-i8c\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632839530\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632839530\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0bv-ryy-bup\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632839555\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632839555\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wuj-q1l-beq\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632839556\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632839556\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"usl-avk-v1a\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632839557\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632839557\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cdu-xnm-7k9\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632839754\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632839754\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dpq-4bx-fj2\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632839755\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632839755\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cnt-1qa-1xp\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632839755\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632839755\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"htl-cat-7ye\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632841163\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632841163\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zw3-fsy-7bh\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632841164\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632841164\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mwa-jkd-mg6\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632841165\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632841165\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3ph-ztk-l8m\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632842479\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632842479\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0lr-30a-qe8\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632842482\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632842482\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"b57-68u-t1d\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632842482\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632842482\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"46n-cov-z4x\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632843068\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632843068\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"57n-tai-vbl\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632843069\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632843069\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"elu-n9r-zdk\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632843069\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632843069\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1rg-ja2-wc7\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632844019\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632844019\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9sk-plb-lbm\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632844020\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632844020\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"33b-4ut-ydc\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632844021\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632844021\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wzw-cyw-og7\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632844135\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632844135\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vjk-qik-jdi\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632844135\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632844135\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qun-iu6-n5g\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632844135\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632844135\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lbv-ghg-b4a\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632846637\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632846637\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"etu-tzk-p4y\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632846638\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632846638\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xgg-32m-9um\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632846639\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632846639\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ysc-uz9-oct\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632847599\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632847599\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"j6p-hzw-4gg\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632847600\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632847600\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9zj-osj-io8\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632847601\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632847601\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bn2-ytq-ezm\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632848092\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632848092\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"oz0-0sv-86g\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632848094\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632848094\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dwk-qj9-kgd\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632848095\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632848095\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jxw-wxr-tnx\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632848450\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632848450\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"sto-gxf-iy1\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632848451\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632848451\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lol-5bi-6ik\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632848451\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632848451\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tnk-8wf-v5c\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632848885\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632848885\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hfa-dvd-bf1\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632848885\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632848885\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cwp-o1a-zwo\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632848886\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632848886\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"f4c-bee-wyi\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632849681\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632849681\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"caf-zh1-vqf\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632849683\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632849683\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"8pn-vrw-kn4\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632849684\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632849684\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wh3-wcd-shk\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632849896\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632849896\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6or-pfc-jsh\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632849897\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632849897\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"atx-t02-qhu\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632849898\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632849898\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mqn-ec8-cys\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632851126\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632851126\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"er4-rot-i9q\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632851127\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632851127\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7av-rff-z31\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632851128\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632851128\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1xt-hsv-seu\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632888517\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632888517\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rwh-ge7-poj\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632888518\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632888518\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xxy-a4m-alu\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632888518\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632888518\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ple-dse-hhf\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632898979\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632898979\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xix-4vr-abm\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632898980\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632898980\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"l8o-bzf-1fs\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632898980\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632898980\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ovk-9mh-i7q\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632899193\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632899193\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"z15-wxx-yix\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632899194\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632899194\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ewr-qfb-hvx\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632899194\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632899194\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jqo-9hq-3hz\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632902893\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632902893\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nv8-a6r-uzu\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632902894\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632902894\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2zl-irh-u4x\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632902894\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632902894\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ove-4eu-ocg\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632903483\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632903483\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wme-icd-q9j\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632903484\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632903484\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mlu-006-hhl\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632903485\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632903485\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qyd-yxv-qtf\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632904028\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632904028\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cdy-aqo-nos\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632904028\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632904028\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nzp-j5a-jrb\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632904029\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632904029\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"w9b-vfx-oqz\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632907319\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632907319\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wxm-54b-g9v\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632907320\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632907320\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tqo-alk-oww\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632907320\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632907320\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"epg-zdn-8o4\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632907341\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632907341\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bw7-nje-vtb\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632907342\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632907342\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qaf-z5b-da7\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632907342\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632907342\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"r6d-4kz-mch\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632908400\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632908400\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dar-afy-68w\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632908401\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632908401\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mzl-r2s-3d3\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632908402\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632908402\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"amk-yqc-2jg\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632909893\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632909893\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jvp-lye-omw\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632909895\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632909895\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mky-7xe-w96\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632909896\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632909896\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cpn-5xa-qvr\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632910740\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632910740\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gnd-qai-263\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632910741\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632910741\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"may-03m-8gc\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632910742\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632910742\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3wl-tn0-g3p\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632913811\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632913811\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kmc-6co-0xq\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632913813\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632913813\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cke-k5o-udo\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632913814\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632913814\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"g0n-ynp-vuj\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632918181\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632918181\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"unp-wrp-w6s\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632918181\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632918181\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ek7-jqe-hab\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632918182\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632918182\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cza-so4-7se\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632919352\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632919352\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lxy-qgf-rdw\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632919352\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632919352\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0h6-4bl-gyy\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632919353\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632919353\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"j8u-cox-47o\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632919567\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632919567\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wpj-eon-hhq\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632919568\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632919568\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gzy-dxq-y8c\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632919568\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632919568\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1vw-prp-da3\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632921868\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632921868\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cz9-r0k-77v\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632921868\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632921868\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"unn-qpz-hwg\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632921869\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632921869\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"70w-v06-tzj\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632922202\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632922202\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"a66-7u7-nad\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632922203\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632922203\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"d2p-7v7-avd\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632922203\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632922203\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"fgk-oxj-ftk\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632928250\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632928250\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"fpp-xqi-uu9\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632928250\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632928250\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"63r-qez-ybq\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632928251\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632928251\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gju-kit-iw5\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632933845\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632933845\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1m4-2co-rpk\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632933846\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632933846\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tir-l97-lp0\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632933847\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632933847\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ogv-c35-zyi\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632974965\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632974965\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mvz-r9p-fbq\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632974966\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632974966\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tbf-w69-aty\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632974966\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632974966\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xzl-grv-7gm\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632986086\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632986086\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jku-q85-vzi\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632986087\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632986087\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"awi-wik-sqv\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632986087\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632986087\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zxt-ben-do9\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632989757\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632989757\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ir8-h43-r0a\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632989758\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632989758\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"erz-srb-bn8\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632989758\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632989758\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"r75-jsq-jpu\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1632997311\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1632997311\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qq6-jjy-3tu\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1632997312\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1632997312\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tsp-qrn-n9x\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1632997312\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1632997312\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"4yc-4ge-ghb\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1633000142\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633000142\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bed-vic-suh\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1633000144\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1633000144\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"put-2jd-2ib\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1633000145\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633000145\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"y8f-naf-1cj\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1633003795\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633003795\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1pt-6xr-7ic\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1633003796\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1633003796\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rpo-lwd-fyr\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1633003797\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633003797\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"euk-m8d-p2d\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1633004068\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633004068\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nhm-rho-ez9\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1633004069\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1633004069\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zuo-60q-xbh\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1633004069\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633004069\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3db-tgu-ays\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1633006704\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633006704\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6ou-tsb-hlx\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1633006704\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1633006704\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ojr-mg7-oke\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1633006705\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633006705\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"znq-ano-djg\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1633007542\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633007542\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kmo-hwd-qq2\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1633007542\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1633007542\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"v8u-jjs-9vc\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1633007543\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633007543\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ld0-njn-zw1\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1633011104\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633011104\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"w8u-g2z-xy8\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1633011105\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1633011105\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mh9-5yo-qq2\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1633011105\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633011105\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vac-obe-n22\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1633011244\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633011244\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mpc-glp-h7w\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1633011246\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1633011246\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qwx-au5-zve\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1633011247\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633011247\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"saa-vzr-xsj\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1633015449\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1633015449\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pfl-vim-gje\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1633015451\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1633015451\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2uh-zo8-nb5\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1633015452\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1633015452\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"egl-poh-kzn\",\"attributes\":{\"version\":1,\"name\":\"Test-Ruby-Get_a_security_filter_returns_OK_response-1634150224\",\"query\":\"service:TestRubyGetasecurityfilterreturnsOKresponse1634150224\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gcz-3rz-y1w\",\"attributes\":{\"version\":1,\"name\":\"Test-Python-Get_a_security_filter_returns_OK_response-1635496812\",\"query\":\"service:TestPythonGetasecurityfilterreturnsOKresponse1635496812\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"csu-jez-ive\",\"attributes\":{\"version\":1,\"name\":\"Test-Go-Get_a_security_filter_returns_OK_response-1636410254\",\"query\":\"service:TestGoGetasecurityfilterreturnsOKresponse1636410254\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"izh-ced-qmc\",\"attributes\":{\"version\":1,\"name\":\"Test-Create_a_security_filter_returns_OK_response-1637063344\",\"query\":\"service:TestCreateasecurityfilterreturnsOKresponse1637063344\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rtp-twm-nur\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1637063346\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1637063346\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rin-h1e-8p1\",\"attributes\":{\"version\":2,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1637063347\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1637063347\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"thp-jp7-1is\",\"attributes\":{\"version\":1,\"name\":\"Test-Create_a_security_filter_returns_OK_response-1637070528\",\"query\":\"service:TestCreateasecurityfilterreturnsOKresponse1637070528\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jyk-ryj-r5v\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1637070533\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1637070533\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"5hn-7yt-vcx\",\"attributes\":{\"version\":2,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1637070535\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1637070535\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vjx-2ei-qzt\",\"attributes\":{\"version\":1,\"name\":\"Test-Create_a_security_filter_returns_OK_response-1637077967\",\"query\":\"service:TestCreateasecurityfilterreturnsOKresponse1637077967\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"trb-gqz-rw0\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1637077969\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1637077969\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"eam-ucg-ysc\",\"attributes\":{\"version\":2,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1637077970\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1637077970\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nd2-4uw-ryq\",\"attributes\":{\"version\":1,\"name\":\"Test-Create_a_security_filter_returns_OK_response-1637078478\",\"query\":\"service:TestCreateasecurityfilterreturnsOKresponse1637078478\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mdt-vr8-lpi\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1637078481\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1637078481\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0rq-mvi-cgj\",\"attributes\":{\"version\":2,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1637078482\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1637078482\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wn3-as7-moa\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1637089241\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1637089241\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tqw-xay-uyv\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1620751633\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1620751633\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"5zc-uho-3kh\",\"attributes\":{\"version\":2,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1620751634\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1620751634\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"auv-76t-trj\",\"attributes\":{\"version\":1,\"name\":\"Test-Create_a_security_filter_returns_OK_response-1637141213\",\"query\":\"service:TestCreateasecurityfilterreturnsOKresponse1637141213\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"d4t-p2p-tsw\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1637141215\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1637141215\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vpi-vz6-pnj\",\"attributes\":{\"version\":2,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1637141217\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1637141217\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"eaa-jqt-qhz\",\"attributes\":{\"version\":1,\"name\":\"Test-Ruby-Get_a_security_filter_returns_OK_response-1637834808\",\"query\":\"service:TestRubyGetasecurityfilterreturnsOKresponse1637834808\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rpt-0pp-r8j\",\"attributes\":{\"version\":1,\"name\":\"Test-Python-Get_a_security_filter_returns_OK_response-1638987050\",\"query\":\"service:TestPythonGetasecurityfilterreturnsOKresponse1638987050\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bkx-gg1-qlx\",\"attributes\":{\"version\":1,\"name\":\"Test-Python-Delete_a_security_filter_returns_No_Content_response-1638987054\",\"query\":\"service:TestPythonDeleteasecurityfilterreturnsNoContentresponse1638987054\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"z67-o7h-hik\",\"attributes\":{\"version\":1,\"name\":\"Test-Python-Update_a_security_filter_returns_OK_response-1638987055\",\"query\":\"service:TestPythonUpdateasecurityfilterreturnsOKresponse1638987055\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mlx-awu-wg9\",\"attributes\":{\"version\":1,\"name\":\"Test-Python-Create_a_security_filter_returns_OK_response-1638987057\",\"query\":\"service:TestPythonCreateasecurityfilterreturnsOKresponse1638987057\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ugq-7e0-rmg\",\"attributes\":{\"version\":1,\"name\":\"Test-Python-Delete_a_security_filter_returns_No_Content_response-1639574360\",\"query\":\"service:TestPythonDeleteasecurityfilterreturnsNoContentresponse1639574360\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"iue-buv-ynq\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1640111630\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1640111630\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qqm-ssh-ees\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1640112776\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1640112776\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lkt-tz2-dfx\",\"attributes\":{\"version\":1,\"name\":\"Test-Create_a_security_filter_returns_OK_response-1640112926\",\"query\":\"service:TestCreateasecurityfilterreturnsOKresponse1640112926\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6wk-p8j-nva\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1641598933\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1641598933\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"u3y-nyf-jrw\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1642578134\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1642578134\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ida-nab-cke\",\"attributes\":{\"version\":1,\"name\":\"Test-Example-Get_a_security_filter_returns_OK_response_1642733138\",\"query\":\"service:TestExampleGetasecurityfilterreturnsOKresponse1642733138\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nrq-ogf-weh\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1642756664\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1642756664\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wjw-gsa-lco\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Delete_a_security_filter_returns_No_Content_response-1642756664\",\"query\":\"service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1642756664\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"szy-pir-e5u\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1642756664\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1642756664\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2j4-1re-xff\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1642756664\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1642756664\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ume-uzk-eeu\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1643209589\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1643209589\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xxp-5gs-gkf\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1643950965\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1643950965\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tpm-eoz-ncm\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1644339764\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1644339764\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"j5u-vkc-zds\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1644382966\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1644382966\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zei-o6m-bn0\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1644656566\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1644656566\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hvw-9ht-lqu\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1644685366\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1644685366\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bi8-u6v-oui\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1645102964\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1645102964\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"stc-afy-nwg\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1645131764\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1645131764\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"h5u-icu-fqd\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1645534965\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1645534965\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jyg-usk-txn\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1645664565\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1645664565\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jvg-rer-he8\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1647162167\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1647162167\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"eww-jo3-dul\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1647651765\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1647651765\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"amj-hdv-cyu\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1647954164\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1647954164\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"fi7-mmy-9oq\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1648170165\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1648170165\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jsg-b2o-gjt\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1648270965\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1648270965\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hx1-hvs-cvn\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1648314166\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1648314166\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ny3-xpo-xmo\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1648501364\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1648501364\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"thz-5gg-uij\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1648501364\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1648501364\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"z2t-lzm-ikl\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1648587764\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1648587764\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xxn-g59-lwd\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1648818166\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1648818166\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ams-vtn-blj\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1648832565\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1648832565\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dep-t7r-bxj\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1648990964\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1648990964\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pqx-t4m-uid\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1649120564\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1649120564\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nb6-hbx-f1q\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1649192564\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1649192564\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gpj-cgz-shu\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1649667764\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1649667764\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"r2o-m8q-oie\",\"attributes\":{\"version\":1,\"name\":\"Test-Delete_a_security_filter_returns_No_Content_response-1649928918\",\"query\":\"service:TestDeleteasecurityfilterreturnsNoContentresponse1649928918\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"5by-7j6-f6z\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1650243764\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1650243764\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kkq-iwi-stm\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1650358964\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1650358964\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"no8-2ni-jmk\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1650531764\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1650531764\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6iq-gtb-clv\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1651410164\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1651410164\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"aen-nqt-iaf\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1651597364\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1651597364\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cy4-f9z-9r6\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1651654964\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1651654964\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tka-1gc-qxq\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Delete_a_security_filter_returns_No_Content_response-1651867320\",\"query\":\"service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651867320\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0su-elt-ys2\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Delete_a_security_filter_returns_No_Content_response-1651912576\",\"query\":\"service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651912576\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dj7-dy3-th8\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Delete_a_security_filter_returns_No_Content_response-1651915972\",\"query\":\"service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651915972\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wku-vcl-7u1\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Delete_a_security_filter_returns_No_Content_response-1651943585\",\"query\":\"service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651943585\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"m6u-vxw-81l\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1651997988\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1651997988\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"c1j-dxb-dtd\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Delete_a_security_filter_returns_No_Content_response-1651997988\",\"query\":\"service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1651997988\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tqh-1l5-dcq\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1651997989\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1651997989\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1am-wfl-xby\",\"attributes\":{\"version\":2,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1651997990\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1651997990\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7yz-qxi-5ja\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Delete_a_security_filter_returns_No_Content_response-1652008989\",\"query\":\"service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1652008989\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"opx-ymm-fi6\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1656001148\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1656001148\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"s25-hfg-20t\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1656001148\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1656001148\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pgs-w1q-zf7\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1656001150\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1656001150\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wja-o4k-gal\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1657253948\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1657253948\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3wu-ndq-gpz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1657469948\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1657469948\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"j2f-boq-0wj\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1657599548\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1657599548\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2ur-p7o-nrz\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1657887548\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1657887548\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"axt-ohp-g0w\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1658175548\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1658175548\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vld-ebm-edf\",\"attributes\":{\"version\":1,\"name\":\"tf-TestAccDatadogSecurityMonitoringFilter-local-1658516166\",\"query\":\"first query\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"first\",\"query\":\"does not really match much\"},{\"name\":\"second\",\"query\":\"neither does it\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jtg-flq-isg\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1658636349\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1658636349\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ris-e5s-nkj\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1658909949\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1658909949\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"r6l-kum-ywz\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1659140350\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1659140350\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hsr-zqx-uwu\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1660119548\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1660119548\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"iyq-8lx-1f0\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"e1j-wwy-1zw\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1665706600\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1665706600\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bu9-ba3-dbk\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1665706784\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1665706784\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"sep-kil-lff\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1673744048\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1673744048\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"prz-rgr-jww\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1673830447\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1673830447\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"s3g-ezo-ozi\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1674233647\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1674233647\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"r4c-t4t-g8y\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1674291247\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1674291247\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ihf-de0-y3a\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1674780847\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1674780847\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"8kp-cye-eo1\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1675400048\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1675400048\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"msy-qn2-8dc\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1675932846\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1675932846\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zlf-myf-qjr\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1675932848\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1675932848\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hig-2lk-4bn\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1675976048\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1675976048\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9tm-5xr-zof\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1675990446\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1675990446\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gph-9gj-gdd\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1675990448\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1675990448\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"c7f-v6a-dsw\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676033647\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676033647\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"sg6-zj1-i2b\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676048047\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676048047\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"b7h-hnp-tnc\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1676062448\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1676062448\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tdy-cxi-skk\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676134446\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676134446\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dtv-nj6-4tn\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676148847\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676148847\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rud-asz-fro\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1676177646\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1676177646\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jlx-x8q-gsr\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676206447\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676206447\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"yqi-svv-prx\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676264047\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676264047\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cx3-97i-zqn\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676321647\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676321647\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"k1i-gkg-2mb\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676350447\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676350447\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"iek-5vp-i2r\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676451247\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676451247\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ux6-mlu-yvi\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676465647\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676465647\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"iuw-68d-bpl\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676480047\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676480047\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kes-nbh-jch\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676508846\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676508846\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kzd-xhg-yds\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676537646\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676537646\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vjv-ncc-o2i\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676552047\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676552047\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1fo-ykg-bzy\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676566446\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676566446\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2l0-uyf-ovo\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1676595246\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1676595246\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wge-suo-rqb\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676624046\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676624046\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lph-ijs-mrj\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676667247\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676667247\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vhl-bod-cy0\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676710446\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676710446\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"atk-pml-3oz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676724847\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676724847\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2a3-fx6-ktz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676753647\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676753647\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"5mw-iha-ycy\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676782447\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676782447\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"itj-w8f-qnd\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676796846\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676796846\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7zg-pa0-yfg\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676825647\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676825647\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"isn-6i2-9k7\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676840047\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676840047\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zds-utx-lh6\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676854447\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676854447\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9p0-1jl-jgg\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676883247\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676883247\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"luu-w2x-8lx\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676897647\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676897647\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"fiq-mfj-s60\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1676969647\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1676969647\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"oit-qxj-yup\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1677185646\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1677185646\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wro-ify-zbc\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1677300847\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1677300847\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hag-hgh-jfa\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1677545647\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1677545647\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"krv-0bl-vtk\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1677560046\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1677560046\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xxo-uza-ll9\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1677588847\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1677588847\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tqb-qhd-i1y\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1677603246\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1677603246\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0mi-1lb-opa\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1677632047\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1677632047\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cs6-mtu-sia\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1677675246\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1677675246\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dse-wc8-6yd\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1677689648\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1677689648\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xlx-ki9-3fj\",\"attributes\":{\"version\":1,\"name\":\"Test-Create_a_security_filter_returns_OK_response-1677856599\",\"query\":\"service:TestCreateasecurityfilterreturnsOKresponse1677856599\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cdt-tgh-t1g\",\"attributes\":{\"version\":1,\"name\":\"Test-Delete_a_security_filter_returns_No_Content_response-1677856599\",\"query\":\"service:TestDeleteasecurityfilterreturnsNoContentresponse1677856599\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7jt-ch7-a4s\",\"attributes\":{\"version\":1,\"name\":\"Test-Get_a_security_filter_returns_OK_response-1677856602\",\"query\":\"service:TestGetasecurityfilterreturnsOKresponse1677856602\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gm7-14u-ajz\",\"attributes\":{\"version\":1,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1677856604\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1677856604\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tzq-7oz-mqq\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1678217608\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1678217608\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"8co-myg-4vb\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1678260806\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1678260806\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"k5d-oig-kiz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1678260809\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1678260809\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hxm-frk-9k5\",\"attributes\":{\"version\":1,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1678260812\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1678260812\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"aus-oea-vjw\",\"attributes\":{\"version\":1,\"name\":\"Example-Delete_a_security_filter_returns_No_Content_response_1678265641\",\"query\":\"service:ExampleDeleteasecurityfilterreturnsNoContentresponse1678265641\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"uuy-odt-b6q\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1678275206\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1678275206\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"79r-ch8-ocm\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1678275208\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1678275208\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"chm-suz-q0v\",\"attributes\":{\"version\":1,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1678275211\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1678275211\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pym-9hf-lxa\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Create_a_security_filter_returns_OK_response-1678275624\",\"query\":\"service:TestTypescriptCreateasecurityfilterreturnsOKresponse1678275624\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hxu-lds-0hv\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Delete_a_security_filter_returns_No_Content_response-1678275639\",\"query\":\"service:TestTypescriptDeleteasecurityfilterreturnsNoContentresponse1678275639\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rza-uqs-65i\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1678275700\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1678275700\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"s5z-0pl-2io\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Update_a_security_filter_returns_OK_response-1678275746\",\"query\":\"service:TestTypescriptUpdateasecurityfilterreturnsOKresponse1678275746\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tx3-lc2-yjy\",\"attributes\":{\"version\":1,\"name\":\"tf-TestAccDatadogSecurityMonitoringFilter-local-1678277734\",\"query\":\"first query - tf-TestAccDatadogSecurityMonitoringFilter-local-1678277734\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"first\",\"query\":\"does not really match much\"},{\"name\":\"second\",\"query\":\"neither does it\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9hv-3gd-w83\",\"attributes\":{\"version\":1,\"name\":\"Example-Delete_a_security_filter_returns_No_Content_response_1678280041\",\"query\":\"service:ExampleDeleteasecurityfilterreturnsNoContentresponse1678280041\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nx0-srg-px8\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1678491211\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1678491211\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ziy-jfk-ekn\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1678750408\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1678750408\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gvu-np4-k8l\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1679009608\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1679009608\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"j6x-dyn-txd\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1679038409\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1679038409\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ui6-wfd-am5\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1679182409\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1679182409\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"4ua-ji7-erv\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1679196808\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1679196808\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mjw-9yb-td8\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1679240011\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1679240011\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xo1-ook-e66\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1679598830\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1679598830\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"snr-g2h-4qs\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1679598832\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1679598832\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"aei-zn0-ono\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1679699629\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1679699629\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jlt-frr-a7b\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1679757229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1679757229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2ji-il7-mqj\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1679771627\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1679771627\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lns-hio-7bw\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1679872429\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1679872429\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"clq-hme-izu\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1679973228\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1679973228\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pmm-pdu-kac\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1679987628\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1679987628\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"4tf-rne-53k\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680102828\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680102828\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6q9-ddy-cfi\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680218028\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680218028\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vu0-9ka-u8p\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1680246830\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1680246830\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hss-u3d-vm1\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680290028\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680290028\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"oht-9rg-wdp\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1680290029\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1680290029\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"n2c-qkr-zxv\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1680304427\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1680304427\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"f7w-qso-7l3\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1680390827\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1680390827\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hbe-ar5-lyt\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680405229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680405229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nd0-hn6-zfz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680448429\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680448429\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hr6-prg-3uu\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680462829\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680462829\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cqj-7nc-vag\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680506029\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680506029\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ovw-glw-mui\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680520429\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680520429\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mvc-udb-rwa\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680549229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680549229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kfh-9hz-lxz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680678829\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680678829\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1x9-gfv-1dp\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1680707628\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1680707628\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ahk-vgq-xwy\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1680722030\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1680722030\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gmc-wa1-2hp\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1680736428\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1680736428\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vmu-aaw-brm\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681024430\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681024430\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"iy8-uu5-1ve\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681067629\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681067629\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"s89-bab-ppk\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681096428\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681096428\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nyy-jn2-lfv\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1681139627\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1681139627\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hfp-bsh-0nm\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1681139629\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1681139629\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bsg-kjb-iz7\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1681154028\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1681154028\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mjw-wec-n9f\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681154028\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681154028\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vco-qoa-gdr\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1681182827\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1681182827\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pge-0if-vqr\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681211629\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681211629\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gjn-odp-7uv\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1681211630\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1681211630\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"anw-vr6-idi\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1681283630\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1681283630\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"26k-omq-5lz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681355628\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681355628\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"8bn-jgf-mui\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1681370030\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1681370030\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"uiw-erd-iyx\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1681442027\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1681442027\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tx3-ggn-fbw\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681470829\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681470829\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lzi-zao-1zh\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681643629\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681643629\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"eze-qpg-r48\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1681744427\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1681744427\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xbk-qvw-tlm\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1681787628\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1681787628\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vc6-sna-tm2\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1681830830\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1681830830\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"t7l-t4s-rkx\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681917229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681917229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jrb-ucc-6xm\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681946029\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681946029\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"f1a-ryg-cin\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1681989229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1681989229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"fcr-yu0-aiw\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682003630\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682003630\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2nr-tq0-ms2\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682018029\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682018029\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"toa-o7k-iur\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682104428\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682104428\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ucw-amp-jc9\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682118828\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682118828\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ujc-mxl-poo\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682133229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682133229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xdo-xhm-mid\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1682133230\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1682133230\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gaz-ohu-jlw\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1682162030\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1682162030\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9uh-t0x-xxs\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1682363630\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1682363630\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"yv5-fb6-8uc\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682406829\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682406829\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"z1w-oae-hxf\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1682493230\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1682493230\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"j5s-ccw-ktj\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682536428\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682536428\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vsk-v3s-nyx\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682637229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682637229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mw3-par-lnv\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1682666030\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1682666030\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"icz-mey-zd3\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682680428\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682680428\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dud-xq7-ffb\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1682694828\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1682694828\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"sbj-h7n-uea\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1682709228\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1682709228\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"prw-w9d-ddq\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682738029\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682738029\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"5sh-qk5-vul\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1682795630\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1682795630\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ok9-ptw-dch\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682838829\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682838829\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rci-1eo-eq6\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1682853227\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1682853227\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nil-rry-xkm\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1682910830\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1682910830\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hxk-qqq-pbj\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1682997229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1682997229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"v1o-ehe-hwp\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1683011628\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1683011628\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lq4-snc-aph\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1683026029\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1683026029\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"x4m-bme-mqj\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1683040430\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1683040430\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ti8-vjc-knz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1683083628\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1683083628\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3yo-fvl-yl0\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1683112430\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1683112430\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qvg-kab-h7i\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1683141227\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1683141227\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"g6y-tdn-nvp\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1683141228\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1683141228\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"eil-zwv-g27\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1683213228\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1683213228\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hrh-g2j-smm\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1683227627\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1683227627\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"uuw-fqj-tue\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1683242027\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1683242027\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"inc-88z-omd\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1683285229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1683285229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hth-usu-myx\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1683342830\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1683342830\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cml-a98-aau\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1683414830\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1683414830\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"egm-chg-wyy\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1683472429\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1683472429\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"skm-ebc-auw\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1683544429\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1683544429\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"l1d-cry-olu\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1683602030\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1683602030\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vbj-kec-tud\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1683717230\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1683717230\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"8op-akw-rjx\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1683789229\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1683789229\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zsb-low-six\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1684949513\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1684949513\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hh7-wke-jrk\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1685050313\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1685050313\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"5nv-cao-iw0\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1685266312\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1685266312\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pmg-ubk-djp\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1685871113\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1685871113\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"c1f-fi0-9mb\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1685885513\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1685885513\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ptc-di8-zo1\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1686231113\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1686231113\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vp4-kza-0qr\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1687023112\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1687023112\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9vu-psj-hha\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1687123912\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1687123912\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"4m5-jb8-36q\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1687181511\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1687181511\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"p9g-ofd-ncr\",\"attributes\":{\"version\":1,\"name\":\"Test-Typescript-Get_a_security_filter_returns_OK_response-1687616375\",\"query\":\"service:TestTypescriptGetasecurityfilterreturnsOKresponse1687616375\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bua-kre-iyg\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1687872712\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1687872712\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tuj-6o1-nri\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1688463111\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1688463111\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dkc-iov-d4b\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1688794314\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1688794314\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vwc-mht-5if\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1688837512\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1688837512\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6pj-sa5-21y\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1688851913\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1688851913\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nxw-i0b-hfk\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1688866312\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1688866312\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"5dx-i4f-jwp\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1689010313\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1689010313\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qmc-j8t-ntr\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1689039107\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1689039107\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"byz-uin-57v\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1689067913\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1689067913\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"oqs-klc-j2b\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1689096713\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1689096713\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pj9-oze-9y8\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1689183111\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1689183111\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nhk-xkv-ddn\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1689370313\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1689370313\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"8lc-vpt-edq\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1689399113\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1689399113\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gzj-yyp-es3\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1689456711\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1689456711\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vck-vxm-oqv\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1689672713\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1689672713\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"sls-rgt-mr9\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1689903114\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1689903114\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6tl-hx1-pfa\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1690075912\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1690075912\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"sub-1ys-lp8\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1690162312\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1690162312\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"iub-pla-iur\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1690248713\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1690248713\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"djb-hnu-xiw\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1690320714\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1690320714\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wi0-ma4-mfj\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1690392712\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1690392712\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"c7u-75m-zrk\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1690551112\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1690551112\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gja-qml-dqk\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1690637513\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1690637513\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"abh-zbt-rwg\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1690925512\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1690925512\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"sm0-zqj-eae\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1690954313\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1690954313\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1pg-uxv-j3b\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1690968713\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1690968713\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"apu-hno-nbv\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1691127113\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1691127113\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"sq4-hna-rsi\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1691242311\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1691242311\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"aox-vgu-lt3\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1691256712\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1691256712\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"a3f-uhv-wcy\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1691328713\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1691328713\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wwd-tfg-uam\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1691602313\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1691602313\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3vm-pel-sbu\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1691717511\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1691717511\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"txp-sd0-oxw\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1691890312\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1691890312\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qmp-vjh-n2o\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1692595914\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1692595914\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lte-8s6-3yk\",\"attributes\":{\"version\":2,\"name\":\"tf-TestAccDatadogSecurityMonitoringFilter-local-1696425002\",\"query\":\"new query - tf-TestAccDatadogSecurityMonitoringFilter-local-1696425002\",\"is_enabled\":false,\"exclusion_filters\":[{\"name\":\"first\",\"query\":\"does not really match much\"},{\"name\":\"third\",\"query\":\"I am new\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xhw-nbk-c3i\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1696660266\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1696660266\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ywb-h6h-xr7\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1696919467\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1696919467\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"t83-npb-o1v\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1697553067\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1697553067\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ygd-51f-31r\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1697711468\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1697711468\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tyw-jdr-mp1\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1698013866\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1698013866\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ebx-wuw-x5i\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1698042667\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1698042667\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"74b-fsq-vsk\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1698085866\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1698085866\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bsn-etw-kii\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1698301867\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1698301867\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"iwd-kex-pfh\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1698330668\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1698330668\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"fnc-ffa-phi\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1698561066\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1698561066\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mq8-egs-yqh\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1698690667\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1698690667\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"z7y-xxa-fbj\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1699137068\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1699137068\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6yo-h3h-qz9\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1700029869\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1700029869\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"get-kes-mo5\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1700116266\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1700116266\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mua-u20-ept\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1700562668\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1700562668\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ach-ht2-czx\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1700908267\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1700908267\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"fy7-mt3-c3b\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1700937067\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1700937067\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"frz-dqd-18f\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1701138667\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1701138667\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pte-1k1-ibg\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1701268267\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1701268267\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"sot-5od-b3t\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1701325866\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1701325866\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gas-jyn-mob\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1701383468\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1701383468\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"eyh-v8n-cfk\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1701426667\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1701426667\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"iy2-kbf-pc6\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1701484267\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1701484267\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mos-ifu-ti5\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1702218668\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1702218668\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"r61-r0q-ea5\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1702506666\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1702506666\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"nja-mm9-ptg\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1702578666\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1702578666\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dln-clg-ryi\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1702764209\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1702764209\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"srw-3a0-abp\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1702764222\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1702764222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vla-nc8-qcv\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1702807409\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1702807409\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"txe-jyj-ws6\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1702850623\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1702850623\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"k0h-gvy-qqv\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1702908224\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1702908224\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ora-tby-gq1\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1702922609\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1702922609\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vkw-b0u-eph\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1703081023\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1703081023\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"o0w-nco-ucd\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1703153022\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1703153022\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kxh-vvs-6wr\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1703268222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1703268222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"48d-tke-2c6\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1703325822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1703325822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xwb-xhf-gfa\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1703383422\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1703383422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"uhu-fmd-yod\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1703412209\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1703412209\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"g8g-yk2-m7p\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1703513009\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1703513009\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gbo-bt0-c38\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1703757823\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1703757823\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"knp-63l-dzo\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1703786621\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1703786621\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hez-jda-rzj\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1703844222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1703844222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"foz-dui-wa3\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1703873022\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1703873022\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0ty-lci-n50\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1703887409\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1703887409\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"a4w-t40-mwr\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1704103421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1704103421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zym-ukg-zki\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1704189822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1704189822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xjo-wdg-czh\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1704333822\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1704333822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"owg-scd-ded\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1704477809\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1704477809\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xho-cdp-xrf\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1704535422\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1704535422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"yyj-csk-b1l\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1704737022\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1704737022\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mz2-z0q-ezg\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1704765822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1704765822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"b16-953-qvb\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1704823421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1704823421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9up-1lp-lux\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1704837822\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1704837822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cej-dmh-gfu\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1704924222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1704924222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ncx-c6y-rky\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1705039410\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1705039410\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mmg-ukf-wkd\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1705039421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1705039421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cmu-nap-lll\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1705111410\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1705111410\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ftu-euc-b3d\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1705226609\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1705226609\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pka-ken-bsv\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1705241022\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1705241022\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cmt-gv2-4fa\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1705327422\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1705327422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0az-wfv-sex\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1705356223\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1705356223\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"l00-d4n-zr1\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1705385009\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1705385009\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"heo-xlb-zru\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1705428220\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1705428220\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ojb-b3d-npr\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1705485810\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1705485810\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zdl-bd9-9hu\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1705485821\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1705485821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"39g-mre-cbe\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1705543421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1705543421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tjz-yv4-6ca\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1705557809\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1705557809\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"4hh-dld-ywm\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1705586621\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1705586621\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ygb-7vp-vyx\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1705658610\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1705658610\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"afw-fqs-px8\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1705802622\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1705802622\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"coo-w4k-uq9\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1705817023\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1705817023\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"d79-fjb-t8o\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706061823\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706061823\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lr6-z7t-0lw\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1706133809\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1706133809\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"k7t-6zr-wr2\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706162621\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706162621\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9lm-dcq-fs8\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706249021\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706249021\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"l1t-gka-mx2\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706335422\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706335422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tm8-aa3-3ou\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706349822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706349822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ht7-uhv-u7h\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706436222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706436222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gkd-let-iwl\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706465022\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706465022\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0sp-ehu-fzx\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706479422\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706479422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"i85-jaz-tm7\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706522623\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706522623\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9qu-wtl-a47\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706565822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706565822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wg2-z0w-bed\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706637822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706637822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"yxm-qoe-l0d\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1706666624\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1706666624\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gtg-hiz-ivy\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1706681010\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1706681010\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wxg-ok7-7qn\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1706695421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1706695421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"shd-ehz-700\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1706810620\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1706810620\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"n9h-tjq-zph\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1706882609\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1706882609\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jkc-4xt-igt\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1706897009\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1706897009\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"enn-go7-zw1\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1706925810\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1706925810\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"5pu-ms2-2j8\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1706969009\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1706969009\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gzb-i3o-zl2\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1706983421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1706983421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7pn-xhv-cbe\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1707084221\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1707084221\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rwy-j1h-q0t\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1707127422\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1707127422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7gc-t6b-t0f\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1707228221\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1707228221\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hem-upk-uvt\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1707257021\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1707257021\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cmh-lj8-z0b\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1707357822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1707357822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mwz-flc-g1l\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1707559422\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1707559422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wkc-0jp-uo7\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1707573821\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1707573821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ufb-kjg-4pv\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1707588209\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1707588209\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dmd-nu1-mpc\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1707588222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1707588222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"agb-jcx-joq\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1707631422\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1707631422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qep-mxn-4tt\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1707645821\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1707645821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7pr-wz9-7kz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1707660221\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1707660221\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kos-5y7-c6w\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1707717821\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1707717821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ucr-q6b-4ts\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1707746622\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1707746622\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"4ae-bkp-ezv\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1707833022\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1707833022\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"4qu-wfb-man\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1707890623\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1707890623\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rhz-3vq-fz2\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1708020221\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1708020221\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"3hw-w0x-llk\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1708106621\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1708106621\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1no-vsb-peb\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1708236209\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1708236209\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"oao-8e5-s9r\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1708236222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1708236222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"o3f-3q1-4bc\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1708250609\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1708250609\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pnf-man-zv3\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1708279409\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1708279409\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"yyk-svs-piq\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1708279421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1708279421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2ua-lfy-b4d\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1708337023\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1708337023\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tui-d2j-nou\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1708351423\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1708351423\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zgt-qmj-bcj\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1708466623\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1708466623\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"l2b-v5d-iqy\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1708509821\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1708509821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lix-f2e-dgx\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1708581823\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1708581823\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"i5x-9q6-3ju\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1708653810\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1708653810\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kei-yg8-5mw\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1708653822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1708653822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rge-g3u-zs8\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1708869809\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1708869809\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mk0-cr7-mxp\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1709013822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1709013822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lzp-fvr-2hr\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1709042622\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1709042622\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rid-ale-ar1\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1709071410\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1709071410\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7pj-gw5-udw\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1709143421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1709143421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"fqc-kzz-toh\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1709157821\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1709157821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bix-fpr-lgp\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1709201023\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1709201023\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lor-hy3-eb2\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1709215423\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1709215423\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pto-a2w-ogt\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1709229822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1709229822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ad1-xgo-dad\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1709330623\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1709330623\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"2rz-r1w-9bl\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1709345021\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1709345021\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"h4u-szg-oht\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1709517821\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1709517821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rej-1zw-wvj\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1709546622\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1709546622\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"5tl-yjw-bhq\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1709690623\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1709690623\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"a8h-lig-jw9\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1709719422\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1709719422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bes-v9b-gtz\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1709762621\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1709762621\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"erf-hyf-iq8\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1709906610\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1709906610\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"c3x-yba-g3e\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1709949822\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1709949822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"90e-tm1-rtj\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1710007424\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1710007424\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gik-bvu-yen\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1710021822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1710021822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"50c-dzf-jwv\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1710209023\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1710209023\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"f2l-xvy-aiu\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1710237822\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1710237822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bj5-pvi-hsp\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1710353021\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1710353021\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gzm-hf5-4vm\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1710381821\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1710381821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jfu-wp8-0az\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1710410609\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1710410609\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"yoo-baq-x4w\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1710468209\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1710468209\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vtt-xqs-gjn\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1710468223\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1710468223\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"7zh-8zy-puq\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1710612221\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1710612221\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"uq1-cur-bnq\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1710669821\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1710669821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"0la-jl3-qbd\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1710756222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1710756222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gsq-fdm-njp\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1710914622\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1710914622\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"fnz-p1d-nhk\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1710986622\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1710986622\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9kn-tua-a0u\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1711001009\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1711001009\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6ym-tqe-kly\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1711101823\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1711101823\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"guj-ixs-zlt\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711274621\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711274621\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jbw-dys-l27\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1711289009\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1711289009\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cxa-tnv-x92\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1711317810\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1711317810\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hrh-tgx-zsq\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1711332222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1711332222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ghj-cin-qi6\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711346620\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711346620\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kmf-oqn-ov0\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711375422\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711375422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"dxi-41y-vo6\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711418621\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711418621\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wdc-mwp-zzj\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1711447422\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1711447422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hwt-pmp-lue\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1711461824\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1711461824\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mtf-ujh-vgs\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1711476222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1711476222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"hji-pmh-hxp\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711505021\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711505021\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"kbq-rud-ecg\",\"attributes\":{\"version\":1,\"name\":\"Test-Create_a_security_filter_returns_OK_response-1711550926\",\"query\":\"service:TestCreateasecurityfilterreturnsOKresponse1711550926\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"c6y-ssi-mqs\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1711577009\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1711577009\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xth-iec-ptn\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711577021\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711577021\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"ebn-czh-ivw\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711605821\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711605821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"lzm-rje-2u5\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1711620209\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1711620209\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"feq-ust-jye\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1711749809\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1711749809\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"pmm-gxy-lkn\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1711793009\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1711793009\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wwr-34x-gb3\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1711793022\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1711793022\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"f8s-oe7-8l6\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711807421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711807421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"g2k-n7q-g9n\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711865021\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711865021\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"tfg-188-6pl\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1711879408\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1711879408\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"qgx-ato-3ou\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1711879422\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1711879422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xp1-hq8-wcm\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1711922621\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1711922621\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"y5t-m1z-e1s\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1712023421\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1712023421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"vyz-ah9-1xi\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1712052221\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1712052221\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wzl-q7g-31w\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1712196222\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1712196222\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"cvf-r1t-cqc\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1712210621\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1712210621\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"1vm-kwa-ru9\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1712253822\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1712253822\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"4pd-ed8-8h1\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1712311420\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1712311420\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"wkp-hxy-8gw\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1712325821\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1712325821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"8ky-psd-zvw\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1712340223\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1712340223\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"rsv-39o-sr3\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1712383421\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1712383421\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"aal-qrw-8yt\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1712455409\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1712455409\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"9qj-ibb-sok\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1712484224\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1712484224\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"oma-hkc-5mr\",\"attributes\":{\"version\":2,\"name\":\"Example-Update_a_security_filter_returns_OK_response_1712570609\",\"query\":\"service:ExampleUpdateasecurityfilterreturnsOKresponse1712570609\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"xnv-lel-wyh\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1712613821\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1712613821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"gdv-cgq-gxv\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1712642622\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1712642622\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"mdm-cnv-ybd\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1712757823\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1712757823\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"i0s-rjd-9jx\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1712786623\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1712786623\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"w4x-ljq-mjt\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1712887422\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1712887422\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"jsf-6g3-qul\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1712916221\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1712916221\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"siw-ycz-14p\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1712973821\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1712973821\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"20f-gnz-olv\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1713261823\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1713261823\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"6tz-avq-kix\",\"attributes\":{\"version\":2,\"name\":\"Test-Ruby-Update_a_security_filter_returns_OK_response-1714184527\",\"query\":\"service:TestRubyUpdateasecurityfilterreturnsOKresponse1714184527\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"bnb-doz-zkq\",\"attributes\":{\"version\":1,\"name\":\"Example-Create_a_security_filter_returns_OK_response_1714702913\",\"query\":\"service:ExampleCreateasecurityfilterreturnsOKresponse1714702913\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"},{\"id\":\"zec-x4o-cdk\",\"attributes\":{\"version\":1,\"name\":\"Example-Get_a_security_filter_returns_OK_response_1715134934\",\"query\":\"service:ExampleGetasecurityfilterreturnsOKresponse1715134934\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all security filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-21T15:35:06.001Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Get_all_suppression_rules_returns_OK_response_with_pagination-1769009706", + "enabled": true, + "name": "suppression 5a71acf7699e3a9e", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dgv-9mh-i77\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009706064,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_pagination-1769009706\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 5a71acf7699e3a9e\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009706064,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Get_all_suppression_rules_returns_OK_response_with_pagination-1769009706", + "enabled": true, + "name": "suppression2 5a71acf7699e3a9e", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"23j-s8c-mlt\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009706152,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_pagination-1769009706\",\"editable\":true,\"enabled\":true,\"name\":\"suppression2 5a71acf7699e3a9e\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009706152,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [ + [ + "page[number]", + "0" + ], + [ + "page[size]", + "1" + ], + [ + "query", + "id:dgv-9mh-i77 OR id:23j-s8c-mlt" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"dgv-9mh-i77\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009706064,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_pagination-1769009706\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 5a71acf7699e3a9e\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009706064,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}],\"meta\":{\"page\":{\"totalCount\":2,\"pageSize\":1,\"pageNumber\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/23j-s8c-mlt", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/dgv-9mh-i77", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all suppression rules returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-21T15:35:06.453Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Get_all_suppression_rules_returns_OK_response_with_sort_ascending-1769009706", + "enabled": true, + "name": "suppression 9acb44c7d1cc0bd2", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"x91-nfr-3ws\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009706525,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_sort_ascending-1769009706\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 9acb44c7d1cc0bd2\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009706525,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Get_all_suppression_rules_returns_OK_response_with_sort_ascending-1769009706", + "enabled": true, + "name": "suppression2 9acb44c7d1cc0bd2", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4ni-qbs-lxd\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009706684,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_sort_ascending-1769009706\",\"editable\":true,\"enabled\":true,\"name\":\"suppression2 9acb44c7d1cc0bd2\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009706684,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [ + [ + "query", + "id:x91-nfr-3ws OR id:4ni-qbs-lxd" + ], + [ + "sort", + "name" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"x91-nfr-3ws\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009706525,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_sort_ascending-1769009706\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 9acb44c7d1cc0bd2\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009706525,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}},{\"id\":\"4ni-qbs-lxd\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009706684,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_sort_ascending-1769009706\",\"editable\":true,\"enabled\":true,\"name\":\"suppression2 9acb44c7d1cc0bd2\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009706684,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}],\"meta\":{\"page\":{\"totalCount\":2,\"pageSize\":2,\"pageNumber\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/4ni-qbs-lxd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/x91-nfr-3ws", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all suppression rules returns \"OK\" response with sort ascending", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-21T15:35:07.003Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Get_all_suppression_rules_returns_OK_response_with_sort_descending-1769009707", + "enabled": true, + "name": "suppression 4668d111f32d9934", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"mru-avx-npf\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009707069,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_sort_descending-1769009707\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 4668d111f32d9934\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009707069,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Get_all_suppression_rules_returns_OK_response_with_sort_descending-1769009707", + "enabled": true, + "name": "suppression2 4668d111f32d9934", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"qjl-xxu-vlo\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009707163,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_sort_descending-1769009707\",\"editable\":true,\"enabled\":true,\"name\":\"suppression2 4668d111f32d9934\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009707163,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [ + [ + "query", + "id:mru-avx-npf OR id:qjl-xxu-vlo" + ], + [ + "sort", + "-name" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"qjl-xxu-vlo\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009707163,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_sort_descending-1769009707\",\"editable\":true,\"enabled\":true,\"name\":\"suppression2 4668d111f32d9934\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009707163,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}},{\"id\":\"mru-avx-npf\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009707069,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Get_all_suppression_rules_returns_OK_response_with_sort_descending-1769009707\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 4668d111f32d9934\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009707069,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}],\"meta\":{\"page\":{\"totalCount\":2,\"pageSize\":2,\"pageNumber\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/qjl-xxu-vlo", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/mru-avx-npf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all suppression rules returns \"OK\" response with sort descending", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:13.714Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "max_tickets_per_day": 10, + "project_id": "11111111-1111-1111-1111-111111111111", + "target": "jira" + }, + "enabled": true, + "name": "Test-Get_all_ticket_creation_rules_returns_Successfully_retrieved_the_list_of_ticket_creation_rules_respo-1781624473", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "ticket_creation_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/ticket_creation_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"399d69c3-6fcd-4538-b0cc-05e6db5aac38\",\"type\":\"ticket_creation_rules\",\"attributes\":{\"action\":{\"project_id\":\"11111111-1111-1111-1111-111111111111\",\"target\":\"jira\",\"max_tickets_per_day\":10},\"created_at\":1781624473944,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624473944,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_all_ticket_creation_rules_returns_Successfully_retrieved_the_list_of_ticket_creation_rules_respo-1781624473\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/findings/automation/ticket_creation_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"399d69c3-6fcd-4538-b0cc-05e6db5aac38\",\"type\":\"ticket_creation_rules\",\"attributes\":{\"action\":{\"project_id\":\"11111111-1111-1111-1111-111111111111\",\"target\":\"jira\",\"max_tickets_per_day\":10},\"created_at\":1781624473944,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624473944,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Get_all_ticket_creation_rules_returns_Successfully_retrieved_the_list_of_ticket_creation_rules_respo-1781624473\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}],\"meta\":{\"page\":{\"total_filtered_count\":1}},\"links\":{\"first\":\"/api/v2/security/findings/automation/ticket_creation_rules?page[size]=1000\\u0026page[number]=0\",\"last\":\"/api/v2/security/findings/automation/ticket_creation_rules?page[size]=1000\\u0026page[number]=0\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/399d69c3-6fcd-4538-b0cc-05e6db5aac38", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all ticket creation rules returns \"Successfully retrieved the list of ticket creation rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-14T18:22:17.027Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/siem/ioc-explorer/indicator", + "query": [ + [ + "indicator", + "this-indicator-does-not-exist.invalid" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"indicator not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get an indicator of compromise returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-05T12:58:33.985Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/siem/ioc-explorer/indicator", + "query": [ + [ + "include_triage_history", + "true" + ], + [ + "indicator", + "192.0.2.1" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b38eb8e1-61c8-470f-be58-f41531a7c134\",\"type\":\"get_indicator_response\",\"attributes\":{\"data\":{\"id\":\"192.0.2.1\",\"indicator\":\"192.0.2.1\",\"indicator_type\":\"IP Address\",\"score\":4,\"as_type\":\"hosting\",\"malicious_sources\":null,\"suspicious_sources\":[{\"name\":\"SOURCE1\"}],\"benign_sources\":null,\"categories\":[\"hosting_proxy\"],\"tags\":[],\"signal_matches\":1,\"log_matches\":7,\"signal_tier\":0,\"max_trust_score\":\"RAISE_SCORE\",\"m_sources\":\"NO_EFFECT\",\"m_persistence\":\"NO_EFFECT\",\"m_signal\":\"NO_EFFECT\",\"m_as_type\":\"NO_EFFECT\",\"triage_state\":\"reviewed\",\"triaged_at\":\"2026-06-03T18:55:42.108938Z\",\"triaged_by\":\"00000000-0000-0000-0000-000000000000\",\"log_sources\":[],\"services\":[],\"signal_severity\":[{\"severity\":\"info\",\"count\":1}],\"users\":{},\"critical_assets\":[],\"hosts\":[],\"additional_data\":{},\"triage_history\":[{\"triaged_at\":\"2026-06-03T18:55:42.108938Z\",\"triaged_by\":\"00000000-0000-0000-0000-000000000000\",\"triage_state\":\"reviewed\"},{\"triaged_at\":\"2026-06-03T13:32:14.735424Z\",\"triaged_by\":\"00000000-0000-0000-0000-000000000000\",\"triage_state\":\"reviewed\"}]}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get an indicator of compromise returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T18:44:02.157Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/critical_assets/rules/aaa-bbb-ccc-ddd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get critical assets affecting a specific rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T19:09:15.164Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Get_critical_assets_affecting_a_specific_rule_returns_OK_response-1767380955", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Get_critical_assets_affecting_a_specific_rule_returns_OK_response-1767380955\",\"createdAt\":1767380955311,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"kcp-m1q-tmu\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/critical_assets/rules/kcp-m1q-tmu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/kcp-m1q-tmu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get critical assets affecting a specific rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:01.149Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/signals/notification_rules/000-000-000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Notification rule with id '000-000-000' not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get details of a signal-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:01.602Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Get_details_of_a_signal_based_notification_rule_returns_Notification_rule_details_response-1738763161", + "selectors": { + "query": "env:test", + "rule_types": [ + "signal_correlation" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_signals" + }, + "targets": [ + "@email@email.com" + ] + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/signals/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"tcf-juk-5tr\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763162076,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763162076,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Get_details_of_a_signal_based_notification_rule_returns_Notification_rule_details_response-1738763161\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"signal_correlation\"],\"query\":\"env:test\",\"trigger_source\":\"security_signals\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":0,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/signals/notification_rules/tcf-juk-5tr", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"tcf-juk-5tr\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763162076,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763162076,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Get_details_of_a_signal_based_notification_rule_returns_Notification_rule_details_response-1738763161\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"signal_correlation\"],\"query\":\"env:test\",\"trigger_source\":\"security_signals\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":0,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/signals/notification_rules/tcf-juk-5tr", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get details of a signal-based notification rule returns \"Notification rule details.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:02.886Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/vulnerabilities/notification_rules/000-000-000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Notification rule with id '000-000-000' not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get details of a vulnerability notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:03.335Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Get_details_of_a_vulnerability_notification_rule_returns_Notification_rule_details_response-1738763163", + "selectors": { + "query": "env:test", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@email@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/vulnerabilities/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ryn-rs2-tef\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763163705,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763163705,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Get_details_of_a_vulnerability_notification_rule_returns_Notification_rule_details_response-1738763163\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"env:test\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":86400,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/vulnerabilities/notification_rules/ryn-rs2-tef", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ryn-rs2-tef\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763163705,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763163705,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Get_details_of_a_vulnerability_notification_rule_returns_Notification_rule_details_response-1738763163\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"env:test\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":86400,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/vulnerabilities/notification_rules/ryn-rs2-tef", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get details of a vulnerability notification rule returns \"Notification rule details.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-04T22:39:17.325Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Get_rule_version_history_returns_OK_response-1738708757", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Get_rule_version_history_returns_OK_response-1738708757\",\"createdAt\":1738708757817,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"gvq-qqd-jc7\"}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/rules/gvq-qqd-jc7/version_history", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"gvq-qqd-jc7\",\"type\":\"GetRuleVersionHistoryResponse\",\"attributes\":{\"count\":1,\"data\":{\"1\":{\"rule\":{\"name\":\"Test-Get_rule_version_history_returns_OK_response-1738708757\",\"createdAt\":1738708757817,\"isDefault\":false,\"isEnabled\":true,\"isDeleted\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"gvq-qqd-jc7\",\"metadata\":{\"entities\":null,\"sources\":null},\"creator\":{\"handle\":\"\",\"name\":\"\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}},\"changes\":[]}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/gvq-qqd-jc7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get rule version history returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-08-30T15:29:04.687Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/suppressions/rules/aaa-bbb-ccc-ddd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Threat detection rule not found: aaa-bbb-ccc-ddd)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get suppressions affecting a specific rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-08-30T11:40:50.061Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Get_suppressions_affecting_a_specific_rule_returns_OK_response-1756554050", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Get_suppressions_affecting_a_specific_rule_returns_OK_response-1756554050\",\"createdAt\":1756554050604,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"wrh-hm6-4zf\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":1445416,\"creator\":{\"handle\":\"frog@datadoghq.com\",\"name\":\"frog\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/configuration/suppressions/rules/wrh-hm6-4zf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/wrh-hm6-4zf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get suppressions affecting a specific rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-08-30T15:29:48.867Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "invalid_key": "invalid_value" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"invalid_argument(Invalid rule configuration)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get suppressions affecting future rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-08-30T15:30:01.229Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Get_suppressions_affecting_future_rule_returns_OK_response-1756567801", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get suppressions affecting future rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:04.585Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Get_the_list_of_signal_based_notification_rules_returns_The_list_of_notification_rules_response-1738763164", + "selectors": { + "query": "env:test", + "rule_types": [ + "signal_correlation" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_signals" + }, + "targets": [ + "@email@email.com" + ] + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/signals/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"btd-udo-vn7\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763164939,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763164939,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Get_the_list_of_signal_based_notification_rules_returns_The_list_of_notification_rules_response-1738763164\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"signal_correlation\"],\"query\":\"env:test\",\"trigger_source\":\"security_signals\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":0,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/signals/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"btd-udo-vn7\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763164939,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763164939,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Get_the_list_of_signal_based_notification_rules_returns_The_list_of_notification_rules_response-1738763164\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"signal_correlation\"],\"query\":\"env:test\",\"trigger_source\":\"security_signals\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":0,\"version\":1}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/signals/notification_rules/btd-udo-vn7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get the list of signal-based notification rules returns \"The list of notification rules.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:05.871Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Get_the_list_of_vulnerability_notification_rules_returns_The_list_of_notification_rules_response-1738763165", + "selectors": { + "query": "env:test", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@email@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/vulnerabilities/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"jl2-gq4-vr0\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763166229,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763166229,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Get_the_list_of_vulnerability_notification_rules_returns_The_list_of_notification_rules_response-1738763165\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"env:test\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":86400,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/vulnerabilities/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"jl2-gq4-vr0\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763166229,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763166229,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Get_the_list_of_vulnerability_notification_rules_returns_The_list_of_notification_rules_response-1738763165\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"env:test\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":86400,\"version\":1}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/vulnerabilities/notification_rules/jl2-gq4-vr0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get the list of vulnerability notification rules returns \"The list of notification rules.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-07-07T14:35:06.517Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/sboms", + "query": [ + [ + "page[number]", + "1" + ], + [ + "page[token]", + "SERVICE:unknown" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Unexpected internal error\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List assets SBOMs returns \"Bad request: Invalid pagination token.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-07-07T14:35:10.638Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/sboms", + "query": [ + [ + "filter[asset_type]", + "Service" + ], + [ + "filter[package_name]", + "pandas" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List assets SBOMs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2023-04-13T12:26:02.750Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/posture_management/findings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AgAAAYd59gjghzF52gAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFCRTRvV1lFeEo4SlFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-xuxu-eu-north-1\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"region:eu-north-1\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgliGE4AAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFCaUpXYWk4bGpBSUFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"backups.vault.us1.datadog.blue\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"team:compute\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"vault_cluster:vault-us1-datadog-blue\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"name:backups.vault.us1.datadog.blue\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgmf4YVgAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFCbllxT0M0S2RUeWdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"datadog-threat-intelligence\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"team:defense\",\"terraform.managed:true\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"name:datadog-threat-intelligence\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgoNVtoQAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFDSXBGUGJtR1gtVkFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220976000,\"mute\":{\"muted\":false},\"resource\":\"datadog-aws-config-xuxu\",\"resource_discovery_date\":1681220976000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"team:infrasec-dev\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"terraform.module:config\",\"cloud_provider:aws\",\"terraform.managed:true\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"name:datadog-aws-config-xuxu\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgyMG0cQAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFBRVRsYnBXeHhwWndBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"binaries.datadog.blue\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:infrasec-dev\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"name:binaries.datadog.blue\",\"terraform.managed:true\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgyuK5OwAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFBc1JwVkpYa1R3bGdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"binaries.datadog.blue\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:infrasec-dev\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"name:binaries.datadog.blue\",\"terraform.managed:true\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjg3R4HtQAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFBeVZYUnhKS3F2b1FBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-xuxu-eu-north-1\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"region:eu-north-1\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjg3z8MfwAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFBOVAyaFR2Yi1hUkFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-xuxu-eu-north-1\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"region:eu-north-1\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjg4TuiewAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFBaHhHNG9zS3ZVbGdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"backups.vault.us1.datadog.blue\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:compute\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"vault_cluster:vault-us1-datadog-blue\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"name:backups.vault.us1.datadog.blue\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjg6--LPAAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFESzVXLVhuTXJIcEFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220976000,\"mute\":{\"muted\":false},\"resource\":\"datadog-aws-config-xuxu\",\"resource_discovery_date\":1681220976000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:infrasec-dev\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"terraform.module:config\",\"cloud_provider:aws\",\"terraform.managed:true\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"name:datadog-aws-config-xuxu\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjg7-qmMQAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFEdXVFZGRkNmVJOHdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"datadog-threat-intelligence\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"team:defense\",\"terraform.managed:true\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"name:datadog-threat-intelligence\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjg8guq-wAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFENTQwVGUtS3BJV3dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"datadog-threat-intelligence\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"team:defense\",\"terraform.managed:true\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"name:datadog-threat-intelligence\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgJ7sI-wAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFEQy16NUdtVXFaWndBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"binaries.datadog.blue\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"team:infrasec-dev\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"name:binaries.datadog.blue\",\"terraform.managed:true\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgNygwVgAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFDblZ6bDhERml2RkFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"backups.vault.us1.datadog.blue\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:compute\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"vault_cluster:vault-us1-datadog-blue\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"name:backups.vault.us1.datadog.blue\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgOUk1IAAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFBa2xFVjhvTVNJMWdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"backups.vault.us1.datadog.blue\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:compute\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"vault_cluster:vault-us1-datadog-blue\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"name:backups.vault.us1.datadog.blue\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgPBdcPwAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFBaUFZdXY3N3d1UUFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-xuxu-eu-north-1\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"region:eu-north-1\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgQdwZFwAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFDdWNlWTlFc1BKZ2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220976000,\"mute\":{\"muted\":false},\"resource\":\"datadog-aws-config-xuxu\",\"resource_discovery_date\":1681220976000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:infrasec-dev\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"terraform.module:config\",\"cloud_provider:aws\",\"terraform.managed:true\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"name:datadog-aws-config-xuxu\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgQ_0d4QAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFDcW9lcE1FSG5nWVFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220976000,\"mute\":{\"muted\":false},\"resource\":\"datadog-aws-config-xuxu\",\"resource_discovery_date\":1681220976000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:infrasec-dev\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"terraform.module:config\",\"cloud_provider:aws\",\"terraform.managed:true\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"name:datadog-aws-config-xuxu\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgTuP6uwAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFCRWJ6QWtEcmdfM3dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"datadog-threat-intelligence\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"team:defense\",\"terraform.managed:true\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"name:datadog-threat-intelligence\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd59gjgctUmlgAAAAAAAAAYAAAAAEFZZDU5Z2pnQUFESUZpMDFHUFpTOXdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220975000,\"mute\":{\"muted\":false},\"resource\":\"binaries.datadog.blue\",\"resource_discovery_date\":1681220975000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:infrasec-dev\",\"aws_account:013910733512\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"name:binaries.datadog.blue\",\"terraform.managed:true\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCArLFvcgAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFEM3pIZEluRFZqWVFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-datadog-security-research-ap-southeast-1\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"region:ap-southeast-1\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAtUAnMwAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFBakZJclItaWdSX3dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"datadog-forwarder-for-guarddog-forwarderbucket-1ptvy5l49q6q4\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:eu-west-3:677301038893:stack/datadog-forwarder-for-guarddog/70fca8e0-ad0d-11ed-8f5c-068de8cf5e7e\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"region:eu-west-3\",\"aws_cloudformation_logical-id:forwarderbucket\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"aws_cloudformation_stack-name:datadog-forwarder-for-guarddog\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAt_HxPwAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFER2VZQm0tdVdrbmdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"acacascsaascascascascsacsa\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCA01wAzQAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFDbG1hc3Y3YUJ1YVFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-datadog-security-research-ap-northeast-2\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"region:ap-northeast-2\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCA2v8NygAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFCVjc5Tzg4Q3VPMEFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-cspm-remote-state-bucket\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"owner:cspm-pde-team\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCA98uNDQAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFEZ2trSEJ2TEVXU0FBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-datadog-security-research-ap-southeast-1\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"framework:iso-27001\",\"region:ap-southeast-1\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCACyy1DgAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFESVpINEtHWEpZU1FBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"datadog-forwarder-for-guarddog-forwarderbucket-1ptvy5l49q6q4\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:eu-west-3:677301038893:stack/datadog-forwarder-for-guarddog/70fca8e0-ad0d-11ed-8f5c-068de8cf5e7e\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"region:eu-west-3\",\"aws_cloudformation_logical-id:forwarderbucket\",\"control:1.5\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"aws_cloudformation_stack-name:datadog-forwarder-for-guarddog\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCADU252AAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFDN3Y0U1pXSExCS3dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"datadog-forwarder-for-guarddog-forwarderbucket-1ptvy5l49q6q4\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:eu-west-3:677301038893:stack/datadog-forwarder-for-guarddog/70fca8e0-ad0d-11ed-8f5c-068de8cf5e7e\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"region:eu-west-3\",\"aws_cloudformation_logical-id:forwarderbucket\",\"aws_account:677301038893\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"aws_cloudformation_stack-name:datadog-forwarder-for-guarddog\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCADd5_GgAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFCZ1pHZHZKcFozcVFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"acacascsaascascascascsacsa\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAD_-D5AAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFDMmVPRXB1eHVNSUFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"acacascsaascascascascsacsa\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_account:677301038893\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAHnYeaAAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFBMFc4M3hRRGNIYWdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-datadog-security-research-ap-northeast-2\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"region:ap-northeast-2\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAJhkrZQAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFBbE9la2VkeG5FVFFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-cspm-remote-state-bucket\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"owner:cspm-pde-team\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCATbga6AAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFCOFNTOWpnakZvaUFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-datadog-security-research-ap-southeast-1\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"region:ap-southeast-1\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAT9kfsgAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFEeEpzeDRMUXJ2MUFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-datadog-security-research-ap-southeast-1\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"region:ap-southeast-1\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_account:677301038893\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAaiYJmAAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFCcENodlFBX29IZlFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"datadog-forwarder-for-guarddog-forwarderbucket-1ptvy5l49q6q4\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:eu-west-3:677301038893:stack/datadog-forwarder-for-guarddog/70fca8e0-ad0d-11ed-8f5c-068de8cf5e7e\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"region:eu-west-3\",\"aws_cloudformation_logical-id:forwarderbucket\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"aws_cloudformation_stack-name:datadog-forwarder-for-guarddog\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAbNfTpAAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFBUlFYWXgteGxzTkFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"acacascsaascascascascsacsa\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAdGKsQwAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFEVkFGLWJXQm0yV3dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-datadog-security-research-ap-northeast-2\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"region:ap-northeast-2\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAdoOxDQAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFCZVhEdDNTTmh0NlFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-chaos-cloud-datadog-security-research-ap-northeast-2\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"region:ap-northeast-2\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_account:677301038893\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAfAW5QAAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFBNHhzWXZEUHBLMVFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-cspm-remote-state-bucket\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"owner:cspm-pde-team\",\"aws_account:677301038893\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-gCAfia-CgAAAAAAAAAYAAAAAEFZZDUtZ0NBQUFEb2hILW9zdFRhaGdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220222000,\"mute\":{\"muted\":false},\"resource\":\"dd-cspm-remote-state-bucket\",\"resource_discovery_date\":1681220222000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"owner:cspm-pde-team\",\"aws_account:677301038893\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"account:security-research\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIiqK51wAAAAAAAAAYAAAAAEFZZDUtaFFJQUFDSzVQZ1g3bUdSdFFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"hello-extension-dev-serverlessdeploymentbucket-2uwdqh8tv3ri\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"control:1.5\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIjMO-oQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFDcElnc1Q3OGJzeXdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"hello-extension-dev-serverlessdeploymentbucket-2uwdqh8tv3ri\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIj6p38gAAAAAAAAAYAAAAAEFZZDUtaFFJQUFCVXdtbFNldHBwbGdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"cron-dev-serverlessdeploymentbucket-jedop14wex9s\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"aws_cloudformation_stack-name:cron-dev\",\"framework:iso-27001\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/cron-dev/b2e752e0-a48c-11e6-b257-50a686e4bb82\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIlHCW-wAAAAAAAAAYAAAAAEFZZDUtaFFJQUFCYUFqWEt4anFuR2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"datadogv15-forwarderstack-lvu-forwarderzipsbucket-eprqhepew4x2\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_cloudformation_logical-id:forwarderzipsbucket\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_cloudformation_stack-name:datadogv15-forwarderstack-lvu0coklo6q4\",\"control:1.5\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-west-2:172597598159:stack/datadogv15-forwarderstack-lvu0coklo6q4/a90a2600-7e66-11ea-803f-0a14cc4f5b48\",\"control:A.9.2.3\",\"region:us-west-2\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIlP4s6AAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEWW82bTZNTlJaS2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"access-key-based-archive\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIlpGbxQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEb3h2aDZQazctNWdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"datadogv15-forwarderstack-lvu-forwarderzipsbucket-eprqhepew4x2\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_cloudformation_logical-id:forwarderzipsbucket\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_cloudformation_stack-name:datadogv15-forwarderstack-lvu0coklo6q4\",\"account:demo\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-west-2:172597598159:stack/datadogv15-forwarderstack-lvu0coklo6q4/a90a2600-7e66-11ea-803f-0a14cc4f5b48\",\"control:A.9.2.3\",\"region:us-west-2\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIl3sKNQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEb1lUY01CNHF2dXdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"submitscoretolms-dev-serverlessdeploymentbucket-32oyxdcv4vut\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-west-1:172597598159:stack/submitscoretolms-dev/c8703400-040b-11eb-a9a6-066f37a23789\",\"requirement:Security-Management-Process\",\"aws_cloudformation_stack-name:submitscoretolms-dev\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"control:1.5\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"region:us-west-1\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQImZwO_wAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBMUxsWEZENjNFOEFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"submitscoretolms-dev-serverlessdeploymentbucket-32oyxdcv4vut\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-west-1:172597598159:stack/submitscoretolms-dev/c8703400-040b-11eb-a9a6-066f37a23789\",\"requirement:Security-Management-Process\",\"aws_cloudformation_stack-name:submitscoretolms-dev\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"region:us-west-1\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIonYVFQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFER1NnX0ZDb0FsbkFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"dd-bucket-logs-demo\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:xuxu\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"terraform.managed:true\",\"control:1.5\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"name:dd-bucket-logs-demo\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIpBY7nQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFCODBRd2dLSmc4VndBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"datadogintegrationtest12345-forwa-forwarderbucket-vjqpo8odwcxd\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"aws_cloudformation_stack-name:datadogintegrationtest12345-forwarderstack-1ebhiflbjcts8\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/datadogintegrationtest12345-forwarderstack-1ebhiflbjcts8/17242b50-b127-11ec-ad08-0a3c8f91aaab\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_cloudformation_logical-id:forwarderbucket\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIpJcZ3wAAAAAAAAAYAAAAAEFZZDUtaFFJQUFCclkyVTNRN2RIOXdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"dd-bucket-logs-demo\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:xuxu\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"terraform.managed:true\",\"account:demo\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"name:dd-bucket-logs-demo\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIp6tIjQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBbEhCeDBBMkZQdFFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"aws-sam-cli-managed-default-samclisourcebucket-x90n87ru57hm\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"aws_cloudformation_stack-name:aws-sam-cli-managed-default\",\"managedstacksource:awssamcli\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"aws_cloudformation_logical-id:samclisourcebucket\",\"cloud_provider:aws\",\"account:demo\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:ca-central-1:172597598159:stack/aws-sam-cli-managed-default/f47ebf60-afda-11ea-a1a4-0aaf8b31ab7a\",\"region:ca-central-1\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIssWRRgAAAAAAAAAYAAAAAEFZZDUtaFFJQUFCbndzejNxd0prd2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"hello-csharp-dev-serverlessdeploymentbucket-k8w7ixh9zxm8\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"control:1.5\",\"account:demo\",\"requirement:Data-Protection\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/hello-csharp-dev/aad9a440-92a5-11e9-9be0-0a522351f81e\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"aws_cloudformation_stack-name:hello-csharp-dev\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQItOaWEAAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEaUwtRHJrNVVZRUFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"hello-csharp-dev-serverlessdeploymentbucket-k8w7ixh9zxm8\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"control:1.3\",\"requirement:Data-Protection\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/hello-csharp-dev/aad9a440-92a5-11e9-9be0-0a522351f81e\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"aws_cloudformation_stack-name:hello-csharp-dev\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIzKsjhwAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBbmZuNnVLdm4wZ3dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"danton-rodriguez\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIzswoUQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFDOW9SQ3FGOHFRYVFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"danton-rodriguez\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"account:demo\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQI2sSVjQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEeFcyNXZwTVE3cndBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"cron-dev-serverlessdeploymentbucket-jedop14wex9s\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"aws_cloudformation_stack-name:cron-dev\",\"framework:iso-27001\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/cron-dev/b2e752e0-a48c-11e6-b257-50a686e4bb82\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQI4BhKgwAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEVUZfcklQUHV1RFFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"access-key-based-archive\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQI6ZwOYQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFCYVYtWmRXd0xlM2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"hello-extension-dev-serverlessdeploymentbucket-2uwdqh8tv3ri\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQI7zBZOAAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBdjNTV2pEUHRPcEFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"datadogintegrationtest12345-forwa-forwarderbucket-vjqpo8odwcxd\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"aws_cloudformation_stack-name:datadogintegrationtest12345-forwarderstack-1ebhiflbjcts8\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/datadogintegrationtest12345-forwarderstack-1ebhiflbjcts8/17242b50-b127-11ec-ad08-0a3c8f91aaab\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_cloudformation_logical-id:forwarderbucket\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQI8sVmKAAAAAAAAAAYAAAAAEFZZDUtaFFJQUFDMEZrMjhubnNMNndBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"aws-sam-cli-managed-default-samclisourcebucket-x90n87ru57hm\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"aws_cloudformation_stack-name:aws-sam-cli-managed-default\",\"managedstacksource:awssamcli\",\"requirement:Compliance\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"aws_cloudformation_logical-id:samclisourcebucket\",\"cloud_provider:aws\",\"account:demo\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:ca-central-1:172597598159:stack/aws-sam-cli-managed-default/f47ebf60-afda-11ea-a1a4-0aaf8b31ab7a\",\"region:ca-central-1\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQI82nrhQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFCbWxLTTNXdlZSVUFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"datadogv15-forwarderstack-lvu-forwarderzipsbucket-eprqhepew4x2\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_cloudformation_logical-id:forwarderzipsbucket\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_cloudformation_stack-name:datadogv15-forwarderstack-lvu0coklo6q4\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-west-2:172597598159:stack/datadogv15-forwarderstack-lvu0coklo6q4/a90a2600-7e66-11ea-803f-0a14cc4f5b48\",\"control:A.9.2.3\",\"region:us-west-2\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQI9nRevwAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEeXhNWXBjUUREamdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"submitscoretolms-dev-serverlessdeploymentbucket-32oyxdcv4vut\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-west-1:172597598159:stack/submitscoretolms-dev/c8703400-040b-11eb-a9a6-066f37a23789\",\"requirement:Security-Management-Process\",\"aws_cloudformation_stack-name:submitscoretolms-dev\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"region:us-west-1\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIAW9pnwAAAAAAAAAYAAAAAEFZZDUtaFFJQUFDV3JtRlg0RkszM1FBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"dd-bucket-logs-demo\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"team:xuxu\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"terraform.managed:true\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"name:dd-bucket-logs-demo\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIEb7l0AAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEN1k4clh2cHlzZEFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"hello-csharp-dev-serverlessdeploymentbucket-k8w7ixh9zxm8\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"requirement:Data-Protection\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/hello-csharp-dev/aad9a440-92a5-11e9-9be0-0a522351f81e\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"aws_cloudformation_stack-name:hello-csharp-dev\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIK6R4EQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFERDdrbmVEZ2JPY2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"danton-rodriguez\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIMLEjaAAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBUGJHc2VJQzNKSGdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"cron-dev-serverlessdeploymentbucket-jedop14wex9s\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"aws_cloudformation_stack-name:cron-dev\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/cron-dev/b2e752e0-a48c-11e6-b257-50a686e4bb82\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"control:1.5\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIMtIoMgAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBc0R6U1phbndGZndBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"cron-dev-serverlessdeploymentbucket-jedop14wex9s\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"aws_cloudformation_stack-name:cron-dev\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/cron-dev/b2e752e0-a48c-11e6-b257-50a686e4bb82\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQINLYr_AAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBbWJhS3VoWkJqT3dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"hello-extension-dev-serverlessdeploymentbucket-2uwdqh8tv3ri\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQINgTYXgAAAAAAAAAYAAAAAEFZZDUtaFFJQUFDWGpSU3BSUzI2Y3dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"access-key-based-archive\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIOCXdKAAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBbzRENUdRU1o2N2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"access-key-based-archive\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"account:demo\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIPoQJIAAAAAAAAAAYAAAAAEFZZDUtaFFJQUFCdlUydWlrZ1VSYkFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"datadogv15-forwarderstack-lvu-forwarderzipsbucket-eprqhepew4x2\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_cloudformation_logical-id:forwarderzipsbucket\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_cloudformation_stack-name:datadogv15-forwarderstack-lvu0coklo6q4\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-west-2:172597598159:stack/datadogv15-forwarderstack-lvu0coklo6q4/a90a2600-7e66-11ea-803f-0a14cc4f5b48\",\"control:A.9.2.3\",\"region:us-west-2\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIQY58WgAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBdzVXWC1NMnhTcGdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"submitscoretolms-dev-serverlessdeploymentbucket-32oyxdcv4vut\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-west-1:172597598159:stack/submitscoretolms-dev/c8703400-040b-11eb-a9a6-066f37a23789\",\"aws_cloudformation_stack-name:submitscoretolms-dev\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"region:us-west-1\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIRRznEwAAAAAAAAAYAAAAAEFZZDUtaFFJQUFCdDNZTzdCY3VKUndBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"datadogintegrationtest12345-forwa-forwarderbucket-vjqpo8odwcxd\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"aws_cloudformation_stack-name:datadogintegrationtest12345-forwarderstack-1ebhiflbjcts8\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/datadogintegrationtest12345-forwarderstack-1ebhiflbjcts8/17242b50-b127-11ec-ad08-0a3c8f91aaab\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_cloudformation_logical-id:forwarderbucket\",\"control:1.5\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIRz3r3QAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEaDRsaURKRGNKMVFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"datadogintegrationtest12345-forwa-forwarderbucket-vjqpo8odwcxd\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"aws_cloudformation_stack-name:datadogintegrationtest12345-forwarderstack-1ebhiflbjcts8\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/datadogintegrationtest12345-forwarderstack-1ebhiflbjcts8/17242b50-b127-11ec-ad08-0a3c8f91aaab\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"aws_cloudformation_logical-id:forwarderbucket\",\"account:demo\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQISLH0AwAAAAAAAAAYAAAAAEFZZDUtaFFJQUFDRWlMT1MzRTlYc2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"aws-sam-cli-managed-default-samclisourcebucket-x90n87ru57hm\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"aws_cloudformation_stack-name:aws-sam-cli-managed-default\",\"managedstacksource:awssamcli\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"aws_cloudformation_logical-id:samclisourcebucket\",\"cloud_provider:aws\",\"control:1.5\",\"account:demo\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:ca-central-1:172597598159:stack/aws-sam-cli-managed-default/f47ebf60-afda-11ea-a1a4-0aaf8b31ab7a\",\"region:ca-central-1\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIStL4zQAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEMV9TN2FFME84Q1FBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"aws-sam-cli-managed-default-samclisourcebucket-x90n87ru57hm\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"aws_cloudformation_stack-name:aws-sam-cli-managed-default\",\"managedstacksource:awssamcli\",\"requirement:Compliance\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"aws_cloudformation_logical-id:samclisourcebucket\",\"cloud_provider:aws\",\"account:demo\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:ca-central-1:172597598159:stack/aws-sam-cli-managed-default/f47ebf60-afda-11ea-a1a4-0aaf8b31ab7a\",\"region:ca-central-1\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQITImHOgAAAAAAAAAYAAAAAEFZZDUtaFFJQUFBYU5FYzVIbjgtWEFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221183000,\"mute\":{\"muted\":false},\"resource\":\"dd-bucket-logs-demo\",\"resource_discovery_date\":1681221183000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:xuxu\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"terraform.managed:true\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"name:dd-bucket-logs-demo\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIXNkDawAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEYzdoUlRkZDA2ZEFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220486000,\"mute\":{\"muted\":false},\"resource\":\"hello-csharp-dev-serverlessdeploymentbucket-k8w7ixh9zxm8\",\"resource_discovery_date\":1681220486000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"stage:dev\",\"account:demo\",\"requirement:Data-Protection\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:us-east-1:172597598159:stack/hello-csharp-dev/aad9a440-92a5-11e9-9be0-0a522351f81e\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"aws_cloudformation_stack-name:hello-csharp-dev\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-hQIdr6VrAAAAAAAAAAYAAAAAEFZZDUtaFFJQUFEMDFqQUlYalY4amdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220349000,\"mute\":{\"muted\":false},\"resource\":\"danton-rodriguez\",\"resource_discovery_date\":1681220349000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"aws_account:172597598159\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"account:demo\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-suggFwGgQAAAAAAAAAYAAAAAEFZZDUtc3VnQUFCUHhOQXBGcGd5S1FBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681222221000,\"mute\":{\"muted\":false},\"resource\":\"richard-archive\",\"resource_discovery_date\":1681222221000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:cake\",\"cleanup_team:cake_solutions_eng\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"cleanup_subproduct:unknown\",\"region:us-east-1\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"testcloudcustodianremediation:2022-11-20\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"creator:richard.braamburg\",\"cleanup_department:technical_solutions\",\"user:richard.braamburg\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"cleanup_product:unknown\",\"control:1.3\",\"requirement:Data-Protection\",\"cleanup_resource_creator:richard.braamburg\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"cleanup_manager_email:christopher.anslow_datadoghq.com\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\",\"cleanup_to_be_deleted:false\"]}},{\"id\":\"AgAAAYd5-sugh-84FQAAAAAAAAAYAAAAAEFZZDUtc3VnQUFEenE0TEpKWHZNZFFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221637000,\"mute\":{\"muted\":false},\"resource\":\"lambda-artifacts-a4b4638b9a05cbc5\",\"resource_discovery_date\":1681221637000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"testcloudcustodianremediation:2022-11-20\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"region:eu-west-1\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugihA83wAAAAAAAAAYAAAAAEFZZDUtc3VnQUFBZXdxXzhsMDc1TlFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221637000,\"mute\":{\"muted\":false},\"resource\":\"lambda-artifacts-a4b4638b9a05cbc5\",\"resource_discovery_date\":1681221637000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"testcloudcustodianremediation:2022-11-20\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"region:eu-west-1\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugjpN_fwAAAAAAAAAYAAAAAEFZZDUtc3VnQUFEemwyRVptRDdIN2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221444000,\"mute\":{\"muted\":false},\"resource\":\"lambda-artifacts-e69cc543742f2d70\",\"resource_discovery_date\":1681221444000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"region:ap-northeast-2\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugkBgSAwAAAAAAAAAYAAAAAEFZZDUtc3VnQUFCTncxbGstODBOcVFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220416000,\"mute\":{\"muted\":false},\"resource\":\"k9-cloudwatch-data\",\"resource_discovery_date\":1681220416000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"cleanup_department:engineering\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"cleanup_subproduct:security_monitoring\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"user:bjorn.marschollek\",\"control:1.5\",\"cleanup_manager_email:alexandre.trufanow_datadoghq.com\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"cleanup_product:security_monitoring\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"cleanup_team:cloud-siem-backend\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cleanup_resource_creator:bjorn.marschollek\",\"control:CC6.3\",\"control:CC6.1\",\"cleanup_to_be_deleted:false\"]}},{\"id\":\"AgAAAYd5-sugkjkWzQAAAAAAAAAYAAAAAEFZZDUtc3VnQUFEWWZXVFQtTjlTU0FBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220416000,\"mute\":{\"muted\":false},\"resource\":\"k9-cloudwatch-data\",\"resource_discovery_date\":1681220416000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"cleanup_department:engineering\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"cleanup_subproduct:security_monitoring\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"user:bjorn.marschollek\",\"cleanup_manager_email:alexandre.trufanow_datadoghq.com\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"cleanup_product:security_monitoring\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"cleanup_team:cloud-siem-backend\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cleanup_resource_creator:bjorn.marschollek\",\"control:CC6.3\",\"control:CC6.1\",\"cleanup_to_be_deleted:false\"]}},{\"id\":\"AgAAAYd5-sugmxTVUgAAAAAAAAAYAAAAAEFZZDUtc3VnQUFDMVlJaFRkd0pRQkFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221637000,\"mute\":{\"muted\":false},\"resource\":\"amy-node-with-forwarder-serverlessdeploymentbuck-7abzwgnyw71n\",\"resource_discovery_date\":1681221637000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"aws_cloudformation_stack-name:amy-node-with-forwarder-dev\",\"framework:gdpr\",\"dd_preserve_stack:true\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"control:25.2\",\"requirement:Workforce-Security\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:sa-east-1:601427279990:stack/amy-node-with-forwarder-dev/0c7c1490-77f3-11ed-97ca-0693a9516c70\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"requirement:Least-Privileged-Access\",\"region:sa-east-1\",\"cloud_provider:aws\",\"stage:dev\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugnTXaHAAAAAAAAAAYAAAAAEFZZDUtc3VnQUFBMVVNZ0Q2S2F5aWdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221637000,\"mute\":{\"muted\":false},\"resource\":\"amy-node-with-forwarder-serverlessdeploymentbuck-7abzwgnyw71n\",\"resource_discovery_date\":1681221637000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"aws_cloudformation_stack-name:amy-node-with-forwarder-dev\",\"framework:gdpr\",\"dd_preserve_stack:true\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"control:25.2\",\"requirement:Workforce-Security\",\"aws_cloudformation_stack-id:arn:aws:cloudformation:sa-east-1:601427279990:stack/amy-node-with-forwarder-dev/0c7c1490-77f3-11ed-97ca-0693a9516c70\",\"security:compliance\",\"control:164.312-a-1\",\"aws_cloudformation_logical-id:serverlessdeploymentbucket\",\"requirement:Least-Privileged-Access\",\"region:sa-east-1\",\"cloud_provider:aws\",\"stage:dev\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugnZA74AAAAAAAAAAYAAAAAEFZZDUtc3VnQUFCbDFlNWRsS2R2TVFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221444000,\"mute\":{\"muted\":false},\"resource\":\"deukhee-krse\",\"resource_discovery_date\":1681221444000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"region:ap-northeast-2\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugn7FAqgAAAAAAAAAYAAAAAEFZZDUtc3VnQUFESjZEX01VVGZmYmdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221444000,\"mute\":{\"muted\":false},\"resource\":\"deukhee-krse\",\"resource_discovery_date\":1681221444000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"region:ap-northeast-2\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugoY1UnAAAAAAAAAAYAAAAAEFZZDUtc3VnQUFCemRsUHAwRmVuQUFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220654000,\"mute\":{\"muted\":false},\"resource\":\"logs.roboll.use.datadog.green\",\"resource_discovery_date\":1681220654000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:compute\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"kubernetescluster:roboll\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"testcloudcustodianremediation:2022-11-20\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"name:logs.roboll.use.datadog.green\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugo65ZZgAAAAAAAAAYAAAAAEFZZDUtc3VnQUFDOEFMYnp3VmQyTWdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220654000,\"mute\":{\"muted\":false},\"resource\":\"logs.roboll.use.datadog.green\",\"resource_discovery_date\":1681220654000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"team:compute\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"region:us-east-1\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"kubernetescluster:roboll\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"testcloudcustodianremediation:2022-11-20\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"name:logs.roboll.use.datadog.green\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugq5rXEgAAAAAAAAAYAAAAAEFZZDUtc3VnQUFBR1lSdllsaDN5aFFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220415000,\"mute\":{\"muted\":false},\"resource\":\"bryce-kahle-kops-state-store\",\"resource_discovery_date\":1681220415000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACL does not grant full bucket control to everyone\",\"id\":\"gkb-eoz-lut\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"cleanup_department:engineering\",\"cleanup_product:cloud_platform\",\"framework:gdpr\",\"cleanup_resource_creator:bryce.kahle\",\"control:164.308-a-3-i\",\"cleanup_team:ebpf_platform\",\"requirement:Compliance\",\"cleanup_manager_email:sunny.klair_datadoghq.com\",\"region:us-east-1\",\"aws_account:601427279990\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"source:s3\",\"requirement:Information-Access-Management\",\"control:164.308-a-4-ii-B\",\"framework:pci\",\"account:sandbox\",\"user:bryce.kahle\",\"control:164.308-a-4-ii-C\",\"control:25.2\",\"requirement:Workforce-Security\",\"control:1.1\",\"security:compliance\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"cleanup_subproduct:networks\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"framework:security-labs\",\"control:CC6.1\",\"cleanup_to_be_deleted:false\"]}},{\"id\":\"AgAAAYd5-sugsLdrZgAAAAAAAAAYAAAAAEFZZDUtc3VnQUFDU282WjZtMTRic1FBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220416000,\"mute\":{\"muted\":false},\"resource\":\"pivotal-cloud-foundry-pcfbase-8-pcfdropletsbucket-1ke67cg579bwg\",\"resource_discovery_date\":1681220416000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"region:ap-northeast-1\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugsthwMAAAAAAAAAAYAAAAAEFZZDUtc3VnQUFBRHhiMlJtcUJ1a1FBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220416000,\"mute\":{\"muted\":false},\"resource\":\"pivotal-cloud-foundry-pcfbase-8-pcfdropletsbucket-1ke67cg579bwg\",\"resource_discovery_date\":1681220416000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"region:ap-northeast-1\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"]}},{\"id\":\"AgAAAYd5-sugsyymjwAAAAAAAAAYAAAAAEFZZDUtc3VnQUFENGdOcTJGQlFPNFFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220654000,\"mute\":{\"muted\":false},\"resource\":\"python38-forwardercache\",\"resource_discovery_date\":1681220654000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"user:mandy.kopelke\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"cleanup_subproduct:unknown\",\"region:us-east-1\",\"aws_account:601427279990\",\"cleanup_team:cake_t2\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"creayor:mandy\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"cleanup_manager_email:jan.lazaro_datadoghq.com\",\"control:164.312-a-1\",\"cleanup_department:technical_solutions\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"cleanup_product:unknown\",\"cleanup_resource_creator:mandy.kopelke\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\",\"cleanup_to_be_deleted:false\"]}},{\"id\":\"AgAAAYd5-sugtU2rWQAAAAAAAAAYAAAAAEFZZDUtc3VnQUFBWjBJbjNZU2ZQWUFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220654000,\"mute\":{\"muted\":false},\"resource\":\"python38-forwardercache\",\"resource_discovery_date\":1681220654000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"user:mandy.kopelke\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"cleanup_subproduct:unknown\",\"region:us-east-1\",\"aws_account:601427279990\",\"cleanup_team:cake_t2\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"creayor:mandy\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"cleanup_manager_email:jan.lazaro_datadoghq.com\",\"control:164.312-a-1\",\"cleanup_department:technical_solutions\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"cleanup_product:unknown\",\"cleanup_resource_creator:mandy.kopelke\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\",\"cleanup_to_be_deleted:false\"]}},{\"id\":\"AgAAAYd5-suguWmmQwAAAAAAAAAYAAAAAEFZZDUtc3VnQUFBSlBZUVZFRWlRbWdBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221637000,\"mute\":{\"muted\":false},\"resource\":\"elasticbeanstalk-ap-northeast-1-601427279990\",\"resource_discovery_date\":1681221637000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket ACLs are configured to block public write actions\",\"id\":\"s6r-rlr-gk1\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"cleanup_resource_creator:yong.zuo\",\"region:ap-northeast-1\",\"cleanup_team:cake_solutions_eng\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"cleanup_manager_email:nobumoto.magome_datadoghq.com\",\"requirement:Compliance\",\"cleanup_subproduct:unknown\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"user:yong.zuo\",\"framework:pci\",\"account:sandbox\",\"testcloudcustodianremediation:2022-11-20\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"cleanup_department:technical_solutions\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"cleanup_product:unknown\",\"control:1.5\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\",\"cleanup_to_be_deleted:false\"]}},{\"id\":\"AgAAAYd5-sugu4qrDQAAAAAAAAAYAAAAAEFZZDUtc3VnQUFCcDFOeHZjejFtS2dBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681221637000,\"mute\":{\"muted\":false},\"resource\":\"elasticbeanstalk-ap-northeast-1-601427279990\",\"resource_discovery_date\":1681221637000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket contents are not publicly exposed via bucket policy\",\"id\":\"8tr-9cl-spc\"},\"status\":\"critical\",\"tags\":[\"requirement:AWS\",\"scored:true\",\"cleanup_resource_creator:yong.zuo\",\"region:ap-northeast-1\",\"cleanup_team:cake_solutions_eng\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"cleanup_manager_email:nobumoto.magome_datadoghq.com\",\"requirement:Compliance\",\"cleanup_subproduct:unknown\",\"aws_account:601427279990\",\"requirement:Security-Management-Process\",\"framework:essential-cloud-security-controls\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"user:yong.zuo\",\"framework:pci\",\"account:sandbox\",\"testcloudcustodianremediation:2022-11-20\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"cleanup_department:technical_solutions\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"cleanup_product:unknown\",\"control:1.3\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\",\"cleanup_to_be_deleted:false\"]}},{\"id\":\"AgAAAYd5-sugvVI1EQAAAAAAAAAYAAAAAEFZZDUtc3VnQUFEaVZzeE05R0Q4dEFBQQAAACQAAAAAMDE4NzdhMDEtMDRiYS00NTZlLWFmMzMtNTIxNmNkNjVlNDMz\",\"type\":\"finding\",\"attributes\":{\"evaluation\":\"pass\",\"evaluation_changed_at\":1681220415000,\"mute\":{\"muted\":false},\"resource\":\"kevin-tokyo\",\"resource_discovery_date\":1681220415000,\"resource_type\":\"aws_s3_bucket\",\"rule\":{\"name\":\"S3 bucket is not publicly writeable via bucket policy\",\"id\":\"ocj-ona-5qb\"},\"status\":\"critical\",\"tags\":[\"scored:true\",\"region:ap-northeast-1\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"cleanup_subproduct:unknown\",\"cleanup_resource_creator:kevin.huang\",\"cleanup_manager_email:ben.gobel_datadoghq.com\",\"aws_account:601427279990\",\"cleanup_team:cake_t2\",\"requirement:Security-Management-Process\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"source:s3\",\"framework:pci\",\"account:sandbox\",\"testcloudcustodianremediation:2022-11-20\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"control:164.312-a-1\",\"cleanup_department:technical_solutions\",\"requirement:Least-Privileged-Access\",\"cloud_provider:aws\",\"cleanup_product:unknown\",\"requirement:Data-Protection\",\"control:7.2.1\",\"control:7.2.2\",\"requirement:Security-of-Processing\",\"control:A.18.1.3\",\"framework:soc-2\",\"scope:s3\",\"user:kevin.huang\",\"control:A.9.2.3\",\"control:32.1a\",\"requirement:Logical-and-Physical-Access-Control\",\"cloudcustodianviolatedpolicy:gather-s3-buckets-older-than-one-year\",\"control:CC6.3\",\"control:CC6.1\",\"cleanup_to_be_deleted:false\"]}}],\"meta\":{\"page\":{\"total_filtered_count\":445536,\"cursor\":\"eyJhZnRlciI6IkFnQUFBWWQ1LXN1Z3ZWSTFFUUFBQUFBQUFBQVlBQUFBQUVGWlpEVXRjM1ZuUVVGRWFWWnplRTA1UjBRNGRFRkJRUUFBQUNRQUFBQUFNREU0TnpkaE1ERXRNRFJpWVMwME5UWmxMV0ZtTXpNdE5USXhObU5rTmpWbE5ETXoiLCJ2YWx1ZXMiOlsiY3JpdGljYWwiXX0=\"},\"snapshot_timestamp\":1681388763514}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List findings returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-05-20T12:11:24.321Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/posture_management/findings", + "query": [ + [ + "detailed_findings", + "true" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"total_filtered_count\":0},\"snapshot_timestamp\":1747743085077}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List findings returns \"OK\" response with details", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-10-21T20:05:58.636Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/posture_management/findings", + "query": [ + [ + "filter[vulnerability_type]", + "attack_path" + ], + [ + "filter[vulnerability_type]", + "misconfiguration" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"total_filtered_count\":0},\"snapshot_timestamp\":1729541158755}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List findings with detection_type query param returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-11-11T21:36:57.169Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jobDefinition": { + "cases": [ + { + "condition": "a > 1", + "name": "Condition 1", + "notifications": [], + "status": "info" + } + ], + "from": 1730387522611, + "index": "main", + "message": "A large number of failed login attempts.", + "name": "Excessive number of failed attempts.", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "query": "source:non_existing_src_weekend" + } + ], + "tags": [], + "to": 1730387532611, + "type": "log_detection" + } + }, + "type": "historicalDetectionsJobCreate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/siem-historical-detections/jobs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c3564eed-ff70-43e1-ab6f-593de95bd21f\",\"type\":\"historicalDetectionsJob\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/siem-historical-detections/jobs", + "query": [ + [ + "filter[query]", + "id:c3564eed-ff70-43e1-ab6f-593de95bd21f" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"c3564eed-ff70-43e1-ab6f-593de95bd21f\",\"type\":\"historicalDetectionsJob\",\"attributes\":{\"createdAt\":\"2025-11-11 21:36:57.303304+00\",\"createdByHandle\":\"frog@datadoghq.com\",\"createdByName\":\"frog\",\"jobDefinition\":{\"from\":1730387522611,\"to\":1730387532611,\"index\":\"main\",\"name\":\"Excessive number of failed attempts.\",\"cases\":[{\"name\":\"Condition 1\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 1\"}],\"queries\":[{\"query\":\"source:non_existing_src_weekend\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"message\":\"A large number of failed login attempts.\",\"tags\":[],\"type\":\"log_detection\"},\"jobName\":\"Excessive number of failed attempts.\",\"jobStatus\":\"pending\",\"modifiedAt\":\"2025-11-11 21:36:57.303304+00\",\"signalOutput\":false}}],\"meta\":{\"totalCount\":1}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List historical jobs returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-14T18:22:40.711Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/siem/ioc-explorer", + "query": [ + [ + "query", + "invalid:::query" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid query: invalid query: syntax error: no viable alternative at input 'invalid::' at line 1 and char position 8\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List indicators of compromise returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-05T12:32:21.136Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/siem/ioc-explorer", + "query": [ + [ + "limit", + "1" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"22b62903-4053-42ed-9448-c750da2ecd81\",\"type\":\"ioc_explorer_response\",\"attributes\":{\"data\":[{\"id\":\"192.0.2.1\",\"indicator\":\"192.0.2.1\",\"indicator_type\":\"IP Address\",\"score\":4,\"as_type\":\"hosting\",\"malicious_sources\":null,\"suspicious_sources\":[{\"name\":\"SOURCE1\"}],\"benign_sources\":null,\"categories\":[\"hosting_proxy\"],\"tags\":[],\"signal_matches\":1,\"log_matches\":7,\"signal_tier\":0,\"max_trust_score\":\"RAISE_SCORE\",\"m_sources\":\"NO_EFFECT\",\"m_persistence\":\"NO_EFFECT\",\"m_signal\":\"NO_EFFECT\",\"m_as_type\":\"NO_EFFECT\",\"triage_state\":\"reviewed\",\"triaged_at\":\"2026-06-03T18:55:42.108938Z\",\"triaged_by\":\"00000000-0000-0000-0000-000000000000\"}],\"metadata\":{\"count\":585},\"paging\":{\"offset\":1}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List indicators of compromise returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-05-06T08:24:43.362Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cloud_security_management/resource_filters", + "query": [ + [ + "account_id", + "123456789" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"Field 'account_id' is invalid: account_id provided without specifying the cloud provider\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List resource filters returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-05-06T10:03:18.837Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cloud_security_management/resource_filters", + "query": [ + [ + "account_id", + "123456789" + ], + [ + "cloud_provider", + "aws" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"436195a0-5491-42a8-ac40-e0c0b61879bd\",\"type\":\"csm_resource_filter\",\"attributes\":{\"cloud_provider\":{}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List resource filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-11-22T13:52:05.136Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"def-000-vc2\",\"version\":7,\"name\":\"'Blob public access' should be disabled for storage accounts with blob containers\",\"createdAt\":1681395797603,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722014735961,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":false,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_storage_account\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_storage_account\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"pci-dss\",\"version\":\"4.0\",\"requirement\":\"Apply-Secure-Configurations-to-All-System-Components\",\"control\":\"2.2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"hipaa\",\"version\":\"1\",\"requirement\":\"Workforce-Security\",\"control\":\"164.308-a-3-i\",\"message\":\"\",\"is_default\":true},{\"framework\":\"hipaa\",\"version\":\"1\",\"requirement\":\"Security-Management-Process\",\"control\":\"164.308-a-1-ii-B\",\"message\":\"\",\"is_default\":true},{\"framework\":\"hipaa\",\"version\":\"1\",\"requirement\":\"Access-Control\",\"control\":\"164.312-a-1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"gdpr\",\"version\":\"1\",\"requirement\":\"Data-Protection\",\"control\":\"25.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"gdpr\",\"version\":\"1\",\"requirement\":\"Security-of-Processing\",\"control\":\"32.1a\",\"message\":\"\",\"is_default\":true},{\"framework\":\"dcsb-m\",\"version\":\"1\",\"requirement\":\"Azure\",\"control\":\"2.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"dcsb-m\",\"version\":\"1\",\"requirement\":\"Azure\",\"control\":\"2.8\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Compliance\",\"control\":\"A.18.1.3\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Access-Control\",\"control\":\"A.9.2.3\",\"message\":\"\",\"is_default\":true},{\"framework\":\"fedramp-high\",\"version\":\"5\",\"requirement\":\"Configuration-Management\",\"control\":\"CM-6\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Logical-and-Physical-Access-Control\",\"control\":\"CC6.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Logical-and-Physical-Access-Control\",\"control\":\"CC6.3\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-53\",\"version\":\"5\",\"requirement\":\"Configuration-Management\",\"control\":\"CM-6\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-csf\",\"version\":\"1.1\",\"requirement\":\"Information-Protection\",\"control\":\"PR.IP-1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Storage-Accounts\",\"control\":\"3.7\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\neval(storage_account) = \\\"pass\\\" if {\\n\\tstorage_account.allow_blob_public_access == false\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_storage_account\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":false}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"## Description\\n\\nDisallowing public access for a storage account overrides the public access settings for individual containers in that storage account.\\n\\n### Default Value\\n\\nBy default, `Public access level` is set to `Private (no anonymous access)` for blob containers and `AllowBlobPublicAccess` is set to `Null` (allow in effect) for storage accounts.\\n\\n## Rationale\\n\\nIt is recommended that you avoid providing anonymous access to blob containers unless necessary. A Shared Access Signature (SAS) token or Azure AD RBAC should be used for providing controlled and timed access to blob containers. If no anonymous access is needed on any container in the storage account, it\\u2019s recommended to set `allowBlobPublicAccess` to false at the account level, which prevents any container from accepting anonymous access in the future.\\n\\n### Impact\\n\\nAccess must be managed using shared access signatures or with Azure AD RBAC.\\n\\n## Remediation\\n\\n### From the console\\n\\n**Note**: You must [create a SAS token][1] for your blob containers before completing the following remediation steps.\\n\\n1. Go to **Storage Accounts**.\\n2. For each storage account, go to **Configuration** in the side panel.\\n3. Set **Allow Blob public access** to **Disabled**.\\n\\n### From the command line\\n\\nFirst, follow [Microsoft documentation][1] and create SAS tokens for\\nyour blob containers. Then, follow the steps below:\\n\\n1. Set **Allow Blob Public Access** to `false` on the storage account.\\n\\n ```\\n az storage account update --name --resource-group --allow-blob-public-access false\\n ```\\n\\n## References\\n\\n1. [https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview][1]\\n2. [https://docs.microsoft.com/en-us/azure/storage/blobs/anonymous-read-access-prevent][2]\\n3. [https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-governance-strategy#gs-2-define-and-implement-enterprise-segmentationseparation-of-duties-strategy][3]\\n4. [https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-network-security#ns-2-secure-cloud-services-with-network-controls][4]\\n5. [https://docs.microsoft.com/en-us/azure/storage/blobs/anonymous-read-access-configure][5]\\n6. [https://docs.microsoft.com/en-us/azure/storage/blobs/assign-azure-role-data-access][6]\\n\\n[1]: https://learn.microsoft.com/en-us/azure/cognitive-services/translator/document-translation/create-sas-tokens?tabs=Containers\\n[2]: https://docs.microsoft.com/en-us/azure/storage/blobs/anonymous-read-access-prevent\\n[3]: https://docs.microsoft.com/en-us/security/benchmark/azure-security-controls-v3-governance-strategy#gs-2-define-and-implement-enterprise-segmentationseparation-of-duties-strategy\\n[4]: https://docs.microsoft.com/en-us/security/benchmark/azure/security-controls-v3-network-security#ns-2-secure-cloud-services-with-network-controls\\n[5]: https://docs.microsoft.com/en-us/azure/storage/blobs/anonymous-read-access-configure\\n[6]: https://docs.microsoft.com/en-us/azure/storage/blobs/assign-azure-role-data-access\\n\",\"tags\":[\"scored:true\",\"cloud_provider:azure\",\"framework:gdpr\",\"control:164.308-a-3-i\",\"requirement:Compliance\",\"level:1\",\"requirement:Storage-Accounts\",\"control:2.2.1\",\"framework:nist-csf\",\"requirement:Security-Management-Process\",\"framework:dcsb-m\",\"framework:iso-27001\",\"framework:hipaa\",\"requirement:Access-Control\",\"control:164.308-a-1-ii-B\",\"requirement:Information-Protection\",\"scope:azure.storage\",\"control:25.2\",\"requirement:Workforce-Security\",\"security:compliance\",\"requirement:Configuration-Management\",\"control:164.312-a-1\",\"requirement:Azure\",\"requirement:Apply-Secure-Configurations-to-All-System-Components\",\"control:2.8\",\"control:3.7\",\"framework:cis-azure\",\"control:2.2\",\"framework:pci-dss\",\"requirement:Data-Protection\",\"framework:nist-800-53\",\"source:azure.storage\",\"requirement:Security-of-Processing\",\"control:CM-6\",\"control:A.18.1.3\",\"framework:soc-2\",\"control:A.9.2.3\",\"control:PR.IP-1\",\"control:32.1a\",\"framework:fedramp-high\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC6.3\",\"control:CC6.1\"],\"defaultTags\":[\"requirement:Compliance\",\"cloud_provider:azure\",\"control:32.1a\",\"framework:nist-800-53\",\"scope:azure.storage\",\"control:164.312-a-1\",\"scored:true\",\"requirement:Configuration-Management\",\"control:2.2.1\",\"requirement:Access-Control\",\"framework:iso-27001\",\"control:164.308-a-3-i\",\"requirement:Information-Protection\",\"level:1\",\"framework:nist-csf\",\"control:CC6.3\",\"requirement:Security-of-Processing\",\"control:CC6.1\",\"control:A.9.2.3\",\"requirement:Workforce-Security\",\"requirement:Data-Protection\",\"control:25.2\",\"requirement:Logical-and-Physical-Access-Control\",\"framework:hipaa\",\"framework:gdpr\",\"control:PR.IP-1\",\"source:azure.storage\",\"control:3.7\",\"requirement:Storage-Accounts\",\"control:A.18.1.3\",\"control:164.308-a-1-ii-B\",\"control:CM-6\",\"control:2.8\",\"requirement:Security-Management-Process\",\"framework:cis-azure\",\"requirement:Apply-Secure-Configurations-to-All-System-Components\",\"framework:fedramp-high\",\"control:2.2\",\"framework:pci-dss\",\"requirement:Azure\",\"framework:soc-2\",\"framework:dcsb-m\",\"security:compliance\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]},{\"id\":\"def-000-qnx\",\"version\":4,\"name\":\"'Create Policy Assignment' activity log alert should be configured\",\"createdAt\":1695335294080,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722015330005,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_subscription\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_subscription\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Operations-Security\",\"control\":\"A.12.4.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"fedramp-high\",\"version\":\"5\",\"requirement\":\"Audit-and-Accountability\",\"control\":\"AU-6\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Communication-and-Information\",\"control\":\"CC2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-53\",\"version\":\"5\",\"requirement\":\"Audit-and-Accountability\",\"control\":\"AU-6\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Logging-and-Monitoring\",\"control\":\"5.2.1\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nvalid_log_alert = {activity_log_alert.subscription_id |\\n\\tsome activity_log_alert in input.resources.azure_activity_log_alert\\n\\tsome condition in activity_log_alert.condition_all_of\\n\\n\\tlower(condition.equals) == \\\"microsoft.authorization/policyassignments/write\\\"\\n\\tlower(condition.field) == \\\"operationname\\\"\\n\\tnot condition.contains_any\\n\\tlower(activity_log_alert.location) == \\\"global\\\"\\n\\n\\tsome scope in activity_log_alert.scopes\\n\\n\\tlower(split(scope, \\\"/\\\")[2]) == lower(activity_log_alert.subscription_id)\\n\\n\\tactivity_log_alert.enabled\\n}\\n\\neval(subscription) = \\\"pass\\\" if {\\n\\tvalid_log_alert[subscription.subscription_id]\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_subscription\",\"azure_activity_log_alert\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":true}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"\\n## Description\\n\\nTo improve detection of unsolicited changes and gain insight into modifications made in \\\"Azure policy - assignments,\\\" it is recommended to create an activity log alert specifically for the Create Policy Assignment event. This alert will help monitor and track any occurrences of policy assignment creation, reducing the time it takes to identify and respond to any unauthorized changes.\\n\\n## Remediation\\n\\n### From the console\\n\\n1. Go to **Monitor** and select **Alerts**.\\n2. Click **New Alert Rule**.\\n3. Under **Scope**, click **Select Resource**.\\n4. Under **Filter by Subscription**, select the appropriate subscription.\\n5. Under **Filter by Resource Type**, select **Policy Assignment**.\\n6. Select **All** for **Filter by Location**.\\n7. Click the subscription resource from the entries populated under **Resource**. Verify that the selection preview shows **All Policy** assignment (policyAssignments) and the selected subscription name.\\n8. Click **Done**.\\n9. Under **Condition**, click **Add Condition**, then select the **Create Policy Assignment** signal.\\n10. Click **Done**.\\n11. Under **Action Group**, select **Add Action Groups** and complete the creation process or select the appropriate action group.\\n12. Under **Alert Rule Details**, enter the **Alert Rule Name** and **Description**.\\n13. Select the appropriate resource group to save the alert to.\\n14. Select the **Enable alert rule upon creation** checkbox.\\n15. Click **Create Alert Rule**.\\n\",\"tags\":[\"scored:true\",\"source:azure.activity_log\",\"security:compliance\",\"control:3.14.1\",\"scope:azure.activity_log\",\"cloud_provider:azure\",\"control:3.14.2\",\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"control:5.2.1\",\"control:A.12.4.1\",\"requirement:Logging-and-Monitoring\",\"framework:nist-800-53\",\"level:1\",\"framework:nist-800-171\",\"framework:soc-2\",\"control:AU-6\",\"framework:fedramp-high\",\"framework:iso-27001\",\"requirement:Audit-and-Accountability\",\"control:CC2.1\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\"],\"defaultTags\":[\"control:AU-6\",\"source:azure.activity_log\",\"requirement:Communication-and-Information\",\"cloud_provider:azure\",\"requirement:Systems-and-Information-Integrity\",\"framework:cis-azure\",\"scope:azure.activity_log\",\"framework:soc-2\",\"control:A.12.4.1\",\"requirement:Operations-Security\",\"control:3.14.2\",\"control:3.14.1\",\"framework:iso-27001\",\"framework:nist-800-53\",\"scored:true\",\"control:5.2.1\",\"security:compliance\",\"control:CC2.1\",\"level:1\",\"framework:nist-800-171\",\"requirement:Logging-and-Monitoring\",\"requirement:Audit-and-Accountability\",\"framework:fedramp-high\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]},{\"id\":\"def-000-9q9\",\"version\":4,\"name\":\"'Create or Update Network Security Group' activity log alert should be configured\",\"createdAt\":1695406412231,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722015442517,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_subscription\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_subscription\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Operations-Security\",\"control\":\"A.12.4.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"fedramp-high\",\"version\":\"5\",\"requirement\":\"Audit-and-Accountability\",\"control\":\"AU-6\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Communication-and-Information\",\"control\":\"CC2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-53\",\"version\":\"5\",\"requirement\":\"Audit-and-Accountability\",\"control\":\"AU-6\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Logging-and-Monitoring\",\"control\":\"5.2.3\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nvalid_log_alert = {activity_log_alert.subscription_id |\\n\\tsome activity_log_alert in input.resources.azure_activity_log_alert\\n\\tsome condition_all_of in activity_log_alert.condition_all_of\\n\\tlower(condition_all_of.field) == \\\"operationname\\\"\\n\\tlower(condition_all_of.equals) == \\\"microsoft.network/networksecuritygroups/write\\\"\\n\\tnot condition_all_of.contains_any\\n\\n\\tlower(activity_log_alert.location) == \\\"global\\\"\\n\\n\\tsome scope in activity_log_alert.scopes\\n\\tlower(split(scope, \\\"/\\\")[2]) == lower(activity_log_alert.subscription_id)\\n\\n\\tactivity_log_alert.enabled\\n}\\n\\neval(subscription) = \\\"pass\\\" if {\\n\\tvalid_log_alert[subscription.subscription_id]\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_subscription\",\"azure_activity_log_alert\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":true}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"## Description\\n\\nTo improve the detection of suspicious activity and gain insights into network access changes, it is recommended to create an Activity Log Alert specifically for the \\\"Create or Update Network Security Group\\\" event. By monitoring these events, it becomes easier to detect and respond to any unauthorized modifications made to network security groups, leading to a quicker response time and enhanced security measures.\\n\\n## Remediation\\n\\n### From the console\\n\\n1. Navigate to the **Monitor** blade.\\n2. Select **Alerts** > **Create** > **Alert rule**.\\n3. Under **Filter by subscription**, choose a subscription.\\n4. Under **Filter by resource type**, select **Network security groups**.\\n5. Under **Filter by location**, select **All**.\\n6. From the results, select the subscription, then click **Done**.\\n7. Select the **Condition** tab.\\n8. Under Signal name, click Delete **Create or Update Network Security Group (Microsoft.Network/networkSecurityGroups)**.\\n9. Select the **Actions** tab.\\n10. To use an existing action group, click **Select action groups**. To create a new action group, click **Create action group**. Fill out the appropriate details for the selection.\\n11. Click the **Details** tab.\\n12. Select a **Resource group**, then provide an **Alert rule name** and an optional **Alert rule description**.\\n13. Click **Review + create**.\\n14. Click **Create**.\\n\",\"tags\":[\"scored:true\",\"control:3.14.1\",\"scope:azure.activity_log\",\"cloud_provider:azure\",\"control:3.14.2\",\"control:A.12.4.1\",\"level:1\",\"framework:nist-800-171\",\"control:5.2.3\",\"framework:iso-27001\",\"requirement:Audit-and-Accountability\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\",\"source:azure.activity_log\",\"security:compliance\",\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"requirement:Logging-and-Monitoring\",\"requirement:System-Operations\",\"framework:nist-800-53\",\"framework:soc-2\",\"control:AU-6\",\"framework:fedramp-high\",\"control:CC2.1\",\"control:CC7.2\",\"control:CC7.1\"],\"defaultTags\":[\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"requirement:Audit-and-Accountability\",\"scope:azure.activity_log\",\"control:CC7.2\",\"framework:iso-27001\",\"cloud_provider:azure\",\"control:3.14.2\",\"control:3.14.1\",\"control:CC7.1\",\"level:1\",\"source:azure.activity_log\",\"requirement:Logging-and-Monitoring\",\"requirement:System-Operations\",\"framework:fedramp-high\",\"control:CC2.1\",\"scored:true\",\"requirement:Communication-and-Information\",\"control:AU-6\",\"framework:nist-800-53\",\"security:compliance\",\"requirement:Operations-Security\",\"control:5.2.3\",\"framework:soc-2\",\"framework:nist-800-171\",\"control:A.12.4.1\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]},{\"id\":\"def-000-bfa\",\"version\":3,\"name\":\"'Create or Update Public Ip Address' activity log alert should be configured\",\"createdAt\":1695406412713,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722014920314,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_subscription\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_subscription\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Operations-Security\",\"control\":\"A.12.4.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Logical-and-Physical-Access-Control\",\"control\":\"CC6.8\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Communication-and-Information\",\"control\":\"CC2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Logging-and-Monitoring\",\"control\":\"5.2.9\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nvalid_log_alert = {activity_log_alert.subscription_id |\\n\\tsome activity_log_alert in input.resources.azure_activity_log_alert\\n\\tsome condition_all_of in activity_log_alert.condition_all_of\\n\\tlower(condition_all_of.field) == \\\"operationname\\\"\\n\\tlower(condition_all_of.equals) == \\\"microsoft.network/publicipaddresses/write\\\"\\n\\tnot condition_all_of.contains_any\\n\\n\\tlower(activity_log_alert.location) == \\\"global\\\"\\n\\n\\tsome scope in activity_log_alert.scopes\\n\\tlower(split(scope, \\\"/\\\")[2]) == lower(activity_log_alert.subscription_id)\\n\\n\\tactivity_log_alert.enabled\\n}\\n\\neval(subscription) = \\\"pass\\\" if {\\n\\tvalid_log_alert[subscription.subscription_id]\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_subscription\",\"azure_activity_log_alert\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":true}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"## Description\\n\\nTo enhance network security monitoring and expedite the detection of suspicious activity, it is recommended to create an activity log alert specifically for the \\\"Create or Update Public IP Addresses Rule\\\" event. By enabling this alert, you gain valuable insights into changes made to public IP addresses rules. It is important to note that enabling this alert may lead to a substantial increase in log size, especially if there are a significant number of administrative actions performed on a server. However, the benefits of improved security monitoring outweigh the potential impact on log size.\\n\\n## Remediation\\n\\n### From the console\\n\\n1. Navigate to the **Monitor** blade.\\n2. Select **Alerts** > **Create** > **Alert rule**.\\n3. Under **Filter by subscription**, choose a subscription.\\n4. Under **Filter by resource type**, select **Public IP addresses**.\\n5. Under **Filter by location**, select **All**.\\n6. From the results, select the subscription, then click **Done**.\\n7. Click the **Condition** tab.\\n8. Under Signal name, click Delete **Create/Update Public Ip Address (Microsoft.Network/publicIPAddresses)**.\\n9. Click the **Actions** tab.\\n10. To use an existing action group, click **Select action groups**. To create a new action group, click **Create action group**. Fill out the appropriate details for the selection.\\n11. Click the **Details** tab.\\n12. Select a **Resource group**, then provide an **Alert rule name** and an optional **Alert rule description**.\\n13. Click **Review + create**.\\n14. Click **Create**.\\n\",\"tags\":[\"control:CC6.8\",\"scored:true\",\"source:azure.activity_log\",\"security:compliance\",\"control:3.14.1\",\"scope:azure.activity_log\",\"cloud_provider:azure\",\"control:3.14.2\",\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"control:A.12.4.1\",\"requirement:Logging-and-Monitoring\",\"requirement:System-Operations\",\"control:5.2.9\",\"level:1\",\"framework:nist-800-171\",\"framework:soc-2\",\"framework:iso-27001\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\"],\"defaultTags\":[\"requirement:Operations-Security\",\"requirement:Communication-and-Information\",\"framework:iso-27001\",\"scored:true\",\"control:A.12.4.1\",\"source:azure.activity_log\",\"framework:soc-2\",\"control:3.14.2\",\"control:3.14.1\",\"scope:azure.activity_log\",\"control:5.2.9\",\"requirement:Logging-and-Monitoring\",\"control:CC6.8\",\"cloud_provider:azure\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"requirement:Systems-and-Information-Integrity\",\"security:compliance\",\"requirement:System-Operations\",\"framework:cis-azure\",\"framework:nist-800-171\",\"level:1\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]},{\"id\":\"def-000-w0f\",\"version\":3,\"name\":\"'Create or Update SQL Server Firewall Rule' activity log alert should be configured\",\"createdAt\":1695406413348,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722015217333,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_subscription\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_subscription\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Operations-Security\",\"control\":\"A.12.4.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Logical-and-Physical-Access-Control\",\"control\":\"CC6.8\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Communication-and-Information\",\"control\":\"CC2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Logging-and-Monitoring\",\"control\":\"5.2.7\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nvalid_log_alert = {activity_log_alert.subscription_id |\\n\\tsome activity_log_alert in input.resources.azure_activity_log_alert\\n\\tsome condition_all_of in activity_log_alert.condition_all_of\\n\\tlower(condition_all_of.field) == \\\"operationname\\\"\\n\\tlower(condition_all_of.equals) == \\\"microsoft.sql/servers/firewallrules/write\\\"\\n\\tnot condition_all_of.contains_any\\n\\n\\tlower(activity_log_alert.location) == \\\"global\\\"\\n\\n\\tsome scope in activity_log_alert.scopes\\n\\tlower(split(scope, \\\"/\\\")[2]) == lower(activity_log_alert.subscription_id)\\n\\n\\tactivity_log_alert.enabled\\n}\\n\\neval(subscription) = \\\"pass\\\" if {\\n\\tvalid_log_alert[subscription.subscription_id]\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_subscription\",\"azure_activity_log_alert\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":true}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"## Description\\n\\nTo enhance the monitoring of network access changes and reduce the time it takes to identify suspicious activity, it is recommended to create an activity log alert specifically for the \\\"Create or Update SQL Server Firewall Rule\\\" event. By enabling this alert, you gain valuable insights into modifications made to SQL Server firewall rules. It is important to note that enabling this alert may lead to a substantial increase in log size if there are numerous administrative actions on a server. However, the benefits of improved security monitoring outweigh the potential impact on log size.\\n\\n## Remediation\\n\\n### From the console\\n\\n1. Navigate to the **Monitor** blade.\\n2. Select **Alerts** > **Create** > **Alert rule**.\\n3. Under **Filter by subscription**, choose a subscription.\\n4. Under **Filter by resource type**, select **Server Firewall Rule (servers/firewallRules)**.\\n5. Under **Filter by location**, select **All**.\\n6. From the results, select the subscription, then click **Done**.\\n7. Click the **Condition** tab.\\n8. Under Signal name, click Delete **Create/Update server firewall rule (Microsoft.Sql/servers/firewallRules)**.\\n9. Click the **Actions** tab.\\n10. To use an existing action group, click **Select action groups**. To create a new action group, click **Create action group**. Fill out the appropriate details for the selection.\\n11. Click the **Details** tab.\\n12. Select a **Resource group**, provide an **Alert rule name** and an optional **Alert\\nrule description**.\\n13. Click **Review + create**.\\n14. Click **Create**.\\n\",\"tags\":[\"control:CC6.8\",\"scored:true\",\"source:azure.activity_log\",\"security:compliance\",\"control:3.14.1\",\"scope:azure.activity_log\",\"cloud_provider:azure\",\"control:3.14.2\",\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"control:A.12.4.1\",\"requirement:Logging-and-Monitoring\",\"requirement:System-Operations\",\"control:5.2.7\",\"level:1\",\"framework:nist-800-171\",\"framework:soc-2\",\"framework:iso-27001\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\"],\"defaultTags\":[\"requirement:Operations-Security\",\"requirement:Communication-and-Information\",\"framework:iso-27001\",\"scored:true\",\"control:A.12.4.1\",\"source:azure.activity_log\",\"framework:soc-2\",\"control:3.14.2\",\"control:3.14.1\",\"scope:azure.activity_log\",\"control:5.2.7\",\"requirement:Logging-and-Monitoring\",\"control:CC6.8\",\"cloud_provider:azure\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"requirement:Systems-and-Information-Integrity\",\"security:compliance\",\"requirement:System-Operations\",\"framework:cis-azure\",\"framework:nist-800-171\",\"level:1\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]},{\"id\":\"def-000-059\",\"version\":3,\"name\":\"'Create or Update Security Solutions' activity log alert should be configured\",\"createdAt\":1695406412988,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722014956116,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_subscription\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_subscription\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Operations-Security\",\"control\":\"A.12.4.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Logical-and-Physical-Access-Control\",\"control\":\"CC6.8\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Communication-and-Information\",\"control\":\"CC2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Logging-and-Monitoring\",\"control\":\"5.2.5\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nvalid_log_alert = {activity_log_alert.subscription_id |\\n\\tsome activity_log_alert in input.resources.azure_activity_log_alert\\n\\tsome condition_all_of in activity_log_alert.condition_all_of\\n\\tlower(condition_all_of.field) == \\\"operationname\\\"\\n\\tlower(condition_all_of.equals) == \\\"microsoft.security/securitysolutions/write\\\"\\n\\tnot condition_all_of.contains_any\\n\\n\\tlower(activity_log_alert.location) == \\\"global\\\"\\n\\n\\tsome scope in activity_log_alert.scopes\\n\\tlower(split(scope, \\\"/\\\")[2]) == lower(activity_log_alert.subscription_id)\\n\\n\\tactivity_log_alert.enabled\\n}\\n\\neval(subscription) = \\\"pass\\\" if {\\n\\tvalid_log_alert[subscription.subscription_id]\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_subscription\",\"azure_activity_log_alert\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":true}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"## Description\\n\\nTo improve the detection of suspicious activity and gain insights into changes made to security solutions, it is recommended to create an activity log alert specifically for the \\\"Create or Update Security Solution\\\" event. By monitoring these events, you can quickly detect any modifications to active security solutions, reducing the time it takes to identify and respond to potential security threats.\\n\\n## Remediation\\n\\n### From the console\\n\\n1. Navigate to the **Monitor** blade.\\n2. Select **Alerts** > **Create** > **Alert rule**.\\n3. Under **Filter by subscription**, choose a subscription.\\n4. Under **Filter by resource type**, select **Security Solutions (securitySolutions)**.\\n5. Under **Filter by location**, select **All**.\\n6. From the results, select the subscription, then click **Done**.\\n7. Click the **Condition** tab.\\n8. Under Signal name, click Delete **Create or Update Security Solutions (Microsoft.Security/securitySolutions)**.\\n9. Click the **Actions** tab.\\n10. To use an existing action group, click **Select action groups**. To create a new action group, click **Create action group**. Fill out the appropriate details for the selection.\\n11. Click the **Details** tab.\\n12. Select a **Resource group**, then provide an **Alert rule name** and an optional **Alert\\nrule description**.\\n13. Click **Review + create**.\\n14. Click **Create**.\\n\",\"tags\":[\"control:CC6.8\",\"scored:true\",\"source:azure.activity_log\",\"security:compliance\",\"control:3.14.1\",\"scope:azure.activity_log\",\"cloud_provider:azure\",\"control:3.14.2\",\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"control:A.12.4.1\",\"requirement:Logging-and-Monitoring\",\"requirement:System-Operations\",\"level:1\",\"framework:nist-800-171\",\"framework:soc-2\",\"control:5.2.5\",\"framework:iso-27001\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\"],\"defaultTags\":[\"requirement:Operations-Security\",\"requirement:Communication-and-Information\",\"framework:iso-27001\",\"scored:true\",\"control:A.12.4.1\",\"source:azure.activity_log\",\"framework:soc-2\",\"control:3.14.2\",\"control:3.14.1\",\"scope:azure.activity_log\",\"control:5.2.5\",\"requirement:Logging-and-Monitoring\",\"control:CC6.8\",\"cloud_provider:azure\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"requirement:Systems-and-Information-Integrity\",\"security:compliance\",\"requirement:System-Operations\",\"framework:cis-azure\",\"framework:nist-800-171\",\"level:1\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]},{\"id\":\"def-000-rhj\",\"version\":3,\"name\":\"'Delete Network Security Group' activity log alert should be configured\",\"createdAt\":1695406412766,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722014510456,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_subscription\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_subscription\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Operations-Security\",\"control\":\"A.12.4.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Communication-and-Information\",\"control\":\"CC2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Logging-and-Monitoring\",\"control\":\"5.2.4\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nvalid_log_alert = {activity_log_alert.subscription_id |\\n\\tsome activity_log_alert in input.resources.azure_activity_log_alert\\n\\tsome condition_all_of in activity_log_alert.condition_all_of\\n\\tlower(condition_all_of.field) == \\\"operationname\\\"\\n\\tlower(condition_all_of.equals) == \\\"microsoft.network/networksecuritygroups/delete\\\"\\n\\tnot condition_all_of.contains_any\\n\\n\\tlower(activity_log_alert.location) == \\\"global\\\"\\n\\n\\tsome scope in activity_log_alert.scopes\\n\\tlower(split(scope, \\\"/\\\")[2]) == lower(activity_log_alert.subscription_id)\\n\\n\\tactivity_log_alert.enabled\\n}\\n\\neval(subscription) = \\\"pass\\\" if {\\n\\tvalid_log_alert[subscription.subscription_id]\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_subscription\",\"azure_activity_log_alert\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":true}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"## Description\\n\\nTo enhance the detection of suspicious activity and gain insights into network access changes, it is recommended to create an activity log alert specifically for the \\\"Delete Network Security Group\\\" event. Monitoring these events allows for quick detection and response to any unauthorized deletion of network security groups, reducing the time it takes to identify and address potential security threats.\\n\\n## Remediation\\n\\n### From the console\\n\\n1. Navigate to the **Monitor** blade.\\n2. Select **Alerts** > **Create** > **Alert rule**.\\n3. Under **Filter by subscription**, choose a subscription.\\n4. Under **Filter by resource type**, select **Network security groups**.\\n5. Under **Filter by location**, select **All**.\\n6. From the results, select the subscription, then click **Done**.\\n7. Click the **Condition** tab.\\n8. Under Signal name, click Delete **Network Security Group (Microsoft.Network/networkSecurityGroups)**.\\n9. Click the **Actions** tab.\\n10. To use an existing action group, click **Select action groups**. To create a new action group, click **Create action group**. Fill out the appropriate details for the selection.\\n11. Click the **Details** tab.\\n12. Select a **Resource group**, then provide an **Alert rule name** and an optional **Alert rule description**.\\n13. Click **Review + create**.\\n14. Click **Create**.\\n\",\"tags\":[\"scored:true\",\"source:azure.activity_log\",\"security:compliance\",\"control:3.14.1\",\"scope:azure.activity_log\",\"cloud_provider:azure\",\"control:3.14.2\",\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"control:A.12.4.1\",\"requirement:Logging-and-Monitoring\",\"requirement:System-Operations\",\"level:1\",\"framework:nist-800-171\",\"framework:soc-2\",\"control:5.2.4\",\"framework:iso-27001\",\"control:CC2.1\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\"],\"defaultTags\":[\"control:A.12.4.1\",\"requirement:Communication-and-Information\",\"control:CC7.1\",\"cloud_provider:azure\",\"framework:cis-azure\",\"control:CC7.2\",\"scope:azure.activity_log\",\"security:compliance\",\"control:5.2.4\",\"level:1\",\"source:azure.activity_log\",\"control:CC2.1\",\"scored:true\",\"framework:nist-800-171\",\"requirement:System-Operations\",\"framework:soc-2\",\"requirement:Systems-and-Information-Integrity\",\"control:3.14.2\",\"control:3.14.1\",\"requirement:Logging-and-Monitoring\",\"framework:iso-27001\",\"requirement:Operations-Security\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]},{\"id\":\"def-000-d1v\",\"version\":4,\"name\":\"'Delete Policy Assignment' activity log alert should be configured\",\"createdAt\":1695406412546,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722015365872,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_subscription\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_subscription\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Compliance\",\"control\":\"A.18.1.3\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Communications-Security\",\"control\":\"A.13.1.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Operations-Security\",\"control\":\"A.12.4.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Access-Control\",\"control\":\"A.9.1.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"fedramp-high\",\"version\":\"5\",\"requirement\":\"Audit-and-Accountability\",\"control\":\"AU-6\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Communication-and-Information\",\"control\":\"CC2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-53\",\"version\":\"5\",\"requirement\":\"Audit-and-Accountability\",\"control\":\"AU-6\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Logging-and-Monitoring\",\"control\":\"5.2.2\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nvalid_log_alert = {activity_log_alert.subscription_id |\\n\\tsome activity_log_alert in input.resources.azure_activity_log_alert\\n\\tsome condition_all_of in activity_log_alert.condition_all_of\\n\\tlower(condition_all_of.field) == \\\"operationname\\\"\\n\\tlower(condition_all_of.equals) == \\\"microsoft.authorization/policyassignments/delete\\\"\\n\\tnot condition_all_of.contains_any\\n\\n\\tlower(activity_log_alert.location) == \\\"global\\\"\\n\\n\\tsome scope in activity_log_alert.scopes\\n\\tlower(split(scope, \\\"/\\\")[2]) == lower(activity_log_alert.subscription_id)\\n\\n\\tactivity_log_alert.enabled\\n}\\n\\neval(subscription) = \\\"pass\\\" if {\\n\\tvalid_log_alert[subscription.subscription_id]\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_subscription\",\"azure_activity_log_alert\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":true}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"## Description\\n\\nTo enhance the detection of unsolicited changes and streamline the monitoring of modifications made in the **Policy - Assignments** page, it is advised to create an activity log alert specifically for the \\\"Delete Policy Assignment\\\" event. This alert will provide valuable insights into any deletions of policy assignments, allowing for quick detection and response to unauthorized changes.\\n\\n## Remediation\\n\\n### From the console\\n\\n1. Navigate to the **Monitor** blade.\\n2. Select **Alerts** > **Create** > **Alert rule**.\\n3. Under **Filter by subscription**, choose a subscription.\\n4. Under **Filter by resource type**, select **Policy Assignment**.\\n5. Under **Filter by location**, select **All**.\\n6. From the results, select the subscription, then click **Done**.\\n7. Select the **Condition** tab.\\n8. Under Signal name, click Delete **Delete policy assignment (Microsoft.Authorization/policyAssignments)**.\\n9. Select the **Actions** tab.\\n10. To use an existing action group, click **Select action groups**. To create a new action group, click **Create action group**. Fill out the appropriate details for the selection.\\n11. Select the **Details** tab.\\n12. Select a **Resource group**, provide an **Alert rule name** and an optional **Alert\\nrule description**.\\n13. Click **Review + create**.\\n14. Click **Create**.\\n\",\"tags\":[\"scored:true\",\"control:3.14.1\",\"scope:azure.activity_log\",\"cloud_provider:azure\",\"control:3.14.2\",\"control:A.12.4.1\",\"requirement:Compliance\",\"level:1\",\"control:5.2.2\",\"framework:nist-800-171\",\"framework:iso-27001\",\"requirement:Audit-and-Accountability\",\"requirement:Access-Control\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\",\"source:azure.activity_log\",\"security:compliance\",\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"requirement:Communications-Security\",\"requirement:Logging-and-Monitoring\",\"requirement:System-Operations\",\"framework:nist-800-53\",\"control:A.13.1.1\",\"control:A.18.1.3\",\"framework:soc-2\",\"control:AU-6\",\"control:A.9.1.2\",\"framework:fedramp-high\",\"control:CC2.1\",\"control:CC7.2\",\"control:CC7.1\"],\"defaultTags\":[\"requirement:Access-Control\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\",\"framework:iso-27001\",\"requirement:Logging-and-Monitoring\",\"control:CC7.1\",\"framework:nist-800-171\",\"control:CC7.2\",\"control:3.14.2\",\"control:3.14.1\",\"control:CC2.1\",\"control:A.18.1.3\",\"level:1\",\"requirement:Communications-Security\",\"scope:azure.activity_log\",\"control:A.9.1.2\",\"requirement:Systems-and-Information-Integrity\",\"scored:true\",\"control:A.12.4.1\",\"control:A.13.1.1\",\"framework:soc-2\",\"framework:nist-800-53\",\"control:5.2.2\",\"requirement:Audit-and-Accountability\",\"control:AU-6\",\"framework:fedramp-high\",\"requirement:System-Operations\",\"security:compliance\",\"framework:cis-azure\",\"source:azure.activity_log\",\"requirement:Compliance\",\"cloud_provider:azure\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]},{\"id\":\"def-000-2sc\",\"version\":3,\"name\":\"'Delete Public Ip Address Rule' activity log alert should be configured\",\"createdAt\":1695406411919,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722015104777,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_subscription\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_subscription\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Operations-Security\",\"control\":\"A.12.4.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Logical-and-Physical-Access-Control\",\"control\":\"CC6.8\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Communication-and-Information\",\"control\":\"CC2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Logging-and-Monitoring\",\"control\":\"5.2.10\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nvalid_log_alert = {activity_log_alert.subscription_id |\\n\\tsome activity_log_alert in input.resources.azure_activity_log_alert\\n\\tsome condition_all_of in activity_log_alert.condition_all_of\\n\\tlower(condition_all_of.field) == \\\"operationname\\\"\\n\\tlower(condition_all_of.equals) == \\\"microsoft.network/publicipaddresses/delete\\\"\\n\\tnot condition_all_of.contains_any\\n\\n\\tlower(activity_log_alert.location) == \\\"global\\\"\\n\\n\\tsome scope in activity_log_alert.scopes\\n\\tlower(split(scope, \\\"/\\\")[2]) == lower(activity_log_alert.subscription_id)\\n\\n\\tactivity_log_alert.enabled\\n}\\n\\neval(subscription) = \\\"pass\\\" if {\\n\\tvalid_log_alert[subscription.subscription_id]\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_subscription\",\"azure_activity_log_alert\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":true}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"## Description\\n\\nTo enhance network security monitoring and expedite the detection of suspicious activity, it is recommended to create an activity log alert specifically for the \\\"Delete Public IP Addresses Rule\\\" event. By enabling this alert, you gain valuable insights into the deletions of public IP addresses rules. It is important to note that enabling this alert may result in a substantial increase in log size, particularly if there are numerous administrative actions performed on a server. However, the benefits of improved security monitoring outweigh the potential impact on log size.\\n\\n## Remediation\\n\\n### From the console\\n\\n1. Navigate to the **Monitor** blade.\\n2. Select **Alerts** > **Create** > **Alert rule**.\\n3. Under **Filter by subscription**, choose a subscription.\\n4. Under **Filter by resource type**, select **Public IP addresses**.\\n5. Under **Filter by location**, select **All**.\\n6. From the results, select the subscription, then click **Done**.\\n7. Select the **Condition** tab.\\n8. Under Signal name, click Delete **Delete Public Ip Address (Microsoft.Network/publicIPAddresses)**.\\n9. Select the **Actions** tab.\\n10. To use an existing action group, click **Select action groups**. To create a new action group, click **Create action group**. Fill out the appropriate details for the selection.\\n11. Select the **Details** tab.\\n12. Select a **Resource group**, provide an **Alert rule name** and an optional **Alert\\nrule description**.\\n13. Click **Review + create**.\\n14. Click **Create**.\\n\",\"tags\":[\"control:CC6.8\",\"scored:true\",\"source:azure.activity_log\",\"security:compliance\",\"control:3.14.1\",\"scope:azure.activity_log\",\"cloud_provider:azure\",\"control:3.14.2\",\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"control:A.12.4.1\",\"requirement:Logging-and-Monitoring\",\"requirement:System-Operations\",\"level:1\",\"framework:nist-800-171\",\"control:5.2.10\",\"framework:soc-2\",\"framework:iso-27001\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\"],\"defaultTags\":[\"requirement:Operations-Security\",\"requirement:Communication-and-Information\",\"framework:iso-27001\",\"scored:true\",\"control:A.12.4.1\",\"source:azure.activity_log\",\"framework:soc-2\",\"control:3.14.2\",\"control:3.14.1\",\"scope:azure.activity_log\",\"requirement:Logging-and-Monitoring\",\"control:CC6.8\",\"control:5.2.10\",\"cloud_provider:azure\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"requirement:Systems-and-Information-Integrity\",\"security:compliance\",\"requirement:System-Operations\",\"framework:cis-azure\",\"framework:nist-800-171\",\"level:1\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]},{\"id\":\"def-000-77s\",\"version\":3,\"name\":\"'Delete SQL Server Firewall Rule' activity log alert should be configured\",\"createdAt\":1695406412914,\"creationAuthorId\":0,\"updateAuthorId\":0,\"updatedAt\":1722014920291,\"isDefault\":true,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:azure_subscription\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"azure_subscription\",\"validationQuery\":\"\",\"complianceFrameworks\":[{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"nist-800-171\",\"version\":\"2\",\"requirement\":\"Systems-and-Information-Integrity\",\"control\":\"3.14.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"iso-27001\",\"version\":\"2\",\"requirement\":\"Operations-Security\",\"control\":\"A.12.4.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"System-Operations\",\"control\":\"CC7.2\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Logical-and-Physical-Access-Control\",\"control\":\"CC6.8\",\"message\":\"\",\"is_default\":true},{\"framework\":\"soc-2\",\"version\":\"2\",\"requirement\":\"Communication-and-Information\",\"control\":\"CC2.1\",\"message\":\"\",\"is_default\":true},{\"framework\":\"cis-azure\",\"version\":\"2.0.0\",\"requirement\":\"Logging-and-Monitoring\",\"control\":\"5.2.8\",\"message\":\"\",\"is_default\":true}],\"filter\":\"\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nvalid_log_alert = {activity_log_alert.subscription_id |\\n\\tsome activity_log_alert in input.resources.azure_activity_log_alert\\n\\tsome condition_all_of in activity_log_alert.condition_all_of\\n\\tlower(condition_all_of.field) == \\\"operationname\\\"\\n\\tlower(condition_all_of.equals) == \\\"microsoft.sql/servers/firewallrules/delete\\\"\\n\\tnot condition_all_of.contains_any\\n\\n\\tlower(activity_log_alert.location) == \\\"global\\\"\\n\\n\\tsome scope in activity_log_alert.scopes\\n\\tlower(split(scope, \\\"/\\\")[2]) == lower(activity_log_alert.subscription_id)\\n\\n\\tactivity_log_alert.enabled\\n}\\n\\neval(subscription) = \\\"pass\\\" if {\\n\\tvalid_log_alert[subscription.subscription_id]\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"azure_subscription\",\"azure_activity_log_alert\"]},\"defaultSecurityInbox\":false,\"descriptionSummary\":\"\",\"remediationSummary\":\"\",\"resourceAttributes\":[],\"complexRule\":true}},\"complianceSignalOptions\":{\"defaultActivationStatus\":false,\"defaultGroupByFields\":[\"@resource\"],\"userActivationStatus\":null,\"userGroupByFields\":null},\"cases\":[{\"name\":\"\",\"status\":\"medium\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"## Description\\n\\nTo improve the monitoring of network access changes and reduce the time it takes to detect suspicious activity, it is advised to create an activity log alert specifically for the \\\"Delete SQL Server Firewall Rule\\\" event. By enabling this alert, you can gain valuable insights into deletions of SQL Server firewall rules. It is important to note that enabling this alert may result in a significant increase in log size, particularly if there are numerous administrative actions performed on a server. However, the enhanced security monitoring provided by the alert outweighs the potential impact on log size.\\n\\n## Remediation\\n\\n### From the console\\n\\n1. Navigate to the **Monitor** blade.\\n2. Select **Alerts** > **Create** > **Alert rule**.\\n3. Under **Filter by subscription**, choose a subscription.\\n4. Under **Filter by resource type**, select **Server Firewall Rule (servers/firewallRules)**.\\n5. Under **Filter by location**, select **All**.\\n6. From the results, select the subscription, then click **Done**.\\n7. Click the **Condition** tab.\\n8. Under Signal name, click Delete **Delete server firewall rule (Microsoft.Sql/servers/firewallRules)**.\\n9. Click the **Actions** tab.\\n10. To use an existing action group, click **Select action groups**. To create a new action group, click **Create action group**. Fill out the appropriate details for the selection.\\n11. Click the **Details** tab.\\n12. Select a **Resource group**, then provide an **Alert rule name** and an optional **Alert rule description**.\\n13. Click **Review + create**.\\n14. Click **Create**.\\n\",\"tags\":[\"control:CC6.8\",\"scored:true\",\"source:azure.activity_log\",\"security:compliance\",\"control:3.14.1\",\"scope:azure.activity_log\",\"cloud_provider:azure\",\"control:3.14.2\",\"framework:cis-azure\",\"requirement:Systems-and-Information-Integrity\",\"control:A.12.4.1\",\"requirement:Logging-and-Monitoring\",\"requirement:System-Operations\",\"control:5.2.8\",\"level:1\",\"framework:nist-800-171\",\"framework:soc-2\",\"framework:iso-27001\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Operations-Security\",\"requirement:Communication-and-Information\"],\"defaultTags\":[\"requirement:Operations-Security\",\"requirement:Communication-and-Information\",\"framework:iso-27001\",\"scored:true\",\"control:A.12.4.1\",\"source:azure.activity_log\",\"framework:soc-2\",\"control:3.14.2\",\"control:3.14.1\",\"scope:azure.activity_log\",\"control:5.2.8\",\"requirement:Logging-and-Monitoring\",\"control:CC6.8\",\"cloud_provider:azure\",\"control:CC7.2\",\"control:CC7.1\",\"requirement:Logical-and-Physical-Access-Control\",\"control:CC2.1\",\"requirement:Systems-and-Information-Integrity\",\"security:compliance\",\"requirement:System-Operations\",\"framework:cis-azure\",\"framework:nist-800-171\",\"level:1\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]}],\"meta\":{\"page\":{\"total_count\":2017,\"total_filtered_count\":10}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-07-06T19:25:17.066Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/scanned-assets-metadata", + "query": [ + [ + "page[number]", + "1" + ], + [ + "page[token]", + "unknown" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Unexpected internal error\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List scanned assets metadata returns \"Bad request: Invalid Pagination Token\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-10-15T08:42:14.735Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/scanned-assets-metadata", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List scanned assets metadata returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-17T16:27:32.641Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/findings", + "query": [ + [ + "page[cursor]", + "invalid_cursor" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"detail\":\"Invalid filters\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List security findings returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-15T22:38:02.352Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/findings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"MWIxMjUyZGJjMjE3ZTFmZTcwZDdlMDNiNTI2YjQ3ZDB-MmQ5ZDgzMTJiMGIwYmM5ZGRmZjQ5OTk4ZmMzYWYyNmM=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2025-38626\"],\"cve\":\"CVE-2025-38626\",\"id\":\"TRIVY-CVE-2025-38626\",\"modified_at\":1764176984000,\"published_at\":1755879336000,\"summary\":\"kernel: f2fs: fix to trigger foreground gc during f2fs_map_blocks() in lfs mode\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"i-048dfba6091eb0d1d\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271832,\"finding_id\":\"MWIxMjUyZGJjMjE3ZTFmZTcwZDdlMDNiNTI2YjQ3ZDB-MmQ5ZDgzMTJiMGIwYmM5ZGRmZjQ5OTk4ZmMzYWYyNmM=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765435671872,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0cc8c76c477f8196c\",\"name\":\"i-048dfba6091eb0d1d\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"bonsly\"},\"last_seen_at\":1765838271832,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-tools-common\"],\"name\":\"linux\",\"normalized_name\":\"linux\",\"version\":\"5.15.0-161.171\"},\"related_services\":[\"exposed_to_attacks:false\",\"elasticsearch-bundles\"],\"remediation\":{\"is_available\":false},\"resource_id\":\"2d9d8312b0b0bc9ddff49998fc3af26c\",\"resource_name\":\"i-048dfba6091eb0d1d\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00018,\"epss_severity\":\"low\"},\"impact_cvss\":\"safer\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2.7,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:H/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.5,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\"}},\"status\":\"auto_closed\",\"title\":\"kernel: f2fs: fix to trigger foreground gc during f2fs_map_blocks() in lfs mode\",\"vulnerability\":{\"hash\":\"99066567a1e5dbddd8e7f5e3724f31dbf66cac57a143756e292be14481f28759\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"auto_closed_at\":1765838271832,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"event_type:close\",\"fix_available:unavailable\",\"security-group:sg-0f39702193288cb41\",\"source:datadog\",\"severity:low\",\"auto-discovery.cluster-autoscaler.k8s.io/bonsly\",\"asset_type:host\",\"nodegroup:elasticsearch-bundles_elasticsearch-bundles-data\",\"image:ami-0cc8c76c477f8196c\",\"base_severity:medium\",\"site:datadoghq.com\",\"assignee:none\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:elasticsearch-bundles-data\",\"name:elasticsearch-bundles_elasticsearch-bundles-data\",\"vuln_id:99066567a1e5dbddd8e7f5e3724f31dbf66cac57a143756e292be14481f28759\",\"app:elasticsearch\",\"assignee_id:none\",\"in_production:false\",\"availability-zone:us-west-2b\",\"is_kube_cluster_experimental:false\",\"tags.datadoghq.com/version:8.19.6\",\"adp_enabled:false\",\"public_exploit_available:false\",\"iam_profile:k8s/prtest02-staging-dog-bonsly-kube-node_v2\",\"base_score:5.5\",\"elasticsearch-role:data\",\"team:compute-cloud-accounts\",\"score:2.7\",\"aws:ec2launchtemplate:id:lt-0e2373e62ce4d91a0\",\"nodegroups.datadoghq.com/name:elasticsearch-bundles-data\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2b\",\"managed_by_team:mars\",\"hash:99066567a1e5dbddd8e7f5e3724f31dbf66cac57a143756e292be14481f28759\",\"ecosystem:deb\",\"kube_node:ip-10-150-76-207.us-west-2.compute.internal\",\"ng_local_storage:false\",\"close_count:0\",\"ng_cluster_autoscaler:true\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:88mi\",\"nodegroups.datadoghq.com/namespace:elasticsearch-bundles\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:20\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:mars\",\"orch_cluster_id:ee224680-a73d-4437-809c-8cbdc2513b6c\",\"cluster_name:bonsly\",\"cpu_arch:arm64\",\"epss_raw_score:0.00018\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"k8s.io/cluster-autoscaler/node-template/taint/node:elasticsearch-bundles-data:noschedule\",\"exposure_time_days:4\",\"service:elasticsearch-bundles\",\"package_name:linux\",\"package_version:5.15.0-161.171\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"asset_id:i-048dfba6091eb0d1d\",\"datastore:elasticsearch\",\"scored:false\",\"kube_node_role:compute\",\"kubernetes_cluster:bonsly\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"node.datadoghq.com/version:v6-257-3\",\"autoscaling_group:prtest02-staging-dog-bonsly-k8s-ng-asg-e030273153b4de8b\",\"kube_cluster_name:bonsly\",\"instance-type:m6g.large\",\"kube_node_role:elasticsearch-bundles-data\",\"chart_name:elasticsearch\",\"region:us-west-2\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/elasticsearch-bundles-data\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:1900m\",\"instance_type:m6g.large\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:false\",\"aws_account:204235354797\",\"k8s.io/cluster-autoscaler/node-template/label/team:data-science\",\"node.datadoghq.com/cgroup:v2\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"team:data-science\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"aws:ec2:fleet-id:fleet-121c8084-5187-cc16-a418-27881156a65a\",\"vulnerability_status:auto-closed\",\"cve:cve-2025-38626\",\"kubernetes.io/cluster/bonsly:owned\",\"last_detected_minutes:0\",\"elasticsearch_cluster:elasticsearch-bundles\",\"tag:data\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"dd_compute_k8s_platform_version:v6-257-3\",\"cluster:elasticsearch-bundles\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:elasticsearch-bundles\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:7131mi\",\"previous_status:open\",\"alias:cve-2025-38626\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"env:staging\"],\"timestamp\":1765838271832}},{\"id\":\"ZGEwMTA4NDdiZjM0ZjI5ZDBlYmMyMzM3NWFkYmUyNWN-Y2NkNzgwNzIyYzk5N2VjNWI3N2VhOTE2YjNjNTAxY2E=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2025-22073\"],\"cve\":\"CVE-2025-22073\",\"id\":\"TRIVY-CVE-2025-22073\",\"modified_at\":1762201062000,\"published_at\":1744816561000,\"summary\":\"kernel: spufs: fix a leak on spufs_new_file() failure\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"i-0fe66c7f2fe27288a\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271620,\"finding_id\":\"ZGEwMTA4NDdiZjM0ZjI5ZDBlYmMyMzM3NWFkYmUyNWN-Y2NkNzgwNzIyYzk5N2VjNWI3N2VhOTE2YjNjNTAxY2E=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765438485381,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0afa99f6d7a0af2bf\",\"name\":\"i-0fe66c7f2fe27288a\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"machop\"},\"last_seen_at\":1765838271620,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-tools-6.8.0-1040-aws\",\"linux-aws-6.8-tools-6.8.0-1040\",\"linux-headers-6.8.0-1040-aws\",\"linux-aws-6.8-headers-6.8.0-1040\",\"linux-modules-6.8.0-1040-aws\"],\"name\":\"linux-aws-6.8\",\"normalized_name\":\"linux-aws-6.8\",\"version\":\"6.8.0-1040.42~22.04.1\"},\"related_services\":[\"exposed_to_attacks:false\",\"kafka\"],\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"linux-aws-6.8\",\"version\":\"6.8.0-1041.43~22.04.1\"}]},\"recommended\":{\"name\":\"linux-aws-6.8\",\"version\":\"6.8.0-1041.43~22.04.1\"}},\"resource_id\":\"ccd780722c997ec5b77ea916b3c501ca\",\"resource_name\":\"i-0fe66c7f2fe27288a\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00023,\"epss_severity\":\"low\"},\"impact_cvss\":\"safer\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2.7,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:H/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.5,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\"}},\"status\":\"auto_closed\",\"title\":\"kernel: spufs: fix a leak on spufs_new_file() failure\",\"vulnerability\":{\"cwes\":[\"CWE-401\"],\"hash\":\"faaac328c2e1d67f56a7d4aa1ed18a013ec6d28bf7312a14ad15692994675f50\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"auto_closed_at\":1765838271063,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"vuln_id:faaac328c2e1d67f56a7d4aa1ed18a013ec6d28bf7312a14ad15692994675f50\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"image:ami-0afa99f6d7a0af2bf\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"instance_type:i3en.2xlarge\",\"aws:ec2launchtemplate:id:lt-04cf13e9622f0ffea\",\"source:datadog\",\"severity:low\",\"k8s.io/cluster-autoscaler/node-template/label/node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"fix_available:available\",\"asset_type:host\",\"cluster_name:machop\",\"base_severity:medium\",\"site:datadoghq.com\",\"auto-discovery.cluster-autoscaler.k8s.io/machop\",\"k8s.io/cluster-autoscaler/node-template/label/version:1\",\"version:1\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:kafka-nodegroups\",\"assignee:none\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:kafka-medium\",\"assignee_id:none\",\"in_production:false\",\"availability-zone:us-west-2c\",\"is_kube_cluster_experimental:false\",\"hash:faaac328c2e1d67f56a7d4aa1ed18a013ec6d28bf7312a14ad15692994675f50\",\"adp_enabled:false\",\"public_exploit_available:false\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/kafka-medium\",\"base_score:5.5\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:streaming-platform\",\"team:compute-cloud-accounts\",\"score:2.7\",\"alias:cve-2025-22073\",\"aws:ec2:fleet-id:fleet-3a3e802e-dba5-6cb6-8eb8-07aa81064fd3\",\"ecosystem:deb\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:7900m\",\"iam_profile:k8s/prtest02-staging-dog-machop-kube-node_v2\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2c\",\"package_version:6.8.0-1040.42_22.04.1\",\"ng_cluster_autoscaler:true\",\"nodegroup:kafka_kafka-medium\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"cve:cve-2025-22073\",\"cloud_provider:aws\",\"nodegroups.datadoghq.com/namespace:kafka\",\"orch_cluster_id:982811b0-dc08-4859-b606-beb26c920dcc\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"name:kafka_kafka-medium\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"topicmappr_map:pool1\",\"nodegroups.datadoghq.com/name:kafka-medium\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"instance-type:i3en.2xlarge\",\"kube_node:ip-10-150-64-123.us-west-2.compute.internal\",\"k8s.io/cluster-autoscaler/node-template/label/kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/taint/node:kafka-medium:noschedule\",\"service:kafka\",\"kubernetes.io/cluster/machop:owned\",\"exposure_time_days:4\",\"k8s.io/cluster-autoscaler/node-template/label/service:kafka\",\"event_type:none\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"package_name:linux-aws-6.8\",\"security-group:sg-0ad037192bd9b2cfd\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"epss_raw_score:0.00023\",\"scored:false\",\"kube_node_role:compute\",\"autoscaling_group:prtest02-staging-dog-machop-k8s-ng-asg-89839a03c35d12d6\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"chart_name:kafka-nodegroups\",\"node.datadoghq.com/version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:45\",\"ng_local_storage:true\",\"region:us-west-2\",\"app:kafka\",\"team:streaming-platform\",\"running_kernel:false\",\"aws_account:204235354797\",\"node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"node.datadoghq.com/cgroup:v2\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:62990mi\",\"k8s.io/cluster-autoscaler/node-template/label/app:kafka\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kafka\",\"dd_rule_type:not-empty\",\"kube_node_role:kafka-medium\",\"asset_id:i-0fe66c7f2fe27288a\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:4999991611392\",\"last_detected_minutes:0\",\"kube_cluster_name:machop\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"dd_compute_k8s_platform_version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:1001mi\",\"kafka_node_flavor:medium\",\"kafka_broker_id:10002\",\"k8s.io/cluster-autoscaler/node-template/label/team:streaming-platform\",\"cluster:kafka-error-tracking-001\",\"managed_by_team:streaming-platform\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"kubernetes_cluster:machop\",\"env:staging\"],\"timestamp\":1765838271620}},{\"id\":\"MGZkNzMyYTYxMzcxNWQ0YmNmNTI1NTY2MGM4N2Q1MDh-Y2NkNzgwNzIyYzk5N2VjNWI3N2VhOTE2YjNjNTAxY2E=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2024-35998\"],\"cve\":\"CVE-2024-35998\",\"id\":\"TRIVY-CVE-2024-35998\",\"modified_at\":1736532731000,\"published_at\":1716200114000,\"summary\":\"kernel: smb3: fix lock ordering potential deadlock in cifs_sync_mid_result\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"i-0fe66c7f2fe27288a\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271581,\"finding_id\":\"MGZkNzMyYTYxMzcxNWQ0YmNmNTI1NTY2MGM4N2Q1MDh-Y2NkNzgwNzIyYzk5N2VjNWI3N2VhOTE2YjNjNTAxY2E=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765438485381,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0afa99f6d7a0af2bf\",\"name\":\"i-0fe66c7f2fe27288a\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"machop\"},\"last_seen_at\":1765838271581,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-tools-common\"],\"name\":\"linux\",\"normalized_name\":\"linux\",\"version\":\"5.15.0-161.171\"},\"related_services\":[\"exposed_to_attacks:false\",\"kafka\"],\"remediation\":{\"is_available\":false},\"resource_id\":\"ccd780722c997ec5b77ea916b3c501ca\",\"resource_name\":\"i-0fe66c7f2fe27288a\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00026,\"epss_severity\":\"low\"},\"impact_cvss\":\"safer\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2.7,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:H/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.5,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\"}},\"status\":\"auto_closed\",\"title\":\"kernel: smb3: fix lock ordering potential deadlock in cifs_sync_mid_result\",\"vulnerability\":{\"cwes\":[\"CWE-667\"],\"hash\":\"ca8998093cb8d3951624a7fb1696297c187b2065f96216107dcf0bbec01af443\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"auto_closed_at\":1765838271581,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"event_type:close\",\"image:ami-0afa99f6d7a0af2bf\",\"fix_available:unavailable\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"instance_type:i3en.2xlarge\",\"aws:ec2launchtemplate:id:lt-04cf13e9622f0ffea\",\"source:datadog\",\"severity:low\",\"k8s.io/cluster-autoscaler/node-template/label/node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"asset_type:host\",\"cluster_name:machop\",\"base_severity:medium\",\"site:datadoghq.com\",\"auto-discovery.cluster-autoscaler.k8s.io/machop\",\"k8s.io/cluster-autoscaler/node-template/label/version:1\",\"version:1\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:kafka-nodegroups\",\"assignee:none\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:kafka-medium\",\"assignee_id:none\",\"in_production:false\",\"availability-zone:us-west-2c\",\"is_kube_cluster_experimental:false\",\"adp_enabled:false\",\"public_exploit_available:false\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/kafka-medium\",\"base_score:5.5\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:streaming-platform\",\"team:compute-cloud-accounts\",\"score:2.7\",\"aws:ec2:fleet-id:fleet-3a3e802e-dba5-6cb6-8eb8-07aa81064fd3\",\"ecosystem:deb\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:7900m\",\"iam_profile:k8s/prtest02-staging-dog-machop-kube-node_v2\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2c\",\"ng_cluster_autoscaler:true\",\"nodegroup:kafka_kafka-medium\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"hash:ca8998093cb8d3951624a7fb1696297c187b2065f96216107dcf0bbec01af443\",\"cloud_provider:aws\",\"nodegroups.datadoghq.com/namespace:kafka\",\"orch_cluster_id:982811b0-dc08-4859-b606-beb26c920dcc\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"name:kafka_kafka-medium\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"topicmappr_map:pool1\",\"nodegroups.datadoghq.com/name:kafka-medium\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"instance-type:i3en.2xlarge\",\"kube_node:ip-10-150-64-123.us-west-2.compute.internal\",\"k8s.io/cluster-autoscaler/node-template/label/kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/taint/node:kafka-medium:noschedule\",\"service:kafka\",\"kubernetes.io/cluster/machop:owned\",\"exposure_time_days:4\",\"package_name:linux\",\"k8s.io/cluster-autoscaler/node-template/label/service:kafka\",\"package_version:5.15.0-161.171\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"security-group:sg-0ad037192bd9b2cfd\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"epss_raw_score:0.00026\",\"alias:cve-2024-35998\",\"scored:false\",\"kube_node_role:compute\",\"autoscaling_group:prtest02-staging-dog-machop-k8s-ng-asg-89839a03c35d12d6\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"chart_name:kafka-nodegroups\",\"node.datadoghq.com/version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:45\",\"ng_local_storage:true\",\"region:us-west-2\",\"app:kafka\",\"team:streaming-platform\",\"aws_account:204235354797\",\"node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"node.datadoghq.com/cgroup:v2\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:62990mi\",\"k8s.io/cluster-autoscaler/node-template/label/app:kafka\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kafka\",\"dd_rule_type:not-empty\",\"kube_node_role:kafka-medium\",\"asset_id:i-0fe66c7f2fe27288a\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:4999991611392\",\"last_detected_minutes:0\",\"kube_cluster_name:machop\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"cve:cve-2024-35998\",\"dd_compute_k8s_platform_version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:1001mi\",\"kafka_node_flavor:medium\",\"vuln_id:ca8998093cb8d3951624a7fb1696297c187b2065f96216107dcf0bbec01af443\",\"kafka_broker_id:10002\",\"k8s.io/cluster-autoscaler/node-template/label/team:streaming-platform\",\"previous_status:open\",\"cluster:kafka-error-tracking-001\",\"managed_by_team:streaming-platform\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"kubernetes_cluster:machop\",\"env:staging\"],\"timestamp\":1765838271581}},{\"id\":\"ZTlhYTM5OTg5Yzc4OTQ0OGNkZTY2NWI0YzVjZGFjYTl-MDQ4ZGQ5MDUzMjIzYWUzMzNlNjczMjA3ZGZkODMzOTQ=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"BIT-golang-2024-24789\",\"CGA-4r7q-83hj-9rrp\",\"CVE-2024-24789\",\"GHSA-236w-p7wf-5ph8\"],\"cve\":\"CVE-2024-24789\",\"id\":\"GO-2024-2888\",\"modified_at\":1729574938470,\"published_at\":1717541335000,\"summary\":\"Mishandling of corrupt central directory record in archive/zip\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"i-012cdbc8991688ee9\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271577,\"finding_id\":\"ZTlhYTM5OTg5Yzc4OTQ0OGNkZTY2NWI0YzVjZGFjYTl-MDQ4ZGQ5MDUzMjIzYWUzMzNlNjczMjA3ZGZkODMzOTQ=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765421661872,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0cc8c76c477f8196c\",\"name\":\"i-012cdbc8991688ee9\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"bonsly\"},\"last_seen_at\":1765838271577,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"stdlib\"],\"name\":\"stdlib\",\"normalized_name\":\"stdlib\",\"version\":\"v1.22.1\"},\"related_services\":[\"exposed_to_attacks:false\",\"elasticsearch-monitors\"],\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"stdlib\",\"version\":\"1.22.4\"}]},\"recommended\":{\"name\":\"stdlib\",\"version\":\"1.22.4\"}},\"resource_id\":\"048dd9053223ae333e673207dfd83394\",\"resource_name\":\"i-012cdbc8991688ee9\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00006,\"epss_severity\":\"low\"},\"impact_cvss\":\"safer\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2.7,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:H/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.5,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N\"}},\"status\":\"auto_closed\",\"title\":\"Mishandling of corrupt central directory record in archive/zip\",\"vulnerability\":{\"hash\":\"918ae76520381741e62c216ef01bd4d6ea21fa1730e4dcf1a11ad3141dd4a7f6\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838271577,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"ecosystem:go\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:148mi\",\"alias:cve-2024-24789\",\"event_type:close\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"alias:cga-4r7q-83hj-9rrp\",\"security-group:sg-0f39702193288cb41\",\"aws:ec2launchtemplate:id:lt-08847a5158ca7c73a\",\"source:datadog\",\"severity:low\",\"auto-discovery.cluster-autoscaler.k8s.io/bonsly\",\"fix_available:available\",\"hash:918ae76520381741e62c216ef01bd4d6ea21fa1730e4dcf1a11ad3141dd4a7f6\",\"nodegroups.datadoghq.com/name:elasticsearch-monitors-cell-c0-data\",\"asset_type:host\",\"image:ami-0cc8c76c477f8196c\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:elasticsearch-monitors-cell-c0-data\",\"base_severity:medium\",\"site:datadoghq.com\",\"instance-type:m6gd.xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/elasticsearch-monitors-cell-c0-data\",\"assignee:none\",\"app:elasticsearch\",\"cluster:elasticsearch-monitors-cell-c0\",\"assignee_id:none\",\"package_version:v1.22.1\",\"in_production:false\",\"alias:bit-golang-2024-24789\",\"availability-zone:us-west-2c\",\"is_kube_cluster_experimental:false\",\"adp_enabled:false\",\"tags.datadoghq.com/version:8.19.6\",\"public_exploit_available:false\",\"iam_profile:k8s/prtest02-staging-dog-bonsly-kube-node_v2\",\"base_score:5.5\",\"elasticsearch-role:data\",\"team:compute-cloud-accounts\",\"score:2.7\",\"cell:none\",\"managed_by_team:mars\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/label/team:monitor-resources-indexing\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2c\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:236991611392\",\"pool:data\",\"package_name:stdlib\",\"ng_cluster_autoscaler:true\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"vuln_id:918ae76520381741e62c216ef01bd4d6ea21fa1730e4dcf1a11ad3141dd4a7f6\",\"cloud_provider:aws\",\"instance_type:m6gd.xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:mars\",\"orch_cluster_id:ee224680-a73d-4437-809c-8cbdc2513b6c\",\"cluster_name:bonsly\",\"cpu_arch:arm64\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:15009mi\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"asset_id:i-012cdbc8991688ee9\",\"exposure_time_days:4\",\"elasticsearch_cluster:elasticsearch-monitors-cell-c0\",\"alias:ghsa-236w-p7wf-5ph8\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"cve:cve-2024-24789\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"datastore:elasticsearch\",\"scored:false\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:3900m\",\"kube_node_role:compute\",\"team:monitor-resources-indexing\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:40\",\"kubernetes_cluster:bonsly\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"node.datadoghq.com/version:v6-257-3\",\"kube_cluster_name:bonsly\",\"epss_raw_score:0.000060\",\"nodegroup:elasticsearch-monitors-cell-c0_elasticsearch-monitors-cell-c0-data\",\"ng_local_storage:true\",\"chart_name:elasticsearch\",\"region:us-west-2\",\"nodegroups.datadoghq.com/namespace:elasticsearch-monitors-cell-c0\",\"aws_account:204235354797\",\"node.datadoghq.com/cgroup:v2\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"name:elasticsearch-monitors-cell-c0_elasticsearch-monitors-cell-c0-data\",\"kube_node_role:elasticsearch-monitors-cell-c0-data\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:elasticsearch-monitors-cell-c0\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"autoscaling_group:prtest02-staging-dog-bonsly-k8s-ng-asg-1c82e59d5bb84439\",\"kubernetes.io/cluster/bonsly:owned\",\"service:elasticsearch-monitors\",\"last_detected_minutes:0\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"dd_compute_k8s_platform_version:v6-257-3\",\"aws:ec2:fleet-id:fleet-98a72b26-0bbc-411c-ac98-8e08a9b23a52\",\"previous_status:open\",\"k8s.io/cluster-autoscaler/node-template/taint/node:elasticsearch-monitors-cell-c0-data:noschedule\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"kube_node:ip-10-150-85-76.us-west-2.compute.internal\",\"env:staging\"],\"timestamp\":1765838271577}},{\"id\":\"M2JkYTQ1MzFmYTNlODAzZTI1ZjNlMWE1MWMzZWU5Mjh-MGFlYWQ3YmFjZDI2MGI5ZjIzYTIxYzk1NWE4NGRkNTc=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2024-2236\"],\"cve\":\"CVE-2024-2236\",\"id\":\"TRIVY-CVE-2024-2236\",\"modified_at\":1743614137000,\"published_at\":1709763357000,\"summary\":\"libgcrypt: vulnerable to Marvin Attack\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"i-051d6c5170313e729\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271574,\"finding_id\":\"M2JkYTQ1MzFmYTNlODAzZTI1ZjNlMWE1MWMzZWU5Mjh-MGFlYWQ3YmFjZDI2MGI5ZjIzYTIxYzk1NWE4NGRkNTc=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765397453913,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0afa99f6d7a0af2bf\",\"name\":\"i-051d6c5170313e729\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"machop\"},\"last_seen_at\":1765838271574,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"libgcrypt20\"],\"name\":\"libgcrypt20\",\"normalized_name\":\"libgcrypt20\",\"version\":\"1.9.4-3ubuntu3\"},\"related_services\":[\"exposed_to_attacks:false\",\"kafka\"],\"remediation\":{\"is_available\":false},\"resource_id\":\"0aead7bacd260b9f23a21c955a84dd57\",\"resource_name\":\"i-051d6c5170313e729\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00222,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":3.2,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:A/MAC:X/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.9,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N\"}},\"status\":\"auto_closed\",\"title\":\"libgcrypt: vulnerable to Marvin Attack\",\"vulnerability\":{\"cwes\":[\"CWE-208\"],\"hash\":\"8119a960f15010996dbda07e35608345ef82c25294c7288a45fd2dae7b0182bd\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"auto_closed_at\":1765838271574,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"asset_id:i-051d6c5170313e729\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"event_type:close\",\"image:ami-0afa99f6d7a0af2bf\",\"fix_available:unavailable\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"aws:ec2launchtemplate:id:lt-04cf13e9622f0ffea\",\"instance_type:i3en.2xlarge\",\"aws:ec2:fleet-id:fleet-1a9e8026-5b07-6494-a418-858a394c5003\",\"source:datadog\",\"severity:low\",\"epss_raw_score:0.00222\",\"k8s.io/cluster-autoscaler/node-template/label/node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"package_version:1.9.4-3ubuntu3\",\"asset_type:host\",\"cve:cve-2024-2236\",\"cluster_name:machop\",\"base_severity:medium\",\"auto-discovery.cluster-autoscaler.k8s.io/machop\",\"site:datadoghq.com\",\"k8s.io/cluster-autoscaler/node-template/label/version:1\",\"version:1\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:kafka-nodegroups\",\"assignee:none\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:kafka-medium\",\"assignee_id:none\",\"in_production:false\",\"is_kube_cluster_experimental:false\",\"availability-zone:us-west-2a\",\"adp_enabled:false\",\"public_exploit_available:false\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/kafka-medium\",\"base_score:5.9\",\"package_name:libgcrypt20\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:streaming-platform\",\"team:compute-cloud-accounts\",\"cluster:kafka-aws-metrics-001\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2a\",\"ecosystem:deb\",\"autoscaling_group:prtest02-staging-dog-machop-k8s-ng-asg-6bf23963f9da330\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:7900m\",\"iam_profile:k8s/prtest02-staging-dog-machop-kube-node_v2\",\"ng_cluster_autoscaler:true\",\"nodegroup:kafka_kafka-medium\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"nodegroups.datadoghq.com/namespace:kafka\",\"orch_cluster_id:982811b0-dc08-4859-b606-beb26c920dcc\",\"aws:ec2launchtemplate:version:1\",\"name:kafka_kafka-medium\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"topicmappr_map:pool1\",\"nodegroups.datadoghq.com/name:kafka-medium\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"instance-type:i3en.2xlarge\",\"alias:cve-2024-2236\",\"k8s.io/cluster-autoscaler/node-template/label/kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/taint/node:kafka-medium:noschedule\",\"service:kafka\",\"kubernetes.io/cluster/machop:owned\",\"exposure_time_days:5\",\"k8s.io/cluster-autoscaler/node-template/label/service:kafka\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"security-group:sg-0ad037192bd9b2cfd\",\"kube_node:ip-10-150-69-64.us-west-2.compute.internal\",\"score:3.2\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"scored:false\",\"kube_node_role:compute\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"chart_name:kafka-nodegroups\",\"node.datadoghq.com/version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:45\",\"ng_local_storage:true\",\"region:us-west-2\",\"app:kafka\",\"team:streaming-platform\",\"aws_account:204235354797\",\"node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:62990mi\",\"node.datadoghq.com/cgroup:v2\",\"k8s.io/cluster-autoscaler/node-template/label/app:kafka\",\"tool:infra\",\"vuln_id:8119a960f15010996dbda07e35608345ef82c25294c7288a45fd2dae7b0182bd\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kafka\",\"dd_rule_type:not-empty\",\"kafka_broker_id:10000\",\"kube_node_role:kafka-medium\",\"os_version:22.04\",\"hash:8119a960f15010996dbda07e35608345ef82c25294c7288a45fd2dae7b0182bd\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:4999991611392\",\"last_detected_minutes:0\",\"kube_cluster_name:machop\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"dd_compute_k8s_platform_version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:1001mi\",\"kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/label/team:streaming-platform\",\"previous_status:open\",\"managed_by_team:streaming-platform\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"kubernetes_cluster:machop\",\"env:staging\"],\"timestamp\":1765838271574}},{\"id\":\"M2QxOTQwOWMwZmViZGRlOTU2MDY2ZGRmODhlNWYxNGN-MjA1YThmN2UxODE1NmY1NjRmODNhZDQ2NzM3MTA5MWY=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2025-38215\"],\"cve\":\"CVE-2025-38215\",\"id\":\"TRIVY-CVE-2025-38215\",\"modified_at\":1762193769000,\"published_at\":1751638529000,\"summary\":\"kernel: fbdev: Fix do_register_framebuffer to prevent null-ptr-deref in fb_videomode_to_var\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"ip-10-150-67-24.us-west-2.compute.internal-machop\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271539,\"finding_id\":\"M2QxOTQwOWMwZmViZGRlOTU2MDY2ZGRmODhlNWYxNGN-MjA1YThmN2UxODE1NmY1NjRmODNhZDQ2NzM3MTA5MWY=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765445995855,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0afa99f6d7a0af2bf\",\"name\":\"ip-10-150-67-24.us-west-2.compute.internal-machop\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"machop\"},\"last_seen_at\":1765838271539,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-modules-6.8.0-1041-aws\",\"linux-tools-6.8.0-1040-aws\",\"linux-aws-6.8-tools-6.8.0-1040\",\"linux-headers-6.8.0-1040-aws\",\"linux-aws-6.8-headers-6.8.0-1040\",\"linux-headers-6.8.0-1041-aws\",\"linux-modules-6.8.0-1040-aws\",\"linux-aws-6.8-headers-6.8.0-1041\"],\"name\":\"linux-aws-6.8\",\"normalized_name\":\"linux-aws-6.8\",\"version\":\"6.8.0-1041.43~22.04.1\"},\"related_services\":[\"exposed_to_attacks:false\",\"kafka\"],\"remediation\":{\"is_available\":false},\"resource_id\":\"205a8f7e18156f564f83ad467371091f\",\"resource_name\":\"ip-10-150-67-24.us-west-2.compute.internal-machop\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00058,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"medium\",\"severity_details\":{\"adjusted\":{\"score\":4.7,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:X/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":7,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H\"}},\"status\":\"auto_closed\",\"title\":\"kernel: fbdev: Fix do_register_framebuffer to prevent null-ptr-deref in fb_videomode_to_var\",\"vulnerability\":{\"hash\":\"63e993a9f0ae0d64cd927f6117fa09ae0790921bc1da8fec4768f603d7ac0ac8\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"auto_closed_at\":1765838270450,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"image:ami-0afa99f6d7a0af2bf\",\"fix_available:unavailable\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"instance_type:i3en.2xlarge\",\"aws:ec2launchtemplate:id:lt-04cf13e9622f0ffea\",\"source:datadog\",\"k8s.io/cluster-autoscaler/node-template/label/node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"asset_type:host\",\"cluster_name:machop\",\"vuln_id:63e993a9f0ae0d64cd927f6117fa09ae0790921bc1da8fec4768f603d7ac0ac8\",\"site:datadoghq.com\",\"auto-discovery.cluster-autoscaler.k8s.io/machop\",\"k8s.io/cluster-autoscaler/node-template/label/version:1\",\"package_version:6.8.0-1041.43_22.04.1\",\"version:1\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:kafka-nodegroups\",\"assignee:none\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:kafka-medium\",\"assignee_id:none\",\"in_production:false\",\"availability-zone:us-west-2c\",\"is_kube_cluster_experimental:false\",\"kube_node:ip-10-150-67-24.us-west-2.compute.internal\",\"adp_enabled:false\",\"public_exploit_available:false\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/kafka-medium\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:streaming-platform\",\"team:compute-cloud-accounts\",\"severity:medium\",\"running_kernel:true\",\"ecosystem:deb\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:7900m\",\"iam_profile:k8s/prtest02-staging-dog-machop-kube-node_v2\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2c\",\"ng_cluster_autoscaler:true\",\"nodegroup:kafka_kafka-medium\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"cloud_provider:aws\",\"nodegroups.datadoghq.com/namespace:kafka\",\"orch_cluster_id:982811b0-dc08-4859-b606-beb26c920dcc\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"name:kafka_kafka-medium\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"topicmappr_map:pool1\",\"asset_id:ip-10-150-67-24.us-west-2.compute.internal-machop\",\"nodegroups.datadoghq.com/name:kafka-medium\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"instance-type:i3en.2xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/taint/node:kafka-medium:noschedule\",\"service:kafka\",\"kubernetes.io/cluster/machop:owned\",\"exposure_time_days:4\",\"k8s.io/cluster-autoscaler/node-template/label/service:kafka\",\"event_type:none\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"package_name:linux-aws-6.8\",\"security-group:sg-0ad037192bd9b2cfd\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"scored:false\",\"kube_node_role:compute\",\"autoscaling_group:prtest02-staging-dog-machop-k8s-ng-asg-89839a03c35d12d6\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"chart_name:kafka-nodegroups\",\"node.datadoghq.com/version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:45\",\"ng_local_storage:true\",\"region:us-west-2\",\"app:kafka\",\"team:streaming-platform\",\"running_kernel:false\",\"aws_account:204235354797\",\"node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"node.datadoghq.com/cgroup:v2\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:62990mi\",\"k8s.io/cluster-autoscaler/node-template/label/app:kafka\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kafka\",\"score:4.7\",\"base_score:7.0\",\"dd_rule_type:not-empty\",\"alias:cve-2025-38215\",\"kube_node_role:kafka-medium\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:4999991611392\",\"aws:ec2:fleet-id:fleet-321c02a4-730f-4616-0eb0-8d80d9952fcf\",\"last_detected_minutes:0\",\"hash:63e993a9f0ae0d64cd927f6117fa09ae0790921bc1da8fec4768f603d7ac0ac8\",\"base_severity:high\",\"kube_cluster_name:machop\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"dd_compute_k8s_platform_version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:1001mi\",\"kafka_node_flavor:medium\",\"kafka_broker_id:10002\",\"k8s.io/cluster-autoscaler/node-template/label/team:streaming-platform\",\"cluster:kafka-apm-stats-intake-001\",\"epss_raw_score:0.00058\",\"cve:cve-2025-38215\",\"managed_by_team:streaming-platform\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"kubernetes_cluster:machop\",\"env:staging\"],\"timestamp\":1765838271539}},{\"id\":\"MTE0MGIxYWM1OWVmMjc2YjhiOGNmMTUzNTRlNzBjYWF-MDQ4ZGQ5MDUzMjIzYWUzMzNlNjczMjA3ZGZkODMzOTQ=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2025-40016\"],\"cve\":\"CVE-2025-40016\",\"id\":\"TRIVY-CVE-2025-40016\",\"modified_at\":1761075085000,\"published_at\":1760976938000,\"summary\":\"kernel: media: uvcvideo: Mark invalid entities with id UVC_INVALID_ENTITY_ID\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"i-012cdbc8991688ee9\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271538,\"finding_id\":\"MTE0MGIxYWM1OWVmMjc2YjhiOGNmMTUzNTRlNzBjYWF-MDQ4ZGQ5MDUzMjIzYWUzMzNlNjczMjA3ZGZkODMzOTQ=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765421661872,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0cc8c76c477f8196c\",\"name\":\"i-012cdbc8991688ee9\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"bonsly\"},\"last_seen_at\":1765838271538,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-tools-common\"],\"name\":\"linux\",\"normalized_name\":\"linux\",\"version\":\"5.15.0-161.171\"},\"related_services\":[\"exposed_to_attacks:false\",\"elasticsearch-monitors\"],\"remediation\":{\"is_available\":false},\"resource_id\":\"048dd9053223ae333e673207dfd83394\",\"resource_name\":\"i-012cdbc8991688ee9\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00026,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"medium\",\"severity_details\":{\"adjusted\":{\"score\":4.7,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:X/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":7,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H\"}},\"status\":\"auto_closed\",\"title\":\"kernel: media: uvcvideo: Mark invalid entities with id UVC_INVALID_ENTITY_ID\",\"vulnerability\":{\"hash\":\"7b4dd037d291b0e36b6afcbc93621c10831fdaa66a0ac6d217eb1121fb62bfc5\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"auto_closed_at\":1765838271538,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:148mi\",\"event_type:close\",\"fix_available:unavailable\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"security-group:sg-0f39702193288cb41\",\"aws:ec2launchtemplate:id:lt-08847a5158ca7c73a\",\"source:datadog\",\"auto-discovery.cluster-autoscaler.k8s.io/bonsly\",\"nodegroups.datadoghq.com/name:elasticsearch-monitors-cell-c0-data\",\"asset_type:host\",\"image:ami-0cc8c76c477f8196c\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:elasticsearch-monitors-cell-c0-data\",\"site:datadoghq.com\",\"instance-type:m6gd.xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/elasticsearch-monitors-cell-c0-data\",\"assignee:none\",\"app:elasticsearch\",\"cluster:elasticsearch-monitors-cell-c0\",\"assignee_id:none\",\"in_production:false\",\"availability-zone:us-west-2c\",\"is_kube_cluster_experimental:false\",\"adp_enabled:false\",\"tags.datadoghq.com/version:8.19.6\",\"public_exploit_available:false\",\"iam_profile:k8s/prtest02-staging-dog-bonsly-kube-node_v2\",\"elasticsearch-role:data\",\"team:compute-cloud-accounts\",\"severity:medium\",\"cell:none\",\"managed_by_team:mars\",\"ecosystem:deb\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/label/team:monitor-resources-indexing\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2c\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:236991611392\",\"pool:data\",\"ng_cluster_autoscaler:true\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"cloud_provider:aws\",\"instance_type:m6gd.xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:mars\",\"orch_cluster_id:ee224680-a73d-4437-809c-8cbdc2513b6c\",\"vuln_id:7b4dd037d291b0e36b6afcbc93621c10831fdaa66a0ac6d217eb1121fb62bfc5\",\"cluster_name:bonsly\",\"cpu_arch:arm64\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:15009mi\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"asset_id:i-012cdbc8991688ee9\",\"exposure_time_days:4\",\"package_name:linux\",\"elasticsearch_cluster:elasticsearch-monitors-cell-c0\",\"package_version:5.15.0-161.171\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"epss_raw_score:0.00026\",\"datastore:elasticsearch\",\"scored:false\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:3900m\",\"kube_node_role:compute\",\"team:monitor-resources-indexing\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:40\",\"kubernetes_cluster:bonsly\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"node.datadoghq.com/version:v6-257-3\",\"kube_cluster_name:bonsly\",\"nodegroup:elasticsearch-monitors-cell-c0_elasticsearch-monitors-cell-c0-data\",\"ng_local_storage:true\",\"chart_name:elasticsearch\",\"region:us-west-2\",\"nodegroups.datadoghq.com/namespace:elasticsearch-monitors-cell-c0\",\"aws_account:204235354797\",\"node.datadoghq.com/cgroup:v2\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"name:elasticsearch-monitors-cell-c0_elasticsearch-monitors-cell-c0-data\",\"kube_node_role:elasticsearch-monitors-cell-c0-data\",\"base_score:7.0\",\"score:4.7\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:elasticsearch-monitors-cell-c0\",\"dd_rule_type:not-empty\",\"hash:7b4dd037d291b0e36b6afcbc93621c10831fdaa66a0ac6d217eb1121fb62bfc5\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"autoscaling_group:prtest02-staging-dog-bonsly-k8s-ng-asg-1c82e59d5bb84439\",\"kubernetes.io/cluster/bonsly:owned\",\"service:elasticsearch-monitors\",\"last_detected_minutes:0\",\"base_severity:high\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"dd_compute_k8s_platform_version:v6-257-3\",\"aws:ec2:fleet-id:fleet-98a72b26-0bbc-411c-ac98-8e08a9b23a52\",\"cve:cve-2025-40016\",\"previous_status:open\",\"alias:cve-2025-40016\",\"k8s.io/cluster-autoscaler/node-template/taint/node:elasticsearch-monitors-cell-c0-data:noschedule\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"kube_node:ip-10-150-85-76.us-west-2.compute.internal\",\"env:staging\"],\"timestamp\":1765838271538}},{\"id\":\"NGNhMjdiNWNjOTEwMTliZGEyYzhlYjg2YzliYTRlYWF-NzM1NzFmMGZiZDI0Mjc1ODI4ODAxMzRlYTJkMWVhY2M=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CGA-9vf9-m4f8-6392\",\"CGA-9vg5-h493-cxr7\",\"CGA-chh8-vhg4-2qj7\",\"CGA-g5hx-8r47-pf39\",\"CGA-hmfp-f3v3-528v\",\"CGA-hrqx-74pg-5m88\",\"CGA-m474-c57g-8945\",\"CGA-r356-23m2-5p37\",\"CGA-v3wf-pwmr-vcw5\",\"CGA-w52c-j6q8-cf23\",\"CGA-w7jq-8v28-882j\",\"CVE-2024-28180\",\"GO-2024-2631\"],\"cve\":\"CVE-2024-28180\",\"id\":\"GHSA-c5q2-7r4c-mv6g\",\"modified_at\":1739473645000,\"published_at\":1709852084000,\"summary\":\"Go JOSE vulnerable to Improper Handling of Highly Compressed Data (Data Amplification)\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"i-053290257b9479659\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271526,\"finding_id\":\"NGNhMjdiNWNjOTEwMTliZGEyYzhlYjg2YzliYTRlYWF-NzM1NzFmMGZiZDI0Mjc1ODI4ODAxMzRlYTJkMWVhY2M=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765421721839,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0afa99f6d7a0af2bf\",\"name\":\"i-053290257b9479659\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"machop\"},\"last_seen_at\":1765838271526,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"gopkg.in/square/go-jose.v2\"],\"name\":\"gopkg.in/square/go-jose.v2\",\"normalized_name\":\"gopkg.in/square/go-jose.v2\",\"version\":\"v2.6.0\"},\"related_services\":[\"exposed_to_attacks:false\",\"kafka\"],\"remediation\":{\"is_available\":true},\"resource_id\":\"73571f0fbd2427582880134ea2d1eacc\",\"resource_name\":\"i-053290257b9479659\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":true,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.03644,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2.6,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:A/MAC:X/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":4.3,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L\"}},\"status\":\"auto_closed\",\"title\":\"Go JOSE vulnerable to Improper Handling of Highly Compressed Data (Data Amplification)\",\"vulnerability\":{\"cwes\":[\"CWE-409\"],\"hash\":\"89c9a99fe3d5d66e9a98f65c64ca0057a9d31143d3724f56a894093b3f78c2a8\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838271525,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"ecosystem:go\",\"alias:go-2024-2631\",\"event_type:close\",\"image:ami-0afa99f6d7a0af2bf\",\"alias:cga-hmfp-f3v3-528v\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"aws:ec2launchtemplate:id:lt-04cf13e9622f0ffea\",\"instance_type:i3en.2xlarge\",\"hash:89c9a99fe3d5d66e9a98f65c64ca0057a9d31143d3724f56a894093b3f78c2a8\",\"source:datadog\",\"severity:low\",\"k8s.io/cluster-autoscaler/node-template/label/node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"fix_available:available\",\"asset_type:host\",\"cluster_name:machop\",\"base_severity:medium\",\"aws:ec2:fleet-id:fleet-1aa5a186-ab36-c1b4-063a-86028119420b\",\"asset_id:i-053290257b9479659\",\"auto-discovery.cluster-autoscaler.k8s.io/machop\",\"site:datadoghq.com\",\"k8s.io/cluster-autoscaler/node-template/label/version:1\",\"version:1\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:kafka-nodegroups\",\"assignee:none\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:kafka-medium\",\"assignee_id:none\",\"alias:cga-w7jq-8v28-882j\",\"in_production:false\",\"vuln_id:89c9a99fe3d5d66e9a98f65c64ca0057a9d31143d3724f56a894093b3f78c2a8\",\"is_kube_cluster_experimental:false\",\"alias:cve-2024-28180\",\"availability-zone:us-west-2a\",\"alias:cga-g5hx-8r47-pf39\",\"adp_enabled:false\",\"public_exploit_available:false\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/kafka-medium\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:streaming-platform\",\"score:2.6\",\"team:compute-cloud-accounts\",\"package_name:gopkg.in/square/go-jose.v2\",\"kube_node:ip-10-150-70-73.us-west-2.compute.internal\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2a\",\"autoscaling_group:prtest02-staging-dog-machop-k8s-ng-asg-6bf23963f9da330\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:7900m\",\"alias:cga-w52c-j6q8-cf23\",\"iam_profile:k8s/prtest02-staging-dog-machop-kube-node_v2\",\"ng_cluster_autoscaler:true\",\"nodegroup:kafka_kafka-medium\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"nodegroups.datadoghq.com/namespace:kafka\",\"orch_cluster_id:982811b0-dc08-4859-b606-beb26c920dcc\",\"aws:ec2launchtemplate:version:1\",\"name:kafka_kafka-medium\",\"epss_raw_score:0.03644\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"topicmappr_map:pool1\",\"nodegroups.datadoghq.com/name:kafka-medium\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"instance-type:i3en.2xlarge\",\"alias:cga-v3wf-pwmr-vcw5\",\"k8s.io/cluster-autoscaler/node-template/label/kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/taint/node:kafka-medium:noschedule\",\"service:kafka\",\"kubernetes.io/cluster/machop:owned\",\"package_version:v2.6.0\",\"exposure_time_days:4\",\"base_score:4.3\",\"k8s.io/cluster-autoscaler/node-template/label/service:kafka\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"alias:cga-chh8-vhg4-2qj7\",\"security-group:sg-0ad037192bd9b2cfd\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"scored:false\",\"cve:cve-2024-28180\",\"kube_node_role:compute\",\"cluster:kafka-collab-intake-001\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"chart_name:kafka-nodegroups\",\"node.datadoghq.com/version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:45\",\"alias:cga-m474-c57g-8945\",\"ng_local_storage:true\",\"region:us-west-2\",\"alias:cga-r356-23m2-5p37\",\"alias:cga-hrqx-74pg-5m88\",\"app:kafka\",\"team:streaming-platform\",\"alias:cga-9vg5-h493-cxr7\",\"aws_account:204235354797\",\"node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:62990mi\",\"node.datadoghq.com/cgroup:v2\",\"k8s.io/cluster-autoscaler/node-template/label/app:kafka\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kafka\",\"dd_rule_type:not-empty\",\"kafka_broker_id:10000\",\"kube_node_role:kafka-medium\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"alias:cga-9vf9-m4f8-6392\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:4999991611392\",\"last_detected_minutes:0\",\"kube_cluster_name:machop\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"dd_compute_k8s_platform_version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:1001mi\",\"kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/label/team:streaming-platform\",\"previous_status:open\",\"managed_by_team:streaming-platform\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"kubernetes_cluster:machop\",\"env:staging\"],\"timestamp\":1765838271526}},{\"id\":\"NWEzNGIyY2U2ZDQ5YWQ1MzI4YjJmNThmNjIwYmUzZWN-MGFlYWQ3YmFjZDI2MGI5ZjIzYTIxYzk1NWE4NGRkNTc=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2025-21908\"],\"cve\":\"CVE-2025-21908\",\"id\":\"TRIVY-CVE-2025-21908\",\"modified_at\":1759349912000,\"published_at\":1743524121000,\"summary\":\"kernel: NFS: fix nfs_release_folio() to not deadlock via kcompactd writeback\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"i-051d6c5170313e729\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271495,\"finding_id\":\"NWEzNGIyY2U2ZDQ5YWQ1MzI4YjJmNThmNjIwYmUzZWN-MGFlYWQ3YmFjZDI2MGI5ZjIzYTIxYzk1NWE4NGRkNTc=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765397453913,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0afa99f6d7a0af2bf\",\"name\":\"i-051d6c5170313e729\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"machop\"},\"last_seen_at\":1765838271495,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-tools-common\"],\"name\":\"linux\",\"normalized_name\":\"linux\",\"version\":\"5.15.0-161.171\"},\"related_services\":[\"exposed_to_attacks:false\",\"kafka\"],\"remediation\":{\"is_available\":false},\"resource_id\":\"0aead7bacd260b9f23a21c955a84dd57\",\"resource_name\":\"i-051d6c5170313e729\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00014,\"epss_severity\":\"low\"},\"impact_cvss\":\"safer\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2.7,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:H/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.5,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\"}},\"status\":\"auto_closed\",\"title\":\"kernel: NFS: fix nfs_release_folio() to not deadlock via kcompactd writeback\",\"vulnerability\":{\"cwes\":[\"CWE-667\"],\"hash\":\"4570b3e1911225fe950b59c16276bbd1c54abcdfb97343c6346b720728e37a2f\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"auto_closed_at\":1765838271495,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"asset_id:i-051d6c5170313e729\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"event_type:close\",\"image:ami-0afa99f6d7a0af2bf\",\"fix_available:unavailable\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"aws:ec2launchtemplate:id:lt-04cf13e9622f0ffea\",\"instance_type:i3en.2xlarge\",\"aws:ec2:fleet-id:fleet-1a9e8026-5b07-6494-a418-858a394c5003\",\"source:datadog\",\"severity:low\",\"k8s.io/cluster-autoscaler/node-template/label/node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"asset_type:host\",\"cluster_name:machop\",\"base_severity:medium\",\"vuln_id:4570b3e1911225fe950b59c16276bbd1c54abcdfb97343c6346b720728e37a2f\",\"auto-discovery.cluster-autoscaler.k8s.io/machop\",\"site:datadoghq.com\",\"k8s.io/cluster-autoscaler/node-template/label/version:1\",\"version:1\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:kafka-nodegroups\",\"assignee:none\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:kafka-medium\",\"assignee_id:none\",\"in_production:false\",\"is_kube_cluster_experimental:false\",\"availability-zone:us-west-2a\",\"adp_enabled:false\",\"public_exploit_available:false\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/kafka-medium\",\"base_score:5.5\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:streaming-platform\",\"team:compute-cloud-accounts\",\"score:2.7\",\"cluster:kafka-aws-metrics-001\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2a\",\"ecosystem:deb\",\"autoscaling_group:prtest02-staging-dog-machop-k8s-ng-asg-6bf23963f9da330\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:7900m\",\"iam_profile:k8s/prtest02-staging-dog-machop-kube-node_v2\",\"ng_cluster_autoscaler:true\",\"nodegroup:kafka_kafka-medium\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"nodegroups.datadoghq.com/namespace:kafka\",\"orch_cluster_id:982811b0-dc08-4859-b606-beb26c920dcc\",\"aws:ec2launchtemplate:version:1\",\"name:kafka_kafka-medium\",\"epss_raw_score:0.00014\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"topicmappr_map:pool1\",\"nodegroups.datadoghq.com/name:kafka-medium\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"instance-type:i3en.2xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/taint/node:kafka-medium:noschedule\",\"service:kafka\",\"kubernetes.io/cluster/machop:owned\",\"package_name:linux\",\"exposure_time_days:5\",\"k8s.io/cluster-autoscaler/node-template/label/service:kafka\",\"package_version:5.15.0-161.171\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"security-group:sg-0ad037192bd9b2cfd\",\"kube_node:ip-10-150-69-64.us-west-2.compute.internal\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"scored:false\",\"kube_node_role:compute\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"chart_name:kafka-nodegroups\",\"node.datadoghq.com/version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:45\",\"ng_local_storage:true\",\"region:us-west-2\",\"app:kafka\",\"team:streaming-platform\",\"aws_account:204235354797\",\"node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:62990mi\",\"node.datadoghq.com/cgroup:v2\",\"k8s.io/cluster-autoscaler/node-template/label/app:kafka\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kafka\",\"dd_rule_type:not-empty\",\"alias:cve-2025-21908\",\"kafka_broker_id:10000\",\"kube_node_role:kafka-medium\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:4999991611392\",\"last_detected_minutes:0\",\"kube_cluster_name:machop\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"dd_compute_k8s_platform_version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:1001mi\",\"kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/label/team:streaming-platform\",\"previous_status:open\",\"cve:cve-2025-21908\",\"hash:4570b3e1911225fe950b59c16276bbd1c54abcdfb97343c6346b720728e37a2f\",\"managed_by_team:streaming-platform\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"kubernetes_cluster:machop\",\"env:staging\"],\"timestamp\":1765838271495}},{\"id\":\"ZDc1MGVmYjlhNWE4ZDIxOGY0ZDFmMDQ5ZDU5NDhhNTl-Y2NkNzgwNzIyYzk5N2VjNWI3N2VhOTE2YjNjNTAxY2E=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2025-39806\"],\"cve\":\"CVE-2025-39806\",\"id\":\"TRIVY-CVE-2025-39806\",\"modified_at\":1762193808000,\"published_at\":1758028551000,\"summary\":\"kernel: HID: multitouch: fix slab out-of-bounds access in mt_report_fixup()\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"204235354797\",\"cloud_provider\":\"aws\",\"display_name\":\"i-0fe66c7f2fe27288a\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838271483,\"finding_id\":\"ZDc1MGVmYjlhNWE4ZDIxOGY0ZDFmMDQ5ZDU5NDhhNTl-Y2NkNzgwNzIyYzk5N2VjNWI3N2VhOTE2YjNjNTAxY2E=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765438485381,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0afa99f6d7a0af2bf\",\"name\":\"i-0fe66c7f2fe27288a\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"machop\"},\"last_seen_at\":1765838271483,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-tools-common\"],\"name\":\"linux\",\"normalized_name\":\"linux\",\"version\":\"5.15.0-161.171\"},\"related_services\":[\"exposed_to_attacks:false\",\"kafka\"],\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"linux\",\"version\":\"5.15.0-163.173\"}]},\"recommended\":{\"name\":\"linux\",\"version\":\"5.15.0-163.173\"}},\"resource_id\":\"ccd780722c997ec5b77ea916b3c501ca\",\"resource_name\":\"i-0fe66c7f2fe27288a\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00036,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":3.6,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:X/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.8,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:H\"}},\"status\":\"auto_closed\",\"title\":\"kernel: HID: multitouch: fix slab out-of-bounds access in mt_report_fixup()\",\"vulnerability\":{\"hash\":\"f48ef5d7531edd145ad05e7a4d3ad369393a320e87e7854007d0777f1d24624f\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"auto_closed_at\":1765838271483,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"event_type:close\",\"image:ami-0afa99f6d7a0af2bf\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"instance_type:i3en.2xlarge\",\"aws:ec2launchtemplate:id:lt-04cf13e9622f0ffea\",\"source:datadog\",\"severity:low\",\"k8s.io/cluster-autoscaler/node-template/label/node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"fix_available:available\",\"asset_type:host\",\"cluster_name:machop\",\"base_severity:medium\",\"site:datadoghq.com\",\"auto-discovery.cluster-autoscaler.k8s.io/machop\",\"k8s.io/cluster-autoscaler/node-template/label/version:1\",\"version:1\",\"k8s.io/cluster-autoscaler/node-template/label/chart_name:kafka-nodegroups\",\"assignee:none\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:kafka-medium\",\"assignee_id:none\",\"in_production:false\",\"availability-zone:us-west-2c\",\"is_kube_cluster_experimental:false\",\"cve:cve-2025-39806\",\"adp_enabled:false\",\"public_exploit_available:false\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/kafka-medium\",\"base_score:5.8\",\"k8s.io/cluster-autoscaler/node-template/label/managed_by_team:streaming-platform\",\"team:compute-cloud-accounts\",\"hash:f48ef5d7531edd145ad05e7a4d3ad369393a320e87e7854007d0777f1d24624f\",\"aws:ec2:fleet-id:fleet-3a3e802e-dba5-6cb6-8eb8-07aa81064fd3\",\"ecosystem:deb\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:7900m\",\"iam_profile:k8s/prtest02-staging-dog-machop-kube-node_v2\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2c\",\"ng_cluster_autoscaler:true\",\"nodegroup:kafka_kafka-medium\",\"service_exposed_to_attacks:false\",\"account:staging-prtest02-yodel\",\"cloud_provider:aws\",\"nodegroups.datadoghq.com/namespace:kafka\",\"orch_cluster_id:982811b0-dc08-4859-b606-beb26c920dcc\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"name:kafka_kafka-medium\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"topicmappr_map:pool1\",\"nodegroups.datadoghq.com/name:kafka-medium\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"instance-type:i3en.2xlarge\",\"kube_node:ip-10-150-64-123.us-west-2.compute.internal\",\"k8s.io/cluster-autoscaler/node-template/label/kafka_node_flavor:medium\",\"k8s.io/cluster-autoscaler/node-template/taint/node:kafka-medium:noschedule\",\"service:kafka\",\"kubernetes.io/cluster/machop:owned\",\"exposure_time_days:4\",\"score:3.6\",\"package_name:linux\",\"alias:cve-2025-39806\",\"k8s.io/cluster-autoscaler/node-template/label/service:kafka\",\"package_version:5.15.0-161.171\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"security-group:sg-0ad037192bd9b2cfd\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"scored:false\",\"kube_node_role:compute\",\"autoscaling_group:prtest02-staging-dog-machop-k8s-ng-asg-89839a03c35d12d6\",\"security-group:sg-0209ab6974808b99b\",\"os_name:ubuntu\",\"chart_name:kafka-nodegroups\",\"node.datadoghq.com/version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:45\",\"ng_local_storage:true\",\"region:us-west-2\",\"epss_raw_score:0.00036\",\"app:kafka\",\"team:streaming-platform\",\"aws_account:204235354797\",\"node-lifecycle.datadoghq.com/allow-delete-data-on-eviction:true\",\"vuln_id:f48ef5d7531edd145ad05e7a4d3ad369393a320e87e7854007d0777f1d24624f\",\"node.datadoghq.com/cgroup:v2\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:62990mi\",\"k8s.io/cluster-autoscaler/node-template/label/app:kafka\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kafka\",\"dd_rule_type:not-empty\",\"kube_node_role:kafka-medium\",\"asset_id:i-0fe66c7f2fe27288a\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:4999991611392\",\"last_detected_minutes:0\",\"kube_cluster_name:machop\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"dd_compute_k8s_platform_version:v6-257-3\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:1001mi\",\"kafka_node_flavor:medium\",\"kafka_broker_id:10002\",\"k8s.io/cluster-autoscaler/node-template/label/team:streaming-platform\",\"previous_status:open\",\"cluster:kafka-error-tracking-001\",\"managed_by_team:streaming-platform\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"kubernetes_cluster:machop\",\"env:staging\"],\"timestamp\":1765838271483}}],\"meta\":{\"elapsed\":1195,\"page\":{\"after\":\"eyJhZnRlciI6IkF3QUFBWnNrS2JQNzd2ekswQUFBQUJoQlduTnJTMkpRTjBGQlFUTnZOMEpJYkRVM00wbDZURVlBQUFBa1pERTVZakkwTWprdFlqWTFPUzAwWlRnMExUZzVNMll0WkRVNE5HTTVOVGRqWTJGa0FBQUFFZyIsInZhbHVlcyI6WzE3NjU4MzgyNzE0ODMsIjIwMjUtMTItMTVUMjI6Mzc6NTEuNDgzWiIsLTI4NTQyMjg5Nl19\"},\"request_id\":\"pddv1ChZEV0JfaHozRVJJT3B1aUpZVnRRSGZBIiwKHMkNUONObwGrUBI2wC3SsGESwWt0gp1AaEa5fmMSDOob7VueP1L1GfbrUg\",\"status\":\"done\"},\"links\":{\"next\":\"/api/v2/security/findings?page%5Bcursor%5D=eyJhZnRlciI6IkF3QUFBWnNrS2JQNzd2ekswQUFBQUJoQlduTnJTMkpRTjBGQlFUTnZOMEpJYkRVM00wbDZURVlBQUFBa1pERTVZakkwTWprdFlqWTFPUzAwWlRnMExUZzVNMll0WkRVNE5HTTVOVGRqWTJGa0FBQUFFZyIsInZhbHVlcyI6WzE3NjU4MzgyNzE0ODMsIjIwMjUtMTItMTVUMjI6Mzc6NTEuNDgzWiIsLTI4NTQyMjg5Nl19\\u0026page%5Blimit%5D=10\\u0026sort=-%40detection_changed_at\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List security findings returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-15T22:38:44.211Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/findings", + "query": [ + [ + "page[limit]", + "5" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"OXBuLXltcS1yaGh-aS0wODVkZTgwNWY4NTJlZGQxNA==\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"cloud_resource\":{\"account\":\"727006795293\",\"category\":\"hosts\",\"cloud_provider\":\"aws\",\"configuration\":{\"account_id\":\"727006795293\",\"agent_framework_id\":\"cis-ubuntu2204\",\"agent_rule_id\":\"xccdf_org.ssgproject.content_rule_package_bind_removed\",\"agent_version\":\"7.74.0-rc.3\",\"evaluator\":\"xccdf\",\"framework_requirement\":[\"cis-ubuntu2004/DNS-Server\",\"cis-rhel9/DNS-Server\",\"cis-ubuntu2404/DNS-Server\",\"cis-rhel8/DNS-Server\",\"cis-rhel7/DNS-Server\",\"cis-amzn2/DNS-Server\",\"cis-al2023/DNS-Server\",\"cis-ubuntu2204/DNS-Server\",\"cis-almalinux9/DNS-Server\"],\"framework_requirement_control\":[\"cis-ubuntu2004/DNS-Server/2.2.8\",\"cis-ubuntu2404/DNS-Server/2.1.4\",\"cis-rhel7/DNS-Server/2.2.4\",\"cis-almalinux9/DNS-Server/2.1.4\",\"cis-rhel8/DNS-Server/2.2.4\",\"cis-rhel9/DNS-Server/2.1.4\",\"cis-al2023/DNS-Server/2.2.5\",\"cis-amzn2/DNS-Server/2.2.4\",\"cis-ubuntu2204/DNS-Server/2.2.7\"]},\"region\":\"us-east-1\"},\"compliance\":{\"evaluation\":\"pass\",\"framework_requirement_controls\":[\"cis-ubuntu2004/DNS-Server/2.2.8\",\"cis-ubuntu2404/DNS-Server/2.1.4\",\"cis-rhel7/DNS-Server/2.2.4\",\"cis-almalinux9/DNS-Server/2.1.4\",\"cis-rhel8/DNS-Server/2.2.4\",\"cis-rhel9/DNS-Server/2.1.4\",\"cis-al2023/DNS-Server/2.2.5\",\"cis-amzn2/DNS-Server/2.2.4\",\"cis-ubuntu2204/DNS-Server/2.2.7\"],\"framework_requirements\":[\"cis-ubuntu2004/DNS-Server\",\"cis-rhel9/DNS-Server\",\"cis-ubuntu2404/DNS-Server\",\"cis-rhel8/DNS-Server\",\"cis-rhel7/DNS-Server\",\"cis-amzn2/DNS-Server\",\"cis-al2023/DNS-Server\",\"cis-ubuntu2204/DNS-Server\",\"cis-almalinux9/DNS-Server\"],\"frameworks\":[{\"control\":\"2.2.8\",\"framework\":\"cis-ubuntu2004\",\"is_default\":true,\"message\":\"## Description\\n\\nThe `named` service is provided by the `bind` package.\\nThe `bind` package can be removed with the following command:\\n```\\n\\n$ apt-get remove bind\\n```\\n\\n\\n## Rationale\\n\\nIf there is no need to make DNS server software available,\\nremoving it provides a safeguard against its activation.\\n\\n## Remediation\\n\\n### Shell script\\n\\nThe following script can be run on the host to remediate the issue.\\n\\n```\\n#!/bin/bash\\n\\n# CAUTION: This remediation script will remove bind9\\n# from the system, and may remove any packages\\n# that depend on bind9. Execute this\\n# remediation AFTER testing on a non-production\\n# system!\\n\\n\\nDEBIAN_FRONTEND=noninteractive apt-get remove -y \\\"bind9\\\"\\n```\\n\\n### Ansible playbook\\n\\nThe following playbook can be run with Ansible to remediate the issue.\\n\\n```\\n- name: 'Uninstall bind Package: Ensure bind9 is removed'\\n ansible.builtin.package:\\n name: bind9\\n state: absent\\n tags:\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n```\\n\",\"requirement\":\"DNS-Server\",\"version\":\"1.0.0\"},{\"control\":\"2.2.7\",\"framework\":\"cis-ubuntu2204\",\"is_default\":true,\"message\":\"## Description\\n\\nThe `named` service is provided by the `bind` package.\\nThe `bind` package can be removed with the following command:\\n```\\n\\n$ apt-get remove bind\\n```\\n\\n\\n## Rationale\\n\\nIf there is no need to make DNS server software available,\\nremoving it provides a safeguard against its activation.\\n\\n## Remediation\\n\\n### Shell script\\n\\nThe following script can be run on the host to remediate the issue.\\n\\n```\\n#!/bin/bash\\n\\n# CAUTION: This remediation script will remove bind9\\n# from the system, and may remove any packages\\n# that depend on bind9. Execute this\\n# remediation AFTER testing on a non-production\\n# system!\\n\\n\\nDEBIAN_FRONTEND=noninteractive apt-get remove -y \\\"bind9\\\"\\n```\\n\\n### Ansible playbook\\n\\nThe following playbook can be run with Ansible to remediate the issue.\\n\\n```\\n- name: 'Uninstall bind Package: Ensure bind9 is removed'\\n ansible.builtin.package:\\n name: bind9\\n state: absent\\n tags:\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n```\\n\",\"requirement\":\"DNS-Server\",\"version\":\"2.0.0\"},{\"control\":\"2.2.4\",\"framework\":\"cis-rhel7\",\"is_default\":true,\"message\":\"## Description\\n\\nThe `named` service is provided by the `bind` package.\\nThe `bind` package can be removed with the following command:\\n```\\n\\n$ sudo yum erase bind\\n```\\n\\n\\n## Rationale\\n\\nIf there is no need to make DNS server software available,\\nremoving it provides a safeguard against its activation.\\n\\n## Remediation\\n\\n### Shell script\\n\\nThe following script can be run on the host to remediate the issue.\\n\\n```\\n#!/bin/bash\\n\\n# CAUTION: This remediation script will remove bind\\n#\\t from the system, and may remove any packages\\n#\\t that depend on bind. Execute this\\n#\\t remediation AFTER testing on a non-production\\n#\\t system!\\n\\nif rpm -q --quiet \\\"bind\\\" ; then\\n\\n yum remove -y \\\"bind\\\"\\n\\nfi\\n```\\n\\n### Ansible playbook\\n\\nThe following playbook can be run with Ansible to remediate the issue.\\n\\n```\\n- name: Ensure bind is removed\\n package:\\n name: bind\\n state: absent\\n tags:\\n - CCE-80326-2\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n```\\n\",\"requirement\":\"DNS-Server\",\"version\":\"3.1.1\"},{\"control\":\"2.2.4\",\"framework\":\"cis-rhel8\",\"is_default\":true,\"message\":\"## Description\\n\\nThe `named` service is provided by the `bind` package.\\nThe `bind` package can be removed with the following command:\\n```\\n\\n$ sudo yum erase bind\\n```\\n\\n\\n## Rationale\\n\\nIf there is no need to make DNS server software available,\\nremoving it provides a safeguard against its activation.\\n\\n## Remediation\\n\\n### Shell script\\n\\nThe following script can be run on the host to remediate the issue.\\n\\n```\\n#!/bin/bash\\n\\n# CAUTION: This remediation script will remove bind\\n# from the system, and may remove any packages\\n# that depend on bind. Execute this\\n# remediation AFTER testing on a non-production\\n# system!\\n\\n\\nif rpm -q --quiet \\\"bind\\\" ; then\\nyum remove -y \\\"bind\\\"\\nfi\\n```\\n\\n### Ansible playbook\\n\\nThe following playbook can be run with Ansible to remediate the issue.\\n\\n```\\n- name: 'Uninstall bind Package: Ensure bind is removed'\\n ansible.builtin.package:\\n name: bind\\n state: absent\\n tags:\\n - CCE-82408-6\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n```\\n\",\"requirement\":\"DNS-Server\",\"version\":\"3.0.0\"},{\"control\":\"2.1.4\",\"framework\":\"cis-rhel9\",\"is_default\":true,\"message\":\"## Description\\n\\nThe `named` service is provided by the `bind` package.\\nThe `bind` package can be removed with the following command:\\n```\\n\\n$ sudo dnf remove bind\\n```\\nOn Red Hat Enterprise Linux 9.6 and newer, the `bind` command is also provided by the `bind9.18` package.\\nThe `bind9.18` package can be removed with the following command:\\n```\\n\\n$ sudo dnf remove bind9.18\\n```\\n\\n\\n## Rationale\\n\\nIf there is no need to make DNS server software available,\\nremoving it provides a safeguard against its activation.\\n\\n## Remediation\\n\\n### Shell script\\n\\nThe following script can be run on the host to remediate the issue.\\n\\n```\\n#!/bin/bash\\n\\n# CAUTION: This remediation script will remove bind and bind9.18\\n# from the system, and may remove any packages\\n# that depend on bind and bind9.18. Execute this\\n# remediation AFTER testing on a non-production\\n# system!\\n\\n\\nif rpm -q --quiet \\\"bind\\\" ; then\\ndnf remove -y --noautoremove \\\"bind\\\"\\nfi\\n\\nif rpm -q --quiet \\\"bind9.18\\\" ; then\\ndnf remove -y --noautoremove \\\"bind9.18\\\"\\nfi\\n```\\n\\n### Ansible playbook\\n\\nThe following playbook can be run with Ansible to remediate the issue.\\n\\n```\\n- name: 'Uninstall bind Package: Ensure bind is removed'\\n ansible.builtin.package:\\n name: bind\\n state: absent\\n tags:\\n - CCE-86505-5\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n\\n- name: 'Uninstall bind Package: Ensure bind9.18 is removed'\\n ansible.builtin.package:\\n name: bind9.18\\n state: absent\\n tags:\\n - CCE-86505-5\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n```\\n\",\"requirement\":\"DNS-Server\",\"version\":\"2.0.0\"},{\"control\":\"2.1.4\",\"framework\":\"cis-almalinux9\",\"is_default\":true,\"message\":\"## Description\\n\\nThe `named` service is provided by the `bind` package.\\nThe `bind` package can be removed with the following command:\\n```\\n\\n$ sudo dnf remove bind\\n```\\n\\n\\n## Rationale\\n\\nIf there is no need to make DNS server software available,\\nremoving it provides a safeguard against its activation.\\n\\n## Remediation\\n\\n### Shell script\\n\\nThe following script can be run on the host to remediate the issue.\\n\\n```\\n#!/bin/bash\\n\\n# CAUTION: This remediation script will remove bind\\n# from the system, and may remove any packages\\n# that depend on bind. Execute this\\n# remediation AFTER testing on a non-production\\n# system!\\n\\n\\nif rpm -q --quiet \\\"bind\\\" ; then\\ndnf remove -y --noautoremove \\\"bind\\\"\\nfi\\n```\\n\\n### Ansible playbook\\n\\nThe following playbook can be run with Ansible to remediate the issue.\\n\\n```\\n- name: 'Uninstall bind Package: Ensure bind is removed'\\n ansible.builtin.package:\\n name: bind\\n state: absent\\n tags:\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n```\\n\",\"requirement\":\"DNS-Server\",\"version\":\"2.0.0\"},{\"control\":\"2.2.4\",\"framework\":\"cis-amzn2\",\"is_default\":true,\"message\":\"## Description\\n\\nThe `named` service is provided by the `bind` package.\\nThe `bind` package can be removed with the following command:\\n```\\n\\n$ sudo yum erase bind\\n```\\n\\n\\n## Rationale\\n\\nIf there is no need to make DNS server software available,\\nremoving it provides a safeguard against its activation.\\n\\n## Remediation\\n\\n### Shell script\\n\\nThe following script can be run on the host to remediate the issue.\\n\\n```\\n#!/bin/bash\\n\\n# CAUTION: This remediation script will remove bind\\n#\\t from the system, and may remove any packages\\n#\\t that depend on bind. Execute this\\n#\\t remediation AFTER testing on a non-production\\n#\\t system!\\n\\nif rpm -q --quiet \\\"bind\\\" ; then\\n\\n yum remove -y \\\"bind\\\"\\n\\nfi\\n```\\n\\n### Ansible playbook\\n\\nThe following playbook can be run with Ansible to remediate the issue.\\n\\n```\\n- name: Ensure bind is removed\\n package:\\n name: bind\\n state: absent\\n tags:\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n```\\n\",\"requirement\":\"DNS-Server\",\"version\":\"3.0.0\"},{\"control\":\"2.2.5\",\"framework\":\"cis-al2023\",\"is_default\":true,\"message\":\"## Description\\n\\nThe `named` service is provided by the `bind` package.\\nThe `bind` package can be removed with the following command:\\n```\\n\\n$ sudo dnf remove bind\\n```\\n\\n\\n## Rationale\\n\\nIf there is no need to make DNS server software available,\\nremoving it provides a safeguard against its activation.\\n\\n## Remediation\\n\\n### Shell script\\n\\nThe following script can be run on the host to remediate the issue.\\n\\n```\\n#!/bin/bash\\n\\n# CAUTION: This remediation script will remove bind\\n# from the system, and may remove any packages\\n# that depend on bind. Execute this\\n# remediation AFTER testing on a non-production\\n# system!\\n\\n\\nif rpm -q --quiet \\\"bind\\\" ; then\\ndnf remove -y --noautoremove \\\"bind\\\"\\nfi\\n```\\n\\n### Ansible playbook\\n\\nThe following playbook can be run with Ansible to remediate the issue.\\n\\n```\\n- name: 'Uninstall bind Package: Ensure bind is removed'\\n ansible.builtin.package:\\n name: bind\\n state: absent\\n tags:\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n```\\n\",\"requirement\":\"DNS-Server\",\"version\":\"1.0.0\"},{\"control\":\"2.2.5\",\"framework\":\"cis-al2023\",\"is_default\":true,\"requirement\":\"DNS-Server\",\"version\":\"1.0.0\"},{\"control\":\"2.1.4\",\"framework\":\"cis-almalinux9\",\"is_default\":true,\"requirement\":\"DNS-Server\",\"version\":\"2.0.0\"},{\"control\":\"2.2.4\",\"framework\":\"cis-amzn2\",\"is_default\":true,\"requirement\":\"DNS-Server\",\"version\":\"3.0.0\"},{\"control\":\"2.2.4\",\"framework\":\"cis-rhel7\",\"is_default\":true,\"requirement\":\"DNS-Server\",\"version\":\"3.1.1\"},{\"control\":\"2.2.4\",\"framework\":\"cis-rhel8\",\"is_default\":true,\"requirement\":\"DNS-Server\",\"version\":\"3.0.0\"},{\"control\":\"2.1.4\",\"framework\":\"cis-rhel9\",\"is_default\":true,\"requirement\":\"DNS-Server\",\"version\":\"2.0.0\"},{\"control\":\"2.2.8\",\"framework\":\"cis-ubuntu2004\",\"is_default\":true,\"requirement\":\"DNS-Server\",\"version\":\"1.0.0\"},{\"control\":\"2.2.7\",\"framework\":\"cis-ubuntu2204\",\"is_default\":true,\"requirement\":\"DNS-Server\",\"version\":\"2.0.0\"},{\"control\":\"2.1.4\",\"framework\":\"cis-ubuntu2404\",\"is_default\":true,\"requirement\":\"DNS-Server\",\"version\":\"1.0.0\"}]},\"description\":\"%%%\\n## Description\\n\\nThe `named` service is provided by the `bind` package.\\nThe `bind` package can be removed with the following command:\\n```\\n\\n$ apt-get remove bind\\n```\\n\\n\\n## Rationale\\n\\nIf there is no need to make DNS server software available,\\nremoving it provides a safeguard against its activation.\\n\\n## Remediation\\n\\n### Shell script\\n\\nThe following script can be run on the host to remediate the issue.\\n\\n```\\n#!/bin/bash\\n\\n# CAUTION: This remediation script will remove bind9\\n# from the system, and may remove any packages\\n# that depend on bind9. Execute this\\n# remediation AFTER testing on a non-production\\n# system!\\n\\n\\nDEBIAN_FRONTEND=noninteractive apt-get remove -y \\\"bind9\\\"\\n```\\n\\n### Ansible playbook\\n\\nThe following playbook can be run with Ansible to remediate the issue.\\n\\n```\\n- name: 'Uninstall bind Package: Ensure bind9 is removed'\\n ansible.builtin.package:\\n name: bind9\\n state: absent\\n tags:\\n - NIST-800-53-CM-6(a)\\n - NIST-800-53-CM-7(a)\\n - NIST-800-53-CM-7(b)\\n - disable_strategy\\n - low_complexity\\n - low_disruption\\n - low_severity\\n - no_reboot_needed\\n - package_bind_removed\\n```\\n\\n%%%\",\"detection_changed_at\":1765838312079,\"finding_id\":\"OXBuLXltcS1yaGh-aS0wODVkZTgwNWY4NTJlZGQxNA==\",\"finding_type\":\"misconfiguration\",\"first_seen_at\":1765838312079,\"host\":{\"cloud_provider\":\"aws\",\"name\":\"i-085de805f852edd14\"},\"k8s\":{\"cluster_id\":\"heatran\"},\"last_seen_at\":1765838312079,\"metadata\":{\"schema_version\":\"2\"},\"resource_id\":\"i-085de805f852edd14\",\"resource_name\":\"i-085de805f852edd14\",\"resource_type\":\"host\",\"rule\":{\"default_rule_id\":\"def-000-zlf\",\"id\":\"9pn-ymq-rhh\",\"name\":\"Uninstall bind Package\",\"type\":\"infrastructure configuration\",\"version\":25},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2,\"value\":\"low\",\"value_id\":1}},\"status\":\"open\",\"title\":\"Uninstall bind Package\",\"workflow\":{\"mute\":{\"is_muted\":false}}}},\"tags\":[\"scored:true\",\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-east-1c\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"availability-zone:us-east-1c\",\"role:kube-node\",\"env:staging\",\"image:ami-0a8a2ad2689e7c22d\",\"control:2.2.4\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"kubernetes.io/cluster/heatran:owned\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:5971764ki\",\"site:datad0g.com\",\"framework:cis-ubuntu2204\",\"adp_enabled:true\",\"security:compliance\",\"auto-discovery.cluster-autoscaler.k8s.io/heatran\",\"chart_name:koutris-infra\",\"security-group:sg-0a2e60dd3f9a5a6ab\",\"kube_node_role:compute\",\"control:2.2.7\",\"control:2.2.8\",\"control:2.2.5\",\"autoscaling_group:us1-staging-dog-heatran-k8s-ng-asg-a6848eee38b2f3a8\",\"kube_cluster_name:heatran\",\"orch_cluster_id:0659afbc-9c8d-401f-926c-8d0a7d64a5d8\",\"dd_compute_k8s_platform_version:v6-271-0\",\"name:koutris_koutris-fw-2c8g\",\"kubernetes_cluster:heatran\",\"release:koutris-infra\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:koutris\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:93mi\",\"kube_node:ip-10-112-62-173.ec2.internal\",\"aws_account:727006795293\",\"host:i-085de805f852edd14\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:1900m\",\"pci_compliance_level:tier_two\",\"is_kube_cluster_experimental:false\",\"aws:ec2launchtemplate:id:lt-0565e94873111d4dc\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:false\",\"requirement:dns-server\",\"node.datadoghq.com/cgroup:v2\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"team:monitor-intake\",\"security-group:sg-0ebe29714ed14f3c3\",\"region:us-east-1\",\"control:2.1.4\",\"aws:ec2:fleet-id:fleet-4fbf0515-3c0e-e685-0c1a-01aa4d0a88dd\",\"ng_local_storage:false\",\"cluster_name:heatran\",\"cpu_arch:amd64\",\"ng_cluster_autoscaler:true\",\"nodegroup:koutris_koutris-fw-2c8g\",\"source:host-benchmarks\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/koutris-fw-2c8g\",\"account_id:727006795293\",\"iam_profile:k8s/us1-staging-dog-heatran-kube-node_v2\",\"instance_type:m6i.large\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"node.datadoghq.com/version:v6-271-0\",\"aws:ec2launchtemplate:version:1\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:20\",\"datacenter:us1.staging.dog\",\"k8s.io/cluster-autoscaler/node-template/taint/node:koutris-fw-2c8g:noschedule\",\"kube_node_role:koutris-fw-2c8g\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:koutris-fw-2c8g\",\"account:staging\",\"framework_version:cis-ubuntu2204_v2.0.0\",\"source:compliance-agent\",\"nodegroups.datadoghq.com/name:koutris-fw-2c8g\",\"agent_release_candidate_cluster:false\",\"instance-type:m6i.large\",\"nodegroups.datadoghq.com/namespace:koutris\"],\"timestamp\":1765838312079}},{\"id\":\"YTcxZGViZjIxNDMwYzMzM2ZjZTJlMzQ3NzZkZmEzZWF-OTljOTc5NDQ2OGY3Zjk3YmEzZGE2YzUxODZhMzQ4M2M=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2024-26740\"],\"cve\":\"CVE-2024-26740\",\"id\":\"TRIVY-CVE-2024-26740\",\"modified_at\":1742227413000,\"published_at\":1712164551000,\"summary\":\"kernel: net/sched: act_mirred: use the backlog for mirred ingress\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"ip-10-151-58-63.us-west-2.compute.internal-raboot-c\"},\"detection_changed_at\":1765838311928,\"finding_id\":\"YTcxZGViZjIxNDMwYzMzM2ZjZTJlMzQ3NzZkZmEzZWF-OTljOTc5NDQ2OGY3Zjk3YmEzZGE2YzUxODZhMzQ4M2M=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765838305292,\"host\":{\"name\":\"ip-10-151-58-63.us-west-2.compute.internal-raboot-c\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"raboot-c\"},\"last_seen_at\":1765838311928,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-tools-common\"],\"name\":\"linux\",\"normalized_name\":\"linux\",\"version\":\"5.15.0-164.174\"},\"remediation\":{\"is_available\":false},\"resource_id\":\"99c9794468f7f97ba3da6c5186a3483c\",\"resource_name\":\"ip-10-151-58-63.us-west-2.compute.internal-raboot-c\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00007,\"epss_severity\":\"low\"},\"impact_cvss\":\"safer\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2.7,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:H/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.5,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\"}},\"status\":\"open\",\"title\":\"kernel: net/sched: act_mirred: use the backlog for mirred ingress\",\"vulnerability\":{\"cwes\":[\"CWE-667\"],\"hash\":\"7006ac6847128f6a8d00b409db2695db2509f2ffcac2f023ccd33af9fc50a060\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"mute\":{\"is_muted\":false}}}},\"tags\":[\"exposure_time_days:0\",\"kube_node_role:nodeless\",\"kube_node:ip-10-151-58-63.us-west-2.compute.internal\",\"package_name:linux\",\"epss_raw_score:0.000070\",\"fix_available:unavailable\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"source:datadog\",\"severity:low\",\"hash:7006ac6847128f6a8d00b409db2695db2509f2ffcac2f023ccd33af9fc50a060\",\"vulnerability_status:open\",\"cluster_name:raboot-c\",\"scored:false\",\"kube_node_role:compute\",\"asset_type:host\",\"new:true\",\"base_severity:medium\",\"os_name:ubuntu\",\"site:datadoghq.com\",\"assignee:none\",\"assignee_id:none\",\"in_production:false\",\"kube_cluster_name:raboot-c\",\"vuln_id:7006ac6847128f6a8d00b409db2695db2509f2ffcac2f023ccd33af9fc50a060\",\"is_kube_cluster_experimental:false\",\"orch_cluster_id:76cfd63e-1d3b-4bf3-b0b0-93e1423ef6cc\",\"node.datadoghq.com/flavor:standard\",\"nodegroups.datadoghq.com/name:nodeless-amd64-d-c6a-2xlarge\",\"adp_enabled:false\",\"public_exploit_available:false\",\"alias:cve-2024-26740\",\"node.datadoghq.com/cgroup:v2\",\"node.datadoghq.com/version:v6-260-2\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"base_score:5.5\",\"score:2.7\",\"dd_rule_type:not-empty\",\"ecosystem:deb\",\"os_version:22.04\",\"ng_local_storage:false\",\"close_count:0\",\"cve:cve-2024-26740\",\"cpu_arch:amd64\",\"ng_cluster_autoscaler:true\",\"package_version:5.15.0-164.174\",\"last_detected_minutes:0\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"kube_node_role:nodeless-amd64-d-c6a-2xlarge\",\"instance_type:c6a.2xlarge\",\"event_type:new\",\"asset_id:ip-10-151-58-63.us-west-2.compute.internal-raboot-c\",\"type:component_with_known_vulnerability\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"env:staging\"],\"timestamp\":1765838311928}},{\"id\":\"MDdjY2IxZjk1MzQ2NDIzOWJjYWE1Yjk4NmU3MWNiZGF-YmJiZDFkNGIwNDdjNDRmOGY5NWU1YmQyNDUyM2Y3YTM=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2025-38057\"],\"cve\":\"CVE-2025-38057\",\"id\":\"TRIVY-CVE-2025-38057\",\"modified_at\":1765059350000,\"published_at\":1750241738000,\"summary\":\"kernel: espintcp: fix skb leaks\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"ip-10-12-87-102.us-west-2.compute.internal-grooky\"},\"detection_changed_at\":1765838311625,\"finding_id\":\"MDdjY2IxZjk1MzQ2NDIzOWJjYWE1Yjk4NmU3MWNiZGF-YmJiZDFkNGIwNDdjNDRmOGY5NWU1YmQyNDUyM2Y3YTM=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765838306213,\"host\":{\"name\":\"ip-10-12-87-102.us-west-2.compute.internal-grooky\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"grooky\"},\"last_seen_at\":1765838311912,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-tools-6.8.0-1040-aws\",\"linux-modules-6.8.0-1044-aws\",\"linux-aws-6.8-headers-6.8.0-1040\"],\"name\":\"linux-aws-6.8\",\"normalized_name\":\"linux-aws-6.8\",\"version\":\"6.8.0-1040.42~22.04.1\"},\"remediation\":{\"is_available\":false},\"resource_id\":\"bbbd1d4b047c44f8f95e5bd24523f7a3\",\"resource_name\":\"ip-10-12-87-102.us-west-2.compute.internal-grooky\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00015,\"epss_severity\":\"low\"},\"impact_cvss\":\"safer\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2.7,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:H/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.5,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H\"}},\"status\":\"open\",\"title\":\"kernel: espintcp: fix skb leaks\",\"vulnerability\":{\"cwes\":[\"CWE-401\"],\"hash\":\"2d7834d0e13e82fb456bdd55f899695eac53e854edd35696150e726551ccbd6a\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"mute\":{\"is_muted\":false}}}},\"tags\":[\"cluster_name:grooky\",\"exposure_time_days:0\",\"kube_node_role:nodeless\",\"event_type:none\",\"fix_available:unavailable\",\"env:staging\",\"vuln_id:2d7834d0e13e82fb456bdd55f899695eac53e854edd35696150e726551ccbd6a\",\"hash:2d7834d0e13e82fb456bdd55f899695eac53e854edd35696150e726551ccbd6a\",\"package_name:linux-aws-6.8\",\"nodegroups.datadoghq.com/name:nodeless-arm64-d-c6g-4xlarge\",\"source:datadog\",\"severity:low\",\"vulnerability_status:open\",\"kube_cluster_name:grooky\",\"scored:false\",\"kube_node_role:compute\",\"asset_type:host\",\"base_severity:medium\",\"os_name:ubuntu\",\"site:datadoghq.com\",\"datacenter:prtest03.staging.dog\",\"assignee:none\",\"asset_id:ip-10-12-87-102.us-west-2.compute.internal-grooky\",\"assignee_id:none\",\"in_production:false\",\"is_kube_cluster_experimental:false\",\"node.datadoghq.com/flavor:standard\",\"orch_cluster_id:093ee83e-2ab7-4c08-8f9e-b580f7bb8115\",\"adp_enabled:false\",\"running_kernel:false\",\"public_exploit_available:false\",\"node.datadoghq.com/cgroup:v2\",\"node.datadoghq.com/version:v6-260-2\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"base_score:5.5\",\"score:2.7\",\"dd_rule_type:not-empty\",\"ecosystem:deb\",\"os_version:22.04\",\"ng_local_storage:false\",\"close_count:0\",\"package_version:6.8.0-1040.42_22.04.1\",\"ng_cluster_autoscaler:true\",\"kube_node:ip-10-12-87-102.us-west-2.compute.internal\",\"alias:cve-2025-38057\",\"last_detected_minutes:0\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"instance_type:c6g.4xlarge\",\"cve:cve-2025-38057\",\"cpu_arch:arm64\",\"kube_node_role:nodeless-arm64-d-c6g-4xlarge\",\"epss_raw_score:0.00015\",\"type:component_with_known_vulnerability\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"env:staging\"],\"timestamp\":1765838311625}},{\"id\":\"MGQwMzY2ODc3OTYzNDE2ZWE3YjVhMmFmOWQ3OWI5ZjV-YmJiZDFkNGIwNDdjNDRmOGY5NWU1YmQyNDUyM2Y3YTM=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2025-40114\"],\"cve\":\"CVE-2025-40114\",\"id\":\"TRIVY-CVE-2025-40114\",\"modified_at\":1759331744000,\"published_at\":1744960544000,\"summary\":\"kernel: iio: light: Add check for array bounds in veml6075_read_int_time_ms\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"ip-10-12-87-102.us-west-2.compute.internal-grooky\"},\"detection_changed_at\":1765838311522,\"finding_id\":\"MGQwMzY2ODc3OTYzNDE2ZWE3YjVhMmFmOWQ3OWI5ZjV-YmJiZDFkNGIwNDdjNDRmOGY5NWU1YmQyNDUyM2Y3YTM=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765838306213,\"host\":{\"name\":\"ip-10-12-87-102.us-west-2.compute.internal-grooky\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"grooky\"},\"last_seen_at\":1765838311522,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"linux-tools-6.8.0-1040-aws\",\"linux-aws-6.8-tools-6.8.0-1040\",\"linux-modules-6.8.0-1040-aws\"],\"name\":\"linux-aws-6.8\",\"normalized_name\":\"linux-aws-6.8\",\"version\":\"6.8.0-1040.42~22.04.1\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"linux-aws-6.8\",\"version\":\"6.8.0-1041.43~22.04.1\"}]},\"recommended\":{\"name\":\"linux-aws-6.8\",\"version\":\"6.8.0-1041.43~22.04.1\"}},\"resource_id\":\"bbbd1d4b047c44f8f95e5bd24523f7a3\",\"resource_name\":\"ip-10-12-87-102.us-west-2.compute.internal-grooky\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00018,\"epss_severity\":\"low\"},\"impact_cvss\":\"safer\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"medium\",\"severity_details\":{\"adjusted\":{\"score\":4.7,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:H/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":7.8,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\"}},\"status\":\"open\",\"title\":\"kernel: iio: light: Add check for array bounds in veml6075_read_int_time_ms\",\"vulnerability\":{\"cwes\":[\"CWE-129\"],\"hash\":\"a62facb5685f29ada4e069863e0edc360411f4283477fa21fa3c7fec6b39e603\",\"stack\":{\"ecosystem\":\"deb\"}},\"workflow\":{\"mute\":{\"is_muted\":false}}}},\"tags\":[\"cluster_name:grooky\",\"exposure_time_days:0\",\"kube_node_role:nodeless\",\"event_type:none\",\"env:staging\",\"package_name:linux-aws-6.8\",\"nodegroups.datadoghq.com/name:nodeless-arm64-d-c6g-4xlarge\",\"source:datadog\",\"vulnerability_status:open\",\"fix_available:available\",\"kube_cluster_name:grooky\",\"vuln_id:a62facb5685f29ada4e069863e0edc360411f4283477fa21fa3c7fec6b39e603\",\"scored:false\",\"kube_node_role:compute\",\"hash:a62facb5685f29ada4e069863e0edc360411f4283477fa21fa3c7fec6b39e603\",\"asset_type:host\",\"os_name:ubuntu\",\"site:datadoghq.com\",\"datacenter:prtest03.staging.dog\",\"assignee:none\",\"asset_id:ip-10-12-87-102.us-west-2.compute.internal-grooky\",\"assignee_id:none\",\"cve:cve-2025-40114\",\"in_production:false\",\"alias:cve-2025-40114\",\"is_kube_cluster_experimental:false\",\"node.datadoghq.com/flavor:standard\",\"orch_cluster_id:093ee83e-2ab7-4c08-8f9e-b580f7bb8115\",\"adp_enabled:false\",\"running_kernel:false\",\"public_exploit_available:false\",\"node.datadoghq.com/cgroup:v2\",\"node.datadoghq.com/version:v6-260-2\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"base_score:7.8\",\"score:4.7\",\"severity:medium\",\"dd_rule_type:not-empty\",\"ecosystem:deb\",\"os_version:22.04\",\"ng_local_storage:false\",\"close_count:0\",\"package_version:6.8.0-1040.42_22.04.1\",\"ng_cluster_autoscaler:true\",\"kube_node:ip-10-12-87-102.us-west-2.compute.internal\",\"last_detected_minutes:0\",\"base_severity:high\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"instance_type:c6g.4xlarge\",\"cpu_arch:arm64\",\"kube_node_role:nodeless-arm64-d-c6g-4xlarge\",\"type:component_with_known_vulnerability\",\"epss_raw_score:0.00018\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"env:staging\"],\"timestamp\":1765838311522}},{\"id\":\"ZmM0NTk0NmQzNzIwNTk0ZTQ0ODM5OWM1MDI5ODBhNDZ-YmJiZDFkNGIwNDdjNDRmOGY5NWU1YmQyNDUyM2Y3YTM=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"BIT-golang-2025-47912\",\"CVE-2025-47912\"],\"cve\":\"CVE-2025-47912\",\"id\":\"GO-2025-4010\",\"modified_at\":1762437598375,\"published_at\":1761774598000,\"summary\":\"Insufficient validation of bracketed IPv6 hostnames in net/url\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"ip-10-12-87-102.us-west-2.compute.internal-grooky\"},\"detection_changed_at\":1765838311417,\"finding_id\":\"ZmM0NTk0NmQzNzIwNTk0ZTQ0ODM5OWM1MDI5ODBhNDZ-YmJiZDFkNGIwNDdjNDRmOGY5NWU1YmQyNDUyM2Y3YTM=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765838306213,\"host\":{\"name\":\"ip-10-12-87-102.us-west-2.compute.internal-grooky\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"grooky\"},\"last_seen_at\":1765838311417,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"stdlib\"],\"name\":\"stdlib\",\"normalized_name\":\"stdlib\",\"version\":\"v1.22.10\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"stdlib\",\"version\":\"1.25.2\"}]},\"recommended\":{\"name\":\"stdlib\",\"version\":\"1.25.2\"}},\"resource_id\":\"bbbd1d4b047c44f8f95e5bd24523f7a3\",\"resource_name\":\"ip-10-12-87-102.us-west-2.compute.internal-grooky\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":false,\"has_high_exploitability_chance\":false,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"type\":\"unavailable\"},\"impact_cvss\":\"safer\",\"value\":false},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.00025,\"epss_severity\":\"low\"},\"impact_cvss\":\"safer\",\"value\":false},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"low\",\"severity_details\":{\"adjusted\":{\"score\":2.8,\"value\":\"low\",\"value_id\":1,\"vector\":\"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N/E:U/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:H/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":5.3,\"value\":\"medium\",\"value_id\":2,\"vector\":\"CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N\"}},\"status\":\"open\",\"title\":\"Insufficient validation of bracketed IPv6 hostnames in net/url\",\"vulnerability\":{\"hash\":\"1505a97f3a8bd19c9a5d29f14c9d60749f479ac2de30a8a8b95fbfb5e4b7db53\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"mute\":{\"is_muted\":false}}}},\"tags\":[\"cluster_name:grooky\",\"exposure_time_days:0\",\"kube_node_role:nodeless\",\"ecosystem:go\",\"env:staging\",\"cve:cve-2025-47912\",\"nodegroups.datadoghq.com/name:nodeless-arm64-d-c6g-4xlarge\",\"epss_raw_score:0.00025\",\"alias:cve-2025-47912\",\"source:datadog\",\"severity:low\",\"vulnerability_status:open\",\"fix_available:available\",\"kube_cluster_name:grooky\",\"scored:false\",\"kube_node_role:compute\",\"asset_type:host\",\"new:true\",\"base_severity:medium\",\"os_name:ubuntu\",\"site:datadoghq.com\",\"datacenter:prtest03.staging.dog\",\"assignee:none\",\"asset_id:ip-10-12-87-102.us-west-2.compute.internal-grooky\",\"assignee_id:none\",\"in_production:false\",\"is_kube_cluster_experimental:false\",\"node.datadoghq.com/flavor:standard\",\"orch_cluster_id:093ee83e-2ab7-4c08-8f9e-b580f7bb8115\",\"alias:bit-golang-2025-47912\",\"adp_enabled:false\",\"public_exploit_available:false\",\"node.datadoghq.com/cgroup:v2\",\"node.datadoghq.com/version:v6-260-2\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"base_score:5.3\",\"score:2.8\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"ng_local_storage:false\",\"close_count:0\",\"package_version:v1.22.10\",\"package_name:stdlib\",\"ng_cluster_autoscaler:true\",\"kube_node:ip-10-12-87-102.us-west-2.compute.internal\",\"hash:1505a97f3a8bd19c9a5d29f14c9d60749f479ac2de30a8a8b95fbfb5e4b7db53\",\"last_detected_minutes:0\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"event_type:new\",\"instance_type:c6g.4xlarge\",\"vuln_id:1505a97f3a8bd19c9a5d29f14c9d60749f479ac2de30a8a8b95fbfb5e4b7db53\",\"cpu_arch:arm64\",\"kube_node_role:nodeless-arm64-d-c6g-4xlarge\",\"type:component_with_known_vulnerability\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"env:staging\"],\"timestamp\":1765838311417}}],\"meta\":{\"elapsed\":1248,\"page\":{\"after\":\"eyJhZnRlciI6IkF3QUFBWnNrS2tfNUZKWWZDd0FBQUJoQlduTnJTMnRmTlVGQlFqWkNNM3BmZVhadWJXNXhVMElBQUFBa1pqRTVZakkwTW1FdE5USmlaQzAwTldVd0xUZzRNREF0WW1ZeVlXSmlOR1k0TldRM0FBQUFMZyIsInZhbHVlcyI6WzE3NjU4MzgzMTE0MTcsIjIwMjUtMTItMTVUMjI6Mzg6MzEuNDE3WiIsMzQ1MzgyNjY3XX0=\"},\"request_id\":\"pddv1ChZubmNwVFVjWVJRLW9xSWIybklHWXJ3Ii0KHaszALDHDfJD6z3rlnQLgHugKbU0hTnqHR56Yrc4Egx3bkYPy7veSr6fRk0\",\"status\":\"done\"},\"links\":{\"next\":\"/api/v2/security/findings?page%5Bcursor%5D=eyJhZnRlciI6IkF3QUFBWnNrS2tfNUZKWWZDd0FBQUJoQlduTnJTMnRmTlVGQlFqWkNNM3BmZVhadWJXNXhVMElBQUFBa1pqRTVZakkwTW1FdE5USmlaQzAwTldVd0xUZzRNREF0WW1ZeVlXSmlOR1k0TldRM0FBQUFMZyIsInZhbHVlcyI6WzE3NjU4MzgzMTE0MTcsIjIwMjUtMTItMTVUMjI6Mzg6MzEuNDE3WiIsMzQ1MzgyNjY3XX0%3D\\u0026page%5Blimit%5D=5\\u0026sort=-%40detection_changed_at\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List security findings returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-07-06T19:25:19.361Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/vulnerabilities", + "query": [ + [ + "page[number]", + "1" + ], + [ + "page[token]", + "unknown" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Unexpected internal error\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List vulnerabilities returns \"Bad request: Invalid pagination token.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-12T14:36:49.310Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/vulnerabilities", + "query": [ + [ + "filter[asset.type]", + "Service" + ], + [ + "filter[cvss.base.severity]", + "High" + ], + [ + "filter[tool]", + "Infra" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List vulnerabilities returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-07-06T19:25:22.396Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/vulnerable-assets", + "query": [ + [ + "page[number]", + "1" + ], + [ + "page[token]", + "unknown" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Unexpected internal error\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List vulnerable assets returns \"Bad request: Invalid Pagination Token\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-10-14T13:43:52.800Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/security/vulnerable-assets", + "query": [ + [ + "filter[repository_url]", + "github.com/datadog/dd-go" + ], + [ + "filter[risks.in_production]", + "true" + ], + [ + "filter[type]", + "Host" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List vulnerable assets returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2022-07-06T14:49:11.566Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "assignee": { + "uuid": "" + } + } + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/signals/AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE/assignee", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"incident_ids\":[2066],\"state_update_user\":{\"handle\":\"bernard.le+synthetics@datadoghq.com\",\"uuid\":\"2514d32c-0719-11eb-b643-63faf7d5e1bd\",\"name\":null,\"id\":2115689,\"icon\":\"https://secure.gravatar.com/avatar/ae546a62b5816be30cc23792a69bd9ee?s=48&d=retro\"},\"assignee\":{\"id\":-1,\"name\":\"Unassigned\",\"uuid\":\"\"},\"state\":\"open\",\"archive_reason\":\"none\",\"state_update_timestamp\":1657118941005},\"type\":\"signal_metadata\",\"id\":\"AQAAAYG1bl5K4HuUewAAAABBWUcxYmw1S0FBQmt2RmhRN0V4ZUVnQUE\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Modify the triage assignee of a security signal returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-27T16:46:59.369Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "mute": { + "description": "To be resolved later.", + "expire_at": 1778721573794, + "is_muted": true, + "reason": "RISK_ACCEPTED" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwMC0wYmd-MDE4NjcyMDJkMzE4MDE5ODY5MGE4ZmQ2MmFlMjg0Y2M=", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/mute", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7a0bd082-5c8a-4ea3-a8a5-c5036e083ddb\",\"type\":\"mute\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Mute security findings returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-27T16:13:25.084Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "mute": { + "description": "To be resolved later.", + "expire_at": 1778721573794, + "is_muted": true, + "reason": "RISK_ACCEPTED" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/mute", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"finding not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Mute security findings returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-27T16:19:46.205Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "mute": { + "description": "To be resolved later.", + "expire_at": 1, + "is_muted": true, + "reason": "RISK_ACCEPTED" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/mute", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"422\",\"title\":\"Invalid Request\",\"detail\":\"Invalid expiration date. Please provide an expiration date in the future\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + } + ], + "scenario": "Mute security findings returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:11.165Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Patch_a_signal_based_notification_rule_returns_Bad_Request_response-1738763171", + "selectors": { + "query": "env:test", + "rule_types": [ + "signal_correlation" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_signals" + }, + "targets": [ + "@email@email.com" + ] + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/signals/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"uwx-6n1-x2z\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763171531,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763171531,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Patch_a_signal_based_notification_rule_returns_Bad_Request_response-1738763171\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"signal_correlation\"],\"query\":\"env:test\",\"trigger_source\":\"security_signals\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":0,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/signals/notification_rules/uwx-6n1-x2z", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"input_validation_error(Field 'data.attributes.version' is invalid: Specify the notification rule version to update, it cannot be 0.)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/signals/notification_rules/uwx-6n1-x2z", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Patch a signal-based notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:12.411Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400, + "version": 1 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/signals/notification_rules/000-000-000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Notification rule with id '000-000-000' not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Patch a signal-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:12.789Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Patch_a_signal_based_notification_rule_returns_Notification_rule_successfully_patched_response-1738763172", + "selectors": { + "query": "env:test", + "rule_types": [ + "signal_correlation" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_signals" + }, + "targets": [ + "@email@email.com" + ] + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/signals/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ob0-6ru-hc6\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763173259,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763173259,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Patch_a_signal_based_notification_rule_returns_Notification_rule_successfully_patched_response-1738763172\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"signal_correlation\"],\"query\":\"env:test\",\"trigger_source\":\"security_signals\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":0,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400, + "version": 1 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/signals/notification_rules/ob0-6ru-hc6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ob0-6ru-hc6\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763173259,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763173722,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Rule 1\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"(source:production_service OR env:prod)\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@john.doe@email.com\"],\"time_aggregation\":86400,\"version\":2}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/signals/notification_rules/ob0-6ru-hc6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Patch a signal-based notification rule returns \"Notification rule successfully patched.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:14.056Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Patch_a_vulnerability_based_notification_rule_returns_Bad_Request_response-1738763174", + "selectors": { + "query": "env:test", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@email@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/vulnerabilities/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"flc-8up-dya\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763174531,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763174531,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Patch_a_vulnerability_based_notification_rule_returns_Bad_Request_response-1738763174\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"env:test\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":86400,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/vulnerabilities/notification_rules/flc-8up-dya", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"input_validation_error(Field 'data.attributes.version' is invalid: Specify the notification rule version to update, it cannot be 0.)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/vulnerabilities/notification_rules/flc-8up-dya", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Patch a vulnerability-based notification rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:15.338Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400, + "version": 1 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/vulnerabilities/notification_rules/000-000-000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Notification rule with id '000-000-000' not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Patch a vulnerability-based notification rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-02-05T13:46:15.824Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Test-Patch_a_vulnerability_based_notification_rule_returns_Notification_rule_successfully_patched_respons-1738763175", + "selectors": { + "query": "env:test", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@email@email.com" + ], + "time_aggregation": 86400 + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/vulnerabilities/notification_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"tnd-jgq-yl5\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763176297,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763176297,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Test-Patch_a_vulnerability_based_notification_rule_returns_Notification_rule_successfully_patched_respons-1738763175\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"env:test\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@email@email.com\"],\"time_aggregation\":86400,\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "(source:production_service OR env:prod)", + "rule_types": [ + "misconfiguration", + "attack_path" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_findings" + }, + "targets": [ + "@john.doe@email.com" + ], + "time_aggregation": 86400, + "version": 1 + }, + "id": "aaa-bbb-ccc", + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/vulnerabilities/notification_rules/tnd-jgq-yl5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"tnd-jgq-yl5\",\"type\":\"notification_rules\",\"attributes\":{\"created_at\":1738763176297,\"created_by\":{\"name\":\"\",\"handle\":\"\"},\"enabled\":true,\"modified_at\":1738763176649,\"modified_by\":{\"name\":\"\",\"handle\":\"\"},\"name\":\"Rule 1\",\"selectors\":{\"severities\":[\"critical\"],\"rule_types\":[\"misconfiguration\",\"attack_path\"],\"query\":\"(source:production_service OR env:prod)\",\"trigger_source\":\"security_findings\"},\"targets\":[\"@john.doe@email.com\"],\"time_aggregation\":86400,\"version\":2}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/vulnerabilities/notification_rules/tnd-jgq-yl5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Patch a vulnerability-based notification rule returns \"Notification rule successfully patched.\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:14.824Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "due_days_per_severity": [ + { + "due_in_days": 7, + "severity": "critical" + } + ], + "due_from": "first_seen" + }, + "enabled": true, + "name": "Test-Reorder_due_date_rules_returns_Successfully_reordered_the_due_date_rules_response-1781624474", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "due_date_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/due_date_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"64e53941-8eba-42f9-946b-6422bead1eea\",\"type\":\"due_date_rules\",\"attributes\":{\"action\":{\"due_days_per_severity\":[{\"severity\":\"critical\",\"due_in_days\":7}],\"due_from\":\"first_seen\"},\"created_at\":1781624475039,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624475039,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Reorder_due_date_rules_returns_Successfully_reordered_the_due_date_rules_response-1781624474\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "64e53941-8eba-42f9-946b-6422bead1eea", + "type": "due_date_rules" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/due_date_rules/reorder", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"due_date_rules\",\"id\":\"64e53941-8eba-42f9-946b-6422bead1eea\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/due_date_rules/64e53941-8eba-42f9-946b-6422bead1eea", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Reorder due date rules returns \"Successfully reordered the due date rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:16.028Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "reason": "risk_accepted" + }, + "enabled": true, + "name": "Test-Reorder_mute_rules_returns_Successfully_reordered_the_mute_rules_response-1781624476", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "mute_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/mute_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"707a25e7-57ae-4d8f-9ce8-4840b52c7349\",\"type\":\"mute_rules\",\"attributes\":{\"action\":{\"reason\":\"risk_accepted\"},\"created_at\":1781624476249,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624476249,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Reorder_mute_rules_returns_Successfully_reordered_the_mute_rules_response-1781624476\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "707a25e7-57ae-4d8f-9ce8-4840b52c7349", + "type": "mute_rules" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/mute_rules/reorder", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"mute_rules\",\"id\":\"707a25e7-57ae-4d8f-9ce8-4840b52c7349\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/mute_rules/707a25e7-57ae-4d8f-9ce8-4840b52c7349", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Reorder mute rules returns \"Successfully reordered the mute rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:17.183Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "max_tickets_per_day": 10, + "project_id": "11111111-1111-1111-1111-111111111111", + "target": "jira" + }, + "enabled": true, + "name": "Test-Reorder_ticket_creation_rules_returns_Successfully_reordered_the_ticket_creation_rules_response-1781624477", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "ticket_creation_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/ticket_creation_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b34dcd68-976a-49af-915b-83488a3d9f74\",\"type\":\"ticket_creation_rules\",\"attributes\":{\"action\":{\"project_id\":\"11111111-1111-1111-1111-111111111111\",\"target\":\"jira\",\"max_tickets_per_day\":10},\"created_at\":1781624477424,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624477424,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Reorder_ticket_creation_rules_returns_Successfully_reordered_the_ticket_creation_rules_response-1781624477\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "b34dcd68-976a-49af-915b-83488a3d9f74", + "type": "ticket_creation_rules" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/reorder", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"ticket_creation_rules\",\"id\":\"b34dcd68-976a-49af-915b-83488a3d9f74\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/b34dcd68-976a-49af-915b-83488a3d9f74", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Reorder ticket creation rules returns \"Successfully reordered the ticket creation rules\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-12T09:57:22.725Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Restore_a_rule_to_a_historical_version_returns_Conflict_response-1781258242", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Restore_a_rule_to_a_historical_version_returns_Conflict_response-1781258242\",\"createdAt\":1781258244898,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"xrz-jfq-dfm\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":2320499,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule updated", + "name": "Test-Restore_a_rule_to_a_historical_version_returns_Conflict_response-1781258242-updated", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/security_monitoring/rules/xrz-jfq-dfm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Restore_a_rule_to_a_historical_version_returns_Conflict_response-1781258242-updated\",\"isEnabled\":true,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule updated\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"id\":\"xrz-jfq-dfm\",\"version\":2,\"createdAt\":1781258244898,\"creationAuthorId\":2320499,\"updateAuthorId\":2320499,\"updatedAt\":1781258245104,\"isDefault\":false,\"blocking\":false,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"metadata\":{\"entities\":null,\"sources\":null}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/xrz-jfq-dfm/restore/2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"error\":{\"code\":\"AlreadyExists\",\"message\":\"Cannot restore: target version is the current version.\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/xrz-jfq-dfm", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Restore a rule to a historical version returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-12T08:39:41.348Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Restore_a_rule_to_a_historical_version_returns_Not_Found_response-1781253581", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Restore_a_rule_to_a_historical_version_returns_Not_Found_response-1781253581\",\"createdAt\":1781253581645,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"uig-ynq-xlh\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":2320499,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/uig-ynq-xlh/restore/9999", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"error\":{\"code\":\"NotFound\",\"message\":\"Threat detection rule not found: uig-ynq-xlh, version=9999\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/uig-ynq-xlh", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Restore a rule to a historical version returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-12T09:57:25.549Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781258245", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781258245\",\"createdAt\":1781258245670,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":1,\"id\":\"7sm-pyl-xzv\",\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":2320499,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"updater\":{\"handle\":\"\",\"name\":\"\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule updated", + "name": "Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781258245-updated", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/security_monitoring/rules/7sm-pyl-xzv", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781258245-updated\",\"isEnabled\":true,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule updated\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"id\":\"7sm-pyl-xzv\",\"version\":2,\"createdAt\":1781258245670,\"creationAuthorId\":2320499,\"updateAuthorId\":2320499,\"updatedAt\":1781258245844,\"isDefault\":false,\"blocking\":false,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"metadata\":{\"entities\":null,\"sources\":null}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/7sm-pyl-xzv/restore/1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"name\":\"Test-Restore_a_rule_to_a_historical_version_returns_OK_response-1781258245\",\"createdAt\":1781258245670,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\",\"dataSource\":\"logs\"}],\"options\":{\"evaluationWindow\":900,\"detectionMethod\":\"threshold\",\"maxSignalDuration\":86400,\"keepAlive\":3600},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a \\u003e 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[],\"version\":3,\"id\":\"7sm-pyl-xzv\",\"updatedAt\":1781258246099,\"blocking\":false,\"metadata\":{\"entities\":null,\"sources\":null},\"creationAuthorId\":2320499,\"updateAuthorId\":2320499,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/7sm-pyl-xzv", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Restore a rule to a historical version returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:46:04.068Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jobDefinition": { + "cases": [ + { + "condition": "a > 1", + "name": "Condition 1", + "notifications": [], + "status": "info" + } + ], + "from": 1730387522611, + "index": "non_existing_index", + "message": "A large number of failed login attempts.", + "name": "Excessive number of failed attempts.", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "query": "source:non_existing_src_weekend" + } + ], + "tags": [], + "to": 1730391122611, + "type": "log_detection" + } + }, + "type": "historicalDetectionsJobCreate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/siem-historical-detections/jobs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"input_validation_error(Field 'index' is invalid: Invalid index): Index must exist\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Run a historical job returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:46:04.592Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "fromRule": { + "from": 1730201035064, + "id": "non-existng", + "index": "main", + "notifications": [], + "to": 1730204635115 + } + }, + "type": "historicalDetectionsJobCreate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/siem-historical-detections/jobs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Run a historical job returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-05-26T20:46:05.019Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "jobDefinition": { + "cases": [ + { + "condition": "a > 1", + "name": "Condition 1", + "notifications": [], + "status": "info" + } + ], + "from": 1730387522611, + "index": "main", + "message": "A large number of failed login attempts.", + "name": "Excessive number of failed attempts.", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "query": "source:non_existing_src_weekend" + } + ], + "tags": [], + "to": 1730387532611, + "type": "log_detection" + } + }, + "type": "historicalDetectionsJobCreate" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/siem-historical-detections/jobs", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"1fa783c4-c6ce-430c-972c-43a2ccde1420\",\"type\":\"historicalDetectionsJob\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + } + ], + "scenario": "Run a historical job returns \"Status created\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-17T16:27:52.376Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "page": { + "cursor": "invalid_cursor" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"document is missing required top-level members; must have one of: \\\"data\\\", \\\"meta\\\", \\\"errors\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Search security findings returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-15T22:43:55.549Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": "@severity:(critical OR high)" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"Y2RiNWYyMmQ2Nzg2ZTBkYjA1ZTc5NDM3MDU5NGJhNTh-MWIxYTc2ZDZkNDZlYmE0YjFlY2RkMDY0NjRlYjIwZTk=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2024-45337\",\"GO-2024-3321\"],\"cve\":\"CVE-2024-45337\",\"id\":\"GHSA-v778-237x-gjrc\",\"modified_at\":1738337443000,\"published_at\":1733954584000,\"summary\":\"Misuse of ServerConfig.PublicKeyCallback may cause authorization bypass in golang.org/x/crypto\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"990060747993\",\"cloud_provider\":\"aws\",\"display_name\":\"ip-10-151-60-149.us-west-2.compute.internal-raboot-c\",\"region\":\"us-west-2\"},\"detection_changed_at\":1765838619159,\"finding_id\":\"Y2RiNWYyMmQ2Nzg2ZTBkYjA1ZTc5NDM3MDU5NGJhNTh-MWIxYTc2ZDZkNDZlYmE0YjFlY2RkMDY0NjRlYjIwZTk=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765838614786,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0e7b60ad05b2da7ed\",\"name\":\"ip-10-151-60-149.us-west-2.compute.internal-raboot-c\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"raboot-c\"},\"last_seen_at\":1765838619159,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"golang.org/x/crypto\"],\"name\":\"golang.org/x/crypto\",\"normalized_name\":\"golang.org/x/crypto\",\"version\":\"v0.18.0\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"golang.org/x/crypto\",\"version\":\"0.31.0\"}]},\"recommended\":{\"name\":\"golang.org/x/crypto\",\"version\":\"0.31.0\"}},\"resource_id\":\"1b1a76d6d46eba4b1ecdd06464eb20e9\",\"resource_name\":\"ip-10-151-60-149.us-west-2.compute.internal-raboot-c\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/NHAS/CVE-2024-45337-POC\",\"https://github.com/NHAS/VULNERABLE-CVE-2024-45337\",\"https://github.com/peace-maker/CVE-2024-45337\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.42906,\"epss_severity\":\"medium\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":7,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N/E:H/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:X/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":9.1,\"value\":\"critical\",\"value_id\":4,\"vector\":\"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N\"}},\"status\":\"open\",\"title\":\"Misuse of ServerConfig.PublicKeyCallback may cause authorization bypass in golang.org/x/crypto\",\"vulnerability\":{\"cwes\":[\"CWE-285\"],\"hash\":\"2e1b9d06d12bdbdeba39c6f6ade74fe9091a07496078481ff81ce72884abcd31\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"kube_node_role:nodeless\",\"aws:ec2launchtemplate:id:lt-0105c69a444a8e9fb\",\"ecosystem:go\",\"dd_compute_k8s_platform_version:v6-260-2\",\"k8s.io/cluster-autoscaler/node-template/label/agent-profile.datadoghq.com/name:compute-nodeless-200m-v2\",\"aws_account:990060747993\",\"fix_version:v0.46.0\",\"instance-type:c6a.2xlarge\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:13480074445\",\"kubernetes_cluster:raboot-c\",\"source:datadog\",\"k8s.io/cluster-autoscaler/node-template/taint/node:nodeless:noschedule\",\"vulnerability_status:open\",\"fix_available:available\",\"cluster_name:raboot-c\",\"iam_profile:k8s/prtest02-staging-dog-raboot-c-kube-node_v2\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:5m0s\",\"asset_type:host\",\"new:true\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/enable-eni-pd:true\",\"site:datadoghq.com\",\"kubernetes.io/cluster/raboot-c:owned\",\"assignee:none\",\"alias:go-2024-3321\",\"assignee_id:none\",\"in_production:false\",\"cve:cve-2024-45337\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless-amd64-d-c6a-2xlarge\",\"availability-zone:us-west-2c\",\"is_kube_cluster_experimental:false\",\"node.datadoghq.com/flavor:standard\",\"adp_enabled:false\",\"autoscaling_group:prtest02-staging-dog-raboot-c-k8s-ng-asg-faab57746e6215c5\",\"base_score:9.1\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:nodeless-amd64-d-c6a-2xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/flavor:standard\",\"team:compute-cloud-accounts\",\"public_exploit_available:true\",\"image:ami-0e7b60ad05b2da7ed\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless\",\"ng_local_storage:false\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:7900m\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2c\",\"ng_cluster_autoscaler:true\",\"asset_id:ip-10-151-60-149.us-west-2.compute.internal-raboot-c\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kube-system\",\"k8s.io/cluster-autoscaler/node-template/label/scalingset:cpu_arch-amd64\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"instance_type:c6a.2xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/class:nodeless\",\"security-group:sg-0975ebcfe01315df0\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"epss_raw_score:0.42906\",\"nodegroup:kube-system_nodeless-amd64-d-c6a-2xlarge\",\"exposure_time_days:0\",\"score:7.0\",\"role:kube-node\",\"env:staging\",\"datacenter:prtest02.staging.dog\",\"package_version:v0.18.0\",\"base_severity:critical\",\"account:staging-prtest02-ember-c\",\"security-group:sg-08568810eba5fc2d8\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"aws:ec2:fleet-id:fleet-0c1e1c15-ce07-ce8f-0eb2-2982e1977208\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:372mi\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownutilizationthreshold:0.95\",\"scored:false\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/cpu_arch:amd64\",\"severity:high\",\"kube_node_role:compute\",\"k8s.io/cluster-autoscaler/node-template/label/agent.datadoghq.com/datadogagentprofile:compute-nodeless-200m-v2\",\"nodegroups.datadoghq.com/nodegroup-set:kube-system_nodeless-amd64\",\"os_name:ubuntu\",\"alias:cve-2024-45337\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:45\",\"region:us-west-2\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:53034256170\",\"nodegroups.datadoghq.com/owner:k8s-dynamic-nodegroup-controller\",\"kube_cluster_name:raboot-c\",\"orch_cluster_id:76cfd63e-1d3b-4bf3-b0b0-93e1423ef6cc\",\"name:kube-system_nodeless-amd64-d-c6a-2xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:false\",\"nodegroups.datadoghq.com/name:nodeless-amd64-d-c6a-2xlarge\",\"node.datadoghq.com/cgroup:v2\",\"node.datadoghq.com/version:v6-260-2\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"vuln_id:2e1b9d06d12bdbdeba39c6f6ade74fe9091a07496078481ff81ce72884abcd31\",\"hash:2e1b9d06d12bdbdeba39c6f6ade74fe9091a07496078481ff81ce72884abcd31\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"cpu_arch:amd64\",\"last_detected_minutes:0\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"kube_node:ip-10-151-60-149.us-west-2.compute.internal\",\"kube_node_role:nodeless-amd64-d-c6a-2xlarge\",\"package_name:golang.org/x/crypto\",\"auto-discovery.cluster-autoscaler.k8s.io/raboot-c\",\"event_type:new\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"env:staging\"],\"timestamp\":1765838619159}},{\"id\":\"YTA2ODU1YjVjYWZlZWY5Y2MyMzczMTY4MDdhYjRlMWJ-ZWExMDk2NDQ2ZjM3Mjg2MzZkMzA3ZWQ5M2ZiNDdlZjM=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CGA-rqqc-qwmr-qw72\",\"CGA-vmcg-54pm-cp7r\",\"CVE-2024-27304\",\"GHSA-7jwh-3vrq-q3m8\",\"GO-2024-2606\"],\"cve\":\"CVE-2024-27304\",\"id\":\"GHSA-mrww-27vc-gghv\",\"modified_at\":1734042636000,\"published_at\":1709585004000,\"summary\":\"pgx SQL Injection via Protocol Message Size Overflow\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"727006795293\",\"cloud_provider\":\"aws\",\"display_name\":\"i-048e423259eb6256a\",\"region\":\"us-east-1\"},\"detection_changed_at\":1765838618317,\"finding_id\":\"YTA2ODU1YjVjYWZlZWY5Y2MyMzczMTY4MDdhYjRlMWJ-ZWExMDk2NDQ2ZjM3Mjg2MzZkMzA3ZWQ5M2ZiNDdlZjM=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765826319813,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0d63de838a36a5577\",\"name\":\"i-048e423259eb6256a\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"stripe\"},\"last_seen_at\":1765838618317,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"github.com/jackc/pgx/v4\"],\"name\":\"github.com/jackc/pgx/v4\",\"normalized_name\":\"github.com/jackc/pgx/v4\",\"version\":\"v4.18.1\"},\"related_services\":[\"exposed_to_attacks:false\"],\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"github.com/jackc/pgx/v4\",\"version\":\"4.18.2\"}]},\"recommended\":{\"name\":\"github.com/jackc/pgx/v4\",\"version\":\"4.18.2\"}},\"resource_id\":\"ea1096446f3728636d307ed93fb47ef3\",\"resource_name\":\"i-048e423259eb6256a\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false,\"is_publicly_accessible\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/roaris/CVE-2024-27304-PoC\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.01391,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false},\"is_publicly_accessible\":{\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":7.3,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:A/CR:L/IR:L/AR:L/MAV:A\"},\"base\":{\"score\":9.3,\"value\":\"critical\",\"value_id\":4,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:U\"}},\"status\":\"auto_closed\",\"title\":\"pgx SQL Injection via Protocol Message Size Overflow\",\"vulnerability\":{\"cwes\":[\"CWE-89\",\"CWE-190\"],\"hash\":\"82a26ba1ef91184df0a023d923e2542542cfd589155f06f5b4a08dae468d4b2e\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838618317,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-east-1b\",\"kube_node_role:nodeless\",\"ecosystem:go\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:nodeless-amd64-d-m6a-4xlarge\",\"event_type:close\",\"availability-zone:us-east-1b\",\"package_version:v4.18.1\",\"source:datadog\",\"kube_node_role:nodeless-amd64-d-m6a-4xlarge\",\"k8s.io/cluster-autoscaler/node-template/taint/node:nodeless:noschedule\",\"site:datad0g.com\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:106068512341\",\"fix_available:available\",\"fix_version:v4.18.3\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:15900m\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:5m0s\",\"asset_type:host\",\"aws:ec2launchtemplate:id:lt-0ab29ef7bcf9901c8\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/enable-eni-pd:true\",\"assignee:none\",\"assignee_id:none\",\"in_production:false\",\"aws_account:727006795293\",\"is_kube_cluster_experimental:false\",\"node.datadoghq.com/flavor:standard\",\"adp_enabled:false\",\"instance_type:m6a.4xlarge\",\"nodegroups.datadoghq.com/name:nodeless-amd64-d-m6a-4xlarge\",\"base_score:9.3\",\"auto-discovery.cluster-autoscaler.k8s.io/stripe\",\"alias:cga-vmcg-54pm-cp7r\",\"kubernetes.io/cluster/stripe:owned\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/flavor:standard\",\"nodegroup:kube-system_nodeless-amd64-d-m6a-4xlarge\",\"public_exploit_available:true\",\"region:us-east-1\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless\",\"ng_local_storage:false\",\"close_count:0\",\"ng_cluster_autoscaler:true\",\"service_exposed_to_attacks:false\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kube-system\",\"k8s.io/cluster-autoscaler/node-template/label/scalingset:cpu_arch-amd64\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"alias:cve-2024-27304\",\"k8s.io/cluster-autoscaler/node-template/label/class:nodeless\",\"asset_id:i-048e423259eb6256a\",\"cve:cve-2024-27304\",\"account:staging\",\"name:kube-system_nodeless-amd64-d-m6a-4xlarge\",\"image:ami-0d63de838a36a5577\",\"vuln_id:82a26ba1ef91184df0a023d923e2542542cfd589155f06f5b4a08dae468d4b2e\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless-amd64-d-m6a-4xlarge\",\"node.datadoghq.com/version:v6-269-0\",\"kube_cluster_name:stripe\",\"exposure_time_days:0\",\"aws:ec2:fleet-id:fleet-c5172d35-9624-6c05-2c30-812acd886a16\",\"cluster_name:stripe\",\"score:7.3\",\"role:kube-node\",\"env:staging\",\"base_severity:critical\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"security-group:sg-faa8cdb1\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownutilizationthreshold:0.95\",\"hash:82a26ba1ef91184df0a023d923e2542542cfd589155f06f5b4a08dae468d4b2e\",\"scored:false\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/cpu_arch:amd64\",\"alias:go-2024-2606\",\"severity:high\",\"kube_node_role:compute\",\"nodegroups.datadoghq.com/nodegroup-set:kube-system_nodeless-amd64\",\"kube_node:ip-10-131-1-21.ec2.internal\",\"os_name:ubuntu\",\"alias:ghsa-7jwh-3vrq-q3m8\",\"nodegroups.datadoghq.com/owner:k8s-dynamic-nodegroup-controller\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:745mi\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:false\",\"security-group:sg-0a3744a5f247135d1\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:59987440026\",\"node.datadoghq.com/cgroup:v2\",\"instance-type:m6a.4xlarge\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"dd_compute_k8s_platform_version:v6-269-0\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"k8s.io/cluster-autoscaler/node-template/label/agent-profile.datadoghq.com/name:compute-nodeless-300m-v1\",\"autoscaling_group:us1-staging-dog-stripe-k8s-ng-asg-8a5078b204fcfc2d\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"orch_cluster_id:4c9f3702-c3bd-4d69-871b-cfa039a397df\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"k8s.io/cluster-autoscaler/node-template/label/agent.datadoghq.com/datadogagentprofile:compute-nodeless-300m-v1\",\"last_detected_minutes:0\",\"epss_raw_score:0.01391\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"datacenter:us1.staging.dog\",\"previous_status:open\",\"iam_profile:k8s/us1-staging-dog-stripe-kube-node_v2\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:160\",\"alias:cga-rqqc-qwmr-qw72\",\"package_name:github.com/jackc/pgx/v4\",\"kubernetes_cluster:stripe\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"env:staging\"],\"timestamp\":1765838618317}},{\"id\":\"NjUxZDEyZGRmOTI0ZmI1NTg1YzJkOTI5NzQ1ZjQ0MzJ-NmM3YTFjODdlMTRlZDMxYzUxNTI0NTY0YmNjYzY2Mjc=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2024-10220\",\"GO-2024-3286\"],\"cve\":\"CVE-2024-10220\",\"id\":\"GHSA-27wf-5967-98gx\",\"modified_at\":1734126344000,\"published_at\":1732311135000,\"summary\":\" Kubernetes kubelet arbitrary command execution\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"i-0287cce0c5ced7759\"},\"detection_changed_at\":1765838618125,\"finding_id\":\"NjUxZDEyZGRmOTI0ZmI1NTg1YzJkOTI5NzQ1ZjQ0MzJ-NmM3YTFjODdlMTRlZDMxYzUxNTI0NTY0YmNjYzY2Mjc=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765837776218,\"host\":{\"name\":\"i-0287cce0c5ced7759\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"stripe\"},\"last_seen_at\":1765838618125,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"k8s.io/kubernetes\"],\"name\":\"k8s.io/kubernetes\",\"normalized_name\":\"k8s.io/kubernetes\",\"version\":\"v1.30.0\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"k8s.io/kubernetes\",\"version\":\"1.30.3\"}]},\"recommended\":{\"name\":\"k8s.io/kubernetes\",\"version\":\"1.30.3\"}},\"resource_id\":\"6c7a1c87e14ed31c51524564bccc6627\",\"resource_name\":\"i-0287cce0c5ced7759\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/filipzag/CVE-2024-10220\",\"https://github.com/any2sec/cve-2024-10220\",\"https://github.com/XiaomingX/cve-2024-10220-githooks\",\"https://github.com/mrk336/CVE-2024-10220-Kubernetes-gitRepo-Volume-Vulnerability\",\"https://github.com/candranapits/poc-CVE-2024-10220\",\"https://github.com/orgC/CVE-2024-10220-demo\",\"https://github.com/mochizuki875/CVE-2024-10220-githooks\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.22805,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":7.1,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:A/CR:L/IR:L/AR:L\"},\"base\":{\"score\":8.6,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N\"}},\"status\":\"auto_closed\",\"title\":\" Kubernetes kubelet arbitrary command execution\",\"vulnerability\":{\"cwes\":[\"CWE-22\"],\"hash\":\"ad302a93e517fd0a5e85db047457aa1de46605d3ccd9cee8a922ffc0986903fd\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838618125,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"fix_version:v1.32.8\",\"kube_cluster_name:stripe\",\"base_score:8.6\",\"exposure_time_days:0\",\"ecosystem:go\",\"score:7.1\",\"cluster_name:stripe\",\"cve:cve-2024-10220\",\"event_type:close\",\"nodegroups.datadoghq.com/name:flink-metering-jose-jobmanager\",\"env:staging\",\"source:datadog\",\"vuln_id:ad302a93e517fd0a5e85db047457aa1de46605d3ccd9cee8a922ffc0986903fd\",\"site:datad0g.com\",\"package_version:v1.30.0\",\"fix_available:available\",\"scored:false\",\"kube_node_role:compute\",\"severity:high\",\"asset_type:host\",\"os_name:ubuntu\",\"instance_type:m5.2xlarge\",\"assignee:none\",\"alias:go-2024-3286\",\"assignee_id:none\",\"in_production:false\",\"kube_node_role:flink-metering-jose-jobmanager\",\"epss_raw_score:0.22805\",\"alias:cve-2024-10220\",\"is_kube_cluster_experimental:false\",\"hash:ad302a93e517fd0a5e85db047457aa1de46605d3ccd9cee8a922ffc0986903fd\",\"adp_enabled:false\",\"node.datadoghq.com/cgroup:v2\",\"tool:infra\",\"kube_node:ip-10-131-0-241.ec2.internal\",\"public_exploit_available:true\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"ng_local_storage:false\",\"close_count:0\",\"asset_id:i-0287cce0c5ced7759\",\"orch_cluster_id:4c9f3702-c3bd-4d69-871b-cfa039a397df\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"ng_cluster_autoscaler:true\",\"last_detected_minutes:0\",\"base_severity:high\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"node.datadoghq.com/version:v6-271-0\",\"datacenter:us1.staging.dog\",\"previous_status:open\",\"nodegroups.datadoghq.com/namespace:metering\",\"package_name:k8s.io/kubernetes\",\"type:component_with_known_vulnerability\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"env:staging\"],\"timestamp\":1765838618125}},{\"id\":\"NjI4MzY3YWUxYzhjZDU0OTNlZGY2NDc5Y2Q2ZTNmOWF-ZGFmYjNkMmQ4ZjYzODRhYzM4NmFhNGZhNmNmNmM0ZDk=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CGA-rqqc-qwmr-qw72\",\"CGA-vmcg-54pm-cp7r\",\"CVE-2024-27304\",\"GHSA-7jwh-3vrq-q3m8\",\"GO-2024-2606\"],\"cve\":\"CVE-2024-27304\",\"id\":\"GHSA-mrww-27vc-gghv\",\"modified_at\":1734042636000,\"published_at\":1709585004000,\"summary\":\"pgx SQL Injection via Protocol Message Size Overflow\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"727006795293\",\"cloud_provider\":\"aws\",\"display_name\":\"i-0f1ef8599b4b41431\",\"region\":\"us-east-1\"},\"detection_changed_at\":1765838618006,\"finding_id\":\"NjI4MzY3YWUxYzhjZDU0OTNlZGY2NDc5Y2Q2ZTNmOWF-ZGFmYjNkMmQ4ZjYzODRhYzM4NmFhNGZhNmNmNmM0ZDk=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765833769555,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0d63de838a36a5577\",\"name\":\"i-0f1ef8599b4b41431\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"oddish-b\"},\"last_seen_at\":1765838618006,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"github.com/jackc/pgx\"],\"name\":\"github.com/jackc/pgx\",\"normalized_name\":\"github.com/jackc/pgx\",\"version\":\"v3.3.0+incompatible\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"github.com/jackc/pgx\",\"version\":\"4.18.2\"}]},\"recommended\":{\"name\":\"github.com/jackc/pgx\",\"version\":\"4.18.2\"}},\"resource_id\":\"dafb3d2d8f6384ac386aa4fa6cf6c4d9\",\"resource_name\":\"i-0f1ef8599b4b41431\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/roaris/CVE-2024-27304-PoC\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.01391,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":8.9,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:A/CR:L/IR:L/AR:L\"},\"base\":{\"score\":9.3,\"value\":\"critical\",\"value_id\":4,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:U\"}},\"status\":\"auto_closed\",\"title\":\"pgx SQL Injection via Protocol Message Size Overflow\",\"vulnerability\":{\"cwes\":[\"CWE-89\",\"CWE-190\"],\"hash\":\"7562b2b924b89f55f238ab037f6f507bfb657c2183e353dfec1c1b796ab8eeae\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838618006,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-east-1b\",\"hash:7562b2b924b89f55f238ab037f6f507bfb657c2183e353dfec1c1b796ab8eeae\",\"kube_node_role:nodeless\",\"ecosystem:go\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:nodeless-amd64-d-m6a-4xlarge\",\"event_type:close\",\"availability-zone:us-east-1b\",\"vuln_id:7562b2b924b89f55f238ab037f6f507bfb657c2183e353dfec1c1b796ab8eeae\",\"k8s.io/cluster-autoscaler/node-template/label/agent-profile.datadoghq.com/name:compute-nodeless-200m-v2\",\"asset_id:i-0f1ef8599b4b41431\",\"source:datadog\",\"kube_node_role:nodeless-amd64-d-m6a-4xlarge\",\"k8s.io/cluster-autoscaler/node-template/taint/node:nodeless:noschedule\",\"site:datad0g.com\",\"aws:ec2launchtemplate:id:lt-0aa5742eec024a5e8\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:106068512341\",\"fix_available:available\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:15900m\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:5m0s\",\"asset_type:host\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/enable-eni-pd:true\",\"assignee:none\",\"assignee_id:none\",\"in_production:false\",\"aws_account:727006795293\",\"is_kube_cluster_experimental:false\",\"node.datadoghq.com/flavor:standard\",\"adp_enabled:false\",\"package_version:v3.3.0_incompatible\",\"instance_type:m6a.4xlarge\",\"nodegroups.datadoghq.com/name:nodeless-amd64-d-m6a-4xlarge\",\"base_score:9.3\",\"kube_cluster_name:oddish-b\",\"iam_profile:k8s/us1-staging-dog-oddish-b-kube-node_v2\",\"alias:cga-vmcg-54pm-cp7r\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/flavor:standard\",\"nodegroup:kube-system_nodeless-amd64-d-m6a-4xlarge\",\"public_exploit_available:true\",\"autoscaling_group:us1-staging-dog-oddish-b-k8s-ng-asg-376ded054ca1c4df\",\"kubernetes.io/cluster/oddish-b:owned\",\"region:us-east-1\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless\",\"ng_local_storage:false\",\"close_count:0\",\"ng_cluster_autoscaler:true\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kube-system\",\"k8s.io/cluster-autoscaler/node-template/label/scalingset:cpu_arch-amd64\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"alias:cve-2024-27304\",\"k8s.io/cluster-autoscaler/node-template/label/class:nodeless\",\"cve:cve-2024-27304\",\"account:staging\",\"name:kube-system_nodeless-amd64-d-m6a-4xlarge\",\"image:ami-0d63de838a36a5577\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless-amd64-d-m6a-4xlarge\",\"node.datadoghq.com/version:v6-269-0\",\"exposure_time_days:0\",\"cluster_name:oddish-b\",\"security-group:sg-0b9e1c6b4773288df\",\"orch_cluster_id:b7d5bafd-28f9-42b1-84a9-fa705f4d0d54\",\"role:kube-node\",\"package_name:github.com/jackc/pgx\",\"env:staging\",\"base_severity:critical\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"security-group:sg-faa8cdb1\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownutilizationthreshold:0.95\",\"scored:false\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/cpu_arch:amd64\",\"alias:go-2024-2606\",\"severity:high\",\"kube_node_role:compute\",\"k8s.io/cluster-autoscaler/node-template/label/agent.datadoghq.com/datadogagentprofile:compute-nodeless-200m-v2\",\"nodegroups.datadoghq.com/nodegroup-set:kube-system_nodeless-amd64\",\"os_name:ubuntu\",\"alias:ghsa-7jwh-3vrq-q3m8\",\"aws:ec2:fleet-id:fleet-7bbf19a6-a3a4-ee94-0c38-a582da17231b\",\"nodegroups.datadoghq.com/owner:k8s-dynamic-nodegroup-controller\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:745mi\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:false\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:59987440026\",\"node.datadoghq.com/cgroup:v2\",\"instance-type:m6a.4xlarge\",\"score:8.9\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"dd_compute_k8s_platform_version:v6-269-0\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"last_detected_minutes:0\",\"epss_raw_score:0.01391\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"kube_node:ip-10-128-39-138.ec2.internal\",\"datacenter:us1.staging.dog\",\"previous_status:open\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:160\",\"alias:cga-rqqc-qwmr-qw72\",\"kubernetes_cluster:oddish-b\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"auto-discovery.cluster-autoscaler.k8s.io/oddish-b\",\"env:staging\"],\"timestamp\":1765838618006}},{\"id\":\"YzE5MmY0MWI2OTdkN2Y5NTZiNmNiODI1ZTdiNDhlZTh-YzZlMmY1ZGIwOTU0ODIzM2MwZDFmNTdjZmZjMTdjMzQ=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2024-45337\",\"GO-2024-3321\"],\"cve\":\"CVE-2024-45337\",\"id\":\"GHSA-v778-237x-gjrc\",\"modified_at\":1738337443000,\"published_at\":1733954584000,\"summary\":\"Misuse of ServerConfig.PublicKeyCallback may cause authorization bypass in golang.org/x/crypto\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"i-068207de5f413c29f\"},\"detection_changed_at\":1765838617916,\"finding_id\":\"YzE5MmY0MWI2OTdkN2Y5NTZiNmNiODI1ZTdiNDhlZTh-YzZlMmY1ZGIwOTU0ODIzM2MwZDFmNTdjZmZjMTdjMzQ=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765837162559,\"host\":{\"name\":\"i-068207de5f413c29f\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"oddish-b\"},\"last_seen_at\":1765838617916,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"golang.org/x/crypto\"],\"name\":\"golang.org/x/crypto\",\"normalized_name\":\"golang.org/x/crypto\",\"version\":\"v0.18.0\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"golang.org/x/crypto\",\"version\":\"0.31.0\"}]},\"recommended\":{\"name\":\"golang.org/x/crypto\",\"version\":\"0.31.0\"}},\"resource_id\":\"c6e2f5db09548233c0d1f57cffc17c34\",\"resource_name\":\"i-068207de5f413c29f\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/NHAS/CVE-2024-45337-POC\",\"https://github.com/NHAS/VULNERABLE-CVE-2024-45337\",\"https://github.com/peace-maker/CVE-2024-45337\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.42906,\"epss_severity\":\"medium\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":7,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N/E:H/RL:X/RC:X/CR:L/IR:L/AR:L/MAV:X/MAC:X/MPR:X/MUI:X/MS:X/MC:X/MI:X/MA:X\"},\"base\":{\"score\":9.1,\"value\":\"critical\",\"value_id\":4,\"vector\":\"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N\"}},\"status\":\"auto_closed\",\"title\":\"Misuse of ServerConfig.PublicKeyCallback may cause authorization bypass in golang.org/x/crypto\",\"vulnerability\":{\"cwes\":[\"CWE-285\"],\"hash\":\"2e1b9d06d12bdbdeba39c6f6ade74fe9091a07496078481ff81ce72884abcd31\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838617916,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"epss_raw_score:0.42906\",\"exposure_time_days:0\",\"kube_node_role:nodeless\",\"cluster_name:oddish-b\",\"score:7.0\",\"ecosystem:go\",\"event_type:close\",\"orch_cluster_id:b7d5bafd-28f9-42b1-84a9-fa705f4d0d54\",\"env:staging\",\"fix_version:v0.46.0\",\"package_version:v0.18.0\",\"base_severity:critical\",\"source:datadog\",\"site:datad0g.com\",\"fix_available:available\",\"scored:false\",\"kube_node_role:compute\",\"severity:high\",\"asset_type:host\",\"os_name:ubuntu\",\"asset_id:i-068207de5f413c29f\",\"alias:cve-2024-45337\",\"assignee:none\",\"alias:go-2024-3321\",\"assignee_id:none\",\"cve:cve-2024-45337\",\"in_production:false\",\"node.datadoghq.com/flavor:nodeless-fastephemeral\",\"kube_node:ip-10-128-37-184.ec2.internal\",\"is_kube_cluster_experimental:false\",\"adp_enabled:false\",\"node.datadoghq.com/cgroup:v2\",\"nodegroups.datadoghq.com/name:nodeless-fastephemeral-arm64-m6gd-8xlarge\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"kube_cluster_name:oddish-b\",\"instance_type:m6gd.8xlarge\",\"base_score:9.1\",\"vuln_id:2e1b9d06d12bdbdeba39c6f6ade74fe9091a07496078481ff81ce72884abcd31\",\"hash:2e1b9d06d12bdbdeba39c6f6ade74fe9091a07496078481ff81ce72884abcd31\",\"kube_node_role:nodeless-fastephemeral-arm64-m6gd-8xlarge\",\"public_exploit_available:true\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"ng_local_storage:false\",\"close_count:0\",\"vulnerability_status:auto-closed\",\"ng_cluster_autoscaler:true\",\"last_detected_minutes:0\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"node.datadoghq.com/version:v6-271-0\",\"datacenter:us1.staging.dog\",\"package_name:golang.org/x/crypto\",\"previous_status:open\",\"cpu_arch:arm64\",\"type:component_with_known_vulnerability\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"env:staging\"],\"timestamp\":1765838617916}},{\"id\":\"NjlhMzIwMDBjNmVlZDNmZGFjMTUwODFmNzc3ZjA0OTl-NmM3YTFjODdlMTRlZDMxYzUxNTI0NTY0YmNjYzY2Mjc=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CGA-rqqc-qwmr-qw72\",\"CGA-vmcg-54pm-cp7r\",\"CVE-2024-27304\",\"GHSA-7jwh-3vrq-q3m8\",\"GO-2024-2606\"],\"cve\":\"CVE-2024-27304\",\"id\":\"GHSA-mrww-27vc-gghv\",\"modified_at\":1734042636000,\"published_at\":1709585004000,\"summary\":\"pgx SQL Injection via Protocol Message Size Overflow\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"i-0287cce0c5ced7759\"},\"detection_changed_at\":1765838617865,\"finding_id\":\"NjlhMzIwMDBjNmVlZDNmZGFjMTUwODFmNzc3ZjA0OTl-NmM3YTFjODdlMTRlZDMxYzUxNTI0NTY0YmNjYzY2Mjc=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765837776218,\"host\":{\"name\":\"i-0287cce0c5ced7759\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"stripe\"},\"last_seen_at\":1765838617865,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"github.com/jackc/pgx\"],\"name\":\"github.com/jackc/pgx\",\"normalized_name\":\"github.com/jackc/pgx\",\"version\":\"v3.3.0+incompatible\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"github.com/jackc/pgx\",\"version\":\"4.18.2\"}]},\"recommended\":{\"name\":\"github.com/jackc/pgx\",\"version\":\"4.18.2\"}},\"resource_id\":\"6c7a1c87e14ed31c51524564bccc6627\",\"resource_name\":\"i-0287cce0c5ced7759\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/roaris/CVE-2024-27304-PoC\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.01391,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":8.9,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:A/CR:L/IR:L/AR:L\"},\"base\":{\"score\":9.3,\"value\":\"critical\",\"value_id\":4,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:U\"}},\"status\":\"auto_closed\",\"title\":\"pgx SQL Injection via Protocol Message Size Overflow\",\"vulnerability\":{\"cwes\":[\"CWE-89\",\"CWE-190\"],\"hash\":\"7562b2b924b89f55f238ab037f6f507bfb657c2183e353dfec1c1b796ab8eeae\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838617865,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kube_cluster_name:stripe\",\"hash:7562b2b924b89f55f238ab037f6f507bfb657c2183e353dfec1c1b796ab8eeae\",\"exposure_time_days:0\",\"ecosystem:go\",\"cluster_name:stripe\",\"event_type:close\",\"nodegroups.datadoghq.com/name:flink-metering-jose-jobmanager\",\"vuln_id:7562b2b924b89f55f238ab037f6f507bfb657c2183e353dfec1c1b796ab8eeae\",\"package_name:github.com/jackc/pgx\",\"env:staging\",\"base_severity:critical\",\"source:datadog\",\"site:datad0g.com\",\"fix_available:available\",\"scored:false\",\"alias:go-2024-2606\",\"kube_node_role:compute\",\"severity:high\",\"asset_type:host\",\"os_name:ubuntu\",\"instance_type:m5.2xlarge\",\"assignee:none\",\"alias:ghsa-7jwh-3vrq-q3m8\",\"assignee_id:none\",\"in_production:false\",\"kube_node_role:flink-metering-jose-jobmanager\",\"is_kube_cluster_experimental:false\",\"adp_enabled:false\",\"node.datadoghq.com/cgroup:v2\",\"package_version:v3.3.0_incompatible\",\"score:8.9\",\"tool:infra\",\"base_score:9.3\",\"kube_node:ip-10-131-0-241.ec2.internal\",\"alias:cga-vmcg-54pm-cp7r\",\"public_exploit_available:true\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"ng_local_storage:false\",\"asset_id:i-0287cce0c5ced7759\",\"close_count:0\",\"orch_cluster_id:4c9f3702-c3bd-4d69-871b-cfa039a397df\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"ng_cluster_autoscaler:true\",\"last_detected_minutes:0\",\"epss_raw_score:0.01391\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"node.datadoghq.com/version:v6-271-0\",\"datacenter:us1.staging.dog\",\"alias:cve-2024-27304\",\"previous_status:open\",\"cve:cve-2024-27304\",\"alias:cga-rqqc-qwmr-qw72\",\"nodegroups.datadoghq.com/namespace:metering\",\"type:component_with_known_vulnerability\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"env:staging\"],\"timestamp\":1765838617865}},{\"id\":\"NTE0YWUwMWUwYjdiMTJlNTdmMjkwZGU3NjYwYzc3ZGF-MjRmYmFmY2UzNGZjNzRlZGY1NjI5M2ExZGIwNjBkZjM=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CGA-rqqc-qwmr-qw72\",\"CGA-vmcg-54pm-cp7r\",\"CVE-2024-27304\",\"GHSA-mrww-27vc-gghv\",\"GO-2024-2606\"],\"cve\":\"CVE-2024-27304\",\"id\":\"GHSA-7jwh-3vrq-q3m8\",\"modified_at\":1729574941941,\"published_at\":1709585125000,\"summary\":\"pgproto3 SQL Injection via Protocol Message Size Overflow\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"i-045e3e76dfdf37aae\"},\"detection_changed_at\":1765838617835,\"finding_id\":\"NTE0YWUwMWUwYjdiMTJlNTdmMjkwZGU3NjYwYzc3ZGF-MjRmYmFmY2UzNGZjNzRlZGY1NjI5M2ExZGIwNjBkZjM=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765837126551,\"host\":{\"name\":\"i-045e3e76dfdf37aae\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"oddish-b\"},\"last_seen_at\":1765838617835,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"github.com/jackc/pgproto3/v2\"],\"name\":\"github.com/jackc/pgproto3/v2\",\"normalized_name\":\"github.com/jackc/pgproto3/v2\",\"version\":\"v2.3.2\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"github.com/jackc/pgproto3/v2\",\"version\":\"2.3.3\"}]},\"recommended\":{\"name\":\"github.com/jackc/pgproto3/v2\",\"version\":\"2.3.3\"}},\"resource_id\":\"24fbafce34fc74edf56293a1db060df3\",\"resource_name\":\"i-045e3e76dfdf37aae\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/roaris/CVE-2024-27304-PoC\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.01391,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":8.9,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:A/CR:L/IR:L/AR:L\"},\"base\":{\"score\":9.3,\"value\":\"critical\",\"value_id\":4,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:U\"}},\"status\":\"auto_closed\",\"title\":\"pgproto3 SQL Injection via Protocol Message Size Overflow\",\"vulnerability\":{\"cwes\":[\"CWE-89\",\"CWE-190\"],\"hash\":\"f5b9790b261031aeba5da3e06abc2f1320266b51b957f91df446edc4b8279a7e\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838617835,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"fix_version:v2.3.4-0.20250125160525-bc041643406d\",\"exposure_time_days:0\",\"kube_node_role:nodeless\",\"cluster_name:oddish-b\",\"ecosystem:go\",\"event_type:close\",\"orch_cluster_id:b7d5bafd-28f9-42b1-84a9-fa705f4d0d54\",\"env:staging\",\"base_severity:critical\",\"source:datadog\",\"site:datad0g.com\",\"fix_available:available\",\"scored:false\",\"alias:go-2024-2606\",\"kube_node_role:compute\",\"severity:high\",\"asset_type:host\",\"os_name:ubuntu\",\"assignee:none\",\"assignee_id:none\",\"in_production:false\",\"node.datadoghq.com/flavor:nodeless-fastephemeral\",\"hash:f5b9790b261031aeba5da3e06abc2f1320266b51b957f91df446edc4b8279a7e\",\"is_kube_cluster_experimental:false\",\"adp_enabled:false\",\"node.datadoghq.com/cgroup:v2\",\"nodegroups.datadoghq.com/name:nodeless-fastephemeral-arm64-m6gd-8xlarge\",\"score:8.9\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"base_score:9.3\",\"kube_cluster_name:oddish-b\",\"instance_type:m6gd.8xlarge\",\"package_version:v2.3.2\",\"alias:ghsa-mrww-27vc-gghv\",\"alias:cga-vmcg-54pm-cp7r\",\"kube_node_role:nodeless-fastephemeral-arm64-m6gd-8xlarge\",\"public_exploit_available:true\",\"dd_rule_type:not-empty\",\"vuln_id:f5b9790b261031aeba5da3e06abc2f1320266b51b957f91df446edc4b8279a7e\",\"os_version:22.04\",\"ng_local_storage:false\",\"close_count:0\",\"vulnerability_status:auto-closed\",\"ng_cluster_autoscaler:true\",\"last_detected_minutes:0\",\"epss_raw_score:0.01391\",\"asset_id:i-045e3e76dfdf37aae\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"node.datadoghq.com/version:v6-271-0\",\"kube_node:ip-10-128-37-96.ec2.internal\",\"datacenter:us1.staging.dog\",\"alias:cve-2024-27304\",\"previous_status:open\",\"package_name:github.com/jackc/pgproto3/v2\",\"cve:cve-2024-27304\",\"alias:cga-rqqc-qwmr-qw72\",\"cpu_arch:arm64\",\"type:component_with_known_vulnerability\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"env:staging\"],\"timestamp\":1765838617835}},{\"id\":\"ZjQ1YzE1NWQ5ODQ4NDk4ZmRjZTgyNTA1MzllZDY4OGV-N2YyZDlhNmRkMTE4NWYzODAyYTllZGFjMTczOTAzMTI=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2024-41110\",\"GO-2024-3005\"],\"cve\":\"CVE-2024-41110\",\"id\":\"GHSA-v23v-6jw2-98fq\",\"modified_at\":1723230467000,\"published_at\":1722334737000,\"summary\":\"Authz zero length regression\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"account\":\"727006795293\",\"cloud_provider\":\"aws\",\"display_name\":\"i-0e04298f4842968e8\",\"region\":\"us-east-1\"},\"detection_changed_at\":1765838617779,\"finding_id\":\"ZjQ1YzE1NWQ5ODQ4NDk4ZmRjZTgyNTA1MzllZDY4OGV-N2YyZDlhNmRkMTE4NWYzODAyYTllZGFjMTczOTAzMTI=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765835798278,\"host\":{\"cloud_provider\":\"aws\",\"image\":\"ami-0a8a2ad2689e7c22d\",\"name\":\"i-0e04298f4842968e8\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"oddish-b\"},\"last_seen_at\":1765838617779,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"github.com/docker/docker\"],\"name\":\"github.com/docker/docker\",\"normalized_name\":\"github.com/docker/docker\",\"version\":\"v26.0.1+incompatible\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"github.com/docker/docker\",\"version\":\"26.1.5\"}]},\"recommended\":{\"name\":\"github.com/docker/docker\",\"version\":\"26.1.5\"}},\"resource_id\":\"7f2d9a6dd1185f3802a9edac17390312\",\"resource_name\":\"i-0e04298f4842968e8\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/PauloParoPP/CVE-2024-41110-SCAN\",\"https://github.com/vvpoglazov/cve-2024-41110-checker\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.03074,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":8.8,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:A/CR:L/IR:L/AR:L\"},\"base\":{\"score\":9.4,\"value\":\"critical\",\"value_id\":4,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H\"}},\"status\":\"auto_closed\",\"title\":\"Authz zero length regression\",\"vulnerability\":{\"cwes\":[\"CWE-187\"],\"hash\":\"a0c1f243698c4d84159733c640eaf8598ef772e9b5dc57c61e7943744319bf6f\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838617779,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"kernel:none\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-east-1b\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:18747532246\",\"kube_node_role:nodeless\",\"ecosystem:go\",\"event_type:close\",\"availability-zone:us-east-1b\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:true\",\"aws:ec2:fleet-id:fleet-d13f3304-a906-e61e-2c12-a78868beb555\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:186mi\",\"autoscaling_group:us1-staging-dog-oddish-b-k8s-ng-asg-25eaecca332303a0\",\"source:datadog\",\"k8s.io/cluster-autoscaler/node-template/taint/node:nodeless:noschedule\",\"site:datad0g.com\",\"fix_available:available\",\"epss_raw_score:0.03074\",\"package_name:github.com/docker/docker\",\"asset_type:host\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:nodeless-localstorage-amd64-m6id-xlarge\",\"nodegroups.datadoghq.com/nodegroup-set:kube-system_nodeless-localstorage-amd64\",\"dd_compute_k8s_platform_version:v6-271-0\",\"nodegroup:kube-system_nodeless-localstorage-amd64-m6id-xlarge\",\"assignee:none\",\"vuln_id:a0c1f243698c4d84159733c640eaf8598ef772e9b5dc57c61e7943744319bf6f\",\"assignee_id:none\",\"in_production:false\",\"aws_account:727006795293\",\"is_kube_cluster_experimental:false\",\"adp_enabled:false\",\"kube_cluster_name:oddish-b\",\"base_score:9.4\",\"iam_profile:k8s/us1-staging-dog-oddish-b-kube-node_v2\",\"public_exploit_available:true\",\"kubernetes.io/cluster/oddish-b:owned\",\"region:us-east-1\",\"fix_version:v299999999.0.0-20200612211812-aaf470eca7b5_incompatible\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless\",\"close_count:0\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage-capacity:236991611392\",\"ng_cluster_autoscaler:true\",\"k8s.io/cluster-autoscaler/node-template/label/nodeless-localstorage.datadoghq.com/instance-type:m6id.xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kube-system\",\"name:kube-system_nodeless-localstorage-amd64-m6id-xlarge\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless-localstorage-amd64-m6id-xlarge\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:13567106253\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"nodegroups.datadoghq.com/name:nodeless-localstorage-amd64-m6id-xlarge\",\"k8s.io/cluster-autoscaler/node-template/label/class:nodeless\",\"account:staging\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:10m0s\",\"eenv:staging\",\"agent_release_candidate_cluster:false\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/flavor:nodeless-localstorage\",\"k8s.io/cluster-autoscaler/node-template/taint/flavor:nodeless-localstorage:noschedule\",\"package_version:v26.0.1_incompatible\",\"exposure_time_days:0\",\"cluster_name:oddish-b\",\"security-group:sg-0b9e1c6b4773288df\",\"orch_cluster_id:b7d5bafd-28f9-42b1-84a9-fa705f4d0d54\",\"role:kube-node\",\"env:staging\",\"instance_type:m6id.xlarge\",\"image:ami-0a8a2ad2689e7c22d\",\"base_severity:critical\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"asset_id:i-0e04298f4842968e8\",\"security-group:sg-faa8cdb1\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownutilizationthreshold:0.95\",\"scored:false\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/cpu_arch:amd64\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:3900m\",\"severity:high\",\"kube_node_role:compute\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:40\",\"os_name:ubuntu\",\"node.datadoghq.com/flavor:nodeless-localstorage\",\"ng_local_storage:true\",\"alias:go-2024-3005\",\"nodegroups.datadoghq.com/owner:k8s-dynamic-nodegroup-controller\",\"instance-type:m6id.xlarge\",\"node.datadoghq.com/cgroup:v2\",\"score:8.8\",\"kube_node:ip-10-128-71-26.ec2.internal\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"aws:ec2launchtemplate:id:lt-0ae5c167d7a085e7b\",\"k8s.io/cluster-autoscaler/node-template/label/scalingset:cpu_arch-amd64_flavor-nodeless-localstorage\",\"dd_rule_type:not-empty\",\"os_version:22.04\",\"vulnerability_status:auto-closed\",\"cpu_arch:amd64\",\"last_detected_minutes:0\",\"kube_node_role:nodeless-localstorage-amd64-m6id-xlarge\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"hash:a0c1f243698c4d84159733c640eaf8598ef772e9b5dc57c61e7943744319bf6f\",\"node.datadoghq.com/version:v6-271-0\",\"alias:cve-2024-41110\",\"datacenter:us1.staging.dog\",\"previous_status:open\",\"kubernetes_cluster:oddish-b\",\"type:component_with_known_vulnerability\",\"origin:agent\",\"auto-discovery.cluster-autoscaler.k8s.io/oddish-b\",\"cve:cve-2024-41110\",\"env:staging\"],\"timestamp\":1765838617779}},{\"id\":\"OWZkNjcxMTNmY2M3ZGJkMTNiNWIxMjcyZDdjZGJjYTJ-ZDM3YTBhMTAxZjFjZjc4OGNlYmE5ODNkNzQwMWI2M2E=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CGA-rqqc-qwmr-qw72\",\"CGA-vmcg-54pm-cp7r\",\"CVE-2024-27304\",\"GHSA-mrww-27vc-gghv\",\"GO-2024-2606\"],\"cve\":\"CVE-2024-27304\",\"id\":\"GHSA-7jwh-3vrq-q3m8\",\"modified_at\":1729574941941,\"published_at\":1709585125000,\"summary\":\"pgproto3 SQL Injection via Protocol Message Size Overflow\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"i-0ef9daf3d9bd9c136\"},\"detection_changed_at\":1765838617692,\"finding_id\":\"OWZkNjcxMTNmY2M3ZGJkMTNiNWIxMjcyZDdjZGJjYTJ-ZDM3YTBhMTAxZjFjZjc4OGNlYmE5ODNkNzQwMWI2M2E=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765836977473,\"host\":{\"name\":\"i-0ef9daf3d9bd9c136\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"oddish-b\"},\"last_seen_at\":1765838617692,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"github.com/jackc/pgproto3/v2\"],\"name\":\"github.com/jackc/pgproto3/v2\",\"normalized_name\":\"github.com/jackc/pgproto3/v2\",\"version\":\"v2.3.2\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"github.com/jackc/pgproto3/v2\",\"version\":\"2.3.3\"}]},\"recommended\":{\"name\":\"github.com/jackc/pgproto3/v2\",\"version\":\"2.3.3\"}},\"resource_id\":\"d37a0a101f1cf788ceba983d7401b63a\",\"resource_name\":\"i-0ef9daf3d9bd9c136\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/roaris/CVE-2024-27304-PoC\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.01391,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":8.9,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:A/CR:L/IR:L/AR:L\"},\"base\":{\"score\":9.3,\"value\":\"critical\",\"value_id\":4,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:U\"}},\"status\":\"auto_closed\",\"title\":\"pgproto3 SQL Injection via Protocol Message Size Overflow\",\"vulnerability\":{\"cwes\":[\"CWE-89\",\"CWE-190\"],\"hash\":\"f5b9790b261031aeba5da3e06abc2f1320266b51b957f91df446edc4b8279a7e\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838617692,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"fix_version:v2.3.4-0.20250125160525-bc041643406d\",\"exposure_time_days:0\",\"kube_node_role:nodeless\",\"cluster_name:oddish-b\",\"ecosystem:go\",\"event_type:close\",\"orch_cluster_id:b7d5bafd-28f9-42b1-84a9-fa705f4d0d54\",\"env:staging\",\"base_severity:critical\",\"kube_node:ip-10-128-69-249.ec2.internal\",\"source:datadog\",\"site:datad0g.com\",\"fix_available:available\",\"scored:false\",\"alias:go-2024-2606\",\"kube_node_role:compute\",\"severity:high\",\"asset_type:host\",\"os_name:ubuntu\",\"assignee:none\",\"asset_id:i-0ef9daf3d9bd9c136\",\"assignee_id:none\",\"in_production:false\",\"node.datadoghq.com/flavor:nodeless-fastephemeral\",\"hash:f5b9790b261031aeba5da3e06abc2f1320266b51b957f91df446edc4b8279a7e\",\"is_kube_cluster_experimental:false\",\"adp_enabled:false\",\"node.datadoghq.com/cgroup:v2\",\"nodegroups.datadoghq.com/name:nodeless-fastephemeral-arm64-m6gd-8xlarge\",\"score:8.9\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"base_score:9.3\",\"kube_cluster_name:oddish-b\",\"instance_type:m6gd.8xlarge\",\"package_version:v2.3.2\",\"alias:ghsa-mrww-27vc-gghv\",\"alias:cga-vmcg-54pm-cp7r\",\"kube_node_role:nodeless-fastephemeral-arm64-m6gd-8xlarge\",\"public_exploit_available:true\",\"dd_rule_type:not-empty\",\"vuln_id:f5b9790b261031aeba5da3e06abc2f1320266b51b957f91df446edc4b8279a7e\",\"os_version:22.04\",\"ng_local_storage:false\",\"close_count:0\",\"vulnerability_status:auto-closed\",\"ng_cluster_autoscaler:true\",\"last_detected_minutes:0\",\"epss_raw_score:0.01391\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"node.datadoghq.com/version:v6-271-0\",\"datacenter:us1.staging.dog\",\"alias:cve-2024-27304\",\"previous_status:open\",\"package_name:github.com/jackc/pgproto3/v2\",\"cve:cve-2024-27304\",\"alias:cga-rqqc-qwmr-qw72\",\"cpu_arch:arm64\",\"type:component_with_known_vulnerability\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"env:staging\"],\"timestamp\":1765838617692}},{\"id\":\"MjU5YjI1MWNiNzU4YzgxMmFkODFjZTIwMWUxNjc4ZWN-ZjA5ZTUwMDgzNWU3ZGVhYzBjOTJjYzU2NmU2NzMyNDQ=\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"advisory\":{\"aliases\":[\"CVE-2024-41110\",\"GO-2024-3005\"],\"cve\":\"CVE-2024-41110\",\"id\":\"GHSA-v23v-6jw2-98fq\",\"modified_at\":1723230467000,\"published_at\":1722334737000,\"summary\":\"Authz zero length regression\",\"type\":\"component_with_known_vulnerability\"},\"cloud_resource\":{\"display_name\":\"i-0e88c4cb2030f0900\"},\"detection_changed_at\":1765838617584,\"finding_id\":\"MjU5YjI1MWNiNzU4YzgxMmFkODFjZTIwMWUxNjc4ZWN-ZjA5ZTUwMDgzNWU3ZGVhYzBjOTJjYzU2NmU2NzMyNDQ=\",\"finding_type\":\"host_and_container_vulnerability\",\"first_seen_at\":1765836323780,\"host\":{\"name\":\"i-0e88c4cb2030f0900\",\"os\":{\"name\":\"ubuntu\",\"version\":\"22.04\"}},\"k8s\":{\"cluster_id\":\"oddish-b\"},\"last_seen_at\":1765838617584,\"metadata\":{\"schema_version\":\"2\"},\"origin\":[\"agent\"],\"package\":{\"additional_names\":[\"github.com/docker/docker\"],\"name\":\"github.com/docker/docker\",\"normalized_name\":\"github.com/docker/docker\",\"version\":\"v26.0.1+incompatible\"},\"remediation\":{\"is_available\":true,\"package\":{\"base\":[{\"name\":\"github.com/docker/docker\",\"version\":\"26.1.5\"}]},\"recommended\":{\"name\":\"github.com/docker/docker\",\"version\":\"26.1.5\"}},\"resource_id\":\"f09e500835e7deac0c92cc566e673244\",\"resource_name\":\"i-0e88c4cb2030f0900\",\"resource_type\":\"host\",\"risk\":{\"has_exploit_available\":true,\"has_high_exploitability_chance\":true,\"is_production\":false},\"risk_details\":{\"has_exploit_available\":{\"evidence\":{\"exploit_sources\":[\"GitHub\"],\"exploit_urls\":[\"https://github.com/PauloParoPP/CVE-2024-41110-SCAN\",\"https://github.com/vvpoglazov/cve-2024-41110-checker\"],\"type\":\"production_ready\"},\"impact_cvss\":\"neutral\",\"value\":true},\"has_high_exploitability_chance\":{\"evidence\":{\"epss_score\":0.03074,\"epss_severity\":\"low\"},\"impact_cvss\":\"neutral\",\"value\":true},\"is_production\":{\"impact_cvss\":\"safer\",\"value\":false}},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":8.8,\"value\":\"high\",\"value_id\":3,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:A/CR:L/IR:L/AR:L\"},\"base\":{\"score\":9.4,\"value\":\"critical\",\"value_id\":4,\"vector\":\"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H\"}},\"status\":\"auto_closed\",\"title\":\"Authz zero length regression\",\"vulnerability\":{\"cwes\":[\"CWE-187\"],\"hash\":\"a0c1f243698c4d84159733c640eaf8598ef772e9b5dc57c61e7943744319bf6f\",\"stack\":{\"ecosystem\":\"go\",\"language\":\"go\"}},\"workflow\":{\"auto_closed_at\":1765838617584,\"mute\":{\"is_muted\":false}}}},\"tags\":[\"exposure_time_days:0\",\"package_version:v26.0.1_incompatible\",\"kube_node_role:nodeless\",\"cluster_name:oddish-b\",\"ecosystem:go\",\"event_type:close\",\"orch_cluster_id:b7d5bafd-28f9-42b1-84a9-fa705f4d0d54\",\"env:staging\",\"base_severity:critical\",\"source:datadog\",\"site:datad0g.com\",\"fix_available:available\",\"epss_raw_score:0.03074\",\"scored:false\",\"kube_node_role:compute\",\"severity:high\",\"package_name:github.com/docker/docker\",\"asset_type:host\",\"os_name:ubuntu\",\"assignee:none\",\"vuln_id:a0c1f243698c4d84159733c640eaf8598ef772e9b5dc57c61e7943744319bf6f\",\"assignee_id:none\",\"in_production:false\",\"alias:go-2024-3005\",\"node.datadoghq.com/flavor:nodeless-fastephemeral\",\"is_kube_cluster_experimental:false\",\"adp_enabled:false\",\"node.datadoghq.com/cgroup:v2\",\"score:8.8\",\"nodegroups.datadoghq.com/name:nodeless-fastephemeral-arm64-m6gd-8xlarge\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"tool:infra\",\"asset_id:i-0e88c4cb2030f0900\",\"kube_cluster_name:oddish-b\",\"base_score:9.4\",\"instance_type:m6gd.8xlarge\",\"kube_node_role:nodeless-fastephemeral-arm64-m6gd-8xlarge\",\"public_exploit_available:true\",\"dd_rule_type:not-empty\",\"fix_version:v299999999.0.0-20200612211812-aaf470eca7b5_incompatible\",\"os_version:22.04\",\"ng_local_storage:false\",\"close_count:0\",\"vulnerability_status:auto-closed\",\"ng_cluster_autoscaler:true\",\"last_detected_minutes:0\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"hash:a0c1f243698c4d84159733c640eaf8598ef772e9b5dc57c61e7943744319bf6f\",\"kube_node:ip-10-128-69-26.ec2.internal\",\"node.datadoghq.com/version:v6-271-0\",\"alias:cve-2024-41110\",\"datacenter:us1.staging.dog\",\"previous_status:open\",\"cpu_arch:arm64\",\"type:component_with_known_vulnerability\",\"eenv:staging\",\"origin:agent\",\"agent_release_candidate_cluster:false\",\"cve:cve-2024-41110\",\"env:staging\"],\"timestamp\":1765838617584}}],\"meta\":{\"elapsed\":1369,\"page\":{\"after\":\"eyJhZnRlciI6IkF3QUFBWnNrTHZ2d2NDUnlSQUFBQUJoQlduTnJUSFoyZDBGQlFsSkxaV05HYVMxcGNVbDNSV2tBQUFBa1pERTVZakkwTW1ZdE1ESXpOQzAwT0RaaUxUZ3hNbVl0T1RGaFlUZ3lOemcyTkRRMkFBQURjQSIsInZhbHVlcyI6WzE3NjU4Mzg2MTc1ODQsIjIwMjUtMTItMTVUMjI6NDM6MzcuNTg0WiIsMTg4MTQzNjc0MF19\"},\"request_id\":\"pddv1ChZNOVExUVJTblR5Q3JvSmtydGt3ck9BIi0KHZfc9G79MgJZpw5AiBM4qDleF_HVmgTTjgrQEVbBEgxR6Pf9JbnOhfIiPxQ\",\"status\":\"done\"},\"links\":{\"next\":\"/api/v2/security/findings?filter%5Bquery%5D=%40severity%3Acritical+OR+%40severity%3Ahigh\\u0026page%5Bcursor%5D=eyJhZnRlciI6IkF3QUFBWnNrTHZ2d2NDUnlSQUFBQUJoQlduTnJUSFoyZDBGQlFsSkxaV05HYVMxcGNVbDNSV2tBQUFBa1pERTVZakkwTW1ZdE1ESXpOQzAwT0RaaUxUZ3hNbVl0T1RGaFlUZ3lOemcyTkRRMkFBQURjQSIsInZhbHVlcyI6WzE3NjU4Mzg2MTc1ODQsIjIwMjUtMTItMTVUMjI6NDM6MzcuNTg0WiIsMTg4MTQzNjc0MF19\\u0026page%5Blimit%5D=10\\u0026sort=-%40detection_changed_at\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search security findings returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-15T22:44:41.939Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": "@severity:(critical OR high)", + "page": { + "limit": 1 + } + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"ZGVmLTAway1leWV-aS0wOGE2ZmE2ODdjOWE2ZDJkYg==\",\"type\":\"finding\",\"attributes\":{\"attributes\":{\"custom\":{\"cloud_resource\":{\"account\":\"600865094333\",\"category\":\"compute\",\"cloud_provider\":\"aws\",\"configuration\":{\"account_id\":\"600865094333\",\"components\":{\"kubelet\":{\"config\":{\"content\":{\"address\":\"10.12.32.204\",\"allowedUnsafeSysctls\":[\"net.*\"],\"apiVersion\":\"kubelet.config.k8s.io/v1beta1\",\"authentication\":{\"anonymous\":{\"enabled\":false},\"webhook\":{\"cacheTTL\":\"60m\",\"enabled\":true},\"x509\":{\"clientCAFile\":{\"certificate\":{\"authorityKeyId\":\"5B:1D:26:C2:84:4A:37:36:57:E4:95:53:4D:19:0B:FD:36:1A:EB:96\",\"commonName\":\"parent31-k8s\",\"dnsNames\":[\"parent31-k8s\"],\"fingerprint\":\"SHA256:DP/0ES6hkVPMrFizcIMEbQ75QGpwuWZZzShkn1KGQLA\",\"notAfter\":\"2030-09-28T18:40:34Z\",\"notBefore\":\"2025-09-29T18:40:04Z\",\"serialNumber\":\"680167176125483697456383252717454423151202771482\",\"subjectKeyId\":\"5B:1D:26:C2:84:4A:37:36:57:E4:95:53:4D:19:0B:FD:36:1A:EB:96\"},\"dirGroup\":\"root\",\"dirMode\":2147484141,\"dirUser\":\"root\",\"group\":\"root\",\"mode\":420,\"path\":\"/etc/vaultd/certs/vault-ca.cert\",\"user\":\"root\"}}},\"authorization\":{\"mode\":\"Webhook\",\"webhook\":{\"cacheAuthorizedTTL\":\"60m\"}},\"cgroupDriver\":\"systemd\",\"cgroupsPerQOS\":true,\"clusterDomain\":\"parent31.cluster.local\",\"containerLogMaxFiles\":3,\"containerLogMaxSize\":\"20Mi\",\"cpuCFSQuota\":false,\"cpuManagerPolicy\":\"static\",\"enforceNodeAllocatable\":[\"pods\"],\"featureGates\":{\"AllowUnsafeMalformedObjectDeletion\":false,\"CBORServingAndStorage\":false,\"ClearingNominatedNodeNameAfterBinding\":false,\"ClusterTrustBundle\":false,\"ClusterTrustBundleProjection\":false,\"ComponentFlagz\":false,\"ComponentStatusz\":false,\"ContainerRestartRules\":false,\"ContainerStopSignals\":false,\"CoordinatedLeaderElection\":false,\"DRAConsumableCapacity\":true,\"DRADeviceBindingConditions\":true,\"DRADeviceTaints\":true,\"DRAExtendedResource\":true,\"DRAPartitionableDevices\":true,\"DRASchedulerFilterTimeout\":true,\"DeclarativeValidationTakeover\":false,\"DeploymentReplicaSetTerminatingReplicas\":false,\"DynamicResourceAllocation\":true,\"EnvFiles\":false,\"ExternalServiceAccountTokenSigner\":true,\"HPAConfigurableTolerance\":false,\"HostnameOverride\":false,\"ImageVolume\":true,\"InPlacePodVerticalScalingExclusiveCPUs\":false,\"InPlacePodVerticalScalingExclusiveMemory\":false,\"JobManagedBy\":false,\"KubeletCrashLoopBackOffMax\":false,\"KubeletEnsureSecretPulledImages\":false,\"KubeletFineGrainedAuthz\":false,\"MaxUnavailableStatefulSet\":true,\"MutableCSINodeAllocatableCount\":true,\"MutatingAdmissionPolicy\":true,\"NominatedNodeNameForExpectation\":false,\"PodCertificateRequest\":false,\"PodLogsQuerySplitStreams\":false,\"PodTopologyLabelsAdmission\":false,\"ReduceDefaultCrashLoopBackOffDecay\":false,\"RelaxedServiceNameValidation\":false,\"RemoteRequestHeaderUID\":false,\"ResourceHealthStatus\":false,\"SELinuxChangePolicy\":false,\"SchedulerAsyncPreemption\":false,\"ServiceAccountNodeAudienceRestriction\":false,\"StorageCapacityScoring\":false,\"StorageVersionMigrator\":false,\"StrictIPCIDRValidation\":false,\"WatchCacheInitializationPostStartHook\":false,\"WatchList\":true},\"imageMaximumGCAge\":\"22h\",\"kind\":\"KubeletConfiguration\",\"kubeReserved\":{\"cpu\":\"100m\",\"memory\":\"300Mi\"},\"kubeReservedCgroup\":\"kuberuntime\",\"maxPods\":45,\"providerID\":\"aws:///us-west-2c/i-08a6fa687c9a6d2db\",\"readOnlyPort\":0,\"registerWithTaints\":[{\"effect\":\"NoSchedule\",\"key\":\"ebs.csi.aws.com/agent-not-ready\",\"value\":\"true\"},{\"effect\":\"NoSchedule\",\"key\":\"node\",\"value\":\"nodeless\"}],\"registryBurst\":20,\"registryPullQPS\":8,\"streamingConnectionIdleTimeout\":\"4h\",\"systemReserved\":{\"cpu\":\"100m\",\"memory\":\"3507947110\"},\"systemReservedCgroup\":\"system\",\"tlsCertFile\":{\"certificate\":{\"authorityKeyId\":\"5B:1D:26:C2:84:4A:37:36:57:E4:95:53:4D:19:0B:FD:36:1A:EB:96\",\"commonName\":\"system:node:ip-10-12-32-204.us-west-2.compute.internal\",\"fingerprint\":\"SHA256:FBQHjmcexGGgB42hmh2FLq1lRwyoz1HYRpJRd2pnsII\",\"ipAddresses\":[\"10.12.32.204\"],\"notAfter\":\"2025-12-22T16:50:32Z\",\"notBefore\":\"2025-12-15T22:38:56Z\",\"organization\":[\"system:nodes\"],\"serialNumber\":\"127630705538822312578970595637812130230650020432\",\"subjectKeyId\":\"67:A8:EE:1D:53:9F:B8:54:1B:3F:17:CF:7D:90:5A:BD:16:80:64:D7\"},\"dirGroup\":\"root\",\"dirMode\":2147484141,\"dirUser\":\"root\",\"group\":\"root\",\"mode\":420,\"path\":\"/var/lib/kubelet/pki/kubelet-cert.pem\",\"user\":\"root\"},\"tlsPrivateKeyFile\":{\"group\":\"root\",\"mode\":384,\"path\":\"/var/lib/kubelet/pki/kubelet-key.pem\",\"user\":\"root\"}},\"group\":\"root\",\"mode\":384,\"path\":\"/etc/kubernetes/kubelet-configuration.yaml\",\"user\":\"root\"},\"event-burst\":100,\"event-qps\":50,\"hostname-override\":\"ip-10-12-32-204.us-west-2.compute.internal\",\"image-credential-provider-bin-dir\":{\"group\":\"root\",\"mode\":2147484141,\"path\":\"/usr/local/bin\",\"user\":\"root\"},\"image-credential-provider-config\":{\"content\":{\"apiVersion\":\"kubelet.config.k8s.io/v1\",\"kind\":\"CredentialProviderConfig\",\"providers\":[{\"apiVersion\":\"credentialprovider.kubelet.k8s.io/v1\",\"defaultCacheDuration\":\"12h\",\"matchImages\":[\"*.dkr.ecr.*.amazonaws.com\",\"*.dkr.ecr-fips.*.amazonaws.com\"],\"name\":\"ecr-credential-provider\"}]},\"group\":\"root\",\"mode\":292,\"path\":\"/etc/kubernetes/kubelet-credential-provider-config.yaml\",\"user\":\"root\"},\"kubeconfig\":{\"group\":\"root\",\"kubeconfig\":{\"clusters\":{\"kubernetes\":{\"certificateAuthority\":{\"certificate\":{\"authorityKeyId\":\"5B:1D:26:C2:84:4A:37:36:57:E4:95:53:4D:19:0B:FD:36:1A:EB:96\",\"commonName\":\"parent31-k8s\",\"dnsNames\":[\"parent31-k8s\"],\"fingerprint\":\"SHA256:DP/0ES6hkVPMrFizcIMEbQ75QGpwuWZZzShkn1KGQLA\",\"notAfter\":\"2030-09-28T18:40:34Z\",\"notBefore\":\"2025-09-29T18:40:04Z\",\"serialNumber\":\"680167176125483697456383252717454423151202771482\",\"subjectKeyId\":\"5B:1D:26:C2:84:4A:37:36:57:E4:95:53:4D:19:0B:FD:36:1A:EB:96\"},\"dirGroup\":\"root\",\"dirMode\":2147484141,\"dirUser\":\"root\",\"group\":\"root\",\"mode\":420,\"path\":\"/etc/vaultd/certs/vault-ca.cert\",\"user\":\"root\"},\"server\":\"https://k8s-parent31.prtest03.staging.dog\"}},\"contexts\":{\"kubelet\":{\"cluster\":\"kubernetes\",\"user\":\"kubelet\"}},\"currentContext\":\"\",\"users\":{\"kubelet\":{\"clientCertificate\":{\"certificate\":{\"authorityKeyId\":\"5B:1D:26:C2:84:4A:37:36:57:E4:95:53:4D:19:0B:FD:36:1A:EB:96\",\"commonName\":\"system:node:ip-10-12-32-204.us-west-2.compute.internal\",\"fingerprint\":\"SHA256:FBQHjmcexGGgB42hmh2FLq1lRwyoz1HYRpJRd2pnsII\",\"ipAddresses\":[\"10.12.32.204\"],\"notAfter\":\"2025-12-22T16:50:32Z\",\"notBefore\":\"2025-12-15T22:38:56Z\",\"organization\":[\"system:nodes\"],\"serialNumber\":\"127630705538822312578970595637812130230650020432\",\"subjectKeyId\":\"67:A8:EE:1D:53:9F:B8:54:1B:3F:17:CF:7D:90:5A:BD:16:80:64:D7\"},\"dirGroup\":\"root\",\"dirMode\":2147484141,\"dirUser\":\"root\",\"group\":\"root\",\"mode\":420,\"path\":\"/var/lib/kubelet/pki/kubelet-cert.pem\",\"user\":\"root\"},\"clientKey\":{\"group\":\"root\",\"mode\":384,\"path\":\"/var/lib/kubelet/pki/kubelet-key.pem\",\"user\":\"root\"},\"usePassword\":false,\"useToken\":false}}},\"mode\":420,\"path\":\"/var/lib/kubelet/kubeconfig.yaml\",\"user\":\"root\"},\"make-iptables-util-chains\":true,\"pod-max-pids\":-1,\"skippedFlags\":{\"--cloud-provider\":\"external\",\"--cluster-dns\":\"172.17.0.2\",\"--config-dir\":\"/etc/kubernetes/config.d\",\"--container-runtime-endpoint\":\"unix:///run/containerd/containerd.sock\",\"--healthz-bind-address\":\"10.12.32.204\",\"--node-ip\":\"10.12.32.204\",\"--node-labels\":\"node.datadoghq.com/cgroup=v2\"}}},\"framework_requirement\":[\"fedramp-low/Identification-and-Authentication\",\"fedramp-moderate/Identification-and-Authentication\",\"pci-dss/Protect-Stored-Account-Data\",\"cis-kubernetes/Kubelet\",\"fedramp-high/Identification-and-Authentication\",\"nist-800-53/Identification and Authentication\",\"pci-dss/Apply-Secure-Configurations-to-All-System-Components\"],\"framework_requirement_control\":[\"cis-kubernetes/Kubelet/4.2.10\",\"nist-800-53/Identification and Authentication/IA-7\",\"fedramp-high/Identification-and-Authentication/IA-7\",\"pci-dss/Apply-Secure-Configurations-to-All-System-Components/2.2.7\",\"fedramp-low/Identification-and-Authentication/IA-7\",\"fedramp-moderate/Identification-and-Authentication/IA-7\",\"pci-dss/Protect-Stored-Account-Data/3.6.1.2\",\"pci-dss/Protect-Stored-Account-Data/3.6.1.1\"],\"is_default_crawl\":false,\"kube_node_name\":\"kube-system_nodeless-amd64-d-m6a-2xlarge\",\"kubeletService\":{\"content\":[\"Unit\"],\"group\":\"root\",\"mode\":420,\"path\":\"/etc/systemd/system/kubelet.service\",\"user\":\"root\"},\"version\":\"202403\"},\"region\":\"us-west-2\"},\"compliance\":{\"evaluation\":\"pass\",\"framework_requirement_controls\":[\"cis-kubernetes/Kubelet/4.2.10\",\"nist-800-53/Identification and Authentication/IA-7\",\"fedramp-high/Identification-and-Authentication/IA-7\",\"pci-dss/Apply-Secure-Configurations-to-All-System-Components/2.2.7\",\"fedramp-low/Identification-and-Authentication/IA-7\",\"fedramp-moderate/Identification-and-Authentication/IA-7\",\"pci-dss/Protect-Stored-Account-Data/3.6.1.2\",\"pci-dss/Protect-Stored-Account-Data/3.6.1.1\"],\"framework_requirements\":[\"fedramp-low/Identification-and-Authentication\",\"fedramp-moderate/Identification-and-Authentication\",\"pci-dss/Protect-Stored-Account-Data\",\"cis-kubernetes/Kubelet\",\"fedramp-high/Identification-and-Authentication\",\"nist-800-53/Identification and Authentication\",\"pci-dss/Apply-Secure-Configurations-to-All-System-Components\"],\"frameworks\":[{\"control\":\"4.2.10\",\"framework\":\"cis-kubernetes\",\"is_default\":true,\"requirement\":\"Kubelet\",\"version\":\"1.9.0\"},{\"control\":\"IA-7\",\"framework\":\"fedramp-high\",\"is_default\":true,\"requirement\":\"Identification-and-Authentication\",\"version\":\"5\"},{\"control\":\"IA-7\",\"framework\":\"fedramp-low\",\"is_default\":true,\"requirement\":\"Identification-and-Authentication\",\"version\":\"5\"},{\"control\":\"IA-7\",\"framework\":\"fedramp-moderate\",\"is_default\":true,\"requirement\":\"Identification-and-Authentication\",\"version\":\"5\"},{\"control\":\"IA-7\",\"framework\":\"nist-800-53\",\"is_default\":true,\"requirement\":\"Identification and Authentication\",\"version\":\"rev5\"},{\"control\":\"2.2.7\",\"framework\":\"pci-dss\",\"is_default\":true,\"requirement\":\"Apply-Secure-Configurations-to-All-System-Components\",\"version\":\"4.0.1\"},{\"control\":\"3.6.1.1\",\"framework\":\"pci-dss\",\"is_default\":true,\"requirement\":\"Protect-Stored-Account-Data\",\"version\":\"4.0.1\"},{\"control\":\"3.6.1.2\",\"framework\":\"pci-dss\",\"is_default\":true,\"requirement\":\"Protect-Stored-Account-Data\",\"version\":\"4.0.1\"}]},\"description\":\"%%%\\n## Description\\n\\nKubelet client certificate rotation should be enabled. The `--rotate-certificates` setting tells the kubelet to rotate its client certificates by creating new CSRs when its existing credentials expire. This automated periodic rotation ensures that there is no downtime due to expired certificates and thus addresses availability in the CIA security triad.\\n\\n**Note**: This recommendation only applies if you let kubelets get their certificates from the API server. In cases where your kubelet certificates come from an outside authority or tool (for example, Vault), then you need to manually do the rotation. \\n\\n## Remediation\\n\\n1. If using a kubelet config file, edit the file to add the line `rotateCertificates: true`.\\n2. If using command line arguments, edit the kubelet service file `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` on each worker node and add the argument below from the `KUBELET_CERTIFICATE_ARGS` variable.\\n ```\\n --rotate-certificates=true\\n ```\\n3. Restart the kubelet service.\\n\\n%%%\",\"detection_changed_at\":1765838670804,\"finding_id\":\"ZGVmLTAway1leWV-aS0wOGE2ZmE2ODdjOWE2ZDJkYg==\",\"finding_type\":\"misconfiguration\",\"first_seen_at\":1765838670804,\"k8s\":{\"cluster_id\":\"parent31\"},\"last_seen_at\":1765838670804,\"metadata\":{\"schema_version\":\"2\"},\"resource_id\":\"i-08a6fa687c9a6d2db\",\"resource_name\":\"kube-system_nodeless-amd64-d-m6a-2xlarge\",\"resource_type\":\"kubernetes_worker_node\",\"rule\":{\"default_rule_id\":\"def-00k-eye\",\"id\":\"def-00k-eye\",\"name\":\"The kubelet client certificate rotation should be enabled\",\"type\":\"cloud configuration\",\"version\":7},\"severity\":\"high\",\"severity_details\":{\"adjusted\":{\"score\":8,\"value\":\"high\",\"value_id\":3}},\"status\":\"open\",\"title\":\"The kubelet client certificate rotation should be enabled\",\"workflow\":{\"mute\":{\"is_muted\":false}}}},\"tags\":[\"scored:true\",\"kernel:none\",\"kube_node_role:nodeless\",\"dd_compute_k8s_platform_version:v6-260-2\",\"k8s.io/cluster-autoscaler/node-template/label/agent-profile.datadoghq.com/name:compute-nodeless-200m-v2\",\"kube_cluster_name:parent31\",\"k8s.io/cluster-autoscaler/node-template/taint/node:nodeless:noschedule\",\"nodegroup:kube-system_nodeless-amd64-d-m6a-2xlarge\",\"name:kube-system_nodeless-amd64-d-m6a-2xlarge\",\"framework:fedramp-low\",\"requirement:identification_and_authentication\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownunneededtime:5m0s\",\"control:2.2.7\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/enable-eni-pd:true\",\"iam_profile:k8s/prtest03-staging-dog-parent31-kube-node_v2\",\"site:datadoghq.com\",\"framework_version:pci-dss_v4.0.1\",\"framework:cis-kubernetes\",\"nodegroups.datadoghq.com/name:nodeless-amd64-d-m6a-2xlarge\",\"framework:nist-800-53\",\"aws:ec2:fleet-id:fleet-30af8106-a33c-c1bc-8e30-8c2aef2d524c\",\"requirement:protect-stored-account-data\",\"framework_version:nist-800-53_vrev5\",\"framework:fedramp-moderate\",\"availability-zone:us-west-2c\",\"is_kube_cluster_experimental:false\",\"requirement:identification-and-authentication\",\"node.datadoghq.com/flavor:standard\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless-amd64-d-m6a-2xlarge\",\"adp_enabled:false\",\"kube_node_role:nodeless-amd64-d-m6a-2xlarge\",\"kubernetes.io/cluster/parent31:owned\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/flavor:standard\",\"team:compute-cloud-accounts\",\"image:ami-0e7b60ad05b2da7ed\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/nodeless\",\"ng_local_storage:false\",\"k8s.io/cluster-autoscaler/node-template/resources/cpu:7900m\",\"k8s.io/cluster-autoscaler/node-template/label/topology.ebs.csi.aws.com/zone:us-west-2c\",\"security-group:sg-041983b0e52f0b956\",\"auto-discovery.cluster-autoscaler.k8s.io/parent31\",\"ng_cluster_autoscaler:true\",\"account:staging-prtest03-hazel-parent\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/namespace:kube-system\",\"kubernetes_cluster:parent31\",\"account_id:600865094333\",\"aws:ec2launchtemplate:id:lt-0e13322d92afb436c\",\"k8s.io/cluster-autoscaler/node-template/label/scalingset:cpu_arch-amd64\",\"cloud_provider:aws\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/cluster-autoscaler:true\",\"aws:ec2launchtemplate:version:1\",\"framework_version:fedramp-moderate_v5\",\"k8s.io/cluster-autoscaler/node-template/label/class:nodeless\",\"k8s.io/cluster-autoscaler/node-template/resources/memory:28983228826\",\"framework_version:cis-kubernetes_v1.9.0\",\"agent_release_candidate_cluster:false\",\"host:i-08a6fa687c9a6d2db\",\"role:kube-node\",\"env:staging\",\"k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/compute\",\"instance-type:m6a.2xlarge\",\"control:ia-7\",\"k8s.io/cluster-autoscaler/node-template/resources/kubernetes.io/network-bandwidth:372mi\",\"framework_version:fedramp-low_v5\",\"k8s.io/cluster-autoscaler/node-template/autoscaling-options/scaledownutilizationthreshold:0.95\",\"scope:kubernetes\",\"security:compliance\",\"k8s.io/cluster-autoscaler/node-template/label/node.datadoghq.com/cpu_arch:amd64\",\"kube_node_role:compute\",\"k8s.io/cluster-autoscaler/node-template/label/agent.datadoghq.com/datadogagentprofile:compute-nodeless-200m-v2\",\"nodegroups.datadoghq.com/nodegroup-set:kube-system_nodeless-amd64\",\"control:3.6.1.1\",\"control:3.6.1.2\",\"datacenter:prtest03.staging.dog\",\"k8s.io/cluster-autoscaler/node-template/resources/pods:45\",\"framework:pci-dss\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/name:nodeless-amd64-d-m6a-2xlarge\",\"region:us-west-2\",\"k8s.io/cluster-autoscaler/node-template/resources/ephemeral-storage:53034256170\",\"nodegroups.datadoghq.com/owner:k8s-dynamic-nodegroup-controller\",\"kube_node:ip-10-12-32-204.us-west-2.compute.internal\",\"k8s.io/cluster-autoscaler/node-template/label/nodegroups.datadoghq.com/local-storage:false\",\"framework_version:fedramp-high_v5\",\"node.datadoghq.com/cgroup:v2\",\"node.datadoghq.com/version:v6-260-2\",\"nodegroups.datadoghq.com/namespace:kube-system\",\"k8s.io/cluster-autoscaler/enabled:yes\",\"security-group:sg-040bae0963d96a1c5\",\"cluster_name:parent31\",\"aws_account:600865094333\",\"autoscaling_group:prtest03-staging-dog-parent31-k8s-ng-asg-4defb27385fb49b0\",\"cpu_arch:amd64\",\"requirement:kubelet\",\"node.datadoghq.com/base-image:ubuntu_22_04\",\"requirement:apply-secure-configurations-to-all-system-components\",\"instance_type:m6a.2xlarge\",\"orch_cluster_id:69945bda-00ed-44d6-8ddd-5ee7cecf1c1d\",\"source:kubernetes\",\"framework:fedramp-high\",\"control:4.2.10\",\"source:compliance-agent\"],\"timestamp\":1765838670804}}],\"meta\":{\"elapsed\":916,\"page\":{\"after\":\"eyJhZnRlciI6IkF3QUFBWnNrTDh2VTlLUDFyQUFBQUJoQlduTnJURGgyVlVGQlF6QnVTVVJUUTBwbk5HbE9jSE1BQUFBa1pqRTVZakkwTW1ZdFpEUXhOeTAwWW1GbExUZ3haRFl0WkRZME5EazFNelE0TkRabEFBQUg0ZyIsInZhbHVlcyI6WzE3NjU4Mzg2NzA4MDQsIjIwMjUtMTItMTVUMjI6NDQ6MzAuODA0WiIsLTE5MDU4MTMzMl19\"},\"request_id\":\"pddv1ChZXeHI2X1VLUFMyQ25KRjFhNTgwWlZ3Ii0KHSOVjxpVE2yfxdGytC3aiBt_PLDLzISoQQFbf2XXEgys6s_dxBVNuv6xlig\",\"status\":\"done\"},\"links\":{\"next\":\"/api/v2/security/findings?filter%5Bquery%5D=%40severity%3Acritical+OR+%40severity%3Ahigh\\u0026page%5Bcursor%5D=eyJhZnRlciI6IkF3QUFBWnNrTDh2VTlLUDFyQUFBQUJoQlduTnJURGgyVlVGQlF6QnVTVVJUUTBwbk5HbE9jSE1BQUFBa1pqRTVZakkwTW1ZdFpEUXhOeTAwWW1GbExUZ3haRFl0WkRZME5EazFNelE0TkRabEFBQUg0ZyIsInZhbHVlcyI6WzE3NjU4Mzg2NzA4MDQsIjIwMjUtMTItMTVUMjI6NDQ6MzAuODA0WiIsLTE5MDU4MTMzMl19\\u0026page%5Blimit%5D=1\\u0026sort=-%40detection_changed_at\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search security findings returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-10T09:27:59.116Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": true, + "name": "Rule 1", + "selectors": { + "query": "env:prod", + "rule_types": [ + "log_detection" + ], + "severities": [ + "critical" + ], + "trigger_source": "security_signals" + }, + "targets": [ + "@john.doe@email.com" + ] + }, + "type": "notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/notification_rules/send_notification_preview", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"rka-loa-zwu\",\"attributes\":{\"preview_results\":[{\"rule_type\":\"log_detection\",\"notification_status\":\"DEFAULT\"}]},\"type\":\"notification_preview_response\"}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Test a notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-28T11:40:33.484Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "rule": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule message.", + "name": "My security monitoring rule.", + "options": { + "decreaseCriticalityBasedOnEnv": false, + "detectionMethod": "threshold", + "evaluationWindow": 0, + "keepAlive": 0, + "maxSignalDuration": 0 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "name": "", + "query": "source:source_here" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + }, + "ruleQueryPayloads": [ + { + "expectedResult": true, + "index": 0, + "payload": { + "ddsource": "source_here", + "ddtags": "env:staging,version:5.1", + "hostname": "i-012345678", + "message": "2019-11-19T14:37:58,995 INFO [process.name][20081] Hello World", + "service": "payment", + "userIdentity": { + "assumed_role": "fake assumed_role" + } + } + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/test", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"results\":[true]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Test a rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-27T16:48:26.948Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "mute": { + "description": "Resolved.", + "is_muted": false, + "reason": "NO_PENDING_FIX" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwMC0wYmd-MDE4NjcyMDJkMzE4MDE5ODY5MGE4ZmQ2MmFlMjg0Y2M=", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/mute", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4ae87c1e-099b-4f63-af21-3568cf226263\",\"type\":\"mute\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + } + ], + "scenario": "Unmute security findings returns \"Accepted\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-27T16:23:28.911Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "mute": { + "description": "Resolved.", + "is_muted": false, + "reason": "NO_PENDING_FIX" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/mute", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"finding not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Unmute security findings returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-04-27T16:23:50.077Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "mute": { + "description": "Resolved.", + "is_muted": false, + "reason": "RISK_ACCEPTED" + } + }, + "relationships": { + "findings": { + "data": [ + { + "id": "ZGVmLTAwcC1pZXJ-aS0wZjhjNjMyZDNmMzRlZTgzNw==", + "type": "findings" + } + ] + } + }, + "type": "mute" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security/findings/mute", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"422\",\"title\":\"Invalid Request\",\"detail\":\"The provided reason is not valid for the specified mute action. Possible values: [NO_PENDING_FIX HUMAN_ERROR NO_LONGER_ACCEPTED_RISK OTHER]\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + } + ], + "scenario": "Unmute security findings returns \"Unprocessable Entity\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-11-22T13:52:07.331Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "notifications": [ + "channel" + ], + "status": "info" + } + ], + "complianceSignalOptions": { + "userActivationStatus": true, + "userGroupByFields": [ + "@account_id" + ] + }, + "isEnabled": false, + "message": "Cloud configuration rule", + "name": "Test-Update_a_cloud_configuration_rule_s_details_returns_OK_response-1732283527_cloud", + "options": { + "complianceRuleOptions": { + "complexRule": false, + "regoRule": { + "policy": "package datadog\n\nimport data.datadog.output as dd_output\n\nimport future.keywords.contains\nimport future.keywords.if\nimport future.keywords.in\n\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\n\neval(iam_service_account_key) = \"skip\" if {\n\tiam_service_account_key.disabled\n} else = \"pass\" if {\n\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\n} else = \"fail\"\n\n# This part remains unchanged for all rules\nresults contains result if {\n\tsome resource in input.resources[input.main_resource_type]\n\tresult := dd_output.format(resource, eval(resource))\n}\n", + "resourceTypes": [ + "gcp_compute_disk" + ] + }, + "resourceType": "gcp_compute_disk" + } + }, + "tags": [ + "a:tag" + ], + "type": "cloud_configuration" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"uao-sdg-mt8\",\"version\":1,\"name\":\"Test-Update_a_cloud_configuration_rule_s_details_returns_OK_response-1732283527_cloud\",\"createdAt\":1732283527664,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":false,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:gcp_compute_disk\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"gcp_compute_disk\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\\n\\neval(iam_service_account_key) = \\\"skip\\\" if {\\n\\tiam_service_account_key.disabled\\n} else = \\\"pass\\\" if {\\n\\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"gcp_compute_disk\"]},\"complexRule\":false}},\"complianceSignalOptions\":{\"defaultActivationStatus\":null,\"defaultGroupByFields\":null,\"userActivationStatus\":true,\"userGroupByFields\":[\"@account_id\"]},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[\"channel\"],\"condition\":\"a > 0\"}],\"message\":\"Cloud configuration rule\",\"tags\":[\"a:tag\"],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "notifications": [], + "status": "info" + } + ], + "complianceSignalOptions": { + "userActivationStatus": false, + "userGroupByFields": [] + }, + "isEnabled": false, + "message": "ddd", + "name": "Test-Update_a_cloud_configuration_rule_s_details_returns_OK_response-1732283527_cloud_updated", + "options": { + "complianceRuleOptions": { + "regoRule": { + "policy": "package datadog\n\nimport data.datadog.output as dd_output\n\nimport future.keywords.contains\nimport future.keywords.if\nimport future.keywords.in\n\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\n\neval(iam_service_account_key) = \"skip\" if {\n\tiam_service_account_key.disabled\n} else = \"pass\" if {\n\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\n} else = \"fail\"\n\n# This part remains unchanged for all rules\nresults contains result if {\n\tsome resource in input.resources[input.main_resource_type]\n\tresult := dd_output.format(resource, eval(resource))\n}\n", + "resourceTypes": [ + "gcp_compute_disk" + ] + }, + "resourceType": "gcp_compute_disk" + } + }, + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/security_monitoring/rules/uao-sdg-mt8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"uao-sdg-mt8\",\"version\":2,\"name\":\"Test-Update_a_cloud_configuration_rule_s_details_returns_OK_response-1732283527_cloud_updated\",\"createdAt\":1732283527664,\"creationAuthorId\":1445416,\"updateAuthorId\":1445416,\"updatedAt\":1732283528223,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":false,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"resource_type:gcp_compute_disk\",\"groupByFields\":[\"resource_type\",\"resource_id\"],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"a\"}],\"options\":{\"keepAlive\":21600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":7200,\"complianceRuleOptions\":{\"resourceType\":\"gcp_compute_disk\",\"regoRule\":{\"policy\":\"package datadog\\n\\nimport data.datadog.output as dd_output\\n\\nimport future.keywords.contains\\nimport future.keywords.if\\nimport future.keywords.in\\n\\nmilliseconds_in_a_day := ((1000 * 60) * 60) * 24\\n\\neval(iam_service_account_key) = \\\"skip\\\" if {\\n\\tiam_service_account_key.disabled\\n} else = \\\"pass\\\" if {\\n\\t(iam_service_account_key.resource_seen_at / milliseconds_in_a_day) - (iam_service_account_key.valid_after_time / milliseconds_in_a_day) <= 90\\n} else = \\\"fail\\\"\\n\\n# This part remains unchanged for all rules\\nresults contains result if {\\n\\tsome resource in input.resources[input.main_resource_type]\\n\\tresult := dd_output.format(resource, eval(resource))\\n}\\n\",\"resourceTypes\":[\"gcp_compute_disk\"]},\"complexRule\":false}},\"complianceSignalOptions\":{\"defaultActivationStatus\":null,\"defaultGroupByFields\":null,\"userActivationStatus\":false,\"userGroupByFields\":[]},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"ddd\",\"tags\":[],\"hasExtendedTitle\":true,\"type\":\"cloud_configuration\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/uao-sdg-mt8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a cloud configuration rule's details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T18:44:09.415Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "severity": "invalid_severity" + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/configuration/critical_assets/00000000-0000-0000-0000-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Critical asset with ID 00000000-0000-0000-0000-000000000000 not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a critical asset returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-02T19:09:24.526Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "severity": "high" + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/configuration/critical_assets/00000000-0000-0000-0000-000000000001", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Critical asset with ID 00000000-0000-0000-0000-000000000001 not found)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a critical asset returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-07-10T15:48:23.863Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "query": "security:monitoring", + "rule_query": "source:k9", + "severity": "medium", + "tags": [ + "team:security" + ] + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/critical_assets", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6ce994c9-312c-476a-b102-50f2fabec567\",\"type\":\"critical_assets\",\"attributes\":{\"creation_author_id\":2320499,\"creation_date\":1783698504272,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"editable\":true,\"enabled\":true,\"query\":\"security:monitoring\",\"rule_query\":\"source:k9\",\"severity\":\"medium\",\"tags\":[\"team:security\"],\"update_author_id\":2320499,\"update_date\":1783698504272,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "enabled": false, + "query": "no:alert", + "rule_query": "type:(log_detection OR signal_correlation OR workload_security OR application_security) ruleId:djg-ktx-ipq", + "severity": "decrease", + "tags": [ + "env:production" + ], + "version": 1 + }, + "type": "critical_assets" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/configuration/critical_assets/6ce994c9-312c-476a-b102-50f2fabec567", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6ce994c9-312c-476a-b102-50f2fabec567\",\"type\":\"critical_assets\",\"attributes\":{\"creation_author_id\":2320499,\"creation_date\":1783698504272,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"editable\":true,\"enabled\":false,\"query\":\"no:alert\",\"rule_query\":\"type:(log_detection OR signal_correlation OR workload_security OR application_security) ruleId:djg-ktx-ipq\",\"severity\":\"decrease\",\"tags\":[\"env:production\"],\"update_author_id\":2320499,\"update_date\":1783698504730,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":2}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/critical_assets/6ce994c9-312c-476a-b102-50f2fabec567", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a critical asset returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-04-22T20:18:00.917Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "", + "name": "", + "requirements": [ + { + "controls": [ + { + "name": "", + "rules_id": [ + "" + ] + } + ], + "name": "" + } + ], + "version": "" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cloud_security_management/custom_frameworks/create-framework-new/10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"input_validation_error(Field 'data.attributes.requirements.name' is invalid: field 'requirements.name' must not be empty), input_validation_error(Field 'data.attributes.controls.name' is invalid: field 'controls.name' must not be empty), input_validation_error(Field 'data.attributes.name' is invalid: field 'name' must not be empty)\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update a custom framework returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-04-22T20:17:53.528Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/cloud_security_management/custom_frameworks", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"handle\":\"create-framework-new\",\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "create-framework-new", + "icon_url": "test-url", + "name": "name", + "requirements": [ + { + "controls": [ + { + "name": "control", + "rules_id": [ + "def-000-be9" + ] + } + ], + "name": "requirement" + } + ], + "version": "10" + }, + "type": "custom_framework" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cloud_security_management/custom_frameworks/create-framework-new/10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"handle\":\"create-framework-new\",\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/cloud_security_management/custom_frameworks/create-framework-new/10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"create-framework-new-10\",\"type\":\"custom_framework\",\"attributes\":{\"created_at\":1744297581542,\"created_by\":\"frog@datadoghq.com\",\"description\":\"\",\"handle\":\"create-framework-new\",\"icon_url\":\"test-url\",\"modified_at\":1745353074397,\"name\":\"name\",\"org_id\":321813,\"version\":\"10\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update a custom framework returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:18.417Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "due_days_per_severity": [ + { + "due_in_days": 7, + "severity": "critical" + } + ], + "due_from": "first_seen" + }, + "enabled": true, + "name": "Test-Update_a_due_date_rule_returns_Successfully_updated_the_due_date_rule_response-1781624478", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "due_date_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/due_date_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"22df6980-9710-496d-bf46-85e0ac181dc0\",\"type\":\"due_date_rules\",\"attributes\":{\"action\":{\"due_days_per_severity\":[{\"severity\":\"critical\",\"due_in_days\":7}],\"due_from\":\"first_seen\"},\"created_at\":1781624478629,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624478629,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Update_a_due_date_rule_returns_Successfully_updated_the_due_date_rule_response-1781624478\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "due_days_per_severity": [ + { + "due_in_days": 14, + "severity": "critical" + } + ], + "due_from": "first_seen" + }, + "enabled": false, + "name": "Test-Update_a_due_date_rule_returns_Successfully_updated_the_due_date_rule_response-1781624478", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "due_date_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/security/findings/automation/due_date_rules/22df6980-9710-496d-bf46-85e0ac181dc0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"22df6980-9710-496d-bf46-85e0ac181dc0\",\"type\":\"due_date_rules\",\"attributes\":{\"action\":{\"due_days_per_severity\":[{\"severity\":\"critical\",\"due_in_days\":14}],\"due_from\":\"first_seen\"},\"created_at\":1781624478629,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":false,\"modified_at\":1781624479036,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Update_a_due_date_rule_returns_Successfully_updated_the_due_date_rule_response-1781624478\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/due_date_rules/22df6980-9710-496d-bf46-85e0ac181dc0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a due date rule returns \"Successfully updated the due date rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:19.612Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "reason": "risk_accepted" + }, + "enabled": true, + "name": "Test-Update_a_mute_rule_returns_Successfully_updated_the_mute_rule_response-1781624479", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "mute_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/mute_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9a1d22ad-558c-4c4e-bdf5-72cd264cf7a9\",\"type\":\"mute_rules\",\"attributes\":{\"action\":{\"reason\":\"risk_accepted\"},\"created_at\":1781624479894,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624479894,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Update_a_mute_rule_returns_Successfully_updated_the_mute_rule_response-1781624479\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "reason": "false_positive" + }, + "enabled": false, + "name": "Test-Update_a_mute_rule_returns_Successfully_updated_the_mute_rule_response-1781624479", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "mute_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/security/findings/automation/mute_rules/9a1d22ad-558c-4c4e-bdf5-72cd264cf7a9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9a1d22ad-558c-4c4e-bdf5-72cd264cf7a9\",\"type\":\"mute_rules\",\"attributes\":{\"action\":{\"reason\":\"false_positive\"},\"created_at\":1781624479894,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":false,\"modified_at\":1781624480318,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Update_a_mute_rule_returns_Successfully_updated_the_mute_rule_response-1781624479\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/mute_rules/9a1d22ad-558c-4c4e-bdf5-72cd264cf7a9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a mute rule returns \"Successfully updated the mute rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:50.002Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclusion_filters": [ + { + "name": "Exclude logs from staging", + "query": "source:staging" + } + ], + "filtered_data_type": "logs", + "is_enabled": true, + "name": "Test-Update_a_security_filter_returns_OK_response-1715358890", + "query": "service:TestUpdateasecurityfilterreturnsOKresponse1715358890" + }, + "type": "security_filters" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/security_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"kk9-x1s-rgi\",\"attributes\":{\"version\":1,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1715358890\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1715358890\",\"is_enabled\":true,\"exclusion_filters\":[{\"name\":\"Exclude logs from staging\",\"query\":\"source:staging\"}],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "exclusion_filters": [], + "filtered_data_type": "logs", + "is_enabled": true, + "name": "Test-Update_a_security_filter_returns_OK_response-1715358890", + "query": "service:TestUpdateasecurityfilterreturnsOKresponse1715358890", + "version": 1 + }, + "type": "security_filters" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/configuration/security_filters/kk9-x1s-rgi", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"kk9-x1s-rgi\",\"attributes\":{\"version\":2,\"name\":\"Test-Update_a_security_filter_returns_OK_response-1715358890\",\"query\":\"service:TestUpdateasecurityfilterreturnsOKresponse1715358890\",\"is_enabled\":true,\"exclusion_filters\":[],\"filtered_data_type\":\"logs\",\"is_builtin\":false},\"type\":\"security_filters\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/security_filters/kk9-x1s-rgi", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a security filter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-01-21T15:35:07.497Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "Test-Update_a_suppression_rule_returns_OK_response-1769009707", + "enabled": true, + "name": "suppression 181539185fcb1be7", + "rule_query": "source:cloudtrail", + "suppression_query": "env:test", + "tags": [ + "technique:T1110-brute-force", + "source:cloudtrail" + ] + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"h6t-xj1-5jw\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009707555,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Update_a_suppression_rule_returns_OK_response-1769009707\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 181539185fcb1be7\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:test\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009707555,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":1}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "suppression_query": "env:staging status:low" + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/security_monitoring/configuration/suppressions/h6t-xj1-5jw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"h6t-xj1-5jw\",\"type\":\"suppressions\",\"attributes\":{\"creation_date\":1769009707555,\"creator\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"data_exclusion_query\":\"\",\"description\":\"Test-Update_a_suppression_rule_returns_OK_response-1769009707\",\"editable\":true,\"enabled\":true,\"name\":\"suppression 181539185fcb1be7\",\"rule_query\":\"source:cloudtrail\",\"suppression_query\":\"env:staging status:low\",\"tags\":[\"source:cloudtrail\",\"technique:T1110-brute-force\"],\"update_date\":1769009707651,\"updater\":{\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"version\":2}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/configuration/suppressions/h6t-xj1-5jw", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a suppression rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2026-06-16T15:41:20.880Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "max_tickets_per_day": 10, + "project_id": "11111111-1111-1111-1111-111111111111", + "target": "jira" + }, + "enabled": true, + "name": "Test-Update_a_ticket_creation_rule_returns_Successfully_updated_the_ticket_creation_rule_response-1781624480", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "ticket_creation_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security/findings/automation/ticket_creation_rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d3fcec39-567f-4450-967e-ca83bb29dbe4\",\"type\":\"ticket_creation_rules\",\"attributes\":{\"action\":{\"project_id\":\"11111111-1111-1111-1111-111111111111\",\"target\":\"jira\",\"max_tickets_per_day\":10},\"created_at\":1781624481109,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":true,\"modified_at\":1781624481109,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Update_a_ticket_creation_rule_returns_Successfully_updated_the_ticket_creation_rule_response-1781624480\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "action": { + "max_tickets_per_day": 5, + "project_id": "11111111-1111-1111-1111-111111111111", + "target": "jira" + }, + "enabled": false, + "name": "Test-Update_a_ticket_creation_rule_returns_Successfully_updated_the_ticket_creation_rule_response-1781624480", + "rule": { + "finding_types": [ + "misconfiguration" + ], + "query": "env:staging" + } + }, + "type": "ticket_creation_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/d3fcec39-567f-4450-967e-ca83bb29dbe4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d3fcec39-567f-4450-967e-ca83bb29dbe4\",\"type\":\"ticket_creation_rules\",\"attributes\":{\"action\":{\"project_id\":\"11111111-1111-1111-1111-111111111111\",\"target\":\"jira\",\"max_tickets_per_day\":5},\"created_at\":1781624481109,\"created_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"enabled\":false,\"modified_at\":1781624481511,\"modified_by\":{\"type\":\"user\",\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"name\":\"CI Account\"},\"name\":\"Test-Update_a_ticket_creation_rule_returns_Successfully_updated_the_ticket_creation_rule_response-1781624480\",\"rule\":{\"finding_types\":[\"misconfiguration\"],\"query\":\"env:staging\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security/findings/automation/ticket_creation_rules/d3fcec39-567f-4450-967e-ca83bb29dbe4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a ticket creation rule returns \"Successfully updated the ticket creation rule\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:53.332Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Update_an_existing_rule_returns_Bad_Request_response-1715358893", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"zis-ime-pv8\",\"version\":1,\"name\":\"Test-Update_an_existing_rule_returns_Bad_Request_response-1715358893\",\"createdAt\":1715358893704,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "status": "info" + } + ], + "isEnabled": true, + "message": "Test rule Bad", + "name": "Test-Update_an_existing_rule_returns_Bad_Request_response-1715358893", + "options": {}, + "queries": [ + { + "query": "" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/security_monitoring/rules/zis-ime-pv8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid rule configuration\",\"Query filter cannot be empty\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/zis-ime-pv8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an existing rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:54.594Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Update_an_existing_rule_returns_Not_Found_response-1715358894-NotFound", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/security_monitoring/rules/abcde-12345", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not found\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update an existing rule returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-11-22T13:52:12.595Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Update_an_existing_rule_returns_OK_response-1732283532", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"mza-hwt-ziu\",\"version\":1,\"name\":\"Test-Update_an_existing_rule_returns_OK_response-1732283532\",\"createdAt\":1732283532973,\"creationAuthorId\":1445416,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "filters": [], + "isEnabled": true, + "message": "Test rule", + "name": "Test-Update_an_existing_rule_returns_OK_response-1732283532-Updated", + "options": { + "evaluationWindow": 900, + "keepAlive": 3600, + "maxSignalDuration": 86400 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "metrics": [], + "query": "@test:true" + } + ], + "tags": [] + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/security_monitoring/rules/mza-hwt-ziu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"id\":\"mza-hwt-ziu\",\"version\":2,\"name\":\"Test-Update_an_existing_rule_returns_OK_response-1732283532-Updated\",\"createdAt\":1732283532973,\"creationAuthorId\":1445416,\"updateAuthorId\":1445416,\"updatedAt\":1732283533337,\"isDefault\":false,\"isPartner\":false,\"isEnabled\":true,\"isBeta\":false,\"isDeleted\":false,\"isDeprecated\":false,\"queries\":[{\"query\":\"@test:true\",\"groupByFields\":[],\"hasOptionalGroupByFields\":false,\"distinctFields\":[],\"aggregation\":\"count\",\"name\":\"\"}],\"options\":{\"keepAlive\":3600,\"maxSignalDuration\":86400,\"detectionMethod\":\"threshold\",\"evaluationWindow\":900},\"cases\":[{\"name\":\"\",\"status\":\"info\",\"notifications\":[],\"condition\":\"a > 0\"}],\"message\":\"Test rule\",\"tags\":[],\"hasExtendedTitle\":false,\"type\":\"log_detection\",\"filters\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/security_monitoring/rules/mza-hwt-ziu", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an existing rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-05-15T09:52:48.266Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "cloud_provider": { + "invalid": { + "aws_account_id": [ + "tag1:v1" + ] + } + } + }, + "id": "csm_resource_filter", + "type": "csm_resource_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cloud_security_management/resource_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"Invalid cloud provider invalid\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Update resource filters returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-05-15T09:52:49.297Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "cloud_provider": { + "aws": { + "aws_account_id": [ + "tag1:v1" + ] + } + } + }, + "id": "csm_resource_filter", + "type": "csm_resource_filter" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/cloud_security_management/resource_filters", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"csm_resource_filter\",\"type\":\"csm_resource_filter\",\"attributes\":{\"cloud_provider\":{\"aws\":{\"aws_account_id\":[\"tag1:v1\"]}},\"uuid\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + } + ], + "scenario": "Update resource filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:56.141Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule", + "name": "My security monitoring rule", + "options": { + "detectionMethod": "threshold", + "evaluationWindow": 1800, + "keepAlive": 999999, + "maxSignalDuration": 1800 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "name": "", + "query": "source:source_here" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/validation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"error\":{\"code\":\"InvalidArgument\",\"message\":\"Invalid rule configuration\",\"details\":[{\"code\":\"InvalidArgument\",\"message\":\"Max signal duration must be greater than or equal to keep alive\",\"target\":\"maxSignalDuration\"},{\"code\":\"InvalidArgument\",\"message\":\"Keep alive is not in allowed durations: 0, 1, 5, 10, 15, 30, 60, 120, 180, 360 (in minutes)\",\"target\":\"keepAlive\"}]}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Validate a detection rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2024-05-10T16:34:56.468Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "a > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule", + "name": "My security monitoring rule", + "options": { + "detectionMethod": "threshold", + "evaluationWindow": 1800, + "keepAlive": 1800, + "maxSignalDuration": 1800 + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "name": "", + "query": "source:source_here" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/validation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Validate a detection rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-12-10T08:37:17.537Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule", + "name": "My security monitoring rule", + "options": { + "detectionMethod": "new_value", + "evaluationWindow": 0, + "keepAlive": 300, + "maxSignalDuration": 600, + "newValueOptions": { + "forgetAfter": 7, + "instantaneousBaseline": true, + "learningDuration": 1, + "learningMethod": "duration", + "learningThreshold": 0 + } + }, + "queries": [ + { + "aggregation": "new_value", + "dataSource": "logs", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "metric": "name", + "metrics": [ + "name" + ], + "name": "", + "query": "source:source_here" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/validation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Validate a detection rule with detection method 'new_value' with enabled feature 'instantaneousBaseline' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-09-12T15:43:48.016Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "cases": [ + { + "condition": "step_b > 0", + "name": "", + "notifications": [], + "status": "info" + } + ], + "hasExtendedTitle": true, + "isEnabled": true, + "message": "My security monitoring rule", + "name": "My security monitoring rule", + "options": { + "detectionMethod": "sequence_detection", + "evaluationWindow": 0, + "keepAlive": 300, + "maxSignalDuration": 600, + "sequenceDetectionOptions": { + "stepTransitions": [ + { + "child": "step_b", + "evaluationWindow": 900, + "parent": "step_a" + } + ], + "steps": [ + { + "condition": "a > 0", + "evaluationWindow": 60, + "name": "step_a" + }, + { + "condition": "b > 0", + "evaluationWindow": 60, + "name": "step_b" + } + ] + } + }, + "queries": [ + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [ + "@userIdentity.assumed_role" + ], + "name": "", + "query": "source:source_here" + }, + { + "aggregation": "count", + "distinctFields": [], + "groupByFields": [], + "name": "", + "query": "source:source_here2" + } + ], + "tags": [ + "env:prod", + "team:security" + ], + "type": "log_detection" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/rules/validation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Validate a detection rule with detection method 'sequence_detection' returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-09-04T08:33:38.344Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "data_exclusion_query": "not enough attributes", + "enabled": false, + "name": "cold_harbour", + "rule_query": "rule:[A-Invalid" + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions/validation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"input_validation_error(Field 'data.attributes.rule_query' is invalid: rule query is invalid)\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Validate a suppression rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Security Monitoring", + "frozen_at": "2025-09-01T21:36:20.593Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "data_exclusion_query": "source:cloudtrail account_id:12345", + "description": "This rule suppresses low-severity signals in staging environments.", + "enabled": true, + "name": "Custom suppression", + "rule_query": "type:log_detection source:cloudtrail" + }, + "type": "suppressions" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/security_monitoring/configuration/suppressions/validation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Validate a suppression rule returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/sensitive-data-scanner.json b/test-server-data/v2/sensitive-data-scanner.json new file mode 100644 index 0000000000..9d4ac3a5e6 --- /dev/null +++ b/test-server-data/v2/sensitive-data-scanner.json @@ -0,0 +1,2082 @@ +{ + "feature": "Sensitive Data Scanner", + "recordings": [ + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:09.418Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286461}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "Test-Create_Scanning_Group_returns_OK_response-1770219309", + "product_list": [ + "logs" + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"693599bb-8eee-4c5a-89a8-5ee9b89d9aff\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Test-Create_Scanning_Group_returns_OK_response-1770219309\",\"product_list\":[\"logs\"],\"samplings\":[]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286461,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/693599bb-8eee-4c5a-89a8-5ee9b89d9aff", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286463}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Scanning Group returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:10.455Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286463}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"779da6c9-c6e5-4103-836a-9f9b6cd45991\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286463,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true, + "pattern": "pattern", + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "relationships": { + "group": { + "data": { + "id": "779da6c9-c6e5-4103-836a-9f9b6cd45991", + "type": "sensitive_data_scanner_group" + } + } + }, + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"rule name should not be blank\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/779da6c9-c6e5-4103-836a-9f9b6cd45991", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286465}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Scanning Rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:12.357Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286465}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f0288bc7-4f14-43bf-8f51-c0914df1d182\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286465,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "excluded_namespaces": [ + "admin.name" + ], + "included_keyword_configuration": { + "character_count": 35, + "keywords": [ + "credit card" + ] + }, + "is_enabled": true, + "name": "Test-Create_Scanning_Rule_returns_OK_response-1770219312", + "namespaces": [ + "admin" + ], + "pattern": "pattern", + "priority": 1, + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "relationships": { + "group": { + "data": { + "id": "f0288bc7-4f14-43bf-8f51-c0914df1d182", + "type": "sensitive_data_scanner_group" + } + } + }, + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b14f367d-9a45-4ced-b475-7384f7dba78c\",\"type\":\"sensitive_data_scanner_rule\",\"attributes\":{\"excluded_namespaces\":[\"admin.name\"],\"included_keyword_configuration\":{\"keywords\":[\"credit card\"],\"character_count\":35},\"is_enabled\":true,\"labels\":[],\"name\":\"Test-Create_Scanning_Rule_returns_OK_response-1770219312\",\"namespaces\":[\"admin\"],\"pattern\":\"pattern\",\"priority\":1,\"tags\":[\"sensitive_data:true\"],\"text_replacement\":{\"type\":\"none\"}},\"relationships\":{\"group\":{\"data\":{\"id\":\"f0288bc7-4f14-43bf-8f51-c0914df1d182\",\"type\":\"sensitive_data_scanner_group\"}}}},\"meta\":{\"version\":286467}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/rules/b14f367d-9a45-4ced-b475-7384f7dba78c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286468}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/f0288bc7-4f14-43bf-8f51-c0914df1d182", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286469}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Scanning Rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:14.554Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286469}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"65a06c42-397f-41ea-8105-fb3d605543f7\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286469,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true, + "name": "Test-Create_Scanning_Rule_with_should_save_match_returns_OK_response-1770219314", + "pattern": "pattern", + "priority": 1, + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "replacement_string": "REDACTED", + "should_save_match": true, + "type": "replacement_string" + } + }, + "relationships": { + "group": { + "data": { + "id": "65a06c42-397f-41ea-8105-fb3d605543f7", + "type": "sensitive_data_scanner_group" + } + } + }, + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"1d0d0631-4bf6-4b68-974b-5773f91a754b\",\"type\":\"sensitive_data_scanner_rule\",\"attributes\":{\"excluded_namespaces\":[],\"is_enabled\":true,\"labels\":[],\"name\":\"Test-Create_Scanning_Rule_with_should_save_match_returns_OK_response-1770219314\",\"namespaces\":[],\"pattern\":\"pattern\",\"priority\":1,\"tags\":[\"sensitive_data:true\"],\"text_replacement\":{\"type\":\"replacement_string\",\"replacement_string\":\"REDACTED\",\"should_save_match\":true}},\"relationships\":{\"group\":{\"data\":{\"id\":\"65a06c42-397f-41ea-8105-fb3d605543f7\",\"type\":\"sensitive_data_scanner_group\"}}}},\"meta\":{\"version\":286471}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/rules/1d0d0631-4bf6-4b68-974b-5773f91a754b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286472}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/65a06c42-397f-41ea-8105-fb3d605543f7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286473}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create Scanning Rule with should_save_match returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:16.741Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286473}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"22cb8bb1-77c1-465a-9aea-2c97b2b05feb\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286473,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/22cb8bb1-77c1-465a-9aea-2c97b2b05feb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286475}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/22cb8bb1-77c1-465a-9aea-2c97b2b05feb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"code\":\"Not Found\",\"title\":\"Not Found\",\"detail\":\"scanning group could not be found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete Scanning Group returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:18.579Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286475}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9f3b9b44-45ea-4bb7-ae4d-5e8d3703c86e\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286475,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true, + "name": "Test-Delete_Scanning_Rule_returns_OK_response-1770219318", + "namespaces": [ + "admin.email" + ], + "pattern": "pattern", + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "relationships": { + "group": { + "data": { + "id": "9f3b9b44-45ea-4bb7-ae4d-5e8d3703c86e", + "type": "sensitive_data_scanner_group" + } + } + }, + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2346c8b6-25a9-404a-83b0-a41f9a01c39b\",\"type\":\"sensitive_data_scanner_rule\",\"attributes\":{\"excluded_namespaces\":[],\"is_enabled\":true,\"labels\":[],\"name\":\"Test-Delete_Scanning_Rule_returns_OK_response-1770219318\",\"namespaces\":[\"admin.email\"],\"pattern\":\"pattern\",\"tags\":[\"sensitive_data:true\"],\"text_replacement\":{\"type\":\"none\"}},\"relationships\":{\"group\":{\"data\":{\"id\":\"9f3b9b44-45ea-4bb7-ae4d-5e8d3703c86e\",\"type\":\"sensitive_data_scanner_group\"}}}},\"meta\":{\"version\":286477}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/rules/2346c8b6-25a9-404a-83b0-a41f9a01c39b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286478}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/rules/2346c8b6-25a9-404a-83b0-a41f9a01c39b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"code\":\"Not Found\",\"title\":\"Not Found\",\"detail\":\"scanning rule could not be found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/9f3b9b44-45ea-4bb7-ae4d-5e8d3703c86e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286479}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Delete Scanning Rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:21.683Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286479}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6e70d6cf-e0cc-4c78-b57c-542d26dec9ac\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286479,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6e70d6cf-e0cc-4c78-b57c-542d26dec9ac\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"id\":\"6e70d6cf-e0cc-4c78-b57c-542d26dec9ac\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286480}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/6e70d6cf-e0cc-4c78-b57c-542d26dec9ac", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286481}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List Scanning Groups returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:25.335Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286481}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c8d07dad-d210-4fae-9678-3cb0c16394aa\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286481,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "relationships": { + "groups": { + "data": [ + { + "id": "Test-Reorder_Groups_returns_Bad_Request_response-1770219325", + "type": "sensitive_data_scanner_group" + } + ] + } + }, + "type": "sensitive_data_scanner_configuration" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid input\",\"detail\":\"The number of groups in the request should be the same as the number of groups in the configuration\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/c8d07dad-d210-4fae-9678-3cb0c16394aa", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286483}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Reorder Groups returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-01-19T13:11:19.414Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_configuration\"},\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":278007}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a796feff-a0cc-4a9f-8c61-16c4d5e44964\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"version\":278008}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"a796feff-a0cc-4a9f-8c61-16c4d5e44964\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"id\":\"a796feff-a0cc-4a9f-8c61-16c4d5e44964\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":278008}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "relationships": { + "groups": { + "data": [ + { + "id": "a796feff-a0cc-4a9f-8c61-16c4d5e44964", + "type": "sensitive_data_scanner_group" + } + ] + } + }, + "type": "sensitive_data_scanner_configuration" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":0,\"rule_count_limit\":0,\"version\":278009}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/a796feff-a0cc-4a9f-8c61-16c4d5e44964", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":278010}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Reorder Groups returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:27.122Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286483}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"cf51218a-1bb1-432c-8f94-b7918047fe28\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286483,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "Test-Update_Scanning_Group_returns_OK_response-1770219327", + "product_list": [ + "logs" + ] + }, + "id": "cf51218a-1bb1-432c-8f94-b7918047fe28", + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/sensitive-data-scanner/config/groups/cf51218a-1bb1-432c-8f94-b7918047fe28", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286485}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/cf51218a-1bb1-432c-8f94-b7918047fe28", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286486}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update Scanning Group returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:28.928Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286486}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"63096684-44d0-42f1-8471-0d004ea9afa7\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286486,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true, + "name": "Test-Update_Scanning_Rule_returns_Bad_Request_response-1770219328", + "namespaces": [ + "admin.email" + ], + "pattern": "pattern", + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "relationships": { + "group": { + "data": { + "id": "63096684-44d0-42f1-8471-0d004ea9afa7", + "type": "sensitive_data_scanner_group" + } + } + }, + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d2d9ec28-02ab-4256-bca0-b55e70131915\",\"type\":\"sensitive_data_scanner_rule\",\"attributes\":{\"excluded_namespaces\":[],\"is_enabled\":true,\"labels\":[],\"name\":\"Test-Update_Scanning_Rule_returns_Bad_Request_response-1770219328\",\"namespaces\":[\"admin.email\"],\"pattern\":\"pattern\",\"tags\":[\"sensitive_data:true\"],\"text_replacement\":{\"type\":\"none\"}},\"relationships\":{\"group\":{\"data\":{\"id\":\"63096684-44d0-42f1-8471-0d004ea9afa7\",\"type\":\"sensitive_data_scanner_group\"}}}},\"meta\":{\"version\":286488}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true, + "name": "Test-Update_Scanning_Rule_returns_Bad_Request_response-1770219328", + "pattern": "pattern", + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "relationships": { + "group": { + "data": { + "id": "63096684-44d0-42f1-8471-0d004ea9afa7", + "type": "sensitive_data_scanner_group" + } + } + } + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/sensitive-data-scanner/config/rules/d2d9ec28-02ab-4256-bca0-b55e70131915", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"got type \\\"\\\" expected one of \\\"sensitive_data_scanner_rule\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/rules/d2d9ec28-02ab-4256-bca0-b55e70131915", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286489}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/63096684-44d0-42f1-8471-0d004ea9afa7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286490}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update Scanning Rule returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Sensitive Data Scanner", + "frozen_at": "2026-02-04T15:35:31.594Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/sensitive-data-scanner/config", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"relationships\":{\"groups\":{\"data\":[{\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"type\":\"sensitive_data_scanner_group\"},{\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"type\":\"sensitive_data_scanner_group\"}]}},\"type\":\"sensitive_data_scanner_configuration\"},\"included\":[{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"40f36cf1-dc37-46fd-a4df-93d55971f6c3\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"8b25277f-4192-4079-88b9-be2d39c2a5a9\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"6b02bc6f-1588-433d-8a5d-fab867ac386d\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"99cae8b0-3cd0-4fc8-88ba-501c8ae5c8bb\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769279092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"14fa0ce6-9e1c-4570-87ec-c3d42122166e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e83cca8a-afe8-4012-92c9-b70a3ca72483\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"fa845597-18b7-41d1-88c3-c9f0e5ccc107\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"5ea46624-4909-401e-8a99-492d916d493e\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"1b1c8fb7-2564-475e-af6f-3d1b4e740137\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769293492\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"38acc1c6-416d-4dcd-bf13-d0c9ef189c28\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"75dc5014-bafb-4e6f-bee1-c5eed459ae87\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"478f26b5-06a5-4a2f-abfc-34a4c723ca00\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"49f14d2d-c39f-4b7d-9c1a-faebeca167ca\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"aed4eaf2-8223-4922-b7be-d14f719c41b4\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769307892\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"bcc8bd1a-5e67-40c7-9c8c-44318df2f5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"61fb1574-8541-4e67-96eb-099c6b81f159\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769322292\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"414d38df-0daa-4d10-ac56-faf07e1fa67b\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769336692\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"e1dd1a1d-7a06-4502-96c8-331b8da25927\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"},{\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"Example-Create_Scanning_Group_returns_OK_response_1769495092\",\"product_list\":[\"logs\"],\"samplings\":[]},\"id\":\"cd20f1cf-6f14-4967-9794-f28f08ddb5a5\",\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}},\"type\":\"sensitive_data_scanner_group\"}],\"meta\":{\"count_limit\":500,\"group_count_limit\":20,\"has_cascading_enabled\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"is_pci_compliant\":false,\"min_sampling_rate\":10,\"rule_count_limit\":500,\"version\":286490}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "query": "*" + }, + "is_enabled": false, + "name": "my-test-group", + "product_list": [ + "logs" + ], + "samplings": [ + { + "product": "logs", + "rate": 100 + } + ] + }, + "relationships": { + "configuration": { + "data": { + "id": "7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87", + "type": "sensitive_data_scanner_configuration" + } + }, + "rules": { + "data": [] + } + }, + "type": "sensitive_data_scanner_group" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/groups", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9cf4b0d5-3e8d-435b-8a5b-ba0063cd336c\",\"type\":\"sensitive_data_scanner_group\",\"attributes\":{\"description\":\"\",\"filter\":{\"query\":\"*\"},\"is_enabled\":false,\"name\":\"my-test-group\",\"product_list\":[\"logs\"],\"samplings\":[{\"product\":\"logs\",\"rate\":100}]},\"relationships\":{\"configuration\":{\"data\":{\"id\":\"7957915c634d4dcb581fa154157f5ad9c2947f50be632fb5599862069f4d2d87\",\"type\":\"sensitive_data_scanner_configuration\"}},\"rules\":{\"data\":[]}}},\"meta\":{\"group_count_limit\":20,\"rule_count_limit\":500,\"is_pci_compliant\":false,\"has_highlight_enabled\":true,\"has_multi_pass_enabled\":true,\"has_cascading_enabled\":false,\"is_configuration_superseded\":false,\"is_float_sampling_rate_enabled\":false,\"min_sampling_rate\":10,\"version\":286490,\"count_limit\":500}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "is_enabled": true, + "name": "Test-Update_Scanning_Rule_returns_OK_response-1770219331", + "namespaces": [ + "admin.email" + ], + "pattern": "pattern", + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "relationships": { + "group": { + "data": { + "id": "9cf4b0d5-3e8d-435b-8a5b-ba0063cd336c", + "type": "sensitive_data_scanner_group" + } + } + }, + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/sensitive-data-scanner/config/rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9ce36dfc-4eb8-4710-8df0-d42bf008d7fb\",\"type\":\"sensitive_data_scanner_rule\",\"attributes\":{\"excluded_namespaces\":[],\"is_enabled\":true,\"labels\":[],\"name\":\"Test-Update_Scanning_Rule_returns_OK_response-1770219331\",\"namespaces\":[\"admin.email\"],\"pattern\":\"pattern\",\"tags\":[\"sensitive_data:true\"],\"text_replacement\":{\"type\":\"none\"}},\"relationships\":{\"group\":{\"data\":{\"id\":\"9cf4b0d5-3e8d-435b-8a5b-ba0063cd336c\",\"type\":\"sensitive_data_scanner_group\"}}}},\"meta\":{\"version\":286492}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "included_keyword_configuration": { + "character_count": 35, + "keywords": [ + "credit card", + "cc" + ] + }, + "is_enabled": true, + "name": "Test-Update_Scanning_Rule_returns_OK_response-1770219331", + "pattern": "pattern", + "priority": 5, + "tags": [ + "sensitive_data:true" + ], + "text_replacement": { + "type": "none" + } + }, + "id": "9ce36dfc-4eb8-4710-8df0-d42bf008d7fb", + "type": "sensitive_data_scanner_rule" + }, + "meta": {} + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/sensitive-data-scanner/config/rules/9ce36dfc-4eb8-4710-8df0-d42bf008d7fb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286493}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/rules/9ce36dfc-4eb8-4710-8df0-d42bf008d7fb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286494}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "meta": {} + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/sensitive-data-scanner/config/groups/9cf4b0d5-3e8d-435b-8a5b-ba0063cd336c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"version\":286495}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Update Scanning Rule returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/service-accounts.json b/test-server-data/v2/service-accounts.json new file mode 100644 index 0000000000..ddc09bda6c --- /dev/null +++ b/test-server-data/v2/service-accounts.json @@ -0,0 +1,1484 @@ +{ + "feature": "Service Accounts", + "recordings": [ + { + "feature": "Service Accounts", + "frozen_at": "2023-01-30T14:58:54.329Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_a_service_account_returns_OK_response-1675090734" + }, + "type": "roles" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/roles", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"roles\",\"id\":\"9d7c873e-a0ae-11ed-975e-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_service_account_returns_OK_response-1675090734\",\"created_at\":\"2023-01-30T14:58:54.528421+00:00\",\"modified_at\":\"2023-01-30T14:58:54.566829+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"}]}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_a_service_account_returns_OK_response-1675090734@datadoghq.com", + "name": "Test API Client", + "service_account": true + }, + "relationships": { + "roles": { + "data": [ + { + "id": "9d7c873e-a0ae-11ed-975e-da7ad0900002", + "type": "roles" + } + ] + } + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"9d9c0565-a0ae-11ed-88af-be56a8628f3f\",\"attributes\":{\"name\":\"Test API Client\",\"handle\":\"9d9c0565-a0ae-11ed-88af-be56a8628f3f\",\"created_at\":\"2023-01-30T14:58:54.736093+00:00\",\"modified_at\":\"2023-01-30T14:58:54.738680+00:00\",\"email\":\"test-create_a_service_account_returns_ok_response-1675090734@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/5bf68b66c63c55ddb80602fc2d183c28?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"9d7c873e-a0ae-11ed-975e-da7ad0900002\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}},\"included\":[{\"type\":\"roles\",\"id\":\"9d7c873e-a0ae-11ed-975e-da7ad0900002\",\"attributes\":{\"name\":\"Test-Create_a_service_account_returns_OK_response-1675090734\",\"created_at\":\"2023-01-30T14:58:54.528421+00:00\",\"modified_at\":\"2023-01-30T14:58:54.566829+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"}]}}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incident Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"read\",\"restricted\":true}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/9d9c0565-a0ae-11ed-88af-be56a8628f3f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/roles/9d7c873e-a0ae-11ed-975e-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2026-05-28T14:36:43.282Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_an_access_token_for_a_service_account_returns_Created_response-1779979003@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"a6a9f992-5aa2-11f1-8c27-ea4c41923911\",\"attributes\":{\"uuid\":\"a6a9f992-5aa2-11f1-8c27-ea4c41923911\",\"name\":null,\"handle\":\"a6a9f992-5aa2-11f1-8c27-ea4c41923911\",\"created_at\":\"2026-05-28T14:36:45.255584+00:00\",\"modified_at\":\"2026-05-28T14:36:45.255584+00:00\",\"email\":\"test-create_an_access_token_for_a_service_account_returns_created_response-1779979003@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/a1a6182d465264feebf3b6d627a99b67?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\",\"last_login_time\":null},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_an_access_token_for_a_service_account_returns_Created_response-1779979003", + "scopes": [ + "dashboards_read" + ] + }, + "type": "service_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts/a6a9f992-5aa2-11f1-8c27-ea4c41923911/access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7767e407-9c67-4ede-902e-c4b1f3782352\",\"type\":\"service_access_tokens\",\"attributes\":{\"created_at\":\"2026-05-28T14:36:45.736320584Z\",\"expires_at\":null,\"key\":\"xxxxx_xxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxXxxxxxxxXxxx\",\"name\":\"Test-Create_an_access_token_for_a_service_account_returns_Created_response-1779979003\",\"public_portion\":\"ddsat_3dJZ2IClhMOwsx0xC01NBK\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"a6a9f992-5aa2-11f1-8c27-ea4c41923911\",\"type\":\"service_account\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/a6a9f992-5aa2-11f1-8c27-ea4c41923911/access_tokens/7767e407-9c67-4ede-902e-c4b1f3782352", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/a6a9f992-5aa2-11f1-8c27-ea4c41923911", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an access token for a service account returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2023-10-12T10:11:47.418Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_an_application_key_for_this_service_account_returns_Created_response-1697105507@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"c0ea5a28-68e7-11ee-af78-7221d1e45f66\",\"attributes\":{\"name\":null,\"handle\":\"c0ea5a28-68e7-11ee-af78-7221d1e45f66\",\"created_at\":\"2023-10-12T10:11:47.838233+00:00\",\"modified_at\":\"2023-10-12T10:11:47.838233+00:00\",\"email\":\"test-create_an_application_key_for_this_service_account_returns_created_response-1697105507@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/45057f7ed4c5662bd175fd2657bf58f2?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_an_application_key_for_this_service_account_returns_Created_response-1697105507" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts/c0ea5a28-68e7-11ee-af78-7221d1e45f66/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"6315ab43-ce92-4130-b6d2-94ceb5f7142a\",\"attributes\":{\"name\":\"Test-Create_an_application_key_for_this_service_account_returns_Created_response-1697105507\",\"created_at\":\"2023-10-12T10:11:48.340554+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"c0ea5a28-68e7-11ee-af78-7221d1e45f66\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/c0ea5a28-68e7-11ee-af78-7221d1e45f66/application_keys/6315ab43-ce92-4130-b6d2-94ceb5f7142a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/c0ea5a28-68e7-11ee-af78-7221d1e45f66", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an application key for this service account returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2022-05-12T09:53:20.809Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_an_application_key_with_scopes_for_this_service_account_returns_Created_response-1652349200@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"fbebe517-c0ed-45a9-b3c9-4377cbe04efd\",\"attributes\":{\"name\":null,\"handle\":\"fbebe517-c0ed-45a9-b3c9-4377cbe04efd\",\"created_at\":\"2022-05-12T09:53:21.271368+00:00\",\"modified_at\":\"2022-05-12T09:53:21.302672+00:00\",\"email\":\"test-create_an_application_key_with_scopes_for_this_service_account_returns_created_response-1652349200@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/cdd87aef7fe7eed9427d1e53ac7219c2?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Create_an_application_key_with_scopes_for_this_service_account_returns_Created_response-1652349200", + "scopes": [ + "dashboards_read", + "dashboards_write", + "dashboards_public_share" + ] + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts/fbebe517-c0ed-45a9-b3c9-4377cbe04efd/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"e01199cd-849e-4fb8-ae34-af8b6a8cd129\",\"attributes\":{\"name\":\"Test-Create_an_application_key_with_scopes_for_this_service_account_returns_Created_response-1652349200\",\"created_at\":\"2022-05-12T09:53:22.022194+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":[\"dashboards_read\",\"dashboards_write\",\"dashboards_public_share\"]},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"fbebe517-c0ed-45a9-b3c9-4377cbe04efd\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/fbebe517-c0ed-45a9-b3c9-4377cbe04efd/application_keys/e01199cd-849e-4fb8-ae34-af8b6a8cd129", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/fbebe517-c0ed-45a9-b3c9-4377cbe04efd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create an application key with scopes for this service account returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2023-10-12T07:12:21.913Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Delete_an_application_key_for_this_service_account_returns_No_Content_response-1697094741@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"b0338c3c-68ce-11ee-9dc7-02a9eb8880d8\",\"attributes\":{\"name\":null,\"handle\":\"b0338c3c-68ce-11ee-9dc7-02a9eb8880d8\",\"created_at\":\"2023-10-12T07:12:22.378427+00:00\",\"modified_at\":\"2023-10-12T07:12:22.378427+00:00\",\"email\":\"test-delete_an_application_key_for_this_service_account_returns_no_content_response-1697094741@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/ed84f324d81c653aae4b87a2eb517a97?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Delete_an_application_key_for_this_service_account_returns_No_Content_response-1697094741" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts/b0338c3c-68ce-11ee-9dc7-02a9eb8880d8/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"6a147414-e85c-4b92-829b-fff59f8bd8e0\",\"attributes\":{\"name\":\"Test-Delete_an_application_key_for_this_service_account_returns_No_Content_response-1697094741\",\"created_at\":\"2023-10-12T07:12:22.935154+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"b0338c3c-68ce-11ee-9dc7-02a9eb8880d8\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/b0338c3c-68ce-11ee-9dc7-02a9eb8880d8/application_keys/6a147414-e85c-4b92-829b-fff59f8bd8e0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/b0338c3c-68ce-11ee-9dc7-02a9eb8880d8/application_keys/6a147414-e85c-4b92-829b-fff59f8bd8e0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Application key not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/b0338c3c-68ce-11ee-9dc7-02a9eb8880d8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete an application key for this service account returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2023-10-12T10:10:58.448Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Edit_an_application_key_for_this_service_account_returns_OK_response-1697105458@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"a3b86b00-68e7-11ee-b081-e2f0333fd1ce\",\"attributes\":{\"name\":null,\"handle\":\"a3b86b00-68e7-11ee-b081-e2f0333fd1ce\",\"created_at\":\"2023-10-12T10:10:58.857066+00:00\",\"modified_at\":\"2023-10-12T10:10:58.857066+00:00\",\"email\":\"test-edit_an_application_key_for_this_service_account_returns_ok_response-1697105458@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/00878614ca2acb0d68087ee17a33e3f4?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Edit_an_application_key_for_this_service_account_returns_OK_response-1697105458" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts/a3b86b00-68e7-11ee-b081-e2f0333fd1ce/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"8dca4456-bd90-4cb4-a182-5868501d8a9b\",\"attributes\":{\"name\":\"Test-Edit_an_application_key_for_this_service_account_returns_OK_response-1697105458\",\"created_at\":\"2023-10-12T10:10:59.392476+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"a3b86b00-68e7-11ee-b081-e2f0333fd1ce\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Edit_an_application_key_for_this_service_account_returns_OK_response-1697105458-updated" + }, + "id": "8dca4456-bd90-4cb4-a182-5868501d8a9b", + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/service_accounts/a3b86b00-68e7-11ee-b081-e2f0333fd1ce/application_keys/8dca4456-bd90-4cb4-a182-5868501d8a9b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"8dca4456-bd90-4cb4-a182-5868501d8a9b\",\"attributes\":{\"name\":\"Test-Edit_an_application_key_for_this_service_account_returns_OK_response-1697105458-updated\",\"created_at\":\"2023-10-12T10:10:59.392477+00:00\",\"last4\":\"xxxx\",\"scopes\":null},\"relationships\":{\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/a3b86b00-68e7-11ee-b081-e2f0333fd1ce/application_keys/8dca4456-bd90-4cb4-a182-5868501d8a9b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/a3b86b00-68e7-11ee-b081-e2f0333fd1ce", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Edit an application key for this service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2026-05-28T14:36:46.627Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_an_access_token_for_a_service_account_returns_OK_response-1779979006@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"a7a2e511-5aa2-11f1-80a5-eec0508b7e6c\",\"attributes\":{\"uuid\":\"a7a2e511-5aa2-11f1-80a5-eec0508b7e6c\",\"name\":null,\"handle\":\"a7a2e511-5aa2-11f1-80a5-eec0508b7e6c\",\"created_at\":\"2026-05-28T14:36:46.886919+00:00\",\"modified_at\":\"2026-05-28T14:36:46.886919+00:00\",\"email\":\"test-get_an_access_token_for_a_service_account_returns_ok_response-1779979006@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/eaa658a03758d4761147dd7431d1c8f5?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\",\"last_login_time\":null},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_an_access_token_for_a_service_account_returns_OK_response-1779979006", + "scopes": [ + "dashboards_read" + ] + }, + "type": "service_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts/a7a2e511-5aa2-11f1-80a5-eec0508b7e6c/access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0abefcae-90ed-4670-94ab-7cea6ca9fb6f\",\"type\":\"service_access_tokens\",\"attributes\":{\"created_at\":\"2026-05-28T14:36:47.296135174Z\",\"expires_at\":null,\"key\":\"xxxxx_xxxxxxxxxxxxxxXxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"name\":\"Test-Get_an_access_token_for_a_service_account_returns_OK_response-1779979006\",\"public_portion\":\"ddsat_0KHCgRdjSyb8EMXtz1E5Cp\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"a7a2e511-5aa2-11f1-80a5-eec0508b7e6c\",\"type\":\"service_account\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/service_accounts/a7a2e511-5aa2-11f1-80a5-eec0508b7e6c/access_tokens/0abefcae-90ed-4670-94ab-7cea6ca9fb6f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"0abefcae-90ed-4670-94ab-7cea6ca9fb6f\",\"type\":\"service_access_tokens\",\"attributes\":{\"created_at\":\"2026-05-28T14:36:47.296135Z\",\"expires_at\":null,\"last_used_at\":null,\"name\":\"Test-Get_an_access_token_for_a_service_account_returns_OK_response-1779979006\",\"public_portion\":\"ddsat_0KHCgRdjSyb8EMXtz1E5Cp\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"a7a2e511-5aa2-11f1-80a5-eec0508b7e6c\",\"type\":\"service_account\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/a7a2e511-5aa2-11f1-80a5-eec0508b7e6c/access_tokens/0abefcae-90ed-4670-94ab-7cea6ca9fb6f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/a7a2e511-5aa2-11f1-80a5-eec0508b7e6c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get an access token for a service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2023-10-12T07:18:33.140Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_one_application_key_for_this_service_account_returns_OK_response-1697095113@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"8d6f1427-68cf-11ee-b38b-b697d9f51e5c\",\"attributes\":{\"name\":null,\"handle\":\"8d6f1427-68cf-11ee-b38b-b697d9f51e5c\",\"created_at\":\"2023-10-12T07:18:33.545035+00:00\",\"modified_at\":\"2023-10-12T07:18:33.545035+00:00\",\"email\":\"test-get_one_application_key_for_this_service_account_returns_ok_response-1697095113@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/675597cb6c88dc2642385e567f57b727?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Get_one_application_key_for_this_service_account_returns_OK_response-1697095113" + }, + "type": "application_keys" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts/8d6f1427-68cf-11ee-b38b-b697d9f51e5c/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"490b7601-a457-449c-8d8c-72c848e669d5\",\"attributes\":{\"name\":\"Test-Get_one_application_key_for_this_service_account_returns_OK_response-1697095113\",\"created_at\":\"2023-10-12T07:18:34.052468+00:00\",\"last4\":\"xxxx\",\"key\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"scopes\":null},\"relationships\":{\"owned_by\":{\"data\":{\"type\":\"users\",\"id\":\"8d6f1427-68cf-11ee-b38b-b697d9f51e5c\"}},\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/service_accounts/8d6f1427-68cf-11ee-b38b-b697d9f51e5c/application_keys/490b7601-a457-449c-8d8c-72c848e669d5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"application_keys\",\"id\":\"490b7601-a457-449c-8d8c-72c848e669d5\",\"attributes\":{\"name\":\"Test-Get_one_application_key_for_this_service_account_returns_OK_response-1697095113\",\"created_at\":\"2023-10-12T07:18:34.052468+00:00\",\"last4\":\"xxxx\",\"scopes\":null},\"relationships\":{\"leak_information\":{\"data\":null}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/8d6f1427-68cf-11ee-b38b-b697d9f51e5c/application_keys/490b7601-a457-449c-8d8c-72c848e669d5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/8d6f1427-68cf-11ee-b38b-b697d9f51e5c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get one application key for this service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2026-04-16T20:03:10.610Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-List_access_tokens_for_a_service_account_returns_OK_response-1776369790@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"4b3b0a2c-39cf-11f1-bf73-ce6d1c25b9b4\",\"attributes\":{\"uuid\":\"4b3b0a2c-39cf-11f1-bf73-ce6d1c25b9b4\",\"name\":null,\"handle\":\"4b3b0a2c-39cf-11f1-bf73-ce6d1c25b9b4\",\"created_at\":\"2026-04-16T20:03:10.837056+00:00\",\"modified_at\":\"2026-04-16T20:03:10.837056+00:00\",\"email\":\"test-list_access_tokens_for_a_service_account_returns_ok_response-1776369790@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/0a5772e4c2381e3c1061e55142e2281a?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\",\"last_login_time\":null},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/service_accounts/4b3b0a2c-39cf-11f1-bf73-ce6d1c25b9b4/access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"total_filtered_count\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/4b3b0a2c-39cf-11f1-bf73-ce6d1c25b9b4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List access tokens for a service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2023-10-12T10:12:18.993Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-List_application_keys_for_this_service_account_returns_OK_response-1697105538@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"d3bd8ebd-68e7-11ee-8628-2e5a5b6c83f3\",\"attributes\":{\"name\":null,\"handle\":\"d3bd8ebd-68e7-11ee-8628-2e5a5b6c83f3\",\"created_at\":\"2023-10-12T10:12:19.421394+00:00\",\"modified_at\":\"2023-10-12T10:12:19.421394+00:00\",\"email\":\"test-list_application_keys_for_this_service_account_returns_ok_response-1697105538@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/79fd260ec49c01b5dde9172579034626?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/service_accounts/d3bd8ebd-68e7-11ee-8628-2e5a5b6c83f3/application_keys", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"total_filtered_count\":0},\"max_allowed_per_user\":1000}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/d3bd8ebd-68e7-11ee-8628-2e5a5b6c83f3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List application keys for this service account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2026-05-28T14:36:48.422Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Revoke_an_access_token_for_a_service_account_returns_No_Content_response-1779979008@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"a8b64d35-5aa2-11f1-80a5-eec0508b7e6c\",\"attributes\":{\"uuid\":\"a8b64d35-5aa2-11f1-80a5-eec0508b7e6c\",\"name\":null,\"handle\":\"a8b64d35-5aa2-11f1-80a5-eec0508b7e6c\",\"created_at\":\"2026-05-28T14:36:48.691799+00:00\",\"modified_at\":\"2026-05-28T14:36:48.691799+00:00\",\"email\":\"test-revoke_an_access_token_for_a_service_account_returns_no_content_response-1779979008@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/80f71434c485335573c82ccfeff519ef?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\",\"last_login_time\":null},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Revoke_an_access_token_for_a_service_account_returns_No_Content_response-1779979008", + "scopes": [ + "dashboards_read" + ] + }, + "type": "service_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts/a8b64d35-5aa2-11f1-80a5-eec0508b7e6c/access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7829a158-515b-4c28-b649-eca6529a02b7\",\"type\":\"service_access_tokens\",\"attributes\":{\"created_at\":\"2026-05-28T14:36:49.115287243Z\",\"expires_at\":null,\"key\":\"xxxxx_xxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\"name\":\"Test-Revoke_an_access_token_for_a_service_account_returns_No_Content_response-1779979008\",\"public_portion\":\"ddsat_3ek6Sznp1LswenIQzJ44yl\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"a8b64d35-5aa2-11f1-80a5-eec0508b7e6c\",\"type\":\"service_account\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/a8b64d35-5aa2-11f1-80a5-eec0508b7e6c/access_tokens/7829a158-515b-4c28-b649-eca6529a02b7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/a8b64d35-5aa2-11f1-80a5-eec0508b7e6c/access_tokens/7829a158-515b-4c28-b649-eca6529a02b7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/a8b64d35-5aa2-11f1-80a5-eec0508b7e6c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Revoke an access token for a service account returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Service Accounts", + "frozen_at": "2026-05-28T14:36:50.607Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_an_access_token_for_a_service_account_returns_OK_response-1779979010@datadoghq.com", + "service_account": true, + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"aa1d5972-5aa2-11f1-94cc-52d8072c8863\",\"attributes\":{\"uuid\":\"aa1d5972-5aa2-11f1-94cc-52d8072c8863\",\"name\":null,\"handle\":\"aa1d5972-5aa2-11f1-94cc-52d8072c8863\",\"created_at\":\"2026-05-28T14:36:51.044856+00:00\",\"modified_at\":\"2026-05-28T14:36:51.044856+00:00\",\"email\":\"test-update_an_access_token_for_a_service_account_returns_ok_response-1779979010@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/5a4f64a0801adb0c3e3a456f8540dde0?s=48&d=retro\",\"title\":\"user title\",\"verified\":true,\"service_account\":true,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\",\"last_login_time\":null},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_an_access_token_for_a_service_account_returns_OK_response-1779979010", + "scopes": [ + "dashboards_read" + ] + }, + "type": "service_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/service_accounts/aa1d5972-5aa2-11f1-94cc-52d8072c8863/access_tokens", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"87e35e26-368c-479b-85bd-1036f303736e\",\"type\":\"service_access_tokens\",\"attributes\":{\"created_at\":\"2026-05-28T14:36:51.482285572Z\",\"expires_at\":null,\"key\":\"xxxxx_xxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxXxxxxxxxxxxxxxxxxxxxxxxx\",\"name\":\"Test-Update_an_access_token_for_a_service_account_returns_OK_response-1779979010\",\"public_portion\":\"ddsat_48Ps23zLj44c8YDq0ApfDS\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"aa1d5972-5aa2-11f1-94cc-52d8072c8863\",\"type\":\"service_account\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Test-Update_an_access_token_for_a_service_account_returns_OK_response-1779979010-updated" + }, + "id": "87e35e26-368c-479b-85bd-1036f303736e", + "type": "service_access_tokens" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/service_accounts/aa1d5972-5aa2-11f1-94cc-52d8072c8863/access_tokens/87e35e26-368c-479b-85bd-1036f303736e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"87e35e26-368c-479b-85bd-1036f303736e\",\"type\":\"service_access_tokens\",\"attributes\":{\"created_at\":\"2026-05-28T14:36:51.482285Z\",\"expires_at\":null,\"last_used_at\":null,\"modified_at\":\"2026-05-28T14:36:51.792511Z\",\"name\":\"Test-Update_an_access_token_for_a_service_account_returns_OK_response-1779979010-updated\",\"public_portion\":\"ddsat_48Ps23zLj44c8YDq0ApfDS\",\"scopes\":[\"dashboards_read\"]},\"relationships\":{\"owned_by\":{\"data\":{\"id\":\"aa1d5972-5aa2-11f1-94cc-52d8072c8863\",\"type\":\"service_account\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/service_accounts/aa1d5972-5aa2-11f1-94cc-52d8072c8863/access_tokens/87e35e26-368c-479b-85bd-1036f303736e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/aa1d5972-5aa2-11f1-94cc-52d8072c8863", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an access token for a service account returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/service-definition.json b/test-server-data/v2/service-definition.json new file mode 100644 index 0000000000..8c1cbf3711 --- /dev/null +++ b/test-server-data/v2/service-definition.json @@ -0,0 +1,646 @@ +{ + "feature": "Service Definition", + "recordings": [ + { + "feature": "Service Definition", + "frozen_at": "2023-03-24T18:06:23.874Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "contacts": [ + { + "contact": "contact@datadoghq.com", + "name": "Team Email", + "type": "email" + } + ], + "dd-service": "service-testcreateorupdateservicedefinitionreturnscreatedresponse1679681183", + "dd-team": "my-team", + "docs": [ + { + "name": "Architecture", + "provider": "google drive", + "url": "https://gdrive/mydoc" + } + ], + "extensions": { + "myorgextension": "extensionvalue" + }, + "integrations": { + "opsgenie": { + "region": "US", + "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000" + }, + "pagerduty": "https://my-org.pagerduty.com/service-directory/PMyService" + }, + "links": [ + { + "name": "Runbook", + "type": "runbook", + "url": "https://my-runbook" + } + ], + "repos": [ + { + "name": "Source Code", + "provider": "GitHub", + "url": "https://github.com/DataDog/schema" + } + ], + "schema-version": "v2", + "tags": [ + "my:tag", + "service:tag" + ], + "team": "my-team" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/services/definitions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"service-definition\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-03-24T18:06:24.041193351Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2\",\"dd-service\":\"service-testcreateorupdateservicedefinitionreturnscreatedresponse1679681183\",\"dd-team\":\"my-team\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"}],\"repos\":[{\"name\":\"Source Code\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"docs\":[{\"name\":\"Architecture\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":\"https://my-org.pagerduty.com/service-directory/PMyService\",\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/services/definitions/service-testcreateorupdateservicedefinitionreturnscreatedresponse1679681183", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not Found\"],\"error_details\":[{}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create or update service definition returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "frozen_at": "2023-03-24T19:21:51.782Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "contacts": [ + { + "contact": "contact@datadoghq.com", + "name": "Team Email", + "type": "email" + } + ], + "dd-service": "service-testcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1679685711", + "dd-team": "my-team", + "docs": [ + { + "name": "Architecture", + "provider": "google drive", + "url": "https://gdrive/mydoc" + } + ], + "extensions": { + "myorgextension": "extensionvalue" + }, + "integrations": { + "opsgenie": { + "region": "US", + "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000" + }, + "pagerduty": "https://my-org.pagerduty.com/service-directory/PMyService" + }, + "links": [ + { + "name": "Runbook", + "type": "runbook", + "url": "https://my-runbook" + } + ], + "repos": [ + { + "name": "Source Code", + "provider": "GitHub", + "url": "https://github.com/DataDog/schema" + } + ], + "schema-version": "v2", + "tags": [ + "my:tag", + "service:tag" + ], + "team": "my-team" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/services/definitions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"service-definition\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-03-24T19:21:52.44477064Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2\",\"dd-service\":\"service-testcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1679685711\",\"dd-team\":\"my-team\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"}],\"repos\":[{\"name\":\"Source Code\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"docs\":[{\"name\":\"Architecture\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":\"https://my-org.pagerduty.com/service-directory/PMyService\",\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/services/definitions/service-testcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1679685711", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not Found\"],\"error_details\":[{}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create or update service definition using schema v2 returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "frozen_at": "2023-03-29T17:51:36.535Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "contacts": [ + { + "contact": "contact@datadoghq.com", + "name": "Team Email", + "type": "email" + } + ], + "dd-service": "service-testcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1680112296", + "extensions": { + "myorgextension": "extensionvalue" + }, + "integrations": { + "opsgenie": { + "region": "US", + "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000" + }, + "pagerduty": { + "service-url": "https://my-org.pagerduty.com/service-directory/PMyService" + } + }, + "links": [ + { + "name": "Runbook", + "type": "runbook", + "url": "https://my-runbook" + }, + { + "name": "Source Code", + "provider": "GitHub", + "type": "repo", + "url": "https://github.com/DataDog/schema" + }, + { + "name": "Architecture", + "provider": "Gigoogle drivetHub", + "type": "doc", + "url": "https://my-runbook" + } + ], + "schema-version": "v2.1", + "tags": [ + "my:tag", + "service:tag" + ], + "team": "my-team" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/services/definitions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"service-definition\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-03-29T17:51:36.683797279Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1680112296\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/services/definitions/service-testcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1680112296", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create or update service definition using schema v2-1 returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "frozen_at": "2023-10-06T18:44:31.430Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "contacts": [ + { + "contact": "contact@datadoghq.com", + "name": "Team Email", + "type": "email" + } + ], + "dd-service": "service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696617871", + "extensions": { + "myorgextension": "extensionvalue" + }, + "integrations": { + "opsgenie": { + "region": "US", + "service-url": "https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000" + }, + "pagerduty": { + "service-url": "https://my-org.pagerduty.com/service-directory/PMyService" + } + }, + "links": [ + { + "name": "Runbook", + "type": "runbook", + "url": "https://my-runbook" + }, + { + "name": "Source Code", + "provider": "GitHub", + "type": "repo", + "url": "https://github.com/DataDog/schema" + }, + { + "name": "Architecture", + "provider": "Gigoogle drivetHub", + "type": "doc", + "url": "https://my-runbook" + } + ], + "schema-version": "v2.2", + "tags": [ + "my:tag", + "service:tag" + ], + "team": "my-team" + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/services/definitions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"service-definition\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-10-06T18:44:32.076834625Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.2\"},\"schema\":{\"schema-version\":\"v2.2\",\"dd-service\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696617871\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/services/definitions/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696617871", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not Found\"],\"error_details\":[{}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Create or update service definition using schema v2-2 returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "frozen_at": "2022-10-10T10:17:50.609Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/services/definitions/not-a-service", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not Found\"],\"error_details\":[{}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a single service definition returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "frozen_at": "2022-11-14T18:19:52.943Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/services/definitions/service-definition-test", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete a single service definition returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "frozen_at": "2022-10-10T10:18:53.337Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/services/definitions/not-a-service", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not Found\"],\"error_details\":[{}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a single service definition returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "frozen_at": "2023-05-11T21:16:09.344Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/services/definitions/service-definition-test", + "query": [ + [ + "schema_version", + "v2.1" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"service-definition\",\"id\":\"77ae46b484fcfd92dc568170b1c534fe\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-18T16:19:17Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-definition-test\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a single service definition returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "frozen_at": "2023-05-11T21:15:27.277Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/services/definitions", + "query": [ + [ + "schema_version", + "v2.1" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"service-definition\",\"id\":\"00568235b96883e071172deb953a7b10\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-27T02:35:20Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"ruby\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testrubycreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682562919\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0113a795bffcfd1c420870459b84eef0\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T01:42:52Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683164572\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0146cb4c4b49e82b6c792f29f891c259\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T11:09:04Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683630544\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"01f73c42aa16837c477641458035ed91\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-07T01:33:19Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683423199\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"02e9920a1ecf7691f51e7eeb50f00eda\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-05T12:24:03Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1683289441\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"cost-center:engineering\",\"business-unit:retail\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"03f76be488e9949e34d52c49c52105ee\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T03:19:58Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"java\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683170398\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"06f60b5c1f230f8174cc5c5e90b7faa9\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T00:16:19Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683591379\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"07bae2206db6c46e6a5022f4cddb0870\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-02T11:12:52Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683025971\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"083a9b5824969035c75110515ecde626\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-10T00:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683678180\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"099ff90f166e8e5bc3631802ec87639d\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T00:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683159780\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0abd68773364109f0cdaea2f1cd8ce45\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-05T04:20:33Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"typescript\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683260433\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0aed9da034062afb317fff84bac9ee14\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-08T03:29:17Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"java\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683516557\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0b862bd241b44f26998a84f79d657e57\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-11T12:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683807780\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0c462811db360802013d842614a53b46\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T11:11:08Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683198668\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0c6e247aaea64a83087c60aab80e3c00\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-01T20:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682972580\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0ef0dc23c7225f37dfbb7a990c655bc8\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-27T04:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682569380\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0f3b1d351d2f4f86b30581a1802f992f\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-01T12:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682943780\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0fc27b234d54736f2ccf75ad6f71e039\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-07T00:16:15Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683418575\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"0ff09935180ade034be6f8defa2ae7ed\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T12:27:16Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1683203233\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"cost-center:engineering\",\"business-unit:retail\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"10fba805e317ed3c5fdb51d4d8bd62dd\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-10T06:05:47Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683698747\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"12739f60a766d688154edfec0a8921c9\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-29T16:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682785380\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"12c1958de85042b33305bc67e1b55804\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-05T02:27:06Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"ruby\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testrubycreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683253626\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"1357684fdfcb5e812f412b35ec93817d\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-06T00:16:28Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683332188\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"13ed95defadfe209045157c21f219848\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-30T10:05:48Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682849147\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"15955e793598cec75c5d0c5d3d4ee5b8\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T00:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683591780\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"17d7b84f942ba5fe3edfd3d66f19be62\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-30T02:30:21Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"ruby\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testrubycreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682821821\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"1878c02a9dd9e3c8777087e52fe12144\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-03T08:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683102180\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"1984bcb82e91e83d9d953fda0b695785\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-01T22:05:48Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682978747\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"1b46acec233e15fea0dc59e172b11bb3\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-27T14:05:48Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682604347\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"1b6fee7dba212d57a4337b98674e33e5\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-03T03:27:51Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"java\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683084470\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"1c432ef22c9da3151d0d9b84713467ee\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-06T00:14:16Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basicv2_1-local-1683332054\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"1d4577a4ef791395c61d57e9225d74de\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T04:19:50Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"typescript\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683605990\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"1e16a5031f9ccc92ce98c14cc1c93706\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T08:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683620580\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"1e9159ebb94a939d9746100ec9697175\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-11T02:30:37Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"ruby\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testrubycreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683772237\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"2011034017810fc105338c7add6f46f2\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-02T00:17:10Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682986629\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"2152e7df2249a42c21c18befd5346d45\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-01T00:18:13Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682900293\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"2170f9dd3a51f31493bc5eede35d8acd\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-06T08:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683361380\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"21da969122623296e78f13a357fd1b69\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-27T18:05:48Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682618747\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"2394e6a4d48842c17c2542c697b7c395\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-28T10:05:48Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682676347\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"24607868cea47c0140d0f0a79c57e0ce\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-08T00:16:33Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683504993\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"248740bea5649caa9d1efc603bfcb0b6\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T01:42:22Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683596541\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"25a86c21ed34f759b597dbfa28bd0a37\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-30T04:21:44Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"typescript\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682828503\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"25bb328d025237d8897d4e679501b012\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-05T11:10:56Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683285056\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"25ed813986afdf6ba0446851bd7c6592\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-06T00:14:17Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1683332055\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"cost-center:engineering\",\"business-unit:retail\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"27a8c25472bde153af77b75ff35384e8\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-06T00:30:58Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1683333053-updated\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"cost-center:engineering\",\"business-unit:retail\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"296625fc278518f14c7d6dd6dd91a0b1\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T02:31:26Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"ruby\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testrubycreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683599486\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"2b8f721d2d5e7c10ab905b326ebbbd07\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-28T01:39:02Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682645941\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"2b9ec8fd3fbd8667b3e073968067c5a6\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-08T16:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683562980\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"2c7bc5dfbb3a82c06ab100b3cbd4b570\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-29T12:29:04Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1682771341\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"cost-center:engineering\",\"business-unit:retail\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"2cc0d478707df426481640ab9dd31f8d\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T12:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683202980\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"2ebbaa9a2608278fca9a30a590bdeac4\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T20:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683231780\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"30228e152032a3bc7abf39901749c554\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-10T22:05:47Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683756347\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"30ba9b5d5d81d01c1a8afb5faec2d619\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T02:30:55Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"ruby\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testrubycreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683167454\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"30d925ccbed32db79701ec9063f222fb\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T12:27:09Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1683203224-updated\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"cost-center:engineering\",\"business-unit:retail\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"30fac0d0f0295c2de8f970af08739126\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-02T11:12:52Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683025972\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"318fcb38e12c7c213fc020361a0ccf9a\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-03T04:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683087780\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"31cfc4fc775372110ddd5bc58b8de5df\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-01T03:22:47Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"java\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682911367\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"331db24bfbf249e71198ece68b65c958\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-11T00:16:06Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683764166\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"343d970130315f243d23067a20bda9ae\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-06T01:35:56Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683336956\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"3452c51e0db6322b8cd3290d06540978\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2022-08-04T20:17:04Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"python-sample-app-unbleachedsilk\",\"team\":\"intg-tools-libs\",\"tags\":[\"host:isolated-diego-cell-0-270372e1-a8ae-4d3c-9678-41a072dd365c\"],\"integrations\":{}}}},{\"type\":\"service-definition\",\"id\":\"3459d24f3ec174b83e1c931ceeb3b417\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-02T02:29:28Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"ruby\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testrubycreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682994568\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"352ab94dabeac31f99c9e3f2736b2276\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T01:48:08Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683596888\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"35820494590b580fdd3b8a7f6f6286da\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-10T11:12:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683717120\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"35bb55af90b03b66ddb4ce3cd81e30b5\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-07T02:36:07Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"ruby\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testrubycreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683426967\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"35c856c8f33c5330512a173a0de46784\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-27T12:09:50Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1682597389\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"business-unit:retail\",\"cost-center:engineering\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"35d5379207051dcdee6844a76ec93ae4\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-06T00:16:28Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683332188\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"38c5e32dbdb3090950e42cb5281708f9\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T11:11:08Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683198667\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"38c6dd1d7ca5b2baecaabc40da79d394\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-03T00:14:55Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1683072894\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"business-unit:retail\",\"cost-center:engineering\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"3981c59989711abe5e5b01cebb2032b2\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T14:05:47Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683641147\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"3aff32a30d6a70d693c7d542651f3ddb\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-02T01:38:32Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682991512\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"3c516161be5bd45d0353c71fe9e29532\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-28T04:21:29Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"typescript\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682655689\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"3f25f057af4c737297a8e111e0a10392\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-11T00:32:37Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basicv2_1-local-1683765154\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"3f48c3e4301f02e80d536b41a071b3f0\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-29T00:18:38Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682727518\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"40abde4c8a026c527b8a6fd7c6a3e4a3\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-05T00:18:47Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683245927\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"425e7b64285a647a08f23b5a77635d26\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-26T19:05:35Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1682535930-updated\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"business-unit:retail\",\"cost-center:engineering\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"4453b9786aa5ca38ba8df1c40751778d\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-30T00:16:30Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1682813788\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"business-unit:retail\",\"cost-center:engineering\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"44bf74fc0f9963103d91d83a62e124f0\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-03T20:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683145380\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"44c95efb4ed6382da18b5d54a91ba7a9\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-30T00:29:53Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basic-local-1682814591\",\"team\":\"E Commerce\",\"contacts\":[{\"name\":\"Support Slack\",\"type\":\"slack\",\"contact\":\"https://www.slack.com/archives/shopping-cart\"},{\"name\":\"Support Email\",\"type\":\"email\",\"contact\":\"team@shopping.com\"}],\"links\":[{\"name\":\"shopping-cart runbook\",\"type\":\"runbook\",\"url\":\"https://runbook/shopping-cart\"},{\"name\":\"shopping-cart source code\",\"type\":\"repo\",\"provider\":\"github\",\"url\":\"http://github/shopping-cart\"},{\"name\":\"shopping-cart architecture\",\"type\":\"doc\",\"provider\":\"gdoc\",\"url\":\"https://google.drive/shopping-cart-architecture\"},{\"name\":\"shopping-cart service Wiki\",\"type\":\"doc\",\"provider\":\"wiki\",\"url\":\"https://wiki/shopping-cart\"}],\"tags\":[\"cost-center:engineering\",\"business-unit:retail\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"}},\"extensions\":{\"datadoghq.com/shopping-cart\":{\"customField\":\"customValue\"}}}}},{\"type\":\"service-definition\",\"id\":\"464752b6f626ebf5f180f6fce72a4493\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-03T01:44:25Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683078265\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"46fc85a44fa927033bde31d06fb9cd11\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-03T01:38:15Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683077895\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"4b1ccb484ff0a9da36c82d01c7fda949\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-27T03:24:34Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"java\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682565874\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"4c85795cd6dab9cd622610080824f375\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-08T12:23:01Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basicv2_1-local-1683548579\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"4cb73b6f18677db8455b1f88bef4deb9\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-03T03:27:51Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"java\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683084471\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"4e0b23019608385dd80ae2a7b1333a35\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-11T04:25:26Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"typescript\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683779126\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"4e1a2f0e0d297f0a76117aef49896b1a\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-04T08:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683188580\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"4e834ce6c692842672559f4e6151b4f0\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-30T12:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682857380\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"4edba31123c86ccfc4f2da6054c28d3f\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-11T00:32:10Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[{\"keyword-location\":\"/properties/contacts/items/$ref/allOf/1/then/properties/contact/pattern\",\"instance-location\":\"/contacts/0/contact\",\"message\":\"does not match pattern 'https://[a-zA-Z0-9_\\\\\\\\-]+.slack\\\\\\\\.com/archives/[a-zA-Z0-9_\\\\\\\\-]+'\"}],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_order-local-1683765128\",\"contacts\":[{\"name\":\"AA\",\"type\":\"slack\",\"contact\":\"AAA\"},{\"name\":\"AA\",\"type\":\"email\",\"contact\":\"AAA@example.com\"},{\"name\":\"BB\",\"type\":\"email\",\"contact\":\"AAA@example.com\"},{\"name\":\"AA\",\"type\":\"email\",\"contact\":\"BBB@example.com\"},{\"name\":\"BB\",\"type\":\"email\",\"contact\":\"BBB@example.com\"}],\"tags\":[\"aaa\",\"bbb\"],\"integrations\":{}}}},{\"type\":\"service-definition\",\"id\":\"522b01d1ef73bf8f1bc4c22c11ada33d\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-11T00:32:17Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basicv2_1-local-1683765134\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"527231dd30e5ae934b91cecbc18085af\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-07T20:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683490980\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"53e52469b7385f9e29fc88e3b8b7b4c9\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-09T04:19:50Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"typescript\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1683605990\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"53eeb82870fb86dd442158c6e44a9c02\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-27T12:23:31Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[{\"keyword-location\":\"/properties/contacts/items/$ref/allOf/1/then/properties/contact/pattern\",\"instance-location\":\"/contacts/0/contact\",\"message\":\"does not match pattern 'https://[a-zA-Z0-9_\\\\\\\\-]+.slack\\\\\\\\.com/archives/[a-zA-Z0-9_\\\\\\\\-]+'\"}],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_order-local-1682598209\",\"contacts\":[{\"name\":\"AA\",\"type\":\"slack\",\"contact\":\"AAA\"},{\"name\":\"AA\",\"type\":\"email\",\"contact\":\"AAA@example.com\"},{\"name\":\"BB\",\"type\":\"email\",\"contact\":\"AAA@example.com\"},{\"name\":\"AA\",\"type\":\"email\",\"contact\":\"BBB@example.com\"},{\"name\":\"BB\",\"type\":\"email\",\"contact\":\"BBB@example.com\"}],\"tags\":[\"aaa\",\"bbb\"],\"integrations\":{}}}},{\"type\":\"service-definition\",\"id\":\"541d84dbae7d3a1fd26ed4533c6094fc\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-27T22:05:48Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682633147\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"5427b4f2d3ad91ce743039e9c8128b66\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-02T20:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683058980\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"54adfb4dd1020445bdb1528b1a592908\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-06T00:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683332580\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"54b17eb2c3929082405b285347010a75\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-08T00:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683505380\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"56ae82b1d71cd8978289889713c9f388\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-03T00:28:13Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[{\"keyword-location\":\"/properties/contacts/items/$ref/allOf/1/then/properties/contact/pattern\",\"instance-location\":\"/contacts/0/contact\",\"message\":\"does not match pattern 'https://[a-zA-Z0-9_\\\\\\\\-]+.slack\\\\\\\\.com/archives/[a-zA-Z0-9_\\\\\\\\-]+'\"}],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_order-local-1683073691\",\"contacts\":[{\"name\":\"AA\",\"type\":\"slack\",\"contact\":\"AAA\"},{\"name\":\"AA\",\"type\":\"email\",\"contact\":\"AAA@example.com\"},{\"name\":\"BB\",\"type\":\"email\",\"contact\":\"AAA@example.com\"},{\"name\":\"AA\",\"type\":\"email\",\"contact\":\"BBB@example.com\"},{\"name\":\"BB\",\"type\":\"email\",\"contact\":\"BBB@example.com\"}],\"tags\":[\"aaa\",\"bbb\"],\"integrations\":{}}}},{\"type\":\"service-definition\",\"id\":\"57a9fc819cc2bffe87abd2854fb2d45f\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-05T20:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1683318180\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"57af0d2150b3832ec38996bec7a632b2\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-05-08T00:18:10Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"tf-testaccdatadogservicedefinition_basicv2_1-local-1683505089\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"service:tag\",\"my:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"587d23978e5ad106d531eca24eef4960\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-28T01:40:15Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"python\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testpythoncreateorupdateservicedefinitionusingschemav2returnscreatedresponse1682646015\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"},{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"5a6a1b221d479e727bd2ab55e2edf5a4\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-29T00:18:38Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_sdk\",\"origin-detail\":\"go\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-testgocreateorupdateservicedefinitionusingschemav21returnscreatedresponse1682727518\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all service definitions returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Definition", + "frozen_at": "2023-04-05T09:45:34.876Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/services/definitions", + "query": [ + [ + "page[number]", + "0" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"service-definition\",\"id\":\"000c4db9ae43787066748b39ad1c3059\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-04-03T20:23:00Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"unknown\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2.1\"},\"schema\":{\"schema-version\":\"v2.1\",\"dd-service\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1680553380\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Architecture\",\"type\":\"doc\",\"provider\":\"Gigoogle drivetHub\",\"url\":\"https://my-runbook\"},{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"},{\"name\":\"Source Code\",\"type\":\"repo\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":{\"service-url\":\"https://my-org.pagerduty.com/service-directory/PMyService\"},\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}},{\"type\":\"service-definition\",\"id\":\"000c83c634df871f80ecbb47fa6b8bcc\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2022-11-17T02:44:15Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"\",\"origin-detail\":\"\",\"warnings\":[],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2\",\"dd-service\":\"service-test-ruby-create_or_update_service_definition_returns_created_response-1668653055\",\"dd-team\":\"my-team\",\"team\":\"my-team\",\"contacts\":[{\"name\":\"Team Email\",\"type\":\"email\",\"contact\":\"contact@datadoghq.com\"}],\"links\":[{\"name\":\"Runbook\",\"type\":\"runbook\",\"url\":\"https://my-runbook\"}],\"repos\":[{\"name\":\"Source Code\",\"provider\":\"GitHub\",\"url\":\"https://github.com/DataDog/schema\"}],\"docs\":[{\"name\":\"Architecture\",\"provider\":\"google drive\",\"url\":\"https://gdrive/mydoc\"}],\"tags\":[\"my:tag\",\"service:tag\"],\"integrations\":{\"pagerduty\":\"https://my-org.pagerduty.com/service-directory/PMyService\",\"opsgenie\":{\"service-url\":\"https://my-org.opsgenie.com/service/123e4567-e89b-12d3-a456-426614174000\",\"region\":\"US\"}},\"extensions\":{\"myorgextension\":\"extensionvalue\"}}}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/services/definitions", + "query": [ + [ + "page[number]", + "1" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"service-definition\",\"id\":\"0059bcab67b74e99cc832ca503019574\",\"attributes\":{\"meta\":{\"last-modified-time\":\"2023-03-02T12:21:20Z\",\"github-html-url\":\"\",\"ingestion-source\":\"api\",\"origin\":\"dd_terraform\",\"origin-detail\":\"\",\"warnings\":[{\"keyword-location\":\"/properties/contacts/items/$ref/allOf/1/then/properties/contact/pattern\",\"instance-location\":\"/contacts/0/contact\",\"message\":\"does not match pattern 'https://[a-zA-Z0-9_\\\\\\\\-]+.slack\\\\\\\\.com/archives/[a-zA-Z0-9_\\\\\\\\-]+'\"},{\"keyword-location\":\"/properties/contacts/items/$ref/allOf/0/then/properties/contact/format\",\"instance-location\":\"/contacts/1/contact\",\"message\":\"'BBB' is not valid 'email'\"},{\"keyword-location\":\"/properties/contacts/items/$ref/allOf/0/then/properties/contact/format\",\"instance-location\":\"/contacts/2/contact\",\"message\":\"'AAA' is not valid 'email'\"},{\"keyword-location\":\"/properties/contacts/items/$ref/allOf/0/then/properties/contact/format\",\"instance-location\":\"/contacts/3/contact\",\"message\":\"'AAA' is not valid 'email'\"},{\"keyword-location\":\"/properties/contacts/items/$ref/allOf/0/then/properties/contact/format\",\"instance-location\":\"/contacts/4/contact\",\"message\":\"'BBB' is not valid 'email'\"}],\"ingested-schema-version\":\"v2\"},\"schema\":{\"schema-version\":\"v2\",\"dd-service\":\"tf-testaccdatadogservicedefinition_order-local-1677759678\",\"team\":\"\",\"contacts\":[{\"name\":\"AA\",\"type\":\"email\",\"contact\":\"AAA\"},{\"name\":\"AA\",\"type\":\"slack\",\"contact\":\"AAA\"},{\"name\":\"BB\",\"type\":\"email\",\"contact\":\"AAA\"},{\"name\":\"AA\",\"type\":\"email\",\"contact\":\"BBB\"},{\"name\":\"BB\",\"type\":\"email\",\"contact\":\"BBB\"}],\"links\":[],\"repos\":[],\"docs\":[],\"tags\":[\"aaa\",\"bbb\"],\"integrations\":{},\"extensions\":{}}}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all service definitions returns \"OK\" response with pagination", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/service-level-objectives.json b/test-server-data/v2/service-level-objectives.json new file mode 100644 index 0000000000..538b8ed984 --- /dev/null +++ b/test-server-data/v2/service-level-objectives.json @@ -0,0 +1,306 @@ +{ + "feature": "Service Level Objectives", + "recordings": [ + { + "feature": "Service Level Objectives", + "frozen_at": "2024-08-29T19:53:50.818Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from_ts": 1721505230, + "interval": "bad-interval", + "query": "slo_type:metric \"SLO Reporting Test\"", + "to_ts": 1724961230 + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/slo/report", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Invalid Argument\",\"detail\":\"bad-interval is not a valid interval\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a new SLO report returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-08-29T19:53:50.962Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from_ts": 1721505230, + "interval": "monthly", + "query": "slo_type:metric \"SLO Reporting Test\"", + "timezone": "America/New_York", + "to_ts": 1724961230 + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/slo/report", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"69cfaa02-6640-11ef-8501-33b2b403f044\",\"type\":\"report_id\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a new SLO report returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-08-29T19:53:51.070Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/slo/report/invalid-report-id/download", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Invalid Argument\",\"detail\":\"invalid report ID: invalid-report-id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get SLO report returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-08-29T19:53:51.158Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/slo/report/2b468c54-f2a7-11ee-b0b4-ffe56bb6ad43/download", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Not Found\",\"detail\":\"report ID not found: 2b468c54-f2a7-11ee-b0b4-ffe56bb6ad43\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get SLO report returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-04-04T17:38:45.610Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/slo/report/9fb2dc2a-ead0-11ee-a174-9fe3a9d7627f/download", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "id,slo_type,name,target,export_error,2023-08-01,2023-09-01,2023-10-01,2023-11-01,2023-12-01,2024-01-01\n" + }, + "headers": { + "content-type": "text/csv" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get SLO report returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-08-29T19:53:51.260Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/slo/report/invalid-report-id/status", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Invalid Argument\",\"detail\":\"invalid report ID: invalid-report-id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get SLO report status returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-08-29T19:53:51.364Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/slo/report/2b468c54-f2a7-11ee-b0b4-ffe56bb6ad43/status", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Not Found\",\"detail\":\"report ID not found: 2b468c54-f2a7-11ee-b0b4-ffe56bb6ad43\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get SLO report status returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Service Level Objectives", + "frozen_at": "2024-08-29T19:53:51.486Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "from_ts": 1723146831, + "interval": "monthly", + "query": "slo_type:metric \"SLO Reporting Test\"", + "to_ts": 1724961231 + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/slo/report", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6a25239c-6640-11ef-943f-83644ac57ee3\",\"type\":\"report_id\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/slo/report/6a25239c-6640-11ef-943f-83644ac57ee3/status", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6a25239c-6640-11ef-943f-83644ac57ee3\",\"type\":\"report_id\",\"attributes\":{\"status\":\"in_progress\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get SLO report status returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/software-catalog.json b/test-server-data/v2/software-catalog.json new file mode 100644 index 0000000000..be4e7327b5 --- /dev/null +++ b/test-server-data/v2/software-catalog.json @@ -0,0 +1,3608 @@ +{ + "feature": "Software Catalog", + "recordings": [ + { + "feature": "Software Catalog", + "frozen_at": "2024-08-27T19:23:58.061Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "apiVersion": "v3", + "datadog": { + "codeLocations": [ + { + "paths": [] + } + ], + "events": [ + {} + ], + "logs": [ + {} + ], + "performanceData": { + "tags": [] + }, + "pipelines": { + "fingerprints": [] + } + }, + "integrations": { + "opsgenie": { + "serviceURL": "https://www.opsgenie.com/service/shopping-cart" + }, + "pagerduty": { + "serviceURL": "https://www.pagerduty.com/service-directory/Pshopping-cart" + } + }, + "kind": "service", + "metadata": { + "additionalOwners": [], + "contacts": [ + { + "contact": "https://slack/", + "type": "slack" + } + ], + "id": "4b163705-23c0-4573-b2fb-f6cea2163fcb", + "inheritFrom": "application:default/myapp", + "links": [ + { + "name": "mylink", + "type": "link", + "url": "https://mylink" + } + ], + "name": "service-testcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1724786638", + "tags": [ + "this:tag", + "that:tag" + ] + }, + "spec": { + "dependsOn": [], + "languages": [] + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/catalog/entity", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"4806b73a-3a45-48bf-bd44-0d68fb5aa96a\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v3\",\"kind\":\"service\",\"name\":\"service-testcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1724786638\",\"namespace\":\"default\",\"tags\":[\"this:tag\",\"that:tag\"]},\"relationships\":{\"schema\":{\"data\":{\"id\":\"4806b73a-3a45-48bf-bd44-0d68fb5aa96a\",\"type\":\"schema\"}}},\"meta\":{\"createdAt\":\"2024-08-27T19:23:58.355389417Z\",\"modifiedAt\":\"2024-08-27T19:23:58.355389228Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}}],\"meta\":{\"count\":1,\"includeCount\":1},\"included\":[{\"id\":\"4806b73a-3a45-48bf-bd44-0d68fb5aa96a\",\"type\":\"schema\",\"attributes\":{\"schema\":{\"apiVersion\":\"v3\",\"kind\":\"service\",\"metadata\":{\"name\":\"service-testcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1724786638\",\"namespace\":\"default\",\"inheritFrom\":\"application:default/myapp\",\"tags\":[\"this:tag\",\"that:tag\"],\"links\":[{\"name\":\"mylink\",\"type\":\"link\",\"url\":\"https://mylink\"}],\"contacts\":[{\"type\":\"slack\",\"contact\":\"https://slack/\"}],\"managed\":{\"origin\":{\"origin\":\"unknown\"},\"ingestionSource\":\"api\",\"createdAt\":\"2024-08-27T19:23:58.355389417Z\",\"modifiedAt\":\"2024-08-27T19:23:58.355389228Z\"}},\"integrations\":{\"pagerduty\":{\"serviceURL\":\"https://www.pagerduty.com/service-directory/Pshopping-cart\"},\"opsgenie\":{\"serviceURL\":\"https://www.opsgenie.com/service/shopping-cart\"}},\"datadog\":{\"performanceData\":{\"tags\":[]},\"events\":[{\"name\":\"\",\"query\":\"\"}],\"logs\":[{\"name\":\"\",\"query\":\"\"}],\"pipelines\":{\"fingerprints\":[]},\"codeLocations\":[{}]},\"spec\":{}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Accepted", + "status": 202 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/catalog/entity/4806b73a-3a45-48bf-bd44-0d68fb5aa96a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create or update software catalog entity using schema v3 returns \"ACCEPTED\" response", + "version": "v2" + }, + { + "feature": "Software Catalog", + "frozen_at": "2024-08-27T19:23:58.769Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/entity", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"f8ade073-2650-413e-b928-42a215208aed\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2\",\"displayName\":\"python-app-checks-enabled\",\"kind\":\"service\",\"name\":\"python-app-checks-enabled\",\"namespace\":\"default\",\"owner\":\"intg-tools-libs\"},\"meta\":{\"createdAt\":\"2022-08-04T20:37:09Z\",\"modifiedAt\":\"2022-08-04T20:37:09Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"589b7754-51a0-4f19-a15c-76bbf35754a5\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2\",\"displayName\":\"python-sample-app-unbleachedsilk\",\"kind\":\"service\",\"name\":\"python-sample-app-unbleachedsilk\",\"namespace\":\"default\",\"owner\":\"intg-tools-libs\",\"tags\":[\"host:isolated-diego-cell-0-270372e1-a8ae-4d3c-9678-41a072dd365c\"]},\"meta\":{\"createdAt\":\"2022-08-04T20:17:04Z\",\"modifiedAt\":\"2022-08-04T20:17:04Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"f2efe356-41df-42ff-a6fc-bd4d55f34fc9\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2\",\"displayName\":\"service-definition-test\",\"kind\":\"service\",\"name\":\"service-definition-test\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-04-18T16:19:17Z\",\"modifiedAt\":\"2023-04-18T16:19:17Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"9e96d4b4-891a-448d-bffb-80af485be269\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-10T14:34:07Z\",\"modifiedAt\":\"2023-10-10T14:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"7d7e2d09-aed1-4d4e-bab1-67822772d005\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-10T18:34:07Z\",\"modifiedAt\":\"2023-10-10T18:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"e43ec654-0b7e-4e56-952d-055c1ee55f10\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-10T22:34:05Z\",\"modifiedAt\":\"2023-10-10T22:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"7c907b5f-0290-4994-9473-9c2b281610ac\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-11T02:34:05Z\",\"modifiedAt\":\"2023-10-11T02:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"65610b17-eb3a-4d30-a4d5-aa6f07e97c0f\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-11T06:34:05Z\",\"modifiedAt\":\"2023-10-11T06:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"5b3bdfa8-a0fd-42ad-8f91-729351d8cdb0\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-11T10:34:06Z\",\"modifiedAt\":\"2023-10-11T10:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"c8ac38df-1b20-4694-8b91-207402695bf7\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-11T14:34:07Z\",\"modifiedAt\":\"2023-10-11T14:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"0fd02e6f-e418-496d-81a5-983537288f5a\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-11T18:34:06Z\",\"modifiedAt\":\"2023-10-11T18:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"ca46437f-4ec4-4867-bd45-c28fbbfd12b2\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-11T22:34:06Z\",\"modifiedAt\":\"2023-10-11T22:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"04dd65fc-1c4a-4584-8686-f9362fdbb25a\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-12T02:34:06Z\",\"modifiedAt\":\"2023-10-12T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"218285aa-f8ca-4af1-80bf-951bc55507a7\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-12T06:34:07Z\",\"modifiedAt\":\"2023-10-12T06:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"a4721af9-cfa7-4e69-84d6-f50fae926500\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-12T10:34:06Z\",\"modifiedAt\":\"2023-10-12T10:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"daa74077-a59e-42f3-ab5f-99855f415062\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-12T14:34:06Z\",\"modifiedAt\":\"2023-10-12T14:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"06af96d0-b3d2-4362-b741-8de1ec8c4368\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-12T18:34:06Z\",\"modifiedAt\":\"2023-10-12T18:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"9e5352fa-3e6d-43c6-8cd0-392c68d8f426\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-12T22:34:06Z\",\"modifiedAt\":\"2023-10-12T22:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"24e56e53-d272-4759-8760-990f5cbcef4b\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-13T02:34:07Z\",\"modifiedAt\":\"2023-10-13T02:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"5b8ad8be-07e7-48e0-b00e-23d8cf310074\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-13T06:34:06Z\",\"modifiedAt\":\"2023-10-13T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"651857aa-8b27-49c3-b222-641badccee04\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-13T10:34:06Z\",\"modifiedAt\":\"2023-10-13T10:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"77c588e8-0495-437c-88ea-c1218ccb63a8\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-13T14:34:07Z\",\"modifiedAt\":\"2023-10-13T14:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"e5e61c7c-20f7-4e06-bcc1-d9c44cf5993f\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-13T18:34:06Z\",\"modifiedAt\":\"2023-10-13T18:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"84ed6d1e-86d5-421f-9ee7-a9e13685d48a\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-13T22:34:07Z\",\"modifiedAt\":\"2023-10-13T22:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"83daf701-3b35-49e0-b256-c499b17b6ec0\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-14T02:34:07Z\",\"modifiedAt\":\"2023-10-14T02:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"5d53586b-d111-49fc-8067-605011c9ae01\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-14T06:34:07Z\",\"modifiedAt\":\"2023-10-14T06:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"48d0846b-9bc4-4dbb-866b-91ad4c9a4678\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-14T10:34:07Z\",\"modifiedAt\":\"2023-10-14T10:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"e9a5ab4f-5c52-4be0-badc-17afaf196b6e\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-14T14:34:07Z\",\"modifiedAt\":\"2023-10-14T14:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"e82021d6-197d-4d71-ab02-4d8ed43c72ab\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-14T18:34:07Z\",\"modifiedAt\":\"2023-10-14T18:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"9334574c-4a56-4e29-95bc-13b59a57861c\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-14T22:34:07Z\",\"modifiedAt\":\"2023-10-14T22:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"3691442d-c7a3-4ac3-8422-134e51b58a5d\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-15T02:34:06Z\",\"modifiedAt\":\"2023-10-15T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"de9bc354-2530-484f-9d45-939058282709\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-15T06:34:06Z\",\"modifiedAt\":\"2023-10-15T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"ed2faa97-3bf0-4494-b244-57b27536337f\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-15T10:34:07Z\",\"modifiedAt\":\"2023-10-15T10:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"6f3061ac-d034-46b2-b3c9-3867493894d3\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-15T14:34:06Z\",\"modifiedAt\":\"2023-10-15T14:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"b6de70be-c6f4-4f79-9d41-9e50bf8ebe9f\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-15T18:34:07Z\",\"modifiedAt\":\"2023-10-15T18:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"60d5fcb5-1015-406d-8803-25d4d070931d\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-15T22:34:05Z\",\"modifiedAt\":\"2023-10-15T22:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"fe4459a9-810a-4b7c-b9b4-b539a27cd565\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-16T02:34:05Z\",\"modifiedAt\":\"2023-10-16T02:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"c053a8f0-a081-40f3-a6e0-3a7c288517c0\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-16T06:34:07Z\",\"modifiedAt\":\"2023-10-16T06:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"9cc7a6c5-de17-43dc-b13c-13895a0b9767\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-16T10:34:07Z\",\"modifiedAt\":\"2023-10-16T10:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"6024d2f3-b627-4c8c-9ef5-62427897e065\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-16T14:34:06Z\",\"modifiedAt\":\"2023-10-16T14:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"c401575c-6ab3-43dc-b572-b13e7356c603\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-16T18:34:07Z\",\"modifiedAt\":\"2023-10-16T18:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"553e8c6b-8850-4061-928c-6865c519a6fb\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-16T22:34:06Z\",\"modifiedAt\":\"2023-10-16T22:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"127ff566-928e-41bb-b9ad-3d0f2f52ded8\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-17T02:34:05Z\",\"modifiedAt\":\"2023-10-17T02:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"dd3b5eac-56e9-4221-a19b-b28795b2a3bc\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-17T06:34:07Z\",\"modifiedAt\":\"2023-10-17T06:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"4aeb388d-1974-4ffe-a957-c63fc417bad9\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-17T10:34:06Z\",\"modifiedAt\":\"2023-10-17T10:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"8694b4a4-f985-47cf-86e5-bb2259d65350\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-17T14:34:06Z\",\"modifiedAt\":\"2023-10-17T14:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"a7c8e246-9ed9-4b3c-bd50-e7e11c674602\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-17T18:34:06Z\",\"modifiedAt\":\"2023-10-17T18:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"8b4baf7c-198a-45e0-95ee-f6effaefaa68\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-17T22:34:06Z\",\"modifiedAt\":\"2023-10-17T22:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"416ea00d-ccd3-4455-ba6b-1ab45f0f9d7b\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-18T02:34:06Z\",\"modifiedAt\":\"2023-10-18T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"dc2005bd-89ae-43de-a1e2-203b0843ecaf\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-18T06:34:06Z\",\"modifiedAt\":\"2023-10-18T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"3108c85b-21c5-4a6e-be10-b666ff2e7834\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-18T10:34:07Z\",\"modifiedAt\":\"2023-10-18T10:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"340d0158-96d6-438c-afcc-25787532ca3b\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-18T14:34:06Z\",\"modifiedAt\":\"2023-10-18T14:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"39be9cb3-b714-4258-a343-44533a7076ae\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-18T18:34:06Z\",\"modifiedAt\":\"2023-10-18T18:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"b1a5a81f-6a98-4bc4-96b8-0601b84259c4\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-18T22:34:07Z\",\"modifiedAt\":\"2023-10-18T22:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"1ba6bc5a-01e6-466e-95bd-cd013932dd5b\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-19T02:34:06Z\",\"modifiedAt\":\"2023-10-19T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"01d2eef5-7c38-4307-ae17-ce444e1a2dd2\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-19T06:34:06Z\",\"modifiedAt\":\"2023-10-19T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"5f67f8b5-315c-43f0-af0a-6d95c8c84395\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-19T10:34:06Z\",\"modifiedAt\":\"2023-10-19T10:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"c57856b1-23d5-4c52-8a77-39e49d6dfb70\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-19T14:34:06Z\",\"modifiedAt\":\"2023-10-19T14:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"95c60741-4455-4994-872e-0fb1a44b79ac\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-19T18:34:06Z\",\"modifiedAt\":\"2023-10-19T18:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"06bac913-d37b-4926-ace2-84c09bdbd628\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697754845\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697754845\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-19T22:34:06Z\",\"modifiedAt\":\"2023-10-19T22:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"c05721af-9057-49f5-8067-0ba96b33f9c6\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697769245\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697769245\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-20T02:34:06Z\",\"modifiedAt\":\"2023-10-20T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"6d3ca41b-c5bb-4aa1-bd6b-6235c3eba2fa\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697783645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697783645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-20T06:34:06Z\",\"modifiedAt\":\"2023-10-20T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"213c1371-9640-4d89-bd17-f03813d7eb5c\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697798045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697798045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-20T10:34:06Z\",\"modifiedAt\":\"2023-10-20T10:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"acedecf4-ffe8-4a08-80b7-e8af3901818a\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697812445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697812445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-20T14:34:06Z\",\"modifiedAt\":\"2023-10-20T14:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"74a81bf2-482e-4376-8390-68140972b568\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697826846\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697826846\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-20T18:34:06Z\",\"modifiedAt\":\"2023-10-20T18:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"44f1d6dc-0ecb-4e02-887e-847bbc8b6491\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697841245\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697841245\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-20T22:34:06Z\",\"modifiedAt\":\"2023-10-20T22:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"ca0c1305-f0c7-48cb-9bc4-1364cd6db0ff\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697855645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697855645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-21T02:34:06Z\",\"modifiedAt\":\"2023-10-21T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"2c83a879-972f-452b-879d-4ec82b38e91a\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697870045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697870045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-21T06:34:06Z\",\"modifiedAt\":\"2023-10-21T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"0124dbaa-c159-4cfe-bce0-2795a36103dc\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697884445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697884445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-21T10:34:06Z\",\"modifiedAt\":\"2023-10-21T10:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"9a2c6fa5-3228-45d7-a6a0-dda51aae10f4\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697898845\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697898845\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-21T14:34:06Z\",\"modifiedAt\":\"2023-10-21T14:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"e7c70656-c2b0-4f5f-b505-5a4c4b18dcd3\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697913245\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697913245\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-21T18:34:06Z\",\"modifiedAt\":\"2023-10-21T18:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"a4bdce64-4ff8-4bd6-b553-f35e43e12952\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697927647\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697927647\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-21T22:34:07Z\",\"modifiedAt\":\"2023-10-21T22:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"96196c9e-81fd-4e43-b84a-e523949b42a5\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697942045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697942045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-22T02:34:06Z\",\"modifiedAt\":\"2023-10-22T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"20814bd0-8d28-4deb-b567-c0ff2fedc5e0\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697956446\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697956446\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-22T06:34:06Z\",\"modifiedAt\":\"2023-10-22T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"e042fb2f-13b6-4300-a867-68b9b2be2274\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697970847\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697970847\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-22T10:34:07Z\",\"modifiedAt\":\"2023-10-22T10:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"fb33f164-2820-4150-90d2-634d36465085\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697985247\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697985247\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-22T14:34:07Z\",\"modifiedAt\":\"2023-10-22T14:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"9a7e57b8-53d5-4a53-b953-348a934f6a44\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697999645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697999645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-22T18:34:06Z\",\"modifiedAt\":\"2023-10-22T18:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"08d07bf5-732c-411e-8c27-b4a4a10a31b2\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698014046\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698014046\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-22T22:34:06Z\",\"modifiedAt\":\"2023-10-22T22:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"7dc86a75-d98c-409c-8c1f-9867841eb81a\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698028445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698028445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-23T02:34:06Z\",\"modifiedAt\":\"2023-10-23T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"9d8f6a21-bcbd-4a36-9057-aaaaf3871893\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698042846\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698042846\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-23T06:34:06Z\",\"modifiedAt\":\"2023-10-23T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"c78f9c37-4799-4753-a917-4b648ff1a7b1\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698057246\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698057246\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-23T10:34:07Z\",\"modifiedAt\":\"2023-10-23T10:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"ced30c99-fdea-4a9e-b797-337f898a285a\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698071645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698071645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-23T14:34:05Z\",\"modifiedAt\":\"2023-10-23T14:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"964aca8c-15a4-472f-af84-2d4b4a807b11\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698086045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698086045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-23T18:34:05Z\",\"modifiedAt\":\"2023-10-23T18:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"b50b7a0a-c658-47be-bafc-7be098edc93f\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698100445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698100445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-23T22:34:06Z\",\"modifiedAt\":\"2023-10-23T22:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"03149e77-7d23-46b2-87f0-ea696041b007\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114846\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114846\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-24T02:34:06Z\",\"modifiedAt\":\"2023-10-24T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"1f306649-b10c-4303-9a97-8ec3136736b6\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698129245\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698129245\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-24T06:34:06Z\",\"modifiedAt\":\"2023-10-24T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"672af237-8295-4789-94bd-a7495db4ec90\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698143645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698143645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-24T10:34:05Z\",\"modifiedAt\":\"2023-10-24T10:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"58dfe56a-217d-4e42-86f5-17f290c01d5d\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698158045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698158045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-24T14:34:05Z\",\"modifiedAt\":\"2023-10-24T14:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"05aeb836-79b2-4438-9e27-cd29169ac861\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698172445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698172445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-24T18:34:05Z\",\"modifiedAt\":\"2023-10-24T18:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"40d1ad0e-207a-4d5d-ba6d-9a0ae7c48dce\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698186845\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698186845\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-24T22:34:05Z\",\"modifiedAt\":\"2023-10-24T22:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"db0393e5-e7b5-41a9-b734-67ffa5ff37b4\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698201246\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698201246\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-25T02:34:06Z\",\"modifiedAt\":\"2023-10-25T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"72238511-e7cb-451c-acd3-8e8c9a811e9f\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698215646\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698215646\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-25T06:34:07Z\",\"modifiedAt\":\"2023-10-25T06:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"8ca9c5bb-b4d2-42c5-862b-f5a36b00c961\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698230046\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698230046\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-25T10:34:06Z\",\"modifiedAt\":\"2023-10-25T10:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"3c437e8a-5712-49f7-a4a1-20d5d83b86a1\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698244445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698244445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-25T14:34:05Z\",\"modifiedAt\":\"2023-10-25T14:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"534643b8-9112-40f8-958d-365e73bae27f\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698258845\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698258845\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-25T18:34:05Z\",\"modifiedAt\":\"2023-10-25T18:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"122190a4-7596-455d-a3ed-9043906ef307\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698273246\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698273246\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-25T22:34:07Z\",\"modifiedAt\":\"2023-10-25T22:34:07Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"dbf59392-d0fe-4b39-adb3-433c100c7ace\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698287645\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698287645\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-26T02:34:06Z\",\"modifiedAt\":\"2023-10-26T02:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"b49c3c54-92ba-438e-a85c-183f268bcb85\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698302045\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698302045\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-26T06:34:06Z\",\"modifiedAt\":\"2023-10-26T06:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"4e93c480-b6db-4f2b-ab3f-de2e62bb8485\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698316445\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698316445\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-26T10:34:05Z\",\"modifiedAt\":\"2023-10-26T10:34:05Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}},{\"id\":\"c4fe68c0-a8ef-4d45-816d-326859643ad1\",\"type\":\"entity\",\"attributes\":{\"apiVersion\":\"v2.2\",\"displayName\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698330845\",\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698330845\",\"namespace\":\"default\",\"owner\":\"my-team\",\"tags\":[\"my:tag\",\"service:tag\"]},\"meta\":{\"createdAt\":\"2023-10-26T14:34:06Z\",\"modifiedAt\":\"2023-10-26T14:34:06Z\",\"ingestionSource\":\"api\",\"origin\":\"unknown\"}}],\"meta\":{\"count\":100,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/entity?page%5Blimit%5D=100\\u0026page%5Boffset%5D=0\",\"next\":\"/api/v2/catalog/entity?page%5Blimit%5D=100\\u0026page%5Boffset%5D=100\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of entities returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Software Catalog", + "frozen_at": "2025-05-23T13:41:46.286Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"api:default/09ad2c36-8144-44e6-b56b-7322db102812:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"09ad2c36-8144-44e6-b56b-7322db102812\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.095161Z\",\"modifiedAt\":\"2025-04-01T15:30:40.095161Z\",\"source\":\"schema\",\"definedBy\":\"api:default/09ad2c36-8144-44e6-b56b-7322db102812\"}},{\"id\":\"api:default/262b9bbc-57c3-43a3-bb07-737ec859443b:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"262b9bbc-57c3-43a3-bb07-737ec859443b\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.093483Z\",\"modifiedAt\":\"2025-04-01T15:30:40.093483Z\",\"source\":\"schema\",\"definedBy\":\"api:default/262b9bbc-57c3-43a3-bb07-737ec859443b\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/DELETE:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"DELETE:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143276Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143276Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/GET:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143272Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143272Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/GET:/:test_invalid_endpoints\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.14326Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143261Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/POST:/driving_periods/export\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"POST:/driving_periods/export\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.14327Z\",\"modifiedAt\":\"2025-04-01T15:30:40.14327Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/POST:/:test_invalid_endpoints\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"POST:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143268Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143268Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/PUT:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"PUT:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143274Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143274Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/a55d0361-e30b-474c-bb7f-0ed64200019b:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"a55d0361-e30b-474c-bb7f-0ed64200019b\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.09429Z\",\"modifiedAt\":\"2025-04-01T15:30:40.09429Z\",\"source\":\"schema\",\"definedBy\":\"api:default/a55d0361-e30b-474c-bb7f-0ed64200019b\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/DELETE:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"DELETE:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122239Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122239Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/GET:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122235Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122235Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/GET:/:test_invalid_endpoints\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122222Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122222Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/POST:/driving_periods/export\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"POST:/driving_periods/export\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122233Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122233Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/POST:/:test_invalid_endpoints\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"POST:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122232Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122232Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/PUT:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"PUT:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122237Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122237Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/c38a4497-b585-4d53-87ef-9d046b3c50e6:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"c38a4497-b585-4d53-87ef-9d046b3c50e6\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143616Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143616Z\",\"source\":\"schema\",\"definedBy\":\"api:default/c38a4497-b585-4d53-87ef-9d046b3c50e6\"}},{\"id\":\"api:default/e1a66da7-e357-429d-9ae3-b47ca66c17f5:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"e1a66da7-e357-429d-9ae3-b47ca66c17f5\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.095468Z\",\"modifiedAt\":\"2025-04-01T15:30:40.095468Z\",\"source\":\"schema\",\"definedBy\":\"api:default/e1a66da7-e357-429d-9ae3-b47ca66c17f5\"}},{\"id\":\"api:default/e97ad87c-93ca-42c5-a2bc-199471ffc5c4:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"e97ad87c-93ca-42c5-a2bc-199471ffc5c4\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.094732Z\",\"modifiedAt\":\"2025-04-01T15:30:40.094732Z\",\"source\":\"schema\",\"definedBy\":\"api:default/e97ad87c-93ca-42c5-a2bc-199471ffc5c4\"}},{\"id\":\"endpoint:default/DELETE:/driving_periods/{id}:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"DELETE:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143277Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143277Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/DELETE:/driving_periods/{id}:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"DELETE:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122239Z\",\"modifiedAt\":\"2025-04-01T15:30:40.12224Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/09ad2c36-8144-44e6-b56b-7322db102812\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"09ad2c36-8144-44e6-b56b-7322db102812\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.095165Z\",\"modifiedAt\":\"2025-04-01T15:30:40.095165Z\",\"source\":\"schema\",\"definedBy\":\"api:default/09ad2c36-8144-44e6-b56b-7322db102812\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/262b9bbc-57c3-43a3-bb07-737ec859443b\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"262b9bbc-57c3-43a3-bb07-737ec859443b\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.09349Z\",\"modifiedAt\":\"2025-04-01T15:30:40.09349Z\",\"source\":\"schema\",\"definedBy\":\"api:default/262b9bbc-57c3-43a3-bb07-737ec859443b\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/a55d0361-e30b-474c-bb7f-0ed64200019b\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"a55d0361-e30b-474c-bb7f-0ed64200019b\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.094296Z\",\"modifiedAt\":\"2025-04-01T15:30:40.094296Z\",\"source\":\"schema\",\"definedBy\":\"api:default/a55d0361-e30b-474c-bb7f-0ed64200019b\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/c38a4497-b585-4d53-87ef-9d046b3c50e6\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"c38a4497-b585-4d53-87ef-9d046b3c50e6\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143619Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143619Z\",\"source\":\"schema\",\"definedBy\":\"api:default/c38a4497-b585-4d53-87ef-9d046b3c50e6\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/e1a66da7-e357-429d-9ae3-b47ca66c17f5\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"e1a66da7-e357-429d-9ae3-b47ca66c17f5\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.095471Z\",\"modifiedAt\":\"2025-04-01T15:30:40.095471Z\",\"source\":\"schema\",\"definedBy\":\"api:default/e1a66da7-e357-429d-9ae3-b47ca66c17f5\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/e97ad87c-93ca-42c5-a2bc-199471ffc5c4\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"e97ad87c-93ca-42c5-a2bc-199471ffc5c4\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.094736Z\",\"modifiedAt\":\"2025-04-01T15:30:40.094736Z\",\"source\":\"schema\",\"definedBy\":\"api:default/e97ad87c-93ca-42c5-a2bc-199471ffc5c4\"}},{\"id\":\"endpoint:default/GET:/driving_periods/{id}:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143273Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143273Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/GET:/driving_periods/{id}:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122236Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122236Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"endpoint:default/GET:/:test_invalid_endpoints:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143267Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143267Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/GET:/:test_invalid_endpoints:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.12223Z\",\"modifiedAt\":\"2025-04-01T15:30:40.12223Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"endpoint:default/POST:/driving_periods/export:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"POST:/driving_periods/export\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143271Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143271Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/POST:/driving_periods/export:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"POST:/driving_periods/export\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122234Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122234Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"endpoint:default/POST:/:test_invalid_endpoints:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"POST:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143269Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143269Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/POST:/:test_invalid_endpoints:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"POST:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122232Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122233Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"endpoint:default/PUT:/driving_periods/{id}:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"PUT:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143275Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143275Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/PUT:/driving_periods/{id}:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"PUT:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122238Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122238Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"service:default/python-app-checks-enabled:RelationTypeOwnedBy:team:default/intg-tools-libs\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"python-app-checks-enabled\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"intg-tools-libs\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.353023Z\",\"modifiedAt\":\"2023-12-04T22:00:14.353023Z\",\"source\":\"schema\",\"definedBy\":\"service:default/python-app-checks-enabled\"}},{\"id\":\"service:default/python-sample-app-unbleachedsilk:RelationTypeOwnedBy:team:default/intg-tools-libs\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"python-sample-app-unbleachedsilk\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"intg-tools-libs\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.353028Z\",\"modifiedAt\":\"2023-12-04T22:00:14.353028Z\",\"source\":\"schema\",\"definedBy\":\"service:default/python-sample-app-unbleachedsilk\"}},{\"id\":\"service:default/serviceA:RelationTypeDependencyOf:service:default/shopping-cart\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"serviceA\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependencyOf\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.35159Z\",\"modifiedAt\":\"2024-10-01T20:11:19.35159Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"service:default/serviceA:RelationTypeDependencyOf:service:default/shopping-cart-yee\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"serviceA\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependencyOf\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.173696Z\",\"modifiedAt\":\"2024-08-27T19:57:31.173696Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}},{\"id\":\"service:default/serviceB:RelationTypeDependencyOf:service:default/shopping-cart\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"serviceB\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependencyOf\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.351592Z\",\"modifiedAt\":\"2024-10-01T20:11:19.351592Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"service:default/serviceB:RelationTypeDependencyOf:service:default/shopping-cart-yee\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"serviceB\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependencyOf\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.173698Z\",\"modifiedAt\":\"2024-08-27T19:57:31.173698Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}},{\"id\":\"service:default/service-definition-test:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-definition-test\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.353034Z\",\"modifiedAt\":\"2023-12-04T22:00:14.353034Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-definition-test\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747856275:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747856275\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T19:37:56.342084Z\",\"modifiedAt\":\"2025-05-21T19:37:56.342084Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747856275\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355644Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355644Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355648Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355648Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355651Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355651Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355655Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355655Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355659Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355659Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355662Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355662Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355667Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355667Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35567Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35567Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355674Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355674Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355678Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355678Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355681Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355681Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355685Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355685Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355689Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355688Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355692Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355692Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355696Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355696Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3557Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355699Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355703Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355703Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355707Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355707Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355711Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355711Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355715Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355714Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355718Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355718Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355721Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355721Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355725Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355725Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355728Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355728Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355732Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355732Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355736Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355735Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355739Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355739Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355743Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355743Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355747Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355747Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355751Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35575Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355754Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355754Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355758Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355758Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355761Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355761Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355835Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355835Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355839Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355839Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355842Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355842Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355846Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355846Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35585Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35585Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355853Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355853Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355857Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355857Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35586Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35586Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355864Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355864Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355867Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355867Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355871Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355871Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355875Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355875Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355879Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355879Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355883Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355883Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355886Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355886Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355891Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355891Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355894Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355894Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355898Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355898Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355902Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355902Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355905Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355905Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355909Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355908Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355912Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355912Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355915Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355915Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445\"}}],\"meta\":{\"count\":100,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=100\\u0026page%5Boffset%5D=0\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=100\\u0026page%5Boffset%5D=100\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of entity relations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Software Catalog", + "frozen_at": "2025-05-23T14:58:05.829Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"api:default/09ad2c36-8144-44e6-b56b-7322db102812:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"09ad2c36-8144-44e6-b56b-7322db102812\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.095161Z\",\"modifiedAt\":\"2025-04-01T15:30:40.095161Z\",\"source\":\"schema\",\"definedBy\":\"api:default/09ad2c36-8144-44e6-b56b-7322db102812\"}},{\"id\":\"api:default/262b9bbc-57c3-43a3-bb07-737ec859443b:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"262b9bbc-57c3-43a3-bb07-737ec859443b\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.093483Z\",\"modifiedAt\":\"2025-04-01T15:30:40.093483Z\",\"source\":\"schema\",\"definedBy\":\"api:default/262b9bbc-57c3-43a3-bb07-737ec859443b\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/DELETE:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"DELETE:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143276Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143276Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/GET:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143272Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143272Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/GET:/:test_invalid_endpoints\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.14326Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143261Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/POST:/driving_periods/export\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"POST:/driving_periods/export\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.14327Z\",\"modifiedAt\":\"2025-04-01T15:30:40.14327Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/POST:/:test_invalid_endpoints\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"POST:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143268Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143268Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed:RelationTypeHasPart:endpoint:default/PUT:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"PUT:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143274Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143274Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"api:default/a55d0361-e30b-474c-bb7f-0ed64200019b:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"a55d0361-e30b-474c-bb7f-0ed64200019b\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.09429Z\",\"modifiedAt\":\"2025-04-01T15:30:40.09429Z\",\"source\":\"schema\",\"definedBy\":\"api:default/a55d0361-e30b-474c-bb7f-0ed64200019b\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/DELETE:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"DELETE:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122239Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122239Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/GET:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122235Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122235Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/GET:/:test_invalid_endpoints\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122222Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122222Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/POST:/driving_periods/export\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"POST:/driving_periods/export\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122233Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122233Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/POST:/:test_invalid_endpoints\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"POST:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122232Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122232Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e:RelationTypeHasPart:endpoint:default/PUT:/driving_periods/{id}\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"PUT:/driving_periods/{id}\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122237Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122237Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"api:default/c38a4497-b585-4d53-87ef-9d046b3c50e6:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"c38a4497-b585-4d53-87ef-9d046b3c50e6\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143616Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143616Z\",\"source\":\"schema\",\"definedBy\":\"api:default/c38a4497-b585-4d53-87ef-9d046b3c50e6\"}},{\"id\":\"api:default/e1a66da7-e357-429d-9ae3-b47ca66c17f5:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"e1a66da7-e357-429d-9ae3-b47ca66c17f5\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.095468Z\",\"modifiedAt\":\"2025-04-01T15:30:40.095468Z\",\"source\":\"schema\",\"definedBy\":\"api:default/e1a66da7-e357-429d-9ae3-b47ca66c17f5\"}},{\"id\":\"api:default/e97ad87c-93ca-42c5-a2bc-199471ffc5c4:RelationTypeHasPart:endpoint:default/GET:/api/my-api\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"api\",\"name\":\"e97ad87c-93ca-42c5-a2bc-199471ffc5c4\",\"namespace\":\"default\"},\"to\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.094732Z\",\"modifiedAt\":\"2025-04-01T15:30:40.094732Z\",\"source\":\"schema\",\"definedBy\":\"api:default/e97ad87c-93ca-42c5-a2bc-199471ffc5c4\"}},{\"id\":\"endpoint:default/DELETE:/driving_periods/{id}:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"DELETE:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143277Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143277Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/DELETE:/driving_periods/{id}:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"DELETE:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122239Z\",\"modifiedAt\":\"2025-04-01T15:30:40.12224Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=0\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=20\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "20" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/09ad2c36-8144-44e6-b56b-7322db102812\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"09ad2c36-8144-44e6-b56b-7322db102812\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.095165Z\",\"modifiedAt\":\"2025-04-01T15:30:40.095165Z\",\"source\":\"schema\",\"definedBy\":\"api:default/09ad2c36-8144-44e6-b56b-7322db102812\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/262b9bbc-57c3-43a3-bb07-737ec859443b\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"262b9bbc-57c3-43a3-bb07-737ec859443b\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.09349Z\",\"modifiedAt\":\"2025-04-01T15:30:40.09349Z\",\"source\":\"schema\",\"definedBy\":\"api:default/262b9bbc-57c3-43a3-bb07-737ec859443b\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/a55d0361-e30b-474c-bb7f-0ed64200019b\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"a55d0361-e30b-474c-bb7f-0ed64200019b\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.094296Z\",\"modifiedAt\":\"2025-04-01T15:30:40.094296Z\",\"source\":\"schema\",\"definedBy\":\"api:default/a55d0361-e30b-474c-bb7f-0ed64200019b\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/c38a4497-b585-4d53-87ef-9d046b3c50e6\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"c38a4497-b585-4d53-87ef-9d046b3c50e6\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143619Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143619Z\",\"source\":\"schema\",\"definedBy\":\"api:default/c38a4497-b585-4d53-87ef-9d046b3c50e6\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/e1a66da7-e357-429d-9ae3-b47ca66c17f5\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"e1a66da7-e357-429d-9ae3-b47ca66c17f5\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.095471Z\",\"modifiedAt\":\"2025-04-01T15:30:40.095471Z\",\"source\":\"schema\",\"definedBy\":\"api:default/e1a66da7-e357-429d-9ae3-b47ca66c17f5\"}},{\"id\":\"endpoint:default/GET:/api/my-api:RelationTypePartsOf:api:default/e97ad87c-93ca-42c5-a2bc-199471ffc5c4\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/api/my-api\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"e97ad87c-93ca-42c5-a2bc-199471ffc5c4\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.094736Z\",\"modifiedAt\":\"2025-04-01T15:30:40.094736Z\",\"source\":\"schema\",\"definedBy\":\"api:default/e97ad87c-93ca-42c5-a2bc-199471ffc5c4\"}},{\"id\":\"endpoint:default/GET:/driving_periods/{id}:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143273Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143273Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/GET:/driving_periods/{id}:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122236Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122236Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"endpoint:default/GET:/:test_invalid_endpoints:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143267Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143267Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/GET:/:test_invalid_endpoints:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"GET:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.12223Z\",\"modifiedAt\":\"2025-04-01T15:30:40.12223Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"endpoint:default/POST:/driving_periods/export:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"POST:/driving_periods/export\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143271Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143271Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/POST:/driving_periods/export:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"POST:/driving_periods/export\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122234Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122234Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"endpoint:default/POST:/:test_invalid_endpoints:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"POST:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143269Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143269Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/POST:/:test_invalid_endpoints:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"POST:/:test_invalid_endpoints\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122232Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122233Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"endpoint:default/PUT:/driving_periods/{id}:RelationTypePartsOf:api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"PUT:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"64177bd0-4796-41d3-be5a-79d68f5080ed\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.143275Z\",\"modifiedAt\":\"2025-04-01T15:30:40.143275Z\",\"source\":\"schema\",\"definedBy\":\"api:default/64177bd0-4796-41d3-be5a-79d68f5080ed\"}},{\"id\":\"endpoint:default/PUT:/driving_periods/{id}:RelationTypePartsOf:api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"endpoint\",\"name\":\"PUT:/driving_periods/{id}\",\"namespace\":\"default\"},\"to\":{\"kind\":\"api\",\"name\":\"bc2e071d-4e6f-43da-a37c-74ad81d3205e\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-04-01T15:30:40.122238Z\",\"modifiedAt\":\"2025-04-01T15:30:40.122238Z\",\"source\":\"schema\",\"definedBy\":\"api:default/bc2e071d-4e6f-43da-a37c-74ad81d3205e\"}},{\"id\":\"service:default/python-app-checks-enabled:RelationTypeOwnedBy:team:default/intg-tools-libs\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"python-app-checks-enabled\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"intg-tools-libs\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.353023Z\",\"modifiedAt\":\"2023-12-04T22:00:14.353023Z\",\"source\":\"schema\",\"definedBy\":\"service:default/python-app-checks-enabled\"}},{\"id\":\"service:default/python-sample-app-unbleachedsilk:RelationTypeOwnedBy:team:default/intg-tools-libs\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"python-sample-app-unbleachedsilk\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"intg-tools-libs\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.353028Z\",\"modifiedAt\":\"2023-12-04T22:00:14.353028Z\",\"source\":\"schema\",\"definedBy\":\"service:default/python-sample-app-unbleachedsilk\"}},{\"id\":\"service:default/serviceA:RelationTypeDependencyOf:service:default/shopping-cart\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"serviceA\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependencyOf\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.35159Z\",\"modifiedAt\":\"2024-10-01T20:11:19.35159Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"service:default/serviceA:RelationTypeDependencyOf:service:default/shopping-cart-yee\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"serviceA\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependencyOf\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.173696Z\",\"modifiedAt\":\"2024-08-27T19:57:31.173696Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=20\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=40\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=0\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "40" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/serviceB:RelationTypeDependencyOf:service:default/shopping-cart\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"serviceB\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependencyOf\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.351592Z\",\"modifiedAt\":\"2024-10-01T20:11:19.351592Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"service:default/serviceB:RelationTypeDependencyOf:service:default/shopping-cart-yee\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"serviceB\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependencyOf\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.173698Z\",\"modifiedAt\":\"2024-08-27T19:57:31.173698Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}},{\"id\":\"service:default/service-definition-test:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-definition-test\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.353034Z\",\"modifiedAt\":\"2023-12-04T22:00:14.353034Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-definition-test\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747856275:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747856275\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T19:37:56.342084Z\",\"modifiedAt\":\"2025-05-21T19:37:56.342084Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747856275\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355644Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355644Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355648Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355648Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355651Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355651Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355655Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355655Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355659Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355659Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355662Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355662Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355667Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355667Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35567Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35567Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355674Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355674Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355678Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355678Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355681Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355681Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355685Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355685Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355689Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355688Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355692Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355692Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355696Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355696Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3557Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355699Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=40\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=60\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=20\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "60" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355703Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355703Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355707Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355707Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355711Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355711Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355715Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355714Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355718Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355718Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355721Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355721Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355725Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355725Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355728Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355728Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355732Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355732Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355736Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355735Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355739Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355739Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355743Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355743Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355747Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355747Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355751Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35575Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355754Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355754Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355758Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355758Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355761Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355761Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355835Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355835Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355839Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355839Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355842Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355842Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=60\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=80\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=40\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "80" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355846Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355846Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35585Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35585Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355853Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355853Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355857Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355857Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35586Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35586Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355864Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355864Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355867Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355867Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355871Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355871Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355875Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355875Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355879Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355879Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355883Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355883Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355886Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355886Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355891Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355891Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355894Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355894Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355898Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355898Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355902Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355902Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355905Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355905Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355909Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355908Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355912Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355912Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355915Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355915Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=80\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=100\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=60\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "100" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697754845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697754845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355919Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355919Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697754845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697769245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697769245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355922Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355922Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697769245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697783645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697783645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355926Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355926Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697783645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697798045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697798045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35593Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35593Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697798045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697812445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697812445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355933Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355933Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697812445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697826846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697826846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355937Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355937Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697826846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697841245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697841245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35594Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35594Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697841245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697855645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697855645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355944Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355944Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697855645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697870045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697870045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355948Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355948Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697870045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697884445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697884445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355952Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355951Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697884445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697898845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697898845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355955Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355955Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697898845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697913245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697913245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355959Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355959Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697913245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697927647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697927647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355962Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355962Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697927647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697942045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697942045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355967Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355966Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697942045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697956446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697956446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35597Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35597Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697956446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697970847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697970847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355974Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355974Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697970847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697985247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697985247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355977Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355977Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697985247\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697999645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697999645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355981Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355981Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697999645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698014046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698014046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355985Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355985Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698014046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698028445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698028445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355988Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355988Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698028445\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=100\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=120\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=80\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "120" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698042846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698042846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355992Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355992Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698042846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698057246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698057246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355995Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355995Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698057246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698071645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698071645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355999Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355999Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698071645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698086045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698086045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356003Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356003Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698086045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698100445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698100445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356007Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356007Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698100445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356011Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356011Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698129245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698129245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356014Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356014Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698129245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698143645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698143645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356018Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356018Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698143645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698158045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698158045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356021Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356021Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698158045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698172445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698172445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356025Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356025Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698172445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698186845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698186845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356028Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356028Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698186845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698201246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698201246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356032Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356032Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698201246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698215646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698215646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356036Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356036Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698215646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698230046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698230046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356039Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356039Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698230046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698244445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698244445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356044Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356044Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698244445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698258845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698258845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356047Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356047Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698258845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698273246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698273246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356051Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356051Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698273246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698287645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698287645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356054Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356054Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698287645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698302045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698302045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356058Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356058Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698302045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698316445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698316445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356062Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356062Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698316445\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=120\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=140\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=100\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "140" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698330845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698330845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356065Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356065Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698330845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698345245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698345245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356069Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356069Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698345245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698359645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698359645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356072Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356072Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698359645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698374045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698374045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356077Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356077Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698374045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698388445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698388445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356081Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356081Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698388445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698402845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698402845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356084Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356084Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698402845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698417245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698417245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356088Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356088Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698417245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698431645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698431645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356091Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356091Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698431645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698446045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698446045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356095Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356095Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698446045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698460445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698460445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356098Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356098Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698460445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698474845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698474845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356102Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356102Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698474845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698489246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698489246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356105Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356105Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698489246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698503645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698503645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356109Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356109Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698503645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698518045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698518045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356112Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356112Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698518045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698532445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698532445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356116Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356116Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698532445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698546846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698546846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35612Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35612Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698546846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698561245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698561245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356124Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356124Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698561245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698575645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698575645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356128Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356128Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698575645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698590047:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698590047\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356131Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356131Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698590047\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698604447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698604447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356135Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356135Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698604447\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=140\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=160\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=120\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "160" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698618845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698618845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356138Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356138Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698618845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698633246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698633246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356142Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356142Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698633246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698647646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698647646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356145Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356145Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698647646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698662047:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698662047\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356149Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356149Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698662047\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698676445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698676445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356152Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356152Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698676445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698690846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698690846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356156Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356156Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698690846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698705245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698705245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35616Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35616Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698705245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356163Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356163Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698734045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698734045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356167Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356167Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698734045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698748446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698748446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356171Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356171Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698748446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698762845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698762845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356174Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356174Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698762845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698777246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698777246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356178Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356178Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698777246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698791645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698791645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356182Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356182Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698791645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698806046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698806046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356185Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356185Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698806046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698820446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698820446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356189Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356189Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698820446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698834846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698834846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356192Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356192Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698834846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698849245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698849245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356207Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356207Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698849245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698863646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698863646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35621Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35621Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698863646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698878045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698878045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356214Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356214Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698878045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698892446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698892446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356217Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356217Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698892446\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=160\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=180\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=140\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "180" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698906846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698906846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356221Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356221Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698906846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698921245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698921245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356225Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356224Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698921245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698935645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698935645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356228Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356228Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698935645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698950045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698950045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356232Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356232Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698950045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698964445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698964445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356235Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356235Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698964445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698978847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698978847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356239Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356239Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698978847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698993245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698993245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356243Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356243Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698993245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699007646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699007646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356246Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356246Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699007646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699022045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699022045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35625Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35625Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699022045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699036445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699036445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356254Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356254Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699036445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699050846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699050846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356257Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356257Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699050846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699065246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699065246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356261Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356261Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699065246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699079645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699079645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356264Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356264Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699079645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699094045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699094045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356268Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356268Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699094045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699108446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699108446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356272Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356272Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699108446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699122846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699122846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356275Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356275Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699122846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699137245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699137245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356279Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356279Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699137245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356284Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356284Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699166046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699166046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356288Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356288Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699166046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699180447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699180447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356292Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356292Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699180447\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=180\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=200\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=160\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "200" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699194846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699194846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356296Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356295Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699194846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699209247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699209247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356299Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356299Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699209247\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699223645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699223645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356303Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356303Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699223645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699238046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699238046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356306Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356306Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699238046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699252446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699252446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35631Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35631Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699252446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699266845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699266845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356313Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356313Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699266845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699281246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699281246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356317Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356317Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699281246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699295646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699295646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356321Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356321Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699295646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699310045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699310045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356325Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356324Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699310045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699324446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699324446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356328Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356328Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699324446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699338845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699338845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356332Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356332Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699338845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699353245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699353245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356335Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356335Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699353245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699367646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699367646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356339Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356339Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699367646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699382047:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699382047\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356342Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356342Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699382047\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699396445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699396445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356346Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356346Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699396445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699410847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699410847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35635Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35635Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699410847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699425245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699425245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356354Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356354Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699425245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699439646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699439646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356357Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356357Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699439646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699454047:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699454047\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356362Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356362Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699454047\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699468447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699468447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356365Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356365Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699468447\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=200\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=220\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=180\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "220" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699482845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699482845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356369Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356369Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699482845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699497245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699497245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356372Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356372Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699497245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699511646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699511646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356376Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356376Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699511646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699526045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699526045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35638Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35638Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699526045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699540446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699540446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356383Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356383Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699540446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699554845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699554845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356387Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356387Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699554845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699569245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699569245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35639Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35639Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699569245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699583645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699583645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356394Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356394Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699583645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699598046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699598046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356398Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356397Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699598046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699612445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699612445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356401Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356401Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699612445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699626846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699626846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356405Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356405Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699626846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699641245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699641245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356408Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356408Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699641245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699655646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699655646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356412Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356412Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699655646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356415Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356415Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699684445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699684445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356419Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356419Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699684445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699698846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699698846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356422Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356422Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699698846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699713245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699713245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356426Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356426Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699713245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699727646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699727646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356429Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356429Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699727646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699742046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699742046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356433Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356433Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699742046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699756447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699756447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356437Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356437Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699756447\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=220\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=240\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=200\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "240" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699770845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699770845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356441Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356441Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699770845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699785246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699785246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356444Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356444Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699785246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699799645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699799645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356448Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356448Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699799645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699814046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699814046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356452Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356451Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699814046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699828446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699828446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356455Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356455Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699828446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356459Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356459Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699857245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699857245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356462Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356462Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699857245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699871645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699871645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356466Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356466Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699871645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699886045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699886045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356469Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356469Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699886045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699900445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699900445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356473Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356473Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699900445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699914846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699914846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356477Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356476Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699914846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699929245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699929245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35648Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35648Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699929245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699943647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699943647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356484Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356484Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699943647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699958046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699958046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356488Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356488Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699958046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699972445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699972445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356491Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356491Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699972445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699986846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699986846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356495Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356495Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699986846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700001246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700001246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356498Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356498Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700001246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700015645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700015645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356502Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356502Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700015645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700030046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700030046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356505Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356505Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700030046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700044447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700044447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356509Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356509Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700044447\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=240\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=260\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=220\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "260" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700058845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700058845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356513Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356513Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700058845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700073247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700073247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356517Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356517Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700073247\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700087646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700087646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35652Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35652Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700087646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700102047:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700102047\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356524Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356524Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700102047\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700116445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700116445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356527Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356527Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700116445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700130845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700130845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356531Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356531Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700130845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700145245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700145245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356535Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356534Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700145245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700159645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700159645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356538Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356538Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700159645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700174046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700174046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356542Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356542Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700174046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700188445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700188445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356545Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356545Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700188445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700202846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700202846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356549Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356549Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700202846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700217245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700217245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356553Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356553Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700217245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700231645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700231645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356556Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356556Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700231645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700246045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700246045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35656Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35656Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700246045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700260446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700260446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356563Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356563Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700260446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356567Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356567Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700289246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700289246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35657Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35657Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700289246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700303645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700303645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356574Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356574Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700303645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700318046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700318046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356578Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356578Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700318046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700332445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700332445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356581Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356581Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700332445\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=260\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=280\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=240\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "280" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700346845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700346845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356585Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356585Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700346845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700361245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700361245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356589Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356589Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700361245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700375645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700375645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356593Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356593Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700375645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700390045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700390045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356597Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356596Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700390045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700404445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700404445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3566Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3566Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700404445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700418847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700418847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356604Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356604Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700418847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700433246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700433246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356608Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356608Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700433246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700447645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700447645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356611Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356611Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700447645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700462045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700462045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356616Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356616Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700462045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700476445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700476445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356619Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356619Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700476445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700490847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700490847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356623Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356623Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700490847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700505246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700505246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356626Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356626Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700505246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700519645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700519645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35663Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35663Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700519645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700534045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700534045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356634Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356633Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700534045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700548447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700548447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356637Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356637Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700548447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700562845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700562845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356641Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356641Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700562845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700577245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700577245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356679Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356679Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700577245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700591645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700591645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356682Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356682Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700591645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700606045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700606045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356686Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356686Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700606045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700620445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700620445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35669Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356689Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700620445\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=280\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=300\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=260\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "300" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700634846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700634846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356694Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356693Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700634846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700649245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700649245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356697Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356697Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700649245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700663646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700663646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356703Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356703Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700663646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700678047:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700678047\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356706Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356706Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700678047\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700692445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700692445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35671Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35671Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700692445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356713Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356713Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700721245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700721245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356717Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356717Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700721245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700735645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700735645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356721Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35672Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700735645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700750045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700750045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356724Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356724Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700750045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700764445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700764445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356728Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356728Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700764445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700778846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700778846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356731Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356731Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700778846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700793246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700793246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356735Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356735Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700793246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700807646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700807646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356739Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356739Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700807646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700822047:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700822047\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356742Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356742Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700822047\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700836446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700836446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356746Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356746Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700836446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700850845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700850845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35675Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35675Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700850845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700865246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700865246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356754Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356754Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700865246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700879645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700879645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356757Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356757Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700879645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700894046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700894046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356761Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356761Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700894046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700908445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700908445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356764Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356764Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700908445\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=300\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=320\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=280\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "320" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700937246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700937246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356768Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356768Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700937246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700951645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700951645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356772Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356772Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700951645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700966046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700966046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356775Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356775Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700966046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700980447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700980447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356779Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356779Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700980447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700994846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700994846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356783Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356783Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700994846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701009246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701009246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356787Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356786Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701009246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701023645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701023645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356791Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356791Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701023645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701038045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701038045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356795Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356795Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701038045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701052446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701052446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356798Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356798Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701052446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701066845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701066845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356802Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356802Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701066845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701081245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701081245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356805Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356805Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701081245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701095646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701095646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356809Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356809Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701095646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356812Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356812Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701124447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701124447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356816Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356816Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701124447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35682Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35682Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701153245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701153245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356823Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356823Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701153245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701167645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701167645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356827Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356827Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701167645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701182045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701182045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35683Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35683Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701182045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701196445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701196445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356834Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356834Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701196445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701210845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701210845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356837Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356837Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701210845\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=320\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=340\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=300\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "340" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701225246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701225246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356841Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356841Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701225246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701239645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701239645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356844Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356844Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701239645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701254045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701254045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356848Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356848Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701254045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701268447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701268447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356851Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356851Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701268447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701282846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701282846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356963Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356963Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701282846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701297245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701297245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356967Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356967Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701297245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356971Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356971Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701326045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701326045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356974Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356974Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701326045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701340445:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701340445\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356978Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356978Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701340445\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701354845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701354845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356981Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356981Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701354845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701369245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701369245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356985Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356985Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701369245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701383647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701383647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356988Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356988Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701383647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701398045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701398045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356992Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356992Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701398045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701412446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701412446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356995Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356995Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701412446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701426845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701426845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356999Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356999Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701426845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701441247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701441247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357003Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357003Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701441247\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701455645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701455645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357006Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357006Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701455645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701470046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701470046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35701Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35701Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701470046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701498847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701498847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357014Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357014Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701498847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701513245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701513245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357018Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357017Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701513245\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=340\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=360\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=320\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "360" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701527646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701527646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357021Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357021Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701527646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701542046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701542046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357025Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357025Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701542046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701556447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701556447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357028Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357028Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701556447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357032Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357032Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701585247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701585247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357036Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357036Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701585247\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701599646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701599646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35704Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35704Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701599646\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701614045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701614045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357044Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357044Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701614045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701628446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701628446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357047Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357047Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701628446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701642846:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701642846\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357051Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357051Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701642846\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701657245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701657245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357055Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357055Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701657245\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701671645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701671645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357059Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357059Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701671645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701686045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701686045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357063Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357063Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701686045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701700446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701700446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357067Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357066Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701700446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701714847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701714847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35707Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35707Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701714847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701729246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701729246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:34:06.55852Z\",\"modifiedAt\":\"2023-12-04T22:34:06.55852Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701729246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701743645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701743645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T02:34:06.030314Z\",\"modifiedAt\":\"2023-12-05T02:34:06.030314Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701743645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701758046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701758046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T06:34:07.178174Z\",\"modifiedAt\":\"2023-12-05T06:34:07.178174Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701758046\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701772446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701772446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T10:34:06.414949Z\",\"modifiedAt\":\"2023-12-05T10:34:06.414949Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701772446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701786847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701786847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T14:34:07.713439Z\",\"modifiedAt\":\"2023-12-05T14:34:07.713439Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701786847\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701801247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701801247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T18:34:07.720139Z\",\"modifiedAt\":\"2023-12-05T18:34:07.720139Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701801247\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=360\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=380\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=340\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "380" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701815647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701815647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T22:34:07.67982Z\",\"modifiedAt\":\"2023-12-05T22:34:07.67982Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701815647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701830045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701830045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T02:34:06.057017Z\",\"modifiedAt\":\"2023-12-06T02:34:06.057017Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701830045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701844447:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701844447\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T06:34:08.188014Z\",\"modifiedAt\":\"2023-12-06T06:34:08.188014Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701844447\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701858845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701858845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T10:34:06.002143Z\",\"modifiedAt\":\"2023-12-06T10:34:06.002143Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701858845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701873246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701873246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T14:34:07.12089Z\",\"modifiedAt\":\"2023-12-06T14:34:07.12089Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701873246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701887645:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701887645\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T18:34:06.031483Z\",\"modifiedAt\":\"2023-12-06T18:34:06.031483Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701887645\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902045:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902045\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T22:34:05.992153Z\",\"modifiedAt\":\"2023-12-06T22:34:05.992153Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902045\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701916446:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701916446\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T02:34:07.140515Z\",\"modifiedAt\":\"2023-12-07T02:34:07.140515Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701916446\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701930845:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701930845\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T06:34:06.013751Z\",\"modifiedAt\":\"2023-12-07T06:34:06.01375Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701930845\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701945246:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701945246\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T10:34:07.162732Z\",\"modifiedAt\":\"2023-12-07T10:34:07.162732Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701945246\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701959647:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701959647\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T14:34:07.678005Z\",\"modifiedAt\":\"2023-12-07T14:34:07.678005Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701959647\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744848891:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744848891\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T00:18:46.651954Z\",\"modifiedAt\":\"2025-04-17T00:18:46.651954Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744848891\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744863291:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744863291\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T04:23:33.71889Z\",\"modifiedAt\":\"2025-04-17T04:23:33.71889Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744863291\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744877691:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744877691\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T08:18:51.905451Z\",\"modifiedAt\":\"2025-04-17T08:18:51.905452Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744877691\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744892091:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744892091\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T12:19:35.776208Z\",\"modifiedAt\":\"2025-04-17T12:19:35.776208Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744892091\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744906491:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744906491\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T16:20:25.773682Z\",\"modifiedAt\":\"2025-04-17T16:20:25.773682Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744906491\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744920891:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744920891\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T20:19:11.270057Z\",\"modifiedAt\":\"2025-04-17T20:19:11.270057Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744920891\"}},{\"id\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744935291:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744935291\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-18T00:19:55.012263Z\",\"modifiedAt\":\"2025-04-18T00:19:55.012263Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744935291\"}},{\"id\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696537819:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696537819\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.359907Z\",\"modifiedAt\":\"2023-12-04T22:00:14.359907Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696537819\"}},{\"id\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696617871:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696617871\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.359911Z\",\"modifiedAt\":\"2023-12-04T22:00:14.359911Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696617871\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=380\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=400\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=360\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "400" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697145210:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697145210\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.359914Z\",\"modifiedAt\":\"2023-12-04T22:00:14.359914Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697145210\"}},{\"id\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699302050:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699302050\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.359918Z\",\"modifiedAt\":\"2023-12-04T22:00:14.359918Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699302050\"}},{\"id\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1711550927:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1711550927\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2024-03-27T14:48:47.977055Z\",\"modifiedAt\":\"2024-03-27T14:48:47.977055Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1711550927\"}},{\"id\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747157416:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747157416\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-13T17:30:16.381228Z\",\"modifiedAt\":\"2025-05-13T17:30:16.381228Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747157416\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696983224:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696983224\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360596Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360596Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696983224\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697069672:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697069672\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3606Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3606Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697069672\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697156018:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697156018\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360604Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360604Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697156018\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229060:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229060\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360608Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360608Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229060\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697242435:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697242435\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360611Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360611Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697242435\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697328821:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697328821\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360615Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360615Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697328821\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697415234:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697415234\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360619Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360619Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697415234\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490258:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490258\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360623Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360623Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490258\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697501628:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697501628\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360627Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360626Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697501628\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697588099:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697588099\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36063Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36063Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697588099\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697674569:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697674569\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360634Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360634Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697674569\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697760866:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697760866\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360638Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360638Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697760866\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697847393:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697847393\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360642Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360642Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697847393\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697933716:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697933716\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360646Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360646Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697933716\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698020081:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698020081\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36065Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36065Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698020081\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698106524:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698106524\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360655Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360655Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698106524\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=400\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=420\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=380\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "420" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698192932:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698192932\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360661Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36066Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698192932\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698279228:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698279228\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360665Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360665Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698279228\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698365756:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698365756\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360669Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360669Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698365756\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698452055:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698452055\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360673Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360673Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698452055\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698538390:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698538390\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360677Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360677Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698538390\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698624718:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698624718\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36068Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36068Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698624718\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698711127:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698711127\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360684Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360684Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698711127\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698797685:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698797685\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360688Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360688Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698797685\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698884043:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698884043\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360692Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360692Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698884043\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698970401:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698970401\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360696Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360695Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698970401\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699056933:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699056933\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360699Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360699Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699056933\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699143332:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699143332\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360703Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360703Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699143332\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699229612:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699229612\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360706Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360706Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699229612\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699316029:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699316029\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36071Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36071Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699316029\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369308:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369308\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360713Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360713Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369308\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369703:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369703\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360717Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360717Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369703\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699370185:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699370185\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360721Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36072Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699370185\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699402551:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699402551\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360726Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360726Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699402551\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699446950:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699446950\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36073Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36073Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699446950\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699451777:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699451777\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360735Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360735Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699451777\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=420\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=440\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=400\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "440" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699488795:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699488795\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360741Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360741Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699488795\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699547532:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699547532\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360745Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360745Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699547532\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699575232:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699575232\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360748Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360748Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699575232\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699661712:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699661712\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360752Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360752Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699661712\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699747912:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699747912\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360755Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360755Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699747912\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699834363:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699834363\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360759Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360759Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699834363\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699920707:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699920707\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360762Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360762Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699920707\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700007162:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700007162\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360766Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360766Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700007162\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700093470:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700093470\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36077Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36077Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700093470\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700179890:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700179890\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360773Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360773Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700179890\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700229065:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700229065\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360777Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360777Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700229065\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700266376:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700266376\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36078Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36078Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700266376\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700352681:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700352681\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360784Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360784Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700352681\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700439126:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700439126\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360787Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360787Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700439126\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700525574:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700525574\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360791Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360791Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700525574\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700611896:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700611896\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360795Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360795Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700611896\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700698304:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700698304\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360798Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360798Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700698304\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700784721:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700784721\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360802Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360802Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700784721\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700871143:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700871143\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360807Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360807Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700871143\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700957508:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700957508\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360812Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360812Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700957508\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=440\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=460\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=420\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "460" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701043891:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701043891\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360818Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360817Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701043891\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701130284:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701130284\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360823Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360822Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701130284\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701216672:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701216672\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360826Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360826Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701216672\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701303228:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701303228\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36083Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36083Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701303228\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701389533:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701389533\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360833Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360833Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701389533\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701475899:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701475899\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360837Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360837Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701475899\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701562291:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701562291\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36084Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36084Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701562291\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701648727:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701648727\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360844Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360844Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701648727\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701735124:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701735124\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T00:12:04.463416Z\",\"modifiedAt\":\"2023-12-05T00:12:04.463416Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701735124\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701821497:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701821497\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T00:11:37.188159Z\",\"modifiedAt\":\"2023-12-06T00:11:37.188159Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701821497\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701907913:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701907913\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T00:11:53.816879Z\",\"modifiedAt\":\"2023-12-07T00:11:53.816879Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701907913\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745108304:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745108304\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-20T00:18:25.056818Z\",\"modifiedAt\":\"2025-04-20T00:18:25.056818Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745108304\"}},{\"id\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745713112:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745713112\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-27T00:18:32.526583Z\",\"modifiedAt\":\"2025-04-27T00:18:32.526583Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745713112\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747549338:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747549338\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-18T06:22:18.261651Z\",\"modifiedAt\":\"2025-05-18T06:22:18.261651Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747549338\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747635556:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747635556\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T06:19:16.929208Z\",\"modifiedAt\":\"2025-05-19T06:19:16.929208Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747635556\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747808417:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747808417\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T06:20:17.718776Z\",\"modifiedAt\":\"2025-05-21T06:20:17.718776Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747808417\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696994388:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696994388\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361927Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361927Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696994388\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697080782:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697080782\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36193Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36193Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697080782\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697167365:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697167365\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361934Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361934Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697167365\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229081:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229081\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361937Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361937Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229081\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=460\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=480\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=440\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "480" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697253920:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697253920\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361941Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361941Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697253920\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697339995:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697339995\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361944Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361944Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697339995\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697426354:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697426354\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361948Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361948Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697426354\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490524:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490524\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361951Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361951Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490524\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697513105:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697513105\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361955Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361955Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697513105\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697599467:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697599467\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361959Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361959Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697599467\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697656828:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697656828\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361962Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361962Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697656828\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697685860:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697685860\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361966Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361966Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697685860\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697723031:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697723031\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361969Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361969Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697723031\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697771921:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697771921\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361973Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361973Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697771921\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697858261:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697858261\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361976Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361976Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697858261\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697944867:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697944867\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36198Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36198Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697944867\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698031377:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698031377\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361984Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361983Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698031377\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698117582:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698117582\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361987Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361987Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698117582\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698204134:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698204134\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361991Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361991Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698204134\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698290693:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698290693\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361994Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361994Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698290693\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698376927:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698376927\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361999Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361999Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698376927\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698463056:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698463056\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362003Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362003Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698463056\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698722492:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698722492\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362006Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362006Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698722492\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698808911:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698808911\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36201Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36201Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698808911\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=480\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=500\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=460\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "500" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698895097:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698895097\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362014Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362014Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698895097\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698981893:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698981893\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362017Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362017Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698981893\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699068192:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699068192\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362021Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362021Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699068192\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699154192:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699154192\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362024Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362024Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699154192\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699241039:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699241039\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362028Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362028Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699241039\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699326992:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699326992\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362031Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362031Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699326992\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699413919:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699413919\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362035Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362035Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699413919\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699462016:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699462016\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362039Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362039Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699462016\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699499779:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699499779\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362043Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362042Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699499779\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699546103:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699546103\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362047Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362047Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699546103\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699548245:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699548245\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362052Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362052Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699548245\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699586488:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699586488\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362057Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362057Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699586488\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699672920:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699672920\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362062Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362062Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699672920\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699758984:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699758984\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362066Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362065Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699758984\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699845788:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699845788\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362069Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362069Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699845788\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699932046:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699932046\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362073Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362073Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699932046\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700018448:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700018448\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362076Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362076Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700018448\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700104648:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700104648\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362081Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36208Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700104648\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700161474:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700161474\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362084Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362084Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700161474\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700163472:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700163472\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362088Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362088Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700163472\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=500\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=520\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=480\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "520" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700165039:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700165039\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362091Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362091Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700165039\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700166959:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700166959\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362095Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362095Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700166959\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700191527:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700191527\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362098Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362098Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700191527\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700235069:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700235069\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362102Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362102Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700235069\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700239667:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700239667\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362105Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362105Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700239667\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700243928:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700243928\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362109Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362109Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700243928\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700247114:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700247114\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362112Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362112Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700247114\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700277533:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700277533\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362116Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362116Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700277533\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700363919:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700363919\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362121Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362121Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700363919\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700450543:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700450543\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362124Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362124Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700450543\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700536589:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700536589\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362128Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362128Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700536589\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700622987:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700622987\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362131Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362131Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700622987\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700709582:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700709582\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362135Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362135Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700709582\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700795989:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700795989\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362138Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362138Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700795989\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700882466:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700882466\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362142Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362142Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700882466\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700968553:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700968553\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362145Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362145Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700968553\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701055441:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701055441\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362149Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362149Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701055441\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701123115:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701123115\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362153Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362153Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701123115\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701141938:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701141938\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362158Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362157Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701141938\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701227730:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701227730\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362161Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362161Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701227730\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=520\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=540\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=500\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "540" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701314402:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701314402\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362165Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362165Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701314402\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701400665:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701400665\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362169Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362169Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701400665\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701486978:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701486978\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362172Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362172Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701486978\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701660226:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701660226\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362176Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362176Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701660226\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701746618:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701746618\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T03:23:38.584859Z\",\"modifiedAt\":\"2023-12-05T03:23:38.584858Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701746618\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701832969:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701832969\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T03:22:50.002958Z\",\"modifiedAt\":\"2023-12-06T03:22:50.002958Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701832969\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701919484:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701919484\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T03:24:44.385513Z\",\"modifiedAt\":\"2023-12-07T03:24:44.385513Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701919484\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744870702:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744870702\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T06:23:52.436625Z\",\"modifiedAt\":\"2025-04-17T06:23:52.436626Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744870702\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744956500:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744956500\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-18T06:08:20.347785Z\",\"modifiedAt\":\"2025-04-18T06:08:20.347785Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744956500\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745042777:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745042777\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-19T06:06:17.964038Z\",\"modifiedAt\":\"2025-04-19T06:06:17.964038Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745042777\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745120760:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745120760\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-20T03:46:00.712082Z\",\"modifiedAt\":\"2025-04-20T03:46:00.712082Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745120760\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745389397:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745389397\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-23T06:23:17.684569Z\",\"modifiedAt\":\"2025-04-23T06:23:17.684569Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745389397\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745475378:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745475378\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-24T06:16:18.834709Z\",\"modifiedAt\":\"2025-04-24T06:16:18.834709Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745475378\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745561537:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745561537\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-25T06:12:17.647037Z\",\"modifiedAt\":\"2025-04-25T06:12:17.647038Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745561537\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745647758:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745647758\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-26T06:09:18.5525Z\",\"modifiedAt\":\"2025-04-26T06:09:18.5525Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745647758\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745734037:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745734037\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-27T06:07:17.877362Z\",\"modifiedAt\":\"2025-04-27T06:07:17.877362Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745734037\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745820857:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745820857\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-28T06:14:18.090977Z\",\"modifiedAt\":\"2025-04-28T06:14:18.090977Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745820857\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746166338:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746166338\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-02T06:12:18.598575Z\",\"modifiedAt\":\"2025-05-02T06:12:18.598575Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746166338\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746339438:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746339438\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-04T06:17:18.544455Z\",\"modifiedAt\":\"2025-05-04T06:17:18.544455Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746339438\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746425778:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746425778\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-05T06:16:18.670304Z\",\"modifiedAt\":\"2025-05-05T06:16:18.670304Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746425778\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=540\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=560\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=520\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "560" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746511818:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746511818\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-06T06:10:18.862645Z\",\"modifiedAt\":\"2025-05-06T06:10:18.862645Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746511818\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746598219:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746598219\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-07T06:10:19.357221Z\",\"modifiedAt\":\"2025-05-07T06:10:19.357221Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746598219\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746685037:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746685037\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-08T06:17:18.226538Z\",\"modifiedAt\":\"2025-05-08T06:17:18.226538Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746685037\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746771317:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746771317\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-09T06:15:17.775335Z\",\"modifiedAt\":\"2025-05-09T06:15:17.775335Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746771317\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746857357:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746857357\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-10T06:09:18.126221Z\",\"modifiedAt\":\"2025-05-10T06:09:18.126221Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746857357\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746944177:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746944177\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-11T06:16:18.201356Z\",\"modifiedAt\":\"2025-05-11T06:16:18.201356Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746944177\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747030579:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747030579\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-12T06:16:19.572314Z\",\"modifiedAt\":\"2025-05-12T06:16:19.572314Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747030579\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747117397:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747117397\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-13T06:23:18.113668Z\",\"modifiedAt\":\"2025-05-13T06:23:18.113668Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747117397\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747290259:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747290259\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-15T06:24:19.934504Z\",\"modifiedAt\":\"2025-05-15T06:24:19.934504Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747290259\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747376420:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747376420\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-16T06:20:20.692338Z\",\"modifiedAt\":\"2025-05-16T06:20:20.692339Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747376420\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747549338:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747549338\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-18T06:22:18.463537Z\",\"modifiedAt\":\"2025-05-18T06:22:18.463537Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747549338\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747635556:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747635556\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T06:19:17.075839Z\",\"modifiedAt\":\"2025-05-19T06:19:17.07584Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747635556\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747808417:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747808417\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T06:20:17.898263Z\",\"modifiedAt\":\"2025-05-21T06:20:17.898263Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747808417\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747549337:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747549337\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-18T06:22:18.057139Z\",\"modifiedAt\":\"2025-05-18T06:22:18.057139Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747549337\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747635556:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747635556\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T06:19:16.773774Z\",\"modifiedAt\":\"2025-05-19T06:19:16.773774Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747635556\"}},{\"id\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747808417:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747808417\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T06:20:17.565003Z\",\"modifiedAt\":\"2025-05-21T06:20:17.565003Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747808417\"}},{\"id\":\"service:default/service-testjavacreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747549347:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747549347\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-18T06:22:27.584041Z\",\"modifiedAt\":\"2025-05-18T06:22:27.584041Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747549347\"}},{\"id\":\"service:default/service-testjavacreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747635565:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747635565\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-19T06:19:25.549689Z\",\"modifiedAt\":\"2025-05-19T06:19:25.54969Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747635565\"}},{\"id\":\"service:default/service-testjavacreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747808426:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747808426\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-21T06:20:26.854747Z\",\"modifiedAt\":\"2025-05-21T06:20:26.854747Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747808426\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696988048:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696988048\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363661Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363661Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696988048\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=560\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=580\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=540\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "580" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697074137:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697074137\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363665Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363665Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697074137\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697160381:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697160381\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363668Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363668Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697160381\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697161902:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697161902\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363672Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363672Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697161902\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247006:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247006\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363675Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363675Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247006\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247992:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247992\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363679Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363679Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247992\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697333611:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697333611\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363682Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363682Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697333611\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697334277:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697334277\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363686Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363686Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697334277\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420268:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420268\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36369Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36369Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420268\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420654:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420654\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363693Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363693Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420654\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697506107:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697506107\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363697Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363697Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697506107\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697507176:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697507176\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3637Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3637Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697507176\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697592585:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697592585\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363704Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363704Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697592585\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697593419:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697593419\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363708Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363708Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697593419\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697617783:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697617783\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363711Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363711Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697617783\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697618568:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697618568\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363715Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363715Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697618568\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697679226:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697679226\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363718Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363718Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697679226\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697680347:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697680347\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363721Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363721Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697680347\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697765552:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697765552\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363725Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363725Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697765552\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697766043:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697766043\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363729Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363729Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697766043\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852057:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852057\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363732Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363732Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852057\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=580\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=600\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=560\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "600" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852101:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852101\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363737Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363737Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852101\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697938204:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697938204\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36374Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36374Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697938204\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697939567:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697939567\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363744Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363744Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697939567\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698024394:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698024394\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363748Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363747Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698024394\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698025915:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698025915\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363751Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363751Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698025915\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698111110:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698111110\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363755Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363755Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698111110\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698197695:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698197695\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363758Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363758Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698197695\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698198134:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698198134\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363762Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363762Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698198134\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284191:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284191\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363766Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363766Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284191\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284539:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284539\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363769Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363769Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284539\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698370564:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698370564\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363773Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363773Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698370564\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698371164:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698371164\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363777Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363777Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698371164\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698456914:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698456914\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363781Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363781Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698456914\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698457493:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698457493\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363785Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363785Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698457493\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698544200:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698544200\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363788Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363788Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698544200\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698629629:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698629629\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363792Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363792Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698629629\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698715628:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698715628\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363796Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363796Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698715628\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698802666:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698802666\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363799Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363799Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698802666\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698803060:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698803060\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363803Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363803Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698803060\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698888587:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698888587\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363806Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363806Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698888587\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=600\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=620\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=580\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "620" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698974885:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698974885\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36381Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36381Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698974885\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699061281:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699061281\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363815Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363815Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699061281\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699062185:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699062185\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363819Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363819Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699062185\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148205:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148205\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363823Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363823Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148205\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148923:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148923\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363826Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363826Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148923\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234336:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234336\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36383Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36383Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234336\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234734:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234734\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363834Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363834Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234734\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699320998:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699320998\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363837Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363837Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699320998\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699321663:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699321663\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363841Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363841Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699321663\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699406987:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699406987\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363844Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363844Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699406987\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699407395:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699407395\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363848Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363848Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699407395\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699493589:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699493589\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363852Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363852Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699493589\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699494388:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699494388\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363855Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363855Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699494388\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699579573:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699579573\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363859Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363859Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699579573\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699580654:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699580654\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363862Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363862Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699580654\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670247:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670247\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363866Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363866Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670247\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699752867:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699752867\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36387Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36387Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699752867\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699839842:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699839842\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363874Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363873Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699839842\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699925945:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699925945\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363877Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363877Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699925945\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700011857:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700011857\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363881Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363881Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700011857\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=620\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=640\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=600\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "640" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700012740:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700012740\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363884Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363884Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700012740\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700098430:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700098430\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363888Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363888Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700098430\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700099173:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700099173\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363892Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363892Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700099173\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700184778:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700184778\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363896Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363896Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700184778\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700185555:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700185555\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3639Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3639Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700185555\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700230832:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700230832\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363903Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363903Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700230832\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700271819:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700271819\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363907Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363907Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700271819\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700272287:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700272287\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363911Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36391Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700272287\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700357839:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700357839\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363914Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363914Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700357839\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444149:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444149\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363917Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363917Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444149\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444610:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444610\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363921Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363921Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444610\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700485178:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700485178\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363924Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363924Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700485178\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700530735:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700530735\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363928Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363928Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700530735\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700531500:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700531500\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363932Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363932Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700531500\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617030:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617030\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363936Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363935Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617030\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617963:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617963\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363939Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363939Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617963\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703037:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703037\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363943Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363943Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703037\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703483:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703483\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363947Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363947Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703483\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700789232:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700789232\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36395Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36395Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700789232\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700790001:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700790001\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363954Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363954Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700790001\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=640\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=660\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=620\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "660" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700876346:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700876346\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363958Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363958Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700876346\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700877054:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700877054\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363961Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363961Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700877054\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962464:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962464\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363965Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363965Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962464\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962962:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962962\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36397Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36397Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962962\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701049150:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701049150\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363974Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363973Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701049150\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701050249:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701050249\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363977Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363977Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701050249\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701135309:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701135309\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363981Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363981Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701135309\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701136606:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701136606\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363984Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363984Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701136606\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701221450:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701221450\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363988Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363988Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701221450\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701222258:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701222258\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363991Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363991Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701222258\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701307677:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701307677\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363995Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363995Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701307677\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701308809:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701308809\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363998Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363998Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701308809\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701394579:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701394579\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364002Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364002Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701394579\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701395150:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701395150\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364006Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364006Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701395150\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701480741:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701480741\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36401Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36401Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701480741\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701481714:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701481714\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364013Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364013Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701481714\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567049:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567049\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364017Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364017Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567049\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567759:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567759\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36402Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36402Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567759\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653628:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653628\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364024Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364024Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653628\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653977:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653977\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364028Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364028Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653977\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=660\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=680\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=640\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "680" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701740207:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701740207\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T01:36:47.551402Z\",\"modifiedAt\":\"2023-12-05T01:36:47.551402Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701740207\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701741435:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701741435\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T01:57:15.761197Z\",\"modifiedAt\":\"2023-12-05T01:57:15.761197Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701741435\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826621:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826621\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T01:37:01.40959Z\",\"modifiedAt\":\"2023-12-06T01:37:01.40959Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826621\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826858:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826858\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T01:40:58.924041Z\",\"modifiedAt\":\"2023-12-06T01:40:58.92404Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826858\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701912542:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701912542\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T01:29:02.249459Z\",\"modifiedAt\":\"2023-12-07T01:29:02.249459Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701912542\"}},{\"id\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701913557:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701913557\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T01:45:57.68912Z\",\"modifiedAt\":\"2023-12-07T01:45:57.68912Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701913557\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696990903:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696990903\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365216Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365216Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696990903\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697051252:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697051252\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365219Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365219Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697051252\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697077324:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697077324\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365223Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365223Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697077324\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697163905:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697163905\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365226Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365226Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697163905\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697249771:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697249771\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36523Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36523Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697249771\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697336369:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697336369\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365234Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365233Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697336369\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697422837:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697422837\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365238Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365238Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697422837\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697509291:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697509291\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365242Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365242Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697509291\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697595493:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697595493\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365245Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365245Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697595493\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682097:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682097\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365249Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365249Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682097\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697768469:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697768469\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365252Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365252Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697768469\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697854881:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697854881\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365256Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365256Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697854881\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697941199:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697941199\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365259Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365259Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697941199\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698027587:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698027587\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365263Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365263Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698027587\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=680\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=700\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=660\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "700" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114213:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114213\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365266Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365266Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114213\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698200239:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698200239\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36527Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36527Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698200239\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698286706:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698286706\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365273Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365273Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698286706\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698373353:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698373353\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365277Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365277Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698373353\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698459790:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698459790\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365281Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365281Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698459790\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698547744:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698547744\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365285Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365285Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698547744\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698634091:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698634091\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365288Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365288Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698634091\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719003:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719003\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365292Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365292Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719003\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698805366:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698805366\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365295Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365295Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698805366\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698891677:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698891677\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365299Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365299Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698891677\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698977893:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698977893\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365303Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365303Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698977893\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699064611:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699064611\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365306Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365306Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699064611\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151233:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151233\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36531Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36531Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151233\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699237539:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699237539\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365315Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365315Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699237539\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699323545:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699323545\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365319Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365319Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699323545\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699409923:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699409923\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365322Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365322Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699409923\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699496326:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699496326\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365326Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365326Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699496326\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699582688:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699582688\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36533Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36533Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699582688\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699628784:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699628784\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365333Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365333Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699628784\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670342:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670342\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365337Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365337Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670342\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=700\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=720\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=680\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "720" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699755853:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699755853\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36534Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36534Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699755853\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842048:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842048\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365344Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365344Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842048\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699928414:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699928414\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365347Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365347Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699928414\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700014978:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700014978\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365351Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365351Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700014978\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700101415:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700101415\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365354Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365354Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700101415\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700187989:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700187989\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365358Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365358Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700187989\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274033:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274033\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365362Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365362Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274033\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700360543:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700360543\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365365Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365365Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700360543\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700446938:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700446938\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365369Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365369Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700446938\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700533368:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700533368\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365373Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365373Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700533368\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700619824:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700619824\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365377Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365376Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700619824\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706075:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706075\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36538Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36538Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706075\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700792366:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700792366\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365395Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365395Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700792366\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700878700:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700878700\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365399Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365398Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700878700\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700965634:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700965634\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365403Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365403Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700965634\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701051778:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701051778\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365406Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365406Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701051778\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138448:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138448\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36541Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36541Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138448\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701224784:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701224784\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365414Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365414Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701224784\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311228:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311228\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365418Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365418Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311228\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701397457:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701397457\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365421Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365421Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701397457\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=720\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=740\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=700\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "740" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701483882:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701483882\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365425Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365425Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701483882\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570137:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570137\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365429Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365429Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570137\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701656544:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701656544\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365433Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365433Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701656544\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701742922:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701742922\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T02:22:02.142812Z\",\"modifiedAt\":\"2023-12-05T02:22:02.142812Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701742922\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701829382:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701829382\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T02:23:02.159007Z\",\"modifiedAt\":\"2023-12-06T02:23:02.159006Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701829382\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701915733:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701915733\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T02:22:13.78403Z\",\"modifiedAt\":\"2023-12-07T02:22:13.784029Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701915733\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744868598:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744868598\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T05:43:19.290208Z\",\"modifiedAt\":\"2025-04-17T05:43:19.290208Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744868598\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744954884:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744954884\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-18T05:41:25.282827Z\",\"modifiedAt\":\"2025-04-18T05:41:25.282827Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744954884\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745038992:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745038992\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-19T05:03:12.524892Z\",\"modifiedAt\":\"2025-04-19T05:03:12.524892Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745038992\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745473640:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745473640\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-24T05:47:20.399766Z\",\"modifiedAt\":\"2025-04-24T05:47:20.399766Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745473640\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745991918:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745991918\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-30T05:45:18.670052Z\",\"modifiedAt\":\"2025-04-30T05:45:18.670052Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745991918\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746075012:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746075012\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-01T04:50:12.935426Z\",\"modifiedAt\":\"2025-05-01T04:50:12.935427Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746075012\"}},{\"id\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747115779:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747115779\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-13T05:56:19.809473Z\",\"modifiedAt\":\"2025-05-13T05:56:19.809473Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747115779\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747545395:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747545395\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-18T05:16:35.660726Z\",\"modifiedAt\":\"2025-05-18T05:16:35.660726Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747545395\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747631752:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747631752\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T05:15:53.159953Z\",\"modifiedAt\":\"2025-05-19T05:15:53.159953Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747631752\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747718164:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747718164\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-20T05:16:04.505869Z\",\"modifiedAt\":\"2025-05-20T05:16:04.505869Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747718164\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747804577:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747804577\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T05:16:18.134672Z\",\"modifiedAt\":\"2025-05-21T05:16:18.134672Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747804577\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747891258:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747891258\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-22T05:20:59.385333Z\",\"modifiedAt\":\"2025-05-22T05:20:59.385333Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747891258\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747977587:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747977587\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-23T05:19:47.847903Z\",\"modifiedAt\":\"2025-05-23T05:19:47.847903Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747977587\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744866861:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744866861\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T05:18:43.86943Z\",\"modifiedAt\":\"2025-04-17T05:18:43.86943Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744866861\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=740\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=760\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=720\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "760" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744953457:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744953457\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-18T05:17:38.583639Z\",\"modifiedAt\":\"2025-04-18T05:17:38.583639Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744953457\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745039803:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745039803\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-19T05:16:43.756739Z\",\"modifiedAt\":\"2025-04-19T05:16:43.75674Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745039803\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745126064:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745126064\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-20T05:14:24.428661Z\",\"modifiedAt\":\"2025-04-20T05:14:24.428662Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745126064\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745212652:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745212652\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-21T05:17:32.678699Z\",\"modifiedAt\":\"2025-04-21T05:17:32.678699Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745212652\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745298868:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745298868\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-22T05:14:28.667035Z\",\"modifiedAt\":\"2025-04-22T05:14:28.667035Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745298868\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745385300:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745385300\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-23T05:15:00.410458Z\",\"modifiedAt\":\"2025-04-23T05:15:00.410458Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745385300\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745471891:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745471891\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-24T05:18:12.715615Z\",\"modifiedAt\":\"2025-04-24T05:18:12.715615Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745471891\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745558103:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745558103\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-25T05:15:03.557958Z\",\"modifiedAt\":\"2025-04-25T05:15:03.557958Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745558103\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745644751:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745644751\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-26T05:19:12.063094Z\",\"modifiedAt\":\"2025-04-26T05:19:12.063094Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745644751\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745730878:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745730878\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-27T05:14:38.548414Z\",\"modifiedAt\":\"2025-04-27T05:14:38.548415Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745730878\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745817417:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745817417\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-28T05:16:58.187856Z\",\"modifiedAt\":\"2025-04-28T05:16:58.187856Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745817417\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745990120:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745990120\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-30T05:15:20.366908Z\",\"modifiedAt\":\"2025-04-30T05:15:20.366908Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745990120\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746076823:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746076823\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-01T05:20:24.293172Z\",\"modifiedAt\":\"2025-05-01T05:20:24.293172Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746076823\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746162968:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746162968\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-02T05:16:08.773502Z\",\"modifiedAt\":\"2025-05-02T05:16:08.773502Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746162968\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746249599:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746249599\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-03T05:20:00.322051Z\",\"modifiedAt\":\"2025-05-03T05:20:00.322051Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746249599\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746335694:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746335694\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-04T05:14:54.563549Z\",\"modifiedAt\":\"2025-05-04T05:14:54.563549Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746335694\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746422154:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746422154\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-05T05:15:55.022748Z\",\"modifiedAt\":\"2025-05-05T05:15:55.022748Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746422154\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746508541:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746508541\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-06T05:15:42.003868Z\",\"modifiedAt\":\"2025-05-06T05:15:42.003868Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746508541\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746594894:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746594894\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-07T05:14:54.881608Z\",\"modifiedAt\":\"2025-05-07T05:14:54.881608Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746594894\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746681352:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746681352\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-08T05:15:52.363828Z\",\"modifiedAt\":\"2025-05-08T05:15:52.363828Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746681352\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=760\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=780\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=740\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "780" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746854096:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746854096\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-10T05:14:56.86424Z\",\"modifiedAt\":\"2025-05-10T05:14:56.86424Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746854096\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746940590:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746940590\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-11T05:16:30.681182Z\",\"modifiedAt\":\"2025-05-11T05:16:30.681182Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746940590\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747026960:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747026960\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-12T05:16:01.113518Z\",\"modifiedAt\":\"2025-05-12T05:16:01.113518Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747026960\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747113370:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747113370\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-13T05:16:10.375876Z\",\"modifiedAt\":\"2025-05-13T05:16:10.375876Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747113370\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747199854:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747199854\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-14T05:17:35.121213Z\",\"modifiedAt\":\"2025-05-14T05:17:35.121213Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747199854\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747286421:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747286421\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-15T05:20:21.952964Z\",\"modifiedAt\":\"2025-05-15T05:20:21.952964Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747286421\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747372746:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747372746\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-16T05:19:07.0743Z\",\"modifiedAt\":\"2025-05-16T05:19:07.0743Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747372746\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747458950:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747458950\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-17T05:15:51.070786Z\",\"modifiedAt\":\"2025-05-17T05:15:51.070786Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747458950\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747545395:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747545395\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-18T05:16:35.96564Z\",\"modifiedAt\":\"2025-05-18T05:16:35.96564Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747545395\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747631753:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747631753\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T05:15:53.362422Z\",\"modifiedAt\":\"2025-05-19T05:15:53.362422Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747631753\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747718164:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747718164\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-20T05:16:04.720172Z\",\"modifiedAt\":\"2025-05-20T05:16:04.720172Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747718164\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747804578:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747804578\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T05:16:18.448282Z\",\"modifiedAt\":\"2025-05-21T05:16:18.448282Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747804578\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747891259:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747891259\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-22T05:20:59.793328Z\",\"modifiedAt\":\"2025-05-22T05:20:59.793328Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747891259\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747977587:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747977587\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-23T05:19:48.291571Z\",\"modifiedAt\":\"2025-05-23T05:19:48.291572Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747977587\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747545395:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747545395\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-18T05:16:35.458879Z\",\"modifiedAt\":\"2025-05-18T05:16:35.45888Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747545395\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747631752:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747631752\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T05:15:52.955262Z\",\"modifiedAt\":\"2025-05-19T05:15:52.955262Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747631752\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747718164:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747718164\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-20T05:16:04.308321Z\",\"modifiedAt\":\"2025-05-20T05:16:04.308321Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747718164\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747804577:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747804577\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T05:16:17.931333Z\",\"modifiedAt\":\"2025-05-21T05:16:17.931333Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747804577\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747891258:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747891258\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-22T05:20:58.884224Z\",\"modifiedAt\":\"2025-05-22T05:20:58.884224Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747891258\"}},{\"id\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747977586:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747977586\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-23T05:19:47.410715Z\",\"modifiedAt\":\"2025-05-23T05:19:47.410716Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747977586\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=780\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=800\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=760\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "800" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747545401:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747545401\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-18T05:16:41.439386Z\",\"modifiedAt\":\"2025-05-18T05:16:41.439386Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747545401\"}},{\"id\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747631757:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747631757\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-19T05:15:57.827518Z\",\"modifiedAt\":\"2025-05-19T05:15:57.827518Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747631757\"}},{\"id\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747718169:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747718169\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-20T05:16:09.315088Z\",\"modifiedAt\":\"2025-05-20T05:16:09.315088Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747718169\"}},{\"id\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747804582:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747804582\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-21T05:16:22.878394Z\",\"modifiedAt\":\"2025-05-21T05:16:22.878394Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747804582\"}},{\"id\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747891270:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747891270\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-22T05:21:10.642804Z\",\"modifiedAt\":\"2025-05-22T05:21:10.642805Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747891270\"}},{\"id\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747977597:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747977597\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-23T05:19:58.249094Z\",\"modifiedAt\":\"2025-05-23T05:19:58.249094Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747977597\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747543056:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747543056\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-18T04:37:36.67259Z\",\"modifiedAt\":\"2025-05-18T04:37:36.67259Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747543056\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747629643:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747629643\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T04:40:43.782711Z\",\"modifiedAt\":\"2025-05-19T04:40:43.782711Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747629643\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747653208:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747653208\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T11:13:29.124833Z\",\"modifiedAt\":\"2025-05-19T11:13:29.124833Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747653208\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747802205:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747802205\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T04:36:45.797928Z\",\"modifiedAt\":\"2025-05-21T04:36:45.797929Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747802205\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747826169:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747826169\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T11:16:09.400089Z\",\"modifiedAt\":\"2025-05-21T11:16:09.400089Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747826169\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747888853:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747888853\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-22T04:40:54.094469Z\",\"modifiedAt\":\"2025-05-22T04:40:54.094469Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747888853\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747912396:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747912396\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-22T11:13:17.05546Z\",\"modifiedAt\":\"2025-05-22T11:13:17.05546Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747912396\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747975060:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747975060\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-23T04:37:40.983942Z\",\"modifiedAt\":\"2025-05-23T04:37:40.983942Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747975060\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747998872:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747998872\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-23T11:14:33.231321Z\",\"modifiedAt\":\"2025-05-23T11:14:33.231322Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747998872\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696998129:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696998129\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366933Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366933Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696998129\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697022755:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697022755\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366936Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366936Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697022755\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697084623:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697084623\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36694Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36694Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697084623\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697109203:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697109203\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366944Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366944Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697109203\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697170887:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697170887\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366947Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366947Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697170887\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=800\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=820\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=780\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "820" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697195567:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697195567\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366951Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366951Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697195567\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697257355:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697257355\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366954Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366954Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697257355\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697343679:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697343679\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366958Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366958Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697343679\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697429827:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697429827\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366961Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366961Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697429827\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697454598:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697454598\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366965Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366965Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697454598\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697516587:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697516587\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366968Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366968Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697516587\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697540955:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697540955\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366972Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366972Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697540955\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697602991:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697602991\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366976Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366976Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697602991\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697627596:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697627596\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366979Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366979Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697627596\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697689291:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697689291\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366983Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366983Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697689291\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697714084:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697714084\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366987Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366987Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697714084\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697775697:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697775697\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366991Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366991Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697775697\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697800474:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697800474\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366994Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366994Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697800474\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697862152:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697862152\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366998Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366998Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697862152\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697948611:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697948611\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367001Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367001Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697948611\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698034868:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698034868\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367005Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367005Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698034868\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698059551:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698059551\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367008Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367008Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698059551\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698121029:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698121029\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367012Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367012Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698121029\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698146021:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698146021\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367015Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367015Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698146021\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698207662:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698207662\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367019Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367019Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698207662\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=820\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=840\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=800\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "840" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698232332:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698232332\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367023Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367022Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698232332\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698294033:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698294033\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367026Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367026Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698294033\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698318847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698318847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36703Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36703Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698318847\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698380472:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698380472\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367033Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367033Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698380472\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698404942:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698404942\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367037Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367037Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698404942\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698466989:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698466989\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36704Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36704Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698466989\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698553369:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698553369\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367045Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367045Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698553369\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698639827:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698639827\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367049Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367049Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698639827\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698664341:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698664341\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367053Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367053Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698664341\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698725828:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698725828\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367057Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367056Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698725828\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698812290:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698812290\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367061Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367061Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698812290\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698837168:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698837168\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367065Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367065Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698837168\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698898819:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698898819\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367069Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367069Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698898819\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698923378:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698923378\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367072Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367072Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698923378\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698985110:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698985110\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367077Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367077Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698985110\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699009958:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699009958\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367081Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367081Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699009958\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699071421:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699071421\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367084Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367084Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699071421\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699158019:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699158019\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367088Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367088Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699158019\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699244257:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699244257\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367092Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367091Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699244257\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699269264:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699269264\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367097Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367097Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699269264\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=840\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=860\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=820\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "860" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699330780:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699330780\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367102Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367102Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699330780\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699355365:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699355365\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367107Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367107Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699355365\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699376561:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699376561\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367113Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367113Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699376561\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699417088:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699417088\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367119Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367119Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699417088\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699441739:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699441739\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367123Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367123Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699441739\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699450147:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699450147\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367127Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367127Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699450147\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699503695:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699503695\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367131Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367131Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699503695\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699528448:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699528448\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367135Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367135Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699528448\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699590080:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699590080\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367139Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367139Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699590080\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699614763:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699614763\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367143Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367143Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699614763\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699676502:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699676502\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367147Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367146Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699676502\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699762849:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699762849\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367151Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367151Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699762849\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699849056:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699849056\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367155Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367155Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699849056\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699874080:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699874080\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367159Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367159Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699874080\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699935724:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699935724\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367163Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367163Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699935724\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699960353:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699960353\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367167Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367167Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699960353\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700021862:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700021862\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36717Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36717Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700021862\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700046784:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700046784\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367174Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367174Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700046784\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700108512:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700108512\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367178Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367178Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700108512\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700132970:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700132970\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367182Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367182Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700132970\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=860\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=880\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=840\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "880" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700194688:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700194688\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367186Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367186Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700194688\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700219378:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700219378\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36719Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36719Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700219378\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700281016:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700281016\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367194Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367194Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700281016\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700367408:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700367408\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367198Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367198Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700367408\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700453847:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700453847\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367202Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367202Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700453847\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700478556:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700478556\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367206Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367206Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700478556\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700540225:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700540225\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36721Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367209Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700540225\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700565284:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700565284\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367213Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367213Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700565284\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700595465:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700595465\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367217Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367217Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700595465\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700626640:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700626640\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367221Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36722Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700626640\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700651391:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700651391\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367224Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367224Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700651391\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700713038:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700713038\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367228Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367228Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700713038\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700737941:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700737941\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367232Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367232Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700737941\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700799484:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700799484\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367236Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367236Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700799484\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700824283:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700824283\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367239Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367239Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700824283\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700886140:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700886140\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367243Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367243Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700886140\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700972520:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700972520\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367246Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367246Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700972520\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701058658:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701058658\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36725Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36725Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701058658\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701083690:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701083690\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367254Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367253Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701083690\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110733:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110733\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367257Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367257Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110733\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=880\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=900\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=860\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "900" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701112836:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701112836\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367261Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367261Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701112836\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701114479:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701114479\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367264Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367264Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701114479\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701145329:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701145329\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367268Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367268Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701145329\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701169783:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701169783\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367272Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367272Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701169783\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701231454:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701231454\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367275Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367275Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701231454\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701256205:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701256205\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367279Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367279Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701256205\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701318124:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701318124\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367282Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367282Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701318124\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701342896:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701342896\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367286Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367286Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701342896\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701404274:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701404274\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36729Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36729Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701404274\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701429083:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701429083\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367293Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367293Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701429083\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701490958:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701490958\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367297Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367297Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701490958\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701577014:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701577014\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3673Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3673Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701577014\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701663453:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701663453\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367304Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367304Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701663453\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701688352:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701688352\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367309Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367308Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701688352\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701749828:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701749828\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T04:17:09.063669Z\",\"modifiedAt\":\"2023-12-05T04:17:09.063668Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701749828\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701774577:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701774577\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-05T11:09:37.535117Z\",\"modifiedAt\":\"2023-12-05T11:09:37.535117Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701774577\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701836294:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701836294\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T04:18:14.650843Z\",\"modifiedAt\":\"2023-12-06T04:18:14.650842Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701836294\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701861012:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701861012\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T11:10:12.852595Z\",\"modifiedAt\":\"2023-12-06T11:10:12.852595Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701861012\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701880303:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701880303\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T16:31:39.212988Z\",\"modifiedAt\":\"2023-12-06T16:31:39.212988Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701880303\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701882210:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701882210\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T17:03:26.088399Z\",\"modifiedAt\":\"2023-12-06T17:03:26.088399Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701882210\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=900\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=920\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=880\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "920" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701888073:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701888073\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T18:41:09.731266Z\",\"modifiedAt\":\"2023-12-06T18:41:09.731266Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701888073\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701889843:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701889843\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T19:10:39.525733Z\",\"modifiedAt\":\"2023-12-06T19:10:39.525733Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701889843\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701893179:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701893179\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T20:06:15.154739Z\",\"modifiedAt\":\"2023-12-06T20:06:15.154739Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701893179\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902198:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902198\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-06T22:36:34.350051Z\",\"modifiedAt\":\"2023-12-06T22:36:34.350051Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902198\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701922661:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701922661\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T04:17:41.600722Z\",\"modifiedAt\":\"2023-12-07T04:17:41.600722Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701922661\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701947381:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701947381\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T11:09:42.006121Z\",\"modifiedAt\":\"2023-12-07T11:09:42.006121Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701947381\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744864568:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744864568\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T04:36:08.790363Z\",\"modifiedAt\":\"2025-04-17T04:36:08.790363Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744864568\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744888301:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744888301\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T11:15:32.175679Z\",\"modifiedAt\":\"2025-04-17T11:15:32.175679Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744888301\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744974804:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744974804\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-18T11:13:24.730581Z\",\"modifiedAt\":\"2025-04-18T11:13:24.730581Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744974804\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745037210:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745037210\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-19T04:33:30.578517Z\",\"modifiedAt\":\"2025-04-19T04:33:30.578517Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745037210\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745123689:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745123689\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-20T04:34:49.742405Z\",\"modifiedAt\":\"2025-04-20T04:34:49.742405Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745123689\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745210059:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745210059\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-21T04:34:19.489523Z\",\"modifiedAt\":\"2025-04-21T04:34:19.489523Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745210059\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745296398:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745296398\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-22T04:33:18.43683Z\",\"modifiedAt\":\"2025-04-22T04:33:18.43683Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745296398\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745382857:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745382857\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-23T04:34:17.40355Z\",\"modifiedAt\":\"2025-04-23T04:34:17.40355Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745382857\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745406763:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745406763\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-23T11:12:44.12575Z\",\"modifiedAt\":\"2025-04-23T11:12:44.12575Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745406763\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745469204:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745469204\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-24T04:33:24.846906Z\",\"modifiedAt\":\"2025-04-24T04:33:24.846906Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745469204\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745493158:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745493158\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-24T11:12:38.969716Z\",\"modifiedAt\":\"2025-04-24T11:12:38.969716Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745493158\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745555641:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745555641\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-25T04:34:01.807606Z\",\"modifiedAt\":\"2025-04-25T04:34:01.807606Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745555641\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745728438:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745728438\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-27T04:33:59.245341Z\",\"modifiedAt\":\"2025-04-27T04:33:59.245341Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745728438\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745814865:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745814865\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-28T04:34:25.817213Z\",\"modifiedAt\":\"2025-04-28T04:34:25.817213Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745814865\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=920\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=940\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=900\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "940" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745839720:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745839720\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-28T11:28:40.56654Z\",\"modifiedAt\":\"2025-04-28T11:28:40.56654Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745839720\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745925124:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745925124\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-29T11:12:04.364302Z\",\"modifiedAt\":\"2025-04-29T11:12:04.364302Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745925124\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745987662:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745987662\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-30T04:34:22.453697Z\",\"modifiedAt\":\"2025-04-30T04:34:22.453697Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745987662\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746074273:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746074273\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-01T04:37:54.248749Z\",\"modifiedAt\":\"2025-05-01T04:37:54.248749Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746074273\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746160521:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746160521\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-02T04:35:21.391647Z\",\"modifiedAt\":\"2025-05-02T04:35:21.391647Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746160521\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746184494:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746184494\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-02T11:14:55.021213Z\",\"modifiedAt\":\"2025-05-02T11:14:55.021213Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746184494\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746246865:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746246865\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-03T04:34:25.856842Z\",\"modifiedAt\":\"2025-05-03T04:34:25.856842Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746246865\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746333318:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746333318\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-04T04:35:18.516629Z\",\"modifiedAt\":\"2025-05-04T04:35:18.516629Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746333318\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746419713:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746419713\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-05T04:35:13.45698Z\",\"modifiedAt\":\"2025-05-05T04:35:13.45698Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746419713\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746506068:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746506068\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-06T04:34:29.128639Z\",\"modifiedAt\":\"2025-05-06T04:34:29.128639Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746506068\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746592468:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746592468\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-07T04:34:28.439291Z\",\"modifiedAt\":\"2025-05-07T04:34:28.439291Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746592468\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746616365:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746616365\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-07T11:12:45.993082Z\",\"modifiedAt\":\"2025-05-07T11:12:45.993082Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746616365\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746678957:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746678957\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-08T04:35:58.157748Z\",\"modifiedAt\":\"2025-05-08T04:35:58.157748Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746678957\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746702778:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746702778\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-08T11:12:58.549203Z\",\"modifiedAt\":\"2025-05-08T11:12:58.549203Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746702778\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746765374:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746765374\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-09T04:36:14.875588Z\",\"modifiedAt\":\"2025-05-09T04:36:14.875589Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746765374\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746851659:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746851659\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-10T04:34:19.785174Z\",\"modifiedAt\":\"2025-05-10T04:34:19.785175Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746851659\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747024665:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747024665\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-12T04:37:45.187771Z\",\"modifiedAt\":\"2025-05-12T04:37:45.187771Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747024665\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747048574:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747048574\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-12T11:16:14.594421Z\",\"modifiedAt\":\"2025-05-12T11:16:14.594421Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747048574\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747221182:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747221182\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-14T11:13:02.425143Z\",\"modifiedAt\":\"2025-05-14T11:13:02.425143Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747221182\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747307597:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747307597\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-15T11:13:17.960694Z\",\"modifiedAt\":\"2025-05-15T11:13:17.960694Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747307597\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=940\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=960\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=920\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "960" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747370390:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747370390\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-16T04:39:50.464297Z\",\"modifiedAt\":\"2025-05-16T04:39:50.464297Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747370390\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747393992:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747393992\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-16T11:13:12.382228Z\",\"modifiedAt\":\"2025-05-16T11:13:12.382229Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747393992\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747456659:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747456659\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-17T04:37:39.996593Z\",\"modifiedAt\":\"2025-05-17T04:37:39.996593Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747456659\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747543056:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747543056\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-18T04:37:36.879988Z\",\"modifiedAt\":\"2025-05-18T04:37:36.879988Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747543056\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747629643:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747629643\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T04:40:44.015324Z\",\"modifiedAt\":\"2025-05-19T04:40:44.015324Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747629643\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747653209:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747653209\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T11:13:29.326808Z\",\"modifiedAt\":\"2025-05-19T11:13:29.326808Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747653209\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747802205:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747802205\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T04:36:45.847293Z\",\"modifiedAt\":\"2025-05-21T04:36:45.847293Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747802205\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747826169:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747826169\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T11:16:09.806546Z\",\"modifiedAt\":\"2025-05-21T11:16:09.806546Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747826169\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747888854:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747888854\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-22T04:40:54.537007Z\",\"modifiedAt\":\"2025-05-22T04:40:54.537007Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747888854\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747912396:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747912396\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-22T11:13:17.193101Z\",\"modifiedAt\":\"2025-05-22T11:13:17.193101Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747912396\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747975060:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747975060\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-23T04:37:41.032302Z\",\"modifiedAt\":\"2025-05-23T04:37:41.032302Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747975060\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747998873:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747998873\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-23T11:14:33.430234Z\",\"modifiedAt\":\"2025-05-23T11:14:33.430234Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747998873\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747543056:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747543056\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-18T04:37:36.553037Z\",\"modifiedAt\":\"2025-05-18T04:37:36.553037Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747543056\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747629643:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747629643\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T04:40:43.511884Z\",\"modifiedAt\":\"2025-05-19T04:40:43.511884Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747629643\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747653208:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747653208\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-19T11:13:28.923009Z\",\"modifiedAt\":\"2025-05-19T11:13:28.923009Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747653208\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747802205:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747802205\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-21T04:36:45.704843Z\",\"modifiedAt\":\"2025-05-21T04:36:45.704843Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747802205\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747912396:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747912396\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-22T11:13:16.852256Z\",\"modifiedAt\":\"2025-05-22T11:13:16.852256Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747912396\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747975059:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747975059\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-23T04:37:40.755693Z\",\"modifiedAt\":\"2025-05-23T04:37:40.755694Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747975059\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747998872:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747998872\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-05-23T11:14:32.927768Z\",\"modifiedAt\":\"2025-05-23T11:14:32.927768Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747998872\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747543065:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747543065\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-18T04:37:45.231693Z\",\"modifiedAt\":\"2025-05-18T04:37:45.231693Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747543065\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=960\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=980\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=940\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "980" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747629654:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747629654\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-19T04:40:54.304872Z\",\"modifiedAt\":\"2025-05-19T04:40:54.304872Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747629654\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747653211:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747653211\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-19T11:13:31.548899Z\",\"modifiedAt\":\"2025-05-19T11:13:31.548899Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747653211\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747802214:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747802214\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-21T04:36:54.619429Z\",\"modifiedAt\":\"2025-05-21T04:36:54.619429Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747802214\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747888867:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747888867\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-22T04:41:07.901211Z\",\"modifiedAt\":\"2025-05-22T04:41:07.901211Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747888867\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747912399:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747912399\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-22T11:13:19.587259Z\",\"modifiedAt\":\"2025-05-22T11:13:19.587259Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747912399\"}},{\"id\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747975071:RelationTypeInheritsFrom:application:default/myapp\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747975071\",\"namespace\":\"default\"},\"to\":{\"kind\":\"application\",\"name\":\"myapp\",\"namespace\":\"default\"},\"type\":\"RelationTypeInheritsFrom\"},\"meta\":{\"createdAt\":\"2025-05-23T04:37:51.307349Z\",\"modifiedAt\":\"2025-05-23T04:37:51.307349Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdatesoftwarecatalogentityusingschemav3returnsacceptedresponse1747975071\"}},{\"id\":\"service:default/shopist:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"shopist\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368042Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368042Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopist\"}},{\"id\":\"service:default/shopping-cart:RelationTypeDependsOn:service:default/serviceA\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"serviceA\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependsOn\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.351589Z\",\"modifiedAt\":\"2024-10-01T20:11:19.351589Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"service:default/shopping-cart:RelationTypeDependsOn:service:default/serviceB\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"serviceB\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependsOn\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.351591Z\",\"modifiedAt\":\"2024-10-01T20:11:19.351591Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"service:default/shopping-cart:RelationTypeOwnedBy:team:default/myteam\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"myteam\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.351587Z\",\"modifiedAt\":\"2024-10-01T20:11:19.351587Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"service:default/shopping-cart:RelationTypeOtherOwnedBy:team:default/opsTeam\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"opsTeam\",\"namespace\":\"default\"},\"type\":\"RelationTypeOtherOwnedBy\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.351582Z\",\"modifiedAt\":\"2024-10-01T20:11:19.351582Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"service:default/shopping-cart-yee:RelationTypeDependsOn:service:default/serviceA\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"serviceA\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependsOn\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.173695Z\",\"modifiedAt\":\"2024-08-27T19:57:31.173695Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}},{\"id\":\"service:default/shopping-cart-yee:RelationTypeDependsOn:service:default/serviceB\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"serviceB\",\"namespace\":\"default\"},\"type\":\"RelationTypeDependsOn\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.173697Z\",\"modifiedAt\":\"2024-08-27T19:57:31.173697Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}},{\"id\":\"service:default/shopping-cart-yee:RelationTypeOwnedBy:team:default/myteam\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"myteam\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.173691Z\",\"modifiedAt\":\"2024-08-27T19:57:31.173692Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}},{\"id\":\"service:default/shopping-cart-yee:RelationTypeOtherOwnedBy:team:default/opsTeam\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"opsTeam\",\"namespace\":\"default\"},\"type\":\"RelationTypeOtherOwnedBy\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.173685Z\",\"modifiedAt\":\"2024-08-27T19:57:31.173685Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693441004:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1693441004\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368046Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368046Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693441004\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693442006:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1693442006\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36805Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36805Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693442006\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693442143:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1693442143\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368054Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368054Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693442143\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1694434219:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1694434219\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368057Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368057Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1694434219\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1694607033:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1694607033\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368061Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368061Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1694607033\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=980\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1000\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=960\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1000" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368067Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368067Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368065Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368065Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368073Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368073Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368071Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368071Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368079Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368079Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368077Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368077Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368085Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368085Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368083Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368083Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368091Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368091Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368089Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368089Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368097Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368097Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368095Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368095Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368103Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368103Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368101Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368101Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368112Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368112Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368109Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368109Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368118Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368118Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368115Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368115Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368124Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368124Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368122Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368122Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1000\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1020\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=980\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1020" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36813Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36813Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368128Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368128Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368136Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368136Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368134Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368133Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368143Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368143Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36814Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36814Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368149Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368149Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368147Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368147Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368155Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368155Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368153Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368153Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368162Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368162Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36816Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36816Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368168Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368168Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368166Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368166Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368175Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368175Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368173Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368173Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368182Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368182Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36818Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36818Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368189Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368189Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368187Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368187Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1020\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1040\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1000\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1040" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368195Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368195Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368193Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368193Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368201Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368201Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368199Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368199Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368216Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368216Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368214Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368214Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368223Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368223Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36822Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36822Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36823Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36823Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368227Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368227Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368236Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368236Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368234Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368234Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368243Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368243Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36824Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36824Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368249Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368249Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368247Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368247Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2023-12-07T12:07:24.628423Z\",\"modifiedAt\":\"2023-12-07T12:07:24.628423Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T12:07:24.628421Z\",\"modifiedAt\":\"2023-12-07T12:07:24.628421Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633:RelationTypePartsOf:system:default/retail\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\",\"namespace\":\"default\"},\"to\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"type\":\"RelationTypePartsOf\"},\"meta\":{\"createdAt\":\"2025-01-09T15:13:55.200624Z\",\"modifiedAt\":\"2025-01-09T15:13:55.200624Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-01-09T15:13:55.200621Z\",\"modifiedAt\":\"2025-01-09T15:13:55.200621Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1040\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1060\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1020\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1060" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744849134:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1744849134\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T00:23:53.768154Z\",\"modifiedAt\":\"2025-04-17T00:23:53.768154Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744849134\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744891796:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1744891796\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T12:12:44.915133Z\",\"modifiedAt\":\"2025-04-17T12:12:44.915133Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744891796\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744935669:RelationTypeOwnedBy:team:default/e-commerce\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1744935669\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-18T00:25:53.442476Z\",\"modifiedAt\":\"2025-04-18T00:25:53.442476Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744935669\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696983608:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1696983608\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368741Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368741Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696983608\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696984175:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1696984175\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368745Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368745Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696984175\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696984299:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1696984299\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368748Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368748Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696984299\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697026342:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697026342\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368752Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368752Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697026342\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697027402:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697027402\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368755Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368755Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697027402\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697027534:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697027534\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368759Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368759Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697027534\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697145279:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697145279\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368763Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368762Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697145279\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697145313:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697145313\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368766Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368766Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697145313\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697803646:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697803646\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36877Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36877Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697803646\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697805189:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697805189\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368774Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368774Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697805189\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697805336:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697805336\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368777Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368777Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697805336\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698108102:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698108102\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368781Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368781Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698108102\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698108184:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698108184\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368784Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368784Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698108184\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698236758:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698236758\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368788Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368788Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698236758\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698237057:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698237057\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368791Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368791Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698237057\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698237214:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698237214\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368795Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368795Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698237214\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698711330:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698711330\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368798Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368798Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698711330\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1060\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1080\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1040\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1080" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698712533:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698712533\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368802Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368802Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698712533\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698712661:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698712661\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368806Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368806Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698712661\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698754219:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698754219\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36881Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36881Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698754219\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698755636:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698755636\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368813Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368813Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698755636\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698755769:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698755769\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368817Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368817Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698755769\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841369:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698841369\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36882Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36882Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841369\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841723:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698841723\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368824Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368824Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841723\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841850:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698841850\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368828Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368827Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841850\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698864842:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698864842\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368831Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368831Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698864842\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1699144141:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1699144141\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368835Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368835Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1699144141\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1701303817:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1701303817\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368839Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368839Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1701303817\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1701950844:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1701950844\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2023-12-07T12:07:25.096684Z\",\"modifiedAt\":\"2023-12-07T12:07:25.096684Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1701950844\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1736435633:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1736435633\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-01-09T15:13:55.450514Z\",\"modifiedAt\":\"2025-01-09T15:13:55.450514Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1736435633\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744849138:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1744849138\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T00:23:59.971704Z\",\"modifiedAt\":\"2025-04-17T00:23:59.971704Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744849138\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744891800:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1744891800\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-17T12:12:49.2269Z\",\"modifiedAt\":\"2025-04-17T12:12:49.2269Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744891800\"}},{\"id\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744935673:RelationTypeOwnedBy:team:default/my-team\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1744935673\",\"namespace\":\"default\"},\"to\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwnedBy\"},\"meta\":{\"createdAt\":\"2025-04-18T00:25:54.651008Z\",\"modifiedAt\":\"2025-04-18T00:25:54.651008Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744935673\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368068Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368068Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368074Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368074Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368081Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368081Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368086Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368086Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1080\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1100\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1060\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1100" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368092Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368092Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368098Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368098Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368104Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368104Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368113Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368113Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368119Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368119Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368125Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368125Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368131Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368131Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368137Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368137Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368144Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368144Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36815Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36815Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368157Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368156Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368163Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368163Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368169Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368169Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368176Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368176Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368183Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368183Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36819Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36819Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368196Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368196Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368203Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368203Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368217Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368217Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368224Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368224Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1100\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1120\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1080\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1120" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368231Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368231Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368237Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368237Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368244Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368244Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36825Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36825Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2023-12-07T12:07:24.628425Z\",\"modifiedAt\":\"2023-12-07T12:07:24.628425Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\"}},{\"id\":\"system:default/retail:RelationTypeHasPart:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"system\",\"name\":\"retail\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\",\"namespace\":\"default\"},\"type\":\"RelationTypeHasPart\"},\"meta\":{\"createdAt\":\"2025-01-09T15:13:55.200625Z\",\"modifiedAt\":\"2025-01-09T15:13:55.200625Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693441004\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1693441004\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368047Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368047Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693441004\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693442006\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1693442006\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368051Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368051Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693442006\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693442143\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1693442143\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368055Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368055Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1693442143\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1694434219\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1694434219\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368058Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368058Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1694434219\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1694607033\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1694607033\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368062Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368062Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1694607033\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368066Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368066Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696507929\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368072Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368072Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696508945\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368078Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368078Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696509061\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368084Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368084Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696983590\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36809Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36809Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984200\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368096Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368096Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1696984324\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368102Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368102Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697026321\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368111Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36811Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027429\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368117Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368117Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697027560\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1120\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1140\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1100\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1140" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368123Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368123Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697803824\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368129Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368129Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805216\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368135Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368135Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1697805362\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368141Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368141Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108130\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368148Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368148Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698108211\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368154Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368154Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698236740\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368161Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368161Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698711312\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368167Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368167Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712558\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368174Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368174Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698712687\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368181Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368181Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698754029\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368188Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368188Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755663\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368194Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368194Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698755796\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3682Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3682Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841351\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368215Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368215Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841749\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368222Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368221Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698841876\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368229Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368228Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1698864842\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368235Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368235Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699144123\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368241Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368241Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1699618290\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368248Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368248Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701303815\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T12:07:24.628422Z\",\"modifiedAt\":\"2023-12-07T12:07:24.628422Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1701950843\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1140\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1160\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1120\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1160" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-01-09T15:13:55.200623Z\",\"modifiedAt\":\"2025-01-09T15:13:55.200623Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1736435633\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744849134\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1744849134\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T00:23:53.768158Z\",\"modifiedAt\":\"2025-04-17T00:23:53.768158Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744849134\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744891796\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1744891796\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T12:12:44.915137Z\",\"modifiedAt\":\"2025-04-17T12:12:44.915137Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744891796\"}},{\"id\":\"team:default/e-commerce:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744935669\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"e-commerce\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicbackstage-local-1744935669\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-18T00:25:53.442479Z\",\"modifiedAt\":\"2025-04-18T00:25:53.442479Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicbackstage-local-1744935669\"}},{\"id\":\"team:default/intg-tools-libs:RelationTypeOwns:service:default/python-app-checks-enabled\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"intg-tools-libs\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"python-app-checks-enabled\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.353024Z\",\"modifiedAt\":\"2023-12-04T22:00:14.353024Z\",\"source\":\"schema\",\"definedBy\":\"service:default/python-app-checks-enabled\"}},{\"id\":\"team:default/intg-tools-libs:RelationTypeOwns:service:default/python-sample-app-unbleachedsilk\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"intg-tools-libs\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"python-sample-app-unbleachedsilk\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.353029Z\",\"modifiedAt\":\"2023-12-04T22:00:14.353029Z\",\"source\":\"schema\",\"definedBy\":\"service:default/python-sample-app-unbleachedsilk\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-definition-test\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-definition-test\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.353035Z\",\"modifiedAt\":\"2023-12-04T22:00:14.353035Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-definition-test\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747856275\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747856275\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T19:37:56.342087Z\",\"modifiedAt\":\"2025-05-21T19:37:56.342088Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747856275\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355645Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355645Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696948446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355649Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355649Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696962847\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355653Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355652Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696977245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355656Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355656Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696991645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35566Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35566Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697006045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355663Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355663Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697020446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355668Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355668Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697034846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355671Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355671Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697049246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355675Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355675Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697063645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355679Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355679Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697078045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355683Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355683Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697092446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355686Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355686Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697106846\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1160\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1180\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1140\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1180" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35569Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35569Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697121246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355693Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355693Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697135646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355697Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355697Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697150046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355701Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355701Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697164447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355705Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355705Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697178845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355708Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355708Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697193246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355712Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355712Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697207647\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355716Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355716Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697222045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355719Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355719Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697236447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355723Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355722Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697250846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355726Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355726Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697265247\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35573Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35573Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697279647\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355733Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355733Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697294046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355737Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355737Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697308446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35574Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35574Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697322846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355745Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355744Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697337245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355748Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355748Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697351646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355752Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355752Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697366047\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355755Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355755Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697380445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355759Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355759Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697394847\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1180\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1200\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1160\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1200" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355762Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355762Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697409245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355836Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355836Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697423645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35584Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35584Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697438046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355843Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355843Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697452446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355847Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355847Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697466846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355851Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355851Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697481246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355854Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355854Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697495646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355858Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355858Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697510045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355861Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355861Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697524447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355865Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355865Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697538845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355869Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355868Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697553245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355873Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355873Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697567645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355877Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355877Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697582046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35588Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35588Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697596445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355884Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355884Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697610845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355887Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355887Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697625247\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355892Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355892Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697639645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355895Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355895Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697654045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355899Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355899Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697668447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355903Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355903Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682845\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1200\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1220\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1180\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1220" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355906Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355906Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697697245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35591Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35591Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697711645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355913Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355913Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697726045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355917Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355916Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697740445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697754845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697754845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35592Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35592Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697754845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697769245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697769245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355924Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355923Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697769245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697783645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697783645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355927Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355927Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697783645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697798045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697798045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355931Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355931Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697798045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697812445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697812445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355935Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355934Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697812445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697826846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697826846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355938Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355938Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697826846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697841245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697841245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355942Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355942Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697841245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697855645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697855645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355945Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355945Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697855645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697870045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697870045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355949Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355949Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697870045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697884445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697884445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355953Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355953Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697884445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697898845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697898845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355956Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355956Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697898845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697913245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697913245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35596Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35596Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697913245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697927647\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697927647\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355963Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355963Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697927647\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697942045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697942045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355968Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355968Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697942045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697956446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697956446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355971Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355971Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697956446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697970847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697970847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355975Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355975Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697970847\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1220\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1240\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1200\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1240" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697985247\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697985247\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355978Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355978Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697985247\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697999645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697999645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355982Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355982Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697999645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698014046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698014046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355986Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355986Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698014046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698028445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698028445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355989Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355989Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698028445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698042846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698042846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355993Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355993Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698042846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698057246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698057246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.355996Z\",\"modifiedAt\":\"2023-12-04T22:00:14.355996Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698057246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698071645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698071645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698071645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698086045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698086045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356004Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356004Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698086045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698100445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698100445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356008Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356008Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698100445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356012Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356012Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698129245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698129245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356015Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356015Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698129245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698143645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698143645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356019Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356019Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698143645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698158045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698158045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356022Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356022Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698158045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698172445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698172445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356026Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356026Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698172445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698186845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698186845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356029Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356029Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698186845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698201246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698201246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356033Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356033Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698201246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698215646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698215646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356037Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356037Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698215646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698230046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698230046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35604Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35604Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698230046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698244445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698244445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356045Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356045Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698244445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698258845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698258845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356048Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356048Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698258845\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1240\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1260\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1220\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1260" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698273246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698273246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356052Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356052Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698273246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698287645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698287645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356056Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356056Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698287645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698302045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698302045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356059Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356059Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698302045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698316445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698316445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356063Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356063Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698316445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698330845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698330845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356066Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356066Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698330845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698345245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698345245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35607Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35607Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698345245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698359645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698359645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356074Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356074Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698359645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698374045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698374045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356078Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356078Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698374045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698388445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698388445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356082Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356082Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698388445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698402845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698402845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356085Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356085Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698402845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698417245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698417245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356089Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356089Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698417245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698431645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698431645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356092Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356092Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698431645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698446045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698446045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356096Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356096Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698446045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698460445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698460445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356099Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356099Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698460445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698474845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698474845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356103Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356103Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698474845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698489246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698489246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356107Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356106Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698489246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698503645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698503645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35611Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35611Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698503645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698518045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698518045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356114Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356114Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698518045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698532445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698532445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356117Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356117Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698532445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698546846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698546846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356122Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356121Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698546846\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1260\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1280\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1240\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1280" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698561245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698561245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356125Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356125Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698561245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698575645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698575645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356129Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356129Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698575645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698590047\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698590047\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356132Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356132Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698590047\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698604447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698604447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356136Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356136Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698604447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698618845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698618845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356139Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356139Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698618845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698633246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698633246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356143Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356143Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698633246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698647646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698647646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356147Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356146Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698647646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698662047\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698662047\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35615Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35615Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698662047\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698676445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698676445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356154Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356153Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698676445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698690846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698690846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356157Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356157Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698690846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698705245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698705245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356161Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356161Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698705245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719647\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719647\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356165Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356165Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719647\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698734045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698734045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356168Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356168Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698734045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698748446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698748446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356172Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356172Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698748446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698762845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698762845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356176Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356175Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698762845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698777246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698777246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356179Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356179Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698777246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698791645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698791645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356183Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356183Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698791645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698806046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698806046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356186Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356186Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698806046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698820446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698820446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35619Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35619Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698820446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698834846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698834846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356193Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356193Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698834846\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1280\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1300\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1260\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1300" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698849245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698849245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356208Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356208Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698849245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698863646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698863646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356212Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356211Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698863646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698878045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698878045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356215Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356215Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698878045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698892446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698892446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356219Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356219Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698892446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698906846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698906846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356222Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356222Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698906846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698921245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698921245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356226Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356226Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698921245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698935645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698935645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356229Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356229Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698935645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698950045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698950045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356233Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356233Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698950045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698964445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698964445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356236Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356236Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698964445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698978847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698978847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35624Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35624Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698978847\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698993245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698993245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356244Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356244Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698993245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699007646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699007646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356247Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356247Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699007646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699022045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699022045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356251Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356251Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699022045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699036445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699036445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356255Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356255Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699036445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699050846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699050846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356258Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356258Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699050846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699065246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699065246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356262Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356262Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699065246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699079645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699079645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356265Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356265Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699079645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699094045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699094045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356269Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356269Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699094045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699108446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699108446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356273Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356273Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699108446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699122846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699122846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356276Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356276Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699122846\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1300\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1320\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1280\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1320" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699137245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699137245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35628Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35628Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699137245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356285Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356285Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699166046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699166046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356289Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356289Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699166046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699180447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699180447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356293Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356293Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699180447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699194846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699194846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356297Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356297Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699194846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699209247\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699209247\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3563Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3563Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699209247\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699223645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699223645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356304Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356304Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699223645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699238046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699238046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356308Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356307Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699238046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699252446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699252446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356311Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356311Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699252446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699266845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699266845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356315Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356315Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699266845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699281246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699281246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356318Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356318Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699281246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699295646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699295646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356322Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356322Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699295646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699310045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699310045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356326Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356326Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699310045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699324446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699324446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356329Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356329Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699324446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699338845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699338845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356333Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356333Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699338845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699353245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699353245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356336Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356336Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699353245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699367646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699367646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35634Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35634Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699367646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699382047\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699382047\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356344Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356344Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699382047\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699396445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699396445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356347Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356347Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699396445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699410847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699410847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356351Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356351Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699410847\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1320\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1340\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1300\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1340" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699425245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699425245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356355Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356355Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699425245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699439646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699439646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356358Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356358Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699439646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699454047\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699454047\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356363Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356363Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699454047\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699468447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699468447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356366Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356366Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699468447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699482845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699482845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35637Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35637Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699482845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699497245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699497245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356374Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356373Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699497245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699511646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699511646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356377Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356377Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699511646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699526045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699526045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356381Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356381Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699526045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699540446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699540446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356384Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356384Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699540446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699554845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699554845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356388Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356388Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699554845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699569245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699569245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356391Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356391Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699569245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699583645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699583645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356395Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356395Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699583645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699598046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699598046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356399Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356399Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699598046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699612445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699612445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356402Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356402Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699612445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699626846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699626846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356406Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356406Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699626846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699641245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699641245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356409Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356409Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699641245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699655646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699655646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356413Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356413Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699655646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356416Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356416Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699684445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699684445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35642Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35642Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699684445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699698846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699698846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356423Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356423Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699698846\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1340\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1360\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1320\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1360" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699713245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699713245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356427Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356427Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699713245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699727646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699727646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35643Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35643Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699727646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699742046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699742046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356434Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356434Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699742046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699756447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699756447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356438Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356438Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699756447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699770845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699770845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356442Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356442Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699770845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699785246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699785246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356445Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356445Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699785246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699799645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699799645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356449Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356449Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699799645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699814046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699814046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356453Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356453Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699814046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699828446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699828446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356456Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356456Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699828446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35646Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35646Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699857245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699857245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356463Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356463Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699857245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699871645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699871645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356467Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356467Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699871645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699886045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699886045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35647Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35647Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699886045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699900445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699900445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356474Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356474Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699900445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699914846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699914846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356478Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356478Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699914846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699929245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699929245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356481Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356481Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699929245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699943647\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699943647\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356485Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356485Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699943647\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699958046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699958046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356489Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356489Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699958046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699972445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699972445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356492Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356492Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699972445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699986846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699986846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356496Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356496Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699986846\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1360\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1380\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1340\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1380" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700001246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700001246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356499Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356499Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700001246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700015645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700015645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356503Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356503Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700015645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700030046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700030046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356506Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356506Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700030046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700044447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700044447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35651Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35651Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700044447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700058845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700058845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356514Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356514Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700058845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700073247\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700073247\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356518Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356518Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700073247\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700087646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700087646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356522Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356522Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700087646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700102047\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700102047\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356525Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356525Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700102047\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700116445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700116445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356529Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356529Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700116445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700130845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700130845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356532Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356532Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700130845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700145245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700145245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356536Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356536Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700145245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700159645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700159645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356539Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356539Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700159645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700174046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700174046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356543Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356543Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700174046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700188445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700188445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356546Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356546Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700188445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700202846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700202846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35655Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35655Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700202846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700217245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700217245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356554Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356554Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700217245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700231645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700231645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356557Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356557Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700231645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700246045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700246045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356561Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356561Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700246045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700260446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700260446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356564Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356564Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700260446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356568Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356568Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274845\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1380\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1400\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1360\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1400" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700289246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700289246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356572Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356572Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700289246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700303645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700303645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356575Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356575Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700303645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700318046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700318046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356579Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356579Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700318046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700332445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700332445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356582Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356582Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700332445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700346845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700346845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356586Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356586Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700346845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700361245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700361245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35659Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35659Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700361245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700375645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700375645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356594Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356594Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700375645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700390045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700390045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356598Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356598Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700390045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700404445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700404445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356601Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356601Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700404445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700418847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700418847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356605Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356605Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700418847\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700433246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700433246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356609Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356609Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700433246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700447645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700447645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356612Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356612Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700447645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700462045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700462045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356617Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356617Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700462045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700476445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700476445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35662Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35662Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700476445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700490847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700490847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356624Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356624Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700490847\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700505246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700505246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356628Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356627Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700505246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700519645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700519645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356631Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356631Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700519645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700534045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700534045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356635Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356635Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700534045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700548447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700548447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356638Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356638Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700548447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700562845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700562845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356642Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356642Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700562845\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1400\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1420\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1380\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1420" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700577245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700577245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35668Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35668Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700577245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700591645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700591645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356684Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356683Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700591645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700606045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700606045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356687Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356687Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700606045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700620445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700620445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356691Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356691Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700620445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700634846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700634846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356695Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356695Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700634846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700649245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700649245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356699Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356698Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700649245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700663646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700663646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356704Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356704Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700663646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700678047\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700678047\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356707Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356707Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700678047\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700692445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700692445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356711Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356711Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700692445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356715Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356714Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700721245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700721245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356718Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356718Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700721245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700735645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700735645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356722Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356722Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700735645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700750045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700750045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356725Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356725Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700750045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700764445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700764445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356729Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356729Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700764445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700778846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700778846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356732Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356732Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700778846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700793246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700793246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356736Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356736Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700793246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700807646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700807646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35674Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35674Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700807646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700822047\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700822047\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356744Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356744Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700822047\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700836446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700836446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356747Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356747Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700836446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700850845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700850845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356751Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356751Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700850845\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1420\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1440\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1400\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1440" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700865246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700865246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356755Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356755Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700865246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700879645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700879645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356758Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356758Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700879645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700894046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700894046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356762Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356762Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700894046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700908445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700908445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356766Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356766Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700908445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700937246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700937246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356769Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356769Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700937246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700951645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700951645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356773Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356773Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700951645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700966046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700966046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356776Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356776Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700966046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700980447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700980447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356781Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356781Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700980447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700994846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700994846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356784Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356784Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700994846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701009246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701009246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356788Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356788Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701009246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701023645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701023645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356792Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356792Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701023645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701038045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701038045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356796Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356796Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701038045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701052446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701052446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356799Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356799Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701052446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701066845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701066845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356803Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356803Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701066845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701081245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701081245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356806Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356806Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701081245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701095646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701095646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35681Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35681Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701095646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356813Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356813Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701124447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701124447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356817Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356817Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701124447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356821Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356821Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701153245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701153245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356824Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356824Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701153245\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1440\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1460\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1420\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1460" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701167645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701167645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356828Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356828Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701167645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701182045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701182045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356831Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356831Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701182045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701196445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701196445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356835Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356835Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701196445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701210845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701210845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356838Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356838Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701210845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701225246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701225246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356842Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356842Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701225246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701239645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701239645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356846Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356845Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701239645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701254045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701254045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356849Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356849Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701254045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701268447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701268447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356853Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356853Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701268447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701282846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701282846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356964Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356964Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701282846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701297245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701297245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356968Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356968Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701297245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356972Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356972Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701326045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701326045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356975Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356975Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701326045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701340445\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701340445\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356979Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356979Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701340445\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701354845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701354845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356982Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356982Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701354845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701369245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701369245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356986Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356986Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701369245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701383647\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701383647\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35699Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356989Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701383647\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701398045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701398045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356993Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356993Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701398045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701412446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701412446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.356997Z\",\"modifiedAt\":\"2023-12-04T22:00:14.356997Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701412446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701426845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701426845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701426845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701441247\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701441247\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357004Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357004Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701441247\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1460\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1480\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1440\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1480" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701455645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701455645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357007Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357007Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701455645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701470046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701470046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357012Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357012Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701470046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701498847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701498847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357015Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357015Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701498847\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701513245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701513245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357019Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357019Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701513245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701527646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701527646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357022Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357022Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701527646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701542046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701542046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357026Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357026Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701542046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701556447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701556447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35703Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35703Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701556447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357033Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357033Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570847\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701585247\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701585247\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357037Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357037Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701585247\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701599646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701599646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357041Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357041Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701599646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701614045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701614045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357045Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357045Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701614045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701628446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701628446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357049Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357048Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701628446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701642846\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701642846\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357052Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357052Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701642846\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701657245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701657245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357056Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357056Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701657245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701671645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701671645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.35706Z\",\"modifiedAt\":\"2023-12-04T22:00:14.35706Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701671645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701686045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701686045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357064Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357064Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701686045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701700446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701700446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357068Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357068Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701700446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701714847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701714847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.357071Z\",\"modifiedAt\":\"2023-12-04T22:00:14.357071Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701714847\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701729246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701729246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:34:06.558521Z\",\"modifiedAt\":\"2023-12-04T22:34:06.558521Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701729246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701743645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701743645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T02:34:06.030315Z\",\"modifiedAt\":\"2023-12-05T02:34:06.030315Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701743645\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1480\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1500\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1460\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1500" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701758046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701758046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T06:34:07.178175Z\",\"modifiedAt\":\"2023-12-05T06:34:07.178175Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701758046\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701772446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701772446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T10:34:06.414951Z\",\"modifiedAt\":\"2023-12-05T10:34:06.414951Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701772446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701786847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701786847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T14:34:07.713441Z\",\"modifiedAt\":\"2023-12-05T14:34:07.71344Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701786847\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701801247\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701801247\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T18:34:07.72014Z\",\"modifiedAt\":\"2023-12-05T18:34:07.72014Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701801247\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701815647\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701815647\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T22:34:07.679821Z\",\"modifiedAt\":\"2023-12-05T22:34:07.679821Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701815647\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701830045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701830045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T02:34:06.057018Z\",\"modifiedAt\":\"2023-12-06T02:34:06.057018Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701830045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701844447\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701844447\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T06:34:08.188015Z\",\"modifiedAt\":\"2023-12-06T06:34:08.188015Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701844447\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701858845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701858845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T10:34:06.002144Z\",\"modifiedAt\":\"2023-12-06T10:34:06.002144Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701858845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701873246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701873246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T14:34:07.120891Z\",\"modifiedAt\":\"2023-12-06T14:34:07.120891Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701873246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701887645\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701887645\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T18:34:06.031484Z\",\"modifiedAt\":\"2023-12-06T18:34:06.031484Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701887645\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902045\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902045\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T22:34:05.992154Z\",\"modifiedAt\":\"2023-12-06T22:34:05.992154Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902045\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701916446\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701916446\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T02:34:07.140517Z\",\"modifiedAt\":\"2023-12-07T02:34:07.140517Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701916446\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701930845\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701930845\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T06:34:06.013752Z\",\"modifiedAt\":\"2023-12-07T06:34:06.013752Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701930845\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701945246\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701945246\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T10:34:07.162733Z\",\"modifiedAt\":\"2023-12-07T10:34:07.162733Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701945246\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701959647\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701959647\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T14:34:07.678008Z\",\"modifiedAt\":\"2023-12-07T14:34:07.678008Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701959647\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744848891\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744848891\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T00:18:46.651958Z\",\"modifiedAt\":\"2025-04-17T00:18:46.651958Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744848891\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744863291\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744863291\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T04:23:33.718894Z\",\"modifiedAt\":\"2025-04-17T04:23:33.718894Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744863291\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744877691\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744877691\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T08:18:51.905455Z\",\"modifiedAt\":\"2025-04-17T08:18:51.905455Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744877691\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744892091\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744892091\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T12:19:35.776213Z\",\"modifiedAt\":\"2025-04-17T12:19:35.776213Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744892091\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744906491\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744906491\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T16:20:25.773686Z\",\"modifiedAt\":\"2025-04-17T16:20:25.773686Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744906491\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1500\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1520\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1480\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1520" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744920891\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744920891\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T20:19:11.270062Z\",\"modifiedAt\":\"2025-04-17T20:19:11.270062Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744920891\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744935291\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744935291\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-18T00:19:55.012266Z\",\"modifiedAt\":\"2025-04-18T00:19:55.012266Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-examplecreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744935291\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696537819\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696537819\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.359908Z\",\"modifiedAt\":\"2023-12-04T22:00:14.359908Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696537819\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696617871\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696617871\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.359912Z\",\"modifiedAt\":\"2023-12-04T22:00:14.359912Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696617871\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697145210\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697145210\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.359916Z\",\"modifiedAt\":\"2023-12-04T22:00:14.359915Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697145210\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699302050\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699302050\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.359919Z\",\"modifiedAt\":\"2023-12-04T22:00:14.359919Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699302050\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1711550927\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1711550927\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2024-03-27T14:48:47.977059Z\",\"modifiedAt\":\"2024-03-27T14:48:47.977059Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1711550927\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747157416\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747157416\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-13T17:30:16.381231Z\",\"modifiedAt\":\"2025-05-13T17:30:16.381231Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747157416\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696983224\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696983224\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360597Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360597Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696983224\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697069672\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697069672\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360601Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360601Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697069672\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697156018\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697156018\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360605Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360605Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697156018\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229060\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229060\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360609Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360609Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229060\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697242435\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697242435\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360613Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360612Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697242435\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697328821\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697328821\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360616Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360616Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697328821\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697415234\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697415234\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36062Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36062Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697415234\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490258\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490258\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360624Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360624Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490258\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697501628\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697501628\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360628Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360628Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697501628\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697588099\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697588099\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360631Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360631Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697588099\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697674569\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697674569\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360635Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360635Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697674569\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697760866\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697760866\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360639Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360639Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697760866\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1520\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1540\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1500\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1540" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697847393\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697847393\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360643Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360643Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697847393\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697933716\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697933716\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360647Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360647Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697933716\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698020081\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698020081\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360652Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360652Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698020081\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698106524\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698106524\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360657Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360657Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698106524\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698192932\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698192932\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360662Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360662Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698192932\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698279228\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698279228\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360666Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360666Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698279228\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698365756\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698365756\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36067Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36067Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698365756\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698452055\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698452055\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360674Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360674Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698452055\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698538390\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698538390\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360678Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360678Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698538390\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698624718\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698624718\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360682Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360681Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698624718\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698711127\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698711127\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360685Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360685Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698711127\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698797685\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698797685\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360689Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360689Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698797685\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698884043\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698884043\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360693Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360693Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698884043\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698970401\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698970401\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360697Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360697Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698970401\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699056933\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699056933\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3607Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3607Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699056933\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699143332\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699143332\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360704Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360704Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699143332\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699229612\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699229612\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360707Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360707Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699229612\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699316029\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699316029\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360711Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360711Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699316029\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369308\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369308\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360715Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360714Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369308\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369703\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369703\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360718Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360718Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699369703\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1540\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1560\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1520\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1560" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699370185\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699370185\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360722Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360722Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699370185\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699402551\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699402551\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360727Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360727Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699402551\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699446950\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699446950\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360732Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360732Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699446950\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699451777\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699451777\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360737Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360737Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699451777\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699488795\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699488795\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360742Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360742Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699488795\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699547532\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699547532\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360746Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360746Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699547532\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699575232\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699575232\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36075Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36075Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699575232\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699661712\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699661712\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360753Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360753Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699661712\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699747912\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699747912\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360756Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360756Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699747912\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699834363\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699834363\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36076Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36076Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699834363\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699920707\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699920707\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360764Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360763Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699920707\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700007162\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700007162\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360767Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360767Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700007162\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700093470\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700093470\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360771Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360771Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700093470\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700179890\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700179890\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360774Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360774Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700179890\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700229065\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700229065\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360778Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360778Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700229065\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700266376\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700266376\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360781Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360781Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700266376\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700352681\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700352681\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360785Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360785Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700352681\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700439126\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700439126\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360789Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360788Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700439126\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700525574\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700525574\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360792Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360792Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700525574\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700611896\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700611896\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360796Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360796Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700611896\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1560\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1580\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1540\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1580" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700698304\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700698304\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360799Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360799Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700698304\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700784721\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700784721\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360803Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360803Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700784721\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700871143\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700871143\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360809Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360809Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700871143\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700957508\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700957508\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360814Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360814Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700957508\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701043891\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701043891\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36082Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36082Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701043891\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701130284\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701130284\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360824Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360824Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701130284\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701216672\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701216672\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360827Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360827Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701216672\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701303228\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701303228\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360831Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360831Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701303228\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701389533\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701389533\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360834Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360834Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701389533\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701475899\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701475899\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360838Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360838Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701475899\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701562291\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701562291\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360842Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360842Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701562291\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701648727\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701648727\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.360845Z\",\"modifiedAt\":\"2023-12-04T22:00:14.360845Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701648727\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701735124\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701735124\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T00:12:04.463418Z\",\"modifiedAt\":\"2023-12-05T00:12:04.463418Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701735124\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701821497\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701821497\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T00:11:37.18816Z\",\"modifiedAt\":\"2023-12-06T00:11:37.18816Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701821497\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701907913\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701907913\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T00:11:53.816881Z\",\"modifiedAt\":\"2023-12-07T00:11:53.81688Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701907913\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745108304\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745108304\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-20T00:18:25.056823Z\",\"modifiedAt\":\"2025-04-20T00:18:25.056823Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745108304\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745713112\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745713112\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-27T00:18:32.526587Z\",\"modifiedAt\":\"2025-04-27T00:18:32.526587Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testgocreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745713112\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747549338\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747549338\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-18T06:22:18.261655Z\",\"modifiedAt\":\"2025-05-18T06:22:18.261655Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747549338\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747635556\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747635556\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T06:19:16.929211Z\",\"modifiedAt\":\"2025-05-19T06:19:16.929211Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747635556\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747808417\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747808417\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T06:20:17.718779Z\",\"modifiedAt\":\"2025-05-21T06:20:17.718779Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747808417\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1580\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1600\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1560\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1600" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696994388\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696994388\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361928Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361928Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696994388\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697080782\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697080782\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361932Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361931Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697080782\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697167365\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697167365\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361935Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361935Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697167365\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229081\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229081\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361939Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361939Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697229081\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697253920\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697253920\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361942Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361942Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697253920\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697339995\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697339995\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361946Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361946Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697339995\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697426354\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697426354\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361949Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361949Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697426354\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490524\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490524\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361953Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361953Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697490524\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697513105\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697513105\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361956Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361956Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697513105\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697599467\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697599467\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36196Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36196Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697599467\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697656828\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697656828\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361963Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361963Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697656828\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697685860\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697685860\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361967Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361967Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697685860\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697723031\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697723031\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361971Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36197Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697723031\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697771921\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697771921\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361974Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361974Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697771921\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697858261\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697858261\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361978Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361978Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697858261\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697944867\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697944867\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361981Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361981Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697944867\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698031377\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698031377\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361985Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361985Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698031377\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698117582\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698117582\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361988Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361988Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698117582\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698204134\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698204134\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361992Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361992Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698204134\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698290693\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698290693\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.361996Z\",\"modifiedAt\":\"2023-12-04T22:00:14.361996Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698290693\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1600\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1620\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1580\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1620" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698376927\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698376927\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698376927\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698463056\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698463056\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362004Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362004Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698463056\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698722492\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698722492\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362008Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362008Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698722492\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698808911\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698808911\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362011Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362011Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698808911\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698895097\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698895097\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362015Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362015Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698895097\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698981893\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698981893\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362018Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362018Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698981893\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699068192\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699068192\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362022Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362022Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699068192\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699154192\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699154192\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362025Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362025Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699154192\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699241039\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699241039\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362029Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362029Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699241039\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699326992\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699326992\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362032Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362032Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699326992\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699413919\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699413919\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362036Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362036Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699413919\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699462016\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699462016\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36204Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36204Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699462016\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699499779\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699499779\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362044Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362044Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699499779\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699546103\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699546103\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362049Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362049Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699546103\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699548245\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699548245\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362054Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362054Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699548245\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699586488\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699586488\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362059Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362059Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699586488\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699672920\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699672920\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362063Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362063Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699672920\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699758984\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699758984\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362067Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362067Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699758984\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699845788\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699845788\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36207Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36207Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699845788\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699932046\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699932046\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362074Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362074Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699932046\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1620\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1640\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1600\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1640" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700018448\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700018448\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362077Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362077Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700018448\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700104648\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700104648\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362082Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362082Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700104648\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700161474\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700161474\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362085Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362085Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700161474\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700163472\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700163472\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362089Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362089Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700163472\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700165039\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700165039\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362092Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362092Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700165039\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700166959\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700166959\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362096Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362096Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700166959\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700191527\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700191527\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362099Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362099Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700191527\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700235069\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700235069\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362103Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362103Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700235069\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700239667\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700239667\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362107Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362106Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700239667\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700243928\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700243928\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36211Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36211Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700243928\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700247114\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700247114\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362114Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362114Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700247114\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700277533\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700277533\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362118Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362118Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700277533\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700363919\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700363919\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362122Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362122Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700363919\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700450543\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700450543\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362125Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362125Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700450543\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700536589\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700536589\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362129Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362129Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700536589\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700622987\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700622987\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362132Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362132Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700622987\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700709582\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700709582\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362136Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362136Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700709582\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700795989\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700795989\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36214Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362139Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700795989\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700882466\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700882466\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362143Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362143Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700882466\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700968553\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700968553\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362147Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362147Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700968553\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1640\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1660\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1620\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1660" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701055441\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701055441\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36215Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36215Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701055441\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701123115\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701123115\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362154Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362154Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701123115\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701141938\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701141938\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362159Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362159Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701141938\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701227730\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701227730\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362162Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362162Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701227730\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701314402\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701314402\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362166Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362166Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701314402\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701400665\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701400665\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36217Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36217Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701400665\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701486978\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701486978\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362173Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362173Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701486978\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701660226\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701660226\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.362177Z\",\"modifiedAt\":\"2023-12-04T22:00:14.362177Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701660226\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701746618\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701746618\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T03:23:38.58486Z\",\"modifiedAt\":\"2023-12-05T03:23:38.58486Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701746618\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701832969\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701832969\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T03:22:50.002959Z\",\"modifiedAt\":\"2023-12-06T03:22:50.002959Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701832969\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701919484\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701919484\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T03:24:44.385514Z\",\"modifiedAt\":\"2023-12-07T03:24:44.385514Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701919484\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744870702\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744870702\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T06:23:52.43663Z\",\"modifiedAt\":\"2025-04-17T06:23:52.43663Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744870702\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744956500\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744956500\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-18T06:08:20.347791Z\",\"modifiedAt\":\"2025-04-18T06:08:20.347792Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744956500\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745042777\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745042777\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-19T06:06:17.964042Z\",\"modifiedAt\":\"2025-04-19T06:06:17.964042Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745042777\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745120760\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745120760\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-20T03:46:00.712088Z\",\"modifiedAt\":\"2025-04-20T03:46:00.712088Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745120760\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745389397\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745389397\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-23T06:23:17.684572Z\",\"modifiedAt\":\"2025-04-23T06:23:17.684572Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745389397\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745475378\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745475378\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-24T06:16:18.834716Z\",\"modifiedAt\":\"2025-04-24T06:16:18.834716Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745475378\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745561537\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745561537\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-25T06:12:17.647041Z\",\"modifiedAt\":\"2025-04-25T06:12:17.647041Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745561537\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745647758\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745647758\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-26T06:09:18.552504Z\",\"modifiedAt\":\"2025-04-26T06:09:18.552504Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745647758\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745734037\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745734037\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-27T06:07:17.877365Z\",\"modifiedAt\":\"2025-04-27T06:07:17.877365Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745734037\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1660\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1680\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1640\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1680" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745820857\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745820857\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-28T06:14:18.090981Z\",\"modifiedAt\":\"2025-04-28T06:14:18.090981Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745820857\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746166338\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746166338\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-02T06:12:18.59858Z\",\"modifiedAt\":\"2025-05-02T06:12:18.59858Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746166338\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746339438\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746339438\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-04T06:17:18.54446Z\",\"modifiedAt\":\"2025-05-04T06:17:18.54446Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746339438\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746425778\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746425778\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-05T06:16:18.67031Z\",\"modifiedAt\":\"2025-05-05T06:16:18.67031Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746425778\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746511818\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746511818\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-06T06:10:18.862647Z\",\"modifiedAt\":\"2025-05-06T06:10:18.862647Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746511818\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746598219\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746598219\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-07T06:10:19.357226Z\",\"modifiedAt\":\"2025-05-07T06:10:19.357226Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746598219\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746685037\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746685037\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-08T06:17:18.226542Z\",\"modifiedAt\":\"2025-05-08T06:17:18.226542Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746685037\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746771317\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746771317\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-09T06:15:17.775339Z\",\"modifiedAt\":\"2025-05-09T06:15:17.775339Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746771317\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746857357\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746857357\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-10T06:09:18.126225Z\",\"modifiedAt\":\"2025-05-10T06:09:18.126225Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746857357\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746944177\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746944177\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-11T06:16:18.201361Z\",\"modifiedAt\":\"2025-05-11T06:16:18.201361Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746944177\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747030579\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747030579\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-12T06:16:19.572318Z\",\"modifiedAt\":\"2025-05-12T06:16:19.572318Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747030579\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747117397\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747117397\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-13T06:23:18.113672Z\",\"modifiedAt\":\"2025-05-13T06:23:18.113672Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747117397\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747290259\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747290259\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-15T06:24:19.934507Z\",\"modifiedAt\":\"2025-05-15T06:24:19.934507Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747290259\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747376420\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747376420\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-16T06:20:20.692343Z\",\"modifiedAt\":\"2025-05-16T06:20:20.692343Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747376420\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747549338\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747549338\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-18T06:22:18.463541Z\",\"modifiedAt\":\"2025-05-18T06:22:18.463541Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747549338\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747635556\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747635556\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T06:19:17.075844Z\",\"modifiedAt\":\"2025-05-19T06:19:17.075844Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747635556\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747808417\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747808417\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T06:20:17.898265Z\",\"modifiedAt\":\"2025-05-21T06:20:17.898265Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747808417\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747549337\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747549337\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-18T06:22:18.057143Z\",\"modifiedAt\":\"2025-05-18T06:22:18.057143Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747549337\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747635556\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747635556\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T06:19:16.773778Z\",\"modifiedAt\":\"2025-05-19T06:19:16.773778Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747635556\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747808417\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747808417\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T06:20:17.565008Z\",\"modifiedAt\":\"2025-05-21T06:20:17.565008Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testjavacreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747808417\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1680\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1700\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1660\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1700" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696988048\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696988048\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363662Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363662Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696988048\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697074137\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697074137\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363666Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363666Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697074137\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697160381\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697160381\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363669Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363669Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697160381\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697161902\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697161902\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363673Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363673Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697161902\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247006\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247006\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363676Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363676Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247006\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247992\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247992\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36368Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36368Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697247992\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697333611\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697333611\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363683Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363683Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697333611\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697334277\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697334277\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363687Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363687Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697334277\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420268\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420268\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363691Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363691Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420268\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420654\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420654\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363694Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363694Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697420654\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697506107\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697506107\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363698Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363698Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697506107\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697507176\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697507176\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363702Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363701Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697507176\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697592585\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697592585\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363705Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363705Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697592585\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697593419\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697593419\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363709Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363709Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697593419\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697617783\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697617783\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363712Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363712Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697617783\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697618568\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697618568\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363716Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363716Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697618568\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697679226\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697679226\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363719Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363719Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697679226\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697680347\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697680347\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363723Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363723Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697680347\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697765552\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697765552\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363726Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363726Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697765552\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697766043\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697766043\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36373Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36373Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697766043\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1700\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1720\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1680\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1720" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852057\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852057\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363733Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363733Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852057\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852101\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852101\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363738Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363738Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697852101\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697938204\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697938204\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363741Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363741Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697938204\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697939567\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697939567\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363745Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363745Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697939567\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698024394\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698024394\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363749Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363749Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698024394\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698025915\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698025915\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363752Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363752Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698025915\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698111110\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698111110\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363756Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363756Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698111110\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698197695\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698197695\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363759Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363759Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698197695\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698198134\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698198134\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363763Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363763Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698198134\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284191\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284191\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363767Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363767Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284191\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284539\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284539\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36377Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36377Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698284539\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698370564\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698370564\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363774Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363774Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698370564\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698371164\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698371164\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363778Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363778Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698371164\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698456914\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698456914\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363782Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363782Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698456914\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698457493\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698457493\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363786Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363786Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698457493\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698544200\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698544200\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36379Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36379Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698544200\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698629629\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698629629\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363793Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363793Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698629629\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698715628\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698715628\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363797Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363797Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698715628\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698802666\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698802666\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3638Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3638Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698802666\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698803060\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698803060\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363804Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363804Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698803060\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1720\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1740\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1700\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1740" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698888587\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698888587\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363808Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363807Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698888587\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698974885\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698974885\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363811Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363811Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698974885\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699061281\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699061281\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363816Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363816Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699061281\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699062185\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699062185\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36382Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36382Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699062185\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148205\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148205\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363824Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363824Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148205\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148923\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148923\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363827Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363827Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699148923\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234336\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234336\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363831Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363831Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234336\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234734\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234734\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363835Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363835Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699234734\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699320998\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699320998\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363838Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363838Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699320998\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699321663\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699321663\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363842Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363842Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699321663\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699406987\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699406987\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363845Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363845Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699406987\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699407395\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699407395\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363849Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363849Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699407395\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699493589\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699493589\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363853Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363853Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699493589\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699494388\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699494388\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363856Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363856Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699494388\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699579573\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699579573\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36386Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36386Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699579573\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699580654\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699580654\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363864Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363863Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699580654\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670247\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670247\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363867Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363867Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670247\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699752867\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699752867\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363871Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363871Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699752867\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699839842\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699839842\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363875Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363875Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699839842\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699925945\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699925945\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363878Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363878Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699925945\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1740\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1760\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1720\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1760" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700011857\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700011857\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363882Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363882Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700011857\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700012740\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700012740\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363886Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363886Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700012740\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700098430\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700098430\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363889Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363889Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700098430\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700099173\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700099173\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363893Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363893Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700099173\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700184778\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700184778\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363897Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363897Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700184778\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700185555\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700185555\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363901Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363901Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700185555\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700230832\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700230832\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363904Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363904Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700230832\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700271819\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700271819\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363908Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363908Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700271819\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700272287\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700272287\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363912Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363912Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700272287\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700357839\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700357839\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363915Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363915Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700357839\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444149\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444149\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363918Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363918Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444149\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444610\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444610\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363922Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363922Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700444610\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700485178\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700485178\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363926Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363925Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700485178\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700530735\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700530735\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363929Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363929Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700530735\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700531500\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700531500\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363933Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363933Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700531500\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617030\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617030\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363937Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363937Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617030\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617963\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617963\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36394Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36394Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700617963\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703037\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703037\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363944Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363944Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703037\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703483\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703483\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363948Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363948Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700703483\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700789232\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700789232\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363951Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363951Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700789232\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1760\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1780\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1740\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1780" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700790001\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700790001\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363955Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363955Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700790001\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700876346\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700876346\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363959Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363959Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700876346\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700877054\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700877054\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363962Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363962Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700877054\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962464\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962464\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363966Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363966Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962464\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962962\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962962\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363971Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363971Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700962962\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701049150\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701049150\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363975Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363975Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701049150\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701050249\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701050249\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363978Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363978Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701050249\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701135309\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701135309\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363982Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363982Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701135309\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701136606\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701136606\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363985Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363985Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701136606\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701221450\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701221450\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363989Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363989Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701221450\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701222258\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701222258\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363992Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363992Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701222258\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701307677\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701307677\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.363996Z\",\"modifiedAt\":\"2023-12-04T22:00:14.363996Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701307677\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701308809\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701308809\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701308809\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701394579\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701394579\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364004Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364004Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701394579\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701395150\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701395150\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364007Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364007Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701395150\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701480741\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701480741\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364011Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364011Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701480741\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701481714\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701481714\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364014Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364014Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701481714\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567049\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567049\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364018Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364018Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567049\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567759\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567759\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364021Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364021Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701567759\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653628\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653628\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364025Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364025Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653628\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1780\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1800\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1760\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1800" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653977\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653977\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.364029Z\",\"modifiedAt\":\"2023-12-04T22:00:14.364029Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701653977\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701740207\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701740207\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T01:36:47.551404Z\",\"modifiedAt\":\"2023-12-05T01:36:47.551403Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701740207\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701741435\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701741435\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T01:57:15.761198Z\",\"modifiedAt\":\"2023-12-05T01:57:15.761198Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701741435\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826621\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826621\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T01:37:01.409591Z\",\"modifiedAt\":\"2023-12-06T01:37:01.409591Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826621\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826858\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826858\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T01:40:58.924042Z\",\"modifiedAt\":\"2023-12-06T01:40:58.924042Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701826858\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701912542\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701912542\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T01:29:02.24946Z\",\"modifiedAt\":\"2023-12-07T01:29:02.24946Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701912542\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701913557\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701913557\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T01:45:57.689122Z\",\"modifiedAt\":\"2023-12-07T01:45:57.689121Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testpythoncreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701913557\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696990903\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696990903\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365217Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365217Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696990903\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697051252\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697051252\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36522Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36522Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697051252\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697077324\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697077324\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365224Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365224Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697077324\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697163905\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697163905\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365227Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365227Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697163905\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697249771\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697249771\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365231Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365231Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697249771\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697336369\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697336369\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365235Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365235Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697336369\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697422837\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697422837\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365239Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365239Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697422837\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697509291\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697509291\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365243Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365243Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697509291\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697595493\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697595493\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365246Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365246Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697595493\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682097\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682097\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36525Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36525Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697682097\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697768469\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697768469\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365253Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365253Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697768469\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697854881\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697854881\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365257Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365257Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697854881\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697941199\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697941199\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36526Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36526Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697941199\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1800\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1820\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1780\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1820" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698027587\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698027587\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365264Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365264Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698027587\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114213\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114213\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365268Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365268Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698114213\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698200239\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698200239\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365271Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365271Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698200239\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698286706\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698286706\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365275Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365275Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698286706\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698373353\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698373353\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365278Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365278Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698373353\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698459790\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698459790\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365282Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365282Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698459790\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698547744\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698547744\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365286Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365286Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698547744\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698634091\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698634091\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365289Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365289Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698634091\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719003\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719003\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365293Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365293Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698719003\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698805366\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698805366\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365297Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365296Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698805366\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698891677\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698891677\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3653Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3653Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698891677\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698977893\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698977893\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365304Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365304Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698977893\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699064611\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699064611\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365307Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365307Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699064611\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151233\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151233\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365311Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365311Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699151233\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699237539\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699237539\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365316Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365316Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699237539\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699323545\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699323545\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36532Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36532Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699323545\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699409923\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699409923\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365323Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365323Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699409923\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699496326\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699496326\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365327Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365327Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699496326\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699582688\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699582688\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365331Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365331Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699582688\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699628784\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699628784\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365334Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365334Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699628784\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1820\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1840\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1800\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1840" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670342\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670342\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365338Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365338Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699670342\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699755853\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699755853\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365341Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365341Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699755853\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842048\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842048\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365345Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365345Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699842048\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699928414\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699928414\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365348Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365348Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699928414\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700014978\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700014978\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365352Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365352Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700014978\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700101415\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700101415\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365356Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365355Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700101415\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700187989\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700187989\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365359Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365359Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700187989\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274033\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274033\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365363Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365363Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700274033\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700360543\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700360543\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365366Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365366Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700360543\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700446938\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700446938\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36537Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36537Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700446938\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700533368\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700533368\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365374Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365374Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700533368\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700619824\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700619824\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365378Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365378Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700619824\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706075\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706075\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365381Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365381Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700706075\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700792366\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700792366\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365396Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365396Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700792366\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700878700\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700878700\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3654Z\",\"modifiedAt\":\"2023-12-04T22:00:14.3654Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700878700\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700965634\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700965634\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365404Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365404Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700965634\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701051778\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701051778\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365407Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365407Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701051778\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138448\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138448\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365411Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365411Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701138448\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701224784\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701224784\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365415Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365415Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701224784\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311228\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311228\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365419Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365419Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701311228\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1840\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1860\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1820\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1860" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701397457\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701397457\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365423Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365422Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701397457\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701483882\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701483882\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365426Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365426Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701483882\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570137\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570137\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36543Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36543Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701570137\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701656544\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701656544\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.365434Z\",\"modifiedAt\":\"2023-12-04T22:00:14.365434Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701656544\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701742922\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701742922\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T02:22:02.142813Z\",\"modifiedAt\":\"2023-12-05T02:22:02.142813Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701742922\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701829382\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701829382\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T02:23:02.159008Z\",\"modifiedAt\":\"2023-12-06T02:23:02.159008Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701829382\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701915733\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701915733\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T02:22:13.784031Z\",\"modifiedAt\":\"2023-12-07T02:22:13.784031Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701915733\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744868598\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744868598\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T05:43:19.290213Z\",\"modifiedAt\":\"2025-04-17T05:43:19.290213Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744868598\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744954884\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744954884\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-18T05:41:25.282831Z\",\"modifiedAt\":\"2025-04-18T05:41:25.282831Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744954884\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745038992\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745038992\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-19T05:03:12.524896Z\",\"modifiedAt\":\"2025-04-19T05:03:12.524896Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745038992\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745473640\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745473640\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-24T05:47:20.399771Z\",\"modifiedAt\":\"2025-04-24T05:47:20.399771Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745473640\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745991918\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745991918\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-30T05:45:18.670055Z\",\"modifiedAt\":\"2025-04-30T05:45:18.670055Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745991918\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746075012\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746075012\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-01T04:50:12.93543Z\",\"modifiedAt\":\"2025-05-01T04:50:12.93543Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746075012\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747115779\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747115779\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-13T05:56:19.809477Z\",\"modifiedAt\":\"2025-05-13T05:56:19.809477Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrubycreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747115779\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747545395\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747545395\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-18T05:16:35.66073Z\",\"modifiedAt\":\"2025-05-18T05:16:35.66073Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747545395\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747631752\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747631752\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T05:15:53.159955Z\",\"modifiedAt\":\"2025-05-19T05:15:53.159955Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747631752\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747718164\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747718164\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-20T05:16:04.505872Z\",\"modifiedAt\":\"2025-05-20T05:16:04.505872Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747718164\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747804577\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747804577\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T05:16:18.134677Z\",\"modifiedAt\":\"2025-05-21T05:16:18.134678Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747804577\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747891258\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747891258\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-22T05:20:59.385336Z\",\"modifiedAt\":\"2025-05-22T05:20:59.385336Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747891258\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747977587\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747977587\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-23T05:19:47.847906Z\",\"modifiedAt\":\"2025-05-23T05:19:47.847906Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747977587\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1860\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1880\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1840\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1880" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744866861\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744866861\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T05:18:43.869433Z\",\"modifiedAt\":\"2025-04-17T05:18:43.869433Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744866861\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744953457\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744953457\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-18T05:17:38.583643Z\",\"modifiedAt\":\"2025-04-18T05:17:38.583643Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744953457\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745039803\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745039803\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-19T05:16:43.756744Z\",\"modifiedAt\":\"2025-04-19T05:16:43.756744Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745039803\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745126064\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745126064\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-20T05:14:24.428666Z\",\"modifiedAt\":\"2025-04-20T05:14:24.428666Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745126064\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745212652\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745212652\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-21T05:17:32.678704Z\",\"modifiedAt\":\"2025-04-21T05:17:32.678705Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745212652\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745298868\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745298868\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-22T05:14:28.66704Z\",\"modifiedAt\":\"2025-04-22T05:14:28.66704Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745298868\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745385300\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745385300\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-23T05:15:00.410462Z\",\"modifiedAt\":\"2025-04-23T05:15:00.410462Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745385300\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745471891\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745471891\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-24T05:18:12.71562Z\",\"modifiedAt\":\"2025-04-24T05:18:12.71562Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745471891\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745558103\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745558103\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-25T05:15:03.55796Z\",\"modifiedAt\":\"2025-04-25T05:15:03.55796Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745558103\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745644751\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745644751\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-26T05:19:12.063097Z\",\"modifiedAt\":\"2025-04-26T05:19:12.063097Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745644751\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745730878\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745730878\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-27T05:14:38.548418Z\",\"modifiedAt\":\"2025-04-27T05:14:38.548418Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745730878\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745817417\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745817417\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-28T05:16:58.187859Z\",\"modifiedAt\":\"2025-04-28T05:16:58.18786Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745817417\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745990120\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745990120\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-30T05:15:20.366911Z\",\"modifiedAt\":\"2025-04-30T05:15:20.366911Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745990120\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746076823\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746076823\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-01T05:20:24.293177Z\",\"modifiedAt\":\"2025-05-01T05:20:24.293177Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746076823\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746162968\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746162968\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-02T05:16:08.773507Z\",\"modifiedAt\":\"2025-05-02T05:16:08.773507Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746162968\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746249599\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746249599\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-03T05:20:00.322054Z\",\"modifiedAt\":\"2025-05-03T05:20:00.322054Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746249599\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746335694\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746335694\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-04T05:14:54.563552Z\",\"modifiedAt\":\"2025-05-04T05:14:54.563552Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746335694\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746422154\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746422154\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-05T05:15:55.022751Z\",\"modifiedAt\":\"2025-05-05T05:15:55.022751Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746422154\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746508541\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746508541\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-06T05:15:42.003871Z\",\"modifiedAt\":\"2025-05-06T05:15:42.003871Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746508541\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746594894\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746594894\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-07T05:14:54.88161Z\",\"modifiedAt\":\"2025-05-07T05:14:54.881611Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746594894\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1880\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1900\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1860\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1900" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746681352\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746681352\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-08T05:15:52.363831Z\",\"modifiedAt\":\"2025-05-08T05:15:52.363831Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746681352\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746854096\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746854096\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-10T05:14:56.864244Z\",\"modifiedAt\":\"2025-05-10T05:14:56.864244Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746854096\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746940590\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746940590\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-11T05:16:30.681186Z\",\"modifiedAt\":\"2025-05-11T05:16:30.681186Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746940590\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747026960\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747026960\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-12T05:16:01.113522Z\",\"modifiedAt\":\"2025-05-12T05:16:01.113522Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747026960\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747113370\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747113370\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-13T05:16:10.37588Z\",\"modifiedAt\":\"2025-05-13T05:16:10.37588Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747113370\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747199854\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747199854\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-14T05:17:35.121217Z\",\"modifiedAt\":\"2025-05-14T05:17:35.121217Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747199854\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747286421\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747286421\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-15T05:20:21.952967Z\",\"modifiedAt\":\"2025-05-15T05:20:21.952967Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747286421\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747372746\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747372746\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-16T05:19:07.074303Z\",\"modifiedAt\":\"2025-05-16T05:19:07.074304Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747372746\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747458950\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747458950\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-17T05:15:51.070798Z\",\"modifiedAt\":\"2025-05-17T05:15:51.070798Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747458950\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747545395\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747545395\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-18T05:16:35.965644Z\",\"modifiedAt\":\"2025-05-18T05:16:35.965644Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747545395\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747631753\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747631753\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T05:15:53.362426Z\",\"modifiedAt\":\"2025-05-19T05:15:53.362426Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747631753\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747718164\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747718164\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-20T05:16:04.720175Z\",\"modifiedAt\":\"2025-05-20T05:16:04.720175Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747718164\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747804578\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747804578\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T05:16:18.448285Z\",\"modifiedAt\":\"2025-05-21T05:16:18.448285Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747804578\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747891259\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747891259\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-22T05:20:59.793331Z\",\"modifiedAt\":\"2025-05-22T05:20:59.793331Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747891259\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747977587\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747977587\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-23T05:19:48.291574Z\",\"modifiedAt\":\"2025-05-23T05:19:48.291574Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747977587\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747545395\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747545395\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-18T05:16:35.458884Z\",\"modifiedAt\":\"2025-05-18T05:16:35.458884Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747545395\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747631752\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747631752\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T05:15:52.955265Z\",\"modifiedAt\":\"2025-05-19T05:15:52.955265Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747631752\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747718164\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747718164\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-20T05:16:04.308326Z\",\"modifiedAt\":\"2025-05-20T05:16:04.308326Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747718164\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747804577\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747804577\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T05:16:17.931336Z\",\"modifiedAt\":\"2025-05-21T05:16:17.931336Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747804577\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747891258\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747891258\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-22T05:20:58.884227Z\",\"modifiedAt\":\"2025-05-22T05:20:58.884227Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747891258\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1900\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1920\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1880\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1920" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747977586\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747977586\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-23T05:19:47.41072Z\",\"modifiedAt\":\"2025-05-23T05:19:47.41072Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testrustcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747977586\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747543056\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747543056\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-18T04:37:36.672593Z\",\"modifiedAt\":\"2025-05-18T04:37:36.672593Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747543056\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747629643\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747629643\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T04:40:43.782715Z\",\"modifiedAt\":\"2025-05-19T04:40:43.782715Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747629643\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747653208\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747653208\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T11:13:29.124836Z\",\"modifiedAt\":\"2025-05-19T11:13:29.124836Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747653208\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747802205\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747802205\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T04:36:45.797932Z\",\"modifiedAt\":\"2025-05-21T04:36:45.797932Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747802205\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747826169\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747826169\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T11:16:09.400093Z\",\"modifiedAt\":\"2025-05-21T11:16:09.400093Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747826169\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747888853\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747888853\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-22T04:40:54.094473Z\",\"modifiedAt\":\"2025-05-22T04:40:54.094473Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747888853\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747912396\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747912396\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-22T11:13:17.055466Z\",\"modifiedAt\":\"2025-05-22T11:13:17.055466Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747912396\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747975060\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747975060\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-23T04:37:40.983948Z\",\"modifiedAt\":\"2025-05-23T04:37:40.983948Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747975060\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747998872\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747998872\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-23T11:14:33.231328Z\",\"modifiedAt\":\"2025-05-23T11:14:33.231328Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav21returnscreatedresponse1747998872\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696998129\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696998129\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366934Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366934Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1696998129\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697022755\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697022755\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366937Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366937Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697022755\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697084623\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697084623\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366941Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366941Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697084623\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697109203\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697109203\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366945Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366945Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697109203\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697170887\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697170887\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366948Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366948Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697170887\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697195567\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697195567\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366952Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366952Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697195567\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697257355\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697257355\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366955Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366955Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697257355\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697343679\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697343679\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366959Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366959Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697343679\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697429827\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697429827\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366963Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366963Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697429827\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697454598\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697454598\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366966Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366966Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697454598\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1920\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1940\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1900\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1940" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697516587\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697516587\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366969Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366969Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697516587\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697540955\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697540955\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366973Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366973Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697540955\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697602991\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697602991\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366977Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366977Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697602991\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697627596\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697627596\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36698Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36698Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697627596\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697689291\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697689291\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366985Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366984Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697689291\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697714084\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697714084\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366988Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366988Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697714084\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697775697\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697775697\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366992Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366992Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697775697\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697800474\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697800474\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366995Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366995Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697800474\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697862152\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697862152\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.366999Z\",\"modifiedAt\":\"2023-12-04T22:00:14.366999Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697862152\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697948611\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697948611\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367002Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367002Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1697948611\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698034868\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698034868\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367006Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367006Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698034868\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698059551\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698059551\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367009Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367009Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698059551\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698121029\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698121029\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367013Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367013Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698121029\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698146021\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698146021\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367016Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367016Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698146021\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698207662\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698207662\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36702Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36702Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698207662\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698232332\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698232332\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367024Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367024Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698232332\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698294033\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698294033\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367027Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367027Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698294033\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698318847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698318847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367031Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367031Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698318847\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698380472\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698380472\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367034Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367034Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698380472\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698404942\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698404942\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367038Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367038Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698404942\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1940\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1960\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1920\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1960" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698466989\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698466989\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367042Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367041Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698466989\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698553369\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698553369\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367046Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367046Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698553369\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698639827\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698639827\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36705Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36705Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698639827\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698664341\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698664341\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367054Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367054Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698664341\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698725828\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698725828\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367058Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367058Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698725828\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698812290\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698812290\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367062Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367062Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698812290\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698837168\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698837168\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367066Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367066Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698837168\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698898819\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698898819\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36707Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36707Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698898819\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698923378\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698923378\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367074Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367074Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698923378\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698985110\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698985110\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367078Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367078Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1698985110\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699009958\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699009958\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367082Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367082Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699009958\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699071421\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699071421\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367086Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367086Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699071421\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699158019\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699158019\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367089Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367089Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699158019\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699244257\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699244257\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367093Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367093Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699244257\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699269264\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699269264\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367098Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367098Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699269264\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699330780\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699330780\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367103Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367103Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699330780\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699355365\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699355365\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367109Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367109Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699355365\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699376561\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699376561\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367115Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367115Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699376561\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699417088\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699417088\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36712Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36712Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699417088\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699441739\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699441739\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367124Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367124Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699441739\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1960\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1980\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1940\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "1980" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699450147\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699450147\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367128Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367128Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699450147\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699503695\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699503695\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367132Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367132Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699503695\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699528448\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699528448\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367136Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367136Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699528448\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699590080\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699590080\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36714Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36714Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699590080\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699614763\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699614763\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367144Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367144Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699614763\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699676502\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699676502\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367148Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367148Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699676502\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699762849\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699762849\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367152Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367152Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699762849\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699849056\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699849056\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367156Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367156Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699849056\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699874080\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699874080\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36716Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36716Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699874080\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699935724\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699935724\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367164Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367164Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699935724\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699960353\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699960353\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367168Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367168Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1699960353\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700021862\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700021862\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367172Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367171Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700021862\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700046784\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700046784\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367175Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367175Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700046784\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700108512\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700108512\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367179Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367179Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700108512\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700132970\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700132970\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367183Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367183Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700132970\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700194688\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700194688\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367187Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367187Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700194688\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700219378\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700219378\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367191Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367191Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700219378\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700281016\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700281016\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367195Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367195Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700281016\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700367408\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700367408\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367199Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367199Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700367408\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700453847\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700453847\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367203Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367203Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700453847\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1980\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2000\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1960\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "2000" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700478556\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700478556\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367207Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367207Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700478556\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700540225\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700540225\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367211Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367211Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700540225\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700565284\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700565284\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367214Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367214Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700565284\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700595465\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700595465\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367218Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367218Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700595465\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700626640\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700626640\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367222Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367222Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700626640\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700651391\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700651391\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367226Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367225Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700651391\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700713038\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700713038\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367229Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367229Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700713038\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700737941\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700737941\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367233Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367233Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700737941\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700799484\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700799484\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367237Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367237Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700799484\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700824283\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700824283\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36724Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36724Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700824283\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700886140\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700886140\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367244Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367244Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700886140\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700972520\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700972520\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367247Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367247Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1700972520\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701058658\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701058658\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367251Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367251Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701058658\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701083690\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701083690\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367255Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367255Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701083690\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110733\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110733\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367258Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367258Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701110733\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701112836\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701112836\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367262Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367262Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701112836\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701114479\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701114479\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367265Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367265Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701114479\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701145329\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701145329\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367269Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367269Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701145329\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701169783\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701169783\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367273Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367273Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701169783\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701231454\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701231454\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367277Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367276Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701231454\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2000\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2020\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=1980\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "2020" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701256205\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701256205\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36728Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36728Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701256205\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701318124\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701318124\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367284Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367283Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701318124\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701342896\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701342896\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367287Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367287Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701342896\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701404274\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701404274\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367291Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367291Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701404274\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701429083\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701429083\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367294Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367294Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701429083\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701490958\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701490958\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367298Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367298Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701490958\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701577014\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701577014\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367302Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367302Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701577014\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701663453\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701663453\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.367305Z\",\"modifiedAt\":\"2023-12-04T22:00:14.367305Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701663453\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701688352\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701688352\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36731Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36731Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701688352\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701749828\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701749828\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T04:17:09.06367Z\",\"modifiedAt\":\"2023-12-05T04:17:09.06367Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701749828\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701774577\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701774577\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-05T11:09:37.535119Z\",\"modifiedAt\":\"2023-12-05T11:09:37.535119Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701774577\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701836294\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701836294\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T04:18:14.650844Z\",\"modifiedAt\":\"2023-12-06T04:18:14.650844Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701836294\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701861012\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701861012\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T11:10:12.852596Z\",\"modifiedAt\":\"2023-12-06T11:10:12.852596Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701861012\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701880303\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701880303\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T16:31:39.212989Z\",\"modifiedAt\":\"2023-12-06T16:31:39.212989Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701880303\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701882210\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701882210\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T17:03:26.088401Z\",\"modifiedAt\":\"2023-12-06T17:03:26.088401Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701882210\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701888073\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701888073\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T18:41:09.731267Z\",\"modifiedAt\":\"2023-12-06T18:41:09.731267Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701888073\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701889843\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701889843\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T19:10:39.525734Z\",\"modifiedAt\":\"2023-12-06T19:10:39.525734Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701889843\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701893179\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701893179\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T20:06:15.15474Z\",\"modifiedAt\":\"2023-12-06T20:06:15.15474Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701893179\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902198\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902198\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-06T22:36:34.350053Z\",\"modifiedAt\":\"2023-12-06T22:36:34.350052Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701902198\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701922661\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701922661\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T04:17:41.600723Z\",\"modifiedAt\":\"2023-12-07T04:17:41.600723Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701922661\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2020\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2040\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2000\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "2040" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701947381\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701947381\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T11:09:42.006122Z\",\"modifiedAt\":\"2023-12-07T11:09:42.006122Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1701947381\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744864568\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744864568\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T04:36:08.79037Z\",\"modifiedAt\":\"2025-04-17T04:36:08.79037Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744864568\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744888301\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744888301\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T11:15:32.175682Z\",\"modifiedAt\":\"2025-04-17T11:15:32.175682Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744888301\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744974804\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744974804\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-18T11:13:24.730586Z\",\"modifiedAt\":\"2025-04-18T11:13:24.730586Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1744974804\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745037210\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745037210\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-19T04:33:30.578521Z\",\"modifiedAt\":\"2025-04-19T04:33:30.578521Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745037210\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745123689\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745123689\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-20T04:34:49.742409Z\",\"modifiedAt\":\"2025-04-20T04:34:49.742409Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745123689\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745210059\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745210059\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-21T04:34:19.489526Z\",\"modifiedAt\":\"2025-04-21T04:34:19.489526Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745210059\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745296398\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745296398\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-22T04:33:18.436832Z\",\"modifiedAt\":\"2025-04-22T04:33:18.436832Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745296398\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745382857\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745382857\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-23T04:34:17.403558Z\",\"modifiedAt\":\"2025-04-23T04:34:17.403558Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745382857\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745406763\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745406763\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-23T11:12:44.125754Z\",\"modifiedAt\":\"2025-04-23T11:12:44.125754Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745406763\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745469204\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745469204\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-24T04:33:24.846908Z\",\"modifiedAt\":\"2025-04-24T04:33:24.846908Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745469204\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745493158\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745493158\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-24T11:12:38.969721Z\",\"modifiedAt\":\"2025-04-24T11:12:38.969721Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745493158\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745555641\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745555641\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-25T04:34:01.807608Z\",\"modifiedAt\":\"2025-04-25T04:34:01.807608Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745555641\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745728438\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745728438\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-27T04:33:59.245345Z\",\"modifiedAt\":\"2025-04-27T04:33:59.245345Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745728438\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745814865\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745814865\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-28T04:34:25.817215Z\",\"modifiedAt\":\"2025-04-28T04:34:25.817215Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745814865\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745839720\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745839720\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-28T11:28:40.566543Z\",\"modifiedAt\":\"2025-04-28T11:28:40.566543Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745839720\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745925124\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745925124\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-29T11:12:04.364306Z\",\"modifiedAt\":\"2025-04-29T11:12:04.364306Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745925124\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745987662\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745987662\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-30T04:34:22.4537Z\",\"modifiedAt\":\"2025-04-30T04:34:22.4537Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1745987662\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746074273\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746074273\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-01T04:37:54.248753Z\",\"modifiedAt\":\"2025-05-01T04:37:54.248753Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746074273\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746160521\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746160521\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-02T04:35:21.39165Z\",\"modifiedAt\":\"2025-05-02T04:35:21.39165Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746160521\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2040\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2060\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2020\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "2060" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746184494\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746184494\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-02T11:14:55.021217Z\",\"modifiedAt\":\"2025-05-02T11:14:55.021217Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746184494\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746246865\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746246865\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-03T04:34:25.856844Z\",\"modifiedAt\":\"2025-05-03T04:34:25.856844Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746246865\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746333318\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746333318\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-04T04:35:18.516633Z\",\"modifiedAt\":\"2025-05-04T04:35:18.516633Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746333318\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746419713\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746419713\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-05T04:35:13.456984Z\",\"modifiedAt\":\"2025-05-05T04:35:13.456984Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746419713\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746506068\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746506068\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-06T04:34:29.128644Z\",\"modifiedAt\":\"2025-05-06T04:34:29.128644Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746506068\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746592468\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746592468\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-07T04:34:28.439294Z\",\"modifiedAt\":\"2025-05-07T04:34:28.439294Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746592468\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746616365\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746616365\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-07T11:12:45.993086Z\",\"modifiedAt\":\"2025-05-07T11:12:45.993086Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746616365\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746678957\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746678957\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-08T04:35:58.157752Z\",\"modifiedAt\":\"2025-05-08T04:35:58.157752Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746678957\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746702778\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746702778\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-08T11:12:58.549208Z\",\"modifiedAt\":\"2025-05-08T11:12:58.549208Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746702778\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746765374\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746765374\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-09T04:36:14.875591Z\",\"modifiedAt\":\"2025-05-09T04:36:14.875591Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746765374\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746851659\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746851659\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-10T04:34:19.785178Z\",\"modifiedAt\":\"2025-05-10T04:34:19.785178Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1746851659\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747024665\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747024665\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-12T04:37:45.187777Z\",\"modifiedAt\":\"2025-05-12T04:37:45.187777Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747024665\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747048574\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747048574\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-12T11:16:14.594426Z\",\"modifiedAt\":\"2025-05-12T11:16:14.594426Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747048574\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747221182\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747221182\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-14T11:13:02.425147Z\",\"modifiedAt\":\"2025-05-14T11:13:02.425147Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747221182\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747307597\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747307597\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-15T11:13:17.960699Z\",\"modifiedAt\":\"2025-05-15T11:13:17.960699Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747307597\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747370390\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747370390\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-16T04:39:50.4643Z\",\"modifiedAt\":\"2025-05-16T04:39:50.4643Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747370390\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747393992\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747393992\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-16T11:13:12.382233Z\",\"modifiedAt\":\"2025-05-16T11:13:12.382233Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747393992\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747456659\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747456659\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-17T04:37:39.996598Z\",\"modifiedAt\":\"2025-05-17T04:37:39.996598Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747456659\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747543056\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747543056\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-18T04:37:36.879991Z\",\"modifiedAt\":\"2025-05-18T04:37:36.879991Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747543056\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747629643\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747629643\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T04:40:44.015327Z\",\"modifiedAt\":\"2025-05-19T04:40:44.015327Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747629643\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2060\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2080\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2040\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "2080" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747653209\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747653209\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T11:13:29.326812Z\",\"modifiedAt\":\"2025-05-19T11:13:29.326812Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747653209\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747802205\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747802205\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T04:36:45.847296Z\",\"modifiedAt\":\"2025-05-21T04:36:45.847296Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747802205\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747826169\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747826169\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T11:16:09.806549Z\",\"modifiedAt\":\"2025-05-21T11:16:09.806549Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747826169\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747888854\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747888854\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-22T04:40:54.53701Z\",\"modifiedAt\":\"2025-05-22T04:40:54.53701Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747888854\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747912396\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747912396\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-22T11:13:17.193107Z\",\"modifiedAt\":\"2025-05-22T11:13:17.193107Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747912396\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747975060\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747975060\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-23T04:37:41.032305Z\",\"modifiedAt\":\"2025-05-23T04:37:41.032305Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747975060\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747998873\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747998873\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-23T11:14:33.430236Z\",\"modifiedAt\":\"2025-05-23T11:14:33.430236Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav22returnscreatedresponse1747998873\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747543056\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747543056\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-18T04:37:36.55304Z\",\"modifiedAt\":\"2025-05-18T04:37:36.55304Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747543056\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747629643\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747629643\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T04:40:43.511889Z\",\"modifiedAt\":\"2025-05-19T04:40:43.511889Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747629643\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747653208\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747653208\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-19T11:13:28.923015Z\",\"modifiedAt\":\"2025-05-19T11:13:28.923015Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747653208\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747802205\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747802205\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-21T04:36:45.704846Z\",\"modifiedAt\":\"2025-05-21T04:36:45.704846Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747802205\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747912396\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747912396\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-22T11:13:16.85226Z\",\"modifiedAt\":\"2025-05-22T11:13:16.85226Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747912396\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747975059\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747975059\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-23T04:37:40.7557Z\",\"modifiedAt\":\"2025-05-23T04:37:40.7557Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747975059\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747998872\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747998872\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-05-23T11:14:32.927771Z\",\"modifiedAt\":\"2025-05-23T11:14:32.927771Z\",\"source\":\"schema\",\"definedBy\":\"service:default/service-testtypescriptcreateorupdateservicedefinitionusingschemav2returnscreatedresponse1747998872\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/shopist\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopist\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368043Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368043Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopist\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696983608\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1696983608\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368742Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368742Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696983608\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696984175\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1696984175\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368746Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368746Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696984175\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696984299\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1696984299\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36875Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368749Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1696984299\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697026342\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697026342\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368753Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368753Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697026342\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697027402\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697027402\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368757Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368757Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697027402\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2080\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2100\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2060\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "2100" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697027534\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697027534\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36876Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36876Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697027534\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697145279\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697145279\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368764Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368764Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697145279\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697145313\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697145313\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368767Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368767Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697145313\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697803646\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697803646\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368771Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368771Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697803646\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697805189\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697805189\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368775Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368775Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697805189\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697805336\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1697805336\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368778Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368778Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1697805336\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698108102\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698108102\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368782Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368782Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698108102\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698108184\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698108184\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368785Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368785Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698108184\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698236758\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698236758\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368789Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368789Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698236758\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698237057\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698237057\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368793Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368793Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698237057\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698237214\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698237214\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368796Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368796Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698237214\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698711330\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698711330\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.3688Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368799Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698711330\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698712533\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698712533\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368803Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368803Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698712533\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698712661\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698712661\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368807Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368807Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698712661\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698754219\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698754219\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368811Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368811Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698754219\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698755636\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698755636\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368815Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368814Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698755636\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698755769\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698755769\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368818Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368818Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698755769\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841369\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698841369\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368822Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368821Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841369\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841723\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698841723\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368825Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368825Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841723\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841850\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698841850\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368829Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368829Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698841850\"}}],\"meta\":{\"count\":20,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2100\",\"next\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2120\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2080\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/catalog/relation", + "query": [ + [ + "page[limit]", + "20" + ], + [ + "page[offset]", + "2120" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698864842\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1698864842\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368832Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368832Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1698864842\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1699144141\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1699144141\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.368836Z\",\"modifiedAt\":\"2023-12-04T22:00:14.368836Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1699144141\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1701303817\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1701303817\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-04T22:00:14.36884Z\",\"modifiedAt\":\"2023-12-04T22:00:14.36884Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1701303817\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1701950844\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1701950844\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2023-12-07T12:07:25.096685Z\",\"modifiedAt\":\"2023-12-07T12:07:25.096685Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1701950844\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1736435633\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1736435633\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-01-09T15:13:55.450517Z\",\"modifiedAt\":\"2025-01-09T15:13:55.450517Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1736435633\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744849138\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1744849138\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T00:23:59.971708Z\",\"modifiedAt\":\"2025-04-17T00:23:59.971708Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744849138\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744891800\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1744891800\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-17T12:12:49.226903Z\",\"modifiedAt\":\"2025-04-17T12:12:49.226903Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744891800\"}},{\"id\":\"team:default/my-team:RelationTypeOwns:service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744935673\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"my-team\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"tf-testaccdatadogservicedefinition_basicv2_2-local-1744935673\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2025-04-18T00:25:54.65101Z\",\"modifiedAt\":\"2025-04-18T00:25:54.651011Z\",\"source\":\"schema\",\"definedBy\":\"service:default/tf-testaccdatadogservicedefinition_basicv2_2-local-1744935673\"}},{\"id\":\"team:default/myteam:RelationTypeOwns:service:default/shopping-cart\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"myteam\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.351588Z\",\"modifiedAt\":\"2024-10-01T20:11:19.351588Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"team:default/myteam:RelationTypeOwns:service:default/shopping-cart-yee\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"myteam\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"type\":\"RelationTypeOwns\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.173693Z\",\"modifiedAt\":\"2024-08-27T19:57:31.173693Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}},{\"id\":\"team:default/opsTeam:RelationTypeOtherOwns:service:default/shopping-cart\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"opsTeam\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart\",\"namespace\":\"default\"},\"type\":\"RelationTypeOtherOwns\"},\"meta\":{\"createdAt\":\"2024-10-01T20:11:19.351586Z\",\"modifiedAt\":\"2024-10-01T20:11:19.351586Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart\"}},{\"id\":\"team:default/opsTeam:RelationTypeOtherOwns:service:default/shopping-cart-yee\",\"type\":\"relation\",\"attributes\":{\"from\":{\"kind\":\"team\",\"name\":\"opsTeam\",\"namespace\":\"default\"},\"to\":{\"kind\":\"service\",\"name\":\"shopping-cart-yee\",\"namespace\":\"default\"},\"type\":\"RelationTypeOtherOwns\"},\"meta\":{\"createdAt\":\"2024-08-27T19:57:31.17369Z\",\"modifiedAt\":\"2024-08-27T19:57:31.17369Z\",\"source\":\"schema\",\"definedBy\":\"service:default/shopping-cart-yee\"}}],\"meta\":{\"count\":12,\"includeCount\":0},\"links\":{\"self\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2120\",\"previous\":\"/api/v2/catalog/relation?page%5Blimit%5D=20\\u0026page%5Boffset%5D=2100\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of entity relations returns \"OK\" response with pagination", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/spans-metrics.json b/test-server-data/v2/spans-metrics.json new file mode 100644 index 0000000000..1ac5503309 --- /dev/null +++ b/test-server-data/v2/spans-metrics.json @@ -0,0 +1,492 @@ +{ + "feature": "Spans Metrics", + "recordings": [ + { + "feature": "Spans Metrics", + "frozen_at": "2023-06-07T12:04:58.134Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": false, + "path": "@duration" + }, + "filter": { + "query": "@http.status_code:200 service:my-service" + }, + "group_by": [ + { + "path": "resource_name", + "tag_name": "resource_name" + } + ] + }, + "id": "TestCreateaspanbasedmetricreturnsOKresponse1686139498", + "type": "spans_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"TestCreateaspanbasedmetricreturnsOKresponse1686139498\",\"attributes\":{\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"group_by\":[{\"path\":\"resource_name\",\"tag_name\":\"resource_name\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"spans_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/metrics/TestCreateaspanbasedmetricreturnsOKresponse1686139498", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a span-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "frozen_at": "2023-04-18T17:28:08.946Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": false, + "path": "@duration" + }, + "filter": { + "query": "source:Test-Delete_a_span_based_metric_returns_OK_response-1681838888" + }, + "group_by": [ + { + "path": "resource_name", + "tag_name": "resource_name" + } + ] + }, + "id": "Test-Delete_a_span_based_metric_returns_OK_response-1681838888", + "type": "spans_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Delete_a_span_based_metric_returns_OK_response_1681838888\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Delete_a_span_based_metric_returns_OK_response-1681838888\"},\"group_by\":[{\"path\":\"resource_name\",\"tag_name\":\"resource_name\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"spans_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/metrics/Test_Delete_a_span_based_metric_returns_OK_response_1681838888", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/metrics/Test_Delete_a_span_based_metric_returns_OK_response_1681838888", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"not_found(Metric with name 'Test_Delete_a_span_based_metric_returns_OK_response_1681838888' not found)\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete a span-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "frozen_at": "2023-06-07T12:05:41.045Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": false, + "path": "@duration" + }, + "filter": { + "query": "source:Test-Get_a_span_based_metric_returns_OK_response-1686139541" + }, + "group_by": [ + { + "path": "resource_name", + "tag_name": "resource_name" + } + ] + }, + "id": "Test-Get_a_span_based_metric_returns_OK_response-1686139541", + "type": "spans_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Get_a_span_based_metric_returns_OK_response_1686139541\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_span_based_metric_returns_OK_response-1686139541\"},\"group_by\":[{\"path\":\"resource_name\",\"tag_name\":\"resource_name\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"spans_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/apm/config/metrics/Test_Get_a_span_based_metric_returns_OK_response_1686139541", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Get_a_span_based_metric_returns_OK_response_1686139541\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_a_span_based_metric_returns_OK_response-1686139541\"},\"group_by\":[{\"path\":\"resource_name\",\"tag_name\":\"resource_name\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"spans_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/metrics/Test_Get_a_span_based_metric_returns_OK_response_1686139541", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a span-based metric returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "frozen_at": "2023-06-07T12:05:50.879Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": false, + "path": "@duration" + }, + "filter": { + "query": "source:Test-Get_all_span_based_metrics_returns_OK_response-1686139550" + }, + "group_by": [ + { + "path": "resource_name", + "tag_name": "resource_name" + } + ] + }, + "id": "Test-Get_all_span_based_metrics_returns_OK_response-1686139550", + "type": "spans_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Get_all_span_based_metrics_returns_OK_response_1686139550\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_span_based_metrics_returns_OK_response-1686139550\"},\"group_by\":[{\"path\":\"resource_name\",\"tag_name\":\"resource_name\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"spans_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/apm/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"tf_TestAccSpansMetric_import_local_1681996306\",\"attributes\":{\"filter\":{\"query\":\"@http.status_code:200 service:my-service\"},\"group_by\":[{\"path\":\"resource_name\",\"tag_name\":\"resource_name\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"spans_metrics\"},{\"id\":\"Test_Get_all_span_based_metrics_returns_OK_response_1686139550\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Get_all_span_based_metrics_returns_OK_response-1686139550\"},\"group_by\":[{\"path\":\"resource_name\",\"tag_name\":\"resource_name\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"spans_metrics\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/metrics/Test_Get_all_span_based_metrics_returns_OK_response_1686139550", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all span-based metrics returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans Metrics", + "frozen_at": "2023-06-07T12:05:59.490Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "aggregation_type": "distribution", + "include_percentiles": false, + "path": "@duration" + }, + "filter": { + "query": "source:Test-Update_a_span_based_metric_returns_OK_response-1686139559" + }, + "group_by": [ + { + "path": "resource_name", + "tag_name": "resource_name" + } + ] + }, + "id": "Test-Update_a_span_based_metric_returns_OK_response-1686139559", + "type": "spans_metrics" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/apm/config/metrics", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Update_a_span_based_metric_returns_OK_response_1686139559\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_span_based_metric_returns_OK_response-1686139559\"},\"group_by\":[{\"path\":\"resource_name\",\"tag_name\":\"resource_name\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"spans_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": { + "include_percentiles": false + }, + "filter": { + "query": "source:Test-Update_a_span_based_metric_returns_OK_response-1686139559-updated" + }, + "group_by": [ + { + "path": "resource_name", + "tag_name": "resource_name" + } + ] + }, + "type": "spans_metrics" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/apm/config/metrics/Test_Update_a_span_based_metric_returns_OK_response_1686139559", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"Test_Update_a_span_based_metric_returns_OK_response_1686139559\",\"attributes\":{\"filter\":{\"query\":\"source:Test-Update_a_span_based_metric_returns_OK_response-1686139559-updated\"},\"group_by\":[{\"path\":\"resource_name\",\"tag_name\":\"resource_name\"}],\"compute\":{\"aggregation_type\":\"distribution\",\"path\":\"@duration\",\"include_percentiles\":false}},\"type\":\"spans_metrics\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/apm/config/metrics/Test_Update_a_span_based_metric_returns_OK_response_1686139559", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": { + "content-type": "text/html; charset=utf-8" + }, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a span-based metric returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/spans.json b/test-server-data/v2/spans.json new file mode 100644 index 0000000000..c28ae2f78e --- /dev/null +++ b/test-server-data/v2/spans.json @@ -0,0 +1,458 @@ +{ + "feature": "Spans", + "recordings": [ + { + "feature": "Spans", + "frozen_at": "2023-06-29T09:58:48.500Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "compute": [ + { + "aggregation": "count", + "interval": "5m", + "type": "timeseries" + } + ], + "filter": { + "from": "now-15m", + "query": "*", + "to": "now" + } + }, + "type": "aggregate_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/spans/analytics/aggregate", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"bucket\",\"id\":\"6e46dab5-e68e-4697-82e6-a4ee241037e9\",\"attributes\":{\"compute\":{\"c0\":[{\"time\":\"2023-06-29T09:40:00.000Z\",\"value\":154},{\"time\":\"2023-06-29T09:45:00.000Z\",\"value\":513},{\"time\":\"2023-06-29T09:50:00.000Z\",\"value\":357},{\"time\":\"2023-06-29T09:55:00.000Z\",\"value\":196}]},\"by\":{}}}],\"meta\":{\"elapsed\":27,\"request_id\":\"pddv1ChZjQUlYNUd2UFFPdW94MXo0a25KdmVRIi4KHtxbw_pw4TotFiThwqXCJgIkQfm0Fiipg5dt0SkRehIMJcIJBiPBYooWmylp\",\"status\":\"done\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Aggregate spans returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans", + "frozen_at": "2023-06-29T10:49:14.160Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/spans/events", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AYkGxUNAAACwbKvWE7Iew35s\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":514696,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":48,\"name\":\"http-nio-8080-exec-5\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:56.164Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"449167507436699662\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"3601830290946202752\",\"start_timestamp\":\"2023-06-29T10:48:56.164Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"space_name:space_1\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"p-bosh\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"container_name:java-sample-app-spartancrimson_0\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"7817822160947910556\",\"type\":\"web\"}},{\"id\":\"AYkGxS-3AAAxy8mGz0R2CSM9\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":593726,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":49,\"name\":\"http-nio-8080-exec-6\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:51.12Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"6198058719623174754\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"2654534327444187106\",\"start_timestamp\":\"2023-06-29T10:48:51.12Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"4405383215745811724\",\"type\":\"web\"}},{\"id\":\"AYkGxRwvAABcR4lJbz6zlPkE\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":713605,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":53,\"name\":\"http-nio-8080-exec-10\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:46.076Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"1436093748613062352\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"2977372347050012901\",\"start_timestamp\":\"2023-06-29T10:48:46.076Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"space_name:space_1\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"p-bosh\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"358560587955417655\",\"type\":\"web\"}},{\"id\":\"AYkGxQipAAB8uAeyEmh0QtYC\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":948906,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":46,\"name\":\"http-nio-8080-exec-3\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:41.051Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"3129866022456684728\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"4287785059450014914\",\"start_timestamp\":\"2023-06-29T10:48:41.051Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"204522259346966059\",\"type\":\"web\"}},{\"id\":\"AYkGxPUgAAB42lb55Ab1_tZ1\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1077931,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":51,\"name\":\"http-nio-8080-exec-8\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:36.03Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"4195125631686517273\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"1297431508004914691\",\"start_timestamp\":\"2023-06-29T10:48:36.029Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"space_name:space_1\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"p-bosh\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"8491249581831854108\",\"type\":\"web\"}},{\"id\":\"AYkGxOGYAADB73oxRXktmBYm\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":877949,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":52,\"name\":\"http-nio-8080-exec-9\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:31.006Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"9113880885691680682\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"555056441597398253\",\"start_timestamp\":\"2023-06-29T10:48:31.006Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"2744660405908742810\",\"type\":\"web\"}},{\"id\":\"AYkGxM4PAAD3aDwAqJz8290t\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":825725,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":44,\"name\":\"http-nio-8080-exec-1\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:25.985Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"3138422063971174408\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"612025805363205148\",\"start_timestamp\":\"2023-06-29T10:48:25.985Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"space_name:space_1\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"p-bosh\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"container_name:java-sample-app-spartancrimson_0\",\"cf_instance_ip:10.0.4.8\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"3305078740163927766\",\"type\":\"web\"}},{\"id\":\"AYkGxLqOAAAzK60-2zIDFrw-\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1025852,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":45,\"name\":\"http-nio-8080-exec-2\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:20.961Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"5221468288941045604\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"383413896370368081\",\"start_timestamp\":\"2023-06-29T10:48:20.96Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"space_name:space_1\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"p-bosh\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"4520541865523656222\",\"type\":\"web\"}},{\"id\":\"AYkGxKcAAAATy7DNs3Ta_2Ri\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1156914,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":50,\"name\":\"http-nio-8080-exec-7\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:15.938Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"111160777994553411\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"9215279710332785390\",\"start_timestamp\":\"2023-06-29T10:48:15.937Z\",\"tags\":[\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"7089794561407816665\",\"type\":\"web\"}},{\"id\":\"AYkGxJN3AACSs55GKR2Hy2F-\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":931086,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":51,\"name\":\"http-nio-8080-exec-8\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:48:10.915Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"5849434087931512213\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"6003756355769294350\",\"start_timestamp\":\"2023-06-29T10:48:10.915Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"project:cf-platform-engineering-cipp2\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"9106672590904444063\",\"type\":\"web\"}}],\"meta\":{\"elapsed\":157,\"request_id\":\"pddv1ChYxbHNuZUFJcVRVeWZ5eGtka3d6SnpRIiwKHDweE2xgOBMwHRg7rKprOPqHvDyULkaCiXiOmi0SDCZX97b2Xx96YbK_Dg\",\"status\":\"done\",\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWWtHeEltampLTUhlZ0FBQUFBQUFBQVlBQUFBQUVGWmEwZDRTazR6UVVGRFUzTTFOVWRMVWpKSWVUSkdMUUFBQUNRQUFBQUFNREU0T1RBMll6UXRPV1EwTWkwMFpUQmpMV0V6TVRRdFlXUTVOVFJpTUdZM016QTQiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDo0ODoxMC45MTVaIiwtMTkzNTQ3Mjc3NF19\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/spans/events?filter%5Bfrom%5D=1688034854000\\u0026filter%5Bto%5D=1688035754000\\u0026page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWWtHeEltampLTUhlZ0FBQUFBQUFBQVlBQUFBQUVGWmEwZDRTazR6UVVGRFUzTTFOVWRMVWpKSWVUSkdMUUFBQUNRQUFBQUFNREU0T1RBMll6UXRPV1EwTWkwMFpUQmpMV0V6TVRRdFlXUTVOVFJpTUdZM016QTQiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDo0ODoxMC45MTVaIiwtMTkzNTQ3Mjc3NF19\\u0026page%5Blimit%5D=10\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of spans returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans", + "frozen_at": "2023-06-29T10:47:31.551Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/spans/events", + "query": [ + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AYkGw9AoAAAjORSx5nT-SgoN\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":990123,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":48,\"name\":\"http-nio-8080-exec-5\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:47:20.655Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"448280336884642854\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"7127979198849133880\",\"start_timestamp\":\"2023-06-29T10:47:20.655Z\",\"tags\":[\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"space_name:space_1\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"939688716533284796\",\"type\":\"web\"}},{\"id\":\"AYkGw7yfAAD8gstJ7gcCNUAm\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":790162,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":49,\"name\":\"http-nio-8080-exec-6\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:47:15.629Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"8447433361241490823\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"8192178375945869728\",\"start_timestamp\":\"2023-06-29T10:47:15.629Z\",\"tags\":[\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"container_name:java-sample-app-spartancrimson_0\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"2756345663404279847\",\"type\":\"web\"}}],\"meta\":{\"elapsed\":858,\"request_id\":\"pddv1ChZFaU5EVWxkX1FqU3ZFb3dkdWxVNXBBIiwKHP17RvwficAzSlvDdVk6gMQz7H8fnYtawdNZ3HUSDEJoWvIFEWjLOe8GTA\",\"status\":\"done\",\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWWtHdzdHdGxxTEVFUUFBQUFBQUFBQVlBQUFBQUVGWmEwZDNOM2xtUVVGRU9HZHpkRW8zWjJORFRsVkJiUUFBQUNRQUFBQUFNREU0T1RBMll6TXRZelUwWmkwMFpUWXlMV0k1WVdRdFl6azFNell5TWpkak4yTmsiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDo0NzoxNS42MjlaIiwtMTc2NzcxNzg3MV19\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/spans/events?filter%5Bfrom%5D=1688034751000\\u0026filter%5Bto%5D=1688035651000\\u0026page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWWtHdzdHdGxxTEVFUUFBQUFBQUFBQVlBQUFBQUVGWmEwZDNOM2xtUVVGRU9HZHpkRW8zWjJORFRsVkJiUUFBQUNRQUFBQUFNREU0T1RBMll6TXRZelUwWmkwMFpUWXlMV0k1WVdRdFl6azFNell5TWpkak4yTmsiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDo0NzoxNS42MjlaIiwtMTc2NzcxNzg3MV19\\u0026page%5Blimit%5D=2\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/spans/events", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFnQUFBWWtHdzdHdGxxTEVFUUFBQUFBQUFBQVlBQUFBQUVGWmEwZDNOM2xtUVVGRU9HZHpkRW8zWjJORFRsVkJiUUFBQUNRQUFBQUFNREU0T1RBMll6TXRZelUwWmkwMFpUWXlMV0k1WVdRdFl6azFNell5TWpkak4yTmsiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDo0NzoxNS42MjlaIiwtMTc2NzcxNzg3MV19" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AYkGw6kXAAASYY9WgCMoccQR\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1042821,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":53,\"name\":\"http-nio-8080-exec-10\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:47:10.593Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"1394316277479325161\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"3886766242556294952\",\"start_timestamp\":\"2023-06-29T10:47:10.592Z\",\"tags\":[\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"p-bosh\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"1280351704974743642\",\"type\":\"web\"}}],\"meta\":{\"elapsed\":201,\"request_id\":\"pddv1ChZ5ZEJWRk95R1REeUVKS3htOUdUQ3B3IiwKHJbvg-g2qsCqx4K59iHfDOfU_yq1_MYTXiSpqZMSDGKm-jQIz5udYaH73g\",\"status\":\"done\",\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWWtHdzRwa083amdBZ0FBQUFBQUFBQVlBQUFBQUVGWmEwZDNOVmRSUVVGQ01sbFRNV3N3WTNGdGVsQndad0FBQUNRQUFBQUFNREU0T1RBMll6TXRPR0UyTkMwMFpETmlMV0ZqWm1NdFlUaGxaR1kxTW1ZeE1Ua3kiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDo0NzowNS41NzJaIiwxMDAxOTcxNzE0XX0=\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/spans/events?filter%5Bfrom%5D=1688034753000\\u0026filter%5Bto%5D=1688035653000\\u0026page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWWtHdzRwa083amdBZ0FBQUFBQUFBQVlBQUFBQUVGWmEwZDNOVmRSUVVGQ01sbFRNV3N3WTNGdGVsQndad0FBQUNRQUFBQUFNREU0T1RBMll6TXRPR0UyTkMwMFpETmlMV0ZqWm1NdFlUaGxaR1kxTW1ZeE1Ua3kiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDo0NzowNS41NzJaIiwxMDAxOTcxNzE0XX0%3D\\u0026page%5Blimit%5D=2\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/spans/events", + "query": [ + [ + "page[cursor]", + "eyJhZnRlciI6IkFnQUFBWWtHdzRwa083amdBZ0FBQUFBQUFBQVlBQUFBQUVGWmEwZDNOVmRSUVVGQ01sbFRNV3N3WTNGdGVsQndad0FBQUNRQUFBQUFNREU0T1RBMll6TXRPR0UyTkMwMFpETmlMV0ZqWm1NdFlUaGxaR1kxTW1ZeE1Ua3kiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDo0NzowNS41NzJaIiwxMDAxOTcxNzE0XX0=" + ], + [ + "page[limit]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a list of spans returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Spans", + "frozen_at": "2023-06-29T09:59:48.126Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/spans/events", + "query": [ + [ + "filter[from]", + "now" + ], + [ + "filter[to]", + "now-1m" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid_argument(Field 'filter.from,to' is invalid: 'from' should be anterior to 'to')\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + } + ], + "scenario": "Get a list of spans returns \"Unprocessable Entity.\" response", + "version": "v2" + }, + { + "feature": "Spans", + "frozen_at": "2023-06-29T10:05:52.098Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "from": "now-15m", + "query": "*", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 25 + }, + "sort": "timestamp" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/spans/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AYkGkCVkAADfl3Kz2yGWhekz\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"application_name\":\"python-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"flask\",\"container_id\":\"8ac6ec63-4309-4461-5abc-6232\",\"duration\":3402932,\"env\":\"pcf-spartancrimson\",\"flask\":{\"endpoint\":\"hello_world\",\"url_rule\":\"/\",\"version\":\"2.1.2\"},\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"python\",\"process_id\":\"437\",\"runtime-id\":\"7f72d8756af44893a60b69a077caded8\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:52.475Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"python-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"9270756141854228302\",\"start_timestamp\":\"2023-06-29T09:50:52.472Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"uri:python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"version:1.0.0\",\"app_name:python-sample-app-spartancrimson\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_instance_guid:8ac6ec63-4309-4461-5abc-6232\",\"application_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"app_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"bosh_job:compute\",\"instance_group:compute\",\"application_name:python-sample-app-spartancrimson\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"container_name:8ac6ec63-4309-4461-5abc-6232\",\"container_id:8ac6ec63-4309-4461-5abc-6232\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_name:python-sample-app-spartancrimson_0\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"pcf-spartancrimson\",\"service:python-sample-app-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"app_guid:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"3740652481065462946\",\"type\":\"web\"}},{\"id\":\"AYkGkC-vAABH0bCfOzJhypRc\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"component\":\"http\",\"duration\":284180,\"env\":\"pcf-macaroniandcheese\",\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.81.0\"},\"language\":\"javascript\",\"process_id\":\"17\",\"runtime-id\":\"8f7e6bf6-f403-47ca-8a01-1f3c4b1a3dbd\",\"service\":\"nodejs-sample-app-macaroniandcheese\",\"span\":{\"kind\":\"server\"},\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:53.505Z\",\"env\":\"pcf-macaroniandcheese\",\"host\":\"compute-0-3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"a509a3c69ad1028d\",\"resource_name\":\"GET\",\"retained_by\":\"diversity_sampling\",\"service\":\"nodejs-sample-app-macaroniandcheese\",\"single_span\":false,\"span_id\":\"6671111812380197518\",\"start_timestamp\":\"2023-06-29T09:50:53.505Z\",\"tags\":[\"app_instance_guid:02018c68-0c39-4029-7431-70a3\",\"container_name:02018c68-0c39-4029-7431-70a3\",\"source:apm\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-b5abb4bac9b904313ba3\",\"bosh_id:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-b5abb4bac9b904313ba3\",\"cf-b5abb4bac9b904313ba3-compute\",\"cloudfoundry\",\"compute\",\"created_at:2023-06-20t20:03:20z\",\"deployment:cf-b5abb4bac9b904313ba3\",\"director:p-bosh\",\"env:pcf-macaroniandcheese\",\"id:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"index:0\",\"index:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"instance-id:4669805914138589973\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-1902d732-65b7-4e63-6eb6-6dd973b77185.c.cf-platform-engineering-cipp1.internal\",\"ip:10.0.4.8\",\"job:compute\",\"name:compute/3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"numeric_project_id:760108534255\",\"p-bosh\",\"p-bosh-cf-b5abb4bac9b904313ba3\",\"p-bosh-cf-b5abb4bac9b904313ba3-compute\",\"pcf-macaroniandcheese\",\"project:cf-platform-engineering-cipp1\",\"user_data:_server_:_name_:_vm-1902d732-65b7-4e63-6eb6-6dd973b77185_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"zone:us-central1-f\"],\"trace_id\":\"6671111812380197518\",\"type\":\"web\"}},{\"id\":\"AYkGkCmDAACdei5v_BmVb8ZW\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1027645,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":53,\"name\":\"http-nio-8080-exec-10\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:53.834Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"5407116910258794847\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"2283986807028514392\",\"start_timestamp\":\"2023-06-29T09:50:53.833Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"container_name:java-sample-app-spartancrimson_0\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"6252933144469107600\",\"type\":\"web\"}},{\"id\":\"AYkGkCmDAACqGvVFPx1pQMZW\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"tomcat-server\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1406493,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost\",\"hostname\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"jvm\",\"peer\":{\"ipv4\":\"127.0.0.1\",\"port\":34580},\"process_id\":\"43\",\"runtime-id\":\"f48d4c5f-f7ec-423a-a918-5f68d0f0dd9b\",\"servlet\":{\"context\":\"/\",\"path\":\"/\"},\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":53,\"name\":\"http-nio-8080-exec-10\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:53.834Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"5407116910258794847\",\"start_timestamp\":\"2023-06-29T09:50:53.833Z\",\"tags\":[\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"p-bosh\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"6252933144469107600\",\"type\":\"web\"}},{\"id\":\"AYkGkB75AABd9OUT73-M8j1h\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"26fe9f69-0347-4173-bab6-9ebc9046c466\",\"application_name\":\"go-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"net/http\",\"container_id\":\"00e3afdc-32d4-4df1-6be0-14f2\",\"duration\":79076,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost:8080\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"go\",\"process_id\":\"30\",\"runtime-id\":\"3220a876-6727-41c5-8537-036c7ec5b755\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"go-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:54.953Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"go-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"7006943107639417989\",\"start_timestamp\":\"2023-06-29T09:50:54.953Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"app_guid:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"compute\",\"container_name:00e3afdc-32d4-4df1-6be0-14f2\",\"label_key:label_value\",\"job:compute\",\"app_instance_guid:00e3afdc-32d4-4df1-6be0-14f2\",\"bosh_az:us-central1-f\",\"app_name:go-sample-app-spartancrimson\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_id:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"application_id:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"cf-6a3777f94c200f214075\",\"service:go-sample-app-spartancrimson\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_name:go-sample-app-spartancrimson\",\"container_name:go-sample-app-spartancrimson_0\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"pcf-spartancrimson\",\"uri:go-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"container_id:00e3afdc-32d4-4df1-6be0-14f2\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"7006943107639417989\",\"type\":\"web\"}},{\"id\":\"AYkGkDPhAAB78mZ9pO_e6T9j\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"cf_instance_ip\":\"10.0.4.8 container_id:dcad6411-00b3-4417-5284-298f application_id:5e3690f7-b373-4d90-a684-cafa9d73c97e application_name:nodejs-sample-app-spartancrimson instance_index:0 space_name:Space_1 uri:nodejs-sample-app-spartancrimson.apps.spartancrimson.cf-app.com buildpack_version:4.37.0\",\"component\":\"http\",\"duration\":495117,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"language\":\"javascript\",\"process_id\":\"49\",\"runtime-id\":\"b08fae27-3fbe-4d06-a472-1f1bd97edcad\",\"service\":\"nodejs-sample-app-spartancrimson\",\"span\":{\"kind\":\"server\"},\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:55.929Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"a509a3c69ad1028d\",\"resource_name\":\"GET\",\"retained_by\":\"diversity_sampling\",\"service\":\"nodejs-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"7151498394757197262\",\"start_timestamp\":\"2023-06-29T09:50:55.929Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"application_id:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"app_guid:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"container_name:dcad6411-00b3-4417-5284-298f\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"application_name:nodejs-sample-app-spartancrimson\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"app_id:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"cf-6a3777f94c200f214075\",\"app_name:nodejs-sample-app-spartancrimson\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_id:dcad6411-00b3-4417-5284-298f\",\"p-bosh\",\"uri:nodejs-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_name:nodejs-sample-app-spartancrimson_0\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"app_instance_guid:dcad6411-00b3-4417-5284-298f\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"service:nodejs-sample-app-spartancrimson\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"7151498394757197262\",\"type\":\"web\"}},{\"id\":\"AYkGkDjpAACY58W27O3MNguI\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"application_name\":\"python-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"flask\",\"container_id\":\"8ac6ec63-4309-4461-5abc-6232\",\"duration\":5075046,\"env\":\"pcf-spartancrimson\",\"flask\":{\"endpoint\":\"hello_world\",\"url_rule\":\"/\",\"version\":\"2.1.2\"},\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"python\",\"process_id\":\"437\",\"runtime-id\":\"7f72d8756af44893a60b69a077caded8\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:57.506Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"python-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"12722338338854837173\",\"start_timestamp\":\"2023-06-29T09:50:57.501Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"uri:python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"space_name:space_1\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"version:1.0.0\",\"app_name:python-sample-app-spartancrimson\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_instance_guid:8ac6ec63-4309-4461-5abc-6232\",\"application_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"app_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"bosh_job:compute\",\"instance_group:compute\",\"application_name:python-sample-app-spartancrimson\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"container_name:8ac6ec63-4309-4461-5abc-6232\",\"container_id:8ac6ec63-4309-4461-5abc-6232\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_name:python-sample-app-spartancrimson_0\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"service:python-sample-app-spartancrimson\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"app_guid:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"9803068093656868865\",\"type\":\"web\"}},{\"id\":\"AYkGkEM6AAD6QLfd8zOG9VZb\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"component\":\"http\",\"duration\":257568,\"env\":\"pcf-macaroniandcheese\",\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.81.0\"},\"language\":\"javascript\",\"process_id\":\"17\",\"runtime-id\":\"8f7e6bf6-f403-47ca-8a01-1f3c4b1a3dbd\",\"service\":\"nodejs-sample-app-macaroniandcheese\",\"span\":{\"kind\":\"server\"},\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:58.522Z\",\"env\":\"pcf-macaroniandcheese\",\"host\":\"compute-0-3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"a509a3c69ad1028d\",\"resource_name\":\"GET\",\"retained_by\":\"diversity_sampling\",\"service\":\"nodejs-sample-app-macaroniandcheese\",\"single_span\":false,\"span_id\":\"6581578424509420150\",\"start_timestamp\":\"2023-06-29T09:50:58.522Z\",\"tags\":[\"app_instance_guid:02018c68-0c39-4029-7431-70a3\",\"container_name:02018c68-0c39-4029-7431-70a3\",\"source:apm\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-b5abb4bac9b904313ba3\",\"bosh_id:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-b5abb4bac9b904313ba3\",\"cf-b5abb4bac9b904313ba3-compute\",\"cloudfoundry\",\"compute\",\"created_at:2023-06-20t20:03:20z\",\"deployment:cf-b5abb4bac9b904313ba3\",\"director:p-bosh\",\"env:pcf-macaroniandcheese\",\"id:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"index:0\",\"index:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"instance-id:4669805914138589973\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-1902d732-65b7-4e63-6eb6-6dd973b77185.c.cf-platform-engineering-cipp1.internal\",\"ip:10.0.4.8\",\"job:compute\",\"name:compute/3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"numeric_project_id:760108534255\",\"p-bosh\",\"p-bosh-cf-b5abb4bac9b904313ba3\",\"p-bosh-cf-b5abb4bac9b904313ba3-compute\",\"pcf-macaroniandcheese\",\"project:cf-platform-engineering-cipp1\",\"user_data:_server_:_name_:_vm-1902d732-65b7-4e63-6eb6-6dd973b77185_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"zone:us-central1-f\"],\"trace_id\":\"6581578424509420150\",\"type\":\"web\"}},{\"id\":\"AYkGkD0IAAD6QeMtBkv8CN44\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"tomcat-server\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1594528,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost\",\"hostname\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"jvm\",\"peer\":{\"ipv4\":\"127.0.0.1\",\"port\":34604},\"process_id\":\"43\",\"runtime-id\":\"f48d4c5f-f7ec-423a-a918-5f68d0f0dd9b\",\"servlet\":{\"context\":\"/\",\"path\":\"/\"},\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":49,\"name\":\"http-nio-8080-exec-6\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:58.856Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"7932852767190870180\",\"start_timestamp\":\"2023-06-29T09:50:58.855Z\",\"tags\":[\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"space_name:space_1\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"container_name:java-sample-app-spartancrimson_0\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"4097838600103622745\",\"type\":\"web\"}},{\"id\":\"AYkGkD0IAAD_TfsG2GecIN44\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1223628,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":49,\"name\":\"http-nio-8080-exec-6\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:58.856Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"7932852767190870180\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"6858500482118591216\",\"start_timestamp\":\"2023-06-29T09:50:58.855Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"4097838600103622745\",\"type\":\"web\"}},{\"id\":\"AYkGkEYJAAB8hx-ZNIz1QgNc\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"26fe9f69-0347-4173-bab6-9ebc9046c466\",\"application_name\":\"go-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"net/http\",\"container_id\":\"00e3afdc-32d4-4df1-6be0-14f2\",\"duration\":66922,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost:8080\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"go\",\"process_id\":\"30\",\"runtime-id\":\"3220a876-6727-41c5-8537-036c7ec5b755\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"go-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:50:59.973Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"go-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"6630423838849647442\",\"start_timestamp\":\"2023-06-29T09:50:59.973Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"app_guid:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"compute\",\"container_name:00e3afdc-32d4-4df1-6be0-14f2\",\"job:compute\",\"label_key:label_value\",\"app_instance_guid:00e3afdc-32d4-4df1-6be0-14f2\",\"bosh_az:us-central1-f\",\"app_name:go-sample-app-spartancrimson\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_id:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"application_id:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"cf-6a3777f94c200f214075\",\"service:go-sample-app-spartancrimson\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_name:go-sample-app-spartancrimson\",\"container_name:go-sample-app-spartancrimson_0\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"uri:go-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"container_id:00e3afdc-32d4-4df1-6be0-14f2\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"6630423838849647442\",\"type\":\"web\"}},{\"id\":\"AYkGkEdqAAC_Lg-d7N4ID3Us\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"cf_instance_ip\":\"10.0.4.8 container_id:dcad6411-00b3-4417-5284-298f application_id:5e3690f7-b373-4d90-a684-cafa9d73c97e application_name:nodejs-sample-app-spartancrimson instance_index:0 space_name:Space_1 uri:nodejs-sample-app-spartancrimson.apps.spartancrimson.cf-app.com buildpack_version:4.37.0\",\"component\":\"http\",\"duration\":4386475,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"language\":\"javascript\",\"process_id\":\"49\",\"runtime-id\":\"b08fae27-3fbe-4d06-a472-1f1bd97edcad\",\"service\":\"nodejs-sample-app-spartancrimson\",\"span\":{\"kind\":\"server\"},\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:00.959Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"a509a3c69ad1028d\",\"resource_name\":\"GET\",\"retained_by\":\"diversity_sampling\",\"service\":\"nodejs-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"3203689721572074853\",\"start_timestamp\":\"2023-06-29T09:51:00.955Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"application_id:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"app_guid:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"container_name:dcad6411-00b3-4417-5284-298f\",\"application_name:nodejs-sample-app-spartancrimson\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"app_id:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"cf-6a3777f94c200f214075\",\"app_name:nodejs-sample-app-spartancrimson\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_id:dcad6411-00b3-4417-5284-298f\",\"container_name:nodejs-sample-app-spartancrimson_0\",\"uri:nodejs-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"app_instance_guid:dcad6411-00b3-4417-5284-298f\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"service:nodejs-sample-app-spartancrimson\",\"cf_instance_ip:10.0.4.8\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"3203689721572074853\",\"type\":\"web\"}},{\"id\":\"AYkGkExwAADIdTUd8rztdpHy\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"application_name\":\"python-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"flask\",\"container_id\":\"8ac6ec63-4309-4461-5abc-6232\",\"duration\":4526268,\"env\":\"pcf-spartancrimson\",\"flask\":{\"endpoint\":\"hello_world\",\"url_rule\":\"/\",\"version\":\"2.1.2\"},\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"python\",\"process_id\":\"437\",\"runtime-id\":\"7f72d8756af44893a60b69a077caded8\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:02.533Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"python-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"13732938423051662315\",\"start_timestamp\":\"2023-06-29T09:51:02.529Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"uri:python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"version:1.0.0\",\"app_name:python-sample-app-spartancrimson\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_instance_guid:8ac6ec63-4309-4461-5abc-6232\",\"application_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"app_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"bosh_job:compute\",\"instance_group:compute\",\"application_name:python-sample-app-spartancrimson\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"container_name:8ac6ec63-4309-4461-5abc-6232\",\"container_id:8ac6ec63-4309-4461-5abc-6232\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_name:python-sample-app-spartancrimson_0\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"service:python-sample-app-spartancrimson\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"app_guid:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"17478897124928621820\",\"type\":\"web\"}},{\"id\":\"AYkGkFa-AADBciK22npFZ64m\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"component\":\"http\",\"duration\":279541,\"env\":\"pcf-macaroniandcheese\",\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.81.0\"},\"language\":\"javascript\",\"process_id\":\"17\",\"runtime-id\":\"8f7e6bf6-f403-47ca-8a01-1f3c4b1a3dbd\",\"service\":\"nodejs-sample-app-macaroniandcheese\",\"span\":{\"kind\":\"server\"},\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:03.54Z\",\"env\":\"pcf-macaroniandcheese\",\"host\":\"compute-0-3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"a509a3c69ad1028d\",\"resource_name\":\"GET\",\"retained_by\":\"diversity_sampling\",\"service\":\"nodejs-sample-app-macaroniandcheese\",\"single_span\":false,\"span_id\":\"2787325584578996790\",\"start_timestamp\":\"2023-06-29T09:51:03.54Z\",\"tags\":[\"app_instance_guid:02018c68-0c39-4029-7431-70a3\",\"container_name:02018c68-0c39-4029-7431-70a3\",\"source:apm\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-b5abb4bac9b904313ba3\",\"bosh_id:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-b5abb4bac9b904313ba3\",\"cf-b5abb4bac9b904313ba3-compute\",\"cloudfoundry\",\"compute\",\"created_at:2023-06-20t20:03:20z\",\"deployment:cf-b5abb4bac9b904313ba3\",\"director:p-bosh\",\"env:pcf-macaroniandcheese\",\"id:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"index:0\",\"index:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"instance-id:4669805914138589973\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-1902d732-65b7-4e63-6eb6-6dd973b77185.c.cf-platform-engineering-cipp1.internal\",\"ip:10.0.4.8\",\"job:compute\",\"name:compute/3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"numeric_project_id:760108534255\",\"p-bosh\",\"p-bosh-cf-b5abb4bac9b904313ba3\",\"p-bosh-cf-b5abb4bac9b904313ba3-compute\",\"pcf-macaroniandcheese\",\"project:cf-platform-engineering-cipp1\",\"user_data:_server_:_name_:_vm-1902d732-65b7-4e63-6eb6-6dd973b77185_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"zone:us-central1-f\"],\"trace_id\":\"2787325584578996790\",\"type\":\"web\"}},{\"id\":\"AYkGkFCQAADQk5wPJneKNxoU\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1157215,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":48,\"name\":\"http-nio-8080-exec-5\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:03.88Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"803234406780610866\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"336673670559389884\",\"start_timestamp\":\"2023-06-29T09:51:03.879Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"container_name:java-sample-app-spartancrimson_0\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"1448528526839826639\",\"type\":\"web\"}},{\"id\":\"AYkGkFCQAADIaesQoUDynhoU\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"tomcat-server\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1565132,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost\",\"hostname\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"jvm\",\"peer\":{\"ipv4\":\"127.0.0.1\",\"port\":36372},\"process_id\":\"43\",\"runtime-id\":\"f48d4c5f-f7ec-423a-a918-5f68d0f0dd9b\",\"servlet\":{\"context\":\"/\",\"path\":\"/\"},\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":48,\"name\":\"http-nio-8080-exec-5\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:03.88Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"803234406780610866\",\"start_timestamp\":\"2023-06-29T09:51:03.879Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"space_name:space_1\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version:1.0.0\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"p-bosh\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"container_name:java-sample-app-spartancrimson_0\",\"cf_instance_ip:10.0.4.8\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"1448528526839826639\",\"type\":\"web\"}},{\"id\":\"AYkGkEYJAABFV0Flh5MUiDAU\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"26fe9f69-0347-4173-bab6-9ebc9046c466\",\"application_name\":\"go-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"net/http\",\"container_id\":\"00e3afdc-32d4-4df1-6be0-14f2\",\"duration\":69706,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost:8080\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"go\",\"process_id\":\"30\",\"runtime-id\":\"3220a876-6727-41c5-8537-036c7ec5b755\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"go-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:04.994Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"go-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"1454749899682980213\",\"start_timestamp\":\"2023-06-29T09:51:04.994Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"app_guid:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"compute\",\"container_name:00e3afdc-32d4-4df1-6be0-14f2\",\"job:compute\",\"label_key:label_value\",\"app_instance_guid:00e3afdc-32d4-4df1-6be0-14f2\",\"bosh_az:us-central1-f\",\"app_name:go-sample-app-spartancrimson\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_id:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"application_id:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"cf-6a3777f94c200f214075\",\"service:go-sample-app-spartancrimson\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_name:go-sample-app-spartancrimson\",\"container_name:go-sample-app-spartancrimson_0\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"uri:go-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"container_id:00e3afdc-32d4-4df1-6be0-14f2\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"1454749899682980213\",\"type\":\"web\"}},{\"id\":\"AYkGkFrwAADQI65eLNUD3p07\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"cf_instance_ip\":\"10.0.4.8 container_id:dcad6411-00b3-4417-5284-298f application_id:5e3690f7-b373-4d90-a684-cafa9d73c97e application_name:nodejs-sample-app-spartancrimson instance_index:0 space_name:Space_1 uri:nodejs-sample-app-spartancrimson.apps.spartancrimson.cf-app.com buildpack_version:4.37.0\",\"component\":\"http\",\"duration\":802246,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"language\":\"javascript\",\"process_id\":\"49\",\"runtime-id\":\"b08fae27-3fbe-4d06-a472-1f1bd97edcad\",\"service\":\"nodejs-sample-app-spartancrimson\",\"span\":{\"kind\":\"server\"},\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:05.978Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"a509a3c69ad1028d\",\"resource_name\":\"GET\",\"retained_by\":\"diversity_sampling\",\"service\":\"nodejs-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"4295755302623693367\",\"start_timestamp\":\"2023-06-29T09:51:05.978Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"application_id:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"app_guid:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"container_name:dcad6411-00b3-4417-5284-298f\",\"application_name:nodejs-sample-app-spartancrimson\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"app_id:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"app_name:nodejs-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_id:dcad6411-00b3-4417-5284-298f\",\"container_name:nodejs-sample-app-spartancrimson_0\",\"p-bosh\",\"uri:nodejs-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"app_instance_guid:dcad6411-00b3-4417-5284-298f\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"service:nodejs-sample-app-spartancrimson\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"4295755302623693367\",\"type\":\"web\"}},{\"id\":\"AYkGkF_4AAChWpEcOPvO52q6\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"application_name\":\"python-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"flask\",\"container_id\":\"8ac6ec63-4309-4461-5abc-6232\",\"duration\":4274287,\"env\":\"pcf-spartancrimson\",\"flask\":{\"endpoint\":\"hello_world\",\"url_rule\":\"/\",\"version\":\"2.1.2\"},\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"python\",\"process_id\":\"437\",\"runtime-id\":\"7f72d8756af44893a60b69a077caded8\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:07.559Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"python-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"4518528746064694296\",\"start_timestamp\":\"2023-06-29T09:51:07.555Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"uri:python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"version:1.0.0\",\"app_name:python-sample-app-spartancrimson\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_instance_guid:8ac6ec63-4309-4461-5abc-6232\",\"application_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"app_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"application_name:python-sample-app-spartancrimson\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"container_name:8ac6ec63-4309-4461-5abc-6232\",\"cf-6a3777f94c200f214075\",\"container_id:8ac6ec63-4309-4461-5abc-6232\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_name:python-sample-app-spartancrimson_0\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"service:python-sample-app-spartancrimson\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"app_guid:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"13432640373886518168\",\"type\":\"web\"}},{\"id\":\"AYkGkGpGAACF-GPdmH75km9F\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"component\":\"http\",\"duration\":293457,\"env\":\"pcf-macaroniandcheese\",\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.81.0\"},\"language\":\"javascript\",\"process_id\":\"17\",\"runtime-id\":\"8f7e6bf6-f403-47ca-8a01-1f3c4b1a3dbd\",\"service\":\"nodejs-sample-app-macaroniandcheese\",\"span\":{\"kind\":\"server\"},\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:08.565Z\",\"env\":\"pcf-macaroniandcheese\",\"host\":\"compute-0-3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"a509a3c69ad1028d\",\"resource_name\":\"GET\",\"retained_by\":\"diversity_sampling\",\"service\":\"nodejs-sample-app-macaroniandcheese\",\"single_span\":false,\"span_id\":\"5003435178375377658\",\"start_timestamp\":\"2023-06-29T09:51:08.565Z\",\"tags\":[\"app_instance_guid:02018c68-0c39-4029-7431-70a3\",\"container_name:02018c68-0c39-4029-7431-70a3\",\"source:apm\",\"bosh_address:10.0.4.8\",\"bosh_az:us-central1-f\",\"bosh_deployment:cf-b5abb4bac9b904313ba3\",\"bosh_id:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"bosh_index:0\",\"bosh_ip:10.0.4.8\",\"bosh_job:compute\",\"bosh_name:compute\",\"cf-b5abb4bac9b904313ba3\",\"cf-b5abb4bac9b904313ba3-compute\",\"cloudfoundry\",\"compute\",\"created_at:2023-06-20t20:03:20z\",\"deployment:cf-b5abb4bac9b904313ba3\",\"director:p-bosh\",\"env:pcf-macaroniandcheese\",\"id:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"index:0\",\"index:3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"instance-id:4669805914138589973\",\"instance-type:n1-highmem-2\",\"instance_group:compute\",\"internal-hostname:vm-1902d732-65b7-4e63-6eb6-6dd973b77185.c.cf-platform-engineering-cipp1.internal\",\"ip:10.0.4.8\",\"job:compute\",\"name:compute/3c23ebc5-96fa-4282-b912-d7eed82153a3\",\"numeric_project_id:760108534255\",\"p-bosh\",\"p-bosh-cf-b5abb4bac9b904313ba3\",\"p-bosh-cf-b5abb4bac9b904313ba3-compute\",\"pcf-macaroniandcheese\",\"project:cf-platform-engineering-cipp1\",\"user_data:_server_:_name_:_vm-1902d732-65b7-4e63-6eb6-6dd973b77185_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\",\"zone:us-central1-f\"],\"trace_id\":\"5003435178375377658\",\"type\":\"web\"}},{\"id\":\"AYkGkGQXAACPlSiDaRkB55UX\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"tomcat-server\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1301452,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost\",\"hostname\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"jvm\",\"peer\":{\"ipv4\":\"127.0.0.1\",\"port\":36408},\"process_id\":\"43\",\"runtime-id\":\"f48d4c5f-f7ec-423a-a918-5f68d0f0dd9b\",\"servlet\":{\"context\":\"/\",\"path\":\"/\"},\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":50,\"name\":\"http-nio-8080-exec-7\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:08.902Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"7077482257038748526\",\"start_timestamp\":\"2023-06-29T09:51:08.901Z\",\"tags\":[\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"space_name:space_1\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"job:compute\",\"label_key:label_value\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"container_name:java-sample-app-spartancrimson_0\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"1699342955512709833\",\"type\":\"web\"}},{\"id\":\"AYkGkGQXAAA2H9YhhShVjpUX\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"application_name\":\"java-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"spring-web-controller\",\"container_id\":\"a5818728-ea66-4c17-551e-20ed\",\"duration\":1030270,\"env\":\"pcf-spartancrimson\",\"instance_index\":\"0\",\"language\":\"jvm\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"thread\":{\"id\":50,\"name\":\"http-nio-8080-exec-7\"},\"uri\":\"java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:08.902Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"7077482257038748526\",\"resource_hash\":\"7b7c528ae49eecb8\",\"resource_name\":\"Controller.index\",\"retained_by\":\"diversity_sampling\",\"service\":\"java-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"5726131752023301179\",\"start_timestamp\":\"2023-06-29T09:51:08.901Z\",\"tags\":[\"foo:bar\",\"app_instance_guid:a5818728-ea66-4c17-551e-20ed\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"app_guid:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"app_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"space_name:space_1\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"uri:java-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"container_id:a5818728-ea66-4c17-551e-20ed\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"application_name:java-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_id:cfeedbda-ce30-4f8e-bd4a-fb5f7e1dfa0f\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"container_name:a5818728-ea66-4c17-551e-20ed\",\"service:java-sample-app-spartancrimson\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"app_name:java-sample-app-spartancrimson\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"container_name:java-sample-app-spartancrimson_0\",\"cf_instance_ip:10.0.4.8\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"1699342955512709833\",\"type\":\"web\"}},{\"id\":\"AYkGkG0YAABbB9PrT-R19PwT\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"26fe9f69-0347-4173-bab6-9ebc9046c466\",\"application_name\":\"go-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"net/http\",\"container_id\":\"00e3afdc-32d4-4df1-6be0-14f2\",\"duration\":59912,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost:8080\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"go\",\"process_id\":\"30\",\"runtime-id\":\"3220a876-6727-41c5-8537-036c7ec5b755\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"go-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:10.015Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"go-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"1440128135446434250\",\"start_timestamp\":\"2023-06-29T09:51:10.015Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"app_guid:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"compute\",\"container_name:00e3afdc-32d4-4df1-6be0-14f2\",\"job:compute\",\"label_key:label_value\",\"app_instance_guid:00e3afdc-32d4-4df1-6be0-14f2\",\"bosh_az:us-central1-f\",\"app_name:go-sample-app-spartancrimson\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_id:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"application_id:26fe9f69-0347-4173-bab6-9ebc9046c466\",\"bosh_job:compute\",\"instance_group:compute\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"cf-6a3777f94c200f214075\",\"service:go-sample-app-spartancrimson\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"application_name:go-sample-app-spartancrimson\",\"container_name:go-sample-app-spartancrimson_0\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"uri:go-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"container_id:00e3afdc-32d4-4df1-6be0-14f2\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"1440128135446434250\",\"type\":\"web\"}},{\"id\":\"AYkGkG54AAD6_VesFZniXsZC\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"cf_instance_ip\":\"10.0.4.8 container_id:dcad6411-00b3-4417-5284-298f application_id:5e3690f7-b373-4d90-a684-cafa9d73c97e application_name:nodejs-sample-app-spartancrimson instance_index:0 space_name:Space_1 uri:nodejs-sample-app-spartancrimson.apps.spartancrimson.cf-app.com buildpack_version:4.37.0\",\"component\":\"http\",\"duration\":642822,\"env\":\"pcf-spartancrimson\",\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"language\":\"javascript\",\"process_id\":\"49\",\"runtime-id\":\"b08fae27-3fbe-4d06-a472-1f1bd97edcad\",\"service\":\"nodejs-sample-app-spartancrimson\",\"span\":{\"kind\":\"server\"},\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:11.001Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"a509a3c69ad1028d\",\"resource_name\":\"GET\",\"retained_by\":\"diversity_sampling\",\"service\":\"nodejs-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"4811688501360551368\",\"start_timestamp\":\"2023-06-29T09:51:11.001Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"application_id:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"version:1.0.0\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"created_at:2023-06-19t07:53:15z\",\"app_guid:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"container_name:dcad6411-00b3-4417-5284-298f\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"application_name:nodejs-sample-app-spartancrimson\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"app_id:5e3690f7-b373-4d90-a684-cafa9d73c97e\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"app_name:nodejs-sample-app-spartancrimson\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_id:dcad6411-00b3-4417-5284-298f\",\"container_name:nodejs-sample-app-spartancrimson_0\",\"uri:nodejs-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"app_instance_guid:dcad6411-00b3-4417-5284-298f\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"service:nodejs-sample-app-spartancrimson\",\"cf_instance_ip:10.0.4.8\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"director:p-bosh\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"4811688501360551368\",\"type\":\"web\"}},{\"id\":\"AYkGkHOBAAC42zH5S88riO26\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"application_name\":\"python-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"flask\",\"container_id\":\"8ac6ec63-4309-4461-5abc-6232\",\"duration\":3885812,\"env\":\"pcf-spartancrimson\",\"flask\":{\"endpoint\":\"hello_world\",\"url_rule\":\"/\",\"version\":\"2.1.2\"},\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"python\",\"process_id\":\"437\",\"runtime-id\":\"7f72d8756af44893a60b69a077caded8\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T09:51:12.585Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"python-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"13370186067040789473\",\"start_timestamp\":\"2023-06-29T09:51:12.582Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"uri:python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"version:1.0.0\",\"app_name:python-sample-app-spartancrimson\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_instance_guid:8ac6ec63-4309-4461-5abc-6232\",\"application_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"app_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"application_name:python-sample-app-spartancrimson\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"container_name:8ac6ec63-4309-4461-5abc-6232\",\"cf-6a3777f94c200f214075\",\"container_id:8ac6ec63-4309-4461-5abc-6232\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_name:python-sample-app-spartancrimson_0\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"pcf-spartancrimson\",\"service:python-sample-app-spartancrimson\",\"org_name:org_1\",\"bosh_ip:10.0.4.8\",\"bosh_name:compute\",\"cloudfoundry\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"app_guid:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"13469615109402324718\",\"type\":\"web\"}}],\"meta\":{\"elapsed\":88,\"request_id\":\"pddv1ChZjUlZPVGV5WVNFS1RKNW4zR3R3RnhBIi0KHZyFCoH2N3eHkR1DXTXA5oC-MZmH2KcFa0lIMEc-Egxy4r5txk9li1pxyr0\",\"status\":\"done\",\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWWtHa0dESlFDNEplZ0FBQUFBQUFBQVlBQUFBQUVGWmEwZHJTRTlDUVVGRE5ESjZTRFZUT0RoeWFVOHlOZ0FBQUNRQUFBQUFNREU0T1RBMk9UY3RPRGRsWmkwMFpqQmpMVGhoWTJRdE5tTTFNakptT1RSbVpXRTQiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQwOTo1MToxMi41ODVaIiwxMDc2NzU4OTA2XX0=\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/spans/events?filter%5Bfrom%5D=1688032252000\\u0026filter%5Bquery%5D=%2A\\u0026filter%5Bto%5D=1688033152000\\u0026page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWWtHa0dESlFDNEplZ0FBQUFBQUFBQVlBQUFBQUVGWmEwZHJTRTlDUVVGRE5ESjZTRFZUT0RoeWFVOHlOZ0FBQUNRQUFBQUFNREU0T1RBMk9UY3RPRGRsWmkwMFpqQmpMVGhoWTJRdE5tTTFNakptT1RSbVpXRTQiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQwOTo1MToxMi41ODVaIiwxMDc2NzU4OTA2XX0%3D\\u0026page%5Blimit%5D=25\\u0026sort=timestamp\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search spans returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Spans", + "frozen_at": "2023-06-29T10:52:06.776Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "from": "now-15m", + "query": "service:python*", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 2 + }, + "sort": "timestamp" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/spans/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AYkGun04AAAo1YWD8PZ5wxoT\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"application_name\":\"python-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"flask\",\"container_id\":\"8ac6ec63-4309-4461-5abc-6232\",\"duration\":4218725,\"env\":\"pcf-spartancrimson\",\"flask\":{\"endpoint\":\"hello_world\",\"url_rule\":\"/\",\"version\":\"2.1.2\"},\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"python\",\"process_id\":\"437\",\"runtime-id\":\"7f72d8756af44893a60b69a077caded8\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:37:09.221Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"python-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"12174885344805365765\",\"start_timestamp\":\"2023-06-29T10:37:09.217Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"uri:python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"version:1.0.0\",\"app_name:python-sample-app-spartancrimson\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_instance_guid:8ac6ec63-4309-4461-5abc-6232\",\"application_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"app_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"bosh_job:compute\",\"instance_group:compute\",\"application_name:python-sample-app-spartancrimson\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"container_name:8ac6ec63-4309-4461-5abc-6232\",\"cf-6a3777f94c200f214075\",\"container_id:8ac6ec63-4309-4461-5abc-6232\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_name:python-sample-app-spartancrimson_0\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"instance-id:7569151968447150010\",\"index:0\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"service:python-sample-app-spartancrimson\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"app_guid:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"1376633447483012831\",\"type\":\"web\"}},{\"id\":\"AYkGupDBAACn0_VTeXCyw8iL\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"application_name\":\"python-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"flask\",\"container_id\":\"8ac6ec63-4309-4461-5abc-6232\",\"duration\":5037530,\"env\":\"pcf-spartancrimson\",\"flask\":{\"endpoint\":\"hello_world\",\"url_rule\":\"/\",\"version\":\"2.1.2\"},\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"python\",\"process_id\":\"437\",\"runtime-id\":\"7f72d8756af44893a60b69a077caded8\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:37:14.249Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"python-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"17156680518146914707\",\"start_timestamp\":\"2023-06-29T10:37:14.244Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"uri:python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"project:cf-platform-engineering-cipp2\",\"space_name:space_1\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"version:1.0.0\",\"app_name:python-sample-app-spartancrimson\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_instance_guid:8ac6ec63-4309-4461-5abc-6232\",\"application_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"app_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"bosh_job:compute\",\"instance_group:compute\",\"application_name:python-sample-app-spartancrimson\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"container_name:8ac6ec63-4309-4461-5abc-6232\",\"cf-6a3777f94c200f214075\",\"container_id:8ac6ec63-4309-4461-5abc-6232\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_name:python-sample-app-spartancrimson_0\",\"p-bosh\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"zone:us-central1-f\",\"numeric_project_id:946413340424\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"service:python-sample-app-spartancrimson\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"director:p-bosh\",\"app_guid:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"10072306532714635001\",\"type\":\"web\"}}],\"meta\":{\"elapsed\":119,\"request_id\":\"pddv1ChZuakMtMWlvdlJ4V0lJak9EcHU2TEJ3Ii0KHVlO2NOBwN8iC_DRWp_2gjDOZaZaJKQAA7kb0dm9Egx4l7CkOLtGNcaMVIE\",\"status\":\"done\",\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWWtHdW9TSmhsc20td0FBQUFBQUFBQVlBQUFBQUVGWmEwZDFjRVJDUVVGRGJqQmZWbFJsV0VONWR6aHBUQUFBQUNRQUFBQUFNREU0T1RBMll6QXROVEZrT0MwME5EYzVMV0ZsT0RndE56WXdZbVl4TldRM016QXkiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDozNzoxNC4yNDlaIiwtMjA0MDg0NjU5N119\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/spans/events?filter%5Bfrom%5D=1688035027000\\u0026filter%5Bquery%5D=service%3Apython%2A\\u0026filter%5Bto%5D=1688035927000\\u0026page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWWtHdW9TSmhsc20td0FBQUFBQUFBQVlBQUFBQUVGWmEwZDFjRVJDUVVGRGJqQmZWbFJsV0VONWR6aHBUQUFBQUNRQUFBQUFNREU0T1RBMll6QXROVEZrT0MwME5EYzVMV0ZsT0RndE56WXdZbVl4TldRM016QXkiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDozNzoxNC4yNDlaIiwtMjA0MDg0NjU5N119\\u0026page%5Blimit%5D=2\\u0026sort=timestamp\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "from": "now-15m", + "query": "service:python*", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFnQUFBWWtHdW9TSmhsc20td0FBQUFBQUFBQVlBQUFBQUVGWmEwZDFjRVJDUVVGRGJqQmZWbFJsV0VONWR6aHBUQUFBQUNRQUFBQUFNREU0T1RBMll6QXROVEZrT0MwME5EYzVMV0ZsT0RndE56WXdZbVl4TldRM016QXkiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDozNzoxNC4yNDlaIiwtMjA0MDg0NjU5N119", + "limit": 2 + }, + "sort": "timestamp" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/spans/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"AYkGuqRIAAC1Q6SQTHyaHA2u\",\"type\":\"spans\",\"attributes\":{\"custom\":{\"application_id\":\"3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"application_name\":\"python-sample-app-spartancrimson\",\"buildpack_version\":\"4.37.0\",\"cf_instance_ip\":\"10.0.4.8\",\"component\":\"flask\",\"container_id\":\"8ac6ec63-4309-4461-5abc-6232\",\"duration\":5749377,\"env\":\"pcf-spartancrimson\",\"flask\":{\"endpoint\":\"hello_world\",\"url_rule\":\"/\",\"version\":\"2.1.2\"},\"http\":{\"host\":\"localhost\",\"method\":\"GET\",\"path_group\":\"/\",\"route\":\"/\",\"status_code\":\"200\",\"url\":\"http://localhost:8080/\",\"url_details\":{\"host\":\"localhost\",\"path\":\"/\",\"port\":\"8080\",\"scheme\":\"http\"},\"useragent\":\"curl/7.58.0\"},\"instance_index\":\"0\",\"language\":\"python\",\"process_id\":\"437\",\"runtime-id\":\"7f72d8756af44893a60b69a077caded8\",\"space_name\":\"Space_1\",\"span\":{\"kind\":\"server\"},\"uri\":\"python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"version\":\"1.0.0\"},\"end_timestamp\":\"2023-06-29T10:37:19.278Z\",\"env\":\"pcf-spartancrimson\",\"host\":\"compute-0-7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ingestion_reason\":\"auto\",\"parent_id\":\"0\",\"resource_hash\":\"2c8cc8275262b3cd\",\"resource_name\":\"GET /\",\"retained_by\":\"diversity_sampling\",\"service\":\"python-sample-app-spartancrimson\",\"single_span\":false,\"span_id\":\"17551449796724253880\",\"start_timestamp\":\"2023-06-29T10:37:19.273Z\",\"tags\":[\"foo:bar\",\"deployment:cf-6a3777f94c200f214075\",\"app_instance_index:0\",\"uri:python-sample-app-spartancrimson.apps.spartancrimson.cf-app.com\",\"cf-6a3777f94c200f214075-compute\",\"source:apm\",\"internal-hostname:vm-b9bc5b36-128c-4584-7638-326ba16554fe.c.cf-platform-engineering-cipp2.internal\",\"space_name:space_1\",\"project:cf-platform-engineering-cipp2\",\"compute\",\"label_key:label_value\",\"job:compute\",\"bosh_az:us-central1-f\",\"version:1.0.0\",\"app_name:python-sample-app-spartancrimson\",\"buildpack_version:4.37.0\",\"space_id:e167390a-89cd-4a84-a54b-e10ddfe64e26\",\"app_instance_guid:8ac6ec63-4309-4461-5abc-6232\",\"application_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"created_at:2023-06-19t07:53:15z\",\"org_id:871f7c0c-0770-4c5d-a8a3-c85e398b4bd8\",\"app_id:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"p-bosh-cf-6a3777f94c200f214075-compute\",\"bosh_job:compute\",\"instance_group:compute\",\"application_name:python-sample-app-spartancrimson\",\"name:compute/7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"ip:10.0.4.8\",\"bosh_id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"container_name:8ac6ec63-4309-4461-5abc-6232\",\"container_id:8ac6ec63-4309-4461-5abc-6232\",\"cf-6a3777f94c200f214075\",\"metadata_key:metadata_value\",\"p-bosh-cf-6a3777f94c200f214075\",\"env:pcf-spartancrimson\",\"container_name:python-sample-app-spartancrimson_0\",\"p-bosh\",\"bosh_deployment:cf-6a3777f94c200f214075\",\"id:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"index:0\",\"instance-id:7569151968447150010\",\"bosh_address:10.0.4.8\",\"instance-type:n1-highmem-2\",\"numeric_project_id:946413340424\",\"zone:us-central1-f\",\"bosh_index:0\",\"pcf-spartancrimson\",\"org_name:org_1\",\"service:python-sample-app-spartancrimson\",\"bosh_ip:10.0.4.8\",\"cloudfoundry\",\"bosh_name:compute\",\"cf_instance_ip:10.0.4.8\",\"app_guid:3df23a7e-1b4d-4d56-8829-9fd80e8c5ba9\",\"director:p-bosh\",\"index:7cf8c81f-0dee-468b-af1b-bb6ba06b4b29\",\"user_data:_server_:_name_:_vm-b9bc5b36-128c-4584-7638-326ba16554fe_registry_:_endpoint_:_://:_:0_dns_:_nameserver_:_8.8.8.8\"],\"trace_id\":\"12541863544722093871\",\"type\":\"web\"}}],\"meta\":{\"elapsed\":39,\"request_id\":\"pddv1ChZ6YW8tcXdMMlNKV3NjZTJYc2RsamtRIi0KHU_gDUvl5wf5sT6uYH452af9CCeAmcRVZ5Q5N69xEgz8z3DsbFPLXFXIN88\",\"status\":\"done\",\"page\":{\"after\":\"eyJhZnRlciI6IkFnQUFBWWtHdXF2UUQ0YzdlUUFBQUFBQUFBQVlBQUFBQUVGWmEwZDFjbVpSUVVGRWMzZDVaVUZYYVZOblFWRmxOUUFBQUNRQUFBQUFNREU0T1RBMll6QXROVEZrT0MwME5EYzVMV0ZsT0RndE56WXdZbVl4TldRM016QXkiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDozNzoyNC4zMDRaIiwyNjA1MjA4MjVdfQ==\"}},\"links\":{\"next\":\"https://api.datadoghq.com/api/v2/spans/events?filter%5Bfrom%5D=1688035027000\\u0026filter%5Bquery%5D=service%3Apython%2A\\u0026filter%5Bto%5D=1688035927000\\u0026page%5Bcursor%5D=eyJhZnRlciI6IkFnQUFBWWtHdXF2UUQ0YzdlUUFBQUFBQUFBQVlBQUFBQUVGWmEwZDFjbVpSUVVGRWMzZDVaVUZYYVZOblFWRmxOUUFBQUNRQUFBQUFNREU0T1RBMll6QXROVEZrT0MwME5EYzVMV0ZsT0RndE56WXdZbVl4TldRM016QXkiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDozNzoyNC4zMDRaIiwyNjA1MjA4MjVdfQ%3D%3D\\u0026page%5Blimit%5D=2\\u0026sort=timestamp\"}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "from": "now-15m", + "query": "service:python*", + "to": "now" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "cursor": "eyJhZnRlciI6IkFnQUFBWWtHdXF2UUQ0YzdlUUFBQUFBQUFBQVlBQUFBQUVGWmEwZDFjbVpSUVVGRWMzZDVaVUZYYVZOblFWRmxOUUFBQUNRQUFBQUFNREU0T1RBMll6QXROVEZrT0MwME5EYzVMV0ZsT0RndE56WXdZbVl4TldRM016QXkiLCJ2YWx1ZXMiOlsiMjAyMy0wNi0yOVQxMDozNzoyNC4zMDRaIiwyNjA1MjA4MjVdfQ==", + "limit": 2 + }, + "sort": "timestamp" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/spans/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search spans returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Spans", + "frozen_at": "2023-06-29T09:59:05.435Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "filter": { + "from": "now", + "query": "service:web* AND @http.status_code:[200 TO 299]", + "to": "now-15m" + }, + "options": { + "timezone": "GMT" + }, + "page": { + "limit": 10 + }, + "sort": "timestamp" + }, + "type": "search_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/spans/events/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"invalid_argument(Field 'filter.from,to' is invalid: 'from' should be anterior to 'to')\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + } + ], + "scenario": "Search spans returns \"Unprocessable Entity.\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/status-pages.json b/test-server-data/v2/status-pages.json new file mode 100644 index 0000000000..e5aa807d9a --- /dev/null +++ b/test-server-data/v2/status-pages.json @@ -0,0 +1,3054 @@ +{ + "feature": "Status Pages", + "recordings": [ + { + "feature": "Status Pages", + "frozen_at": "2026-05-04T14:30:13.862Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "2aea4cad6466d9b2", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a8c9f5bc-864f-4984-8420-736468d76baf\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"5f67ec78-bc7f-4930-91ae-b29b64e4440e\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"b2e9cb5e-57d3-4c32-9ed2-f2883441ca75\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"6eba0779-8989-43e2-994d-56d244a4ffac\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-05-04T14:30:15.791383Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"2aea4cad6466d9b2\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-05-04T14:30:15.791383Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/a8c9f5bc-864f-4984-8420-736468d76baf/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "title": "Past API Outage", + "updates": [ + { + "components_affected": [ + { + "id": "b2e9cb5e-57d3-4c32-9ed2-f2883441ca75", + "status": "degraded" + } + ], + "description": "We detected elevated error rates in the API.", + "started_at": "2026-05-04T13:30:13.862Z", + "status": "investigating" + }, + { + "components_affected": [ + { + "id": "b2e9cb5e-57d3-4c32-9ed2-f2883441ca75", + "status": "degraded" + } + ], + "description": "Root cause identified as a misconfigured deployment.", + "started_at": "2026-05-04T14:00:13.862Z", + "status": "identified" + }, + { + "components_affected": [ + { + "id": "b2e9cb5e-57d3-4c32-9ed2-f2883441ca75", + "status": "operational" + } + ], + "description": "The issue has been resolved and API is operating normally.", + "started_at": "2026-05-04T14:30:13.862Z", + "status": "resolved" + } + ] + }, + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/a8c9f5bc-864f-4984-8420-736468d76baf/degradations/backfill", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6d4e1a6f-df56-4178-88c3-f950b9da3f95\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"b2e9cb5e-57d3-4c32-9ed2-f2883441ca75\",\"name\":\"Login\",\"status\":\"operational\"}],\"created_at\":\"2026-05-04T13:30:13.862Z\",\"description\":\"The issue has been resolved and API is operating normally.\",\"modified_at\":\"2026-05-04T14:30:16.509023Z\",\"status\":\"resolved\",\"title\":\"Past API Outage\",\"updates\":[{\"id\":\"7acc1fa8-556f-4fa8-978a-58f5c19bcc6d\",\"created_at\":\"2026-05-04T14:30:16.509023Z\",\"modified_at\":\"2026-05-04T14:30:16.509023Z\",\"started_at\":\"2026-05-04T13:30:13.862Z\",\"status\":\"investigating\",\"description\":\"We detected elevated error rates in the API.\",\"components_affected\":[{\"id\":\"b2e9cb5e-57d3-4c32-9ed2-f2883441ca75\",\"name\":\"Login\",\"status\":\"degraded\"}]},{\"id\":\"e927896e-cd9e-4c1a-bf41-427ce44e8372\",\"created_at\":\"2026-05-04T14:30:16.509023Z\",\"modified_at\":\"2026-05-04T14:30:16.509023Z\",\"started_at\":\"2026-05-04T14:00:13.862Z\",\"status\":\"identified\",\"description\":\"Root cause identified as a misconfigured deployment.\",\"components_affected\":[{\"id\":\"b2e9cb5e-57d3-4c32-9ed2-f2883441ca75\",\"name\":\"Login\",\"status\":\"degraded\"}]},{\"id\":\"82326cfc-b8f7-4276-bde4-d023d5958541\",\"created_at\":\"2026-05-04T14:30:16.509023Z\",\"modified_at\":\"2026-05-04T14:30:16.509023Z\",\"started_at\":\"2026-05-04T14:30:13.862Z\",\"status\":\"resolved\",\"description\":\"The issue has been resolved and API is operating normally.\",\"components_affected\":[{\"id\":\"b2e9cb5e-57d3-4c32-9ed2-f2883441ca75\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"a8c9f5bc-864f-4984-8420-736468d76baf\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/a8c9f5bc-864f-4984-8420-736468d76baf/degradations/6d4e1a6f-df56-4178-88c3-f950b9da3f95", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/a8c9f5bc-864f-4984-8420-736468d76baf", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create backfilled degradation returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-05-04T14:30:17.282Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "29b08dd63fb635d7", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bbf96c2c-48cf-4951-96d2-f5b503c93c49\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"b7d32c93-3ab3-4d77-af3b-541a45eb3553\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"02c0c5d4-6735-45c8-a184-4a6d5b746793\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"b99b72d3-4df4-4242-82d9-ebb96c301c8d\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-05-04T14:30:17.408759Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"29b08dd63fb635d7\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-05-04T14:30:17.408759Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/bbf96c2c-48cf-4951-96d2-f5b503c93c49/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "title": "Past Database Maintenance", + "updates": [ + { + "components_affected": [ + { + "id": "02c0c5d4-6735-45c8-a184-4a6d5b746793", + "status": "maintenance" + } + ], + "description": "Database maintenance is in progress.", + "started_at": "2026-05-04T13:30:17.282Z", + "status": "in_progress" + }, + { + "components_affected": [ + { + "id": "02c0c5d4-6735-45c8-a184-4a6d5b746793", + "status": "operational" + } + ], + "description": "Database maintenance has been completed successfully.", + "started_at": "2026-05-04T14:30:17.282Z", + "status": "completed" + } + ] + }, + "type": "maintenances" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/bbf96c2c-48cf-4951-96d2-f5b503c93c49/maintenances/backfill", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"1f1ccbc5-14dd-45e2-9e81-b767b4d342f0\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-05-04T14:30:17.282Z\",\"completed_description\":\"Database maintenance has been completed successfully.\",\"components_affected\":[{\"id\":\"02c0c5d4-6735-45c8-a184-4a6d5b746793\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"Database maintenance is in progress.\",\"modified_at\":\"2026-05-04T14:30:17.979727Z\",\"published_date\":\"2026-05-04T13:30:17.282Z\",\"scheduled_description\":\"\",\"start_date\":\"2026-05-04T13:30:17.282Z\",\"status\":\"completed\",\"title\":\"Past Database Maintenance\",\"updates\":[{\"id\":\"56f63654-5c40-4eed-8af0-dd53a7bb251c\",\"created_at\":\"2026-05-04T14:30:17.979727Z\",\"modified_at\":\"2026-05-04T14:30:17.979727Z\",\"started_at\":\"2026-05-04T13:30:17.282Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"Database maintenance is in progress.\",\"components_affected\":[{\"id\":\"02c0c5d4-6735-45c8-a184-4a6d5b746793\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"7e2dd268-c76e-4186-9a2c-b7ca7039485b\",\"created_at\":\"2026-05-04T14:30:17.979727Z\",\"modified_at\":\"2026-05-04T14:30:17.979727Z\",\"started_at\":\"2026-05-04T14:30:17.282Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"Database maintenance has been completed successfully.\",\"components_affected\":[{\"id\":\"02c0c5d4-6735-45c8-a184-4a6d5b746793\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"bbf96c2c-48cf-4951-96d2-f5b503c93c49\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/bbf96c2c-48cf-4951-96d2-f5b503c93c49", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create backfilled maintenance returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:37.493Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "f456820b7958024f", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b02801ff-949d-467e-967d-5943c8f1c7af\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"7f96e5c3-f033-4640-bf8a-7018e134c8b5\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"feefa8d8-7485-4bfb-82a6-86268c1d68b3\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"b2f95a96-3261-40fb-bb5a-f95203741608\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:37.623742Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f456820b7958024f\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:37.623742Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/b02801ff-949d-467e-967d-5943c8f1c7af/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Logs", + "position": 0, + "type": "component" + }, + "type": "components" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/b02801ff-949d-467e-967d-5943c8f1c7af/components", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ef964967-c6b6-465a-a260-0468b697036c\",\"type\":\"components\",\"attributes\":{\"created_at\":\"2026-04-24T14:12:38.188993Z\",\"modified_at\":\"2026-04-24T14:12:38.188993Z\",\"name\":\"Logs\",\"position\":0,\"status\":\"operational\",\"type\":\"component\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"group\":{\"data\":null},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"b02801ff-949d-467e-967d-5943c8f1c7af\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/b02801ff-949d-467e-967d-5943c8f1c7af/components/ef964967-c6b6-465a-a260-0468b697036c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/b02801ff-949d-467e-967d-5943c8f1c7af", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create component returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:38.944Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "6fadaccff9a14c1b", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7a6eba5d-657a-416e-943f-59102f88c3b5\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"c72b2d6b-f4fb-4934-a68c-265e4f9991d6\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"13dfd7ee-e741-41f9-af1a-d40fa4caf459\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"e2cffa19-a102-43e1-ac3c-7b36a7a61f52\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:39.042853Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"6fadaccff9a14c1b\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:39.042853Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/7a6eba5d-657a-416e-943f-59102f88c3b5/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components_affected": [ + { + "id": "13dfd7ee-e741-41f9-af1a-d40fa4caf459", + "status": "major_outage" + } + ], + "description": "Our API is experiencing elevated latency. We are investigating the issue.", + "status": "investigating", + "title": "Elevated API Latency" + }, + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/7a6eba5d-657a-416e-943f-59102f88c3b5/degradations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ee2a3955-7bbf-4215-a80e-e989ecd58228\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"13dfd7ee-e741-41f9-af1a-d40fa4caf459\",\"name\":\"Login\",\"status\":\"major_outage\"}],\"created_at\":\"2026-04-24T14:12:39.710666Z\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"modified_at\":\"2026-04-24T14:12:39.710666Z\",\"status\":\"investigating\",\"title\":\"Elevated API Latency\",\"updates\":[{\"id\":\"59590192-d12c-468e-8e7e-fe34167ed517\",\"created_at\":\"2026-04-24T14:12:39.710666Z\",\"modified_at\":\"2026-04-24T14:12:39.710666Z\",\"started_at\":\"2026-04-24T14:12:39.710666Z\",\"status\":\"investigating\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"components_affected\":[{\"id\":\"13dfd7ee-e741-41f9-af1a-d40fa4caf459\",\"name\":\"Login\",\"status\":\"major_outage\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"7a6eba5d-657a-416e-943f-59102f88c3b5\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/7a6eba5d-657a-416e-943f-59102f88c3b5/degradations/ee2a3955-7bbf-4215-a80e-e989ecd58228", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/7a6eba5d-657a-416e-943f-59102f88c3b5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create degradation returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:40.558Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "c1f14b6108d10fad", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"93b8d569-0f1a-42f8-aeec-ff8383ada34a\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"66545c0c-9ebe-4253-8a19-5b78706e8770\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"1596f8f5-7350-4d65-b2d9-45a36d747a92\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"d76eceac-f087-445e-8eef-bb2287907c71\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:40.657883Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"c1f14b6108d10fad\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:40.657883Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/93b8d569-0f1a-42f8-aeec-ff8383ada34a/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "completed_date": "2026-04-24T16:12:40.558Z", + "completed_description": "We have completed maintenance on the API to improve performance.", + "components_affected": [ + { + "id": "1596f8f5-7350-4d65-b2d9-45a36d747a92", + "status": "operational" + } + ], + "in_progress_description": "We are currently performing maintenance on the API to improve performance.", + "scheduled_description": "We will be performing maintenance on the API to improve performance.", + "start_date": "2026-04-24T15:12:40.558Z", + "title": "API Maintenance" + }, + "type": "maintenances" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/93b8d569-0f1a-42f8-aeec-ff8383ada34a/maintenances", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"63935f9c-2c32-4ab3-90c6-994ae538b451\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-04-24T16:12:40.558Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"1596f8f5-7350-4d65-b2d9-45a36d747a92\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-04-24T14:12:41.332488Z\",\"published_date\":\"2026-04-24T14:12:41.332488Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-04-24T15:12:40.558Z\",\"status\":\"scheduled\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"65b8d551-cdab-425a-be94-165dac7cfc07\",\"created_at\":\"2026-04-24T14:12:41.332488Z\",\"modified_at\":\"2026-04-24T14:12:41.332488Z\",\"started_at\":\"2026-04-24T14:12:41.332488Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"1596f8f5-7350-4d65-b2d9-45a36d747a92\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"93b8d569-0f1a-42f8-aeec-ff8383ada34a\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/93b8d569-0f1a-42f8-aeec-ff8383ada34a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create maintenance returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:41.955Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "domain_prefix": "0929191d5ebf5ab0", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"730cb359-c6ff-47cd-b81a-63ee8678d384\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"0b8f2697-b576-4f22-8d76-92c345e1442b\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"bdcd22d6-d521-4086-8210-13a3cd00bd8a\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}],\"created_at\":\"2026-04-24T14:12:42.042438Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"0929191d5ebf5ab0\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:42.042438Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/730cb359-c6ff-47cd-b81a-63ee8678d384/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/730cb359-c6ff-47cd-b81a-63ee8678d384", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create status page returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:43.423Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "c81cf22d1e8a364c", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"570c4776-0313-4f69-a68b-0a671bf88354\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"11b4b3f0-1d92-4271-b84a-596a5d7b1b98\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"20dbe23d-b7f6-4157-8800-56ec75bf7a78\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"69b4c091-53a5-4e01-bd11-0031119d1cde\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:43.53627Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"c81cf22d1e8a364c\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:43.53627Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/570c4776-0313-4f69-a68b-0a671bf88354/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/570c4776-0313-4f69-a68b-0a671bf88354/components/11b4b3f0-1d92-4271-b84a-596a5d7b1b98", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/570c4776-0313-4f69-a68b-0a671bf88354", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete component returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:45.351Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "5ce69947c90b650d", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e05c462a-e740-48d3-8ded-a926d4058398\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"9ae03c11-92a9-4fa8-85dc-da17c7388cff\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"da407a81-5566-4eab-99f0-9c72eb5b0032\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"c902d544-b5bf-45c0-9a33-8ab9ca13fa12\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:45.485107Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"5ce69947c90b650d\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:45.485107Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/e05c462a-e740-48d3-8ded-a926d4058398/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components_affected": [ + { + "id": "da407a81-5566-4eab-99f0-9c72eb5b0032", + "status": "major_outage" + } + ], + "description": "Our API is experiencing elevated latency. We are investigating the issue.", + "status": "investigating", + "title": "Elevated API Latency" + }, + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/e05c462a-e740-48d3-8ded-a926d4058398/degradations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f6f27d51-2011-4b24-bdcf-a5a0d0a5a1a3\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"da407a81-5566-4eab-99f0-9c72eb5b0032\",\"name\":\"Login\",\"status\":\"major_outage\"}],\"created_at\":\"2026-04-24T14:12:46.338465Z\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"modified_at\":\"2026-04-24T14:12:46.338465Z\",\"status\":\"investigating\",\"title\":\"Elevated API Latency\",\"updates\":[{\"id\":\"fa890ec5-195a-458c-8b62-9626c245d49f\",\"created_at\":\"2026-04-24T14:12:46.338465Z\",\"modified_at\":\"2026-04-24T14:12:46.338465Z\",\"started_at\":\"2026-04-24T14:12:46.338465Z\",\"status\":\"investigating\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"components_affected\":[{\"id\":\"da407a81-5566-4eab-99f0-9c72eb5b0032\",\"name\":\"Login\",\"status\":\"major_outage\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"e05c462a-e740-48d3-8ded-a926d4058398\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/e05c462a-e740-48d3-8ded-a926d4058398/degradations/f6f27d51-2011-4b24-bdcf-a5a0d0a5a1a3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/e05c462a-e740-48d3-8ded-a926d4058398/degradations/f6f27d51-2011-4b24-bdcf-a5a0d0a5a1a3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"degradation not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/e05c462a-e740-48d3-8ded-a926d4058398", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete degradation returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:47.575Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "d18249dc4d6372bc", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5e48cd1f-da30-49e6-950f-a2f71c9b40b7\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"228efe98-5ad7-41a3-b764-76c948a90322\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"30580d92-aaf0-4da3-9ffc-05c85a5edab9\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"33809576-90a7-47b0-bcc6-487d2ef9b1e3\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:47.669349Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"d18249dc4d6372bc\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:47.669349Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/5e48cd1f-da30-49e6-950f-a2f71c9b40b7/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/5e48cd1f-da30-49e6-950f-a2f71c9b40b7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/5e48cd1f-da30-49e6-950f-a2f71c9b40b7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"title\":\"Generic Error\",\"detail\":\"status page not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete status page returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:48.796Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "5116e6fe6ba4fc4c", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d6c6458f-b8bf-43cf-bfa6-ccd9480bfa39\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"7bcbc5c7-b1b7-4b11-8e75-0767a43d0e0c\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"aa15f58b-d825-44bd-b55d-289c35185a0b\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"d8ddd6e9-b4d2-41ce-b66c-c2f60e8a3002\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:48.891246Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"5116e6fe6ba4fc4c\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:48.891246Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/d6c6458f-b8bf-43cf-bfa6-ccd9480bfa39/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/statuspages/d6c6458f-b8bf-43cf-bfa6-ccd9480bfa39/components/7bcbc5c7-b1b7-4b11-8e75-0767a43d0e0c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7bcbc5c7-b1b7-4b11-8e75-0767a43d0e0c\",\"type\":\"components\",\"attributes\":{\"components\":[{\"id\":\"aa15f58b-d825-44bd-b55d-289c35185a0b\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"d8ddd6e9-b4d2-41ce-b66c-c2f60e8a3002\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}],\"created_at\":\"2026-04-24T14:12:48.891246Z\",\"modified_at\":\"2026-04-24T14:12:48.891246Z\",\"name\":\"Application\",\"position\":0,\"type\":\"group\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"group\":{\"data\":null},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"d6c6458f-b8bf-43cf-bfa6-ccd9480bfa39\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/d6c6458f-b8bf-43cf-bfa6-ccd9480bfa39", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get component returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:50.221Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "700e7d8a1a6f6bc9", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bad6a6e5-6caa-49b7-b97e-c17e87c378a7\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"e9d5648e-89d7-407f-b465-91bf75054cba\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"34f1f06b-1084-4194-a148-a7961c5f9641\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"e8745564-a521-4d4c-b379-ed0fecea40d4\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:50.321218Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"700e7d8a1a6f6bc9\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:50.321218Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/bad6a6e5-6caa-49b7-b97e-c17e87c378a7/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components_affected": [ + { + "id": "34f1f06b-1084-4194-a148-a7961c5f9641", + "status": "major_outage" + } + ], + "description": "Our API is experiencing elevated latency. We are investigating the issue.", + "status": "investigating", + "title": "Elevated API Latency" + }, + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/bad6a6e5-6caa-49b7-b97e-c17e87c378a7/degradations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6000704d-856e-4c32-9946-805d943621da\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"34f1f06b-1084-4194-a148-a7961c5f9641\",\"name\":\"Login\",\"status\":\"major_outage\"}],\"created_at\":\"2026-04-24T14:12:51.052318Z\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"modified_at\":\"2026-04-24T14:12:51.052318Z\",\"status\":\"investigating\",\"title\":\"Elevated API Latency\",\"updates\":[{\"id\":\"a1687b75-3f0d-4918-8802-e46db4f2e5b9\",\"created_at\":\"2026-04-24T14:12:51.052318Z\",\"modified_at\":\"2026-04-24T14:12:51.052318Z\",\"started_at\":\"2026-04-24T14:12:51.052318Z\",\"status\":\"investigating\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"components_affected\":[{\"id\":\"34f1f06b-1084-4194-a148-a7961c5f9641\",\"name\":\"Login\",\"status\":\"major_outage\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"bad6a6e5-6caa-49b7-b97e-c17e87c378a7\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/statuspages/bad6a6e5-6caa-49b7-b97e-c17e87c378a7/degradations/6000704d-856e-4c32-9946-805d943621da", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6000704d-856e-4c32-9946-805d943621da\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"34f1f06b-1084-4194-a148-a7961c5f9641\",\"name\":\"Login\",\"status\":\"major_outage\"}],\"created_at\":\"2026-04-24T14:12:51.052318Z\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"modified_at\":\"2026-04-24T14:12:51.052318Z\",\"status\":\"investigating\",\"title\":\"Elevated API Latency\",\"updates\":[{\"id\":\"a1687b75-3f0d-4918-8802-e46db4f2e5b9\",\"created_at\":\"2026-04-24T14:12:51.052318Z\",\"modified_at\":\"2026-04-24T14:12:51.052318Z\",\"started_at\":\"2026-04-24T14:12:51.052318Z\",\"status\":\"investigating\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"components_affected\":[{\"id\":\"34f1f06b-1084-4194-a148-a7961c5f9641\",\"name\":\"Login\",\"status\":\"major_outage\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"bad6a6e5-6caa-49b7-b97e-c17e87c378a7\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/bad6a6e5-6caa-49b7-b97e-c17e87c378a7/degradations/6000704d-856e-4c32-9946-805d943621da", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/bad6a6e5-6caa-49b7-b97e-c17e87c378a7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get degradation returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:52.035Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "9905c0ddab704862", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f94e1859-5f7d-4725-8cea-36933d0ee44a\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"95f2748c-0715-4ec7-8eff-cfd50880fa31\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"7814c703-ad55-4ec5-b1d4-f339b42849e9\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"af0c0031-b691-4326-8178-3b8285560b3f\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:52.130767Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"9905c0ddab704862\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:52.130767Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/f94e1859-5f7d-4725-8cea-36933d0ee44a/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "completed_date": "2026-04-24T16:12:52.035Z", + "completed_description": "We have completed maintenance on the API to improve performance.", + "components_affected": [ + { + "id": "7814c703-ad55-4ec5-b1d4-f339b42849e9", + "status": "operational" + } + ], + "in_progress_description": "We are currently performing maintenance on the API to improve performance.", + "scheduled_description": "We will be performing maintenance on the API to improve performance.", + "start_date": "2026-04-24T15:12:52.035Z", + "title": "API Maintenance" + }, + "type": "maintenances" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/f94e1859-5f7d-4725-8cea-36933d0ee44a/maintenances", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"01ffa7f4-fc91-47a3-b9e0-2b0892891107\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-04-24T16:12:52.035Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"7814c703-ad55-4ec5-b1d4-f339b42849e9\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-04-24T14:12:52.838015Z\",\"published_date\":\"2026-04-24T14:12:52.838015Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-04-24T15:12:52.035Z\",\"status\":\"scheduled\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"0bc62e28-e5de-49ef-a781-9c362bb8e58e\",\"created_at\":\"2026-04-24T14:12:52.838015Z\",\"modified_at\":\"2026-04-24T14:12:52.838015Z\",\"started_at\":\"2026-04-24T14:12:52.838015Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"7814c703-ad55-4ec5-b1d4-f339b42849e9\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"f94e1859-5f7d-4725-8cea-36933d0ee44a\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/statuspages/f94e1859-5f7d-4725-8cea-36933d0ee44a/maintenances/01ffa7f4-fc91-47a3-b9e0-2b0892891107", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"01ffa7f4-fc91-47a3-b9e0-2b0892891107\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-04-24T16:12:52.035Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"7814c703-ad55-4ec5-b1d4-f339b42849e9\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-04-24T14:12:52.838015Z\",\"published_date\":\"2026-04-24T14:12:52.838015Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-04-24T15:12:52.035Z\",\"status\":\"scheduled\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"0bc62e28-e5de-49ef-a781-9c362bb8e58e\",\"created_at\":\"2026-04-24T14:12:52.838015Z\",\"modified_at\":\"2026-04-24T14:12:52.838015Z\",\"started_at\":\"2026-04-24T14:12:52.838015Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"7814c703-ad55-4ec5-b1d4-f339b42849e9\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"f94e1859-5f7d-4725-8cea-36933d0ee44a\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/f94e1859-5f7d-4725-8cea-36933d0ee44a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get maintenance returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:53.573Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "3198c2fe740f5796", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7a914d0d-0894-4de9-aa60-79c710ef0bb6\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"687da6b8-ff85-4b11-a969-372f44bc3a80\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"fb85b061-f777-48cb-8123-83c95542ed94\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"6c087062-df6a-42b7-8867-febc73b274ff\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:53.670343Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"3198c2fe740f5796\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:53.670343Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/7a914d0d-0894-4de9-aa60-79c710ef0bb6/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/statuspages/7a914d0d-0894-4de9-aa60-79c710ef0bb6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"7a914d0d-0894-4de9-aa60-79c710ef0bb6\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"687da6b8-ff85-4b11-a969-372f44bc3a80\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"fb85b061-f777-48cb-8123-83c95542ed94\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"6c087062-df6a-42b7-8867-febc73b274ff\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:53.670343Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"3198c2fe740f5796\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:53.670343Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/7a914d0d-0894-4de9-aa60-79c710ef0bb6/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/7a914d0d-0894-4de9-aa60-79c710ef0bb6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get status page returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:54.848Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "497386ea5fddb745", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"39bd3476-24c8-425d-ac66-6f995c3fecd8\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"810a9388-f403-4b98-b907-e2c47833ce54\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"cccc03ba-030b-4be5-8e42-eefae36e3a65\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"49bc7dea-5019-4491-8c41-ffd45ccb503e\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:54.947014Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"497386ea5fddb745\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:54.947014Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/39bd3476-24c8-425d-ac66-6f995c3fecd8/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/statuspages/39bd3476-24c8-425d-ac66-6f995c3fecd8/components", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"810a9388-f403-4b98-b907-e2c47833ce54\",\"type\":\"components\",\"attributes\":{\"components\":[{\"id\":\"cccc03ba-030b-4be5-8e42-eefae36e3a65\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"49bc7dea-5019-4491-8c41-ffd45ccb503e\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}],\"created_at\":\"2026-04-24T14:12:54.947014Z\",\"modified_at\":\"2026-04-24T14:12:54.947014Z\",\"name\":\"Application\",\"position\":0,\"type\":\"group\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"group\":{\"data\":null},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"39bd3476-24c8-425d-ac66-6f995c3fecd8\",\"type\":\"status_pages\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/39bd3476-24c8-425d-ac66-6f995c3fecd8", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List components returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:56.366Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "af9576fa6c9a9d22", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9d1136b5-5701-45f7-a65a-7e19e0610ee5\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"a6bb50d1-7a85-463e-985c-f736e342a34c\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"cf35e906-ac47-4f85-87e9-df3ddc014a76\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"d2c9d13f-95b2-4b6b-9425-c40ad32979e7\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:56.463926Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"af9576fa6c9a9d22\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:56.463926Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/9d1136b5-5701-45f7-a65a-7e19e0610ee5/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components_affected": [ + { + "id": "cf35e906-ac47-4f85-87e9-df3ddc014a76", + "status": "major_outage" + } + ], + "description": "Our API is experiencing elevated latency. We are investigating the issue.", + "status": "investigating", + "title": "Elevated API Latency" + }, + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/9d1136b5-5701-45f7-a65a-7e19e0610ee5/degradations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9d40eea3-8af2-467c-94f4-f8a6be8afb50\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"cf35e906-ac47-4f85-87e9-df3ddc014a76\",\"name\":\"Login\",\"status\":\"major_outage\"}],\"created_at\":\"2026-04-24T14:12:57.193706Z\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"modified_at\":\"2026-04-24T14:12:57.193706Z\",\"status\":\"investigating\",\"title\":\"Elevated API Latency\",\"updates\":[{\"id\":\"3cc00fdd-e711-4ce3-a6ff-1603f226369d\",\"created_at\":\"2026-04-24T14:12:57.193706Z\",\"modified_at\":\"2026-04-24T14:12:57.193706Z\",\"started_at\":\"2026-04-24T14:12:57.193706Z\",\"status\":\"investigating\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"components_affected\":[{\"id\":\"cf35e906-ac47-4f85-87e9-df3ddc014a76\",\"name\":\"Login\",\"status\":\"major_outage\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"9d1136b5-5701-45f7-a65a-7e19e0610ee5\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/statuspages/degradations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"f02eb007-e026-45ef-888f-04b112865344\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"b6a8c887-d556-47f2-9189-fec53d76c6bc\",\"name\":\"Login\",\"status\":\"major_outage\"}],\"created_at\":\"2026-04-20T01:18:42.181976Z\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"modified_at\":\"2026-04-20T01:18:42.181976Z\",\"status\":\"investigating\",\"title\":\"Elevated API Latency\",\"updates\":[{\"id\":\"54e7d2a2-4e8d-4305-a28f-928228b74598\",\"created_at\":\"2026-04-20T01:18:42.181976Z\",\"modified_at\":\"2026-04-20T01:18:42.181976Z\",\"started_at\":\"2026-04-20T01:18:42.181976Z\",\"status\":\"investigating\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"components_affected\":[{\"id\":\"b6a8c887-d556-47f2-9189-fec53d76c6bc\",\"name\":\"Login\",\"status\":\"major_outage\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"7ba578f6-1e66-464a-99cf-72032b18ca32\",\"type\":\"status_pages\"}}}},{\"id\":\"9d40eea3-8af2-467c-94f4-f8a6be8afb50\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"cf35e906-ac47-4f85-87e9-df3ddc014a76\",\"name\":\"Login\",\"status\":\"major_outage\"}],\"created_at\":\"2026-04-24T14:12:57.193706Z\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"modified_at\":\"2026-04-24T14:12:57.193706Z\",\"status\":\"investigating\",\"title\":\"Elevated API Latency\",\"updates\":[{\"id\":\"3cc00fdd-e711-4ce3-a6ff-1603f226369d\",\"created_at\":\"2026-04-24T14:12:57.193706Z\",\"modified_at\":\"2026-04-24T14:12:57.193706Z\",\"started_at\":\"2026-04-24T14:12:57.193706Z\",\"status\":\"investigating\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"components_affected\":[{\"id\":\"cf35e906-ac47-4f85-87e9-df3ddc014a76\",\"name\":\"Login\",\"status\":\"major_outage\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"9d1136b5-5701-45f7-a65a-7e19e0610ee5\",\"type\":\"status_pages\"}}}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":0,\"limit\":50,\"total\":2,\"first_offset\":0,\"prev_offset\":null,\"next_offset\":null,\"last_offset\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/9d1136b5-5701-45f7-a65a-7e19e0610ee5/degradations/9d40eea3-8af2-467c-94f4-f8a6be8afb50", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/9d1136b5-5701-45f7-a65a-7e19e0610ee5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List degradations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:12:58.081Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "9788a551545845fd", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c044daac-5bf2-4333-87f2-24589aa25858\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"232777a3-05bc-41b2-a3c7-84300c3ca62b\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"38594a81-bedd-4064-b253-585aec9e2310\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"3929ad66-48dd-41db-8317-e9f2f6aceacb\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:12:58.1666Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"9788a551545845fd\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:12:58.1666Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/c044daac-5bf2-4333-87f2-24589aa25858/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "completed_date": "2026-04-24T16:12:58.081Z", + "completed_description": "We have completed maintenance on the API to improve performance.", + "components_affected": [ + { + "id": "38594a81-bedd-4064-b253-585aec9e2310", + "status": "operational" + } + ], + "in_progress_description": "We are currently performing maintenance on the API to improve performance.", + "scheduled_description": "We will be performing maintenance on the API to improve performance.", + "start_date": "2026-04-24T15:12:58.081Z", + "title": "API Maintenance" + }, + "type": "maintenances" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/c044daac-5bf2-4333-87f2-24589aa25858/maintenances", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"22833f1f-d2fd-4d15-adb3-af160bbf8dc2\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-04-24T16:12:58.081Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"38594a81-bedd-4064-b253-585aec9e2310\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-04-24T14:12:59.117952Z\",\"published_date\":\"2026-04-24T14:12:59.117952Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-04-24T15:12:58.081Z\",\"status\":\"scheduled\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"0a6b63b8-b976-4c3c-b04b-1d2aeb9abf2b\",\"created_at\":\"2026-04-24T14:12:59.117952Z\",\"modified_at\":\"2026-04-24T14:12:59.117952Z\",\"started_at\":\"2026-04-24T14:12:59.117952Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"38594a81-bedd-4064-b253-585aec9e2310\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"c044daac-5bf2-4333-87f2-24589aa25858\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/statuspages/maintenances", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"f286de7d-136f-4fdc-8e86-4d0777e3e21f\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T17:13:22.043Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"77170b9e-5e63-4ddb-9a0b-93e271e530ba\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T17:13:41.502717Z\",\"published_date\":\"2026-02-19T15:13:22.885588Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T16:13:22.043Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"e53d8a4a-264d-4f85-a2f2-79db7de6a846\",\"created_at\":\"2026-02-19T17:13:41.502717Z\",\"modified_at\":\"2026-02-19T17:13:41.502717Z\",\"started_at\":\"2026-02-19T17:13:41.502717Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"77170b9e-5e63-4ddb-9a0b-93e271e530ba\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"1ae93adf-0bc9-48fb-8530-66ed6233f0e7\",\"created_at\":\"2026-02-19T16:13:29.432699Z\",\"modified_at\":\"2026-02-19T16:13:29.432699Z\",\"started_at\":\"2026-02-19T16:13:29.432699Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"77170b9e-5e63-4ddb-9a0b-93e271e530ba\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"7f1460f1-38cf-47a5-ab00-d3bf7492cfb4\",\"created_at\":\"2026-02-19T15:13:22.885588Z\",\"modified_at\":\"2026-02-19T15:13:22.885588Z\",\"started_at\":\"2026-02-19T15:13:22.885588Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"77170b9e-5e63-4ddb-9a0b-93e271e530ba\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"6054e25a-60fa-4c88-a02a-760bae1a7917\",\"type\":\"status_pages\"}}}},{\"id\":\"17874db7-0144-476b-8313-1a126fe7640b\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T17:13:23.668Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"8e3cd5cc-1ce3-435c-863d-2f139a10fd18\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T17:13:40.505678Z\",\"published_date\":\"2026-02-19T15:13:24.508112Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T16:13:23.668Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"b6e8df0c-5cc3-4b55-b0f9-fa000ce0ed59\",\"created_at\":\"2026-02-19T17:13:40.505678Z\",\"modified_at\":\"2026-02-19T17:13:40.505678Z\",\"started_at\":\"2026-02-19T17:13:40.505678Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"8e3cd5cc-1ce3-435c-863d-2f139a10fd18\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"4cd584cf-4c51-4f0d-9c0c-3b99e089e5ca\",\"created_at\":\"2026-02-19T16:13:31.834568Z\",\"modified_at\":\"2026-02-19T16:13:31.834568Z\",\"started_at\":\"2026-02-19T16:13:31.834568Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"8e3cd5cc-1ce3-435c-863d-2f139a10fd18\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"2f6081e9-61fd-4320-8bc7-c183f480abd0\",\"created_at\":\"2026-02-19T15:13:24.508112Z\",\"modified_at\":\"2026-02-19T15:13:24.508112Z\",\"started_at\":\"2026-02-19T15:13:24.508112Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"8e3cd5cc-1ce3-435c-863d-2f139a10fd18\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"6f3e2bef-846a-4c05-9d6d-35d9d136c31a\",\"type\":\"status_pages\"}}}},{\"id\":\"8e70e109-ca9d-4d82-b2e5-4ca9c363daa5\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T17:13:24.776Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"7d4bd295-b987-49b0-8086-9dddbcfade33\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-02-19T17:13:41.406073Z\",\"published_date\":\"2026-02-19T15:13:25.641763Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-02-19T16:13:24.776Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"78579cc3-4935-43d7-9d4f-7889655bb414\",\"created_at\":\"2026-02-19T17:13:41.406073Z\",\"modified_at\":\"2026-02-19T17:13:41.406073Z\",\"started_at\":\"2026-02-19T17:13:41.406073Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"7d4bd295-b987-49b0-8086-9dddbcfade33\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"04f5122c-2c8e-4605-878c-bdd401d1a6a4\",\"created_at\":\"2026-02-19T16:13:29.281104Z\",\"modified_at\":\"2026-02-19T16:13:29.281104Z\",\"started_at\":\"2026-02-19T16:13:29.281104Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"components_affected\":[{\"id\":\"7d4bd295-b987-49b0-8086-9dddbcfade33\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"5943a568-c880-4b32-ab7b-1701adf218cf\",\"created_at\":\"2026-02-19T15:13:25.641763Z\",\"modified_at\":\"2026-02-19T15:13:25.641763Z\",\"started_at\":\"2026-02-19T15:13:25.641763Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"7d4bd295-b987-49b0-8086-9dddbcfade33\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"fbcbdef4-4e3a-436a-bb0a-be8205a98b36\",\"type\":\"status_pages\"}}}},{\"id\":\"6f08d7a7-d37d-4c75-807b-234e71d6d40b\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T17:48:44.696Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2bf35e8e-28c9-49c3-948a-854097030f2c\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T17:48:51.504226Z\",\"published_date\":\"2026-02-19T15:48:45.758873Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T16:48:44.696Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"13300fac-e192-4604-b987-2759f980238a\",\"created_at\":\"2026-02-19T17:48:51.504226Z\",\"modified_at\":\"2026-02-19T17:48:51.504226Z\",\"started_at\":\"2026-02-19T17:48:51.504226Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2bf35e8e-28c9-49c3-948a-854097030f2c\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"82980649-7416-405a-a882-bafd1fdd5d4c\",\"created_at\":\"2026-02-19T16:48:52.562843Z\",\"modified_at\":\"2026-02-19T16:48:52.562843Z\",\"started_at\":\"2026-02-19T16:48:52.562843Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2bf35e8e-28c9-49c3-948a-854097030f2c\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"a9fca162-a79b-4a3e-b67a-571fdca4b0d6\",\"created_at\":\"2026-02-19T15:48:45.758873Z\",\"modified_at\":\"2026-02-19T15:48:45.758873Z\",\"started_at\":\"2026-02-19T15:48:45.758873Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2bf35e8e-28c9-49c3-948a-854097030f2c\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"b57576ee-457d-43da-9b17-f7e9087ab4a4\",\"type\":\"status_pages\"}}}},{\"id\":\"c6150974-eab5-4ca9-93a5-78b615b22801\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T17:48:46.187Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"6407bf01-0c11-4509-8ae6-24c77cf205da\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T17:48:50.958358Z\",\"published_date\":\"2026-02-19T15:48:47.266145Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T16:48:46.187Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"fd8aaab4-2f77-4e5d-9f0f-5255e40b33a0\",\"created_at\":\"2026-02-19T17:48:50.958358Z\",\"modified_at\":\"2026-02-19T17:48:50.958358Z\",\"started_at\":\"2026-02-19T17:48:50.958358Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"6407bf01-0c11-4509-8ae6-24c77cf205da\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"66ea1633-4c51-4e7a-9eb2-d85d810e4ae9\",\"created_at\":\"2026-02-19T16:48:52.244498Z\",\"modified_at\":\"2026-02-19T16:48:52.244498Z\",\"started_at\":\"2026-02-19T16:48:52.244498Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"6407bf01-0c11-4509-8ae6-24c77cf205da\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"19f9e7b6-ba0f-4567-8984-ac145414f81d\",\"created_at\":\"2026-02-19T15:48:47.266145Z\",\"modified_at\":\"2026-02-19T15:48:47.266145Z\",\"started_at\":\"2026-02-19T15:48:47.266145Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"6407bf01-0c11-4509-8ae6-24c77cf205da\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"a8e6fdb1-05c8-416c-a150-9af49c513206\",\"type\":\"status_pages\"}}}},{\"id\":\"a0ba86bb-b5da-4fb7-9f14-d69d0dcba6d6\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T17:48:47.701Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"5cc44628-14ac-4563-a052-5b1f9a3fa3e4\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-02-19T17:48:52.64131Z\",\"published_date\":\"2026-02-19T15:48:48.889128Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-02-19T16:48:47.701Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"aa6a3313-db4e-4236-8d20-621907bd69fd\",\"created_at\":\"2026-02-19T17:48:52.64131Z\",\"modified_at\":\"2026-02-19T17:48:52.64131Z\",\"started_at\":\"2026-02-19T17:48:52.64131Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"5cc44628-14ac-4563-a052-5b1f9a3fa3e4\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"c4e8af34-28d8-4471-a7af-93f625314e61\",\"created_at\":\"2026-02-19T16:48:52.612772Z\",\"modified_at\":\"2026-02-19T16:48:52.612772Z\",\"started_at\":\"2026-02-19T16:48:52.612772Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"components_affected\":[{\"id\":\"5cc44628-14ac-4563-a052-5b1f9a3fa3e4\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"77718021-f74f-4170-b26b-22e2e54f37c5\",\"created_at\":\"2026-02-19T15:48:48.889128Z\",\"modified_at\":\"2026-02-19T15:48:48.889128Z\",\"started_at\":\"2026-02-19T15:48:48.889128Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"5cc44628-14ac-4563-a052-5b1f9a3fa3e4\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"cfbf3ff5-f7e6-4d6c-8175-cbff110ebfc9\",\"type\":\"status_pages\"}}}},{\"id\":\"9b6a31cf-ef44-4185-8cd4-9355ba5a44c9\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:05:01.67Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"0da9e91e-519e-4d1b-a530-95dbf9b1d6a3\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T18:05:06.005306Z\",\"published_date\":\"2026-02-19T16:05:02.831343Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T17:05:01.67Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"afad908a-1dac-409c-a8fd-ffa57399361a\",\"created_at\":\"2026-02-19T18:05:06.005306Z\",\"modified_at\":\"2026-02-19T18:05:06.005306Z\",\"started_at\":\"2026-02-19T18:05:06.005306Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"0da9e91e-519e-4d1b-a530-95dbf9b1d6a3\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"31265ba4-b0b7-4e34-8364-068ad60af91d\",\"created_at\":\"2026-02-19T17:05:11.035132Z\",\"modified_at\":\"2026-02-19T17:05:11.035132Z\",\"started_at\":\"2026-02-19T17:05:11.035132Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"0da9e91e-519e-4d1b-a530-95dbf9b1d6a3\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"9a5a0962-7ca7-4d2c-9717-8c7df395d512\",\"created_at\":\"2026-02-19T16:05:02.831343Z\",\"modified_at\":\"2026-02-19T16:05:02.831343Z\",\"started_at\":\"2026-02-19T16:05:02.831343Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"0da9e91e-519e-4d1b-a530-95dbf9b1d6a3\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"c3af2a4f-dd6e-4777-8899-7be70c0e629c\",\"type\":\"status_pages\"}}}},{\"id\":\"d94642f5-fe45-46b8-a61d-f48dee50fc8b\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:05:03.183Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2ec5ce94-7c6b-4883-b963-774cde63af0e\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T18:05:09.356968Z\",\"published_date\":\"2026-02-19T16:05:04.238719Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T17:05:03.183Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"52b79331-678b-47e7-ba86-26d0c3b22b70\",\"created_at\":\"2026-02-19T18:05:09.356968Z\",\"modified_at\":\"2026-02-19T18:05:09.356968Z\",\"started_at\":\"2026-02-19T18:05:09.356968Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2ec5ce94-7c6b-4883-b963-774cde63af0e\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"2a7e245f-1f32-4708-8f36-ccfd5c545719\",\"created_at\":\"2026-02-19T17:05:11.018617Z\",\"modified_at\":\"2026-02-19T17:05:11.018617Z\",\"started_at\":\"2026-02-19T17:05:11.018617Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2ec5ce94-7c6b-4883-b963-774cde63af0e\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"d55f8f1d-09d8-4f08-9d04-24f7d719841e\",\"created_at\":\"2026-02-19T16:05:04.238719Z\",\"modified_at\":\"2026-02-19T16:05:04.238719Z\",\"started_at\":\"2026-02-19T16:05:04.238719Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2ec5ce94-7c6b-4883-b963-774cde63af0e\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"e4a07280-5e60-41e8-8868-d6b391ac9ba4\",\"type\":\"status_pages\"}}}},{\"id\":\"e47a4a10-abac-4196-a38f-95a05e4d3a73\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:05:04.644Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"c354419b-c97e-49c6-b556-a2bd73c2945b\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-02-19T18:05:16.800514Z\",\"published_date\":\"2026-02-19T16:05:05.525216Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-02-19T17:05:04.644Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"31f2ab95-151a-45ca-833c-82d9a9b1335b\",\"created_at\":\"2026-02-19T18:05:16.800514Z\",\"modified_at\":\"2026-02-19T18:05:16.800514Z\",\"started_at\":\"2026-02-19T18:05:16.800514Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"c354419b-c97e-49c6-b556-a2bd73c2945b\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"2b337ccf-3b7d-4360-9d64-a96471191650\",\"created_at\":\"2026-02-19T17:05:11.670406Z\",\"modified_at\":\"2026-02-19T17:05:11.670406Z\",\"started_at\":\"2026-02-19T17:05:11.670406Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"components_affected\":[{\"id\":\"c354419b-c97e-49c6-b556-a2bd73c2945b\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"7c4544d5-5c50-4833-89cf-8dda15768115\",\"created_at\":\"2026-02-19T16:05:05.525216Z\",\"modified_at\":\"2026-02-19T16:05:05.525216Z\",\"started_at\":\"2026-02-19T16:05:05.525216Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"c354419b-c97e-49c6-b556-a2bd73c2945b\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"9554c1f6-837d-4ce9-8682-90cc44689d6e\",\"type\":\"status_pages\"}}}},{\"id\":\"798fb3e3-453e-44e2-bc6f-fd29f5d4b5da\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:26:36.738Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2a064c38-b34c-4afd-8958-567b4fb94891\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T18:26:39.660886Z\",\"published_date\":\"2026-02-19T16:26:37.551277Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T17:26:36.738Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"a7a4a4e7-3a7a-4324-8d8d-869bc9c87085\",\"created_at\":\"2026-02-19T18:26:39.660886Z\",\"modified_at\":\"2026-02-19T18:26:39.660886Z\",\"started_at\":\"2026-02-19T18:26:39.660886Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2a064c38-b34c-4afd-8958-567b4fb94891\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"fc42e821-999c-4bcd-a7fe-c41a8f53a4f3\",\"created_at\":\"2026-02-19T17:26:41.211615Z\",\"modified_at\":\"2026-02-19T17:26:41.211615Z\",\"started_at\":\"2026-02-19T17:26:41.211615Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2a064c38-b34c-4afd-8958-567b4fb94891\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"5c982a14-c686-4abf-9cd0-1560f489efe4\",\"created_at\":\"2026-02-19T16:26:37.551277Z\",\"modified_at\":\"2026-02-19T16:26:37.551277Z\",\"started_at\":\"2026-02-19T16:26:37.551277Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"2a064c38-b34c-4afd-8958-567b4fb94891\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"ef7f6596-79dd-4f10-9e02-96047289e678\",\"type\":\"status_pages\"}}}},{\"id\":\"b0bc5c8b-4b21-49d6-8a63-fc58846cd85f\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:26:41.901Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"eb5ff7d4-3faa-4216-9141-b616ecfa29a7\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T18:26:50.363316Z\",\"published_date\":\"2026-02-19T16:26:42.616591Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T17:26:41.901Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"d0a52474-99f4-45f4-ac23-fd97755e1825\",\"created_at\":\"2026-02-19T18:26:50.363316Z\",\"modified_at\":\"2026-02-19T18:26:50.363316Z\",\"started_at\":\"2026-02-19T18:26:50.363316Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"eb5ff7d4-3faa-4216-9141-b616ecfa29a7\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"a722ee55-83b1-4366-bbe7-d6228c67d6db\",\"created_at\":\"2026-02-19T17:26:50.619047Z\",\"modified_at\":\"2026-02-19T17:26:50.619047Z\",\"started_at\":\"2026-02-19T17:26:50.619047Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"eb5ff7d4-3faa-4216-9141-b616ecfa29a7\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"b2a2964f-28ec-40db-9cdc-507c4343232d\",\"created_at\":\"2026-02-19T16:26:42.616591Z\",\"modified_at\":\"2026-02-19T16:26:42.616591Z\",\"started_at\":\"2026-02-19T16:26:42.616591Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"eb5ff7d4-3faa-4216-9141-b616ecfa29a7\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"d3167fc5-957d-4ec6-a55d-d75a5eb1926a\",\"type\":\"status_pages\"}}}},{\"id\":\"080453e2-155d-4807-aec4-b50cb4edccc7\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:26:47.556Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"222ce53c-1646-45bc-a5d4-27e0a4eb0313\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-02-19T18:26:50.306926Z\",\"published_date\":\"2026-02-19T16:26:48.303105Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-02-19T17:26:47.556Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"e1f2c1a8-2797-4eb8-9e90-ad0aae8315f7\",\"created_at\":\"2026-02-19T18:26:50.306926Z\",\"modified_at\":\"2026-02-19T18:26:50.306926Z\",\"started_at\":\"2026-02-19T18:26:50.306926Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"222ce53c-1646-45bc-a5d4-27e0a4eb0313\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"3a591848-156c-4043-9c23-7c23d7882b20\",\"created_at\":\"2026-02-19T17:26:54.951261Z\",\"modified_at\":\"2026-02-19T17:26:54.951261Z\",\"started_at\":\"2026-02-19T17:26:54.951261Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"components_affected\":[{\"id\":\"222ce53c-1646-45bc-a5d4-27e0a4eb0313\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"39aec418-b668-489d-92ab-519149092c7d\",\"created_at\":\"2026-02-19T16:26:48.303105Z\",\"modified_at\":\"2026-02-19T16:26:48.303105Z\",\"started_at\":\"2026-02-19T16:26:48.303105Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"222ce53c-1646-45bc-a5d4-27e0a4eb0313\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"7e1c914a-7b5d-4928-9603-2c231f4e27b5\",\"type\":\"status_pages\"}}}},{\"id\":\"6c7a18e8-ec4a-44a0-b769-a300bfd4647f\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:41:05.953Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"e19596ba-245c-49dc-9274-5aa1b7e865f5\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T18:41:10.642682Z\",\"published_date\":\"2026-02-19T16:41:06.978106Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T17:41:05.953Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"9dea7ab6-3b6d-40f5-bf02-b2509e5d7ef6\",\"created_at\":\"2026-02-19T18:41:10.642682Z\",\"modified_at\":\"2026-02-19T18:41:10.642682Z\",\"started_at\":\"2026-02-19T18:41:10.642682Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"e19596ba-245c-49dc-9274-5aa1b7e865f5\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"3cedcd9f-f4d2-41f3-acaf-74eaedb0c840\",\"created_at\":\"2026-02-19T17:41:18.858442Z\",\"modified_at\":\"2026-02-19T17:41:18.858442Z\",\"started_at\":\"2026-02-19T17:41:18.858442Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"e19596ba-245c-49dc-9274-5aa1b7e865f5\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"5bcb7196-17d4-440d-92cb-b6fc3e89ca92\",\"created_at\":\"2026-02-19T16:41:06.978106Z\",\"modified_at\":\"2026-02-19T16:41:06.978106Z\",\"started_at\":\"2026-02-19T16:41:06.978106Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"e19596ba-245c-49dc-9274-5aa1b7e865f5\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"a8e3fb88-56ee-4f01-8909-734f9a066177\",\"type\":\"status_pages\"}}}},{\"id\":\"563de34b-6e0e-4304-a00a-d080c7a3add6\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:41:11.445Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"862e2d94-1286-423c-86ec-541f5f5aa5e6\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T18:41:21.384964Z\",\"published_date\":\"2026-02-19T16:41:12.248062Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T17:41:11.445Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"49b97e00-3bb0-4796-a6a9-15838fe59797\",\"created_at\":\"2026-02-19T18:41:21.384964Z\",\"modified_at\":\"2026-02-19T18:41:21.384964Z\",\"started_at\":\"2026-02-19T18:41:21.384964Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"862e2d94-1286-423c-86ec-541f5f5aa5e6\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"336fe68b-506d-41b9-8a6e-ce0c5e9c50f6\",\"created_at\":\"2026-02-19T17:41:20.982233Z\",\"modified_at\":\"2026-02-19T17:41:20.982233Z\",\"started_at\":\"2026-02-19T17:41:20.982233Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"862e2d94-1286-423c-86ec-541f5f5aa5e6\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"f1eae39b-e846-45c9-a9cd-b0ee05b7abe1\",\"created_at\":\"2026-02-19T16:41:12.248062Z\",\"modified_at\":\"2026-02-19T16:41:12.248062Z\",\"started_at\":\"2026-02-19T16:41:12.248062Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"862e2d94-1286-423c-86ec-541f5f5aa5e6\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"7c3eff68-42fb-4ddb-8761-3e7695d79570\",\"type\":\"status_pages\"}}}},{\"id\":\"3f7e4061-f99e-48e1-ac4d-02f175e556a5\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:41:17.115Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"03b85dec-3f1c-4bc1-b6a6-c3070e94aaa7\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-02-19T18:41:21.354571Z\",\"published_date\":\"2026-02-19T16:41:17.821981Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-02-19T17:41:17.115Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"e887c9c6-9d32-41ad-915b-f59457d46200\",\"created_at\":\"2026-02-19T18:41:21.354571Z\",\"modified_at\":\"2026-02-19T18:41:21.354571Z\",\"started_at\":\"2026-02-19T18:41:21.354571Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"03b85dec-3f1c-4bc1-b6a6-c3070e94aaa7\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"b7b92c17-d92a-4d1f-8c80-33808033ac42\",\"created_at\":\"2026-02-19T17:41:23.212672Z\",\"modified_at\":\"2026-02-19T17:41:23.212672Z\",\"started_at\":\"2026-02-19T17:41:23.212672Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"components_affected\":[{\"id\":\"03b85dec-3f1c-4bc1-b6a6-c3070e94aaa7\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"ad754c3b-05d8-4618-9d56-c03ec63c3c16\",\"created_at\":\"2026-02-19T16:41:17.821981Z\",\"modified_at\":\"2026-02-19T16:41:17.821981Z\",\"started_at\":\"2026-02-19T16:41:17.821981Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"03b85dec-3f1c-4bc1-b6a6-c3070e94aaa7\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"4561e0f5-5a64-4bc9-b16c-654d3d81325a\",\"type\":\"status_pages\"}}}},{\"id\":\"7b2e52dd-cbca-4ba4-a73b-30b8e5df6094\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2027-02-19T17:13:22.043Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"c4d3a1be-8d3d-4b09-9521-b03d5c1e6fdd\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T16:43:58.312902Z\",\"published_date\":\"2026-02-19T16:43:58.312902Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2027-02-19T16:13:22.043Z\",\"status\":\"scheduled\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"d727f2e1-86de-4780-9a83-32e9615f24ab\",\"created_at\":\"2026-02-19T16:43:58.312902Z\",\"modified_at\":\"2026-02-19T16:43:58.312902Z\",\"started_at\":\"2026-02-19T16:43:58.312902Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"c4d3a1be-8d3d-4b09-9521-b03d5c1e6fdd\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"0e37a7c0-9b0c-4c4e-b315-6b5e145390af\",\"type\":\"status_pages\"}}}},{\"id\":\"0cc3280d-2127-4429-9777-18ff1d0025f7\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:44:06.253Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"579f0d5c-cce7-4666-98f3-40a696be8cc7\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T18:44:14.043097Z\",\"published_date\":\"2026-02-19T16:44:06.928335Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T17:44:06.253Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"f8fd0b5a-851d-4909-9f0a-552687659550\",\"created_at\":\"2026-02-19T18:44:14.043097Z\",\"modified_at\":\"2026-02-19T18:44:14.043097Z\",\"started_at\":\"2026-02-19T18:44:14.043097Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"579f0d5c-cce7-4666-98f3-40a696be8cc7\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"05abf843-058a-44b2-8c4a-178893cfb59c\",\"created_at\":\"2026-02-19T17:44:16.964205Z\",\"modified_at\":\"2026-02-19T17:44:16.964205Z\",\"started_at\":\"2026-02-19T17:44:16.964205Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"579f0d5c-cce7-4666-98f3-40a696be8cc7\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"558325df-2d6d-4343-9a97-f6c9e165b4f1\",\"created_at\":\"2026-02-19T16:44:06.928335Z\",\"modified_at\":\"2026-02-19T16:44:06.928335Z\",\"started_at\":\"2026-02-19T16:44:06.928335Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"579f0d5c-cce7-4666-98f3-40a696be8cc7\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"016f2768-6987-4a8f-898b-ab94e17b3dd3\",\"type\":\"status_pages\"}}}},{\"id\":\"ab486ec9-5e60-4d2b-88f3-86cce89baeb9\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:44:11.197Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"d1d9b93d-301d-4dad-8f3b-4475a3fad1b1\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T18:44:24.658174Z\",\"published_date\":\"2026-02-19T16:44:11.945804Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T17:44:11.197Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"b50bbda8-d21b-4653-8602-b9be48316cf5\",\"created_at\":\"2026-02-19T18:44:24.658174Z\",\"modified_at\":\"2026-02-19T18:44:24.658174Z\",\"started_at\":\"2026-02-19T18:44:24.658174Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"d1d9b93d-301d-4dad-8f3b-4475a3fad1b1\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"49c62cd2-f176-4829-8dd5-138778c2902c\",\"created_at\":\"2026-02-19T17:44:15.757371Z\",\"modified_at\":\"2026-02-19T17:44:15.757371Z\",\"started_at\":\"2026-02-19T17:44:15.757371Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"d1d9b93d-301d-4dad-8f3b-4475a3fad1b1\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"9e272ba1-8d7e-41c5-8454-5d7f15864b90\",\"created_at\":\"2026-02-19T16:44:11.945804Z\",\"modified_at\":\"2026-02-19T16:44:11.945804Z\",\"started_at\":\"2026-02-19T16:44:11.945804Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"d1d9b93d-301d-4dad-8f3b-4475a3fad1b1\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"bd3f1d69-4ee1-428d-8ac8-f03f387a7677\",\"type\":\"status_pages\"}}}},{\"id\":\"dd68d4f9-5eff-4ab9-bbb4-bd80ef184b07\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T18:44:16.748Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"44da03e1-1b23-4100-b26f-68ab4f8ca457\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-02-19T18:44:24.483553Z\",\"published_date\":\"2026-02-19T16:44:17.427344Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-02-19T17:44:16.748Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"19b8a7d2-7164-4383-bdf2-463de3d1242c\",\"created_at\":\"2026-02-19T18:44:24.483553Z\",\"modified_at\":\"2026-02-19T18:44:24.483553Z\",\"started_at\":\"2026-02-19T18:44:24.483553Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"44da03e1-1b23-4100-b26f-68ab4f8ca457\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"bc432e95-9e82-4b4c-a152-11a10acc0217\",\"created_at\":\"2026-02-19T17:44:26.587427Z\",\"modified_at\":\"2026-02-19T17:44:26.587427Z\",\"started_at\":\"2026-02-19T17:44:26.587427Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"components_affected\":[{\"id\":\"44da03e1-1b23-4100-b26f-68ab4f8ca457\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"9cf9afba-2352-4e3c-9bca-a52a60ce2950\",\"created_at\":\"2026-02-19T16:44:17.427344Z\",\"modified_at\":\"2026-02-19T16:44:17.427344Z\",\"started_at\":\"2026-02-19T16:44:17.427344Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"44da03e1-1b23-4100-b26f-68ab4f8ca457\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"33c6f810-15d8-4ce2-835b-1ac3a6ca1dbc\",\"type\":\"status_pages\"}}}},{\"id\":\"42680154-cc22-432b-8132-dff3184823fa\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T23:06:20.302Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"63331812-b5a5-422a-889a-f7ca633b2d80\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T23:06:27.555615Z\",\"published_date\":\"2026-02-19T21:06:21.347203Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T22:06:20.302Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"a474fbb2-6d26-4a46-8c1b-51e5e1a2d3db\",\"created_at\":\"2026-02-19T23:06:27.555615Z\",\"modified_at\":\"2026-02-19T23:06:27.555615Z\",\"started_at\":\"2026-02-19T23:06:27.555615Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"63331812-b5a5-422a-889a-f7ca633b2d80\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"f32fa6c4-f239-404d-a3a1-914b3efb5430\",\"created_at\":\"2026-02-19T22:06:29.588858Z\",\"modified_at\":\"2026-02-19T22:06:29.588858Z\",\"started_at\":\"2026-02-19T22:06:29.588858Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"63331812-b5a5-422a-889a-f7ca633b2d80\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"6e23db69-3e05-49d2-890c-c5c619e95bd6\",\"created_at\":\"2026-02-19T21:06:21.347203Z\",\"modified_at\":\"2026-02-19T21:06:21.347203Z\",\"started_at\":\"2026-02-19T21:06:21.347203Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"63331812-b5a5-422a-889a-f7ca633b2d80\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"0751ca80-99db-4247-ae44-655162fa07a9\",\"type\":\"status_pages\"}}}},{\"id\":\"7c30b38a-5670-4187-8ee3-dbf13cfc969f\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T23:06:26.166Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"9fabc1b3-bfc4-45f5-8fe7-6b284be04d28\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T23:06:37.235313Z\",\"published_date\":\"2026-02-19T21:06:27.326948Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T22:06:26.166Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"80a778de-732e-46a7-b71a-11f6f57e250c\",\"created_at\":\"2026-02-19T23:06:37.235313Z\",\"modified_at\":\"2026-02-19T23:06:37.235313Z\",\"started_at\":\"2026-02-19T23:06:37.235313Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"9fabc1b3-bfc4-45f5-8fe7-6b284be04d28\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"a7bc678e-38c0-4a04-94b3-e3c8cd290180\",\"created_at\":\"2026-02-19T22:06:29.055847Z\",\"modified_at\":\"2026-02-19T22:06:29.055847Z\",\"started_at\":\"2026-02-19T22:06:29.055847Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"9fabc1b3-bfc4-45f5-8fe7-6b284be04d28\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"2ce54aea-a951-4f0f-899e-5b177b28343c\",\"created_at\":\"2026-02-19T21:06:27.326948Z\",\"modified_at\":\"2026-02-19T21:06:27.326948Z\",\"started_at\":\"2026-02-19T21:06:27.326948Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"9fabc1b3-bfc4-45f5-8fe7-6b284be04d28\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"6cb07301-fa51-4113-babd-229a0e86942e\",\"type\":\"status_pages\"}}}},{\"id\":\"3f112086-958b-472f-84b0-04513a6ac860\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T23:06:32.872Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"de9b6f98-2556-44c9-bb88-9d839e1fda62\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-02-19T23:06:36.563708Z\",\"published_date\":\"2026-02-19T21:06:33.926332Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-02-19T22:06:32.872Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"fc8ae217-7e51-40a1-b24b-6945bf101662\",\"created_at\":\"2026-02-19T23:06:36.563708Z\",\"modified_at\":\"2026-02-19T23:06:36.563708Z\",\"started_at\":\"2026-02-19T23:06:36.563708Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"de9b6f98-2556-44c9-bb88-9d839e1fda62\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"ef519943-1c85-4e7a-8b06-94fd196b7a1c\",\"created_at\":\"2026-02-19T22:06:43.335346Z\",\"modified_at\":\"2026-02-19T22:06:43.335346Z\",\"started_at\":\"2026-02-19T22:06:43.335346Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"components_affected\":[{\"id\":\"de9b6f98-2556-44c9-bb88-9d839e1fda62\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"ed7b7ce3-9911-4da3-8b45-0fba052f3139\",\"created_at\":\"2026-02-19T21:06:33.926332Z\",\"modified_at\":\"2026-02-19T21:06:33.926332Z\",\"started_at\":\"2026-02-19T21:06:33.926332Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"de9b6f98-2556-44c9-bb88-9d839e1fda62\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"4d753d2f-1348-486d-afc7-22f3e1759af3\",\"type\":\"status_pages\"}}}},{\"id\":\"93176296-d3a5-4727-992a-ca43645b0d42\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T23:52:07.519Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"ff177f6a-17ed-4f5a-85c3-04b43621b282\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T23:52:19.215417Z\",\"published_date\":\"2026-02-19T21:52:09.105685Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T22:52:07.519Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"f1354169-871b-4e37-8f2e-9f469a7c3cae\",\"created_at\":\"2026-02-19T23:52:19.215417Z\",\"modified_at\":\"2026-02-19T23:52:19.215417Z\",\"started_at\":\"2026-02-19T23:52:19.215417Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"ff177f6a-17ed-4f5a-85c3-04b43621b282\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"922c3d4c-d2c2-4c0c-a3d2-998b41e89ade\",\"created_at\":\"2026-02-19T22:52:18.414197Z\",\"modified_at\":\"2026-02-19T22:52:18.414197Z\",\"started_at\":\"2026-02-19T22:52:18.414197Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"ff177f6a-17ed-4f5a-85c3-04b43621b282\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"cf3f4522-c823-463d-8e2b-d324ab9c961e\",\"created_at\":\"2026-02-19T21:52:09.105685Z\",\"modified_at\":\"2026-02-19T21:52:09.105685Z\",\"started_at\":\"2026-02-19T21:52:09.105685Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"ff177f6a-17ed-4f5a-85c3-04b43621b282\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"8d197716-0610-42ec-8bdf-8b571a68bfbe\",\"type\":\"status_pages\"}}}},{\"id\":\"99ce86c5-a232-4598-a405-4d7788294e9b\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T23:52:09.18Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"deb7b997-4f57-48b3-9dbf-4eaee77a8418\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T23:52:16.627844Z\",\"published_date\":\"2026-02-19T21:52:09.974133Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T22:52:09.18Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"72276413-5dfc-4422-bc7e-00c5e06db10e\",\"created_at\":\"2026-02-19T23:52:16.627844Z\",\"modified_at\":\"2026-02-19T23:52:16.627844Z\",\"started_at\":\"2026-02-19T23:52:16.627844Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"deb7b997-4f57-48b3-9dbf-4eaee77a8418\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"526d8c55-b5c1-42bf-afed-742812b6bc0f\",\"created_at\":\"2026-02-19T22:52:17.898547Z\",\"modified_at\":\"2026-02-19T22:52:17.898547Z\",\"started_at\":\"2026-02-19T22:52:17.898547Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"deb7b997-4f57-48b3-9dbf-4eaee77a8418\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"e9386e02-9cc9-4945-a840-fa20b00c4a66\",\"created_at\":\"2026-02-19T21:52:09.974133Z\",\"modified_at\":\"2026-02-19T21:52:09.974133Z\",\"started_at\":\"2026-02-19T21:52:09.974133Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"deb7b997-4f57-48b3-9dbf-4eaee77a8418\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"5d9fb154-2016-4209-a1aa-ffbb26b834cd\",\"type\":\"status_pages\"}}}},{\"id\":\"3bc4965e-8bca-45b7-b886-8fca2e92ddcc\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T23:52:10.173Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"12171b79-aaa4-4508-b3c5-e58d0315735d\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-19T23:52:17.541234Z\",\"published_date\":\"2026-02-19T21:52:11.35385Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T22:52:10.173Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"42fb9eb5-4ad3-4142-a731-2a444e47d31f\",\"created_at\":\"2026-02-19T23:52:17.541234Z\",\"modified_at\":\"2026-02-19T23:52:17.541234Z\",\"started_at\":\"2026-02-19T23:52:17.541234Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"12171b79-aaa4-4508-b3c5-e58d0315735d\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"c8e389a5-8a0b-4d7c-8922-181b61b3256f\",\"created_at\":\"2026-02-19T22:52:18.033924Z\",\"modified_at\":\"2026-02-19T22:52:18.033924Z\",\"started_at\":\"2026-02-19T22:52:18.033924Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"12171b79-aaa4-4508-b3c5-e58d0315735d\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"7b4c5d5b-9324-4283-8142-ac1b3b1c3d8b\",\"created_at\":\"2026-02-19T21:52:11.35385Z\",\"modified_at\":\"2026-02-19T21:52:11.35385Z\",\"started_at\":\"2026-02-19T21:52:11.35385Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"12171b79-aaa4-4508-b3c5-e58d0315735d\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"e9af0690-5634-4b5a-9a39-0024f5a94c5a\",\"type\":\"status_pages\"}}}},{\"id\":\"4ac0806e-a33a-441e-93b9-f7012f7e992a\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-19T23:52:11.693Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"6005b8d9-223c-49bb-b179-57c183557b28\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-02-19T23:52:24.250139Z\",\"published_date\":\"2026-02-19T21:52:12.42919Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-02-19T22:52:11.693Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"803c5c15-ff2b-4720-bd20-2ab3e9aca4bf\",\"created_at\":\"2026-02-19T23:52:24.250139Z\",\"modified_at\":\"2026-02-19T23:52:24.250139Z\",\"started_at\":\"2026-02-19T23:52:24.250139Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"6005b8d9-223c-49bb-b179-57c183557b28\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"7dc2ffcb-9105-4d49-8dfa-17204e3b82bf\",\"created_at\":\"2026-02-19T22:52:19.367788Z\",\"modified_at\":\"2026-02-19T22:52:19.367788Z\",\"started_at\":\"2026-02-19T22:52:19.367788Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"components_affected\":[{\"id\":\"6005b8d9-223c-49bb-b179-57c183557b28\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"58eea7a5-81d7-4e03-a1c3-334638addf91\",\"created_at\":\"2026-02-19T21:52:12.42919Z\",\"modified_at\":\"2026-02-19T21:52:12.42919Z\",\"started_at\":\"2026-02-19T21:52:12.42919Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"6005b8d9-223c-49bb-b179-57c183557b28\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"4fd54afd-fa2c-427d-8b40-897968e2dc3d\",\"type\":\"status_pages\"}}}},{\"id\":\"e5c44d06-1f97-4b25-9736-6ebf48115883\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-20T00:08:11.382Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"a56c992a-ea84-4df0-86da-65a9ebe3b1c3\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-20T00:08:17.566083Z\",\"published_date\":\"2026-02-19T22:08:13.002283Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T23:08:11.382Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"0273f0ee-b73f-4b37-b939-e5152bc04d95\",\"created_at\":\"2026-02-20T00:08:17.566083Z\",\"modified_at\":\"2026-02-20T00:08:17.566083Z\",\"started_at\":\"2026-02-20T00:08:17.566083Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"a56c992a-ea84-4df0-86da-65a9ebe3b1c3\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"a20bc5ab-efed-4d72-8eae-c1b6a0f607a6\",\"created_at\":\"2026-02-19T23:08:22.812962Z\",\"modified_at\":\"2026-02-19T23:08:22.812962Z\",\"started_at\":\"2026-02-19T23:08:22.812962Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"a56c992a-ea84-4df0-86da-65a9ebe3b1c3\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"f7e0615d-822e-478f-8ede-98f97d1201f3\",\"created_at\":\"2026-02-19T22:08:13.002283Z\",\"modified_at\":\"2026-02-19T22:08:13.002283Z\",\"started_at\":\"2026-02-19T22:08:13.002283Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"a56c992a-ea84-4df0-86da-65a9ebe3b1c3\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"9d623a97-ec26-4e2b-a156-64169eff130e\",\"type\":\"status_pages\"}}}},{\"id\":\"0f52de2a-b23a-49b7-b942-c51e3c2c47e9\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-20T00:08:13.062Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"4239bd23-e472-4a5e-b489-40bda1fe99e6\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-20T00:08:17.549539Z\",\"published_date\":\"2026-02-19T22:08:13.812185Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T23:08:13.062Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"3ebf4659-1c13-4a99-9cd5-a78aa5fb8d7d\",\"created_at\":\"2026-02-20T00:08:17.549539Z\",\"modified_at\":\"2026-02-20T00:08:17.549539Z\",\"started_at\":\"2026-02-20T00:08:17.549539Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"4239bd23-e472-4a5e-b489-40bda1fe99e6\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"b35c15c4-8e2d-4e18-9b47-b19f49b71642\",\"created_at\":\"2026-02-19T23:08:27.245166Z\",\"modified_at\":\"2026-02-19T23:08:27.245166Z\",\"started_at\":\"2026-02-19T23:08:27.245166Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"4239bd23-e472-4a5e-b489-40bda1fe99e6\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"e271d82f-a17e-4744-b7df-01a8109d6454\",\"created_at\":\"2026-02-19T22:08:13.812185Z\",\"modified_at\":\"2026-02-19T22:08:13.812185Z\",\"started_at\":\"2026-02-19T22:08:13.812185Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"4239bd23-e472-4a5e-b489-40bda1fe99e6\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"1d52408e-1180-4704-be65-ca3dc0e17dbc\",\"type\":\"status_pages\"}}}},{\"id\":\"c21d0303-18dd-4175-85c7-96a597319a4e\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-20T00:08:14.03Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"37805b01-c997-40cb-8680-5322c12049de\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-02-20T00:08:27.376456Z\",\"published_date\":\"2026-02-19T22:08:14.677394Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-02-19T23:08:14.03Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"6910751e-1835-4dfe-a7d9-e35763bce390\",\"created_at\":\"2026-02-20T00:08:27.376456Z\",\"modified_at\":\"2026-02-20T00:08:27.376456Z\",\"started_at\":\"2026-02-20T00:08:27.376456Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"37805b01-c997-40cb-8680-5322c12049de\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"615c9252-f5d2-4f9f-866b-0d02bbd480d3\",\"created_at\":\"2026-02-19T23:08:26.18059Z\",\"modified_at\":\"2026-02-19T23:08:26.18059Z\",\"started_at\":\"2026-02-19T23:08:26.18059Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"37805b01-c997-40cb-8680-5322c12049de\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"964f3408-f732-4874-a6d0-3622c524ee5b\",\"created_at\":\"2026-02-19T22:08:14.677394Z\",\"modified_at\":\"2026-02-19T22:08:14.677394Z\",\"started_at\":\"2026-02-19T22:08:14.677394Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"37805b01-c997-40cb-8680-5322c12049de\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"c4269d26-2a7a-48d8-b35c-0d065f5bdbdb\",\"type\":\"status_pages\"}}}},{\"id\":\"514f921f-2c5b-43a7-9d96-f1dfcc98ecc1\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-02-20T00:08:15.511Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"ca2479b6-c0fb-4926-8c05-38814139de99\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-02-20T00:08:27.957772Z\",\"published_date\":\"2026-02-19T22:08:16.214384Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-02-19T23:08:15.511Z\",\"status\":\"completed\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"5be70f2a-615a-4137-b3ad-096c66e2ac39\",\"created_at\":\"2026-02-20T00:08:27.957772Z\",\"modified_at\":\"2026-02-20T00:08:27.957772Z\",\"started_at\":\"2026-02-20T00:08:27.957772Z\",\"manual_transition\":false,\"status\":\"completed\",\"description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"ca2479b6-c0fb-4926-8c05-38814139de99\",\"name\":\"Login\",\"status\":\"operational\"}]},{\"id\":\"edfa4c0e-fd91-47a4-8a3c-fe1085f4964f\",\"created_at\":\"2026-02-19T23:08:26.917491Z\",\"modified_at\":\"2026-02-19T23:08:26.917491Z\",\"started_at\":\"2026-02-19T23:08:26.917491Z\",\"manual_transition\":false,\"status\":\"in_progress\",\"description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"components_affected\":[{\"id\":\"ca2479b6-c0fb-4926-8c05-38814139de99\",\"name\":\"Login\",\"status\":\"maintenance\"}]},{\"id\":\"aea79e6d-bfcd-455d-8be5-19513813b166\",\"created_at\":\"2026-02-19T22:08:16.214384Z\",\"modified_at\":\"2026-02-19T22:08:16.214384Z\",\"started_at\":\"2026-02-19T22:08:16.214384Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"ca2479b6-c0fb-4926-8c05-38814139de99\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"b03f7910-c533-4093-b978-e0f6db6a9af4\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"0061b471-af16-4c9c-a704-f5fb53ec871e\",\"type\":\"status_pages\"}}}},{\"id\":\"22833f1f-d2fd-4d15-adb3-af160bbf8dc2\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-04-24T16:12:58.081Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"38594a81-bedd-4064-b253-585aec9e2310\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-04-24T14:12:59.117952Z\",\"published_date\":\"2026-04-24T14:12:59.117952Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-04-24T15:12:58.081Z\",\"status\":\"scheduled\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"0a6b63b8-b976-4c3c-b04b-1d2aeb9abf2b\",\"created_at\":\"2026-04-24T14:12:59.117952Z\",\"modified_at\":\"2026-04-24T14:12:59.117952Z\",\"started_at\":\"2026-04-24T14:12:59.117952Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"38594a81-bedd-4064-b253-585aec9e2310\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"c044daac-5bf2-4333-87f2-24589aa25858\",\"type\":\"status_pages\"}}}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":0,\"limit\":50,\"total\":31,\"first_offset\":0,\"prev_offset\":null,\"next_offset\":null,\"last_offset\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/c044daac-5bf2-4333-87f2-24589aa25858", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List maintenances returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:13:00.198Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "2b90e2c3f44aba2a", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"173a6511-d9cf-475f-bf66-b0cec4173d31\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"e3155909-5d11-4625-92c3-df84915a0014\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"d423b8d2-e7cb-43fc-9b48-470e74b554df\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"d3f995aa-7190-417c-98a0-9d34266474e1\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:13:00.408918Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"2b90e2c3f44aba2a\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:13:00.408918Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/173a6511-d9cf-475f-bf66-b0cec4173d31/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"173a6511-d9cf-475f-bf66-b0cec4173d31\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"e3155909-5d11-4625-92c3-df84915a0014\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"d423b8d2-e7cb-43fc-9b48-470e74b554df\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"d3f995aa-7190-417c-98a0-9d34266474e1\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:13:00.408918Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"2b90e2c3f44aba2a\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:13:00.408918Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/173a6511-d9cf-475f-bf66-b0cec4173d31/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"3344ccf4-a1ea-4fd4-8c6e-0286ddcfe00e\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"bdecd8b7-ee8e-4076-91f4-967c8d991af6\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"155bd53f-885b-40f6-a93d-46e965b5aef4\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"75605b97-d921-466e-963d-c3cce7df25c1\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-23T16:35:59.754417Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"ef7ad3d3e10f6dee-1776962159\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-23T16:35:59.754417Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/3344ccf4-a1ea-4fd4-8c6e-0286ddcfe00e/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"2212860d-a503-443b-b672-0b5abb08a889\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"c73d28f7-0eaf-4bf3-9f25-bcfcca043fda\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"05103c74-ff68-4895-a2ee-30a68db93297\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}],\"created_at\":\"2026-04-23T12:36:02.659087Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"344696c455d0b1be-1776947762\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-23T12:36:02.659087Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/2212860d-a503-443b-b672-0b5abb08a889/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"aa021db1-9679-46df-9264-53db4bde8eeb\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"72499da6-66ff-40bb-a53e-29409701ab9e\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"958db7f6-5583-4622-b154-51ce390a088d\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"5b03d866-2363-4ff0-853b-224325845bd0\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-22T04:35:59.769022Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1776832559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-22T04:35:59.769022Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/aa021db1-9679-46df-9264-53db4bde8eeb/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"7976de35-f73d-4ee3-98b6-c80f3f35e3b8\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"0ba19019-4ff9-4e6a-ac94-13cb30d40e5e\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"a7e995e1-13b3-4153-813e-7dc81948e89f\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"ec316ff5-d474-47b1-9b1a-3f4243607507\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-21T04:36:01.02611Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"db677be68a5fe8ab-1776746160\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-21T04:36:01.02611Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/7976de35-f73d-4ee3-98b6-c80f3f35e3b8/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"7ba578f6-1e66-464a-99cf-72032b18ca32\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"85872fc5-56ce-4e3a-b4f9-1afb2055dce8\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"b6a8c887-d556-47f2-9189-fec53d76c6bc\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"major_outage\",\"position\":0},{\"id\":\"97bc4abb-e09f-4c4c-870a-09ce90b5d9c3\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-20T01:18:40.622415Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"1488ee97f53f8319\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-20T01:18:40.622415Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/7ba578f6-1e66-464a-99cf-72032b18ca32/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"bb813f6e-a9d7-4f98-9f92-e88271ab0e7d\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"6e962628-473b-448a-81ae-a299721ab87c\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"967d81a1-e979-441a-addc-152757c97b9d\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"767f3752-53f7-49a3-8b35-eab62acc8621\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-19T00:35:59.850361Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1776558959\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-19T00:35:59.850361Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/bb813f6e-a9d7-4f98-9f92-e88271ab0e7d/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"8951c855-d345-4b7a-971f-82260eddd906\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"120571d8-1901-4612-aeaf-a4067a0e7237\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"fb9a590b-ce0c-4eb8-a896-aabac072605f\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"edebb0e7-48de-4956-91e5-cc0fc08fbdfc\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-18T04:35:59.73743Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"ef7ad3d3e10f6dee-1776486959\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-18T04:35:59.73743Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/8951c855-d345-4b7a-971f-82260eddd906/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"13a506c2-c7e2-4e60-9a0d-e37dc394dc7b\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[],\"created_at\":\"2026-04-17T04:35:59.754836Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"d461a303628351e1-1776400559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-17T04:35:59.754836Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/13a506c2-c7e2-4e60-9a0d-e37dc394dc7b/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"609ee914-08fc-466d-a933-ee1fb7b2c00d\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"dfa42bdd-6727-4e2c-9077-4b724de39c0b\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"44b52ac5-6a07-442b-adc8-23a5590c777a\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"b7e13744-7267-4729-bb40-4c5f5ded1794\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-16T20:35:59.819501Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1776371759\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-16T20:35:59.819501Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/609ee914-08fc-466d-a933-ee1fb7b2c00d/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"437e29fb-e757-4954-aec5-05f413f6786d\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[],\"created_at\":\"2026-04-14T16:35:59.738998Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"d461a303628351e1-1776184559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-14T16:35:59.738998Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/437e29fb-e757-4954-aec5-05f413f6786d/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"6bdfe6cb-47d0-4a9c-9fb1-ef583853c25e\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"39bbd31a-b513-49e6-8d54-ff0caf5ecf92\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"808453d0-8d42-47c3-989b-b409a17201c1\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"2e8ddb0d-3a35-4d9d-91ab-0f165fc2e654\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-13T20:35:59.793193Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1776112559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-13T20:35:59.793193Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/6bdfe6cb-47d0-4a9c-9fb1-ef583853c25e/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"51a1d2b3-3f48-4c7d-96ef-e218975d9814\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"6fde516f-df6e-41cc-95bf-c39f7060c2f0\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"e10a4b1d-4ab9-44da-b2de-5278342587f9\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"5e2e46e6-279a-4b39-b1a5-d9a10341039b\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-12T00:35:59.762403Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1775954159\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-12T00:35:59.762403Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/51a1d2b3-3f48-4c7d-96ef-e218975d9814/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"ff72441b-fb6f-4b8a-9692-255d3babe417\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"312239b4-cdad-47c1-ae78-381c1470f244\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"af6fcadb-44cc-4779-90ff-6ca636e1642a\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"244e8742-dc3d-4ca2-9ccf-eeb339d1eb5f\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-06T20:35:59.726891Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1775507759\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-06T20:35:59.726891Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/ff72441b-fb6f-4b8a-9692-255d3babe417/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"6bb07b0d-aab9-4b2b-b09d-88ef1675cb98\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"bd086a7c-2317-46ed-9424-e376825d717e\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"116482fe-5e0d-4215-99e9-8a1746e4771f\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"4f56007d-c49a-4a69-ba41-858c46ab67c4\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-02T20:35:59.777527Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"ef7ad3d3e10f6dee-1775162159\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-02T20:35:59.777527Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/6bb07b0d-aab9-4b2b-b09d-88ef1675cb98/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"bc541615-e3af-4b8e-9f46-f5f5472c1807\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"073bd0a0-daa3-4a88-b2e0-af3f9ecc5021\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"ba9d5272-16d7-4613-bfad-c2a9546462cb\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"90b3e231-9761-4df7-ab0f-312865c48469\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-02T12:35:59.798911Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1775133359\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-02T12:35:59.798911Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/bc541615-e3af-4b8e-9f46-f5f5472c1807/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"70a6cf76-3a57-44e6-aba3-454bab975955\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"7db22d86-2f1b-407e-b8db-23609c5cacd1\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"e9a42d55-8dd6-497e-9014-a314e3014ad7\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"dd6e645a-0057-4d98-9cb2-71fa70ce8425\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-02T12:35:59.795474Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1775133359\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-02T12:35:59.795474Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/70a6cf76-3a57-44e6-aba3-454bab975955/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"bc9e44bf-19b9-496d-a93b-6e553165aeaf\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"3de8512b-9082-46e5-98f7-0fbf06927756\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"1005e742-3137-42c6-9649-29d0492611e6\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"64215f1a-4eed-4c54-864a-816ec8b53d31\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-02T04:35:59.664498Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"ef7ad3d3e10f6dee-1775104559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-02T04:35:59.664498Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/bc9e44bf-19b9-496d-a93b-6e553165aeaf/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"12dc2945-0e7b-4267-8d22-8d95d020b708\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"053bdfc9-9fbf-47db-bdcd-91457a295c13\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"09b8cc11-45e4-4157-98d2-cba66f531265\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"009d7b1d-a2ea-415c-8e8b-b8d1b51fe932\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-01T20:36:01.021679Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"db677be68a5fe8ab-1775075760\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-01T20:36:01.021679Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/12dc2945-0e7b-4267-8d22-8d95d020b708/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"c9714509-f4df-4dc5-a759-8bb6eb9f6fbd\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"be2ca0af-8c05-4095-9f4b-c5263cea931f\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"4383e93c-11f1-4764-a1ac-6aefaf131679\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"2ba5356f-1e39-4bfc-833e-dcca908b993b\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-01T01:15:40.084866Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"24fc9e6b234a7aad\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-04-01T01:15:40.084866Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/c9714509-f4df-4dc5-a759-8bb6eb9f6fbd/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"ebde4607-45ac-4d55-82d8-7d98c681e482\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"535cb45f-d4c2-46f2-ba15-d050e8fe5e64\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"d9239132-c0bb-443f-858e-cb457223010d\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"3a7f103e-d568-4fc8-8fed-1cefdc375033\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-31T12:35:59.782975Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1774960559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-31T12:35:59.782975Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/ebde4607-45ac-4d55-82d8-7d98c681e482/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"dd0f1611-e44e-4c99-b005-68154b7bb254\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"105b4947-2aa6-4aaa-8829-e93de4cf5eed\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"7c874c2c-f4a6-4ea7-b89c-4d153527c9bd\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"d0e03796-370d-47e2-b9e5-a5a12b67f6d7\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-31T12:35:59.211461Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"e9081ba5854b239f-1774960558\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-31T12:35:59.211461Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/dd0f1611-e44e-4c99-b005-68154b7bb254/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"b0c4f3d8-7679-42ab-8957-3d4c35e93975\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"1976f979-d72d-47ac-a031-a1c0dd093e9f\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"382ac740-0198-4363-a93c-fa4e2fd15339\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"60d8075b-41b3-46f1-b42a-99375974d990\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-30T20:35:59.867894Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1774902959\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-30T20:35:59.867894Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/b0c4f3d8-7679-42ab-8957-3d4c35e93975/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"f0be1781-910a-42b2-808f-93a2ef64ecd3\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"bf706e5d-1161-44a3-8d52-dbaaccba9995\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"f0e159f3-57dd-4d8b-a09e-a98939ae470a\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"5a24a623-4d02-4e41-a322-3008afedd9e7\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-30T20:35:59.862926Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1774902959\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-30T20:35:59.862926Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/f0be1781-910a-42b2-808f-93a2ef64ecd3/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"b76d40d7-12a4-49c6-b3ad-b4c1d3c204c2\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"8b78e5c6-ffbe-45f8-810c-3053c3ccb641\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"bf7253f2-eb30-427f-aa26-1c8bf8c59256\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"93960214-873b-49a3-b0bd-1cb6f764a012\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-30T17:00:21.153047Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"04125106bafd3561\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-30T17:00:21.153047Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/b76d40d7-12a4-49c6-b3ad-b4c1d3c204c2/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"12fb9352-3bca-4c9c-a595-df4dbc6b6bd7\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"2cd0910f-d421-4ec9-8d5d-7750eff65878\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"41a3f46d-e675-46ec-8e69-c95dc9571608\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"ae00ad87-f903-41b2-a2ec-271064d143df\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-30T00:35:59.784065Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"ef7ad3d3e10f6dee-1774830959\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-30T00:35:59.784065Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/12fb9352-3bca-4c9c-a595-df4dbc6b6bd7/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"937d9e83-273a-437b-9bdf-d084f2502ab7\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"ba89d9fb-0f97-4906-a391-c6a7e0a89547\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"a52c6ce9-0dd9-4da1-9d9e-30252b46b962\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"37a91092-d06f-4263-9ea3-7c8e04405baa\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-29T00:35:59.788415Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1774744559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-29T00:35:59.788415Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/937d9e83-273a-437b-9bdf-d084f2502ab7/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"3cecef74-28a0-47be-817a-89cf401450db\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"8ba939b9-1e25-45ba-8845-39809556919e\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"cc23b574-d957-4be6-b908-c6190d822305\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"ad87afbd-6415-4a96-af46-adad4b19468a\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-27T08:35:59.770119Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1774600559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-27T08:35:59.770119Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/3cecef74-28a0-47be-817a-89cf401450db/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"5451d34e-b841-401a-ab93-bb7b6811e7b9\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"c078327e-df80-4306-9d77-739fe4c6d6d0\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"bb78ec19-d1a7-4f11-aef8-810c9cd8e090\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"a09e9f54-f17c-4c9c-a795-a154b1a75bfc\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-26T16:35:59.793599Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1774542959\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-26T16:35:59.793599Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/5451d34e-b841-401a-ab93-bb7b6811e7b9/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"48baaa11-b36b-42b6-9190-939c1012860f\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"4c3da7e4-231c-43ab-9b5d-2c822ffda6e9\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"ede5f49e-94c8-4a83-a6a9-43bd6bd22fb3\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"4d2d346b-83e4-4638-92b5-7cbd2a3a4185\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-26T04:36:00.995215Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"db677be68a5fe8ab-1774499760\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-26T04:36:00.995215Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/48baaa11-b36b-42b6-9190-939c1012860f/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"9e612a06-dade-42e1-a9c9-49637389e2bf\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[],\"created_at\":\"2026-03-26T00:35:59.761927Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"d461a303628351e1-1774485359\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-26T00:35:59.761927Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/9e612a06-dade-42e1-a9c9-49637389e2bf/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"a30a5c90-0174-418d-830b-ecc754eded5f\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"ca377aa1-bddd-471b-8a8b-cb63923c4fd5\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"ae938e6d-8e90-4b86-9e7a-42e6bfc9c1c5\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"40a1a812-7c51-498b-b464-e84096da44f7\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-25T20:35:59.905399Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1774470959\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-25T20:35:59.905399Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/a30a5c90-0174-418d-830b-ecc754eded5f/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"b4fe142e-4f57-473b-afb9-d8b04f0d9ae4\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"8f71a30b-607d-4ee6-aa9d-ccae19726bd9\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"1f1b2cd1-813d-4bfa-b0f1-f6e5ea5954ce\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"421a1f15-3d7d-4795-8e4f-c27d9ac348fb\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-25T16:35:59.799083Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1774456559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-25T16:35:59.799083Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/b4fe142e-4f57-473b-afb9-d8b04f0d9ae4/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"8b94ced2-4016-4d22-a2fa-41e51dfef25d\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"6ffabf56-bc2e-42e2-98aa-7dac462fe663\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"f2d58389-56c5-4f7c-9c7b-5c58db210f64\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"ed93bdd4-a175-4d5c-b58e-eb308e97df20\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-24T20:35:59.762281Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1774384559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-24T20:35:59.762281Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/8b94ced2-4016-4d22-a2fa-41e51dfef25d/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"87059280-e186-4e8a-afd4-6b339198c553\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"8b8a1931-20b2-4a80-95a9-2f6f4fd485d1\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"b1e9b7ed-2c78-4ff8-8d3a-de9ead891a8a\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"c368cd0a-0dbf-497b-93a5-6f8a0e076deb\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-24T04:36:01.538275Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"541832b1b0562c8b-1774326961\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-24T04:36:01.538275Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/87059280-e186-4e8a-afd4-6b339198c553/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"137d12f1-b039-4627-9263-9221aeb6b607\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"545c0064-b72e-4488-8364-7840ce61bc01\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"aa4468d0-2269-473c-9c28-4610e8170b4d\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"93081a32-f13c-4657-aafb-a75f348e33b5\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-23T16:35:59.794617Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1774283759\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-23T16:35:59.794617Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/137d12f1-b039-4627-9263-9221aeb6b607/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"9692a9dd-c283-477f-9c1d-05babf28280b\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"dd420126-c3c9-4704-82b3-930d72233735\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"862510aa-7ec9-483c-a0cd-6a173db89aa1\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"c1899098-7838-4d70-b9ec-05795993afe6\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-22T16:35:59.774138Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1774197359\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-22T16:35:59.774138Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/9692a9dd-c283-477f-9c1d-05babf28280b/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"3454a349-8e4d-4f32-92ad-c240b654e28f\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"d4ff4973-faad-43e9-b97a-d5cf3d0d8568\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"7750b683-8f00-4b10-8433-bf7ea833073e\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"5a0ad189-ec00-4e2c-99ed-1e3ee1e39629\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-19T16:35:59.72562Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"ef7ad3d3e10f6dee-1773938159\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-19T16:35:59.72562Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/3454a349-8e4d-4f32-92ad-c240b654e28f/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"a715d980-bbfe-4980-a3a4-73ddd2d6957d\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"4cf8ab86-0450-4f2d-a5b4-731f2a946645\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"4dcb2aaf-df20-4077-959c-9e20588d7f44\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"7848968e-618f-4e3d-a436-d79e8d138333\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-18T20:35:59.744295Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1773866159\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-18T20:35:59.744295Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/a715d980-bbfe-4980-a3a4-73ddd2d6957d/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"865181ce-36ce-403d-82d8-fb749e402e97\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"6ed717db-ecd1-4019-abb5-ef485fa23bcb\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"216288e0-3f51-40dd-8407-3392efb01ca8\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"36868900-267c-4968-98cf-58b58044ad2c\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-15T12:35:59.72566Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"ef7ad3d3e10f6dee-1773578159\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-15T12:35:59.72566Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/865181ce-36ce-403d-82d8-fb749e402e97/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"b2a0e434-9010-4888-afb7-1b09f880c1d6\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"3729b704-934b-4eb7-9266-db3a97739399\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"9d425255-cf16-4428-a9fb-7ca6b8592841\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"525186dd-fdac-459f-8f76-14597b07acf6\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-15T08:35:59.717435Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1773563759\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-15T08:35:59.717435Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/b2a0e434-9010-4888-afb7-1b09f880c1d6/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"f7998f51-a5be-4d46-8e1d-35841fcc0af5\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"da0f7429-51e5-46a3-9322-fa96fc3fd10d\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"54223a83-09b4-4b96-a8f0-33445e11ac2c\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"f6813794-0cc7-459e-a686-bd3f46809f28\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-13T04:36:01.009961Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"db677be68a5fe8ab-1773376560\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-13T04:36:01.009961Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/f7998f51-a5be-4d46-8e1d-35841fcc0af5/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"b3640d73-8475-4b49-a2ba-e5a973414ba8\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"dc1d2bde-4432-4bcf-bca4-70a7e0e336ac\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"d4f8df00-ccdb-4366-95ee-600b93f2937a\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"96eb72e7-cddb-4eec-b5a9-ee98c7e1e189\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-13T04:35:59.787352Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1773376559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-13T04:35:59.787352Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/b3640d73-8475-4b49-a2ba-e5a973414ba8/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"38202085-f742-4097-b2f5-33f7c9a14cb8\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"46925792-7298-4f52-8c26-2277fdda9394\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"85e87add-aec6-4e6b-bcbc-cf3c2fd1cf55\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"3a4607dd-fe5f-421c-ba3e-bd2559dc9720\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-12T16:35:59.744577Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1773333359\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-12T16:35:59.744577Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/38202085-f742-4097-b2f5-33f7c9a14cb8/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"7f65dcb3-bf48-42dd-8455-a0c2c965ef6a\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[],\"created_at\":\"2026-03-12T16:35:59.744046Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"d461a303628351e1-1773333359\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-12T16:35:59.744046Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/7f65dcb3-bf48-42dd-8455-a0c2c965ef6a/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"09af86f4-0d6b-4e8e-ab90-174e1627d24f\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"f6e72404-ed69-4627-9ef8-c1cbeaa2f30e\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"127f1960-cf09-4c45-a76b-b214f4380a75\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"2c481ea3-cfff-416e-ade8-1b96d2b22e11\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-12T16:35:59.144323Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"e9081ba5854b239f-1773333358\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-12T16:35:59.144323Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/09af86f4-0d6b-4e8e-ab90-174e1627d24f/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"e676d1c5-6076-4ec1-a67a-fa12eea85b0e\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"5668f69b-0ad0-4513-a044-eba943571ac2\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"028e83a5-4816-4879-8884-e30059d91cee\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"df74e090-4be2-4b6d-8e55-06957c3a3e0f\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-12T04:35:59.730984Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1773290159\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-12T04:35:59.730984Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/e676d1c5-6076-4ec1-a67a-fa12eea85b0e/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"fdd402dd-b89b-49c7-bc6f-53afa7db7e43\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"41569af6-1f6b-442c-b2d6-e482d882e239\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"98387ad3-14af-4566-9643-686927fa2c2b\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"f4ee8935-da81-4450-ad99-b20ca822b3c3\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-11T12:35:59.7515Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7abf9bc13fcb676d-1773232559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-11T12:35:59.7515Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/fdd402dd-b89b-49c7-bc6f-53afa7db7e43/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"82d18d2b-74d4-4708-a048-9fac477fb14c\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"83c5995c-a9cf-4c30-9b96-c392b9a08139\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"7486c692-1aaf-49ac-a849-34b6af454a83\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"24ae0999-864a-4dcf-a34d-92fee8be86f1\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-11T08:35:59.751183Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"f686b517b27d229d-1773218159\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-11T08:35:59.751183Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/82d18d2b-74d4-4708-a048-9fac477fb14c/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}},{\"id\":\"b500f495-9cbe-4040-ab5e-cf6321393cdf\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"6f1ea70f-087c-457a-ad06-90cadff5f065\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"225006f9-949a-45b8-a118-7d9e007a0fe4\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"56ed313e-d40f-4dee-8c0b-f736cbc6d50b\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-03-10T16:35:59.703768Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"ef7ad3d3e10f6dee-1773160559\",\"email_header_image\":null,\"enabled\":true,\"favicon\":null,\"modified_at\":\"2026-03-10T16:35:59.703768Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/b500f495-9cbe-4040-ab5e-cf6321393cdf/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":0,\"limit\":50,\"total\":null,\"first_offset\":0,\"prev_offset\":null,\"next_offset\":50,\"last_offset\":null}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/173a6511-d9cf-475f-bf66-b0cec4173d31", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List status pages returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T13:55:46.442Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "8c705f16084fb6d8", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"3035849d-5ba8-43d0-ae43-0d8eeed454b2\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"5bc4d558-9cf9-4177-b2aa-61f02f71b044\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"14965185-e48d-4b9d-b7e6-998ddacb541d\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"be6c223e-df96-4148-be7a-096c981154b0\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T13:55:46.635741Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"8c705f16084fb6d8\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T13:55:46.635741Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/3035849d-5ba8-43d0-ae43-0d8eeed454b2/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/statuspages/3035849d-5ba8-43d0-ae43-0d8eeed454b2/publish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/statuspages/3035849d-5ba8-43d0-ae43-0d8eeed454b2/unpublish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/3035849d-5ba8-43d0-ae43-0d8eeed454b2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Publish status page and unpublish status page returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:13:02.530Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "c605902760af97aa", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"104d62be-82e4-42da-8c30-5fec327f377b\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"2adf6283-20c1-49b6-ab3c-78f85cefaada\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"33994932-0e36-4dc1-aefe-f2b5717c7929\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"3f97a9ee-345b-48ea-b8ff-4eb70e08b267\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:13:02.636197Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"c605902760af97aa\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:13:02.636197Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/104d62be-82e4-42da-8c30-5fec327f377b/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/statuspages/104d62be-82e4-42da-8c30-5fec327f377b/publish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/104d62be-82e4-42da-8c30-5fec327f377b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Publish status page returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T13:48:36.312Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "3b36f267327309ee", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a1c209d5-9b2b-4548-afa9-9c197cbefa25\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"1ac1fc71-36ab-4cfa-aad6-8865dc7c3e7d\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"9b47d850-6e7f-4d82-a620-3552e5063135\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"218dc9c0-e253-4df9-b94d-50d07bb79305\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T13:48:36.401179Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"3b36f267327309ee\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T13:48:36.401179Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/a1c209d5-9b2b-4548-afa9-9c197cbefa25/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/statuspages/a1c209d5-9b2b-4548-afa9-9c197cbefa25/publish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "POST", + "path": "/api/v2/statuspages/a1c209d5-9b2b-4548-afa9-9c197cbefa25/unpublish", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/a1c209d5-9b2b-4548-afa9-9c197cbefa25", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Unpublish status page returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:13:03.866Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "5a5b4432b5288f33", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ca3e928c-7dcf-4720-abe2-75c20e1710e7\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"f51b0edb-8f22-44d4-bccf-dc19b01e9280\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"71135ea7-c268-46ec-bc1d-49051062355e\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"c02580b3-fc4c-4572-8089-15caef68922d\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:13:03.966133Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"5a5b4432b5288f33\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:13:03.966133Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/ca3e928c-7dcf-4720-abe2-75c20e1710e7/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Logs Indexing" + }, + "id": "f51b0edb-8f22-44d4-bccf-dc19b01e9280", + "type": "components" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/statuspages/ca3e928c-7dcf-4720-abe2-75c20e1710e7/components/f51b0edb-8f22-44d4-bccf-dc19b01e9280", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f51b0edb-8f22-44d4-bccf-dc19b01e9280\",\"type\":\"components\",\"attributes\":{\"components\":[{\"id\":\"71135ea7-c268-46ec-bc1d-49051062355e\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"c02580b3-fc4c-4572-8089-15caef68922d\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}],\"created_at\":\"2026-04-24T14:13:03.966133Z\",\"modified_at\":\"2026-04-24T14:13:04.630038Z\",\"name\":\"Logs Indexing\",\"position\":0,\"type\":\"group\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"group\":{\"data\":null},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"ca3e928c-7dcf-4720-abe2-75c20e1710e7\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/ca3e928c-7dcf-4720-abe2-75c20e1710e7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update component returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:13:05.282Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "7c04d70abb082790", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ecdbe2df-b4ab-4795-905f-34dd006968d3\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"0468a6d8-a7aa-44a9-8fa5-84e5130954cd\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"9d26fddf-7296-44a6-9748-116e55e2c9c2\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"fbbce266-9cdc-47f1-b6c5-f07a676471f6\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:13:05.370824Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7c04d70abb082790\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:13:05.370824Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/ecdbe2df-b4ab-4795-905f-34dd006968d3/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components_affected": [ + { + "id": "9d26fddf-7296-44a6-9748-116e55e2c9c2", + "status": "major_outage" + } + ], + "description": "Our API is experiencing elevated latency. We are investigating the issue.", + "status": "investigating", + "title": "Elevated API Latency" + }, + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/ecdbe2df-b4ab-4795-905f-34dd006968d3/degradations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"911cd7c7-a30c-44fc-b8e4-7844090a3214\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"9d26fddf-7296-44a6-9748-116e55e2c9c2\",\"name\":\"Login\",\"status\":\"major_outage\"}],\"created_at\":\"2026-04-24T14:13:06.047865Z\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"modified_at\":\"2026-04-24T14:13:06.047865Z\",\"status\":\"investigating\",\"title\":\"Elevated API Latency\",\"updates\":[{\"id\":\"886bbfb5-f3d1-44c0-942e-3ca4b75fd75f\",\"created_at\":\"2026-04-24T14:13:06.047865Z\",\"modified_at\":\"2026-04-24T14:13:06.047865Z\",\"started_at\":\"2026-04-24T14:13:06.047865Z\",\"status\":\"investigating\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"components_affected\":[{\"id\":\"9d26fddf-7296-44a6-9748-116e55e2c9c2\",\"name\":\"Login\",\"status\":\"major_outage\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"ecdbe2df-b4ab-4795-905f-34dd006968d3\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "title": "Elevated API Latency in US1" + }, + "id": "911cd7c7-a30c-44fc-b8e4-7844090a3214", + "type": "degradations" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/statuspages/ecdbe2df-b4ab-4795-905f-34dd006968d3/degradations/911cd7c7-a30c-44fc-b8e4-7844090a3214", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"911cd7c7-a30c-44fc-b8e4-7844090a3214\",\"type\":\"degradations\",\"attributes\":{\"components_affected\":[{\"id\":\"9d26fddf-7296-44a6-9748-116e55e2c9c2\",\"name\":\"Login\",\"status\":\"major_outage\"}],\"created_at\":\"2026-04-24T14:13:06.047865Z\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"modified_at\":\"2026-04-24T14:13:06.208744Z\",\"status\":\"investigating\",\"title\":\"Elevated API Latency in US1\",\"updates\":[{\"id\":\"886bbfb5-f3d1-44c0-942e-3ca4b75fd75f\",\"created_at\":\"2026-04-24T14:13:06.047865Z\",\"modified_at\":\"2026-04-24T14:13:06.047865Z\",\"started_at\":\"2026-04-24T14:13:06.047865Z\",\"status\":\"investigating\",\"description\":\"Our API is experiencing elevated latency. We are investigating the issue.\",\"components_affected\":[{\"id\":\"9d26fddf-7296-44a6-9748-116e55e2c9c2\",\"name\":\"Login\",\"status\":\"major_outage\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"ecdbe2df-b4ab-4795-905f-34dd006968d3\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/ecdbe2df-b4ab-4795-905f-34dd006968d3/degradations/911cd7c7-a30c-44fc-b8e4-7844090a3214", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/ecdbe2df-b4ab-4795-905f-34dd006968d3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update degradation returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:13:06.969Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "989b0e3f099669f2", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e5d1c495-e3da-4353-87eb-b7fab267f8e1\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"a7d26716-fc79-4d41-9927-4b279d35fd59\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"4b861af0-45a1-4617-951f-9b2608144043\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"f4e39b01-bbb1-4b1d-977f-7b066eb7d172\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:13:07.065156Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"989b0e3f099669f2\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:13:07.065156Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/e5d1c495-e3da-4353-87eb-b7fab267f8e1/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "completed_date": "2026-04-24T16:13:06.969Z", + "completed_description": "We have completed maintenance on the API to improve performance.", + "components_affected": [ + { + "id": "4b861af0-45a1-4617-951f-9b2608144043", + "status": "operational" + } + ], + "in_progress_description": "We are currently performing maintenance on the API to improve performance.", + "scheduled_description": "We will be performing maintenance on the API to improve performance.", + "start_date": "2026-04-24T15:13:06.969Z", + "title": "API Maintenance" + }, + "type": "maintenances" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages/e5d1c495-e3da-4353-87eb-b7fab267f8e1/maintenances", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ded83076-9f0b-4560-a13b-34f238e986c1\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-04-24T16:13:06.969Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"4b861af0-45a1-4617-951f-9b2608144043\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance.\",\"modified_at\":\"2026-04-24T14:13:07.726617Z\",\"published_date\":\"2026-04-24T14:13:07.726617Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance.\",\"start_date\":\"2026-04-24T15:13:06.969Z\",\"status\":\"scheduled\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"5a12a9c1-f9d6-4ad8-a264-3654b6dd3146\",\"created_at\":\"2026-04-24T14:13:07.726617Z\",\"modified_at\":\"2026-04-24T14:13:07.726617Z\",\"started_at\":\"2026-04-24T14:13:07.726617Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"4b861af0-45a1-4617-951f-9b2608144043\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"e5d1c495-e3da-4353-87eb-b7fab267f8e1\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "in_progress_description": "We are currently performing maintenance on the API to improve performance for 40 minutes.", + "scheduled_description": "We will be performing maintenance on the API to improve performance for 40 minutes." + }, + "id": "ded83076-9f0b-4560-a13b-34f238e986c1", + "type": "maintenances" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/statuspages/e5d1c495-e3da-4353-87eb-b7fab267f8e1/maintenances/ded83076-9f0b-4560-a13b-34f238e986c1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ded83076-9f0b-4560-a13b-34f238e986c1\",\"type\":\"maintenances\",\"attributes\":{\"completed_date\":\"2026-04-24T16:13:06.969Z\",\"completed_description\":\"We have completed maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"4b861af0-45a1-4617-951f-9b2608144043\",\"name\":\"Login\",\"status\":\"operational\"}],\"in_progress_description\":\"We are currently performing maintenance on the API to improve performance for 40 minutes.\",\"modified_at\":\"2026-04-24T14:13:07.865193Z\",\"published_date\":\"2026-04-24T14:13:07.726617Z\",\"scheduled_description\":\"We will be performing maintenance on the API to improve performance for 40 minutes.\",\"start_date\":\"2026-04-24T15:13:06.969Z\",\"status\":\"scheduled\",\"title\":\"API Maintenance\",\"updates\":[{\"id\":\"5a12a9c1-f9d6-4ad8-a264-3654b6dd3146\",\"created_at\":\"2026-04-24T14:13:07.726617Z\",\"modified_at\":\"2026-04-24T14:13:07.726617Z\",\"started_at\":\"2026-04-24T14:13:07.726617Z\",\"manual_transition\":false,\"status\":\"scheduled\",\"description\":\"We will be performing maintenance on the API to improve performance.\",\"components_affected\":[{\"id\":\"4b861af0-45a1-4617-951f-9b2608144043\",\"name\":\"Login\",\"status\":\"operational\"}]}]},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"status_page\":{\"data\":{\"id\":\"e5d1c495-e3da-4353-87eb-b7fab267f8e1\",\"type\":\"status_pages\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/e5d1c495-e3da-4353-87eb-b7fab267f8e1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update maintenance returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Status Pages", + "frozen_at": "2026-04-24T14:13:08.559Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "components": [ + { + "components": [ + { + "name": "Login", + "position": 0, + "type": "component" + }, + { + "name": "Settings", + "position": 1, + "type": "component" + } + ], + "name": "Application", + "type": "group" + } + ], + "domain_prefix": "7fdf01d7ddbf6c33", + "name": "A Status Page", + "type": "internal", + "visualization_type": "bars_and_uptime_percentage" + }, + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/statuspages", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a2cf97ce-2bdc-4304-bf07-da098fe30f9f\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"6cd16e07-f4d5-456b-8181-5aa9cc959f53\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"18c40700-dbc0-4b47-b782-11f8e17d1204\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"03d2caed-1352-47a0-9a02-c7538bc9f39d\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:13:08.643894Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7fdf01d7ddbf6c33\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:13:08.643894Z\",\"name\":\"A Status Page\",\"page_url\":\"https://frog.datadoghq.com/status-pages/a2cf97ce-2bdc-4304-bf07-da098fe30f9f/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "A Status Page in US1" + }, + "id": "a2cf97ce-2bdc-4304-bf07-da098fe30f9f", + "type": "status_pages" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/statuspages/a2cf97ce-2bdc-4304-bf07-da098fe30f9f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a2cf97ce-2bdc-4304-bf07-da098fe30f9f\",\"type\":\"status_pages\",\"attributes\":{\"company_logo\":null,\"components\":[{\"id\":\"6cd16e07-f4d5-456b-8181-5aa9cc959f53\",\"name\":\"Application\",\"type\":\"group\",\"position\":0,\"components\":[{\"id\":\"18c40700-dbc0-4b47-b782-11f8e17d1204\",\"name\":\"Login\",\"type\":\"component\",\"status\":\"operational\",\"position\":0},{\"id\":\"03d2caed-1352-47a0-9a02-c7538bc9f39d\",\"name\":\"Settings\",\"type\":\"component\",\"status\":\"operational\",\"position\":1}]}],\"created_at\":\"2026-04-24T14:13:08.643894Z\",\"custom_domain\":null,\"custom_domain_enabled\":false,\"domain_prefix\":\"7fdf01d7ddbf6c33\",\"email_header_image\":null,\"enabled\":false,\"favicon\":null,\"modified_at\":\"2026-04-24T14:13:09.327236Z\",\"name\":\"A Status Page in US1\",\"page_url\":\"https://frog.datadoghq.com/status-pages/a2cf97ce-2bdc-4304-bf07-da098fe30f9f/view\",\"subscriptions_enabled\":false,\"type\":\"internal\",\"visualization_type\":\"bars_and_uptime_percentage\"},\"relationships\":{\"created_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"last_modified_by_user\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/statuspages/a2cf97ce-2bdc-4304-bf07-da098fe30f9f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update status page returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/synthetics.json b/test-server-data/v2/synthetics.json new file mode 100644 index 0000000000..e64930cbaa --- /dev/null +++ b/test-server-data/v2/synthetics.json @@ -0,0 +1,312 @@ +{ + "feature": "Synthetics", + "recordings": [ + { + "feature": "Synthetics", + "frozen_at": "2026-02-18T16:57:03.696Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "config": { + "assertions": [ + { + "operator": "lessThan", + "property": "avg", + "target": 500, + "type": "latency" + } + ], + "request": { + "e2e_queries": 50, + "host": "example.com", + "max_ttl": 30, + "port": 443, + "tcp_method": "prefer_sack", + "traceroute_queries": 3 + } + }, + "locations": [ + "aws:us-east-1", + "agent:my-agent-name" + ], + "message": "Network Path test notification", + "name": "Example Network Path test", + "options": { + "tick_every": 60 + }, + "status": "live", + "subtype": "tcp", + "tags": [ + "env:production" + ], + "type": "network" + }, + "type": "network" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/synthetics/tests/network", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"network_test\",\"attributes\":{\"config\":{\"request\":{\"max_ttl\":30,\"tcp_method\":\"prefer_sack\",\"host\":\"example.com\",\"e2e_queries\":50,\"traceroute_queries\":3,\"port\":443},\"assertions\":[{\"operator\":\"lessThan\",\"property\":\"avg\",\"target\":500,\"type\":\"latency\"}]},\"message\":\"Network Path test notification\",\"name\":\"Example Network Path test\",\"tags\":[\"env:production\"],\"options\":{\"tick_every\":60},\"type\":\"network\",\"public_id\":\"b2j-fw3-qr5\",\"subtype\":\"tcp\",\"locations\":[\"aws:us-east-1\",\"agent:my-agent-name\"],\"status\":\"live\"},\"id\":\"b2j-fw3-qr5\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "public_ids": [ + "b2j-fw3-qr5" + ] + }, + "type": "delete_tests_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/synthetics/tests/bulk-delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"delete_tests\",\"attributes\":{\"deleted_at\":\"2026-02-18T16:57:04.752457+00:00\",\"public_id\":\"b2j-fw3-qr5\"},\"id\":\"b2j-fw3-qr5\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a Network Path test returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "frozen_at": "2026-02-18T16:57:05.121Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "message": "Notification message", + "name": "Example suite name", + "options": {}, + "tags": [ + "env:production" + ], + "tests": [], + "type": "suite" + }, + "type": "suites" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/synthetics/suites", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"suites\",\"attributes\":{\"type\":\"suite\",\"monitor_id\":259845717,\"name\":\"Example suite name\",\"options\":{},\"tests\":[],\"tags\":[\"env:production\"],\"public_id\":\"hik-xp5-9q6\",\"created_at\":\"2026-02-18T16:57:05.583051+00:00\",\"modified_at\":\"2026-02-18T16:57:05.583051+00:00\",\"created_by\":{\"name\":\"Corentin Girard\",\"email\":\"corentin.girard@datadoghq.com\",\"handle\":\"corentin.girard@datadoghq.com\"},\"message\":\"Notification message\",\"org_id\":321813,\"modified_by\":{\"name\":\"Corentin Girard\",\"email\":\"corentin.girard@datadoghq.com\",\"handle\":\"corentin.girard@datadoghq.com\"}},\"id\":\"hik-xp5-9q6\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "public_ids": [ + "hik-xp5-9q6" + ] + }, + "type": "delete_suites_request" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/synthetics/suites/bulk-delete", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"suites\",\"attributes\":{\"deleted_at\":\"2026-02-18 16:57:06.420679\",\"public_id\":\"hik-xp5-9q6\"},\"id\":\"hik-xp5-9q6\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Create a test suite returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "frozen_at": "2026-02-18T18:42:49.488Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/synthetics/tests/network/c7a-uwa-wn2", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"network_test\",\"attributes\":{\"public_id\":\"c7a-uwa-wn2\",\"locations\":[\"aws:eu-west-3\"],\"status\":\"paused\",\"subtype\":\"tcp\",\"message\":\"\",\"type\":\"network\",\"config\":{\"assertions\":[{\"operator\":\"lessThan\",\"property\":\"avg\",\"target\":500,\"type\":\"latency\"}],\"request\":{\"source_service\":\"\",\"traceroute_queries\":3,\"port\":443,\"max_ttl\":30,\"e2e_queries\":50,\"host\":\"example.com\",\"tcp_method\":\"prefer_sack\",\"destination_service\":\"\"}},\"options\":{\"retry\":{\"count\":0,\"interval\":300},\"tick_every\":60,\"monitor_options\":{\"notification_preset_name\":\"show_all\"},\"min_failure_duration\":0,\"min_location_failed\":1},\"tags\":[],\"name\":\"Network Path Test on example.com\"},\"id\":\"c7a-uwa-wn2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a Network Path test returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "frozen_at": "2026-02-18T16:57:02.234Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/synthetics/settings/on_demand_concurrency_cap", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"on_demand_concurrency_cap\",\"attributes\":{\"on_demand_concurrency_cap\":20}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get the on-demand concurrency cap returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "frozen_at": "2026-02-18T16:57:02.674Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "on_demand_concurrency_cap": 20 + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/synthetics/settings/on_demand_concurrency_cap", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"on_demand_concurrency_cap\",\"attributes\":{\"on_demand_concurrency_cap\":20}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Save new value for on-demand concurrency cap returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Synthetics", + "frozen_at": "2026-02-18T16:57:03.180Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/synthetics/suites/search", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"suites_search\",\"id\":\"a36a229d-a20c-45cb-9e0f-37c536d7d870\",\"attributes\":{\"facets\":[{\"name\":\"mobile_platform\",\"values\":[]},{\"name\":\"test_count\",\"values\":[{\"count\":24,\"name\":\"0\"}]},{\"name\":\"step_count\",\"values\":[]},{\"name\":\"http_path\",\"values\":[]},{\"name\":\"team\",\"values\":[]},{\"name\":\"env\",\"values\":[{\"count\":24,\"name\":\"production\"}]},{\"name\":\"type\",\"values\":[{\"count\":24,\"name\":\"suite\"}]},{\"name\":\"creator\",\"values\":[{\"count\":24,\"name\":\"CI Account\"}]},{\"name\":\"mobile_application\",\"values\":[]},{\"name\":\"notification\",\"values\":[]},{\"name\":\"endpoint\",\"values\":[]},{\"name\":\"http_method\",\"values\":[]},{\"name\":\"creation_source\",\"values\":[]},{\"name\":\"domain\",\"values\":[]},{\"name\":\"ci_execution_rule\",\"values\":[{\"count\":24,\"name\":\"blocking\"}]},{\"name\":\"state\",\"values\":[{\"count\":24,\"name\":\"paused\"}]},{\"name\":\"tag\",\"values\":[{\"count\":24,\"name\":\"env:production\"}]},{\"name\":\"region\",\"values\":[]},{\"name\":\"muted\",\"values\":[{\"count\":24,\"name\":\"0\"}]},{\"name\":\"status\",\"values\":[{\"count\":24,\"name\":\"No Data\"}]}],\"suites\":[{\"monitor_id\":243683630,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-12T14:36:38.194974+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765550180,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"q9j-u8p-3v5\",\"type\":\"suite\"},{\"monitor_id\":243691225,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-12T15:13:58.194856+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765552435,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"qqj-ma8-msw\",\"type\":\"suite\"},{\"monitor_id\":243678032,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-12T13:58:21.265235+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765547882,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"qwt-zcd-3e7\",\"type\":\"suite\"},{\"monitor_id\":244824489,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-16T21:23:27.482218+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765920189,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"yya-xnv-r72\",\"type\":\"suite\"},{\"monitor_id\":249160092,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2026-01-07T14:35:57.222209+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1767796542,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"ymz-qsm-hr2\",\"type\":\"suite\"},{\"monitor_id\":248911428,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2026-01-06T14:31:13.144659+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1767709878,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"37x-cfh-hik\",\"type\":\"suite\"},{\"monitor_id\":249142412,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2026-01-07T12:44:43.086868+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1767789872,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"6dr-pg7-8h7\",\"type\":\"suite\"},{\"monitor_id\":249145123,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2026-01-07T13:04:35.589562+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1767791053,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"hzd-bzv-cd6\",\"type\":\"suite\"},{\"monitor_id\":243686361,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-12T14:52:23.813142+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765551141,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"y9a-9jy-ng2\",\"type\":\"suite\"},{\"monitor_id\":244243608,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-15T14:02:40.227969+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765807338,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"45f-82u-p2d\",\"type\":\"suite\"},{\"monitor_id\":244250055,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-15T14:22:09.594574+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765808505,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"xd9-dws-cm2\",\"type\":\"suite\"},{\"monitor_id\":244276690,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-15T15:36:44.135107+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765813000,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"77s-9gi-8pa\",\"type\":\"suite\"},{\"monitor_id\":244658021,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-16T09:42:02.245892+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765878101,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"xft-zns-y58\",\"type\":\"suite\"},{\"monitor_id\":244659781,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-16T09:52:14.327958+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765878721,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"9ne-jp8-bbs\",\"type\":\"suite\"},{\"monitor_id\":249382503,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2026-01-08T13:44:51.085083+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1767879873,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"2tv-8tv-nux\",\"type\":\"suite\"},{\"monitor_id\":245439882,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-19T09:34:53.578670+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1766136882,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"rcp-hsx-ksp\",\"type\":\"suite\"},{\"monitor_id\":242864230,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-09T10:37:16.189540+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765276630,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"ihb-7cb-mbq\",\"type\":\"suite\"},{\"monitor_id\":243687635,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-12T14:58:39.394977+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765551515,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"m4t-g9e-cht\",\"type\":\"suite\"},{\"monitor_id\":244240495,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-15T13:55:29.070758+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765806925,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"u5z-r6t-6gj\",\"type\":\"suite\"},{\"monitor_id\":244283444,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-15T15:48:08.393886+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765813664,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"fug-wqb-jgm\",\"type\":\"suite\"},{\"monitor_id\":244953226,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-17T08:57:02.235129+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765961806,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"tmj-mmm-6rw\",\"type\":\"suite\"},{\"monitor_id\":248904310,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2026-01-06T13:52:15.675454+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1767707530,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"pkr-4b7-tug\",\"type\":\"suite\"},{\"monitor_id\":244230166,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2025-12-15T13:27:01.650049+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1765805206,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"3rn-xv7-3gw\",\"type\":\"suite\"},{\"monitor_id\":249142218,\"created_by\":{\"name\":\"CI Account\",\"handle\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\"},\"modified_at\":\"2026-01-07T12:42:27.916511+00:00\",\"options\":{},\"monitor_status\":\"No Data\",\"tests\":[],\"last_triggered_ts\":1767789738,\"name\":\"Example suite name\",\"monitor_name\":\"[Synthetics] Example suite name\",\"notifications\":[],\"tags\":[\"env:production\"],\"public_id\":\"dyh-dc6-yp8\",\"type\":\"suite\"}],\"total\":24}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Search Synthetics suites returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/teams.json b/test-server-data/v2/teams.json new file mode 100644 index 0000000000..9951611990 --- /dev/null +++ b/test-server-data/v2/teams.json @@ -0,0 +1,7009 @@ +{ + "feature": "Teams", + "recordings": [ + { + "feature": "Teams", + "frozen_at": "2026-03-31T14:58:05.044Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-22e42ce95626a92a", + "name": "test-name-22e42ce95626a92a" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"abc7c612-d3a1-4147-bcfa-f28b4af43d33\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":10,\"created_at\":\"2026-03-31T14:58:05.503733+00:00\",\"description\":null,\"handle\":\"test-handle-22e42ce95626a92a\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-03-31T14:58:05.503733+00:00\",\"name\":\"test-name-22e42ce95626a92a\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/abc7c612-d3a1-4147-bcfa-f28b4af43d33/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/abc7c612-d3a1-4147-bcfa-f28b4af43d33/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Add_a_user_to_a_team_returns_API_error_response_response-1774969085@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": {\"type\": \"users\", \"id\": \"825c5f4c-585c-494a-aade-60f1e1aa189b\", \"attributes\": {\"name\": null, \"handle\": \"test-add_a_user_to_a_team_returns_api_error_response_response-1774969085@datadoghq.com\", \"created_at\": \"2026-03-31T14:58:06.030754+00:00\", \"modified_at\": \"2026-03-31T14:58:06.030754+00:00\", \"email\": \"test-add_a_user_to_a_team_returns_api_error_response_response-1774969085@datadoghq.com\", \"icon\": \"https://secure.gravatar.com/avatar/53ba6f826ef9a49acaeec55d1bcc1c47?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\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "relationships": { + "user": { + "data": { + "id": "825c5f4c-585c-494a-aade-60f1e1aa189b", + "type": "users" + } + } + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/abc7c612-d3a1-4147-bcfa-f28b4af43d33/memberships", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"TeamMembership-abc7c612-d3a1-4147-bcfa-f28b4af43d33-66215044\",\"type\":\"team_memberships\",\"attributes\":{\"provisioned_by\":null,\"provisioned_by_id\":\"a1d5ff5a-c6dd-11f0-9cb6-06640ca27ad4\",\"role\":\"admin\"},\"relationships\":{\"user\":{\"data\":{\"id\":\"825c5f4c-585c-494a-aade-60f1e1aa189b\",\"type\":\"users\"}}}},\"included\":[{\"id\":\"825c5f4c-585c-494a-aade-60f1e1aa189b\",\"type\":\"users\",\"attributes\":{\"disabled\":false,\"email\":\"test-add_a_user_to_a_team_returns_api_error_response_response-1774969085@datadoghq.com\",\"handle\":\"test-add_a_user_to_a_team_returns_api_error_response_response-1774969085@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/53ba6f826ef9a49acaeec55d1bcc1c47?d=retro\\u0026s=48\",\"name\":null,\"service_account\":false,\"status\":\"Pending\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "relationships": { + "user": { + "data": { + "id": "825c5f4c-585c-494a-aade-60f1e1aa189b", + "type": "users" + } + } + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/abc7c612-d3a1-4147-bcfa-f28b4af43d33/memberships", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Conflict\",\"detail\":\"users already present on the team [825c5f4c-585c-494a-aade-60f1e1aa189b]\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/abc7c612-d3a1-4147-bcfa-f28b4af43d33/memberships/825c5f4c-585c-494a-aade-60f1e1aa189b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/825c5f4c-585c-494a-aade-60f1e1aa189b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/abc7c612-d3a1-4147-bcfa-f28b4af43d33", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Add a user to a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-31T14:57:49.739Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-3170c6f6f5b25b4d", + "name": "test-name-3170c6f6f5b25b4d" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"95ac9e78-0a56-4a6a-9e5e-21580dc141cc\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":9,\"created_at\":\"2026-03-31T14:57:54.888553+00:00\",\"description\":null,\"handle\":\"test-handle-3170c6f6f5b25b4d\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-03-31T14:57:54.888553+00:00\",\"name\":\"test-name-3170c6f6f5b25b4d\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/95ac9e78-0a56-4a6a-9e5e-21580dc141cc/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/95ac9e78-0a56-4a6a-9e5e-21580dc141cc/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Add_a_user_to_a_team_returns_Represents_a_user_s_association_to_a_team_response-1774969069@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": {\"type\": \"users\", \"id\": \"ebb17d15-5e46-4440-856f-75710cbbce4b\", \"attributes\": {\"name\": null, \"handle\": \"test-add_a_user_to_a_team_returns_represents_a_user_s_association_to_a_team_response-1774969069@datadoghq.com\", \"created_at\": \"2026-03-31T14:57:55.106406+00:00\", \"modified_at\": \"2026-03-31T14:57:55.106406+00:00\", \"email\": \"test-add_a_user_to_a_team_returns_represents_a_user_s_association_to_a_team_response-1774969069@datadoghq.com\", \"icon\": \"https://secure.gravatar.com/avatar/52a30c814f85968a9d363cc103840284?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\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "relationships": { + "user": { + "data": { + "id": "ebb17d15-5e46-4440-856f-75710cbbce4b", + "type": "users" + } + } + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/95ac9e78-0a56-4a6a-9e5e-21580dc141cc/memberships", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"TeamMembership-95ac9e78-0a56-4a6a-9e5e-21580dc141cc-66215040\",\"type\":\"team_memberships\",\"attributes\":{\"provisioned_by\":null,\"provisioned_by_id\":\"a1d5ff5a-c6dd-11f0-9cb6-06640ca27ad4\",\"role\":\"admin\"},\"relationships\":{\"user\":{\"data\":{\"id\":\"ebb17d15-5e46-4440-856f-75710cbbce4b\",\"type\":\"users\"}}}},\"included\":[{\"id\":\"ebb17d15-5e46-4440-856f-75710cbbce4b\",\"type\":\"users\",\"attributes\":{\"disabled\":false,\"email\":\"test-add_a_user_to_a_team_returns_represents_a_user_s_association_to_a_team_response-1774969069@datadoghq.com\",\"handle\":\"test-add_a_user_to_a_team_returns_represents_a_user_s_association_to_a_team_response-1774969069@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/52a30c814f85968a9d363cc103840284?d=retro\\u0026s=48\",\"name\":null,\"service_account\":false,\"status\":\"Pending\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/95ac9e78-0a56-4a6a-9e5e-21580dc141cc/memberships/ebb17d15-5e46-4440-856f-75710cbbce4b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/ebb17d15-5e46-4440-856f-75710cbbce4b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/95ac9e78-0a56-4a6a-9e5e-21580dc141cc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Add a user to a team returns \"Represents a user's association to a team\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-11-24T14:29:58.684Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-34095e00d70ee50a", + "name": "test-name-34095e00d70ee50a" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"551c947a-0f0f-4ff0-8c41-0ceddabe3551\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":3,\"created_at\":\"2025-11-24T14:29:59.195740+00:00\",\"description\":null,\"handle\":\"test-handle-34095e00d70ee50a\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T14:29:59.195740+00:00\",\"name\":\"test-name-34095e00d70ee50a\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/551c947a-0f0f-4ff0-8c41-0ceddabe3551/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/551c947a-0f0f-4ff0-8c41-0ceddabe3551/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-2-34095e00d70ee50a", + "name": "test-name-2-34095e00d70ee50a" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e1c6ab08-0325-4df7-aea1-6bec76692d55\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":14,\"created_at\":\"2025-11-24T14:29:59.754699+00:00\",\"description\":null,\"handle\":\"test-handle-2-34095e00d70ee50a\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T14:29:59.754699+00:00\",\"name\":\"test-name-2-34095e00d70ee50a\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/e1c6ab08-0325-4df7-aea1-6bec76692d55/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/e1c6ab08-0325-4df7-aea1-6bec76692d55/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "551c947a-0f0f-4ff0-8c41-0ceddabe3551", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "e1c6ab08-0325-4df7-aea1-6bec76692d55", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team-hierarchy-links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c53bed14-1c0a-4895-b845-1c04be086ba0\",\"type\":\"team_hierarchy_links\",\"attributes\":{\"created_at\":\"2025-11-24T14:30:00.032477595Z\",\"provisioned_by\":\"\"},\"relationships\":{\"parent_team\":{\"data\":{\"id\":\"551c947a-0f0f-4ff0-8c41-0ceddabe3551\",\"type\":\"team\"}},\"sub_team\":{\"data\":{\"id\":\"e1c6ab08-0325-4df7-aea1-6bec76692d55\",\"type\":\"team\"}}}},\"included\":[{\"id\":\"551c947a-0f0f-4ff0-8c41-0ceddabe3551\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":3,\"handle\":\"test-handle-34095e00d70ee50a\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-34095e00d70ee50a\",\"summary\":null,\"user_count\":0}},{\"id\":\"e1c6ab08-0325-4df7-aea1-6bec76692d55\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":14,\"handle\":\"test-handle-2-34095e00d70ee50a\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-2-34095e00d70ee50a\",\"summary\":null,\"user_count\":0}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team-hierarchy-links/c53bed14-1c0a-4895-b845-1c04be086ba0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/e1c6ab08-0325-4df7-aea1-6bec76692d55", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/551c947a-0f0f-4ff0-8c41-0ceddabe3551", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a team hierarchy link returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-11-24T17:06:46.856Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-6c891437b748aea8", + "name": "test-name-6c891437b748aea8" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":0,\"created_at\":\"2025-11-24T17:06:47.453319+00:00\",\"description\":null,\"handle\":\"test-handle-6c891437b748aea8\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T17:06:47.453319+00:00\",\"name\":\"test-name-6c891437b748aea8\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-2-6c891437b748aea8", + "name": "test-name-2-6c891437b748aea8" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"21296c73-c9e2-4889-a33f-417d2974b2bd\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":2,\"created_at\":\"2025-11-24T17:06:48.020887+00:00\",\"description\":null,\"handle\":\"test-handle-2-6c891437b748aea8\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T17:06:48.020887+00:00\",\"name\":\"test-name-2-6c891437b748aea8\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/21296c73-c9e2-4889-a33f-417d2974b2bd/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/21296c73-c9e2-4889-a33f-417d2974b2bd/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "21296c73-c9e2-4889-a33f-417d2974b2bd", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team-hierarchy-links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"e980108e-d535-4bdf-84ca-5e8f84a68480\",\"type\":\"team_hierarchy_links\",\"attributes\":{\"created_at\":\"2025-11-24T17:06:48.279316439Z\",\"provisioned_by\":\"\"},\"relationships\":{\"parent_team\":{\"data\":{\"id\":\"4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87\",\"type\":\"team\"}},\"sub_team\":{\"data\":{\"id\":\"21296c73-c9e2-4889-a33f-417d2974b2bd\",\"type\":\"team\"}}}},\"included\":[{\"id\":\"4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":0,\"handle\":\"test-handle-6c891437b748aea8\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-6c891437b748aea8\",\"summary\":null,\"user_count\":0}},{\"id\":\"21296c73-c9e2-4889-a33f-417d2974b2bd\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":2,\"handle\":\"test-handle-2-6c891437b748aea8\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-2-6c891437b748aea8\",\"summary\":null,\"user_count\":0}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "21296c73-c9e2-4889-a33f-417d2974b2bd", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team-hierarchy-links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Conflict: could not add team 21296c73-c9e2-4889-a33f-417d2974b2bd as a member team of team 4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87 in org 321813: team hierarchy link between super team 4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87 and member team 21296c73-c9e2-4889-a33f-417d2974b2bd already exists in org 321813\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team-hierarchy-links/e980108e-d535-4bdf-84ca-5e8f84a68480", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/21296c73-c9e2-4889-a33f-417d2974b2bd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/4a9a1845-0ba7-4a6f-a34d-6e72a4ffda87", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a team hierarchy link returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-11-24T16:01:16.053Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-4d8084da4dfa4ed8", + "name": "test-name-4d8084da4dfa4ed8" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d5b049f4-59f1-474d-ad98-5a7342a8961f\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":11,\"created_at\":\"2025-11-24T16:01:16.149673+00:00\",\"description\":null,\"handle\":\"test-handle-4d8084da4dfa4ed8\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T16:01:16.149673+00:00\",\"name\":\"test-name-4d8084da4dfa4ed8\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/d5b049f4-59f1-474d-ad98-5a7342a8961f/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/d5b049f4-59f1-474d-ad98-5a7342a8961f/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-2-4d8084da4dfa4ed8", + "name": "test-name-2-4d8084da4dfa4ed8" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"790428f6-10bc-427d-bf36-f53ca3c197e0\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":4,\"created_at\":\"2025-11-24T16:01:16.315013+00:00\",\"description\":null,\"handle\":\"test-handle-2-4d8084da4dfa4ed8\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T16:01:16.315013+00:00\",\"name\":\"test-name-2-4d8084da4dfa4ed8\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/790428f6-10bc-427d-bf36-f53ca3c197e0/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/790428f6-10bc-427d-bf36-f53ca3c197e0/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "d5b049f4-59f1-474d-ad98-5a7342a8961f", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "790428f6-10bc-427d-bf36-f53ca3c197e0", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team-hierarchy-links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"6cf86539-2c6e-497e-8cef-0b285ff05514\",\"type\":\"team_hierarchy_links\",\"attributes\":{\"created_at\":\"2025-11-24T16:01:16.460042023Z\",\"provisioned_by\":\"\"},\"relationships\":{\"parent_team\":{\"data\":{\"id\":\"d5b049f4-59f1-474d-ad98-5a7342a8961f\",\"type\":\"team\"}},\"sub_team\":{\"data\":{\"id\":\"790428f6-10bc-427d-bf36-f53ca3c197e0\",\"type\":\"team\"}}}},\"included\":[{\"id\":\"d5b049f4-59f1-474d-ad98-5a7342a8961f\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":11,\"handle\":\"test-handle-4d8084da4dfa4ed8\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-4d8084da4dfa4ed8\",\"summary\":null,\"user_count\":0}},{\"id\":\"790428f6-10bc-427d-bf36-f53ca3c197e0\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":4,\"handle\":\"test-handle-2-4d8084da4dfa4ed8\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-2-4d8084da4dfa4ed8\",\"summary\":null,\"user_count\":0}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team-hierarchy-links/6cf86539-2c6e-497e-8cef-0b285ff05514", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/790428f6-10bc-427d-bf36-f53ca3c197e0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/d5b049f4-59f1-474d-ad98-5a7342a8961f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a team hierarchy link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-11-24T15:48:39.900Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-a75ee0b8b483d66f", + "name": "test-name-a75ee0b8b483d66f" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b85e63cd-1d9f-4b71-a47c-f5a99d4a4afd\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":3,\"created_at\":\"2025-11-24T15:48:40.359260+00:00\",\"description\":null,\"handle\":\"test-handle-a75ee0b8b483d66f\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T15:48:40.359261+00:00\",\"name\":\"test-name-a75ee0b8b483d66f\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/b85e63cd-1d9f-4b71-a47c-f5a99d4a4afd/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/b85e63cd-1d9f-4b71-a47c-f5a99d4a4afd/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-2-a75ee0b8b483d66f", + "name": "test-name-2-a75ee0b8b483d66f" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"2d096572-eb6a-4579-ba38-b4247cf75e17\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":8,\"created_at\":\"2025-11-24T15:48:40.893488+00:00\",\"description\":null,\"handle\":\"test-handle-2-a75ee0b8b483d66f\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T15:48:40.893488+00:00\",\"name\":\"test-name-2-a75ee0b8b483d66f\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/2d096572-eb6a-4579-ba38-b4247cf75e17/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/2d096572-eb6a-4579-ba38-b4247cf75e17/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "b85e63cd-1d9f-4b71-a47c-f5a99d4a4afd", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "2d096572-eb6a-4579-ba38-b4247cf75e17", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team-hierarchy-links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fb94d43b-fe10-4c5f-ae7c-4ad745428651\",\"type\":\"team_hierarchy_links\",\"attributes\":{\"created_at\":\"2025-11-24T15:48:41.150923395Z\",\"provisioned_by\":\"\"},\"relationships\":{\"parent_team\":{\"data\":{\"id\":\"b85e63cd-1d9f-4b71-a47c-f5a99d4a4afd\",\"type\":\"team\"}},\"sub_team\":{\"data\":{\"id\":\"2d096572-eb6a-4579-ba38-b4247cf75e17\",\"type\":\"team\"}}}},\"included\":[{\"id\":\"b85e63cd-1d9f-4b71-a47c-f5a99d4a4afd\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":3,\"handle\":\"test-handle-a75ee0b8b483d66f\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-a75ee0b8b483d66f\",\"summary\":null,\"user_count\":0}},{\"id\":\"2d096572-eb6a-4579-ba38-b4247cf75e17\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":8,\"handle\":\"test-handle-2-a75ee0b8b483d66f\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-2-a75ee0b8b483d66f\",\"summary\":null,\"user_count\":0}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team-hierarchy-links/fb94d43b-fe10-4c5f-ae7c-4ad745428651", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/2d096572-eb6a-4579-ba38-b4247cf75e17", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/b85e63cd-1d9f-4b71-a47c-f5a99d4a4afd", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a team hierarchy link returns \"SUCCESS\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:42.989Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-d92d2e08806acc4e", + "name": "test-name-d92d2e08806acc4e" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"2cb8bb60-405b-11ee-8a69-da7ad0900002\",\"attributes\":{\"name\":\"test-name-d92d2e08806acc4e\",\"handle\":\"test-handle-d92d2e08806acc4e\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:43.155798+00:00\",\"modified_at\":\"2023-08-21T19:44:43.155804+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/2cb8bb60-405b-11ee-8a69-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/2cb8bb60-405b-11ee-8a69-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "label": "", + "position": 0, + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/2cb8bb60-405b-11ee-8a69-da7ad0900002/links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"label cannot be empty\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/2cb8bb60-405b-11ee-8a69-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a team link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-01-23T11:00:10.582Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-5e6a036c358c6bff", + "name": "test-name-5e6a036c358c6bff" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"66d6e3d2-f7ea-4946-bc93-b11db5b9bed4\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":12,\"created_at\":\"2026-01-23T11:00:12.132142+00:00\",\"description\":null,\"handle\":\"test-handle-5e6a036c358c6bff\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-01-23T11:00:12.132142+00:00\",\"name\":\"test-name-5e6a036c358c6bff\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/66d6e3d2-f7ea-4946-bc93-b11db5b9bed4/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/66d6e3d2-f7ea-4946-bc93-b11db5b9bed4/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "label": "Link label", + "position": 0, + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/66d6e3d2-f7ea-4946-bc93-b11db5b9bed4/links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team_links\",\"id\":\"b0c50a40-f84a-11f0-a7c6-da7ad0900002\",\"attributes\":{\"team_id\":\"66d6e3d2-f7ea-4946-bc93-b11db5b9bed4\",\"label\":\"Link label\",\"url\":\"https://example.com\",\"position\":0}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/66d6e3d2-f7ea-4946-bc93-b11db5b9bed4/links/b0c50a40-f84a-11f0-a7c6-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/66d6e3d2-f7ea-4946-bc93-b11db5b9bed4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a team link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:44.449Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-b98be6aba3b71089", + "name": "test-name-b98be6aba3b71089" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"2d8e0130-405b-11ee-869d-da7ad0900002\",\"attributes\":{\"name\":\"test-name-b98be6aba3b71089\",\"handle\":\"test-handle-b98be6aba3b71089\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:44.553464+00:00\",\"modified_at\":\"2023-08-21T19:44:44.553470+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/2d8e0130-405b-11ee-869d-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/2d8e0130-405b-11ee-869d-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-b98be6aba3b71089", + "name": "Example Team" + }, + "relationships": { + "users": { + "data": [] + } + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Team name and handle must be unique\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/2d8e0130-405b-11ee-869d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:54:32.226Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-ef7e0a86ff5c0e43", + "name": "test-name-ef7e0a86ff5c0e43" + }, + "relationships": { + "users": { + "data": [] + } + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"8be92a56-405c-11ee-8f72-da7ad0900002\",\"attributes\":{\"name\":\"test-name-ef7e0a86ff5c0e43\",\"handle\":\"test-handle-ef7e0a86ff5c0e43\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:54:32.354249+00:00\",\"modified_at\":\"2023-08-21T19:54:32.354257+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/8be92a56-405c-11ee-8f72-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/8be92a56-405c-11ee-8f72-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/8be92a56-405c-11ee-8f72-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a team returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:57:41.364Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "avatar": "\ud83e\udd51", + "banner": 7, + "handle": "test-handle-d8e2060f755d882d", + "hidden_modules": [ + "m3" + ], + "name": "test-name-d8e2060f755d882d", + "visible_modules": [ + "m1", + "m2" + ] + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"fcaac0f6-405c-11ee-9237-da7ad0900002\",\"attributes\":{\"name\":\"test-name-d8e2060f755d882d\",\"handle\":\"test-handle-d8e2060f755d882d\",\"summary\":null,\"description\":null,\"avatar\":\"\\ud83e\\udd51\",\"banner\":7,\"visible_modules\":[\"m1\",\"m2\"],\"hidden_modules\":[\"m3\"],\"created_at\":\"2023-08-21T19:57:41.527619+00:00\",\"modified_at\":\"2023-08-21T19:57:41.527624+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/fcaac0f6-405c-11ee-9237-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/fcaac0f6-405c-11ee-9237-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/fcaac0f6-405c-11ee-9237-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a team with V2 fields returns \"CREATED\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-27T09:09:04.870Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"data\\\" at least one team connection must be provided\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create team connections returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-27T09:28:24.368Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-84ab6777f7201a32", + "name": "test-name-84ab6777f7201a32" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"be93b665-0a69-4573-8ef4-56f6a741c1a1\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":10,\"created_at\":\"2026-03-27T09:28:24.862516+00:00\",\"description\":null,\"handle\":\"test-handle-84ab6777f7201a32\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-03-27T09:28:24.862516+00:00\",\"name\":\"test-name-84ab6777f7201a32\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/be93b665-0a69-4573-8ef4-56f6a741c1a1/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/be93b665-0a69-4573-8ef4-56f6a741c1a1/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "managed_by": "datadog", + "source": "github" + }, + "relationships": { + "connected_team": { + "data": { + "id": "@MyGitHubAccount/my-team-name", + "type": "github_team" + } + }, + "team": { + "data": { + "id": "be93b665-0a69-4573-8ef4-56f6a741c1a1", + "type": "team" + } + } + }, + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"4e4b0094-29bf-11f1-aeac-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"be93b665-0a69-4573-8ef4-56f6a741c1a1\",\"type\":\"team\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "managed_by": "datadog", + "source": "github" + }, + "relationships": { + "connected_team": { + "data": { + "id": "@MyGitHubAccount/my-team-name", + "type": "github_team" + } + }, + "team": { + "data": { + "id": "be93b665-0a69-4573-8ef4-56f6a741c1a1", + "type": "team" + } + } + }, + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Conflict\",\"detail\":\"failed to add team connections: one or more team attributes already exist\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/be93b665-0a69-4573-8ef4-56f6a741c1a1", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create team connections returns \"Conflict\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-27T09:09:22.678Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-8d5b9953d168d107", + "name": "test-name-8d5b9953d168d107" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"726053a9-9b81-4381-bf91-b96b746f28d9\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":11,\"created_at\":\"2026-03-27T09:09:23.174349+00:00\",\"description\":null,\"handle\":\"test-handle-8d5b9953d168d107\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-03-27T09:09:23.174349+00:00\",\"name\":\"test-name-8d5b9953d168d107\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/726053a9-9b81-4381-bf91-b96b746f28d9/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/726053a9-9b81-4381-bf91-b96b746f28d9/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "managed_by": "datadog", + "source": "github" + }, + "relationships": { + "connected_team": { + "data": { + "id": "@MyGitHubAccount/my-team-name", + "type": "github_team" + } + }, + "team": { + "data": { + "id": "726053a9-9b81-4381-bf91-b96b746f28d9", + "type": "team" + } + } + }, + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"a5c93d48-29bc-11f1-82fc-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"726053a9-9b81-4381-bf91-b96b746f28d9\",\"type\":\"team\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/726053a9-9b81-4381-bf91-b96b746f28d9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create team connections returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-12-23T15:27:22.080Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-416b8af9ae1d2bbe", + "name": "test-name-416b8af9ae1d2bbe" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":5,\"created_at\":\"2025-12-23T15:27:22.204713+00:00\",\"description\":null,\"handle\":\"test-handle-416b8af9ae1d2bbe\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-12-23T15:27:22.204713+00:00\",\"name\":\"test-name-416b8af9ae1d2bbe\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"56627a0f-4c41-491d-b789-14d660c391ee\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Conflict\",\"detail\":\"notification rule already exists for this team\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create team notification rule returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-12-23T15:28:02.140Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-72b192d95e937252", + "name": "test-name-72b192d95e937252" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"04eae0c8-e225-4f2c-97ec-39dab13dfc38\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":13,\"created_at\":\"2025-12-23T15:28:02.268616+00:00\",\"description\":null,\"handle\":\"test-handle-72b192d95e937252\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-12-23T15:28:02.268616+00:00\",\"name\":\"test-name-72b192d95e937252\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/04eae0c8-e225-4f2c-97ec-39dab13dfc38/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/04eae0c8-e225-4f2c-97ec-39dab13dfc38/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/04eae0c8-e225-4f2c-97ec-39dab13dfc38/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"bba76d10-a5c6-4cb5-ba1a-5a9145f2b364\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/04eae0c8-e225-4f2c-97ec-39dab13dfc38", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create team notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-27T09:21:11.529Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "", + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/team/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Bad Request\",\"detail\":\"attribute \\\"id\\\" one or more team connection ids are not present\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Delete team connections returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-27T09:21:19.736Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-5e060b20bd1650cf", + "name": "test-name-5e060b20bd1650cf" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"250b46bc-90c5-4464-8a8f-bf261f788495\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":1,\"created_at\":\"2026-03-27T09:21:20.252382+00:00\",\"description\":null,\"handle\":\"test-handle-5e060b20bd1650cf\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-03-27T09:21:20.252382+00:00\",\"name\":\"test-name-5e060b20bd1650cf\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/250b46bc-90c5-4464-8a8f-bf261f788495/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/250b46bc-90c5-4464-8a8f-bf261f788495/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "managed_by": "datadog", + "source": "github" + }, + "relationships": { + "connected_team": { + "data": { + "id": "@MyGitHubAccount/my-team-name", + "type": "github_team" + } + }, + "team": { + "data": { + "id": "250b46bc-90c5-4464-8a8f-bf261f788495", + "type": "team" + } + } + }, + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"51323b02-29be-11f1-ad4d-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"250b46bc-90c5-4464-8a8f-bf261f788495\",\"type\":\"team\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "id": "51323b02-29be-11f1-ad4d-da7ad0900002", + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "DELETE", + "path": "/api/v2/team/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/250b46bc-90c5-4464-8a8f-bf261f788495", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete team connections returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-12-23T16:10:38.852Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-7ecc01265306da71", + "name": "test-name-7ecc01265306da71" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9bd7798e-a955-48e0-9a36-13820e1ff74b\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":2,\"created_at\":\"2025-12-23T16:10:38.996803+00:00\",\"description\":null,\"handle\":\"test-handle-7ecc01265306da71\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-12-23T16:10:38.996803+00:00\",\"name\":\"test-name-7ecc01265306da71\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"87b5e6e4-000d-4d9d-bb1c-bc62728a8ab8\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b/notification-rules/3d031bb2-e1da-4d34-a670-1b5557b032c9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"detail\":\"rule ID 3d031bb2-e1da-4d34-a670-1b5557b032c9 was not found in team ID 9bd7798e-a955-48e0-9a36-13820e1ff74b\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete team notification rule returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-12-23T15:28:45.586Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-4f30392b8132329e", + "name": "test-name-4f30392b8132329e" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"204d172a-83e4-420c-a840-d914be2cd5ed\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":4,\"created_at\":\"2025-12-23T15:28:45.710450+00:00\",\"description\":null,\"handle\":\"test-handle-4f30392b8132329e\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-12-23T15:28:45.710450+00:00\",\"name\":\"test-name-4f30392b8132329e\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d4abbaab-11b3-41ea-a6e3-ed366522a39e\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed/notification-rules/d4abbaab-11b3-41ea-a6e3-ed366522a39e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Delete team notification rule returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-11-24T13:19:11.816Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team-hierarchy-links/aaa11111-aa11-aa11-aaaa-aaaaaa111111", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not Found: team hierarchy link not found (linkId=aaa11111-aa11-aa11-aaaa-aaaaaa111111)\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a team hierarchy link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-11-24T17:07:09.212Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-ae3e76a23be3747a", + "name": "test-name-ae3e76a23be3747a" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"fafeac94-42b4-4469-91e8-0ae5ca3f564b\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":11,\"created_at\":\"2025-11-24T17:07:09.817794+00:00\",\"description\":null,\"handle\":\"test-handle-ae3e76a23be3747a\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T17:07:09.817794+00:00\",\"name\":\"test-name-ae3e76a23be3747a\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/fafeac94-42b4-4469-91e8-0ae5ca3f564b/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/fafeac94-42b4-4469-91e8-0ae5ca3f564b/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-2-ae3e76a23be3747a", + "name": "test-name-2-ae3e76a23be3747a" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"196bcc55-bd30-4cfd-8549-b3d255a0517b\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":4,\"created_at\":\"2025-11-24T17:07:10.381761+00:00\",\"description\":null,\"handle\":\"test-handle-2-ae3e76a23be3747a\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T17:07:10.381761+00:00\",\"name\":\"test-name-2-ae3e76a23be3747a\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/196bcc55-bd30-4cfd-8549-b3d255a0517b/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/196bcc55-bd30-4cfd-8549-b3d255a0517b/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "fafeac94-42b4-4469-91e8-0ae5ca3f564b", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "196bcc55-bd30-4cfd-8549-b3d255a0517b", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team-hierarchy-links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5401e712-de1b-4deb-ac35-2c6ee1943ad0\",\"type\":\"team_hierarchy_links\",\"attributes\":{\"created_at\":\"2025-11-24T17:07:10.643798843Z\",\"provisioned_by\":\"\"},\"relationships\":{\"parent_team\":{\"data\":{\"id\":\"fafeac94-42b4-4469-91e8-0ae5ca3f564b\",\"type\":\"team\"}},\"sub_team\":{\"data\":{\"id\":\"196bcc55-bd30-4cfd-8549-b3d255a0517b\",\"type\":\"team\"}}}},\"included\":[{\"id\":\"fafeac94-42b4-4469-91e8-0ae5ca3f564b\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":11,\"handle\":\"test-handle-ae3e76a23be3747a\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-ae3e76a23be3747a\",\"summary\":null,\"user_count\":0}},{\"id\":\"196bcc55-bd30-4cfd-8549-b3d255a0517b\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":4,\"handle\":\"test-handle-2-ae3e76a23be3747a\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-2-ae3e76a23be3747a\",\"summary\":null,\"user_count\":0}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team-hierarchy-links/5401e712-de1b-4deb-ac35-2c6ee1943ad0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5401e712-de1b-4deb-ac35-2c6ee1943ad0\",\"type\":\"team_hierarchy_links\",\"attributes\":{\"created_at\":\"2025-11-24T17:07:10.643799Z\",\"provisioned_by\":\"\"},\"relationships\":{\"parent_team\":{\"data\":{\"id\":\"fafeac94-42b4-4469-91e8-0ae5ca3f564b\",\"type\":\"team\"}},\"sub_team\":{\"data\":{\"id\":\"196bcc55-bd30-4cfd-8549-b3d255a0517b\",\"type\":\"team\"}}}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team-hierarchy-links/5401e712-de1b-4deb-ac35-2c6ee1943ad0\"},\"included\":[{\"id\":\"196bcc55-bd30-4cfd-8549-b3d255a0517b\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":4,\"handle\":\"test-handle-2-ae3e76a23be3747a\",\"is_managed\":false,\"is_open_membership\":true,\"link_count\":0,\"name\":\"test-name-2-ae3e76a23be3747a\",\"summary\":null,\"user_count\":0}},{\"id\":\"fafeac94-42b4-4469-91e8-0ae5ca3f564b\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":11,\"handle\":\"test-handle-ae3e76a23be3747a\",\"is_managed\":false,\"is_open_membership\":true,\"link_count\":0,\"name\":\"test-name-ae3e76a23be3747a\",\"summary\":null,\"user_count\":0}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team-hierarchy-links/5401e712-de1b-4deb-ac35-2c6ee1943ad0", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/196bcc55-bd30-4cfd-8549-b3d255a0517b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/fafeac94-42b4-4469-91e8-0ae5ca3f564b", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a team hierarchy link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:45.448Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-87a259270e6183b1", + "name": "test-name-87a259270e6183b1" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"2e28b978-405b-11ee-9792-da7ad0900002\",\"attributes\":{\"name\":\"test-name-87a259270e6183b1\",\"handle\":\"test-handle-87a259270e6183b1\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:45.568097+00:00\",\"modified_at\":\"2023-08-21T19:44:45.568104+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/2e28b978-405b-11ee-9792-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/2e28b978-405b-11ee-9792-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/2e28b978-405b-11ee-9792-da7ad0900002/links/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/2e28b978-405b-11ee-9792-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a team link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-01-23T11:00:13.515Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-94cf752f98fda23c", + "name": "test-name-94cf752f98fda23c" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"35d819d9-918b-4d29-838d-ed8507398b21\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":10,\"created_at\":\"2026-01-23T11:00:13.808835+00:00\",\"description\":null,\"handle\":\"test-handle-94cf752f98fda23c\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-01-23T11:00:13.808835+00:00\",\"name\":\"test-name-94cf752f98fda23c\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/35d819d9-918b-4d29-838d-ed8507398b21/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/35d819d9-918b-4d29-838d-ed8507398b21/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "label": "Test-Get_a_team_link_returns_OK_response-1769166013", + "position": 0, + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/35d819d9-918b-4d29-838d-ed8507398b21/links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team_links\",\"id\":\"b1c355f0-f84a-11f0-8d16-da7ad0900002\",\"attributes\":{\"team_id\":\"35d819d9-918b-4d29-838d-ed8507398b21\",\"label\":\"Test-Get_a_team_link_returns_OK_response-1769166013\",\"url\":\"https://example.com\",\"position\":0}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/35d819d9-918b-4d29-838d-ed8507398b21/links/b1c355f0-f84a-11f0-8d16-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b1c355f0-f84a-11f0-8d16-da7ad0900002\",\"type\":\"team_links\",\"attributes\":{\"label\":\"Test-Get_a_team_link_returns_OK_response-1769166013\",\"position\":0,\"team_id\":\"35d819d9-918b-4d29-838d-ed8507398b21\",\"url\":\"https://example.com\"}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/35d819d9-918b-4d29-838d-ed8507398b21/links/b1c355f0-f84a-11f0-8d16-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/35d819d9-918b-4d29-838d-ed8507398b21", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a team link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:46.795Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:46.926Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-df7035850d3d2bf3", + "name": "test-name-df7035850d3d2bf3" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"2f0a0aae-405b-11ee-8fd8-da7ad0900002\",\"attributes\":{\"name\":\"test-name-df7035850d3d2bf3\",\"handle\":\"test-handle-df7035850d3d2bf3\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:47.044918+00:00\",\"modified_at\":\"2023-08-21T19:44:47.044924+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/2f0a0aae-405b-11ee-8fd8-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/2f0a0aae-405b-11ee-8fd8-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/2f0a0aae-405b-11ee-8fd8-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"attributes\":{\"handle\":\"test-handle-df7035850d3d2bf3\",\"description\":null,\"name\":\"test-name-df7035850d3d2bf3\",\"summary\":null,\"user_count\":0,\"created_at\":\"2023-08-21T19:44:47.044918+00:00\",\"modified_at\":\"2023-08-21T19:44:47.044924+00:00\",\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/2f0a0aae-405b-11ee-8fd8-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/2f0a0aae-405b-11ee-8fd8-da7ad0900002/permission-settings\"}}},\"id\":\"2f0a0aae-405b-11ee-8fd8-da7ad0900002\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/2f0a0aae-405b-11ee-8fd8-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:47.453Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-e6e42a2ebca0ed06", + "name": "test-name-e6e42a2ebca0ed06" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"2f5b80be-405b-11ee-8a0d-da7ad0900002\",\"attributes\":{\"name\":\"test-name-e6e42a2ebca0ed06\",\"handle\":\"test-handle-e6e42a2ebca0ed06\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:47.577736+00:00\",\"modified_at\":\"2023-08-21T19:44:47.577743+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/2f5b80be-405b-11ee-8a0d-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/2f5b80be-405b-11ee-8a0d-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"team\",\"relationships\":{\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/ac73040e-c8d4-11ed-b2ea-da7ad0900002/permission-settings\"}},\"team_links\":{\"links\":{\"related\":\"/api/v2/team/ac73040e-c8d4-11ed-b2ea-da7ad0900002/links\"}}},\"attributes\":{\"user_count\":0,\"name\":\"Example Team\",\"handle\":\"api-spec-test-team\",\"created_at\":\"2023-03-22T17:12:07.018313+00:00\",\"link_count\":0,\"summary\":null,\"modified_at\":\"2023-03-22T17:12:07.018317+00:00\",\"description\":null},\"id\":\"ac73040e-c8d4-11ed-b2ea-da7ad0900002\"},{\"type\":\"team\",\"relationships\":{\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/2f5b80be-405b-11ee-8a0d-da7ad0900002/permission-settings\"}},\"team_links\":{\"links\":{\"related\":\"/api/v2/team/2f5b80be-405b-11ee-8a0d-da7ad0900002/links\"}}},\"attributes\":{\"user_count\":0,\"name\":\"test-name-e6e42a2ebca0ed06\",\"handle\":\"test-handle-e6e42a2ebca0ed06\",\"created_at\":\"2023-08-21T19:44:47.577736+00:00\",\"link_count\":0,\"summary\":null,\"modified_at\":\"2023-08-21T19:44:47.577743+00:00\",\"description\":null},\"id\":\"2f5b80be-405b-11ee-8a0d-da7ad0900002\"},{\"type\":\"team\",\"relationships\":{\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/ecc8affc-27d6-11ee-b33c-da7ad0900002/permission-settings\"}},\"team_links\":{\"links\":{\"related\":\"/api/v2/team/ecc8affc-27d6-11ee-b33c-da7ad0900002/links\"}}},\"attributes\":{\"user_count\":0,\"name\":\"tf-testaccteamlinkbasic-local-1689951453\",\"handle\":\"tf-testaccteamlinkbasic-local-1689951453\",\"created_at\":\"2023-07-21T14:57:34.412707+00:00\",\"link_count\":0,\"summary\":\"123\",\"modified_at\":\"2023-07-21T14:57:34.412713+00:00\",\"description\":\"123\"},\"id\":\"ecc8affc-27d6-11ee-b33c-da7ad0900002\"}],\"meta\":{\"pagination\":{\"offset\":0,\"first_offset\":0,\"prev_offset\":0,\"next_offset\":100,\"last_offset\":0,\"limit\":100,\"type\":\"offset_limit\",\"total\":3}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/team?page[offset]=100&page[limit]=100\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/team?page[offset]=0&page[limit]=100\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/2f5b80be-405b-11ee-8a0d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all teams returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-09-05T14:20:30.333Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team", + "query": [ + [ + "page[number]", + "0" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"team\",\"attributes\":{\"created_at\":\"2023-03-22T17:12:07.018313+00:00\",\"user_count\":0,\"description\":null,\"link_count\":0,\"modified_at\":\"2023-03-22T17:12:07.018317+00:00\",\"name\":\"Example Team\",\"summary\":null,\"handle\":\"api-spec-test-team\"},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/ac73040e-c8d4-11ed-b2ea-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/ac73040e-c8d4-11ed-b2ea-da7ad0900002/permission-settings\"}}},\"id\":\"ac73040e-c8d4-11ed-b2ea-da7ad0900002\"},{\"type\":\"team\",\"attributes\":{\"created_at\":\"2023-08-21T19:49:10.718738+00:00\",\"user_count\":1,\"description\":\"\",\"link_count\":0,\"modified_at\":\"2023-08-21T19:49:10.718744+00:00\",\"name\":\"test-name-12938712938\",\"summary\":null,\"handle\":\"test-handle-12938712938\"},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/cc338b02-405b-11ee-835e-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/cc338b02-405b-11ee-835e-da7ad0900002/permission-settings\"}}},\"id\":\"cc338b02-405b-11ee-835e-da7ad0900002\"}],\"meta\":{\"pagination\":{\"number\":0,\"first_number\":0,\"prev_number\":0,\"next_number\":1,\"last_number\":1,\"size\":2,\"type\":\"number_size\",\"total\":3}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team?page%5Bsize%5D=2&page%5Bnumber%5D=0\",\"last\":\"https://api.datadoghq.com/api/v2/team?page[number]=1&page[size]=2\",\"next\":\"https://api.datadoghq.com/api/v2/team?page[number]=1&page[size]=2\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/team?page[number]=0&page[size]=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team", + "query": [ + [ + "page[number]", + "1" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"team\",\"relationships\":{\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/ecc8affc-27d6-11ee-b33c-da7ad0900002/permission-settings\"}},\"team_links\":{\"links\":{\"related\":\"/api/v2/team/ecc8affc-27d6-11ee-b33c-da7ad0900002/links\"}}},\"attributes\":{\"link_count\":0,\"handle\":\"tf-testaccteamlinkbasic-local-1689951453\",\"modified_at\":\"2023-07-21T14:57:34.412713+00:00\",\"created_at\":\"2023-07-21T14:57:34.412707+00:00\",\"summary\":\"123\",\"name\":\"tf-testaccteamlinkbasic-local-1689951453\",\"user_count\":0,\"description\":\"123\"},\"id\":\"ecc8affc-27d6-11ee-b33c-da7ad0900002\"}],\"meta\":{\"pagination\":{\"number\":1,\"first_number\":0,\"prev_number\":0,\"next_number\":2,\"last_number\":1,\"size\":2,\"type\":\"number_size\",\"total\":3}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team?page%5Bsize%5D=2&page%5Bnumber%5D=1\",\"last\":\"https://api.datadoghq.com/api/v2/team?page[number]=1&page[size]=2\",\"next\":\"https://api.datadoghq.com/api/v2/team?page[number]=2&page[size]=2\",\"prev\":\"https://api.datadoghq.com/api/v2/team?page[number]=0&page[size]=2\",\"first\":\"https://api.datadoghq.com/api/v2/team?page[number]=0&page[size]=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get all teams returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2024-01-10T16:09:28.980Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-c164c08030364bd8", + "name": "test-name-c164c08030364bd8" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"bfc08ce5-4a3c-4336-8544-0a366a1656fb\",\"attributes\":{\"name\":\"test-name-c164c08030364bd8\",\"handle\":\"test-handle-c164c08030364bd8\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":1,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2024-01-10T16:09:16.773654+00:00\",\"modified_at\":\"2024-01-10T16:09:16.773660+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/bfc08ce5-4a3c-4336-8544-0a366a1656fb/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/bfc08ce5-4a3c-4336-8544-0a366a1656fb/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team", + "query": [ + [ + "fields[team]", + "id,name,handle" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"team\",\"id\":\"2e06bf2c-193b-41d4-b3c2-afccc080458f\",\"attributes\":{\"name\":\"test-name-0d5eae310f4bffff\",\"handle\":\"test-handle-0d5eae310f4bffff\"}},{\"type\":\"team\",\"id\":\"bfc08ce5-4a3c-4336-8544-0a366a1656fb\",\"attributes\":{\"name\":\"test-name-c164c08030364bd8\",\"handle\":\"test-handle-c164c08030364bd8\"}}],\"meta\":{\"pagination\":{\"offset\":0,\"first_offset\":0,\"prev_offset\":0,\"next_offset\":100,\"last_offset\":0,\"limit\":100,\"type\":\"offset_limit\",\"total\":2}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team?fields%5Bteam%5D=id,name,handle\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/team?fields%5Bteam%5D=id,name,handle&page[offset]=100&page[limit]=100\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/team?fields%5Bteam%5D=id,name,handle&page[offset]=0&page[limit]=100\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/bfc08ce5-4a3c-4336-8544-0a366a1656fb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get all teams with fields_team parameter returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:48.073Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/REPLACE.ME/links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get links for a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:48.210Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-2047a02ca89d196f", + "name": "test-name-2047a02ca89d196f" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"2fcd65d0-405b-11ee-817e-da7ad0900002\",\"attributes\":{\"name\":\"test-name-2047a02ca89d196f\",\"handle\":\"test-handle-2047a02ca89d196f\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:48.324737+00:00\",\"modified_at\":\"2023-08-21T19:44:48.324744+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/2fcd65d0-405b-11ee-817e-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/2fcd65d0-405b-11ee-817e-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/2fcd65d0-405b-11ee-817e-da7ad0900002/links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/2fcd65d0-405b-11ee-817e-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get links for a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:48.737Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/REPLACE.ME/permission-settings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get permission settings for a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:48.845Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-c87e4cf0f4edb309", + "name": "test-name-c87e4cf0f4edb309" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"302a1e60-405b-11ee-aa12-da7ad0900002\",\"attributes\":{\"name\":\"test-name-c87e4cf0f4edb309\",\"handle\":\"test-handle-c87e4cf0f4edb309\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:48.932658+00:00\",\"modified_at\":\"2023-08-21T19:44:48.932663+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/302a1e60-405b-11ee-aa12-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/302a1e60-405b-11ee-aa12-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/302a1e60-405b-11ee-aa12-da7ad0900002/permission-settings", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"team_permission_settings\",\"attributes\":{\"action\":\"manage_membership\",\"value\":\"organization\",\"title\":\"Add and Remove Members\",\"editable\":true,\"options\":[\"user_access_manage\",\"admins\",\"members\",\"organization\"]},\"id\":\"TeamPermission-302a1e60-405b-11ee-aa12-da7ad0900002-manage_membership\"},{\"type\":\"team_permission_settings\",\"attributes\":{\"action\":\"edit\",\"value\":\"members\",\"title\":\"Edit Team Details\",\"editable\":true,\"options\":[\"teams_manage\",\"admins\",\"members\"]},\"id\":\"TeamPermission-302a1e60-405b-11ee-aa12-da7ad0900002-edit\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/302a1e60-405b-11ee-aa12-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get permission settings for a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-11-24T17:18:13.180Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-ab0ee85594ae1dfd", + "name": "test-name-ab0ee85594ae1dfd" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d1baf3de-7316-43b5-8582-dc887acc26ef\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":6,\"created_at\":\"2025-11-24T17:18:13.814865+00:00\",\"description\":null,\"handle\":\"test-handle-ab0ee85594ae1dfd\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T17:18:13.814865+00:00\",\"name\":\"test-name-ab0ee85594ae1dfd\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/d1baf3de-7316-43b5-8582-dc887acc26ef/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/d1baf3de-7316-43b5-8582-dc887acc26ef/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-2-ab0ee85594ae1dfd", + "name": "test-name-2-ab0ee85594ae1dfd" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"61b0ab36-c1e5-47fd-898a-ba9bfc860e9d\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":13,\"created_at\":\"2025-11-24T17:18:14.383042+00:00\",\"description\":null,\"handle\":\"test-handle-2-ab0ee85594ae1dfd\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T17:18:14.383042+00:00\",\"name\":\"test-name-2-ab0ee85594ae1dfd\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/61b0ab36-c1e5-47fd-898a-ba9bfc860e9d/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/61b0ab36-c1e5-47fd-898a-ba9bfc860e9d/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "d1baf3de-7316-43b5-8582-dc887acc26ef", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "61b0ab36-c1e5-47fd-898a-ba9bfc860e9d", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team-hierarchy-links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"61509612-5bb0-42c5-a16e-bf4920acf473\",\"type\":\"team_hierarchy_links\",\"attributes\":{\"created_at\":\"2025-11-24T17:18:14.635205462Z\",\"provisioned_by\":\"\"},\"relationships\":{\"parent_team\":{\"data\":{\"id\":\"d1baf3de-7316-43b5-8582-dc887acc26ef\",\"type\":\"team\"}},\"sub_team\":{\"data\":{\"id\":\"61b0ab36-c1e5-47fd-898a-ba9bfc860e9d\",\"type\":\"team\"}}}},\"included\":[{\"id\":\"d1baf3de-7316-43b5-8582-dc887acc26ef\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":6,\"handle\":\"test-handle-ab0ee85594ae1dfd\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-ab0ee85594ae1dfd\",\"summary\":null,\"user_count\":0}},{\"id\":\"61b0ab36-c1e5-47fd-898a-ba9bfc860e9d\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":13,\"handle\":\"test-handle-2-ab0ee85594ae1dfd\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-2-ab0ee85594ae1dfd\",\"summary\":null,\"user_count\":0}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team-hierarchy-links", + "query": [ + [ + "filter[parent_team]", + "d1baf3de-7316-43b5-8582-dc887acc26ef" + ], + [ + "filter[sub_team]", + "61b0ab36-c1e5-47fd-898a-ba9bfc860e9d" + ], + [ + "page[number]", + "0" + ], + [ + "page[size]", + "100" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"61509612-5bb0-42c5-a16e-bf4920acf473\",\"type\":\"team_hierarchy_links\",\"attributes\":{\"created_at\":\"2025-11-24T17:18:14.635205Z\",\"provisioned_by\":\"\"},\"relationships\":{\"parent_team\":{\"data\":{\"id\":\"d1baf3de-7316-43b5-8582-dc887acc26ef\",\"type\":\"team\"}},\"sub_team\":{\"data\":{\"id\":\"61b0ab36-c1e5-47fd-898a-ba9bfc860e9d\",\"type\":\"team\"}}}}],\"meta\":{\"page\":{\"type\":\"number_size\",\"number\":0,\"size\":100,\"total\":1,\"first_number\":0,\"prev_number\":null,\"next_number\":null,\"last_number\":0}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team-hierarchy-links?filter%5Bparent_team%5D=d1baf3de-7316-43b5-8582-dc887acc26ef\\u0026filter%5Bsub_team%5D=61b0ab36-c1e5-47fd-898a-ba9bfc860e9d\\u0026page%5Bnumber%5D=0\\u0026page%5Bsize%5D=100\",\"first\":\"https://api.datadoghq.com/api/v2/team-hierarchy-links?filter[parent_team]=d1baf3de-7316-43b5-8582-dc887acc26ef\\u0026filter[sub_team]=61b0ab36-c1e5-47fd-898a-ba9bfc860e9d\\u0026page[number]=0\\u0026page[size]=100\",\"last\":\"https://api.datadoghq.com/api/v2/team-hierarchy-links?filter[parent_team]=d1baf3de-7316-43b5-8582-dc887acc26ef\\u0026filter[sub_team]=61b0ab36-c1e5-47fd-898a-ba9bfc860e9d\\u0026page[number]=0\\u0026page[size]=100\"},\"included\":[{\"id\":\"61b0ab36-c1e5-47fd-898a-ba9bfc860e9d\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":13,\"handle\":\"test-handle-2-ab0ee85594ae1dfd\",\"is_managed\":false,\"is_open_membership\":true,\"link_count\":0,\"name\":\"test-name-2-ab0ee85594ae1dfd\",\"summary\":null,\"user_count\":0}},{\"id\":\"d1baf3de-7316-43b5-8582-dc887acc26ef\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":6,\"handle\":\"test-handle-ab0ee85594ae1dfd\",\"is_managed\":false,\"is_open_membership\":true,\"link_count\":0,\"name\":\"test-name-ab0ee85594ae1dfd\",\"summary\":null,\"user_count\":0}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team-hierarchy-links/61509612-5bb0-42c5-a16e-bf4920acf473", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/61b0ab36-c1e5-47fd-898a-ba9bfc860e9d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/d1baf3de-7316-43b5-8582-dc887acc26ef", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get team hierarchy links returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:49.337Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/REPLACE.ME/memberships", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get team memberships returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:49.464Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-f05d3606dace17e6", + "name": "test-name-f05d3606dace17e6" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"308b9b7c-405b-11ee-b8bb-da7ad0900002\",\"attributes\":{\"name\":\"test-name-f05d3606dace17e6\",\"handle\":\"test-handle-f05d3606dace17e6\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:49.571050+00:00\",\"modified_at\":\"2023-08-21T19:44:49.571056+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/308b9b7c-405b-11ee-b8bb-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/308b9b7c-405b-11ee-b8bb-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/308b9b7c-405b-11ee-b8bb-da7ad0900002/memberships", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"pagination\":{\"offset\":0,\"first_offset\":0,\"prev_offset\":0,\"next_offset\":100,\"last_offset\":0,\"limit\":100,\"type\":\"offset_limit\",\"total\":0}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team/308b9b7c-405b-11ee-b8bb-da7ad0900002/memberships\",\"last\":null,\"next\":\"https://api.datadoghq.com/api/v2/team/308b9b7c-405b-11ee-b8bb-da7ad0900002/memberships?page[offset]=100&page[limit]=100\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/team/308b9b7c-405b-11ee-b8bb-da7ad0900002/memberships?page[offset]=0&page[limit]=100\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/308b9b7c-405b-11ee-b8bb-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get team memberships returns \"Represents a user's association to a team\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2024-01-26T20:53:20.323Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships", + "query": [ + [ + "page[number]", + "0" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"team_memberships\",\"id\":\"TeamMembership-2e06bf2c-193b-41d4-b3c2-afccc080458f-3736692\",\"attributes\":{\"role\":null,\"provisioned_by\":null,\"provisioned_by_id\":\"6018c832-80a7-11ea-93dd-43183212bc7a\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"03b4bfc0-98b9-11ec-842d-da7ad0900002\"}}}},{\"type\":\"team_memberships\",\"id\":\"TeamMembership-2e06bf2c-193b-41d4-b3c2-afccc080458f-4055096\",\"attributes\":{\"role\":null,\"provisioned_by\":null,\"provisioned_by_id\":\"6018c832-80a7-11ea-93dd-43183212bc7a\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"170a64a1-d9c6-11ec-af01-da7ad0900002\"}}}}],\"included\":[{\"type\":\"users\",\"id\":\"03b4bfc0-98b9-11ec-842d-da7ad0900002\",\"attributes\":{\"name\":\"Datadog API Client Python\",\"handle\":\"example-create_a_user_returns_ok_response_1646068093@datadoghq.com\",\"email\":\"example-create_a_user_returns_ok_response_1646068093@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/27fb863ad335246b65fe4989f1686f35?s=48&d=retro\",\"disabled\":false,\"service_account\":false}},{\"type\":\"users\",\"id\":\"170a64a1-d9c6-11ec-af01-da7ad0900002\",\"attributes\":{\"name\":\"Datadog API Client Python\",\"handle\":\"example-create_a_user_returns_ok_response_1653220535@datadoghq.com\",\"email\":\"example-create_a_user_returns_ok_response_1653220535@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/c5256983bba478dfd35e83bbb73621cc?s=48&d=retro\",\"disabled\":false,\"service_account\":false}}],\"meta\":{\"pagination\":{\"number\":0,\"first_number\":0,\"prev_number\":0,\"next_number\":1,\"last_number\":1,\"size\":2,\"type\":\"number_size\",\"total\":3}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page%5Bsize%5D=2&page%5Bnumber%5D=0\",\"last\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=1&page[size]=2\",\"next\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=1&page[size]=2\",\"prev\":null,\"first\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=0&page[size]=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships", + "query": [ + [ + "page[number]", + "1" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"team_memberships\",\"id\":\"TeamMembership-2e06bf2c-193b-41d4-b3c2-afccc080458f-1445416\",\"attributes\":{\"role\":null,\"provisioned_by\":null,\"provisioned_by_id\":\"6018c832-80a7-11ea-93dd-43183212bc7a\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"}}}}],\"included\":[{\"type\":\"users\",\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"attributes\":{\"name\":null,\"handle\":\"frog@datadoghq.com\",\"email\":\"frog@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/28a16dfe36e73b60c1d55872cb0f1172?s=48&d=retro\",\"disabled\":false,\"service_account\":false}}],\"meta\":{\"pagination\":{\"number\":1,\"first_number\":0,\"prev_number\":0,\"next_number\":2,\"last_number\":1,\"size\":2,\"type\":\"number_size\",\"total\":3}},\"links\":{\"self\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page%5Bsize%5D=2&page%5Bnumber%5D=1\",\"last\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=1&page[size]=2\",\"next\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=2&page[size]=2\",\"prev\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=0&page[size]=2\",\"first\":\"https://api.datadoghq.com/api/v2/team/2e06bf2c-193b-41d4-b3c2-afccc080458f/memberships?page[number]=0&page[size]=2\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get team memberships returns \"Represents a user's association to a team\" response with pagination", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-12-23T15:29:05.686Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-903f29be232384f8", + "name": "test-name-903f29be232384f8" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"54fb1795-4bee-4e8f-9ccd-1aca53d24f8e\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":14,\"created_at\":\"2025-12-23T15:29:05.802966+00:00\",\"description\":null,\"handle\":\"test-handle-903f29be232384f8\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-12-23T15:29:05.802966+00:00\",\"name\":\"test-name-903f29be232384f8\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"51f01e40-e075-4c25-8878-9fd3f7800770\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e/notification-rules/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"404\",\"title\":\"Not Found\",\"detail\":\"rule not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get team notification rule returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-12-23T15:29:22.965Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-ee0eead53fe855d3", + "name": "test-name-ee0eead53fe855d3" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a7145aa7-d043-4f4d-bd45-fd02669b47d7\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":14,\"created_at\":\"2025-12-23T15:29:23.130502+00:00\",\"description\":null,\"handle\":\"test-handle-ee0eead53fe855d3\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-12-23T15:29:23.130502+00:00\",\"name\":\"test-name-ee0eead53fe855d3\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"68717b60-b443-49ac-b7ca-75664cb53c29\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7/notification-rules/68717b60-b443-49ac-b7ca-75664cb53c29", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"68717b60-b443-49ac-b7ca-75664cb53c29\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get team notification rule returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-12-23T15:29:44.007Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-470a68e726826798", + "name": "test-name-470a68e726826798" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a3101ed3-6329-48f6-86fa-17f3680205a3\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":14,\"created_at\":\"2025-12-23T15:29:44.163043+00:00\",\"description\":null,\"handle\":\"test-handle-470a68e726826798\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-12-23T15:29:44.163043+00:00\",\"name\":\"test-name-470a68e726826798\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"136542b0-6555-4240-bcc9-5d040c17cd54\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"136542b0-6555-4240-bcc9-5d040c17cd54\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}],\"meta\":{\"page\":{\"type\":\"offset_limit\",\"offset\":0,\"limit\":100,\"total\":1,\"first_offset\":0,\"prev_offset\":null,\"next_offset\":null,\"last_offset\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get team notification rules returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-04T16:01:00.945Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/sync", + "query": [ + [ + "filter[source]", + "github" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"3d33cc55-aea4-4801-bb75-139d347298c9\",\"type\":\"team_sync_bulk\",\"attributes\":{\"frequency\":\"once\",\"selection_state\":[{\"external_id\":{\"type\":\"organization\",\"value\":\"1\"},\"operation\":\"include\",\"scope\":\"subtree\"}],\"source\":\"github\",\"sync_membership\":false,\"type\":\"link\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get team sync configurations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:50.009Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_user_memberships_returns_Represents_a_user_s_association_to_a_team_response-1692647090@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"30e03059-405b-11ee-9a91-1a2c4720b59d\",\"attributes\":{\"name\":null,\"handle\":\"test-get_user_memberships_returns_represents_a_user_s_association_to_a_team_response-1692647090@datadoghq.com\",\"created_at\":\"2023-08-21T19:44:50.128235+00:00\",\"modified_at\":\"2023-08-21T19:44:50.135570+00:00\",\"email\":\"test-get_user_memberships_returns_represents_a_user_s_association_to_a_team_response-1692647090@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/d2db09a560a471f9d40152e20a8dff27?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/users/30e03059-405b-11ee-9a91-1a2c4720b59d/memberships", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/30e03059-405b-11ee-9a91-1a2c4720b59d", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get user memberships returns \"Represents a user's association to a team\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-04T16:01:34.366Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "selection_state": [ + { + "external_id": { + "type": "organization", + "value": "1" + } + } + ], + "source": "github", + "type": "link" + }, + "type": "team_sync_bulk" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/sync", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Link Teams with GitHub Teams returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-27T09:09:49.513Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-48ce99925c887f33", + "name": "test-name-48ce99925c887f33" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"f520e86b-5137-461d-b054-5b454d7135c4\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":4,\"created_at\":\"2026-03-27T09:09:50.012362+00:00\",\"description\":null,\"handle\":\"test-handle-48ce99925c887f33\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-03-27T09:09:50.012363+00:00\",\"name\":\"test-name-48ce99925c887f33\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/f520e86b-5137-461d-b054-5b454d7135c4/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/f520e86b-5137-461d-b054-5b454d7135c4/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "managed_by": "datadog", + "source": "github" + }, + "relationships": { + "connected_team": { + "data": { + "id": "@MyGitHubAccount/my-team-name", + "type": "github_team" + } + }, + "team": { + "data": { + "id": "f520e86b-5137-461d-b054-5b454d7135c4", + "type": "team" + } + } + }, + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"b5c56780-29bc-11f1-b3d1-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"f520e86b-5137-461d-b054-5b454d7135c4\",\"type\":\"team\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/connections", + "query": [ + [ + "page[size]", + "10" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"52a55816-291e-11f1-be93-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"0a81a948-5ee2-4790-b855-8817a21ccf1e\",\"type\":\"team\"}}}},{\"id\":\"52df3810-291e-11f1-b8ea-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"a9d786f4-447a-4a3b-9505-882df3f1d7e4\",\"type\":\"team\"}}}},{\"id\":\"53407c2e-291e-11f1-af9c-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"48f1089c-a1ee-4039-8b9d-59a512010d89\",\"type\":\"team\"}}}},{\"id\":\"53722ae4-291e-11f1-be97-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"27c3acd0-4eeb-459c-9dbf-2f61263c8387\",\"type\":\"team\"}}}},{\"id\":\"4f642338-28f8-11f1-8cc3-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"52b98022-50b0-42b5-8d59-f8f8a809027e\",\"type\":\"team\"}}}},{\"id\":\"b5c56780-29bc-11f1-b3d1-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"f520e86b-5137-461d-b054-5b454d7135c4\",\"type\":\"team\"}}}}],\"meta\":{\"page\":{\"type\":\"number_size\",\"number\":0,\"size\":10,\"total\":6,\"first_number\":0,\"prev_number\":null,\"next_number\":null,\"last_number\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/f520e86b-5137-461d-b054-5b454d7135c4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List team connections returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-27T09:09:58.847Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-fa25cb1eef560458", + "name": "test-name-fa25cb1eef560458" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"d7ee1319-6ac0-45c6-8700-079e58eac9f9\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":1,\"created_at\":\"2026-03-27T09:09:59.338935+00:00\",\"description\":null,\"handle\":\"test-handle-fa25cb1eef560458\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-03-27T09:09:59.338935+00:00\",\"name\":\"test-name-fa25cb1eef560458\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/d7ee1319-6ac0-45c6-8700-079e58eac9f9/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/d7ee1319-6ac0-45c6-8700-079e58eac9f9/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "attributes": { + "managed_by": "datadog", + "source": "github" + }, + "relationships": { + "connected_team": { + "data": { + "id": "@MyGitHubAccount/my-team-name", + "type": "github_team" + } + }, + "team": { + "data": { + "id": "d7ee1319-6ac0-45c6-8700-079e58eac9f9", + "type": "team" + } + } + }, + "type": "team_connection" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/connections", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"bb57db2e-29bc-11f1-bcee-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"d7ee1319-6ac0-45c6-8700-079e58eac9f9\",\"type\":\"team\"}}}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/team/connections", + "query": [ + [ + "filter[sources]", + "github" + ], + [ + "page[size]", + "10" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"52a55816-291e-11f1-be93-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"0a81a948-5ee2-4790-b855-8817a21ccf1e\",\"type\":\"team\"}}}},{\"id\":\"52df3810-291e-11f1-b8ea-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"a9d786f4-447a-4a3b-9505-882df3f1d7e4\",\"type\":\"team\"}}}},{\"id\":\"53407c2e-291e-11f1-af9c-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"48f1089c-a1ee-4039-8b9d-59a512010d89\",\"type\":\"team\"}}}},{\"id\":\"53722ae4-291e-11f1-be97-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"27c3acd0-4eeb-459c-9dbf-2f61263c8387\",\"type\":\"team\"}}}},{\"id\":\"4f642338-28f8-11f1-8cc3-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"52b98022-50b0-42b5-8d59-f8f8a809027e\",\"type\":\"team\"}}}},{\"id\":\"bb57db2e-29bc-11f1-bcee-da7ad0900002\",\"type\":\"team_connection\",\"attributes\":{\"managed_by\":\"datadog\",\"source\":\"github\"},\"relationships\":{\"connected_team\":{\"data\":{\"id\":\"@MyGitHubAccount/my-team-name\",\"type\":\"github_team\"}},\"team\":{\"data\":{\"id\":\"d7ee1319-6ac0-45c6-8700-079e58eac9f9\",\"type\":\"team\"}}}}],\"meta\":{\"page\":{\"type\":\"number_size\",\"number\":0,\"size\":10,\"total\":6,\"first_number\":0,\"prev_number\":null,\"next_number\":null,\"last_number\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/d7ee1319-6ac0-45c6-8700-079e58eac9f9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List team connections with filters returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-11-24T13:14:20.481Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team-hierarchy-links/aaa11111-aa11-aa11-aaaa-aaaaaa111111", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not Found: link with id aaa11111-aa11-aa11-aaaa-aaaaaa111111 not found\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Remove a team hierarchy link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-11-24T17:08:01.196Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-db31819631324305", + "name": "test-name-db31819631324305" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"eaf01981-6b63-41ba-b49f-30449c50e865\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":10,\"created_at\":\"2025-11-24T17:08:01.930314+00:00\",\"description\":null,\"handle\":\"test-handle-db31819631324305\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T17:08:01.930314+00:00\",\"name\":\"test-name-db31819631324305\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/eaf01981-6b63-41ba-b49f-30449c50e865/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/eaf01981-6b63-41ba-b49f-30449c50e865/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-2-db31819631324305", + "name": "test-name-2-db31819631324305" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"120aeb27-ca42-4e38-a9e4-6497b8f9407c\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":6,\"created_at\":\"2025-11-24T17:08:02.174211+00:00\",\"description\":null,\"handle\":\"test-handle-2-db31819631324305\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-11-24T17:08:02.174211+00:00\",\"name\":\"test-name-2-db31819631324305\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/120aeb27-ca42-4e38-a9e4-6497b8f9407c/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/120aeb27-ca42-4e38-a9e4-6497b8f9407c/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "relationships": { + "parent_team": { + "data": { + "id": "eaf01981-6b63-41ba-b49f-30449c50e865", + "type": "team" + } + }, + "sub_team": { + "data": { + "id": "120aeb27-ca42-4e38-a9e4-6497b8f9407c", + "type": "team" + } + } + }, + "type": "team_hierarchy_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team-hierarchy-links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"185446b8-1e88-419c-b266-3933f1411b6e\",\"type\":\"team_hierarchy_links\",\"attributes\":{\"created_at\":\"2025-11-24T17:08:02.736655421Z\",\"provisioned_by\":\"\"},\"relationships\":{\"parent_team\":{\"data\":{\"id\":\"eaf01981-6b63-41ba-b49f-30449c50e865\",\"type\":\"team\"}},\"sub_team\":{\"data\":{\"id\":\"120aeb27-ca42-4e38-a9e4-6497b8f9407c\",\"type\":\"team\"}}}},\"included\":[{\"id\":\"eaf01981-6b63-41ba-b49f-30449c50e865\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":10,\"handle\":\"test-handle-db31819631324305\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-db31819631324305\",\"summary\":null,\"user_count\":0}},{\"id\":\"120aeb27-ca42-4e38-a9e4-6497b8f9407c\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":6,\"handle\":\"test-handle-2-db31819631324305\",\"is_managed\":false,\"is_open_membership\":false,\"link_count\":0,\"name\":\"test-name-2-db31819631324305\",\"summary\":null,\"user_count\":0}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team-hierarchy-links/185446b8-1e88-419c-b266-3933f1411b6e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team-hierarchy-links/185446b8-1e88-419c-b266-3933f1411b6e", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Not Found: link with id 185446b8-1e88-419c-b266-3933f1411b6e not found\"]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/120aeb27-ca42-4e38-a9e4-6497b8f9407c", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/eaf01981-6b63-41ba-b49f-30449c50e865", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Remove a team hierarchy link returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:50.525Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-e3c0e8f681a17e5d", + "name": "test-name-e3c0e8f681a17e5d" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"312a5500-405b-11ee-8490-da7ad0900002\",\"attributes\":{\"name\":\"test-name-e3c0e8f681a17e5d\",\"handle\":\"test-handle-e3c0e8f681a17e5d\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:50.611038+00:00\",\"modified_at\":\"2023-08-21T19:44:50.611044+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/312a5500-405b-11ee-8490-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/312a5500-405b-11ee-8490-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/312a5500-405b-11ee-8490-da7ad0900002/links/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/312a5500-405b-11ee-8490-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Remove a team link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-01-23T11:00:15.520Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-5e7e3d924d3cf03e", + "name": "test-name-5e7e3d924d3cf03e" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"59e1efcf-eb13-4a2b-8fcf-64590d56007f\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":7,\"created_at\":\"2026-01-23T11:00:15.837894+00:00\",\"description\":null,\"handle\":\"test-handle-5e7e3d924d3cf03e\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-01-23T11:00:15.837894+00:00\",\"name\":\"test-name-5e7e3d924d3cf03e\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/59e1efcf-eb13-4a2b-8fcf-64590d56007f/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/59e1efcf-eb13-4a2b-8fcf-64590d56007f/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "label": "Test-Remove_a_team_link_returns_No_Content_response-1769166015", + "position": 0, + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/59e1efcf-eb13-4a2b-8fcf-64590d56007f/links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team_links\",\"id\":\"b2fba45e-f84a-11f0-9d5d-da7ad0900002\",\"attributes\":{\"team_id\":\"59e1efcf-eb13-4a2b-8fcf-64590d56007f\",\"label\":\"Test-Remove_a_team_link_returns_No_Content_response-1769166015\",\"url\":\"https://example.com\",\"position\":0}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/59e1efcf-eb13-4a2b-8fcf-64590d56007f/links/b2fba45e-f84a-11f0-9d5d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/59e1efcf-eb13-4a2b-8fcf-64590d56007f/links/b2fba45e-f84a-11f0-9d5d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Link for ID b2fba45e-f84a-11f0-9d5d-da7ad0900002 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/59e1efcf-eb13-4a2b-8fcf-64590d56007f", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Remove a team link returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:51.856Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Remove a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:51.991Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-a9d07353f71937c2", + "name": "test-name-a9d07353f71937c2" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"320db0de-405b-11ee-bb10-da7ad0900002\",\"attributes\":{\"name\":\"test-name-a9d07353f71937c2\",\"handle\":\"test-handle-a9d07353f71937c2\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:52.101073+00:00\",\"modified_at\":\"2023-08-21T19:44:52.101079+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/320db0de-405b-11ee-bb10-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/320db0de-405b-11ee-bb10-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/320db0de-405b-11ee-bb10-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/320db0de-405b-11ee-bb10-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Team for ID 320db0de-405b-11ee-bb10-da7ad0900002 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Remove a team returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:52.509Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-61d5baa2cd58430d", + "name": "test-name-61d5baa2cd58430d" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"325bc472-405b-11ee-ac5e-da7ad0900002\",\"attributes\":{\"name\":\"test-name-61d5baa2cd58430d\",\"handle\":\"test-handle-61d5baa2cd58430d\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:52.612996+00:00\",\"modified_at\":\"2023-08-21T19:44:52.613002+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/325bc472-405b-11ee-ac5e-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/325bc472-405b-11ee-ac5e-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/325bc472-405b-11ee-ac5e-da7ad0900002/memberships/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/325bc472-405b-11ee-ac5e-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Remove a user from a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-25T10:51:13.320Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-789e569afaa52bde", + "name": "test-name-789e569afaa52bde" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"1d059472-0eff-4857-a6c8-5e5041448b54\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":5,\"created_at\":\"2026-03-25T10:51:13.938804+00:00\",\"description\":null,\"handle\":\"test-handle-789e569afaa52bde\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-03-25T10:51:13.938804+00:00\",\"name\":\"test-name-789e569afaa52bde\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/1d059472-0eff-4857-a6c8-5e5041448b54/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/1d059472-0eff-4857-a6c8-5e5041448b54/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Remove_a_user_from_a_team_returns_No_Content_response-1774435873@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\": {\"type\": \"users\", \"id\": \"66e25b0b-3f3b-427e-b162-e779f4535abb\", \"attributes\": {\"name\": null, \"handle\": \"test-remove_a_user_from_a_team_returns_no_content_response-1774435873@datadoghq.com\", \"created_at\": \"2026-03-25T10:51:14.481612+00:00\", \"modified_at\": \"2026-03-25T10:51:14.481612+00:00\", \"email\": \"test-remove_a_user_from_a_team_returns_no_content_response-1774435873@datadoghq.com\", \"icon\": \"https://secure.gravatar.com/avatar/be9f1c5abecde28b4c01cc8aa0680377?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\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "relationships": { + "user": { + "data": { + "id": "66e25b0b-3f3b-427e-b162-e779f4535abb", + "type": "users" + } + } + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/1d059472-0eff-4857-a6c8-5e5041448b54/memberships", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"TeamMembership-1d059472-0eff-4857-a6c8-5e5041448b54-66092046\",\"type\":\"team_memberships\",\"attributes\":{\"provisioned_by\":null,\"provisioned_by_id\":\"a1d5ff5a-c6dd-11f0-9cb6-06640ca27ad4\",\"role\":\"admin\"},\"relationships\":{\"user\":{\"data\":{\"id\":\"66e25b0b-3f3b-427e-b162-e779f4535abb\",\"type\":\"users\"}}}},\"included\":[{\"id\":\"66e25b0b-3f3b-427e-b162-e779f4535abb\",\"type\":\"users\",\"attributes\":{\"disabled\":false,\"email\":\"test-remove_a_user_from_a_team_returns_no_content_response-1774435873@datadoghq.com\",\"handle\":\"test-remove_a_user_from_a_team_returns_no_content_response-1774435873@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/be9f1c5abecde28b4c01cc8aa0680377?d=retro\\u0026s=48\",\"name\":null,\"service_account\":false,\"status\":\"Pending\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/1d059472-0eff-4857-a6c8-5e5041448b54/memberships/66e25b0b-3f3b-427e-b162-e779f4535abb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/1d059472-0eff-4857-a6c8-5e5041448b54/memberships/66e25b0b-3f3b-427e-b162-e779f4535abb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"User 66e25b0b-3f3b-427e-b162-e779f4535abb is not a member of Team 1d059472-0eff-4857-a6c8-5e5041448b54 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/66e25b0b-3f3b-427e-b162-e779f4535abb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/1d059472-0eff-4857-a6c8-5e5041448b54", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Remove a user from a team returns \"No Content\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:53.094Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-f05d64ea2c336925", + "name": "test-name-f05d64ea2c336925" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"32b31d26-405b-11ee-8641-da7ad0900002\",\"attributes\":{\"name\":\"test-name-f05d64ea2c336925\",\"handle\":\"test-handle-f05d64ea2c336925\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:53.186188+00:00\",\"modified_at\":\"2023-08-21T19:44:53.186194+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/32b31d26-405b-11ee-8641-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/32b31d26-405b-11ee-8641-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "label": "Link label", + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/team/32b31d26-405b-11ee-8641-da7ad0900002/links/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/32b31d26-405b-11ee-8641-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a team link returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-01-23T11:00:17.594Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-98fa6b5d3df15a52", + "name": "test-name-98fa6b5d3df15a52" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"ec95ccd2-5cf4-494a-971c-84a604f7dde5\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":0,\"created_at\":\"2026-01-23T11:00:17.893904+00:00\",\"description\":null,\"handle\":\"test-handle-98fa6b5d3df15a52\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-01-23T11:00:17.893904+00:00\",\"name\":\"test-name-98fa6b5d3df15a52\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/ec95ccd2-5cf4-494a-971c-84a604f7dde5/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/ec95ccd2-5cf4-494a-971c-84a604f7dde5/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "label": "Test-Update_a_team_link_returns_OK_response-1769166017", + "position": 0, + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/ec95ccd2-5cf4-494a-971c-84a604f7dde5/links", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team_links\",\"id\":\"b433501a-f84a-11f0-9cd8-da7ad0900002\",\"attributes\":{\"team_id\":\"ec95ccd2-5cf4-494a-971c-84a604f7dde5\",\"label\":\"Test-Update_a_team_link_returns_OK_response-1769166017\",\"url\":\"https://example.com\",\"position\":0}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "label": "New Label", + "url": "https://example.com" + }, + "type": "team_links" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/team/ec95ccd2-5cf4-494a-971c-84a604f7dde5/links/b433501a-f84a-11f0-9cd8-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team_links\",\"id\":\"b433501a-f84a-11f0-9cd8-da7ad0900002\",\"attributes\":{\"team_id\":\"ec95ccd2-5cf4-494a-971c-84a604f7dde5\",\"label\":\"New Label\",\"url\":\"https://example.com\",\"position\":0}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/ec95ccd2-5cf4-494a-971c-84a604f7dde5/links/b433501a-f84a-11f0-9cd8-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/ec95ccd2-5cf4-494a-971c-84a604f7dde5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a team link returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:54:13.879Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-2d88c8b44bfe8721", + "name": "test-name-2d88c8b44bfe8721" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"81011c66-405c-11ee-bec1-da7ad0900002\",\"attributes\":{\"name\":\"test-name-2d88c8b44bfe8721\",\"handle\":\"test-handle-2d88c8b44bfe8721\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:54:14.055917+00:00\",\"modified_at\":\"2023-08-21T19:54:14.055923+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/81011c66-405c-11ee-bec1-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/81011c66-405c-11ee-bec1-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "avatar": "\ud83e\udd51", + "banner": 7, + "handle": "test-handle-2d88c8b44bfe8721", + "hidden_modules": [ + "m3" + ], + "name": "test-name-2d88c8b44bfe8721 updated", + "visible_modules": [ + "m1", + "m2" + ] + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/team/81011c66-405c-11ee-bec1-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"81011c66-405c-11ee-bec1-da7ad0900002\",\"attributes\":{\"name\":\"test-name-2d88c8b44bfe8721 updated\",\"handle\":\"test-handle-2d88c8b44bfe8721\",\"summary\":null,\"description\":null,\"avatar\":\"\\ud83e\\udd51\",\"banner\":7,\"visible_modules\":[\"m1\",\"m2\"],\"hidden_modules\":[\"m3\"],\"created_at\":\"2023-08-21T19:54:14.055917+00:00\",\"modified_at\":\"2023-08-21T19:54:14.288541+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/81011c66-405c-11ee-bec1-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/81011c66-405c-11ee-bec1-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/81011c66-405c-11ee-bec1-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-03-25T11:58:33.497Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-1aa8ea88c040ca48", + "name": "test-name-1aa8ea88c040ca48" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5f6e649c-340c-46e7-96bc-bc5ececc7839\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":15,\"created_at\":\"2026-03-25T11:58:34.181069+00:00\",\"description\":null,\"handle\":\"test-handle-1aa8ea88c040ca48\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-03-25T11:58:34.181069+00:00\",\"name\":\"test-name-1aa8ea88c040ca48\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/5f6e649c-340c-46e7-96bc-bc5ececc7839/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/5f6e649c-340c-46e7-96bc-bc5ececc7839/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-1aa8ea88c040ca48", + "name": "test-name-1aa8ea88c040ca48 updated" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/team/5f6e649c-340c-46e7-96bc-bc5ececc7839", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"5f6e649c-340c-46e7-96bc-bc5ececc7839\",\"attributes\":{\"name\":\"test-name-1aa8ea88c040ca48 updated\",\"handle\":\"test-handle-1aa8ea88c040ca48\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":15,\"visible_modules\":null,\"hidden_modules\":null,\"created_at\":\"2026-03-25T11:58:34.181069+00:00\",\"modified_at\":\"2026-03-25T11:58:34.727617+00:00\",\"user_count\":0,\"link_count\":0,\"is_managed\":false},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/5f6e649c-340c-46e7-96bc-bc5ececc7839/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/5f6e649c-340c-46e7-96bc-bc5ececc7839/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/5f6e649c-340c-46e7-96bc-bc5ececc7839", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a team with partial update returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-02-12T14:57:57.281Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-d1ea4282abe3f68d", + "name": "test-name-d1ea4282abe3f68d" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"587b5f1a-b8ef-42b7-a99a-746cb80422a4\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":6,\"created_at\":\"2026-02-12T14:57:57.783497+00:00\",\"description\":null,\"handle\":\"test-handle-d1ea4282abe3f68d\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-02-12T14:57:57.783497+00:00\",\"name\":\"test-name-d1ea4282abe3f68d\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/587b5f1a-b8ef-42b7-a99a-746cb80422a4/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/587b5f1a-b8ef-42b7-a99a-746cb80422a4/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/team/587b5f1a-b8ef-42b7-a99a-746cb80422a4/memberships/00000000-0000-dead-beef-000000000000", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"User for ID 00000000-0000-dead-beef-000000000000 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/587b5f1a-b8ef-42b7-a99a-746cb80422a4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a user's membership attributes on a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-02-12T14:59:46.756Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-ae403c8f160ec46f", + "name": "test-name-ae403c8f160ec46f" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"38c0d1d3-69c0-4452-95a0-0115b22f2607\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":13,\"created_at\":\"2026-02-12T14:59:47.252294+00:00\",\"description\":null,\"handle\":\"test-handle-ae403c8f160ec46f\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-02-12T14:59:47.252294+00:00\",\"name\":\"test-name-ae403c8f160ec46f\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/38c0d1d3-69c0-4452-95a0-0115b22f2607/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/38c0d1d3-69c0-4452-95a0-0115b22f2607/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_a_user_s_membership_attributes_on_a_team_returns_OK_response-1770908386@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"3330c2ed-ac5d-458e-875b-ffc85c436edc\",\"attributes\":{\"name\":null,\"handle\":\"test-update_a_user_s_membership_attributes_on_a_team_returns_ok_response-1770908386@datadoghq.com\",\"created_at\":\"2026-02-12T14:59:47.812309+00:00\",\"modified_at\":\"2026-02-12T14:59:47.812309+00:00\",\"email\":\"test-update_a_user_s_membership_attributes_on_a_team_returns_ok_response-1770908386@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/7906350a0aeb9c3285de81609654b5df?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "relationships": { + "user": { + "data": { + "id": "3330c2ed-ac5d-458e-875b-ffc85c436edc", + "type": "users" + } + } + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/38c0d1d3-69c0-4452-95a0-0115b22f2607/memberships", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"TeamMembership-38c0d1d3-69c0-4452-95a0-0115b22f2607-65393600\",\"type\":\"team_memberships\",\"attributes\":{\"provisioned_by\":null,\"provisioned_by_id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"role\":\"admin\"},\"relationships\":{\"user\":{\"data\":{\"id\":\"3330c2ed-ac5d-458e-875b-ffc85c436edc\",\"type\":\"users\"}}}},\"included\":[{\"id\":\"3330c2ed-ac5d-458e-875b-ffc85c436edc\",\"type\":\"users\",\"attributes\":{\"disabled\":false,\"email\":\"test-update_a_user_s_membership_attributes_on_a_team_returns_ok_response-1770908386@datadoghq.com\",\"handle\":\"test-update_a_user_s_membership_attributes_on_a_team_returns_ok_response-1770908386@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/7906350a0aeb9c3285de81609654b5df?d=retro\\u0026s=48\",\"name\":null,\"service_account\":false,\"status\":\"Pending\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/team/38c0d1d3-69c0-4452-95a0-0115b22f2607/memberships/3330c2ed-ac5d-458e-875b-ffc85c436edc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team_memberships\",\"id\":\"TeamMembership-38c0d1d3-69c0-4452-95a0-0115b22f2607-65393600\",\"attributes\":{\"role\":\"admin\",\"provisioned_by\":null,\"provisioned_by_id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"3330c2ed-ac5d-458e-875b-ffc85c436edc\"}}}},\"included\":[{\"type\":\"users\",\"id\":\"3330c2ed-ac5d-458e-875b-ffc85c436edc\",\"attributes\":{\"name\":null,\"handle\":\"test-update_a_user_s_membership_attributes_on_a_team_returns_ok_response-1770908386@datadoghq.com\",\"email\":\"test-update_a_user_s_membership_attributes_on_a_team_returns_ok_response-1770908386@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/7906350a0aeb9c3285de81609654b5df?s=48&d=retro\",\"disabled\":false,\"service_account\":false}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/38c0d1d3-69c0-4452-95a0-0115b22f2607/memberships/3330c2ed-ac5d-458e-875b-ffc85c436edc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/3330c2ed-ac5d-458e-875b-ffc85c436edc", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/38c0d1d3-69c0-4452-95a0-0115b22f2607", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a user's membership attributes on a team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2026-02-12T15:00:05.356Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-ff2b53b6514455c7", + "name": "test-name-ff2b53b6514455c7" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9c2a3be7-8a43-4f37-bc3d-88248875f867\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":3,\"created_at\":\"2026-02-12T15:00:05.867555+00:00\",\"description\":null,\"handle\":\"test-handle-ff2b53b6514455c7\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2026-02-12T15:00:05.867555+00:00\",\"name\":\"test-name-ff2b53b6514455c7\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/9c2a3be7-8a43-4f37-bc3d-88248875f867/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/9c2a3be7-8a43-4f37-bc3d-88248875f867/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_a_user_s_membership_attributes_on_a_team_with_invalid_role_returns_API_error_response_respons-1770908405@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"eed29272-352e-4bf8-ab48-ad007a1f7179\",\"attributes\":{\"name\":null,\"handle\":\"test-update_a_user_s_membership_attributes_on_a_team_with_invalid_role_returns_api_error_response_respons-1770908405@datadoghq.com\",\"created_at\":\"2026-02-12T15:00:06.429855+00:00\",\"modified_at\":\"2026-02-12T15:00:06.429855+00:00\",\"email\":\"test-update_a_user_s_membership_attributes_on_a_team_with_invalid_role_returns_api_error_response_respons-1770908405@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/1a5d1f711a7790783032ea8e4653d473?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\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "relationships": { + "user": { + "data": { + "id": "eed29272-352e-4bf8-ab48-ad007a1f7179", + "type": "users" + } + } + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/9c2a3be7-8a43-4f37-bc3d-88248875f867/memberships", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"TeamMembership-9c2a3be7-8a43-4f37-bc3d-88248875f867-65393607\",\"type\":\"team_memberships\",\"attributes\":{\"provisioned_by\":null,\"provisioned_by_id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"role\":\"admin\"},\"relationships\":{\"user\":{\"data\":{\"id\":\"eed29272-352e-4bf8-ab48-ad007a1f7179\",\"type\":\"users\"}}}},\"included\":[{\"id\":\"eed29272-352e-4bf8-ab48-ad007a1f7179\",\"type\":\"users\",\"attributes\":{\"disabled\":false,\"email\":\"test-update_a_user_s_membership_attributes_on_a_team_with_invalid_role_returns_api_error_response_respons-1770908405@datadoghq.com\",\"handle\":\"test-update_a_user_s_membership_attributes_on_a_team_with_invalid_role_returns_api_error_response_respons-1770908405@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/1a5d1f711a7790783032ea8e4653d473?d=retro\\u0026s=48\",\"name\":null,\"service_account\":false,\"status\":\"Pending\"}}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "member" + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/team/9c2a3be7-8a43-4f37-bc3d-88248875f867/memberships/eed29272-352e-4bf8-ab48-ad007a1f7179", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"{'errors': [{'detail': 'Not a valid choice.', 'source': {'pointer': '/data/attributes/role'}}]}\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/9c2a3be7-8a43-4f37-bc3d-88248875f867/memberships/eed29272-352e-4bf8-ab48-ad007a1f7179", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/eed29272-352e-4bf8-ab48-ad007a1f7179", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/9c2a3be7-8a43-4f37-bc3d-88248875f867", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a user's membership attributes on a team with invalid role returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:55.004Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-427b76ae43f10fe0", + "name": "test-name-427b76ae43f10fe0" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"33d811ca-405b-11ee-a640-da7ad0900002\",\"attributes\":{\"name\":\"test-name-427b76ae43f10fe0\",\"handle\":\"test-handle-427b76ae43f10fe0\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:55.105594+00:00\",\"modified_at\":\"2023-08-21T19:44:55.105599+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/33d811ca-405b-11ee-a640-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/33d811ca-405b-11ee-a640-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "role": "admin" + }, + "type": "team_memberships" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/team/33d811ca-405b-11ee-a640-da7ad0900002/memberships/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"REPLACE.ME is not a valid UUID not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/33d811ca-405b-11ee-a640-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a user's role on a team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:55.497Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-62f52dee42c1d7dc", + "name": "test-name-62f52dee42c1d7dc" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"3426dddc-405b-11ee-818a-da7ad0900002\",\"attributes\":{\"name\":\"test-name-62f52dee42c1d7dc\",\"handle\":\"test-handle-62f52dee42c1d7dc\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:55.621598+00:00\",\"modified_at\":\"2023-08-21T19:44:55.621607+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/3426dddc-405b-11ee-818a-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/3426dddc-405b-11ee-818a-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "value": "admins" + }, + "type": "team_permission_settings" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/team/3426dddc-405b-11ee-818a-da7ad0900002/permission-settings/REPLACE.ME", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"Invalid action type \\\"REPLACE.ME\\\". Valid actions: manage_membership, edit not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/3426dddc-405b-11ee-818a-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update permission setting for team returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2023-08-21T19:44:56.036Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-f17bf3394db1955e", + "name": "test-name-f17bf3394db1955e" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team\",\"id\":\"3474a102-405b-11ee-8a0f-da7ad0900002\",\"attributes\":{\"name\":\"test-name-f17bf3394db1955e\",\"handle\":\"test-handle-f17bf3394db1955e\",\"summary\":null,\"description\":null,\"avatar\":null,\"banner\":null,\"visible_modules\":[],\"hidden_modules\":[],\"created_at\":\"2023-08-21T19:44:56.131892+00:00\",\"modified_at\":\"2023-08-21T19:44:56.131898+00:00\",\"user_count\":0,\"link_count\":0},\"relationships\":{\"team_links\":{\"links\":{\"related\":\"/api/v2/team/3474a102-405b-11ee-8a0f-da7ad0900002/links\"}},\"user_team_permissions\":{\"links\":{\"related\":\"/api/v2/team/3474a102-405b-11ee-8a0f-da7ad0900002/permission-settings\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "value": "admins" + }, + "type": "team_permission_settings" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/team/3474a102-405b-11ee-8a0f-da7ad0900002/permission-settings/manage_membership", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"team_permission_settings\",\"attributes\":{\"action\":\"manage_membership\",\"value\":\"admins\",\"options\":[\"admins\",\"members\",\"organization\",\"user_access_manage\",\"teams_manage\"]},\"id\":\"TeamPermission-3474a102-405b-11ee-8a0f-da7ad0900002-manage_membership\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/3474a102-405b-11ee-8a0f-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update permission setting for team returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-12-23T16:10:18.143Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-191ec67f8f79c1b1", + "name": "test-name-191ec67f8f79c1b1" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"30484b70-7506-41b9-b1c6-4fcf6c13e5e4\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":2,\"created_at\":\"2025-12-23T16:10:18.284603+00:00\",\"description\":null,\"handle\":\"test-handle-191ec67f8f79c1b1\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-12-23T16:10:18.284603+00:00\",\"name\":\"test-name-191ec67f8f79c1b1\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5b80babd-fa31-4ab5-b180-5e36af751704\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "pagerduty": { + "service_name": "Datadog-prod" + }, + "slack": { + "channel": "aaa-governance-ops", + "workspace": "Datadog" + } + }, + "id": "30484b70-7506-41b9-b1c6-4fcf6c13e5e4", + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4/notification-rules/3d031bb2-e1da-4d34-a670-1b5557b032c9", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"409\",\"title\":\"Conflict\",\"detail\":\"rule id does not match with team's rule id\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Conflict", + "status": 409 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update team notification rule returns \"API error response.\" response", + "version": "v2" + }, + { + "feature": "Teams", + "frozen_at": "2025-12-23T15:30:20.002Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "handle": "test-handle-129c4638a0cbf5ab", + "name": "test-name-129c4638a0cbf5ab" + }, + "type": "team" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b103bc00-af0b-48ee-ad0a-2cae69341320\",\"type\":\"team\",\"attributes\":{\"avatar\":null,\"banner\":8,\"created_at\":\"2025-12-23T15:30:20.131472+00:00\",\"description\":null,\"handle\":\"test-handle-129c4638a0cbf5ab\",\"hidden_modules\":null,\"is_managed\":false,\"link_count\":0,\"modified_at\":\"2025-12-23T15:30:20.131472+00:00\",\"name\":\"test-name-129c4638a0cbf5ab\",\"summary\":null,\"user_count\":0,\"visible_modules\":null},\"relationships\":{\"team_links\":{\"data\":[],\"links\":{\"related\":\"/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320/links\"}},\"user_team_permissions\":{\"data\":null,\"links\":{\"related\":\"/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320/permission-settings\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": { + "enabled": true + }, + "slack": { + "channel": "aaa-omg-ops", + "workspace": "Datadog" + } + }, + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320/notification-rules", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5bff55f5-6777-4494-a2bd-23e0a6a3d751\",\"type\":\"team_notification_rules\",\"attributes\":{\"email\":{\"enabled\":true},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-omg-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "pagerduty": { + "service_name": "Datadog-prod" + }, + "slack": { + "channel": "aaa-governance-ops", + "workspace": "Datadog" + } + }, + "id": "5bff55f5-6777-4494-a2bd-23e0a6a3d751", + "type": "team_notification_rules" + } + } + }, + "content_type": "application/json", + "method": "PUT", + "path": "/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320/notification-rules/5bff55f5-6777-4494-a2bd-23e0a6a3d751", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"5bff55f5-6777-4494-a2bd-23e0a6a3d751\",\"type\":\"team_notification_rules\",\"attributes\":{\"pagerduty\":{\"service_name\":\"Datadog-prod\"},\"slack\":{\"workspace\":\"Datadog\",\"channel\":\"aaa-governance-ops\"}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update team notification rule returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/usage-metering.json b/test-server-data/v2/usage-metering.json new file mode 100644 index 0000000000..9a9927ae5c --- /dev/null +++ b/test-server-data/v2/usage-metering.json @@ -0,0 +1,828 @@ +{ + "feature": "Usage Metering", + "recordings": [ + { + "feature": "Usage Metering", + "frozen_at": "2023-11-16T19:41:02.013Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost_by_tag/monthly_cost_attribution", + "query": [ + [ + "end_month", + "2023-11-13T19:41:02.013Z" + ], + [ + "fields", + "not_a_product" + ], + [ + "start_month", + "2023-11-11T19:41:02.013Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"API called with non-parent org keys. Data is only available at the root level org\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get Monthly Cost Attribution returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2023-11-16T19:43:19.607Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost_by_tag/monthly_cost_attribution", + "query": [ + [ + "end_month", + "2023-11-13T19:43:19.607Z" + ], + [ + "fields", + "infra_host_total_cost" + ], + [ + "start_month", + "2023-11-11T19:43:19.607Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get Monthly Cost Attribution returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2023-11-16T16:03:39.691Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/cost_by_tag/active_billing_dimensions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"billing_dimensions\",\"id\":\"f145e21e840c6db03f75c179877629eb08531aa6f314f97658261680e49ab1f1\",\"attributes\":{\"values\":[\"apm_fargate\",\"apm_host\",\"apm_host_enterprise\",\"apm_host_no_usm\",\"apm_host_pro\",\"apm_profiler_host\",\"apm_trace_search\",\"application_security_fargate\",\"application_security_host\",\"application_vulnerability_management_oss_host\",\"audit_trail\",\"ci_pipeline\",\"ci_pipeline_indexed_spans\",\"ci_test_indexed_spans\",\"ci_testing\",\"cloud_cost_management\",\"csm_container_enterprise\",\"csm_host_enterprise\",\"csm_host_pro\",\"cspm_container\",\"cspm_host\",\"custom_event\",\"cws_container\",\"cws_host\",\"data_stream_monitoring\",\"dbm_host\",\"dbm_normalized_queries\",\"fargate_container\",\"fargate_container_apm_and_profiler\",\"fargate_container_profiler\",\"incident_management\",\"infra_and_apm_host\",\"infra_container\",\"infra_container_excl_agent\",\"infra_host\",\"ingested_spans\",\"ingested_timeseries\",\"iot\",\"lambda_function\",\"logs_forwarding\",\"logs_indexed_15day\",\"logs_indexed_180day\",\"logs_indexed_30day\",\"logs_indexed_360day\",\"logs_indexed_3day\",\"logs_indexed_45day\",\"logs_indexed_60day\",\"logs_indexed_7day\",\"logs_indexed_90day\",\"logs_indexed_custom_retention\",\"logs_ingested\",\"network_device\",\"npm_host\",\"observability_pipeline\",\"online_archive\",\"premier_support\",\"prof_container\",\"prof_host\",\"rum\",\"rum_lite\",\"rum_replay\",\"sensitive_data_scanner\",\"serverless_apm\",\"serverless_infra\",\"serverless_invocation\",\"siem\",\"standard_timeseries\",\"synthetics_api_tests\",\"synthetics_app_testing\",\"synthetics_browser_checks\",\"timeseries\",\"usm_standalone\",\"usm_within_infra_host\",\"workflow_execution\"],\"month\":\"2023-10-01T00:00:00Z\"}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get active billing dimensions for cost attribution returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2026-06-02T19:26:31.725Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/summary/available_fields", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"id\":null,\"links\":null,\"status\":\"400\",\"code\":null,\"title\":\"Bad Request\",\"detail\":\"API called with non-parent org keys. Data is only available at the root level org\",\"source\":null,\"meta\":null}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get available fields for usage summary returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2024-10-28T16:04:40.774Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/billing_dimension_mapping", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"id\":null,\"links\":null,\"status\":\"400\",\"code\":null,\"title\":\"Bad Request\",\"detail\":\"API called with non-parent org keys. Data is only available at the root level org\",\"source\":null,\"meta\":null}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get billing dimension mapping for usage endpoints returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-25T17:07:01.561Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/cost_by_org", + "query": [ + [ + "start_month", + "2022-04-22T17:07:01.561Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"attributes\":{\"org_name\":\"RQ Dummy Tests\",\"public_id\":\"fasjyydbcgwwc2uc\",\"total_cost\":73.17,\"charges\":[{\"charge_type\":\"committed\",\"cost\":0,\"product_name\":\"infra_host\"},{\"charge_type\":\"on_demand\",\"cost\":72,\"product_name\":\"synthetics_api_tests\"},{\"charge_type\":\"committed\",\"cost\":1.17,\"product_name\":\"infra_host\"}],\"date\":\"2022-04-25T17:00:00+00:00\"},\"type\":\"cost_by_org\",\"id\":\"5d1702ab10f060719ae5aa1fd7ba09e3d7e0fb371b8319051c616a1fcad254e9\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get cost across multi-org account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-25T17:07:01.561Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/estimated_cost_by_org", + "query": [ + [ + "end_date", + "2022-04-22T17:07:01.561Z" + ], + [ + "start_date", + "2022-04-20T17:07:01.561Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"attributes\":{\"org_name\":\"RQ Dummy Tests\",\"public_id\":\"fasjyydbcgwwc2uc\",\"total_cost\":73.17,\"charges\":[{\"charge_type\":\"committed\",\"cost\":0,\"product_name\":\"infra_host\"},{\"charge_type\":\"on_demand\",\"cost\":72,\"product_name\":\"synthetics_api_tests\"},{\"charge_type\":\"committed\",\"cost\":1.17,\"product_name\":\"infra_host\"}],\"date\":\"2022-04-25T17:00:00+00:00\"},\"type\":\"cost_by_org\",\"id\":\"5d1702ab10f060719ae5aa1fd7ba09e3d7e0fb371b8319051c616a1fcad254e9\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get estimated cost across multi-org account with date returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-25T17:07:01.561Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/estimated_cost_by_org", + "query": [ + [ + "end_month", + "2022-04-22T17:07:01.561Z" + ], + [ + "start_month", + "2022-04-20T17:07:01.561Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"attributes\":{\"org_name\":\"RQ Dummy Tests\",\"public_id\":\"fasjyydbcgwwc2uc\",\"total_cost\":73.17,\"charges\":[{\"charge_type\":\"committed\",\"cost\":0,\"product_name\":\"infra_host\"},{\"charge_type\":\"on_demand\",\"cost\":72,\"product_name\":\"synthetics_api_tests\"},{\"charge_type\":\"committed\",\"cost\":1.17,\"product_name\":\"infra_host\"}],\"date\":\"2022-04-25T17:00:00+00:00\"},\"type\":\"cost_by_org\",\"id\":\"5d1702ab10f060719ae5aa1fd7ba09e3d7e0fb371b8319051c616a1fcad254e9\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get estimated cost across multi-org account with month returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-11-21T21:58:43.871Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/historical_cost", + "query": [ + [ + "start_month", + "2022-09-21T21:58:43.871Z" + ], + [ + "view", + "sub-org" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get historical cost across your account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-07-19T14:57:41.335Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/hourly_usage", + "query": [ + [ + "filter[product_families]", + "infra_hosts" + ], + [ + "filter[timestamp][end]", + "2022-07-14T14:57:41.335Z" + ], + [ + "filter[timestamp][start]", + "2022-07-16T14:57:41.335Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage by product family returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-07-19T14:57:41.821Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/hourly_usage", + "query": [ + [ + "filter[product_families]", + "infra_hosts" + ], + [ + "filter[timestamp][start]", + "2022-07-16T14:57:41.821Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T14:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"c2d81d3ab0e2330402ba194f525ac02b0e561dbaf1e30fdc9d900551ca104e6c\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T15:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"aab388e6fa569317272aec7a7b8769bf6400c8b3e3163e34c5ba8fc8b1ea962c\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T16:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"a7480a9641c6bb5609a623c24f9be58f6bd0e0f8b39c23813be2e5e9f37465df\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T17:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"3ece398146b5e6863932aaabb340a35dc3f678a10b8731dd1aa6cefb01a05a50\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T18:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"db5610645e040ceb1e34726488331e256688b629700b0fab78c62ed4e681232e\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T19:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"317972994b0ef9e9c7b003ab0f1a28db970c738229bc8eb99b5f40863bd31ae7\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T20:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"7b4af48ad0743367a787bff94d6fb23dc4f6bd1721846b656aefcaa0c97094af\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T21:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"a26d4f98ebefc52c3e3ff41947df05bf792c12fff32a450c208b8a5579ea636c\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T22:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"284445d0d64b997e3a799f9a9c0b37a75979f17da92d3b87c102b334ff2e8c55\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-16T23:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"27cd01fcc3390288a50d1e9bd56fdf2e65db299ff59fd167eae5dcc6afefacbe\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T00:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"31c2b4d1ad3e227ee84c29aca58c3a82fa29d334434d9192c7c488ab125a831c\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T01:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"773dd70bab3e291c460d1263d4b8f2fed2f649b5c31227acd34819b6b8fa93cf\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T02:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"adda5d505c6d83890ca97ecdfd9d0dab915da014b4b87abd43a909c3453cb60d\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T03:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"d7b5724fb49109e31700bf34aa6527e0a097359f3917288c351617d5042e6930\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T04:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"826bc80a5789a931a674eecf3491b3aea9cf11a01749f57ae45496c7bede96a7\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T05:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"b8f4c50da05e3413a2618ec30ae193482b28ef2eb318541de68751ad32f267d0\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T06:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"bc403917f58538e7cc57934de186bb0975e1667780030e77464c46bcc07a108e\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T07:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"15aff389986ebee357e66194ba015afcf4ce87f262e0cbe635fda457abf36bbb\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T08:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"a92fa8990a961de5fbc1813a004587fc01eba595bd382d75b85fe88e63bafea6\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T09:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"a8c6b8633bb710eb4eff1bdb6046354635b9bb1e99c3de3fd2f4efab6a5c177f\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T10:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"6623ba9e88fb7491794d262f121dec195afb88ac8a85653805c8dff1b604da1c\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T11:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"b690150b84610dbc7a4fd2c37da96e69bc43ce8ce7ee51af7d47c32054c6df44\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T12:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"a03a5f4b9967b962f1de6cc80b696e3a1562ff733834b8cec6540f9cb884236b\"},{\"attributes\":{\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"timestamp\":\"2022-07-17T13:00:00+00:00\",\"region\":\"us\",\"measurements\":[{\"usage_type\":\"agent_host_count\",\"value\":14},{\"usage_type\":\"alibaba_host_count\",\"value\":0},{\"usage_type\":\"apm_azure_app_service_host_count\",\"value\":0},{\"usage_type\":\"apm_host_count\",\"value\":4},{\"usage_type\":\"aws_host_count\",\"value\":0},{\"usage_type\":\"azure_host_count\",\"value\":0},{\"usage_type\":\"container_count\",\"value\":null},{\"usage_type\":\"gcp_host_count\",\"value\":0},{\"usage_type\":\"heroku_host_count\",\"value\":0},{\"usage_type\":\"host_count\",\"value\":14},{\"usage_type\":\"infra_azure_app_service\",\"value\":0},{\"usage_type\":\"opentelemetry_host_count\",\"value\":0},{\"usage_type\":\"vsphere_host_count\",\"value\":0}],\"product_family\":\"infra_hosts\"},\"type\":\"usage_timeseries\",\"id\":\"07e22e70cfb7efe81ffdd0265cdea8417b0fbf4d9e8cb9f862bbff581fe7e5ac\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage by product family returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-05-02T16:40:49.302Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/application_security", + "query": [ + [ + "end_hr", + "2022-04-27T16:40:49.302Z" + ], + [ + "start_hr", + "2022-04-29T16:40:49.302Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Application Security returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2024-01-24T20:56:23.911Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/lambda_traced_invocations", + "query": [ + [ + "end_hr", + "2024-01-19T20:56:23.911Z" + ], + [ + "start_hr", + "2024-01-21T20:56:23.911Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Lambda traced invocations returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2024-01-24T20:54:39.781Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/lambda_traced_invocations", + "query": [ + [ + "end_hr", + "2024-01-21T20:54:39.781Z" + ], + [ + "start_hr", + "2024-01-19T20:54:39.781Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"41945ceef2349387d82c498d0d83cb88b2c57e90d273d9cfa0826d3cac2ecc45\",\"type\":\"usage_timeseries\",\"attributes\":{\"product_family\":\"lambda-traced-invocations\",\"usage_type\":\"lambda_traced_invocations_count\",\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"region\":\"us\",\"timeseries\":[{\"timestamp\":\"2024-01-19T20:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-19T21:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-19T22:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-19T23:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T00:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T01:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T02:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T03:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T04:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T05:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T06:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T07:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T08:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T09:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T10:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T11:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T12:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T13:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T14:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T15:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T16:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T17:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T18:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T19:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T20:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T21:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T22:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-20T23:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T00:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T01:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T02:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T03:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T04:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T05:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T06:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T07:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T08:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T09:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T10:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T11:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T12:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T13:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T14:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T15:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T16:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T17:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T18:00:00+00:00\",\"value\":null},{\"timestamp\":\"2024-01-21T19:00:00+00:00\",\"value\":null}]}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for Lambda traced invocations returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-04-20T18:23:39.831Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/observability_pipelines", + "query": [ + [ + "end_hr", + "2022-04-15T18:23:39.831Z" + ], + [ + "start_hr", + "2022-04-17T18:23:39.831Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"start_hr [YYYY-MM-DDThh] must be before end_hr [YYYY-MM-DDThh]\"]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get hourly usage for Observability Pipelines returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2023-10-16T15:16:50.772Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/application_security", + "query": [ + [ + "end_hr", + "2023-10-13T15:16:50.772Z" + ], + [ + "start_hr", + "2023-10-11T15:16:50.772Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"f9835e00af7d43da5fa029132bb2227473df0f5dc80bf2cc1eb51ddb372f47d5\",\"type\":\"usage_timeseries\",\"attributes\":{\"product_family\":\"app-sec\",\"usage_type\":\"app_sec_host_count\",\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"region\":\"us\",\"timeseries\":[{\"timestamp\":\"2023-10-11T15:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T16:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T17:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T18:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T19:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T20:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T21:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T22:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T23:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T00:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T01:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T02:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T03:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T04:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T05:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T06:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T07:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T08:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T09:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T10:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T11:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T12:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T13:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T14:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T15:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T16:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T17:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T18:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T19:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T20:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T21:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T22:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T23:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T00:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T01:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T02:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T03:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T04:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T05:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T06:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T07:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T08:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T09:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T10:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T11:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T12:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T13:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T14:00:00+00:00\",\"value\":null}]}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for application security returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2023-10-16T15:14:35.114Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/observability_pipelines", + "query": [ + [ + "end_hr", + "2023-10-13T15:14:35.114Z" + ], + [ + "start_hr", + "2023-10-11T15:14:35.114Z" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"b2fd311762e6a3cf23ce2e3dbd80e786a13193c6b28f01b296042c0e2f1264f9\",\"type\":\"usage_timeseries\",\"attributes\":{\"product_family\":\"observability-pipelines\",\"usage_type\":\"observability_pipelines_bytes_processed\",\"org_name\":\"DD Integration Tests (321813)\",\"public_id\":\"fasjyydbcgwwc2uc\",\"region\":\"us\",\"timeseries\":[{\"timestamp\":\"2023-10-11T15:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T16:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T17:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T18:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T19:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T20:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T21:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T22:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-11T23:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T00:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T01:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T02:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T03:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T04:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T05:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T06:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T07:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T08:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T09:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T10:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T11:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T12:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T13:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T14:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T15:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T16:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T17:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T18:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T19:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T20:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T21:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T22:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-12T23:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T00:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T01:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T02:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T03:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T04:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T05:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T06:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T07:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T08:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T09:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T10:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T11:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T12:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T13:00:00+00:00\",\"value\":null},{\"timestamp\":\"2023-10-13T14:00:00+00:00\",\"value\":null}]}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get hourly usage for observability pipelines returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2023-11-16T09:28:12.658Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/projected_cost", + "query": [ + [ + "view", + "sub-org" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"projected_cost\",\"id\":\"0e394fce15395fc02ab31e9968df0271e4b290e5647f44a56a47c91a03220f2d\",\"attributes\":{\"org_name\":\"Datadog \\u308c\\u304a \\ud83c\\udf7b\\u2600\\ufe0f\\ud83d\\ude0e\\ud83c\\udfd6\\ufe0f \\u30c7\\u30fc\\u30bf\\u30c9\\u30c3\\u30b0\",\"public_id\":\"yB5yjZ\",\"region\":\"us\",\"projected_total_cost\":270247170,\"date\":\"2023-11-30T00:00:00Z\",\"charges\":[{\"product_name\":\"apm_host\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"apm_host\",\"charge_type\":\"projected_on_demand\",\"cost\":3621671.999987},{\"product_name\":\"apm_host\",\"charge_type\":\"total\",\"cost\":3621671.999987},{\"product_name\":\"apm_trace_search\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"apm_trace_search\",\"charge_type\":\"projected_on_demand\",\"cost\":3478141.42732},{\"product_name\":\"apm_trace_search\",\"charge_type\":\"total\",\"cost\":3478141.42732},{\"product_name\":\"application_security_host\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"application_security_host\",\"charge_type\":\"projected_on_demand\",\"cost\":80748},{\"product_name\":\"application_security_host\",\"charge_type\":\"total\",\"cost\":80748},{\"product_name\":\"application_vulnerability_management_oss_host\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"application_vulnerability_management_oss_host\",\"charge_type\":\"projected_on_demand\",\"cost\":261075.000001},{\"product_name\":\"application_vulnerability_management_oss_host\",\"charge_type\":\"total\",\"cost\":261075.000001},{\"product_name\":\"audit_trail\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"audit_trail\",\"charge_type\":\"projected_on_demand\",\"cost\":7871276.838406},{\"product_name\":\"audit_trail\",\"charge_type\":\"total\",\"cost\":7871276.838406},{\"product_name\":\"ci_pipeline\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"ci_pipeline\",\"charge_type\":\"projected_on_demand\",\"cost\":30348},{\"product_name\":\"ci_pipeline\",\"charge_type\":\"total\",\"cost\":30348},{\"product_name\":\"ci_pipeline_indexed_spans\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"ci_pipeline_indexed_spans\",\"charge_type\":\"projected_on_demand\",\"cost\":0},{\"product_name\":\"ci_pipeline_indexed_spans\",\"charge_type\":\"total\",\"cost\":0},{\"product_name\":\"ci_test_indexed_spans\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"ci_test_indexed_spans\",\"charge_type\":\"projected_on_demand\",\"cost\":11280.06966},{\"product_name\":\"ci_test_indexed_spans\",\"charge_type\":\"total\",\"cost\":11280.06966},{\"product_name\":\"ci_testing\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"ci_testing\",\"charge_type\":\"projected_on_demand\",\"cost\":46458},{\"product_name\":\"ci_testing\",\"charge_type\":\"total\",\"cost\":46458},{\"product_name\":\"cloud_cost_management\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"cloud_cost_management\",\"charge_type\":\"projected_on_demand\",\"cost\":911206.8},{\"product_name\":\"cloud_cost_management\",\"charge_type\":\"total\",\"cost\":911206.8},{\"product_name\":\"cspm_container\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"cspm_container\",\"charge_type\":\"projected_on_demand\",\"cost\":975491.947438},{\"product_name\":\"cspm_container\",\"charge_type\":\"total\",\"cost\":975491.947438},{\"product_name\":\"cspm_host\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"cspm_host\",\"charge_type\":\"projected_on_demand\",\"cost\":939042.000004},{\"product_name\":\"cspm_host\",\"charge_type\":\"total\",\"cost\":939042.000004},{\"product_name\":\"custom_event\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"custom_event\",\"charge_type\":\"projected_on_demand\",\"cost\":0},{\"product_name\":\"custom_event\",\"charge_type\":\"total\",\"cost\":0},{\"product_name\":\"cws_container\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"cws_container\",\"charge_type\":\"projected_on_demand\",\"cost\":2046666.667701},{\"product_name\":\"cws_container\",\"charge_type\":\"total\",\"cost\":2046666.667701},{\"product_name\":\"cws_host\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"cws_host\",\"charge_type\":\"projected_on_demand\",\"cost\":1650114.000002},{\"product_name\":\"cws_host\",\"charge_type\":\"total\",\"cost\":1650114.000002},{\"product_name\":\"data_stream_monitoring\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"data_stream_monitoring\",\"charge_type\":\"projected_on_demand\",\"cost\":127476},{\"product_name\":\"data_stream_monitoring\",\"charge_type\":\"total\",\"cost\":127476},{\"product_name\":\"dbm_host\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"dbm_host\",\"charge_type\":\"projected_on_demand\",\"cost\":85680},{\"product_name\":\"dbm_host\",\"charge_type\":\"total\",\"cost\":85680},{\"product_name\":\"dbm_normalized_queries\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"dbm_normalized_queries\",\"charge_type\":\"projected_on_demand\",\"cost\":17961.482743},{\"product_name\":\"dbm_normalized_queries\",\"charge_type\":\"total\",\"cost\":17961.482743},{\"product_name\":\"fargate_container\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"fargate_container\",\"charge_type\":\"projected_on_demand\",\"cost\":12.6},{\"product_name\":\"fargate_container\",\"charge_type\":\"total\",\"cost\":12.6},{\"product_name\":\"infra_container_excl_agent\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"infra_container_excl_agent\",\"charge_type\":\"projected_on_demand\",\"cost\":983432.229551},{\"product_name\":\"infra_container_excl_agent\",\"charge_type\":\"total\",\"cost\":983432.229551},{\"product_name\":\"infra_host\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"infra_host\",\"charge_type\":\"projected_on_demand\",\"cost\":1948589.999991},{\"product_name\":\"infra_host\",\"charge_type\":\"total\",\"cost\":1948589.999991},{\"product_name\":\"ingested_spans\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"ingested_spans\",\"charge_type\":\"projected_on_demand\",\"cost\":763395.896172},{\"product_name\":\"ingested_spans\",\"charge_type\":\"total\",\"cost\":763395.896172},{\"product_name\":\"ingested_timeseries\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"ingested_timeseries\",\"charge_type\":\"projected_on_demand\",\"cost\":256290.95456},{\"product_name\":\"ingested_timeseries\",\"charge_type\":\"total\",\"cost\":256290.95456},{\"product_name\":\"iot\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"iot\",\"charge_type\":\"projected_on_demand\",\"cost\":86.4},{\"product_name\":\"iot\",\"charge_type\":\"total\",\"cost\":86.4},{\"product_name\":\"logs_forwarding\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_forwarding\",\"charge_type\":\"projected_on_demand\",\"cost\":34.75},{\"product_name\":\"logs_forwarding\",\"charge_type\":\"total\",\"cost\":34.75},{\"product_name\":\"logs_indexed_15day\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_indexed_15day\",\"charge_type\":\"projected_on_demand\",\"cost\":7970506.190932},{\"product_name\":\"logs_indexed_15day\",\"charge_type\":\"total\",\"cost\":7970506.190932},{\"product_name\":\"logs_indexed_180day\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_indexed_180day\",\"charge_type\":\"projected_on_demand\",\"cost\":2237.11},{\"product_name\":\"logs_indexed_180day\",\"charge_type\":\"total\",\"cost\":2237.11},{\"product_name\":\"logs_indexed_30day\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_indexed_30day\",\"charge_type\":\"projected_on_demand\",\"cost\":379727.51},{\"product_name\":\"logs_indexed_30day\",\"charge_type\":\"total\",\"cost\":379727.51},{\"product_name\":\"logs_indexed_3day\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_indexed_3day\",\"charge_type\":\"projected_on_demand\",\"cost\":1212.144311},{\"product_name\":\"logs_indexed_3day\",\"charge_type\":\"total\",\"cost\":1212.144311},{\"product_name\":\"logs_indexed_60day\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_indexed_60day\",\"charge_type\":\"projected_on_demand\",\"cost\":134101.664192},{\"product_name\":\"logs_indexed_60day\",\"charge_type\":\"total\",\"cost\":134101.664192},{\"product_name\":\"logs_indexed_7day\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_indexed_7day\",\"charge_type\":\"projected_on_demand\",\"cost\":278030.21},{\"product_name\":\"logs_indexed_7day\",\"charge_type\":\"total\",\"cost\":278030.21},{\"product_name\":\"logs_indexed_90day\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_indexed_90day\",\"charge_type\":\"projected_on_demand\",\"cost\":5078.064104},{\"product_name\":\"logs_indexed_90day\",\"charge_type\":\"total\",\"cost\":5078.064104},{\"product_name\":\"logs_indexed_custom_retention\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_indexed_custom_retention\",\"charge_type\":\"projected_on_demand\",\"cost\":1665269.902158},{\"product_name\":\"logs_indexed_custom_retention\",\"charge_type\":\"total\",\"cost\":1665269.902158},{\"product_name\":\"logs_ingested\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"logs_ingested\",\"charge_type\":\"projected_on_demand\",\"cost\":2023915.700005},{\"product_name\":\"logs_ingested\",\"charge_type\":\"total\",\"cost\":2023915.700005},{\"product_name\":\"network_device\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"network_device\",\"charge_type\":\"projected_on_demand\",\"cost\":153},{\"product_name\":\"network_device\",\"charge_type\":\"total\",\"cost\":153},{\"product_name\":\"npm_host\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"npm_host\",\"charge_type\":\"projected_on_demand\",\"cost\":668642.399999},{\"product_name\":\"npm_host\",\"charge_type\":\"total\",\"cost\":668642.399999},{\"product_name\":\"observability_pipeline\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"observability_pipeline\",\"charge_type\":\"projected_on_demand\",\"cost\":1.68},{\"product_name\":\"observability_pipeline\",\"charge_type\":\"total\",\"cost\":1.68},{\"product_name\":\"online_archive\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"online_archive\",\"charge_type\":\"projected_on_demand\",\"cost\":11650663.48518},{\"product_name\":\"online_archive\",\"charge_type\":\"total\",\"cost\":11650663.48518},{\"product_name\":\"prof_container\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"prof_container\",\"charge_type\":\"projected_on_demand\",\"cost\":0},{\"product_name\":\"prof_container\",\"charge_type\":\"total\",\"cost\":0},{\"product_name\":\"prof_host\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"prof_host\",\"charge_type\":\"projected_on_demand\",\"cost\":2064365.000008},{\"product_name\":\"prof_host\",\"charge_type\":\"total\",\"cost\":2064365.000008},{\"product_name\":\"rum_lite\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"rum_lite\",\"charge_type\":\"projected_on_demand\",\"cost\":1945.666125},{\"product_name\":\"rum_lite\",\"charge_type\":\"total\",\"cost\":1945.666125},{\"product_name\":\"rum_replay\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"rum_replay\",\"charge_type\":\"projected_on_demand\",\"cost\":47975.876199},{\"product_name\":\"rum_replay\",\"charge_type\":\"total\",\"cost\":47975.876199},{\"product_name\":\"sensitive_data_scanner\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"sensitive_data_scanner\",\"charge_type\":\"projected_on_demand\",\"cost\":19394406.000091},{\"product_name\":\"sensitive_data_scanner\",\"charge_type\":\"total\",\"cost\":19394406.000091},{\"product_name\":\"serverless_apm\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"serverless_apm\",\"charge_type\":\"projected_on_demand\",\"cost\":565.638894},{\"product_name\":\"serverless_apm\",\"charge_type\":\"total\",\"cost\":565.638894},{\"product_name\":\"serverless_infra\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"serverless_infra\",\"charge_type\":\"projected_on_demand\",\"cost\":1656},{\"product_name\":\"serverless_infra\",\"charge_type\":\"total\",\"cost\":1656},{\"product_name\":\"siem\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"siem\",\"charge_type\":\"projected_on_demand\",\"cost\":6063219.000025},{\"product_name\":\"siem\",\"charge_type\":\"total\",\"cost\":6063219.000025},{\"product_name\":\"synthetics_api_tests\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"synthetics_api_tests\",\"charge_type\":\"projected_on_demand\",\"cost\":2165315.836614},{\"product_name\":\"synthetics_api_tests\",\"charge_type\":\"total\",\"cost\":2165315.836614},{\"product_name\":\"synthetics_browser_checks\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"synthetics_browser_checks\",\"charge_type\":\"projected_on_demand\",\"cost\":700419.437998},{\"product_name\":\"synthetics_browser_checks\",\"charge_type\":\"total\",\"cost\":700419.437998},{\"product_name\":\"timeseries\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"timeseries\",\"charge_type\":\"projected_on_demand\",\"cost\":188889904.951552},{\"product_name\":\"timeseries\",\"charge_type\":\"total\",\"cost\":188889904.951552},{\"product_name\":\"usm_only_no_charge\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"usm_only_no_charge\",\"charge_type\":\"projected_on_demand\",\"cost\":0},{\"product_name\":\"usm_only_no_charge\",\"charge_type\":\"total\",\"cost\":0},{\"product_name\":\"workflow_execution\",\"charge_type\":\"projected_committed\",\"cost\":0},{\"product_name\":\"workflow_execution\",\"charge_type\":\"projected_on_demand\",\"cost\":31377.92},{\"product_name\":\"workflow_execution\",\"charge_type\":\"total\",\"cost\":31377.92}]}}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get projected cost across your account returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-11-03T21:08:41.229Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/estimated_cost", + "query": [ + [ + "start_date", + "2022-10-31T21:08:41.229Z" + ], + [ + "start_month", + "2022-11-03T21:08:41.229Z" + ], + [ + "view", + "sub-org" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"API called with non-parent org keys. Data is only available at the root level org\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "GetEstimatedCostByOrg with both start_month and start_date returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-07-29T14:22:55.359Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/estimated_cost", + "query": [ + [ + "start_date", + "2022-07-24T14:22:55.359Z" + ], + [ + "view", + "sub-org" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "GetEstimatedCostByOrg with start_date returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Usage Metering", + "frozen_at": "2022-11-04T18:40:14.021Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/usage/estimated_cost", + "query": [ + [ + "start_month", + "2022-11-04T18:40:14.021Z" + ], + [ + "view", + "sub-org" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "GetEstimatedCostByOrg with start_month returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/users.json b/test-server-data/v2/users.json new file mode 100644 index 0000000000..6ca154ef54 --- /dev/null +++ b/test-server-data/v2/users.json @@ -0,0 +1,919 @@ +{ + "feature": "Users", + "recordings": [ + { + "feature": "Users", + "frozen_at": "2022-05-12T09:53:35.375Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Create_a_user_returns_OK_response-1652349215@datadoghq.com", + "name": "Datadog API Client Python" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"6409ce70-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"Datadog API Client Python\",\"handle\":\"test-create_a_user_returns_ok_response-1652349215@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:35.809381+00:00\",\"modified_at\":\"2022-05-12T09:53:35.827707+00:00\",\"email\":\"test-create_a_user_returns_ok_response-1652349215@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/ae2bdc16fa2261f6d4aec640077b332f?s=48&d=retro\",\"title\":null,\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/6409ce70-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2022-05-12T09:53:36.356Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Disable_a_user_returns_OK_response-1652349216@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"649b7e06-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-disable_a_user_returns_ok_response-1652349216@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:36.764381+00:00\",\"modified_at\":\"2022-05-12T09:53:36.851751+00:00\",\"email\":\"test-disable_a_user_returns_ok_response-1652349216@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/0be9a183f9c8c81ab435f271e21830c2?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/649b7e06-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/649b7e06-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"649b7e06-d1d9-11ec-ad3d-da7ad0900002 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Disable a user returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2022-05-12T09:53:37.841Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_a_user_invitation_returns_OK_response-1652349217@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"657f03d8-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-get_a_user_invitation_returns_ok_response-1652349217@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:38.255148+00:00\",\"modified_at\":\"2022-05-12T09:53:38.307302+00:00\",\"email\":\"test-get_a_user_invitation_returns_ok_response-1652349217@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/dab87213dd8f46847259f2c1bccca22f?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "relationships": { + "user": { + "data": { + "id": "657f03d8-d1d9-11ec-ad3d-da7ad0900002", + "type": "users" + } + } + }, + "type": "user_invitations" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/user_invitations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"user_invitations\",\"id\":\"65ef03ae-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"uuid\":\"65ef03ae-d1d9-11ec-ad3d-da7ad0900002\",\"login_method\":null,\"invite_type\":\"openid_invite\",\"created_at\":\"2022-05-12T09:53:38.990217+00:00\",\"expires_at\":\"2022-05-14T09:53:38.846030+00:00\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"657f03d8-d1d9-11ec-ad3d-da7ad0900002\"}}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/user_invitations/65ef03ae-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"user_invitations\",\"id\":\"65ef03ae-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"uuid\":\"65ef03ae-d1d9-11ec-ad3d-da7ad0900002\",\"login_method\":null,\"invite_type\":\"openid_invite\",\"created_at\":\"2022-05-12T09:53:38.990217+00:00\",\"expires_at\":\"2022-05-14T09:53:38.846030+00:00\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"657f03d8-d1d9-11ec-ad3d-da7ad0900002\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/657f03d8-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a user invitation returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2022-05-12T09:53:40.018Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_a_user_permissions_returns_OK_response-1652349220@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"66d13aa8-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-get_a_user_permissions_returns_ok_response-1652349220@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:40.471329+00:00\",\"modified_at\":\"2022-05-12T09:53:40.525782+00:00\",\"email\":\"test-get_a_user_permissions_returns_ok_response-1652349220@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/5988cbe0d6d2d298191b4d964ddf15e2?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/users/66d13aa8-d1d9-11ec-ad3d-da7ad0900002/permissions", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/66d13aa8-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get a user permissions returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2023-10-16T14:46:45.032Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Get_user_details_returns_OK_response-1697467605@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"d3edd11c-6c32-11ee-9c79-aaef51702d10\",\"attributes\":{\"name\":null,\"handle\":\"test-get_user_details_returns_ok_response-1697467605@datadoghq.com\",\"created_at\":\"2023-10-16T14:46:45.480711+00:00\",\"modified_at\":\"2023-10-16T14:46:45.480711+00:00\",\"email\":\"test-get_user_details_returns_ok_response-1697467605@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/64901293a45aa6f5fa32d0fa57decdb2?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/users/d3edd11c-6c32-11ee-9c79-aaef51702d10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"d3edd11c-6c32-11ee-9c79-aaef51702d10\",\"attributes\":{\"name\":null,\"handle\":\"test-get_user_details_returns_ok_response-1697467605@datadoghq.com\",\"created_at\":\"2023-10-16T14:46:45.480711+00:00\",\"modified_at\":\"2023-10-16T14:46:45.480711+00:00\",\"email\":\"test-get_user_details_returns_ok_response-1697467605@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/64901293a45aa6f5fa32d0fa57decdb2?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/d3edd11c-6c32-11ee-9c79-aaef51702d10", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get user details returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2022-05-12T09:53:42.881Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-List_all_users_returns_OK_response-1652349222@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"688172d2-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-list_all_users_returns_ok_response-1652349222@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:43.305109+00:00\",\"modified_at\":\"2022-05-12T09:53:43.351606+00:00\",\"email\":\"test-list_all_users_returns_ok_response-1652349222@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b120ea663af2577e015c19831dd91cd6?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/users", + "query": [ + [ + "filter", + "test-list_all_users_returns_ok_response-1652349222@datadoghq.com" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"meta\":{\"page\":{\"total_filtered_count\":1,\"total_count\":57061}},\"data\":[{\"type\":\"users\",\"id\":\"688172d2-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-list_all_users_returns_ok_response-1652349222@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:43.305109+00:00\",\"modified_at\":\"2022-05-12T09:53:43.351606+00:00\",\"email\":\"test-list_all_users_returns_ok_response-1652349222@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/b120ea663af2577e015c19831dd91cd6?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/688172d2-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List all users returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2023-09-05T13:14:24.601Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/users", + "query": [ + [ + "page[number]", + "0" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"users\",\"id\":\"f0182270-a635-11ed-af86-0ec0bd96ac3b\",\"attributes\":{\"name\":\"Alan\",\"handle\":\"alan@datadoghq.com\",\"created_at\":\"2023-02-06T15:50:10.995740+00:00\",\"modified_at\":\"2023-02-06T15:51:59.847148+00:00\",\"email\":\"alan@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/c4b2f071a7e83e98302afbc9889cfc18?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"94172442-be03-11e9-a77a-3b7612558ac1\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}},{\"type\":\"users\",\"id\":\"af29975c-059c-11ea-a77c-c3d911d2ed55\",\"attributes\":{\"name\":\"Bob\",\"handle\":\"bob@datadoghq.com\",\"created_at\":\"2019-11-12T22:35:09.997764+00:00\",\"modified_at\":\"2019-11-12T22:35:27.629304+00:00\",\"email\":\"andrew.mcburney@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/9f33d217ff6f6bc97b7e0b8b9828554d?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"94172442-be03-11e9-a77a-3b7612558ac1\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}],\"included\":[{\"type\":\"roles\",\"id\":\"94172442-be03-11e9-a77a-3b7612558ac1\",\"attributes\":{\"name\":\"Datadog Admin Role\",\"created_at\":\"2019-08-13T19:50:19.022791+00:00\",\"modified_at\":\"2019-08-13T19:50:19.022791+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\"},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\"},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\"},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\"},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\"},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\"},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\"},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\"},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\"},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\"},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\"},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\"},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\"},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\"},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\"},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\"},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\"},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\"},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\"},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\"},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\"},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\"},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\"},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\"},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\"},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\"},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\"},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\"},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\"},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\"},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\"},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\"},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\"},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\"},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\"},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\"},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\"},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\"},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\"},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\"},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\"},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\"},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\"},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\"},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\"},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\"},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\"},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\"},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\"},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\"},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\"},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\"}]}}},{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"View and edit components in your Datadog organization that do not have explicitly defined permissions.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards or embeddable graphs externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit, mute, and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Manage Downtimes\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute hosts. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Locations Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Locations Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical Views\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create and rename API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filters Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filters Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Dynamic Instrumentation Write Configuration\",\"description\":\"Edit Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Dynamic Instrumentation Read Configuration\",\"description\":\"View Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace, and enabling & disabling Remote Configuration for the entire organization.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incidents Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incident Settings Read\",\"description\":\"View Incident Settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incident Settings Write\",\"description\":\"Configure Incident Settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Management Event Rules Read\",\"description\":\"View Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Management Event Rules Write\",\"description\":\"Edit Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_read\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.074031+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_write\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.077905+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Configurations Read\",\"description\":\"View pipeline configurations.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Configurations Write\",\"description\":\"Create, edit, and delete pipeline configurations.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_read\",\"display_name\":\"Workflows Read\",\"description\":\"View workflows.\",\"created\":\"2022-02-03T15:07:12.058412+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_write\",\"display_name\":\"Workflows Write\",\"description\":\"Create, edit, and delete workflows.\",\"created\":\"2022-02-03T15:07:12.061765+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_run\",\"display_name\":\"Workflows Run\",\"description\":\"Run workflows.\",\"created\":\"2022-02-03T15:07:12.060079+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_read\",\"display_name\":\"Connections Read\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"created\":\"2022-02-03T15:07:12.053432+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_write\",\"display_name\":\"Connections Write\",\"description\":\"Create and delete connections.\",\"created\":\"2022-02-03T15:07:12.056590+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"attributes\":{\"name\":\"logs_delete_data\",\"display_name\":\"Logs Delete Data\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"created\":\"2022-02-25T18:51:06.176019+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"attributes\":{\"name\":\"manage_integrations\",\"display_name\":\"Integrations Manage\",\"description\":\"Install, uninstall, and configure integrations.\",\"created\":\"2022-04-26T20:21:40.285834+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"attributes\":{\"name\":\"monitor_config_policy_write\",\"display_name\":\"Monitor Configuration Policy Write\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"created\":\"2022-06-23T16:26:48.150556+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"attributes\":{\"name\":\"logs_write_forwarding_rules\",\"display_name\":\"Logs Write Forwarding Rules\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"created\":\"2022-08-08T21:30:42.723663+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"Deprecated. View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"attributes\":{\"name\":\"connections_resolve\",\"display_name\":\"Connections Resolve\",\"description\":\"Resolve connections.\",\"created\":\"2022-08-25T15:25:56.325170+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_read\",\"display_name\":\"Application Security Management Protect Read\",\"description\":\"View blocked attackers.\",\"created\":\"2022-10-27T09:25:33.834253+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_write\",\"display_name\":\"Application Security Management Protect Write\",\"description\":\"Manage blocked attackers.\",\"created\":\"2022-10-27T09:25:33.843656+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_read\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.827076+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_write\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.831383+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"attributes\":{\"name\":\"cases_read\",\"display_name\":\"Cases Read\",\"description\":\"View Cases.\",\"created\":\"2022-12-12T18:40:54.018521+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"attributes\":{\"name\":\"cases_write\",\"display_name\":\"Cases Write\",\"description\":\"Create and update cases.\",\"created\":\"2022-12-12T18:40:54.023280+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_write\",\"display_name\":\"APM Remote Configuration Write\",\"description\":\"Edit APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.450768+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_read\",\"display_name\":\"APM Remote Configuration Read\",\"description\":\"View APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.446298+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_write\",\"display_name\":\"CI Visibility Tests Write\",\"description\":\"Edit flaky tests and delete Test Services.\",\"created\":\"2022-12-13T16:01:37.157428+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"attributes\":{\"name\":\"ci_provider_settings_write\",\"display_name\":\"CI Provider Settings Write\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"created\":\"2022-12-13T16:01:37.141217+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_settings_write\",\"display_name\":\"CI Visibility Settings Write\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"created\":\"2022-12-13T16:01:37.153418+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_activation_write\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"description\":\"Enable or disable Intelligent Test Runner.\",\"created\":\"2022-12-13T16:01:37.163771+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_settings_write\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"description\":\"Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"created\":\"2022-12-13T16:01:37.169430+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"attributes\":{\"name\":\"continuous_profiler_read\",\"display_name\":\"Continuous Profiler Read\",\"description\":\"View data in Continuous Profiler.\",\"created\":\"2022-12-16T16:50:32.545882+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"attributes\":{\"name\":\"teams_manage\",\"display_name\":\"Teams Manage\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"created\":\"2023-01-18T20:45:59.977837+00:00\",\"group_name\":\"Teams\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_read\",\"display_name\":\"Security Monitoring Findings Read\",\"description\":\"View CSPM Findings.\",\"created\":\"2023-02-24T14:30:30.983679+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_read\",\"display_name\":\"Incident Notification Settings Read\",\"description\":\"View Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_write\",\"display_name\":\"Incident Notification Settings Write\",\"description\":\"Configure Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"attributes\":{\"name\":\"ci_ingestion_control_write\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"created\":\"2023-03-24T10:25:33.934187+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_write\",\"display_name\":\"Error Tracking Write\",\"description\":\"Edit Error Tracking settings.\",\"created\":\"2023-03-27T16:55:44.263627+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_alerts_write\",\"display_name\":\"Watchdog Alerts Write\",\"description\":\"Manage Watchdog Alerts.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"attributes\":{\"name\":\"saved_views_write\",\"display_name\":\"Saved Views Write\",\"description\":\"Modify Saved Views across all Datadog products.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_read\",\"display_name\":\"Client Tokens Read\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_write\",\"display_name\":\"Client Tokens Write\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_read\",\"display_name\":\"Event Correlation Config Read\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_write\",\"display_name\":\"Event Correlation Config Write\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"attributes\":{\"name\":\"event_config_write\",\"display_name\":\"Event Config Write\",\"description\":\"Manage general event configuration such as API Emails.\",\"created\":\"2023-05-20T01:20:31.639587+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_write\",\"display_name\":\"Security Monitoring Findings Write\",\"description\":\"Mute CSPM Findings.\",\"created\":\"2023-05-23T22:50:34.532448+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_read\",\"display_name\":\"Cloud Cost Management Read\",\"description\":\"View Cloud Cost pages. This does not restrict access to the cloud cost data source in dashboards and notebooks.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_write\",\"display_name\":\"Cloud Cost Management Write\",\"description\":\"Configure cloud cost accounts and global customizations.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"attributes\":{\"name\":\"host_tags_write\",\"display_name\":\"Host Tags Write\",\"description\":\"Add and change tags on hosts.\",\"created\":\"2023-05-31T05:26:07.469293+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_pipelines_write\",\"display_name\":\"CI Visibility Pipelines Write\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"created\":\"2023-06-01T11:35:17.513706+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_read\",\"display_name\":\"Quality Gate Rules Read\",\"description\":\"View Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_write\",\"display_name\":\"Quality Gate Rules Write\",\"description\":\"Edit Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"attributes\":{\"name\":\"metrics_metadata_write\",\"display_name\":\"Metrics Metadata Write\",\"description\":\"Edit metadata on metrics.\",\"created\":\"2023-06-23T17:31:34.182629+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"attributes\":{\"name\":\"rum_delete_data\",\"display_name\":\"RUM Delete Data\",\"description\":\"Delete data from RUM.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_write\",\"display_name\":\"Application Security Vulnerability Management Write\",\"description\":\"Update status or assignee of Application Security vulnerabilities.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"attributes\":{\"name\":\"reference_tables_write\",\"display_name\":\"Reference Tables Write\",\"description\":\"Create or modify Reference Tables.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Reference Tables\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"attributes\":{\"name\":\"rum_playlist_write\",\"display_name\":\"RUM Playlist Write\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"created\":\"2023-07-07T17:31:08.450865+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_delete\",\"display_name\":\"Pipeline Delete\",\"description\":\"Delete pipelines from your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_deploy\",\"display_name\":\"Pipeline Deploy\",\"description\":\"Deploy pipelines in your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"attributes\":{\"name\":\"processes_generate_metrics\",\"display_name\":\"Processes Generate Metrics\",\"description\":\"Create custom metrics from processes.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"Processes\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"attributes\":{\"name\":\"api_keys_delete\",\"display_name\":\"API Keys Delete\",\"description\":\"Delete API Keys for your organization.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"attributes\":{\"name\":\"facets_write\",\"display_name\":\"Facets Write\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"created\":\"2023-07-27T17:36:24.369352+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}}],\"meta\":{\"page\":{\"total_count\":203828,\"total_filtered_count\":203828}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/users", + "query": [ + [ + "page[number]", + "1" + ], + [ + "page[size]", + "2" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"users\",\"id\":\"6fa267f4-b920-11ed-8865-d223eeb75e45\",\"attributes\":{\"name\":\"Alice\",\"handle\":\"alice@datadoghq.com\",\"created_at\":\"2023-03-02T17:34:08.137773+00:00\",\"modified_at\":\"2023-03-02T17:42:47.069690+00:00\",\"email\":\"alice@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/0d54f0d2f91bb10cfb83ff85f8602928?s=48&d=retro\",\"title\":null,\"verified\":true,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Active\"},\"relationships\":{\"roles\":{\"data\":[{\"type\":\"roles\",\"id\":\"94172443-be03-11e9-a77a-373332f69711\"}]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}],\"included\":[{\"type\":\"roles\",\"id\":\"94172443-be03-11e9-a77a-373332f69711\",\"attributes\":{\"name\":\"Datadog Standard Role\",\"created_at\":\"2019-08-13T19:50:19.075284+00:00\",\"modified_at\":\"2019-08-13T19:50:19.075284+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\"},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\"},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\"},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\"},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\"},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\"},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\"},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\"},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\"},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\"},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\"},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\"},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\"},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\"},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\"},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\"},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\"},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\"},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\"},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\"},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\"},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\"},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\"},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\"},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\"},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\"},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\"},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\"},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\"},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\"},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\"},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\"},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\"},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\"},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\"},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\"}]}}},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\",\"attributes\":{\"name\":\"standard\",\"display_name\":\"Standard Access\",\"description\":\"View and edit components in your Datadog organization that do not have explicitly defined permissions.\",\"created\":\"2018-10-19T15:35:23.756736+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\",\"attributes\":{\"name\":\"logs_read_index_data\",\"display_name\":\"Logs Read Index Data\",\"description\":\"Read log data, possibly scoped to one or more indexes. In order to read log data, a user must have both this permission and Logs Read Data. This permission can be granted in a limited capacity per index from the Logs interface or APIs. If granted via the Roles interface or API the permission has global scope. Restrictions are limited to the Log Management product.\",\"created\":\"2018-10-31T13:39:19.727450+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\",\"attributes\":{\"name\":\"logs_modify_indexes\",\"display_name\":\"Logs Modify Indexes\",\"description\":\"Read and modify all indexes in your account. This includes the ability to grant the Logs Read Index Data and Logs Write Exclusion Filters permission to other roles, for some or all indexes.\",\"created\":\"2018-10-31T13:39:27.148615+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\",\"attributes\":{\"name\":\"logs_live_tail\",\"display_name\":\"Logs Live Tail\",\"description\":\"View the live tail feed for all log indexes, even if otherwise specifically restricted.\",\"created\":\"2018-10-31T13:39:48.292879+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\",\"attributes\":{\"name\":\"logs_write_exclusion_filters\",\"display_name\":\"Logs Write Exclusion Filters\",\"description\":\"Add and change exclusion filters for all or some log indexes. Can be granted in a limited capacity per index to specific roles via the Logs interface or API. If granted from the Roles interface or API, the permission has global scope.\",\"created\":\"2018-10-31T13:40:11.926613+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\",\"attributes\":{\"name\":\"logs_write_pipelines\",\"display_name\":\"Logs Write Pipelines\",\"description\":\"Add and change log pipeline configurations, including the ability to grant the Logs Write Processors permission to other roles, for some or all pipelines.\",\"created\":\"2018-10-31T13:40:17.996379+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\",\"attributes\":{\"name\":\"logs_write_processors\",\"display_name\":\"Logs Write Processors\",\"description\":\"Add and change some or all log processor configurations. Can be granted in a limited capacity per pipeline to specific roles via the Logs interface or API. If granted via the Roles interface or API the permission has global scope.\",\"created\":\"2018-10-31T13:40:23.969725+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\",\"attributes\":{\"name\":\"logs_generate_metrics\",\"display_name\":\"Logs Generate Metrics\",\"description\":\"Create custom metrics from logs.\",\"created\":\"2019-07-25T12:27:39.640758+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\",\"attributes\":{\"name\":\"dashboards_read\",\"display_name\":\"Dashboards Read\",\"description\":\"View dashboards.\",\"created\":\"2019-09-10T14:39:51.955175+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\",\"attributes\":{\"name\":\"dashboards_write\",\"display_name\":\"Dashboards Write\",\"description\":\"Create and change dashboards.\",\"created\":\"2019-09-10T14:39:51.962944+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\",\"attributes\":{\"name\":\"dashboards_public_share\",\"display_name\":\"Dashboards Public Share\",\"description\":\"Generate public and authenticated links to share dashboards or embeddable graphs externally.\",\"created\":\"2019-09-10T14:39:51.967094+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\",\"attributes\":{\"name\":\"monitors_read\",\"display_name\":\"Monitors Read\",\"description\":\"View monitors.\",\"created\":\"2019-09-16T18:39:07.744297+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\",\"attributes\":{\"name\":\"monitors_write\",\"display_name\":\"Monitors Write\",\"description\":\"Edit, mute, and delete individual monitors.\",\"created\":\"2019-09-16T18:39:15.597109+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\",\"attributes\":{\"name\":\"monitors_downtime\",\"display_name\":\"Manage Downtimes\",\"description\":\"Set downtimes to suppress alerts from any monitor in an organization. Mute and unmute hosts. The ability to write monitors is not required to set downtimes.\",\"created\":\"2019-09-16T18:39:23.306702+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\",\"attributes\":{\"name\":\"logs_read_data\",\"display_name\":\"Logs Read Data\",\"description\":\"Read log data. In order to read log data, a user must have both this permission and Logs Read Index Data. This permission can be restricted with restriction queries. Restrictions are limited to the Log Management product.\",\"created\":\"2020-04-06T16:24:35.989108+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\",\"attributes\":{\"name\":\"logs_read_archives\",\"display_name\":\"Logs Read Archives\",\"description\":\"Read Log Archives location and use it for rehydration.\",\"created\":\"2020-04-23T07:40:27.966133+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\",\"attributes\":{\"name\":\"security_monitoring_rules_read\",\"display_name\":\"Security Rules Read\",\"description\":\"Read Detection Rules.\",\"created\":\"2020-06-09T13:52:25.279909+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\",\"attributes\":{\"name\":\"security_monitoring_rules_write\",\"display_name\":\"Security Rules Write\",\"description\":\"Create and edit Detection Rules.\",\"created\":\"2020-06-09T13:52:39.099413+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\",\"attributes\":{\"name\":\"security_monitoring_signals_read\",\"display_name\":\"Security Signals Read\",\"description\":\"View Security Signals.\",\"created\":\"2020-06-09T13:52:48.410398+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_signals_write\",\"display_name\":\"Security Signals Write\",\"description\":\"Modify Security Signals.\",\"created\":\"2021-08-17T15:11:06.963503+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\",\"attributes\":{\"name\":\"user_access_invite\",\"display_name\":\"User Access Invite\",\"description\":\"Invite other users to your organization.\",\"created\":\"2020-08-25T19:17:23.539701+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\",\"attributes\":{\"name\":\"user_app_keys\",\"display_name\":\"User App Keys\",\"description\":\"View and manage Application Keys owned by the user.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\",\"attributes\":{\"name\":\"org_app_keys_read\",\"display_name\":\"Org App Keys Read\",\"description\":\"View Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\",\"attributes\":{\"name\":\"synthetics_private_location_read\",\"display_name\":\"Synthetics Private Locations Read\",\"description\":\"View, search, and use Synthetics private locations.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\",\"attributes\":{\"name\":\"metric_tags_write\",\"display_name\":\"Metric Tags Write\",\"description\":\"Edit and save tag configurations for custom metrics.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\",\"attributes\":{\"name\":\"logs_write_historical_view\",\"display_name\":\"Logs Write Historical Views\",\"description\":\"Rehydrate logs from Archives.\",\"created\":\"2020-09-16T08:38:44.242076+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\",\"attributes\":{\"name\":\"api_keys_read\",\"display_name\":\"API Keys Read\",\"description\":\"List and retrieve the key values of all API Keys in your organization.\",\"created\":\"2020-09-17T20:20:23.279769+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\",\"attributes\":{\"name\":\"synthetics_global_variable_read\",\"display_name\":\"Synthetics Global Variable Read\",\"description\":\"View, search, and use Synthetics global variables.\",\"created\":\"2020-09-17T20:20:48.446916+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\",\"attributes\":{\"name\":\"synthetics_global_variable_write\",\"display_name\":\"Synthetics Global Variable Write\",\"description\":\"Create, edit, and delete global variables for Synthetics.\",\"created\":\"2020-09-17T20:20:56.322003+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\",\"attributes\":{\"name\":\"synthetics_read\",\"display_name\":\"Synthetics Read\",\"description\":\"List and view configured Synthetic tests and test results.\",\"created\":\"2020-09-17T20:21:05.205361+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\",\"attributes\":{\"name\":\"synthetics_write\",\"display_name\":\"Synthetics Write\",\"description\":\"Create, edit, and delete Synthetic tests.\",\"created\":\"2020-09-17T20:21:14.949140+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\",\"attributes\":{\"name\":\"synthetics_default_settings_read\",\"display_name\":\"Synthetics Default Settings Read\",\"description\":\"View the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:25.794160+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\",\"attributes\":{\"name\":\"synthetics_default_settings_write\",\"display_name\":\"Synthetics Default Settings Write\",\"description\":\"Edit the default settings for Synthetic Monitoring.\",\"created\":\"2020-09-17T20:21:38.818771+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\",\"attributes\":{\"name\":\"logs_write_facets\",\"display_name\":\"Logs Write Facets\",\"description\":\"Create or edit Log Facets.\",\"created\":\"2020-10-14T12:40:20.271908+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\",\"attributes\":{\"name\":\"integrations_api\",\"display_name\":\"Integrations API\",\"description\":\"Deprecated. Use the Integrations APIs to configure integrations. In order to configure integrations from the UI, a user must also have Standard Access.\",\"created\":\"2020-11-16T19:43:23.198568+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\",\"attributes\":{\"name\":\"apm_read\",\"display_name\":\"APM Read\",\"description\":\"Read and query APM and Trace Analytics.\",\"created\":\"2020-11-23T20:55:45.006110+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\",\"attributes\":{\"name\":\"apm_retention_filter_read\",\"display_name\":\"APM Retention Filters Read\",\"description\":\"Read trace retention filters. A user with this permission can view the retention filters page, list of filters, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:49.190595+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\",\"attributes\":{\"name\":\"apm_service_ingest_read\",\"display_name\":\"APM Service Ingest Read\",\"description\":\"Access service ingestion pages. A user with this permission can view the service ingestion page, list of root services, their statistics, and creation info.\",\"created\":\"2020-11-23T20:55:57.768261+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\",\"attributes\":{\"name\":\"apm_tag_management_write\",\"display_name\":\"APM Tag Management Write\",\"description\":\"Edit second primary tag selection. A user with this permission can modify the second primary tag dropdown in the APM settings page.\",\"created\":\"2020-11-23T20:56:30.742299+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\",\"attributes\":{\"name\":\"apm_primary_operation_write\",\"display_name\":\"APM Primary Operation Write\",\"description\":\"Edit the operation name value selection. A user with this permission can modify the operation name list in the APM settings page and the operation name controller on the service page.\",\"created\":\"2020-11-23T20:56:38.658649+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\",\"attributes\":{\"name\":\"rum_apps_write\",\"display_name\":\"RUM Apps Write\",\"description\":\"Create, edit, and delete RUM applications. Creating a RUM application automatically generates a Client Token. In order to create Client Tokens directly, a user needs the Client Tokens Write permission.\",\"created\":\"2021-01-12T16:59:16.324480+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_read\",\"display_name\":\"Dynamic Instrumentation Read Configuration\",\"description\":\"View Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.010517+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_read\",\"display_name\":\"Security Filters Read\",\"description\":\"Read Security Filters.\",\"created\":\"2021-05-10T08:56:23.676833+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_read\",\"display_name\":\"Incidents Read\",\"description\":\"View incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.255499+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_write\",\"display_name\":\"Incidents Write\",\"description\":\"Create, view, and manage incidents in Datadog.\",\"created\":\"2021-06-22T15:11:09.264369+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_read\",\"display_name\":\"Incident Settings Read\",\"description\":\"View Incident Settings.\",\"created\":\"2021-06-22T15:11:09.259568+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\",\"attributes\":{\"name\":\"incident_settings_write\",\"display_name\":\"Incident Settings Write\",\"description\":\"Configure Incident Settings.\",\"created\":\"2021-06-22T15:11:09.261986+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_read\",\"display_name\":\"Application Security Management Event Rules Read\",\"description\":\"View Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.595771+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_event_rule_write\",\"display_name\":\"Application Security Management Event Rules Write\",\"description\":\"Edit Application Security Management Event Rules.\",\"created\":\"2021-07-19T13:31:15.598808+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_apps_read\",\"display_name\":\"RUM Apps Read\",\"description\":\"View RUM Applications data.\",\"created\":\"2021-08-02T09:46:07.671535+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\",\"attributes\":{\"name\":\"rum_session_replay_read\",\"display_name\":\"RUM Session Replay Read\",\"description\":\"View Session Replays.\",\"created\":\"2021-08-02T09:46:07.674640+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_read\",\"display_name\":\"Security Notification Rules Read\",\"description\":\"Read Notification Rules.\",\"created\":\"2021-09-16T08:26:27.366789+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_notification_profiles_write\",\"display_name\":\"Security Notification Rules Write\",\"description\":\"Create, edit, and delete Notification Rules.\",\"created\":\"2021-09-16T08:26:27.369359+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\",\"attributes\":{\"name\":\"apm_generate_metrics\",\"display_name\":\"APM Generate Metrics\",\"description\":\"Create custom metrics from spans.\",\"created\":\"2021-09-16T15:31:24.458963+00:00\",\"group_name\":\"APM\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_read\",\"display_name\":\"Cloud Workload Security Agent Rules Read\",\"description\":\"Read Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.074031+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_cws_agent_rules_write\",\"display_name\":\"Cloud Workload Security Agent Rules Write\",\"description\":\"Create, edit, and delete Cloud Workload Security Agent Rules.\",\"created\":\"2021-11-17T10:41:43.077905+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_read\",\"display_name\":\"APM Pipelines Read\",\"description\":\"View APM pipeline configurations.\",\"created\":\"2021-12-07T11:26:43.807269+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_read\",\"display_name\":\"Pipeline Configurations Read\",\"description\":\"View pipeline configurations.\",\"created\":\"2021-12-09T00:11:38.956827+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_read\",\"display_name\":\"Workflows Read\",\"description\":\"View workflows.\",\"created\":\"2022-02-03T15:07:12.058412+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_write\",\"display_name\":\"Workflows Write\",\"description\":\"Create, edit, and delete workflows.\",\"created\":\"2022-02-03T15:07:12.061765+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"workflows_run\",\"display_name\":\"Workflows Run\",\"description\":\"Run workflows.\",\"created\":\"2022-02-03T15:07:12.060079+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_read\",\"display_name\":\"Connections Read\",\"description\":\"List and view available connections. Connections contain secrets that cannot be revealed.\",\"created\":\"2022-02-03T15:07:12.053432+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\",\"attributes\":{\"name\":\"connections_write\",\"display_name\":\"Connections Write\",\"description\":\"Create and delete connections.\",\"created\":\"2022-02-03T15:07:12.056590+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_read\",\"display_name\":\"Notebooks Read\",\"description\":\"View notebooks.\",\"created\":\"2022-03-02T18:51:05.040950+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\",\"attributes\":{\"name\":\"notebooks_write\",\"display_name\":\"Notebooks Write\",\"description\":\"Create and change notebooks.\",\"created\":\"2022-03-02T18:51:05.044683+00:00\",\"group_name\":\"Notebooks\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\",\"attributes\":{\"name\":\"rum_generate_metrics\",\"display_name\":\"RUM Generate Metrics\",\"description\":\"Create custom metrics from RUM events.\",\"created\":\"2022-04-11T16:26:24.106645+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\",\"attributes\":{\"name\":\"manage_integrations\",\"display_name\":\"Integrations Manage\",\"description\":\"Install, uninstall, and configure integrations.\",\"created\":\"2022-04-26T20:21:40.285834+00:00\",\"group_name\":\"Integrations\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_read\",\"display_name\":\"SLOs Read\",\"description\":\"View SLOs and status corrections.\",\"created\":\"2022-06-08T16:20:55.142591+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_write\",\"display_name\":\"SLOs Write\",\"description\":\"Create, edit, and delete SLOs.\",\"created\":\"2022-06-08T16:20:55.143869+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\",\"attributes\":{\"name\":\"slos_corrections\",\"display_name\":\"SLOs Status Corrections\",\"description\":\"Apply, edit, and delete SLO status corrections. A user with this permission can make status corrections, even if they do not have permission to edit those SLOs.\",\"created\":\"2022-06-08T16:20:55.139410+00:00\",\"group_name\":\"Service Level Objectives\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_write\",\"display_name\":\"Service Catalog Write\",\"description\":\"Add, modify, and delete service catalog definitions when those definitions are maintained by Datadog.\",\"created\":\"2022-08-08T16:55:39.377188+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\",\"attributes\":{\"name\":\"apm_service_catalog_read\",\"display_name\":\"Service Catalog Read\",\"description\":\"View service catalog and service definitions.\",\"created\":\"2022-08-08T16:55:39.374377+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_insights_read\",\"display_name\":\"Watchdog Insights Read\",\"description\":\"Deprecated. View Watchdog Insights.\",\"created\":\"2022-08-15T20:25:36.677197+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\",\"attributes\":{\"name\":\"connections_resolve\",\"display_name\":\"Connections Resolve\",\"description\":\"Resolve connections.\",\"created\":\"2022-08-25T15:25:56.325170+00:00\",\"group_name\":\"Workflows\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_read\",\"display_name\":\"Application Security Management Protect Read\",\"description\":\"View blocked attackers.\",\"created\":\"2022-10-27T09:25:33.834253+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\",\"attributes\":{\"name\":\"appsec_protect_write\",\"display_name\":\"Application Security Management Protect Write\",\"description\":\"Manage blocked attackers.\",\"created\":\"2022-10-27T09:25:33.843656+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_read\",\"display_name\":\"Application Security Management 1-click Enablement Read\",\"description\":\"View whether Application Security Management has been enabled or disabled on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.827076+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\",\"attributes\":{\"name\":\"appsec_activation_write\",\"display_name\":\"Application Security Management 1-click Enablement Write\",\"description\":\"Enable or disable Application Security Management on services via 1-click enablement with Remote Configuration.\",\"created\":\"2022-10-27T09:25:33.831383+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\",\"attributes\":{\"name\":\"cases_read\",\"display_name\":\"Cases Read\",\"description\":\"View Cases.\",\"created\":\"2022-12-12T18:40:54.018521+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\",\"attributes\":{\"name\":\"cases_write\",\"display_name\":\"Cases Write\",\"description\":\"Create and update cases.\",\"created\":\"2022-12-12T18:40:54.023280+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_read\",\"display_name\":\"APM Remote Configuration Read\",\"description\":\"View APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.446298+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_read\",\"display_name\":\"CI Visibility Read\",\"description\":\"View CI Visibility.\",\"created\":\"2022-12-13T16:01:37.149406+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"read\",\"restricted\":true}},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_write\",\"display_name\":\"CI Visibility Tests Write\",\"description\":\"Edit flaky tests and delete Test Services.\",\"created\":\"2022-12-13T16:01:37.157428+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_settings_write\",\"display_name\":\"CI Visibility Settings Write\",\"description\":\"Configure CI Visibility settings. Set a repository default branch, enable GitHub comments, and delete test services.\",\"created\":\"2022-12-13T16:01:37.153418+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_settings_write\",\"display_name\":\"Intelligent Test Runner Settings Write\",\"description\":\"Edit Intelligent Test Runner settings, such as modifying ITR excluded branch list.\",\"created\":\"2022-12-13T16:01:37.169430+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\",\"attributes\":{\"name\":\"continuous_profiler_read\",\"display_name\":\"Continuous Profiler Read\",\"description\":\"View data in Continuous Profiler.\",\"created\":\"2022-12-16T16:50:32.545882+00:00\",\"group_name\":\"APM\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_read\",\"display_name\":\"Security Monitoring Findings Read\",\"description\":\"View CSPM Findings.\",\"created\":\"2023-02-24T14:30:30.983679+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_read\",\"display_name\":\"Incident Notification Settings Read\",\"description\":\"View Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\",\"attributes\":{\"name\":\"incident_notification_settings_write\",\"display_name\":\"Incident Notification Settings Write\",\"description\":\"Configure Incidents Notification settings.\",\"created\":\"2023-02-24T17:25:59.263037+00:00\",\"group_name\":\"Case and Incident Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\",\"attributes\":{\"name\":\"error_tracking_write\",\"display_name\":\"Error Tracking Write\",\"description\":\"Edit Error Tracking settings.\",\"created\":\"2023-03-27T16:55:44.263627+00:00\",\"group_name\":\"Error Tracking\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\",\"attributes\":{\"name\":\"watchdog_alerts_write\",\"display_name\":\"Watchdog Alerts Write\",\"description\":\"Manage Watchdog Alerts.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Watchdog\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\",\"attributes\":{\"name\":\"saved_views_write\",\"display_name\":\"Saved Views Write\",\"description\":\"Modify Saved Views across all Datadog products.\",\"created\":\"2023-04-15T03:45:24.289668+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_read\",\"display_name\":\"Client Tokens Read\",\"description\":\"Read Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\",\"attributes\":{\"name\":\"client_tokens_write\",\"display_name\":\"Client Tokens Write\",\"description\":\"Create and edit Client Tokens. Unlike API keys, client tokens may be exposed client-side in JavaScript code for web browsers and other clients to send data to Datadog.\",\"created\":\"2023-04-19T09:55:24.976379+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_read\",\"display_name\":\"Event Correlation Config Read\",\"description\":\"Read Event Correlation Configuration data such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\",\"attributes\":{\"name\":\"event_correlation_config_write\",\"display_name\":\"Event Correlation Config Write\",\"description\":\"Manage Event Correlation Configuration such as Correlation Rules and Settings.\",\"created\":\"2023-05-16T22:26:02.839419+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\",\"attributes\":{\"name\":\"event_config_write\",\"display_name\":\"Event Config Write\",\"description\":\"Manage general event configuration such as API Emails.\",\"created\":\"2023-05-20T01:20:31.639587+00:00\",\"group_name\":\"Events\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_findings_write\",\"display_name\":\"Security Monitoring Findings Write\",\"description\":\"Mute CSPM Findings.\",\"created\":\"2023-05-23T22:50:34.532448+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_read\",\"display_name\":\"Cloud Cost Management Read\",\"description\":\"View Cloud Cost pages. This does not restrict access to the cloud cost data source in dashboards and notebooks.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\",\"attributes\":{\"name\":\"cloud_cost_management_write\",\"display_name\":\"Cloud Cost Management Write\",\"description\":\"Configure cloud cost accounts and global customizations.\",\"created\":\"2023-05-31T20:35:17.490437+00:00\",\"group_name\":\"Cloud Cost Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\",\"attributes\":{\"name\":\"host_tags_write\",\"display_name\":\"Host Tags Write\",\"description\":\"Add and change tags on hosts.\",\"created\":\"2023-05-31T05:26:07.469293+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\",\"attributes\":{\"name\":\"ci_visibility_pipelines_write\",\"display_name\":\"CI Visibility Pipelines Write\",\"description\":\"Create CI Visibility pipeline spans using the API.\",\"created\":\"2023-06-01T11:35:17.513706+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_read\",\"display_name\":\"Quality Gate Rules Read\",\"description\":\"View Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\",\"attributes\":{\"name\":\"metrics_metadata_write\",\"display_name\":\"Metrics Metadata Write\",\"description\":\"Edit metadata on metrics.\",\"created\":\"2023-06-23T17:31:34.182629+00:00\",\"group_name\":\"Metrics\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\",\"attributes\":{\"name\":\"appsec_vm_write\",\"display_name\":\"Application Security Vulnerability Management Write\",\"description\":\"Update status or assignee of Application Security vulnerabilities.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\",\"attributes\":{\"name\":\"reference_tables_write\",\"display_name\":\"Reference Tables Write\",\"description\":\"Create or modify Reference Tables.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Reference Tables\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\",\"attributes\":{\"name\":\"rum_playlist_write\",\"display_name\":\"RUM Playlist Write\",\"description\":\"Create, update, and delete RUM playlists. Add and remove sessions from RUM playlists.\",\"created\":\"2023-07-07T17:31:08.450865+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\",\"attributes\":{\"name\":\"processes_generate_metrics\",\"display_name\":\"Processes Generate Metrics\",\"description\":\"Create custom metrics from processes.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"Processes\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\",\"attributes\":{\"name\":\"facets_write\",\"display_name\":\"Facets Write\",\"description\":\"Manage facets for products other than Log Management, such as APM Traces. To modify Log Facets, use Logs Write Facets.\",\"created\":\"2023-07-27T17:36:24.369352+00:00\",\"group_name\":\"Cross-Product Features\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"roles\",\"id\":\"94172442-be03-11e9-a77a-3b7612558ac1\",\"attributes\":{\"name\":\"Datadog Admin Role\",\"created_at\":\"2019-08-13T19:50:19.022791+00:00\",\"modified_at\":\"2019-08-13T19:50:19.022791+00:00\"},\"relationships\":{\"permissions\":{\"data\":[{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\"},{\"type\":\"permissions\",\"id\":\"984d2f00-d3b4-11e8-a200-bb47109e9987\"},{\"type\":\"permissions\",\"id\":\"5e605652-dd12-11e8-9e53-375565b8970e\"},{\"type\":\"permissions\",\"id\":\"62cc036c-dd12-11e8-9e54-db9995643092\"},{\"type\":\"permissions\",\"id\":\"6f66600e-dd12-11e8-9e55-7f30fbb45e73\"},{\"type\":\"permissions\",\"id\":\"7d7c98ac-dd12-11e8-9e56-93700598622d\"},{\"type\":\"permissions\",\"id\":\"811ac4ca-dd12-11e8-9e57-676a7f0beef9\"},{\"type\":\"permissions\",\"id\":\"84aa3ae4-dd12-11e8-9e58-a373a514ccd0\"},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\"},{\"type\":\"permissions\",\"id\":\"979df720-aed7-11e9-99c6-a7eb8373165a\"},{\"type\":\"permissions\",\"id\":\"d90f6830-d3d8-11e9-a77a-b3404e5e9ee2\"},{\"type\":\"permissions\",\"id\":\"d90f6831-d3d8-11e9-a77a-4fd230ddbc6a\"},{\"type\":\"permissions\",\"id\":\"d90f6832-d3d8-11e9-a77a-bf8a2607f864\"},{\"type\":\"permissions\",\"id\":\"4441648c-d8b1-11e9-a77a-1b899a04b304\"},{\"type\":\"permissions\",\"id\":\"48ef71ea-d8b1-11e9-a77a-93f408470ad0\"},{\"type\":\"permissions\",\"id\":\"4d87d5f8-d8b1-11e9-a77a-eb9c8350d04f\"},{\"type\":\"permissions\",\"id\":\"1af86ce4-7823-11ea-93dc-d7cad1b1c6cb\"},{\"type\":\"permissions\",\"id\":\"b382b982-8535-11ea-93de-2bf1bdf20798\"},{\"type\":\"permissions\",\"id\":\"7314eb20-aa58-11ea-95e2-6fb6e4a451d5\"},{\"type\":\"permissions\",\"id\":\"7b516476-aa58-11ea-95e2-93718cd56369\"},{\"type\":\"permissions\",\"id\":\"80de1ec0-aa58-11ea-95e2-aff381626d5d\"},{\"type\":\"permissions\",\"id\":\"58b412cc-ff6d-11eb-bc9c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"9ac1d8cc-e707-11ea-aa2d-73d37e989a9d\"},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\"},{\"type\":\"permissions\",\"id\":\"46a301da-ec5c-11ea-aa9f-73bedeab67ee\"},{\"type\":\"permissions\",\"id\":\"46a301db-ec5c-11ea-aa9f-2fe72193d60e\"},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\"},{\"type\":\"permissions\",\"id\":\"46a301dd-ec5c-11ea-aa9f-97edfb345bc9\"},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\"},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\"},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\"},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\"},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\"},{\"type\":\"permissions\",\"id\":\"46a301e4-ec5c-11ea-aa9f-87282b3a50cc\"},{\"type\":\"permissions\",\"id\":\"07c3c146-f7f8-11ea-acf6-0bd62b9ae60e\"},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\"},{\"type\":\"permissions\",\"id\":\"372896c4-f923-11ea-adbc-4fecd107156d\"},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\"},{\"type\":\"permissions\",\"id\":\"4628ca54-f923-11ea-adbc-4b2b7f88c5e9\"},{\"type\":\"permissions\",\"id\":\"4ada6e36-f923-11ea-adbc-0788e5c5e3cf\"},{\"type\":\"permissions\",\"id\":\"5025ee24-f923-11ea-adbc-576ea241df8d\"},{\"type\":\"permissions\",\"id\":\"55f4b5ec-f923-11ea-adbc-1bfa2334a755\"},{\"type\":\"permissions\",\"id\":\"5c6b88e2-f923-11ea-adbc-abf57d079420\"},{\"type\":\"permissions\",\"id\":\"642eebe6-f923-11ea-adbc-eb617674ea04\"},{\"type\":\"permissions\",\"id\":\"6ba32d22-0e1a-11eb-ba44-bf9a5aafaa39\"},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\"},{\"type\":\"permissions\",\"id\":\"fcac2ad8-2843-11eb-8315-0fe47949d625\"},{\"type\":\"permissions\",\"id\":\"417ba636-2dce-11eb-84c0-6bce5b0d9de0\"},{\"type\":\"permissions\",\"id\":\"43fa188e-2dce-11eb-84c0-835ad1fd6287\"},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\"},{\"type\":\"permissions\",\"id\":\"4916eebe-2dce-11eb-84c0-271cb2c672e8\"},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\"},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\"},{\"type\":\"permissions\",\"id\":\"5cbe5f9c-2dce-11eb-84c0-872d3e9f1076\"},{\"type\":\"permissions\",\"id\":\"61765026-2dce-11eb-84c0-833e230d1b8f\"},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\"},{\"type\":\"permissions\",\"id\":\"8106300a-54f7-11eb-8cbc-7781a434a67b\"},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"edfd5e75-801f-11eb-96d8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"98b984f4-b16d-11eb-a2c6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc20e-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc211-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc20f-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"12efc210-d36c-11eb-a9b8-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1c-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"97971c1d-e895-11eb-b13c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef24-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7605ef25-f376-11eb-b90b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c95412b8-16c7-11ec-85c0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c95412b9-16c7-11ec-85c0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"26c79920-1703-11ec-85d2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f4473c60-4792-11ec-a27b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f4473c61-4792-11ec-a27b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8e4d6b6e-5750-11ec-a9f4-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"945b3bb4-5884-11ec-aa6d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a8-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917aa-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a9-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a6-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f6e917a7-8502-11ec-bf20-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac6-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b6bf9ac7-9a59-11ec-8480-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"2108215e-b9b4-11ec-958e-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7b1f5089-c59e-11ec-aa32-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941cf-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941d0-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f8e941ce-e746-11ec-b22d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"ee68fba9-173a-11ed-b00b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"ee68fba8-173a-11ed-b00b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6be119a6-1cd8-11ed-b185-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"36e2a22e-248a-11ed-b405-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee674f6-55d9-11ed-b10d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee7e46c-55d9-11ed-b10e-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee5731c-55d9-11ed-b10b-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4ee60688-55d9-11ed-b10c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8247acc4-7a4c-11ed-958f-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"824851a6-7a4c-11ed-9590-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"77d55a44-7a5a-11ed-8abe-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ad874-7aff-11ed-a5cd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5c1090-7aff-11ed-a5cf-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5b7428-7aff-11ed-a5ce-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5de654-7aff-11ed-a5d1-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"c13a2368-7d61-11ed-b5b7-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"ca6bfb3a-b44f-11ed-adb2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4dc3eec6-b468-11ed-8539-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4dc4094c-b468-11ed-853a-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"36bf3d0a-ccc0-11ed-9453-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f416f55e-db3f-11ed-8028-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"f416b1ac-db3f-11ed-8027-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4e61a95e-de98-11ed-aa23-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"4e61ea18-de98-11ed-aa24-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a4316eb8-f438-11ed-8af2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a431bf12-f438-11ed-8af3-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"8352cf04-f6ac-11ed-9ec7-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"3a48350c-f9bc-11ed-b81c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a773e3d8-fff2-11ed-965c-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a77452c8-fff2-11ed-965d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"a51b375a-ff73-11ed-8c18-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"61f9891a-0070-11ee-9c3f-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1377d9e4-0ec7-11ee-aebc-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"cc8cd958-11eb-11ee-ade2-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b1ad77e6-0949-11ee-b2c3-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"b1adb5da-0949-11ee-b2c4-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"0efeff18-1cec-11ee-992d-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"785177a6-20da-11ee-bed7-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\"},{\"type\":\"permissions\",\"id\":\"1b8f54cc-2ca4-11ee-9e72-da7ad0900002\"}]}}},{\"type\":\"permissions\",\"id\":\"984a2bd4-d3b4-11e8-a1ff-a7f660d43029\",\"attributes\":{\"name\":\"admin\",\"display_name\":\"Privileged Access\",\"description\":\"Deprecated. Privileged Access (also known as Admin permission) has been replaced by more specific permissions: Access Management, Org Management, Billing Read/Write, Usage Read/Write.\",\"created\":\"2018-10-19T15:35:23.734317+00:00\",\"group_name\":\"General\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"87b00304-dd12-11e8-9e59-cbeb5f71f72f\",\"attributes\":{\"name\":\"logs_write_archives\",\"display_name\":\"Logs Write Archives\",\"description\":\"Add and edit Log Archives.\",\"created\":\"2018-10-31T13:40:29.040786+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"9de604d8-e707-11ea-aa2d-93f1a783b3a3\",\"attributes\":{\"name\":\"user_access_manage\",\"display_name\":\"User Access Manage\",\"description\":\"Disable users, manage user roles, manage SAML-to-role mappings, and configure logs restriction queries.\",\"created\":\"2020-08-25T19:17:28.810412+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"other\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301dc-ec5c-11ea-aa9f-13b33f8f46ea\",\"attributes\":{\"name\":\"org_app_keys_write\",\"display_name\":\"Org App Keys Write\",\"description\":\"Manage Application Keys owned by all users in the organization.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301de-ec5c-11ea-aa9f-a73252c24806\",\"attributes\":{\"name\":\"synthetics_private_location_write\",\"display_name\":\"Synthetics Private Locations Write\",\"description\":\"Create and delete private locations in addition to having access to the associated installation guidelines.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Synthetic Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301df-ec5c-11ea-aa9f-970a9ae645e5\",\"attributes\":{\"name\":\"billing_read\",\"display_name\":\"Billing Read\",\"description\":\"View your organization's subscription and payment method but not make edits.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e0-ec5c-11ea-aa9f-6ba6cc675d8c\",\"attributes\":{\"name\":\"billing_edit\",\"display_name\":\"Billing Edit\",\"description\":\"Manage your organization's subscription and payment method.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e1-ec5c-11ea-aa9f-afa39f6f3e36\",\"attributes\":{\"name\":\"usage_read\",\"display_name\":\"Usage Read\",\"description\":\"View your organization's usage and usage attribution.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"46a301e2-ec5c-11ea-aa9f-1f511b7305fd\",\"attributes\":{\"name\":\"usage_edit\",\"display_name\":\"Usage Edit\",\"description\":\"Manage your organization's usage attribution set-up.\",\"created\":\"2020-09-01T14:06:05.444705+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"2fbdac76-f923-11ea-adbc-07f3823e2b43\",\"attributes\":{\"name\":\"audit_logs_read\",\"display_name\":\"Audit Trail Read\",\"description\":\"View Audit Trail in your organization.\",\"created\":\"2020-09-17T20:20:10.834252+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"3e4d4d28-f923-11ea-adbc-e3565938c12e\",\"attributes\":{\"name\":\"api_keys_write\",\"display_name\":\"API Keys Write\",\"description\":\"Create and rename API Keys for your organization.\",\"created\":\"2020-09-17T20:20:35.264430+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"a42e94b2-1476-11eb-bd08-efda28c04248\",\"attributes\":{\"name\":\"service_account_write\",\"display_name\":\"Service Account Write\",\"description\":\"Create, disable, and use Service Accounts in your organization.\",\"created\":\"2020-10-22T14:55:35.814239+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"465cfe66-2dce-11eb-84c0-6baa888239fa\",\"attributes\":{\"name\":\"apm_retention_filter_write\",\"display_name\":\"APM Retention Filters Write\",\"description\":\"Create, edit, and delete trace retention filters. A user with this permission can create new retention filters, and update or delete to existing retention filters.\",\"created\":\"2020-11-23T20:55:53.194236+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4e3f02b4-2dce-11eb-84c0-2fca946a6efc\",\"attributes\":{\"name\":\"apm_service_ingest_write\",\"display_name\":\"APM Service Ingest Write\",\"description\":\"Edit service ingestion pages' root services. A user with this permission can edit the root service ingestion and generate a code snippet to increase ingestion per service.\",\"created\":\"2020-11-23T20:56:06.419518+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"53950c54-2dce-11eb-84c0-a79ae108f6f8\",\"attributes\":{\"name\":\"apm_apdex_manage_write\",\"display_name\":\"APM Apdex Manage Write\",\"description\":\"Set Apdex T value on any service. A user with this permission can set the T value from the Apdex graph on the service page.\",\"created\":\"2020-11-23T20:56:15.371926+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"04bc1cf2-340a-11eb-873a-43b973c760dd\",\"attributes\":{\"name\":\"audit_logs_write\",\"display_name\":\"Audit Trail Write\",\"description\":\"Configure Audit Trail in your organization.\",\"created\":\"2020-12-01T19:18:39.866516+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"edfd5e74-801f-11eb-96d8-da7ad0900002\",\"attributes\":{\"name\":\"debugger_write\",\"display_name\":\"Dynamic Instrumentation Write Configuration\",\"description\":\"Edit Dynamic Instrumentation configuration.\",\"created\":\"2021-03-08T15:06:59.006815+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7c-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_read\",\"display_name\":\"Data Scanner Read\",\"description\":\"View Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.394971+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"bf0dcf7d-90af-11eb-9b82-da7ad0900002\",\"attributes\":{\"name\":\"data_scanner_write\",\"display_name\":\"Data Scanner Write\",\"description\":\"Edit Data Scanner configurations.\",\"created\":\"2021-03-29T16:56:46.398584+00:00\",\"group_name\":\"Compliance\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7df222b6-a45c-11eb-a0af-da7ad0900002\",\"attributes\":{\"name\":\"org_management\",\"display_name\":\"Org Management\",\"description\":\"Edit org configurations, including authentication and certain security preferences such as configuring SAML, renaming an org, configuring allowed login methods, creating child orgs, subscribing & unsubscribing from apps in the marketplace, and enabling & disabling Remote Configuration for the entire organization.\",\"created\":\"2021-04-23T17:51:12.187340+00:00\",\"group_name\":\"Access Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"98b984f5-b16d-11eb-a2c6-da7ad0900002\",\"attributes\":{\"name\":\"security_monitoring_filters_write\",\"display_name\":\"Security Filters Write\",\"description\":\"Create, edit, and delete Security Filters.\",\"created\":\"2021-05-10T08:56:23.680551+00:00\",\"group_name\":\"Cloud Security Platform\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"020a563c-56a4-11ec-a982-da7ad0900002\",\"attributes\":{\"name\":\"apm_pipelines_write\",\"display_name\":\"APM Pipelines Write\",\"description\":\"Add and change APM pipeline configurations.\",\"created\":\"2021-12-06T14:51:35.049129+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"945b3bb5-5884-11ec-aa6d-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_write\",\"display_name\":\"Pipeline Configurations Write\",\"description\":\"Create, edit, and delete pipeline configurations.\",\"created\":\"2021-12-09T00:11:38.960833+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"e35c06b0-966b-11ec-83c9-da7ad0900002\",\"attributes\":{\"name\":\"logs_delete_data\",\"display_name\":\"Logs Delete Data\",\"description\":\"Delete data from your Logs, including entire indexes.\",\"created\":\"2022-02-25T18:51:06.176019+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff448-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_read\",\"display_name\":\"Usage Notifications Read\",\"description\":\"Receive notifications and view currently configured notification settings.\",\"created\":\"2022-05-17T13:56:09.870985+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"read\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1afff449-d5e9-11ec-ae37-da7ad0900002\",\"attributes\":{\"name\":\"usage_notifications_write\",\"display_name\":\"Usage Notifications Write\",\"description\":\"Receive notifications and configure notification settings.\",\"created\":\"2022-05-17T13:56:09.876124+00:00\",\"group_name\":\"Billing and Usage\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c87d3da-e5c5-11ec-b1d6-da7ad0900002\",\"attributes\":{\"name\":\"generate_dashboard_reports\",\"display_name\":\"Dashboards Report Write\",\"description\":\"Schedule custom reports from a dashboard. These reports will display any viewable data regardless of any granular restrictions (restriction queries, scoped indexes) applied to the report's creator.\",\"created\":\"2022-06-06T18:21:03.378896+00:00\",\"group_name\":\"Dashboards\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"4784b11c-f311-11ec-a5f5-da7ad0900002\",\"attributes\":{\"name\":\"monitor_config_policy_write\",\"display_name\":\"Monitor Configuration Policy Write\",\"description\":\"Create, update, and delete monitor configuration policies.\",\"created\":\"2022-06-23T16:26:48.150556+00:00\",\"group_name\":\"Monitors\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"5b2c3e28-1761-11ed-b018-da7ad0900002\",\"attributes\":{\"name\":\"logs_write_forwarding_rules\",\"display_name\":\"Logs Write Forwarding Rules\",\"description\":\"Add and edit forwarding destinations and rules for logs.\",\"created\":\"2022-08-08T21:30:42.723663+00:00\",\"group_name\":\"Log Management\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"77d5f45e-7a5a-11ed-8abf-da7ad0900002\",\"attributes\":{\"name\":\"apm_remote_configuration_write\",\"display_name\":\"APM Remote Configuration Write\",\"description\":\"Edit APM Remote Configuration.\",\"created\":\"2022-12-12T20:20:49.450768+00:00\",\"group_name\":\"APM\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c59ae72-7aff-11ed-a5cc-da7ad0900002\",\"attributes\":{\"name\":\"ci_provider_settings_write\",\"display_name\":\"CI Provider Settings Write\",\"description\":\"Edit CI Provider settings. Manage GitHub accounts and repositories for enabling CI Visibility and job logs collection.\",\"created\":\"2022-12-13T16:01:37.141217+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5d0892-7aff-11ed-a5d0-da7ad0900002\",\"attributes\":{\"name\":\"intelligent_test_runner_activation_write\",\"display_name\":\"Intelligent Test Runner Activation Write\",\"description\":\"Enable or disable Intelligent Test Runner.\",\"created\":\"2022-12-13T16:01:37.163771+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1d76ecfa-9771-11ed-9c2f-da7ad0900002\",\"attributes\":{\"name\":\"teams_manage\",\"display_name\":\"Teams Manage\",\"description\":\"Manage Teams. Create, delete, rename, and edit metadata of all Teams. To control Team membership across all Teams, use the User Access Manage permission.\",\"created\":\"2023-01-18T20:45:59.977837+00:00\",\"group_name\":\"Teams\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"35dd33ea-ca2e-11ed-bca0-da7ad0900002\",\"attributes\":{\"name\":\"ci_ingestion_control_write\",\"display_name\":\"CI Visibility Ingestion Control Write\",\"description\":\"Edit CI Ingestion Control exclusion filters.\",\"created\":\"2023-03-24T10:25:33.934187+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"1377ff28-0ec7-11ee-aebd-da7ad0900002\",\"attributes\":{\"name\":\"quality_gate_rules_write\",\"display_name\":\"Quality Gate Rules Write\",\"description\":\"Edit Quality Gate Rules.\",\"created\":\"2023-06-19T17:31:08.295856+00:00\",\"group_name\":\"CI Visibility\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"b1adb6e8-0949-11ee-b2c5-da7ad0900002\",\"attributes\":{\"name\":\"rum_delete_data\",\"display_name\":\"RUM Delete Data\",\"description\":\"Delete data from RUM.\",\"created\":\"2023-06-12T17:51:01.325450+00:00\",\"group_name\":\"Real User Monitoring\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce898-21a4-11ee-99ef-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_delete\",\"display_name\":\"Pipeline Delete\",\"description\":\"Delete pipelines from your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"6c5ce992-21a4-11ee-99f0-da7ad0900002\",\"attributes\":{\"name\":\"observability_pipelines_deploy\",\"display_name\":\"Pipeline Deploy\",\"description\":\"Deploy pipelines in your organization.\",\"created\":\"2023-07-13T17:40:57.140947+00:00\",\"group_name\":\"Observability Pipelines\",\"display_type\":\"write\",\"restricted\":false}},{\"type\":\"permissions\",\"id\":\"7850e390-20da-11ee-bed6-da7ad0900002\",\"attributes\":{\"name\":\"api_keys_delete\",\"display_name\":\"API Keys Delete\",\"description\":\"Delete API Keys for your organization.\",\"created\":\"2023-07-12T17:35:18.858294+00:00\",\"group_name\":\"API and Application Keys\",\"display_type\":\"write\",\"restricted\":false}}],\"meta\":{\"page\":{\"total_count\":203828,\"total_filtered_count\":203828}}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List all users returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2022-05-12T09:53:50.327Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Send_invitation_emails_returns_OK_response-1652349230@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"6cf192b6-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-send_invitation_emails_returns_ok_response-1652349230@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:50.750988+00:00\",\"modified_at\":\"2022-05-12T09:53:50.825901+00:00\",\"email\":\"test-send_invitation_emails_returns_ok_response-1652349230@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/08690384d51c4e0218825490e53c6f9a?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": [ + { + "relationships": { + "user": { + "data": { + "id": "6cf192b6-d1d9-11ec-ad3d-da7ad0900002", + "type": "users" + } + } + }, + "type": "user_invitations" + } + ] + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/user_invitations", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"type\":\"user_invitations\",\"id\":\"6d565dfe-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"uuid\":\"6d565dfe-d1d9-11ec-ad3d-da7ad0900002\",\"login_method\":null,\"invite_type\":\"openid_invite\",\"created_at\":\"2022-05-12T09:53:51.412532+00:00\",\"expires_at\":\"2022-05-14T09:53:51.311613+00:00\"},\"relationships\":{\"user\":{\"data\":{\"type\":\"users\",\"id\":\"6cf192b6-d1d9-11ec-ad3d-da7ad0900002\"}}}}]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/6cf192b6-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Send invitation emails returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2022-05-12T09:53:51.942Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_a_user_returns_Bad_User_ID_in_Request_response-1652349231@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"6de87a9a-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-update_a_user_returns_bad_user_id_in_request_response-1652349231@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:52.369558+00:00\",\"modified_at\":\"2022-05-12T09:53:52.414328+00:00\",\"email\":\"test-update_a_user_returns_bad_user_id_in_request_response-1652349231@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/7e237f697063f0a1613e61769fbd6f5b?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "disabled": true, + "name": "updated" + }, + "id": "00000000-mismatch-body-id-ffffffffffff", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/users/6de87a9a-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"UUID's in the URL and request body do not match\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Unprocessable Entity", + "status": 422 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/6de87a9a-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update a user returns \"Bad User ID in Request\" response", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2022-01-06T00:52:36.175Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "disabled": true, + "name": "updated" + }, + "id": "00000000-dead-beef-dead-ffffffffffff", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/users/00000000-dead-beef-dead-ffffffffffff", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[\"00000000-dead-beef-dead-ffffffffffff not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a user returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Users", + "frozen_at": "2022-05-12T09:53:53.479Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "email": "Test-Update_a_user_returns_OK_response-1652349233@datadoghq.com", + "title": "user title" + }, + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/users", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"6de87a9b-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":null,\"handle\":\"test-update_a_user_returns_ok_response-1652349233@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:53.972168+00:00\",\"modified_at\":\"2022-05-12T09:53:54.014176+00:00\",\"email\":\"test-update_a_user_returns_ok_response-1652349233@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/e3e4683c1e52cc0efa35ddd7a3bf393a?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":false,\"allowed_login_methods\":[],\"status\":\"Pending\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "disabled": true, + "name": "updated" + }, + "id": "6de87a9b-d1d9-11ec-ad3d-da7ad0900002", + "type": "users" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/users/6de87a9b-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"type\":\"users\",\"id\":\"6de87a9b-d1d9-11ec-ad3d-da7ad0900002\",\"attributes\":{\"name\":\"updated\",\"handle\":\"test-update_a_user_returns_ok_response-1652349233@datadoghq.com\",\"created_at\":\"2022-05-12T09:53:53.972168+00:00\",\"modified_at\":\"2022-05-12T09:53:54.471054+00:00\",\"email\":\"test-update_a_user_returns_ok_response-1652349233@datadoghq.com\",\"icon\":\"https://secure.gravatar.com/avatar/e3e4683c1e52cc0efa35ddd7a3bf393a?s=48&d=retro\",\"title\":\"user title\",\"verified\":false,\"service_account\":false,\"disabled\":true,\"allowed_login_methods\":[],\"status\":\"Disabled\"},\"relationships\":{\"roles\":{\"data\":[]},\"org\":{\"data\":{\"type\":\"orgs\",\"id\":\"4dee724d-00cc-11ea-a77b-570c9d03c6c5\"}}}}}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/users/6de87a9b-d1d9-11ec-ad3d-da7ad0900002", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\": [\"6de87a9b-d1d9-11ec-ad3d-da7ad0900002 not found\"]}" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update a user returns \"OK\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +} diff --git a/test-server-data/v2/workflow-automation.json b/test-server-data/v2/workflow-automation.json new file mode 100644 index 0000000000..15a2f0af4e --- /dev/null +++ b/test-server-data/v2/workflow-automation.json @@ -0,0 +1,1532 @@ +{ + "feature": "Workflow Automation", + "recordings": [ + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:57.489Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/workflows/malformed/instances/malformed/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"INVALID_FIELD_VALUE\",\"detail\":\"value is invalid for field workflow_id\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Cancel a workflow instance returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:57.698Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/workflows/0233a3b7-b7ba-425e-a8cc-375ca2020b5b/instances/e0c64dc8-f946-4ae8-8d79-54569031ce67/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"INSTANCE_NOT_FOUND\",\"detail\":\"instance e0c64dc8-f946-4ae8-8d79-54569031ce67 not found\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Cancel a workflow instance returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:57.827Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "PUT", + "path": "/api/v2/workflows/ccf73164-1998-4785-a7a3-8d06c7e5f558/instances/305a472b-71ab-4ce8-8f8d-75db635627b5/cancel", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Cancel a workflow instance returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-02-04T04:34:39.241Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "Too many characters in description", + "spec": {} + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"detail\":\"workflow description exceeds size limit of [300] characters\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create Workflow returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-02-04T04:34:39.387Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A sample workflow.", + "name": "Example Workflow", + "published": true, + "spec": { + "connectionEnvs": [ + { + "connections": [ + { + "connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", + "label": "INTEGRATION_DATADOG" + } + ], + "env": "default" + } + ], + "handle": "my-handle", + "inputSchema": { + "parameters": [ + { + "defaultValue": "default", + "name": "input", + "type": "STRING" + } + ] + }, + "outputSchema": { + "parameters": [ + { + "name": "output", + "type": "ARRAY_OBJECT", + "value": "outputValue" + } + ] + }, + "steps": [ + { + "actionId": "com.datadoghq.dd.monitor.listMonitors", + "connectionLabel": "INTEGRATION_DATADOG", + "name": "Step1", + "outboundEdges": [ + { + "branchName": "main", + "nextStepName": "Step2" + } + ], + "parameters": [ + { + "name": "tags", + "value": "service:monitoring" + } + ] + }, + { + "actionId": "com.datadoghq.core.noop", + "name": "Step2" + } + ], + "triggers": [ + { + "monitorTrigger": { + "rateLimit": { + "count": 1, + "interval": "3600s" + } + }, + "startStepNames": [ + "Step1" + ] + }, + { + "githubWebhookTrigger": {}, + "startStepNames": [ + "Step1" + ] + } + ] + }, + "tags": [ + "team:infra", + "service:monitoring", + "foo:bar" + ] + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"9c250b4e-3d0c-433d-84e6-60a6bde81adb\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-02-04T04:34:39.501028Z\",\"description\":\"A sample workflow.\",\"name\":\"Example Workflow\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"Step1\"],\"monitorTrigger\":{\"rateLimit\":{\"count\":1,\"interval\":\"3600s\"}}},{\"startStepNames\":[\"Step1\"],\"githubWebhookTrigger\":{}}],\"steps\":[{\"name\":\"Step1\",\"actionId\":\"com.datadoghq.dd.monitor.listMonitors\",\"connectionLabel\":\"INTEGRATION_DATADOG\",\"parameters\":[{\"name\":\"tags\",\"value\":\"service:monitoring\"}],\"outboundEdges\":[{\"nextStepName\":\"Step2\",\"branchName\":\"main\"}]},{\"name\":\"Step2\",\"actionId\":\"com.datadoghq.core.noop\"}],\"handle\":\"my-handle\",\"connectionEnvs\":[{\"env\":\"default\",\"connections\":[{\"connectionId\":\"e1e64943-c7c5-4487-aece-25aaec7d3aad\",\"label\":\"INTEGRATION_DATADOG\"}]}],\"inputSchema\":{\"parameters\":[{\"name\":\"input\",\"type\":\"STRING\",\"defaultValue\":\"default\"}]},\"outputSchema\":{\"parameters\":[{\"name\":\"output\",\"type\":\"ARRAY_OBJECT\",\"value\":\"outputValue\"}]}},\"tags\":[\"foo:bar\",\"team:infra\",\"service:monitoring\"],\"updatedAt\":\"2025-02-04T04:34:39.501028Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/workflows/9c250b4e-3d0c-433d-84e6-60a6bde81adb", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create Workflow returns \"Successfully created a workflow.\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:42.973Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "Too many characters in description", + "spec": {} + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"detail\":\"workflow description exceeds size limit of [300] characters\"},{\"detail\":\"spec is invalid\"},{\"detail\":\"no trigger found. At least one trigger is required.\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Create a Workflow returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:43.084Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A sample workflow.", + "name": "Example Workflow", + "published": true, + "spec": { + "connectionEnvs": [ + { + "connections": [ + { + "connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", + "label": "INTEGRATION_DATADOG" + } + ], + "env": "default" + } + ], + "inputSchema": { + "parameters": [ + { + "defaultValue": "default", + "name": "input", + "type": "STRING" + } + ] + }, + "outputSchema": { + "parameters": [ + { + "name": "output", + "type": "ARRAY_OBJECT", + "value": "outputValue" + } + ] + }, + "steps": [ + { + "actionId": "com.datadoghq.dd.monitor.listMonitors", + "connectionLabel": "INTEGRATION_DATADOG", + "name": "Step1", + "outboundEdges": [ + { + "branchName": "main", + "nextStepName": "Step2" + } + ], + "parameters": [ + { + "name": "tags", + "value": "service:monitoring" + } + ] + }, + { + "actionId": "com.datadoghq.core.noop", + "name": "Step2" + } + ], + "triggers": [ + { + "monitorTrigger": { + "rateLimit": { + "count": 1, + "interval": "3600s" + } + }, + "startStepNames": [ + "Step1" + ] + }, + { + "githubWebhookTrigger": {}, + "startStepNames": [ + "Step1" + ] + } + ] + }, + "tags": [ + "team:infra", + "service:monitoring", + "foo:bar" + ] + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"c850935f-15fc-4e5b-8903-d68066c5343a\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T17:23:43.255617Z\",\"description\":\"A sample workflow.\",\"name\":\"Example Workflow\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"Step1\"],\"monitorTrigger\":{\"rateLimit\":{\"count\":1,\"interval\":\"3600s\"}}},{\"startStepNames\":[\"Step1\"],\"githubWebhookTrigger\":{}}],\"steps\":[{\"name\":\"Step1\",\"actionId\":\"com.datadoghq.dd.monitor.listMonitors\",\"connectionLabel\":\"INTEGRATION_DATADOG\",\"parameters\":[{\"name\":\"tags\",\"value\":\"service:monitoring\"}],\"outboundEdges\":[{\"nextStepName\":\"Step2\",\"branchName\":\"main\"}]},{\"name\":\"Step2\",\"actionId\":\"com.datadoghq.core.noop\"}],\"connectionEnvs\":[{\"env\":\"default\",\"connections\":[{\"connectionId\":\"e1e64943-c7c5-4487-aece-25aaec7d3aad\",\"label\":\"INTEGRATION_DATADOG\"}]}],\"inputSchema\":{\"parameters\":[{\"name\":\"input\",\"type\":\"STRING\",\"defaultValue\":\"default\"}]},\"outputSchema\":{\"parameters\":[{\"name\":\"output\",\"type\":\"ARRAY_OBJECT\",\"value\":\"outputValue\"}]}},\"tags\":[\"foo:bar\",\"service:monitoring\",\"team:infra\"],\"updatedAt\":\"2025-05-26T17:23:43.255617Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/workflows/c850935f-15fc-4e5b-8903-d68066c5343a", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Create a Workflow returns \"Successfully created a workflow.\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:43.439Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/workflows/aaa11111-aa11-aa11-aaaa-aaaaaa111111", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"detail\":\"workflow not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an existing Workflow returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:43.503Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Cassette Workflow x-given", + "spec": { + "steps": [ + { + "actionId": "com.datadoghq.core.noop", + "name": "No_op" + } + ], + "triggers": [ + { + "startStepNames": [ + "No_op" + ], + "workflowTrigger": {} + } + ] + } + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"8b9af60d-3521-4ed0-85b2-8e2ab2131e58\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T17:23:43.642375Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"No_op\"],\"workflowTrigger\":{}}],\"steps\":[{\"name\":\"No_op\",\"actionId\":\"com.datadoghq.core.noop\"}]},\"tags\":[],\"updatedAt\":\"2025-05-26T17:23:43.642375Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/workflows/8b9af60d-3521-4ed0-85b2-8e2ab2131e58", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/workflows/8b9af60d-3521-4ed0-85b2-8e2ab2131e58", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"detail\":\"workflow not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Delete an existing Workflow returns \"Successfully deleted a workflow.\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:57.981Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "meta": { + "payload": { + "input": "value" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows/malformed/instances", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"INVALID_FIELD_VALUE\",\"detail\":\"value is invalid for field workflow_id\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Execute a workflow returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:58.210Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "meta": { + "payload": { + "input": "value" + } + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows/ccf73164-1998-4785-a7a3-8d06c7e5f558/instances", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{},\"id\":\"111e18d6-3f19-4ada-91d3-ab1e1546b8b4\",\"type\":\"instances\"},\"meta\":{\"workflowId\":\"ccf73164-1998-4785-a7a3-8d06c7e5f558\"}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Execute a workflow returns \"Created\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:58.459Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows/malformed/instances/malformed", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"INVALID_FIELD_VALUE\",\"detail\":\"value is invalid for field workflow_id\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get a workflow instance returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:58.587Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows/0233a3b7-b7ba-425e-a8cc-375ca2020b5b/instances/e0c64dc8-f946-4ae8-8d79-54569031ce67", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"WORKFLOW_NOT_FOUND\",\"detail\":\"workflow not found\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get a workflow instance returns \"Not Found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:58.724Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows/ccf73164-1998-4785-a7a3-8d06c7e5f558/instances/305a472b-71ab-4ce8-8f8d-75db635627b5", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"attributes\":{\"endTimestamp\":\"2024-07-24T18:39:58.219283Z\",\"instanceStatus\":{\"detailsKind\":\"CANCELED\",\"displayName\":\"Canceled\"},\"outputs\":{},\"source\":{\"manual\":{\"actingUser\":{\"userEmail\":\"max.gale@datadoghq.com\",\"userName\":\"Max Gale\",\"userUuid\":\"e39535f4-306b-11ee-9383-6ac9a4415a29\"}}},\"sourceForTemplating\":{\"initiator\":{\"email\":\"max.gale@datadoghq.com\",\"id\":\"e39535f4-306b-11ee-9383-6ac9a4415a29\",\"name\":\"Max Gale\"},\"name\":\"Max Jul 24 2024 02:38\",\"type\":\"manual\",\"url\":\"https://app.datadoghq.com/workflow/ccf73164-1998-4785-a7a3-8d06c7e5f558?instance=305a472b-71ab-4ce8-8f8d-75db635627b5\"},\"startTimestamp\":\"2024-07-24T18:38:31.326418Z\",\"stepStateAssociations\":[{\"stepName\":\"Sleep\",\"stepState\":\"CANCELED\"}],\"trigger\":{}},\"id\":\"305a472b-71ab-4ce8-8f8d-75db635627b5\",\"relationships\":{\"specVersion\":{\"data\":{\"id\":\"37d9abeb-2ac1-4185-91f8-86d92d5cbf7f\",\"type\":\"spec_versions\"}},\"workflow\":{\"data\":{\"id\":\"ccf73164-1998-4785-a7a3-8d06c7e5f558\",\"type\":\"workflows\"}}},\"type\":\"instances\"},\"included\":[{\"attributes\":{\"createdAt\":\"2024-07-24T18:38:29.839739Z\",\"spec\":{\"steps\":[{\"actionId\":\"com.datadoghq.core.sleep\",\"display\":{\"bounds\":{\"y\":186}},\"name\":\"Sleep\",\"parameters\":[{\"name\":\"durationSeconds\",\"value\":300}]}],\"triggers\":[{\"apiTrigger\":{},\"startStepNames\":[\"Sleep\"]}]},\"workflowId\":\"ccf73164-1998-4785-a7a3-8d06c7e5f558\"},\"id\":\"37d9abeb-2ac1-4185-91f8-86d92d5cbf7f\",\"type\":\"spec_versions\"},{\"attributes\":{\"createdAt\":\"2024-07-24T18:38:05.701669Z\",\"creationSource\":\"workflows_ui\",\"name\":\"Max Jul 24 2024 02:38\",\"specVersionId\":\"3d660f9c-7dfe-4fbd-bea5-f61eccea0600\",\"updatedAt\":\"2024-07-24T18:38:59.939929Z\"},\"id\":\"ccf73164-1998-4785-a7a3-8d06c7e5f558\",\"type\":\"workflows\"}],\"meta\":{\"outputsTooBig\":false,\"sourceTooBig\":false,\"triggerTooBig\":false}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "Get a workflow instance returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:43.912Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows/bad-format", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"status\":\"400\",\"title\":\"Invalid Parameter\",\"detail\":\"invalid parameter \\\"workflowId\\\" in \\\"path\\\"; expected type \\\"uuid\\\"\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "Get an existing Workflow returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:43.998Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows/aaa11111-aa11-aa11-aaaa-aaaaaa111111", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"detail\":\"workflow not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Get an existing Workflow returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:44.094Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Cassette Workflow x-given", + "spec": { + "steps": [ + { + "actionId": "com.datadoghq.core.noop", + "name": "No_op" + } + ], + "triggers": [ + { + "startStepNames": [ + "No_op" + ], + "workflowTrigger": {} + } + ] + } + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dec8dfd0-2031-480a-90ce-4e9179b22793\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T17:23:44.222906Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"No_op\"],\"workflowTrigger\":{}}],\"steps\":[{\"name\":\"No_op\",\"actionId\":\"com.datadoghq.core.noop\"}]},\"tags\":[],\"updatedAt\":\"2025-05-26T17:23:44.222906Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows/dec8dfd0-2031-480a-90ce-4e9179b22793", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"dec8dfd0-2031-480a-90ce-4e9179b22793\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T17:23:44.222906Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"No_op\"],\"workflowTrigger\":{}}],\"steps\":[{\"name\":\"No_op\",\"actionId\":\"com.datadoghq.core.noop\"}]},\"tags\":[],\"updatedAt\":\"2025-05-26T17:23:44.222906Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/workflows/dec8dfd0-2031-480a-90ce-4e9179b22793", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Get an existing Workflow returns \"Successfully got a workflow.\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:58.870Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows/malformed/instances", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"code\":\"INVALID_FIELD_VALUE\",\"detail\":\"value is invalid for field workflow_id\"}]}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "Bad Request", + "status": 400 + } + } + ], + "scenario": "List workflow instances returns \"Bad Request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2024-07-24T18:39:59.003Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows/ccf73164-1998-4785-a7a3-8d06c7e5f558/instances", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"attributes\":{\"instanceStatus\":{\"detailsKind\":\"IN_PROGRESS\",\"displayName\":\"Running\"},\"source\":{\"api\":{\"actingUser\":{\"userEmail\":\"max.gale@datadoghq.com\",\"userName\":\"Max Gale\",\"userUuid\":\"e39535f4-306b-11ee-9383-6ac9a4415a29\"}}},\"startTimestamp\":\"2024-07-24T18:39:58.396793Z\"},\"id\":\"111e18d6-3f19-4ada-91d3-ab1e1546b8b4\",\"type\":\"instances\"},{\"attributes\":{\"endTimestamp\":\"2024-07-24T18:39:58.219283Z\",\"instanceStatus\":{\"detailsKind\":\"CANCELED\",\"displayName\":\"Canceled\"},\"source\":{\"manual\":{\"actingUser\":{\"userEmail\":\"max.gale@datadoghq.com\",\"userName\":\"Max Gale\",\"userUuid\":\"e39535f4-306b-11ee-9383-6ac9a4415a29\"}}},\"startTimestamp\":\"2024-07-24T18:38:31.326418Z\"},\"id\":\"305a472b-71ab-4ce8-8f8d-75db635627b5\",\"type\":\"instances\"}],\"meta\":{\"canceledCount\":1,\"failedCount\":0,\"page\":{\"totalCount\":2,\"totalFilteredCount\":2},\"succeededCount\":0}}\n" + }, + "headers": { + "content-type": "application/json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List workflow instances returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2026-06-01T20:36:33.245Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Cassette Workflow x-given", + "spec": { + "steps": [ + { + "actionId": "com.datadoghq.core.noop", + "name": "No_op" + } + ], + "triggers": [ + { + "startStepNames": [ + "No_op" + ], + "workflowTrigger": {} + } + ] + } + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"72ea47e5-3bf2-41a2-bf7b-1857908234b6\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2026-06-01T20:36:33.514948Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"No_op\"],\"workflowTrigger\":{}}],\"steps\":[{\"name\":\"No_op\",\"actionId\":\"com.datadoghq.core.noop\"}]},\"tags\":[],\"updatedAt\":\"2026-06-01T20:36:33.514948Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[{\"id\":\"72cfa149-f153-45bc-aad6-2f601b7bfd9b\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-25T11:21:13.41766Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-25T11:21:13.41766Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"fe8c24c3-6574-4cf9-a3ee-4d84dd9b4354\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-25T11:21:14.456399Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-25T11:21:14.456399Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"7049520d-e564-4f35-8955-1750577b508e\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-25T11:21:14.872733Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-25T11:21:14.872733Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"c0e61b1b-486a-498d-a6ef-5b18d713a022\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-07-28T11:14:25.070776Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-07-28T11:14:25.070776Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"ceaea4db-f9b7-4133-8049-734c20e08170\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-25T11:21:15.742156Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-25T11:21:15.742156Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"d5f402b6-c5b1-4d8f-ab32-b7102fb3ef5e\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-20T11:20:34.434583Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-20T11:20:34.434583Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"59006312-23ea-4467-9921-310d1a17c2d9\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-20T11:20:35.557523Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-20T11:20:35.557523Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"8e9f8221-5788-4f1a-a341-afe4a73e8d2d\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-20T11:20:35.915972Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-20T11:20:35.915972Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"73c21683-cf0b-4140-92b3-d3f1be896160\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-20T11:20:36.779377Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-20T11:20:36.779377Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"8cf1582b-d398-4d35-bbba-a4b957c3db30\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-21T11:16:44.847574Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-21T11:16:44.847574Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"58031916-ffdb-4021-8670-d78298875765\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-21T11:16:45.55826Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-21T11:16:45.55826Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"3b7de88e-731c-4d2f-80d9-32ed547dff86\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-21T11:16:45.777562Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-21T11:16:45.777562Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"a187147a-094a-443a-a811-7b106914ec96\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-21T11:16:46.261047Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-21T11:16:46.261047Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"b7c893dc-f694-41a7-aa2b-633ceca08c2f\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-07-02T11:22:01.701809Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-07-02T11:22:01.701809Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"1d598ddd-5b9b-4ab7-9f7a-5e2574404ec7\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-07-02T11:22:02.789201Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-07-02T11:22:02.789201Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"e8508f29-ced6-4f95-a348-2ac062177472\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-07-02T11:22:03.20927Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-07-02T11:22:03.20927Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"f6d3e46b-eeaf-4017-a865-e1f045deae3f\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-07-02T11:22:04.030122Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-07-02T11:22:04.030122Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"e5fe54aa-9e17-4200-a710-cd916bfd39db\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-24T11:13:41.595876Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-24T11:13:41.595876Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"615d90f0-3478-4748-b489-177a4e3e2b74\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-24T11:13:41.828316Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-24T11:13:41.828316Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"a7a049f3-4c58-4e30-8157-a3a9b3132843\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-24T11:13:41.921301Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-24T11:13:41.921301Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"a8a64e61-7a8e-46fb-83ae-4220c7aa33ca\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-24T11:13:42.204916Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-24T11:13:42.204916Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"a50f8797-df93-4227-968b-4a653602d405\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-03T11:15:35.801277Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-03T11:15:35.801277Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"5567b478-806b-4768-9a3f-2b4ac9ad04e4\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-03T11:15:36.152307Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-03T11:15:36.152307Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"7f306d13-6e65-4962-b89d-5acfe0ada98a\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-03T11:15:35.623566Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-03T11:15:35.623566Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"8e9be134-5307-451f-8e40-0cc2546b6ed2\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-06-03T11:15:35.127727Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-06-03T11:15:35.127727Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"98144b6c-fc26-4e13-9fd9-943619e791d8\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-09-23T11:13:25.508416Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-09-23T11:13:25.508416Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"f422939b-e916-46fc-ba26-d25e1dcd2c66\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-09-23T11:13:25.765614Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-09-23T11:13:25.765614Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"5480f5c0-6128-4a56-9801-37e2e44496db\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-20T11:16:34.563405Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-20T11:16:34.563405Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"f00c51f1-6b32-401a-8bd4-08e360f94278\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-20T11:16:33.073415Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-20T11:16:33.073415Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"27fae62b-27e0-4802-94f4-5fc2fdef43f7\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-20T11:16:33.978668Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-20T11:16:33.978668Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"c0ccd673-e34a-49dd-a16f-bac77817fa62\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-20T11:16:33.744349Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-20T11:16:33.744349Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"f7380a3f-dd8f-4811-ac33-3245e6ad7dec\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-28T11:13:45.369167Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-28T11:13:45.369167Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"03bda67d-2cee-4828-a152-b263085b59cd\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-22T11:13:37.2763Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-22T11:13:37.2763Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"06c78ee4-a4aa-402e-8940-63ef512490d8\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-22T11:13:36.897095Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-22T11:13:36.897095Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"7aa75a8b-17b9-4c7e-b5fa-194dcd5f54c9\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-22T11:13:36.579513Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-22T11:13:36.579513Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"81112f53-d69b-4139-8790-f2adf2d80260\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-22T11:13:36.994612Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-22T11:13:36.994612Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"ba03c9fa-aa23-436c-ac69-e20bde5fb108\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-28T11:13:45.553954Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-28T11:13:45.553954Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"cbe3cd7d-4902-4863-9aba-ac4cb9038995\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-28T11:13:45.659208Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-28T11:13:45.659208Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"4c1cc171-9757-4e67-874e-64c962ed5352\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-28T11:13:45.894752Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-28T11:13:45.894752Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"52bfc481-46b4-44c1-8392-a32f405c21be\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-07-03T11:21:31.639998Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-07-03T11:21:31.639998Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"a12f3d3d-2dfb-449f-b1da-9d73dcc1284f\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T11:16:57.708411Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-26T11:16:57.708411Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"5a3ee825-3f39-4842-978c-afb8c997ba76\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-30T11:19:54.84087Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-30T11:19:54.84087Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"5b6dc390-841e-46e2-ad18-29aa33cd0aa1\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-30T11:19:52.696163Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-30T11:19:52.696163Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"80d42530-2ef1-40bb-ba31-7c44a0159a92\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-27T11:17:22.645064Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-27T11:17:22.645064Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"a2d791d3-407a-468b-b1eb-f38676b238d9\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T11:16:56.170659Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-26T11:16:56.170659Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"08620ae9-44ed-43c3-9941-e3936f3fd68b\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T11:16:56.942366Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-26T11:16:56.942366Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"d3bba643-1ce2-44c3-8ccb-3ad7647ec64d\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T11:16:57.184285Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-26T11:16:57.184285Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"a7ba3c17-c21b-4e50-8109-ae258395fcf0\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-27T11:17:22.915147Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-27T11:17:22.915147Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"8222b63d-8c1d-49fd-b31a-f18c870785e8\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-27T11:17:23.444244Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-27T11:17:23.444244Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}},{\"id\":\"cb5040a1-b989-41bf-9a4f-59c75c0523e0\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-27T11:17:21.869589Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":null,\"tags\":[],\"updatedAt\":\"2025-05-27T11:17:21.869589Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"type\":\"users\"}}}}],\"meta\":{\"page\":{\"totalCount\":548,\"totalFilteredCount\":548}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/workflows/72ea47e5-3bf2-41a2-bf7b-1857908234b6", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "List workflows returns \"OK\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2026-06-01T21:52:42.662Z", + "interactions": [ + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "GET", + "path": "/api/v2/workflows", + "query": [ + [ + "filter[query]", + "Test-List_workflows_returns_OK_response_with_pagination-1780350762" + ], + [ + "limit", + "2" + ], + [ + "page", + "0" + ] + ] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":[],\"meta\":{\"page\":{\"totalCount\":547,\"totalFilteredCount\":0}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + } + ], + "scenario": "List workflows returns \"OK\" response with pagination", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:44.483Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Cassette Workflow x-given", + "spec": { + "steps": [ + { + "actionId": "com.datadoghq.core.noop", + "name": "No_op" + } + ], + "triggers": [ + { + "startStepNames": [ + "No_op" + ], + "workflowTrigger": {} + } + ] + } + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"b40d1eb8-5741-474c-a137-897f73527a77\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T17:23:44.603489Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"No_op\"],\"workflowTrigger\":{}}],\"steps\":[{\"name\":\"No_op\",\"actionId\":\"com.datadoghq.core.noop\"}]},\"tags\":[],\"updatedAt\":\"2025-05-26T17:23:44.603489Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "name": "Too many characters in description", + "spec": {} + }, + "id": "22222222-2222-2222-2222-222222222222", + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/workflows/b40d1eb8-5741-474c-a137-897f73527a77", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"detail\":\"workflow description exceeds size limit of [300] characters\"},{\"detail\":\"spec is invalid\"},{\"detail\":\"no trigger found. At least one trigger is required.\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Bad Request", + "status": 400 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/workflows/b40d1eb8-5741-474c-a137-897f73527a77", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an existing Workflow returns \"Bad request\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:44.853Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A sample workflow.", + "name": "Example Workflow", + "published": true, + "spec": { + "connectionEnvs": [ + { + "connections": [ + { + "connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", + "label": "INTEGRATION_DATADOG" + } + ], + "env": "default" + } + ], + "inputSchema": { + "parameters": [ + { + "defaultValue": "default", + "name": "input", + "type": "STRING" + } + ] + }, + "outputSchema": { + "parameters": [ + { + "name": "output", + "type": "ARRAY_OBJECT", + "value": "outputValue" + } + ] + }, + "steps": [ + { + "actionId": "com.datadoghq.dd.monitor.listMonitors", + "connectionLabel": "INTEGRATION_DATADOG", + "name": "Step1", + "outboundEdges": [ + { + "branchName": "main", + "nextStepName": "Step2" + } + ], + "parameters": [ + { + "name": "tags", + "value": "service:monitoring" + } + ] + }, + { + "actionId": "com.datadoghq.core.noop", + "name": "Step2" + } + ], + "triggers": [ + { + "monitorTrigger": { + "rateLimit": { + "count": 1, + "interval": "3600s" + } + }, + "startStepNames": [ + "Step1" + ] + }, + { + "githubWebhookTrigger": {}, + "startStepNames": [ + "Step1" + ] + } + ] + }, + "tags": [ + "team:infra", + "service:monitoring", + "foo:bar" + ] + }, + "id": "22222222-2222-2222-2222-222222222222", + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/workflows/aaa11111-aa11-aa11-aaaa-aaaaaa111111", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"errors\":[{\"detail\":\"workflow not found\"}]}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Not Found", + "status": 404 + } + } + ], + "scenario": "Update an existing Workflow returns \"Not found\" response", + "version": "v2" + }, + { + "feature": "Workflow Automation", + "frozen_at": "2025-05-26T17:23:44.981Z", + "interactions": [ + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "name": "Cassette Workflow x-given", + "spec": { + "steps": [ + { + "actionId": "com.datadoghq.core.noop", + "name": "No_op" + } + ], + "triggers": [ + { + "startStepNames": [ + "No_op" + ], + "workflowTrigger": {} + } + ] + } + }, + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "POST", + "path": "/api/v2/workflows", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a08f59a2-97d7-484e-8dda-b5abbb003869\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T17:23:45.112536Z\",\"description\":\"\",\"name\":\"Cassette Workflow x-given\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"No_op\"],\"workflowTrigger\":{}}],\"steps\":[{\"name\":\"No_op\",\"actionId\":\"com.datadoghq.core.noop\"}]},\"tags\":[],\"updatedAt\":\"2025-05-26T17:23:45.112536Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "Created", + "status": 201 + } + }, + { + "request": { + "body": { + "type": "json", + "value": { + "data": { + "attributes": { + "description": "A sample workflow.", + "name": "Example Workflow", + "published": true, + "spec": { + "connectionEnvs": [ + { + "connections": [ + { + "connectionId": "e1e64943-c7c5-4487-aece-25aaec7d3aad", + "label": "INTEGRATION_DATADOG" + } + ], + "env": "default" + } + ], + "inputSchema": { + "parameters": [ + { + "defaultValue": "default", + "name": "input", + "type": "STRING" + } + ] + }, + "outputSchema": { + "parameters": [ + { + "name": "output", + "type": "ARRAY_OBJECT", + "value": "outputValue" + } + ] + }, + "steps": [ + { + "actionId": "com.datadoghq.dd.monitor.listMonitors", + "connectionLabel": "INTEGRATION_DATADOG", + "name": "Step1", + "outboundEdges": [ + { + "branchName": "main", + "nextStepName": "Step2" + } + ], + "parameters": [ + { + "name": "tags", + "value": "service:monitoring" + } + ] + }, + { + "actionId": "com.datadoghq.core.noop", + "name": "Step2" + } + ], + "triggers": [ + { + "monitorTrigger": { + "rateLimit": { + "count": 1, + "interval": "3600s" + } + }, + "startStepNames": [ + "Step1" + ] + }, + { + "githubWebhookTrigger": {}, + "startStepNames": [ + "Step1" + ] + } + ] + }, + "tags": [ + "team:infra", + "service:monitoring", + "foo:bar" + ] + }, + "id": "22222222-2222-2222-2222-222222222222", + "type": "workflows" + } + } + }, + "content_type": "application/json", + "method": "PATCH", + "path": "/api/v2/workflows/a08f59a2-97d7-484e-8dda-b5abbb003869", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "{\"data\":{\"id\":\"a08f59a2-97d7-484e-8dda-b5abbb003869\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T17:23:45.112536Z\",\"description\":\"A sample workflow.\",\"name\":\"Example Workflow\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"Step1\"],\"monitorTrigger\":{\"rateLimit\":{\"count\":1,\"interval\":\"3600s\"}}},{\"startStepNames\":[\"Step1\"],\"githubWebhookTrigger\":{}}],\"steps\":[{\"name\":\"Step1\",\"actionId\":\"com.datadoghq.dd.monitor.listMonitors\",\"connectionLabel\":\"INTEGRATION_DATADOG\",\"parameters\":[{\"name\":\"tags\",\"value\":\"service:monitoring\"}],\"outboundEdges\":[{\"nextStepName\":\"Step2\",\"branchName\":\"main\"}]},{\"name\":\"Step2\",\"actionId\":\"com.datadoghq.core.noop\"}],\"connectionEnvs\":[{\"env\":\"default\",\"connections\":[{\"connectionId\":\"e1e64943-c7c5-4487-aece-25aaec7d3aad\",\"label\":\"INTEGRATION_DATADOG\"}]}],\"inputSchema\":{\"parameters\":[{\"name\":\"input\",\"type\":\"STRING\",\"defaultValue\":\"default\"}]},\"outputSchema\":{\"parameters\":[{\"name\":\"output\",\"type\":\"ARRAY_OBJECT\",\"value\":\"outputValue\"}]}},\"tags\":[\"foo:bar\",\"service:monitoring\",\"team:infra\"],\"updatedAt\":\"2025-05-26T17:23:45.365681Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}" + }, + "headers": { + "content-type": "application/vnd.api+json" + }, + "reason": "OK", + "status": 200 + } + }, + { + "request": { + "body": { + "type": "empty", + "value": null + }, + "content_type": "", + "method": "DELETE", + "path": "/api/v2/workflows/a08f59a2-97d7-484e-8dda-b5abbb003869", + "query": [] + }, + "response": { + "body": { + "encoding": "text", + "value": "" + }, + "headers": {}, + "reason": "No Content", + "status": 204 + } + } + ], + "scenario": "Update an existing Workflow returns \"Successfully updated a workflow.\" response", + "version": "v2" + } + ], + "schema_version": 1, + "version": "v2" +}